From 44d89d205c6d3994b13b9e490d0cea0c902ed9ec Mon Sep 17 00:00:00 2001 From: drjones Date: Sat, 13 Jun 2026 19:10:10 -0700 Subject: [PATCH] Production readiness, SEO enhancements, and Engine V2 upgrades --- dist/assets/html2canvas-B1jts0tz.js | 5 - dist/assets/index-ByeRn8F-.css | 2 - dist/assets/index-MP_hm0Gm.js | 4724 - dist/assets/index.es-Dm4MvI1O.js | 5 - dist/assets/purify.es-DlxR2Lg_.js | 3 - dist/index.html | 65 +- index.html | 57 +- node_modules/.package-lock.json | 12 + node_modules/.vite/deps/@react-three_drei.js | 23106 ++- .../.vite/deps/@react-three_drei.js.map | 2 +- node_modules/.vite/deps/@react-three_fiber.js | 2 +- node_modules/.vite/deps/_metadata.json | 46 +- node_modules/.vite/deps/react-dom_client.js | 2 +- .../deps/react-three-fiber.esm-CjFO8AMT.js | 9576 - .../react-three-fiber.esm-CjFO8AMT.js.map | 1 - .../.vite/deps/three-stdlib-BHZ1qH6e.js | 147672 --------------- .../.vite/deps/three-stdlib-BHZ1qH6e.js.map | 1 - node_modules/.vite/deps/three-stdlib.js | 2 - package-lock.json | 13 + package.json | 1 + public/manifest.json | 16 + public/robots.txt | 4 + public/sitemap.xml | 8 + server/db.js | 3 + server/index.js | 23 + src/components/ErrorBoundary.tsx | 53 + src/components/PropertiesPanel.tsx | 22 +- src/components/StatusPanel.tsx | 15 +- src/environment/roomMetrics.ts | 43 +- src/main.tsx | 5 +- src/parts/catalog.ts | 6 +- src/simulation/flowSimulator.ts | 68 +- src/types.ts | 1 + vite.config.ts | 13 + 34 files changed, 23521 insertions(+), 162056 deletions(-) delete mode 100644 dist/assets/html2canvas-B1jts0tz.js delete mode 100644 dist/assets/index-ByeRn8F-.css delete mode 100644 dist/assets/index-MP_hm0Gm.js delete mode 100644 dist/assets/index.es-Dm4MvI1O.js delete mode 100644 dist/assets/purify.es-DlxR2Lg_.js delete mode 100644 node_modules/.vite/deps/react-three-fiber.esm-CjFO8AMT.js delete mode 100644 node_modules/.vite/deps/react-three-fiber.esm-CjFO8AMT.js.map delete mode 100644 node_modules/.vite/deps/three-stdlib-BHZ1qH6e.js delete mode 100644 node_modules/.vite/deps/three-stdlib-BHZ1qH6e.js.map delete mode 100644 node_modules/.vite/deps/three-stdlib.js create mode 100644 public/manifest.json create mode 100644 public/robots.txt create mode 100644 public/sitemap.xml create mode 100644 src/components/ErrorBoundary.tsx diff --git a/dist/assets/html2canvas-B1jts0tz.js b/dist/assets/html2canvas-B1jts0tz.js deleted file mode 100644 index 89b67b64..00000000 --- a/dist/assets/html2canvas-B1jts0tz.js +++ /dev/null @@ -1,5 +0,0 @@ -import{n as e}from"./index-MP_hm0Gm.js";var t=e(((e,t)=>{(function(n,r){typeof e==`object`&&t!==void 0?t.exports=r():typeof define==`function`&&define.amd?define(r):(n=typeof globalThis<`u`?globalThis:n||self,n.html2canvas=r())})(e,(function(){var e=function(t,n){return e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])},e(t,n)};function t(t,n){if(typeof n!=`function`&&n!==null)throw TypeError(`Class extends value `+String(n)+` is not a constructor or null`);e(t,n);function r(){this.constructor=t}t.prototype=n===null?Object.create(n):(r.prototype=n.prototype,new r)}var n=function(){return n=Object.assign||function(e){for(var t,n=1,r=arguments.length;n0&&a[a.length-1]))&&(o[0]===6||o[0]===2)){n=0;continue}if(o[0]===3&&(!a||o[1]>a[0]&&o[1]=55296&&i<=56319&&n>10)+55296,a%1024+56320)),(r+1===t||n.length>16384)&&(i+=String.fromCharCode.apply(String,n),n.length=0)}return i},d=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`,f=typeof Uint8Array>`u`?[]:new Uint8Array(256),p=0;p`u`?[]:new Uint8Array(256),g=0;g>4,u[i++]=(o&15)<<4|s>>2,u[i++]=(s&3)<<6|c&63;return l},v=function(e){for(var t=e.length,n=[],r=0;r>b,T=(1<>b)+32,D=65536>>x,O=(1<=0){if(e<55296||e>56319&&e<=65535)return t=this.index[e>>b],t=(t<>b)],t=(t<>x),t=this.index[t],t+=e>>b&O,t=this.index[t],t=(t<`u`?[]:new Uint8Array(256),oe=0;oece?(i.push(!0),o-=ce):i.push(!1),[`normal`,`auto`,`loose`].indexOf(t)!==-1&&[8208,8211,12316,12448].indexOf(e)!==-1)return r.push(a),n.push(Ce);if(o===fe||o===ve){if(a===0)return r.push(a),n.push(Ie);var s=n[a-1];return rt.indexOf(s)===-1?(r.push(r[a-1]),n.push(s)):(r.push(a),n.push(Ie))}if(r.push(a),o===Le)return n.push(t===`strict`?Oe:Ue);if(o===Je||o===Fe)return n.push(Ie);if(o===Ye)return e>=131072&&e<=196605||e>=196608&&e<=262141?n.push(Ue):n.push(Ie);n.push(o)}),[r,n,i]},st=function(e,t,n,r){var i=r[n];if(Array.isArray(e)?e.indexOf(i)!==-1:e===i)for(var a=n;a<=r.length;){a++;var o=r[a];if(o===t)return!0;if(o!==_e)break}if(i===_e)for(var a=n;a>0;){a--;var s=r[a];if(Array.isArray(e)?e.indexOf(s)!==-1:e===s)for(var c=n;c<=r.length;){c++;var o=r[c];if(o===t)return!0;if(o!==_e)break}if(s!==_e)break}return!1},ct=function(e,t){for(var n=e;n>=0;){var r=t[n];if(r===_e)n--;else return r}return 0},lt=function(e,t,n,r,i){if(n[r]===0)return A;var a=r-1;if(Array.isArray(i)&&i[a]===!0)return A;var o=a-1,s=a+1,c=t[a],l=o>=0?t[o]:0,u=t[s];if(c===ue&&u===de)return A;if(et.indexOf(c)!==-1)return Ze;if(et.indexOf(u)!==-1||tt.indexOf(u)!==-1)return A;if(ct(a,t)===he)return Qe;if($e.get(e[a])===ve||(c===Re||c===ze)&&$e.get(e[s])===ve||c===me||u===me||c===ge||[_e,be,Se].indexOf(c)===-1&&u===ge||[we,Te,Ee,je,Pe].indexOf(u)!==-1||ct(a,t)===ke||st(Ae,ke,a,t)||st([we,Te],Oe,a,t)||st(ye,ye,a,t))return A;if(c===_e)return Qe;if(c===Ae||u===Ae)return A;if(u===Ce||c===Ce)return Qe;if([be,Se,Oe].indexOf(u)!==-1||c===xe||l===He&&at.indexOf(c)!==-1||c===Pe&&u===He||u===De||j.indexOf(u)!==-1&&c===k||j.indexOf(c)!==-1&&u===k||c===Ne&&[Ue,Re,ze].indexOf(u)!==-1||[Ue,Re,ze].indexOf(c)!==-1&&u===Me||j.indexOf(c)!==-1&&nt.indexOf(u)!==-1||nt.indexOf(c)!==-1&&j.indexOf(u)!==-1||[Ne,Me].indexOf(c)!==-1&&(u===k||[ke,Se].indexOf(u)!==-1&&t[s+1]===k)||[ke,Se].indexOf(c)!==-1&&u===k||c===k&&[k,Pe,je].indexOf(u)!==-1)return A;if([k,Pe,je,we,Te].indexOf(u)!==-1)for(var d=a;d>=0;){var f=t[d];if(f===k)return A;if([Pe,je].indexOf(f)!==-1)d--;else break}if([Ne,Me].indexOf(u)!==-1)for(var d=[we,Te].indexOf(c)===-1?a:o;d>=0;){var f=t[d];if(f===k)return A;if([Pe,je].indexOf(f)!==-1)d--;else break}if(We===c&&[We,Ge,Be,Ve].indexOf(u)!==-1||[Ge,Be].indexOf(c)!==-1&&[Ge,Ke].indexOf(u)!==-1||[Ke,Ve].indexOf(c)!==-1&&u===Ke||it.indexOf(c)!==-1&&[De,Me].indexOf(u)!==-1||it.indexOf(u)!==-1&&c===Ne||j.indexOf(c)!==-1&&j.indexOf(u)!==-1||c===je&&j.indexOf(u)!==-1||j.concat(k).indexOf(c)!==-1&&u===ke&&Xe.indexOf(e[s])===-1||j.concat(k).indexOf(u)!==-1&&c===Te)return A;if(c===qe&&u===qe){for(var p=n[a],m=1;p>0&&(p--,t[p]===qe);)m++;if(m%2!=0)return A}return c===Re&&u===ze?A:Qe},ut=function(e,t){t||={lineBreak:`normal`,wordBreak:`normal`};var n=ot(e,t.lineBreak),r=n[0],i=n[1],a=n[2];(t.wordBreak===`break-all`||t.wordBreak===`break-word`)&&(i=i.map(function(e){return[k,Ie,Je].indexOf(e)===-1?e:Ue}));var o=t.wordBreak===`keep-all`?a.map(function(t,n){return t&&e[n]>=19968&&e[n]<=40959}):void 0;return[r,i,o]},dt=function(){function e(e,t,n,r){this.codePoints=e,this.required=t===Ze,this.start=n,this.end=r}return e.prototype.slice=function(){return u.apply(void 0,this.codePoints.slice(this.start,this.end))},e}(),ft=function(e,t){var n=l(e),r=ut(n,t),i=r[0],a=r[1],o=r[2],s=n.length,c=0,u=0;return{next:function(){if(u>=s)return{done:!0,value:null};for(var e=A;u=rn&&e<=57},hn=function(e){return e>=55296&&e<=57343},gn=function(e){return P(e)||e>=un&&e<=fn||e>=an&&e<=sn},_n=function(e){return e>=an&&e<=ln},vn=function(e){return e>=un&&e<=mn},yn=function(e){return _n(e)||vn(e)},bn=function(e){return e>=Ut},xn=function(e){return e===_t||e===bt||e===xt},Sn=function(e){return yn(e)||bn(e)||e===At},Cn=function(e){return Sn(e)||P(e)||e===M},wn=function(e){return e>=Zt&&e<=Qt||e===$t||e>=en&&e<=tn||e===nn},Tn=function(e,t){return e===yt?t!==_t:!1},En=function(e,t,n){return e===M?Sn(t)||Tn(t,n):Sn(e)?!0:!!(e===yt&&Tn(e,t))},Dn=function(e,t,n){return e===Kt||e===M?P(t)?!0:t===Xt&&P(n):P(e===Xt?t:e)},On=function(e){var t=0,n=1;(e[t]===Kt||e[t]===M)&&(e[t]===M&&(n=-1),t++);for(var r=[];P(e[t]);)r.push(e[t++]);var i=r.length?parseInt(u.apply(void 0,r),10):0;e[t]===Xt&&t++;for(var a=[];P(e[t]);)a.push(e[t++]);var o=a.length,s=o?parseInt(u.apply(void 0,a),10):0;(e[t]===dn||e[t]===on)&&t++;var c=1;(e[t]===Kt||e[t]===M)&&(e[t]===M&&(c=-1),t++);for(var l=[];P(e[t]);)l.push(e[t++]);var d=l.length?parseInt(u.apply(void 0,l),10):0;return n*(i+s*10**-o)*10**(c*d)},kn={type:2},An={type:3},jn={type:4},Mn={type:13},Nn={type:8},Pn={type:21},Fn={type:9},In={type:10},Ln={type:11},Rn={type:12},zn={type:14},Bn={type:23},Vn={type:1},Hn={type:25},Un={type:24},Wn={type:26},Gn={type:27},Kn={type:28},qn={type:29},Jn={type:31},Yn={type:32},Xn=function(){function e(){this._value=[]}return e.prototype.write=function(e){this._value=this._value.concat(l(e))},e.prototype.read=function(){for(var e=[],t=this.consumeToken();t!==Yn;)e.push(t),t=this.consumeToken();return e},e.prototype.consumeToken=function(){var e=this.consumeCodePoint();switch(e){case St:return this.consumeStringToken(St);case wt:var t=this.peekCodePoint(0),n=this.peekCodePoint(1),r=this.peekCodePoint(2);if(Cn(t)||Tn(n,r)){var i=En(t,n,r)?mt:pt,a=this.consumeName();return{type:5,value:a,flags:i}}break;case Tt:if(this.peekCodePoint(0)===Ct)return this.consumeCodePoint(),Mn;break;case Dt:return this.consumeStringToken(Dt);case Ot:return kn;case kt:return An;case Gt:if(this.peekCodePoint(0)===Ct)return this.consumeCodePoint(),zn;break;case Kt:if(Dn(e,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(e),this.consumeNumericToken();break;case qt:return jn;case M:var o=e,s=this.peekCodePoint(0),c=this.peekCodePoint(1);if(Dn(o,s,c))return this.reconsumeCodePoint(e),this.consumeNumericToken();if(En(o,s,c))return this.reconsumeCodePoint(e),this.consumeIdentLikeToken();if(s===M&&c===Nt)return this.consumeCodePoint(),this.consumeCodePoint(),Un;break;case Xt:if(Dn(e,this.peekCodePoint(0),this.peekCodePoint(1)))return this.reconsumeCodePoint(e),this.consumeNumericToken();break;case vt:if(this.peekCodePoint(0)===Gt)for(this.consumeCodePoint();;){var l=this.consumeCodePoint();if(l===Gt&&(l=this.consumeCodePoint(),l===vt)||l===N)return this.consumeToken()}break;case Jt:return Wn;case Yt:return Gn;case Mt:if(this.peekCodePoint(0)===jt&&this.peekCodePoint(1)===M&&this.peekCodePoint(2)===M)return this.consumeCodePoint(),this.consumeCodePoint(),Hn;break;case Pt:if(En(this.peekCodePoint(0),this.peekCodePoint(1),this.peekCodePoint(2))){var a=this.consumeName();return{type:7,value:a}}break;case Ft:return Kn;case yt:if(Tn(e,this.peekCodePoint(0)))return this.reconsumeCodePoint(e),this.consumeIdentLikeToken();break;case It:return qn;case Lt:if(this.peekCodePoint(0)===Ct)return this.consumeCodePoint(),Nn;break;case Rt:return Ln;case Bt:return Rn;case cn:case pn:var d=this.peekCodePoint(0),f=this.peekCodePoint(1);return d===Kt&&(gn(f)||f===zt)&&(this.consumeCodePoint(),this.consumeUnicodeRangeToken()),this.reconsumeCodePoint(e),this.consumeIdentLikeToken();case Vt:if(this.peekCodePoint(0)===Ct)return this.consumeCodePoint(),Fn;if(this.peekCodePoint(0)===Vt)return this.consumeCodePoint(),Pn;break;case Ht:if(this.peekCodePoint(0)===Ct)return this.consumeCodePoint(),In;break;case N:return Yn}return xn(e)?(this.consumeWhiteSpace(),Jn):P(e)?(this.reconsumeCodePoint(e),this.consumeNumericToken()):Sn(e)?(this.reconsumeCodePoint(e),this.consumeIdentLikeToken()):{type:6,value:u(e)}},e.prototype.consumeCodePoint=function(){var e=this._value.shift();return e===void 0?-1:e},e.prototype.reconsumeCodePoint=function(e){this._value.unshift(e)},e.prototype.peekCodePoint=function(e){return e>=this._value.length?-1:this._value[e]},e.prototype.consumeUnicodeRangeToken=function(){for(var e=[],t=this.consumeCodePoint();gn(t)&&e.length<6;)e.push(t),t=this.consumeCodePoint();for(var n=!1;t===zt&&e.length<6;)e.push(t),t=this.consumeCodePoint(),n=!0;if(n){var r=parseInt(u.apply(void 0,e.map(function(e){return e===zt?rn:e})),16),i=parseInt(u.apply(void 0,e.map(function(e){return e===zt?fn:e})),16);return{type:30,start:r,end:i}}var a=parseInt(u.apply(void 0,e),16);if(this.peekCodePoint(0)===M&&gn(this.peekCodePoint(1))){this.consumeCodePoint(),t=this.consumeCodePoint();for(var o=[];gn(t)&&o.length<6;)o.push(t),t=this.consumeCodePoint();var i=parseInt(u.apply(void 0,o),16);return{type:30,start:a,end:i}}else return{type:30,start:a,end:a}},e.prototype.consumeIdentLikeToken=function(){var e=this.consumeName();return e.toLowerCase()===`url`&&this.peekCodePoint(0)===Ot?(this.consumeCodePoint(),this.consumeUrlToken()):this.peekCodePoint(0)===Ot?(this.consumeCodePoint(),{type:19,value:e}):{type:20,value:e}},e.prototype.consumeUrlToken=function(){var e=[];if(this.consumeWhiteSpace(),this.peekCodePoint(0)===N)return{type:22,value:``};var t=this.peekCodePoint(0);if(t===Dt||t===St){var n=this.consumeStringToken(this.consumeCodePoint());return n.type===0&&(this.consumeWhiteSpace(),this.peekCodePoint(0)===N||this.peekCodePoint(0)===kt)?(this.consumeCodePoint(),{type:22,value:n.value}):(this.consumeBadUrlRemnants(),Bn)}for(;;){var r=this.consumeCodePoint();if(r===N||r===kt)return{type:22,value:u.apply(void 0,e)};if(xn(r))return this.consumeWhiteSpace(),this.peekCodePoint(0)===N||this.peekCodePoint(0)===kt?(this.consumeCodePoint(),{type:22,value:u.apply(void 0,e)}):(this.consumeBadUrlRemnants(),Bn);if(r===St||r===Dt||r===Ot||wn(r))return this.consumeBadUrlRemnants(),Bn;if(r===yt)if(Tn(r,this.peekCodePoint(0)))e.push(this.consumeEscapedCodePoint());else return this.consumeBadUrlRemnants(),Bn;else e.push(r)}},e.prototype.consumeWhiteSpace=function(){for(;xn(this.peekCodePoint(0));)this.consumeCodePoint()},e.prototype.consumeBadUrlRemnants=function(){for(;;){var e=this.consumeCodePoint();if(e===kt||e===N)return;Tn(e,this.peekCodePoint(0))&&this.consumeEscapedCodePoint()}},e.prototype.consumeStringSlice=function(e){for(var t=5e4,n=``;e>0;){var r=Math.min(t,e);n+=u.apply(void 0,this._value.splice(0,r)),e-=r}return this._value.shift(),n},e.prototype.consumeStringToken=function(e){var t=``,n=0;do{var r=this._value[n];if(r===N||r===void 0||r===e)return t+=this.consumeStringSlice(n),{type:0,value:t};if(r===_t)return this._value.splice(0,n),Vn;if(r===yt){var i=this._value[n+1];i!==N&&i!==void 0&&(i===_t?(t+=this.consumeStringSlice(n),n=-1,this._value.shift()):Tn(r,i)&&(t+=this.consumeStringSlice(n),t+=u(this.consumeEscapedCodePoint()),n=-1))}n++}while(!0)},e.prototype.consumeNumber=function(){var e=[],t=ht,n=this.peekCodePoint(0);for((n===Kt||n===M)&&e.push(this.consumeCodePoint());P(this.peekCodePoint(0));)e.push(this.consumeCodePoint());n=this.peekCodePoint(0);var r=this.peekCodePoint(1);if(n===Xt&&P(r))for(e.push(this.consumeCodePoint(),this.consumeCodePoint()),t=gt;P(this.peekCodePoint(0));)e.push(this.consumeCodePoint());n=this.peekCodePoint(0),r=this.peekCodePoint(1);var i=this.peekCodePoint(2);if((n===dn||n===on)&&((r===Kt||r===M)&&P(i)||P(r)))for(e.push(this.consumeCodePoint(),this.consumeCodePoint()),t=gt;P(this.peekCodePoint(0));)e.push(this.consumeCodePoint());return[On(e),t]},e.prototype.consumeNumericToken=function(){var e=this.consumeNumber(),t=e[0],n=e[1],r=this.peekCodePoint(0);return En(r,this.peekCodePoint(1),this.peekCodePoint(2))?{type:15,number:t,flags:n,unit:this.consumeName()}:r===Et?(this.consumeCodePoint(),{type:16,number:t,flags:n}):{type:17,number:t,flags:n}},e.prototype.consumeEscapedCodePoint=function(){var e=this.consumeCodePoint();if(gn(e)){for(var t=u(e);gn(this.peekCodePoint(0))&&t.length<6;)t+=u(this.consumeCodePoint());xn(this.peekCodePoint(0))&&this.consumeCodePoint();var n=parseInt(t,16);return n===0||hn(n)||n>1114111?Wt:n}return e===N?Wt:e},e.prototype.consumeName=function(){for(var e=``;;){var t=this.consumeCodePoint();if(Cn(t))e+=u(t);else if(Tn(t,this.peekCodePoint(0)))e+=u(this.consumeEscapedCodePoint());else return this.reconsumeCodePoint(t),e}},e}(),Zn=function(){function e(e){this._tokens=e}return e.create=function(t){var n=new Xn;return n.write(t),new e(n.read())},e.parseValue=function(t){return e.create(t).parseComponentValue()},e.parseValues=function(t){return e.create(t).parseComponentValues()},e.prototype.parseComponentValue=function(){for(var e=this.consumeToken();e.type===31;)e=this.consumeToken();if(e.type===32)throw SyntaxError(`Error parsing CSS component value, unexpected EOF`);this.reconsumeToken(e);var t=this.consumeComponentValue();do e=this.consumeToken();while(e.type===31);if(e.type===32)return t;throw SyntaxError(`Error parsing CSS component value, multiple values found when expecting only one`)},e.prototype.parseComponentValues=function(){for(var e=[];;){var t=this.consumeComponentValue();if(t.type===32)return e;e.push(t),e.push()}},e.prototype.consumeComponentValue=function(){var e=this.consumeToken();switch(e.type){case 11:case 28:case 2:return this.consumeSimpleBlock(e.type);case 19:return this.consumeFunction(e)}return e},e.prototype.consumeSimpleBlock=function(e){for(var t={type:e,values:[]},n=this.consumeToken();;){if(n.type===32||ir(n,e))return t;this.reconsumeToken(n),t.values.push(this.consumeComponentValue()),n=this.consumeToken()}},e.prototype.consumeFunction=function(e){for(var t={name:e.value,values:[],type:18};;){var n=this.consumeToken();if(n.type===32||n.type===3)return t;this.reconsumeToken(n),t.values.push(this.consumeComponentValue())}},e.prototype.consumeToken=function(){var e=this._tokens.shift();return e===void 0?Yn:e},e.prototype.reconsumeToken=function(e){this._tokens.unshift(e)},e}(),Qn=function(e){return e.type===15},$n=function(e){return e.type===17},F=function(e){return e.type===20},er=function(e){return e.type===0},tr=function(e,t){return F(e)&&e.value===t},nr=function(e){return e.type!==31},rr=function(e){return e.type!==31&&e.type!==4},I=function(e){var t=[],n=[];return e.forEach(function(e){if(e.type===4){if(n.length===0)throw Error(`Error parsing function args, zero tokens for arg`);t.push(n),n=[];return}e.type!==31&&n.push(e)}),n.length&&t.push(n),t},ir=function(e,t){return t===11&&e.type===12||t===28&&e.type===29?!0:t===2&&e.type===3},ar=function(e){return e.type===17||e.type===15},L=function(e){return e.type===16||ar(e)},or=function(e){return e.length>1?[e[0],e[1]]:[e[0]]},R={type:17,number:0,flags:ht},sr={type:16,number:50,flags:ht},cr={type:16,number:100,flags:ht},lr=function(e,t,n){var r=e[0],i=e[1];return[z(r,t),z(i===void 0?r:i,n)]},z=function(e,t){if(e.type===16)return e.number/100*t;if(Qn(e))switch(e.unit){case`rem`:case`em`:return 16*e.number;default:return e.number}return e.number},ur=`deg`,dr=`grad`,fr=`rad`,pr=`turn`,mr={name:`angle`,parse:function(e,t){if(t.type===15)switch(t.unit){case ur:return Math.PI*t.number/180;case dr:return Math.PI/200*t.number;case fr:return t.number;case pr:return Math.PI*2*t.number}throw Error(`Unsupported angle type`)}},hr=function(e){return e.type===15&&(e.unit===ur||e.unit===dr||e.unit===fr||e.unit===pr)},gr=function(e){switch(e.filter(F).map(function(e){return e.value}).join(` `)){case`to bottom right`:case`to right bottom`:case`left top`:case`top left`:return[R,R];case`to top`:case`bottom`:return B(0);case`to bottom left`:case`to left bottom`:case`right top`:case`top right`:return[R,cr];case`to right`:case`left`:return B(90);case`to top left`:case`to left top`:case`right bottom`:case`bottom right`:return[cr,cr];case`to bottom`:case`top`:return B(180);case`to top right`:case`to right top`:case`left bottom`:case`bottom left`:return[cr,R];case`to left`:case`right`:return B(270)}return 0},B=function(e){return Math.PI*e/180},_r={name:`color`,parse:function(e,t){if(t.type===18){var n=wr[t.name];if(n===void 0)throw Error(`Attempting to parse an unsupported color function "`+t.name+`"`);return n(e,t.values)}if(t.type===5){if(t.value.length===3){var r=t.value.substring(0,1),i=t.value.substring(1,2),a=t.value.substring(2,3);return yr(parseInt(r+r,16),parseInt(i+i,16),parseInt(a+a,16),1)}if(t.value.length===4){var r=t.value.substring(0,1),i=t.value.substring(1,2),a=t.value.substring(2,3),o=t.value.substring(3,4);return yr(parseInt(r+r,16),parseInt(i+i,16),parseInt(a+a,16),parseInt(o+o,16)/255)}if(t.value.length===6){var r=t.value.substring(0,2),i=t.value.substring(2,4),a=t.value.substring(4,6);return yr(parseInt(r,16),parseInt(i,16),parseInt(a,16),1)}if(t.value.length===8){var r=t.value.substring(0,2),i=t.value.substring(2,4),a=t.value.substring(4,6),o=t.value.substring(6,8);return yr(parseInt(r,16),parseInt(i,16),parseInt(a,16),parseInt(o,16)/255)}}if(t.type===20){var s=H[t.value.toUpperCase()];if(s!==void 0)return s}return H.TRANSPARENT}},vr=function(e){return(255&e)==0},V=function(e){var t=255&e,n=255&e>>8,r=255&e>>16,i=255&e>>24;return t<255?`rgba(`+i+`,`+r+`,`+n+`,`+t/255+`)`:`rgb(`+i+`,`+r+`,`+n+`)`},yr=function(e,t,n,r){return(e<<24|t<<16|n<<8|Math.round(r*255)<<0)>>>0},br=function(e,t){if(e.type===17)return e.number;if(e.type===16){var n=t===3?1:255;return t===3?e.number/100*n:Math.round(e.number/100*n)}return 0},xr=function(e,t){var n=t.filter(rr);if(n.length===3){var r=n.map(br),i=r[0],a=r[1],o=r[2];return yr(i,a,o,1)}if(n.length===4){var s=n.map(br),i=s[0],a=s[1],o=s[2],c=s[3];return yr(i,a,o,c)}return 0};function Sr(e,t,n){return n<0&&(n+=1),n>=1&&--n,n<1/6?(t-e)*n*6+e:n<1/2?t:n<2/3?(t-e)*6*(2/3-n)+e:e}var Cr=function(e,t){var n=t.filter(rr),r=n[0],i=n[1],a=n[2],o=n[3],s=(r.type===17?B(r.number):mr.parse(e,r))/(Math.PI*2),c=L(i)?i.number/100:0,l=L(a)?a.number/100:0,u=o!==void 0&&L(o)?z(o,1):1;if(c===0)return yr(l*255,l*255,l*255,1);var d=l<=.5?l*(c+1):l+c-l*c,f=l*2-d,p=Sr(f,d,s+1/3),m=Sr(f,d,s),h=Sr(f,d,s-1/3);return yr(p*255,m*255,h*255,u)},wr={hsl:Cr,hsla:Cr,rgb:xr,rgba:xr},Tr=function(e,t){return _r.parse(e,Zn.create(t).parseComponentValue())},H={ALICEBLUE:4042850303,ANTIQUEWHITE:4209760255,AQUA:16777215,AQUAMARINE:2147472639,AZURE:4043309055,BEIGE:4126530815,BISQUE:4293182719,BLACK:255,BLANCHEDALMOND:4293643775,BLUE:65535,BLUEVIOLET:2318131967,BROWN:2771004159,BURLYWOOD:3736635391,CADETBLUE:1604231423,CHARTREUSE:2147418367,CHOCOLATE:3530104575,CORAL:4286533887,CORNFLOWERBLUE:1687547391,CORNSILK:4294499583,CRIMSON:3692313855,CYAN:16777215,DARKBLUE:35839,DARKCYAN:9145343,DARKGOLDENROD:3095837695,DARKGRAY:2846468607,DARKGREEN:6553855,DARKGREY:2846468607,DARKKHAKI:3182914559,DARKMAGENTA:2332068863,DARKOLIVEGREEN:1433087999,DARKORANGE:4287365375,DARKORCHID:2570243327,DARKRED:2332033279,DARKSALMON:3918953215,DARKSEAGREEN:2411499519,DARKSLATEBLUE:1211993087,DARKSLATEGRAY:793726975,DARKSLATEGREY:793726975,DARKTURQUOISE:13554175,DARKVIOLET:2483082239,DEEPPINK:4279538687,DEEPSKYBLUE:12582911,DIMGRAY:1768516095,DIMGREY:1768516095,DODGERBLUE:512819199,FIREBRICK:2988581631,FLORALWHITE:4294635775,FORESTGREEN:579543807,FUCHSIA:4278255615,GAINSBORO:3705462015,GHOSTWHITE:4177068031,GOLD:4292280575,GOLDENROD:3668254975,GRAY:2155905279,GREEN:8388863,GREENYELLOW:2919182335,GREY:2155905279,HONEYDEW:4043305215,HOTPINK:4285117695,INDIANRED:3445382399,INDIGO:1258324735,IVORY:4294963455,KHAKI:4041641215,LAVENDER:3873897215,LAVENDERBLUSH:4293981695,LAWNGREEN:2096890111,LEMONCHIFFON:4294626815,LIGHTBLUE:2916673279,LIGHTCORAL:4034953471,LIGHTCYAN:3774873599,LIGHTGOLDENRODYELLOW:4210742015,LIGHTGRAY:3553874943,LIGHTGREEN:2431553791,LIGHTGREY:3553874943,LIGHTPINK:4290167295,LIGHTSALMON:4288707327,LIGHTSEAGREEN:548580095,LIGHTSKYBLUE:2278488831,LIGHTSLATEGRAY:2005441023,LIGHTSLATEGREY:2005441023,LIGHTSTEELBLUE:2965692159,LIGHTYELLOW:4294959359,LIME:16711935,LIMEGREEN:852308735,LINEN:4210091775,MAGENTA:4278255615,MAROON:2147483903,MEDIUMAQUAMARINE:1724754687,MEDIUMBLUE:52735,MEDIUMORCHID:3126187007,MEDIUMPURPLE:2473647103,MEDIUMSEAGREEN:1018393087,MEDIUMSLATEBLUE:2070474495,MEDIUMSPRINGGREEN:16423679,MEDIUMTURQUOISE:1221709055,MEDIUMVIOLETRED:3340076543,MIDNIGHTBLUE:421097727,MINTCREAM:4127193855,MISTYROSE:4293190143,MOCCASIN:4293178879,NAVAJOWHITE:4292783615,NAVY:33023,OLDLACE:4260751103,OLIVE:2155872511,OLIVEDRAB:1804477439,ORANGE:4289003775,ORANGERED:4282712319,ORCHID:3664828159,PALEGOLDENROD:4008225535,PALEGREEN:2566625535,PALETURQUOISE:2951671551,PALEVIOLETRED:3681588223,PAPAYAWHIP:4293907967,PEACHPUFF:4292524543,PERU:3448061951,PINK:4290825215,PLUM:3718307327,POWDERBLUE:2967529215,PURPLE:2147516671,REBECCAPURPLE:1714657791,RED:4278190335,ROSYBROWN:3163525119,ROYALBLUE:1097458175,SADDLEBROWN:2336560127,SALMON:4202722047,SANDYBROWN:4104413439,SEAGREEN:780883967,SEASHELL:4294307583,SIENNA:2689740287,SILVER:3233857791,SKYBLUE:2278484991,SLATEBLUE:1784335871,SLATEGRAY:1887473919,SLATEGREY:1887473919,SNOW:4294638335,SPRINGGREEN:16744447,STEELBLUE:1182971135,TAN:3535047935,TEAL:8421631,THISTLE:3636451583,TOMATO:4284696575,TRANSPARENT:0,TURQUOISE:1088475391,VIOLET:4001558271,WHEAT:4125012991,WHITE:4294967295,WHITESMOKE:4126537215,YELLOW:4294902015,YELLOWGREEN:2597139199},Er={name:`background-clip`,initialValue:`border-box`,prefix:!1,type:1,parse:function(e,t){return t.map(function(e){if(F(e))switch(e.value){case`padding-box`:return 1;case`content-box`:return 2}return 0})}},Dr={name:`background-color`,initialValue:`transparent`,prefix:!1,type:3,format:`color`},Or=function(e,t){var n=_r.parse(e,t[0]),r=t[1];return r&&L(r)?{color:n,stop:r}:{color:n,stop:null}},kr=function(e,t){var n=e[0],r=e[e.length-1];n.stop===null&&(n.stop=R),r.stop===null&&(r.stop=cr);for(var i=[],a=0,o=0;oa?i.push(c):i.push(a),a=c}else i.push(null)}for(var l=null,o=0;oe.optimumDistance)?{optimumCorner:t,optimumDistance:s}:e},{optimumDistance:i?1/0:-1/0,optimumCorner:null}).optimumCorner},Nr=function(e,t,n,r,i){var a=0,o=0;switch(e.size){case 0:e.shape===0?a=o=Math.min(Math.abs(t),Math.abs(t-r),Math.abs(n),Math.abs(n-i)):e.shape===1&&(a=Math.min(Math.abs(t),Math.abs(t-r)),o=Math.min(Math.abs(n),Math.abs(n-i)));break;case 2:if(e.shape===0)a=o=Math.min(U(t,n),U(t,n-i),U(t-r,n),U(t-r,n-i));else if(e.shape===1){var s=Math.min(Math.abs(n),Math.abs(n-i))/Math.min(Math.abs(t),Math.abs(t-r)),c=Mr(r,i,t,n,!0),l=c[0],u=c[1];a=U(l-t,(u-n)/s),o=s*a}break;case 1:e.shape===0?a=o=Math.max(Math.abs(t),Math.abs(t-r),Math.abs(n),Math.abs(n-i)):e.shape===1&&(a=Math.max(Math.abs(t),Math.abs(t-r)),o=Math.max(Math.abs(n),Math.abs(n-i)));break;case 3:if(e.shape===0)a=o=Math.max(U(t,n),U(t,n-i),U(t-r,n),U(t-r,n-i));else if(e.shape===1){var s=Math.max(Math.abs(n),Math.abs(n-i))/Math.max(Math.abs(t),Math.abs(t-r)),d=Mr(r,i,t,n,!1),l=d[0],u=d[1];a=U(l-t,(u-n)/s),o=s*a}break}return Array.isArray(e.size)&&(a=z(e.size[0],r),o=e.size.length===2?z(e.size[1],i):a),[a,o]},Pr=function(e,t){var n=B(180),r=[];return I(t).forEach(function(t,i){if(i===0){var a=t[0];if(a.type===20&&a.value===`to`){n=gr(t);return}else if(hr(a)){n=mr.parse(e,a);return}}var o=Or(e,t);r.push(o)}),{angle:n,stops:r,type:1}},Fr=function(e,t){var n=B(180),r=[];return I(t).forEach(function(t,i){if(i===0){var a=t[0];if(a.type===20&&[`top`,`left`,`right`,`bottom`].indexOf(a.value)!==-1){n=gr(t);return}else if(hr(a)){n=(mr.parse(e,a)+B(270))%B(360);return}}var o=Or(e,t);r.push(o)}),{angle:n,stops:r,type:1}},Ir=function(e,t){var n=B(180),r=[],i=1;return I(t).forEach(function(t,n){var a=t[0];if(n===0){if(F(a)&&a.value===`linear`){i=1;return}else if(F(a)&&a.value===`radial`){i=2;return}}if(a.type===18){if(a.name===`from`){var o=_r.parse(e,a.values[0]);r.push({stop:R,color:o})}else if(a.name===`to`){var o=_r.parse(e,a.values[0]);r.push({stop:cr,color:o})}else if(a.name===`color-stop`){var s=a.values.filter(rr);if(s.length===2){var o=_r.parse(e,s[1]),c=s[0];$n(c)&&r.push({stop:{type:16,number:c.number*100,flags:c.flags},color:o})}}}}),i===1?{angle:(n+B(180))%B(360),stops:r,type:i}:{size:3,shape:0,stops:r,position:[],type:i}},Lr=`closest-side`,Rr=`farthest-side`,zr=`closest-corner`,Br=`farthest-corner`,Vr=`circle`,Hr=`ellipse`,Ur=`cover`,Wr=`contain`,Gr=function(e,t){var n=0,r=3,i=[],a=[];return I(t).forEach(function(t,o){var s=!0;if(o===0){var c=!1;s=t.reduce(function(e,t){if(c)if(F(t))switch(t.value){case`center`:return a.push(sr),e;case`top`:case`left`:return a.push(R),e;case`right`:case`bottom`:return a.push(cr),e}else (L(t)||ar(t))&&a.push(t);else if(F(t))switch(t.value){case Vr:return n=0,!1;case Hr:return n=1,!1;case`at`:return c=!0,!1;case Lr:return r=0,!1;case Ur:case Rr:return r=1,!1;case Wr:case zr:return r=2,!1;case Br:return r=3,!1}else if(ar(t)||L(t))return Array.isArray(r)||(r=[]),r.push(t),!1;return e},s)}if(s){var l=Or(e,t);i.push(l)}}),{size:r,shape:n,stops:i,position:a,type:2}},Kr=function(e,t){var n=0,r=3,i=[],a=[];return I(t).forEach(function(t,o){var s=!0;if(o===0?s=t.reduce(function(e,t){if(F(t))switch(t.value){case`center`:return a.push(sr),!1;case`top`:case`left`:return a.push(R),!1;case`right`:case`bottom`:return a.push(cr),!1}else if(L(t)||ar(t))return a.push(t),!1;return e},s):o===1&&(s=t.reduce(function(e,t){if(F(t))switch(t.value){case Vr:return n=0,!1;case Hr:return n=1,!1;case Wr:case Lr:return r=0,!1;case Rr:return r=1,!1;case zr:return r=2,!1;case Ur:case Br:return r=3,!1}else if(ar(t)||L(t))return Array.isArray(r)||(r=[]),r.push(t),!1;return e},s)),s){var c=Or(e,t);i.push(c)}}),{size:r,shape:n,stops:i,position:a,type:2}},qr=function(e){return e.type===1},Jr=function(e){return e.type===2},Yr={name:`image`,parse:function(e,t){if(t.type===22){var n={url:t.value,type:0};return e.cache.addImage(t.value),n}if(t.type===18){var r=Zr[t.name];if(r===void 0)throw Error(`Attempting to parse an unsupported image function "`+t.name+`"`);return r(e,t.values)}throw Error(`Unsupported image type `+t.type)}};function Xr(e){return!(e.type===20&&e.value===`none`)&&(e.type!==18||!!Zr[e.name])}var Zr={"linear-gradient":Pr,"-moz-linear-gradient":Fr,"-ms-linear-gradient":Fr,"-o-linear-gradient":Fr,"-webkit-linear-gradient":Fr,"radial-gradient":Gr,"-moz-radial-gradient":Kr,"-ms-radial-gradient":Kr,"-o-radial-gradient":Kr,"-webkit-radial-gradient":Kr,"-webkit-gradient":Ir},Qr={name:`background-image`,initialValue:`none`,type:1,prefix:!1,parse:function(e,t){if(t.length===0)return[];var n=t[0];return n.type===20&&n.value===`none`?[]:t.filter(function(e){return rr(e)&&Xr(e)}).map(function(t){return Yr.parse(e,t)})}},$r={name:`background-origin`,initialValue:`border-box`,prefix:!1,type:1,parse:function(e,t){return t.map(function(e){if(F(e))switch(e.value){case`padding-box`:return 1;case`content-box`:return 2}return 0})}},ei={name:`background-position`,initialValue:`0% 0%`,type:1,prefix:!1,parse:function(e,t){return I(t).map(function(e){return e.filter(L)}).map(or)}},ti={name:`background-repeat`,initialValue:`repeat`,prefix:!1,type:1,parse:function(e,t){return I(t).map(function(e){return e.filter(F).map(function(e){return e.value}).join(` `)}).map(ni)}},ni=function(e){switch(e){case`no-repeat`:return 1;case`repeat-x`:case`repeat no-repeat`:return 2;case`repeat-y`:case`no-repeat repeat`:return 3;default:return 0}},ri;(function(e){e.AUTO=`auto`,e.CONTAIN=`contain`,e.COVER=`cover`})(ri||={});var ii={name:`background-size`,initialValue:`0`,prefix:!1,type:1,parse:function(e,t){return I(t).map(function(e){return e.filter(ai)})}},ai=function(e){return F(e)||L(e)},oi=function(e){return{name:`border-`+e+`-color`,initialValue:`transparent`,prefix:!1,type:3,format:`color`}},si=oi(`top`),ci=oi(`right`),li=oi(`bottom`),ui=oi(`left`),di=function(e){return{name:`border-radius-`+e,initialValue:`0 0`,prefix:!1,type:1,parse:function(e,t){return or(t.filter(L))}}},fi=di(`top-left`),pi=di(`top-right`),mi=di(`bottom-right`),hi=di(`bottom-left`),gi=function(e){return{name:`border-`+e+`-style`,initialValue:`solid`,prefix:!1,type:2,parse:function(e,t){switch(t){case`none`:return 0;case`dashed`:return 2;case`dotted`:return 3;case`double`:return 4}return 1}}},_i=gi(`top`),vi=gi(`right`),yi=gi(`bottom`),bi=gi(`left`),xi=function(e){return{name:`border-`+e+`-width`,initialValue:`0`,type:0,prefix:!1,parse:function(e,t){return Qn(t)?t.number:0}}},Si=xi(`top`),Ci=xi(`right`),wi=xi(`bottom`),Ti=xi(`left`),Ei={name:`color`,initialValue:`transparent`,prefix:!1,type:3,format:`color`},Di={name:`direction`,initialValue:`ltr`,prefix:!1,type:2,parse:function(e,t){switch(t){case`rtl`:return 1;default:return 0}}},Oi={name:`display`,initialValue:`inline-block`,prefix:!1,type:1,parse:function(e,t){return t.filter(F).reduce(function(e,t){return e|ki(t.value)},0)}},ki=function(e){switch(e){case`block`:case`-webkit-box`:return 2;case`inline`:return 4;case`run-in`:return 8;case`flow`:return 16;case`flow-root`:return 32;case`table`:return 64;case`flex`:case`-webkit-flex`:return 128;case`grid`:case`-ms-grid`:return 256;case`ruby`:return 512;case`subgrid`:return 1024;case`list-item`:return 2048;case`table-row-group`:return 4096;case`table-header-group`:return 8192;case`table-footer-group`:return 16384;case`table-row`:return 32768;case`table-cell`:return 65536;case`table-column-group`:return 131072;case`table-column`:return 262144;case`table-caption`:return 524288;case`ruby-base`:return 1048576;case`ruby-text`:return 2097152;case`ruby-base-container`:return 4194304;case`ruby-text-container`:return 8388608;case`contents`:return 16777216;case`inline-block`:return 33554432;case`inline-list-item`:return 67108864;case`inline-table`:return 134217728;case`inline-flex`:return 268435456;case`inline-grid`:return 536870912}return 0},Ai={name:`float`,initialValue:`none`,prefix:!1,type:2,parse:function(e,t){switch(t){case`left`:return 1;case`right`:return 2;case`inline-start`:return 3;case`inline-end`:return 4}return 0}},ji={name:`letter-spacing`,initialValue:`0`,prefix:!1,type:0,parse:function(e,t){return t.type===20&&t.value===`normal`?0:t.type===17||t.type===15?t.number:0}},Mi;(function(e){e.NORMAL=`normal`,e.STRICT=`strict`})(Mi||={});var Ni={name:`line-break`,initialValue:`normal`,prefix:!1,type:2,parse:function(e,t){switch(t){case`strict`:return Mi.STRICT;default:return Mi.NORMAL}}},Pi={name:`line-height`,initialValue:`normal`,prefix:!1,type:4},Fi=function(e,t){return F(e)&&e.value===`normal`?1.2*t:e.type===17?t*e.number:L(e)?z(e,t):t},Ii={name:`list-style-image`,initialValue:`none`,type:0,prefix:!1,parse:function(e,t){return t.type===20&&t.value===`none`?null:Yr.parse(e,t)}},Li={name:`list-style-position`,initialValue:`outside`,prefix:!1,type:2,parse:function(e,t){switch(t){case`inside`:return 0;default:return 1}}},Ri={name:`list-style-type`,initialValue:`none`,prefix:!1,type:2,parse:function(e,t){switch(t){case`disc`:return 0;case`circle`:return 1;case`square`:return 2;case`decimal`:return 3;case`cjk-decimal`:return 4;case`decimal-leading-zero`:return 5;case`lower-roman`:return 6;case`upper-roman`:return 7;case`lower-greek`:return 8;case`lower-alpha`:return 9;case`upper-alpha`:return 10;case`arabic-indic`:return 11;case`armenian`:return 12;case`bengali`:return 13;case`cambodian`:return 14;case`cjk-earthly-branch`:return 15;case`cjk-heavenly-stem`:return 16;case`cjk-ideographic`:return 17;case`devanagari`:return 18;case`ethiopic-numeric`:return 19;case`georgian`:return 20;case`gujarati`:return 21;case`gurmukhi`:return 22;case`hebrew`:return 22;case`hiragana`:return 23;case`hiragana-iroha`:return 24;case`japanese-formal`:return 25;case`japanese-informal`:return 26;case`kannada`:return 27;case`katakana`:return 28;case`katakana-iroha`:return 29;case`khmer`:return 30;case`korean-hangul-formal`:return 31;case`korean-hanja-formal`:return 32;case`korean-hanja-informal`:return 33;case`lao`:return 34;case`lower-armenian`:return 35;case`malayalam`:return 36;case`mongolian`:return 37;case`myanmar`:return 38;case`oriya`:return 39;case`persian`:return 40;case`simp-chinese-formal`:return 41;case`simp-chinese-informal`:return 42;case`tamil`:return 43;case`telugu`:return 44;case`thai`:return 45;case`tibetan`:return 46;case`trad-chinese-formal`:return 47;case`trad-chinese-informal`:return 48;case`upper-armenian`:return 49;case`disclosure-open`:return 50;case`disclosure-closed`:return 51;default:return-1}}},zi=function(e){return{name:`margin-`+e,initialValue:`0`,prefix:!1,type:4}},Bi=zi(`top`),Vi=zi(`right`),Hi=zi(`bottom`),Ui=zi(`left`),Wi={name:`overflow`,initialValue:`visible`,prefix:!1,type:1,parse:function(e,t){return t.filter(F).map(function(e){switch(e.value){case`hidden`:return 1;case`scroll`:return 2;case`clip`:return 3;case`auto`:return 4;default:return 0}})}},Gi={name:`overflow-wrap`,initialValue:`normal`,prefix:!1,type:2,parse:function(e,t){switch(t){case`break-word`:return`break-word`;default:return`normal`}}},Ki=function(e){return{name:`padding-`+e,initialValue:`0`,prefix:!1,type:3,format:`length-percentage`}},qi=Ki(`top`),Ji=Ki(`right`),Yi=Ki(`bottom`),Xi=Ki(`left`),Zi={name:`text-align`,initialValue:`left`,prefix:!1,type:2,parse:function(e,t){switch(t){case`right`:return 2;case`center`:case`justify`:return 1;default:return 0}}},Qi={name:`position`,initialValue:`static`,prefix:!1,type:2,parse:function(e,t){switch(t){case`relative`:return 1;case`absolute`:return 2;case`fixed`:return 3;case`sticky`:return 4}return 0}},$i={name:`text-shadow`,initialValue:`none`,type:1,prefix:!1,parse:function(e,t){return t.length===1&&tr(t[0],`none`)?[]:I(t).map(function(t){for(var n={color:H.TRANSPARENT,offsetX:R,offsetY:R,blur:R},r=0,i=0;i1)],this.overflowWrap=G(e,Gi,t.overflowWrap),this.paddingTop=G(e,qi,t.paddingTop),this.paddingRight=G(e,Ji,t.paddingRight),this.paddingBottom=G(e,Yi,t.paddingBottom),this.paddingLeft=G(e,Xi,t.paddingLeft),this.paintOrder=G(e,Ea,t.paintOrder),this.position=G(e,Qi,t.position),this.textAlign=G(e,Zi,t.textAlign),this.textDecorationColor=G(e,fa,t.textDecorationColor??t.color),this.textDecorationLine=G(e,pa,t.textDecorationLine??t.textDecoration),this.textShadow=G(e,$i,t.textShadow),this.textTransform=G(e,ea,t.textTransform),this.transform=G(e,ta,t.transform),this.transformOrigin=G(e,aa,t.transformOrigin),this.visibility=G(e,oa,t.visibility),this.webkitTextStrokeColor=G(e,Da,t.webkitTextStrokeColor),this.webkitTextStrokeWidth=G(e,Oa,t.webkitTextStrokeWidth),this.wordBreak=G(e,ca,t.wordBreak),this.zIndex=G(e,la,t.zIndex)}return e.prototype.isVisible=function(){return this.display>0&&this.opacity>0&&this.visibility===0},e.prototype.isTransparent=function(){return vr(this.backgroundColor)},e.prototype.isTransformed=function(){return this.transform!==null},e.prototype.isPositioned=function(){return this.position!==0},e.prototype.isPositionedWithZIndex=function(){return this.isPositioned()&&!this.zIndex.auto},e.prototype.isFloating=function(){return this.float!==0},e.prototype.isInlineLevel=function(){return W(this.display,4)||W(this.display,33554432)||W(this.display,268435456)||W(this.display,536870912)||W(this.display,67108864)||W(this.display,134217728)},e}(),Aa=function(){function e(e,t){this.content=G(e,ya,t.content),this.quotes=G(e,Ca,t.quotes)}return e}(),ja=function(){function e(e,t){this.counterIncrement=G(e,ba,t.counterIncrement),this.counterReset=G(e,xa,t.counterReset)}return e}(),G=function(e,t,n){var r=new Xn,i=n==null?t.initialValue:n.toString();r.write(i);var a=new Zn(r.read());switch(t.type){case 2:var o=a.parseComponentValue();return t.parse(e,F(o)?o.value:t.initialValue);case 0:return t.parse(e,a.parseComponentValue());case 1:return t.parse(e,a.parseComponentValues());case 4:return a.parseComponentValue();case 3:switch(t.format){case`angle`:return mr.parse(e,a.parseComponentValue());case`color`:return _r.parse(e,a.parseComponentValue());case`image`:return Yr.parse(e,a.parseComponentValue());case`length`:var s=a.parseComponentValue();return ar(s)?s:R;case`length-percentage`:var c=a.parseComponentValue();return L(c)?c:R;case`time`:return ua.parse(e,a.parseComponentValue())}break}},Ma=`data-html2canvas-debug`,Na=function(e){switch(e.getAttribute(Ma)){case`all`:return 1;case`clone`:return 2;case`parse`:return 3;case`render`:return 4;default:return 0}},Pa=function(e,t){var n=Na(e);return n===1||t===n},K=function(){function e(e,t){if(this.context=e,this.textNodes=[],this.elements=[],this.flags=0,Pa(t,3))debugger;this.styles=new ka(e,window.getComputedStyle(t,null)),xs(t)&&(this.styles.animationDuration.some(function(e){return e>0})&&(t.style.animationDuration=`0s`),this.styles.transform!==null&&(t.style.transform=`none`)),this.bounds=s(this.context,t),Pa(t,4)&&(this.flags|=16)}return e}(),Fa=`AAAAAAAAAAAAEA4AGBkAAFAaAAACAAAAAAAIABAAGAAwADgACAAQAAgAEAAIABAACAAQAAgAEAAIABAACAAQAAgAEAAIABAAQABIAEQATAAIABAACAAQAAgAEAAIABAAVABcAAgAEAAIABAACAAQAGAAaABwAHgAgACIAI4AlgAIABAAmwCjAKgAsAC2AL4AvQDFAMoA0gBPAVYBWgEIAAgACACMANoAYgFkAWwBdAF8AX0BhQGNAZUBlgGeAaMBlQGWAasBswF8AbsBwwF0AcsBYwHTAQgA2wG/AOMBdAF8AekB8QF0AfkB+wHiAHQBfAEIAAMC5gQIAAsCEgIIAAgAFgIeAggAIgIpAggAMQI5AkACygEIAAgASAJQAlgCYAIIAAgACAAKBQoFCgUTBRMFGQUrBSsFCAAIAAgACAAIAAgACAAIAAgACABdAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABoAmgCrwGvAQgAbgJ2AggAHgEIAAgACADnAXsCCAAIAAgAgwIIAAgACAAIAAgACACKAggAkQKZAggAPADJAAgAoQKkAqwCsgK6AsICCADJAggA0AIIAAgACAAIANYC3gIIAAgACAAIAAgACABAAOYCCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAkASoB+QIEAAgACAA8AEMCCABCBQgACABJBVAFCAAIAAgACAAIAAgACAAIAAgACABTBVoFCAAIAFoFCABfBWUFCAAIAAgACAAIAAgAbQUIAAgACAAIAAgACABzBXsFfQWFBYoFigWKBZEFigWKBYoFmAWfBaYFrgWxBbkFCAAIAAgACAAIAAgACAAIAAgACAAIAMEFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAMgFCADQBQgACAAIAAgACAAIAAgACAAIAAgACAAIAO4CCAAIAAgAiQAIAAgACABAAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAD0AggACAD8AggACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIANYFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAMDvwAIAAgAJAIIAAgACAAIAAgACAAIAAgACwMTAwgACAB9BOsEGwMjAwgAKwMyAwsFYgE3A/MEPwMIAEUDTQNRAwgAWQOsAGEDCAAIAAgACAAIAAgACABpAzQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFOgU0BTUFNgU3BTgFOQU6BTQFNQU2BTcFOAU5BToFNAU1BTYFNwU4BTkFIQUoBSwFCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABtAwgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABMAEwACAAIAAgACAAIABgACAAIAAgACAC/AAgACAAyAQgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACAAIAAwAAgACAAIAAgACAAIAAgACAAIAAAARABIAAgACAAIABQASAAIAAgAIABwAEAAjgCIABsAqAC2AL0AigDQAtwC+IJIQqVAZUBWQqVAZUBlQGVAZUBlQGrC5UBlQGVAZUBlQGVAZUBlQGVAXsKlQGVAbAK6wsrDGUMpQzlDJUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAZUBlQGVAfAKAAuZA64AtwCJALoC6ADwAAgAuACgA/oEpgO6AqsD+AAIAAgAswMIAAgACAAIAIkAuwP5AfsBwwPLAwgACAAIAAgACADRA9kDCAAIAOED6QMIAAgACAAIAAgACADuA/YDCAAIAP4DyQAIAAgABgQIAAgAXQAOBAgACAAIAAgACAAIABMECAAIAAgACAAIAAgACAD8AAQBCAAIAAgAGgQiBCoECAExBAgAEAEIAAgACAAIAAgACAAIAAgACAAIAAgACAA4BAgACABABEYECAAIAAgATAQYAQgAVAQIAAgACAAIAAgACAAIAAgACAAIAFoECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAOQEIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAB+BAcACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAEABhgSMBAgACAAIAAgAlAQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAwAEAAQABAADAAMAAwADAAQABAAEAAQABAAEAAQABHATAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAdQMIAAgACAAIAAgACAAIAMkACAAIAAgAfQMIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACACFA4kDCAAIAAgACAAIAOcBCAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAIcDCAAIAAgACAAIAAgACAAIAAgACAAIAJEDCAAIAAgACADFAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABgBAgAZgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAbAQCBXIECAAIAHkECAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACABAAJwEQACjBKoEsgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAC6BMIECAAIAAgACAAIAAgACABmBAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAxwQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAGYECAAIAAgAzgQIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBd0FXwUIAOIF6gXxBYoF3gT5BQAGCAaKBYoFigWKBYoFigWKBYoFigWKBYoFigXWBIoFigWKBYoFigWKBYoFigWKBYsFEAaKBYoFigWKBYoFigWKBRQGCACKBYoFigWKBQgACAAIANEECAAIABgGigUgBggAJgYIAC4GMwaKBYoF0wQ3Bj4GigWKBYoFigWKBYoFigWKBYoFigWKBYoFigUIAAgACAAIAAgACAAIAAgAigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWKBYoFigWLBf///////wQABAAEAAQABAAEAAQABAAEAAQAAwAEAAQAAgAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAQADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUAAAAFAAUAAAAFAAUAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUAAQAAAAUABQAFAAUABQAFAAAAAAAFAAUAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAFAAUAAQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAAABwAHAAcAAAAHAAcABwAFAAEAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAcABwAFAAUAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAAAAQABAAAAAAAAAAAAAAAFAAUABQAFAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAHAAcAAAAHAAcAAAAAAAUABQAHAAUAAQAHAAEABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwABAAUABQAFAAUAAAAAAAAAAAAAAAEAAQABAAEAAQABAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABQANAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAEAAQABAAEAAQABAAEAAQABAAEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAABQAHAAUABQAFAAAAAAAAAAcABQAFAAUABQAFAAQABAAEAAQABAAEAAQABAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAEAAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUAAAAFAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAUAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAcABwAFAAcABwAAAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUABwAHAAUABQAFAAUAAAAAAAcABwAAAAAABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAABQAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAAAAAAAAAAABQAFAAAAAAAFAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAFAAUABQAFAAUAAAAFAAUABwAAAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABwAFAAUABQAFAAAAAAAHAAcAAAAAAAcABwAFAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAAAAAAAAAHAAcABwAAAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAABQAHAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAUABQAFAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAHAAcABQAHAAcAAAAFAAcABwAAAAcABwAFAAUAAAAAAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAFAAcABwAFAAUABQAAAAUAAAAHAAcABwAHAAcABwAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAHAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAABwAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAUAAAAFAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABwAFAAUABQAFAAUAAAAFAAUAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABwAFAAUABQAFAAUABQAAAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABQAFAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABQAFAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAHAAUABQAFAAUABQAFAAUABwAHAAcABwAHAAcABwAHAAUABwAHAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABwAHAAcABwAFAAUABwAHAAcAAAAAAAAAAAAHAAcABQAHAAcABwAHAAcABwAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAcABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAUABQAFAAUABQAFAAUAAAAFAAAABQAAAAAABQAFAAUABQAFAAUABQAFAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAFAAUAAAAAAAUABQAFAAUABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABwAFAAcABwAHAAcABwAFAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAUABQAFAAUABwAHAAUABQAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABQAFAAcABwAHAAUABwAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAcABQAFAAUABQAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAAAAAABwAFAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAAAAAAAAAFAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAUABQAHAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAUABQAFAAUABQAHAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAcABwAFAAUABQAFAAcABwAFAAUABwAHAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAFAAcABwAFAAUABwAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAFAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAFAAUABQAAAAAABQAFAAAAAAAAAAAAAAAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAcABwAAAAAAAAAAAAAABwAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAcABwAFAAcABwAAAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAFAAUABQAAAAUABQAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABwAFAAUABQAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAUABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAHAAcABQAHAAUABQAAAAAAAAAAAAAAAAAFAAAABwAHAAcABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAHAAcABwAAAAAABwAHAAAAAAAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABwAHAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAFAAUABwAFAAcABwAFAAcABQAFAAcABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAHAAcABQAFAAUABQAAAAAABwAHAAcABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAHAAUABQAFAAUABQAFAAUABQAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABwAFAAcABwAFAAUABQAFAAUABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAcABwAFAAUABQAFAAcABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAUABQAFAAUABQAHAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAFAAUABQAFAAAAAAAFAAUABwAHAAcABwAFAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABwAHAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAcABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUAAAAHAAUABQAFAAUABQAFAAUABwAFAAUABwAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUAAAAAAAAABQAAAAUABQAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAAcABwAHAAcAAAAFAAUAAAAHAAcABQAHAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAAAAUABQAFAAAAAAAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAFAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAFAAUABQAAAAAABQAFAAUABQAFAAUABQAAAAUABQAAAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAAUABQAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQAFAAUABQAFAAUABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAFAAUABQAFAAUADgAOAA4ADgAOAA4ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAA8ADwAPAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAcABwAHAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAMAAwADAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkACQAJAAkAAAAAAAAAAAAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAKAAoACgAAAAAAAAAAAAsADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwACwAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAMAAwADAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAADgAOAA4AAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAAAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4AAAAOAAAAAAAAAAAAAAAAAA4AAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAAAAAAAAAAAA4AAAAOAAAAAAAAAAAADgAOAA4AAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4AAAAAAA4ADgAOAA4ADgAOAA4ADgAOAAAADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4ADgAOAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAOAA4ADgAOAA4AAAAAAAAAAAAAAAAAAAAAAA4ADgAOAA4ADgAOAA4ADgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAOAA4ADgAOAA4ADgAAAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4ADgAOAA4AAAAAAAAAAAA=`,Ia=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/`,La=typeof Uint8Array>`u`?[]:new Uint8Array(256),Ra=0;Ra>4,u[i++]=(o&15)<<4|s>>2,u[i++]=(s&3)<<6|c&63;return l},Ba=function(e){for(var t=e.length,n=[],r=0;r>Ha,qa=(1<>Ha)+32,Ya=65536>>Ua,Xa=(1<=0){if(e<55296||e>56319&&e<=65535)return t=this.index[e>>Ha],t=(t<>Ha)],t=(t<>Ua),t=this.index[t],t+=e>>Ha&Xa,t=this.index[t],t=(t<`u`?[]:new Uint8Array(256),ro=0;ro=55296&&i<=56319&&n>10)+55296,a%1024+56320)),(r+1===t||n.length>16384)&&(i+=String.fromCharCode.apply(String,n),n.length=0)}return i},xo=$a(Fa),So=`×`,Co=`÷`,wo=function(e){return xo.get(e)},To=function(e,t,n){var r=n-2,i=t[r],a=t[n-1],o=t[n];if(a===ao&&o===oo)return So;if(a===ao||a===oo||a===so||o===ao||o===oo||o===so)return Co;if(a===uo&&[uo,fo,mo,ho].indexOf(o)!==-1||(a===mo||a===fo)&&(o===fo||o===po)||(a===ho||a===po)&&o===po||o===go||o===co||o===lo||a===io)return So;if(a===go&&o===_o){for(;i===co;)i=t[--r];if(i===_o)return So}if(a===vo&&o===vo){for(var s=0;i===vo;)s++,i=t[--r];if(s%2==0)return So}return Co},Eo=function(e){var t=yo(e),n=t.length,r=0,i=0,a=t.map(wo);return{next:function(){if(r>=n)return{done:!0,value:null};for(var e=So;ro.x||i.y>o.y;return o=i,t===0?!0:s});return e.body.removeChild(t),s},Ao=function(){return new Image().crossOrigin!==void 0},jo=function(){return typeof new XMLHttpRequest().responseType==`string`},Mo=function(e){var t=new Image,n=e.createElement(`canvas`),r=n.getContext(`2d`);if(!r)return!1;t.src=`data:image/svg+xml,`;try{r.drawImage(t,0,0),n.toDataURL()}catch{return!1}return!0},No=function(e){return e[0]===0&&e[1]===255&&e[2]===0&&e[3]===255},Po=function(e){var t=e.createElement(`canvas`),n=100;t.width=n,t.height=n;var r=t.getContext(`2d`);if(!r)return Promise.reject(!1);r.fillStyle=`rgb(0, 255, 0)`,r.fillRect(0,0,n,n);var i=new Image,a=t.toDataURL();i.src=a;var o=Fo(n,n,0,0,i);return r.fillStyle=`red`,r.fillRect(0,0,n,n),Io(o).then(function(t){r.drawImage(t,0,0);var i=r.getImageData(0,0,n,n).data;r.fillStyle=`red`,r.fillRect(0,0,n,n);var o=e.createElement(`div`);return o.style.backgroundImage=`url(`+a+`)`,o.style.height=n+`px`,No(i)?Io(Fo(n,n,0,0,o)):Promise.reject(!1)}).then(function(e){return r.drawImage(e,0,0),No(r.getImageData(0,0,n,n).data)}).catch(function(){return!1})},Fo=function(e,t,n,r,i){var a=`http://www.w3.org/2000/svg`,o=document.createElementNS(a,`svg`),s=document.createElementNS(a,`foreignObject`);return o.setAttributeNS(null,`width`,e.toString()),o.setAttributeNS(null,`height`,t.toString()),s.setAttributeNS(null,`width`,`100%`),s.setAttributeNS(null,`height`,`100%`),s.setAttributeNS(null,`x`,n.toString()),s.setAttributeNS(null,`y`,r.toString()),s.setAttributeNS(null,`externalResourcesRequired`,`true`),o.appendChild(s),s.appendChild(i),o},Io=function(e){return new Promise(function(t,n){var r=new Image;r.onload=function(){return t(r)},r.onerror=n,r.src=`data:image/svg+xml;charset=utf-8,`+encodeURIComponent(new XMLSerializer().serializeToString(e))})},q={get SUPPORT_RANGE_BOUNDS(){var e=Oo(document);return Object.defineProperty(q,"SUPPORT_RANGE_BOUNDS",{value:e}),e},get SUPPORT_WORD_BREAKING(){var e=q.SUPPORT_RANGE_BOUNDS&&ko(document);return Object.defineProperty(q,"SUPPORT_WORD_BREAKING",{value:e}),e},get SUPPORT_SVG_DRAWING(){var e=Mo(document);return Object.defineProperty(q,"SUPPORT_SVG_DRAWING",{value:e}),e},get SUPPORT_FOREIGNOBJECT_DRAWING(){var e=typeof Array.from==`function`&&typeof window.fetch==`function`?Po(document):Promise.resolve(!1);return Object.defineProperty(q,"SUPPORT_FOREIGNOBJECT_DRAWING",{value:e}),e},get SUPPORT_CORS_IMAGES(){var e=Ao();return Object.defineProperty(q,"SUPPORT_CORS_IMAGES",{value:e}),e},get SUPPORT_RESPONSE_TYPE(){var e=jo();return Object.defineProperty(q,"SUPPORT_RESPONSE_TYPE",{value:e}),e},get SUPPORT_CORS_XHR(){var e=`withCredentials`in new XMLHttpRequest;return Object.defineProperty(q,"SUPPORT_CORS_XHR",{value:e}),e},get SUPPORT_NATIVE_TEXT_SEGMENTATION(){var e=!!(typeof Intl<`u`&&Intl.Segmenter);return Object.defineProperty(q,"SUPPORT_NATIVE_TEXT_SEGMENTATION",{value:e}),e}},Lo=function(){function e(e,t){this.text=e,this.bounds=t}return e}(),Ro=function(e,t,n,r){var i=Uo(t,n),a=[],s=0;return i.forEach(function(t){if(n.textDecorationLine.length||t.trim().length>0)if(q.SUPPORT_RANGE_BOUNDS){var i=Bo(r,s,t.length).getClientRects();if(i.length>1){var c=Vo(t),l=0;c.forEach(function(t){a.push(new Lo(t,o.fromDOMRectList(e,Bo(r,l+s,t.length).getClientRects()))),l+=t.length})}else a.push(new Lo(t,o.fromDOMRectList(e,i)))}else{var u=r.splitText(t.length);a.push(new Lo(t,zo(e,r))),r=u}else q.SUPPORT_RANGE_BOUNDS||(r=r.splitText(t.length));s+=t.length}),a},zo=function(e,t){var n=t.ownerDocument;if(n){var r=n.createElement(`html2canvaswrapper`);r.appendChild(t.cloneNode(!0));var i=t.parentNode;if(i){i.replaceChild(r,t);var a=s(e,r);return r.firstChild&&i.replaceChild(r.firstChild,r),a}}return o.EMPTY},Bo=function(e,t,n){var r=e.ownerDocument;if(!r)throw Error(`Node has no owner document`);var i=r.createRange();return i.setStart(e,t),i.setEnd(e,t+n),i},Vo=function(e){if(q.SUPPORT_NATIVE_TEXT_SEGMENTATION){var t=new Intl.Segmenter(void 0,{granularity:`grapheme`});return Array.from(t.segment(e)).map(function(e){return e.segment})}return Do(e)},Ho=function(e,t){if(q.SUPPORT_NATIVE_TEXT_SEGMENTATION){var n=new Intl.Segmenter(void 0,{granularity:`word`});return Array.from(n.segment(e)).map(function(e){return e.segment})}return Go(e,t)},Uo=function(e,t){return t.letterSpacing===0?Ho(e,t):Vo(e)},Wo=[32,160,4961,65792,65793,4153,4241],Go=function(e,t){for(var n=ft(e,{lineBreak:t.lineBreak,wordBreak:t.overflowWrap===`break-word`?`break-word`:t.wordBreak}),r=[],i,a=function(){if(i.value){var e=l(i.value.slice()),t=``;e.forEach(function(e){Wo.indexOf(e)===-1?t+=u(e):(t.length&&r.push(t),r.push(u(e)),t=``)}),t.length&&r.push(t)}};!(i=n.next()).done;)a();return r},Ko=function(){function e(e,t,n){this.text=qo(t.data,n.textTransform),this.textBounds=Ro(e,this.text,n,t)}return e}(),qo=function(e,t){switch(t){case 1:return e.toLowerCase();case 3:return e.replace(Jo,Yo);case 2:return e.toUpperCase();default:return e}},Jo=/(^|\s|:|-|\(|\))([a-z])/g,Yo=function(e,t,n){return e.length>0?t+n.toUpperCase():e},Xo=function(e){t(n,e);function n(t,n){var r=e.call(this,t,n)||this;return r.src=n.currentSrc||n.src,r.intrinsicWidth=n.naturalWidth,r.intrinsicHeight=n.naturalHeight,r.context.cache.addImage(r.src),r}return n}(K),Zo=function(e){t(n,e);function n(t,n){var r=e.call(this,t,n)||this;return r.canvas=n,r.intrinsicWidth=n.width,r.intrinsicHeight=n.height,r}return n}(K),Qo=function(e){t(n,e);function n(t,n){var r=e.call(this,t,n)||this,i=new XMLSerializer,a=s(t,n);return n.setAttribute(`width`,a.width+`px`),n.setAttribute(`height`,a.height+`px`),r.svg=`data:image/svg+xml,`+encodeURIComponent(i.serializeToString(n)),r.intrinsicWidth=n.width.baseVal.value,r.intrinsicHeight=n.height.baseVal.value,r.context.cache.addImage(r.svg),r}return n}(K),$o=function(e){t(n,e);function n(t,n){var r=e.call(this,t,n)||this;return r.value=n.value,r}return n}(K),es=function(e){t(n,e);function n(t,n){var r=e.call(this,t,n)||this;return r.start=n.start,r.reversed=typeof n.reversed==`boolean`&&n.reversed===!0,r}return n}(K),ts=[{type:15,flags:0,unit:`px`,number:3}],ns=[{type:16,flags:0,number:50}],rs=function(e){return e.width>e.height?new o(e.left+(e.width-e.height)/2,e.top,e.height,e.height):e.width0)n.textNodes.push(new Ko(e,i,n.styles));else if(bs(i))if(Ls(i)&&i.assignedNodes)i.assignedNodes().forEach(function(t){return ms(e,t,n,r)});else{var o=hs(e,i);o.styles.isVisible()&&(_s(i,o,r)?o.flags|=4:vs(o.styles)&&(o.flags|=2),ps.indexOf(i.tagName)!==-1&&(o.flags|=8),n.elements.push(o),i.slot,i.shadowRoot?ms(e,i.shadowRoot,o,r):!Fs(i)&&!Ds(i)&&!Is(i)&&ms(e,i,o,r))}},hs=function(e,t){return js(t)?new Xo(e,t):ks(t)?new Zo(e,t):Ds(t)?new Qo(e,t):Cs(t)?new $o(e,t):ws(t)?new es(e,t):Ts(t)?new ls(e,t):Is(t)?new us(e,t):Fs(t)?new ds(e,t):Ms(t)?new fs(e,t):new K(e,t)},gs=function(e,t){var n=hs(e,t);return n.flags|=4,ms(e,t,n,n),n},_s=function(e,t,n){return t.styles.isPositionedWithZIndex()||t.styles.opacity<1||t.styles.isTransformed()||Os(e)&&n.styles.isTransparent()},vs=function(e){return e.isPositioned()||e.isFloating()},ys=function(e){return e.nodeType===Node.TEXT_NODE},bs=function(e){return e.nodeType===Node.ELEMENT_NODE},xs=function(e){return bs(e)&&e.style!==void 0&&!Ss(e)},Ss=function(e){return typeof e.className==`object`},Cs=function(e){return e.tagName===`LI`},ws=function(e){return e.tagName===`OL`},Ts=function(e){return e.tagName===`INPUT`},Es=function(e){return e.tagName===`HTML`},Ds=function(e){return e.tagName===`svg`},Os=function(e){return e.tagName===`BODY`},ks=function(e){return e.tagName===`CANVAS`},As=function(e){return e.tagName===`VIDEO`},js=function(e){return e.tagName===`IMG`},Ms=function(e){return e.tagName===`IFRAME`},Ns=function(e){return e.tagName===`STYLE`},Ps=function(e){return e.tagName===`SCRIPT`},Fs=function(e){return e.tagName===`TEXTAREA`},Is=function(e){return e.tagName===`SELECT`},Ls=function(e){return e.tagName===`SLOT`},Rs=function(e){return e.tagName.indexOf(`-`)>0},zs=function(){function e(){this.counters={}}return e.prototype.getCounterValue=function(e){var t=this.counters[e];return t&&t.length?t[t.length-1]:1},e.prototype.getCounterValues=function(e){return this.counters[e]||[]},e.prototype.pop=function(e){var t=this;e.forEach(function(e){return t.counters[e].pop()})},e.prototype.parse=function(e){var t=this,n=e.counterIncrement,r=e.counterReset,i=!0;n!==null&&n.forEach(function(e){var n=t.counters[e.counter];n&&e.increment!==0&&(i=!1,n.length||n.push(1),n[Math.max(0,n.length-1)]+=e.increment)});var a=[];return i&&r.forEach(function(e){var n=t.counters[e.counter];a.push(e.counter),n||=t.counters[e.counter]=[],n.push(e.reset)}),a},e}(),Bs={integers:[1e3,900,500,400,100,90,50,40,10,9,5,4,1],values:[`M`,`CM`,`D`,`CD`,`C`,`XC`,`L`,`XL`,`X`,`IX`,`V`,`IV`,`I`]},Vs={integers:[9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:`Ք.Փ.Ւ.Ց.Ր.Տ.Վ.Ս.Ռ.Ջ.Պ.Չ.Ո.Շ.Ն.Յ.Մ.Ճ.Ղ.Ձ.Հ.Կ.Ծ.Խ.Լ.Ի.Ժ.Թ.Ը.Է.Զ.Ե.Դ.Գ.Բ.Ա`.split(`.`)},Hs={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,400,300,200,100,90,80,70,60,50,40,30,20,19,18,17,16,15,10,9,8,7,6,5,4,3,2,1],values:`י׳.ט׳.ח׳.ז׳.ו׳.ה׳.ד׳.ג׳.ב׳.א׳.ת.ש.ר.ק.צ.פ.ע.ס.נ.מ.ל.כ.יט.יח.יז.טז.טו.י.ט.ח.ז.ו.ה.ד.ג.ב.א`.split(`.`)},Us={integers:[1e4,9e3,8e3,7e3,6e3,5e3,4e3,3e3,2e3,1e3,900,800,700,600,500,400,300,200,100,90,80,70,60,50,40,30,20,10,9,8,7,6,5,4,3,2,1],values:`ჵ.ჰ.ჯ.ჴ.ხ.ჭ.წ.ძ.ც.ჩ.შ.ყ.ღ.ქ.ფ.ჳ.ტ.ს.რ.ჟ.პ.ო.ჲ.ნ.მ.ლ.კ.ი.თ.ჱ.ზ.ვ.ე.დ.გ.ბ.ა`.split(`.`)},Ws=function(e,t,n,r,i,a){return en?nc(e,i,a.length>0):r.integers.reduce(function(t,n,i){for(;e>=n;)e-=n,t+=r.values[i];return t},``)+a},Gs=function(e,t,n,r){var i=``;do n||e--,i=r(e)+i,e/=t;while(e*t>=t);return i},J=function(e,t,n,r,i){var a=n-t+1;return(e<0?`-`:``)+(Gs(Math.abs(e),a,r,function(e){return u(Math.floor(e%a)+t)})+i)},Ks=function(e,t,n){n===void 0&&(n=`. `);var r=t.length;return Gs(Math.abs(e),r,!1,function(e){return t[Math.floor(e%r)]})+n},qs=1,Js=2,Ys=4,Xs=8,Zs=function(e,t,n,r,i,a){if(e<-9999||e>9999)return nc(e,4,i.length>0);var o=Math.abs(e),s=i;if(o===0)return t[0]+s;for(var c=0;o>0&&c<=4;c++){var l=o%10;l===0&&W(a,qs)&&s!==``?s=t[l]+s:l>1||l===1&&c===0||l===1&&c===1&&W(a,Js)||l===1&&c===1&&W(a,Ys)&&e>100||l===1&&c>1&&W(a,Xs)?s=t[l]+(c>0?n[c-1]:``)+s:l===1&&c>0&&(s=n[c-1]+s),o=Math.floor(o/10)}return(e<0?r:``)+s},Qs=`十百千萬`,$s=`拾佰仟萬`,ec=`マイナス`,tc=`마이너스`,nc=function(e,t,n){var r=n?`. `:``,i=n?`、`:``,a=n?`, `:``,o=n?` `:``;switch(t){case 0:return`•`+o;case 1:return`◦`+o;case 2:return`◾`+o;case 5:var s=J(e,48,57,!0,r);return s.length<4?`0`+s:s;case 4:return Ks(e,`〇一二三四五六七八九`,i);case 6:return Ws(e,1,3999,Bs,3,r).toLowerCase();case 7:return Ws(e,1,3999,Bs,3,r);case 8:return J(e,945,969,!1,r);case 9:return J(e,97,122,!1,r);case 10:return J(e,65,90,!1,r);case 11:return J(e,1632,1641,!0,r);case 12:case 49:return Ws(e,1,9999,Vs,3,r);case 35:return Ws(e,1,9999,Vs,3,r).toLowerCase();case 13:return J(e,2534,2543,!0,r);case 14:case 30:return J(e,6112,6121,!0,r);case 15:return Ks(e,`子丑寅卯辰巳午未申酉戌亥`,i);case 16:return Ks(e,`甲乙丙丁戊己庚辛壬癸`,i);case 17:case 48:return Zs(e,`零一二三四五六七八九`,Qs,`負`,i,Js|Ys|Xs);case 47:return Zs(e,`零壹貳參肆伍陸柒捌玖`,$s,`負`,i,qs|Js|Ys|Xs);case 42:return Zs(e,`零一二三四五六七八九`,Qs,`负`,i,Js|Ys|Xs);case 41:return Zs(e,`零壹贰叁肆伍陆柒捌玖`,$s,`负`,i,qs|Js|Ys|Xs);case 26:return Zs(e,`〇一二三四五六七八九`,`十百千万`,ec,i,0);case 25:return Zs(e,`零壱弐参四伍六七八九`,`拾百千万`,ec,i,qs|Js|Ys);case 31:return Zs(e,`영일이삼사오육칠팔구`,`십백천만`,tc,a,qs|Js|Ys);case 33:return Zs(e,`零一二三四五六七八九`,`十百千萬`,tc,a,0);case 32:return Zs(e,`零壹貳參四五六七八九`,`拾百千`,tc,a,qs|Js|Ys);case 18:return J(e,2406,2415,!0,r);case 20:return Ws(e,1,19999,Us,3,r);case 21:return J(e,2790,2799,!0,r);case 22:return J(e,2662,2671,!0,r);case 22:return Ws(e,1,10999,Hs,3,r);case 23:return Ks(e,`あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわゐゑをん`);case 24:return Ks(e,`いろはにほへとちりぬるをわかよたれそつねならむうゐのおくやまけふこえてあさきゆめみしゑひもせす`);case 27:return J(e,3302,3311,!0,r);case 28:return Ks(e,`アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミムメモヤユヨラリルレロワヰヱヲン`,i);case 29:return Ks(e,`イロハニホヘトチリヌルヲワカヨタレソツネナラムウヰノオクヤマケフコエテアサキユメミシヱヒモセス`,i);case 34:return J(e,3792,3801,!0,r);case 37:return J(e,6160,6169,!0,r);case 38:return J(e,4160,4169,!0,r);case 39:return J(e,2918,2927,!0,r);case 40:return J(e,1776,1785,!0,r);case 43:return J(e,3046,3055,!0,r);case 44:return J(e,3174,3183,!0,r);case 45:return J(e,3664,3673,!0,r);case 46:return J(e,3872,3881,!0,r);default:return J(e,48,57,!0,r)}},rc=`data-html2canvas-ignore`,ic=function(){function e(e,t,n){if(this.context=e,this.options=n,this.scrolledElements=[],this.referenceElement=t,this.counters=new zs,this.quoteDepth=0,!t.ownerDocument)throw Error(`Cloned element does not have an owner document`);this.documentElement=this.cloneNode(t.ownerDocument.documentElement,!1)}return e.prototype.toIFrame=function(e,t){var n=this,a=oc(e,t);if(!a.contentWindow)return Promise.reject(`Unable to find iframe window`);var o=e.defaultView.pageXOffset,s=e.defaultView.pageYOffset,c=a.contentWindow,l=c.document,u=lc(a).then(function(){return r(n,void 0,void 0,function(){var e,n;return i(this,function(r){switch(r.label){case 0:return this.scrolledElements.forEach(mc),c&&(c.scrollTo(t.left,t.top),/(iPad|iPhone|iPod)/g.test(navigator.userAgent)&&(c.scrollY!==t.top||c.scrollX!==t.left)&&(this.context.logger.warn(`Unable to restore scroll position for cloned document`),this.context.windowBounds=this.context.windowBounds.add(c.scrollX-t.left,c.scrollY-t.top,0,0))),e=this.options.onclone,n=this.clonedReferenceElement,n===void 0?[2,Promise.reject(`Error finding the `+this.referenceElement.nodeName+` in the cloned document`)]:l.fonts&&l.fonts.ready?[4,l.fonts.ready]:[3,2];case 1:r.sent(),r.label=2;case 2:return/(AppleWebKit)/g.test(navigator.userAgent)?[4,cc(l)]:[3,4];case 3:r.sent(),r.label=4;case 4:return typeof e==`function`?[2,Promise.resolve().then(function(){return e(l,n)}).then(function(){return a})]:[2,a]}})})});return l.open(),l.write(fc(document.doctype)+``),pc(this.referenceElement.ownerDocument,o,s),l.replaceChild(l.adoptNode(this.documentElement),l.documentElement),l.close(),u},e.prototype.createElementClone=function(e){if(Pa(e,2))debugger;if(ks(e))return this.createCanvasClone(e);if(As(e))return this.createVideoClone(e);if(Ns(e))return this.createStyleClone(e);var t=e.cloneNode(!1);return js(t)&&(js(e)&&e.currentSrc&&e.currentSrc!==e.src&&(t.src=e.currentSrc,t.srcset=``),t.loading===`lazy`&&(t.loading=`eager`)),Rs(t)?this.createCustomElementClone(t):t},e.prototype.createCustomElementClone=function(e){var t=document.createElement(`html2canvascustomelement`);return dc(e.style,t),t},e.prototype.createStyleClone=function(e){try{var t=e.sheet;if(t&&t.cssRules){var n=[].slice.call(t.cssRules,0).reduce(function(e,t){return t&&typeof t.cssText==`string`?e+t.cssText:e},``),r=e.cloneNode(!1);return r.textContent=n,r}}catch(e){if(this.context.logger.error(`Unable to access cssRules property`,e),e.name!==`SecurityError`)throw e}return e.cloneNode(!1)},e.prototype.createCanvasClone=function(e){if(this.options.inlineImages&&e.ownerDocument){var t=e.ownerDocument.createElement(`img`);try{return t.src=e.toDataURL(),t}catch{this.context.logger.info(`Unable to inline canvas contents, canvas is tainted`,e)}}var n=e.cloneNode(!1);try{n.width=e.width,n.height=e.height;var r=e.getContext(`2d`),i=n.getContext(`2d`);if(i)if(!this.options.allowTaint&&r)i.putImageData(r.getImageData(0,0,e.width,e.height),0,0);else{var a=e.getContext(`webgl2`)??e.getContext(`webgl`);a&&a.getContextAttributes()?.preserveDrawingBuffer===!1&&this.context.logger.warn(`Unable to clone WebGL context as it has preserveDrawingBuffer=false`,e),i.drawImage(e,0,0)}return n}catch{this.context.logger.info(`Unable to clone canvas as it is tainted`,e)}return n},e.prototype.createVideoClone=function(e){var t=e.ownerDocument.createElement(`canvas`);t.width=e.offsetWidth,t.height=e.offsetHeight;var n=t.getContext(`2d`);try{return n&&(n.drawImage(e,0,0,t.width,t.height),this.options.allowTaint||n.getImageData(0,0,t.width,t.height)),t}catch{this.context.logger.info(`Unable to clone video as it is tainted`,e)}var r=e.ownerDocument.createElement(`canvas`);return r.width=e.offsetWidth,r.height=e.offsetHeight,r},e.prototype.appendChildNode=function(e,t,n){(!bs(t)||!Ps(t)&&!t.hasAttribute(rc)&&(typeof this.options.ignoreElements!=`function`||!this.options.ignoreElements(t)))&&(!this.options.copyStyles||!bs(t)||!Ns(t))&&e.appendChild(this.cloneNode(t,n))},e.prototype.cloneChildNodes=function(e,t,n){for(var r=this,i=e.shadowRoot?e.shadowRoot.firstChild:e.firstChild;i;i=i.nextSibling)if(bs(i)&&Ls(i)&&typeof i.assignedNodes==`function`){var a=i.assignedNodes();a.length&&a.forEach(function(e){return r.appendChildNode(t,e,n)})}else this.appendChildNode(t,i,n)},e.prototype.cloneNode=function(e,t){if(ys(e))return document.createTextNode(e.data);if(!e.ownerDocument)return e.cloneNode(!1);var n=e.ownerDocument.defaultView;if(n&&bs(e)&&(xs(e)||Ss(e))){var r=this.createElementClone(e);r.style.transitionProperty=`none`;var i=n.getComputedStyle(e),a=n.getComputedStyle(e,`:before`),o=n.getComputedStyle(e,`:after`);this.referenceElement===e&&xs(r)&&(this.clonedReferenceElement=r),Os(r)&&bc(r);var s=this.counters.parse(new ja(this.context,i)),c=this.resolvePseudoContent(e,r,a,ac.BEFORE);Rs(e)&&(t=!0),As(e)||this.cloneChildNodes(e,r,t),c&&r.insertBefore(c,r.firstChild);var l=this.resolvePseudoContent(e,r,o,ac.AFTER);return l&&r.appendChild(l),this.counters.pop(s),(i&&(this.options.copyStyles||Ss(e))&&!Ms(e)||t)&&dc(i,r),(e.scrollTop!==0||e.scrollLeft!==0)&&this.scrolledElements.push([r,e.scrollLeft,e.scrollTop]),(Fs(e)||Is(e))&&(Fs(r)||Is(r))&&(r.value=e.value),r}return e.cloneNode(!1)},e.prototype.resolvePseudoContent=function(e,t,n,r){var i=this;if(n){var a=n.content,o=t.ownerDocument;if(!(!o||!a||a===`none`||a===`-moz-alt-content`||n.display===`none`)){this.counters.parse(new ja(this.context,n));var s=new Aa(this.context,n),c=o.createElement(`html2canvaspseudoelement`);dc(n,c),s.content.forEach(function(t){if(t.type===0)c.appendChild(o.createTextNode(t.value));else if(t.type===22){var n=o.createElement(`img`);n.src=t.value,n.style.opacity=`1`,c.appendChild(n)}else if(t.type===18){if(t.name===`attr`){var r=t.values.filter(F);r.length&&c.appendChild(o.createTextNode(e.getAttribute(r[0].value)||``))}else if(t.name===`counter`){var a=t.values.filter(rr),l=a[0],u=a[1];if(l&&F(l)){var d=i.counters.getCounterValue(l.value),f=u&&F(u)?Ri.parse(i.context,u.value):3;c.appendChild(o.createTextNode(nc(d,f,!1)))}}else if(t.name===`counters`){var p=t.values.filter(rr),l=p[0],m=p[1],u=p[2];if(l&&F(l)){var h=i.counters.getCounterValues(l.value),g=u&&F(u)?Ri.parse(i.context,u.value):3,_=m&&m.type===0?m.value:``,v=h.map(function(e){return nc(e,g,!1)}).join(_);c.appendChild(o.createTextNode(v))}}}else if(t.type===20)switch(t.value){case`open-quote`:c.appendChild(o.createTextNode(wa(s.quotes,i.quoteDepth++,!0)));break;case`close-quote`:c.appendChild(o.createTextNode(wa(s.quotes,--i.quoteDepth,!1)));break;default:c.appendChild(o.createTextNode(t.value))}}),c.className=_c+` `+vc;var l=r===ac.BEFORE?` `+_c:` `+vc;return Ss(t)?t.className.baseValue+=l:t.className+=l,c}}},e.destroy=function(e){return e.parentNode?(e.parentNode.removeChild(e),!0):!1},e}(),ac;(function(e){e[e.BEFORE=0]=`BEFORE`,e[e.AFTER=1]=`AFTER`})(ac||={});var oc=function(e,t){var n=e.createElement(`iframe`);return n.className=`html2canvas-container`,n.style.visibility=`hidden`,n.style.position=`fixed`,n.style.left=`-10000px`,n.style.top=`0px`,n.style.border=`0`,n.width=t.width.toString(),n.height=t.height.toString(),n.scrolling=`no`,n.setAttribute(rc,`true`),e.body.appendChild(n),n},sc=function(e){return new Promise(function(t){if(e.complete){t();return}if(!e.src){t();return}e.onload=t,e.onerror=t})},cc=function(e){return Promise.all([].slice.call(e.images,0).map(sc))},lc=function(e){return new Promise(function(t,n){var r=e.contentWindow;if(!r)return n(`No window assigned for iframe`);var i=r.document;r.onload=e.onload=function(){r.onload=e.onload=null;var n=setInterval(function(){i.body.childNodes.length>0&&i.readyState===`complete`&&(clearInterval(n),t(e))},50)}})},uc=[`all`,`d`,`content`],dc=function(e,t){for(var n=e.length-1;n>=0;n--){var r=e.item(n);uc.indexOf(r)===-1&&t.style.setProperty(r,e.getPropertyValue(r))}return t},fc=function(e){var t=``;return e&&(t+=``),t},pc=function(e,t,n){e&&e.defaultView&&(t!==e.defaultView.pageXOffset||n!==e.defaultView.pageYOffset)&&e.defaultView.scrollTo(t,n)},mc=function(e){var t=e[0],n=e[1],r=e[2];t.scrollLeft=n,t.scrollTop=r},hc=`:before`,gc=`:after`,_c=`___html2canvas___pseudoelement_before`,vc=`___html2canvas___pseudoelement_after`,yc=`{ - content: "" !important; - display: none !important; -}`,bc=function(e){xc(e,`.`+_c+hc+yc+` - .`+vc+gc+yc)},xc=function(e,t){var n=e.ownerDocument;if(n){var r=n.createElement(`style`);r.textContent=t,e.appendChild(r)}},Sc=function(){function e(){}return e.getOrigin=function(t){var n=e._link;return n?(n.href=t,n.href=n.href,n.protocol+n.hostname+n.port):`about:blank`},e.isSameOrigin=function(t){return e.getOrigin(t)===e._origin},e.setContext=function(t){e._link=t.document.createElement(`a`),e._origin=e.getOrigin(t.location.href)},e._origin=`about:blank`,e}(),Cc=function(){function e(e,t){this.context=e,this._options=t,this._cache={}}return e.prototype.addImage=function(e){var t=Promise.resolve();return this.has(e)||(Ac(e)||Dc(e))&&(this._cache[e]=this.loadImage(e)).catch(function(){}),t},e.prototype.match=function(e){return this._cache[e]},e.prototype.loadImage=function(e){return r(this,void 0,void 0,function(){var t,n,r,a,o=this;return i(this,function(i){switch(i.label){case 0:return t=Sc.isSameOrigin(e),n=!Oc(e)&&this._options.useCORS===!0&&q.SUPPORT_CORS_IMAGES&&!t,r=!Oc(e)&&!t&&!Ac(e)&&typeof this._options.proxy==`string`&&q.SUPPORT_CORS_XHR&&!n,!t&&this._options.allowTaint===!1&&!Oc(e)&&!Ac(e)&&!r&&!n?[2]:(a=e,r?[4,this.proxy(a)]:[3,2]);case 1:a=i.sent(),i.label=2;case 2:return this.context.logger.debug(`Added image `+e.substring(0,256)),[4,new Promise(function(e,t){var r=new Image;r.onload=function(){return e(r)},r.onerror=t,(kc(a)||n)&&(r.crossOrigin=`anonymous`),r.src=a,r.complete===!0&&setTimeout(function(){return e(r)},500),o._options.imageTimeout>0&&setTimeout(function(){return t(`Timed out (`+o._options.imageTimeout+`ms) loading image`)},o._options.imageTimeout)})];case 3:return[2,i.sent()]}})})},e.prototype.has=function(e){return this._cache[e]!==void 0},e.prototype.keys=function(){return Promise.resolve(Object.keys(this._cache))},e.prototype.proxy=function(e){var t=this,n=this._options.proxy;if(!n)throw Error(`No proxy defined`);var r=e.substring(0,256);return new Promise(function(i,a){var o=q.SUPPORT_RESPONSE_TYPE?`blob`:`text`,s=new XMLHttpRequest;s.onload=function(){if(s.status===200)if(o===`text`)i(s.response);else{var e=new FileReader;e.addEventListener(`load`,function(){return i(e.result)},!1),e.addEventListener(`error`,function(e){return a(e)},!1),e.readAsDataURL(s.response)}else a(`Failed to proxy resource `+r+` with status code `+s.status)},s.onerror=a;var c=n.indexOf(`?`)>-1?`&`:`?`;if(s.open(`GET`,``+n+c+`url=`+encodeURIComponent(e)+`&responseType=`+o),o!==`text`&&s instanceof XMLHttpRequest&&(s.responseType=o),t._options.imageTimeout){var l=t._options.imageTimeout;s.timeout=l,s.ontimeout=function(){return a(`Timed out (`+l+`ms) proxying `+r)}}s.send()})},e}(),wc=/^data:image\/svg\+xml/i,Tc=/^data:image\/.*;base64,/i,Ec=/^data:image\/.*/i,Dc=function(e){return q.SUPPORT_SVG_DRAWING||!jc(e)},Oc=function(e){return Ec.test(e)},kc=function(e){return Tc.test(e)},Ac=function(e){return e.substr(0,4)===`blob`},jc=function(e){return e.substr(-3).toLowerCase()===`svg`||wc.test(e)},Y=function(){function e(e,t){this.type=0,this.x=e,this.y=t}return e.prototype.add=function(t,n){return new e(this.x+t,this.y+n)},e}(),Mc=function(e,t,n){return new Y(e.x+(t.x-e.x)*n,e.y+(t.y-e.y)*n)},Nc=function(){function e(e,t,n,r){this.type=1,this.start=e,this.startControl=t,this.endControl=n,this.end=r}return e.prototype.subdivide=function(t,n){var r=Mc(this.start,this.startControl,t),i=Mc(this.startControl,this.endControl,t),a=Mc(this.endControl,this.end,t),o=Mc(r,i,t),s=Mc(i,a,t),c=Mc(o,s,t);return n?new e(this.start,r,o,c):new e(c,s,a,this.end)},e.prototype.add=function(t,n){return new e(this.start.add(t,n),this.startControl.add(t,n),this.endControl.add(t,n),this.end.add(t,n))},e.prototype.reverse=function(){return new e(this.end,this.endControl,this.startControl,this.start)},e}(),X=function(e){return e.type===1},Pc=function(){function e(e){var t=e.styles,n=e.bounds,r=lr(t.borderTopLeftRadius,n.width,n.height),i=r[0],a=r[1],o=lr(t.borderTopRightRadius,n.width,n.height),s=o[0],c=o[1],l=lr(t.borderBottomRightRadius,n.width,n.height),u=l[0],d=l[1],f=lr(t.borderBottomLeftRadius,n.width,n.height),p=f[0],m=f[1],h=[];h.push((i+s)/n.width),h.push((p+u)/n.width),h.push((a+m)/n.height),h.push((c+d)/n.height);var g=Math.max.apply(Math,h);g>1&&(i/=g,a/=g,s/=g,c/=g,u/=g,d/=g,p/=g,m/=g);var _=n.width-s,v=n.height-d,y=n.width-u,b=n.height-m,x=t.borderTopWidth,S=t.borderRightWidth,C=t.borderBottomWidth,w=t.borderLeftWidth,T=z(t.paddingTop,e.bounds.width),E=z(t.paddingRight,e.bounds.width),D=z(t.paddingBottom,e.bounds.width),O=z(t.paddingLeft,e.bounds.width);this.topLeftBorderDoubleOuterBox=i>0||a>0?Q(n.left+w/3,n.top+x/3,i-w/3,a-x/3,Z.TOP_LEFT):new Y(n.left+w/3,n.top+x/3),this.topRightBorderDoubleOuterBox=i>0||a>0?Q(n.left+_,n.top+x/3,s-S/3,c-x/3,Z.TOP_RIGHT):new Y(n.left+n.width-S/3,n.top+x/3),this.bottomRightBorderDoubleOuterBox=u>0||d>0?Q(n.left+y,n.top+v,u-S/3,d-C/3,Z.BOTTOM_RIGHT):new Y(n.left+n.width-S/3,n.top+n.height-C/3),this.bottomLeftBorderDoubleOuterBox=p>0||m>0?Q(n.left+w/3,n.top+b,p-w/3,m-C/3,Z.BOTTOM_LEFT):new Y(n.left+w/3,n.top+n.height-C/3),this.topLeftBorderDoubleInnerBox=i>0||a>0?Q(n.left+w*2/3,n.top+x*2/3,i-w*2/3,a-x*2/3,Z.TOP_LEFT):new Y(n.left+w*2/3,n.top+x*2/3),this.topRightBorderDoubleInnerBox=i>0||a>0?Q(n.left+_,n.top+x*2/3,s-S*2/3,c-x*2/3,Z.TOP_RIGHT):new Y(n.left+n.width-S*2/3,n.top+x*2/3),this.bottomRightBorderDoubleInnerBox=u>0||d>0?Q(n.left+y,n.top+v,u-S*2/3,d-C*2/3,Z.BOTTOM_RIGHT):new Y(n.left+n.width-S*2/3,n.top+n.height-C*2/3),this.bottomLeftBorderDoubleInnerBox=p>0||m>0?Q(n.left+w*2/3,n.top+b,p-w*2/3,m-C*2/3,Z.BOTTOM_LEFT):new Y(n.left+w*2/3,n.top+n.height-C*2/3),this.topLeftBorderStroke=i>0||a>0?Q(n.left+w/2,n.top+x/2,i-w/2,a-x/2,Z.TOP_LEFT):new Y(n.left+w/2,n.top+x/2),this.topRightBorderStroke=i>0||a>0?Q(n.left+_,n.top+x/2,s-S/2,c-x/2,Z.TOP_RIGHT):new Y(n.left+n.width-S/2,n.top+x/2),this.bottomRightBorderStroke=u>0||d>0?Q(n.left+y,n.top+v,u-S/2,d-C/2,Z.BOTTOM_RIGHT):new Y(n.left+n.width-S/2,n.top+n.height-C/2),this.bottomLeftBorderStroke=p>0||m>0?Q(n.left+w/2,n.top+b,p-w/2,m-C/2,Z.BOTTOM_LEFT):new Y(n.left+w/2,n.top+n.height-C/2),this.topLeftBorderBox=i>0||a>0?Q(n.left,n.top,i,a,Z.TOP_LEFT):new Y(n.left,n.top),this.topRightBorderBox=s>0||c>0?Q(n.left+_,n.top,s,c,Z.TOP_RIGHT):new Y(n.left+n.width,n.top),this.bottomRightBorderBox=u>0||d>0?Q(n.left+y,n.top+v,u,d,Z.BOTTOM_RIGHT):new Y(n.left+n.width,n.top+n.height),this.bottomLeftBorderBox=p>0||m>0?Q(n.left,n.top+b,p,m,Z.BOTTOM_LEFT):new Y(n.left,n.top+n.height),this.topLeftPaddingBox=i>0||a>0?Q(n.left+w,n.top+x,Math.max(0,i-w),Math.max(0,a-x),Z.TOP_LEFT):new Y(n.left+w,n.top+x),this.topRightPaddingBox=s>0||c>0?Q(n.left+Math.min(_,n.width-S),n.top+x,_>n.width+S?0:Math.max(0,s-S),Math.max(0,c-x),Z.TOP_RIGHT):new Y(n.left+n.width-S,n.top+x),this.bottomRightPaddingBox=u>0||d>0?Q(n.left+Math.min(y,n.width-w),n.top+Math.min(v,n.height-C),Math.max(0,u-S),Math.max(0,d-C),Z.BOTTOM_RIGHT):new Y(n.left+n.width-S,n.top+n.height-C),this.bottomLeftPaddingBox=p>0||m>0?Q(n.left+w,n.top+Math.min(b,n.height-C),Math.max(0,p-w),Math.max(0,m-C),Z.BOTTOM_LEFT):new Y(n.left+w,n.top+n.height-C),this.topLeftContentBox=i>0||a>0?Q(n.left+w+O,n.top+x+T,Math.max(0,i-(w+O)),Math.max(0,a-(x+T)),Z.TOP_LEFT):new Y(n.left+w+O,n.top+x+T),this.topRightContentBox=s>0||c>0?Q(n.left+Math.min(_,n.width+w+O),n.top+x+T,_>n.width+w+O?0:s-w+O,c-(x+T),Z.TOP_RIGHT):new Y(n.left+n.width-(S+E),n.top+x+T),this.bottomRightContentBox=u>0||d>0?Q(n.left+Math.min(y,n.width-(w+O)),n.top+Math.min(v,n.height+x+T),Math.max(0,u-(S+E)),d-(C+D),Z.BOTTOM_RIGHT):new Y(n.left+n.width-(S+E),n.top+n.height-(C+D)),this.bottomLeftContentBox=p>0||m>0?Q(n.left+w+O,n.top+b,Math.max(0,p-(w+O)),m-(C+D),Z.BOTTOM_LEFT):new Y(n.left+w+O,n.top+n.height-(C+D))}return e}(),Z;(function(e){e[e.TOP_LEFT=0]=`TOP_LEFT`,e[e.TOP_RIGHT=1]=`TOP_RIGHT`,e[e.BOTTOM_RIGHT=2]=`BOTTOM_RIGHT`,e[e.BOTTOM_LEFT=3]=`BOTTOM_LEFT`})(Z||={});var Q=function(e,t,n,r,i){var a=4*((Math.sqrt(2)-1)/3),o=n*a,s=r*a,c=e+n,l=t+r;switch(i){case Z.TOP_LEFT:return new Nc(new Y(e,l),new Y(e,l-s),new Y(c-o,t),new Y(c,t));case Z.TOP_RIGHT:return new Nc(new Y(e,t),new Y(e+o,t),new Y(c,l-s),new Y(c,l));case Z.BOTTOM_RIGHT:return new Nc(new Y(c,t),new Y(c,t+s),new Y(e+o,l),new Y(e,l));case Z.BOTTOM_LEFT:default:return new Nc(new Y(c,l),new Y(c-o,l),new Y(e,t+s),new Y(e,t))}},Fc=function(e){return[e.topLeftBorderBox,e.topRightBorderBox,e.bottomRightBorderBox,e.bottomLeftBorderBox]},Ic=function(e){return[e.topLeftContentBox,e.topRightContentBox,e.bottomRightContentBox,e.bottomLeftContentBox]},Lc=function(e){return[e.topLeftPaddingBox,e.topRightPaddingBox,e.bottomRightPaddingBox,e.bottomLeftPaddingBox]},Rc=function(){function e(e,t,n){this.offsetX=e,this.offsetY=t,this.matrix=n,this.type=0,this.target=6}return e}(),zc=function(){function e(e,t){this.path=e,this.target=t,this.type=1}return e}(),Bc=function(){function e(e){this.opacity=e,this.type=2,this.target=6}return e}(),Vc=function(e){return e.type===0},Hc=function(e){return e.type===1},Uc=function(e){return e.type===2},Wc=function(e,t){return e.length===t.length?e.some(function(e,n){return e===t[n]}):!1},Gc=function(e,t,n,r,i){return e.map(function(e,a){switch(a){case 0:return e.add(t,n);case 1:return e.add(t+r,n);case 2:return e.add(t+r,n+i);case 3:return e.add(t,n+i)}return e})},Kc=function(){function e(e){this.element=e,this.inlineLevel=[],this.nonInlineLevel=[],this.negativeZIndex=[],this.zeroOrAutoZIndexOrTransformedOrOpacity=[],this.positiveZIndex=[],this.nonPositionedFloats=[],this.nonPositionedInlineLevel=[]}return e}(),qc=function(){function e(e,t){if(this.container=e,this.parent=t,this.effects=[],this.curves=new Pc(this.container),this.container.styles.opacity<1&&this.effects.push(new Bc(this.container.styles.opacity)),this.container.styles.transform!==null){var n=this.container.bounds.left+this.container.styles.transformOrigin[0].number,r=this.container.bounds.top+this.container.styles.transformOrigin[1].number,i=this.container.styles.transform;this.effects.push(new Rc(n,r,i))}if(this.container.styles.overflowX!==0){var a=Fc(this.curves),o=Lc(this.curves);Wc(a,o)?this.effects.push(new zc(a,6)):(this.effects.push(new zc(a,2)),this.effects.push(new zc(o,4)))}}return e.prototype.getEffects=function(e){for(var t=[2,3].indexOf(this.container.styles.position)===-1,n=this.parent,r=this.effects.slice(0);n;){var i=n.effects.filter(function(e){return!Hc(e)});if(t||n.container.styles.position!==0||!n.parent){if(r.unshift.apply(r,i),t=[2,3].indexOf(n.container.styles.position)===-1,n.container.styles.overflowX!==0){var a=Fc(n.curves),o=Lc(n.curves);Wc(a,o)||r.unshift(new zc(o,6))}}else r.unshift.apply(r,i);n=n.parent}return r.filter(function(t){return W(t.target,e)})},e}(),Jc=function(e,t,n,r){e.container.elements.forEach(function(i){var a=W(i.flags,4),o=W(i.flags,2),s=new qc(i,e);W(i.styles.display,2048)&&r.push(s);var c=W(i.flags,8)?[]:r;if(a||o){var l=a||i.styles.isPositioned()?n:t,u=new Kc(s);if(i.styles.isPositioned()||i.styles.opacity<1||i.styles.isTransformed()){var d=i.styles.zIndex.order;if(d<0){var f=0;l.negativeZIndex.some(function(e,t){return d>e.element.container.styles.zIndex.order?(f=t,!1):f>0}),l.negativeZIndex.splice(f,0,u)}else if(d>0){var p=0;l.positiveZIndex.some(function(e,t){return d>=e.element.container.styles.zIndex.order?(p=t+1,!1):p>0}),l.positiveZIndex.splice(p,0,u)}else l.zeroOrAutoZIndexOrTransformedOrOpacity.push(u)}else i.styles.isFloating()?l.nonPositionedFloats.push(u):l.nonPositionedInlineLevel.push(u);Jc(s,u,a?u:n,c)}else i.styles.isInlineLevel()?t.inlineLevel.push(s):t.nonInlineLevel.push(s),Jc(s,t,n,c);W(i.flags,8)&&Yc(i,c)})},Yc=function(e,t){for(var n=e instanceof es?e.start:1,r=e instanceof es?e.reversed:!1,i=0;i0&&e.intrinsicHeight>0){var r=rl(e),i=Lc(t);this.path(i),this.ctx.save(),this.ctx.clip(),this.ctx.drawImage(n,0,0,e.intrinsicWidth,e.intrinsicHeight,r.left,r.top,r.width,r.height),this.ctx.restore()}},n.prototype.renderNodeContent=function(e){return r(this,void 0,void 0,function(){var t,r,a,s,c,l,u,u,d,f,p,m,h,g,_,v,y,b,x,u,S,h,v;return i(this,function(i){switch(i.label){case 0:this.applyEffects(e.getEffects(4)),t=e.container,r=e.curves,a=t.styles,s=0,c=t.textNodes,i.label=1;case 1:return s0&&f>0&&(p=r.ctx.createPattern(x,`repeat`),r.renderRepeat(c,p,l,u))):Jr(n)&&(w=ol(e,t,[null,null,null]),c=w[0],T=w[1],E=w[2],d=w[3],f=w[4],D=n.position.length===0?[sr]:n.position,l=z(D[0],d),u=z(D[D.length-1],f),O=Nr(n,l,u,d,f),ee=O[0],te=O[1],ee>0&&te>0&&(ne=r.ctx.createRadialGradient(T+l,E+u,0,T+l,E+u,ee),kr(n.stops,ee*2).forEach(function(e){return ne.addColorStop(e.stop,V(e.color))}),r.path(c),r.ctx.fillStyle=ne,ee===te?r.ctx.fill():(re=e.bounds.left+.5*e.bounds.width,ie=e.bounds.top+.5*e.bounds.height,ae=te/ee,oe=1/ae,r.ctx.save(),r.ctx.translate(re,ie),r.ctx.transform(1,0,0,ae,0,0),r.ctx.translate(-re,-ie),r.ctx.fillRect(T,oe*(E-ie)+ie,d,f*oe),r.ctx.restore()))),i.label=6;case 6:return t--,[2]}})},r=this,a=0,o=e.styles.backgroundImage.slice(0).reverse(),c.label=1;case 1:return a0?l.style===2?[4,this.renderDashedDottedBorder(l.color,l.width,o,e.curves,2)]:[3,5]:[3,11]):[3,13];case 4:return i.sent(),[3,11];case 5:return l.style===3?[4,this.renderDashedDottedBorder(l.color,l.width,o,e.curves,3)]:[3,7];case 6:return i.sent(),[3,11];case 7:return l.style===4?[4,this.renderDoubleBorder(l.color,l.width,o,e.curves)]:[3,9];case 8:return i.sent(),[3,11];case 9:return[4,this.renderSolidBorder(l.color,o,e.curves)];case 10:i.sent(),i.label=11;case 11:o++,i.label=12;case 12:return s++,[3,3];case 13:return[2]}})})},n.prototype.renderDashedDottedBorder=function(e,t,n,a,o){return r(this,void 0,void 0,function(){var r,s,c,l,u,d,f,p,m,h,g,_,v,y,b,x,b,x;return i(this,function(i){return this.ctx.save(),r=el(a,n),s=Zc(a,n),o===2&&(this.path(s),this.ctx.clip()),X(s[0])?(c=s[0].start.x,l=s[0].start.y):(c=s[0].x,l=s[0].y),X(s[1])?(u=s[1].end.x,d=s[1].end.y):(u=s[1].x,d=s[1].y),f=Math.abs(n===0||n===2?c-u:l-d),this.ctx.beginPath(),o===3?this.formatPath(r):this.formatPath(s.slice(0,2)),p=t<3?t*3:t*2,m=t<3?t*2:t,o===3&&(p=t,m=t),h=!0,f<=p*2?h=!1:f<=p*2+m?(g=f/(2*p+m),p*=g,m*=g):(_=Math.floor((f+m)/(p+m)),v=(f-_*p)/(_-1),y=(f-(_+1)*p)/_,m=y<=0||Math.abs(m-v):not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-1\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 1.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 1.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-2\.5>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 2.5) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 2.5) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-3>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 3) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 3) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-4>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse)))}:where(.space-y-6>:not(:last-child)){--tw-space-y-reverse:0;margin-block-start:calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse));margin-block-end:calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse)))}.truncate{text-overflow:ellipsis;white-space:nowrap;overflow:hidden}.overflow-hidden{overflow:hidden}.overflow-x-auto{overflow-x:auto}.overflow-y-auto{overflow-y:auto}.rounded{border-radius:.25rem}.rounded-2xl{border-radius:var(--radius-2xl)}.rounded-full{border-radius:3.40282e38px}.rounded-lg{border-radius:var(--radius-lg)}.rounded-md{border-radius:var(--radius-md)}.rounded-sm{border-radius:var(--radius-sm)}.rounded-xl{border-radius:var(--radius-xl)}.border{border-style:var(--tw-border-style);border-width:1px}.border-2{border-style:var(--tw-border-style);border-width:2px}.border-4{border-style:var(--tw-border-style);border-width:4px}.border-t{border-top-style:var(--tw-border-style);border-top-width:1px}.border-r{border-right-style:var(--tw-border-style);border-right-width:1px}.border-b{border-bottom-style:var(--tw-border-style);border-bottom-width:1px}.border-l{border-left-style:var(--tw-border-style);border-left-width:1px}.border-l-4{border-left-style:var(--tw-border-style);border-left-width:4px}.border-none{--tw-border-style:none;border-style:none}.border-amber-500\/20{border-color:#f99c0033}@supports (color:color-mix(in lab, red, red)){.border-amber-500\/20{border-color:color-mix(in oklab, var(--color-amber-500) 20%, transparent)}}.border-amber-600\/30{border-color:#dd74004d}@supports (color:color-mix(in lab, red, red)){.border-amber-600\/30{border-color:color-mix(in oklab, var(--color-amber-600) 30%, transparent)}}.border-amber-800\/30{border-color:#953d004d}@supports (color:color-mix(in lab, red, red)){.border-amber-800\/30{border-color:color-mix(in oklab, var(--color-amber-800) 30%, transparent)}}.border-amber-900\/60{border-color:#7b330699}@supports (color:color-mix(in lab, red, red)){.border-amber-900\/60{border-color:color-mix(in oklab, var(--color-amber-900) 60%, transparent)}}.border-emerald-500\/20{border-color:#00bb7f33}@supports (color:color-mix(in lab, red, red)){.border-emerald-500\/20{border-color:color-mix(in oklab, var(--color-emerald-500) 20%, transparent)}}.border-emerald-700{border-color:var(--color-emerald-700)}.border-emerald-800\/30{border-color:#005f464d}@supports (color:color-mix(in lab, red, red)){.border-emerald-800\/30{border-color:color-mix(in oklab, var(--color-emerald-800) 30%, transparent)}}.border-red-500\/15{border-color:#fb2c3626}@supports (color:color-mix(in lab, red, red)){.border-red-500\/15{border-color:color-mix(in oklab, var(--color-red-500) 15%, transparent)}}.border-red-500\/20{border-color:#fb2c3633}@supports (color:color-mix(in lab, red, red)){.border-red-500\/20{border-color:color-mix(in oklab, var(--color-red-500) 20%, transparent)}}.border-rose-900{border-color:var(--color-rose-900)}.border-rose-900\/60{border-color:#8b083699}@supports (color:color-mix(in lab, red, red)){.border-rose-900\/60{border-color:color-mix(in oklab, var(--color-rose-900) 60%, transparent)}}.border-rose-900\/70{border-color:#8b0836b3}@supports (color:color-mix(in lab, red, red)){.border-rose-900\/70{border-color:color-mix(in oklab, var(--color-rose-900) 70%, transparent)}}.border-sky-400{border-color:var(--color-sky-400)}.border-sky-500{border-color:var(--color-sky-500)}.border-sky-500\/20{border-color:#00a5ef33}@supports (color:color-mix(in lab, red, red)){.border-sky-500\/20{border-color:color-mix(in oklab, var(--color-sky-500) 20%, transparent)}}.border-sky-500\/30{border-color:#00a5ef4d}@supports (color:color-mix(in lab, red, red)){.border-sky-500\/30{border-color:color-mix(in oklab, var(--color-sky-500) 30%, transparent)}}.border-sky-700{border-color:var(--color-sky-700)}.border-sky-800{border-color:var(--color-sky-800)}.border-sky-800\/30{border-color:#0059864d}@supports (color:color-mix(in lab, red, red)){.border-sky-800\/30{border-color:color-mix(in oklab, var(--color-sky-800) 30%, transparent)}}.border-sky-900\/50{border-color:#024a7080}@supports (color:color-mix(in lab, red, red)){.border-sky-900\/50{border-color:color-mix(in oklab, var(--color-sky-900) 50%, transparent)}}.border-sky-900\/60{border-color:#024a7099}@supports (color:color-mix(in lab, red, red)){.border-sky-900\/60{border-color:color-mix(in oklab, var(--color-sky-900) 60%, transparent)}}.border-sky-900\/70{border-color:#024a70b3}@supports (color:color-mix(in lab, red, red)){.border-sky-900\/70{border-color:color-mix(in oklab, var(--color-sky-900) 70%, transparent)}}.border-transparent{border-color:#0000}.border-white{border-color:var(--color-white)}.border-zinc-700{border-color:var(--color-zinc-700)}.border-zinc-800{border-color:var(--color-zinc-800)}.border-zinc-800\/40{border-color:#27272a66}@supports (color:color-mix(in lab, red, red)){.border-zinc-800\/40{border-color:color-mix(in oklab, var(--color-zinc-800) 40%, transparent)}}.border-zinc-800\/60{border-color:#27272a99}@supports (color:color-mix(in lab, red, red)){.border-zinc-800\/60{border-color:color-mix(in oklab, var(--color-zinc-800) 60%, transparent)}}.border-t-transparent{border-top-color:#0000}.border-l-emerald-500{border-left-color:var(--color-emerald-500)}.border-l-rose-500{border-left-color:var(--color-rose-500)}.border-l-sky-500{border-left-color:var(--color-sky-500)}.bg-amber-400{background-color:var(--color-amber-400)}.bg-amber-500{background-color:var(--color-amber-500)}.bg-amber-500\/10{background-color:#f99c001a}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\/10{background-color:color-mix(in oklab, var(--color-amber-500) 10%, transparent)}}.bg-amber-500\/20{background-color:#f99c0033}@supports (color:color-mix(in lab, red, red)){.bg-amber-500\/20{background-color:color-mix(in oklab, var(--color-amber-500) 20%, transparent)}}.bg-amber-950{background-color:var(--color-amber-950)}.bg-amber-950\/30{background-color:#4619014d}@supports (color:color-mix(in lab, red, red)){.bg-amber-950\/30{background-color:color-mix(in oklab, var(--color-amber-950) 30%, transparent)}}.bg-amber-950\/50{background-color:#46190180}@supports (color:color-mix(in lab, red, red)){.bg-amber-950\/50{background-color:color-mix(in oklab, var(--color-amber-950) 50%, transparent)}}.bg-amber-950\/80{background-color:#461901cc}@supports (color:color-mix(in lab, red, red)){.bg-amber-950\/80{background-color:color-mix(in oklab, var(--color-amber-950) 80%, transparent)}}.bg-black\/50{background-color:#00000080}@supports (color:color-mix(in lab, red, red)){.bg-black\/50{background-color:color-mix(in oklab, var(--color-black) 50%, transparent)}}.bg-black\/60{background-color:#0009}@supports (color:color-mix(in lab, red, red)){.bg-black\/60{background-color:color-mix(in oklab, var(--color-black) 60%, transparent)}}.bg-current{background-color:currentColor}.bg-cyan-600{background-color:var(--color-cyan-600)}.bg-emerald-400{background-color:var(--color-emerald-400)}.bg-emerald-500{background-color:var(--color-emerald-500)}.bg-emerald-500\/10{background-color:#00bb7f1a}@supports (color:color-mix(in lab, red, red)){.bg-emerald-500\/10{background-color:color-mix(in oklab, var(--color-emerald-500) 10%, transparent)}}.bg-emerald-950{background-color:var(--color-emerald-950)}.bg-red-500\/5{background-color:#fb2c360d}@supports (color:color-mix(in lab, red, red)){.bg-red-500\/5{background-color:color-mix(in oklab, var(--color-red-500) 5%, transparent)}}.bg-red-500\/10{background-color:#fb2c361a}@supports (color:color-mix(in lab, red, red)){.bg-red-500\/10{background-color:color-mix(in oklab, var(--color-red-500) 10%, transparent)}}.bg-rose-500{background-color:var(--color-rose-500)}.bg-rose-600{background-color:var(--color-rose-600)}.bg-rose-950{background-color:var(--color-rose-950)}.bg-rose-950\/40{background-color:#4d021866}@supports (color:color-mix(in lab, red, red)){.bg-rose-950\/40{background-color:color-mix(in oklab, var(--color-rose-950) 40%, transparent)}}.bg-rose-950\/60{background-color:#4d021899}@supports (color:color-mix(in lab, red, red)){.bg-rose-950\/60{background-color:color-mix(in oklab, var(--color-rose-950) 60%, transparent)}}.bg-sky-300\/95{background-color:#77d4fff2}@supports (color:color-mix(in lab, red, red)){.bg-sky-300\/95{background-color:color-mix(in oklab, var(--color-sky-300) 95%, transparent)}}.bg-sky-400{background-color:var(--color-sky-400)}.bg-sky-500\/10{background-color:#00a5ef1a}@supports (color:color-mix(in lab, red, red)){.bg-sky-500\/10{background-color:color-mix(in oklab, var(--color-sky-500) 10%, transparent)}}.bg-sky-500\/15{background-color:#00a5ef26}@supports (color:color-mix(in lab, red, red)){.bg-sky-500\/15{background-color:color-mix(in oklab, var(--color-sky-500) 15%, transparent)}}.bg-sky-600{background-color:var(--color-sky-600)}.bg-sky-950{background-color:var(--color-sky-950)}.bg-sky-950\/20{background-color:#052f4a33}@supports (color:color-mix(in lab, red, red)){.bg-sky-950\/20{background-color:color-mix(in oklab, var(--color-sky-950) 20%, transparent)}}.bg-sky-950\/30{background-color:#052f4a4d}@supports (color:color-mix(in lab, red, red)){.bg-sky-950\/30{background-color:color-mix(in oklab, var(--color-sky-950) 30%, transparent)}}.bg-sky-950\/50{background-color:#052f4a80}@supports (color:color-mix(in lab, red, red)){.bg-sky-950\/50{background-color:color-mix(in oklab, var(--color-sky-950) 50%, transparent)}}.bg-sky-950\/60{background-color:#052f4a99}@supports (color:color-mix(in lab, red, red)){.bg-sky-950\/60{background-color:color-mix(in oklab, var(--color-sky-950) 60%, transparent)}}.bg-sky-950\/90{background-color:#052f4ae6}@supports (color:color-mix(in lab, red, red)){.bg-sky-950\/90{background-color:color-mix(in oklab, var(--color-sky-950) 90%, transparent)}}.bg-transparent{background-color:#0000}.bg-white{background-color:var(--color-white)}.bg-zinc-700{background-color:var(--color-zinc-700)}.bg-zinc-800{background-color:var(--color-zinc-800)}.bg-zinc-800\/60{background-color:#27272a99}@supports (color:color-mix(in lab, red, red)){.bg-zinc-800\/60{background-color:color-mix(in oklab, var(--color-zinc-800) 60%, transparent)}}.bg-zinc-900{background-color:var(--color-zinc-900)}.bg-zinc-900\/10{background-color:#18181b1a}@supports (color:color-mix(in lab, red, red)){.bg-zinc-900\/10{background-color:color-mix(in oklab, var(--color-zinc-900) 10%, transparent)}}.bg-zinc-900\/30{background-color:#18181b4d}@supports (color:color-mix(in lab, red, red)){.bg-zinc-900\/30{background-color:color-mix(in oklab, var(--color-zinc-900) 30%, transparent)}}.bg-zinc-900\/40{background-color:#18181b66}@supports (color:color-mix(in lab, red, red)){.bg-zinc-900\/40{background-color:color-mix(in oklab, var(--color-zinc-900) 40%, transparent)}}.bg-zinc-900\/60{background-color:#18181b99}@supports (color:color-mix(in lab, red, red)){.bg-zinc-900\/60{background-color:color-mix(in oklab, var(--color-zinc-900) 60%, transparent)}}.bg-zinc-900\/70{background-color:#18181bb3}@supports (color:color-mix(in lab, red, red)){.bg-zinc-900\/70{background-color:color-mix(in oklab, var(--color-zinc-900) 70%, transparent)}}.bg-zinc-900\/80{background-color:#18181bcc}@supports (color:color-mix(in lab, red, red)){.bg-zinc-900\/80{background-color:color-mix(in oklab, var(--color-zinc-900) 80%, transparent)}}.bg-zinc-900\/95{background-color:#18181bf2}@supports (color:color-mix(in lab, red, red)){.bg-zinc-900\/95{background-color:color-mix(in oklab, var(--color-zinc-900) 95%, transparent)}}.bg-zinc-950{background-color:var(--color-zinc-950)}.bg-zinc-950\/40{background-color:#09090b66}@supports (color:color-mix(in lab, red, red)){.bg-zinc-950\/40{background-color:color-mix(in oklab, var(--color-zinc-950) 40%, transparent)}}.bg-zinc-950\/50{background-color:#09090b80}@supports (color:color-mix(in lab, red, red)){.bg-zinc-950\/50{background-color:color-mix(in oklab, var(--color-zinc-950) 50%, transparent)}}.bg-zinc-950\/80{background-color:#09090bcc}@supports (color:color-mix(in lab, red, red)){.bg-zinc-950\/80{background-color:color-mix(in oklab, var(--color-zinc-950) 80%, transparent)}}.bg-zinc-950\/85{background-color:#09090bd9}@supports (color:color-mix(in lab, red, red)){.bg-zinc-950\/85{background-color:color-mix(in oklab, var(--color-zinc-950) 85%, transparent)}}.bg-zinc-950\/90{background-color:#09090be6}@supports (color:color-mix(in lab, red, red)){.bg-zinc-950\/90{background-color:color-mix(in oklab, var(--color-zinc-950) 90%, transparent)}}.bg-gradient-to-br{--tw-gradient-position:to bottom right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-gradient-to-r{--tw-gradient-position:to right in oklab;background-image:linear-gradient(var(--tw-gradient-stops))}.bg-\[radial-gradient\(circle_at_30\%_20\%\,rgba\(14\,165\,233\,0\.1\)\,transparent_40\%\)\]{background-image:radial-gradient(circle at 30% 20%,#0ea5e91a,#0000 40%)}.from-sky-400{--tw-gradient-from:var(--color-sky-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-sky-500{--tw-gradient-from:var(--color-sky-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.from-sky-500\/20{--tw-gradient-from:#00a5ef33}@supports (color:color-mix(in lab, red, red)){.from-sky-500\/20{--tw-gradient-from:color-mix(in oklab, var(--color-sky-500) 20%, transparent)}}.from-sky-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.via-blue-500{--tw-gradient-via:var(--color-blue-500);--tw-gradient-via-stops:var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-via) var(--tw-gradient-via-position), var(--tw-gradient-to) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-via-stops)}.to-blue-500{--tw-gradient-to:var(--color-blue-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-blue-500\/20{--tw-gradient-to:#3080ff33}@supports (color:color-mix(in lab, red, red)){.to-blue-500\/20{--tw-gradient-to:color-mix(in oklab, var(--color-blue-500) 20%, transparent)}}.to-blue-500\/20{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-blue-600{--tw-gradient-to:var(--color-blue-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-blue-700{--tw-gradient-to:var(--color-blue-700);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.to-indigo-600{--tw-gradient-to:var(--color-indigo-600);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.bg-clip-text{-webkit-background-clip:text;background-clip:text}.p-1{padding:calc(var(--spacing) * 1)}.p-2{padding:calc(var(--spacing) * 2)}.p-2\.5{padding:calc(var(--spacing) * 2.5)}.p-3{padding:calc(var(--spacing) * 3)}.p-4{padding:calc(var(--spacing) * 4)}.p-5{padding:calc(var(--spacing) * 5)}.p-6{padding:calc(var(--spacing) * 6)}.p-8{padding:calc(var(--spacing) * 8)}.px-1{padding-inline:calc(var(--spacing) * 1)}.px-1\.5{padding-inline:calc(var(--spacing) * 1.5)}.px-2{padding-inline:calc(var(--spacing) * 2)}.px-2\.5{padding-inline:calc(var(--spacing) * 2.5)}.px-3{padding-inline:calc(var(--spacing) * 3)}.px-3\.5{padding-inline:calc(var(--spacing) * 3.5)}.px-4{padding-inline:calc(var(--spacing) * 4)}.px-5{padding-inline:calc(var(--spacing) * 5)}.py-0\.5{padding-block:calc(var(--spacing) * .5)}.py-1{padding-block:calc(var(--spacing) * 1)}.py-1\.5{padding-block:calc(var(--spacing) * 1.5)}.py-2{padding-block:calc(var(--spacing) * 2)}.py-2\.5{padding-block:calc(var(--spacing) * 2.5)}.py-3{padding-block:calc(var(--spacing) * 3)}.py-4{padding-block:calc(var(--spacing) * 4)}.py-6{padding-block:calc(var(--spacing) * 6)}.py-8{padding-block:calc(var(--spacing) * 8)}.py-10{padding-block:calc(var(--spacing) * 10)}.py-px{padding-block:1px}.pt-1{padding-top:calc(var(--spacing) * 1)}.pt-1\.5{padding-top:calc(var(--spacing) * 1.5)}.pt-2{padding-top:calc(var(--spacing) * 2)}.pt-4{padding-top:calc(var(--spacing) * 4)}.pr-1{padding-right:calc(var(--spacing) * 1)}.pr-2{padding-right:calc(var(--spacing) * 2)}.pb-1\.5{padding-bottom:calc(var(--spacing) * 1.5)}.pb-2{padding-bottom:calc(var(--spacing) * 2)}.pl-6{padding-left:calc(var(--spacing) * 6)}.text-center{text-align:center}.text-left{text-align:left}.text-right{text-align:right}.font-mono{font-family:var(--font-mono)}.text-2xl{font-size:var(--text-2xl);line-height:var(--tw-leading,var(--text-2xl--line-height))}.text-3xl{font-size:var(--text-3xl);line-height:var(--tw-leading,var(--text-3xl--line-height))}.text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}.text-lg{font-size:var(--text-lg);line-height:var(--tw-leading,var(--text-lg--line-height))}.text-sm{font-size:var(--text-sm);line-height:var(--tw-leading,var(--text-sm--line-height))}.text-xl{font-size:var(--text-xl);line-height:var(--tw-leading,var(--text-xl--line-height))}.text-xs{font-size:var(--text-xs);line-height:var(--tw-leading,var(--text-xs--line-height))}.text-\[8px\]{font-size:8px}.text-\[9px\]{font-size:9px}.text-\[10px\]{font-size:10px}.text-\[11px\]{font-size:11px}.text-\[12px\]{font-size:12px}.leading-none{--tw-leading:1;line-height:1}.leading-relaxed{--tw-leading:var(--leading-relaxed);line-height:var(--leading-relaxed)}.leading-snug{--tw-leading:var(--leading-snug);line-height:var(--leading-snug)}.leading-tight{--tw-leading:var(--leading-tight);line-height:var(--leading-tight)}.font-black{--tw-font-weight:var(--font-weight-black);font-weight:var(--font-weight-black)}.font-bold{--tw-font-weight:var(--font-weight-bold);font-weight:var(--font-weight-bold)}.font-medium{--tw-font-weight:var(--font-weight-medium);font-weight:var(--font-weight-medium)}.font-normal{--tw-font-weight:var(--font-weight-normal);font-weight:var(--font-weight-normal)}.font-semibold{--tw-font-weight:var(--font-weight-semibold);font-weight:var(--font-weight-semibold)}.tracking-tight{--tw-tracking:var(--tracking-tight);letter-spacing:var(--tracking-tight)}.tracking-wide{--tw-tracking:var(--tracking-wide);letter-spacing:var(--tracking-wide)}.tracking-wider{--tw-tracking:var(--tracking-wider);letter-spacing:var(--tracking-wider)}.tracking-widest{--tw-tracking:var(--tracking-widest);letter-spacing:var(--tracking-widest)}.break-words{overflow-wrap:break-word}.whitespace-nowrap{white-space:nowrap}.text-amber-300{color:var(--color-amber-300)}.text-amber-400{color:var(--color-amber-400)}.text-amber-400\/80{color:#fcbb00cc}@supports (color:color-mix(in lab, red, red)){.text-amber-400\/80{color:color-mix(in oklab, var(--color-amber-400) 80%, transparent)}}.text-amber-400\/90{color:#fcbb00e6}@supports (color:color-mix(in lab, red, red)){.text-amber-400\/90{color:color-mix(in oklab, var(--color-amber-400) 90%, transparent)}}.text-black{color:var(--color-black)}.text-emerald-300{color:var(--color-emerald-300)}.text-emerald-400{color:var(--color-emerald-400)}.text-emerald-500\/80{color:#00bb7fcc}@supports (color:color-mix(in lab, red, red)){.text-emerald-500\/80{color:color-mix(in oklab, var(--color-emerald-500) 80%, transparent)}}.text-red-400{color:var(--color-red-400)}.text-rose-300{color:var(--color-rose-300)}.text-rose-400{color:var(--color-rose-400)}.text-sky-200{color:var(--color-sky-200)}.text-sky-300{color:var(--color-sky-300)}.text-sky-400{color:var(--color-sky-400)}.text-sky-600{color:var(--color-sky-600)}.text-sky-950{color:var(--color-sky-950)}.text-transparent{color:#0000}.text-white{color:var(--color-white)}.text-zinc-100{color:var(--color-zinc-100)}.text-zinc-200{color:var(--color-zinc-200)}.text-zinc-300{color:var(--color-zinc-300)}.text-zinc-400{color:var(--color-zinc-400)}.text-zinc-500{color:var(--color-zinc-500)}.text-zinc-600{color:var(--color-zinc-600)}.text-zinc-700{color:var(--color-zinc-700)}.uppercase{text-transform:uppercase}.tabular-nums{--tw-numeric-spacing:tabular-nums;font-variant-numeric:var(--tw-ordinal,) var(--tw-slashed-zero,) var(--tw-numeric-figure,) var(--tw-numeric-spacing,) var(--tw-numeric-fraction,)}.placeholder-zinc-600::placeholder{color:var(--color-zinc-600)}.accent-sky-500{accent-color:var(--color-sky-500)}.opacity-0{opacity:0}.opacity-50{opacity:.5}.opacity-60{opacity:.6}.shadow{--tw-shadow:0 1px 3px 0 var(--tw-shadow-color,#0000001a), 0 1px 2px -1px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-2xl{--tw-shadow:0 25px 50px -12px var(--tw-shadow-color,#00000040);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-\[0_0_10px_-2px_rgba\(56\,189\,248\,0\.6\)\]{--tw-shadow:0 0 10px -2px var(--tw-shadow-color,#38bdf899);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-lg{--tw-shadow:0 10px 15px -3px var(--tw-shadow-color,#0000001a), 0 4px 6px -4px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-md{--tw-shadow:0 4px 6px -1px var(--tw-shadow-color,#0000001a), 0 2px 4px -2px var(--tw-shadow-color,#0000001a);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring,.ring-1{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.ring-2{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.shadow-emerald-500\/40{--tw-shadow-color:#00bb7f66}@supports (color:color-mix(in lab, red, red)){.shadow-emerald-500\/40{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-emerald-500) 40%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-sky-500\/10{--tw-shadow-color:#00a5ef1a}@supports (color:color-mix(in lab, red, red)){.shadow-sky-500\/10{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-sky-500) 10%, transparent) var(--tw-shadow-alpha), transparent)}}.shadow-sky-600\/40{--tw-shadow-color:#0084cc66}@supports (color:color-mix(in lab, red, red)){.shadow-sky-600\/40{--tw-shadow-color:color-mix(in oklab, color-mix(in oklab, var(--color-sky-600) 40%, transparent) var(--tw-shadow-alpha), transparent)}}.ring-amber-800{--tw-ring-color:var(--color-amber-800)}.ring-amber-900{--tw-ring-color:var(--color-amber-900)}.ring-black\/40{--tw-ring-color:#0006}@supports (color:color-mix(in lab, red, red)){.ring-black\/40{--tw-ring-color:color-mix(in oklab, var(--color-black) 40%, transparent)}}.ring-emerald-800{--tw-ring-color:var(--color-emerald-800)}.ring-sky-400\/40{--tw-ring-color:#00bcfe66}@supports (color:color-mix(in lab, red, red)){.ring-sky-400\/40{--tw-ring-color:color-mix(in oklab, var(--color-sky-400) 40%, transparent)}}.ring-sky-400\/60{--tw-ring-color:#00bcfe99}@supports (color:color-mix(in lab, red, red)){.ring-sky-400\/60{--tw-ring-color:color-mix(in oklab, var(--color-sky-400) 60%, transparent)}}.ring-sky-700{--tw-ring-color:var(--color-sky-700)}.ring-sky-800{--tw-ring-color:var(--color-sky-800)}.ring-white{--tw-ring-color:var(--color-white)}.ring-zinc-700{--tw-ring-color:var(--color-zinc-700)}.ring-zinc-800{--tw-ring-color:var(--color-zinc-800)}.outline{outline-style:var(--tw-outline-style);outline-width:1px}.blur{--tw-blur:blur(8px);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.drop-shadow-\[0_0_4px_rgba\(56\,189\,248\,0\.5\)\]{--tw-drop-shadow-size:drop-shadow(0 0 4px var(--tw-drop-shadow-color,#38bdf880));--tw-drop-shadow:var(--tw-drop-shadow-size);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.filter{filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}.backdrop-blur{--tw-backdrop-blur:blur(8px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-\[2px\]{--tw-backdrop-blur:blur(2px);-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-md{--tw-backdrop-blur:blur(var(--blur-md));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.backdrop-blur-sm{--tw-backdrop-blur:blur(var(--blur-sm));-webkit-backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);backdrop-filter:var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,-webkit-backdrop-filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-all{transition-property:all;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-colors{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.transition-transform{transition-property:transform,translate,scale,rotate;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}.duration-150{--tw-duration:.15s;transition-duration:.15s}.duration-300{--tw-duration:.3s;transition-duration:.3s}.outline-none{--tw-outline-style:none;outline-style:none}.select-none{-webkit-user-select:none;user-select:none}@media (hover:hover){.group-hover\:block:is(:where(.group):hover *){display:block}.group-hover\:scale-110:is(:where(.group):hover *){--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.group-hover\:opacity-100:is(:where(.group):hover *){opacity:1}}.placeholder\:text-zinc-600::placeholder{color:var(--color-zinc-600)}@media (hover:hover){.hover\:scale-110:hover{--tw-scale-x:110%;--tw-scale-y:110%;--tw-scale-z:110%;scale:var(--tw-scale-x) var(--tw-scale-y)}.hover\:border-emerald-500:hover{border-color:var(--color-emerald-500)}.hover\:border-emerald-500\/60:hover{border-color:#00bb7f99}@supports (color:color-mix(in lab, red, red)){.hover\:border-emerald-500\/60:hover{border-color:color-mix(in oklab, var(--color-emerald-500) 60%, transparent)}}.hover\:border-sky-700:hover{border-color:var(--color-sky-700)}.hover\:border-zinc-600:hover{border-color:var(--color-zinc-600)}.hover\:border-zinc-800:hover{border-color:var(--color-zinc-800)}.hover\:bg-amber-500\/30:hover{background-color:#f99c004d}@supports (color:color-mix(in lab, red, red)){.hover\:bg-amber-500\/30:hover{background-color:color-mix(in oklab, var(--color-amber-500) 30%, transparent)}}.hover\:bg-emerald-400:hover{background-color:var(--color-emerald-400)}.hover\:bg-emerald-500\/10:hover{background-color:#00bb7f1a}@supports (color:color-mix(in lab, red, red)){.hover\:bg-emerald-500\/10:hover{background-color:color-mix(in oklab, var(--color-emerald-500) 10%, transparent)}}.hover\:bg-emerald-900:hover{background-color:var(--color-emerald-900)}.hover\:bg-rose-900:hover{background-color:var(--color-rose-900)}.hover\:bg-sky-500:hover{background-color:var(--color-sky-500)}.hover\:bg-sky-500\/25:hover{background-color:#00a5ef40}@supports (color:color-mix(in lab, red, red)){.hover\:bg-sky-500\/25:hover{background-color:color-mix(in oklab, var(--color-sky-500) 25%, transparent)}}.hover\:bg-zinc-700:hover{background-color:var(--color-zinc-700)}.hover\:bg-zinc-800:hover{background-color:var(--color-zinc-800)}.hover\:bg-zinc-800\/50:hover{background-color:#27272a80}@supports (color:color-mix(in lab, red, red)){.hover\:bg-zinc-800\/50:hover{background-color:color-mix(in oklab, var(--color-zinc-800) 50%, transparent)}}.hover\:bg-zinc-800\/80:hover{background-color:#27272acc}@supports (color:color-mix(in lab, red, red)){.hover\:bg-zinc-800\/80:hover{background-color:color-mix(in oklab, var(--color-zinc-800) 80%, transparent)}}.hover\:from-sky-400:hover{--tw-gradient-from:var(--color-sky-400);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.hover\:from-sky-500\/30:hover{--tw-gradient-from:#00a5ef4d}@supports (color:color-mix(in lab, red, red)){.hover\:from-sky-500\/30:hover{--tw-gradient-from:color-mix(in oklab, var(--color-sky-500) 30%, transparent)}}.hover\:from-sky-500\/30:hover{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.hover\:to-blue-500:hover{--tw-gradient-to:var(--color-blue-500);--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.hover\:to-blue-500\/30:hover{--tw-gradient-to:#3080ff4d}@supports (color:color-mix(in lab, red, red)){.hover\:to-blue-500\/30:hover{--tw-gradient-to:color-mix(in oklab, var(--color-blue-500) 30%, transparent)}}.hover\:to-blue-500\/30:hover{--tw-gradient-stops:var(--tw-gradient-via-stops,var(--tw-gradient-position), var(--tw-gradient-from) var(--tw-gradient-from-position), var(--tw-gradient-to) var(--tw-gradient-to-position))}.hover\:text-emerald-100:hover{color:var(--color-emerald-100)}.hover\:text-red-300:hover{color:var(--color-red-300)}.hover\:text-red-400:hover{color:var(--color-red-400)}.hover\:text-sky-300:hover{color:var(--color-sky-300)}.hover\:text-zinc-100:hover{color:var(--color-zinc-100)}.hover\:text-zinc-200:hover{color:var(--color-zinc-200)}.hover\:text-zinc-300:hover{color:var(--color-zinc-300)}.hover\:brightness-125:hover{--tw-brightness:brightness(125%);filter:var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,)}}.focus\:border-sky-500:focus{border-color:var(--color-sky-500)}.focus\:border-sky-600:focus{border-color:var(--color-sky-600)}.focus\:border-sky-700:focus{border-color:var(--color-sky-700)}.focus\:border-zinc-600:focus{border-color:var(--color-zinc-600)}.focus\:bg-zinc-900:focus{background-color:var(--color-zinc-900)}.focus\:bg-zinc-950:focus{background-color:var(--color-zinc-950)}.focus\:ring-1:focus{--tw-ring-shadow:var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color,currentcolor);box-shadow:var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow)}.focus\:ring-zinc-700:focus{--tw-ring-color:var(--color-zinc-700)}.active\:scale-95:active{--tw-scale-x:95%;--tw-scale-y:95%;--tw-scale-z:95%;scale:var(--tw-scale-x) var(--tw-scale-y)}.disabled\:cursor-default:disabled{cursor:default}.disabled\:opacity-30:disabled{opacity:.3}.disabled\:opacity-50:disabled{opacity:.5}@media (width>=40rem){.sm\:block{display:block}.sm\:inline{display:inline}.sm\:grid-cols-2{grid-template-columns:repeat(2,minmax(0,1fr))}.sm\:flex-row{flex-direction:row}.sm\:items-center{align-items:center}.sm\:text-4xl{font-size:var(--text-4xl);line-height:var(--tw-leading,var(--text-4xl--line-height))}.sm\:text-base{font-size:var(--text-base);line-height:var(--tw-leading,var(--text-base--line-height))}}@media (width>=64rem){.lg\:col-span-5{grid-column:span 5/span 5}.lg\:col-span-7{grid-column:span 7/span 7}.lg\:grid-cols-12{grid-template-columns:repeat(12,minmax(0,1fr))}.lg\:gap-12{gap:calc(var(--spacing) * 12)}.lg\:text-5xl{font-size:var(--text-5xl);line-height:var(--tw-leading,var(--text-5xl--line-height))}}}html,body,#root{background:#0a0e13;height:100%;margin:0;font-family:ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,sans-serif;overflow:hidden}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:#27272a;border-radius:4px}::-webkit-scrollbar-thumb:hover{background:#3f3f46}::-webkit-scrollbar-track{background:0 0}@keyframes toast-in{0%{opacity:0;transform:translate(100%)}to{opacity:1;transform:translate(0)}}@keyframes toast-out{0%{opacity:1;transform:translate(0)}to{opacity:0;transform:translate(100%)}}@property --tw-translate-x{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-y{syntax:"*";inherits:false;initial-value:0}@property --tw-translate-z{syntax:"*";inherits:false;initial-value:0}@property --tw-scale-x{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-y{syntax:"*";inherits:false;initial-value:1}@property --tw-scale-z{syntax:"*";inherits:false;initial-value:1}@property --tw-rotate-x{syntax:"*";inherits:false}@property --tw-rotate-y{syntax:"*";inherits:false}@property --tw-rotate-z{syntax:"*";inherits:false}@property --tw-skew-x{syntax:"*";inherits:false}@property --tw-skew-y{syntax:"*";inherits:false}@property --tw-space-y-reverse{syntax:"*";inherits:false;initial-value:0}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-gradient-position{syntax:"*";inherits:false}@property --tw-gradient-from{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-via{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-to{syntax:"";inherits:false;initial-value:#0000}@property --tw-gradient-stops{syntax:"*";inherits:false}@property --tw-gradient-via-stops{syntax:"*";inherits:false}@property --tw-gradient-from-position{syntax:"";inherits:false;initial-value:0%}@property --tw-gradient-via-position{syntax:"";inherits:false;initial-value:50%}@property --tw-gradient-to-position{syntax:"";inherits:false;initial-value:100%}@property --tw-leading{syntax:"*";inherits:false}@property --tw-font-weight{syntax:"*";inherits:false}@property --tw-tracking{syntax:"*";inherits:false}@property --tw-ordinal{syntax:"*";inherits:false}@property --tw-slashed-zero{syntax:"*";inherits:false}@property --tw-numeric-figure{syntax:"*";inherits:false}@property --tw-numeric-spacing{syntax:"*";inherits:false}@property --tw-numeric-fraction{syntax:"*";inherits:false}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-shadow-color{syntax:"*";inherits:false}@property --tw-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-shadow-color{syntax:"*";inherits:false}@property --tw-inset-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-ring-color{syntax:"*";inherits:false}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-inset-ring-color{syntax:"*";inherits:false}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-ring-inset{syntax:"*";inherits:false}@property --tw-ring-offset-width{syntax:"";inherits:false;initial-value:0}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000}@property --tw-outline-style{syntax:"*";inherits:false;initial-value:solid}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}@property --tw-backdrop-blur{syntax:"*";inherits:false}@property --tw-backdrop-brightness{syntax:"*";inherits:false}@property --tw-backdrop-contrast{syntax:"*";inherits:false}@property --tw-backdrop-grayscale{syntax:"*";inherits:false}@property --tw-backdrop-hue-rotate{syntax:"*";inherits:false}@property --tw-backdrop-invert{syntax:"*";inherits:false}@property --tw-backdrop-opacity{syntax:"*";inherits:false}@property --tw-backdrop-saturate{syntax:"*";inherits:false}@property --tw-backdrop-sepia{syntax:"*";inherits:false}@property --tw-duration{syntax:"*";inherits:false}@keyframes spin{to{transform:rotate(360deg)}}@keyframes ping{75%,to{opacity:0;transform:scale(2)}}@keyframes pulse{50%{opacity:.5}} diff --git a/dist/assets/index-MP_hm0Gm.js b/dist/assets/index-MP_hm0Gm.js deleted file mode 100644 index 675e4a90..00000000 --- a/dist/assets/index-MP_hm0Gm.js +++ /dev/null @@ -1,4724 +0,0 @@ -var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,t)=>()=>(t||(e((t={exports:{}}).exports,t),e=null),t.exports),s=(e,n)=>{let r={};for(var i in e)t(r,i,{get:e[i],enumerable:!0});return n||t(r,Symbol.toStringTag,{value:`Module`}),r},c=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;li[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},l=(n,r,a)=>(a=n==null?{}:e(i(n)),c(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));(function(){let e=document.createElement(`link`).relList;if(e&&e.supports&&e.supports(`modulepreload`))return;for(let e of document.querySelectorAll(`link[rel="modulepreload"]`))n(e);new MutationObserver(e=>{for(let t of e)if(t.type===`childList`)for(let e of t.addedNodes)e.tagName===`LINK`&&e.rel===`modulepreload`&&n(e)}).observe(document,{childList:!0,subtree:!0});function t(e){let t={};return e.integrity&&(t.integrity=e.integrity),e.referrerPolicy&&(t.referrerPolicy=e.referrerPolicy),e.crossOrigin===`use-credentials`?t.credentials=`include`:e.crossOrigin===`anonymous`?t.credentials=`omit`:t.credentials=`same-origin`,t}function n(e){if(e.ep)return;e.ep=!0;let n=t(e);fetch(e.href,n)}})();var u=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.portal`),r=Symbol.for(`react.fragment`),i=Symbol.for(`react.strict_mode`),a=Symbol.for(`react.profiler`),o=Symbol.for(`react.consumer`),s=Symbol.for(`react.context`),c=Symbol.for(`react.forward_ref`),l=Symbol.for(`react.suspense`),u=Symbol.for(`react.memo`),d=Symbol.for(`react.lazy`),f=Symbol.for(`react.activity`),p=Symbol.iterator;function m(e){return typeof e!=`object`||!e?null:(e=p&&e[p]||e[`@@iterator`],typeof e==`function`?e:null)}var h={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},g=Object.assign,_={};function v(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}v.prototype.isReactComponent={},v.prototype.setState=function(e,t){if(typeof e!=`object`&&typeof e!=`function`&&e!=null)throw Error(`takes an object of state variables to update or a function which returns an object of state variables.`);this.updater.enqueueSetState(this,e,t,`setState`)},v.prototype.forceUpdate=function(e){this.updater.enqueueForceUpdate(this,e,`forceUpdate`)};function y(){}y.prototype=v.prototype;function b(e,t,n){this.props=e,this.context=t,this.refs=_,this.updater=n||h}var x=b.prototype=new y;x.constructor=b,g(x,v.prototype),x.isPureReactComponent=!0;var S=Array.isArray;function C(){}var w={H:null,A:null,T:null,S:null},T=Object.prototype.hasOwnProperty;function E(e,n,r){var i=r.ref;return{$$typeof:t,type:e,key:n,ref:i===void 0?null:i,props:r}}function D(e,t){return E(e.type,t,e.props)}function O(e){return typeof e==`object`&&!!e&&e.$$typeof===t}function k(e){var t={"=":`=0`,":":`=2`};return`$`+e.replace(/[=:]/g,function(e){return t[e]})}var A=/\/+/g;function j(e,t){return typeof e==`object`&&e&&e.key!=null?k(``+e.key):t.toString(36)}function M(e){switch(e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason;default:switch(typeof e.status==`string`?e.then(C,C):(e.status=`pending`,e.then(function(t){e.status===`pending`&&(e.status=`fulfilled`,e.value=t)},function(t){e.status===`pending`&&(e.status=`rejected`,e.reason=t)})),e.status){case`fulfilled`:return e.value;case`rejected`:throw e.reason}}throw e}function N(e,r,i,a,o){var s=typeof e;(s===`undefined`||s===`boolean`)&&(e=null);var c=!1;if(e===null)c=!0;else switch(s){case`bigint`:case`string`:case`number`:c=!0;break;case`object`:switch(e.$$typeof){case t:case n:c=!0;break;case d:return c=e._init,N(c(e._payload),r,i,a,o)}}if(c)return o=o(e),c=a===``?`.`+j(e,0):a,S(o)?(i=``,c!=null&&(i=c.replace(A,`$&/`)+`/`),N(o,r,i,``,function(e){return e})):o!=null&&(O(o)&&(o=D(o,i+(o.key==null||e&&e.key===o.key?``:(``+o.key).replace(A,`$&/`)+`/`)+c)),r.push(o)),1;c=0;var l=a===``?`.`:a+`:`;if(S(e))for(var u=0;u{t.exports=u()})),f=o((e=>{function t(e,t){var n=e.length;e.push(t);a:for(;0>>1,a=e[r];if(0>>1;ri(c,n))li(u,c)?(e[r]=u,e[l]=n,r=l):(e[r]=c,e[s]=n,r=s);else if(li(u,n))e[r]=u,e[l]=n,r=l;else break a}}return t}function i(e,t){var n=e.sortIndex-t.sortIndex;return n===0?e.id-t.id:n}if(e.unstable_now=void 0,typeof performance==`object`&&typeof performance.now==`function`){var a=performance;e.unstable_now=function(){return a.now()}}else{var o=Date,s=o.now();e.unstable_now=function(){return o.now()-s}}var c=[],l=[],u=1,d=null,f=3,p=!1,m=!1,h=!1,g=!1,_=typeof setTimeout==`function`?setTimeout:null,v=typeof clearTimeout==`function`?clearTimeout:null,y=typeof setImmediate<`u`?setImmediate:null;function b(e){for(var i=n(l);i!==null;){if(i.callback===null)r(l);else if(i.startTime<=e)r(l),i.sortIndex=i.expirationTime,t(c,i);else break;i=n(l)}}function x(e){if(h=!1,b(e),!m)if(n(c)!==null)m=!0,S||(S=!0,O());else{var t=n(l);t!==null&&j(x,t.startTime-e)}}var S=!1,C=-1,w=5,T=-1;function E(){return g?!0:!(e.unstable_now()-Tt&&E());){var o=d.callback;if(typeof o==`function`){d.callback=null,f=d.priorityLevel;var s=o(d.expirationTime<=t);if(t=e.unstable_now(),typeof s==`function`){d.callback=s,b(t),i=!0;break b}d===n(c)&&r(c),b(t)}else r(c);d=n(c)}if(d!==null)i=!0;else{var u=n(l);u!==null&&j(x,u.startTime-t),i=!1}}break a}finally{d=null,f=a,p=!1}i=void 0}}finally{i?O():S=!1}}}var O;if(typeof y==`function`)O=function(){y(D)};else if(typeof MessageChannel<`u`){var k=new MessageChannel,A=k.port2;k.port1.onmessage=D,O=function(){A.postMessage(null)}}else O=function(){_(D,0)};function j(t,n){C=_(function(){t(e.unstable_now())},n)}e.unstable_IdlePriority=5,e.unstable_ImmediatePriority=1,e.unstable_LowPriority=4,e.unstable_NormalPriority=3,e.unstable_Profiling=null,e.unstable_UserBlockingPriority=2,e.unstable_cancelCallback=function(e){e.callback=null},e.unstable_forceFrameRate=function(e){0>e||125o?(r.sortIndex=a,t(l,r),n(c)===null&&r===n(l)&&(h?(v(C),C=-1):h=!0,j(x,a-o))):(r.sortIndex=s,t(c,r),m||p||(m=!0,S||(S=!0,O()))),r},e.unstable_shouldYield=E,e.unstable_wrapCallback=function(e){var t=f;return function(){var n=f;f=t;try{return e.apply(this,arguments)}finally{f=n}}}})),p=o(((e,t)=>{t.exports=f()})),m=o((e=>{var t=d();function n(e){var t=`https://react.dev/errors/`+e;if(1{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=m()})),g=o((e=>{var t=p(),n=d(),r=h();function i(e){var t=`https://react.dev/errors/`+e;if(1te||(e.current=R[te],R[te]=null,te--)}function V(e,t){te++,R[te]=e.current,e.current=t}var ne=z(null),re=z(null),ie=z(null),ae=z(null);function oe(e,t){switch(V(ie,t),V(re,e),V(ne,null),t.nodeType){case 9:case 11:e=(e=t.documentElement)&&(e=e.namespaceURI)?Gd(e):0;break;default:if(e=t.tagName,t=t.namespaceURI)t=Gd(t),e=Kd(t,e);else switch(e){case`svg`:e=1;break;case`math`:e=2;break;default:e=0}}B(ne),V(ne,e)}function se(){B(ne),B(re),B(ie)}function ce(e){e.memoizedState!==null&&V(ae,e);var t=ne.current,n=Kd(t,e.type);t!==n&&(V(re,e),V(ne,n))}function H(e){re.current===e&&(B(ne),B(re)),ae.current===e&&(B(ae),tp._currentValue=ee)}var le,ue;function de(e){if(le===void 0)try{throw Error()}catch(e){var t=e.stack.trim().match(/\n( *(at )?)/);le=t&&t[1]||``,ue=-1)`:-1i||c[r]!==l[i]){var u=` -`+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{fe=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?de(n):``}function me(e,t){switch(e.tag){case 26:case 27:case 5:return de(e.type);case 16:return de(`Lazy`);case 13:return e.child!==t&&t!==null?de(`Suspense Fallback`):de(`Suspense`);case 19:return de(`SuspenseList`);case 0:case 15:return pe(e.type,!1);case 11:return pe(e.type.render,!1);case 1:return pe(e.type,!0);case 31:return de(`Activity`);default:return``}}function he(e){try{var t=``,n=null;do t+=me(e,n),n=e,e=e.return;while(e);return t}catch(e){return` -Error generating stack: `+e.message+` -`+e.stack}}var ge=Object.prototype.hasOwnProperty,_e=t.unstable_scheduleCallback,ve=t.unstable_cancelCallback,ye=t.unstable_shouldYield,be=t.unstable_requestPaint,xe=t.unstable_now,Se=t.unstable_getCurrentPriorityLevel,U=t.unstable_ImmediatePriority,Ce=t.unstable_UserBlockingPriority,we=t.unstable_NormalPriority,Te=t.unstable_LowPriority,W=t.unstable_IdlePriority,Ee=t.log,De=t.unstable_setDisableYieldValue,Oe=null,ke=null;function Ae(e){if(typeof Ee==`function`&&De(e),ke&&typeof ke.setStrictMode==`function`)try{ke.setStrictMode(Oe,e)}catch{}}var je=Math.clz32?Math.clz32:Pe,Me=Math.log,Ne=Math.LN2;function Pe(e){return e>>>=0,e===0?32:31-(Me(e)/Ne|0)|0}var Fe=256,Ie=262144,Le=4194304;function Re(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function ze(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=Re(n))):i=Re(o):i=Re(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=Re(n))):i=Re(o)):i=Re(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function Be(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function Ve(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function He(){var e=Le;return Le<<=1,!(Le&62914560)&&(Le=4194304),e}function Ue(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function We(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function Ge(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0`u`||window.document===void 0||window.document.createElement===void 0),nn=!1;if(tn)try{var rn={};Object.defineProperty(rn,"passive",{get:function(){nn=!0}}),window.addEventListener(`test`,rn,rn),window.removeEventListener(`test`,rn,rn)}catch{nn=!1}var an=null,on=null,sn=null;function cn(){if(sn)return sn;var e,t=on,n=t.length,r,i=`value`in an?an.value:an.textContent,a=i.length;for(e=0;e=Rn),Vn=` `,Hn=!1;function Un(e,t){switch(e){case`keyup`:return In.indexOf(t.keyCode)!==-1;case`keydown`:return t.keyCode!==229;case`keypress`:case`mousedown`:case`focusout`:return!0;default:return!1}}function Wn(e){return e=e.detail,typeof e==`object`&&`data`in e?e.data:null}var Gn=!1;function Kn(e,t){switch(e){case`compositionend`:return Wn(t);case`keypress`:return t.which===32?(Hn=!0,Vn):null;case`textInput`:return e=t.data,e===Vn&&Hn?null:e;default:return null}}function qn(e,t){if(Gn)return e===`compositionend`||!Ln&&Un(e,t)?(e=cn(),sn=on=an=null,Gn=!1,e):null;switch(e){case`paste`:return null;case`keypress`:if(!(t.ctrlKey||t.altKey||t.metaKey)||t.ctrlKey&&t.altKey){if(t.char&&1=t)return{node:n,offset:t-e};e=r}a:{for(;n;){if(n.nextSibling){n=n.nextSibling;break a}n=n.parentNode}n=void 0}n=mr(n)}}function gr(e,t){return e&&t?e===t?!0:e&&e.nodeType===3?!1:t&&t.nodeType===3?gr(e,t.parentNode):`contains`in e?e.contains(t):e.compareDocumentPosition?!!(e.compareDocumentPosition(t)&16):!1:!1}function _r(e){e=e!=null&&e.ownerDocument!=null&&e.ownerDocument.defaultView!=null?e.ownerDocument.defaultView:window;for(var t=At(e.document);t instanceof e.HTMLIFrameElement;){try{var n=typeof t.contentWindow.location.href==`string`}catch{n=!1}if(n)e=t.contentWindow;else break;t=At(e.document)}return t}function vr(e){var t=e&&e.nodeName&&e.nodeName.toLowerCase();return t&&(t===`input`&&(e.type===`text`||e.type===`search`||e.type===`tel`||e.type===`url`||e.type===`password`)||t===`textarea`||e.contentEditable===`true`)}var yr=tn&&`documentMode`in document&&11>=document.documentMode,br=null,xr=null,Sr=null,Cr=!1;function wr(e,t,n){var r=n.window===n?n.document:n.nodeType===9?n:n.ownerDocument;Cr||br==null||br!==At(r)||(r=br,`selectionStart`in r&&vr(r)?r={start:r.selectionStart,end:r.selectionEnd}:(r=(r.ownerDocument&&r.ownerDocument.defaultView||window).getSelection(),r={anchorNode:r.anchorNode,anchorOffset:r.anchorOffset,focusNode:r.focusNode,focusOffset:r.focusOffset}),Sr&&pr(Sr,r)||(Sr=r,r=kd(xr,`onSelect`),0>=o,i-=o,hi=1<<32-je(t)+i|n<h?(g=d,d=null):g=d.sibling;var _=p(i,d,s[h],c);if(_===null){d===null&&(d=g);break}e&&d&&_.alternate===null&&t(i,d),a=o(_,a,h),u===null?l=_:u.sibling=_,u=_,d=g}if(h===s.length)return n(i,d),wi&&_i(i,h),l;if(d===null){for(;hg?(_=h,h=null):_=h.sibling;var y=p(a,h,v.value,l);if(y===null){h===null&&(h=_);break}e&&h&&y.alternate===null&&t(a,h),s=o(y,s,g),d===null?u=y:d.sibling=y,d=y,h=_}if(v.done)return n(a,h),wi&&_i(a,g),u;if(h===null){for(;!v.done;g++,v=c.next())v=f(a,v.value,l),v!==null&&(s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return wi&&_i(a,g),u}for(h=r(h);!v.done;g++,v=c.next())v=m(h,a,g,v.value,l),v!==null&&(e&&v.alternate!==null&&h.delete(v.key===null?g:v.key),s=o(v,s,g),d===null?u=v:d.sibling=v,d=v);return e&&h.forEach(function(e){return t(a,e)}),wi&&_i(a,g),u}function b(e,r,o,c){if(typeof o==`object`&&o&&o.type===y&&o.key===null&&(o=o.props.children),typeof o==`object`&&o){switch(o.$$typeof){case _:a:{for(var l=o.key;r!==null;){if(r.key===l){if(l=o.type,l===y){if(r.tag===7){n(e,r.sibling),c=a(r,o.props.children),c.return=e,e=c;break a}}else if(r.elementType===l||typeof l==`object`&&l&&l.$$typeof===O&&va(l)===r.type){n(e,r.sibling),c=a(r,o.props),Ta(c,o),c.return=e,e=c;break a}n(e,r);break}else t(e,r);r=r.sibling}o.type===y?(c=ni(o.props.children,e.mode,c,o.key),c.return=e,e=c):(c=ti(o.type,o.key,o.props,null,e.mode,c),Ta(c,o),c.return=e,e=c)}return s(e);case v:a:{for(l=o.key;r!==null;){if(r.key===l)if(r.tag===4&&r.stateNode.containerInfo===o.containerInfo&&r.stateNode.implementation===o.implementation){n(e,r.sibling),c=a(r,o.children||[]),c.return=e,e=c;break a}else{n(e,r);break}else t(e,r);r=r.sibling}c=ai(o,e.mode,c),c.return=e,e=c}return s(e);case O:return o=va(o),b(e,r,o,c)}if(F(o))return h(e,r,o,c);if(M(o)){if(l=M(o),typeof l!=`function`)throw Error(i(150));return o=l.call(o),g(e,r,o,c)}if(typeof o.then==`function`)return b(e,r,wa(o),c);if(o.$$typeof===C)return b(e,r,Ki(e,o),c);Ea(e,o)}return typeof o==`string`&&o!==``||typeof o==`number`||typeof o==`bigint`?(o=``+o,r!==null&&r.tag===6?(n(e,r.sibling),c=a(r,o),c.return=e,e=c):(n(e,r),c=ri(o,e.mode,c),c.return=e,e=c),s(e)):n(e,r)}return function(e,t,n,r){try{Ca=0;var i=b(e,t,n,r);return Sa=null,i}catch(t){if(t===fa||t===ma)throw t;var a=Zr(29,t,null,e.mode);return a.lanes=r,a.return=e,a}}}var Oa=Da(!0),ka=Da(!1),Aa=!1;function ja(e){e.updateQueue={baseState:e.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,lanes:0,hiddenCallbacks:null},callbacks:null}}function Ma(e,t){e=e.updateQueue,t.updateQueue===e&&(t.updateQueue={baseState:e.baseState,firstBaseUpdate:e.firstBaseUpdate,lastBaseUpdate:e.lastBaseUpdate,shared:e.shared,callbacks:null})}function Na(e){return{lane:e,tag:0,payload:null,callback:null,next:null}}function Pa(e,t,n){var r=e.updateQueue;if(r===null)return null;if(r=r.shared,Fl&2){var i=r.pending;return i===null?t.next=t:(t.next=i.next,i.next=t),r.pending=t,t=Jr(e),qr(e,null,n),t}return Wr(e,r,t,n),Jr(e)}function Fa(e,t,n){if(t=t.updateQueue,t!==null&&(t=t.shared,n&4194048)){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,qe(e,n)}}function Ia(e,t){var n=e.updateQueue,r=e.alternate;if(r!==null&&(r=r.updateQueue,n===r)){var i=null,a=null;if(n=n.firstBaseUpdate,n!==null){do{var o={lane:n.lane,tag:n.tag,payload:n.payload,callback:null,next:null};a===null?i=a=o:a=a.next=o,n=n.next}while(n!==null);a===null?i=a=t:a=a.next=t}else i=a=t;n={baseState:r.baseState,firstBaseUpdate:i,lastBaseUpdate:a,shared:r.shared,callbacks:r.callbacks},e.updateQueue=n;return}e=n.lastBaseUpdate,e===null?n.firstBaseUpdate=t:e.next=t,n.lastBaseUpdate=t}var La=!1;function Ra(){if(La){var e=ra;if(e!==null)throw e}}function za(e,t,n,r){La=!1;var i=e.updateQueue;Aa=!1;var a=i.firstBaseUpdate,o=i.lastBaseUpdate,s=i.shared.pending;if(s!==null){i.shared.pending=null;var c=s,l=c.next;c.next=null,o===null?a=l:o.next=l,o=c;var u=e.alternate;u!==null&&(u=u.updateQueue,s=u.lastBaseUpdate,s!==o&&(s===null?u.firstBaseUpdate=l:s.next=l,u.lastBaseUpdate=c))}if(a!==null){var d=i.baseState;o=0,u=l=c=null,s=a;do{var f=s.lane&-536870913,p=f!==s.lane;if(p?(Rl&f)===f:(r&f)===f){f!==0&&f===na&&(La=!0),u!==null&&(u=u.next={lane:0,tag:s.tag,payload:s.payload,callback:null,next:null});a:{var h=e,g=s;f=t;var _=n;switch(g.tag){case 1:if(h=g.payload,typeof h==`function`){d=h.call(_,d,f);break a}d=h;break a;case 3:h.flags=h.flags&-65537|128;case 0:if(h=g.payload,f=typeof h==`function`?h.call(_,d,f):h,f==null)break a;d=m({},d,f);break a;case 2:Aa=!0}}f=s.callback,f!==null&&(e.flags|=64,p&&(e.flags|=8192),p=i.callbacks,p===null?i.callbacks=[f]:p.push(f))}else p={lane:f,tag:s.tag,payload:s.payload,callback:s.callback,next:null},u===null?(l=u=p,c=d):u=u.next=p,o|=f;if(s=s.next,s===null){if(s=i.shared.pending,s===null)break;p=s,s=p.next,p.next=null,i.lastBaseUpdate=p,i.shared.pending=null}}while(1);u===null&&(c=d),i.baseState=c,i.firstBaseUpdate=l,i.lastBaseUpdate=u,a===null&&(i.shared.lanes=0),Kl|=o,e.lanes=o,e.memoizedState=d}}function Ba(e,t){if(typeof e!=`function`)throw Error(i(191,e));e.call(t)}function Va(e,t){var n=e.callbacks;if(n!==null)for(e.callbacks=null,e=0;ea?a:8;var o=I.T,s={};I.T=s,Os(e,!1,t,n);try{var c=i(),l=I.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?Ds(e,t,oa(c,r),mu(e)):Ds(e,t,r,mu(e))}catch(n){Ds(e,t,{then:function(){},status:`rejected`,reason:n},mu())}finally{L.p=a,o!==null&&s.types!==null&&(o.types=s.types),I.T=o}}function _s(){}function vs(e,t,n,r){if(e.tag!==5)throw Error(i(476));var a=ys(e).queue;gs(e,a,t,ee,n===null?_s:function(){return bs(e),n(r)})}function ys(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:ee,baseState:ee,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ko,lastRenderedState:ee},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:ko,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function bs(e){var t=ys(e);t.next===null&&(t=e.alternate.memoizedState),Ds(e,t.next.queue,{},mu())}function xs(){return Gi(tp)}function Ss(){return wo().memoizedState}function Cs(){return wo().memoizedState}function ws(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=mu();e=Na(n);var r=Pa(t,e,n);r!==null&&(gu(r,t,n),Fa(r,t,n)),t={cache:Qi()},e.payload=t;return}t=t.return}}function Ts(e,t,n){var r=mu();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},ks(e)?As(t,n):(n=Gr(e,t,n,r),n!==null&&(gu(n,e,r),js(n,t,r)))}function Es(e,t,n){Ds(e,t,n,mu())}function Ds(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(ks(e))As(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,fr(s,o))return Wr(e,t,i,0),Il===null&&Ur(),!1}catch{}if(n=Gr(e,t,i,r),n!==null)return gu(n,e,r),js(n,t,r),!0}return!1}function Os(e,t,n,r){if(r={lane:2,revertLane:pd(),gesture:null,action:r,hasEagerState:!1,eagerState:null,next:null},ks(e)){if(t)throw Error(i(479))}else t=Gr(e,n,r,2),t!==null&&gu(t,e,2)}function ks(e){var t=e.alternate;return e===ro||t!==null&&t===ro}function As(e,t){so=oo=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function js(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,qe(e,n)}}var Ms={readContext:Gi,use:Do,useCallback:mo,useContext:mo,useEffect:mo,useImperativeHandle:mo,useLayoutEffect:mo,useInsertionEffect:mo,useMemo:mo,useReducer:mo,useRef:mo,useState:mo,useDebugValue:mo,useDeferredValue:mo,useTransition:mo,useSyncExternalStore:mo,useId:mo,useHostTransitionStatus:mo,useFormState:mo,useActionState:mo,useOptimistic:mo,useMemoCache:mo,useCacheRefresh:mo};Ms.useEffectEvent=mo;var Ns={readContext:Gi,use:Do,useCallback:function(e,t){return Co().memoizedState=[e,t===void 0?null:t],e},useContext:Gi,useEffect:rs,useImperativeHandle:function(e,t,n){n=n==null?null:n.concat([e]),ts(4194308,4,ls.bind(null,t,e),n)},useLayoutEffect:function(e,t){return ts(4194308,4,e,t)},useInsertionEffect:function(e,t){ts(4,2,e,t)},useMemo:function(e,t){var n=Co();t=t===void 0?null:t;var r=e();if(co){Ae(!0);try{e()}finally{Ae(!1)}}return n.memoizedState=[r,t],r},useReducer:function(e,t,n){var r=Co();if(n!==void 0){var i=n(t);if(co){Ae(!0);try{n(t)}finally{Ae(!1)}}}else i=t;return r.memoizedState=r.baseState=i,e={pending:null,lanes:0,dispatch:null,lastRenderedReducer:e,lastRenderedState:i},r.queue=e,e=e.dispatch=Ts.bind(null,ro,e),[r.memoizedState,e]},useRef:function(e){var t=Co();return e={current:e},t.memoizedState=e},useState:function(e){e=zo(e);var t=e.queue,n=Es.bind(null,ro,t);return t.dispatch=n,[e.memoizedState,n]},useDebugValue:ds,useDeferredValue:function(e,t){return ms(Co(),e,t)},useTransition:function(){var e=zo(!1);return e=gs.bind(null,ro,e.queue,!0,!1),Co().memoizedState=e,[!1,e]},useSyncExternalStore:function(e,t,n){var r=ro,a=Co();if(wi){if(n===void 0)throw Error(i(407));n=n()}else{if(n=t(),Il===null)throw Error(i(349));Rl&127||Po(r,t,n)}a.memoizedState=n;var o={value:n,getSnapshot:t};return a.queue=o,rs(Io.bind(null,r,o,e),[e]),r.flags|=2048,$o(9,{destroy:void 0},Fo.bind(null,r,o,n,t),null),n},useId:function(){var e=Co(),t=Il.identifierPrefix;if(wi){var n=gi,r=hi;n=(r&~(1<<32-je(r)-1)).toString(32)+n,t=`_`+t+`R_`+n,n=lo++,0<\/script>`,o=o.removeChild(o.firstChild);break;case`select`:o=typeof r.is==`string`?s.createElement(`select`,{is:r.is}):s.createElement(`select`),r.multiple?o.multiple=!0:r.size&&(o.size=r.size);break;default:o=typeof r.is==`string`?s.createElement(a,{is:r.is}):s.createElement(a)}}o[et]=t,o[tt]=r;a:for(s=t.child;s!==null;){if(s.tag===5||s.tag===6)o.appendChild(s.stateNode);else if(s.tag!==4&&s.tag!==27&&s.child!==null){s.child.return=s,s=s.child;continue}if(s===t)break a;for(;s.sibling===null;){if(s.return===null||s.return===t)break a;s=s.return}s.sibling.return=s.return,s=s.sibling}t.stateNode=o;a:switch(Rd(o,a,r),a){case`button`:case`input`:case`select`:case`textarea`:r=!!r.autoFocus;break a;case`img`:r=!0;break a;default:r=!1}r&&Dc(t)}}return Mc(t),Oc(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)e.memoizedProps!==r&&Dc(t);else{if(typeof r!=`string`&&t.stateNode===null)throw Error(i(166));if(e=ie.current,ji(t)){if(e=t.stateNode,n=t.memoizedProps,r=null,a=Si,a!==null)switch(a.tag){case 27:case 5:r=a.memoizedProps}e[et]=t,e=!!(e.nodeValue===n||r!==null&&!0===r.suppressHydrationWarning||Fd(e.nodeValue,n)),e||Oi(t,!0)}else e=Wd(e).createTextNode(r),e[et]=t,t.stateNode=e}return Mc(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(r=ji(t),n!==null){if(e===null){if(!r)throw Error(i(318));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(i(557));e[et]=t}else Mi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Mc(t),e=!1}else n=Ni(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?($a(t),t):($a(t),null);if(t.flags&128)throw Error(i(558))}return Mc(t),null;case 13:if(r=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=ji(t),r!==null&&r.dehydrated!==null){if(e===null){if(!a)throw Error(i(318));if(a=t.memoizedState,a=a===null?null:a.dehydrated,!a)throw Error(i(317));a[et]=t}else Mi(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Mc(t),a=!1}else a=Ni(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?($a(t),t):($a(t),null)}return $a(t),t.flags&128?(t.lanes=n,t):(n=r!==null,e=e!==null&&e.memoizedState!==null,n&&(r=t.child,a=null,r.alternate!==null&&r.alternate.memoizedState!==null&&r.alternate.memoizedState.cachePool!==null&&(a=r.alternate.memoizedState.cachePool.pool),o=null,r.memoizedState!==null&&r.memoizedState.cachePool!==null&&(o=r.memoizedState.cachePool.pool),o!==a&&(r.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),Ac(t,t.updateQueue),Mc(t),null);case 4:return se(),e===null&&Td(t.stateNode.containerInfo),Mc(t),null;case 10:return zi(t.type),Mc(t),null;case 19:if(B(eo),r=t.memoizedState,r===null)return Mc(t),null;if(a=(t.flags&128)!=0,o=r.rendering,o===null)if(a)jc(r,!1);else{if(Gl!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=to(e),o!==null){for(t.flags|=128,jc(r,!1),e=o.updateQueue,t.updateQueue=e,Ac(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)ei(n,e),n=n.sibling;return V(eo,eo.current&1|2),wi&&_i(t,r.treeForkCount),t.child}e=e.sibling}r.tail!==null&&xe()>nu&&(t.flags|=128,a=!0,jc(r,!1),t.lanes=4194304)}else{if(!a)if(e=to(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,Ac(t,e),jc(r,!0),r.tail===null&&r.tailMode===`hidden`&&!o.alternate&&!wi)return Mc(t),null}else 2*xe()-r.renderingStartTime>nu&&n!==536870912&&(t.flags|=128,a=!0,jc(r,!1),t.lanes=4194304);r.isBackwards?(o.sibling=t.child,t.child=o):(e=r.last,e===null?t.child=o:e.sibling=o,r.last=o)}return r.tail===null?(Mc(t),null):(e=r.tail,r.rendering=e,r.tail=e.sibling,r.renderingStartTime=xe(),e.sibling=null,n=eo.current,V(eo,a?n&1|2:n&1),wi&&_i(t,r.treeForkCount),e);case 22:case 23:return $a(t),Ka(),r=t.memoizedState!==null,e===null?r&&(t.flags|=8192):e.memoizedState!==null!==r&&(t.flags|=8192),r?n&536870912&&!(t.flags&128)&&(Mc(t),t.subtreeFlags&6&&(t.flags|=8192)):Mc(t),n=t.updateQueue,n!==null&&Ac(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),r=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(r=t.memoizedState.cachePool.pool),r!==n&&(t.flags|=2048),e!==null&&B(ca),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),zi(Zi),Mc(t),null;case 25:return null;case 30:return null}throw Error(i(156,t.tag))}function Pc(e,t){switch(bi(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return zi(Zi),se(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return H(t),null;case 31:if(t.memoizedState!==null){if($a(t),t.alternate===null)throw Error(i(340));Mi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if($a(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(i(340));Mi()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return B(eo),null;case 4:return se(),null;case 10:return zi(t.type),null;case 22:case 23:return $a(t),Ka(),e!==null&&B(ca),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return zi(Zi),null;case 25:return null;default:return null}}function Fc(e,t){switch(bi(t),t.tag){case 3:zi(Zi),se();break;case 26:case 27:case 5:H(t);break;case 4:se();break;case 31:t.memoizedState!==null&&$a(t);break;case 13:$a(t);break;case 19:B(eo);break;case 10:zi(t.type);break;case 22:case 23:$a(t),Ka(),e!==null&&B(ca);break;case 24:zi(Zi)}}function Ic(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){Ku(t,t.return,e)}}function Lc(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){Ku(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Ku(t,t.return,e)}}function Rc(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{Va(t,n)}catch(t){Ku(e,e.return,t)}}}function zc(e,t,n){n.props=Bs(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Ku(e,t,n)}}function Bc(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=e.stateNode;break;case 30:r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){Ku(e,t,n)}}function Vc(e,t){var n=e.ref,r=e.refCleanup;if(n!==null)if(typeof r==`function`)try{r()}catch(n){Ku(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){Ku(e,t,n)}else n.current=null}function Hc(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{a:switch(t){case`button`:case`input`:case`select`:case`textarea`:n.autoFocus&&r.focus();break a;case`img`:n.src?r.src=n.src:n.srcSet&&(r.srcset=n.srcSet)}}catch(t){Ku(e,e.return,t)}}function Uc(e,t,n){try{var r=e.stateNode;zd(r,e.type,n,t),r[tt]=t}catch(t){Ku(e,e.return,t)}}function Wc(e){return e.tag===5||e.tag===3||e.tag===26||e.tag===27&&tf(e.type)||e.tag===4}function Gc(e){a:for(;;){for(;e.sibling===null;){if(e.return===null||Wc(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(e.tag===27&&tf(e.type)||e.flags&2||e.child===null||e.tag===4)continue a;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Kc(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?(n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n).insertBefore(e,t):(t=n.nodeType===9?n.body:n.nodeName===`HTML`?n.ownerDocument.body:n,t.appendChild(e),n=n._reactRootContainer,n!=null||t.onclick!==null||(t.onclick=qt));else if(r!==4&&(r===27&&tf(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(Kc(e,t,n),e=e.sibling;e!==null;)Kc(e,t,n),e=e.sibling}function qc(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?n.insertBefore(e,t):n.appendChild(e);else if(r!==4&&(r===27&&tf(e.type)&&(n=e.stateNode),e=e.child,e!==null))for(qc(e,t,n),e=e.sibling;e!==null;)qc(e,t,n),e=e.sibling}function Jc(e){var t=e.stateNode,n=e.memoizedProps;try{for(var r=e.type,i=t.attributes;i.length;)t.removeAttributeNode(i[0]);Rd(t,r,n),t[et]=e,t[tt]=n}catch(t){Ku(e,e.return,t)}}var Yc=!1,Xc=!1,Zc=!1,Qc=typeof WeakSet==`function`?WeakSet:Set,$c=null;function el(e,t){if(e=e.containerInfo,Hd=up,e=_r(e),vr(e)){if(`selectionStart`in e)var n={start:e.selectionStart,end:e.selectionEnd};else a:{n=(n=e.ownerDocument)&&n.defaultView||window;var r=n.getSelection&&n.getSelection();if(r&&r.rangeCount!==0){n=r.anchorNode;var a=r.anchorOffset,o=r.focusNode;r=r.focusOffset;try{n.nodeType,o.nodeType}catch{n=null;break a}var s=0,c=-1,l=-1,u=0,d=0,f=e,p=null;b:for(;;){for(var m;f!==n||a!==0&&f.nodeType!==3||(c=s+a),f!==o||r!==0&&f.nodeType!==3||(l=s+r),f.nodeType===3&&(s+=f.nodeValue.length),(m=f.firstChild)!==null;)p=f,f=m;for(;;){if(f===e)break b;if(p===n&&++u===a&&(c=s),p===o&&++d===r&&(l=s),(m=f.nextSibling)!==null)break;f=p,p=f.parentNode}f=m}n=c===-1||l===-1?null:{start:c,end:l}}else n=null}n||={start:0,end:0}}else n=null;for(Ud={focusedElem:e,selectionRange:n},up=!1,$c=t;$c!==null;)if(t=$c,e=t.child,t.subtreeFlags&1028&&e!==null)e.return=t,$c=e;else for(;$c!==null;){switch(t=$c,o=t.alternate,e=t.flags,t.tag){case 0:if(e&4&&(e=t.updateQueue,e=e===null?null:e.events,e!==null))for(n=0;n title`))),Rd(o,r,n),o[et]=e,pt(o),r=o;break a;case`link`:var s=Gf(`link`,`href`,a).get(r+(n.href||``));if(s){for(var c=0;cg&&(o=g,g=h,h=o);var _=hr(s,h),v=hr(s,g);if(_&&v&&(p.rangeCount!==1||p.anchorNode!==_.node||p.anchorOffset!==_.offset||p.focusNode!==v.node||p.focusOffset!==v.offset)){var y=d.createRange();y.setStart(_.node,_.offset),p.removeAllRanges(),h>g?(p.addRange(y),p.extend(v.node,v.offset)):(y.setEnd(v.node,v.offset),p.addRange(y))}}}}for(d=[],p=s;p=p.parentNode;)p.nodeType===1&&d.push({element:p,left:p.scrollLeft,top:p.scrollTop});for(typeof s.focus==`function`&&s.focus(),s=0;sn?32:n,I.T=null,n=uu,uu=null;var o=ou,s=cu;if(au=0,su=ou=null,cu=0,Fl&6)throw Error(i(331));var c=Fl;if(Fl|=4,Al(o.current),Sl(o,o.current,s,n),Fl=c,od(0,!1),ke&&typeof ke.onPostCommitFiberRoot==`function`)try{ke.onPostCommitFiberRoot(Oe,o)}catch{}return!0}finally{L.p=a,I.T=r,Hu(e,t)}}function Gu(e,t,n){t=si(n,t),t=Ks(e.stateNode,t,2),e=Pa(e,t,2),e!==null&&(We(e,2),ad(e))}function Ku(e,t,n){if(e.tag===3)Gu(e,e,n);else for(;t!==null;){if(t.tag===3){Gu(t,e,n);break}else if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(iu===null||!iu.has(r))){e=si(n,e),n=qs(2),r=Pa(t,n,2),r!==null&&(Js(n,r,t,e),We(r,2),ad(r));break}}t=t.return}}function qu(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new Pl;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(Ul=!0,i.add(n),e=Ju.bind(null,e,t,n),t.then(e,e))}function Ju(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,Il===e&&(Rl&n)===n&&(Gl===4||Gl===3&&(Rl&62914560)===Rl&&300>xe()-eu?!(Fl&2)&&Cu(e,0):Jl|=n,Xl===Rl&&(Xl=0)),ad(e)}function Yu(e,t){t===0&&(t=He()),e=Kr(e,t),e!==null&&(We(e,t),ad(e))}function Xu(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),Yu(e,n)}function Zu(e,t){var n=0;switch(e.tag){case 31:case 13:var r=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:r=e.stateNode;break;case 22:r=e.stateNode._retryCache;break;default:throw Error(i(314))}r!==null&&r.delete(t),Yu(e,n)}function Qu(e,t){return _e(e,t)}var $u=null,ed=null,td=!1,nd=!1,rd=!1,id=0;function ad(e){e!==ed&&e.next===null&&(ed===null?$u=ed=e:ed=ed.next=e),nd=!0,td||(td=!0,fd())}function od(e,t){if(!rd&&nd){rd=!0;do for(var n=!1,r=$u;r!==null;){if(!t)if(e!==0){var i=r.pendingLanes;if(i===0)var a=0;else{var o=r.suspendedLanes,s=r.pingedLanes;a=(1<<31-je(42|e)+1)-1,a&=i&~(o&~s),a=a&201326741?a&201326741|1:a?a|2:0}a!==0&&(n=!0,dd(r,a))}else a=Rl,a=ze(r,r===Il?a:0,r.cancelPendingCommit!==null||r.timeoutHandle!==-1),!(a&3)||Be(r,a)||(n=!0,dd(r,a));r=r.next}while(n);rd=!1}}function sd(){cd()}function cd(){nd=td=!1;var e=0;id!==0&&Yd()&&(e=id);for(var t=xe(),n=null,r=$u;r!==null;){var i=r.next,a=ld(r,t);a===0?(r.next=null,n===null?$u=i:n.next=i,i===null&&(ed=n)):(n=r,(e!==0||a&3)&&(nd=!0)),r=i}au!==0&&au!==5||od(e,!1),id!==0&&(id=0)}function ld(e,t){for(var n=e.suspendedLanes,r=e.pingedLanes,i=e.expirationTimes,a=e.pendingLanes&-62914561;0s)break;var u=c.transferSize,d=c.initiatorType;u&&Bd(d)&&(c=c.responseEnd,o+=u*(c`u`?null:document;function Tf(e,t,n){var r=wf;if(r&&typeof t==`string`&&t){var i=Mt(t);i=`link[rel="`+e+`"][href="`+i+`"]`,typeof n==`string`&&(i+=`[crossorigin="`+n+`"]`),yf.has(i)||(yf.add(i),e={rel:e,crossOrigin:n,href:t},r.querySelector(i)===null&&(t=r.createElement(`link`),Rd(t,`link`,e),pt(t),r.head.appendChild(t)))}}function Ef(e){xf.D(e),Tf(`dns-prefetch`,e,null)}function Df(e,t){xf.C(e,t),Tf(`preconnect`,e,t)}function Of(e,t,n){xf.L(e,t,n);var r=wf;if(r&&e&&t){var i=`link[rel="preload"][as="`+Mt(t)+`"]`;t===`image`&&n&&n.imageSrcSet?(i+=`[imagesrcset="`+Mt(n.imageSrcSet)+`"]`,typeof n.imageSizes==`string`&&(i+=`[imagesizes="`+Mt(n.imageSizes)+`"]`)):i+=`[href="`+Mt(e)+`"]`;var a=i;switch(t){case`style`:a=Pf(e);break;case`script`:a=Rf(e)}vf.has(a)||(e=m({rel:`preload`,href:t===`image`&&n&&n.imageSrcSet?void 0:e,as:t},n),vf.set(a,e),r.querySelector(i)!==null||t===`style`&&r.querySelector(Ff(a))||t===`script`&&r.querySelector(zf(a))||(t=r.createElement(`link`),Rd(t,`link`,e),pt(t),r.head.appendChild(t)))}}function kf(e,t){xf.m(e,t);var n=wf;if(n&&e){var r=t&&typeof t.as==`string`?t.as:`script`,i=`link[rel="modulepreload"][as="`+Mt(r)+`"][href="`+Mt(e)+`"]`,a=i;switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:a=Rf(e)}if(!vf.has(a)&&(e=m({rel:`modulepreload`,href:e},t),vf.set(a,e),n.querySelector(i)===null)){switch(r){case`audioworklet`:case`paintworklet`:case`serviceworker`:case`sharedworker`:case`worker`:case`script`:if(n.querySelector(zf(a)))return}r=n.createElement(`link`),Rd(r,`link`,e),pt(r),n.head.appendChild(r)}}}function Af(e,t,n){xf.S(e,t,n);var r=wf;if(r&&e){var i=ft(r).hoistableStyles,a=Pf(e);t||=`default`;var o=i.get(a);if(!o){var s={loading:0,preload:null};if(o=r.querySelector(Ff(a)))s.loading=5;else{e=m({rel:`stylesheet`,href:e,"data-precedence":t},n),(n=vf.get(a))&&Hf(e,n);var c=o=r.createElement(`link`);pt(c),Rd(c,`link`,e),c._p=new Promise(function(e,t){c.onload=e,c.onerror=t}),c.addEventListener(`load`,function(){s.loading|=1}),c.addEventListener(`error`,function(){s.loading|=2}),s.loading|=4,Vf(o,t,r)}o={type:`stylesheet`,instance:o,count:1,state:s},i.set(a,o)}}}function jf(e,t){xf.X(e,t);var n=wf;if(n&&e){var r=ft(n).hoistableScripts,i=Rf(e),a=r.get(i);a||(a=n.querySelector(zf(i)),a||(e=m({src:e,async:!0},t),(t=vf.get(i))&&Uf(e,t),a=n.createElement(`script`),pt(a),Rd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Mf(e,t){xf.M(e,t);var n=wf;if(n&&e){var r=ft(n).hoistableScripts,i=Rf(e),a=r.get(i);a||(a=n.querySelector(zf(i)),a||(e=m({src:e,async:!0,type:`module`},t),(t=vf.get(i))&&Uf(e,t),a=n.createElement(`script`),pt(a),Rd(a,`link`,e),n.head.appendChild(a)),a={type:`script`,instance:a,count:1,state:null},r.set(i,a))}}function Nf(e,t,n,r){var a=(a=ie.current)?bf(a):null;if(!a)throw Error(i(446));switch(e){case`meta`:case`title`:return null;case`style`:return typeof n.precedence==`string`&&typeof n.href==`string`?(t=Pf(n.href),n=ft(a).hoistableStyles,r=n.get(t),r||(r={type:`style`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};case`link`:if(n.rel===`stylesheet`&&typeof n.href==`string`&&typeof n.precedence==`string`){e=Pf(n.href);var o=ft(a).hoistableStyles,s=o.get(e);if(s||(a=a.ownerDocument||a,s={type:`stylesheet`,instance:null,count:0,state:{loading:0,preload:null}},o.set(e,s),(o=a.querySelector(Ff(e)))&&!o._p&&(s.instance=o,s.state.loading=5),vf.has(e)||(n={rel:`preload`,as:`style`,href:n.href,crossOrigin:n.crossOrigin,integrity:n.integrity,media:n.media,hrefLang:n.hrefLang,referrerPolicy:n.referrerPolicy},vf.set(e,n),o||Lf(a,e,n,s.state))),t&&r===null)throw Error(i(528,``));return s}if(t&&r!==null)throw Error(i(529,``));return null;case`script`:return t=n.async,n=n.src,typeof n==`string`&&t&&typeof t!=`function`&&typeof t!=`symbol`?(t=Rf(n),n=ft(a).hoistableScripts,r=n.get(t),r||(r={type:`script`,instance:null,count:0,state:null},n.set(t,r)),r):{type:`void`,instance:null,count:0,state:null};default:throw Error(i(444,e))}}function Pf(e){return`href="`+Mt(e)+`"`}function Ff(e){return`link[rel="stylesheet"][`+e+`]`}function If(e){return m({},e,{"data-precedence":e.precedence,precedence:null})}function Lf(e,t,n,r){e.querySelector(`link[rel="preload"][as="style"][`+t+`]`)?r.loading=1:(t=e.createElement(`link`),r.preload=t,t.addEventListener(`load`,function(){return r.loading|=1}),t.addEventListener(`error`,function(){return r.loading|=2}),Rd(t,`link`,n),pt(t),e.head.appendChild(t))}function Rf(e){return`[src="`+Mt(e)+`"]`}function zf(e){return`script[async]`+e}function Bf(e,t,n){if(t.count++,t.instance===null)switch(t.type){case`style`:var r=e.querySelector(`style[data-href~="`+Mt(n.href)+`"]`);if(r)return t.instance=r,pt(r),r;var a=m({},n,{"data-href":n.href,"data-precedence":n.precedence,href:null,precedence:null});return r=(e.ownerDocument||e).createElement(`style`),pt(r),Rd(r,`style`,a),Vf(r,n.precedence,e),t.instance=r;case`stylesheet`:a=Pf(n.href);var o=e.querySelector(Ff(a));if(o)return t.state.loading|=4,t.instance=o,pt(o),o;r=If(n),(a=vf.get(a))&&Hf(r,a),o=(e.ownerDocument||e).createElement(`link`),pt(o);var s=o;return s._p=new Promise(function(e,t){s.onload=e,s.onerror=t}),Rd(o,`link`,r),t.state.loading|=4,Vf(o,n.precedence,e),t.instance=o;case`script`:return o=Rf(n.src),(a=e.querySelector(zf(o)))?(t.instance=a,pt(a),a):(r=n,(a=vf.get(o))&&(r=m({},n),Uf(r,a)),e=e.ownerDocument||e,a=e.createElement(`script`),pt(a),Rd(a,`link`,r),e.head.appendChild(a),t.instance=a);case`void`:return null;default:throw Error(i(443,t.type))}else t.type===`stylesheet`&&!(t.state.loading&4)&&(r=t.instance,t.state.loading|=4,Vf(r,n.precedence,e));return t.instance}function Vf(e,t,n){for(var r=n.querySelectorAll(`link[rel="stylesheet"][data-precedence],style[data-precedence]`),i=r.length?r[r.length-1]:null,a=i,o=0;o title`):null)}function qf(e,t,n){if(n===1||t.itemProp!=null)return!1;switch(e){case`meta`:case`title`:return!0;case`style`:if(typeof t.precedence!=`string`||typeof t.href!=`string`||t.href===``)break;return!0;case`link`:if(typeof t.rel!=`string`||typeof t.href!=`string`||t.href===``||t.onLoad||t.onError)break;switch(t.rel){case`stylesheet`:return e=t.disabled,typeof t.precedence==`string`&&e==null;default:return!0}case`script`:if(t.async&&typeof t.async!=`function`&&typeof t.async!=`symbol`&&!t.onLoad&&!t.onError&&t.src&&typeof t.src==`string`)return!0}return!1}function Jf(e){return!(e.type===`stylesheet`&&!(e.state.loading&3))}function Yf(e,t,n,r){if(n.type===`stylesheet`&&(typeof r.media!=`string`||!1!==matchMedia(r.media).matches)&&!(n.state.loading&4)){if(n.instance===null){var i=Pf(r.href),a=t.querySelector(Ff(i));if(a){t=a._p,typeof t==`object`&&t&&typeof t.then==`function`&&(e.count++,e=Qf.bind(e),t.then(e,e)),n.state.loading|=4,n.instance=a,pt(a);return}a=t.ownerDocument||t,r=If(r),(i=vf.get(i))&&Hf(r,i),a=a.createElement(`link`),pt(a);var o=a;o._p=new Promise(function(e,t){o.onload=e,o.onerror=t}),Rd(a,`link`,r),n.instance=a}e.stylesheets===null&&(e.stylesheets=new Map),e.stylesheets.set(n,t),(t=n.state.preload)&&!(n.state.loading&3)&&(e.count++,n=Qf.bind(e),t.addEventListener(`load`,n),t.addEventListener(`error`,n))}}var Xf=0;function Zf(e,t){return e.stylesheets&&e.count===0&&X(e,e.stylesheets),0Xf?50:800)+t);return e.unsuspend=n,function(){e.unsuspend=null,clearTimeout(r),clearTimeout(i)}}:null}function Qf(){if(this.count--,this.count===0&&(this.imgCount===0||!this.waitingForImages)){if(this.stylesheets)X(this,this.stylesheets);else if(this.unsuspend){var e=this.unsuspend;this.unsuspend=null,e()}}}var $f=null;function X(e,t){e.stylesheets=null,e.unsuspend!==null&&(e.count++,$f=new Map,t.forEach(ep,e),$f=null,Qf.call(e))}function ep(e,t){if(!(t.state.loading&4)){var n=$f.get(e);if(n)var r=n.get(null);else{n=new Map,$f.set(e,n);for(var i=e.querySelectorAll(`link[data-precedence],style[data-precedence]`),a=0;a{function n(){if(!(typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`||typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE!=`function`))try{__REACT_DEVTOOLS_GLOBAL_HOOK__.checkDCE(n)}catch(e){console.error(e)}}n(),t.exports=g()})),v=l(d(),1),y=l(_()),b={LEFT:0,MIDDLE:1,RIGHT:2,ROTATE:0,DOLLY:1,PAN:2},x={ROTATE:0,PAN:1,DOLLY_PAN:2,DOLLY_ROTATE:3},S=`attached`,C=`detached`,w=1e3,T=1001,E=1002,D=1003,O=1004,k=1004,A=1005,j=1005,M=1006,N=1007,P=1007,F=1008,I=1008,L=1009,ee=1010,R=1011,te=1012,z=1013,B=1014,V=1015,ne=1016,re=1017,ie=1018,ae=1020,oe=35902,se=35899,ce=1021,H=1022,le=1023,ue=1026,de=1027,fe=1028,pe=1029,me=1030,he=1031,ge=1032,_e=1033,ve=33776,ye=33777,be=33778,xe=33779,Se=35840,U=35841,Ce=35842,we=35843,Te=36196,W=37492,Ee=37496,De=37488,Oe=37489,ke=37490,Ae=37491,je=37808,Me=37809,Ne=37810,Pe=37811,Fe=37812,Ie=37813,Le=37814,Re=37815,ze=37816,Be=37817,Ve=37818,He=37819,Ue=37820,We=37821,Ge=36492,Ke=36494,qe=36495,Je=36283,Ye=36284,Xe=36285,Ze=36286,Qe=2200,$e=2201,et=2202,tt=2300,nt=2301,rt=2302,it=2303,at=2400,ot=2401,st=2402,ct=2500,lt=2501,ut=3200,dt=3201,ft=3202,pt=3203,mt=`srgb`,ht=`srgb-linear`,gt=`linear`,_t=`srgb`,vt=7680,yt=7681,bt=7682,xt=7683,St=34055,Ct=34056,wt=5386,Tt=35044,Et=35048,Dt=35040,Ot=35045,kt=35049,At=35041,jt=35046,Mt=35050,Nt=35042,Pt=`300 es`,Ft=2e3,It=2001,Lt={COMPUTE:`compute`,RENDER:`render`},Rt={PERSPECTIVE:`perspective`,LINEAR:`linear`,FLAT:`flat`},zt={NORMAL:`normal`,CENTROID:`centroid`,SAMPLE:`sample`,FIRST:`first`,EITHER:`either`},Bt={TEXTURE_COMPARE:`depthTextureCompare`};function Vt(e){for(let t=e.length-1;t>=0;--t)if(e[t]>=65535)return!0;return!1}var Ht={Int8Array,Uint8Array,Uint8ClampedArray,Int16Array,Uint16Array,Int32Array,Uint32Array,Float32Array,Float64Array};function Ut(e,t){return new Ht[e](t)}function Wt(e){return ArrayBuffer.isView(e)&&!(e instanceof DataView)}function Gt(e){return document.createElementNS(`http://www.w3.org/1999/xhtml`,e)}function Kt(){let e=Gt(`canvas`);return e.style.display=`block`,e}var qt={},Jt=null;function Yt(e){Jt=e}function Xt(){return Jt}function Zt(...e){let t=`THREE.`+e.shift();Jt?Jt(`log`,t,...e):console.log(t,...e)}function Qt(e){let t=e[0];if(typeof t==`string`&&t.startsWith(`TSL:`)){let t=e[1];t&&t.isStackTrace?e[0]+=` `+t.getLocation():e[1]=`Stack trace not available. Enable "THREE.Node.captureStackTrace" to capture stack traces.`}return e}function G(...e){e=Qt(e);let t=`THREE.`+e.shift();if(Jt)Jt(`warn`,t,...e);else{let n=e[0];n&&n.isStackTrace?console.warn(n.getError(t)):console.warn(t,...e)}}function $t(...e){e=Qt(e);let t=`THREE.`+e.shift();if(Jt)Jt(`error`,t,...e);else{let n=e[0];n&&n.isStackTrace?console.error(n.getError(t)):console.error(t,...e)}}function en(...e){let t=e.join(` `);t in qt||(qt[t]=!0,G(...e))}function tn(e,t,n){return new Promise(function(r,i){function a(){switch(e.clientWaitSync(t,e.SYNC_FLUSH_COMMANDS_BIT,0)){case e.WAIT_FAILED:i();break;case e.TIMEOUT_EXPIRED:setTimeout(a,n);break;default:r()}}setTimeout(a,n)})}var nn={0:1,2:6,4:7,3:5,1:0,6:2,7:4,5:3},rn=class{addEventListener(e,t){this._listeners===void 0&&(this._listeners={});let n=this._listeners;n[e]===void 0&&(n[e]=[]),n[e].indexOf(t)===-1&&n[e].push(t)}hasEventListener(e,t){let n=this._listeners;return n===void 0?!1:n[e]!==void 0&&n[e].indexOf(t)!==-1}removeEventListener(e,t){let n=this._listeners;if(n===void 0)return;let r=n[e];if(r!==void 0){let e=r.indexOf(t);e!==-1&&r.splice(e,1)}}dispatchEvent(e){let t=this._listeners;if(t===void 0)return;let n=t[e.type];if(n!==void 0){e.target=this;let t=n.slice(0);for(let n=0,r=t.length;n>8&255]+an[e>>16&255]+an[e>>24&255]+`-`+an[t&255]+an[t>>8&255]+`-`+an[t>>16&15|64]+an[t>>24&255]+`-`+an[n&63|128]+an[n>>8&255]+`-`+an[n>>16&255]+an[n>>24&255]+an[r&255]+an[r>>8&255]+an[r>>16&255]+an[r>>24&255]).toLowerCase()}function un(e,t,n){return Math.max(t,Math.min(n,e))}function dn(e,t){return(e%t+t)%t}function fn(e,t,n,r,i){return r+(e-t)*(i-r)/(n-t)}function pn(e,t,n){return e===t?0:(n-e)/(t-e)}function mn(e,t,n){return(1-n)*e+n*t}function hn(e,t,n,r){return mn(e,t,1-Math.exp(-n*r))}function gn(e,t=1){return t-Math.abs(dn(e,t*2)-t)}function _n(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t),e*e*(3-2*e))}function vn(e,t,n){return e<=t?0:e>=n?1:(e=(e-t)/(n-t),e*e*e*(e*(e*6-15)+10))}function yn(e,t){return e+Math.floor(Math.random()*(t-e+1))}function bn(e,t){return e+Math.random()*(t-e)}function xn(e){return e*(.5-Math.random())}function Sn(e){e!==void 0&&(on=e);let t=on+=1831565813;return t=Math.imul(t^t>>>15,t|1),t^=t+Math.imul(t^t>>>7,t|61),((t^t>>>14)>>>0)/4294967296}function Cn(e){return e*sn}function wn(e){return e*cn}function Tn(e){return(e&e-1)==0&&e!==0}function En(e){return 2**Math.ceil(Math.log(e)/Math.LN2)}function Dn(e){return 2**Math.floor(Math.log(e)/Math.LN2)}function On(e,t,n,r,i){let a=Math.cos,o=Math.sin,s=a(n/2),c=o(n/2),l=a((t+r)/2),u=o((t+r)/2),d=a((t-r)/2),f=o((t-r)/2),p=a((r-t)/2),m=o((r-t)/2);switch(i){case`XYX`:e.set(s*u,c*d,c*f,s*l);break;case`YZY`:e.set(c*f,s*u,c*d,s*l);break;case`ZXZ`:e.set(c*d,c*f,s*u,s*l);break;case`XZX`:e.set(s*u,c*m,c*p,s*l);break;case`YXY`:e.set(c*p,s*u,c*m,s*l);break;case`ZYZ`:e.set(c*m,c*p,s*u,s*l);break;default:G(`MathUtils: .setQuaternionFromProperEuler() encountered an unknown order: `+i)}}function kn(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return e/4294967295;case Uint16Array:return e/65535;case Uint8Array:return e/255;case Int32Array:return Math.max(e/2147483647,-1);case Int16Array:return Math.max(e/32767,-1);case Int8Array:return Math.max(e/127,-1);default:throw Error(`Invalid component type.`)}}function An(e,t){switch(t.constructor){case Float32Array:return e;case Uint32Array:return Math.round(e*4294967295);case Uint16Array:return Math.round(e*65535);case Uint8Array:return Math.round(e*255);case Int32Array:return Math.round(e*2147483647);case Int16Array:return Math.round(e*32767);case Int8Array:return Math.round(e*127);default:throw Error(`Invalid component type.`)}}var jn={DEG2RAD:sn,RAD2DEG:cn,generateUUID:ln,clamp:un,euclideanModulo:dn,mapLinear:fn,inverseLerp:pn,lerp:mn,damp:hn,pingpong:gn,smoothstep:_n,smootherstep:vn,randInt:yn,randFloat:bn,randFloatSpread:xn,seededRandom:Sn,degToRad:Cn,radToDeg:wn,isPowerOfTwo:Tn,ceilPowerOfTwo:En,floorPowerOfTwo:Dn,setQuaternionFromProperEuler:On,normalize:An,denormalize:kn},K=class e{static{e.prototype.isVector2=!0}constructor(e=0,t=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,n=this.y,r=e.elements;return this.x=r[0]*t+r[3]*n+r[6],this.y=r[1]*t+r[4]*n+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=un(this.x,e.x,t.x),this.y=un(this.y,e.y,t.y),this}clampScalar(e,t){return this.x=un(this.x,e,t),this.y=un(this.y,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(un(n,e,t))}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=Math.trunc(this.x),this.y=Math.trunc(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}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(un(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y;return t*t+n*n}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,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,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 n=Math.cos(t),r=Math.sin(t),i=this.x-e.x,a=this.y-e.y;return this.x=i*n-a*r+e.x,this.y=i*r+a*n+e.y,this}random(){return this.x=Math.random(),this.y=Math.random(),this}*[Symbol.iterator](){yield this.x,yield this.y}},Mn=class{constructor(e=0,t=0,n=0,r=1){this.isQuaternion=!0,this._x=e,this._y=t,this._z=n,this._w=r}static slerpFlat(e,t,n,r,i,a,o){let s=n[r+0],c=n[r+1],l=n[r+2],u=n[r+3],d=i[a+0],f=i[a+1],p=i[a+2],m=i[a+3];if(u!==m||s!==d||c!==f||l!==p){let e=s*d+c*f+l*p+u*m;e<0&&(d=-d,f=-f,p=-p,m=-m,e=-e);let t=1-o;if(e<.9995){let n=Math.acos(e),r=Math.sin(n);t=Math.sin(t*n)/r,o=Math.sin(o*n)/r,s=s*t+d*o,c=c*t+f*o,l=l*t+p*o,u=u*t+m*o}else{s=s*t+d*o,c=c*t+f*o,l=l*t+p*o,u=u*t+m*o;let e=1/Math.sqrt(s*s+c*c+l*l+u*u);s*=e,c*=e,l*=e,u*=e}}e[t]=s,e[t+1]=c,e[t+2]=l,e[t+3]=u}static multiplyQuaternionsFlat(e,t,n,r,i,a){let o=n[r],s=n[r+1],c=n[r+2],l=n[r+3],u=i[a],d=i[a+1],f=i[a+2],p=i[a+3];return e[t]=o*p+l*u+s*f-c*d,e[t+1]=s*p+l*d+c*u-o*f,e[t+2]=c*p+l*f+o*d-s*u,e[t+3]=l*p-o*u-s*d-c*f,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,n,r){return this._x=e,this._y=t,this._z=n,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=!0){let n=e._x,r=e._y,i=e._z,a=e._order,o=Math.cos,s=Math.sin,c=o(n/2),l=o(r/2),u=o(i/2),d=s(n/2),f=s(r/2),p=s(i/2);switch(a){case`XYZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`YXZ`:this._x=d*l*u+c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`ZXY`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u-d*f*p;break;case`ZYX`:this._x=d*l*u-c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u+d*f*p;break;case`YZX`:this._x=d*l*u+c*f*p,this._y=c*f*u+d*l*p,this._z=c*l*p-d*f*u,this._w=c*l*u-d*f*p;break;case`XZY`:this._x=d*l*u-c*f*p,this._y=c*f*u-d*l*p,this._z=c*l*p+d*f*u,this._w=c*l*u+d*f*p;break;default:G(`Quaternion: .setFromEuler() encountered an unknown order: `+a)}return t===!0&&this._onChangeCallback(),this}setFromAxisAngle(e,t){let n=t/2,r=Math.sin(n);return this._x=e.x*r,this._y=e.y*r,this._z=e.z*r,this._w=Math.cos(n),this._onChangeCallback(),this}setFromRotationMatrix(e){let t=e.elements,n=t[0],r=t[4],i=t[8],a=t[1],o=t[5],s=t[9],c=t[2],l=t[6],u=t[10],d=n+o+u;if(d>0){let e=.5/Math.sqrt(d+1);this._w=.25/e,this._x=(l-s)*e,this._y=(i-c)*e,this._z=(a-r)*e}else if(n>o&&n>u){let e=2*Math.sqrt(1+n-o-u);this._w=(l-s)/e,this._x=.25*e,this._y=(r+a)/e,this._z=(i+c)/e}else if(o>u){let e=2*Math.sqrt(1+o-n-u);this._w=(i-c)/e,this._x=(r+a)/e,this._y=.25*e,this._z=(s+l)/e}else{let e=2*Math.sqrt(1+u-n-o);this._w=(a-r)/e,this._x=(i+c)/e,this._y=(s+l)/e,this._z=.25*e}return this._onChangeCallback(),this}setFromUnitVectors(e,t){let n=e.dot(t)+1;return n<1e-8?(n=0,Math.abs(e.x)>Math.abs(e.z)?(this._x=-e.y,this._y=e.x,this._z=0,this._w=n):(this._x=0,this._y=-e.z,this._z=e.y,this._w=n)):(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=n),this.normalize()}angleTo(e){return 2*Math.acos(Math.abs(un(this.dot(e),-1,1)))}rotateTowards(e,t){let n=this.angleTo(e);if(n===0)return this;let r=Math.min(1,t/n);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 e===0?(this._x=0,this._y=0,this._z=0,this._w=1):(e=1/e,this._x*=e,this._y*=e,this._z*=e,this._w*=e),this._onChangeCallback(),this}multiply(e){return this.multiplyQuaternions(this,e)}premultiply(e){return this.multiplyQuaternions(e,this)}multiplyQuaternions(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=t._x,s=t._y,c=t._z,l=t._w;return this._x=n*l+a*o+r*c-i*s,this._y=r*l+a*s+i*o-n*c,this._z=i*l+a*c+n*s-r*o,this._w=a*l-n*o-r*s-i*c,this._onChangeCallback(),this}slerp(e,t){let n=e._x,r=e._y,i=e._z,a=e._w,o=this.dot(e);o<0&&(n=-n,r=-r,i=-i,a=-a,o=-o);let s=1-t;if(o<.9995){let e=Math.acos(o),c=Math.sin(e);s=Math.sin(s*e)/c,t=Math.sin(t*e)/c,this._x=this._x*s+n*t,this._y=this._y*s+r*t,this._z=this._z*s+i*t,this._w=this._w*s+a*t,this._onChangeCallback()}else this._x=this._x*s+n*t,this._y=this._y*s+r*t,this._z=this._z*s+i*t,this._w=this._w*s+a*t,this.normalize();return this}slerpQuaternions(e,t,n){return this.copy(e).slerp(t,n)}random(){let e=2*Math.PI*Math.random(),t=2*Math.PI*Math.random(),n=Math.random(),r=Math.sqrt(1-n),i=Math.sqrt(n);return this.set(r*Math.sin(e),r*Math.cos(e),i*Math.sin(t),i*Math.cos(t))}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._onChangeCallback(),this}toJSON(){return this.toArray()}_onChange(e){return this._onChangeCallback=e,this}_onChangeCallback(){}*[Symbol.iterator](){yield this._x,yield this._y,yield this._z,yield this._w}},q=class e{static{e.prototype.isVector3=!0}constructor(e=0,t=0,n=0){this.x=e,this.y=t,this.z=n}set(e,t,n){return n===void 0&&(n=this.z),this.x=e,this.y=t,this.z=n,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(Pn.setFromEuler(e))}applyAxisAngle(e,t){return this.applyQuaternion(Pn.setFromAxisAngle(e,t))}applyMatrix3(e){let t=this.x,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[3]*n+i[6]*r,this.y=i[1]*t+i[4]*n+i[7]*r,this.z=i[2]*t+i[5]*n+i[8]*r,this}applyNormalMatrix(e){return this.applyMatrix3(e).normalize()}applyMatrix4(e){let t=this.x,n=this.y,r=this.z,i=e.elements,a=1/(i[3]*t+i[7]*n+i[11]*r+i[15]);return this.x=(i[0]*t+i[4]*n+i[8]*r+i[12])*a,this.y=(i[1]*t+i[5]*n+i[9]*r+i[13])*a,this.z=(i[2]*t+i[6]*n+i[10]*r+i[14])*a,this}applyQuaternion(e){let t=this.x,n=this.y,r=this.z,i=e.x,a=e.y,o=e.z,s=e.w,c=2*(a*r-o*n),l=2*(o*t-i*r),u=2*(i*n-a*t);return this.x=t+s*c+a*u-o*l,this.y=n+s*l+o*c-i*u,this.z=r+s*u+i*l-a*c,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,n=this.y,r=this.z,i=e.elements;return this.x=i[0]*t+i[4]*n+i[8]*r,this.y=i[1]*t+i[5]*n+i[9]*r,this.z=i[2]*t+i[6]*n+i[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=un(this.x,e.x,t.x),this.y=un(this.y,e.y,t.y),this.z=un(this.z,e.z,t.z),this}clampScalar(e,t){return this.x=un(this.x,e,t),this.y=un(this.y,e,t),this.z=un(this.z,e,t),this}clampLength(e,t){let n=this.length();return this.divideScalar(n||1).multiplyScalar(un(n,e,t))}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=Math.trunc(this.x),this.y=Math.trunc(this.y),this.z=Math.trunc(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,n){return this.x=e.x+(t.x-e.x)*n,this.y=e.y+(t.y-e.y)*n,this.z=e.z+(t.z-e.z)*n,this}cross(e){return this.crossVectors(this,e)}crossVectors(e,t){let n=e.x,r=e.y,i=e.z,a=t.x,o=t.y,s=t.z;return this.x=r*s-i*o,this.y=i*a-n*s,this.z=n*o-r*a,this}projectOnVector(e){let t=e.lengthSq();if(t===0)return this.set(0,0,0);let n=e.dot(this)/t;return this.copy(e).multiplyScalar(n)}projectOnPlane(e){return Nn.copy(this).projectOnVector(e),this.sub(Nn)}reflect(e){return this.sub(Nn.copy(e).multiplyScalar(2*this.dot(e)))}angleTo(e){let t=Math.sqrt(this.lengthSq()*e.lengthSq());if(t===0)return Math.PI/2;let n=this.dot(e)/t;return Math.acos(un(n,-1,1))}distanceTo(e){return Math.sqrt(this.distanceToSquared(e))}distanceToSquared(e){let t=this.x-e.x,n=this.y-e.y,r=this.z-e.z;return t*t+n*n+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,n){let r=Math.sin(t)*e;return this.x=r*Math.sin(n),this.y=Math.cos(t)*e,this.z=r*Math.cos(n),this}setFromCylindrical(e){return this.setFromCylindricalCoords(e.radius,e.theta,e.y)}setFromCylindricalCoords(e,t,n){return this.x=e*Math.sin(t),this.y=n,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(),n=this.setFromMatrixColumn(e,1).length(),r=this.setFromMatrixColumn(e,2).length();return this.x=t,this.y=n,this.z=r,this}setFromMatrixColumn(e,t){return this.fromArray(e.elements,t*4)}setFromMatrix3Column(e,t){return this.fromArray(e.elements,t*3)}setFromEuler(e){return this.x=e._x,this.y=e._y,this.z=e._z,this}setFromColor(e){return this.x=e.r,this.y=e.g,this.z=e.b,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()*Math.PI*2,t=Math.random()*2-1,n=Math.sqrt(1-t*t);return this.x=n*Math.cos(e),this.y=t,this.z=n*Math.sin(e),this}*[Symbol.iterator](){yield this.x,yield this.y,yield this.z}},Nn=new q,Pn=new Mn,Fn=class e{static{e.prototype.isMatrix3=!0}constructor(e,t,n,r,i,a,o,s,c){this.elements=[1,0,0,0,1,0,0,0,1],e!==void 0&&this.set(e,t,n,r,i,a,o,s,c)}set(e,t,n,r,i,a,o,s,c){let l=this.elements;return l[0]=e,l[1]=r,l[2]=o,l[3]=t,l[4]=i,l[5]=s,l[6]=n,l[7]=a,l[8]=c,this}identity(){return this.set(1,0,0,0,1,0,0,0,1),this}copy(e){let t=this.elements,n=e.elements;return t[0]=n[0],t[1]=n[1],t[2]=n[2],t[3]=n[3],t[4]=n[4],t[5]=n[5],t[6]=n[6],t[7]=n[7],t[8]=n[8],this}extractBasis(e,t,n){return e.setFromMatrix3Column(this,0),t.setFromMatrix3Column(this,1),n.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 n=e.elements,r=t.elements,i=this.elements,a=n[0],o=n[3],s=n[6],c=n[1],l=n[4],u=n[7],d=n[2],f=n[5],p=n[8],m=r[0],h=r[3],g=r[6],_=r[1],v=r[4],y=r[7],b=r[2],x=r[5],S=r[8];return i[0]=a*m+o*_+s*b,i[3]=a*h+o*v+s*x,i[6]=a*g+o*y+s*S,i[1]=c*m+l*_+u*b,i[4]=c*h+l*v+u*x,i[7]=c*g+l*y+u*S,i[2]=d*m+f*_+p*b,i[5]=d*h+f*v+p*x,i[8]=d*g+f*y+p*S,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],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8];return t*a*l-t*o*c-n*i*l+n*o*s+r*i*c-r*a*s}invert(){let e=this.elements,t=e[0],n=e[1],r=e[2],i=e[3],a=e[4],o=e[5],s=e[6],c=e[7],l=e[8],u=l*a-o*c,d=o*s-l*i,f=c*i-a*s,p=t*u+n*d+r*f;if(p===0)return this.set(0,0,0,0,0,0,0,0,0);let m=1/p;return e[0]=u*m,e[1]=(r*c-l*n)*m,e[2]=(o*n-r*a)*m,e[3]=d*m,e[4]=(l*t-r*s)*m,e[5]=(r*i-o*t)*m,e[6]=f*m,e[7]=(n*s-c*t)*m,e[8]=(a*t-n*i)*m,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,n,r,i,a,o){let s=Math.cos(i),c=Math.sin(i);return this.set(n*s,n*c,-n*(s*a+c*o)+a+e,-r*c,r*s,-r*(-c*a+s*o)+o+t,0,0,1),this}scale(e,t){return this.premultiply(In.makeScale(e,t)),this}rotate(e){return this.premultiply(In.makeRotation(-e)),this}translate(e,t){return this.premultiply(In.makeTranslation(e,t)),this}makeTranslation(e,t){return e.isVector2?this.set(1,0,e.x,0,1,e.y,0,0,1):this.set(1,0,e,0,1,t,0,0,1),this}makeRotation(e){let t=Math.cos(e),n=Math.sin(e);return this.set(t,-n,0,n,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,n=e.elements;for(let e=0;e<9;e++)if(t[e]!==n[e])return!1;return!0}fromArray(e,t=0){for(let n=0;n<9;n++)this.elements[n]=e[n+t];return this}toArray(e=[],t=0){let n=this.elements;return e[t]=n[0],e[t+1]=n[1],e[t+2]=n[2],e[t+3]=n[3],e[t+4]=n[4],e[t+5]=n[5],e[t+6]=n[6],e[t+7]=n[7],e[t+8]=n[8],e}clone(){return new this.constructor().fromArray(this.elements)}},In=new Fn,Ln=new Fn().set(.4123908,.3575843,.1804808,.212639,.7151687,.0721923,.0193308,.1191948,.9505322),Rn=new Fn().set(3.2409699,-1.5373832,-.4986108,-.9692436,1.8759675,.0415551,.0556301,-.203977,1.0569715);function zn(){let e={enabled:!0,workingColorSpace:ht,spaces:{},convert:function(e,t,n){return this.enabled===!1||t===n||!t||!n?e:(this.spaces[t].transfer===`srgb`&&(e.r=Vn(e.r),e.g=Vn(e.g),e.b=Vn(e.b)),this.spaces[t].primaries!==this.spaces[n].primaries&&(e.applyMatrix3(this.spaces[t].toXYZ),e.applyMatrix3(this.spaces[n].fromXYZ)),this.spaces[n].transfer===`srgb`&&(e.r=Hn(e.r),e.g=Hn(e.g),e.b=Hn(e.b)),e)},workingToColorSpace:function(e,t){return this.convert(e,this.workingColorSpace,t)},colorSpaceToWorking:function(e,t){return this.convert(e,t,this.workingColorSpace)},getPrimaries:function(e){return this.spaces[e].primaries},getTransfer:function(e){return e===``?gt:this.spaces[e].transfer},getToneMappingMode:function(e){return this.spaces[e].outputColorSpaceConfig.toneMappingMode||`standard`},getLuminanceCoefficients:function(e,t=this.workingColorSpace){return e.fromArray(this.spaces[t].luminanceCoefficients)},define:function(e){Object.assign(this.spaces,e)},_getMatrix:function(e,t,n){return e.copy(this.spaces[t].toXYZ).multiply(this.spaces[n].fromXYZ)},_getDrawingBufferColorSpace:function(e){return this.spaces[e].outputColorSpaceConfig.drawingBufferColorSpace},_getUnpackColorSpace:function(e=this.workingColorSpace){return this.spaces[e].workingColorSpaceConfig.unpackColorSpace},fromWorkingColorSpace:function(t,n){return en(`ColorManagement: .fromWorkingColorSpace() has been renamed to .workingToColorSpace().`),e.workingToColorSpace(t,n)},toWorkingColorSpace:function(t,n){return en(`ColorManagement: .toWorkingColorSpace() has been renamed to .colorSpaceToWorking().`),e.colorSpaceToWorking(t,n)}},t=[.64,.33,.3,.6,.15,.06],n=[.2126,.7152,.0722],r=[.3127,.329];return e.define({[ht]:{primaries:t,whitePoint:r,transfer:gt,toXYZ:Ln,fromXYZ:Rn,luminanceCoefficients:n,workingColorSpaceConfig:{unpackColorSpace:mt},outputColorSpaceConfig:{drawingBufferColorSpace:mt}},[mt]:{primaries:t,whitePoint:r,transfer:_t,toXYZ:Ln,fromXYZ:Rn,luminanceCoefficients:n,outputColorSpaceConfig:{drawingBufferColorSpace:mt}}}),e}var Bn=zn();function Vn(e){return e<.04045?e*.0773993808:(e*.9478672986+.0521327014)**2.4}function Hn(e){return e<.0031308?e*12.92:1.055*e**.41666-.055}var Un,Wn=class{static getDataURL(e,t=`image/png`){if(/^data:/i.test(e.src)||typeof HTMLCanvasElement>`u`)return e.src;let n;if(e instanceof HTMLCanvasElement)n=e;else{Un===void 0&&(Un=Gt(`canvas`)),Un.width=e.width,Un.height=e.height;let t=Un.getContext(`2d`);e instanceof ImageData?t.putImageData(e,0,0):t.drawImage(e,0,0,e.width,e.height),n=Un}return n.toDataURL(t)}static sRGBToLinear(e){if(typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap){let t=Gt(`canvas`);t.width=e.width,t.height=e.height;let n=t.getContext(`2d`);n.drawImage(e,0,0,e.width,e.height);let r=n.getImageData(0,0,e.width,e.height),i=r.data;for(let e=0;e1),this.pmremVersion=0,this.normalized=!1}get width(){return this.source.getSize(Yn).x}get height(){return this.source.getSize(Yn).y}get depth(){return this.source.getSize(Yn).z}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)}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}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.channel=e.channel,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.normalized=e.normalized,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.colorSpace=e.colorSpace,this.renderTarget=e.renderTarget,this.isRenderTargetTexture=e.isRenderTargetTexture,this.isArrayTexture=e.isArrayTexture,this.userData=JSON.parse(JSON.stringify(e.userData)),this.needsUpdate=!0,this}setValues(e){for(let t in e){let n=e[t];if(n===void 0){G(`Texture.setValues(): parameter '${t}' has value of undefined.`);continue}let r=this[t];if(r===void 0){G(`Texture.setValues(): property '${t}' does not exist.`);continue}r&&n&&r.isVector2&&n.isVector2||r&&n&&r.isVector3&&n.isVector3||r&&n&&r.isMatrix3&&n.isMatrix3?r.copy(n):this[t]=n}}toJSON(e){let t=e===void 0||typeof e==`string`;if(!t&&e.textures[this.uuid]!==void 0)return e.textures[this.uuid];let n={metadata:{version:4.7,type:`Texture`,generator:`Texture.toJSON`},uuid:this.uuid,name:this.name,image:this.source.toJSON(e).uuid,mapping:this.mapping,channel:this.channel,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,internalFormat:this.internalFormat,type:this.type,normalized:this.normalized,colorSpace:this.colorSpace,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&&(n.userData=this.userData),t||(e.textures[this.uuid]=n),n}dispose(){this.dispatchEvent({type:`dispose`})}transformUv(e){if(this.mapping!==300)return e;if(e.applyMatrix3(this.matrix),e.x<0||e.x>1)switch(this.wrapS){case w:e.x-=Math.floor(e.x);break;case T:e.x=e.x<0?0:1;break;case E:Math.abs(Math.floor(e.x)%2)===1?e.x=Math.ceil(e.x)-e.x:e.x-=Math.floor(e.x);break}if(e.y<0||e.y>1)switch(this.wrapT){case w:e.y-=Math.floor(e.y);break;case T:e.y=e.y<0?0:1;break;case E:Math.abs(Math.floor(e.y)%2)===1?e.y=Math.ceil(e.y)-e.y:e.y-=Math.floor(e.y);break}return this.flipY&&(e.y=1-e.y),e}set needsUpdate(e){e===!0&&(this.version++,this.source.needsUpdate=!0)}set needsPMREMUpdate(e){e===!0&&this.pmremVersion++}};Xn.DEFAULT_IMAGE=null,Xn.DEFAULT_MAPPING=300,Xn.DEFAULT_ANISOTROPY=1;var Zn=class e{static{e.prototype.isVector4=!0}constructor(e=0,t=0,n=0,r=1){this.x=e,this.y=t,this.z=n,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,n,r){return this.x=e,this.y=t,this.z=n,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=e.w===void 0?1:e.w,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}sub(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,n=this.y,r=this.z,i=this.w,a=e.elements;return this.x=a[0]*t+a[4]*n+a[8]*r+a[12]*i,this.y=a[1]*t+a[5]*n+a[9]*r+a[13]*i,this.z=a[2]*t+a[6]*n+a[10]*r+a[14]*i,this.w=a[3]*t+a[7]*n+a[11]*r+a[15]*i,this}divide(e){return this.x/=e.x,this.y/=e.y,this.z/=e.z,this.w/=e.w,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,n,r,i,a=.01,o=.1,s=e.elements,c=s[0],l=s[4],u=s[8],d=s[1],f=s[5],p=s[9],m=s[2],h=s[6],g=s[10];if(Math.abs(l-d)s&&e>_?e_?s1);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.scissor.copy(e.scissor),this.scissorTest=e.scissorTest,this.viewport.copy(e.viewport),this.textures.length=0;for(let t=0,n=e.textures.length;t>>0}enable(e){this.mask|=1<1){for(let e=0;e1){for(let e=0;e0&&(r.userData=this.userData),r.layers=this.layers.mask,r.matrix=this.matrix.toArray(),r.up=this.up.toArray(),this.pivot!==null&&(r.pivot=this.pivot.toArray()),this.matrixAutoUpdate===!1&&(r.matrixAutoUpdate=!1),this.morphTargetDictionary!==void 0&&(r.morphTargetDictionary=Object.assign({},this.morphTargetDictionary)),this.morphTargetInfluences!==void 0&&(r.morphTargetInfluences=this.morphTargetInfluences.slice()),this.isInstancedMesh&&(r.type=`InstancedMesh`,r.count=this.count,r.instanceMatrix=this.instanceMatrix.toJSON(),this.instanceColor!==null&&(r.instanceColor=this.instanceColor.toJSON())),this.isBatchedMesh&&(r.type=`BatchedMesh`,r.perObjectFrustumCulled=this.perObjectFrustumCulled,r.sortObjects=this.sortObjects,r.drawRanges=this._drawRanges,r.reservedRanges=this._reservedRanges,r.geometryInfo=this._geometryInfo.map(e=>({...e,boundingBox:e.boundingBox?e.boundingBox.toJSON():void 0,boundingSphere:e.boundingSphere?e.boundingSphere.toJSON():void 0})),r.instanceInfo=this._instanceInfo.map(e=>({...e})),r.availableInstanceIds=this._availableInstanceIds.slice(),r.availableGeometryIds=this._availableGeometryIds.slice(),r.nextIndexStart=this._nextIndexStart,r.nextVertexStart=this._nextVertexStart,r.geometryCount=this._geometryCount,r.maxInstanceCount=this._maxInstanceCount,r.maxVertexCount=this._maxVertexCount,r.maxIndexCount=this._maxIndexCount,r.geometryInitialized=this._geometryInitialized,r.matricesTexture=this._matricesTexture.toJSON(e),r.indirectTexture=this._indirectTexture.toJSON(e),this._colorsTexture!==null&&(r.colorsTexture=this._colorsTexture.toJSON(e)),this.boundingSphere!==null&&(r.boundingSphere=this.boundingSphere.toJSON()),this.boundingBox!==null&&(r.boundingBox=this.boundingBox.toJSON()));function i(t,n){return t[n.uuid]===void 0&&(t[n.uuid]=n.toJSON(e)),n.uuid}if(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&&this.environment.isRenderTargetTexture!==!0&&(r.environment=this.environment.toJSON(e).uuid);else if(this.isMesh||this.isLine||this.isPoints){r.geometry=i(e.geometries,this.geometry);let t=this.geometry.parameters;if(t!==void 0&&t.shapes!==void 0){let n=t.shapes;if(Array.isArray(n))for(let t=0,r=n.length;t0){r.children=[];for(let t=0;t0){r.animations=[];for(let t=0;t0&&(n.geometries=t),r.length>0&&(n.materials=r),i.length>0&&(n.textures=i),o.length>0&&(n.images=o),s.length>0&&(n.shapes=s),c.length>0&&(n.skeletons=c),l.length>0&&(n.animations=l),u.length>0&&(n.nodes=u)}return n.object=r,n;function a(e){let t=[];for(let n in e){let r=e[n];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.pivot=e.pivot===null?null:e.pivot.clone(),this.matrix.copy(e.matrix),this.matrixWorld.copy(e.matrixWorld),this.matrixAutoUpdate=e.matrixAutoUpdate,this.matrixWorldAutoUpdate=e.matrixWorldAutoUpdate,this.matrixWorldNeedsUpdate=e.matrixWorldNeedsUpdate,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.static=e.static,this.animations=e.animations.slice(),this.userData=JSON.parse(JSON.stringify(e.userData)),t===!0)for(let t=0;t.025?(c.inputState.pinching=!1,this.dispatchEvent({type:`pinchend`,handedness:e.handedness,target:this})):!c.inputState.pinching&&o<=.015&&(c.inputState.pinching=!0,this.dispatchEvent({type:`pinchstart`,handedness:e.handedness,target:this}))}else s!==null&&e.gripSpace&&(i=t.getPose(e.gripSpace,n),i!==null&&(s.matrix.fromArray(i.transform.matrix),s.matrix.decompose(s.position,s.rotation,s.scale),s.matrixWorldNeedsUpdate=!0,i.linearVelocity?(s.hasLinearVelocity=!0,s.linearVelocity.copy(i.linearVelocity)):s.hasLinearVelocity=!1,i.angularVelocity?(s.hasAngularVelocity=!0,s.angularVelocity.copy(i.angularVelocity)):s.hasAngularVelocity=!1,s.eventsEnabled&&s.dispatchEvent({type:`gripUpdated`,data:e,target:this})));o!==null&&(r=t.getPose(e.targetRaySpace,n),r===null&&i!==null&&(r=i),r!==null&&(o.matrix.fromArray(r.transform.matrix),o.matrix.decompose(o.position,o.rotation,o.scale),o.matrixWorldNeedsUpdate=!0,r.linearVelocity?(o.hasLinearVelocity=!0,o.linearVelocity.copy(r.linearVelocity)):o.hasLinearVelocity=!1,r.angularVelocity?(o.hasAngularVelocity=!0,o.angularVelocity.copy(r.angularVelocity)):o.hasAngularVelocity=!1,this.dispatchEvent(Mr)))}return o!==null&&(o.visible=r!==null),s!==null&&(s.visible=i!==null),c!==null&&(c.visible=a!==null),this}_getHandJoint(e,t){if(e.joints[t.jointName]===void 0){let n=new jr;n.matrixAutoUpdate=!1,n.visible=!1,e.joints[t.jointName]=n,e.add(n)}return e.joints[t.jointName]}},Pr={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074},Fr={h:0,s:0,l:0},Ir={h:0,s:0,l:0};function Lr(e,t,n){return n<0&&(n+=1),n>1&&--n,n<1/6?e+(t-e)*6*n:n<1/2?t:n<2/3?e+(t-e)*6*(2/3-n):e}var Y=class{constructor(e,t,n){return this.isColor=!0,this.r=1,this.g=1,this.b=1,this.set(e,t,n)}set(e,t,n){if(t===void 0&&n===void 0){let t=e;t&&t.isColor?this.copy(t):typeof t==`number`?this.setHex(t):typeof t==`string`&&this.setStyle(t)}else this.setRGB(e,t,n);return this}setScalar(e){return this.r=e,this.g=e,this.b=e,this}setHex(e,t=mt){return e=Math.floor(e),this.r=(e>>16&255)/255,this.g=(e>>8&255)/255,this.b=(e&255)/255,Bn.colorSpaceToWorking(this,t),this}setRGB(e,t,n,r=Bn.workingColorSpace){return this.r=e,this.g=t,this.b=n,Bn.colorSpaceToWorking(this,r),this}setHSL(e,t,n,r=Bn.workingColorSpace){if(e=dn(e,1),t=un(t,0,1),n=un(n,0,1),t===0)this.r=this.g=this.b=n;else{let r=n<=.5?n*(1+t):n+t-n*t,i=2*n-r;this.r=Lr(i,r,e+1/3),this.g=Lr(i,r,e),this.b=Lr(i,r,e-1/3)}return Bn.colorSpaceToWorking(this,r),this}setStyle(e,t=mt){function n(t){t!==void 0&&parseFloat(t)<1&&G(`Color: Alpha component of `+e+` will be ignored.`)}let r;if(r=/^(\w+)\(([^\)]*)\)/.exec(e)){let i,a=r[1],o=r[2];switch(a){case`rgb`:case`rgba`:if(i=/^\s*(\d+)\s*,\s*(\d+)\s*,\s*(\d+)\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(255,parseInt(i[1],10))/255,Math.min(255,parseInt(i[2],10))/255,Math.min(255,parseInt(i[3],10))/255,t);if(i=/^\s*(\d+)\%\s*,\s*(\d+)\%\s*,\s*(\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setRGB(Math.min(100,parseInt(i[1],10))/100,Math.min(100,parseInt(i[2],10))/100,Math.min(100,parseInt(i[3],10))/100,t);break;case`hsl`:case`hsla`:if(i=/^\s*(\d*\.?\d+)\s*,\s*(\d*\.?\d+)\%\s*,\s*(\d*\.?\d+)\%\s*(?:,\s*(\d*\.?\d+)\s*)?$/.exec(o))return n(i[4]),this.setHSL(parseFloat(i[1])/360,parseFloat(i[2])/100,parseFloat(i[3])/100,t);break;default:G(`Color: Unknown color model `+e)}}else if(r=/^\#([A-Fa-f\d]+)$/.exec(e)){let n=r[1],i=n.length;if(i===3)return this.setRGB(parseInt(n.charAt(0),16)/15,parseInt(n.charAt(1),16)/15,parseInt(n.charAt(2),16)/15,t);if(i===6)return this.setHex(parseInt(n,16),t);G(`Color: Invalid hex color `+e)}else if(e&&e.length>0)return this.setColorName(e,t);return this}setColorName(e,t=mt){let n=Pr[e.toLowerCase()];return n===void 0?G(`Color: Unknown color `+e):this.setHex(n,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=Vn(e.r),this.g=Vn(e.g),this.b=Vn(e.b),this}copyLinearToSRGB(e){return this.r=Hn(e.r),this.g=Hn(e.g),this.b=Hn(e.b),this}convertSRGBToLinear(){return this.copySRGBToLinear(this),this}convertLinearToSRGB(){return this.copyLinearToSRGB(this),this}getHex(e=mt){return Bn.workingToColorSpace(Rr.copy(this),e),Math.round(un(Rr.r*255,0,255))*65536+Math.round(un(Rr.g*255,0,255))*256+Math.round(un(Rr.b*255,0,255))}getHexString(e=mt){return(`000000`+this.getHex(e).toString(16)).slice(-6)}getHSL(e,t=Bn.workingColorSpace){Bn.workingToColorSpace(Rr.copy(this),t);let n=Rr.r,r=Rr.g,i=Rr.b,a=Math.max(n,r,i),o=Math.min(n,r,i),s,c,l=(o+a)/2;if(o===a)s=0,c=0;else{let e=a-o;switch(c=l<=.5?e/(a+o):e/(2-a-o),a){case n:s=(r-i)/e+(r0&&(t.object.backgroundBlurriness=this.backgroundBlurriness),this.backgroundIntensity!==1&&(t.object.backgroundIntensity=this.backgroundIntensity),t.object.backgroundRotation=this.backgroundRotation.toArray(),this.environmentIntensity!==1&&(t.object.environmentIntensity=this.environmentIntensity),t.object.environmentRotation=this.environmentRotation.toArray(),t}},Hr=new q,Ur=new q,Wr=new q,Gr=new q,Kr=new q,qr=new q,Jr=new q,Yr=new q,Xr=new q,Zr=new q,Qr=new Zn,$r=new Zn,ei=new Zn,ti=class e{constructor(e=new q,t=new q,n=new q){this.a=e,this.b=t,this.c=n}static getNormal(e,t,n,r){r.subVectors(n,t),Hr.subVectors(e,t),r.cross(Hr);let i=r.lengthSq();return i>0?r.multiplyScalar(1/Math.sqrt(i)):r.set(0,0,0)}static getBarycoord(e,t,n,r,i){Hr.subVectors(r,t),Ur.subVectors(n,t),Wr.subVectors(e,t);let a=Hr.dot(Hr),o=Hr.dot(Ur),s=Hr.dot(Wr),c=Ur.dot(Ur),l=Ur.dot(Wr),u=a*c-o*o;if(u===0)return i.set(0,0,0),null;let d=1/u,f=(c*s-o*l)*d,p=(a*l-o*s)*d;return i.set(1-f-p,p,f)}static containsPoint(e,t,n,r){return this.getBarycoord(e,t,n,r,Gr)===null?!1:Gr.x>=0&&Gr.y>=0&&Gr.x+Gr.y<=1}static getInterpolation(e,t,n,r,i,a,o,s){return this.getBarycoord(e,t,n,r,Gr)===null?(s.x=0,s.y=0,`z`in s&&(s.z=0),`w`in s&&(s.w=0),null):(s.setScalar(0),s.addScaledVector(i,Gr.x),s.addScaledVector(a,Gr.y),s.addScaledVector(o,Gr.z),s)}static getInterpolatedAttribute(e,t,n,r,i,a){return Qr.setScalar(0),$r.setScalar(0),ei.setScalar(0),Qr.fromBufferAttribute(e,t),$r.fromBufferAttribute(e,n),ei.fromBufferAttribute(e,r),a.setScalar(0),a.addScaledVector(Qr,i.x),a.addScaledVector($r,i.y),a.addScaledVector(ei,i.z),a}static isFrontFacing(e,t,n,r){return Hr.subVectors(n,t),Ur.subVectors(e,t),Hr.cross(Ur).dot(r)<0}set(e,t,n){return this.a.copy(e),this.b.copy(t),this.c.copy(n),this}setFromPointsAndIndices(e,t,n,r){return this.a.copy(e[t]),this.b.copy(e[n]),this.c.copy(e[r]),this}setFromAttributeAndIndices(e,t,n,r){return this.a.fromBufferAttribute(e,t),this.b.fromBufferAttribute(e,n),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}getArea(){return Hr.subVectors(this.c,this.b),Ur.subVectors(this.a,this.b),Hr.cross(Ur).length()*.5}getMidpoint(e){return e.addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)}getNormal(t){return e.getNormal(this.a,this.b,this.c,t)}getPlane(e){return e.setFromCoplanarPoints(this.a,this.b,this.c)}getBarycoord(t,n){return e.getBarycoord(t,this.a,this.b,this.c,n)}getInterpolation(t,n,r,i,a){return e.getInterpolation(t,this.a,this.b,this.c,n,r,i,a)}containsPoint(t){return e.containsPoint(t,this.a,this.b,this.c)}isFrontFacing(t){return e.isFrontFacing(this.a,this.b,this.c,t)}intersectsBox(e){return e.intersectsTriangle(this)}closestPointToPoint(e,t){let n=this.a,r=this.b,i=this.c,a,o;Kr.subVectors(r,n),qr.subVectors(i,n),Yr.subVectors(e,n);let s=Kr.dot(Yr),c=qr.dot(Yr);if(s<=0&&c<=0)return t.copy(n);Xr.subVectors(e,r);let l=Kr.dot(Xr),u=qr.dot(Xr);if(l>=0&&u<=l)return t.copy(r);let d=s*u-l*c;if(d<=0&&s>=0&&l<=0)return a=s/(s-l),t.copy(n).addScaledVector(Kr,a);Zr.subVectors(e,i);let f=Kr.dot(Zr),p=qr.dot(Zr);if(p>=0&&f<=p)return t.copy(i);let m=f*c-s*p;if(m<=0&&c>=0&&p<=0)return o=c/(c-p),t.copy(n).addScaledVector(qr,o);let h=l*p-f*u;if(h<=0&&u-l>=0&&f-p>=0)return Jr.subVectors(i,r),o=(u-l)/(u-l+(f-p)),t.copy(r).addScaledVector(Jr,o);let g=1/(h+m+d);return a=m*g,o=d*g,t.copy(n).addScaledVector(Kr,a).addScaledVector(qr,o)}equals(e){return e.a.equals(this.a)&&e.b.equals(this.b)&&e.c.equals(this.c)}},ni=class{constructor(e=new q(1/0,1/0,1/0),t=new q(-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){this.makeEmpty();for(let t=0,n=e.length;t=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,ii),ii.distanceToSquared(e.center)<=e.radius*e.radius}intersectsPlane(e){let t,n;return e.normal.x>0?(t=e.normal.x*this.min.x,n=e.normal.x*this.max.x):(t=e.normal.x*this.max.x,n=e.normal.x*this.min.x),e.normal.y>0?(t+=e.normal.y*this.min.y,n+=e.normal.y*this.max.y):(t+=e.normal.y*this.max.y,n+=e.normal.y*this.min.y),e.normal.z>0?(t+=e.normal.z*this.min.z,n+=e.normal.z*this.max.z):(t+=e.normal.z*this.max.z,n+=e.normal.z*this.min.z),t<=-e.constant&&n>=-e.constant}intersectsTriangle(e){if(this.isEmpty())return!1;this.getCenter(fi),pi.subVectors(this.max,fi),oi.subVectors(e.a,fi),si.subVectors(e.b,fi),ci.subVectors(e.c,fi),li.subVectors(si,oi),ui.subVectors(ci,si),di.subVectors(oi,ci);let t=[0,-li.z,li.y,0,-ui.z,ui.y,0,-di.z,di.y,li.z,0,-li.x,ui.z,0,-ui.x,di.z,0,-di.x,-li.y,li.x,0,-ui.y,ui.x,0,-di.y,di.x,0];return!gi(t,oi,si,ci,pi)||(t=[1,0,0,0,1,0,0,0,1],!gi(t,oi,si,ci,pi))?!1:(mi.crossVectors(li,ui),t=[mi.x,mi.y,mi.z],gi(t,oi,si,ci,pi))}clampPoint(e,t){return t.copy(e).clamp(this.min,this.max)}distanceToPoint(e){return this.clampPoint(e,ii).distanceTo(e)}getBoundingSphere(e){return this.isEmpty()?e.makeEmpty():(this.getCenter(e.center),e.radius=this.getSize(ii).length()*.5),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()?this:(ri[0].set(this.min.x,this.min.y,this.min.z).applyMatrix4(e),ri[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(e),ri[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(e),ri[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(e),ri[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(e),ri[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(e),ri[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(e),ri[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(e),this.setFromPoints(ri),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)}toJSON(){return{min:this.min.toArray(),max:this.max.toArray()}}fromJSON(e){return this.min.fromArray(e.min),this.max.fromArray(e.max),this}},ri=[new q,new q,new q,new q,new q,new q,new q,new q],ii=new q,ai=new ni,oi=new q,si=new q,ci=new q,li=new q,ui=new q,di=new q,fi=new q,pi=new q,mi=new q,hi=new q;function gi(e,t,n,r,i){for(let a=0,o=e.length-3;a<=o;a+=3){hi.fromArray(e,a);let o=i.x*Math.abs(hi.x)+i.y*Math.abs(hi.y)+i.z*Math.abs(hi.z),s=t.dot(hi),c=n.dot(hi),l=r.dot(hi);if(Math.max(-Math.max(s,c,l),Math.min(s,c,l))>o)return!1}return!0}var _i=vi();function vi(){let e=new ArrayBuffer(4),t=new Float32Array(e),n=new Uint32Array(e),r=new Uint32Array(512),i=new Uint32Array(512);for(let e=0;e<256;++e){let t=e-127;t<-27?(r[e]=0,r[e|256]=32768,i[e]=24,i[e|256]=24):t<-14?(r[e]=1024>>-t-14,r[e|256]=1024>>-t-14|32768,i[e]=-t-1,i[e|256]=-t-1):t<=15?(r[e]=t+15<<10,r[e|256]=t+15<<10|32768,i[e]=13,i[e|256]=13):t<128?(r[e]=31744,r[e|256]=64512,i[e]=24,i[e|256]=24):(r[e]=31744,r[e|256]=64512,i[e]=13,i[e|256]=13)}let a=new Uint32Array(2048),o=new Uint32Array(64),s=new Uint32Array(64);for(let e=1;e<1024;++e){let t=e<<13,n=0;for(;!(t&8388608);)t<<=1,n-=8388608;t&=-8388609,n+=947912704,a[e]=t|n}for(let e=1024;e<2048;++e)a[e]=939524096+(e-1024<<13);for(let e=1;e<31;++e)o[e]=e<<23;o[31]=1199570944,o[32]=2147483648;for(let e=33;e<63;++e)o[e]=2147483648+(e-32<<23);o[63]=3347054592;for(let e=1;e<64;++e)e!==32&&(s[e]=1024);return{floatView:t,uint32View:n,baseTable:r,shiftTable:i,mantissaTable:a,exponentTable:o,offsetTable:s}}function yi(e){Math.abs(e)>65504&&G(`DataUtils.toHalfFloat(): Value out of range.`),e=un(e,-65504,65504),_i.floatView[0]=e;let t=_i.uint32View[0],n=t>>23&511;return _i.baseTable[n]+((t&8388607)>>_i.shiftTable[n])}function bi(e){let t=e>>10;return _i.uint32View[0]=_i.mantissaTable[_i.offsetTable[t]+(e&1023)]+_i.exponentTable[t],_i.floatView[0]}var xi=class{static toHalfFloat(e){return yi(e)}static fromHalfFloat(e){return bi(e)}},Si=new q,Ci=new K,wi=0,Ti=class extends rn{constructor(e,t,n=!1){if(super(),Array.isArray(e))throw TypeError(`THREE.BufferAttribute: array should be a Typed Array.`);this.isBufferAttribute=!0,Object.defineProperty(this,"id",{value:wi++}),this.name=``,this.array=e,this.itemSize=t,this.count=e===void 0?0:e.length/t,this.normalized=n,this.usage=Tt,this.updateRanges=[],this.gpuType=V,this.version=0}onUploadCallback(){}set needsUpdate(e){e===!0&&this.version++}setUsage(e){return this.usage=e,this}addUpdateRange(e,t){this.updateRanges.push({start:e,count:t})}clearUpdateRanges(){this.updateRanges.length=0}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.gpuType=e.gpuType,this}copyAt(e,t,n){e*=this.itemSize,n*=t.itemSize;for(let r=0,i=this.itemSize;rthis.radius*this.radius&&(t.sub(this.center).normalize(),t.multiplyScalar(this.radius).add(this.center)),t}getBoundingBox(e){return this.isEmpty()?(e.makeEmpty(),e):(e.set(this.center,this.center),e.expandByScalar(this.radius),e)}applyMatrix4(e){return this.center.applyMatrix4(e),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;Ii.subVectors(e,this.center);let t=Ii.lengthSq();if(t>this.radius*this.radius){let e=Math.sqrt(t),n=(e-this.radius)*.5;this.center.addScaledVector(Ii,n/e),this.radius+=n}return this}union(e){return e.isEmpty()?this:this.isEmpty()?(this.copy(e),this):(this.center.equals(e.center)===!0?this.radius=Math.max(this.radius,e.radius):(Li.subVectors(e.center,this.center).setLength(e.radius),this.expandByPoint(Ii.copy(e.center).add(Li)),this.expandByPoint(Ii.copy(e.center).sub(Li))),this)}equals(e){return e.center.equals(this.center)&&e.radius===this.radius}clone(){return new this.constructor().copy(this)}toJSON(){return{radius:this.radius,center:this.center.toArray()}}fromJSON(e){return this.radius=e.radius,this.center.fromArray(e.center),this}},zi=0,Bi=new J,Vi=new Ar,Hi=new q,Ui=new ni,Wi=new ni,Gi=new q,Ki=class e extends rn{constructor(){super(),this.isBufferGeometry=!0,Object.defineProperty(this,"id",{value:zi++}),this.uuid=ln(),this.name=``,this.type=`BufferGeometry`,this.index=null,this.indirect=null,this.indirectOffset=0,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(Vt(e)?Mi:Ai)(e,1):this.index=e,this}setIndirect(e,t=0){return this.indirect=e,this.indirectOffset=t,this}getIndirect(){return this.indirect}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 this.attributes[e]!==void 0}addGroup(e,t,n=0){this.groups.push({start:e,count:t,materialIndex:n})}clearGroups(){this.groups=[]}setDrawRange(e,t){this.drawRange.start=e,this.drawRange.count=t}applyMatrix4(e){let t=this.attributes.position;t!==void 0&&(t.applyMatrix4(e),t.needsUpdate=!0);let n=this.attributes.normal;if(n!==void 0){let t=new Fn().getNormalMatrix(e);n.applyNormalMatrix(t),n.needsUpdate=!0}let r=this.attributes.tangent;return r!==void 0&&(r.transformDirection(e),r.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}applyQuaternion(e){return Bi.makeRotationFromQuaternion(e),this.applyMatrix4(Bi),this}rotateX(e){return Bi.makeRotationX(e),this.applyMatrix4(Bi),this}rotateY(e){return Bi.makeRotationY(e),this.applyMatrix4(Bi),this}rotateZ(e){return Bi.makeRotationZ(e),this.applyMatrix4(Bi),this}translate(e,t,n){return Bi.makeTranslation(e,t,n),this.applyMatrix4(Bi),this}scale(e,t,n){return Bi.makeScale(e,t,n),this.applyMatrix4(Bi),this}lookAt(e){return Vi.lookAt(e),Vi.updateMatrix(),this.applyMatrix4(Vi.matrix),this}center(){return this.computeBoundingBox(),this.boundingBox.getCenter(Hi).negate(),this.translate(Hi.x,Hi.y,Hi.z),this}setFromPoints(e){let t=this.getAttribute(`position`);if(t===void 0){let t=[];for(let n=0,r=e.length;nt.count&&G(`BufferGeometry: Buffer size too small for points data. Use .dispose() and create a new geometry.`),t.needsUpdate=!0}return this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new ni);let e=this.attributes.position,t=this.morphAttributes.position;if(e&&e.isGLBufferAttribute){$t(`BufferGeometry.computeBoundingBox(): GLBufferAttribute requires a manual bounding box.`,this),this.boundingBox.set(new q(-1/0,-1/0,-1/0),new q(1/0,1/0,1/0));return}if(e!==void 0){if(this.boundingBox.setFromBufferAttribute(e),t)for(let e=0,n=t.length;e0&&(e.userData=this.userData),this.parameters!==void 0){let t=this.parameters;for(let n in t)t[n]!==void 0&&(e[n]=t[n]);return e}e.data={attributes:{}};let t=this.index;t!==null&&(e.data.index={type:t.array.constructor.name,array:Array.prototype.slice.call(t.array)});let n=this.attributes;for(let t in n){let r=n[t];e.data.attributes[t]=r.toJSON(e.data)}let r={},i=!1;for(let t in this.morphAttributes){let n=this.morphAttributes[t],a=[];for(let t=0,r=n.length;t0&&(r[t]=a,i=!0)}i&&(e.data.morphAttributes=r,e.data.morphTargetsRelative=this.morphTargetsRelative);let a=this.groups;a.length>0&&(e.data.groups=JSON.parse(JSON.stringify(a)));let o=this.boundingSphere;return o!==null&&(e.data.boundingSphere=o.toJSON()),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 n=e.index;n!==null&&this.setIndex(n.clone());let r=e.attributes;for(let e in r){let n=r[e];this.setAttribute(e,n.clone(t))}let i=e.morphAttributes;for(let e in i){let n=[],r=i[e];for(let e=0,i=r.length;e0!=e>0&&this.version++,this._alphaTest=e}onBeforeRender(){}onBeforeCompile(){}customProgramCacheKey(){return this.onBeforeCompile.toString()}setValues(e){if(e!==void 0)for(let t in e){let n=e[t];if(n===void 0){G(`Material: parameter '${t}' has value of undefined.`);continue}let r=this[t];if(r===void 0){G(`Material: '${t}' is not a property of THREE.${this.type}.`);continue}r&&r.isColor?r.set(n):r&&r.isVector3&&n&&n.isVector3?r.copy(n):this[t]=n}}toJSON(e){let t=e===void 0||typeof e==`string`;t&&(e={textures:{},images:{}});let n={metadata:{version:4.7,type:`Material`,generator:`Material.toJSON`}};n.uuid=this.uuid,n.type=this.type,this.name!==``&&(n.name=this.name),this.color&&this.color.isColor&&(n.color=this.color.getHex()),this.roughness!==void 0&&(n.roughness=this.roughness),this.metalness!==void 0&&(n.metalness=this.metalness),this.sheen!==void 0&&(n.sheen=this.sheen),this.sheenColor&&this.sheenColor.isColor&&(n.sheenColor=this.sheenColor.getHex()),this.sheenRoughness!==void 0&&(n.sheenRoughness=this.sheenRoughness),this.emissive&&this.emissive.isColor&&(n.emissive=this.emissive.getHex()),this.emissiveIntensity!==void 0&&this.emissiveIntensity!==1&&(n.emissiveIntensity=this.emissiveIntensity),this.specular&&this.specular.isColor&&(n.specular=this.specular.getHex()),this.specularIntensity!==void 0&&(n.specularIntensity=this.specularIntensity),this.specularColor&&this.specularColor.isColor&&(n.specularColor=this.specularColor.getHex()),this.shininess!==void 0&&(n.shininess=this.shininess),this.clearcoat!==void 0&&(n.clearcoat=this.clearcoat),this.clearcoatRoughness!==void 0&&(n.clearcoatRoughness=this.clearcoatRoughness),this.clearcoatMap&&this.clearcoatMap.isTexture&&(n.clearcoatMap=this.clearcoatMap.toJSON(e).uuid),this.clearcoatRoughnessMap&&this.clearcoatRoughnessMap.isTexture&&(n.clearcoatRoughnessMap=this.clearcoatRoughnessMap.toJSON(e).uuid),this.clearcoatNormalMap&&this.clearcoatNormalMap.isTexture&&(n.clearcoatNormalMap=this.clearcoatNormalMap.toJSON(e).uuid,n.clearcoatNormalScale=this.clearcoatNormalScale.toArray()),this.sheenColorMap&&this.sheenColorMap.isTexture&&(n.sheenColorMap=this.sheenColorMap.toJSON(e).uuid),this.sheenRoughnessMap&&this.sheenRoughnessMap.isTexture&&(n.sheenRoughnessMap=this.sheenRoughnessMap.toJSON(e).uuid),this.dispersion!==void 0&&(n.dispersion=this.dispersion),this.iridescence!==void 0&&(n.iridescence=this.iridescence),this.iridescenceIOR!==void 0&&(n.iridescenceIOR=this.iridescenceIOR),this.iridescenceThicknessRange!==void 0&&(n.iridescenceThicknessRange=this.iridescenceThicknessRange),this.iridescenceMap&&this.iridescenceMap.isTexture&&(n.iridescenceMap=this.iridescenceMap.toJSON(e).uuid),this.iridescenceThicknessMap&&this.iridescenceThicknessMap.isTexture&&(n.iridescenceThicknessMap=this.iridescenceThicknessMap.toJSON(e).uuid),this.anisotropy!==void 0&&(n.anisotropy=this.anisotropy),this.anisotropyRotation!==void 0&&(n.anisotropyRotation=this.anisotropyRotation),this.anisotropyMap&&this.anisotropyMap.isTexture&&(n.anisotropyMap=this.anisotropyMap.toJSON(e).uuid),this.map&&this.map.isTexture&&(n.map=this.map.toJSON(e).uuid),this.matcap&&this.matcap.isTexture&&(n.matcap=this.matcap.toJSON(e).uuid),this.alphaMap&&this.alphaMap.isTexture&&(n.alphaMap=this.alphaMap.toJSON(e).uuid),this.lightMap&&this.lightMap.isTexture&&(n.lightMap=this.lightMap.toJSON(e).uuid,n.lightMapIntensity=this.lightMapIntensity),this.aoMap&&this.aoMap.isTexture&&(n.aoMap=this.aoMap.toJSON(e).uuid,n.aoMapIntensity=this.aoMapIntensity),this.bumpMap&&this.bumpMap.isTexture&&(n.bumpMap=this.bumpMap.toJSON(e).uuid,n.bumpScale=this.bumpScale),this.normalMap&&this.normalMap.isTexture&&(n.normalMap=this.normalMap.toJSON(e).uuid,n.normalMapType=this.normalMapType,n.normalScale=this.normalScale.toArray()),this.displacementMap&&this.displacementMap.isTexture&&(n.displacementMap=this.displacementMap.toJSON(e).uuid,n.displacementScale=this.displacementScale,n.displacementBias=this.displacementBias),this.roughnessMap&&this.roughnessMap.isTexture&&(n.roughnessMap=this.roughnessMap.toJSON(e).uuid),this.metalnessMap&&this.metalnessMap.isTexture&&(n.metalnessMap=this.metalnessMap.toJSON(e).uuid),this.emissiveMap&&this.emissiveMap.isTexture&&(n.emissiveMap=this.emissiveMap.toJSON(e).uuid),this.specularMap&&this.specularMap.isTexture&&(n.specularMap=this.specularMap.toJSON(e).uuid),this.specularIntensityMap&&this.specularIntensityMap.isTexture&&(n.specularIntensityMap=this.specularIntensityMap.toJSON(e).uuid),this.specularColorMap&&this.specularColorMap.isTexture&&(n.specularColorMap=this.specularColorMap.toJSON(e).uuid),this.envMap&&this.envMap.isTexture&&(n.envMap=this.envMap.toJSON(e).uuid,this.combine!==void 0&&(n.combine=this.combine)),this.envMapRotation!==void 0&&(n.envMapRotation=this.envMapRotation.toArray()),this.envMapIntensity!==void 0&&(n.envMapIntensity=this.envMapIntensity),this.reflectivity!==void 0&&(n.reflectivity=this.reflectivity),this.refractionRatio!==void 0&&(n.refractionRatio=this.refractionRatio),this.gradientMap&&this.gradientMap.isTexture&&(n.gradientMap=this.gradientMap.toJSON(e).uuid),this.transmission!==void 0&&(n.transmission=this.transmission),this.transmissionMap&&this.transmissionMap.isTexture&&(n.transmissionMap=this.transmissionMap.toJSON(e).uuid),this.thickness!==void 0&&(n.thickness=this.thickness),this.thicknessMap&&this.thicknessMap.isTexture&&(n.thicknessMap=this.thicknessMap.toJSON(e).uuid),this.attenuationDistance!==void 0&&this.attenuationDistance!==1/0&&(n.attenuationDistance=this.attenuationDistance),this.attenuationColor!==void 0&&(n.attenuationColor=this.attenuationColor.getHex()),this.size!==void 0&&(n.size=this.size),this.shadowSide!==null&&(n.shadowSide=this.shadowSide),this.sizeAttenuation!==void 0&&(n.sizeAttenuation=this.sizeAttenuation),this.blending!==1&&(n.blending=this.blending),this.side!==0&&(n.side=this.side),this.vertexColors===!0&&(n.vertexColors=!0),this.opacity<1&&(n.opacity=this.opacity),this.transparent===!0&&(n.transparent=!0),this.blendSrc!==204&&(n.blendSrc=this.blendSrc),this.blendDst!==205&&(n.blendDst=this.blendDst),this.blendEquation!==100&&(n.blendEquation=this.blendEquation),this.blendSrcAlpha!==null&&(n.blendSrcAlpha=this.blendSrcAlpha),this.blendDstAlpha!==null&&(n.blendDstAlpha=this.blendDstAlpha),this.blendEquationAlpha!==null&&(n.blendEquationAlpha=this.blendEquationAlpha),this.blendColor&&this.blendColor.isColor&&(n.blendColor=this.blendColor.getHex()),this.blendAlpha!==0&&(n.blendAlpha=this.blendAlpha),this.depthFunc!==3&&(n.depthFunc=this.depthFunc),this.depthTest===!1&&(n.depthTest=this.depthTest),this.depthWrite===!1&&(n.depthWrite=this.depthWrite),this.colorWrite===!1&&(n.colorWrite=this.colorWrite),this.stencilWriteMask!==255&&(n.stencilWriteMask=this.stencilWriteMask),this.stencilFunc!==519&&(n.stencilFunc=this.stencilFunc),this.stencilRef!==0&&(n.stencilRef=this.stencilRef),this.stencilFuncMask!==255&&(n.stencilFuncMask=this.stencilFuncMask),this.stencilFail!==7680&&(n.stencilFail=this.stencilFail),this.stencilZFail!==7680&&(n.stencilZFail=this.stencilZFail),this.stencilZPass!==7680&&(n.stencilZPass=this.stencilZPass),this.stencilWrite===!0&&(n.stencilWrite=this.stencilWrite),this.rotation!==void 0&&this.rotation!==0&&(n.rotation=this.rotation),this.polygonOffset===!0&&(n.polygonOffset=!0),this.polygonOffsetFactor!==0&&(n.polygonOffsetFactor=this.polygonOffsetFactor),this.polygonOffsetUnits!==0&&(n.polygonOffsetUnits=this.polygonOffsetUnits),this.linewidth!==void 0&&this.linewidth!==1&&(n.linewidth=this.linewidth),this.dashSize!==void 0&&(n.dashSize=this.dashSize),this.gapSize!==void 0&&(n.gapSize=this.gapSize),this.scale!==void 0&&(n.scale=this.scale),this.dithering===!0&&(n.dithering=!0),this.alphaTest>0&&(n.alphaTest=this.alphaTest),this.alphaHash===!0&&(n.alphaHash=!0),this.alphaToCoverage===!0&&(n.alphaToCoverage=!0),this.premultipliedAlpha===!0&&(n.premultipliedAlpha=!0),this.forceSinglePass===!0&&(n.forceSinglePass=!0),this.allowOverride===!1&&(n.allowOverride=!1),this.wireframe===!0&&(n.wireframe=!0),this.wireframeLinewidth>1&&(n.wireframeLinewidth=this.wireframeLinewidth),this.wireframeLinecap!==`round`&&(n.wireframeLinecap=this.wireframeLinecap),this.wireframeLinejoin!==`round`&&(n.wireframeLinejoin=this.wireframeLinejoin),this.flatShading===!0&&(n.flatShading=!0),this.visible===!1&&(n.visible=!1),this.toneMapped===!1&&(n.toneMapped=!1),this.fog===!1&&(n.fog=!1),Object.keys(this.userData).length>0&&(n.userData=this.userData);function r(e){let t=[];for(let n in e){let r=e[n];delete r.metadata,t.push(r)}return t}if(t){let t=r(e.textures),i=r(e.images);t.length>0&&(n.textures=t),i.length>0&&(n.images=i)}return n}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.blendColor.copy(e.blendColor),this.blendAlpha=e.blendAlpha,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,n=null;if(t!==null){let e=t.length;n=Array(e);for(let r=0;r!==e;++r)n[r]=t[r].clone()}return this.clippingPlanes=n,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.alphaHash=e.alphaHash,this.alphaToCoverage=e.alphaToCoverage,this.premultipliedAlpha=e.premultipliedAlpha,this.forceSinglePass=e.forceSinglePass,this.allowOverride=e.allowOverride,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){e===!0&&this.version++}},Qi=class extends Zi{constructor(e){super(),this.isSpriteMaterial=!0,this.type=`SpriteMaterial`,this.color=new Y(16777215),this.map=null,this.alphaMap=null,this.rotation=0,this.sizeAttenuation=!0,this.transparent=!0,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.map=e.map,this.alphaMap=e.alphaMap,this.rotation=e.rotation,this.sizeAttenuation=e.sizeAttenuation,this.fog=e.fog,this}},$i,ea=new q,ta=new q,na=new q,ra=new K,ia=new K,aa=new J,oa=new q,sa=new q,ca=new q,la=new K,ua=new K,da=new K,fa=class extends Ar{constructor(e=new Qi){if(super(),this.isSprite=!0,this.type=`Sprite`,$i===void 0){$i=new Ki;let e=new qi(new Float32Array([-.5,-.5,0,0,0,.5,-.5,0,1,0,.5,.5,0,1,1,-.5,.5,0,0,1]),5);$i.setIndex([0,1,2,0,2,3]),$i.setAttribute(`position`,new Yi(e,3,0,!1)),$i.setAttribute(`uv`,new Yi(e,2,3,!1))}this.geometry=$i,this.material=e,this.center=new K(.5,.5),this.count=1}raycast(e,t){e.camera===null&&$t(`Sprite: "Raycaster.camera" needs to be set in order to raycast against sprites.`),ta.setFromMatrixScale(this.matrixWorld),aa.copy(e.camera.matrixWorld),this.modelViewMatrix.multiplyMatrices(e.camera.matrixWorldInverse,this.matrixWorld),na.setFromMatrixPosition(this.modelViewMatrix),e.camera.isPerspectiveCamera&&this.material.sizeAttenuation===!1&&ta.multiplyScalar(-na.z);let n=this.material.rotation,r,i;n!==0&&(i=Math.cos(n),r=Math.sin(n));let a=this.center;pa(oa.set(-.5,-.5,0),na,a,ta,r,i),pa(sa.set(.5,-.5,0),na,a,ta,r,i),pa(ca.set(.5,.5,0),na,a,ta,r,i),la.set(0,0),ua.set(1,0),da.set(1,1);let o=e.ray.intersectTriangle(oa,sa,ca,!1,ea);if(o===null&&(pa(sa.set(-.5,.5,0),na,a,ta,r,i),ua.set(0,1),o=e.ray.intersectTriangle(oa,ca,sa,!1,ea),o===null))return;let s=e.ray.origin.distanceTo(ea);se.far||t.push({distance:s,point:ea.clone(),uv:ti.getInterpolation(ea,oa,sa,ca,la,ua,da,new K),face:null,object:this})}copy(e,t){return super.copy(e,t),e.center!==void 0&&this.center.copy(e.center),this.material=e.material,this}};function pa(e,t,n,r,i,a){ra.subVectors(e,n).addScalar(.5).multiply(r),i===void 0?ia.copy(ra):(ia.x=a*ra.x-i*ra.y,ia.y=i*ra.x+a*ra.y),e.copy(t),e.x+=ia.x,e.y+=ia.y,e.applyMatrix4(aa)}var ma=new q,ha=new q,ga=class extends Ar{constructor(){super(),this.isLOD=!0,this._currentLevel=0,this.type=`LOD`,Object.defineProperties(this,{levels:{enumerable:!0,value:[]}}),this.autoUpdate=!0}copy(e){super.copy(e,!1);let t=e.levels;for(let e=0,n=t.length;e0){let n,r;for(n=1,r=t.length;n0){ma.setFromMatrixPosition(this.matrixWorld);let n=e.ray.origin.distanceTo(ma);this.getObjectForDistance(n).raycast(e,t)}}update(e){let t=this.levels;if(t.length>1){ma.setFromMatrixPosition(e.matrixWorld),ha.setFromMatrixPosition(this.matrixWorld);let n=ma.distanceTo(ha)/e.zoom;t[0].object.visible=!0;let r,i;for(r=1,i=t.length;r=e)t[r-1].object.visible=!1,t[r].object.visible=!0;else break}for(this._currentLevel=r-1;r0)if(u=a*s-o,d=a*o-s,p=i*l,u>=0)if(d>=-p)if(d<=p){let e=1/l;u*=e,d*=e,f=u*(u+a*d+2*o)+d*(a*u+d+2*s)+c}else d=i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;else d=-i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;else d<=-p?(u=Math.max(0,-(-a*i+o)),d=u>0?-i:Math.min(Math.max(-i,-s),i),f=-u*u+d*(d+2*s)+c):d<=p?(u=0,d=Math.min(Math.max(-i,-s),i),f=d*(d+2*s)+c):(u=Math.max(0,-(a*i+o)),d=u>0?i:Math.min(Math.max(-i,-s),i),f=-u*u+d*(d+2*s)+c);else d=a>0?-i:i,u=Math.max(0,-(a*d+o)),f=-u*u+d*(d+2*s)+c;return n&&n.copy(this.origin).addScaledVector(this.direction,u),r&&r.copy(va).addScaledVector(ya,d),f}intersectSphere(e,t){_a.subVectors(e.center,this.origin);let n=_a.dot(this.direction),r=_a.dot(_a)-n*n,i=e.radius*e.radius;if(r>i)return null;let a=Math.sqrt(i-r),o=n-a,s=n+a;return s<0?null:o<0?this.at(s,t):this.at(o,t)}intersectsSphere(e){return e.radius<0?!1:this.distanceSqToPoint(e.center)<=e.radius*e.radius}distanceToPlane(e){let t=e.normal.dot(this.direction);if(t===0)return e.distanceToPoint(this.origin)===0?0:null;let n=-(this.origin.dot(e.normal)+e.constant)/t;return n>=0?n:null}intersectPlane(e,t){let n=this.distanceToPlane(e);return n===null?null:this.at(n,t)}intersectsPlane(e){let t=e.distanceToPoint(this.origin);return t===0||e.normal.dot(this.direction)*t<0}intersectBox(e,t){let n,r,i,a,o,s,c=1/this.direction.x,l=1/this.direction.y,u=1/this.direction.z,d=this.origin;return c>=0?(n=(e.min.x-d.x)*c,r=(e.max.x-d.x)*c):(n=(e.max.x-d.x)*c,r=(e.min.x-d.x)*c),l>=0?(i=(e.min.y-d.y)*l,a=(e.max.y-d.y)*l):(i=(e.max.y-d.y)*l,a=(e.min.y-d.y)*l),n>a||i>r||((i>n||isNaN(n))&&(n=i),(a=0?(o=(e.min.z-d.z)*u,s=(e.max.z-d.z)*u):(o=(e.max.z-d.z)*u,s=(e.min.z-d.z)*u),n>s||o>r)||((o>n||n!==n)&&(n=o),(s=0?n:r,t)}intersectsBox(e){return this.intersectBox(e,_a)!==null}intersectTriangle(e,t,n,r,i){xa.subVectors(t,e),Sa.subVectors(n,e),Ca.crossVectors(xa,Sa);let a=this.direction.dot(Ca),o;if(a>0){if(r)return null;o=1}else if(a<0)o=-1,a=-a;else return null;ba.subVectors(this.origin,e);let s=o*this.direction.dot(Sa.crossVectors(ba,Sa));if(s<0)return null;let c=o*this.direction.dot(xa.cross(ba));if(c<0||s+c>a)return null;let l=-o*ba.dot(Ca);return l<0?null:this.at(l/a,i)}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)}},Ta=class extends Zi{constructor(e){super(),this.isMeshBasicMaterial=!0,this.type=`MeshBasicMaterial`,this.color=new Y(16777215),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.envMapRotation=new pr,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.envMapRotation.copy(e.envMapRotation),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}},Ea=new J,Da=new wa,Oa=new Ri,ka=new q,Aa=new q,ja=new q,Ma=new q,Na=new q,Pa=new q,Fa=new q,Ia=new q,La=class extends Ar{constructor(e=new Ki,t=new Ta){super(),this.isMesh=!0,this.type=`Mesh`,this.geometry=e,this.material=t,this.morphTargetDictionary=void 0,this.morphTargetInfluences=void 0,this.count=1,this.updateMorphTargets()}copy(e,t){return super.copy(e,t),e.morphTargetInfluences!==void 0&&(this.morphTargetInfluences=e.morphTargetInfluences.slice()),e.morphTargetDictionary!==void 0&&(this.morphTargetDictionary=Object.assign({},e.morphTargetDictionary)),this.material=Array.isArray(e.material)?e.material.slice():e.material,this.geometry=e.geometry,this}updateMorphTargets(){let e=this.geometry.morphAttributes,t=Object.keys(e);if(t.length>0){let n=e[t[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;e(e.far-e.near)**2))&&(Ea.copy(i).invert(),Da.copy(e.ray).applyMatrix4(Ea),!(n.boundingBox!==null&&Da.intersectsBox(n.boundingBox)===!1)&&this._computeIntersections(e,t,Da)))}_computeIntersections(e,t,n){let r,i=this.geometry,a=this.material,o=i.index,s=i.attributes.position,c=i.attributes.uv,l=i.attributes.uv1,u=i.attributes.normal,d=i.groups,f=i.drawRange;if(o!==null)if(Array.isArray(a))for(let i=0,s=d.length;in.far?null:{distance:l,point:Ia.clone(),object:e}}function za(e,t,n,r,i,a,o,s,c,l){e.getVertexPosition(s,Aa),e.getVertexPosition(c,ja),e.getVertexPosition(l,Ma);let u=Ra(e,t,n,r,Aa,ja,Ma,Fa);if(u){let e=new q;ti.getBarycoord(Fa,Aa,ja,Ma,e),i&&(u.uv=ti.getInterpolatedAttribute(i,s,c,l,e,new K)),a&&(u.uv1=ti.getInterpolatedAttribute(a,s,c,l,e,new K)),o&&(u.normal=ti.getInterpolatedAttribute(o,s,c,l,e,new q),u.normal.dot(r.direction)>0&&u.normal.multiplyScalar(-1));let t={a:s,b:c,c:l,normal:new q,materialIndex:0};ti.getNormal(Aa,ja,Ma,t.normal),u.face=t,u.barycoord=e}return u}var Ba=new Zn,Va=new Zn,Ha=new Zn,Ua=new Zn,Wa=new J,Ga=new q,Ka=new Ri,qa=new J,Ja=new wa,Ya=class extends La{constructor(e,t){super(e,t),this.isSkinnedMesh=!0,this.type=`SkinnedMesh`,this.bindMode=S,this.bindMatrix=new J,this.bindMatrixInverse=new J,this.boundingBox=null,this.boundingSphere=null}computeBoundingBox(){let e=this.geometry;this.boundingBox===null&&(this.boundingBox=new ni),this.boundingBox.makeEmpty();let t=e.getAttribute(`position`);for(let e=0;e1)?null:t.copy(e.start).addScaledVector(r,a)}intersectsLine(e){let t=this.distanceToPoint(e.start),n=this.distanceToPoint(e.end);return t<0&&n>0||n<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 n=t||po.getNormalMatrix(e),r=this.coplanarPoint(uo).applyMatrix4(e),i=this.normal.applyMatrix3(n).normalize();return this.constant=-r.dot(i),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)}},ho=new Ri,go=new K(.5,.5),_o=new q,vo=class{constructor(e=new mo,t=new mo,n=new mo,r=new mo,i=new mo,a=new mo){this.planes=[e,t,n,r,i,a]}set(e,t,n,r,i,a){let o=this.planes;return o[0].copy(e),o[1].copy(t),o[2].copy(n),o[3].copy(r),o[4].copy(i),o[5].copy(a),this}copy(e){let t=this.planes;for(let n=0;n<6;n++)t[n].copy(e.planes[n]);return this}setFromProjectionMatrix(e,t=Ft,n=!1){let r=this.planes,i=e.elements,a=i[0],o=i[1],s=i[2],c=i[3],l=i[4],u=i[5],d=i[6],f=i[7],p=i[8],m=i[9],h=i[10],g=i[11],_=i[12],v=i[13],y=i[14],b=i[15];if(r[0].setComponents(c-a,f-l,g-p,b-_).normalize(),r[1].setComponents(c+a,f+l,g+p,b+_).normalize(),r[2].setComponents(c+o,f+u,g+m,b+v).normalize(),r[3].setComponents(c-o,f-u,g-m,b-v).normalize(),n)r[4].setComponents(s,d,h,y).normalize(),r[5].setComponents(c-s,f-d,g-h,b-y).normalize();else if(r[4].setComponents(c-s,f-d,g-h,b-y).normalize(),t===2e3)r[5].setComponents(c+s,f+d,g+h,b+y).normalize();else if(t===2001)r[5].setComponents(s,d,h,y).normalize();else throw Error(`THREE.Frustum.setFromProjectionMatrix(): Invalid coordinate system: `+t);return this}intersectsObject(e){if(e.boundingSphere!==void 0)e.boundingSphere===null&&e.computeBoundingSphere(),ho.copy(e.boundingSphere).applyMatrix4(e.matrixWorld);else{let t=e.geometry;t.boundingSphere===null&&t.computeBoundingSphere(),ho.copy(t.boundingSphere).applyMatrix4(e.matrixWorld)}return this.intersectsSphere(ho)}intersectsSprite(e){return ho.center.set(0,0,0),ho.radius=.7071067811865476+go.distanceTo(e.center),ho.applyMatrix4(e.matrixWorld),this.intersectsSphere(ho)}intersectsSphere(e){let t=this.planes,n=e.center,r=-e.radius;for(let e=0;e<6;e++)if(t[e].distanceToPoint(n)0?e.max.x:e.min.x,_o.y=r.normal.y>0?e.max.y:e.min.y,_o.z=r.normal.z>0?e.max.z:e.min.z,r.distanceToPoint(_o)<0)return!1}return!0}containsPoint(e){let t=this.planes;for(let n=0;n<6;n++)if(t[n].distanceToPoint(e)<0)return!1;return!0}clone(){return new this.constructor().copy(this)}},yo=new J,bo=new vo,xo=class e{constructor(){this.coordinateSystem=Ft}intersectsObject(e,t){if(!t.isArrayCamera||t.cameras.length===0)return!1;for(let n=0;n=i.length&&i.push({start:-1,count:-1,z:-1,index:-1});let o=i[this.index];a.push(o),this.index++,o.start=e,o.count=t,o.z=n,o.index=r}reset(){this.list.length=0,this.index=0}},Eo=new J,Do=new Y(1,1,1),Oo=new vo,ko=new xo,Ao=new ni,jo=new Ri,Mo=new q,No=new q,Po=new q,Fo=new To,Io=new La,Lo=[];function Ro(e,t,n=0){let r=t.itemSize;if(e.isInterleavedBufferAttribute||e.array.constructor!==t.array.constructor){let i=e.count;for(let a=0;a65535?new Uint32Array(r):new Uint16Array(r);t.setIndex(new Ti(e,1))}this._geometryInitialized=!0}}_validateGeometry(e){let t=this.geometry;if(!!e.getIndex()!=!!t.getIndex())throw Error(`THREE.BatchedMesh: All geometries must consistently have "index".`);for(let n in t.attributes){if(!e.hasAttribute(n))throw Error(`THREE.BatchedMesh: Added geometry missing "${n}". All geometries must have consistent attributes.`);let r=e.getAttribute(n),i=t.getAttribute(n);if(r.itemSize!==i.itemSize||r.normalized!==i.normalized)throw Error(`THREE.BatchedMesh: All attributes must have a consistent itemSize and normalized value.`)}}validateInstanceId(e){let t=this._instanceInfo;if(e<0||e>=t.length||t[e].active===!1)throw Error(`THREE.BatchedMesh: Invalid instanceId ${e}. Instance is either out of range or has been deleted.`)}validateGeometryId(e){let t=this._geometryInfo;if(e<0||e>=t.length||t[e].active===!1)throw Error(`THREE.BatchedMesh: Invalid geometryId ${e}. Geometry is either out of range or has been deleted.`)}setCustomSort(e){return this.customSort=e,this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new ni);let e=this.boundingBox,t=this._instanceInfo;e.makeEmpty();for(let n=0,r=t.length;n=this.maxInstanceCount&&this._availableInstanceIds.length===0)throw Error(`THREE.BatchedMesh: Maximum item count reached.`);let t={visible:!0,active:!0,geometryIndex:e},n=null;this._availableInstanceIds.length>0?(this._availableInstanceIds.sort(So),n=this._availableInstanceIds.shift(),this._instanceInfo[n]=t):(n=this._instanceInfo.length,this._instanceInfo.push(t));let r=this._matricesTexture;Eo.identity().toArray(r.image.data,n*16),r.needsUpdate=!0;let i=this._colorsTexture;return i&&(Do.toArray(i.image.data,n*4),i.needsUpdate=!0),this._visibilityChanged=!0,n}addGeometry(e,t=-1,n=-1){this._initializeGeometry(e),this._validateGeometry(e);let r={vertexStart:-1,vertexCount:-1,reservedVertexCount:-1,indexStart:-1,indexCount:-1,reservedIndexCount:-1,start:-1,count:-1,boundingBox:null,boundingSphere:null,active:!0},i=this._geometryInfo;r.vertexStart=this._nextVertexStart,r.reservedVertexCount=t===-1?e.getAttribute(`position`).count:t;let a=e.getIndex();if(a!==null&&(r.indexStart=this._nextIndexStart,r.reservedIndexCount=n===-1?a.count:n),r.indexStart!==-1&&r.indexStart+r.reservedIndexCount>this._maxIndexCount||r.vertexStart+r.reservedVertexCount>this._maxVertexCount)throw Error(`THREE.BatchedMesh: Reserved space request exceeds the maximum buffer size.`);let o;return this._availableGeometryIds.length>0?(this._availableGeometryIds.sort(So),o=this._availableGeometryIds.shift(),i[o]=r):(o=this._geometryCount,this._geometryCount++,i.push(r)),this.setGeometryAt(o,e),this._nextIndexStart=r.indexStart+r.reservedIndexCount,this._nextVertexStart=r.vertexStart+r.reservedVertexCount,o}setGeometryAt(e,t){if(e>=this._geometryCount)throw Error(`THREE.BatchedMesh: Maximum geometry count reached.`);this._validateGeometry(t);let n=this.geometry,r=n.getIndex()!==null,i=n.getIndex(),a=t.getIndex(),o=this._geometryInfo[e];if(r&&a.count>o.reservedIndexCount||t.attributes.position.count>o.reservedVertexCount)throw Error(`THREE.BatchedMesh: Reserved space not large enough for provided geometry.`);let s=o.vertexStart,c=o.reservedVertexCount;o.vertexCount=t.getAttribute(`position`).count;for(let e in n.attributes){let r=t.getAttribute(e),i=n.getAttribute(e);Ro(r,i,s);let a=r.itemSize;for(let e=r.count,t=c;e=t.length||t[e].active===!1)return this;let n=this._instanceInfo;for(let t=0,r=n.length;tt).sort((e,t)=>n[e].vertexStart-n[t].vertexStart),i=this.geometry;for(let a=0,o=n.length;a=this._geometryCount)return null;let n=this.geometry,r=this._geometryInfo[e];if(r.boundingBox===null){let e=new ni,t=n.index,i=n.attributes.position;for(let n=r.start,a=r.start+r.count;n=this._geometryCount)return null;let n=this.geometry,r=this._geometryInfo[e];if(r.boundingSphere===null){let t=new Ri;this.getBoundingBoxAt(e,Ao),Ao.getCenter(t.center);let i=n.index,a=n.attributes.position,o=0;for(let e=r.start,n=r.start+r.count;ee.active);if(Math.max(...n.map(e=>e.vertexStart+e.reservedVertexCount))>e)throw Error(`BatchedMesh: Geometry vertex values are being used outside the range ${t}. Cannot shrink further.`);if(this.geometry.index&&Math.max(...n.map(e=>e.indexStart+e.reservedIndexCount))>t)throw Error(`BatchedMesh: Geometry index values are being used outside the range ${t}. Cannot shrink further.`);let r=this.geometry;r.dispose(),this._maxVertexCount=e,this._maxIndexCount=t,this._geometryInitialized&&(this._geometryInitialized=!1,this.geometry=new Ki,this._initializeGeometry(r));let i=this.geometry;r.index&&zo(r.index.array,i.index.array);for(let e in r.attributes)zo(r.attributes[e].array,i.attributes[e].array)}raycast(e,t){let n=this._instanceInfo,r=this._geometryInfo,i=this.matrixWorld,a=this.geometry;Io.material=this.material,Io.geometry.index=a.index,Io.geometry.attributes=a.attributes,Io.geometry.boundingBox===null&&(Io.geometry.boundingBox=new ni),Io.geometry.boundingSphere===null&&(Io.geometry.boundingSphere=new Ri);for(let a=0,o=n.length;a({...e,boundingBox:e.boundingBox===null?null:e.boundingBox.clone(),boundingSphere:e.boundingSphere===null?null:e.boundingSphere.clone()})),this._instanceInfo=e._instanceInfo.map(e=>({...e})),this._availableInstanceIds=e._availableInstanceIds.slice(),this._availableGeometryIds=e._availableGeometryIds.slice(),this._nextIndexStart=e._nextIndexStart,this._nextVertexStart=e._nextVertexStart,this._geometryCount=e._geometryCount,this._maxInstanceCount=e._maxInstanceCount,this._maxVertexCount=e._maxVertexCount,this._maxIndexCount=e._maxIndexCount,this._geometryInitialized=e._geometryInitialized,this._multiDrawCounts=e._multiDrawCounts.slice(),this._multiDrawStarts=e._multiDrawStarts.slice(),this._indirectTexture=e._indirectTexture.clone(),this._indirectTexture.image.data=this._indirectTexture.image.data.slice(),this._matricesTexture=e._matricesTexture.clone(),this._matricesTexture.image.data=this._matricesTexture.image.data.slice(),this._colorsTexture!==null&&(this._colorsTexture=e._colorsTexture.clone(),this._colorsTexture.image.data=this._colorsTexture.image.data.slice()),this}dispose(){this.geometry.dispose(),this._matricesTexture.dispose(),this._matricesTexture=null,this._indirectTexture.dispose(),this._indirectTexture=null,this._colorsTexture!==null&&(this._colorsTexture.dispose(),this._colorsTexture=null)}onBeforeRender(e,t,n,r,i){if(!this._visibilityChanged&&!this.perObjectFrustumCulled&&!this.sortObjects)return;let a=r.getIndex(),o=a===null?1:a.array.BYTES_PER_ELEMENT,s=1;i.wireframe&&(s=2,o=r.attributes.position.count>65535?4:2);let c=this._instanceInfo,l=this._multiDrawStarts,u=this._multiDrawCounts,d=this._geometryInfo,f=this.perObjectFrustumCulled,p=this._indirectTexture,m=p.image.data,h=n.isArrayCamera?ko:Oo;f&&!n.isArrayCamera&&(Eo.multiplyMatrices(n.projectionMatrix,n.matrixWorldInverse).multiply(this.matrixWorld),Oo.setFromProjectionMatrix(Eo,n.coordinateSystem,n.reversedDepth));let g=0;if(this.sortObjects){Eo.copy(this.matrixWorld).invert(),Mo.setFromMatrixPosition(n.matrixWorld).applyMatrix4(Eo),No.set(0,0,-1).transformDirection(n.matrixWorld).transformDirection(Eo);for(let e=0,t=c.length;e0){let n=e[t[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;er)return;qo.applyMatrix4(e.matrixWorld);let c=t.ray.origin.distanceTo(qo);if(!(ct.far))return{distance:c,point:Jo.clone().applyMatrix4(e.matrixWorld),index:o,face:null,faceIndex:null,barycoord:null,object:e}}var Zo=new q,Qo=new q,$o=class extends Yo{constructor(e,t){super(e,t),this.isLineSegments=!0,this.type=`LineSegments`}computeLineDistances(){let e=this.geometry;if(e.index===null){let t=e.attributes.position,n=[];for(let e=0,r=t.count;e0){let n=e[t[0]];if(n!==void 0){this.morphTargetInfluences=[],this.morphTargetDictionary={};for(let e=0,t=n.length;ei.far)return;a.push({distance:c,distanceToRay:Math.sqrt(s),point:n,index:t,face:null,faceIndex:null,barycoord:null,object:o})}}var cs=class extends Xn{constructor(e,t,n,r,i=M,a=M,o,s,c){super(e,t,n,r,i,a,o,s,c),this.isVideoTexture=!0,this.generateMipmaps=!1,this._requestVideoFrameCallbackId=0;let l=this;function u(){l.needsUpdate=!0,l._requestVideoFrameCallbackId=e.requestVideoFrameCallback(u)}`requestVideoFrameCallback`in e&&(this._requestVideoFrameCallbackId=e.requestVideoFrameCallback(u))}clone(){return new this.constructor(this.image).copy(this)}update(){let e=this.image;!(`requestVideoFrameCallback`in e)&&e.readyState>=e.HAVE_CURRENT_DATA&&(this.needsUpdate=!0)}dispose(){this._requestVideoFrameCallbackId!==0&&(this.source.data.cancelVideoFrameCallback(this._requestVideoFrameCallbackId),this._requestVideoFrameCallbackId=0),super.dispose()}},ls=class extends cs{constructor(e,t,n,r,i,a,o,s){super({},e,t,n,r,i,a,o,s),this.isVideoFrameTexture=!0}update(){}clone(){return new this.constructor().copy(this)}setFrame(e){this.image=e,this.needsUpdate=!0}},us=class extends Xn{constructor(e,t){super({width:e,height:t}),this.isFramebufferTexture=!0,this.magFilter=D,this.minFilter=D,this.generateMipmaps=!1,this.needsUpdate=!0}},ds=class extends Xn{constructor(e,t,n,r,i,a,o,s,c,l,u,d){super(null,a,o,s,c,l,r,i,u,d),this.isCompressedTexture=!0,this.image={width:t,height:n},this.mipmaps=e,this.flipY=!1,this.generateMipmaps=!1}},fs=class extends ds{constructor(e,t,n,r,i,a){super(e,t,n,i,a),this.isCompressedArrayTexture=!0,this.image.depth=r,this.wrapR=T,this.layerUpdates=new Set}addLayerUpdate(e){this.layerUpdates.add(e)}clearLayerUpdates(){this.layerUpdates.clear()}},ps=class extends ds{constructor(e,t,n){super(void 0,e[0].width,e[0].height,t,n,301),this.isCompressedCubeTexture=!0,this.isCubeTexture=!0,this.image=e}},ms=class extends Xn{constructor(e=[],t=301,n,r,i,a,o,s,c,l){super(e,t,n,r,i,a,o,s,c,l),this.isCubeTexture=!0,this.flipY=!1}get images(){return this.image}set images(e){this.image=e}},hs=class extends Xn{constructor(e,t,n,r,i,a,o,s,c){super(e,t,n,r,i,a,o,s,c),this.isCanvasTexture=!0,this.needsUpdate=!0}},gs=class extends Xn{constructor(e,t,n,r,i,a,o,s,c){super(e,t,n,r,i,a,o,s,c),this.isHTMLTexture=!0,this.generateMipmaps=!1,this.needsUpdate=!0;let l=e?e.parentNode:null;l!==null&&`requestPaint`in l&&(l.onpaint=()=>{this.needsUpdate=!0},l.requestPaint())}dispose(){let e=this.image?this.image.parentNode:null;e!==null&&`onpaint`in e&&(e.onpaint=null),super.dispose()}},_s=class extends Xn{constructor(e,t,n=B,r,i,a,o=D,s=D,c,l=ue,u=1){if(l!==1026&&l!==1027)throw Error(`DepthTexture format must be either THREE.DepthFormat or THREE.DepthStencilFormat`);super({width:e,height:t,depth:u},r,i,a,o,s,l,n,c),this.isDepthTexture=!0,this.flipY=!1,this.generateMipmaps=!1,this.compareFunction=null}copy(e){return super.copy(e),this.source=new Kn(Object.assign({},e.image)),this.compareFunction=e.compareFunction,this}toJSON(e){let t=super.toJSON(e);return this.compareFunction!==null&&(t.compareFunction=this.compareFunction),t}},vs=class extends _s{constructor(e,t=B,n=301,r,i,a=D,o=D,s,c=ue){let l={width:e,height:e,depth:1},u=[l,l,l,l,l,l];super(e,e,t,n,r,i,a,o,s,c),this.image=u,this.isCubeDepthTexture=!0,this.isCubeTexture=!0}get images(){return this.image}set images(e){this.image=e}},ys=class extends Xn{constructor(e=null){super(),this.sourceTexture=e,this.isExternalTexture=!0}copy(e){return super.copy(e),this.sourceTexture=e.sourceTexture,this}},bs=class e extends Ki{constructor(e=1,t=1,n=1,r=1,i=1,a=1){super(),this.type=`BoxGeometry`,this.parameters={width:e,height:t,depth:n,widthSegments:r,heightSegments:i,depthSegments:a};let o=this;r=Math.floor(r),i=Math.floor(i),a=Math.floor(a);let s=[],c=[],l=[],u=[],d=0,f=0;p(`z`,`y`,`x`,-1,-1,n,t,e,a,i,0),p(`z`,`y`,`x`,1,-1,n,t,-e,a,i,1),p(`x`,`z`,`y`,1,1,e,n,t,r,a,2),p(`x`,`z`,`y`,1,-1,e,n,-t,r,a,3),p(`x`,`y`,`z`,1,-1,e,t,n,r,i,4),p(`x`,`y`,`z`,-1,-1,e,t,-n,r,i,5),this.setIndex(s),this.setAttribute(`position`,new Pi(c,3)),this.setAttribute(`normal`,new Pi(l,3)),this.setAttribute(`uv`,new Pi(u,2));function p(e,t,n,r,i,a,p,m,h,g,_){let v=a/h,y=p/g,b=a/2,x=p/2,S=m/2,C=h+1,w=g+1,T=0,E=0,D=new q;for(let a=0;a0?1:-1,l.push(D.x,D.y,D.z),u.push(s/h),u.push(1-a/g),T+=1}for(let e=0;e0){let e=(_-1)*m;for(let t=0;t0&&v(!0),t>0&&v(!1)),this.setIndex(l),this.setAttribute(`position`,new Pi(u,3)),this.setAttribute(`normal`,new Pi(d,3)),this.setAttribute(`uv`,new Pi(f,2));function _(){let a=new q,_=new q,v=0,y=(t-e)/n;for(let c=0;c<=i;c++){let l=[],g=c/i,v=g*(t-e)+e;for(let e=0;e<=r;e++){let t=e/r,i=t*s+o,c=Math.sin(i),m=Math.cos(i);_.x=v*c,_.y=-g*n+h,_.z=v*m,u.push(_.x,_.y,_.z),a.set(c,y,m).normalize(),d.push(a.x,a.y,a.z),f.push(t,1-g),l.push(p++)}m.push(l)}for(let n=0;n0||r!==0)&&(l.push(a,o,c),v+=3),(t>0||r!==i-1)&&(l.push(o,s,c),v+=3)}c.addGroup(g,v,0),g+=v}function v(n){let i=p,a=new K,m=new q,_=0,v=n===!0?e:t,y=n===!0?1:-1;for(let e=1;e<=r;e++)u.push(0,h*y,0),d.push(0,y,0),f.push(.5,.5),p++;let b=p;for(let e=0;e<=r;e++){let t=e/r*s+o,n=Math.cos(t),i=Math.sin(t);m.x=v*i,m.y=h*y,m.z=v*n,u.push(m.x,m.y,m.z),d.push(0,y,0),a.x=n*.5+.5,a.y=i*.5*y+.5,f.push(a.x,a.y),p++}for(let e=0;e.9&&Math.min(t,n,r)<.1&&(t<.2&&(a[e+0]+=1),n<.2&&(a[e+2]+=1),r<.2&&(a[e+4]+=1))}}function d(e){i.push(e.x,e.y,e.z)}function f(t,n){let r=t*3;n.x=e[r+0],n.y=e[r+1],n.z=e[r+2]}function p(){let e=new q,t=new q,n=new q,r=new q,o=new K,s=new K,c=new K;for(let l=0,u=0;l0)s=r-1;else{s=r;break}if(r=s,n[r]===a)return r/(i-1);let l=n[r],u=n[r+1]-l,d=(a-l)/u;return(r+d)/(i-1)}getTangent(e,t){let n=1e-4,r=e-n,i=e+n;r<0&&(r=0),i>1&&(i=1);let a=this.getPoint(r),o=this.getPoint(i),s=t||(a.isVector2?new K:new q);return s.copy(o).sub(a).normalize(),s}getTangentAt(e,t){let n=this.getUtoTmapping(e);return this.getTangent(n,t)}computeFrenetFrames(e,t=!1){let n=new q,r=[],i=[],a=[],o=new q,s=new J;for(let t=0;t<=e;t++){let n=t/e;r[t]=this.getTangentAt(n,new q)}i[0]=new q,a[0]=new q;let c=Number.MAX_VALUE,l=Math.abs(r[0].x),u=Math.abs(r[0].y),d=Math.abs(r[0].z);l<=c&&(c=l,n.set(1,0,0)),u<=c&&(c=u,n.set(0,1,0)),d<=c&&n.set(0,0,1),o.crossVectors(r[0],n).normalize(),i[0].crossVectors(r[0],o),a[0].crossVectors(r[0],i[0]);for(let t=1;t<=e;t++){if(i[t]=i[t-1].clone(),a[t]=a[t-1].clone(),o.crossVectors(r[t-1],r[t]),o.length()>2**-52){o.normalize();let e=Math.acos(un(r[t-1].dot(r[t]),-1,1));i[t].applyMatrix4(s.makeRotationAxis(o,e))}a[t].crossVectors(r[t],i[t])}if(t===!0){let t=Math.acos(un(i[0].dot(i[e]),-1,1));t/=e,r[0].dot(o.crossVectors(i[0],i[e]))>0&&(t=-t);for(let n=1;n<=e;n++)i[n].applyMatrix4(s.makeRotationAxis(r[n],t*n)),a[n].crossVectors(r[n],i[n])}return{tangents:r,normals:i,binormals:a}}clone(){return new this.constructor().copy(this)}copy(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}toJSON(){let e={metadata:{version:4.7,type:`Curve`,generator:`Curve.toJSON`}};return e.arcLengthDivisions=this.arcLengthDivisions,e.type=this.type,e}fromJSON(e){return this.arcLengthDivisions=e.arcLengthDivisions,this}},Ns=class extends Ms{constructor(e=0,t=0,n=1,r=1,i=0,a=Math.PI*2,o=!1,s=0){super(),this.isEllipseCurve=!0,this.type=`EllipseCurve`,this.aX=e,this.aY=t,this.xRadius=n,this.yRadius=r,this.aStartAngle=i,this.aEndAngle=a,this.aClockwise=o,this.aRotation=s}getPoint(e,t=new K){let n=t,r=Math.PI*2,i=this.aEndAngle-this.aStartAngle,a=Math.abs(i)<2**-52;for(;i<0;)i+=r;for(;i>r;)i-=r;i<2**-52&&(i=a?0:r),this.aClockwise===!0&&!a&&(i===r?i=-r:i-=r);let o=this.aStartAngle+e*i,s=this.aX+this.xRadius*Math.cos(o),c=this.aY+this.yRadius*Math.sin(o);if(this.aRotation!==0){let e=Math.cos(this.aRotation),t=Math.sin(this.aRotation),n=s-this.aX,r=c-this.aY;s=n*e-r*t+this.aX,c=n*t+r*e+this.aY}return n.set(s,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}},Ps=class extends Ns{constructor(e,t,n,r,i,a){super(e,t,n,n,r,i,a),this.isArcCurve=!0,this.type=`ArcCurve`}};function Fs(){let e=0,t=0,n=0,r=0;function i(i,a,o,s){e=i,t=o,n=-3*i+3*a-2*o-s,r=2*i-2*a+o+s}return{initCatmullRom:function(e,t,n,r,a){i(t,n,a*(n-e),a*(r-t))},initNonuniformCatmullRom:function(e,t,n,r,a,o,s){let c=(t-e)/a-(n-e)/(a+o)+(n-t)/o,l=(n-t)/o-(r-t)/(o+s)+(r-n)/s;c*=o,l*=o,i(t,n,c,l)},calc:function(i){let a=i*i,o=a*i;return e+t*i+n*a+r*o}}}var Is=new q,Ls=new q,Rs=new Fs,zs=new Fs,Bs=new Fs,Vs=class extends Ms{constructor(e=[],t=!1,n=`centripetal`,r=.5){super(),this.isCatmullRomCurve3=!0,this.type=`CatmullRomCurve3`,this.points=e,this.closed=t,this.curveType=n,this.tension=r}getPoint(e,t=new q){let n=t,r=this.points,i=r.length,a=(i-+!this.closed)*e,o=Math.floor(a),s=a-o;this.closed?o+=o>0?0:(Math.floor(Math.abs(o)/i)+1)*i:s===0&&o===i-1&&(o=i-2,s=1);let c,l;this.closed||o>0?c=r[(o-1)%i]:(Ls.subVectors(r[0],r[1]).add(r[0]),c=Ls);let u=r[o%i],d=r[(o+1)%i];if(this.closed||o+2r.length-2?r.length-1:a+1],u=r[a>r.length-3?r.length-1:a+2];return n.set(Hs(o,s.x,c.x,l.x,u.x),Hs(o,s.y,c.y,l.y,u.y)),n}copy(e){super.copy(e),this.points=[];for(let t=0,n=e.points.length;t=n){let e=r[i]-n,a=this.curves[i],o=a.getLength(),s=o===0?0:1-e/o;return a.getPointAt(s,t)}i++}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 n=0,r=this.curves.length;n1&&!t[t.length-1].equals(t[0])&&t.push(t[0]),t}copy(e){super.copy(e),this.curves=[];for(let t=0,n=e.curves.length;t0){let e=c.getPoint(0);e.equals(this.currentPoint)||this.lineTo(e.x,e.y)}this.curves.push(c);let l=c.getPoint(1);return this.currentPoint.copy(l),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}},cc=class extends sc{constructor(e){super(e),this.uuid=ln(),this.type=`Shape`,this.holes=[]}getPointsHoles(e){let t=[];for(let n=0,r=this.holes.length;n80*n){s=e[0],c=e[1];let t=s,r=c;for(let a=n;at&&(t=n),i>r&&(r=i)}l=Math.max(t-s,r-c),l=l===0?0:32767/l}return fc(a,o,n,s,c,l,0),o}function uc(e,t,n,r,i){let a;if(i===Vc(e,t,n,r)>0)for(let i=t;i=t;i-=r)a=Rc(i/r|0,e[i],e[i+1],a);return a&&Ac(a,a.next)&&(zc(a),a=a.next),a}function dc(e,t){if(!e)return e;t||=e;let n=e,r;do if(r=!1,!n.steiner&&(Ac(n,n.next)||kc(n.prev,n,n.next)===0)){if(zc(n),n=t=n.prev,n===n.next)break;r=!0}else n=n.next;while(r||n!==t);return t}function fc(e,t,n,r,i,a,o){if(!e)return;!o&&a&&Sc(e,r,i,a);let s=e;for(;e.prev!==e.next;){let c=e.prev,l=e.next;if(a?mc(e,r,i,a):pc(e)){t.push(c.i,e.i,l.i),zc(e),e=l.next,s=l.next;continue}if(e=l,e===s){o?o===1?(e=hc(dc(e),t),fc(e,t,n,r,i,a,2)):o===2&&gc(e,t,n,r,i,a):fc(dc(e),t,n,r,i,a,1);break}}}function pc(e){let t=e.prev,n=e,r=e.next;if(kc(t,n,r)>=0)return!1;let i=t.x,a=n.x,o=r.x,s=t.y,c=n.y,l=r.y,u=Math.min(i,a,o),d=Math.min(s,c,l),f=Math.max(i,a,o),p=Math.max(s,c,l),m=r.next;for(;m!==t;){if(m.x>=u&&m.x<=f&&m.y>=d&&m.y<=p&&Dc(i,s,a,c,o,l,m.x,m.y)&&kc(m.prev,m,m.next)>=0)return!1;m=m.next}return!0}function mc(e,t,n,r){let i=e.prev,a=e,o=e.next;if(kc(i,a,o)>=0)return!1;let s=i.x,c=a.x,l=o.x,u=i.y,d=a.y,f=o.y,p=Math.min(s,c,l),m=Math.min(u,d,f),h=Math.max(s,c,l),g=Math.max(u,d,f),_=wc(p,m,t,n,r),v=wc(h,g,t,n,r),y=e.prevZ,b=e.nextZ;for(;y&&y.z>=_&&b&&b.z<=v;){if(y.x>=p&&y.x<=h&&y.y>=m&&y.y<=g&&y!==i&&y!==o&&Dc(s,u,c,d,l,f,y.x,y.y)&&kc(y.prev,y,y.next)>=0||(y=y.prevZ,b.x>=p&&b.x<=h&&b.y>=m&&b.y<=g&&b!==i&&b!==o&&Dc(s,u,c,d,l,f,b.x,b.y)&&kc(b.prev,b,b.next)>=0))return!1;b=b.nextZ}for(;y&&y.z>=_;){if(y.x>=p&&y.x<=h&&y.y>=m&&y.y<=g&&y!==i&&y!==o&&Dc(s,u,c,d,l,f,y.x,y.y)&&kc(y.prev,y,y.next)>=0)return!1;y=y.prevZ}for(;b&&b.z<=v;){if(b.x>=p&&b.x<=h&&b.y>=m&&b.y<=g&&b!==i&&b!==o&&Dc(s,u,c,d,l,f,b.x,b.y)&&kc(b.prev,b,b.next)>=0)return!1;b=b.nextZ}return!0}function hc(e,t){let n=e;do{let r=n.prev,i=n.next.next;!Ac(r,i)&&jc(r,n,n.next,i)&&Fc(r,i)&&Fc(i,r)&&(t.push(r.i,n.i,i.i),zc(n),zc(n.next),n=e=i),n=n.next}while(n!==e);return dc(n)}function gc(e,t,n,r,i,a){let o=e;do{let e=o.next.next;for(;e!==o.prev;){if(o.i!==e.i&&Oc(o,e)){let s=Lc(o,e);o=dc(o,o.next),s=dc(s,s.next),fc(o,t,n,r,i,a,0),fc(s,t,n,r,i,a,0);return}e=e.next}o=o.next}while(o!==e)}function _c(e,t,n,r){let i=[];for(let n=0,a=t.length;n=n.next.y&&n.next.y!==n.y){let e=n.x+(i-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(e<=r&&e>a&&(a=e,o=n.x=n.x&&n.x>=c&&r!==n.x&&Ec(io.x||n.x===o.x&&xc(o,n)))&&(o=n,u=t)}n=n.next}while(n!==s);return o}function xc(e,t){return kc(e.prev,e,t.prev)<0&&kc(t.next,e,e.next)<0}function Sc(e,t,n,r){let i=e;do i.z===0&&(i.z=wc(i.x,i.y,t,n,r)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next;while(i!==e);i.prevZ.nextZ=null,i.prevZ=null,Cc(i)}function Cc(e){let t,n=1;do{let r=e,i;e=null;let a=null;for(t=0;r;){t++;let o=r,s=0;for(let e=0;e0||c>0&&o;)s!==0&&(c===0||!o||r.z<=o.z)?(i=r,r=r.nextZ,s--):(i=o,o=o.nextZ,c--),a?a.nextZ=i:e=i,i.prevZ=a,a=i;r=o}a.nextZ=null,n*=2}while(t>1);return e}function wc(e,t,n,r,i){return e=(e-n)*i|0,t=(t-r)*i|0,e=(e|e<<8)&16711935,e=(e|e<<4)&252645135,e=(e|e<<2)&858993459,e=(e|e<<1)&1431655765,t=(t|t<<8)&16711935,t=(t|t<<4)&252645135,t=(t|t<<2)&858993459,t=(t|t<<1)&1431655765,e|t<<1}function Tc(e){let t=e,n=e;do(t.x=(e-o)*(a-s)&&(e-o)*(r-s)>=(n-o)*(t-s)&&(n-o)*(a-s)>=(i-o)*(r-s)}function Dc(e,t,n,r,i,a,o,s){return!(e===o&&t===s)&&Ec(e,t,n,r,i,a,o,s)}function Oc(e,t){return e.next.i!==t.i&&e.prev.i!==t.i&&!Pc(e,t)&&(Fc(e,t)&&Fc(t,e)&&Ic(e,t)&&(kc(e.prev,e,t.prev)||kc(e,t.prev,t))||Ac(e,t)&&kc(e.prev,e,e.next)>0&&kc(t.prev,t,t.next)>0)}function kc(e,t,n){return(t.y-e.y)*(n.x-t.x)-(t.x-e.x)*(n.y-t.y)}function Ac(e,t){return e.x===t.x&&e.y===t.y}function jc(e,t,n,r){let i=Nc(kc(e,t,n)),a=Nc(kc(e,t,r)),o=Nc(kc(n,r,e)),s=Nc(kc(n,r,t));return!!(i!==a&&o!==s||i===0&&Mc(e,n,t)||a===0&&Mc(e,r,t)||o===0&&Mc(n,e,r)||s===0&&Mc(n,t,r))}function Mc(e,t,n){return t.x<=Math.max(e.x,n.x)&&t.x>=Math.min(e.x,n.x)&&t.y<=Math.max(e.y,n.y)&&t.y>=Math.min(e.y,n.y)}function Nc(e){return e>0?1:e<0?-1:0}function Pc(e,t){let n=e;do{if(n.i!==e.i&&n.next.i!==e.i&&n.i!==t.i&&n.next.i!==t.i&&jc(n,n.next,e,t))return!0;n=n.next}while(n!==e);return!1}function Fc(e,t){return kc(e.prev,e,e.next)<0?kc(e,t,e.next)>=0&&kc(e,e.prev,t)>=0:kc(e,t,e.prev)<0||kc(e,e.next,t)<0}function Ic(e,t){let n=e,r=!1,i=(e.x+t.x)/2,a=(e.y+t.y)/2;do n.y>a!=n.next.y>a&&n.next.y!==n.y&&i<(n.next.x-n.x)*(a-n.y)/(n.next.y-n.y)+n.x&&(r=!r),n=n.next;while(n!==e);return r}function Lc(e,t){let n=Bc(e.i,e.x,e.y),r=Bc(t.i,t.x,t.y),i=e.next,a=t.prev;return e.next=t,t.prev=e,n.next=i,i.prev=n,r.next=n,n.prev=r,a.next=r,r.prev=a,r}function Rc(e,t,n,r){let i=Bc(e,t,n);return r?(i.next=r.next,i.prev=r,r.next.prev=i,r.next=i):(i.prev=i,i.next=i),i}function zc(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 Bc(e,t,n){return{i:e,x:t,y:n,prev:null,next:null,z:0,prevZ:null,nextZ:null,steiner:!1}}function Vc(e,t,n,r){let i=0;for(let a=t,o=n-r;a2&&e[t-1].equals(e[0])&&e.pop()}function Gc(e,t){for(let n=0;n2**-52){let d=Math.sqrt(u),f=Math.sqrt(c*c+l*l),p=t.x-s/d,m=t.y+o/d,h=n.x-l/f,g=n.y+c/f,_=((h-p)*l-(g-m)*c)/(o*l-s*c);r=p+o*_-e.x,i=m+s*_-e.y;let v=r*r+i*i;if(v<=2)return new K(r,i);a=Math.sqrt(v/2)}else{let e=!1;o>2**-52?c>2**-52&&(e=!0):o<-(2**-52)?c<-(2**-52)&&(e=!0):Math.sign(s)===Math.sign(l)&&(e=!0),e?(r=-s,i=o,a=Math.sqrt(u)):(r=o,i=s,a=Math.sqrt(u/2))}return new K(r/a,i/a)}let j=[];for(let e=0,t=D.length,n=t-1,r=e+1;e=0;e--){let t=e/p,n=u*Math.cos(t*Math.PI/2),r=d*Math.sin(t*Math.PI/2)+f;for(let e=0,t=D.length;e=0;){let r=n,i=n-1;i<0&&(i=e.length-1);for(let e=0,n=s+p*2;e0)&&f.push(t,i,c),(e!==n-1||s0&&(t.defines=this.defines),t.vertexShader=this.vertexShader,t.fragmentShader=this.fragmentShader,t.lights=this.lights,t.clipping=this.clipping;let n={};for(let e in this.extensions)this.extensions[e]===!0&&(n[e]=!0);return Object.keys(n).length>0&&(t.extensions=n),t}},bl=class extends yl{constructor(e){super(e),this.isRawShaderMaterial=!0,this.type=`RawShaderMaterial`}},xl=class extends Zi{constructor(e){super(),this.isMeshStandardMaterial=!0,this.type=`MeshStandardMaterial`,this.defines={STANDARD:``},this.color=new Y(16777215),this.roughness=1,this.metalness=0,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Y(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new K(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.roughnessMap=null,this.metalnessMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new pr,this.envMapIntensity=1,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=`round`,this.wireframeLinejoin=`round`,this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.defines={STANDARD:``},this.color.copy(e.color),this.roughness=e.roughness,this.metalness=e.metalness,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.roughnessMap=e.roughnessMap,this.metalnessMap=e.metalnessMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.envMapIntensity=e.envMapIntensity,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}},Sl=class extends xl{constructor(e){super(),this.isMeshPhysicalMaterial=!0,this.defines={STANDARD:``,PHYSICAL:``},this.type=`MeshPhysicalMaterial`,this.anisotropyRotation=0,this.anisotropyMap=null,this.clearcoatMap=null,this.clearcoatRoughness=0,this.clearcoatRoughnessMap=null,this.clearcoatNormalScale=new K(1,1),this.clearcoatNormalMap=null,this.ior=1.5,Object.defineProperty(this,"reflectivity",{get:function(){return un(2.5*(this.ior-1)/(this.ior+1),0,1)},set:function(e){this.ior=(1+.4*e)/(1-.4*e)}}),this.iridescenceMap=null,this.iridescenceIOR=1.3,this.iridescenceThicknessRange=[100,400],this.iridescenceThicknessMap=null,this.sheenColor=new Y(0),this.sheenColorMap=null,this.sheenRoughness=1,this.sheenRoughnessMap=null,this.transmissionMap=null,this.thickness=0,this.thicknessMap=null,this.attenuationDistance=1/0,this.attenuationColor=new Y(1,1,1),this.specularIntensity=1,this.specularIntensityMap=null,this.specularColor=new Y(1,1,1),this.specularColorMap=null,this._anisotropy=0,this._clearcoat=0,this._dispersion=0,this._iridescence=0,this._sheen=0,this._transmission=0,this.setValues(e)}get anisotropy(){return this._anisotropy}set anisotropy(e){this._anisotropy>0!=e>0&&this.version++,this._anisotropy=e}get clearcoat(){return this._clearcoat}set clearcoat(e){this._clearcoat>0!=e>0&&this.version++,this._clearcoat=e}get iridescence(){return this._iridescence}set iridescence(e){this._iridescence>0!=e>0&&this.version++,this._iridescence=e}get dispersion(){return this._dispersion}set dispersion(e){this._dispersion>0!=e>0&&this.version++,this._dispersion=e}get sheen(){return this._sheen}set sheen(e){this._sheen>0!=e>0&&this.version++,this._sheen=e}get transmission(){return this._transmission}set transmission(e){this._transmission>0!=e>0&&this.version++,this._transmission=e}copy(e){return super.copy(e),this.defines={STANDARD:``,PHYSICAL:``},this.anisotropy=e.anisotropy,this.anisotropyRotation=e.anisotropyRotation,this.anisotropyMap=e.anisotropyMap,this.clearcoat=e.clearcoat,this.clearcoatMap=e.clearcoatMap,this.clearcoatRoughness=e.clearcoatRoughness,this.clearcoatRoughnessMap=e.clearcoatRoughnessMap,this.clearcoatNormalMap=e.clearcoatNormalMap,this.clearcoatNormalScale.copy(e.clearcoatNormalScale),this.dispersion=e.dispersion,this.ior=e.ior,this.iridescence=e.iridescence,this.iridescenceMap=e.iridescenceMap,this.iridescenceIOR=e.iridescenceIOR,this.iridescenceThicknessRange=[...e.iridescenceThicknessRange],this.iridescenceThicknessMap=e.iridescenceThicknessMap,this.sheen=e.sheen,this.sheenColor.copy(e.sheenColor),this.sheenColorMap=e.sheenColorMap,this.sheenRoughness=e.sheenRoughness,this.sheenRoughnessMap=e.sheenRoughnessMap,this.transmission=e.transmission,this.transmissionMap=e.transmissionMap,this.thickness=e.thickness,this.thicknessMap=e.thicknessMap,this.attenuationDistance=e.attenuationDistance,this.attenuationColor.copy(e.attenuationColor),this.specularIntensity=e.specularIntensity,this.specularIntensityMap=e.specularIntensityMap,this.specularColor.copy(e.specularColor),this.specularColorMap=e.specularColorMap,this}},Cl=class extends Zi{constructor(e){super(),this.isMeshPhongMaterial=!0,this.type=`MeshPhongMaterial`,this.color=new Y(16777215),this.specular=new Y(1118481),this.shininess=30,this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Y(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new K(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new pr,this.combine=0,this.reflectivity=1,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=`round`,this.wireframeLinejoin=`round`,this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.color.copy(e.color),this.specular.copy(e.specular),this.shininess=e.shininess,this.map=e.map,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.envMapIntensity=e.envMapIntensity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}},wl=class extends Zi{constructor(e){super(),this.isMeshToonMaterial=!0,this.defines={TOON:``},this.type=`MeshToonMaterial`,this.color=new Y(16777215),this.map=null,this.gradientMap=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Y(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new K(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,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.gradientMap=e.gradientMap,this.lightMap=e.lightMap,this.lightMapIntensity=e.lightMapIntensity,this.aoMap=e.aoMap,this.aoMapIntensity=e.aoMapIntensity,this.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.fog=e.fog,this}},Tl=class extends Zi{constructor(e){super(),this.isMeshNormalMaterial=!0,this.type=`MeshNormalMaterial`,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new K(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.setValues(e)}copy(e){return super.copy(e),this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.flatShading=e.flatShading,this}},El=class extends Zi{constructor(e){super(),this.isMeshLambertMaterial=!0,this.type=`MeshLambertMaterial`,this.color=new Y(16777215),this.map=null,this.lightMap=null,this.lightMapIntensity=1,this.aoMap=null,this.aoMapIntensity=1,this.emissive=new Y(0),this.emissiveIntensity=1,this.emissiveMap=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new K(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.specularMap=null,this.alphaMap=null,this.envMap=null,this.envMapRotation=new pr,this.combine=0,this.reflectivity=1,this.envMapIntensity=1,this.refractionRatio=.98,this.wireframe=!1,this.wireframeLinewidth=1,this.wireframeLinecap=`round`,this.wireframeLinejoin=`round`,this.flatShading=!1,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.emissive.copy(e.emissive),this.emissiveMap=e.emissiveMap,this.emissiveIntensity=e.emissiveIntensity,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.specularMap=e.specularMap,this.alphaMap=e.alphaMap,this.envMap=e.envMap,this.envMapRotation.copy(e.envMapRotation),this.combine=e.combine,this.reflectivity=e.reflectivity,this.envMapIntensity=e.envMapIntensity,this.refractionRatio=e.refractionRatio,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.wireframeLinecap=e.wireframeLinecap,this.wireframeLinejoin=e.wireframeLinejoin,this.flatShading=e.flatShading,this.fog=e.fog,this}},Dl=class extends Zi{constructor(e){super(),this.isMeshDepthMaterial=!0,this.type=`MeshDepthMaterial`,this.depthPacking=ut,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}},Ol=class extends Zi{constructor(e){super(),this.isMeshDistanceMaterial=!0,this.type=`MeshDistanceMaterial`,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.map=e.map,this.alphaMap=e.alphaMap,this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this}},kl=class extends Zi{constructor(e){super(),this.isMeshMatcapMaterial=!0,this.defines={MATCAP:``},this.type=`MeshMatcapMaterial`,this.color=new Y(16777215),this.matcap=null,this.map=null,this.bumpMap=null,this.bumpScale=1,this.normalMap=null,this.normalMapType=0,this.normalScale=new K(1,1),this.displacementMap=null,this.displacementScale=1,this.displacementBias=0,this.alphaMap=null,this.wireframe=!1,this.wireframeLinewidth=1,this.flatShading=!1,this.fog=!0,this.setValues(e)}copy(e){return super.copy(e),this.defines={MATCAP:``},this.color.copy(e.color),this.matcap=e.matcap,this.map=e.map,this.bumpMap=e.bumpMap,this.bumpScale=e.bumpScale,this.normalMap=e.normalMap,this.normalMapType=e.normalMapType,this.normalScale.copy(e.normalScale),this.displacementMap=e.displacementMap,this.displacementScale=e.displacementScale,this.displacementBias=e.displacementBias,this.alphaMap=e.alphaMap,this.wireframe=e.wireframe,this.wireframeLinewidth=e.wireframeLinewidth,this.flatShading=e.flatShading,this.fog=e.fog,this}},Al=class extends Vo{constructor(e){super(),this.isLineDashedMaterial=!0,this.type=`LineDashedMaterial`,this.scale=1,this.dashSize=3,this.gapSize=1,this.setValues(e)}copy(e){return super.copy(e),this.scale=e.scale,this.dashSize=e.dashSize,this.gapSize=e.gapSize,this}};function jl(e,t){return!e||e.constructor===t?e:typeof t.BYTES_PER_ELEMENT==`number`?new t(e):Array.prototype.slice.call(e)}function Ml(e){function t(t,n){return e[t]-e[n]}let n=e.length,r=Array(n);for(let e=0;e!==n;++e)r[e]=e;return r.sort(t),r}function Nl(e,t,n){let r=e.length,i=new e.constructor(r);for(let a=0,o=0;o!==r;++a){let r=n[a]*t;for(let n=0;n!==t;++n)i[o++]=e[r+n]}return i}function Pl(e,t,n,r){let i=1,a=e[0];for(;a!==void 0&&a[r]===void 0;)a=e[i++];if(a===void 0)return;let o=a[r];if(o!==void 0)if(Array.isArray(o))do o=a[r],o!==void 0&&(t.push(a.time),n.push(...o)),a=e[i++];while(a!==void 0);else if(o.toArray!==void 0)do o=a[r],o!==void 0&&(t.push(a.time),o.toArray(n,n.length)),a=e[i++];while(a!==void 0);else do o=a[r],o!==void 0&&(t.push(a.time),n.push(o)),a=e[i++];while(a!==void 0)}function Fl(e,t,n,r,i=30){let a=e.clone();a.name=t;let o=[];for(let e=0;e=r)){c.push(t.times[e]);for(let n=0;na.tracks[e].times[0]&&(s=a.tracks[e].times[0]);for(let e=0;e=r.times[d]){let e=d*c+s,t=e+c-s;f=r.values.slice(e,t)}else{let e=r.createInterpolant(),t=s,n=c-s;e.evaluate(a),f=e.resultBuffer.slice(t,n)}i===`quaternion`&&new Mn().fromArray(f).normalize().conjugate().toArray(f);let p=o.times.length;for(let e=0;e=i)){let o=t[1];e=i)break seek}a=n,n=0;break linear_scan}break validate_interval}for(;n>>1;et;)--a;if(++a,i!==0||a!==r){i>=a&&(a=Math.max(a,1),i=a-1);let e=this.getValueSize();this.times=n.slice(i,a),this.values=this.values.slice(i*e,a*e)}return this}validate(){let e=!0,t=this.getValueSize();t-Math.floor(t)!==0&&($t(`KeyframeTrack: Invalid value size in track.`,this),e=!1);let n=this.times,r=this.values,i=n.length;i===0&&($t(`KeyframeTrack: Track is empty.`,this),e=!1);let a=null;for(let t=0;t!==i;t++){let r=n[t];if(typeof r==`number`&&isNaN(r)){$t(`KeyframeTrack: Time is not a valid number.`,this,t,r),e=!1;break}if(a!==null&&a>r){$t(`KeyframeTrack: Out of order keys.`,this,t,r,a),e=!1;break}a=r}if(r!==void 0&&Wt(r))for(let t=0,n=r.length;t!==n;++t){let n=r[t];if(isNaN(n)){$t(`KeyframeTrack: Value is not a valid number.`,this,t,n),e=!1;break}}return e}optimize(){let e=this.times.slice(),t=this.values.slice(),n=this.getValueSize(),r=this.getInterpolation()===rt,i=e.length-1,a=1;for(let o=1;o0){e[a]=e[i];for(let e=i*n,r=a*n,o=0;o!==n;++o)t[r+o]=t[e+o];++a}return a===e.length?(this.times=e,this.values=t):(this.times=e.slice(0,a),this.values=t.slice(0,a*n)),this}clone(){let e=this.times.slice(),t=this.values.slice(),n=this.constructor,r=new n(this.name,e,t);return r.createInterpolant=this.createInterpolant,r}};Ul.prototype.ValueTypeName=``,Ul.prototype.TimeBufferType=Float32Array,Ul.prototype.ValueBufferType=Float32Array,Ul.prototype.DefaultInterpolation=nt;var Wl=class extends Ul{constructor(e,t,n){super(e,t,n)}};Wl.prototype.ValueTypeName=`bool`,Wl.prototype.ValueBufferType=Array,Wl.prototype.DefaultInterpolation=tt,Wl.prototype.InterpolantFactoryMethodLinear=void 0,Wl.prototype.InterpolantFactoryMethodSmooth=void 0;var Gl=class extends Ul{constructor(e,t,n,r){super(e,t,n,r)}};Gl.prototype.ValueTypeName=`color`;var Kl=class extends Ul{constructor(e,t,n,r){super(e,t,n,r)}};Kl.prototype.ValueTypeName=`number`;var ql=class extends Rl{constructor(e,t,n,r){super(e,t,n,r)}interpolate_(e,t,n,r){let i=this.resultBuffer,a=this.sampleValues,o=this.valueSize,s=(n-t)/(r-t),c=e*o;for(let e=c+o;c!==e;c+=4)Mn.slerpFlat(i,0,a,c-o,a,c,s);return i}},Jl=class extends Ul{constructor(e,t,n,r){super(e,t,n,r)}InterpolantFactoryMethodLinear(e){return new ql(this.times,this.values,this.getValueSize(),e)}};Jl.prototype.ValueTypeName=`quaternion`,Jl.prototype.InterpolantFactoryMethodSmooth=void 0;var Yl=class extends Ul{constructor(e,t,n){super(e,t,n)}};Yl.prototype.ValueTypeName=`string`,Yl.prototype.ValueBufferType=Array,Yl.prototype.DefaultInterpolation=tt,Yl.prototype.InterpolantFactoryMethodLinear=void 0,Yl.prototype.InterpolantFactoryMethodSmooth=void 0;var Xl=class extends Ul{constructor(e,t,n,r){super(e,t,n,r)}};Xl.prototype.ValueTypeName=`vector`;var Zl=class{constructor(e=``,t=-1,n=[],r=ct){this.name=e,this.tracks=n,this.duration=t,this.blendMode=r,this.uuid=ln(),this.userData={},this.duration<0&&this.resetDuration()}static parse(e){let t=[],n=e.tracks,r=1/(e.fps||1);for(let e=0,i=n.length;e!==i;++e)t.push($l(n[e]).scale(r));let i=new this(e.name,e.duration,t,e.blendMode);return i.uuid=e.uuid,i.userData=JSON.parse(e.userData||`{}`),i}static toJSON(e){let t=[],n=e.tracks,r={name:e.name,duration:e.duration,tracks:t,uuid:e.uuid,blendMode:e.blendMode,userData:JSON.stringify(e.userData)};for(let e=0,r=n.length;e!==r;++e)t.push(Ul.toJSON(n[e]));return r}static CreateFromMorphTargetSequence(e,t,n,r){let i=t.length,a=[];for(let e=0;e1){let e=a[1],t=r[e];t||(r[e]=t=[]),t.push(n)}}let a=[];for(let e in r)a.push(this.CreateFromMorphTargetSequence(e,r[e],t,n));return a}static parseAnimation(e,t){if(G(`AnimationClip: parseAnimation() is deprecated and will be removed with r185`),!e)return $t(`AnimationClip: No animation in JSONLoader data.`),null;let n=function(e,t,n,r,i){if(n.length!==0){let a=[],o=[];Pl(n,a,o,r),a.length!==0&&i.push(new e(t,a,o))}},r=[],i=e.name||`default`,a=e.fps||30,o=e.blendMode,s=e.length||-1,c=e.hierarchy||[];for(let e=0;e{t&&t(i),this.manager.itemEnd(e)},0);return}if(au[e]!==void 0){au[e].push({onLoad:t,onProgress:n,onError:r});return}au[e]=[],au[e].push({onLoad:t,onProgress:n,onError:r});let a=new Request(e,{headers:new Headers(this.requestHeader),credentials:this.withCredentials?`include`:`same-origin`,signal:typeof AbortSignal.any==`function`?AbortSignal.any([this._abortController.signal,this.manager.abortController.signal]):this._abortController.signal}),o=this.mimeType,s=this.responseType;fetch(a).then(t=>{if(t.status===200||t.status===0){if(t.status===0&&G(`FileLoader: HTTP Status 0 received.`),typeof ReadableStream>`u`||t.body===void 0||t.body.getReader===void 0)return t;let n=au[e],r=t.body.getReader(),i=t.headers.get(`X-File-Size`)||t.headers.get(`Content-Length`),a=i?parseInt(i):0,o=a!==0,s=0,c=new ReadableStream({start(e){t();function t(){r.read().then(({done:r,value:i})=>{if(r)e.close();else{s+=i.byteLength;let r=new ProgressEvent(`progress`,{lengthComputable:o,loaded:s,total:a});for(let e=0,t=n.length;e{e.error(t)})}}});return new Response(c)}else throw new ou(`fetch for "${t.url}" responded with ${t.status}: ${t.statusText}`,t)}).then(e=>{switch(s){case`arraybuffer`:return e.arrayBuffer();case`blob`:return e.blob();case`document`:return e.text().then(e=>new DOMParser().parseFromString(e,o));case`json`:return e.json();default:if(o===``)return e.text();{let t=/charset="?([^;"\s]*)"?/i.exec(o),n=t&&t[1]?t[1].toLowerCase():void 0,r=new TextDecoder(n);return e.arrayBuffer().then(e=>r.decode(e))}}}).then(t=>{eu.add(`file:${e}`,t);let n=au[e];delete au[e];for(let e=0,r=n.length;e{let n=au[e];if(n===void 0)throw this.manager.itemError(e),t;delete au[e];for(let e=0,r=n.length;e{this.manager.itemEnd(e)}),this.manager.itemStart(e)}setResponseType(e){return this.responseType=e,this}setMimeType(e){return this.mimeType=e,this}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}},cu=class extends iu{constructor(e){super(e)}load(e,t,n,r){let i=this,a=new su(this.manager);a.setPath(this.path),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,function(n){try{t(i.parse(JSON.parse(n)))}catch(t){r?r(t):$t(t),i.manager.itemError(e)}},n,r)}parse(e){let t=[];for(let n=0;n0:r.vertexColors=e.vertexColors),e.uniforms!==void 0)for(let t in e.uniforms){let i=e.uniforms[t];switch(r.uniforms[t]={},i.type){case`t`:r.uniforms[t].value=n(i.value);break;case`c`:r.uniforms[t].value=new Y().setHex(i.value);break;case`v2`:r.uniforms[t].value=new K().fromArray(i.value);break;case`v3`:r.uniforms[t].value=new q().fromArray(i.value);break;case`v4`:r.uniforms[t].value=new Zn().fromArray(i.value);break;case`m3`:r.uniforms[t].value=new Fn().fromArray(i.value);break;case`m4`:r.uniforms[t].value=new J().fromArray(i.value);break;default:r.uniforms[t].value=i.value}}if(e.defines!==void 0&&(r.defines=e.defines),e.vertexShader!==void 0&&(r.vertexShader=e.vertexShader),e.fragmentShader!==void 0&&(r.fragmentShader=e.fragmentShader),e.glslVersion!==void 0&&(r.glslVersion=e.glslVersion),e.extensions!==void 0)for(let t in e.extensions)r.extensions[t]=e.extensions[t];if(e.lights!==void 0&&(r.lights=e.lights),e.clipping!==void 0&&(r.clipping=e.clipping),e.size!==void 0&&(r.size=e.size),e.sizeAttenuation!==void 0&&(r.sizeAttenuation=e.sizeAttenuation),e.map!==void 0&&(r.map=n(e.map)),e.matcap!==void 0&&(r.matcap=n(e.matcap)),e.alphaMap!==void 0&&(r.alphaMap=n(e.alphaMap)),e.bumpMap!==void 0&&(r.bumpMap=n(e.bumpMap)),e.bumpScale!==void 0&&(r.bumpScale=e.bumpScale),e.normalMap!==void 0&&(r.normalMap=n(e.normalMap)),e.normalMapType!==void 0&&(r.normalMapType=e.normalMapType),e.normalScale!==void 0){let t=e.normalScale;Array.isArray(t)===!1&&(t=[t,t]),r.normalScale=new K().fromArray(t)}return e.displacementMap!==void 0&&(r.displacementMap=n(e.displacementMap)),e.displacementScale!==void 0&&(r.displacementScale=e.displacementScale),e.displacementBias!==void 0&&(r.displacementBias=e.displacementBias),e.roughnessMap!==void 0&&(r.roughnessMap=n(e.roughnessMap)),e.metalnessMap!==void 0&&(r.metalnessMap=n(e.metalnessMap)),e.emissiveMap!==void 0&&(r.emissiveMap=n(e.emissiveMap)),e.emissiveIntensity!==void 0&&(r.emissiveIntensity=e.emissiveIntensity),e.specularMap!==void 0&&(r.specularMap=n(e.specularMap)),e.specularIntensityMap!==void 0&&(r.specularIntensityMap=n(e.specularIntensityMap)),e.specularColorMap!==void 0&&(r.specularColorMap=n(e.specularColorMap)),e.envMap!==void 0&&(r.envMap=n(e.envMap)),e.envMapRotation!==void 0&&r.envMapRotation.fromArray(e.envMapRotation),e.envMapIntensity!==void 0&&(r.envMapIntensity=e.envMapIntensity),e.reflectivity!==void 0&&(r.reflectivity=e.reflectivity),e.refractionRatio!==void 0&&(r.refractionRatio=e.refractionRatio),e.lightMap!==void 0&&(r.lightMap=n(e.lightMap)),e.lightMapIntensity!==void 0&&(r.lightMapIntensity=e.lightMapIntensity),e.aoMap!==void 0&&(r.aoMap=n(e.aoMap)),e.aoMapIntensity!==void 0&&(r.aoMapIntensity=e.aoMapIntensity),e.gradientMap!==void 0&&(r.gradientMap=n(e.gradientMap)),e.clearcoatMap!==void 0&&(r.clearcoatMap=n(e.clearcoatMap)),e.clearcoatRoughnessMap!==void 0&&(r.clearcoatRoughnessMap=n(e.clearcoatRoughnessMap)),e.clearcoatNormalMap!==void 0&&(r.clearcoatNormalMap=n(e.clearcoatNormalMap)),e.clearcoatNormalScale!==void 0&&(r.clearcoatNormalScale=new K().fromArray(e.clearcoatNormalScale)),e.iridescenceMap!==void 0&&(r.iridescenceMap=n(e.iridescenceMap)),e.iridescenceThicknessMap!==void 0&&(r.iridescenceThicknessMap=n(e.iridescenceThicknessMap)),e.transmissionMap!==void 0&&(r.transmissionMap=n(e.transmissionMap)),e.thicknessMap!==void 0&&(r.thicknessMap=n(e.thicknessMap)),e.anisotropyMap!==void 0&&(r.anisotropyMap=n(e.anisotropyMap)),e.sheenColorMap!==void 0&&(r.sheenColorMap=n(e.sheenColorMap)),e.sheenRoughnessMap!==void 0&&(r.sheenRoughnessMap=n(e.sheenRoughnessMap)),r}setTextures(e){return this.textures=e,this}createMaterialFromType(t){return e.createMaterialFromType(t)}static createMaterialFromType(e){return new{ShadowMaterial:ul,SpriteMaterial:Qi,RawShaderMaterial:bl,ShaderMaterial:yl,PointsMaterial:ts,MeshPhysicalMaterial:Sl,MeshStandardMaterial:xl,MeshPhongMaterial:Cl,MeshToonMaterial:wl,MeshNormalMaterial:Tl,MeshLambertMaterial:El,MeshDepthMaterial:Dl,MeshDistanceMaterial:Ol,MeshBasicMaterial:Ta,MeshMatcapMaterial:kl,LineDashedMaterial:Al,LineBasicMaterial:Vo,Material:Zi}[e]}},Vu=class{static extractUrlBase(e){let t=e.lastIndexOf(`/`);return t===-1?`./`:e.slice(0,t+1)}static resolveURL(e,t){return typeof e!=`string`||e===``?``:(/^https?:\/\//i.test(t)&&/^\//.test(e)&&(t=t.replace(/(^https?:\/\/[^\/]+).*/i,`$1`)),/^(https?:)?\/\//i.test(e)||/^data:.*,.*$/i.test(e)||/^blob:.*$/i.test(e)?e:t+e)}},Hu=class extends Ki{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}},Uu=class extends iu{constructor(e){super(e)}load(e,t,n,r){let i=this,a=new su(i.manager);a.setPath(i.path),a.setRequestHeader(i.requestHeader),a.setWithCredentials(i.withCredentials),a.load(e,function(n){try{t(i.parse(JSON.parse(n)))}catch(t){r?r(t):$t(t),i.manager.itemError(e)}},n,r)}parse(e){let t={},n={};function r(e,n){if(t[n]!==void 0)return t[n];let r=e.interleavedBuffers[n],a=i(e,r.buffer),o=new qi(Ut(r.type,a),r.stride);return o.uuid=r.uuid,t[n]=o,o}function i(e,t){if(n[t]!==void 0)return n[t];let r=e.arrayBuffers[t],i=new Uint32Array(r).buffer;return n[t]=i,i}let a=e.isInstancedBufferGeometry?new Hu:new Ki,o=e.data.index;if(o!==void 0){let e=Ut(o.type,o.array);a.setIndex(new Ti(e,1))}let s=e.data.attributes;for(let t in s){let n=s[t],i;if(n.isInterleavedBufferAttribute)i=new Yi(r(e.data,n.data),n.itemSize,n.offset,n.normalized);else{let e=Ut(n.type,n.array);i=new(n.isInstancedBufferAttribute?to:Ti)(e,n.itemSize,n.normalized)}n.name!==void 0&&(i.name=n.name),n.usage!==void 0&&i.setUsage(n.usage),a.setAttribute(t,i)}let c=e.data.morphAttributes;if(c)for(let t in c){let n=c[t],i=[];for(let t=0,a=n.length;t0){i=new du(new nu(t)),i.setCrossOrigin(this.crossOrigin);for(let t=0,n=e.length;t0){r=new du(this.manager),r.setCrossOrigin(this.crossOrigin);for(let t=0,r=e.length;t{let t=null,n=null;return e.boundingBox!==void 0&&(t=new ni().fromJSON(e.boundingBox)),e.boundingSphere!==void 0&&(n=new Ri().fromJSON(e.boundingSphere)),{...e,boundingBox:t,boundingSphere:n}}),a._instanceInfo=e.instanceInfo,a._availableInstanceIds=e._availableInstanceIds,a._availableGeometryIds=e._availableGeometryIds,a._nextIndexStart=e.nextIndexStart,a._nextVertexStart=e.nextVertexStart,a._geometryCount=e.geometryCount,a._maxInstanceCount=e.maxInstanceCount,a._maxVertexCount=e.maxVertexCount,a._maxIndexCount=e.maxIndexCount,a._geometryInitialized=e.geometryInitialized,a._matricesTexture=c(e.matricesTexture.uuid),a._indirectTexture=c(e.indirectTexture.uuid),e.colorsTexture!==void 0&&(a._colorsTexture=c(e.colorsTexture.uuid)),e.boundingSphere!==void 0&&(a.boundingSphere=new Ri().fromJSON(e.boundingSphere)),e.boundingBox!==void 0&&(a.boundingBox=new ni().fromJSON(e.boundingBox));break;case`LOD`:a=new ga;break;case`Line`:a=new Yo(o(e.geometry),s(e.material));break;case`LineLoop`:a=new es(o(e.geometry),s(e.material));break;case`LineSegments`:a=new $o(o(e.geometry),s(e.material));break;case`PointCloud`:case`Points`:a=new os(o(e.geometry),s(e.material));break;case`Sprite`:a=new fa(s(e.material));break;case`Group`:a=new jr;break;case`Bone`:a=new Xa;break;default:a=new Ar}if(a.uuid=e.uuid,e.name!==void 0&&(a.name=e.name),e.matrix===void 0?(e.position!==void 0&&a.position.fromArray(e.position),e.rotation!==void 0&&a.rotation.fromArray(e.rotation),e.quaternion!==void 0&&a.quaternion.fromArray(e.quaternion),e.scale!==void 0&&a.scale.fromArray(e.scale)):(a.matrix.fromArray(e.matrix),e.matrixAutoUpdate!==void 0&&(a.matrixAutoUpdate=e.matrixAutoUpdate),a.matrixAutoUpdate&&a.matrix.decompose(a.position,a.quaternion,a.scale)),e.up!==void 0&&a.up.fromArray(e.up),e.pivot!==void 0&&(a.pivot=new q().fromArray(e.pivot)),e.morphTargetDictionary!==void 0&&(a.morphTargetDictionary=Object.assign({},e.morphTargetDictionary)),e.morphTargetInfluences!==void 0&&(a.morphTargetInfluences=e.morphTargetInfluences.slice()),e.castShadow!==void 0&&(a.castShadow=e.castShadow),e.receiveShadow!==void 0&&(a.receiveShadow=e.receiveShadow),e.shadow&&(e.shadow.intensity!==void 0&&(a.shadow.intensity=e.shadow.intensity),e.shadow.bias!==void 0&&(a.shadow.bias=e.shadow.bias),e.shadow.normalBias!==void 0&&(a.shadow.normalBias=e.shadow.normalBias),e.shadow.radius!==void 0&&(a.shadow.radius=e.shadow.radius),e.shadow.mapSize!==void 0&&a.shadow.mapSize.fromArray(e.shadow.mapSize),e.shadow.camera!==void 0&&(a.shadow.camera=this.parseObject(e.shadow.camera))),e.visible!==void 0&&(a.visible=e.visible),e.frustumCulled!==void 0&&(a.frustumCulled=e.frustumCulled),e.renderOrder!==void 0&&(a.renderOrder=e.renderOrder),e.static!==void 0&&(a.static=e.static),e.userData!==void 0&&(a.userData=e.userData),e.layers!==void 0&&(a.layers.mask=e.layers),e.children!==void 0){let o=e.children;for(let e=0;e`u`&&G(`ImageBitmapLoader: createImageBitmap() not supported.`),typeof fetch>`u`&&G(`ImageBitmapLoader: fetch() not supported.`),this.options={premultiplyAlpha:`none`},this._abortController=new AbortController}setOptions(e){return this.options=e,this}load(e,t,n,r){e===void 0&&(e=``),this.path!==void 0&&(e=this.path+e),e=this.manager.resolveURL(e);let i=this,a=eu.get(`image-bitmap:${e}`);if(a!==void 0){if(i.manager.itemStart(e),a.then){a.then(n=>{Yu.has(a)===!0?(r&&r(Yu.get(a)),i.manager.itemError(e),i.manager.itemEnd(e)):(t&&t(n),i.manager.itemEnd(e))});return}setTimeout(function(){t&&t(a),i.manager.itemEnd(e)},0);return}let o={};o.credentials=this.crossOrigin===`anonymous`?`same-origin`:`include`,o.headers=this.requestHeader,o.signal=typeof AbortSignal.any==`function`?AbortSignal.any([this._abortController.signal,this.manager.abortController.signal]):this._abortController.signal;let s=fetch(e,o).then(function(e){return e.blob()}).then(function(e){return createImageBitmap(e,Object.assign(i.options,{colorSpaceConversion:`none`}))}).then(function(n){eu.add(`image-bitmap:${e}`,n),t&&t(n),i.manager.itemEnd(e)}).catch(function(t){r&&r(t),Yu.set(s,t),eu.remove(`image-bitmap:${e}`),i.manager.itemError(e),i.manager.itemEnd(e)});eu.add(`image-bitmap:${e}`,s),i.manager.itemStart(e)}abort(){return this._abortController.abort(),this._abortController=new AbortController,this}},Zu,Qu=class{static getContext(){return Zu===void 0&&(Zu=new(window.AudioContext||window.webkitAudioContext)),Zu}static setContext(e){Zu=e}},$u=class extends iu{constructor(e){super(e)}load(e,t,n,r){let i=this,a=new su(this.manager);a.setResponseType(`arraybuffer`),a.setPath(this.path),a.setRequestHeader(this.requestHeader),a.setWithCredentials(this.withCredentials),a.load(e,function(n){try{let r=n.slice(0),a=Qu.getContext(),s=e+`#decode`;i.manager.itemStart(s),a.decodeAudioData(r,function(e){t(e),i.manager.itemEnd(s)}).catch(function(e){o(e),i.manager.itemEnd(s)})}catch(e){o(e)}},n,r);function o(t){r?r(t):$t(t),i.manager.itemError(e)}}},ed=new J,td=new J,nd=new J,rd=class{constructor(){this.type=`StereoCamera`,this.aspect=1,this.eyeSep=.064,this.cameraL=new Ou,this.cameraL.layers.enable(1),this.cameraL.matrixAutoUpdate=!1,this.cameraR=new Ou,this.cameraR.layers.enable(2),this.cameraR.matrixAutoUpdate=!1,this._cache={focus:null,fov:null,aspect:null,near:null,far:null,zoom:null,eyeSep:null}}update(e){let t=this._cache;if(t.focus!==e.focus||t.fov!==e.fov||t.aspect!==e.aspect*this.aspect||t.near!==e.near||t.far!==e.far||t.zoom!==e.zoom||t.eyeSep!==this.eyeSep){t.focus=e.focus,t.fov=e.fov,t.aspect=e.aspect*this.aspect,t.near=e.near,t.far=e.far,t.zoom=e.zoom,t.eyeSep=this.eyeSep,nd.copy(e.projectionMatrix);let n=t.eyeSep/2,r=n*t.near/t.focus,i=t.near*Math.tan(sn*t.fov*.5)/t.zoom,a,o;td.elements[12]=-n,ed.elements[12]=n,a=-i*t.aspect+r,o=i*t.aspect+r,nd.elements[0]=2*t.near/(o-a),nd.elements[8]=(o+a)/(o-a),this.cameraL.projectionMatrix.copy(nd),a=-i*t.aspect-r,o=i*t.aspect-r,nd.elements[0]=2*t.near/(o-a),nd.elements[8]=(o+a)/(o-a),this.cameraR.projectionMatrix.copy(nd)}this.cameraL.matrixWorld.copy(e.matrixWorld).multiply(td),this.cameraR.matrixWorld.copy(e.matrixWorld).multiply(ed)}},id=-90,ad=1,od=class extends Ar{constructor(e,t,n){super(),this.type=`CubeCamera`,this.renderTarget=n,this.coordinateSystem=null,this.activeMipmapLevel=0;let r=new Ou(id,ad,e,t);r.layers=this.layers,this.add(r);let i=new Ou(id,ad,e,t);i.layers=this.layers,this.add(i);let a=new Ou(id,ad,e,t);a.layers=this.layers,this.add(a);let o=new Ou(id,ad,e,t);o.layers=this.layers,this.add(o);let s=new Ou(id,ad,e,t);s.layers=this.layers,this.add(s);let c=new Ou(id,ad,e,t);c.layers=this.layers,this.add(c)}updateCoordinateSystem(){let e=this.coordinateSystem,t=this.children.concat(),[n,r,i,a,o,s]=t;for(let e of t)this.remove(e);if(e===2e3)n.up.set(0,1,0),n.lookAt(1,0,0),r.up.set(0,1,0),r.lookAt(-1,0,0),i.up.set(0,0,-1),i.lookAt(0,1,0),a.up.set(0,0,1),a.lookAt(0,-1,0),o.up.set(0,1,0),o.lookAt(0,0,1),s.up.set(0,1,0),s.lookAt(0,0,-1);else if(e===2001)n.up.set(0,-1,0),n.lookAt(-1,0,0),r.up.set(0,-1,0),r.lookAt(1,0,0),i.up.set(0,0,1),i.lookAt(0,1,0),a.up.set(0,0,-1),a.lookAt(0,-1,0),o.up.set(0,-1,0),o.lookAt(0,0,1),s.up.set(0,-1,0),s.lookAt(0,0,-1);else throw Error(`THREE.CubeCamera.updateCoordinateSystem(): Invalid coordinate system: `+e);for(let e of t)this.add(e),e.updateMatrixWorld()}update(e,t){this.parent===null&&this.updateMatrixWorld();let{renderTarget:n,activeMipmapLevel:r}=this;this.coordinateSystem!==e.coordinateSystem&&(this.coordinateSystem=e.coordinateSystem,this.updateCoordinateSystem());let[i,a,o,s,c,l]=this.children,u=e.getRenderTarget(),d=e.getActiveCubeFace(),f=e.getActiveMipmapLevel(),p=e.xr.enabled;e.xr.enabled=!1;let m=n.texture.generateMipmaps;n.texture.generateMipmaps=!1;let h=!1;h=e.isWebGLRenderer===!0?e.state.buffers.depth.getReversed():e.reversedDepthBuffer,e.setRenderTarget(n,0,r),h&&e.autoClear===!1&&e.clearDepth(),e.render(t,i),e.setRenderTarget(n,1,r),h&&e.autoClear===!1&&e.clearDepth(),e.render(t,a),e.setRenderTarget(n,2,r),h&&e.autoClear===!1&&e.clearDepth(),e.render(t,o),e.setRenderTarget(n,3,r),h&&e.autoClear===!1&&e.clearDepth(),e.render(t,s),e.setRenderTarget(n,4,r),h&&e.autoClear===!1&&e.clearDepth(),e.render(t,c),n.texture.generateMipmaps=m,e.setRenderTarget(n,5,r),h&&e.autoClear===!1&&e.clearDepth(),e.render(t,l),e.setRenderTarget(u,d,f),e.xr.enabled=p,n.texture.needsPMREMUpdate=!0}},sd=class extends Ou{constructor(e=[]){super(),this.isArrayCamera=!0,this.isMultiViewCamera=!1,this.cameras=e}},cd=class{constructor(){this._previousTime=0,this._currentTime=0,this._startTime=performance.now(),this._delta=0,this._elapsed=0,this._timescale=1,this._document=null,this._pageVisibilityHandler=null}connect(e){this._document=e,e.hidden!==void 0&&(this._pageVisibilityHandler=ld.bind(this),e.addEventListener(`visibilitychange`,this._pageVisibilityHandler,!1))}disconnect(){this._pageVisibilityHandler!==null&&(this._document.removeEventListener(`visibilitychange`,this._pageVisibilityHandler),this._pageVisibilityHandler=null),this._document=null}getDelta(){return this._delta/1e3}getElapsed(){return this._elapsed/1e3}getTimescale(){return this._timescale}setTimescale(e){return this._timescale=e,this}reset(){return this._currentTime=performance.now()-this._startTime,this}dispose(){this.disconnect()}update(e){return this._pageVisibilityHandler!==null&&this._document.hidden===!0?this._delta=0:(this._previousTime=this._currentTime,this._currentTime=(e===void 0?performance.now():e)-this._startTime,this._delta=(this._currentTime-this._previousTime)*this._timescale,this._elapsed+=this._delta),this}};function ld(){this._document.hidden===!1&&this.reset()}var ud=new q,dd=new Mn,fd=new q,pd=new q,md=new q,hd=class extends Ar{constructor(){super(),this.type=`AudioListener`,this.context=Qu.getContext(),this.gain=this.context.createGain(),this.gain.connect(this.context.destination),this.filter=null,this.timeDelta=0,this._timer=new cd}getInput(){return this.gain}removeFilter(){return this.filter!==null&&(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination),this.gain.connect(this.context.destination),this.filter=null),this}getFilter(){return this.filter}setFilter(e){return this.filter===null?this.gain.disconnect(this.context.destination):(this.gain.disconnect(this.filter),this.filter.disconnect(this.context.destination)),this.filter=e,this.gain.connect(this.filter),this.filter.connect(this.context.destination),this}getMasterVolume(){return this.gain.gain.value}setMasterVolume(e){return this.gain.gain.setTargetAtTime(e,this.context.currentTime,.01),this}updateMatrixWorld(e){super.updateMatrixWorld(e),this._timer.update();let t=this.context.listener;if(this.timeDelta=this._timer.getDelta(),this.matrixWorld.decompose(ud,dd,fd),pd.set(0,0,-1).applyQuaternion(dd),md.set(0,1,0).applyQuaternion(dd),t.positionX){let e=this.context.currentTime+this.timeDelta;t.positionX.linearRampToValueAtTime(ud.x,e),t.positionY.linearRampToValueAtTime(ud.y,e),t.positionZ.linearRampToValueAtTime(ud.z,e),t.forwardX.linearRampToValueAtTime(pd.x,e),t.forwardY.linearRampToValueAtTime(pd.y,e),t.forwardZ.linearRampToValueAtTime(pd.z,e),t.upX.linearRampToValueAtTime(md.x,e),t.upY.linearRampToValueAtTime(md.y,e),t.upZ.linearRampToValueAtTime(md.z,e)}else t.setPosition(ud.x,ud.y,ud.z),t.setOrientation(pd.x,pd.y,pd.z,md.x,md.y,md.z)}},gd=class extends Ar{constructor(e){super(),this.type=`Audio`,this.listener=e,this.context=e.context,this.gain=this.context.createGain(),this.gain.connect(e.getInput()),this.autoplay=!1,this.buffer=null,this.detune=0,this.loop=!1,this.loopStart=0,this.loopEnd=0,this.offset=0,this.duration=void 0,this.playbackRate=1,this.isPlaying=!1,this.hasPlaybackControl=!0,this.source=null,this.sourceType=`empty`,this._startedAt=0,this._progress=0,this._connected=!1,this.filters=[]}getOutput(){return this.gain}setNodeSource(e){return this.hasPlaybackControl=!1,this.sourceType=`audioNode`,this.source=e,this.connect(),this}setMediaElementSource(e){return this.hasPlaybackControl=!1,this.sourceType=`mediaNode`,this.source=this.context.createMediaElementSource(e),this.connect(),this}setMediaStreamSource(e){return this.hasPlaybackControl=!1,this.sourceType=`mediaStreamNode`,this.source=this.context.createMediaStreamSource(e),this.connect(),this}setBuffer(e){return this.buffer=e,this.sourceType=`buffer`,this.autoplay&&this.play(),this}play(e=0){if(this.isPlaying===!0){G(`Audio: Audio is already playing.`);return}if(this.hasPlaybackControl===!1){G(`Audio: this Audio has no playback control.`);return}this._startedAt=this.context.currentTime+e;let t=this.context.createBufferSource();return t.buffer=this.buffer,t.loop=this.loop,t.loopStart=this.loopStart,t.loopEnd=this.loopEnd,t.onended=this.onEnded.bind(this),t.start(this._startedAt,this._progress+this.offset,this.duration),this.isPlaying=!0,this.source=t,this.setDetune(this.detune),this.setPlaybackRate(this.playbackRate),this.connect()}pause(){if(this.hasPlaybackControl===!1){G(`Audio: this Audio has no playback control.`);return}return this.isPlaying===!0&&(this._progress+=Math.max(this.context.currentTime-this._startedAt,0)*this.playbackRate,this.loop===!0&&(this._progress%=this.duration||this.buffer.duration),this.source.stop(),this.source.onended=null,this.isPlaying=!1),this}stop(e=0){if(this.hasPlaybackControl===!1){G(`Audio: this Audio has no playback control.`);return}return this._progress=0,this.source!==null&&(this.source.stop(this.context.currentTime+e),this.source.onended=null),this.isPlaying=!1,this}connect(){if(this.filters.length>0){this.source.connect(this.filters[0]);for(let e=1,t=this.filters.length;e0){this.source.disconnect(this.filters[0]);for(let e=1,t=this.filters.length;e0&&this._mixBufferRegionAdditive(n,r,this._addIndex*t,1,t);for(let e=t,i=t+t;e!==i;++e)if(n[e]!==n[e+t]){o.setValue(n,r);break}}saveOriginalState(){let e=this.binding,t=this.buffer,n=this.valueSize,r=n*this._origIndex;e.getValue(t,r);for(let e=n,i=r;e!==i;++e)t[e]=t[r+e%n];this._setIdentity(),this.cumulativeWeight=0,this.cumulativeWeightAdditive=0}restoreOriginalState(){let e=this.valueSize*3;this.binding.setValue(this.buffer,e)}_setAdditiveIdentityNumeric(){let e=this._addIndex*this.valueSize,t=e+this.valueSize;for(let n=e;n=.5)for(let r=0;r!==i;++r)e[t+r]=e[n+r]}_slerp(e,t,n,r){Mn.slerpFlat(e,t,e,t,e,n,r)}_slerpAdditive(e,t,n,r,i){let a=this._workIndex*i;Mn.multiplyQuaternionsFlat(e,a,e,t,e,n),Mn.slerpFlat(e,t,e,t,e,a,r)}_lerp(e,t,n,r,i){let a=1-r;for(let o=0;o!==i;++o){let i=t+o;e[i]=e[i]*a+e[n+o]*r}}_lerpAdditive(e,t,n,r,i){for(let a=0;a!==i;++a){let i=t+a;e[i]=e[i]+e[n+a]*r}}},wd=`\\[\\]\\.:\\/`,Td=RegExp(`[\\[\\]\\.:\\/]`,`g`),Ed=`[^\\[\\]\\.:\\/]`,Dd=`[^`+wd.replace(`\\.`,``)+`]`,Od=`((?:WC+[\\/:])*)`.replace(`WC`,Ed),kd=`(WCOD+)?`.replace(`WCOD`,Dd),Ad=`(?:\\.(WC+)(?:\\[(.+)\\])?)?`.replace(`WC`,Ed),jd=`\\.(WC+)(?:\\[(.+)\\])?`.replace(`WC`,Ed),Md=RegExp(`^`+Od+kd+Ad+jd+`$`),Nd=[`material`,`materials`,`bones`,`map`],Pd=class{constructor(e,t,n){let r=n||Fd.parseTrackName(t);this._targetGroup=e,this._bindings=e.subscribe_(t,r)}getValue(e,t){this.bind();let n=this._targetGroup.nCachedObjects_,r=this._bindings[n];r!==void 0&&r.getValue(e,t)}setValue(e,t){let n=this._bindings;for(let r=this._targetGroup.nCachedObjects_,i=n.length;r!==i;++r)n[r].setValue(e,t)}bind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].bind()}unbind(){let e=this._bindings;for(let t=this._targetGroup.nCachedObjects_,n=e.length;t!==n;++t)e[t].unbind()}},Fd=class e{constructor(t,n,r){this.path=n,this.parsedPath=r||e.parseTrackName(n),this.node=e.findNode(t,this.parsedPath.nodeName),this.rootNode=t,this.getValue=this._getValue_unbound,this.setValue=this._setValue_unbound}static create(t,n,r){return t&&t.isAnimationObjectGroup?new e.Composite(t,n,r):new e(t,n,r)}static sanitizeNodeName(e){return e.replace(/\s/g,`_`).replace(Td,``)}static parseTrackName(e){let t=Md.exec(e);if(t===null)throw Error(`PropertyBinding: Cannot parse trackName: `+e);let n={nodeName:t[2],objectName:t[3],objectIndex:t[4],propertyName:t[5],propertyIndex:t[6]},r=n.nodeName&&n.nodeName.lastIndexOf(`.`);if(r!==void 0&&r!==-1){let e=n.nodeName.substring(r+1);Nd.indexOf(e)!==-1&&(n.nodeName=n.nodeName.substring(0,r),n.objectName=e)}if(n.propertyName===null||n.propertyName.length===0)throw Error(`PropertyBinding: can not parse propertyName from trackName: `+e);return n}static findNode(e,t){if(t===void 0||t===``||t===`.`||t===-1||t===e.name||t===e.uuid)return e;if(e.skeleton){let n=e.skeleton.getBoneByName(t);if(n!==void 0)return n}if(e.children){let n=function(e){for(let r=0;r=i){let a=i++,l=e[a];t[l.uuid]=c,e[c]=l,t[s]=a,e[a]=o;for(let e=0,t=r;e!==t;++e){let t=n[e],r=t[a],i=t[c];t[c]=r,t[a]=i}}}this.nCachedObjects_=i}uncache(){let e=this._objects,t=this._indicesByUUID,n=this._bindings,r=n.length,i=this.nCachedObjects_,a=e.length;for(let o=0,s=arguments.length;o!==s;++o){let s=arguments[o].uuid,c=t[s];if(c!==void 0)if(delete t[s],c0&&(t[o.uuid]=c),e[c]=o,e.pop();for(let e=0,t=r;e!==t;++e){let t=n[e];t[c]=t[i],t.pop()}}}this.nCachedObjects_=i}subscribe_(e,t){let n=this._bindingsIndicesByPath,r=n[e],i=this._bindings;if(r!==void 0)return i[r];let a=this._paths,o=this._parsedPaths,s=this._objects,c=s.length,l=this.nCachedObjects_,u=Array(c);r=i.length,n[e]=r,a.push(e),o.push(t),i.push(u);for(let n=l,r=s.length;n!==r;++n){let r=s[n];u[n]=new Fd(r,e,t)}return u}unsubscribe_(e){let t=this._bindingsIndicesByPath,n=t[e];if(n!==void 0){let r=this._paths,i=this._parsedPaths,a=this._bindings,o=a.length-1,s=a[o],c=e[o];t[c]=n,a[n]=s,a.pop(),i[n]=i[o],i.pop(),r[n]=r[o],r.pop()}}},Ld=class{constructor(e,t,n=null,r=t.blendMode){this._mixer=e,this._clip=t,this._localRoot=n,this.blendMode=r;let i=t.tracks,a=i.length,o=Array(a),s={endingStart:at,endingEnd:at};for(let e=0;e!==a;++e){let t=i[e].createInterpolant(null);o[e]=t,t.settings&&Object.assign(s,t.settings),t.settings=s}this._interpolantSettings=s,this._interpolants=o,this._propertyBindings=Array(a),this._cacheIndex=null,this._byClipCacheIndex=null,this._timeScaleInterpolant=null,this._weightInterpolant=null,this.loop=$e,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&&this.timeScale!==0&&this._startTime===null&&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}fadeIn(e){return this._scheduleFading(e,0,1)}fadeOut(e){return this._scheduleFading(e,1,0)}crossFadeFrom(e,t,n=!1){if(e.fadeOut(t),this.fadeIn(t),n===!0){let n=this._clip.duration,r=e._clip.duration,i=r/n,a=n/r;e.warp(1,i,t),this.warp(a,1,t)}return this}crossFadeTo(e,t,n=!1){return e.crossFadeFrom(this,t,n)}stopFading(){let e=this._weightInterpolant;return e!==null&&(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,n){let r=this._mixer,i=r.time,a=this.timeScale,o=this._timeScaleInterpolant;o===null&&(o=r._lendControlInterpolant(),this._timeScaleInterpolant=o);let s=o.parameterPositions,c=o.sampleValues;return s[0]=i,s[1]=i+n,c[0]=e/a,c[1]=t/a,this}stopWarping(){let e=this._timeScaleInterpolant;return e!==null&&(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,n,r){if(!this.enabled){this._updateWeight(e);return}let i=this._startTime;if(i!==null){let r=(e-i)*n;r<0||n===0?t=0:(this._startTime=null,t=n*r)}t*=this._updateTimeScale(e);let a=this._updateTime(t),o=this._updateWeight(e);if(o>0){let e=this._interpolants,t=this._propertyBindings;switch(this.blendMode){case lt:for(let n=0,r=e.length;n!==r;++n)e[n].evaluate(a),t[n].accumulateAdditive(o);break;case ct:default:for(let n=0,i=e.length;n!==i;++n)e[n].evaluate(a),t[n].accumulate(r,o)}}}_updateWeight(e){let t=0;if(this.enabled){t=this.weight;let n=this._weightInterpolant;if(n!==null){let r=n.evaluate(e)[0];t*=r,e>n.parameterPositions[1]&&(this.stopFading(),r===0&&(this.enabled=!1))}}return this._effectiveWeight=t,t}_updateTimeScale(e){let t=0;if(!this.paused){t=this.timeScale;let n=this._timeScaleInterpolant;if(n!==null){let r=n.evaluate(e)[0];t*=r,e>n.parameterPositions[1]&&(this.stopWarping(),t===0?this.paused=!0:this.timeScale=t)}}return this._effectiveTimeScale=t,t}_updateTime(e){let t=this._clip.duration,n=this.loop,r=this.time+e,i=this._loopCount,a=n===et;if(e===0)return i===-1?r:a&&(i&1)==1?t-r:r;if(n===2200){i===-1&&(this._loopCount=0,this._setEndings(!0,!0,!1));handle_stop:{if(r>=t)r=t;else if(r<0)r=0;else{this.time=r;break handle_stop}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(i===-1&&(e>=0?(i=0,this._setEndings(!0,this.repetitions===0,a)):this._setEndings(this.repetitions===0,!0,a)),r>=t||r<0){let n=Math.floor(r/t);r-=t*n,i+=Math.abs(n);let o=this.repetitions-i;if(o<=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(o===1){let t=e<0;this._setEndings(t,!t,a)}else this._setEndings(!1,!1,a);this._loopCount=i,this.time=r,this._mixer.dispatchEvent({type:`loop`,action:this,loopDelta:n})}}else this._loopCount=i,this.time=r;if(a&&(i&1)==1)return t-r}return r}_setEndings(e,t,n){let r=this._interpolantSettings;n?(r.endingStart=ot,r.endingEnd=ot):(e?r.endingStart=this.zeroSlopeAtStart?ot:at:r.endingStart=st,t?r.endingEnd=this.zeroSlopeAtEnd?ot:at:r.endingEnd=st)}_scheduleFading(e,t,n){let r=this._mixer,i=r.time,a=this._weightInterpolant;a===null&&(a=r._lendControlInterpolant(),this._weightInterpolant=a);let o=a.parameterPositions,s=a.sampleValues;return o[0]=i,s[0]=t,o[1]=i+e,s[1]=n,this}},Rd=new Float32Array(1),zd=class extends rn{constructor(e){super(),this._root=e,this._initMemoryManager(),this._accuIndex=0,this.time=0,this.timeScale=1,typeof __THREE_DEVTOOLS__<`u`&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(`observe`,{detail:this}))}_bindAction(e,t){let n=e._localRoot||this._root,r=e._clip.tracks,i=r.length,a=e._propertyBindings,o=e._interpolants,s=n.uuid,c=this._bindingsByRootAndName,l=c[s];l===void 0&&(l={},c[s]=l);for(let e=0;e!==i;++e){let i=r[e],c=i.name,u=l[c];if(u!==void 0)++u.referenceCount,a[e]=u;else{if(u=a[e],u!==void 0){u._cacheIndex===null&&(++u.referenceCount,this._addInactiveBinding(u,s,c));continue}let r=t&&t._propertyBindings[e].binding.parsedPath;u=new Cd(Fd.create(n,c,r),i.ValueTypeName,i.getValueSize()),++u.referenceCount,this._addInactiveBinding(u,s,c),a[e]=u}o[e].resultBuffer=u.buffer}}_activateAction(e){if(!this._isActiveAction(e)){if(e._cacheIndex===null){let t=(e._localRoot||this._root).uuid,n=e._clip.uuid,r=this._actionsByClip[n];this._bindAction(e,r&&r.knownActions[0]),this._addInactiveAction(e,n,t)}let t=e._propertyBindings;for(let e=0,n=t.length;e!==n;++e){let n=t[e];n.useCount++===0&&(this._lendBinding(n),n.saveOriginalState())}this._lendAction(e)}}_deactivateAction(e){if(this._isActiveAction(e)){let t=e._propertyBindings;for(let e=0,n=t.length;e!==n;++e){let n=t[e];--n.useCount===0&&(n.restoreOriginalState(),this._takeBackBinding(n))}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 t!==null&&t=0;--n)e[n].stop();return this}update(e){e*=this.timeScale;let t=this._actions,n=this._nActiveActions,r=this.time+=e,i=Math.sign(e),a=this._accuIndex^=1;for(let o=0;o!==n;++o)t[o]._update(r,e,i,a);let o=this._bindings,s=this._nActiveBindings;for(let e=0;e!==s;++e)o[e].apply(a);return this}setTime(e){this.time=0;for(let e=0;e=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 this.clampPoint(e,ef).distanceTo(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}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)}},nf=new q,rf=new q,af=new q,of=new q,sf=new q,cf=new q,lf=new q,uf=class{constructor(e=new q,t=new q){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){nf.subVectors(e,this.start),rf.subVectors(this.end,this.start);let n=rf.dot(rf);if(n===0)return 0;let r=rf.dot(nf)/n;return t&&(r=un(r,0,1)),r}closestPointToPoint(e,t,n){let r=this.closestPointToPointParameter(e,t);return this.delta(n).multiplyScalar(r).add(this.start)}distanceSqToLine3(e,t=cf,n=lf){let r=1e-8*1e-8,i,a,o=this.start,s=e.start,c=this.end,l=e.end;af.subVectors(c,o),of.subVectors(l,s),sf.subVectors(o,s);let u=af.dot(af),d=of.dot(of),f=of.dot(sf);if(u<=r&&d<=r)return t.copy(o),n.copy(s),t.sub(n),t.dot(t);if(u<=r)i=0,a=f/d,a=un(a,0,1);else{let e=af.dot(sf);if(d<=r)a=0,i=un(-e/u,0,1);else{let t=af.dot(of),n=u*d-t*t;i=n===0?0:un((t*f-e*d)/n,0,1),a=(t*i+f)/d,a<0?(a=0,i=un(-e/u,0,1)):a>1&&(a=1,i=un((t-e)/u,0,1))}}return t.copy(o).addScaledVector(af,i),n.copy(s).addScaledVector(of,a),t.distanceToSquared(n)}applyMatrix4(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)}},df=new q,ff=class extends Ar{constructor(e,t){super(),this.light=e,this.matrixAutoUpdate=!1,this.color=t,this.type=`SpotLightHelper`;let n=new Ki,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 n=e/32*Math.PI*2,i=t/32*Math.PI*2;r.push(Math.cos(n),Math.sin(n),1,Math.cos(i),Math.sin(i),1)}n.setAttribute(`position`,new Pi(r,3));let i=new Vo({fog:!1,toneMapped:!1});this.cone=new $o(n,i),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),this.parent?(this.parent.updateWorldMatrix(!0),this.matrix.copy(this.parent.matrixWorld).invert().multiply(this.light.matrixWorld)):this.matrix.copy(this.light.matrixWorld),this.matrixWorld.copy(this.light.matrixWorld);let e=this.light.distance?this.light.distance:1e3,t=e*Math.tan(this.light.angle);this.cone.scale.set(t,t,e),df.setFromMatrixPosition(this.light.target.matrixWorld),this.cone.lookAt(df),this.color===void 0?this.cone.material.color.copy(this.light.color):this.cone.material.color.set(this.color)}},pf=new q,mf=new J,hf=new J,gf=class extends $o{constructor(e){let t=_f(e),n=new Ki,r=[],i=[];for(let e=0;e1)for(let n=0;n.99999)this.quaternion.set(0,0,0,1);else if(e.y<-.99999)this.quaternion.set(1,0,0,0);else{Lf.set(e.z,0,-e.x).normalize();let t=Math.acos(e.y);this.quaternion.setFromAxisAngle(Lf,t)}}setLength(e,t=e*.2,n=t*.2){this.line.scale.set(1,Math.max(1e-4,e-t),1),this.line.updateMatrix(),this.cone.scale.set(n,t,n),this.cone.position.y=e,this.cone.updateMatrix()}setColor(e){this.line.material.color.set(e),this.cone.material.color.set(e)}copy(e){return super.copy(e,!1),this.line.copy(e.line),this.cone.copy(e.cone),this}dispose(){this.line.geometry.dispose(),this.line.material.dispose(),this.cone.geometry.dispose(),this.cone.material.dispose()}},Vf=class extends $o{constructor(e=1){let t=[0,0,0,e,0,0,0,0,0,0,e,0,0,0,0,0,0,e],n=[1,0,0,1,.6,0,0,1,0,.6,1,0,0,0,1,0,.6,1],r=new Ki;r.setAttribute(`position`,new Pi(t,3)),r.setAttribute(`color`,new Pi(n,3));let i=new Vo({vertexColors:!0,toneMapped:!1});super(r,i),this.type=`AxesHelper`}setColors(e,t,n){let r=new Y,i=this.geometry.attributes.color.array;return r.set(e),r.toArray(i,0),r.toArray(i,3),r.set(t),r.toArray(i,6),r.toArray(i,9),r.set(n),r.toArray(i,12),r.toArray(i,15),this.geometry.attributes.color.needsUpdate=!0,this}dispose(){this.geometry.dispose(),this.material.dispose()}},Hf=class{constructor(){this.type=`ShapePath`,this.color=new Y,this.subPaths=[],this.currentPath=null}moveTo(e,t){return this.currentPath=new sc,this.subPaths.push(this.currentPath),this.currentPath.moveTo(e,t),this}lineTo(e,t){return this.currentPath.lineTo(e,t),this}quadraticCurveTo(e,t,n,r){return this.currentPath.quadraticCurveTo(e,t,n,r),this}bezierCurveTo(e,t,n,r,i,a){return this.currentPath.bezierCurveTo(e,t,n,r,i,a),this}splineThru(e){return this.currentPath.splineThru(e),this}toShapes(e){function t(e){let t=[];for(let n=0,r=e.length;n2**-52){if(c<0&&(n=t[a],s=-s,o=t[i],c=-c),e.yo.y)continue;if(e.y===n.y){if(e.x===n.x)return!0}else{let t=c*(e.x-n.x)-s*(e.y-n.y);if(t===0)return!0;if(t<0)continue;r=!r}}else{if(e.y!==n.y)continue;if(o.x<=e.x&&e.x<=n.x||n.x<=e.x&&e.x<=o.x)return!0}}return r}let r=Uc.isClockWise,i=this.subPaths;if(i.length===0)return[];let a,o,s,c=[];if(i.length===1)return o=i[0],s=new cc,s.curves=o.curves,c.push(s),c;let l=!r(i[0].getPoints());l=e?!l:l;let u=[],d=[],f=[],p=0,m;d[p]=void 0,f[p]=[];for(let t=0,n=i.length;t1){let e=!1,t=0;for(let e=0,t=d.length;e0&&e===!1&&(f=u)}let h;for(let e=0,t=d.length;et?(e.repeat.x=1,e.repeat.y=n/t,e.offset.x=0,e.offset.y=(1-e.repeat.y)/2):(e.repeat.x=t/n,e.repeat.y=1,e.offset.x=(1-e.repeat.x)/2,e.offset.y=0),e}function Gf(e,t){let n=e.image&&e.image.width?e.image.width/e.image.height:1;return n>t?(e.repeat.x=t/n,e.repeat.y=1,e.offset.x=(1-e.repeat.x)/2,e.offset.y=0):(e.repeat.x=1,e.repeat.y=n/t,e.offset.x=0,e.offset.y=(1-e.repeat.y)/2),e}function Kf(e){return e.repeat.x=1,e.repeat.y=1,e.offset.x=0,e.offset.y=0,e}function qf(e,t,n,r){let i=Jf(r);switch(n){case ce:return e*t;case fe:return e*t/i.components*i.byteLength;case pe:return e*t/i.components*i.byteLength;case me:return e*t*2/i.components*i.byteLength;case he:return e*t*2/i.components*i.byteLength;case H:return e*t*3/i.components*i.byteLength;case le:return e*t*4/i.components*i.byteLength;case _e:return e*t*4/i.components*i.byteLength;case ve:case ye:return Math.floor((e+3)/4)*Math.floor((t+3)/4)*8;case be:case xe:return Math.floor((e+3)/4)*Math.floor((t+3)/4)*16;case U:case we:return Math.max(e,16)*Math.max(t,8)/4;case Se:case Ce:return Math.max(e,8)*Math.max(t,8)/2;case Te:case W:case De:case Oe:return Math.floor((e+3)/4)*Math.floor((t+3)/4)*8;case Ee:case ke:case Ae:return Math.floor((e+3)/4)*Math.floor((t+3)/4)*16;case je:return Math.floor((e+3)/4)*Math.floor((t+3)/4)*16;case Me:return Math.floor((e+4)/5)*Math.floor((t+3)/4)*16;case Ne:return Math.floor((e+4)/5)*Math.floor((t+4)/5)*16;case Pe:return Math.floor((e+5)/6)*Math.floor((t+4)/5)*16;case Fe:return Math.floor((e+5)/6)*Math.floor((t+5)/6)*16;case Ie:return Math.floor((e+7)/8)*Math.floor((t+4)/5)*16;case Le:return Math.floor((e+7)/8)*Math.floor((t+5)/6)*16;case Re:return Math.floor((e+7)/8)*Math.floor((t+7)/8)*16;case ze:return Math.floor((e+9)/10)*Math.floor((t+4)/5)*16;case Be:return Math.floor((e+9)/10)*Math.floor((t+5)/6)*16;case Ve:return Math.floor((e+9)/10)*Math.floor((t+7)/8)*16;case He:return Math.floor((e+9)/10)*Math.floor((t+9)/10)*16;case Ue:return Math.floor((e+11)/12)*Math.floor((t+9)/10)*16;case We:return Math.floor((e+11)/12)*Math.floor((t+11)/12)*16;case Ge:case Ke:case qe:return Math.ceil(e/4)*Math.ceil(t/4)*16;case Je:case Ye:return Math.ceil(e/4)*Math.ceil(t/4)*8;case Xe:case Ze:return Math.ceil(e/4)*Math.ceil(t/4)*16}throw Error(`Unable to determine texture byte length for ${n} format.`)}function Jf(e){switch(e){case L:case ee:return{byteLength:1,components:1};case te:case R:case ne:return{byteLength:2,components:1};case re:case ie:return{byteLength:2,components:4};case B:case z:case V:return{byteLength:4,components:1};case oe:case se:return{byteLength:4,components:3}}throw Error(`Unknown texture type ${e}.`)}var Yf=class{static contain(e,t){return Wf(e,t)}static cover(e,t){return Gf(e,t)}static fill(e){return Kf(e)}static getByteLength(e,t,n,r){return qf(e,t,n,r)}};typeof __THREE_DEVTOOLS__<`u`&&__THREE_DEVTOOLS__.dispatchEvent(new CustomEvent(`register`,{detail:{revision:`184`}})),typeof window<`u`&&(window.__THREE__?G(`WARNING: Multiple instances of Three.js being imported.`):window.__THREE__=`184`);var Xf=s({ACESFilmicToneMapping:()=>4,AddEquation:()=>100,AddOperation:()=>2,AdditiveAnimationBlendMode:()=>lt,AdditiveBlending:()=>2,AgXToneMapping:()=>6,AlphaFormat:()=>ce,AlwaysCompare:()=>519,AlwaysDepth:()=>1,AlwaysStencilFunc:()=>519,AmbientLight:()=>Iu,AnimationAction:()=>Ld,AnimationClip:()=>Zl,AnimationLoader:()=>cu,AnimationMixer:()=>zd,AnimationObjectGroup:()=>Id,AnimationUtils:()=>Ll,ArcCurve:()=>Ps,ArrayCamera:()=>sd,ArrowHelper:()=>Bf,AttachedBindMode:()=>S,Audio:()=>gd,AudioAnalyser:()=>Sd,AudioContext:()=>Qu,AudioListener:()=>hd,AudioLoader:()=>$u,AxesHelper:()=>Vf,BackSide:()=>1,BasicDepthPacking:()=>ut,BasicShadowMap:()=>0,BatchedMesh:()=>Bo,BezierInterpolant:()=>Hl,Bone:()=>Xa,BooleanKeyframeTrack:()=>Wl,Box2:()=>tf,Box3:()=>ni,Box3Helper:()=>Ff,BoxGeometry:()=>bs,BoxHelper:()=>Pf,BufferAttribute:()=>Ti,BufferGeometry:()=>Ki,BufferGeometryLoader:()=>Uu,ByteType:()=>ee,Cache:()=>eu,Camera:()=>wu,CameraHelper:()=>jf,CanvasTexture:()=>hs,CapsuleGeometry:()=>xs,CatmullRomCurve3:()=>Vs,CineonToneMapping:()=>3,CircleGeometry:()=>Ss,ClampToEdgeWrapping:()=>T,Clock:()=>Xd,Color:()=>Y,ColorKeyframeTrack:()=>Gl,ColorManagement:()=>Bn,Compatibility:()=>Bt,CompressedArrayTexture:()=>fs,CompressedCubeTexture:()=>ps,CompressedTexture:()=>ds,CompressedTextureLoader:()=>lu,ConeGeometry:()=>ws,ConstantAlphaFactor:()=>213,ConstantColorFactor:()=>211,Controls:()=>Uf,CubeCamera:()=>od,CubeDepthTexture:()=>vs,CubeReflectionMapping:()=>301,CubeRefractionMapping:()=>302,CubeTexture:()=>ms,CubeTextureLoader:()=>fu,CubeUVReflectionMapping:()=>306,CubicBezierCurve:()=>Qs,CubicBezierCurve3:()=>$s,CubicInterpolant:()=>zl,CullFaceBack:()=>1,CullFaceFront:()=>2,CullFaceFrontBack:()=>3,CullFaceNone:()=>0,Curve:()=>Ms,CurvePath:()=>oc,CustomBlending:()=>5,CustomToneMapping:()=>5,CylinderGeometry:()=>Cs,Cylindrical:()=>Qd,Data3DTexture:()=>nr,DataArrayTexture:()=>er,DataTexture:()=>Za,DataTextureLoader:()=>pu,DataUtils:()=>xi,DecrementStencilOp:()=>xt,DecrementWrapStencilOp:()=>Ct,DefaultLoadingManager:()=>ru,DepthFormat:()=>ue,DepthStencilFormat:()=>de,DepthTexture:()=>_s,DetachedBindMode:()=>C,DirectionalLight:()=>Fu,DirectionalLightHelper:()=>Of,DiscreteInterpolant:()=>Vl,DodecahedronGeometry:()=>Es,DoubleSide:()=>2,DstAlphaFactor:()=>206,DstColorFactor:()=>208,DynamicCopyUsage:()=>Mt,DynamicDrawUsage:()=>Et,DynamicReadUsage:()=>kt,EdgesGeometry:()=>js,EllipseCurve:()=>Ns,EqualCompare:()=>514,EqualDepth:()=>4,EqualStencilFunc:()=>514,EquirectangularReflectionMapping:()=>303,EquirectangularRefractionMapping:()=>304,Euler:()=>pr,EventDispatcher:()=>rn,ExternalTexture:()=>ys,ExtrudeGeometry:()=>Kc,FileLoader:()=>su,Float16BufferAttribute:()=>Ni,Float32BufferAttribute:()=>Pi,FloatType:()=>V,Fog:()=>Br,FogExp2:()=>zr,FramebufferTexture:()=>us,FrontSide:()=>0,Frustum:()=>vo,FrustumArray:()=>xo,GLBufferAttribute:()=>Gd,GLSL1:()=>`100`,GLSL3:()=>Pt,GreaterCompare:()=>516,GreaterDepth:()=>6,GreaterEqualCompare:()=>518,GreaterEqualDepth:()=>5,GreaterEqualStencilFunc:()=>518,GreaterStencilFunc:()=>516,GridHelper:()=>Cf,Group:()=>jr,HTMLTexture:()=>gs,HalfFloatType:()=>ne,HemisphereLight:()=>gu,HemisphereLightHelper:()=>Sf,IcosahedronGeometry:()=>Yc,ImageBitmapLoader:()=>Xu,ImageLoader:()=>du,ImageUtils:()=>Wn,IncrementStencilOp:()=>bt,IncrementWrapStencilOp:()=>St,InstancedBufferAttribute:()=>to,InstancedBufferGeometry:()=>Hu,InstancedInterleavedBuffer:()=>Wd,InstancedMesh:()=>lo,Int16BufferAttribute:()=>ki,Int32BufferAttribute:()=>ji,Int8BufferAttribute:()=>Ei,IntType:()=>z,InterleavedBuffer:()=>qi,InterleavedBufferAttribute:()=>Yi,Interpolant:()=>Rl,InterpolateBezier:()=>it,InterpolateDiscrete:()=>tt,InterpolateLinear:()=>nt,InterpolateSmooth:()=>rt,InterpolationSamplingMode:()=>zt,InterpolationSamplingType:()=>Rt,InvertStencilOp:()=>wt,KeepStencilOp:()=>vt,KeyframeTrack:()=>Ul,LOD:()=>ga,LatheGeometry:()=>Xc,Layers:()=>mr,LessCompare:()=>513,LessDepth:()=>2,LessEqualCompare:()=>515,LessEqualDepth:()=>3,LessEqualStencilFunc:()=>515,LessStencilFunc:()=>513,Light:()=>hu,LightProbe:()=>zu,Line:()=>Yo,Line3:()=>uf,LineBasicMaterial:()=>Vo,LineCurve:()=>ec,LineCurve3:()=>tc,LineDashedMaterial:()=>Al,LineLoop:()=>es,LineSegments:()=>$o,LinearFilter:()=>M,LinearInterpolant:()=>Bl,LinearMipMapLinearFilter:()=>I,LinearMipMapNearestFilter:()=>P,LinearMipmapLinearFilter:()=>F,LinearMipmapNearestFilter:()=>N,LinearSRGBColorSpace:()=>ht,LinearToneMapping:()=>1,LinearTransfer:()=>gt,Loader:()=>iu,LoaderUtils:()=>Vu,LoadingManager:()=>nu,LoopOnce:()=>Qe,LoopPingPong:()=>et,LoopRepeat:()=>$e,MOUSE:()=>b,Material:()=>Zi,MaterialBlending:()=>6,MaterialLoader:()=>Bu,MathUtils:()=>jn,Matrix2:()=>$d,Matrix3:()=>Fn,Matrix4:()=>J,MaxEquation:()=>104,Mesh:()=>La,MeshBasicMaterial:()=>Ta,MeshDepthMaterial:()=>Dl,MeshDistanceMaterial:()=>Ol,MeshLambertMaterial:()=>El,MeshMatcapMaterial:()=>kl,MeshNormalMaterial:()=>Tl,MeshPhongMaterial:()=>Cl,MeshPhysicalMaterial:()=>Sl,MeshStandardMaterial:()=>xl,MeshToonMaterial:()=>wl,MinEquation:()=>103,MirroredRepeatWrapping:()=>E,MixOperation:()=>1,MultiplyBlending:()=>4,MultiplyOperation:()=>0,NearestFilter:()=>D,NearestMipMapLinearFilter:()=>j,NearestMipMapNearestFilter:()=>k,NearestMipmapLinearFilter:()=>A,NearestMipmapNearestFilter:()=>O,NeutralToneMapping:()=>7,NeverCompare:()=>512,NeverDepth:()=>0,NeverStencilFunc:()=>512,NoBlending:()=>0,NoColorSpace:()=>``,NoNormalPacking:()=>``,NoToneMapping:()=>0,NormalAnimationBlendMode:()=>ct,NormalBlending:()=>1,NormalGAPacking:()=>`ga`,NormalRGPacking:()=>`rg`,NotEqualCompare:()=>517,NotEqualDepth:()=>7,NotEqualStencilFunc:()=>517,NumberKeyframeTrack:()=>Kl,Object3D:()=>Ar,ObjectLoader:()=>Gu,ObjectSpaceNormalMap:()=>1,OctahedronGeometry:()=>Zc,OneFactor:()=>201,OneMinusConstantAlphaFactor:()=>214,OneMinusConstantColorFactor:()=>212,OneMinusDstAlphaFactor:()=>207,OneMinusDstColorFactor:()=>209,OneMinusSrcAlphaFactor:()=>205,OneMinusSrcColorFactor:()=>203,OrthographicCamera:()=>Nu,PCFShadowMap:()=>1,PCFSoftShadowMap:()=>2,PMREMGenerator:()=>bp,Path:()=>sc,PerspectiveCamera:()=>Ou,Plane:()=>mo,PlaneGeometry:()=>Qc,PlaneHelper:()=>If,PointLight:()=>Mu,PointLightHelper:()=>vf,Points:()=>os,PointsMaterial:()=>ts,PolarGridHelper:()=>wf,PolyhedronGeometry:()=>Ts,PositionalAudio:()=>xd,PropertyBinding:()=>Fd,PropertyMixer:()=>Cd,QuadraticBezierCurve:()=>nc,QuadraticBezierCurve3:()=>rc,Quaternion:()=>Mn,QuaternionKeyframeTrack:()=>Jl,QuaternionLinearInterpolant:()=>ql,R11_EAC_Format:()=>De,RED_GREEN_RGTC2_Format:()=>Xe,RED_RGTC1_Format:()=>Je,REVISION:()=>`184`,RG11_EAC_Format:()=>ke,RGBADepthPacking:()=>dt,RGBAFormat:()=>le,RGBAIntegerFormat:()=>_e,RGBA_ASTC_10x10_Format:()=>He,RGBA_ASTC_10x5_Format:()=>ze,RGBA_ASTC_10x6_Format:()=>Be,RGBA_ASTC_10x8_Format:()=>Ve,RGBA_ASTC_12x10_Format:()=>Ue,RGBA_ASTC_12x12_Format:()=>We,RGBA_ASTC_4x4_Format:()=>je,RGBA_ASTC_5x4_Format:()=>Me,RGBA_ASTC_5x5_Format:()=>Ne,RGBA_ASTC_6x5_Format:()=>Pe,RGBA_ASTC_6x6_Format:()=>Fe,RGBA_ASTC_8x5_Format:()=>Ie,RGBA_ASTC_8x6_Format:()=>Le,RGBA_ASTC_8x8_Format:()=>Re,RGBA_BPTC_Format:()=>Ge,RGBA_ETC2_EAC_Format:()=>Ee,RGBA_PVRTC_2BPPV1_Format:()=>we,RGBA_PVRTC_4BPPV1_Format:()=>Ce,RGBA_S3TC_DXT1_Format:()=>ye,RGBA_S3TC_DXT3_Format:()=>be,RGBA_S3TC_DXT5_Format:()=>xe,RGBDepthPacking:()=>ft,RGBFormat:()=>H,RGBIntegerFormat:()=>ge,RGB_BPTC_SIGNED_Format:()=>Ke,RGB_BPTC_UNSIGNED_Format:()=>qe,RGB_ETC1_Format:()=>Te,RGB_ETC2_Format:()=>W,RGB_PVRTC_2BPPV1_Format:()=>U,RGB_PVRTC_4BPPV1_Format:()=>Se,RGB_S3TC_DXT1_Format:()=>ve,RGDepthPacking:()=>pt,RGFormat:()=>me,RGIntegerFormat:()=>he,RawShaderMaterial:()=>bl,Ray:()=>wa,Raycaster:()=>qd,RectAreaLight:()=>Lu,RedFormat:()=>fe,RedIntegerFormat:()=>pe,ReinhardToneMapping:()=>2,RenderTarget:()=>Qn,RenderTarget3D:()=>Bd,RepeatWrapping:()=>w,ReplaceStencilOp:()=>yt,ReverseSubtractEquation:()=>102,RingGeometry:()=>$c,SIGNED_R11_EAC_Format:()=>Oe,SIGNED_RED_GREEN_RGTC2_Format:()=>Ze,SIGNED_RED_RGTC1_Format:()=>Ye,SIGNED_RG11_EAC_Format:()=>Ae,SRGBColorSpace:()=>mt,SRGBTransfer:()=>_t,Scene:()=>Vr,ShaderChunk:()=>$f,ShaderLib:()=>ep,ShaderMaterial:()=>yl,ShadowMaterial:()=>ul,Shape:()=>cc,ShapeGeometry:()=>el,ShapePath:()=>Hf,ShapeUtils:()=>Uc,ShortType:()=>R,Skeleton:()=>eo,SkeletonHelper:()=>gf,SkinnedMesh:()=>Ya,Source:()=>Kn,Sphere:()=>Ri,SphereGeometry:()=>nl,Spherical:()=>Zd,SphericalHarmonics3:()=>Ru,SplineCurve:()=>ic,SpotLight:()=>Au,SpotLightHelper:()=>ff,Sprite:()=>fa,SpriteMaterial:()=>Qi,SrcAlphaFactor:()=>204,SrcAlphaSaturateFactor:()=>210,SrcColorFactor:()=>202,StaticCopyUsage:()=>jt,StaticDrawUsage:()=>Tt,StaticReadUsage:()=>Ot,StereoCamera:()=>rd,StreamCopyUsage:()=>Nt,StreamDrawUsage:()=>Dt,StreamReadUsage:()=>At,StringKeyframeTrack:()=>Yl,SubtractEquation:()=>101,SubtractiveBlending:()=>3,TOUCH:()=>x,TangentSpaceNormalMap:()=>0,TetrahedronGeometry:()=>rl,Texture:()=>Xn,TextureLoader:()=>mu,TextureUtils:()=>Yf,Timer:()=>cd,TimestampQuery:()=>Lt,TorusGeometry:()=>il,TorusKnotGeometry:()=>al,Triangle:()=>ti,TriangleFanDrawMode:()=>2,TriangleStripDrawMode:()=>1,TrianglesDrawMode:()=>0,TubeGeometry:()=>ol,UVMapping:()=>300,Uint16BufferAttribute:()=>Ai,Uint32BufferAttribute:()=>Mi,Uint8BufferAttribute:()=>Di,Uint8ClampedBufferAttribute:()=>Oi,Uniform:()=>Vd,UniformsGroup:()=>Ud,UniformsLib:()=>X,UniformsUtils:()=>gl,UnsignedByteType:()=>L,UnsignedInt101111Type:()=>se,UnsignedInt248Type:()=>ae,UnsignedInt5999Type:()=>oe,UnsignedIntType:()=>B,UnsignedShort4444Type:()=>re,UnsignedShort5551Type:()=>ie,UnsignedShortType:()=>te,VSMShadowMap:()=>3,Vector2:()=>K,Vector3:()=>q,Vector4:()=>Zn,VectorKeyframeTrack:()=>Xl,VideoFrameTexture:()=>ls,VideoTexture:()=>cs,WebGL3DRenderTarget:()=>rr,WebGLArrayRenderTarget:()=>tr,WebGLCoordinateSystem:()=>Ft,WebGLCubeRenderTarget:()=>kp,WebGLRenderTarget:()=>$n,WebGLRenderer:()=>pg,WebGLUtils:()=>tg,WebGPUCoordinateSystem:()=>It,WebXRController:()=>Nr,WireframeGeometry:()=>sl,WrapAroundEnding:()=>st,ZeroCurvatureEnding:()=>at,ZeroFactor:()=>200,ZeroSlopeEnding:()=>ot,ZeroStencilOp:()=>0,createCanvasElement:()=>Kt,error:()=>$t,getConsoleFunction:()=>Xt,log:()=>Zt,setConsoleFunction:()=>Yt,warn:()=>G,warnOnce:()=>en});function Zf(){let e=null,t=!1,n=null,r=null;function i(t,a){n(t,a),r=e.requestAnimationFrame(i)}return{start:function(){t!==!0&&n!==null&&e!==null&&(r=e.requestAnimationFrame(i),t=!0)},stop:function(){e!==null&&e.cancelAnimationFrame(r),t=!1},setAnimationLoop:function(e){n=e},setContext:function(t){e=t}}}function Qf(e){let t=new WeakMap;function n(t,n){let r=t.array,i=t.usage,a=r.byteLength,o=e.createBuffer();e.bindBuffer(n,o),e.bufferData(n,r,i),t.onUploadCallback();let s;if(r instanceof Float32Array)s=e.FLOAT;else if(typeof Float16Array<`u`&&r instanceof Float16Array)s=e.HALF_FLOAT;else if(r instanceof Uint16Array)s=t.isFloat16BufferAttribute?e.HALF_FLOAT:e.UNSIGNED_SHORT;else if(r instanceof Int16Array)s=e.SHORT;else if(r instanceof Uint32Array)s=e.UNSIGNED_INT;else if(r instanceof Int32Array)s=e.INT;else if(r instanceof Int8Array)s=e.BYTE;else if(r instanceof Uint8Array)s=e.UNSIGNED_BYTE;else if(r instanceof Uint8ClampedArray)s=e.UNSIGNED_BYTE;else throw Error(`THREE.WebGLAttributes: Unsupported buffer data format: `+r);return{buffer:o,type:s,bytesPerElement:r.BYTES_PER_ELEMENT,version:t.version,size:a}}function r(t,n,r){let i=n.array,a=n.updateRanges;if(e.bindBuffer(r,t),a.length===0)e.bufferSubData(r,0,i);else{a.sort((e,t)=>e.start-t.start);let t=0;for(let e=1;e 0 - vec4 plane; - #ifdef ALPHA_TO_COVERAGE - float distanceToPlane, distanceGradient; - float clipOpacity = 1.0; - #pragma unroll_loop_start - for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) { - plane = clippingPlanes[ i ]; - distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w; - distanceGradient = fwidth( distanceToPlane ) / 2.0; - clipOpacity *= smoothstep( - distanceGradient, distanceGradient, distanceToPlane ); - if ( clipOpacity == 0.0 ) discard; - } - #pragma unroll_loop_end - #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES - float unionClipOpacity = 1.0; - #pragma unroll_loop_start - for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) { - plane = clippingPlanes[ i ]; - distanceToPlane = - dot( vClipPosition, plane.xyz ) + plane.w; - distanceGradient = fwidth( distanceToPlane ) / 2.0; - unionClipOpacity *= 1.0 - smoothstep( - distanceGradient, distanceGradient, distanceToPlane ); - } - #pragma unroll_loop_end - clipOpacity *= 1.0 - unionClipOpacity; - #endif - diffuseColor.a *= clipOpacity; - if ( diffuseColor.a == 0.0 ) discard; - #else - #pragma unroll_loop_start - for ( int i = 0; i < UNION_CLIPPING_PLANES; i ++ ) { - plane = clippingPlanes[ i ]; - if ( dot( vClipPosition, plane.xyz ) > plane.w ) discard; - } - #pragma unroll_loop_end - #if UNION_CLIPPING_PLANES < NUM_CLIPPING_PLANES - bool clipped = true; - #pragma unroll_loop_start - for ( int i = UNION_CLIPPING_PLANES; i < NUM_CLIPPING_PLANES; i ++ ) { - plane = clippingPlanes[ i ]; - clipped = ( dot( vClipPosition, plane.xyz ) > plane.w ) && clipped; - } - #pragma unroll_loop_end - if ( clipped ) discard; - #endif - #endif -#endif`,clipping_planes_pars_fragment:`#if NUM_CLIPPING_PLANES > 0 - varying vec3 vClipPosition; - uniform vec4 clippingPlanes[ NUM_CLIPPING_PLANES ]; -#endif`,clipping_planes_pars_vertex:`#if NUM_CLIPPING_PLANES > 0 - varying vec3 vClipPosition; -#endif`,clipping_planes_vertex:`#if NUM_CLIPPING_PLANES > 0 - vClipPosition = - mvPosition.xyz; -#endif`,color_fragment:`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) - diffuseColor *= vColor; -#endif`,color_pars_fragment:`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) - varying vec4 vColor; -#endif`,color_pars_vertex:`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) - varying vec4 vColor; -#endif`,color_vertex:`#if defined( USE_COLOR ) || defined( USE_COLOR_ALPHA ) || defined( USE_INSTANCING_COLOR ) || defined( USE_BATCHING_COLOR ) - vColor = vec4( 1.0 ); -#endif -#ifdef USE_COLOR_ALPHA - vColor *= color; -#elif defined( USE_COLOR ) - vColor.rgb *= color; -#endif -#ifdef USE_INSTANCING_COLOR - vColor.rgb *= instanceColor.rgb; -#endif -#ifdef USE_BATCHING_COLOR - vColor *= getBatchingColor( getIndirectIndex( gl_DrawID ) ); -#endif`,common:`#define PI 3.141592653589793 -#define PI2 6.283185307179586 -#define PI_HALF 1.5707963267948966 -#define RECIPROCAL_PI 0.3183098861837907 -#define RECIPROCAL_PI2 0.15915494309189535 -#define EPSILON 1e-6 -#ifndef saturate -#define saturate( a ) clamp( a, 0.0, 1.0 ) -#endif -#define whiteComplement( a ) ( 1.0 - saturate( a ) ) -float pow2( const in float x ) { return x*x; } -vec3 pow2( const in vec3 x ) { return x*x; } -float pow3( const in float x ) { return x*x*x; } -float pow4( const in float x ) { float x2 = x*x; return x2*x2; } -float max3( const in vec3 v ) { return max( max( v.x, v.y ), v.z ); } -float average( const in vec3 v ) { return dot( v, vec3( 0.3333333 ) ); } -highp float rand( const in vec2 uv ) { - const highp float a = 12.9898, b = 78.233, c = 43758.5453; - highp float dt = dot( uv.xy, vec2( a,b ) ), sn = mod( dt, PI ); - return fract( sin( sn ) * c ); -} -#ifdef HIGH_PRECISION - float precisionSafeLength( vec3 v ) { return length( v ); } -#else - float precisionSafeLength( vec3 v ) { - float maxComponent = max3( abs( v ) ); - return length( v / maxComponent ) * maxComponent; - } -#endif -struct IncidentLight { - vec3 color; - vec3 direction; - bool visible; -}; -struct ReflectedLight { - vec3 directDiffuse; - vec3 directSpecular; - vec3 indirectDiffuse; - vec3 indirectSpecular; -}; -#ifdef USE_ALPHAHASH - varying vec3 vPosition; -#endif -vec3 transformDirection( in vec3 dir, in mat4 matrix ) { - return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); -} -vec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) { - return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz ); -} -bool isPerspectiveMatrix( mat4 m ) { - return m[ 2 ][ 3 ] == - 1.0; -} -vec2 equirectUv( in vec3 dir ) { - float u = atan( dir.z, dir.x ) * RECIPROCAL_PI2 + 0.5; - float v = asin( clamp( dir.y, - 1.0, 1.0 ) ) * RECIPROCAL_PI + 0.5; - return vec2( u, v ); -} -vec3 BRDF_Lambert( const in vec3 diffuseColor ) { - return RECIPROCAL_PI * diffuseColor; -} -vec3 F_Schlick( const in vec3 f0, const in float f90, const in float dotVH ) { - float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); - return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); -} -float F_Schlick( const in float f0, const in float f90, const in float dotVH ) { - float fresnel = exp2( ( - 5.55473 * dotVH - 6.98316 ) * dotVH ); - return f0 * ( 1.0 - fresnel ) + ( f90 * fresnel ); -} // validated`,cube_uv_reflection_fragment:`#ifdef ENVMAP_TYPE_CUBE_UV - #define cubeUV_minMipLevel 4.0 - #define cubeUV_minTileSize 16.0 - float getFace( vec3 direction ) { - vec3 absDirection = abs( direction ); - float face = - 1.0; - if ( absDirection.x > absDirection.z ) { - if ( absDirection.x > absDirection.y ) - face = direction.x > 0.0 ? 0.0 : 3.0; - else - face = direction.y > 0.0 ? 1.0 : 4.0; - } else { - if ( absDirection.z > absDirection.y ) - face = direction.z > 0.0 ? 2.0 : 5.0; - else - face = direction.y > 0.0 ? 1.0 : 4.0; - } - return face; - } - vec2 getUV( vec3 direction, float face ) { - vec2 uv; - if ( face == 0.0 ) { - uv = vec2( direction.z, direction.y ) / abs( direction.x ); - } else if ( face == 1.0 ) { - uv = vec2( - direction.x, - direction.z ) / abs( direction.y ); - } else if ( face == 2.0 ) { - uv = vec2( - direction.x, direction.y ) / abs( direction.z ); - } else if ( face == 3.0 ) { - uv = vec2( - direction.z, direction.y ) / abs( direction.x ); - } else if ( face == 4.0 ) { - uv = vec2( - direction.x, direction.z ) / abs( direction.y ); - } else { - uv = vec2( direction.x, direction.y ) / abs( direction.z ); - } - return 0.5 * ( uv + 1.0 ); - } - vec3 bilinearCubeUV( sampler2D envMap, vec3 direction, float mipInt ) { - float face = getFace( direction ); - float filterInt = max( cubeUV_minMipLevel - mipInt, 0.0 ); - mipInt = max( mipInt, cubeUV_minMipLevel ); - float faceSize = exp2( mipInt ); - highp vec2 uv = getUV( direction, face ) * ( faceSize - 2.0 ) + 1.0; - if ( face > 2.0 ) { - uv.y += faceSize; - face -= 3.0; - } - uv.x += face * faceSize; - uv.x += filterInt * 3.0 * cubeUV_minTileSize; - uv.y += 4.0 * ( exp2( CUBEUV_MAX_MIP ) - faceSize ); - uv.x *= CUBEUV_TEXEL_WIDTH; - uv.y *= CUBEUV_TEXEL_HEIGHT; - #ifdef texture2DGradEXT - return texture2DGradEXT( envMap, uv, vec2( 0.0 ), vec2( 0.0 ) ).rgb; - #else - return texture2D( envMap, uv ).rgb; - #endif - } - #define cubeUV_r0 1.0 - #define cubeUV_m0 - 2.0 - #define cubeUV_r1 0.8 - #define cubeUV_m1 - 1.0 - #define cubeUV_r4 0.4 - #define cubeUV_m4 2.0 - #define cubeUV_r5 0.305 - #define cubeUV_m5 3.0 - #define cubeUV_r6 0.21 - #define cubeUV_m6 4.0 - float roughnessToMip( float roughness ) { - float mip = 0.0; - if ( roughness >= cubeUV_r1 ) { - mip = ( cubeUV_r0 - roughness ) * ( cubeUV_m1 - cubeUV_m0 ) / ( cubeUV_r0 - cubeUV_r1 ) + cubeUV_m0; - } else if ( roughness >= cubeUV_r4 ) { - mip = ( cubeUV_r1 - roughness ) * ( cubeUV_m4 - cubeUV_m1 ) / ( cubeUV_r1 - cubeUV_r4 ) + cubeUV_m1; - } else if ( roughness >= cubeUV_r5 ) { - mip = ( cubeUV_r4 - roughness ) * ( cubeUV_m5 - cubeUV_m4 ) / ( cubeUV_r4 - cubeUV_r5 ) + cubeUV_m4; - } else if ( roughness >= cubeUV_r6 ) { - mip = ( cubeUV_r5 - roughness ) * ( cubeUV_m6 - cubeUV_m5 ) / ( cubeUV_r5 - cubeUV_r6 ) + cubeUV_m5; - } else { - mip = - 2.0 * log2( 1.16 * roughness ); } - return mip; - } - vec4 textureCubeUV( sampler2D envMap, vec3 sampleDir, float roughness ) { - float mip = clamp( roughnessToMip( roughness ), cubeUV_m0, CUBEUV_MAX_MIP ); - float mipF = fract( mip ); - float mipInt = floor( mip ); - vec3 color0 = bilinearCubeUV( envMap, sampleDir, mipInt ); - if ( mipF == 0.0 ) { - return vec4( color0, 1.0 ); - } else { - vec3 color1 = bilinearCubeUV( envMap, sampleDir, mipInt + 1.0 ); - return vec4( mix( color0, color1, mipF ), 1.0 ); - } - } -#endif`,defaultnormal_vertex:`vec3 transformedNormal = objectNormal; -#ifdef USE_TANGENT - vec3 transformedTangent = objectTangent; -#endif -#ifdef USE_BATCHING - mat3 bm = mat3( batchingMatrix ); - transformedNormal /= vec3( dot( bm[ 0 ], bm[ 0 ] ), dot( bm[ 1 ], bm[ 1 ] ), dot( bm[ 2 ], bm[ 2 ] ) ); - transformedNormal = bm * transformedNormal; - #ifdef USE_TANGENT - transformedTangent = bm * transformedTangent; - #endif -#endif -#ifdef USE_INSTANCING - mat3 im = mat3( instanceMatrix ); - transformedNormal /= vec3( dot( im[ 0 ], im[ 0 ] ), dot( im[ 1 ], im[ 1 ] ), dot( im[ 2 ], im[ 2 ] ) ); - transformedNormal = im * transformedNormal; - #ifdef USE_TANGENT - transformedTangent = im * transformedTangent; - #endif -#endif -transformedNormal = normalMatrix * transformedNormal; -#ifdef FLIP_SIDED - transformedNormal = - transformedNormal; -#endif -#ifdef USE_TANGENT - transformedTangent = ( modelViewMatrix * vec4( transformedTangent, 0.0 ) ).xyz; - #ifdef FLIP_SIDED - transformedTangent = - transformedTangent; - #endif -#endif`,displacementmap_pars_vertex:`#ifdef USE_DISPLACEMENTMAP - uniform sampler2D displacementMap; - uniform float displacementScale; - uniform float displacementBias; -#endif`,displacementmap_vertex:`#ifdef USE_DISPLACEMENTMAP - transformed += normalize( objectNormal ) * ( texture2D( displacementMap, vDisplacementMapUv ).x * displacementScale + displacementBias ); -#endif`,emissivemap_fragment:`#ifdef USE_EMISSIVEMAP - vec4 emissiveColor = texture2D( emissiveMap, vEmissiveMapUv ); - #ifdef DECODE_VIDEO_TEXTURE_EMISSIVE - emissiveColor = sRGBTransferEOTF( emissiveColor ); - #endif - totalEmissiveRadiance *= emissiveColor.rgb; -#endif`,emissivemap_pars_fragment:`#ifdef USE_EMISSIVEMAP - uniform sampler2D emissiveMap; -#endif`,colorspace_fragment:`gl_FragColor = linearToOutputTexel( gl_FragColor );`,colorspace_pars_fragment:`vec4 LinearTransferOETF( in vec4 value ) { - return value; -} -vec4 sRGBTransferEOTF( 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 ); -} -vec4 sRGBTransferOETF( 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.a ); -}`,envmap_fragment:`#ifdef USE_ENVMAP - #ifdef ENV_WORLDPOS - vec3 cameraToFrag; - if ( isOrthographic ) { - cameraToFrag = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) ); - } else { - cameraToFrag = normalize( vWorldPosition - cameraPosition ); - } - vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); - #ifdef ENVMAP_MODE_REFLECTION - vec3 reflectVec = reflect( cameraToFrag, worldNormal ); - #else - vec3 reflectVec = refract( cameraToFrag, worldNormal, refractionRatio ); - #endif - #else - vec3 reflectVec = vReflect; - #endif - #ifdef ENVMAP_TYPE_CUBE - vec4 envColor = textureCube( envMap, envMapRotation * reflectVec ); - #ifdef ENVMAP_BLENDING_MULTIPLY - outgoingLight = mix( outgoingLight, outgoingLight * envColor.xyz, specularStrength * reflectivity ); - #elif defined( ENVMAP_BLENDING_MIX ) - outgoingLight = mix( outgoingLight, envColor.xyz, specularStrength * reflectivity ); - #elif defined( ENVMAP_BLENDING_ADD ) - outgoingLight += envColor.xyz * specularStrength * reflectivity; - #endif - #endif -#endif`,envmap_common_pars_fragment:`#ifdef USE_ENVMAP - uniform float envMapIntensity; - uniform mat3 envMapRotation; - #ifdef ENVMAP_TYPE_CUBE - uniform samplerCube envMap; - #else - uniform sampler2D envMap; - #endif -#endif`,envmap_pars_fragment:`#ifdef USE_ENVMAP - uniform float reflectivity; - #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) - #define ENV_WORLDPOS - #endif - #ifdef ENV_WORLDPOS - varying vec3 vWorldPosition; - uniform float refractionRatio; - #else - varying vec3 vReflect; - #endif -#endif`,envmap_pars_vertex:`#ifdef USE_ENVMAP - #if defined( USE_BUMPMAP ) || defined( USE_NORMALMAP ) || defined( PHONG ) || defined( LAMBERT ) - #define ENV_WORLDPOS - #endif - #ifdef ENV_WORLDPOS - - varying vec3 vWorldPosition; - #else - varying vec3 vReflect; - uniform float refractionRatio; - #endif -#endif`,envmap_physical_pars_fragment:`#ifdef USE_ENVMAP - vec3 getIBLIrradiance( const in vec3 normal ) { - #ifdef ENVMAP_TYPE_CUBE_UV - vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); - vec4 envMapColor = textureCubeUV( envMap, envMapRotation * worldNormal, 1.0 ); - return PI * envMapColor.rgb * envMapIntensity; - #else - return vec3( 0.0 ); - #endif - } - vec3 getIBLRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness ) { - #ifdef ENVMAP_TYPE_CUBE_UV - vec3 reflectVec = reflect( - viewDir, normal ); - reflectVec = normalize( mix( reflectVec, normal, pow4( roughness ) ) ); - reflectVec = inverseTransformDirection( reflectVec, viewMatrix ); - vec4 envMapColor = textureCubeUV( envMap, envMapRotation * reflectVec, roughness ); - return envMapColor.rgb * envMapIntensity; - #else - return vec3( 0.0 ); - #endif - } - #ifdef USE_ANISOTROPY - vec3 getIBLAnisotropyRadiance( const in vec3 viewDir, const in vec3 normal, const in float roughness, const in vec3 bitangent, const in float anisotropy ) { - #ifdef ENVMAP_TYPE_CUBE_UV - vec3 bentNormal = cross( bitangent, viewDir ); - bentNormal = normalize( cross( bentNormal, bitangent ) ); - bentNormal = normalize( mix( bentNormal, normal, pow2( pow2( 1.0 - anisotropy * ( 1.0 - roughness ) ) ) ) ); - return getIBLRadiance( viewDir, bentNormal, roughness ); - #else - return vec3( 0.0 ); - #endif - } - #endif -#endif`,envmap_vertex:`#ifdef USE_ENVMAP - #ifdef ENV_WORLDPOS - vWorldPosition = worldPosition.xyz; - #else - vec3 cameraToVertex; - if ( isOrthographic ) { - cameraToVertex = normalize( vec3( - viewMatrix[ 0 ][ 2 ], - viewMatrix[ 1 ][ 2 ], - viewMatrix[ 2 ][ 2 ] ) ); - } else { - cameraToVertex = normalize( worldPosition.xyz - cameraPosition ); - } - vec3 worldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); - #ifdef ENVMAP_MODE_REFLECTION - vReflect = reflect( cameraToVertex, worldNormal ); - #else - vReflect = refract( cameraToVertex, worldNormal, refractionRatio ); - #endif - #endif -#endif`,fog_vertex:`#ifdef USE_FOG - vFogDepth = - mvPosition.z; -#endif`,fog_pars_vertex:`#ifdef USE_FOG - varying float vFogDepth; -#endif`,fog_fragment:`#ifdef USE_FOG - #ifdef FOG_EXP2 - float fogFactor = 1.0 - exp( - fogDensity * fogDensity * vFogDepth * vFogDepth ); - #else - float fogFactor = smoothstep( fogNear, fogFar, vFogDepth ); - #endif - gl_FragColor.rgb = mix( gl_FragColor.rgb, fogColor, fogFactor ); -#endif`,fog_pars_fragment:`#ifdef USE_FOG - uniform vec3 fogColor; - varying float vFogDepth; - #ifdef FOG_EXP2 - uniform float fogDensity; - #else - uniform float fogNear; - uniform float fogFar; - #endif -#endif`,gradientmap_pars_fragment:`#ifdef USE_GRADIENTMAP - uniform sampler2D gradientMap; -#endif -vec3 getGradientIrradiance( vec3 normal, vec3 lightDirection ) { - float dotNL = dot( normal, lightDirection ); - vec2 coord = vec2( dotNL * 0.5 + 0.5, 0.0 ); - #ifdef USE_GRADIENTMAP - return vec3( texture2D( gradientMap, coord ).r ); - #else - vec2 fw = fwidth( coord ) * 0.5; - return mix( vec3( 0.7 ), vec3( 1.0 ), smoothstep( 0.7 - fw.x, 0.7 + fw.x, coord.x ) ); - #endif -}`,lightmap_pars_fragment:`#ifdef USE_LIGHTMAP - uniform sampler2D lightMap; - uniform float lightMapIntensity; -#endif`,lights_lambert_fragment:`LambertMaterial material; -material.diffuseColor = diffuseColor.rgb; -material.specularStrength = specularStrength;`,lights_lambert_pars_fragment:`varying vec3 vViewPosition; -struct LambertMaterial { - vec3 diffuseColor; - float specularStrength; -}; -void RE_Direct_Lambert( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) { - float dotNL = saturate( dot( geometryNormal, directLight.direction ) ); - vec3 irradiance = dotNL * directLight.color; - reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -void RE_IndirectDiffuse_Lambert( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in LambertMaterial material, inout ReflectedLight reflectedLight ) { - reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -#define RE_Direct RE_Direct_Lambert -#define RE_IndirectDiffuse RE_IndirectDiffuse_Lambert`,lights_pars_begin:`uniform bool receiveShadow; -uniform vec3 ambientLightColor; -#if defined( USE_LIGHT_PROBES ) - uniform vec3 lightProbe[ 9 ]; -#endif -vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) { - float x = normal.x, y = normal.y, z = normal.z; - vec3 result = shCoefficients[ 0 ] * 0.886227; - result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y; - result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z; - result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x; - result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y; - result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z; - result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 ); - result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z; - result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y ); - return result; -} -vec3 getLightProbeIrradiance( const in vec3 lightProbe[ 9 ], const in vec3 normal ) { - vec3 worldNormal = inverseTransformDirection( normal, viewMatrix ); - vec3 irradiance = shGetIrradianceAt( worldNormal, lightProbe ); - return irradiance; -} -vec3 getAmbientLightIrradiance( const in vec3 ambientLightColor ) { - vec3 irradiance = ambientLightColor; - return irradiance; -} -float getDistanceAttenuation( const in float lightDistance, const in float cutoffDistance, const in float decayExponent ) { - float distanceFalloff = 1.0 / max( pow( lightDistance, decayExponent ), 0.01 ); - if ( cutoffDistance > 0.0 ) { - distanceFalloff *= pow2( saturate( 1.0 - pow4( lightDistance / cutoffDistance ) ) ); - } - return distanceFalloff; -} -float getSpotAttenuation( const in float coneCosine, const in float penumbraCosine, const in float angleCosine ) { - return smoothstep( coneCosine, penumbraCosine, angleCosine ); -} -#if NUM_DIR_LIGHTS > 0 - struct DirectionalLight { - vec3 direction; - vec3 color; - }; - uniform DirectionalLight directionalLights[ NUM_DIR_LIGHTS ]; - void getDirectionalLightInfo( const in DirectionalLight directionalLight, out IncidentLight light ) { - light.color = directionalLight.color; - light.direction = directionalLight.direction; - light.visible = true; - } -#endif -#if NUM_POINT_LIGHTS > 0 - struct PointLight { - vec3 position; - vec3 color; - float distance; - float decay; - }; - uniform PointLight pointLights[ NUM_POINT_LIGHTS ]; - void getPointLightInfo( const in PointLight pointLight, const in vec3 geometryPosition, out IncidentLight light ) { - vec3 lVector = pointLight.position - geometryPosition; - light.direction = normalize( lVector ); - float lightDistance = length( lVector ); - light.color = pointLight.color; - light.color *= getDistanceAttenuation( lightDistance, pointLight.distance, pointLight.decay ); - light.visible = ( light.color != vec3( 0.0 ) ); - } -#endif -#if NUM_SPOT_LIGHTS > 0 - struct SpotLight { - vec3 position; - vec3 direction; - vec3 color; - float distance; - float decay; - float coneCos; - float penumbraCos; - }; - uniform SpotLight spotLights[ NUM_SPOT_LIGHTS ]; - void getSpotLightInfo( const in SpotLight spotLight, const in vec3 geometryPosition, out IncidentLight light ) { - vec3 lVector = spotLight.position - geometryPosition; - light.direction = normalize( lVector ); - float angleCos = dot( light.direction, spotLight.direction ); - float spotAttenuation = getSpotAttenuation( spotLight.coneCos, spotLight.penumbraCos, angleCos ); - if ( spotAttenuation > 0.0 ) { - float lightDistance = length( lVector ); - light.color = spotLight.color * spotAttenuation; - light.color *= getDistanceAttenuation( lightDistance, spotLight.distance, spotLight.decay ); - light.visible = ( light.color != vec3( 0.0 ) ); - } else { - light.color = vec3( 0.0 ); - light.visible = false; - } - } -#endif -#if NUM_RECT_AREA_LIGHTS > 0 - struct RectAreaLight { - vec3 color; - vec3 position; - vec3 halfWidth; - vec3 halfHeight; - }; - uniform sampler2D ltc_1; uniform sampler2D ltc_2; - uniform RectAreaLight rectAreaLights[ NUM_RECT_AREA_LIGHTS ]; -#endif -#if NUM_HEMI_LIGHTS > 0 - struct HemisphereLight { - vec3 direction; - vec3 skyColor; - vec3 groundColor; - }; - uniform HemisphereLight hemisphereLights[ NUM_HEMI_LIGHTS ]; - vec3 getHemisphereLightIrradiance( const in HemisphereLight hemiLight, const in vec3 normal ) { - float dotNL = dot( normal, hemiLight.direction ); - float hemiDiffuseWeight = 0.5 * dotNL + 0.5; - vec3 irradiance = mix( hemiLight.groundColor, hemiLight.skyColor, hemiDiffuseWeight ); - return irradiance; - } -#endif -#include `,lights_toon_fragment:`ToonMaterial material; -material.diffuseColor = diffuseColor.rgb;`,lights_toon_pars_fragment:`varying vec3 vViewPosition; -struct ToonMaterial { - vec3 diffuseColor; -}; -void RE_Direct_Toon( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { - vec3 irradiance = getGradientIrradiance( geometryNormal, directLight.direction ) * directLight.color; - reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -void RE_IndirectDiffuse_Toon( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in ToonMaterial material, inout ReflectedLight reflectedLight ) { - reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -#define RE_Direct RE_Direct_Toon -#define RE_IndirectDiffuse RE_IndirectDiffuse_Toon`,lights_phong_fragment:`BlinnPhongMaterial material; -material.diffuseColor = diffuseColor.rgb; -material.specularColor = specular; -material.specularShininess = shininess; -material.specularStrength = specularStrength;`,lights_phong_pars_fragment:`varying vec3 vViewPosition; -struct BlinnPhongMaterial { - vec3 diffuseColor; - vec3 specularColor; - float specularShininess; - float specularStrength; -}; -void RE_Direct_BlinnPhong( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) { - float dotNL = saturate( dot( geometryNormal, directLight.direction ) ); - vec3 irradiance = dotNL * directLight.color; - reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); - reflectedLight.directSpecular += irradiance * BRDF_BlinnPhong( directLight.direction, geometryViewDir, geometryNormal, material.specularColor, material.specularShininess ) * material.specularStrength; -} -void RE_IndirectDiffuse_BlinnPhong( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in BlinnPhongMaterial material, inout ReflectedLight reflectedLight ) { - reflectedLight.indirectDiffuse += irradiance * BRDF_Lambert( material.diffuseColor ); -} -#define RE_Direct RE_Direct_BlinnPhong -#define RE_IndirectDiffuse RE_IndirectDiffuse_BlinnPhong`,lights_physical_fragment:`PhysicalMaterial material; -material.diffuseColor = diffuseColor.rgb; -material.diffuseContribution = diffuseColor.rgb * ( 1.0 - metalnessFactor ); -material.metalness = metalnessFactor; -vec3 dxy = max( abs( dFdx( nonPerturbedNormal ) ), abs( dFdy( nonPerturbedNormal ) ) ); -float geometryRoughness = max( max( dxy.x, dxy.y ), dxy.z ); -material.roughness = max( roughnessFactor, 0.0525 );material.roughness += geometryRoughness; -material.roughness = min( material.roughness, 1.0 ); -#ifdef IOR - material.ior = ior; - #ifdef USE_SPECULAR - float specularIntensityFactor = specularIntensity; - vec3 specularColorFactor = specularColor; - #ifdef USE_SPECULAR_COLORMAP - specularColorFactor *= texture2D( specularColorMap, vSpecularColorMapUv ).rgb; - #endif - #ifdef USE_SPECULAR_INTENSITYMAP - specularIntensityFactor *= texture2D( specularIntensityMap, vSpecularIntensityMapUv ).a; - #endif - material.specularF90 = mix( specularIntensityFactor, 1.0, metalnessFactor ); - #else - float specularIntensityFactor = 1.0; - vec3 specularColorFactor = vec3( 1.0 ); - material.specularF90 = 1.0; - #endif - material.specularColor = min( pow2( ( material.ior - 1.0 ) / ( material.ior + 1.0 ) ) * specularColorFactor, vec3( 1.0 ) ) * specularIntensityFactor; - material.specularColorBlended = mix( material.specularColor, diffuseColor.rgb, metalnessFactor ); -#else - material.specularColor = vec3( 0.04 ); - material.specularColorBlended = mix( material.specularColor, diffuseColor.rgb, metalnessFactor ); - material.specularF90 = 1.0; -#endif -#ifdef USE_CLEARCOAT - material.clearcoat = clearcoat; - material.clearcoatRoughness = clearcoatRoughness; - material.clearcoatF0 = vec3( 0.04 ); - material.clearcoatF90 = 1.0; - #ifdef USE_CLEARCOATMAP - material.clearcoat *= texture2D( clearcoatMap, vClearcoatMapUv ).x; - #endif - #ifdef USE_CLEARCOAT_ROUGHNESSMAP - material.clearcoatRoughness *= texture2D( clearcoatRoughnessMap, vClearcoatRoughnessMapUv ).y; - #endif - material.clearcoat = saturate( material.clearcoat ); material.clearcoatRoughness = max( material.clearcoatRoughness, 0.0525 ); - material.clearcoatRoughness += geometryRoughness; - material.clearcoatRoughness = min( material.clearcoatRoughness, 1.0 ); -#endif -#ifdef USE_DISPERSION - material.dispersion = dispersion; -#endif -#ifdef USE_IRIDESCENCE - material.iridescence = iridescence; - material.iridescenceIOR = iridescenceIOR; - #ifdef USE_IRIDESCENCEMAP - material.iridescence *= texture2D( iridescenceMap, vIridescenceMapUv ).r; - #endif - #ifdef USE_IRIDESCENCE_THICKNESSMAP - material.iridescenceThickness = (iridescenceThicknessMaximum - iridescenceThicknessMinimum) * texture2D( iridescenceThicknessMap, vIridescenceThicknessMapUv ).g + iridescenceThicknessMinimum; - #else - material.iridescenceThickness = iridescenceThicknessMaximum; - #endif -#endif -#ifdef USE_SHEEN - material.sheenColor = sheenColor; - #ifdef USE_SHEEN_COLORMAP - material.sheenColor *= texture2D( sheenColorMap, vSheenColorMapUv ).rgb; - #endif - material.sheenRoughness = clamp( sheenRoughness, 0.0001, 1.0 ); - #ifdef USE_SHEEN_ROUGHNESSMAP - material.sheenRoughness *= texture2D( sheenRoughnessMap, vSheenRoughnessMapUv ).a; - #endif -#endif -#ifdef USE_ANISOTROPY - #ifdef USE_ANISOTROPYMAP - mat2 anisotropyMat = mat2( anisotropyVector.x, anisotropyVector.y, - anisotropyVector.y, anisotropyVector.x ); - vec3 anisotropyPolar = texture2D( anisotropyMap, vAnisotropyMapUv ).rgb; - vec2 anisotropyV = anisotropyMat * normalize( 2.0 * anisotropyPolar.rg - vec2( 1.0 ) ) * anisotropyPolar.b; - #else - vec2 anisotropyV = anisotropyVector; - #endif - material.anisotropy = length( anisotropyV ); - if( material.anisotropy == 0.0 ) { - anisotropyV = vec2( 1.0, 0.0 ); - } else { - anisotropyV /= material.anisotropy; - material.anisotropy = saturate( material.anisotropy ); - } - material.alphaT = mix( pow2( material.roughness ), 1.0, pow2( material.anisotropy ) ); - material.anisotropyT = tbn[ 0 ] * anisotropyV.x + tbn[ 1 ] * anisotropyV.y; - material.anisotropyB = tbn[ 1 ] * anisotropyV.x - tbn[ 0 ] * anisotropyV.y; -#endif`,lights_physical_pars_fragment:`uniform sampler2D dfgLUT; -struct PhysicalMaterial { - vec3 diffuseColor; - vec3 diffuseContribution; - vec3 specularColor; - vec3 specularColorBlended; - float roughness; - float metalness; - float specularF90; - float dispersion; - #ifdef USE_CLEARCOAT - float clearcoat; - float clearcoatRoughness; - vec3 clearcoatF0; - float clearcoatF90; - #endif - #ifdef USE_IRIDESCENCE - float iridescence; - float iridescenceIOR; - float iridescenceThickness; - vec3 iridescenceFresnel; - vec3 iridescenceF0; - vec3 iridescenceFresnelDielectric; - vec3 iridescenceFresnelMetallic; - #endif - #ifdef USE_SHEEN - vec3 sheenColor; - float sheenRoughness; - #endif - #ifdef IOR - float ior; - #endif - #ifdef USE_TRANSMISSION - float transmission; - float transmissionAlpha; - float thickness; - float attenuationDistance; - vec3 attenuationColor; - #endif - #ifdef USE_ANISOTROPY - float anisotropy; - float alphaT; - vec3 anisotropyT; - vec3 anisotropyB; - #endif -}; -vec3 clearcoatSpecularDirect = vec3( 0.0 ); -vec3 clearcoatSpecularIndirect = vec3( 0.0 ); -vec3 sheenSpecularDirect = vec3( 0.0 ); -vec3 sheenSpecularIndirect = vec3(0.0 ); -vec3 Schlick_to_F0( const in vec3 f, const in float f90, const in float dotVH ) { - float x = clamp( 1.0 - dotVH, 0.0, 1.0 ); - float x2 = x * x; - float x5 = clamp( x * x2 * x2, 0.0, 0.9999 ); - return ( f - vec3( f90 ) * x5 ) / ( 1.0 - x5 ); -} -float V_GGX_SmithCorrelated( const in float alpha, const in float dotNL, const in float dotNV ) { - float a2 = pow2( alpha ); - float gv = dotNL * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNV ) ); - float gl = dotNV * sqrt( a2 + ( 1.0 - a2 ) * pow2( dotNL ) ); - return 0.5 / max( gv + gl, EPSILON ); -} -float D_GGX( const in float alpha, const in float dotNH ) { - float a2 = pow2( alpha ); - float denom = pow2( dotNH ) * ( a2 - 1.0 ) + 1.0; - return RECIPROCAL_PI * a2 / pow2( denom ); -} -#ifdef USE_ANISOTROPY - float V_GGX_SmithCorrelated_Anisotropic( const in float alphaT, const in float alphaB, const in float dotTV, const in float dotBV, const in float dotTL, const in float dotBL, const in float dotNV, const in float dotNL ) { - float gv = dotNL * length( vec3( alphaT * dotTV, alphaB * dotBV, dotNV ) ); - float gl = dotNV * length( vec3( alphaT * dotTL, alphaB * dotBL, dotNL ) ); - return 0.5 / max( gv + gl, EPSILON ); - } - float D_GGX_Anisotropic( const in float alphaT, const in float alphaB, const in float dotNH, const in float dotTH, const in float dotBH ) { - float a2 = alphaT * alphaB; - highp vec3 v = vec3( alphaB * dotTH, alphaT * dotBH, a2 * dotNH ); - highp float v2 = dot( v, v ); - float w2 = a2 / v2; - return RECIPROCAL_PI * a2 * pow2 ( w2 ); - } -#endif -#ifdef USE_CLEARCOAT - vec3 BRDF_GGX_Clearcoat( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material) { - vec3 f0 = material.clearcoatF0; - float f90 = material.clearcoatF90; - float roughness = material.clearcoatRoughness; - float alpha = pow2( roughness ); - vec3 halfDir = normalize( lightDir + viewDir ); - float dotNL = saturate( dot( normal, lightDir ) ); - float dotNV = saturate( dot( normal, viewDir ) ); - float dotNH = saturate( dot( normal, halfDir ) ); - float dotVH = saturate( dot( viewDir, halfDir ) ); - vec3 F = F_Schlick( f0, f90, dotVH ); - float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV ); - float D = D_GGX( alpha, dotNH ); - return F * ( V * D ); - } -#endif -vec3 BRDF_GGX( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) { - vec3 f0 = material.specularColorBlended; - float f90 = material.specularF90; - float roughness = material.roughness; - float alpha = pow2( roughness ); - vec3 halfDir = normalize( lightDir + viewDir ); - float dotNL = saturate( dot( normal, lightDir ) ); - float dotNV = saturate( dot( normal, viewDir ) ); - float dotNH = saturate( dot( normal, halfDir ) ); - float dotVH = saturate( dot( viewDir, halfDir ) ); - vec3 F = F_Schlick( f0, f90, dotVH ); - #ifdef USE_IRIDESCENCE - F = mix( F, material.iridescenceFresnel, material.iridescence ); - #endif - #ifdef USE_ANISOTROPY - float dotTL = dot( material.anisotropyT, lightDir ); - float dotTV = dot( material.anisotropyT, viewDir ); - float dotTH = dot( material.anisotropyT, halfDir ); - float dotBL = dot( material.anisotropyB, lightDir ); - float dotBV = dot( material.anisotropyB, viewDir ); - float dotBH = dot( material.anisotropyB, halfDir ); - float V = V_GGX_SmithCorrelated_Anisotropic( material.alphaT, alpha, dotTV, dotBV, dotTL, dotBL, dotNV, dotNL ); - float D = D_GGX_Anisotropic( material.alphaT, alpha, dotNH, dotTH, dotBH ); - #else - float V = V_GGX_SmithCorrelated( alpha, dotNL, dotNV ); - float D = D_GGX( alpha, dotNH ); - #endif - return F * ( V * D ); -} -vec2 LTC_Uv( const in vec3 N, const in vec3 V, const in float roughness ) { - const float LUT_SIZE = 64.0; - const float LUT_SCALE = ( LUT_SIZE - 1.0 ) / LUT_SIZE; - const float LUT_BIAS = 0.5 / LUT_SIZE; - float dotNV = saturate( dot( N, V ) ); - vec2 uv = vec2( roughness, sqrt( 1.0 - dotNV ) ); - uv = uv * LUT_SCALE + LUT_BIAS; - return uv; -} -float LTC_ClippedSphereFormFactor( const in vec3 f ) { - float l = length( f ); - return max( ( l * l + f.z ) / ( l + 1.0 ), 0.0 ); -} -vec3 LTC_EdgeVectorFormFactor( const in vec3 v1, const in vec3 v2 ) { - float x = dot( v1, v2 ); - float y = abs( x ); - float a = 0.8543985 + ( 0.4965155 + 0.0145206 * y ) * y; - float b = 3.4175940 + ( 4.1616724 + y ) * y; - float v = a / b; - float theta_sintheta = ( x > 0.0 ) ? v : 0.5 * inversesqrt( max( 1.0 - x * x, 1e-7 ) ) - v; - return cross( v1, v2 ) * theta_sintheta; -} -vec3 LTC_Evaluate( const in vec3 N, const in vec3 V, const in vec3 P, const in mat3 mInv, const in vec3 rectCoords[ 4 ] ) { - vec3 v1 = rectCoords[ 1 ] - rectCoords[ 0 ]; - vec3 v2 = rectCoords[ 3 ] - rectCoords[ 0 ]; - vec3 lightNormal = cross( v1, v2 ); - if( dot( lightNormal, P - rectCoords[ 0 ] ) < 0.0 ) return vec3( 0.0 ); - vec3 T1, T2; - T1 = normalize( V - N * dot( V, N ) ); - T2 = - cross( N, T1 ); - mat3 mat = mInv * transpose( mat3( T1, T2, N ) ); - vec3 coords[ 4 ]; - coords[ 0 ] = mat * ( rectCoords[ 0 ] - P ); - coords[ 1 ] = mat * ( rectCoords[ 1 ] - P ); - coords[ 2 ] = mat * ( rectCoords[ 2 ] - P ); - coords[ 3 ] = mat * ( rectCoords[ 3 ] - P ); - coords[ 0 ] = normalize( coords[ 0 ] ); - coords[ 1 ] = normalize( coords[ 1 ] ); - coords[ 2 ] = normalize( coords[ 2 ] ); - coords[ 3 ] = normalize( coords[ 3 ] ); - vec3 vectorFormFactor = vec3( 0.0 ); - vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 0 ], coords[ 1 ] ); - vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 1 ], coords[ 2 ] ); - vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 2 ], coords[ 3 ] ); - vectorFormFactor += LTC_EdgeVectorFormFactor( coords[ 3 ], coords[ 0 ] ); - float result = LTC_ClippedSphereFormFactor( vectorFormFactor ); - return vec3( result ); -} -#if defined( USE_SHEEN ) -float D_Charlie( float roughness, float dotNH ) { - float alpha = pow2( roughness ); - float invAlpha = 1.0 / alpha; - float cos2h = dotNH * dotNH; - float sin2h = max( 1.0 - cos2h, 0.0078125 ); - return ( 2.0 + invAlpha ) * pow( sin2h, invAlpha * 0.5 ) / ( 2.0 * PI ); -} -float V_Neubelt( float dotNV, float dotNL ) { - return saturate( 1.0 / ( 4.0 * ( dotNL + dotNV - dotNL * dotNV ) ) ); -} -vec3 BRDF_Sheen( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, vec3 sheenColor, const in float sheenRoughness ) { - vec3 halfDir = normalize( lightDir + viewDir ); - float dotNL = saturate( dot( normal, lightDir ) ); - float dotNV = saturate( dot( normal, viewDir ) ); - float dotNH = saturate( dot( normal, halfDir ) ); - float D = D_Charlie( sheenRoughness, dotNH ); - float V = V_Neubelt( dotNV, dotNL ); - return sheenColor * ( D * V ); -} -#endif -float IBLSheenBRDF( const in vec3 normal, const in vec3 viewDir, const in float roughness ) { - float dotNV = saturate( dot( normal, viewDir ) ); - float r2 = roughness * roughness; - float rInv = 1.0 / ( roughness + 0.1 ); - float a = -1.9362 + 1.0678 * roughness + 0.4573 * r2 - 0.8469 * rInv; - float b = -0.6014 + 0.5538 * roughness - 0.4670 * r2 - 0.1255 * rInv; - float DG = exp( a * dotNV + b ); - return saturate( DG ); -} -vec3 EnvironmentBRDF( const in vec3 normal, const in vec3 viewDir, const in vec3 specularColor, const in float specularF90, const in float roughness ) { - float dotNV = saturate( dot( normal, viewDir ) ); - vec2 fab = texture2D( dfgLUT, vec2( roughness, dotNV ) ).rg; - return specularColor * fab.x + specularF90 * fab.y; -} -#ifdef USE_IRIDESCENCE -void 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 ) { -#else -void 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 ) { -#endif - float dotNV = saturate( dot( normal, viewDir ) ); - vec2 fab = texture2D( dfgLUT, vec2( roughness, dotNV ) ).rg; - #ifdef USE_IRIDESCENCE - vec3 Fr = mix( specularColor, iridescenceF0, iridescence ); - #else - vec3 Fr = specularColor; - #endif - vec3 FssEss = Fr * fab.x + specularF90 * fab.y; - float Ess = fab.x + fab.y; - float Ems = 1.0 - Ess; - vec3 Favg = Fr + ( 1.0 - Fr ) * 0.047619; vec3 Fms = FssEss * Favg / ( 1.0 - Ems * Favg ); - singleScatter += FssEss; - multiScatter += Fms * Ems; -} -vec3 BRDF_GGX_Multiscatter( const in vec3 lightDir, const in vec3 viewDir, const in vec3 normal, const in PhysicalMaterial material ) { - vec3 singleScatter = BRDF_GGX( lightDir, viewDir, normal, material ); - float dotNL = saturate( dot( normal, lightDir ) ); - float dotNV = saturate( dot( normal, viewDir ) ); - vec2 dfgV = texture2D( dfgLUT, vec2( material.roughness, dotNV ) ).rg; - vec2 dfgL = texture2D( dfgLUT, vec2( material.roughness, dotNL ) ).rg; - vec3 FssEss_V = material.specularColorBlended * dfgV.x + material.specularF90 * dfgV.y; - vec3 FssEss_L = material.specularColorBlended * dfgL.x + material.specularF90 * dfgL.y; - float Ess_V = dfgV.x + dfgV.y; - float Ess_L = dfgL.x + dfgL.y; - float Ems_V = 1.0 - Ess_V; - float Ems_L = 1.0 - Ess_L; - vec3 Favg = material.specularColorBlended + ( 1.0 - material.specularColorBlended ) * 0.047619; - vec3 Fms = FssEss_V * FssEss_L * Favg / ( 1.0 - Ems_V * Ems_L * Favg + EPSILON ); - float compensationFactor = Ems_V * Ems_L; - vec3 multiScatter = Fms * compensationFactor; - return singleScatter + multiScatter; -} -#if NUM_RECT_AREA_LIGHTS > 0 - void RE_Direct_RectArea_Physical( const in RectAreaLight rectAreaLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { - vec3 normal = geometryNormal; - vec3 viewDir = geometryViewDir; - vec3 position = geometryPosition; - vec3 lightPos = rectAreaLight.position; - vec3 halfWidth = rectAreaLight.halfWidth; - vec3 halfHeight = rectAreaLight.halfHeight; - vec3 lightColor = rectAreaLight.color; - float roughness = material.roughness; - vec3 rectCoords[ 4 ]; - rectCoords[ 0 ] = lightPos + halfWidth - halfHeight; rectCoords[ 1 ] = lightPos - halfWidth - halfHeight; - rectCoords[ 2 ] = lightPos - halfWidth + halfHeight; - rectCoords[ 3 ] = lightPos + halfWidth + halfHeight; - vec2 uv = LTC_Uv( normal, viewDir, roughness ); - vec4 t1 = texture2D( ltc_1, uv ); - vec4 t2 = texture2D( ltc_2, uv ); - mat3 mInv = mat3( - vec3( t1.x, 0, t1.y ), - vec3( 0, 1, 0 ), - vec3( t1.z, 0, t1.w ) - ); - vec3 fresnel = ( material.specularColorBlended * t2.x + ( material.specularF90 - material.specularColorBlended ) * t2.y ); - reflectedLight.directSpecular += lightColor * fresnel * LTC_Evaluate( normal, viewDir, position, mInv, rectCoords ); - reflectedLight.directDiffuse += lightColor * material.diffuseContribution * LTC_Evaluate( normal, viewDir, position, mat3( 1.0 ), rectCoords ); - #ifdef USE_CLEARCOAT - vec3 Ncc = geometryClearcoatNormal; - vec2 uvClearcoat = LTC_Uv( Ncc, viewDir, material.clearcoatRoughness ); - vec4 t1Clearcoat = texture2D( ltc_1, uvClearcoat ); - vec4 t2Clearcoat = texture2D( ltc_2, uvClearcoat ); - mat3 mInvClearcoat = mat3( - vec3( t1Clearcoat.x, 0, t1Clearcoat.y ), - vec3( 0, 1, 0 ), - vec3( t1Clearcoat.z, 0, t1Clearcoat.w ) - ); - vec3 fresnelClearcoat = material.clearcoatF0 * t2Clearcoat.x + ( material.clearcoatF90 - material.clearcoatF0 ) * t2Clearcoat.y; - clearcoatSpecularDirect += lightColor * fresnelClearcoat * LTC_Evaluate( Ncc, viewDir, position, mInvClearcoat, rectCoords ); - #endif - } -#endif -void RE_Direct_Physical( const in IncidentLight directLight, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { - float dotNL = saturate( dot( geometryNormal, directLight.direction ) ); - vec3 irradiance = dotNL * directLight.color; - #ifdef USE_CLEARCOAT - float dotNLcc = saturate( dot( geometryClearcoatNormal, directLight.direction ) ); - vec3 ccIrradiance = dotNLcc * directLight.color; - clearcoatSpecularDirect += ccIrradiance * BRDF_GGX_Clearcoat( directLight.direction, geometryViewDir, geometryClearcoatNormal, material ); - #endif - #ifdef USE_SHEEN - - sheenSpecularDirect += irradiance * BRDF_Sheen( directLight.direction, geometryViewDir, geometryNormal, material.sheenColor, material.sheenRoughness ); - - float sheenAlbedoV = IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness ); - float sheenAlbedoL = IBLSheenBRDF( geometryNormal, directLight.direction, material.sheenRoughness ); - - float sheenEnergyComp = 1.0 - max3( material.sheenColor ) * max( sheenAlbedoV, sheenAlbedoL ); - - irradiance *= sheenEnergyComp; - - #endif - reflectedLight.directSpecular += irradiance * BRDF_GGX_Multiscatter( directLight.direction, geometryViewDir, geometryNormal, material ); - reflectedLight.directDiffuse += irradiance * BRDF_Lambert( material.diffuseContribution ); -} -void RE_IndirectDiffuse_Physical( const in vec3 irradiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight ) { - vec3 diffuse = irradiance * BRDF_Lambert( material.diffuseContribution ); - #ifdef USE_SHEEN - float sheenAlbedo = IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness ); - float sheenEnergyComp = 1.0 - max3( material.sheenColor ) * sheenAlbedo; - diffuse *= sheenEnergyComp; - #endif - reflectedLight.indirectDiffuse += diffuse; -} -void RE_IndirectSpecular_Physical( const in vec3 radiance, const in vec3 irradiance, const in vec3 clearcoatRadiance, const in vec3 geometryPosition, const in vec3 geometryNormal, const in vec3 geometryViewDir, const in vec3 geometryClearcoatNormal, const in PhysicalMaterial material, inout ReflectedLight reflectedLight) { - #ifdef USE_CLEARCOAT - clearcoatSpecularIndirect += clearcoatRadiance * EnvironmentBRDF( geometryClearcoatNormal, geometryViewDir, material.clearcoatF0, material.clearcoatF90, material.clearcoatRoughness ); - #endif - #ifdef USE_SHEEN - sheenSpecularIndirect += irradiance * material.sheenColor * IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness ) * RECIPROCAL_PI; - #endif - vec3 singleScatteringDielectric = vec3( 0.0 ); - vec3 multiScatteringDielectric = vec3( 0.0 ); - vec3 singleScatteringMetallic = vec3( 0.0 ); - vec3 multiScatteringMetallic = vec3( 0.0 ); - #ifdef USE_IRIDESCENCE - computeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.iridescence, material.iridescenceFresnelDielectric, material.roughness, singleScatteringDielectric, multiScatteringDielectric ); - computeMultiscatteringIridescence( geometryNormal, geometryViewDir, material.diffuseColor, material.specularF90, material.iridescence, material.iridescenceFresnelMetallic, material.roughness, singleScatteringMetallic, multiScatteringMetallic ); - #else - computeMultiscattering( geometryNormal, geometryViewDir, material.specularColor, material.specularF90, material.roughness, singleScatteringDielectric, multiScatteringDielectric ); - computeMultiscattering( geometryNormal, geometryViewDir, material.diffuseColor, material.specularF90, material.roughness, singleScatteringMetallic, multiScatteringMetallic ); - #endif - vec3 singleScattering = mix( singleScatteringDielectric, singleScatteringMetallic, material.metalness ); - vec3 multiScattering = mix( multiScatteringDielectric, multiScatteringMetallic, material.metalness ); - vec3 totalScatteringDielectric = singleScatteringDielectric + multiScatteringDielectric; - vec3 diffuse = material.diffuseContribution * ( 1.0 - totalScatteringDielectric ); - vec3 cosineWeightedIrradiance = irradiance * RECIPROCAL_PI; - vec3 indirectSpecular = radiance * singleScattering; - indirectSpecular += multiScattering * cosineWeightedIrradiance; - vec3 indirectDiffuse = diffuse * cosineWeightedIrradiance; - #ifdef USE_SHEEN - float sheenAlbedo = IBLSheenBRDF( geometryNormal, geometryViewDir, material.sheenRoughness ); - float sheenEnergyComp = 1.0 - max3( material.sheenColor ) * sheenAlbedo; - indirectSpecular *= sheenEnergyComp; - indirectDiffuse *= sheenEnergyComp; - #endif - reflectedLight.indirectSpecular += indirectSpecular; - reflectedLight.indirectDiffuse += indirectDiffuse; -} -#define RE_Direct RE_Direct_Physical -#define RE_Direct_RectArea RE_Direct_RectArea_Physical -#define RE_IndirectDiffuse RE_IndirectDiffuse_Physical -#define RE_IndirectSpecular RE_IndirectSpecular_Physical -float computeSpecularOcclusion( const in float dotNV, const in float ambientOcclusion, const in float roughness ) { - return saturate( pow( dotNV + ambientOcclusion, exp2( - 16.0 * roughness - 1.0 ) ) - 1.0 + ambientOcclusion ); -}`,lights_fragment_begin:` -vec3 geometryPosition = - vViewPosition; -vec3 geometryNormal = normal; -vec3 geometryViewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition ); -vec3 geometryClearcoatNormal = vec3( 0.0 ); -#ifdef USE_CLEARCOAT - geometryClearcoatNormal = clearcoatNormal; -#endif -#ifdef USE_IRIDESCENCE - float dotNVi = saturate( dot( normal, geometryViewDir ) ); - if ( material.iridescenceThickness == 0.0 ) { - material.iridescence = 0.0; - } else { - material.iridescence = saturate( material.iridescence ); - } - if ( material.iridescence > 0.0 ) { - material.iridescenceFresnelDielectric = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.specularColor ); - material.iridescenceFresnelMetallic = evalIridescence( 1.0, material.iridescenceIOR, dotNVi, material.iridescenceThickness, material.diffuseColor ); - material.iridescenceFresnel = mix( material.iridescenceFresnelDielectric, material.iridescenceFresnelMetallic, material.metalness ); - material.iridescenceF0 = Schlick_to_F0( material.iridescenceFresnel, 1.0, dotNVi ); - } -#endif -IncidentLight directLight; -#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct ) - PointLight pointLight; - #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0 - PointLightShadow pointLightShadow; - #endif - #pragma unroll_loop_start - for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) { - pointLight = pointLights[ i ]; - getPointLightInfo( pointLight, geometryPosition, directLight ); - #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS ) && ( defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_BASIC ) ) - pointLightShadow = pointLightShadows[ i ]; - directLight.color *= ( directLight.visible && receiveShadow ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowIntensity, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0; - #endif - RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); - } - #pragma unroll_loop_end -#endif -#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct ) - SpotLight spotLight; - vec4 spotColor; - vec3 spotLightCoord; - bool inSpotLightMap; - #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0 - SpotLightShadow spotLightShadow; - #endif - #pragma unroll_loop_start - for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) { - spotLight = spotLights[ i ]; - getSpotLightInfo( spotLight, geometryPosition, directLight ); - #if ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS ) - #define SPOT_LIGHT_MAP_INDEX UNROLLED_LOOP_INDEX - #elif ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) - #define SPOT_LIGHT_MAP_INDEX NUM_SPOT_LIGHT_MAPS - #else - #define SPOT_LIGHT_MAP_INDEX ( UNROLLED_LOOP_INDEX - NUM_SPOT_LIGHT_SHADOWS + NUM_SPOT_LIGHT_SHADOWS_WITH_MAPS ) - #endif - #if ( SPOT_LIGHT_MAP_INDEX < NUM_SPOT_LIGHT_MAPS ) - spotLightCoord = vSpotLightCoord[ i ].xyz / vSpotLightCoord[ i ].w; - inSpotLightMap = all( lessThan( abs( spotLightCoord * 2. - 1. ), vec3( 1.0 ) ) ); - spotColor = texture2D( spotLightMap[ SPOT_LIGHT_MAP_INDEX ], spotLightCoord.xy ); - directLight.color = inSpotLightMap ? directLight.color * spotColor.rgb : directLight.color; - #endif - #undef SPOT_LIGHT_MAP_INDEX - #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) - spotLightShadow = spotLightShadows[ i ]; - directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowIntensity, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotLightCoord[ i ] ) : 1.0; - #endif - RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); - } - #pragma unroll_loop_end -#endif -#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) - DirectionalLight directionalLight; - #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0 - DirectionalLightShadow directionalLightShadow; - #endif - #pragma unroll_loop_start - for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) { - directionalLight = directionalLights[ i ]; - getDirectionalLightInfo( directionalLight, directLight ); - #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS ) - directionalLightShadow = directionalLightShadows[ i ]; - directLight.color *= ( directLight.visible && receiveShadow ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowIntensity, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; - #endif - RE_Direct( directLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); - } - #pragma unroll_loop_end -#endif -#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea ) - RectAreaLight rectAreaLight; - #pragma unroll_loop_start - for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) { - rectAreaLight = rectAreaLights[ i ]; - RE_Direct_RectArea( rectAreaLight, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); - } - #pragma unroll_loop_end -#endif -#if defined( RE_IndirectDiffuse ) - vec3 iblIrradiance = vec3( 0.0 ); - vec3 irradiance = getAmbientLightIrradiance( ambientLightColor ); - #if defined( USE_LIGHT_PROBES ) - irradiance += getLightProbeIrradiance( lightProbe, geometryNormal ); - #endif - #if ( NUM_HEMI_LIGHTS > 0 ) - #pragma unroll_loop_start - for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) { - irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometryNormal ); - } - #pragma unroll_loop_end - #endif - #ifdef USE_LIGHT_PROBES_GRID - vec3 probeWorldPos = ( ( vec4( geometryPosition, 1.0 ) - viewMatrix[ 3 ] ) * viewMatrix ).xyz; - vec3 probeWorldNormal = inverseTransformDirection( geometryNormal, viewMatrix ); - irradiance += getLightProbeGridIrradiance( probeWorldPos, probeWorldNormal ); - #endif -#endif -#if defined( RE_IndirectSpecular ) - vec3 radiance = vec3( 0.0 ); - vec3 clearcoatRadiance = vec3( 0.0 ); -#endif`,lights_fragment_maps:`#if defined( RE_IndirectDiffuse ) - #ifdef USE_LIGHTMAP - vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); - vec3 lightMapIrradiance = lightMapTexel.rgb * lightMapIntensity; - irradiance += lightMapIrradiance; - #endif - #if defined( USE_ENVMAP ) && defined( ENVMAP_TYPE_CUBE_UV ) - #if defined( STANDARD ) || defined( LAMBERT ) || defined( PHONG ) - iblIrradiance += getIBLIrradiance( geometryNormal ); - #endif - #endif -#endif -#if defined( USE_ENVMAP ) && defined( RE_IndirectSpecular ) - #ifdef USE_ANISOTROPY - radiance += getIBLAnisotropyRadiance( geometryViewDir, geometryNormal, material.roughness, material.anisotropyB, material.anisotropy ); - #else - radiance += getIBLRadiance( geometryViewDir, geometryNormal, material.roughness ); - #endif - #ifdef USE_CLEARCOAT - clearcoatRadiance += getIBLRadiance( geometryViewDir, geometryClearcoatNormal, material.clearcoatRoughness ); - #endif -#endif`,lights_fragment_end:`#if defined( RE_IndirectDiffuse ) - #if defined( LAMBERT ) || defined( PHONG ) - irradiance += iblIrradiance; - #endif - RE_IndirectDiffuse( irradiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); -#endif -#if defined( RE_IndirectSpecular ) - RE_IndirectSpecular( radiance, iblIrradiance, clearcoatRadiance, geometryPosition, geometryNormal, geometryViewDir, geometryClearcoatNormal, material, reflectedLight ); -#endif`,lightprobes_pars_fragment:`#ifdef USE_LIGHT_PROBES_GRID -uniform highp sampler3D probesSH; -uniform vec3 probesMin; -uniform vec3 probesMax; -uniform vec3 probesResolution; -vec3 getLightProbeGridIrradiance( vec3 worldPos, vec3 worldNormal ) { - vec3 res = probesResolution; - vec3 gridRange = probesMax - probesMin; - vec3 resMinusOne = res - 1.0; - vec3 probeSpacing = gridRange / resMinusOne; - vec3 samplePos = worldPos + worldNormal * probeSpacing * 0.5; - vec3 uvw = clamp( ( samplePos - probesMin ) / gridRange, 0.0, 1.0 ); - uvw = uvw * resMinusOne / res + 0.5 / res; - float nz = res.z; - float paddedSlices = nz + 2.0; - float atlasDepth = 7.0 * paddedSlices; - float uvZBase = uvw.z * nz + 1.0; - vec4 s0 = texture( probesSH, vec3( uvw.xy, ( uvZBase ) / atlasDepth ) ); - vec4 s1 = texture( probesSH, vec3( uvw.xy, ( uvZBase + paddedSlices ) / atlasDepth ) ); - vec4 s2 = texture( probesSH, vec3( uvw.xy, ( uvZBase + 2.0 * paddedSlices ) / atlasDepth ) ); - vec4 s3 = texture( probesSH, vec3( uvw.xy, ( uvZBase + 3.0 * paddedSlices ) / atlasDepth ) ); - vec4 s4 = texture( probesSH, vec3( uvw.xy, ( uvZBase + 4.0 * paddedSlices ) / atlasDepth ) ); - vec4 s5 = texture( probesSH, vec3( uvw.xy, ( uvZBase + 5.0 * paddedSlices ) / atlasDepth ) ); - vec4 s6 = texture( probesSH, vec3( uvw.xy, ( uvZBase + 6.0 * paddedSlices ) / atlasDepth ) ); - vec3 c0 = s0.xyz; - vec3 c1 = vec3( s0.w, s1.xy ); - vec3 c2 = vec3( s1.zw, s2.x ); - vec3 c3 = s2.yzw; - vec3 c4 = s3.xyz; - vec3 c5 = vec3( s3.w, s4.xy ); - vec3 c6 = vec3( s4.zw, s5.x ); - vec3 c7 = s5.yzw; - vec3 c8 = s6.xyz; - float x = worldNormal.x, y = worldNormal.y, z = worldNormal.z; - vec3 result = c0 * 0.886227; - result += c1 * 2.0 * 0.511664 * y; - result += c2 * 2.0 * 0.511664 * z; - result += c3 * 2.0 * 0.511664 * x; - result += c4 * 2.0 * 0.429043 * x * y; - result += c5 * 2.0 * 0.429043 * y * z; - result += c6 * ( 0.743125 * z * z - 0.247708 ); - result += c7 * 2.0 * 0.429043 * x * z; - result += c8 * 0.429043 * ( x * x - y * y ); - return max( result, vec3( 0.0 ) ); -} -#endif`,logdepthbuf_fragment:`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) - gl_FragDepth = vIsPerspective == 0.0 ? gl_FragCoord.z : log2( vFragDepth ) * logDepthBufFC * 0.5; -#endif`,logdepthbuf_pars_fragment:`#if defined( USE_LOGARITHMIC_DEPTH_BUFFER ) - uniform float logDepthBufFC; - varying float vFragDepth; - varying float vIsPerspective; -#endif`,logdepthbuf_pars_vertex:`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER - varying float vFragDepth; - varying float vIsPerspective; -#endif`,logdepthbuf_vertex:`#ifdef USE_LOGARITHMIC_DEPTH_BUFFER - vFragDepth = 1.0 + gl_Position.w; - vIsPerspective = float( isPerspectiveMatrix( projectionMatrix ) ); -#endif`,map_fragment:`#ifdef USE_MAP - vec4 sampledDiffuseColor = texture2D( map, vMapUv ); - #ifdef DECODE_VIDEO_TEXTURE - sampledDiffuseColor = sRGBTransferEOTF( sampledDiffuseColor ); - #endif - diffuseColor *= sampledDiffuseColor; -#endif`,map_pars_fragment:`#ifdef USE_MAP - uniform sampler2D map; -#endif`,map_particle_fragment:`#if defined( USE_MAP ) || defined( USE_ALPHAMAP ) - #if defined( USE_POINTS_UV ) - vec2 uv = vUv; - #else - vec2 uv = ( uvTransform * vec3( gl_PointCoord.x, 1.0 - gl_PointCoord.y, 1 ) ).xy; - #endif -#endif -#ifdef USE_MAP - diffuseColor *= texture2D( map, uv ); -#endif -#ifdef USE_ALPHAMAP - diffuseColor.a *= texture2D( alphaMap, uv ).g; -#endif`,map_particle_pars_fragment:`#if defined( USE_POINTS_UV ) - varying vec2 vUv; -#else - #if defined( USE_MAP ) || defined( USE_ALPHAMAP ) - uniform mat3 uvTransform; - #endif -#endif -#ifdef USE_MAP - uniform sampler2D map; -#endif -#ifdef USE_ALPHAMAP - uniform sampler2D alphaMap; -#endif`,metalnessmap_fragment:`float metalnessFactor = metalness; -#ifdef USE_METALNESSMAP - vec4 texelMetalness = texture2D( metalnessMap, vMetalnessMapUv ); - metalnessFactor *= texelMetalness.b; -#endif`,metalnessmap_pars_fragment:`#ifdef USE_METALNESSMAP - uniform sampler2D metalnessMap; -#endif`,morphinstance_vertex:`#ifdef USE_INSTANCING_MORPH - float morphTargetInfluences[ MORPHTARGETS_COUNT ]; - float morphTargetBaseInfluence = texelFetch( morphTexture, ivec2( 0, gl_InstanceID ), 0 ).r; - for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { - morphTargetInfluences[i] = texelFetch( morphTexture, ivec2( i + 1, gl_InstanceID ), 0 ).r; - } -#endif`,morphcolor_vertex:`#if defined( USE_MORPHCOLORS ) - vColor *= morphTargetBaseInfluence; - for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { - #if defined( USE_COLOR_ALPHA ) - if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ) * morphTargetInfluences[ i ]; - #elif defined( USE_COLOR ) - if ( morphTargetInfluences[ i ] != 0.0 ) vColor += getMorph( gl_VertexID, i, 2 ).rgb * morphTargetInfluences[ i ]; - #endif - } -#endif`,morphnormal_vertex:`#ifdef USE_MORPHNORMALS - objectNormal *= morphTargetBaseInfluence; - for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { - if ( morphTargetInfluences[ i ] != 0.0 ) objectNormal += getMorph( gl_VertexID, i, 1 ).xyz * morphTargetInfluences[ i ]; - } -#endif`,morphtarget_pars_vertex:`#ifdef USE_MORPHTARGETS - #ifndef USE_INSTANCING_MORPH - uniform float morphTargetBaseInfluence; - uniform float morphTargetInfluences[ MORPHTARGETS_COUNT ]; - #endif - uniform sampler2DArray morphTargetsTexture; - uniform ivec2 morphTargetsTextureSize; - vec4 getMorph( const in int vertexIndex, const in int morphTargetIndex, const in int offset ) { - int texelIndex = vertexIndex * MORPHTARGETS_TEXTURE_STRIDE + offset; - int y = texelIndex / morphTargetsTextureSize.x; - int x = texelIndex - y * morphTargetsTextureSize.x; - ivec3 morphUV = ivec3( x, y, morphTargetIndex ); - return texelFetch( morphTargetsTexture, morphUV, 0 ); - } -#endif`,morphtarget_vertex:`#ifdef USE_MORPHTARGETS - transformed *= morphTargetBaseInfluence; - for ( int i = 0; i < MORPHTARGETS_COUNT; i ++ ) { - if ( morphTargetInfluences[ i ] != 0.0 ) transformed += getMorph( gl_VertexID, i, 0 ).xyz * morphTargetInfluences[ i ]; - } -#endif`,normal_fragment_begin:`float faceDirection = gl_FrontFacing ? 1.0 : - 1.0; -#ifdef FLAT_SHADED - vec3 fdx = dFdx( vViewPosition ); - vec3 fdy = dFdy( vViewPosition ); - vec3 normal = normalize( cross( fdx, fdy ) ); -#else - vec3 normal = normalize( vNormal ); - #ifdef DOUBLE_SIDED - normal *= faceDirection; - #endif -#endif -#if defined( USE_NORMALMAP_TANGENTSPACE ) || defined( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) - #ifdef USE_TANGENT - mat3 tbn = mat3( normalize( vTangent ), normalize( vBitangent ), normal ); - #else - mat3 tbn = getTangentFrame( - vViewPosition, normal, - #if defined( USE_NORMALMAP ) - vNormalMapUv - #elif defined( USE_CLEARCOAT_NORMALMAP ) - vClearcoatNormalMapUv - #else - vUv - #endif - ); - #endif - #if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED ) - tbn[0] *= faceDirection; - tbn[1] *= faceDirection; - #endif -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - #ifdef USE_TANGENT - mat3 tbn2 = mat3( normalize( vTangent ), normalize( vBitangent ), normal ); - #else - mat3 tbn2 = getTangentFrame( - vViewPosition, normal, vClearcoatNormalMapUv ); - #endif - #if defined( DOUBLE_SIDED ) && ! defined( FLAT_SHADED ) - tbn2[0] *= faceDirection; - tbn2[1] *= faceDirection; - #endif -#endif -vec3 nonPerturbedNormal = normal;`,normal_fragment_maps:`#ifdef USE_NORMALMAP_OBJECTSPACE - normal = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0; - #ifdef FLIP_SIDED - normal = - normal; - #endif - #ifdef DOUBLE_SIDED - normal = normal * faceDirection; - #endif - normal = normalize( normalMatrix * normal ); -#elif defined( USE_NORMALMAP_TANGENTSPACE ) - vec3 mapN = texture2D( normalMap, vNormalMapUv ).xyz * 2.0 - 1.0; - #if defined( USE_PACKED_NORMALMAP ) - mapN = vec3( mapN.xy, sqrt( saturate( 1.0 - dot( mapN.xy, mapN.xy ) ) ) ); - #endif - mapN.xy *= normalScale; - normal = normalize( tbn * mapN ); -#elif defined( USE_BUMPMAP ) - normal = perturbNormalArb( - vViewPosition, normal, dHdxy_fwd(), faceDirection ); -#endif`,normal_pars_fragment:`#ifndef FLAT_SHADED - varying vec3 vNormal; - #ifdef USE_TANGENT - varying vec3 vTangent; - varying vec3 vBitangent; - #endif -#endif`,normal_pars_vertex:`#ifndef FLAT_SHADED - varying vec3 vNormal; - #ifdef USE_TANGENT - varying vec3 vTangent; - varying vec3 vBitangent; - #endif -#endif`,normal_vertex:`#ifndef FLAT_SHADED - vNormal = normalize( transformedNormal ); - #ifdef USE_TANGENT - vTangent = normalize( transformedTangent ); - vBitangent = normalize( cross( vNormal, vTangent ) * tangent.w ); - #endif -#endif`,normalmap_pars_fragment:`#ifdef USE_NORMALMAP - uniform sampler2D normalMap; - uniform vec2 normalScale; -#endif -#ifdef USE_NORMALMAP_OBJECTSPACE - uniform mat3 normalMatrix; -#endif -#if ! defined ( USE_TANGENT ) && ( defined ( USE_NORMALMAP_TANGENTSPACE ) || defined ( USE_CLEARCOAT_NORMALMAP ) || defined( USE_ANISOTROPY ) ) - mat3 getTangentFrame( vec3 eye_pos, vec3 surf_norm, vec2 uv ) { - vec3 q0 = dFdx( eye_pos.xyz ); - vec3 q1 = dFdy( eye_pos.xyz ); - vec2 st0 = dFdx( uv.st ); - vec2 st1 = dFdy( uv.st ); - vec3 N = surf_norm; - vec3 q1perp = cross( q1, N ); - vec3 q0perp = cross( N, q0 ); - vec3 T = q1perp * st0.x + q0perp * st1.x; - vec3 B = q1perp * st0.y + q0perp * st1.y; - float det = max( dot( T, T ), dot( B, B ) ); - float scale = ( det == 0.0 ) ? 0.0 : inversesqrt( det ); - return mat3( T * scale, B * scale, N ); - } -#endif`,clearcoat_normal_fragment_begin:`#ifdef USE_CLEARCOAT - vec3 clearcoatNormal = nonPerturbedNormal; -#endif`,clearcoat_normal_fragment_maps:`#ifdef USE_CLEARCOAT_NORMALMAP - vec3 clearcoatMapN = texture2D( clearcoatNormalMap, vClearcoatNormalMapUv ).xyz * 2.0 - 1.0; - clearcoatMapN.xy *= clearcoatNormalScale; - clearcoatNormal = normalize( tbn2 * clearcoatMapN ); -#endif`,clearcoat_pars_fragment:`#ifdef USE_CLEARCOATMAP - uniform sampler2D clearcoatMap; -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - uniform sampler2D clearcoatNormalMap; - uniform vec2 clearcoatNormalScale; -#endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP - uniform sampler2D clearcoatRoughnessMap; -#endif`,iridescence_pars_fragment:`#ifdef USE_IRIDESCENCEMAP - uniform sampler2D iridescenceMap; -#endif -#ifdef USE_IRIDESCENCE_THICKNESSMAP - uniform sampler2D iridescenceThicknessMap; -#endif`,opaque_fragment:`#ifdef OPAQUE -diffuseColor.a = 1.0; -#endif -#ifdef USE_TRANSMISSION -diffuseColor.a *= material.transmissionAlpha; -#endif -gl_FragColor = vec4( outgoingLight, diffuseColor.a );`,packing:`vec3 packNormalToRGB( const in vec3 normal ) { - return normalize( normal ) * 0.5 + 0.5; -} -vec3 unpackRGBToNormal( const in vec3 rgb ) { - return 2.0 * rgb.xyz - 1.0; -} -const float PackUpscale = 256. / 255.;const float UnpackDownscale = 255. / 256.;const float ShiftRight8 = 1. / 256.; -const float Inv255 = 1. / 255.; -const vec4 PackFactors = vec4( 1.0, 256.0, 256.0 * 256.0, 256.0 * 256.0 * 256.0 ); -const vec2 UnpackFactors2 = vec2( UnpackDownscale, 1.0 / PackFactors.g ); -const vec3 UnpackFactors3 = vec3( UnpackDownscale / PackFactors.rg, 1.0 / PackFactors.b ); -const vec4 UnpackFactors4 = vec4( UnpackDownscale / PackFactors.rgb, 1.0 / PackFactors.a ); -vec4 packDepthToRGBA( const in float v ) { - if( v <= 0.0 ) - return vec4( 0., 0., 0., 0. ); - if( v >= 1.0 ) - return vec4( 1., 1., 1., 1. ); - float vuf; - float af = modf( v * PackFactors.a, vuf ); - float bf = modf( vuf * ShiftRight8, vuf ); - float gf = modf( vuf * ShiftRight8, vuf ); - return vec4( vuf * Inv255, gf * PackUpscale, bf * PackUpscale, af ); -} -vec3 packDepthToRGB( const in float v ) { - if( v <= 0.0 ) - return vec3( 0., 0., 0. ); - if( v >= 1.0 ) - return vec3( 1., 1., 1. ); - float vuf; - float bf = modf( v * PackFactors.b, vuf ); - float gf = modf( vuf * ShiftRight8, vuf ); - return vec3( vuf * Inv255, gf * PackUpscale, bf ); -} -vec2 packDepthToRG( const in float v ) { - if( v <= 0.0 ) - return vec2( 0., 0. ); - if( v >= 1.0 ) - return vec2( 1., 1. ); - float vuf; - float gf = modf( v * 256., vuf ); - return vec2( vuf * Inv255, gf ); -} -float unpackRGBAToDepth( const in vec4 v ) { - return dot( v, UnpackFactors4 ); -} -float unpackRGBToDepth( const in vec3 v ) { - return dot( v, UnpackFactors3 ); -} -float unpackRGToDepth( const in vec2 v ) { - return v.r * UnpackFactors2.r + v.g * UnpackFactors2.g; -} -vec4 pack2HalfToRGBA( const in vec2 v ) { - vec4 r = vec4( v.x, fract( v.x * 255.0 ), v.y, fract( v.y * 255.0 ) ); - return vec4( r.x - r.y / 255.0, r.y, r.z - r.w / 255.0, r.w ); -} -vec2 unpackRGBATo2Half( const in vec4 v ) { - return vec2( v.x + ( v.y / 255.0 ), v.z + ( v.w / 255.0 ) ); -} -float viewZToOrthographicDepth( const in float viewZ, const in float near, const in float far ) { - return ( viewZ + near ) / ( near - far ); -} -float orthographicDepthToViewZ( const in float depth, const in float near, const in float far ) { - #ifdef USE_REVERSED_DEPTH_BUFFER - - return depth * ( far - near ) - far; - #else - return depth * ( near - far ) - near; - #endif -} -float viewZToPerspectiveDepth( const in float viewZ, const in float near, const in float far ) { - return ( ( near + viewZ ) * far ) / ( ( far - near ) * viewZ ); -} -float perspectiveDepthToViewZ( const in float depth, const in float near, const in float far ) { - - #ifdef USE_REVERSED_DEPTH_BUFFER - return ( near * far ) / ( ( near - far ) * depth - near ); - #else - return ( near * far ) / ( ( far - near ) * depth - far ); - #endif -}`,premultiplied_alpha_fragment:`#ifdef PREMULTIPLIED_ALPHA - gl_FragColor.rgb *= gl_FragColor.a; -#endif`,project_vertex:`vec4 mvPosition = vec4( transformed, 1.0 ); -#ifdef USE_BATCHING - mvPosition = batchingMatrix * mvPosition; -#endif -#ifdef USE_INSTANCING - mvPosition = instanceMatrix * mvPosition; -#endif -mvPosition = modelViewMatrix * mvPosition; -gl_Position = projectionMatrix * mvPosition;`,dithering_fragment:`#ifdef DITHERING - gl_FragColor.rgb = dithering( gl_FragColor.rgb ); -#endif`,dithering_pars_fragment:`#ifdef DITHERING - vec3 dithering( vec3 color ) { - float grid_position = rand( gl_FragCoord.xy ); - vec3 dither_shift_RGB = vec3( 0.25 / 255.0, -0.25 / 255.0, 0.25 / 255.0 ); - dither_shift_RGB = mix( 2.0 * dither_shift_RGB, -2.0 * dither_shift_RGB, grid_position ); - return color + dither_shift_RGB; - } -#endif`,roughnessmap_fragment:`float roughnessFactor = roughness; -#ifdef USE_ROUGHNESSMAP - vec4 texelRoughness = texture2D( roughnessMap, vRoughnessMapUv ); - roughnessFactor *= texelRoughness.g; -#endif`,roughnessmap_pars_fragment:`#ifdef USE_ROUGHNESSMAP - uniform sampler2D roughnessMap; -#endif`,shadowmap_pars_fragment:`#if NUM_SPOT_LIGHT_COORDS > 0 - varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; -#endif -#if NUM_SPOT_LIGHT_MAPS > 0 - uniform sampler2D spotLightMap[ NUM_SPOT_LIGHT_MAPS ]; -#endif -#ifdef USE_SHADOWMAP - #if NUM_DIR_LIGHT_SHADOWS > 0 - #if defined( SHADOWMAP_TYPE_PCF ) - uniform sampler2DShadow directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ]; - #else - uniform sampler2D directionalShadowMap[ NUM_DIR_LIGHT_SHADOWS ]; - #endif - varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ]; - struct DirectionalLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - }; - uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ]; - #endif - #if NUM_SPOT_LIGHT_SHADOWS > 0 - #if defined( SHADOWMAP_TYPE_PCF ) - uniform sampler2DShadow spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ]; - #else - uniform sampler2D spotShadowMap[ NUM_SPOT_LIGHT_SHADOWS ]; - #endif - struct SpotLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - }; - uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ]; - #endif - #if NUM_POINT_LIGHT_SHADOWS > 0 - #if defined( SHADOWMAP_TYPE_PCF ) - uniform samplerCubeShadow pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ]; - #elif defined( SHADOWMAP_TYPE_BASIC ) - uniform samplerCube pointShadowMap[ NUM_POINT_LIGHT_SHADOWS ]; - #endif - varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ]; - struct PointLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - float shadowCameraNear; - float shadowCameraFar; - }; - uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; - #endif - #if defined( SHADOWMAP_TYPE_PCF ) - float interleavedGradientNoise( vec2 position ) { - return fract( 52.9829189 * fract( dot( position, vec2( 0.06711056, 0.00583715 ) ) ) ); - } - vec2 vogelDiskSample( int sampleIndex, int samplesCount, float phi ) { - const float goldenAngle = 2.399963229728653; - float r = sqrt( ( float( sampleIndex ) + 0.5 ) / float( samplesCount ) ); - float theta = float( sampleIndex ) * goldenAngle + phi; - return vec2( cos( theta ), sin( theta ) ) * r; - } - #endif - #if defined( SHADOWMAP_TYPE_PCF ) - float getShadow( sampler2DShadow shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) { - float shadow = 1.0; - shadowCoord.xyz /= shadowCoord.w; - shadowCoord.z += shadowBias; - bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0; - bool frustumTest = inFrustum && shadowCoord.z <= 1.0; - if ( frustumTest ) { - vec2 texelSize = vec2( 1.0 ) / shadowMapSize; - float radius = shadowRadius * texelSize.x; - float phi = interleavedGradientNoise( gl_FragCoord.xy ) * PI2; - shadow = ( - texture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 0, 5, phi ) * radius, shadowCoord.z ) ) + - texture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 1, 5, phi ) * radius, shadowCoord.z ) ) + - texture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 2, 5, phi ) * radius, shadowCoord.z ) ) + - texture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 3, 5, phi ) * radius, shadowCoord.z ) ) + - texture( shadowMap, vec3( shadowCoord.xy + vogelDiskSample( 4, 5, phi ) * radius, shadowCoord.z ) ) - ) * 0.2; - } - return mix( 1.0, shadow, shadowIntensity ); - } - #elif defined( SHADOWMAP_TYPE_VSM ) - float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) { - float shadow = 1.0; - shadowCoord.xyz /= shadowCoord.w; - #ifdef USE_REVERSED_DEPTH_BUFFER - shadowCoord.z -= shadowBias; - #else - shadowCoord.z += shadowBias; - #endif - bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0; - bool frustumTest = inFrustum && shadowCoord.z <= 1.0; - if ( frustumTest ) { - vec2 distribution = texture2D( shadowMap, shadowCoord.xy ).rg; - float mean = distribution.x; - float variance = distribution.y * distribution.y; - #ifdef USE_REVERSED_DEPTH_BUFFER - float hard_shadow = step( mean, shadowCoord.z ); - #else - float hard_shadow = step( shadowCoord.z, mean ); - #endif - - if ( hard_shadow == 1.0 ) { - shadow = 1.0; - } else { - variance = max( variance, 0.0000001 ); - float d = shadowCoord.z - mean; - float p_max = variance / ( variance + d * d ); - p_max = clamp( ( p_max - 0.3 ) / 0.65, 0.0, 1.0 ); - shadow = max( hard_shadow, p_max ); - } - } - return mix( 1.0, shadow, shadowIntensity ); - } - #else - float getShadow( sampler2D shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord ) { - float shadow = 1.0; - shadowCoord.xyz /= shadowCoord.w; - #ifdef USE_REVERSED_DEPTH_BUFFER - shadowCoord.z -= shadowBias; - #else - shadowCoord.z += shadowBias; - #endif - bool inFrustum = shadowCoord.x >= 0.0 && shadowCoord.x <= 1.0 && shadowCoord.y >= 0.0 && shadowCoord.y <= 1.0; - bool frustumTest = inFrustum && shadowCoord.z <= 1.0; - if ( frustumTest ) { - float depth = texture2D( shadowMap, shadowCoord.xy ).r; - #ifdef USE_REVERSED_DEPTH_BUFFER - shadow = step( depth, shadowCoord.z ); - #else - shadow = step( shadowCoord.z, depth ); - #endif - } - return mix( 1.0, shadow, shadowIntensity ); - } - #endif - #if NUM_POINT_LIGHT_SHADOWS > 0 - #if defined( SHADOWMAP_TYPE_PCF ) - float getPointShadow( samplerCubeShadow shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) { - float shadow = 1.0; - vec3 lightToPosition = shadowCoord.xyz; - vec3 bd3D = normalize( lightToPosition ); - vec3 absVec = abs( lightToPosition ); - float viewSpaceZ = max( max( absVec.x, absVec.y ), absVec.z ); - if ( viewSpaceZ - shadowCameraFar <= 0.0 && viewSpaceZ - shadowCameraNear >= 0.0 ) { - #ifdef USE_REVERSED_DEPTH_BUFFER - float dp = ( shadowCameraNear * ( shadowCameraFar - viewSpaceZ ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) ); - dp -= shadowBias; - #else - float dp = ( shadowCameraFar * ( viewSpaceZ - shadowCameraNear ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) ); - dp += shadowBias; - #endif - float texelSize = shadowRadius / shadowMapSize.x; - vec3 absDir = abs( bd3D ); - vec3 tangent = absDir.x > absDir.z ? vec3( 0.0, 1.0, 0.0 ) : vec3( 1.0, 0.0, 0.0 ); - tangent = normalize( cross( bd3D, tangent ) ); - vec3 bitangent = cross( bd3D, tangent ); - float phi = interleavedGradientNoise( gl_FragCoord.xy ) * PI2; - vec2 sample0 = vogelDiskSample( 0, 5, phi ); - vec2 sample1 = vogelDiskSample( 1, 5, phi ); - vec2 sample2 = vogelDiskSample( 2, 5, phi ); - vec2 sample3 = vogelDiskSample( 3, 5, phi ); - vec2 sample4 = vogelDiskSample( 4, 5, phi ); - shadow = ( - texture( shadowMap, vec4( bd3D + ( tangent * sample0.x + bitangent * sample0.y ) * texelSize, dp ) ) + - texture( shadowMap, vec4( bd3D + ( tangent * sample1.x + bitangent * sample1.y ) * texelSize, dp ) ) + - texture( shadowMap, vec4( bd3D + ( tangent * sample2.x + bitangent * sample2.y ) * texelSize, dp ) ) + - texture( shadowMap, vec4( bd3D + ( tangent * sample3.x + bitangent * sample3.y ) * texelSize, dp ) ) + - texture( shadowMap, vec4( bd3D + ( tangent * sample4.x + bitangent * sample4.y ) * texelSize, dp ) ) - ) * 0.2; - } - return mix( 1.0, shadow, shadowIntensity ); - } - #elif defined( SHADOWMAP_TYPE_BASIC ) - float getPointShadow( samplerCube shadowMap, vec2 shadowMapSize, float shadowIntensity, float shadowBias, float shadowRadius, vec4 shadowCoord, float shadowCameraNear, float shadowCameraFar ) { - float shadow = 1.0; - vec3 lightToPosition = shadowCoord.xyz; - vec3 absVec = abs( lightToPosition ); - float viewSpaceZ = max( max( absVec.x, absVec.y ), absVec.z ); - if ( viewSpaceZ - shadowCameraFar <= 0.0 && viewSpaceZ - shadowCameraNear >= 0.0 ) { - float dp = ( shadowCameraFar * ( viewSpaceZ - shadowCameraNear ) ) / ( viewSpaceZ * ( shadowCameraFar - shadowCameraNear ) ); - dp += shadowBias; - vec3 bd3D = normalize( lightToPosition ); - float depth = textureCube( shadowMap, bd3D ).r; - #ifdef USE_REVERSED_DEPTH_BUFFER - depth = 1.0 - depth; - #endif - shadow = step( dp, depth ); - } - return mix( 1.0, shadow, shadowIntensity ); - } - #endif - #endif -#endif`,shadowmap_pars_vertex:`#if NUM_SPOT_LIGHT_COORDS > 0 - uniform mat4 spotLightMatrix[ NUM_SPOT_LIGHT_COORDS ]; - varying vec4 vSpotLightCoord[ NUM_SPOT_LIGHT_COORDS ]; -#endif -#ifdef USE_SHADOWMAP - #if NUM_DIR_LIGHT_SHADOWS > 0 - uniform mat4 directionalShadowMatrix[ NUM_DIR_LIGHT_SHADOWS ]; - varying vec4 vDirectionalShadowCoord[ NUM_DIR_LIGHT_SHADOWS ]; - struct DirectionalLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - }; - uniform DirectionalLightShadow directionalLightShadows[ NUM_DIR_LIGHT_SHADOWS ]; - #endif - #if NUM_SPOT_LIGHT_SHADOWS > 0 - struct SpotLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - }; - uniform SpotLightShadow spotLightShadows[ NUM_SPOT_LIGHT_SHADOWS ]; - #endif - #if NUM_POINT_LIGHT_SHADOWS > 0 - uniform mat4 pointShadowMatrix[ NUM_POINT_LIGHT_SHADOWS ]; - varying vec4 vPointShadowCoord[ NUM_POINT_LIGHT_SHADOWS ]; - struct PointLightShadow { - float shadowIntensity; - float shadowBias; - float shadowNormalBias; - float shadowRadius; - vec2 shadowMapSize; - float shadowCameraNear; - float shadowCameraFar; - }; - uniform PointLightShadow pointLightShadows[ NUM_POINT_LIGHT_SHADOWS ]; - #endif -#endif`,shadowmap_vertex:`#if ( defined( USE_SHADOWMAP ) && ( NUM_DIR_LIGHT_SHADOWS > 0 || NUM_POINT_LIGHT_SHADOWS > 0 ) ) || ( NUM_SPOT_LIGHT_COORDS > 0 ) - #ifdef HAS_NORMAL - vec3 shadowWorldNormal = inverseTransformDirection( transformedNormal, viewMatrix ); - #else - vec3 shadowWorldNormal = vec3( 0.0 ); - #endif - vec4 shadowWorldPosition; -#endif -#if defined( USE_SHADOWMAP ) - #if NUM_DIR_LIGHT_SHADOWS > 0 - #pragma unroll_loop_start - for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) { - shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * directionalLightShadows[ i ].shadowNormalBias, 0 ); - vDirectionalShadowCoord[ i ] = directionalShadowMatrix[ i ] * shadowWorldPosition; - } - #pragma unroll_loop_end - #endif - #if NUM_POINT_LIGHT_SHADOWS > 0 - #pragma unroll_loop_start - for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) { - shadowWorldPosition = worldPosition + vec4( shadowWorldNormal * pointLightShadows[ i ].shadowNormalBias, 0 ); - vPointShadowCoord[ i ] = pointShadowMatrix[ i ] * shadowWorldPosition; - } - #pragma unroll_loop_end - #endif -#endif -#if NUM_SPOT_LIGHT_COORDS > 0 - #pragma unroll_loop_start - for ( int i = 0; i < NUM_SPOT_LIGHT_COORDS; i ++ ) { - shadowWorldPosition = worldPosition; - #if ( defined( USE_SHADOWMAP ) && UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) - shadowWorldPosition.xyz += shadowWorldNormal * spotLightShadows[ i ].shadowNormalBias; - #endif - vSpotLightCoord[ i ] = spotLightMatrix[ i ] * shadowWorldPosition; - } - #pragma unroll_loop_end -#endif`,shadowmask_pars_fragment:`float getShadowMask() { - float shadow = 1.0; - #ifdef USE_SHADOWMAP - #if NUM_DIR_LIGHT_SHADOWS > 0 - DirectionalLightShadow directionalLight; - #pragma unroll_loop_start - for ( int i = 0; i < NUM_DIR_LIGHT_SHADOWS; i ++ ) { - directionalLight = directionalLightShadows[ i ]; - shadow *= receiveShadow ? getShadow( directionalShadowMap[ i ], directionalLight.shadowMapSize, directionalLight.shadowIntensity, directionalLight.shadowBias, directionalLight.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; - } - #pragma unroll_loop_end - #endif - #if NUM_SPOT_LIGHT_SHADOWS > 0 - SpotLightShadow spotLight; - #pragma unroll_loop_start - for ( int i = 0; i < NUM_SPOT_LIGHT_SHADOWS; i ++ ) { - spotLight = spotLightShadows[ i ]; - shadow *= receiveShadow ? getShadow( spotShadowMap[ i ], spotLight.shadowMapSize, spotLight.shadowIntensity, spotLight.shadowBias, spotLight.shadowRadius, vSpotLightCoord[ i ] ) : 1.0; - } - #pragma unroll_loop_end - #endif - #if NUM_POINT_LIGHT_SHADOWS > 0 && ( defined( SHADOWMAP_TYPE_PCF ) || defined( SHADOWMAP_TYPE_BASIC ) ) - PointLightShadow pointLight; - #pragma unroll_loop_start - for ( int i = 0; i < NUM_POINT_LIGHT_SHADOWS; i ++ ) { - pointLight = pointLightShadows[ i ]; - shadow *= receiveShadow ? getPointShadow( pointShadowMap[ i ], pointLight.shadowMapSize, pointLight.shadowIntensity, pointLight.shadowBias, pointLight.shadowRadius, vPointShadowCoord[ i ], pointLight.shadowCameraNear, pointLight.shadowCameraFar ) : 1.0; - } - #pragma unroll_loop_end - #endif - #endif - return shadow; -}`,skinbase_vertex:`#ifdef USE_SKINNING - mat4 boneMatX = getBoneMatrix( skinIndex.x ); - mat4 boneMatY = getBoneMatrix( skinIndex.y ); - mat4 boneMatZ = getBoneMatrix( skinIndex.z ); - mat4 boneMatW = getBoneMatrix( skinIndex.w ); -#endif`,skinning_pars_vertex:`#ifdef USE_SKINNING - uniform mat4 bindMatrix; - uniform mat4 bindMatrixInverse; - uniform highp sampler2D boneTexture; - mat4 getBoneMatrix( const in float i ) { - int size = textureSize( boneTexture, 0 ).x; - int j = int( i ) * 4; - int x = j % size; - int y = j / size; - vec4 v1 = texelFetch( boneTexture, ivec2( x, y ), 0 ); - vec4 v2 = texelFetch( boneTexture, ivec2( x + 1, y ), 0 ); - vec4 v3 = texelFetch( boneTexture, ivec2( x + 2, y ), 0 ); - vec4 v4 = texelFetch( boneTexture, ivec2( x + 3, y ), 0 ); - return mat4( v1, v2, v3, v4 ); - } -#endif`,skinning_vertex:`#ifdef USE_SKINNING - vec4 skinVertex = bindMatrix * vec4( transformed, 1.0 ); - vec4 skinned = vec4( 0.0 ); - skinned += boneMatX * skinVertex * skinWeight.x; - skinned += boneMatY * skinVertex * skinWeight.y; - skinned += boneMatZ * skinVertex * skinWeight.z; - skinned += boneMatW * skinVertex * skinWeight.w; - transformed = ( bindMatrixInverse * skinned ).xyz; -#endif`,skinnormal_vertex:`#ifdef USE_SKINNING - mat4 skinMatrix = mat4( 0.0 ); - skinMatrix += skinWeight.x * boneMatX; - skinMatrix += skinWeight.y * boneMatY; - skinMatrix += skinWeight.z * boneMatZ; - skinMatrix += skinWeight.w * boneMatW; - skinMatrix = bindMatrixInverse * skinMatrix * bindMatrix; - objectNormal = vec4( skinMatrix * vec4( objectNormal, 0.0 ) ).xyz; - #ifdef USE_TANGENT - objectTangent = vec4( skinMatrix * vec4( objectTangent, 0.0 ) ).xyz; - #endif -#endif`,specularmap_fragment:`float specularStrength; -#ifdef USE_SPECULARMAP - vec4 texelSpecular = texture2D( specularMap, vSpecularMapUv ); - specularStrength = texelSpecular.r; -#else - specularStrength = 1.0; -#endif`,specularmap_pars_fragment:`#ifdef USE_SPECULARMAP - uniform sampler2D specularMap; -#endif`,tonemapping_fragment:`#if defined( TONE_MAPPING ) - gl_FragColor.rgb = toneMapping( gl_FragColor.rgb ); -#endif`,tonemapping_pars_fragment:`#ifndef saturate -#define saturate( a ) clamp( a, 0.0, 1.0 ) -#endif -uniform float toneMappingExposure; -vec3 LinearToneMapping( vec3 color ) { - return saturate( toneMappingExposure * color ); -} -vec3 ReinhardToneMapping( vec3 color ) { - color *= toneMappingExposure; - return saturate( color / ( vec3( 1.0 ) + color ) ); -} -vec3 CineonToneMapping( vec3 color ) { - color *= toneMappingExposure; - color = max( vec3( 0.0 ), color - 0.004 ); - return pow( ( color * ( 6.2 * color + 0.5 ) ) / ( color * ( 6.2 * color + 1.7 ) + 0.06 ), vec3( 2.2 ) ); -} -vec3 RRTAndODTFit( vec3 v ) { - vec3 a = v * ( v + 0.0245786 ) - 0.000090537; - vec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081; - return a / b; -} -vec3 ACESFilmicToneMapping( vec3 color ) { - const mat3 ACESInputMat = mat3( - vec3( 0.59719, 0.07600, 0.02840 ), vec3( 0.35458, 0.90834, 0.13383 ), - vec3( 0.04823, 0.01566, 0.83777 ) - ); - const mat3 ACESOutputMat = mat3( - vec3( 1.60475, -0.10208, -0.00327 ), vec3( -0.53108, 1.10813, -0.07276 ), - vec3( -0.07367, -0.00605, 1.07602 ) - ); - color *= toneMappingExposure / 0.6; - color = ACESInputMat * color; - color = RRTAndODTFit( color ); - color = ACESOutputMat * color; - return saturate( color ); -} -const mat3 LINEAR_REC2020_TO_LINEAR_SRGB = mat3( - vec3( 1.6605, - 0.1246, - 0.0182 ), - vec3( - 0.5876, 1.1329, - 0.1006 ), - vec3( - 0.0728, - 0.0083, 1.1187 ) -); -const mat3 LINEAR_SRGB_TO_LINEAR_REC2020 = mat3( - vec3( 0.6274, 0.0691, 0.0164 ), - vec3( 0.3293, 0.9195, 0.0880 ), - vec3( 0.0433, 0.0113, 0.8956 ) -); -vec3 agxDefaultContrastApprox( vec3 x ) { - vec3 x2 = x * x; - vec3 x4 = x2 * x2; - return + 15.5 * x4 * x2 - - 40.14 * x4 * x - + 31.96 * x4 - - 6.868 * x2 * x - + 0.4298 * x2 - + 0.1191 * x - - 0.00232; -} -vec3 AgXToneMapping( vec3 color ) { - const mat3 AgXInsetMatrix = mat3( - vec3( 0.856627153315983, 0.137318972929847, 0.11189821299995 ), - vec3( 0.0951212405381588, 0.761241990602591, 0.0767994186031903 ), - vec3( 0.0482516061458583, 0.101439036467562, 0.811302368396859 ) - ); - const mat3 AgXOutsetMatrix = mat3( - vec3( 1.1271005818144368, - 0.1413297634984383, - 0.14132976349843826 ), - vec3( - 0.11060664309660323, 1.157823702216272, - 0.11060664309660294 ), - vec3( - 0.016493938717834573, - 0.016493938717834257, 1.2519364065950405 ) - ); - const float AgxMinEv = - 12.47393; const float AgxMaxEv = 4.026069; - color *= toneMappingExposure; - color = LINEAR_SRGB_TO_LINEAR_REC2020 * color; - color = AgXInsetMatrix * color; - color = max( color, 1e-10 ); color = log2( color ); - color = ( color - AgxMinEv ) / ( AgxMaxEv - AgxMinEv ); - color = clamp( color, 0.0, 1.0 ); - color = agxDefaultContrastApprox( color ); - color = AgXOutsetMatrix * color; - color = pow( max( vec3( 0.0 ), color ), vec3( 2.2 ) ); - color = LINEAR_REC2020_TO_LINEAR_SRGB * color; - color = clamp( color, 0.0, 1.0 ); - return color; -} -vec3 NeutralToneMapping( vec3 color ) { - const float StartCompression = 0.8 - 0.04; - const float Desaturation = 0.15; - color *= toneMappingExposure; - float x = min( color.r, min( color.g, color.b ) ); - float offset = x < 0.08 ? x - 6.25 * x * x : 0.04; - color -= offset; - float peak = max( color.r, max( color.g, color.b ) ); - if ( peak < StartCompression ) return color; - float d = 1. - StartCompression; - float newPeak = 1. - d * d / ( peak + d - StartCompression ); - color *= newPeak / peak; - float g = 1. - 1. / ( Desaturation * ( peak - newPeak ) + 1. ); - return mix( color, vec3( newPeak ), g ); -} -vec3 CustomToneMapping( vec3 color ) { return color; }`,transmission_fragment:`#ifdef USE_TRANSMISSION - material.transmission = transmission; - material.transmissionAlpha = 1.0; - material.thickness = thickness; - material.attenuationDistance = attenuationDistance; - material.attenuationColor = attenuationColor; - #ifdef USE_TRANSMISSIONMAP - material.transmission *= texture2D( transmissionMap, vTransmissionMapUv ).r; - #endif - #ifdef USE_THICKNESSMAP - material.thickness *= texture2D( thicknessMap, vThicknessMapUv ).g; - #endif - vec3 pos = vWorldPosition; - vec3 v = normalize( cameraPosition - pos ); - vec3 n = inverseTransformDirection( normal, viewMatrix ); - vec4 transmitted = getIBLVolumeRefraction( - n, v, material.roughness, material.diffuseContribution, material.specularColorBlended, material.specularF90, - pos, modelMatrix, viewMatrix, projectionMatrix, material.dispersion, material.ior, material.thickness, - material.attenuationColor, material.attenuationDistance ); - material.transmissionAlpha = mix( material.transmissionAlpha, transmitted.a, material.transmission ); - totalDiffuse = mix( totalDiffuse, transmitted.rgb, material.transmission ); -#endif`,transmission_pars_fragment:`#ifdef USE_TRANSMISSION - uniform float transmission; - uniform float thickness; - uniform float attenuationDistance; - uniform vec3 attenuationColor; - #ifdef USE_TRANSMISSIONMAP - uniform sampler2D transmissionMap; - #endif - #ifdef USE_THICKNESSMAP - uniform sampler2D thicknessMap; - #endif - uniform vec2 transmissionSamplerSize; - uniform sampler2D transmissionSamplerMap; - uniform mat4 modelMatrix; - uniform mat4 projectionMatrix; - varying vec3 vWorldPosition; - float w0( float a ) { - return ( 1.0 / 6.0 ) * ( a * ( a * ( - a + 3.0 ) - 3.0 ) + 1.0 ); - } - float w1( float a ) { - return ( 1.0 / 6.0 ) * ( a * a * ( 3.0 * a - 6.0 ) + 4.0 ); - } - float w2( float a ){ - return ( 1.0 / 6.0 ) * ( a * ( a * ( - 3.0 * a + 3.0 ) + 3.0 ) + 1.0 ); - } - float w3( float a ) { - return ( 1.0 / 6.0 ) * ( a * a * a ); - } - float g0( float a ) { - return w0( a ) + w1( a ); - } - float g1( float a ) { - return w2( a ) + w3( a ); - } - float h0( float a ) { - return - 1.0 + w1( a ) / ( w0( a ) + w1( a ) ); - } - float h1( float a ) { - return 1.0 + w3( a ) / ( w2( a ) + w3( a ) ); - } - vec4 bicubic( sampler2D tex, vec2 uv, vec4 texelSize, float lod ) { - uv = uv * texelSize.zw + 0.5; - vec2 iuv = floor( uv ); - vec2 fuv = fract( uv ); - float g0x = g0( fuv.x ); - float g1x = g1( fuv.x ); - float h0x = h0( fuv.x ); - float h1x = h1( fuv.x ); - float h0y = h0( fuv.y ); - float h1y = h1( fuv.y ); - vec2 p0 = ( vec2( iuv.x + h0x, iuv.y + h0y ) - 0.5 ) * texelSize.xy; - vec2 p1 = ( vec2( iuv.x + h1x, iuv.y + h0y ) - 0.5 ) * texelSize.xy; - vec2 p2 = ( vec2( iuv.x + h0x, iuv.y + h1y ) - 0.5 ) * texelSize.xy; - vec2 p3 = ( vec2( iuv.x + h1x, iuv.y + h1y ) - 0.5 ) * texelSize.xy; - return g0( fuv.y ) * ( g0x * textureLod( tex, p0, lod ) + g1x * textureLod( tex, p1, lod ) ) + - g1( fuv.y ) * ( g0x * textureLod( tex, p2, lod ) + g1x * textureLod( tex, p3, lod ) ); - } - vec4 textureBicubic( sampler2D sampler, vec2 uv, float lod ) { - vec2 fLodSize = vec2( textureSize( sampler, int( lod ) ) ); - vec2 cLodSize = vec2( textureSize( sampler, int( lod + 1.0 ) ) ); - vec2 fLodSizeInv = 1.0 / fLodSize; - vec2 cLodSizeInv = 1.0 / cLodSize; - vec4 fSample = bicubic( sampler, uv, vec4( fLodSizeInv, fLodSize ), floor( lod ) ); - vec4 cSample = bicubic( sampler, uv, vec4( cLodSizeInv, cLodSize ), ceil( lod ) ); - return mix( fSample, cSample, fract( lod ) ); - } - vec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) { - vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior ); - vec3 modelScale; - modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) ); - modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) ); - modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) ); - return normalize( refractionVector ) * thickness * modelScale; - } - float applyIorToRoughness( const in float roughness, const in float ior ) { - return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 ); - } - vec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) { - float lod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior ); - return textureBicubic( transmissionSamplerMap, fragCoord.xy, lod ); - } - vec3 volumeAttenuation( const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) { - if ( isinf( attenuationDistance ) ) { - return vec3( 1.0 ); - } else { - vec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance; - vec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); return transmittance; - } - } - vec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor, - const in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix, - const in mat4 viewMatrix, const in mat4 projMatrix, const in float dispersion, const in float ior, const in float thickness, - const in vec3 attenuationColor, const in float attenuationDistance ) { - vec4 transmittedLight; - vec3 transmittance; - #ifdef USE_DISPERSION - float halfSpread = ( ior - 1.0 ) * 0.025 * dispersion; - vec3 iors = vec3( ior - halfSpread, ior, ior + halfSpread ); - for ( int i = 0; i < 3; i ++ ) { - vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, iors[ i ], modelMatrix ); - vec3 refractedRayExit = position + transmissionRay; - vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 ); - vec2 refractionCoords = ndcPos.xy / ndcPos.w; - refractionCoords += 1.0; - refractionCoords /= 2.0; - vec4 transmissionSample = getTransmissionSample( refractionCoords, roughness, iors[ i ] ); - transmittedLight[ i ] = transmissionSample[ i ]; - transmittedLight.a += transmissionSample.a; - transmittance[ i ] = diffuseColor[ i ] * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance )[ i ]; - } - transmittedLight.a /= 3.0; - #else - vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix ); - vec3 refractedRayExit = position + transmissionRay; - vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 ); - vec2 refractionCoords = ndcPos.xy / ndcPos.w; - refractionCoords += 1.0; - refractionCoords /= 2.0; - transmittedLight = getTransmissionSample( refractionCoords, roughness, ior ); - transmittance = diffuseColor * volumeAttenuation( length( transmissionRay ), attenuationColor, attenuationDistance ); - #endif - vec3 attenuatedColor = transmittance * transmittedLight.rgb; - vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness ); - float transmittanceFactor = ( transmittance.r + transmittance.g + transmittance.b ) / 3.0; - return vec4( ( 1.0 - F ) * attenuatedColor, 1.0 - ( 1.0 - transmittedLight.a ) * transmittanceFactor ); - } -#endif`,uv_pars_fragment:`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) - varying vec2 vUv; -#endif -#ifdef USE_MAP - varying vec2 vMapUv; -#endif -#ifdef USE_ALPHAMAP - varying vec2 vAlphaMapUv; -#endif -#ifdef USE_LIGHTMAP - varying vec2 vLightMapUv; -#endif -#ifdef USE_AOMAP - varying vec2 vAoMapUv; -#endif -#ifdef USE_BUMPMAP - varying vec2 vBumpMapUv; -#endif -#ifdef USE_NORMALMAP - varying vec2 vNormalMapUv; -#endif -#ifdef USE_EMISSIVEMAP - varying vec2 vEmissiveMapUv; -#endif -#ifdef USE_METALNESSMAP - varying vec2 vMetalnessMapUv; -#endif -#ifdef USE_ROUGHNESSMAP - varying vec2 vRoughnessMapUv; -#endif -#ifdef USE_ANISOTROPYMAP - varying vec2 vAnisotropyMapUv; -#endif -#ifdef USE_CLEARCOATMAP - varying vec2 vClearcoatMapUv; -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - varying vec2 vClearcoatNormalMapUv; -#endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP - varying vec2 vClearcoatRoughnessMapUv; -#endif -#ifdef USE_IRIDESCENCEMAP - varying vec2 vIridescenceMapUv; -#endif -#ifdef USE_IRIDESCENCE_THICKNESSMAP - varying vec2 vIridescenceThicknessMapUv; -#endif -#ifdef USE_SHEEN_COLORMAP - varying vec2 vSheenColorMapUv; -#endif -#ifdef USE_SHEEN_ROUGHNESSMAP - varying vec2 vSheenRoughnessMapUv; -#endif -#ifdef USE_SPECULARMAP - varying vec2 vSpecularMapUv; -#endif -#ifdef USE_SPECULAR_COLORMAP - varying vec2 vSpecularColorMapUv; -#endif -#ifdef USE_SPECULAR_INTENSITYMAP - varying vec2 vSpecularIntensityMapUv; -#endif -#ifdef USE_TRANSMISSIONMAP - uniform mat3 transmissionMapTransform; - varying vec2 vTransmissionMapUv; -#endif -#ifdef USE_THICKNESSMAP - uniform mat3 thicknessMapTransform; - varying vec2 vThicknessMapUv; -#endif`,uv_pars_vertex:`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) - varying vec2 vUv; -#endif -#ifdef USE_MAP - uniform mat3 mapTransform; - varying vec2 vMapUv; -#endif -#ifdef USE_ALPHAMAP - uniform mat3 alphaMapTransform; - varying vec2 vAlphaMapUv; -#endif -#ifdef USE_LIGHTMAP - uniform mat3 lightMapTransform; - varying vec2 vLightMapUv; -#endif -#ifdef USE_AOMAP - uniform mat3 aoMapTransform; - varying vec2 vAoMapUv; -#endif -#ifdef USE_BUMPMAP - uniform mat3 bumpMapTransform; - varying vec2 vBumpMapUv; -#endif -#ifdef USE_NORMALMAP - uniform mat3 normalMapTransform; - varying vec2 vNormalMapUv; -#endif -#ifdef USE_DISPLACEMENTMAP - uniform mat3 displacementMapTransform; - varying vec2 vDisplacementMapUv; -#endif -#ifdef USE_EMISSIVEMAP - uniform mat3 emissiveMapTransform; - varying vec2 vEmissiveMapUv; -#endif -#ifdef USE_METALNESSMAP - uniform mat3 metalnessMapTransform; - varying vec2 vMetalnessMapUv; -#endif -#ifdef USE_ROUGHNESSMAP - uniform mat3 roughnessMapTransform; - varying vec2 vRoughnessMapUv; -#endif -#ifdef USE_ANISOTROPYMAP - uniform mat3 anisotropyMapTransform; - varying vec2 vAnisotropyMapUv; -#endif -#ifdef USE_CLEARCOATMAP - uniform mat3 clearcoatMapTransform; - varying vec2 vClearcoatMapUv; -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - uniform mat3 clearcoatNormalMapTransform; - varying vec2 vClearcoatNormalMapUv; -#endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP - uniform mat3 clearcoatRoughnessMapTransform; - varying vec2 vClearcoatRoughnessMapUv; -#endif -#ifdef USE_SHEEN_COLORMAP - uniform mat3 sheenColorMapTransform; - varying vec2 vSheenColorMapUv; -#endif -#ifdef USE_SHEEN_ROUGHNESSMAP - uniform mat3 sheenRoughnessMapTransform; - varying vec2 vSheenRoughnessMapUv; -#endif -#ifdef USE_IRIDESCENCEMAP - uniform mat3 iridescenceMapTransform; - varying vec2 vIridescenceMapUv; -#endif -#ifdef USE_IRIDESCENCE_THICKNESSMAP - uniform mat3 iridescenceThicknessMapTransform; - varying vec2 vIridescenceThicknessMapUv; -#endif -#ifdef USE_SPECULARMAP - uniform mat3 specularMapTransform; - varying vec2 vSpecularMapUv; -#endif -#ifdef USE_SPECULAR_COLORMAP - uniform mat3 specularColorMapTransform; - varying vec2 vSpecularColorMapUv; -#endif -#ifdef USE_SPECULAR_INTENSITYMAP - uniform mat3 specularIntensityMapTransform; - varying vec2 vSpecularIntensityMapUv; -#endif -#ifdef USE_TRANSMISSIONMAP - uniform mat3 transmissionMapTransform; - varying vec2 vTransmissionMapUv; -#endif -#ifdef USE_THICKNESSMAP - uniform mat3 thicknessMapTransform; - varying vec2 vThicknessMapUv; -#endif`,uv_vertex:`#if defined( USE_UV ) || defined( USE_ANISOTROPY ) - vUv = vec3( uv, 1 ).xy; -#endif -#ifdef USE_MAP - vMapUv = ( mapTransform * vec3( MAP_UV, 1 ) ).xy; -#endif -#ifdef USE_ALPHAMAP - vAlphaMapUv = ( alphaMapTransform * vec3( ALPHAMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_LIGHTMAP - vLightMapUv = ( lightMapTransform * vec3( LIGHTMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_AOMAP - vAoMapUv = ( aoMapTransform * vec3( AOMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_BUMPMAP - vBumpMapUv = ( bumpMapTransform * vec3( BUMPMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_NORMALMAP - vNormalMapUv = ( normalMapTransform * vec3( NORMALMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_DISPLACEMENTMAP - vDisplacementMapUv = ( displacementMapTransform * vec3( DISPLACEMENTMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_EMISSIVEMAP - vEmissiveMapUv = ( emissiveMapTransform * vec3( EMISSIVEMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_METALNESSMAP - vMetalnessMapUv = ( metalnessMapTransform * vec3( METALNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_ROUGHNESSMAP - vRoughnessMapUv = ( roughnessMapTransform * vec3( ROUGHNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_ANISOTROPYMAP - vAnisotropyMapUv = ( anisotropyMapTransform * vec3( ANISOTROPYMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_CLEARCOATMAP - vClearcoatMapUv = ( clearcoatMapTransform * vec3( CLEARCOATMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_CLEARCOAT_NORMALMAP - vClearcoatNormalMapUv = ( clearcoatNormalMapTransform * vec3( CLEARCOAT_NORMALMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_CLEARCOAT_ROUGHNESSMAP - vClearcoatRoughnessMapUv = ( clearcoatRoughnessMapTransform * vec3( CLEARCOAT_ROUGHNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_IRIDESCENCEMAP - vIridescenceMapUv = ( iridescenceMapTransform * vec3( IRIDESCENCEMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_IRIDESCENCE_THICKNESSMAP - vIridescenceThicknessMapUv = ( iridescenceThicknessMapTransform * vec3( IRIDESCENCE_THICKNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SHEEN_COLORMAP - vSheenColorMapUv = ( sheenColorMapTransform * vec3( SHEEN_COLORMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SHEEN_ROUGHNESSMAP - vSheenRoughnessMapUv = ( sheenRoughnessMapTransform * vec3( SHEEN_ROUGHNESSMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SPECULARMAP - vSpecularMapUv = ( specularMapTransform * vec3( SPECULARMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SPECULAR_COLORMAP - vSpecularColorMapUv = ( specularColorMapTransform * vec3( SPECULAR_COLORMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_SPECULAR_INTENSITYMAP - vSpecularIntensityMapUv = ( specularIntensityMapTransform * vec3( SPECULAR_INTENSITYMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_TRANSMISSIONMAP - vTransmissionMapUv = ( transmissionMapTransform * vec3( TRANSMISSIONMAP_UV, 1 ) ).xy; -#endif -#ifdef USE_THICKNESSMAP - vThicknessMapUv = ( thicknessMapTransform * vec3( THICKNESSMAP_UV, 1 ) ).xy; -#endif`,worldpos_vertex:`#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP ) || defined ( USE_TRANSMISSION ) || NUM_SPOT_LIGHT_COORDS > 0 - vec4 worldPosition = vec4( transformed, 1.0 ); - #ifdef USE_BATCHING - worldPosition = batchingMatrix * worldPosition; - #endif - #ifdef USE_INSTANCING - worldPosition = instanceMatrix * worldPosition; - #endif - worldPosition = modelMatrix * worldPosition; -#endif`,background_vert:`varying vec2 vUv; -uniform mat3 uvTransform; -void main() { - vUv = ( uvTransform * vec3( uv, 1 ) ).xy; - gl_Position = vec4( position.xy, 1.0, 1.0 ); -}`,background_frag:`uniform sampler2D t2D; -uniform float backgroundIntensity; -varying vec2 vUv; -void main() { - vec4 texColor = texture2D( t2D, vUv ); - #ifdef DECODE_VIDEO_TEXTURE - 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 ); - #endif - texColor.rgb *= backgroundIntensity; - gl_FragColor = texColor; - #include - #include -}`,backgroundCube_vert:`varying vec3 vWorldDirection; -#include -void main() { - vWorldDirection = transformDirection( position, modelMatrix ); - #include - #include - gl_Position.z = gl_Position.w; -}`,backgroundCube_frag:`#ifdef ENVMAP_TYPE_CUBE - uniform samplerCube envMap; -#elif defined( ENVMAP_TYPE_CUBE_UV ) - uniform sampler2D envMap; -#endif -uniform float backgroundBlurriness; -uniform float backgroundIntensity; -uniform mat3 backgroundRotation; -varying vec3 vWorldDirection; -#include -void main() { - #ifdef ENVMAP_TYPE_CUBE - vec4 texColor = textureCube( envMap, backgroundRotation * vWorldDirection ); - #elif defined( ENVMAP_TYPE_CUBE_UV ) - vec4 texColor = textureCubeUV( envMap, backgroundRotation * vWorldDirection, backgroundBlurriness ); - #else - vec4 texColor = vec4( 0.0, 0.0, 0.0, 1.0 ); - #endif - texColor.rgb *= backgroundIntensity; - gl_FragColor = texColor; - #include - #include -}`,cube_vert:`varying vec3 vWorldDirection; -#include -void main() { - vWorldDirection = transformDirection( position, modelMatrix ); - #include - #include - gl_Position.z = gl_Position.w; -}`,cube_frag:`uniform samplerCube tCube; -uniform float tFlip; -uniform float opacity; -varying vec3 vWorldDirection; -void main() { - vec4 texColor = textureCube( tCube, vec3( tFlip * vWorldDirection.x, vWorldDirection.yz ) ); - gl_FragColor = texColor; - gl_FragColor.a *= opacity; - #include - #include -}`,depth_vert:`#include -#include -#include -#include -#include -#include -#include -#include -varying vec2 vHighPrecisionZW; -void main() { - #include - #include - #include - #include - #ifdef USE_DISPLACEMENTMAP - #include - #include - #include - #endif - #include - #include - #include - #include - #include - #include - #include - vHighPrecisionZW = gl_Position.zw; -}`,depth_frag:`#if DEPTH_PACKING == 3200 - uniform float opacity; -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -varying vec2 vHighPrecisionZW; -void main() { - vec4 diffuseColor = vec4( 1.0 ); - #include - #if DEPTH_PACKING == 3200 - diffuseColor.a = opacity; - #endif - #include - #include - #include - #include - #include - #ifdef USE_REVERSED_DEPTH_BUFFER - float fragCoordZ = vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ]; - #else - float fragCoordZ = 0.5 * vHighPrecisionZW[ 0 ] / vHighPrecisionZW[ 1 ] + 0.5; - #endif - #if DEPTH_PACKING == 3200 - gl_FragColor = vec4( vec3( 1.0 - fragCoordZ ), opacity ); - #elif DEPTH_PACKING == 3201 - gl_FragColor = packDepthToRGBA( fragCoordZ ); - #elif DEPTH_PACKING == 3202 - gl_FragColor = vec4( packDepthToRGB( fragCoordZ ), 1.0 ); - #elif DEPTH_PACKING == 3203 - gl_FragColor = vec4( packDepthToRG( fragCoordZ ), 0.0, 1.0 ); - #endif -}`,distance_vert:`#define DISTANCE -varying vec3 vWorldPosition; -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #ifdef USE_DISPLACEMENTMAP - #include - #include - #include - #endif - #include - #include - #include - #include - #include - #include - #include - vWorldPosition = worldPosition.xyz; -}`,distance_frag:`#define DISTANCE -uniform vec3 referencePosition; -uniform float nearDistance; -uniform float farDistance; -varying vec3 vWorldPosition; -#include -#include -#include -#include -#include -#include -#include -void main () { - vec4 diffuseColor = vec4( 1.0 ); - #include - #include - #include - #include - #include - float dist = length( vWorldPosition - referencePosition ); - dist = ( dist - nearDistance ) / ( farDistance - nearDistance ); - dist = saturate( dist ); - gl_FragColor = vec4( dist, 0.0, 0.0, 1.0 ); -}`,equirect_vert:`varying vec3 vWorldDirection; -#include -void main() { - vWorldDirection = transformDirection( position, modelMatrix ); - #include - #include -}`,equirect_frag:`uniform sampler2D tEquirect; -varying vec3 vWorldDirection; -#include -void main() { - vec3 direction = normalize( vWorldDirection ); - vec2 sampleUV = equirectUv( direction ); - gl_FragColor = texture2D( tEquirect, sampleUV ); - #include - #include -}`,linedashed_vert:`uniform float scale; -attribute float lineDistance; -varying float vLineDistance; -#include -#include -#include -#include -#include -#include -#include -void main() { - vLineDistance = scale * lineDistance; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include -}`,linedashed_frag:`uniform vec3 diffuse; -uniform float opacity; -uniform float dashSize; -uniform float totalSize; -varying float vLineDistance; -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - if ( mod( vLineDistance, totalSize ) > dashSize ) { - discard; - } - vec3 outgoingLight = vec3( 0.0 ); - #include - #include - #include - outgoingLight = diffuseColor.rgb; - #include - #include - #include - #include - #include -}`,meshbasic_vert:`#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #if defined ( USE_ENVMAP ) || defined ( USE_SKINNING ) - #include - #include - #include - #include - #include - #endif - #include - #include - #include - #include - #include - #include - #include - #include - #include -}`,meshbasic_frag:`uniform vec3 diffuse; -uniform float opacity; -#ifndef FLAT_SHADED - varying vec3 vNormal; -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - #include - #include - #include - #include - #include - #include - #include - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - #ifdef USE_LIGHTMAP - vec4 lightMapTexel = texture2D( lightMap, vLightMapUv ); - reflectedLight.indirectDiffuse += lightMapTexel.rgb * lightMapIntensity * RECIPROCAL_PI; - #else - reflectedLight.indirectDiffuse += vec3( 1.0 ); - #endif - #include - reflectedLight.indirectDiffuse *= diffuseColor.rgb; - vec3 outgoingLight = reflectedLight.indirectDiffuse; - #include - #include - #include - #include - #include - #include - #include -}`,meshlambert_vert:`#define LAMBERT -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; - #include - #include - #include - #include -}`,meshlambert_frag:`#define LAMBERT -uniform vec3 diffuse; -uniform vec3 emissive; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - vec3 totalEmissiveRadiance = emissive; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance; - #include - #include - #include - #include - #include - #include - #include -}`,meshmatcap_vert:`#define MATCAP -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; -}`,meshmatcap_frag:`#define MATCAP -uniform vec3 diffuse; -uniform float opacity; -uniform sampler2D matcap; -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 viewDir = normalize( vViewPosition ); - vec3 x = normalize( vec3( viewDir.z, 0.0, - viewDir.x ) ); - vec3 y = cross( viewDir, x ); - vec2 uv = vec2( dot( x, normal ), dot( y, normal ) ) * 0.495 + 0.5; - #ifdef USE_MATCAP - vec4 matcapColor = texture2D( matcap, uv ); - #else - vec4 matcapColor = vec4( vec3( mix( 0.2, 0.8, uv.y ) ), 1.0 ); - #endif - vec3 outgoingLight = diffuseColor.rgb * matcapColor.rgb; - #include - #include - #include - #include - #include - #include -}`,meshnormal_vert:`#define NORMAL -#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) - varying vec3 vViewPosition; -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include -#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) - vViewPosition = - mvPosition.xyz; -#endif -}`,meshnormal_frag:`#define NORMAL -uniform float opacity; -#if defined( FLAT_SHADED ) || defined( USE_BUMPMAP ) || defined( USE_NORMALMAP_TANGENTSPACE ) - varying vec3 vViewPosition; -#endif -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( 0.0, 0.0, 0.0, opacity ); - #include - #include - #include - #include - gl_FragColor = vec4( normalize( normal ) * 0.5 + 0.5, diffuseColor.a ); - #ifdef OPAQUE - gl_FragColor.a = 1.0; - #endif -}`,meshphong_vert:`#define PHONG -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; - #include - #include - #include - #include -}`,meshphong_frag:`#define PHONG -uniform vec3 diffuse; -uniform vec3 emissive; -uniform vec3 specular; -uniform float shininess; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - vec3 totalEmissiveRadiance = emissive; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance; - #include - #include - #include - #include - #include - #include - #include -}`,meshphysical_vert:`#define STANDARD -varying vec3 vViewPosition; -#ifdef USE_TRANSMISSION - varying vec3 vWorldPosition; -#endif -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; - #include - #include - #include -#ifdef USE_TRANSMISSION - vWorldPosition = worldPosition.xyz; -#endif -}`,meshphysical_frag:`#define STANDARD -#ifdef PHYSICAL - #define IOR - #define USE_SPECULAR -#endif -uniform vec3 diffuse; -uniform vec3 emissive; -uniform float roughness; -uniform float metalness; -uniform float opacity; -#ifdef IOR - uniform float ior; -#endif -#ifdef USE_SPECULAR - uniform float specularIntensity; - uniform vec3 specularColor; - #ifdef USE_SPECULAR_COLORMAP - uniform sampler2D specularColorMap; - #endif - #ifdef USE_SPECULAR_INTENSITYMAP - uniform sampler2D specularIntensityMap; - #endif -#endif -#ifdef USE_CLEARCOAT - uniform float clearcoat; - uniform float clearcoatRoughness; -#endif -#ifdef USE_DISPERSION - uniform float dispersion; -#endif -#ifdef USE_IRIDESCENCE - uniform float iridescence; - uniform float iridescenceIOR; - uniform float iridescenceThicknessMinimum; - uniform float iridescenceThicknessMaximum; -#endif -#ifdef USE_SHEEN - uniform vec3 sheenColor; - uniform float sheenRoughness; - #ifdef USE_SHEEN_COLORMAP - uniform sampler2D sheenColorMap; - #endif - #ifdef USE_SHEEN_ROUGHNESSMAP - uniform sampler2D sheenRoughnessMap; - #endif -#endif -#ifdef USE_ANISOTROPY - uniform vec2 anisotropyVector; - #ifdef USE_ANISOTROPYMAP - uniform sampler2D anisotropyMap; - #endif -#endif -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - vec3 totalEmissiveRadiance = emissive; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 totalDiffuse = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse; - vec3 totalSpecular = reflectedLight.directSpecular + reflectedLight.indirectSpecular; - #include - vec3 outgoingLight = totalDiffuse + totalSpecular + totalEmissiveRadiance; - #ifdef USE_SHEEN - - outgoingLight = outgoingLight + sheenSpecularDirect + sheenSpecularIndirect; - - #endif - #ifdef USE_CLEARCOAT - float dotNVcc = saturate( dot( geometryClearcoatNormal, geometryViewDir ) ); - vec3 Fcc = F_Schlick( material.clearcoatF0, material.clearcoatF90, dotNVcc ); - outgoingLight = outgoingLight * ( 1.0 - material.clearcoat * Fcc ) + ( clearcoatSpecularDirect + clearcoatSpecularIndirect ) * material.clearcoat; - #endif - #include - #include - #include - #include - #include - #include -}`,meshtoon_vert:`#define TOON -varying vec3 vViewPosition; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vViewPosition = - mvPosition.xyz; - #include - #include - #include -}`,meshtoon_frag:`#define TOON -uniform vec3 diffuse; -uniform vec3 emissive; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) ); - vec3 totalEmissiveRadiance = emissive; - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + totalEmissiveRadiance; - #include - #include - #include - #include - #include - #include -}`,points_vert:`uniform float size; -uniform float scale; -#include -#include -#include -#include -#include -#include -#ifdef USE_POINTS_UV - varying vec2 vUv; - uniform mat3 uvTransform; -#endif -void main() { - #ifdef USE_POINTS_UV - vUv = ( uvTransform * vec3( uv, 1 ) ).xy; - #endif - #include - #include - #include - #include - #include - #include - gl_PointSize = size; - #ifdef USE_SIZEATTENUATION - bool isPerspective = isPerspectiveMatrix( projectionMatrix ); - if ( isPerspective ) gl_PointSize *= ( scale / - mvPosition.z ); - #endif - #include - #include - #include - #include -}`,points_frag:`uniform vec3 diffuse; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - vec3 outgoingLight = vec3( 0.0 ); - #include - #include - #include - #include - #include - outgoingLight = diffuseColor.rgb; - #include - #include - #include - #include - #include -}`,shadow_vert:`#include -#include -#include -#include -#include -#include -#include -void main() { - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include -}`,shadow_frag:`uniform vec3 color; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -void main() { - #include - gl_FragColor = vec4( color, opacity * ( 1.0 - getShadowMask() ) ); - #include - #include - #include - #include -}`,sprite_vert:`uniform float rotation; -uniform vec2 center; -#include -#include -#include -#include -#include -void main() { - #include - vec4 mvPosition = modelViewMatrix[ 3 ]; - vec2 scale = vec2( length( modelMatrix[ 0 ].xyz ), length( modelMatrix[ 1 ].xyz ) ); - #ifndef USE_SIZEATTENUATION - bool isPerspective = isPerspectiveMatrix( projectionMatrix ); - if ( isPerspective ) scale *= - mvPosition.z; - #endif - vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale; - vec2 rotatedPosition; - rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y; - rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y; - mvPosition.xy += rotatedPosition; - gl_Position = projectionMatrix * mvPosition; - #include - #include - #include -}`,sprite_frag:`uniform vec3 diffuse; -uniform float opacity; -#include -#include -#include -#include -#include -#include -#include -#include -#include -void main() { - vec4 diffuseColor = vec4( diffuse, opacity ); - #include - vec3 outgoingLight = vec3( 0.0 ); - #include - #include - #include - #include - #include - outgoingLight = diffuseColor.rgb; - #include - #include - #include - #include -}`},X={common:{diffuse:{value:new Y(16777215)},opacity:{value:1},map:{value:null},mapTransform:{value:new Fn},alphaMap:{value:null},alphaMapTransform:{value:new Fn},alphaTest:{value:0}},specularmap:{specularMap:{value:null},specularMapTransform:{value:new Fn}},envmap:{envMap:{value:null},envMapRotation:{value:new Fn},reflectivity:{value:1},ior:{value:1.5},refractionRatio:{value:.98},dfgLUT:{value:null}},aomap:{aoMap:{value:null},aoMapIntensity:{value:1},aoMapTransform:{value:new Fn}},lightmap:{lightMap:{value:null},lightMapIntensity:{value:1},lightMapTransform:{value:new Fn}},bumpmap:{bumpMap:{value:null},bumpMapTransform:{value:new Fn},bumpScale:{value:1}},normalmap:{normalMap:{value:null},normalMapTransform:{value:new Fn},normalScale:{value:new K(1,1)}},displacementmap:{displacementMap:{value:null},displacementMapTransform:{value:new Fn},displacementScale:{value:1},displacementBias:{value:0}},emissivemap:{emissiveMap:{value:null},emissiveMapTransform:{value:new Fn}},metalnessmap:{metalnessMap:{value:null},metalnessMapTransform:{value:new Fn}},roughnessmap:{roughnessMap:{value:null},roughnessMapTransform:{value:new Fn}},gradientmap:{gradientMap:{value:null}},fog:{fogDensity:{value:25e-5},fogNear:{value:1},fogFar:{value:2e3},fogColor:{value:new Y(16777215)}},lights:{ambientLightColor:{value:[]},lightProbe:{value:[]},directionalLights:{value:[],properties:{direction:{},color:{}}},directionalLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},directionalShadowMatrix:{value:[]},spotLights:{value:[],properties:{color:{},position:{},direction:{},distance:{},coneCos:{},penumbraCos:{},decay:{}}},spotLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{}}},spotLightMap:{value:[]},spotLightMatrix:{value:[]},pointLights:{value:[],properties:{color:{},position:{},decay:{},distance:{}}},pointLightShadows:{value:[],properties:{shadowIntensity:1,shadowBias:{},shadowNormalBias:{},shadowRadius:{},shadowMapSize:{},shadowCameraNear:{},shadowCameraFar:{}}},pointShadowMatrix:{value:[]},hemisphereLights:{value:[],properties:{direction:{},skyColor:{},groundColor:{}}},rectAreaLights:{value:[],properties:{color:{},position:{},width:{},height:{}}},ltc_1:{value:null},ltc_2:{value:null},probesSH:{value:null},probesMin:{value:new q},probesMax:{value:new q},probesResolution:{value:new q}},points:{diffuse:{value:new Y(16777215)},opacity:{value:1},size:{value:1},scale:{value:1},map:{value:null},alphaMap:{value:null},alphaMapTransform:{value:new Fn},alphaTest:{value:0},uvTransform:{value:new Fn}},sprite:{diffuse:{value:new Y(16777215)},opacity:{value:1},center:{value:new K(.5,.5)},rotation:{value:0},map:{value:null},mapTransform:{value:new Fn},alphaMap:{value:null},alphaMapTransform:{value:new Fn},alphaTest:{value:0}}},ep={basic:{uniforms:fl([X.common,X.specularmap,X.envmap,X.aomap,X.lightmap,X.fog]),vertexShader:$f.meshbasic_vert,fragmentShader:$f.meshbasic_frag},lambert:{uniforms:fl([X.common,X.specularmap,X.envmap,X.aomap,X.lightmap,X.emissivemap,X.bumpmap,X.normalmap,X.displacementmap,X.fog,X.lights,{emissive:{value:new Y(0)},envMapIntensity:{value:1}}]),vertexShader:$f.meshlambert_vert,fragmentShader:$f.meshlambert_frag},phong:{uniforms:fl([X.common,X.specularmap,X.envmap,X.aomap,X.lightmap,X.emissivemap,X.bumpmap,X.normalmap,X.displacementmap,X.fog,X.lights,{emissive:{value:new Y(0)},specular:{value:new Y(1118481)},shininess:{value:30},envMapIntensity:{value:1}}]),vertexShader:$f.meshphong_vert,fragmentShader:$f.meshphong_frag},standard:{uniforms:fl([X.common,X.envmap,X.aomap,X.lightmap,X.emissivemap,X.bumpmap,X.normalmap,X.displacementmap,X.roughnessmap,X.metalnessmap,X.fog,X.lights,{emissive:{value:new Y(0)},roughness:{value:1},metalness:{value:0},envMapIntensity:{value:1}}]),vertexShader:$f.meshphysical_vert,fragmentShader:$f.meshphysical_frag},toon:{uniforms:fl([X.common,X.aomap,X.lightmap,X.emissivemap,X.bumpmap,X.normalmap,X.displacementmap,X.gradientmap,X.fog,X.lights,{emissive:{value:new Y(0)}}]),vertexShader:$f.meshtoon_vert,fragmentShader:$f.meshtoon_frag},matcap:{uniforms:fl([X.common,X.bumpmap,X.normalmap,X.displacementmap,X.fog,{matcap:{value:null}}]),vertexShader:$f.meshmatcap_vert,fragmentShader:$f.meshmatcap_frag},points:{uniforms:fl([X.points,X.fog]),vertexShader:$f.points_vert,fragmentShader:$f.points_frag},dashed:{uniforms:fl([X.common,X.fog,{scale:{value:1},dashSize:{value:1},totalSize:{value:2}}]),vertexShader:$f.linedashed_vert,fragmentShader:$f.linedashed_frag},depth:{uniforms:fl([X.common,X.displacementmap]),vertexShader:$f.depth_vert,fragmentShader:$f.depth_frag},normal:{uniforms:fl([X.common,X.bumpmap,X.normalmap,X.displacementmap,{opacity:{value:1}}]),vertexShader:$f.meshnormal_vert,fragmentShader:$f.meshnormal_frag},sprite:{uniforms:fl([X.sprite,X.fog]),vertexShader:$f.sprite_vert,fragmentShader:$f.sprite_frag},background:{uniforms:{uvTransform:{value:new Fn},t2D:{value:null},backgroundIntensity:{value:1}},vertexShader:$f.background_vert,fragmentShader:$f.background_frag},backgroundCube:{uniforms:{envMap:{value:null},backgroundBlurriness:{value:0},backgroundIntensity:{value:1},backgroundRotation:{value:new Fn}},vertexShader:$f.backgroundCube_vert,fragmentShader:$f.backgroundCube_frag},cube:{uniforms:{tCube:{value:null},tFlip:{value:-1},opacity:{value:1}},vertexShader:$f.cube_vert,fragmentShader:$f.cube_frag},equirect:{uniforms:{tEquirect:{value:null}},vertexShader:$f.equirect_vert,fragmentShader:$f.equirect_frag},distance:{uniforms:fl([X.common,X.displacementmap,{referencePosition:{value:new q},nearDistance:{value:1},farDistance:{value:1e3}}]),vertexShader:$f.distance_vert,fragmentShader:$f.distance_frag},shadow:{uniforms:fl([X.lights,X.fog,{color:{value:new Y(0)},opacity:{value:1}}]),vertexShader:$f.shadow_vert,fragmentShader:$f.shadow_frag}};ep.physical={uniforms:fl([ep.standard.uniforms,{clearcoat:{value:0},clearcoatMap:{value:null},clearcoatMapTransform:{value:new Fn},clearcoatNormalMap:{value:null},clearcoatNormalMapTransform:{value:new Fn},clearcoatNormalScale:{value:new K(1,1)},clearcoatRoughness:{value:0},clearcoatRoughnessMap:{value:null},clearcoatRoughnessMapTransform:{value:new Fn},dispersion:{value:0},iridescence:{value:0},iridescenceMap:{value:null},iridescenceMapTransform:{value:new Fn},iridescenceIOR:{value:1.3},iridescenceThicknessMinimum:{value:100},iridescenceThicknessMaximum:{value:400},iridescenceThicknessMap:{value:null},iridescenceThicknessMapTransform:{value:new Fn},sheen:{value:0},sheenColor:{value:new Y(0)},sheenColorMap:{value:null},sheenColorMapTransform:{value:new Fn},sheenRoughness:{value:1},sheenRoughnessMap:{value:null},sheenRoughnessMapTransform:{value:new Fn},transmission:{value:0},transmissionMap:{value:null},transmissionMapTransform:{value:new Fn},transmissionSamplerSize:{value:new K},transmissionSamplerMap:{value:null},thickness:{value:0},thicknessMap:{value:null},thicknessMapTransform:{value:new Fn},attenuationDistance:{value:0},attenuationColor:{value:new Y(0)},specularColor:{value:new Y(1,1,1)},specularColorMap:{value:null},specularColorMapTransform:{value:new Fn},specularIntensity:{value:1},specularIntensityMap:{value:null},specularIntensityMapTransform:{value:new Fn},anisotropyVector:{value:new K},anisotropyMap:{value:null},anisotropyMapTransform:{value:new Fn}}]),vertexShader:$f.meshphysical_vert,fragmentShader:$f.meshphysical_frag};var tp={r:0,b:0,g:0},np=new J,rp=new Fn;rp.set(-1,0,0,0,1,0,0,0,1);function ip(e,t,n,r,i,a){let o=new Y(0),s=i===!0?0:1,c,l,u=null,d=0,f=null;function p(e){let n=e.isScene===!0?e.background:null;if(n&&n.isTexture){let r=e.backgroundBlurriness>0;n=t.get(n,r)}return n}function m(t){let r=!1,i=p(t);i===null?g(o,s):i&&i.isColor&&(g(i,1),r=!0);let c=e.xr.getEnvironmentBlendMode();c===`additive`?n.buffers.color.setClear(0,0,0,1,a):c===`alpha-blend`&&n.buffers.color.setClear(0,0,0,0,a),(e.autoClear||r)&&(n.buffers.depth.setTest(!0),n.buffers.depth.setMask(!0),n.buffers.color.setMask(!0),e.clear(e.autoClearColor,e.autoClearDepth,e.autoClearStencil))}function h(t,n){let i=p(n);i&&(i.isCubeTexture||i.mapping===306)?(l===void 0&&(l=new La(new bs(1,1,1),new yl({name:`BackgroundCubeMaterial`,uniforms:dl(ep.backgroundCube.uniforms),vertexShader:ep.backgroundCube.vertexShader,fragmentShader:ep.backgroundCube.fragmentShader,side:1,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),l.geometry.deleteAttribute(`normal`),l.geometry.deleteAttribute(`uv`),l.onBeforeRender=function(e,t,n){this.matrixWorld.copyPosition(n.matrixWorld)},Object.defineProperty(l.material,"envMap",{get:function(){return this.uniforms.envMap.value}}),r.update(l)),l.material.uniforms.envMap.value=i,l.material.uniforms.backgroundBlurriness.value=n.backgroundBlurriness,l.material.uniforms.backgroundIntensity.value=n.backgroundIntensity,l.material.uniforms.backgroundRotation.value.setFromMatrix4(np.makeRotationFromEuler(n.backgroundRotation)).transpose(),i.isCubeTexture&&i.isRenderTargetTexture===!1&&l.material.uniforms.backgroundRotation.value.premultiply(rp),l.material.toneMapped=Bn.getTransfer(i.colorSpace)!==_t,(u!==i||d!==i.version||f!==e.toneMapping)&&(l.material.needsUpdate=!0,u=i,d=i.version,f=e.toneMapping),l.layers.enableAll(),t.unshift(l,l.geometry,l.material,0,0,null)):i&&i.isTexture&&(c===void 0&&(c=new La(new Qc(2,2),new yl({name:`BackgroundMaterial`,uniforms:dl(ep.background.uniforms),vertexShader:ep.background.vertexShader,fragmentShader:ep.background.fragmentShader,side:0,depthTest:!1,depthWrite:!1,fog:!1,allowOverride:!1})),c.geometry.deleteAttribute(`normal`),Object.defineProperty(c.material,"map",{get:function(){return this.uniforms.t2D.value}}),r.update(c)),c.material.uniforms.t2D.value=i,c.material.uniforms.backgroundIntensity.value=n.backgroundIntensity,c.material.toneMapped=Bn.getTransfer(i.colorSpace)!==_t,i.matrixAutoUpdate===!0&&i.updateMatrix(),c.material.uniforms.uvTransform.value.copy(i.matrix),(u!==i||d!==i.version||f!==e.toneMapping)&&(c.material.needsUpdate=!0,u=i,d=i.version,f=e.toneMapping),c.layers.enableAll(),t.unshift(c,c.geometry,c.material,0,0,null))}function g(t,r){t.getRGB(tp,hl(e)),n.buffers.color.setClear(tp.r,tp.g,tp.b,r,a)}function _(){l!==void 0&&(l.geometry.dispose(),l.material.dispose(),l=void 0),c!==void 0&&(c.geometry.dispose(),c.material.dispose(),c=void 0)}return{getClearColor:function(){return o},setClearColor:function(e,t=1){o.set(e),s=t,g(o,s)},getClearAlpha:function(){return s},setClearAlpha:function(e){s=e,g(o,s)},render:m,addToRenderList:h,dispose:_}}function ap(e,t){let n=e.getParameter(e.MAX_VERTEX_ATTRIBS),r={},i=f(null),a=i,o=!1;function s(n,r,i,s,c){let u=!1,f=d(n,s,i,r);a!==f&&(a=f,l(a.object)),u=p(n,s,i,c),u&&m(n,s,i,c),c!==null&&t.update(c,e.ELEMENT_ARRAY_BUFFER),(u||o)&&(o=!1,b(n,r,i,s),c!==null&&e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,t.get(c).buffer))}function c(){return e.createVertexArray()}function l(t){return e.bindVertexArray(t)}function u(t){return e.deleteVertexArray(t)}function d(e,t,n,i){let a=i.wireframe===!0,o=r[t.id];o===void 0&&(o={},r[t.id]=o);let s=e.isInstancedMesh===!0?e.id:0,l=o[s];l===void 0&&(l={},o[s]=l);let u=l[n.id];u===void 0&&(u={},l[n.id]=u);let d=u[a];return d===void 0&&(d=f(c()),u[a]=d),d}function f(e){let t=[],r=[],i=[];for(let e=0;e=0){let n=i[t],r=o[t];if(r===void 0&&(t===`instanceMatrix`&&e.instanceMatrix&&(r=e.instanceMatrix),t===`instanceColor`&&e.instanceColor&&(r=e.instanceColor)),n===void 0||n.attribute!==r||r&&n.data!==r.data)return!0;s++}return a.attributesNum!==s||a.index!==r}function m(e,t,n,r){let i={},o=t.attributes,s=0,c=n.getAttributes();for(let t in c)if(c[t].location>=0){let n=o[t];n===void 0&&(t===`instanceMatrix`&&e.instanceMatrix&&(n=e.instanceMatrix),t===`instanceColor`&&e.instanceColor&&(n=e.instanceColor));let r={};r.attribute=n,n&&n.data&&(r.data=n.data),i[t]=r,s++}a.attributes=i,a.attributesNum=s,a.index=r}function h(){let e=a.newAttributes;for(let t=0,n=e.length;t=0){let s=o[r];if(s===void 0&&(r===`instanceMatrix`&&n.instanceMatrix&&(s=n.instanceMatrix),r===`instanceColor`&&n.instanceColor&&(s=n.instanceColor)),s!==void 0){let r=s.normalized,o=s.itemSize,c=t.get(s);if(c===void 0)continue;let l=c.buffer,u=c.type,d=c.bytesPerElement,f=u===e.INT||u===e.UNSIGNED_INT||s.gpuType===1013;if(s.isInterleavedBufferAttribute){let t=s.data,c=t.stride,p=s.offset;if(t.isInstancedInterleavedBuffer){for(let e=0;e0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.HIGH_FLOAT).precision>0)return`highp`;t=`mediump`}return t===`mediump`&&e.getShaderPrecisionFormat(e.VERTEX_SHADER,e.MEDIUM_FLOAT).precision>0&&e.getShaderPrecisionFormat(e.FRAGMENT_SHADER,e.MEDIUM_FLOAT).precision>0?`mediump`:`lowp`}let l=n.precision===void 0?`highp`:n.precision,u=c(l);u!==l&&(G(`WebGLRenderer:`,l,`not supported, using`,u,`instead.`),l=u);let d=n.logarithmicDepthBuffer===!0,f=n.reversedDepthBuffer===!0&&t.has(`EXT_clip_control`);n.reversedDepthBuffer===!0&&f===!1&&G(`WebGLRenderer: Unable to use reversed depth buffer due to missing EXT_clip_control extension. Fallback to default depth buffer.`);let p=e.getParameter(e.MAX_TEXTURE_IMAGE_UNITS),m=e.getParameter(e.MAX_VERTEX_TEXTURE_IMAGE_UNITS),h=e.getParameter(e.MAX_TEXTURE_SIZE),g=e.getParameter(e.MAX_CUBE_MAP_TEXTURE_SIZE),_=e.getParameter(e.MAX_VERTEX_ATTRIBS),v=e.getParameter(e.MAX_VERTEX_UNIFORM_VECTORS),y=e.getParameter(e.MAX_VARYING_VECTORS),b=e.getParameter(e.MAX_FRAGMENT_UNIFORM_VECTORS),x=e.getParameter(e.MAX_SAMPLES),S=e.getParameter(e.SAMPLES);return{isWebGL2:!0,getMaxAnisotropy:a,getMaxPrecision:c,textureFormatReadable:o,textureTypeReadable:s,precision:l,logarithmicDepthBuffer:d,reversedDepthBuffer:f,maxTextures:p,maxVertexTextures:m,maxTextureSize:h,maxCubemapSize:g,maxAttributes:_,maxVertexUniforms:v,maxVaryings:y,maxFragmentUniforms:b,maxSamples:x,samples:S}}function cp(e){let t=this,n=null,r=0,i=!1,a=!1,o=new mo,s=new Fn,c={value:null,needsUpdate:!1};this.uniform=c,this.numPlanes=0,this.numIntersection=0,this.init=function(e,t){let n=e.length!==0||t||r!==0||i;return i=t,r=e.length,n},this.beginShadows=function(){a=!0,u(null)},this.endShadows=function(){a=!1},this.setGlobalState=function(e,t){n=u(e,t,0)},this.setState=function(t,o,s){let d=t.clippingPlanes,f=t.clipIntersection,p=t.clipShadows,m=e.get(t);if(!i||d===null||d.length===0||a&&!p)a?u(null):l();else{let e=a?0:r,t=e*4,i=m.clippingState||null;c.value=i,i=u(d,o,t,s);for(let e=0;e!==t;++e)i[e]=n[e];m.clippingState=i,this.numIntersection=f?this.numPlanes:0,this.numPlanes+=e}};function l(){c.value!==n&&(c.value=n,c.needsUpdate=r>0),t.numPlanes=r,t.numIntersection=0}function u(e,n,r,i){let a=e===null?0:e.length,l=null;if(a!==0){if(l=c.value,i!==!0||l===null){let t=r+a*4,i=n.matrixWorldInverse;s.getNormalMatrix(i),(l===null||l.length0&&this._blur(s,0,0,t),this._applyPMREM(s),this._cleanup(s),s}fromEquirectangular(e,t=null){return this._fromTexture(e,t)}fromCubemap(e,t=null){return this._fromTexture(e,t)}compileCubemapShader(){this._cubemapMaterial===null&&(this._cubemapMaterial=Dp(),this._compileMaterial(this._cubemapMaterial))}compileEquirectangularShader(){this._equirectMaterial===null&&(this._equirectMaterial=Ep(),this._compileMaterial(this._equirectMaterial))}dispose(){this._dispose(),this._cubemapMaterial!==null&&this._cubemapMaterial.dispose(),this._equirectMaterial!==null&&this._equirectMaterial.dispose(),this._backgroundBox!==null&&(this._backgroundBox.geometry.dispose(),this._backgroundBox.material.dispose())}_setSize(e){this._lodMax=Math.floor(Math.log2(e)),this._cubeSize=2**this._lodMax}_dispose(){this._blurMaterial!==null&&this._blurMaterial.dispose(),this._ggxMaterial!==null&&this._ggxMaterial.dispose(),this._pingPongRenderTarget!==null&&this._pingPongRenderTarget.dispose();for(let e=0;e2?l:0,l,l),c.setRenderTarget(r),p&&c.render(d,a),c.render(e,a)}c.toneMapping=u,c.autoClear=l,e.background=m}_textureToCubeUV(e,t){let n=this._renderer,r=e.mapping===301||e.mapping===302;r?(this._cubemapMaterial===null&&(this._cubemapMaterial=Dp()),this._cubemapMaterial.uniforms.flipEnvMap.value=e.isRenderTargetTexture===!1?-1:1):this._equirectMaterial===null&&(this._equirectMaterial=Ep());let i=r?this._cubemapMaterial:this._equirectMaterial,a=this._lodMeshes[0];a.material=i;let o=i.uniforms;o.envMap.value=e;let s=this._cubeSize;Cp(t,0,0,3*s,2*s),n.setRenderTarget(t),n.render(a,pp)}_applyPMREM(e){let t=this._renderer,n=t.autoClear;t.autoClear=!1;let r=this._lodMeshes.length;for(let t=1;td-lp?n-d+lp:0),m=4*(this._cubeSize-f);s.envMap.value=e.texture,s.roughness.value=u,s.mipInt.value=d-t,Cp(i,p,m,3*f,2*f),r.setRenderTarget(i),r.render(o,pp),s.envMap.value=i.texture,s.roughness.value=0,s.mipInt.value=d-n,Cp(e,p,m,3*f,2*f),r.setRenderTarget(e),r.render(o,pp)}_blur(e,t,n,r,i){let a=this._pingPongRenderTarget;this._halfBlur(e,a,t,n,r,`latitudinal`,i),this._halfBlur(a,e,n,n,r,`longitudinal`,i)}_halfBlur(e,t,n,r,i,a,o){let s=this._renderer,c=this._blurMaterial;a!==`latitudinal`&&a!==`longitudinal`&&$t(`blur direction must be either latitudinal or longitudinal!`);let l=this._lodMeshes[r];l.material=c;let u=c.uniforms,d=this._sizeLods[n]-1,f=isFinite(i)?Math.PI/(2*d):2*Math.PI/(2*dp-1),p=i/f,m=isFinite(i)?1+Math.floor(3*p):dp;m>dp&&G(`sigmaRadians, ${i}, is too large and will clip, as it requested ${m} samples when the maximum is set to ${dp}`);let h=[],g=0;for(let e=0;e_-lp?r-_+lp:0),4*(this._cubeSize-v),3*v,2*v),s.setRenderTarget(t),s.render(l,pp)}};function xp(e){let t=[],n=[],r=[],i=e,a=e-lp+1+up.length;for(let o=0;oe-lp?s=up[o-e+lp-1]:o===0&&(s=0),n.push(s);let c=1/(a-2),l=-c,u=1+c,d=[l,l,u,l,u,u,l,l,u,u,l,u],f=new Float32Array(108),p=new Float32Array(72),m=new Float32Array(36);for(let e=0;e<6;e++){let t=e%3*2/3-1,n=e>2?0:-1,r=[t,n,0,t+2/3,n,0,t+2/3,n+1,0,t,n,0,t+2/3,n+1,0,t,n+1,0];f.set(r,18*e),p.set(d,12*e);let i=[e,e,e,e,e,e];m.set(i,6*e)}let h=new Ki;h.setAttribute(`position`,new Ti(f,3)),h.setAttribute(`uv`,new Ti(p,2)),h.setAttribute(`faceIndex`,new Ti(m,1)),r.push(new La(h,null)),i>lp&&i--}return{lodMeshes:r,sizeLods:t,sigmas:n}}function Sp(e,t,n){let r=new $n(e,t,n);return r.texture.mapping=306,r.texture.name=`PMREM.cubeUv`,r.scissorTest=!0,r}function Cp(e,t,n,r,i){e.viewport.set(t,n,r,i),e.scissor.set(t,n,r,i)}function wp(e,t,n){return new yl({name:`PMREMGGXConvolution`,defines:{GGX_SAMPLES:fp,CUBEUV_TEXEL_WIDTH:1/t,CUBEUV_TEXEL_HEIGHT:1/n,CUBEUV_MAX_MIP:`${e}.0`},uniforms:{envMap:{value:null},roughness:{value:0},mipInt:{value:0}},vertexShader:Op(),fragmentShader:` - - precision highp float; - precision highp int; - - varying vec3 vOutputDirection; - - uniform sampler2D envMap; - uniform float roughness; - uniform float mipInt; - - #define ENVMAP_TYPE_CUBE_UV - #include - - #define PI 3.14159265359 - - // Van der Corput radical inverse - float radicalInverse_VdC(uint bits) { - bits = (bits << 16u) | (bits >> 16u); - bits = ((bits & 0x55555555u) << 1u) | ((bits & 0xAAAAAAAAu) >> 1u); - bits = ((bits & 0x33333333u) << 2u) | ((bits & 0xCCCCCCCCu) >> 2u); - bits = ((bits & 0x0F0F0F0Fu) << 4u) | ((bits & 0xF0F0F0F0u) >> 4u); - bits = ((bits & 0x00FF00FFu) << 8u) | ((bits & 0xFF00FF00u) >> 8u); - return float(bits) * 2.3283064365386963e-10; // / 0x100000000 - } - - // Hammersley sequence - vec2 hammersley(uint i, uint N) { - return vec2(float(i) / float(N), radicalInverse_VdC(i)); - } - - // GGX VNDF importance sampling (Eric Heitz 2018) - // "Sampling the GGX Distribution of Visible Normals" - // https://jcgt.org/published/0007/04/01/ - vec3 importanceSampleGGX_VNDF(vec2 Xi, vec3 V, float roughness) { - float alpha = roughness * roughness; - - // Section 4.1: Orthonormal basis - vec3 T1 = vec3(1.0, 0.0, 0.0); - vec3 T2 = cross(V, T1); - - // Section 4.2: Parameterization of projected area - float r = sqrt(Xi.x); - float phi = 2.0 * PI * Xi.y; - float t1 = r * cos(phi); - float t2 = r * sin(phi); - float s = 0.5 * (1.0 + V.z); - t2 = (1.0 - s) * sqrt(1.0 - t1 * t1) + s * t2; - - // Section 4.3: Reprojection onto hemisphere - vec3 Nh = t1 * T1 + t2 * T2 + sqrt(max(0.0, 1.0 - t1 * t1 - t2 * t2)) * V; - - // Section 3.4: Transform back to ellipsoid configuration - return normalize(vec3(alpha * Nh.x, alpha * Nh.y, max(0.0, Nh.z))); - } - - void main() { - vec3 N = normalize(vOutputDirection); - vec3 V = N; // Assume view direction equals normal for pre-filtering - - vec3 prefilteredColor = vec3(0.0); - float totalWeight = 0.0; - - // For very low roughness, just sample the environment directly - if (roughness < 0.001) { - gl_FragColor = vec4(bilinearCubeUV(envMap, N, mipInt), 1.0); - return; - } - - // Tangent space basis for VNDF sampling - vec3 up = abs(N.z) < 0.999 ? vec3(0.0, 0.0, 1.0) : vec3(1.0, 0.0, 0.0); - vec3 tangent = normalize(cross(up, N)); - vec3 bitangent = cross(N, tangent); - - for(uint i = 0u; i < uint(GGX_SAMPLES); i++) { - vec2 Xi = hammersley(i, uint(GGX_SAMPLES)); - - // For PMREM, V = N, so in tangent space V is always (0, 0, 1) - vec3 H_tangent = importanceSampleGGX_VNDF(Xi, vec3(0.0, 0.0, 1.0), roughness); - - // Transform H back to world space - vec3 H = normalize(tangent * H_tangent.x + bitangent * H_tangent.y + N * H_tangent.z); - vec3 L = normalize(2.0 * dot(V, H) * H - V); - - float NdotL = max(dot(N, L), 0.0); - - if(NdotL > 0.0) { - // Sample environment at fixed mip level - // VNDF importance sampling handles the distribution filtering - vec3 sampleColor = bilinearCubeUV(envMap, L, mipInt); - - // Weight by NdotL for the split-sum approximation - // VNDF PDF naturally accounts for the visible microfacet distribution - prefilteredColor += sampleColor * NdotL; - totalWeight += NdotL; - } - } - - if (totalWeight > 0.0) { - prefilteredColor = prefilteredColor / totalWeight; - } - - gl_FragColor = vec4(prefilteredColor, 1.0); - } - `,blending:0,depthTest:!1,depthWrite:!1})}function Tp(e,t,n){let r=new Float32Array(dp),i=new q(0,1,0);return new yl({name:`SphericalGaussianBlur`,defines:{n:dp,CUBEUV_TEXEL_WIDTH:1/t,CUBEUV_TEXEL_HEIGHT:1/n,CUBEUV_MAX_MIP:`${e}.0`},uniforms:{envMap:{value:null},samples:{value:1},weights:{value:r},latitudinal:{value:!1},dTheta:{value:0},mipInt:{value:0},poleAxis:{value:i}},vertexShader:Op(),fragmentShader:` - - precision mediump float; - precision mediump int; - - varying vec3 vOutputDirection; - - uniform sampler2D envMap; - uniform int samples; - uniform float weights[ n ]; - uniform bool latitudinal; - uniform float dTheta; - uniform float mipInt; - uniform vec3 poleAxis; - - #define ENVMAP_TYPE_CUBE_UV - #include - - vec3 getSample( float theta, vec3 axis ) { - - float cosTheta = cos( theta ); - // Rodrigues' axis-angle rotation - vec3 sampleDirection = vOutputDirection * cosTheta - + cross( axis, vOutputDirection ) * sin( theta ) - + axis * dot( axis, vOutputDirection ) * ( 1.0 - cosTheta ); - - return bilinearCubeUV( envMap, sampleDirection, mipInt ); - - } - - void main() { - - vec3 axis = latitudinal ? poleAxis : cross( poleAxis, vOutputDirection ); - - if ( all( equal( axis, vec3( 0.0 ) ) ) ) { - - axis = vec3( vOutputDirection.z, 0.0, - vOutputDirection.x ); - - } - - axis = normalize( axis ); - - gl_FragColor = vec4( 0.0, 0.0, 0.0, 1.0 ); - gl_FragColor.rgb += weights[ 0 ] * getSample( 0.0, axis ); - - for ( int i = 1; i < n; i++ ) { - - if ( i >= samples ) { - - break; - - } - - float theta = dTheta * float( i ); - gl_FragColor.rgb += weights[ i ] * getSample( -1.0 * theta, axis ); - gl_FragColor.rgb += weights[ i ] * getSample( theta, axis ); - - } - - } - `,blending:0,depthTest:!1,depthWrite:!1})}function Ep(){return new yl({name:`EquirectangularToCubeUV`,uniforms:{envMap:{value:null}},vertexShader:Op(),fragmentShader:` - - precision mediump float; - precision mediump int; - - varying vec3 vOutputDirection; - - uniform sampler2D envMap; - - #include - - void main() { - - vec3 outputDirection = normalize( vOutputDirection ); - vec2 uv = equirectUv( outputDirection ); - - gl_FragColor = vec4( texture2D ( envMap, uv ).rgb, 1.0 ); - - } - `,blending:0,depthTest:!1,depthWrite:!1})}function Dp(){return new yl({name:`CubemapToCubeUV`,uniforms:{envMap:{value:null},flipEnvMap:{value:-1}},vertexShader:Op(),fragmentShader:` - - precision mediump float; - precision mediump int; - - uniform float flipEnvMap; - - varying vec3 vOutputDirection; - - uniform samplerCube envMap; - - void main() { - - gl_FragColor = textureCube( envMap, vec3( flipEnvMap * vOutputDirection.x, vOutputDirection.yz ) ); - - } - `,blending:0,depthTest:!1,depthWrite:!1})}function Op(){return` - - precision mediump float; - precision mediump int; - - attribute float faceIndex; - - varying vec3 vOutputDirection; - - // RH coordinate system; PMREM face-indexing convention - vec3 getDirection( vec2 uv, float face ) { - - uv = 2.0 * uv - 1.0; - - vec3 direction = vec3( uv, 1.0 ); - - if ( face == 0.0 ) { - - direction = direction.zyx; // ( 1, v, u ) pos x - - } else if ( face == 1.0 ) { - - direction = direction.xzy; - direction.xz *= -1.0; // ( -u, 1, -v ) pos y - - } else if ( face == 2.0 ) { - - direction.x *= -1.0; // ( -u, v, 1 ) pos z - - } else if ( face == 3.0 ) { - - direction = direction.zyx; - direction.xz *= -1.0; // ( -1, v, -u ) neg x - - } else if ( face == 4.0 ) { - - direction = direction.xzy; - direction.xy *= -1.0; // ( -u, -1, v ) neg y - - } else if ( face == 5.0 ) { - - direction.z *= -1.0; // ( u, v, -1 ) neg z - - } - - return direction; - - } - - void main() { - - vOutputDirection = getDirection( uv, faceIndex ); - gl_Position = vec4( position, 1.0 ); - - } - `}var kp=class extends $n{constructor(e=1,t={}){super(e,e,t),this.isWebGLCubeRenderTarget=!0;let n={width:e,height:e,depth:1},r=[n,n,n,n,n,n];this.texture=new ms(r),this._setTextureOptions(t),this.texture.isRenderTargetTexture=!0}fromEquirectangularTexture(e,t){this.texture.type=t.type,this.texture.colorSpace=t.colorSpace,this.texture.generateMipmaps=t.generateMipmaps,this.texture.minFilter=t.minFilter,this.texture.magFilter=t.magFilter;let n={uniforms:{tEquirect:{value:null}},vertexShader:` - - varying vec3 vWorldDirection; - - vec3 transformDirection( in vec3 dir, in mat4 matrix ) { - - return normalize( ( matrix * vec4( dir, 0.0 ) ).xyz ); - - } - - void main() { - - vWorldDirection = transformDirection( position, modelMatrix ); - - #include - #include - - } - `,fragmentShader:` - - uniform sampler2D tEquirect; - - varying vec3 vWorldDirection; - - #include - - void main() { - - vec3 direction = normalize( vWorldDirection ); - - vec2 sampleUV = equirectUv( direction ); - - gl_FragColor = texture2D( tEquirect, sampleUV ); - - } - `},r=new bs(5,5,5),i=new yl({name:`CubemapFromEquirect`,uniforms:dl(n.uniforms),vertexShader:n.vertexShader,fragmentShader:n.fragmentShader,side:1,blending:0});i.uniforms.tEquirect.value=t;let a=new La(r,i),o=t.minFilter;return t.minFilter===1008&&(t.minFilter=M),new od(1,10,this).update(e,a),t.minFilter=o,a.geometry.dispose(),a.material.dispose(),this}clear(e,t=!0,n=!0,r=!0){let i=e.getRenderTarget();for(let i=0;i<6;i++)e.setRenderTarget(this,i),e.clear(t,n,r);e.setRenderTarget(i)}};function Ap(e){let t=new WeakMap,n=new WeakMap,r=null;function i(e,t=!1){return e==null?null:t?o(e):a(e)}function a(n){if(n&&n.isTexture){let r=n.mapping;if(r===303||r===304)if(t.has(n)){let e=t.get(n).texture;return s(e,n.mapping)}else{let r=n.image;if(r&&r.height>0){let i=new kp(r.height);return i.fromEquirectangularTexture(e,n),t.set(n,i),n.addEventListener(`dispose`,l),s(i.texture,n.mapping)}else return null}}return n}function o(t){if(t&&t.isTexture){let i=t.mapping,a=i===303||i===304,o=i===301||i===302;if(a||o){let i=n.get(t),s=i===void 0?0:i.texture.pmremVersion;if(t.isRenderTargetTexture&&t.pmremVersion!==s)return r===null&&(r=new bp(e)),i=a?r.fromEquirectangular(t,i):r.fromCubemap(t,i),i.texture.pmremVersion=t.pmremVersion,n.set(t,i),i.texture;if(i!==void 0)return i.texture;{let s=t.image;return a&&s&&s.height>0||o&&s&&c(s)?(r===null&&(r=new bp(e)),i=a?r.fromEquirectangular(t):r.fromCubemap(t),i.texture.pmremVersion=t.pmremVersion,n.set(t,i),t.addEventListener(`dispose`,u),i.texture):null}}}return t}function s(e,t){return t===303?e.mapping=301:t===304&&(e.mapping=302),e}function c(e){let t=0;for(let n=0;n<6;n++)e[n]!==void 0&&t++;return t===6}function l(e){let n=e.target;n.removeEventListener(`dispose`,l);let r=t.get(n);r!==void 0&&(t.delete(n),r.dispose())}function u(e){let t=e.target;t.removeEventListener(`dispose`,u);let r=n.get(t);r!==void 0&&(n.delete(t),r.dispose())}function d(){t=new WeakMap,n=new WeakMap,r!==null&&(r.dispose(),r=null)}return{get:i,dispose:d}}function jp(e){let t={};function n(n){if(t[n]!==void 0)return t[n];let r=e.getExtension(n);return t[n]=r,r}return{has:function(e){return n(e)!==null},init:function(){n(`EXT_color_buffer_float`),n(`WEBGL_clip_cull_distance`),n(`OES_texture_float_linear`),n(`EXT_color_buffer_half_float`),n(`WEBGL_multisampled_render_to_texture`),n(`WEBGL_render_shared_exponent`)},get:function(e){let t=n(e);return t===null&&en(`WebGLRenderer: `+e+` extension not supported.`),t}}}function Mp(e,t,n,r){let i={},a=new WeakMap;function o(e){let s=e.target;s.index!==null&&t.remove(s.index);for(let e in s.attributes)t.remove(s.attributes[e]);s.removeEventListener(`dispose`,o),delete i[s.id];let c=a.get(s);c&&(t.remove(c),a.delete(s)),r.releaseStatesOfGeometry(s),s.isInstancedBufferGeometry===!0&&delete s._maxInstanceCount,n.memory.geometries--}function s(e,t){return i[t.id]===!0?t:(t.addEventListener(`dispose`,o),i[t.id]=!0,n.memory.geometries++,t)}function c(n){let r=n.attributes;for(let n in r)t.update(r[n],e.ARRAY_BUFFER)}function l(e){let n=[],r=e.index,i=e.attributes.position,o=0;if(i===void 0)return;if(r!==null){let e=r.array;o=r.version;for(let t=0,r=e.length;t=65535?Mi:Ai)(n,1);s.version=o;let c=a.get(e);c&&t.remove(c),a.set(e,s)}function u(e){let t=a.get(e);if(t){let n=e.index;n!==null&&t.versiont.maxTextureSize&&(m=Math.ceil(p/t.maxTextureSize),p=t.maxTextureSize);let h=new Float32Array(p*m*4*u),g=new er(h,p,m,u);g.type=V,g.needsUpdate=!0;let _=f*4;for(let t=0;t - #include - - void main() { - gl_FragColor = texture2D( tDiffuse, vUv ); - - #ifdef LINEAR_TONE_MAPPING - gl_FragColor.rgb = LinearToneMapping( gl_FragColor.rgb ); - #elif defined( REINHARD_TONE_MAPPING ) - gl_FragColor.rgb = ReinhardToneMapping( gl_FragColor.rgb ); - #elif defined( CINEON_TONE_MAPPING ) - gl_FragColor.rgb = CineonToneMapping( gl_FragColor.rgb ); - #elif defined( ACES_FILMIC_TONE_MAPPING ) - gl_FragColor.rgb = ACESFilmicToneMapping( gl_FragColor.rgb ); - #elif defined( AGX_TONE_MAPPING ) - gl_FragColor.rgb = AgXToneMapping( gl_FragColor.rgb ); - #elif defined( NEUTRAL_TONE_MAPPING ) - gl_FragColor.rgb = NeutralToneMapping( gl_FragColor.rgb ); - #elif defined( CUSTOM_TONE_MAPPING ) - gl_FragColor.rgb = CustomToneMapping( gl_FragColor.rgb ); - #endif - - #ifdef SRGB_TRANSFER - gl_FragColor = sRGBTransferOETF( gl_FragColor ); - #endif - }`,depthTest:!1,depthWrite:!1}),l=new La(s,c),u=new Nu(-1,1,1,-1,0,1),d=null,f=null,p=!1,m,h=null,g=[],_=!1;this.setSize=function(e,t){a.setSize(e,t),o.setSize(e,t);for(let n=0;n0&&g[0].isRenderPass===!0;let t=a.width,n=a.height;for(let e=0;e0)return e;let i=t*n,a=Wp[i];if(a===void 0&&(a=new Float32Array(i),Wp[i]=a),t!==0){r.toArray(a,0);for(let r=1,i=0;r!==t;++r)i+=n,e[r].toArray(a,i)}return a}function Xp(e,t){if(e.length!==t.length)return!1;for(let n=0,r=e.length;n0&&(this.seq=r.concat(i))}setValue(e,t,n,r){let i=this.map[t];i!==void 0&&i.setValue(e,n,r)}setOptional(e,t,n){let r=t[n];r!==void 0&&this.setValue(e,n,r)}static upload(e,t,n,r){for(let i=0,a=t.length;i!==a;++i){let a=t[i],o=n[a.id];o.needsUpdate!==!1&&a.setValue(e,o.value,r)}}static seqWithValue(e,t){let n=[];for(let r=0,i=e.length;r!==i;++r){let i=e[r];i.id in t&&n.push(i)}return n}};function Km(e,t,n){let r=e.createShader(t);return e.shaderSource(r,n),e.compileShader(r),r}var qm=37297,Jm=0;function Ym(e,t){let n=e.split(` -`),r=[],i=Math.max(t-6,0),a=Math.min(t+6,n.length);for(let e=i;e`:` `} ${i}: ${n[e]}`)}return r.join(` -`)}var Xm=new Fn;function Zm(e){Bn._getMatrix(Xm,Bn.workingColorSpace,e);let t=`mat3( ${Xm.elements.map(e=>e.toFixed(4))} )`;switch(Bn.getTransfer(e)){case gt:return[t,`LinearTransferOETF`];case _t:return[t,`sRGBTransferOETF`];default:return G(`WebGLProgram: Unsupported color space: `,e),[t,`LinearTransferOETF`]}}function Qm(e,t,n){let r=e.getShaderParameter(t,e.COMPILE_STATUS),i=(e.getShaderInfoLog(t)||``).trim();if(r&&i===``)return``;let a=/ERROR: 0:(\d+)/.exec(i);if(a){let r=parseInt(a[1]);return n.toUpperCase()+` - -`+i+` - -`+Ym(e.getShaderSource(t),r)}else return i}function $m(e,t){let n=Zm(t);return[`vec4 ${e}( vec4 value ) {`,` return ${n[1]}( vec4( value.rgb * ${n[0]}, value.a ) );`,`}`].join(` -`)}var eh={1:`Linear`,2:`Reinhard`,3:`Cineon`,4:`ACESFilmic`,6:`AgX`,7:`Neutral`,5:`Custom`};function th(e,t){let n=eh[t];return n===void 0?(G(`WebGLProgram: Unsupported toneMapping:`,t),`vec3 `+e+`( vec3 color ) { return LinearToneMapping( color ); }`):`vec3 `+e+`( vec3 color ) { return `+n+`ToneMapping( color ); }`}var nh=new q;function rh(){return Bn.getLuminanceCoefficients(nh),[`float luminance( const in vec3 rgb ) {`,` const vec3 weights = vec3( ${nh.x.toFixed(4)}, ${nh.y.toFixed(4)}, ${nh.z.toFixed(4)} );`,` return dot( weights, rgb );`,`}`].join(` -`)}function ih(e){return[e.extensionClipCullDistance?`#extension GL_ANGLE_clip_cull_distance : require`:``,e.extensionMultiDraw?`#extension GL_ANGLE_multi_draw : require`:``].filter(sh).join(` -`)}function ah(e){let t=[];for(let n in e){let r=e[n];r!==!1&&t.push(`#define `+n+` `+r)}return t.join(` -`)}function oh(e,t){let n={},r=e.getProgramParameter(t,e.ACTIVE_ATTRIBUTES);for(let i=0;i/gm;function dh(e){return e.replace(uh,ph)}var fh=new Map;function ph(e,t){let n=$f[t];if(n===void 0){let e=fh.get(t);if(e!==void 0)n=$f[e],G(`WebGLRenderer: Shader chunk "%s" has been deprecated. Use "%s" instead.`,t,e);else throw Error(`Can not resolve #include <`+t+`>`)}return dh(n)}var mh=/#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 hh(e){return e.replace(mh,gh)}function gh(e,t,n,r){let i=``;for(let e=parseInt(t);e0&&(g+=` -`),_=[`#define SHADER_TYPE `+n.shaderType,`#define SHADER_NAME `+n.shaderName,m].filter(sh).join(` -`),_.length>0&&(_+=` -`)):(g=[_h(n),`#define SHADER_TYPE `+n.shaderType,`#define SHADER_NAME `+n.shaderName,m,n.extensionClipCullDistance?`#define USE_CLIP_DISTANCE`:``,n.batching?`#define USE_BATCHING`:``,n.batchingColor?`#define USE_BATCHING_COLOR`:``,n.instancing?`#define USE_INSTANCING`:``,n.instancingColor?`#define USE_INSTANCING_COLOR`:``,n.instancingMorph?`#define USE_INSTANCING_MORPH`:``,n.useFog&&n.fog?`#define USE_FOG`:``,n.useFog&&n.fogExp2?`#define FOG_EXP2`:``,n.map?`#define USE_MAP`:``,n.envMap?`#define USE_ENVMAP`:``,n.envMap?`#define `+u:``,n.lightMap?`#define USE_LIGHTMAP`:``,n.aoMap?`#define USE_AOMAP`:``,n.bumpMap?`#define USE_BUMPMAP`:``,n.normalMap?`#define USE_NORMALMAP`:``,n.normalMapObjectSpace?`#define USE_NORMALMAP_OBJECTSPACE`:``,n.normalMapTangentSpace?`#define USE_NORMALMAP_TANGENTSPACE`:``,n.displacementMap?`#define USE_DISPLACEMENTMAP`:``,n.emissiveMap?`#define USE_EMISSIVEMAP`:``,n.anisotropy?`#define USE_ANISOTROPY`:``,n.anisotropyMap?`#define USE_ANISOTROPYMAP`:``,n.clearcoatMap?`#define USE_CLEARCOATMAP`:``,n.clearcoatRoughnessMap?`#define USE_CLEARCOAT_ROUGHNESSMAP`:``,n.clearcoatNormalMap?`#define USE_CLEARCOAT_NORMALMAP`:``,n.iridescenceMap?`#define USE_IRIDESCENCEMAP`:``,n.iridescenceThicknessMap?`#define USE_IRIDESCENCE_THICKNESSMAP`:``,n.specularMap?`#define USE_SPECULARMAP`:``,n.specularColorMap?`#define USE_SPECULAR_COLORMAP`:``,n.specularIntensityMap?`#define USE_SPECULAR_INTENSITYMAP`:``,n.roughnessMap?`#define USE_ROUGHNESSMAP`:``,n.metalnessMap?`#define USE_METALNESSMAP`:``,n.alphaMap?`#define USE_ALPHAMAP`:``,n.alphaHash?`#define USE_ALPHAHASH`:``,n.transmission?`#define USE_TRANSMISSION`:``,n.transmissionMap?`#define USE_TRANSMISSIONMAP`:``,n.thicknessMap?`#define USE_THICKNESSMAP`:``,n.sheenColorMap?`#define USE_SHEEN_COLORMAP`:``,n.sheenRoughnessMap?`#define USE_SHEEN_ROUGHNESSMAP`:``,n.mapUv?`#define MAP_UV `+n.mapUv:``,n.alphaMapUv?`#define ALPHAMAP_UV `+n.alphaMapUv:``,n.lightMapUv?`#define LIGHTMAP_UV `+n.lightMapUv:``,n.aoMapUv?`#define AOMAP_UV `+n.aoMapUv:``,n.emissiveMapUv?`#define EMISSIVEMAP_UV `+n.emissiveMapUv:``,n.bumpMapUv?`#define BUMPMAP_UV `+n.bumpMapUv:``,n.normalMapUv?`#define NORMALMAP_UV `+n.normalMapUv:``,n.displacementMapUv?`#define DISPLACEMENTMAP_UV `+n.displacementMapUv:``,n.metalnessMapUv?`#define METALNESSMAP_UV `+n.metalnessMapUv:``,n.roughnessMapUv?`#define ROUGHNESSMAP_UV `+n.roughnessMapUv:``,n.anisotropyMapUv?`#define ANISOTROPYMAP_UV `+n.anisotropyMapUv:``,n.clearcoatMapUv?`#define CLEARCOATMAP_UV `+n.clearcoatMapUv:``,n.clearcoatNormalMapUv?`#define CLEARCOAT_NORMALMAP_UV `+n.clearcoatNormalMapUv:``,n.clearcoatRoughnessMapUv?`#define CLEARCOAT_ROUGHNESSMAP_UV `+n.clearcoatRoughnessMapUv:``,n.iridescenceMapUv?`#define IRIDESCENCEMAP_UV `+n.iridescenceMapUv:``,n.iridescenceThicknessMapUv?`#define IRIDESCENCE_THICKNESSMAP_UV `+n.iridescenceThicknessMapUv:``,n.sheenColorMapUv?`#define SHEEN_COLORMAP_UV `+n.sheenColorMapUv:``,n.sheenRoughnessMapUv?`#define SHEEN_ROUGHNESSMAP_UV `+n.sheenRoughnessMapUv:``,n.specularMapUv?`#define SPECULARMAP_UV `+n.specularMapUv:``,n.specularColorMapUv?`#define SPECULAR_COLORMAP_UV `+n.specularColorMapUv:``,n.specularIntensityMapUv?`#define SPECULAR_INTENSITYMAP_UV `+n.specularIntensityMapUv:``,n.transmissionMapUv?`#define TRANSMISSIONMAP_UV `+n.transmissionMapUv:``,n.thicknessMapUv?`#define THICKNESSMAP_UV `+n.thicknessMapUv:``,n.vertexTangents&&n.flatShading===!1?`#define USE_TANGENT`:``,n.vertexNormals?`#define HAS_NORMAL`:``,n.vertexColors?`#define USE_COLOR`:``,n.vertexAlphas?`#define USE_COLOR_ALPHA`:``,n.vertexUv1s?`#define USE_UV1`:``,n.vertexUv2s?`#define USE_UV2`:``,n.vertexUv3s?`#define USE_UV3`:``,n.pointsUvs?`#define USE_POINTS_UV`:``,n.flatShading?`#define FLAT_SHADED`:``,n.skinning?`#define USE_SKINNING`:``,n.morphTargets?`#define USE_MORPHTARGETS`:``,n.morphNormals&&n.flatShading===!1?`#define USE_MORPHNORMALS`:``,n.morphColors?`#define USE_MORPHCOLORS`:``,n.morphTargetsCount>0?`#define MORPHTARGETS_TEXTURE_STRIDE `+n.morphTextureStride:``,n.morphTargetsCount>0?`#define MORPHTARGETS_COUNT `+n.morphTargetsCount:``,n.doubleSided?`#define DOUBLE_SIDED`:``,n.flipSided?`#define FLIP_SIDED`:``,n.shadowMapEnabled?`#define USE_SHADOWMAP`:``,n.shadowMapEnabled?`#define `+c:``,n.sizeAttenuation?`#define USE_SIZEATTENUATION`:``,n.numLightProbes>0?`#define USE_LIGHT_PROBES`:``,n.logarithmicDepthBuffer?`#define USE_LOGARITHMIC_DEPTH_BUFFER`:``,n.reversedDepthBuffer?`#define USE_REVERSED_DEPTH_BUFFER`:``,`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`,`#ifdef USE_INSTANCING_MORPH`,` uniform sampler2D morphTexture;`,`#endif`,`attribute vec3 position;`,`attribute vec3 normal;`,`attribute vec2 uv;`,`#ifdef USE_UV1`,` attribute vec2 uv1;`,`#endif`,`#ifdef USE_UV2`,` attribute vec2 uv2;`,`#endif`,`#ifdef USE_UV3`,` attribute vec2 uv3;`,`#endif`,`#ifdef USE_TANGENT`,` attribute vec4 tangent;`,`#endif`,`#if defined( USE_COLOR_ALPHA )`,` attribute vec4 color;`,`#elif defined( USE_COLOR )`,` attribute vec3 color;`,`#endif`,`#ifdef USE_SKINNING`,` attribute vec4 skinIndex;`,` attribute vec4 skinWeight;`,`#endif`,` -`].filter(sh).join(` -`),_=[_h(n),`#define SHADER_TYPE `+n.shaderType,`#define SHADER_NAME `+n.shaderName,m,n.useFog&&n.fog?`#define USE_FOG`:``,n.useFog&&n.fogExp2?`#define FOG_EXP2`:``,n.alphaToCoverage?`#define ALPHA_TO_COVERAGE`:``,n.map?`#define USE_MAP`:``,n.matcap?`#define USE_MATCAP`:``,n.envMap?`#define USE_ENVMAP`:``,n.envMap?`#define `+l:``,n.envMap?`#define `+u:``,n.envMap?`#define `+d:``,f?`#define CUBEUV_TEXEL_WIDTH `+f.texelWidth:``,f?`#define CUBEUV_TEXEL_HEIGHT `+f.texelHeight:``,f?`#define CUBEUV_MAX_MIP `+f.maxMip+`.0`:``,n.lightMap?`#define USE_LIGHTMAP`:``,n.aoMap?`#define USE_AOMAP`:``,n.bumpMap?`#define USE_BUMPMAP`:``,n.normalMap?`#define USE_NORMALMAP`:``,n.normalMapObjectSpace?`#define USE_NORMALMAP_OBJECTSPACE`:``,n.normalMapTangentSpace?`#define USE_NORMALMAP_TANGENTSPACE`:``,n.packedNormalMap?`#define USE_PACKED_NORMALMAP`:``,n.emissiveMap?`#define USE_EMISSIVEMAP`:``,n.anisotropy?`#define USE_ANISOTROPY`:``,n.anisotropyMap?`#define USE_ANISOTROPYMAP`:``,n.clearcoat?`#define USE_CLEARCOAT`:``,n.clearcoatMap?`#define USE_CLEARCOATMAP`:``,n.clearcoatRoughnessMap?`#define USE_CLEARCOAT_ROUGHNESSMAP`:``,n.clearcoatNormalMap?`#define USE_CLEARCOAT_NORMALMAP`:``,n.dispersion?`#define USE_DISPERSION`:``,n.iridescence?`#define USE_IRIDESCENCE`:``,n.iridescenceMap?`#define USE_IRIDESCENCEMAP`:``,n.iridescenceThicknessMap?`#define USE_IRIDESCENCE_THICKNESSMAP`:``,n.specularMap?`#define USE_SPECULARMAP`:``,n.specularColorMap?`#define USE_SPECULAR_COLORMAP`:``,n.specularIntensityMap?`#define USE_SPECULAR_INTENSITYMAP`:``,n.roughnessMap?`#define USE_ROUGHNESSMAP`:``,n.metalnessMap?`#define USE_METALNESSMAP`:``,n.alphaMap?`#define USE_ALPHAMAP`:``,n.alphaTest?`#define USE_ALPHATEST`:``,n.alphaHash?`#define USE_ALPHAHASH`:``,n.sheen?`#define USE_SHEEN`:``,n.sheenColorMap?`#define USE_SHEEN_COLORMAP`:``,n.sheenRoughnessMap?`#define USE_SHEEN_ROUGHNESSMAP`:``,n.transmission?`#define USE_TRANSMISSION`:``,n.transmissionMap?`#define USE_TRANSMISSIONMAP`:``,n.thicknessMap?`#define USE_THICKNESSMAP`:``,n.vertexTangents&&n.flatShading===!1?`#define USE_TANGENT`:``,n.vertexColors||n.instancingColor?`#define USE_COLOR`:``,n.vertexAlphas||n.batchingColor?`#define USE_COLOR_ALPHA`:``,n.vertexUv1s?`#define USE_UV1`:``,n.vertexUv2s?`#define USE_UV2`:``,n.vertexUv3s?`#define USE_UV3`:``,n.pointsUvs?`#define USE_POINTS_UV`:``,n.gradientMap?`#define USE_GRADIENTMAP`:``,n.flatShading?`#define FLAT_SHADED`:``,n.doubleSided?`#define DOUBLE_SIDED`:``,n.flipSided?`#define FLIP_SIDED`:``,n.shadowMapEnabled?`#define USE_SHADOWMAP`:``,n.shadowMapEnabled?`#define `+c:``,n.premultipliedAlpha?`#define PREMULTIPLIED_ALPHA`:``,n.numLightProbes>0?`#define USE_LIGHT_PROBES`:``,n.numLightProbeGrids>0?`#define USE_LIGHT_PROBES_GRID`:``,n.decodeVideoTexture?`#define DECODE_VIDEO_TEXTURE`:``,n.decodeVideoTextureEmissive?`#define DECODE_VIDEO_TEXTURE_EMISSIVE`:``,n.logarithmicDepthBuffer?`#define USE_LOGARITHMIC_DEPTH_BUFFER`:``,n.reversedDepthBuffer?`#define USE_REVERSED_DEPTH_BUFFER`:``,`uniform mat4 viewMatrix;`,`uniform vec3 cameraPosition;`,`uniform bool isOrthographic;`,n.toneMapping===0?``:`#define TONE_MAPPING`,n.toneMapping===0?``:$f.tonemapping_pars_fragment,n.toneMapping===0?``:th(`toneMapping`,n.toneMapping),n.dithering?`#define DITHERING`:``,n.opaque?`#define OPAQUE`:``,$f.colorspace_pars_fragment,$m(`linearToOutputTexel`,n.outputColorSpace),rh(),n.useDepthPacking?`#define DEPTH_PACKING `+n.depthPacking:``,` -`].filter(sh).join(` -`)),o=dh(o),o=ch(o,n),o=lh(o,n),s=dh(s),s=ch(s,n),s=lh(s,n),o=hh(o),s=hh(s),n.isRawShaderMaterial!==!0&&(v=`#version 300 es -`,g=[p,`#define attribute in`,`#define varying out`,`#define texture2D texture`].join(` -`)+` -`+g,_=[`#define varying in`,n.glslVersion===`300 es`?``:`layout(location = 0) out highp vec4 pc_fragColor;`,n.glslVersion===`300 es`?``:`#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(` -`)+` -`+_);let y=v+g+o,b=v+_+s,x=Km(i,i.VERTEX_SHADER,y),S=Km(i,i.FRAGMENT_SHADER,b);i.attachShader(h,x),i.attachShader(h,S),n.index0AttributeName===void 0?n.morphTargets===!0&&i.bindAttribLocation(h,0,`position`):i.bindAttribLocation(h,0,n.index0AttributeName),i.linkProgram(h);function C(t){if(e.debug.checkShaderErrors){let n=i.getProgramInfoLog(h)||``,r=i.getShaderInfoLog(x)||``,a=i.getShaderInfoLog(S)||``,o=n.trim(),s=r.trim(),c=a.trim(),l=!0,u=!0;if(i.getProgramParameter(h,i.LINK_STATUS)===!1)if(l=!1,typeof e.debug.onShaderError==`function`)e.debug.onShaderError(i,h,x,S);else{let e=Qm(i,x,`vertex`),n=Qm(i,S,`fragment`);$t(`THREE.WebGLProgram: Shader Error `+i.getError()+` - VALIDATE_STATUS `+i.getProgramParameter(h,i.VALIDATE_STATUS)+` - -Material Name: `+t.name+` -Material Type: `+t.type+` - -Program Info Log: `+o+` -`+e+` -`+n)}else o===``?(s===``||c===``)&&(u=!1):G(`WebGLProgram: Program Info Log:`,o);u&&(t.diagnostics={runnable:l,programLog:o,vertexShader:{log:s,prefix:g},fragmentShader:{log:c,prefix:_}})}i.deleteShader(x),i.deleteShader(S),w=new Gm(i,h),T=oh(i,h)}let w;this.getUniforms=function(){return w===void 0&&C(this),w};let T;this.getAttributes=function(){return T===void 0&&C(this),T};let E=n.rendererExtensionParallelShaderCompile===!1;return this.isReady=function(){return E===!1&&(E=i.getProgramParameter(h,qm)),E},this.destroy=function(){r.releaseStatesOfProgram(this),i.deleteProgram(h),this.program=void 0},this.type=n.shaderType,this.name=n.shaderName,this.id=Jm++,this.cacheKey=t,this.usedTimes=1,this.program=h,this.vertexShader=x,this.fragmentShader=S,this}var Oh=0,kh=class{constructor(){this.shaderCache=new Map,this.materialCache=new Map}update(e){let t=e.vertexShader,n=e.fragmentShader,r=this._getShaderStage(t),i=this._getShaderStage(n),a=this._getShaderCacheForMaterial(e);return a.has(r)===!1&&(a.add(r),r.usedTimes++),a.has(i)===!1&&(a.add(i),i.usedTimes++),this}remove(e){let t=this.materialCache.get(e);for(let e of t)e.usedTimes--,e.usedTimes===0&&this.shaderCache.delete(e.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,n=t.get(e);return n===void 0&&(n=new Set,t.set(e,n)),n}_getShaderStage(e){let t=this.shaderCache,n=t.get(e);return n===void 0&&(n=new Ah(e),t.set(e,n)),n}},Ah=class{constructor(e){this.id=Oh++,this.code=e,this.usedTimes=0}};function jh(e){return e===1030||e===37490||e===36285}function Mh(e,t,n,r,i,a){let o=new mr,s=new kh,c=new Set,l=[],u=new Map,d=r.logarithmicDepthBuffer,f=r.precision,p={MeshDepthMaterial:`depth`,MeshDistanceMaterial:`distance`,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`};function m(e){return c.add(e),e===0?`uv`:`uv${e}`}function h(i,o,l,u,h,g){let _=u.fog,v=h.geometry,y=i.isMeshStandardMaterial||i.isMeshLambertMaterial||i.isMeshPhongMaterial?u.environment:null,b=i.isMeshStandardMaterial||i.isMeshLambertMaterial&&!i.envMap||i.isMeshPhongMaterial&&!i.envMap,x=t.get(i.envMap||y,b),S=x&&x.mapping===306?x.image.height:null,C=p[i.type];i.precision!==null&&(f=r.getMaxPrecision(i.precision),f!==i.precision&&G(`WebGLProgram.getParameters:`,i.precision,`not supported, using`,f,`instead.`));let w=v.morphAttributes.position||v.morphAttributes.normal||v.morphAttributes.color,T=w===void 0?0:w.length,E=0;v.morphAttributes.position!==void 0&&(E=1),v.morphAttributes.normal!==void 0&&(E=2),v.morphAttributes.color!==void 0&&(E=3);let D,O,k,A;if(C){let e=ep[C];D=e.vertexShader,O=e.fragmentShader}else D=i.vertexShader,O=i.fragmentShader,s.update(i),k=s.getVertexShaderID(i),A=s.getFragmentShaderID(i);let j=e.getRenderTarget(),M=e.state.buffers.depth.getReversed(),N=h.isInstancedMesh===!0,P=h.isBatchedMesh===!0,F=!!i.map,I=!!i.matcap,L=!!x,ee=!!i.aoMap,R=!!i.lightMap,te=!!i.bumpMap,z=!!i.normalMap,B=!!i.displacementMap,V=!!i.emissiveMap,ne=!!i.metalnessMap,re=!!i.roughnessMap,ie=i.anisotropy>0,ae=i.clearcoat>0,oe=i.dispersion>0,se=i.iridescence>0,ce=i.sheen>0,H=i.transmission>0,le=ie&&!!i.anisotropyMap,ue=ae&&!!i.clearcoatMap,de=ae&&!!i.clearcoatNormalMap,fe=ae&&!!i.clearcoatRoughnessMap,pe=se&&!!i.iridescenceMap,me=se&&!!i.iridescenceThicknessMap,he=ce&&!!i.sheenColorMap,ge=ce&&!!i.sheenRoughnessMap,_e=!!i.specularMap,ve=!!i.specularColorMap,ye=!!i.specularIntensityMap,be=H&&!!i.transmissionMap,xe=H&&!!i.thicknessMap,Se=!!i.gradientMap,U=!!i.alphaMap,Ce=i.alphaTest>0,we=!!i.alphaHash,Te=!!i.extensions,W=0;i.toneMapped&&(j===null||j.isXRRenderTarget===!0)&&(W=e.toneMapping);let Ee={shaderID:C,shaderType:i.type,shaderName:i.name,vertexShader:D,fragmentShader:O,defines:i.defines,customVertexShaderID:k,customFragmentShaderID:A,isRawShaderMaterial:i.isRawShaderMaterial===!0,glslVersion:i.glslVersion,precision:f,batching:P,batchingColor:P&&h._colorsTexture!==null,instancing:N,instancingColor:N&&h.instanceColor!==null,instancingMorph:N&&h.morphTexture!==null,outputColorSpace:j===null?e.outputColorSpace:j.isXRRenderTarget===!0?j.texture.colorSpace:Bn.workingColorSpace,alphaToCoverage:!!i.alphaToCoverage,map:F,matcap:I,envMap:L,envMapMode:L&&x.mapping,envMapCubeUVHeight:S,aoMap:ee,lightMap:R,bumpMap:te,normalMap:z,displacementMap:B,emissiveMap:V,normalMapObjectSpace:z&&i.normalMapType===1,normalMapTangentSpace:z&&i.normalMapType===0,packedNormalMap:z&&i.normalMapType===0&&jh(i.normalMap.format),metalnessMap:ne,roughnessMap:re,anisotropy:ie,anisotropyMap:le,clearcoat:ae,clearcoatMap:ue,clearcoatNormalMap:de,clearcoatRoughnessMap:fe,dispersion:oe,iridescence:se,iridescenceMap:pe,iridescenceThicknessMap:me,sheen:ce,sheenColorMap:he,sheenRoughnessMap:ge,specularMap:_e,specularColorMap:ve,specularIntensityMap:ye,transmission:H,transmissionMap:be,thicknessMap:xe,gradientMap:Se,opaque:i.transparent===!1&&i.blending===1&&i.alphaToCoverage===!1,alphaMap:U,alphaTest:Ce,alphaHash:we,combine:i.combine,mapUv:F&&m(i.map.channel),aoMapUv:ee&&m(i.aoMap.channel),lightMapUv:R&&m(i.lightMap.channel),bumpMapUv:te&&m(i.bumpMap.channel),normalMapUv:z&&m(i.normalMap.channel),displacementMapUv:B&&m(i.displacementMap.channel),emissiveMapUv:V&&m(i.emissiveMap.channel),metalnessMapUv:ne&&m(i.metalnessMap.channel),roughnessMapUv:re&&m(i.roughnessMap.channel),anisotropyMapUv:le&&m(i.anisotropyMap.channel),clearcoatMapUv:ue&&m(i.clearcoatMap.channel),clearcoatNormalMapUv:de&&m(i.clearcoatNormalMap.channel),clearcoatRoughnessMapUv:fe&&m(i.clearcoatRoughnessMap.channel),iridescenceMapUv:pe&&m(i.iridescenceMap.channel),iridescenceThicknessMapUv:me&&m(i.iridescenceThicknessMap.channel),sheenColorMapUv:he&&m(i.sheenColorMap.channel),sheenRoughnessMapUv:ge&&m(i.sheenRoughnessMap.channel),specularMapUv:_e&&m(i.specularMap.channel),specularColorMapUv:ve&&m(i.specularColorMap.channel),specularIntensityMapUv:ye&&m(i.specularIntensityMap.channel),transmissionMapUv:be&&m(i.transmissionMap.channel),thicknessMapUv:xe&&m(i.thicknessMap.channel),alphaMapUv:U&&m(i.alphaMap.channel),vertexTangents:!!v.attributes.tangent&&(z||ie),vertexNormals:!!v.attributes.normal,vertexColors:i.vertexColors,vertexAlphas:i.vertexColors===!0&&!!v.attributes.color&&v.attributes.color.itemSize===4,pointsUvs:h.isPoints===!0&&!!v.attributes.uv&&(F||U),fog:!!_,useFog:i.fog===!0,fogExp2:!!_&&_.isFogExp2,flatShading:i.wireframe===!1&&(i.flatShading===!0||v.attributes.normal===void 0&&z===!1&&(i.isMeshLambertMaterial||i.isMeshPhongMaterial||i.isMeshStandardMaterial||i.isMeshPhysicalMaterial)),sizeAttenuation:i.sizeAttenuation===!0,logarithmicDepthBuffer:d,reversedDepthBuffer:M,skinning:h.isSkinnedMesh===!0,morphTargets:v.morphAttributes.position!==void 0,morphNormals:v.morphAttributes.normal!==void 0,morphColors:v.morphAttributes.color!==void 0,morphTargetsCount:T,morphTextureStride:E,numDirLights:o.directional.length,numPointLights:o.point.length,numSpotLights:o.spot.length,numSpotLightMaps:o.spotLightMap.length,numRectAreaLights:o.rectArea.length,numHemiLights:o.hemi.length,numDirLightShadows:o.directionalShadowMap.length,numPointLightShadows:o.pointShadowMap.length,numSpotLightShadows:o.spotShadowMap.length,numSpotLightShadowsWithMaps:o.numSpotLightShadowsWithMaps,numLightProbes:o.numLightProbes,numLightProbeGrids:g.length,numClippingPlanes:a.numPlanes,numClipIntersection:a.numIntersection,dithering:i.dithering,shadowMapEnabled:e.shadowMap.enabled&&l.length>0,shadowMapType:e.shadowMap.type,toneMapping:W,decodeVideoTexture:F&&i.map.isVideoTexture===!0&&Bn.getTransfer(i.map.colorSpace)===`srgb`,decodeVideoTextureEmissive:V&&i.emissiveMap.isVideoTexture===!0&&Bn.getTransfer(i.emissiveMap.colorSpace)===`srgb`,premultipliedAlpha:i.premultipliedAlpha,doubleSided:i.side===2,flipSided:i.side===1,useDepthPacking:i.depthPacking>=0,depthPacking:i.depthPacking||0,index0AttributeName:i.index0AttributeName,extensionClipCullDistance:Te&&i.extensions.clipCullDistance===!0&&n.has(`WEBGL_clip_cull_distance`),extensionMultiDraw:(Te&&i.extensions.multiDraw===!0||P)&&n.has(`WEBGL_multi_draw`),rendererExtensionParallelShaderCompile:n.has(`KHR_parallel_shader_compile`),customProgramCacheKey:i.customProgramCacheKey()};return Ee.vertexUv1s=c.has(1),Ee.vertexUv2s=c.has(2),Ee.vertexUv3s=c.has(3),c.clear(),Ee}function g(t){let n=[];if(t.shaderID?n.push(t.shaderID):(n.push(t.customVertexShaderID),n.push(t.customFragmentShaderID)),t.defines!==void 0)for(let e in t.defines)n.push(e),n.push(t.defines[e]);return t.isRawShaderMaterial===!1&&(_(n,t),v(n,t),n.push(e.outputColorSpace)),n.push(t.customProgramCacheKey),n.join()}function _(e,t){e.push(t.precision),e.push(t.outputColorSpace),e.push(t.envMapMode),e.push(t.envMapCubeUVHeight),e.push(t.mapUv),e.push(t.alphaMapUv),e.push(t.lightMapUv),e.push(t.aoMapUv),e.push(t.bumpMapUv),e.push(t.normalMapUv),e.push(t.displacementMapUv),e.push(t.emissiveMapUv),e.push(t.metalnessMapUv),e.push(t.roughnessMapUv),e.push(t.anisotropyMapUv),e.push(t.clearcoatMapUv),e.push(t.clearcoatNormalMapUv),e.push(t.clearcoatRoughnessMapUv),e.push(t.iridescenceMapUv),e.push(t.iridescenceThicknessMapUv),e.push(t.sheenColorMapUv),e.push(t.sheenRoughnessMapUv),e.push(t.specularMapUv),e.push(t.specularColorMapUv),e.push(t.specularIntensityMapUv),e.push(t.transmissionMapUv),e.push(t.thicknessMapUv),e.push(t.combine),e.push(t.fogExp2),e.push(t.sizeAttenuation),e.push(t.morphTargetsCount),e.push(t.morphAttributeCount),e.push(t.numDirLights),e.push(t.numPointLights),e.push(t.numSpotLights),e.push(t.numSpotLightMaps),e.push(t.numHemiLights),e.push(t.numRectAreaLights),e.push(t.numDirLightShadows),e.push(t.numPointLightShadows),e.push(t.numSpotLightShadows),e.push(t.numSpotLightShadowsWithMaps),e.push(t.numLightProbes),e.push(t.shadowMapType),e.push(t.toneMapping),e.push(t.numClippingPlanes),e.push(t.numClipIntersection),e.push(t.depthPacking)}function v(e,t){o.disableAll(),t.instancing&&o.enable(0),t.instancingColor&&o.enable(1),t.instancingMorph&&o.enable(2),t.matcap&&o.enable(3),t.envMap&&o.enable(4),t.normalMapObjectSpace&&o.enable(5),t.normalMapTangentSpace&&o.enable(6),t.clearcoat&&o.enable(7),t.iridescence&&o.enable(8),t.alphaTest&&o.enable(9),t.vertexColors&&o.enable(10),t.vertexAlphas&&o.enable(11),t.vertexUv1s&&o.enable(12),t.vertexUv2s&&o.enable(13),t.vertexUv3s&&o.enable(14),t.vertexTangents&&o.enable(15),t.anisotropy&&o.enable(16),t.alphaHash&&o.enable(17),t.batching&&o.enable(18),t.dispersion&&o.enable(19),t.batchingColor&&o.enable(20),t.gradientMap&&o.enable(21),t.packedNormalMap&&o.enable(22),t.vertexNormals&&o.enable(23),e.push(o.mask),o.disableAll(),t.fog&&o.enable(0),t.useFog&&o.enable(1),t.flatShading&&o.enable(2),t.logarithmicDepthBuffer&&o.enable(3),t.reversedDepthBuffer&&o.enable(4),t.skinning&&o.enable(5),t.morphTargets&&o.enable(6),t.morphNormals&&o.enable(7),t.morphColors&&o.enable(8),t.premultipliedAlpha&&o.enable(9),t.shadowMapEnabled&&o.enable(10),t.doubleSided&&o.enable(11),t.flipSided&&o.enable(12),t.useDepthPacking&&o.enable(13),t.dithering&&o.enable(14),t.transmission&&o.enable(15),t.sheen&&o.enable(16),t.opaque&&o.enable(17),t.pointsUvs&&o.enable(18),t.decodeVideoTexture&&o.enable(19),t.decodeVideoTextureEmissive&&o.enable(20),t.alphaToCoverage&&o.enable(21),t.numLightProbeGrids>0&&o.enable(22),e.push(o.mask)}function y(e){let t=p[e.type],n;if(t){let e=ep[t];n=gl.clone(e.uniforms)}else n=e.uniforms;return n}function b(t,n){let r=u.get(n);return r===void 0?(r=new Dh(e,n,t,i),l.push(r),u.set(n,r)):++r.usedTimes,r}function x(e){if(--e.usedTimes===0){let t=l.indexOf(e);l[t]=l[l.length-1],l.pop(),u.delete(e.cacheKey),e.destroy()}}function S(e){s.remove(e)}function C(){s.dispose()}return{getParameters:h,getProgramCacheKey:g,getUniforms:y,acquireProgram:b,releaseProgram:x,releaseShaderCache:S,programs:l,dispose:C}}function Nh(){let e=new WeakMap;function t(t){return e.has(t)}function n(t){let n=e.get(t);return n===void 0&&(n={},e.set(t,n)),n}function r(t){e.delete(t)}function i(t,n,r){e.get(t)[n]=r}function a(){e=new WeakMap}return{has:t,get:n,remove:r,update:i,dispose:a}}function Ph(e,t){return e.groupOrder===t.groupOrder?e.renderOrder===t.renderOrder?e.material.id===t.material.id?e.materialVariant===t.materialVariant?e.z===t.z?e.id-t.id:e.z-t.z:e.materialVariant-t.materialVariant:e.material.id-t.material.id:e.renderOrder-t.renderOrder:e.groupOrder-t.groupOrder}function Fh(e,t){return e.groupOrder===t.groupOrder?e.renderOrder===t.renderOrder?e.z===t.z?e.id-t.id:t.z-e.z:e.renderOrder-t.renderOrder:e.groupOrder-t.groupOrder}function Ih(){let e=[],t=0,n=[],r=[],i=[];function a(){t=0,n.length=0,r.length=0,i.length=0}function o(e){let t=0;return e.isInstancedMesh&&(t+=2),e.isSkinnedMesh&&(t+=1),t}function s(n,r,i,a,s,c){let l=e[t];return l===void 0?(l={id:n.id,object:n,geometry:r,material:i,materialVariant:o(n),groupOrder:a,renderOrder:n.renderOrder,z:s,group:c},e[t]=l):(l.id=n.id,l.object=n,l.geometry=r,l.material=i,l.materialVariant=o(n),l.groupOrder=a,l.renderOrder=n.renderOrder,l.z=s,l.group=c),t++,l}function c(e,t,a,o,c,l){let u=s(e,t,a,o,c,l);a.transmission>0?r.push(u):a.transparent===!0?i.push(u):n.push(u)}function l(e,t,a,o,c,l){let u=s(e,t,a,o,c,l);a.transmission>0?r.unshift(u):a.transparent===!0?i.unshift(u):n.unshift(u)}function u(e,t){n.length>1&&n.sort(e||Ph),r.length>1&&r.sort(t||Fh),i.length>1&&i.sort(t||Fh)}function d(){for(let n=t,r=e.length;n=r.length?(i=new Ih,r.push(i)):i=r[n],i}function n(){e=new WeakMap}return{get:t,dispose:n}}function Rh(){let e={};return{get:function(t){if(e[t.id]!==void 0)return e[t.id];let n;switch(t.type){case`DirectionalLight`:n={direction:new q,color:new Y};break;case`SpotLight`:n={position:new q,direction:new q,color:new Y,distance:0,coneCos:0,penumbraCos:0,decay:0};break;case`PointLight`:n={position:new q,color:new Y,distance:0,decay:0};break;case`HemisphereLight`:n={direction:new q,skyColor:new Y,groundColor:new Y};break;case`RectAreaLight`:n={color:new Y,position:new q,halfWidth:new q,halfHeight:new q};break}return e[t.id]=n,n}}}function zh(){let e={};return{get:function(t){if(e[t.id]!==void 0)return e[t.id];let n;switch(t.type){case`DirectionalLight`:n={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new K};break;case`SpotLight`:n={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new K};break;case`PointLight`:n={shadowIntensity:1,shadowBias:0,shadowNormalBias:0,shadowRadius:1,shadowMapSize:new K,shadowCameraNear:1,shadowCameraFar:1e3};break}return e[t.id]=n,n}}}var Bh=0;function Vh(e,t){return(t.castShadow?2:0)-(e.castShadow?2:0)+ +!!t.map-!!e.map}function Hh(e){let t=new Rh,n=zh(),r={version:0,hash:{directionalLength:-1,pointLength:-1,spotLength:-1,rectAreaLength:-1,hemiLength:-1,numDirectionalShadows:-1,numPointShadows:-1,numSpotShadows:-1,numSpotMaps:-1,numLightProbes:-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,numLightProbes:0};for(let e=0;e<9;e++)r.probe.push(new q);let i=new q,a=new J,o=new J;function s(i){let a=0,o=0,s=0;for(let e=0;e<9;e++)r.probe[e].set(0,0,0);let c=0,l=0,u=0,d=0,f=0,p=0,m=0,h=0,g=0,_=0,v=0;i.sort(Vh);for(let e=0,y=i.length;e0&&(e.has(`OES_texture_float_linear`)===!0?(r.rectAreaLTC1=X.LTC_FLOAT_1,r.rectAreaLTC2=X.LTC_FLOAT_2):(r.rectAreaLTC1=X.LTC_HALF_1,r.rectAreaLTC2=X.LTC_HALF_2)),r.ambient[0]=a,r.ambient[1]=o,r.ambient[2]=s;let y=r.hash;(y.directionalLength!==c||y.pointLength!==l||y.spotLength!==u||y.rectAreaLength!==d||y.hemiLength!==f||y.numDirectionalShadows!==p||y.numPointShadows!==m||y.numSpotShadows!==h||y.numSpotMaps!==g||y.numLightProbes!==v)&&(r.directional.length=c,r.spot.length=u,r.rectArea.length=d,r.point.length=l,r.hemi.length=f,r.directionalShadow.length=p,r.directionalShadowMap.length=p,r.pointShadow.length=m,r.pointShadowMap.length=m,r.spotShadow.length=h,r.spotShadowMap.length=h,r.directionalShadowMatrix.length=p,r.pointShadowMatrix.length=m,r.spotLightMatrix.length=h+g-_,r.spotLightMap.length=g,r.numSpotLightShadowsWithMaps=_,r.numLightProbes=v,y.directionalLength=c,y.pointLength=l,y.spotLength=u,y.rectAreaLength=d,y.hemiLength=f,y.numDirectionalShadows=p,y.numPointShadows=m,y.numSpotShadows=h,y.numSpotMaps=g,y.numLightProbes=v,r.version=Bh++)}function c(e,t){let n=0,s=0,c=0,l=0,u=0,d=t.matrixWorldInverse;for(let t=0,f=e.length;t=i.length?(a=new Uh(e),i.push(a)):a=i[r],a}function r(){t=new WeakMap}return{get:n,dispose:r}}var Gh=`void main() { - gl_Position = vec4( position, 1.0 ); -}`,Kh=`uniform sampler2D shadow_pass; -uniform vec2 resolution; -uniform float radius; -void main() { - const float samples = float( VSM_SAMPLES ); - float mean = 0.0; - float squared_mean = 0.0; - float uvStride = samples <= 1.0 ? 0.0 : 2.0 / ( samples - 1.0 ); - float uvStart = samples <= 1.0 ? 0.0 : - 1.0; - for ( float i = 0.0; i < samples; i ++ ) { - float uvOffset = uvStart + i * uvStride; - #ifdef HORIZONTAL_PASS - vec2 distribution = texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( uvOffset, 0.0 ) * radius ) / resolution ).rg; - mean += distribution.x; - squared_mean += distribution.y * distribution.y + distribution.x * distribution.x; - #else - float depth = texture2D( shadow_pass, ( gl_FragCoord.xy + vec2( 0.0, uvOffset ) * radius ) / resolution ).r; - mean += depth; - squared_mean += depth * depth; - #endif - } - mean = mean / samples; - squared_mean = squared_mean / samples; - float std_dev = sqrt( max( 0.0, squared_mean - mean * mean ) ); - gl_FragColor = vec4( mean, std_dev, 0.0, 1.0 ); -}`,qh=[new q(1,0,0),new q(-1,0,0),new q(0,1,0),new q(0,-1,0),new q(0,0,1),new q(0,0,-1)],Jh=[new q(0,-1,0),new q(0,-1,0),new q(0,0,1),new q(0,0,-1),new q(0,-1,0),new q(0,-1,0)],Yh=new J,Xh=new q,Zh=new q;function Qh(e,t,n){let r=new vo,i=new K,a=new K,o=new Zn,s=new Dl,c=new Ol,l={},u=n.maxTextureSize,d={0:1,1:0,2:2},f=new yl({defines:{VSM_SAMPLES:8},uniforms:{shadow_pass:{value:null},resolution:{value:new K},radius:{value:4}},vertexShader:Gh,fragmentShader:Kh}),p=f.clone();p.defines.HORIZONTAL_PASS=1;let m=new Ki;m.setAttribute(`position`,new Ti(new Float32Array([-1,-1,.5,3,-1,.5,-1,3,.5]),3));let h=new La(m,f),g=this;this.enabled=!1,this.autoUpdate=!0,this.needsUpdate=!1,this.type=1;let _=this.type;this.render=function(t,n,s){if(g.enabled===!1||g.autoUpdate===!1&&g.needsUpdate===!1||t.length===0)return;this.type===2&&(G(`WebGLShadowMap: PCFSoftShadowMap has been deprecated. Using PCFShadowMap instead.`),this.type=1);let c=e.getRenderTarget(),l=e.getActiveCubeFace(),d=e.getActiveMipmapLevel(),f=e.state;f.setBlending(0),f.buffers.depth.getReversed()===!0?f.buffers.color.setClear(0,0,0,0):f.buffers.color.setClear(1,1,1,1),f.buffers.depth.setTest(!0),f.setScissorTest(!1);let p=_!==this.type;p&&n.traverse(function(e){e.material&&(Array.isArray(e.material)?e.material.forEach(e=>e.needsUpdate=!0):e.material.needsUpdate=!0)});for(let c=0,l=t.length;cu||i.y>u)&&(i.x>u&&(a.x=Math.floor(u/m.x),i.x=a.x*m.x,d.mapSize.x=a.x),i.y>u&&(a.y=Math.floor(u/m.y),i.y=a.y*m.y,d.mapSize.y=a.y));let h=e.state.buffers.depth.getReversed();if(d.camera._reversedDepth=h,d.map===null||p===!0){if(d.map!==null&&(d.map.depthTexture!==null&&(d.map.depthTexture.dispose(),d.map.depthTexture=null),d.map.dispose()),this.type===3){if(l.isPointLight){G(`WebGLShadowMap: VSM shadow maps are not supported for PointLights. Use PCF or BasicShadowMap instead.`);continue}d.map=new $n(i.x,i.y,{format:me,type:ne,minFilter:M,magFilter:M,generateMipmaps:!1}),d.map.texture.name=l.name+`.shadowMap`,d.map.depthTexture=new _s(i.x,i.y,V),d.map.depthTexture.name=l.name+`.shadowMapDepth`,d.map.depthTexture.format=ue,d.map.depthTexture.compareFunction=null,d.map.depthTexture.minFilter=D,d.map.depthTexture.magFilter=D}else l.isPointLight?(d.map=new kp(i.x),d.map.depthTexture=new vs(i.x,B)):(d.map=new $n(i.x,i.y),d.map.depthTexture=new _s(i.x,i.y,B)),d.map.depthTexture.name=l.name+`.shadowMap`,d.map.depthTexture.format=ue,this.type===1?(d.map.depthTexture.compareFunction=h?518:515,d.map.depthTexture.minFilter=M,d.map.depthTexture.magFilter=M):(d.map.depthTexture.compareFunction=null,d.map.depthTexture.minFilter=D,d.map.depthTexture.magFilter=D);d.camera.updateProjectionMatrix()}let g=d.map.isWebGLCubeRenderTarget?6:1;for(let t=0;t0||n.map&&n.alphaTest>0||n.alphaToCoverage===!0){let e=a.uuid,t=n.uuid,r=l[e];r===void 0&&(r={},l[e]=r);let i=r[t];i===void 0&&(i=a.clone(),r[t]=i,n.addEventListener(`dispose`,x)),a=i}if(a.visible=n.visible,a.wireframe=n.wireframe,i===3?a.side=n.shadowSide===null?n.side:n.shadowSide:a.side=n.shadowSide===null?d[n.side]:n.shadowSide,a.alphaMap=n.alphaMap,a.alphaTest=n.alphaToCoverage===!0?.5:n.alphaTest,a.map=n.map,a.clipShadows=n.clipShadows,a.clippingPlanes=n.clippingPlanes,a.clipIntersection=n.clipIntersection,a.displacementMap=n.displacementMap,a.displacementScale=n.displacementScale,a.displacementBias=n.displacementBias,a.wireframeLinewidth=n.wireframeLinewidth,a.linewidth=n.linewidth,r.isPointLight===!0&&a.isMeshDistanceMaterial===!0){let t=e.properties.get(a);t.light=r}return a}function b(n,i,a,o,s){if(n.visible===!1)return;if(n.layers.test(i.layers)&&(n.isMesh||n.isLine||n.isPoints)&&(n.castShadow||n.receiveShadow&&s===3)&&(!n.frustumCulled||r.intersectsObject(n))){n.modelViewMatrix.multiplyMatrices(a.matrixWorldInverse,n.matrixWorld);let r=t.update(n),c=n.material;if(Array.isArray(c)){let t=r.groups;for(let l=0,u=t.length;l=2):(P=parseFloat(/^WebGL (\d)/.exec(F)[1]),N=P>=1);let I=null,L={},ee=e.getParameter(e.SCISSOR_BOX),R=e.getParameter(e.VIEWPORT),te=new Zn().fromArray(ee),z=new Zn().fromArray(R);function B(t,n,r,i){let a=new Uint8Array(4),o=e.createTexture();e.bindTexture(t,o),e.texParameteri(t,e.TEXTURE_MIN_FILTER,e.NEAREST),e.texParameteri(t,e.TEXTURE_MAG_FILTER,e.NEAREST);for(let o=0;o`u`?!1:/OculusBrowser/g.test(navigator.userAgent),l=new K,u=new WeakMap,d=new Set,f,p=new WeakMap,m=!1;try{m=typeof OffscreenCanvas<`u`&&new OffscreenCanvas(1,1).getContext(`2d`)!==null}catch{}function h(e,t){return m?new OffscreenCanvas(e,t):Gt(`canvas`)}function g(e,t,n){let r=1,i=Ee(e);if((i.width>n||i.height>n)&&(r=n/Math.max(i.width,i.height)),r<1)if(typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement||typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement||typeof ImageBitmap<`u`&&e instanceof ImageBitmap||typeof VideoFrame<`u`&&e instanceof VideoFrame){let n=Math.floor(r*i.width),a=Math.floor(r*i.height);f===void 0&&(f=h(n,a));let o=t?h(n,a):f;return o.width=n,o.height=a,o.getContext(`2d`).drawImage(e,0,0,n,a),G(`WebGLRenderer: Texture has been resized from (`+i.width+`x`+i.height+`) to (`+n+`x`+a+`).`),o}else return`data`in e&&G(`WebGLRenderer: Image in DataTexture is too big (`+i.width+`x`+i.height+`).`),e;return e}function _(e){return e.generateMipmaps}function v(t){e.generateMipmap(t)}function y(t){return t.isWebGLCubeRenderTarget?e.TEXTURE_CUBE_MAP:t.isWebGL3DRenderTarget?e.TEXTURE_3D:t.isWebGLArrayRenderTarget||t.isCompressedArrayTexture?e.TEXTURE_2D_ARRAY:e.TEXTURE_2D}function b(n,r,i,a,o,s=!1){if(n!==null){if(e[n]!==void 0)return e[n];G(`WebGLRenderer: Attempt to use non-existing WebGL internal format '`+n+`'`)}let c;a&&(c=t.get(`EXT_texture_norm16`),c||G(`WebGLRenderer: Unable to use normalized textures without EXT_texture_norm16 extension`));let l=r;if(r===e.RED&&(i===e.FLOAT&&(l=e.R32F),i===e.HALF_FLOAT&&(l=e.R16F),i===e.UNSIGNED_BYTE&&(l=e.R8),i===e.UNSIGNED_SHORT&&c&&(l=c.R16_EXT),i===e.SHORT&&c&&(l=c.R16_SNORM_EXT)),r===e.RED_INTEGER&&(i===e.UNSIGNED_BYTE&&(l=e.R8UI),i===e.UNSIGNED_SHORT&&(l=e.R16UI),i===e.UNSIGNED_INT&&(l=e.R32UI),i===e.BYTE&&(l=e.R8I),i===e.SHORT&&(l=e.R16I),i===e.INT&&(l=e.R32I)),r===e.RG&&(i===e.FLOAT&&(l=e.RG32F),i===e.HALF_FLOAT&&(l=e.RG16F),i===e.UNSIGNED_BYTE&&(l=e.RG8),i===e.UNSIGNED_SHORT&&c&&(l=c.RG16_EXT),i===e.SHORT&&c&&(l=c.RG16_SNORM_EXT)),r===e.RG_INTEGER&&(i===e.UNSIGNED_BYTE&&(l=e.RG8UI),i===e.UNSIGNED_SHORT&&(l=e.RG16UI),i===e.UNSIGNED_INT&&(l=e.RG32UI),i===e.BYTE&&(l=e.RG8I),i===e.SHORT&&(l=e.RG16I),i===e.INT&&(l=e.RG32I)),r===e.RGB_INTEGER&&(i===e.UNSIGNED_BYTE&&(l=e.RGB8UI),i===e.UNSIGNED_SHORT&&(l=e.RGB16UI),i===e.UNSIGNED_INT&&(l=e.RGB32UI),i===e.BYTE&&(l=e.RGB8I),i===e.SHORT&&(l=e.RGB16I),i===e.INT&&(l=e.RGB32I)),r===e.RGBA_INTEGER&&(i===e.UNSIGNED_BYTE&&(l=e.RGBA8UI),i===e.UNSIGNED_SHORT&&(l=e.RGBA16UI),i===e.UNSIGNED_INT&&(l=e.RGBA32UI),i===e.BYTE&&(l=e.RGBA8I),i===e.SHORT&&(l=e.RGBA16I),i===e.INT&&(l=e.RGBA32I)),r===e.RGB&&(i===e.UNSIGNED_SHORT&&c&&(l=c.RGB16_EXT),i===e.SHORT&&c&&(l=c.RGB16_SNORM_EXT),i===e.UNSIGNED_INT_5_9_9_9_REV&&(l=e.RGB9_E5),i===e.UNSIGNED_INT_10F_11F_11F_REV&&(l=e.R11F_G11F_B10F)),r===e.RGBA){let t=s?gt:Bn.getTransfer(o);i===e.FLOAT&&(l=e.RGBA32F),i===e.HALF_FLOAT&&(l=e.RGBA16F),i===e.UNSIGNED_BYTE&&(l=t===`srgb`?e.SRGB8_ALPHA8:e.RGBA8),i===e.UNSIGNED_SHORT&&c&&(l=c.RGBA16_EXT),i===e.SHORT&&c&&(l=c.RGBA16_SNORM_EXT),i===e.UNSIGNED_SHORT_4_4_4_4&&(l=e.RGBA4),i===e.UNSIGNED_SHORT_5_5_5_1&&(l=e.RGB5_A1)}return(l===e.R16F||l===e.R32F||l===e.RG16F||l===e.RG32F||l===e.RGBA16F||l===e.RGBA32F)&&t.get(`EXT_color_buffer_float`),l}function x(t,n){let r;return t?n===null||n===1014||n===1020?r=e.DEPTH24_STENCIL8:n===1015?r=e.DEPTH32F_STENCIL8:n===1012&&(r=e.DEPTH24_STENCIL8,G(`DepthTexture: 16 bit depth attachment is not supported with stencil. Using 24-bit attachment.`)):n===null||n===1014||n===1020?r=e.DEPTH_COMPONENT24:n===1015?r=e.DEPTH_COMPONENT32F:n===1012&&(r=e.DEPTH_COMPONENT16),r}function S(e,t){return _(e)===!0||e.isFramebufferTexture&&e.minFilter!==1003&&e.minFilter!==1006?Math.log2(Math.max(t.width,t.height))+1:e.mipmaps!==void 0&&e.mipmaps.length>0?e.mipmaps.length:e.isCompressedTexture&&Array.isArray(e.image)?t.mipmaps.length:1}function C(e){let t=e.target;t.removeEventListener(`dispose`,C),j(t),t.isVideoTexture&&u.delete(t),t.isHTMLTexture&&d.delete(t)}function k(e){let t=e.target;t.removeEventListener(`dispose`,k),I(t)}function j(e){let t=r.get(e);if(t.__webglInit===void 0)return;let n=e.source,i=p.get(n);if(i){let r=i[t.__cacheKey];r.usedTimes--,r.usedTimes===0&&P(e),Object.keys(i).length===0&&p.delete(n)}r.remove(e)}function P(t){let n=r.get(t);e.deleteTexture(n.__webglTexture);let i=t.source,a=p.get(i);delete a[n.__cacheKey],o.memory.textures--}function I(t){let n=r.get(t);if(t.depthTexture&&(t.depthTexture.dispose(),r.remove(t.depthTexture)),t.isWebGLCubeRenderTarget)for(let t=0;t<6;t++){if(Array.isArray(n.__webglFramebuffer[t]))for(let r=0;r=i.maxTextures&&G(`WebGLTextures: Trying to use `+e+` texture units while this GPU supports only `+i.maxTextures),L+=1,e}function B(e){let t=[];return t.push(e.wrapS),t.push(e.wrapT),t.push(e.wrapR||0),t.push(e.magFilter),t.push(e.minFilter),t.push(e.anisotropy),t.push(e.internalFormat),t.push(e.format),t.push(e.type),t.push(e.generateMipmaps),t.push(e.premultiplyAlpha),t.push(e.flipY),t.push(e.unpackAlignment),t.push(e.colorSpace),t.join()}function V(t,i){let a=r.get(t);if(t.isVideoTexture&&Te(t),t.isRenderTargetTexture===!1&&t.isExternalTexture!==!0&&t.version>0&&a.__version!==t.version){let e=t.image;if(e===null)G(`WebGLRenderer: Texture marked for update but no image data found.`);else if(e.complete===!1)G(`WebGLRenderer: Texture marked for update but image is incomplete`);else{fe(a,t,i);return}}else t.isExternalTexture&&(a.__webglTexture=t.sourceTexture?t.sourceTexture:null);n.bindTexture(e.TEXTURE_2D,a.__webglTexture,e.TEXTURE0+i)}function ne(t,i){let a=r.get(t);if(t.isRenderTargetTexture===!1&&t.version>0&&a.__version!==t.version){fe(a,t,i);return}else t.isExternalTexture&&(a.__webglTexture=t.sourceTexture?t.sourceTexture:null);n.bindTexture(e.TEXTURE_2D_ARRAY,a.__webglTexture,e.TEXTURE0+i)}function re(t,i){let a=r.get(t);if(t.isRenderTargetTexture===!1&&t.version>0&&a.__version!==t.version){fe(a,t,i);return}n.bindTexture(e.TEXTURE_3D,a.__webglTexture,e.TEXTURE0+i)}function ie(t,i){let a=r.get(t);if(t.isCubeDepthTexture!==!0&&t.version>0&&a.__version!==t.version){pe(a,t,i);return}n.bindTexture(e.TEXTURE_CUBE_MAP,a.__webglTexture,e.TEXTURE0+i)}let ae={[w]:e.REPEAT,[T]:e.CLAMP_TO_EDGE,[E]:e.MIRRORED_REPEAT},oe={[D]:e.NEAREST,[O]:e.NEAREST_MIPMAP_NEAREST,[A]:e.NEAREST_MIPMAP_LINEAR,[M]:e.LINEAR,[N]:e.LINEAR_MIPMAP_NEAREST,[F]:e.LINEAR_MIPMAP_LINEAR},se={512:e.NEVER,519:e.ALWAYS,513:e.LESS,515:e.LEQUAL,514:e.EQUAL,518:e.GEQUAL,516:e.GREATER,517:e.NOTEQUAL};function ce(n,a){if(a.type===1015&&t.has(`OES_texture_float_linear`)===!1&&(a.magFilter===1006||a.magFilter===1007||a.magFilter===1005||a.magFilter===1008||a.minFilter===1006||a.minFilter===1007||a.minFilter===1005||a.minFilter===1008)&&G(`WebGLRenderer: Unable to use linear filtering with floating point textures. OES_texture_float_linear not supported on this device.`),e.texParameteri(n,e.TEXTURE_WRAP_S,ae[a.wrapS]),e.texParameteri(n,e.TEXTURE_WRAP_T,ae[a.wrapT]),(n===e.TEXTURE_3D||n===e.TEXTURE_2D_ARRAY)&&e.texParameteri(n,e.TEXTURE_WRAP_R,ae[a.wrapR]),e.texParameteri(n,e.TEXTURE_MAG_FILTER,oe[a.magFilter]),e.texParameteri(n,e.TEXTURE_MIN_FILTER,oe[a.minFilter]),a.compareFunction&&(e.texParameteri(n,e.TEXTURE_COMPARE_MODE,e.COMPARE_REF_TO_TEXTURE),e.texParameteri(n,e.TEXTURE_COMPARE_FUNC,se[a.compareFunction])),t.has(`EXT_texture_filter_anisotropic`)===!0){if(a.magFilter===1003||a.minFilter!==1005&&a.minFilter!==1008||a.type===1015&&t.has(`OES_texture_float_linear`)===!1)return;if(a.anisotropy>1||r.get(a).__currentAnisotropy){let o=t.get(`EXT_texture_filter_anisotropic`);e.texParameterf(n,o.TEXTURE_MAX_ANISOTROPY_EXT,Math.min(a.anisotropy,i.getMaxAnisotropy())),r.get(a).__currentAnisotropy=a.anisotropy}}}function H(t,n){let r=!1;t.__webglInit===void 0&&(t.__webglInit=!0,n.addEventListener(`dispose`,C));let i=n.source,a=p.get(i);a===void 0&&(a={},p.set(i,a));let s=B(n);if(s!==t.__cacheKey){a[s]===void 0&&(a[s]={texture:e.createTexture(),usedTimes:0},o.memory.textures++,r=!0),a[s].usedTimes++;let i=a[t.__cacheKey];i!==void 0&&(a[t.__cacheKey].usedTimes--,i.usedTimes===0&&P(n)),t.__cacheKey=s,t.__webglTexture=a[s].texture}return r}function le(e,t,n){return Math.floor(Math.floor(e/n)/t)}function ue(t,r,i,a){let o=t.updateRanges;if(o.length===0)n.texSubImage2D(e.TEXTURE_2D,0,0,0,r.width,r.height,i,a,r.data);else{o.sort((e,t)=>e.start-t.start);let s=0;for(let e=1;e0){C&&w&&n.texStorage2D(e.TEXTURE_2D,E,m,y[0].width,y[0].height);for(let t=0,i=y.length;t0){let t=qf(h.width,h.height,o.format,o.type);for(let a of o.layerUpdates){let o=h.data.subarray(a*t/h.data.BYTES_PER_ELEMENT,(a+1)*t/h.data.BYTES_PER_ELEMENT);n.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,i,0,0,a,h.width,h.height,1,r,o)}o.clearLayerUpdates()}else n.compressedTexSubImage3D(e.TEXTURE_2D_ARRAY,i,0,0,0,h.width,h.height,t.depth,r,h.data)}else n.compressedTexImage3D(e.TEXTURE_2D_ARRAY,i,m,h.width,h.height,t.depth,0,h.data,0,0);else G(`WebGLRenderer: Attempt to load unsupported compressed texture format in .uploadTexture()`);else C?T&&n.texSubImage3D(e.TEXTURE_2D_ARRAY,i,0,0,0,h.width,h.height,t.depth,r,p,h.data):n.texImage3D(e.TEXTURE_2D_ARRAY,i,m,h.width,h.height,t.depth,0,r,p,h.data)}else{C&&w&&n.texStorage2D(e.TEXTURE_2D,E,m,y[0].width,y[0].height);for(let t=0,i=y.length;t0){let i=qf(t.width,t.height,o.format,o.type);for(let a of o.layerUpdates){let o=t.data.subarray(a*i/t.data.BYTES_PER_ELEMENT,(a+1)*i/t.data.BYTES_PER_ELEMENT);n.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,a,t.width,t.height,1,r,p,o)}o.clearLayerUpdates()}else n.texSubImage3D(e.TEXTURE_2D_ARRAY,0,0,0,0,t.width,t.height,t.depth,r,p,t.data)}else n.texImage3D(e.TEXTURE_2D_ARRAY,0,m,t.width,t.height,t.depth,0,r,p,t.data);else if(o.isData3DTexture)C?(w&&n.texStorage3D(e.TEXTURE_3D,E,m,t.width,t.height,t.depth),T&&n.texSubImage3D(e.TEXTURE_3D,0,0,0,0,t.width,t.height,t.depth,r,p,t.data)):n.texImage3D(e.TEXTURE_3D,0,m,t.width,t.height,t.depth,0,r,p,t.data);else if(o.isFramebufferTexture){if(w)if(C)n.texStorage2D(e.TEXTURE_2D,E,m,t.width,t.height);else{let i=t.width,a=t.height;for(let t=0;t>=1,a>>=1}}else if(o.isHTMLTexture){if(`texElementImage2D`in e){let n=e.canvas;if(n.hasAttribute(`layoutsubtree`)||n.setAttribute(`layoutsubtree`,`true`),t.parentNode!==n){n.appendChild(t),d.add(o),n.onpaint=e=>{let t=e.changedElements;for(let e of d)t.includes(e.image)&&(e.needsUpdate=!0)},n.requestPaint();return}let r=e.RGBA,i=e.RGBA,a=e.UNSIGNED_BYTE;e.texElementImage2D(e.TEXTURE_2D,0,r,i,a,t),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)}}else if(y.length>0){if(C&&w){let t=Ee(y[0]);n.texStorage2D(e.TEXTURE_2D,E,m,t.width,t.height)}for(let t=0,i=y.length;t0&&D++;let t=Ee(m[0]);n.texStorage2D(e.TEXTURE_CUBE_MAP,D,C,t.width,t.height)}for(let t=0;t<6;t++)if(p){w?E&&n.texSubImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+t,0,0,0,m[t].width,m[t].height,y,x,m[t].data):n.texImage2D(e.TEXTURE_CUBE_MAP_POSITIVE_X+t,0,C,m[t].width,m[t].height,0,y,x,m[t].data);for(let r=0;r>u),r=Math.max(1,i.height>>u);l===e.TEXTURE_3D||l===e.TEXTURE_2D_ARRAY?n.texImage3D(l,u,p,t,r,i.depth,0,d,f,null):n.texImage2D(l,u,p,t,r,0,d,f,null)}n.bindFramebuffer(e.FRAMEBUFFER,t),we(i)?s.framebufferTexture2DMultisampleEXT(e.FRAMEBUFFER,c,l,h.__webglTexture,0,Ce(i)):(l===e.TEXTURE_2D||l>=e.TEXTURE_CUBE_MAP_POSITIVE_X&&l<=e.TEXTURE_CUBE_MAP_NEGATIVE_Z)&&e.framebufferTexture2D(e.FRAMEBUFFER,c,l,h.__webglTexture,u),n.bindFramebuffer(e.FRAMEBUFFER,null)}function he(t,n,r){if(e.bindRenderbuffer(e.RENDERBUFFER,t),n.depthBuffer){let i=n.depthTexture,a=i&&i.isDepthTexture?i.type:null,o=x(n.stencilBuffer,a),c=n.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT;we(n)?s.renderbufferStorageMultisampleEXT(e.RENDERBUFFER,Ce(n),o,n.width,n.height):r?e.renderbufferStorageMultisample(e.RENDERBUFFER,Ce(n),o,n.width,n.height):e.renderbufferStorage(e.RENDERBUFFER,o,n.width,n.height),e.framebufferRenderbuffer(e.FRAMEBUFFER,c,e.RENDERBUFFER,t)}else{let t=n.textures;for(let i=0;i{delete i.__boundDepthTexture,delete i.__depthDisposeCallback,e.removeEventListener(`dispose`,t)};e.addEventListener(`dispose`,t),i.__depthDisposeCallback=t}i.__boundDepthTexture=e}if(t.depthTexture&&!i.__autoAllocateDepthBuffer)if(a)for(let e=0;e<6;e++)ge(i.__webglFramebuffer[e],t,e);else{let e=t.texture.mipmaps;e&&e.length>0?ge(i.__webglFramebuffer[0],t,0):ge(i.__webglFramebuffer,t,0)}else if(a){i.__webglDepthbuffer=[];for(let r=0;r<6;r++)if(n.bindFramebuffer(e.FRAMEBUFFER,i.__webglFramebuffer[r]),i.__webglDepthbuffer[r]===void 0)i.__webglDepthbuffer[r]=e.createRenderbuffer(),he(i.__webglDepthbuffer[r],t,!1);else{let n=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,a=i.__webglDepthbuffer[r];e.bindRenderbuffer(e.RENDERBUFFER,a),e.framebufferRenderbuffer(e.FRAMEBUFFER,n,e.RENDERBUFFER,a)}}else{let r=t.texture.mipmaps;if(r&&r.length>0?n.bindFramebuffer(e.FRAMEBUFFER,i.__webglFramebuffer[0]):n.bindFramebuffer(e.FRAMEBUFFER,i.__webglFramebuffer),i.__webglDepthbuffer===void 0)i.__webglDepthbuffer=e.createRenderbuffer(),he(i.__webglDepthbuffer,t,!1);else{let n=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,r=i.__webglDepthbuffer;e.bindRenderbuffer(e.RENDERBUFFER,r),e.framebufferRenderbuffer(e.FRAMEBUFFER,n,e.RENDERBUFFER,r)}}n.bindFramebuffer(e.FRAMEBUFFER,null)}function ve(t,n,i){let a=r.get(t);n!==void 0&&me(a.__webglFramebuffer,t,t.texture,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,0),i!==void 0&&_e(t)}function ye(t){let i=t.texture,s=r.get(t),c=r.get(i);t.addEventListener(`dispose`,k);let l=t.textures,u=t.isWebGLCubeRenderTarget===!0,d=l.length>1;if(d||(c.__webglTexture===void 0&&(c.__webglTexture=e.createTexture()),c.__version=i.version,o.memory.textures++),u){s.__webglFramebuffer=[];for(let t=0;t<6;t++)if(i.mipmaps&&i.mipmaps.length>0){s.__webglFramebuffer[t]=[];for(let n=0;n0){s.__webglFramebuffer=[];for(let t=0;t0&&we(t)===!1){s.__webglMultisampledFramebuffer=e.createFramebuffer(),s.__webglColorRenderbuffer=[],n.bindFramebuffer(e.FRAMEBUFFER,s.__webglMultisampledFramebuffer);for(let n=0;n0)for(let r=0;r0)for(let n=0;n0){if(we(t)===!1){let i=t.textures,a=t.width,o=t.height,s=e.COLOR_BUFFER_BIT,l=t.stencilBuffer?e.DEPTH_STENCIL_ATTACHMENT:e.DEPTH_ATTACHMENT,u=r.get(t),d=i.length>1;if(d)for(let t=0;t0?n.bindFramebuffer(e.DRAW_FRAMEBUFFER,u.__webglFramebuffer[0]):n.bindFramebuffer(e.DRAW_FRAMEBUFFER,u.__webglFramebuffer);for(let n=0;n0&&t.has(`WEBGL_multisampled_render_to_texture`)===!0&&n.__useRenderToTexture!==!1}function Te(e){let t=o.render.frame;u.get(e)!==t&&(u.set(e,t),e.update())}function W(e,t){let n=e.colorSpace,r=e.format,i=e.type;return e.isCompressedTexture===!0||e.isVideoTexture===!0||n!==`srgb-linear`&&n!==``&&(Bn.getTransfer(n)===`srgb`?(r!==1023||i!==1009)&&G(`WebGLTextures: sRGB encoded textures have to use RGBAFormat and UnsignedByteType.`):$t(`WebGLTextures: Unsupported texture color space:`,n)),t}function Ee(e){return typeof HTMLImageElement<`u`&&e instanceof HTMLImageElement?(l.width=e.naturalWidth||e.width,l.height=e.naturalHeight||e.height):typeof VideoFrame<`u`&&e instanceof VideoFrame?(l.width=e.displayWidth,l.height=e.displayHeight):(l.width=e.width,l.height=e.height),l}this.allocateTextureUnit=z,this.resetTextureUnits=ee,this.getTextureUnits=R,this.setTextureUnits=te,this.setTexture2D=V,this.setTexture2DArray=ne,this.setTexture3D=re,this.setTextureCube=ie,this.rebindTextures=ve,this.setupRenderTarget=ye,this.updateRenderTargetMipmap=be,this.updateMultisampleRenderTarget=U,this.setupDepthRenderbuffer=_e,this.setupFrameBufferTexture=me,this.useMultisampledRTT=we,this.isReversedDepthBuffer=function(){return n.buffers.depth.getReversed()}}function tg(e,t){function n(n,r=``){let i,a=Bn.getTransfer(r);if(n===1009)return e.UNSIGNED_BYTE;if(n===1017)return e.UNSIGNED_SHORT_4_4_4_4;if(n===1018)return e.UNSIGNED_SHORT_5_5_5_1;if(n===35902)return e.UNSIGNED_INT_5_9_9_9_REV;if(n===35899)return e.UNSIGNED_INT_10F_11F_11F_REV;if(n===1010)return e.BYTE;if(n===1011)return e.SHORT;if(n===1012)return e.UNSIGNED_SHORT;if(n===1013)return e.INT;if(n===1014)return e.UNSIGNED_INT;if(n===1015)return e.FLOAT;if(n===1016)return e.HALF_FLOAT;if(n===1021)return e.ALPHA;if(n===1022)return e.RGB;if(n===1023)return e.RGBA;if(n===1026)return e.DEPTH_COMPONENT;if(n===1027)return e.DEPTH_STENCIL;if(n===1028)return e.RED;if(n===1029)return e.RED_INTEGER;if(n===1030)return e.RG;if(n===1031)return e.RG_INTEGER;if(n===1033)return e.RGBA_INTEGER;if(n===33776||n===33777||n===33778||n===33779)if(a===`srgb`)if(i=t.get(`WEBGL_compressed_texture_s3tc_srgb`),i!==null){if(n===33776)return i.COMPRESSED_SRGB_S3TC_DXT1_EXT;if(n===33777)return i.COMPRESSED_SRGB_ALPHA_S3TC_DXT1_EXT;if(n===33778)return i.COMPRESSED_SRGB_ALPHA_S3TC_DXT3_EXT;if(n===33779)return i.COMPRESSED_SRGB_ALPHA_S3TC_DXT5_EXT}else return null;else if(i=t.get(`WEBGL_compressed_texture_s3tc`),i!==null){if(n===33776)return i.COMPRESSED_RGB_S3TC_DXT1_EXT;if(n===33777)return i.COMPRESSED_RGBA_S3TC_DXT1_EXT;if(n===33778)return i.COMPRESSED_RGBA_S3TC_DXT3_EXT;if(n===33779)return i.COMPRESSED_RGBA_S3TC_DXT5_EXT}else return null;if(n===35840||n===35841||n===35842||n===35843)if(i=t.get(`WEBGL_compressed_texture_pvrtc`),i!==null){if(n===35840)return i.COMPRESSED_RGB_PVRTC_4BPPV1_IMG;if(n===35841)return i.COMPRESSED_RGB_PVRTC_2BPPV1_IMG;if(n===35842)return i.COMPRESSED_RGBA_PVRTC_4BPPV1_IMG;if(n===35843)return i.COMPRESSED_RGBA_PVRTC_2BPPV1_IMG}else return null;if(n===36196||n===37492||n===37496||n===37488||n===37489||n===37490||n===37491)if(i=t.get(`WEBGL_compressed_texture_etc`),i!==null){if(n===36196||n===37492)return a===`srgb`?i.COMPRESSED_SRGB8_ETC2:i.COMPRESSED_RGB8_ETC2;if(n===37496)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ETC2_EAC:i.COMPRESSED_RGBA8_ETC2_EAC;if(n===37488)return i.COMPRESSED_R11_EAC;if(n===37489)return i.COMPRESSED_SIGNED_R11_EAC;if(n===37490)return i.COMPRESSED_RG11_EAC;if(n===37491)return i.COMPRESSED_SIGNED_RG11_EAC}else return null;if(n===37808||n===37809||n===37810||n===37811||n===37812||n===37813||n===37814||n===37815||n===37816||n===37817||n===37818||n===37819||n===37820||n===37821)if(i=t.get(`WEBGL_compressed_texture_astc`),i!==null){if(n===37808)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_4x4_KHR:i.COMPRESSED_RGBA_ASTC_4x4_KHR;if(n===37809)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_5x4_KHR:i.COMPRESSED_RGBA_ASTC_5x4_KHR;if(n===37810)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_5x5_KHR:i.COMPRESSED_RGBA_ASTC_5x5_KHR;if(n===37811)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_6x5_KHR:i.COMPRESSED_RGBA_ASTC_6x5_KHR;if(n===37812)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_6x6_KHR:i.COMPRESSED_RGBA_ASTC_6x6_KHR;if(n===37813)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_8x5_KHR:i.COMPRESSED_RGBA_ASTC_8x5_KHR;if(n===37814)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_8x6_KHR:i.COMPRESSED_RGBA_ASTC_8x6_KHR;if(n===37815)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_8x8_KHR:i.COMPRESSED_RGBA_ASTC_8x8_KHR;if(n===37816)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_10x5_KHR:i.COMPRESSED_RGBA_ASTC_10x5_KHR;if(n===37817)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_10x6_KHR:i.COMPRESSED_RGBA_ASTC_10x6_KHR;if(n===37818)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_10x8_KHR:i.COMPRESSED_RGBA_ASTC_10x8_KHR;if(n===37819)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_10x10_KHR:i.COMPRESSED_RGBA_ASTC_10x10_KHR;if(n===37820)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_12x10_KHR:i.COMPRESSED_RGBA_ASTC_12x10_KHR;if(n===37821)return a===`srgb`?i.COMPRESSED_SRGB8_ALPHA8_ASTC_12x12_KHR:i.COMPRESSED_RGBA_ASTC_12x12_KHR}else return null;if(n===36492||n===36494||n===36495)if(i=t.get(`EXT_texture_compression_bptc`),i!==null){if(n===36492)return a===`srgb`?i.COMPRESSED_SRGB_ALPHA_BPTC_UNORM_EXT:i.COMPRESSED_RGBA_BPTC_UNORM_EXT;if(n===36494)return i.COMPRESSED_RGB_BPTC_SIGNED_FLOAT_EXT;if(n===36495)return i.COMPRESSED_RGB_BPTC_UNSIGNED_FLOAT_EXT}else return null;if(n===36283||n===36284||n===36285||n===36286)if(i=t.get(`EXT_texture_compression_rgtc`),i!==null){if(n===36283)return i.COMPRESSED_RED_RGTC1_EXT;if(n===36284)return i.COMPRESSED_SIGNED_RED_RGTC1_EXT;if(n===36285)return i.COMPRESSED_RED_GREEN_RGTC2_EXT;if(n===36286)return i.COMPRESSED_SIGNED_RED_GREEN_RGTC2_EXT}else return null;return n===1020?e.UNSIGNED_INT_24_8:e[n]===void 0?null:e[n]}return{convert:n}}var ng=` -void main() { - - gl_Position = vec4( position, 1.0 ); - -}`,rg=` -uniform sampler2DArray depthColor; -uniform float depthWidth; -uniform float depthHeight; - -void main() { - - vec2 coord = vec2( gl_FragCoord.x / depthWidth, gl_FragCoord.y / depthHeight ); - - if ( coord.x >= 1.0 ) { - - gl_FragDepth = texture( depthColor, vec3( coord.x - 1.0, coord.y, 1 ) ).r; - - } else { - - gl_FragDepth = texture( depthColor, vec3( coord.x, coord.y, 0 ) ).r; - - } - -}`,ig=class{constructor(){this.texture=null,this.mesh=null,this.depthNear=0,this.depthFar=0}init(e,t){if(this.texture===null){let n=new ys(e.texture);(e.depthNear!==t.depthNear||e.depthFar!==t.depthFar)&&(this.depthNear=e.depthNear,this.depthFar=e.depthFar),this.texture=n}}getMesh(e){if(this.texture!==null&&this.mesh===null){let t=e.cameras[0].viewport,n=new yl({vertexShader:ng,fragmentShader:rg,uniforms:{depthColor:{value:this.texture},depthWidth:{value:t.z},depthHeight:{value:t.w}}});this.mesh=new La(new Qc(20,20),n)}return this.mesh}reset(){this.texture=null,this.mesh=null}getDepthTexture(){return this.texture}},ag=class extends rn{constructor(e,t){super();let n=this,r=null,i=1,a=null,o=`local-floor`,s=1,c=null,l=null,u=null,d=null,f=null,p=null,m=typeof XRWebGLBinding<`u`,h=new ig,g={},_=t.getContextAttributes(),v=null,y=null,b=[],x=[],S=new K,C=null,w=new Ou;w.viewport=new Zn;let T=new Ou;T.viewport=new Zn;let E=[w,T],D=new sd,O=null,k=null;this.cameraAutoUpdate=!0,this.enabled=!1,this.isPresenting=!1,this.getController=function(e){let t=b[e];return t===void 0&&(t=new Nr,b[e]=t),t.getTargetRaySpace()},this.getControllerGrip=function(e){let t=b[e];return t===void 0&&(t=new Nr,b[e]=t),t.getGripSpace()},this.getHand=function(e){let t=b[e];return t===void 0&&(t=new Nr,b[e]=t),t.getHandSpace()};function A(e){let t=x.indexOf(e.inputSource);if(t===-1)return;let n=b[t];n!==void 0&&(n.update(e.inputSource,e.frame,c||a),n.dispatchEvent({type:e.type,data:e.inputSource}))}function j(){r.removeEventListener(`select`,A),r.removeEventListener(`selectstart`,A),r.removeEventListener(`selectend`,A),r.removeEventListener(`squeeze`,A),r.removeEventListener(`squeezestart`,A),r.removeEventListener(`squeezeend`,A),r.removeEventListener(`end`,j),r.removeEventListener(`inputsourceschange`,M);for(let e=0;e=0&&(x[r]=null,b[r].disconnect(n))}for(let t=0;t=x.length){x.push(n),r=e;break}else if(x[e]===null){x[e]=n,r=e;break}if(r===-1)break}let i=b[r];i&&i.connect(n)}}let N=new q,P=new q;function F(e,t,n){N.setFromMatrixPosition(t.matrixWorld),P.setFromMatrixPosition(n.matrixWorld);let r=N.distanceTo(P),i=t.projectionMatrix.elements,a=n.projectionMatrix.elements,o=i[14]/(i[10]-1),s=i[14]/(i[10]+1),c=(i[9]+1)/i[5],l=(i[9]-1)/i[5],u=(i[8]-1)/i[0],d=(a[8]+1)/a[0],f=o*u,p=o*d,m=r/(-u+d),h=m*-u;if(t.matrixWorld.decompose(e.position,e.quaternion,e.scale),e.translateX(h),e.translateZ(m),e.matrixWorld.compose(e.position,e.quaternion,e.scale),e.matrixWorldInverse.copy(e.matrixWorld).invert(),i[10]===-1)e.projectionMatrix.copy(t.projectionMatrix),e.projectionMatrixInverse.copy(t.projectionMatrixInverse);else{let t=o+m,n=s+m,i=f-h,a=p+(r-h),u=c*s/n*t,d=l*s/n*t;e.projectionMatrix.makePerspective(i,a,u,d,t,n),e.projectionMatrixInverse.copy(e.projectionMatrix).invert()}}function I(e,t){t===null?e.matrixWorld.copy(e.matrix):e.matrixWorld.multiplyMatrices(t.matrixWorld,e.matrix),e.matrixWorldInverse.copy(e.matrixWorld).invert()}this.updateCamera=function(e){if(r===null)return;let t=e.near,n=e.far;h.texture!==null&&(h.depthNear>0&&(t=h.depthNear),h.depthFar>0&&(n=h.depthFar)),D.near=T.near=w.near=t,D.far=T.far=w.far=n,(O!==D.near||k!==D.far)&&(r.updateRenderState({depthNear:D.near,depthFar:D.far}),O=D.near,k=D.far),D.layers.mask=e.layers.mask|6,w.layers.mask=D.layers.mask&-5,T.layers.mask=D.layers.mask&-3;let i=e.parent,a=D.cameras;I(D,i);for(let e=0;e0&&(e.alphaTest.value=r.alphaTest);let i=t.get(r),a=i.envMap,o=i.envMapRotation;a&&(e.envMap.value=a,e.envMapRotation.value.setFromMatrix4(og.makeRotationFromEuler(o)).transpose(),a.isCubeTexture&&a.isRenderTargetTexture===!1&&e.envMapRotation.value.premultiply(sg),e.reflectivity.value=r.reflectivity,e.ior.value=r.ior,e.refractionRatio.value=r.refractionRatio),r.lightMap&&(e.lightMap.value=r.lightMap,e.lightMapIntensity.value=r.lightMapIntensity,n(r.lightMap,e.lightMapTransform)),r.aoMap&&(e.aoMap.value=r.aoMap,e.aoMapIntensity.value=r.aoMapIntensity,n(r.aoMap,e.aoMapTransform))}function o(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,t.map&&(e.map.value=t.map,n(t.map,e.mapTransform))}function s(e,t){e.dashSize.value=t.dashSize,e.totalSize.value=t.dashSize+t.gapSize,e.scale.value=t.scale}function c(e,t,r,i){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.size.value=t.size*r,e.scale.value=i*.5,t.map&&(e.map.value=t.map,n(t.map,e.uvTransform)),t.alphaMap&&(e.alphaMap.value=t.alphaMap,n(t.alphaMap,e.alphaMapTransform)),t.alphaTest>0&&(e.alphaTest.value=t.alphaTest)}function l(e,t){e.diffuse.value.copy(t.color),e.opacity.value=t.opacity,e.rotation.value=t.rotation,t.map&&(e.map.value=t.map,n(t.map,e.mapTransform)),t.alphaMap&&(e.alphaMap.value=t.alphaMap,n(t.alphaMap,e.alphaMapTransform)),t.alphaTest>0&&(e.alphaTest.value=t.alphaTest)}function u(e,t){e.specular.value.copy(t.specular),e.shininess.value=Math.max(t.shininess,1e-4)}function d(e,t){t.gradientMap&&(e.gradientMap.value=t.gradientMap)}function f(e,t){e.metalness.value=t.metalness,t.metalnessMap&&(e.metalnessMap.value=t.metalnessMap,n(t.metalnessMap,e.metalnessMapTransform)),e.roughness.value=t.roughness,t.roughnessMap&&(e.roughnessMap.value=t.roughnessMap,n(t.roughnessMap,e.roughnessMapTransform)),t.envMap&&(e.envMapIntensity.value=t.envMapIntensity)}function p(e,t,r){e.ior.value=t.ior,t.sheen>0&&(e.sheenColor.value.copy(t.sheenColor).multiplyScalar(t.sheen),e.sheenRoughness.value=t.sheenRoughness,t.sheenColorMap&&(e.sheenColorMap.value=t.sheenColorMap,n(t.sheenColorMap,e.sheenColorMapTransform)),t.sheenRoughnessMap&&(e.sheenRoughnessMap.value=t.sheenRoughnessMap,n(t.sheenRoughnessMap,e.sheenRoughnessMapTransform))),t.clearcoat>0&&(e.clearcoat.value=t.clearcoat,e.clearcoatRoughness.value=t.clearcoatRoughness,t.clearcoatMap&&(e.clearcoatMap.value=t.clearcoatMap,n(t.clearcoatMap,e.clearcoatMapTransform)),t.clearcoatRoughnessMap&&(e.clearcoatRoughnessMap.value=t.clearcoatRoughnessMap,n(t.clearcoatRoughnessMap,e.clearcoatRoughnessMapTransform)),t.clearcoatNormalMap&&(e.clearcoatNormalMap.value=t.clearcoatNormalMap,n(t.clearcoatNormalMap,e.clearcoatNormalMapTransform),e.clearcoatNormalScale.value.copy(t.clearcoatNormalScale),t.side===1&&e.clearcoatNormalScale.value.negate())),t.dispersion>0&&(e.dispersion.value=t.dispersion),t.iridescence>0&&(e.iridescence.value=t.iridescence,e.iridescenceIOR.value=t.iridescenceIOR,e.iridescenceThicknessMinimum.value=t.iridescenceThicknessRange[0],e.iridescenceThicknessMaximum.value=t.iridescenceThicknessRange[1],t.iridescenceMap&&(e.iridescenceMap.value=t.iridescenceMap,n(t.iridescenceMap,e.iridescenceMapTransform)),t.iridescenceThicknessMap&&(e.iridescenceThicknessMap.value=t.iridescenceThicknessMap,n(t.iridescenceThicknessMap,e.iridescenceThicknessMapTransform))),t.transmission>0&&(e.transmission.value=t.transmission,e.transmissionSamplerMap.value=r.texture,e.transmissionSamplerSize.value.set(r.width,r.height),t.transmissionMap&&(e.transmissionMap.value=t.transmissionMap,n(t.transmissionMap,e.transmissionMapTransform)),e.thickness.value=t.thickness,t.thicknessMap&&(e.thicknessMap.value=t.thicknessMap,n(t.thicknessMap,e.thicknessMapTransform)),e.attenuationDistance.value=t.attenuationDistance,e.attenuationColor.value.copy(t.attenuationColor)),t.anisotropy>0&&(e.anisotropyVector.value.set(t.anisotropy*Math.cos(t.anisotropyRotation),t.anisotropy*Math.sin(t.anisotropyRotation)),t.anisotropyMap&&(e.anisotropyMap.value=t.anisotropyMap,n(t.anisotropyMap,e.anisotropyMapTransform))),e.specularIntensity.value=t.specularIntensity,e.specularColor.value.copy(t.specularColor),t.specularColorMap&&(e.specularColorMap.value=t.specularColorMap,n(t.specularColorMap,e.specularColorMapTransform)),t.specularIntensityMap&&(e.specularIntensityMap.value=t.specularIntensityMap,n(t.specularIntensityMap,e.specularIntensityMapTransform))}function m(e,t){t.matcap&&(e.matcap.value=t.matcap)}function h(e,n){let r=t.get(n).light;e.referencePosition.value.setFromMatrixPosition(r.matrixWorld),e.nearDistance.value=r.shadow.camera.near,e.farDistance.value=r.shadow.camera.far}return{refreshFogUniforms:r,refreshMaterialUniforms:i}}function lg(e,t,n,r){let i={},a={},o=[],s=e.getParameter(e.MAX_UNIFORM_BUFFER_BINDINGS);function c(e,t){let n=t.program;r.uniformBlockBinding(e,n)}function l(e,n){let o=i[e.id];o===void 0&&(m(e),o=u(e),i[e.id]=o,e.addEventListener(`dispose`,g));let s=n.program;r.updateUBOMapping(e,s);let c=t.render.frame;a[e.id]!==c&&(f(e),a[e.id]=c)}function u(t){let n=d();t.__bindingPointIndex=n;let r=e.createBuffer(),i=t.__size,a=t.usage;return e.bindBuffer(e.UNIFORM_BUFFER,r),e.bufferData(e.UNIFORM_BUFFER,i,a),e.bindBuffer(e.UNIFORM_BUFFER,null),e.bindBufferBase(e.UNIFORM_BUFFER,n,r),r}function d(){for(let e=0;e0&&(n+=16-r),e.__size=n,e.__cache={},this}function h(e){let t={boundary:0,storage:0};return typeof e==`number`||typeof e==`boolean`?(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?G(`WebGLRenderer: Texture samplers can not be part of an uniforms group.`):ArrayBuffer.isView(e)?(t.boundary=16,t.storage=e.byteLength):G(`WebGLRenderer: Unsupported uniform value type.`,e),t}function g(t){let n=t.target;n.removeEventListener(`dispose`,g);let r=o.indexOf(n.__bindingPointIndex);o.splice(r,1),e.deleteBuffer(i[n.id]),delete i[n.id],delete a[n.id]}function _(){for(let t in i)e.deleteBuffer(i[t]);o=[],i={},a={}}return{bind:c,update:l,dispose:_}}var ug=new Uint16Array([12469,15057,12620,14925,13266,14620,13807,14376,14323,13990,14545,13625,14713,13328,14840,12882,14931,12528,14996,12233,15039,11829,15066,11525,15080,11295,15085,10976,15082,10705,15073,10495,13880,14564,13898,14542,13977,14430,14158,14124,14393,13732,14556,13410,14702,12996,14814,12596,14891,12291,14937,11834,14957,11489,14958,11194,14943,10803,14921,10506,14893,10278,14858,9960,14484,14039,14487,14025,14499,13941,14524,13740,14574,13468,14654,13106,14743,12678,14818,12344,14867,11893,14889,11509,14893,11180,14881,10751,14852,10428,14812,10128,14765,9754,14712,9466,14764,13480,14764,13475,14766,13440,14766,13347,14769,13070,14786,12713,14816,12387,14844,11957,14860,11549,14868,11215,14855,10751,14825,10403,14782,10044,14729,9651,14666,9352,14599,9029,14967,12835,14966,12831,14963,12804,14954,12723,14936,12564,14917,12347,14900,11958,14886,11569,14878,11247,14859,10765,14828,10401,14784,10011,14727,9600,14660,9289,14586,8893,14508,8533,15111,12234,15110,12234,15104,12216,15092,12156,15067,12010,15028,11776,14981,11500,14942,11205,14902,10752,14861,10393,14812,9991,14752,9570,14682,9252,14603,8808,14519,8445,14431,8145,15209,11449,15208,11451,15202,11451,15190,11438,15163,11384,15117,11274,15055,10979,14994,10648,14932,10343,14871,9936,14803,9532,14729,9218,14645,8742,14556,8381,14461,8020,14365,7603,15273,10603,15272,10607,15267,10619,15256,10631,15231,10614,15182,10535,15118,10389,15042,10167,14963,9787,14883,9447,14800,9115,14710,8665,14615,8318,14514,7911,14411,7507,14279,7198,15314,9675,15313,9683,15309,9712,15298,9759,15277,9797,15229,9773,15166,9668,15084,9487,14995,9274,14898,8910,14800,8539,14697,8234,14590,7790,14479,7409,14367,7067,14178,6621,15337,8619,15337,8631,15333,8677,15325,8769,15305,8871,15264,8940,15202,8909,15119,8775,15022,8565,14916,8328,14804,8009,14688,7614,14569,7287,14448,6888,14321,6483,14088,6171,15350,7402,15350,7419,15347,7480,15340,7613,15322,7804,15287,7973,15229,8057,15148,8012,15046,7846,14933,7611,14810,7357,14682,7069,14552,6656,14421,6316,14251,5948,14007,5528,15356,5942,15356,5977,15353,6119,15348,6294,15332,6551,15302,6824,15249,7044,15171,7122,15070,7050,14949,6861,14818,6611,14679,6349,14538,6067,14398,5651,14189,5311,13935,4958,15359,4123,15359,4153,15356,4296,15353,4646,15338,5160,15311,5508,15263,5829,15188,6042,15088,6094,14966,6001,14826,5796,14678,5543,14527,5287,14377,4985,14133,4586,13869,4257,15360,1563,15360,1642,15358,2076,15354,2636,15341,3350,15317,4019,15273,4429,15203,4732,15105,4911,14981,4932,14836,4818,14679,4621,14517,4386,14359,4156,14083,3795,13808,3437,15360,122,15360,137,15358,285,15355,636,15344,1274,15322,2177,15281,2765,15215,3223,15120,3451,14995,3569,14846,3567,14681,3466,14511,3305,14344,3121,14037,2800,13753,2467,15360,0,15360,1,15359,21,15355,89,15346,253,15325,479,15287,796,15225,1148,15133,1492,15008,1749,14856,1882,14685,1886,14506,1783,14324,1608,13996,1398,13702,1183]),dg=null;function fg(){return dg===null&&(dg=new Za(ug,16,16,me,ne),dg.name=`DFG_LUT`,dg.minFilter=M,dg.magFilter=M,dg.wrapS=T,dg.wrapT=T,dg.generateMipmaps=!1,dg.needsUpdate=!0),dg}var pg=class{constructor(e={}){let{canvas:t=Kt(),context:n=null,depth:r=!0,stencil:i=!1,alpha:a=!1,antialias:o=!1,premultipliedAlpha:s=!0,preserveDrawingBuffer:c=!1,powerPreference:l=`default`,failIfMajorPerformanceCaveat:u=!1,reversedDepthBuffer:d=!1,outputBufferType:f=L}=e;this.isWebGLRenderer=!0;let p;if(n!==null){if(typeof WebGLRenderingContext<`u`&&n instanceof WebGLRenderingContext)throw Error(`THREE.WebGLRenderer: WebGL 1 is not supported since r163.`);p=n.getContextAttributes().alpha}else p=a;let m=f,h=new Set([_e,he,pe]),g=new Set([L,B,te,ae,re,ie]),_=new Uint32Array(4),v=new Int32Array(4),y=new q,b=null,x=null,S=[],C=[],w=null;this.domElement=t,this.debug={checkShaderErrors:!0,onShaderError:null},this.autoClear=!0,this.autoClearColor=!0,this.autoClearDepth=!0,this.autoClearStencil=!0,this.sortObjects=!0,this.clippingPlanes=[],this.localClippingEnabled=!1,this.toneMapping=0,this.toneMappingExposure=1,this.transmissionResolutionScale=1;let T=this,E=!1,D=null;this._outputColorSpace=mt;let O=0,k=0,A=null,j=-1,M=null,N=new Zn,P=new Zn,I=null,ee=new Y(0),R=0,z=t.width,V=t.height,oe=1,se=null,ce=null,H=new Zn(0,0,z,V),le=new Zn(0,0,z,V),ue=!1,de=new vo,fe=!1,me=!1,ge=new J,ve=new q,ye=new Zn,be={background:null,fog:null,environment:null,overrideMaterial:null,isScene:!0},xe=!1;function Se(){return A===null?oe:1}let U=n;function Ce(e,n){return t.getContext(e,n)}try{let e={alpha:!0,depth:r,stencil:i,antialias:o,premultipliedAlpha:s,preserveDrawingBuffer:c,powerPreference:l,failIfMajorPerformanceCaveat:u};if(`setAttribute`in t&&t.setAttribute(`data-engine`,`three.js r184`),t.addEventListener(`webglcontextlost`,Je,!1),t.addEventListener(`webglcontextrestored`,Ye,!1),t.addEventListener(`webglcontextcreationerror`,Xe,!1),U===null){let t=`webgl2`;if(U=Ce(t,e),U===null)throw Ce(t)?Error(`Error creating WebGL context with your selected attributes.`):Error(`Error creating WebGL context.`)}}catch(e){throw $t(`WebGLRenderer: `+e.message),e}let we,Te,W,Ee,De,Oe,ke,Ae,je,Me,Ne,Pe,Fe,Ie,Le,Re,ze,Be,Ve,He,Ue,We,Ge;function Ke(){we=new jp(U),we.init(),Ue=new tg(U,we),Te=new sp(U,we,e,Ue),W=new $h(U,we),Te.reversedDepthBuffer&&d&&W.buffers.depth.setReversed(!0),Ee=new Pp(U),De=new Nh,Oe=new eg(U,we,W,De,Te,Ue,Ee),ke=new Ap(T),Ae=new Qf(U),We=new ap(U,Ae),je=new Mp(U,Ae,Ee,We),Me=new Ip(U,je,Ae,We,Ee),Be=new Fp(U,Te,Oe),Le=new cp(De),Ne=new Mh(T,ke,we,Te,We,Le),Pe=new cg(T,De),Fe=new Lh,Ie=new Wh(we),ze=new ip(T,ke,W,Me,p,s),Re=new Qh(T,Me,Te),Ge=new lg(U,Ee,Te,W),Ve=new op(U,we,Ee),He=new Np(U,we,Ee),Ee.programs=Ne.programs,T.capabilities=Te,T.extensions=we,T.properties=De,T.renderLists=Fe,T.shadowMap=Re,T.state=W,T.info=Ee}Ke(),m!==1009&&(w=new Rp(m,t.width,t.height,r,i));let qe=new ag(T,U);this.xr=qe,this.getContext=function(){return U},this.getContextAttributes=function(){return U.getContextAttributes()},this.forceContextLoss=function(){let e=we.get(`WEBGL_lose_context`);e&&e.loseContext()},this.forceContextRestore=function(){let e=we.get(`WEBGL_lose_context`);e&&e.restoreContext()},this.getPixelRatio=function(){return oe},this.setPixelRatio=function(e){e!==void 0&&(oe=e,this.setSize(z,V,!1))},this.getSize=function(e){return e.set(z,V)},this.setSize=function(e,n,r=!0){if(qe.isPresenting){G(`WebGLRenderer: Can't change size while VR device is presenting.`);return}z=e,V=n,t.width=Math.floor(e*oe),t.height=Math.floor(n*oe),r===!0&&(t.style.width=e+`px`,t.style.height=n+`px`),w!==null&&w.setSize(t.width,t.height),this.setViewport(0,0,e,n)},this.getDrawingBufferSize=function(e){return e.set(z*oe,V*oe).floor()},this.setDrawingBufferSize=function(e,n,r){z=e,V=n,oe=r,t.width=Math.floor(e*r),t.height=Math.floor(n*r),this.setViewport(0,0,e,n)},this.setEffects=function(e){if(m===1009){$t(`THREE.WebGLRenderer: setEffects() requires outputBufferType set to HalfFloatType or FloatType.`);return}if(e){for(let t=0;t{function n(){if(r.forEach(function(e){De.get(e).currentProgram.isReady()&&r.delete(e)}),r.size===0){t(e);return}setTimeout(n,10)}we.get(`KHR_parallel_shader_compile`)===null?setTimeout(n,10):n()})};let tt=null;function nt(e){tt&&tt(e)}function rt(){at.stop()}function it(){at.start()}let at=new Zf;at.setAnimationLoop(nt),typeof self<`u`&&at.setContext(self),this.setAnimationLoop=function(e){tt=e,qe.setAnimationLoop(e),e===null?at.stop():at.start()},qe.addEventListener(`sessionstart`,rt),qe.addEventListener(`sessionend`,it),this.render=function(e,t){if(t!==void 0&&t.isCamera!==!0){$t(`WebGLRenderer.render: camera is not an instance of THREE.Camera.`);return}if(E===!0)return;D!==null&&D.renderStart(e,t);let n=qe.enabled===!0&&qe.isPresenting===!0,r=w!==null&&(A===null||n)&&w.begin(T,A);if(e.matrixWorldAutoUpdate===!0&&e.updateMatrixWorld(),t.parent===null&&t.matrixWorldAutoUpdate===!0&&t.updateMatrixWorld(),qe.enabled===!0&&qe.isPresenting===!0&&(w===null||w.isCompositing()===!1)&&(qe.cameraAutoUpdate===!0&&qe.updateCamera(t),t=qe.getCamera()),e.isScene===!0&&e.onBeforeRender(T,e,t,A),x=Ie.get(e,C.length),x.init(t),x.state.textureUnits=Oe.getTextureUnits(),C.push(x),ge.multiplyMatrices(t.projectionMatrix,t.matrixWorldInverse),de.setFromProjectionMatrix(ge,Ft,t.reversedDepth),me=this.localClippingEnabled,fe=Le.init(this.clippingPlanes,me),b=Fe.get(e,S.length),b.init(),S.push(b),qe.enabled===!0&&qe.isPresenting===!0){let e=T.xr.getDepthSensingMesh();e!==null&&ot(e,t,-1/0,T.sortObjects)}ot(e,t,0,T.sortObjects),b.finish(),T.sortObjects===!0&&b.sort(se,ce),xe=qe.enabled===!1||qe.isPresenting===!1||qe.hasDepthSensing()===!1,xe&&ze.addToRenderList(b,e),this.info.render.frame++,fe===!0&&Le.beginShadows();let i=x.state.shadowsArray;if(Re.render(i,e,t),fe===!0&&Le.endShadows(),this.info.autoReset===!0&&this.info.reset(),(r&&w.hasRenderPass())===!1){let n=b.opaque,r=b.transmissive;if(x.setupLights(),t.isArrayCamera){let i=t.cameras;if(r.length>0)for(let t=0,a=i.length;t0&&ct(n,r,e,t),xe&&ze.render(e),st(b,e,t)}A!==null&&k===0&&(Oe.updateMultisampleRenderTarget(A),Oe.updateRenderTargetMipmap(A)),r&&w.end(T),e.isScene===!0&&e.onAfterRender(T,e,t),We.resetDefaultState(),j=-1,M=null,C.pop(),C.length>0?(x=C[C.length-1],Oe.setTextureUnits(x.state.textureUnits),fe===!0&&Le.setGlobalState(T.clippingPlanes,x.state.camera)):x=null,S.pop(),b=S.length>0?S[S.length-1]:null,D!==null&&D.renderEnd()};function ot(e,t,n,r){if(e.visible===!1)return;if(e.layers.test(t.layers)){if(e.isGroup)n=e.renderOrder;else if(e.isLOD)e.autoUpdate===!0&&e.update(t);else if(e.isLightProbeGrid)x.pushLightProbeGrid(e);else if(e.isLight)x.pushLight(e),e.castShadow&&x.pushShadow(e);else if(e.isSprite){if(!e.frustumCulled||de.intersectsSprite(e)){r&&ye.setFromMatrixPosition(e.matrixWorld).applyMatrix4(ge);let t=Me.update(e),i=e.material;i.visible&&b.push(e,t,i,n,ye.z,null)}}else if((e.isMesh||e.isLine||e.isPoints)&&(!e.frustumCulled||de.intersectsObject(e))){let t=Me.update(e),i=e.material;if(r&&(e.boundingSphere===void 0?(t.boundingSphere===null&&t.computeBoundingSphere(),ye.copy(t.boundingSphere.center)):(e.boundingSphere===null&&e.computeBoundingSphere(),ye.copy(e.boundingSphere.center)),ye.applyMatrix4(e.matrixWorld).applyMatrix4(ge)),Array.isArray(i)){let r=t.groups;for(let a=0,o=r.length;a0&<(i,t,n),a.length>0&<(a,t,n),o.length>0&<(o,t,n),W.buffers.depth.setTest(!0),W.buffers.depth.setMask(!0),W.buffers.color.setMask(!0),W.setPolygonOffset(!1)}function ct(e,t,n,r){if((n.isScene===!0?n.overrideMaterial:null)!==null)return;if(x.state.transmissionRenderTarget[r.id]===void 0){let e=we.has(`EXT_color_buffer_half_float`)||we.has(`EXT_color_buffer_float`);x.state.transmissionRenderTarget[r.id]=new $n(1,1,{generateMipmaps:!0,type:e?ne:L,minFilter:F,samples:Math.max(4,Te.samples),stencilBuffer:i,resolveDepthBuffer:!1,resolveStencilBuffer:!1,colorSpace:Bn.workingColorSpace})}let a=x.state.transmissionRenderTarget[r.id],o=r.viewport||N;a.setSize(o.z*T.transmissionResolutionScale,o.w*T.transmissionResolutionScale);let s=T.getRenderTarget(),c=T.getActiveCubeFace(),l=T.getActiveMipmapLevel();T.setRenderTarget(a),T.getClearColor(ee),R=T.getClearAlpha(),R<1&&T.setClearColor(16777215,.5),T.clear(),xe&&ze.render(n);let u=T.toneMapping;T.toneMapping=0;let d=r.viewport;if(r.viewport!==void 0&&(r.viewport=void 0),x.setupLightsView(r),fe===!0&&Le.setGlobalState(T.clippingPlanes,r),lt(e,n,r),Oe.updateMultisampleRenderTarget(a),Oe.updateRenderTargetMipmap(a),we.has(`WEBGL_multisampled_render_to_texture`)===!1){let e=!1;for(let i=0,a=t.length;i0,r.currentProgram=d,r.uniformsList=null,d}function ft(e){if(e.uniformsList===null){let t=e.currentProgram.getUniforms();e.uniformsList=Gm.seqWithValue(t.seq,e.uniforms)}return e.uniformsList}function pt(e,t){let n=De.get(e);n.outputColorSpace=t.outputColorSpace,n.batching=t.batching,n.batchingColor=t.batchingColor,n.instancing=t.instancing,n.instancingColor=t.instancingColor,n.instancingMorph=t.instancingMorph,n.skinning=t.skinning,n.morphTargets=t.morphTargets,n.morphNormals=t.morphNormals,n.morphColors=t.morphColors,n.morphTargetsCount=t.morphTargetsCount,n.numClippingPlanes=t.numClippingPlanes,n.numIntersection=t.numClipIntersection,n.vertexAlphas=t.vertexAlphas,n.vertexTangents=t.vertexTangents,n.toneMapping=t.toneMapping}function ht(e,t){if(e.length===0)return null;if(e.length===1)return e[0].texture===null?null:e[0];y.setFromMatrixPosition(t.matrixWorld);for(let t=0,n=e.length;t0),f=!!n.morphAttributes.position,p=!!n.morphAttributes.normal,m=!!n.morphAttributes.color,h=0;r.toneMapped&&(A===null||A.isXRRenderTarget===!0)&&(h=T.toneMapping);let g=n.morphAttributes.position||n.morphAttributes.normal||n.morphAttributes.color,_=g===void 0?0:g.length,v=De.get(r),y=x.state.lights;if(fe===!0&&(me===!0||e!==M)){let t=e===M&&r.id===j;Le.setState(r,e,t)}let b=!1;r.version===v.__version?v.needsLights&&v.lightsStateVersion!==y.state.version?b=!0:v.outputColorSpace===s?i.isBatchedMesh&&v.batching===!1||!i.isBatchedMesh&&v.batching===!0||i.isBatchedMesh&&v.batchingColor===!0&&i.colorTexture===null||i.isBatchedMesh&&v.batchingColor===!1&&i.colorTexture!==null||i.isInstancedMesh&&v.instancing===!1||!i.isInstancedMesh&&v.instancing===!0||i.isSkinnedMesh&&v.skinning===!1||!i.isSkinnedMesh&&v.skinning===!0||i.isInstancedMesh&&v.instancingColor===!0&&i.instanceColor===null||i.isInstancedMesh&&v.instancingColor===!1&&i.instanceColor!==null||i.isInstancedMesh&&v.instancingMorph===!0&&i.morphTexture===null||i.isInstancedMesh&&v.instancingMorph===!1&&i.morphTexture!==null?b=!0:v.envMap===l?r.fog===!0&&v.fog!==a||v.numClippingPlanes!==void 0&&(v.numClippingPlanes!==Le.numPlanes||v.numIntersection!==Le.numIntersection)?b=!0:v.vertexAlphas===u&&v.vertexTangents===d&&v.morphTargets===f&&v.morphNormals===p&&v.morphColors===m&&v.toneMapping===h&&v.morphTargetsCount===_?!!v.lightProbeGrid!=x.state.lightProbeGridArray.length>0&&(b=!0):b=!0:b=!0:b=!0:(b=!0,v.__version=r.version);let S=v.currentProgram;b===!0&&(S=dt(r,t,i),D&&r.isNodeMaterial&&D.onUpdateProgram(r,S,v));let C=!1,w=!1,E=!1,O=S.getUniforms(),k=v.uniforms;if(W.useProgram(S.program)&&(C=!0,w=!0,E=!0),r.id!==j&&(j=r.id,w=!0),v.needsLights){let e=ht(x.state.lightProbeGridArray,i);v.lightProbeGrid!==e&&(v.lightProbeGrid=e,w=!0)}if(C||M!==e){W.buffers.depth.getReversed()&&e.reversedDepth!==!0&&(e._reversedDepth=!0,e.updateProjectionMatrix()),O.setValue(U,`projectionMatrix`,e.projectionMatrix),O.setValue(U,`viewMatrix`,e.matrixWorldInverse);let t=O.map.cameraPosition;t!==void 0&&t.setValue(U,ve.setFromMatrixPosition(e.matrixWorld)),Te.logarithmicDepthBuffer&&O.setValue(U,`logDepthBufFC`,2/(Math.log(e.far+1)/Math.LN2)),(r.isMeshPhongMaterial||r.isMeshToonMaterial||r.isMeshLambertMaterial||r.isMeshBasicMaterial||r.isMeshStandardMaterial||r.isShaderMaterial)&&O.setValue(U,`isOrthographic`,e.isOrthographicCamera===!0),M!==e&&(M=e,w=!0,E=!0)}if(v.needsLights&&(y.state.directionalShadowMap.length>0&&O.setValue(U,`directionalShadowMap`,y.state.directionalShadowMap,Oe),y.state.spotShadowMap.length>0&&O.setValue(U,`spotShadowMap`,y.state.spotShadowMap,Oe),y.state.pointShadowMap.length>0&&O.setValue(U,`pointShadowMap`,y.state.pointShadowMap,Oe)),i.isSkinnedMesh){O.setOptional(U,i,`bindMatrix`),O.setOptional(U,i,`bindMatrixInverse`);let e=i.skeleton;e&&(e.boneTexture===null&&e.computeBoneTexture(),O.setValue(U,`boneTexture`,e.boneTexture,Oe))}i.isBatchedMesh&&(O.setOptional(U,i,`batchingTexture`),O.setValue(U,`batchingTexture`,i._matricesTexture,Oe),O.setOptional(U,i,`batchingIdTexture`),O.setValue(U,`batchingIdTexture`,i._indirectTexture,Oe),O.setOptional(U,i,`batchingColorTexture`),i._colorsTexture!==null&&O.setValue(U,`batchingColorTexture`,i._colorsTexture,Oe));let N=n.morphAttributes;if((N.position!==void 0||N.normal!==void 0||N.color!==void 0)&&Be.update(i,n,S),(w||v.receiveShadow!==i.receiveShadow)&&(v.receiveShadow=i.receiveShadow,O.setValue(U,`receiveShadow`,i.receiveShadow)),(r.isMeshStandardMaterial||r.isMeshLambertMaterial||r.isMeshPhongMaterial)&&r.envMap===null&&t.environment!==null&&(k.envMapIntensity.value=t.environmentIntensity),k.dfgLUT!==void 0&&(k.dfgLUT.value=fg()),w){if(O.setValue(U,`toneMappingExposure`,T.toneMappingExposure),v.needsLights&&_t(k,E),a&&r.fog===!0&&Pe.refreshFogUniforms(k,a),Pe.refreshMaterialUniforms(k,r,oe,V,x.state.transmissionRenderTarget[e.id]),v.needsLights&&v.lightProbeGrid){let e=v.lightProbeGrid;k.probesSH.value=e.texture,k.probesMin.value.copy(e.boundingBox.min),k.probesMax.value.copy(e.boundingBox.max),k.probesResolution.value.copy(e.resolution)}Gm.upload(U,ft(v),k,Oe)}if(r.isShaderMaterial&&r.uniformsNeedUpdate===!0&&(Gm.upload(U,ft(v),k,Oe),r.uniformsNeedUpdate=!1),r.isSpriteMaterial&&O.setValue(U,`center`,i.center),O.setValue(U,`modelViewMatrix`,i.modelViewMatrix),O.setValue(U,`normalMatrix`,i.normalMatrix),O.setValue(U,`modelMatrix`,i.matrixWorld),r.uniformsGroups!==void 0){let e=r.uniformsGroups;for(let t=0,n=e.length;t0&&Oe.useMultisampledRTT(e)===!1?De.get(e).__webglMultisampledFramebuffer:Array.isArray(c)?c[n]:c,N.copy(e.viewport),P.copy(e.scissor),I=e.scissorTest}else N.copy(H).multiplyScalar(oe).floor(),P.copy(le).multiplyScalar(oe).floor(),I=ue;if(n!==0&&(r=yt),W.bindFramebuffer(U.FRAMEBUFFER,r)&&W.drawBuffers(e,r),W.viewport(N),W.scissor(P),W.setScissorTest(I),i){let r=De.get(e.texture);U.framebufferTexture2D(U.FRAMEBUFFER,U.COLOR_ATTACHMENT0,U.TEXTURE_CUBE_MAP_POSITIVE_X+t,r.__webglTexture,n)}else if(a){let r=t;for(let t=0;t1&&U.readBuffer(U.COLOR_ATTACHMENT0+s),!Te.textureFormatReadable(c)){$t(`WebGLRenderer.readRenderTargetPixels: renderTarget is not in RGBA or implementation defined format.`);return}if(!Te.textureTypeReadable(l)){$t(`WebGLRenderer.readRenderTargetPixels: renderTarget is not in UnsignedByteType or implementation defined type.`);return}t>=0&&t<=e.width-r&&n>=0&&n<=e.height-i&&U.readPixels(t,n,r,i,Ue.convert(c),Ue.convert(l),a)}finally{let e=A===null?null:De.get(A).__webglFramebuffer;W.bindFramebuffer(U.FRAMEBUFFER,e)}}},this.readRenderTargetPixelsAsync=async function(e,t,n,r,i,a,o,s=0){if(!(e&&e.isWebGLRenderTarget))throw Error(`THREE.WebGLRenderer.readRenderTargetPixels: renderTarget is not THREE.WebGLRenderTarget.`);let c=De.get(e).__webglFramebuffer;if(e.isWebGLCubeRenderTarget&&o!==void 0&&(c=c[o]),c)if(t>=0&&t<=e.width-r&&n>=0&&n<=e.height-i){W.bindFramebuffer(U.FRAMEBUFFER,c);let o=e.textures[s],l=o.format,u=o.type;if(e.textures.length>1&&U.readBuffer(U.COLOR_ATTACHMENT0+s),!Te.textureFormatReadable(l))throw Error(`THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in RGBA or implementation defined format.`);if(!Te.textureTypeReadable(u))throw Error(`THREE.WebGLRenderer.readRenderTargetPixelsAsync: renderTarget is not in UnsignedByteType or implementation defined type.`);let d=U.createBuffer();U.bindBuffer(U.PIXEL_PACK_BUFFER,d),U.bufferData(U.PIXEL_PACK_BUFFER,a.byteLength,U.STREAM_READ),U.readPixels(t,n,r,i,Ue.convert(l),Ue.convert(u),0);let f=A===null?null:De.get(A).__webglFramebuffer;W.bindFramebuffer(U.FRAMEBUFFER,f);let p=U.fenceSync(U.SYNC_GPU_COMMANDS_COMPLETE,0);return U.flush(),await tn(U,p,4),U.bindBuffer(U.PIXEL_PACK_BUFFER,d),U.getBufferSubData(U.PIXEL_PACK_BUFFER,0,a),U.deleteBuffer(d),U.deleteSync(p),a}else throw Error(`THREE.WebGLRenderer.readRenderTargetPixelsAsync: requested read bounds are out of range.`)},this.copyFramebufferToTexture=function(e,t=null,n=0){let r=2**-n,i=Math.floor(e.image.width*r),a=Math.floor(e.image.height*r),o=t===null?0:t.x,s=t===null?0:t.y;Oe.setTexture2D(e,0),U.copyTexSubImage2D(U.TEXTURE_2D,n,0,0,o,s,i,a),W.unbindTexture()};let bt=U.createFramebuffer(),xt=U.createFramebuffer();this.copyTextureToTexture=function(e,t,n=null,r=null,i=0,a=0){let o,s,c,l,u,d,f,p,m,h=e.isCompressedTexture?e.mipmaps[a]:e.image;if(n!==null)o=n.max.x-n.min.x,s=n.max.y-n.min.y,c=n.isBox3?n.max.z-n.min.z:1,l=n.min.x,u=n.min.y,d=n.isBox3?n.min.z:0;else{let t=2**-i;o=Math.floor(h.width*t),s=Math.floor(h.height*t),c=e.isDataArrayTexture?h.depth:e.isData3DTexture?Math.floor(h.depth*t):1,l=0,u=0,d=0}r===null?(f=0,p=0,m=0):(f=r.x,p=r.y,m=r.z);let g=Ue.convert(t.format),_=Ue.convert(t.type),v;t.isData3DTexture?(Oe.setTexture3D(t,0),v=U.TEXTURE_3D):t.isDataArrayTexture||t.isCompressedArrayTexture?(Oe.setTexture2DArray(t,0),v=U.TEXTURE_2D_ARRAY):(Oe.setTexture2D(t,0),v=U.TEXTURE_2D),W.activeTexture(U.TEXTURE0),W.pixelStorei(U.UNPACK_FLIP_Y_WEBGL,t.flipY),W.pixelStorei(U.UNPACK_PREMULTIPLY_ALPHA_WEBGL,t.premultiplyAlpha),W.pixelStorei(U.UNPACK_ALIGNMENT,t.unpackAlignment);let y=W.getParameter(U.UNPACK_ROW_LENGTH),b=W.getParameter(U.UNPACK_IMAGE_HEIGHT),x=W.getParameter(U.UNPACK_SKIP_PIXELS),S=W.getParameter(U.UNPACK_SKIP_ROWS),C=W.getParameter(U.UNPACK_SKIP_IMAGES);W.pixelStorei(U.UNPACK_ROW_LENGTH,h.width),W.pixelStorei(U.UNPACK_IMAGE_HEIGHT,h.height),W.pixelStorei(U.UNPACK_SKIP_PIXELS,l),W.pixelStorei(U.UNPACK_SKIP_ROWS,u),W.pixelStorei(U.UNPACK_SKIP_IMAGES,d);let w=e.isDataArrayTexture||e.isData3DTexture,T=t.isDataArrayTexture||t.isData3DTexture;if(e.isDepthTexture){let n=De.get(e),r=De.get(t),h=De.get(n.__renderTarget),g=De.get(r.__renderTarget);W.bindFramebuffer(U.READ_FRAMEBUFFER,h.__webglFramebuffer),W.bindFramebuffer(U.DRAW_FRAMEBUFFER,g.__webglFramebuffer);for(let n=0;n{var t=d();function n(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var r=typeof Object.is==`function`?Object.is:n,i=t.useState,a=t.useEffect,o=t.useLayoutEffect,s=t.useDebugValue;function c(e,t){var n=t(),r=i({inst:{value:n,getSnapshot:t}}),c=r[0].inst,u=r[1];return o(function(){c.value=n,c.getSnapshot=t,l(c)&&u({inst:c})},[e,n,t]),a(function(){return l(c)&&u({inst:c}),e(function(){l(c)&&u({inst:c})})},[e]),s(n),n}function l(e){var t=e.getSnapshot;e=e.value;try{var n=t();return!r(e,n)}catch{return!0}}function u(e,t){return t()}var f=typeof window>`u`||window.document===void 0||window.document.createElement===void 0?u:c;e.useSyncExternalStore=t.useSyncExternalStore===void 0?f:t.useSyncExternalStore})),hg=o(((e,t)=>{t.exports=mg()})),gg=o((e=>{var t=d(),n=hg();function r(e,t){return e===t&&(e!==0||1/e==1/t)||e!==e&&t!==t}var i=typeof Object.is==`function`?Object.is:r,a=n.useSyncExternalStore,o=t.useRef,s=t.useEffect,c=t.useMemo,l=t.useDebugValue;e.useSyncExternalStoreWithSelector=function(e,t,n,r,u){var d=o(null);if(d.current===null){var f={hasValue:!1,value:null};d.current=f}else f=d.current;d=c(function(){function e(e){if(!a){if(a=!0,o=e,e=r(e),u!==void 0&&f.hasValue){var t=f.value;if(u(t,e))return s=t}return s=e}if(t=s,i(o,e))return t;var n=r(e);return u!==void 0&&u(t,n)?(o=e,t):(o=e,s=n)}var a=!1,o,s,c=n===void 0?null:n;return[function(){return e(t())},c===null?void 0:function(){return e(c())}]},[t,n,r,u]);var p=a(e,d[0],d[1]);return s(function(){f.hasValue=!0,f.value=p},[p]),l(p),p}})),_g=l(o(((e,t)=>{t.exports=gg()}))(),1),vg=e=>{let t,n=new Set,r=(e,r)=>{let i=typeof e==`function`?e(t):e;if(!Object.is(i,t)){let e=t;t=r??(typeof i!=`object`||!i)?i:Object.assign({},t,i),n.forEach(n=>n(t,e))}},i=()=>t,a={setState:r,getState:i,getInitialState:()=>o,subscribe:e=>(n.add(e),()=>n.delete(e))},o=t=e(r,i,a);return a},yg=(e=>e?vg(e):vg),{useSyncExternalStoreWithSelector:bg}=_g.default,xg=e=>e;function Sg(e,t=xg,n){let r=bg(e.subscribe,e.getState,e.getInitialState,t,n);return v.useDebugValue(r),r}var Cg=(e,t)=>{let n=yg(e),r=(e,r=t)=>Sg(n,e,r);return Object.assign(r,n),r},wg=((e,t)=>e?Cg(e,t):Cg),Tg=e=>typeof e==`object`&&typeof e.then==`function`,Eg=[];function Dg(e,t,n=(e,t)=>e===t){if(e===t)return!0;if(!e||!t)return!1;let r=e.length;if(t.length!==r)return!1;for(let i=0;i0&&(e.timeout&&clearTimeout(e.timeout),e.timeout=setTimeout(e.remove,r.lifespan)),e.response;if(!n)throw e.promise}let i={keys:t,equal:r.equal,remove:()=>{let e=Eg.indexOf(i);e!==-1&&Eg.splice(e,1)},promise:(Tg(e)?e:e(...t)).then(e=>{i.response=e,r.lifespan&&r.lifespan>0&&(i.timeout=setTimeout(i.remove,r.lifespan))}).catch(e=>i.error=e)};if(Eg.push(i),!n)throw i.promise}var kg=(e,t,n)=>Og(e,t,!1,n),Ag=(e,t,n)=>void Og(e,t,!0,n),jg=e=>{if(e===void 0||e.length===0)Eg.splice(0,Eg.length);else{let t=Eg.find(t=>Dg(e,t.keys,t.equal));t&&t.remove()}},Mg=o((e=>{var t=Symbol.for(`react.transitional.element`),n=Symbol.for(`react.fragment`);function r(e,n,r){var i=null;if(r!==void 0&&(i=``+r),n.key!==void 0&&(i=``+n.key),`key`in n)for(var a in r={},n)a!==`key`&&(r[a]=n[a]);else r=n;return n=r.ref,{$$typeof:t,type:e,key:i,ref:n===void 0?null:n,props:r}}e.Fragment=n,e.jsx=r,e.jsxs=r})),Ng=o(((e,t)=>{t.exports=Mg()})),Pg=l(p()),Z=Ng();typeof window<`u`&&(window.document?.createElement||window.navigator?.product===`ReactNative`)?v.useLayoutEffect:v.useEffect;function Fg(e,t,n){if(!e)return;if(n(e)===!0)return e;let r=t?e.return:e.child;for(;r;){let e=Fg(r,t,n);if(e)return e;r=t?null:r.sibling}}function Ig(e){try{return Object.defineProperties(e,{_currentRenderer:{get(){return null},set(){}},_currentRenderer2:{get(){return null},set(){}}})}catch{return e}}var Lg=Ig(v.createContext(null)),Rg=class extends v.Component{render(){return v.createElement(Lg.Provider,{value:this._reactInternals},this.props.children)}};function zg(){let e=v.useContext(Lg);if(e===null)throw Error(`its-fine: useFiber must be called within a !`);let t=v.useId();return v.useMemo(()=>{for(let n of[e,e?.alternate]){if(!n)continue;let e=Fg(n,!1,e=>{let n=e.memoizedState;for(;n;){if(n.memoizedState===t)return!0;n=n.next}});if(e)return e}},[e,t])}var Bg=Symbol.for(`react.context`),Vg=e=>typeof e==`object`&&!!e&&`$$typeof`in e&&e.$$typeof===Bg;function Hg(){let e=zg(),[t]=v.useState(()=>new Map);t.clear();let n=e;for(;n;){let e=n.type;Vg(e)&&e!==Lg&&!t.has(e)&&t.set(e,v.use(Ig(e))),n=n.return}return t}function Ug(){let e=Hg();return v.useMemo(()=>Array.from(e.keys()).reduce((t,n)=>r=>v.createElement(t,null,v.createElement(n.Provider,{...r,value:e.get(n)})),e=>v.createElement(Rg,{...e})),[e])}function Wg(e){let t=e.root;for(;t.getState().previousRoot;)t=t.getState().previousRoot;return t}var Gg=e=>e&&e.isOrthographicCamera,Kg=e=>e&&e.hasOwnProperty(`current`),qg=e=>e!=null&&(typeof e==`string`||typeof e==`number`||e.isColor),Jg=((e,t)=>typeof window<`u`&&((e=window.document)?.createElement||(t=window.navigator)?.product===`ReactNative`))()?v.useLayoutEffect:v.useEffect;function Yg(e){let t=v.useRef(e);return Jg(()=>void(t.current=e),[e]),t}function Xg(){let e=zg(),t=Ug();return v.useMemo(()=>({children:n})=>(0,Z.jsx)(Fg(e,!0,e=>e.type===v.StrictMode)?v.StrictMode:v.Fragment,{children:(0,Z.jsx)(t,{children:n})}),[e,t])}function Zg({set:e}){return Jg(()=>(e(new Promise(()=>null)),()=>e(!1)),[e]),null}var Qg=(e=>(e=class extends v.Component{constructor(...e){super(...e),this.state={error:!1}}componentDidCatch(e){this.props.set(e)}render(){return this.state.error?null:this.props.children}},e.getDerivedStateFromError=()=>({error:!0}),e))();function $g(e){let t=typeof window<`u`?window.devicePixelRatio??2:1;return Array.isArray(e)?Math.min(Math.max(e[0],t),e[1]):e}function e_(e){return e.__r3f?.root.getState()}var t_={obj:e=>e===Object(e)&&!t_.arr(e)&&typeof e!=`function`,fun:e=>typeof e==`function`,str:e=>typeof e==`string`,num:e=>typeof e==`number`,boo:e=>typeof e==`boolean`,und:e=>e===void 0,nul:e=>e===null,arr:e=>Array.isArray(e),equ(e,t,{arrays:n=`shallow`,objects:r=`reference`,strict:i=!0}={}){if(typeof e!=typeof t||!!e!=!!t)return!1;if(t_.str(e)||t_.num(e)||t_.boo(e))return e===t;let a=t_.obj(e);if(a&&r===`reference`)return e===t;let o=t_.arr(e);if(o&&n===`reference`)return e===t;if((o||a)&&e===t)return!0;let s;for(s in e)if(!(s in t))return!1;if(a&&n===`shallow`&&r===`shallow`){for(s in i?t:e)if(!t_.equ(e[s],t[s],{strict:i,objects:`reference`}))return!1}else for(s in i?t:e)if(e[s]!==t[s])return!1;if(t_.und(s)){if(o&&e.length===0&&t.length===0||a&&Object.keys(e).length===0&&Object.keys(t).length===0)return!0;if(e!==t)return!1}return!0}};function n_(e){let t={nodes:{},materials:{},meshes:{}};return e&&e.traverse(e=>{e.name&&(t.nodes[e.name]=e),e.material&&!t.materials[e.material.name]&&(t.materials[e.material.name]=e.material),e.isMesh&&!t.meshes[e.name]&&(t.meshes[e.name]=e)}),t}function r_(e){e.type!==`Scene`&&(e.dispose==null||e.dispose());for(let t in e){let n=e[t];n?.type!==`Scene`&&(n==null||n.dispose==null||n.dispose())}}var i_=[`children`,`key`,`ref`];function a_(e){let t={};for(let n in e)i_.includes(n)||(t[n]=e[n]);return t}function o_(e,t,n,r){let i=e,a=i?.__r3f;return a||(a={root:t,type:n,parent:null,children:[],props:a_(r),object:i,eventCount:0,handlers:{},isHidden:!1},i&&(i.__r3f=a)),a}function s_(e,t){if(!t.includes(`-`)||t in e)return{root:e,key:t,target:e[t]};let n=e,r=t.split(`-`);for(let i of r){if(typeof n!=`object`||!n){if(n!==void 0){let e=r.slice(r.indexOf(i)).join(`-`);return{root:n,key:e,target:void 0}}return{root:e,key:t,target:void 0}}t=i,e=n,n=n[t]}return{root:e,key:t,target:n}}var c_=/-\d+$/;function l_(e,t){if(t_.str(t.props.attach)){if(c_.test(t.props.attach)){let n=t.props.attach.replace(c_,``),{root:r,key:i}=s_(e.object,n);Array.isArray(r[i])||(r[i]=[])}let{root:n,key:r}=s_(e.object,t.props.attach);t.previousAttach=n[r],n[r]=t.object}else t_.fun(t.props.attach)&&(t.previousAttach=t.props.attach(e.object,t.object))}function u_(e,t){if(t_.str(t.props.attach)){let{root:n,key:r}=s_(e.object,t.props.attach),i=t.previousAttach;i===void 0?delete n[r]:n[r]=i}else t.previousAttach==null||t.previousAttach(e.object,t.object);delete t.previousAttach}var d_=[...i_,`args`,`dispose`,`attach`,`object`,`onUpdate`,`dispose`],f_=new Map;function p_(e){let t=f_.get(e.constructor);try{t||(t=new e.constructor,f_.set(e.constructor,t))}catch{}return t}function m_(e,t){let n={};for(let r in t)if(!d_.includes(r)&&!t_.equ(t[r],e.props[r])){n[r]=t[r];for(let e in t)e.startsWith(`${r}-`)&&(n[e]=t[e])}for(let r in e.props){if(d_.includes(r)||t.hasOwnProperty(r))continue;let{root:i,key:a}=s_(e.object,r);if(i.constructor&&i.constructor.length===0){let e=p_(i);t_.und(e)||(n[a]=e[a])}else n[a]=0}return n}var h_=[`map`,`emissiveMap`,`sheenColorMap`,`specularColorMap`,`envMap`],g_=/^on(Pointer|Click|DoubleClick|ContextMenu|Wheel)/;function __(e,t){var n;let r=e.__r3f,i=r&&Wg(r).getState(),a=r?.eventCount;for(let n in t){let a=t[n];if(d_.includes(n))continue;if(r&&g_.test(n)){typeof a==`function`?r.handlers[n]=a:delete r.handlers[n],r.eventCount=Object.keys(r.handlers).length;continue}if(a===void 0)continue;let{root:s,key:c,target:l}=s_(e,n);if(l===void 0&&(typeof s!=`object`||!s))throw Error(`R3F: Cannot set "${n}". Ensure it is an object before setting "${c}".`);if(l instanceof mr&&a instanceof mr)l.mask=a.mask;else if(l instanceof Y&&qg(a))l.set(a);else if(typeof l==`object`&&l&&typeof l.set==`function`&&typeof l.copy==`function`&&a!=null&&a.constructor&&l.constructor===a.constructor)l.copy(a);else if(typeof l==`object`&&l&&typeof l.set==`function`&&Array.isArray(a))typeof l.fromArray==`function`?l.fromArray(a):l.set(...a);else if(typeof l==`object`&&l&&typeof l.set==`function`&&typeof a==`number`)typeof l.setScalar==`function`?l.setScalar(a):l.set(a);else if(s instanceof yl&&c===`uniforms`&&t_.obj(a)){t_.obj(s.uniforms)||(s.uniforms={});let e=s.uniforms,t=a;for(let n in t){let r=t[n],i=e[n];i?Object.assign(i,r):e[n]={...r}}}else{var o;s[c]=a,i&&!i.linear&&h_.includes(c)&&(o=s[c])!=null&&o.isTexture&&s[c].format===1023&&s[c].type===1009&&(s[c].colorSpace=mt)}}if(r!=null&&r.parent&&i!=null&&i.internal&&(n=r.object)!=null&&n.isObject3D&&a!==r.eventCount){let e=r.object,t=i.internal.interaction.indexOf(e);t>-1&&i.internal.interaction.splice(t,1),r.eventCount&&e.raycast!==null&&i.internal.interaction.push(e)}return r&&r.props.attach===void 0&&(r.object.isBufferGeometry?r.props.attach=`geometry`:r.object.isMaterial&&(r.props.attach=`material`)),r&&v_(r),e}function v_(e){var t;if(!e.parent)return;e.props.onUpdate==null||e.props.onUpdate(e.object);let n=(t=e.root)==null||t.getState==null?void 0:t.getState();n&&n.internal.frames===0&&n.invalidate()}function y_(e,t){e.manual||(Gg(e)?(e.left=t.width/-2,e.right=t.width/2,e.top=t.height/2,e.bottom=t.height/-2):e.aspect=t.width/t.height,e.updateProjectionMatrix())}var b_=e=>e?.isObject3D;function x_(e){return(e.eventObject||e.object).uuid+`/`+e.index+e.instanceId}function S_(e,t,n,r){let i=n.get(t);i&&(n.delete(t),n.size===0&&(e.delete(r),i.target.releasePointerCapture(r)))}function C_(e,t,n){let{internal:r}=e.getState();for(let e=0;e{if(e.eventObject===t||e.object===t){r.hovered.delete(i);let a={...e,eventObject:e.eventObject===t?n:e.eventObject,object:e.object===t?n:e.object};r.hovered.set(x_(a),a)}}),r.capturedMap.forEach(e=>{let r=e.get(t);r&&(e.delete(t),e.set(n,r))})}function w_(e,t){let{internal:n}=e.getState();n.interaction=n.interaction.filter(e=>e!==t),n.initialHits=n.initialHits.filter(e=>e!==t),n.hovered.forEach((e,r)=>{(e.eventObject===t||e.object===t)&&n.hovered.delete(r)}),n.capturedMap.forEach((e,r)=>{S_(n.capturedMap,t,e,r)})}function T_(e){function t(t){let{internal:n}=e.getState(),r=t.offsetX-n.initialClick[0],i=t.offsetY-n.initialClick[1];return Math.round(Math.sqrt(r*r+i*i))}function n(e){return e.filter(e=>[`Move`,`Over`,`Enter`,`Out`,`Leave`].some(t=>e.__r3f?.handlers[`onPointer`+t]))}function r(t,n){let r=e.getState(),i=new Set,a=[],o=n?n(r.internal.interaction):r.internal.interaction;for(let e=0;e{let n=e_(e.object),r=e_(t.object);return!n||!r?e.distance-t.distance:r.events.priority-n.events.priority||e.distance-t.distance}).filter(e=>{let t=x_(e);return i.has(t)?!1:(i.add(t),!0)});r.events.filter&&(c=r.events.filter(c,r));for(let e of c){let t=e.object;for(;t;){var l;(l=t.__r3f)!=null&&l.eventCount&&a.push({...e,eventObject:t}),t=t.parent}}if(`pointerId`in t&&r.internal.capturedMap.has(t.pointerId))for(let e of r.internal.capturedMap.get(t.pointerId).values())i.has(x_(e.intersection))||a.push(e.intersection);return a}function i(e,t,n,r){if(e.length){let i={stopped:!1};for(let o of e){let s=e_(o.object);if(s||o.object.traverseAncestors(e=>{let t=e_(e);if(t)return s=t,!1}),s){let{raycaster:c,pointer:l,camera:u,internal:d}=s,f=new q(l.x,l.y,0).unproject(u),p=e=>d.capturedMap.get(e)?.has(o.eventObject)??!1,m=e=>{let n={intersection:o,target:t.target};d.capturedMap.has(e)?d.capturedMap.get(e).set(o.eventObject,n):d.capturedMap.set(e,new Map([[o.eventObject,n]])),t.target.setPointerCapture(e)},h=e=>{let t=d.capturedMap.get(e);t&&S_(d.capturedMap,o.eventObject,t,e)},g={};for(let e in t){let n=t[e];typeof n!=`function`&&(g[e]=n)}let _={...o,...g,pointer:l,intersections:e,stopped:i.stopped,delta:n,unprojectedPoint:f,ray:c.ray,camera:u,stopPropagation(){let n=`pointerId`in t&&d.capturedMap.get(t.pointerId);(!n||n.has(o.eventObject))&&(_.stopped=i.stopped=!0,d.hovered.size&&Array.from(d.hovered.values()).find(e=>e.eventObject===o.eventObject)&&a([...e.slice(0,e.indexOf(o)),o]))},target:{hasPointerCapture:p,setPointerCapture:m,releasePointerCapture:h},currentTarget:{hasPointerCapture:p,setPointerCapture:m,releasePointerCapture:h},nativeEvent:t};if(r(_),i.stopped===!0)break}}}return e}function a(t){let{internal:n}=e.getState();for(let e of n.hovered.values())if(!t.length||!t.find(t=>t.object===e.object&&t.index===e.index&&t.instanceId===e.instanceId)){let r=e.eventObject.__r3f;if(n.hovered.delete(x_(e)),r!=null&&r.eventCount){let n=r.handlers,i={...e,intersections:t};n.onPointerOut==null||n.onPointerOut(i),n.onPointerLeave==null||n.onPointerLeave(i)}}}function o(e,t){for(let n=0;na([]);case`onLostPointerCapture`:return t=>{let{internal:n}=e.getState();`pointerId`in t&&n.capturedMap.has(t.pointerId)&&requestAnimationFrame(()=>{n.capturedMap.has(t.pointerId)&&(n.capturedMap.delete(t.pointerId),a([]))})}}return function(c){let{onPointerMissed:l,internal:u}=e.getState();u.lastEvent.current=c;let d=s===`onPointerMove`,f=s===`onClick`||s===`onContextMenu`||s===`onDoubleClick`,p=r(c,d?n:void 0),m=f?t(c):0;s===`onPointerDown`&&(u.initialClick=[c.offsetX,c.offsetY],u.initialHits=p.map(e=>e.eventObject)),f&&!p.length&&m<=2&&(o(c,u.interaction),l&&l(c)),d&&a(p);function h(e){let t=e.eventObject,n=t.__r3f;if(!(n!=null&&n.eventCount))return;let r=n.handlers;if(d){if(r.onPointerOver||r.onPointerEnter||r.onPointerOut||r.onPointerLeave){let t=x_(e),n=u.hovered.get(t);n?n.stopped&&e.stopPropagation():(u.hovered.set(t,e),r.onPointerOver==null||r.onPointerOver(e),r.onPointerEnter==null||r.onPointerEnter(e))}r.onPointerMove==null||r.onPointerMove(e)}else{let n=r[s];n?(!f||u.initialHits.includes(t))&&(o(c,u.interaction.filter(e=>!u.initialHits.includes(e))),n(e)):f&&u.initialHits.includes(t)&&o(c,u.interaction.filter(e=>!u.initialHits.includes(e)))}}i(p,c,m,h)}}return{handlePointer:s}}var E_=e=>!!(e!=null&&e.render),D_=v.createContext(null),O_=(e,t)=>{let n=wg((n,r)=>{let i=new q,a=new q,o=new q;function s(e=r().camera,t=a,n=r().size){let{width:s,height:c,top:l,left:u}=n,d=s/c;t.isVector3?o.copy(t):o.set(...t);let f=e.getWorldPosition(i).distanceTo(o);if(Gg(e))return{width:s/e.zoom,height:c/e.zoom,top:l,left:u,factor:1,distance:f,aspect:d};{let t=e.fov*Math.PI/180,n=2*Math.tan(t/2)*f,r=s/c*n;return{width:r,height:n,top:l,left:u,factor:s/r,distance:f,aspect:d}}}let c,l=e=>n(t=>({performance:{...t.performance,current:e}})),u=new K;return{set:n,get:r,gl:null,camera:null,raycaster:null,events:{priority:1,enabled:!0,connected:!1},scene:null,xr:null,invalidate:(t=1)=>e(r(),t),advance:(e,n)=>t(e,n,r()),legacy:!1,linear:!1,flat:!1,controls:null,clock:new Xd,pointer:u,mouse:u,frameloop:`always`,onPointerMissed:void 0,performance:{current:1,min:.5,max:1,debounce:200,regress:()=>{let e=r();c&&clearTimeout(c),e.performance.current!==e.performance.min&&l(e.performance.min),c=setTimeout(()=>l(r().performance.max),e.performance.debounce)}},size:{width:0,height:0,top:0,left:0},viewport:{initialDpr:0,dpr:0,width:0,height:0,top:0,left:0,aspect:0,distance:0,factor:0,getCurrentViewport:s},setEvents:e=>n(t=>({...t,events:{...t.events,...e}})),setSize:(e,t,i=0,o=0)=>{let c=r().camera,l={width:e,height:t,top:i,left:o};n(e=>({size:l,viewport:{...e.viewport,...s(c,a,l)}}))},setDpr:e=>n(t=>{let n=$g(e);return{viewport:{...t.viewport,dpr:n,initialDpr:t.viewport.initialDpr||n}}}),setFrameloop:(e=`always`)=>{let t=r().clock;t.stop(),t.elapsedTime=0,e!==`never`&&(t.start(),t.elapsedTime=0),n(()=>({frameloop:e}))},previousRoot:void 0,internal:{interaction:[],hovered:new Map,subscribers:[],initialClick:[0,0],initialHits:[],capturedMap:new Map,lastEvent:v.createRef(),active:!1,frames:0,priority:0,subscribe:(e,t,n)=>{let i=r().internal;return i.priority+=+(t>0),i.subscribers.push({ref:e,priority:t,store:n}),i.subscribers=i.subscribers.sort((e,t)=>e.priority-t.priority),()=>{let n=r().internal;n!=null&&n.subscribers&&(n.priority-=+(t>0),n.subscribers=n.subscribers.filter(t=>t.ref!==e))}}}}}),r=n.getState(),i=r.size,a=r.viewport.dpr,o=r.camera;return n.subscribe(()=>{let{camera:e,size:t,viewport:r,gl:s,set:c}=n.getState();if(t.width!==i.width||t.height!==i.height||r.dpr!==a){i=t,a=r.dpr,y_(e,t),r.dpr>0&&s.setPixelRatio(r.dpr);let n=typeof HTMLCanvasElement<`u`&&s.domElement instanceof HTMLCanvasElement;s.setSize(t.width,t.height,n)}e!==o&&(o=e,c(t=>({viewport:{...t.viewport,...t.viewport.getCurrentViewport(e)}})))}),n.subscribe(t=>e(t)),n};function k_(){let e=v.useContext(D_);if(!e)throw Error(`R3F: Hooks can only be used within the Canvas component!`);return e}function A_(e=e=>e,t){return k_()(e,t)}function j_(e,t=0){let n=k_(),r=n.getState().internal.subscribe,i=Yg(e);return Jg(()=>r(i,t,n),[t,r,n]),null}var M_=new WeakMap,N_=e=>typeof e==`function`&&e?.prototype?.constructor===e;function P_(e,t){return function(n,...r){let i;return N_(n)?(i=M_.get(n),i||(i=new n,M_.set(n,i))):i=n,e&&e(i),Promise.all(r.map(e=>new Promise((n,r)=>i.load(e,e=>{b_(e?.scene)&&Object.assign(e,n_(e.scene)),n(e)},t,t=>r(Error(`Could not load ${e}: ${t?.message}`))))))}}function F_(e,t,n,r){let i=Array.isArray(t)?t:[t],a=kg(P_(n,r),[e,...i],{equal:t_.equ});return Array.isArray(t)?a:a[0]}F_.preload=function(e,t,n){let r=Array.isArray(t)?t:[t];return Ag(P_(n),[e,...r])},F_.clear=function(e,t){return jg([e,...Array.isArray(t)?t:[t]])};var I_=1,L_=8,R_=32,z_=2,B_={name:`@react-three/fiber`,version:`9.6.1`,description:`A React renderer for Threejs`,keywords:[`react`,`renderer`,`fiber`,`three`,`threejs`],author:`Paul Henschel (https://github.com/drcmda)`,license:`MIT`,maintainers:[`Josh Ellis (https://github.com/joshuaellis)`,`Cody Bennett (https://github.com/codyjasonbennett)`,`Kris Baumgarter (https://github.com/krispya)`],bugs:{url:`https://github.com/pmndrs/react-three-fiber/issues`},homepage:`https://github.com/pmndrs/react-three-fiber#readme`,repository:{type:`git`,url:`git+https://github.com/pmndrs/react-three-fiber.git`},collective:{type:`opencollective`,url:`https://opencollective.com/react-three-fiber`},main:`dist/react-three-fiber.cjs.js`,module:`dist/react-three-fiber.esm.js`,types:`dist/react-three-fiber.cjs.d.ts`,"react-native":`native/dist/react-three-fiber-native.cjs.js`,sideEffects:!1,preconstruct:{entrypoints:[`index.tsx`,`native.tsx`]},scripts:{prebuild:`cp ../../readme.md readme.md`},devDependencies:{"@types/react-reconciler":`^0.32.3`,"react-reconciler":`^0.33.0`},dependencies:{"@babel/runtime":`^7.17.8`,"@types/webxr":`*`,"base64-js":`^1.5.1`,buffer:`^6.0.3`,"its-fine":`^2.0.0`,"react-use-measure":`^2.1.7`,scheduler:`^0.27.0`,"suspend-react":`^0.1.3`,"use-sync-external-store":`^1.4.0`,zustand:`^5.0.3`},peerDependencies:{expo:`>=43.0`,"expo-asset":`>=8.4`,"expo-file-system":`>=11.0`,"expo-gl":`>=11.0`,react:`>=19 <19.3`,"react-dom":`>=19 <19.3`,"react-native":`>=0.78`,three:`>=0.156`},peerDependenciesMeta:{"react-dom":{optional:!0},"react-native":{optional:!0},expo:{optional:!0},"expo-asset":{optional:!0},"expo-file-system":{optional:!0},"expo-gl":{optional:!0}}};function V_(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,`default`)?e.default:e}var H_={exports:{}},U_={exports:{}};U_.exports;var W_;function G_(){return W_||(W_=1,function(e){e.exports=function(e){function t(e,t,n,r){return new aa(e,t,n,r)}function n(){}function r(e){var t=`https://react.dev/errors/`+e;if(1lc||(e.current=cc[lc],cc[lc]=null,lc--)}function p(e,t){lc++,cc[lc]=e.current,e.current=t}function m(e){return e>>>=0,e===0?32:31-(fc(e)/pc|0)|0}function h(e){var t=e&42;if(t!==0)return t;switch(e&-e){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:return 64;case 128:return 128;case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:return e&261888;case 262144:case 524288:case 1048576:case 2097152:return e&3932160;case 4194304:case 8388608:case 16777216:case 33554432:return e&62914560;case 67108864:return 67108864;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 0;default:return e}}function g(e,t,n){var r=e.pendingLanes;if(r===0)return 0;var i=0,a=e.suspendedLanes,o=e.pingedLanes;e=e.warmLanes;var s=r&134217727;return s===0?(s=r&~a,s===0?o===0?n||(n=r&~e,n!==0&&(i=h(n))):i=h(o):i=h(s)):(r=s&~a,r===0?(o&=s,o===0?n||(n=s&~e,n!==0&&(i=h(n))):i=h(o)):i=h(r)),i===0?0:t!==0&&t!==i&&(t&a)===0&&(a=i&-i,n=t&-t,a>=n||a===32&&n&4194048)?t:i}function _(e,t){return(e.pendingLanes&~(e.suspendedLanes&~e.pingedLanes)&t)===0}function y(e,t){switch(e){case 1:case 2:case 4:case 8:case 64:return t+250;case 16:case 32:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return t+5e3;case 4194304:case 8388608:case 16777216:case 33554432:return-1;case 67108864:case 134217728:case 268435456:case 536870912:case 1073741824:return-1;default:return-1}}function b(){var e=gc;return gc<<=1,!(gc&62914560)&&(gc=4194304),e}function x(e){for(var t=[],n=0;31>n;n++)t.push(e);return t}function S(e,t){e.pendingLanes|=t,t!==268435456&&(e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0)}function C(e,t,n,r,i,a){var o=e.pendingLanes;e.pendingLanes=n,e.suspendedLanes=0,e.pingedLanes=0,e.warmLanes=0,e.expiredLanes&=n,e.entangledLanes&=n,e.errorRecoveryDisabledLanes&=n,e.shellSuspendCounter=0;var s=e.entanglements,c=e.expirationTimes,l=e.hiddenUpdates;for(n=o&~n;0)`:-1i||c[r]!==l[i]){var u=` -`+c[r].replace(` at new `,` at `);return e.displayName&&u.includes(``)&&(u=u.replace(``,e.displayName)),u}while(1<=r&&0<=i);break}}}finally{Fc=!1,Error.prepareStackTrace=n}return(n=e?e.displayName||e.name:``)?j(n):``}function N(e,t){switch(e.tag){case 26:case 27:case 5:return j(e.type);case 16:return j(`Lazy`);case 13:return e.child!==t&&t!==null?j(`Suspense Fallback`):j(`Suspense`);case 19:return j(`SuspenseList`);case 0:case 15:return M(e.type,!1);case 11:return M(e.type.render,!1);case 1:return M(e.type,!0);case 31:return j(`Activity`);default:return``}}function P(e){try{var t=``,n=null;do t+=N(e,n),n=e,e=e.return;while(e);return t}catch(e){return` -Error generating stack: `+e.message+` -`+e.stack}}function F(e,t){if(typeof e==`object`&&e){var n=Ic.get(e);return n===void 0?(t={value:e,source:t,stack:P(t)},Ic.set(e,t),t):n}return{value:e,source:t,stack:P(t)}}function I(e,t){Lc[Rc++]=Bc,Lc[Rc++]=zc,zc=e,Bc=t}function L(e,t,n){Vc[Hc++]=Wc,Vc[Hc++]=Gc,Vc[Hc++]=Uc,Uc=e;var r=Wc;e=Gc;var i=32-dc(r)-1;r&=~(1<>=o,i-=o,Wc=1<<32-dc(t)+i|n<f?(p=d,d=null):p=d.sibling;var _=h(t,d,o[f],c);if(_===null){d===null&&(d=p);break}e&&d&&_.alternate===null&&n(t,d),r=s(_,r,f),u===null?l=_:u.sibling=_,u=_,d=p}if(f===o.length)return i(t,d),Qc&&I(t,f),l;if(d===null){for(;fp?(_=f,f=null):_=f.sibling;var y=h(t,f,v.value,l);if(y===null){f===null&&(f=_);break}e&&f&&y.alternate===null&&n(t,f),o=s(y,o,p),d===null?u=y:d.sibling=y,d=y,f=_}if(v.done)return i(t,f),Qc&&I(t,p),u;if(f===null){for(;!v.done;p++,v=c.next())v=m(t,v.value,l),v!==null&&(o=s(v,o,p),d===null?u=v:d.sibling=v,d=v);return Qc&&I(t,p),u}for(f=a(f);!v.done;p++,v=c.next())v=g(f,t,p,v.value,l),v!==null&&(e&&v.alternate!==null&&f.delete(v.key===null?p:v.key),o=s(v,o,p),d===null?u=v:d.sibling=v,d=v);return e&&f.forEach(function(e){return n(t,e)}),Qc&&I(t,p),u}function y(e,t,a,s){if(typeof a==`object`&&a&&a.type===Oa&&a.key===null&&(a=a.props.children),typeof a==`object`&&a){switch(a.$$typeof){case Ea:e:{for(var u=a.key;t!==null;){if(t.key===u){if(u=a.type,u===Oa){if(t.tag===7){i(e,t.sibling),s=o(t,a.props.children),s.return=e,e=s;break e}}else if(t.elementType===u||typeof u==`object`&&u&&u.$$typeof===La&&Re(u)===t.type){i(e,t.sibling),s=o(t,a.props),He(s,a),s.return=e,e=s;break e}i(e,t);break}else n(e,t);t=t.sibling}a.type===Oa?(s=ua(a.props.children,e.mode,s,a.key),s.return=e,e=s):(s=la(a.type,a.key,a.props,null,e.mode,s),He(s,a),s.return=e,e=s)}return c(e);case Da:e:{for(u=a.key;t!==null;){if(t.key===u)if(t.tag===4&&t.stateNode.containerInfo===a.containerInfo&&t.stateNode.implementation===a.implementation){i(e,t.sibling),s=o(t,a.children||[]),s.return=e,e=s;break e}else{i(e,t);break}else n(e,t);t=t.sibling}s=pa(a,e.mode,s),s.return=e,e=s}return c(e);case La:return a=Re(a),y(e,t,a,s)}if(Ha(a))return _(e,t,a,s);if(l(a)){if(u=l(a),typeof u!=`function`)throw Error(r(150));return a=u.call(a),v(e,t,a,s)}if(typeof a.then==`function`)return y(e,t,Ve(a),s);if(a.$$typeof===Ma)return y(e,t,_e(e,a),s);Ue(e,a)}return typeof a==`string`&&a!==``||typeof a==`number`||typeof a==`bigint`?(a=``+a,t!==null&&t.tag===6?(i(e,t.sibling),s=o(t,a),s.return=e,e=s):(i(e,t),s=da(a,e.mode,s),s.return=e,e=s),c(e)):i(e,t)}return function(e,n,r,i){try{Dl=0;var a=y(e,n,r,i);return El=null,a}catch(n){if(n===xl||n===Cl)throw n;var o=t(29,n,null,e.mode);return o.lanes=i,o.return=e,o}}}function Ge(){for(var e=jl,t=Ml=jl=0;ta?a:8);var o=Ua.T,s={};Ua.T=s,Dn(e,!1,t,n);try{var c=i(),l=Ua.S;l!==null&&l(s,c),typeof c==`object`&&c&&typeof c.then==`function`?En(e,t,je(c,r),bi(e)):En(e,t,r,bi(e))}catch(n){En(e,t,{then:function(){},status:`rejected`,reason:n},bi())}finally{po(a),o!==null&&s.types!==null&&(o.types=s.types),Ua.T=o}}function yn(e){var t=e.memoizedState;if(t!==null)return t;t={memoizedState:To,baseState:To,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:jt,lastRenderedState:To},next:null};var n={};return t.next={memoizedState:n,baseState:n,baseQueue:null,queue:{pending:null,lanes:0,dispatch:null,lastRenderedReducer:jt,lastRenderedState:n},next:null},e.memoizedState=t,e=e.alternate,e!==null&&(e.memoizedState=t),t}function bn(){return ge(Eo)}function xn(){return Et().memoizedState}function Sn(){return Et().memoizedState}function Cn(e){for(var t=e.return;t!==null;){switch(t.tag){case 24:case 3:var n=bi();e=$e(n);var r=et(t,e,n);r!==null&&(Si(r,t,n),tt(r,t,n)),t={cache:ye()},e.payload=t;return}t=t.return}}function wn(e,t,n){var r=bi();n={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null},On(e)?kn(t,n):(n=qe(e,t,n,r),n!==null&&(Si(n,e,r),An(n,t,r)))}function Tn(e,t,n){En(e,t,n,bi())}function En(e,t,n,r){var i={lane:r,revertLane:0,gesture:null,action:n,hasEagerState:!1,eagerState:null,next:null};if(On(e))kn(t,i);else{var a=e.alternate;if(e.lanes===0&&(a===null||a.lanes===0)&&(a=t.lastRenderedReducer,a!==null))try{var o=t.lastRenderedState,s=a(o,n);if(i.hasEagerState=!0,i.eagerState=s,Ac(s,o))return Ke(e,t,i,0),Cu===null&&Ge(),!1}catch{}if(n=qe(e,t,i,r),n!==null)return Si(n,e,r),An(n,t,r),!0}return!1}function Dn(e,t,n,i){if(i={lane:2,revertLane:Oe(),gesture:null,action:i,hasEagerState:!1,eagerState:null,next:null},On(e)){if(t)throw Error(r(479))}else t=qe(e,n,i,2),t!==null&&Si(t,e,2)}function On(e){var t=e.alternate;return e===Vl||t!==null&&t===Vl}function kn(e,t){Gl=Wl=!0;var n=e.pending;n===null?t.next=t:(t.next=n.next,n.next=t),e.pending=t}function An(e,t,n){if(n&4194048){var r=t.lanes;r&=e.pendingLanes,n|=r,t.lanes=n,T(e,n)}}function jn(e,t,n,r){t=e.memoizedState,n=n(r,t),n=n==null?t:wa({},t,n),e.memoizedState=n,e.lanes===0&&(e.updateQueue.baseState=n)}function K(e,t,n,r,i,a,o){return e=e.stateNode,typeof e.shouldComponentUpdate==`function`?e.shouldComponentUpdate(r,a,o):t.prototype&&t.prototype.isPureReactComponent?!Fe(n,r)||!Fe(i,a):!0}function Mn(e,t,n,r){e=t.state,typeof t.componentWillReceiveProps==`function`&&t.componentWillReceiveProps(n,r),typeof t.UNSAFE_componentWillReceiveProps==`function`&&t.UNSAFE_componentWillReceiveProps(n,r),t.state!==e&&tu.enqueueReplaceState(t,t.state,null)}function q(e,t){var n=t;if(`ref`in t)for(var r in n={},t)r!==`ref`&&(n[r]=t[r]);if(e=e.defaultProps)for(var i in n===t&&(n=wa({},n)),e)n[i]===void 0&&(n[i]=e[i]);return n}function Nn(e,t){try{var n=e.onUncaughtError;n(t.value,{componentStack:t.stack})}catch(e){setTimeout(function(){throw e})}}function Pn(e,t,n){try{var r=e.onCaughtError;r(n.value,{componentStack:n.stack,errorBoundary:t.tag===1?t.stateNode:null})}catch(e){setTimeout(function(){throw e})}}function Fn(e,t,n){return n=$e(n),n.tag=3,n.payload={element:null},n.callback=function(){Nn(e,t)},n}function In(e){return e=$e(e),e.tag=3,e}function Ln(e,t,n,r){var i=n.type.getDerivedStateFromError;if(typeof i==`function`){var a=r.value;e.payload=function(){return i(a)},e.callback=function(){Pn(t,n,r)}}var o=n.stateNode;o!==null&&typeof o.componentDidCatch==`function`&&(e.callback=function(){Pn(t,n,r),typeof i!=`function`&&(Gu===null?Gu=new Set([this]):Gu.add(this));var e=r.stack;this.componentDidCatch(r.value,{componentStack:e===null?``:e})})}function Rn(e,t,n,i,a){if(n.flags|=32768,typeof i==`object`&&i&&typeof i.then==`function`){if(t=n.alternate,t!==null&&pe(t,n,a,!0),n=Ll.current,n!==null){switch(n.tag){case 31:case 13:return Rl===null?Pi():n.alternate===null&&Mu===0&&(Mu=3),n.flags&=-257,n.flags|=65536,n.lanes=a,i===wl?n.flags|=16384:(t=n.updateQueue,t===null?n.updateQueue=new Set([i]):t.add(i),$i(e,i,a)),!1;case 22:return n.flags|=65536,i===wl?n.flags|=16384:(t=n.updateQueue,t===null?(t={transitions:null,markerInstances:null,retryQueue:new Set([i])},n.updateQueue=t):(n=t.retryQueue,n===null?t.retryQueue=new Set([i]):n.add(i)),$i(e,i,a)),!1}throw Error(r(435,n.tag))}return $i(e,i,a),Pi(),!1}if(Qc)return t=Ll.current,t===null?(i!==tl&&(t=Error(r(423),{cause:i}),H(F(t,n))),e=e.current.alternate,e.flags|=65536,a&=-a,e.lanes|=a,i=F(i,n),a=Fn(e.stateNode,i,a),nt(e,a),Mu!==4&&(Mu=2)):(!(t.flags&65536)&&(t.flags|=256),t.flags|=65536,t.lanes=a,i!==tl&&(e=Error(r(422),{cause:i}),H(F(e,n)))),!1;var o=Error(r(520),{cause:i});if(o=F(o,n),Ru===null?Ru=[o]:Ru.push(o),Mu!==4&&(Mu=2),t===null)return!0;i=F(i,n),n=t;do{switch(n.tag){case 3:return n.flags|=65536,e=a&-a,n.lanes|=e,e=Fn(n.stateNode,i,e),nt(n,e),!1;case 1:if(t=n.type,o=n.stateNode,!(n.flags&128)&&(typeof t.getDerivedStateFromError==`function`||o!==null&&typeof o.componentDidCatch==`function`&&(Gu===null||!Gu.has(o))))return n.flags|=65536,a&=-a,n.lanes|=a,a=In(a),Ln(a,e,n,i),nt(n,a),!1}n=n.return}while(n!==null);return!1}function zn(e,t,n,r){t.child=e===null?kl(t,null,n,r):Ol(t,e.child,n,r)}function Bn(e,t,n,r,i){n=n.render;var a=t.ref;if(`ref`in r){var o={};for(var s in r)s!==`ref`&&(o[s]=r[s])}else o=r;return he(t),r=vt(e,t,n,o,a,i),s=St(),e!==null&&!ru?(Ct(e,t,i),cr(e,t,i)):(Qc&&s&&ee(t),t.flags|=1,zn(e,t,r,i),t.child)}function Vn(e,t,n,r,i){if(e===null){var a=n.type;return typeof a==`function`&&!oa(a)&&a.defaultProps===void 0&&n.compare===null?(t.tag=15,t.type=a,Hn(e,t,a,r,i)):(e=la(n.type,null,r,t,t.mode,i),e.ref=t.ref,e.return=t,t.child=e)}if(a=e.child,!lr(e,i)){var o=a.memoizedProps;if(n=n.compare,n=n===null?Fe:n,n(o,r)&&e.ref===t.ref)return cr(e,t,i)}return t.flags|=1,e=sa(a,r),e.ref=t.ref,e.return=t,t.child=e}function Hn(e,t,n,r,i){if(e!==null){var a=e.memoizedProps;if(Fe(a,r)&&e.ref===t.ref)if(ru=!1,t.pendingProps=r=a,lr(e,i))e.flags&131072&&(ru=!0);else return t.lanes=e.lanes,cr(e,t,i)}return Xn(e,t,n,r,i)}function Un(e,t,n,r){var i=r.children,a=e===null?null:e.memoizedState;if(e===null&&t.stateNode===null&&(t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),r.mode===`hidden`){if(t.flags&128){if(a=a===null?n:a.baseLanes|n,e!==null){for(r=t.child=e.child,i=0;r!==null;)i=i|r.lanes|r.childLanes,r=r.sibling;r=i&~a}else r=0,t.child=null;return Gn(e,t,a,n,r)}if(n&536870912)t.memoizedState={baseLanes:0,cachePool:null},e!==null&&Ne(t,a===null?null:a.cachePool),a===null?ct():st(t,a),ft(t);else return r=t.lanes=536870912,Gn(e,t,a===null?n:a.baseLanes|n,n,r)}else a===null?(e!==null&&Ne(t,null),ct(),pt()):(Ne(t,a.cachePool),st(t,a),pt(),t.memoizedState=null);return zn(e,t,i,n),t.child}function Wn(e,t){return e!==null&&e.tag===22||t.stateNode!==null||(t.stateNode={_visibility:1,_pendingMarkers:null,_retryCache:null,_transitions:null}),t.sibling}function Gn(e,t,n,r,i){var a=Me();return a=a===null?null:{parent:oo?cl._currentValue:cl._currentValue2,pool:a},t.memoizedState={baseLanes:n,cachePool:a},e!==null&&Ne(t,null),ct(),ft(t),e!==null&&pe(e,t,r,!0),t.childLanes=i,null}function Kn(e,t){return t=J({mode:t.mode,children:t.children},e.mode),t.ref=e.ref,e.child=t,t.return=e,t}function qn(e,t,n){return Ol(t,e.child,null,n),e=Kn(t,t.pendingProps),e.flags|=2,mt(t),t.memoizedState=null,e}function Jn(e,t,n){var i=t.pendingProps,a=(t.flags&128)!=0;if(t.flags&=-129,e===null){if(Qc){if(i.mode===`hidden`)return e=Kn(t,i),t.lanes=536870912,Wn(null,e);if(dt(t),(e=Zc)?(e=xs(e,el),e!==null&&(t.memoizedState={dehydrated:e,treeContext:Uc===null?null:{id:Wc,overflow:Gc},retryLane:536870912,hydrationErrors:null},n=fa(e),n.return=t,t.child=n,Xc=t,Zc=null)):e=null,e===null)throw re(t);return t.lanes=536870912,null}return Kn(t,i)}var o=e.memoizedState;if(o!==null){var s=o.dehydrated;if(dt(t),a)if(t.flags&256)t.flags&=-257,t=qn(e,t,n);else if(t.memoizedState!==null)t.child=e.child,t.flags|=128,t=null;else throw Error(r(558));else if(ru||pe(e,t,n,!1),a=(n&e.childLanes)!==0,ru||a){if(i=Cu,i!==null&&(s=E(i,n),s!==0&&s!==o.retryLane))throw o.retryLane=s,Je(e,s),Si(i,e,s),nu;Pi(),t=qn(e,t,n)}else e=o.treeContext,lo&&(Zc=gs(s),Xc=t,Qc=!0,$c=null,el=!1,e!==null&&te(t,e)),t=Kn(t,i),t.flags|=4096;return t}return e=sa(e.child,{mode:i.mode,children:i.children}),e.ref=t.ref,t.child=e,e.return=t,e}function Yn(e,t){var n=t.ref;if(n===null)e!==null&&e.ref!==null&&(t.flags|=4194816);else{if(typeof n!=`function`&&typeof n!=`object`)throw Error(r(284));(e===null||e.ref!==n)&&(t.flags|=4194816)}}function Xn(e,t,n,r,i){return he(t),n=vt(e,t,n,r,void 0,i),r=St(),e!==null&&!ru?(Ct(e,t,i),cr(e,t,i)):(Qc&&r&&ee(t),t.flags|=1,zn(e,t,n,i),t.child)}function Zn(e,t,n,r,i,a){return he(t),t.updateQueue=null,n=bt(t,r,n,i),yt(e),r=St(),e!==null&&!ru?(Ct(e,t,a),cr(e,t,a)):(Qc&&r&&ee(t),t.flags|=1,zn(e,t,n,a),t.child)}function Qn(e,t,n,r,i){if(he(t),t.stateNode===null){var a=uc,o=n.contextType;typeof o==`object`&&o&&(a=ge(o)),a=new n(r,a),t.memoizedState=a.state!==null&&a.state!==void 0?a.state:null,a.updater=tu,t.stateNode=a,a._reactInternals=t,a=t.stateNode,a.props=r,a.state=t.memoizedState,a.refs={},Ze(t),o=n.contextType,a.context=typeof o==`object`&&o?ge(o):uc,a.state=t.memoizedState,o=n.getDerivedStateFromProps,typeof o==`function`&&(jn(t,n,o,r),a.state=t.memoizedState),typeof n.getDerivedStateFromProps==`function`||typeof a.getSnapshotBeforeUpdate==`function`||typeof a.UNSAFE_componentWillMount!=`function`&&typeof a.componentWillMount!=`function`||(o=a.state,typeof a.componentWillMount==`function`&&a.componentWillMount(),typeof a.UNSAFE_componentWillMount==`function`&&a.UNSAFE_componentWillMount(),o!==a.state&&tu.enqueueReplaceState(a,a.state,null),it(t,r,a,i),rt(),a.state=t.memoizedState),typeof a.componentDidMount==`function`&&(t.flags|=4194308),r=!0}else if(e===null){a=t.stateNode;var s=t.memoizedProps,c=q(n,s);a.props=c;var l=a.context,u=n.contextType;o=uc,typeof u==`object`&&u&&(o=ge(u));var d=n.getDerivedStateFromProps;u=typeof d==`function`||typeof a.getSnapshotBeforeUpdate==`function`,s=t.pendingProps!==s,u||typeof a.UNSAFE_componentWillReceiveProps!=`function`&&typeof a.componentWillReceiveProps!=`function`||(s||l!==o)&&Mn(t,a,r,o),Nl=!1;var f=t.memoizedState;a.state=f,it(t,r,a,i),rt(),l=t.memoizedState,s||f!==l||Nl?(typeof d==`function`&&(jn(t,n,d,r),l=t.memoizedState),(c=Nl||K(t,n,c,r,f,l,o))?(u||typeof a.UNSAFE_componentWillMount!=`function`&&typeof a.componentWillMount!=`function`||(typeof a.componentWillMount==`function`&&a.componentWillMount(),typeof a.UNSAFE_componentWillMount==`function`&&a.UNSAFE_componentWillMount()),typeof a.componentDidMount==`function`&&(t.flags|=4194308)):(typeof a.componentDidMount==`function`&&(t.flags|=4194308),t.memoizedProps=r,t.memoizedState=l),a.props=r,a.state=l,a.context=o,r=c):(typeof a.componentDidMount==`function`&&(t.flags|=4194308),r=!1)}else{a=t.stateNode,Qe(e,t),o=t.memoizedProps,u=q(n,o),a.props=u,d=t.pendingProps,f=a.context,l=n.contextType,c=uc,typeof l==`object`&&l&&(c=ge(l)),s=n.getDerivedStateFromProps,(l=typeof s==`function`||typeof a.getSnapshotBeforeUpdate==`function`)||typeof a.UNSAFE_componentWillReceiveProps!=`function`&&typeof a.componentWillReceiveProps!=`function`||(o!==d||f!==c)&&Mn(t,a,r,c),Nl=!1,f=t.memoizedState,a.state=f,it(t,r,a,i),rt();var p=t.memoizedState;o!==d||f!==p||Nl||e!==null&&e.dependencies!==null&&me(e.dependencies)?(typeof s==`function`&&(jn(t,n,s,r),p=t.memoizedState),(u=Nl||K(t,n,u,r,f,p,c)||e!==null&&e.dependencies!==null&&me(e.dependencies))?(l||typeof a.UNSAFE_componentWillUpdate!=`function`&&typeof a.componentWillUpdate!=`function`||(typeof a.componentWillUpdate==`function`&&a.componentWillUpdate(r,p,c),typeof a.UNSAFE_componentWillUpdate==`function`&&a.UNSAFE_componentWillUpdate(r,p,c)),typeof a.componentDidUpdate==`function`&&(t.flags|=4),typeof a.getSnapshotBeforeUpdate==`function`&&(t.flags|=1024)):(typeof a.componentDidUpdate!=`function`||o===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),typeof a.getSnapshotBeforeUpdate!=`function`||o===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),t.memoizedProps=r,t.memoizedState=p),a.props=r,a.state=p,a.context=c,r=u):(typeof a.componentDidUpdate!=`function`||o===e.memoizedProps&&f===e.memoizedState||(t.flags|=4),typeof a.getSnapshotBeforeUpdate!=`function`||o===e.memoizedProps&&f===e.memoizedState||(t.flags|=1024),r=!1)}return a=r,Yn(e,t),r=(t.flags&128)!=0,a||r?(a=t.stateNode,n=r&&typeof n.getDerivedStateFromError!=`function`?null:a.render(),t.flags|=1,e!==null&&r?(t.child=Ol(t,e.child,null,i),t.child=Ol(t,null,n,i)):zn(e,t,n,i),t.memoizedState=a.state,e=t.child):e=cr(e,t,i),e}function $n(e,t,n,r){return se(),t.flags|=256,zn(e,t,n,r),t.child}function er(e){return{baseLanes:e,cachePool:Pe()}}function tr(e,t,n){return e=e===null?0:e.childLanes&~n,t&&(e|=Iu),e}function nr(e,t,n){var i=t.pendingProps,a=!1,o=(t.flags&128)!=0,s;if((s=o)||(s=e!==null&&e.memoizedState===null?!1:(zl.current&2)!=0),s&&(a=!0,t.flags&=-129),s=(t.flags&32)!=0,t.flags&=-33,e===null){if(Qc){if(a?ut(t):pt(),(e=Zc)?(e=Ss(e,el),e!==null&&(t.memoizedState={dehydrated:e,treeContext:Uc===null?null:{id:Wc,overflow:Gc},retryLane:536870912,hydrationErrors:null},n=fa(e),n.return=t,t.child=n,Xc=t,Zc=null)):e=null,e===null)throw re(t);return ss(e)?t.lanes=32:t.lanes=536870912,null}var c=i.children;return i=i.fallback,a?(pt(),a=t.mode,c=J({mode:`hidden`,children:c},a),i=ua(i,a,n,null),c.return=t,i.return=t,c.sibling=i,t.child=c,i=t.child,i.memoizedState=er(n),i.childLanes=tr(e,s,n),t.memoizedState=iu,Wn(null,i)):(ut(t),rr(t,c))}var l=e.memoizedState;if(l!==null&&(c=l.dehydrated,c!==null)){if(o)t.flags&256?(ut(t),t.flags&=-257,t=ir(e,t,n)):t.memoizedState===null?(pt(),c=i.fallback,a=t.mode,i=J({mode:`visible`,children:i.children},a),c=ua(c,a,n,null),c.flags|=2,i.return=t,c.return=t,i.sibling=c,t.child=i,Ol(t,e.child,null,n),i=t.child,i.memoizedState=er(n),i.childLanes=tr(e,s,n),t.memoizedState=iu,t=Wn(null,i)):(pt(),t.child=e.child,t.flags|=128,t=null);else if(ut(t),ss(c))s=cs(c).digest,i=Error(r(419)),i.stack=``,i.digest=s,H({value:i,source:null,stack:null}),t=ir(e,t,n);else if(ru||pe(e,t,n,!1),s=(n&e.childLanes)!==0,ru||s){if(s=Cu,s!==null&&(i=E(s,n),i!==0&&i!==l.retryLane))throw l.retryLane=i,Je(e,i),Si(s,e,i),nu;os(c)||Pi(),t=ir(e,t,n)}else os(c)?(t.flags|=192,t.child=e.child,t=null):(e=l.treeContext,lo&&(Zc=_s(c),Xc=t,Qc=!0,$c=null,el=!1,e!==null&&te(t,e)),t=rr(t,i.children),t.flags|=4096);return t}return a?(pt(),c=i.fallback,a=t.mode,l=e.child,o=l.sibling,i=sa(l,{mode:`hidden`,children:i.children}),i.subtreeFlags=l.subtreeFlags&65011712,o===null?(c=ua(c,a,n,null),c.flags|=2):c=sa(o,c),c.return=t,i.return=t,i.sibling=c,t.child=i,Wn(null,i),i=t.child,c=e.child.memoizedState,c===null?c=er(n):(a=c.cachePool,a===null?a=Pe():(l=oo?cl._currentValue:cl._currentValue2,a=a.parent===l?a:{parent:l,pool:l}),c={baseLanes:c.baseLanes|n,cachePool:a}),i.memoizedState=c,i.childLanes=tr(e,s,n),t.memoizedState=iu,Wn(e.child,i)):(ut(t),n=e.child,e=n.sibling,n=sa(n,{mode:`visible`,children:i.children}),n.return=t,n.sibling=null,e!==null&&(s=t.deletions,s===null?(t.deletions=[e],t.flags|=16):s.push(e)),t.child=n,t.memoizedState=null,n)}function rr(e,t){return t=J({mode:`visible`,children:t},e.mode),t.return=e,e.child=t}function J(e,n){return e=t(22,e,null,n),e.lanes=0,e}function ir(e,t,n){return Ol(t,e.child,null,n),e=rr(t,t.pendingProps.children),e.flags|=2,t.memoizedState=null,e}function ar(e,t,n){e.lanes|=t;var r=e.alternate;r!==null&&(r.lanes|=t),de(e.return,t,n)}function or(e,t,n,r,i,a){var o=e.memoizedState;o===null?e.memoizedState={isBackwards:t,rendering:null,renderingStartTime:0,last:r,tail:n,tailMode:i,treeForkCount:a}:(o.isBackwards=t,o.rendering=null,o.renderingStartTime=0,o.last=r,o.tail=n,o.tailMode=i,o.treeForkCount=a)}function sr(e,t,n){var r=t.pendingProps,i=r.revealOrder,a=r.tail;r=r.children;var o=zl.current,s=(o&2)!=0;if(s?(o=o&1|2,t.flags|=128):o&=1,p(zl,o),zn(e,t,r,n),r=Qc?Bc:0,!s&&e!==null&&e.flags&128)e:for(e=t.child;e!==null;){if(e.tag===13)e.memoizedState!==null&&ar(e,n,t);else if(e.tag===19)ar(e,n,t);else if(e.child!==null){e.child.return=e,e=e.child;continue}if(e===t)break e;for(;e.sibling===null;){if(e.return===null||e.return===t)break e;e=e.return}e.sibling.return=e.return,e=e.sibling}switch(i){case`forwards`:for(n=t.child,i=null;n!==null;)e=n.alternate,e!==null&&ht(e)===null&&(i=n),n=n.sibling;n=i,n===null?(i=t.child,t.child=null):(i=n.sibling,n.sibling=null),or(t,!1,i,n,a,r);break;case`backwards`:case`unstable_legacy-backwards`:for(n=null,i=t.child,t.child=null;i!==null;){if(e=i.alternate,e!==null&&ht(e)===null){t.child=i;break}e=i.sibling,i.sibling=n,n=i,i=e}or(t,!0,n,null,a,r);break;case`together`:or(t,!1,null,null,void 0,r);break;default:t.memoizedState=null}return t.child}function cr(e,t,n){if(e!==null&&(t.dependencies=e.dependencies),Nu|=t.lanes,(n&t.childLanes)===0)if(e!==null){if(pe(e,t,n,!1),(n&t.childLanes)===0)return null}else return null;if(e!==null&&t.child!==e.child)throw Error(r(153));if(t.child!==null){for(e=t.child,n=sa(e,e.pendingProps),t.child=n,n.return=t;e.sibling!==null;)e=e.sibling,n=n.sibling=sa(e,e.pendingProps),n.return=t;n.sibling=null}return t.child}function lr(e,t){return(e.lanes&t)===0?(e=e.dependencies,!!(e!==null&&me(e))):!0}function ur(e,t,n){switch(t.tag){case 3:z(t,t.stateNode.containerInfo),le(t,cl,e.memoizedState.cache),se();break;case 27:case 5:V(t);break;case 4:z(t,t.stateNode.containerInfo);break;case 10:le(t,t.type,t.memoizedProps.value);break;case 31:if(t.memoizedState!==null)return t.flags|=128,dt(t),null;break;case 13:var r=t.memoizedState;if(r!==null)return r.dehydrated===null?(n&t.child.childLanes)===0?(ut(t),e=cr(e,t,n),e===null?null:e.sibling):nr(e,t,n):(ut(t),t.flags|=128,null);ut(t);break;case 19:var i=(e.flags&128)!=0;if(r=(n&t.childLanes)!==0,r||=(pe(e,t,n,!1),(n&t.childLanes)!==0),i){if(r)return sr(e,t,n);t.flags|=128}if(i=t.memoizedState,i!==null&&(i.rendering=null,i.tail=null,i.lastEffect=null),p(zl,zl.current),r)break;return null;case 22:return t.lanes=0,Un(e,t,n,t.pendingProps);case 24:le(t,cl,e.memoizedState.cache)}return cr(e,t,n)}function dr(e,t,n){if(e!==null)if(e.memoizedProps!==t.pendingProps)ru=!0;else{if(!lr(e,n)&&!(t.flags&128))return ru=!1,ur(e,t,n);ru=(e.flags&131072)!=0}else ru=!1,Qc&&t.flags&1048576&&L(t,Bc,t.index);switch(t.lanes=0,t.tag){case 16:e:{var i=t.pendingProps;if(e=Re(t.elementType),t.type=e,typeof e==`function`)oa(e)?(i=q(e,i),t.tag=1,t=Qn(null,t,e,i,n)):(t.tag=0,t=Xn(null,t,e,i,n));else{if(e!=null){var a=e.$$typeof;if(a===Na){t.tag=11,t=Bn(null,t,e,i,n);break e}else if(a===Ia){t.tag=14,t=Vn(null,t,e,i,n);break e}}throw t=u(e)||e,Error(r(306,t,``))}}return t;case 0:return Xn(e,t,t.type,t.pendingProps,n);case 1:return i=t.type,a=q(i,t.pendingProps),Qn(e,t,i,a,n);case 3:e:{if(z(t,t.stateNode.containerInfo),e===null)throw Error(r(387));var o=t.pendingProps;a=t.memoizedState,i=a.element,Qe(e,t),it(t,o,null,n);var s=t.memoizedState;if(o=s.cache,le(t,cl,o),o!==a.cache&&fe(t,[cl],n,!0),rt(),o=s.element,lo&&a.isDehydrated)if(a={element:o,isDehydrated:!1,cache:s.cache},t.updateQueue.baseState=a,t.memoizedState=a,t.flags&256){t=$n(e,t,o,n);break e}else if(o!==i){i=F(Error(r(424)),t),H(i),t=$n(e,t,o,n);break e}else for(lo&&(Zc=hs(t.stateNode.containerInfo),Xc=t,Qc=!0,$c=null,el=!0),n=kl(t,null,o,n),t.child=n;n;)n.flags=n.flags&-3|4096,n=n.sibling;else{if(se(),o===i){t=cr(e,t,n);break e}zn(e,t,o,n)}t=t.child}return t;case 26:if(Hs)return Yn(e,t),e===null?(n=Gs(t.type,null,t.pendingProps,null))?t.memoizedState=n:Qc||(t.stateNode=Zs(t.type,t.pendingProps,Jc.current,t)):t.memoizedState=Gs(t.type,e.memoizedProps,t.pendingProps,e.memoizedState),null;case 27:if(nc)return V(t),e===null&&nc&&Qc&&(i=t.stateNode=rc(t.type,t.pendingProps,Jc.current,Kc.current,!1),Xc=t,el=!0,Zc=vs(t.type,i,Zc)),zn(e,t,t.pendingProps.children,n),Yn(e,t),e===null&&(t.flags|=4194304),t.child;case 5:return e===null&&Qc&&(Bs(t.type,t.pendingProps,Kc.current),(a=i=Zc)&&(i=ys(i,t.type,t.pendingProps,el),i===null?a=!1:(t.stateNode=i,Xc=t,Zc=ms(i),el=!1,a=!0)),a||re(t)),V(t),a=t.type,o=t.pendingProps,s=e===null?null:e.memoizedProps,i=o.children,to(a,o)?i=null:s!==null&&to(a,s)&&(t.flags|=32),t.memoizedState!==null&&(a=vt(e,t,xt,null,null,n),oo?Eo._currentValue=a:Eo._currentValue2=a),Yn(e,t),zn(e,t,i,n),t.child;case 6:return e===null&&Qc&&(Vs(t.pendingProps,Kc.current),(e=n=Zc)&&(n=bs(n,t.pendingProps,el),n===null?e=!1:(t.stateNode=n,Xc=t,Zc=null,e=!0)),e||re(t)),null;case 13:return nr(e,t,n);case 4:return z(t,t.stateNode.containerInfo),i=t.pendingProps,e===null?t.child=Ol(t,null,i,n):zn(e,t,i,n),t.child;case 11:return Bn(e,t,t.type,t.pendingProps,n);case 7:return zn(e,t,t.pendingProps,n),t.child;case 8:return zn(e,t,t.pendingProps.children,n),t.child;case 12:return zn(e,t,t.pendingProps.children,n),t.child;case 10:return i=t.pendingProps,le(t,t.type,i.value),zn(e,t,i.children,n),t.child;case 9:return a=t.type._context,i=t.pendingProps.children,he(t),a=ge(a),i=i(a),t.flags|=1,zn(e,t,i,n),t.child;case 14:return Vn(e,t,t.type,t.pendingProps,n);case 15:return Hn(e,t,t.type,t.pendingProps,n);case 19:return sr(e,t,n);case 31:return Jn(e,t,n);case 22:return Un(e,t,n,t.pendingProps);case 24:return he(t),i=ge(cl),e===null?(a=Me(),a===null&&(a=Cu,o=ye(),a.pooledCache=o,o.refCount++,o!==null&&(a.pooledCacheLanes|=n),a=o),t.memoizedState={parent:i,cache:a},Ze(t),le(t,cl,a)):((e.lanes&n)!==0&&(Qe(e,t),it(t,null,null,n),rt()),a=e.memoizedState,o=t.memoizedState,a.parent===i?(i=o.cache,le(t,cl,i),i!==a.cache&&fe(t,[cl],n,!0)):(a={parent:i,cache:i},t.memoizedState=a,t.lanes===0&&(t.memoizedState=t.updateQueue.baseState=a),le(t,cl,i))),zn(e,t,t.pendingProps.children,n),t.child;case 29:throw t.pendingProps}throw Error(r(156,t.tag))}function fr(e){e.flags|=4}function pr(e){co&&(e.flags|=8)}function mr(e,t){if(e!==null&&e.child===t.child)return!1;if(t.flags&16)return!0;for(e=t.child;e!==null;){if(e.flags&8218||e.subtreeFlags&8218)return!0;e=e.sibling}return!1}function hr(e,t,n,r){if(so)for(n=t.child;n!==null;){if(n.tag===5||n.tag===6)$a(e,n.stateNode);else if(!(n.tag===4||nc&&n.tag===27)&&n.child!==null){n.child.return=n,n=n.child;continue}if(n===t)break;for(;n.sibling===null;){if(n.return===null||n.return===t)return;n=n.return}n.sibling.return=n.return,n=n.sibling}else if(co)for(var i=t.child;i!==null;){if(i.tag===5){var a=i.stateNode;n&&r&&(a=is(a,i.type,i.memoizedProps)),$a(e,a)}else if(i.tag===6)a=i.stateNode,n&&r&&(a=as(a,i.memoizedProps)),$a(e,a);else if(i.tag!==4){if(i.tag===22&&i.memoizedState!==null)a=i.child,a!==null&&(a.return=i),hr(e,i,!0,!0);else if(i.child!==null){i.child.return=i,i=i.child;continue}}if(i===t)break;for(;i.sibling===null;){if(i.return===null||i.return===t)return;i=i.return}i.sibling.return=i.return,i=i.sibling}}function gr(e,t,n,r){var i=!1;if(co)for(var a=t.child;a!==null;){if(a.tag===5){var o=a.stateNode;n&&r&&(o=is(o,a.type,a.memoizedProps)),ts(e,o)}else if(a.tag===6)o=a.stateNode,n&&r&&(o=as(o,a.memoizedProps)),ts(e,o);else if(a.tag!==4){if(a.tag===22&&a.memoizedState!==null)i=a.child,i!==null&&(i.return=a),gr(e,a,!0,!0),i=!0;else if(a.child!==null){a.child.return=a,a=a.child;continue}}if(a===t)break;for(;a.sibling===null;){if(a.return===null||a.return===t)return i;a=a.return}a.sibling.return=a.return,a=a.sibling}return i}function _r(e,t){if(co&&mr(e,t)){e=t.stateNode;var n=e.containerInfo,r=es();gr(r,t,!1,!1),e.pendingChildren=r,fr(t),ns(n,r)}}function vr(e,t,n,r){if(so)e.memoizedProps!==r&&fr(t);else if(co){var i=e.stateNode,a=e.memoizedProps;if((e=mr(e,t))||a!==r){var o=Kc.current;a=$o(i,n,a,r,!e,null),a===i?t.stateNode=i:(pr(t),eo(a,n,r,o)&&fr(t),t.stateNode=a,e&&hr(a,t,!1,!1))}else t.stateNode=i}}function yr(e,t,n,r,i){if(e.mode&32&&(n===null?vo(t,r):yo(t,n,r))){if(e.flags|=16777216,(i&335544128)===i||bo(t,r))if(xo(e.stateNode,t,r))e.flags|=8192;else if(ji())e.flags|=8192;else throw Tl=wl,Sl}else e.flags&=-16777217}function br(e,t){if($s(t)){if(e.flags|=16777216,!ec(t))if(ji())e.flags|=8192;else throw Tl=wl,Sl}else e.flags&=-16777217}function xr(e,t){t!==null&&(e.flags|=4),e.flags&16384&&(t=e.tag===22?536870912:b(),e.lanes|=t,Lu|=t)}function Sr(e,t){if(!Qc)switch(e.tailMode){case`hidden`:t=e.tail;for(var n=null;t!==null;)t.alternate!==null&&(n=t),t=t.sibling;n===null?e.tail=null:n.sibling=null;break;case`collapsed`:n=e.tail;for(var r=null;n!==null;)n.alternate!==null&&(r=n),n=n.sibling;r===null?t||e.tail===null?e.tail=null:e.tail.sibling=null:r.sibling=null}}function Cr(e){var t=e.alternate!==null&&e.alternate.child===e.child,n=0,r=0;if(t)for(var i=e.child;i!==null;)n|=i.lanes|i.childLanes,r|=i.subtreeFlags&65011712,r|=i.flags&65011712,i.return=e,i=i.sibling;else for(i=e.child;i!==null;)n|=i.lanes|i.childLanes,r|=i.subtreeFlags,r|=i.flags,i.return=e,i=i.sibling;return e.subtreeFlags|=r,e.childLanes=n,t}function wr(e,t,n){var i=t.pendingProps;switch(R(t),t.tag){case 16:case 15:case 0:case 11:case 7:case 8:case 12:case 9:case 14:return Cr(t),null;case 1:return Cr(t),null;case 3:return n=t.stateNode,i=null,e!==null&&(i=e.memoizedState.cache),t.memoizedState.cache!==i&&(t.flags|=2048),ue(cl),B(),n.pendingContext&&(n.context=n.pendingContext,n.pendingContext=null),(e===null||e.child===null)&&(oe(t)?fr(t):e===null||e.memoizedState.isDehydrated&&!(t.flags&256)||(t.flags|=1024,ce())),_r(e,t),Cr(t),null;case 26:if(Hs){var a=t.type,o=t.memoizedState;return e===null?(fr(t),o===null?(Cr(t),yr(t,a,null,i,n)):(Cr(t),br(t,o))):o?o===e.memoizedState?(Cr(t),t.flags&=-16777217):(fr(t),Cr(t),br(t,o)):(o=e.memoizedProps,so?o!==i&&fr(t):vr(e,t,a,i),Cr(t),yr(t,a,o,i,n)),null}case 27:if(nc){if(ne(t),n=Jc.current,a=t.type,e!==null&&t.stateNode!=null)so?e.memoizedProps!==i&&fr(t):vr(e,t,a,i);else{if(!i){if(t.stateNode===null)throw Error(r(166));return Cr(t),null}e=Kc.current,oe(t)?ie(t,e):(e=rc(a,i,n,e,!0),t.stateNode=e,fr(t))}return Cr(t),null}case 5:if(ne(t),a=t.type,e!==null&&t.stateNode!=null)vr(e,t,a,i);else{if(!i){if(t.stateNode===null)throw Error(r(166));return Cr(t),null}if(o=Kc.current,oe(t))ie(t,o),Ns(t.stateNode,a,i,o)&&(t.flags|=64);else{var s=Qa(a,i,Jc.current,o,t);pr(t),hr(s,t,!1,!1),t.stateNode=s,eo(s,a,i,o)&&fr(t)}}return Cr(t),yr(t,t.type,e===null?null:e.memoizedProps,t.pendingProps,n),null;case 6:if(e&&t.stateNode!=null)n=e.memoizedProps,so?n!==i&&fr(t):co&&(n===i?t.stateNode=e.stateNode:(e=Jc.current,n=Kc.current,pr(t),t.stateNode=no(i,e,n,t)));else{if(typeof i!=`string`&&t.stateNode===null)throw Error(r(166));if(e=Jc.current,n=Kc.current,oe(t)){if(!lo)throw Error(r(176));if(e=t.stateNode,n=t.memoizedProps,i=null,a=Xc,a!==null)switch(a.tag){case 27:case 5:i=a.memoizedProps}ws(e,n,t,i)||re(t,!0)}else pr(t),t.stateNode=no(i,e,n,t)}return Cr(t),null;case 31:if(n=t.memoizedState,e===null||e.memoizedState!==null){if(i=oe(t),n!==null){if(e===null){if(!i)throw Error(r(318));if(!lo)throw Error(r(556));if(e=t.memoizedState,e=e===null?null:e.dehydrated,!e)throw Error(r(557));Ts(e,t)}else se(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Cr(t),e=!1}else n=ce(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=n),e=!0;if(!e)return t.flags&256?(mt(t),t):(mt(t),null);if(t.flags&128)throw Error(r(558))}return Cr(t),null;case 13:if(i=t.memoizedState,e===null||e.memoizedState!==null&&e.memoizedState.dehydrated!==null){if(a=oe(t),i!==null&&i.dehydrated!==null){if(e===null){if(!a)throw Error(r(318));if(!lo)throw Error(r(344));if(a=t.memoizedState,a=a===null?null:a.dehydrated,!a)throw Error(r(317));Es(a,t)}else se(),!(t.flags&128)&&(t.memoizedState=null),t.flags|=4;Cr(t),a=!1}else a=ce(),e!==null&&e.memoizedState!==null&&(e.memoizedState.hydrationErrors=a),a=!0;if(!a)return t.flags&256?(mt(t),t):(mt(t),null)}return mt(t),t.flags&128?(t.lanes=n,t):(n=i!==null,e=e!==null&&e.memoizedState!==null,n&&(i=t.child,a=null,i.alternate!==null&&i.alternate.memoizedState!==null&&i.alternate.memoizedState.cachePool!==null&&(a=i.alternate.memoizedState.cachePool.pool),o=null,i.memoizedState!==null&&i.memoizedState.cachePool!==null&&(o=i.memoizedState.cachePool.pool),o!==a&&(i.flags|=2048)),n!==e&&n&&(t.child.flags|=8192),xr(t,t.updateQueue),Cr(t),null);case 4:return B(),_r(e,t),e===null&&fo(t.stateNode.containerInfo),Cr(t),null;case 10:return ue(t.type),Cr(t),null;case 19:if(f(zl),i=t.memoizedState,i===null)return Cr(t),null;if(a=(t.flags&128)!=0,o=i.rendering,o===null)if(a)Sr(i,!1);else{if(Mu!==0||e!==null&&e.flags&128)for(e=t.child;e!==null;){if(o=ht(e),o!==null){for(t.flags|=128,Sr(i,!1),e=o.updateQueue,t.updateQueue=e,xr(t,e),t.subtreeFlags=0,e=n,n=t.child;n!==null;)ca(n,e),n=n.sibling;return p(zl,zl.current&1|2),Qc&&I(t,i.treeForkCount),t.child}e=e.sibling}i.tail!==null&&xc()>Uu&&(t.flags|=128,a=!0,Sr(i,!1),t.lanes=4194304)}else{if(!a)if(e=ht(o),e!==null){if(t.flags|=128,a=!0,e=e.updateQueue,t.updateQueue=e,xr(t,e),Sr(i,!0),i.tail===null&&i.tailMode===`hidden`&&!o.alternate&&!Qc)return Cr(t),null}else 2*xc()-i.renderingStartTime>Uu&&n!==536870912&&(t.flags|=128,a=!0,Sr(i,!1),t.lanes=4194304);i.isBackwards?(o.sibling=t.child,t.child=o):(e=i.last,e===null?t.child=o:e.sibling=o,i.last=o)}return i.tail===null?(Cr(t),null):(e=i.tail,i.rendering=e,i.tail=e.sibling,i.renderingStartTime=xc(),e.sibling=null,n=zl.current,p(zl,a?n&1|2:n&1),Qc&&I(t,i.treeForkCount),e);case 22:case 23:return mt(t),lt(),i=t.memoizedState!==null,e===null?i&&(t.flags|=8192):e.memoizedState!==null!==i&&(t.flags|=8192),i?n&536870912&&!(t.flags&128)&&(Cr(t),t.subtreeFlags&6&&(t.flags|=8192)):Cr(t),n=t.updateQueue,n!==null&&xr(t,n.retryQueue),n=null,e!==null&&e.memoizedState!==null&&e.memoizedState.cachePool!==null&&(n=e.memoizedState.cachePool.pool),i=null,t.memoizedState!==null&&t.memoizedState.cachePool!==null&&(i=t.memoizedState.cachePool.pool),i!==n&&(t.flags|=2048),e!==null&&f(bl),null;case 24:return n=null,e!==null&&(n=e.memoizedState.cache),t.memoizedState.cache!==n&&(t.flags|=2048),ue(cl),Cr(t),null;case 25:return null;case 30:return null}throw Error(r(156,t.tag))}function Tr(e,t){switch(R(t),t.tag){case 1:return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 3:return ue(cl),B(),e=t.flags,e&65536&&!(e&128)?(t.flags=e&-65537|128,t):null;case 26:case 27:case 5:return ne(t),null;case 31:if(t.memoizedState!==null){if(mt(t),t.alternate===null)throw Error(r(340));se()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 13:if(mt(t),e=t.memoizedState,e!==null&&e.dehydrated!==null){if(t.alternate===null)throw Error(r(340));se()}return e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 19:return f(zl),null;case 4:return B(),null;case 10:return ue(t.type),null;case 22:case 23:return mt(t),lt(),e!==null&&f(bl),e=t.flags,e&65536?(t.flags=e&-65537|128,t):null;case 24:return ue(cl),null;case 25:return null;default:return null}}function Er(e,t){switch(R(t),t.tag){case 3:ue(cl),B();break;case 26:case 27:case 5:ne(t);break;case 4:B();break;case 31:t.memoizedState!==null&&mt(t);break;case 13:mt(t);break;case 19:f(zl);break;case 10:ue(t.type);break;case 22:case 23:mt(t),lt(),e!==null&&f(bl);break;case 24:ue(cl)}}function Dr(e,t){try{var n=t.updateQueue,r=n===null?null:n.lastEffect;if(r!==null){var i=r.next;n=i;do{if((n.tag&e)===e){r=void 0;var a=n.create,o=n.inst;r=a(),o.destroy=r}n=n.next}while(n!==i)}}catch(e){Qi(t,t.return,e)}}function Or(e,t,n){try{var r=t.updateQueue,i=r===null?null:r.lastEffect;if(i!==null){var a=i.next;r=a;do{if((r.tag&e)===e){var o=r.inst,s=o.destroy;if(s!==void 0){o.destroy=void 0,i=t;var c=n,l=s;try{l()}catch(e){Qi(i,c,e)}}}r=r.next}while(r!==a)}}catch(e){Qi(t,t.return,e)}}function kr(e){var t=e.updateQueue;if(t!==null){var n=e.stateNode;try{ot(t,n)}catch(t){Qi(e,e.return,t)}}}function Ar(e,t,n){n.props=q(e.type,e.memoizedProps),n.state=e.memoizedState;try{n.componentWillUnmount()}catch(n){Qi(e,t,n)}}function jr(e,t){try{var n=e.ref;if(n!==null){switch(e.tag){case 26:case 27:case 5:var r=qa(e.stateNode);break;case 30:r=e.stateNode;break;default:r=e.stateNode}typeof n==`function`?e.refCleanup=n(r):n.current=r}}catch(n){Qi(e,t,n)}}function Mr(e,t){var n=e.ref,r=e.refCleanup;if(n!==null)if(typeof r==`function`)try{r()}catch(n){Qi(e,t,n)}finally{e.refCleanup=null,e=e.alternate,e!=null&&(e.refCleanup=null)}else if(typeof n==`function`)try{n(null)}catch(n){Qi(e,t,n)}else n.current=null}function Nr(e){var t=e.type,n=e.memoizedProps,r=e.stateNode;try{Vo(r,t,n,e)}catch(t){Qi(e,e.return,t)}}function Pr(e,t,n){try{Ho(e.stateNode,e.type,n,t,e)}catch(t){Qi(e,e.return,t)}}function Fr(e){return e.tag===5||e.tag===3||(Hs?e.tag===26:!1)||(nc?e.tag===27&&sc(e.type):!1)||e.tag===4}function Ir(e){e:for(;;){for(;e.sibling===null;){if(e.return===null||Fr(e.return))return null;e=e.return}for(e.sibling.return=e.return,e=e.sibling;e.tag!==5&&e.tag!==6&&e.tag!==18;){if(nc&&e.tag===27&&sc(e.type)||e.flags&2||e.child===null||e.tag===4)continue e;e.child.return=e,e=e.child}if(!(e.flags&2))return e.stateNode}}function Lr(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?Wo(n,e,t):zo(n,e);else if(r!==4&&(nc&&r===27&&sc(e.type)&&(n=e.stateNode,t=null),e=e.child,e!==null))for(Lr(e,t,n),e=e.sibling;e!==null;)Lr(e,t,n),e=e.sibling}function Y(e,t,n){var r=e.tag;if(r===5||r===6)e=e.stateNode,t?Uo(n,e,t):Ro(n,e);else if(r!==4&&(nc&&r===27&&sc(e.type)&&(n=e.stateNode),e=e.child,e!==null))for(Y(e,t,n),e=e.sibling;e!==null;)Y(e,t,n),e=e.sibling}function Rr(e,t,n){e=e.containerInfo;try{rs(e,n)}catch(e){Qi(t,t.return,e)}}function zr(e){var t=e.stateNode,n=e.memoizedProps;try{ic(e.type,n,t,e)}catch(t){Qi(e,e.return,t)}}function Br(e,t){for(Xa(e.containerInfo),lu=t;lu!==null;)if(e=lu,t=e.child,e.subtreeFlags&1028&&t!==null)t.return=e,lu=t;else for(;lu!==null;){e=lu;var n=e.alternate;switch(t=e.flags,e.tag){case 0:if(t&4&&(t=e.updateQueue,t=t===null?null:t.events,t!==null))for(var i=0;i`;case gu:return`:has(`+(_i(e)||``)+`)`;case _u:return`[role="`+e.value+`"]`;case yu:return`"`+e.value+`"`;case vu:return`[data-testname="`+e.value+`"]`;default:throw Error(r(365))}}function vi(e,t){var n=[];e=[e,0];for(var r=0;rn?32:n;n=Ua.T;var a=mo();try{po(i),Ua.T=null,i=Zu,Zu=null;var o=qu,s=Yu;if(Ku=0,Ju=qu=null,Yu=0,Su&6)throw Error(r(331));var c=Su;if(Su|=4,fi(o.current),ai(o,o.current,s,i),Su=c,U(0,!1),kc&&typeof kc.onPostCommitFiberRoot==`function`)try{kc.onPostCommitFiberRoot(Oc,o)}catch{}return!0}finally{po(a),Ua.T=n,Ji(e,t)}}function Zi(e,t,n){t=F(n,t),t=Fn(e.stateNode,t,2),e=et(e,t,2),e!==null&&(S(e,2),Se(e))}function Qi(e,t,n){if(e.tag===3)Zi(e,e,n);else for(;t!==null;){if(t.tag===3){Zi(t,e,n);break}else if(t.tag===1){var r=t.stateNode;if(typeof t.type.getDerivedStateFromError==`function`||typeof r.componentDidCatch==`function`&&(Gu===null||!Gu.has(r))){e=F(n,e),n=In(2),r=et(t,n,2),r!==null&&(Ln(n,r,t,e),S(r,2),Se(r));break}}t=t.return}}function $i(e,t,n){var r=e.pingCache;if(r===null){r=e.pingCache=new xu;var i=new Set;r.set(t,i)}else i=r.get(t),i===void 0&&(i=new Set,r.set(t,i));i.has(n)||(Au=!0,i.add(n),e=ea.bind(null,e,t,n),t.then(e,e))}function ea(e,t,n){var r=e.pingCache;r!==null&&r.delete(t),e.pingedLanes|=e.suspendedLanes&n,e.warmLanes&=~n,Cu===e&&(Tu&n)===n&&(Mu===4||Mu===3&&(Tu&62914560)===Tu&&300>xc()-Vu?!(Su&2)&&ki(e,0):Fu|=n,Lu===Tu&&(Lu=0)),Se(e)}function ta(e,t){t===0&&(t=b()),e=Je(e,t),e!==null&&(S(e,t),Se(e))}function na(e){var t=e.memoizedState,n=0;t!==null&&(n=t.retryLane),ta(e,n)}function ra(e,t){var n=0;switch(e.tag){case 31:case 13:var i=e.stateNode,a=e.memoizedState;a!==null&&(n=a.retryLane);break;case 19:i=e.stateNode;break;case 22:i=e.stateNode._retryCache;break;default:throw Error(r(314))}i!==null&&i.delete(t),ta(e,n)}function ia(e,t){return _c(e,t)}function aa(e,t,n,r){this.tag=e,this.key=n,this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null,this.index=0,this.refCleanup=this.ref=null,this.pendingProps=t,this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null,this.mode=r,this.subtreeFlags=this.flags=0,this.deletions=null,this.childLanes=this.lanes=0,this.alternate=null}function oa(e){return e=e.prototype,!(!e||!e.isReactComponent)}function sa(e,n){var r=e.alternate;return r===null?(r=t(e.tag,n,e.key,e.mode),r.elementType=e.elementType,r.type=e.type,r.stateNode=e.stateNode,r.alternate=e,e.alternate=r):(r.pendingProps=n,r.type=e.type,r.flags=0,r.subtreeFlags=0,r.deletions=null),r.flags=e.flags&65011712,r.childLanes=e.childLanes,r.lanes=e.lanes,r.child=e.child,r.memoizedProps=e.memoizedProps,r.memoizedState=e.memoizedState,r.updateQueue=e.updateQueue,n=e.dependencies,r.dependencies=n===null?null:{lanes:n.lanes,firstContext:n.firstContext},r.sibling=e.sibling,r.index=e.index,r.ref=e.ref,r.refCleanup=e.refCleanup,r}function ca(e,t){e.flags&=65011714;var n=e.alternate;return n===null?(e.childLanes=0,e.lanes=t,e.child=null,e.subtreeFlags=0,e.memoizedProps=null,e.memoizedState=null,e.updateQueue=null,e.dependencies=null,e.stateNode=null):(e.childLanes=n.childLanes,e.lanes=n.lanes,e.child=n.child,e.subtreeFlags=0,e.deletions=null,e.memoizedProps=n.memoizedProps,e.memoizedState=n.memoizedState,e.updateQueue=n.updateQueue,e.type=n.type,t=n.dependencies,e.dependencies=t===null?null:{lanes:t.lanes,firstContext:t.firstContext}),e}function la(e,n,i,a,o,s){var c=0;if(a=e,typeof e==`function`)oa(e)&&(c=1);else if(typeof e==`string`)c=Hs&&nc?Us(e,i,Kc.current)?26:oc(e)?27:5:Hs?Us(e,i,Kc.current)?26:5:nc&&oc(e)?27:5;else e:switch(e){case Ra:return e=t(31,i,n,o),e.elementType=Ra,e.lanes=s,e;case Oa:return ua(i.children,o,s,n);case ka:c=8,o|=24;break;case Aa:return e=t(12,i,n,o|2),e.elementType=Aa,e.lanes=s,e;case Pa:return e=t(13,i,n,o),e.elementType=Pa,e.lanes=s,e;case Fa:return e=t(19,i,n,o),e.elementType=Fa,e.lanes=s,e;default:if(typeof e==`object`&&e)switch(e.$$typeof){case Ma:c=10;break e;case ja:c=9;break e;case Na:c=11;break e;case Ia:c=14;break e;case La:c=16,a=null;break e}c=29,i=Error(r(130,e===null?`null`:typeof e,``)),a=null}return n=t(c,i,n,o),n.elementType=e,n.type=a,n.lanes=s,n}function ua(e,n,r,i){return e=t(7,e,i,n),e.lanes=r,e}function da(e,n,r){return e=t(6,e,null,n),e.lanes=r,e}function fa(e){var n=t(18,null,null,0);return n.stateNode=e,n}function pa(e,n,r){return n=t(4,e.children===null?[]:e.children,e.key,n),n.lanes=r,n.stateNode={containerInfo:e.containerInfo,pendingChildren:null,implementation:e.implementation},n}function ma(e,t,n,r,i,a,o,s,c){this.tag=1,this.containerInfo=e,this.pingCache=this.current=this.pendingChildren=null,this.timeoutHandle=ao,this.callbackNode=this.next=this.pendingContext=this.context=this.cancelPendingCommit=null,this.callbackPriority=0,this.expirationTimes=x(-1),this.entangledLanes=this.shellSuspendCounter=this.errorRecoveryDisabledLanes=this.expiredLanes=this.warmLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0,this.entanglements=x(0),this.hiddenUpdates=x(null),this.identifierPrefix=r,this.onUncaughtError=i,this.onCaughtError=a,this.onRecoverableError=o,this.pooledCache=null,this.pooledCacheLanes=0,this.formState=c,this.incompleteTransitions=new Map}function ha(e,n,r,i,a,o,s,c,l,u,d,f){return e=new ma(e,n,r,s,l,u,d,f,c),n=1,o===!0&&(n|=24),o=t(3,null,null,n),e.current=o,o.stateNode=e,n=ye(),n.refCount++,e.pooledCache=n,n.refCount++,o.memoizedState={element:i,isDehydrated:r,cache:n},Ze(o),e}function ga(e){return e?(e=uc,e):uc}function _a(e){var t=e._reactInternals;if(t===void 0)throw typeof e.render==`function`?Error(r(188)):(e=Object.keys(e).join(`,`),Error(r(268,e)));return e=o(t),e=e===null?null:s(e),e===null?null:qa(e.stateNode)}function va(e,t,n,r,i,a){i=ga(i),r.context===null?r.context=i:r.pendingContext=i,r=$e(t),r.payload={element:n},a=a===void 0?null:a,a!==null&&(r.callback=a),n=et(e,r,t),n!==null&&(Si(n,e,t),tt(n,e,t))}function ya(e,t){if(e=e.memoizedState,e!==null&&e.dehydrated!==null){var n=e.retryLane;e.retryLane=n!==0&&n=u&&o>=f&&a<=d&&s<=p){e.splice(t,1);break}else if(i!==u||n.width!==l.width||ps){if(!(o!==f||n.height!==l.height||da)){u>i&&(l.width+=u-i,l.x=i),do&&(l.height+=f-o,l.y=o),pn&&(n=c)),c `)+` - -No matching component was found for: - `)+e.join(` > `)}return null},xa.getPublicRootInstance=function(e){if(e=e.current,!e.child)return null;switch(e.child.tag){case 27:case 5:return qa(e.child.stateNode);default:return e.child.stateNode}},xa.injectIntoDevTools=function(){var e={bundleType:0,version:Wa,rendererPackageName:Ga,currentDispatcherRef:Ua,reconcilerVersion:`19.2.0`};if(Ka!==null&&(e.rendererConfig=Ka),typeof __REACT_DEVTOOLS_GLOBAL_HOOK__>`u`)e=!1;else{var t=__REACT_DEVTOOLS_GLOBAL_HOOK__;if(t.isDisabled||!t.supportsFiber)e=!0;else{try{Oc=t.inject(e),kc=t}catch{}e=!!t.checkDCE}}return e},xa.isAlreadyRendering=function(){return(Su&6)!=0},xa.observeVisibleRects=function(e,t,n,i){if(!Ao)throw Error(r(363));e=yi(e,t);var a=Lo(e,n,i).disconnect;return{disconnect:function(){a()}}},xa.shouldError=function(){return null},xa.shouldSuspend=function(){return!1},xa.startHostTransition=function(e,t,i,a){if(e.tag!==5)throw Error(r(476));var o=yn(e).queue;vn(e,o,t,To,i===null?n:function(){var t=yn(e);return t.next===null&&(t=e.alternate.memoizedState),En(e,t.next.queue,{},bi()),i(a)})},xa.updateContainer=function(e,t,n,r){var i=t.current,a=bi();return va(i,a,e,t,n,r),a},xa.updateContainerSync=function(e,t,n,r){return va(t.current,2,e,t,n,r),2},xa},e.exports.default=e.exports,Object.defineProperty(e.exports,"__esModule",{value:!0})}(U_)),U_.exports}({exports:{}}).exports;var K_;function q_(){return K_||(K_=1,H_.exports=G_()),H_.exports}var J_=V_(q_());function Y_(e){let t=J_(e);return t.injectIntoDevTools(),t}var X_=0,Z_={},Q_=/^three(?=[A-Z])/,$_=e=>`${e[0].toUpperCase()}${e.slice(1)}`,ev=0,tv=e=>typeof e==`function`;function nv(e){if(tv(e)){let t=`${ev++}`;return Z_[t]=e,t}else Object.assign(Z_,e)}function rv(e,t){let n=$_(e),r=Z_[n];if(e!==`primitive`&&!r)throw Error(`R3F: ${n} is not part of the THREE namespace! Did you forget to extend? See: https://docs.pmnd.rs/react-three-fiber/api/objects#using-3rd-party-objects-declaratively`);if(e===`primitive`&&!t.object)throw Error(`R3F: Primitives without 'object' are invalid!`);if(t.args!==void 0&&!Array.isArray(t.args))throw Error(`R3F: The args prop must be an array!`)}function iv(e,t,n){var r;return e=$_(e)in Z_?e:e.replace(Q_,``),rv(e,t),e===`primitive`&&(r=t.object)!=null&&r.__r3f&&delete t.object.__r3f,o_(t.object,n,e,t)}function av(e){if(!e.isHidden){var t;e.props.attach&&(t=e.parent)!=null&&t.object?u_(e.parent,e):b_(e.object)&&(e.object.visible=!1),e.isHidden=!0,v_(e)}}function ov(e){if(e.isHidden){var t;e.props.attach&&(t=e.parent)!=null&&t.object?l_(e.parent,e):b_(e.object)&&e.props.visible!==!1&&(e.object.visible=!0),e.isHidden=!1,v_(e)}}function sv(e,t,n){let r=t.root.getState();if(!(!e.parent&&e.object!==r.scene)){if(!t.object){let e=Z_[$_(t.type)];t.object=t.props.object??new e(...t.props.args??[]),t.object.__r3f=t}if(__(t.object,t.props),t.props.attach)l_(e,t);else if(b_(t.object)&&b_(e.object)){let r=e.object.children.indexOf(n?.object);if(n&&r!==-1){let n=e.object.children.indexOf(t.object);if(n!==-1){e.object.children.splice(n,1);let i=n{try{e.dispose()}catch{}};typeof IS_REACT_ACT_ENVIRONMENT<`u`?t():(0,Pg.unstable_scheduleCallback)(Pg.unstable_IdlePriority,t)}}function dv(e,t,n){if(!t)return;t.parent=null;let r=e.children.indexOf(t);r!==-1&&e.children.splice(r,1),t.props.attach?u_(e,t):b_(t.object)&&b_(e.object)&&(e.object.remove(t.object),w_(Wg(t),t.object));let i=t.props.dispose!==null&&n!==!1;for(let e=t.children.length-1;e>=0;e--){let n=t.children[e];dv(t,n,i)}t.children.length=0,delete t.object.__r3f,i&&t.type!==`primitive`&&t.object.type!==`Scene`&&uv(t.object),n===void 0&&v_(t)}function fv(e,t){for(let n of[e,e.alternate])if(n!==null)if(typeof n.ref==`function`){n.refCleanup==null||n.refCleanup();let e=n.ref(t);typeof e==`function`&&(n.refCleanup=e)}else n.ref&&(n.ref.current=t)}var pv=[];function mv(){for(let[e]of pv){let t=e.parent;if(t){e.props.attach?u_(t,e):b_(e.object)&&b_(t.object)&&t.object.remove(e.object);for(let t of e.children)t.props.attach?u_(e,t):b_(t.object)&&b_(e.object)&&e.object.remove(t.object)}e.isHidden&&ov(e),e.object.__r3f&&delete e.object.__r3f,e.type!==`primitive`&&uv(e.object)}for(let[e,t,n]of pv){e.props=t;let r=e.parent;if(r){let t=Z_[$_(e.type)],i=e.object;e.object=e.props.object??new t(...e.props.args??[]),e.object.__r3f=e,fv(n,e.object),C_(Wg(e),i,e.object),__(e.object,e.props),e.props.attach?l_(r,e):b_(e.object)&&b_(r.object)&&r.object.add(e.object);for(let t of e.children)t.props.attach?l_(e,t):b_(t.object)&&b_(e.object)&&e.object.add(t.object);v_(e)}}pv.length=0}var hv=()=>{},gv={},_v=X_,vv=0,yv=4,bv=Y_({isPrimaryRenderer:!1,warnsIfNotActing:!1,supportsMutation:!0,supportsPersistence:!1,supportsHydration:!1,createInstance:iv,removeChild:dv,appendChild:cv,appendInitialChild:cv,insertBefore:lv,appendChildToContainer(e,t){let n=e.getState().scene.__r3f;!t||!n||cv(n,t)},removeChildFromContainer(e,t){let n=e.getState().scene.__r3f;!t||!n||dv(n,t)},insertInContainerBefore(e,t,n){let r=e.getState().scene.__r3f;!t||!n||!r||lv(r,t,n)},getRootHostContext:()=>gv,getChildHostContext:()=>gv,commitUpdate(e,t,n,r,i){var a;rv(t,r);let o=!1;if(e.type===`primitive`&&n.object!==r.object?o=!0:r.args?.length===n.args?.length?(a=r.args)!=null&&a.some((e,t)=>e!==n.args?.[t])&&(o=!0):o=!0,o)pv.push([e,{...r},i]);else{let t=m_(e,r);Object.keys(t).length&&(Object.assign(e.props,t),__(e.object,t))}(i.sibling===null||(i.flags&yv)===vv)&&mv()},finalizeInitialChildren:()=>!1,commitMount(){},getPublicInstance:e=>e?.object,prepareForCommit:()=>null,preparePortalMount:e=>o_(e.getState().scene,e,``,{}),resetAfterCommit:()=>{},shouldSetTextContent:()=>!1,clearContainer:()=>!1,hideInstance:av,unhideInstance:ov,createTextInstance:hv,hideTextInstance:hv,unhideTextInstance:hv,scheduleTimeout:typeof setTimeout==`function`?setTimeout:void 0,cancelTimeout:typeof clearTimeout==`function`?clearTimeout:void 0,noTimeout:-1,getInstanceFromNode:()=>null,beforeActiveInstanceBlur(){},afterActiveInstanceBlur(){},detachDeletedInstance(){},prepareScopeUpdate(){},getInstanceFromScope:()=>null,shouldAttemptEagerTransition:()=>!1,trackSchedulerEvent:()=>{},resolveEventType:()=>null,resolveEventTimeStamp:()=>-1.1,requestPostPaintCallback(){},maySuspendCommit:()=>!1,preloadInstance:()=>!0,suspendInstance(){},waitForCommitToBeReady:()=>null,NotPendingTransition:null,HostTransitionContext:v.createContext(null),setCurrentUpdatePriority(e){_v=e},getCurrentUpdatePriority(){return _v},resolveUpdatePriority(){if(_v!==X_)return _v;switch(typeof window<`u`&&window.event?.type){case`click`:case`contextmenu`:case`dblclick`:case`pointercancel`:case`pointerdown`:case`pointerup`:return z_;case`pointermove`:case`pointerout`:case`pointerover`:case`pointerenter`:case`pointerleave`:case`wheel`:return L_;default:return R_}},resetFormInstance(){},rendererPackageName:`@react-three/fiber`,rendererVersion:B_.version,applyViewTransitionName(e,t,n){},restoreViewTransitionName(e,t){},cancelViewTransitionName(e,t,n){},cancelRootViewTransitionName(e){},restoreRootViewTransitionName(e){},InstanceMeasurement:null,measureInstance:e=>null,wasInstanceInViewport:e=>!0,hasInstanceChanged:(e,t)=>!1,hasInstanceAffectedParent:(e,t)=>!1,suspendOnActiveViewTransition(e,t){},startGestureTransition:()=>null,startViewTransition:()=>null,stopViewTransition(e){},createViewTransitionInstance:e=>null,getCurrentGestureOffset(e){throw Error(`startGestureTransition is not yet supported in react-three-fiber.`)},cloneMutableInstance(e,t){return e},cloneMutableTextInstance(e){return e},cloneRootViewTransitionContainer(e){throw Error(`Not implemented.`)},removeRootViewTransitionClone(e,t){throw Error(`Not implemented.`)},createFragmentInstance:e=>null,updateFragmentInstanceFiber(e,t){},commitNewChildToFragmentInstance(e,t){},deleteChildFromFragmentInstance(e,t){},measureClonedInstance:e=>null,maySuspendCommitOnUpdate:(e,t,n)=>!1,maySuspendCommitInSyncRender:(e,t)=>!1,startSuspendingCommit:()=>null,getSuspendedCommitReason:(e,t)=>null}),xv=new Map,Sv={objects:`shallow`,strict:!1};function Cv(e,t){if(!t&&typeof HTMLCanvasElement<`u`&&e instanceof HTMLCanvasElement&&e.parentElement){let{width:t,height:n,top:r,left:i}=e.parentElement.getBoundingClientRect();return{width:t,height:n,top:r,left:i}}else if(!t&&typeof OffscreenCanvas<`u`&&e instanceof OffscreenCanvas)return{width:e.width,height:e.height,top:0,left:0};return{width:0,height:0,top:0,left:0,...t}}function wv(e){let t=xv.get(e),n=t?.fiber,r=t?.store;t&&console.warn(`R3F.createRoot should only be called once!`);let i=typeof reportError==`function`?reportError:console.error,a=r||O_(Uv,Wv),o=n||bv.createContainer(a,I_,null,!1,null,``,i,i,i,null);t||xv.set(e,{fiber:o,store:a});let s,c,l=!1,u=null;return{async configure(t={}){let n;u=new Promise(e=>n=e);let{gl:r,size:i,scene:o,events:d,onCreated:f,shadows:p=!1,linear:m=!1,flat:h=!1,legacy:g=!1,orthographic:_=!1,frameloop:v=`always`,dpr:y=[1,2],performance:b,raycaster:x,camera:S,onPointerMissed:C}=t,w=a.getState(),T=w.gl;if(!w.gl){let t={canvas:e,powerPreference:`high-performance`,antialias:!0,alpha:!0},n=typeof r==`function`?await r(t):r;T=E_(n)?n:new pg({...t,...r}),w.set({gl:T})}let E=w.raycaster;E||w.set({raycaster:E=new qd});let{params:D,...O}=x||{};if(t_.equ(O,E,Sv)||__(E,{...O}),t_.equ(D,E.params,Sv)||__(E,{params:{...E.params,...D}}),!w.camera||w.camera===c&&!t_.equ(c,S,Sv)){c=S;let e=S?.isCamera,t=e?S:_?new Nu(0,0,0,0,.1,1e3):new Ou(75,0,.1,1e3);e||(t.position.z=5,S&&(__(t,S),t.manual||(`aspect`in S||`left`in S||`right`in S||`bottom`in S||`top`in S)&&(t.manual=!0,t.updateProjectionMatrix())),!w.camera&&!(S!=null&&S.rotation)&&t.lookAt(0,0,0)),w.set({camera:t}),E.camera=t}if(!w.scene){let e;o!=null&&o.isScene?(e=o,o_(e,a,``,{})):(e=new Vr,o_(e,a,``,{}),o&&__(e,o)),w.set({scene:e})}d&&!w.events.handlers&&w.set({events:d(a)});let k=Cv(e,i);if(t_.equ(k,w.size,Sv)||w.setSize(k.width,k.height,k.top,k.left),y&&w.viewport.dpr!==$g(y)&&w.setDpr(y),w.frameloop!==v&&w.setFrameloop(v),w.onPointerMissed||w.set({onPointerMissed:C}),b&&!t_.equ(b,w.performance,Sv)&&w.set(e=>({performance:{...e.performance,...b}})),!w.xr){let e=(e,t)=>{let n=a.getState();n.frameloop!==`never`&&Wv(e,!0,n,t)},t=()=>{let t=a.getState();t.gl.xr.enabled=t.gl.xr.isPresenting,t.gl.xr.setAnimationLoop(t.gl.xr.isPresenting?e:null),t.gl.xr.isPresenting||Uv(t)},n={connect(){let e=a.getState().gl;e.xr.addEventListener(`sessionstart`,t),e.xr.addEventListener(`sessionend`,t)},disconnect(){let e=a.getState().gl;e.xr.removeEventListener(`sessionstart`,t),e.xr.removeEventListener(`sessionend`,t)}};typeof T.xr?.addEventListener==`function`&&n.connect(),w.set({xr:n})}if(T.shadowMap){let e=T.shadowMap.enabled,t=T.shadowMap.type;if(T.shadowMap.enabled=!!p,t_.boo(p))T.shadowMap.type=2;else if(t_.str(p)){let e={basic:0,percentage:1,soft:2,variance:3};T.shadowMap.type=e[p]??2}else t_.obj(p)&&Object.assign(T.shadowMap,p);(e!==T.shadowMap.enabled||t!==T.shadowMap.type)&&(T.shadowMap.needsUpdate=!0)}return Bn.enabled=!g,l||(T.outputColorSpace=m?ht:mt,T.toneMapping=h?0:4),w.legacy!==g&&w.set(()=>({legacy:g})),w.linear!==m&&w.set(()=>({linear:m})),w.flat!==h&&w.set(()=>({flat:h})),r&&!t_.fun(r)&&!E_(r)&&!t_.equ(r,T,Sv)&&__(T,r),s=f,l=!0,n(),this},render(t){return!l&&!u&&this.configure(),u.then(()=>{bv.updateContainer((0,Z.jsx)(Tv,{store:a,children:t,onCreated:s,rootElement:e}),o,null,()=>void 0)}),a},unmount(){Ev(e)}}}function Tv({store:e,children:t,onCreated:n,rootElement:r}){return Jg(()=>{let t=e.getState();t.set(e=>({internal:{...e.internal,active:!0}})),n&&n(t),e.getState().events.connected||t.events.connect==null||t.events.connect(r)},[]),(0,Z.jsx)(D_.Provider,{value:e,children:t})}function Ev(e,t){let n=xv.get(e),r=n?.fiber;if(r){let i=n?.store.getState();i&&(i.internal.active=!1),bv.updateContainer(null,r,null,()=>{i&&setTimeout(()=>{try{var n,r,a,o;i.events.disconnect==null||i.events.disconnect(),(n=i.gl)==null||(r=n.renderLists)==null||r.dispose==null||r.dispose(),(a=i.gl)==null||a.forceContextLoss==null||a.forceContextLoss(),(o=i.gl)!=null&&o.xr&&i.xr.disconnect(),r_(i.scene),xv.delete(e),t&&t(e)}catch{}},500)})}}function Dv(e,t,n){return(0,Z.jsx)(Ov,{children:e,container:t,state:n})}function Ov({state:e={},children:t,container:n}){let{events:r,size:i,...a}=e,o=k_(),[s]=v.useState(()=>new qd),[c]=v.useState(()=>new K),l=Yg((e,t)=>{let a;if(t.camera&&i){let n=t.camera;a=e.viewport.getCurrentViewport(n,new q,i),n!==e.camera&&y_(n,i)}return{...e,...t,scene:n,raycaster:s,pointer:c,mouse:c,previousRoot:o,events:{...e.events,...t.events,...r},size:{...e.size,...i},viewport:{...e.viewport,...a},setEvents:e=>t.set(t=>({...t,events:{...t.events,...e}}))}}),u=v.useMemo(()=>{let e=wg((e,t)=>({...a,set:e,get:t})),t=t=>e.setState(e=>l.current(t,e));return t(o.getState()),o.subscribe(t),e},[o,n]);return(0,Z.jsx)(Z.Fragment,{children:bv.createPortal((0,Z.jsx)(D_.Provider,{value:u,children:t}),u,null)})}var kv=new Set,Av=new Set,jv=new Set;function Mv(e,t){if(e.size)for(let{callback:n}of e.values())n(t)}function Nv(e,t){switch(e){case`before`:return Mv(kv,t);case`after`:return Mv(Av,t);case`tail`:return Mv(jv,t)}}var Pv,Fv;function Iv(e,t,n){let r=t.clock.getDelta();t.frameloop===`never`&&typeof e==`number`&&(r=e-t.clock.elapsedTime,t.clock.oldTime=t.clock.elapsedTime,t.clock.elapsedTime=e),Pv=t.internal.subscribers;for(let e=0;e0)&&!((t=Vv.gl.xr)!=null&&t.isPresenting)&&(zv+=Iv(e,Vv))}if(Rv=!1,Nv(`after`,e),zv===0)return Nv(`tail`,e),Lv=!1,cancelAnimationFrame(Bv)}function Uv(e,t=1){var n;if(!e)return xv.forEach(e=>Uv(e.store.getState(),t));(n=e.gl.xr)!=null&&n.isPresenting||!e.internal.active||e.frameloop===`never`||(t>1?e.internal.frames=Math.min(60,e.internal.frames+t):Rv?e.internal.frames=2:e.internal.frames=1,Lv||(Lv=!0,requestAnimationFrame(Hv)))}function Wv(e,t=!0,n,r){if(t&&Nv(`before`,e),n)Iv(e,n,r);else for(let t of xv.values())Iv(e,t.store.getState());t&&Nv(`after`,e)}var Gv={onClick:[`click`,!1],onContextMenu:[`contextmenu`,!1],onDoubleClick:[`dblclick`,!1],onWheel:[`wheel`,!0],onPointerDown:[`pointerdown`,!0],onPointerUp:[`pointerup`,!0],onPointerLeave:[`pointerleave`,!0],onPointerMove:[`pointermove`,!0],onPointerCancel:[`pointercancel`,!0],onLostPointerCapture:[`lostpointercapture`,!0]};function Kv(e){let{handlePointer:t}=T_(e);return{priority:1,enabled:!0,compute(e,t,n){t.pointer.set(e.offsetX/t.size.width*2-1,-(e.offsetY/t.size.height)*2+1),t.raycaster.setFromCamera(t.pointer,t.camera)},connected:void 0,handlers:Object.keys(Gv).reduce((e,n)=>({...e,[n]:t(n)}),{}),update:()=>{var t;let{events:n,internal:r}=e.getState();(t=r.lastEvent)!=null&&t.current&&n.handlers&&n.handlers.onPointerMove(r.lastEvent.current)},connect:t=>{let{set:n,events:r}=e.getState();if(r.disconnect==null||r.disconnect(),n(e=>({events:{...e.events,connected:t}})),r.handlers)for(let e in r.handlers){let n=r.handlers[e],[i,a]=Gv[e];t.addEventListener(i,n,{passive:a})}},disconnect:()=>{let{set:t,events:n}=e.getState();if(n.connected){if(n.handlers)for(let e in n.handlers){let t=n.handlers[e],[r]=Gv[e];n.connected.removeEventListener(r,t)}t(e=>({events:{...e.events,connected:void 0}}))}}}}function qv(e,t){let n;return(...r)=>{window.clearTimeout(n),n=window.setTimeout(()=>e(...r),t)}}function Jv({debounce:e,scroll:t,polyfill:n,offsetSize:r}={debounce:0,scroll:!1,offsetSize:!1}){let i=n||(typeof window>`u`?class{}:window.ResizeObserver);if(!i)throw Error(`This browser does not support ResizeObserver out of the box. See: https://github.com/react-spring/react-use-measure/#resize-observer-polyfills`);let[a,o]=(0,v.useState)({left:0,top:0,width:0,height:0,bottom:0,right:0,x:0,y:0}),s=(0,v.useRef)({element:null,scrollContainers:null,resizeObserver:null,lastBounds:a,orientationHandler:null}),c=e?typeof e==`number`?e:e.scroll:null,l=e?typeof e==`number`?e:e.resize:null,u=(0,v.useRef)(!1);(0,v.useEffect)(()=>(u.current=!0,()=>void(u.current=!1)));let[d,f,p]=(0,v.useMemo)(()=>{let e=()=>{if(!s.current.element)return;let{left:e,top:t,width:n,height:i,bottom:a,right:c,x:l,y:d}=s.current.element.getBoundingClientRect(),f={left:e,top:t,width:n,height:i,bottom:a,right:c,x:l,y:d};s.current.element instanceof HTMLElement&&r&&(f.height=s.current.element.offsetHeight,f.width=s.current.element.offsetWidth),Object.freeze(f),u.current&&!$v(s.current.lastBounds,f)&&o(s.current.lastBounds=f)};return[e,l?qv(e,l):e,c?qv(e,c):e]},[o,r,c,l]);function m(){s.current.scrollContainers&&(s.current.scrollContainers.forEach(e=>e.removeEventListener(`scroll`,p,!0)),s.current.scrollContainers=null),s.current.resizeObserver&&(s.current.resizeObserver.disconnect(),s.current.resizeObserver=null),s.current.orientationHandler&&(`orientation`in screen&&`removeEventListener`in screen.orientation?screen.orientation.removeEventListener(`change`,s.current.orientationHandler):`onorientationchange`in window&&window.removeEventListener(`orientationchange`,s.current.orientationHandler))}function h(){s.current.element&&(s.current.resizeObserver=new i(p),s.current.resizeObserver.observe(s.current.element),t&&s.current.scrollContainers&&s.current.scrollContainers.forEach(e=>e.addEventListener(`scroll`,p,{capture:!0,passive:!0})),s.current.orientationHandler=()=>{p()},`orientation`in screen&&`addEventListener`in screen.orientation?screen.orientation.addEventListener(`change`,s.current.orientationHandler):`onorientationchange`in window&&window.addEventListener(`orientationchange`,s.current.orientationHandler))}return Xv(p,!!t),Yv(f),(0,v.useEffect)(()=>{m(),h()},[t,p,f]),(0,v.useEffect)(()=>m,[]),[e=>{!e||e===s.current.element||(m(),s.current.element=e,s.current.scrollContainers=Zv(e),h())},a,d]}function Yv(e){(0,v.useEffect)(()=>{let t=e;return window.addEventListener(`resize`,t),()=>void window.removeEventListener(`resize`,t)},[e])}function Xv(e,t){(0,v.useEffect)(()=>{if(t){let t=e;return window.addEventListener(`scroll`,t,{capture:!0,passive:!0}),()=>void window.removeEventListener(`scroll`,t,!0)}},[e,t])}function Zv(e){let t=[];if(!e||e===document.body)return t;let{overflow:n,overflowX:r,overflowY:i}=window.getComputedStyle(e);return[n,r,i].some(e=>e===`auto`||e===`scroll`)&&t.push(e),[...t,...Zv(e.parentElement)]}var Qv=[`x`,`y`,`top`,`bottom`,`left`,`right`,`width`,`height`],$v=(e,t)=>Qv.every(n=>e[n]===t[n]);function ey({ref:e,children:t,fallback:n,resize:r,style:i,gl:a,events:o=Kv,eventSource:s,eventPrefix:c,shadows:l,linear:u,flat:d,legacy:f,orthographic:p,frameloop:m,dpr:h,performance:g,raycaster:_,camera:y,scene:b,onPointerMissed:x,onCreated:S,...C}){v.useMemo(()=>nv(Xf),[]);let w=Xg(),[T,E]=Jv({scroll:!0,debounce:{scroll:50,resize:0},...r}),D=v.useRef(null),O=v.useRef(null);v.useImperativeHandle(e,()=>D.current);let k=Yg(x),[A,j]=v.useState(!1),[M,N]=v.useState(!1);if(A)throw A;if(M)throw M;let P=v.useRef(null);return Jg(()=>{let e=D.current;if(E.width>0&&E.height>0&&e){P.current||=wv(e);async function n(){await P.current.configure({gl:a,scene:b,events:o,shadows:l,linear:u,flat:d,legacy:f,orthographic:p,frameloop:m,dpr:h,performance:g,raycaster:_,camera:y,size:E,onPointerMissed:(...e)=>k.current==null?void 0:k.current(...e),onCreated:e=>{e.events.connect==null||e.events.connect(s?Kg(s)?s.current:s:O.current),c&&e.setEvents({compute:(e,t)=>{let n=e[c+`X`],r=e[c+`Y`];t.pointer.set(n/t.size.width*2-1,-(r/t.size.height)*2+1),t.raycaster.setFromCamera(t.pointer,t.camera)}}),S?.(e)}}),P.current.render((0,Z.jsx)(w,{children:(0,Z.jsx)(Qg,{set:N,children:(0,Z.jsx)(v.Suspense,{fallback:(0,Z.jsx)(Zg,{set:j}),children:t??null})})}))}n()}}),v.useEffect(()=>{let e=D.current;if(e)return()=>Ev(e)},[]),(0,Z.jsx)(`div`,{ref:O,style:{position:`relative`,width:`100%`,height:`100%`,overflow:`hidden`,pointerEvents:s?`none`:`auto`,...i},...C,children:(0,Z.jsx)(`div`,{ref:T,style:{width:`100%`,height:`100%`},children:(0,Z.jsx)(`canvas`,{ref:D,style:{display:`block`},children:n})})})}function ty(e){return(0,Z.jsx)(Rg,{children:(0,Z.jsx)(ey,{...e})})}function ny(){return ny=Object.assign?Object.assign.bind():function(e){for(var t=1;tMath.PI/2}function ly(e,t,n,r){let i=ry.setFromMatrixPosition(e.matrixWorld),a=i.clone();a.project(t),oy.set(a.x,a.y),n.setFromCamera(oy,t);let o=n.intersectObjects(r,!0);if(o.length){let e=o[0].distance;return i.distanceTo(n.ray.origin)Math.abs(e)<1e-10?0:e;function py(e,t,n=``){let r=`matrix3d(`;for(let n=0;n!==16;n++)r+=fy(t[n]*e.elements[n])+(n===15?`)`:`,`);return n+r}var my=(e=>t=>py(t,e))([1,-1,1,1,1,-1,1,1,1,-1,1,1,1,-1,1,1]),hy=(e=>(t,n)=>py(t,e(n),`translate(-50%,-50%)`))(e=>[1/e,1/e,1/e,1,-1/e,-1/e,-1/e,-1,1/e,1/e,1/e,1,1,1,1,1]);function gy(e){return e&&typeof e==`object`&&`current`in e}var _y=v.forwardRef(({children:e,eps:t=.001,style:n,className:r,prepend:i,center:a,fullscreen:o,portal:s,distanceFactor:c,sprite:l=!1,transform:u=!1,occlude:d,onOcclude:f,castShadow:p,receiveShadow:m,material:h,geometry:g,zIndexRange:_=[16777271,0],calculatePosition:b=sy,as:x=`div`,wrapperClass:S,pointerEvents:C=`auto`,...w},T)=>{let{gl:E,camera:D,scene:O,size:k,raycaster:A,events:j,viewport:M}=A_(),[N]=v.useState(()=>document.createElement(x)),P=v.useRef(null),F=v.useRef(null),I=v.useRef(0),L=v.useRef([0,0]),ee=v.useRef(null),R=v.useRef(null),te=s?.current||j.connected||E.domElement.parentNode,z=v.useRef(null),B=v.useRef(!1),V=v.useMemo(()=>d&&d!==`blending`||Array.isArray(d)&&d.length&&gy(d[0]),[d]);v.useLayoutEffect(()=>{let e=E.domElement;d&&d===`blending`?(e.style.zIndex=`${Math.floor(_[0]/2)}`,e.style.position=`absolute`,e.style.pointerEvents=`none`):(e.style.zIndex=null,e.style.position=null,e.style.pointerEvents=null)},[d]),v.useLayoutEffect(()=>{if(F.current){let e=P.current=y.createRoot(N);if(O.updateMatrixWorld(),u)N.style.cssText=`position:absolute;top:0;left:0;pointer-events:none;overflow:hidden;`;else{let e=b(F.current,D,k);N.style.cssText=`position:absolute;top:0;left:0;transform:translate3d(${e[0]}px,${e[1]}px,0);transform-origin:0 0;`}return te&&(i?te.prepend(N):te.appendChild(N)),()=>{te&&te.removeChild(N),e.unmount()}}},[te,u]),v.useLayoutEffect(()=>{S&&(N.className=S)},[S]);let ne=v.useMemo(()=>u?{position:`absolute`,top:0,left:0,width:k.width,height:k.height,transformStyle:`preserve-3d`,pointerEvents:`none`}:{position:`absolute`,transform:a?`translate3d(-50%,-50%,0)`:`none`,...o&&{top:-k.height/2,left:-k.width/2,width:k.width,height:k.height},...n},[n,a,o,k,u]),re=v.useMemo(()=>({position:`absolute`,pointerEvents:C}),[C]);v.useLayoutEffect(()=>{if(B.current=!1,u){var t;(t=P.current)==null||t.render(v.createElement(`div`,{ref:ee,style:ne},v.createElement(`div`,{ref:R,style:re},v.createElement(`div`,{ref:T,className:r,style:n,children:e}))))}else{var i;(i=P.current)==null||i.render(v.createElement(`div`,{ref:T,style:ne,className:r,children:e}))}});let ie=v.useRef(!0);j_(e=>{if(F.current){D.updateMatrixWorld(),F.current.updateWorldMatrix(!0,!1);let e=u?L.current:b(F.current,D,k);if(u||Math.abs(I.current-D.zoom)>t||Math.abs(L.current[0]-e[0])>t||Math.abs(L.current[1]-e[1])>t){let t=cy(F.current,D),n=!1;V&&(Array.isArray(d)?n=d.map(e=>e.current):d!==`blending`&&(n=[O]));let r=ie.current;n?ie.current=ly(F.current,D,A,n)&&!t:ie.current=!t,r!==ie.current&&(f?f(!ie.current):N.style.display=ie.current?`block`:`none`);let i=Math.floor(_[0]/2),a=d?V?[_[0],i]:[i-1,0]:_;if(N.style.zIndex=`${dy(F.current,D,a)}`,u){let[e,t]=[k.width/2,k.height/2],n=D.projectionMatrix.elements[5]*t,{isOrthographicCamera:r,top:i,left:a,bottom:o,right:s}=D,u=my(D.matrixWorldInverse),d=r?`scale(${n})translate(${fy(-(s+a)/2)}px,${fy((i+o)/2)}px)`:`translateZ(${n}px)`,f=F.current.matrixWorld;l&&(f=D.matrixWorldInverse.clone().transpose().copyPosition(f).scale(F.current.scale),f.elements[3]=f.elements[7]=f.elements[11]=0,f.elements[15]=1),N.style.width=k.width+`px`,N.style.height=k.height+`px`,N.style.perspective=r?``:`${n}px`,ee.current&&R.current&&(ee.current.style.transform=`${d}${u}translate(${e}px,${t}px)`,R.current.style.transform=hy(f,1/((c||10)/400)))}else{let t=c===void 0?1:uy(F.current,D)*c;N.style.transform=`translate3d(${e[0]}px,${e[1]}px,0) scale(${t})`}L.current=e,I.current=D.zoom}}if(!V&&z.current&&!B.current)if(u){if(ee.current){let e=ee.current.children[0];if(e!=null&&e.clientWidth&&e!=null&&e.clientHeight){let{isOrthographicCamera:t}=D;if(t||g)w.scale&&(Array.isArray(w.scale)?w.scale instanceof q?z.current.scale.copy(w.scale.clone().divideScalar(1)):z.current.scale.set(1/w.scale[0],1/w.scale[1],1/w.scale[2]):z.current.scale.setScalar(1/w.scale));else{let t=(c||10)/400,n=e.clientWidth*t,r=e.clientHeight*t;z.current.scale.set(n,r,1)}B.current=!0}}}else{let t=N.children[0];if(t!=null&&t.clientWidth&&t!=null&&t.clientHeight){let e=1/M.factor,n=t.clientWidth*e,r=t.clientHeight*e;z.current.scale.set(n,r,1),B.current=!0}z.current.lookAt(e.camera.position)}});let ae=v.useMemo(()=>({vertexShader:u?void 0:` - /* - This shader is from the THREE's SpriteMaterial. - We need to turn the backing plane into a Sprite - (make it always face the camera) if "transfrom" - is false. - */ - #include - - void main() { - vec2 center = vec2(0., 1.); - float rotation = 0.0; - - // This is somewhat arbitrary, but it seems to work well - // Need to figure out how to derive this dynamically if it even matters - float size = 0.03; - - vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 ); - vec2 scale; - scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) ); - scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) ); - - bool isPerspective = isPerspectiveMatrix( projectionMatrix ); - if ( isPerspective ) scale *= - mvPosition.z; - - vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale * size; - vec2 rotatedPosition; - rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y; - rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y; - mvPosition.xy += rotatedPosition; - - gl_Position = projectionMatrix * mvPosition; - } - `,fragmentShader:` - void main() { - gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); - } - `}),[u]);return v.createElement(`group`,ny({},w,{ref:F}),d&&!V&&v.createElement(`mesh`,{castShadow:p,receiveShadow:m,ref:z},g||v.createElement(`planeGeometry`,null),h||v.createElement(`shaderMaterial`,{side:2,vertexShader:ae.vertexShader,fragmentShader:ae.fragmentShader})))});function vy(e,t=`pointer`,n=`auto`,r=document.body){v.useEffect(()=>{if(e)return r.style.cursor=t,()=>void(r.style.cursor=n)},[e])}var yy=e=>e;function by(e,t=yy){let n=v.useSyncExternalStore(e.subscribe,v.useCallback(()=>t(e.getState()),[e,t]),v.useCallback(()=>t(e.getInitialState()),[e,t]));return v.useDebugValue(n),n}var xy=e=>{let t=yg(e),n=e=>by(t,e);return Object.assign(n,t),n},Sy=(e=>e?xy(e):xy),Cy=parseInt(`184`.replace(/\D+/g,``)),wy=Cy>=125?`uv1`:`uv2`,Ty=Object.defineProperty,Ey=(e,t,n)=>t in e?Ty(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,Dy=(e,t,n)=>(Ey(e,typeof t==`symbol`?t:t+``,n),n),Oy=class{constructor(){Dy(this,`_listeners`)}addEventListener(e,t){this._listeners===void 0&&(this._listeners={});let n=this._listeners;n[e]===void 0&&(n[e]=[]),n[e].indexOf(t)===-1&&n[e].push(t)}hasEventListener(e,t){if(this._listeners===void 0)return!1;let n=this._listeners;return n[e]!==void 0&&n[e].indexOf(t)!==-1}removeEventListener(e,t){if(this._listeners===void 0)return;let n=this._listeners[e];if(n!==void 0){let e=n.indexOf(t);e!==-1&&n.splice(e,1)}}dispatchEvent(e){if(this._listeners===void 0)return;let t=this._listeners[e.type];if(t!==void 0){e.target=this;let n=t.slice(0);for(let t=0,r=n.length;tt in e?ky(e,t,{enumerable:!0,configurable:!0,writable:!0,value:n}):e[t]=n,jy=(e,t,n)=>(Ay(e,typeof t==`symbol`?t:t+``,n),n),My=new wa,Ny=new mo,Py=Math.cos(Math.PI/180*70),Fy=(e,t)=>(e%t+t)%t,Iy=class extends Oy{constructor(e,t){super(),jy(this,`object`),jy(this,`domElement`),jy(this,`enabled`,!0),jy(this,`target`,new q),jy(this,`minDistance`,0),jy(this,`maxDistance`,1/0),jy(this,`minZoom`,0),jy(this,`maxZoom`,1/0),jy(this,`minPolarAngle`,0),jy(this,`maxPolarAngle`,Math.PI),jy(this,`minAzimuthAngle`,-1/0),jy(this,`maxAzimuthAngle`,1/0),jy(this,`enableDamping`,!1),jy(this,`dampingFactor`,.05),jy(this,`enableZoom`,!0),jy(this,`zoomSpeed`,1),jy(this,`enableRotate`,!0),jy(this,`rotateSpeed`,1),jy(this,`enablePan`,!0),jy(this,`panSpeed`,1),jy(this,`screenSpacePanning`,!0),jy(this,`keyPanSpeed`,7),jy(this,`zoomToCursor`,!1),jy(this,`autoRotate`,!1),jy(this,`autoRotateSpeed`,2),jy(this,`reverseOrbit`,!1),jy(this,`reverseHorizontalOrbit`,!1),jy(this,`reverseVerticalOrbit`,!1),jy(this,`keys`,{LEFT:`ArrowLeft`,UP:`ArrowUp`,RIGHT:`ArrowRight`,BOTTOM:`ArrowDown`}),jy(this,`mouseButtons`,{LEFT:b.ROTATE,MIDDLE:b.DOLLY,RIGHT:b.PAN}),jy(this,`touches`,{ONE:x.ROTATE,TWO:x.DOLLY_PAN}),jy(this,`target0`),jy(this,`position0`),jy(this,`zoom0`),jy(this,`_domElementKeyEvents`,null),jy(this,`getPolarAngle`),jy(this,`getAzimuthalAngle`),jy(this,`setPolarAngle`),jy(this,`setAzimuthalAngle`),jy(this,`getDistance`),jy(this,`getZoomScale`),jy(this,`listenToKeyEvents`),jy(this,`stopListenToKeyEvents`),jy(this,`saveState`),jy(this,`reset`),jy(this,`update`),jy(this,`connect`),jy(this,`dispose`),jy(this,`dollyIn`),jy(this,`dollyOut`),jy(this,`getScale`),jy(this,`setScale`),this.object=e,this.domElement=t,this.target0=this.target.clone(),this.position0=this.object.position.clone(),this.zoom0=this.object.zoom,this.getPolarAngle=()=>l.phi,this.getAzimuthalAngle=()=>l.theta,this.setPolarAngle=e=>{let t=Fy(e,2*Math.PI),r=l.phi;r<0&&(r+=2*Math.PI),t<0&&(t+=2*Math.PI);let i=Math.abs(t-r);2*Math.PI-i{let t=Fy(e,2*Math.PI),r=l.theta;r<0&&(r+=2*Math.PI),t<0&&(t+=2*Math.PI);let i=Math.abs(t-r);2*Math.PI-in.object.position.distanceTo(n.target),this.listenToKeyEvents=e=>{e.addEventListener(`keydown`,Se),this._domElementKeyEvents=e},this.stopListenToKeyEvents=()=>{this._domElementKeyEvents.removeEventListener(`keydown`,Se),this._domElementKeyEvents=null},this.saveState=()=>{n.target0.copy(n.target),n.position0.copy(n.object.position),n.zoom0=n.object.zoom},this.reset=()=>{n.target.copy(n.target0),n.object.position.copy(n.position0),n.object.zoom=n.zoom0,n.object.updateProjectionMatrix(),n.dispatchEvent(r),n.update(),s=o.NONE},this.update=(()=>{let t=new q,i=new q(0,1,0),a=new Mn().setFromUnitVectors(e.up,i),p=a.clone().invert(),m=new q,h=new Mn,g=2*Math.PI;return function(){let _=n.object.position;a.setFromUnitVectors(e.up,i),p.copy(a).invert(),t.copy(_).sub(n.target),t.applyQuaternion(a),l.setFromVector3(t),n.autoRotate&&s===o.NONE&&j(k()),n.enableDamping?(l.theta+=u.theta*n.dampingFactor,l.phi+=u.phi*n.dampingFactor):(l.theta+=u.theta,l.phi+=u.phi);let v=n.minAzimuthAngle,y=n.maxAzimuthAngle;isFinite(v)&&isFinite(y)&&(v<-Math.PI?v+=g:v>Math.PI&&(v-=g),y<-Math.PI?y+=g:y>Math.PI&&(y-=g),v<=y?l.theta=Math.max(v,Math.min(y,l.theta)):l.theta=l.theta>(v+y)/2?Math.max(v,l.theta):Math.min(y,l.theta)),l.phi=Math.max(n.minPolarAngle,Math.min(n.maxPolarAngle,l.phi)),l.makeSafe(),n.enableDamping===!0?n.target.addScaledVector(f,n.dampingFactor):n.target.add(f),n.zoomToCursor&&E||n.object.isOrthographicCamera?l.radius=te(l.radius):l.radius=te(l.radius*d),t.setFromSpherical(l),t.applyQuaternion(p),_.copy(n.target).add(t),n.object.matrixAutoUpdate||n.object.updateMatrix(),n.object.lookAt(n.target),n.enableDamping===!0?(u.theta*=1-n.dampingFactor,u.phi*=1-n.dampingFactor,f.multiplyScalar(1-n.dampingFactor)):(u.set(0,0,0),f.set(0,0,0));let b=!1;if(n.zoomToCursor&&E){let r=null;if(n.object instanceof Ou&&n.object.isPerspectiveCamera){let e=t.length();r=te(e*d);let i=e-r;n.object.position.addScaledVector(w,i),n.object.updateMatrixWorld()}else if(n.object.isOrthographicCamera){let e=new q(T.x,T.y,0);e.unproject(n.object),n.object.zoom=Math.max(n.minZoom,Math.min(n.maxZoom,n.object.zoom/d)),n.object.updateProjectionMatrix(),b=!0;let i=new q(T.x,T.y,0);i.unproject(n.object),n.object.position.sub(i).add(e),n.object.updateMatrixWorld(),r=t.length()}else console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled.`),n.zoomToCursor=!1;r!==null&&(n.screenSpacePanning?n.target.set(0,0,-1).transformDirection(n.object.matrix).multiplyScalar(r).add(n.object.position):(My.origin.copy(n.object.position),My.direction.set(0,0,-1).transformDirection(n.object.matrix),Math.abs(n.object.up.dot(My.direction))c||8*(1-h.dot(n.object.quaternion))>c?(n.dispatchEvent(r),m.copy(n.object.position),h.copy(n.object.quaternion),b=!1,!0):!1}})(),this.connect=e=>{n.domElement=e,n.domElement.style.touchAction=`none`,n.domElement.addEventListener(`contextmenu`,we),n.domElement.addEventListener(`pointerdown`,ge),n.domElement.addEventListener(`pointercancel`,ve),n.domElement.addEventListener(`wheel`,xe)},this.dispose=()=>{var e,t,r,i,a,o;n.domElement&&(n.domElement.style.touchAction=`auto`),(e=n.domElement)==null||e.removeEventListener(`contextmenu`,we),(t=n.domElement)==null||t.removeEventListener(`pointerdown`,ge),(r=n.domElement)==null||r.removeEventListener(`pointercancel`,ve),(i=n.domElement)==null||i.removeEventListener(`wheel`,xe),(a=n.domElement)==null||a.ownerDocument.removeEventListener(`pointermove`,_e),(o=n.domElement)==null||o.ownerDocument.removeEventListener(`pointerup`,ve),n._domElementKeyEvents!==null&&n._domElementKeyEvents.removeEventListener(`keydown`,Se)};let n=this,r={type:`change`},i={type:`start`},a={type:`end`},o={NONE:-1,ROTATE:0,DOLLY:1,PAN:2,TOUCH_ROTATE:3,TOUCH_PAN:4,TOUCH_DOLLY_PAN:5,TOUCH_DOLLY_ROTATE:6},s=o.NONE,c=1e-6,l=new Zd,u=new Zd,d=1,f=new q,p=new K,m=new K,h=new K,g=new K,_=new K,v=new K,y=new K,S=new K,C=new K,w=new q,T=new K,E=!1,D=[],O={};function k(){return 2*Math.PI/60/60*n.autoRotateSpeed}function A(){return .95**n.zoomSpeed}function j(e){n.reverseOrbit||n.reverseHorizontalOrbit?u.theta+=e:u.theta-=e}function M(e){n.reverseOrbit||n.reverseVerticalOrbit?u.phi+=e:u.phi-=e}let N=(()=>{let e=new q;return function(t,n){e.setFromMatrixColumn(n,0),e.multiplyScalar(-t),f.add(e)}})(),P=(()=>{let e=new q;return function(t,r){n.screenSpacePanning===!0?e.setFromMatrixColumn(r,1):(e.setFromMatrixColumn(r,0),e.crossVectors(n.object.up,e)),e.multiplyScalar(t),f.add(e)}})(),F=(()=>{let e=new q;return function(t,r){let i=n.domElement;if(i&&n.object instanceof Ou&&n.object.isPerspectiveCamera){let a=n.object.position;e.copy(a).sub(n.target);let o=e.length();o*=Math.tan(n.object.fov/2*Math.PI/180),N(2*t*o/i.clientHeight,n.object.matrix),P(2*r*o/i.clientHeight,n.object.matrix)}else i&&n.object instanceof Nu&&n.object.isOrthographicCamera?(N(t*(n.object.right-n.object.left)/n.object.zoom/i.clientWidth,n.object.matrix),P(r*(n.object.top-n.object.bottom)/n.object.zoom/i.clientHeight,n.object.matrix)):(console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.`),n.enablePan=!1)}})();function I(e){n.object instanceof Ou&&n.object.isPerspectiveCamera||n.object instanceof Nu&&n.object.isOrthographicCamera?d=e:(console.warn(`WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.`),n.enableZoom=!1)}function L(e){I(d/e)}function ee(e){I(d*e)}function R(e){if(!n.zoomToCursor||!n.domElement)return;E=!0;let t=n.domElement.getBoundingClientRect(),r=e.clientX-t.left,i=e.clientY-t.top,a=t.width,o=t.height;T.x=r/a*2-1,T.y=-(i/o)*2+1,w.set(T.x,T.y,1).unproject(n.object).sub(n.object.position).normalize()}function te(e){return Math.max(n.minDistance,Math.min(n.maxDistance,e))}function z(e){p.set(e.clientX,e.clientY)}function B(e){R(e),y.set(e.clientX,e.clientY)}function V(e){g.set(e.clientX,e.clientY)}function ne(e){m.set(e.clientX,e.clientY),h.subVectors(m,p).multiplyScalar(n.rotateSpeed);let t=n.domElement;t&&(j(2*Math.PI*h.x/t.clientHeight),M(2*Math.PI*h.y/t.clientHeight)),p.copy(m),n.update()}function re(e){S.set(e.clientX,e.clientY),C.subVectors(S,y),C.y>0?L(A()):C.y<0&&ee(A()),y.copy(S),n.update()}function ie(e){_.set(e.clientX,e.clientY),v.subVectors(_,g).multiplyScalar(n.panSpeed),F(v.x,v.y),g.copy(_),n.update()}function ae(e){R(e),e.deltaY<0?ee(A()):e.deltaY>0&&L(A()),n.update()}function oe(e){let t=!1;switch(e.code){case n.keys.UP:F(0,n.keyPanSpeed),t=!0;break;case n.keys.BOTTOM:F(0,-n.keyPanSpeed),t=!0;break;case n.keys.LEFT:F(n.keyPanSpeed,0),t=!0;break;case n.keys.RIGHT:F(-n.keyPanSpeed,0),t=!0;break}t&&(e.preventDefault(),n.update())}function se(){if(D.length==1)p.set(D[0].pageX,D[0].pageY);else{let e=.5*(D[0].pageX+D[1].pageX),t=.5*(D[0].pageY+D[1].pageY);p.set(e,t)}}function ce(){if(D.length==1)g.set(D[0].pageX,D[0].pageY);else{let e=.5*(D[0].pageX+D[1].pageX),t=.5*(D[0].pageY+D[1].pageY);g.set(e,t)}}function H(){let e=D[0].pageX-D[1].pageX,t=D[0].pageY-D[1].pageY,n=Math.sqrt(e*e+t*t);y.set(0,n)}function le(){n.enableZoom&&H(),n.enablePan&&ce()}function ue(){n.enableZoom&&H(),n.enableRotate&&se()}function de(e){if(D.length==1)m.set(e.pageX,e.pageY);else{let t=De(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);m.set(n,r)}h.subVectors(m,p).multiplyScalar(n.rotateSpeed);let t=n.domElement;t&&(j(2*Math.PI*h.x/t.clientHeight),M(2*Math.PI*h.y/t.clientHeight)),p.copy(m)}function fe(e){if(D.length==1)_.set(e.pageX,e.pageY);else{let t=De(e),n=.5*(e.pageX+t.x),r=.5*(e.pageY+t.y);_.set(n,r)}v.subVectors(_,g).multiplyScalar(n.panSpeed),F(v.x,v.y),g.copy(_)}function pe(e){let t=De(e),r=e.pageX-t.x,i=e.pageY-t.y,a=Math.sqrt(r*r+i*i);S.set(0,a),C.set(0,(S.y/y.y)**+n.zoomSpeed),L(C.y),y.copy(S)}function me(e){n.enableZoom&&pe(e),n.enablePan&&fe(e)}function he(e){n.enableZoom&&pe(e),n.enableRotate&&de(e)}function ge(e){var t,r;n.enabled!==!1&&(D.length===0&&((t=n.domElement)==null||t.ownerDocument.addEventListener(`pointermove`,_e),(r=n.domElement)==null||r.ownerDocument.addEventListener(`pointerup`,ve)),Te(e),e.pointerType===`touch`?U(e):ye(e))}function _e(e){n.enabled!==!1&&(e.pointerType===`touch`?Ce(e):be(e))}function ve(e){var t,r,i;W(e),D.length===0&&((t=n.domElement)==null||t.releasePointerCapture(e.pointerId),(r=n.domElement)==null||r.ownerDocument.removeEventListener(`pointermove`,_e),(i=n.domElement)==null||i.ownerDocument.removeEventListener(`pointerup`,ve)),n.dispatchEvent(a),s=o.NONE}function ye(e){let t;switch(e.button){case 0:t=n.mouseButtons.LEFT;break;case 1:t=n.mouseButtons.MIDDLE;break;case 2:t=n.mouseButtons.RIGHT;break;default:t=-1}switch(t){case b.DOLLY:if(n.enableZoom===!1)return;B(e),s=o.DOLLY;break;case b.ROTATE:if(e.ctrlKey||e.metaKey||e.shiftKey){if(n.enablePan===!1)return;V(e),s=o.PAN}else{if(n.enableRotate===!1)return;z(e),s=o.ROTATE}break;case b.PAN:if(e.ctrlKey||e.metaKey||e.shiftKey){if(n.enableRotate===!1)return;z(e),s=o.ROTATE}else{if(n.enablePan===!1)return;V(e),s=o.PAN}break;default:s=o.NONE}s!==o.NONE&&n.dispatchEvent(i)}function be(e){if(n.enabled!==!1)switch(s){case o.ROTATE:if(n.enableRotate===!1)return;ne(e);break;case o.DOLLY:if(n.enableZoom===!1)return;re(e);break;case o.PAN:if(n.enablePan===!1)return;ie(e);break}}function xe(e){n.enabled===!1||n.enableZoom===!1||s!==o.NONE&&s!==o.ROTATE||(e.preventDefault(),n.dispatchEvent(i),ae(e),n.dispatchEvent(a))}function Se(e){n.enabled===!1||n.enablePan===!1||oe(e)}function U(e){switch(Ee(e),D.length){case 1:switch(n.touches.ONE){case x.ROTATE:if(n.enableRotate===!1)return;se(),s=o.TOUCH_ROTATE;break;case x.PAN:if(n.enablePan===!1)return;ce(),s=o.TOUCH_PAN;break;default:s=o.NONE}break;case 2:switch(n.touches.TWO){case x.DOLLY_PAN:if(n.enableZoom===!1&&n.enablePan===!1)return;le(),s=o.TOUCH_DOLLY_PAN;break;case x.DOLLY_ROTATE:if(n.enableZoom===!1&&n.enableRotate===!1)return;ue(),s=o.TOUCH_DOLLY_ROTATE;break;default:s=o.NONE}break;default:s=o.NONE}s!==o.NONE&&n.dispatchEvent(i)}function Ce(e){switch(Ee(e),s){case o.TOUCH_ROTATE:if(n.enableRotate===!1)return;de(e),n.update();break;case o.TOUCH_PAN:if(n.enablePan===!1)return;fe(e),n.update();break;case o.TOUCH_DOLLY_PAN:if(n.enableZoom===!1&&n.enablePan===!1)return;me(e),n.update();break;case o.TOUCH_DOLLY_ROTATE:if(n.enableZoom===!1&&n.enableRotate===!1)return;he(e),n.update();break;default:s=o.NONE}}function we(e){n.enabled!==!1&&e.preventDefault()}function Te(e){D.push(e)}function W(e){delete O[e.pointerId];for(let t=0;t{ee(e),n.update()},this.dollyOut=(e=A())=>{L(e),n.update()},this.getScale=()=>d,this.setScale=e=>{I(e),n.update()},this.getZoomScale=()=>A(),t!==void 0&&this.connect(t),this.update()}},Ly=new ni,Ry=new q,zy=class extends Hu{constructor(){super(),this.isLineSegmentsGeometry=!0,this.type=`LineSegmentsGeometry`,this.setIndex([0,2,1,2,3,1,2,4,3,4,5,3,4,6,5,6,7,5]),this.setAttribute(`position`,new Pi([-1,2,0,1,2,0,-1,1,0,1,1,0,-1,0,0,1,0,0,-1,-1,0,1,-1,0],3)),this.setAttribute(`uv`,new Pi([-1,2,1,2,-1,1,1,1,-1,-1,1,-1,-1,-2,1,-2],2))}applyMatrix4(e){let t=this.attributes.instanceStart,n=this.attributes.instanceEnd;return t!==void 0&&(t.applyMatrix4(e),n.applyMatrix4(e),t.needsUpdate=!0),this.boundingBox!==null&&this.computeBoundingBox(),this.boundingSphere!==null&&this.computeBoundingSphere(),this}setPositions(e){let t;e instanceof Float32Array?t=e:Array.isArray(e)&&(t=new Float32Array(e));let n=new Wd(t,6,1);return this.setAttribute(`instanceStart`,new Yi(n,3,0)),this.setAttribute(`instanceEnd`,new Yi(n,3,3)),this.computeBoundingBox(),this.computeBoundingSphere(),this}setColors(e,t=3){let n;e instanceof Float32Array?n=e:Array.isArray(e)&&(n=new Float32Array(e));let r=new Wd(n,t*2,1);return this.setAttribute(`instanceColorStart`,new Yi(r,t,0)),this.setAttribute(`instanceColorEnd`,new Yi(r,t,t)),this}fromWireframeGeometry(e){return this.setPositions(e.attributes.position.array),this}fromEdgesGeometry(e){return this.setPositions(e.attributes.position.array),this}fromMesh(e){return this.fromWireframeGeometry(new sl(e.geometry)),this}fromLineSegments(e){let t=e.geometry;return this.setPositions(t.attributes.position.array),this}computeBoundingBox(){this.boundingBox===null&&(this.boundingBox=new ni);let e=this.attributes.instanceStart,t=this.attributes.instanceEnd;e!==void 0&&t!==void 0&&(this.boundingBox.setFromBufferAttribute(e),Ly.setFromBufferAttribute(t),this.boundingBox.union(Ly))}computeBoundingSphere(){this.boundingSphere===null&&(this.boundingSphere=new Ri),this.boundingBox===null&&this.computeBoundingBox();let e=this.attributes.instanceStart,t=this.attributes.instanceEnd;if(e!==void 0&&t!==void 0){let n=this.boundingSphere.center;this.boundingBox.getCenter(n);let r=0;for(let i=0,a=e.count;i - #include - #include - #include - - uniform float linewidth; - uniform vec2 resolution; - - attribute vec3 instanceStart; - attribute vec3 instanceEnd; - - #ifdef USE_COLOR - #ifdef USE_LINE_COLOR_ALPHA - varying vec4 vLineColor; - attribute vec4 instanceColorStart; - attribute vec4 instanceColorEnd; - #else - varying vec3 vLineColor; - attribute vec3 instanceColorStart; - attribute vec3 instanceColorEnd; - #endif - #endif - - #ifdef WORLD_UNITS - - varying vec4 worldPos; - varying vec3 worldStart; - varying vec3 worldEnd; - - #ifdef USE_DASH - - varying vec2 vUv; - - #endif - - #else - - varying vec2 vUv; - - #endif - - #ifdef USE_DASH - - uniform float dashScale; - attribute float instanceDistanceStart; - attribute float instanceDistanceEnd; - varying float vLineDistance; - - #endif - - void trimSegment( const in vec4 start, inout vec4 end ) { - - // trim end segment so it terminates between the camera plane and the near plane - - // conservative estimate of the near plane - float a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column - float b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column - float nearEstimate = - 0.5 * b / a; - - float alpha = ( nearEstimate - start.z ) / ( end.z - start.z ); - - end.xyz = mix( start.xyz, end.xyz, alpha ); - - } - - void main() { - - #ifdef USE_COLOR - - vLineColor = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd; - - #endif - - #ifdef USE_DASH - - vLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd; - vUv = uv; - - #endif - - float aspect = resolution.x / resolution.y; - - // camera space - vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 ); - vec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 ); - - #ifdef WORLD_UNITS - - worldStart = start.xyz; - worldEnd = end.xyz; - - #else - - vUv = uv; - - #endif - - // special case for perspective projection, and segments that terminate either in, or behind, the camera plane - // clearly the gpu firmware has a way of addressing this issue when projecting into ndc space - // but we need to perform ndc-space calculations in the shader, so we must address this issue directly - // perhaps there is a more elegant solution -- WestLangley - - bool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column - - if ( perspective ) { - - if ( start.z < 0.0 && end.z >= 0.0 ) { - - trimSegment( start, end ); - - } else if ( end.z < 0.0 && start.z >= 0.0 ) { - - trimSegment( end, start ); - - } - - } - - // clip space - vec4 clipStart = projectionMatrix * start; - vec4 clipEnd = projectionMatrix * end; - - // ndc space - vec3 ndcStart = clipStart.xyz / clipStart.w; - vec3 ndcEnd = clipEnd.xyz / clipEnd.w; - - // direction - vec2 dir = ndcEnd.xy - ndcStart.xy; - - // account for clip-space aspect ratio - dir.x *= aspect; - dir = normalize( dir ); - - #ifdef WORLD_UNITS - - // get the offset direction as perpendicular to the view vector - vec3 worldDir = normalize( end.xyz - start.xyz ); - vec3 offset; - if ( position.y < 0.5 ) { - - offset = normalize( cross( start.xyz, worldDir ) ); - - } else { - - offset = normalize( cross( end.xyz, worldDir ) ); - - } - - // sign flip - if ( position.x < 0.0 ) offset *= - 1.0; - - float forwardOffset = dot( worldDir, vec3( 0.0, 0.0, 1.0 ) ); - - // don't extend the line if we're rendering dashes because we - // won't be rendering the endcaps - #ifndef USE_DASH - - // extend the line bounds to encompass endcaps - start.xyz += - worldDir * linewidth * 0.5; - end.xyz += worldDir * linewidth * 0.5; - - // shift the position of the quad so it hugs the forward edge of the line - offset.xy -= dir * forwardOffset; - offset.z += 0.5; - - #endif - - // endcaps - if ( position.y > 1.0 || position.y < 0.0 ) { - - offset.xy += dir * 2.0 * forwardOffset; - - } - - // adjust for linewidth - offset *= linewidth * 0.5; - - // set the world position - worldPos = ( position.y < 0.5 ) ? start : end; - worldPos.xyz += offset; - - // project the worldpos - vec4 clip = projectionMatrix * worldPos; - - // shift the depth of the projected points so the line - // segments overlap neatly - vec3 clipPose = ( position.y < 0.5 ) ? ndcStart : ndcEnd; - clip.z = clipPose.z * clip.w; - - #else - - vec2 offset = vec2( dir.y, - dir.x ); - // undo aspect ratio adjustment - dir.x /= aspect; - offset.x /= aspect; - - // sign flip - if ( position.x < 0.0 ) offset *= - 1.0; - - // endcaps - if ( position.y < 0.0 ) { - - offset += - dir; - - } else if ( position.y > 1.0 ) { - - offset += dir; - - } - - // adjust for linewidth - offset *= linewidth; - - // adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ... - offset /= resolution.y; - - // select end - vec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd; - - // back to clip space - offset *= clip.w; - - clip.xy += offset; - - #endif - - gl_Position = clip; - - vec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation - - #include - #include - #include - - } - `,fragmentShader:` - uniform vec3 diffuse; - uniform float opacity; - uniform float linewidth; - - #ifdef USE_DASH - - uniform float dashOffset; - uniform float dashSize; - uniform float gapSize; - - #endif - - varying float vLineDistance; - - #ifdef WORLD_UNITS - - varying vec4 worldPos; - varying vec3 worldStart; - varying vec3 worldEnd; - - #ifdef USE_DASH - - varying vec2 vUv; - - #endif - - #else - - varying vec2 vUv; - - #endif - - #include - #include - #include - #include - - #ifdef USE_COLOR - #ifdef USE_LINE_COLOR_ALPHA - varying vec4 vLineColor; - #else - varying vec3 vLineColor; - #endif - #endif - - vec2 closestLineToLine(vec3 p1, vec3 p2, vec3 p3, vec3 p4) { - - float mua; - float mub; - - vec3 p13 = p1 - p3; - vec3 p43 = p4 - p3; - - vec3 p21 = p2 - p1; - - float d1343 = dot( p13, p43 ); - float d4321 = dot( p43, p21 ); - float d1321 = dot( p13, p21 ); - float d4343 = dot( p43, p43 ); - float d2121 = dot( p21, p21 ); - - float denom = d2121 * d4343 - d4321 * d4321; - - float numer = d1343 * d4321 - d1321 * d4343; - - mua = numer / denom; - mua = clamp( mua, 0.0, 1.0 ); - mub = ( d1343 + d4321 * ( mua ) ) / d4343; - mub = clamp( mub, 0.0, 1.0 ); - - return vec2( mua, mub ); - - } - - void main() { - - #include - - #ifdef USE_DASH - - if ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps - - if ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX - - #endif - - float alpha = opacity; - - #ifdef WORLD_UNITS - - // Find the closest points on the view ray and the line segment - vec3 rayEnd = normalize( worldPos.xyz ) * 1e5; - vec3 lineDir = worldEnd - worldStart; - vec2 params = closestLineToLine( worldStart, worldEnd, vec3( 0.0, 0.0, 0.0 ), rayEnd ); - - vec3 p1 = worldStart + lineDir * params.x; - vec3 p2 = rayEnd * params.y; - vec3 delta = p1 - p2; - float len = length( delta ); - float norm = len / linewidth; - - #ifndef USE_DASH - - #ifdef USE_ALPHA_TO_COVERAGE - - float dnorm = fwidth( norm ); - alpha = 1.0 - smoothstep( 0.5 - dnorm, 0.5 + dnorm, norm ); - - #else - - if ( norm > 0.5 ) { - - discard; - - } - - #endif - - #endif - - #else - - #ifdef USE_ALPHA_TO_COVERAGE - - // artifacts appear on some hardware if a derivative is taken within a conditional - float a = vUv.x; - float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0; - float len2 = a * a + b * b; - float dlen = fwidth( len2 ); - - if ( abs( vUv.y ) > 1.0 ) { - - alpha = 1.0 - smoothstep( 1.0 - dlen, 1.0 + dlen, len2 ); - - } - - #else - - if ( abs( vUv.y ) > 1.0 ) { - - float a = vUv.x; - float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0; - float len2 = a * a + b * b; - - if ( len2 > 1.0 ) discard; - - } - - #endif - - #endif - - vec4 diffuseColor = vec4( diffuse, alpha ); - #ifdef USE_COLOR - #ifdef USE_LINE_COLOR_ALPHA - diffuseColor *= vLineColor; - #else - diffuseColor.rgb *= vLineColor; - #endif - #endif - - #include - - gl_FragColor = diffuseColor; - - #include - #include <${Cy>=154?`colorspace_fragment`:`encodings_fragment`}> - #include - #include - - } - `,clipping:!0}),this.isLineMaterial=!0,this.onBeforeCompile=function(){this.transparent?this.defines.USE_LINE_COLOR_ALPHA=`1`:delete this.defines.USE_LINE_COLOR_ALPHA},Object.defineProperties(this,{color:{enumerable:!0,get:function(){return this.uniforms.diffuse.value},set:function(e){this.uniforms.diffuse.value=e}},worldUnits:{enumerable:!0,get:function(){return`WORLD_UNITS`in this.defines},set:function(e){e===!0?this.defines.WORLD_UNITS=``:delete this.defines.WORLD_UNITS}},linewidth:{enumerable:!0,get:function(){return this.uniforms.linewidth.value},set:function(e){this.uniforms.linewidth.value=e}},dashed:{enumerable:!0,get:function(){return`USE_DASH`in this.defines},set(e){!!e!=`USE_DASH`in this.defines&&(this.needsUpdate=!0),e===!0?this.defines.USE_DASH=``:delete this.defines.USE_DASH}},dashScale:{enumerable:!0,get:function(){return this.uniforms.dashScale.value},set:function(e){this.uniforms.dashScale.value=e}},dashSize:{enumerable:!0,get:function(){return this.uniforms.dashSize.value},set:function(e){this.uniforms.dashSize.value=e}},dashOffset:{enumerable:!0,get:function(){return this.uniforms.dashOffset.value},set:function(e){this.uniforms.dashOffset.value=e}},gapSize:{enumerable:!0,get:function(){return this.uniforms.gapSize.value},set:function(e){this.uniforms.gapSize.value=e}},opacity:{enumerable:!0,get:function(){return this.uniforms.opacity.value},set:function(e){this.uniforms.opacity.value=e}},resolution:{enumerable:!0,get:function(){return this.uniforms.resolution.value},set:function(e){this.uniforms.resolution.value.copy(e)}},alphaToCoverage:{enumerable:!0,get:function(){return`USE_ALPHA_TO_COVERAGE`in this.defines},set:function(e){!!e!=`USE_ALPHA_TO_COVERAGE`in this.defines&&(this.needsUpdate=!0),e===!0?(this.defines.USE_ALPHA_TO_COVERAGE=``,this.extensions.derivatives=!0):(delete this.defines.USE_ALPHA_TO_COVERAGE,this.extensions.derivatives=!1)}}}),this.setValues(e)}},Hy=new Zn,Uy=new q,Wy=new q,Gy=new Zn,Ky=new Zn,qy=new Zn,Jy=new q,Yy=new J,Xy=new uf,Zy=new q,Qy=new ni,$y=new Ri,eb=new Zn,tb,nb;function rb(e,t,n){return eb.set(0,0,-t,1).applyMatrix4(e.projectionMatrix),eb.multiplyScalar(1/eb.w),eb.x=nb/n.width,eb.y=nb/n.height,eb.applyMatrix4(e.projectionMatrixInverse),eb.multiplyScalar(1/eb.w),Math.abs(Math.max(eb.x,eb.y))}function ib(e,t){let n=e.matrixWorld,r=e.geometry,i=r.attributes.instanceStart,a=r.attributes.instanceEnd,o=Math.min(r.instanceCount,i.count);for(let r=0,s=o;ru&&Ky.z>u)continue;if(Gy.z>u){let e=Gy.z-Ky.z,t=(Gy.z-u)/e;Gy.lerp(Ky,t)}else if(Ky.z>u){let e=Ky.z-Gy.z,t=(Ky.z-u)/e;Ky.lerp(Gy,t)}Gy.applyMatrix4(r),Ky.applyMatrix4(r),Gy.multiplyScalar(1/Gy.w),Ky.multiplyScalar(1/Ky.w),Gy.x*=i.x/2,Gy.y*=i.y/2,Ky.x*=i.x/2,Ky.y*=i.y/2,Xy.start.copy(Gy),Xy.start.z=0,Xy.end.copy(Ky),Xy.end.z=0;let o=Xy.closestPointToPointParameter(Jy,!0);Xy.at(o,Zy);let l=jn.lerp(Gy.z,Ky.z,o),d=l>=-1&&l<=1,f=Jy.distanceTo(Zy){let r=n.width/2,i=n.height/2;t.updateMatrixWorld(!1);let a=e.project(t);return a.x=a.x*r+r,a.y=-(a.y*i)+i,a},fb=(e,t,n,r=1)=>{let i=cb.set(e.x/n.width*2-1,-(e.y/n.height)*2+1,r);return i.unproject(t),i},pb=(e,t,n,r)=>{let i=db(ub.copy(e),n,r),a=0;for(let o=0;o<2;++o){let s=lb.copy(i).setComponent(o,i.getComponent(o)+t),c=fb(s,n,r,s.z);a=Math.max(a,e.distanceTo(c))}return a},mb=v.forwardRef(function({points:e,color:t=16777215,vertexColors:n,linewidth:r,lineWidth:i,segments:a,dashed:o,...s},c){var l;let u=A_(e=>e.size),d=v.useMemo(()=>a?new ob:new sb,[a]),[f]=v.useState(()=>new Vy),p=(n==null||(l=n[0])==null?void 0:l.length)===4?4:3,m=v.useMemo(()=>{let r=a?new zy:new By,i=e.map(e=>{let t=Array.isArray(e);return e instanceof q||e instanceof Zn?[e.x,e.y,e.z]:e instanceof K?[e.x,e.y,0]:t&&e.length===3?[e[0],e[1],e[2]]:t&&e.length===2?[e[0],e[1],0]:e});if(r.setPositions(i.flat()),n){t=16777215;let e=n.map(e=>e instanceof Y?e.toArray():e);r.setColors(e.flat(),p)}return r},[e,a,n,p]);return v.useLayoutEffect(()=>{d.computeLineDistances()},[e,d]),v.useLayoutEffect(()=>{o?f.defines.USE_DASH=``:delete f.defines.USE_DASH,f.needsUpdate=!0},[o,f]),v.useEffect(()=>()=>{m.dispose(),f.dispose()},[m]),v.createElement(`primitive`,ny({object:d,ref:c},s),v.createElement(`primitive`,{object:m,attach:`geometry`}),v.createElement(`primitive`,ny({object:f,attach:`material`,color:t,vertexColors:!!n,resolution:[u.width,u.height],linewidth:r??i??1,dashed:o,transparent:p===4},s)))});function hb(e,t,n,r){var i;return i=class extends yl{constructor(i){super({vertexShader:t,fragmentShader:n,...i});for(let t in e)this.uniforms[t]=new Vd(e[t]),Object.defineProperty(this,t,{get(){return this.uniforms[t].value},set(e){this.uniforms[t].value=e}});this.uniforms=gl.clone(this.uniforms),r?.(this)}},i.key=jn.generateUUID(),i}var gb=parseInt(`184`.replace(/\D+/g,``));function _b(e,t,n){let r=A_(e=>e.size),i=A_(e=>e.viewport),a=typeof e==`number`?e:r.width*i.dpr,o=typeof t==`number`?t:r.height*i.dpr,s=(typeof e==`number`?n:e)||{},{samples:c=0,depth:l,...u}=s,d=l??s.depthBuffer,f=v.useMemo(()=>{let e=new $n(a,o,{minFilter:M,magFilter:M,type:ne,...u});return d&&(e.depthTexture=new _s(a,o,V)),e.samples=c,e},[]);return v.useLayoutEffect(()=>{f.setSize(a,o),c&&(f.samples=c)},[c,f,a,o]),v.useEffect(()=>()=>f.dispose(),[]),f}var vb=e=>typeof e==`function`,yb=v.forwardRef(({envMap:e,resolution:t=256,frames:n=1/0,children:r,makeDefault:i,...a},o)=>{let s=A_(({set:e})=>e),c=A_(({camera:e})=>e),l=A_(({size:e})=>e),u=v.useRef(null);v.useImperativeHandle(o,()=>u.current,[]);let d=v.useRef(null),f=_b(t);v.useLayoutEffect(()=>{a.manual||u.current.updateProjectionMatrix()},[l,a]),v.useLayoutEffect(()=>{u.current.updateProjectionMatrix()}),v.useLayoutEffect(()=>{if(i){let e=c;return s(()=>({camera:u.current})),()=>s(()=>({camera:e}))}},[u,i,s]);let p=0,m=null,h=vb(r);return j_(t=>{h&&(n===1/0||ptypeof e==`function`,xb=v.forwardRef(({envMap:e,resolution:t=256,frames:n=1/0,makeDefault:r,children:i,...a},o)=>{let s=A_(({set:e})=>e),c=A_(({camera:e})=>e),l=A_(({size:e})=>e),u=v.useRef(null);v.useImperativeHandle(o,()=>u.current,[]);let d=v.useRef(null),f=_b(t);v.useLayoutEffect(()=>{a.manual||(u.current.aspect=l.width/l.height)},[l,a]),v.useLayoutEffect(()=>{u.current.updateProjectionMatrix()});let p=0,m=null,h=bb(i);return j_(t=>{h&&(n===1/0||p{if(r){let e=c;return s(()=>({camera:u.current})),()=>s(()=>({camera:e}))}},[u,r,s]),v.createElement(v.Fragment,null,v.createElement(`perspectiveCamera`,ny({ref:u},a),!h&&i),v.createElement(`group`,{ref:d},h&&i(f.texture)))}),Sb=v.forwardRef(({makeDefault:e,camera:t,regress:n,domElement:r,enableDamping:i=!0,keyEvents:a=!1,onChange:o,onStart:s,onEnd:c,...l},u)=>{let d=A_(e=>e.invalidate),f=A_(e=>e.camera),p=A_(e=>e.gl),m=A_(e=>e.events),h=A_(e=>e.setEvents),g=A_(e=>e.set),_=A_(e=>e.get),y=A_(e=>e.performance),b=t||f,x=r||m.connected||p.domElement,S=v.useMemo(()=>new Iy(b),[b]);return j_(()=>{S.enabled&&S.update()},-1),v.useEffect(()=>(a&&S.connect(a===!0?x:a),S.connect(x),()=>void S.dispose()),[a,x,n,S,d]),v.useEffect(()=>{let e=e=>{d(),n&&y.regress(),o&&o(e)},t=e=>{s&&s(e)},r=e=>{c&&c(e)};return S.addEventListener(`change`,e),S.addEventListener(`start`,t),S.addEventListener(`end`,r),()=>{S.removeEventListener(`start`,t),S.removeEventListener(`end`,r),S.removeEventListener(`change`,e)}},[o,s,c,S,d,h]),v.useEffect(()=>{if(e){let e=_().controls;return g({controls:S}),()=>g({controls:e})}},[e,S]),v.createElement(`primitive`,ny({ref:u,object:S,enableDamping:i},l))});function Cb({defaultScene:e,defaultCamera:t,renderPriority:n=1}){let{gl:r,scene:i,camera:a}=A_(),o;return j_(()=>{o=r.autoClear,n===1&&(r.autoClear=!0,r.render(e,t)),r.autoClear=!1,r.clearDepth(),r.render(i,a),r.autoClear=o},n),v.createElement(`group`,{onPointerOver:()=>null})}function wb({children:e,renderPriority:t=1}){let{scene:n,camera:r}=A_(),[i]=v.useState(()=>new Vr);return v.createElement(v.Fragment,null,Dv(v.createElement(v.Fragment,null,e,v.createElement(Cb,{defaultScene:n,defaultCamera:r,renderPriority:t})),i,{events:{priority:t+1}}))}var Tb=v.createContext({}),Eb=()=>v.useContext(Tb),Db=2*Math.PI,Ob=new Ar,kb=new J,[Ab,jb]=[new Mn,new Mn],Mb=new q,Nb=new q,Pb=e=>`minPolarAngle`in e,Fb=e=>`getTarget`in e,Ib=({alignment:e=`bottom-right`,margin:t=[80,80],renderPriority:n=1,onUpdate:r,onTarget:i,children:a})=>{let o=A_(e=>e.size),s=A_(e=>e.camera),c=A_(e=>e.controls),l=A_(e=>e.invalidate),u=v.useRef(null),d=v.useRef(null),f=v.useRef(!1),p=v.useRef(0),m=v.useRef(new q(0,0,0)),h=v.useRef(new q(0,0,0));v.useEffect(()=>{h.current.copy(s.up),Ob.up.copy(s.up)},[s]);let g=v.useCallback(e=>{f.current=!0,(c||i)&&(m.current=i?.()||(Fb(c)?c.getTarget(m.current):c?.target)),p.current=s.position.distanceTo(Mb),Ab.copy(s.quaternion),Nb.copy(e).multiplyScalar(p.current).add(Mb),Ob.lookAt(Nb),jb.copy(Ob.quaternion),l()},[c,s,i,l]);j_((e,t)=>{if(d.current&&u.current){var n;if(f.current)if(Ab.angleTo(jb)<.01)f.current=!1,Pb(c)&&s.up.copy(h.current);else{let e=t*Db;Ab.rotateTowards(jb,e),s.position.set(0,0,1).applyQuaternion(Ab).multiplyScalar(p.current).add(m.current),s.up.set(0,1,0).applyQuaternion(Ab).normalize(),s.quaternion.copy(Ab),Fb(c)&&c.setPosition(s.position.x,s.position.y,s.position.z),r?r():c&&c.update(t),l()}kb.copy(s.matrix).invert(),(n=u.current)==null||n.quaternion.setFromRotationMatrix(kb)}});let _=v.useMemo(()=>({tweenCamera:g}),[g]),[y,b]=t,x=e.endsWith(`-center`)?0:e.endsWith(`-left`)?-o.width/2+y:o.width/2-y,S=e.startsWith(`center-`)?0:e.startsWith(`top-`)?o.height/2-b:-o.height/2+b;return v.createElement(wb,{renderPriority:n},v.createElement(Tb.Provider,{value:_},v.createElement(yb,{makeDefault:!0,ref:d,position:[0,0,200]}),v.createElement(`group`,{ref:u,position:[x,S,0]},a)))};function Lb({scale:e=[.8,.05,.05],color:t,rotation:n}){return v.createElement(`group`,{rotation:n},v.createElement(`mesh`,{position:[.4,0,0]},v.createElement(`boxGeometry`,{args:e}),v.createElement(`meshBasicMaterial`,{color:t,toneMapped:!1})))}function Rb({onClick:e,font:t,disabled:n,arcStyle:r,label:i,labelColor:a,axisHeadScale:o=1,...s}){let c=A_(e=>e.gl),l=v.useMemo(()=>{let e=document.createElement(`canvas`);e.width=64,e.height=64;let n=e.getContext(`2d`);return n.beginPath(),n.arc(32,32,16,0,2*Math.PI),n.closePath(),n.fillStyle=r,n.fill(),i&&(n.font=t,n.textAlign=`center`,n.fillStyle=a,n.fillText(i,32,41)),new hs(e)},[r,i,a,t]),[u,d]=v.useState(!1),f=(i?1:.75)*(u?1.2:1)*o;return v.createElement(`sprite`,ny({scale:f,onPointerOver:n?void 0:e=>{e.stopPropagation(),d(!0)},onPointerOut:n?void 0:e||(e=>{e.stopPropagation(),d(!1)})},s),v.createElement(`spriteMaterial`,{map:l,"map-anisotropy":c.capabilities.getMaxAnisotropy()||1,alphaTest:.3,opacity:i?1:.75,toneMapped:!1}))}var zb=({hideNegativeAxes:e,hideAxisHeads:t,disabled:n,font:r=`18px Inter var, Arial, sans-serif`,axisColors:i=[`#ff2060`,`#20df80`,`#2080ff`],axisHeadScale:a=1,axisScale:o,labels:s=[`X`,`Y`,`Z`],labelColor:c=`#000`,onClick:l,...u})=>{let[d,f,p]=i,{tweenCamera:m}=Eb(),h={font:r,disabled:n,labelColor:c,onClick:l,axisHeadScale:a,onPointerDown:n?void 0:e=>{m(e.object.position),e.stopPropagation()}};return v.createElement(`group`,ny({scale:40},u),v.createElement(Lb,{color:d,rotation:[0,0,0],scale:o}),v.createElement(Lb,{color:f,rotation:[0,0,Math.PI/2],scale:o}),v.createElement(Lb,{color:p,rotation:[0,-Math.PI/2,0],scale:o}),!t&&v.createElement(v.Fragment,null,v.createElement(Rb,ny({arcStyle:d,position:[1,0,0],label:s[0]},h)),v.createElement(Rb,ny({arcStyle:f,position:[0,1,0],label:s[1]},h)),v.createElement(Rb,ny({arcStyle:p,position:[0,0,1],label:s[2]},h)),!e&&v.createElement(v.Fragment,null,v.createElement(Rb,ny({arcStyle:d,position:[-1,0,0]},h)),v.createElement(Rb,ny({arcStyle:f,position:[0,-1,0]},h)),v.createElement(Rb,ny({arcStyle:p,position:[0,0,-1]},h)))))},Bb=hb({cellSize:.5,sectionSize:1,fadeDistance:100,fadeStrength:1,fadeFrom:1,cellThickness:.5,sectionThickness:1,cellColor:new Y,sectionColor:new Y,infiniteGrid:!1,followCamera:!1,worldCamProjPosition:new q,worldPlanePosition:new q},` - varying vec3 localPosition; - varying vec4 worldPosition; - - uniform vec3 worldCamProjPosition; - uniform vec3 worldPlanePosition; - uniform float fadeDistance; - uniform bool infiniteGrid; - uniform bool followCamera; - - void main() { - localPosition = position.xzy; - if (infiniteGrid) localPosition *= 1.0 + fadeDistance; - - worldPosition = modelMatrix * vec4(localPosition, 1.0); - if (followCamera) { - worldPosition.xyz += (worldCamProjPosition - worldPlanePosition); - localPosition = (inverse(modelMatrix) * worldPosition).xyz; - } - - gl_Position = projectionMatrix * viewMatrix * worldPosition; - } - `,` - varying vec3 localPosition; - varying vec4 worldPosition; - - uniform vec3 worldCamProjPosition; - uniform float cellSize; - uniform float sectionSize; - uniform vec3 cellColor; - uniform vec3 sectionColor; - uniform float fadeDistance; - uniform float fadeStrength; - uniform float fadeFrom; - uniform float cellThickness; - uniform float sectionThickness; - - float getGrid(float size, float thickness) { - vec2 r = localPosition.xz / size; - vec2 grid = abs(fract(r - 0.5) - 0.5) / fwidth(r); - float line = min(grid.x, grid.y) + 1.0 - thickness; - return 1.0 - min(line, 1.0); - } - - void main() { - float g1 = getGrid(cellSize, cellThickness); - float g2 = getGrid(sectionSize, sectionThickness); - - vec3 from = worldCamProjPosition*vec3(fadeFrom); - float dist = distance(from, worldPosition.xyz); - float d = 1.0 - min(dist / fadeDistance, 1.0); - vec3 color = mix(cellColor, sectionColor, min(1.0, sectionThickness * g2)); - - gl_FragColor = vec4(color, (g1 + g2) * pow(d, fadeStrength)); - gl_FragColor.a = mix(0.75 * gl_FragColor.a, gl_FragColor.a, g2); - if (gl_FragColor.a <= 0.0) discard; - - #include - #include <${gb>=154?`colorspace_fragment`:`encodings_fragment`}> - } - `),Vb=v.forwardRef(({args:e,cellColor:t=`#000000`,sectionColor:n=`#2080ff`,cellSize:r=.5,sectionSize:i=1,followCamera:a=!1,infiniteGrid:o=!1,fadeDistance:s=100,fadeStrength:c=1,fadeFrom:l=1,cellThickness:u=.5,sectionThickness:d=1,side:f=1,...p},m)=>{nv({GridMaterial:Bb});let h=v.useRef(null);v.useImperativeHandle(m,()=>h.current,[]);let g=new mo,_=new q(0,1,0),y=new q(0,0,0);j_(e=>{g.setFromNormalAndCoplanarPoint(_,y).applyMatrix4(h.current.matrixWorld);let t=h.current.material,n=t.uniforms.worldCamProjPosition,r=t.uniforms.worldPlanePosition;g.projectPoint(e.camera.position,n.value),r.value.set(0,0,0).applyMatrix4(h.current.matrixWorld)});let b={cellSize:r,sectionSize:i,cellColor:t,sectionColor:n,cellThickness:u,sectionThickness:d},x={fadeDistance:s,fadeStrength:c,fadeFrom:l,infiniteGrid:o,followCamera:a};return v.createElement(`mesh`,ny({ref:h,frustumCulled:!1},p),v.createElement(`gridMaterial`,ny({transparent:!0,"extensions-derivatives":!0,side:f},b,x)),v.createElement(`planeGeometry`,{args:e}))}),Hb=`modulepreload`,Ub=function(e){return`/`+e},Wb={},Gb=function(e,t,n){let r=Promise.resolve();if(t&&t.length>0){let e=document.getElementsByTagName(`link`),i=document.querySelector(`meta[property=csp-nonce]`),a=i?.nonce||i?.getAttribute(`nonce`);function o(e){return Promise.all(e.map(e=>Promise.resolve(e).then(e=>({status:`fulfilled`,value:e}),e=>({status:`rejected`,reason:e}))))}r=o(t.map(t=>{if(t=Ub(t,n),t in Wb)return;Wb[t]=!0;let r=t.endsWith(`.css`),i=r?`[rel="stylesheet"]`:``;if(n)for(let n=e.length-1;n>=0;n--){let i=e[n];if(i.href===t&&(!r||i.rel===`stylesheet`))return}else if(document.querySelector(`link[href="${t}"]${i}`))return;let o=document.createElement(`link`);if(o.rel=r?`stylesheet`:Hb,r||(o.as=`script`),o.crossOrigin=``,o.href=t,a&&o.setAttribute(`nonce`,a),document.head.appendChild(o),r)return new Promise((e,n)=>{o.addEventListener(`load`,e),o.addEventListener(`error`,()=>n(Error(`Unable to preload CSS for ${t}`)))})}))}function i(e){let t=new Event(`vite:preloadError`,{cancelable:!0});if(t.payload=e,window.dispatchEvent(t),!t.defaultPrevented)throw e}return r.then(t=>{for(let e of t||[])e.status===`rejected`&&i(e.reason);return e().catch(i)})},Kb=v.createContext(null),qb=new q,Jb=new q,Yb=(e,t,n,r)=>{let i=t.dot(t),a=t.dot(e)-t.dot(n),o=t.dot(r);return o===0?-a/i:(qb.copy(r).multiplyScalar(i/o).sub(t),Jb.copy(r).multiplyScalar(a/o).add(n).sub(e),-qb.dot(Jb)/qb.dot(qb))},Xb=new q(0,1,0),Zb=new J,Qb=({direction:e,axis:t})=>{let{translation:n,translationLimits:r,annotations:i,annotationsClass:a,depthTest:o,scale:s,lineWidth:c,fixed:l,axisColors:u,hoveredColor:d,opacity:f,renderOrder:p,onDragStart:m,onDrag:h,onDragEnd:g,userData:_}=v.useContext(Kb),y=A_(e=>e.controls),b=v.useRef(null),x=v.useRef(null),S=v.useRef(null),C=v.useRef(0),[w,T]=v.useState(!1),E=v.useCallback(r=>{i&&(b.current.innerText=`${n.current[t].toFixed(2)}`,b.current.style.display=`block`),r.stopPropagation();let a=new J().extractRotation(x.current.matrixWorld),o=r.point.clone(),s=new q().setFromMatrixPosition(x.current.matrixWorld),c=e.clone().applyMatrix4(a).normalize();S.current={clickPoint:o,dir:c},C.current=n.current[t],m({component:`Arrow`,axis:t,origin:s,directions:[c]}),y&&(y.enabled=!1),r.target.setPointerCapture(r.pointerId)},[i,e,y,m,n,t]),D=v.useCallback(e=>{if(e.stopPropagation(),w||T(!0),S.current){let{clickPoint:a,dir:o}=S.current,[s,c]=r?.[t]||[void 0,void 0],l=Yb(a,o,e.ray.origin,e.ray.direction);s!==void 0&&(l=Math.max(l,s-C.current)),c!==void 0&&(l=Math.min(l,c-C.current)),n.current[t]=C.current+l,i&&(b.current.innerText=`${n.current[t].toFixed(2)}`),Zb.makeTranslation(o.x*l,o.y*l,o.z*l),h(Zb)}},[i,h,w,n,r,t]),O=v.useCallback(e=>{i&&(b.current.style.display=`none`),e.stopPropagation(),S.current=null,g(),y&&(y.enabled=!0),e.target.releasePointerCapture(e.pointerId)},[i,y,g]),k=v.useCallback(e=>{e.stopPropagation(),T(!1)},[]),{cylinderLength:A,coneWidth:j,coneLength:M,matrixL:N}=v.useMemo(()=>{let t=l?c/s*1.6:s/20,n=l?.2:s/5,r=l?1-n:s-n,i=new Mn().setFromUnitVectors(Xb,e.clone().normalize());return{cylinderLength:r,coneWidth:t,coneLength:n,matrixL:new J().makeRotationFromQuaternion(i)}},[e,s,c,l]),P=w?d:u[t];return v.createElement(`group`,{ref:x},v.createElement(`group`,{matrix:N,matrixAutoUpdate:!1,onPointerDown:E,onPointerMove:D,onPointerUp:O,onPointerOut:k},i&&v.createElement(_y,{position:[0,-M,0]},v.createElement(`div`,{style:{display:`none`,background:`#151520`,color:`white`,padding:`6px 8px`,borderRadius:7,whiteSpace:`nowrap`},className:a,ref:b})),v.createElement(`mesh`,{visible:!1,position:[0,(A+M)/2,0],userData:_},v.createElement(`cylinderGeometry`,{args:[j*1.4,j*1.4,A+M,8,1]})),v.createElement(mb,{transparent:!0,raycast:()=>null,depthTest:o,points:[0,0,0,0,A,0],lineWidth:c,side:2,color:P,opacity:f,polygonOffset:!0,renderOrder:p,polygonOffsetFactor:-10,fog:!1}),v.createElement(`mesh`,{raycast:()=>null,position:[0,A+M/2,0],renderOrder:p},v.createElement(`coneGeometry`,{args:[j,M,24,1]}),v.createElement(`meshBasicMaterial`,{transparent:!0,depthTest:o,color:P,opacity:f,polygonOffset:!0,polygonOffsetFactor:-10,fog:!1}))))},$b=new q,ex=new q,tx=e=>e*180/Math.PI,nx=e=>e*Math.PI/180,rx=(e,t,n,r,i)=>{$b.copy(e).sub(n),ex.copy(t).sub(n);let a=r.dot(r),o=i.dot(i),s=$b.dot(r)/a,c=$b.dot(i)/o,l=ex.dot(r)/a,u=ex.dot(i)/o;return Math.atan2(u,l)-Math.atan2(c,s)},ix=(e,t)=>{let n=Math.floor(e/t);return n=n<0?n+1:n,e-n*t},ax=e=>{let t=ix(e,2*Math.PI);return Math.abs(t)<1e-6?0:(t<0&&(t+=2*Math.PI),t)},ox=new J,sx=new q,cx=new wa,lx=new q,ux=({dir1:e,dir2:t,axis:n})=>{let{rotationLimits:r,annotations:i,annotationsClass:a,depthTest:o,scale:s,lineWidth:c,fixed:l,axisColors:u,hoveredColor:d,renderOrder:f,opacity:p,onDragStart:m,onDrag:h,onDragEnd:g,userData:_}=v.useContext(Kb),y=A_(e=>e.controls),b=v.useRef(null),x=v.useRef(null),S=v.useRef(0),C=v.useRef(0),w=v.useRef(null),[T,E]=v.useState(!1),D=v.useCallback(e=>{i&&(b.current.innerText=`${tx(C.current).toFixed(0)}º`,b.current.style.display=`block`),e.stopPropagation();let t=e.point.clone(),r=new q().setFromMatrixPosition(x.current.matrixWorld),a=new q().setFromMatrixColumn(x.current.matrixWorld,0).normalize(),o=new q().setFromMatrixColumn(x.current.matrixWorld,1).normalize(),s=new q().setFromMatrixColumn(x.current.matrixWorld,2).normalize();w.current={clickPoint:t,origin:r,e1:a,e2:o,normal:s,plane:new mo().setFromNormalAndCoplanarPoint(s,r)},m({component:`Rotator`,axis:n,origin:r,directions:[a,o,s]}),y&&(y.enabled=!1),e.target.setPointerCapture(e.pointerId)},[i,y,m,n]),O=v.useCallback(e=>{if(e.stopPropagation(),T||E(!0),w.current){let{clickPoint:t,origin:a,e1:o,e2:s,normal:c,plane:l}=w.current,[u,d]=r?.[n]||[void 0,void 0];cx.copy(e.ray),cx.intersectPlane(l,lx),cx.direction.negate(),cx.intersectPlane(l,lx);let f=rx(t,lx,a,o,s),p=tx(f);e.shiftKey&&(p=Math.round(p/10)*10,f=nx(p)),u!==void 0&&d!==void 0&&d-u<2*Math.PI?(f=ax(f),f=f>Math.PI?f-2*Math.PI:f,f=jn.clamp(f,u-S.current,d-S.current),C.current=S.current+f):(C.current=ax(S.current+f),C.current=C.current>Math.PI?C.current-2*Math.PI:C.current),i&&(p=tx(C.current),b.current.innerText=`${p.toFixed(0)}º`),ox.makeRotationAxis(c,f),sx.copy(a).applyMatrix4(ox).sub(a).negate(),ox.setPosition(sx),h(ox)}},[i,h,T,r,n]),k=v.useCallback(e=>{i&&(b.current.style.display=`none`),e.stopPropagation(),S.current=C.current,w.current=null,g(),y&&(y.enabled=!0),e.target.releasePointerCapture(e.pointerId)},[i,y,g]),A=v.useCallback(e=>{e.stopPropagation(),E(!1)},[]),j=v.useMemo(()=>{let n=e.clone().normalize(),r=t.clone().normalize();return new J().makeBasis(n,r,n.clone().cross(r))},[e,t]),M=l?.65:s*.65,N=v.useMemo(()=>{let e=[];for(let t=0;t<=32;t++){let n=Math.PI/2*t/32;e.push(new q(Math.cos(n)*M,Math.sin(n)*M,0))}return e},[M]);return v.createElement(`group`,{ref:x,onPointerDown:D,onPointerMove:O,onPointerUp:k,onPointerOut:A,matrix:j,matrixAutoUpdate:!1},i&&v.createElement(_y,{position:[M,M,0]},v.createElement(`div`,{style:{display:`none`,background:`#151520`,color:`white`,padding:`6px 8px`,borderRadius:7,whiteSpace:`nowrap`},className:a,ref:b})),v.createElement(mb,{points:N,lineWidth:c*4,visible:!1,userData:_}),v.createElement(mb,{transparent:!0,raycast:()=>null,depthTest:o,points:N,lineWidth:c,side:2,color:T?d:u[n],opacity:p,polygonOffset:!0,polygonOffsetFactor:-10,renderOrder:f,fog:!1}))},dx=(e,t,n)=>{let r=Math.abs(e.x)>=Math.abs(e.y)&&Math.abs(e.x)>=Math.abs(e.z)?0:Math.abs(e.y)>=Math.abs(e.x)&&Math.abs(e.y)>=Math.abs(e.z)?1:2,i=[0,1,2].sort((e,n)=>Math.abs(t.getComponent(n))-Math.abs(t.getComponent(e))),a=r===i[0]?i[1]:i[0],o=e.getComponent(r),s=e.getComponent(a),c=t.getComponent(r),l=t.getComponent(a),u=n.getComponent(r),d=(n.getComponent(a)-s/o*u)/(l-s/o*c);return[(u-d*c)/o,d]},fx=new wa,px=new q,mx=new J,hx=({dir1:e,dir2:t,axis:n})=>{let{translation:r,translationLimits:i,annotations:a,annotationsClass:o,depthTest:s,scale:c,lineWidth:l,fixed:u,axisColors:d,hoveredColor:f,opacity:p,renderOrder:m,onDragStart:h,onDrag:g,onDragEnd:_,userData:y}=v.useContext(Kb),b=A_(e=>e.controls),x=v.useRef(null),S=v.useRef(null),C=v.useRef(null),w=v.useRef(0),T=v.useRef(0),[E,D]=v.useState(!1),O=v.useCallback(e=>{a&&(x.current.innerText=`${r.current[(n+1)%3].toFixed(2)}, ${r.current[(n+2)%3].toFixed(2)}`,x.current.style.display=`block`),e.stopPropagation();let t=e.point.clone(),i=new q().setFromMatrixPosition(S.current.matrixWorld),o=new q().setFromMatrixColumn(S.current.matrixWorld,0).normalize(),s=new q().setFromMatrixColumn(S.current.matrixWorld,1).normalize(),c=new q().setFromMatrixColumn(S.current.matrixWorld,2).normalize();C.current={clickPoint:t,e1:o,e2:s,plane:new mo().setFromNormalAndCoplanarPoint(c,i)},w.current=r.current[(n+1)%3],T.current=r.current[(n+2)%3],h({component:`Slider`,axis:n,origin:i,directions:[o,s,c]}),b&&(b.enabled=!1),e.target.setPointerCapture(e.pointerId)},[a,b,h,n]),k=v.useCallback(e=>{if(e.stopPropagation(),E||D(!0),C.current){let{clickPoint:t,e1:o,e2:s,plane:c}=C.current,[l,u]=i?.[(n+1)%3]||[void 0,void 0],[d,f]=i?.[(n+2)%3]||[void 0,void 0];fx.copy(e.ray),fx.intersectPlane(c,px),fx.direction.negate(),fx.intersectPlane(c,px),px.sub(t);let[p,m]=dx(o,s,px);l!==void 0&&(p=Math.max(p,l-w.current)),u!==void 0&&(p=Math.min(p,u-w.current)),d!==void 0&&(m=Math.max(m,d-T.current)),f!==void 0&&(m=Math.min(m,f-T.current)),r.current[(n+1)%3]=w.current+p,r.current[(n+2)%3]=T.current+m,a&&(x.current.innerText=`${r.current[(n+1)%3].toFixed(2)}, ${r.current[(n+2)%3].toFixed(2)}`),mx.makeTranslation(p*o.x+m*s.x,p*o.y+m*s.y,p*o.z+m*s.z),g(mx)}},[a,g,E,r,i,n]),A=v.useCallback(e=>{a&&(x.current.style.display=`none`),e.stopPropagation(),C.current=null,_(),b&&(b.enabled=!0),e.target.releasePointerCapture(e.pointerId)},[a,b,_]),j=v.useCallback(e=>{e.stopPropagation(),D(!1)},[]),M=v.useMemo(()=>{let n=e.clone().normalize(),r=t.clone().normalize();return new J().makeBasis(n,r,n.clone().cross(r))},[e,t]),N=u?1/7:c/7,P=u?.225:c*.225,F=E?f:d[n],I=v.useMemo(()=>[new q(0,0,0),new q(0,P,0),new q(P,P,0),new q(P,0,0),new q(0,0,0)],[P]);return v.createElement(`group`,{ref:S,matrix:M,matrixAutoUpdate:!1},a&&v.createElement(_y,{position:[0,0,0]},v.createElement(`div`,{style:{display:`none`,background:`#151520`,color:`white`,padding:`6px 8px`,borderRadius:7,whiteSpace:`nowrap`},className:o,ref:x})),v.createElement(`group`,{position:[N*1.7,N*1.7,0]},v.createElement(`mesh`,{visible:!0,onPointerDown:O,onPointerMove:k,onPointerUp:A,onPointerOut:j,scale:P,userData:y,renderOrder:m},v.createElement(`planeGeometry`,null),v.createElement(`meshBasicMaterial`,{transparent:!0,depthTest:s,color:F,polygonOffset:!0,polygonOffsetFactor:-10,side:2,fog:!1})),v.createElement(mb,{position:[-P/2,-P/2,0],transparent:!0,depthTest:s,points:I,lineWidth:l,color:F,opacity:p,polygonOffset:!0,polygonOffsetFactor:-10,userData:y,fog:!1,renderOrder:m})))},gx=new q,_x=new q,vx=(e,t,n,r)=>{let i=t.dot(t),a=t.dot(e)-t.dot(n),o=t.dot(r);return o===0?-a/i:(gx.copy(r).multiplyScalar(i/o).sub(t),_x.copy(r).multiplyScalar(a/o).add(n).sub(e),-gx.dot(_x)/gx.dot(gx))},yx=new q(0,1,0),bx=new q,xx=new J,Sx=({direction:e,axis:t})=>{let{scaleLimits:n,annotations:r,annotationsClass:i,depthTest:a,scale:o,lineWidth:s,fixed:c,axisColors:l,hoveredColor:u,opacity:d,renderOrder:f,onDragStart:p,onDrag:m,onDragEnd:h,userData:g}=v.useContext(Kb),_=A_(e=>e.size),y=A_(e=>e.controls),b=v.useRef(null),x=v.useRef(null),S=v.useRef(null),C=v.useRef(1),w=v.useRef(1),T=v.useRef(null),[E,D]=v.useState(!1),O=c?1.2:1.2*o,k=v.useCallback(n=>{r&&(b.current.innerText=`${w.current.toFixed(2)}`,b.current.style.display=`block`),n.stopPropagation();let i=new J().extractRotation(x.current.matrixWorld),a=n.point.clone(),s=new q().setFromMatrixPosition(x.current.matrixWorld),l=e.clone().applyMatrix4(i).normalize(),u=x.current.matrixWorld.clone();T.current={clickPoint:a,dir:l,mPLG:u,mPLGInv:u.clone().invert(),offsetMultiplier:c?1/pb(x.current.getWorldPosition(gx),o,n.camera,_):1},p({component:`Sphere`,axis:t,origin:s,directions:[l]}),y&&(y.enabled=!1),n.target.setPointerCapture(n.pointerId)},[r,y,e,p,t,c,o,_]),A=v.useCallback(e=>{if(e.stopPropagation(),E||D(!0),T.current){let{clickPoint:i,dir:a,mPLG:s,mPLGInv:l,offsetMultiplier:u}=T.current,[d,f]=n?.[t]||[1e-5,void 0],p=vx(i,a,e.ray.origin,e.ray.direction)*u,h=2**((c?p:p/o)*.2);e.shiftKey&&(h=Math.round(h*10)/10),h=Math.max(h,d/C.current),f!==void 0&&(h=Math.min(h,f/C.current)),w.current=C.current*h,S.current.position.set(0,O+p,0),r&&(b.current.innerText=`${w.current.toFixed(2)}`),bx.set(1,1,1),bx.setComponent(t,h),xx.makeScale(bx.x,bx.y,bx.z).premultiply(s).multiply(l),m(xx)}},[r,O,m,E,n,t]),j=v.useCallback(e=>{r&&(b.current.style.display=`none`),e.stopPropagation(),C.current=w.current,T.current=null,S.current.position.set(0,O,0),h(),y&&(y.enabled=!0),e.target.releasePointerCapture(e.pointerId)},[r,y,h,O]),M=v.useCallback(e=>{e.stopPropagation(),D(!1)},[]),{radius:N,matrixL:P}=v.useMemo(()=>{let t=c?s/o*1.8:o/22.5,n=new Mn().setFromUnitVectors(yx,e.clone().normalize());return{radius:t,matrixL:new J().makeRotationFromQuaternion(n)}},[e,o,s,c]),F=E?u:l[t];return v.createElement(`group`,{ref:x},v.createElement(`group`,{matrix:P,matrixAutoUpdate:!1,onPointerDown:k,onPointerMove:A,onPointerUp:j,onPointerOut:M},r&&v.createElement(_y,{position:[0,O/2,0]},v.createElement(`div`,{style:{display:`none`,background:`#151520`,color:`white`,padding:`6px 8px`,borderRadius:7,whiteSpace:`nowrap`},className:i,ref:b})),v.createElement(`mesh`,{ref:S,position:[0,O,0],renderOrder:f,userData:g},v.createElement(`sphereGeometry`,{args:[N,12,12]}),v.createElement(`meshBasicMaterial`,{transparent:!0,depthTest:a,color:F,opacity:d,polygonOffset:!0,polygonOffsetFactor:-10}))))},Cx=new J,wx=new J,Tx=new J,Ex=new J,Dx=new J,Ox=new J,kx=new J,Ax=new J,jx=new J,Mx=new ni,Nx=new ni,Px=new q,Fx=new q,Ix=new q,Lx=new q,Rx=new q,zx=new q(1,0,0),Bx=new q(0,1,0),Vx=new q(0,0,1),Hx=v.forwardRef(({enabled:e=!0,matrix:t,onDragStart:n,onDrag:r,onDragEnd:i,autoTransform:a=!0,anchor:o,disableAxes:s=!1,disableSliders:c=!1,disableRotations:l=!1,disableScaling:u=!1,activeAxes:d=[!0,!0,!0],offset:f=[0,0,0],rotation:p=[0,0,0],scale:m=1,lineWidth:h=4,fixed:g=!1,translationLimits:_,rotationLimits:y,scaleLimits:b,depthTest:x=!0,renderOrder:S=500,axisColors:C=[`#ff2060`,`#20df80`,`#2080ff`],hoveredColor:w=`#ffff40`,annotations:T=!1,annotationsClass:E,opacity:D=1,visible:O=!0,userData:k,children:A,...j},M)=>{let N=A_(e=>e.invalidate),P=v.useRef(null),F=v.useRef(null),I=v.useRef(null),L=v.useRef(null),ee=v.useRef([0,0,0]),R=v.useRef(new q(1,1,1)),te=v.useRef(new q(1,1,1));v.useLayoutEffect(()=>{o&&(L.current.updateWorldMatrix(!0,!0),Ex.copy(L.current.matrixWorld).invert(),Mx.makeEmpty(),L.current.traverse(e=>{e.geometry&&(e.geometry.boundingBox||e.geometry.computeBoundingBox(),Ox.copy(e.matrixWorld).premultiply(Ex),Nx.copy(e.geometry.boundingBox),Nx.applyMatrix4(Ox),Mx.union(Nx))}),Px.copy(Mx.max).add(Mx.min).multiplyScalar(.5),Fx.copy(Mx.max).sub(Mx.min).multiplyScalar(.5),Ix.copy(Fx).multiply(new q(...o)).add(Px),Lx.set(...f).add(Ix),I.current.position.copy(Lx),N())});let z=v.useMemo(()=>({onDragStart:e=>{Cx.copy(F.current.matrix),wx.copy(F.current.matrixWorld),n&&n(e),N()},onDrag:e=>{Tx.copy(P.current.matrixWorld),Ex.copy(Tx).invert(),Dx.copy(wx).premultiply(e),Ox.copy(Dx).premultiply(Ex),kx.copy(Cx).invert(),Ax.copy(Ox).multiply(kx),a&&F.current.matrix.copy(Ox),r&&r(Ox,Ax,Dx,e),N()},onDragEnd:()=>{i&&i(),N()},translation:ee,translationLimits:_,rotationLimits:y,axisColors:C,hoveredColor:w,opacity:D,scale:m,lineWidth:h,fixed:g,depthTest:x,renderOrder:S,userData:k,annotations:T,annotationsClass:E}),[n,r,i,ee,_,y,b,x,m,h,g,...C,w,D,k,a,T,E]),B=new q;return j_(e=>{if(g){let t=pb(I.current.getWorldPosition(B),m,e.camera,e.size);R.current.setScalar(t)}t&&t instanceof J&&(F.current.matrix=t),F.current.updateWorldMatrix(!0,!0),jx.makeRotationFromEuler(I.current.rotation).setPosition(I.current.position).premultiply(F.current.matrixWorld),te.current.setFromMatrixScale(jx),Rx.copy(R.current).divide(te.current),(Math.abs(I.current.scale.x-Rx.x)>1e-4||Math.abs(I.current.scale.y-Rx.y)>1e-4||Math.abs(I.current.scale.z-Rx.z)>1e-4)&&(I.current.scale.copy(Rx),e.invalidate())}),v.useImperativeHandle(M,()=>F.current,[]),v.createElement(Kb.Provider,{value:z},v.createElement(`group`,{ref:P},v.createElement(`group`,ny({ref:F,matrix:t,matrixAutoUpdate:!1},j),v.createElement(`group`,{visible:O,ref:I,position:f,rotation:p},e&&v.createElement(v.Fragment,null,!s&&d[0]&&v.createElement(Qb,{axis:0,direction:zx}),!s&&d[1]&&v.createElement(Qb,{axis:1,direction:Bx}),!s&&d[2]&&v.createElement(Qb,{axis:2,direction:Vx}),!c&&d[0]&&d[1]&&v.createElement(hx,{axis:2,dir1:zx,dir2:Bx}),!c&&d[0]&&d[2]&&v.createElement(hx,{axis:1,dir1:Vx,dir2:zx}),!c&&d[2]&&d[1]&&v.createElement(hx,{axis:0,dir1:Bx,dir2:Vx}),!l&&d[0]&&d[1]&&v.createElement(ux,{axis:2,dir1:zx,dir2:Bx}),!l&&d[0]&&d[2]&&v.createElement(ux,{axis:1,dir1:Vx,dir2:zx}),!l&&d[2]&&d[1]&&v.createElement(ux,{axis:0,dir1:Bx,dir2:Vx}),!u&&d[0]&&v.createElement(Sx,{axis:0,direction:zx}),!u&&d[1]&&v.createElement(Sx,{axis:1,direction:Bx}),!u&&d[2]&&v.createElement(Sx,{axis:2,direction:Vx}))),v.createElement(`group`,{ref:L},A))))}),Ux=.5,Wx=[.5,.75,1,1.25,1.5,2,3,4],Gx=e=>.05+e*.055,Kx=e=>e*Math.PI/180;function qx(e){let t=Ux,n=Kx(e.angle??90)-Math.PI/2;return[{id:`a`,pos:[0,0,0],dir:[-1,0,0]},{id:`b`,pos:[t*Math.cos(n),t*Math.sin(n)+t,0],dir:[-Math.sin(n),Math.cos(n),0]}]}function Jx(e){let t=Wx[0],n=Math.abs(e-t);for(let r of Wx){let i=Math.abs(e-r);i[{id:`a`,pos:[-e.length/2,0,0],dir:[-1,0,0]},{id:`b`,pos:[e.length/2,0,0],dir:[1,0,0]}]},coupling:{type:`coupling`,label:`Coupling`,category:`Plumbing`,description:`Straight fitting for joining two pipe ends`,color:`#aeb7c2`,defaults:{diameter:1},params:{diameter:{label:`Diameter`,min:.5,max:4,step:.25,unit:`in`}},getConnectors:()=>[{id:`a`,pos:[-.3,0,0],dir:[-1,0,0]},{id:`b`,pos:[.3,0,0],dir:[1,0,0]}]},reducer:{type:`reducer`,label:`Reducer`,category:`Plumbing`,description:`Inline reducer fitting between two pipe diameters`,color:`#a8b2bf`,defaults:{diameterA:1.5,diameterB:1},params:{diameterA:{label:`Diameter A`,min:.5,max:4,step:.25,unit:`in`},diameterB:{label:`Diameter B`,min:.5,max:4,step:.25,unit:`in`}},getConnectors:()=>[{id:`a`,pos:[-.35,0,0],dir:[-1,0,0]},{id:`b`,pos:[.35,0,0],dir:[1,0,0]}]},cap:{type:`cap`,label:`Cap`,category:`Plumbing`,description:`End cap that terminates a pipe run`,color:`#9aa3b0`,defaults:{diameter:1},params:{diameter:{label:`Diameter`,min:.5,max:4,step:.25,unit:`in`}},getConnectors:()=>[{id:`in`,pos:[-.22,0,0],dir:[-1,0,0]}]},elbow:{type:`elbow`,label:`Elbow`,category:`Plumbing`,description:`Bend fitting (15–180°)`,color:`#9aa3b0`,defaults:{angle:90,diameter:1},params:{angle:{label:`Bend angle`,min:15,max:180,step:15,unit:`°`},diameter:{label:`Diameter`,min:.5,max:4,step:.25,unit:`in`}},getConnectors:qx},tee:{type:`tee`,label:`T-Joint`,category:`Plumbing`,description:`3-way splitter fitting`,color:`#9aa3b0`,defaults:{diameter:1},params:{diameter:{label:`Diameter`,min:.5,max:4,step:.25,unit:`in`}},getConnectors:()=>[{id:`a`,pos:[-.6,0,0],dir:[-1,0,0]},{id:`b`,pos:[.6,0,0],dir:[1,0,0]},{id:`c`,pos:[0,0,.6],dir:[0,0,1]}]},valve:{type:`valve`,label:`Valve`,category:`Flow Control`,description:`Inline ball valve (0–100% open)`,color:`#e0564f`,defaults:{diameter:1,open:100},params:{open:{label:`Open`,min:0,max:100,step:5,unit:`%`},diameter:{label:`Diameter`,min:.5,max:4,step:.25,unit:`in`}},getConnectors:()=>[{id:`a`,pos:[-.35,0,0],dir:[-1,0,0]},{id:`b`,pos:[.35,0,0],dir:[1,0,0]}]},pump:{type:`pump`,label:`Pump`,category:`Flow Control`,description:`Submersible/inline pump — pressure source`,color:`#3d7bfa`,defaults:{gph:400,maxHeadFt:8,on:1},params:{gph:{label:`Rated flow`,min:50,max:2e3,step:25,unit:`GPH`},maxHeadFt:{label:`Max head`,min:2,max:30,step:1,unit:`ft`}},getConnectors:()=>[{id:`in`,pos:[-.45,.25,0],dir:[-1,0,0]},{id:`out`,pos:[.45,.25,0],dir:[1,0,0]}]},reservoir:{type:`reservoir`,label:`Reservoir`,category:`Flow Control`,description:`Water tank — source & return sink`,color:`#2a3950`,defaults:{width:2,depth:1.4,height:1,level:70,ph:6,ec:1.2},params:{width:{label:`Width`,min:1,max:6,step:.5,unit:`ft`},depth:{label:`Depth`,min:1,max:6,step:.5,unit:`ft`},height:{label:`Height`,min:.5,max:4,step:.25,unit:`ft`},level:{label:`Fill level`,min:0,max:100,step:5,unit:`%`},ph:{label:`Water pH`,min:4,max:8.5,step:.1,unit:``},ec:{label:`Water EC`,min:0,max:3,step:.1,unit:`mS/cm`}},getConnectors:e=>[{id:`a`,pos:[-e.width/2,.25,0],dir:[-1,0,0]},{id:`b`,pos:[e.width/2,.25,0],dir:[1,0,0]},{id:`c`,pos:[0,.25,-e.depth/2],dir:[0,0,-1]},{id:`d`,pos:[0,.25,e.depth/2],dir:[0,0,1]}]},tower:{type:`tower`,label:`Grow Tower`,category:`Growing`,description:`Vertical NFT tower with plant sites`,color:`#e8eaed`,defaults:{height:4,sites:6},params:{height:{label:`Height`,min:2,max:10,step:.5,unit:`ft`},sites:{label:`Plant sites`,min:2,max:16,step:1}},getConnectors:e=>[{id:`in`,pos:[0,e.height,0],dir:[0,1,0]},{id:`out`,pos:[.45,.15,0],dir:[1,0,0]}]},tray:{type:`tray`,label:`Grow Tray`,category:`Growing`,description:`Flood/NFT channel tray`,color:`#d7dce2`,defaults:{length:3,width:1.2},params:{length:{label:`Length`,min:1,max:8,step:.5,unit:`ft`},width:{label:`Width`,min:.5,max:4,step:.25,unit:`ft`}},getConnectors:e=>[{id:`in`,pos:[-e.length/2,.15,0],dir:[-1,0,0]},{id:`out`,pos:[e.length/2,.15,0],dir:[1,0,0]}]},wallPanel:{type:`wallPanel`,label:`Wall Panel`,category:`Growing`,description:`Vertical grow wall with pockets`,color:`#3b7a57`,defaults:{width:3,height:4,rows:4,cols:5},params:{width:{label:`Width`,min:1,max:8,step:.5,unit:`ft`},height:{label:`Height`,min:1,max:8,step:.5,unit:`ft`},rows:{label:`Pocket rows`,min:1,max:8,step:1},cols:{label:`Pocket cols`,min:1,max:10,step:1}},getConnectors:e=>[{id:`in`,pos:[0,e.height,0],dir:[0,1,0]},{id:`out`,pos:[0,.05,0],dir:[0,-1,0]}]},lattice:{type:`lattice`,label:`Lattice`,category:`Structure`,description:`Structural lattice frame (no flow)`,color:`#8a7a5c`,defaults:{width:2.5,height:3},params:{width:{label:`Width`,min:1,max:8,step:.5,unit:`ft`},height:{label:`Height`,min:1,max:8,step:.5,unit:`ft`}},getConnectors:()=>[]},netPot:{type:`netPot`,label:`Net Pot`,category:`Growing`,description:`Plant cup with seedling (decorative)`,color:`#222a33`,defaults:{size:1},params:{size:{label:`Size`,min:.5,max:2,step:.25}},getConnectors:()=>[]},emitter:{type:`emitter`,label:`Emitter`,category:`Flow Control`,description:`Drip/spray outlet — terminates a line`,color:`#46c0e8`,defaults:{},params:{},getConnectors:()=>[{id:`in`,pos:[.2,0,0],dir:[1,0,0]}]},drain:{type:`drain`,label:`Drain`,category:`Flow Control`,description:`Floor drain — limited-capacity exit point`,color:`#64748b`,defaults:{capacityGph:250},params:{capacityGph:{label:`Capacity`,min:50,max:2e3,step:25,unit:`GPH`}},getConnectors:()=>[{id:`in`,pos:[-.35,.25,0],dir:[-1,0,0]}]},growTent:{type:`growTent`,label:`Grow Tent`,category:`Environment`,description:`Room/tent enclosure for planning air exchange and equipment`,color:`#475569`,defaults:{width:7,depth:5,height:4,sealed:0},params:{width:{label:`Width`,min:2,max:20,step:.5,unit:`ft`},depth:{label:`Depth`,min:2,max:20,step:.5,unit:`ft`},height:{label:`Height`,min:2,max:12,step:.5,unit:`ft`},sealed:{label:`Sealed room`,min:0,max:1,step:1}},getConnectors:()=>[]},inlineFan:{type:`inlineFan`,label:`Inline Fan`,category:`Environment`,description:`Duct fan for room exhaust/intake calculations`,color:`#0f766e`,defaults:{cfm:600,diameter:6,exhaust:1},params:{cfm:{label:`Airflow`,min:50,max:4e3,step:25,unit:`CFM`},diameter:{label:`Duct size`,min:4,max:14,step:2,unit:`in`},exhaust:{label:`Exhaust mode`,min:0,max:1,step:1}},getConnectors:()=>[]},circulationFan:{type:`circulationFan`,label:`Circulation Fan`,category:`Environment`,description:`Internal airflow fan for canopy mixing`,color:`#2563eb`,defaults:{cfm:250,sweep:90},params:{cfm:{label:`Airflow`,min:50,max:1500,step:25,unit:`CFM`},sweep:{label:`Sweep`,min:0,max:180,step:15,unit:`°`}},getConnectors:()=>[]},growLight:{type:`growLight`,label:`Grow Light`,category:`Environment`,description:`Overhead grow fixture for room planning`,color:`#fbbf24`,defaults:{width:2,depth:2,watts:650,hangingHeight:1.5,photoperiod:18},params:{width:{label:`Width`,min:.5,max:6,step:.25,unit:`ft`},depth:{label:`Depth`,min:.5,max:6,step:.25,unit:`ft`},watts:{label:`Power`,min:50,max:1500,step:25,unit:`W`},hangingHeight:{label:`Hang height`,min:.25,max:6,step:.25,unit:`ft`},photoperiod:{label:`Hours On`,min:0,max:24,step:1,unit:`h`}},getConnectors:()=>[]},co2Tank:{type:`co2Tank`,label:`CO₂ Tank`,category:`Environment`,description:`CO₂ cylinder for sealed-room enrichment planning`,color:`#22c55e`,defaults:{pounds:20,regulatorCfh:20},params:{pounds:{label:`Tank size`,min:5,max:100,step:5,unit:`lb`},regulatorCfh:{label:`Release rate`,min:1,max:100,step:1,unit:`CFH`}},getConnectors:()=>[]},airCompressor:{type:`airCompressor`,label:`Air Compressor`,category:`Flow Control`,description:`Aerate reservoir water with an attached airstone`,color:`#0ea5e9`,defaults:{gph:120,frequency:5,on:1},params:{gph:{label:`Air Flow`,min:20,max:400,step:10,unit:`GPH`},frequency:{label:`Bubble Freq`,min:1,max:10,step:1,unit:`Hz`}},getConnectors:()=>[]},reducingTee:{type:`reducingTee`,label:`Reducing Tee`,category:`Plumbing`,description:`Tee branch with a reduced secondary outlet size`,color:`#8b9bb4`,defaults:{diameterA:1.5,diameterB:1},params:{diameterA:{label:`Main Run Diameter`,min:.5,max:4,step:.25,unit:`in`},diameterB:{label:`Branch Diameter`,min:.5,max:4,step:.25,unit:`in`}},getConnectors:()=>[{id:`a`,pos:[-.6,0,0],dir:[-1,0,0]},{id:`b`,pos:[.6,0,0],dir:[1,0,0]},{id:`c`,pos:[0,0,.6],dir:[0,0,1]}]},reducingElbow:{type:`reducingElbow`,label:`Reducing Elbow`,category:`Plumbing`,description:`90-degree elbow transitioning between two diameters`,color:`#9aa3b0`,defaults:{diameterA:1.5,diameterB:1},params:{diameterA:{label:`Diameter A`,min:.5,max:4,step:.25,unit:`in`},diameterB:{label:`Diameter B`,min:.5,max:4,step:.25,unit:`in`}},getConnectors:()=>[{id:`a`,pos:[0,0,0],dir:[-1,0,0]},{id:`b`,pos:[.18,.18,0],dir:[0,1,0]}]},bulkhead:{type:`bulkhead`,label:`Bulkhead Fitting`,category:`Plumbing`,description:`Tank wall pass-through connector`,color:`#27272a`,defaults:{diameter:1},params:{diameter:{label:`Diameter`,min:.5,max:4,step:.25,unit:`in`}},getConnectors:()=>[{id:`a`,pos:[-.2,0,0],dir:[-1,0,0]},{id:`b`,pos:[.2,0,0],dir:[1,0,0]}]},waterChiller:{type:`waterChiller`,label:`Water Chiller`,category:`Flow Control`,description:`Thermoelectric water chiller to keep reservoirs cool`,color:`#0891b2`,defaults:{targetTemp:68,on:1,diameter:1},params:{targetTemp:{label:`Target Temp`,min:45,max:80,step:1,unit:`°F`},diameter:{label:`Port Size`,min:.5,max:2,step:.25,unit:`in`}},getConnectors:()=>[{id:`in`,pos:[-.2,1.05,0],dir:[0,1,0]},{id:`out`,pos:[.2,1.05,0],dir:[0,1,0]}]},reverseOsmosis:{type:`reverseOsmosis`,label:`RO Filter`,category:`Plumbing`,description:`Reverse osmosis filter to purify source water`,color:`#3b82f6`,defaults:{diameter:1},params:{diameter:{label:`Diameter`,min:.5,max:4,step:.25,unit:`in`}},getConnectors:()=>[{id:`a`,pos:[-.3,0,0],dir:[-1,0,0]},{id:`b`,pos:[.3,0,0],dir:[1,0,0]}]}},Xx=[{name:`Plumbing`,types:[`pipe`,`coupling`,`reducer`,`cap`,`elbow`,`tee`,`reducingTee`,`reducingElbow`,`bulkhead`,`reverseOsmosis`]},{name:`Flow Control`,types:[`pump`,`reservoir`,`valve`,`emitter`,`drain`,`airCompressor`,`waterChiller`]},{name:`Growing`,types:[`tower`,`tray`,`wallPanel`,`netPot`]},{name:`Structure`,types:[`lattice`]},{name:`Environment`,types:[`growTent`,`inlineFan`,`circulationFan`,`growLight`,`co2Tank`]}],Zx=new Set([`pipe`,`coupling`,`reducer`,`cap`,`elbow`,`tee`,`valve`,`pump`,`reservoir`,`tower`,`tray`,`wallPanel`,`emitter`,`drain`,`reducingTee`,`reducingElbow`,`bulkhead`,`waterChiller`,`reverseOsmosis`]),Qx=new Set([`pipe`,`coupling`,`reducer`,`elbow`,`tee`,`valve`,`pump`,`reducingTee`,`reducingElbow`,`bulkhead`,`waterChiller`,`reverseOsmosis`]),$x=.8,eS=new pr,tS=new q;function nS(e){let t=Yx[e.type];return eS.set(e.rotation[0],e.rotation[1],e.rotation[2],`XYZ`),t.getConnectors(e.params).map(t=>{let n=tS.set(...t.pos).applyEuler(eS).toArray();n[0]+=e.position[0],n[1]+=e.position[1],n[2]+=e.position[2];let r=new q(...t.dir).applyEuler(eS).toArray();return{key:`${e.id}:${t.id}`,partId:e.id,connectorId:t.id,partType:e.type,pos:n,dir:r}})}var rS=(e,t)=>Math.hypot(e[0]-t[0],e[1]-t[1],e[2]-t[2]);function iS(e,t){let n=nS(e);if(!n.length)return null;let r=null;for(let i of t)if(i.id!==e.id)for(let e of nS(i))for(let t of n){let n=rS(t.pos,e.pos);n<.8&&(!r||ne.connectorId===`a`),o=t.find(e=>e.connectorId===`b`);if(!a||!o)continue;let s=a.pos[0],c=a.pos[2],l=o.pos[0],u=o.pos[2],d=l-s,f=u-c,p=d*d+f*f;if(p<1e-6)continue;let m=e[0]-s,h=e[2]-c,g=(m*d+h*f)/p;if(g<=.15||g>=.85)continue;let _=s+d*g,v=c+f*g,y=Math.hypot(e[0]-_,e[2]-v);if(y>n)continue;let b=i.rotation[1],x=e[0]-_,S=e[2]-v,C=Math.atan2(-S,x)-b,w=b+Math.round(C/(Math.PI/2))*(Math.PI/2)+Math.PI/2;w=Math.atan2(Math.sin(w),Math.cos(w));let T=nS({id:`__tap__`,type:`tee`,position:[_,i.position[1],v],rotation:[0,w,0],params:{...Yx.tee.defaults,diameter:i.params.diameter??1}}).find(e=>e.connectorId===`c`);if(!T)continue;let E={partId:i.id,pos:[_,i.position[1],v],branchPos:T.pos,rotationY:w,diameter:i.params.diameter??1,d:y};(!r||y0:!1}function fS(e,t){let[n,r,i]=e.position,a=e.params??{},o=.2,s=[e.position,...t.map(e=>e.pos)],c=[1/0,1/0,1/0],l=[-1/0,-1/0,-1/0];for(let e of s)for(let t=0;t<3;t++)c[t]=Math.min(c[t],e[t]-o),l[t]=Math.max(l[t],e[t]+o);let u=(a.width??0)/2;u>0&&(c[0]=Math.min(c[0],n-u),l[0]=Math.max(l[0],n+u));let d=(a.length??0)/2;d>0&&(c[0]=Math.min(c[0],n-d),l[0]=Math.max(l[0],n+d));let f=(a.depth??a.width??0)/2;return f>0&&(c[2]=Math.min(c[2],i-f),l[2]=Math.max(l[2],i+f)),(a.height??0)>0&&(c[1]=Math.min(c[1],r),l[1]=Math.max(l[1],r+a.height)),{min:c,max:l}}var pS=class{parent=new Map;find(e){let t=this.parent.get(e)??e;return t!==e&&(t=this.find(t),this.parent.set(e,t)),t}union(e,t){let n=this.find(e),r=this.find(t);n!==r&&this.parent.set(n,r)}};function mS(e){let t=new Map,n=[];for(let r of e){let e=cS(r);t.set(r.id,e),n.push(...e)}let r=[],i=new Set,a=new pS;for(let e=0;e{let n=o.get(e);n||o.set(e,n=new Set),n.add(t)};for(let{a:e,b:t}of r)s(e.partId,t.partId),s(t.partId,e.partId);let c=[],l=new Map;for(let n of e){if(!t.get(n.id)?.length||l.has(n.id))continue;let e=new Set,r=[n.id];for(l.set(n.id,c.length);r.length;){let t=r.pop();e.add(t);for(let e of o.get(t)??[])l.has(e)||(l.set(e,c.length),r.push(e))}c.push(e)}let u=new Map,d=new Map,f=(e,t)=>{let n=u.get(e);return n||(n={id:e,pos:t,edges:[]},u.set(e,n)),n};for(let n of e){let e=t.get(n.id)??[];if(!e.length)continue;let r=f(`P:${n.id}`,n.position);for(let t of e){let e=`N:${a.find(t.key)}`;d.set(t.key,e),f(e,t.pos).edges.push({to:r.id,partId:n.id}),r.edges.push({to:e,partId:n.id})}}return{connectorsByPart:t,joints:r,joinedKeys:i,neighbors:o,componentOf:l,components:c,nodes:u,nodeOfConnector:d}}var hS=()=>Math.random().toString(36).substring(2,10);function gS(e){if(e.type!==`growTent`&&e.type!==`reservoir`&&e.type!==`tray`&&e.type!==`wallPanel`&&e.type!==`tower`)return null;let t=1,n=1,r=1;e.type===`tray`?(t=e.params.length??3,n=e.params.width??1.2,r=.25):e.type===`wallPanel`?(t=e.params.width??3,n=.5,r=e.params.height??4):e.type===`tower`?(t=1,n=1,r=e.params.height??4):(t=e.params.width??2,n=e.params.depth??1.4,r=e.params.height??1);let i=new ni(new q(-t/2,0,-n/2),new q(t/2,r,n/2)),a=new q(...e.position),o=new pr(...e.rotation,`XYZ`),s=new J().compose(a,new Mn().setFromEuler(o),new q(1,1,1));return i.applyMatrix4(s),i}function _S(e,t,n){let r=e instanceof q?e.clone():new q(...e),i=t instanceof q?t.clone():new q(...t),a=Math.round(r.x*2),o=Math.round(r.y*2),s=Math.round(r.z*2),c=Math.round(i.x*2),l=Math.round(i.y*2),u=Math.round(i.z*2),d=`${a},${o},${s}`,f=`${c},${l},${u}`,p=Math.min(a,c)-12,m=Math.max(a,c)+12,h=Math.min(o,l)-12,g=Math.max(o,l)+12,_=Math.min(s,u)-12,v=Math.max(s,u)+12;h=Math.max(h,-4);for(let e of n)p=Math.min(p,Math.round((e.min.x-2)*2)),m=Math.max(m,Math.round((e.max.x+2)*2)),h=Math.min(h,Math.round((e.min.y-2)*2)),g=Math.max(g,Math.round((e.max.y+2)*2)),_=Math.min(_,Math.round((e.min.z-2)*2)),v=Math.max(v,Math.round((e.max.z+2)*2));let y=new Set([d]),b=new Map,x=new Map,S=new Map;x.set(d,0);let C=(e,t,n,r,i,a)=>Math.abs(e-r)+Math.abs(t-i)+Math.abs(n-a);S.set(d,C(a,o,s,c,l,u));let w=0;for(;y.size>0&&(w++,!(w>3e4));){let e=``,t=1/0;for(let n of y){let r=S.get(n)??1/0;r.05&&a.push(e);return a[a.length-1].distanceTo(i)>.05&&a.push(i.clone()),a}y.delete(e);let w=[[a+1,o,s],[a-1,o,s],[a,o+1,s],[a,o-1,s],[a,o,s+1],[a,o,s-1]];for(let[t,r,i]of w){if(tm||rg||i<_||i>v)continue;let w=`${t},${r},${i}`,T=new q(t/2,r/2,i/2);if(w!==f&&w!==d){let e=!1;for(let t of n)if(t.clone().expandByScalar(.08).containsPoint(T)){e=!0;break}if(e)continue}let E=x.get(e)??1/0,D=t-a,O=r-o,k=i-s,A=!1,j=b.get(e);if(j){let[e,t,n]=j.split(`,`).map(Number),r=a-e,i=o-t,c=s-n;(r!==D||i!==O||c!==k)&&(A=!0)}let M=E+(.5+(A?5:0));M<(x.get(w)??1/0)&&(b.set(w,e),x.set(w,M),S.set(w,M+C(t,r,i,c,l,u)),y.add(w))}}return null}function vS(e,t,n){if(e.length<2)return[];let r=[e[0]];for(let t=1;t.05){let e=l.clone().add(u).multiplyScalar(.5),r=new Mn().setFromUnitVectors(new q(1,0,0),c),a=new pr().setFromQuaternion(r,`XYZ`);i.push({id:`pipe-${hS()}`,type:`pipe`,position:[e.x,e.y,e.z],rotation:[a.x,a.y,a.z],params:{length:d,diameter:t},roomId:n})}if(a[e+1]){let a=s,o=r[e+2],l=c,u=o.clone().sub(a).normalize(),d=a.clone().addScaledVector(l,-.5),f=new J().makeBasis(l,u,new q().crossVectors(l,u).normalize()),p=new pr().setFromRotationMatrix(f,`XYZ`);i.push({id:`elbow-${hS()}`,type:`elbow`,position:[d.x,d.y,d.z],rotation:[p.x,p.y,p.z],params:{angle:90,diameter:t},roomId:n})}}return i}var yS=Sy((e,t)=>({toasts:[],addToast:(n,r)=>{let i=typeof crypto.randomUUID==`function`?crypto.randomUUID().slice(0,8):Math.random().toString(36).substring(2,10);e({toasts:[...t().toasts,{id:i,message:n,type:r}]}),setTimeout(()=>t().dismissToast(i),3e3)},dismissToast:n=>{e({toasts:t().toasts.map(e=>e.id===n?{...e,exiting:!0}:e)}),setTimeout(()=>e({toasts:t().toasts.filter(e=>e.id!==n)}),300)}})),bS=yS.getState().addToast,xS={success:`border-l-emerald-500`,error:`border-l-rose-500`,info:`border-l-sky-500`};function SS(){let e=yS(e=>e.toasts),t=yS(e=>e.dismissToast);return e.length===0?null:(0,Z.jsx)(`div`,{className:`pointer-events-none fixed bottom-4 right-4 z-[200] flex flex-col-reverse gap-2`,children:e.map(e=>(0,Z.jsx)(CS,{toast:e,onDismiss:t},e.id))})}function CS({toast:e,onDismiss:t}){return(0,Z.jsxs)(`div`,{className:`pointer-events-auto flex items-start gap-2 rounded-lg border-l-4 bg-zinc-900 px-4 py-3 shadow-2xl ${xS[e.type]} ${e.exiting?`animate-toast-out`:`animate-toast-in`}`,children:[(0,Z.jsx)(`span`,{className:`text-sm text-zinc-200`,children:e.message}),(0,Z.jsx)(`button`,{onClick:()=>t(e.id),className:`ml-2 shrink-0 text-zinc-500 hover:text-zinc-200 transition cursor-pointer text-xs leading-none mt-0.5`,children:`✕`})]})}var wS=()=>crypto.randomUUID().slice(0,8),TS=new Mn,ES=new pr,DS=new q,OS=new q,kS=1,AS=.18,jS=new Set([`inlineFan`,`circulationFan`,`growLight`,`co2Tank`]),MS={tag:``,time:0},NS=(e,t)=>Math.round(e/t)*t;function PS(e,t,n){return t===`diameter`||t===`diameterA`||t===`diameterB`?Jx(n):n}function FS(e,t,n){return Math.max(t,Math.min(n,e))}function IS(e,t,n){if(!jS.has(e.type))return null;let r=null;for(let i of Object.values(n)){if(i.id===e.id||i.type!==`growTent`||i.roomId!==e.roomId)continue;let n=i.params.width??0,a=i.params.depth??0,o=i.params.height??0,s=Math.max(0,Math.abs(t[0]-i.position[0])-n/2),c=Math.max(0,Math.abs(t[2]-i.position[2])-a/2),l=t[1]i.position[1]+o?t[1]-(i.position[1]+o):0,u=s+c+l,d=s<=kS&&c<=kS&&l<=Math.max(kS,o);(t[0]>=i.position[0]-n/2&&t[0]<=i.position[0]+n/2&&t[2]>=i.position[2]-a/2&&t[2]<=i.position[2]+a/2&&t[1]>=i.position[1]&&t[1]<=i.position[1]+o||d)&&(!r||ue.d-t.d)[0]?.kind;return e.type===`inlineFan`?v===`left`?{position:[c,Math.max(f+.5,p-.45),FS(t[2],u+.25,d-.25)],rotation:[0,0,0]}:v===`right`?{position:[l,Math.max(f+.5,p-.45),FS(t[2],u+.25,d-.25)],rotation:[0,Math.PI,0]}:v===`front`?{position:[FS(t[0],c+.25,l-.25),Math.max(f+.5,p-.45),u],rotation:[0,-Math.PI/2,0]}:{position:[FS(t[0],c+.25,l-.25),Math.max(f+.5,p-.45),d],rotation:[0,Math.PI/2,0]}:e.type===`circulationFan`?v===`left`?{position:[c,f+s*.6,FS(t[2],u+.35,d-.35)],rotation:[0,0,0]}:v===`right`?{position:[l,f+s*.6,FS(t[2],u+.35,d-.35)],rotation:[0,Math.PI,0]}:v===`front`?{position:[FS(t[0],c+.35,l-.35),f+s*.6,u],rotation:[0,-Math.PI/2,0]}:{position:[FS(t[0],c+.35,l-.35),f+s*.6,d],rotation:[0,Math.PI/2,0]}:null}function RS(e,t,n){let r=t.type===`reducer`?e.connectorId===`a`?t.params.diameterA:t.params.diameterB:t.params.diameter??Yx.cap.defaults.diameter??1,i=new q(-e.dir[0],-e.dir[1],-e.dir[2]).normalize();return TS.setFromUnitVectors(new q(-1,0,0),i),ES.setFromQuaternion(TS,`XYZ`),DS.set(-.22,0,0).applyQuaternion(TS),OS.set(e.pos[0],e.pos[1],e.pos[2]).sub(DS),{id:wS(),type:`cap`,position:[OS.x,OS.y,OS.z],rotation:[ES.x,ES.y,ES.z],params:{...Yx.cap.defaults,diameter:r},roomId:n??t.roomId}}function zS(e,t,n){let r=new q(-e.dir[0],-e.dir[1],-e.dir[2]).normalize();return TS.setFromUnitVectors(new q(1,0,0),r),ES.setFromQuaternion(TS,`XYZ`),DS.set(.2,0,0).applyQuaternion(TS),OS.set(e.pos[0],e.pos[1],e.pos[2]).sub(DS),{id:wS(),type:`emitter`,position:[OS.x,OS.y,OS.z],rotation:[ES.x,ES.y,ES.z],params:{...Yx.emitter.defaults},label:`${t.label??Yx[t.type].label} outlet`,roomId:n??t.roomId}}var Q=Sy((e,t)=>({parts:{},selectedIds:[],placingType:null,draggingId:null,gizmoDragging:!1,snapTargetKey:null,colorPopover:null,tool:`select`,viewMode:`orbit`,renderMode:`builder`,showFlow:!0,heatmapMode:!1,simRunning:!0,snapToGrid:!0,gridSize:.25,measurePoints:[],pipeRunPoints:[],projectName:`Untitled system`,growthStage:`vegetative`,focusTarget:null,scene:null,rooms:[{id:`room-1`,name:`Room 1`}],activeRoomId:`room-1`,past:[],future:[],pushHistory:(t=``)=>{let n=Date.now();if(t&&t===MS.tag&&n-MS.time<400){MS.time=n;return}MS={tag:t,time:n},e(e=>({past:[...e.past.slice(-99),e.parts],future:[]}))},undo:()=>e(e=>{if(!e.past.length)return e;let t=e.past[e.past.length-1];return{parts:t,past:e.past.slice(0,-1),future:[e.parts,...e.future],selectedIds:e.selectedIds.filter(e=>t[e])}}),redo:()=>e(e=>{if(!e.future.length)return e;let t=e.future[0];return{parts:t,past:[...e.past,e.parts],future:e.future.slice(1),selectedIds:e.selectedIds.filter(e=>t[e])}}),addRoom:t=>{let n=wS();e(e=>({rooms:[...e.rooms,{id:n,name:t}],activeRoomId:n}))},removeRoom:n=>{let r=t();if(r.rooms.length<=1)return;r.pushHistory(`remove-room`);let i=r.rooms.filter(e=>e.id!==n),a=r.activeRoomId===n?i[0].id:r.activeRoomId,o=Object.fromEntries(Object.entries(r.parts).filter(([e,t])=>t.roomId!==n));e({rooms:i,activeRoomId:a,parts:o,selectedIds:r.selectedIds.filter(e=>o[e])})},setActiveRoomId:t=>e({activeRoomId:t}),syncParts:t=>e({parts:t}),addPart:(n,r,i)=>{t().pushHistory();let a=wS(),o={id:a,type:n,position:r,rotation:[0,0,0],params:{...Yx[n].defaults},roomId:t().activeRoomId},s=LS(o,o.position,o.rotation,t().parts);return s&&(o={...o,...s}),e(e=>({parts:{...e.parts,[a]:o},selectedIds:[a]})),i?.snap!==!1&&t().snapPartToConnectors(a),a},spawnPipeAtConnector:n=>{let r=t(),[i,a]=n.split(`:`),o=r.parts[i];if(!o)return;let s=nS(o).find(e=>e.connectorId===a);if(!s)return;r.pushHistory(`spawn-pipe`);let c=wS(),l=o.params.diameter??1,u=new Mn().setFromUnitVectors(new q(1,0,0),new q(...s.dir).normalize()),d=new pr().setFromQuaternion(u,`XYZ`),f={id:c,type:`pipe`,position:[s.pos[0]+s.dir[0]*(2/2),s.pos[1]+s.dir[1]*(2/2),s.pos[2]+s.dir[2]*(2/2)],rotation:[d.x,d.y,d.z],params:{length:2,diameter:l},roomId:r.activeRoomId};e(e=>({parts:{...e.parts,[c]:f},selectedIds:[c]}))},extendPipeRun:(n,r)=>{let i=t(),a=i.pipeRunPoints,o={},s=new Set,c=(e,t,n,r)=>{let i=t[0]-e[0],a=t[2]-e[2],o=Math.hypot(i,a);return o<.1?null:{...r,id:wS(),position:[(e[0]+t[0])/2,r.position[1],(e[2]+t[2])/2],rotation:[0,Math.atan2(-a,i),0],params:{...r.params,length:o,diameter:n}}},l=e=>{if(!e.tapPipeId||e.tapRotationY===void 0)return e;let t=i.parts[e.tapPipeId];if(!t||t.type!==`pipe`)return e;let n=wS(),r={id:n,type:`tee`,position:e.pos,rotation:[0,e.tapRotationY,0],params:{...Yx.tee.defaults,diameter:e.tapDiameter??Yx.tee.defaults.diameter??1},roomId:i.activeRoomId};o[n]=r;let a=nS(r),l=a.find(e=>e.connectorId===`c`),u=a.find(e=>e.connectorId===`a`),d=a.find(e=>e.connectorId===`b`),f=nS(t),p=f.find(e=>e.connectorId===`a`),m=f.find(e=>e.connectorId===`b`);if(u&&d&&p&&m){s.add(t.id);let e=c(p.pos,u.pos,r.params.diameter??1,t),n=c(d.pos,m.pos,r.params.diameter??1,t);e&&(o[e.id]=e),n&&(o[n.id]=n)}return{pos:l?l.pos:e.pos,connectorKey:l?.key??`${n}:c`}};if(a.length===0){let t=l(n);Object.keys(o).length>0?(i.pushHistory(`pipe-run-start`),e(e=>({parts:{...Object.fromEntries(Object.entries(e.parts).filter(([e])=>!s.has(e))),...o},pipeRunPoints:[t],selectedIds:Object.keys(o)}))):e({pipeRunPoints:[t]});return}let u=a[a.length-1],d=l(n),f=d.pos[0]-u.pos[0],p=d.pos[2]-u.pos[2],m=Math.hypot(f,p);if(m<1e-6)return;i.pushHistory(`pipe-run`);let h=Yx.pipe.params.length,g=Math.min(h.max,Math.max(h.min,m)),_=Math.atan2(-p,f),v=e=>{if(!e)return;let[t,n]=e.split(`:`),r=i.parts[t];if(r)return r.type===`reducer`?n===`a`?r.params.diameterA:r.params.diameterB:r.params.diameter},y=v(u.connectorKey),b=v(d.connectorKey),x=y??b??Yx.pipe.defaults.diameter??1,S=wS();if(o[S]={id:S,type:`pipe`,position:[(u.pos[0]+d.pos[0])/2,.25,(u.pos[2]+d.pos[2])/2],rotation:[0,_,0],params:{...Yx.pipe.defaults,length:g,diameter:x},roomId:i.activeRoomId},a.length>=2){let e=a[a.length-2],t=u.pos[0]-e.pos[0],n=u.pos[2]-e.pos[2],r=Math.hypot(t,n);if((r>1e-6?(t*f+n*p)/(r*m):1)<.96){let e=wS();o[e]={id:e,type:`elbow`,position:[u.pos[0],.25,u.pos[2]],rotation:[Math.PI/2,Math.atan2(-n,t)+Math.PI,0],params:{...Yx.elbow.defaults,angle:90,diameter:x},roomId:i.activeRoomId}}}if(b!==void 0&&Math.abs(b-x)>1e-6){let e=wS(),t=Math.cos(_),n=-Math.sin(_);o[e]={id:e,type:`reducer`,position:[d.pos[0]-t*.35,.25,d.pos[2]-n*.35],rotation:[0,_,0],params:{...Yx.reducer.defaults,diameterA:x,diameterB:b},roomId:i.activeRoomId}}e(e=>({parts:{...Object.fromEntries(Object.entries(e.parts).filter(([e])=>!s.has(e))),...o},selectedIds:[S],pipeRunPoints:r?[...a,d]:[]}))},updatePart:(t,n)=>e(e=>{let r=e.parts[t];if(!r)return e;let i={...r,...n};if(n.position&&jS.has(r.type)){let t=LS(i,n.position,n.rotation??i.rotation,e.parts);t&&(i={...i,...t})}return{parts:{...e.parts,[t]:i}}}),setParam:(n,r,i)=>{t().pushHistory(`param:${n}:${r}`),e(e=>{let t=e.parts[n];if(!t)return e;let a=PS(t,r,i);return{parts:{...e.parts,[n]:{...t,params:{...t.params,[r]:a}}}}})},removeParts:n=>{n.length&&(t().pushHistory(),e(e=>{let t=new Set(n);return{parts:Object.fromEntries(Object.entries(e.parts).filter(([e])=>!t.has(e))),selectedIds:e.selectedIds.filter(e=>!t.has(e))}}))},duplicateParts:(n,r)=>{let i=t(),a=n.map(e=>i.parts[e]).filter(Boolean);if(!a.length)return[];i.pushHistory();let o=r?.offset??[1,0,1],s=a.map(e=>({...e,id:wS(),position:[e.position[0]+o[0],e.position[1]+o[1],e.position[2]+o[2]],rotation:[...e.rotation],params:{...e.params},roomId:i.activeRoomId}));return e(e=>({parts:{...e.parts,...Object.fromEntries(s.map(e=>[e.id,e]))},selectedIds:s.map(e=>e.id)})),s.map(e=>e.id)},rotateParts:(n,r,i)=>{n.length&&(t().pushHistory(`rotate:${n.join(`+`)}`),e(e=>{let t={...e.parts};for(let e of n){let n=t[e];if(!n)continue;let a=[...n.rotation];a[r]+=i,t[e]={...n,rotation:a}}return{parts:t}}))},translateParts:(n,r,i)=>{if(!n.length)return;let a=t();i&&a.pushHistory(i);let o=1/0;for(let e of n){let t=a.parts[e];t&&(o=Math.min(o,t.position[1]))}let s=Number.isFinite(o)?Math.max(r[1],-o):r[1];e(e=>{let t={...e.parts};for(let e of n){let n=t[e];if(!n)continue;let i={...n,position:[n.position[0]+r[0],n.position[1]+s,n.position[2]+r[2]]},a=LS(i,i.position,i.rotation,t);a&&(i={...i,...a}),t[e]=i}return{parts:t}})},setPositions:t=>e(e=>{let n={...e.parts};for(let[e,r]of Object.entries(t)){let t=n[e];if(!t)continue;let i={...t,position:r},a=LS(i,r,i.rotation,n);a&&(i={...i,...a}),n[e]=i}return{parts:n}}),setPipeStretch:(t,n,r)=>e(e=>{let i=e.parts[t];return!i||i.type!==`pipe`?e:{parts:{...e.parts,[t]:{...i,position:n,params:{...i.params,length:r}}}}}),applyColor:(n,r)=>{n.length&&(t().pushHistory(`color:${n.join(`+`)}`),e(e=>{let t={...e.parts};for(let e of n){let n=t[e];if(!n)continue;let i={...n};r===void 0?delete i.color:i.color=r,t[e]=i}return{parts:t}}))},snapPartToConnectors:e=>{let n=t(),r=n.parts[e];if(!r)return;let i=iS(r,Object.values(n.parts));i&&n.updatePart(e,{position:[r.position[0]+i[0],r.position[1]+i[1],r.position[2]+i[2]]})},snapGroupToConnectors:(e,n)=>{let r=t(),i=r.parts[n];if(!i)return;let a=new Set(e),o=iS(i,Object.values(r.parts).filter(e=>!a.has(e.id)));o&&r.translateParts(e,o)},selectConnectedRun:n=>{let r=t(),i=Object.values(r.parts);if(!r.parts[n])return;let a=mS(i),o=a.componentOf.get(n);if(o===void 0){e({selectedIds:[n]});return}let s=a.components[o],c=i.filter(e=>s.has(e.id)&&(a.connectorsByPart.get(e.id)?.length??0)>0).map(e=>e.id);e({selectedIds:c.length?c:[n]})},autoCapOpenEnds:()=>{let n=t(),r=Object.values(n.parts),i=mS(r),a=[];for(let e of r){if(!Qx.has(e.type)||e.type===`pump`)continue;let t=i.connectorsByPart.get(e.id)??[];for(let n of t)i.joinedKeys.has(n.key)||a.push(RS(n,e))}return a.length?(n.pushHistory(`auto-cap`),e(e=>({parts:{...e.parts,...Object.fromEntries(a.map(e=>[e.id,e]))},selectedIds:a.map(e=>e.id)})),a.length):0},fixDeadLeg:n=>{let r=t(),i=mS(Object.values(r.parts)),a=new Set(n),o=[...n];for(;o.length;){let e=o.shift();for(let t of i.neighbors.get(e)??[]){let e=r.parts[t];!e||a.has(t)||e.type===`pump`||e.type===`reservoir`||e.type===`drain`||(a.add(t),o.push(t))}}let s=null,c=[...a];for(let e=0;ei.joinedKeys.has(e.key)).length;for(let t of a)i.joinedKeys.has(t.key)||(!s||os.idx)&&(s={part:n,conn:t,joinedCount:o,idx:e})}if(s){let t=zS(s.conn,s.part);return r.pushHistory(`fix-dead-leg`),e(e=>({parts:{...e.parts,[t.id]:t},selectedIds:[t.id]})),t.id}return null},fixDiameterMismatch:n=>{let r=t(),i=n.map(e=>r.parts[e]).filter(e=>e?typeof e.params.diameter==`number`:!1);if(i.length<2)return null;let a=Math.max(...i.map(e=>e.params.diameter??0)),o=0;return r.pushHistory(`fix-diameter`),e(e=>{let t={...e.parts};for(let e of i)(e.params.diameter??0)!==a&&(t[e.id]={...e,params:{...e.params,diameter:a}},o++);return{parts:t,selectedIds:i.map(e=>e.id)}}),o},fixPumpDeadEnd:n=>{let r=t(),i=r.parts[n];if(!i||i.type!==`pump`)return null;let a=mS(Object.values(r.parts)),o=a.connectorsByPart.get(n)??[],s=o.find(e=>e.connectorId===`out`)??o[o.length-1];if(!s)return null;let c=new Set([n]),l=[];for(let{a:e,b:t}of a.joints)e.key===s.key&&l.push(t.partId),t.key===s.key&&l.push(e.partId);for(;l.length;){let e=l.shift();if(!c.has(e)){c.add(e);for(let t of a.neighbors.get(e)??[])!c.has(t)&&r.parts[t]?.type!==`reservoir`&&l.push(t)}}let u=null;for(let e of c){if(e===n)continue;let t=r.parts[e];if(!t)continue;let i=a.connectorsByPart.get(e)??[],o=i.filter(e=>a.joinedKeys.has(e.key)).length;for(let e of i){let n=!a.joinedKeys.has(e.key),r=t.type===`cap`&&a.joinedKeys.has(e.key);if(!n&&!r)continue;let i=(r?10:0)+(t.type===`cap`?5:0)-o;(!u||i>u.score)&&(u={part:t,conn:e,replace:r,score:i})}}if(!u)return null;let d=zS(u.conn,u.part,r.activeRoomId);return r.pushHistory(`fix-pump-dead-end`),e(e=>{let t={...e.parts};return u?.replace&&delete t[u.part.id],t[d.id]=d,{parts:t,selectedIds:[d.id]}}),d.id},selectAll:()=>e({selectedIds:Object.keys(t().parts)}),pasteParts:n=>{let r=t();if(!n.length)return[];r.pushHistory(`paste`);let i=[1,0,1],a=n.map(e=>({...e,id:wS(),position:[e.position[0]+i[0],e.position[1]+i[1],e.position[2]+i[2]],rotation:[...e.rotation],params:{...e.params},roomId:r.activeRoomId}));return e(e=>({parts:{...e.parts,...Object.fromEntries(a.map(e=>[e.id,e]))},selectedIds:a.map(e=>e.id)})),a.map(e=>e.id)},setSelected:t=>e({selectedIds:t?[t]:[]}),toggleSelected:t=>e(e=>({selectedIds:e.selectedIds.includes(t)?e.selectedIds.filter(e=>e!==t):[...e.selectedIds,t]})),setPlacingType:t=>e(e=>({placingType:t,selectedIds:t?[]:e.selectedIds})),setDraggingId:t=>e({draggingId:t}),setGizmoDragging:t=>e({gizmoDragging:t}),setSnapTargetKey:t=>e(e=>e.snapTargetKey===t?e:{snapTargetKey:t}),openColorPopover:(t,n)=>e({colorPopover:{x:t,y:n}}),closeColorPopover:()=>e({colorPopover:null}),setTool:t=>e({tool:t,placingType:null,measurePoints:[],pipeRunPoints:[]}),setViewMode:t=>e({viewMode:t}),setRenderMode:t=>e({renderMode:t}),toggleFlow:()=>e(e=>({showFlow:!e.showFlow})),toggleHeatmapMode:()=>e(e=>({heatmapMode:!e.heatmapMode})),toggleSimRunning:()=>e(e=>({simRunning:!e.simRunning})),toggleSnap:()=>e(e=>({snapToGrid:!e.snapToGrid})),addMeasurePoint:t=>e(e=>({measurePoints:e.measurePoints.length>=2?[t]:[...e.measurePoints,t]})),clearMeasure:()=>e({measurePoints:[]}),setFocusTarget:t=>e({focusTarget:t}),loadParts:(t,n)=>{let r=Array.from(new Set(t.map(e=>e.roomId).filter(Boolean)));r.length===0&&(r=[`room-1`]);let i=r.map((e,t)=>({id:e,name:e===`room-1`?`Room 1`:`Room ${t+1}`})),a=t.map(e=>({...e,roomId:e.roomId||`room-1`}));e({parts:Object.fromEntries(a.map(e=>[e.id,e])),selectedIds:[],placingType:null,colorPopover:null,pipeRunPoints:[],past:[],future:[],rooms:i,activeRoomId:r[0],...n?{projectName:n}:{}})},clearAll:()=>{t().pushHistory(),e({parts:{},selectedIds:[],colorPopover:null,pipeRunPoints:[],rooms:[{id:`room-1`,name:`Room 1`}],activeRoomId:`room-1`})},setProjectName:t=>e({projectName:t}),setGrowthStage:t=>e({growthStage:t}),setScene:t=>e({scene:t}),autoRoute:(n,r)=>{let i=t(),[a,o]=n.split(`:`),[s,c]=r.split(`:`),l=i.parts[a],u=i.parts[s];if(!l||!u)return;let d=nS(l),f=nS(u),p=d.find(e=>e.connectorId===o),m=f.find(e=>e.connectorId===c);if(!p||!m){bS(`Auto-route: connector not found.`,`error`);return}let h=[];for(let e of Object.values(i.parts)){if(e.id===a||e.id===s||e.roomId!==i.activeRoomId)continue;let t=gS(e);t&&h.push(t)}let g=_S(p.pos,m.pos,h);if(!g){bS(`No valid path found avoiding obstacles.`,`error`);return}let _=vS(g,l.params.diameter??l.params.diameterA??l.params.diameterB??1,i.activeRoomId);_.length>0?(i.pushHistory(`auto-route`),e(e=>{let t={...e.parts};for(let e of _)t[e.id]=e;return{parts:t,selectedIds:_.map(e=>e.id)}}),bS(`Path successfully routed with ${_.length} parts.`,`success`)):bS(`Path could not be converted to parts.`,`error`)}})),BS=.4,VS=new Set([`reservoir`,`emitter`,`drain`,`tower`,`tray`,`wallPanel`]),HS=class{parent=new Map;find(e){let t=this.parent.get(e)??e;return t!==e&&(t=this.find(t),this.parent.set(e,t)),t}union(e,t){let n=this.find(e),r=this.find(t);n!==r&&this.parent.set(n,r)}};function US(e){let t=e.params,n=Math.max(.25,t.diameter??1);switch(e.type){case`pipe`:return(t.length??2)/n**4;case`coupling`:return .15/n**2;case`reducer`:{let e=Math.max(.25,t.diameterA??1.5),n=Math.max(.25,t.diameterB??1),r=Math.min(e,n);return(.35+Math.abs(e-n)/Math.max(e,n))/r**2}case`cap`:return .25/n**2;case`elbow`:return 1.2*((t.angle??90)/90)/n**2;case`tee`:return .8/n**2;case`valve`:{let e=t.open??100;return e<=0?null:.3+(100-e)/e*8}case`tower`:return .5;case`tray`:return .3;case`wallPanel`:return .6;case`emitter`:return 1.5;case`drain`:return .6;default:return .1}}function WS(e){let t=e.params;switch(e.type){case`pipe`:return t.length??2;case`coupling`:return .6;case`reducer`:return .7;case`cap`:return .25;case`elbow`:return Ux*((t.angle??90)*Math.PI/180);case`tee`:return .9;case`valve`:return .7;case`pump`:return .9;case`reservoir`:return Math.max(t.width??2,t.depth??1.4)*.5;case`tower`:return t.height??4;case`tray`:return t.length??3;case`wallPanel`:return t.height??4;case`emitter`:return .4;case`drain`:return .4;default:return .5}}function GS(e){switch(e.type){case`pipe`:case`coupling`:case`reducer`:case`cap`:case`elbow`:case`tee`:case`valve`:return e.position[1]+Gx(e.params.diameter??e.params.diameterA??1);case`tray`:return e.position[1]+.24;case`tower`:return e.position[1]+.45;default:return e.position[1]+.25}}function KS(e,t,n){let r=e[0]-t[0],i=e[2]-t[2],a=n[0]-t[0],o=n[2]-t[2],s=a*a+o*o;if(s<=1e-6)return Math.hypot(r,i);let c=Math.max(0,Math.min(1,(r*a+i*o)/s)),l=t[0]+a*c,u=t[2]+o*c;return Math.hypot(e[0]-l,e[2]-u)}function qS(e,t){let n=nS(e);if(n.length>=2){if(e.type===`tee`)return Math.min(...n.map(n=>KS(t,e.position,n.pos)));let r=1/0;for(let e=0;eZx.has(e.type)),o=a.flatMap(nS),s=new HS,c=0;for(let e=0;e{let n=l.get(e);return n||(n={pos:t,edges:[],members:[]},l.set(e,n)),n};for(let e of a){let t=`P:${e.id}`;u(t,e.position);for(let n of nS(e)){let r=s.find(n.key),i=u(r,n.pos);i.members.push(n),i.edges.push({to:t,partId:e.id}),l.get(t).edges.push({to:r,partId:e.id})}}let d=(t,n,r)=>{let i=new Set([n,r]),a=[n];for(;a.length;){let n=a.shift();if(n.startsWith(`P:`)){let t=n.slice(2);if(e[t]?.type===`reservoir`)return t}for(let e of t.get(n)?.edges??[])i.has(e.to)||(i.add(e.to),a.push(e.to))}},f=[],p=new Map,m=e=>{f.push(e),p.has(e.u)||p.set(e.u,[]),p.has(e.v)||p.set(e.v,[]),p.get(e.u).push(e),p.get(e.v).push(e)},h=a.filter(e=>e.type===`pump`);a.filter(e=>e.type===`reservoir`);for(let e of a){let t=`P:${e.id}`,n=nS(e);if(e.type===`pump`){let n=(e.params.on??e.params.enabled??1)===0,r=s.find(`${e.id}:in`),i=s.find(`${e.id}:out`),a=e.params.gph??400,o=e.params.maxHeadFt??8;n?(m({u:r,v:t,partId:e.id,r:1e10,baseR:1e10,isPump:!1,pumpBoost:0,pumpMaxGph:0}),m({u:t,v:i,partId:e.id,r:1e10,baseR:1e10,isPump:!1,pumpBoost:0,pumpMaxGph:0})):(m({u:r,v:t,partId:e.id,r:.01,baseR:.01,isPump:!1,pumpBoost:0,pumpMaxGph:0}),m({u:t,v:i,partId:e.id,r:.01+o/a,baseR:.01+o/a,isPump:!0,pumpBoost:o,pumpMaxGph:a}))}else if(e.type===`reservoir`)for(let r of n)m({u:s.find(r.key),v:t,partId:e.id,r:.01,baseR:.01,isPump:!1,pumpBoost:0,pumpMaxGph:0});else{let r=US(e),i=r===null?1e10:Math.max(1e-4,r);for(let r of n)m({u:s.find(r.key),v:t,partId:e.id,r:i/2,baseR:i/2,isPump:!1,pumpBoost:0,pumpMaxGph:0})}}let g=new Set,_=new Map;for(let[t,n]of l.entries())if(t.startsWith(`P:`)){let n=e[t.slice(2)];n&&VS.has(n.type)&&(g.add(t),_.set(t,n.position[1]))}else n.members.length===1&&Qx.has(n.members[0].partType)&&(g.add(t),_.set(t,n.pos[1]));let v={};for(let[e,t]of l.entries())g.has(e)?v[e]=_.get(e):v[e]=t.pos[1];let y=a.filter(e=>e.type===`drain`),b=new Map;for(let e of y){let t=US(e)??.6;b.set(e.id,t)}let x=!1,S=new Map;for(let e=0;e<4;e++){for(let e=0;e<200;e++){let e=0;for(let[t,n]of l.entries()){if(g.has(t))continue;let n=v[t]??0,r=0,i=0,a=p.get(t)||[];for(let e of a){let n=v[e.u===t?e.v:e.u]??0,a=e.r,o=n;if(e.isPump){let n=e.pumpBoost,r=e.r,i=e.u,s=e.v,c=l.get(i).pos[1],u=l.get(s).pos[1],d=v[i]??0,f=v[s]??0;t===i?d+u-c+n-f>0?(a=r,o=f-u+c-n):(a=1e10,o=f):d+u-c+n-f>0?(a=r,o=d+u-c+n):(a=1e10,o=d)}r+=o/a,i+=1/a}if(i>0){let a=r/i;e=Math.max(e,Math.abs(a-n)),v[t]=a}}if(e<1e-5)break}for(let e of a)r[e.id]=0;for(let[e,t]of p.entries()){if(!e.startsWith(`P:`))continue;let n=e.slice(2),i=0;for(let e of t){let t=0,n=e.u,r=e.v,a=v[n]??0,o=v[r]??0;if(e.isPump){let i=e.pumpBoost,s=e.r,c=l.get(n).pos[1],u=l.get(r).pos[1];t=Math.max(0,(a+u-c+i-o)/s)}else{let n=e.r;t=Math.abs(a-o)/n}i+=t}r[n]=i/2}x=!1;for(let t of y){let n=r[t.id]??0;e===0&&S.set(t.id,n);let i=t.params.capacityGph??250;if(n>i*1.001){x=!0;let e=(n/i)**2,r=p.get(`P:`+t.id)||[];for(let n of r)n.r=(b.get(t.id)??.6)*e/2}}if(!x)break}let C=new Set,w=[];for(let e of y){let t=r[e.id]??0,i=S.get(e.id)??t,a=e.params.capacityGph??250,o=i>a*1.001;if(w.push({partId:e.id,inflowGph:o?i:t,capacityGph:a,overflowing:o}),o){n.push({level:`error`,partId:e.id,message:`${e.label??`Drain`} undersized: receiving ${Math.round(i)} GPH, capacity ${Math.round(a)} GPH — line is backing up.`});let t=new Set,r=[`P:`+e.id];for(t.add(`P:`+e.id);r.length>0;){let e=r.shift();e.startsWith(`P:`)&&C.add(e.slice(2));let n=p.get(e)||[];for(let i of n){let n=i.u===e?i.v:i.u;if(t.has(n))continue;let a=i.u,o=i.v,s=v[a]??0,c=v[o]??0,u=!1;if(i.isPump){let t=i.pumpBoost,n=i.r,r=l.get(a).pos[1],d=l.get(o).pos[1],f=Math.max(0,(s+d-r+t-c)/n);e===o&&f>.05&&(u=!0)}else e===o&&(s-c)/i.r>.05&&(u=!0),e===a&&(c-s)/i.r>.05&&(u=!0);u&&(t.add(n),r.push(n))}}}}let T=new Set;for(let t of h){if((r[t.id]??0)<=0)continue;let n=s.find(`${t.id}:out`),i=[n],a=new Set([`P:${t.id}`,n]);for(;i.length>0;){let t=i.shift(),n=l.get(t);if(n)for(let t of n.edges){let n=e[t.partId];if(n&&US(n)!==null&&(a.has(t.to)||(a.add(t.to),i.push(t.to)),t.to.startsWith(`P:`))){let e=t.to.slice(2);(r[e]??0)<.05&&n.type!==`pump`&&n.type!==`reservoir`&&T.add(e)}}}}if(T.size>0){n.push({level:`warning`,message:`${T.size} part${T.size>1?`s`:``} on a dead-end branch — water is trapped and backing up.`});for(let e of T)C.add(e)}let E=[];for(let t of h){let r=t.label??`Pump`,a=t.params.gph??400,o=t.params.maxHeadFt??8,c=`P:${t.id}`;if((t.params.on??t.params.enabled??1)===0){n.push({level:`info`,partId:t.id,message:`${r} is switched off.`}),E.push({pumpId:t.id,ratedGph:a,gph:0,headFt:0,maxHeadFt:o,resistance:0,running:!1,opPoint:{gph:0,headFt:0},phase:`continuous`});continue}let u=s.find(`${t.id}:in`),f=s.find(`${t.id}:out`),m=d(l,u,c),h=m!==void 0,g=(p.get(c)||[]).find(e=>e.isPump&&e.v===f),_=0,y=0;if(g&&h){let e=g.u,t=g.v,n=v[e]??0,r=v[t]??0,i=l.get(e).pos[1],a=l.get(t).pos[1];_=Math.max(0,(n+a-i+o-r)/g.r),y=Math.max(0,r-a-(n-i))}let b=new Set([c]),x=new Set,S=[f];b.add(f);let C=0,w=t.position[1],T=!1,D=!1,O=0,k=!1,A=nS(t).find(e=>e.connectorId===`out`);for(A&&!i.has(A.key)&&O++;S.length;){let n=S.shift(),r=l.get(n);if(r){w=Math.max(w,r.pos[1]),!n.startsWith(`P:`)&&r.members.length===1&&Qx.has(r.members[0].partType)&&r.members[0].partId!==t.id&&O++;for(let t of r.edges){if(t.to===c)continue;if(b.has(t.to)){!x.has(t.partId)&&t.to!==n&&(T=!0);continue}let r=e[t.partId];if(!x.has(t.partId)&&r){let e=US(r);if(e===null){D=!0;continue}C+=e,x.add(t.partId),VS.has(r.type)&&(k=!0)}b.add(t.to),S.push(t.to)}}}let j=x.size>0;if(h||n.push({level:`error`,partId:t.id,message:`${r}: inlet is not connected to a reservoir — no water source.`}),j||n.push({level:`error`,partId:t.id,message:`${r}: outlet is not connected to anything.`}),h&&j){let e=Math.max(0,w-t.position[1]);e>o?(_=0,n.push({level:`error`,partId:t.id,message:`${r} is too weak: system rises ${e.toFixed(1)} ft but max head is ${o} ft.`})):e>.65*o&&n.push({level:`warning`,partId:t.id,message:`${r}: high head (${e.toFixed(1)} / ${o} ft) — flow significantly reduced.`}),_>0&&_<.2*a&&n.push({level:`warning`,partId:t.id,message:`${r}: bottleneck — long/narrow pipes & fittings are choking flow (R=${C.toFixed(1)}).`}),O>0&&n.push({level:`warning`,partId:t.id,message:`${O} open pipe end${O>1?`s`:``} downstream — water will leak out.`}),!k&&O===0&&_>0&&n.push({level:`warning`,partId:t.id,message:`${r}: dead end — water has nowhere to go (no reservoir, emitter, drain or tray downstream).`}),D&&n.push({level:`info`,message:`A closed valve is blocking part of the network.`}),T&&n.push({level:`info`,message:`Loop detected — flow split is approximated.`})}E.push({pumpId:t.id,ratedGph:a,gph:_,headFt:y,maxHeadFt:o,resistance:C,running:_>.05,opPoint:{gph:_,headFt:y},phase:`continuous`,sourceReservoirId:m})}let D=[],O=new Set;for(let[t,n]of p.entries()){if(!t.startsWith(`P:`))continue;let i=t.slice(2),a=e[i];if(!a)continue;let o=r[i]??0;if(!(o<=.05))for(let e of n){let t=e.u,n=e.v,r=v[t]??0,s=v[n]??0,c=!0;if(e.isPump){let i=e.pumpBoost,a=e.r,o=l.get(t).pos[1];c=(r+l.get(n).pos[1]-o+i-s)/a>0}else c=r>s;let u=c?l.get(t).pos:l.get(n).pos,d=c?l.get(n).pos:l.get(t).pos,f=`${i}:${u.join(`,`)}:${d.join(`,`)}`;O.has(f)||(O.add(f),D.push({partId:i,from:u,to:d,gph:o,diameter:a.params.diameter??1}))}}let k={},A={},j={},M={},N={},P={},F={},I=0;for(let e of a)A[e.id]=WS(e);let L=new Set,ee=[];for(let e of h){if((r[e.id]??0)<=0)continue;let t=s.find(`${e.id}:out`),n=s.find(`${e.id}:in`);k[e.id]=0,j[e.id]=`in`,I=Math.max(I,A[e.id]),ee.push({nodeId:t,dist:A[e.id],fromPartId:e.id}),L.add(`P:${e.id}`),L.add(t),L.add(n)}for(;ee.length>0;){let{nodeId:t,dist:n,fromPartId:i}=ee.shift(),a=l.get(t);if(a){for(let t of a.edges)if(t.to.startsWith(`P:`)){let o=t.to.slice(2);if(!e[o]||(r[o]??0)<=.05)continue;if(!L.has(t.to)){L.add(t.to),k[o]=n,i&&(M[o]=i);let e=a.members.find(e=>e.partId===o);e&&(j[o]=e.connectorId),I=Math.max(I,n+A[o]),ee.push({nodeId:t.to,dist:n,fromPartId:o})}}else if(!L.has(t.to)){L.add(t.to);let e=n+(i?A[i]:0);ee.push({nodeId:t.to,dist:e,fromPartId:i})}}}for(let e of a){let t=r[e.id]??0;if(t<=0)continue;let n=Math.max(.25,e.params.diameter??1),i=Math.PI*(n/24)**2,a=t/7.48/3600;N[e.id]=a/i;let o=v[`P:${e.id}`]??e.position[1];if(P[e.id]=Math.max(0,(o-e.position[1])*.433),VS.has(e.type)){let n=F[e.id]??{inGph:0,exits:[],unlimited:!1};n.inGph+=t,n.unlimited=e.type===`reservoir`||e.type===`emitter`,F[e.id]=n}}for(let t of w){let n=e[t.partId];if(!n)continue;let r=M[t.partId];if(!r)continue;let i=F[r]??{inGph:0,exits:[],unlimited:!1};i.exits.push({partId:t.partId,type:n.type,capacityGph:t.capacityGph}),F[r]=i}let R=new Set([`pipe`,`coupling`,`reducer`,`cap`,`elbow`,`tee`,`valve`,`tray`,`tower`]),te=[];for(let e of t){if(e.type!==`netPot`)continue;let t=e.params.size??1,n=e.position[1]+.22*t,i=.24*t,o;for(let t of a){if(!R.has(t.type))continue;let a=r[t.id]??0;if(a<=.1||!C.has(t.id))continue;let s=qS(t,e.position);if(s>i)continue;let c=GS(t)+(P[t.id]??0)/.433;n-c>BS||(!o||so.inflow)&&(o={part:t,inflow:a,waterHeight:c,d:s})}o&&te.push({partId:e.id,sourcePartId:o.part.id,inflowGph:o.inflow,rimHeightFt:n,waterHeightFt:o.waterHeight,overflowing:o.waterHeight>=n-.02})}for(let e of te)e.overflowing&&n.push({level:`warning`,partId:e.partId,message:`Net pot is sitting over a backed-up line and will spill from the rim (${Math.round(e.inflowGph)} GPH below).`});return{flows:r,pumps:E,segments:D.filter(e=>e.gph>.05),warnings:n,connectedKeys:i,connectionCount:c,totalGph:E.reduce((e,t)=>e+t.gph,0),fillDistance:k,fillLength:A,totalPathLength:I,entryConnector:j,backedUp:C,drains:w,netPots:te,velocities:N,pressures:P,upstream:M,vesselIO:F,reservoirRuntime:{}}}function YS(){let e=Q(e=>e.parts),t=Q(e=>e.simRunning),[n,r]=(0,v.useState)(0),i=(0,v.useMemo)(()=>JS(e),[e]);return(0,v.useEffect)(()=>{if(!t)return;let e=window.setInterval(()=>r(e=>e+1),250);return()=>window.clearInterval(e)},[t]),(0,v.useMemo)(()=>tC(i,e,t,n),[i,e,t,n])}var XS=new Map,ZS=``;function QS(e){let t=e.params.width??2,n=e.params.depth??1.4,r=e.params.height??1;return Math.max(.1,t*n*r*7.48)}function $S(e){return QS(e)*((e.params.level??70)/100)}function eC(e){return Object.values(e).filter(e=>e.type===`reservoir`).map(e=>`${e.id}:${e.params.width}:${e.params.depth}:${e.params.height}:${e.params.level}`).sort().join(`|`)}function tC(e,t,n,r){let i=eC(t),a=Date.now();if(i!==ZS){ZS=i,XS.clear();for(let e of Object.values(t)){if(e.type!==`reservoir`)continue;let t=$S(e);XS.set(e.id,{current:t,initial:t,capacity:QS(e),lastTs:a})}}let o={},s={};for(let t of e.pumps)!t.sourceReservoirId||t.gph<=0||(s[t.sourceReservoirId]=(s[t.sourceReservoirId]??0)+t.gph);for(let i of Object.values(t)){if(i.type!==`reservoir`)continue;let t=$S(i),c=QS(i),l=XS.get(i.id)??{current:t,initial:t,capacity:c,lastTs:a};(Math.abs(l.initial-t)>1e-6||Math.abs(l.capacity-c)>1e-6)&&(l.initial=t,l.capacity=c,l.current=Math.min(c,t),l.lastTs=a);let u=e.vesselIO[i.id]?.inGph??0,d=s[i.id]??0,f=Math.max(0,d-u);if(n&&r>=0){let e=Math.max(0,a-l.lastTs)/36e5;e>0&&f>0&&(l.current=Math.max(0,l.current-f*e)),l.lastTs=a}else l.lastTs=a;XS.set(i.id,l);let p=l.current<=.01&&f>0;o[i.id]={partId:i.id,gallonsInitial:l.initial,gallonsCurrent:l.current,gallonsCapacity:l.capacity,netOutflowGph:f,minutesRemaining:f>0?l.current/f*60:null,empty:p}}let c=new Set(Object.values(o).filter(e=>e.empty).map(e=>e.partId));if(!c.size)return{...e,reservoirRuntime:o};let l=e.pumps.map(e=>!e.sourceReservoirId||!c.has(e.sourceReservoirId)?e:{...e,gph:0,running:!1,opPoint:{gph:0,headFt:e.headFt}}),u=new Set;for(let e of l)e.running||u.add(e.pumpId);let d=new Set;for(let[t]of Object.entries(e.flows)){let n=t,r=0;for(;n&&r++<200;){if(u.has(n)){d.add(t);break}n=e.upstream[n]}}for(let e of u)d.add(e);let f={...e.flows};for(let e of d)f[e]=0;let p=e.segments.map(e=>d.has(e.partId)?{...e,gph:0}:e).filter(e=>e.gph>0),m=[...e.warnings];for(let e of c){let n=t[e];m.push({level:`warning`,partId:e,message:`${n?.label??`Reservoir`} has run dry under load.`})}return{...e,totalGph:l.reduce((e,t)=>e+t.gph,0),pumps:l,flows:f,segments:p,warnings:m,reservoirRuntime:o}}function nC(e,t){let n=Object.values(t),r=e.params.width??2,i=e.params.depth??1.4,a=e.params.height??1,o=e.params.level??70,s=Math.max(1,r*i*a*(o/100)*7.48),c=0;for(let t of n)if(t.type===`airCompressor`&&(t.params.on??1)>0){let r=null,i=1/0;for(let e of n)if(e.type===`reservoir`){let n=Math.hypot(e.position[0]-t.position[0],e.position[1]-t.position[1],e.position[2]-t.position[2]);n0&&s>0){let e=c/s;l=5.5+3.7*(1-Math.exp(-e*2))}let u=0,d=0,f=[];for(let e of n)e.type===`pump`&&(e.params.on??1)>0?u++:e.type===`airCompressor`&&(e.params.on??1)>0?d++:e.type===`waterChiller`&&(e.params.on??1)>0&&f.push(e);let p=75+(u*.5+d*.2),m=p;f.length>0&&(m=p-(p-Math.min(...f.map(e=>e.params.targetTemp??68)))*.85);let h=!1,g=new Map,_=n.flatMap(e=>nS(e).map(t=>({...t,partId:e.id})));for(let e=0;e<_.length;e++)for(let t=e+1;t<_.length;t++){let n=_[e],r=_[t];n.partId!==r.partId&&rS(n.pos,r.pos)<.35&&(g.has(n.partId)||g.set(n.partId,[]),g.has(r.partId)||g.set(r.partId,[]),g.get(n.partId).push(r.partId),g.get(r.partId).push(n.partId))}let v=new Set([e.id]),y=[e.id];for(;y.length>0;){let e=y.shift();if(t[e]?.type===`reverseOsmosis`){h=!0;break}let n=g.get(e);if(n)for(let e of n)v.has(e)||(v.add(e),y.push(e))}let b=h?0:e.params.ec??1.2;return{id:e.id,label:e.label||`Reservoir #${e.id}`,volGal:s,activeAerationGph:c,tdo:l,tempF:m,ph:e.params.ph??6,ec:b}}var rC={grabOffset:[0,0,0],pushed:!1,mode:`body`,groupIds:[],startPositions:{},connectorKey:null,pipeStretch:null,planeKey:``,planeAnchor:[0,0,0]};function iC(e){let t=Q.getState(),n=t.parts[e.partId];if(!n)return;let r=t.selectedIds.includes(e.partId)?[...t.selectedIds]:[e.partId];rC.mode=e.mode,rC.connectorKey=e.connectorKey??null,rC.pipeStretch=null,rC.grabOffset=[e.grabPoint[0]-n.position[0],e.grabPoint[1]-n.position[1],e.grabPoint[2]-n.position[2]],rC.groupIds=r,rC.startPositions={};for(let e of r){let n=t.parts[e];n&&(rC.startPositions[e]=[...n.position])}if(e.mode===`handle`&&n.type===`pipe`&&e.connectorKey){let t=e.connectorKey.split(`:`)[1],r=t===`a`?`b`:t===`b`?`a`:null;if(r){let i=nS(n),a=i.find(e=>e.connectorId===t),o=i.find(e=>e.connectorId===r);if(a&&o){let t=a.pos[0]-o.pos[0],i=a.pos[1]-o.pos[1],s=a.pos[2]-o.pos[2],c=Math.hypot(t,i,s)||(n.params.length??2);rC.pipeStretch={anchorConnectorId:r,anchorPos:[...o.pos],axis:[t/c,i/c,s/c],startLength:n.params.length??c},rC.groupIds=[e.partId]}}}rC.pushed=!1,rC.planeKey=``,rC.planeAnchor=[...e.grabPoint],t.setDraggingId(e.partId)}var aC=new Map;function oC(e){return aC.get(e)}var sC=0,cC=0;function lC(e){cC=e,sC+=e}function uC(){cC=0}var dC=()=>sC,fC=()=>cC;function pC(e){let t=aC.get(e);return t||(t={fill:0,flow:0,backedUp:!1,overflow:!1,spill:!1,state:`empty`},aC.set(e,t)),t}var mC=Math.PI/2,hC=new Y(`#38bdf8`),gC=new Y(`#0c4a6e`),_C=new Y(`#f59e0b`),vC=new Y(`#ef4444`),yC=new Y(`#556b2f`),bC=new Y(`#1e2e0a`);function xC(e,t,n,r=!1,i=0,a=0){if(Q.getState().heatmapMode)if(a<5)e.color.copy(yC),e.emissive.copy(bC),e.emissiveIntensity=.12;else if(i>3)e.color.copy(vC),e.emissive.copy(vC).multiplyScalar(.5),e.emissiveIntensity=.5;else{let t=new Y(`#22c55e`),n=new Y(`#eab308`);if(i>=1){let r=Math.min(1,Math.max(0,(i-1)/2));e.color.copy(t).lerp(n,r)}else{let n=Math.min(1,Math.max(0,i));e.color.copy(yC).lerp(t,n)}e.emissive.copy(e.color).multiplyScalar(.4),e.emissiveIntensity=.3}else if(t?.backedUp){let t=.5+.5*Math.sin(n*5);e.color.copy(_C).lerp(vC,t),e.emissive.copy(_C),e.emissiveIntensity=.3+.35*t}else r?(e.color.copy(yC),e.emissive.copy(bC),e.emissiveIntensity=.12):(e.color.copy(hC),e.emissive.copy(gC),e.emissiveIntensity=.25)}var SC=e=>.4+Math.min(3,e/120),CC=null;function wC(){if(!CC){let e=document.createElement(`canvas`);e.width=64,e.height=256;let t=e.getContext(`2d`);t.fillStyle=`#0284c7`,t.fillRect(0,0,64,256);let n=(e,n,r)=>{t.strokeStyle=r,t.lineWidth=n,t.beginPath(),t.moveTo(e,0);for(let n=0;n<=256;n+=20){let r=e+Math.sin(n*.05)*6;t.lineTo(r,n)}t.stroke()};n(12,3,`#0369a1`),n(32,5,`#0ea5e9`),n(48,2,`#38bdf8`),n(22,4,`#7dd3fc`);let r=(e,n,r)=>{t.fillStyle=`rgba(255, 255, 255, 0.35)`,t.beginPath(),t.arc(e,n,r,0,Math.PI*2),t.fill(),t.strokeStyle=`rgba(255, 255, 255, 0.7)`,t.lineWidth=.8,t.stroke()};for(let e=0;e<24;e++){let e=Math.random()*64,n=Math.random()*256,i=1.2+Math.random()*2.2;r(e,n,i),t.fillStyle=`rgba(255, 255, 255, 0.15)`,t.fillRect(e-i/2,n-i*2,i,i*3)}CC=new hs(e),CC.wrapS=CC.wrapT=w}return CC}function TC(e){let t=(0,v.useMemo)(()=>{let t=wC().clone();return t.needsUpdate=!0,t.repeat.set(1,Math.max(1,Math.round(e))),t},[e]);return(0,v.useEffect)(()=>()=>t.dispose(),[t]),t}var EC=null;function DC(){if(!EC){let e=document.createElement(`canvas`);e.width=256,e.height=256;let t=e.getContext(`2d`);t.fillStyle=`#0284c7`,t.fillRect(0,0,256,256),t.strokeStyle=`#0369a1`,t.lineWidth=4;for(let e=20;e<240;e+=30)t.beginPath(),t.arc(128,128,e,0,Math.PI*2),t.stroke();t.strokeStyle=`#0ea5e9`,t.lineWidth=3;for(let e=35;e<240;e+=45)t.beginPath(),t.arc(128,128,e,0,Math.PI*1.5),t.stroke();t.strokeStyle=`#38bdf8`,t.lineWidth=2;for(let e=50;e<240;e+=60)t.beginPath(),t.arc(128,128,e,Math.PI*.5,Math.PI*1.8),t.stroke();let n=(e,n,r)=>{t.fillStyle=`rgba(255, 255, 255, 0.35)`,t.beginPath(),t.arc(e,n,r,0,Math.PI*2),t.fill(),t.strokeStyle=`rgba(255, 255, 255, 0.65)`,t.lineWidth=.5,t.stroke()};for(let e=0;e<50;e++){let e=Math.random()*256,r=Math.random()*256,i=1+Math.random()*3.5;n(e,r,i),t.fillStyle=`rgba(255, 255, 255, 0.12)`,t.fillRect(e-i,r-i*1.5,i*2,i*3)}EC=new hs(e),EC.wrapS=EC.wrapT=w}return EC}function OC(){let e=(0,v.useMemo)(()=>{let e=DC().clone();return e.needsUpdate=!0,e.repeat.set(2,2),e.center.set(.5,.5),e},[]);return(0,v.useEffect)(()=>()=>e.dispose(),[e]),e}function kC({partId:e,length:t,radius:n}){let r=(0,v.useRef)(null),i=(0,v.useRef)(null),a=TC(t*2),o=YS();return j_(()=>{let t=r.current,n=i.current;if(!t||!n)return;let s=oC(e),c=s?.fill??0;if(c<=.002){t.visible=!1;return}t.visible=!0,s?.entry,t.scale.y=Math.max(.002,c);let l=o.velocities[e]??0,u=s?.flow??0;if(u>0){let e=l>0?l/2.5:1;a.offset.y-=fC()*SC(u)*e*c,a.offset.x=Math.sin(dC()*6)*.08}else a.offset.x=0;xC(n,s,dC(),!1,l,u)}),(0,Z.jsxs)(`mesh`,{ref:r,rotation:[0,0,mC],visible:!1,renderOrder:1,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[n,n,t,12]}),(0,Z.jsx)(`meshStandardMaterial`,{ref:i,map:a,color:`#38bdf8`,transparent:!0,opacity:.88,roughness:.03,metalness:.18,emissive:`#0369a1`,emissiveIntensity:.5,depthWrite:!1})]})}function AC(){return(0,Z.jsx)(`meshStandardMaterial`,{color:`#38bdf8`,transparent:!0,opacity:0,roughness:.15,depthWrite:!1,emissive:`#0c4a6e`,emissiveIntensity:.25})}function jC({partId:e,maxOpacity:t=.85,children:n}){let r=(0,v.useRef)(null),i=YS();return j_(()=>{let n=r.current;if(!n)return;let a=oC(e),o=a?.fill??0;if(n.visible=o>.02,!n.visible)return;let s=dC(),c=a?.flow??0,l=i.pumps.some(e=>e.running)&&c<5,u=i.velocities[e]??0;n.traverse(e=>{let n=e.material;n?.isMeshStandardMaterial&&(n.opacity=t*o,xC(n,a,s,l,u,c))})}),(0,Z.jsx)(`group`,{ref:r,visible:!1,children:n})}function MC({partId:e,radius:t,arc:n}){let r=(0,v.useRef)(null),i=(0,v.useRef)(null),a=(0,v.useRef)(-1),o=YS();return j_(()=>{let s=r.current,c=i.current;if(!s||!c)return;let l=oC(e),u=l?.fill??0;if(u<=.02){s.visible=!1;return}s.visible=!0;let d=l?.entry!==`b`,f=Math.max(.05,n*u);Math.abs(a.current-f)>.04&&(s.geometry.dispose(),s.geometry=new il(Ux,t,10,20,f),a.current=f),s.rotation.z=d?-mC:-mC+n*(1-u);let p=l?.flow??0,m=o.pumps.some(e=>e.running)&&p<5,h=o.velocities[e]??0;xC(c,l,dC(),m,h,p),c.opacity=.88}),(0,Z.jsxs)(`mesh`,{ref:r,position:[0,Ux,0],rotation:[0,0,-mC],visible:!1,renderOrder:1,children:[(0,Z.jsx)(`torusGeometry`,{args:[Ux,t,10,20,n]}),(0,Z.jsx)(`meshStandardMaterial`,{ref:i,color:`#38bdf8`,transparent:!0,opacity:0,roughness:.15,depthWrite:!1,emissive:`#0c4a6e`,emissiveIntensity:.25})]})}function NC({partId:e,radius:t}){let n=(0,v.useRef)(null),r=YS();return j_(()=>{let t=n.current;if(!t)return;let i=oC(e),a=i?.fill??0;if(t.visible=a>.02,!t.visible)return;let o=dC(),s=i?.entry??`a`,c=s===`a`||s===`b`||s===`c`?s:`a`,l=i?.flow??0,u=Math.min(1,a/.34),d=a<=.34?0:Math.min(1,(a-.34)/.66),f=Math.min(1,.55+l/900),p=i?.flow??0,m=r.pumps.some(e=>e.running)&&p<5,h=r.velocities[e]??0;t.children.forEach(e=>{let t=e,n=t.userData.role,r=t.material;if(!n||!r)return;if(xC(r,i,o,m,h,p),n===`core`){t.visible=u>.02,t.scale.setScalar(Math.max(.001,u)),r.opacity=.5+.3*u;return}let a=n===c,s=a?Math.max(u,d*.8):d*f;if(t.visible=s>.02,t.visible){if(n===`a`||n===`b`){t.scale.set(1,Math.max(.001,s),1);let e=n===`a`?-1:1;t.position.x=e*(.29+.29*s),t.position.z=0}else t.scale.set(1,Math.max(.001,s),1),t.position.x=0,t.position.z=.15+.15*s;r.opacity=a?.88:.72}})}),(0,Z.jsxs)(`group`,{ref:n,visible:!1,children:[(0,Z.jsxs)(`mesh`,{userData:{role:`a`},position:[-.58,0,0],rotation:[0,0,mC],renderOrder:1,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[t,t,.58,12]}),(0,Z.jsx)(AC,{})]}),(0,Z.jsxs)(`mesh`,{userData:{role:`b`},position:[.58,0,0],rotation:[0,0,mC],renderOrder:1,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[t,t,.58,12]}),(0,Z.jsx)(AC,{})]}),(0,Z.jsxs)(`mesh`,{userData:{role:`c`},position:[0,0,.3],rotation:[mC,0,0],renderOrder:1,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[t,t,.3,12]}),(0,Z.jsx)(AC,{})]}),(0,Z.jsxs)(`mesh`,{userData:{role:`core`},renderOrder:1,children:[(0,Z.jsx)(`sphereGeometry`,{args:[t*1.28,12,12]}),(0,Z.jsx)(AC,{})]})]})}function PC({partId:e,radius:t}){return(0,Z.jsx)(jC,{partId:e,children:(0,Z.jsxs)(`mesh`,{rotation:[0,0,mC],renderOrder:1,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[t,t,.66,12]}),(0,Z.jsx)(AC,{})]})})}var FC=e=>new Mn().setFromUnitVectors(new q(0,1,0),new q(...e).normalize());function IC({partId:e,dir:t,radius:n}){let r=(0,v.useRef)(null),i=(0,v.useRef)(null),a=(0,v.useRef)(null),o=(0,v.useRef)(null),s=(0,v.useMemo)(()=>FC(t),[t[0],t[1],t[2]]),c=YS();return j_(()=>{let t=r.current;if(!t)return;let s=oC(e),l=s?.fill??0,u=s?.flow??0,d=u>.1&&l>.35;if(t.visible=d,!d)return;let f=dC(),p=fC(),m=Math.min(1,u/600),h=.35+m*.55,g=c.pumps.some(e=>e.running)&&u<5,_=c.velocities[e]??0;i.current&&a.current&&(i.current.position.y=h/2,i.current.scale.set(1+m*.4,h,1+m*.4),a.current.opacity=.45+.25*Math.sin(f*10)*m,xC(a.current,s,f,g,_,u));let v=o.current;v&&v.children.forEach((e,t)=>{let r=(f*(1.5+m*2.5)+t*.23)%1;e.position.set(Math.sin(t*3.1+f*4)*n*.9*r,.12+r*(h+.35),Math.cos(t*2.7+f*3)*n*.9*r),e.scale.setScalar(.45+r*.65),e.rotation.x+=p*2})}),(0,Z.jsxs)(`group`,{ref:r,quaternion:s,visible:!1,children:[(0,Z.jsxs)(`mesh`,{ref:i,position:[0,.25,0],renderOrder:3,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[n*.28,n*.55,1,8,1,!0]}),(0,Z.jsx)(`meshStandardMaterial`,{ref:a,color:`#7dd3fc`,transparent:!0,opacity:.5,roughness:.05,depthWrite:!1,side:2})]}),(0,Z.jsx)(`group`,{ref:o,children:Array.from({length:5},(e,t)=>(0,Z.jsxs)(`mesh`,{renderOrder:3,children:[(0,Z.jsx)(`sphereGeometry`,{args:[Math.max(.018,n*.22),6,6]}),(0,Z.jsx)(`meshStandardMaterial`,{color:`#bae6fd`,transparent:!0,opacity:.85,roughness:.05,depthWrite:!1})]},t))})]})}function LC({partId:e}){let t=(0,v.useRef)(null),n=(0,v.useRef)(null),r=(0,v.useRef)(null),i=(0,v.useRef)(null),a=(0,v.useRef)(null),o=(0,v.useRef)(null),s=YS();return j_(()=>{let c=t.current;if(!c)return;let l=oC(e),u=l?.fill??0,d=l?.flow??0;if(c.visible=u>.05,!c.visible)return;let f=dC(),p=s.pumps.some(e=>e.running)&&d<5,m=s.velocities[e]??0;if(n.current&&(n.current.opacity=.75*u,xC(n.current,l,f,p,m,d)),r.current&&i.current&&(r.current.rotation.z+=fC()*(2.5+d/30),i.current.opacity=(d>0?.7:.25)*u),a.current&&o.current){let e=l?.overflow??!1;if(a.current.visible=e,e){let e=.5+.5*Math.sin(f*4.5);a.current.scale.setScalar(1+.18*e),o.current.opacity=.3+.3*e}}}),(0,Z.jsxs)(`group`,{ref:t,visible:!1,children:[(0,Z.jsxs)(`mesh`,{position:[0,.315,0],renderOrder:1,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[.26,.2,.05,18]}),(0,Z.jsx)(`meshStandardMaterial`,{ref:n,color:`#38bdf8`,transparent:!0,opacity:0,roughness:.1,depthWrite:!1})]}),(0,Z.jsxs)(`mesh`,{ref:r,position:[0,.35,0],rotation:[mC+.13,0,0],renderOrder:2,children:[(0,Z.jsx)(`torusGeometry`,{args:[.15,.025,6,24]}),(0,Z.jsx)(`meshStandardMaterial`,{ref:i,color:`#bae6fd`,transparent:!0,opacity:0,roughness:.08,depthWrite:!1})]}),(0,Z.jsxs)(`mesh`,{ref:a,position:[0,.3,0],visible:!1,renderOrder:2,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[.42,.47,.035,22]}),(0,Z.jsx)(`meshStandardMaterial`,{ref:o,color:`#f59e0b`,transparent:!0,opacity:0,roughness:.25,depthWrite:!1,emissive:`#b45309`,emissiveIntensity:.5})]})]})}function RC({partId:e,length:t}){let n=(0,v.useRef)(null),r=(0,v.useRef)(null),i=(0,v.useRef)(null);return j_(()=>{let a=n.current;if(!a)return;let o=oC(e),s=o?.flow??0,c=s>0&&(o?.fill??0)>.4&&t>.1;if(a.visible=c,!c)return;let l=dC();r.current&&(r.current.opacity=.4+.12*Math.sin(l*9));let u=i.current;if(u){let e=1.2+s/150;u.children.forEach((n,r)=>{let i=(l*e+r*.37)%1;n.position.set(.06*Math.sin(r*2.4+l*2)*i,-.2-i*t,.06*Math.cos(r*1.7+l*2)*i),n.scale.setScalar(.6+.5*i)})}}),(0,Z.jsxs)(`group`,{ref:n,visible:!1,children:[(0,Z.jsxs)(`mesh`,{position:[0,-.2-t/2,0],renderOrder:1,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[.025,.075,t,8,1,!0]}),(0,Z.jsx)(`meshStandardMaterial`,{ref:r,color:`#7dd3fc`,transparent:!0,opacity:.45,roughness:.05,depthWrite:!1,side:2})]}),(0,Z.jsx)(`group`,{ref:i,children:Array.from({length:6},(e,t)=>(0,Z.jsxs)(`mesh`,{renderOrder:1,children:[(0,Z.jsx)(`sphereGeometry`,{args:[.03,6,6]}),(0,Z.jsx)(`meshStandardMaterial`,{color:`#bae6fd`,transparent:!0,opacity:.85,roughness:.05,depthWrite:!1})]},t))})]})}function zC({partId:e,length:t,width:n}){let r=(0,v.useRef)(null),i=(0,v.useRef)(null),a=YS();return j_(()=>{let t=r.current,n=i.current;if(!t||!n)return;let o=oC(e),s=o?.fill??0;if(t.visible=s>.02,!t.visible)return;let c=dC();n.opacity=.55*s;let l=o?.flow??0;xC(n,o,c,a.pumps.some(e=>e.running)&&l<5,a.velocities[e]??0,l),t.position.y=.21+(l>0?.006*Math.sin(c*3):0)}),(0,Z.jsxs)(`mesh`,{ref:r,position:[0,.21,0],visible:!1,renderOrder:1,children:[(0,Z.jsx)(`boxGeometry`,{args:[t-.15,.1,n-.15]}),(0,Z.jsx)(`meshStandardMaterial`,{ref:i,color:`#38bdf8`,transparent:!0,opacity:0,roughness:.15,depthWrite:!1})]})}function BC({partId:e,width:t,depth:n,surfaceY:r}){let i=(0,v.useRef)(null),a=(0,v.useRef)(null),o=(0,v.useRef)(null),s=OC(),c=Q(e=>e.parts),l=YS();return j_((t,n)=>{let u=i.current,d=o.current;if(!u||!a.current)return;let f=oC(e),p=l.reservoirRuntime[e],m=p?Math.max(0,Math.min(1,p.gallonsCurrent/Math.max(.1,p.gallonsCapacity))):.7,h=Math.max(.03,(r-.1)*m)+.03,g=+((f?.flow??0)>0),_=0,v=[u.position.x,h,u.position.z];for(let e of Object.values(c))e.type===`airCompressor`&&(e.params.on??1)>0&&Math.hypot(e.position[0]-v[0],e.position[1]-v[1],e.position[2]-v[2])<10&&(_+=e.params.gph??120);let y=+(_>0),b=g||y,x=dC(),S=.012*Math.sin(x*2.6)*g+.004*Math.sin(x*12)*y;if(u.position.y=h+S,g>0){let e=Math.min(.1,n);s.offset.x+=e*.16,s.offset.y+=e*.12,s.rotation=x*.05}else if(y>0){let e=Math.min(.1,n);s.offset.x+=e*.06,s.offset.y+=e*.08,s.rotation=x*.025}if(d&&b>0){let e=d.attributes.position;for(let t=0;t0){let e=Math.hypot(n,r),t=.008*Math.sin(e*22-x*16)*Math.exp(-e*1.8)*y;i+=t}e.setZ(t,i)}e.needsUpdate=!0,d.computeVertexNormals()}else if(d){let e=d.attributes.position;for(let t=0;t{let o=oC(e),s=o?.spill??!1;if(n.current&&(n.current.visible=s),i.current&&(i.current.visible=s),!s)return;let c=dC(),l=fC(),u=o?.flow??0,d=a.pumps.some(e=>e.running)&&u<5,f=a.velocities[e]??0;r.current&&(r.current.opacity=.45+.18*(.5+.5*Math.sin(c*6)),xC(r.current,o,c,d,f,u)),i.current&&i.current.children.forEach((e,n)=>{let r=(c*(1.8+(o?.flow??0)/260)+n*.29)%1,a=e,s=n/Math.max(1,i.current.children.length)*Math.PI*2;a.position.set(Math.cos(s)*.12*t,.26*t-r*.38*t,Math.sin(s)*.12*t),a.scale.setScalar(.55+.5*(1-r)),a.rotation.x+=l*2})}),(0,Z.jsxs)(`group`,{children:[(0,Z.jsxs)(`mesh`,{ref:n,position:[0,.225*t,0],visible:!1,renderOrder:2,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[.16*t,.1*t,.035*t,16]}),(0,Z.jsx)(`meshStandardMaterial`,{ref:r,color:`#38bdf8`,transparent:!0,opacity:0,roughness:.08,depthWrite:!1,emissive:`#0c4a6e`,emissiveIntensity:.25})]}),(0,Z.jsx)(`group`,{ref:i,visible:!1,children:Array.from({length:6},(e,n)=>(0,Z.jsxs)(`mesh`,{renderOrder:2,children:[(0,Z.jsx)(`sphereGeometry`,{args:[.024*t,6,6]}),(0,Z.jsx)(`meshStandardMaterial`,{color:`#7dd3fc`,transparent:!0,opacity:.85,roughness:.05,depthWrite:!1})]},n))})]})}function HC({startPos:e,maxY:t,index:n,count:r,active:i,frequency:a}){let o=(0,v.useRef)(null);return j_(()=>{let s=o.current;if(!s)return;if(!i){s.visible=!1;return}s.visible=!0;let c=dC(),l=(c*(1+a/10*.6)*.4+n/r)%1;s.position.y=e.y+l*(t-e.y);let u=c*7+n*1.5;s.position.x=e.x+Math.sin(u)*.05,s.position.z=e.z+Math.cos(u*.8)*.05,s.scale.setScalar(.45+.9*l)}),(0,Z.jsxs)(`mesh`,{ref:o,renderOrder:3,children:[(0,Z.jsx)(`sphereGeometry`,{args:[.015,6,6]}),(0,Z.jsx)(`meshBasicMaterial`,{color:`#e0f2fe`,transparent:!0,opacity:.65})]})}function UC(){let e=Q(e=>e.parts);return(0,Z.jsx)(Z.Fragment,{children:Object.values(e).filter(e=>e.type===`airCompressor`).map(e=>(0,Z.jsx)(WC,{comp:e},e.id))})}function WC({comp:e}){let t=Q(e=>e.parts),n=(e.params.on??1)>0,r=e.params.frequency??5,i=(0,v.useMemo)(()=>{let n=null,r=1/0,i=e.position;for(let e of Object.values(t))if(e.type===`reservoir`){let t=Math.hypot(e.position[0]-i[0],e.position[1]-i[1],e.position[2]-i[2]);t0?1:-1,p=d>0?1:-1,m=i.position[0]+f*(a/2+.04),h=i.position[2]+p*(o/2+.04),g=[[c.x,c.y,c.z],[c.x,.02,c.z],[m,.02,c.z],[m,.02,h],[m,i.position[1]+s+.03,h],[i.position[0]+f*(a/2-.08),i.position[1]+s+.03,i.position[2]+p*(o/2-.08)],[l.x,l.y,l.z]],_=Math.max(.02,(s-.1)*((i.params.level??70)/100)),y=i.position[1]+_+.02;return(0,Z.jsxs)(`group`,{children:[(0,Z.jsx)(mb,{points:g,color:`#1e293b`,lineWidth:3}),(0,Z.jsxs)(`mesh`,{position:l,rotation:[0,0,mC],castShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[.04,.04,.12,10]}),(0,Z.jsx)(`meshStandardMaterial`,{color:`#64748b`,roughness:.8})]}),Array.from({length:12},(e,t)=>(0,Z.jsx)(HC,{startPos:l,maxY:y,index:t,count:12,active:n,frequency:r},t))]})}function GC({partId:e,width:t,depth:n,height:r}){let i=(0,v.useRef)(null),a=(0,v.useRef)(null),o=Q(e=>e.parts),s=YS();return j_(()=>{if(!i.current||!a.current)return;let t=oC(e),n=s.reservoirRuntime[e],c=n?Math.max(0,Math.min(1,n.gallonsCurrent/Math.max(.1,n.gallonsCapacity))):.7,l=Math.max(.02,(r-.1)*c);i.current.scale.y=l,i.current.position.y=l/2+.02;let u=+((t?.flow??0)>0),d=0,f=[i.current.position.x,l,i.current.position.z];for(let e of Object.values(o))e.type===`airCompressor`&&(e.params.on??1)>0&&Math.hypot(e.position[0]-f[0],e.position[1]-f[1],e.position[2]-f[2])<10&&(d+=e.params.gph??120);let p=!u&&!+(d>0);xC(a.current,t,dC(),p,0,t?.flow??0)}),(0,Z.jsxs)(`mesh`,{ref:i,position:[0,r/2+.02,0],children:[(0,Z.jsx)(`boxGeometry`,{args:[t,1,n]}),(0,Z.jsx)(`meshStandardMaterial`,{ref:a,color:`#1d4ed8`,transparent:!0,opacity:.6,roughness:.1,depthWrite:!1})]})}var KC=Math.PI/2,qC=(0,v.createContext)({ghost:!1,selected:!1});function $({color:e,metalness:t=.25,roughness:n=.55,opacity:r,transparent:i,physical:a=!1,transmission:o=.9,thickness:s=.4}){let{ghost:c,selected:l}=(0,v.useContext)(qC),u=Q(e=>e.renderMode),d=u===`water`?.06:u===`xray`?Math.min(r??1,.2):r,f=c||i||d!==void 0||u!==`builder`||a;return a&&u===`builder`?(0,Z.jsx)(`meshPhysicalMaterial`,{color:e,metalness:.05,roughness:.08,transmission:o,thickness:s,ior:1.45,transparent:!0,opacity:c?.45:1,depthWrite:!1,emissive:l?`#0ea5e9`:`#000000`,emissiveIntensity:l?.4:0}):(0,Z.jsx)(`meshStandardMaterial`,{color:e,metalness:t,roughness:n,transparent:f,opacity:c?.4:d??1,depthWrite:!f,emissive:l?`#0ea5e9`:`#000000`,emissiveIntensity:l?.4:0})}function JC(e,t){if(t<=0)return e;let n=new Y(e);return n.lerp(new Y(`#3b82f6`),Math.min(.55,.25+t/800)),`#${n.getHexString()}`}var YC=new Y(`#34d399`),XC=new Y(`#f59e0b`),ZC=new Y(`#22d3ee`),QC=new Y(`#67e8f9`);function $C({partId:e,pos:t,joined:n,seed:r}){let i=(0,v.useRef)(null),a=(0,v.useRef)(null);return j_(()=>{let t=i.current,o=a.current;if(!t)return;if(!n){t.color.copy(XC),t.emissive.copy(XC),t.emissiveIntensity=.45,o&&(o.visible=!1);return}let s=oC(e);if((s?.flow??0)>0&&(s?.fill??0)>.05){let e=.5+.5*Math.sin(dC()*3.2+r);if(t.color.copy(ZC),t.emissive.copy(ZC),t.emissiveIntensity=1.1+1*e,o){o.visible=!0,o.scale.setScalar(1+.35*e);let t=o.material;t.color.copy(QC),t.opacity=.2+.25*e}}else t.color.copy(YC),t.emissive.copy(YC),t.emissiveIntensity=.7,o&&(o.visible=!1)}),(0,Z.jsxs)(`group`,{position:t,children:[(0,Z.jsxs)(`mesh`,{children:[(0,Z.jsx)(`sphereGeometry`,{args:[.06,10,10]}),(0,Z.jsx)(`meshStandardMaterial`,{ref:i,color:`#f59e0b`,emissive:`#f59e0b`,emissiveIntensity:.45,toneMapped:!1})]}),(0,Z.jsxs)(`mesh`,{ref:a,visible:!1,children:[(0,Z.jsx)(`sphereGeometry`,{args:[.11,10,10]}),(0,Z.jsx)(`meshBasicMaterial`,{color:`#67e8f9`,transparent:!0,opacity:.25,blending:2,depthWrite:!1,toneMapped:!1})]})]})}function ew({part:e,connectedKeys:t,radius:n}){return(0,Z.jsx)(Z.Fragment,{children:Yx[e.type].getConnectors(e.params).map(r=>t?.has(`${e.id}:${r.id}`)?null:(0,Z.jsx)(`group`,{position:r.pos,children:(0,Z.jsx)(IC,{partId:e.id,dir:r.dir,radius:n})},r.id))})}function tw({part:e,connectedKeys:t}){return(0,Z.jsx)(Z.Fragment,{children:Yx[e.type].getConnectors(e.params).map((n,r)=>(0,Z.jsx)($C,{partId:e.id,pos:n.pos,joined:t?.has(`${e.id}:${n.id}`)??!1,seed:r*1.7},n.id))})}function nw({width:e,depth:t,height:n,on:r}){let i=(0,v.useRef)(null);return j_(()=>{if(i.current){if(!r){i.current.opacity=0;return}let e=dC();i.current.opacity=.03+.015*Math.sin(e*1.5)*Math.cos(e*.7)}}),r?(0,Z.jsxs)(`mesh`,{position:[0,-n/2-.08,0],children:[(0,Z.jsx)(`cylinderGeometry`,{args:[e*.45,e*1.25,n,16,1,!0]}),(0,Z.jsx)(`meshBasicMaterial`,{ref:i,color:`#fef08a`,transparent:!0,opacity:.03,depthWrite:!1,side:2})]}):null}function rw({w:e,d:t,floorY:n,watts:r,selected:i}){let a=.5*Math.abs(n),o=Math.max(e,t)*.4+a*.3,s=Math.max(e,t)*.8+a*.6,c=Math.max(e,t)*1.3+a*1,l=(0,v.useMemo)(()=>{let e=[];for(let t=0;t<=64;t++){let n=t/64*Math.PI*2;e.push([Math.cos(n)*o,0,Math.sin(n)*o])}return e},[o]),u=(0,v.useMemo)(()=>{let e=[];for(let t=0;t<=64;t++){let n=t/64*Math.PI*2;e.push([Math.cos(n)*s,0,Math.sin(n)*s])}return e},[s]),d=(0,v.useMemo)(()=>{let e=[];for(let t=0;t<=64;t++){let n=t/64*Math.PI*2;e.push([Math.cos(n)*c,0,Math.sin(n)*c])}return e},[c]),f=[[e/2,-.06,t/2],[-e/2,-.06,t/2],[-e/2,-.06,-t/2],[e/2,-.06,-t/2]],p=[[c*.707,n+.01,c*.707],[-c*.707,n+.01,c*.707],[-c*.707,n+.01,-c*.707],[c*.707,n+.01,-c*.707]],m=i?1:.45;return(0,Z.jsxs)(`group`,{children:[f.map((e,t)=>(0,Z.jsx)(mb,{points:[e,p[t]],color:`#fde68a`,lineWidth:i?1.2:.6,dashed:!0,dashScale:2,transparent:!0,opacity:.2*m},t)),(0,Z.jsxs)(`group`,{position:[0,n+.01,0],children:[(0,Z.jsxs)(`mesh`,{rotation:[-Math.PI/2,0,0],children:[(0,Z.jsx)(`circleGeometry`,{args:[o,32]}),(0,Z.jsx)(`meshBasicMaterial`,{color:`#fbbf24`,transparent:!0,opacity:.16*m,depthWrite:!1})]}),(0,Z.jsx)(mb,{points:l,color:`#fbbf24`,lineWidth:i?2:1,transparent:!0,opacity:.3*m}),(0,Z.jsxs)(`mesh`,{rotation:[-Math.PI/2,0,0],children:[(0,Z.jsx)(`ringGeometry`,{args:[o,s,32]}),(0,Z.jsx)(`meshBasicMaterial`,{color:`#f59e0b`,transparent:!0,opacity:.09*m,depthWrite:!1})]}),(0,Z.jsx)(mb,{points:u,color:`#f59e0b`,lineWidth:i?1.5:.8,transparent:!0,opacity:.2*m}),(0,Z.jsxs)(`mesh`,{rotation:[-Math.PI/2,0,0],children:[(0,Z.jsx)(`ringGeometry`,{args:[s,c,32]}),(0,Z.jsx)(`meshBasicMaterial`,{color:`#eab308`,transparent:!0,opacity:.04*m,depthWrite:!1})]}),(0,Z.jsx)(mb,{points:d,color:`#eab308`,lineWidth:i?1:.5,transparent:!0,opacity:.1*m})]})]})}function iw({baseColor:e,on:t}){let n=(0,v.useRef)(null);return j_(()=>{if(n.current&&t){let e=dC();n.current.position.y=Math.sin(e*60)*.0025,n.current.position.x=Math.cos(e*50)*.0018}else n.current&&n.current.position.set(0,0,0)}),(0,Z.jsxs)(`group`,{ref:n,children:[(0,Z.jsxs)(`mesh`,{position:[0,.2,0],castShadow:!0,children:[(0,Z.jsx)(`boxGeometry`,{args:[.6,.35,.4]}),(0,Z.jsx)($,{color:e,metalness:.4,roughness:.3})]}),(0,Z.jsxs)(`mesh`,{position:[-.2,.02,-.12],children:[(0,Z.jsx)(`sphereGeometry`,{args:[.04,8,8]}),(0,Z.jsx)($,{color:`#0f172a`})]}),(0,Z.jsxs)(`mesh`,{position:[.2,.02,-.12],children:[(0,Z.jsx)(`sphereGeometry`,{args:[.04,8,8]}),(0,Z.jsx)($,{color:`#0f172a`})]}),(0,Z.jsxs)(`mesh`,{position:[-.2,.02,.12],children:[(0,Z.jsx)(`sphereGeometry`,{args:[.04,8,8]}),(0,Z.jsx)($,{color:`#0f172a`})]}),(0,Z.jsxs)(`mesh`,{position:[.2,.02,.12],children:[(0,Z.jsx)(`sphereGeometry`,{args:[.04,8,8]}),(0,Z.jsx)($,{color:`#0f172a`})]}),(0,Z.jsxs)(`mesh`,{position:[.28,.22,0],rotation:[0,0,KC],children:[(0,Z.jsx)(`cylinderGeometry`,{args:[.02,.02,.08,10]}),(0,Z.jsx)($,{color:`#d97706`,metalness:.8,roughness:.2})]})]})}function aw({part:e,flow:t,connectedKeys:n}){let r=e.params,i=Yx[e.type],a=e.color||i.color,o=Q(e=>e.renderMode),s=o===`water`?.15:o===`xray`?.42:.8;switch(e.type){case`pipe`:{let i=Gx(r.diameter??1),o=r.length??2;return(0,Z.jsxs)(`group`,{children:[(0,Z.jsxs)(`mesh`,{rotation:[0,0,KC],castShadow:!0,receiveShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[i,i,o,16]}),(0,Z.jsx)($,{color:JC(a,t),opacity:.55,roughness:.35,physical:!0,transmission:.92,thickness:.4})]}),(0,Z.jsx)(kC,{partId:e.id,length:o,radius:i*.78}),(0,Z.jsx)(ew,{part:e,connectedKeys:n,radius:i})]})}case`coupling`:{let i=Gx(r.diameter??1);return(0,Z.jsxs)(`group`,{children:[(0,Z.jsxs)(`mesh`,{rotation:[0,0,KC],castShadow:!0,receiveShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[i*1.18,i*1.18,.6,16]}),(0,Z.jsx)($,{color:JC(a,t),opacity:.65,roughness:.35,physical:!0,transmission:.92,thickness:.4})]}),(0,Z.jsxs)(`mesh`,{position:[-.22,0,0],rotation:[0,0,KC],children:[(0,Z.jsx)(`torusGeometry`,{args:[i*1.18,.018,8,18]}),(0,Z.jsx)($,{color:`#7c8794`})]}),(0,Z.jsxs)(`mesh`,{position:[.22,0,0],rotation:[0,0,KC],children:[(0,Z.jsx)(`torusGeometry`,{args:[i*1.18,.018,8,18]}),(0,Z.jsx)($,{color:`#7c8794`})]}),(0,Z.jsx)(kC,{partId:e.id,length:.6,radius:i*.72}),(0,Z.jsx)(ew,{part:e,connectedKeys:n,radius:i})]})}case`reducer`:{let i=Gx(r.diameterA??1.5),o=Gx(r.diameterB??1),s=Math.min(i,o),c=JC(a,t);return(0,Z.jsxs)(`group`,{children:[(0,Z.jsxs)(`mesh`,{rotation:[0,0,KC],castShadow:!0,receiveShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[o*1.15,i*1.15,.7,20]}),(0,Z.jsx)($,{color:c,opacity:.65,roughness:.35,physical:!0,transmission:.92,thickness:.4})]}),(0,Z.jsxs)(`mesh`,{position:[-.28,0,0],rotation:[0,0,KC],children:[(0,Z.jsx)(`torusGeometry`,{args:[i*1.15,.018,8,18]}),(0,Z.jsx)($,{color:`#7c8794`})]}),(0,Z.jsxs)(`mesh`,{position:[.28,0,0],rotation:[0,0,KC],children:[(0,Z.jsx)(`torusGeometry`,{args:[o*1.15,.018,8,18]}),(0,Z.jsx)($,{color:`#7c8794`})]}),(0,Z.jsx)(kC,{partId:e.id,length:.7,radius:s*.72}),(0,Z.jsx)(ew,{part:e,connectedKeys:n,radius:Math.max(i,o)})]})}case`cap`:{let e=Gx(r.diameter??1);return(0,Z.jsxs)(`group`,{children:[(0,Z.jsxs)(`mesh`,{position:[.05,0,0],rotation:[0,0,KC],castShadow:!0,receiveShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[e*1.2,e*1.2,.45,16]}),(0,Z.jsx)($,{color:JC(a,t),opacity:.75,roughness:.38})]}),(0,Z.jsxs)(`mesh`,{position:[.28,0,0],rotation:[0,KC,0],castShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[e*1.2,e*1.2,.04,16]}),(0,Z.jsx)($,{color:`#6b7280`,roughness:.35})]}),(0,Z.jsxs)(`mesh`,{position:[-.12,0,0],rotation:[0,0,KC],children:[(0,Z.jsx)(`torusGeometry`,{args:[e*1.2,.018,8,18]}),(0,Z.jsx)($,{color:`#7c8794`})]})]})}case`elbow`:{let i=Gx(r.diameter??1),o=Ux,s=(r.angle??90)*Math.PI/180;return(0,Z.jsxs)(`group`,{children:[(0,Z.jsxs)(`mesh`,{position:[0,o,0],rotation:[0,0,-KC],castShadow:!0,children:[(0,Z.jsx)(`torusGeometry`,{args:[o,i,12,24,s]}),(0,Z.jsx)($,{color:JC(a,t),opacity:.55,roughness:.35,physical:!0,transmission:.92,thickness:.4})]}),(0,Z.jsx)(MC,{partId:e.id,radius:i*.78,arc:s}),(0,Z.jsx)(ew,{part:e,connectedKeys:n,radius:i})]})}case`tee`:{let i=Gx(r.diameter??1),o=JC(a,t);return(0,Z.jsxs)(`group`,{children:[(0,Z.jsxs)(`mesh`,{rotation:[0,0,KC],castShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[i,i,1.2,16]}),(0,Z.jsx)($,{color:o,opacity:.55,roughness:.35,physical:!0,transmission:.92,thickness:.4})]}),(0,Z.jsxs)(`mesh`,{position:[0,0,.3],rotation:[KC,0,0],castShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[i,i,.6,16]}),(0,Z.jsx)($,{color:o,opacity:.55,roughness:.35,physical:!0,transmission:.92,thickness:.4})]}),(0,Z.jsx)(NC,{partId:e.id,radius:i*.75}),(0,Z.jsx)(ew,{part:e,connectedKeys:n,radius:i})]})}case`valve`:{let i=Gx(r.diameter??1)*1.25,o=(r.open??100)>0;return(0,Z.jsxs)(`group`,{children:[(0,Z.jsxs)(`mesh`,{rotation:[0,0,KC],castShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[i,i,.7,16]}),(0,Z.jsx)($,{color:JC(`#8b939e`,t),metalness:.5,roughness:.35,opacity:.75,physical:!0,transmission:.9,thickness:.4})]}),(0,Z.jsx)(PC,{partId:e.id,radius:Gx(r.diameter??1)*.78}),(0,Z.jsxs)(`mesh`,{position:[0,.22,0],children:[(0,Z.jsx)(`boxGeometry`,{args:[.07,.28,.07]}),(0,Z.jsx)($,{color:`#6b7280`})]}),(0,Z.jsxs)(`mesh`,{position:[0,.4,0],rotation:[KC,0,0],children:[(0,Z.jsx)(`torusGeometry`,{args:[.16,.04,8,20]}),(0,Z.jsx)($,{color:o?a:`#991b1b`})]}),o&&(0,Z.jsx)(ew,{part:e,connectedKeys:n,radius:Gx(r.diameter??1)})]})}case`pump`:return(0,Z.jsxs)(`group`,{children:[(0,Z.jsxs)(`mesh`,{position:[0,.25,0],castShadow:!0,children:[(0,Z.jsx)(`boxGeometry`,{args:[.8,.5,.6]}),(0,Z.jsx)($,{color:a,metalness:.4,roughness:.4})]}),(0,Z.jsxs)(`mesh`,{position:[0,.56,0],children:[(0,Z.jsx)(`cylinderGeometry`,{args:[.14,.14,.14,16]}),(0,Z.jsx)($,{color:`#1e3a8a`})]}),(0,Z.jsxs)(`mesh`,{position:[-.43,.25,0],rotation:[0,0,KC],children:[(0,Z.jsx)(`cylinderGeometry`,{args:[.1,.1,.2,12]}),(0,Z.jsx)($,{color:`#64748b`})]}),(0,Z.jsxs)(`mesh`,{position:[.43,.25,0],rotation:[0,0,KC],children:[(0,Z.jsx)(`cylinderGeometry`,{args:[.1,.1,.2,12]}),(0,Z.jsx)($,{color:`#64748b`})]})]});case`reservoir`:{let t=r.width??2,n=r.depth??1.4,i=r.height??1;return Math.max(.02,(i-.1)*((r.level??70)/100)),(0,Z.jsxs)(`group`,{children:[(0,Z.jsxs)(`mesh`,{position:[0,i/2,0],castShadow:!0,children:[(0,Z.jsx)(`boxGeometry`,{args:[t,i,n]}),(0,Z.jsx)($,{color:`#44607e`,opacity:.3,roughness:.3})]}),(0,Z.jsx)(GC,{partId:e.id,width:t-.12,depth:n-.12,height:i}),(0,Z.jsx)(BC,{partId:e.id,width:t-.12,depth:n-.12,surfaceY:i}),(0,Z.jsxs)(`mesh`,{position:[0,i,0],children:[(0,Z.jsx)(`boxGeometry`,{args:[t+.06,.06,n+.06]}),(0,Z.jsx)($,{color:a})]})]})}case`tower`:{let e=r.height??4,t=Math.max(1,Math.round(r.sites??6)),n=[];for(let r=0;r(0,Z.jsxs)(`mesh`,{position:[0,.295,e],children:[(0,Z.jsx)(`boxGeometry`,{args:[2*Math.sqrt(Math.max(.012,.0784-e*e)),.03,.045]}),(0,Z.jsx)($,{color:`#334155`,metalness:.5,roughness:.45})]},e)),(0,Z.jsxs)(`mesh`,{position:[-.26,.25,0],rotation:[0,0,KC],children:[(0,Z.jsx)(`cylinderGeometry`,{args:[.1,.1,.2,12]}),(0,Z.jsx)($,{color:`#8b939e`})]}),(0,Z.jsx)(LC,{partId:e.id})]});case`growTent`:{let e=r.width??7,t=r.depth??5,n=r.height??4,i=(r.sealed??0)>0;return(0,Z.jsxs)(`group`,{children:[(0,Z.jsxs)(`mesh`,{position:[0,n/2,0],children:[(0,Z.jsx)(`boxGeometry`,{args:[e,n,t]}),(0,Z.jsx)($,{color:i?`#164e63`:`#334155`,opacity:.08,roughness:.9})]}),(0,Z.jsxs)(`lineSegments`,{position:[0,n/2,0],children:[(0,Z.jsx)(`edgesGeometry`,{args:[new bs(e,n,t)]}),(0,Z.jsx)(`lineBasicMaterial`,{color:i?`#22d3ee`:`#94a3b8`,transparent:!0,opacity:s})]}),(0,Z.jsxs)(`mesh`,{position:[0,n/2,t/2+.01],children:[(0,Z.jsx)(`planeGeometry`,{args:[e*.22,n*.8]}),(0,Z.jsx)($,{color:`#0f172a`,opacity:.22})]})]})}case`inlineFan`:return(0,Z.jsx)(ow,{baseColor:a,cfm:r.cfm??600});case`circulationFan`:return(0,Z.jsx)(sw,{baseColor:a,cfm:r.cfm??250,sweep:r.sweep??90});case`growLight`:{let t=r.width??2,n=r.depth??2,i=r.watts??650,{selected:o}=(0,v.useContext)(qC);return(0,Z.jsxs)(`group`,{children:[(0,Z.jsxs)(`mesh`,{castShadow:!0,children:[(0,Z.jsx)(`boxGeometry`,{args:[t,.12,n]}),(0,Z.jsx)($,{color:a,metalness:.35,roughness:.35})]}),(0,Z.jsxs)(`mesh`,{position:[0,-.07,0],children:[(0,Z.jsx)(`boxGeometry`,{args:[t*.88,.03,n*.88]}),(0,Z.jsx)($,{color:`#fde68a`,opacity:.55})]}),(0,Z.jsx)(`pointLight`,{position:[0,-.15,0],intensity:i/100,distance:16,decay:1.8,castShadow:!0,"shadow-mapSize":[512,512]}),(0,Z.jsx)(nw,{width:t,depth:n,height:6,on:i>0}),i>0&&(0,Z.jsx)(rw,{w:t,d:n,floorY:-e.position[1],watts:i,selected:o})]})}case`co2Tank`:return(0,Z.jsxs)(`group`,{children:[(0,Z.jsxs)(`mesh`,{position:[0,.7,0],castShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[.18,.2,1.4,20]}),(0,Z.jsx)($,{color:a,metalness:.35,roughness:.4})]}),(0,Z.jsxs)(`mesh`,{position:[0,1.48,0],children:[(0,Z.jsx)(`cylinderGeometry`,{args:[.07,.07,.12,12]}),(0,Z.jsx)($,{color:`#e2e8f0`})]}),(0,Z.jsxs)(`mesh`,{position:[.14,1.5,0],rotation:[0,0,KC],children:[(0,Z.jsx)(`cylinderGeometry`,{args:[.03,.03,.18,12]}),(0,Z.jsx)($,{color:`#cbd5e1`})]})]});case`airCompressor`:return(0,Z.jsx)(`group`,{children:(0,Z.jsx)(iw,{baseColor:a,on:(r.on??1)>0})});case`reducingTee`:{let i=Gx(r.diameterA??1.5),o=Gx(r.diameterB??1),s=JC(a,t);return(0,Z.jsxs)(`group`,{children:[(0,Z.jsxs)(`mesh`,{rotation:[0,0,KC],castShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[i,i,1.2,16]}),(0,Z.jsx)($,{color:s,opacity:.55,roughness:.35,physical:!0,transmission:.92,thickness:.4})]}),(0,Z.jsxs)(`mesh`,{position:[0,0,.15],rotation:[KC,0,0],castShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[o,i,.3,16]}),(0,Z.jsx)($,{color:s,opacity:.55,roughness:.35,physical:!0,transmission:.92,thickness:.4})]}),(0,Z.jsxs)(`mesh`,{position:[0,0,.4],rotation:[KC,0,0],castShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[o,o,.2,16]}),(0,Z.jsx)($,{color:s,opacity:.55,roughness:.35,physical:!0,transmission:.92,thickness:.4})]}),(0,Z.jsx)(NC,{partId:e.id,radius:i*.75}),(0,Z.jsx)(ew,{part:e,connectedKeys:n,radius:i})]})}case`reducingElbow`:{let i=Gx(r.diameterA??1.5),o=Gx(r.diameterB??1),s=JC(a,t);return(0,Z.jsxs)(`group`,{children:[(0,Z.jsxs)(`mesh`,{position:[0,-.15,0],castShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[i,i,.3,16]}),(0,Z.jsx)($,{color:s,opacity:.55,roughness:.35,physical:!0,transmission:.92,thickness:.4})]}),(0,Z.jsxs)(`mesh`,{position:[0,.05,0],castShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[o,i,.1,16]}),(0,Z.jsx)($,{color:s,opacity:.55,roughness:.35,physical:!0,transmission:.92,thickness:.4})]}),(0,Z.jsxs)(`mesh`,{position:[-.1,.1,0],rotation:[0,0,-KC],castShadow:!0,children:[(0,Z.jsx)(`torusGeometry`,{args:[.1,o,12,16,KC]}),(0,Z.jsx)($,{color:s,opacity:.55,roughness:.35,physical:!0,transmission:.92,thickness:.4})]}),(0,Z.jsxs)(`mesh`,{position:[-.25,.2,0],rotation:[0,0,KC],castShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[o,o,.3,16]}),(0,Z.jsx)($,{color:s,opacity:.55,roughness:.35,physical:!0,transmission:.92,thickness:.4})]}),(0,Z.jsx)(MC,{partId:e.id,radius:o*.78,arc:KC}),(0,Z.jsx)(ew,{part:e,connectedKeys:n,radius:i})]})}case`bulkhead`:{let t=Gx(r.diameter??1),i=t*1.5;return(0,Z.jsxs)(`group`,{children:[(0,Z.jsxs)(`mesh`,{rotation:[0,0,KC],castShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[t,t,.4,16]}),(0,Z.jsx)($,{color:`#27272a`,metalness:.2,roughness:.8})]}),(0,Z.jsxs)(`mesh`,{rotation:[0,0,KC],castShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[i,i,.08,16]}),(0,Z.jsx)($,{color:`#18181b`,metalness:.1,roughness:.9})]}),(0,Z.jsx)(ew,{part:e,connectedKeys:n,radius:t})]})}case`waterChiller`:{let e=(r.on??1)>0;return(0,Z.jsxs)(`group`,{children:[(0,Z.jsxs)(`mesh`,{position:[0,.5,0],castShadow:!0,children:[(0,Z.jsx)(`boxGeometry`,{args:[.8,1,.8]}),(0,Z.jsx)($,{color:`#3f3f46`,metalness:.6,roughness:.25})]}),(0,Z.jsxs)(`mesh`,{position:[0,.5,.41],children:[(0,Z.jsx)(`boxGeometry`,{args:[.6,.4,.01]}),(0,Z.jsx)($,{color:`#18181b`,roughness:.9})]}),(0,Z.jsxs)(`mesh`,{position:[0,.85,.41],children:[(0,Z.jsx)(`boxGeometry`,{args:[.3,.15,.01]}),(0,Z.jsx)($,{color:`#09090b`,roughness:.9})]}),e&&(0,Z.jsxs)(`mesh`,{position:[0,.85,.415],children:[(0,Z.jsx)(`planeGeometry`,{args:[.26,.11]}),(0,Z.jsx)(`meshBasicMaterial`,{color:`#22c55e`})]}),(0,Z.jsxs)(`mesh`,{position:[-.2,1.05,0],castShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[.08,.08,.15,12]}),(0,Z.jsx)($,{color:`#71717a`,metalness:.8,roughness:.2})]}),(0,Z.jsxs)(`mesh`,{position:[.2,1.05,0],castShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[.08,.08,.15,12]}),(0,Z.jsx)($,{color:`#71717a`,metalness:.8,roughness:.2})]}),(0,Z.jsx)(`group`,{position:[0,.5,-.41],rotation:[KC,0,0],children:(0,Z.jsx)(cw,{active:e})})]})}case`reverseOsmosis`:{let t=Gx(r.diameter??1);return(0,Z.jsxs)(`group`,{children:[(0,Z.jsxs)(`mesh`,{rotation:[0,0,KC],castShadow:!0,receiveShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[t,t,.6,16]}),(0,Z.jsx)($,{color:`#e2e8f0`,roughness:.4})]}),(0,Z.jsxs)(`mesh`,{rotation:[0,0,KC],castShadow:!0,receiveShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[t*2.2,t*2.2,.38,20]}),(0,Z.jsx)($,{color:`#ffffff`,roughness:.3})]}),(0,Z.jsxs)(`mesh`,{position:[-.19,0,0],rotation:[0,0,KC],castShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[t*2.3,t*2.3,.04,20]}),(0,Z.jsx)($,{color:`#cbd5e1`,metalness:.8,roughness:.2})]}),(0,Z.jsxs)(`mesh`,{position:[.19,0,0],rotation:[0,0,KC],castShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[t*2.3,t*2.3,.04,20]}),(0,Z.jsx)($,{color:`#cbd5e1`,metalness:.8,roughness:.2})]}),(0,Z.jsx)(ew,{part:e,connectedKeys:n,radius:t})]})}default:return(0,Z.jsxs)(`mesh`,{castShadow:!0,children:[(0,Z.jsx)(`boxGeometry`,{args:[.5,.5,.5]}),(0,Z.jsx)($,{color:`#888888`})]})}}function ow({baseColor:e,cfm:t}){let n=(0,v.useRef)(null);return j_(e=>{if(n.current){let r=15+t/400*20;n.current.rotation.y=e.clock.getElapsedTime()*r}}),(0,Z.jsxs)(`group`,{children:[(0,Z.jsxs)(`mesh`,{rotation:[0,0,KC],castShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[.25,.25,.7,16,1,!0]}),(0,Z.jsx)($,{color:e,metalness:.5,roughness:.3})]}),(0,Z.jsxs)(`mesh`,{position:[-.34,0,0],rotation:[0,0,KC],children:[(0,Z.jsx)(`torusGeometry`,{args:[.25,.02,8,16]}),(0,Z.jsx)($,{color:`#64748b`})]}),(0,Z.jsxs)(`mesh`,{position:[.34,0,0],rotation:[0,0,KC],children:[(0,Z.jsx)(`torusGeometry`,{args:[.25,.02,8,16]}),(0,Z.jsx)($,{color:`#64748b`})]}),(0,Z.jsxs)(`mesh`,{position:[0,.22,0],castShadow:!0,children:[(0,Z.jsx)(`boxGeometry`,{args:[.16,.08,.16]}),(0,Z.jsx)($,{color:`#334155`})]}),(0,Z.jsxs)(`mesh`,{rotation:[0,0,KC],children:[(0,Z.jsx)(`cylinderGeometry`,{args:[.08,.08,.25,12]}),(0,Z.jsx)($,{color:`#475569`,metalness:.4})]}),(0,Z.jsx)(`group`,{ref:n,children:(0,Z.jsxs)(`group`,{rotation:[0,0,KC],children:[(0,Z.jsxs)(`mesh`,{rotation:[.3,0,0],position:[0,.14,0],children:[(0,Z.jsx)(`boxGeometry`,{args:[.04,.12,.005]}),(0,Z.jsx)($,{color:`#f1f5f9`})]}),(0,Z.jsxs)(`mesh`,{rotation:[.3,0,Math.PI/2],position:[-.14,0,0],children:[(0,Z.jsx)(`boxGeometry`,{args:[.04,.12,.005]}),(0,Z.jsx)($,{color:`#f1f5f9`})]}),(0,Z.jsxs)(`mesh`,{rotation:[.3,0,Math.PI],position:[0,-.14,0],children:[(0,Z.jsx)(`boxGeometry`,{args:[.04,.12,.005]}),(0,Z.jsx)($,{color:`#f1f5f9`})]}),(0,Z.jsxs)(`mesh`,{rotation:[.3,0,-Math.PI/2],position:[.14,0,0],children:[(0,Z.jsx)(`boxGeometry`,{args:[.04,.12,.005]}),(0,Z.jsx)($,{color:`#f1f5f9`})]})]})})]})}function sw({baseColor:e,cfm:t,sweep:n}){let r=(0,v.useRef)(null),i=(0,v.useRef)(null);return j_(e=>{if(i.current){let n=10+t/200*15;i.current.rotation.z=e.clock.getElapsedTime()*n}if(r.current&&n>0){let t=n*Math.PI/180;r.current.rotation.y=Math.sin(e.clock.getElapsedTime()*1.5)*(t/2)}}),(0,Z.jsxs)(`group`,{children:[(0,Z.jsxs)(`mesh`,{position:[0,.02,0],castShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[.2,.22,.04,16]}),(0,Z.jsx)($,{color:`#1e293b`,metalness:.1,roughness:.8})]}),(0,Z.jsxs)(`mesh`,{position:[0,.3,0],castShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[.02,.02,.55,12]}),(0,Z.jsx)($,{color:`#94a3b8`,metalness:.6,roughness:.2})]}),(0,Z.jsxs)(`group`,{ref:r,position:[0,.6,0],children:[(0,Z.jsxs)(`mesh`,{position:[0,-.05,0],children:[(0,Z.jsx)(`boxGeometry`,{args:[.06,.08,.06]}),(0,Z.jsx)($,{color:`#475569`})]}),(0,Z.jsxs)(`mesh`,{position:[0,0,-.08],rotation:[KC,0,0],castShadow:!0,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[.07,.07,.16,16]}),(0,Z.jsx)($,{color:e,metalness:.2,roughness:.5})]}),(0,Z.jsxs)(`mesh`,{position:[0,0,.05],children:[(0,Z.jsx)(`sphereGeometry`,{args:[.26,16,12]}),(0,Z.jsx)(`meshBasicMaterial`,{wireframe:!0,color:`#64748b`,transparent:!0,opacity:.25})]}),(0,Z.jsxs)(`mesh`,{position:[0,0,.05],rotation:[KC,0,0],children:[(0,Z.jsx)(`torusGeometry`,{args:[.26,.012,8,24]}),(0,Z.jsx)($,{color:`#64748b`})]}),(0,Z.jsxs)(`group`,{ref:i,position:[0,0,.05],children:[(0,Z.jsxs)(`mesh`,{castShadow:!0,children:[(0,Z.jsx)(`sphereGeometry`,{args:[.04,12,12]}),(0,Z.jsx)($,{color:`#f1f5f9`})]}),(0,Z.jsxs)(`mesh`,{rotation:[.25,0,0],position:[0,.12,0],castShadow:!0,children:[(0,Z.jsx)(`boxGeometry`,{args:[.06,.22,.008]}),(0,Z.jsx)($,{color:`#f1f5f9`})]}),(0,Z.jsxs)(`mesh`,{rotation:[.25,0,Math.PI*2/3],position:[-.104,-.06,0],castShadow:!0,children:[(0,Z.jsx)(`boxGeometry`,{args:[.06,.22,.008]}),(0,Z.jsx)($,{color:`#f1f5f9`})]}),(0,Z.jsxs)(`mesh`,{rotation:[.25,0,-Math.PI*2/3],position:[.104,-.06,0],castShadow:!0,children:[(0,Z.jsx)(`boxGeometry`,{args:[.06,.22,.008]}),(0,Z.jsx)($,{color:`#f1f5f9`})]})]})]})]})}function cw({active:e}){let t=(0,v.useRef)(null);return j_(n=>{t.current&&e&&(t.current.rotation.z=n.clock.getElapsedTime()*15)}),(0,Z.jsxs)(`group`,{ref:t,children:[(0,Z.jsxs)(`mesh`,{castShadow:!0,children:[(0,Z.jsx)(`sphereGeometry`,{args:[.03,10,10]}),(0,Z.jsx)($,{color:`#18181b`})]}),Array.from({length:4}).map((e,t)=>(0,Z.jsx)(`group`,{rotation:[0,0,t*Math.PI/2],children:(0,Z.jsxs)(`mesh`,{position:[0,.1,0],rotation:[.2,0,0],children:[(0,Z.jsx)(`boxGeometry`,{args:[.03,.12,.004]}),(0,Z.jsx)($,{color:`#27272a`})]})},t))]})}function lw(e){let t=new ni;e.updateWorldMatrix(!0,!0);let n=new J().copy(e.matrixWorld).invert(),r=new J,i=new ni,a=a=>{e.traverse(e=>{let o=e;!o.isMesh||a&&!o.castShadow||(o.geometry.boundingBox||o.geometry.computeBoundingBox(),o.geometry.boundingBox&&(i.copy(o.geometry.boundingBox),r.multiplyMatrices(n,o.matrixWorld),i.applyMatrix4(r),t.union(i)))})};return a(!0),t.isEmpty()&&a(!1),t}var uw=e=>Math.max(e+.22,.5),dw=(0,v.memo)(function({part:e,flow:t=0,selected:n=!1,ghost:r=!1,connectedKeys:i}){let a=(0,v.useRef)(null),[o,s]=(0,v.useState)(!1),[c,l]=(0,v.useState)(null);vy(o&&!r);let u=JSON.stringify(e.params);(0,v.useEffect)(()=>{if(r)return;let e=requestAnimationFrame(()=>{let e=a.current;if(!e)return;let t=lw(e);if(t.isEmpty()){l({center:[0,.25,0],size:[.5,.5,.5]});return}let n=t.getCenter(new q),r=t.getSize(new q);l({center:[n.x,n.y,n.z],size:[r.x,r.y,r.z]})});return()=>cancelAnimationFrame(e)},[e.type,u,r]);let d=(0,v.useMemo)(()=>{if(!c||r)return null;let e=new bs(c.size[0]+.1,c.size[1]+.1,c.size[2]+.1),t=new js(e);return e.dispose(),t},[c,r]);return(0,v.useEffect)(()=>()=>d?.dispose(),[d]),(0,Z.jsx)(qC.Provider,{value:{ghost:r,selected:n},children:(0,Z.jsxs)(`group`,{position:e.position,rotation:e.rotation,onPointerDown:t=>{if(r)return;let n=Q.getState();if(n.placingType||n.tool===`measure`)return;let i=t.intersections.find(e=>e.object.userData?.connectorHandle);if(i&&i.distance<=t.distance+.5)return;t.stopPropagation();let a=t.nativeEvent;if(a.metaKey||a.ctrlKey){n.selectedIds.includes(e.id)||n.setSelected(e.id),n.openColorPopover(a.clientX,a.clientY);return}if(a.shiftKey){n.toggleSelected(e.id);return}if(n.selectedIds.includes(e.id)||n.setSelected(e.id),t.button===0){if(a.altKey){let r=n.selectedIds.includes(e.id)?[...n.selectedIds]:[e.id],i=n.duplicateParts(r,{offset:[0,0,0]}),a=i[r.indexOf(e.id)]??i[0];if(!a)return;iC({partId:a,grabPoint:[t.point.x,t.point.y,t.point.z],mode:`body`});return}iC({partId:e.id,grabPoint:[t.point.x,t.point.y,t.point.z],mode:`body`})}},onDoubleClick:t=>{if(r)return;t.stopPropagation();let n=Q.getState();n.placingType||n.tool===`measure`||(Zx.has(e.type)?n.selectConnectedRun(e.id):n.setSelected(e.id),e.type===`pump`&&window.dispatchEvent(new CustomEvent(`hydro:flash-pump`,{detail:e.id})))},onPointerOver:e=>{if(r)return;let t=Q.getState();t.placingType||t.tool===`measure`||t.draggingId||e.intersections[0]?.eventObject===e.eventObject&&s(!0)},onPointerOut:()=>s(!1),children:[(0,Z.jsxs)(`group`,{ref:a,children:[(0,Z.jsx)(`group`,{name:`part-body-mesh`,userData:{partId:e.id},children:(0,Z.jsx)(aw,{part:e,flow:t,connectedKeys:i})}),!r&&(0,Z.jsx)(tw,{part:e,connectedKeys:i})]}),!r&&c&&(0,Z.jsxs)(`mesh`,{position:c.center,children:[(0,Z.jsx)(`boxGeometry`,{args:[uw(c.size[0]),uw(c.size[1]),uw(c.size[2])]}),(0,Z.jsx)(`meshBasicMaterial`,{visible:!1})]}),!r&&o&&!n&&c&&d&&(0,Z.jsx)(`lineSegments`,{geometry:d,position:c.center,children:(0,Z.jsx)(`lineBasicMaterial`,{color:`#38bdf8`,transparent:!0,opacity:.55,depthWrite:!1})})]})})});function fw(){let e=Q(e=>e.showFlow),t=Q(e=>e.parts),n=YS();return(0,Z.jsxs)(`group`,{children:[(0,Z.jsx)(vw,{sim:n,parts:t}),e&&n.segments.map((e,t)=>(0,Z.jsx)(bw,{seg:e},`${e.partId}-${t}`))]})}var pw=0,mw=e=>e<0?0:e>1?1:e,hw=(e,t,n)=>en?n:e,gw=7.48;function _w(e,t){let n=e.params,r=Math.max(.25,n.diameter??1);switch(e.type){case`pipe`:case`elbow`:case`tee`:case`valve`:return Math.PI*(r/24)**2*t*gw;case`pump`:return .06;case`tower`:return .1*(n.height??4);case`tray`:return .08*(n.length??3)*(n.width??1.2);case`wallPanel`:return .25;case`emitter`:return .02;case`drain`:return .05;case`reservoir`:return 2;default:return .1}}function vw({sim:e,parts:t}){let n=(0,v.useRef)(e);n.current=e;let r=(0,v.useMemo)(()=>{let n=Object.keys(e.fillLength),r=[];for(let i of n){let n=e.fillDistance[i],a=e.flows[i]??0,o=t[i];if(n===void 0||a<=0||!o)continue;let s=Math.max(.2,e.fillLength[i]),c=Math.max(.004,_w(o,s));r.push({dist:n,len:s,speed:hw(a/3600*s/c,.5,5)})}return{partIds:n,spans:r}},[e,t]),i=(0,v.useRef)(r);return i.current=r,j_((e,t)=>{if(!Q.getState().simRunning){uC();return}let r=n.current,a=Math.min(t,.1);if(lC(a),r.totalGph>.5){let e=1/0;for(let t of i.current.spans)pw>=t.dist&&pw0&&o!==void 0?t.fill=mw((pw-o)/s):i?t.fill=Math.min(1,t.fill+a*.6):t.fill=Math.max(0,t.fill-a*.9),t.flow=n,t.backedUp=i,t.overflow=!1,t.spill=!1,t.entry=r.entryConnector[e],t.state=i?`backedUp`:t.fill<=.002?`empty`:t.fill>=.998?`full`:`filling`}for(let e of r.drains){if(!e.overflowing)continue;let t=aC.get(e.partId);t&&(t.overflow=!0)}for(let e of r.netPots){if(!e.overflowing)continue;let t=pC(e.partId);t.fill=1,t.flow=e.inflowGph,t.backedUp=!0,t.overflow=!1,t.spill=!0,t.state=`backedUp`}}),null}var yw=new q(0,1,0);function bw({seg:e}){let t=(0,v.useRef)(null),{from:n,dir:r,len:i,quat:a,count:o,speed:s}=(0,v.useMemo)(()=>{let t=new q(...e.from),n=new q(...e.to).clone().sub(t),r=n.length();n.normalize();let i=Math.max(.5,e.diameter??1);return{from:t,dir:n,len:r,quat:new Mn().setFromUnitVectors(yw,n),count:Math.max(1,Math.round(r/.55)),speed:.35+Math.min(2.5,e.gph/(i*i)/220)}},[e]);return j_(()=>{let a=t.current;if(!a)return;let c=dC()*s,l=oC(e.partId)?.fill??1;a.children.forEach((e,t)=>{let a=((t+c)%o+o)%o/o;e.position.copy(n).addScaledVector(r,a*i);let s=e.material;s.opacity=.85*l*Math.min(1,Math.min(a,1-a)*4+.15)})}),i<.2?null:(0,Z.jsx)(`group`,{ref:t,children:Array.from({length:o},(e,t)=>(0,Z.jsxs)(`mesh`,{quaternion:a,children:[(0,Z.jsx)(`coneGeometry`,{args:[.05,.14,8]}),(0,Z.jsx)(`meshBasicMaterial`,{color:`#38bdf8`,toneMapped:!1,transparent:!0,opacity:.85})]},t))})}function xw(){let e=Q(e=>e.selectedIds),t=Q(e=>e.parts),n=Q(e=>e.placingType),r=Q(e=>e.tool);if(n||r===`measure`||!e.length)return null;let i=[];for(let n of e){let e=t[n];e&&i.push(...nS(e))}return(0,Z.jsxs)(Z.Fragment,{children:[e.filter(e=>t[e]?.type===`pipe`).map(e=>(0,Z.jsx)(ww,{partId:e},`pipe-stretch-${e}`)),i.map(e=>(0,Z.jsx)(Cw,{conn:e,dimmed:t[e.partId]?.type===`pipe`},e.key)),(0,Z.jsx)(Ew,{})]})}var Sw=e=>new Mn().setFromUnitVectors(new q(0,0,1),new q(...e).normalize());function Cw({conn:e,dimmed:t=!1}){let n=Q(e=>e.draggingId),[r,i]=(0,v.useState)(!1);vy(r,`grab`);let a=(0,v.useMemo)(()=>Sw(e.dir),[e.dir[0],e.dir[1],e.dir[2]]),o=n!==null&&rC.connectorKey===e.key,s=r||o;return(0,Z.jsxs)(`group`,{position:e.pos,children:[(0,Z.jsxs)(`mesh`,{userData:{connectorHandle:!0},onPointerDown:t=>{if(t.button!==0)return;let n=Q.getState();if(n.placingType||n.tool===`measure`)return;t.stopPropagation();let r=t.clientX,i=t.clientY,a=t=>{window.removeEventListener(`pointerup`,a);let o=t.clientX-r,s=t.clientY-i;Math.hypot(o,s)<4&&n.spawnPipeAtConnector(e.key)};window.addEventListener(`pointerup`,a),iC({partId:e.partId,grabPoint:e.pos,mode:`handle`,connectorKey:e.key})},onPointerOver:e=>{if(Q.getState().draggingId)return;let t=e.intersections.find(e=>e.object.userData?.connectorHandle);t?.object!==e.object||t.distance>(e.intersections[0]?.distance??1/0)+.5||i(!0)},onPointerOut:()=>i(!1),children:[(0,Z.jsx)(`sphereGeometry`,{args:[.22,10,10]}),(0,Z.jsx)(`meshBasicMaterial`,{visible:!1})]}),(0,Z.jsxs)(`mesh`,{scale:s?1.4:1,renderOrder:998,children:[(0,Z.jsx)(`sphereGeometry`,{args:[t?.05:.075,14,14]}),(0,Z.jsx)(`meshBasicMaterial`,{color:s?`#bae6fd`:`#38bdf8`,toneMapped:!1,depthTest:!1,transparent:!0,opacity:t?s?.85:.45:.95})]}),(0,Z.jsxs)(`mesh`,{quaternion:a,scale:s?1.25:1,renderOrder:998,children:[(0,Z.jsx)(`torusGeometry`,{args:[t?.11:.15,t?.014:.018,8,24]}),(0,Z.jsx)(`meshBasicMaterial`,{color:`#38bdf8`,toneMapped:!1,depthTest:!1,transparent:!0,opacity:t?s?.8:.35:s?.95:.55})]})]})}function ww({partId:e}){let t=Q(t=>t.parts[e]),n=Q(e=>e.draggingId);if(!t||t.type!==`pipe`)return null;let r=nS(t),i=r.find(e=>e.connectorId===`a`),a=r.find(e=>e.connectorId===`b`);if(!i||!a)return null;let o=t.params.length??0,s=[(i.pos[0]+a.pos[0])/2,(i.pos[1]+a.pos[1])/2+.28,(i.pos[2]+a.pos[2])/2],c=n===e&&!!rC.pipeStretch;return(0,Z.jsxs)(`group`,{children:[(0,Z.jsx)(mb,{points:[i.pos,a.pos],color:c?`#7dd3fc`:`#38bdf8`,lineWidth:2,transparent:!0,opacity:c?.95:.55}),(0,Z.jsx)(Tw,{conn:i}),(0,Z.jsx)(Tw,{conn:a}),(0,Z.jsx)(_y,{position:s,center:!0,distanceFactor:12,children:(0,Z.jsxs)(`div`,{className:`rounded-full border px-2 py-1 text-[10px] font-semibold whitespace-nowrap shadow-lg backdrop-blur ${c?`border-sky-400 bg-sky-300/95 text-sky-950`:`border-zinc-700 bg-zinc-950/90 text-zinc-200`}`,children:[o.toFixed(2),` ft`,(0,Z.jsx)(`span`,{className:`ml-1 text-zinc-400`,children:c?`stretching`:`drag ends to stretch`})]})})]})}function Tw({conn:e}){let t=Q(e=>e.draggingId),[n,r]=(0,v.useState)(!1);vy(n,`grab`);let i=(0,v.useMemo)(()=>Sw(e.dir),[e.dir[0],e.dir[1],e.dir[2]]),a=n||t!==null&&rC.connectorKey===e.key;return(0,Z.jsxs)(`group`,{position:e.pos,children:[(0,Z.jsxs)(`mesh`,{userData:{connectorHandle:!0},onPointerDown:t=>{if(t.button!==0)return;let n=Q.getState();n.placingType||n.tool===`measure`||(t.stopPropagation(),iC({partId:e.partId,grabPoint:e.pos,mode:`handle`,connectorKey:e.key}))},onPointerOver:e=>{if(Q.getState().draggingId)return;let t=e.intersections.find(e=>e.object.userData?.connectorHandle);t?.object!==e.object||t.distance>(e.intersections[0]?.distance??1/0)+.5||r(!0)},onPointerOut:()=>r(!1),children:[(0,Z.jsx)(`sphereGeometry`,{args:[.28,12,12]}),(0,Z.jsx)(`meshBasicMaterial`,{visible:!1})]}),(0,Z.jsxs)(`mesh`,{quaternion:i,scale:a?1.12:1,renderOrder:998,children:[(0,Z.jsx)(`cylinderGeometry`,{args:[.05,.1,.18,12]}),(0,Z.jsx)(`meshBasicMaterial`,{color:a?`#e0f2fe`:`#7dd3fc`,toneMapped:!1,depthTest:!1,transparent:!0,opacity:.98})]}),(0,Z.jsxs)(`mesh`,{quaternion:i,position:[0,0,.11],scale:a?1.18:1,renderOrder:998,children:[(0,Z.jsx)(`coneGeometry`,{args:[.08,.16,12]}),(0,Z.jsx)(`meshBasicMaterial`,{color:a?`#38bdf8`:`#0ea5e9`,toneMapped:!1,depthTest:!1,transparent:!0,opacity:.95})]})]})}function Ew(){let e=Q(e=>e.snapTargetKey),t=Q(e=>e.parts),n=(0,v.useRef)(null);if(j_(({clock:e})=>{if(n.current){let t=1+.18*Math.sin(e.elapsedTime*7);n.current.scale.setScalar(t)}}),!e)return null;let r=t[e.split(`:`)[0]];if(!r)return null;let i=nS(r).find(t=>t.key===e);return i?(0,Z.jsx)(`group`,{position:i.pos,children:(0,Z.jsxs)(`group`,{ref:n,children:[(0,Z.jsxs)(`mesh`,{quaternion:Sw(i.dir),renderOrder:999,children:[(0,Z.jsx)(`torusGeometry`,{args:[.24,.035,10,28]}),(0,Z.jsx)(`meshBasicMaterial`,{color:`#34d399`,toneMapped:!1,depthTest:!1,transparent:!0,opacity:.95})]}),(0,Z.jsxs)(`mesh`,{renderOrder:999,children:[(0,Z.jsx)(`sphereGeometry`,{args:[.1,12,12]}),(0,Z.jsx)(`meshBasicMaterial`,{color:`#6ee7b7`,toneMapped:!1,depthTest:!1,transparent:!0,opacity:.9})]})]})}):null}function Dw(){let e=Q(e=>e.selectedIds),t=Q(e=>e.parts),n=Q(e=>e.draggingId),r=Q(e=>e.placingType),i=Q(e=>e.tool),a=(0,v.useMemo)(()=>new J,[]),o=(0,v.useRef)(!1),s=(0,v.useRef)(null),c=e.map(e=>t[e]).filter(Boolean),l=[0,0,0];for(let e of c)l[0]+=e.position[0]/c.length,l[1]+=e.position[1]/c.length,l[2]+=e.position[2]/c.length;return(0,v.useLayoutEffect)(()=>{o.current||a.setPosition(l[0],l[1],l[2])}),!c.length||n||r||i===`measure`?null:(0,Z.jsx)(Hx,{matrix:a,autoTransform:!1,fixed:!0,scale:72,lineWidth:3,depthTest:!1,disableRotations:!0,disableScaling:!0,axisColors:[`#f87171`,`#4ade80`,`#60a5fa`],hoveredColor:`#fbbf24`,onDragStart:()=>{o.current=!0;let e=Q.getState();e.pushHistory(),e.setGizmoDragging(!0);let t={};for(let n of e.selectedIds){let r=e.parts[n];r&&(t[n]=[...r.position])}s.current={centroid:[...l],positions:t}},onDrag:e=>{let t=s.current;if(!t)return;let n=Q.getState();a.copy(e);let r=new q().setFromMatrixPosition(e),i=e=>n.snapToGrid?NS(e,n.gridSize):e,o=[i(r.x-t.centroid[0]),i(r.y-t.centroid[1]),i(r.z-t.centroid[2])],c=1/0;for(let e of Object.values(t.positions))c=Math.min(c,e[1]);Number.isFinite(c)&&(o[1]=Math.max(o[1],-c));let l={};for(let[e,n]of Object.entries(t.positions))l[e]=[n[0]+o[0],n[1]+o[1],n[2]+o[2]];n.setPositions(l)},onDragEnd:()=>{o.current=!1,s.current=null,Q.getState().setGizmoDragging(!1)}})}var Ow=Math.PI/2;function kw(e){switch(e){case`pipe`:case`elbow`:case`tee`:case`valve`:case`emitter`:return .25;default:return 0}}var Aw={camera:null,el:null};function jw(e,t){let{camera:n,el:r}=Aw;if(!n||!r)return null;let i=r.getBoundingClientRect(),a=new K((e-i.left)/i.width*2-1,-((t-i.top)/i.height)*2+1),o=new qd;o.setFromCamera(a,n);let s=new q;return o.ray.intersectPlane(new mo(new q(0,1,0),0),s)?[s.x,s.y,s.z]:null}function Mw(){let e=A_(e=>e.camera),t=A_(e=>e.gl.domElement),n=A_(e=>e.scene),r=Q(e=>e.setScene);return(0,v.useEffect)(()=>{Aw.camera=e,Aw.el=t},[e,t]),(0,v.useEffect)(()=>(r(n),()=>r(null)),[n,r]),null}var Nw={orbit:{pos:[9,7,11],up:[0,1,0],target:[0,1,0]},top:{pos:[0,60,0],up:[0,0,-1],target:[0,0,0]},front:{pos:[0,2,60],up:[0,1,0],target:[0,2,0]},side:{pos:[60,2,0],up:[0,1,0],target:[0,2,0]}};function Pw(e){switch(e){case`xray`:return{background:`#071019`,fogFar:180,ambient:.72,hemi:.82,dir:1.15,gridCell:`#15384a`,gridSection:`#1f536d`};case`water`:return{background:`#04131c`,fogFar:210,ambient:.3,hemi:.42,dir:.9,gridCell:`#0c2a3b`,gridSection:`#134764`};default:return{background:`#0a0e13`,fogFar:140,ambient:.45,hemi:.5,dir:1.4,gridCell:`#1b2531`,gridSection:`#2c3d52`}}}function Fw(){let e=Q(e=>e.viewMode),t=A_(e=>e.camera),n=A_(e=>e.controls);return(0,v.useEffect)(()=>{let r=Nw[e];t.position.set(...r.pos),t.up.set(...r.up),t.lookAt(...r.target),n&&(n.target.set(...r.target),n.update())},[e,t,n]),null}function Iw(){let e=Q(e=>e.placingType),t=Q(e=>e.tool),n=Q(e=>e.snapToGrid),r=Q(e=>e.gridSize),i=Q(e=>e.measurePoints),a=Q(e=>e.pipeRunPoints),o=Q(e=>e.parts),s=Q(e=>e.activeRoomId),[c,l]=(0,v.useState)(null),[u,d]=(0,v.useState)(null),f=(0,v.useMemo)(()=>Object.values(o).filter(e=>e.roomId===s),[o,s]),p=e=>n?NS(e,r):e,m=t=>[p(t.point.x),e?kw(e):0,p(t.point.z)],h=n=>{if(e&&l(m(n)),t===`pipeRun`){let e=m(n),t=aS(e,f,new Set,Bw);if(t)Q.getState().setSnapTargetKey(t.key),d(t.pos);else{let t=oS(e,f,Bw);Q.getState().setSnapTargetKey(null),d(t?t.branchPos:e)}}else Q.getState().snapTargetKey&&Q.getState().setSnapTargetKey(null)},g=n=>{if(n.delta>6)return;let r=Q.getState();if(e){r.addPart(e,m(n)),n.nativeEvent.shiftKey||r.setPlacingType(null);return}if(t===`measure`){r.addMeasurePoint([n.point.x,Math.max(0,n.point.y),n.point.z]);return}if(t===`pipeRun`){let e=m(n),t=aS(e,f,new Set,Bw);if(t)r.setSnapTargetKey(t.key),r.extendPipeRun({pos:t.pos,connectorKey:t.key},n.nativeEvent.shiftKey);else{let t=oS(e,f,Bw);r.setSnapTargetKey(null),r.extendPipeRun(t?{pos:t.pos,tapPipeId:t.partId,tapRotationY:t.rotationY,tapDiameter:t.diameter}:{pos:e},n.nativeEvent.shiftKey)}n.nativeEvent.shiftKey||r.setSnapTargetKey(null);return}n.intersections[0]?.eventObject===n.eventObject&&(n.nativeEvent.shiftKey||r.setSelected(null))},_=(0,v.useMemo)(()=>!e||!c?null:{id:`__ghost__`,type:e,position:c,rotation:[0,0,0],params:{...Yx[e].defaults}},[e,c]);return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`mesh`,{rotation:[-Ow,0,0],position:[0,-.02,0],onPointerMove:h,onClick:g,children:[(0,Z.jsx)(`planeGeometry`,{args:[600,600]}),(0,Z.jsx)(`meshBasicMaterial`,{visible:!1,side:2})]}),(0,Z.jsxs)(`mesh`,{rotation:[-Ow,0,0],position:[0,-.01,0],receiveShadow:!0,children:[(0,Z.jsx)(`planeGeometry`,{args:[300,300]}),(0,Z.jsx)(`shadowMaterial`,{opacity:.35})]}),_&&(0,Z.jsx)(dw,{part:_,ghost:!0}),i.length>0&&(0,Z.jsx)(Rw,{points:i}),t===`pipeRun`&&a.length>0&&u&&(0,Z.jsx)(Lw,{points:a,hover:u})]})}function Lw({points:e,hover:t}){let n=e[e.length-1].pos,r=t,i=[n[0],.28,n[2]],a=[r[0],.28,r[2]],o=[(i[0]+a[0])/2,.55,(i[2]+a[2])/2],s=Uw(Math.hypot(r[0]-n[0],r[2]-n[2]));return(0,Z.jsxs)(`group`,{children:[e.length>1&&(0,Z.jsx)(mb,{points:e.map(e=>[e.pos[0],.26,e.pos[2]]),color:`#0ea5e9`,lineWidth:2,dashed:!0,dashScale:3}),(0,Z.jsx)(mb,{points:[i,a],color:`#38bdf8`,lineWidth:2,dashed:!0,dashScale:4}),(0,Z.jsx)(_y,{position:o,center:!0,distanceFactor:12,children:(0,Z.jsxs)(`div`,{className:`rounded bg-sky-400 px-1.5 py-0.5 font-mono text-[11px] font-bold text-sky-950 whitespace-nowrap`,children:[s.toFixed(2),` ft · Shift-click continues`]})})]})}function Rw({points:e}){let[t,n]=e,r=n?[(t[0]+n[0])/2,(t[1]+n[1])/2+.3,(t[2]+n[2])/2]:null,i=n?Math.hypot(n[0]-t[0],n[1]-t[1],n[2]-t[2]):0;return(0,Z.jsxs)(`group`,{children:[e.map((e,t)=>(0,Z.jsxs)(`mesh`,{position:e,children:[(0,Z.jsx)(`sphereGeometry`,{args:[.09,12,12]}),(0,Z.jsx)(`meshBasicMaterial`,{color:`#fbbf24`,toneMapped:!1})]},t)),n&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(mb,{points:[t,n],color:`#fbbf24`,lineWidth:2,dashed:!0,dashScale:3}),(0,Z.jsx)(_y,{position:r,center:!0,distanceFactor:12,children:(0,Z.jsxs)(`div`,{className:`rounded bg-amber-400 px-1.5 py-0.5 font-mono text-[11px] font-bold text-black whitespace-nowrap`,children:[i.toFixed(2),` ft`]})})]})]})}var zw=.45,Bw=.9,Vw=Yx.pipe.params.length.min,Hw=Yx.pipe.params.length.max;function Uw(e){return Math.min(Hw,Math.max(Vw,e))}function Ww(e){let t=rC.pipeStretch;if(!t)return null;let n=[e[0]-t.anchorPos[0],e[1]-t.anchorPos[1],e[2]-t.anchorPos[2]],r=Uw(n[0]*t.axis[0]+n[1]*t.axis[1]+n[2]*t.axis[2]),i=[t.anchorPos[0]+t.axis[0]*r,t.anchorPos[1]+t.axis[1]*r,t.anchorPos[2]+t.axis[2]*r];return{end:i,position:[(t.anchorPos[0]+i[0])/2,(t.anchorPos[1]+i[1])/2,(t.anchorPos[2]+i[2])/2],length:r}}function Gw(){let e=Q(e=>e.draggingId),t=Q(e=>e.viewMode),n=Q(e=>e.draggingId?e.parts[e.draggingId]:void 0),r=A_(e=>e.camera),[i,a]=(0,v.useState)(!1);if((0,v.useEffect)(()=>{let e=e=>e.key===`Shift`&&a(!0),t=e=>e.key===`Shift`&&a(!1);return window.addEventListener(`keydown`,e),window.addEventListener(`keyup`,t),()=>{window.removeEventListener(`keydown`,e),window.removeEventListener(`keyup`,t)}},[]),(0,v.useEffect)(()=>{if(!e)return;let t=()=>Kw(e);return window.addEventListener(`pointerup`,t),()=>window.removeEventListener(`pointerup`,t)},[e]),!e||!n)return null;let o=t===`orbit`&&i,s=`${t}:${o?`free`:`flat`}`,c=rC.groupIds.length?rC.groupIds:[e],l=n=>{let r=Q.getState(),i=r.parts[e];if(!i)return;rC.pushed||=(r.pushHistory(`drag:${e}`),!0),rC.planeKey&&rC.planeKey!==s&&(rC.grabOffset=[n.point.x-i.position[0],n.point.y-i.position[1],n.point.z-i.position[2]],rC.planeAnchor=[n.point.x,n.point.y,n.point.z]),rC.planeKey=s;let a=e=>r.snapToGrid?NS(e,r.gridSize):e;if(rC.pipeStretch&&rC.connectorKey){let i;i=o?[a(n.point.x),a(n.point.y),a(n.point.z)]:t===`front`?[a(n.point.x),a(n.point.y),rC.planeAnchor[2]]:t===`side`?[rC.planeAnchor[0],a(n.point.y),a(n.point.z)]:[a(n.point.x),rC.planeAnchor[1],a(n.point.z)];let s=Ww(i);if(!s)return;let c=aS(s.end,Object.values(r.parts).filter(e=>e.roomId===r.activeRoomId),new Set([e]));r.setSnapTargetKey(c?c.key:null),c&&c.dt.connectorId===e);if(t){let e=aS(t.pos,Object.values(r.parts).filter(e=>e.roomId===r.activeRoomId),new Set(c));r.setSnapTargetKey(e?e.key:null),e&&e.dKw(e)},f=(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(`planeGeometry`,{args:[600,600]}),(0,Z.jsx)(`meshBasicMaterial`,{visible:!1,side:2})]});if(o)return(0,Z.jsx)(`mesh`,{position:u,quaternion:r.quaternion,...d,children:f});let p=t===`front`||t===`side`;return(0,Z.jsx)(`mesh`,{position:p?t===`front`?[0,0,u[2]]:[u[0],0,0]:[0,u[1],0],rotation:p?t===`side`?[0,Ow,0]:[0,0,0]:[-Ow,0,0],...d,children:f})}function Kw(e){let t=Q.getState();if(t.draggingId!==e)return;let n=rC.groupIds.length?rC.groupIds:[e],r=rC.startPositions[e],i=t.parts[e],a=!r||!i?!1:Math.hypot(i.position[0]-r[0],i.position[1]-r[1],i.position[2]-r[2])>1e-6;if(rC.mode===`body`&&!a&&n.length>1){t.setSelected(e),t.setSnapTargetKey(null),t.setDraggingId(null);return}if(rC.mode===`handle`&&rC.connectorKey&&t.snapTargetKey){let r=t.parts[e],i=t.parts[t.snapTargetKey.split(`:`)[0]];if(r&&i){let a=rC.connectorKey.split(`:`)[1],o=nS(r).find(e=>e.connectorId===a),s=nS(i).find(e=>e.key===t.snapTargetKey);if(o&&s)if(rC.pipeStretch){let n=Ww(s.pos);n&&t.setPipeStretch(e,n.position,n.length)}else t.translateParts(n,[s.pos[0]-o.pos[0],s.pos[1]-o.pos[1],s.pos[2]-o.pos[2]])}}else rC.mode===`body`&&t.snapGroupToConnectors(n,e);t.setSnapTargetKey(null),t.setDraggingId(null)}function qw(){let e=Q(e=>e.parts),t=Q(e=>e.activeRoomId),n=Q(e=>e.selectedIds),r=YS();return(0,Z.jsx)(Z.Fragment,{children:(0,v.useMemo)(()=>Object.values(e).filter(e=>e.roomId===t),[e,t]).map(e=>(0,Z.jsx)(dw,{part:e,flow:r.flows[e.id]??0,selected:n.includes(e.id),connectedKeys:r.connectedKeys},e.id))})}var Jw=.05,Yw=20,Xw=.03;function Zw(){let e=Q(e=>e.draggingId),t=Q(e=>e.parts),n=Q(e=>e.activeRoomId),r=(0,v.useMemo)(()=>{if(!e)return[];let r=t[e];if(!r)return[];let[i,,a]=r.position,o=Object.values(t).filter(t=>t.id!==e&&t.roomId===n).map(e=>({p:e,d:Math.hypot(e.position[0]-i,e.position[2]-a)})).sort((e,t)=>e.d-t.d).slice(0,Yw).map(e=>e.p),s=[];for(let e of o){let[t,,n]=e.position;if(Math.abs(t-i)(0,Z.jsx)(mb,{points:e.points,color:`#22d3ee`,lineWidth:1.5,dashed:!0,dashScale:6},e.key))})}function Qw(){let e=Q(e=>e.focusTarget),t=A_(e=>e.controls),n=A_(e=>e.camera),r=(0,v.useRef)(0),i=(0,v.useRef)(new q),a=(0,v.useRef)(new q),o=(0,v.useRef)(null);return(0,v.useEffect)(()=>{!e||!t||(i.current.copy(t.target),a.current.copy(n.position),o.current=e,r.current=0)},[e,t,n]),j_((e,s)=>{let c=o.current;if(!c||!t)return;r.current=Math.min(1,r.current+s/.5);let l=r.current,u=l*l*(3-2*l);t.target.lerpVectors(i.current,new q(...c),u);let d=n.position.clone().sub(a.current),f=new q(...c).sub(i.current).multiplyScalar(u);n.position.copy(a.current).add(d).add(f),t.update(),l>=1&&(o.current=null,Q.getState().setFocusTarget(null))}),null}function $w(){let e=A_(e=>e.camera),t=A_(e=>e.controls),n=(0,v.useRef)({});return(0,v.useEffect)(()=>{let e=e=>{let t=e.target;t&&/^(INPUT|TEXTAREA|SELECT)$/.test(t.tagName)||[`ArrowUp`,`ArrowDown`,`ArrowLeft`,`ArrowRight`].includes(e.key)&&(e.preventDefault(),n.current[e.key]=!0)},t=e=>{[`ArrowUp`,`ArrowDown`,`ArrowLeft`,`ArrowRight`].includes(e.key)&&(n.current[e.key]=!1)};return window.addEventListener(`keydown`,e,{passive:!1}),window.addEventListener(`keyup`,t),()=>{window.removeEventListener(`keydown`,e),window.removeEventListener(`keyup`,t)}},[]),j_((r,i)=>{let a=Math.min(.1,i),o=new q(1,0,0).applyQuaternion(e.quaternion),s=new q(0,1,0).applyQuaternion(e.quaternion),c=new q;n.current.ArrowUp&&c.add(s),n.current.ArrowDown&&c.add(s.clone().negate()),n.current.ArrowLeft&&c.add(o.clone().negate()),n.current.ArrowRight&&c.add(o),c.lengthSq()>0&&(c.normalize(),c.multiplyScalar(15*a),e.position.add(c),t&&t.target.add(c)),e.position.x=Math.max(-120,Math.min(120,e.position.x)),e.position.y=Math.max(-120,Math.min(120,e.position.y)),e.position.z=Math.max(-120,Math.min(120,e.position.z)),t&&(t.target.x=Math.max(-120,Math.min(120,t.target.x)),t.target.y=Math.max(-120,Math.min(120,t.target.y)),t.target.z=Math.max(-120,Math.min(120,t.target.z)),t.update())}),null}function eT({remoteCursors:e}){let t=Q(e=>e.activeRoomId);return(0,Z.jsx)(Z.Fragment,{children:Object.entries(e).map(([e,n])=>n.activeRoomId===t?(0,Z.jsxs)(`mesh`,{position:n.position,children:[(0,Z.jsx)(`sphereGeometry`,{args:[.15,16,16]}),(0,Z.jsx)(`meshBasicMaterial`,{color:n.color,toneMapped:!1}),(0,Z.jsx)(_y,{distanceFactor:15,center:!0,position:[0,.4,0],children:(0,Z.jsx)(`div`,{className:`px-1.5 py-0.5 rounded text-[10px] font-bold text-white whitespace-nowrap shadow-lg select-none pointer-events-none`,style:{backgroundColor:n.color},children:n.userName.split(`@`)[0]})})]},e):null)})}function tT(){let{raycaster:e}=A_();return j_(()=>{let t=new mo(new q(0,1,0),-.25),n=new q;e.ray.intersectPlane(t,n)&&window.dispatchEvent(new CustomEvent(`collab:cursor`,{detail:{x:n.x,y:n.y,z:n.z}}))}),null}function nT({remoteCursors:e={}}){let t=Q(e=>e.viewMode),n=Q(e=>e.renderMode),r=Q(e=>e.draggingId),i=Q(e=>e.gizmoDragging),a=(0,v.useRef)(null),o=Pw(n);return(0,Z.jsxs)(ty,{shadows:!0,dpr:[1,2],className:`touch-none`,children:[(0,Z.jsx)(`color`,{attach:`background`,args:[o.background]}),(0,Z.jsx)(`fog`,{attach:`fog`,args:[o.background,50,o.fogFar]}),t===`orbit`?(0,Z.jsx)(xb,{makeDefault:!0,fov:50,position:Nw.orbit.pos,near:.1,far:400}):(0,Z.jsx)(yb,{makeDefault:!0,zoom:48,position:Nw[t].pos,near:.1,far:400}),(0,Z.jsx)(Sb,{ref:a,makeDefault:!0,enabled:!r&&!i,enableRotate:t===`orbit`,enableDamping:!0,dampingFactor:.12,maxPolarAngle:Math.PI/2-.02,minDistance:2,maxDistance:120}),(0,Z.jsx)(Fw,{}),(0,Z.jsx)(Mw,{}),(0,Z.jsx)($w,{}),(0,Z.jsx)(`ambientLight`,{intensity:o.ambient}),(0,Z.jsx)(`hemisphereLight`,{args:[`#bcd6ff`,`#1a2230`,o.hemi]}),(0,Z.jsx)(`directionalLight`,{position:[12,18,8],intensity:o.dir,castShadow:!0,"shadow-mapSize":[2048,2048],"shadow-camera-left":-25,"shadow-camera-right":25,"shadow-camera-top":25,"shadow-camera-bottom":-25}),(0,Z.jsx)(Vb,{position:[0,0,0],args:[200,200],cellSize:.5,cellColor:o.gridCell,sectionSize:2.5,sectionColor:o.gridSection,fadeDistance:90,fadeStrength:1.5,infiniteGrid:!0}),(0,Z.jsx)(Iw,{}),(0,Z.jsx)(Gw,{}),(0,Z.jsx)(qw,{}),(0,Z.jsx)(xw,{}),(0,Z.jsx)(Dw,{}),(0,Z.jsx)(fw,{}),(0,Z.jsx)(UC,{}),(0,Z.jsx)(Zw,{}),(0,Z.jsx)(Qw,{}),(0,Z.jsx)(eT,{remoteCursors:e}),(0,Z.jsx)(tT,{}),(0,Z.jsx)(Ib,{alignment:`top-right`,margin:[80,80],children:(0,Z.jsx)(zb,{axisColors:[`#ef4444`,`#22c55e`,`#3b82f6`],labelColor:`white`})})]})}var rT=[`pipe`,`elbow`,`tee`,`valve`,`pump`,`reservoir`,`tower`,`tray`,`emitter`];function iT(e){let t=Number(e)-1;return Number.isInteger(t)&&t>=0&&t`quick-${e}-${t}-${crypto.randomUUID().slice(0,8)}`,sT=(e,t)=>[e[0]+t[0],e[1]+t[1],e[2]+t[2]],cT=(e,t,n,r)=>({...n,id:oT(e,t),position:sT(n.position,r),rotation:[...n.rotation],params:{...n.params}});function lT(e){if(!e.length)return[0,0,0];let t=Math.max(...e.map(e=>e.position[0]));return[Math.ceil(t/2)*2+4,0,0]}function uT(e,t=[0,0,0]){let n=Math.PI/2;return e===`dwcSystem`?[cT(e,`dwc-res`,{type:`reservoir`,position:[0,0,0],rotation:[0,0,0],params:{width:1.6,depth:1.6,height:1.5,level:75,ph:6,ec:1.2},label:`DWC Bucket`},t),cT(e,`dwc-pot-a`,{type:`netPot`,position:[-.3,1.5,0],rotation:[0,0,0],params:{size:1}},t),cT(e,`dwc-pot-b`,{type:`netPot`,position:[.3,1.5,0],rotation:[0,0,0],params:{size:1}},t),cT(e,`dwc-comp`,{type:`airCompressor`,position:[-1.6,0,0],rotation:[0,0,0],params:{gph:60,frequency:5,on:1},label:`DWC Aerator`},t),cT(e,`dwc-chiller`,{type:`waterChiller`,position:[0,0,-1.6],rotation:[0,0,0],params:{targetTemp:68,on:1,diameter:1},label:`Water Chiller`},t)]:e===`finiteDrainTest`?[cT(e,`res`,{type:`reservoir`,position:[-2,0,0],rotation:[0,0,0],params:{width:1,depth:1,height:1,level:10,ph:6,ec:1.2},label:`Finite test reservoir`},t),cT(e,`pump`,{type:`pump`,position:[-1.05,0,0],rotation:[0,0,0],params:{gph:400,maxHeadFt:8,on:1},label:`Drain test pump`},t),cT(e,`pipe`,{type:`pipe`,position:[.4,.25,0],rotation:[0,0,0],params:{length:2,diameter:1}},t),cT(e,`drain`,{type:`drain`,position:[1.75,0,0],rotation:[0,0,0],params:{capacityGph:1e3},label:`Open drain`},t)]:e===`dripManifold`?[cT(e,`res`,{type:`reservoir`,position:[-2,0,0],rotation:[0,0,0],params:{width:2,depth:1.4,height:1,level:70},label:`Drip reservoir`},t),cT(e,`pump`,{type:`pump`,position:[-.55,0,0],rotation:[0,0,0],params:{gph:240,maxHeadFt:8,on:1},label:`Drip pump`},t),cT(e,`pipe-feed`,{type:`pipe`,position:[.4,.25,0],rotation:[0,0,0],params:{length:1,diameter:.75}},t),cT(e,`tee-a`,{type:`tee`,position:[1.5,.25,0],rotation:[0,0,0],params:{diameter:.75},label:`Manifold split`},t),cT(e,`header`,{type:`pipe`,position:[2.35,.25,0],rotation:[0,0,0],params:{length:.5,diameter:.75}},t),cT(e,`tee-b`,{type:`tee`,position:[3.2,.25,0],rotation:[0,0,0],params:{diameter:.75}},t),cT(e,`valve-a`,{type:`valve`,position:[1.5,.25,.95],rotation:[0,-n,0],params:{diameter:.5,open:75}},t),cT(e,`branch-a`,{type:`pipe`,position:[1.5,.25,1.65],rotation:[0,-n,0],params:{length:.7,diameter:.5}},t),cT(e,`emit-a`,{type:`emitter`,position:[1.5,.25,2.2],rotation:[0,n,0],params:{},label:`Dripper A`},t),cT(e,`valve-b`,{type:`valve`,position:[3.2,.25,.95],rotation:[0,-n,0],params:{diameter:.5,open:75}},t),cT(e,`branch-b`,{type:`pipe`,position:[3.2,.25,1.65],rotation:[0,-n,0],params:{length:.7,diameter:.5}},t),cT(e,`emit-b`,{type:`emitter`,position:[3.2,.25,2.2],rotation:[0,n,0],params:{},label:`Dripper B`},t)]:[cT(e,`res`,{type:`reservoir`,position:[-2.5,0,0],rotation:[0,0,0],params:{width:2,depth:1.4,height:1,level:70},label:`NFT reservoir`},t),cT(e,`pump`,{type:`pump`,position:[-1.05,0,0],rotation:[0,0,0],params:{gph:300,maxHeadFt:8,on:1},label:`NFT pump`},t),cT(e,`feed`,{type:`pipe`,position:[.2,.25,0],rotation:[0,0,0],params:{length:1.6,diameter:1}},t),cT(e,`tray`,{type:`tray`,position:[2.5,0,0],rotation:[0,0,0],params:{length:3,width:1.2},label:`NFT channel`},t),cT(e,`return`,{type:`pipe`,position:[4.35,.15,0],rotation:[0,0,0],params:{length:.7,diameter:1}},t),cT(e,`drain`,{type:`drain`,position:[5.05,-.1,0],rotation:[0,0,0],params:{capacityGph:350},label:`NFT return drain`},t),cT(e,`pot-a`,{type:`netPot`,position:[1.8,.25,-.2],rotation:[0,0,0],params:{size:.8}},t),cT(e,`pot-b`,{type:`netPot`,position:[2.5,.25,-.2],rotation:[0,0,0],params:{size:.8}},t),cT(e,`pot-c`,{type:`netPot`,position:[3.2,.25,-.2],rotation:[0,0,0],params:{size:.8}},t)]}function dT(){let e=Math.PI/2;return[{id:`demo-res`,type:`reservoir`,position:[-4,0,0],rotation:[0,0,0],params:{width:2,depth:1.4,height:1,level:70},label:`Main reservoir`},{id:`demo-pump`,type:`pump`,position:[-2.55,0,0],rotation:[0,0,0],params:{gph:550,maxHeadFt:8,on:1},label:`Main pump`},{id:`demo-tee`,type:`tee`,position:[-1.5,.25,0],rotation:[0,0,0],params:{diameter:1}},{id:`demo-pipe1`,type:`pipe`,position:[-.4,.25,0],rotation:[0,0,0],params:{length:1,diameter:1}},{id:`demo-elbow1`,type:`elbow`,position:[.1,.25,0],rotation:[0,0,0],params:{angle:90,diameter:1}},{id:`demo-pipe2`,type:`pipe`,position:[.6,1.75,0],rotation:[0,0,e],params:{length:2,diameter:1}},{id:`demo-elbow2`,type:`elbow`,position:[.6,2.75,0],rotation:[0,0,e],params:{angle:90,diameter:1}},{id:`demo-pipe3`,type:`pipe`,position:[-1.4,3.25,0],rotation:[0,0,0],params:{length:3,diameter:1}},{id:`demo-emitter`,type:`emitter`,position:[-3.1,3.25,0],rotation:[0,0,0],params:{},label:`Return emitter`},{id:`demo-pipe4`,type:`pipe`,position:[-1.5,.25,1.1],rotation:[0,-e,0],params:{length:1,diameter:.5}},{id:`demo-drain`,type:`drain`,position:[-1.5,0,1.95],rotation:[0,-e,0],params:{capacityGph:100},label:`Floor drain`},{id:`demo-res2`,type:`reservoir`,position:[7.5,0,1.5],rotation:[0,0,0],params:{width:2,depth:1.4,height:1,level:60},label:`Tower reservoir`},{id:`demo-pump2`,type:`pump`,position:[6.05,0,1.5],rotation:[0,Math.PI,0],params:{gph:240,maxHeadFt:8,on:1},label:`Tower pump`},{id:`demo-elbow-t1`,type:`elbow`,position:[5.6,.25,1.5],rotation:[0,Math.PI,0],params:{angle:90,diameter:1}},{id:`demo-riser2`,type:`pipe`,position:[5.1,2.375,1.5],rotation:[0,0,e],params:{length:3.25,diameter:1}},{id:`demo-elbow-t2`,type:`elbow`,position:[5.1,4,1.5],rotation:[0,0,e],params:{angle:90,diameter:1}},{id:`demo-pipe-t1`,type:`pipe`,position:[4.05,4.5,1.5],rotation:[0,0,0],params:{length:1.1,diameter:1}},{id:`demo-elbow-t3`,type:`elbow`,position:[3.5,4.5,1.5],rotation:[0,0,Math.PI],params:{angle:90,diameter:1}},{id:`demo-elbow-t4`,type:`elbow`,position:[3.45,.15,1.5],rotation:[e,0,0],params:{angle:90,diameter:1}},{id:`demo-pipe-t2`,type:`pipe`,position:[3.95,.15,2.75],rotation:[0,e,0],params:{length:1.5,diameter:1}},{id:`demo-drain2`,type:`drain`,position:[3.95,-.1,3.85],rotation:[0,-e,0],params:{capacityGph:100},label:`Tower drain`},{id:`demo-tower`,type:`tower`,position:[3,0,1.5],rotation:[0,0,0],params:{height:4,sites:6},label:`Tower A`},{id:`demo-tray`,type:`tray`,position:[3,0,-1.5],rotation:[0,0,0],params:{length:3,width:1.2}},{id:`demo-pot1`,type:`netPot`,position:[2.4,.25,-1.5],rotation:[0,0,0],params:{size:1}},{id:`demo-pot2`,type:`netPot`,position:[3.4,.25,-1.5],rotation:[0,0,0],params:{size:1}},{id:`demo-lattice`,type:`lattice`,position:[5.5,0,0],rotation:[0,-e,0],params:{width:2.5,height:3}}]}var fT=`#cbd5e1`,pT=`#4ade80`;function mT({children:e,className:t}){return(0,Z.jsx)(`svg`,{viewBox:`0 0 40 40`,fill:`none`,stroke:fT,strokeWidth:2,strokeLinecap:`round`,strokeLinejoin:`round`,className:t,"aria-hidden":`true`,children:e})}function hT({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`rect`,{x:`8`,y:`15`,width:`24`,height:`10`,rx:`2`,fill:e,fillOpacity:.35}),(0,Z.jsx)(`rect`,{x:`4`,y:`12.5`,width:`5`,height:`15`,rx:`1.5`,fill:e,fillOpacity:.55}),(0,Z.jsx)(`rect`,{x:`31`,y:`12.5`,width:`5`,height:`15`,rx:`1.5`,fill:e,fillOpacity:.55}),(0,Z.jsx)(`path`,{d:`M12 18.5 H28`,strokeOpacity:.45,strokeWidth:1.5})]})}function gT({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`path`,{d:`M5 10 H22 A8 8 0 0 1 30 18 V35 H20 V20 H5 Z`,fill:e,fillOpacity:.35}),(0,Z.jsx)(`rect`,{x:`3`,y:`8`,width:`4`,height:`14`,rx:`1.5`,fill:e,fillOpacity:.55}),(0,Z.jsx)(`rect`,{x:`18`,y:`33`,width:`14`,height:`4`,rx:`1.5`,fill:e,fillOpacity:.55})]})}function _T({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`path`,{d:`M5 13 H35 V23 H25 V35 H15 V23 H5 Z`,fill:e,fillOpacity:.35}),(0,Z.jsx)(`rect`,{x:`3`,y:`11`,width:`4`,height:`14`,rx:`1.5`,fill:e,fillOpacity:.55}),(0,Z.jsx)(`rect`,{x:`33`,y:`11`,width:`4`,height:`14`,rx:`1.5`,fill:e,fillOpacity:.55}),(0,Z.jsx)(`rect`,{x:`13`,y:`33`,width:`14`,height:`4`,rx:`1.5`,fill:e,fillOpacity:.55})]})}function vT({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`path`,{d:`M6 15 L20 21.5 L6 28 Z`,fill:e,fillOpacity:.35}),(0,Z.jsx)(`path`,{d:`M34 15 L20 21.5 L34 28 Z`,fill:e,fillOpacity:.35}),(0,Z.jsx)(`path`,{d:`M20 21.5 V11`}),(0,Z.jsx)(`ellipse`,{cx:`20`,cy:`9`,rx:`8`,ry:`3`,stroke:e,fill:e,fillOpacity:.3})]})}function yT({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`rect`,{x:`23`,y:`11`,width:`13`,height:`7`,rx:`1.5`,fill:e,fillOpacity:.45}),(0,Z.jsx)(`circle`,{cx:`18`,cy:`23`,r:`10`,fill:e,fillOpacity:.25}),(0,Z.jsx)(`path`,{d:`M18 23 L18 16`,strokeWidth:1.8}),(0,Z.jsx)(`path`,{d:`M18 23 L12 26.5`,strokeWidth:1.8}),(0,Z.jsx)(`path`,{d:`M18 23 L24 26.5`,strokeWidth:1.8}),(0,Z.jsx)(`circle`,{cx:`18`,cy:`23`,r:`1.8`,fill:fT,stroke:`none`}),(0,Z.jsx)(`path`,{d:`M10 36 H26`})]})}function bT({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`rect`,{x:`7`,y:`9`,width:`26`,height:`25`,rx:`3`}),(0,Z.jsx)(`path`,{d:`M8.5 21 Q12 18.5 15.5 21 T22.5 21 T29.5 21 L31.5 21 V29.5 Q31.5 32.5 28.5 32.5 H11.5 Q8.5 32.5 8.5 29.5 Z`,fill:e,fillOpacity:.6,stroke:`none`}),(0,Z.jsx)(`path`,{d:`M8.5 21 Q12 18.5 15.5 21 T22.5 21 T29.5 21 L31.5 21`,stroke:e,strokeWidth:1.8})]})}function xT({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`rect`,{x:`16`,y:`5`,width:`8`,height:`28`,rx:`2`,fill:e,fillOpacity:.25}),(0,Z.jsx)(`path`,{d:`M16 12 L10 9.5 V15 L16 16 Z`,fill:e,fillOpacity:.4}),(0,Z.jsx)(`path`,{d:`M24 19 L30 16.5 V22 L24 23 Z`,fill:e,fillOpacity:.4}),(0,Z.jsx)(`path`,{d:`M16 26 L10 23.5 V29 L16 30 Z`,fill:e,fillOpacity:.4}),(0,Z.jsx)(`path`,{d:`M10 9.5 Q7 7 7.5 4.5 Q11 5 11.5 8.5`,fill:pT,stroke:pT,strokeWidth:1.2}),(0,Z.jsx)(`path`,{d:`M30 16.5 Q33 14 32.5 11.5 Q29 12 28.5 15.5`,fill:pT,stroke:pT,strokeWidth:1.2}),(0,Z.jsx)(`path`,{d:`M10 23.5 Q7 21 7.5 18.5 Q11 19 11.5 22.5`,fill:pT,stroke:pT,strokeWidth:1.2}),(0,Z.jsx)(`rect`,{x:`12`,y:`33`,width:`16`,height:`3.5`,rx:`1.5`,fill:e,fillOpacity:.4})]})}function ST({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`path`,{d:`M6 21 L14 14 H34 L26 21 Z`,fill:e,fillOpacity:.25}),(0,Z.jsx)(`path`,{d:`M6 21 H26 V28 H6 Z`,fill:e,fillOpacity:.45}),(0,Z.jsx)(`path`,{d:`M26 21 L34 14 V21 L26 28 Z`,fill:e,fillOpacity:.35}),(0,Z.jsx)(`path`,{d:`M12 18.5 Q14 17 16 18.5`,strokeWidth:1.4,strokeOpacity:.8}),(0,Z.jsx)(`path`,{d:`M20 17.5 Q22 16 24 17.5`,strokeWidth:1.4,strokeOpacity:.8})]})}function CT({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`rect`,{x:`8`,y:`6`,width:`24`,height:`28`,rx:`2`,fill:e,fillOpacity:.2}),[12.5,20.5,28.5].map(t=>[13,23].map(n=>(0,Z.jsx)(`path`,{d:`M${n} ${t} q2 2.5 4 0`,stroke:e,strokeWidth:1.8,fill:`none`},`${n}-${t}`))),(0,Z.jsx)(`path`,{d:`M14 11 q1 -2.5 3 -3`,stroke:pT,strokeWidth:1.4}),(0,Z.jsx)(`path`,{d:`M24 19 q1 -2.5 3 -3`,stroke:pT,strokeWidth:1.4}),(0,Z.jsx)(`path`,{d:`M14 27 q1 -2.5 3 -3`,stroke:pT,strokeWidth:1.4})]})}function wT({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`rect`,{x:`7`,y:`7`,width:`26`,height:`26`,rx:`2`}),(0,Z.jsxs)(`g`,{stroke:e,strokeWidth:1.6,children:[(0,Z.jsx)(`path`,{d:`M7 21 L21 7`}),(0,Z.jsx)(`path`,{d:`M7 33 L33 7`}),(0,Z.jsx)(`path`,{d:`M19 33 L33 19`}),(0,Z.jsx)(`path`,{d:`M19 7 L33 21`}),(0,Z.jsx)(`path`,{d:`M7 7 L33 33`}),(0,Z.jsx)(`path`,{d:`M7 19 L21 33`})]})]})}function TT({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`path`,{d:`M11 19 H29 L25.5 33 H14.5 Z`,fill:e,fillOpacity:.35}),(0,Z.jsx)(`path`,{d:`M14 22 L17 30 M19 22 L20 30 M24 22 L22 30`,strokeWidth:1.3,strokeOpacity:.7}),(0,Z.jsx)(`rect`,{x:`8.5`,y:`15.5`,width:`23`,height:`4`,rx:`1.5`,fill:e,fillOpacity:.55}),(0,Z.jsx)(`path`,{d:`M20 15 V8`,stroke:pT}),(0,Z.jsx)(`path`,{d:`M20 10 C16.5 10 14.5 7.5 14.5 4.5 C18 4.5 20 7 20 10 Z`,fill:pT,stroke:pT,strokeWidth:1}),(0,Z.jsx)(`path`,{d:`M20 10 C23.5 10 25.5 7.5 25.5 4.5 C22 4.5 20 7 20 10 Z`,fill:pT,stroke:pT,strokeWidth:1})]})}function ET({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`path`,{d:`M20 17 V10`,stroke:e,strokeWidth:1.8}),(0,Z.jsx)(`path`,{d:`M15.5 18.5 L10.5 12.5`,stroke:e,strokeWidth:1.8}),(0,Z.jsx)(`path`,{d:`M24.5 18.5 L29.5 12.5`,stroke:e,strokeWidth:1.8}),(0,Z.jsx)(`circle`,{cx:`20`,cy:`7.5`,r:`1.6`,fill:e,stroke:`none`}),(0,Z.jsx)(`circle`,{cx:`9`,cy:`10.5`,r:`1.6`,fill:e,stroke:`none`}),(0,Z.jsx)(`circle`,{cx:`31`,cy:`10.5`,r:`1.6`,fill:e,stroke:`none`}),(0,Z.jsx)(`rect`,{x:`17.5`,y:`20`,width:`5`,height:`5`,rx:`1`,fill:e,fillOpacity:.5}),(0,Z.jsx)(`path`,{d:`M14 25 H26 L24 32 H16 Z`,fill:e,fillOpacity:.3}),(0,Z.jsx)(`path`,{d:`M12 35 H28`})]})}function DT({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`path`,{d:`M7 9 H33 L24 21 V29 L16 26 V21 Z`,fill:e,fillOpacity:.3}),(0,Z.jsx)(`path`,{d:`M14 12.5 V16`,strokeWidth:1.5,strokeOpacity:.8}),(0,Z.jsx)(`path`,{d:`M20 12.5 V19.5`,strokeWidth:1.5,strokeOpacity:.8}),(0,Z.jsx)(`path`,{d:`M26 12.5 V16`,strokeWidth:1.5,strokeOpacity:.8}),(0,Z.jsx)(`path`,{d:`M20 31.5 C18 34.5 18.4 36.8 20 36.8 C21.6 36.8 22 34.5 20 31.5 Z`,fill:e,stroke:`none`})]})}function OT({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`path`,{d:`M7 33 V10 L12 6 H28 L33 10 V33`,fill:e,fillOpacity:.18}),(0,Z.jsx)(`path`,{d:`M12 6 V33 M28 6 V33 M7 15 H33`,stroke:e,strokeWidth:1.6}),(0,Z.jsx)(`path`,{d:`M20 15 V33`,strokeWidth:1.4,strokeOpacity:.7})]})}function kT({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`circle`,{cx:`20`,cy:`20`,r:`11`,fill:e,fillOpacity:.25}),(0,Z.jsx)(`circle`,{cx:`20`,cy:`20`,r:`4`,fill:e,fillOpacity:.6}),(0,Z.jsx)(`path`,{d:`M20 9 C25 11 27 15 25 20`,stroke:e}),(0,Z.jsx)(`path`,{d:`M31 20 C29 25 25 27 20 25`,stroke:e}),(0,Z.jsx)(`path`,{d:`M20 31 C15 29 13 25 15 20`,stroke:e}),(0,Z.jsx)(`path`,{d:`M9 20 C11 15 15 13 20 15`,stroke:e})]})}function AT({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`circle`,{cx:`20`,cy:`15`,r:`8`,fill:e,fillOpacity:.18}),(0,Z.jsx)(`path`,{d:`M20 10 C23 11 24.5 13 23.5 16`,stroke:e}),(0,Z.jsx)(`path`,{d:`M25 15 C24 18 22 19.5 19 18.5`,stroke:e}),(0,Z.jsx)(`path`,{d:`M20 20 C17 19 15.5 17 16.5 14`,stroke:e}),(0,Z.jsx)(`path`,{d:`M20 23 V34`,stroke:e}),(0,Z.jsx)(`path`,{d:`M14 34 H26`,stroke:e})]})}function jT({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`rect`,{x:`8`,y:`9`,width:`24`,height:`8`,rx:`2`,fill:e,fillOpacity:.4}),(0,Z.jsx)(`path`,{d:`M12 9 L15 5 M28 9 L25 5`}),(0,Z.jsx)(`path`,{d:`M12 21 L10 27 M18 21 L18 29 M24 21 L26 27 M30 21 L32 27`,stroke:e})]})}function MT({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`rect`,{x:`14`,y:`8`,width:`12`,height:`24`,rx:`4`,fill:e,fillOpacity:.25}),(0,Z.jsx)(`rect`,{x:`17`,y:`5`,width:`6`,height:`4`,rx:`1.5`,fill:e,fillOpacity:.5}),(0,Z.jsx)(`path`,{d:`M23 7 H28`}),(0,Z.jsx)(`text`,{x:`20`,y:`23`,textAnchor:`middle`,fontSize:`7`,fill:fT,stroke:`none`,children:`CO2`})]})}function NT({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`rect`,{x:`9`,y:`9`,width:`22`,height:`22`,rx:`5`,fill:e,fillOpacity:.4}),(0,Z.jsx)(`circle`,{cx:`20`,cy:`20`,r:`3`,fill:e,stroke:`none`})]})}function PT({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`rect`,{x:`8`,y:`14`,width:`24`,height:`16`,rx:`3`,fill:e,fillOpacity:.25}),(0,Z.jsx)(`circle`,{cx:`12`,cy:`32`,r:`2`,fill:e,fillOpacity:.6}),(0,Z.jsx)(`circle`,{cx:`28`,cy:`32`,r:`2`,fill:e,fillOpacity:.6}),(0,Z.jsx)(`rect`,{x:`30`,y:`19`,width:`4`,height:`4`,fill:fT}),(0,Z.jsx)(`circle`,{cx:`16`,cy:`22`,r:`3`,fill:e,fillOpacity:.4}),(0,Z.jsx)(`line`,{x1:`16`,y1:`22`,x2:`18`,y2:`20`,stroke:fT,strokeWidth:1.5})]})}var FT={pipe:hT,elbow:gT,tee:_T,valve:vT,pump:yT,reservoir:bT,tower:xT,tray:ST,wallPanel:CT,lattice:wT,netPot:TT,emitter:ET,drain:DT,growTent:OT,inlineFan:kT,circulationFan:AT,growLight:jT,co2Tank:MT,airCompressor:PT,reducingTee:IT,reducingElbow:LT,bulkhead:RT,waterChiller:zT,reverseOsmosis:BT};function IT({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`path`,{d:`M 6,18 L 34,18`,stroke:e,strokeWidth:8,strokeLinecap:`round`}),(0,Z.jsx)(`path`,{d:`M 6,18 L 34,18`,stroke:fT,strokeWidth:1.5}),(0,Z.jsx)(`path`,{d:`M 20,18 L 20,30`,stroke:e,strokeWidth:4.5,strokeLinecap:`round`}),(0,Z.jsx)(`path`,{d:`M 20,18 L 20,30`,stroke:fT,strokeWidth:1.2})]})}function LT({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`path`,{d:`M 8,28 A 12,12 0 0,1 28,8`,fill:`none`,stroke:e,strokeWidth:7,strokeLinecap:`round`}),(0,Z.jsx)(`path`,{d:`M 8,28 A 12,12 0 0,1 28,8`,fill:`none`,stroke:fT,strokeWidth:1.5}),(0,Z.jsx)(`line`,{x1:`8`,y1:`28`,x2:`12`,y2:`28`,stroke:fT,strokeWidth:1.5}),(0,Z.jsx)(`line`,{x1:`28`,y1:`8`,x2:`28`,y2:`12`,stroke:fT,strokeWidth:1.5})]})}function RT({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`rect`,{x:`18`,y:`6`,width:`4`,height:`28`,fill:e,fillOpacity:.4,stroke:e,strokeWidth:1.2}),(0,Z.jsx)(`rect`,{x:`10`,y:`14`,width:`20`,height:`12`,fill:e,fillOpacity:.25,rx:`1`}),(0,Z.jsx)(`rect`,{x:`12`,y:`16`,width:`16`,height:`8`,fill:`none`,stroke:fT,strokeWidth:1.5})]})}function zT({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`rect`,{x:`8`,y:`12`,width:`24`,height:`22`,rx:`2`,fill:e,fillOpacity:.25}),(0,Z.jsx)(`rect`,{x:`12`,y:`7`,width:`3`,height:`5`,fill:e}),(0,Z.jsx)(`rect`,{x:`25`,y:`7`,width:`3`,height:`5`,fill:e}),(0,Z.jsx)(`rect`,{x:`14`,y:`17`,width:`12`,height:`6`,fill:`#09090b`,rx:`1`}),(0,Z.jsx)(`circle`,{cx:`20`,cy:`20`,r:`1.5`,fill:`#22c55e`}),(0,Z.jsx)(`line`,{x1:`12`,y1:`27`,x2:`28`,y2:`27`,stroke:fT,strokeWidth:1.2}),(0,Z.jsx)(`line`,{x1:`12`,y1:`30`,x2:`28`,y2:`30`,stroke:fT,strokeWidth:1.2})]})}function BT({color:e,className:t}){return(0,Z.jsxs)(mT,{className:t,children:[(0,Z.jsx)(`rect`,{x:`4`,y:`18`,width:`32`,height:`4`,rx:`1`,fill:e,fillOpacity:.4}),(0,Z.jsx)(`rect`,{x:`11`,y:`10`,width:`18`,height:`20`,rx:`3`,fill:e,fillOpacity:.25}),(0,Z.jsx)(`line`,{x1:`11`,y1:`15`,x2:`29`,y2:`15`,stroke:fT,strokeWidth:1.5}),(0,Z.jsx)(`line`,{x1:`11`,y1:`20`,x2:`29`,y2:`20`,stroke:fT,strokeWidth:1.5}),(0,Z.jsx)(`line`,{x1:`11`,y1:`25`,x2:`29`,y2:`25`,stroke:fT,strokeWidth:1.5})]})}function VT({type:e,color:t,className:n}){return(0,Z.jsx)(FT[e]??NT,{color:t??Yx[e]?.color??`#71717a`,className:n})}function HT(){let e=Q(e=>e.parts),t=Q(e=>e.placingType),n=Q(e=>e.setPlacingType),r=Q(e=>e.addPart),i=Q(e=>e.updatePart),a=Q(e=>e.setSelected),o=Q(e=>e.toggleSelected),[s,c]=(0,v.useState)(``),l=s.toLowerCase(),u=e=>Yx[e].label.toLowerCase().includes(l),d=l?rT.filter(u):rT,f=l?aT.filter(e=>e.label.toLowerCase().includes(l)):aT,p=Xx.map(e=>({...e,types:l?e.types.filter(u):e.types})).filter(e=>e.types.length>0),m=t=>{n(null);let s=uT(t,lT(Object.values(e))).map(e=>{let t=r(e.type,e.position,{snap:!1});return i(t,{rotation:e.rotation,params:e.params,label:e.label,color:e.color}),t});a(s[0]??null),s.slice(1).forEach(o)};return(0,Z.jsxs)(`aside`,{className:`flex w-56 shrink-0 flex-col border-r border-zinc-800 bg-zinc-950/80 backdrop-blur`,children:[(0,Z.jsxs)(`div`,{className:`border-b border-zinc-800 px-4 py-3`,children:[(0,Z.jsx)(`h2`,{className:`text-xs font-semibold tracking-widest text-zinc-400 uppercase`,children:`Parts Library`}),(0,Z.jsx)(`p`,{className:`mt-1 text-[11px] leading-snug text-zinc-600`,children:`Click then place in scene, or drag onto the canvas. Shift-click to stamp copies.`})]}),(0,Z.jsx)(`div`,{className:`px-3 pt-2`,children:(0,Z.jsxs)(`div`,{className:`relative`,children:[(0,Z.jsx)(`input`,{type:`text`,value:s,onChange:e=>c(e.target.value),placeholder:`Search parts…`,className:`w-full rounded-md border border-zinc-800 bg-zinc-900 px-2.5 py-1.5 text-xs text-zinc-200 placeholder:text-zinc-600 outline-none focus:border-zinc-600 focus:ring-1 focus:ring-zinc-700`}),s&&(0,Z.jsx)(`button`,{onClick:()=>c(``),className:`absolute right-1.5 top-1/2 -translate-y-1/2 rounded px-1 text-xs text-zinc-500 hover:text-zinc-300`,children:`×`})]})}),(0,Z.jsxs)(`div`,{className:`flex-1 overflow-y-auto px-3 py-2`,children:[d.length>0&&(0,Z.jsxs)(`div`,{className:`mb-4`,children:[(0,Z.jsx)(`h3`,{className:`px-1 py-1.5 text-[10px] font-bold tracking-wider text-zinc-500 uppercase`,children:`Tool Belt`}),(0,Z.jsx)(`div`,{className:`grid grid-cols-3 gap-1.5`,children:d.map((e,r)=>(0,Z.jsx)(WT,{type:e,active:t===e,badge:l?void 0:`${r+1}`,compact:!0,onClick:()=>n(t===e?null:e)},`hotbar-${e}`))})]}),f.length>0&&(0,Z.jsxs)(`div`,{className:`mb-4`,children:[(0,Z.jsx)(`h3`,{className:`px-1 py-1.5 text-[10px] font-bold tracking-wider text-zinc-500 uppercase`,children:`Quick Builds`}),(0,Z.jsx)(`div`,{className:`grid gap-1.5`,children:f.map(e=>(0,Z.jsx)(UT,{label:e.label,description:e.description,onClick:()=>m(e.id)},e.id))})]}),p.map(e=>(0,Z.jsxs)(`div`,{className:`mb-3`,children:[(0,Z.jsx)(`h3`,{className:`px-1 py-1.5 text-[10px] font-bold tracking-wider text-zinc-500 uppercase`,children:e.name}),(0,Z.jsx)(`div`,{className:`grid grid-cols-2 gap-1.5`,children:e.types.map(e=>(0,Z.jsx)(WT,{type:e,active:t===e,onClick:()=>n(t===e?null:e)},e))})]},e.name))]})]})}function UT({label:e,description:t,onClick:n}){return(0,Z.jsxs)(`button`,{onClick:n,title:t,className:`flex items-center justify-between gap-2 rounded-lg border border-zinc-800 bg-zinc-900/60 px-3 py-2 text-left text-zinc-200 transition hover:border-emerald-500/60 hover:bg-emerald-500/10 hover:text-emerald-100`,children:[(0,Z.jsxs)(`span`,{className:`min-w-0`,children:[(0,Z.jsx)(`span`,{className:`block text-[12px] leading-tight font-semibold`,children:e}),(0,Z.jsx)(`span`,{className:`mt-0.5 block text-[10px] leading-snug text-zinc-500`,children:t})]}),(0,Z.jsx)(`span`,{className:`shrink-0 text-sm text-emerald-400`,children:`+`})]})}function WT({type:e,active:t,badge:n,compact:r,onClick:i}){let a=Yx[e];return(0,Z.jsxs)(`button`,{draggable:!0,onDragStart:t=>{t.dataTransfer.setData(`application/x-hydro-part`,e),t.dataTransfer.effectAllowed=`copy`},onClick:i,title:t?`${a.description} — click again to cancel${n?` (${n})`:``}`:`${a.description}${n?` (${n})`:``}`,className:`group relative flex flex-col items-center gap-1 rounded-lg border px-1.5 text-center transition - ${t?`border-sky-400 bg-sky-500/15 text-sky-300 shadow-[0_0_10px_-2px_rgba(56,189,248,0.6)] ring-1 ring-sky-400/40`:`border-zinc-800 bg-zinc-900/60 text-zinc-300 hover:border-zinc-600 hover:bg-zinc-800/80`} ${r?`py-1.5`:`py-2`}`,children:[n&&(0,Z.jsx)(`span`,{className:`absolute top-1 left-1 rounded bg-zinc-950/90 px-1 py-0.5 text-[9px] font-bold leading-none text-zinc-400 ring-1 ring-zinc-800`,children:n}),(0,Z.jsx)(VT,{type:e,className:`${r?`h-7 w-7`:`h-9 w-9`} transition-transform duration-150 group-hover:scale-110 ${t?`scale-110 drop-shadow-[0_0_4px_rgba(56,189,248,0.5)]`:``}`}),(0,Z.jsx)(`span`,{className:`w-full font-medium break-words ${r?`text-[10px]`:`text-[11px] leading-tight`}`,children:a.label}),t&&(0,Z.jsx)(`span`,{className:`text-[9px] font-semibold tracking-wider text-sky-400 uppercase`,children:`Placing…`})]})}function GT(e,t){let n=e.params.width??0,r=e.params.depth??0,i=e.params.height??0,[a,o,s]=e.position,[c,l,u]=t.position;return c>=a-n/2&&c<=a+n/2&&u>=s-r/2&&u<=s+r/2&&l>=o&&l<=o+i}function KT(e){let t=Object.values(e);return t.filter(e=>e.type===`growTent`).map(e=>{let n=t.filter(t=>t.id!==e.id&>(e,t)),r=n.filter(e=>e.type===`inlineFan`&&(e.params.exhaust??1)>0).reduce((e,t)=>e+(t.params.cfm??0),0),i=n.filter(e=>e.type===`circulationFan`).reduce((e,t)=>e+(t.params.cfm??0),0),a=n.filter(e=>e.type===`growLight`).reduce((e,t)=>e+(t.params.watts??0),0),o=n.filter(e=>e.type===`co2Tank`),s=o.reduce((e,t)=>e+(t.params.regulatorCfh??0),0),c=(e.params.width??0)*(e.params.depth??0)*(e.params.height??0),l=c>0?r/c:0,u=(e.params.width??0)*(e.params.depth??0),d=u>0?a*2/u:0,f=n.filter(e=>e.type===`growLight`),p=u>0&&f.length>0?f.reduce((e,t)=>{let n=t.params.watts??0,r=t.params.photoperiod??18;return e+n*2/u*r*.0036},0):0,m=f.reduce((e,t)=>{let n=t.params.photoperiod??18,r=t.params.watts??0;return e+(n>0?r:0)},0),h=75+.01*m,g=e.params.humidity??60,_=(h-32)*5/9,v=.61078*Math.exp(17.27*_/(_+237.3)),y=v*(1-g/100),b=(e.params.sealed??0)>0,x=m>0,S=400;b&&x?S=o.length===0?150:1200:o.length>0&&(S=1200);let C=m*3.412,w=Math.max(.1,Math.min(1,y/1.2)),T=m*.032*w,E=T/24*1060,D=.01352*(g/100*v)/(_+273.15),O=.01352*(.61078*Math.exp(215/9*17.27/261.1888888888889)*.5)/297.0388888888889,k=0;!b&&r>0&&(k=Math.max(0,r*1381*(D-O)));let A=Math.max(0,T-k),j=0;!b&&r>0&&(j=r*1.08*(h-75));let M=A/24*1200,N=C-E-j+M,P=Math.max(0,N*1.15);return{roomId:e.id,label:e.label??`Grow room`,sealed:b,volumeFt3:c,exhaustCfm:r,circulationCfm:i,lightWatts:a,co2TankCount:o.length,co2Cfh:s,airChangesPerMinute:l,airChangesPerHour:l*60,roomPPFD:d,roomDLI:p,roomTempF:h,roomRH:g,roomVPD:y,roomCo2:S,sensibleHeatGainsBtuHr:C,latentCoolingBtuHr:E,acSizingBtuHr:P,dehumidifierPintsDay:A}})}var qT=[`#b8bfc9`,`#64748b`,`#38bdf8`,`#3d7bfa`,`#34d399`,`#3b7a57`,`#fbbf24`,`#f97316`,`#e0564f`,`#a78bfa`];function JT({ids:e}){let t=Q(e=>e.applyColor),n=Q(t=>{let n=e.length?t.parts[e[0]]:void 0;return n?n.color??Yx[n.type].color:`#888888`});return(0,Z.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Z.jsx)(`div`,{className:`grid grid-cols-5 gap-1.5`,children:qT.map(r=>(0,Z.jsx)(`button`,{title:r,onClick:()=>t(e,r),className:`h-6 w-full rounded-md ring-1 transition hover:scale-110 ${n.toLowerCase()===r?`ring-2 ring-white`:`ring-black/40`}`,style:{backgroundColor:r}},r))}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-1.5`,children:[(0,Z.jsxs)(`label`,{className:`relative flex h-6 flex-1 cursor-pointer items-center justify-center gap-1 overflow-hidden rounded-md border border-zinc-700 bg-zinc-800 text-[10px] font-medium text-zinc-300 hover:bg-zinc-700`,title:`Pick a custom color`,children:[(0,Z.jsx)(`span`,{className:`h-3 w-3 rounded-sm ring-1 ring-black/40`,style:{backgroundColor:n}}),`Custom`,(0,Z.jsx)(`input`,{type:`color`,value:n,onChange:n=>t(e,n.target.value),className:`absolute inset-0 cursor-pointer opacity-0`})]}),(0,Z.jsx)(`button`,{onClick:()=>t(e,void 0),title:`Reset to the catalog color`,className:`h-6 rounded-md border border-zinc-700 bg-zinc-800 px-2 text-[10px] font-medium text-zinc-300 hover:bg-zinc-700`,children:`Reset`})]})]})}function YT(){let e=Q(e=>e.colorPopover),t=Q(e=>e.selectedIds),n=Q(e=>e.closeColorPopover),r=(0,v.useRef)(null);return(0,v.useEffect)(()=>{if(!e)return;let t=e=>{r.current&&!r.current.contains(e.target)&&n()};return window.addEventListener(`pointerdown`,t,!0),()=>window.removeEventListener(`pointerdown`,t,!0)},[e,n]),!e||!t.length?null:(0,Z.jsxs)(`div`,{ref:r,className:`fixed z-50 w-[188px] rounded-xl border border-zinc-700 bg-zinc-900/95 p-2.5 shadow-2xl backdrop-blur`,style:{left:Math.max(8,Math.min(e.x,window.innerWidth-196)),top:Math.max(8,Math.min(e.y+10,window.innerHeight-150))},children:[(0,Z.jsxs)(`div`,{className:`mb-1.5 text-[10px] font-bold tracking-wider text-zinc-500 uppercase`,children:[`Color · `,t.length,` part`,t.length>1?`s`:``]}),(0,Z.jsx)(JT,{ids:t})]})}var XT=e=>Math.round(e*180/Math.PI),ZT=e=>e*Math.PI/180;function QT(){let e=Q(e=>e.selectedIds);return(0,Z.jsxs)(`aside`,{className:`flex w-64 shrink-0 flex-col border-l border-zinc-800 bg-zinc-950/80 backdrop-blur`,children:[(0,Z.jsx)(`div`,{className:`border-b border-zinc-800 px-4 py-3`,children:(0,Z.jsxs)(`h2`,{className:`text-xs font-semibold tracking-widest text-zinc-400 uppercase`,children:[`Inspector`,e.length>1&&(0,Z.jsxs)(`span`,{className:`ml-2 rounded-full bg-sky-500/15 px-2 py-0.5 text-[10px] font-bold text-sky-300`,children:[e.length,` selected`]})]})}),e.length===0?(0,Z.jsx)($T,{}):e.length===1?(0,Z.jsx)(uE,{partId:e[0]}):(0,Z.jsx)(tE,{ids:e})]})}function $T(){let e=Q(e=>e.growthStage),t=Q(e=>e.setGrowthStage);return(0,Z.jsxs)(`div`,{className:`px-4 py-6 text-xs leading-relaxed text-zinc-600 space-y-4`,children:[(0,Z.jsxs)(`div`,{className:`rounded-lg border border-zinc-800 bg-zinc-900/30 p-3`,children:[(0,Z.jsx)(`h3`,{className:`mb-1.5 text-[10px] font-bold tracking-wider text-zinc-500 uppercase`,children:`Crop Growth Stage`}),(0,Z.jsxs)(`select`,{value:e,onChange:e=>t(e.target.value),className:`w-full rounded-md border border-zinc-800 bg-zinc-900 px-2 py-1.5 text-xs text-zinc-200 outline-none focus:border-sky-600 cursor-pointer`,children:[(0,Z.jsx)(`option`,{value:`seedling`,children:`Seedling`}),(0,Z.jsx)(`option`,{value:`vegetative`,children:`Vegetative`}),(0,Z.jsx)(`option`,{value:`flowering`,children:`Flowering`})]})]}),(0,Z.jsxs)(`div`,{children:[`Select a part to edit its properties.`,(0,Z.jsxs)(`ul`,{className:`mt-4 space-y-1.5 text-[11px] text-zinc-700`,children:[(0,Z.jsxs)(`li`,{children:[(0,Z.jsx)(eE,{children:`Click`}),` select · drag to move`]}),(0,Z.jsxs)(`li`,{children:[(0,Z.jsx)(eE,{children:`⇧Click`}),` add/remove from selection`]}),(0,Z.jsxs)(`li`,{children:[(0,Z.jsx)(eE,{children:`⌘Click`}),` change color`]}),(0,Z.jsxs)(`li`,{children:[`Drag `,(0,Z.jsx)(`span`,{className:`text-sky-600`,children:`connector dots`}),` to snap pipes`]}),(0,Z.jsxs)(`li`,{children:[(0,Z.jsx)(eE,{children:`⇧Drag`}),` move vertically (3D view)`]}),(0,Z.jsxs)(`li`,{children:[(0,Z.jsx)(eE,{children:`⌥Drag`}),` clone while dragging`]}),(0,Z.jsxs)(`li`,{children:[(0,Z.jsx)(eE,{children:`Space`}),` play / pause water`]}),(0,Z.jsxs)(`li`,{children:[(0,Z.jsx)(eE,{children:`R`}),` rotate 90° \xA0 `,(0,Z.jsx)(eE,{children:`Q`}),`/`,(0,Z.jsx)(eE,{children:`E`}),` lower / raise`]}),(0,Z.jsxs)(`li`,{children:[(0,Z.jsx)(eE,{children:`D`}),` duplicate \xA0 `,(0,Z.jsx)(eE,{children:`⌫`}),` delete`]}),(0,Z.jsxs)(`li`,{children:[(0,Z.jsx)(eE,{children:`⌘Z`}),` undo \xA0 `,(0,Z.jsx)(eE,{children:`⇧⌘Z`}),` redo`]}),(0,Z.jsxs)(`li`,{children:[(0,Z.jsx)(eE,{children:`Esc`}),` deselect / cancel`]})]})]})]})}function eE({children:e}){return(0,Z.jsx)(`kbd`,{className:`rounded border border-zinc-700 bg-zinc-800 px-1.5 py-0.5 font-mono text-[10px] text-zinc-300`,children:e})}function tE({ids:e}){let t=Q(e=>e.parts),n=Q(e=>e.removeParts),r=Q(e=>e.duplicateParts),i=new Map;for(let n of e){let e=t[n];if(!e)continue;let r=Yx[e.type].label;i.set(r,(i.get(r)??0)+1)}return(0,Z.jsxs)(`div`,{className:`flex-1 space-y-4 overflow-y-auto px-4 py-3`,children:[(0,Z.jsxs)(dE,{title:`Selection`,children:[(0,Z.jsx)(`ul`,{className:`space-y-1`,children:[...i.entries()].map(([e,t])=>(0,Z.jsxs)(`li`,{className:`flex justify-between text-xs text-zinc-300`,children:[(0,Z.jsx)(`span`,{children:e}),(0,Z.jsxs)(`span`,{className:`font-mono text-zinc-500`,children:[`× `,t]})]},e))}),(0,Z.jsx)(`p`,{className:`mt-2 text-[10px] leading-relaxed text-zinc-600`,children:`Drag any selected part (or the gizmo) to move the whole group.`})]}),(0,Z.jsx)(dE,{title:`Color`,children:(0,Z.jsx)(JT,{ids:e})}),(0,Z.jsxs)(`div`,{className:`flex gap-2 pt-1`,children:[(0,Z.jsx)(`button`,{onClick:()=>r(e),title:`Duplicate the whole selection (D)`,className:`flex-1 rounded-md border border-zinc-700 bg-zinc-800 px-2 py-1.5 text-xs font-medium text-zinc-200 hover:bg-zinc-700`,children:`Duplicate`}),(0,Z.jsx)(`button`,{onClick:()=>n(e),title:`Delete every selected part (⌫)`,className:`flex-1 rounded-md border border-rose-900 bg-rose-950 px-2 py-1.5 text-xs font-medium text-rose-300 hover:bg-rose-900`,children:`Delete`})]})]})}var nE=new Set([`gph`,`maxHeadFt`]),rE=new Set([`gph`,`frequency`]),iE=new Set([`ph`,`ec`]);function aE({part:e}){let t=Q(e=>e.setParam),n=YS(),r=(0,v.useRef)(null),[i,a]=(0,v.useState)(!1);(0,v.useEffect)(()=>{let t=t=>{t.detail===e.id&&(r.current?.scrollIntoView({behavior:`smooth`,block:`nearest`}),a(!0),setTimeout(()=>a(!1),1e3))};return window.addEventListener(`hydro:flash-pump`,t),()=>window.removeEventListener(`hydro:flash-pump`,t)},[e.id]);let o=Yx.pump,s=(e.params.on??1)>0,c=n.pumps.find(t=>t.pumpId===e.id),l=e.params.gph??o.defaults.gph,u=e.params.maxHeadFt??o.defaults.maxHeadFt;return(0,Z.jsxs)(`div`,{ref:r,className:`rounded-lg border p-3 transition-all duration-300 ${i?`border-sky-400 bg-sky-950/60 ring-2 ring-sky-400/60`:`border-sky-900/70 bg-sky-950/30`}`,children:[(0,Z.jsxs)(`div`,{className:`mb-2 flex items-center justify-between`,children:[(0,Z.jsx)(`span`,{className:`text-[10px] font-bold tracking-wider text-sky-400 uppercase`,children:`Pump`}),(0,Z.jsx)(`button`,{onClick:()=>t(e.id,`on`,+!s),title:s?`Turn pump off`:`Turn pump on`,className:`relative h-6 w-12 rounded-full transition-colors ${s?`bg-emerald-500`:`bg-zinc-700`}`,children:(0,Z.jsx)(`span`,{className:`absolute top-0.5 grid h-5 w-5 place-items-center rounded-full bg-white text-[8px] font-black text-zinc-700 shadow transition-all ${s?`left-6`:`left-0.5`}`,children:s?`I`:`O`})})]}),(0,Z.jsxs)(`div`,{className:`mb-2 rounded-md bg-zinc-900/70 px-2.5 py-1.5`,children:[(0,Z.jsxs)(`div`,{className:`text-lg font-bold tabular-nums text-sky-300`,children:[c&&s?c.gph.toFixed(0):`0`,(0,Z.jsx)(`span`,{className:`ml-1 text-[10px] font-medium text-zinc-500`,children:`GPH delivered`})]}),(0,Z.jsx)(`div`,{className:`text-[10px] text-zinc-500 tabular-nums`,children:c?`head ${c.headFt.toFixed(1)} / ${c.maxHeadFt} ft`:`not connected to a reservoir`})]}),(0,Z.jsx)(lE,{label:`Rated flow`,unit:`GPH`,value:l,meta:o.params.gph,onChange:n=>t(e.id,`gph`,n)}),(0,Z.jsx)(lE,{label:`Max head`,unit:`ft`,value:u,meta:o.params.maxHeadFt,onChange:n=>t(e.id,`maxHeadFt`,n)})]})}function oE({part:e}){let t=Q(e=>e.setParam),n=Q(e=>e.parts),r=(0,v.useRef)(null),[i,a]=(0,v.useState)(!1);(0,v.useEffect)(()=>{let t=t=>{t.detail===e.id&&(r.current?.scrollIntoView({behavior:`smooth`,block:`nearest`}),a(!0),setTimeout(()=>a(!1),1e3))};return window.addEventListener(`hydro:flash-airCompressor`,t),()=>window.removeEventListener(`hydro:flash-airCompressor`,t)},[e.id]);let o=Yx.airCompressor,s=(e.params.on??1)>0,c=e.params.gph??o.defaults.gph,l=e.params.frequency??o.defaults.frequency,u=(0,v.useMemo)(()=>{let t=null,r=1/0,i=e.position;for(let e of Object.values(n))if(e.type===`reservoir`){let n=Math.hypot(e.position[0]-i[0],e.position[1]-i[1],e.position[2]-i[2]);n{if(!u)return null;let e=0;for(let t of Object.values(n))if(t.type===`airCompressor`&&(t.params.on??1)>0){let r=null,i=1/0;for(let e of Object.values(n))if(e.type===`reservoir`){let n=Math.hypot(e.position[0]-t.position[0],e.position[1]-t.position[1],e.position[2]-t.position[2]);n0&&o>0){let t=e/o;s=5.5+3.7*(1-Math.exp(-t*2))}return{volGal:o,totalAerationGph:e,tdo:s}},[n,u]);return(0,Z.jsxs)(`div`,{ref:r,className:`rounded-lg border p-3 transition-all duration-300 ${i?`border-sky-400 bg-sky-950/60 ring-2 ring-sky-400/60`:`border-sky-900/70 bg-sky-950/30`}`,children:[(0,Z.jsxs)(`div`,{className:`mb-2 flex items-center justify-between`,children:[(0,Z.jsx)(`span`,{className:`text-[10px] font-bold tracking-wider text-sky-400 uppercase`,children:`Air Compressor`}),(0,Z.jsx)(`button`,{onClick:()=>t(e.id,`on`,+!s),title:s?`Turn compressor off`:`Turn compressor on`,className:`relative h-6 w-12 rounded-full transition-colors ${s?`bg-emerald-500`:`bg-zinc-700`}`,children:(0,Z.jsx)(`span`,{className:`absolute top-0.5 grid h-5 w-5 place-items-center rounded-full bg-white text-[8px] font-black text-zinc-700 shadow transition-all ${s?`left-6`:`left-0.5`}`,children:s?`I`:`O`})})]}),(0,Z.jsxs)(`div`,{className:`mb-3 rounded-md bg-zinc-900/70 px-2.5 py-1.5 space-y-1`,children:[(0,Z.jsx)(`div`,{className:`text-[10px] font-semibold text-zinc-400`,children:`Target Reservoir:`}),u?(0,Z.jsxs)(`div`,{children:[(0,Z.jsxs)(`div`,{className:`flex justify-between items-center text-xs text-zinc-200`,children:[(0,Z.jsx)(`span`,{className:`font-medium`,children:u.label||`Reservoir #${u.id}`}),(0,Z.jsxs)(`span`,{className:`text-[10px] font-mono text-zinc-500`,children:[Math.hypot(u.position[0]-e.position[0],u.position[2]-e.position[2]).toFixed(1),` ft away`]})]}),d&&(0,Z.jsxs)(`div`,{className:`mt-1.5 pt-1.5 border-t border-zinc-800/60 space-y-1.5`,children:[(0,Z.jsxs)(`div`,{className:`flex justify-between items-center`,children:[(0,Z.jsx)(`span`,{className:`text-[10px] text-zinc-500`,children:`Dissolved O₂:`}),(0,Z.jsxs)(`span`,{className:`rounded px-1.5 py-0.5 text-[10px] font-bold ${d.tdo>=8?`bg-emerald-500/10 text-emerald-400 border border-emerald-500/20`:d.tdo>=7?`bg-sky-500/10 text-sky-400 border border-sky-500/20`:`bg-amber-500/10 text-amber-400 border border-amber-500/20`}`,children:[d.tdo.toFixed(1),` mg/L`]})]}),(0,Z.jsxs)(`div`,{className:`flex justify-between text-[9px] text-zinc-500`,children:[(0,Z.jsx)(`span`,{children:`Tank Volume:`}),(0,Z.jsxs)(`span`,{className:`font-mono text-zinc-300`,children:[d.volGal.toFixed(1),` Gal`]})]}),(0,Z.jsxs)(`div`,{className:`flex justify-between text-[9px] text-zinc-500`,children:[(0,Z.jsx)(`span`,{children:`Total Aeration:`}),(0,Z.jsxs)(`span`,{className:`font-mono text-zinc-300`,children:[d.totalAerationGph,` GPH`]})]})]})]}):(0,Z.jsx)(`div`,{className:`text-xs text-amber-400/80 font-medium`,children:`No reservoir in scene!`})]}),(0,Z.jsx)(lE,{label:`Air Flow`,unit:`GPH`,value:c,meta:o.params.gph,onChange:n=>t(e.id,`gph`,n)}),(0,Z.jsx)(lE,{label:`Bubble Frequency`,unit:`Hz`,value:l,meta:o.params.frequency,onChange:n=>t(e.id,`frequency`,n)})]})}function sE({part:e}){let t=Q(e=>e.parts),n=(0,v.useMemo)(()=>KT(t).find(t=>t.roomId===e.id),[t,e.id]);return n?(0,Z.jsxs)(`div`,{className:`rounded-lg border border-sky-900/50 bg-sky-950/20 p-3 space-y-3`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Z.jsx)(`span`,{className:`text-[10px] font-bold tracking-wider text-sky-400 uppercase`,children:`Room Simulation`}),(0,Z.jsxs)(`span`,{className:`font-mono text-xs text-sky-300`,children:[n.volumeFt3.toFixed(0),` ft³`]})]}),(0,Z.jsxs)(`div`,{className:`grid grid-cols-3 gap-2`,children:[(0,Z.jsxs)(`div`,{className:`rounded-md bg-zinc-900/80 p-2 text-center`,children:[(0,Z.jsx)(`div`,{className:`text-[9px] text-zinc-500 font-bold uppercase`,children:`VPD`}),(0,Z.jsxs)(`div`,{className:`mt-0.5 text-xs font-bold text-emerald-400`,children:[n.roomVPD.toFixed(2),(0,Z.jsx)(`span`,{className:`text-[8px] font-normal text-zinc-500 ml-0.5`,children:`kPa`})]})]}),(0,Z.jsxs)(`div`,{className:`rounded-md bg-zinc-900/80 p-2 text-center`,children:[(0,Z.jsx)(`div`,{className:`text-[9px] text-zinc-500 font-bold uppercase`,children:`DLI`}),(0,Z.jsx)(`div`,{className:`mt-0.5 text-xs font-bold text-amber-400`,children:n.roomDLI.toFixed(1)})]}),(0,Z.jsxs)(`div`,{className:`rounded-md bg-zinc-900/80 p-2 text-center`,children:[(0,Z.jsx)(`div`,{className:`text-[9px] text-zinc-500 font-bold uppercase`,children:`CO₂`}),(0,Z.jsxs)(`div`,{className:`mt-0.5 text-xs font-bold text-sky-400`,children:[n.roomCo2,(0,Z.jsx)(`span`,{className:`text-[8px] font-normal text-zinc-500 ml-0.5`,children:`PPM`})]})]})]}),(0,Z.jsxs)(`div`,{className:`text-[10px] text-zinc-400 space-y-1 pt-1.5 border-t border-zinc-800/60 font-mono`,children:[(0,Z.jsxs)(`div`,{className:`flex justify-between`,children:[(0,Z.jsx)(`span`,{children:`Est. Temp:`}),(0,Z.jsxs)(`span`,{className:`text-zinc-200`,children:[n.roomTempF.toFixed(1),`°F`]})]}),(0,Z.jsxs)(`div`,{className:`flex justify-between`,children:[(0,Z.jsx)(`span`,{children:`Est. RH:`}),(0,Z.jsxs)(`span`,{className:`text-zinc-200`,children:[n.roomRH,`%`]})]}),(0,Z.jsxs)(`div`,{className:`flex justify-between`,children:[(0,Z.jsx)(`span`,{children:`Room PPFD:`}),(0,Z.jsxs)(`span`,{className:`text-zinc-200`,children:[n.roomPPFD.toFixed(0),` μmol/m²/s`]})]}),(0,Z.jsxs)(`div`,{className:`flex justify-between`,children:[(0,Z.jsx)(`span`,{children:`AC Sizing:`}),(0,Z.jsxs)(`span`,{className:`text-zinc-300 font-semibold`,children:[Math.round(n.acSizingBtuHr),` BTU/hr`]})]}),(0,Z.jsxs)(`div`,{className:`flex justify-between`,children:[(0,Z.jsx)(`span`,{children:`Dehumidifier:`}),(0,Z.jsxs)(`span`,{className:`text-zinc-300 font-semibold`,children:[n.dehumidifierPintsDay.toFixed(1),` Pints/day`]})]}),(0,Z.jsxs)(`div`,{className:`flex justify-between`,children:[(0,Z.jsx)(`span`,{children:`Sensible Heat:`}),(0,Z.jsxs)(`span`,{className:`text-zinc-500`,children:[Math.round(n.sensibleHeatGainsBtuHr),` BTU/hr`]})]}),(0,Z.jsxs)(`div`,{className:`flex justify-between`,children:[(0,Z.jsx)(`span`,{children:`Latent Cooling:`}),(0,Z.jsxs)(`span`,{className:`text-emerald-500/80`,children:[Math.round(n.latentCoolingBtuHr),` BTU/hr`]})]})]})]}):null}function cE({part:e}){let t=Q(e=>e.setParam),n=Q(e=>e.parts),r=Q(e=>e.growthStage),i=YS(),a=(0,v.useMemo)(()=>nC(e,n),[e,n]),o=i.reservoirRuntime[e.id],{ecLow:s,ecHigh:c}=(0,v.useMemo)(()=>r===`seedling`?{ecLow:.4,ecHigh:.8}:r===`flowering`?{ecLow:1.5,ecHigh:2.2}:{ecLow:1,ecHigh:1.6},[r]),l=a.ecc;return(0,Z.jsxs)(`div`,{className:`rounded-lg border border-sky-900/50 bg-sky-950/20 p-3 space-y-3`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center justify-between`,children:[(0,Z.jsx)(`span`,{className:`text-[10px] font-bold tracking-wider text-sky-400 uppercase`,children:`Reservoir Health`}),(0,Z.jsxs)(`span`,{className:`font-mono text-xs ${o?.empty?`text-rose-300`:`text-sky-300`}`,children:[(o?.gallonsCurrent??a.volGal).toFixed(1),` Gal`]})]}),(0,Z.jsxs)(`div`,{className:`grid grid-cols-2 gap-2`,children:[(0,Z.jsxs)(`div`,{className:`rounded-md bg-zinc-900/80 p-2 text-center`,children:[(0,Z.jsx)(`div`,{className:`text-[9px] text-zinc-500 font-bold uppercase`,children:`Runtime`}),(0,Z.jsx)(`div`,{className:`mt-0.5 text-xs font-bold ${o?.empty?`text-rose-400`:o?.minutesRemaining===null?`text-emerald-400`:`text-amber-400`}`,children:o?o.minutesRemaining===null?`Stable`:o.empty?`Dry`:`${o.minutesRemaining.toFixed(1)} min`:`Stable`}),(0,Z.jsx)(`div`,{className:`text-[8px] text-zinc-600`,children:o?.minutesRemaining===null?`No net draw`:o?.empty?`Source exhausted`:`${o.netOutflowGph.toFixed(1)} GPH net draw`})]}),(0,Z.jsxs)(`div`,{className:`rounded-md bg-zinc-900/80 p-2 text-center`,children:[(0,Z.jsx)(`div`,{className:`text-[9px] text-zinc-500 font-bold uppercase`,children:`Volume`}),(0,Z.jsx)(`div`,{className:`mt-0.5 text-xs font-bold text-sky-300`,children:o?`${o.gallonsCurrent.toFixed(1)} / ${o.gallonsCapacity.toFixed(1)}`:`${a.volGal.toFixed(1)} / ${a.volGal.toFixed(1)}`}),(0,Z.jsx)(`div`,{className:`text-[8px] text-zinc-600`,children:`Gallons`})]})]}),(0,Z.jsxs)(`div`,{className:`grid grid-cols-3 gap-2`,children:[(0,Z.jsxs)(`div`,{className:`rounded-md bg-zinc-900/80 p-2 text-center`,children:[(0,Z.jsx)(`div`,{className:`text-[9px] text-zinc-500 font-bold uppercase`,children:`Temp`}),(0,Z.jsxs)(`div`,{className:`mt-0.5 text-xs font-bold ${a.tempF>73?`text-amber-400`:`text-emerald-400`}`,children:[a.tempF.toFixed(1),`°F`]}),(0,Z.jsx)(`div`,{className:`text-[8px] text-zinc-600`,children:a.tempF>73?`Too Warm`:`Optimal`})]}),(0,Z.jsxs)(`div`,{className:`rounded-md bg-zinc-900/80 p-2 text-center`,children:[(0,Z.jsx)(`div`,{className:`text-[9px] text-zinc-500 font-bold uppercase`,children:`pH`}),(0,Z.jsx)(`div`,{className:`mt-0.5 text-xs font-bold ${a.ph<5.5||a.ph>6.5?`text-amber-400`:`text-emerald-400`}`,children:a.ph.toFixed(1)}),(0,Z.jsx)(`div`,{className:`text-[8px] text-zinc-600`,children:a.ph<5.5||a.ph>6.5?`Lockout`:`Optimal`})]}),(0,Z.jsxs)(`div`,{className:`rounded-md bg-zinc-900/80 p-2 text-center`,children:[(0,Z.jsx)(`div`,{className:`text-[9px] text-zinc-500 font-bold uppercase`,children:`EC`}),(0,Z.jsx)(`div`,{className:`mt-0.5 text-xs font-bold ${l?`text-amber-400`:`text-emerald-400`}`,children:a.ec.toFixed(1)}),(0,Z.jsx)(`div`,{className:`text-[8px] text-zinc-600`,children:l?`Alert`:`Optimal`})]})]}),(0,Z.jsx)(lE,{label:`Adjust pH`,unit:``,value:e.params.ph??6,meta:Yx.reservoir.params.ph,onChange:n=>t(e.id,`ph`,n)}),(0,Z.jsx)(lE,{label:`Adjust EC`,unit:`mS/cm`,value:e.params.ec??1.2,meta:Yx.reservoir.params.ec,onChange:n=>t(e.id,`ec`,n)})]})}function lE({label:e,unit:t,value:n,meta:r,onChange:i}){return(0,Z.jsxs)(`div`,{className:`mt-1.5`,children:[(0,Z.jsxs)(`div`,{className:`mb-0.5 flex justify-between text-[11px]`,children:[(0,Z.jsx)(`span`,{className:`text-zinc-400`,children:e}),(0,Z.jsxs)(`span`,{className:`font-mono text-sky-400`,children:[n,` `,t]})]}),(0,Z.jsx)(`input`,{type:`range`,min:r.min,max:r.max,step:r.step,value:n,onChange:e=>i(parseFloat(e.target.value)),className:`w-full accent-sky-500`})]})}function uE({partId:e}){let t=Q(t=>t.parts[e]),n=Q(e=>e.parts),r=Q(e=>e.updatePart),i=Q(e=>e.setParam),a=Q(e=>e.removeParts),o=Q(e=>e.duplicateParts),s=Q(e=>e.rotateParts),c=Q(e=>e.pushHistory),l=YS();if(!t)return null;let u=Yx[t.type],d=t.type===`netPot`?l.netPots.find(t=>t.partId===e):void 0,f=d?n[d.sourcePartId]:void 0,p=(n,i)=>{c(`pos:${e}:${n}`);let a=[...t.position];a[n]=n===1?Math.max(0,i):i,r(e,{position:a})},m=(n,i)=>{c(`rot:${e}:${n}`);let a=[...t.rotation];a[n]=ZT(i),r(e,{rotation:a})},h=Object.entries(u.params).filter(([e])=>(t.type!==`pump`||!nE.has(e))&&(t.type!==`airCompressor`||!rE.has(e))&&(t.type!==`reservoir`||!iE.has(e)));return(0,Z.jsxs)(`div`,{className:`flex-1 space-y-4 overflow-y-auto px-4 py-3`,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsxs)(`div`,{className:`mb-1 flex items-center gap-2`,children:[(0,Z.jsx)(`span`,{className:`h-3 w-3 rounded`,style:{backgroundColor:t.color??u.color}}),(0,Z.jsx)(`span`,{className:`text-sm font-semibold text-zinc-200`,children:u.label}),(0,Z.jsxs)(`span`,{className:`ml-auto font-mono text-[10px] text-zinc-600`,children:[`#`,t.id]})]}),(0,Z.jsx)(`input`,{value:t.label??``,placeholder:`Name this part…`,onChange:t=>r(e,{label:t.target.value}),className:`w-full rounded-md border border-zinc-800 bg-zinc-900 px-2 py-1.5 text-xs text-zinc-200 placeholder-zinc-600 outline-none focus:border-sky-600`})]}),t.type===`pump`&&(0,Z.jsx)(aE,{part:t}),t.type===`airCompressor`&&(0,Z.jsx)(oE,{part:t}),t.type===`reservoir`&&(0,Z.jsx)(cE,{part:t}),t.type===`growTent`&&(0,Z.jsx)(sE,{part:t}),t.type===`netPot`&&d&&(0,Z.jsx)(dE,{title:`Hydraulics`,children:(0,Z.jsxs)(`div`,{className:`rounded-lg border px-3 py-2.5 ${d.overflowing?`border-rose-900/70 bg-rose-950/40`:`border-amber-900/60 bg-amber-950/30`}`,children:[(0,Z.jsx)(`div`,{className:`text-xs font-semibold ${d.overflowing?`text-rose-300`:`text-amber-300`}`,children:d.overflowing?`Pot overflow active`:`Pot near overflow`}),(0,Z.jsxs)(`p`,{className:`mt-1 text-[11px] leading-snug text-zinc-400`,children:[`Water under this pot is coming from `,f?Yx[f.type].label:`the flooded line`,` at`,` `,d.inflowGph.toFixed(0),` GPH. Water height is `,d.waterHeightFt.toFixed(2),` ft and the rim is `,d.rimHeightFt.toFixed(2),` ft.`]}),(0,Z.jsxs)(`p`,{className:`mt-1.5 rounded-md bg-zinc-900/80 px-2 py-1 text-[11px] leading-snug text-zinc-300`,children:[(0,Z.jsx)(`span`,{className:`font-semibold text-sky-400`,children:`Fix: `}),`Add drainage or move the pot off the backed-up run.`]})]})}),(0,Z.jsx)(dE,{title:`Position (ft)`,children:(0,Z.jsx)(`div`,{className:`grid grid-cols-3 gap-1.5`,children:[`X`,`Y`,`Z`].map((e,n)=>(0,Z.jsx)(fE,{label:e,value:t.position[n],step:.25,onChange:e=>p(n,e)},e))})}),(0,Z.jsxs)(dE,{title:`Rotation (°)`,children:[(0,Z.jsx)(`div`,{className:`grid grid-cols-3 gap-1.5`,children:[`X`,`Y`,`Z`].map((e,n)=>(0,Z.jsx)(fE,{label:e,value:XT(t.rotation[n]),step:15,onChange:e=>m(n,e)},e))}),(0,Z.jsxs)(`div`,{className:`mt-1.5 flex gap-1.5`,children:[(0,Z.jsx)(pE,{onClick:()=>s([e],1,Math.PI/2),children:`⟳ 90° Y`}),(0,Z.jsx)(pE,{onClick:()=>s([e],2,Math.PI/2),children:`⟳ 90° Z`}),(0,Z.jsx)(pE,{onClick:()=>r(e,{rotation:[0,0,0]}),children:`Reset`})]})]}),h.length>0&&(0,Z.jsx)(dE,{title:`Parameters`,children:(0,Z.jsx)(`div`,{className:`space-y-2.5`,children:h.map(([n,r])=>(0,Z.jsxs)(`div`,{children:[(0,Z.jsxs)(`div`,{className:`mb-0.5 flex justify-between text-[11px]`,children:[(0,Z.jsx)(`span`,{className:`text-zinc-400`,children:r.label}),(0,Z.jsxs)(`span`,{className:`font-mono text-sky-400`,children:[t.params[n]??u.defaults[n],r.unit?` ${r.unit}`:``]})]}),n===`diameter`||n===`diameterA`||n===`diameterB`?(0,Z.jsx)(`select`,{value:String(Jx(t.params[n]??u.defaults[n])),onChange:t=>i(e,n,parseFloat(t.target.value)),className:`w-full rounded-md border border-zinc-800 bg-zinc-900 px-2 py-1.5 text-[11px] text-zinc-200 outline-none focus:border-sky-600`,children:Wx.map(e=>(0,Z.jsxs)(`option`,{value:e,children:[e,` in`]},e))}):(0,Z.jsx)(`input`,{type:`range`,min:r.min,max:r.max,step:r.step,value:t.params[n]??u.defaults[n],onChange:t=>i(e,n,parseFloat(t.target.value)),className:`w-full accent-sky-500`})]},n))})}),(0,Z.jsx)(dE,{title:`Color`,children:(0,Z.jsx)(JT,{ids:[e]})}),(0,Z.jsxs)(`div`,{className:`flex gap-2 pt-1`,children:[(0,Z.jsx)(`button`,{onClick:()=>o([e]),title:`Duplicate this part (D)`,className:`flex-1 rounded-md border border-zinc-700 bg-zinc-800 px-2 py-1.5 text-xs font-medium text-zinc-200 hover:bg-zinc-700`,children:`Duplicate`}),(0,Z.jsx)(`button`,{onClick:()=>a([e]),title:`Delete this part (⌫)`,className:`flex-1 rounded-md border border-rose-900 bg-rose-950 px-2 py-1.5 text-xs font-medium text-rose-300 hover:bg-rose-900`,children:`Delete`})]})]})}function dE({title:e,children:t}){return(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`h3`,{className:`mb-1.5 text-[10px] font-bold tracking-wider text-zinc-500 uppercase`,children:e}),t]})}function fE({label:e,value:t,step:n,onChange:r}){return(0,Z.jsxs)(`label`,{className:`flex items-center gap-1 rounded-md border border-zinc-800 bg-zinc-900 px-1.5`,children:[(0,Z.jsx)(`span`,{className:`text-[10px] font-bold text-zinc-600`,children:e}),(0,Z.jsx)(`input`,{type:`number`,value:Number(t.toFixed(2)),step:n,onChange:e=>{let t=parseFloat(e.target.value);Number.isNaN(t)||r(t)},className:`w-full bg-transparent py-1.5 text-right font-mono text-[11px] text-zinc-200 outline-none`})]})}function pE({children:e,onClick:t}){return(0,Z.jsx)(`button`,{onClick:t,className:`flex-1 rounded border border-zinc-800 bg-zinc-900 px-1.5 py-1 text-[10px] text-zinc-300 hover:bg-zinc-800`,children:e})}var mE=`hydro-builder:autosave`;function hE(e,t){return{app:`hydro-builder`,version:1,name:e,savedAt:new Date().toISOString(),parts:t}}function gE(e){let t=e;if(!t||t.app!==`hydro-builder`||!Array.isArray(t.parts))throw Error(`Not a valid Hydro Builder project file.`);let n=new Set([`Plumbing`,`Flow Control`,`Growing`,`Structure`,`Environment`]);for(let e of t.parts){if(!e||typeof e!=`object`)throw Error(`Project contains invalid or null part data.`);if(typeof e.id!=`string`||!e.id)throw Error(`Part is missing a valid ID.`);if(typeof e.type!=`string`||!(e.type in Yx))throw Error(`Part ${e.id} has an invalid or unrecognized type: ${e.type}.`);let t=Yx[e.type].category;if(!n.has(t))throw Error(`Part ${e.id} has an invalid category: ${t}.`);if(!Array.isArray(e.position)||e.position.length!==3||!e.position.every(e=>typeof e==`number`&&Number.isFinite(e)))throw Error(`Part ${e.id} must have a position with an array of 3 numbers.`);if(!Array.isArray(e.rotation)||e.rotation.length!==3||!e.rotation.every(e=>typeof e==`number`&&Number.isFinite(e)))throw Error(`Part ${e.id} must have a rotation with an array of 3 numbers.`)}let r=t.parts;return _E(t.name??`Imported project`,r,t.savedAt)}function _E(e,t,n){return{app:`hydro-builder`,version:1,name:e,savedAt:n??new Date().toISOString(),parts:t}}function vE(e,t,n){try{let r=n?`hydro-builder:autosave:${n}`:mE;localStorage.setItem(r,JSON.stringify(hE(e,t)))}catch{}}function yE(e){try{let t=e?`hydro-builder:autosave:${e}`:mE,n=localStorage.getItem(t);return n?gE(JSON.parse(n)):null}catch{return null}}function bE(e,t){let n=new Blob([JSON.stringify(hE(e,t),null,2)],{type:`application/json`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=`${e.replace(/[^a-z0-9-_ ]/gi,``).trim()||`hydro-system`}.json`,i.click(),URL.revokeObjectURL(r)}async function xE(e){let t=await e.text();return gE(JSON.parse(t))}var SE=(0,v.createContext)(void 0),CE=({children:e})=>{let[t,n]=(0,v.useState)(localStorage.getItem(`hydro-token`)),[r,i]=(0,v.useState)(null),[a,o]=(0,v.useState)(!0),[s,c]=(0,v.useState)(null),l=async e=>{try{let t=await fetch(`/api/auth/me`,{headers:{Authorization:`Bearer ${e}`}});t.ok?i((await t.json()).user):f()}catch(e){console.error(`Error fetching user info:`,e)}finally{o(!1)}};(0,v.useEffect)(()=>{t?l(t):(i(null),o(!1));let e=new URLSearchParams(window.location.search);if(e.get(`checkout_success`)===`true`){let e=new URL(window.location.href);e.searchParams.delete(`checkout_success`),window.history.replaceState({},document.title,e.pathname),bS(`Payment successful! Your Premium Upgrade has been unlocked.`,`success`),t&&l(t)}else if(e.get(`checkout_cancel`)===`true`){let e=new URL(window.location.href);e.searchParams.delete(`checkout_cancel`),window.history.replaceState({},document.title,e.pathname),bS(`Payment cancelled.`,`info`)}},[t]);let u=async(e,t)=>{c(null);try{let r=await fetch(`/api/auth/login`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({email:e,password:t})}),a=await r.json();if(!r.ok)throw Error(a.error||`Login failed`);localStorage.setItem(`hydro-token`,a.token),n(a.token),i(a.user)}catch(e){throw c(e instanceof Error?e.message:`Unknown login error`),e}},d=async(e,t)=>{c(null);try{let r=await fetch(`/api/auth/signup`,{method:`POST`,headers:{"Content-Type":`application/json`},body:JSON.stringify({email:e,password:t})}),a=await r.json();if(!r.ok)throw Error(a.error||`Signup failed`);localStorage.setItem(`hydro-token`,a.token),n(a.token),i(a.user)}catch(e){throw c(e instanceof Error?e.message:`Unknown signup error`),e}},f=()=>{localStorage.removeItem(`hydro-token`),n(null),i(null)};return(0,Z.jsx)(SE.Provider,{value:{token:t,user:r,loading:a,error:s,login:u,signup:d,logout:f,refreshProfile:async()=>{t&&await l(t)},clearError:()=>{c(null)}},children:e})},wE=()=>{let e=(0,v.useContext)(SE);if(e===void 0)throw Error(`useAuth must be used within an AuthProvider`);return e},TE=({onClose:e})=>{let{token:t,user:n}=wE(),[r,i]=(0,v.useState)(!1),[a,o]=(0,v.useState)(null);return(0,Z.jsx)(`div`,{className:`fixed inset-0 z-[120] flex items-center justify-center bg-zinc-950/80 backdrop-blur-sm`,children:(0,Z.jsxs)(`div`,{className:`w-full max-w-md overflow-hidden rounded-2xl border border-zinc-850 bg-zinc-900 shadow-2xl`,children:[(0,Z.jsx)(`div`,{className:`h-2 bg-gradient-to-r from-sky-400 via-blue-500 to-indigo-600`}),(0,Z.jsxs)(`div`,{className:`p-8`,children:[(0,Z.jsxs)(`div`,{className:`flex flex-col items-center text-center`,children:[(0,Z.jsx)(`div`,{className:`mb-4 grid h-14 w-14 place-items-center rounded-full bg-sky-500/10 text-2xl text-sky-400`,children:`💎`}),(0,Z.jsx)(`h3`,{className:`text-xl font-bold text-zinc-100`,children:`Unlock Premium Features`}),(0,Z.jsx)(`p`,{className:`mt-2 text-xs text-zinc-400 leading-relaxed px-2`,children:`Free profiles do not have auto-saves or cloud build spaces. Upgrade to Premium permanently to enable browser auto-saves and unlock 10 cloud project slots.`})]}),(0,Z.jsxs)(`div`,{className:`my-6 rounded-xl border border-zinc-800 bg-zinc-950/50 p-5 text-center`,children:[(0,Z.jsx)(`span`,{className:`text-xs font-semibold text-sky-400 uppercase tracking-wider`,children:`Premium Lifetime Upgrade`}),(0,Z.jsxs)(`div`,{className:`mt-2 flex items-baseline justify-center gap-1`,children:[(0,Z.jsx)(`span`,{className:`text-3xl font-black text-zinc-100`,children:`$5`}),(0,Z.jsx)(`span`,{className:`text-xs text-zinc-500`,children:`one-time purchase`})]}),(0,Z.jsxs)(`div`,{className:`mt-4 flex flex-col gap-1.5 text-left text-xs text-zinc-400 border-t border-zinc-850 pt-4`,children:[(0,Z.jsxs)(`div`,{className:`flex justify-between`,children:[(0,Z.jsx)(`span`,{children:`Slots Owned:`}),(0,Z.jsx)(`span`,{className:`font-semibold text-zinc-200`,children:n&&n.purchased_slots>0?10:0})]}),(0,Z.jsxs)(`div`,{className:`flex justify-between`,children:[(0,Z.jsx)(`span`,{children:`Active Projects:`}),(0,Z.jsx)(`span`,{className:`font-semibold text-zinc-200`,children:n?.project_count??0})]})]})]}),a&&(0,Z.jsx)(`div`,{className:`mb-4 rounded-lg border border-red-500/15 bg-red-500/5 p-3 text-xs text-red-400`,children:a}),(0,Z.jsxs)(`div`,{className:`flex flex-col gap-3`,children:[n&&(0,Z.jsx)(`div`,{className:`w-full flex justify-center py-1`,children:(0,Z.jsx)(`stripe-buy-button`,{"buy-button-id":`buy_btn_1ThubIDPQ7Y9c4bKgoRwZuIm`,"publishable-key":`pk_live_51ThuN5DPQ7Y9c4bKvvcy6bl6FuoQufKFWNYdkaXwINzWiEqyPlrU2WwO2mlCpKtuGXkBfKfozBVfT0aTBTU0TdLm00LIvAP3si`,"client-reference-id":String(n.id)})}),(0,Z.jsx)(`button`,{onClick:e,className:`w-full rounded-lg bg-zinc-800/60 py-2.5 text-xs font-medium text-zinc-400 hover:bg-zinc-800 hover:text-zinc-200 transition cursor-pointer`,children:`Cancel`})]})]})]})})},EE=Sy(e=>({status:`saved`,setStatus:t=>e({status:t})}));function DE(){let e=EE(e=>e.status);return e===`saved`?(0,Z.jsx)(`span`,{title:`All changes saved to browser`,className:`h-2 w-2 rounded-full bg-emerald-500 transition-colors duration-300 shrink-0`}):e===`saving`?(0,Z.jsx)(`span`,{title:`Saving changes...`,className:`h-2 w-2 rounded-full bg-amber-500 animate-pulse shrink-0`}):(0,Z.jsx)(`span`,{title:`Unsaved changes`,className:`h-2 w-2 rounded-full bg-amber-500 shrink-0`})}function OE({onOpenBom:e,onCheckBuild:t}){let{token:n,user:r,logout:i,refreshProfile:a}=wE(),[o,s]=(0,v.useState)(!1),[c,l]=(0,v.useState)([]),[u,d]=(0,v.useState)(!1),f=Q(e=>e.projectName),p=Q(e=>e.setProjectName),m=Q(e=>e.growthStage),h=Q(e=>e.setGrowthStage),g=Q(e=>e.viewMode),_=Q(e=>e.setViewMode),y=Q(e=>e.renderMode),b=Q(e=>e.setRenderMode),x=Q(e=>e.tool),S=Q(e=>e.setTool),C=Q(e=>e.showFlow),w=Q(e=>e.toggleFlow),T=Q(e=>e.simRunning),E=Q(e=>e.toggleSimRunning),D=Q(e=>e.snapToGrid),O=Q(e=>e.toggleSnap),k=Q(e=>e.undo),A=Q(e=>e.redo),j=Q(e=>e.past.length>0),M=Q(e=>e.future.length>0),N=Q(e=>e.autoCapOpenEnds),P=Q(e=>e.rooms),F=Q(e=>e.activeRoomId),I=Q(e=>e.addRoom),L=Q(e=>e.removeRoom),ee=Q(e=>e.setActiveRoomId),R=(0,v.useRef)(null),[te,z]=(0,v.useState)(!1),[B,V]=(0,v.useState)(!1),ne=async()=>{if(n){d(!0);try{let e=await fetch(`/api/projects`,{headers:{Authorization:`Bearer ${n}`}});e.ok&&l(await e.json())}catch(e){console.error(`Failed to fetch projects`,e)}finally{d(!1)}}};(0,v.useEffect)(()=>{te&&ne()},[te]);let re=async()=>{if(!n)return;let e=Q.getState(),t=Object.values(e.parts);try{let r=await fetch(`/api/projects`,{method:`POST`,headers:{"Content-Type":`application/json`,Authorization:`Bearer ${n}`},body:JSON.stringify({name:e.projectName,parts:t})}),i=await r.json();if(!r.ok){r.status===402?s(!0):bS(i.error||`Failed to save project`,`error`);return}await a(),bS(`Project saved successfully!`,`success`)}catch(e){bS(`Save failed: `+e,`error`)}},ie=e=>{let t=c.find(t=>t.name===e);t&&Q.getState().loadParts(t.parts,t.name),z(!1)},ae=async(e,t)=>{if(e.stopPropagation(),!(!n||!confirm(`Delete project "${t}" permanently?`)))try{let e=await fetch(`/api/projects/${encodeURIComponent(t)}`,{method:`DELETE`,headers:{Authorization:`Bearer ${n}`}});e.ok?(await ne(),await a(),bS(`Project deleted successfully`,`success`)):bS((await e.json()).error||`Failed to delete project`,`error`)}catch(e){bS(`Delete failed: `+e,`error`)}},oe=()=>{let e=Q.getState();bE(e.projectName,Object.values(e.parts))},se=async e=>{try{let t=await xE(e);Q.getState().loadParts(t.parts,t.name),bS(`Project imported successfully`,`success`)}catch(e){bS(e instanceof Error?e.message:`Import failed`,`error`)}};return(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsxs)(`header`,{className:`flex h-12 shrink-0 items-center gap-2 border-b border-zinc-800 bg-zinc-950 px-3`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 pr-2`,children:[(0,Z.jsx)(`span`,{className:`grid h-7 w-7 place-items-center rounded-lg bg-gradient-to-br from-sky-500 to-blue-700 text-sm font-black text-white`,children:`H`}),(0,Z.jsx)(`input`,{value:f,onChange:e=>p(e.target.value),className:`w-44 rounded-md border border-transparent bg-transparent px-1.5 py-1 text-sm font-semibold text-zinc-100 outline-none hover:border-zinc-800 focus:border-sky-700 focus:bg-zinc-900`}),(0,Z.jsx)(DE,{})]}),(0,Z.jsx)(kE,{}),(0,Z.jsx)(AE,{onClick:()=>{confirm(`Start a new empty project? Unsaved changes are kept in undo history.`)&&(Q.getState().clearAll(),p(`Untitled system`))},title:`New empty project`,children:`New`}),(0,Z.jsx)(AE,{onClick:re,title:`Save to cloud storage`,children:`Save`}),(0,Z.jsxs)(`div`,{className:`relative`,children:[(0,Z.jsx)(AE,{onClick:()=>z(e=>!e),title:`Load a saved project`,children:`Load ▾`}),te&&(0,Z.jsxs)(`div`,{className:`absolute top-9 left-0 z-50 max-h-72 w-64 overflow-y-auto rounded-lg border border-zinc-700 bg-zinc-900 p-1 shadow-2xl`,children:[u&&(0,Z.jsx)(`div`,{className:`px-3 py-2 text-xs text-zinc-500`,children:`Loading...`}),!u&&c.length===0&&(0,Z.jsx)(`div`,{className:`px-3 py-2 text-xs text-zinc-500`,children:`No saved projects yet.`}),!u&&c.map(e=>(0,Z.jsxs)(`div`,{className:`flex items-center justify-between rounded-md px-3 py-1.5 hover:bg-zinc-800 group`,children:[(0,Z.jsxs)(`button`,{onClick:()=>ie(e.name),className:`flex-1 text-left text-xs text-zinc-200 outline-none`,children:[e.name,(0,Z.jsx)(`span`,{className:`block text-[10px] text-zinc-500`,children:new Date(e.savedAt).toLocaleString()})]}),(0,Z.jsx)(`button`,{onClick:t=>ae(t,e.name),className:`hidden group-hover:block text-[10px] text-red-400 hover:text-red-300 px-2 py-0.5 rounded bg-zinc-950/40`,title:`Delete project`,children:`✕`})]},e.name))]})]}),(0,Z.jsx)(AE,{onClick:oe,title:`Download design as JSON`,children:`Export`}),(0,Z.jsx)(AE,{onClick:()=>R.current?.click(),title:`Import a design JSON`,children:`Import`}),(0,Z.jsx)(AE,{onClick:()=>V(!0),title:`Show Keyboard Shortcuts`,children:`⌨️ Shortcuts`}),(0,Z.jsx)(`input`,{ref:R,type:`file`,accept:`application/json,.json`,className:`hidden`,onChange:e=>{let t=e.target.files?.[0];t&&se(t),e.target.value=``}}),(0,Z.jsx)(kE,{}),(0,Z.jsx)(AE,{onClick:e,title:`Open bill of materials`,children:`BOM`}),(0,Z.jsx)(AE,{onClick:t,title:`Run design validation`,children:`Check Build`}),(0,Z.jsx)(AE,{onClick:()=>N(),title:`Add caps to every loose plumbing end`,children:`Auto Cap`}),(0,Z.jsx)(kE,{}),(0,Z.jsx)(AE,{onClick:k,disabled:!j,title:`Undo (⌘Z)`,children:`↶`}),(0,Z.jsx)(AE,{onClick:A,disabled:!M,title:`Redo (⇧⌘Z)`,children:`↷`}),(0,Z.jsx)(kE,{}),(0,Z.jsx)(AE,{active:x===`measure`,onClick:()=>S(x===`measure`?`select`:`measure`),title:`Measure: click two points in the scene`,children:`📏 Measure`}),(0,Z.jsx)(AE,{active:x===`pipeRun`,onClick:()=>S(x===`pipeRun`?`select`:`pipeRun`),title:`Pipe Run: click two ground points`,children:`Pipe Run`}),(0,Z.jsx)(AE,{active:D,onClick:O,title:`Snap to grid (0.25 ft)`,children:`⌗ Snap`}),(0,Z.jsxs)(`div`,{className:`ml-auto flex items-center gap-2`,children:[(0,Z.jsx)(`button`,{onClick:E,title:T?`Pause water simulation (Space)`:`Run water simulation (Space)`,className:`grid h-8 w-8 shrink-0 place-items-center rounded-full text-white shadow-lg transition-all hover:scale-110 active:scale-95 ${T?`bg-emerald-500 shadow-emerald-500/40 hover:bg-emerald-400`:`bg-sky-600 shadow-sky-600/40 hover:bg-sky-500`}`,children:T?(0,Z.jsxs)(`svg`,{viewBox:`0 0 16 16`,className:`h-3.5 w-3.5`,fill:`currentColor`,children:[(0,Z.jsx)(`rect`,{x:`3`,y:`2.5`,width:`3.4`,height:`11`,rx:`1`}),(0,Z.jsx)(`rect`,{x:`9.6`,y:`2.5`,width:`3.4`,height:`11`,rx:`1`})]}):(0,Z.jsx)(`svg`,{viewBox:`0 0 16 16`,className:`ml-0.5 h-3.5 w-3.5`,fill:`currentColor`,children:(0,Z.jsx)(`path`,{d:`M4 2.8a1 1 0 0 1 1.52-.86l8.2 5.2a1 1 0 0 1 0 1.7l-8.2 5.2A1 1 0 0 1 4 13.2V2.8Z`})})}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-1.5 bg-zinc-900 border border-zinc-800 rounded-lg px-2.5 py-1`,children:[(0,Z.jsx)(`span`,{className:`text-[10px] uppercase font-bold text-zinc-400`,children:`Stage`}),(0,Z.jsxs)(`select`,{value:m,onChange:e=>h(e.target.value),className:`bg-transparent text-xs text-zinc-200 outline-none border-none cursor-pointer pr-1`,children:[(0,Z.jsx)(`option`,{value:`seedling`,className:`bg-zinc-900 text-zinc-200`,children:`Seedling`}),(0,Z.jsx)(`option`,{value:`vegetative`,className:`bg-zinc-900 text-zinc-200`,children:`Vegetative`}),(0,Z.jsx)(`option`,{value:`flowering`,className:`bg-zinc-900 text-zinc-200`,children:`Flowering`})]})]}),(0,Z.jsx)(AE,{active:C,onClick:w,title:`Toggle water flow animation`,children:`💧 Flow`}),(0,Z.jsx)(`div`,{className:`flex overflow-hidden rounded-lg border border-zinc-800`,children:[{id:`builder`,label:`Builder`,title:`Standard building mode`},{id:`xray`,label:`X-Ray`,title:`Transparent shell with internal water visibility`},{id:`water`,label:`Water`,title:`Water-first view with solids faded back`}].map(e=>(0,Z.jsx)(`button`,{onClick:()=>b(e.id),title:e.title,className:`px-3 py-1.5 text-xs font-medium transition ${y===e.id?`bg-cyan-600 text-white`:`bg-zinc-900 text-zinc-400 hover:bg-zinc-800 hover:text-zinc-200`}`,children:e.label},e.id))}),(0,Z.jsx)(`div`,{className:`flex overflow-hidden rounded-lg border border-zinc-800`,children:[{id:`orbit`,label:`3D`,title:`Free 3D orbit view`},{id:`top`,label:`Top`,title:`Top-down plan view`},{id:`front`,label:`Front`,title:`Front elevation view`},{id:`side`,label:`Side`,title:`Side elevation view`}].map(e=>(0,Z.jsx)(`button`,{onClick:()=>_(e.id),title:e.title,className:`px-3 py-1.5 text-xs font-medium transition ${g===e.id?`bg-sky-600 text-white`:`bg-zinc-900 text-zinc-400 hover:bg-zinc-800 hover:text-zinc-200`}`,children:e.label},e.id))}),r&&(0,Z.jsxs)(Z.Fragment,{children:[(0,Z.jsx)(kE,{}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 px-1`,children:[(0,Z.jsxs)(`div`,{className:`flex flex-col items-end`,children:[(0,Z.jsx)(`span`,{className:`text-[10px] font-semibold text-zinc-300 max-w-24 truncate`,children:r.email}),(0,Z.jsxs)(`span`,{className:`text-[9px] font-bold uppercase ${r.total_slots===0||r.project_count>=r.total_slots?`text-amber-400`:`text-emerald-400`}`,children:[r.project_count,` / `,r.total_slots,` Slots`]})]}),r.total_slots===0?(0,Z.jsx)(`button`,{onClick:()=>s(!0),className:`rounded bg-gradient-to-r from-sky-500/20 to-blue-500/20 hover:from-sky-500/30 hover:to-blue-500/30 text-sky-300 border border-sky-700 px-2 py-1 text-[10px] font-bold transition cursor-pointer flex items-center gap-1 shadow-lg`,children:`💎 Upgrade`}):r.project_count>=r.total_slots&&(0,Z.jsx)(`button`,{onClick:()=>s(!0),className:`rounded bg-amber-500/20 hover:bg-amber-500/30 text-amber-300 border border-amber-600/30 px-2 py-1 text-[10px] font-semibold transition cursor-pointer`,children:`+ Add Slot`}),(0,Z.jsx)(`button`,{onClick:i,className:`rounded border border-zinc-800 bg-zinc-900 px-2 py-1 text-[10px] font-medium text-zinc-400 hover:bg-zinc-800 hover:text-zinc-200 transition cursor-pointer`,children:`Logout`})]})]})]}),o&&(0,Z.jsx)(TE,{onClose:()=>s(!1)}),B&&(0,Z.jsx)(`div`,{className:`fixed inset-0 z-[120] flex items-center justify-center bg-zinc-950/80 backdrop-blur-sm`,children:(0,Z.jsxs)(`div`,{className:`w-full max-w-sm rounded-xl border border-zinc-800 bg-zinc-900 p-6 shadow-2xl text-left`,children:[(0,Z.jsx)(`h3`,{className:`text-sm font-bold text-zinc-100 mb-4 flex items-center gap-1.5 border-b border-zinc-800 pb-2`,children:`⌨️ Keyboard Shortcuts`}),(0,Z.jsxs)(`div`,{className:`space-y-2.5 text-xs text-zinc-400`,children:[(0,Z.jsxs)(`div`,{className:`flex justify-between border-b border-zinc-800/40 pb-1.5`,children:[(0,Z.jsx)(`span`,{children:`Undo / Redo`}),(0,Z.jsx)(`span`,{className:`font-mono bg-zinc-950 px-1.5 py-0.5 rounded text-zinc-300`,children:`⌘Z / ⌘Y`})]}),(0,Z.jsxs)(`div`,{className:`flex justify-between border-b border-zinc-800/40 pb-1.5`,children:[(0,Z.jsx)(`span`,{children:`Rotate Selected`}),(0,Z.jsx)(`span`,{className:`font-mono bg-zinc-950 px-1.5 py-0.5 rounded text-zinc-300`,children:`R`})]}),(0,Z.jsxs)(`div`,{className:`flex justify-between border-b border-zinc-800/40 pb-1.5`,children:[(0,Z.jsx)(`span`,{children:`Duplicate Selected`}),(0,Z.jsx)(`span`,{className:`font-mono bg-zinc-950 px-1.5 py-0.5 rounded text-zinc-300`,children:`D`})]}),(0,Z.jsxs)(`div`,{className:`flex justify-between border-b border-zinc-800/40 pb-1.5`,children:[(0,Z.jsx)(`span`,{children:`Delete Selected`}),(0,Z.jsx)(`span`,{className:`font-mono bg-zinc-950 px-1.5 py-0.5 rounded text-zinc-300`,children:`⌫ / Del`})]}),(0,Z.jsxs)(`div`,{className:`flex justify-between border-b border-zinc-800/40 pb-1.5`,children:[(0,Z.jsx)(`span`,{children:`Run / Pause Sim`}),(0,Z.jsx)(`span`,{className:`font-mono bg-zinc-950 px-1.5 py-0.5 rounded text-zinc-300`,children:`Spacebar`})]}),(0,Z.jsxs)(`div`,{className:`flex justify-between border-b border-zinc-800/40 pb-1.5`,children:[(0,Z.jsx)(`span`,{children:`Pan Camera View`}),(0,Z.jsx)(`span`,{className:`font-mono bg-zinc-950 px-1.5 py-0.5 rounded text-zinc-300`,children:`Arrow Keys`})]}),(0,Z.jsxs)(`div`,{className:`flex justify-between border-b border-zinc-800/40 pb-1.5`,children:[(0,Z.jsx)(`span`,{children:`Clear Selection & Tool`}),(0,Z.jsx)(`span`,{className:`font-mono bg-zinc-950 px-1.5 py-0.5 rounded text-zinc-300`,children:`Esc`})]})]}),(0,Z.jsx)(`button`,{onClick:()=>V(!1),className:`mt-6 w-full rounded bg-zinc-800 py-2 text-xs font-semibold text-zinc-200 hover:bg-zinc-700 transition cursor-pointer`,children:`Close`})]})})]}),(0,Z.jsxs)(`div`,{className:`flex h-10 shrink-0 items-center justify-between border-b border-zinc-850 bg-zinc-900/60 px-3`,children:[(0,Z.jsx)(`div`,{className:`flex items-center gap-1.5 overflow-x-auto`,children:P.map(e=>(0,Z.jsxs)(`div`,{className:`group flex items-center gap-1.5 rounded-md px-2.5 py-1 text-xs font-semibold transition cursor-pointer select-none ${e.id===F?`bg-sky-500/15 text-sky-400 border border-sky-500/30`:`text-zinc-400 hover:text-zinc-200 border border-transparent`}`,onClick:()=>ee(e.id),children:[(0,Z.jsx)(`span`,{children:e.name}),P.length>1&&(0,Z.jsx)(`button`,{onClick:t=>{t.stopPropagation(),confirm(`Delete room "${e.name}" and all its parts permanently?`)&&L(e.id)},className:`opacity-0 group-hover:opacity-100 hover:text-red-400 text-[10px] ml-1 transition`,children:`✕`})]},e.id))}),(0,Z.jsx)(`button`,{onClick:()=>{let e=prompt(`Enter room name:`,`Room ${P.length+1}`);e&&I(e.trim())},className:`rounded border border-zinc-700 bg-zinc-850 hover:bg-zinc-800 text-zinc-300 px-2.5 py-1 text-[11px] font-semibold transition flex items-center gap-1 cursor-pointer`,children:`+ Add Room`})]})]})}function kE(){return(0,Z.jsx)(`div`,{className:`mx-1 h-6 w-px bg-zinc-800`})}function AE({children:e,onClick:t,title:n,active:r,disabled:i}){return(0,Z.jsx)(`button`,{onClick:t,title:n,disabled:i,className:`rounded-md px-2.5 py-1.5 text-xs font-medium transition disabled:cursor-default disabled:opacity-30 - ${r?`bg-sky-500/15 text-sky-300 ring-1 ring-sky-700`:`text-zinc-300 hover:bg-zinc-800`}`,children:e})}var jE={error:`border-rose-900/60 bg-rose-950/60 text-rose-300`,warning:`border-amber-900/60 bg-amber-950/50 text-amber-300`,info:`border-sky-900/60 bg-sky-950/50 text-sky-300`},ME={error:`⛔`,warning:`⚠️`,info:`ℹ️`};function NE(){let e=YS(),t=Q(e=>Object.keys(e.parts).length),n=Q(e=>e.parts),r=Q(e=>e.setSelected),i=Q(e=>e.simRunning),a=Q(e=>e.toggleSimRunning),o=Q(e=>e.heatmapMode),s=Q(e=>e.toggleHeatmapMode),c=(0,v.useMemo)(()=>KT(n),[n]),l=(0,v.useMemo)(()=>Object.values(n).filter(e=>e.type===`reservoir`),[n]),u=(0,v.useMemo)(()=>l.map(e=>nC(e,n)),[l,n]),d=e.totalGph*3.785,f=e.pumps.some(e=>e.running),p=Math.max(0,...Object.values(e.velocities)),m=Math.max(0,...Object.values(e.pressures));return(0,Z.jsxs)(`footer`,{className:`flex h-36 shrink-0 border-t border-zinc-800 bg-zinc-950/90 backdrop-blur`,children:[(0,Z.jsxs)(`div`,{className:`flex w-56 shrink-0 flex-col justify-center gap-1 border-r border-zinc-800 px-4`,children:[(0,Z.jsx)(`h3`,{className:`text-[10px] font-bold tracking-wider text-zinc-500 uppercase`,children:`Simulation`}),(0,Z.jsxs)(`div`,{className:`text-2xl font-bold text-sky-400 tabular-nums`,children:[e.totalGph.toFixed(0),(0,Z.jsx)(`span`,{className:`ml-1 text-xs font-medium text-zinc-500`,children:`GPH`})]}),(0,Z.jsxs)(`div`,{className:`text-[11px] text-zinc-500 tabular-nums`,children:[`≈ `,d.toFixed(0),` L/h · `,t,` parts · `,e.connectionCount,` connections`]}),(0,Z.jsxs)(`div`,{className:`text-[10px] text-zinc-600 tabular-nums`,children:[`peak `,p.toFixed(1),` ft/s · `,m.toFixed(1),` psi`]}),(0,Z.jsxs)(`div`,{className:`flex items-center gap-2 mt-1`,children:[(0,Z.jsxs)(`button`,{onClick:a,title:i?`Pause simulation (Space)`:`Resume simulation (Space)`,className:`inline-flex w-fit cursor-pointer items-center gap-1.5 rounded-full px-2 py-0.5 text-[10px] font-semibold transition hover:brightness-125 ${i?f?`bg-emerald-950 text-emerald-400 ring-1 ring-emerald-800`:`bg-zinc-900 text-zinc-500 ring-1 ring-zinc-800`:`bg-amber-950 text-amber-400 ring-1 ring-amber-800`}`,children:[(0,Z.jsxs)(`span`,{className:`relative flex h-1.5 w-1.5`,children:[i&&f&&(0,Z.jsx)(`span`,{className:`absolute inline-flex h-full w-full animate-ping rounded-full bg-emerald-400 opacity-60`}),(0,Z.jsx)(`span`,{className:`relative inline-flex h-1.5 w-1.5 rounded-full bg-current`})]}),i?f?`Water flowing`:`System idle`:`⏸ Paused`]}),(0,Z.jsxs)(`label`,{className:`inline-flex cursor-pointer items-center gap-1 text-[10px] font-semibold text-zinc-400 hover:text-zinc-200`,children:[(0,Z.jsx)(`input`,{type:`checkbox`,checked:o,onChange:s,className:`accent-sky-500 cursor-pointer h-3 w-3 rounded border-zinc-700 bg-zinc-850`}),(0,Z.jsx)(`span`,{children:`Heatmap`})]})]})]}),(0,Z.jsxs)(`div`,{className:`flex w-72 shrink-0 flex-col gap-1.5 overflow-y-auto border-r border-zinc-800 px-4 py-2.5`,children:[(0,Z.jsx)(`h3`,{className:`text-[10px] font-bold tracking-wider text-zinc-500 uppercase`,children:`Pumps`}),e.pumps.length===0&&(0,Z.jsx)(`p`,{className:`text-xs text-zinc-600`,children:`No pumps in the system.`}),e.pumps.map(e=>(0,Z.jsxs)(`button`,{onClick:()=>r(e.pumpId),className:`rounded-md border border-zinc-800 bg-zinc-900/70 px-2.5 py-1.5 text-left hover:border-zinc-600`,children:[(0,Z.jsxs)(`div`,{className:`flex items-baseline justify-between`,children:[(0,Z.jsxs)(`span`,{className:`text-xs font-semibold text-zinc-200`,children:[e.gph>0?`${e.gph.toFixed(0)} GPH`:`No flow`,(0,Z.jsxs)(`span`,{className:`ml-1 text-[10px] font-normal text-zinc-500`,children:[`/ `,e.ratedGph,` rated`]})]}),(0,Z.jsxs)(`span`,{className:`font-mono text-[10px] text-zinc-500`,children:[`head `,e.headFt.toFixed(1),`/`,e.maxHeadFt,` ft`]})]}),(0,Z.jsx)(`div`,{className:`mt-1 h-1 overflow-hidden rounded-full bg-zinc-800`,children:(0,Z.jsx)(`div`,{className:`h-full rounded-full ${e.gph/e.ratedGph>.5?`bg-emerald-500`:e.gph>0?`bg-amber-500`:`bg-rose-600`}`,style:{width:`${Math.max(2,e.gph/e.ratedGph*100)}%`}})})]},e.pumpId))]}),(0,Z.jsxs)(`div`,{className:`flex w-80 shrink-0 flex-col gap-1 overflow-y-auto border-r border-zinc-800 px-4 py-2.5`,children:[(0,Z.jsx)(`h3`,{className:`text-[10px] font-bold tracking-wider text-zinc-500 uppercase`,children:`Environment`}),c.length===0?(0,Z.jsx)(`p`,{className:`text-xs text-zinc-600`,children:`Add a grow tent/room to track air exchange.`}):c.map(e=>(0,Z.jsxs)(`button`,{onClick:()=>r(e.roomId),className:`rounded-md border border-zinc-800 bg-zinc-900/70 px-2.5 py-1.5 text-left hover:border-zinc-600`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center justify-between gap-2`,children:[(0,Z.jsx)(`span`,{className:`text-xs font-semibold text-zinc-200`,children:e.label}),(0,Z.jsx)(`span`,{className:`rounded-full px-2 py-0.5 text-[10px] font-semibold ${e.sealed?`bg-emerald-950 text-emerald-300 ring-1 ring-emerald-800`:`bg-sky-950 text-sky-300 ring-1 ring-sky-800`}`,children:e.sealed?`Sealed`:`Open air`})]}),(0,Z.jsxs)(`div`,{className:`mt-1 text-[11px] text-zinc-400 tabular-nums`,children:[e.volumeFt3.toFixed(0),` ft3 · `,e.exhaustCfm.toFixed(0),` exhaust CFM`]}),(0,Z.jsxs)(`div`,{className:`text-[10px] text-zinc-500 tabular-nums`,children:[e.airChangesPerMinute.toFixed(2),` exchanges/min · `,e.airChangesPerHour.toFixed(1),` ACH`]}),(0,Z.jsxs)(`div`,{className:`mt-1 text-[10px] text-zinc-600 tabular-nums`,children:[`circ `,e.circulationCfm.toFixed(0),` CFM · light `,e.lightWatts.toFixed(0),` W · CO2 `,e.co2TankCount,` tank`,e.co2TankCount===1?``:`s`]}),(0,Z.jsxs)(`div`,{className:`mt-1 flex gap-1.5 text-[9px] font-mono`,children:[(0,Z.jsxs)(`span`,{className:`rounded bg-zinc-900 px-1 py-0.5 text-emerald-400 border border-zinc-800`,children:[`VPD `,e.roomVPD.toFixed(2),` kPa`]}),(0,Z.jsxs)(`span`,{className:`rounded bg-zinc-900 px-1 py-0.5 text-amber-400 border border-zinc-800`,children:[`DLI `,e.roomDLI.toFixed(1)]}),(0,Z.jsxs)(`span`,{className:`rounded bg-zinc-900 px-1 py-0.5 text-sky-400 border border-zinc-800`,children:[`CO₂ `,e.roomCo2,` ppm`]})]})]},e.roomId))]}),(0,Z.jsxs)(`div`,{className:`flex w-56 shrink-0 flex-col justify-center gap-1.5 border-r border-zinc-800 px-4 py-2.5`,children:[(0,Z.jsx)(`h3`,{className:`text-[10px] font-bold tracking-wider text-zinc-500 uppercase`,children:`Room Readout`}),c.length===0?(0,Z.jsx)(`p`,{className:`text-xs text-zinc-600`,children:`No room placed`}):(()=>{let e=c[0];return(0,Z.jsxs)(`div`,{className:`flex flex-wrap gap-1 text-[10px] font-mono tabular-nums`,children:[(0,Z.jsxs)(`span`,{className:`rounded bg-zinc-900 px-1.5 py-0.5 border border-zinc-800 text-rose-400`,children:[`🌡️ `,e.roomTempF.toFixed(0),`°F`]}),(0,Z.jsxs)(`span`,{className:`rounded bg-zinc-900 px-1.5 py-0.5 border border-zinc-800 text-sky-400`,children:[`💧 `,e.roomRH.toFixed(0),`%`]}),(0,Z.jsxs)(`span`,{className:`rounded bg-zinc-900 px-1.5 py-0.5 border border-zinc-800 text-emerald-400`,children:[`VPD `,e.roomVPD.toFixed(2)]}),(0,Z.jsxs)(`span`,{className:`rounded bg-zinc-900 px-1.5 py-0.5 border border-zinc-800 text-sky-400`,children:[`CO₂ `,e.roomCo2]}),(0,Z.jsxs)(`span`,{className:`rounded bg-zinc-900 px-1.5 py-0.5 border border-zinc-800 text-amber-400`,children:[`☀️ `,e.roomPPFD.toFixed(0)]})]})})()]}),(0,Z.jsxs)(`div`,{className:`flex w-72 shrink-0 flex-col gap-1.5 overflow-y-auto border-r border-zinc-800 px-4 py-2.5`,children:[(0,Z.jsx)(`h3`,{className:`text-[10px] font-bold tracking-wider text-zinc-500 uppercase`,children:`Aeration & Water`}),u.length===0&&(0,Z.jsx)(`p`,{className:`text-xs text-zinc-600`,children:`No reservoirs in the system.`}),u.map(t=>(0,Z.jsxs)(`button`,{onClick:()=>r(t.id),className:`rounded-md border border-zinc-800 bg-zinc-900/70 px-2.5 py-1.5 text-left hover:border-zinc-600`,children:[(()=>{let n=e.reservoirRuntime[t.id];return n?(0,Z.jsxs)(`div`,{className:`mb-1 flex items-center justify-between text-[9px] font-mono`,children:[(0,Z.jsxs)(`span`,{className:`${n.empty?`text-rose-400`:`text-sky-400`}`,children:[n.gallonsCurrent.toFixed(1),` / `,n.gallonsCapacity.toFixed(1),` gal`]}),(0,Z.jsx)(`span`,{className:`text-zinc-500`,children:n.minutesRemaining===null?`steady`:`${n.minutesRemaining.toFixed(1)} min left`})]}):null})(),(0,Z.jsxs)(`div`,{className:`flex items-baseline justify-between`,children:[(0,Z.jsx)(`span`,{className:`text-xs font-semibold text-zinc-200`,children:t.label}),(0,Z.jsxs)(`span`,{className:`font-mono text-[10px] text-zinc-500`,children:[t.volGal.toFixed(1),` Gal`]})]}),(0,Z.jsxs)(`div`,{className:`mt-1 flex items-center justify-between text-[10px] text-zinc-400`,children:[(0,Z.jsxs)(`span`,{children:[`Aeration: `,t.activeAerationGph,` GPH`]}),(0,Z.jsxs)(`span`,{className:`rounded px-1.5 py-0.5 text-[9px] font-bold ${t.tdo>=8?`bg-emerald-950 text-emerald-400 border border-emerald-800/30`:t.tdo>=7?`bg-sky-950 text-sky-300 border border-sky-800/30`:`bg-amber-950 text-amber-400 border border-amber-800/30 animate-pulse`}`,children:[t.tdo.toFixed(1),` mg/L`]})]}),(0,Z.jsxs)(`div`,{className:`mt-1.5 flex justify-between text-[9px] text-zinc-500 font-mono`,children:[(0,Z.jsxs)(`span`,{className:t.tempF>73?`text-amber-400 font-semibold`:`text-zinc-500`,children:[`Temp: `,t.tempF.toFixed(1),`°F`]}),(0,Z.jsxs)(`span`,{className:t.ph<5.5||t.ph>6.5?`text-amber-400 font-semibold`:`text-zinc-500`,children:[`pH: `,t.ph.toFixed(1)]}),(0,Z.jsxs)(`span`,{className:t.ec<.8||t.ec>2?`text-amber-400 font-semibold`:`text-zinc-500`,children:[`EC: `,t.ec.toFixed(1)]})]})]},t.id))]}),(0,Z.jsxs)(`div`,{className:`flex flex-1 flex-col gap-1 overflow-y-auto px-4 py-2.5`,children:[(0,Z.jsx)(`h3`,{className:`text-[10px] font-bold tracking-wider text-zinc-500 uppercase`,children:`Diagnostics`}),e.warnings.length===0?(0,Z.jsx)(`p`,{className:`flex items-center gap-1.5 text-xs text-emerald-400`,children:`✓ System healthy — no issues detected.`}):e.warnings.map((e,t)=>(0,Z.jsxs)(`button`,{onClick:()=>e.partId&&r(e.partId),className:`rounded-md border px-2.5 py-1 text-left text-[11px] leading-snug ${jE[e.level]} ${e.partId?`cursor-pointer hover:brightness-125`:`cursor-default`}`,children:[ME[e.level],` `,e.message]},t))]})]})}var PE=[[.5,.45],[.75,.55],[1,.75],[1.25,.95],[1.5,1.1],[2,1.55],[3,2.9],[4,3.8]];function FE(e){for(let[t,n]of PE)if(e<=t)return n;return 3.8+(e-4)*1}function IE(e){return UE(FE(e)*(120/12))}var LE={elbow:[.6,1.4,3.6],tee:[.85,1.9,4.6],cross:[1.6,3.2,7.5],yJoint:[1.4,2.8,6.5],wye:[1.4,2.8,6.5],reducer:[.9,1.8,4.2],coupling:[.45,.95,2.4],valve:[6,11,24],emitter:[1.25,1.25,1.25],reverseOsmosis:[15,30,65],generic:[1,2,5]};function RE(e,t){let n=LE[e];return n?n[t<=1?0:t<=2?1:2]:null}function zE(e){return e<=200?18:e<=400?28:e<=800?45:e<=1200?70:110}function BE(e){return e<=10?15:e<=20?25:e<=40?45:e<=75?80:130}var VE=e=>e*7.48052;function HE(e,t){switch(e){case`pump`:return zE(t.gph??400);case`reservoir`:return BE(VE((t.width??2)*(t.depth??1.4)*(t.height??1)));case`tower`:return UE(18+(t.height??4)*5+(t.sites??6)*1);case`tray`:return UE(12+(t.length??3)*(t.width??1.2)*6);case`wallPanel`:return UE(20+(t.rows??4)*(t.cols??5)*3);case`lattice`:return UE(10+(t.width??2.5)*(t.height??3)*4);case`netPot`:return UE(.75*(t.size??1));case`drain`:return(t.capacityGph??250)<=250?8:14;case`growTent`:case`tent`:return UE(90+(t.width??4)*(t.depth??4)*(t.height??6.5)*1.2);case`light`:case`growLight`:return UE(40+(t.watts??100)*.6);default:return null}}var UE=e=>Math.round(e*100)/100;function WE(e){let t=[],n=new Map,r=new Map;for(let t of e)t.type===`pipe`?lD(n,t.params.diameter??1,t):lD(r,KE(t),t);let i=[];for(let[e,r]of[...n.entries()].sort((e,t)=>e[0]-t[0])){let n=XE(e,r);i.push(n);let a=IE(e);if(t.push({key:`pipe:${e}`,partType:`pipe`,category:eD(`pipe`),description:`${iD(e)} PVC Pipe — 10 ft stick`,spec:`${aD(n.totalCutIn)} total run, ${n.cuts.length} cuts across ${r.length} pipe${r.length===1?``:`s`}`,qty:n.sticksToBuy,unit:`stick`,unitCost:a,totalCost:UE(a*n.sticksToBuy),estimated:!1,partIds:r.map(e=>e.id)}),n.spliceCount>0){let r=RE(`coupling`,e)??1;t.push({key:`coupling:${e}`,partType:`coupling`,category:eD(`pipe`),description:`${iD(e)} PVC Coupling`,spec:`splices for runs longer than 10 ft`,qty:n.spliceCount,unit:`each`,unitCost:r,totalCost:UE(r*n.spliceCount),estimated:!1,partIds:[]})}}for(let e of r.values())t.push(JE(e));tD(t);let a=new Map;for(let e of t)a.set(e.category,(a.get(e.category)??0)+e.totalCost);return{lines:t,cutLists:i,categories:[...a.entries()].map(([e,t])=>({name:e,subtotal:UE(t)})).sort((e,t)=>$E(e.name)-$E(t.name)),totalCost:UE(t.reduce((e,t)=>e+t.totalCost,0)),partCount:e.length}}var GE={pump:e=>`${e.gph??400} GPH, ${e.maxHeadFt??8} ft max head`,reservoir:e=>{let t=e.width??2,n=e.depth??1.4,r=e.height??1;return`${t} × ${n} × ${r} ft, ${VE(t*n*r).toFixed(1)} gal`},tower:e=>`${e.height??4} ft tall, ${e.sites??6} plant sites`,tray:e=>`${e.length??3} × ${e.width??1.2} ft`,wallPanel:e=>`${e.width??3} × ${e.height??4} ft, ${(e.rows??4)*(e.cols??5)} pockets`,lattice:e=>`${e.width??2.5} × ${e.height??3} ft`,netPot:e=>`size ${e.size??1}`,drain:e=>`${e.capacityGph??250} GPH capacity`};function KE(e){let t=e.params;if(e.type===`reducer`)return`${e.type}:${t.diameterA??1.5}:${t.diameterB??1}`;if(cD(t,`diameter`)&&qE(e.type)){let n=cD(t,`angle`)?`:${t.angle}`:``;return`${e.type}:${t.diameter}${n}`}let n=Object.keys(t).filter(e=>e!==`level`&&e!==`open`).sort().map(e=>`${e}=${t[e]}`).join(`,`);return`${e.type}:${n}`}function qE(e){return e in GE?!1:RE(e,1)!==null||!(e in Yx)}function JE(e){let t=e[0],{type:n,params:r}=t,i=Yx[n]?.label??nD(n),a=eD(n),o=e.length,s,c=!1,l=i,u,d=HE(n,r),f=RE(n,YE(n,r));return d===null?f!==null&&n in Yx?(s=f,cD(r,`diameter`)&&(l=`${iD(r.diameter)} ${i}`),n===`reducer`&&(l=`${iD(r.diameterA??1.5)} × ${iD(r.diameterB??1)} ${i}`),cD(r,`angle`)&&r.angle!==90&&(l+=` (${r.angle}°)`)):n in Yx&&cD(r,`diameter`)?(s=RE(`generic`,r.diameter)??5,c=!0,l=`${iD(r.diameter)} ${i}`):(s=5,c=!0,u=Object.entries(r).map(([e,t])=>`${e} ${t}`).join(`, `)||void 0):(s=d,u=GE[n]?.(r)),{key:KE(t),partType:n,category:a,description:l,spec:u,qty:o,unit:`each`,unitCost:UE(s),totalCost:UE(s*o),estimated:c,partIds:e.map(e=>e.id)}}function YE(e,t){return e===`reducer`?Math.max(t.diameterA??1.5,t.diameterB??1):t.diameter??1}function XE(e,t){let n=[],r=0;for(let e of t){let t=UE((e.params.length??2)*12);if(t<=0)continue;let i=[];for(;t>120;)i.push(120),t=UE(t-120);t>0&&i.push(t),r+=i.length-1,n.push(...i)}let i=ZE(n,120),a=UE(n.reduce((e,t)=>e+t,0));return{diameterIn:e,stickLengthIn:120,cuts:[...n].sort((e,t)=>t-e),sticks:i,sticksToBuy:i.length,totalCutIn:a,totalLeftoverIn:UE(i.reduce((e,t)=>e+t.leftoverIn,0)),spliceCount:r}}function ZE(e,t){let n=[...e].sort((e,t)=>t-e),r=[];for(let e of n){let n=!1;for(let i of r)if(i.usedIn+e<=t+1e-9){i.cuts.push(e),i.usedIn=UE(i.usedIn+e),n=!0;break}n||r.push({index:r.length+1,cuts:[e],usedIn:e,leftoverIn:0})}for(let e of r)e.leftoverIn=UE(t-e.usedIn);return r}var QE=[`Plumbing`,`Flow Control`,`Growing`,`Structure`,`Other`];function $E(e){let t=QE.indexOf(e);return t===-1?QE.length:t}function eD(e){return Yx[e]?.category??`Other`}function tD(e){e.sort((e,t)=>$E(e.category)-$E(t.category)||e.description.localeCompare(t.description))}function nD(e){return e.replace(/([a-z])([A-Z])/g,`$1 $2`).replace(/^./,e=>e.toUpperCase())}var rD={"0.25":`1/4`,"0.5":`1/2`,"0.75":`3/4`,"1.25":`1-1/4`,"1.5":`1-1/2`,"1.75":`1-3/4`,"2.5":`2-1/2`,"3.5":`3-1/2`};function iD(e){return Number.isInteger(e)?`${e} in`:`${rD[String(e)]??String(e)} in`}function aD(e){let t=Math.floor(e/12),n=UE(e-t*12);return t===0?`${sD(n)}"`:n===0?`${t}'`:`${t}' ${sD(n)}"`}function oD(e){return`$${e.toFixed(2)}`}var sD=e=>String(UE(e));function cD(e,t){return typeof e[t]==`number`}function lD(e,t,n){let r=e.get(t);r?r.push(n):e.set(t,[n])}function uD(e){let t=String(e);return/[",\n]/.test(t)?`"${t.replace(/"/g,`""`)}"`:t}var dD=(...e)=>e.map(uD).join(`,`);function fD(e){let t=[];t.push(dD(`LINE ITEMS`)),t.push(dD(`Category`,`Item`,`Spec`,`Qty`,`Unit`,`Unit Cost`,`Total`,`Pricing`));for(let n of e.lines)t.push(dD(n.category,n.description,n.spec??``,n.qty,n.unit,n.unitCost.toFixed(2),n.totalCost.toFixed(2),n.estimated?`est.`:`listed`));if(e.cutLists.length>0){t.push(``),t.push(dD(`CUT LIST`)),t.push(dD(`Diameter`,`Stick`,`Cuts (in)`,`Used (in)`,`Leftover (in)`));for(let n of e.cutLists)for(let e of n.sticks)t.push(dD(iD(n.diameterIn),`Stick ${e.index}`,e.cuts.join(` | `),e.usedIn,e.leftoverIn))}t.push(``),t.push(dD(`TOTALS`));for(let n of e.categories)t.push(dD(n.name,n.subtotal.toFixed(2)));return t.push(dD(`Grand total`,e.totalCost.toFixed(2))),t.push(dD(`Part count`,e.partCount)),t.join(` -`)}function pD(e){let t=[],n=`─`.repeat(58);t.push(`HYDRO BUILDER — SHOPPING LIST`),t.push(`${e.partCount} parts · estimated total ${oD(e.totalCost)}`),t.push(n);let r=``;for(let n of e.lines){n.category!==r&&(r=n.category,t.push(``),t.push(`${r.toUpperCase()}`));let e=n.qty>1||n.unit===`stick`?`${n.description} ×${n.qty}`:n.description,i=`${oD(n.totalCost)}${n.estimated?` est.`:``}`;t.push(` ${e.padEnd(44)} ${i}`),n.spec&&t.push(` ${n.spec}`)}if(e.cutLists.length>0){t.push(``),t.push(n),t.push(`CUT LIST (10 ft sticks)`);for(let n of e.cutLists){t.push(``),t.push(`${iD(n.diameterIn)} PVC — buy ${n.sticksToBuy} stick${n.sticksToBuy===1?``:`s`}, ${aD(n.totalCutIn)} of cuts, ${aD(n.totalLeftoverIn)} scrap`);for(let e of n.sticks){let n=e.cuts.map(e=>aD(e)).join(`, `);t.push(` Stick ${e.index}: ${n} — ${aD(e.leftoverIn)} left`)}n.spliceCount>0&&t.push(` (${n.spliceCount} coupling${n.spliceCount===1?``:`s`} needed for runs over 10 ft)`)}}t.push(``),t.push(n);for(let n of e.categories)t.push(`${n.name.padEnd(46)} ${oD(n.subtotal)}`);return t.push(`${`TOTAL (estimated)`.padEnd(46)} ${oD(e.totalCost)}`),t.join(` -`)}function mD(e,t){let n=new Blob([fD(e)],{type:`text/csv;charset=utf-8`}),r=URL.createObjectURL(n),i=document.createElement(`a`);i.href=r,i.download=`${t.replace(/[^a-z0-9-_ ]/gi,``).trim()||`hydro-system`}-bom.csv`,i.click(),URL.revokeObjectURL(r)}function hD(e){"@babel/helpers - typeof";return hD=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},hD(e)}var gD=Uint8Array,_D=Uint16Array,vD=Int32Array,yD=new gD([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),bD=new gD([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),xD=new gD([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),SD=function(e,t){for(var n=new _D(31),r=0;r<31;++r)n[r]=t+=1<>1|(kD&21845)<<1;AD=(AD&52428)>>2|(AD&13107)<<2,AD=(AD&61680)>>4|(AD&3855)<<4,OD[kD]=((AD&65280)>>8|(AD&255)<<8)>>1}for(var jD=(function(e,t,n){for(var r=e.length,i=0,a=new _D(t);i>c]=l}else for(s=new _D(r),i=0;i>15-e[i]);return s}),MD=new gD(288),kD=0;kD<144;++kD)MD[kD]=8;for(var kD=144;kD<256;++kD)MD[kD]=9;for(var kD=256;kD<280;++kD)MD[kD]=7;for(var kD=280;kD<288;++kD)MD[kD]=8;for(var ND=new gD(32),kD=0;kD<32;++kD)ND[kD]=5;var PD=jD(MD,9,0),FD=jD(ND,5,0),ID=function(e){return(e+7)/8|0},LD=function(e,t,n){return(t==null||t<0)&&(t=0),(n==null||n>e.length)&&(n=e.length),new gD(e.subarray(t,n))},RD=function(e,t,n){n<<=t&7;var r=t/8|0;e[r]|=n,e[r+1]|=n>>8},zD=function(e,t,n){n<<=t&7;var r=t/8|0;e[r]|=n,e[r+1]|=n>>8,e[r+2]|=n>>16},BD=function(e,t){for(var n=[],r=0;rf&&(f=a[r].s);var p=new _D(f+1),m=VD(n[u-1],p,0);if(m>t){var r=0,h=0,g=m-t,_=1<t)h+=_-(1<>=g;h>0;){var y=a[r].s;p[y]=0&&h;--r){var b=a[r].s;p[b]==t&&(--p[b],++h)}m=t}return{t:new gD(p),l:m}},VD=function(e,t,n){return e.s==-1?Math.max(VD(e.l,t,n+1),VD(e.r,t,n+1)):t[e.s]=n},HD=function(e){for(var t=e.length;t&&!e[--t];);for(var n=new _D(++t),r=0,i=e[0],a=1,o=function(e){n[r++]=e},s=1;s<=t;++s)if(e[s]==i&&s!=t)++a;else{if(!i&&a>2){for(;a>138;a-=138)o(32754);a>2&&(o(a>10?a-11<<5|28690:a-3<<5|12305),a=0)}else if(a>3){for(o(i),--a;a>6;a-=6)o(8304);a>2&&(o(a-3<<5|8208),a=0)}for(;a--;)o(i);a=1,i=e[s]}return{c:n.subarray(0,r),n:t}},UD=function(e,t){for(var n=0,r=0;r>8,e[i+2]=e[i]^255,e[i+3]=e[i+1]^255;for(var a=0;a4&&!E[xD[O-1]];--O);var k=l+5<<3,A=UD(i,MD)+UD(a,ND)+o,j=UD(i,f)+UD(a,h)+o+14+3*O+UD(C,E)+2*C[16]+3*C[17]+7*C[18];if(c>=0&&k<=A&&k<=j)return WD(t,u,e.subarray(c,c+l));var M,N,P,F;if(RD(t,u,1+(j15&&(RD(t,u,R[w]>>5&127),u+=R[w]>>12)}}else M=PD,N=MD,P=FD,F=ND;for(var w=0;w255){var te=z>>18&31;zD(t,u,M[te+257]),u+=N[te+257],te>7&&(RD(t,u,z>>23&31),u+=yD[te]);var B=z&31;zD(t,u,P[B]),u+=F[B],B>3&&(zD(t,u,z>>5&8191),u+=bD[B])}else zD(t,u,M[z]),u+=N[z]}return zD(t,u,M[256]),u+N[256]},KD=new vD([65540,131080,131088,131104,262176,1048704,1048832,2114560,2117632]),qD=new gD(0),JD=function(e,t,n,r,i,a){var o=a.z||e.length,s=new gD(r+o+5*(1+Math.ceil(o/7e3))+i),c=s.subarray(r,s.length-i),l=a.l,u=(a.r||0)&7;if(t){u&&(c[0]=a.r>>3);for(var d=KD[t-1],f=d>>13,p=d&8191,m=(1<7e3||E>24576)&&(M>423||!l)){u=GD(e,c,0,b,x,S,w,E,O,T-O,u),E=C=w=0,O=T;for(var N=0;N<286;++N)x[N]=0;for(var N=0;N<30;++N)S[N]=0}var P=2,F=0,I=p,L=A-j&32767;if(M>2&&k==y(T-L))for(var ee=Math.min(f,M)-1,R=Math.min(32767,T),te=Math.min(258,M);L<=R&&--I&&A!=j;){if(e[T+P]==e[T+P-L]){for(var z=0;zP){if(P=z,F=L,z>ee)break;for(var B=Math.min(L,z-2),V=0,N=0;NV&&(V=re,j=ne)}}}A=j,j=h[A],L+=A-j&32767}if(F){b[E++]=268435456|TD[P]<<18|DD[F];var ie=TD[P]&31,ae=DD[F]&31;w+=yD[ie]+bD[ae],++x[257+ie],++S[ae],D=T+P,++C}else b[E++]=e[T],++x[e[T]]}}for(T=Math.max(T,D);T=o&&(c[u/8|0]=l,oe=o),u=WD(c,u+1,e.subarray(T,oe))}a.i=o}return LD(s,0,r+ID(u)+i)},YD=function(){var e=1,t=0;return{p:function(n){for(var r=e,i=t,a=n.length|0,o=0;o!=a;){for(var s=Math.min(o+2655,a);o>16),i=(i&65535)+15*(i>>16)}e=r,t=i},d:function(){return e%=65521,t%=65521,(e&255)<<24|(e&65280)<<8|(t&255)<<8|t>>8}}},XD=function(e,t,n,r,i){if(!i&&(i={l:1},t.dictionary)){var a=t.dictionary.subarray(-32768),o=new gD(a.length+e.length);o.set(a),o.set(e,a.length),e=o,i.w=a.length}return JD(e,t.level==null?6:t.level,t.mem==null?i.l?Math.ceil(Math.max(8,Math.min(13,Math.log(e.length)))*1.5):20:12+t.mem,n,r,i)},ZD=function(e,t,n){for(;n;++t)e[t]=n,n>>>=8},QD=function(e,t){var n=t.level,r=n==0?0:n<6?1:n==9?3:2;if(e[0]=120,e[1]=r<<6|(t.dictionary&&32),e[1]|=31-(e[0]<<8|e[1])%31,t.dictionary){var i=YD();i.p(t.dictionary),ZD(e,2,i.d())}};function $D(e,t){t||={};var n=YD();n.p(e);var r=XD(e,t,t.dictionary?6:2,4);return QD(r,t),ZD(r,r.length-4,n.d()),r}var eO=typeof TextDecoder<`u`&&new TextDecoder;try{eO.decode(qD,{stream:!0})}catch{}function tO(e){if(Array.isArray(e))return e}function nO(e,t){var n=e==null?null:typeof Symbol<`u`&&e[Symbol.iterator]||e[`@@iterator`];if(n!=null){var r,i,a,o,s=[],c=!0,l=!1;try{if(a=(n=n.call(e)).next,t===0){if(Object(n)!==n)return;c=!1}else for(;!(c=(r=a.call(n)).done)&&(s.push(r.value),s.length!==t);c=!0);}catch(e){l=!0,i=e}finally{try{if(!c&&n.return!=null&&(o=n.return(),Object(o)!==o))return}finally{if(l)throw i}}return s}}function rO(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n{let e=new Uint8Array(4),t=new Uint32Array(e.buffer);return!((t[0]=1)&e[0])})(),fO={int8:globalThis.Int8Array,uint8:globalThis.Uint8Array,int16:globalThis.Int16Array,uint16:globalThis.Uint16Array,int32:globalThis.Int32Array,uint32:globalThis.Uint32Array,uint64:globalThis.BigUint64Array,int64:globalThis.BigInt64Array,float32:globalThis.Float32Array,float64:globalThis.Float64Array},pO=class e{buffer;byteLength;byteOffset;length;offset;lastWrittenByte;littleEndian;_data;_mark;_marks;constructor(t=uO,n={}){let r=!1;typeof t==`number`?t=new ArrayBuffer(t):(r=!0,this.lastWrittenByte=t.byteLength);let i=n.offset?n.offset>>>0:0,a=t.byteLength-i,o=i;(ArrayBuffer.isView(t)||t instanceof e)&&(t.byteLength!==t.buffer.byteLength&&(o=t.byteOffset+i),t=t.buffer),r?this.lastWrittenByte=a:this.lastWrittenByte=0,this.buffer=t,this.length=a,this.byteLength=a,this.byteOffset=o,this.offset=0,this.littleEndian=!0,this._data=new DataView(this.buffer,o,a),this._mark=0,this._marks=[]}available(e=1){return this.offset+e<=this.length}isLittleEndian(){return this.littleEndian}setLittleEndian(){return this.littleEndian=!0,this}isBigEndian(){return!this.littleEndian}setBigEndian(){return this.littleEndian=!1,this}skip(e=1){return this.offset+=e,this}back(e=1){return this.offset-=e,this}seek(e){return this.offset=e,this}mark(){return this._mark=this.offset,this}reset(){return this.offset=this._mark,this}pushMark(){return this._marks.push(this.offset),this}popMark(){let e=this._marks.pop();if(e===void 0)throw Error(`Mark stack empty`);return this.seek(e),this}rewind(){return this.offset=0,this}ensureAvailable(e=1){if(!this.available(e)){let t=(this.offset+e)*2,n=new Uint8Array(t);n.set(new Uint8Array(this.buffer)),this.buffer=n.buffer,this.length=t,this.byteLength=t,this._data=new DataView(this.buffer)}return this}readBoolean(){return this.readUint8()!==0}readInt8(){return this._data.getInt8(this.offset++)}readUint8(){return this._data.getUint8(this.offset++)}readByte(){return this.readUint8()}readBytes(e=1){return this.readArray(e,`uint8`)}readArray(e,t){let n=fO[t].BYTES_PER_ELEMENT*e,r=this.byteOffset+this.offset,i=this.buffer.slice(r,r+n);if(this.littleEndian===dO&&t!==`uint8`&&t!==`int8`){let e=new Uint8Array(this.buffer.slice(r,r+n));e.reverse();let i=new fO[t](e.buffer);return this.offset+=n,i.reverse(),i}let a=new fO[t](i);return this.offset+=n,a}readInt16(){let e=this._data.getInt16(this.offset,this.littleEndian);return this.offset+=2,e}readUint16(){let e=this._data.getUint16(this.offset,this.littleEndian);return this.offset+=2,e}readInt32(){let e=this._data.getInt32(this.offset,this.littleEndian);return this.offset+=4,e}readUint32(){let e=this._data.getUint32(this.offset,this.littleEndian);return this.offset+=4,e}readFloat32(){let e=this._data.getFloat32(this.offset,this.littleEndian);return this.offset+=4,e}readFloat64(){let e=this._data.getFloat64(this.offset,this.littleEndian);return this.offset+=8,e}readBigInt64(){let e=this._data.getBigInt64(this.offset,this.littleEndian);return this.offset+=8,e}readBigUint64(){let e=this._data.getBigUint64(this.offset,this.littleEndian);return this.offset+=8,e}readChar(){return String.fromCharCode(this.readInt8())}readChars(e=1){let t=``;for(let n=0;nthis.lastWrittenByte&&(this.lastWrittenByte=this.offset)}},mO=4,hO=0,gO=1,_O=2;function vO(e){let t=e.length;for(;--t>=0;)e[t]=0}var yO=0,bO=1,xO=2,SO=29,CO=256,wO=286,TO=30,EO=19,DO=573,OO=15,kO=16,AO=7,jO=256,MO=16,NO=17,PO=18,FO=new Uint8Array([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]),IO=new Uint8Array([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]),LO=new Uint8Array([0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]),RO=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),zO=512,BO=Array(288*2);vO(BO);var VO=Array(TO*2);vO(VO);var HO=Array(zO);vO(HO);var UO=Array(256);vO(UO);var WO=Array(SO);vO(WO);var GO=Array(TO);vO(GO);function KO(e,t,n,r,i){this.static_tree=e,this.extra_bits=t,this.extra_base=n,this.elems=r,this.max_length=i,this.has_stree=e&&e.length}var qO,JO,YO;function XO(e,t){this.dyn_tree=e,this.max_code=0,this.stat_desc=t}var ZO=e=>e<256?HO[e]:HO[256+(e>>>7)],QO=(e,t)=>{e.pending_buf[e.pending++]=t&255,e.pending_buf[e.pending++]=t>>>8&255},$O=(e,t,n)=>{e.bi_valid>kO-n?(e.bi_buf|=t<>kO-e.bi_valid,e.bi_valid+=n-kO):(e.bi_buf|=t<{$O(e,n[t*2],n[t*2+1])},tk=(e,t)=>{let n=0;do n|=e&1,e>>>=1,n<<=1;while(--t>0);return n>>>1},nk=e=>{e.bi_valid===16?(QO(e,e.bi_buf),e.bi_buf=0,e.bi_valid=0):e.bi_valid>=8&&(e.pending_buf[e.pending++]=e.bi_buf&255,e.bi_buf>>=8,e.bi_valid-=8)},rk=(e,t)=>{let n=t.dyn_tree,r=t.max_code,i=t.stat_desc.static_tree,a=t.stat_desc.has_stree,o=t.stat_desc.extra_bits,s=t.stat_desc.extra_base,c=t.stat_desc.max_length,l,u,d,f,p,m,h=0;for(f=0;f<=OO;f++)e.bl_count[f]=0;for(n[e.heap[e.heap_max]*2+1]=0,l=e.heap_max+1;lc&&(f=c,h++),n[u*2+1]=f,!(u>r)&&(e.bl_count[f]++,p=0,u>=s&&(p=o[u-s]),m=n[u*2],e.opt_len+=m*(f+p),a&&(e.static_len+=m*(i[u*2+1]+p)));if(h!==0){do{for(f=c-1;e.bl_count[f]===0;)f--;e.bl_count[f]--,e.bl_count[f+1]+=2,e.bl_count[c]--,h-=2}while(h>0);for(f=c;f!==0;f--)for(u=e.bl_count[f];u!==0;)d=e.heap[--l],!(d>r)&&(n[d*2+1]!==f&&(e.opt_len+=(f-n[d*2+1])*n[d*2],n[d*2+1]=f),u--)}},ik=(e,t,n)=>{let r=Array(16),i=0,a,o;for(a=1;a<=OO;a++)i=i+n[a-1]<<1,r[a]=i;for(o=0;o<=t;o++){let t=e[o*2+1];t!==0&&(e[o*2]=tk(r[t]++,t))}},ak=()=>{let e,t,n,r,i,a=Array(16);for(n=0,r=0;r>=7;r{let t;for(t=0;t{e.bi_valid>8?QO(e,e.bi_buf):e.bi_valid>0&&(e.pending_buf[e.pending++]=e.bi_buf),e.bi_buf=0,e.bi_valid=0},ck=(e,t,n,r)=>{let i=t*2,a=n*2;return e[i]{let r=e.heap[n],i=n<<1;for(;i<=e.heap_len&&(i{let r,i,a=0,o,s;if(e.sym_next!==0)do r=e.pending_buf[e.sym_buf+ a++]&255,r+=(e.pending_buf[e.sym_buf+ a++]&255)<<8,i=e.pending_buf[e.sym_buf+ a++],r===0?ek(e,i,t):(o=UO[i],ek(e,o+CO+1,t),s=FO[o],s!==0&&(i-=WO[o],$O(e,i,s)),r--,o=ZO(r),ek(e,o,n),s=IO[o],s!==0&&(r-=GO[o],$O(e,r,s)));while(a{let n=t.dyn_tree,r=t.stat_desc.static_tree,i=t.stat_desc.has_stree,a=t.stat_desc.elems,o,s,c=-1,l;for(e.heap_len=0,e.heap_max=DO,o=0;o>1;o>=1;o--)lk(e,n,o);l=a;do o=e.heap[1],e.heap[1]=e.heap[e.heap_len--],lk(e,n,1),s=e.heap[1],e.heap[--e.heap_max]=o,e.heap[--e.heap_max]=s,n[l*2]=n[o*2]+n[s*2],e.depth[l]=(e.depth[o]>=e.depth[s]?e.depth[o]:e.depth[s])+1,n[o*2+1]=n[s*2+1]=l,e.heap[1]=l++,lk(e,n,1);while(e.heap_len>=2);e.heap[--e.heap_max]=e.heap[1],rk(e,t),ik(n,c,e.bl_count)},fk=(e,t,n)=>{let r,i=-1,a,o=t[1],s=0,c=7,l=4;for(o===0&&(c=138,l=3),t[(n+1)*2+1]=65535,r=0;r<=n;r++)a=o,o=t[(r+1)*2+1],!(++s{let r,i=-1,a,o=t[1],s=0,c=7,l=4;for(o===0&&(c=138,l=3),r=0;r<=n;r++)if(a=o,o=t[(r+1)*2+1],!(++s{let t;for(fk(e,e.dyn_ltree,e.l_desc.max_code),fk(e,e.dyn_dtree,e.d_desc.max_code),dk(e,e.bl_desc),t=EO-1;t>=3&&e.bl_tree[RO[t]*2+1]===0;t--);return e.opt_len+=3*(t+1)+5+5+4,t},hk=(e,t,n,r)=>{let i;for($O(e,t-257,5),$O(e,n-1,5),$O(e,r-4,4),i=0;i{let t=4093624447,n;for(n=0;n<=31;n++,t>>>=1)if(t&1&&e.dyn_ltree[n*2]!==0)return hO;if(e.dyn_ltree[18]!==0||e.dyn_ltree[20]!==0||e.dyn_ltree[26]!==0)return gO;for(n=32;n{_k||=(ak(),!0),e.l_desc=new XO(e.dyn_ltree,qO),e.d_desc=new XO(e.dyn_dtree,JO),e.bl_desc=new XO(e.bl_tree,YO),e.bi_buf=0,e.bi_valid=0,ok(e)},yk=(e,t,n,r)=>{$O(e,(yO<<1)+ +!!r,3),sk(e),QO(e,n),QO(e,~n),n&&e.pending_buf.set(e.window.subarray(t,t+n),e.pending),e.pending+=n},bk={_tr_init:vk,_tr_stored_block:yk,_tr_flush_block:(e,t,n,r)=>{let i,a,o=0;e.level>0?(e.strm.data_type===_O&&(e.strm.data_type=gk(e)),dk(e,e.l_desc),dk(e,e.d_desc),o=mk(e),i=e.opt_len+3+7>>>3,a=e.static_len+3+7>>>3,a<=i&&(i=a)):i=a=n+5,n+4<=i&&t!==-1?yk(e,t,n,r):e.strategy===mO||a===i?($O(e,(bO<<1)+ +!!r,3),uk(e,BO,VO)):($O(e,(xO<<1)+ +!!r,3),hk(e,e.l_desc.max_code+1,e.d_desc.max_code+1,o+1),uk(e,e.dyn_ltree,e.dyn_dtree)),ok(e),r&&sk(e)},_tr_tally:(e,t,n)=>(e.pending_buf[e.sym_buf+ e.sym_next++]=t,e.pending_buf[e.sym_buf+ e.sym_next++]=t>>8,e.pending_buf[e.sym_buf+ e.sym_next++]=n,t===0?e.dyn_ltree[n*2]++:(e.matches++,t--,e.dyn_ltree[(UO[n]+CO+1)*2]++,e.dyn_dtree[ZO(t)*2]++),e.sym_next===e.sym_end),_tr_align:e=>{$O(e,bO<<1,3),ek(e,jO,BO),nk(e)}},xk=(e,t,n,r)=>{let i=e&65535|0,a=e>>>16&65535|0,o=0;for(;n!==0;){o=n>2e3?2e3:n,n-=o;do i=i+t[r++]|0,a=a+i|0;while(--o);i%=65521,a%=65521}return i|a<<16|0},Sk=new Uint32Array((()=>{let e,t=[];for(var n=0;n<256;n++){e=n;for(var r=0;r<8;r++)e=e&1?3988292384^e>>>1:e>>>1;t[n]=e}return t})()),Ck=(e,t,n,r)=>{let i=Sk,a=r+n;e^=-1;for(let n=r;n>>8^i[(e^t[n])&255];return e^-1},wk={2:`need dictionary`,1:`stream end`,0:``,"-1":`file error`,"-2":`stream error`,"-3":`data error`,"-4":`insufficient memory`,"-5":`buffer error`,"-6":`incompatible version`},Tk={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_MEM_ERROR:-4,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8},{_tr_init:Ek,_tr_stored_block:Dk,_tr_flush_block:Ok,_tr_tally:kk,_tr_align:Ak}=bk,{Z_NO_FLUSH:jk,Z_PARTIAL_FLUSH:Mk,Z_FULL_FLUSH:Nk,Z_FINISH:Pk,Z_BLOCK:Fk,Z_OK:Ik,Z_STREAM_END:Lk,Z_STREAM_ERROR:Rk,Z_DATA_ERROR:zk,Z_BUF_ERROR:Bk,Z_DEFAULT_COMPRESSION:Vk,Z_FILTERED:Hk,Z_HUFFMAN_ONLY:Uk,Z_RLE:Wk,Z_FIXED:Gk,Z_DEFAULT_STRATEGY:Kk,Z_UNKNOWN:qk,Z_DEFLATED:Jk}=Tk,Yk=9,Xk=15,Zk=8,Qk=573,$k=3,eA=258,tA=262,nA=32,rA=42,iA=57,aA=69,oA=73,sA=91,cA=103,lA=113,uA=666,dA=1,fA=2,pA=3,mA=4,hA=3,gA=(e,t)=>(e.msg=wk[t],t),_A=e=>e*2-(e>4?9:0),vA=e=>{let t=e.length;for(;--t>=0;)e[t]=0},yA=e=>{let t,n,r,i=e.w_size;t=e.hash_size,r=t;do n=e.head[--r],e.head[r]=n>=i?n-i:0;while(--t);t=i,r=t;do n=e.prev[--r],e.prev[r]=n>=i?n-i:0;while(--t)},bA=(e,t,n)=>(t<{let t=e.state,n=t.pending;n>e.avail_out&&(n=e.avail_out),n!==0&&(e.output.set(t.pending_buf.subarray(t.pending_out,t.pending_out+n),e.next_out),e.next_out+=n,t.pending_out+=n,e.total_out+=n,e.avail_out-=n,t.pending-=n,t.pending===0&&(t.pending_out=0))},SA=(e,t)=>{Ok(e,e.block_start>=0?e.block_start:-1,e.strstart-e.block_start,t),e.block_start=e.strstart,xA(e.strm)},CA=(e,t)=>{e.pending_buf[e.pending++]=t},wA=(e,t)=>{e.pending_buf[e.pending++]=t>>>8&255,e.pending_buf[e.pending++]=t&255},TA=(e,t,n,r)=>{let i=e.avail_in;return i>r&&(i=r),i===0?0:(e.avail_in-=i,t.set(e.input.subarray(e.next_in,e.next_in+i),n),e.state.wrap===1?e.adler=xk(e.adler,t,i,n):e.state.wrap===2&&(e.adler=Ck(e.adler,t,i,n)),e.next_in+=i,e.total_in+=i,i)},EA=(e,t)=>{let n=e.max_chain_length,r=e.strstart,i,a,o=e.prev_length,s=e.nice_match,c=e.strstart>e.w_size-tA?e.strstart-(e.w_size-tA):0,l=e.window,u=e.w_mask,d=e.prev,f=e.strstart+eA,p=l[r+o-1],m=l[r+o];e.prev_length>=e.good_match&&(n>>=2),s>e.lookahead&&(s=e.lookahead);do{if(i=t,l[i+o]!==m||l[i+o-1]!==p||l[i]!==l[r]||l[++i]!==l[r+1])continue;r+=2,i++;do;while(l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&l[++r]===l[++i]&&ro){if(e.match_start=t,o=a,a>=s)break;p=l[r+o-1],m=l[r+o]}}while((t=d[t&u])>c&&--n!==0);return o<=e.lookahead?o:e.lookahead},DA=e=>{let t=e.w_size,n,r,i;do{if(r=e.window_size-e.lookahead-e.strstart,e.strstart>=t+(t-tA)&&(e.window.set(e.window.subarray(t,t+t-r),0),e.match_start-=t,e.strstart-=t,e.block_start-=t,e.insert>e.strstart&&(e.insert=e.strstart),yA(e),r+=t),e.strm.avail_in===0)break;if(n=TA(e.strm,e.window,e.strstart+e.lookahead,r),e.lookahead+=n,e.lookahead+e.insert>=$k)for(i=e.strstart-e.insert,e.ins_h=e.window[i],e.ins_h=bA(e,e.ins_h,e.window[i+1]);e.insert&&(e.ins_h=bA(e,e.ins_h,e.window[i+$k-1]),e.prev[i&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=i,i++,e.insert--,!(e.lookahead+e.insert<$k)););}while(e.lookahead{let n=e.pending_buf_size-5>e.w_size?e.w_size:e.pending_buf_size-5,r,i,a,o=0,s=e.strm.avail_in;do{if(r=65535,a=e.bi_valid+42>>3,e.strm.avail_outi+e.strm.avail_in&&(r=i+e.strm.avail_in),r>a&&(r=a),r>8,e.pending_buf[e.pending-2]=~r,e.pending_buf[e.pending-1]=~r>>8,xA(e.strm),i&&(i>r&&(i=r),e.strm.output.set(e.window.subarray(e.block_start,e.block_start+i),e.strm.next_out),e.strm.next_out+=i,e.strm.avail_out-=i,e.strm.total_out+=i,e.block_start+=i,r-=i),r&&(TA(e.strm,e.strm.output,e.strm.next_out,r),e.strm.next_out+=r,e.strm.avail_out-=r,e.strm.total_out+=r)}while(o===0);return s-=e.strm.avail_in,s&&(s>=e.w_size?(e.matches=2,e.window.set(e.strm.input.subarray(e.strm.next_in-e.w_size,e.strm.next_in),0),e.strstart=e.w_size,e.insert=e.strstart):(e.window_size-e.strstart<=s&&(e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,e.insert>e.strstart&&(e.insert=e.strstart)),e.window.set(e.strm.input.subarray(e.strm.next_in-s,e.strm.next_in),e.strstart),e.strstart+=s,e.insert+=s>e.w_size-e.insert?e.w_size-e.insert:s),e.block_start=e.strstart),e.high_watera&&e.block_start>=e.w_size&&(e.block_start-=e.w_size,e.strstart-=e.w_size,e.window.set(e.window.subarray(e.w_size,e.w_size+e.strstart),0),e.matches<2&&e.matches++,a+=e.w_size,e.insert>e.strstart&&(e.insert=e.strstart)),a>e.strm.avail_in&&(a=e.strm.avail_in),a&&(TA(e.strm,e.window,e.strstart,a),e.strstart+=a,e.insert+=a>e.w_size-e.insert?e.w_size-e.insert:a),e.high_water>3,a=e.pending_buf_size-a>65535?65535:e.pending_buf_size-a,n=a>e.w_size?e.w_size:a,i=e.strstart-e.block_start,(i>=n||(i||t===Pk)&&t!==jk&&e.strm.avail_in===0&&i<=a)&&(r=i>a?a:i,o=+(t===Pk&&e.strm.avail_in===0&&r===i),Dk(e,e.block_start,r,o),e.block_start+=r,xA(e.strm)),o?pA:dA)},kA=(e,t)=>{let n,r;for(;;){if(e.lookahead=$k&&(e.ins_h=bA(e,e.ins_h,e.window[e.strstart+$k-1]),n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),n!==0&&e.strstart-n<=e.w_size-tA&&(e.match_length=EA(e,n)),e.match_length>=$k)if(r=kk(e,e.strstart-e.match_start,e.match_length-$k),e.lookahead-=e.match_length,e.match_length<=e.max_lazy_match&&e.lookahead>=$k){e.match_length--;do e.strstart++,e.ins_h=bA(e,e.ins_h,e.window[e.strstart+$k-1]),n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart;while(--e.match_length!==0);e.strstart++}else e.strstart+=e.match_length,e.match_length=0,e.ins_h=e.window[e.strstart],e.ins_h=bA(e,e.ins_h,e.window[e.strstart+1]);else r=kk(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++;if(r&&(SA(e,!1),e.strm.avail_out===0))return dA}return e.insert=e.strstart<$k-1?e.strstart:$k-1,t===Pk?(SA(e,!0),e.strm.avail_out===0?pA:mA):e.sym_next&&(SA(e,!1),e.strm.avail_out===0)?dA:fA},AA=(e,t)=>{let n,r,i;for(;;){if(e.lookahead=$k&&(e.ins_h=bA(e,e.ins_h,e.window[e.strstart+$k-1]),n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart),e.prev_length=e.match_length,e.prev_match=e.match_start,e.match_length=$k-1,n!==0&&e.prev_length4096)&&(e.match_length=$k-1)),e.prev_length>=$k&&e.match_length<=e.prev_length){i=e.strstart+e.lookahead-$k,r=kk(e,e.strstart-1-e.prev_match,e.prev_length-$k),e.lookahead-=e.prev_length-1,e.prev_length-=2;do++e.strstart<=i&&(e.ins_h=bA(e,e.ins_h,e.window[e.strstart+$k-1]),n=e.prev[e.strstart&e.w_mask]=e.head[e.ins_h],e.head[e.ins_h]=e.strstart);while(--e.prev_length!==0);if(e.match_available=0,e.match_length=$k-1,e.strstart++,r&&(SA(e,!1),e.strm.avail_out===0))return dA}else if(e.match_available){if(r=kk(e,0,e.window[e.strstart-1]),r&&SA(e,!1),e.strstart++,e.lookahead--,e.strm.avail_out===0)return dA}else e.match_available=1,e.strstart++,e.lookahead--}return e.match_available&&=(r=kk(e,0,e.window[e.strstart-1]),0),e.insert=e.strstart<$k-1?e.strstart:$k-1,t===Pk?(SA(e,!0),e.strm.avail_out===0?pA:mA):e.sym_next&&(SA(e,!1),e.strm.avail_out===0)?dA:fA},jA=(e,t)=>{let n,r,i,a,o=e.window;for(;;){if(e.lookahead<=eA){if(DA(e),e.lookahead<=eA&&t===jk)return dA;if(e.lookahead===0)break}if(e.match_length=0,e.lookahead>=$k&&e.strstart>0&&(i=e.strstart-1,r=o[i],r===o[++i]&&r===o[++i]&&r===o[++i])){a=e.strstart+eA;do;while(r===o[++i]&&r===o[++i]&&r===o[++i]&&r===o[++i]&&r===o[++i]&&r===o[++i]&&r===o[++i]&&r===o[++i]&&ie.lookahead&&(e.match_length=e.lookahead)}if(e.match_length>=$k?(n=kk(e,1,e.match_length-$k),e.lookahead-=e.match_length,e.strstart+=e.match_length,e.match_length=0):(n=kk(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++),n&&(SA(e,!1),e.strm.avail_out===0))return dA}return e.insert=0,t===Pk?(SA(e,!0),e.strm.avail_out===0?pA:mA):e.sym_next&&(SA(e,!1),e.strm.avail_out===0)?dA:fA},MA=(e,t)=>{let n;for(;;){if(e.lookahead===0&&(DA(e),e.lookahead===0)){if(t===jk)return dA;break}if(e.match_length=0,n=kk(e,0,e.window[e.strstart]),e.lookahead--,e.strstart++,n&&(SA(e,!1),e.strm.avail_out===0))return dA}return e.insert=0,t===Pk?(SA(e,!0),e.strm.avail_out===0?pA:mA):e.sym_next&&(SA(e,!1),e.strm.avail_out===0)?dA:fA};function NA(e,t,n,r,i){this.good_length=e,this.max_lazy=t,this.nice_length=n,this.max_chain=r,this.func=i}var PA=[new NA(0,0,0,0,OA),new NA(4,4,8,4,kA),new NA(4,5,16,8,kA),new NA(4,6,32,32,kA),new NA(4,4,16,16,AA),new NA(8,16,32,32,AA),new NA(8,16,128,128,AA),new NA(8,32,128,256,AA),new NA(32,128,258,1024,AA),new NA(32,258,258,4096,AA)],FA=e=>{e.window_size=2*e.w_size,vA(e.head),e.max_lazy_match=PA[e.level].max_lazy,e.good_match=PA[e.level].good_length,e.nice_match=PA[e.level].nice_length,e.max_chain_length=PA[e.level].max_chain,e.strstart=0,e.block_start=0,e.lookahead=0,e.insert=0,e.match_length=e.prev_length=$k-1,e.match_available=0,e.ins_h=0};function IA(){this.strm=null,this.status=0,this.pending_buf=null,this.pending_buf_size=0,this.pending_out=0,this.pending=0,this.wrap=0,this.gzhead=null,this.gzindex=0,this.method=Jk,this.last_flush=-1,this.w_size=0,this.w_bits=0,this.w_mask=0,this.window=null,this.window_size=0,this.prev=null,this.head=null,this.ins_h=0,this.hash_size=0,this.hash_bits=0,this.hash_mask=0,this.hash_shift=0,this.block_start=0,this.match_length=0,this.prev_match=0,this.match_available=0,this.strstart=0,this.match_start=0,this.lookahead=0,this.prev_length=0,this.max_chain_length=0,this.max_lazy_match=0,this.level=0,this.strategy=0,this.good_match=0,this.nice_match=0,this.dyn_ltree=new Uint16Array(Qk*2),this.dyn_dtree=new Uint16Array(122),this.bl_tree=new Uint16Array(78),vA(this.dyn_ltree),vA(this.dyn_dtree),vA(this.bl_tree),this.l_desc=null,this.d_desc=null,this.bl_desc=null,this.bl_count=new Uint16Array(16),this.heap=new Uint16Array(573),vA(this.heap),this.heap_len=0,this.heap_max=0,this.depth=new Uint16Array(573),vA(this.depth),this.sym_buf=0,this.lit_bufsize=0,this.sym_next=0,this.sym_end=0,this.opt_len=0,this.static_len=0,this.matches=0,this.insert=0,this.bi_buf=0,this.bi_valid=0}var LA=e=>{if(!e)return 1;let t=e.state;return+(!t||t.strm!==e||t.status!==rA&&t.status!==iA&&t.status!==aA&&t.status!==oA&&t.status!==sA&&t.status!==cA&&t.status!==lA&&t.status!==uA)},RA=e=>{if(LA(e))return gA(e,Rk);e.total_in=e.total_out=0,e.data_type=qk;let t=e.state;return t.pending=0,t.pending_out=0,t.wrap<0&&(t.wrap=-t.wrap),t.status=t.wrap===2?iA:t.wrap?rA:lA,e.adler=t.wrap===2?0:1,t.last_flush=-2,Ek(t),Ik},zA=e=>{let t=RA(e);return t===Ik&&FA(e.state),t},BA=(e,t)=>LA(e)||e.state.wrap!==2?Rk:(e.state.gzhead=t,Ik),VA=(e,t,n,r,i,a)=>{if(!e)return Rk;let o=1;if(t===Vk&&(t=6),r<0?(o=0,r=-r):r>15&&(o=2,r-=16),i<1||i>Yk||n!==Jk||r<8||r>15||t<0||t>9||a<0||a>Gk||r===8&&o!==1)return gA(e,Rk);r===8&&(r=9);let s=new IA;return e.state=s,s.strm=e,s.status=rA,s.wrap=o,s.gzhead=null,s.w_bits=r,s.w_size=1<VA(e,t,Jk,Xk,Zk,Kk),deflateInit2:VA,deflateReset:zA,deflateResetKeep:RA,deflateSetHeader:BA,deflate:(e,t)=>{if(LA(e)||t>Fk||t<0)return e?gA(e,Rk):Rk;let n=e.state;if(!e.output||e.avail_in!==0&&!e.input||n.status===uA&&t!==Pk)return gA(e,e.avail_out===0?Bk:Rk);let r=n.last_flush;if(n.last_flush=t,n.pending!==0){if(xA(e),e.avail_out===0)return n.last_flush=-1,Ik}else if(e.avail_in===0&&_A(t)<=_A(r)&&t!==Pk)return gA(e,Bk);if(n.status===uA&&e.avail_in!==0)return gA(e,Bk);if(n.status===rA&&n.wrap===0&&(n.status=lA),n.status===rA){let t=Jk+(n.w_bits-8<<4)<<8,r=-1;if(r=n.strategy>=Uk||n.level<2?0:n.level<6?1:n.level===6?2:3,t|=r<<6,n.strstart!==0&&(t|=nA),t+=31-t%31,wA(n,t),n.strstart!==0&&(wA(n,e.adler>>>16),wA(n,e.adler&65535)),e.adler=1,n.status=lA,xA(e),n.pending!==0)return n.last_flush=-1,Ik}if(n.status===iA){if(e.adler=0,CA(n,31),CA(n,139),CA(n,8),n.gzhead)CA(n,+!!n.gzhead.text+(n.gzhead.hcrc?2:0)+(n.gzhead.extra?4:0)+(n.gzhead.name?8:0)+(n.gzhead.comment?16:0)),CA(n,n.gzhead.time&255),CA(n,n.gzhead.time>>8&255),CA(n,n.gzhead.time>>16&255),CA(n,n.gzhead.time>>24&255),CA(n,n.level===9?2:n.strategy>=Uk||n.level<2?4:0),CA(n,n.gzhead.os&255),n.gzhead.extra&&n.gzhead.extra.length&&(CA(n,n.gzhead.extra.length&255),CA(n,n.gzhead.extra.length>>8&255)),n.gzhead.hcrc&&(e.adler=Ck(e.adler,n.pending_buf,n.pending,0)),n.gzindex=0,n.status=aA;else if(CA(n,0),CA(n,0),CA(n,0),CA(n,0),CA(n,0),CA(n,n.level===9?2:n.strategy>=Uk||n.level<2?4:0),CA(n,hA),n.status=lA,xA(e),n.pending!==0)return n.last_flush=-1,Ik}if(n.status===aA){if(n.gzhead.extra){let t=n.pending,r=(n.gzhead.extra.length&65535)-n.gzindex;for(;n.pending+r>n.pending_buf_size;){let i=n.pending_buf_size-n.pending;if(n.pending_buf.set(n.gzhead.extra.subarray(n.gzindex,n.gzindex+i),n.pending),n.pending=n.pending_buf_size,n.gzhead.hcrc&&n.pending>t&&(e.adler=Ck(e.adler,n.pending_buf,n.pending-t,t)),n.gzindex+=i,xA(e),n.pending!==0)return n.last_flush=-1,Ik;t=0,r-=i}let i=new Uint8Array(n.gzhead.extra);n.pending_buf.set(i.subarray(n.gzindex,n.gzindex+r),n.pending),n.pending+=r,n.gzhead.hcrc&&n.pending>t&&(e.adler=Ck(e.adler,n.pending_buf,n.pending-t,t)),n.gzindex=0}n.status=oA}if(n.status===oA){if(n.gzhead.name){let t=n.pending,r;do{if(n.pending===n.pending_buf_size){if(n.gzhead.hcrc&&n.pending>t&&(e.adler=Ck(e.adler,n.pending_buf,n.pending-t,t)),xA(e),n.pending!==0)return n.last_flush=-1,Ik;t=0}r=n.gzindext&&(e.adler=Ck(e.adler,n.pending_buf,n.pending-t,t)),n.gzindex=0}n.status=sA}if(n.status===sA){if(n.gzhead.comment){let t=n.pending,r;do{if(n.pending===n.pending_buf_size){if(n.gzhead.hcrc&&n.pending>t&&(e.adler=Ck(e.adler,n.pending_buf,n.pending-t,t)),xA(e),n.pending!==0)return n.last_flush=-1,Ik;t=0}r=n.gzindext&&(e.adler=Ck(e.adler,n.pending_buf,n.pending-t,t))}n.status=cA}if(n.status===cA){if(n.gzhead.hcrc){if(n.pending+2>n.pending_buf_size&&(xA(e),n.pending!==0))return n.last_flush=-1,Ik;CA(n,e.adler&255),CA(n,e.adler>>8&255),e.adler=0}if(n.status=lA,xA(e),n.pending!==0)return n.last_flush=-1,Ik}if(e.avail_in!==0||n.lookahead!==0||t!==jk&&n.status!==uA){let r=n.level===0?OA(n,t):n.strategy===Uk?MA(n,t):n.strategy===Wk?jA(n,t):PA[n.level].func(n,t);if((r===pA||r===mA)&&(n.status=uA),r===dA||r===pA)return e.avail_out===0&&(n.last_flush=-1),Ik;if(r===fA&&(t===Mk?Ak(n):t!==Fk&&(Dk(n,0,0,!1),t===Nk&&(vA(n.head),n.lookahead===0&&(n.strstart=0,n.block_start=0,n.insert=0))),xA(e),e.avail_out===0))return n.last_flush=-1,Ik}return t===Pk?n.wrap<=0?Lk:(n.wrap===2?(CA(n,e.adler&255),CA(n,e.adler>>8&255),CA(n,e.adler>>16&255),CA(n,e.adler>>24&255),CA(n,e.total_in&255),CA(n,e.total_in>>8&255),CA(n,e.total_in>>16&255),CA(n,e.total_in>>24&255)):(wA(n,e.adler>>>16),wA(n,e.adler&65535)),xA(e),n.wrap>0&&(n.wrap=-n.wrap),n.pending===0?Lk:Ik):Ik},deflateEnd:e=>{if(LA(e))return Rk;let t=e.state.status;return e.state=null,t===lA?gA(e,zk):Ik},deflateSetDictionary:(e,t)=>{let n=t.length;if(LA(e))return Rk;let r=e.state,i=r.wrap;if(i===2||i===1&&r.status!==rA||r.lookahead)return Rk;if(i===1&&(e.adler=xk(e.adler,t,n,0)),r.wrap=0,n>=r.w_size){i===0&&(vA(r.head),r.strstart=0,r.block_start=0,r.insert=0);let e=new Uint8Array(r.w_size);e.set(t.subarray(n-r.w_size,n),0),t=e,n=r.w_size}let a=e.avail_in,o=e.next_in,s=e.input;for(e.avail_in=n,e.next_in=0,e.input=t,DA(r);r.lookahead>=$k;){let e=r.strstart,t=r.lookahead-($k-1);do r.ins_h=bA(r,r.ins_h,r.window[e+$k-1]),r.prev[e&r.w_mask]=r.head[r.ins_h],r.head[r.ins_h]=e,e++;while(--t);r.strstart=e,r.lookahead=$k-1,DA(r)}return r.strstart+=r.lookahead,r.block_start=r.strstart,r.insert=r.lookahead,r.lookahead=0,r.match_length=r.prev_length=$k-1,r.match_available=0,e.next_in=o,e.input=s,e.avail_in=a,r.wrap=i,Ik},deflateInfo:`pako deflate (from Nodeca project)`},UA=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),WA={assign:function(e){let t=Array.prototype.slice.call(arguments,1);for(;t.length;){let n=t.shift();if(n){if(typeof n!=`object`)throw TypeError(n+`must be non-object`);for(let t in n)UA(n,t)&&(e[t]=n[t])}}return e},flattenChunks:e=>{let t=0;for(let n=0,r=e.length;n=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;KA[254]=KA[254]=1;var qA=e=>{if(typeof TextEncoder==`function`&&TextEncoder.prototype.encode)return new TextEncoder().encode(e);let t,n,r,i,a,o=e.length,s=0;for(i=0;i>>6,t[a++]=128|n&63):n<65536?(t[a++]=224|n>>>12,t[a++]=128|n>>>6&63,t[a++]=128|n&63):(t[a++]=240|n>>>18,t[a++]=128|n>>>12&63,t[a++]=128|n>>>6&63,t[a++]=128|n&63);return t},JA=(e,t)=>{if(t<65534&&e.subarray&&GA)return String.fromCharCode.apply(null,e.length===t?e:e.subarray(0,t));let n=``;for(let r=0;r{let n=t||e.length;if(typeof TextDecoder==`function`&&TextDecoder.prototype.decode)return new TextDecoder().decode(e.subarray(0,t));let r,i,a=Array(n*2);for(i=0,r=0;r4){a[i++]=65533,r+=o-1;continue}for(t&=o===2?31:o===3?15:7;o>1&&r1){a[i++]=65533;continue}t<65536?a[i++]=t:(t-=65536,a[i++]=55296|t>>10&1023,a[i++]=56320|t&1023)}return JA(a,i)},utf8border:(e,t)=>{t||=e.length,t>e.length&&(t=e.length);let n=t-1;for(;n>=0&&(e[n]&192)==128;)n--;return n<0||n===0?t:n+KA[e[n]]>t?n:t}};function XA(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg=``,this.state=null,this.data_type=2,this.adler=0}var ZA=XA,QA=Object.prototype.toString,{Z_NO_FLUSH:$A,Z_SYNC_FLUSH:ej,Z_FULL_FLUSH:tj,Z_FINISH:nj,Z_OK:rj,Z_STREAM_END:ij,Z_DEFAULT_COMPRESSION:aj,Z_DEFAULT_STRATEGY:oj,Z_DEFLATED:sj}=Tk;function cj(e){this.options=WA.assign({level:aj,method:sj,chunkSize:16384,windowBits:15,memLevel:8,strategy:oj},e||{});let t=this.options;t.raw&&t.windowBits>0?t.windowBits=-t.windowBits:t.gzip&&t.windowBits>0&&t.windowBits<16&&(t.windowBits+=16),this.err=0,this.msg=``,this.ended=!1,this.chunks=[],this.strm=new ZA,this.strm.avail_out=0;let n=HA.deflateInit2(this.strm,t.level,t.method,t.windowBits,t.memLevel,t.strategy);if(n!==rj)throw Error(wk[n]);if(t.header&&HA.deflateSetHeader(this.strm,t.header),t.dictionary){let e;if(e=typeof t.dictionary==`string`?YA.string2buf(t.dictionary):QA.call(t.dictionary)===`[object ArrayBuffer]`?new Uint8Array(t.dictionary):t.dictionary,n=HA.deflateSetDictionary(this.strm,e),n!==rj)throw Error(wk[n]);this._dict_set=!0}}cj.prototype.push=function(e,t){let n=this.strm,r=this.options.chunkSize,i,a;if(this.ended)return!1;for(a=t===~~t?t:t===!0?nj:$A,typeof e==`string`?n.input=YA.string2buf(e):QA.call(e)===`[object ArrayBuffer]`?n.input=new Uint8Array(e):n.input=e,n.next_in=0,n.avail_in=n.input.length;;){if(n.avail_out===0&&(n.output=new Uint8Array(r),n.next_out=0,n.avail_out=r),(a===ej||a===tj)&&n.avail_out<=6){this.onData(n.output.subarray(0,n.next_out)),n.avail_out=0;continue}if(i=HA.deflate(n,a),i===ij)return n.next_out>0&&this.onData(n.output.subarray(0,n.next_out)),i=HA.deflateEnd(this.strm),this.onEnd(i),this.ended=!0,i===rj;if(n.avail_out===0){this.onData(n.output);continue}if(a>0&&n.next_out>0){this.onData(n.output.subarray(0,n.next_out)),n.avail_out=0;continue}if(n.avail_in===0)break}return!0},cj.prototype.onData=function(e){this.chunks.push(e)},cj.prototype.onEnd=function(e){e===rj&&(this.result=WA.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function lj(e,t){let n=new cj(t);if(n.push(e,!0),n.err)throw n.msg||wk[n.err];return n.result}function uj(e,t){return t||={},t.raw=!0,lj(e,t)}function dj(e,t){return t||={},t.gzip=!0,lj(e,t)}var fj={Deflate:cj,deflate:lj,deflateRaw:uj,gzip:dj,constants:Tk},pj=16209,mj=16191,hj=function(e,t){let n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y,b,x,S,C,w,T,E=e.state;n=e.next_in,w=e.input,r=n+(e.avail_in-5),i=e.next_out,T=e.output,a=i-(t-e.avail_out),o=i+(e.avail_out-257),s=E.dmax,c=E.wsize,l=E.whave,u=E.wnext,d=E.window,f=E.hold,p=E.bits,m=E.lencode,h=E.distcode,g=(1<>>24,f>>>=y,p-=y,y=v>>>16&255,y===0)T[i++]=v&65535;else if(y&16){b=v&65535,y&=15,y&&(p>>=y,p-=y),p<15&&(f+=w[n++]<>>24,f>>>=y,p-=y,y=v>>>16&255,y&16){if(x=v&65535,y&=15,ps){e.msg=`invalid distance too far back`,E.mode=pj;break top}if(f>>>=y,p-=y,y=i-a,x>y){if(y=x-y,y>l&&E.sane){e.msg=`invalid distance too far back`,E.mode=pj;break top}if(S=0,C=d,u===0){if(S+=c-y,y2;)T[i++]=C[S++],T[i++]=C[S++],T[i++]=C[S++],b-=3;b&&(T[i++]=C[S++],b>1&&(T[i++]=C[S++]))}else{S=i-x;do T[i++]=T[S++],T[i++]=T[S++],T[i++]=T[S++],b-=3;while(b>2);b&&(T[i++]=T[S++],b>1&&(T[i++]=T[S++]))}}else if(y&64){e.msg=`invalid distance code`,E.mode=pj;break top}else{v=h[(v&65535)+(f&(1<>3,n-=b,p-=b<<3,f&=(1<{let c=s.bits,l=0,u=0,d=0,f=0,p=0,m=0,h=0,g=0,_=0,v=0,y,b,x,S,C,w=null,T,E=new Uint16Array(16),D=new Uint16Array(16),O=null,k,A,j;for(l=0;l<=gj;l++)E[l]=0;for(u=0;u=1&&E[f]===0;f--);if(p>f&&(p=f),f===0)return i[a++]=20971520,i[a++]=20971520,s.bits=1,0;for(d=1;d0&&(e===yj||f!==1))return-1;for(D[1]=0,l=1;l_j||e===xj&&_>vj)return 1;for(;;){k=l-h,o[u]+1=T?(A=O[o[u]-T],j=w[o[u]-T]):(A=96,j=0),y=1<>h)+b]=k<<24|A<<16|j|0;while(b!==0);for(y=1<>=1;if(y===0?v=0:(v&=y-1,v+=y),u++,--E[l]===0){if(l===f)break;l=t[n+o[u]]}if(l>p&&(v&S)!==x){for(h===0&&(h=p),C+=d,m=l-h,g=1<_j||e===xj&&_>vj)return 1;x=v&S,i[x]=p<<24|m<<16|C-a|0}}return v!==0&&(i[C+v]=l-h<<24|4194304),s.bits=p,0},Dj=0,Oj=1,kj=2,{Z_FINISH:Aj,Z_BLOCK:jj,Z_TREES:Mj,Z_OK:Nj,Z_STREAM_END:Pj,Z_NEED_DICT:Fj,Z_STREAM_ERROR:Ij,Z_DATA_ERROR:Lj,Z_MEM_ERROR:Rj,Z_BUF_ERROR:zj,Z_DEFLATED:Bj}=Tk,Vj=16180,Hj=16181,Uj=16182,Wj=16183,Gj=16184,Kj=16185,qj=16186,Jj=16187,Yj=16188,Xj=16189,Zj=16190,Qj=16191,$j=16192,eM=16193,tM=16194,nM=16195,rM=16196,iM=16197,aM=16198,oM=16199,sM=16200,cM=16201,lM=16202,uM=16203,dM=16204,fM=16205,pM=16206,mM=16207,hM=16208,gM=16209,_M=16210,vM=16211,yM=852,bM=592,xM=15,SM=e=>(e>>>24&255)+(e>>>8&65280)+((e&65280)<<8)+((e&255)<<24);function CM(){this.strm=null,this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=new Uint16Array(320),this.work=new Uint16Array(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}var wM=e=>{if(!e)return 1;let t=e.state;return+(!t||t.strm!==e||t.modevM)},TM=e=>{if(wM(e))return Ij;let t=e.state;return e.total_in=e.total_out=t.total=0,e.msg=``,t.wrap&&(e.adler=t.wrap&1),t.mode=Vj,t.last=0,t.havedict=0,t.flags=-1,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=new Int32Array(yM),t.distcode=t.distdyn=new Int32Array(bM),t.sane=1,t.back=-1,Nj},EM=e=>{if(wM(e))return Ij;let t=e.state;return t.wsize=0,t.whave=0,t.wnext=0,TM(e)},DM=(e,t)=>{let n;if(wM(e))return Ij;let r=e.state;return t<0?(n=0,t=-t):(n=(t>>4)+5,t<48&&(t&=15)),t&&(t<8||t>15)?Ij:(r.window!==null&&r.wbits!==t&&(r.window=null),r.wrap=n,r.wbits=t,EM(e))},OM=(e,t)=>{if(!e)return Ij;let n=new CM;e.state=n,n.strm=e,n.window=null,n.mode=Vj;let r=DM(e,t);return r!==Nj&&(e.state=null),r},kM=e=>OM(e,xM),AM=!0,jM,MM,NM=e=>{if(AM){jM=new Int32Array(512),MM=new Int32Array(32);let t=0;for(;t<144;)e.lens[t++]=8;for(;t<256;)e.lens[t++]=9;for(;t<280;)e.lens[t++]=7;for(;t<288;)e.lens[t++]=8;for(Ej(Oj,e.lens,0,288,jM,0,e.work,{bits:9}),t=0;t<32;)e.lens[t++]=5;Ej(kj,e.lens,0,32,MM,0,e.work,{bits:5}),AM=!1}e.lencode=jM,e.lenbits=9,e.distcode=MM,e.distbits=5},PM=(e,t,n,r)=>{let i,a=e.state;return a.window===null&&(a.wsize=1<=a.wsize?(a.window.set(t.subarray(n-a.wsize,n),0),a.wnext=0,a.whave=a.wsize):(i=a.wsize-a.wnext,i>r&&(i=r),a.window.set(t.subarray(n-r,n-r+i),a.wnext),r-=i,r?(a.window.set(t.subarray(n-r,n),0),a.wnext=r,a.whave=a.wsize):(a.wnext+=i,a.wnext===a.wsize&&(a.wnext=0),a.whave{let n,r,i,a,o,s,c,l,u,d,f,p,m,h,g=0,_,v,y,b,x,S,C,w,T=new Uint8Array(4),E,D,O=new Uint8Array([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]);if(wM(e)||!e.output||!e.input&&e.avail_in!==0)return Ij;n=e.state,n.mode===Qj&&(n.mode=$j),o=e.next_out,i=e.output,c=e.avail_out,a=e.next_in,r=e.input,s=e.avail_in,l=n.hold,u=n.bits,d=s,f=c,w=Nj;inf_leave:for(;;)switch(n.mode){case Vj:if(n.wrap===0){n.mode=$j;break}for(;u<16;){if(s===0)break inf_leave;s--,l+=r[a++]<>>8&255,n.check=Ck(n.check,T,2,0),l=0,u=0,n.mode=Hj;break}if(n.head&&(n.head.done=!1),!(n.wrap&1)||(((l&255)<<8)+(l>>8))%31){e.msg=`incorrect header check`,n.mode=gM;break}if((l&15)!==Bj){e.msg=`unknown compression method`,n.mode=gM;break}if(l>>>=4,u-=4,C=(l&15)+8,n.wbits===0&&(n.wbits=C),C>15||C>n.wbits){e.msg=`invalid window size`,n.mode=gM;break}n.dmax=1<>8&1),n.flags&512&&n.wrap&4&&(T[0]=l&255,T[1]=l>>>8&255,n.check=Ck(n.check,T,2,0)),l=0,u=0,n.mode=Uj;case Uj:for(;u<32;){if(s===0)break inf_leave;s--,l+=r[a++]<>>8&255,T[2]=l>>>16&255,T[3]=l>>>24&255,n.check=Ck(n.check,T,4,0)),l=0,u=0,n.mode=Wj;case Wj:for(;u<16;){if(s===0)break inf_leave;s--,l+=r[a++]<>8),n.flags&512&&n.wrap&4&&(T[0]=l&255,T[1]=l>>>8&255,n.check=Ck(n.check,T,2,0)),l=0,u=0,n.mode=Gj;case Gj:if(n.flags&1024){for(;u<16;){if(s===0)break inf_leave;s--,l+=r[a++]<>>8&255,n.check=Ck(n.check,T,2,0)),l=0,u=0}else n.head&&(n.head.extra=null);n.mode=Kj;case Kj:if(n.flags&1024&&(p=n.length,p>s&&(p=s),p&&(n.head&&(C=n.head.extra_len-n.length,n.head.extra||(n.head.extra=new Uint8Array(n.head.extra_len)),n.head.extra.set(r.subarray(a,a+p),C)),n.flags&512&&n.wrap&4&&(n.check=Ck(n.check,r,p,a)),s-=p,a+=p,n.length-=p),n.length))break inf_leave;n.length=0,n.mode=qj;case qj:if(n.flags&2048){if(s===0)break inf_leave;p=0;do C=r[a+ p++],n.head&&C&&n.length<65536&&(n.head.name+=String.fromCharCode(C));while(C&&p>9&1,n.head.done=!0),e.adler=n.check=0,n.mode=Qj;break;case Xj:for(;u<32;){if(s===0)break inf_leave;s--,l+=r[a++]<>>=u&7,u-=u&7,n.mode=pM;break}for(;u<3;){if(s===0)break inf_leave;s--,l+=r[a++]<>>=1,--u,l&3){case 0:n.mode=eM;break;case 1:if(NM(n),n.mode=oM,t===Mj){l>>>=2,u-=2;break inf_leave}break;case 2:n.mode=rM;break;case 3:e.msg=`invalid block type`,n.mode=gM}l>>>=2,u-=2;break;case eM:for(l>>>=u&7,u-=u&7;u<32;){if(s===0)break inf_leave;s--,l+=r[a++]<>>16^65535)){e.msg=`invalid stored block lengths`,n.mode=gM;break}if(n.length=l&65535,l=0,u=0,n.mode=tM,t===Mj)break inf_leave;case tM:n.mode=nM;case nM:if(p=n.length,p){if(p>s&&(p=s),p>c&&(p=c),p===0)break inf_leave;i.set(r.subarray(a,a+p),o),s-=p,a+=p,c-=p,o+=p,n.length-=p;break}n.mode=Qj;break;case rM:for(;u<14;){if(s===0)break inf_leave;s--,l+=r[a++]<>>=5,u-=5,n.ndist=(l&31)+1,l>>>=5,u-=5,n.ncode=(l&15)+4,l>>>=4,u-=4,n.nlen>286||n.ndist>30){e.msg=`too many length or distance symbols`,n.mode=gM;break}n.have=0,n.mode=iM;case iM:for(;n.have>>=3,u-=3}for(;n.have<19;)n.lens[O[n.have++]]=0;if(n.lencode=n.lendyn,n.lenbits=7,E={bits:n.lenbits},w=Ej(Dj,n.lens,0,19,n.lencode,0,n.work,E),n.lenbits=E.bits,w){e.msg=`invalid code lengths set`,n.mode=gM;break}n.have=0,n.mode=aM;case aM:for(;n.have>>24,v=g>>>16&255,y=g&65535,!(_<=u);){if(s===0)break inf_leave;s--,l+=r[a++]<>>=_,u-=_,n.lens[n.have++]=y;else{if(y===16){for(D=_+2;u>>=_,u-=_,n.have===0){e.msg=`invalid bit length repeat`,n.mode=gM;break}C=n.lens[n.have-1],p=3+(l&3),l>>>=2,u-=2}else if(y===17){for(D=_+3;u>>=_,u-=_,C=0,p=3+(l&7),l>>>=3,u-=3}else{for(D=_+7;u>>=_,u-=_,C=0,p=11+(l&127),l>>>=7,u-=7}if(n.have+p>n.nlen+n.ndist){e.msg=`invalid bit length repeat`,n.mode=gM;break}for(;p--;)n.lens[n.have++]=C}}if(n.mode===gM)break;if(n.lens[256]===0){e.msg=`invalid code -- missing end-of-block`,n.mode=gM;break}if(n.lenbits=9,E={bits:n.lenbits},w=Ej(Oj,n.lens,0,n.nlen,n.lencode,0,n.work,E),n.lenbits=E.bits,w){e.msg=`invalid literal/lengths set`,n.mode=gM;break}if(n.distbits=6,n.distcode=n.distdyn,E={bits:n.distbits},w=Ej(kj,n.lens,n.nlen,n.ndist,n.distcode,0,n.work,E),n.distbits=E.bits,w){e.msg=`invalid distances set`,n.mode=gM;break}if(n.mode=oM,t===Mj)break inf_leave;case oM:n.mode=sM;case sM:if(s>=6&&c>=258){e.next_out=o,e.avail_out=c,e.next_in=a,e.avail_in=s,n.hold=l,n.bits=u,hj(e,f),o=e.next_out,i=e.output,c=e.avail_out,a=e.next_in,r=e.input,s=e.avail_in,l=n.hold,u=n.bits,n.mode===Qj&&(n.back=-1);break}for(n.back=0;g=n.lencode[l&(1<>>24,v=g>>>16&255,y=g&65535,!(_<=u);){if(s===0)break inf_leave;s--,l+=r[a++]<>b)],_=g>>>24,v=g>>>16&255,y=g&65535,!(b+_<=u);){if(s===0)break inf_leave;s--,l+=r[a++]<>>=b,u-=b,n.back+=b}if(l>>>=_,u-=_,n.back+=_,n.length=y,v===0){n.mode=fM;break}if(v&32){n.back=-1,n.mode=Qj;break}if(v&64){e.msg=`invalid literal/length code`,n.mode=gM;break}n.extra=v&15,n.mode=cM;case cM:if(n.extra){for(D=n.extra;u>>=n.extra,u-=n.extra,n.back+=n.extra}n.was=n.length,n.mode=lM;case lM:for(;g=n.distcode[l&(1<>>24,v=g>>>16&255,y=g&65535,!(_<=u);){if(s===0)break inf_leave;s--,l+=r[a++]<>b)],_=g>>>24,v=g>>>16&255,y=g&65535,!(b+_<=u);){if(s===0)break inf_leave;s--,l+=r[a++]<>>=b,u-=b,n.back+=b}if(l>>>=_,u-=_,n.back+=_,v&64){e.msg=`invalid distance code`,n.mode=gM;break}n.offset=y,n.extra=v&15,n.mode=uM;case uM:if(n.extra){for(D=n.extra;u>>=n.extra,u-=n.extra,n.back+=n.extra}if(n.offset>n.dmax){e.msg=`invalid distance too far back`,n.mode=gM;break}n.mode=dM;case dM:if(c===0)break inf_leave;if(p=f-c,n.offset>p){if(p=n.offset-p,p>n.whave&&n.sane){e.msg=`invalid distance too far back`,n.mode=gM;break}p>n.wnext?(p-=n.wnext,m=n.wsize-p):m=n.wnext-p,p>n.length&&(p=n.length),h=n.window}else h=i,m=o-n.offset,p=n.length;p>c&&(p=c),c-=p,n.length-=p;do i[o++]=h[m++];while(--p);n.length===0&&(n.mode=sM);break;case fM:if(c===0)break inf_leave;i[o++]=n.length,c--,n.mode=sM;break;case pM:if(n.wrap){for(;u<32;){if(s===0)break inf_leave;s--,l|=r[a++]<{if(wM(e))return Ij;let t=e.state;return t.window&&=null,e.state=null,Nj},inflateGetHeader:(e,t)=>{if(wM(e))return Ij;let n=e.state;return n.wrap&2?(n.head=t,t.done=!1,Nj):Ij},inflateSetDictionary:(e,t)=>{let n=t.length,r,i,a;return wM(e)||(r=e.state,r.wrap!==0&&r.mode!==Zj)?Ij:r.mode===Zj&&(i=1,i=xk(i,t,n,0),i!==r.check)?Lj:(a=PM(e,t,n,n),a?(r.mode=_M,Rj):(r.havedict=1,Nj))},inflateInfo:`pako inflate (from Nodeca project)`};function IM(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name=``,this.comment=``,this.hcrc=0,this.done=!1}var LM=IM,RM=Object.prototype.toString,{Z_NO_FLUSH:zM,Z_FINISH:BM,Z_OK:VM,Z_STREAM_END:HM,Z_NEED_DICT:UM,Z_STREAM_ERROR:WM,Z_DATA_ERROR:GM,Z_MEM_ERROR:KM}=Tk;function qM(e){this.options=WA.assign({chunkSize:1024*64,windowBits:15,to:``},e||{});let t=this.options;t.raw&&t.windowBits>=0&&t.windowBits<16&&(t.windowBits=-t.windowBits,t.windowBits===0&&(t.windowBits=-15)),t.windowBits>=0&&t.windowBits<16&&!(e&&e.windowBits)&&(t.windowBits+=32),t.windowBits>15&&t.windowBits<48&&(t.windowBits&15||(t.windowBits|=15)),this.err=0,this.msg=``,this.ended=!1,this.chunks=[],this.strm=new ZA,this.strm.avail_out=0;let n=FM.inflateInit2(this.strm,t.windowBits);if(n!==VM||(this.header=new LM,FM.inflateGetHeader(this.strm,this.header),t.dictionary&&(typeof t.dictionary==`string`?t.dictionary=YA.string2buf(t.dictionary):RM.call(t.dictionary)===`[object ArrayBuffer]`&&(t.dictionary=new Uint8Array(t.dictionary)),t.raw&&(n=FM.inflateSetDictionary(this.strm,t.dictionary),n!==VM))))throw Error(wk[n])}qM.prototype.push=function(e,t){let n=this.strm,r=this.options.chunkSize,i=this.options.dictionary,a,o,s;if(this.ended)return!1;for(o=t===~~t?t:t===!0?BM:zM,RM.call(e)===`[object ArrayBuffer]`?n.input=new Uint8Array(e):n.input=e,n.next_in=0,n.avail_in=n.input.length;;){for(n.avail_out===0&&(n.output=new Uint8Array(r),n.next_out=0,n.avail_out=r),a=FM.inflate(n,o),a===UM&&i&&(a=FM.inflateSetDictionary(n,i),a===VM?a=FM.inflate(n,o):a===GM&&(a=UM));n.avail_in>0&&a===HM&&n.state.wrap>0&&e[n.next_in]!==0;)FM.inflateReset(n),a=FM.inflate(n,o);switch(a){case WM:case GM:case UM:case KM:return this.onEnd(a),this.ended=!0,!1}if(s=n.avail_out,n.next_out&&(n.avail_out===0||a===HM))if(this.options.to===`string`){let e=YA.utf8border(n.output,n.next_out),t=n.next_out-e,i=YA.buf2string(n.output,e);n.next_out=t,n.avail_out=r-t,t&&n.output.set(n.output.subarray(e,e+t),0),this.onData(i)}else this.onData(n.output.length===n.next_out?n.output:n.output.subarray(0,n.next_out));if(!(a===VM&&s===0)){if(a===HM)return a=FM.inflateEnd(this.strm),this.onEnd(a),this.ended=!0,!0;if(n.avail_in===0)break}}return!0},qM.prototype.onData=function(e){this.chunks.push(e)},qM.prototype.onEnd=function(e){e===VM&&(this.options.to===`string`?this.result=this.chunks.join(``):this.result=WA.flattenChunks(this.chunks)),this.chunks=[],this.err=e,this.msg=this.strm.msg};function JM(e,t){let n=new qM(t);if(n.push(e),n.err)throw n.msg||wk[n.err];return n.result}function YM(e,t){return t||={},t.raw=!0,JM(e,t)}var XM={Inflate:qM,inflate:JM,inflateRaw:YM,ungzip:JM,constants:Tk},{Deflate:ZM,deflate:QM,deflateRaw:$M,gzip:eN}=fj,{Inflate:tN,inflate:nN,inflateRaw:rN,ungzip:iN}=XM,aN=tN,oN=nN,sN=[];for(let e=0;e<256;e++){let t=e;for(let e=0;e<8;e++)t&1?t=3988292384^t>>>1:t>>>=1;sN[e]=t}var cN=4294967295;function lN(e,t,n){let r=e;for(let e=0;e>>8;return r}function uN(e,t){return(lN(cN,e,t)^cN)>>>0}function dN(e,t,n){let r=e.readUint32(),i=uN(new Uint8Array(e.buffer,e.byteOffset+e.offset-t-4,t),t);if(i!==r)throw Error(`CRC mismatch for chunk ${n}. Expected ${r}, found ${i}`)}function fN(e,t,n){for(let r=0;r>1)&255}else{for(;a>1)&255;for(;a>1)&255}}function gN(e,t,n,r,i){let a=0;if(n.length===0){for(;a=n||o>=r))for(let e=0;e>8&255}var CN=new Uint16Array([255]),wN=new Uint8Array(CN.buffer)[0]===255,TN=new Uint8Array;function EN(e){let{data:t,width:n,height:r,channels:i,depth:a}=e,o=Math.ceil(a/8)*i,s=Math.ceil(a/8*i*n),c=new Uint8Array(r*s),l=TN,u=0,d,f;for(let e=0;e>8&255}var ON=Uint8Array.of(137,80,78,71,13,10,26,10);function kN(e){if(!AN(e.readBytes(ON.length)))throw Error(`wrong PNG signature`)}function AN(e){if(e.length79)throw Error(`keyword length must be between 1 and 79`)}var FN=/^[\u0000-\u00FF]*$/;function IN(e){if(!FN.test(e))throw Error(`invalid latin1 text`)}function LN(e,t,n){let r=RN(t);e[r]=zN(t,n-r.length-1)}function RN(e){for(e.mark();e.readByte()!==MN;);let t=e.offset;e.reset();let n=NN.decode(e.readBytes(t-e.offset-1));return e.skip(1),PN(n),n}function zN(e,t){return NN.decode(e.readBytes(t))}var BN={UNKNOWN:-1,GREYSCALE:0,TRUECOLOUR:2,INDEXED_COLOUR:3,GREYSCALE_ALPHA:4,TRUECOLOUR_ALPHA:6},VN={UNKNOWN:-1,DEFLATE:0},HN={UNKNOWN:-1,ADAPTIVE:0},UN={UNKNOWN:-1,NO_INTERLACE:0,ADAM7:1},WN={NONE:0,BACKGROUND:1,PREVIOUS:2},GN={SOURCE:0,OVER:1},KN=class extends pO{_checkCrc;_inflator;_png;_apng;_end;_hasPalette;_palette;_hasTransparency;_transparency;_compressionMethod;_filterMethod;_interlaceMethod;_colorType;_isAnimated;_numberOfFrames;_numberOfPlays;_frames;_writingDataChunks;constructor(e,t={}){super(e);let{checkCrc:n=!1}=t;this._checkCrc=n,this._inflator=new aN,this._png={width:-1,height:-1,channels:-1,data:new Uint8Array,depth:1,text:{}},this._apng={width:-1,height:-1,channels:-1,depth:1,numberOfFrames:1,numberOfPlays:0,text:{},frames:[]},this._end=!1,this._hasPalette=!1,this._palette=[],this._hasTransparency=!1,this._transparency=new Uint16Array,this._compressionMethod=VN.UNKNOWN,this._filterMethod=HN.UNKNOWN,this._interlaceMethod=UN.UNKNOWN,this._colorType=BN.UNKNOWN,this._isAnimated=!1,this._numberOfFrames=1,this._numberOfPlays=0,this._frames=[],this._writingDataChunks=!1,this.setBigEndian()}decode(){for(kN(this);!this._end;){let e=this.readUint32(),t=this.readChars(4);this.decodeChunk(e,t)}return this.decodeImage(),this._png}decodeApng(){for(kN(this);!this._end;){let e=this.readUint32(),t=this.readChars(4);this.decodeApngChunk(e,t)}return this.decodeApngImage(),this._apng}decodeChunk(e,t){let n=this.offset;switch(t){case`IHDR`:this.decodeIHDR();break;case`PLTE`:this.decodePLTE(e);break;case`IDAT`:this.decodeIDAT(e);break;case`IEND`:this._end=!0;break;case`tRNS`:this.decodetRNS(e);break;case`iCCP`:this.decodeiCCP(e);break;case jN:LN(this._png.text,this,e);break;case`pHYs`:this.decodepHYs();break;default:this.skip(e);break}if(this.offset-n!==e)throw Error(`Length mismatch while decoding chunk ${t}`);this._checkCrc?dN(this,e+4,t):this.skip(4)}decodeApngChunk(e,t){let n=this.offset;switch(t!==`fdAT`&&t!==`IDAT`&&this._writingDataChunks&&this.pushDataToFrame(),t){case`acTL`:this.decodeACTL();break;case`fcTL`:this.decodeFCTL();break;case`fdAT`:this.decodeFDAT(e);break;default:this.decodeChunk(e,t),this.offset=n+e;break}if(this.offset-n!==e)throw Error(`Length mismatch while decoding chunk ${t}`);this._checkCrc?dN(this,e+4,t):this.skip(4)}decodeIHDR(){let e=this._png;e.width=this.readUint32(),e.height=this.readUint32(),e.depth=qN(this.readUint8());let t=this.readUint8();this._colorType=t;let n;switch(t){case BN.GREYSCALE:n=1;break;case BN.TRUECOLOUR:n=3;break;case BN.INDEXED_COLOUR:n=1;break;case BN.GREYSCALE_ALPHA:n=2;break;case BN.TRUECOLOUR_ALPHA:n=4;break;case BN.UNKNOWN:default:throw Error(`Unknown color type: ${t}`)}if(this._png.channels=n,this._compressionMethod=this.readUint8(),this._compressionMethod!==VN.DEFLATE)throw Error(`Unsupported compression method: ${this._compressionMethod}`);this._filterMethod=this.readUint8(),this._interlaceMethod=this.readUint8()}decodeACTL(){this._numberOfFrames=this.readUint32(),this._numberOfPlays=this.readUint32(),this._isAnimated=!0}decodeFCTL(){let e={sequenceNumber:this.readUint32(),width:this.readUint32(),height:this.readUint32(),xOffset:this.readUint32(),yOffset:this.readUint32(),delayNumber:this.readUint16(),delayDenominator:this.readUint16(),disposeOp:this.readUint8(),blendOp:this.readUint8(),data:new Uint8Array};this._frames.push(e)}decodePLTE(e){if(e%3!=0)throw RangeError(`PLTE field length must be a multiple of 3. Got ${e}`);let t=e/3;this._hasPalette=!0;let n=[];this._palette=n;for(let e=0;ethis._png.width*this._png.height)throw Error(`tRNS chunk contains more alpha values than there are pixels (${e/2} vs ${this._png.width*this._png.height})`);this._hasTransparency=!0,this._transparency=new Uint16Array(e/2);for(let t=0;tthis._palette.length)throw Error(`tRNS chunk contains more alpha values than there are palette colors (${e} vs ${this._palette.length})`);let t=0;for(;t({index:((e+t.yOffset)*this._png.width+t.xOffset+n)*this._png.channels,frameIndex:(e*t.width+n)*this._png.channels});switch(t.blendOp){case GN.SOURCE:for(let n=0;n=200&&t.status<=299}function tP(e){try{e.dispatchEvent(new MouseEvent(`click`))}catch{var t=document.createEvent(`MouseEvents`);t.initMouseEvent(`click`,!0,!0,window,0,0,0,80,20,!1,!1,!1,!1,0,null),e.dispatchEvent(t)}}var nP=XN.saveAs||((typeof window>`u`?`undefined`:hD(window))!==`object`||window!==XN?function(){}:typeof HTMLAnchorElement<`u`&&`download`in HTMLAnchorElement.prototype?function(e,t,n){var r=XN.URL||XN.webkitURL,i=document.createElement(`a`);t=t||e.name||`download`,i.download=t,i.rel=`noopener`,typeof e==`string`?(i.href=e,i.origin===location.origin?tP(i):eP(i.href)?$N(e,t,n):tP(i,i.target=`_blank`)):(i.href=r.createObjectURL(e),setTimeout(function(){r.revokeObjectURL(i.href)},4e4),setTimeout(function(){tP(i)},0))}:`msSaveOrOpenBlob`in navigator?function(e,t,n){if(t=t||e.name||`download`,typeof e==`string`)if(eP(e))$N(e,t,n);else{var r=document.createElement(`a`);r.href=e,r.target=`_blank`,setTimeout(function(){tP(r)})}else navigator.msSaveOrOpenBlob(function(e,t){return t===void 0?t={autoBom:!1}:hD(t)!==`object`&&(QN.warn(`Deprecated: Expected third argument to be a object`),t={autoBom:!t}),t.autoBom&&/^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(e.type)?new Blob([``,e],{type:e.type}):e}(e,n),t)}:function(e,t,n,r){if((r||=open(``,`_blank`))&&(r.document.title=r.document.body.innerText=`downloading...`),typeof e==`string`)return $N(e,t,n);var i=e.type===`application/octet-stream`,a=/constructor/i.test(XN.HTMLElement)||XN.safari,o=/CriOS\/[\d]+/.test(navigator.userAgent);if((o||i&&a)&&(typeof FileReader>`u`?`undefined`:hD(FileReader))===`object`){var s=new FileReader;s.onloadend=function(){var e=s.result;e=o?e:e.replace(/^data:[^;]*;/,`data:attachment/file;`),r?r.location.href=e:location=e,r=null},s.readAsDataURL(e)}else{var c=XN.URL||XN.webkitURL,l=c.createObjectURL(e);r?r.location=l:location.href=l,r=null,setTimeout(function(){c.revokeObjectURL(l)},4e4)}});function rP(e){var t;e||=``,this.ok=!1,e.charAt(0)==`#`&&(e=e.substr(1,6)),e={aliceblue:`f0f8ff`,antiquewhite:`faebd7`,aqua:`00ffff`,aquamarine:`7fffd4`,azure:`f0ffff`,beige:`f5f5dc`,bisque:`ffe4c4`,black:`000000`,blanchedalmond:`ffebcd`,blue:`0000ff`,blueviolet:`8a2be2`,brown:`a52a2a`,burlywood:`deb887`,cadetblue:`5f9ea0`,chartreuse:`7fff00`,chocolate:`d2691e`,coral:`ff7f50`,cornflowerblue:`6495ed`,cornsilk:`fff8dc`,crimson:`dc143c`,cyan:`00ffff`,darkblue:`00008b`,darkcyan:`008b8b`,darkgoldenrod:`b8860b`,darkgray:`a9a9a9`,darkgreen:`006400`,darkkhaki:`bdb76b`,darkmagenta:`8b008b`,darkolivegreen:`556b2f`,darkorange:`ff8c00`,darkorchid:`9932cc`,darkred:`8b0000`,darksalmon:`e9967a`,darkseagreen:`8fbc8f`,darkslateblue:`483d8b`,darkslategray:`2f4f4f`,darkturquoise:`00ced1`,darkviolet:`9400d3`,deeppink:`ff1493`,deepskyblue:`00bfff`,dimgray:`696969`,dodgerblue:`1e90ff`,feldspar:`d19275`,firebrick:`b22222`,floralwhite:`fffaf0`,forestgreen:`228b22`,fuchsia:`ff00ff`,gainsboro:`dcdcdc`,ghostwhite:`f8f8ff`,gold:`ffd700`,goldenrod:`daa520`,gray:`808080`,green:`008000`,greenyellow:`adff2f`,honeydew:`f0fff0`,hotpink:`ff69b4`,indianred:`cd5c5c`,indigo:`4b0082`,ivory:`fffff0`,khaki:`f0e68c`,lavender:`e6e6fa`,lavenderblush:`fff0f5`,lawngreen:`7cfc00`,lemonchiffon:`fffacd`,lightblue:`add8e6`,lightcoral:`f08080`,lightcyan:`e0ffff`,lightgoldenrodyellow:`fafad2`,lightgrey:`d3d3d3`,lightgreen:`90ee90`,lightpink:`ffb6c1`,lightsalmon:`ffa07a`,lightseagreen:`20b2aa`,lightskyblue:`87cefa`,lightslateblue:`8470ff`,lightslategray:`778899`,lightsteelblue:`b0c4de`,lightyellow:`ffffe0`,lime:`00ff00`,limegreen:`32cd32`,linen:`faf0e6`,magenta:`ff00ff`,maroon:`800000`,mediumaquamarine:`66cdaa`,mediumblue:`0000cd`,mediumorchid:`ba55d3`,mediumpurple:`9370d8`,mediumseagreen:`3cb371`,mediumslateblue:`7b68ee`,mediumspringgreen:`00fa9a`,mediumturquoise:`48d1cc`,mediumvioletred:`c71585`,midnightblue:`191970`,mintcream:`f5fffa`,mistyrose:`ffe4e1`,moccasin:`ffe4b5`,navajowhite:`ffdead`,navy:`000080`,oldlace:`fdf5e6`,olive:`808000`,olivedrab:`6b8e23`,orange:`ffa500`,orangered:`ff4500`,orchid:`da70d6`,palegoldenrod:`eee8aa`,palegreen:`98fb98`,paleturquoise:`afeeee`,palevioletred:`d87093`,papayawhip:`ffefd5`,peachpuff:`ffdab9`,peru:`cd853f`,pink:`ffc0cb`,plum:`dda0dd`,powderblue:`b0e0e6`,purple:`800080`,red:`ff0000`,rosybrown:`bc8f8f`,royalblue:`4169e1`,saddlebrown:`8b4513`,salmon:`fa8072`,sandybrown:`f4a460`,seagreen:`2e8b57`,seashell:`fff5ee`,sienna:`a0522d`,silver:`c0c0c0`,skyblue:`87ceeb`,slateblue:`6a5acd`,slategray:`708090`,snow:`fffafa`,springgreen:`00ff7f`,steelblue:`4682b4`,tan:`d2b48c`,teal:`008080`,thistle:`d8bfd8`,tomato:`ff6347`,turquoise:`40e0d0`,violet:`ee82ee`,violetred:`d02090`,wheat:`f5deb3`,white:`ffffff`,whitesmoke:`f5f5f5`,yellow:`ffff00`,yellowgreen:`9acd32`}[e=(e=e.replace(/ /g,``)).toLowerCase()]||e;for(var n=[{re:/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,example:[`rgb(123, 234, 45)`,`rgb(255,234,245)`],process:function(e){return[parseInt(e[1]),parseInt(e[2]),parseInt(e[3])]}},{re:/^(\w{2})(\w{2})(\w{2})$/,example:[`#00ff00`,`336699`],process:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/^(\w{1})(\w{1})(\w{1})$/,example:[`#fb0`,`f0f`],process:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}}],r=0;r255?255:this.r,this.g=this.g<0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b,this.toRGB=function(){return`rgb(`+this.r+`, `+this.g+`, `+this.b+`)`},this.toHex=function(){var e=this.r.toString(16),t=this.g.toString(16),n=this.b.toString(16);return e.length==1&&(e=`0`+e),t.length==1&&(t=`0`+t),n.length==1&&(n=`0`+n),`#`+e+t+n}}var iP=XN.atob.bind(XN),aP=XN.btoa.bind(XN);function oP(e,t){var n=e[0],r=e[1],i=e[2],a=e[3];n=cP(n,r,i,a,t[0],7,-680876936),a=cP(a,n,r,i,t[1],12,-389564586),i=cP(i,a,n,r,t[2],17,606105819),r=cP(r,i,a,n,t[3],22,-1044525330),n=cP(n,r,i,a,t[4],7,-176418897),a=cP(a,n,r,i,t[5],12,1200080426),i=cP(i,a,n,r,t[6],17,-1473231341),r=cP(r,i,a,n,t[7],22,-45705983),n=cP(n,r,i,a,t[8],7,1770035416),a=cP(a,n,r,i,t[9],12,-1958414417),i=cP(i,a,n,r,t[10],17,-42063),r=cP(r,i,a,n,t[11],22,-1990404162),n=cP(n,r,i,a,t[12],7,1804603682),a=cP(a,n,r,i,t[13],12,-40341101),i=cP(i,a,n,r,t[14],17,-1502002290),n=lP(n,r=cP(r,i,a,n,t[15],22,1236535329),i,a,t[1],5,-165796510),a=lP(a,n,r,i,t[6],9,-1069501632),i=lP(i,a,n,r,t[11],14,643717713),r=lP(r,i,a,n,t[0],20,-373897302),n=lP(n,r,i,a,t[5],5,-701558691),a=lP(a,n,r,i,t[10],9,38016083),i=lP(i,a,n,r,t[15],14,-660478335),r=lP(r,i,a,n,t[4],20,-405537848),n=lP(n,r,i,a,t[9],5,568446438),a=lP(a,n,r,i,t[14],9,-1019803690),i=lP(i,a,n,r,t[3],14,-187363961),r=lP(r,i,a,n,t[8],20,1163531501),n=lP(n,r,i,a,t[13],5,-1444681467),a=lP(a,n,r,i,t[2],9,-51403784),i=lP(i,a,n,r,t[7],14,1735328473),n=uP(n,r=lP(r,i,a,n,t[12],20,-1926607734),i,a,t[5],4,-378558),a=uP(a,n,r,i,t[8],11,-2022574463),i=uP(i,a,n,r,t[11],16,1839030562),r=uP(r,i,a,n,t[14],23,-35309556),n=uP(n,r,i,a,t[1],4,-1530992060),a=uP(a,n,r,i,t[4],11,1272893353),i=uP(i,a,n,r,t[7],16,-155497632),r=uP(r,i,a,n,t[10],23,-1094730640),n=uP(n,r,i,a,t[13],4,681279174),a=uP(a,n,r,i,t[0],11,-358537222),i=uP(i,a,n,r,t[3],16,-722521979),r=uP(r,i,a,n,t[6],23,76029189),n=uP(n,r,i,a,t[9],4,-640364487),a=uP(a,n,r,i,t[12],11,-421815835),i=uP(i,a,n,r,t[15],16,530742520),n=dP(n,r=uP(r,i,a,n,t[2],23,-995338651),i,a,t[0],6,-198630844),a=dP(a,n,r,i,t[7],10,1126891415),i=dP(i,a,n,r,t[14],15,-1416354905),r=dP(r,i,a,n,t[5],21,-57434055),n=dP(n,r,i,a,t[12],6,1700485571),a=dP(a,n,r,i,t[3],10,-1894986606),i=dP(i,a,n,r,t[10],15,-1051523),r=dP(r,i,a,n,t[1],21,-2054922799),n=dP(n,r,i,a,t[8],6,1873313359),a=dP(a,n,r,i,t[15],10,-30611744),i=dP(i,a,n,r,t[6],15,-1560198380),r=dP(r,i,a,n,t[13],21,1309151649),n=dP(n,r,i,a,t[4],6,-145523070),a=dP(a,n,r,i,t[11],10,-1120210379),i=dP(i,a,n,r,t[2],15,718787259),r=dP(r,i,a,n,t[9],21,-343485551),e[0]=yP(n,e[0]),e[1]=yP(r,e[1]),e[2]=yP(i,e[2]),e[3]=yP(a,e[3])}function sP(e,t,n,r,i,a){return t=yP(yP(t,e),yP(r,a)),yP(t<>>32-i,n)}function cP(e,t,n,r,i,a,o){return sP(t&n|~t&r,e,t,i,a,o)}function lP(e,t,n,r,i,a,o){return sP(t&r|n&~r,e,t,i,a,o)}function uP(e,t,n,r,i,a,o){return sP(t^n^r,e,t,i,a,o)}function dP(e,t,n,r,i,a,o){return sP(n^(t|~r),e,t,i,a,o)}function fP(e){var t,n=e.length,r=[1732584193,-271733879,-1732584194,271733878];for(t=64;t<=e.length;t+=64)oP(r,pP(e.substring(t-64,t)));e=e.substring(t-64);var i=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0];for(t=0;t>2]|=e.charCodeAt(t)<<(t%4<<3);if(i[t>>2]|=128<<(t%4<<3),t>55)for(oP(r,i),t=0;t<16;t++)i[t]=0;return i[14]=8*n,oP(r,i),r}function pP(e){var t,n=[];for(t=0;t<64;t+=4)n[t>>2]=e.charCodeAt(t)+(e.charCodeAt(t+1)<<8)+(e.charCodeAt(t+2)<<16)+(e.charCodeAt(t+3)<<24);return n}var mP=`0123456789abcdef`.split(``);function hP(e){for(var t=``,n=0;n<4;n++)t+=mP[e>>8*n+4&15]+mP[e>>8*n&15];return t}function gP(e){return String.fromCharCode(255&e,(65280&e)>>8,(16711680&e)>>16,(4278190080&e)>>24)}function _P(e){return fP(e).map(gP).join(``)}var vP=function(e){for(var t=0;t>16)+(t>>16)+(n>>16)<<16|65535&n}return e+t&4294967295}function bP(e,t){var n,r,i,a;if(e!==n){for(var o=(i=e,a=1+(256/e.length|0),Array(a+1).join(i)),s=[],c=0;c<256;c++)s[c]=c;var l=0;for(c=0;c<256;c++){var u=s[c];l=(l+u+o.charCodeAt(c))%256,s[c]=s[l],s[l]=u}n=e,r=s}else s=r;var d=t.length,f=0,p=0,m=``;for(c=0;c€/\f©þdSiz`;var a=(t+this.padding).substr(0,32),o=(n+this.padding).substr(0,32);this.O=this.processOwnerPassword(a,o),this.P=-(1+(255^i)),this.encryptionKey=_P(a+this.O+this.lsbFirstWord(this.P)+this.hexToBytes(r)).substr(0,5),this.U=bP(this.encryptionKey,this.padding)}function CP(e){if(/[^\u0000-\u00ff]/.test(e))throw Error(`Invalid PDF Name Object: `+e+`, Only accept ASCII characters.`);for(var t=``,n=e.length,r=0;r126?`#`+(`0`+i.toString(16)).slice(-2):e[r]}return t}function wP(e){if(hD(e)!==`object`)throw Error(`Invalid Context passed to initialize PubSub (jsPDF-module)`);var t={};this.subscribe=function(e,n,r){if(r||=!1,typeof e!=`string`||typeof n!=`function`||typeof r!=`boolean`)throw Error(`Invalid arguments passed to PubSub.subscribe (jsPDF-module)`);t.hasOwnProperty(e)||(t[e]={});var i=Math.random().toString(35);return t[e][i]=[n,!!r],i},this.unsubscribe=function(e){for(var n in t)if(t[n][e])return delete t[n][e],Object.keys(t[n]).length===0&&delete t[n],!0;return!1},this.publish=function(n){if(t.hasOwnProperty(n)){var r=Array.prototype.slice.call(arguments,1),i=[];for(var a in t[n]){var o=t[n][a];try{o[0].apply(e,r)}catch(e){XN.console&&QN.error(`jsPDF PubSub Error`,e.message,e)}o[1]&&i.push(a)}i.length&&i.forEach(this.unsubscribe)}},this.getTopics=function(){return t}}function TP(e){if(!(this instanceof TP))return new TP(e);var t=`opacity,stroke-opacity`.split(`,`);for(var n in e)e.hasOwnProperty(n)&&t.indexOf(n)>=0&&(this[n]=e[n]);this.id=``,this.objectNumber=-1}function EP(e,t){this.gState=e,this.matrix=t,this.id=``,this.objectNumber=-1}function DP(e,t,n,r,i){if(!(this instanceof DP))return new DP(e,t,n,r,i);this.type=e===`axial`?2:3,this.coords=t,this.colors=n,EP.call(this,r,i)}function OP(e,t,n,r,i){if(!(this instanceof OP))return new OP(e,t,n,r,i);this.boundingBox=e,this.xStep=t,this.yStep=n,this.stream=``,this.cloneIndex=0,EP.call(this,r,i)}function kP(e){var t,n=typeof arguments[0]==`string`?arguments[0]:`p`,r=arguments[1],i=arguments[2],a=arguments[3],o=[],s=1,c=16,l=`S`,u=null;hD(e||={})===`object`&&(n=e.orientation,r=e.unit||r,i=e.format||i,a=e.compress||e.compressPdf||a,(u=e.encryption||null)!==null&&(u.userPassword=u.userPassword||``,u.ownerPassword=u.ownerPassword||``,u.userPermissions=u.userPermissions||[]),s=typeof e.userUnit==`number`?Math.abs(e.userUnit):1,e.precision!==void 0&&(t=e.precision),e.floatPrecision!==void 0&&(c=e.floatPrecision),l=e.defaultPathOperation||`S`),o=e.filters||(!0===a?[`FlateEncode`]:o),r||=`mm`,n=(``+(n||`P`)).toLowerCase();var d=e.putOnlyUsedFonts||!1,f={},p={internal:{},__private__:{}};p.__private__.PubSub=wP;var m=`1.3`,h=p.__private__.getPdfVersion=function(){return m};p.__private__.setPdfVersion=function(e){m=e};var g={a0:[2383.94,3370.39],a1:[1683.78,2383.94],a2:[1190.55,1683.78],a3:[841.89,1190.55],a4:[595.28,841.89],a5:[419.53,595.28],a6:[297.64,419.53],a7:[209.76,297.64],a8:[147.4,209.76],a9:[104.88,147.4],a10:[73.7,104.88],b0:[2834.65,4008.19],b1:[2004.09,2834.65],b2:[1417.32,2004.09],b3:[1000.63,1417.32],b4:[708.66,1000.63],b5:[498.9,708.66],b6:[354.33,498.9],b7:[249.45,354.33],b8:[175.75,249.45],b9:[124.72,175.75],b10:[87.87,124.72],c0:[2599.37,3676.54],c1:[1836.85,2599.37],c2:[1298.27,1836.85],c3:[918.43,1298.27],c4:[649.13,918.43],c5:[459.21,649.13],c6:[323.15,459.21],c7:[229.61,323.15],c8:[161.57,229.61],c9:[113.39,161.57],c10:[79.37,113.39],dl:[311.81,623.62],letter:[612,792],"government-letter":[576,756],legal:[612,1008],"junior-legal":[576,360],ledger:[1224,792],tabloid:[792,1224],"credit-card":[153,243]};p.__private__.getPageFormats=function(){return g};var _=p.__private__.getPageFormat=function(e){return g[e]};i||=`a4`;var v=`compat`,y=`advanced`,b=v;function x(){this.saveGraphicsState(),H(new Be(U,0,0,-U,0,Cn()*U).toString()+` cm`),this.setFontSize(this.getFontSize()/U),l=`n`,b=y}function S(){this.restoreGraphicsState(),l=`S`,b=v}var C=p.__private__.combineFontStyleAndFontWeight=function(e,t){if(e==`bold`&&t==`normal`||e==`bold`&&t==400||e==`normal`&&t==`italic`||e==`bold`&&t==`italic`)throw Error(`Invalid Combination of fontweight and fontstyle`);return t&&(e=t==400||t===`normal`?e===`italic`?`italic`:`normal`:t!=700&&t!==`bold`||e!==`normal`?(t==700?`bold`:t)+``+e:`bold`),e};p.advancedAPI=function(e){var t=b===v;return t&&x.call(this),typeof e!=`function`||(e(this),t&&S.call(this)),this},p.compatAPI=function(e){var t=b===y;return t&&S.call(this),typeof e!=`function`||(e(this),t&&x.call(this)),this},p.isAdvancedAPI=function(){return b===y};var w,T=function(e){if(b!==y)throw Error(e+` is only available in 'advanced' API mode. You need to call advancedAPI() first.`)},E=p.roundToPrecision=p.__private__.roundToPrecision=function(e,n){var r=t||n;if(isNaN(e)||isNaN(r))throw Error(`Invalid argument passed to jsPDF.roundToPrecision`);return e.toFixed(r).replace(/0+$/,``)};w=p.hpf=p.__private__.hpf=typeof c==`number`?function(e){if(isNaN(e))throw Error(`Invalid argument passed to jsPDF.hpf`);return E(e,c)}:c===`smart`?function(e){if(isNaN(e))throw Error(`Invalid argument passed to jsPDF.hpf`);return E(e,e>-1&&e<1?16:5)}:function(e){if(isNaN(e))throw Error(`Invalid argument passed to jsPDF.hpf`);return E(e,16)};var D=p.f2=p.__private__.f2=function(e){if(isNaN(e))throw Error(`Invalid argument passed to jsPDF.f2`);return E(e,2)},O=p.__private__.f3=function(e){if(isNaN(e))throw Error(`Invalid argument passed to jsPDF.f3`);return E(e,3)},k=p.scale=p.__private__.scale=function(e){if(isNaN(e))throw Error(`Invalid argument passed to jsPDF.scale`);return b===v?e*U:b===y?e:void 0},A=function(e){return k(function(e){return b===v?Cn()-e:b===y?e:void 0}(e))};p.__private__.setPrecision=p.setPrecision=function(e){typeof parseInt(e,10)==`number`&&(t=parseInt(e,10))};var j,M=`00000000000000000000000000000000`,N=p.__private__.getFileId=function(){return M},P=p.__private__.setFileId=function(e){return M=e!==void 0&&/^[a-fA-F0-9]{32}$/.test(e)?e.toUpperCase():M.split(``).map(function(){return`ABCDEF0123456789`.charAt(Math.floor(16*Math.random()))}).join(``),u!==null&&(kt=new SP(u.userPermissions,u.userPassword,u.ownerPassword,M)),M};p.setFileId=function(e){return P(e),this},p.getFileId=function(){return N()};var F=p.__private__.convertDateToPDFDate=function(e){var t=e.getTimezoneOffset(),n=t<0?`+`:`-`,r=Math.floor(Math.abs(t/60)),i=Math.abs(t%60),a=[n,te(r),`'`,te(i),`'`].join(``);return[`D:`,e.getFullYear(),te(e.getMonth()+1),te(e.getDate()),te(e.getHours()),te(e.getMinutes()),te(e.getSeconds()),a].join(``)},I=p.__private__.convertPDFDateToDate=function(e){var t=parseInt(e.substr(2,4),10),n=parseInt(e.substr(6,2),10)-1,r=parseInt(e.substr(8,2),10),i=parseInt(e.substr(10,2),10),a=parseInt(e.substr(12,2),10),o=parseInt(e.substr(14,2),10);return new Date(t,n,r,i,a,o,0)},L=p.__private__.setCreationDate=function(e){var t;if(e===void 0&&(e=new Date),e instanceof Date)t=F(e);else{if(!/^D:(20[0-2][0-9]|203[0-7]|19[7-9][0-9])(0[0-9]|1[0-2])([0-2][0-9]|3[0-1])(0[0-9]|1[0-9]|2[0-3])(0[0-9]|[1-5][0-9])(0[0-9]|[1-5][0-9])(\+0[0-9]|\+1[0-4]|-0[0-9]|-1[0-1])'(0[0-9]|[1-5][0-9])'?$/.test(e))throw Error(`Invalid argument passed to jsPDF.setCreationDate`);t=e}return j=t},ee=p.__private__.getCreationDate=function(e){var t=j;return e===`jsDate`&&(t=I(j)),t};p.setCreationDate=function(e){return L(e),this},p.getCreationDate=function(e){return ee(e)};var R,te=p.__private__.padd2=function(e){return(`0`+parseInt(e)).slice(-2)},z=p.__private__.padd2Hex=function(e){return(`00`+(e=e.toString())).substr(e.length)},B=0,V=[],ne=[],re=0,ie=[],ae=[],oe=!1,se=ne;p.__private__.setCustomOutputDestination=function(e){oe=!0,se=e};var ce=function(e){oe||(se=e)};p.__private__.resetCustomOutputDestination=function(){oe=!1,se=ne};var H=p.__private__.out=function(e){return e=e.toString(),re+=e.length+1,se.push(e),se},le=p.__private__.write=function(e){return H(arguments.length===1?e.toString():Array.prototype.join.call(arguments,` `))},ue=p.__private__.getArrayBuffer=function(e){for(var t=e.length,n=new ArrayBuffer(t),r=new Uint8Array(n);t--;)r[t]=e.charCodeAt(t);return n},de=[[`Helvetica`,`helvetica`,`normal`,`WinAnsiEncoding`],[`Helvetica-Bold`,`helvetica`,`bold`,`WinAnsiEncoding`],[`Helvetica-Oblique`,`helvetica`,`italic`,`WinAnsiEncoding`],[`Helvetica-BoldOblique`,`helvetica`,`bolditalic`,`WinAnsiEncoding`],[`Courier`,`courier`,`normal`,`WinAnsiEncoding`],[`Courier-Bold`,`courier`,`bold`,`WinAnsiEncoding`],[`Courier-Oblique`,`courier`,`italic`,`WinAnsiEncoding`],[`Courier-BoldOblique`,`courier`,`bolditalic`,`WinAnsiEncoding`],[`Times-Roman`,`times`,`normal`,`WinAnsiEncoding`],[`Times-Bold`,`times`,`bold`,`WinAnsiEncoding`],[`Times-Italic`,`times`,`italic`,`WinAnsiEncoding`],[`Times-BoldItalic`,`times`,`bolditalic`,`WinAnsiEncoding`],[`ZapfDingbats`,`zapfdingbats`,`normal`,null],[`Symbol`,`symbol`,`normal`,null]];p.__private__.getStandardFonts=function(){return de};var fe=e.fontSize||16;p.__private__.setFontSize=p.setFontSize=function(e){return fe=b===y?e/U:e,this};var pe,me=p.__private__.getFontSize=p.getFontSize=function(){return b===v?fe:fe*U},he=e.R2L||!1;p.__private__.setR2L=p.setR2L=function(e){return he=e,this},p.__private__.getR2L=p.getR2L=function(){return he};var ge,_e=p.__private__.setZoomMode=function(e){if(/^(?:\d+\.\d*|\d*\.\d+|\d+)%$/.test(e))pe=e;else if(isNaN(e)){if([void 0,null,`fullwidth`,`fullheight`,`fullpage`,`original`].indexOf(e)===-1)throw Error(`zoom must be Integer (e.g. 2), a percentage Value (e.g. 300%) or fullwidth, fullheight, fullpage, original. "`+e+`" is not recognized.`);pe=e}else pe=parseInt(e,10)};p.__private__.getZoomMode=function(){return pe};var ve,ye=p.__private__.setPageMode=function(e){if([void 0,null,`UseNone`,`UseOutlines`,`UseThumbs`,`FullScreen`].indexOf(e)==-1)throw Error(`Page mode must be one of UseNone, UseOutlines, UseThumbs, or FullScreen. "`+e+`" is not recognized.`);ge=e};p.__private__.getPageMode=function(){return ge};var be=p.__private__.setLayoutMode=function(e){if([void 0,null,`continuous`,`single`,`twoleft`,`tworight`,`two`].indexOf(e)==-1)throw Error(`Layout mode must be one of continuous, single, twoleft, tworight. "`+e+`" is not recognized.`);ve=e};p.__private__.getLayoutMode=function(){return ve},p.__private__.setDisplayMode=p.setDisplayMode=function(e,t,n){return _e(e),be(t),ye(n),this};var xe={title:``,subject:``,author:``,keywords:``,creator:``};p.__private__.getDocumentProperty=function(e){if(Object.keys(xe).indexOf(e)===-1)throw Error(`Invalid argument passed to jsPDF.getDocumentProperty`);return xe[e]},p.__private__.getDocumentProperties=function(){return xe},p.__private__.setDocumentProperties=p.setProperties=p.setDocumentProperties=function(e){for(var t in xe)xe.hasOwnProperty(t)&&e[t]&&(xe[t]=e[t]);return this},p.__private__.setDocumentProperty=function(e,t){if(Object.keys(xe).indexOf(e)===-1)throw Error(`Invalid arguments passed to jsPDF.setDocumentProperty`);return xe[e]=t};var Se,U,Ce,we,Te,W={},Ee={},De=[],Oe={},ke={},Ae={},je={},Me=null,Ne=0,Pe=[],Fe=new wP(p),Ie=e.hotfixes||[],Le={},Re={},ze=[],Be=function e(t,n,r,i,a,o){if(!(this instanceof e))return new e(t,n,r,i,a,o);isNaN(t)&&(t=1),isNaN(n)&&(n=0),isNaN(r)&&(r=0),isNaN(i)&&(i=1),isNaN(a)&&(a=0),isNaN(o)&&(o=0),this._matrix=[t,n,r,i,a,o]};Object.defineProperty(Be.prototype,"sx",{get:function(){return this._matrix[0]},set:function(e){this._matrix[0]=e}}),Object.defineProperty(Be.prototype,"shy",{get:function(){return this._matrix[1]},set:function(e){this._matrix[1]=e}}),Object.defineProperty(Be.prototype,"shx",{get:function(){return this._matrix[2]},set:function(e){this._matrix[2]=e}}),Object.defineProperty(Be.prototype,"sy",{get:function(){return this._matrix[3]},set:function(e){this._matrix[3]=e}}),Object.defineProperty(Be.prototype,"tx",{get:function(){return this._matrix[4]},set:function(e){this._matrix[4]=e}}),Object.defineProperty(Be.prototype,"ty",{get:function(){return this._matrix[5]},set:function(e){this._matrix[5]=e}}),Object.defineProperty(Be.prototype,"a",{get:function(){return this._matrix[0]},set:function(e){this._matrix[0]=e}}),Object.defineProperty(Be.prototype,"b",{get:function(){return this._matrix[1]},set:function(e){this._matrix[1]=e}}),Object.defineProperty(Be.prototype,"c",{get:function(){return this._matrix[2]},set:function(e){this._matrix[2]=e}}),Object.defineProperty(Be.prototype,"d",{get:function(){return this._matrix[3]},set:function(e){this._matrix[3]=e}}),Object.defineProperty(Be.prototype,"e",{get:function(){return this._matrix[4]},set:function(e){this._matrix[4]=e}}),Object.defineProperty(Be.prototype,"f",{get:function(){return this._matrix[5]},set:function(e){this._matrix[5]=e}}),Object.defineProperty(Be.prototype,"rotation",{get:function(){return Math.atan2(this.shx,this.sx)}}),Object.defineProperty(Be.prototype,"scaleX",{get:function(){return this.decompose().scale.sx}}),Object.defineProperty(Be.prototype,"scaleY",{get:function(){return this.decompose().scale.sy}}),Object.defineProperty(Be.prototype,"isIdentity",{get:function(){return this.sx===1&&this.shy===0&&this.shx===0&&this.sy===1&&this.tx===0&&this.ty===0}}),Be.prototype.join=function(e){return[this.sx,this.shy,this.shx,this.sy,this.tx,this.ty].map(w).join(e)},Be.prototype.multiply=function(e){return new Be(e.sx*this.sx+e.shy*this.shx,e.sx*this.shy+e.shy*this.sy,e.shx*this.sx+e.sy*this.shx,e.shx*this.shy+e.sy*this.sy,e.tx*this.sx+e.ty*this.shx+this.tx,e.tx*this.shy+e.ty*this.sy+this.ty)},Be.prototype.decompose=function(){var e=this.sx,t=this.shy,n=this.shx,r=this.sy,i=this.tx,a=this.ty,o=Math.sqrt(e*e+t*t),s=(e/=o)*n+(t/=o)*r;n-=e*s,r-=t*s;var c=Math.sqrt(n*n+r*r);return s/=c,e*(r/=c)>16&255,r=c>>8&255,i=255&c}if(r===void 0||a===void 0&&n===r&&r===i)t=typeof n==`string`?n+` `+o[0]:e.precision===2?D(n/255)+` `+o[0]:O(n/255)+` `+o[0];else if(a===void 0||hD(a)===`object`){if(a&&!isNaN(a.a)&&a.a===0)return[`1.`,`1.`,`1.`,o[1]].join(` `);t=typeof n==`string`?[n,r,i,o[1]].join(` `):e.precision===2?[D(n/255),D(r/255),D(i/255),o[1]].join(` `):[O(n/255),O(r/255),O(i/255),o[1]].join(` `)}else t=typeof n==`string`?[n,r,i,a,o[2]].join(` `):e.precision===2?[D(n),D(r),D(i),D(a),o[2]].join(` `):[O(n),O(r),O(i),O(a),o[2]].join(` `);return t},$e=p.__private__.getFilters=function(){return o},et=p.__private__.putStream=function(e){var t=(e||={}).data||``,n=e.filters||$e(),r=e.alreadyAppliedFilters||[],i=e.addLength1||!1,a=t.length,o=e.objectId,s=function(e){return e};if(u!==null&&o===void 0)throw Error(`ObjectId must be passed to putStream for file encryption`);u!==null&&(s=kt.encryptor(o,0));var c={};!0===n&&(n=[`FlateEncode`]);var l=e.additionalKeyValues||[],d=(c=kP.API.processDataByFilters===void 0?{data:t,reverseChain:[]}:kP.API.processDataByFilters(t,n)).reverseChain+(Array.isArray(r)?r.join(` `):r.toString());if(c.data.length!==0&&(l.push({key:`Length`,value:c.data.length}),!0===i&&l.push({key:`Length1`,value:a})),d.length!=0)if(d.split(`/`).length-1==1)l.push({key:`Filter`,value:d});else{l.push({key:`Filter`,value:`[`+d+`]`});for(var f=0;f>`),c.data.length!==0&&(H(`stream`),H(s(c.data)),H(`endstream`))},tt=p.__private__.putPage=function(e){var t=e.number,n=e.data,r=e.objId,i=e.contentsObjId;qe(r,!0),H(`<>`),H(`endobj`);var a=n.join(` -`);return b===y&&(a+=` -Q`),qe(i,!0),et({data:a,filters:$e(),objectId:i}),H(`endobj`),r},nt=p.__private__.putPages=function(){var e,t,n=[];for(e=1;e<=Ne;e++)Pe[e].objId=Ke(),Pe[e].contentsObjId=Ke();for(e=1;e<=Ne;e++)n.push(tt({number:e,data:ae[e],objId:Pe[e].objId,contentsObjId:Pe[e].contentsObjId,mediaBox:Pe[e].mediaBox,cropBox:Pe[e].cropBox,bleedBox:Pe[e].bleedBox,trimBox:Pe[e].trimBox,artBox:Pe[e].artBox,userUnit:Pe[e].userUnit,rootDictionaryObjId:Ye,resourceDictionaryObjId:Xe}));qe(Ye,!0),H(`<>`),H(`endobj`),Fe.publish(`postPutPages`)},rt=function(e){Fe.publish(`putFont`,{font:e,out:H,newObject:Ge,putStream:et}),!0!==e.isAlreadyPutted&&(e.objectNumber=Ge(),H(`<<`),H(`/Type /Font`),H(`/BaseFont /`+CP(e.postScriptName)),H(`/Subtype /Type1`),typeof e.encoding==`string`&&H(`/Encoding /`+e.encoding),H(`/FirstChar 32`),H(`/LastChar 255`),H(`>>`),H(`endobj`))},it=function(e){e.objectNumber=Ge();var t=[];t.push({key:`Type`,value:`/XObject`}),t.push({key:`Subtype`,value:`/Form`}),t.push({key:`BBox`,value:`[`+[w(e.x),w(e.y),w(e.x+e.width),w(e.y+e.height)].join(` `)+`]`}),t.push({key:`Matrix`,value:`[`+e.matrix.toString()+`]`}),et({data:e.pages[1].join(` -`),additionalKeyValues:t,objectId:e.objectNumber}),H(`endobj`)},at=function(e,t){t||=21;var n=Ge(),r=function(e,t){var n,r=[],i=1/(t-1);for(n=0;n<1;n+=i)r.push(n);if(r.push(1),e[0].offset!=0){var a={offset:0,color:e[0].color};e.unshift(a)}if(e[e.length-1].offset!=1){var o={offset:1,color:e[e.length-1].color};e.push(o)}for(var s=``,c=0,l=0;le[c+1].offset;)c++;var u=e[c].offset,d=(n-u)/(e[c+1].offset-u),f=e[c].color,p=e[c+1].color;s+=z(Math.round((1-d)*f[0]+d*p[0]).toString(16))+z(Math.round((1-d)*f[1]+d*p[1]).toString(16))+z(Math.round((1-d)*f[2]+d*p[2]).toString(16))}return s.trim()}(e.colors,t),i=[];i.push({key:`FunctionType`,value:`0`}),i.push({key:`Domain`,value:`[0.0 1.0]`}),i.push({key:`Size`,value:`[`+t+`]`}),i.push({key:`BitsPerSample`,value:`8`}),i.push({key:`Range`,value:`[0.0 1.0 0.0 1.0 0.0 1.0]`}),i.push({key:`Decode`,value:`[0.0 1.0 0.0 1.0 0.0 1.0]`}),et({data:r,additionalKeyValues:i,alreadyAppliedFilters:[`/ASCIIHexDecode`],objectId:n}),H(`endobj`),e.objectNumber=Ge(),H(`<< /ShadingType `+e.type),H(`/ColorSpace /DeviceRGB`);var a=`/Coords [`+w(parseFloat(e.coords[0]))+` `+w(parseFloat(e.coords[1]))+` `;e.type===2?a+=w(parseFloat(e.coords[2]))+` `+w(parseFloat(e.coords[3])):a+=w(parseFloat(e.coords[2]))+` `+w(parseFloat(e.coords[3]))+` `+w(parseFloat(e.coords[4]))+` `+w(parseFloat(e.coords[5])),H(a+=`]`),e.matrix&&H(`/Matrix [`+e.matrix.toString()+`]`),H(`/Function `+n+` 0 R`),H(`/Extend [true true]`),H(`>>`),H(`endobj`)},ot=function(e,t){var n=Ke(),r=Ge();t.push({resourcesOid:n,objectOid:r}),e.objectNumber=r;var i=[];i.push({key:`Type`,value:`/Pattern`}),i.push({key:`PatternType`,value:`1`}),i.push({key:`PaintType`,value:`1`}),i.push({key:`TilingType`,value:`1`}),i.push({key:`BBox`,value:`[`+e.boundingBox.map(w).join(` `)+`]`}),i.push({key:`XStep`,value:w(e.xStep)}),i.push({key:`YStep`,value:w(e.yStep)}),i.push({key:`Resources`,value:n+` 0 R`}),e.matrix&&i.push({key:`Matrix`,value:`[`+e.matrix.toString()+`]`}),et({data:e.stream,additionalKeyValues:i,objectId:e.objectNumber}),H(`endobj`)},st=function(e){for(var t in e.objectNumber=Ge(),H(`<<`),e)switch(t){case`opacity`:H(`/ca `+D(e[t]));break;case`stroke-opacity`:H(`/CA `+D(e[t]))}H(`>>`),H(`endobj`)},ct=function(e){qe(e.resourcesOid,!0),H(`<<`),H(`/ProcSet [/PDF /Text /ImageB /ImageC /ImageI]`),function(){for(var e in H(`/Font <<`),W)W.hasOwnProperty(e)&&(!1===d||!0===d&&f.hasOwnProperty(e))&&H(`/`+e+` `+W[e].objectNumber+` 0 R`);H(`>>`)}(),function(){if(Object.keys(Oe).length>0){for(var e in H(`/Shading <<`),Oe)Oe.hasOwnProperty(e)&&Oe[e]instanceof DP&&Oe[e].objectNumber>=0&&H(`/`+e+` `+Oe[e].objectNumber+` 0 R`);Fe.publish(`putShadingPatternDict`),H(`>>`)}}(),function(e){if(Object.keys(Oe).length>0){for(var t in H(`/Pattern <<`),Oe)Oe.hasOwnProperty(t)&&Oe[t]instanceof p.TilingPattern&&Oe[t].objectNumber>=0&&Oe[t].objectNumber>`)}}(e.objectOid),function(){if(Object.keys(Ae).length>0){for(var e in H(`/ExtGState <<`),Ae)Ae.hasOwnProperty(e)&&Ae[e].objectNumber>=0&&H(`/`+e+` `+Ae[e].objectNumber+` 0 R`);Fe.publish(`putGStateDict`),H(`>>`)}}(),function(){for(var e in H(`/XObject <<`),Le)Le.hasOwnProperty(e)&&Le[e].objectNumber>=0&&H(`/`+e+` `+Le[e].objectNumber+` 0 R`);Fe.publish(`putXobjectDict`),H(`>>`)}(),H(`>>`),H(`endobj`)},lt=function(e){Ee[e.fontName]=Ee[e.fontName]||{},Ee[e.fontName][e.fontStyle]=e.id},ut=function(e,t,n,r,i){var a={id:`F`+(Object.keys(W).length+1).toString(10),postScriptName:e,fontName:t,fontStyle:n,encoding:r,isStandardFont:i||!1,metadata:{}};return Fe.publish(`addFont`,{font:a,instance:this}),W[a.id]=a,lt(a),a.id},dt=p.__private__.pdfEscape=p.pdfEscape=function(e,t){return function(e,t){var n,r,i,a,o,s,c,l,u;if(i=(t||={}).sourceEncoding||`Unicode`,o=t.outputEncoding,(t.autoencode||o)&&W[Se].metadata&&W[Se].metadata[i]&&W[Se].metadata[i].encoding&&(a=W[Se].metadata[i].encoding,!o&&W[Se].encoding&&(o=W[Se].encoding),!o&&a.codePages&&(o=a.codePages[0]),typeof o==`string`&&(o=a[o]),o)){for(c=!1,s=[],n=0,r=e.length;n>8&&(c=!0);e=s.join(``)}for(n=e.length;c===void 0&&n!==0;)e.charCodeAt(n-1)>>8&&(c=!0),n--;if(!c)return e;for(s=t.noBOM?[]:[254,255],n=0,r=e.length;n>8)>>8)throw Error(`Character at position `+n+` of string '`+e+`' exceeds 16bits. Cannot be encoded into UCS-2 BE`);s.push(u),s.push(l-(u<<8))}return String.fromCharCode.apply(void 0,s)}(e,t).replace(/\\/g,`\\\\`).replace(/\(/g,`\\(`).replace(/\)/g,`\\)`)},ft=p.__private__.beginPage=function(e){ae[++Ne]=[],Pe[Ne]={objId:0,contentsObjId:0,userUnit:Number(s),artBox:null,bleedBox:null,cropBox:null,trimBox:null,mediaBox:{bottomLeftX:0,bottomLeftY:0,topRightX:Number(e[0]),topRightY:Number(e[1])}},ht(Ne),ce(ae[R])},pt=function(e,t){var r,a,o;switch(n=t||n,typeof e==`string`&&(r=_(e.toLowerCase()),Array.isArray(r)&&(a=r[0],o=r[1])),Array.isArray(e)&&(a=e[0]*U,o=e[1]*U),isNaN(a)&&(a=i[0],o=i[1]),(a>14400||o>14400)&&(QN.warn(`A page in a PDF can not be wider or taller than 14400 userUnit. jsPDF limits the width/height to 14400`),a=Math.min(14400,a),o=Math.min(14400,o)),i=[a,o],n.substr(0,1)){case`l`:o>a&&(i=[o,a]);break;case`p`:a>o&&(i=[o,a])}ft(i),Yt(qt),H(nn),ln!==0&&H(ln+` J`),un!==0&&H(un+` j`),Fe.publish(`addPage`,{pageNumber:Ne})},mt=function(e){e>0&&e<=Ne&&(ae.splice(e,1),Pe.splice(e,1),Ne--,R>Ne&&(R=Ne),this.setPage(R))},ht=function(e){e>0&&e<=Ne&&(R=e)},gt=p.__private__.getNumberOfPages=p.getNumberOfPages=function(){return ae.length-1},_t=function(e,t,n){var r,i=void 0;return n||={},e=e===void 0?W[Se].fontName:e,t=t===void 0?W[Se].fontStyle:t,r=e.toLowerCase(),Ee[r]!==void 0&&Ee[r][t]!==void 0?i=Ee[r][t]:Ee[e]!==void 0&&Ee[e][t]!==void 0?i=Ee[e][t]:!1===n.disableWarning&&QN.warn(`Unable to look up font label for font '`+e+`', '`+t+`'. Refer to getFontList() for available fonts.`),i||n.noFallback||((i=Ee.times[t])??(i=Ee.times.normal)),i},vt=p.__private__.putInfo=function(){var e=Ge(),t=function(e){return e};for(var n in u!==null&&(t=kt.encryptor(e,0)),H(`<<`),H(`/Producer (`+dt(t(`jsPDF `+kP.version))+`)`),xe)xe.hasOwnProperty(n)&&xe[n]&&H(`/`+n.substr(0,1).toUpperCase()+n.substr(1)+` (`+dt(t(xe[n]))+`)`);H(`/CreationDate (`+dt(t(j))+`)`),H(`>>`),H(`endobj`)},yt=p.__private__.putCatalog=function(e){var t=(e||={}).rootDictionaryObjId||Ye;switch(Ge(),H(`<<`),H(`/Type /Catalog`),H(`/Pages `+t+` 0 R`),pe||=`fullwidth`,pe){case`fullwidth`:H(`/OpenAction [3 0 R /FitH null]`);break;case`fullheight`:H(`/OpenAction [3 0 R /FitV null]`);break;case`fullpage`:H(`/OpenAction [3 0 R /Fit]`);break;case`original`:H(`/OpenAction [3 0 R /XYZ null null 1]`);break;default:var n=``+pe;n.substr(n.length-1)===`%`&&(pe=parseInt(pe)/100),typeof pe==`number`&&H(`/OpenAction [3 0 R /XYZ null null `+D(pe)+`]`)}switch(ve||=`continuous`,ve){case`continuous`:H(`/PageLayout /OneColumn`);break;case`single`:H(`/PageLayout /SinglePage`);break;case`two`:case`twoleft`:H(`/PageLayout /TwoColumnLeft`);break;case`tworight`:H(`/PageLayout /TwoColumnRight`)}ge&&H(`/PageMode /`+ge),Fe.publish(`putCatalog`),H(`>>`),H(`endobj`)},bt=p.__private__.putTrailer=function(){H(`trailer`),H(`<<`),H(`/Size `+(B+1)),H(`/Root `+B+` 0 R`),H(`/Info `+(B-1)+` 0 R`),u!==null&&H(`/Encrypt `+kt.oid+` 0 R`),H(`/ID [ <`+M+`> <`+M+`> ]`),H(`>>`)},xt=p.__private__.putHeader=function(){H(`%PDF-`+m),H(`%ºß¬à`)},St=p.__private__.putXRef=function(){var e=`0000000000`;H(`xref`),H(`0 `+(B+1)),H(`0000000000 65535 f `);for(var t=1;t<=B;t++)typeof V[t]==`function`?H((e+V[t]()).slice(-10)+` 00000 n `):V[t]===void 0?H(`0000000000 00000 n `):H((e+V[t]).slice(-10)+` 00000 n `)},Ct=p.__private__.buildDocument=function(){var e;B=0,re=0,ne=[],V=[],ie=[],Ye=Ke(),Xe=Ke(),ce(ne),Fe.publish(`buildDocument`),xt(),nt(),function(){Fe.publish(`putAdditionalObjects`);for(var e=0;e`),H(`/O <`+kt.toHexString(kt.O)+`>`),H(`/P `+kt.P),H(`>>`),H(`endobj`)),vt(),yt();var t=re;return St(),bt(),H(`startxref`),H(``+t),H(`%%EOF`),ce(ae[R]),ne.join(` -`)},wt=p.__private__.getBlob=function(e){return new Blob([ue(e)],{type:`application/pdf`})},Tt=function(e){for(;e.firstChild;)e.removeChild(e.firstChild)},Et=function(e){var t,n=e.document,r=n.documentElement,i=n.head,a=n.body;return i||(i=n.createElement(`head`),r.appendChild(i)),a||(a=n.createElement(`body`),r.appendChild(a)),Tt(i),Tt(a),(t=n.createElement(`style`)).appendChild(n.createTextNode(`html, body { padding: 0; margin: 0; } iframe { width: 100%; height: 100%; border: 0;}`)),i.appendChild(t),{document:n,body:a}},Dt=p.output=p.__private__.output=(We=function(e,t){switch(typeof(t||={})==`string`?t={filename:t}:t.filename=t.filename||`generated.pdf`,e){case void 0:return Ct();case`save`:p.save(t.filename);break;case`arraybuffer`:return ue(Ct());case`blob`:return wt(Ct());case`bloburi`:case`bloburl`:if(XN.URL!==void 0&&typeof XN.URL.createObjectURL==`function`)return XN.URL&&XN.URL.createObjectURL(wt(Ct()))||void 0;QN.warn(`bloburl is not supported by your system, because URL.createObjectURL is not supported by your browser.`);break;case`datauristring`:case`dataurlstring`:var n=``,r=Ct();try{n=aP(r)}catch{n=aP(unescape(encodeURIComponent(r)))}return`data:application/pdf;filename=`+encodeURIComponent(t.filename)+`;base64,`+n;case`pdfobjectnewwindow`:if(Object.prototype.toString.call(XN)===`[object Window]`){var i=`https://cdnjs.cloudflare.com/ajax/libs/pdfobject/2.1.1/pdfobject.min.js`,a=!t.pdfObjectUrl;a||(i=t.pdfObjectUrl);var o=XN.open();if(o!==null){var s=Et(o),c=s.document.createElement(`script`),l=this;c.src=i,a&&(c.integrity=`sha512-4ze/a9/4jqu+tX9dfOqJYSvyYd5M6qum/3HpCLr+/Jqf0whc37VUbkpNGHR7/8pSnCFw47T1fmIpwBV7UySh3g==`,c.crossOrigin=`anonymous`),c.onload=function(){o.PDFObject.embed(l.output(`dataurlstring`),t)},s.body.appendChild(c)}return o}throw Error(`The option pdfobjectnewwindow just works in a browser-environment.`);case`pdfjsnewwindow`:if(Object.prototype.toString.call(XN)===`[object Window]`){var u=t.pdfJsUrl||`examples/PDF.js/web/viewer.html`,d=XN.open();if(d!==null){var f=Et(d),m=f.document.createElement(`iframe`),h=u.indexOf(`?`)===-1?`?`:`&`;l=this,m.id=`pdfViewer`,m.width=`500px`,m.height=`400px`,m.src=u+h+`file=&downloadName=`+encodeURIComponent(t.filename),m.onload=function(){d.document.title=t.filename,m.contentWindow.PDFViewerApplication.open(l.output(`bloburl`))},f.body.appendChild(m)}return d}throw Error(`The option pdfjsnewwindow just works in a browser-environment.`);case`dataurlnewwindow`:if(Object.prototype.toString.call(XN)!==`[object Window]`)throw Error(`The option dataurlnewwindow just works in a browser-environment.`);var g=XN.open();if(g!==null){var _=Et(g),v=_.document.createElement(`iframe`);v.src=this.output(`datauristring`,t),_.body.appendChild(v),g.document.title=t.filename}if(g||typeof safari>`u`)return g;break;case`datauri`:case`dataurl`:return XN.document.location.href=this.output(`datauristring`,t);default:return null}},We.foo=function(){try{return We.apply(this,arguments)}catch(n){var e=n.stack||``;~e.indexOf(` at `)&&(e=e.split(` at `)[1]);var t=`Error in function `+e.split(` -`)[0].split(`<`)[0]+`: `+n.message;if(!XN.console)throw Error(t);XN.console.error(t,n),XN.alert&&alert(t)}},We.foo.bar=We,We.foo),Ot=function(e){return!0===Array.isArray(Ie)&&Ie.indexOf(e)>-1};switch(r){case`pt`:U=1;break;case`mm`:U=72/25.4;break;case`cm`:U=72/2.54;break;case`in`:U=72;break;case`px`:U=Ot(`px_scaling`)==1?.75:96/72;break;case`pc`:case`em`:U=12;break;case`ex`:U=6;break;default:if(typeof r!=`number`)throw Error(`Invalid unit: `+r);U=r}var kt=null;L(),P();var At=p.__private__.getPageInfo=p.getPageInfo=function(e){if(isNaN(e)||e%1!=0)throw Error(`Invalid argument passed to jsPDF.getPageInfo`);return{objId:Pe[e].objId,pageNumber:e,pageContext:Pe[e]}},jt=p.__private__.getPageInfoByObjId=function(e){if(isNaN(e)||e%1!=0)throw Error(`Invalid argument passed to jsPDF.getPageInfoByObjId`);for(var t in Pe)if(Pe[t].objId===e)break;return At(t)},Mt=p.__private__.getCurrentPageInfo=p.getCurrentPageInfo=function(){return{objId:Pe[R].objId,pageNumber:R,pageContext:Pe[R]}};p.addPage=function(){return pt.apply(this,arguments),this},p.setPage=function(){return ht.apply(this,arguments),ce.call(this,ae[R]),this},p.insertPage=function(e){return this.addPage(),this.movePage(R,e),this},p.movePage=function(e,t){var n,r;if(e>t){n=ae[e],r=Pe[e];for(var i=e;i>t;i--)ae[i]=ae[i-1],Pe[i]=Pe[i-1];ae[t]=n,Pe[t]=r,this.setPage(t)}else if(e0&&(typeof e==`string`?e=h.splitTextToSize(e,u):Object.prototype.toString.call(e)===`[object Array]`&&(e=e.reduce(function(e,t){return e.concat(h.splitTextToSize(t,u))},[]))),a={text:e,x:t,y:n,options:r,mutex:{pdfEscape:dt,activeFontKey:Se,fonts:W,activeFontSize:fe}},Fe.publish(`preProcessText`,a),e=a.text,s=(r=a.options).angle,m instanceof Be==0&&s&&typeof s==`number`){s*=Math.PI/180,r.rotationDirection===0&&(s=-s),b===y&&(s=-s);var I=Math.cos(s),L=Math.sin(s);m=new Be(I,L,-L,I,0,0)}else s&&s instanceof Be&&(m=s);b!==y||m||(m=He),(l=r.charSpace||sn)!==void 0&&(v+=w(k(l))+` Tc -`,this.setCharSpace(this.getCharSpace()||0)),(p=r.horizontalScale)!==void 0&&(v+=w(100*p)+` Tz -`),r.lang;var ee=-1,R=r.renderingMode===void 0?r.stroke:r.renderingMode,te=h.internal.getCurrentPageInfo().pageContext;switch(R){case 0:case!1:case`fill`:ee=0;break;case 1:case!0:case`stroke`:ee=1;break;case 2:case`fillThenStroke`:ee=2;break;case 3:case`invisible`:ee=3;break;case 4:case`fillAndAddForClipping`:ee=4;break;case 5:case`strokeAndAddPathForClipping`:ee=5;break;case 6:case`fillThenStrokeAndAddToPathForClipping`:ee=6;break;case 7:case`addToPathForClipping`:ee=7}var z=te.usedRenderingMode===void 0?-1:te.usedRenderingMode;ee===-1?z!==-1&&(v+=`0 Tr -`):v+=ee+` Tr -`,ee!==-1&&(te.usedRenderingMode=ee),c=r.align||`left`;var B,V=fe*x,ne=h.internal.pageSize.getWidth(),re=W[Se];l=r.charSpace||sn,u=r.maxWidth||0,d=Object.assign({autoencode:!0,noBOM:!0},r.flags);var ie=[],ae=function(e){return h.getStringUnitWidth(e,{font:re,charSpace:l,fontSize:fe,doKerning:!1})*fe/S};if(Object.prototype.toString.call(e)===`[object Array]`){var oe;o=E(e),c!==`left`&&(B=o.map(ae));var se,ce=0;if(c===`right`){t-=B[0],e=[],N=o.length;for(var le=0;le0?(u-B[me])/be:0;me`:`)`),Ce=parseFloat(o[ke][1]),we=parseFloat(o[ke][2]);break;case 0:Te=(_?`<`:`(`)+o[ke]+(_?`>`:`)`),Ce=G(t),we=$t(n)}ie!==void 0&&ie[ke]!==void 0&&(De=ie[ke]+` Tw -`),ke===0?e.push(De+Oe(Ce,we,m)+Te):Ee===0?e.push(De+Te):Ee===1&&e.push(De+Oe(Ce,we,m)+Te)}e=Ee===0?e.join(` Tj -T* `):e.join(` Tj -`),e+=` Tj -`;var Ae=`BT -/`;return Ae+=Se+` `+fe+` Tf -`,Ae+=w(fe*x)+` TL -`,Ae+=an+` -`,Ae+=v,Ae+=e,H(Ae+=`ET`),f[Se]=!0,h};var Nt=p.__private__.clip=p.clip=function(e){return H(e===`evenodd`?`W*`:`W`),this};p.clipEvenOdd=function(){return Nt(`evenodd`)},p.__private__.discardPath=p.discardPath=function(){return H(`n`),this};var Pt=p.__private__.isValidStyle=function(e){var t=!1;return[void 0,null,`S`,`D`,`F`,`DF`,`FD`,`f`,`f*`,`B`,`B*`,`n`].indexOf(e)!==-1&&(t=!0),t};p.__private__.setDefaultPathOperation=p.setDefaultPathOperation=function(e){return Pt(e)&&(l=e),this};var Ft=p.__private__.getStyle=p.getStyle=function(e){var t=l;switch(e){case`D`:case`S`:t=`S`;break;case`F`:t=`f`;break;case`FD`:case`DF`:t=`B`;break;case`f`:case`f*`:case`B`:case`B*`:t=e}return t},It=p.close=function(){return H(`h`),this};p.stroke=function(){return H(`S`),this},p.fill=function(e){return Lt(`f`,e),this},p.fillEvenOdd=function(e){return Lt(`f*`,e),this},p.fillStroke=function(e){return Lt(`B`,e),this},p.fillStrokeEvenOdd=function(e){return Lt(`B*`,e),this};var Lt=function(e,t){hD(t)===`object`?Bt(t,e):H(e)},Rt=function(e){e===null||b===y&&e===void 0||(e=Ft(e),H(e))};function zt(e,t,n,r,i){var a=new OP(t||this.boundingBox,n||this.xStep,r||this.yStep,this.gState,i||this.matrix);return a.stream=this.stream,Ue(e+`$$`+ this.cloneIndex+++`$$`,a),a}var Bt=function(e,t){var n=ke[e.key],r=Oe[n];if(r instanceof DP)H(`q`),H(Vt(t)),r.gState&&p.setGState(r.gState),H(e.matrix.toString()+` cm`),H(`/`+n+` sh`),H(`Q`);else if(r instanceof OP){var i=new Be(1,0,0,-1,0,Cn());e.matrix&&(i=i.multiply(e.matrix||He),n=zt.call(r,e.key,e.boundingBox,e.xStep,e.yStep,i).id),H(`q`),H(`/Pattern cs`),H(`/`+n+` scn`),r.gState&&p.setGState(r.gState),H(t),H(`Q`)}},Vt=function(e){switch(e){case`f`:case`F`:case`n`:return`W n`;case`f*`:return`W* n`;case`B`:case`S`:return`W S`;case`B*`:return`W* S`}},Ht=p.moveTo=function(e,t){return H(w(k(e))+` `+w(A(t))+` m`),this},Ut=p.lineTo=function(e,t){return H(w(k(e))+` `+w(A(t))+` l`),this},Wt=p.curveTo=function(e,t,n,r,i,a){return H([w(k(e)),w(A(t)),w(k(n)),w(A(r)),w(k(i)),w(A(a)),`c`].join(` `)),this};p.__private__.line=p.line=function(e,t,n,r,i){if(isNaN(e)||isNaN(t)||isNaN(n)||isNaN(r)||!Pt(i))throw Error(`Invalid arguments passed to jsPDF.line`);return b===v?this.lines([[n-e,r-t]],e,t,[1,1],i||`S`):this.lines([[n-e,r-t]],e,t,[1,1]).stroke()},p.__private__.lines=p.lines=function(e,t,n,r,i,a){var o,s,c,l,u,d,f,p,m,h,g,_;if(typeof e==`number`&&(_=n,n=t,t=e,e=_),r||=[1,1],a||=!1,isNaN(t)||isNaN(n)||!Array.isArray(e)||!Array.isArray(r)||!Pt(i)||typeof a!=`boolean`)throw Error(`Invalid arguments passed to jsPDF.lines`);for(Ht(t,n),o=r[0],s=r[1],l=e.length,h=t,g=n,c=0;c>8&255,e>>16&255,e>>24&255)},SP.prototype.toHexString=function(e){return e.split(``).map(function(e){return(`0`+(255&e.charCodeAt(0)).toString(16)).slice(-2)}).join(``)},SP.prototype.hexToBytes=function(e){for(var t=[],n=0;n>8&255,e>>16&255,255&t,t>>8&255)).substr(0,10);return function(e){return bP(n,e)}},TP.prototype.equals=function(e){var t,n=`id,objectNumber,equals`;if(!e||hD(e)!==hD(this))return!1;var r=0;for(t in this)if(!(n.indexOf(t)>=0)){if(this.hasOwnProperty(t)&&!e.hasOwnProperty(t)||this[t]!==e[t])return!1;r++}for(t in e)e.hasOwnProperty(t)&&n.indexOf(t)<0&&r--;return r===0},kP.API={events:[]},kP.version=`4.2.1`;var AP=kP.API,jP=1,MP=function(e){return e.replace(/\\/g,`\\\\`).replace(/\(/g,`\\(`).replace(/\)/g,`\\)`)},NP=function(e){return e.replace(/\\\\/g,`\\`).replace(/\\\(/g,`(`).replace(/\\\)/g,`)`)},PP=function(e){return e.toString().replace(/#/g,`#23`).replace(/[\s\n\r()<>[\]{}\/%]/g,function(e){var t=e.charCodeAt(0).toString(16).toUpperCase();return`#`+(t.length===1?`0`+t:t)})},FP=function(e){return e.toFixed(2)},IP=function(e){return e.toFixed(5)};AP.__acroform__={};var LP=function(e,t){e.prototype=Object.create(t.prototype),e.prototype.constructor=e},RP=function(e){return e*jP},zP=function(e){var t=new nF,n=gF.internal.getHeight(e)||0,r=gF.internal.getWidth(e)||0;return t.BBox=[0,0,Number(FP(r)),Number(FP(n))],t},BP=AP.__acroform__.setBit=function(e,t){if(e||=0,t||=0,isNaN(e)||isNaN(t))throw Error(`Invalid arguments passed to jsPDF.API.__acroform__.setBit`);return e|1<0;){t=``,a--;var l,u,d=YP(`3`,e,a).height,f=e.multiline?o-a:(o-d)/2,p=f+=2,m=0,h=0,g=0;if(a<=0){t=`(...) Tj -`,t+=`% Width of Text: `+YP(t,e,a=12).width+`, FieldWidth:`+s+` -`;break}for(var _=``,v=0,y=0;yo)continue t;_+=i[y][g],b=!0,h=y,y--}else{_=(_+=i[y][g]+` `).substr(_.length-1)==` `?_.substr(0,_.length-1):_;var x=parseInt(y),S=c(x,_,a),C=y>=i.length-1;if(S&&!C){_+=` `,g=0;continue}if(S||C){if(C)h=x;else if(e.multiline&&(d+2)*(v+2)+2>o)continue t}else{if(!e.multiline||(d+2)*(v+2)+2>o)continue t;h=x}}for(var w=``,T=m;T<=h;T++){var E=i[T];if(e.multiline){if(T===h){w+=E[g]+` `,g=(g+1)%E.length;continue}if(T===m){w+=E[E.length-1]+` `;continue}}w+=E[0]+` `}switch(w=w.substr(w.length-1)==` `?w.substr(0,w.length-1):w,u=YP(w,e,a).width,e.textAlign){case`right`:l=s-u-2;break;case`center`:l=(s-u)/2;break;default:l=2}t+=FP(l)+` `+FP(p)+` Td -`,t+=`(`+MP(w)+`) Tj -`,t+=-FP(l)+` 0 Td -`,p=-(a+2),u=0,m=b?h:h+1,v++,_=``}break}return r.text=t,r.fontSize=a,r},YP=function(e,t,n){var r=t.scope.internal.getFont(t.fontName,t.fontStyle),i=t.scope.getStringUnitWidth(e,{font:r,fontSize:parseFloat(n),charSpace:0})*parseFloat(n);return{height:t.scope.getStringUnitWidth(`3`,{font:r,fontSize:parseFloat(n),charSpace:0})*parseFloat(n)*1.5,width:i}},XP={fields:[],xForms:[],acroFormDictionaryRoot:null,printedOut:!1,internal:null,isInitialized:!1},ZP=function(e,t){var n={type:`reference`,object:e};t.internal.getPageInfo(e.page).pageContext.annotations.find(function(e){return e.type===n.type&&e.object===n.object})===void 0&&t.internal.getPageInfo(e.page).pageContext.annotations.push(n)},QP=function(e,t){if(t.scope=e,e.internal!==void 0&&(e.internal.acroformPlugin===void 0||!1===e.internal.acroformPlugin.isInitialized)){if(iF.FieldNum=0,e.internal.acroformPlugin=JSON.parse(JSON.stringify(XP)),e.internal.acroformPlugin.acroFormDictionaryRoot)throw Error(`Exception while creating AcroformDictionary`);jP=e.internal.scaleFactor,e.internal.acroformPlugin.acroFormDictionaryRoot=new rF,e.internal.acroformPlugin.acroFormDictionaryRoot.scope=e,e.internal.acroformPlugin.acroFormDictionaryRoot._eventID=e.internal.events.subscribe(`postPutResources`,function(){(function(e){e.internal.events.unsubscribe(e.internal.acroformPlugin.acroFormDictionaryRoot._eventID),delete e.internal.acroformPlugin.acroFormDictionaryRoot._eventID,e.internal.acroformPlugin.printedOut=!0})(e)}),e.internal.events.subscribe(`buildDocument`,function(){(function(e){e.internal.acroformPlugin.acroFormDictionaryRoot.objId=void 0;var t=e.internal.acroformPlugin.acroFormDictionaryRoot.Fields;for(var n in t)if(t.hasOwnProperty(n)){var r=t[n];r.objId=void 0,r.hasAnnotation&&ZP(r,e)}})(e)}),e.internal.events.subscribe(`putCatalog`,function(){(function(e){if(e.internal.acroformPlugin.acroFormDictionaryRoot===void 0)throw Error(`putCatalogCallback: Root missing.`);e.internal.write(`/AcroForm `+e.internal.acroformPlugin.acroFormDictionaryRoot.objId+` 0 R`)})(e)}),e.internal.events.subscribe(`postPutPages`,function(t){(function(e,t){var n=!e;for(var r in e||(t.internal.newObjectDeferredBegin(t.internal.acroformPlugin.acroFormDictionaryRoot.objId,!0),t.internal.acroformPlugin.acroFormDictionaryRoot.putStream()),e||=t.internal.acroformPlugin.acroFormDictionaryRoot.Kids)if(e.hasOwnProperty(r)){var i=e[r],a=[],o=i.Rect;if(i.Rect&&=KP(i.Rect,t),t.internal.newObjectDeferredBegin(i.objId,!0),i.DA=gF.createDefaultAppearanceStream(i),hD(i)===`object`&&typeof i.getKeyValueListForStream==`function`&&(a=i.getKeyValueListForStream()),i.Rect=o,i.hasAppearanceStream&&!i.appearanceStreamContent){var s=qP(i);a.push({key:`AP`,value:`<>`}),t.internal.acroformPlugin.xForms.push(s)}if(i.appearanceStreamContent){var c=``;for(var l in i.appearanceStreamContent)if(i.appearanceStreamContent.hasOwnProperty(l)){var u=i.appearanceStreamContent[l];if(c+=`/`+l+` `,c+=`<<`,Object.keys(u).length>=1||Array.isArray(u)){for(var r in u)if(u.hasOwnProperty(r)){var d=u[r];typeof d==`function`&&(d=d.call(t,i)),c+=`/`+r+` `+d+` `,t.internal.acroformPlugin.xForms.indexOf(d)>=0||t.internal.acroformPlugin.xForms.push(d)}}else typeof(d=u)==`function`&&(d=d.call(t,i)),c+=`/`+r+` `+d,t.internal.acroformPlugin.xForms.indexOf(d)>=0||t.internal.acroformPlugin.xForms.push(d);c+=`>>`}a.push({key:`AP`,value:`<< -`+c+`>>`})}t.internal.putStream({additionalKeyValues:a,objectId:i.objId}),t.internal.out(`endobj`)}n&&function(e,t){for(var n in e)if(e.hasOwnProperty(n)){var r=n,i=e[n];t.internal.newObjectDeferredBegin(i.objId,!0),hD(i)===`object`&&typeof i.putStream==`function`&&i.putStream(),delete e[r]}}(t.internal.acroformPlugin.xForms,t)})(t,e)}),e.internal.acroformPlugin.isInitialized=!0}},$P=AP.__acroform__.arrayToPdfArray=function(e,t,n){var r=function(e){return e};if(Array.isArray(e)){for(var i=`[`,a=0;a0?t:void 0}}),Object.defineProperty(this,"Fields",{enumerable:!1,configurable:!1,get:function(){return t}}),Object.defineProperty(this,"DA",{enumerable:!1,configurable:!1,get:function(){if(e){var t=function(e){return e};return this.scope&&(t=this.scope.internal.getEncryptor(this.objId)),`(`+MP(t(e))+`)`}},set:function(t){e=t}})};LP(rF,tF);var iF=function e(){tF.call(this);var t=4;Object.defineProperty(this,"F",{enumerable:!1,configurable:!1,get:function(){return t},set:function(e){if(isNaN(e))throw Error(`Invalid value "`+e+`" for attribute F supplied.`);t=e}}),Object.defineProperty(this,"showWhenPrinted",{enumerable:!0,configurable:!0,get:function(){return!!UP(t,3)},set:function(e){!!e==1?this.F=WP(t,3):this.F=GP(t,3)}});var n=0;Object.defineProperty(this,"Ff",{enumerable:!1,configurable:!1,get:function(){return n},set:function(e){if(isNaN(e))throw Error(`Invalid value "`+e+`" for attribute Ff supplied.`);n=e}});var r=[];Object.defineProperty(this,"Rect",{enumerable:!1,configurable:!1,get:function(){if(r.length!==0)return r},set:function(e){r=e===void 0?[]:e}}),Object.defineProperty(this,"x",{enumerable:!0,configurable:!0,get:function(){return!r||isNaN(r[0])?0:r[0]},set:function(e){r[0]=e}}),Object.defineProperty(this,"y",{enumerable:!0,configurable:!0,get:function(){return!r||isNaN(r[1])?0:r[1]},set:function(e){r[1]=e}}),Object.defineProperty(this,"width",{enumerable:!0,configurable:!0,get:function(){return!r||isNaN(r[2])?0:r[2]},set:function(e){r[2]=e}}),Object.defineProperty(this,"height",{enumerable:!0,configurable:!0,get:function(){return!r||isNaN(r[3])?0:r[3]},set:function(e){r[3]=e}});var i=``;Object.defineProperty(this,"FT",{enumerable:!0,configurable:!1,get:function(){return i},set:function(e){switch(e){case`/Btn`:case`/Tx`:case`/Ch`:case`/Sig`:i=e;break;default:throw Error(`Invalid value "`+e+`" for attribute FT supplied.`)}}});var a=null;Object.defineProperty(this,"T",{enumerable:!0,configurable:!1,get:function(){if(!a||a.length<1){if(this instanceof fF)return;a=`FieldObject`+ e.FieldNum++}var t=function(e){return e};return this.scope&&(t=this.scope.internal.getEncryptor(this.objId)),`(`+MP(t(a))+`)`},set:function(e){a=e.toString()}}),Object.defineProperty(this,"fieldName",{configurable:!0,enumerable:!0,get:function(){return a},set:function(e){a=e}});var o=`helvetica`;Object.defineProperty(this,"fontName",{enumerable:!0,configurable:!0,get:function(){return o},set:function(e){o=e}});var s=`normal`;Object.defineProperty(this,"fontStyle",{enumerable:!0,configurable:!0,get:function(){return s},set:function(e){s=e}});var c=0;Object.defineProperty(this,"fontSize",{enumerable:!0,configurable:!0,get:function(){return c},set:function(e){c=e}});var l=void 0;Object.defineProperty(this,"maxFontSize",{enumerable:!0,configurable:!0,get:function(){return l===void 0?50/jP:l},set:function(e){l=e}});var u=`black`;Object.defineProperty(this,"color",{enumerable:!0,configurable:!0,get:function(){return u},set:function(e){u=e}});var d=`/F1 0 Tf 0 g`;Object.defineProperty(this,"DA",{enumerable:!0,configurable:!1,get:function(){if(!(!d||this instanceof fF||this instanceof mF))return eF(d,this.objId,this.scope)},set:function(e){e=e.toString(),d=e}});var f=null;Object.defineProperty(this,"DV",{enumerable:!1,configurable:!1,get:function(){if(f)return this instanceof lF==0?eF(f,this.objId,this.scope):f},set:function(e){e=e.toString(),f=this instanceof lF==0?e.substr(0,1)===`(`?NP(e.substr(1,e.length-2)):NP(e):e}}),Object.defineProperty(this,"defaultValue",{enumerable:!0,configurable:!0,get:function(){return this instanceof lF==1?NP(f.substr(1,f.length-1)):f},set:function(e){e=e.toString(),f=this instanceof lF==1?`/`+PP(e):e}});var p=null;Object.defineProperty(this,"_V",{enumerable:!1,configurable:!1,get:function(){if(p)return p},set:function(e){this.V=e}}),Object.defineProperty(this,"V",{enumerable:!1,configurable:!1,get:function(){if(p)return this instanceof lF==0?eF(p,this.objId,this.scope):p},set:function(e){e=e.toString(),p=this instanceof lF==0?e.substr(0,1)===`(`?NP(e.substr(1,e.length-2)):NP(e):e}}),Object.defineProperty(this,"value",{enumerable:!0,configurable:!0,get:function(){return this instanceof lF==1?NP(p.substr(1,p.length-1)):p},set:function(e){e=e.toString(),p=this instanceof lF==1?`/`+PP(e):e}}),Object.defineProperty(this,"hasAnnotation",{enumerable:!0,configurable:!0,get:function(){return this.Rect}}),Object.defineProperty(this,"Type",{enumerable:!0,configurable:!1,get:function(){return this.hasAnnotation?`/Annot`:null}}),Object.defineProperty(this,"Subtype",{enumerable:!0,configurable:!1,get:function(){return this.hasAnnotation?`/Widget`:null}});var m,h=!1;Object.defineProperty(this,"hasAppearanceStream",{enumerable:!0,configurable:!0,get:function(){return h},set:function(e){e=!!e,h=e}}),Object.defineProperty(this,"page",{enumerable:!0,configurable:!0,get:function(){if(m)return m},set:function(e){m=e}}),Object.defineProperty(this,"readOnly",{enumerable:!0,configurable:!0,get:function(){return!!UP(this.Ff,1)},set:function(e){!!e==1?this.Ff=WP(this.Ff,1):this.Ff=GP(this.Ff,1)}}),Object.defineProperty(this,"required",{enumerable:!0,configurable:!0,get:function(){return!!UP(this.Ff,2)},set:function(e){!!e==1?this.Ff=WP(this.Ff,2):this.Ff=GP(this.Ff,2)}}),Object.defineProperty(this,"noExport",{enumerable:!0,configurable:!0,get:function(){return!!UP(this.Ff,3)},set:function(e){!!e==1?this.Ff=WP(this.Ff,3):this.Ff=GP(this.Ff,3)}});var g=null;Object.defineProperty(this,"Q",{enumerable:!0,configurable:!1,get:function(){if(g!==null)return g},set:function(e){if([0,1,2].indexOf(e)===-1)throw Error(`Invalid value "`+e+`" for attribute Q supplied.`);g=e}}),Object.defineProperty(this,"textAlign",{get:function(){var e;switch(g){case 0:default:e=`left`;break;case 1:e=`center`;break;case 2:e=`right`}return e},configurable:!0,enumerable:!0,set:function(e){switch(e){case`right`:case 2:g=2;break;case`center`:case 1:g=1;break;default:g=0}}})};LP(iF,tF);var aF=function(){iF.call(this),this.FT=`/Ch`,this.V=`()`,this.fontName=`zapfdingbats`;var e=0;Object.defineProperty(this,"TI",{enumerable:!0,configurable:!1,get:function(){return e},set:function(t){e=t}}),Object.defineProperty(this,"topIndex",{enumerable:!0,configurable:!0,get:function(){return e},set:function(t){e=t}});var t=[];Object.defineProperty(this,"Opt",{enumerable:!0,configurable:!1,get:function(){return $P(t,this.objId,this.scope)},set:function(e){var n,r=[];typeof(n=e)==`string`&&(r=function(e,t,n){n||=1;for(var r,i=[];r=t.exec(e);)i.push(r[n]);return i}(n,/\((.*?)\)/g)),t=r}}),this.getOptions=function(){return t},this.setOptions=function(e){t=e,this.sort&&t.sort()},this.addOption=function(e){e=(e||=``).toString(),t.push(e),this.sort&&t.sort()},this.removeOption=function(e,n){for(n||=!1,e=(e||=``).toString();t.indexOf(e)!==-1&&(t.splice(t.indexOf(e),1),!1!==n););},Object.defineProperty(this,"combo",{enumerable:!0,configurable:!0,get:function(){return!!UP(this.Ff,18)},set:function(e){!!e==1?this.Ff=WP(this.Ff,18):this.Ff=GP(this.Ff,18)}}),Object.defineProperty(this,"edit",{enumerable:!0,configurable:!0,get:function(){return!!UP(this.Ff,19)},set:function(e){!0===this.combo&&(!!e==1?this.Ff=WP(this.Ff,19):this.Ff=GP(this.Ff,19))}}),Object.defineProperty(this,"sort",{enumerable:!0,configurable:!0,get:function(){return!!UP(this.Ff,20)},set:function(e){!!e==1?(this.Ff=WP(this.Ff,20),t.sort()):this.Ff=GP(this.Ff,20)}}),Object.defineProperty(this,"multiSelect",{enumerable:!0,configurable:!0,get:function(){return!!UP(this.Ff,22)},set:function(e){!!e==1?this.Ff=WP(this.Ff,22):this.Ff=GP(this.Ff,22)}}),Object.defineProperty(this,"doNotSpellCheck",{enumerable:!0,configurable:!0,get:function(){return!!UP(this.Ff,23)},set:function(e){!!e==1?this.Ff=WP(this.Ff,23):this.Ff=GP(this.Ff,23)}}),Object.defineProperty(this,"commitOnSelChange",{enumerable:!0,configurable:!0,get:function(){return!!UP(this.Ff,27)},set:function(e){!!e==1?this.Ff=WP(this.Ff,27):this.Ff=GP(this.Ff,27)}}),this.hasAppearanceStream=!1};LP(aF,iF);var oF=function(){aF.call(this),this.fontName=`helvetica`,this.combo=!1};LP(oF,aF);var sF=function(){oF.call(this),this.combo=!0};LP(sF,oF);var cF=function(){sF.call(this),this.edit=!0};LP(cF,sF);var lF=function(){iF.call(this),this.FT=`/Btn`,Object.defineProperty(this,"noToggleToOff",{enumerable:!0,configurable:!0,get:function(){return!!UP(this.Ff,15)},set:function(e){!!e==1?this.Ff=WP(this.Ff,15):this.Ff=GP(this.Ff,15)}}),Object.defineProperty(this,"radio",{enumerable:!0,configurable:!0,get:function(){return!!UP(this.Ff,16)},set:function(e){!!e==1?this.Ff=WP(this.Ff,16):this.Ff=GP(this.Ff,16)}}),Object.defineProperty(this,"pushButton",{enumerable:!0,configurable:!0,get:function(){return!!UP(this.Ff,17)},set:function(e){!!e==1?this.Ff=WP(this.Ff,17):this.Ff=GP(this.Ff,17)}}),Object.defineProperty(this,"radioIsUnison",{enumerable:!0,configurable:!0,get:function(){return!!UP(this.Ff,26)},set:function(e){!!e==1?this.Ff=WP(this.Ff,26):this.Ff=GP(this.Ff,26)}});var e,t={};Object.defineProperty(this,"MK",{enumerable:!1,configurable:!1,get:function(){var e=function(e){return e};if(this.scope&&(e=this.scope.internal.getEncryptor(this.objId)),Object.keys(t).length!==0){var n,r=[];for(n in r.push(`<<`),t)r.push(`/`+n+` (`+MP(e(t[n]))+`)`);return r.push(`>>`),r.join(` -`)}},set:function(e){hD(e)===`object`&&(t=e)}}),Object.defineProperty(this,"caption",{enumerable:!0,configurable:!0,get:function(){return t.CA||``},set:function(e){typeof e==`string`&&(t.CA=e)}}),Object.defineProperty(this,"AS",{enumerable:!1,configurable:!1,get:function(){return e},set:function(t){var n=t==null?``:t.toString();n.substr(0,1)===`/`&&(n=n.substr(1)),e=`/`+PP(n)}}),Object.defineProperty(this,"appearanceState",{enumerable:!0,configurable:!0,get:function(){return e.substr(1,e.length-1)},set:function(t){e=`/`+PP(t)}})};LP(lF,iF);var uF=function(){lF.call(this),this.pushButton=!0};LP(uF,lF);var dF=function(){lF.call(this),this.radio=!0,this.pushButton=!1;var e=[];Object.defineProperty(this,"Kids",{enumerable:!0,configurable:!1,get:function(){return e},set:function(t){e=t===void 0?[]:t}})};LP(dF,lF);var fF=function(){var e,t;iF.call(this),Object.defineProperty(this,"Parent",{enumerable:!1,configurable:!1,get:function(){return e},set:function(t){e=t}}),Object.defineProperty(this,"optionName",{enumerable:!1,configurable:!0,get:function(){return t},set:function(e){t=e}});var n,r={};Object.defineProperty(this,"MK",{enumerable:!1,configurable:!1,get:function(){var e=function(e){return e};this.scope&&(e=this.scope.internal.getEncryptor(this.objId));var t,n=[];for(t in n.push(`<<`),r)n.push(`/`+t+` (`+MP(e(r[t]))+`)`);return n.push(`>>`),n.join(` -`)},set:function(e){hD(e)===`object`&&(r=e)}}),Object.defineProperty(this,"caption",{enumerable:!0,configurable:!0,get:function(){return r.CA||``},set:function(e){typeof e==`string`&&(r.CA=e)}}),Object.defineProperty(this,"AS",{enumerable:!1,configurable:!1,get:function(){return n},set:function(e){var t=e==null?``:e.toString();t.substr(0,1)===`/`&&(t=t.substr(1)),n=`/`+PP(t)}}),Object.defineProperty(this,"appearanceState",{enumerable:!0,configurable:!0,get:function(){return n.substr(1,n.length-1)},set:function(e){var t=e==null?``:e.toString();t.substr(0,1)===`/`&&(t=t.substr(1)),n=`/`+PP(t)}}),this.caption=`l`,this.appearanceState=`Off`,this._AppearanceType=gF.RadioButton.Circle,this.appearanceStreamContent=this._AppearanceType.createAppearanceStream(this.optionName)};LP(fF,iF),dF.prototype.setAppearance=function(e){if(!(`createAppearanceStream`in e)||!(`getCA`in e))throw Error(`Couldn't assign Appearance to RadioButton. Appearance was Invalid!`);for(var t in this.Kids)if(this.Kids.hasOwnProperty(t)){var n=this.Kids[t];n.appearanceStreamContent=e.createAppearanceStream(n.optionName),n.caption=e.getCA()}},dF.prototype.createOption=function(e){var t=new fF;return t.Parent=this,t.optionName=e,this.Kids.push(t),_F.call(this.scope,t),t};var pF=function(){lF.call(this),this.fontName=`zapfdingbats`,this.caption=`3`,this.appearanceState=`On`,this.value=`On`,this.textAlign=`center`,this.appearanceStreamContent=gF.CheckBox.createAppearanceStream()};LP(pF,lF);var mF=function(){iF.call(this),this.FT=`/Tx`,Object.defineProperty(this,"multiline",{enumerable:!0,configurable:!0,get:function(){return!!UP(this.Ff,13)},set:function(e){!!e==1?this.Ff=WP(this.Ff,13):this.Ff=GP(this.Ff,13)}}),Object.defineProperty(this,"fileSelect",{enumerable:!0,configurable:!0,get:function(){return!!UP(this.Ff,21)},set:function(e){!!e==1?this.Ff=WP(this.Ff,21):this.Ff=GP(this.Ff,21)}}),Object.defineProperty(this,"doNotSpellCheck",{enumerable:!0,configurable:!0,get:function(){return!!UP(this.Ff,23)},set:function(e){!!e==1?this.Ff=WP(this.Ff,23):this.Ff=GP(this.Ff,23)}}),Object.defineProperty(this,"doNotScroll",{enumerable:!0,configurable:!0,get:function(){return!!UP(this.Ff,24)},set:function(e){!!e==1?this.Ff=WP(this.Ff,24):this.Ff=GP(this.Ff,24)}}),Object.defineProperty(this,"comb",{enumerable:!0,configurable:!0,get:function(){return!!UP(this.Ff,25)},set:function(e){!!e==1?this.Ff=WP(this.Ff,25):this.Ff=GP(this.Ff,25)}}),Object.defineProperty(this,"richText",{enumerable:!0,configurable:!0,get:function(){return!!UP(this.Ff,26)},set:function(e){!!e==1?this.Ff=WP(this.Ff,26):this.Ff=GP(this.Ff,26)}});var e=null;Object.defineProperty(this,"MaxLen",{enumerable:!0,configurable:!1,get:function(){return e},set:function(t){e=t}}),Object.defineProperty(this,"maxLength",{enumerable:!0,configurable:!0,get:function(){return e},set:function(t){Number.isInteger(t)&&(e=t)}}),Object.defineProperty(this,"hasAppearanceStream",{enumerable:!0,configurable:!0,get:function(){return this.V||this.DV}})};LP(mF,iF);var hF=function(){mF.call(this),Object.defineProperty(this,"password",{enumerable:!0,configurable:!0,get:function(){return!!UP(this.Ff,14)},set:function(e){!!e==1?this.Ff=WP(this.Ff,14):this.Ff=GP(this.Ff,14)}}),this.password=!0};LP(hF,mF);var gF={CheckBox:{createAppearanceStream:function(){return{N:{On:gF.CheckBox.YesNormal},D:{On:gF.CheckBox.YesPushDown,Off:gF.CheckBox.OffPushDown}}},YesPushDown:function(e){var t=zP(e);t.scope=e.scope;var n=[],r=e.scope.internal.getFont(e.fontName,e.fontStyle).id,i=e.scope.__private__.encodeColorString(e.color),a=JP(e,e.caption);return n.push(`0.749023 g`),n.push(`0 0 `+FP(gF.internal.getWidth(e))+` `+FP(gF.internal.getHeight(e))+` re`),n.push(`f`),n.push(`BMC`),n.push(`q`),n.push(`0 0 1 rg`),n.push(`/`+r+` `+FP(a.fontSize)+` Tf `+i),n.push(`BT`),n.push(a.text),n.push(`ET`),n.push(`Q`),n.push(`EMC`),t.stream=n.join(` -`),t},YesNormal:function(e){var t=zP(e);t.scope=e.scope;var n=e.scope.internal.getFont(e.fontName,e.fontStyle).id,r=e.scope.__private__.encodeColorString(e.color),i=[],a=gF.internal.getHeight(e),o=gF.internal.getWidth(e),s=JP(e,e.caption);return i.push(`1 g`),i.push(`0 0 `+FP(o)+` `+FP(a)+` re`),i.push(`f`),i.push(`q`),i.push(`0 0 1 rg`),i.push(`0 0 `+FP(o-1)+` `+FP(a-1)+` re`),i.push(`W`),i.push(`n`),i.push(`0 g`),i.push(`BT`),i.push(`/`+n+` `+FP(s.fontSize)+` Tf `+r),i.push(s.text),i.push(`ET`),i.push(`Q`),t.stream=i.join(` -`),t},OffPushDown:function(e){var t=zP(e);t.scope=e.scope;var n=[];return n.push(`0.749023 g`),n.push(`0 0 `+FP(gF.internal.getWidth(e))+` `+FP(gF.internal.getHeight(e))+` re`),n.push(`f`),t.stream=n.join(` -`),t}},RadioButton:{Circle:{createAppearanceStream:function(e){var t={D:{Off:gF.RadioButton.Circle.OffPushDown},N:{}};return t.N[e]=gF.RadioButton.Circle.YesNormal,t.D[e]=gF.RadioButton.Circle.YesPushDown,t},getCA:function(){return`l`},YesNormal:function(e){var t=zP(e);t.scope=e.scope;var n=[],r=gF.internal.getWidth(e)<=gF.internal.getHeight(e)?gF.internal.getWidth(e)/4:gF.internal.getHeight(e)/4;r=Number((.9*r).toFixed(5));var i=gF.internal.Bezier_C,a=Number((r*i).toFixed(5));return n.push(`q`),n.push(`1 0 0 1 `+IP(gF.internal.getWidth(e)/2)+` `+IP(gF.internal.getHeight(e)/2)+` cm`),n.push(r+` 0 m`),n.push(r+` `+a+` `+a+` `+r+` 0 `+r+` c`),n.push(`-`+a+` `+r+` -`+r+` `+a+` -`+r+` 0 c`),n.push(`-`+r+` -`+a+` -`+a+` -`+r+` 0 -`+r+` c`),n.push(a+` -`+r+` `+r+` -`+a+` `+r+` 0 c`),n.push(`f`),n.push(`Q`),t.stream=n.join(` -`),t},YesPushDown:function(e){var t=zP(e);t.scope=e.scope;var n=[],r=gF.internal.getWidth(e)<=gF.internal.getHeight(e)?gF.internal.getWidth(e)/4:gF.internal.getHeight(e)/4;r=Number((.9*r).toFixed(5));var i=Number((2*r).toFixed(5)),a=Number((i*gF.internal.Bezier_C).toFixed(5)),o=Number((r*gF.internal.Bezier_C).toFixed(5));return n.push(`0.749023 g`),n.push(`q`),n.push(`1 0 0 1 `+IP(gF.internal.getWidth(e)/2)+` `+IP(gF.internal.getHeight(e)/2)+` cm`),n.push(i+` 0 m`),n.push(i+` `+a+` `+a+` `+i+` 0 `+i+` c`),n.push(`-`+a+` `+i+` -`+i+` `+a+` -`+i+` 0 c`),n.push(`-`+i+` -`+a+` -`+a+` -`+i+` 0 -`+i+` c`),n.push(a+` -`+i+` `+i+` -`+a+` `+i+` 0 c`),n.push(`f`),n.push(`Q`),n.push(`0 g`),n.push(`q`),n.push(`1 0 0 1 `+IP(gF.internal.getWidth(e)/2)+` `+IP(gF.internal.getHeight(e)/2)+` cm`),n.push(r+` 0 m`),n.push(r+` `+o+` `+o+` `+r+` 0 `+r+` c`),n.push(`-`+o+` `+r+` -`+r+` `+o+` -`+r+` 0 c`),n.push(`-`+r+` -`+o+` -`+o+` -`+r+` 0 -`+r+` c`),n.push(o+` -`+r+` `+r+` -`+o+` `+r+` 0 c`),n.push(`f`),n.push(`Q`),t.stream=n.join(` -`),t},OffPushDown:function(e){var t=zP(e);t.scope=e.scope;var n=[],r=gF.internal.getWidth(e)<=gF.internal.getHeight(e)?gF.internal.getWidth(e)/4:gF.internal.getHeight(e)/4;r=Number((.9*r).toFixed(5));var i=Number((2*r).toFixed(5)),a=Number((i*gF.internal.Bezier_C).toFixed(5));return n.push(`0.749023 g`),n.push(`q`),n.push(`1 0 0 1 `+IP(gF.internal.getWidth(e)/2)+` `+IP(gF.internal.getHeight(e)/2)+` cm`),n.push(i+` 0 m`),n.push(i+` `+a+` `+a+` `+i+` 0 `+i+` c`),n.push(`-`+a+` `+i+` -`+i+` `+a+` -`+i+` 0 c`),n.push(`-`+i+` -`+a+` -`+a+` -`+i+` 0 -`+i+` c`),n.push(a+` -`+i+` `+i+` -`+a+` `+i+` 0 c`),n.push(`f`),n.push(`Q`),t.stream=n.join(` -`),t}},Cross:{createAppearanceStream:function(e){var t={D:{Off:gF.RadioButton.Cross.OffPushDown},N:{}};return t.N[e]=gF.RadioButton.Cross.YesNormal,t.D[e]=gF.RadioButton.Cross.YesPushDown,t},getCA:function(){return`8`},YesNormal:function(e){var t=zP(e);t.scope=e.scope;var n=[],r=gF.internal.calculateCross(e);return n.push(`q`),n.push(`1 1 `+FP(gF.internal.getWidth(e)-2)+` `+FP(gF.internal.getHeight(e)-2)+` re`),n.push(`W`),n.push(`n`),n.push(FP(r.x1.x)+` `+FP(r.x1.y)+` m`),n.push(FP(r.x2.x)+` `+FP(r.x2.y)+` l`),n.push(FP(r.x4.x)+` `+FP(r.x4.y)+` m`),n.push(FP(r.x3.x)+` `+FP(r.x3.y)+` l`),n.push(`s`),n.push(`Q`),t.stream=n.join(` -`),t},YesPushDown:function(e){var t=zP(e);t.scope=e.scope;var n=gF.internal.calculateCross(e),r=[];return r.push(`0.749023 g`),r.push(`0 0 `+FP(gF.internal.getWidth(e))+` `+FP(gF.internal.getHeight(e))+` re`),r.push(`f`),r.push(`q`),r.push(`1 1 `+FP(gF.internal.getWidth(e)-2)+` `+FP(gF.internal.getHeight(e)-2)+` re`),r.push(`W`),r.push(`n`),r.push(FP(n.x1.x)+` `+FP(n.x1.y)+` m`),r.push(FP(n.x2.x)+` `+FP(n.x2.y)+` l`),r.push(FP(n.x4.x)+` `+FP(n.x4.y)+` m`),r.push(FP(n.x3.x)+` `+FP(n.x3.y)+` l`),r.push(`s`),r.push(`Q`),t.stream=r.join(` -`),t},OffPushDown:function(e){var t=zP(e);t.scope=e.scope;var n=[];return n.push(`0.749023 g`),n.push(`0 0 `+FP(gF.internal.getWidth(e))+` `+FP(gF.internal.getHeight(e))+` re`),n.push(`f`),t.stream=n.join(` -`),t}}},createDefaultAppearanceStream:function(e){var t=e.scope.internal.getFont(e.fontName,e.fontStyle).id,n=e.scope.__private__.encodeColorString(e.color);return`/`+t+` `+e.fontSize+` Tf `+n}};gF.internal={Bezier_C:.551915024494,calculateCross:function(e){var t=gF.internal.getWidth(e),n=gF.internal.getHeight(e),r=Math.min(t,n);return{x1:{x:(t-r)/2,y:(n-r)/2+r},x2:{x:(t-r)/2+r,y:(n-r)/2},x3:{x:(t-r)/2,y:(n-r)/2},x4:{x:(t-r)/2+r,y:(n-r)/2+r}}}},gF.internal.getWidth=function(e){var t=0;return hD(e)===`object`&&(t=RP(e.Rect[2])),t},gF.internal.getHeight=function(e){var t=0;return hD(e)===`object`&&(t=RP(e.Rect[3])),t};var _F=AP.addField=function(e){if(QP(this,e),!(e instanceof iF))throw Error(`Invalid argument passed to jsPDF.addField.`);var t;return(t=e).scope.internal.acroformPlugin.printedOut&&(t.scope.internal.acroformPlugin.printedOut=!1,t.scope.internal.acroformPlugin.acroFormDictionaryRoot=null),t.scope.internal.acroformPlugin.acroFormDictionaryRoot.Fields.push(t),e.page=e.scope.internal.getCurrentPageInfo().pageNumber,this};AP.AcroFormChoiceField=aF,AP.AcroFormListBox=oF,AP.AcroFormComboBox=sF,AP.AcroFormEditBox=cF,AP.AcroFormButton=lF,AP.AcroFormPushButton=uF,AP.AcroFormRadioButton=dF,AP.AcroFormCheckBox=pF,AP.AcroFormTextField=mF,AP.AcroFormPasswordField=hF,AP.AcroFormAppearance=gF,AP.AcroForm={ChoiceField:aF,ListBox:oF,ComboBox:sF,EditBox:cF,Button:lF,PushButton:uF,RadioButton:dF,CheckBox:pF,TextField:mF,PasswordField:hF,Appearance:gF},kP.AcroForm={ChoiceField:aF,ListBox:oF,ComboBox:sF,EditBox:cF,Button:lF,PushButton:uF,RadioButton:dF,CheckBox:pF,TextField:mF,PasswordField:hF,Appearance:gF},kP.AcroForm;function vF(e){return e.reduce(function(e,t,n){return e[t]=n,e},{})}(function(e){var t=`addImage_`;e.__addimage__={};var n=`UNKNOWN`,r={PNG:[[137,80,78,71]],TIFF:[[77,77,0,42],[73,73,42,0]],JPEG:[[255,216,255,224,void 0,void 0,74,70,73,70,0],[255,216,255,225,void 0,void 0,69,120,105,102,0,0],[255,216,255,219],[255,216,255,238]],JPEG2000:[[0,0,0,12,106,80,32,32]],GIF87a:[[71,73,70,56,55,97]],GIF89a:[[71,73,70,56,57,97]],WEBP:[[82,73,70,70,void 0,void 0,void 0,void 0,87,69,66,80]],BMP:[[66,77],[66,65],[67,73],[67,80],[73,67],[80,84]]},i=e.__addimage__.getImageFileTypeByImageData=function(e,t){var i,a,o,s,c,l=n;if((t||=n)===`RGBA`||e.data!==void 0&&e.data instanceof Uint8ClampedArray&&`height`in e&&`width`in e)return`RGBA`;if(S(e))for(c in r)for(o=r[c],i=0;i>`}),`transparency`in t&&Array.isArray(t.transparency)&&t.transparency.length>0){for(var o=``,s=0,c=t.transparency.length;s>`,m.content=i;var v=m.objId+` 0 R`;i=`<>`,h.content=i,this.internal.write(m.objId,`0 R`,h.objId,`0 R`);break;case`freetext`:r=`/Rect [`+a(n.bounds.x)+` `+o(n.bounds.y)+` `+a(n.bounds.x+n.bounds.w)+` `+o(n.bounds.y+n.bounds.h)+`] `;var y=`font: Helvetica,sans-serif 12.0pt; text-align:left; color:#`+(n.color||`#000000`);i=`<>`,this.internal.write(i);break;case`link`:if(n.options.name){var b=this.annotations._nameMap[n.options.name];n.options.pageNumber=b.page,n.options.top=b.y}else n.options.top||(n.options.top=0);if(r=`/Rect [`+n.finalBounds.x+` `+n.finalBounds.y+` `+n.finalBounds.w+` `+n.finalBounds.h+`] `,i=``,n.options.url)i=`<>`;else if(n.options.pageNumber)switch(i=`<>`,this.internal.write(i))}}this.internal.write(`]`)}}]),e.createAnnotation=function(e){var t=this.internal.getCurrentPageInfo();switch(e.type){case`link`:this.link(e.bounds.x,e.bounds.y,e.bounds.w,e.bounds.h,e);break;case`text`:case`freetext`:t.pageContext.annotations.push(e)}},e.link=function(e,t,n,r,i){var a=this.internal.getCurrentPageInfo(),o=this.internal.getCoordinateString,s=this.internal.getVerticalCoordinateString;a.pageContext.annotations.push({finalBounds:{x:o(e),y:s(t),w:o(e+n),h:s(t+r)},options:i,type:`link`})},e.textWithLink=function(e,t,n,r){var i,a,o=this.getTextWidth(e),s=this.internal.getLineHeight()/this.internal.scaleFactor;if(r.maxWidth!==void 0){a=r.maxWidth;var c=this.splitTextToSize(e,a).length;i=Math.ceil(s*c)}else a=o,i=s;return this.text(e,t,n,r),n+=.2*s,r.align===`center`&&(t-=o/2),r.align===`right`&&(t-=o),this.link(t,n-s,a,i,r),o},e.getTextWidth=function(e){var t=this.internal.getFontSize();return this.getStringUnitWidth(e)*t/this.internal.scaleFactor}}(kP.API),function(e){var t={1569:[65152],1570:[65153,65154],1571:[65155,65156],1572:[65157,65158],1573:[65159,65160],1574:[65161,65162,65163,65164],1575:[65165,65166],1576:[65167,65168,65169,65170],1577:[65171,65172],1578:[65173,65174,65175,65176],1579:[65177,65178,65179,65180],1580:[65181,65182,65183,65184],1581:[65185,65186,65187,65188],1582:[65189,65190,65191,65192],1583:[65193,65194],1584:[65195,65196],1585:[65197,65198],1586:[65199,65200],1587:[65201,65202,65203,65204],1588:[65205,65206,65207,65208],1589:[65209,65210,65211,65212],1590:[65213,65214,65215,65216],1591:[65217,65218,65219,65220],1592:[65221,65222,65223,65224],1593:[65225,65226,65227,65228],1594:[65229,65230,65231,65232],1601:[65233,65234,65235,65236],1602:[65237,65238,65239,65240],1603:[65241,65242,65243,65244],1604:[65245,65246,65247,65248],1605:[65249,65250,65251,65252],1606:[65253,65254,65255,65256],1607:[65257,65258,65259,65260],1608:[65261,65262],1609:[65263,65264,64488,64489],1610:[65265,65266,65267,65268],1649:[64336,64337],1655:[64477],1657:[64358,64359,64360,64361],1658:[64350,64351,64352,64353],1659:[64338,64339,64340,64341],1662:[64342,64343,64344,64345],1663:[64354,64355,64356,64357],1664:[64346,64347,64348,64349],1667:[64374,64375,64376,64377],1668:[64370,64371,64372,64373],1670:[64378,64379,64380,64381],1671:[64382,64383,64384,64385],1672:[64392,64393],1676:[64388,64389],1677:[64386,64387],1678:[64390,64391],1681:[64396,64397],1688:[64394,64395],1700:[64362,64363,64364,64365],1702:[64366,64367,64368,64369],1705:[64398,64399,64400,64401],1709:[64467,64468,64469,64470],1711:[64402,64403,64404,64405],1713:[64410,64411,64412,64413],1715:[64406,64407,64408,64409],1722:[64414,64415],1723:[64416,64417,64418,64419],1726:[64426,64427,64428,64429],1728:[64420,64421],1729:[64422,64423,64424,64425],1733:[64480,64481],1734:[64473,64474],1735:[64471,64472],1736:[64475,64476],1737:[64482,64483],1739:[64478,64479],1740:[64508,64509,64510,64511],1744:[64484,64485,64486,64487],1746:[64430,64431],1747:[64432,64433]},n={65247:{65154:65269,65156:65271,65160:65273,65166:65275},65248:{65154:65270,65156:65272,65160:65274,65166:65276},65165:{65247:{65248:{65258:65010}}},1617:{1612:64606,1613:64607,1614:64608,1615:64609,1616:64610}},r={1612:64606,1613:64607,1614:64608,1615:64609,1616:64610},i=[1570,1571,1573,1575];e.__arabicParser__={};var a=e.__arabicParser__.isInArabicSubstitutionA=function(e){return t[e.charCodeAt(0)]!==void 0},o=e.__arabicParser__.isArabicLetter=function(e){return typeof e==`string`&&/^[\u0600-\u06FF\u0750-\u077F\u08A0-\u08FF\uFB50-\uFDFF\uFE70-\uFEFF]+$/.test(e)},s=e.__arabicParser__.isArabicEndLetter=function(e){return o(e)&&a(e)&&t[e.charCodeAt(0)].length<=2},c=e.__arabicParser__.isArabicAlfLetter=function(e){return o(e)&&i.indexOf(e.charCodeAt(0))>=0};e.__arabicParser__.arabicLetterHasIsolatedForm=function(e){return o(e)&&a(e)&&t[e.charCodeAt(0)].length>=1};var l=e.__arabicParser__.arabicLetterHasFinalForm=function(e){return o(e)&&a(e)&&t[e.charCodeAt(0)].length>=2};e.__arabicParser__.arabicLetterHasInitialForm=function(e){return o(e)&&a(e)&&t[e.charCodeAt(0)].length>=3};var u=e.__arabicParser__.arabicLetterHasMedialForm=function(e){return o(e)&&a(e)&&t[e.charCodeAt(0)].length==4},d=e.__arabicParser__.resolveLigatures=function(e){var t=0,r=n,i=``,a=0;for(t=0;t>`),this.internal.out(`endobj`)}),this.internal.events.subscribe(`putCatalog`,function(){this.internal.out(`/OpenAction `+t+` 0 R`)})),this},function(e){var t=function(){var e=void 0;Object.defineProperty(this,"pdf",{get:function(){return e},set:function(t){e=t}});var t=150;Object.defineProperty(this,"width",{get:function(){return t},set:function(e){t=isNaN(e)||!1===Number.isInteger(e)||e<0?150:e,this.getContext(`2d`).pageWrapXEnabled&&(this.getContext(`2d`).pageWrapX=t+1)}});var n=300;Object.defineProperty(this,"height",{get:function(){return n},set:function(e){n=isNaN(e)||!1===Number.isInteger(e)||e<0?300:e,this.getContext(`2d`).pageWrapYEnabled&&(this.getContext(`2d`).pageWrapY=n+1)}});var r=[];Object.defineProperty(this,"childNodes",{get:function(){return r},set:function(e){r=e}});var i={};Object.defineProperty(this,"style",{get:function(){return i},set:function(e){i=e}}),Object.defineProperty(this,"parentNode",{})};t.prototype.getContext=function(e,t){var n;if((e||=`2d`)!==`2d`)return null;for(n in t)this.pdf.context2d.hasOwnProperty(n)&&(this.pdf.context2d[n]=t[n]);return this.pdf.context2d._canvas=this,this.pdf.context2d},t.prototype.toDataURL=function(){throw Error(`toDataURL is not implemented.`)},e.events.push([`initialized`,function(){this.canvas=new t,this.canvas.pdf=this}])}(kP.API),function(e){var t={left:0,top:0,bottom:0,right:0},n=!1,r=function(){this.internal.__cell__===void 0&&(this.internal.__cell__={},this.internal.__cell__.padding=3,this.internal.__cell__.headerFunction=void 0,this.internal.__cell__.margins=Object.assign({},t),this.internal.__cell__.margins.width=this.getPageWidth(),i.call(this))},i=function(){this.internal.__cell__.lastCell=new a,this.internal.__cell__.pages=1},a=function(){var e=arguments[0];Object.defineProperty(this,"x",{enumerable:!0,get:function(){return e},set:function(t){e=t}});var t=arguments[1];Object.defineProperty(this,"y",{enumerable:!0,get:function(){return t},set:function(e){t=e}});var n=arguments[2];Object.defineProperty(this,"width",{enumerable:!0,get:function(){return n},set:function(e){n=e}});var r=arguments[3];Object.defineProperty(this,"height",{enumerable:!0,get:function(){return r},set:function(e){r=e}});var i=arguments[4];Object.defineProperty(this,"text",{enumerable:!0,get:function(){return i},set:function(e){i=e}});var a=arguments[5];Object.defineProperty(this,"lineNumber",{enumerable:!0,get:function(){return a},set:function(e){a=e}});var o=arguments[6];return Object.defineProperty(this,"align",{enumerable:!0,get:function(){return o},set:function(e){o=e}}),this};a.prototype.clone=function(){return new a(this.x,this.y,this.width,this.height,this.text,this.lineNumber,this.align)},a.prototype.toArray=function(){return[this.x,this.y,this.width,this.height,this.text,this.lineNumber,this.align]},e.setHeaderFunction=function(e){return r.call(this),this.internal.__cell__.headerFunction=typeof e==`function`?e:void 0,this},e.getTextDimensions=function(e,t){r.call(this);var n=(t||={}).fontSize||this.getFontSize(),i=t.font||this.getFont(),a=t.scaleFactor||this.internal.scaleFactor,o=0,s=0,c=0,l=this;if(!Array.isArray(e)&&typeof e!=`string`){if(typeof e!=`number`)throw Error(`getTextDimensions expects text-parameter to be of type String or type Number or an Array of Strings.`);e=String(e)}var u=t.maxWidth;u>0?typeof e==`string`?e=this.splitTextToSize(e,u):Object.prototype.toString.call(e)===`[object Array]`&&(e=e.reduce(function(e,t){return e.concat(l.splitTextToSize(t,u))},[])):e=Array.isArray(e)?e:[e];for(var d=0;dthis.getPageHeight()?(this.cellAddPage(),e.y=s.top,l&&c&&(this.printHeaderRow(e.lineNumber,!0),e.y+=c[0].height)):e.y=i.y+i.height||e.y),e.text[0]!==void 0&&(this.rect(e.x,e.y,e.width,e.height,!0===n?`FD`:void 0),e.align===`right`?this.text(e.text,e.x+e.width-o,e.y+o,{align:`right`,baseline:`top`}):e.align===`center`?this.text(e.text,e.x+e.width/2,e.y+o,{align:`center`,baseline:`top`,maxWidth:e.width-o-o}):this.text(e.text,e.x+o,e.y+o,{align:`left`,baseline:`top`,maxWidth:e.width-o-o})),this.internal.__cell__.lastCell=e,this};e.table=function(e,n,c,l,u){if(r.call(this),!c)throw Error(`No data for PDF table.`);var d,f,p,m,h=[],g=[],_=[],v={},y={},b=[],x=[],S=(u||={}).autoSize||!1,C=!1!==u.printHeaders,w=u.css&&u.css[`font-size`]!==void 0?16*u.css[`font-size`]:u.fontSize||12,T=u.margins||Object.assign({width:this.getPageWidth()},t),E=typeof u.padding==`number`?u.padding:3,D=u.headerBackgroundColor||`#c8c8c8`,O=u.headerTextColor||`#000`;if(i.call(this),this.internal.__cell__.printHeaders=C,this.internal.__cell__.margins=T,this.internal.__cell__.table_font_size=w,this.internal.__cell__.padding=E,this.internal.__cell__.headerBackgroundColor=D,this.internal.__cell__.headerTextColor=O,this.setFontSize(w),l==null)g=h=Object.keys(c[0]),_=h.map(function(){return`left`});else if(Array.isArray(l)&&hD(l[0])===`object`)for(h=l.map(function(e){return e.name}),g=l.map(function(e){return e.prompt||e.name||``}),_=l.map(function(e){return e.align||`left`}),d=0;d0&&this.setTableHeaderRow(c),this.setFont(void 0,`normal`),n=!1}}(kP.API);var yF={italic:[`italic`,`oblique`,`normal`],oblique:[`oblique`,`italic`,`normal`],normal:[`normal`,`oblique`,`italic`]},bF=[`ultra-condensed`,`extra-condensed`,`condensed`,`semi-condensed`,`normal`,`semi-expanded`,`expanded`,`extra-expanded`,`ultra-expanded`],xF=vF(bF),SF=[100,200,300,400,500,600,700,800,900],CF=vF(SF);function wF(e){var t=e.family.replace(/"|'/g,``).toLowerCase(),n=function(e){return yF[e||=`normal`]?e:`normal`}(e.style),r=function(e){return e?typeof e==`number`?e>=100&&e<=900&&e%100==0?e:400:/^\d00$/.test(e)?parseInt(e):e===`bold`?700:400:400}(e.weight),i=function(e){return typeof xF[e||=`normal`]==`number`?e:`normal`}(e.stretch);return{family:t,style:n,weight:r,stretch:i,src:e.src||[],ref:e.ref||{name:t,style:[i,n,r].join(` `)}}}function TF(e,t,n,r){var i;for(i=n;i>=0&&i=0&&i>>1)&255}return i}function UF(e,t,n){var r=e.length,i=[];i[0]=4;for(var a=0;a>a&o}function qF(e,t,n,r){var i=n*r,a=Math.floor(i/8),o=16-(i-8*a+r),s=(1<>8&255;e.setUint8(t,r)}})(e,a,JF(e,a)&~(s<>7,o=1<<1+(7&i);e[t++],e[t++];var s=null,c=null;a&&(s=t,c=o,t+=3*o);var l=!0,u=[],d=0,f=null,p=0,m=null;for(this.width=n,this.height=r;l&&t=0))throw Error(`Invalid block size`);if(D===0)break;t+=D}break;case 249:if(e[t++]!==4||e[t+4]!==0)throw Error(`Invalid graphics extension block.`);var h=e[t++];d=e[t++]|e[t++]<<8,f=e[t++],1&h||(f=null),p=h>>2&7,t++;break;case 254:for(;;){if(!((D=e[t++])>=0))throw Error(`Invalid block size`);if(D===0)break;t+=D}break;default:throw Error(`Unknown graphic control label: 0x`+e[t-1].toString(16))}break;case 44:var g=e[t++]|e[t++]<<8,_=e[t++]|e[t++]<<8,v=e[t++]|e[t++]<<8,y=e[t++]|e[t++]<<8,b=e[t++],x=b>>6&1,S=1<<1+(7&b),C=s,w=c,T=!1;b>>7&&(T=!0,C=t,w=S,t+=3*S);var E=t;for(t++;;){var D;if(!((D=e[t++])>=0))throw Error(`Invalid block size`);if(D===0)break;t+=D}u.push({x:g,y:_,width:v,height:y,has_local_palette:T,palette_offset:C,palette_size:w,data_offset:E,data_length:t-E,transparent_index:f,interlaced:!!x,delay:d,disposal:p});break;case 59:l=!1;break;default:throw Error(`Unknown gif block: 0x`+e[t-1].toString(16))}this.numFrames=function(){return u.length},this.loopCount=function(){return m},this.frameInfo=function(e){if(e<0||e>=u.length)throw Error(`Frame index out of range.`);return u[e]},this.decodeAndBlitFrameBGRA=function(t,r){var i=this.frameInfo(t),a=i.width*i.height;if(a>536870912)throw Error(`Image dimensions exceed 512MB, which is too large.`);var o=new Uint8Array(a);XF(e,i.data_offset,o,a);var s=i.palette_offset,c=i.transparent_index;c===null&&(c=256);var l=i.width,u=n-l,d=l,f=4*(i.y*n+i.x),p=4*((i.y+i.height)*n+i.x),m=f,h=4*u;!0===i.interlaced&&(h+=4*n*7);for(var g=8,_=0,v=o.length;_=p&&(h=4*u+4*n*(g-1),m=f+(l+u)*(g<<1),g>>=1)),y===c)m+=4;else{var b=e[s+3*y],x=e[s+3*y+1],S=e[s+3*y+2];r[m++]=S,r[m++]=x,r[m++]=b,r[m++]=255}--d}},this.decodeAndBlitFrameRGBA=function(t,r){var i=this.frameInfo(t),a=i.width*i.height;if(a>536870912)throw Error(`Image dimensions exceed 512MB, which is too large.`);var o=new Uint8Array(a);XF(e,i.data_offset,o,a);var s=i.palette_offset,c=i.transparent_index;c===null&&(c=256);var l=i.width,u=n-l,d=l,f=4*(i.y*n+i.x),p=4*((i.y+i.height)*n+i.x),m=f,h=4*u;!0===i.interlaced&&(h+=4*n*7);for(var g=8,_=0,v=o.length;_=p&&(h=4*u+4*n*(g-1),m=f+(l+u)*(g<<1),g>>=1)),y===c)m+=4;else{var b=e[s+3*y],x=e[s+3*y+1],S=e[s+3*y+2];r[m++]=b,r[m++]=x,r[m++]=S,r[m++]=255}--d}}}function XF(e,t,n,r){for(var i=e[t++],a=1<>=c,u-=c,g!==a){if(g===o)break;for(var _=ga;)y=m[y]>>8,++v;var b=y;if(f+v+(_===g?0:1)>r)return void QN.log(`Warning, gif stream longer than expected.`);n[f++]=b;var x=f+=v;for(_!==g&&(n[f++]=b),y=_;v--;)y=m[y],n[--x]=255&y,y>>=8;h!==null&&s<4096&&(m[s++]=h<<8|b,s>=l+1&&c<12&&(++c,l=l<<1|1)),h=g}else s=o+1,l=(1<<(c=i+1))-1,h=null}return f!==r&&QN.log(`Warning, gif stream shorter than expected.`),n}function ZF(e){var t,n,r,i,a,o=Math.floor,s=Array(64),c=Array(64),l=Array(64),u=Array(64),d=Array(65535),f=Array(65535),p=Array(64),m=Array(64),h=[],g=0,_=7,v=Array(64),y=Array(64),b=Array(64),x=Array(256),S=Array(2048),C=[0,1,5,6,14,15,27,28,2,4,7,13,16,26,29,42,3,8,12,17,25,30,41,43,9,11,18,24,31,40,44,53,10,19,23,32,39,45,52,54,20,22,33,38,46,51,55,60,21,34,37,47,50,56,59,61,35,36,48,49,57,58,62,63],w=[0,0,1,5,1,1,1,1,1,1,0,0,0,0,0,0,0],T=[0,1,2,3,4,5,6,7,8,9,10,11],E=[0,0,2,1,3,3,2,4,3,5,5,4,4,0,0,1,125],D=[1,2,3,0,4,17,5,18,33,49,65,6,19,81,97,7,34,113,20,50,129,145,161,8,35,66,177,193,21,82,209,240,36,51,98,114,130,9,10,22,23,24,25,26,37,38,39,40,41,42,52,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,225,226,227,228,229,230,231,232,233,234,241,242,243,244,245,246,247,248,249,250],O=[0,0,3,1,1,1,1,1,1,1,1,1,0,0,0,0,0],k=[0,1,2,3,4,5,6,7,8,9,10,11],A=[0,0,2,1,2,4,4,3,4,7,5,4,4,0,1,2,119],j=[0,1,2,3,17,4,5,33,49,6,18,65,81,7,97,113,19,34,50,129,8,20,66,145,161,177,193,9,35,51,82,240,21,98,114,209,10,22,36,52,225,37,241,23,24,25,26,38,39,40,41,42,53,54,55,56,57,58,67,68,69,70,71,72,73,74,83,84,85,86,87,88,89,90,99,100,101,102,103,104,105,106,115,116,117,118,119,120,121,122,130,131,132,133,134,135,136,137,138,146,147,148,149,150,151,152,153,154,162,163,164,165,166,167,168,169,170,178,179,180,181,182,183,184,185,186,194,195,196,197,198,199,200,201,202,210,211,212,213,214,215,216,217,218,226,227,228,229,230,231,232,233,234,242,243,244,245,246,247,248,249,250];function M(e,t){for(var n=0,r=0,i=[],a=1;a<=16;a++){for(var o=1;o<=e[a];o++)i[t[r]]=[],i[t[r]][0]=n,i[t[r]][1]=a,r++,n++;n*=2}return i}function N(e){for(var t=e[0],n=e[1]-1;n>=0;)t&1<>8&255),P(255&e)}function I(e,t,n,r,i){for(var a,o=i[0],s=i[240],c=function(e,t){var n,r,i,a,o,s,c,l,u,d,f=0;for(u=0;u<8;++u){n=e[f],r=e[f+1],i=e[f+2],a=e[f+3],o=e[f+4],s=e[f+5],c=e[f+6];var m=n+(l=e[f+7]),h=n-l,g=r+c,_=r-c,v=i+s,y=i-s,b=a+o,x=a-o,S=m+b,C=m-b,w=g+v,T=g-v;e[f]=S+w,e[f+4]=S-w;var E=.707106781*(T+C);e[f+2]=C+E,e[f+6]=C-E;var D=.382683433*((S=x+y)-(T=_+h)),O=.5411961*S+D,k=1.306562965*T+D,A=.707106781*(w=y+_),j=h+A,M=h-A;e[f+5]=M+O,e[f+3]=M-O,e[f+1]=j+k,e[f+7]=j-k,f+=8}for(f=0,u=0;u<8;++u){n=e[f],r=e[f+8],i=e[f+16],a=e[f+24],o=e[f+32],s=e[f+40],c=e[f+48];var N=n+(l=e[f+56]),P=n-l,F=r+c,I=r-c,L=i+s,ee=i-s,R=a+o,te=a-o,z=N+R,B=N-R,V=F+L,ne=F-L;e[f]=z+V,e[f+32]=z-V;var re=.707106781*(ne+B);e[f+16]=B+re,e[f+48]=B-re;var ie=.382683433*((z=te+ee)-(ne=I+P)),ae=.5411961*z+ie,oe=1.306562965*ne+ie,se=.707106781*(V=ee+I),ce=P+se,H=P-se;e[f+40]=H+ae,e[f+24]=H-ae,e[f+8]=ce+oe,e[f+56]=ce-oe,f++}for(u=0;u<64;++u)d=e[u]*t[u],p[u]=d>0?d+.5|0:d-.5|0;return p}(e,t),l=0;l<64;++l)m[C[l]]=c[l];var u=m[0]-n;n=m[0],u==0?N(r[0]):(N(r[f[a=32767+u]]),N(d[a]));for(var h=63;h>0&&m[h]==0;)h--;if(h==0)return N(o),n;for(var g,_=1;_<=h;){for(var v=_;m[_]==0&&_<=h;)++_;var y=_-v;if(y>=16){g=y>>4;for(var b=1;b<=g;++b)N(s);y&=15}a=32767+m[_],N(i[(y<<4)+f[a]]),N(d[a]),_++}return h!=63&&N(o),n}function L(e){e=Math.min(Math.max(e,1),100),a!=e&&(function(e){for(var t=[16,11,10,16,24,40,51,61,12,12,14,19,26,58,60,55,14,13,16,24,40,57,69,56,14,17,22,29,51,87,80,62,18,22,37,56,68,109,103,77,24,35,55,64,81,104,113,92,49,64,78,87,103,121,120,101,72,92,95,98,112,100,103,99],n=0;n<64;n++){var r=o((t[n]*e+50)/100);r=Math.min(Math.max(r,1),255),s[C[n]]=r}for(var i=[17,18,24,47,99,99,99,99,18,21,26,66,99,99,99,99,24,26,56,99,99,99,99,99,47,66,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99],a=0;a<64;a++){var d=o((i[a]*e+50)/100);d=Math.min(Math.max(d,1),255),c[C[a]]=d}for(var f=[1,1.387039845,1.306562965,1.175875602,1,.785694958,.5411961,.275899379],p=0,m=0;m<8;m++)for(var h=0;h<8;h++)l[p]=1/(s[C[p]]*f[m]*f[h]*8),u[p]=1/(c[C[p]]*f[m]*f[h]*8),p++}(Math.floor(e<50?5e3/e:200-2*e)),a=e)}this.encode=function(e,a){a&&L(a),h=[],g=0,_=7,F(65496),F(65504),F(16),P(74),P(70),P(73),P(70),P(0),P(1),P(1),P(0),F(1),F(1),P(0),P(0),function(){F(65499),F(132),P(0);for(var e=0;e<64;e++)P(s[e]);P(1);for(var t=0;t<64;t++)P(c[t])}(),function(e,t){F(65472),F(17),P(8),F(t),F(e),P(3),P(1),P(17),P(0),P(2),P(17),P(1),P(3),P(17),P(1)}(e.width,e.height),function(){F(65476),F(418),P(0);for(var e=0;e<16;e++)P(w[e+1]);for(var t=0;t<=11;t++)P(T[t]);P(16);for(var n=0;n<16;n++)P(E[n+1]);for(var r=0;r<=161;r++)P(D[r]);P(1);for(var i=0;i<16;i++)P(O[i+1]);for(var a=0;a<=11;a++)P(k[a]);P(17);for(var o=0;o<16;o++)P(A[o+1]);for(var s=0;s<=161;s++)P(j[s])}(),F(65498),F(12),P(3),P(1),P(0),P(2),P(17),P(3),P(17),P(0),P(63),P(0);var o=0,d=0,f=0;g=0,_=7,this.encode.displayName=`_encode_`;for(var p,m,x,C,M,ee,R,te,z,B=e.data,V=e.width,ne=e.height,re=4*V,ie=0;ie>3)*re+(R=4*(7&z)),ie+te>=ne&&(ee-=re*(ie+1+te-ne)),p+R>=re&&(ee-=p+R-re+4),m=B[ee++],x=B[ee++],C=B[ee++],v[z]=(S[m]+S[x+256|0]+S[C+512|0]>>16)-128,y[z]=(S[m+768|0]+S[x+1024|0]+S[C+1280|0]>>16)-128,b[z]=(S[m+1280|0]+S[x+1536|0]+S[C+1792|0]>>16)-128;o=I(v,l,o,t,r),d=I(y,u,d,n,i),f=I(b,u,f,n,i),p+=32}ie+=8}if(_>=0){var ae=[];ae[1]=_+1,ae[0]=(1<<_+1)-1,N(ae)}return F(65497),new Uint8Array(h)},e||=50,function(){for(var e=String.fromCharCode,t=0;t<256;t++)x[t]=e(t)}(),t=M(w,T),n=M(O,k),r=M(E,D),i=M(A,j),function(){for(var e=1,t=2,n=1;n<=15;n++){for(var r=e;rr;r++)if(e[t+r]!=n.charCodeAt(r))return!0;return!1}function r(e,t,n,r,i){for(var a=0;ar+1?[]:new t),!(i.length>>0;e&n;)n>>>=1;return n?(e&n-1)+n:e}function l(e,n,r,i,a){t(!(i%r));do e[n+(i-=r)]=a;while(0=o),512>=o)var s=a(512);else if((s=a(o))==null)return 0;return function(e,n,r,i,o,s){var u,f,p=n,m=1<u;++u){if(h[u]>1<(S-=h[u]))return 0;for(;0=u;++u,o<<=1){if(x+=S<<=1,0>(S-=h[u]))return 0;for(;0v&&!(0>=(_-=h[v]));)++v,_<<=1;m+=C=1<<(_=v-r),e[n+(v=b&y)].g=_+r,e[n+v].value=p-n-v}i.g=u-r,i.value=s[f++],l(e,p+(b>>r),o,C,i),b=c(b,u)}}return x==2*g[15]-1?m:0}(e,n,r,i,o,s)}function d(){this.value=this.g=0}function f(){this.value=this.g=0}function p(){this.G=o(5,d),this.H=a(5),this.jc=this.Qb=this.qb=this.nd=0,this.pd=o(Wn,f)}function m(e,n,r,i){t(e!=null),t(n!=null),t(2147483648>i),e.Ca=254,e.I=0,e.b=-8,e.Ka=0,e.oa=n,e.pa=r,e.Jd=n,e.Yc=r+i,e.Zc=4<=i?r+i-4+1:r,E(e)}function h(e,t){for(var n=0;0i),e.Sb=i,e.Ra=0,e.u=0,e.h=0,4>>=8,e.Ra+=e.oa[e.pa+e.bb]<>>0,++e.bb,e.u-=8;C(e)&&(e.h=1,e.u=0)}function y(e,n){if(t(0<=n),!e.h&&n<=Kn){var r=S(e)&Gn[n];return e.u+=n,v(e),r}return e.h=1,e.u=0}function b(){this.b=this.Ca=this.I=0,this.oa=[],this.pa=0,this.Jd=[],this.Yc=0,this.Zc=[],this.Ka=0}function x(){this.Ra=0,this.oa=[],this.h=this.u=this.bb=this.Sb=this.pa=0}function S(e){return e.Ra>>>(e.u&qn-1)>>>0}function C(e){return t(e.bb<=e.Sb),e.h||e.bb==e.Sb&&e.u>qn}function w(e,t){e.u=t,e.h=C(e)}function T(e){e.u>=Jn&&(t(e.u>=Jn),v(e))}function E(e){t(e!=null&&e.oa!=null),e.pa>>0,e.b+=8):(t(e!=null&&e.oa!=null),e.pae.b&&E(e);var r=e.b,i=n*t>>>8,a=(e.I>>>r>i)+0;for(a?(n-=i,e.I-=i+1<>>0):n=i+1,r=n,i=0;256<=r;)i+=8,r>>=8;return r=7^i+Yn[r],e.b-=r,e.Ca=(n<>24&255,e[t+1]=n>>16&255,e[t+2]=n>>8&255,e[t+3]=255&n}function A(e,t){return e[t+0]|e[t+1]<<8}function j(e,t){return A(e,t)|e[t+2]<<16}function M(e,t){return A(e,t)|A(e,t+2)<<16}function N(e,n){var r=1<=a||0>=o?0:(r[0]=a,i[0]=o,1)}function L(e,t){return e+(1<>>t}function ee(e,t){return((4278255360&e)+(4278255360&t)>>>0&4278255360)+((16711935&e)+(16711935&t)>>>0&16711935)>>>0}function R(t,n){e[n]=function(n,r,i,a,o,s,c){var l;for(l=0;l>>1)+(e&t)>>>0}function B(e){return 0<=e&&256>e?e:0>e?0:255>1))}function ne(e,t,n){return Math.abs(t-n)-Math.abs(e-n)}function re(e,t,n,r,i,a,o){for(r=a[o-1],n=0;n>8&255,c=16711935&(c=(c=16711935&o)+((s<<16)+s));r[i+a]=(4278255360&o)+c>>>0}}function ae(e,t){t.jd=255&e,t.hd=e>>8&255,t.ud=e>>16&255}function oe(e,t,n,r,i,a){var o;for(o=0;o>>8,l=s,u=255&(u=(u=s>>>16)+((e.jd<<24>>24)*(c<<24>>24)>>>5));l=255&(l=(l+=(e.hd<<24>>24)*(c<<24>>24)>>>5)+((e.ud<<24>>24)*(u<<24>>24)>>>5)),i[a+o]=(4278255360&s)+(u<<16)+l}}function se(t,n,r,i,a){e[n]=function(e,t,n,r,o,s,c,l,u){for(r=c;r>t.b,f=t.Ea,p=t.K[0],m=t.w;if(8>d)for(t=(1<>=d}else e[`VP8LMapColor`+r](s,c,p,m,l,u,n,o,f)}}function ce(e,t,n,r,i){for(n=t+n;t>16&255,r[i++]=a>>8&255,r[i++]=255&a}}function H(e,t,n,r,i){for(n=t+n;t>16&255,r[i++]=a>>8&255,r[i++]=255&a,r[i++]=a>>24&255}}function le(e,t,n,r,i){for(n=t+n;t>16&240|o>>12&15,o=240&o|o>>28&15;r[i++]=a,r[i++]=o}}function ue(e,t,n,r,i){for(n=t+n;t>16&248|o>>13&7,o=o>>5&224|o>>3&31;r[i++]=a,r[i++]=o}}function de(e,t,n,r,i){for(n=t+n;t>8&255,r[i++]=a>>16&255}}function fe(e,t,n,i,a,o){if(o==0)for(n=t+n;t>24|o[1]>>8&65280|o[2]<<8&16711680|o[3]<<24)>>>0),a+=32;else r(i,a,e,t,n)}function pe(t,n){e[n][0]=e[t+`0`],e[n][1]=e[t+`1`],e[n][2]=e[t+`2`],e[n][3]=e[t+`3`],e[n][4]=e[t+`4`],e[n][5]=e[t+`5`],e[n][6]=e[t+`6`],e[n][7]=e[t+`7`],e[n][8]=e[t+`8`],e[n][9]=e[t+`9`],e[n][10]=e[t+`10`],e[n][11]=e[t+`11`],e[n][12]=e[t+`12`],e[n][13]=e[t+`13`],e[n][14]=e[t+`0`],e[n][15]=e[t+`0`]}function me(e){return e==Kr||e==qr||e==Jr||e==Yr}function he(){this.eb=[],this.size=this.A=this.fb=0}function ge(){this.y=[],this.f=[],this.ea=[],this.F=[],this.Tc=this.Ed=this.Cd=this.Fd=this.lb=this.Db=this.Ab=this.fa=this.J=this.W=this.N=this.O=0}function _e(){this.Rd=this.height=this.width=this.S=0,this.f={},this.f.RGBA=new he,this.f.kb=new ge,this.sd=null}function ve(){this.width=[0],this.height=[0],this.Pd=[0],this.Qd=[0],this.format=[0]}function ye(){this.Id=this.fd=this.Md=this.hb=this.ib=this.da=this.bd=this.cd=this.j=this.v=this.Da=this.Sd=this.ob=0}function be(e){return alert(`todo:WebPSamplerProcessPlane`),e.T}function xe(e,t){var n=e.T,i=t.ba.f.RGBA,a=i.eb,o=i.fb+e.ka*i.A,s=bi[t.ba.S],c=e.y,l=e.O,u=e.f,d=e.N,f=e.ea,p=e.W,m=t.cc,h=t.dc,g=t.Mc,_=t.Nc,v=e.ka,y=e.ka+e.T,b=e.U,x=b+1>>1;for(v==0?s(c,l,null,null,u,d,f,p,u,d,f,p,a,o,null,null,b):(s(t.ec,t.fc,c,l,m,h,g,_,u,d,f,p,a,o-i.A,a,o,b),++n);v+2n,i=n==Br||n==Hr||n==Ur||n==Wr||n==12||me(n);if(t.memory=null,t.Ib=null,t.Jb=null,t.Nd=null,!Vn(t.Oa,e,i?11:12))return 0;if(i&&me(n)&&En(),e.da)alert(`todo:use_scaling`);else{if(r){if(t.Ib=be,e.Kb){if(n=e.U+1>>1,t.memory=a(e.U+2*n),t.memory==null)return 0;t.ec=t.memory,t.fc=0,t.cc=t.ec,t.dc=t.fc+e.U,t.Mc=t.cc,t.Nc=t.dc+n,t.Ib=xe,En()}}else alert(`todo:EmitYUV`);i&&(t.Jb=Se,r&&wn())}if(r&&!Pi){for(e=0;256>e;++e)Fi[e]=89858*(e-128)+ki>>Oi,Ri[e]=-22014*(e-128)+ki,Li[e]=-45773*(e-128),Ii[e]=113618*(e-128)+ki>>Oi;for(e=Ai;e>Oi,zi[e-Ai]=et(t,255),Bi[e-Ai]=et(t+8>>4,15);Pi=1}return 1}function Ce(e){var n=e.ma,r=e.U,i=e.T;return t(!(1&e.ka)),0>=r||0>=i?0:(r=n.Ib(e,n),n.Jb!=null&&n.Jb(e,n,r),n.Dc+=r,1)}function we(e){e.ma.memory=null}function Te(e,t,n,r){return y(e,8)==47?(t[0]=y(e,14)+1,n[0]=y(e,14)+1,r[0]=y(e,1),y(e,3)==0?!e.h:0):0}function W(e,t){if(4>e)return e+1;var n=e-2>>1;return(2+(1&e)<>4)*e+(8-(15&n)))?n:1;var n}function De(e,t,n){var r=S(n),i=e[t+=255&r].g-8;return 0>>0,t(8>=r.g),e.g}function ke(e,n,r){var i=e.xc;return t((n=i==0?0:e.vc[e.md*(r>>i)+(n>>i)])>E.b)*w;_x&&(A=x),(0,rr[D[O++]>>8&15])(m,h+ +k,y,b+k-x,A-k,y,b+k),k=A}h+=x,b+=x,++_&C||(E+=w)}p!=d.nc&&r(u,l-g,u,l+(p-f-1)*g,g);break;case 1:for(g=m,v=h,x=(m=d.Ea)-(b=m&~(y=(h=1<>d.b)*_;f=a),0o.o&&(i=o.o),r=i?r=0:(a[0]+=4*o.v,o.ka=r-o.j,o.U=o.va-o.v,o.T=i-r,r=1),r){if(c=c[0],11>(r=e.ca).S){var d=r.f.RGBA,f=(i=r.S,a=o.U,o=o.T,u=d.eb,d.A),p=o;for(d=d.fb+e.Ma*d.A;0i){var a=e.l.width,o=r.ca,s=r.tb+a*i,c=e.V,l=e.Ba+e.c*i,u=e.gc;t(e.ab==1),t(u[0].hc==3),tr(u[0],i,n,c,l,o,s),Ne(r,i,n,o,s,a)}e.C=e.Ma=n}function Fe(e,n,r,i,a,o,s){var c=e.$/i,l=e.$%i,u=e.m,d=e.s,f=r+e.$,p=f;a=r+i*a;var m=r+i*o,h=280+d.ua,g=e.Pb?c:16777216,_=0=g){var E=f-r;t((g=e).Pb),g.wd=g.m,g.xd=E,0O.g?(w(x,x.u+O.g),E[D]=O.value,x=0):(w(x,x.u+O.g-256),t(256<=O.value),x=O.value),x==0&&(b=!0)}else x=De(y.G[0],y.H[0],u);if(u.h)break;if(b||256>x){if(!b)if(y.nd)n[f]=(y.qb|x<<8)>>>0;else{if(T(u),b=De(y.G[1],y.H[1],u),T(u),E=De(y.G[2],y.H[2],u),D=De(y.G[3],y.H[3],u),u.h)break;n[f]=(D<<24|b<<16|x<<8|E)>>>0}if(b=!1,++f,++l>=i&&(l=0,++c,s!=null&&c<=o&&!(c%16)&&s(e,c),_!=null))for(;p>>_.Mb]=x}else if(280>x){if(x=W(x-256,u),E=De(y.G[4],y.H[4],u),T(u),E=Ee(i,E=W(E,u)),u.h)break;if(f-r=i;)l-=i,++c,s!=null&&c<=o&&!(c%16)&&s(e,c);if(t(f<=a),l&v&&(y=ke(d,l,c)),_!=null)for(;p>>_.Mb]=x}else{if(!(x>>_.Mb]=x;x=f,t(!(b>>>(E=_).Xa)),n[x]=E.X[b],b=!0}b||t(u.h==C(u))}if(e.Pb&&u.h&&fo?o:c),e.a=0,e.$=f-r}return 1}return e.a=3,0}function Ie(e){t(e!=null),e.vc=null,e.yc=null,e.Ya=null;var n=e.Wa;n!=null&&(n.X=null),e.vb=null,t(e!=null)}function Le(){var t=new mn;return t==null?null:(t.a=0,t.xb=vi,pe(`Predictor`,`VP8LPredictors`),pe(`Predictor`,`VP8LPredictors_C`),pe(`PredictorAdd`,`VP8LPredictorsAdd`),pe(`PredictorAdd`,`VP8LPredictorsAdd_C`),Qn=ie,J=oe,ir=ce,ar=H,or=le,sr=ue,cr=de,e.VP8LMapColor32b=er,e.VP8LMapColor8b=nr,t)}function Re(e,n,r,s,c){var l=1,f=[e],m=[n],h=s.m,g=s.s,_=null,v=0;t:for(;;){if(r)for(;l&&y(h,1);){var b=f,x=m,C=s,E=1,D=C.m,O=C.gc[C.ab],k=y(D,2);if(C.Oc&1<=C.ab),k){case 0:case 1:O.b=y(D,3)+2,E=Re(L(O.Ea,O.b),L(O.nc,O.b),0,C,O.K),O.K=O.K[0];break;case 3:var A,j=y(D,8)+1,M=16>I.b),te=a(R);if(te==null)A=0;else{var z=I.K[0],B=I.w;for(te[0]=I.K[0][0],P=1;P<1*F;++P)te[P]=ee(z[B+P],te[P-1]);for(;P<4*R;++P)te[P]=0;I.K[0]=null,I.K[0]=te,A=1}}E=A;break;case 2:break;default:t(0)}l=E}}if(f=f[0],m=m[0],l&&y(h,1)&&!(l=1<=(v=y(h,4))&&11>=v)){s.a=3;break t}var V;if(V=l)e:{var ne,re,ie,ae=s,oe=f,se=m,ce=v,H=r,le=ae.m,ue=ae.s,de=[null],fe=1,pe=0,me=ni[ce];r:for(;;){if(H&&y(le,1)){var he=y(le,3)+2,ge=L(oe,he),_e=L(se,he),ve=ge*_e;if(!Re(ge,_e,0,ae,de))break r;for(de=de[0],ue.xc=he,ne=0;ne>8&65535;de[ne]=ye,ye>=fe&&(fe=ye+1)}}if(le.h)break r;for(re=0;5>re;++re){var be=Qr[re];!re&&0=Se),Ce=U;var we=a(pe);if(Ce==null||we==null||xe==null){ae.a=1;break r}var Te=xe;for(ne=ie=0;nere;++re){be=Qr[re],Ee[re]=Te,De[re]=ie,!re&&0et)break i}else Xe=et;for(Ze=0;Zest)tt[Ze++]=st,st!=0&&(it=st);else{var ct=st==16,lt=st-16,ut=Zr[lt],dt=y(rt,Xr[lt])+ut;if(Ze+dt>et)break i;for(var ft=ct?it:0;0=re){var pt,mt=we[0];for(pt=1;ptmt&&(mt=we[pt]);je+=mt}}if(W.nd=Ae,W.Qb=0,Ae&&(W.qb=(Ee[3][De[3]+0].value<<24|Ee[1][De[1]+0].value<<16|Ee[2][De[2]+0].value)>>>0,ke==0&&256>Ee[0][De[0]+0].value&&(W.Qb=1,W.qb+=Ee[0][De[0]+0].value<<8)),W.jc=!W.Qb&&6>je,W.jc){var ht,gt=W;for(ht=0;ht>=Oe(yt,8,vt),_t>>=Oe(gt.G[1][gt.H[1]+_t],16,vt),_t>>=Oe(gt.G[2][gt.H[2]+_t],0,vt),Oe(gt.G[3][gt.H[3]+_t],24,vt))}}}ue.vc=de,ue.Wb=fe,ue.Ya=Ce,ue.yc=xe,V=1;break e}V=0}if(!(l=V)){s.a=3;break t}if(0n+1?[]:0),!(r.lengthe?0:e>t?t:e}function tt(){this.T=this.U=this.ka=this.height=this.width=0,this.y=[],this.f=[],this.ea=[],this.Rc=this.fa=this.W=this.N=this.O=0,this.ma=`void`,this.put=`VP8IoPutHook`,this.ac=`VP8IoSetupHook`,this.bc=`VP8IoTeardownHook`,this.ha=this.Kb=0,this.data=[],this.hb=this.ib=this.da=this.o=this.j=this.va=this.v=this.Da=this.ob=this.w=0,this.F=[],this.J=0}function nt(){var e=new $e;return e!=null&&(e.a=0,e.sc=`OK`,e.cb=0,e.Xb=0,oi||=ot),e}function rt(e,t,n){return e.a==0&&(e.a=t,e.sc=n,e.cb=0),0}function it(e,t,n){return 3<=n&&e[t+0]==157&&e[t+1]==1&&e[t+2]==42}function at(e,n){if(e==null)return 0;if(e.a=0,e.sc=`OK`,n==null)return rt(e,2,`null VP8Io passed to VP8GetHeaders()`);var r=n.data,a=n.w,o=n.ha;if(4>o)return rt(e,7,`Truncated header.`);var s=r[a+0]|r[a+1]<<8|r[a+2]<<16,c=e.Od;if(c.Rb=!(1&s),c.td=s>>1&7,c.yd=s>>4&1,c.ub=s>>5,3o)return rt(e,7,`cannot parse picture header`);if(!it(r,a,o))return rt(e,3,`Bad code word`);l.c=16383&(r[a+4]<<8|r[a+3]),l.Td=r[a+4]>>6,l.i=16383&(r[a+6]<<8|r[a+5]),l.Ud=r[a+6]>>6,a+=7,o-=7,e.za=l.c+15>>4,e.Ub=l.i+15>>4,n.width=l.c,n.height=l.i,n.Da=0,n.j=0,n.v=0,n.va=n.width,n.o=n.height,n.da=0,n.ib=n.width,n.hb=n.height,n.U=n.width,n.T=n.height,i((s=e.Pa).jb,0,255,s.jb.length),t((s=e.Qa)!=null),s.Cb=0,s.Bb=0,s.Fb=1,i(s.Zb,0,0,s.Zb.length),i(s.Lb,0,0,s.Lb)}if(c.ub>o)return rt(e,7,`bad partition length`);m(s=e.m,r,a,c.ub),a+=c.ub,o-=c.ub,c.Rb&&(l.Ld=D(s),l.Kd=D(s)),l=e.Qa;var u,d=e.Pa;if(t(s!=null),t(l!=null),l.Cb=D(s),l.Cb){if(l.Bb=D(s),D(s)){for(l.Fb=D(s),u=0;4>u;++u)l.Zb[u]=D(s)?g(s,7):0;for(u=0;4>u;++u)l.Lb[u]=D(s)?g(s,6):0}if(l.Bb)for(u=0;3>u;++u)d.jb[u]=D(s)?h(s,8):255}else l.Bb=0;if(s.Ka)return rt(e,3,`cannot parse segment header`);if((l=e.ed).zd=D(s),l.Tb=h(s,6),l.wb=h(s,3),l.Pc=D(s),l.Pc&&D(s)){for(d=0;4>d;++d)D(s)&&(l.vd[d]=g(s,6));for(d=0;4>d;++d)D(s)&&(l.od[d]=g(s,6))}if(e.L=l.Tb==0?0:l.zd?1:2,s.Ka)return rt(e,3,`cannot parse filter header`);var f=o;if(o=u=a,a=u+f,l=f,e.Xb=(1<l&&(p=l),m(e.Jc[+f],r,u,p),u+=p,l-=p,o+=3}m(e.Jc[+d],r,u,l),r=up;++p){if(f.Cb){var _=f.Zb[p];f.Fb||(_+=r)}else{if(0>16,8>v.Eb[1]&&(v.Eb[1]=8),v.Qc[0]=ii[et(_+d,117)],v.Qc[1]=ai[et(_+u,127)],v.lc=_+u}if(!c.Rb)return rt(e,4,`Not a key frame.`);for(D(s),c=e.Pa,r=0;4>r;++r){for(o=0;8>o;++o)for(a=0;3>a;++a)for(l=0;11>l;++l)d=O(s,fi[r][o][a][l])?h(s,8):ui[r][o][a][l],c.Wc[r][o].Yb[a][l]=d;for(o=0;17>o;++o)c.Xc[r][o]=c.Wc[r][pi[o]]}return e.kc=D(s),e.kc&&(e.Bd=h(s,8)),e.cb=1}function ot(e,t,n,r,i,a,o){var s=t[i].Yb[n];for(n=0;16>i;++i){if(!O(e,s[n+0]))return i;for(;!O(e,s[n+1]);)if(s=t[++i].Yb[0],n=0,i==16)return 16;var c=t[i+1].Yb;if(O(e,s[n+2])){var l=e,u=0;if(O(l,(f=s)[(d=n)+3]))if(O(l,f[d+6])){for(s=0,d=2*(u=O(l,f[d+8]))+(f=O(l,f[d+9+u])),u=0,f=si[d];f[s];++s)u+=u+O(l,f[s]);u+=3+(8<(l=e).b&&E(l);var d,f=l.b,p=(d=l.Ca>>1)-(l.I>>f)>>31;--l.b,l.Ca+=p,l.Ca|=1,l.I-=(d+1&p)<>3),e[t+n+32*r]=-256&i?0>i?0:255:i}function lt(e,t,n,r,i,a){ct(e,t,0,n,r+i),ct(e,t,1,n,r+a),ct(e,t,2,n,r-a),ct(e,t,3,n,r-i)}function ut(e){return(20091*e>>16)+e}function dt(e,t,n,r){var i,o=0,s=a(16);for(i=0;4>i;++i){var c=e[t+0]+e[t+8],l=e[t+0]-e[t+8],u=(35468*e[t+4]>>16)-ut(e[t+12]),d=ut(e[t+4])+(35468*e[t+12]>>16);s[o+0]=c+d,s[o+1]=l+u,s[o+2]=l-u,s[o+3]=c-d,o+=4,t++}for(i=o=0;4>i;++i)c=(e=s[o+0]+4)+s[o+8],l=e-s[o+8],u=(35468*s[o+4]>>16)-ut(s[o+12]),ct(n,r,0,0,c+(d=ut(s[o+4])+(35468*s[o+12]>>16))),ct(n,r,1,0,l+u),ct(n,r,2,0,l-u),ct(n,r,3,0,c-d),o++,r+=32}function ft(e,t,n,r){var i=e[t+0]+4,a=35468*e[t+4]>>16,o=ut(e[t+4]),s=35468*e[t+1]>>16;lt(n,r,0,i+o,e=ut(e[t+1]),s),lt(n,r,1,i+a,e,s),lt(n,r,2,i-a,e,s),lt(n,r,3,i-o,e,s)}function pt(e,t,n,r,i){dt(e,t,n,r),i&&dt(e,t+16,n,r+4)}function mt(e,t,n,r){ur(e,t+0,n,r,1),ur(e,t+32,n,r+128,1)}function ht(e,t,n,r){var i;for(e=e[t+0]+4,i=0;4>i;++i)for(t=0;4>t;++t)ct(n,r,t,i,e)}function gt(e,t,n,r){e[t+0]&&pr(e,t+0,n,r),e[t+16]&&pr(e,t+16,n,r+4),e[t+32]&&pr(e,t+32,n,r+128),e[t+48]&&pr(e,t+48,n,r+128+4)}function _t(e,t,n,r){var i,o=a(16);for(i=0;4>i;++i){var s=e[t+0+i]+e[t+12+i],c=e[t+4+i]+e[t+8+i],l=e[t+4+i]-e[t+8+i],u=e[t+0+i]-e[t+12+i];o[0+i]=s+c,o[8+i]=s-c,o[4+i]=u+l,o[12+i]=u-l}for(i=0;4>i;++i)s=(e=o[0+4*i]+3)+o[3+4*i],c=o[1+4*i]+o[2+4*i],l=o[1+4*i]-o[2+4*i],u=e-o[3+4*i],n[r+0]=s+c>>3,n[r+16]=u+l>>3,n[r+32]=s-c>>3,n[r+48]=u-l>>3,r+=64}function vt(e,t,n){var r,i=t-32,a=Y,o=255-e[i-1];for(r=0;rn;++n)r(e,t+32*n,e,t-32,16)}function Ct(e,t){var n;for(n=16;0r;++r)i(t,n+32*r,e,16)}function Tt(e,t){var n,r=16;for(n=0;16>n;++n)r+=e[t-1+32*n]+e[t+n-32];wt(r>>5,e,t)}function Et(e,t){var n,r=8;for(n=0;16>n;++n)r+=e[t-1+32*n];wt(r>>4,e,t)}function Dt(e,t){var n,r=8;for(n=0;16>n;++n)r+=e[t+n-32];wt(r>>4,e,t)}function Ot(e,t){wt(128,e,t)}function kt(e,t,n){return e+2*t+n+2>>2}function At(e,t){var n,i=t-32;for(i=new Uint8Array([kt(e[i-1],e[i+0],e[i+1]),kt(e[i+0],e[i+1],e[i+2]),kt(e[i+1],e[i+2],e[i+3]),kt(e[i+2],e[i+3],e[i+4])]),n=0;4>n;++n)r(e,t+32*n,i,0,i.length)}function jt(e,t){var n=e[t-1],r=e[t-1+32],i=e[t-1+64],a=e[t-1+96];k(e,t+0,16843009*kt(e[t-1-32],n,r)),k(e,t+32,16843009*kt(n,r,i)),k(e,t+64,16843009*kt(r,i,a)),k(e,t+96,16843009*kt(i,a,a))}function Mt(e,t){var n,r=4;for(n=0;4>n;++n)r+=e[t+n-32]+e[t-1+32*n];for(r>>=3,n=0;4>n;++n)i(e,t+32*n,r,4)}function Nt(e,t){var n=e[t-1+0],r=e[t-1+32],i=e[t-1+64],a=e[t-1-32],o=e[t+0-32],s=e[t+1-32],c=e[t+2-32],l=e[t+3-32];e[t+0+96]=kt(r,i,e[t-1+96]),e[t+1+96]=e[t+0+64]=kt(n,r,i),e[t+2+96]=e[t+1+64]=e[t+0+32]=kt(a,n,r),e[t+3+96]=e[t+2+64]=e[t+1+32]=e[t+0+0]=kt(o,a,n),e[t+3+64]=e[t+2+32]=e[t+1+0]=kt(s,o,a),e[t+3+32]=e[t+2+0]=kt(c,s,o),e[t+3+0]=kt(l,c,s)}function Pt(e,t){var n=e[t+1-32],r=e[t+2-32],i=e[t+3-32],a=e[t+4-32],o=e[t+5-32],s=e[t+6-32],c=e[t+7-32];e[t+0+0]=kt(e[t+0-32],n,r),e[t+1+0]=e[t+0+32]=kt(n,r,i),e[t+2+0]=e[t+1+32]=e[t+0+64]=kt(r,i,a),e[t+3+0]=e[t+2+32]=e[t+1+64]=e[t+0+96]=kt(i,a,o),e[t+3+32]=e[t+2+64]=e[t+1+96]=kt(a,o,s),e[t+3+64]=e[t+2+96]=kt(o,s,c),e[t+3+96]=kt(s,c,c)}function Ft(e,t){var n=e[t-1+0],r=e[t-1+32],i=e[t-1+64],a=e[t-1-32],o=e[t+0-32],s=e[t+1-32],c=e[t+2-32],l=e[t+3-32];e[t+0+0]=e[t+1+64]=a+o+1>>1,e[t+1+0]=e[t+2+64]=o+s+1>>1,e[t+2+0]=e[t+3+64]=s+c+1>>1,e[t+3+0]=c+l+1>>1,e[t+0+96]=kt(i,r,n),e[t+0+64]=kt(r,n,a),e[t+0+32]=e[t+1+96]=kt(n,a,o),e[t+1+32]=e[t+2+96]=kt(a,o,s),e[t+2+32]=e[t+3+96]=kt(o,s,c),e[t+3+32]=kt(s,c,l)}function It(e,t){var n=e[t+0-32],r=e[t+1-32],i=e[t+2-32],a=e[t+3-32],o=e[t+4-32],s=e[t+5-32],c=e[t+6-32],l=e[t+7-32];e[t+0+0]=n+r+1>>1,e[t+1+0]=e[t+0+64]=r+i+1>>1,e[t+2+0]=e[t+1+64]=i+a+1>>1,e[t+3+0]=e[t+2+64]=a+o+1>>1,e[t+0+32]=kt(n,r,i),e[t+1+32]=e[t+0+96]=kt(r,i,a),e[t+2+32]=e[t+1+96]=kt(i,a,o),e[t+3+32]=e[t+2+96]=kt(a,o,s),e[t+3+64]=kt(o,s,c),e[t+3+96]=kt(s,c,l)}function Lt(e,t){var n=e[t-1+0],r=e[t-1+32],i=e[t-1+64],a=e[t-1+96];e[t+0+0]=n+r+1>>1,e[t+2+0]=e[t+0+32]=r+i+1>>1,e[t+2+32]=e[t+0+64]=i+a+1>>1,e[t+1+0]=kt(n,r,i),e[t+3+0]=e[t+1+32]=kt(r,i,a),e[t+3+32]=e[t+1+64]=kt(i,a,a),e[t+3+64]=e[t+2+64]=e[t+0+96]=e[t+1+96]=e[t+2+96]=e[t+3+96]=a}function Rt(e,t){var n=e[t-1+0],r=e[t-1+32],i=e[t-1+64],a=e[t-1+96],o=e[t-1-32],s=e[t+0-32],c=e[t+1-32],l=e[t+2-32];e[t+0+0]=e[t+2+32]=n+o+1>>1,e[t+0+32]=e[t+2+64]=r+n+1>>1,e[t+0+64]=e[t+2+96]=i+r+1>>1,e[t+0+96]=a+i+1>>1,e[t+3+0]=kt(s,c,l),e[t+2+0]=kt(o,s,c),e[t+1+0]=e[t+3+32]=kt(n,o,s),e[t+1+32]=e[t+3+64]=kt(r,n,o),e[t+1+64]=e[t+3+96]=kt(i,r,n),e[t+1+96]=kt(a,i,r)}function zt(e,t){var n;for(n=0;8>n;++n)r(e,t+32*n,e,t-32,8)}function Bt(e,t){var n;for(n=0;8>n;++n)i(e,t,e[t-1],8),t+=32}function Vt(e,t,n){var r;for(r=0;8>r;++r)i(t,n+32*r,e,8)}function Ht(e,t){var n,r=8;for(n=0;8>n;++n)r+=e[t+n-32]+e[t-1+32*n];Vt(r>>4,e,t)}function Ut(e,t){var n,r=4;for(n=0;8>n;++n)r+=e[t+n-32];Vt(r>>3,e,t)}function Wt(e,t){var n,r=4;for(n=0;8>n;++n)r+=e[t-1+32*n];Vt(r>>3,e,t)}function Gt(e,t){Vt(128,e,t)}function Kt(e,t,n){var r=e[t-n],i=e[t+0],a=3*(i-r)+Ir[1020+e[t-2*n]-e[t+n]],o=Lr[112+(a+4>>3)];e[t-n]=Y[255+r+Lr[112+(a+3>>3)]],e[t+0]=Y[255+i-o]}function qt(e,t,n,r){var i=e[t+0],a=e[t+n];return Rr[255+e[t-2*n]-e[t-n]]>r||Rr[255+a-i]>r}function Jt(e,t,n,r){return 4*Rr[255+e[t-n]-e[t+0]]+Rr[255+e[t-2*n]-e[t+n]]<=r}function Yt(e,t,n,r,i){var a=e[t-3*n],o=e[t-2*n],s=e[t-n],c=e[t+0],l=e[t+n],u=e[t+2*n],d=e[t+3*n];return 4*Rr[255+s-c]+Rr[255+o-l]>r?0:Rr[255+e[t-4*n]-a]<=i&&Rr[255+a-o]<=i&&Rr[255+o-s]<=i&&Rr[255+d-u]<=i&&Rr[255+u-l]<=i&&Rr[255+l-c]<=i}function Xt(e,t,n,r){var i=2*r+1;for(r=0;16>r;++r)Jt(e,t+r,n,i)&&Kt(e,t+r,n)}function Zt(e,t,n,r){var i=2*r+1;for(r=0;16>r;++r)Jt(e,t+r*n,1,i)&&Kt(e,t+r*n,1)}function Qt(e,t,n,r){var i;for(i=3;0>7,_=18*v+63>>7,v=9*v+63>>7;c[l-3*u]=Y[255+c[l-3*u]+v],c[l-2*u]=Y[255+d+_],c[l-u]=Y[255+f+g],c[l+0]=Y[255+p-g],c[l+u]=Y[255+m-_],c[l+2*u]=Y[255+h-v]}t+=r}}function en(e,t,n,r,i,a,o,s){for(a=2*a+1;0>3)],h=Lr[112+(h+3>>3)],g=m+1>>1;c[l-2*u]=Y[255+c[l-2*u]+g],c[l-u]=Y[255+d+h],c[l+0]=Y[255+f-m],c[l+u]=Y[255+p-g]}t+=r}}function tn(e,t,n,r,i,a){$t(e,t,n,1,16,r,i,a)}function nn(e,t,n,r,i,a){$t(e,t,1,n,16,r,i,a)}function rn(e,t,n,r,i,a){var o;for(o=3;0l?0:255:l)&255,l=c,i[a+s]=u}}function yn(e,n,i,o){var s=n.width,c=n.o;if(t(e!=null&&n!=null),0>i||0>=o||i+o>c)return null;if(!e.Cc){if(e.ga==null){var l;if(e.ga=new hn,(l=e.ga==null)||(l=n.width*n.o,t(e.Gb.length==0),e.Gb=a(l),e.Uc=0,e.Gb==null?l=0:(e.mb=e.Gb,e.nb=e.Uc,e.rc=null,l=1),l=!l),!l){l=e.ga;var u=e.Fa,d=e.P,f=e.qc,p=e.mb,m=e.nb,h=d+1,g=f-1,v=l.l;if(t(u!=null&&p!=null&&n!=null),yi[0]=null,yi[1]=gn,yi[2]=_n,yi[3]=vn,l.ca=p,l.tb=m,l.c=n.width,l.i=n.height,t(0=f)n=0;else if(l.$a=3&u[d+0],l.Z=u[d+0]>>2&3,l.Lc=u[d+0]>>4&3,d=u[d+0]>>6&3,0>l.$a||1=l.c*l.i;l=!n}if(l)return null;e.ga.Lc==1?o=c-i:e.Ga=0}t(e.ga!=null),t(i+o<=c);t:{if(n=(u=e.ga).c,c=u.l.o,u.$a==0){if(h=e.rc,g=e.Vc,v=e.Fa,d=e.P+1+i*n,f=e.mb,p=e.nb+i*n,t(d<=e.P+e.qc),u.Z!=0)for(t(yi[u.Z]!=null),l=0;l=n)n=1;else if(u.ic||wn(),u.ic){u=l.V,h=l.Ba,g=l.c;var y=l.i,b=(v=1,d=l.$/g,f=l.$%g,p=l.m,m=l.s,l.$),x=g*y,S=g*n,w=m.wc,E=b(y=De(E.G[0],E.H[0],p)))u[h+b]=y,++b,++f>=g&&(f=0,++d<=n&&!(d%16)&&Pe(l,d));else{if(!(280>y)){v=0;break e}y=W(y-256,p);var D,O=De(E.G[4],E.H[4],p);if(T(p),!(b>=(O=Ee(g,O=W(O,p)))&&x-b>=y)){v=0;break e}for(D=0;D=g;)f-=g,++d<=n&&!(d%16)&&Pe(l,d);bn?n:d);break e}!v||p.h&&b=c&&(e.Cc=1),o=1}if(!o)return null;if(e.Cc&&((o=e.ga)!=null&&(o.mc=null),e.ga=null,0>23,s[c+4*o+1]=s[c+4*o+1]*d>>23,s[c+4*o+2]=s[c+4*o+2]*d>>23)}t+=a}}function xn(e,t,n,r,i){for(;0>4)*c>>16;e[t+2*a+0]=(240&o|o>>4)*c>>16&240|(15&o|o<<4)*c>>16>>4&15,e[t+2*a+1]=240&l|s}t+=i}}function Sn(e,t,n,r,i,a,o,s){var c,l,u=255;for(l=0;l>8}function wn(){Dr=bn,Or=xn,kr=Sn,Ar=Cn}function Tn(n,r,i){e[n]=function(e,n,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y){var b,x=y-1>>1,S=s[c+0]|l[u+0]<<16,C=d[f+0]|p[m+0]<<16;t(e!=null);var w=3*S+C+131074>>2;for(r(e[n+0],255&w,w>>16,h,g),a!=null&&(w=3*C+S+131074>>2,r(a[o+0],255&w,w>>16,_,v)),b=1;b<=x;++b){var T=s[c+b]|l[u+b]<<16,E=d[f+b]|p[m+b]<<16,D=S+T+C+E+524296,O=D+2*(T+C)>>3;w=O+S>>1,S=(D=D+2*(S+E)>>3)+T>>1,r(e[n+2*b-1],255&w,w>>16,h,g+(2*b-1)*i),r(e[n+2*b-0],255&S,S>>16,h,g+(2*b-0)*i),a!=null&&(w=D+C>>1,S=O+E>>1,r(a[o+2*b-1],255&w,w>>16,_,v+(2*b-1)*i),r(a[o+2*b+0],255&S,S>>16,_,v+(2*b+0)*i)),S=T,C=E}1&y||(w=3*S+C+131074>>2,r(e[n+y-1],255&w,w>>16,h,g+(y-1)*i),a!=null&&(w=3*C+S+131074>>2,r(a[o+y-1],255&w,w>>16,_,v+(y-1)*i)))}}function En(){bi[zr]=xi,bi[Br]=Ci,bi[Vr]=Si,bi[Hr]=wi,bi[Ur]=Ti,bi[Wr]=Ei,bi[Gr]=Di,bi[Kr]=Ci,bi[qr]=wi,bi[Jr]=Ti,bi[Yr]=Ei}function Dn(e){return e&~Ni?0>e?0:255:e>>Mi}function On(e,t){return Dn((19077*e>>8)+(26149*t>>8)-14234)}function kn(e,t,n){return Dn((19077*e>>8)-(6419*t>>8)-(13320*n>>8)+8708)}function An(e,t){return Dn((19077*e>>8)+(33050*t>>8)-17685)}function jn(e,t,n,r,i){r[i+0]=On(e,n),r[i+1]=kn(e,t,n),r[i+2]=An(e,t)}function K(e,t,n,r,i){r[i+0]=An(e,t),r[i+1]=kn(e,t,n),r[i+2]=On(e,n)}function Mn(e,t,n,r,i){var a=kn(e,t,n);t=a<<3&224|An(e,t)>>3,r[i+0]=248&On(e,n)|a>>5,r[i+1]=t}function q(e,t,n,r,i){var a=240&An(e,t)|15;r[i+0]=240&On(e,n)|kn(e,t,n)>>4,r[i+1]=a}function Nn(e,t,n,r,i){r[i+0]=255,jn(e,t,n,r,i+1)}function Pn(e,t,n,r,i){K(e,t,n,r,i),r[i+3]=255}function Fn(e,t,n,r,i){jn(e,t,n,r,i),r[i+3]=255}function In(t,n,r){e[t]=function(e,t,i,a,o,s,c,l,u){for(var d=l+(-2&u)*r;l!=d;)n(e[t+0],i[a+0],o[s+0],c,l),n(e[t+1],i[a+0],o[s+0],c,l+r),t+=2,++a,++s,l+=2*r;1&u&&n(e[t+0],i[a+0],o[s+0],c,l)}}function Ln(e,t,n){return n==0?e==0?t==0?6:5:t==0?4:0:n}function Rn(e,t,n,r,i){switch(e>>>30){case 3:ur(t,n,r,i,0);break;case 2:dr(t,n,r,i);break;case 1:pr(t,n,r,i)}}function zn(e,t){var n,a,o=t.M,s=t.Nb,c=e.oc,l=e.pc+40,u=e.oc,d=e.pc+584,f=e.oc,p=e.pc+600;for(n=0;16>n;++n)c[l+32*n-1]=129;for(n=0;8>n;++n)u[d+32*n-1]=129,f[p+32*n-1]=129;for(0n;++n)r(c,l+32*n-4,c,l+32*n+12,4);for(n=-1;8>n;++n)r(u,d+32*n-4,u,d+32*n+4,4),r(f,p+32*n-4,f,p+32*n+4,4)}var h=e.Gd,g=e.Hd+a,_=m.ad,v=m.Hc;if(0=e.za-1?i(y,b,h[g].y[15],4):r(y,b,h[g+1].y,0,4)),n=0;4>n;n++)y[b+128+n]=y[b+256+n]=y[b+384+n]=y[b+0+n];for(n=0;16>n;++n,v<<=2)y=c,b=l+Vi[n],hi[m.Ob[n]](y,b),Rn(v,_,16*n,y,b)}else if(y=Ln(a,o,m.Ob[0]),mi[y](c,l),v!=0)for(n=0;16>n;++n,v<<=2)Rn(v,_,16*n,c,l+Vi[n]);for(n=m.Gc,y=Ln(a,o,m.Dd),gi[y](u,d),gi[y](f,p),v=_,y=u,b=d,255&(m=0|n)&&(170&m?fr(v,256,y,b):mr(v,256,y,b)),m=f,v=p,255&(n>>=8)&&(170&n?fr(_,320,m,v):mr(_,320,m,v)),on;++n)r(h,g+n*e.R,c,l+32*n,16);for(n=0;8>n;++n)r(_,m+n*e.B,u,d+32*n,8),r(v,y+n*e.B,f,p+32*n,8)}}function Bn(e,r,i,a,o,s,c,l,u){var d=[0],f=[0],p=0,m=u==null?0:u.kd,h=u??new dn;if(e==null||12>i)return 7;h.data=e,h.w=r,h.ha=i,r=[r],i=[i],h.gb=[h.gb];t:{var g=r,v=i,y=h.gb;if(t(e!=null),t(v!=null),t(y!=null),y[0]=0,12<=v[0]&&!n(e,g[0],`RIFF`)){if(n(e,g[0]+8,`WEBP`)){y=3;break t}var b=M(e,g[0]+4);if(12>b||4294967286v[0]-8){y=7;break t}y[0]=b,g[0]+=12,v[0]-=12}y=0}if(y!=0)return y;for(b=0y[0])y=7;else{if(!n(S,v[0],`VP8X`)){if(M(S,v[0]+4)!=10){y=3;break t}if(18>y[0]){y=7;break t}var E=M(S,v[0]+8),D=1+j(S,v[0]+12);if(2147483648<=D*(S=1+j(S,v[0]+15))){y=3;break t}T!=null&&(T[0]=E),C!=null&&(C[0]=D),w!=null&&(w[0]=S),v[0]+=18,y[0]-=18,O[0]=1}y=0}}if(p=p[0],g=g[0],y!=0)return y;if(v=!!(2&g),!b&&p)return 3;if(s!=null&&(s[0]=!!(16&g)),c!=null&&(c[0]=v),l!=null&&(l[0]=0),c=d[0],g=f[0],p&&v&&u==null){y=0;break}if(4>i){y=7;break}if(b&&p||!b&&!p&&!n(e,r[0],`ALPH`)){i=[i],h.na=[h.na],h.P=[h.P],h.Sa=[h.Sa];t:{E=e,y=r,b=i;var O=h.gb;C=h.na,w=h.P,T=h.Sa,D=22,t(E!=null),t(b!=null),S=y[0];var k=b[0];for(t(C!=null),t(T!=null),C[0]=null,w[0]=null,T[0]=0;;){if(y[0]=S,b[0]=k,8>k){y=7;break t}var A=M(E,S+4);if(4294967286O){y=3;break t}if(!n(E,S,`VP8 `)||!n(E,S,`VP8L`)){y=0;break t}if(k[0]b[0])y=7;else{if(S||D){if(O=M(O,E+4),12<=C&&O>C-12){y=3;break t}if(m&&O>b[0]-8){y=7;break t}w[0]=O,y[0]+=8,b[0]-=8,T[0]=D}else T[0]=5<=b[0]&&O[E+0]==47&&!(O[E+4]>>5),w[0]=b[0];y=0}if(i=i[0],h.Ja=h.Ja[0],h.xa=h.xa[0],r=r[0],y!=0)break;if(4294967286i){y=7;break}l=c,m=g,v=s,e==null||5>i?e=0:5<=i&&e[r+0]==47&&!(e[r+4]>>5)?(b=[0],O=[0],C=[0],_(w=new x,e,r,i),Te(w,b,O,C)?(l!=null&&(l[0]=b[0]),m!=null&&(m[0]=O[0]),v!=null&&(v[0]=C[0]),e=1):e=0):e=0}else{if(10>i){y=7;break}l=g,e==null||10>i||!it(e,r+3,i-3)?e=0:(m=e[r+0]|e[r+1]<<8|e[r+2]<<16,v=16383&(e[r+7]<<8|e[r+6]),e=16383&(e[r+9]<<8|e[r+8]),1&m||3<(m>>1&7)||!(m>>4&1)||m>>5>=h.Ja||!v||!e?e=0:(c&&(c[0]=v),l&&(l[0]=e),e=1))}if(!e||(c=c[0],g=g[0],p&&(d[0]!=c||f[0]!=g)))return 3;u!=null&&(u[0]=h,u.offset=r-u.w,t(4294967286>r-u.w),t(u.offset==u.ha-i));break}return y==0||y==7&&p&&u==null?(s!=null&&(s[0]|=h.na!=null&&0n||(a&=-2,o&=-2),0>a||0>o||0>=s||0>=c||a+s>r||o+c>i))return 0;if(t.v=a,t.j=o,t.va=a+s,t.o=o+c,t.U=s,t.T=c,t.da=e!=null&&0e.S){var t=e.f.RGBA;t.fb+=(e.height-1)*t.A,t.A=-t.A}else t=e.f.kb,e=e.height,t.O+=(e-1)*t.fa,t.fa=-t.fa,t.N+=(e-1>>1)*t.Ab,t.Ab=-t.Ab,t.W+=(e-1>>1)*t.Db,t.Db=-t.Db,t.F!=null&&(t.J+=(e-1)*t.lb,t.lb=-t.lb);return 0}function Un(e,t,n,r){if(r==null||0>=e||0>=t)return 2;if(n!=null){if(n.Da){var i=n.cd,o=n.bd,s=-2&n.v,c=-2&n.j;if(0>s||0>c||0>=i||0>=o||s+i>e||c+o>t)return 2;e=i,t=o}if(n.da){if(!I(e,t,i=[n.ib],o=[n.hb]))return 2;e=i[0],t=o[0]}}r.width=e,r.height=t;t:{var l=r.width,u=r.height;if(e=r.S,0>=l||0>=u||!(e>=zr&&13>e))e=2;else{if(0>=r.Rd&&r.sd==null){s=o=i=t=0;var d=(c=l*Gi[e])*u;if(11>e||(o=(u+1)/2*(t=(l+1)/2),e==12&&(s=(i=l)*u)),(u=a(d+2*o+s))==null){e=1;break t}r.sd=u,11>e?((l=r.f.RGBA).eb=u,l.fb=0,l.A=c,l.size=d):((l=r.f.kb).y=u,l.O=0,l.fa=c,l.Fd=d,l.f=u,l.N=0+d,l.Ab=t,l.Cd=o,l.ea=u,l.W=0+d+o,l.Db=t,l.Ed=o,e==12&&(l.F=u,l.J=0+d+2*o),l.Tc=s,l.lb=i)}if(t=1,i=r.S,o=r.width,s=r.height,i>=zr&&13>i)if(11>i)e=r.f.RGBA,t&=(c=Math.abs(e.A))*(s-1)+o<=e.size,t&=c>=o*Gi[i],t&=e.eb!=null;else{e=r.f.kb,c=(o+1)/2,d=(s+1)/2,l=Math.abs(e.fa),u=Math.abs(e.Ab);var f=Math.abs(e.Db),p=Math.abs(e.lb),m=p*(s-1)+o;t&=l*(s-1)+o<=e.Fd,t&=u*(d-1)+c<=e.Cd,t=(t&=f*(d-1)+c<=e.Ed)&l>=o&u>=c&f>=c,t&=e.y!=null,t&=e.f!=null,t&=e.ea!=null,i==12&&(t&=p>=o,t&=m<=e.Tc,t&=e.F!=null)}else t=0;e=t?0:2}}return e!=0||n!=null&&n.fd&&(e=Hn(r)),e}var Wn=64,Gn=[0,1,3,7,15,31,63,127,255,511,1023,2047,4095,8191,16383,32767,65535,131071,262143,524287,1048575,2097151,4194303,8388607,16777215],Kn=24,qn=32,Jn=8,Yn=[0,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7];R(`Predictor0`,`PredictorAdd0`),e.Predictor0=function(){return 4278190080},e.Predictor1=function(e){return e},e.Predictor2=function(e,t,n){return t[n+0]},e.Predictor3=function(e,t,n){return t[n+1]},e.Predictor4=function(e,t,n){return t[n-1]},e.Predictor5=function(e,t,n){return z(z(e,t[n+1]),t[n+0])},e.Predictor6=function(e,t,n){return z(e,t[n-1])},e.Predictor7=function(e,t,n){return z(e,t[n+0])},e.Predictor8=function(e,t,n){return z(t[n-1],t[n+0])},e.Predictor9=function(e,t,n){return z(t[n+0],t[n+1])},e.Predictor10=function(e,t,n){return z(z(e,t[n-1]),z(t[n+0],t[n+1]))},e.Predictor11=function(e,t,n){var r=t[n+0];return 0>=ne(r>>24&255,e>>24&255,(t=t[n-1])>>24&255)+ne(r>>16&255,e>>16&255,t>>16&255)+ne(r>>8&255,e>>8&255,t>>8&255)+ne(255&r,255&e,255&t)?r:e},e.Predictor12=function(e,t,n){var r=t[n+0];return(B((e>>24&255)+(r>>24&255)-((t=t[n-1])>>24&255))<<24|B((e>>16&255)+(r>>16&255)-(t>>16&255))<<16|B((e>>8&255)+(r>>8&255)-(t>>8&255))<<8|B((255&e)+(255&r)-(255&t)))>>>0},e.Predictor13=function(e,t,n){var r=t[n-1];return(V((e=z(e,t[n+0]))>>24&255,r>>24&255)<<24|V(e>>16&255,r>>16&255)<<16|V(e>>8&255,r>>8&255)<<8|V(255&e,255&r))>>>0};var Xn=e.PredictorAdd0;e.PredictorAdd1=re,R(`Predictor2`,`PredictorAdd2`),R(`Predictor3`,`PredictorAdd3`),R(`Predictor4`,`PredictorAdd4`),R(`Predictor5`,`PredictorAdd5`),R(`Predictor6`,`PredictorAdd6`),R(`Predictor7`,`PredictorAdd7`),R(`Predictor8`,`PredictorAdd8`),R(`Predictor9`,`PredictorAdd9`),R(`Predictor10`,`PredictorAdd10`),R(`Predictor11`,`PredictorAdd11`),R(`Predictor12`,`PredictorAdd12`),R(`Predictor13`,`PredictorAdd13`);var Zn=e.PredictorAdd2;se(`ColorIndexInverseTransform`,`MapARGB`,`32b`,function(e){return e>>8&255},function(e){return e}),se(`VP8LColorIndexInverseTransformAlpha`,`MapAlpha`,`8b`,function(e){return e},function(e){return e>>8&255});var Qn,$n=e.ColorIndexInverseTransform,er=e.MapARGB,tr=e.VP8LColorIndexInverseTransformAlpha,nr=e.MapAlpha,rr=e.VP8LPredictorsAdd=[];rr.length=16,(e.VP8LPredictors=[]).length=16,(e.VP8LPredictorsAdd_C=[]).length=16,(e.VP8LPredictors_C=[]).length=16;var J,ir,ar,or,sr,cr,lr,ur,dr,fr,pr,mr,hr,gr,_r,vr,yr,br,xr,Sr,Cr,wr,Tr,Er,Dr,Or,kr,Ar,jr=a(511),Mr=a(2041),Nr=a(225),Pr=a(767),Fr=0,Ir=Mr,Lr=Nr,Y=Pr,Rr=jr,zr=0,Br=1,Vr=2,Hr=3,Ur=4,Wr=5,Gr=6,Kr=7,qr=8,Jr=9,Yr=10,Xr=[2,3,7],Zr=[3,3,11],Qr=[280,256,256,256,40],$r=[0,1,1,1,0],ei=[17,18,0,1,2,3,4,5,16,6,7,8,9,10,11,12,13,14,15],ti=[24,7,23,25,40,6,39,41,22,26,38,42,56,5,55,57,21,27,54,58,37,43,72,4,71,73,20,28,53,59,70,74,36,44,88,69,75,52,60,3,87,89,19,29,86,90,35,45,68,76,85,91,51,61,104,2,103,105,18,30,102,106,34,46,84,92,67,77,101,107,50,62,120,1,119,121,83,93,17,31,100,108,66,78,118,122,33,47,117,123,49,63,99,109,82,94,0,116,124,65,79,16,32,98,110,48,115,125,81,95,64,114,126,97,111,80,113,127,96,112],ni=[2954,2956,2958,2962,2970,2986,3018,3082,3212,3468,3980,5004],ri=8,ii=[4,5,6,7,8,9,10,10,11,12,13,14,15,16,17,17,18,19,20,20,21,21,22,22,23,23,24,25,25,26,27,28,29,30,31,32,33,34,35,36,37,37,38,39,40,41,42,43,44,45,46,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,76,77,78,79,80,81,82,83,84,85,86,87,88,89,91,93,95,96,98,100,101,102,104,106,108,110,112,114,116,118,122,124,126,128,130,132,134,136,138,140,143,145,148,151,154,157],ai=[4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,60,62,64,66,68,70,72,74,76,78,80,82,84,86,88,90,92,94,96,98,100,102,104,106,108,110,112,114,116,119,122,125,128,131,134,137,140,143,146,149,152,155,158,161,164,167,170,173,177,181,185,189,193,197,201,205,209,213,217,221,225,229,234,239,245,249,254,259,264,269,274,279,284],oi=null,si=[[173,148,140,0],[176,155,140,135,0],[180,157,141,134,130,0],[254,254,243,230,196,177,153,140,133,130,129,0]],ci=[0,1,4,8,5,2,3,6,9,12,13,10,7,11,14,15],li=[-0,1,-1,2,-2,3,4,6,-3,5,-4,-5,-6,7,-7,8,-8,-9],ui=[[[[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128]],[[253,136,254,255,228,219,128,128,128,128,128],[189,129,242,255,227,213,255,219,128,128,128],[106,126,227,252,214,209,255,255,128,128,128]],[[1,98,248,255,236,226,255,255,128,128,128],[181,133,238,254,221,234,255,154,128,128,128],[78,134,202,247,198,180,255,219,128,128,128]],[[1,185,249,255,243,255,128,128,128,128,128],[184,150,247,255,236,224,128,128,128,128,128],[77,110,216,255,236,230,128,128,128,128,128]],[[1,101,251,255,241,255,128,128,128,128,128],[170,139,241,252,236,209,255,255,128,128,128],[37,116,196,243,228,255,255,255,128,128,128]],[[1,204,254,255,245,255,128,128,128,128,128],[207,160,250,255,238,128,128,128,128,128,128],[102,103,231,255,211,171,128,128,128,128,128]],[[1,152,252,255,240,255,128,128,128,128,128],[177,135,243,255,234,225,128,128,128,128,128],[80,129,211,255,194,224,128,128,128,128,128]],[[1,1,255,128,128,128,128,128,128,128,128],[246,1,255,128,128,128,128,128,128,128,128],[255,128,128,128,128,128,128,128,128,128,128]]],[[[198,35,237,223,193,187,162,160,145,155,62],[131,45,198,221,172,176,220,157,252,221,1],[68,47,146,208,149,167,221,162,255,223,128]],[[1,149,241,255,221,224,255,255,128,128,128],[184,141,234,253,222,220,255,199,128,128,128],[81,99,181,242,176,190,249,202,255,255,128]],[[1,129,232,253,214,197,242,196,255,255,128],[99,121,210,250,201,198,255,202,128,128,128],[23,91,163,242,170,187,247,210,255,255,128]],[[1,200,246,255,234,255,128,128,128,128,128],[109,178,241,255,231,245,255,255,128,128,128],[44,130,201,253,205,192,255,255,128,128,128]],[[1,132,239,251,219,209,255,165,128,128,128],[94,136,225,251,218,190,255,255,128,128,128],[22,100,174,245,186,161,255,199,128,128,128]],[[1,182,249,255,232,235,128,128,128,128,128],[124,143,241,255,227,234,128,128,128,128,128],[35,77,181,251,193,211,255,205,128,128,128]],[[1,157,247,255,236,231,255,255,128,128,128],[121,141,235,255,225,227,255,255,128,128,128],[45,99,188,251,195,217,255,224,128,128,128]],[[1,1,251,255,213,255,128,128,128,128,128],[203,1,248,255,255,128,128,128,128,128,128],[137,1,177,255,224,255,128,128,128,128,128]]],[[[253,9,248,251,207,208,255,192,128,128,128],[175,13,224,243,193,185,249,198,255,255,128],[73,17,171,221,161,179,236,167,255,234,128]],[[1,95,247,253,212,183,255,255,128,128,128],[239,90,244,250,211,209,255,255,128,128,128],[155,77,195,248,188,195,255,255,128,128,128]],[[1,24,239,251,218,219,255,205,128,128,128],[201,51,219,255,196,186,128,128,128,128,128],[69,46,190,239,201,218,255,228,128,128,128]],[[1,191,251,255,255,128,128,128,128,128,128],[223,165,249,255,213,255,128,128,128,128,128],[141,124,248,255,255,128,128,128,128,128,128]],[[1,16,248,255,255,128,128,128,128,128,128],[190,36,230,255,236,255,128,128,128,128,128],[149,1,255,128,128,128,128,128,128,128,128]],[[1,226,255,128,128,128,128,128,128,128,128],[247,192,255,128,128,128,128,128,128,128,128],[240,128,255,128,128,128,128,128,128,128,128]],[[1,134,252,255,255,128,128,128,128,128,128],[213,62,250,255,255,128,128,128,128,128,128],[55,93,255,128,128,128,128,128,128,128,128]],[[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128],[128,128,128,128,128,128,128,128,128,128,128]]],[[[202,24,213,235,186,191,220,160,240,175,255],[126,38,182,232,169,184,228,174,255,187,128],[61,46,138,219,151,178,240,170,255,216,128]],[[1,112,230,250,199,191,247,159,255,255,128],[166,109,228,252,211,215,255,174,128,128,128],[39,77,162,232,172,180,245,178,255,255,128]],[[1,52,220,246,198,199,249,220,255,255,128],[124,74,191,243,183,193,250,221,255,255,128],[24,71,130,219,154,170,243,182,255,255,128]],[[1,182,225,249,219,240,255,224,128,128,128],[149,150,226,252,216,205,255,171,128,128,128],[28,108,170,242,183,194,254,223,255,255,128]],[[1,81,230,252,204,203,255,192,128,128,128],[123,102,209,247,188,196,255,233,128,128,128],[20,95,153,243,164,173,255,203,128,128,128]],[[1,222,248,255,216,213,128,128,128,128,128],[168,175,246,252,235,205,255,255,128,128,128],[47,116,215,255,211,212,255,255,128,128,128]],[[1,121,236,253,212,214,255,255,128,128,128],[141,84,213,252,201,202,255,219,128,128,128],[42,80,160,240,162,185,255,205,128,128,128]],[[1,1,255,128,128,128,128,128,128,128,128],[244,1,255,128,128,128,128,128,128,128,128],[238,1,255,128,128,128,128,128,128,128,128]]]],di=[[[231,120,48,89,115,113,120,152,112],[152,179,64,126,170,118,46,70,95],[175,69,143,80,85,82,72,155,103],[56,58,10,171,218,189,17,13,152],[114,26,17,163,44,195,21,10,173],[121,24,80,195,26,62,44,64,85],[144,71,10,38,171,213,144,34,26],[170,46,55,19,136,160,33,206,71],[63,20,8,114,114,208,12,9,226],[81,40,11,96,182,84,29,16,36]],[[134,183,89,137,98,101,106,165,148],[72,187,100,130,157,111,32,75,80],[66,102,167,99,74,62,40,234,128],[41,53,9,178,241,141,26,8,107],[74,43,26,146,73,166,49,23,157],[65,38,105,160,51,52,31,115,128],[104,79,12,27,217,255,87,17,7],[87,68,71,44,114,51,15,186,23],[47,41,14,110,182,183,21,17,194],[66,45,25,102,197,189,23,18,22]],[[88,88,147,150,42,46,45,196,205],[43,97,183,117,85,38,35,179,61],[39,53,200,87,26,21,43,232,171],[56,34,51,104,114,102,29,93,77],[39,28,85,171,58,165,90,98,64],[34,22,116,206,23,34,43,166,73],[107,54,32,26,51,1,81,43,31],[68,25,106,22,64,171,36,225,114],[34,19,21,102,132,188,16,76,124],[62,18,78,95,85,57,50,48,51]],[[193,101,35,159,215,111,89,46,111],[60,148,31,172,219,228,21,18,111],[112,113,77,85,179,255,38,120,114],[40,42,1,196,245,209,10,25,109],[88,43,29,140,166,213,37,43,154],[61,63,30,155,67,45,68,1,209],[100,80,8,43,154,1,51,26,71],[142,78,78,16,255,128,34,197,171],[41,40,5,102,211,183,4,1,221],[51,50,17,168,209,192,23,25,82]],[[138,31,36,171,27,166,38,44,229],[67,87,58,169,82,115,26,59,179],[63,59,90,180,59,166,93,73,154],[40,40,21,116,143,209,34,39,175],[47,15,16,183,34,223,49,45,183],[46,17,33,183,6,98,15,32,183],[57,46,22,24,128,1,54,17,37],[65,32,73,115,28,128,23,128,205],[40,3,9,115,51,192,18,6,223],[87,37,9,115,59,77,64,21,47]],[[104,55,44,218,9,54,53,130,226],[64,90,70,205,40,41,23,26,57],[54,57,112,184,5,41,38,166,213],[30,34,26,133,152,116,10,32,134],[39,19,53,221,26,114,32,73,255],[31,9,65,234,2,15,1,118,73],[75,32,12,51,192,255,160,43,51],[88,31,35,67,102,85,55,186,85],[56,21,23,111,59,205,45,37,192],[55,38,70,124,73,102,1,34,98]],[[125,98,42,88,104,85,117,175,82],[95,84,53,89,128,100,113,101,45],[75,79,123,47,51,128,81,171,1],[57,17,5,71,102,57,53,41,49],[38,33,13,121,57,73,26,1,85],[41,10,67,138,77,110,90,47,114],[115,21,2,10,102,255,166,23,6],[101,29,16,10,85,128,101,196,26],[57,18,10,102,102,213,34,20,43],[117,20,15,36,163,128,68,1,26]],[[102,61,71,37,34,53,31,243,192],[69,60,71,38,73,119,28,222,37],[68,45,128,34,1,47,11,245,171],[62,17,19,70,146,85,55,62,70],[37,43,37,154,100,163,85,160,1],[63,9,92,136,28,64,32,201,85],[75,15,9,9,64,255,184,119,16],[86,6,28,5,64,255,25,248,1],[56,8,17,132,137,255,55,116,128],[58,15,20,82,135,57,26,121,40]],[[164,50,31,137,154,133,25,35,218],[51,103,44,131,131,123,31,6,158],[86,40,64,135,148,224,45,183,128],[22,26,17,131,240,154,14,1,209],[45,16,21,91,64,222,7,1,197],[56,21,39,155,60,138,23,102,213],[83,12,13,54,192,255,68,47,28],[85,26,85,85,128,128,32,146,171],[18,11,7,63,144,171,4,4,246],[35,27,10,146,174,171,12,26,128]],[[190,80,35,99,180,80,126,54,45],[85,126,47,87,176,51,41,20,32],[101,75,128,139,118,146,116,128,85],[56,41,15,176,236,85,37,9,62],[71,30,17,119,118,255,17,18,138],[101,38,60,138,55,70,43,26,142],[146,36,19,30,171,255,97,27,20],[138,45,61,62,219,1,81,188,64],[32,41,20,117,151,142,20,21,163],[112,19,12,61,195,128,48,4,24]]],fi=[[[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[176,246,255,255,255,255,255,255,255,255,255],[223,241,252,255,255,255,255,255,255,255,255],[249,253,253,255,255,255,255,255,255,255,255]],[[255,244,252,255,255,255,255,255,255,255,255],[234,254,254,255,255,255,255,255,255,255,255],[253,255,255,255,255,255,255,255,255,255,255]],[[255,246,254,255,255,255,255,255,255,255,255],[239,253,254,255,255,255,255,255,255,255,255],[254,255,254,255,255,255,255,255,255,255,255]],[[255,248,254,255,255,255,255,255,255,255,255],[251,255,254,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[251,254,254,255,255,255,255,255,255,255,255],[254,255,254,255,255,255,255,255,255,255,255]],[[255,254,253,255,254,255,255,255,255,255,255],[250,255,254,255,254,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[217,255,255,255,255,255,255,255,255,255,255],[225,252,241,253,255,255,254,255,255,255,255],[234,250,241,250,253,255,253,254,255,255,255]],[[255,254,255,255,255,255,255,255,255,255,255],[223,254,254,255,255,255,255,255,255,255,255],[238,253,254,254,255,255,255,255,255,255,255]],[[255,248,254,255,255,255,255,255,255,255,255],[249,254,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,255,255,255,255,255,255,255,255,255],[247,254,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[252,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,254,255,255,255,255,255,255,255,255],[253,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,253,255,255,255,255,255,255,255,255],[250,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[186,251,250,255,255,255,255,255,255,255,255],[234,251,244,254,255,255,255,255,255,255,255],[251,251,243,253,254,255,254,255,255,255,255]],[[255,253,254,255,255,255,255,255,255,255,255],[236,253,254,255,255,255,255,255,255,255,255],[251,253,253,254,254,255,255,255,255,255,255]],[[255,254,254,255,255,255,255,255,255,255,255],[254,254,254,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,254,255,255,255,255,255,255,255,255,255],[254,254,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]],[[[248,255,255,255,255,255,255,255,255,255,255],[250,254,252,254,255,255,255,255,255,255,255],[248,254,249,253,255,255,255,255,255,255,255]],[[255,253,253,255,255,255,255,255,255,255,255],[246,253,253,255,255,255,255,255,255,255,255],[252,254,251,254,254,255,255,255,255,255,255]],[[255,254,252,255,255,255,255,255,255,255,255],[248,254,253,255,255,255,255,255,255,255,255],[253,255,254,254,255,255,255,255,255,255,255]],[[255,251,254,255,255,255,255,255,255,255,255],[245,251,254,255,255,255,255,255,255,255,255],[253,253,254,255,255,255,255,255,255,255,255]],[[255,251,253,255,255,255,255,255,255,255,255],[252,253,254,255,255,255,255,255,255,255,255],[255,254,255,255,255,255,255,255,255,255,255]],[[255,252,255,255,255,255,255,255,255,255,255],[249,255,254,255,255,255,255,255,255,255,255],[255,255,254,255,255,255,255,255,255,255,255]],[[255,255,253,255,255,255,255,255,255,255,255],[250,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]],[[255,255,255,255,255,255,255,255,255,255,255],[254,255,255,255,255,255,255,255,255,255,255],[255,255,255,255,255,255,255,255,255,255,255]]]],pi=[0,1,2,3,6,4,5,6,6,6,6,6,6,6,6,7,0],mi=[],hi=[],gi=[],_i=1,vi=2,yi=[],bi=[];Tn(`UpsampleRgbLinePair`,jn,3),Tn(`UpsampleBgrLinePair`,K,3),Tn(`UpsampleRgbaLinePair`,Fn,4),Tn(`UpsampleBgraLinePair`,Pn,4),Tn(`UpsampleArgbLinePair`,Nn,4),Tn(`UpsampleRgba4444LinePair`,q,2),Tn(`UpsampleRgb565LinePair`,Mn,2);var xi=e.UpsampleRgbLinePair,Si=e.UpsampleBgrLinePair,Ci=e.UpsampleRgbaLinePair,wi=e.UpsampleBgraLinePair,Ti=e.UpsampleArgbLinePair,Ei=e.UpsampleRgba4444LinePair,Di=e.UpsampleRgb565LinePair,Oi=16,ki=1<c.ca.S||(alert(`todo:WebPInitConvertARGBToYUV`),c.ca.f.kb.F!=null&&wn()),c.Pb&&0(p=s.Md)?0:100m;++m)12>(g=l.pb[m]).lc&&(g.ia=p*Ui[0>g.lc?0:g.lc]>>3),h|=g.ia;h&&(alert(`todo:VP8InitRandom`),l.ia=1)}l.Ga=s.Id,100l.Ga&&(l.Ga=0)}(function(e,n){if(e==null)return 0;if(n==null)return rt(e,2,`NULL VP8Io parameter in VP8Decode().`);if(!e.cb&&!at(e,n))return 0;if(t(e.cb),n.ac==null||n.ac(n)){n.ob&&(e.L=0);var s=Hi[e.L];if(e.L==2?(e.yb=0,e.zb=0):(e.yb=n.v-s>>4,e.zb=n.j-s>>4,0>e.yb&&(e.yb=0),0>e.zb&&(e.zb=0)),e.Va=n.o+15+s>>4,e.Hb=n.va+15+s>>4,e.Hb>e.za&&(e.Hb=e.za),e.Va>e.Ub&&(e.Va=e.Ub),0s;++s){var l;if(e.Qa.Cb){var u=e.Qa.Lb[s];e.Qa.Fb||(u+=c.Tb)}else u=c.Tb;for(l=0;1>=l;++l){var d=e.gd[s][l],f=u;if(c.Pc&&(f+=c.vd[0],l&&(f+=c.od[0])),0<(f=0>f?0:63>2:p>>1)>9-c.wb&&(p=9-c.wb),1>p&&(p=1),d.dd=p,d.tc=2*f+p,d.ld=40<=f?2:+(15<=f)}else d.tc=0;d.La=l}}}s=0}else rt(e,6,`Frame setup failed`),s=e.a;if(s=s==0){if(s){e.$c=0,0e.Vb){if(e.Vb=0,e.Ec=a(d),e.Fc=0,e.Ec==null){s=rt(e,1,`no memory during frame initialization.`);break e}e.Vb=d}d=e.Ec,f=e.Fc,e.Ac=d,e.Bc=f,f+=c,e.Gd=o(m,Qe),e.Hd=0,e.rb=o(h+1,Je),e.sb=1,e.wa=g?o(g,qe):null,e.Y=0,e.D.Nb=0,e.D.wa=e.wa,e.D.Y=e.Y,0=s;++s)jr[255+s]=0>s?-s:s;for(s=-1020;1020>=s;++s)Mr[1020+s]=-128>s?-128:127=s;++s)Nr[112+s]=-16>s?-16:15=s;++s)Pr[255+s]=0>s?0:255d;++d){var v,y=m[0+d];for(v=0;4>v;++v){y=di[f[p+v]][y];for(var b=li[O(u,y[0])];0>3;for(b=0;256>b;b+=16)d[g+b]=E}C=1,w=p[0]}var D=15&u.la,k=15&_.la;for(b=0;4>b;++b){var A=1&k;for(E=S=0;4>E;++E)D=D>>1|(A=(T=oi(f,w,T=A+(1&D),h.Sc,C,d,g))>C)<<7,S=S<<2|(3>=4,k=k>>1|A<<7,v=(v<<8|S)>>>0}for(w=D,C=k>>4,x=0;4>x;x+=2){for(S=0,D=u.la>>4+x,k=_.la>>4+x,b=0;2>b;++b){for(A=1&k,E=0;2>E;++E)T=A+(1&D),D=D>>1|(A=0<(T=oi(f,p[2],T,h.Qc,0,d,g)))<<3,S=S<<2|(3>=2,k=k>>1|A<<5}y|=S<<4*x,w|=D<<4<=s.zb&&s.M<=s.Va,s.Aa==0)e:{if(o.M=s.M,o.uc=u,zn(s,o),l=1,o=(S=s.D).Nb,u=(y=Hi[s.L])*s.R,f=y/2*s.B,b=16*o*s.R,E=8*o*s.B,p=s.sa,m=s.ta-u+b,h=s.qa,d=s.ra-f+E,g=s.Ha,_=s.Ia-f+E,k=(D=S.M)==0,v=D>=s.Va-1,s.Aa==2&&zn(s,S),S.uc)for(A=(T=s).D.M,t(T.D.uc),S=T.yb;Sc.o&&(D=c.o),c.F=null,c.J=null,s.Fa!=null&&0>1),c.W+=s.B*(y>>1),c.F!=null&&(c.J+=c.width*y)),S>1,c.W+=c.v>>1,c.F!=null&&(c.J+=c.v),c.ka=S-c.j,c.U=c.va-c.v,c.T=D-S,l=c.put(c))}o+1!=s.Ic||v||(r(s.sa,s.ta-u,p,m+16*s.R,u),r(s.qa,s.ra-f,h,d+8*s.B,f),r(s.Ha,s.Ia-f,g,_+8*s.B,f))}if(!l)return rt(e,6,`Output aborted.`)}return 1}(e,n),n.bc!=null&&n.bc(n),s&=1}return s?(e.cb=0,s):0})(e,c)||(n=e.a)}}else n=e.a}n==0&&d.Oa!=null&&d.Oa.fd&&(n=Hn(d.ba))}d=n}u=d==0?11>u?f.f.RGBA.eb:f.f.kb.y:null}else u=null;return u};var Gi=[3,4,3,4,4,2,2,4,4,4,2,1,1]};function l(e,t){for(var n=``,r=0;r<4;r++)n+=String.fromCharCode(e[t++]);return n}function u(e,t){return e[t+0]|e[t+1]<<8}function d(e,t){return(e[t+0]|e[t+1]<<8|e[t+2]<<16)>>>0}function f(e,t){return(e[t+0]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24)>>>0}new c;var p=[0],m=[0],h=[],g=new c,_=e,v=function(e,t){var n={},r=0,i=!1,a=0,o=0;if(n.frames=[],!function(e,t){for(var n=0;n<4;n++)if(e[t+n]!=`RIFF`.charCodeAt(n))return!0;return!1}(e,t)){for(f(e,t+=4),t+=8;t>1&1}s!=`ANMF`&&(t+=p)}return n}}(_,0);v.response=_,v.rgbaoutput=!0,v.dataurl=!1;var y=v.header?v.header:null,b=v.frames?v.frames:null;if(y){y.loop_counter=y.loop_count,p=[y.canvas_height],m=[y.canvas_width];for(var x=0;x`+n.replace(/&/g,`&`).replace(//g,`>`).replace(/"/g,`"`).replace(/'/g,`'`)+``,this.internal.__metadata__.metadataObjectNumber=this.internal.newObject(),this.internal.write(`<< /Type /Metadata /Subtype /XML /Length `+e.length+` >>`),this.internal.write(`stream`),this.internal.write(e),this.internal.write(`endstream`),this.internal.write(`endobj`)}function tI(){this.internal.__metadata__.metadataObjectNumber&&this.internal.write(`/Metadata `+this.internal.__metadata__.metadataObjectNumber+` 0 R`)}(function(e){var t,n,r,i,a,o,s,c,l,u=function(e){return e||={},this.isStrokeTransparent=e.isStrokeTransparent||!1,this.strokeOpacity=e.strokeOpacity||1,this.strokeStyle=e.strokeStyle||`#000000`,this.fillStyle=e.fillStyle||`#000000`,this.isFillTransparent=e.isFillTransparent||!1,this.fillOpacity=e.fillOpacity||1,this.font=e.font||`10px sans-serif`,this.textBaseline=e.textBaseline||`alphabetic`,this.textAlign=e.textAlign||`left`,this.lineWidth=e.lineWidth||1,this.lineJoin=e.lineJoin||`miter`,this.lineCap=e.lineCap||`butt`,this.path=e.path||[],this.transform=e.transform===void 0?new c:e.transform.clone(),this.globalCompositeOperation=e.globalCompositeOperation||`normal`,this.globalAlpha=e.globalAlpha||1,this.clip_path=e.clip_path||[],this.currentPoint=e.currentPoint||new o,this.miterLimit=e.miterLimit||10,this.lastPoint=e.lastPoint||new o,this.lineDashOffset=e.lineDashOffset||0,this.lineDash=e.lineDash||[],this.margin=e.margin||[0,0,0,0],this.prevPageLastElemOffset=e.prevPageLastElemOffset||0,this.ignoreClearRect=typeof e.ignoreClearRect!=`boolean`||e.ignoreClearRect,this};e.events.push([`initialized`,function(){this.context2d=new d(this),t=this.internal.f2,n=this.internal.getCoordinateString,r=this.internal.getVerticalCoordinateString,i=this.internal.getHorizontalCoordinate,a=this.internal.getVerticalCoordinate,o=this.internal.Point,s=this.internal.Rectangle,c=this.internal.Matrix,l=new u}]);var d=function(e){Object.defineProperty(this,"canvas",{get:function(){return{parentNode:!1,style:!1}}});var t=e;Object.defineProperty(this,"pdf",{get:function(){return t}});var n=!1;Object.defineProperty(this,"pageWrapXEnabled",{get:function(){return n},set:function(e){n=!!e}});var r=!1;Object.defineProperty(this,"pageWrapYEnabled",{get:function(){return r},set:function(e){r=!!e}});var i=0;Object.defineProperty(this,"posX",{get:function(){return i},set:function(e){isNaN(e)||(i=e)}});var a=0;Object.defineProperty(this,"posY",{get:function(){return a},set:function(e){isNaN(e)||(a=e)}}),Object.defineProperty(this,"margin",{get:function(){return l.margin},set:function(e){var t;typeof e==`number`?t=[e,e,e,e]:((t=[,,,,])[0]=e[0],t[1]=e.length>=2?e[1]:t[0],t[2]=e.length>=3?e[2]:t[0],t[3]=e.length>=4?e[3]:t[1]),l.margin=t}});var o=!1;Object.defineProperty(this,"autoPaging",{get:function(){return o},set:function(e){o=e}});var s=0;Object.defineProperty(this,"lastBreak",{get:function(){return s},set:function(e){s=e}});var c=[];Object.defineProperty(this,"pageBreaks",{get:function(){return c},set:function(e){c=e}}),Object.defineProperty(this,"ctx",{get:function(){return l},set:function(e){e instanceof u&&(l=e)}}),Object.defineProperty(this,"path",{get:function(){return l.path},set:function(e){l.path=e}});var d=[];Object.defineProperty(this,"ctxStack",{get:function(){return d},set:function(e){d=e}}),Object.defineProperty(this,"fillStyle",{get:function(){return this.ctx.fillStyle},set:function(e){var t=f(e);this.ctx.fillStyle=t.style,this.ctx.isFillTransparent=t.a===0,this.ctx.fillOpacity=t.a,this.pdf.setFillColor(t.r,t.g,t.b,{a:t.a}),this.pdf.setTextColor(t.r,t.g,t.b,{a:t.a})}}),Object.defineProperty(this,"strokeStyle",{get:function(){return this.ctx.strokeStyle},set:function(e){var t=f(e);this.ctx.strokeStyle=t.style,this.ctx.isStrokeTransparent=t.a===0,this.ctx.strokeOpacity=t.a,t.a===0?this.pdf.setDrawColor(255,255,255):(t.a,this.pdf.setDrawColor(t.r,t.g,t.b))}}),Object.defineProperty(this,"lineCap",{get:function(){return this.ctx.lineCap},set:function(e){[`butt`,`round`,`square`].indexOf(e)!==-1&&(this.ctx.lineCap=e,this.pdf.setLineCap(e))}}),Object.defineProperty(this,"lineWidth",{get:function(){return this.ctx.lineWidth},set:function(e){isNaN(e)||(this.ctx.lineWidth=e,this.pdf.setLineWidth(e))}}),Object.defineProperty(this,"lineJoin",{get:function(){return this.ctx.lineJoin},set:function(e){[`bevel`,`round`,`miter`].indexOf(e)!==-1&&(this.ctx.lineJoin=e,this.pdf.setLineJoin(e))}}),Object.defineProperty(this,"miterLimit",{get:function(){return this.ctx.miterLimit},set:function(e){isNaN(e)||(this.ctx.miterLimit=e,this.pdf.setMiterLimit(e))}}),Object.defineProperty(this,"textBaseline",{get:function(){return this.ctx.textBaseline},set:function(e){this.ctx.textBaseline=e}}),Object.defineProperty(this,"textAlign",{get:function(){return this.ctx.textAlign},set:function(e){[`right`,`end`,`center`,`left`,`start`].indexOf(e)!==-1&&(this.ctx.textAlign=e)}});var p=null,m=null,h=null;Object.defineProperty(this,"fontFaces",{get:function(){return h},set:function(e){p=null,m=null,h=e}}),Object.defineProperty(this,"font",{get:function(){return this.ctx.font},set:function(e){var t;if(this.ctx.font=e,(t=/^\s*(?=(?:(?:[-a-z]+\s*){0,2}(italic|oblique))?)(?=(?:(?:[-a-z]+\s*){0,2}(small-caps))?)(?=(?:(?:[-a-z]+\s*){0,2}(bold(?:er)?|lighter|[1-9]00))?)(?:(?:normal|\1|\2|\3)\s*){0,3}((?:xx?-)?(?:small|large)|medium|smaller|larger|[.\d]+(?:\%|in|[cem]m|ex|p[ctx]))(?:\s*\/\s*(normal|[.\d]+(?:\%|in|[cem]m|ex|p[ctx])))?\s*([-_,\"\'\sa-z0-9]+?)\s*$/i.exec(e))!==null){var n=t[1];t[2];var r=t[3],i=t[4];t[5];var a=t[6],o=/^([.\d]+)((?:%|in|[cem]m|ex|p[ctx]))$/i.exec(i)[2];i=Math.floor(o===`px`?parseFloat(i)*this.pdf.internal.scaleFactor:o===`em`?parseFloat(i)*this.pdf.getFontSize():parseFloat(i)*this.pdf.internal.scaleFactor),this.pdf.setFontSize(i);var s=function(e){var t,n,r=[],i=e.trim();if(i===``)return LF;if(i in DF)return[DF[i]];for(;i!==``;){switch(n=null,t=(i=kF(i)).charAt(0)){case`"`:case`'`:n=AF(i.substring(1),t);break;default:n=jF(i)}if(n===null||(r.push(n[0]),(i=kF(n[1]))!==``&&i.charAt(0)!==`,`))return LF;i=i.replace(/^,/,``)}return r}(a);if(this.fontFaces){var c=function(e,t,n){for(var r=(n||={}).defaultFontFamily||`times`,i=Object.assign({},EF,n.genericFontFamilies||{}),a=null,o=null,s=0;s=700||n===`bold`)&&(l=`bold`),n===`italic`&&(l+=`italic`),l.length===0&&(l=`normal`);for(var u=``,d={arial:`Helvetica`,Arial:`Helvetica`,verdana:`Helvetica`,Verdana:`Helvetica`,helvetica:`Helvetica`,Helvetica:`Helvetica`,"sans-serif":`Helvetica`,fixed:`Courier`,monospace:`Courier`,terminal:`Courier`,cursive:`Times`,fantasy:`Times`,serif:`Times`},f=0;f=2*Math.PI&&(r=0,i=2*Math.PI),this.path.push({type:`arc`,x:e,y:t,radius:n,startAngle:r,endAngle:i,counterclockwise:a})},d.prototype.arcTo=function(e,t,n,r,i){throw Error(`arcTo not implemented.`)},d.prototype.rect=function(e,t,n,r){if(isNaN(e)||isNaN(t)||isNaN(n)||isNaN(r))throw QN.error(`jsPDF.context2d.rect: Invalid arguments`,arguments),Error(`Invalid arguments passed to jsPDF.context2d.rect`);this.moveTo(e,t),this.lineTo(e+n,t),this.lineTo(e+n,t+r),this.lineTo(e,t+r),this.lineTo(e,t),this.lineTo(e+n,t),this.lineTo(e,t)},d.prototype.fillRect=function(e,t,n,r){if(isNaN(e)||isNaN(t)||isNaN(n)||isNaN(r))throw QN.error(`jsPDF.context2d.fillRect: Invalid arguments`,arguments),Error(`Invalid arguments passed to jsPDF.context2d.fillRect`);if(!p.call(this)){var i={};this.lineCap!==`butt`&&(i.lineCap=this.lineCap,this.lineCap=`butt`),this.lineJoin!==`miter`&&(i.lineJoin=this.lineJoin,this.lineJoin=`miter`),this.beginPath(),this.rect(e,t,n,r),this.fill(),i.hasOwnProperty(`lineCap`)&&(this.lineCap=i.lineCap),i.hasOwnProperty(`lineJoin`)&&(this.lineJoin=i.lineJoin)}},d.prototype.strokeRect=function(e,t,n,r){if(isNaN(e)||isNaN(t)||isNaN(n)||isNaN(r))throw QN.error(`jsPDF.context2d.strokeRect: Invalid arguments`,arguments),Error(`Invalid arguments passed to jsPDF.context2d.strokeRect`);m.call(this)||(this.beginPath(),this.rect(e,t,n,r),this.stroke())},d.prototype.clearRect=function(e,t,n,r){if(isNaN(e)||isNaN(t)||isNaN(n)||isNaN(r))throw QN.error(`jsPDF.context2d.clearRect: Invalid arguments`,arguments),Error(`Invalid arguments passed to jsPDF.context2d.clearRect`);this.ignoreClearRect||(this.fillStyle=`#ffffff`,this.fillRect(e,t,n,r))},d.prototype.save=function(e){e=typeof e!=`boolean`||e;for(var t=this.pdf.internal.getCurrentPageInfo().pageNumber,n=0;n0||this.margin[1]>0||this.margin[2]>0||this.margin[3]>0};d.prototype.drawImage=function(e,t,n,r,i,a,o,l,u){var d=this.pdf.getImageProperties(e),f=1,p=1,m=1,_=1;r!==void 0&&l!==void 0&&(m=l/r,_=u/i,f=d.width/r*l/r,p=d.height/i*u/i),a===void 0&&(a=t,o=n,t=0,n=0),r!==void 0&&l===void 0&&(l=r,u=i),r===void 0&&l===void 0&&(l=d.width,u=d.height);var b=this.ctx.transform.decompose(),S=P(b.rotate.shx),C=new c,w=(C=(C=(C=C.multiply(b.translate)).multiply(b.skew)).multiply(b.scale)).applyToRectangle(new s(a-t*m,o-n*_,r*f,i*p));if(this.autoPaging){for(var T,E=g.call(this,w),D=[],O=0;Ok||jC||T0)){for(;c>=0;c--)if(!0!==i[c-1].close&&!0!==i[c-1].begin){i[c-1].deltas.push(n),i[c-1].abs.push(s);break}}break;case`bct`:n=[s.x1-a[o-1].x,s.y1-a[o-1].y,s.x2-a[o-1].x,s.y2-a[o-1].y,s.x-a[o-1].x,s.y-a[o-1].y],i[i.length-1].deltas.push(n);break;case`qct`:var l=a[o-1].x+2/3*(s.x1-a[o-1].x),u=a[o-1].y+2/3*(s.y1-a[o-1].y),d=s.x+2/3*(s.x1-s.x),f=s.y+2/3*(s.y1-s.y),h=s.x,g=s.y;n=[l-a[o-1].x,u-a[o-1].y,d-a[o-1].x,f-a[o-1].y,h-a[o-1].x,g-a[o-1].y],i[i.length-1].deltas.push(n);break;case`arc`:i.push({deltas:[],abs:[],arc:!0}),Array.isArray(i[i.length-1].abs)&&i[i.length-1].abs.push(s)}}r=t?null:e===`stroke`?`stroke`:`fill`;for(var _=!1,v=0;v=.01&&(r=this.pdf.internal.getFontSize(),this.pdf.setFontSize(r*e.scale),i=this.lineWidth,this.lineWidth=i*e.scale);var ee=this.autoPaging!==`text`;if(ee||L.y+L.h<=j){if(ee||L.y>=k&&L.x<=N){var R=ee?e.text:this.pdf.splitTextToSize(e.text,e.maxWidth||N-L.x)[0],te=v([JSON.parse(JSON.stringify(m))],this.posX+this.margin[3],-F+k+this.ctx.prevPageLastElemOffset)[0],z=ee&&(O>E||O=.01&&(this.pdf.setFontSize(r),this.lineWidth=i)}}else e.scale>=.01&&(r=this.pdf.internal.getFontSize(),this.pdf.setFontSize(r*e.scale),i=this.lineWidth,this.lineWidth=i*e.scale),this.pdf.text(e.text,d.x+this.posX,d.y+this.posY,{angle:e.angle,align:t,renderingMode:e.renderingMode,maxWidth:e.maxWidth}),e.scale>=.01&&(this.pdf.setFontSize(r),this.lineWidth=i)},k=function(e,t,i,a){i||=0,a||=0,this.pdf.internal.out(n(e+i)+` `+r(t+a)+` l`)},A=function(e,t,n){return this.pdf.lines(e,t,n,null,null)},j=function(e,n,r,o,s,c,l,u){this.pdf.internal.out([t(i(r+e)),t(a(o+n)),t(i(s+e)),t(a(c+n)),t(i(l+e)),t(a(u+n)),`c`].join(` `))},M=function(e,t,n,r){for(var i=2*Math.PI,a=Math.PI/2;t>n;)t-=i;var o=Math.abs(n-t);o1e-5;){var u=l+c*Math.min(o,a);s.push(N.call(this,e,l,u)),o-=Math.abs(u-l),l=u}return s},N=function(e,t,n){var r=(n-t)/2,i=e*Math.cos(r),a=e*Math.sin(r),o=i,s=-a,c=o*o+s*s,l=c+o*i+s*a,u=4/3*(Math.sqrt(2*c*l)-l)/(o*a-s*i),d=o-u*s,f=s+u*o,p=d,m=-f,h=r+t,g=Math.cos(h),_=Math.sin(h);return{x1:e*Math.cos(t),y1:e*Math.sin(t),x2:d*g-f*_,y2:d*_+f*g,x3:p*g-m*_,y3:p*_+m*g,x4:e*Math.cos(n),y4:e*Math.sin(n)}},P=function(e){return 180*e/Math.PI},F=function(e,t,n,r,i,a){var o=e+.5*(n-e),c=t+.5*(r-t),l=i+.5*(n-i),u=a+.5*(r-a),d=Math.min(e,i,o,l),f=Math.max(e,i,o,l),p=Math.min(t,a,c,u),m=Math.max(t,a,c,u);return new s(d,p,f-d,m-p)},I=function(e,t,n,r,i,a,o,c){var l,u,d,f,p,m,h,g,_,v,y,b,x,S,C=n-e,w=r-t,T=i-n,E=a-r,D=o-i,O=c-a;for(u=0;u<41;u++)_=(h=(d=e+(l=u/40)*C)+l*((p=n+l*T)-d))+l*(p+l*(i+l*D-p)-h),v=(g=(f=t+l*w)+l*((m=r+l*E)-f))+l*(m+l*(a+l*O-m)-g),u==0?(y=_,b=v,x=_,S=v):(y=Math.min(y,_),b=Math.min(b,v),x=Math.max(x,_),S=Math.max(S,v));return new s(Math.round(y),Math.round(b),Math.round(x-y),Math.round(S-b))},L=function(){if(this.prevLineDash||this.ctx.lineDash.length||this.ctx.lineDashOffset){var e,t,n=(e=this.ctx.lineDash,t=this.ctx.lineDashOffset,JSON.stringify({lineDash:e,lineDashOffset:t}));this.prevLineDash!==n&&(this.pdf.setLineDash(this.ctx.lineDash,this.ctx.lineDashOffset),this.prevLineDash=n)}}})(kP.API),function(e){var t=function(e){var t,n,r,i,a,o,s,c,l,u;for(/[^\x00-\xFF]/.test(e),n=[],r=0,i=(e+=t=`\0\0\0\0`.slice(e.length%4||4)).length;i>r;r+=4)(a=(e.charCodeAt(r)<<24)+(e.charCodeAt(r+1)<<16)+(e.charCodeAt(r+2)<<8)+e.charCodeAt(r+3))===0?n.push(122):(o=(a=((a=((a=((a=(a-(u=a%85))/85)-(l=a%85))/85)-(c=a%85))/85)-(s=a%85))/85)%85,n.push(o+33,s+33,c+33,l+33,u+33));return function(e,t){for(var n=t;n>0;n--)e.pop()}(n,t.length),String.fromCharCode.apply(String,n)+`~>`},n=function(e){var t,n,r,i,a,o=String,s=`length`,c=255,l=`charCodeAt`,u=`slice`,d=`replace`;for(e[u](-2),e=e[u](0,-2)[d](/\s/g,``)[d](`z`,`!!!!!`),r=[],i=0,a=(e+=t=`uuuuu`[u](e[s]%5||5))[s];a>i;i+=5)n=52200625*(e[l](i)-33)+614125*(e[l](i+1)-33)+7225*(e[l](i+2)-33)+85*(e[l](i+3)-33)+(e[l](i+4)-33),r.push(c&n>>24,c&n>>16,c&n>>8,c&n);return function(e,t){for(var n=t;n>0;n--)e.pop()}(r,t[s]),o.fromCharCode.apply(o,r)},r=function(e){return e.split(``).map(function(e){return(`0`+e.charCodeAt().toString(16)).slice(-2)}).join(``)+`>`},i=function(e){var t=new RegExp(/^([0-9A-Fa-f]{2})+$/);if((e=e.replace(/\s/g,``)).indexOf(`>`)!==-1&&(e=e.substr(0,e.indexOf(`>`))),e.length%2&&(e+=`0`),!1===t.test(e))return``;for(var n=``,r=0;rimport(`./html2canvas-B1jts0tz.js`).then(e=>l(e.default)),[])).catch(function(e){return Promise.reject(Error(`Could not load html2canvas: `+e))}).then(function(e){return e.default?e.default:e})}function n(){return(XN.DOMPurify?Promise.resolve(XN.DOMPurify):Gb(()=>import(`./purify.es-DlxR2Lg_.js`),[])).catch(function(e){return Promise.reject(Error(`Could not load dompurify: `+e))}).then(function(e){return e.default?e.default:e})}var r=function(e){var t=hD(e);return t===`undefined`?`undefined`:t===`string`||e instanceof String?`string`:t===`number`||e instanceof Number?`number`:t===`function`||e instanceof Function?`function`:e&&e.constructor===Array?`array`:e&&e.nodeType===1?`element`:t===`object`?`object`:`unknown`},i=function(e,t){var n=document.createElement(e);for(var r in t.className&&(n.className=t.className),t.innerHTML&&t.dompurify&&(n.innerHTML=t.dompurify.sanitize(t.innerHTML)),t.style)n.style[r]=t.style[r];return n},a=function e(t,n){for(var r=t.nodeType===3?document.createTextNode(t.nodeValue):t.cloneNode(!1),i=t.firstChild;i;i=i.nextSibling)!0!==n&&i.nodeType===1&&i.nodeName===`SCRIPT`||r.appendChild(e(i,n));return t.nodeType===1&&(t.nodeName===`CANVAS`?(r.width=t.width,r.height=t.height,r.getContext(`2d`).drawImage(t,0,0)):t.nodeName!==`TEXTAREA`&&t.nodeName!==`SELECT`||(r.value=t.value),r.addEventListener(`load`,function(){r.scrollTop=t.scrollTop,r.scrollLeft=t.scrollLeft},!0)),r},o=function e(t){var n=Object.assign(e.convert(Promise.resolve()),JSON.parse(JSON.stringify(e.template))),r=e.convert(Promise.resolve(),n);return(r=r.setProgress(1,e,1,[e])).set(t)};(o.prototype=Object.create(Promise.prototype)).constructor=o,o.convert=function(e,t){return e.__proto__=t||o.prototype,e},o.template={prop:{src:null,container:null,overlay:null,canvas:null,img:null,pdf:null,pageSize:null,callback:function(){}},progress:{val:0,state:null,n:0,stack:[]},opt:{filename:`file.pdf`,margin:[0,0,0,0],enableLinks:!0,x:0,y:0,html2canvas:{},jsPDF:{},backgroundColor:`transparent`}},o.prototype.from=function(e,t){return this.then(function(){switch(t||=function(e){switch(r(e)){case`string`:return`string`;case`element`:return e.nodeName.toLowerCase()===`canvas`?`canvas`:`element`;default:return`unknown`}}(e),t){case`string`:return this.then(n).then(function(t){return this.set({src:i(`div`,{innerHTML:e,dompurify:t})})});case`element`:return this.set({src:e});case`canvas`:return this.set({canvas:e});case`img`:return this.set({img:e});default:return this.error(`Unknown source type.`)}})},o.prototype.to=function(e){switch(e){case`container`:return this.toContainer();case`canvas`:return this.toCanvas();case`img`:return this.toImg();case`pdf`:return this.toPdf();default:return this.error(`Invalid target.`)}},o.prototype.toContainer=function(){return this.thenList([function(){return this.prop.src||this.error(`Cannot duplicate - no source HTML.`)},function(){return this.prop.pageSize||this.setPageSize()}]).then(function(){var e={position:`relative`,display:`inline-block`,width:(typeof this.opt.width!=`number`||isNaN(this.opt.width)||typeof this.opt.windowWidth!=`number`||isNaN(this.opt.windowWidth)?Math.max(this.prop.src.clientWidth,this.prop.src.scrollWidth,this.prop.src.offsetWidth):this.opt.windowWidth)+`px`,left:0,right:0,top:0,margin:`auto`,backgroundColor:this.opt.backgroundColor},t=a(this.prop.src,this.opt.html2canvas.javascriptEnabled);t.tagName===`BODY`&&(e.height=Math.max(document.body.scrollHeight,document.body.offsetHeight,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight)+`px`),this.prop.overlay=i(`div`,{className:`html2pdf__overlay`,style:{position:`fixed`,overflow:`hidden`,zIndex:1e3,left:`-100000px`,right:0,bottom:0,top:0}}),this.prop.container=i(`div`,{className:`html2pdf__container`,style:e}),this.prop.container.appendChild(t),this.prop.container.firstChild.appendChild(i(`div`,{style:{clear:`both`,border:`0 none transparent`,margin:0,padding:0,height:0}})),this.prop.container.style.float=`none`,this.prop.overlay.appendChild(this.prop.container),document.body.appendChild(this.prop.overlay),this.prop.container.firstChild.style.position=`relative`,this.prop.container.height=Math.max(this.prop.container.firstChild.clientHeight,this.prop.container.firstChild.scrollHeight,this.prop.container.firstChild.offsetHeight)+`px`})},o.prototype.toCanvas=function(){return this.thenList([function(){return document.body.contains(this.prop.container)||this.toContainer()}]).then(t).then(function(e){var t=Object.assign({},this.opt.html2canvas);return delete t.onrendered,e(this.prop.container,t)}).then(function(e){(this.opt.html2canvas.onrendered||function(){})(e),this.prop.canvas=e,document.body.removeChild(this.prop.overlay)})},o.prototype.toContext2d=function(){return this.thenList([function(){return document.body.contains(this.prop.container)||this.toContainer()}]).then(t).then(function(e){var t=this.opt.jsPDF,n=this.opt.fontFaces,r=typeof this.opt.width!=`number`||isNaN(this.opt.width)||typeof this.opt.windowWidth!=`number`||isNaN(this.opt.windowWidth)?1:this.opt.width/this.opt.windowWidth,i=Object.assign({async:!0,allowTaint:!0,scale:r,scrollX:this.opt.scrollX||0,scrollY:this.opt.scrollY||0,backgroundColor:`#ffffff`,imageTimeout:15e3,logging:!0,proxy:null,removeContainer:!0,foreignObjectRendering:!1,useCORS:!1},this.opt.html2canvas);if(delete i.onrendered,t.context2d.autoPaging=this.opt.autoPaging===void 0||this.opt.autoPaging,t.context2d.posX=this.opt.x,t.context2d.posY=this.opt.y,t.context2d.margin=this.opt.margin,t.context2d.fontFaces=n,n)for(var a=0;ac&&(s=l,l=c,c=s);else{if(e!==`l`&&e!==`landscape`)throw`Invalid orientation: `+e;e=`l`,c>l&&(s=l,l=c,c=s)}return{width:l,height:c,unit:t,k:i,orientation:e}},e.html=function(e,t){(t||={}).callback=t.callback||function(){},t.html2canvas=t.html2canvas||{},t.html2canvas.canvas=t.html2canvas.canvas||this.canvas,t.jsPDF=t.jsPDF||this,t.fontFaces=t.fontFaces?t.fontFaces.map(wF):null;var n=new o(t);return t.worker?n:n.from(e).doCallback()}}(kP.API),kP.API.addJS=function(e){var t,n,r=function(e){for(var t=``,n=0;n=0&&e[a]===`\\`;a--)i++;t+=i%2==0?`\\`+r:r}else t+=r}return t}(e);return this.internal.events.subscribe(`postPutResources`,function(){t=this.internal.newObject(),this.internal.out(`<<`),this.internal.out(`/Names [(EmbeddedJS) `+(t+1)+` 0 R]`),this.internal.out(`>>`),this.internal.out(`endobj`),n=this.internal.newObject(),this.internal.out(`<<`),this.internal.out(`/S /JavaScript`),this.internal.out(`/JS (`+r+`)`),this.internal.out(`>>`),this.internal.out(`endobj`)}),this.internal.events.subscribe(`putCatalog`,function(){t!==void 0&&n!==void 0&&this.internal.out(`/Names <>`)}),this},function(e){var t;e.events.push([`postPutResources`,function(){var e=this,n=/^(\d+) 0 obj$/;if(this.outline.root.children.length>0)for(var r=e.outline.render().split(/\r\n/),i=0;i> endobj`)}var f=e.internal.newObject();for(e.internal.write(`<< /Names [ `),i=0;i>`,`endobj`),t=e.internal.newObject(),e.internal.write(`<< /Dests `+f+` 0 R`),e.internal.write(`>>`,`endobj`)}}]),e.events.push([`putCatalog`,function(){var e=this;e.outline.root.children.length>0&&(e.internal.write(`/Outlines`,this.outline.makeRef(this.outline.root)),this.outline.createNamedDestinations&&e.internal.write(`/Names `+t+` 0 R`))}]),e.events.push([`initialized`,function(){var e=this;e.outline={createNamedDestinations:!1,root:{children:[]}},e.outline.add=function(e,t,n){var r={title:t,options:n,children:[]};return e??=this.root,e.children.push(r),r},e.outline.render=function(){return this.ctx={},this.ctx.val=``,this.ctx.pdf=e,this.genIds_r(this.root),this.renderRoot(this.root),this.renderItems(this.root),this.ctx.val},e.outline.genIds_r=function(t){t.id=e.internal.newObjectDeferred();for(var n=0;n0&&(this.line(`/First `+this.makeRef(e.children[0])),this.line(`/Last `+this.makeRef(e.children[e.children.length-1]))),this.line(`/Count `+this.count_r({count:0},e)),this.objEnd()},e.outline.renderItems=function(t){for(var n=this.ctx.pdf.internal.getVerticalCoordinateString,r=0;r0&&this.line(`/Prev `+this.makeRef(t.children[r-1])),r0&&(this.line(`/First `+this.makeRef(i.children[0])),this.line(`/Last `+this.makeRef(i.children[i.children.length-1])));var a=this.count=this.count_r({count:0},i);if(a>0&&this.line(`/Count `+a),i.options&&i.options.pageNumber){var o=e.internal.getPageInfo(i.options.pageNumber);this.line(`/Dest [`+o.objId+` 0 R /XYZ 0 `+n(0)+` 0]`)}this.objEnd()}for(var s=0;s> \r -endobj\r -`},e.outline.count_r=function(e,t){for(var n=0;n1){o=!0,c=void 0;var v=t*n;l=new Uint8Array(v);for(var y=new DataView(r.buffer),b=0;b536870912)throw Error(`Image dimensions exceed 512MB, which is too large.`);this.data=new Uint8Array(t);try{this[e]()}catch(e){QN.log(`bit decode error:`+e)}},QF.prototype.bit1=function(){var e,t=Math.ceil(this.width/8),n=t%4;for(e=this.height-1;e>=0;e--){for(var r=this.bottom_up?e:this.height-1-e,i=0;i>7-s&1];this.data[o+4*s]=c.blue,this.data[o+4*s+1]=c.green,this.data[o+4*s+2]=c.red,this.data[o+4*s+3]=255}n!==0&&(this.pos+=4-n)}},QF.prototype.bit4=function(){for(var e=Math.ceil(this.width/2),t=e%4,n=this.height-1;n>=0;n--){for(var r=this.bottom_up?n:this.height-1-n,i=0;i>4,c=15&a,l=this.palette[s];if(this.data[o]=l.blue,this.data[o+1]=l.green,this.data[o+2]=l.red,this.data[o+3]=255,2*i+1>=this.width)break;l=this.palette[c],this.data[o+4]=l.blue,this.data[o+4+1]=l.green,this.data[o+4+2]=l.red,this.data[o+4+3]=255}t!==0&&(this.pos+=4-t)}},QF.prototype.bit8=function(){for(var e=this.width%4,t=this.height-1;t>=0;t--){for(var n=this.bottom_up?t:this.height-1-t,r=0;r=0;n--){for(var r=this.bottom_up?n:this.height-1-n,i=0;i>5&t)/t*255|0,c=(a>>10&t)/t*255|0,l=a>>15?255:0,u=r*this.width*4+4*i;this.data[u]=c,this.data[u+1]=s,this.data[u+2]=o,this.data[u+3]=l}this.pos+=e}},QF.prototype.bit16=function(){for(var e=this.width%3,t=31,n=63,r=this.height-1;r>=0;r--){for(var i=this.bottom_up?r:this.height-1-r,a=0;a>5&n)/n*255|0,l=(o>>11)/t*255|0,u=i*this.width*4+4*a;this.data[u]=l,this.data[u+1]=c,this.data[u+2]=s,this.data[u+3]=255}this.pos+=e}},QF.prototype.bit24=function(){for(var e=this.height-1;e>=0;e--){for(var t=this.bottom_up?e:this.height-1-e,n=0;n=0;e--)for(var t=this.bottom_up?e:this.height-1-e,n=0;nr&&(i.push(e.slice(c,a)),s=0,c=a),s+=t[a],a++;return c!==a&&i.push(e.slice(c,a)),i},IF=function(e,t,n){n||={};var r,i,a,o,s,c,l,u=[],d=[u],f=n.textIndent||0,p=0,m=0,h=e.split(` `),g=NF.apply(this,[` `,n])[0];if(c=n.lineIndent===-1?h[0].length+2:n.lineIndent||0){var _=Array(c).join(` `),v=[];h.map(function(e){(e=e.split(/\s*\n/)).length>1?v=v.concat(e.map(function(e,t){return(t&&e.length?` -`:``)+e})):v.push(e[0])}),h=v,c=PF.apply(this,[_,n])}for(a=0,o=h.length;at||y){if(m>t){for(s=FF.apply(this,[r,i,t-(f+p),t]),u.push(s.shift()),u=[s.pop()];s.length;)d.push([s.shift()]);m=i.slice(r.length-(u[0]?u[0].length:0)).reduce(function(e,t){return e+t},0)}else u=[r];d.push(u),f=m+c,p=g}else u.push(r),f+=p+m,p=g}return l=c?function(e,t){return(t?_:``)+e.join(` `)}:function(e){return e.join(` `)},d.map(l)},MF.splitTextToSize=function(e,t,n){var r,i=(n||={}).fontSize||this.internal.getFontSize(),a=function(e){if(e.widths&&e.kerning)return{widths:e.widths,kerning:e.kerning};var t=this.internal.getFont(e.fontName,e.fontStyle),n=`Unicode`;return t.metadata[n]?{widths:t.metadata[n].widths||{0:1},kerning:t.metadata[n].kerning||{}}:{font:t.metadata,fontSize:this.internal.getFontSize(),charSpace:this.internal.getCharSpace()}}.call(this,n);r=Array.isArray(e)?e:String(e).split(/\r?\n/);var o=1*this.internal.scaleFactor*t/i;a.textIndent=n.textIndent?1*n.textIndent*this.internal.scaleFactor/i:0,a.lineIndent=n.lineIndent;var s,c,l=[];for(s=0,c=r.length;simport(`./index.es-Dm4MvI1O.js`),[])).catch(function(e){return Promise.reject(Error(`Could not load canvg: `+e))}).then(function(e){return e.default?e.default:e}).then(function(t){return t.fromString(l,e,u)},function(){return Promise.reject(Error(`Could not load canvg.`))}).then(function(e){return e.render(u)}).then(function(){d.addImage(c.toDataURL(`image/jpeg`,1),t,n,r,i,o,s)})},kP.API.putTotalPages=function(e){var t,n=0;parseInt(this.internal.getFont().id.substr(1),10)<15?(t=new RegExp(e,`g`),n=this.internal.getNumberOfPages()):(t=new RegExp(this.pdfEscape16(e,this.internal.getFont()),`g`),n=this.pdfEscape16(this.internal.getNumberOfPages()+``,this.internal.getFont()));for(var r=1;r<=this.internal.getNumberOfPages();r++)for(var i=0;i1){for(u=0;u>`)}),this.internal.viewerpreferences.isSubscribed=!0),this.internal.viewerpreferences.configuration=n,this},kP.API.addMetadata=function(e,t){return this.internal.__metadata__===void 0&&(this.internal.__metadata__={metadata:e,namespaceUri:t??`http://jspdf.default.namespaceuri/`,rawXml:typeof t==`boolean`&&t},this.internal.events.subscribe(`putCatalog`,tI),this.internal.events.subscribe(`postPutResources`,eI)),this},function(e){var t=e.API,n=t.pdfEscape16=function(e,t){for(var n,r=t.metadata.Unicode.widths,i=[``,`0`,`00`,`000`,`0000`],a=[``],o=0,s=e.length;o> def -/CMapName /Adobe-Identity-UCS def -/CMapType 2 def -1 begincodespacerange -<0000> -endcodespacerange`,r=[],o=0,s=(n=Object.keys(e).sort(function(e,t){return e-t})).length;o=100&&(a+=` -`+r.length+` beginbfchar -`+r.join(` -`)+` -endbfchar`,r=[]),e[t]!==void 0&&e[t]!==null&&typeof e[t].toString==`function`&&(i=(`0000`+e[t].toString(16)).slice(-4),t=(`0000`+(+t).toString(16)).slice(-4),r.push(`<`+t+`><`+i+`>`));return r.length&&(a+=` -`+r.length+` beginbfchar -`+r.join(` -`)+` -endbfchar -`),a+`endcmap -CMapName currentdict /CMap defineresource pop -end -end`};t.events.push([`putFont`,function(t){(function(t){var n=t.font,i=t.out,a=t.newObject,o=t.putStream;if(n.metadata instanceof e.API.TTFFont&&n.encoding===`Identity-H`){for(var s=n.metadata.Unicode.widths,c=n.metadata.subset.encode(n.metadata.glyIdsUsed,1),l=``,u=0;u>`),i(`endobj`);var m=a();i(`<<`),i(`/Type /Font`),i(`/BaseFont /`+CP(n.fontName)),i(`/FontDescriptor `+p+` 0 R`),i(`/W `+e.API.PDFObject.convert(s)),i(`/CIDToGIDMap /Identity`),i(`/DW 1000`),i(`/Subtype /CIDFontType2`),i(`/CIDSystemInfo`),i(`<<`),i(`/Supplement 0`),i(`/Registry (Adobe)`),i(`/Ordering (`+n.encoding+`)`),i(`>>`),i(`>>`),i(`endobj`),n.objectNumber=a(),i(`<<`),i(`/Type /Font`),i(`/Subtype /Type0`),i(`/ToUnicode `+f+` 0 R`),i(`/BaseFont /`+CP(n.fontName)),i(`/Encoding /`+n.encoding),i(`/DescendantFonts [`+m+` 0 R]`),i(`>>`),i(`endobj`),n.isAlreadyPutted=!0}})(t)}]),t.events.push([`putFont`,function(t){(function(t){var n=t.font,i=t.out,a=t.newObject,o=t.putStream;if(n.metadata instanceof e.API.TTFFont&&n.encoding===`WinAnsiEncoding`){for(var s=n.metadata.rawData,c=``,l=0;l>`),i(`endobj`),n.objectNumber=a();for(var p=0;p>`),i(`endobj`),n.isAlreadyPutted=!0}})(t)}]);var i=function(e){var t,r=e.text||``,i=e.x,a=e.y,o=e.options||{},s=e.mutex||{},c=s.pdfEscape,l=s.activeFontKey,u=s.fonts,d=l,f=``,p=0,m=``,h=u[d].encoding;if(u[d].encoding!==`Identity-H`)return{text:r,x:i,y:a,options:o,mutex:s};for(m=r,d=l,Array.isArray(r)&&(m=r[0]),p=0;p.<.[.].[.{.}.{.«.».«.‹.›.‹.⁅.⁆.⁅.⁽.⁾.⁽.₍.₎.₍.≤.≥.≤.〈.〉.〈.﹙.﹚.﹙.﹛.﹜.﹛.﹝.﹞.﹝.﹤.﹥.﹤`.split(`.`),h=new RegExp(/^([1-4|9]|1[0-9]|2[0-9]|3[0168]|4[04589]|5[012]|7[78]|159|16[0-9]|17[0-2]|21[569]|22[03489]|250)$/),g=!1,_=0;this.__bidiEngine__={};var v=function(e){var t=e.charCodeAt(),n=t>>8,r=p[n];return r===void 0?n===252||n===253?`AL`:h.test(n)?`L`:n===8?`R`:`N`:l[256*r+(255&t)]},y=function(e){for(var t,n=0;n=t.length||(c=o[s-1])!==`EN`&&c!==`AN`||(l=t[s+1])!==`EN`&&l!==`AN`?f=`N`:g&&(l=`AN`),f=l===c?l:`N`;break;case`ES`:f=(c=s>0?o[s-1]:`B`)===`EN`&&s+10&&o[s-1]===`EN`){f=`EN`;break}if(g){f=`N`;break}for(u=s+1,d=t.length;u=1425&&p<=2303||p===64286;if(c=t[u],m&&(c===`R`||c===`AL`)){f=`R`;break}}}f=s<1||(c=t[s-1])===`B`?`N`:o[s-1];break;case`B`:g=!1,n=!0,f=_;break;case`S`:r=!0,f=`N`}return f},x=function(e,t,n){var r=e.split(``);return n&&S(r,n,{hiLevel:_}),r.reverse(),t&&t.reverse(),r.join(``)},S=function(e,t,i){var a,o,s,c,l,p=-1,m=e.length,h=0,y=[],x=_?d:u,S=[];for(g=!1,n=!1,r=!1,o=0;o0)if(a===16){for(o=p;o-1){for(o=p;o=0&&e[i]===`WS`;i--)t[i]=_}}(S,t,m)},C=function(e,t,r,i,a){if(!(a.hiLevel=e){for(c=d+1;c=e;)c++;for(l=d,s=c-1;l=0&&(e[i]=m[r+1])}(r,n,i),C(2,r,t,n,i),C(1,r,t,n,i),r.join(``)};return this.__bidiEngine__.doBidiReorder=function(e,t,n){if(function(e,t){if(t)for(var n=0;n>16)&&(t=-(1+(65535^t))),this.italicAngle=+(t+`.`+n)):this.italicAngle=0,this.ascender=Math.round(this.ascender*this.scaleFactor),this.decender=Math.round(this.decender*this.scaleFactor),this.lineGap=Math.round(this.lineGap*this.scaleFactor),this.capHeight=this.os2.exists&&this.os2.capHeight||this.ascender,this.xHeight=this.os2.exists&&this.os2.xHeight||0,this.familyClass=(this.os2.exists&&this.os2.familyClass||0)>>8,this.isSerif=(i=this.familyClass)===1||i===2||i===3||i===4||i===5||i===7,this.isScript=this.familyClass===10,this.flags=0,this.post.isFixedPitch&&(this.flags|=1),this.isSerif&&(this.flags|=2),this.isScript&&(this.flags|=8),this.italicAngle!==0&&(this.flags|=64),this.flags|=32,!this.cmap.unicode)throw Error(`No unicode cmap for font`)},e.prototype.characterToGlyph=function(e){return this.cmap.unicode?.codeMap[e]||0},e.prototype.widthOfGlyph=function(e){var t;return t=1e3/this.head.unitsPerEm,this.hmtx.forGlyph(e).advance*t},e.prototype.widthOfString=function(e,t,n){var r,i,a,o;for(a=0,i=0,o=(e=``+e).length;0<=o?io;i=0<=o?++i:--i)r=e.charCodeAt(i),a+=this.widthOfGlyph(this.characterToGlyph(r))+1e3/t*n||0;return t/1e3*a},e.prototype.lineHeight=function(e,t){var n;return t??=!1,n=t?this.lineGap:0,(this.ascender+n-this.decender)/1e3*e},e}();var nI,rI=function(){function e(e){this.data=e??[],this.pos=0,this.length=this.data.length}return e.prototype.readByte=function(){return this.data[this.pos++]},e.prototype.writeByte=function(e){return this.data[this.pos++]=e},e.prototype.readUInt32=function(){return 16777216*this.readByte()+(this.readByte()<<16)+(this.readByte()<<8)+this.readByte()},e.prototype.writeUInt32=function(e){return this.writeByte(e>>>24&255),this.writeByte(e>>16&255),this.writeByte(e>>8&255),this.writeByte(255&e)},e.prototype.readInt32=function(){var e;return(e=this.readUInt32())>=2147483648?e-4294967296:e},e.prototype.writeInt32=function(e){return e<0&&(e+=4294967296),this.writeUInt32(e)},e.prototype.readUInt16=function(){return this.readByte()<<8|this.readByte()},e.prototype.writeUInt16=function(e){return this.writeByte(e>>8&255),this.writeByte(255&e)},e.prototype.readInt16=function(){var e;return(e=this.readUInt16())>=32768?e-65536:e},e.prototype.writeInt16=function(e){return e<0&&(e+=65536),this.writeUInt16(e)},e.prototype.readString=function(e){var t,n;for(n=[],t=0;0<=e?te;t=0<=e?++t:--t)n[t]=String.fromCharCode(this.readByte());return n.join(``)},e.prototype.writeString=function(e){var t,n,r;for(r=[],t=0,n=e.length;0<=n?tn;t=0<=n?++t:--t)r.push(this.writeByte(e.charCodeAt(t)));return r},e.prototype.readShort=function(){return this.readInt16()},e.prototype.writeShort=function(e){return this.writeInt16(e)},e.prototype.readLongLong=function(){var e,t,n,r,i,a,o,s;return e=this.readByte(),t=this.readByte(),n=this.readByte(),r=this.readByte(),i=this.readByte(),a=this.readByte(),o=this.readByte(),s=this.readByte(),128&e?-1*(72057594037927940*(255^e)+281474976710656*(255^t)+1099511627776*(255^n)+4294967296*(255^r)+16777216*(255^i)+65536*(255^a)+256*(255^o)+(255^s)+1):72057594037927940*e+281474976710656*t+1099511627776*n+4294967296*r+16777216*i+65536*a+256*o+s},e.prototype.writeLongLong=function(e){var t,n;return t=Math.floor(e/4294967296),n=4294967295&e,this.writeByte(t>>24&255),this.writeByte(t>>16&255),this.writeByte(t>>8&255),this.writeByte(255&t),this.writeByte(n>>24&255),this.writeByte(n>>16&255),this.writeByte(n>>8&255),this.writeByte(255&n)},e.prototype.readInt=function(){return this.readInt32()},e.prototype.writeInt=function(e){return this.writeInt32(e)},e.prototype.read=function(e){var t,n;for(t=[],n=0;0<=e?ne;n=0<=e?++n:--n)t.push(this.readByte());return t},e.prototype.write=function(e){var t,n,r,i;for(i=[],n=0,r=e.length;nr;n=0<=r?++n:--n)t={tag:e.readString(4),checksum:e.readInt(),offset:e.readInt(),length:e.readInt()},this.tables[t.tag]=t}return t.prototype.encode=function(t){var n,r,i,a,o,s,c,l,u,d,f,p,m;for(m in f=Object.keys(t).length,s=Math.log(2),u=16*Math.floor(Math.log(f)/s),a=Math.floor(u/s),l=16*f-u,(r=new rI).writeInt(this.scalarType),r.writeShort(f),r.writeShort(u),r.writeShort(a),r.writeShort(l),i=16*f,c=r.pos+i,o=null,p=[],t)for(d=t[m],r.writeString(m),r.writeInt(e(d)),r.writeInt(c),r.writeInt(d.length),p=p.concat(d),m===`head`&&(o=c),c+=d.length;c%4;)p.push(0),c++;return r.write(p),n=2981146554-e(r.data),r.pos=o+8,r.writeUInt32(n),r.data},e=function(e){var t,n,r,i;for(e=_I.call(e);e.length%4;)e.push(0);for(r=new rI(e),n=0,t=0,i=e.length;td;s=0<=d?++t:--t)n.push(e.readUInt16());return n}(),e.pos+=2,m=function(){var t,n;for(n=[],s=t=0;0<=d?td;s=0<=d?++t:--t)n.push(e.readUInt16());return n}(),c=function(){var t,n;for(n=[],s=t=0;0<=d?td;s=0<=d?++t:--t)n.push(e.readUInt16());return n}(),l=function(){var t,n;for(n=[],s=t=0;0<=d?td;s=0<=d?++t:--t)n.push(e.readUInt16());return n}(),r=(this.length-e.pos+this.offset)/2,o=function(){var t,n;for(n=[],s=t=0;0<=r?tr;s=0<=r?++t:--t)n.push(e.readUInt16());return n}(),s=g=0,v=i.length;g=h;n=p<=h?++_:--_)l[s]===0?a=n+c[s]:(a=o[l[s]/2+(n-p)-(d-s)]||0)!==0&&(a+=c[s]),this.codeMap[n]=65535&a}e.pos=u}return e.encode=function(e,t){var n,r,i,a,o,s,c,l,u,d,f,p,m,h,g,_,v,y,b,x,S,C,w,T,E,D,O,k,A,j,M,N,P,F,I,L,ee,R,te,z,B,V,ne,re,ie,ae;switch(k=new rI,a=Object.keys(e).sort(function(e,t){return e-t}),t){case`macroman`:for(m=0,h=function(){var e=[];for(p=0;p<256;++p)e.push(0);return e}(),_={0:0},i={},A=0,P=a.length;A=32768)for(s.push(0),x.push(2*(f.length+w-p)),r=N=E;E<=l?N<=l:N>=l;r=E<=l?++N:--N)f.push(n[r].new);else s.push(O-E),x.push(0)}for(k.writeUInt16(3),k.writeUInt16(1),k.writeUInt32(12),k.writeUInt16(4),k.writeUInt16(16+8*w+2*f.length),k.writeUInt16(0),k.writeUInt16(T),k.writeUInt16(C),k.writeUInt16(d),k.writeUInt16(S),B=0,L=u.length;Br;n=0<=r?++n:--n)t=new cI(e,this.offset),this.tables.push(t),t.isUnicode&&this.unicode==null&&(this.unicode=t);return!0},e.encode=function(e,t){var n,r;return t??=`macroman`,n=cI.encode(e,t),(r=new rI).writeUInt16(0),r.writeUInt16(1),n.table=r.data.concat(n.subtable),n},e}(),uI=function(){function e(){return e.__super__.constructor.apply(this,arguments)}return oI(e,nI),e.prototype.tag=`hhea`,e.prototype.parse=function(e){return e.pos=this.offset,this.version=e.readInt(),this.ascender=e.readShort(),this.decender=e.readShort(),this.lineGap=e.readShort(),this.advanceWidthMax=e.readShort(),this.minLeftSideBearing=e.readShort(),this.minRightSideBearing=e.readShort(),this.xMaxExtent=e.readShort(),this.caretSlopeRise=e.readShort(),this.caretSlopeRun=e.readShort(),this.caretOffset=e.readShort(),e.pos+=8,this.metricDataFormat=e.readShort(),this.numberOfMetrics=e.readUInt16()},e}(),dI=function(){function e(){return e.__super__.constructor.apply(this,arguments)}return oI(e,nI),e.prototype.tag=`OS/2`,e.prototype.parse=function(e){if(e.pos=this.offset,this.version=e.readUInt16(),this.averageCharWidth=e.readShort(),this.weightClass=e.readUInt16(),this.widthClass=e.readUInt16(),this.type=e.readShort(),this.ySubscriptXSize=e.readShort(),this.ySubscriptYSize=e.readShort(),this.ySubscriptXOffset=e.readShort(),this.ySubscriptYOffset=e.readShort(),this.ySuperscriptXSize=e.readShort(),this.ySuperscriptYSize=e.readShort(),this.ySuperscriptXOffset=e.readShort(),this.ySuperscriptYOffset=e.readShort(),this.yStrikeoutSize=e.readShort(),this.yStrikeoutPosition=e.readShort(),this.familyClass=e.readShort(),this.panose=function(){var t,n;for(n=[],t=0;t<10;++t)n.push(e.readByte());return n}(),this.charRange=function(){var t,n;for(n=[],t=0;t<4;++t)n.push(e.readInt());return n}(),this.vendorID=e.readString(4),this.selection=e.readShort(),this.firstCharIndex=e.readShort(),this.lastCharIndex=e.readShort(),this.version>0&&(this.ascent=e.readShort(),this.descent=e.readShort(),this.lineGap=e.readShort(),this.winAscent=e.readShort(),this.winDescent=e.readShort(),this.codePageRange=function(){var t,n;for(n=[],t=0;t<2;t=++t)n.push(e.readInt());return n}(),this.version>1))return this.xHeight=e.readShort(),this.capHeight=e.readShort(),this.defaultChar=e.readShort(),this.breakChar=e.readShort(),this.maxContext=e.readShort()},e}(),fI=function(){function e(){return e.__super__.constructor.apply(this,arguments)}return oI(e,nI),e.prototype.tag=`post`,e.prototype.parse=function(e){var t,n,r;switch(e.pos=this.offset,this.format=e.readInt(),this.italicAngle=e.readInt(),this.underlinePosition=e.readShort(),this.underlineThickness=e.readShort(),this.isFixedPitch=e.readInt(),this.minMemType42=e.readInt(),this.maxMemType42=e.readInt(),this.minMemType1=e.readInt(),this.maxMemType1=e.readInt(),this.format){case 65536:case 196608:break;case 131072:var i;for(n=e.readUInt16(),this.glyphNameIndex=[],i=0;0<=n?in;i=0<=n?++i:--i)this.glyphNameIndex.push(e.readUInt16());for(this.names=[],r=[];e.posn;i=0<=n?++t:--t)r.push(e.readUInt32());return r}.call(this)}},e}(),pI=function(e,t){this.raw=e,this.length=e.length,this.platformID=t.platformID,this.encodingID=t.encodingID,this.languageID=t.languageID},mI=function(){function e(){return e.__super__.constructor.apply(this,arguments)}return oI(e,nI),e.prototype.tag=`name`,e.prototype.parse=function(e){var t,n,r,i,a,o,s,c,l,u,d;for(e.pos=this.offset,e.readShort(),t=e.readShort(),o=e.readShort(),n=[],i=0;0<=t?it;i=0<=t?++i:--i)n.push({platformID:e.readShort(),encodingID:e.readShort(),languageID:e.readShort(),nameID:e.readShort(),length:e.readShort(),offset:this.offset+o+e.readShort()});for(s={},i=l=0,u=n.length;lo;t=0<=o?++t:--t)this.metrics.push({advance:e.readUInt16(),lsb:e.readInt16()});for(r=this.file.maxp.numGlyphs-this.file.hhea.numberOfMetrics,this.leftSideBearings=function(){var n,i;for(i=[],t=n=0;0<=r?nr;t=0<=r?++n:--n)i.push(e.readInt16());return i}(),this.widths=function(){var e,t,n,r;for(r=[],e=0,t=(n=this.metrics).length;er;t=0<=r?++a:--a)s.push(this.widths.push(n));return s},e.prototype.forGlyph=function(e){return e in this.metrics?this.metrics[e]:{advance:this.metrics[this.metrics.length-1].advance,lsb:this.leftSideBearings[e-this.metrics.length]}},e}(),_I=[].slice,vI=function(){function e(){return e.__super__.constructor.apply(this,arguments)}return oI(e,nI),e.prototype.tag=`glyf`,e.prototype.parse=function(){return this.cache={}},e.prototype.glyphFor=function(e){var t,n,r,i,a,o,s,c,l,u;return e in this.cache?this.cache[e]:(i=this.file.loca,t=this.file.contents,n=i.indexOf(e),(r=i.lengthOf(e))===0?this.cache[e]=null:(t.pos=this.offset+n,a=(o=new rI(t.read(r))).readShort(),c=o.readShort(),u=o.readShort(),s=o.readShort(),l=o.readShort(),this.cache[e]=a===-1?new bI(o,c,u,s,l):new yI(o,a,c,u,s,l),this.cache[e]))},e.prototype.encode=function(e,t,n){var r,i,a,o,s;for(a=[],i=[],o=0,s=t.length;o0&&(r+=s)}for(var c=Array(4*n.length),l=0;l>8,c[4*l+1]=(16711680&n[l])>>16,c[4*l]=(4278190080&n[l])>>24;return c},e}(),SI=function(){function e(e){this.font=e,this.subset={},this.unicodes={},this.next=33}return e.prototype.generateCmap=function(){var e,t,n,r,i;for(t in r=this.font.cmap.tables[0].codeMap,e={},i=this.subset)n=i[t],e[t]=r[n];return e},e.prototype.glyphsFor=function(e){var t,n,r,i,a,o,s;for(r={},a=0,o=e.length;a0)for(i in s=this.glyphsFor(t))n=s[i],r[i]=n;return r},e.prototype.encode=function(e,t){var n,r,i,a,o,s,c,l,u,d,f,p,m,h,g;for(r in n=lI.encode(this.generateCmap(),`unicode`),a=this.glyphsFor(e),f={0:0},g=n.charMap)f[(s=g[r]).old]=s.new;for(p in d=n.maxGlyphID,a)p in f||(f[p]=d++);return l=function(e){var t,n;for(t in n={},e)n[e[t]]=t;return n}(f),u=Object.keys(l).sort(function(e,t){return e-t}),m=function(){var e,t,n;for(n=[],e=0,t=u.length;e>`),a.join(` -`)}return``+n},t}();function CI(e,t,n,r,i){r||={};var a=1.15,o=i.internal.scaleFactor,s=i.internal.getFontSize()/o,c=s*(i.getLineHeightFactor?i.getLineHeightFactor():a),l=/\r\n|\r|\n/g,u=``,d=1;if((r.valign===`middle`||r.valign===`bottom`||r.halign===`center`||r.halign===`right`)&&(u=typeof e==`string`?e.split(l):e,d=u.length||1),n+=s*(2-a),r.valign===`middle`?n-=d/2*c:r.valign===`bottom`&&(n-=d*c),r.halign===`center`||r.halign===`right`){var f=s;if(r.halign===`center`&&(f*=.5),u&&d>=1){for(var p=0;p0,r=t||t===0;return n&&r?`DF`:n?`S`:r?`F`:null}function PI(e,t){if(e||=t,Array.isArray(e)){if(e.length>=4)return{top:e[0],right:e[1],bottom:e[2],left:e[3]};if(e.length===3)return{top:e[0],right:e[1],bottom:e[2],left:e[1]};if(e.length===2)return{top:e[0],right:e[1],bottom:e[0],left:e[1]};e=e.length===1?e[0]:t}return typeof e==`object`?(typeof e.vertical==`number`&&(e.top=e.vertical,e.bottom=e.vertical),typeof e.horizontal==`number`&&(e.right=e.horizontal,e.left=e.horizontal),{left:e.left??t,top:e.top??t,right:e.right??t,bottom:e.bottom??t}):(typeof e!=`number`&&(e=t),{top:e,right:e,bottom:e,left:e})}function FI(e,t){var n=PI(t.settings.margin,0);return e.pageSize().width-(n.left+n.right)}function II(e,t,n,r,i){var a={},o=96/72,s=RI(t,function(e){return i.getComputedStyle(e).backgroundColor});s!=null&&(a.fillColor=s);var c=RI(t,function(e){return i.getComputedStyle(e).color});c!=null&&(a.textColor=c);var l=BI(r,n);l&&(a.cellPadding=l);var u=`borderTopColor`,d=o*n,f=r.borderTopWidth;if(r.borderBottomWidth===f&&r.borderRightWidth===f&&r.borderLeftWidth===f){var p=(parseFloat(f)||0)/d;p&&(a.lineWidth=p)}else a.lineWidth={top:(parseFloat(r.borderTopWidth)||0)/d,right:(parseFloat(r.borderRightWidth)||0)/d,bottom:(parseFloat(r.borderBottomWidth)||0)/d,left:(parseFloat(r.borderLeftWidth)||0)/d},a.lineWidth.top||(a.lineWidth.right?u=`borderRightColor`:a.lineWidth.bottom?u=`borderBottomColor`:a.lineWidth.left&&(u=`borderLeftColor`));var m=RI(t,function(e){return i.getComputedStyle(e)[u]});m!=null&&(a.lineColor=m);var h=[`left`,`right`,`center`,`justify`];h.indexOf(r.textAlign)!==-1&&(a.halign=r.textAlign),h=[`middle`,`bottom`,`top`],h.indexOf(r.verticalAlign)!==-1&&(a.valign=r.verticalAlign);var g=parseInt(r.fontSize||``);isNaN(g)||(a.fontSize=g/o);var _=LI(r);_&&(a.fontStyle=_);var v=(r.fontFamily||``).toLowerCase();return e.indexOf(v)!==-1&&(a.font=v),a}function LI(e){var t=``;return(e.fontWeight===`bold`||e.fontWeight===`bolder`||parseInt(e.fontWeight)>=700)&&(t=`bold`),(e.fontStyle===`italic`||e.fontStyle===`oblique`)&&(t+=`italic`),t}function RI(e,t){var n=zI(e,t);if(!n)return null;var r=n.match(/^rgba?\((\d+),\s*(\d+),\s*(\d+)(?:,\s*(\d*\.?\d*))?\)$/);if(!r||!Array.isArray(r))return null;var i=[parseInt(r[1]),parseInt(r[2]),parseInt(r[3])];return parseInt(r[4])===0||isNaN(i[0])||isNaN(i[1])||isNaN(i[2])?null:i}function zI(e,t){var n=t(e);return n===`rgba(0, 0, 0, 0)`||n===`transparent`||n===`initial`||n===`inherit`?e.parentElement==null?null:zI(e.parentElement,t):n}function BI(e,t){var n=[e.paddingTop,e.paddingRight,e.paddingBottom,e.paddingLeft],r=96/(72/t),i=(parseInt(e.lineHeight)-parseInt(e.fontSize))/t/2,a=PI(n.map(function(e){return parseInt(e||`0`)/r}),0);return i>a.top&&(a.top=i),i>a.bottom&&(a.bottom=i),a}function VI(e,t,n,r,i){r===void 0&&(r=!1),i===void 0&&(i=!1);var a=typeof t==`string`?n.document.querySelector(t):t,o=Object.keys(e.getFontList()),s=e.scaleFactor(),c=[],l=[],u=[];if(!a)return console.error(`Html table could not be found with input: `,t),{head:c,body:l,foot:u};for(var d=0;d0&&(i||d.display!==`none`))return o}function UI(e){var t=e.cloneNode(!0);return t.innerHTML=t.innerHTML.replace(/\n/g,``).replace(/ +/g,` `),t.innerHTML=t.innerHTML.split(//).map(function(e){return e.trim()}).join(` -`),t.innerText||t.textContent||``}function WI(e,t,n){for(var r=0,i=[e,t,n];r0?`_${a}`:``);var s={dataKey:o};i.push(s)}}),i}var $I=function(){function e(e,t,n){this.table=t,this.pageNumber=t.pageNumber,this.settings=t.settings,this.cursor=n,this.doc=e.getDocument()}return e}(),eL=function(e){DI(t,e);function t(t,n,r,i,a,o){var s=e.call(this,t,n,o)||this;return s.cell=r,s.row=i,s.column=a,s.section=i.section,s}return t}($I),tL=function(){function e(e,t){this.pageNumber=1,this.id=e.id,this.settings=e.settings,this.styles=e.styles,this.hooks=e.hooks,this.columns=t.columns,this.head=t.head,this.body=t.body,this.foot=t.foot}return e.prototype.getHeadHeight=function(e){return this.head.reduce(function(t,n){return t+n.getMaxCellHeight(e)},0)},e.prototype.getFootHeight=function(e){return this.foot.reduce(function(t,n){return t+n.getMaxCellHeight(e)},0)},e.prototype.allRows=function(){return this.head.concat(this.body).concat(this.foot)},e.prototype.callCellHooks=function(e,t,n,r,i,a){for(var o=0,s=t;o1:!1}).length>0},e.prototype.canEntireRowFit=function(e,t){return this.getMaxCellHeight(t)<=e},e.prototype.getMinimumRowHeight=function(e,t){var n=this;return e.reduce(function(e,r){var i=n.cells[r.index];if(!i)return 0;var a=t.getLineHeight(i.styles.fontSize),o=i.padding(`vertical`)+a;return o>e?o:e},0)},e}(),rL=function(){function e(e,t,n){this.contentHeight=0,this.contentWidth=0,this.wrappedWidth=0,this.minReadableWidth=0,this.minWidth=0,this.width=0,this.height=0,this.x=0,this.y=0,this.styles=t,this.section=n,this.raw=e;var r=e;typeof e==`object`&&e&&!Array.isArray(e)?(this.rowSpan=e.rowSpan||1,this.colSpan=e.colSpan||1,r=e.content??e,e._element&&(this.raw=e._element)):(this.rowSpan=1,this.colSpan=1);var i=r==null?``:``+r,a=/\r\n|\r|\n/g;this.text=i.split(a)}return e.prototype.getTextPos=function(){var e;if(this.styles.valign===`top`)e=this.y+this.padding(`top`);else if(this.styles.valign===`bottom`)e=this.y+this.height-this.padding(`bottom`);else{var t=this.height-this.padding(`vertical`);e=this.y+t/2+this.padding(`top`)}var n;if(this.styles.halign===`right`)n=this.x+this.width-this.padding(`right`);else if(this.styles.halign===`center`){var r=this.width-this.padding(`horizontal`);n=this.x+r/2+this.padding(`left`)}else n=this.x+this.padding(`left`);return{x:n,y:e}},e.prototype.getContentHeight=function(e,t){t===void 0&&(t=1.15);var n=(Array.isArray(this.text)?this.text.length:1)*(this.styles.fontSize/e*t)+this.padding(`vertical`);return Math.max(n,this.styles.minCellHeight)},e.prototype.padding=function(e){var t=PI(this.styles.cellPadding,0);return e===`vertical`?t.top+t.bottom:e===`horizontal`?t.left+t.right:t[e]},e}(),iL=function(){function e(e,t,n){this.wrappedWidth=0,this.minReadableWidth=0,this.minWidth=0,this.width=0,this.dataKey=e,this.raw=t,this.index=n}return e.prototype.getMaxCustomCellWidth=function(e){for(var t=0,n=0,r=e.allRows();n.1/e.scaleFactor()&&(i=i<1?i:Math.round(i),console.log(`Of the table content, ${i} units width could not fit page`)),lL(t),uL(t,e),cL(t)}function oL(e,t){var n=e.scaleFactor(),r=t.settings.horizontalPageBreak,i=FI(e,t);t.allRows().forEach(function(a){for(var o=0,s=t.columns;oi?(l.minWidth=i,l.wrappedWidth=i):(l.minWidth=l.contentWidth,l.wrappedWidth=l.contentWidth);else{var f=10/n;l.minWidth=l.styles.minCellWidth||f,l.wrappedWidth=l.contentWidth,l.minWidth>l.wrappedWidth&&(l.wrappedWidth=l.minWidth)}}}}),t.allRows().forEach(function(e){for(var n=0,r=t.columns;n1&&!i.minWidth&&(i.minWidth=a.minWidth),a.colSpan>1&&!i.wrappedWidth&&(i.wrappedWidth=a.minWidth))}})}function sL(e,t,n){for(var r=t,i=e.reduce(function(e,t){return e+t.wrappedWidth},0),a=0;an(e):!0});d.length&&(t=sL(d,t,n))}return t}function cL(e){for(var t={},n=1,r=e.allRows(),i=0;i1)n--,delete a.cells[c.index];else if(l)l.cell.height+=a.height,n=l.cell.colSpan,delete a.cells[c.index],l.left--,l.left<=1&&delete t[c.index];else{var u=a.cells[c.index];if(!u)continue;if(u.height=a.height,u.rowSpan>1){var d=r.length-i,f=u.rowSpan>d?d:u.rowSpan;t[c.index]={cell:u,left:f,row:a}}}}}function lL(e){for(var t=e.allRows(),n=0;n1&&e.columns[s+1])a+=c.width,delete r.cells[c.index];else if(i){var l=i;delete r.cells[c.index],i=null,l.width=c.width+a}else{var l=r.cells[c.index];if(!l)continue;if(o=l.colSpan,a=0,l.colSpan>1){i=l,a+=c.width;continue}l.width=c.width+a}}}function uL(e,t){for(var n={count:0,height:0},r=0,i=e.allRows();r1&&n.count*n.height0&&n.height>f&&(f=n.height),f>a.height&&(a.height=f)}}n.count--}}function dL(e,t,n,r,i){return e.map(function(e){return fL(e,t,n,r,i)})}function fL(e,t,n,r,i){var a=1e4*r.scaleFactor();if(t=Math.ceil(t*a)/a,t>=jI(e,n,r))return e;for(;t0?n:null}function _L(e,t){if(e===`head`){if(typeof t==`object`)return t.header||null;if(typeof t==`string`||typeof t==`number`)return t}else if(e===`foot`&&typeof t==`object`)return t.footer;return null}function vL(e){return e.map(function(e,t){return new iL(typeof e==`object`?e.dataKey??t:t,e,t)})}function yL(e,t,n,r,i,a,o){var s=AI(r),c;e===`head`?c=i.headStyles:e===`body`?c=i.bodyStyles:e===`foot`&&(c=i.footStyles);var l=GI({},s.table,s[e],i.styles,c),u=i.columnStyles[t.dataKey]||i.columnStyles[t.index]||{},d=e===`body`?u:{},f=e===`body`&&n%2==0?GI({},s.alternateRow,i.alternateRowStyles):{};return GI(GI({},kI(a),l,f,d),o)}function bL(e,t,n){n===void 0&&(n={});var r=FI(e,t),i=new Map,a=[],o=[],s=[];Array.isArray(t.settings.horizontalPageBreakRepeat)?s=t.settings.horizontalPageBreakRepeat:(typeof t.settings.horizontalPageBreakRepeat==`string`||typeof t.settings.horizontalPageBreakRepeat==`number`)&&(s=[t.settings.horizontalPageBreakRepeat]),s.forEach(function(e){var n=t.columns.find(function(t){return t.dataKey===e||t.index===e});n&&!i.has(n.index)&&(i.set(n.index,!0),a.push(n.index),o.push(t.columns[n.index]),r-=n.wrappedWidth)});for(var c=!0,l=n?.start??0;l=u)c=!1,a.push(l),o.push(t.columns[l]),r-=u;else break;l++}return{colIndexes:a,columns:o,lastIndex:l-1}}function xL(e,t){for(var n=[],r=0;rl.pageSize().height)&&(LL(l),a.y=i.top),t.callWillDrawPageHooks(l,a);var u=GI({},a);t.startPageNumber=l.pageNumber(),n.horizontalPageBreak?CL(l,t,u,a):(l.applyStyles(l.userStyles),(n.showHead===`firstPage`||n.showHead===`everyPage`)&&t.head.forEach(function(e){return ML(l,t,e,a,t.columns)}),l.applyStyles(l.userStyles),t.body.forEach(function(e,n){jL(l,t,e,n===t.body.length-1,u,a,t.columns)}),l.applyStyles(l.userStyles),(n.showFoot===`lastPage`||n.showFoot===`everyPage`)&&t.foot.forEach(function(e){return ML(l,t,e,a,t.columns)})),MI(l,t,u,a),t.callEndPageHooks(l,a),t.finalY=a.y,e.lastAutoTable=t,l.applyStyles(l.userStyles)}function CL(e,t,n,r){var i=xL(e,t);if(t.settings.horizontalPageBreakBehaviour===`afterAllRows`)i.forEach(function(i,a){e.applyStyles(e.userStyles),a>0?IL(e,t,n,r,i.columns,!0):wL(e,t,r,i.columns),TL(e,t,n,r,i.columns),DL(e,t,r,i.columns)});else for(var a=-1,o=i[0],s=function(){var s=a;if(o){e.applyStyles(e.userStyles);var c=o.columns;a>=0?IL(e,t,n,r,c,!0):wL(e,t,r,c),s=EL(e,t,a+1,r,c),DL(e,t,r,c)}var l=s-a;i.slice(1).forEach(function(i){e.applyStyles(e.userStyles),IL(e,t,n,r,i.columns,!0),EL(e,t,a+1,r,i.columns,l),DL(e,t,r,i.columns)}),a=s};ad&&(u.text=l.text.splice(d,l.text.length));var f=r.scaleFactor(),p=r.getLineHeightFactor();l.contentHeight=l.getContentHeight(f,p),l.contentHeight>=t&&(l.contentHeight=t,u.styles.minCellHeight-=t),l.contentHeight>e.height&&(e.height=l.contentHeight),u.contentHeight=u.getContentHeight(f,p),u.contentHeight>a&&(a=u.contentHeight),i[c.index]=u}}var m=new nL(e.raw,-1,e.section,i,!0);m.height=a;for(var h=0,g=n.columns;ho)return console.log(`Will not be able to print row ${t.index} correctly since it's minimum height is larger than page height`),!0;if(!c)return!1;var l=t.hasRowSpan(r.columns);return t.getMaxCellHeight(r.columns)>o?(l&&console.log(`The content of row ${t.index} will not be drawn correctly since drawing rows with a height larger than the page height and has cells with rowspans is not supported.`),!0):!(l||r.settings.rowPageBreak===`avoid`)}function jL(e,t,n,r,i,a,o){var s=FL(e,t,r,a);if(n.canEntireRowFit(s,o))ML(e,t,n,a,o);else if(AL(e,n,s,t)){var c=kL(n,s,t,e);ML(e,t,n,a,o),IL(e,t,i,a,o),jL(e,t,c,r,i,a,o)}else IL(e,t,i,a,o),jL(e,t,n,r,i,a,o)}function ML(e,t,n,r,i){r.x=t.settings.margin.left;for(var a=0,o=i;a`u`)return console.error(`Cannot run autoTableHtmlToJson in non browser environment`),null;var n=VI(new TI(this),e,window,t,!1),r=n.head,i=n.body;return{columns:r[0]?.map(function(e){return e.content})||[],rows:i,data:i}}}function zL(e,t){SL(e,pL(e,KI(e,t)))}try{if(typeof window<`u`&&window){var BL=window,VL=BL.jsPDF||BL.jspdf?.jsPDF;VL&&RL(VL)}}catch(e){console.error(`Could not apply autoTable plugin`,e)}function HL(e,t){let n=new kP({orientation:`portrait`,unit:`mm`,format:`a4`}),r=n.internal.pageSize.getWidth();n.setFillColor(15,23,42),n.rect(0,0,r,40,`F`),n.setTextColor(255,255,255),n.setFont(`helvetica`,`bold`),n.setFontSize(18),n.text(`HYDRO BUILDER`,15,18),n.setFont(`helvetica`,`normal`),n.setFontSize(10),n.setTextColor(148,163,184),n.text(`BILL OF MATERIALS`,15,24),n.setTextColor(255,255,255),n.setFont(`helvetica`,`bold`),n.setFontSize(11);let i=t.length>30?t.substring(0,27)+`...`:t;n.text(i,r-15,18,{align:`right`}),n.setFont(`helvetica`,`normal`),n.setFontSize(9),n.setTextColor(148,163,184),n.text(`Date: ${new Date().toLocaleDateString()}`,r-15,24,{align:`right`});let a=50;if(n.setFillColor(248,250,252),n.setDrawColor(226,232,240),n.rect(15,a,r-30,22,`FD`),n.setFont(`helvetica`,`normal`),n.setFontSize(8),n.setTextColor(100,116,139),n.text(`TOTAL ESTIMATED COST`,23,a+7),n.text(`PART COUNT`,80,a+7),n.text(`LINE ITEMS`,130,a+7),n.setFont(`helvetica`,`bold`),n.setFontSize(12),n.setTextColor(14,116,144),n.text(oD(e.totalCost),23,a+15),n.setTextColor(15,23,42),n.text(`${e.partCount} parts`,80,a+15),n.text(`${e.lines.length} items`,130,a+15),e.cutLists.length>0){let t=e.cutLists.reduce((e,t)=>e+t.sticksToBuy,0);n.setFont(`helvetica`,`normal`),n.setFontSize(8),n.setTextColor(100,116,139),n.text(`PVC STICKS (10 FT)`,165,a+7),n.setFont(`helvetica`,`bold`),n.setFontSize(12),n.setTextColor(15,23,42),n.text(`${t} sticks`,165,a+15)}a+=32,n.setFont(`helvetica`,`bold`),n.setFontSize(11),n.setTextColor(15,23,42),n.text(`Line Items`,15,a),a+=4;let o=[`Category`,`Description`,`Spec`,`Qty`,`Unit`,`Unit Cost`,`Total`],s=e.lines.map(e=>[e.category,e.description,e.spec??``,e.qty,e.unit,oD(e.unitCost),oD(e.totalCost)+(e.estimated?` (est.)`:``)]);if(zL(n,{startY:a,head:[o],body:s,margin:{left:15,right:15},theme:`grid`,styles:{fontSize:8,cellPadding:2,font:`helvetica`},headStyles:{fillColor:[39,39,42],textColor:[255,255,255],fontStyle:`bold`},columnStyles:{0:{cellWidth:25},1:{cellWidth:50},2:{cellWidth:40},3:{cellWidth:12,halign:`center`},4:{cellWidth:15,halign:`center`},5:{cellWidth:18,halign:`right`},6:{cellWidth:20,halign:`right`}}}),a=n.lastAutoTable.finalY+10,e.cutLists.length>0){a>n.internal.pageSize.getHeight()-40&&(n.addPage(),a=20),n.setFont(`helvetica`,`bold`),n.setFontSize(11),n.setTextColor(15,23,42),n.text(`PVC Cut Lists (10 ft / 120 in sticks)`,15,a),a+=4;let t=[`Diameter`,`Stick`,`Cuts (in)`,`Used`,`Leftover`],r=[];for(let t of e.cutLists)for(let e of t.sticks){let n=e.cuts.map(e=>aD(e)).join(`, `);r.push([iD(t.diameterIn),`Stick ${e.index}`,n,aD(e.usedIn),aD(e.leftoverIn)])}zL(n,{startY:a,head:[t],body:r,margin:{left:15,right:15},theme:`grid`,styles:{fontSize:8,cellPadding:2,font:`helvetica`},headStyles:{fillColor:[71,85,105],textColor:[255,255,255],fontStyle:`bold`},columnStyles:{0:{cellWidth:25},1:{cellWidth:25},2:{cellWidth:90},3:{cellWidth:20,halign:`right`},4:{cellWidth:20,halign:`right`}}}),a=n.lastAutoTable.finalY+10}a>n.internal.pageSize.getHeight()-50&&(n.addPage(),a=20),n.setFont(`helvetica`,`bold`),n.setFontSize(11),n.setTextColor(15,23,42),n.text(`Category Subtotals`,15,a),a+=4;let c=[`Category`,`Subtotal`],l=e.categories.map(e=>[e.name,oD(e.subtotal)]);l.push([`Grand Total (Estimated)`,oD(e.totalCost)]),zL(n,{startY:a,head:[c],body:l,margin:{left:15,right:r-100},theme:`grid`,styles:{fontSize:8,cellPadding:2.5,font:`helvetica`},headStyles:{fillColor:[15,23,42],textColor:[255,255,255],fontStyle:`bold`},columnStyles:{0:{cellWidth:50},1:{cellWidth:35,halign:`right`,fontStyle:`bold`}},didParseCell:e=>{e.row.index===l.length-1&&(e.cell.styles.fillColor=[241,245,249],e.cell.styles.fontStyle=`bold`,e.column.index===1&&(e.cell.styles.textColor=[14,116,144]))}});let u=t.replace(/[^a-z0-9-_ ]/gi,``).trim()||`hydro-system`;n.save(`${u}-bom.pdf`)}var UL={POSITION:[`byte`,`byte normalized`,`unsigned byte`,`unsigned byte normalized`,`short`,`short normalized`,`unsigned short`,`unsigned short normalized`],NORMAL:[`byte normalized`,`short normalized`],TANGENT:[`byte normalized`,`short normalized`],TEXCOORD:[`byte`,`byte normalized`,`unsigned byte`,`short`,`short normalized`,`unsigned short`]},WL=class{constructor(){this.textureUtils=null,this.pluginCallbacks=[],this.register(function(e){return new dR(e)}),this.register(function(e){return new fR(e)}),this.register(function(e){return new gR(e)}),this.register(function(e){return new _R(e)}),this.register(function(e){return new vR(e)}),this.register(function(e){return new yR(e)}),this.register(function(e){return new pR(e)}),this.register(function(e){return new mR(e)}),this.register(function(e){return new hR(e)}),this.register(function(e){return new bR(e)}),this.register(function(e){return new xR(e)}),this.register(function(e){return new SR(e)}),this.register(function(e){return new CR(e)}),this.register(function(e){return new wR(e)})}register(e){return this.pluginCallbacks.indexOf(e)===-1&&this.pluginCallbacks.push(e),this}unregister(e){return this.pluginCallbacks.indexOf(e)!==-1&&this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(e),1),this}setTextureUtils(e){return this.textureUtils=e,this}parse(e,t,n,r){let i=new uR,a=[];for(let e=0,t=this.pluginCallbacks.length;e4?n=e.array[i*e.itemSize+t]:(t===0?n=e.getX(i):t===1?n=e.getY(i):t===2?n=e.getZ(i):t===3&&(n=e.getW(i)),e.normalized===!0&&(n=jn.normalize(n,e.array))),r.min[t]=Math.min(r.min[t],n),r.max[t]=Math.max(r.max[t],n)}return r}function oR(e){return Math.ceil(e/4)*4}function sR(e,t=0){let n=oR(e.byteLength);if(n!==e.byteLength){let r=new Uint8Array(n);if(r.set(new Uint8Array(e)),t!==0)for(let i=e.byteLength;i`u`&&typeof OffscreenCanvas<`u`?new OffscreenCanvas(1,1):document.createElement(`canvas`)}function lR(e,t){if(typeof OffscreenCanvas<`u`&&e instanceof OffscreenCanvas){let n;return t===`image/jpeg`?n=.92:t===`image/webp`&&(n=.8),e.convertToBlob({type:t,quality:n})}else return new Promise(n=>e.toBlob(n,t))}var uR=class{constructor(){this.plugins=[],this.options={},this.pending=[],this.buffers=[],this.byteOffset=0,this.buffers=[],this.nodeMap=new Map,this.skins=[],this.extensionsUsed={},this.extensionsRequired={},this.uids=new Map,this.uid=0,this.json={asset:{version:`2.0`,generator:`THREE.GLTFExporter r184`}},this.cache={meshes:new Map,attributes:new Map,attributesNormalized:new Map,materials:new Map,textures:new Map,images:new Map},this.textureUtils=null}setPlugins(e){this.plugins=e}setTextureUtils(e){this.textureUtils=e}async writeAsync(e,t,n={}){this.options=Object.assign({binary:!1,trs:!1,onlyVisible:!0,maxTextureSize:1/0,animations:[],includeCustomExtensions:!1},n),this.options.animations.length>0&&(this.options.trs=!0),await this.processInputAsync(e),await Promise.all(this.pending);let r=this,i=r.buffers,a=r.json;n=r.options;let o=r.extensionsUsed,s=r.extensionsRequired,c=new Blob(i,{type:`application/octet-stream`}),l=Object.keys(o),u=Object.keys(s);if(l.length>0&&(a.extensionsUsed=l),u.length>0&&(a.extensionsRequired=u),a.buffers&&a.buffers.length>0&&(a.buffers[0].byteLength=c.size),n.binary===!0){let e=new FileReader;e.readAsArrayBuffer(c),e.onloadend=function(){let n=sR(e.result),r=new DataView(new ArrayBuffer($L));r.setUint32(0,n.byteLength,!0),r.setUint32(4,tR,!0);let i=sR(rR(JSON.stringify(a)),32),o=new DataView(new ArrayBuffer($L));o.setUint32(0,i.byteLength,!0),o.setUint32(4,eR,!0);let s=new ArrayBuffer(XL),c=new DataView(s);c.setUint32(0,ZL,!0),c.setUint32(4,QL,!0);let l=XL+o.byteLength+i.byteLength+r.byteLength+n.byteLength;c.setUint32(8,l,!0);let u=new Blob([s,o,i,r,n],{type:`application/octet-stream`}),d=new FileReader;d.readAsArrayBuffer(u),d.onloadend=function(){t(d.result)}}}else if(a.buffers&&a.buffers.length>0){let e=new FileReader;e.readAsDataURL(c),e.onloadend=function(){let n=e.result;a.buffers[0].uri=n,t(a)}}else t(a)}serializeUserData(e,t){if(Object.keys(e.userData).length===0)return;let n=this.options,r=this.extensionsUsed;try{let i=JSON.parse(JSON.stringify(e.userData));if(n.includeCustomExtensions&&i.gltfExtensions){t.extensions===void 0&&(t.extensions={});for(let e in i.gltfExtensions)t.extensions[e]=i.gltfExtensions[e],r[e]=!0;delete i.gltfExtensions}Object.keys(i).length>0&&(t.extras=i)}catch(t){console.warn(`THREE.GLTFExporter: userData of '`+e.name+`' won't be serialized because of JSON.stringify error - `+t.message)}}getUID(e,t=!1){if(this.uids.has(e)===!1){let t=new Map;t.set(!0,this.uid++),t.set(!1,this.uid++),this.uids.set(e,t)}return this.uids.get(e).get(t)}isNormalizedNormalAttribute(e){if(this.cache.attributesNormalized.has(e))return!1;let t=new q;for(let n=0,r=e.count;n5e-4)return!1;return!0}createNormalizedNormalAttribute(e){let t=this.cache;if(t.attributesNormalized.has(e))return t.attributesNormalized.get(e);let n=e.clone(),r=new q;for(let e=0,t=n.count;e4?r=e.array[i*e.itemSize+n]:(n===0?r=e.getX(i):n===1?r=e.getY(i):n===2?r=e.getZ(i):n===3&&(r=e.getW(i)),e.normalized===!0&&(r=jn.normalize(r,e.array))),t===GL.FLOAT?l.setFloat32(u,r,!0):t===GL.INT?l.setInt32(u,r,!0):t===GL.UNSIGNED_INT?l.setUint32(u,r,!0):t===GL.SHORT?l.setInt16(u,r,!0):t===GL.UNSIGNED_SHORT?l.setUint16(u,r,!0):t===GL.BYTE?l.setInt8(u,r):t===GL.UNSIGNED_BYTE&&l.setUint8(u,r),u+=o}u%s!==0&&(u+=s-u%s)}let d={buffer:this.processBuffer(l.buffer),byteOffset:this.byteOffset,byteLength:c};return i!==void 0&&(d.target=i),i===GL.ARRAY_BUFFER&&(d.byteStride=s),this.byteOffset+=c,a.bufferViews.push(d),{id:a.bufferViews.length-1,byteLength:0}}processBufferViewImage(e){let t=this,n=t.json;return n.bufferViews||=[],new Promise(function(r){let i=new FileReader;i.readAsArrayBuffer(e),i.onloadend=function(){let e=sR(i.result),a={buffer:t.processBuffer(e),byteOffset:t.byteOffset,byteLength:e.byteLength};t.byteOffset+=e.byteLength,r(n.bufferViews.push(a)-1)}})}processAccessor(e,t,n,r){let i=this.json,a={1:`SCALAR`,2:`VEC2`,3:`VEC3`,4:`VEC4`,9:`MAT3`,16:`MAT4`},o;if(e.array.constructor===Float32Array)o=GL.FLOAT;else if(e.array.constructor===Int32Array)o=GL.INT;else if(e.array.constructor===Uint32Array)o=GL.UNSIGNED_INT;else if(e.array.constructor===Int16Array)o=GL.SHORT;else if(e.array.constructor===Uint16Array)o=GL.UNSIGNED_SHORT;else if(e.array.constructor===Int8Array)o=GL.BYTE;else if(e.array.constructor===Uint8Array)o=GL.UNSIGNED_BYTE;else throw Error(`THREE.GLTFExporter: Unsupported bufferAttribute component type: `+e.array.constructor.name);if(n===void 0&&(n=0),(r===void 0||r===1/0)&&(r=e.count),r===0)return null;let s=aR(e,n,r),c;t!==void 0&&(c=e===t.index?GL.ELEMENT_ARRAY_BUFFER:GL.ARRAY_BUFFER);let l=this.processBufferView(e,o,n,r,c),u={bufferView:l.id,byteOffset:l.byteOffset,componentType:o,count:r,max:s.max,min:s.min,type:a[e.itemSize]};return e.normalized===!0&&(u.normalized=!0),i.accessors||=[],i.accessors.push(u)-1}processImage(e,t,n,r=`image/png`){if(e!==null){let i=this,a=i.cache,o=i.json,s=i.options,c=i.pending;a.images.has(e)||a.images.set(e,{});let l=a.images.get(e),u=r+`:flipY/`+n.toString();if(l[u]!==void 0)return l[u];o.images||=[];let d={mimeType:r},f=cR();f.width=Math.min(e.width,s.maxTextureSize),f.height=Math.min(e.height,s.maxTextureSize);let p=f.getContext(`2d`,{willReadFrequently:!0});if(n===!0&&(p.translate(0,f.height),p.scale(1,-1)),e.data!==void 0){t!==1023&&console.error(`GLTFExporter: Only RGBAFormat is supported.`,t),(e.width>s.maxTextureSize||e.height>s.maxTextureSize)&&console.warn(`GLTFExporter: Image size is bigger than maxTextureSize`,e);let n=new Uint8ClampedArray(e.height*e.width*4);for(let t=0;ti.processBufferViewImage(e)).then(e=>{d.bufferView=e})):d.uri=Wn.getDataURL(f,r);let m=o.images.push(d)-1;return l[u]=m,m}else throw Error(`THREE.GLTFExporter: No valid image data found. Unable to process texture.`)}processSampler(e){let t=this.json;t.samplers||=[];let n={magFilter:qL[e.magFilter],minFilter:qL[e.minFilter],wrapS:qL[e.wrapS],wrapT:qL[e.wrapT]};return t.samplers.push(n)-1}async processTextureAsync(e){let t=this.options,n=this.cache,r=this.json;if(n.textures.has(e))return n.textures.get(e);r.textures||=[],e instanceof ds&&(e=await this.decompressTextureAsync(e,t.maxTextureSize));let i=e.userData.mimeType,a=this.processImage(e.image,e.format,e.flipY,i),o={sampler:this.processSampler(e)};i===`image/webp`?(o.extensions=o.extensions||{},o.extensions.EXT_texture_webp={source:a},this.extensionsUsed.EXT_texture_webp=!0,this.extensionsRequired.EXT_texture_webp=!0):o.source=a,e.name&&(o.name=e.name),await this._invokeAllAsync(async function(t){t.writeTexture&&await t.writeTexture(e,o)});let s=r.textures.push(o)-1;return n.textures.set(e,s),s}async processMaterialAsync(e){let t=this.cache,n=this.json;if(t.materials.has(e))return t.materials.get(e);if(e.isShaderMaterial)return console.warn(`GLTFExporter: THREE.ShaderMaterial not supported.`),null;n.materials||=[];let r={pbrMetallicRoughness:{}};e.isMeshStandardMaterial!==!0&&e.isMeshBasicMaterial!==!0&&console.warn(`GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.`);let i=e.color.toArray().concat([e.opacity]);if(nR(i,[1,1,1,1])||(r.pbrMetallicRoughness.baseColorFactor=i),e.isMeshStandardMaterial?(r.pbrMetallicRoughness.metallicFactor=e.metalness,r.pbrMetallicRoughness.roughnessFactor=e.roughness):(r.pbrMetallicRoughness.metallicFactor=0,r.pbrMetallicRoughness.roughnessFactor=1),e.metalnessMap||e.roughnessMap){let t=await this.buildMetalRoughTextureAsync(e.metalnessMap,e.roughnessMap),n={index:await this.processTextureAsync(t),texCoord:t.channel};this.applyTextureTransform(n,t),r.pbrMetallicRoughness.metallicRoughnessTexture=n}if(e.map){let t={index:await this.processTextureAsync(e.map),texCoord:e.map.channel};this.applyTextureTransform(t,e.map),r.pbrMetallicRoughness.baseColorTexture=t}if(e.emissive){let t=e.emissive;if(Math.max(t.r,t.g,t.b)>0&&(r.emissiveFactor=e.emissive.toArray()),e.emissiveMap){let t={index:await this.processTextureAsync(e.emissiveMap),texCoord:e.emissiveMap.channel};this.applyTextureTransform(t,e.emissiveMap),r.emissiveTexture=t}}if(e.normalMap){let t={index:await this.processTextureAsync(e.normalMap),texCoord:e.normalMap.channel};e.normalScale&&e.normalScale.x!==1&&(t.scale=e.normalScale.x),this.applyTextureTransform(t,e.normalMap),r.normalTexture=t}if(e.aoMap){let t={index:await this.processTextureAsync(e.aoMap),texCoord:e.aoMap.channel};e.aoMapIntensity!==1&&(t.strength=e.aoMapIntensity),this.applyTextureTransform(t,e.aoMap),r.occlusionTexture=t}e.transparent?r.alphaMode=`BLEND`:e.alphaTest>0&&(r.alphaMode=`MASK`,r.alphaCutoff=e.alphaTest),e.side===2&&(r.doubleSided=!0),e.name!==``&&(r.name=e.name),this.serializeUserData(e,r),await this._invokeAllAsync(async function(t){t.writeMaterialAsync&&await t.writeMaterialAsync(e,r)});let a=n.materials.push(r)-1;return t.materials.set(e,a),a}async processMeshAsync(e){let t=this.cache,n=this.json,r=[e.geometry.uuid];if(Array.isArray(e.material))for(let t=0,n=e.material.length;t0){let n=[],r=[],i={};if(e.morphTargetDictionary!==void 0)for(let t in e.morphTargetDictionary)i[e.morphTargetDictionary[t]]=t;for(let o=0;o0&&(s.extras={},s.extras.targetNames=r)}let m=Array.isArray(e.material);if(m&&a.groups.length===0)return null;let h=!1;if(m&&a.index===null){let e=[];for(let t=0,n=a.attributes.position.count;t0&&(n.targets=u),a.index!==null){let r=this.getUID(a.index);(_[e].start!==void 0||_[e].count!==void 0)&&(r+=`:`+_[e].start+`:`+_[e].count),t.attributes.has(r)?n.indices=t.attributes.get(r):(n.indices=this.processAccessor(a.index,a,_[e].start,_[e].count),t.attributes.set(r,n.indices)),n.indices===null&&delete n.indices}let r=await this.processMaterialAsync(g[_[e].materialIndex]);r!==null&&(n.material=r),l.push(n)}h===!0&&a.setIndex(null),s.primitives=l,n.meshes||=[],await this._invokeAllAsync(function(t){t.writeMesh&&t.writeMesh(e,s)});let v=n.meshes.push(s)-1;return t.meshes.set(i,v),v}detectMeshQuantization(e,t){if(this.extensionsUsed[KL])return;let n;switch(t.array.constructor){case Int8Array:n=`byte`;break;case Uint8Array:n=`unsigned byte`;break;case Int16Array:n=`short`;break;case Uint16Array:n=`unsigned short`;break;default:return}t.normalized&&(n+=` normalized`);let r=e.split(`_`,1)[0];UL[r]&&UL[r].includes(n)&&(this.extensionsUsed[KL]=!0,this.extensionsRequired[KL]=!0)}processCamera(e){let t=this.json;t.cameras||=[];let n=e.isOrthographicCamera,r={type:n?`orthographic`:`perspective`};return n?r.orthographic={xmag:e.right*2,ymag:e.top*2,zfar:e.far<=0?.001:e.far,znear:e.near<0?0:e.near}:r.perspective={aspectRatio:e.aspect,yfov:jn.degToRad(e.fov),zfar:e.far<=0?.001:e.far,znear:e.near<0?0:e.near},e.name!==``&&(r.name=e.type),t.cameras.push(r)-1}processAnimation(e,t){let n=this.json,r=this.nodeMap;n.animations||=[],e=WL.Utils.mergeMorphTargetTracks(e.clone(),t);let i=e.tracks,a=[],o=[];for(let e=0;e0){let t=[];for(let r=0,i=e.children.length;r0&&(i.children=t)}return await this._invokeAllAsync(function(t){t.writeNode&&t.writeNode(e,i)}),a}async _processNodeWithPivotAsync(e){let t=this.json,n=this.options,r=this.nodeMap,i=e.pivot,a={},o=e.quaternion.toArray(),s=[e.position.x+i.x,e.position.y+i.y,e.position.z+i.z],c=e.scale.toArray();nR(o,[0,0,0,1])||(a.rotation=o),nR(s,[0,0,0])||(a.translation=s),nR(c,[1,1,1])||(a.scale=c),a.extras={pivot:i.toArray()},e.name!==``&&(a.name=String(e.name)),this.serializeUserData(e,a);let l=t.nodes.push(a)-1;r.set(e,l);let u={},d=[-i.x,-i.y,-i.z];if(nR(d,[0,0,0])||(u.translation=d),e.isMesh||e.isLine||e.isPoints){let t=await this.processMeshAsync(e);t!==null&&(u.mesh=t)}else e.isCamera&&(u.camera=this.processCamera(e));e.isSkinnedMesh&&this.skins.push(e);let f=[t.nodes.push(u)-1];if(e.children.length>0){let t=[];for(let r=0,i=e.children.length;r0&&(u.children=t)}return a.children=f,await this._invokeAllAsync(function(t){t.writeNode&&t.writeNode(e,a)}),l}async processSceneAsync(e){let t=this.json,n=this.options;t.scenes||(t.scenes=[],t.scene=0);let r={};e.name!==``&&(r.name=e.name),t.scenes.push(r);let i=[];for(let t=0,r=e.children.length;t0&&(r.nodes=i),this.serializeUserData(e,r)}async processObjectsAsync(e){let t=new Vr;t.name=`AuxScene`;for(let n=0;n0&&await this.processObjectsAsync(n);for(let e=0;e0&&(a.range=e.distance)):e.isSpotLight&&(a.type=`spot`,e.distance>0&&(a.range=e.distance),a.spot={},a.spot.innerConeAngle=(1-e.penumbra)*e.angle,a.spot.outerConeAngle=e.angle),e.decay!==void 0&&e.decay!==2&&console.warn(`THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, and expects light.decay=2.`),e.target&&(e.target.parent!==e||e.target.position.x!==0||e.target.position.y!==0||e.target.position.z!==-1)&&console.warn(`THREE.GLTFExporter: Light direction may be lost. For best results, make light.target a child of the light with position 0,0,-1.`),i[this.name]||(r.extensions=r.extensions||{},r.extensions[this.name]={lights:[]},i[this.name]=!0);let o=r.extensions[this.name].lights;o.push(a),t.extensions=t.extensions||{},t.extensions[this.name]={light:o.length-1}}},fR=class{constructor(e){this.writer=e,this.name=`KHR_materials_unlit`}async writeMaterialAsync(e,t){if(!e.isMeshBasicMaterial)return;let n=this.writer.extensionsUsed;t.extensions=t.extensions||{},t.extensions[this.name]={},n[this.name]=!0,t.pbrMetallicRoughness.metallicFactor=0,t.pbrMetallicRoughness.roughnessFactor=.9}},pR=class{constructor(e){this.writer=e,this.name=`KHR_materials_clearcoat`}async writeMaterialAsync(e,t){if(!e.isMeshPhysicalMaterial||e.clearcoat===0)return;let n=this.writer,r=n.extensionsUsed,i={};if(i.clearcoatFactor=e.clearcoat,e.clearcoatMap){let t={index:await n.processTextureAsync(e.clearcoatMap),texCoord:e.clearcoatMap.channel};n.applyTextureTransform(t,e.clearcoatMap),i.clearcoatTexture=t}if(i.clearcoatRoughnessFactor=e.clearcoatRoughness,e.clearcoatRoughnessMap){let t={index:await n.processTextureAsync(e.clearcoatRoughnessMap),texCoord:e.clearcoatRoughnessMap.channel};n.applyTextureTransform(t,e.clearcoatRoughnessMap),i.clearcoatRoughnessTexture=t}if(e.clearcoatNormalMap){let t={index:await n.processTextureAsync(e.clearcoatNormalMap),texCoord:e.clearcoatNormalMap.channel};e.clearcoatNormalScale.x!==1&&(t.scale=e.clearcoatNormalScale.x),n.applyTextureTransform(t,e.clearcoatNormalMap),i.clearcoatNormalTexture=t}t.extensions=t.extensions||{},t.extensions[this.name]=i,r[this.name]=!0}},mR=class{constructor(e){this.writer=e,this.name=`KHR_materials_dispersion`}async writeMaterialAsync(e,t){if(!e.isMeshPhysicalMaterial||e.dispersion===0)return;let n=this.writer.extensionsUsed,r={};r.dispersion=e.dispersion,t.extensions=t.extensions||{},t.extensions[this.name]=r,n[this.name]=!0}},hR=class{constructor(e){this.writer=e,this.name=`KHR_materials_iridescence`}async writeMaterialAsync(e,t){if(!e.isMeshPhysicalMaterial||e.iridescence===0)return;let n=this.writer,r=n.extensionsUsed,i={};if(i.iridescenceFactor=e.iridescence,e.iridescenceMap){let t={index:await n.processTextureAsync(e.iridescenceMap),texCoord:e.iridescenceMap.channel};n.applyTextureTransform(t,e.iridescenceMap),i.iridescenceTexture=t}if(i.iridescenceIor=e.iridescenceIOR,i.iridescenceThicknessMinimum=e.iridescenceThicknessRange[0],i.iridescenceThicknessMaximum=e.iridescenceThicknessRange[1],e.iridescenceThicknessMap){let t={index:await n.processTextureAsync(e.iridescenceThicknessMap),texCoord:e.iridescenceThicknessMap.channel};n.applyTextureTransform(t,e.iridescenceThicknessMap),i.iridescenceThicknessTexture=t}t.extensions=t.extensions||{},t.extensions[this.name]=i,r[this.name]=!0}},gR=class{constructor(e){this.writer=e,this.name=`KHR_materials_transmission`}async writeMaterialAsync(e,t){if(!e.isMeshPhysicalMaterial||e.transmission===0)return;let n=this.writer,r=n.extensionsUsed,i={};if(i.transmissionFactor=e.transmission,e.transmissionMap){let t={index:await n.processTextureAsync(e.transmissionMap),texCoord:e.transmissionMap.channel};n.applyTextureTransform(t,e.transmissionMap),i.transmissionTexture=t}t.extensions=t.extensions||{},t.extensions[this.name]=i,r[this.name]=!0}},_R=class{constructor(e){this.writer=e,this.name=`KHR_materials_volume`}async writeMaterialAsync(e,t){if(!e.isMeshPhysicalMaterial||e.transmission===0)return;let n=this.writer,r=n.extensionsUsed,i={};if(i.thicknessFactor=e.thickness,e.thicknessMap){let t={index:await n.processTextureAsync(e.thicknessMap),texCoord:e.thicknessMap.channel};n.applyTextureTransform(t,e.thicknessMap),i.thicknessTexture=t}e.attenuationDistance!==1/0&&(i.attenuationDistance=e.attenuationDistance),i.attenuationColor=e.attenuationColor.toArray(),t.extensions=t.extensions||{},t.extensions[this.name]=i,r[this.name]=!0}},vR=class{constructor(e){this.writer=e,this.name=`KHR_materials_ior`}async writeMaterialAsync(e,t){if(!e.isMeshPhysicalMaterial||e.ior===1.5)return;let n=this.writer.extensionsUsed,r={};r.ior=e.ior,t.extensions=t.extensions||{},t.extensions[this.name]=r,n[this.name]=!0}},yR=class{constructor(e){this.writer=e,this.name=`KHR_materials_specular`}async writeMaterialAsync(e,t){if(!e.isMeshPhysicalMaterial||e.specularIntensity===1&&e.specularColor.equals(YL)&&!e.specularIntensityMap&&!e.specularColorMap)return;let n=this.writer,r=n.extensionsUsed,i={};if(e.specularIntensityMap){let t={index:await n.processTextureAsync(e.specularIntensityMap),texCoord:e.specularIntensityMap.channel};n.applyTextureTransform(t,e.specularIntensityMap),i.specularTexture=t}if(e.specularColorMap){let t={index:await n.processTextureAsync(e.specularColorMap),texCoord:e.specularColorMap.channel};n.applyTextureTransform(t,e.specularColorMap),i.specularColorTexture=t}i.specularFactor=e.specularIntensity,i.specularColorFactor=e.specularColor.toArray(),t.extensions=t.extensions||{},t.extensions[this.name]=i,r[this.name]=!0}},bR=class{constructor(e){this.writer=e,this.name=`KHR_materials_sheen`}async writeMaterialAsync(e,t){if(!e.isMeshPhysicalMaterial||e.sheen==0)return;let n=this.writer,r=n.extensionsUsed,i={};if(e.sheenRoughnessMap){let t={index:await n.processTextureAsync(e.sheenRoughnessMap),texCoord:e.sheenRoughnessMap.channel};n.applyTextureTransform(t,e.sheenRoughnessMap),i.sheenRoughnessTexture=t}if(e.sheenColorMap){let t={index:await n.processTextureAsync(e.sheenColorMap),texCoord:e.sheenColorMap.channel};n.applyTextureTransform(t,e.sheenColorMap),i.sheenColorTexture=t}i.sheenRoughnessFactor=e.sheenRoughness,i.sheenColorFactor=e.sheenColor.toArray(),t.extensions=t.extensions||{},t.extensions[this.name]=i,r[this.name]=!0}},xR=class{constructor(e){this.writer=e,this.name=`KHR_materials_anisotropy`}async writeMaterialAsync(e,t){if(!e.isMeshPhysicalMaterial||e.anisotropy==0)return;let n=this.writer,r=n.extensionsUsed,i={};if(e.anisotropyMap){let t={index:await n.processTextureAsync(e.anisotropyMap)};n.applyTextureTransform(t,e.anisotropyMap),i.anisotropyTexture=t}i.anisotropyStrength=e.anisotropy,i.anisotropyRotation=e.anisotropyRotation,t.extensions=t.extensions||{},t.extensions[this.name]=i,r[this.name]=!0}},SR=class{constructor(e){this.writer=e,this.name=`KHR_materials_emissive_strength`}async writeMaterialAsync(e,t){if(!e.isMeshStandardMaterial||e.emissiveIntensity===1)return;let n=this.writer.extensionsUsed,r={};r.emissiveStrength=e.emissiveIntensity,t.extensions=t.extensions||{},t.extensions[this.name]=r,n[this.name]=!0}},CR=class{constructor(e){this.writer=e,this.name=`EXT_materials_bump`}async writeMaterialAsync(e,t){if(!e.isMeshStandardMaterial||e.bumpScale===1&&!e.bumpMap)return;let n=this.writer,r=n.extensionsUsed,i={};if(e.bumpMap){let t={index:await n.processTextureAsync(e.bumpMap),texCoord:e.bumpMap.channel};n.applyTextureTransform(t,e.bumpMap),i.bumpTexture=t}i.bumpFactor=e.bumpScale,t.extensions=t.extensions||{},t.extensions[this.name]=i,r[this.name]=!0}},wR=class{constructor(e){this.writer=e,this.name=`EXT_mesh_gpu_instancing`}writeNode(e,t){if(!e.isInstancedMesh)return;let n=this.writer,r=e,i=new Float32Array(r.count*3),a=new Float32Array(r.count*4),o=new Float32Array(r.count*3),s=new J,c=new q,l=new Mn,u=new q;for(let e=0;ee.times[e.times.length-1]){if(Math.abs(e.times[e.times.length-1]-t)t){i.set(e.times.slice(0,c+1),0),i[c+1]=t,i.set(e.times.slice(c+1),c+2),a.set(e.values.slice(0,(c+1)*r),0),a.set(o.evaluate(t),(c+1)*r),a.set(e.values.slice((c+1)*r),(c+2)*r),s=c+1;break}}return e.times=i,e.values=a,s},mergeMorphTargetTracks:function(e,t){let n=[],r={},i=e.tracks;for(let e=0;e{if(e.name===`part-body-mesh`){let n=e.clone(!0),r=[];n.traverse(e=>{e instanceof La&&!e.castShadow&&r.push(e)});for(let e of r)e.parent?.remove(e);e.updateWorldMatrix(!0,!1),n.position.set(0,0,0),n.rotation.set(0,0,0),n.scale.set(1,1,1),n.updateMatrix(),n.applyMatrix4(e.matrixWorld),t.add(n)}}),t}function DR(e,t,n){let r=new Blob([e],{type:t}),i=URL.createObjectURL(r),a=document.createElement(`a`);a.href=i,a.download=n,document.body.appendChild(a),a.click(),document.body.removeChild(a),URL.revokeObjectURL(i)}function OR(e,t){let n=ER(e);new WL().parse(n,e=>{DR(typeof e==`string`?e:JSON.stringify(e,null,2),`application/json`,`${t.replace(/\s+/g,`_`)||`hydro_system`}.gltf`)},e=>{console.error(`Failed to export glTF:`,e)},{binary:!1})}function kR(e,t){let n=ER(e);DR(new TR().parse(n),`text/plain`,`${t.replace(/\s+/g,`_`)||`hydro_system`}.obj`)}function AR({onClose:e}){let t=Q(e=>e.parts),n=Q(e=>e.activeRoomId),r=Q(e=>e.projectName),i=Q(e=>e.scene),a=(0,v.useMemo)(()=>Object.values(t).filter(e=>e.roomId===n),[t,n]),o=(0,v.useMemo)(()=>WE(a),[a]),[s,c]=(0,v.useState)(!1),l=(0,v.useRef)(null);(0,v.useEffect)(()=>{let t=t=>{t.key===`Escape`&&e()};return window.addEventListener(`keydown`,t),()=>{window.removeEventListener(`keydown`,t),l.current&&clearTimeout(l.current)}},[e]);let u=async()=>{try{await navigator.clipboard.writeText(pD(o)),c(!0),l.current&&clearTimeout(l.current),l.current=setTimeout(()=>c(!1),1500)}catch{}},d=()=>{let e=window.open(``,`_blank`,`width=720,height=900`);if(!e)return;let t=e=>e.replace(/&/g,`&`).replace(//g,`>`);e.document.write(`${t(r)} — Bill of Materials
`+t(pD(o))+`
`),e.document.close(),e.focus(),e.print()},f=(0,v.useMemo)(()=>{let e=new Map;for(let t of o.lines){let n=e.get(t.category);n?n.push(t):e.set(t.category,[t])}return[...e.entries()]},[o]),p=e=>o.categories.find(t=>t.name===e)?.subtotal??0;return(0,Z.jsxs)(`div`,{className:`fixed inset-0 z-[100] flex justify-end`,children:[(0,Z.jsx)(`div`,{className:`absolute inset-0 bg-black/60 backdrop-blur-[2px]`,onClick:e,"aria-hidden":!0}),(0,Z.jsxs)(`div`,{className:`relative flex h-full w-full max-w-xl flex-col border-l border-zinc-800 bg-zinc-950 shadow-2xl`,children:[(0,Z.jsxs)(`div`,{className:`shrink-0 border-b border-zinc-800 px-5 py-4`,children:[(0,Z.jsxs)(`div`,{className:`flex items-start justify-between`,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`h2`,{className:`text-sm font-bold tracking-wide text-zinc-100`,children:`Bill of Materials`}),(0,Z.jsx)(`p`,{className:`mt-0.5 text-xs text-zinc-500`,children:r})]}),(0,Z.jsx)(`button`,{onClick:e,title:`Close (Esc)`,className:`rounded-md px-2 py-1 text-sm text-zinc-400 transition hover:bg-zinc-800 hover:text-zinc-100`,children:`✕`})]}),(0,Z.jsxs)(`div`,{className:`mt-3 flex items-end justify-between`,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsxs)(`div`,{className:`text-2xl font-bold text-sky-400 tabular-nums`,children:[oD(o.totalCost),(0,Z.jsx)(`span`,{className:`ml-1.5 text-xs font-medium text-zinc-500`,children:`est. total`})]}),(0,Z.jsxs)(`div`,{className:`text-[11px] text-zinc-500 tabular-nums`,children:[o.partCount,` parts · `,o.lines.length,` line items`,o.cutLists.length>0&&` · ${o.cutLists.reduce((e,t)=>e+t.sticksToBuy,0)} PVC sticks`]})]}),(0,Z.jsxs)(`div`,{className:`flex flex-wrap gap-1.5 justify-end`,children:[(0,Z.jsx)(MR,{onClick:()=>mD(o,r),title:`Download as CSV`,children:`Export CSV`}),(0,Z.jsx)(MR,{onClick:()=>HL(o,r),title:`Download as PDF`,children:`Export PDF`}),(0,Z.jsx)(MR,{onClick:u,title:`Copy shopping list to clipboard`,children:s?`Copied`:`Copy as text`}),(0,Z.jsx)(MR,{onClick:d,title:`Print shopping list`,children:`Print`}),(0,Z.jsx)(MR,{onClick:()=>i&&OR(i,`${r}.gltf`),title:i?`Export 3D layout as glTF`:`Scene loading...`,disabled:!i,children:`Export glTF`}),(0,Z.jsx)(MR,{onClick:()=>i&&kR(i,`${r}.obj`),title:i?`Export 3D layout as OBJ`:`Scene loading...`,disabled:!i,children:`Export OBJ`})]})]})]}),(0,Z.jsx)(`div`,{className:`flex-1 overflow-y-auto px-5 py-4`,children:o.partCount===0?(0,Z.jsx)(`p`,{className:`py-10 text-center text-xs text-zinc-600`,children:`Nothing here yet — place some parts in the scene to build a shopping list.`}):(0,Z.jsxs)(Z.Fragment,{children:[f.map(([e,t])=>(0,Z.jsxs)(`section`,{className:`mb-5`,children:[(0,Z.jsxs)(`div`,{className:`mb-1.5 flex items-baseline justify-between`,children:[(0,Z.jsx)(`h3`,{className:`text-[10px] font-bold tracking-wider text-zinc-500 uppercase`,children:e}),(0,Z.jsx)(`span`,{className:`text-[11px] font-semibold text-zinc-400 tabular-nums`,children:oD(p(e))})]}),(0,Z.jsx)(`div`,{className:`overflow-hidden rounded-lg border border-zinc-800`,children:t.map((e,t)=>(0,Z.jsxs)(`div`,{className:`flex items-start justify-between gap-3 px-3 py-2 ${t%2==1?`bg-zinc-900/40`:`bg-zinc-900/10`}`,children:[(0,Z.jsxs)(`div`,{className:`min-w-0`,children:[(0,Z.jsxs)(`div`,{className:`text-xs font-medium text-zinc-200`,children:[e.description,e.qty>1||e.unit===`stick`?(0,Z.jsxs)(`span`,{className:`ml-1.5 text-zinc-500`,children:[`×`,e.qty]}):null,e.estimated&&(0,Z.jsx)(`span`,{className:`ml-1.5 rounded bg-amber-950/80 px-1 py-px text-[9px] font-semibold text-amber-400 ring-1 ring-amber-900`,children:`est.`})]}),e.spec&&(0,Z.jsx)(`div`,{className:`mt-0.5 text-[10px] text-zinc-500`,children:e.spec})]}),(0,Z.jsxs)(`div`,{className:`shrink-0 text-right`,children:[(0,Z.jsx)(`div`,{className:`text-xs font-semibold text-zinc-200 tabular-nums`,children:oD(e.totalCost)}),e.qty>1&&(0,Z.jsxs)(`div`,{className:`text-[10px] text-zinc-500 tabular-nums`,children:[oD(e.unitCost),` / `,e.unit]})]})]},e.key))})]},e)),o.cutLists.length>0&&(0,Z.jsxs)(`section`,{className:`mb-5`,children:[(0,Z.jsx)(`h3`,{className:`mb-1.5 text-[10px] font-bold tracking-wider text-zinc-500 uppercase`,children:`Cut list — 10 ft sticks`}),(0,Z.jsx)(`div`,{className:`flex flex-col gap-2`,children:o.cutLists.map(e=>(0,Z.jsx)(jR,{list:e},e.diameterIn))})]})]})}),(0,Z.jsx)(`div`,{className:`shrink-0 border-t border-zinc-800 px-5 py-3`,children:(0,Z.jsxs)(`div`,{className:`flex items-center justify-between text-xs`,children:[(0,Z.jsx)(`span`,{className:`text-zinc-500`,children:`Prices are rough US retail estimates, not quotes.`}),(0,Z.jsx)(`span`,{className:`font-bold text-zinc-100 tabular-nums`,children:oD(o.totalCost)})]})})]})]})}function jR({list:e}){let[t,n]=(0,v.useState)(!1);return(0,Z.jsxs)(`div`,{className:`overflow-hidden rounded-lg border border-zinc-800 bg-zinc-900/30`,children:[(0,Z.jsxs)(`button`,{onClick:()=>n(e=>!e),className:`flex w-full items-center justify-between px-3 py-2 text-left transition hover:bg-zinc-800/50`,children:[(0,Z.jsxs)(`span`,{className:`text-xs font-semibold text-zinc-200`,children:[iD(e.diameterIn),` PVC`,(0,Z.jsxs)(`span`,{className:`ml-2 font-normal text-zinc-500`,children:[`buy `,e.sticksToBuy,` stick`,e.sticksToBuy===1?``:`s`,` · `,e.cuts.length,` `,`cuts · `,aD(e.totalLeftoverIn),` scrap`]})]}),(0,Z.jsx)(`span`,{className:`text-[10px] text-zinc-500`,children:t?`Hide`:`Show`})]}),t&&(0,Z.jsxs)(`div`,{className:`border-t border-zinc-800 px-3 py-2`,children:[e.sticks.map(e=>(0,Z.jsxs)(`div`,{className:`flex items-baseline gap-2 py-0.5`,children:[(0,Z.jsxs)(`span`,{className:`w-14 shrink-0 text-[10px] font-semibold text-zinc-500`,children:[`Stick `,e.index]}),(0,Z.jsxs)(`span`,{className:`text-[11px] text-zinc-300 tabular-nums`,children:[e.cuts.map(e=>aD(e)).join(`, `),(0,Z.jsxs)(`span`,{className:`ml-1.5 text-zinc-500`,children:[`— `,aD(e.leftoverIn),` left`]})]})]},e.index)),e.spliceCount>0&&(0,Z.jsxs)(`p`,{className:`mt-1 text-[10px] text-amber-400/90`,children:[e.spliceCount,` coupling`,e.spliceCount===1?``:`s`,` needed to splice runs longer than 10 ft.`]})]})]})}function MR({children:e,onClick:t,title:n,disabled:r}){return(0,Z.jsx)(`button`,{onClick:t,title:n,disabled:r,className:`rounded-md px-2.5 py-1.5 text-xs font-medium transition ${r?`bg-zinc-800 text-zinc-500 ring-1 ring-zinc-700 cursor-not-allowed opacity-50`:`bg-sky-500/15 text-sky-300 ring-1 ring-sky-700 hover:bg-sky-500/25`}`,children:e})}var NR=(e,t=1)=>Number(e.toFixed(t)).toString(),PR=.8;function FR(e,t){let n=e.partsMap[t];if(!n)return 0;let r=e.graph.connectorsByPart.get(t)??[],i=r.find(e=>e.connectorId===`out`)??r[r.length-1];if(!i)return 0;let a=n.position[1],o=[i.partId],s=new Set([t]);for(;o.length>0;){let t=o.shift();if(s.has(t))continue;s.add(t);let n=e.partsMap[t];n&&(a=Math.max(a,n.position[1]));let r=e.graph.neighbors.get(t);if(r)for(let e of r)s.has(e)||o.push(e)}return Math.max(0,a-n.position[1])}function IR(e){let t=[];for(let n of e.sim?.pumps??[]){let r=e.partsMap[n?.pumpId??``];if(!r||uS(r))continue;let i=n.maxHeadFt??0,a=FR(e,r.id);if(i<=0)continue;let o=a/i;if(o<=.8)continue;let s=lS(r),c=`Choose a higher-head pump or lower the highest point by ${NR(Math.max(.1,a-PR*i))} ft`;o>=1?t.push({id:`pump-head:${r.id}`,severity:`error`,title:`Pump cannot reach the highest point`,detail:`${s} must lift water ${NR(a)} ft but its max head is ${NR(i)} ft — it delivers no flow.`,partIds:[r.id],fix:c}):t.push({id:`pump-head:${r.id}`,severity:`warning`,title:`Pump near its limit (${Math.round(o*100)}%), keep \u226520% margin`,detail:`${s} is lifting ${NR(a)} ft of ${NR(i)} ft max head, so flow is heavily reduced and the pump will wear quickly.`,partIds:[r.id],fix:c})}return t}function LR(e,t,n){let r=[];for(let{a:t,b:i}of e.graph.joints)t.key===n&&r.push(i.partId),i.key===n&&r.push(t.partId);let i=new Set([t,...r]),a=[...r];for(;a.length;){let t=a.shift();if(e.partsMap[t]?.type===`reservoir`)return!0;for(let n of e.graph.neighbors.get(t)??[])i.has(n)||(i.add(n),a.push(n))}return!1}function RR(e){let t=[];for(let n of e.parts){if(n.type!==`pump`)continue;let r=lS(n);if(uS(n)){t.push({id:`pump-dead:${n.id}`,severity:`error`,title:`Pump is switched off`,detail:`${r} is powered off, so it delivers no flow.`,partIds:[n.id],fix:`Turn the pump on (power toggle in the inspector).`});continue}let i=e.graph.connectorsByPart.get(n.id)??[],a=i.find(e=>e.connectorId===`in`)??i[0],o=i.find(e=>e.connectorId===`out`)??i[i.length-1],s=o&&e.graph.joinedKeys.has(o.key),c=a&&e.graph.joinedKeys.has(a.key),l=e.sim?.pumps?.find(e=>e?.pumpId===n.id);if(l&&(l.gph??0)>0&&s&&c)continue;let u=FR(e,n.id);if(l&&(l.maxHeadFt??0)>0&&u>=(l.maxHeadFt??0))continue;let d,f;a&&!e.graph.joinedKeys.has(a.key)?(d=`${r}'s inlet is not connected to anything — there is no water source.`,f=`Connect the pump inlet to a reservoir.`):a&&!LR(e,n.id,a.key)?(d=`${r}'s inlet line never reaches a reservoir — there is no water source.`,f=`Route the inlet line back to a reservoir.`):o&&!e.graph.joinedKeys.has(o.key)?(d=`${r}'s outlet is not connected to anything — water has nowhere to go.`,f=`Connect the pump outlet to your plumbing.`):(d=e.sim?.warnings?.find(e=>e?.partId===n.id&&e?.level!==`info`)?.message??`${r} delivers no flow.`,f=`Check for closed valves and verify the line reaches an outlet.`),t.push({id:`pump-dead:${n.id}`,severity:`error`,title:`Pump delivers no flow`,detail:d,partIds:[n.id],fix:f})}return t}function zR(e,t){return e.type===`reducer`||e.type===`reducingElbow`?t===`a`?e.params.diameterA??1.5:e.params.diameterB??1:e.type===`reducingTee`?t===`c`||t===`branch`?e.params.diameterB??1:e.params.diameterA??1.5:e.params.diameter??1}function BR(e){let t=[],n=new Set;for(let{a:r,b:i}of e.graph.joints){let a=e.partsMap[r.partId],o=e.partsMap[i.partId];if(!a||!o)continue;let s=zR(a,r.connectorId),c=zR(o,i.connectorId);if(Math.abs(s-c)<.01)continue;let l=[r.partId,i.partId].sort().join(`:`);if(n.has(l))continue;n.add(l);let u=lS(a),d=lS(o);t.push({id:`diameter-mismatch:${l}`,severity:`warning`,title:`Mismatched pipe diameters at a joint`,detail:`${u} (${NR(s,2)} in) is joined to ${d} (${NR(c,2)} in) — the abrupt size change causes turbulence and pressure loss.`,partIds:[r.partId,i.partId],fix:`Add a reducer or match diameters (${u} is ${NR(s,2)} in, ${d} is ${NR(c,2)} in)`})}return t}function VR(e){let t=e.sim?.flows??{},n=new Set(Object.keys(t).filter(e=>(t[e]??0)>0));if(!n.size)return[];let r=[];for(let t of e.parts){let i=e.graph.connectorsByPart.get(t.id)??[];if(!i.length||t.type===`pump`||dS(t))continue;let a=i.filter(t=>e.graph.joinedKeys.has(t.key)).length;if(a===0||a===i.length)continue;let o=[t.id],s=null,c=t.id,l=null;for(let t=0;te!==s&&!o.includes(e));if(t.length!==1)break;let n=t[0],r=e.partsMap[n],i=(e.graph.neighbors.get(n)?.size??0)>=3;if(!r||r.type===`pump`||dS(r)||i){l=n;break}o.push(n),s=c,c=n}(l!==null&&n.has(l)||o.some(e=>n.has(e)))&&(o.some(t=>dS(e.partsMap[t]))||r.push({id:`dead-leg:${t.id}`,severity:`warning`,title:`Dead leg — stagnant water`,detail:`${lS(t)} ends a flowing branch with no reservoir, emitter, drain or grow part — water will sit stagnant (or leak) here.`,partIds:o,fix:`Cap with an emitter/drain or remove`}))}return r}function HR(e){let t=[];for(let n of e.parts){if(n.type!==`pipe`)continue;let r=e.graph.connectorsByPart.get(n.id)??[];if(r.length<2)continue;let[i,a]=[r[0].pos,r[r.length-1].pos];if(Math.abs(i[1]-a[1])>.3)continue;let o=(i[1]+a[1])/2;if(o<=1.5)continue;let s=n.params?.length??Math.hypot(a[0]-i[0],a[2]-i[2]);if(s<=4)continue;let c=t=>e.parts.some(r=>{if(r.id===n.id)return!1;let i=fS(r,e.graph.connectorsByPart.get(r.id)??[]),a=.3;return t[0]>=i.min[0]-a&&t[0]<=i.max[0]+a&&t[2]>=i.min[2]-a&&t[2]<=i.max[2]+a&&i.max[1]>=t[1]-.6&&i.min[1]<=t[1]-.6});c(i)||c(a)||t.push({id:`unsupported-span:${n.id}`,severity:`info`,title:`Unsupported span ${NR(s)} ft`,detail:`${lS(n)} runs ${NR(s)} ft at ${NR(o)} ft height with nothing beneath either end — it will sag over time.`,partIds:[n.id],fix:`Add a lattice/structure support`})}return t}function UR(e){let t=e.sim?.flows??{},n=[];for(let r of e.sim?.pumps??[]){if((r?.gph??0)<=0)continue;let i=r.pumpId,a=e.graph.nodeOfConnector.get(`${i}:out`),o=a?e.graph.nodes.get(a):void 0;if(!o)continue;let s=o.pos[1],c=0,l=i,u=s,d=new Set([`P:${i}`,o.id]),f=[{id:o.id,pathMax:s,highPart:i}];for(;f.length;){let{id:n,pathMax:r,highPart:a}=f.pop(),o=e.graph.nodes.get(n);if(o)for(let n of o.edges){if(d.has(n.to)||(t[n.partId]??0)<=0&&n.partId!==i)continue;d.add(n.to);let o=e.graph.nodes.get(n.to);if(!o)continue;let p=r,m=a;o.pos[1]>p&&(p=o.pos[1],m=n.partId);let h=p-o.pos[1];p>s+.5&&h>c&&(c=h,l=m,u=p),f.push({id:n.to,pathMax:p,highPart:m})}}c>=2&&n.push({id:`siphon:${i}`,severity:`info`,title:`Possible siphon on shutdown`,detail:`Flow from ${lS(e.partsMap[i])} climbs to ${NR(u)} ft and then descends ${NR(c)} ft — when the pump stops, gravity can keep siphoning water through the line.`,partIds:[l],fix:`Add an air gap or check valve at the high point`})}return n}function WR(e){let t=[];for(let n of e.parts){if(!(n.type===`drain`||typeof n.params?.capacityGph==`number`))continue;let r=n.params?.capacityGph??250,i=e.sim?.drains?.find?.(e=>e?.partId===n.id)?.inflowGph??e.sim?.flows?.[n.id]??0;if(i<=r+.5)continue;let a=Math.ceil(i/25)*25;t.push({id:`drain-capacity:${n.id}`,severity:`error`,title:`Undersized drain — will overflow`,detail:`${lS(n)} receives ${Math.round(i)} GPH but is rated for ${Math.round(r)} GPH — the excess will back up and flood.`,partIds:[n.id],fix:`Upsize drain to \u2265 ${a} GPH capacity`})}return t}function GR(e){let t=[];for(let n of e.sim?.netPots??[]){if(!n?.overflowing)continue;let r=e.partsMap[n.partId];if(!r)continue;let i=e.partsMap[n.sourcePartId];t.push({id:`net-pot-spill:${n.partId}`,severity:`error`,title:`Net pot will overflow from backed-up plumbing`,detail:`${lS(r)} sits above ${lS(i)}. Water is rising to ${NR(n.waterHeightFt)} ft while the pot rim is ${NR(n.rimHeightFt)} ft, so nutrient solution will spill out of the top.`,partIds:i?[n.partId,i.id]:[n.partId],fix:`Add a drain/outlet, lower water level, or move the net pot off the flooded line.`})}return t}function KR(e){let t=[];for(let n of e.parts){let r=e.graph.connectorsByPart.get(n.id)??[];r.length&&(r.some(t=>e.graph.joinedKeys.has(t.key))||t.push({id:`orphan:${n.id}`,severity:`info`,title:`Not connected to anything`,detail:`${lS(n)} has no connections — it is not part of any water circuit.`,partIds:[n.id],fix:`Drag it onto a matching connector, or delete it if unused.`}))}return t}function qR(e){let t=[];for(let n of e.parts){if(n.type!==`valve`||n.params?.open!==0)continue;let r=e.graph.componentOf.get(n.id);r!==void 0&&[...e.graph.components[r]].some(t=>{let n=e.partsMap[t];return n?.type===`pump`&&!uS(n)})&&t.push({id:`closed-valve:${n.id}`,severity:`info`,title:`Closed valve blocking a flowing line`,detail:`${lS(n)} is fully closed — everything beyond it gets no water.`,partIds:[n.id],fix:`Open the valve, or remove it if the branch is unused.`})}return t}function JR(e){let t=[];for(let n of e.roomMetrics){let r=e.partsMap[n.roomId],i=(r?.params.width??0)*(r?.params.depth??0);if(!n.sealed&&n.co2TankCount>0&&t.push({id:`room-co2-open:${n.roomId}`,severity:`warning`,title:`CO2 enrichment wasted in open-air room`,detail:`${n.label} is marked open air but has ${n.co2TankCount} CO2 tank${n.co2TankCount===1?``:`s`} — outside air exchange will purge enrichment before plants can use it.`,partIds:[n.roomId],fix:`Seal the room or remove CO2 hardware.`}),n.sealed&&n.airChangesPerMinute>1&&t.push({id:`room-sealed-exhaust:${n.roomId}`,severity:`warning`,title:`Sealed room exhausting too aggressively`,detail:`${n.label} is marked sealed but exhausts ${n.airChangesPerMinute.toFixed(2)} room volumes per minute — that behaves more like an open-air room and dumps conditioned CO2-rich air.`,partIds:[n.roomId],fix:`Reduce exhaust CFM or switch the room to open air.`}),!n.sealed&&n.airChangesPerMinute<.5&&t.push({id:`room-vent-low:${n.roomId}`,severity:`info`,title:`Low air exchange for open-air room`,detail:`${n.label} exchanges only ${n.airChangesPerMinute.toFixed(2)} room volumes per minute — heat and humidity can linger unless intake/exhaust is stronger.`,partIds:[n.roomId],fix:`Increase exhaust capacity or reduce room volume.`}),n.sealed&&n.co2TankCount===0&&n.lightWatts>=600&&t.push({id:`room-co2-missing:${n.roomId}`,severity:`info`,title:`High-light sealed room without CO2`,detail:`${n.label} is sealed and carries ${Math.round(n.lightWatts)} W of lighting but no CO2 source — the room can be enriched, but currently cannot take advantage of the sealed configuration.`,partIds:[n.roomId],fix:`Add a CO2 tank or switch to open-air ventilation.`}),i>0&&n.lightWatts>0){let e=n.lightWatts/i;e<25?t.push({id:`room-light-low:${n.roomId}`,severity:`info`,title:`Low lighting density`,detail:`${n.label} provides ${e.toFixed(1)} W/ft2 across ${i.toFixed(1)} ft2 — useful for propagation or low-light crops, but light-hungry plants will underperform.`,partIds:[n.roomId],fix:`Add more fixture wattage or reduce active canopy area.`}):e>55&&t.push({id:`room-light-high:${n.roomId}`,severity:`warning`,title:`Very high lighting density`,detail:`${n.label} is carrying ${e.toFixed(1)} W/ft2 — that is intense enough to demand strong cooling, CO2 strategy, and careful canopy distance management.`,partIds:[n.roomId],fix:`Raise fixtures, reduce wattage, or tighten environmental control.`})}n.lightWatts>0&&(n.roomDLI<10?t.push({id:`room-dli-low:${n.roomId}`,severity:`warning`,title:`Daily Light Integral (DLI) is too low`,detail:`${n.label} active DLI is ${n.roomDLI.toFixed(1)} — DLI < 10 is insufficient for healthy growth and will cause the crop to stretch.`,partIds:[n.roomId],fix:`Increase grow lights wattage, increase photoperiod (hours on), or decrease room/canopy area.`}):n.roomDLI>45&&t.push({id:`room-dli-high:${n.roomId}`,severity:`warning`,title:`Daily Light Integral (DLI) is too high`,detail:`${n.label} active DLI is ${n.roomDLI.toFixed(1)} — DLI > 45 risks phototoxic bleaching and leaf tissue damage.`,partIds:[n.roomId],fix:`Reduce grow lights wattage, decrease photoperiod (hours on), or raise the fixtures.`})),n.sealed&&n.lightWatts>400&&n.roomCo2===150&&t.push({id:`room-co2-starved:${n.roomId}`,severity:`warning`,title:`Sealed room CO₂ starvation risk`,detail:`${n.label} is sealed and runs high-wattage lighting (${n.lightWatts.toFixed(0)} W > 400 W), but CO₂ levels drop to 150 PPM due to lack of a CO₂ tank.`,partIds:[n.roomId],fix:`Add a CO₂ tank or switch to open-air ventilation.`});let a=Q.getState().growthStage??`vegetative`,o=.8,s=1.6;a===`seedling`?(o=.4,s=.8):a===`vegetative`?(o=.8,s=1.2):a===`flowering`&&(o=1.2,s=1.6),n.roomVPDs&&t.push({id:`room-vpd-high:${n.roomId}`,severity:`warning`,title:`Vapor Pressure Deficit (VPD) is too high`,detail:`${n.label} VPD is ${n.roomVPD.toFixed(2)} kPa, which is above the optimal range of ${o}-${s} kPa for the ${a} stage. High VPD causes excessive transpiration, leading to plant stress and wilting.`,partIds:[n.roomId],fix:`Lower the temperature, increase relative humidity, or reduce lighting intensity.`})}return t}var YR=[{id:`pump-head`,description:`Pumps should keep ≥20% head margin below their max head.`,run:IR},{id:`pump-dead`,description:`Pumps that are off, starved of source water, or dead-ended.`,run:RR},{id:`diameter-mismatch`,description:`Joined connectors whose parts have different pipe diameters.`,run:BR},{id:`dead-leg`,description:`Flowing branches that terminate with no exit part (stagnation).`,run:VR},{id:`unsupported-span`,description:`Long elevated horizontal pipes with nothing beneath their ends.`,run:HR},{id:`siphon`,description:`Flow paths that climb then descend ≥2 ft (siphon on shutdown).`,run:UR},{id:`drain-capacity`,description:`Drains receiving more flow than their rated capacity.`,run:WR},{id:`net-pot-spill`,description:`Net pots positioned over backed-up wet lines that will spill from the rim.`,run:GR},{id:`orphan`,description:`Flow-capable parts with no connections at all.`,run:KR},{id:`closed-valve`,description:`Fully closed valves on an otherwise powered circuit.`,run:qR},{id:`room-environment`,description:`Grow-room ventilation, sealed/open-air behavior, CO2 use, and light density.`,run:JR},{id:`reservoir-chemistry`,description:`Reservoir temperature, pH, and EC/nutrient concentration values.`,run:XR},{id:`part-overlap`,description:`Parts that are overlapping or morphing into one another.`,run:ZR}];function XR(e){let t=[],n=e.parts.filter(e=>e.type===`reservoir`);for(let r of n){let n=nC(r,e.partsMap),i=e.sim?.reservoirRuntime?.[r.id];i?.empty?t.push({id:`res-empty:${r.id}`,severity:`error`,title:`Reservoir runs dry under current load`,detail:`${r.label||`Reservoir #${r.id}`} is fully depleted by the current pump/drain demand, so downstream flow stops entirely.`,partIds:[r.id],fix:`Increase reservoir volume, reduce draw rate, or close the loop with return flow.`}):i&&i.minutesRemaining!==null&&i.minutesRemaining<30&&t.push({id:`res-runtime-low:${r.id}`,severity:`warning`,title:`Reservoir runtime is too short`,detail:`${r.label||`Reservoir #${r.id}`} has only ${i.minutesRemaining.toFixed(1)} minutes of water left at the current net draw of ${i.netOutflowGph.toFixed(1)} GPH.`,partIds:[r.id],fix:`Increase source volume, reduce pump flow, or return more water to this reservoir.`}),n.tempF>73&&t.push({id:`res-temp-high:${r.id}`,severity:`warning`,title:`Reservoir water temperature too high`,detail:`${r.label||`Reservoir #${r.id}`} water temperature is ${n.tempF.toFixed(1)}°F — water above 73°F holds significantly less dissolved oxygen and increases Pythium (root rot) risks.`,partIds:[r.id],fix:`Add a water chiller, reduce room ambient temperature, or turn off unneeded inline pumps.`}),n.ph<5.5?t.push({id:`res-ph-low:${r.id}`,severity:`warning`,title:`Water pH is too low (acidic)`,detail:`${r.label||`Reservoir #${r.id}`} pH is ${n.ph.toFixed(1)} — pH below 5.5 locks out Calcium, Magnesium, and Phosphorus, starving the plant.`,partIds:[r.id],fix:`Add pH Up (potassium hydroxide) or dilute with fresh water to raise pH to 5.8 - 6.2.`}):n.ph>6.5&&t.push({id:`res-ph-high:${r.id}`,severity:`warning`,title:`Water pH is too high (alkaline)`,detail:`${r.label||`Reservoir #${r.id}`} pH is ${n.ph.toFixed(1)} — pH above 6.5 locks out Iron, Manganese, Boron, and Zinc, causing leaf chlorosis.`,partIds:[r.id],fix:`Add pH Down (phosphoric/citric acid) to lower pH to 5.8 - 6.2.`});let a=Q.getState().growthStage,o=1,s=1.6,c=`Add more concentrated nutrient solution (part A/B) to raise EC to 1.0 - 1.6 mS/cm.`,l=`Dilute the reservoir with fresh water to reduce nutrient concentration (EC).`;a===`seedling`?(o=.4,s=.8,c=`Add dilute nutrient solution to raise EC to 0.4 - 0.8 mS/cm for seedlings.`,l=`Dilute the reservoir with fresh water to lower EC to 0.4 - 0.8 mS/cm for seedlings.`):a===`flowering`&&(o=1.5,s=2.2,c=`Add bloom nutrients to raise EC to 1.5 - 2.2 mS/cm for flowering.`,l=`Dilute the reservoir with fresh water to lower EC to 1.5 - 2.2 mS/cm for flowering.`),n.ecs&&t.push({id:`res-ec-high:${r.id}`,severity:`warning`,title:`High nutrient concentration (EC)`,detail:`${r.label||`Reservoir #${r.id}`} EC is ${n.ec.toFixed(1)} mS/cm — EC above ${s.toFixed(1)} risks nutrient burn or root dehydration in the ${a} stage.`,partIds:[r.id],fix:l})}return t}function ZR(e){let t=[],n=new Set;for(let r=0;r[e.id,e])):e,r=Object.values(n),i=t;if(!i)try{i=JS(n)}catch{i=void 0}let a={partsMap:n,parts:r,sim:i,graph:mS(r),roomMetrics:KT(n)},o=[];for(let e of YR)try{o.push(...e.run(a))}catch(t){console.warn(`[design-check] rule "${e.id}" failed:`,t)}return o.sort((e,t)=>QR[e.severity]-QR[t.severity])}var ez=[`error`,`warning`,`info`],tz={error:{heading:`Errors`,noun:[`error`,`errors`],card:`border-rose-900/60 bg-rose-950/40`,dot:`bg-rose-500`,text:`text-rose-300`},warning:{heading:`Warnings`,noun:[`warning`,`warnings`],card:`border-amber-900/60 bg-amber-950/30`,dot:`bg-amber-400`,text:`text-amber-300`},info:{heading:`Tips`,noun:[`tip`,`tips`],card:`border-sky-900/60 bg-sky-950/30`,dot:`bg-sky-400`,text:`text-sky-300`}};function nz(e){let t=[];for(let n of ez){let r=e.filter(e=>e.severity===n).length;r>0&&t.push(`${r} ${tz[n].noun[r===1?0:1]}`)}return t.join(` · `)}function rz({finding:e,onSelectPart:t,onApplyFix:n}){let r=tz[e.severity],i=e.id.startsWith(`dead-leg:`)||e.id.startsWith(`diameter-mismatch:`)||e.id.startsWith(`pump-dead:`);return(0,Z.jsx)(`div`,{className:`rounded-lg border px-3 py-2.5 ${r.card}`,children:(0,Z.jsxs)(`div`,{className:`flex items-start gap-2`,children:[(0,Z.jsx)(`span`,{className:`mt-1.5 h-2 w-2 shrink-0 rounded-full ${r.dot}`}),(0,Z.jsxs)(`div`,{className:`min-w-0 flex-1`,children:[(0,Z.jsx)(`h4`,{className:`text-xs font-semibold leading-snug ${r.text}`,children:e.title}),(0,Z.jsx)(`p`,{className:`mt-0.5 text-[11px] leading-snug text-zinc-400`,children:e.detail}),e.fix&&(0,Z.jsxs)(`p`,{className:`mt-1.5 rounded-md bg-zinc-900/80 px-2 py-1 text-[11px] leading-snug text-zinc-300`,children:[(0,Z.jsx)(`span`,{className:`font-semibold text-sky-400`,children:`Fix: `}),e.fix]}),e.partIds.length>0&&t&&(0,Z.jsxs)(`div`,{className:`mt-1.5 flex flex-wrap gap-1.5`,children:[e.partIds.map((n,r)=>(0,Z.jsxs)(`button`,{onClick:()=>t(n),className:`rounded-md border border-zinc-700 bg-zinc-900 px-2 py-0.5 text-[10px] font-semibold text-sky-400 hover:border-sky-700 hover:bg-zinc-800`,children:[`Show part`,e.partIds.length>1?` ${r+1}`:``]},n)),i&&n&&(0,Z.jsx)(`button`,{onClick:()=>n(e),className:`rounded-md border border-emerald-700 bg-emerald-950 px-2 py-0.5 text-[10px] font-semibold text-emerald-300 hover:border-emerald-500 hover:bg-emerald-900`,children:`Apply fix`})]})]})]})})}function iz({findings:e,onSelectPart:t,onApplyFix:n,onClose:r}){let i=e.length===0;return(0,Z.jsxs)(`div`,{className:`fixed inset-0 z-50 flex justify-end`,role:`dialog`,"aria-modal":`true`,children:[(0,Z.jsx)(`div`,{className:`absolute inset-0 bg-black/50`,onClick:r}),(0,Z.jsxs)(`aside`,{className:`relative flex h-full w-[26rem] max-w-full flex-col border-l border-zinc-800 bg-zinc-950 shadow-2xl`,children:[(0,Z.jsxs)(`header`,{className:`flex items-start justify-between gap-3 border-b border-zinc-800 px-4 py-3`,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`h2`,{className:`text-sm font-bold tracking-wide text-zinc-100`,children:`Design Check`}),(0,Z.jsx)(`p`,{className:`mt-0.5 text-[11px] text-zinc-500`,children:i?`All rules passed`:nz(e)})]}),(0,Z.jsx)(`button`,{onClick:r,"aria-label":`Close design check`,className:`rounded-md border border-zinc-800 bg-zinc-900 px-2 py-1 text-xs font-semibold text-zinc-400 hover:border-zinc-600 hover:text-zinc-200`,children:`Close`})]}),(0,Z.jsx)(`div`,{className:`flex-1 overflow-y-auto px-4 py-3`,children:i?(0,Z.jsxs)(`div`,{className:`flex h-full flex-col items-center justify-center gap-3 text-center`,children:[(0,Z.jsx)(`span`,{className:`flex h-12 w-12 items-center justify-center rounded-full bg-emerald-950 ring-1 ring-emerald-800`,children:(0,Z.jsx)(`svg`,{viewBox:`0 0 20 20`,className:`h-6 w-6 text-emerald-400`,fill:`none`,children:(0,Z.jsx)(`path`,{d:`M4 10.5l4 4 8-9`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeLinejoin:`round`})})}),(0,Z.jsx)(`p`,{className:`text-sm font-semibold text-emerald-400`,children:`Build validated — no issues`}),(0,Z.jsx)(`p`,{className:`max-w-[16rem] text-[11px] text-zinc-500`,children:`Every design rule passed. Press Play to watch the water run.`})]}):(0,Z.jsx)(`div`,{className:`flex flex-col gap-4`,children:ez.map(r=>{let i=e.filter(e=>e.severity===r);if(!i.length)return null;let a=tz[r];return(0,Z.jsxs)(`section`,{children:[(0,Z.jsxs)(`h3`,{className:`mb-1.5 flex items-center gap-1.5 text-[10px] font-bold tracking-wider text-zinc-500 uppercase`,children:[(0,Z.jsx)(`span`,{className:`h-1.5 w-1.5 rounded-full ${a.dot}`}),a.heading,(0,Z.jsx)(`span`,{className:`font-mono text-zinc-600`,children:i.length})]}),(0,Z.jsx)(`div`,{className:`flex flex-col gap-1.5`,children:i.map(e=>(0,Z.jsx)(rz,{finding:e,onSelectPart:t,onApplyFix:n},e.id))})]},r)})})})]})]})}var az=[`#38bdf8`,`#3d7bfa`,`#34d399`,`#3b7a57`,`#fbbf24`,`#f97316`,`#e0564f`,`#a78bfa`],oz=e=>{let t=0;for(let n=0;ne.parts),n=Q(e=>e.projectName),[r,i]=(0,v.useState)({}),a=(0,v.useRef)(null),o=(0,v.useRef)(t),s=(0,v.useRef)(!1);return(0,v.useEffect)(()=>{if(!e)return;let t=window.location.protocol===`https:`?`wss:`:`ws:`,r=window.location.port===`5173`?`3000`:window.location.port,c=`${t}//${window.location.hostname}${r?`:${r}`:``}`,l=new WebSocket(c);return a.current=l,l.onopen=()=>{let t=oz(e.email);l.send(JSON.stringify({type:`join`,projectRoom:n,userId:e.id,userName:e.email,color:t,activeRoomId:Q.getState().activeRoomId}))},l.onmessage=e=>{try{let t=JSON.parse(e.data);t.type===`mutation`?(s.current=!0,o.current=t.parts,Q.getState().syncParts(t.parts)):t.type===`cursor`?i(e=>({...e,[t.userId]:{position:t.position,userName:t.userName,color:t.color,activeRoomId:t.activeRoomId}})):t.type===`leave`&&i(e=>{let n={...e};return delete n[t.userId],n})}catch(e){console.error(`Error handling WebSocket message:`,e)}},l.onclose=()=>{console.log(`Collaboration WebSocket disconnected`)},l.onerror=e=>{console.error(`Collaboration WebSocket error:`,e)},()=>{l.close(),a.current=null}},[e,n]),(0,v.useEffect)(()=>{if(s.current){s.current=!1,o.current=t;return}if(t!==o.current){o.current=t;let e=a.current;e&&e.readyState===WebSocket.OPEN&&e.send(JSON.stringify({type:`mutation`,parts:t}))}},[t]),(0,v.useEffect)(()=>{let e=0,t=t=>{let n=Date.now();if(n-e<50)return;e=n;let r=t.detail,i=a.current;i&&i.readyState===WebSocket.OPEN&&i.send(JSON.stringify({type:`cursor`,position:[r.x,r.y,r.z],activeRoomId:Q.getState().activeRoomId}))};return window.addEventListener(`collab:cursor`,t),()=>{window.removeEventListener(`collab:cursor`,t)}},[]),{remoteCursors:r}}var cz=()=>{let{login:e,signup:t,error:n,clearError:r}=wE(),[i,a]=(0,v.useState)(!1),[o,s]=(0,v.useState)(``),[c,l]=(0,v.useState)(``),[u,d]=(0,v.useState)(!1),[f,p]=(0,v.useState)(null);return(0,Z.jsxs)(`div`,{className:`fixed inset-0 z-[100] flex items-center justify-center bg-zinc-950 overflow-y-auto px-4 py-8`,children:[(0,Z.jsx)(`div`,{className:`absolute top-0 left-0 right-0 bottom-0 bg-[radial-gradient(circle_at_30%_20%,rgba(14,165,233,0.1),transparent_40%)] pointer-events-none`}),(0,Z.jsxs)(`div`,{className:`w-full max-w-5xl grid grid-cols-1 lg:grid-cols-12 gap-8 lg:gap-12 items-center relative z-10 my-auto`,children:[(0,Z.jsxs)(`div`,{className:`lg:col-span-7 flex flex-col text-left space-y-6`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(`span`,{className:`grid h-8 w-8 place-items-center rounded-lg bg-gradient-to-br from-sky-400 to-blue-600 text-sm font-black text-white shadow-md shadow-sky-500/10`,children:`H`}),(0,Z.jsx)(`span`,{className:`text-sm font-bold tracking-wider text-sky-400 uppercase`,children:`Hydro Builder`})]}),(0,Z.jsxs)(`h1`,{className:`text-3xl sm:text-4xl lg:text-5xl font-black text-white leading-tight tracking-tight`,children:[`Stop Guessing. `,(0,Z.jsx)(`br`,{className:`hidden sm:inline`}),(0,Z.jsx)(`span`,{className:`bg-gradient-to-r from-sky-400 to-blue-500 bg-clip-text text-transparent`,children:`Precision-Plumb`}),` Your Grow.`]}),(0,Z.jsx)(`p`,{className:`text-sm sm:text-base text-zinc-400 max-w-xl leading-relaxed`,children:`Eliminate design errors, head-loss issues, and unnecessary trips to the hardware store. Design, simulate, and size your entire water system in full interactive 3D.`}),(0,Z.jsxs)(`div`,{className:`grid grid-cols-1 sm:grid-cols-2 gap-5 pt-2`,children:[(0,Z.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(`span`,{className:`text-base`,children:`💧`}),(0,Z.jsx)(`h3`,{className:`text-sm font-bold text-zinc-200`,children:`Real-Time Fluid Simulation`})]}),(0,Z.jsx)(`p`,{className:`text-xs text-zinc-400 leading-relaxed pl-6`,children:`Instant calculations for GPH flow rates, water velocities (ft/s), and system pressures.`})]}),(0,Z.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(`span`,{className:`text-base`,children:`📋`}),(0,Z.jsx)(`h3`,{className:`text-sm font-bold text-zinc-200`,children:`BOM & Cut List Generator`})]}),(0,Z.jsx)(`p`,{className:`text-xs text-zinc-400 leading-relaxed pl-6`,children:`One-click material summaries of every fitting, adapter, and pipe length. Your design is your shopping list.`})]}),(0,Z.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(`span`,{className:`text-base`,children:`📐`}),(0,Z.jsx)(`h3`,{className:`text-sm font-bold text-zinc-200`,children:`Auto-Snapping & Route Tools`})]}),(0,Z.jsx)(`p`,{className:`text-xs text-zinc-400 leading-relaxed pl-6`,children:`Automatic elbow insertions, grid snaps, and open-ended pipe caps. Plumb runs in seconds.`})]}),(0,Z.jsxs)(`div`,{className:`space-y-1.5`,children:[(0,Z.jsxs)(`div`,{className:`flex items-center gap-2`,children:[(0,Z.jsx)(`span`,{className:`text-base`,children:`🔍`}),(0,Z.jsx)(`h3`,{className:`text-sm font-bold text-zinc-200`,children:`Pro Design Check Diagnostics`})]}),(0,Z.jsx)(`p`,{className:`text-xs text-zinc-400 leading-relaxed pl-6`,children:`Automated error checks for dead-legs, backwards slopes, and diameter size mismatches.`})]})]}),(0,Z.jsxs)(`div`,{className:`border border-zinc-800 bg-zinc-900/30 rounded-xl p-4 flex flex-col sm:flex-row items-start sm:items-center justify-between gap-4 max-w-xl`,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`span`,{className:`text-[10px] font-bold text-sky-400 uppercase tracking-widest block`,children:`Pricing model`}),(0,Z.jsx)(`span`,{className:`text-sm font-bold text-zinc-200`,children:`1 free workspace forever`})]}),(0,Z.jsx)(`div`,{className:`hidden sm:block h-6 w-px bg-zinc-800`}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`span`,{className:`text-[10px] font-bold text-emerald-400 uppercase tracking-widest block`,children:`Unlimited building`}),(0,Z.jsx)(`span`,{className:`text-sm font-bold text-zinc-200`,children:`Only $5 per additional build slot`})]})]})]}),(0,Z.jsx)(`div`,{className:`lg:col-span-5 w-full flex justify-center`,children:(0,Z.jsxs)(`div`,{className:`w-full max-w-md overflow-hidden rounded-2xl border border-zinc-850 bg-zinc-900/80 p-8 shadow-2xl backdrop-blur-md`,children:[(0,Z.jsxs)(`div`,{className:`flex flex-col items-center mb-6 text-center`,children:[(0,Z.jsx)(`h2`,{className:`text-xl font-bold text-zinc-100`,children:i?`Create your free account`:`Welcome Back`}),(0,Z.jsx)(`p`,{className:`text-xs text-zinc-400 mt-1`,children:i?`Get instant access to your free build slot`:`Sign in to access your designs`})]}),(f||n)&&(0,Z.jsx)(`div`,{className:`mb-4 rounded-lg border border-red-500/20 bg-red-500/10 p-3 text-xs text-red-400`,children:f||n}),(0,Z.jsxs)(`form`,{onSubmit:async n=>{if(n.preventDefault(),!o||!c){p(`Please fill in all fields`);return}d(!0),p(null),r();try{i?await t(o,c):await e(o,c)}catch(e){p(e instanceof Error?e.message:`Authentication failed`)}finally{d(!1)}},className:`space-y-4`,children:[(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`label`,{className:`block text-xs font-semibold text-zinc-400 mb-1`,htmlFor:`email`,children:`Email Address`}),(0,Z.jsx)(`input`,{id:`email`,type:`email`,autoComplete:`email`,value:o,onChange:e=>s(e.target.value),className:`w-full rounded-lg border border-zinc-800 bg-zinc-950 px-3.5 py-2.5 text-sm text-zinc-200 outline-none transition focus:border-sky-500 focus:bg-zinc-950`,placeholder:`you@example.com`,required:!0})]}),(0,Z.jsxs)(`div`,{children:[(0,Z.jsx)(`label`,{className:`block text-xs font-semibold text-zinc-400 mb-1`,htmlFor:`password`,children:`Password`}),(0,Z.jsx)(`input`,{id:`password`,type:`password`,autoComplete:i?`new-password`:`current-password`,value:c,onChange:e=>l(e.target.value),className:`w-full rounded-lg border border-zinc-800 bg-zinc-950 px-3.5 py-2.5 text-sm text-zinc-200 outline-none transition focus:border-sky-500 focus:bg-zinc-950`,placeholder:`••••••••`,required:!0})]}),(0,Z.jsx)(`button`,{type:`submit`,disabled:u,className:`w-full rounded-lg bg-gradient-to-r from-sky-500 to-blue-600 py-3 text-sm font-semibold text-white transition hover:from-sky-400 hover:to-blue-500 disabled:opacity-50 flex items-center justify-center gap-2 cursor-pointer shadow-lg shadow-sky-500/10`,children:u?(0,Z.jsx)(`span`,{className:`h-4 w-4 animate-spin rounded-full border-2 border-white border-t-transparent`}):i?`Sign Up & Build`:`Sign In`})]}),(0,Z.jsx)(`div`,{className:`mt-5 text-center`,children:(0,Z.jsx)(`button`,{type:`button`,onClick:()=>{a(!i),p(null),r()},className:`text-xs font-medium text-sky-400 hover:text-sky-300 transition`,children:i?`Already have an account? Sign In`:`Don't have an account? Sign Up`})})]})})]})]})};function lz(e,t){let{user:n}=wE(),r=n&&n.purchased_slots>0;(0,v.useEffect)(()=>{if(t)return;let n=r?yE(e):null;n&&n.parts.length>0?Q.getState().loadParts(n.parts,n.name):Q.getState().loadParts(dT(),`Demo: pump loop`)},[e,t,r])}function uz(e,t){let{user:n}=wE(),r=n&&n.purchased_slots>0,i=EE(e=>e.setStatus);(0,v.useEffect)(()=>{if(t)return;if(!r){i(`unsaved`);return}let n,a=!1,o=Q.subscribe((t,r)=>{t.parts!==r.parts&&(a=!0,i(`unsaved`));let o=t.draggingId!==null||t.gizmoDragging,s=(r.draggingId!==null||r.gizmoDragging)&&!o,c=t.parts!==r.parts&&!o;a&&(s||c)?(clearTimeout(n),i(`saving`),n=setTimeout(()=>{vE(Q.getState().projectName,Object.values(Q.getState().parts),e),a=!1,i(`saved`)},600)):o&&(clearTimeout(n),n=void 0)});return()=>{o(),clearTimeout(n)}},[e,t,r,i])}function dz(){(0,v.useEffect)(()=>{let e=e=>{let t=e.target;if(/^(INPUT|TEXTAREA|SELECT)$/.test(t.tagName))return;let n=Q.getState(),r=e.metaKey||e.ctrlKey;if(r&&e.key.toLowerCase()===`z`){e.preventDefault(),e.shiftKey?n.redo():n.undo();return}if(r&&e.key.toLowerCase()===`y`){e.preventDefault(),n.redo();return}if(r&&e.key.toLowerCase()===`a`){e.preventDefault(),n.selectAll();return}if(r&&e.key.toLowerCase()===`c`){let t=n.selectedIds.map(e=>n.parts[e]).filter(Boolean);t.length>0&&(e.preventDefault(),navigator.clipboard.writeText(JSON.stringify({app:`hydro-builder-clip`,parts:t})),bS(`Copied ${t.length} parts`,`info`));return}if(r&&e.key.toLowerCase()===`v`){e.preventDefault(),navigator.clipboard.readText().then(e=>{try{let t=JSON.parse(e);t&&t.app===`hydro-builder-clip`&&Array.isArray(t.parts)&&bS(`Pasted ${n.pasteParts(t.parts).length} parts`,`success`)}catch{bS(`Clipboard does not contain valid hydro parts`,`error`)}}).catch(()=>{bS(`Could not read clipboard`,`error`)});return}if(r)return;let i=iT(e.key);if(i){e.preventDefault(),n.tool!==`select`&&n.setTool(`select`),n.setPlacingType(n.placingType===i?null:i);return}switch(e.key){case` `:e.preventDefault(),n.toggleSimRunning();break;case`Escape`:n.colorPopover?n.closeColorPopover():(n.setTool(`select`),n.setSelected(null));break;case`Delete`:case`Backspace`:n.removeParts(n.selectedIds);break;case`r`:case`R`:n.rotateParts(n.selectedIds,1,(e.shiftKey?-1:1)*(Math.PI/2));break;case`d`:case`D`:e.preventDefault(),n.duplicateParts(n.selectedIds);break;case`q`:case`Q`:n.translateParts(n.selectedIds,[0,-n.gridSize,0],`nudge`);break;case`e`:case`E`:n.translateParts(n.selectedIds,[0,n.gridSize,0],`nudge`);break}};return window.addEventListener(`keydown`,e),()=>window.removeEventListener(`keydown`,e)},[])}function fz(){let{user:e,loading:t}=wE(),n=e?.email;lz(n,t),uz(n,t),dz();let{remoteCursors:r}=sz(),i=Q(e=>e.placingType),a=Q(e=>e.tool),o=Q(e=>e.selectedIds.length),s=Q(e=>e.viewMode),c=Q(e=>e.renderMode),l=Q(e=>e.parts),u=Q(e=>e.activeRoomId),d=YS(),[f,p]=(0,v.useState)(!1),[m,h]=(0,v.useState)(null),g=(0,v.useMemo)(()=>Object.values(l).filter(e=>e.roomId===u),[l,u]);return t?(0,Z.jsxs)(`div`,{className:`flex h-screen flex-col items-center justify-center bg-zinc-950 text-zinc-100`,children:[(0,Z.jsx)(`div`,{className:`h-8 w-8 animate-spin rounded-full border-4 border-sky-500 border-t-transparent mb-4`}),(0,Z.jsx)(`span`,{className:`text-sm font-semibold tracking-wider text-zinc-400`,children:`Hydro Builder initializing...`})]}):e?(0,Z.jsxs)(`div`,{className:`flex h-screen flex-col bg-zinc-950 text-zinc-100 select-none`,children:[(0,Z.jsx)(OE,{onOpenBom:()=>p(!0),onCheckBuild:()=>{h($R(g,d))}}),(0,Z.jsxs)(`div`,{className:`flex min-h-0 flex-1`,children:[(0,Z.jsx)(HT,{}),(0,Z.jsxs)(`main`,{className:`relative min-w-0 flex-1`,onDragOver:e=>e.preventDefault(),onDrop:e=>{let t=e.dataTransfer.getData(`application/x-hydro-part`);if(!t)return;e.preventDefault();let n=jw(e.clientX,e.clientY);if(!n)return;let r=Q.getState(),i=e=>r.snapToGrid?NS(e,r.gridSize):e,a=[`pipe`,`elbow`,`tee`,`valve`,`emitter`].includes(t)?.25:0;r.addPart(t,[i(n[0]),a,i(n[2])])},children:[(0,Z.jsx)(nT,{remoteCursors:r}),(i||a===`measure`||a===`pipeRun`)&&(0,Z.jsx)(`div`,{className:`pointer-events-none absolute top-3 left-1/2 -translate-x-1/2 rounded-full border border-sky-800 bg-sky-950/90 px-4 py-1.5 text-xs font-medium text-sky-200 shadow-lg`,children:i?`Click to place · Shift-click to stamp copies · 1-9 switches parts · Esc to cancel`:a===`pipeRun`?`Pipe Run: click points · Shift-click to keep routing · Esc to exit`:`Measure: click two points · Esc to exit`}),!i&&a!==`measure`&&o>0&&(0,Z.jsx)(`div`,{className:`pointer-events-none absolute bottom-3 left-1/2 -translate-x-1/2 rounded-full border border-zinc-800 bg-zinc-950/85 px-4 py-1.5 text-[11px] font-medium text-zinc-400 shadow-lg backdrop-blur`,children:o>1?`${o} parts — drag moves all · ⌥drag clones · ⇧click adds/removes · ⌘click color · D duplicate · ⌫ delete`:`Drag body or gizmo to move · double-click plumbing to grab the whole run · selected pipes show stretch handles · drag a connector dot to snap${s===`orbit`?` · ⇧drag for vertical`:``} · ${c===`xray`?`X-Ray shows internals`:c===`water`?`Water mode isolates flow`:`Builder mode keeps solids primary`} · ⌥drag clones · ⌘click color · R rotate`}),(0,Z.jsx)(YT,{})]}),(0,Z.jsx)(QT,{})]}),(0,Z.jsx)(NE,{}),f&&(0,Z.jsx)(AR,{onClose:()=>p(!1)}),m&&(0,Z.jsx)(iz,{findings:m,onSelectPart:e=>{let t=Q.getState();if(t.setSelected(e),e){let n=t.parts[e];n&&t.setFocusTarget(n.position)}},onApplyFix:e=>{let t=Q.getState();if(e.id.startsWith(`dead-leg:`))t.fixDeadLeg(e.partIds);else if(e.id.startsWith(`diameter-mismatch:`))t.fixDiameterMismatch(e.partIds);else if(e.id.startsWith(`pump-dead:`)){let n=e.partIds[0];if(n){let e=t.parts[n];e&&(e.params.on===0||e.params.enabled===0)?t.updatePart(n,{params:{...e.params,on:1,enabled:1}}):t.fixPumpDeadEnd(n)}}else if(e.id.startsWith(`pump-head:`)){let n=e.partIds[0];if(n){let e=t.parts[n];if(e){let r=Math.ceil((e.params.maxHeadFt||8)*1.5);t.updatePart(n,{params:{...e.params,maxHeadFt:Math.min(30,r)}})}}}else if(e.id.startsWith(`unsupported-span:`)){let n=e.partIds[0];if(n){let e=t.parts[n];if(e){let n=e.position[1],r=Math.max(.5,n-.1),i=t.addPart(`lattice`,[e.position[0],r/2,e.position[2]],{snap:!1}),a=Q.getState().parts[i];a&&t.updatePart(i,{params:{...a.params,height:r}})}}}else if(e.id.startsWith(`drain-capacity:`)){let n=e.partIds[0];if(n){let e=t.parts[n];if(e){let r=d.drains?.find(e=>e?.partId===n)?.inflowGph??d.flows?.[n]??0,i=Math.ceil(r/25)*25;t.updatePart(n,{params:{...e.params,capacityGph:Math.min(2e3,i)}})}}}else if(e.id.startsWith(`res-temp-high:`)){let e=Object.values(t.parts).filter(e=>e.type===`waterChiller`);for(let n of e)t.updatePart(n.id,{params:{...n.params,on:1,targetTemp:68}})}else if(e.id.startsWith(`res-ph-low:`)||e.id.startsWith(`res-ph-high:`)){let n=e.partIds[0];if(n){let e=t.parts[n];e&&t.updatePart(n,{params:{...e.params,ph:6}})}}else if(e.id.startsWith(`res-ec-low:`)||e.id.startsWith(`res-ec-high:`)){let n=e.partIds[0];if(n){let e=t.parts[n];e&&t.updatePart(n,{params:{...e.params,ec:1.2}})}}else if(e.id.startsWith(`room-co2-open:`)||e.id.startsWith(`room-co2-missing:`)||e.id.startsWith(`room-co2-starved:`)){let n=e.partIds[0];if(n){let r=t.parts[n];if(r){let i=e.id.startsWith(`room-co2-open:`);t.updatePart(n,{params:{...r.params,sealed:+!!i}})}}}else if(e.id.startsWith(`room-sealed-exhaust:`)){let n=e.partIds[0];if(n){let e=t.parts[n];e&&t.updatePart(n,{params:{...e.params,sealed:0}})}}else if(e.id.startsWith(`room-vent-low:`)){let e=Object.values(t.parts).filter(e=>e.type===`inlineFan`);for(let n of e)t.updatePart(n.id,{params:{...n.params,cfm:600}})}else if(e.id.startsWith(`room-light-low:`)){let e=Object.values(t.parts).filter(e=>e.type===`growLight`);for(let n of e)t.updatePart(n.id,{params:{...n.params,watts:Math.min(1e3,(n.params.watts??650)+150)}})}else if(e.id.startsWith(`room-light-high:`)){let e=Object.values(t.parts).filter(e=>e.type===`growLight`);for(let n of e)t.updatePart(n.id,{params:{...n.params,watts:Math.max(100,(n.params.watts??650)-200)}})}else if(e.id.startsWith(`room-dli-low:`)){let e=Object.values(t.parts).filter(e=>e.type===`growLight`);for(let n of e)t.updatePart(n.id,{params:{...n.params,photoperiod:Math.min(24,(n.params.photoperiod??18)+4)}})}else if(e.id.startsWith(`room-dli-high:`)){let e=Object.values(t.parts).filter(e=>e.type===`growLight`);for(let n of e)t.updatePart(n.id,{params:{...n.params,photoperiod:Math.max(0,(n.params.photoperiod??18)-6)}})}else if(e.id.startsWith(`room-vpd-low:`)){let e=Object.values(t.parts).filter(e=>e.type===`growLight`);for(let n of e)t.updatePart(n.id,{params:{...n.params,watts:Math.min(1e3,(n.params.watts??650)+150)}})}else if(e.id.startsWith(`room-vpd-high:`)){let e=Object.values(t.parts).filter(e=>e.type===`growLight`);for(let n of e)t.updatePart(n.id,{params:{...n.params,watts:Math.max(100,(n.params.watts??650)-150)}})}else if(e.id.startsWith(`closed-valve:`)){let n=e.partIds[0];if(n){let e=t.parts[n];e&&t.updatePart(n,{params:{...e.params,open:100}})}}else if(e.id.startsWith(`part-overlap:`)){let n=e.partIds;n.length>=2&&t.removeParts([n[1]])}else e.id.startsWith(`orphan:`)&&t.removeParts(e.partIds);setTimeout(()=>{h($R(Object.values(Q.getState().parts),d))},50)},onClose:()=>h(null)}),(0,Z.jsx)(SS,{})]}):(0,Z.jsx)(cz,{})}function pz(){return(0,Z.jsx)(CE,{children:(0,Z.jsx)(fz,{})})}(0,y.createRoot)(document.getElementById(`root`)).render((0,Z.jsx)(v.StrictMode,{children:(0,Z.jsx)(pz,{})}));export{o as n,l as r,hD as t}; \ No newline at end of file diff --git a/dist/assets/index.es-Dm4MvI1O.js b/dist/assets/index.es-Dm4MvI1O.js deleted file mode 100644 index 7aa1729d..00000000 --- a/dist/assets/index.es-Dm4MvI1O.js +++ /dev/null @@ -1,5 +0,0 @@ -import{n as e,r as t,t as n}from"./index-MP_hm0Gm.js";var r=e(((e,t)=>{var n=function(e){return e&&e.Math===Math&&e};t.exports=n(typeof globalThis==`object`&&globalThis)||n(typeof window==`object`&&window)||n(typeof self==`object`&&self)||n(typeof global==`object`&&global)||n(typeof e==`object`&&e)||(function(){return this})()||Function(`return this`)()})),i=e(((e,t)=>{t.exports=function(e){try{return!!e()}catch{return!0}}})),a=e(((e,t)=>{t.exports=!i()(function(){return Object.defineProperty({},1,{get:function(){return 7}})[1]!==7})})),o=e(((e,t)=>{t.exports=!i()(function(){var e=function(){}.bind();return typeof e!=`function`||e.hasOwnProperty(`prototype`)})})),s=e(((e,t)=>{var n=o(),r=Function.prototype.call;t.exports=n?r.bind(r):function(){return r.apply(r,arguments)}})),c=e((e=>{var t={}.propertyIsEnumerable,n=Object.getOwnPropertyDescriptor;e.f=n&&!t.call({1:2},1)?function(e){var t=n(this,e);return!!t&&t.enumerable}:t})),l=e(((e,t)=>{t.exports=function(e,t){return{enumerable:!(e&1),configurable:!(e&2),writable:!(e&4),value:t}}})),u=e(((e,t)=>{var n=o(),r=Function.prototype,i=r.call,a=n&&r.bind.bind(i,i);t.exports=n?a:function(e){return function(){return i.apply(e,arguments)}}})),d=e(((e,t)=>{var n=u(),r=n({}.toString),i=n(``.slice);t.exports=function(e){return i(r(e),8,-1)}})),f=e(((e,t)=>{var n=u(),r=i(),a=d(),o=Object,s=n(``.split);t.exports=r(function(){return!o(`z`).propertyIsEnumerable(0)})?function(e){return a(e)===`String`?s(e,``):o(e)}:o})),p=e(((e,t)=>{t.exports=function(e){return e==null}})),m=e(((e,t)=>{var n=p(),r=TypeError;t.exports=function(e){if(n(e))throw new r(`Can't call method on `+e);return e}})),h=e(((e,t)=>{var n=f(),r=m();t.exports=function(e){return n(r(e))}})),g=e(((e,t)=>{var n=typeof document==`object`&&document.all;t.exports=n===void 0&&n!==void 0?function(e){return typeof e==`function`||e===n}:function(e){return typeof e==`function`}})),_=e(((e,t)=>{var n=g();t.exports=function(e){return typeof e==`object`?e!==null:n(e)}})),v=e(((e,t)=>{var n=r(),i=g(),a=function(e){return i(e)?e:void 0};t.exports=function(e,t){return arguments.length<2?a(n[e]):n[e]&&n[e][t]}})),y=e(((e,t)=>{t.exports=u()({}.isPrototypeOf)})),b=e(((e,t)=>{var n=r().navigator,i=n&&n.userAgent;t.exports=i?String(i):``})),x=e(((e,t)=>{var n=r(),i=b(),a=n.process,o=n.Deno,s=a&&a.versions||o&&o.version,c=s&&s.v8,l,u;c&&(l=c.split(`.`),u=l[0]>0&&l[0]<4?1:+(l[0]+l[1])),!u&&i&&(l=i.match(/Edge\/(\d+)/),(!l||l[1]>=74)&&(l=i.match(/Chrome\/(\d+)/),l&&(u=+l[1]))),t.exports=u})),S=e(((e,t)=>{var n=x(),a=i(),o=r().String;t.exports=!!Object.getOwnPropertySymbols&&!a(function(){var e=Symbol(`symbol detection`);return!o(e)||!(Object(e)instanceof Symbol)||!Symbol.sham&&n&&n<41})})),C=e(((e,t)=>{t.exports=S()&&!Symbol.sham&&typeof Symbol.iterator==`symbol`})),w=e(((e,t)=>{var n=v(),r=g(),i=y(),a=C(),o=Object;t.exports=a?function(e){return typeof e==`symbol`}:function(e){var t=n(`Symbol`);return r(t)&&i(t.prototype,o(e))}})),T=e(((e,t)=>{var n=String;t.exports=function(e){try{return n(e)}catch{return`Object`}}})),E=e(((e,t)=>{var n=g(),r=T(),i=TypeError;t.exports=function(e){if(n(e))return e;throw new i(r(e)+` is not a function`)}})),D=e(((e,t)=>{var n=E(),r=p();t.exports=function(e,t){var i=e[t];return r(i)?void 0:n(i)}})),O=e(((e,t)=>{var n=s(),r=g(),i=_(),a=TypeError;t.exports=function(e,t){var o,s;if(t===`string`&&r(o=e.toString)&&!i(s=n(o,e))||r(o=e.valueOf)&&!i(s=n(o,e))||t!==`string`&&r(o=e.toString)&&!i(s=n(o,e)))return s;throw new a(`Can't convert object to primitive value`)}})),k=e(((e,t)=>{t.exports=!1})),A=e(((e,t)=>{var n=r(),i=Object.defineProperty;t.exports=function(e,t){try{i(n,e,{value:t,configurable:!0,writable:!0})}catch{n[e]=t}return t}})),j=e(((e,t)=>{var n=k(),i=r(),a=A(),o=`__core-js_shared__`,s=t.exports=i[o]||a(o,{});(s.versions||=[]).push({version:`3.49.0`,mode:n?`pure`:`global`,copyright:`© 2013–2025 Denis Pushkarev (zloirock.ru), 2025–2026 CoreJS Company (core-js.io). All rights reserved.`,license:`https://github.com/zloirock/core-js/blob/v3.49.0/LICENSE`,source:`https://github.com/zloirock/core-js`})})),M=e(((e,t)=>{var n=j();t.exports=function(e,t){return n[e]||(n[e]=t||{})}})),N=e(((e,t)=>{var n=m(),r=Object;t.exports=function(e){return r(n(e))}})),P=e(((e,t)=>{var n=u(),r=N(),i=n({}.hasOwnProperty);t.exports=Object.hasOwn||function(e,t){return i(r(e),t)}})),F=e(((e,t)=>{var n=u(),r=0,i=Math.random(),a=n(1.1.toString);t.exports=function(e){return`Symbol(`+(e===void 0?``:e)+`)_`+a(++r+i,36)}})),I=e(((e,t)=>{var n=r(),i=M(),a=P(),o=F(),s=S(),c=C(),l=n.Symbol,u=i(`wks`),d=c?l.for||l:l&&l.withoutSetter||o;t.exports=function(e){return a(u,e)||(u[e]=s&&a(l,e)?l[e]:d(`Symbol.`+e)),u[e]}})),L=e(((e,t)=>{var n=s(),r=_(),i=w(),a=D(),o=O(),c=I(),l=TypeError,u=c(`toPrimitive`);t.exports=function(e,t){if(!r(e)||i(e))return e;var s=a(e,u),c;if(s){if(t===void 0&&(t=`default`),c=n(s,e,t),!r(c)||i(c))return c;throw new l(`Can't convert object to primitive value`)}return t===void 0&&(t=`number`),o(e,t)}})),R=e(((e,t)=>{var n=L(),r=w();t.exports=function(e){var t=n(e,`string`);return r(t)?t:t+``}})),z=e(((e,t)=>{var n=r(),i=_(),a=n.document,o=i(a)&&i(a.createElement);t.exports=function(e){return o?a.createElement(e):{}}})),ee=e(((e,t)=>{var n=a(),r=i(),o=z();t.exports=!n&&!r(function(){return Object.defineProperty(o(`div`),"a",{get:function(){return 7}}).a!==7})})),te=e((e=>{var t=a(),n=s(),r=c(),i=l(),o=h(),u=R(),d=P(),f=ee(),p=Object.getOwnPropertyDescriptor;e.f=t?p:function(e,t){if(e=o(e),t=u(t),f)try{return p(e,t)}catch{}if(d(e,t))return i(!n(r.f,e,t),e[t])}})),ne=e(((e,t)=>{var n=a(),r=i();t.exports=n&&r(function(){return Object.defineProperty(function(){},"prototype",{value:42,writable:!1}).prototype!==42})})),B=e(((e,t)=>{var n=_(),r=String,i=TypeError;t.exports=function(e){if(n(e))return e;throw new i(r(e)+` is not an object`)}})),re=e((e=>{var t=a(),n=ee(),r=ne(),i=B(),o=R(),s=TypeError,c=Object.defineProperty,l=Object.getOwnPropertyDescriptor,u=`enumerable`,d=`configurable`,f=`writable`;e.f=t?r?function(e,t,n){if(i(e),t=o(t),i(n),typeof e==`function`&&t===`prototype`&&`value`in n&&f in n&&!n[f]){var r=l(e,t);r&&r[f]&&(e[t]=n.value,n={configurable:d in n?n[d]:r[d],enumerable:u in n?n[u]:r[u],writable:!1})}return c(e,t,n)}:c:function(e,t,r){if(i(e),t=o(t),i(r),n)try{return c(e,t,r)}catch{}if(`get`in r||`set`in r)throw new s(`Accessors not supported`);return`value`in r&&(e[t]=r.value),e}})),ie=e(((e,t)=>{var n=a(),r=re(),i=l();t.exports=n?function(e,t,n){return r.f(e,t,i(1,n))}:function(e,t,n){return e[t]=n,e}})),ae=e(((e,t)=>{var n=a(),r=P(),i=Function.prototype,o=n&&Object.getOwnPropertyDescriptor,s=r(i,`name`);t.exports={EXISTS:s,PROPER:s&&function(){}.name===`something`,CONFIGURABLE:s&&(!n||n&&o(i,`name`).configurable)}})),oe=e(((e,t)=>{var n=u(),r=g(),i=j(),a=n(Function.toString);r(i.inspectSource)||(i.inspectSource=function(e){return a(e)}),t.exports=i.inspectSource})),se=e(((e,t)=>{var n=r(),i=g(),a=n.WeakMap;t.exports=i(a)&&/native code/.test(String(a))})),ce=e(((e,t)=>{var n=M(),r=F(),i=n(`keys`);t.exports=function(e){return i[e]||(i[e]=r(e))}})),le=e(((e,t)=>{t.exports={}})),ue=e(((e,t)=>{var n=se(),i=r(),a=_(),o=ie(),s=P(),c=j(),l=ce(),u=le(),d=`Object already initialized`,f=i.TypeError,p=i.WeakMap,m,h,g,v=function(e){return g(e)?h(e):m(e,{})},y=function(e){return function(t){var n;if(!a(t)||(n=h(t)).type!==e)throw new f(`Incompatible receiver, `+e+` required`);return n}};if(n||c.state){var b=c.state||=new p;b.get=b.get,b.has=b.has,b.set=b.set,m=function(e,t){if(b.has(e))throw new f(d);return t.facade=e,b.set(e,t),t},h=function(e){return b.get(e)||{}},g=function(e){return b.has(e)}}else{var x=l(`state`);u[x]=!0,m=function(e,t){if(s(e,x))throw new f(d);return t.facade=e,o(e,x,t),t},h=function(e){return s(e,x)?e[x]:{}},g=function(e){return s(e,x)}}t.exports={set:m,get:h,has:g,enforce:v,getterFor:y}})),de=e(((e,t)=>{var n=u(),r=i(),o=g(),s=P(),c=a(),l=ae().CONFIGURABLE,d=oe(),f=ue(),p=f.enforce,m=f.get,h=String,_=Object.defineProperty,v=n(``.slice),y=n(``.replace),b=n([].join),x=c&&!r(function(){return _(function(){},`length`,{value:8}).length!==8}),S=String(String).split(`String`),C=t.exports=function(e,t,n){v(h(t),0,7)===`Symbol(`&&(t=`[`+y(h(t),/^Symbol\(([^)]*)\).*$/,`$1`)+`]`),n&&n.getter&&(t=`get `+t),n&&n.setter&&(t=`set `+t),(!s(e,`name`)||l&&e.name!==t)&&(c?_(e,`name`,{value:t,configurable:!0}):e.name=t),x&&n&&s(n,`arity`)&&e.length!==n.arity&&_(e,`length`,{value:n.arity});try{n&&s(n,`constructor`)&&n.constructor?c&&_(e,`prototype`,{writable:!1}):e.prototype&&=void 0}catch{}var r=p(e);return s(r,`source`)||(r.source=b(S,typeof t==`string`?t:``)),e};Function.prototype.toString=C(function(){return o(this)&&m(this).source||d(this)},`toString`)})),fe=e(((e,t)=>{var n=g(),r=re(),i=de(),a=A();t.exports=function(e,t,o,s){s||={};var c=s.enumerable,l=s.name===void 0?t:s.name;if(n(o)&&i(o,l,s),s.global)c?e[t]=o:a(t,o);else{try{s.unsafe?e[t]&&(c=!0):delete e[t]}catch{}c?e[t]=o:r.f(e,t,{value:o,enumerable:!1,configurable:!s.nonConfigurable,writable:!s.nonWritable})}return e}})),pe=e(((e,t)=>{var n=Math.ceil,r=Math.floor;t.exports=Math.trunc||function(e){var t=+e;return(t>0?r:n)(t)}})),me=e(((e,t)=>{var n=pe();t.exports=function(e){var t=+e;return t!==t||t===0?0:n(t)}})),he=e(((e,t)=>{var n=me(),r=Math.max,i=Math.min;t.exports=function(e,t){var a=n(e);return a<0?r(a+t,0):i(a,t)}})),V=e(((e,t)=>{var n=me(),r=Math.min;t.exports=function(e){var t=n(e);return t>0?r(t,9007199254740991):0}})),ge=e(((e,t)=>{var n=V();t.exports=function(e){return n(e.length)}})),_e=e(((e,t)=>{var n=h(),r=he(),i=ge(),a=function(e){return function(t,a,o){var s=n(t),c=i(s);if(c===0)return!e&&-1;var l=r(o,c),u;if(e&&a!==a){for(;c>l;)if(u=s[l++],u!==u)return!0}else for(;c>l;l++)if((e||l in s)&&s[l]===a)return e||l||0;return!e&&-1}};t.exports={includes:a(!0),indexOf:a(!1)}})),H=e(((e,t)=>{var n=u(),r=P(),i=h(),a=_e().indexOf,o=le(),s=n([].push);t.exports=function(e,t){var n=i(e),c=0,l=[],u;for(u in n)!r(o,u)&&r(n,u)&&s(l,u);for(;t.length>c;)r(n,u=t[c++])&&(~a(l,u)||s(l,u));return l}})),ve=e(((e,t)=>{t.exports=[`constructor`,`hasOwnProperty`,`isPrototypeOf`,`propertyIsEnumerable`,`toLocaleString`,`toString`,`valueOf`]})),ye=e((e=>{var t=H(),n=ve().concat(`length`,`prototype`);e.f=Object.getOwnPropertyNames||function(e){return t(e,n)}})),be=e((e=>{e.f=Object.getOwnPropertySymbols})),xe=e(((e,t)=>{var n=v(),r=u(),i=ye(),a=be(),o=B(),s=r([].concat);t.exports=n(`Reflect`,`ownKeys`)||function(e){var t=i.f(o(e)),n=a.f;return n?s(t,n(e)):t}})),Se=e(((e,t)=>{var n=P(),r=xe(),i=te(),a=re();t.exports=function(e,t,o){for(var s=r(t),c=a.f,l=i.f,u=0;u{var n=i(),r=g(),a=/#|\.prototype\./,o=function(e,t){var i=c[s(e)];return i===u?!0:i===l?!1:r(t)?n(t):!!t},s=o.normalize=function(e){return String(e).replace(a,`.`).toLowerCase()},c=o.data={},l=o.NATIVE=`N`,u=o.POLYFILL=`P`;t.exports=o})),U=e(((e,t)=>{var n=r(),i=te().f,a=ie(),o=fe(),s=A(),c=Se(),l=Ce();t.exports=function(e,t){var r=e.target,u=e.global,d=e.stat,f,p=u?n:d?n[r]||s(r,{}):n[r]&&n[r].prototype,m,h,g,_;if(p)for(m in t){if(g=t[m],e.dontCallGetSet?(_=i(p,m),h=_&&_.value):h=p[m],f=l(u?m:r+(d?`.`:`#`)+m,e.forced),!f&&h!==void 0){if(typeof g==typeof h)continue;c(g,h)}(e.sham||h&&h.sham)&&a(g,`sham`,!0),o(p,m,g,e)}}})),we=e(((e,t)=>{var n=r(),i=b(),a=d(),o=function(e){return i.slice(0,e.length)===e};t.exports=(function(){return o(`Bun/`)?`BUN`:o(`Cloudflare-Workers`)?`CLOUDFLARE`:o(`Deno/`)?`DENO`:o(`Node.js/`)?`NODE`:n.Bun&&typeof Bun.version==`string`?`BUN`:n.Deno&&typeof Deno.version==`object`?`DENO`:a(n.process)===`process`?`NODE`:n.window&&n.document?`BROWSER`:`REST`})()})),Te=e(((e,t)=>{t.exports=we()===`NODE`})),Ee=e(((e,t)=>{t.exports=r()})),De=e(((e,t)=>{var n=u(),r=E();t.exports=function(e,t,i){try{return n(r(Object.getOwnPropertyDescriptor(e,t)[i]))}catch{}}})),Oe=e(((e,t)=>{var n=_();t.exports=function(e){return n(e)||e===null}})),ke=e(((e,t)=>{var n=Oe(),r=String,i=TypeError;t.exports=function(e){if(n(e))return e;throw new i(`Can't set `+r(e)+` as a prototype`)}})),Ae=e(((e,t)=>{var n=De(),r=_(),i=m(),a=ke();t.exports=Object.setPrototypeOf||(`__proto__`in{}?function(){var e=!1,t={},o;try{o=n(Object.prototype,`__proto__`,`set`),o(t,[]),e=t instanceof Array}catch{}return function(t,n){return i(t),a(n),r(t)&&(e?o(t,n):t.__proto__=n),t}}():void 0)})),je=e(((e,t)=>{var n=re().f,r=P(),i=I()(`toStringTag`);t.exports=function(e,t,a){e&&!a&&(e=e.prototype),e&&!r(e,i)&&n(e,i,{configurable:!0,value:t})}})),Me=e(((e,t)=>{var n=de(),r=re();t.exports=function(e,t,i){return i.get&&n(i.get,t,{getter:!0}),i.set&&n(i.set,t,{setter:!0}),r.f(e,t,i)}})),Ne=e(((e,t)=>{var n=v(),r=Me(),i=I(),o=a(),s=i(`species`);t.exports=function(e){var t=n(e);o&&t&&!t[s]&&r(t,s,{configurable:!0,get:function(){return this}})}})),W=e(((e,t)=>{var n=y(),r=TypeError;t.exports=function(e,t){if(n(t,e))return e;throw new r(`Incorrect invocation`)}})),Pe=e(((e,t)=>{var n=I()(`toStringTag`),r={};r[n]=`z`,t.exports=String(r)===`[object z]`})),Fe=e(((e,t)=>{var n=Pe(),r=g(),i=d(),a=I()(`toStringTag`),o=Object,s=i(function(){return arguments}())===`Arguments`,c=function(e,t){try{return e[t]}catch{}};t.exports=n?i:function(e){var t,n,l;return e===void 0?`Undefined`:e===null?`Null`:typeof(n=c(t=o(e),a))==`string`?n:s?i(t):(l=i(t))===`Object`&&r(t.callee)?`Arguments`:l}})),Ie=e(((e,t)=>{var n=u(),r=i(),a=g(),o=Fe(),s=v(),c=oe(),l=function(){},d=s(`Reflect`,`construct`),f=/^\s*(?:class|function)\b/,p=n(f.exec),m=!f.test(l),h=function(e){if(!a(e))return!1;try{return d(l,[],e),!0}catch{return!1}},_=function(e){if(!a(e))return!1;switch(o(e)){case`AsyncFunction`:case`GeneratorFunction`:case`AsyncGeneratorFunction`:return!1}try{return m||!!p(f,c(e))}catch{return!0}};_.sham=!0,t.exports=!d||r(function(){var e;return h(h.call)||!h(Object)||!h(function(){e=!0})||e})?_:h})),Le=e(((e,t)=>{var n=Ie(),r=T(),i=TypeError;t.exports=function(e){if(n(e))return e;throw new i(r(e)+` is not a constructor`)}})),Re=e(((e,t)=>{var n=B(),r=Le(),i=p(),a=I()(`species`);t.exports=function(e,t){var o=n(e).constructor,s;return o===void 0||i(s=n(o)[a])?t:r(s)}})),ze=e(((e,t)=>{var n=o(),r=Function.prototype,i=r.apply,a=r.call;t.exports=typeof Reflect==`object`&&Reflect.apply||(n?a.bind(i):function(){return a.apply(i,arguments)})})),Be=e(((e,t)=>{var n=d(),r=u();t.exports=function(e){if(n(e)===`Function`)return r(e)}})),Ve=e(((e,t)=>{var n=Be(),r=E(),i=o(),a=n(n.bind);t.exports=function(e,t){return r(e),t===void 0?e:i?a(e,t):function(){return e.apply(t,arguments)}}})),He=e(((e,t)=>{t.exports=v()(`document`,`documentElement`)})),Ue=e(((e,t)=>{t.exports=u()([].slice)})),We=e(((e,t)=>{var n=TypeError;t.exports=function(e,t){if(e{var n=b();t.exports=/ipad|iphone|ipod/i.test(n)&&/applewebkit/i.test(n)})),Ke=e(((e,t)=>{var n=r(),a=ze(),o=Ve(),s=g(),c=P(),l=i(),u=He(),d=Ue(),f=z(),p=We(),m=Ge(),h=Te(),_=n.setImmediate,v=n.clearImmediate,y=n.process,b=n.Dispatch,x=n.Function,S=n.MessageChannel,C=n.String,w=0,T={},E=`onreadystatechange`,D,O,k,A;l(function(){D=n.location});var j=function(e){if(c(T,e)){var t=T[e];delete T[e],t()}},M=function(e){return function(){j(e)}},N=function(e){j(e.data)},F=function(e){n.postMessage(C(e),D.protocol+`//`+D.host)};(!_||!v)&&(_=function(e){p(arguments.length,1);var t=s(e)?e:x(e),n=d(arguments,1);return T[++w]=function(){a(t,void 0,n)},O(w),w},v=function(e){delete T[e]},h?O=function(e){y.nextTick(M(e))}:b&&b.now?O=function(e){b.now(M(e))}:S&&!m?(k=new S,A=k.port2,k.port1.onmessage=N,O=o(A.postMessage,A)):n.addEventListener&&s(n.postMessage)&&!n.importScripts&&D&&D.protocol!==`file:`&&!l(F)?(O=F,n.addEventListener(`message`,N,!1)):O=E in f(`script`)?function(e){u.appendChild(f(`script`))[E]=function(){u.removeChild(this),j(e)}}:function(e){setTimeout(M(e),0)}),t.exports={set:_,clear:v}})),qe=e(((e,t)=>{var n=r(),i=a(),o=Object.getOwnPropertyDescriptor;t.exports=function(e){if(!i)return n[e];var t=o(n,e);return t&&t.value}})),Je=e(((e,t)=>{var n=function(){this.head=null,this.tail=null};n.prototype={add:function(e){var t={item:e,next:null},n=this.tail;n?n.next=t:this.head=t,this.tail=t},get:function(){var e=this.head;if(e)return(this.head=e.next)===null&&(this.tail=null),e.item}},t.exports=n})),Ye=e(((e,t)=>{var n=b();t.exports=/ipad|iphone|ipod/i.test(n)&&typeof Pebble<`u`})),Xe=e(((e,t)=>{var n=b();t.exports=/web0s(?!.*chrome)/i.test(n)})),Ze=e(((e,t)=>{var n=r(),i=qe(),a=Ve(),o=Ke().set,s=Je(),c=Ge(),l=Ye(),u=Xe(),d=Te(),f=n.MutationObserver||n.WebKitMutationObserver,p=n.document,m=n.process,h=n.Promise,g=i(`queueMicrotask`),_,v,y,b,x;if(!g){var S=new s,C=function(){var e,t;for(d&&(e=m.domain)&&e.exit();t=S.get();)try{t()}catch(e){throw S.head&&_(),e}e&&e.enter()};!c&&!d&&!u&&f&&p?(v=!0,y=p.createTextNode(``),new f(C).observe(y,{characterData:!0}),_=function(){y.data=v=!v}):!l&&h&&h.resolve?(b=h.resolve(void 0),b.constructor=h,x=a(b.then,b),_=function(){x(C)}):d?_=function(){m.nextTick(C)}:(o=a(o,n),_=function(){o(C)}),g=function(e){S.head||_(),S.add(e)}}t.exports=g})),Qe=e(((e,t)=>{t.exports=function(e,t){try{arguments.length===1?console.error(e):console.error(e,t)}catch{}}})),$e=e(((e,t)=>{t.exports=function(e){try{return{error:!1,value:e()}}catch(e){return{error:!0,value:e}}}})),et=e(((e,t)=>{t.exports=r().Promise})),tt=e(((e,t)=>{var n=r(),i=et(),a=g(),o=Ce(),s=oe(),c=I(),l=we(),u=k(),d=x(),f=i&&i.prototype,p=c(`species`),m=!1,h=a(n.PromiseRejectionEvent);t.exports={CONSTRUCTOR:o(`Promise`,function(){var e=s(i),t=e!==String(i);if(!t&&d===66||u&&!(f.catch&&f.finally))return!0;if(!d||d<51||!/native code/.test(e)){var n=new i(function(e){e(1)}),r=function(e){e(function(){},function(){})},a=n.constructor={};if(a[p]=r,m=n.then(function(){})instanceof r,!m)return!0}return!t&&(l===`BROWSER`||l===`DENO`)&&!h}),REJECTION_EVENT:h,SUBCLASSING:m}})),nt=e(((e,t)=>{var n=E(),r=TypeError,i=function(e){var t,i;this.promise=new e(function(e,n){if(t!==void 0||i!==void 0)throw new r(`Bad Promise constructor`);t=e,i=n}),this.resolve=n(t),this.reject=n(i)};t.exports.f=function(e){return new i(e)}})),rt=e((()=>{var e=U(),t=k(),n=Te(),i=r(),a=Ee(),o=s(),c=fe(),l=Ae(),u=je(),d=Ne(),f=E(),p=g(),m=_(),h=W(),v=Re(),y=Ke().set,b=Ze(),x=Qe(),S=$e(),C=Je(),w=ue(),T=et(),D=tt(),O=nt(),A=`Promise`,j=D.CONSTRUCTOR,M=D.REJECTION_EVENT,N=D.SUBCLASSING,P=w.getterFor(A),F=w.set,I=T&&T.prototype,L=T,R=I,z=i.TypeError,ee=i.document,te=i.process,ne=O.f,B=ne,re=!!(ee&&ee.createEvent&&i.dispatchEvent),ie=`unhandledrejection`,ae=`rejectionhandled`,oe=0,se=1,ce=2,le=1,de=2,pe,me,he,V,ge=function(e){var t;return m(e)&&p(t=e.then)?t:!1},_e=function(e,t){var n=t.value,r=t.state===se,i=r?e.ok:e.fail,a=e.resolve,s=e.reject,c=e.domain,l,u,d;try{i?(r||(t.rejection===de&&xe(t),t.rejection=le),i===!0?l=n:(c&&c.enter(),l=i(n),c&&(c.exit(),d=!0)),l===e.promise?s(new z(`Promise-chain cycle`)):(u=ge(l))?o(u,l,a,s):a(l)):s(n)}catch(e){c&&!d&&c.exit(),s(e)}},H=function(e,t){e.notified||(e.notified=!0,b(function(){for(var n=e.reactions,r;r=n.get();)_e(r,e);e.notified=!1,t&&!e.rejection&&ye(e)}))},ve=function(e,t,n){var r,a;re?(r=ee.createEvent(`Event`),r.promise=t,r.reason=n,r.initEvent(e,!1,!0),i.dispatchEvent(r)):r={promise:t,reason:n},!M&&(a=i[`on`+e])?a(r):e===ie&&x(`Unhandled promise rejection`,n)},ye=function(e){o(y,i,function(){var t=e.facade,r=e.value,i=be(e),a;if(i&&(a=S(function(){n?te.emit(`unhandledRejection`,r,t):ve(ie,t,r)}),e.rejection=n||be(e)?de:le,a.error))throw a.value})},be=function(e){return e.rejection!==le&&!e.parent},xe=function(e){o(y,i,function(){var t=e.facade;n?te.emit(`rejectionHandled`,t):ve(ae,t,e.value)})},Se=function(e,t,n){return function(r){e(t,r,n)}},Ce=function(e,t,n){e.done||(e.done=!0,n&&(e=n),e.value=t,e.state=ce,H(e,!0))},we=function(e,t,n){if(!e.done){e.done=!0,n&&(e=n);try{if(e.facade===t)throw new z(`Promise can't be resolved itself`);var r=ge(t);r?b(function(){var n={done:!1};try{o(r,t,Se(we,n,e),Se(Ce,n,e))}catch(t){Ce(n,t,e)}}):(e.value=t,e.state=se,H(e,!1))}catch(t){Ce({done:!1},t,e)}}};if(j&&(L=function(e){h(this,R),f(e),o(pe,this);var t=P(this);try{e(Se(we,t),Se(Ce,t))}catch(e){Ce(t,e)}},R=L.prototype,pe=function(e){F(this,{type:A,done:!1,notified:!1,parent:!1,reactions:new C,rejection:!1,state:oe,value:null})},pe.prototype=c(R,`then`,function(e,t){var r=P(this),i=ne(v(this,L));return r.parent=!0,i.ok=p(e)?e:!0,i.fail=p(t)&&t,i.domain=n?te.domain:void 0,r.state===oe?r.reactions.add(i):b(function(){_e(i,r)}),i.promise}),me=function(){var e=new pe,t=P(e);this.promise=e,this.resolve=Se(we,t),this.reject=Se(Ce,t)},O.f=ne=function(e){return e===L||e===he?new me(e):B(e)},!t&&p(T)&&I!==Object.prototype)){V=I.then,N||c(I,`then`,function(e,t){var n=this;return new L(function(e,t){o(V,n,e,t)}).then(e,t)},{unsafe:!0});try{delete I.constructor}catch{}l&&l(I,R)}e({global:!0,constructor:!0,wrap:!0,forced:j},{Promise:L}),he=a.Promise,u(L,A,!1,!0),d(A)})),it=e(((e,t)=>{t.exports={}})),at=e(((e,t)=>{var n=I(),r=it(),i=n(`iterator`),a=Array.prototype;t.exports=function(e){return e!==void 0&&(r.Array===e||a[i]===e)}})),ot=e(((e,t)=>{var n=Fe(),r=D(),i=p(),a=it(),o=I()(`iterator`);t.exports=function(e){if(!i(e))return r(e,o)||r(e,`@@iterator`)||a[n(e)]}})),st=e(((e,t)=>{var n=s(),r=E(),i=B(),a=T(),o=ot(),c=TypeError;t.exports=function(e,t){var s=arguments.length<2?o(e):t;if(r(s))return i(n(s,e));throw new c(a(e)+` is not iterable`)}})),ct=e(((e,t)=>{var n=s(),r=B(),i=D();t.exports=function(e,t,a){var o,s;r(e);try{if(o=i(e,`return`),!o){if(t===`throw`)throw a;return a}o=n(o,e)}catch(e){s=!0,o=e}if(t===`throw`)throw a;if(s)throw o;return r(o),a}})),lt=e(((e,t)=>{var n=Ve(),r=s(),i=B(),a=T(),o=at(),c=ge(),l=y(),u=st(),d=ot(),f=ct(),p=TypeError,m=function(e,t){this.stopped=e,this.result=t},h=m.prototype;t.exports=function(e,t,s){var g=s&&s.that,_=!!(s&&s.AS_ENTRIES),v=!!(s&&s.IS_RECORD),y=!!(s&&s.IS_ITERATOR),b=!!(s&&s.INTERRUPTED),x=n(t,g),S,C,w,T,E,D,O,k=function(e){var t=S;return S=void 0,t&&f(t,`normal`),new m(!0,e)},A=function(e){return _?(i(e),b?x(e[0],e[1],k):x(e[0],e[1])):b?x(e,k):x(e)};if(v)S=e.iterator;else if(y)S=e;else{if(C=d(e),!C)throw new p(a(e)+` is not iterable`);if(o(C)){for(w=0,T=c(e);T>w;w++)if(E=A(e[w]),E&&l(h,E))return E;return new m(!1)}S=u(e,C)}for(D=v?e.next:S.next;!(O=r(D,S)).done;){var j=O.value;try{E=A(j)}catch(e){if(S)f(S,`throw`,e);else throw e}if(typeof E==`object`&&E&&l(h,E))return E}return new m(!1)}})),ut=e(((e,t)=>{var n=I()(`iterator`),r=!1;try{var i=0,a={next:function(){return{done:!!i++}},return:function(){r=!0}};a[n]=function(){return this},Array.from(a,function(){throw 2})}catch{}t.exports=function(e,t){try{if(!t&&!r)return!1}catch{return!1}var i=!1;try{var a={};a[n]=function(){return{next:function(){return{done:i=!0}}}},e(a)}catch{}return i}})),dt=e(((e,t)=>{var n=et(),r=ut();t.exports=tt().CONSTRUCTOR||!r(function(e){n.all(e).then(void 0,function(){})})})),ft=e((()=>{var e=U(),t=s(),n=E(),r=nt(),i=$e(),a=lt();e({target:`Promise`,stat:!0,forced:dt()},{all:function(e){var o=this,s=r.f(o),c=s.resolve,l=s.reject,u=i(function(){var r=n(o.resolve),i=[],s=0,u=1;a(e,function(e){var n=s++,a=!1;u++,t(r,o,e).then(function(e){a||(a=!0,i[n]=e,--u||c(i))},l)}),--u||c(i)});return u.error&&l(u.value),s.promise}})})),pt=e((()=>{var e=U(),t=k(),n=tt().CONSTRUCTOR,r=et(),i=v(),a=g(),o=fe(),s=r&&r.prototype;if(e({target:`Promise`,proto:!0,forced:n,real:!0},{catch:function(e){return this.then(void 0,e)}}),!t&&a(r)){var c=i(`Promise`).prototype.catch;s.catch!==c&&o(s,`catch`,c,{unsafe:!0})}})),mt=e((()=>{var e=U(),t=s(),n=E(),r=nt(),i=$e(),a=lt();e({target:`Promise`,stat:!0,forced:dt()},{race:function(e){var o=this,s=r.f(o),c=s.reject,l=i(function(){var r=n(o.resolve);a(e,function(e){t(r,o,e).then(s.resolve,c)})});return l.error&&c(l.value),s.promise}})})),ht=e((()=>{var e=U(),t=nt(),n=tt().CONSTRUCTOR;e({target:`Promise`,stat:!0,forced:n},{reject:function(e){var n=t.f(this),r=n.reject;return r(e),n.promise}})})),gt=e(((e,t)=>{var n=B(),r=_(),i=nt();t.exports=function(e,t){if(n(e),r(t)&&t.constructor===e)return t;var a=i.f(e),o=a.resolve;return o(t),a.promise}})),_t=e((()=>{var e=U(),t=v(),n=k(),r=et(),i=tt().CONSTRUCTOR,a=gt(),o=t(`Promise`),s=n&&!i;e({target:`Promise`,stat:!0,forced:n||i},{resolve:function(e){return a(s&&this===o?r:this,e)}})}));e((()=>{rt(),ft(),pt(),mt(),ht(),_t()}))();function vt(e,t,n,r,i,a,o){try{var s=e[a](o),c=s.value}catch(e){n(e);return}s.done?t(c):Promise.resolve(c).then(r,i)}function yt(e){return function(){var t=this,n=arguments;return new Promise(function(r,i){var a=e.apply(t,n);function o(e){vt(a,r,i,o,s,`next`,e)}function s(e){vt(a,r,i,o,s,`throw`,e)}o(void 0)})}}var bt=e(((e,t)=>{var n=Fe(),r=String;t.exports=function(e){if(n(e)===`Symbol`)throw TypeError(`Cannot convert a Symbol value to a string`);return r(e)}})),xt=e(((e,t)=>{var n=B();t.exports=function(){var e=n(this),t=``;return e.hasIndices&&(t+=`d`),e.global&&(t+=`g`),e.ignoreCase&&(t+=`i`),e.multiline&&(t+=`m`),e.dotAll&&(t+=`s`),e.unicode&&(t+=`u`),e.unicodeSets&&(t+=`v`),e.sticky&&(t+=`y`),t}})),St=e(((e,t)=>{var n=i(),a=r().RegExp,o=n(function(){var e=a(`a`,`y`);return e.lastIndex=2,e.exec(`abcd`)!==null}),s=o||n(function(){return!a(`a`,`y`).sticky});t.exports={BROKEN_CARET:o||n(function(){var e=a(`^r`,`gy`);return e.lastIndex=2,e.exec(`str`)!==null}),MISSED_STICKY:s,UNSUPPORTED_Y:o}})),Ct=e(((e,t)=>{var n=H(),r=ve();t.exports=Object.keys||function(e){return n(e,r)}})),wt=e((e=>{var t=a(),n=ne(),r=re(),i=B(),o=h(),s=Ct();e.f=t&&!n?Object.defineProperties:function(e,t){i(e);for(var n=o(t),a=s(t),c=a.length,l=0,u;c>l;)r.f(e,u=a[l++],n[u]);return e}})),Tt=e(((e,t)=>{var n=B(),r=wt(),i=ve(),a=le(),o=He(),s=z(),c=ce(),l=`>`,u=`<`,d=`prototype`,f=`script`,p=c(`IE_PROTO`),m=function(){},h=function(e){return u+f+l+e+u+`/`+f+l},g=function(e){e.write(h(``)),e.close();var t=e.parentWindow.Object;return e=null,t},_=function(){var e=s(`iframe`),t=`java`+f+`:`,n;return e.style.display=`none`,o.appendChild(e),e.src=String(t),n=e.contentWindow.document,n.open(),n.write(h(`document.F=Object`)),n.close(),n.F},v,y=function(){try{v=new ActiveXObject(`htmlfile`)}catch{}y=typeof document<`u`?document.domain&&v?g(v):_():g(v);for(var e=i.length;e--;)delete y[d][i[e]];return y()};a[p]=!0,t.exports=Object.create||function(e,t){var i;return e===null?i=y():(m[d]=n(e),i=new m,m[d]=null,i[p]=e),t===void 0?i:r.f(i,t)}})),Et=e(((e,t)=>{var n=i(),a=r().RegExp;t.exports=n(function(){var e=a(`.`,`s`);return!(e.dotAll&&e.test(` -`)&&e.flags===`s`)})})),Dt=e(((e,t)=>{var n=i(),a=r().RegExp;t.exports=n(function(){var e=a(`(?b)`,`g`);return e.exec(`b`).groups.a!==`b`||`b`.replace(e,`$c`)!==`bc`})})),Ot=e(((e,t)=>{var n=s(),r=u(),i=bt(),a=xt(),o=St(),c=M(),l=Tt(),d=ue().get,f=Et(),p=Dt(),m=c(`native-string-replace`,String.prototype.replace),h=RegExp.prototype.exec,g=h,_=r(``.charAt),v=r(``.indexOf),y=r(``.replace),b=r(``.slice),x=(function(){var e=/a/,t=/b*/g;return n(h,e,`a`),n(h,t,`a`),e.lastIndex!==0||t.lastIndex!==0})(),S=o.BROKEN_CARET,C=/()??/.exec(``)[1]!==void 0,w=x||C||S||f||p,T=function(e,t){for(var n=e.groups=l(null),r=0;r0&&_(o,t.lastIndex-1);t.lastIndex>0&&(!t.multiline||t.multiline&&k!==` -`&&k!==`\r`&&k!==`\u2028`&&k!==`\u2029`)&&(E=`(?: (?:`+E+`))`,O=` `+O,D++),l=RegExp(`^(?:`+E+`)`,w)}C&&(l=RegExp(`^`+E+`$(?!\\s)`,w)),x&&(u=t.lastIndex);var A=n(h,p?l:t,O);return p?A?(A.input=o,A[0]=b(A[0],D),A.index=t.lastIndex,t.lastIndex+=A[0].length):t.lastIndex=0:x&&A&&(t.lastIndex=t.global?A.index+A[0].length:u),C&&A&&A.length>1&&n(m,A[0],l,function(){for(var e=1;e{var e=U(),t=Ot();e({target:`RegExp`,proto:!0,forced:/./.exec!==t},{exec:t})})),At=e(((e,t)=>{kt();var n=s(),r=fe(),a=Ot(),o=i(),c=I(),l=ie(),u=c(`species`),d=RegExp.prototype;t.exports=function(e,t,i,s){var f=c(e),p=!o(function(){var t={};return t[f]=function(){return 7},``[e](t)!==7}),m=p&&!o(function(){var t=!1,n=/a/;if(e===`split`){var r={};r[u]=function(){return n},n={constructor:r,flags:``},n[f]=/./[f]}return n.exec=function(){return t=!0,null},n[f](``),!t});if(!p||!m||i){var h=/./[f],g=t(f,``[e],function(e,t,r,i,o){var s=t.exec;return s===a||s===d.exec?p&&!o?{done:!0,value:n(h,t,r,i)}:{done:!0,value:n(e,r,t,i)}:{done:!1}});r(String.prototype,e,g[0]),r(d,f,g[1])}s&&l(d[f],`sham`,!0)}})),jt=e(((e,t)=>{var n=u(),r=me(),i=bt(),a=m(),o=n(``.charAt),s=n(``.charCodeAt),c=n(``.slice),l=function(e){return function(t,n){var l=i(a(t)),u=r(n),d=l.length,f,p;return u<0||u>=d?e?``:void 0:(f=s(l,u),f<55296||f>56319||u+1===d||(p=s(l,u+1))<56320||p>57343?e?o(l,u):f:e?c(l,u,u+2):(f-55296<<10)+(p-56320)+65536)}};t.exports={codeAt:l(!1),charAt:l(!0)}})),Mt=e(((e,t)=>{var n=jt().charAt;t.exports=function(e,t,r){return t+(r&&n(e,t).length||1)}})),Nt=e(((e,t)=>{var n=r(),a=i(),o=n.RegExp;t.exports={correct:!a(function(){var e=!0;try{o(`.`,`d`)}catch{e=!1}var t={},n=``,r=e?`dgimsy`:`gimsy`,i=function(e,r){Object.defineProperty(t,e,{get:function(){return n+=r,!0}})},a={dotAll:`s`,global:`g`,ignoreCase:`i`,multiline:`m`,sticky:`y`};for(var s in e&&(a.hasIndices=`d`),a)i(s,a[s]);return Object.getOwnPropertyDescriptor(o.prototype,`flags`).get.call(t)!==r||n!==r})}})),Pt=e(((e,t)=>{var n=s(),r=P(),i=y(),a=Nt(),o=xt(),c=RegExp.prototype;t.exports=a.correct?function(e){return e.flags}:function(e){return!a.correct&&i(c,e)&&!r(e,`flags`)?n(o,e):e.flags}})),Ft=e(((e,t)=>{var n=s(),r=B(),i=g(),a=d(),o=Ot(),c=TypeError;t.exports=function(e,t){var s=e.exec;if(i(s)){var l=n(s,e,t);return l!==null&&r(l),l}if(a(e)===`RegExp`)return n(o,e,t);throw new c(`RegExp#exec called on incompatible receiver`)}})),It=e((()=>{var e=s(),t=u(),n=At(),r=B(),i=_(),a=V(),o=bt(),c=m(),l=D(),d=Mt(),f=Pt(),p=Ft(),h=t(``.indexOf);n(`match`,function(t,n,s){return[function(n){var r=c(this),a=i(n)?l(n,t):void 0;return a?e(a,n,r):new RegExp(n)[t](o(r))},function(e){var t=r(this),i=o(e),c=s(n,t,i);if(c.done)return c.value;var l=o(f(t));if(!~h(l,`g`))return p(t,i);var u=!!~h(l,`u`)||!!~h(l,`v`);t.lastIndex=0;for(var m=[],g=0,_;(_=p(t,i))!==null;){var v=o(_[0]);m[g]=v,v===``&&(t.lastIndex=d(i,a(t.lastIndex),u)),g++}return g===0?null:m}]})})),Lt=e(((e,t)=>{var n=u(),r=N(),i=Math.floor,a=n(``.charAt),o=n(``.replace),s=n(``.slice),c=/\$([$&'`]|\d{1,2}|<[^>]*>)/g,l=/\$([$&'`]|\d{1,2})/g;t.exports=function(e,t,n,u,d,f){var p=n+e.length,m=u.length,h=l;return d!==void 0&&(d=r(d),h=c),o(f,h,function(r,o){var c;switch(a(o,0)){case`$`:return`$`;case`&`:return e;case"`":return s(t,0,n);case`'`:return s(t,p);case`<`:c=d[s(o,1,-1)];break;default:var l=+o;if(l===0)return r;if(l>m){var f=i(l/10);return f===0?r:f<=m?u[f-1]===void 0?a(o,1):u[f-1]+a(o,1):r}c=u[l-1]}return c===void 0?``:c})}})),Rt=e((()=>{var e=ze(),t=s(),n=u(),r=At(),a=i(),o=B(),c=g(),l=_(),d=me(),f=V(),p=bt(),h=m(),v=Mt(),y=D(),b=Lt(),x=Pt(),S=Ft(),C=I()(`replace`),w=Math.max,T=Math.min,E=n([].concat),O=n([].push),k=n(``.indexOf),A=n(``.slice),j=function(e){return e===void 0?e:String(e)},M=(function(){return`a`.replace(/./,`$0`)===`$0`})(),N=(function(){return/./[C]?/./[C](`a`,`$0`)===``:!1})();r(`replace`,function(n,r,i){var a=N?`$`:`$0`;return[function(e,n){var i=h(this),a=l(e)?y(e,C):void 0;return a?t(a,e,i,n):t(r,p(i),e,n)},function(t,n){var s=o(this),l=p(t),u=c(n);u||(n=p(n));var m=p(x(s));if(typeof n==`string`&&!~k(n,a)&&!~k(n,`$<`)&&!~k(m,`y`)){var h=i(r,s,l,n);if(h.done)return h.value}var g=!!~k(m,`g`),_;g&&(_=!!~k(m,`u`)||!!~k(m,`v`),s.lastIndex=0);for(var y=[],C;C=S(s,l),!(C===null||(O(y,C),!g));)p(C[0])===``&&(s.lastIndex=v(l,f(s.lastIndex),_));for(var D=``,M=0,N=0;N=M&&(D+=A(l,M,F)+L,M=F+P.length)}return D+A(l,M)}]},!!a(function(){var e=/./;return e.exec=function(){var e=[];return e.groups={a:`7`},e},``.replace(e,`$`)!==`7`})||!M||N)})),zt=e(((e,t)=>{var n=_(),r=d(),i=I()(`match`);t.exports=function(e){var t;return n(e)&&((t=e[i])===void 0?r(e)===`RegExp`:!!t)}})),Bt=e(((e,t)=>{var n=zt(),r=TypeError;t.exports=function(e){if(n(e))throw new r(`The method doesn't accept regular expressions`);return e}})),Vt=e(((e,t)=>{var n=I()(`match`);t.exports=function(e){var t=/./;try{`/./`[e](t)}catch{try{return t[n]=!1,`/./`[e](t)}catch{}}return!1}})),Ht=e((()=>{var e=U(),t=Be(),n=te().f,r=V(),i=bt(),a=Bt(),o=m(),s=Vt(),c=k(),l=t(``.slice),u=Math.min,d=s(`startsWith`);e({target:`String`,proto:!0,forced:!(!c&&!d&&function(){var e=n(String.prototype,`startsWith`);return e&&!e.writable}())&&!d},{startsWith:function(e){var t=i(o(this));a(e);var n=i(e),s=r(u(arguments.length>1?arguments[1]:void 0,t.length));return l(t,s,s+n.length)===n}})})),Ut=e(((e,t)=>{var n=I(),r=Tt(),i=re().f,a=n(`unscopables`),o=Array.prototype;o[a]===void 0&&i(o,a,{configurable:!0,value:r(null)}),t.exports=function(e){o[a][e]=!0}})),Wt=e(((e,t)=>{t.exports=!i()(function(){function e(){}return e.prototype.constructor=null,Object.getPrototypeOf(new e)!==e.prototype})})),Gt=e(((e,t)=>{var n=P(),r=g(),i=N(),a=ce(),o=Wt(),s=a(`IE_PROTO`),c=Object,l=c.prototype;t.exports=o?c.getPrototypeOf:function(e){var t=i(e);if(n(t,s))return t[s];var a=t.constructor;return r(a)&&t instanceof a?a.prototype:t instanceof c?l:null}})),Kt=e(((e,t)=>{var n=i(),r=g(),a=_(),o=Tt(),s=Gt(),c=fe(),l=I(),u=k(),d=l(`iterator`),f=!1,p,m,h;[].keys&&(h=[].keys(),`next`in h?(m=s(s(h)),m!==Object.prototype&&(p=m)):f=!0),!a(p)||n(function(){var e={};return p[d].call(e)!==e})?p={}:u&&(p=o(p)),r(p[d])||c(p,d,function(){return this}),t.exports={IteratorPrototype:p,BUGGY_SAFARI_ITERATORS:f}})),qt=e(((e,t)=>{var n=Kt().IteratorPrototype,r=Tt(),i=l(),a=je(),o=it(),s=function(){return this};t.exports=function(e,t,c,l){var u=t+` Iterator`;return e.prototype=r(n,{next:i(+!l,c)}),a(e,u,!1,!0),o[u]=s,e}})),Jt=e(((e,t)=>{var n=U(),r=s(),i=k(),a=ae(),o=g(),c=qt(),l=Gt(),u=Ae(),d=je(),f=ie(),p=fe(),m=I(),h=it(),_=Kt(),v=a.PROPER,y=a.CONFIGURABLE,b=_.IteratorPrototype,x=_.BUGGY_SAFARI_ITERATORS,S=m(`iterator`),C=`keys`,w=`values`,T=`entries`,E=function(){return this};t.exports=function(e,t,a,s,m,g,_){c(a,t,s);var D=function(e){if(e===m&&M)return M;if(!x&&e&&e in A)return A[e];switch(e){case C:return function(){return new a(this,e)};case w:return function(){return new a(this,e)};case T:return function(){return new a(this,e)}}return function(){return new a(this)}},O=t+` Iterator`,k=!1,A=e.prototype,j=A[S]||A[`@@iterator`]||m&&A[m],M=!x&&j||D(m),N=t===`Array`&&A.entries||j,P,F,I;if(N&&(P=l(N.call(new e)),P!==Object.prototype&&P.next&&(!i&&l(P)!==b&&(u?u(P,b):o(P[S])||p(P,S,E)),d(P,O,!0,!0),i&&(h[O]=E))),v&&m===w&&j&&j.name!==w&&(!i&&y?f(A,`name`,w):(k=!0,M=function(){return r(j,this)})),m)if(F={values:D(w),keys:g?M:D(C),entries:D(T)},_)for(I in F)(x||k||!(I in A))&&p(A,I,F[I]);else n({target:t,proto:!0,forced:x||k},F);return(!i||_)&&A[S]!==M&&p(A,S,M,{name:m}),h[t]=M,F}})),Yt=e(((e,t)=>{t.exports=function(e,t){return{value:e,done:t}}})),Xt=e(((e,t)=>{var n=h(),r=Ut(),i=it(),o=ue(),s=re().f,c=Jt(),l=Yt(),u=k(),d=a(),f=`Array Iterator`,p=o.set,m=o.getterFor(f);t.exports=c(Array,`Array`,function(e,t){p(this,{type:f,target:n(e),index:0,kind:t})},function(){var e=m(this),t=e.target,n=e.index++;if(!t||n>=t.length)return e.target=null,l(void 0,!0);switch(e.kind){case`keys`:return l(n,!1);case`values`:return l(t[n],!1)}return l([n,t[n]],!1)},`values`);var g=i.Arguments=i.Array;if(r(`keys`),r(`values`),r(`entries`),!u&&d&&g.name!==`values`)try{s(g,`name`,{value:`values`})}catch{}})),Zt=e(((e,t)=>{t.exports={CSSRuleList:0,CSSStyleDeclaration:0,CSSValueList:0,ClientRectList:0,DOMRectList:0,DOMStringList:0,DOMTokenList:1,DataTransferItemList:0,FileList:0,HTMLAllCollection:0,HTMLCollection:0,HTMLFormElement:0,HTMLSelectElement:0,MediaList:0,MimeTypeArray:0,NamedNodeMap:0,NodeList:1,PaintRequestList:0,Plugin:0,PluginArray:0,SVGLengthList:0,SVGNumberList:0,SVGPathSegList:0,SVGPointList:0,SVGStringList:0,SVGTransformList:0,SourceBufferList:0,StyleSheetList:0,TextTrackCueList:0,TextTrackList:0,TouchList:0}})),Qt=e(((e,t)=>{var n=z()(`span`).classList,r=n&&n.constructor&&n.constructor.prototype;t.exports=r===Object.prototype?void 0:r})),$t=e((()=>{var e=r(),t=Zt(),n=Qt(),i=Xt(),a=ie(),o=je(),s=I()(`iterator`),c=i.values,l=function(e,n){if(e){if(e[s]!==c)try{a(e,s,c)}catch{e[s]=c}if(o(e,n,!0),t[n]){for(var r in i)if(e[r]!==i[r])try{a(e,r,i[r])}catch{e[r]=i[r]}}}};for(var u in t)l(e[u]&&e[u].prototype,u);l(n,`DOMTokenList`)}));It(),Rt(),Ht(),Xt(),$t();function en(e,t){if(n(e)!=`object`||!e)return e;var r=e[Symbol.toPrimitive];if(r!==void 0){var i=r.call(e,t||`default`);if(n(i)!=`object`)return i;throw TypeError(`@@toPrimitive must return a primitive value.`)}return(t===`string`?String:Number)(e)}function tn(e){var t=en(e,`string`);return n(t)==`symbol`?t:t+``}function nn(e,t,n){return(t=tn(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}var rn=e(((e,t)=>{var n=E(),r=N(),i=f(),a=ge(),o=TypeError,s=`Reduce of empty array with no initial value`,c=function(e){return function(t,c,l,u){var d=r(t),f=i(d),p=a(d);if(n(c),p===0&&l<2)throw new o(s);var m=e?p-1:0,h=e?-1:1;if(l<2)for(;;){if(m in f){u=f[m],m+=h;break}if(m+=h,e?m<0:p<=m)throw new o(s)}for(;e?m>=0:p>m;m+=h)m in f&&(u=c(u,f[m],m,d));return u}};t.exports={left:c(!1),right:c(!0)}})),an=e(((e,t)=>{var n=i();t.exports=function(e,t){var r=[][e];return!!r&&n(function(){r.call(null,t||function(){return 1},1)})}})),on=e((()=>{var e=U(),t=rn().left,n=an(),r=x();e({target:`Array`,proto:!0,forced:!Te()&&r>79&&r<83||!n(`reduce`)},{reduce:function(e){var n=arguments.length;return t(this,e,n,n>1?arguments[1]:void 0)}})})),sn=e((()=>{var e=U(),t=Be(),n=te().f,r=V(),i=bt(),a=Bt(),o=m(),s=Vt(),c=k(),l=t(``.slice),u=Math.min,d=s(`endsWith`);e({target:`String`,proto:!0,forced:!(!c&&!d&&function(){var e=n(String.prototype,`endsWith`);return e&&!e.writable}())&&!d},{endsWith:function(e){var t=i(o(this));a(e);var n=i(e),s=arguments.length>1?arguments[1]:void 0,c=t.length,d=s===void 0?c:u(r(s),c);return l(t,d-n.length,d)===n}})})),cn=e((()=>{var e=s(),t=u(),n=At(),r=B(),a=_(),o=m(),c=Re(),l=Mt(),d=V(),f=bt(),p=D(),h=Pt(),g=Ft(),v=St(),y=i(),b=v.UNSUPPORTED_Y,x=4294967295,S=Math.min,C=t([].push),w=t(``.slice),T=t(``.indexOf),E=!y(function(){var e=/(?:)/,t=e.exec;e.exec=function(){return t.apply(this,arguments)};var n=`ab`.split(e);return n.length!==2||n[0]!==`a`||n[1]!==`b`}),O=`abbc`.split(/(b)*/)[1]===`c`||`test`.split(/(?:)/,-1).length!==4||`ab`.split(/(?:ab)*/).length!==2||`.`.split(/(.?)(.?)/).length!==4||`.`.split(/()()/).length>1||``.split(/.?/).length;n(`split`,function(t,n,i){var s=`0`.split(void 0,0).length?function(t,r){return t===void 0&&r===0?[]:e(n,this,t,r)}:n;return[function(n,r){var i=o(this),c=a(n)?p(n,t):void 0;return c?e(c,n,i,r):e(s,f(i),n,r)},function(e,t){var a=r(this),o=f(e);if(!O){var u=i(s,a,o,t,s!==n);if(u.done)return u.value}var p=c(a,RegExp),m=f(h(a)),_=!!~T(m,`u`)||!!~T(m,`v`);b?~T(m,`g`)||(m+=`g`):~T(m,`y`)||(m+=`y`);var v=new p(b?`^(?:`+a.source+`)`:a,m),y=t===void 0?x:t>>>0;if(y===0)return[];if(o.length===0)return g(v,o)===null?[o]:[];for(var E=0,D=0,k=[];D{(function(){var e,n,r,i,a,o;typeof performance<`u`&&performance!==null&&performance.now?t.exports=function(){return performance.now()}:typeof process<`u`&&process!==null&&process.hrtime?(t.exports=function(){return(e()-a)/1e6},n=process.hrtime,e=function(){var e=n();return e[0]*1e9+e[1]},i=e(),o=process.uptime()*1e9,a=i-o):Date.now?(t.exports=function(){return Date.now()-r},r=Date.now()):(t.exports=function(){return new Date().getTime()-r},r=new Date().getTime())}).call(e)})),un=e(((e,t)=>{for(var n=ln(),r=typeof window>`u`?global:window,i=[`moz`,`webkit`],a=`AnimationFrame`,o=r[`request`+a],s=r[`cancel`+a]||r[`cancelRequest`+a],c=0;!o&&c{t.exports=` -\v\f\r \xA0               \u2028\u2029`})),fn=e(((e,t)=>{var n=u(),r=m(),i=bt(),a=dn(),o=n(``.replace),s=RegExp(`^[`+a+`]+`),c=RegExp(`(^|[^`+a+`])[`+a+`]+$`),l=function(e){return function(t){var n=i(r(t));return e&1&&(n=o(n,s,``)),e&2&&(n=o(n,c,`$1`)),n}};t.exports={start:l(1),end:l(2),trim:l(3)}})),pn=e(((e,t)=>{var n=ae().PROPER,r=i(),a=dn(),o=`​…᠎`;t.exports=function(e){return r(function(){return!!a[e]()||o[e]()!==o||n&&a[e].name!==e})}})),mn=e((()=>{var e=U(),t=fn().trim;e({target:`String`,proto:!0,forced:pn()(`trim`)},{trim:function(){return t(this)}})})),hn=e(((e,t)=>{t.exports=function(e){this.ok=!1,this.alpha=1,e.charAt(0)==`#`&&(e=e.substr(1,6)),e=e.replace(/ /g,``),e=e.toLowerCase();var t={aliceblue:`f0f8ff`,antiquewhite:`faebd7`,aqua:`00ffff`,aquamarine:`7fffd4`,azure:`f0ffff`,beige:`f5f5dc`,bisque:`ffe4c4`,black:`000000`,blanchedalmond:`ffebcd`,blue:`0000ff`,blueviolet:`8a2be2`,brown:`a52a2a`,burlywood:`deb887`,cadetblue:`5f9ea0`,chartreuse:`7fff00`,chocolate:`d2691e`,coral:`ff7f50`,cornflowerblue:`6495ed`,cornsilk:`fff8dc`,crimson:`dc143c`,cyan:`00ffff`,darkblue:`00008b`,darkcyan:`008b8b`,darkgoldenrod:`b8860b`,darkgray:`a9a9a9`,darkgreen:`006400`,darkkhaki:`bdb76b`,darkmagenta:`8b008b`,darkolivegreen:`556b2f`,darkorange:`ff8c00`,darkorchid:`9932cc`,darkred:`8b0000`,darksalmon:`e9967a`,darkseagreen:`8fbc8f`,darkslateblue:`483d8b`,darkslategray:`2f4f4f`,darkturquoise:`00ced1`,darkviolet:`9400d3`,deeppink:`ff1493`,deepskyblue:`00bfff`,dimgray:`696969`,dodgerblue:`1e90ff`,feldspar:`d19275`,firebrick:`b22222`,floralwhite:`fffaf0`,forestgreen:`228b22`,fuchsia:`ff00ff`,gainsboro:`dcdcdc`,ghostwhite:`f8f8ff`,gold:`ffd700`,goldenrod:`daa520`,gray:`808080`,green:`008000`,greenyellow:`adff2f`,honeydew:`f0fff0`,hotpink:`ff69b4`,indianred:`cd5c5c`,indigo:`4b0082`,ivory:`fffff0`,khaki:`f0e68c`,lavender:`e6e6fa`,lavenderblush:`fff0f5`,lawngreen:`7cfc00`,lemonchiffon:`fffacd`,lightblue:`add8e6`,lightcoral:`f08080`,lightcyan:`e0ffff`,lightgoldenrodyellow:`fafad2`,lightgrey:`d3d3d3`,lightgreen:`90ee90`,lightpink:`ffb6c1`,lightsalmon:`ffa07a`,lightseagreen:`20b2aa`,lightskyblue:`87cefa`,lightslateblue:`8470ff`,lightslategray:`778899`,lightsteelblue:`b0c4de`,lightyellow:`ffffe0`,lime:`00ff00`,limegreen:`32cd32`,linen:`faf0e6`,magenta:`ff00ff`,maroon:`800000`,mediumaquamarine:`66cdaa`,mediumblue:`0000cd`,mediumorchid:`ba55d3`,mediumpurple:`9370d8`,mediumseagreen:`3cb371`,mediumslateblue:`7b68ee`,mediumspringgreen:`00fa9a`,mediumturquoise:`48d1cc`,mediumvioletred:`c71585`,midnightblue:`191970`,mintcream:`f5fffa`,mistyrose:`ffe4e1`,moccasin:`ffe4b5`,navajowhite:`ffdead`,navy:`000080`,oldlace:`fdf5e6`,olive:`808000`,olivedrab:`6b8e23`,orange:`ffa500`,orangered:`ff4500`,orchid:`da70d6`,palegoldenrod:`eee8aa`,palegreen:`98fb98`,paleturquoise:`afeeee`,palevioletred:`d87093`,papayawhip:`ffefd5`,peachpuff:`ffdab9`,peru:`cd853f`,pink:`ffc0cb`,plum:`dda0dd`,powderblue:`b0e0e6`,purple:`800080`,rebeccapurple:`663399`,red:`ff0000`,rosybrown:`bc8f8f`,royalblue:`4169e1`,saddlebrown:`8b4513`,salmon:`fa8072`,sandybrown:`f4a460`,seagreen:`2e8b57`,seashell:`fff5ee`,sienna:`a0522d`,silver:`c0c0c0`,skyblue:`87ceeb`,slateblue:`6a5acd`,slategray:`708090`,snow:`fffafa`,springgreen:`00ff7f`,steelblue:`4682b4`,tan:`d2b48c`,teal:`008080`,thistle:`d8bfd8`,tomato:`ff6347`,turquoise:`40e0d0`,violet:`ee82ee`,violetred:`d02090`,wheat:`f5deb3`,white:`ffffff`,whitesmoke:`f5f5f5`,yellow:`ffff00`,yellowgreen:`9acd32`};e=t[e]||e;for(var n=[{re:/^rgba\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3}),\s*((?:\d?\.)?\d)\)$/,example:[`rgba(123, 234, 45, 0.8)`,`rgba(255,234,245,1.0)`],process:function(e){return[parseInt(e[1]),parseInt(e[2]),parseInt(e[3]),parseFloat(e[4])]}},{re:/^rgb\((\d{1,3}),\s*(\d{1,3}),\s*(\d{1,3})\)$/,example:[`rgb(123, 234, 45)`,`rgb(255,234,245)`],process:function(e){return[parseInt(e[1]),parseInt(e[2]),parseInt(e[3])]}},{re:/^([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,example:[`#00ff00`,`336699`],process:function(e){return[parseInt(e[1],16),parseInt(e[2],16),parseInt(e[3],16)]}},{re:/^([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,example:[`#fb0`,`f0f`],process:function(e){return[parseInt(e[1]+e[1],16),parseInt(e[2]+e[2],16),parseInt(e[3]+e[3],16)]}}],r=0;r3&&(this.alpha=s[3]),this.ok=!0}}this.r=this.r<0||isNaN(this.r)?0:this.r>255?255:this.r,this.g=this.g<0||isNaN(this.g)?0:this.g>255?255:this.g,this.b=this.b<0||isNaN(this.b)?0:this.b>255?255:this.b,this.alpha=this.alpha<0?0:this.alpha>1||isNaN(this.alpha)?1:this.alpha,this.toRGB=function(){return`rgb(`+this.r+`, `+this.g+`, `+this.b+`)`},this.toRGBA=function(){return`rgba(`+this.r+`, `+this.g+`, `+this.b+`, `+this.alpha+`)`},this.toHex=function(){var e=this.r.toString(16),t=this.g.toString(16),n=this.b.toString(16);return e.length==1&&(e=`0`+e),t.length==1&&(t=`0`+t),n.length==1&&(n=`0`+n),`#`+e+t+n},this.getHelpXML=function(){for(var e=[],r=0;r `+l.toRGB()+` -> `+l.toHex());c.appendChild(u),c.appendChild(d),s.appendChild(c)}catch{}return s}}})),gn=e((()=>{var e=U(),t=Be(),n=_e().indexOf,r=an(),i=t([].indexOf),a=!!i&&1/i([1],1,-0)<0;e({target:`Array`,proto:!0,forced:a||!r(`indexOf`)},{indexOf:function(e){var t=arguments.length>1?arguments[1]:void 0;return a?i(this,e,t)||0:n(this,e,t)}})})),_n=e((()=>{var e=U(),t=u(),n=Bt(),r=m(),i=bt(),a=Vt(),o=t(``.indexOf);e({target:`String`,proto:!0,forced:!a(`includes`)},{includes:function(e){return!!~o(i(r(this)),i(n(e)),arguments.length>1?arguments[1]:void 0)}})})),vn=e(((e,t)=>{var n=d();t.exports=Array.isArray||function(e){return n(e)===`Array`}})),yn=e((()=>{var e=U(),t=u(),n=vn(),r=t([].reverse),i=[1,2];e({target:`Array`,proto:!0,forced:String(i)===String(i.reverse())},{reverse:function(){return n(this)&&(this.length=this.length),r(this)}})}));on(),sn(),cn();var bn=t(un(),1);mn();var xn=t(hn(),1);gn(),_n(),yn();var Sn=function(e,t){return(Sn=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var n in t)Object.prototype.hasOwnProperty.call(t,n)&&(e[n]=t[n])})(e,t)};function Cn(e,t){if(typeof t!=`function`&&t!==null)throw TypeError(`Class extends value `+String(t)+` is not a constructor or null`);function n(){this.constructor=e}Sn(e,t),e.prototype=t===null?Object.create(t):(n.prototype=t.prototype,new n)}function wn(e){var t=``;Array.isArray(e)||(e=[e]);for(var n=0;ne.phi1&&(e.phi2-=2*Dn),e.sweepFlag===1&&e.phi2r)return[];if(r===0)return[[e*n/(e*e+t*t),t*n/(e*e+t*t)]];var i=Math.sqrt(r);return[[(e*n+t*i)/(e*e+t*t),(t*n-e*i)/(e*e+t*t)],[(e*n-t*i)/(e*e+t*t),(t*n+e*i)/(e*e+t*t)]]}var G,An=Math.PI/180;function jn(e,t,n){return(1-n)*e+n*t}function Mn(e,t,n,r){return e+Math.cos(r/180*Dn)*t+Math.sin(r/180*Dn)*n}function Nn(e,t,n,r){var i=1e-6,a=t-e,o=n-t,s=3*a+3*(r-n)-6*o,c=6*(o-a),l=3*a;return Math.abs(s)g&&(i.sweepFlag=+!i.sweepFlag),i}))}function o(){return function(e){var t={};for(var n in e)t[n]=e[n];return t}}e.ROUND=function(e){function t(t){return Math.round(t*e)/e}return e===void 0&&(e=0x9184e72a000),En(e),function(e){return e.x1!==void 0&&(e.x1=t(e.x1)),e.y1!==void 0&&(e.y1=t(e.y1)),e.x2!==void 0&&(e.x2=t(e.x2)),e.y2!==void 0&&(e.y2=t(e.y2)),e.x!==void 0&&(e.x=t(e.x)),e.y!==void 0&&(e.y=t(e.y)),e.rX!==void 0&&(e.rX=t(e.rX)),e.rY!==void 0&&(e.rY=t(e.rY)),e}},e.TO_ABS=t,e.TO_REL=function(){return i((function(e,t,n){return e.relative||=(e.x1!==void 0&&(e.x1-=t),e.y1!==void 0&&(e.y1-=n),e.x2!==void 0&&(e.x2-=t),e.y2!==void 0&&(e.y2-=n),e.x!==void 0&&(e.x-=t),e.y!==void 0&&(e.y-=n),!0),e}))},e.NORMALIZE_HVZ=function(e,t,n){return e===void 0&&(e=!0),t===void 0&&(t=!0),n===void 0&&(n=!0),i((function(r,i,a,o,s){if(isNaN(o)&&!(r.type&K.MOVE_TO))throw Error(`path must start with moveto`);return t&&r.type&K.HORIZ_LINE_TO&&(r.type=K.LINE_TO,r.y=r.relative?0:a),n&&r.type&K.VERT_LINE_TO&&(r.type=K.LINE_TO,r.x=r.relative?0:i),e&&r.type&K.CLOSE_PATH&&(r.type=K.LINE_TO,r.x=r.relative?o-i:o,r.y=r.relative?s-a:s),r.type&K.ARC&&(r.rX===0||r.rY===0)&&(r.type=K.LINE_TO,delete r.rX,delete r.rY,delete r.xRot,delete r.lArcFlag,delete r.sweepFlag),r}))},e.NORMALIZE_ST=n,e.QT_TO_C=r,e.INFO=i,e.SANITIZE=function(e){e===void 0&&(e=0),En(e);var t=NaN,n=NaN,r=NaN,a=NaN;return i((function(i,o,s,c,l){var u=Math.abs,d=!1,f=0,p=0;if(i.type&K.SMOOTH_CURVE_TO&&(f=isNaN(t)?0:o-t,p=isNaN(n)?0:s-n),i.type&(K.CURVE_TO|K.SMOOTH_CURVE_TO)?(t=i.relative?o+i.x2:i.x2,n=i.relative?s+i.y2:i.y2):(t=NaN,n=NaN),i.type&K.SMOOTH_QUAD_TO?(r=isNaN(r)?o:2*o-r,a=isNaN(a)?s:2*s-a):i.type&K.QUAD_TO?(r=i.relative?o+i.x1:i.x1,a=i.relative?s+i.y1:i.y2):(r=NaN,a=NaN),i.type&K.LINE_COMMANDS||i.type&K.ARC&&(i.rX===0||i.rY===0||!i.lArcFlag)||i.type&K.CURVE_TO||i.type&K.SMOOTH_CURVE_TO||i.type&K.QUAD_TO||i.type&K.SMOOTH_QUAD_TO){var m=i.x===void 0?0:i.relative?i.x:i.x-o,h=i.y===void 0?0:i.relative?i.y:i.y-s;f=isNaN(r)?i.x1===void 0?f:i.relative?i.x:i.x1-o:r-o,p=isNaN(a)?i.y1===void 0?p:i.relative?i.y:i.y1-s:a-s;var g=i.x2===void 0?0:i.relative?i.x:i.x2-o,_=i.y2===void 0?0:i.relative?i.y:i.y2-s;u(m)<=e&&u(h)<=e&&u(f)<=e&&u(p)<=e&&u(g)<=e&&u(_)<=e&&(d=!0)}return i.type&K.CLOSE_PATH&&u(o-c)<=e&&u(s-l)<=e&&(d=!0),d?[]:i}))},e.MATRIX=a,e.ROTATE=function(e,t,n){t===void 0&&(t=0),n===void 0&&(n=0),En(e,t,n);var r=Math.sin(e),i=Math.cos(e);return a(i,r,-r,i,t-t*i+n*r,n-t*r-n*i)},e.TRANSLATE=function(e,t){return t===void 0&&(t=0),En(e,t),a(1,0,0,1,e,t)},e.SCALE=function(e,t){return t===void 0&&(t=e),En(e,t),a(e,0,0,t,0,0)},e.SKEW_X=function(e){return En(e),a(1,0,Math.atan(e),1,0,0)},e.SKEW_Y=function(e){return En(e),a(1,Math.atan(e),0,1,0,0)},e.X_AXIS_SYMMETRY=function(e){return e===void 0&&(e=0),En(e),a(-1,0,0,1,e,0)},e.Y_AXIS_SYMMETRY=function(e){return e===void 0&&(e=0),En(e),a(1,0,0,-1,0,e)},e.A_TO_C=function(){return i((function(e,t,n){return K.ARC===e.type?function(e,t,n){var r,i,a,o;e.cX||On(e,t,n);for(var s=Math.min(e.phi1,e.phi2),c=Math.max(e.phi1,e.phi2)-s,l=Math.ceil(c/90),u=Array(l),d=t,f=n,p=0;pc.maxX&&(c.maxX=e),ec.maxY&&(c.maxY=e),eO&&l(Pn(n,i.x1,i.x2,i.x,O));for(var p=0,m=Nn(r,i.y1,i.y2,i.y);pO&&u(Pn(r,i.y1,i.y2,i.y,O))}if(i.type&K.ARC){l(i.x),u(i.y),On(i,n,r);for(var h=i.xRot/180*Math.PI,g=Math.cos(h)*i.rX,_=Math.sin(h)*i.rX,v=-Math.sin(h)*i.rY,y=Math.cos(h)*i.rY,b=i.phi1i.phi2?[i.phi2+360,i.phi1+360]:[i.phi2,i.phi1],x=b[0],S=b[1],C=function(e){var t=e[0],n=e[1],r=180*Math.atan2(n,t)/Math.PI;return rx&&Ox&&Oc)throw SyntaxError(`Expected positive number, got "`+c+`" at index "`+i+`"`)}else if((this.curArgs.length===3||this.curArgs.length===4)&&this.curNumber!==`0`&&this.curNumber!==`1`)throw SyntaxError(`Expected a flag, got "`+this.curNumber+`" at index "`+i+`"`)}this.curArgs.push(c),this.curArgs.length===Bn[this.curCommandType]&&(K.HORIZ_LINE_TO===this.curCommandType?r({type:K.HORIZ_LINE_TO,relative:this.curCommandRelative,x:c}):K.VERT_LINE_TO===this.curCommandType?r({type:K.VERT_LINE_TO,relative:this.curCommandRelative,y:c}):this.curCommandType===K.MOVE_TO||this.curCommandType===K.LINE_TO||this.curCommandType===K.SMOOTH_QUAD_TO?(r({type:this.curCommandType,relative:this.curCommandRelative,x:this.curArgs[0],y:this.curArgs[1]}),K.MOVE_TO===this.curCommandType&&(this.curCommandType=K.LINE_TO)):this.curCommandType===K.CURVE_TO?r({type:K.CURVE_TO,relative:this.curCommandRelative,x1:this.curArgs[0],y1:this.curArgs[1],x2:this.curArgs[2],y2:this.curArgs[3],x:this.curArgs[4],y:this.curArgs[5]}):this.curCommandType===K.SMOOTH_CURVE_TO?r({type:K.SMOOTH_CURVE_TO,relative:this.curCommandRelative,x2:this.curArgs[0],y2:this.curArgs[1],x:this.curArgs[2],y:this.curArgs[3]}):this.curCommandType===K.QUAD_TO?r({type:K.QUAD_TO,relative:this.curCommandRelative,x1:this.curArgs[0],y1:this.curArgs[1],x:this.curArgs[2],y:this.curArgs[3]}):this.curCommandType===K.ARC&&r({type:K.ARC,relative:this.curCommandRelative,rX:this.curArgs[0],rY:this.curArgs[1],xRot:this.curArgs[2],lArcFlag:this.curArgs[3],sweepFlag:this.curArgs[4],x:this.curArgs[5],y:this.curArgs[6]})),this.curNumber=``,this.curNumberHasExpDigits=!1,this.curNumberHasExp=!1,this.curNumberHasDecimal=!1,this.canParseCommandOrComma=!0}if(!Ln(a))if(a===`,`&&this.canParseCommandOrComma)this.canParseCommandOrComma=!1;else if(a!==`+`&&a!==`-`&&a!==`.`)if(s)this.curNumber=a,this.curNumberHasDecimal=!1;else{if(this.curArgs.length!==0)throw SyntaxError(`Unterminated command at index `+i+`.`);if(!this.canParseCommandOrComma)throw SyntaxError(`Unexpected character "`+a+`" at index `+i+`. Command cannot follow comma`);if(this.canParseCommandOrComma=!1,a!==`z`&&a!==`Z`)if(a===`h`||a===`H`)this.curCommandType=K.HORIZ_LINE_TO,this.curCommandRelative=a===`h`;else if(a===`v`||a===`V`)this.curCommandType=K.VERT_LINE_TO,this.curCommandRelative=a===`v`;else if(a===`m`||a===`M`)this.curCommandType=K.MOVE_TO,this.curCommandRelative=a===`m`;else if(a===`l`||a===`L`)this.curCommandType=K.LINE_TO,this.curCommandRelative=a===`l`;else if(a===`c`||a===`C`)this.curCommandType=K.CURVE_TO,this.curCommandRelative=a===`c`;else if(a===`s`||a===`S`)this.curCommandType=K.SMOOTH_CURVE_TO,this.curCommandRelative=a===`s`;else if(a===`q`||a===`Q`)this.curCommandType=K.QUAD_TO,this.curCommandRelative=a===`q`;else if(a===`t`||a===`T`)this.curCommandType=K.SMOOTH_QUAD_TO,this.curCommandRelative=a===`t`;else{if(a!==`a`&&a!==`A`)throw SyntaxError(`Unexpected character "`+a+`" at index `+i+`.`);this.curCommandType=K.ARC,this.curCommandRelative=a===`a`}else t.push({type:K.CLOSE_PATH}),this.canParseCommandOrComma=!0,this.curCommandType=-1}else this.curNumber=a,this.curNumberHasDecimal=a===`.`}else this.curNumber+=a,this.curNumberHasDecimal=!0;else this.curNumber+=a;else this.curNumber+=a,this.curNumberHasExp=!0;else this.curNumber+=a,this.curNumberHasExpDigits=this.curNumberHasExp}return t},t.prototype.transform=function(e){return Object.create(this,{parse:{value:function(t,n){n===void 0&&(n=[]);for(var r=0,i=Object.getPrototypeOf(this).parse.call(this,t);r{var e=ae().PROPER,t=fe(),n=B(),r=bt(),a=i(),o=Pt(),s=`toString`,c=RegExp.prototype,l=c[s],u=a(function(){return l.call({source:`a`,flags:`b`})!==`/a/b`}),d=e&&l.name!==s;(u||d)&&t(c,s,function(){var e=n(this),t=r(e.source),i=r(o(e));return`/`+t+`/`+i},{unsafe:!0})}))();function Vn(e){"@babel/helpers - typeof";return Vn=typeof Symbol==`function`&&typeof Symbol.iterator==`symbol`?function(e){return typeof e}:function(e){return e&&typeof Symbol==`function`&&e.constructor===Symbol&&e!==Symbol.prototype?`symbol`:typeof e},Vn(e)}function Hn(e,t){if(!(e instanceof t))throw TypeError(`Cannot call a class as a function`)}var Un=[512,512,456,512,328,456,335,512,405,328,271,456,388,335,292,512,454,405,364,328,298,271,496,456,420,388,360,335,312,292,273,512,482,454,428,405,383,364,345,328,312,298,284,271,259,496,475,456,437,420,404,388,374,360,347,335,323,312,302,292,282,273,265,512,497,482,468,454,441,428,417,405,394,383,373,364,354,345,337,328,320,312,305,298,291,284,278,271,265,259,507,496,485,475,465,456,446,437,428,420,412,404,396,388,381,374,367,360,354,347,341,335,329,323,318,312,307,302,297,292,287,282,278,273,269,265,261,512,505,497,489,482,475,468,461,454,447,441,435,428,422,417,411,405,399,394,389,383,378,373,368,364,359,354,350,345,341,337,332,328,324,320,316,312,309,305,301,298,294,291,287,284,281,278,274,271,268,265,262,259,257,507,501,496,491,485,480,475,470,465,460,456,451,446,442,437,433,428,424,420,416,412,408,404,400,396,392,388,385,381,377,374,370,367,363,360,357,354,350,347,344,341,338,335,332,329,326,323,320,318,315,312,310,307,304,302,299,297,294,292,289,287,285,282,280,278,275,273,271,269,267,265,263,261,259],Wn=[9,11,12,13,13,14,14,15,15,15,15,16,16,16,16,17,17,17,17,17,17,17,18,18,18,18,18,18,18,18,18,19,19,19,19,19,19,19,19,19,19,19,19,19,19,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,20,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,21,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,23,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24,24];function Gn(e,t,n,r,i){if(typeof e==`string`&&(e=document.getElementById(e)),!e||Vn(e)!==`object`||!(`getContext`in e))throw TypeError("Expecting canvas with `getContext` method in processCanvasRGB(A) calls!");var a=e.getContext(`2d`);try{return a.getImageData(t,n,r,i)}catch(e){throw Error(`unable to access image data: `+e)}}function Kn(e,t,n,r,i,a){if(!(isNaN(a)||a<1)){a|=0;var o=Gn(e,t,n,r,i);o=qn(o,t,n,r,i,a),e.getContext(`2d`).putImageData(o,t,n)}}function qn(e,t,n,r,i,a){for(var o=e.data,s=2*a+1,c=r-1,l=i-1,u=a+1,d=u*(u+1)/2,f=new Jn,p=f,m,h=1;h>>x;if(o[y+3]=se,se!==0){var ce=255/se;o[y]=(I*b>>>x)*ce,o[y+1]=(L*b>>>x)*ce,o[y+2]=(R*b>>>x)*ce}else o[y]=o[y+1]=o[y+2]=0;I-=M,L-=N,R-=P,z-=F,M-=g.r,N-=g.g,P-=g.b,F-=g.a;var le=oe+a+1;le=v+(le>>x,H>0?(H=255/H,o[W]=(Se*b>>>x)*H,o[W+1]=(Ce*b>>>x)*H,o[W+2]=(U*b>>>x)*H):o[W]=o[W+1]=o[W+2]=0,Se-=ve,Ce-=ye,U-=be,we-=xe,ve-=g.r,ye-=g.g,be-=g.b,xe-=g.a,W=he+((W=Ne+u)0&&arguments[0]!==void 0?arguments[0]:{},t={window:null,ignoreAnimation:!0,ignoreMouse:!0,DOMParser:e,createCanvas(e,t){return new OffscreenCanvas(e,t)},createImage(e){return yt(function*(){var t=yield(yield fetch(e)).blob();return yield createImageBitmap(t)})()}};return(typeof DOMParser<`u`||e===void 0)&&Reflect.deleteProperty(t,`DOMParser`),t}function Xn(e){var{DOMParser:t,canvas:n,fetch:r}=e;return{window:null,ignoreAnimation:!0,ignoreMouse:!0,DOMParser:t,fetch:r,createCanvas:n.createCanvas,createImage:n.loadImage}}var Zn=Object.freeze({__proto__:null,offscreen:Yn,node:Xn});function Qn(e){return e.replace(/(?!\u3000)\s+/gm,` `)}function $n(e){return e.replace(/^[\n \t]+/,``)}function er(e){return e.replace(/[\n \t]+$/,``)}function q(e){return((e||``).match(/-?(\d+(?:\.\d*(?:[eE][+-]?\d+)?)?|\.\d+)(?=\D|$)/gm)||[]).map(parseFloat)}var tr=/^[A-Z-]+$/;function nr(e){return tr.test(e)?e.toLowerCase():e}function rr(e){var t=/url\(('([^']+)'|"([^"]+)"|([^'")]+))\)/.exec(e)||[];return t[2]||t[3]||t[4]}function ir(e){if(!e.startsWith(`rgb`))return e;var t=3;return e.replace(/\d+(\.\d+)?/g,(e,n)=>t--&&n?String(Math.round(parseFloat(e))):e)}var ar=/(\[[^\]]+\])/g,or=/(#[^\s+>~.[:]+)/g,sr=/(\.[^\s+>~.[:]+)/g,cr=/(::[^\s+>~.[:]+|:first-line|:first-letter|:before|:after)/gi,lr=/(:[\w-]+\([^)]*\))/gi,ur=/(:[^\s+>~.[:]+)/g,dr=/([^\s+>~.[:]+)/g;function fr(e,t){var n=t.exec(e);return n?[e.replace(t,` `),n.length]:[e,0]}function pr(e){var t=[0,0,0],n=e.replace(/:not\(([^)]*)\)/g,` $1 `).replace(/{[\s\S]*/gm,` `),r=0;return[n,r]=fr(n,ar),t[1]+=r,[n,r]=fr(n,or),t[0]+=r,[n,r]=fr(n,sr),t[1]+=r,[n,r]=fr(n,cr),t[2]+=r,[n,r]=fr(n,lr),t[1]+=r,[n,r]=fr(n,ur),t[1]+=r,n=n.replace(/[*\s+>~]/g,` `).replace(/[#.]/g,` `),[n,r]=fr(n,dr),t[2]+=r,t.join(``)}var mr=1e-8;function hr(e){return Math.sqrt(e[0]**2+e[1]**2)}function gr(e,t){return(e[0]*t[0]+e[1]*t[1])/(hr(e)*hr(t))}function _r(e,t){return(e[0]*t[1]0&&arguments[0]!==void 0?arguments[0]:` `,{document:n,name:r}=this;return Qn(this.getString()).trim().split(t).map(t=>new e(n,r,t))}hasValue(e){var{value:t}=this;return t!==null&&t!==``&&(e||t!==0)&&t!==void 0}isString(e){var{value:t}=this,n=typeof t==`string`;return!n||!e?n:e.test(t)}isUrlDefinition(){return this.isString(/^url\(/)}isPixels(){if(!this.hasValue())return!1;var e=this.getString();switch(!0){case e.endsWith(`px`):case/^[0-9]+$/.test(e):return!0;default:return!1}}setValue(e){return this.value=e,this}getValue(e){return e===void 0||this.hasValue()?this.value:e}getNumber(e){if(!this.hasValue())return e===void 0?0:parseFloat(e);var{value:t}=this,n=parseFloat(t);return this.isString(/%$/)&&(n/=100),n}getString(e){return e===void 0||this.hasValue()?this.value===void 0?``:String(this.value):String(e)}getColor(e){var t=this.getString(e);return this.isNormalizedColor?t:(this.isNormalizedColor=!0,t=ir(t),this.value=t,t)}getDpi(){return 96}getRem(){return this.document.rootEmSize}getEm(){return this.document.emSize}getUnits(){return this.getString().replace(/[0-9.-]/g,``)}getPixels(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;if(!this.hasValue())return 0;var[n,r]=typeof e==`boolean`?[void 0,e]:[e],{viewPort:i}=this.document.screen;switch(!0){case this.isString(/vmin$/):return this.getNumber()/100*Math.min(i.computeSize(`x`),i.computeSize(`y`));case this.isString(/vmax$/):return this.getNumber()/100*Math.max(i.computeSize(`x`),i.computeSize(`y`));case this.isString(/vw$/):return this.getNumber()/100*i.computeSize(`x`);case this.isString(/vh$/):return this.getNumber()/100*i.computeSize(`y`);case this.isString(/rem$/):return this.getNumber()*this.getRem();case this.isString(/em$/):return this.getNumber()*this.getEm();case this.isString(/ex$/):return this.getNumber()*this.getEm()/2;case this.isString(/px$/):return this.getNumber();case this.isString(/pt$/):return this.getNumber()*this.getDpi()*(1/72);case this.isString(/pc$/):return this.getNumber()*15;case this.isString(/cm$/):return this.getNumber()*this.getDpi()/2.54;case this.isString(/mm$/):return this.getNumber()*this.getDpi()/25.4;case this.isString(/in$/):return this.getNumber()*this.getDpi();case this.isString(/%$/)&&r:return this.getNumber()*this.getEm();case this.isString(/%$/):return this.getNumber()*i.computeSize(n);default:var a=this.getNumber();return t&&a<1?a*i.computeSize(n):a}}getMilliseconds(){return this.hasValue()?this.isString(/ms$/)?this.getNumber():this.getNumber()*1e3:0}getRadians(){if(!this.hasValue())return 0;switch(!0){case this.isString(/deg$/):return this.getNumber()*(Math.PI/180);case this.isString(/grad$/):return this.getNumber()*(Math.PI/200);case this.isString(/rad$/):return this.getNumber();default:return this.getNumber()*(Math.PI/180)}}getDefinition(){var e=this.getString(),t=/#([^)'"]+)/.exec(e);return t&&=t[1],t||=e,this.document.definitions[t]}getFillStyleDefinition(e,t){var n=this.getDefinition();if(!n)return null;if(typeof n.createGradient==`function`)return n.createGradient(this.document.ctx,e,t);if(typeof n.createPattern==`function`){if(n.getHrefAttribute().hasValue()){var r=n.getAttribute(`patternTransform`);n=n.getHrefAttribute().getDefinition(),r.hasValue()&&n.getAttribute(`patternTransform`,!0).setValue(r.value)}return n.createPattern(this.document.ctx,e,t)}return null}getTextBaseline(){return this.hasValue()?e.textBaselineMapping[this.getString()]:null}addOpacity(t){for(var n=this.getColor(),r=n.length,i=0,a=0;a1&&arguments[1]!==void 0?arguments[1]:0,[r=n,i=n]=q(t);return new e(r,i)}static parseScale(t){var n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:1,[r=n,i=r]=q(t);return new e(r,i)}static parsePath(t){for(var n=q(t),r=n.length,i=[],a=0;a0}runEvents(){if(this.working){var{screen:e,events:t,eventElements:n}=this,{style:r}=e.ctx.canvas;r&&(r.cursor=``),t.forEach((e,t)=>{for(var{run:r}=e,i=n[t];i;)r(i),i=i.parent}),this.events=[],this.eventElements=[]}}checkPath(e,t){if(!(!this.working||!t)){var{events:n,eventElements:r}=this;n.forEach((n,i)=>{var{x:a,y:o}=n;!r[i]&&t.isPointInPath&&t.isPointInPath(a,o)&&(r[i]=e)})}}checkBoundingBox(e,t){if(!(!this.working||!t)){var{events:n,eventElements:r}=this;n.forEach((n,i)=>{var{x:a,y:o}=n;!r[i]&&t.isPointInBox(a,o)&&(r[i]=e)})}}mapXY(e,t){for(var{window:n,ctx:r}=this.screen,i=new Y(e,t),a=r.canvas;a;)i.x-=a.offsetLeft,i.y-=a.offsetTop,a=a.offsetParent;return n.scrollX&&(i.x+=n.scrollX),n.scrollY&&(i.y+=n.scrollY),i}onClick(e){var{x:t,y:n}=this.mapXY(e.clientX,e.clientY);this.events.push({type:`onclick`,x:t,y:n,run(e){e.onClick&&e.onClick()}})}onMouseMove(e){var{x:t,y:n}=this.mapXY(e.clientX,e.clientY);this.events.push({type:`onmousemove`,x:t,y:n,run(e){e.onMouseMove&&e.onMouseMove()}})}},Dr=typeof window<`u`?window:null,Or=typeof fetch<`u`?fetch.bind(void 0):null,kr=class{constructor(e){var{fetch:t=Or,window:n=Dr}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.ctx=e,this.FRAMERATE=30,this.MAX_VIRTUAL_PIXELS=3e4,this.CLIENT_WIDTH=800,this.CLIENT_HEIGHT=600,this.viewPort=new Tr,this.mouse=new Er(this),this.animations=[],this.waits=[],this.frameDuration=0,this.isReadyLock=!1,this.isFirstRender=!0,this.intervalId=null,this.window=n,this.fetch=t}wait(e){this.waits.push(e)}ready(){return this.readyPromise?this.readyPromise:Promise.resolve()}isReady(){if(this.isReadyLock)return!0;var e=this.waits.every(e=>e());return e&&(this.waits=[],this.resolveReady&&this.resolveReady()),this.isReadyLock=e,e}setDefaults(e){e.strokeStyle=`rgba(0,0,0,0)`,e.lineCap=`butt`,e.lineJoin=`miter`,e.miterLimit=4}setViewBox(e){var{document:t,ctx:n,aspectRatio:r,width:i,desiredWidth:a,height:o,desiredHeight:s,minX:c=0,minY:l=0,refX:u,refY:d,clip:f=!1,clipX:p=0,clipY:m=0}=e,[h,g]=Qn(r).replace(/^defer\s/,``).split(` `),_=h||`xMidYMid`,v=g||`meet`,y=i/a,b=o/s,x=Math.min(y,b),S=Math.max(y,b),C=a,w=s;v===`meet`&&(C*=x,w*=x),v===`slice`&&(C*=S,w*=S);var T=new J(t,`refX`,u),E=new J(t,`refY`,d),D=T.hasValue()&&E.hasValue();if(D&&n.translate(-x*T.getPixels(`x`),-x*E.getPixels(`y`)),f){var O=x*p,k=x*m;n.beginPath(),n.moveTo(O,k),n.lineTo(i,k),n.lineTo(i,o),n.lineTo(O,o),n.closePath(),n.clip()}if(!D){var A=v===`meet`&&x===b,j=v===`slice`&&S===b,M=v===`meet`&&x===y,N=v===`slice`&&S===y;_.startsWith(`xMid`)&&(A||j)&&n.translate(i/2-C/2,0),_.endsWith(`YMid`)&&(M||N)&&n.translate(0,o/2-w/2),_.startsWith(`xMax`)&&(A||j)&&n.translate(i-C,0),_.endsWith(`YMax`)&&(M||N)&&n.translate(0,o-w)}switch(!0){case _===`none`:n.scale(y,b);break;case v===`meet`:n.scale(x,x);break;case v===`slice`:n.scale(S,S);break}n.translate(-c,-l)}start(e){var{enableRedraw:t=!1,ignoreMouse:n=!1,ignoreAnimation:r=!1,ignoreDimensions:i=!1,ignoreClear:a=!1,forceRedraw:o,scaleWidth:s,scaleHeight:c,offsetX:l,offsetY:u}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},{FRAMERATE:d,mouse:f}=this,p=1e3/d;if(this.frameDuration=p,this.readyPromise=new Promise(e=>{this.resolveReady=e}),this.isReady()&&this.render(e,i,a,s,c,l,u),t){var m=Date.now(),h=m,g=0,_=()=>{m=Date.now(),g=m-h,g>=p&&(h=m-g%p,this.shouldUpdate(r,o)&&(this.render(e,i,a,s,c,l,u),f.runEvents())),this.intervalId=(0,bn.default)(_)};n||f.start(),this.intervalId=(0,bn.default)(_)}}stop(){this.intervalId&&=(bn.default.cancel(this.intervalId),null),this.mouse.stop()}shouldUpdate(e,t){if(!e){var{frameDuration:n}=this;if(this.animations.reduce((e,t)=>t.update(n)||e,!1))return!0}return!!(typeof t==`function`&&t()||!this.isReadyLock&&this.isReady()||this.mouse.hasEvents())}render(e,t,n,r,i,a,o){var{CLIENT_WIDTH:s,CLIENT_HEIGHT:c,viewPort:l,ctx:u,isFirstRender:d}=this,f=u.canvas;l.clear(),f.width&&f.height?l.setCurrent(f.width,f.height):l.setCurrent(s,c);var p=e.getStyle(`width`),m=e.getStyle(`height`);!t&&(d||typeof r!=`number`&&typeof i!=`number`)&&(p.hasValue()&&(f.width=p.getPixels(`x`),f.style&&(f.style.width=`${f.width}px`)),m.hasValue()&&(f.height=m.getPixels(`y`),f.style&&(f.style.height=`${f.height}px`)));var h=f.clientWidth||f.width,g=f.clientHeight||f.height;if(t&&p.hasValue()&&m.hasValue()&&(h=p.getPixels(`x`),g=m.getPixels(`y`)),l.setCurrent(h,g),typeof a==`number`&&e.getAttribute(`x`,!0).setValue(a),typeof o==`number`&&e.getAttribute(`y`,!0).setValue(o),typeof r==`number`||typeof i==`number`){var _=q(e.getAttribute(`viewBox`).getString()),v=0,y=0;if(typeof r==`number`){var b=e.getStyle(`width`);b.hasValue()?v=b.getPixels(`x`)/r:isNaN(_[2])||(v=_[2]/r)}if(typeof i==`number`){var x=e.getStyle(`height`);x.hasValue()?y=x.getPixels(`y`)/i:isNaN(_[3])||(y=_[3]/i)}v||=y,y||=v,e.getAttribute(`width`,!0).setValue(r),e.getAttribute(`height`,!0).setValue(i);var S=e.getStyle(`transform`,!0,!0);S.setValue(`${S.getString()} scale(${1/v}, ${1/y})`)}n||u.clearRect(0,0,h,g),e.render(u),d&&(this.isFirstRender=!1)}};kr.defaultWindow=Dr,kr.defaultFetch=Or;var{defaultFetch:Ar}=kr,jr=typeof DOMParser<`u`?DOMParser:null,Mr=class{constructor(){var{fetch:e=Ar,DOMParser:t=jr}=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};this.fetch=e,this.DOMParser=t}parse(e){var t=this;return yt(function*(){return e.startsWith(`<`)?t.parseFromString(e):t.load(e)})()}parseFromString(e){var t=new this.DOMParser;try{return this.checkDocument(t.parseFromString(e,`image/svg+xml`))}catch{return this.checkDocument(t.parseFromString(e,`text/xml`))}}checkDocument(e){var t=e.getElementsByTagName(`parsererror`)[0];if(t)throw Error(t.textContent);return e}load(e){var t=this;return yt(function*(){var n=yield(yield t.fetch(e)).text();return t.parseFromString(n)})()}},Nr=class{constructor(e,t){this.type=`translate`,this.point=null,this.point=Y.parse(t)}apply(e){var{x:t,y:n}=this.point;e.translate(t||0,n||0)}unapply(e){var{x:t,y:n}=this.point;e.translate(-1*t||0,-1*n||0)}applyToPoint(e){var{x:t,y:n}=this.point;e.applyTransform([1,0,0,1,t||0,n||0])}},Pr=class{constructor(e,t,n){this.type=`rotate`,this.angle=null,this.originX=null,this.originY=null,this.cx=0,this.cy=0;var r=q(t);this.angle=new J(e,`angle`,r[0]),this.originX=n[0],this.originY=n[1],this.cx=r[1]||0,this.cy=r[2]||0}apply(e){var{cx:t,cy:n,originX:r,originY:i,angle:a}=this,o=t+r.getPixels(`x`),s=n+i.getPixels(`y`);e.translate(o,s),e.rotate(a.getRadians()),e.translate(-o,-s)}unapply(e){var{cx:t,cy:n,originX:r,originY:i,angle:a}=this,o=t+r.getPixels(`x`),s=n+i.getPixels(`y`);e.translate(o,s),e.rotate(-1*a.getRadians()),e.translate(-o,-s)}applyToPoint(e){var{cx:t,cy:n,angle:r}=this,i=r.getRadians();e.applyTransform([1,0,0,1,t||0,n||0]),e.applyTransform([Math.cos(i),Math.sin(i),-Math.sin(i),Math.cos(i),0,0]),e.applyTransform([1,0,0,1,-t||0,-n||0])}},Fr=class{constructor(e,t,n){this.type=`scale`,this.scale=null,this.originX=null,this.originY=null;var r=Y.parseScale(t);(r.x===0||r.y===0)&&(r.x=mr,r.y=mr),this.scale=r,this.originX=n[0],this.originY=n[1]}apply(e){var{scale:{x:t,y:n},originX:r,originY:i}=this,a=r.getPixels(`x`),o=i.getPixels(`y`);e.translate(a,o),e.scale(t,n||t),e.translate(-a,-o)}unapply(e){var{scale:{x:t,y:n},originX:r,originY:i}=this,a=r.getPixels(`x`),o=i.getPixels(`y`);e.translate(a,o),e.scale(1/t,1/n||t),e.translate(-a,-o)}applyToPoint(e){var{x:t,y:n}=this.scale;e.applyTransform([t||0,0,0,n||0,0,0])}},Ir=class{constructor(e,t,n){this.type=`matrix`,this.matrix=[],this.originX=null,this.originY=null,this.matrix=q(t),this.originX=n[0],this.originY=n[1]}apply(e){var{originX:t,originY:n,matrix:r}=this,i=t.getPixels(`x`),a=n.getPixels(`y`);e.translate(i,a),e.transform(r[0],r[1],r[2],r[3],r[4],r[5]),e.translate(-i,-a)}unapply(e){var{originX:t,originY:n,matrix:r}=this,i=r[0],a=r[2],o=r[4],s=r[1],c=r[3],l=r[5],u=0,d=0,f=1,p=1/(i*(c*f-l*d)-a*(s*f-l*u)+o*(s*d-c*u)),m=t.getPixels(`x`),h=n.getPixels(`y`);e.translate(m,h),e.transform(p*(c*f-l*d),p*(l*u-s*f),p*(o*d-a*f),p*(i*f-o*u),p*(a*l-o*c),p*(o*s-i*l)),e.translate(-m,-h)}applyToPoint(e){e.applyTransform(this.matrix)}},Lr=class extends Ir{constructor(e,t,n){super(e,t,n),this.type=`skew`,this.angle=null,this.angle=new J(e,`angle`,t)}},Rr=class extends Lr{constructor(e,t,n){super(e,t,n),this.type=`skewX`,this.matrix=[1,0,Math.tan(this.angle.getRadians()),1,0,0]}},zr=class extends Lr{constructor(e,t,n){super(e,t,n),this.type=`skewY`,this.matrix=[1,Math.tan(this.angle.getRadians()),0,1,0,0]}};function Br(e){return Qn(e).trim().replace(/\)([a-zA-Z])/g,`) $1`).replace(/\)(\s?,\s?)/g,`) `).split(/\s(?=[a-z])/)}function Vr(e){var[t,n]=e.split(`(`);return[t.trim(),n.trim().replace(`)`,``)]}var Hr=class e{constructor(t,n,r){this.document=t,this.transforms=[],Br(n).forEach(t=>{if(t!==`none`){var[n,i]=Vr(t),a=e.transformTypes[n];a!==void 0&&this.transforms.push(new a(this.document,i,r))}})}static fromElement(t,n){var r=n.getStyle(`transform`,!1,!0),[i,a=i]=n.getStyle(`transform-origin`,!1,!0).split(),o=[i,a];return r.hasValue()?new e(t,r.getString(),o):null}apply(e){for(var{transforms:t}=this,n=t.length,r=0;r=0;n--)t[n].unapply(e)}applyToPoint(e){for(var{transforms:t}=this,n=t.length,r=0;r2&&arguments[2]!==void 0?arguments[2]:!1;if(this.document=e,this.node=t,this.captureTextNodes=n,this.attributes=Object.create(null),this.styles=Object.create(null),this.stylesSpecificity=Object.create(null),this.animationFrozen=!1,this.animationFrozenValue=``,this.parent=null,this.children=[],!(!t||t.nodeType!==1)){Array.from(t.attributes).forEach(t=>{var n=nr(t.nodeName);this.attributes[n]=new J(e,n,t.value)}),this.addStylesFromStyleDefinition(),this.getAttribute(`style`).hasValue()&&this.getAttribute(`style`).getString().split(`;`).map(e=>e.trim()).forEach(t=>{if(t){var[n,r]=t.split(`:`).map(e=>e.trim());this.styles[n]=new J(e,n,r)}});var{definitions:r}=e,i=this.getAttribute(`id`);i.hasValue()&&(r[i.getString()]||(r[i.getString()]=this)),Array.from(t.childNodes).forEach(t=>{if(t.nodeType===1)this.addChild(t);else if(n&&(t.nodeType===3||t.nodeType===4)){var r=e.createTextNode(t);r.getText().length>0&&this.addChild(r)}})}}getAttribute(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,n=this.attributes[e];if(!n&&t){var r=new J(this.document,e,``);return this.attributes[e]=r,r}return n||J.empty(this.document)}getHrefAttribute(){for(var e in this.attributes)if(e===`href`||e.endsWith(`:href`))return this.attributes[e];return J.empty(this.document)}getStyle(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,r=this.styles[e];if(r)return r;var i=this.getAttribute(e);if(i!=null&&i.hasValue())return this.styles[e]=i,i;if(!n){var{parent:a}=this;if(a){var o=a.getStyle(e);if(o!=null&&o.hasValue())return o}}if(t){var s=new J(this.document,e,``);return this.styles[e]=s,s}return r||J.empty(this.document)}render(e){if(!(this.getStyle(`display`).getString()===`none`||this.getStyle(`visibility`).getString()===`hidden`)){if(e.save(),this.getStyle(`mask`).hasValue()){var t=this.getStyle(`mask`).getDefinition();t&&(this.applyEffects(e),t.apply(e,this))}else if(this.getStyle(`filter`).getValue(`none`)!==`none`){var n=this.getStyle(`filter`).getDefinition();n&&(this.applyEffects(e),n.apply(e,this))}else this.setContext(e),this.renderChildren(e),this.clearContext(e);e.restore()}}setContext(e){}applyEffects(e){var t=Hr.fromElement(this.document,this);t&&t.apply(e);var n=this.getStyle(`clip-path`,!1,!0);if(n.hasValue()){var r=n.getDefinition();r&&r.apply(e)}}clearContext(e){}renderChildren(e){this.children.forEach(t=>{t.render(e)})}addChild(t){var n=t instanceof e?t:this.document.createElement(t);n.parent=this,e.ignoreChildTypes.includes(n.type)||this.children.push(n)}matchesSelector(e){var{node:t}=this;if(typeof t.matches==`function`)return t.matches(e);var n=t.getAttribute?.call(t,`class`);return!n||n===``?!1:n.split(` `).some(t=>`.${t}`===e)}addStylesFromStyleDefinition(){var{styles:e,stylesSpecificity:t}=this.document;for(var n in e)if(!n.startsWith(`@`)&&this.matchesSelector(n)){var r=e[n],i=t[n];if(r)for(var a in r){var o=this.stylesSpecificity[a];o===void 0&&(o=`000`),i>=o&&(this.styles[a]=r[a],this.stylesSpecificity[a]=i)}}}removeStyles(e,t){return t.reduce((t,n)=>{var r=e.getStyle(n);if(!r.hasValue())return t;var i=r.getString();return r.setValue(``),[...t,[n,i]]},[])}restoreStyles(e,t){t.forEach(t=>{var[n,r]=t;e.getStyle(n,!0).setValue(r)})}isFirstChild(){return this.parent?.children.indexOf(this)===0}};X.ignoreChildTypes=[`title`];var Ur=class extends X{constructor(e,t,n){super(e,t,n)}};function Wr(e){var t=e.trim();return/^('|")/.test(t)?t:`"${t}"`}function Gr(e){return typeof process>`u`?e:e.trim().split(`,`).map(Wr).join(`,`)}function Kr(e){if(!e)return``;var t=e.trim().toLowerCase();switch(t){case`normal`:case`italic`:case`oblique`:case`inherit`:case`initial`:case`unset`:return t;default:return/^oblique\s+(-|)\d+deg$/.test(t)?t:``}}function qr(e){if(!e)return``;var t=e.trim().toLowerCase();switch(t){case`normal`:case`bold`:case`lighter`:case`bolder`:case`inherit`:case`initial`:case`unset`:return t;default:return/^[\d.]+$/.test(t)?t:``}}var Jr=class e{constructor(t,n,r,i,a,o){var s=o?typeof o==`string`?e.parse(o):o:{};this.fontFamily=a||s.fontFamily,this.fontSize=i||s.fontSize,this.fontStyle=t||s.fontStyle,this.fontWeight=r||s.fontWeight,this.fontVariant=n||s.fontVariant}static parse(){var t=arguments.length>0&&arguments[0]!==void 0?arguments[0]:``,n=arguments.length>1?arguments[1]:void 0,r=``,i=``,a=``,o=``,s=``,c=Qn(t).trim().split(` `),l={fontSize:!1,fontStyle:!1,fontWeight:!1,fontVariant:!1};return c.forEach(t=>{switch(!0){case!l.fontStyle&&e.styles.includes(t):t!==`inherit`&&(r=t),l.fontStyle=!0;break;case!l.fontVariant&&e.variants.includes(t):t!==`inherit`&&(i=t),l.fontStyle=!0,l.fontVariant=!0;break;case!l.fontWeight&&e.weights.includes(t):t!==`inherit`&&(a=t),l.fontStyle=!0,l.fontVariant=!0,l.fontWeight=!0;break;case!l.fontSize:t!==`inherit`&&([o]=t.split(`/`)),l.fontStyle=!0,l.fontVariant=!0,l.fontWeight=!0,l.fontSize=!0;break;default:t!==`inherit`&&(s+=t)}}),new e(r,i,a,o,s,n)}toString(){return[Kr(this.fontStyle),this.fontVariant,qr(this.fontWeight),this.fontSize,Gr(this.fontFamily)].join(` `).trim()}};Jr.styles=`normal|italic|oblique|inherit`,Jr.variants=`normal|small-caps|inherit`,Jr.weights=`normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900|inherit`;var Yr=class{constructor(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:NaN,t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:NaN,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:NaN,r=arguments.length>3&&arguments[3]!==void 0?arguments[3]:NaN;this.x1=e,this.y1=t,this.x2=n,this.y2=r,this.addPoint(e,t),this.addPoint(n,r)}get x(){return this.x1}get y(){return this.y1}get width(){return this.x2-this.x1}get height(){return this.y2-this.y1}addPoint(e,t){e!==void 0&&((isNaN(this.x1)||isNaN(this.x2))&&(this.x1=e,this.x2=e),ethis.x2&&(this.x2=e)),t!==void 0&&((isNaN(this.y1)||isNaN(this.y2))&&(this.y1=t,this.y2=t),tthis.y2&&(this.y2=t))}addX(e){this.addPoint(e,null)}addY(e){this.addPoint(null,e)}addBoundingBox(e){if(e){var{x1:t,y1:n,x2:r,y2:i}=e;this.addPoint(t,n),this.addPoint(r,i)}}sumCubic(e,t,n,r,i){return(1-e)**3*t+3*(1-e)**2*e*n+3*(1-e)*e**2*r+e**3*i}bezierCurveAdd(e,t,n,r,i){var a=6*t-12*n+6*r,o=-3*t+9*n-9*r+3*i,s=3*n-3*t;if(o===0){if(a===0)return;var c=-s/a;0=t.length-1}next(){var e=this.commands[++this.i];return this.previousCommand=this.command,this.command=e,e}getPoint(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:`x`,t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:`y`,n=new Y(this.command[e],this.command[t]);return this.makeAbsolute(n)}getAsControlPoint(e,t){var n=this.getPoint(e,t);return this.control=n,n}getAsCurrentPoint(e,t){var n=this.getPoint(e,t);return this.current=n,n}getReflectedControlPoint(){var e=this.previousCommand.type;if(e!==K.CURVE_TO&&e!==K.SMOOTH_CURVE_TO&&e!==K.QUAD_TO&&e!==K.SMOOTH_QUAD_TO)return this.current;var{current:{x:t,y:n},control:{x:r,y:i}}=this;return new Y(2*t-r,2*n-i)}makeAbsolute(e){if(this.command.relative){var{x:t,y:n}=this.current;e.x+=t,e.y+=n}return e}addMarker(e,t,n){var{points:r,angles:i}=this;n&&i.length>0&&!i[i.length-1]&&(i[i.length-1]=r[r.length-1].angleTo(n)),this.addMarkerAngle(e,t?t.angleTo(e):null)}addMarkerAngle(e,t){this.points.push(e),this.angles.push(t)}getMarkerPoints(){return this.points}getMarkerAngles(){for(var{angles:e}=this,t=e.length,n=0;n1&&arguments[1]!==void 0?arguments[1]:!1;if(!t){var n=this.getStyle(`fill`),r=this.getStyle(`fill-opacity`),i=this.getStyle(`stroke`),a=this.getStyle(`stroke-opacity`);if(n.isUrlDefinition()){var o=n.getFillStyleDefinition(this,r);o&&(e.fillStyle=o)}else if(n.hasValue()){n.getString()===`currentColor`&&n.setValue(this.getStyle(`color`).getColor());var s=n.getColor();s!==`inherit`&&(e.fillStyle=s===`none`?`rgba(0,0,0,0)`:s)}if(r.hasValue()&&(e.fillStyle=new J(this.document,`fill`,e.fillStyle).addOpacity(r).getColor()),i.isUrlDefinition()){var c=i.getFillStyleDefinition(this,a);c&&(e.strokeStyle=c)}else if(i.hasValue()){i.getString()===`currentColor`&&i.setValue(this.getStyle(`color`).getColor());var l=i.getString();l!==`inherit`&&(e.strokeStyle=l===`none`?`rgba(0,0,0,0)`:l)}a.hasValue()&&(e.strokeStyle=new J(this.document,`stroke`,e.strokeStyle).addOpacity(a).getString());var u=this.getStyle(`stroke-width`);u.hasValue()&&(e.lineWidth=u.getPixels()||mr);var d=this.getStyle(`stroke-linecap`),f=this.getStyle(`stroke-linejoin`),p=this.getStyle(`stroke-miterlimit`),m=this.getStyle(`stroke-dasharray`),h=this.getStyle(`stroke-dashoffset`);if(d.hasValue()&&(e.lineCap=d.getString()),f.hasValue()&&(e.lineJoin=f.getString()),p.hasValue()&&(e.miterLimit=p.getNumber()),m.hasValue()&&m.getString()!==`none`){var g=q(m.getString());e.setLineDash===void 0?e.webkitLineDash===void 0?e.mozDash!==void 0&&!(g.length===1&&g[0]===0)&&(e.mozDash=g):e.webkitLineDash=g:e.setLineDash(g);var _=h.getPixels();e.lineDashOffset===void 0?e.webkitLineDashOffset===void 0?e.mozDashOffset!==void 0&&(e.mozDashOffset=_):e.webkitLineDashOffset=_:e.lineDashOffset=_}}if(this.modifiedEmSizeStack=!1,e.font!==void 0){var v=this.getStyle(`font`),y=this.getStyle(`font-style`),b=this.getStyle(`font-variant`),x=this.getStyle(`font-weight`),S=this.getStyle(`font-size`),C=this.getStyle(`font-family`),w=new Jr(y.getString(),b.getString(),x.getString(),S.hasValue()?`${S.getPixels(!0)}px`:``,C.getString(),Jr.parse(v.getString(),e.font));y.setValue(w.fontStyle),b.setValue(w.fontVariant),x.setValue(w.fontWeight),S.setValue(w.fontSize),C.setValue(w.fontFamily),e.font=w.toString(),S.isPixels()&&(this.document.emSize=S.getPixels(),this.modifiedEmSizeStack=!0)}t||(this.applyEffects(e),e.globalAlpha=this.calculateOpacity())}clearContext(e){super.clearContext(e),this.modifiedEmSizeStack&&this.document.popEmSize()}},Q=class e extends Xr{constructor(e,t,n){super(e,t,n),this.type=`path`,this.pathParser=null,this.pathParser=new Z(this.getAttribute(`d`).getString())}path(e){var{pathParser:t}=this,n=new Yr;for(t.reset(),e&&e.beginPath();!t.isEnd();)switch(t.next().type){case Z.MOVE_TO:this.pathM(e,n);break;case Z.LINE_TO:this.pathL(e,n);break;case Z.HORIZ_LINE_TO:this.pathH(e,n);break;case Z.VERT_LINE_TO:this.pathV(e,n);break;case Z.CURVE_TO:this.pathC(e,n);break;case Z.SMOOTH_CURVE_TO:this.pathS(e,n);break;case Z.QUAD_TO:this.pathQ(e,n);break;case Z.SMOOTH_QUAD_TO:this.pathT(e,n);break;case Z.ARC:this.pathA(e,n);break;case Z.CLOSE_PATH:this.pathZ(e,n);break}return n}getBoundingBox(e){return this.path()}getMarkers(){var{pathParser:e}=this,t=e.getMarkerPoints(),n=e.getMarkerAngles();return t.map((e,t)=>[e,n[t]])}renderChildren(e){this.path(e),this.document.screen.mouse.checkPath(this,e);var t=this.getStyle(`fill-rule`);e.fillStyle!==``&&(t.getString(`inherit`)===`inherit`?e.fill():e.fill(t.getString())),e.strokeStyle!==``&&(this.getAttribute(`vector-effect`).getString()===`non-scaling-stroke`?(e.save(),e.setTransform(1,0,0,1,0,0),e.stroke(),e.restore()):e.stroke());var n=this.getMarkers();if(n){var r=n.length-1,i=this.getStyle(`marker-start`),a=this.getStyle(`marker-mid`),o=this.getStyle(`marker-end`);if(i.isUrlDefinition()){var s=i.getDefinition(),[c,l]=n[0];s.render(e,c,l)}if(a.isUrlDefinition())for(var u=a.getDefinition(),d=1;d1&&(r*=Math.sqrt(d),i*=Math.sqrt(d));var f=(o===s?-1:1)*Math.sqrt((r**2*i**2-r**2*u.y**2-i**2*u.x**2)/(r**2*u.y**2+i**2*u.x**2));isNaN(f)&&(f=0);var p=new Y(f*r*u.y/i,f*-i*u.x/r),m=new Y((t.x+l.x)/2+Math.cos(c)*p.x-Math.sin(c)*p.y,(t.y+l.y)/2+Math.sin(c)*p.x+Math.cos(c)*p.y),h=_r([1,0],[(u.x-p.x)/r,(u.y-p.y)/i]),g=[(u.x-p.x)/r,(u.y-p.y)/i],_=[(-u.x-p.x)/r,(-u.y-p.y)/i],v=_r(g,_);return gr(g,_)<=-1&&(v=Math.PI),gr(g,_)>=1&&(v=0),{currentPoint:l,rX:r,rY:i,sweepFlag:s,xAxisRotation:c,centp:m,a1:h,ad:v}}pathA(t,n){var{pathParser:r}=this,{currentPoint:i,rX:a,rY:o,sweepFlag:s,xAxisRotation:c,centp:l,a1:u,ad:d}=e.pathA(r),f=1-s?1:-1,p=u+d/2*f,m=new Y(l.x+a*Math.cos(p),l.y+o*Math.sin(p));if(r.addMarkerAngle(m,p-f*Math.PI/2),r.addMarkerAngle(i,p-f*Math.PI),n.addPoint(i.x,i.y),t&&!isNaN(u)&&!isNaN(d)){var h=a>o?a:o,g=a>o?1:a/o,_=a>o?o/a:1;t.translate(l.x,l.y),t.rotate(c),t.scale(g,_),t.arc(0,0,h,u,u+d,!!(1-s)),t.scale(1/g,1/_),t.rotate(-c),t.translate(-l.x,-l.y)}}static pathZ(e){e.current=e.start}pathZ(t,n){e.pathZ(this.pathParser),t&&n.x1!==n.x2&&n.y1!==n.y2&&t.closePath()}},Zr=class extends Q{constructor(e,t,n){super(e,t,n),this.type=`glyph`,this.horizAdvX=this.getAttribute(`horiz-adv-x`).getNumber(),this.unicode=this.getAttribute(`unicode`).getString(),this.arabicForm=this.getAttribute(`arabic-form`).getString()}},Qr=class e extends Xr{constructor(t,n,r){super(t,n,new.target===e?!0:r),this.type=`text`,this.x=0,this.y=0,this.measureCache=-1}setContext(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:!1;super.setContext(e,t);var n=this.getStyle(`dominant-baseline`).getTextBaseline()||this.getStyle(`alignment-baseline`).getTextBaseline();n&&(e.textBaseline=n)}initializeCoordinates(){this.x=0,this.y=0,this.leafTexts=[],this.textChunkStart=0,this.minX=1/0,this.maxX=-1/0}getBoundingBox(e){if(this.type!==`text`)return this.getTElementBoundingBox(e);this.initializeCoordinates(),this.adjustChildCoordinatesRecursive(e);var t=null;return this.children.forEach((n,r)=>{var i=this.getChildBoundingBox(e,this,this,r);t?t.addBoundingBox(i):t=i}),t}getFontSize(){var{document:e,parent:t}=this,n=Jr.parse(e.ctx.font).fontSize;return t.getStyle(`font-size`).getNumber(n)}getTElementBoundingBox(e){var t=this.getFontSize();return new Yr(this.x,this.y-t,this.x+this.measureText(e),this.y)}getGlyph(e,t,n){var r=t[n],i=null;if(e.isArabic){var a=t.length,o=t[n-1],s=t[n+1],c=`isolated`;if((n===0||o===` `)&&n0&&o!==` `&&n0&&o!==` `&&(n===a-1||s===` `)&&(c=`initial`),e.glyphs[r]!==void 0){var l=e.glyphs[r];i=l instanceof Zr?l:l[c]}}else i=e.glyphs[r];return i||=e.missingGlyph,i}getText(){return``}getTextFromNode(e){var t=e||this.node,n=Array.from(t.parentNode.childNodes),r=n.indexOf(t),i=n.length-1,a=Qn(t.textContent||``);return r===0&&(a=$n(a)),r===i&&(a=er(a)),a}renderChildren(e){if(this.type!==`text`){this.renderTElementChildren(e);return}this.initializeCoordinates(),this.adjustChildCoordinatesRecursive(e),this.children.forEach((t,n)=>{this.renderChild(e,this,this,n)});var{mouse:t}=this.document.screen;t.isWorking()&&t.checkBoundingBox(this,this.getBoundingBox(e))}renderTElementChildren(e){var{document:t,parent:n}=this,r=this.getText(),i=n.getStyle(`font-family`).getDefinition();if(i){for(var{unitsPerEm:a}=i.fontFace,o=Jr.parse(t.ctx.font),s=n.getStyle(`font-size`).getNumber(o.fontSize),c=n.getStyle(`font-style`).getString(o.fontStyle),l=s/a,u=i.isRTL?r.split(``).reverse().join(``):r,d=q(n.getAttribute(`dx`).getString()),f=u.length,p=0;p=this.leafTexts.length)){var e=this.leafTexts[this.textChunkStart],t=e.getStyle(`text-anchor`).getString(`start`),n=!1,r=0;r=t===`start`&&!n||t===`end`&&n?e.x-this.minX:t===`end`&&!n||t===`start`&&n?e.x-this.maxX:e.x-(this.minX+this.maxX)/2;for(var i=this.textChunkStart;i{this.adjustChildCoordinatesRecursiveCore(e,this,this,n)}),this.applyAnchoring()}adjustChildCoordinatesRecursiveCore(e,t,n,r){var i=n.children[r];i.children.length>0?i.children.forEach((n,r)=>{t.adjustChildCoordinatesRecursiveCore(e,t,i,r)}):this.adjustChildCoordinates(e,t,n,r)}adjustChildCoordinates(e,t,n,r){var i=n.children[r];if(typeof i.measureText!=`function`)return i;e.save(),i.setContext(e,!0);var a=i.getAttribute(`x`),o=i.getAttribute(`y`),s=i.getAttribute(`dx`),c=i.getAttribute(`dy`),l=i.getStyle(`font-family`).getDefinition(),u=!!l&&l.isRTL;r===0&&(a.hasValue()||a.setValue(i.getInheritedAttribute(`x`)),o.hasValue()||o.setValue(i.getInheritedAttribute(`y`)),s.hasValue()||s.setValue(i.getInheritedAttribute(`dx`)),c.hasValue()||c.setValue(i.getInheritedAttribute(`dy`)));var d=i.measureText(e);return u&&(t.x-=d),a.hasValue()?(t.applyAnchoring(),i.x=a.getPixels(`x`),s.hasValue()&&(i.x+=s.getPixels(`x`))):(s.hasValue()&&(t.x+=s.getPixels(`x`)),i.x=t.x),t.x=i.x,u||(t.x+=d),o.hasValue()?(i.y=o.getPixels(`y`),c.hasValue()&&(i.y+=c.getPixels(`y`))):(c.hasValue()&&(t.y+=c.getPixels(`y`)),i.y=t.y),t.y=i.y,t.leafTexts.push(i),t.minX=Math.min(t.minX,i.x,i.x+d),t.maxX=Math.max(t.maxX,i.x,i.x+d),i.clearContext(e),e.restore(),i}getChildBoundingBox(e,t,n,r){var i=n.children[r];if(typeof i.getBoundingBox!=`function`)return null;var a=i.getBoundingBox(e);return a?(i.children.forEach((n,r)=>{var o=t.getChildBoundingBox(e,t,i,r);a.addBoundingBox(o)}),a):null}renderChild(e,t,n,r){var i=n.children[r];i.render(e),i.children.forEach((n,r)=>{t.renderChild(e,t,i,r)})}measureText(e){var{measureCache:t}=this;if(~t)return t;var n=this.getText(),r=this.measureTargetText(e,n);return this.measureCache=r,r}measureTargetText(e,t){if(!t.length)return 0;var{parent:n}=this,r=n.getStyle(`font-family`).getDefinition();if(r){for(var i=this.getFontSize(),a=r.isRTL?t.split(``).reverse().join(``):t,o=q(n.getAttribute(`dx`).getString()),s=a.length,c=0,l=0;l0?``:this.getTextFromNode()}getText(){return this.text}},ei=class extends $r{constructor(){super(...arguments),this.type=`textNode`}},ti=class extends Xr{constructor(){super(...arguments),this.type=`svg`,this.root=!1}setContext(e){var{document:t}=this,{screen:n,window:r}=t,i=e.canvas;if(n.setDefaults(e),i.style&&e.font!==void 0&&r&&r.getComputedStyle!==void 0){e.font=r.getComputedStyle(i).getPropertyValue(`font`);var a=new J(t,`fontSize`,Jr.parse(e.font).fontSize);a.hasValue()&&(t.rootEmSize=a.getPixels(`y`),t.emSize=t.rootEmSize)}this.getAttribute(`x`).hasValue()||this.getAttribute(`x`,!0).setValue(0),this.getAttribute(`y`).hasValue()||this.getAttribute(`y`,!0).setValue(0);var{width:o,height:s}=n.viewPort;this.getStyle(`width`).hasValue()||this.getStyle(`width`,!0).setValue(`100%`),this.getStyle(`height`).hasValue()||this.getStyle(`height`,!0).setValue(`100%`),this.getStyle(`color`).hasValue()||this.getStyle(`color`,!0).setValue(`black`);var c=this.getAttribute(`refX`),l=this.getAttribute(`refY`),u=this.getAttribute(`viewBox`),d=u.hasValue()?q(u.getString()):null,f=!this.root&&this.getStyle(`overflow`).getValue(`hidden`)!==`visible`,p=0,m=0,h=0,g=0;d&&(p=d[0],m=d[1]),this.root||(o=this.getStyle(`width`).getPixels(`x`),s=this.getStyle(`height`).getPixels(`y`),this.type===`marker`&&(h=p,g=m,p=0,m=0)),n.viewPort.setCurrent(o,s),this.node&&(!this.parent||this.node.parentNode?.nodeName===`foreignObject`)&&this.getStyle(`transform`,!1,!0).hasValue()&&!this.getStyle(`transform-origin`,!1,!0).hasValue()&&this.getStyle(`transform-origin`,!0,!0).setValue(`50% 50%`),super.setContext(e),e.translate(this.getAttribute(`x`).getPixels(`x`),this.getAttribute(`y`).getPixels(`y`)),d&&(o=d[2],s=d[3]),t.setViewBox({ctx:e,aspectRatio:this.getAttribute(`preserveAspectRatio`).getString(),width:n.viewPort.width,desiredWidth:o,height:n.viewPort.height,desiredHeight:s,minX:p,minY:m,refX:c.getValue(),refY:l.getValue(),clip:f,clipX:h,clipY:g}),d&&(n.viewPort.removeCurrent(),n.viewPort.setCurrent(o,s))}clearContext(e){super.clearContext(e),this.document.screen.viewPort.removeCurrent()}resize(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:e,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1,r=this.getAttribute(`width`,!0),i=this.getAttribute(`height`,!0),a=this.getAttribute(`viewBox`),o=this.getAttribute(`style`),s=r.getNumber(0),c=i.getNumber(0);if(n)if(typeof n==`string`)this.getAttribute(`preserveAspectRatio`,!0).setValue(n);else{var l=this.getAttribute(`preserveAspectRatio`);l.hasValue()&&l.setValue(l.getString().replace(/^\s*(\S.*\S)\s*$/,`$1`))}if(r.setValue(e),i.setValue(t),a.hasValue()||a.setValue(`0 0 ${s||e} ${c||t}`),o.hasValue()){var u=this.getStyle(`width`),d=this.getStyle(`height`);u.hasValue()&&u.setValue(`${e}px`),d.hasValue()&&d.setValue(`${t}px`)}}},ni=class extends Q{constructor(){super(...arguments),this.type=`rect`}path(e){var t=this.getAttribute(`x`).getPixels(`x`),n=this.getAttribute(`y`).getPixels(`y`),r=this.getStyle(`width`,!1,!0).getPixels(`x`),i=this.getStyle(`height`,!1,!0).getPixels(`y`),a=this.getAttribute(`rx`),o=this.getAttribute(`ry`),s=a.getPixels(`x`),c=o.getPixels(`y`);if(a.hasValue()&&!o.hasValue()&&(c=s),o.hasValue()&&!a.hasValue()&&(s=c),s=Math.min(s,r/2),c=Math.min(c,i/2),e){var l=4*((Math.sqrt(2)-1)/3);e.beginPath(),i>0&&r>0&&(e.moveTo(t+s,n),e.lineTo(t+r-s,n),e.bezierCurveTo(t+r-s+l*s,n,t+r,n+c-l*c,t+r,n+c),e.lineTo(t+r,n+i-c),e.bezierCurveTo(t+r,n+i-c+l*c,t+r-s+l*s,n+i,t+r-s,n+i),e.lineTo(t+s,n+i),e.bezierCurveTo(t+s-l*s,n+i,t,n+i-c+l*c,t,n+i-c),e.lineTo(t,n+c),e.bezierCurveTo(t,n+c-l*c,t+s-l*s,n,t+s,n),e.closePath())}return new Yr(t,n,t+r,n+i)}getMarkers(){return null}},ri=class extends Q{constructor(){super(...arguments),this.type=`circle`}path(e){var t=this.getAttribute(`cx`).getPixels(`x`),n=this.getAttribute(`cy`).getPixels(`y`),r=this.getAttribute(`r`).getPixels();return e&&r>0&&(e.beginPath(),e.arc(t,n,r,0,Math.PI*2,!1),e.closePath()),new Yr(t-r,n-r,t+r,n+r)}getMarkers(){return null}},ii=class extends Q{constructor(){super(...arguments),this.type=`ellipse`}path(e){var t=4*((Math.sqrt(2)-1)/3),n=this.getAttribute(`rx`).getPixels(`x`),r=this.getAttribute(`ry`).getPixels(`y`),i=this.getAttribute(`cx`).getPixels(`x`),a=this.getAttribute(`cy`).getPixels(`y`);return e&&n>0&&r>0&&(e.beginPath(),e.moveTo(i+n,a),e.bezierCurveTo(i+n,a+t*r,i+t*n,a+r,i,a+r),e.bezierCurveTo(i-t*n,a+r,i-n,a+t*r,i-n,a),e.bezierCurveTo(i-n,a-t*r,i-t*n,a-r,i,a-r),e.bezierCurveTo(i+t*n,a-r,i+n,a-t*r,i+n,a),e.closePath()),new Yr(i-n,a-r,i+n,a+r)}getMarkers(){return null}},ai=class extends Q{constructor(){super(...arguments),this.type=`line`}getPoints(){return[new Y(this.getAttribute(`x1`).getPixels(`x`),this.getAttribute(`y1`).getPixels(`y`)),new Y(this.getAttribute(`x2`).getPixels(`x`),this.getAttribute(`y2`).getPixels(`y`))]}path(e){var[{x:t,y:n},{x:r,y:i}]=this.getPoints();return e&&(e.beginPath(),e.moveTo(t,n),e.lineTo(r,i)),new Yr(t,n,r,i)}getMarkers(){var[e,t]=this.getPoints(),n=e.angleTo(t);return[[e,n],[t,n]]}},oi=class extends Q{constructor(e,t,n){super(e,t,n),this.type=`polyline`,this.points=[],this.points=Y.parsePath(this.getAttribute(`points`).getString())}path(e){var{points:t}=this,[{x:n,y:r}]=t,i=new Yr(n,r);return e&&(e.beginPath(),e.moveTo(n,r)),t.forEach(t=>{var{x:n,y:r}=t;i.addPoint(n,r),e&&e.lineTo(n,r)}),i}getMarkers(){var{points:e}=this,t=e.length-1,n=[];return e.forEach((r,i)=>{i!==t&&n.push([r,r.angleTo(e[i+1])])}),n.length>0&&n.push([e[e.length-1],n[n.length-1][1]]),n}},si=class extends oi{constructor(){super(...arguments),this.type=`polygon`}path(e){var t=super.path(e),[{x:n,y:r}]=this.points;return e&&(e.lineTo(n,r),e.closePath()),t}},ci=class extends X{constructor(){super(...arguments),this.type=`pattern`}createPattern(e,t,n){var r=this.getStyle(`width`).getPixels(`x`,!0),i=this.getStyle(`height`).getPixels(`y`,!0),a=new ti(this.document,null);a.attributes.viewBox=new J(this.document,`viewBox`,this.getAttribute(`viewBox`).getValue()),a.attributes.width=new J(this.document,`width`,`${r}px`),a.attributes.height=new J(this.document,`height`,`${i}px`),a.attributes.transform=new J(this.document,`transform`,this.getAttribute(`patternTransform`).getValue()),a.children=this.children;var o=this.document.createCanvas(r,i),s=o.getContext(`2d`),c=this.getAttribute(`x`),l=this.getAttribute(`y`);c.hasValue()&&l.hasValue()&&s.translate(c.getPixels(`x`,!0),l.getPixels(`y`,!0)),n.hasValue()?this.styles[`fill-opacity`]=n:Reflect.deleteProperty(this.styles,`fill-opacity`);for(var u=-1;u<=1;u++)for(var d=-1;d<=1;d++)s.save(),a.attributes.x=new J(this.document,`x`,u*o.width),a.attributes.y=new J(this.document,`y`,d*o.height),a.render(s),s.restore();return e.createPattern(o,`repeat`)}},li=class extends X{constructor(){super(...arguments),this.type=`marker`}render(e,t,n){if(t){var{x:r,y:i}=t,a=this.getAttribute(`orient`).getString(`auto`),o=this.getAttribute(`markerUnits`).getString(`strokeWidth`);e.translate(r,i),a===`auto`&&e.rotate(n),o===`strokeWidth`&&e.scale(e.lineWidth,e.lineWidth),e.save();var s=new ti(this.document,null);s.type=this.type,s.attributes.viewBox=new J(this.document,`viewBox`,this.getAttribute(`viewBox`).getValue()),s.attributes.refX=new J(this.document,`refX`,this.getAttribute(`refX`).getValue()),s.attributes.refY=new J(this.document,`refY`,this.getAttribute(`refY`).getValue()),s.attributes.width=new J(this.document,`width`,this.getAttribute(`markerWidth`).getValue()),s.attributes.height=new J(this.document,`height`,this.getAttribute(`markerHeight`).getValue()),s.attributes.overflow=new J(this.document,`overflow`,this.getAttribute(`overflow`).getValue()),s.attributes.fill=new J(this.document,`fill`,this.getAttribute(`fill`).getColor(`black`)),s.attributes.stroke=new J(this.document,`stroke`,this.getAttribute(`stroke`).getValue(`none`)),s.children=this.children,s.render(e),e.restore(),o===`strokeWidth`&&e.scale(1/e.lineWidth,1/e.lineWidth),a===`auto`&&e.rotate(-n),e.translate(-r,-i)}}},ui=class extends X{constructor(){super(...arguments),this.type=`defs`}render(){}},di=class extends Xr{constructor(){super(...arguments),this.type=`g`}getBoundingBox(e){var t=new Yr;return this.children.forEach(n=>{t.addBoundingBox(n.getBoundingBox(e))}),t}},fi=class extends X{constructor(e,t,n){super(e,t,n),this.attributesToInherit=[`gradientUnits`],this.stops=[];var{stops:r,children:i}=this;i.forEach(e=>{e.type===`stop`&&r.push(e)})}getGradientUnits(){return this.getAttribute(`gradientUnits`).getString(`objectBoundingBox`)}createGradient(e,t,n){var r=this;this.getHrefAttribute().hasValue()&&(r=this.getHrefAttribute().getDefinition(),this.inheritStopContainer(r));var{stops:i}=r,a=this.getGradient(e,t);if(!a)return this.addParentOpacity(n,i[i.length-1].color);if(i.forEach(e=>{a.addColorStop(e.offset,this.addParentOpacity(n,e.color))}),this.getAttribute(`gradientTransform`).hasValue()){var{document:o}=this,{MAX_VIRTUAL_PIXELS:s,viewPort:c}=o.screen,[l]=c.viewPorts,u=new ni(o,null);u.attributes.x=new J(o,`x`,-s/3),u.attributes.y=new J(o,`y`,-s/3),u.attributes.width=new J(o,`width`,s),u.attributes.height=new J(o,`height`,s);var d=new di(o,null);d.attributes.transform=new J(o,`transform`,this.getAttribute(`gradientTransform`).getValue()),d.children=[u];var f=new ti(o,null);f.attributes.x=new J(o,`x`,0),f.attributes.y=new J(o,`y`,0),f.attributes.width=new J(o,`width`,l.width),f.attributes.height=new J(o,`height`,l.height),f.children=[d];var p=o.createCanvas(l.width,l.height),m=p.getContext(`2d`);return m.fillStyle=a,f.render(m),m.createPattern(p,`no-repeat`)}return a}inheritStopContainer(e){this.attributesToInherit.forEach(t=>{!this.getAttribute(t).hasValue()&&e.getAttribute(t).hasValue()&&this.getAttribute(t,!0).setValue(e.getAttribute(t).getValue())})}addParentOpacity(e,t){return e.hasValue()?new J(this.document,`color`,t).addOpacity(e).getColor():t}},pi=class extends fi{constructor(e,t,n){super(e,t,n),this.type=`linearGradient`,this.attributesToInherit.push(`x1`,`y1`,`x2`,`y2`)}getGradient(e,t){var n=this.getGradientUnits()===`objectBoundingBox`,r=n?t.getBoundingBox(e):null;if(n&&!r)return null;!this.getAttribute(`x1`).hasValue()&&!this.getAttribute(`y1`).hasValue()&&!this.getAttribute(`x2`).hasValue()&&!this.getAttribute(`y2`).hasValue()&&(this.getAttribute(`x1`,!0).setValue(0),this.getAttribute(`y1`,!0).setValue(0),this.getAttribute(`x2`,!0).setValue(1),this.getAttribute(`y2`,!0).setValue(0));var i=n?r.x+r.width*this.getAttribute(`x1`).getNumber():this.getAttribute(`x1`).getPixels(`x`),a=n?r.y+r.height*this.getAttribute(`y1`).getNumber():this.getAttribute(`y1`).getPixels(`y`),o=n?r.x+r.width*this.getAttribute(`x2`).getNumber():this.getAttribute(`x2`).getPixels(`x`),s=n?r.y+r.height*this.getAttribute(`y2`).getNumber():this.getAttribute(`y2`).getPixels(`y`);return i===o&&a===s?null:e.createLinearGradient(i,a,o,s)}},mi=class extends fi{constructor(e,t,n){super(e,t,n),this.type=`radialGradient`,this.attributesToInherit.push(`cx`,`cy`,`r`,`fx`,`fy`,`fr`)}getGradient(e,t){var n=this.getGradientUnits()===`objectBoundingBox`,r=t.getBoundingBox(e);if(n&&!r)return null;this.getAttribute(`cx`).hasValue()||this.getAttribute(`cx`,!0).setValue(`50%`),this.getAttribute(`cy`).hasValue()||this.getAttribute(`cy`,!0).setValue(`50%`),this.getAttribute(`r`).hasValue()||this.getAttribute(`r`,!0).setValue(`50%`);var i=n?r.x+r.width*this.getAttribute(`cx`).getNumber():this.getAttribute(`cx`).getPixels(`x`),a=n?r.y+r.height*this.getAttribute(`cy`).getNumber():this.getAttribute(`cy`).getPixels(`y`),o=i,s=a;this.getAttribute(`fx`).hasValue()&&(o=n?r.x+r.width*this.getAttribute(`fx`).getNumber():this.getAttribute(`fx`).getPixels(`x`)),this.getAttribute(`fy`).hasValue()&&(s=n?r.y+r.height*this.getAttribute(`fy`).getNumber():this.getAttribute(`fy`).getPixels(`y`));var c=n?(r.width+r.height)/2*this.getAttribute(`r`).getNumber():this.getAttribute(`r`).getPixels(),l=this.getAttribute(`fr`).getPixels();return e.createRadialGradient(o,s,l,i,a,c)}},hi=class extends X{constructor(e,t,n){super(e,t,n),this.type=`stop`;var r=Math.max(0,Math.min(1,this.getAttribute(`offset`).getNumber())),i=this.getStyle(`stop-opacity`),a=this.getStyle(`stop-color`,!0);a.getString()===``&&a.setValue(`#000`),i.hasValue()&&(a=a.addOpacity(i)),this.offset=r,this.color=a.getColor()}},gi=class extends X{constructor(e,t,n){super(e,t,n),this.type=`animate`,this.duration=0,this.initialValue=null,this.initialUnits=``,this.removed=!1,this.frozen=!1,e.screen.animations.push(this),this.begin=this.getAttribute(`begin`).getMilliseconds(),this.maxDuration=this.begin+this.getAttribute(`dur`).getMilliseconds(),this.from=this.getAttribute(`from`),this.to=this.getAttribute(`to`),this.values=new J(e,`values`,null);var r=this.getAttribute(`values`);r.hasValue()&&this.values.setValue(r.getString().split(`;`))}getProperty(){var e=this.getAttribute(`attributeType`).getString(),t=this.getAttribute(`attributeName`).getString();return e===`CSS`?this.parent.getStyle(t,!0):this.parent.getAttribute(t,!0)}calcValue(){var{initialUnits:e}=this,{progress:t,from:n,to:r}=this.getProgress(),i=n.getNumber()+(r.getNumber()-n.getNumber())*t;return e===`%`&&(i*=100),`${i}${e}`}update(e){var{parent:t}=this,n=this.getProperty();if(this.initialValue||(this.initialValue=n.getString(),this.initialUnits=n.getUnits()),this.duration>this.maxDuration){var r=this.getAttribute(`fill`).getString(`remove`);if(this.getAttribute(`repeatCount`).getString()===`indefinite`||this.getAttribute(`repeatDur`).getString()===`indefinite`)this.duration=0;else if(r===`freeze`&&!this.frozen)this.frozen=!0,t.animationFrozen=!0,t.animationFrozenValue=n.getString();else if(r===`remove`&&!this.removed)return this.removed=!0,n.setValue(t.animationFrozen?t.animationFrozenValue:this.initialValue),!0;return!1}this.duration+=e;var i=!1;if(this.begint+(i[n]-t)*e).join(` `)}},yi=class extends X{constructor(e,t,n){super(e,t,n),this.type=`font`,this.glyphs=Object.create(null),this.horizAdvX=this.getAttribute(`horiz-adv-x`).getNumber();var{definitions:r}=e,{children:i}=this;for(var a of i)switch(a.type){case`font-face`:this.fontFace=a;var o=a.getStyle(`font-family`);o.hasValue()&&(r[o.getString()]=this);break;case`missing-glyph`:this.missingGlyph=a;break;case`glyph`:var s=a;s.arabicForm?(this.isRTL=!0,this.isArabic=!0,this.glyphs[s.unicode]===void 0&&(this.glyphs[s.unicode]=Object.create(null)),this.glyphs[s.unicode][s.arabicForm]=s):this.glyphs[s.unicode]=s;break}}render(){}},bi=class extends X{constructor(e,t,n){super(e,t,n),this.type=`font-face`,this.ascent=this.getAttribute(`ascent`).getNumber(),this.descent=this.getAttribute(`descent`).getNumber(),this.unitsPerEm=this.getAttribute(`units-per-em`).getNumber()}},xi=class extends Q{constructor(){super(...arguments),this.type=`missing-glyph`,this.horizAdvX=0}},Si=class extends Qr{constructor(){super(...arguments),this.type=`tref`}getText(){var e=this.getHrefAttribute().getDefinition();if(e){var t=e.children[0];if(t)return t.getText()}return``}},Ci=class extends Qr{constructor(e,t,n){super(e,t,n),this.type=`a`;var{childNodes:r}=t,i=r[0],a=r.length>0&&Array.from(r).every(e=>e.nodeType===3);this.hasText=a,this.text=a?this.getTextFromNode(i):``}getText(){return this.text}renderChildren(e){if(this.hasText){super.renderChildren(e);var{document:t,x:n,y:r}=this,{mouse:i}=t.screen,a=new J(t,`fontSize`,Jr.parse(t.ctx.font).fontSize);i.isWorking()&&i.checkBoundingBox(this,new Yr(n,r-a.getPixels(`y`),n+this.measureText(e),r))}else if(this.children.length>0){var o=new di(this.document,null);o.children=this.children,o.parent=this,o.render(e)}}onClick(){var{window:e}=this.document;e&&e.open(this.getHrefAttribute().getString())}onMouseMove(){var e=this.document.ctx;e.canvas.style.cursor=`pointer`}};function wi(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Ti(e){for(var t=1;t{var{type:n,points:r}=t;switch(n){case Z.LINE_TO:e&&e.lineTo(r[0],r[1]);break;case Z.MOVE_TO:e&&e.moveTo(r[0],r[1]);break;case Z.CURVE_TO:e&&e.bezierCurveTo(r[0],r[1],r[2],r[3],r[4],r[5]);break;case Z.QUAD_TO:e&&e.quadraticCurveTo(r[0],r[1],r[2],r[3]);break;case Z.ARC:var[i,a,o,s,c,l,u,d]=r,f=o>s?o:s,p=o>s?1:o/s,m=o>s?s/o:1;e&&(e.translate(i,a),e.rotate(u),e.scale(p,m),e.arc(0,0,f,c,c+l,!!(1-d)),e.scale(1/p,1/m),e.rotate(-u),e.translate(-i,-a));break;case Z.CLOSE_PATH:e&&e.closePath();break}})}renderChildren(e){this.setTextData(e),e.save();var t=this.parent.getStyle(`text-decoration`).getString(),n=this.getFontSize(),{glyphInfo:r}=this,i=e.fillStyle;t===`underline`&&e.beginPath(),r.forEach((r,i)=>{var{p0:a,p1:o,rotation:s,text:c}=r;e.save(),e.translate(a.x,a.y),e.rotate(s),e.fillStyle&&e.fillText(c,0,0),e.strokeStyle&&e.strokeText(c,0,0),e.restore(),t===`underline`&&(i===0&&e.moveTo(a.x,a.y+n/8),e.lineTo(o.x,o.y+n/5))}),t===`underline`&&(e.lineWidth=n/20,e.strokeStyle=i,e.stroke(),e.closePath()),e.restore()}getLetterSpacingAt(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:0;return this.letterSpacingCache[e]||0}findSegmentToFitChar(e,t,n,r,i,a,o,s,c){var l=a,u=this.measureText(e,s);s===` `&&t===`justify`&&n-1&&(l+=this.getLetterSpacingAt(c));var d=this.textHeight/20,f=this.getEquidistantPointOnPath(l,d,0),p=this.getEquidistantPointOnPath(l+u,d,0),m={p0:f,p1:p},h=f&&p?Math.atan2(p.y-f.y,p.x-f.x):0;if(o){var g=Math.cos(Math.PI/2+h)*o,_=Math.cos(-h)*o;m.p0=Ti(Ti({},f),{},{x:f.x+g,y:f.y+_}),m.p1=Ti(Ti({},p),{},{x:p.x+g,y:p.y+_})}return l+=u,{offset:l,segment:m,rotation:h}}measureText(e,t){var{measuresCache:n}=this,r=t||this.getText();if(n.has(r))return n.get(r);var i=this.measureTargetText(e,r);return n.set(r,i),i}setTextData(e){if(!this.glyphInfo){var t=this.getText(),n=t.split(``),r=t.split(` `).length-1,i=this.parent.getAttribute(`dx`).split().map(e=>e.getPixels(`x`)),a=this.parent.getAttribute(`dy`).getPixels(`y`),o=this.parent.getStyle(`text-anchor`).getString(`start`),s=this.getStyle(`letter-spacing`),c=this.parent.getStyle(`letter-spacing`),l=0;!s.hasValue()||s.getValue()===`inherit`?l=c.getPixels():s.hasValue()&&s.getValue()!==`initial`&&s.getValue()!==`unset`&&(l=s.getPixels());var u=[],d=t.length;this.letterSpacingCache=u;for(var f=0;fn===0?0:e+t||0,0),m=this.measureText(e),h=Math.max(m+p,0);this.textWidth=m,this.textHeight=this.getFontSize(),this.glyphInfo=[];var g=this.getPathLength(),_=this.getStyle(`startOffset`).getNumber(0)*g,v=0;(o===`middle`||o===`center`)&&(v=-h/2),(o===`end`||o===`right`)&&(v=-h),v+=_,n.forEach((t,i)=>{var{offset:s,segment:c,rotation:l}=this.findSegmentToFitChar(e,o,h,g,r,v,a,t,i);v=s,!(!c.p0||!c.p1)&&this.glyphInfo.push({text:n[i],p0:c.p0,p1:c.p1,rotation:l})})}}parsePathData(e){if(this.pathLength=-1,!e)return[];var t=[],{pathParser:n}=e;for(n.reset();!n.isEnd();){var{current:r}=n,i=r?r.x:0,a=r?r.y:0,o=n.next(),s=o.type,c=[];switch(o.type){case Z.MOVE_TO:this.pathM(n,c);break;case Z.LINE_TO:s=this.pathL(n,c);break;case Z.HORIZ_LINE_TO:s=this.pathH(n,c);break;case Z.VERT_LINE_TO:s=this.pathV(n,c);break;case Z.CURVE_TO:this.pathC(n,c);break;case Z.SMOOTH_CURVE_TO:s=this.pathS(n,c);break;case Z.QUAD_TO:this.pathQ(n,c);break;case Z.SMOOTH_QUAD_TO:s=this.pathT(n,c);break;case Z.ARC:c=this.pathA(n);break;case Z.CLOSE_PATH:Q.pathZ(n);break}o.type===Z.CLOSE_PATH?t.push({type:Z.CLOSE_PATH,points:[],pathLength:0}):t.push({type:s,points:c,start:{x:i,y:a},pathLength:this.calcLength(i,a,s,c)})}return t}pathM(e,t){var{x:n,y:r}=Q.pathM(e).point;t.push(n,r)}pathL(e,t){var{x:n,y:r}=Q.pathL(e).point;return t.push(n,r),Z.LINE_TO}pathH(e,t){var{x:n,y:r}=Q.pathH(e).point;return t.push(n,r),Z.LINE_TO}pathV(e,t){var{x:n,y:r}=Q.pathV(e).point;return t.push(n,r),Z.LINE_TO}pathC(e,t){var{point:n,controlPoint:r,currentPoint:i}=Q.pathC(e);t.push(n.x,n.y,r.x,r.y,i.x,i.y)}pathS(e,t){var{point:n,controlPoint:r,currentPoint:i}=Q.pathS(e);return t.push(n.x,n.y,r.x,r.y,i.x,i.y),Z.CURVE_TO}pathQ(e,t){var{controlPoint:n,currentPoint:r}=Q.pathQ(e);t.push(n.x,n.y,r.x,r.y)}pathT(e,t){var{controlPoint:n,currentPoint:r}=Q.pathT(e);return t.push(n.x,n.y,r.x,r.y),Z.QUAD_TO}pathA(e){var{rX:t,rY:n,sweepFlag:r,xAxisRotation:i,centp:a,a1:o,ad:s}=Q.pathA(e);return r===0&&s>0&&(s-=2*Math.PI),r===1&&s<0&&(s+=2*Math.PI),[a.x,a.y,t,n,o,s,i,r]}calcLength(e,t,n,r){var i=0,a=null,o=null,s=0;switch(n){case Z.LINE_TO:return this.getLineLength(e,t,r[0],r[1]);case Z.CURVE_TO:for(i=0,a=this.getPointOnCubicBezier(0,e,t,r[0],r[1],r[2],r[3],r[4],r[5]),s=.01;s<=1;s+=.01)o=this.getPointOnCubicBezier(s,e,t,r[0],r[1],r[2],r[3],r[4],r[5]),i+=this.getLineLength(a.x,a.y,o.x,o.y),a=o;return i;case Z.QUAD_TO:for(i=0,a=this.getPointOnQuadraticBezier(0,e,t,r[0],r[1],r[2],r[3]),s=.01;s<=1;s+=.01)o=this.getPointOnQuadraticBezier(s,e,t,r[0],r[1],r[2],r[3]),i+=this.getLineLength(a.x,a.y,o.x,o.y),a=o;return i;case Z.ARC:i=0;var c=r[4],l=r[5],u=r[4]+l,d=Math.PI/180;if(Math.abs(c-u)u;s-=d)o=this.getPointOnEllipticalArc(r[0],r[1],r[2],r[3],s,0),i+=this.getLineLength(a.x,a.y,o.x,o.y),a=o;else for(s=c+d;s5&&arguments[5]!==void 0?arguments[5]:t,o=arguments.length>6&&arguments[6]!==void 0?arguments[6]:n,s=(i-n)/(r-t+mr),c=Math.sqrt(e*e/(1+s*s));rt)return null;var{dataArray:i}=this;for(var a of i){if(a&&(a.pathLength<5e-5||n+a.pathLength+5e-5=0&&s>u)break;r=this.getPointOnEllipticalArc(a.points[0],a.points[1],a.points[2],a.points[3],s,a.points[6]);break;case Z.CURVE_TO:s=o/a.pathLength,s>1&&(s=1),r=this.getPointOnCubicBezier(s,a.start.x,a.start.y,a.points[0],a.points[1],a.points[2],a.points[3],a.points[4],a.points[5]);break;case Z.QUAD_TO:s=o/a.pathLength,s>1&&(s=1),r=this.getPointOnQuadraticBezier(s,a.start.x,a.start.y,a.points[0],a.points[1],a.points[2],a.points[3]);break}if(r)return r;break}return null}getLineLength(e,t,n,r){return Math.sqrt((n-e)*(n-e)+(r-t)*(r-t))}getPathLength(){return this.pathLength===-1&&(this.pathLength=this.dataArray.reduce((e,t)=>t.pathLength>0?e+t.pathLength:e,0)),this.pathLength}getPointOnCubicBezier(e,t,n,r,i,a,o,s,c){return{x:s*vr(e)+a*yr(e)+r*br(e)+t*xr(e),y:c*vr(e)+o*yr(e)+i*br(e)+n*xr(e)}}getPointOnQuadraticBezier(e,t,n,r,i,a,o){return{x:a*Sr(e)+r*Cr(e)+t*wr(e),y:o*Sr(e)+i*Cr(e)+n*wr(e)}}getPointOnEllipticalArc(e,t,n,r,i,a){var o=Math.cos(a),s=Math.sin(a),c={x:n*Math.cos(i),y:r*Math.sin(i)};return{x:e+(c.x*o-c.y*s),y:t+(c.x*s+c.y*o)}}buildEquidistantCache(e,t){var n=this.getPathLength(),r=t||.25,i=e||n/100;if(!this.equidistantCache||this.equidistantCache.step!==i||this.equidistantCache.precision!==r){this.equidistantCache={step:i,precision:r,points:[]};for(var a=0,o=0;o<=n;o+=r){var s=this.getPointOnPath(o),c=this.getPointOnPath(o+r);!s||!c||(a+=this.getLineLength(s.x,s.y,c.x,c.y),a>=i&&(this.equidistantCache.points.push({x:s.x,y:s.y,distance:o}),a-=i))}}}getEquidistantPointOnPath(e,t,n){if(this.buildEquidistantCache(t,n),e<0||e-this.getPathLength()>5e-5)return null;var r=Math.round(e/this.getPathLength()*(this.equidistantCache.points.length-1));return this.equidistantCache.points[r]||null}},Di=/^\s*data:(([^/,;]+\/[^/,;]+)(?:;([^,;=]+=[^,;=]+))?)?(?:;(base64))?,(.*)$/i,Oi=class extends Xr{constructor(e,t,n){super(e,t,n),this.type=`image`,this.loaded=!1;var r=this.getHrefAttribute().getString();if(r){var i=r.endsWith(`.svg`)||/^\s*data:image\/svg\+xml/i.test(r);e.images.push(this),i?this.loadSvg(r):this.loadImage(r),this.isSvg=i}}loadImage(e){var t=this;return yt(function*(){try{t.image=yield t.document.createImage(e)}catch(t){console.error(`Error while loading image "${e}":`,t)}t.loaded=!0})()}loadSvg(e){var t=this;return yt(function*(){var n=Di.exec(e);if(n){var r=n[5];n[4]===`base64`?t.image=atob(r):t.image=decodeURIComponent(r)}else try{t.image=yield(yield t.document.fetch(e)).text()}catch(t){console.error(`Error while loading image "${e}":`,t)}t.loaded=!0})()}renderChildren(e){var{document:t,image:n,loaded:r}=this,i=this.getAttribute(`x`).getPixels(`x`),a=this.getAttribute(`y`).getPixels(`y`),o=this.getStyle(`width`).getPixels(`x`),s=this.getStyle(`height`).getPixels(`y`);if(!(!r||!n||!o||!s)){if(e.save(),e.translate(i,a),this.isSvg){var c=t.canvg.forkString(e,this.image,{ignoreMouse:!0,ignoreAnimation:!0,ignoreDimensions:!0,ignoreClear:!0,offsetX:0,offsetY:0,scaleWidth:o,scaleHeight:s});c.document.documentElement.parent=this,c.render()}else{var l=this.image;t.setViewBox({ctx:e,aspectRatio:this.getAttribute(`preserveAspectRatio`).getString(),width:o,desiredWidth:l.width,height:s,desiredHeight:l.height}),this.loaded&&(l.complete===void 0||l.complete)&&e.drawImage(l,0,0)}e.restore()}}getBoundingBox(){var e=this.getAttribute(`x`).getPixels(`x`),t=this.getAttribute(`y`).getPixels(`y`),n=this.getStyle(`width`).getPixels(`x`),r=this.getStyle(`height`).getPixels(`y`);return new Yr(e,t,e+n,t+r)}},ki=class extends Xr{constructor(){super(...arguments),this.type=`symbol`}render(e){}},Ai=class{constructor(e){this.document=e,this.loaded=!1,e.fonts.push(this)}load(e,t){var n=this;return yt(function*(){try{var{document:r}=n,i=(yield r.canvg.parser.load(t)).getElementsByTagName(`font`);Array.from(i).forEach(t=>{var n=r.createElement(t);r.definitions[e]=n})}catch(e){console.error(`Error while loading font "${t}":`,e)}n.loaded=!0})()}},ji=class extends X{constructor(e,t,n){super(e,t,n),this.type=`style`,Qn(Array.from(t.childNodes).map(e=>e.textContent).join(``).replace(/(\/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+\/)|(^[\s]*\/\/.*)/gm,``).replace(/@import.*;/g,``)).split(`}`).forEach(t=>{var n=t.trim();if(n){var r=n.split(`{`),i=r[0].split(`,`),a=r[1].split(`;`);i.forEach(t=>{var n=t.trim();if(n){var r=e.styles[n]||{};if(a.forEach(t=>{var n=t.indexOf(`:`),i=t.substr(0,n).trim(),a=t.substr(n+1,t.length-n).trim();i&&a&&(r[i]=new J(e,i,a))}),e.styles[n]=r,e.stylesSpecificity[n]=pr(n),n===`@font-face`){var i=r[`font-family`].getString().replace(/"|'/g,``);r.src.getString().split(`,`).forEach(t=>{if(t.indexOf(`format("svg")`)>0){var n=rr(t);n&&new Ai(e).load(i,n)}})}}})}})}};ji.parseExternalUrl=rr;var Mi=class extends Xr{constructor(){super(...arguments),this.type=`use`}setContext(e){super.setContext(e);var t=this.getAttribute(`x`),n=this.getAttribute(`y`);t.hasValue()&&e.translate(t.getPixels(`x`),0),n.hasValue()&&e.translate(0,n.getPixels(`y`))}path(e){var{element:t}=this;t&&t.path(e)}renderChildren(e){var{document:t,element:n}=this;if(n){var r=n;if(n.type===`symbol`&&(r=new ti(t,null),r.attributes.viewBox=new J(t,`viewBox`,n.getAttribute(`viewBox`).getString()),r.attributes.preserveAspectRatio=new J(t,`preserveAspectRatio`,n.getAttribute(`preserveAspectRatio`).getString()),r.attributes.overflow=new J(t,`overflow`,n.getAttribute(`overflow`).getString()),r.children=n.children,n.styles.opacity=new J(t,`opacity`,this.calculateOpacity())),r.type===`svg`){var i=this.getStyle(`width`,!1,!0),a=this.getStyle(`height`,!1,!0);i.hasValue()&&(r.attributes.width=new J(t,`width`,i.getString())),a.hasValue()&&(r.attributes.height=new J(t,`height`,a.getString()))}var o=r.parent;r.parent=this,r.render(e),r.parent=o}}getBoundingBox(e){var{element:t}=this;return t?t.getBoundingBox(e):null}elementTransform(){var{document:e,element:t}=this;return Hr.fromElement(e,t)}get element(){return this.cachedElement||=this.getHrefAttribute().getDefinition(),this.cachedElement}};function Ni(e,t,n,r,i,a){return e[n*r*4+t*4+a]}function Pi(e,t,n,r,i,a,o){e[n*r*4+t*4+a]=o}function $(e,t,n){return e[t]*n}function Fi(e,t,n,r){return t+Math.cos(e)*n+Math.sin(e)*r}var Ii=class extends X{constructor(e,t,n){super(e,t,n),this.type=`feColorMatrix`;var r=q(this.getAttribute(`values`).getString());switch(this.getAttribute(`type`).getString(`matrix`)){case`saturate`:var i=r[0];r=[.213+.787*i,.715-.715*i,.072-.072*i,0,0,.213-.213*i,.715+.285*i,.072-.072*i,0,0,.213-.213*i,.715-.715*i,.072+.928*i,0,0,0,0,0,1,0,0,0,0,0,1];break;case`hueRotate`:var a=r[0]*Math.PI/180;r=[Fi(a,.213,.787,-.213),Fi(a,.715,-.715,-.715),Fi(a,.072,-.072,.928),0,0,Fi(a,.213,-.213,.143),Fi(a,.715,.285,.14),Fi(a,.072,-.072,-.283),0,0,Fi(a,.213,-.213,-.787),Fi(a,.715,-.715,.715),Fi(a,.072,.928,.072),0,0,0,0,0,1,0,0,0,0,0,1];break;case`luminanceToAlpha`:r=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,.2125,.7154,.0721,0,0,0,0,0,0,1];break}this.matrix=r,this.includeOpacity=this.getAttribute(`includeOpacity`).hasValue()}apply(e,t,n,r,i){for(var{includeOpacity:a,matrix:o}=this,s=e.getImageData(0,0,r,i),c=0;c{c.addBoundingBox(e.getBoundingBox(t))}),i=Math.floor(c.x1),a=Math.floor(c.y1),o=Math.floor(c.width),s=Math.floor(c.height)}var l=this.removeStyles(n,e.ignoreStyles),u=r.createCanvas(i+o,a+s),d=u.getContext(`2d`);r.screen.setDefaults(d),this.renderChildren(d),new Ii(r,{nodeType:1,childNodes:[],attributes:[{nodeName:`type`,value:`luminanceToAlpha`},{nodeName:`includeOpacity`,value:`true`}]}).apply(d,0,0,i+o,a+s);var f=r.createCanvas(i+o,a+s),p=f.getContext(`2d`);r.screen.setDefaults(p),n.render(p),p.globalCompositeOperation=`destination-in`,p.fillStyle=d.createPattern(u,`no-repeat`),p.fillRect(0,0,i+o,a+s),t.fillStyle=p.createPattern(f,`no-repeat`),t.fillRect(0,0,i+o,a+s),this.restoreStyles(n,l)}render(e){}};Li.ignoreStyles=[`mask`,`transform`,`clip-path`];var Ri=()=>{},zi=class extends X{constructor(){super(...arguments),this.type=`clipPath`}apply(e){var{document:t}=this,n=Reflect.getPrototypeOf(e),{beginPath:r,closePath:i}=e;n&&(n.beginPath=Ri,n.closePath=Ri),Reflect.apply(r,e,[]),this.children.forEach(r=>{if(r.path!==void 0){var a=r.elementTransform===void 0?null:r.elementTransform();a||=Hr.fromElement(t,r),a&&a.apply(e),r.path(e),n&&(n.closePath=i),a&&a.unapply(e)}}),Reflect.apply(i,e,[]),e.clip(),n&&(n.beginPath=r,n.closePath=i)}render(e){}},Bi=class e extends X{constructor(){super(...arguments),this.type=`filter`}apply(t,n){var{document:r,children:i}=this,a=n.getBoundingBox(t);if(a){var o=0,s=0;i.forEach(e=>{var t=e.extraFilterDistance||0;o=Math.max(o,t),s=Math.max(s,t)});var c=Math.floor(a.width),l=Math.floor(a.height),u=c+2*o,d=l+2*s;if(!(u<1||d<1)){var f=Math.floor(a.x),p=Math.floor(a.y),m=this.removeStyles(n,e.ignoreStyles),h=r.createCanvas(u,d),g=h.getContext(`2d`);r.screen.setDefaults(g),g.translate(-f+o,-p+s),n.render(g),i.forEach(e=>{typeof e.apply==`function`&&e.apply(g,0,0,u,d)}),t.drawImage(h,0,0,u,d,f-o,p-s,u,d),this.restoreStyles(n,m)}}}render(e){}};Bi.ignoreStyles=[`filter`,`transform`,`clip-path`];var Vi=class extends X{constructor(e,t,n){super(e,t,n),this.type=`feDropShadow`,this.addStylesFromStyleDefinition()}apply(e,t,n,r,i){}},Hi=class extends X{constructor(){super(...arguments),this.type=`feMorphology`}apply(e,t,n,r,i){}},Ui=class extends X{constructor(){super(...arguments),this.type=`feComposite`}apply(e,t,n,r,i){}},Wi=class extends X{constructor(e,t,n){super(e,t,n),this.type=`feGaussianBlur`,this.blurRadius=Math.floor(this.getAttribute(`stdDeviation`).getNumber()),this.extraFilterDistance=this.blurRadius}apply(e,t,n,r,i){var{document:a,blurRadius:o}=this,s=a.window?a.window.document.body:null,c=e.canvas;c.id=a.getUniqueId(),s&&(c.style.display=`none`,s.appendChild(c)),Kn(c,t,n,r,i,o),s&&s.removeChild(c)}},Gi=class extends X{constructor(){super(...arguments),this.type=`title`}},Ki=class extends X{constructor(){super(...arguments),this.type=`desc`}},qi={svg:ti,rect:ni,circle:ri,ellipse:ii,line:ai,polyline:oi,polygon:si,path:Q,pattern:ci,marker:li,defs:ui,linearGradient:pi,radialGradient:mi,stop:hi,animate:gi,animateColor:_i,animateTransform:vi,font:yi,"font-face":bi,"missing-glyph":xi,glyph:Zr,text:Qr,tspan:$r,tref:Si,a:Ci,textPath:Ei,image:Oi,g:di,symbol:ki,style:ji,use:Mi,mask:Li,clipPath:zi,filter:Bi,feDropShadow:Vi,feMorphology:Hi,feComposite:Ui,feColorMatrix:Ii,feGaussianBlur:Wi,title:Gi,desc:Ki};function Ji(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function Yi(e){for(var t=1;t1&&arguments[1]!==void 0?arguments[1]:!1,n=document.createElement(`img`);return t&&(n.crossOrigin=`Anonymous`),new Promise((t,r)=>{n.onload=()=>{t(n)},n.onerror=(e,t,n,i,a)=>{r(a)},n.src=e})}),Qi.apply(this,arguments)}var $i=class e{constructor(t){var{rootEmSize:n=12,emSize:r=12,createCanvas:i=e.createCanvas,createImage:a=e.createImage,anonymousCrossOrigin:o}=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{};this.canvg=t,this.definitions=Object.create(null),this.styles=Object.create(null),this.stylesSpecificity=Object.create(null),this.images=[],this.fonts=[],this.emSizeStack=[],this.uniqueId=0,this.screen=t.screen,this.rootEmSize=n,this.emSize=r,this.createCanvas=i,this.createImage=this.bindCreateImage(a,o),this.screen.wait(this.isImagesLoaded.bind(this)),this.screen.wait(this.isFontsLoaded.bind(this))}bindCreateImage(e,t){return typeof t==`boolean`?(n,r)=>e(n,typeof r==`boolean`?r:t):e}get window(){return this.screen.window}get fetch(){return this.screen.fetch}get ctx(){return this.screen.ctx}get emSize(){var{emSizeStack:e}=this;return e[e.length-1]}set emSize(e){var{emSizeStack:t}=this;t.push(e)}popEmSize(){var{emSizeStack:e}=this;e.pop()}getUniqueId(){return`canvg${++this.uniqueId}`}isImagesLoaded(){return this.images.every(e=>e.loaded)}isFontsLoaded(){return this.fonts.every(e=>e.loaded)}createDocumentElement(e){var t=this.createElement(e.documentElement);return t.root=!0,t.addStylesFromStyleDefinition(),this.documentElement=t,t}createElement(t){var n=t.nodeName.replace(/^[^:]+:/,``),r=e.elementTypes[n];return r===void 0?new Ur(this,t):new r(this,t)}createTextNode(e){return new ei(this,e)}setViewBox(e){this.screen.setViewBox(Yi({document:this},e))}};$i.createCanvas=Xi,$i.createImage=Zi,$i.elementTypes=qi;function ea(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(e);t&&(r=r.filter(function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable})),n.push.apply(n,r)}return n}function ta(e){for(var t=1;t2&&arguments[2]!==void 0?arguments[2]:{};this.parser=new Mr(n),this.screen=new kr(e,n),this.options=n;var r=new $i(this,n),i=r.createDocumentElement(t);this.document=r,this.documentElement=i}static from(t,n){var r=arguments;return yt(function*(){var i=r.length>2&&r[2]!==void 0?r[2]:{};return new e(t,yield new Mr(i).parse(n),i)})()}static fromString(t,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return new e(t,new Mr(r).parseFromString(n),r)}fork(t,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return e.from(t,n,ta(ta({},this.options),r))}forkString(t,n){var r=arguments.length>2&&arguments[2]!==void 0?arguments[2]:{};return e.fromString(t,n,ta(ta({},this.options),r))}ready(){return this.screen.ready()}isReady(){return this.screen.isReady()}render(){var e=arguments,t=this;return yt(function*(){var n=e.length>0&&e[0]!==void 0?e[0]:{};t.start(ta({enableRedraw:!0,ignoreAnimation:!0,ignoreMouse:!0},n)),yield t.ready(),t.stop()})()}start(){var e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{},{documentElement:t,screen:n,options:r}=this;n.start(t,ta(ta({enableRedraw:!0},r),e))}stop(){this.screen.stop()}resize(e){var t=arguments.length>1&&arguments[1]!==void 0?arguments[1]:e,n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:!1;this.documentElement.resize(e,t,n)}};export{Ci as AElement,_i as AnimateColorElement,gi as AnimateElement,vi as AnimateTransformElement,Yr as BoundingBox,vr as CB1,yr as CB2,br as CB3,xr as CB4,na as Canvg,na as default,ri as CircleElement,zi as ClipPathElement,ui as DefsElement,Ki as DescElement,$i as Document,X as Element,ii as EllipseElement,Ii as FeColorMatrixElement,Ui as FeCompositeElement,Vi as FeDropShadowElement,Wi as FeGaussianBlurElement,Hi as FeMorphologyElement,Bi as FilterElement,Jr as Font,yi as FontElement,bi as FontFaceElement,di as GElement,Zr as GlyphElement,fi as GradientElement,Oi as ImageElement,ai as LineElement,pi as LinearGradientElement,li as MarkerElement,Li as MaskElement,Ir as Matrix,xi as MissingGlyphElement,Er as Mouse,mr as PSEUDO_ZERO,Mr as Parser,Q as PathElement,Z as PathParser,ci as PatternElement,Y as Point,si as PolygonElement,oi as PolylineElement,J as Property,Sr as QB1,Cr as QB2,wr as QB3,mi as RadialGradientElement,ni as RectElement,Xr as RenderedElement,Pr as Rotate,ti as SVGElement,Ai as SVGFontLoader,Fr as Scale,kr as Screen,Lr as Skew,Rr as SkewX,zr as SkewY,hi as StopElement,ji as StyleElement,ki as SymbolElement,Si as TRefElement,$r as TSpanElement,Qr as TextElement,Ei as TextPathElement,Gi as TitleElement,Hr as Transform,Nr as Translate,Ur as UnknownElement,Mi as UseElement,Tr as ViewPort,Qn as compressSpaces,pr as getSelectorSpecificity,nr as normalizeAttributeName,ir as normalizeColor,rr as parseExternalUrl,Zn as presets,q as toNumbers,$n as trimLeft,er as trimRight,hr as vectorMagnitude,_r as vectorsAngle,gr as vectorsRatio}; \ No newline at end of file diff --git a/dist/assets/purify.es-DlxR2Lg_.js b/dist/assets/purify.es-DlxR2Lg_.js deleted file mode 100644 index a58afeba..00000000 --- a/dist/assets/purify.es-DlxR2Lg_.js +++ /dev/null @@ -1,3 +0,0 @@ -function e(e,t){(t==null||t>e.length)&&(t=e.length);for(var n=0,r=Array(t);n`u`?null:w(BigInt.prototype.toString),y=typeof Symbol>`u`?null:w(Symbol.prototype.toString),b=w(Object.prototype.hasOwnProperty),x=w(Object.prototype.toString),S=w(RegExp.prototype.test),C=T(TypeError);function w(e){return function(t){t instanceof RegExp&&(t.lastIndex=0);var n=[...arguments].slice(1);return h(e,t,n)}}function T(e){return function(){return ee(e,[...arguments])}}function E(e,t){let n=arguments.length>2&&arguments[2]!==void 0?arguments[2]:ae;if(s&&s(e,null),!_(t))return e;let r=t.length;for(;r--;){let i=t[r];if(typeof i==`string`){let e=n(i);e!==i&&(c(t)||(t[r]=e),i=e)}e[i]=!0}return e}function D(e){for(let t=0;t/g),Oe=f(/\${[\w\W]*/g),ke=f(/^data-[\-\w.\u00B7-\uFFFF]+$/),Ae=f(/^aria-[\-\w]+$/),je=f(/^(?:(?:(?:f|ht)tps?|mailto|tel|callto|sms|cid|xmpp|matrix):|[^a-z]|[a-z+.\-]+(?:[^a-z+.\-:]|$))/i),Me=f(/^(?:\w+script|data):/i),Ne=f(/[\u0000-\u0020\u00A0\u1680\u180E\u2000-\u2029\u205F\u3000]/g),Pe=f(/^html$/i),Fe=f(/^[a-z][.\w]*(-[.\w]+)+$/i),Ie=f(/<[/\w!]/g),Le=f(/<[/\w]/g),Re=f(/<\/no(script|embed|frames)/i),ze=f(/\/>/i),A={element:1,attribute:2,text:3,cdataSection:4,entityReference:5,entityNode:6,processingInstruction:7,comment:8,document:9,documentType:10,documentFragment:11,notation:12},Be=function(){return typeof window>`u`?null:window},Ve=function(e,t){if(typeof e!=`object`||typeof e.createPolicy!=`function`)return null;let n=null,r=`data-tt-policy-suffix`;t&&t.hasAttribute(r)&&(n=t.getAttribute(r));let i=`dompurify`+(n?`#`+n:``);try{return e.createPolicy(i,{createHTML(e){return e},createScriptURL(e){return e}})}catch{return console.warn(`TrustedTypes policy `+i+` could not be created.`),null}},He=function(){return{afterSanitizeAttributes:[],afterSanitizeElements:[],afterSanitizeShadowDOM:[],beforeSanitizeAttributes:[],beforeSanitizeElements:[],beforeSanitizeShadowDOM:[],uponSanitizeAttribute:[],uponSanitizeElement:[],uponSanitizeShadowNode:[]}},j=function(e,t,n,r){return b(e,t)&&_(e[t])?E(r.base?O(r.base):{},e[t],r.transform):n};function Ue(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:Be(),t=e=>Ue(e);if(t.version=`3.4.10`,t.removed=[],!e||!e.document||e.document.nodeType!==A.document||!e.Element)return t.isSupported=!1,t;let n=e.document,r=n,i=r.currentScript;e.DocumentFragment;let a=e.HTMLTemplateElement,s=e.Node,c=e.Element,l=e.NodeFilter;e.NamedNodeMap===void 0&&(e.NamedNodeMap||e.MozNamedAttrMap),e.HTMLFormElement;let u=e.DOMParser,m=e.trustedTypes,h=c.prototype,ee=k(h,`cloneNode`),de=k(h,`remove`),fe=k(h,`nextSibling`),v=k(h,`childNodes`),y=k(h,`parentNode`),x=k(h,`shadowRoot`),w=k(h,`attributes`),T=s&&s.prototype?k(s.prototype,`nodeType`):null,D=s&&s.prototype?k(s.prototype,`nodeName`):null;if(typeof a==`function`){let e=n.createElement(`template`);e.content&&e.content.ownerDocument&&(n=e.content.ownerDocument)}let M,N=``,We,Ge=!1,Ke=0,qe=function(){if(Ke>0)throw C(`A configured TRUSTED_TYPES_POLICY callback (createHTML or createScriptURL) must not call DOMPurify.sanitize, as that causes infinite recursion. Do not pass a policy whose callbacks wrap DOMPurify as TRUSTED_TYPES_POLICY; see the "DOMPurify and Trusted Types" section of the README.`)},P=function(e){qe(),Ke++;try{return M.createHTML(e)}finally{Ke--}},Je=function(e){qe(),Ke++;try{return M.createScriptURL(e)}finally{Ke--}},Ye=function(){return Ge||=(We=Ve(m,i),!0),We},Xe=n,Ze=Xe.implementation,Qe=Xe.createNodeIterator,$e=Xe.createDocumentFragment,et=Xe.getElementsByTagName,tt=r.importNode,F=He();t.isSupported=typeof o==`function`&&typeof y==`function`&&Ze&&Ze.createHTMLDocument!==void 0;let nt=Ee,rt=De,it=Oe,at=ke,ot=Ae,st=Me,ct=Ne,lt=Fe,ut=je,I=null,dt=E({},[...he,...ge,..._e,...ye,...xe]),L=null,ft=E({},[...Se,...Ce,...we,...Te]),R=Object.seal(p(null,{tagNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeNameCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},allowCustomizedBuiltInElements:{writable:!0,configurable:!1,enumerable:!0,value:!1}})),pt=null,mt=null,z=Object.seal(p(null,{tagCheck:{writable:!0,configurable:!1,enumerable:!0,value:null},attributeCheck:{writable:!0,configurable:!1,enumerable:!0,value:null}})),ht=!0,gt=!0,_t=!1,vt=!0,B=!1,yt=!0,V=!1,bt=!1,xt=!1,H=!1,St=!1,Ct=!1,wt=!0,Tt=!1,Et=`user-content-`,Dt=!0,Ot=!1,U={},W=null,kt=E({},`annotation-xml.audio.colgroup.desc.foreignobject.head.iframe.math.mi.mn.mo.ms.mtext.noembed.noframes.noscript.plaintext.script.selectedcontent.style.svg.template.thead.title.video.xmp`.split(`.`)),At=null,jt=E({},[`audio`,`video`,`img`,`source`,`image`,`track`]),Mt=null,Nt=E({},[`alt`,`class`,`for`,`id`,`label`,`name`,`pattern`,`placeholder`,`role`,`summary`,`title`,`value`,`style`,`xmlns`]),Pt=`http://www.w3.org/1998/Math/MathML`,Ft=`http://www.w3.org/2000/svg`,G=`http://www.w3.org/1999/xhtml`,K=G,It=!1,Lt=null,Rt=E({},[Pt,Ft,G],oe),zt=d([`mi`,`mo`,`mn`,`ms`,`mtext`]),Bt=E({},zt),Vt=d([`annotation-xml`]),Ht=E({},Vt),Ut=E({},[`title`,`style`,`font`,`a`,`script`]),q=null,Wt=[`application/xhtml+xml`,`text/html`],J=null,Y=null,Gt=n.createElement(`form`),Kt=function(e){return e instanceof RegExp||e instanceof Function},qt=function(){let e=arguments.length>0&&arguments[0]!==void 0?arguments[0]:{};if(Y&&Y===e)return;(!e||typeof e!=`object`)&&(e={}),e=O(e),q=Wt.indexOf(e.PARSER_MEDIA_TYPE)===-1?`text/html`:e.PARSER_MEDIA_TYPE,J=q===`application/xhtml+xml`?oe:ae,I=j(e,`ALLOWED_TAGS`,dt,{transform:J}),L=j(e,`ALLOWED_ATTR`,ft,{transform:J}),Lt=j(e,`ALLOWED_NAMESPACES`,Rt,{transform:oe}),Mt=j(e,`ADD_URI_SAFE_ATTR`,Nt,{transform:J,base:Nt}),At=j(e,`ADD_DATA_URI_TAGS`,jt,{transform:J,base:jt}),W=j(e,`FORBID_CONTENTS`,kt,{transform:J}),pt=j(e,`FORBID_TAGS`,O({}),{transform:J}),mt=j(e,`FORBID_ATTR`,O({}),{transform:J}),U=b(e,`USE_PROFILES`)?e.USE_PROFILES&&typeof e.USE_PROFILES==`object`?O(e.USE_PROFILES):e.USE_PROFILES:!1,ht=e.ALLOW_ARIA_ATTR!==!1,gt=e.ALLOW_DATA_ATTR!==!1,_t=e.ALLOW_UNKNOWN_PROTOCOLS||!1,vt=e.ALLOW_SELF_CLOSE_IN_ATTR!==!1,B=e.SAFE_FOR_TEMPLATES||!1,yt=e.SAFE_FOR_XML!==!1,V=e.WHOLE_DOCUMENT||!1,H=e.RETURN_DOM||!1,St=e.RETURN_DOM_FRAGMENT||!1,Ct=e.RETURN_TRUSTED_TYPE||!1,xt=e.FORCE_BODY||!1,wt=e.SANITIZE_DOM!==!1,Tt=e.SANITIZE_NAMED_PROPS||!1,Dt=e.KEEP_CONTENT!==!1,Ot=e.IN_PLACE||!1,ut=me(e.ALLOWED_URI_REGEXP)?e.ALLOWED_URI_REGEXP:je,K=typeof e.NAMESPACE==`string`?e.NAMESPACE:G,Bt=b(e,`MATHML_TEXT_INTEGRATION_POINTS`)&&e.MATHML_TEXT_INTEGRATION_POINTS&&typeof e.MATHML_TEXT_INTEGRATION_POINTS==`object`?O(e.MATHML_TEXT_INTEGRATION_POINTS):E({},zt),Ht=b(e,`HTML_INTEGRATION_POINTS`)&&e.HTML_INTEGRATION_POINTS&&typeof e.HTML_INTEGRATION_POINTS==`object`?O(e.HTML_INTEGRATION_POINTS):E({},Vt);let t=b(e,`CUSTOM_ELEMENT_HANDLING`)&&e.CUSTOM_ELEMENT_HANDLING&&typeof e.CUSTOM_ELEMENT_HANDLING==`object`?O(e.CUSTOM_ELEMENT_HANDLING):p(null);if(R=p(null),b(t,`tagNameCheck`)&&Kt(t.tagNameCheck)&&(R.tagNameCheck=t.tagNameCheck),b(t,`attributeNameCheck`)&&Kt(t.attributeNameCheck)&&(R.attributeNameCheck=t.attributeNameCheck),b(t,`allowCustomizedBuiltInElements`)&&typeof t.allowCustomizedBuiltInElements==`boolean`&&(R.allowCustomizedBuiltInElements=t.allowCustomizedBuiltInElements),f(R),B&&(gt=!1),St&&(H=!0),U&&(I=E({},xe),L=p(null),U.html===!0&&(E(I,he),E(L,Se)),U.svg===!0&&(E(I,ge),E(L,Ce),E(L,Te)),U.svgFilters===!0&&(E(I,_e),E(L,Ce),E(L,Te)),U.mathMl===!0&&(E(I,ye),E(L,we),E(L,Te))),z.tagCheck=null,z.attributeCheck=null,b(e,`ADD_TAGS`)&&(typeof e.ADD_TAGS==`function`?z.tagCheck=e.ADD_TAGS:_(e.ADD_TAGS)&&(I===dt&&(I=O(I)),E(I,e.ADD_TAGS,J))),b(e,`ADD_ATTR`)&&(typeof e.ADD_ATTR==`function`?z.attributeCheck=e.ADD_ATTR:_(e.ADD_ATTR)&&(L===ft&&(L=O(L)),E(L,e.ADD_ATTR,J))),b(e,`ADD_URI_SAFE_ATTR`)&&_(e.ADD_URI_SAFE_ATTR)&&E(Mt,e.ADD_URI_SAFE_ATTR,J),b(e,`FORBID_CONTENTS`)&&_(e.FORBID_CONTENTS)&&(W===kt&&(W=O(W)),E(W,e.FORBID_CONTENTS,J)),b(e,`ADD_FORBID_CONTENTS`)&&_(e.ADD_FORBID_CONTENTS)&&(W===kt&&(W=O(W)),E(W,e.ADD_FORBID_CONTENTS,J)),Dt&&(I[`#text`]=!0),V&&E(I,[`html`,`head`,`body`]),I.table&&(E(I,[`tbody`]),delete pt.tbody),e.TRUSTED_TYPES_POLICY){if(typeof e.TRUSTED_TYPES_POLICY.createHTML!=`function`)throw C(`TRUSTED_TYPES_POLICY configuration option must provide a "createHTML" hook.`);if(typeof e.TRUSTED_TYPES_POLICY.createScriptURL!=`function`)throw C(`TRUSTED_TYPES_POLICY configuration option must provide a "createScriptURL" hook.`);let t=M;M=e.TRUSTED_TYPES_POLICY;try{N=P(``)}catch(e){throw M=t,e}}else e.TRUSTED_TYPES_POLICY===null?(M=void 0,N=``):(M===void 0&&(M=Ye()),M&&typeof N==`string`&&(N=P(``)));(F.uponSanitizeElement.length>0||F.uponSanitizeAttribute.length>0)&&I===dt&&(I=O(I)),F.uponSanitizeAttribute.length>0&&L===ft&&(L=O(L)),d&&d(e),Y=e},Jt=E({},[...ge,..._e,...ve]),Yt=E({},[...ye,...be]),Xt=function(e,t,n){return t.namespaceURI===G?e===`svg`:t.namespaceURI===Pt?e===`svg`&&(n===`annotation-xml`||Bt[n]):!!Jt[e]},Zt=function(e,t,n){return t.namespaceURI===G?e===`math`:t.namespaceURI===Ft?e===`math`&&Ht[n]:!!Yt[e]},Qt=function(e,t,n){return t.namespaceURI===Ft&&!Ht[n]||t.namespaceURI===Pt&&!Bt[n]?!1:!Yt[e]&&(Ut[e]||!Jt[e])},$t=function(e){let t=y(e);(!t||!t.tagName)&&(t={namespaceURI:K,tagName:`template`});let n=ae(e.tagName),r=ae(t.tagName);return Lt[e.namespaceURI]?e.namespaceURI===Ft?Xt(n,t,r):e.namespaceURI===Pt?Zt(n,t,r):e.namespaceURI===G?Qt(n,t,r):!!(q===`application/xhtml+xml`&&Lt[e.namespaceURI]):!1},X=function(e){g(t.removed,{element:e});try{y(e).removeChild(e)}catch{if(de(e),!y(e))throw C(`a node selected for removal could not be detached from its tree and cannot be safely returned; refusing to sanitize in place`)}},en=function(e){let t=v(e);if(t){let e=[];te(t,t=>{g(e,t)}),te(e,e=>{try{de(e)}catch{}})}let n=w(e);if(n)for(let t=n.length-1;t>=0;--t){let r=n[t],i=r&&r.name;if(typeof i==`string`)try{e.removeAttribute(i)}catch{}}},Z=function(e,n){try{g(t.removed,{attribute:n.getAttributeNode(e),from:n})}catch{g(t.removed,{attribute:null,from:n})}if(n.removeAttribute(e),e===`is`)if(H||St)try{X(n)}catch{}else try{n.setAttribute(e,``)}catch{}},tn=function(e){let t=w(e);if(t)for(let n=t.length-1;n>=0;--n){let r=t[n],i=r&&r.name;if(!(typeof i!=`string`||L[J(i)]))try{e.removeAttribute(i)}catch{}}},nn=function(e){let t=[e];for(;t.length>0;){let e=t.pop();(T?T(e):e.nodeType)===A.element&&tn(e);let n=v(e);if(n)for(let e=n.length-1;e>=0;--e)t.push(n[e])}},rn=function(e){let t=null,r=null;if(xt)e=``+e;else{let t=se(e,/^[\r\n\t ]+/);r=t&&t[0]}q===`application/xhtml+xml`&&K===G&&(e=``+e+``);let i=M?P(e):e;if(K===G)try{t=new u().parseFromString(i,q)}catch{}if(!t||!t.documentElement){t=Ze.createDocument(K,`template`,null);try{t.documentElement.innerHTML=It?N:i}catch{}}let a=t.body||t.documentElement;return e&&r&&a.insertBefore(n.createTextNode(r),a.childNodes[0]||null),K===G?et.call(t,V?`html`:`body`)[0]:V?t.documentElement:a},an=function(e){return Qe.call(e.ownerDocument||e,e,l.SHOW_ELEMENT|l.SHOW_COMMENT|l.SHOW_TEXT|l.SHOW_PROCESSING_INSTRUCTION|l.SHOW_CDATA_SECTION,null)},on=function(e){return e=ce(e,nt,` `),e=ce(e,rt,` `),e=ce(e,it,` `),e},sn=function(e){e.normalize();let t=Qe.call(e.ownerDocument||e,e,l.SHOW_TEXT|l.SHOW_COMMENT|l.SHOW_CDATA_SECTION|l.SHOW_PROCESSING_INSTRUCTION,null),n=t.nextNode();for(;n;)n.data=on(n.data),n=t.nextNode();let r=e.querySelectorAll?.call(e,`template`);r&&te(r,e=>{Q(e.content)&&sn(e.content)})},cn=function(e){let t=D?D(e):null;return typeof t!=`string`||J(t)!==`form`?!1:typeof e.nodeName!=`string`||typeof e.textContent!=`string`||typeof e.removeChild!=`function`||e.attributes!==w(e)||typeof e.removeAttribute!=`function`||typeof e.setAttribute!=`function`||typeof e.namespaceURI!=`string`||typeof e.insertBefore!=`function`||typeof e.hasChildNodes!=`function`||e.nodeType!==T(e)||e.childNodes!==v(e)},Q=function(e){if(!T||typeof e!=`object`||!e)return!1;try{return T(e)===A.documentFragment}catch{return!1}},ln=function(e){if(!T||typeof e!=`object`||!e)return!1;try{return typeof T(e)==`number`}catch{return!1}};function $(e,n,r){e.length!==0&&te(e,e=>{e.call(t,n,r,Y)})}let un=function(e,t){return!!(yt&&e.hasChildNodes()&&!ln(e.firstElementChild)&&S(Ie,e.textContent)&&S(Ie,e.innerHTML)||yt&&e.namespaceURI===G&&t===`style`&&ln(e.firstElementChild)||e.nodeType===A.processingInstruction||yt&&e.nodeType===A.comment&&S(Le,e.data))},dn=function(e,t){if(!pt[t]&&hn(t)&&(R.tagNameCheck instanceof RegExp&&S(R.tagNameCheck,t)||R.tagNameCheck instanceof Function&&R.tagNameCheck(t)))return!1;if(Dt&&!W[t]){let t=y(e),n=v(e);if(n&&t){let r=n.length;for(let i=r-1;i>=0;--i){let r=Ot?n[i]:ee(n[i],!0);t.insertBefore(r,fe(e))}}}return X(e),!0},fn=function(e){if($(F.beforeSanitizeElements,e,null),cn(e))return X(e),!0;let n=J(D?D(e):e.nodeName);if($(F.uponSanitizeElement,e,{tagName:n,allowedTags:I}),un(e,n))return X(e),!0;if(pt[n]||!(z.tagCheck instanceof Function&&z.tagCheck(n))&&!I[n])return dn(e,n);if((T?T(e):e.nodeType)===A.element&&!$t(e)||(n===`noscript`||n===`noembed`||n===`noframes`)&&S(Re,e.innerHTML))return X(e),!0;if(B&&e.nodeType===A.text){let n=on(e.textContent);e.textContent!==n&&(g(t.removed,{element:e.cloneNode()}),e.textContent=n)}return $(F.afterSanitizeElements,e,null),!1},pn=function(e,t,r){if(mt[t]||wt&&(t===`id`||t===`name`)&&(r in n||r in Gt))return!1;let i=L[t]||z.attributeCheck instanceof Function&&z.attributeCheck(t,e);if(!(gt&&S(at,t))&&!(ht&&S(ot,t))){if(!i){if(!(hn(e)&&(R.tagNameCheck instanceof RegExp&&S(R.tagNameCheck,e)||R.tagNameCheck instanceof Function&&R.tagNameCheck(e))&&(R.attributeNameCheck instanceof RegExp&&S(R.attributeNameCheck,t)||R.attributeNameCheck instanceof Function&&R.attributeNameCheck(t,e))||t===`is`&&R.allowCustomizedBuiltInElements&&(R.tagNameCheck instanceof RegExp&&S(R.tagNameCheck,r)||R.tagNameCheck instanceof Function&&R.tagNameCheck(r))))return!1}else if(!Mt[t]&&!S(ut,ce(r,ct,``))&&!((t===`src`||t===`xlink:href`||t===`href`)&&e!==`script`&&le(r,`data:`)===0&&At[e])&&!(_t&&!S(st,ce(r,ct,``)))&&r)return!1}return!0},mn=E({},[`annotation-xml`,`color-profile`,`font-face`,`font-face-format`,`font-face-name`,`font-face-src`,`font-face-uri`,`missing-glyph`]),hn=function(e){return!mn[ae(e)]&&S(lt,e)},gn=function(e,t,n,r){if(M&&typeof m==`object`&&typeof m.getAttributeType==`function`&&!n)switch(m.getAttributeType(e,t)){case`TrustedHTML`:return P(r);case`TrustedScriptURL`:return Je(r)}return r},_n=function(e,n,r,i){try{r?e.setAttributeNS(r,n,i):e.setAttribute(n,i),cn(e)?X(e):re(t.removed)}catch{Z(n,e)}},vn=function(e){$(F.beforeSanitizeAttributes,e,null);let t=e.attributes;if(!t||cn(e))return;let n={attrName:``,attrValue:``,keepAttr:!0,allowedAttributes:L,forceKeepAttr:void 0},r=t.length,i=J(e.nodeName);for(;r--;){let a=t[r],o=a.name,s=a.namespaceURI,c=a.value,l=J(o),u=c,d=o===`value`?u:ue(u);if(n.attrName=l,n.attrValue=d,n.keepAttr=!0,n.forceKeepAttr=void 0,$(F.uponSanitizeAttribute,e,n),d=n.attrValue,Tt&&(l===`id`||l===`name`)&&le(d,Et)!==0&&(Z(o,e),d=Et+d),yt&&S(/((--!?|])>)|<\/(style|script|title|xmp|textarea|noscript|iframe|noembed|noframes)/i,d)){Z(o,e);continue}if(l===`attributename`&&se(d,`href`)){Z(o,e);continue}if(!n.forceKeepAttr){if(!n.keepAttr){Z(o,e);continue}if(!vt&&S(ze,d)){Z(o,e);continue}if(B&&(d=on(d)),!pn(i,l,d)){Z(o,e);continue}d=gn(i,l,s,d),d!==u&&_n(e,o,s,d)}}$(F.afterSanitizeAttributes,e,null)},yn=function(e){let t=null,n=an(e);for($(F.beforeSanitizeShadowDOM,e,null);t=n.nextNode();)if($(F.uponSanitizeShadowNode,t,null),fn(t),vn(t),Q(t.content)&&yn(t.content),(T?T(t):t.nodeType)===A.element){let e=x(t);Q(e)&&(bn(e),yn(e))}$(F.afterSanitizeShadowDOM,e,null)},bn=function(e){let t=[{node:e,shadow:null}];for(;t.length>0;){let e=t.pop();if(e.shadow){yn(e.shadow);continue}let n=e.node,r=(T?T(n):n.nodeType)===A.element,i=v(n);if(i)for(let e=i.length-1;e>=0;--e)t.push({node:i[e],shadow:null});if(r){let e=D?D(n):null;if(typeof e==`string`&&J(e)===`template`){let e=n.content;Q(e)&&t.push({node:e,shadow:null})}}if(r){let e=x(n);Q(e)&&t.push({node:null,shadow:e},{node:e,shadow:null})}}};return t.sanitize=function(e){let n=arguments.length>1&&arguments[1]!==void 0?arguments[1]:{},i=null,a=null,o=null,s=null;if(It=!e,It&&(e=``),typeof e!=`string`&&!ln(e)&&(e=pe(e),typeof e!=`string`))throw C(`dirty is not a string, aborting`);if(!t.isSupported)return e;bt||qt(n),t.removed=[];let c=Ot&&typeof e!=`string`&&ln(e);if(c){let t=D?D(e):e.nodeName;if(typeof t==`string`){let e=J(t);if(!I[e]||pt[e])throw C(`root node is forbidden and cannot be sanitized in-place`)}if(cn(e))throw C(`root node is clobbered and cannot be sanitized in-place`);try{bn(e)}catch(t){throw en(e),t}}else if(ln(e))i=rn(``),a=i.ownerDocument.importNode(e,!0),a.nodeType===A.element&&a.nodeName===`BODY`||a.nodeName===`HTML`?i=a:i.appendChild(a),bn(a);else{if(!H&&!B&&!V&&e.indexOf(`<`)===-1)return M&&Ct?P(e):e;if(i=rn(e),!i)return H?null:Ct?N:``}i&&xt&&X(i.firstChild);let l=an(c?e:i);try{for(;o=l.nextNode();)fn(o),vn(o),Q(o.content)&&yn(o.content)}catch(t){throw c&&en(e),t}if(c)return te(t.removed,e=>{e.element&&nn(e.element)}),B&&sn(e),e;if(H){if(B&&sn(i),St)for(s=$e.call(i.ownerDocument);i.firstChild;)s.appendChild(i.firstChild);else s=i;return(L.shadowroot||L.shadowrootmode)&&(s=tt.call(r,s,!0)),s}let u=V?i.outerHTML:i.innerHTML;return V&&I[`!doctype`]&&i.ownerDocument&&i.ownerDocument.doctype&&i.ownerDocument.doctype.name&&S(Pe,i.ownerDocument.doctype.name)&&(u=` -`+u),B&&(u=on(u)),M&&Ct?P(u):u},t.setConfig=function(){qt(arguments.length>0&&arguments[0]!==void 0?arguments[0]:{}),bt=!0},t.clearConfig=function(){Y=null,bt=!1,M=We,N=``},t.isValidAttribute=function(e,t,n){return Y||qt({}),pn(J(e),J(t),n)},t.addHook=function(e,t){typeof t==`function`&&g(F[e],t)},t.removeHook=function(e,t){if(t!==void 0){let n=ne(F[e],t);return n===-1?void 0:ie(F[e],n,1)[0]}return re(F[e])},t.removeHooks=function(e){F[e]=[]},t.removeAllHooks=function(){F=He()},t}var M=Ue();export{M as default}; \ No newline at end of file diff --git a/dist/index.html b/dist/index.html index e595eea7..5245917a 100644 --- a/dist/index.html +++ b/dist/index.html @@ -3,12 +3,71 @@ - Hydro Builder + Hydro Builder | 3D Hydroponics System Designer + + + + + + + + + + + + + + + + + + + + + + + + + + + + - - + + + + + + + + +
diff --git a/index.html b/index.html index b2b46f96..80978fb1 100644 --- a/index.html +++ b/index.html @@ -3,10 +3,65 @@ - Hydro Builder + Hydro Builder | 3D Hydroponics System Designer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/node_modules/.package-lock.json b/node_modules/.package-lock.json index 511a1b5e..5269d364 100644 --- a/node_modules/.package-lock.json +++ b/node_modules/.package-lock.json @@ -1539,6 +1539,18 @@ "node": ">= 0.4" } }, + "node_modules/helmet": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-8.2.0.tgz", + "integrity": "sha512-DRgTIUgnWcJ62KyarxxziuqYxKGnR6Rgg19BlbucN/dpmJbl1XOit6qvoOX0ZT+HhWe5OUVhU/a1zpGyc1xA0Q==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/EvanHahn" + } + }, "node_modules/hls.js": { "version": "1.6.16", "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.16.tgz", diff --git a/node_modules/.vite/deps/@react-three_drei.js b/node_modules/.vite/deps/@react-three_drei.js index eae3bf1a..b710dc57 100644 --- a/node_modules/.vite/deps/@react-three_drei.js +++ b/node_modules/.vite/deps/@react-three_drei.js @@ -1,10 +1,9 @@ import { n as __exportAll, r as __toESM, t as __commonJSMin } from "./chunk-B-1-B7_t.js"; -import { $ as Camera, $i as OrthographicCamera$1, $n as InstancedMesh, As as UniformsUtils, Bo as Sphere$1, Bs as Vector2, C as AnimationMixer, Da as RGBAFormat, Dn as Frustum, Ea as RGBADepthPacking, Eo as SRGBColorSpace, Fo as ShortType, Fr as LinearFilter, Fs as UnsignedIntType, Ft as CurvePath, Gs as VideoTexture$1, Hi as Object3D, Ho as Spherical, Hs as Vector4, Ht as DataTexture, J as BufferAttribute, Jt as DepthFormat, Kr as LoadingManager, Lr as LinearMipMapLinearFilter, N as AudioListener, Oa as RGBAIntegerFormat, Oo as Scene, Or as Line3, Os as Uniform, Ot as CubicBezierCurve3, P as AudioLoader, Ro as SkinnedMesh, Rs as UnsignedShortType, Rt as CylinderGeometry, Sn as FloatType, Tt as CubeTextureLoader, Vn as HalfFloatType, Vo as SphereGeometry, Vr as LinearSRGBColorSpace, Vs as Vector3, W as Box3, Wr as Loader$1, Xn as InstancedBufferAttribute, Xt as DepthTexture, Y as BufferGeometry, Ys as WebGLRenderTarget, Z as ByteType, Zn as InstancedBufferGeometry, Zr as Material, _a as QuadraticBezierCurve3, a as WebGLCubeRenderTarget, aa as PlaneGeometry, ai as Mesh, bt as CubeCamera$1, ci as MeshDistanceMaterial, cn as EdgesGeometry, co as RGIntegerFormat, ct as Color, di as MeshNormalMaterial, do as Raycaster, ds as Texture$1, ei as MathUtils, et as CameraHelper, fs as TextureLoader, gn as EventDispatcher$1, hn as Euler, i as UniformsLib, ia as Plane$1, jo as Shape$1, js as UnsignedByteType, ko as ShaderMaterial, li as MeshLambertMaterial, mi as MeshStandardMaterial, mo as RedIntegerFormat, mr as KeepStencilOp, n as ShaderChunk, ni as Matrix3, o as WebGLRenderer, oi as MeshBasicMaterial, on as DynamicDrawUsage, ot as ClampToEdgeWrapping, pi as MeshPhysicalMaterial, po as RedFormat, qt as DefaultLoadingManager, ra as PerspectiveCamera$1, ri as Matrix4, rr as IntType, rt as CatmullRomCurve3, si as MeshDepthMaterial, so as RGFormat, tt as CanvasTexture, ua as PointsMaterial, uo as Ray, va as Quaternion, vo as RepeatWrapping, vs as Triangle, xi as NearestFilter, xn as Float32BufferAttribute, yn as FileLoader, yo as ReplaceStencilOp, z as BatchedMesh, zn as Group, zr as LinearMipmapLinearFilter } from "./three.module-DxhMWCDR.js"; import { t as require_react } from "./react.js"; import { t as require_client } from "./react-dom_client.js"; -import { A as clear$1, D as useLoader, E as useInstanceHandle, M as suspend, N as require_with_selector, a as addEffect, c as applyProps, g as extend, i as addAfterEffect, j as preload, k as useThree, p as createPortal, u as context$10, w as useFrame } from "./react-three-fiber.esm-CjFO8AMT.js"; +import { $ as Camera, $i as OrthographicCamera$1, $n as InstancedMesh, As as UniformsUtils, Bo as Sphere$1, Br as LinearMipmapNearestFilter, Bs as Vector2, C as AnimationMixer, Da as RGBAFormat, Dn as Frustum, Dr as Line$1, Ea as RGBADepthPacking, Eo as SRGBColorSpace$2, Fa as RGBA_ASTC_4x4_Format, Fo as ShortType, Fr as LinearFilter, Fs as UnsignedIntType, Ft as CurvePath, Gi as OctahedronGeometry, Gn as ImageBitmapLoader, Go as SpotLight$1, Gr as LoaderUtils, Gs as VideoTexture$1, Hi as Object3D, Ho as Spherical, Hs as Vector4, Ht as DataTexture, Io as Skeleton, J as BufferAttribute, Jt as DepthFormat, K as BoxGeometry, Ka as RGBA_PVRTC_4BPPV1_Format, Kr as LoadingManager, Lo as SkeletonHelper, Lr as LinearMipMapLinearFilter, N as AudioListener, No as ShapePath, Nr as LineLoop, Oa as RGBAIntegerFormat, Oo as Scene, Or as Line3, Os as Uniform, Ot as CubicBezierCurve3, P as AudioLoader, Po as ShapeUtils, Pr as LineSegments, Pt as Curve, Qn as InstancedInterleavedBuffer, Qs as WireframeGeometry, Qt as DirectionalLight, Rn as GridHelper, Ro as SkinnedMesh, Rs as UnsignedShortType, Rt as CylinderGeometry, Sn as FloatType, Ti as NearestMipmapNearestFilter, Tt as CubeTextureLoader, U as Box2, Ua as RGBA_BPTC_Format, Us as VectorKeyframeTrack, Ut as DataTextureLoader, V as Bone, Vi as NumberKeyframeTrack, Vn as HalfFloatType, Vo as SphereGeometry, Vr as LinearSRGBColorSpace$2, Vs as Vector3, W as Box3, Wa as RGBA_ETC2_EAC_Format, Wn as IcosahedronGeometry, Wr as Loader$1, Wt as DataUtils, Xn as InstancedBufferAttribute, Xr as MOUSE, Xt as DepthTexture, Y as BufferGeometry, Ya as RGBA_S3TC_DXT5_Format, Ys as WebGLRenderTarget, Z as ByteType, Zn as InstancedBufferGeometry, Zr as Material, _a as QuadraticBezierCurve3, _i as MirroredRepeatWrapping, a as WebGLCubeRenderTarget, aa as PlaneGeometry, ai as Mesh, ao as RGB_S3TC_DXT1_Format, ar as InterleavedBufferAttribute, bt as CubeCamera$1, ci as MeshDistanceMaterial, cn as EdgesGeometry, co as RGIntegerFormat, cr as InterpolateDiscrete, cs as TOUCH, ct as Color, di as MeshNormalMaterial, do as Raycaster, ds as Texture$1, ei as MathUtils, et as CameraHelper, fi as MeshPhongMaterial, fs as TextureLoader, gn as EventDispatcher$2, gs as TorusGeometry, hn as Euler, i as UniformsLib, ia as Plane$1, io as RGB_PVRTC_4BPPV1_Format, ir as InterleavedBuffer, jo as Shape$1, js as UnsignedByteType, ko as ShaderMaterial, kr as LineBasicMaterial, la as Points$1, li as MeshLambertMaterial, ln as EllipseCurve, lr as InterpolateLinear, ma as PropertyBinding, mi as MeshStandardMaterial, mo as RedIntegerFormat, mr as KeepStencilOp, mt as CompressedTexture, n as ShaderChunk, na as Path, ni as Matrix3, no as RGB_ETC2_Format, o as WebGLRenderer, oi as MeshBasicMaterial, on as DynamicDrawUsage, or as Interpolant, ot as ClampToEdgeWrapping, pi as MeshPhysicalMaterial, po as RedFormat, qt as DefaultLoadingManager, ra as PerspectiveCamera$1, ri as Matrix4, rr as IntType, rt as CatmullRomCurve3, sa as PointLight, si as MeshDepthMaterial, so as RGFormat, st as Clock, to as RGB_ETC1_Format, tt as CanvasTexture, ua as PointsMaterial, uo as Ray, va as Quaternion, vn as ExtrudeGeometry, vo as RepeatWrapping, vs as Triangle, wi as NearestMipmapLinearFilter, ws as Uint16BufferAttribute, x as AnimationClip, xi as NearestFilter, xn as Float32BufferAttribute, y as AmbientLight, ya as QuaternionKeyframeTrack, yn as FileLoader, yo as ReplaceStencilOp, z as BatchedMesh, za as RGBA_ASTC_6x6_Format, zn as Group, zr as LinearMipmapLinearFilter } from "./three.module-DxhMWCDR.js"; +import { A as clear$1, D as useLoader, E as useInstanceHandle, M as suspend, N as require_with_selector, a as addEffect, c as applyProps, g as extend, i as addAfterEffect, j as preload, k as useThree, p as createPortal, u as context$10, w as useFrame } from "./react-three-fiber.esm-CIxUR0B5.js"; import { create as create$2 } from "./zustand.js"; -import { $i as MarchingCubes$1, Bi as SkeletonUtils, Bn as TextGeometry, Bt as AsciiEffect, Cn as GammaCorrectionShader, D as Line2, Dt as FontLoader, Gi as GroundProjectedEnv, Hn as DecalGeometry, Kt as SelectionBox, M as LineGeometry, Ma as toCreasedNormals, Mi as MeshSurfaceSampler, N as LineSegmentsGeometry, O as LineSegments2, Ot as FBXLoader, Pa as Flow, Qi as SimplexNoise, Sr as EffectComposer, W as DRACOLoader, Z as SVGLoader, ai as ShaderPass, ci as FlyControls$1, ct as EXRLoader, di as OrbitControls$1, dt as RGBELoader, en as VerticalBlurShader, fi as TrackballControls$1, gi as TransformControls$1, j as LineMaterial, ja as mergeVertices, li as ArcballControls$1, mi as PointerLockControls$1, mt as KTX2Loader, oi as FullScreenQuad, pi as DeviceOrientationControls$1, pr as RenderPass, qi as Sky$1, sr as GLTFLoader, t as MeshoptDecoder, ui as MapControls$1, vn as HorizontalBlurShader, yi as FirstPersonControls$1 } from "./three-stdlib-BHZ1qH6e.js"; //#region node_modules/@babel/runtime/helpers/esm/extends.js function _extends$1() { return _extends$1 = Object.assign ? Object.assign.bind() : function(n) { @@ -3692,6 +3691,23091 @@ function useKeyboardControls(sel) { else return [sub, get]; } //#endregion +//#region node_modules/three-stdlib/_polyfill/constants.js +var version$2 = /* @__PURE__ */ (() => parseInt("184".replace(/\D+/g, "")))(); +//#endregion +//#region node_modules/three-stdlib/_polyfill/uv1.js +var UV1 = version$2 >= 125 ? "uv1" : "uv2"; +//#endregion +//#region node_modules/three-stdlib/modifiers/CurveModifier.js +var __defProp$19 = Object.defineProperty; +var __defNormalProp$19 = (obj, key, value) => key in obj ? __defProp$19(obj, key, { + enumerable: true, + configurable: true, + writable: true, + value +}) : obj[key] = value; +var __publicField$19 = (obj, key, value) => { + __defNormalProp$19(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var CHANNELS = 4; +var TEXTURE_WIDTH = 1024; +var TEXTURE_HEIGHT = 4; +var initSplineTexture = (numberOfCurves = 1) => { + const dataTexture = new DataTexture(new Float32Array(TEXTURE_WIDTH * TEXTURE_HEIGHT * numberOfCurves * CHANNELS), TEXTURE_WIDTH, TEXTURE_HEIGHT * numberOfCurves, RGBAFormat, FloatType); + dataTexture.wrapS = RepeatWrapping; + dataTexture.wrapT = RepeatWrapping; + dataTexture.magFilter = NearestFilter; + dataTexture.needsUpdate = true; + return dataTexture; +}; +var updateSplineTexture = (texture, splineCurve, offset = 0) => { + const numberOfPoints = Math.floor(TEXTURE_WIDTH * (TEXTURE_HEIGHT / 4)); + splineCurve.arcLengthDivisions = numberOfPoints / 2; + splineCurve.updateArcLengths(); + const points = splineCurve.getSpacedPoints(numberOfPoints); + const frenetFrames = splineCurve.computeFrenetFrames(numberOfPoints, true); + for (let i = 0; i < numberOfPoints; i++) { + const rowOffset = Math.floor(i / TEXTURE_WIDTH); + const rowIndex = i % TEXTURE_WIDTH; + let pt = points[i]; + setTextureValue(texture, rowIndex, pt.x, pt.y, pt.z, 0 + rowOffset + TEXTURE_HEIGHT * offset); + pt = frenetFrames.tangents[i]; + setTextureValue(texture, rowIndex, pt.x, pt.y, pt.z, 1 + rowOffset + TEXTURE_HEIGHT * offset); + pt = frenetFrames.normals[i]; + setTextureValue(texture, rowIndex, pt.x, pt.y, pt.z, 2 + rowOffset + TEXTURE_HEIGHT * offset); + pt = frenetFrames.binormals[i]; + setTextureValue(texture, rowIndex, pt.x, pt.y, pt.z, 3 + rowOffset + TEXTURE_HEIGHT * offset); + } + texture.needsUpdate = true; +}; +var setTextureValue = (texture, index, x, y, z, o) => { + const { data } = texture.image; + const i = CHANNELS * TEXTURE_WIDTH * o; + data[index * CHANNELS + i + 0] = x; + data[index * CHANNELS + i + 1] = y; + data[index * CHANNELS + i + 2] = z; + data[index * CHANNELS + i + 3] = 1; +}; +var getUniforms$1 = (splineTexture) => ({ + spineTexture: { value: splineTexture }, + pathOffset: { + type: "f", + value: 0 + }, + pathSegment: { + type: "f", + value: 1 + }, + spineOffset: { + type: "f", + value: 161 + }, + spineLength: { + type: "f", + value: 400 + }, + flow: { + type: "i", + value: 1 + } +}); +function modifyShader(material, uniforms, numberOfCurves = 1) { + if (material.__ok) return; + material.__ok = true; + material.onBeforeCompile = (shader) => { + if (shader.__modified) return; + shader.__modified = true; + Object.assign(shader.uniforms, uniforms); + shader.vertexShader = ` + uniform sampler2D spineTexture; + uniform float pathOffset; + uniform float pathSegment; + uniform float spineOffset; + uniform float spineLength; + uniform int flow; + + float textureLayers = ${TEXTURE_HEIGHT * numberOfCurves}.; + float textureStacks = ${TEXTURE_HEIGHT / 4}.; + + ${shader.vertexShader} + `.replace("#include ", "").replace("#include ", "").replace("#include ", "").replace(/void\s*main\s*\(\)\s*\{/, ` + void main() { + #include + + vec4 worldPos = modelMatrix * vec4(position, 1.); + + bool bend = flow > 0; + float xWeight = bend ? 0. : 1.; + + #ifdef USE_INSTANCING + float pathOffsetFromInstanceMatrix = instanceMatrix[3][2]; + float spineLengthFromInstanceMatrix = instanceMatrix[3][0]; + float spinePortion = bend ? (worldPos.x + spineOffset) / spineLengthFromInstanceMatrix : 0.; + float mt = (spinePortion * pathSegment + pathOffset + pathOffsetFromInstanceMatrix)*textureStacks; + #else + float spinePortion = bend ? (worldPos.x + spineOffset) / spineLength : 0.; + float mt = (spinePortion * pathSegment + pathOffset)*textureStacks; + #endif + + mt = mod(mt, textureStacks); + float rowOffset = floor(mt); + + #ifdef USE_INSTANCING + rowOffset += instanceMatrix[3][1] * ${TEXTURE_HEIGHT}.; + #endif + + vec3 spinePos = texture2D(spineTexture, vec2(mt, (0. + rowOffset + 0.5) / textureLayers)).xyz; + vec3 a = texture2D(spineTexture, vec2(mt, (1. + rowOffset + 0.5) / textureLayers)).xyz; + vec3 b = texture2D(spineTexture, vec2(mt, (2. + rowOffset + 0.5) / textureLayers)).xyz; + vec3 c = texture2D(spineTexture, vec2(mt, (3. + rowOffset + 0.5) / textureLayers)).xyz; + mat3 basis = mat3(a, b, c); + + vec3 transformed = basis + * vec3(worldPos.x * xWeight, worldPos.y * 1., worldPos.z * 1.) + + spinePos; + + vec3 transformedNormal = normalMatrix * (basis * objectNormal); + `).replace("#include ", `vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 ); + gl_Position = projectionMatrix * mvPosition;`); + }; +} +var Flow = class { + /** + * @param {Mesh} mesh The mesh to clone and modify to bend around the curve + * @param {number} numberOfCurves The amount of space that should preallocated for additional curves + */ + constructor(mesh, numberOfCurves = 1) { + __publicField$19(this, "curveArray"); + __publicField$19(this, "curveLengthArray"); + __publicField$19(this, "object3D"); + __publicField$19(this, "splineTexure"); + __publicField$19(this, "uniforms"); + const obj3D = mesh.clone(); + const splineTexure = initSplineTexture(numberOfCurves); + const uniforms = getUniforms$1(splineTexure); + obj3D.traverse((child) => { + if (child instanceof Mesh || child instanceof InstancedMesh) { + child.material = child.material.clone(); + modifyShader(child.material, uniforms, numberOfCurves); + } + }); + this.curveArray = new Array(numberOfCurves); + this.curveLengthArray = new Array(numberOfCurves); + this.object3D = obj3D; + this.splineTexure = splineTexure; + this.uniforms = uniforms; + } + updateCurve(index, curve) { + if (index >= this.curveArray.length) throw Error("Index out of range for Flow"); + const curveLength = curve.getLength(); + this.uniforms.spineLength.value = curveLength; + this.curveLengthArray[index] = curveLength; + this.curveArray[index] = curve; + updateSplineTexture(this.splineTexure, curve, index); + } + moveAlongCurve(amount) { + this.uniforms.pathOffset.value += amount; + } +}; +//#endregion +//#region node_modules/three-stdlib/utils/BufferGeometryUtils.js +function mergeVertices(geometry, tolerance = 1e-4) { + tolerance = Math.max(tolerance, Number.EPSILON); + const hashToIndex = {}; + const indices = geometry.getIndex(); + const positions = geometry.getAttribute("position"); + const vertexCount = indices ? indices.count : positions.count; + let nextIndex = 0; + const attributeNames = Object.keys(geometry.attributes); + const attrArrays = {}; + const morphAttrsArrays = {}; + const newIndices = []; + const getters = [ + "getX", + "getY", + "getZ", + "getW" + ]; + for (let i = 0, l = attributeNames.length; i < l; i++) { + const name = attributeNames[i]; + attrArrays[name] = []; + const morphAttr = geometry.morphAttributes[name]; + if (morphAttr) morphAttrsArrays[name] = new Array(morphAttr.length).fill(0).map(() => []); + } + const decimalShift = Math.log10(1 / tolerance); + const shiftMultiplier = Math.pow(10, decimalShift); + for (let i = 0; i < vertexCount; i++) { + const index = indices ? indices.getX(i) : i; + let hash = ""; + for (let j = 0, l = attributeNames.length; j < l; j++) { + const name = attributeNames[j]; + const attribute = geometry.getAttribute(name); + const itemSize = attribute.itemSize; + for (let k = 0; k < itemSize; k++) hash += `${~~(attribute[getters[k]](index) * shiftMultiplier)},`; + } + if (hash in hashToIndex) newIndices.push(hashToIndex[hash]); + else { + for (let j = 0, l = attributeNames.length; j < l; j++) { + const name = attributeNames[j]; + const attribute = geometry.getAttribute(name); + const morphAttr = geometry.morphAttributes[name]; + const itemSize = attribute.itemSize; + const newarray = attrArrays[name]; + const newMorphArrays = morphAttrsArrays[name]; + for (let k = 0; k < itemSize; k++) { + const getterFunc = getters[k]; + newarray.push(attribute[getterFunc](index)); + if (morphAttr) for (let m = 0, ml = morphAttr.length; m < ml; m++) newMorphArrays[m].push(morphAttr[m][getterFunc](index)); + } + } + hashToIndex[hash] = nextIndex; + newIndices.push(nextIndex); + nextIndex++; + } + } + const result = geometry.clone(); + for (let i = 0, l = attributeNames.length; i < l; i++) { + const name = attributeNames[i]; + const oldAttribute = geometry.getAttribute(name); + const attribute = new BufferAttribute(new oldAttribute.array.constructor(attrArrays[name]), oldAttribute.itemSize, oldAttribute.normalized); + result.setAttribute(name, attribute); + if (name in morphAttrsArrays) for (let j = 0; j < morphAttrsArrays[name].length; j++) { + const oldMorphAttribute = geometry.morphAttributes[name][j]; + const morphAttribute = new BufferAttribute(new oldMorphAttribute.array.constructor(morphAttrsArrays[name][j]), oldMorphAttribute.itemSize, oldMorphAttribute.normalized); + result.morphAttributes[name][j] = morphAttribute; + } + } + result.setIndex(newIndices); + return result; +} +function toTrianglesDrawMode(geometry, drawMode) { + if (drawMode === 0) { + console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."); + return geometry; + } + if (drawMode === 2 || drawMode === 1) { + let index = geometry.getIndex(); + if (index === null) { + const indices = []; + const position = geometry.getAttribute("position"); + if (position !== void 0) { + for (let i = 0; i < position.count; i++) indices.push(i); + geometry.setIndex(indices); + index = geometry.getIndex(); + } else { + console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."); + return geometry; + } + } + const numberOfTriangles = index.count - 2; + const newIndices = []; + if (index) if (drawMode === 2) for (let i = 1; i <= numberOfTriangles; i++) { + newIndices.push(index.getX(0)); + newIndices.push(index.getX(i)); + newIndices.push(index.getX(i + 1)); + } + else for (let i = 0; i < numberOfTriangles; i++) if (i % 2 === 0) { + newIndices.push(index.getX(i)); + newIndices.push(index.getX(i + 1)); + newIndices.push(index.getX(i + 2)); + } else { + newIndices.push(index.getX(i + 2)); + newIndices.push(index.getX(i + 1)); + newIndices.push(index.getX(i)); + } + if (newIndices.length / 3 !== numberOfTriangles) console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles."); + const newGeometry = geometry.clone(); + newGeometry.setIndex(newIndices); + newGeometry.clearGroups(); + return newGeometry; + } else { + console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:", drawMode); + return geometry; + } +} +function toCreasedNormals(geometry, creaseAngle = Math.PI / 3) { + const creaseDot = Math.cos(creaseAngle); + const hashMultiplier = 1.0000000001 * 100; + const verts = [ + new Vector3(), + new Vector3(), + new Vector3() + ]; + const tempVec1 = new Vector3(); + const tempVec2 = new Vector3(); + const tempNorm = new Vector3(); + const tempNorm2 = new Vector3(); + function hashVertex(v) { + return `${~~(v.x * hashMultiplier)},${~~(v.y * hashMultiplier)},${~~(v.z * hashMultiplier)}`; + } + const resultGeometry = geometry.index ? geometry.toNonIndexed() : geometry; + const posAttr = resultGeometry.attributes.position; + const vertexMap = {}; + for (let i = 0, l = posAttr.count / 3; i < l; i++) { + const i3 = 3 * i; + const a = verts[0].fromBufferAttribute(posAttr, i3 + 0); + const b = verts[1].fromBufferAttribute(posAttr, i3 + 1); + const c = verts[2].fromBufferAttribute(posAttr, i3 + 2); + tempVec1.subVectors(c, b); + tempVec2.subVectors(a, b); + const normal = new Vector3().crossVectors(tempVec1, tempVec2).normalize(); + for (let n = 0; n < 3; n++) { + const vert = verts[n]; + const hash = hashVertex(vert); + if (!(hash in vertexMap)) vertexMap[hash] = []; + vertexMap[hash].push(normal); + } + } + const normAttr = new BufferAttribute(new Float32Array(posAttr.count * 3), 3, false); + for (let i = 0, l = posAttr.count / 3; i < l; i++) { + const i3 = 3 * i; + const a = verts[0].fromBufferAttribute(posAttr, i3 + 0); + const b = verts[1].fromBufferAttribute(posAttr, i3 + 1); + const c = verts[2].fromBufferAttribute(posAttr, i3 + 2); + tempVec1.subVectors(c, b); + tempVec2.subVectors(a, b); + tempNorm.crossVectors(tempVec1, tempVec2).normalize(); + for (let n = 0; n < 3; n++) { + const vert = verts[n]; + const otherNormals = vertexMap[hashVertex(vert)]; + tempNorm2.set(0, 0, 0); + for (let k = 0, lk = otherNormals.length; k < lk; k++) { + const otherNorm = otherNormals[k]; + if (tempNorm.dot(otherNorm) > creaseDot) tempNorm2.add(otherNorm); + } + tempNorm2.normalize(); + normAttr.setXYZ(i3 + n, tempNorm2.x, tempNorm2.y, tempNorm2.z); + } + } + resultGeometry.setAttribute("normal", normAttr); + return resultGeometry; +} +//#endregion +//#region node_modules/three-stdlib/node_modules/fflate/esm/browser.js +var u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array; +var fleb = new u8([ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 1, + 1, + 1, + 1, + 2, + 2, + 2, + 2, + 3, + 3, + 3, + 3, + 4, + 4, + 4, + 4, + 5, + 5, + 5, + 5, + 0, + 0, + 0, + 0 +]); +var fdeb = new u8([ + 0, + 0, + 0, + 0, + 1, + 1, + 2, + 2, + 3, + 3, + 4, + 4, + 5, + 5, + 6, + 6, + 7, + 7, + 8, + 8, + 9, + 9, + 10, + 10, + 11, + 11, + 12, + 12, + 13, + 13, + 0, + 0 +]); +var clim = new u8([ + 16, + 17, + 18, + 0, + 8, + 7, + 9, + 6, + 10, + 5, + 11, + 4, + 12, + 3, + 13, + 2, + 14, + 1, + 15 +]); +var freb = function(eb, start) { + var b = new u16(31); + for (var i = 0; i < 31; ++i) b[i] = start += 1 << eb[i - 1]; + var r = new u32(b[30]); + for (var i = 1; i < 30; ++i) for (var j = b[i]; j < b[i + 1]; ++j) r[j] = j - b[i] << 5 | i; + return [b, r]; +}; +var _a = freb(fleb, 2), fl = _a[0], revfl = _a[1]; +fl[28] = 258, revfl[258] = 28; +var _b = freb(fdeb, 0), fd = _b[0]; +_b[1]; +var rev = new u16(32768); +for (var i$2 = 0; i$2 < 32768; ++i$2) { + var x = (i$2 & 43690) >>> 1 | (i$2 & 21845) << 1; + x = (x & 52428) >>> 2 | (x & 13107) << 2; + x = (x & 61680) >>> 4 | (x & 3855) << 4; + rev[i$2] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1; +} +var hMap = (function(cd, mb, r) { + var s = cd.length; + var i = 0; + var l = new u16(mb); + for (; i < s; ++i) ++l[cd[i] - 1]; + var le = new u16(mb); + for (i = 0; i < mb; ++i) le[i] = le[i - 1] + l[i - 1] << 1; + var co; + if (r) { + co = new u16(1 << mb); + var rvb = 15 - mb; + for (i = 0; i < s; ++i) if (cd[i]) { + var sv = i << 4 | cd[i]; + var r_1 = mb - cd[i]; + var v = le[cd[i] - 1]++ << r_1; + for (var m = v | (1 << r_1) - 1; v <= m; ++v) co[rev[v] >>> rvb] = sv; + } + } else { + co = new u16(s); + for (i = 0; i < s; ++i) if (cd[i]) co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i]; + } + return co; +}); +var flt = new u8(288); +for (var i$2 = 0; i$2 < 144; ++i$2) flt[i$2] = 8; +for (var i$2 = 144; i$2 < 256; ++i$2) flt[i$2] = 9; +for (var i$2 = 256; i$2 < 280; ++i$2) flt[i$2] = 7; +for (var i$2 = 280; i$2 < 288; ++i$2) flt[i$2] = 8; +var fdt = new u8(32); +for (var i$2 = 0; i$2 < 32; ++i$2) fdt[i$2] = 5; +var flrm = /*#__PURE__*/ hMap(flt, 9, 1), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1); +var max = function(a) { + var m = a[0]; + for (var i = 1; i < a.length; ++i) if (a[i] > m) m = a[i]; + return m; +}; +var bits = function(d, p, m) { + var o = p / 8 | 0; + return (d[o] | d[o + 1] << 8) >> (p & 7) & m; +}; +var bits16 = function(d, p) { + var o = p / 8 | 0; + return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7); +}; +var shft = function(p) { + return (p / 8 | 0) + (p & 7 && 1); +}; +var slc = function(v, s, e) { + if (s == null || s < 0) s = 0; + if (e == null || e > v.length) e = v.length; + var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s); + n.set(v.subarray(s, e)); + return n; +}; +var inflt = function(dat, buf, st) { + var sl = dat.length; + if (!sl || st && !st.l && sl < 5) return buf || new u8(0); + var noBuf = !buf || st; + var noSt = !st || st.i; + if (!st) st = {}; + if (!buf) buf = new u8(sl * 3); + var cbuf = function(l) { + var bl = buf.length; + if (l > bl) { + var nbuf = new u8(Math.max(bl * 2, l)); + nbuf.set(buf); + buf = nbuf; + } + }; + var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n; + var tbts = sl * 8; + do { + if (!lm) { + st.f = final = bits(dat, pos, 1); + var type = bits(dat, pos + 1, 3); + pos += 3; + if (!type) { + var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l; + if (t > sl) { + if (noSt) throw "unexpected EOF"; + break; + } + if (noBuf) cbuf(bt + l); + buf.set(dat.subarray(s, t), bt); + st.b = bt += l, st.p = pos = t * 8; + continue; + } else if (type == 1) lm = flrm, dm = fdrm, lbt = 9, dbt = 5; + else if (type == 2) { + var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4; + var tl = hLit + bits(dat, pos + 5, 31) + 1; + pos += 14; + var ldt = new u8(tl); + var clt = new u8(19); + for (var i = 0; i < hcLen; ++i) clt[clim[i]] = bits(dat, pos + i * 3, 7); + pos += hcLen * 3; + var clb = max(clt), clbmsk = (1 << clb) - 1; + var clm = hMap(clt, clb, 1); + for (var i = 0; i < tl;) { + var r = clm[bits(dat, pos, clbmsk)]; + pos += r & 15; + var s = r >>> 4; + if (s < 16) ldt[i++] = s; + else { + var c = 0, n = 0; + if (s == 16) n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1]; + else if (s == 17) n = 3 + bits(dat, pos, 7), pos += 3; + else if (s == 18) n = 11 + bits(dat, pos, 127), pos += 7; + while (n--) ldt[i++] = c; + } + } + var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit); + lbt = max(lt); + dbt = max(dt); + lm = hMap(lt, lbt, 1); + dm = hMap(dt, dbt, 1); + } else throw "invalid block type"; + if (pos > tbts) { + if (noSt) throw "unexpected EOF"; + break; + } + } + if (noBuf) cbuf(bt + 131072); + var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1; + var lpos = pos; + for (;; lpos = pos) { + var c = lm[bits16(dat, pos) & lms], sym = c >>> 4; + pos += c & 15; + if (pos > tbts) { + if (noSt) throw "unexpected EOF"; + break; + } + if (!c) throw "invalid length/literal"; + if (sym < 256) buf[bt++] = sym; + else if (sym == 256) { + lpos = pos, lm = null; + break; + } else { + var add = sym - 254; + if (sym > 264) { + var i = sym - 257, b = fleb[i]; + add = bits(dat, pos, (1 << b) - 1) + fl[i]; + pos += b; + } + var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4; + if (!d) throw "invalid distance"; + pos += d & 15; + var dt = fd[dsym]; + if (dsym > 3) { + var b = fdeb[dsym]; + dt += bits16(dat, pos) & (1 << b) - 1, pos += b; + } + if (pos > tbts) { + if (noSt) throw "unexpected EOF"; + break; + } + if (noBuf) cbuf(bt + 131072); + var end = bt + add; + for (; bt < end; bt += 4) { + buf[bt] = buf[bt - dt]; + buf[bt + 1] = buf[bt + 1 - dt]; + buf[bt + 2] = buf[bt + 2 - dt]; + buf[bt + 3] = buf[bt + 3 - dt]; + } + bt = end; + } + } + st.l = lm, st.p = lpos, st.b = bt; + if (lm) final = 1, st.m = lbt, st.d = dm, st.n = dbt; + } while (!final); + return bt == buf.length ? buf : slc(buf, 0, bt); +}; +var et = /*#__PURE__*/ new u8(0); +var zlv = function(d) { + if ((d[0] & 15) != 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31) throw "invalid zlib data"; + if (d[1] & 32) throw "invalid zlib data: preset dictionaries not supported"; +}; +/** +* Expands Zlib data +* @param data The data to decompress +* @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length. +* @returns The decompressed version of the data +*/ +function unzlibSync(data, out) { + return inflt((zlv(data), data.subarray(2, -4)), out); +} +var td = typeof TextDecoder != "undefined" && /*#__PURE__*/ new TextDecoder(); +try { + td.decode(et, { stream: true }); +} catch (e) {} +//#endregion +//#region node_modules/three-stdlib/objects/MarchingCubes.js +var MarchingCubes$1 = class extends Mesh { + constructor(resolution, material, enableUvs = false, enableColors = false, maxPolyCount = 1e4) { + const geometry = new BufferGeometry(); + super(geometry, material); + this.isMarchingCubes = true; + const scope = this; + const vlist = new Float32Array(36); + const nlist = new Float32Array(36); + const clist = new Float32Array(36); + this.enableUvs = enableUvs; + this.enableColors = enableColors; + this.init = function(resolution2) { + this.resolution = resolution2; + this.isolation = 80; + this.size = resolution2; + this.size2 = this.size * this.size; + this.size3 = this.size2 * this.size; + this.halfsize = this.size / 2; + this.delta = 2 / this.size; + this.yd = this.size; + this.zd = this.size2; + this.field = new Float32Array(this.size3); + this.normal_cache = new Float32Array(this.size3 * 3); + this.palette = new Float32Array(this.size3 * 3); + this.count = 0; + const maxVertexCount = maxPolyCount * 3; + this.positionArray = new Float32Array(maxVertexCount * 3); + const positionAttribute = new BufferAttribute(this.positionArray, 3); + positionAttribute.setUsage(DynamicDrawUsage); + geometry.setAttribute("position", positionAttribute); + this.normalArray = new Float32Array(maxVertexCount * 3); + const normalAttribute = new BufferAttribute(this.normalArray, 3); + normalAttribute.setUsage(DynamicDrawUsage); + geometry.setAttribute("normal", normalAttribute); + if (this.enableUvs) { + this.uvArray = new Float32Array(maxVertexCount * 2); + const uvAttribute = new BufferAttribute(this.uvArray, 2); + uvAttribute.setUsage(DynamicDrawUsage); + geometry.setAttribute("uv", uvAttribute); + } + if (this.enableColors) { + this.colorArray = new Float32Array(maxVertexCount * 3); + const colorAttribute = new BufferAttribute(this.colorArray, 3); + colorAttribute.setUsage(DynamicDrawUsage); + geometry.setAttribute("color", colorAttribute); + } + geometry.boundingSphere = new Sphere$1(new Vector3(), 1); + }; + function lerp(a, b, t) { + return a + (b - a) * t; + } + function VIntX(q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2) { + const mu = (isol - valp1) / (valp2 - valp1), nc = scope.normal_cache; + vlist[offset + 0] = x + mu * scope.delta; + vlist[offset + 1] = y; + vlist[offset + 2] = z; + nlist[offset + 0] = lerp(nc[q + 0], nc[q + 3], mu); + nlist[offset + 1] = lerp(nc[q + 1], nc[q + 4], mu); + nlist[offset + 2] = lerp(nc[q + 2], nc[q + 5], mu); + clist[offset + 0] = lerp(scope.palette[c_offset1 * 3 + 0], scope.palette[c_offset2 * 3 + 0], mu); + clist[offset + 1] = lerp(scope.palette[c_offset1 * 3 + 1], scope.palette[c_offset2 * 3 + 1], mu); + clist[offset + 2] = lerp(scope.palette[c_offset1 * 3 + 2], scope.palette[c_offset2 * 3 + 2], mu); + } + function VIntY(q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2) { + const mu = (isol - valp1) / (valp2 - valp1), nc = scope.normal_cache; + vlist[offset + 0] = x; + vlist[offset + 1] = y + mu * scope.delta; + vlist[offset + 2] = z; + const q2 = q + scope.yd * 3; + nlist[offset + 0] = lerp(nc[q + 0], nc[q2 + 0], mu); + nlist[offset + 1] = lerp(nc[q + 1], nc[q2 + 1], mu); + nlist[offset + 2] = lerp(nc[q + 2], nc[q2 + 2], mu); + clist[offset + 0] = lerp(scope.palette[c_offset1 * 3 + 0], scope.palette[c_offset2 * 3 + 0], mu); + clist[offset + 1] = lerp(scope.palette[c_offset1 * 3 + 1], scope.palette[c_offset2 * 3 + 1], mu); + clist[offset + 2] = lerp(scope.palette[c_offset1 * 3 + 2], scope.palette[c_offset2 * 3 + 2], mu); + } + function VIntZ(q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2) { + const mu = (isol - valp1) / (valp2 - valp1), nc = scope.normal_cache; + vlist[offset + 0] = x; + vlist[offset + 1] = y; + vlist[offset + 2] = z + mu * scope.delta; + const q2 = q + scope.zd * 3; + nlist[offset + 0] = lerp(nc[q + 0], nc[q2 + 0], mu); + nlist[offset + 1] = lerp(nc[q + 1], nc[q2 + 1], mu); + nlist[offset + 2] = lerp(nc[q + 2], nc[q2 + 2], mu); + clist[offset + 0] = lerp(scope.palette[c_offset1 * 3 + 0], scope.palette[c_offset2 * 3 + 0], mu); + clist[offset + 1] = lerp(scope.palette[c_offset1 * 3 + 1], scope.palette[c_offset2 * 3 + 1], mu); + clist[offset + 2] = lerp(scope.palette[c_offset1 * 3 + 2], scope.palette[c_offset2 * 3 + 2], mu); + } + function compNorm(q) { + const q3 = q * 3; + if (scope.normal_cache[q3] === 0) { + scope.normal_cache[q3 + 0] = scope.field[q - 1] - scope.field[q + 1]; + scope.normal_cache[q3 + 1] = scope.field[q - scope.yd] - scope.field[q + scope.yd]; + scope.normal_cache[q3 + 2] = scope.field[q - scope.zd] - scope.field[q + scope.zd]; + } + } + function polygonize(fx, fy, fz, q, isol) { + const q1 = q + 1, qy = q + scope.yd, qz = q + scope.zd, q1y = q1 + scope.yd, q1z = q1 + scope.zd, qyz = q + scope.yd + scope.zd, q1yz = q1 + scope.yd + scope.zd; + let cubeindex = 0; + const field0 = scope.field[q], field1 = scope.field[q1], field2 = scope.field[qy], field3 = scope.field[q1y], field4 = scope.field[qz], field5 = scope.field[q1z], field6 = scope.field[qyz], field7 = scope.field[q1yz]; + if (field0 < isol) cubeindex |= 1; + if (field1 < isol) cubeindex |= 2; + if (field2 < isol) cubeindex |= 8; + if (field3 < isol) cubeindex |= 4; + if (field4 < isol) cubeindex |= 16; + if (field5 < isol) cubeindex |= 32; + if (field6 < isol) cubeindex |= 128; + if (field7 < isol) cubeindex |= 64; + const bits = edgeTable[cubeindex]; + if (bits === 0) return 0; + const d = scope.delta, fx2 = fx + d, fy2 = fy + d, fz2 = fz + d; + if (bits & 1) { + compNorm(q); + compNorm(q1); + VIntX(q * 3, 0, isol, fx, fy, fz, field0, field1, q, q1); + } + if (bits & 2) { + compNorm(q1); + compNorm(q1y); + VIntY(q1 * 3, 3, isol, fx2, fy, fz, field1, field3, q1, q1y); + } + if (bits & 4) { + compNorm(qy); + compNorm(q1y); + VIntX(qy * 3, 6, isol, fx, fy2, fz, field2, field3, qy, q1y); + } + if (bits & 8) { + compNorm(q); + compNorm(qy); + VIntY(q * 3, 9, isol, fx, fy, fz, field0, field2, q, qy); + } + if (bits & 16) { + compNorm(qz); + compNorm(q1z); + VIntX(qz * 3, 12, isol, fx, fy, fz2, field4, field5, qz, q1z); + } + if (bits & 32) { + compNorm(q1z); + compNorm(q1yz); + VIntY(q1z * 3, 15, isol, fx2, fy, fz2, field5, field7, q1z, q1yz); + } + if (bits & 64) { + compNorm(qyz); + compNorm(q1yz); + VIntX(qyz * 3, 18, isol, fx, fy2, fz2, field6, field7, qyz, q1yz); + } + if (bits & 128) { + compNorm(qz); + compNorm(qyz); + VIntY(qz * 3, 21, isol, fx, fy, fz2, field4, field6, qz, qyz); + } + if (bits & 256) { + compNorm(q); + compNorm(qz); + VIntZ(q * 3, 24, isol, fx, fy, fz, field0, field4, q, qz); + } + if (bits & 512) { + compNorm(q1); + compNorm(q1z); + VIntZ(q1 * 3, 27, isol, fx2, fy, fz, field1, field5, q1, q1z); + } + if (bits & 1024) { + compNorm(q1y); + compNorm(q1yz); + VIntZ(q1y * 3, 30, isol, fx2, fy2, fz, field3, field7, q1y, q1yz); + } + if (bits & 2048) { + compNorm(qy); + compNorm(qyz); + VIntZ(qy * 3, 33, isol, fx, fy2, fz, field2, field6, qy, qyz); + } + cubeindex <<= 4; + let o1, o2, o3, numtris = 0, i = 0; + while (triTable[cubeindex + i] != -1) { + o1 = cubeindex + i; + o2 = o1 + 1; + o3 = o1 + 2; + posnormtriv(vlist, nlist, clist, 3 * triTable[o1], 3 * triTable[o2], 3 * triTable[o3]); + i += 3; + numtris++; + } + return numtris; + } + function posnormtriv(pos, norm, colors, o1, o2, o3) { + const c = scope.count * 3; + scope.positionArray[c + 0] = pos[o1]; + scope.positionArray[c + 1] = pos[o1 + 1]; + scope.positionArray[c + 2] = pos[o1 + 2]; + scope.positionArray[c + 3] = pos[o2]; + scope.positionArray[c + 4] = pos[o2 + 1]; + scope.positionArray[c + 5] = pos[o2 + 2]; + scope.positionArray[c + 6] = pos[o3]; + scope.positionArray[c + 7] = pos[o3 + 1]; + scope.positionArray[c + 8] = pos[o3 + 2]; + if (scope.material.flatShading === true) { + const nx = (norm[o1 + 0] + norm[o2 + 0] + norm[o3 + 0]) / 3; + const ny = (norm[o1 + 1] + norm[o2 + 1] + norm[o3 + 1]) / 3; + const nz = (norm[o1 + 2] + norm[o2 + 2] + norm[o3 + 2]) / 3; + scope.normalArray[c + 0] = nx; + scope.normalArray[c + 1] = ny; + scope.normalArray[c + 2] = nz; + scope.normalArray[c + 3] = nx; + scope.normalArray[c + 4] = ny; + scope.normalArray[c + 5] = nz; + scope.normalArray[c + 6] = nx; + scope.normalArray[c + 7] = ny; + scope.normalArray[c + 8] = nz; + } else { + scope.normalArray[c + 0] = norm[o1 + 0]; + scope.normalArray[c + 1] = norm[o1 + 1]; + scope.normalArray[c + 2] = norm[o1 + 2]; + scope.normalArray[c + 3] = norm[o2 + 0]; + scope.normalArray[c + 4] = norm[o2 + 1]; + scope.normalArray[c + 5] = norm[o2 + 2]; + scope.normalArray[c + 6] = norm[o3 + 0]; + scope.normalArray[c + 7] = norm[o3 + 1]; + scope.normalArray[c + 8] = norm[o3 + 2]; + } + if (scope.enableUvs) { + const d = scope.count * 2; + scope.uvArray[d + 0] = pos[o1 + 0]; + scope.uvArray[d + 1] = pos[o1 + 2]; + scope.uvArray[d + 2] = pos[o2 + 0]; + scope.uvArray[d + 3] = pos[o2 + 2]; + scope.uvArray[d + 4] = pos[o3 + 0]; + scope.uvArray[d + 5] = pos[o3 + 2]; + } + if (scope.enableColors) { + scope.colorArray[c + 0] = colors[o1 + 0]; + scope.colorArray[c + 1] = colors[o1 + 1]; + scope.colorArray[c + 2] = colors[o1 + 2]; + scope.colorArray[c + 3] = colors[o2 + 0]; + scope.colorArray[c + 4] = colors[o2 + 1]; + scope.colorArray[c + 5] = colors[o2 + 2]; + scope.colorArray[c + 6] = colors[o3 + 0]; + scope.colorArray[c + 7] = colors[o3 + 1]; + scope.colorArray[c + 8] = colors[o3 + 2]; + } + scope.count += 3; + } + this.addBall = function(ballx, bally, ballz, strength, subtract, colors) { + const sign = Math.sign(strength); + strength = Math.abs(strength); + const userDefineColor = !(colors === void 0 || colors === null); + let ballColor = new Color(ballx, bally, ballz); + if (userDefineColor) try { + ballColor = colors instanceof Color ? colors : Array.isArray(colors) ? new Color(Math.min(Math.abs(colors[0]), 1), Math.min(Math.abs(colors[1]), 1), Math.min(Math.abs(colors[2]), 1)) : new Color(colors); + } catch (err) { + ballColor = new Color(ballx, bally, ballz); + } + const radius = this.size * Math.sqrt(strength / subtract), zs = ballz * this.size, ys = bally * this.size, xs = ballx * this.size; + let min_z = Math.floor(zs - radius); + if (min_z < 1) min_z = 1; + let max_z = Math.floor(zs + radius); + if (max_z > this.size - 1) max_z = this.size - 1; + let min_y = Math.floor(ys - radius); + if (min_y < 1) min_y = 1; + let max_y = Math.floor(ys + radius); + if (max_y > this.size - 1) max_y = this.size - 1; + let min_x = Math.floor(xs - radius); + if (min_x < 1) min_x = 1; + let max_x = Math.floor(xs + radius); + if (max_x > this.size - 1) max_x = this.size - 1; + let x, y, z, y_offset, z_offset, fx, fy, fz, fz2, fy2, val; + for (z = min_z; z < max_z; z++) { + z_offset = this.size2 * z; + fz = z / this.size - ballz; + fz2 = fz * fz; + for (y = min_y; y < max_y; y++) { + y_offset = z_offset + this.size * y; + fy = y / this.size - bally; + fy2 = fy * fy; + for (x = min_x; x < max_x; x++) { + fx = x / this.size - ballx; + val = strength / (1e-6 + fx * fx + fy2 + fz2) - subtract; + if (val > 0) { + this.field[y_offset + x] += val * sign; + const ratio = Math.sqrt((x - xs) * (x - xs) + (y - ys) * (y - ys) + (z - zs) * (z - zs)) / radius; + const contrib = 1 - ratio * ratio * ratio * (ratio * (ratio * 6 - 15) + 10); + this.palette[(y_offset + x) * 3 + 0] += ballColor.r * contrib; + this.palette[(y_offset + x) * 3 + 1] += ballColor.g * contrib; + this.palette[(y_offset + x) * 3 + 2] += ballColor.b * contrib; + } + } + } + } + }; + this.addPlaneX = function(strength, subtract) { + const size = this.size, yd = this.yd, zd = this.zd, field = this.field; + let x, y, z, xx, val, xdiv, cxy, dist = size * Math.sqrt(strength / subtract); + if (dist > size) dist = size; + for (x = 0; x < dist; x++) { + xdiv = x / size; + xx = xdiv * xdiv; + val = strength / (1e-4 + xx) - subtract; + if (val > 0) for (y = 0; y < size; y++) { + cxy = x + y * yd; + for (z = 0; z < size; z++) field[zd * z + cxy] += val; + } + } + }; + this.addPlaneY = function(strength, subtract) { + const size = this.size, yd = this.yd, zd = this.zd, field = this.field; + let x, y, z, yy, val, ydiv, cy, cxy, dist = size * Math.sqrt(strength / subtract); + if (dist > size) dist = size; + for (y = 0; y < dist; y++) { + ydiv = y / size; + yy = ydiv * ydiv; + val = strength / (1e-4 + yy) - subtract; + if (val > 0) { + cy = y * yd; + for (x = 0; x < size; x++) { + cxy = cy + x; + for (z = 0; z < size; z++) field[zd * z + cxy] += val; + } + } + } + }; + this.addPlaneZ = function(strength, subtract) { + const size = this.size, yd = this.yd, zd = this.zd, field = this.field; + let x, y, z, zz, val, zdiv, cz, cyz, dist = size * Math.sqrt(strength / subtract); + if (dist > size) dist = size; + for (z = 0; z < dist; z++) { + zdiv = z / size; + zz = zdiv * zdiv; + val = strength / (1e-4 + zz) - subtract; + if (val > 0) { + cz = zd * z; + for (y = 0; y < size; y++) { + cyz = cz + y * yd; + for (x = 0; x < size; x++) field[cyz + x] += val; + } + } + } + }; + this.setCell = function(x, y, z, value) { + const index = this.size2 * z + this.size * y + x; + this.field[index] = value; + }; + this.getCell = function(x, y, z) { + const index = this.size2 * z + this.size * y + x; + return this.field[index]; + }; + this.blur = function(intensity = 1) { + const field = this.field; + const fieldCopy = field.slice(); + const size = this.size; + const size2 = this.size2; + for (let x = 0; x < size; x++) for (let y = 0; y < size; y++) for (let z = 0; z < size; z++) { + const index = size2 * z + size * y + x; + let val = fieldCopy[index]; + let count = 1; + for (let x2 = -1; x2 <= 1; x2 += 2) { + const x3 = x2 + x; + if (x3 < 0 || x3 >= size) continue; + for (let y2 = -1; y2 <= 1; y2 += 2) { + const y3 = y2 + y; + if (y3 < 0 || y3 >= size) continue; + for (let z2 = -1; z2 <= 1; z2 += 2) { + const z3 = z2 + z; + if (z3 < 0 || z3 >= size) continue; + const val2 = fieldCopy[size2 * z3 + size * y3 + x3]; + count++; + val += intensity * (val2 - val) / count; + } + } + } + field[index] = val; + } + }; + this.reset = function() { + for (let i = 0; i < this.size3; i++) { + this.normal_cache[i * 3] = 0; + this.field[i] = 0; + this.palette[i * 3] = this.palette[i * 3 + 1] = this.palette[i * 3 + 2] = 0; + } + }; + this.update = function() { + this.count = 0; + const smin2 = this.size - 2; + for (let z = 1; z < smin2; z++) { + const z_offset = this.size2 * z; + const fz = (z - this.halfsize) / this.halfsize; + for (let y = 1; y < smin2; y++) { + const y_offset = z_offset + this.size * y; + const fy = (y - this.halfsize) / this.halfsize; + for (let x = 1; x < smin2; x++) polygonize((x - this.halfsize) / this.halfsize, fy, fz, y_offset + x, this.isolation); + } + } + this.geometry.setDrawRange(0, this.count); + geometry.getAttribute("position").needsUpdate = true; + geometry.getAttribute("normal").needsUpdate = true; + if (this.enableUvs) geometry.getAttribute("uv").needsUpdate = true; + if (this.enableColors) geometry.getAttribute("color").needsUpdate = true; + if (this.count / 3 > maxPolyCount) console.warn("THREE.MarchingCubes: Geometry buffers too small for rendering. Please create an instance with a higher poly count."); + }; + this.init(resolution); + } +}; +var edgeTable = new Int32Array([ + 0, + 265, + 515, + 778, + 1030, + 1295, + 1541, + 1804, + 2060, + 2309, + 2575, + 2822, + 3082, + 3331, + 3593, + 3840, + 400, + 153, + 915, + 666, + 1430, + 1183, + 1941, + 1692, + 2460, + 2197, + 2975, + 2710, + 3482, + 3219, + 3993, + 3728, + 560, + 825, + 51, + 314, + 1590, + 1855, + 1077, + 1340, + 2620, + 2869, + 2111, + 2358, + 3642, + 3891, + 3129, + 3376, + 928, + 681, + 419, + 170, + 1958, + 1711, + 1445, + 1196, + 2988, + 2725, + 2479, + 2214, + 4010, + 3747, + 3497, + 3232, + 1120, + 1385, + 1635, + 1898, + 102, + 367, + 613, + 876, + 3180, + 3429, + 3695, + 3942, + 2154, + 2403, + 2665, + 2912, + 1520, + 1273, + 2035, + 1786, + 502, + 255, + 1013, + 764, + 3580, + 3317, + 4095, + 3830, + 2554, + 2291, + 3065, + 2800, + 1616, + 1881, + 1107, + 1370, + 598, + 863, + 85, + 348, + 3676, + 3925, + 3167, + 3414, + 2650, + 2899, + 2137, + 2384, + 1984, + 1737, + 1475, + 1226, + 966, + 719, + 453, + 204, + 4044, + 3781, + 3535, + 3270, + 3018, + 2755, + 2505, + 2240, + 2240, + 2505, + 2755, + 3018, + 3270, + 3535, + 3781, + 4044, + 204, + 453, + 719, + 966, + 1226, + 1475, + 1737, + 1984, + 2384, + 2137, + 2899, + 2650, + 3414, + 3167, + 3925, + 3676, + 348, + 85, + 863, + 598, + 1370, + 1107, + 1881, + 1616, + 2800, + 3065, + 2291, + 2554, + 3830, + 4095, + 3317, + 3580, + 764, + 1013, + 255, + 502, + 1786, + 2035, + 1273, + 1520, + 2912, + 2665, + 2403, + 2154, + 3942, + 3695, + 3429, + 3180, + 876, + 613, + 367, + 102, + 1898, + 1635, + 1385, + 1120, + 3232, + 3497, + 3747, + 4010, + 2214, + 2479, + 2725, + 2988, + 1196, + 1445, + 1711, + 1958, + 170, + 419, + 681, + 928, + 3376, + 3129, + 3891, + 3642, + 2358, + 2111, + 2869, + 2620, + 1340, + 1077, + 1855, + 1590, + 314, + 51, + 825, + 560, + 3728, + 3993, + 3219, + 3482, + 2710, + 2975, + 2197, + 2460, + 1692, + 1941, + 1183, + 1430, + 666, + 915, + 153, + 400, + 3840, + 3593, + 3331, + 3082, + 2822, + 2575, + 2309, + 2060, + 1804, + 1541, + 1295, + 1030, + 778, + 515, + 265, + 0 +]); +var triTable = new Int32Array([ + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 8, + 3, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 1, + 9, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1, + 8, + 3, + 9, + 8, + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1, + 2, + 10, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 8, + 3, + 1, + 2, + 10, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 9, + 2, + 10, + 0, + 2, + 9, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2, + 8, + 3, + 2, + 10, + 8, + 10, + 9, + 8, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3, + 11, + 2, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 11, + 2, + 8, + 11, + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1, + 9, + 0, + 2, + 3, + 11, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1, + 11, + 2, + 1, + 9, + 11, + 9, + 8, + 11, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3, + 10, + 1, + 11, + 10, + 3, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 10, + 1, + 0, + 8, + 10, + 8, + 11, + 10, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3, + 9, + 0, + 3, + 11, + 9, + 11, + 10, + 9, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 9, + 8, + 10, + 10, + 8, + 11, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4, + 7, + 8, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4, + 3, + 0, + 7, + 3, + 4, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 1, + 9, + 8, + 4, + 7, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4, + 1, + 9, + 4, + 7, + 1, + 7, + 3, + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1, + 2, + 10, + 8, + 4, + 7, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3, + 4, + 7, + 3, + 0, + 4, + 1, + 2, + 10, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 9, + 2, + 10, + 9, + 0, + 2, + 8, + 4, + 7, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2, + 10, + 9, + 2, + 9, + 7, + 2, + 7, + 3, + 7, + 9, + 4, + -1, + -1, + -1, + -1, + 8, + 4, + 7, + 3, + 11, + 2, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 11, + 4, + 7, + 11, + 2, + 4, + 2, + 0, + 4, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 9, + 0, + 1, + 8, + 4, + 7, + 2, + 3, + 11, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4, + 7, + 11, + 9, + 4, + 11, + 9, + 11, + 2, + 9, + 2, + 1, + -1, + -1, + -1, + -1, + 3, + 10, + 1, + 3, + 11, + 10, + 7, + 8, + 4, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1, + 11, + 10, + 1, + 4, + 11, + 1, + 0, + 4, + 7, + 11, + 4, + -1, + -1, + -1, + -1, + 4, + 7, + 8, + 9, + 0, + 11, + 9, + 11, + 10, + 11, + 0, + 3, + -1, + -1, + -1, + -1, + 4, + 7, + 11, + 4, + 11, + 9, + 9, + 11, + 10, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 9, + 5, + 4, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 9, + 5, + 4, + 0, + 8, + 3, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 5, + 4, + 1, + 5, + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8, + 5, + 4, + 8, + 3, + 5, + 3, + 1, + 5, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1, + 2, + 10, + 9, + 5, + 4, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3, + 0, + 8, + 1, + 2, + 10, + 4, + 9, + 5, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5, + 2, + 10, + 5, + 4, + 2, + 4, + 0, + 2, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2, + 10, + 5, + 3, + 2, + 5, + 3, + 5, + 4, + 3, + 4, + 8, + -1, + -1, + -1, + -1, + 9, + 5, + 4, + 2, + 3, + 11, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 11, + 2, + 0, + 8, + 11, + 4, + 9, + 5, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 5, + 4, + 0, + 1, + 5, + 2, + 3, + 11, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2, + 1, + 5, + 2, + 5, + 8, + 2, + 8, + 11, + 4, + 8, + 5, + -1, + -1, + -1, + -1, + 10, + 3, + 11, + 10, + 1, + 3, + 9, + 5, + 4, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4, + 9, + 5, + 0, + 8, + 1, + 8, + 10, + 1, + 8, + 11, + 10, + -1, + -1, + -1, + -1, + 5, + 4, + 0, + 5, + 0, + 11, + 5, + 11, + 10, + 11, + 0, + 3, + -1, + -1, + -1, + -1, + 5, + 4, + 8, + 5, + 8, + 10, + 10, + 8, + 11, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 9, + 7, + 8, + 5, + 7, + 9, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 9, + 3, + 0, + 9, + 5, + 3, + 5, + 7, + 3, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 7, + 8, + 0, + 1, + 7, + 1, + 5, + 7, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1, + 5, + 3, + 3, + 5, + 7, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 9, + 7, + 8, + 9, + 5, + 7, + 10, + 1, + 2, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 10, + 1, + 2, + 9, + 5, + 0, + 5, + 3, + 0, + 5, + 7, + 3, + -1, + -1, + -1, + -1, + 8, + 0, + 2, + 8, + 2, + 5, + 8, + 5, + 7, + 10, + 5, + 2, + -1, + -1, + -1, + -1, + 2, + 10, + 5, + 2, + 5, + 3, + 3, + 5, + 7, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7, + 9, + 5, + 7, + 8, + 9, + 3, + 11, + 2, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 9, + 5, + 7, + 9, + 7, + 2, + 9, + 2, + 0, + 2, + 7, + 11, + -1, + -1, + -1, + -1, + 2, + 3, + 11, + 0, + 1, + 8, + 1, + 7, + 8, + 1, + 5, + 7, + -1, + -1, + -1, + -1, + 11, + 2, + 1, + 11, + 1, + 7, + 7, + 1, + 5, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 9, + 5, + 8, + 8, + 5, + 7, + 10, + 1, + 3, + 10, + 3, + 11, + -1, + -1, + -1, + -1, + 5, + 7, + 0, + 5, + 0, + 9, + 7, + 11, + 0, + 1, + 0, + 10, + 11, + 10, + 0, + -1, + 11, + 10, + 0, + 11, + 0, + 3, + 10, + 5, + 0, + 8, + 0, + 7, + 5, + 7, + 0, + -1, + 11, + 10, + 5, + 7, + 11, + 5, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 10, + 6, + 5, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 8, + 3, + 5, + 10, + 6, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 9, + 0, + 1, + 5, + 10, + 6, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1, + 8, + 3, + 1, + 9, + 8, + 5, + 10, + 6, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1, + 6, + 5, + 2, + 6, + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1, + 6, + 5, + 1, + 2, + 6, + 3, + 0, + 8, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 9, + 6, + 5, + 9, + 0, + 6, + 0, + 2, + 6, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5, + 9, + 8, + 5, + 8, + 2, + 5, + 2, + 6, + 3, + 2, + 8, + -1, + -1, + -1, + -1, + 2, + 3, + 11, + 10, + 6, + 5, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 11, + 0, + 8, + 11, + 2, + 0, + 10, + 6, + 5, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 1, + 9, + 2, + 3, + 11, + 5, + 10, + 6, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5, + 10, + 6, + 1, + 9, + 2, + 9, + 11, + 2, + 9, + 8, + 11, + -1, + -1, + -1, + -1, + 6, + 3, + 11, + 6, + 5, + 3, + 5, + 1, + 3, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 8, + 11, + 0, + 11, + 5, + 0, + 5, + 1, + 5, + 11, + 6, + -1, + -1, + -1, + -1, + 3, + 11, + 6, + 0, + 3, + 6, + 0, + 6, + 5, + 0, + 5, + 9, + -1, + -1, + -1, + -1, + 6, + 5, + 9, + 6, + 9, + 11, + 11, + 9, + 8, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5, + 10, + 6, + 4, + 7, + 8, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4, + 3, + 0, + 4, + 7, + 3, + 6, + 5, + 10, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1, + 9, + 0, + 5, + 10, + 6, + 8, + 4, + 7, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 10, + 6, + 5, + 1, + 9, + 7, + 1, + 7, + 3, + 7, + 9, + 4, + -1, + -1, + -1, + -1, + 6, + 1, + 2, + 6, + 5, + 1, + 4, + 7, + 8, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1, + 2, + 5, + 5, + 2, + 6, + 3, + 0, + 4, + 3, + 4, + 7, + -1, + -1, + -1, + -1, + 8, + 4, + 7, + 9, + 0, + 5, + 0, + 6, + 5, + 0, + 2, + 6, + -1, + -1, + -1, + -1, + 7, + 3, + 9, + 7, + 9, + 4, + 3, + 2, + 9, + 5, + 9, + 6, + 2, + 6, + 9, + -1, + 3, + 11, + 2, + 7, + 8, + 4, + 10, + 6, + 5, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5, + 10, + 6, + 4, + 7, + 2, + 4, + 2, + 0, + 2, + 7, + 11, + -1, + -1, + -1, + -1, + 0, + 1, + 9, + 4, + 7, + 8, + 2, + 3, + 11, + 5, + 10, + 6, + -1, + -1, + -1, + -1, + 9, + 2, + 1, + 9, + 11, + 2, + 9, + 4, + 11, + 7, + 11, + 4, + 5, + 10, + 6, + -1, + 8, + 4, + 7, + 3, + 11, + 5, + 3, + 5, + 1, + 5, + 11, + 6, + -1, + -1, + -1, + -1, + 5, + 1, + 11, + 5, + 11, + 6, + 1, + 0, + 11, + 7, + 11, + 4, + 0, + 4, + 11, + -1, + 0, + 5, + 9, + 0, + 6, + 5, + 0, + 3, + 6, + 11, + 6, + 3, + 8, + 4, + 7, + -1, + 6, + 5, + 9, + 6, + 9, + 11, + 4, + 7, + 9, + 7, + 11, + 9, + -1, + -1, + -1, + -1, + 10, + 4, + 9, + 6, + 4, + 10, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4, + 10, + 6, + 4, + 9, + 10, + 0, + 8, + 3, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 10, + 0, + 1, + 10, + 6, + 0, + 6, + 4, + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8, + 3, + 1, + 8, + 1, + 6, + 8, + 6, + 4, + 6, + 1, + 10, + -1, + -1, + -1, + -1, + 1, + 4, + 9, + 1, + 2, + 4, + 2, + 6, + 4, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3, + 0, + 8, + 1, + 2, + 9, + 2, + 4, + 9, + 2, + 6, + 4, + -1, + -1, + -1, + -1, + 0, + 2, + 4, + 4, + 2, + 6, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8, + 3, + 2, + 8, + 2, + 4, + 4, + 2, + 6, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 10, + 4, + 9, + 10, + 6, + 4, + 11, + 2, + 3, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 8, + 2, + 2, + 8, + 11, + 4, + 9, + 10, + 4, + 10, + 6, + -1, + -1, + -1, + -1, + 3, + 11, + 2, + 0, + 1, + 6, + 0, + 6, + 4, + 6, + 1, + 10, + -1, + -1, + -1, + -1, + 6, + 4, + 1, + 6, + 1, + 10, + 4, + 8, + 1, + 2, + 1, + 11, + 8, + 11, + 1, + -1, + 9, + 6, + 4, + 9, + 3, + 6, + 9, + 1, + 3, + 11, + 6, + 3, + -1, + -1, + -1, + -1, + 8, + 11, + 1, + 8, + 1, + 0, + 11, + 6, + 1, + 9, + 1, + 4, + 6, + 4, + 1, + -1, + 3, + 11, + 6, + 3, + 6, + 0, + 0, + 6, + 4, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 6, + 4, + 8, + 11, + 6, + 8, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7, + 10, + 6, + 7, + 8, + 10, + 8, + 9, + 10, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 7, + 3, + 0, + 10, + 7, + 0, + 9, + 10, + 6, + 7, + 10, + -1, + -1, + -1, + -1, + 10, + 6, + 7, + 1, + 10, + 7, + 1, + 7, + 8, + 1, + 8, + 0, + -1, + -1, + -1, + -1, + 10, + 6, + 7, + 10, + 7, + 1, + 1, + 7, + 3, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1, + 2, + 6, + 1, + 6, + 8, + 1, + 8, + 9, + 8, + 6, + 7, + -1, + -1, + -1, + -1, + 2, + 6, + 9, + 2, + 9, + 1, + 6, + 7, + 9, + 0, + 9, + 3, + 7, + 3, + 9, + -1, + 7, + 8, + 0, + 7, + 0, + 6, + 6, + 0, + 2, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7, + 3, + 2, + 6, + 7, + 2, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2, + 3, + 11, + 10, + 6, + 8, + 10, + 8, + 9, + 8, + 6, + 7, + -1, + -1, + -1, + -1, + 2, + 0, + 7, + 2, + 7, + 11, + 0, + 9, + 7, + 6, + 7, + 10, + 9, + 10, + 7, + -1, + 1, + 8, + 0, + 1, + 7, + 8, + 1, + 10, + 7, + 6, + 7, + 10, + 2, + 3, + 11, + -1, + 11, + 2, + 1, + 11, + 1, + 7, + 10, + 6, + 1, + 6, + 7, + 1, + -1, + -1, + -1, + -1, + 8, + 9, + 6, + 8, + 6, + 7, + 9, + 1, + 6, + 11, + 6, + 3, + 1, + 3, + 6, + -1, + 0, + 9, + 1, + 11, + 6, + 7, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7, + 8, + 0, + 7, + 0, + 6, + 3, + 11, + 0, + 11, + 6, + 0, + -1, + -1, + -1, + -1, + 7, + 11, + 6, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7, + 6, + 11, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3, + 0, + 8, + 11, + 7, + 6, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 1, + 9, + 11, + 7, + 6, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8, + 1, + 9, + 8, + 3, + 1, + 11, + 7, + 6, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 10, + 1, + 2, + 6, + 11, + 7, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1, + 2, + 10, + 3, + 0, + 8, + 6, + 11, + 7, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2, + 9, + 0, + 2, + 10, + 9, + 6, + 11, + 7, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 6, + 11, + 7, + 2, + 10, + 3, + 10, + 8, + 3, + 10, + 9, + 8, + -1, + -1, + -1, + -1, + 7, + 2, + 3, + 6, + 2, + 7, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 7, + 0, + 8, + 7, + 6, + 0, + 6, + 2, + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2, + 7, + 6, + 2, + 3, + 7, + 0, + 1, + 9, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1, + 6, + 2, + 1, + 8, + 6, + 1, + 9, + 8, + 8, + 7, + 6, + -1, + -1, + -1, + -1, + 10, + 7, + 6, + 10, + 1, + 7, + 1, + 3, + 7, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 10, + 7, + 6, + 1, + 7, + 10, + 1, + 8, + 7, + 1, + 0, + 8, + -1, + -1, + -1, + -1, + 0, + 3, + 7, + 0, + 7, + 10, + 0, + 10, + 9, + 6, + 10, + 7, + -1, + -1, + -1, + -1, + 7, + 6, + 10, + 7, + 10, + 8, + 8, + 10, + 9, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 6, + 8, + 4, + 11, + 8, + 6, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3, + 6, + 11, + 3, + 0, + 6, + 0, + 4, + 6, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8, + 6, + 11, + 8, + 4, + 6, + 9, + 0, + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 9, + 4, + 6, + 9, + 6, + 3, + 9, + 3, + 1, + 11, + 3, + 6, + -1, + -1, + -1, + -1, + 6, + 8, + 4, + 6, + 11, + 8, + 2, + 10, + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1, + 2, + 10, + 3, + 0, + 11, + 0, + 6, + 11, + 0, + 4, + 6, + -1, + -1, + -1, + -1, + 4, + 11, + 8, + 4, + 6, + 11, + 0, + 2, + 9, + 2, + 10, + 9, + -1, + -1, + -1, + -1, + 10, + 9, + 3, + 10, + 3, + 2, + 9, + 4, + 3, + 11, + 3, + 6, + 4, + 6, + 3, + -1, + 8, + 2, + 3, + 8, + 4, + 2, + 4, + 6, + 2, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 4, + 2, + 4, + 6, + 2, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1, + 9, + 0, + 2, + 3, + 4, + 2, + 4, + 6, + 4, + 3, + 8, + -1, + -1, + -1, + -1, + 1, + 9, + 4, + 1, + 4, + 2, + 2, + 4, + 6, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8, + 1, + 3, + 8, + 6, + 1, + 8, + 4, + 6, + 6, + 10, + 1, + -1, + -1, + -1, + -1, + 10, + 1, + 0, + 10, + 0, + 6, + 6, + 0, + 4, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4, + 6, + 3, + 4, + 3, + 8, + 6, + 10, + 3, + 0, + 3, + 9, + 10, + 9, + 3, + -1, + 10, + 9, + 4, + 6, + 10, + 4, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4, + 9, + 5, + 7, + 6, + 11, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 8, + 3, + 4, + 9, + 5, + 11, + 7, + 6, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5, + 0, + 1, + 5, + 4, + 0, + 7, + 6, + 11, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 11, + 7, + 6, + 8, + 3, + 4, + 3, + 5, + 4, + 3, + 1, + 5, + -1, + -1, + -1, + -1, + 9, + 5, + 4, + 10, + 1, + 2, + 7, + 6, + 11, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 6, + 11, + 7, + 1, + 2, + 10, + 0, + 8, + 3, + 4, + 9, + 5, + -1, + -1, + -1, + -1, + 7, + 6, + 11, + 5, + 4, + 10, + 4, + 2, + 10, + 4, + 0, + 2, + -1, + -1, + -1, + -1, + 3, + 4, + 8, + 3, + 5, + 4, + 3, + 2, + 5, + 10, + 5, + 2, + 11, + 7, + 6, + -1, + 7, + 2, + 3, + 7, + 6, + 2, + 5, + 4, + 9, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 9, + 5, + 4, + 0, + 8, + 6, + 0, + 6, + 2, + 6, + 8, + 7, + -1, + -1, + -1, + -1, + 3, + 6, + 2, + 3, + 7, + 6, + 1, + 5, + 0, + 5, + 4, + 0, + -1, + -1, + -1, + -1, + 6, + 2, + 8, + 6, + 8, + 7, + 2, + 1, + 8, + 4, + 8, + 5, + 1, + 5, + 8, + -1, + 9, + 5, + 4, + 10, + 1, + 6, + 1, + 7, + 6, + 1, + 3, + 7, + -1, + -1, + -1, + -1, + 1, + 6, + 10, + 1, + 7, + 6, + 1, + 0, + 7, + 8, + 7, + 0, + 9, + 5, + 4, + -1, + 4, + 0, + 10, + 4, + 10, + 5, + 0, + 3, + 10, + 6, + 10, + 7, + 3, + 7, + 10, + -1, + 7, + 6, + 10, + 7, + 10, + 8, + 5, + 4, + 10, + 4, + 8, + 10, + -1, + -1, + -1, + -1, + 6, + 9, + 5, + 6, + 11, + 9, + 11, + 8, + 9, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3, + 6, + 11, + 0, + 6, + 3, + 0, + 5, + 6, + 0, + 9, + 5, + -1, + -1, + -1, + -1, + 0, + 11, + 8, + 0, + 5, + 11, + 0, + 1, + 5, + 5, + 6, + 11, + -1, + -1, + -1, + -1, + 6, + 11, + 3, + 6, + 3, + 5, + 5, + 3, + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1, + 2, + 10, + 9, + 5, + 11, + 9, + 11, + 8, + 11, + 5, + 6, + -1, + -1, + -1, + -1, + 0, + 11, + 3, + 0, + 6, + 11, + 0, + 9, + 6, + 5, + 6, + 9, + 1, + 2, + 10, + -1, + 11, + 8, + 5, + 11, + 5, + 6, + 8, + 0, + 5, + 10, + 5, + 2, + 0, + 2, + 5, + -1, + 6, + 11, + 3, + 6, + 3, + 5, + 2, + 10, + 3, + 10, + 5, + 3, + -1, + -1, + -1, + -1, + 5, + 8, + 9, + 5, + 2, + 8, + 5, + 6, + 2, + 3, + 8, + 2, + -1, + -1, + -1, + -1, + 9, + 5, + 6, + 9, + 6, + 0, + 0, + 6, + 2, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1, + 5, + 8, + 1, + 8, + 0, + 5, + 6, + 8, + 3, + 8, + 2, + 6, + 2, + 8, + -1, + 1, + 5, + 6, + 2, + 1, + 6, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1, + 3, + 6, + 1, + 6, + 10, + 3, + 8, + 6, + 5, + 6, + 9, + 8, + 9, + 6, + -1, + 10, + 1, + 0, + 10, + 0, + 6, + 9, + 5, + 0, + 5, + 6, + 0, + -1, + -1, + -1, + -1, + 0, + 3, + 8, + 5, + 6, + 10, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 10, + 5, + 6, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 11, + 5, + 10, + 7, + 5, + 11, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 11, + 5, + 10, + 11, + 7, + 5, + 8, + 3, + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5, + 11, + 7, + 5, + 10, + 11, + 1, + 9, + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 10, + 7, + 5, + 10, + 11, + 7, + 9, + 8, + 1, + 8, + 3, + 1, + -1, + -1, + -1, + -1, + 11, + 1, + 2, + 11, + 7, + 1, + 7, + 5, + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 8, + 3, + 1, + 2, + 7, + 1, + 7, + 5, + 7, + 2, + 11, + -1, + -1, + -1, + -1, + 9, + 7, + 5, + 9, + 2, + 7, + 9, + 0, + 2, + 2, + 11, + 7, + -1, + -1, + -1, + -1, + 7, + 5, + 2, + 7, + 2, + 11, + 5, + 9, + 2, + 3, + 2, + 8, + 9, + 8, + 2, + -1, + 2, + 5, + 10, + 2, + 3, + 5, + 3, + 7, + 5, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8, + 2, + 0, + 8, + 5, + 2, + 8, + 7, + 5, + 10, + 2, + 5, + -1, + -1, + -1, + -1, + 9, + 0, + 1, + 5, + 10, + 3, + 5, + 3, + 7, + 3, + 10, + 2, + -1, + -1, + -1, + -1, + 9, + 8, + 2, + 9, + 2, + 1, + 8, + 7, + 2, + 10, + 2, + 5, + 7, + 5, + 2, + -1, + 1, + 3, + 5, + 3, + 7, + 5, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 8, + 7, + 0, + 7, + 1, + 1, + 7, + 5, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 9, + 0, + 3, + 9, + 3, + 5, + 5, + 3, + 7, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 9, + 8, + 7, + 5, + 9, + 7, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5, + 8, + 4, + 5, + 10, + 8, + 10, + 11, + 8, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 5, + 0, + 4, + 5, + 11, + 0, + 5, + 10, + 11, + 11, + 3, + 0, + -1, + -1, + -1, + -1, + 0, + 1, + 9, + 8, + 4, + 10, + 8, + 10, + 11, + 10, + 4, + 5, + -1, + -1, + -1, + -1, + 10, + 11, + 4, + 10, + 4, + 5, + 11, + 3, + 4, + 9, + 4, + 1, + 3, + 1, + 4, + -1, + 2, + 5, + 1, + 2, + 8, + 5, + 2, + 11, + 8, + 4, + 5, + 8, + -1, + -1, + -1, + -1, + 0, + 4, + 11, + 0, + 11, + 3, + 4, + 5, + 11, + 2, + 11, + 1, + 5, + 1, + 11, + -1, + 0, + 2, + 5, + 0, + 5, + 9, + 2, + 11, + 5, + 4, + 5, + 8, + 11, + 8, + 5, + -1, + 9, + 4, + 5, + 2, + 11, + 3, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2, + 5, + 10, + 3, + 5, + 2, + 3, + 4, + 5, + 3, + 8, + 4, + -1, + -1, + -1, + -1, + 5, + 10, + 2, + 5, + 2, + 4, + 4, + 2, + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3, + 10, + 2, + 3, + 5, + 10, + 3, + 8, + 5, + 4, + 5, + 8, + 0, + 1, + 9, + -1, + 5, + 10, + 2, + 5, + 2, + 4, + 1, + 9, + 2, + 9, + 4, + 2, + -1, + -1, + -1, + -1, + 8, + 4, + 5, + 8, + 5, + 3, + 3, + 5, + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 4, + 5, + 1, + 0, + 5, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 8, + 4, + 5, + 8, + 5, + 3, + 9, + 0, + 5, + 0, + 3, + 5, + -1, + -1, + -1, + -1, + 9, + 4, + 5, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4, + 11, + 7, + 4, + 9, + 11, + 9, + 10, + 11, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 8, + 3, + 4, + 9, + 7, + 9, + 11, + 7, + 9, + 10, + 11, + -1, + -1, + -1, + -1, + 1, + 10, + 11, + 1, + 11, + 4, + 1, + 4, + 0, + 7, + 4, + 11, + -1, + -1, + -1, + -1, + 3, + 1, + 4, + 3, + 4, + 8, + 1, + 10, + 4, + 7, + 4, + 11, + 10, + 11, + 4, + -1, + 4, + 11, + 7, + 9, + 11, + 4, + 9, + 2, + 11, + 9, + 1, + 2, + -1, + -1, + -1, + -1, + 9, + 7, + 4, + 9, + 11, + 7, + 9, + 1, + 11, + 2, + 11, + 1, + 0, + 8, + 3, + -1, + 11, + 7, + 4, + 11, + 4, + 2, + 2, + 4, + 0, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 11, + 7, + 4, + 11, + 4, + 2, + 8, + 3, + 4, + 3, + 2, + 4, + -1, + -1, + -1, + -1, + 2, + 9, + 10, + 2, + 7, + 9, + 2, + 3, + 7, + 7, + 4, + 9, + -1, + -1, + -1, + -1, + 9, + 10, + 7, + 9, + 7, + 4, + 10, + 2, + 7, + 8, + 7, + 0, + 2, + 0, + 7, + -1, + 3, + 7, + 10, + 3, + 10, + 2, + 7, + 4, + 10, + 1, + 10, + 0, + 4, + 0, + 10, + -1, + 1, + 10, + 2, + 8, + 7, + 4, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4, + 9, + 1, + 4, + 1, + 7, + 7, + 1, + 3, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4, + 9, + 1, + 4, + 1, + 7, + 0, + 8, + 1, + 8, + 7, + 1, + -1, + -1, + -1, + -1, + 4, + 0, + 3, + 7, + 4, + 3, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 4, + 8, + 7, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 9, + 10, + 8, + 10, + 11, + 8, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3, + 0, + 9, + 3, + 9, + 11, + 11, + 9, + 10, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 1, + 10, + 0, + 10, + 8, + 8, + 10, + 11, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3, + 1, + 10, + 11, + 3, + 10, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1, + 2, + 11, + 1, + 11, + 9, + 9, + 11, + 8, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3, + 0, + 9, + 3, + 9, + 11, + 1, + 2, + 9, + 2, + 11, + 9, + -1, + -1, + -1, + -1, + 0, + 2, + 11, + 8, + 0, + 11, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 3, + 2, + 11, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2, + 3, + 8, + 2, + 8, + 10, + 10, + 8, + 9, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 9, + 10, + 2, + 0, + 9, + 2, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 2, + 3, + 8, + 2, + 8, + 10, + 0, + 1, + 8, + 1, + 10, + 8, + -1, + -1, + -1, + -1, + 1, + 10, + 2, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 1, + 3, + 8, + 9, + 1, + 8, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 9, + 1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + -1, + 0, + 3, + 8, + -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 +]); +//#endregion +//#region node_modules/three-stdlib/math/SimplexNoise.js +var __defProp$18 = Object.defineProperty; +var __defNormalProp$18 = (obj, key, value) => key in obj ? __defProp$18(obj, key, { + enumerable: true, + configurable: true, + writable: true, + value +}) : obj[key] = value; +var __publicField$18 = (obj, key, value) => { + __defNormalProp$18(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var SimplexNoise = class { + /** + * You can pass in a random number generator object if you like. + * It is assumed to have a random() method. + */ + constructor(r = Math) { + __publicField$18(this, "grad3", [ + [ + 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 + ] + ]); + __publicField$18(this, "grad4", [ + [ + 0, + 1, + 1, + 1 + ], + [ + 0, + 1, + 1, + -1 + ], + [ + 0, + 1, + -1, + 1 + ], + [ + 0, + 1, + -1, + -1 + ], + [ + 0, + -1, + 1, + 1 + ], + [ + 0, + -1, + 1, + -1 + ], + [ + 0, + -1, + -1, + 1 + ], + [ + 0, + -1, + -1, + -1 + ], + [ + 1, + 0, + 1, + 1 + ], + [ + 1, + 0, + 1, + -1 + ], + [ + 1, + 0, + -1, + 1 + ], + [ + 1, + 0, + -1, + -1 + ], + [ + -1, + 0, + 1, + 1 + ], + [ + -1, + 0, + 1, + -1 + ], + [ + -1, + 0, + -1, + 1 + ], + [ + -1, + 0, + -1, + -1 + ], + [ + 1, + 1, + 0, + 1 + ], + [ + 1, + 1, + 0, + -1 + ], + [ + 1, + -1, + 0, + 1 + ], + [ + 1, + -1, + 0, + -1 + ], + [ + -1, + 1, + 0, + 1 + ], + [ + -1, + 1, + 0, + -1 + ], + [ + -1, + -1, + 0, + 1 + ], + [ + -1, + -1, + 0, + -1 + ], + [ + 1, + 1, + 1, + 0 + ], + [ + 1, + 1, + -1, + 0 + ], + [ + 1, + -1, + 1, + 0 + ], + [ + 1, + -1, + -1, + 0 + ], + [ + -1, + 1, + 1, + 0 + ], + [ + -1, + 1, + -1, + 0 + ], + [ + -1, + -1, + 1, + 0 + ], + [ + -1, + -1, + -1, + 0 + ] + ]); + __publicField$18(this, "p", []); + __publicField$18(this, "perm", []); + __publicField$18(this, "simplex", [ + [ + 0, + 1, + 2, + 3 + ], + [ + 0, + 1, + 3, + 2 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 2, + 3, + 1 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 1, + 2, + 3, + 0 + ], + [ + 0, + 2, + 1, + 3 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 3, + 1, + 2 + ], + [ + 0, + 3, + 2, + 1 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 1, + 3, + 2, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 1, + 2, + 0, + 3 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 1, + 3, + 0, + 2 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 2, + 3, + 0, + 1 + ], + [ + 2, + 3, + 1, + 0 + ], + [ + 1, + 0, + 2, + 3 + ], + [ + 1, + 0, + 3, + 2 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 2, + 0, + 3, + 1 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 2, + 1, + 3, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 2, + 0, + 1, + 3 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 3, + 0, + 1, + 2 + ], + [ + 3, + 0, + 2, + 1 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 3, + 1, + 2, + 0 + ], + [ + 2, + 1, + 0, + 3 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 3, + 1, + 0, + 2 + ], + [ + 0, + 0, + 0, + 0 + ], + [ + 3, + 2, + 0, + 1 + ], + [ + 3, + 2, + 1, + 0 + ] + ]); + __publicField$18(this, "dot", (g, x, y) => { + return g[0] * x + g[1] * y; + }); + __publicField$18(this, "dot3", (g, x, y, z) => { + return g[0] * x + g[1] * y + g[2] * z; + }); + __publicField$18(this, "dot4", (g, x, y, z, w) => { + return g[0] * x + g[1] * y + g[2] * z + g[3] * w; + }); + __publicField$18(this, "noise", (xin, yin) => { + let n0; + let n1; + let n2; + const F2 = .5 * (Math.sqrt(3) - 1); + const s = (xin + yin) * F2; + const i = Math.floor(xin + s); + const j = Math.floor(yin + s); + const G2 = (3 - Math.sqrt(3)) / 6; + const t = (i + j) * G2; + const X0 = i - t; + const Y0 = j - t; + const x0 = xin - X0; + const y0 = yin - Y0; + let i1 = 0; + let j1 = 1; + if (x0 > y0) { + i1 = 1; + j1 = 0; + } + const x1 = x0 - i1 + G2; + const y1 = y0 - j1 + G2; + const x2 = x0 - 1 + 2 * G2; + const y2 = y0 - 1 + 2 * G2; + const ii = i & 255; + const jj = j & 255; + const gi0 = this.perm[ii + this.perm[jj]] % 12; + const gi1 = this.perm[ii + i1 + this.perm[jj + j1]] % 12; + const gi2 = this.perm[ii + 1 + this.perm[jj + 1]] % 12; + let t0 = .5 - x0 * x0 - y0 * y0; + if (t0 < 0) n0 = 0; + else { + t0 *= t0; + n0 = t0 * t0 * this.dot(this.grad3[gi0], x0, y0); + } + let t1 = .5 - x1 * x1 - y1 * y1; + if (t1 < 0) n1 = 0; + else { + t1 *= t1; + n1 = t1 * t1 * this.dot(this.grad3[gi1], x1, y1); + } + let t2 = .5 - x2 * x2 - y2 * y2; + if (t2 < 0) n2 = 0; + else { + t2 *= t2; + n2 = t2 * t2 * this.dot(this.grad3[gi2], x2, y2); + } + return 70 * (n0 + n1 + n2); + }); + __publicField$18(this, "noise3d", (xin, yin, zin) => { + let n0; + let n1; + let n2; + let n3; + const s = (xin + yin + zin) * (1 / 3); + const i = Math.floor(xin + s); + const j = Math.floor(yin + s); + const k = Math.floor(zin + s); + const G3 = 1 / 6; + const t = (i + j + k) * G3; + const X0 = i - t; + const Y0 = j - t; + const Z0 = k - t; + const x0 = xin - X0; + const y0 = yin - Y0; + const z0 = zin - Z0; + let i1; + let j1; + let k1; + let i2; + let j2; + let k2; + if (x0 >= y0) if (y0 >= z0) { + i1 = 1; + j1 = 0; + k1 = 0; + i2 = 1; + j2 = 1; + k2 = 0; + } else if (x0 >= z0) { + i1 = 1; + j1 = 0; + k1 = 0; + i2 = 1; + j2 = 0; + k2 = 1; + } else { + i1 = 0; + j1 = 0; + k1 = 1; + i2 = 1; + j2 = 0; + k2 = 1; + } + else if (y0 < z0) { + i1 = 0; + j1 = 0; + k1 = 1; + i2 = 0; + j2 = 1; + k2 = 1; + } else if (x0 < z0) { + i1 = 0; + j1 = 1; + k1 = 0; + i2 = 0; + j2 = 1; + k2 = 1; + } else { + i1 = 0; + j1 = 1; + k1 = 0; + i2 = 1; + j2 = 1; + k2 = 0; + } + const x1 = x0 - i1 + G3; + const y1 = y0 - j1 + G3; + const z1 = z0 - k1 + G3; + const x2 = x0 - i2 + 2 * G3; + const y2 = y0 - j2 + 2 * G3; + const z2 = z0 - k2 + 2 * G3; + const x3 = x0 - 1 + 3 * G3; + const y3 = y0 - 1 + 3 * G3; + const z3 = z0 - 1 + 3 * G3; + const ii = i & 255; + const jj = j & 255; + const kk = k & 255; + const gi0 = this.perm[ii + this.perm[jj + this.perm[kk]]] % 12; + const gi1 = this.perm[ii + i1 + this.perm[jj + j1 + this.perm[kk + k1]]] % 12; + const gi2 = this.perm[ii + i2 + this.perm[jj + j2 + this.perm[kk + k2]]] % 12; + const gi3 = this.perm[ii + 1 + this.perm[jj + 1 + this.perm[kk + 1]]] % 12; + let t0 = .6 - x0 * x0 - y0 * y0 - z0 * z0; + if (t0 < 0) n0 = 0; + else { + t0 *= t0; + n0 = t0 * t0 * this.dot3(this.grad3[gi0], x0, y0, z0); + } + let t1 = .6 - x1 * x1 - y1 * y1 - z1 * z1; + if (t1 < 0) n1 = 0; + else { + t1 *= t1; + n1 = t1 * t1 * this.dot3(this.grad3[gi1], x1, y1, z1); + } + let t2 = .6 - x2 * x2 - y2 * y2 - z2 * z2; + if (t2 < 0) n2 = 0; + else { + t2 *= t2; + n2 = t2 * t2 * this.dot3(this.grad3[gi2], x2, y2, z2); + } + let t3 = .6 - x3 * x3 - y3 * y3 - z3 * z3; + if (t3 < 0) n3 = 0; + else { + t3 *= t3; + n3 = t3 * t3 * this.dot3(this.grad3[gi3], x3, y3, z3); + } + return 32 * (n0 + n1 + n2 + n3); + }); + __publicField$18(this, "noise4d", (x, y, z, w) => { + const grad4 = this.grad4; + const simplex = this.simplex; + const perm = this.perm; + const F4 = (Math.sqrt(5) - 1) / 4; + const G4 = (5 - Math.sqrt(5)) / 20; + let n0; + let n1; + let n2; + let n3; + let n4; + const s = (x + y + z + w) * F4; + const i = Math.floor(x + s); + const j = Math.floor(y + s); + const k = Math.floor(z + s); + const l = Math.floor(w + s); + const t = (i + j + k + l) * G4; + const X0 = i - t; + const Y0 = j - t; + const Z0 = k - t; + const W0 = l - t; + const x0 = x - X0; + const y0 = y - Y0; + const z0 = z - Z0; + const w0 = w - W0; + const c1 = x0 > y0 ? 32 : 0; + const c2 = x0 > z0 ? 16 : 0; + const c3 = y0 > z0 ? 8 : 0; + const c4 = x0 > w0 ? 4 : 0; + const c5 = y0 > w0 ? 2 : 0; + const c6 = z0 > w0 ? 1 : 0; + const c = c1 + c2 + c3 + c4 + c5 + c6; + let i1; + let j1; + let k1; + let l1; + let i2; + let j2; + let k2; + let l2; + let i3; + let j3; + let k3; + let l3; + i1 = simplex[c][0] >= 3 ? 1 : 0; + j1 = simplex[c][1] >= 3 ? 1 : 0; + k1 = simplex[c][2] >= 3 ? 1 : 0; + l1 = simplex[c][3] >= 3 ? 1 : 0; + i2 = simplex[c][0] >= 2 ? 1 : 0; + j2 = simplex[c][1] >= 2 ? 1 : 0; + k2 = simplex[c][2] >= 2 ? 1 : 0; + l2 = simplex[c][3] >= 2 ? 1 : 0; + i3 = simplex[c][0] >= 1 ? 1 : 0; + j3 = simplex[c][1] >= 1 ? 1 : 0; + k3 = simplex[c][2] >= 1 ? 1 : 0; + l3 = simplex[c][3] >= 1 ? 1 : 0; + const x1 = x0 - i1 + G4; + const y1 = y0 - j1 + G4; + const z1 = z0 - k1 + G4; + const w1 = w0 - l1 + G4; + const x2 = x0 - i2 + 2 * G4; + const y2 = y0 - j2 + 2 * G4; + const z2 = z0 - k2 + 2 * G4; + const w2 = w0 - l2 + 2 * G4; + const x3 = x0 - i3 + 3 * G4; + const y3 = y0 - j3 + 3 * G4; + const z3 = z0 - k3 + 3 * G4; + const w3 = w0 - l3 + 3 * G4; + const x4 = x0 - 1 + 4 * G4; + const y4 = y0 - 1 + 4 * G4; + const z4 = z0 - 1 + 4 * G4; + const w4 = w0 - 1 + 4 * G4; + const ii = i & 255; + const jj = j & 255; + const kk = k & 255; + const ll = l & 255; + const gi0 = perm[ii + perm[jj + perm[kk + perm[ll]]]] % 32; + const gi1 = perm[ii + i1 + perm[jj + j1 + perm[kk + k1 + perm[ll + l1]]]] % 32; + const gi2 = perm[ii + i2 + perm[jj + j2 + perm[kk + k2 + perm[ll + l2]]]] % 32; + const gi3 = perm[ii + i3 + perm[jj + j3 + perm[kk + k3 + perm[ll + l3]]]] % 32; + const gi4 = perm[ii + 1 + perm[jj + 1 + perm[kk + 1 + perm[ll + 1]]]] % 32; + let t0 = .6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0; + if (t0 < 0) n0 = 0; + else { + t0 *= t0; + n0 = t0 * t0 * this.dot4(grad4[gi0], x0, y0, z0, w0); + } + let t1 = .6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1; + if (t1 < 0) n1 = 0; + else { + t1 *= t1; + n1 = t1 * t1 * this.dot4(grad4[gi1], x1, y1, z1, w1); + } + let t2 = .6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2; + if (t2 < 0) n2 = 0; + else { + t2 *= t2; + n2 = t2 * t2 * this.dot4(grad4[gi2], x2, y2, z2, w2); + } + let t3 = .6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3; + if (t3 < 0) n3 = 0; + else { + t3 *= t3; + n3 = t3 * t3 * this.dot4(grad4[gi3], x3, y3, z3, w3); + } + let t4 = .6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4; + if (t4 < 0) n4 = 0; + else { + t4 *= t4; + n4 = t4 * t4 * this.dot4(grad4[gi4], x4, y4, z4, w4); + } + return 27 * (n0 + n1 + n2 + n3 + n4); + }); + for (let i = 0; i < 256; i++) this.p[i] = Math.floor(r.random() * 256); + for (let i = 0; i < 512; i++) this.perm[i] = this.p[i & 255]; + } +}; +//#endregion +//#region node_modules/three-stdlib/objects/Sky.js +var __defProp$17 = Object.defineProperty; +var __defNormalProp$17 = (obj, key, value) => key in obj ? __defProp$17(obj, key, { + enumerable: true, + configurable: true, + writable: true, + value +}) : obj[key] = value; +var __publicField$17 = (obj, key, value) => { + __defNormalProp$17(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var Sky$1 = /* @__PURE__ */ (() => { + const SkyShader = { + uniforms: { + turbidity: { value: 2 }, + rayleigh: { value: 1 }, + mieCoefficient: { value: .005 }, + mieDirectionalG: { value: .8 }, + sunPosition: { value: new Vector3() }, + up: { value: new Vector3(0, 1, 0) } + }, + vertexShader: ` + uniform vec3 sunPosition; + uniform float rayleigh; + uniform float turbidity; + uniform float mieCoefficient; + uniform vec3 up; + + varying vec3 vWorldPosition; + varying vec3 vSunDirection; + varying float vSunfade; + varying vec3 vBetaR; + varying vec3 vBetaM; + varying float vSunE; + + // constants for atmospheric scattering + const float e = 2.71828182845904523536028747135266249775724709369995957; + const float pi = 3.141592653589793238462643383279502884197169; + + // wavelength of used primaries, according to preetham + const vec3 lambda = vec3( 680E-9, 550E-9, 450E-9 ); + // this pre-calcuation replaces older TotalRayleigh(vec3 lambda) function: + // (8.0 * pow(pi, 3.0) * pow(pow(n, 2.0) - 1.0, 2.0) * (6.0 + 3.0 * pn)) / (3.0 * N * pow(lambda, vec3(4.0)) * (6.0 - 7.0 * pn)) + const vec3 totalRayleigh = vec3( 5.804542996261093E-6, 1.3562911419845635E-5, 3.0265902468824876E-5 ); + + // mie stuff + // K coefficient for the primaries + const float v = 4.0; + const vec3 K = vec3( 0.686, 0.678, 0.666 ); + // MieConst = pi * pow( ( 2.0 * pi ) / lambda, vec3( v - 2.0 ) ) * K + const vec3 MieConst = vec3( 1.8399918514433978E14, 2.7798023919660528E14, 4.0790479543861094E14 ); + + // earth shadow hack + // cutoffAngle = pi / 1.95; + const float cutoffAngle = 1.6110731556870734; + const float steepness = 1.5; + const float EE = 1000.0; + + float sunIntensity( float zenithAngleCos ) { + zenithAngleCos = clamp( zenithAngleCos, -1.0, 1.0 ); + return EE * max( 0.0, 1.0 - pow( e, -( ( cutoffAngle - acos( zenithAngleCos ) ) / steepness ) ) ); + } + + vec3 totalMie( float T ) { + float c = ( 0.2 * T ) * 10E-18; + return 0.434 * c * MieConst; + } + + void main() { + + vec4 worldPosition = modelMatrix * vec4( position, 1.0 ); + vWorldPosition = worldPosition.xyz; + + gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); + gl_Position.z = gl_Position.w; // set z to camera.far + + vSunDirection = normalize( sunPosition ); + + vSunE = sunIntensity( dot( vSunDirection, up ) ); + + vSunfade = 1.0 - clamp( 1.0 - exp( ( sunPosition.y / 450000.0 ) ), 0.0, 1.0 ); + + float rayleighCoefficient = rayleigh - ( 1.0 * ( 1.0 - vSunfade ) ); + + // extinction (absorbtion + out scattering) + // rayleigh coefficients + vBetaR = totalRayleigh * rayleighCoefficient; + + // mie coefficients + vBetaM = totalMie( turbidity ) * mieCoefficient; + + } + `, + fragmentShader: ` + varying vec3 vWorldPosition; + varying vec3 vSunDirection; + varying float vSunfade; + varying vec3 vBetaR; + varying vec3 vBetaM; + varying float vSunE; + + uniform float mieDirectionalG; + uniform vec3 up; + + const vec3 cameraPos = vec3( 0.0, 0.0, 0.0 ); + + // constants for atmospheric scattering + const float pi = 3.141592653589793238462643383279502884197169; + + const float n = 1.0003; // refractive index of air + const float N = 2.545E25; // number of molecules per unit volume for air at 288.15K and 1013mb (sea level -45 celsius) + + // optical length at zenith for molecules + const float rayleighZenithLength = 8.4E3; + const float mieZenithLength = 1.25E3; + // 66 arc seconds -> degrees, and the cosine of that + const float sunAngularDiameterCos = 0.999956676946448443553574619906976478926848692873900859324; + + // 3.0 / ( 16.0 * pi ) + const float THREE_OVER_SIXTEENPI = 0.05968310365946075; + // 1.0 / ( 4.0 * pi ) + const float ONE_OVER_FOURPI = 0.07957747154594767; + + float rayleighPhase( float cosTheta ) { + return THREE_OVER_SIXTEENPI * ( 1.0 + pow( cosTheta, 2.0 ) ); + } + + float hgPhase( float cosTheta, float g ) { + float g2 = pow( g, 2.0 ); + float inverse = 1.0 / pow( 1.0 - 2.0 * g * cosTheta + g2, 1.5 ); + return ONE_OVER_FOURPI * ( ( 1.0 - g2 ) * inverse ); + } + + void main() { + + vec3 direction = normalize( vWorldPosition - cameraPos ); + + // optical length + // cutoff angle at 90 to avoid singularity in next formula. + float zenithAngle = acos( max( 0.0, dot( up, direction ) ) ); + float inverse = 1.0 / ( cos( zenithAngle ) + 0.15 * pow( 93.885 - ( ( zenithAngle * 180.0 ) / pi ), -1.253 ) ); + float sR = rayleighZenithLength * inverse; + float sM = mieZenithLength * inverse; + + // combined extinction factor + vec3 Fex = exp( -( vBetaR * sR + vBetaM * sM ) ); + + // in scattering + float cosTheta = dot( direction, vSunDirection ); + + float rPhase = rayleighPhase( cosTheta * 0.5 + 0.5 ); + vec3 betaRTheta = vBetaR * rPhase; + + float mPhase = hgPhase( cosTheta, mieDirectionalG ); + vec3 betaMTheta = vBetaM * mPhase; + + vec3 Lin = pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * ( 1.0 - Fex ), vec3( 1.5 ) ); + Lin *= mix( vec3( 1.0 ), pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * Fex, vec3( 1.0 / 2.0 ) ), clamp( pow( 1.0 - dot( up, vSunDirection ), 5.0 ), 0.0, 1.0 ) ); + + // nightsky + float theta = acos( direction.y ); // elevation --> y-axis, [-pi/2, pi/2] + float phi = atan( direction.z, direction.x ); // azimuth --> x-axis [-pi/2, pi/2] + vec2 uv = vec2( phi, theta ) / vec2( 2.0 * pi, pi ) + vec2( 0.5, 0.0 ); + vec3 L0 = vec3( 0.1 ) * Fex; + + // composition + solar disc + float sundisk = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos + 0.00002, cosTheta ); + L0 += ( vSunE * 19000.0 * Fex ) * sundisk; + + vec3 texColor = ( Lin + L0 ) * 0.04 + vec3( 0.0, 0.0003, 0.00075 ); + + vec3 retColor = pow( texColor, vec3( 1.0 / ( 1.2 + ( 1.2 * vSunfade ) ) ) ); + + gl_FragColor = vec4( retColor, 1.0 ); + + #include + #include <${version$2 >= 154 ? "colorspace_fragment" : "encodings_fragment"}> + + } + ` + }; + const material = new ShaderMaterial({ + name: "SkyShader", + fragmentShader: SkyShader.fragmentShader, + vertexShader: SkyShader.vertexShader, + uniforms: UniformsUtils.clone(SkyShader.uniforms), + side: 1, + depthWrite: false + }); + class Sky2 extends Mesh { + constructor() { + super(new BoxGeometry(1, 1, 1), material); + } + } + __publicField$17(Sky2, "SkyShader", SkyShader); + __publicField$17(Sky2, "material", material); + return Sky2; +})(); +//#endregion +//#region node_modules/three-stdlib/objects/GroundProjectedEnv.js +var isCubeTexture$1 = (def) => def && def.isCubeTexture; +var GroundProjectedEnv = class extends Mesh { + constructor(texture, options) { + var _a, _b; + const isCubeMap = isCubeTexture$1(texture); + const cubeSize = ((_b = isCubeMap ? (_a = texture.image[0]) == null ? void 0 : _a.width : texture.image.width) != null ? _b : 1024) / 4; + const _lodMax = Math.floor(Math.log2(cubeSize)); + const _cubeSize = Math.pow(2, _lodMax); + const width = 3 * Math.max(_cubeSize, 112); + const height = 4 * _cubeSize; + const defines = [ + isCubeMap ? "#define ENVMAP_TYPE_CUBE" : "", + `#define CUBEUV_TEXEL_WIDTH ${1 / width}`, + `#define CUBEUV_TEXEL_HEIGHT ${1 / height}`, + `#define CUBEUV_MAX_MIP ${_lodMax}.0` + ]; + const vertexShader = ` + varying vec3 vWorldPosition; + void main() + { + vec4 worldPosition = ( modelMatrix * vec4( position, 1.0 ) ); + vWorldPosition = worldPosition.xyz; + + gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); + } + `; + const fragmentShader = defines.join("\n") + ` + #define ENVMAP_TYPE_CUBE_UV + varying vec3 vWorldPosition; + uniform float radius; + uniform float height; + uniform float angle; + #ifdef ENVMAP_TYPE_CUBE + uniform samplerCube map; + #else + uniform sampler2D map; + #endif + // From: https://www.shadertoy.com/view/4tsBD7 + float diskIntersectWithBackFaceCulling( vec3 ro, vec3 rd, vec3 c, vec3 n, float r ) + { + float d = dot ( rd, n ); + + if( d > 0.0 ) { return 1e6; } + + vec3 o = ro - c; + float t = - dot( n, o ) / d; + vec3 q = o + rd * t; + + return ( dot( q, q ) < r * r ) ? t : 1e6; + } + // From: https://www.iquilezles.org/www/articles/intersectors/intersectors.htm + float sphereIntersect( vec3 ro, vec3 rd, vec3 ce, float ra ) + { + vec3 oc = ro - ce; + float b = dot( oc, rd ); + float c = dot( oc, oc ) - ra * ra; + float h = b * b - c; + + if( h < 0.0 ) { return -1.0; } + + h = sqrt( h ); + + return - b + h; + } + vec3 project() + { + vec3 p = normalize( vWorldPosition ); + vec3 camPos = cameraPosition; + camPos.y -= height; + float intersection = sphereIntersect( camPos, p, vec3( 0.0 ), radius ); + if( intersection > 0.0 ) { + + vec3 h = vec3( 0.0, - height, 0.0 ); + float intersection2 = diskIntersectWithBackFaceCulling( camPos, p, h, vec3( 0.0, 1.0, 0.0 ), radius ); + p = ( camPos + min( intersection, intersection2 ) * p ) / radius; + } else { + p = vec3( 0.0, 1.0, 0.0 ); + } + return p; + } + #include + #include + void main() + { + vec3 projectedWorldPosition = project(); + + #ifdef ENVMAP_TYPE_CUBE + vec3 outcolor = textureCube( map, projectedWorldPosition ).rgb; + #else + vec3 direction = normalize( projectedWorldPosition ); + vec2 uv = equirectUv( direction ); + vec3 outcolor = texture2D( map, uv ).rgb; + #endif + gl_FragColor = vec4( outcolor, 1.0 ); + #include + #include <${version$2 >= 154 ? "colorspace_fragment" : "encodings_fragment"}> + } + `; + const uniforms = { + map: { value: texture }, + height: { value: (options == null ? void 0 : options.height) || 15 }, + radius: { value: (options == null ? void 0 : options.radius) || 100 } + }; + const geometry = new IcosahedronGeometry(1, 16); + const material = new ShaderMaterial({ + uniforms, + fragmentShader, + vertexShader, + side: 2 + }); + super(geometry, material); + } + set radius(radius) { + this.material.uniforms.radius.value = radius; + } + get radius() { + return this.material.uniforms.radius.value; + } + set height(height) { + this.material.uniforms.height.value = height; + } + get height() { + return this.material.uniforms.height.value; + } +}; +//#endregion +//#region node_modules/three-stdlib/utils/SkeletonUtils.js +function retarget(target, source, options = {}) { + const pos = new Vector3(), quat = new Quaternion(), scale = new Vector3(), bindBoneMatrix = new Matrix4(), relativeMatrix = new Matrix4(), globalMatrix = new Matrix4(); + options.preserveMatrix = options.preserveMatrix !== void 0 ? options.preserveMatrix : true; + options.preservePosition = options.preservePosition !== void 0 ? options.preservePosition : true; + options.preserveHipPosition = options.preserveHipPosition !== void 0 ? options.preserveHipPosition : false; + options.useTargetMatrix = options.useTargetMatrix !== void 0 ? options.useTargetMatrix : false; + options.hip = options.hip !== void 0 ? options.hip : "hip"; + options.names = options.names || {}; + const sourceBones = source.isObject3D ? source.skeleton.bones : getBones(source), bones = target.isObject3D ? target.skeleton.bones : getBones(target); + let bindBones, bone, name, boneTo, bonesPosition; + if (target.isObject3D) target.skeleton.pose(); + else { + options.useTargetMatrix = true; + options.preserveMatrix = false; + } + if (options.preservePosition) { + bonesPosition = []; + for (let i = 0; i < bones.length; i++) bonesPosition.push(bones[i].position.clone()); + } + if (options.preserveMatrix) { + target.updateMatrixWorld(); + target.matrixWorld.identity(); + for (let i = 0; i < target.children.length; ++i) target.children[i].updateMatrixWorld(true); + } + if (options.offsets) { + bindBones = []; + for (let i = 0; i < bones.length; ++i) { + bone = bones[i]; + name = options.names[bone.name] || bone.name; + if (options.offsets[name]) { + bone.matrix.multiply(options.offsets[name]); + bone.matrix.decompose(bone.position, bone.quaternion, bone.scale); + bone.updateMatrixWorld(); + } + bindBones.push(bone.matrixWorld.clone()); + } + } + for (let i = 0; i < bones.length; ++i) { + bone = bones[i]; + name = options.names[bone.name] || bone.name; + boneTo = getBoneByName(name, sourceBones); + globalMatrix.copy(bone.matrixWorld); + if (boneTo) { + boneTo.updateMatrixWorld(); + if (options.useTargetMatrix) relativeMatrix.copy(boneTo.matrixWorld); + else { + relativeMatrix.copy(target.matrixWorld).invert(); + relativeMatrix.multiply(boneTo.matrixWorld); + } + scale.setFromMatrixScale(relativeMatrix); + relativeMatrix.scale(scale.set(1 / scale.x, 1 / scale.y, 1 / scale.z)); + globalMatrix.makeRotationFromQuaternion(quat.setFromRotationMatrix(relativeMatrix)); + if (target.isObject3D) { + const boneIndex = bones.indexOf(bone), wBindMatrix = bindBones ? bindBones[boneIndex] : bindBoneMatrix.copy(target.skeleton.boneInverses[boneIndex]).invert(); + globalMatrix.multiply(wBindMatrix); + } + globalMatrix.copyPosition(relativeMatrix); + } + if (bone.parent && bone.parent.isBone) { + bone.matrix.copy(bone.parent.matrixWorld).invert(); + bone.matrix.multiply(globalMatrix); + } else bone.matrix.copy(globalMatrix); + if (options.preserveHipPosition && name === options.hip) bone.matrix.setPosition(pos.set(0, bone.position.y, 0)); + bone.matrix.decompose(bone.position, bone.quaternion, bone.scale); + bone.updateMatrixWorld(); + } + if (options.preservePosition) for (let i = 0; i < bones.length; ++i) { + bone = bones[i]; + name = options.names[bone.name] || bone.name; + if (name !== options.hip) bone.position.copy(bonesPosition[i]); + } + if (options.preserveMatrix) target.updateMatrixWorld(true); +} +function retargetClip(target, source, clip, options = {}) { + options.useFirstFramePosition = options.useFirstFramePosition !== void 0 ? options.useFirstFramePosition : false; + options.fps = options.fps !== void 0 ? options.fps : 30; + options.names = options.names || []; + if (!source.isObject3D) source = getHelperFromSkeleton(source); + const numFrames = Math.round(clip.duration * (options.fps / 1e3) * 1e3), delta = 1 / options.fps, convertedTracks = [], mixer = new AnimationMixer(source), bones = getBones(target.skeleton), boneDatas = []; + let positionOffset, bone, boneTo, boneData, name; + mixer.clipAction(clip).play(); + mixer.update(0); + source.updateMatrixWorld(); + for (let i = 0; i < numFrames; ++i) { + const time = i * delta; + retarget(target, source, options); + for (let j = 0; j < bones.length; ++j) { + name = options.names[bones[j].name] || bones[j].name; + boneTo = getBoneByName(name, source.skeleton); + if (boneTo) { + bone = bones[j]; + boneData = boneDatas[j] = boneDatas[j] || { bone }; + if (options.hip === name) { + if (!boneData.pos) boneData.pos = { + times: new Float32Array(numFrames), + values: new Float32Array(numFrames * 3) + }; + if (options.useFirstFramePosition) { + if (i === 0) positionOffset = bone.position.clone(); + bone.position.sub(positionOffset); + } + boneData.pos.times[i] = time; + bone.position.toArray(boneData.pos.values, i * 3); + } + if (!boneData.quat) boneData.quat = { + times: new Float32Array(numFrames), + values: new Float32Array(numFrames * 4) + }; + boneData.quat.times[i] = time; + bone.quaternion.toArray(boneData.quat.values, i * 4); + } + } + mixer.update(delta); + source.updateMatrixWorld(); + } + for (let i = 0; i < boneDatas.length; ++i) { + boneData = boneDatas[i]; + if (boneData) { + if (boneData.pos) convertedTracks.push(new VectorKeyframeTrack(".bones[" + boneData.bone.name + "].position", boneData.pos.times, boneData.pos.values)); + convertedTracks.push(new QuaternionKeyframeTrack(".bones[" + boneData.bone.name + "].quaternion", boneData.quat.times, boneData.quat.values)); + } + } + mixer.uncacheAction(clip); + return new AnimationClip(clip.name, -1, convertedTracks); +} +function clone(source) { + const sourceLookup = /* @__PURE__ */ new Map(); + const cloneLookup = /* @__PURE__ */ new Map(); + const clone2 = source.clone(); + parallelTraverse(source, clone2, function(sourceNode, clonedNode) { + sourceLookup.set(clonedNode, sourceNode); + cloneLookup.set(sourceNode, clonedNode); + }); + clone2.traverse(function(node) { + if (!node.isSkinnedMesh) return; + const clonedMesh = node; + const sourceMesh = sourceLookup.get(node); + const sourceBones = sourceMesh.skeleton.bones; + clonedMesh.skeleton = sourceMesh.skeleton.clone(); + clonedMesh.bindMatrix.copy(sourceMesh.bindMatrix); + clonedMesh.skeleton.bones = sourceBones.map(function(bone) { + return cloneLookup.get(bone); + }); + clonedMesh.bind(clonedMesh.skeleton, clonedMesh.bindMatrix); + }); + return clone2; +} +function getBoneByName(name, skeleton) { + for (let i = 0, bones = getBones(skeleton); i < bones.length; i++) if (name === bones[i].name) return bones[i]; +} +function getBones(skeleton) { + return Array.isArray(skeleton) ? skeleton : skeleton.bones; +} +function getHelperFromSkeleton(skeleton) { + const source = new SkeletonHelper(skeleton.bones[0]); + source.skeleton = skeleton; + return source; +} +function parallelTraverse(a, b, callback) { + callback(a, b); + for (let i = 0; i < a.children.length; i++) parallelTraverse(a.children[i], b.children[i], callback); +} +var SkeletonUtils = { + retarget, + retargetClip, + clone +}; +//#endregion +//#region node_modules/three-stdlib/math/MeshSurfaceSampler.js +var _face = /* @__PURE__ */ new Triangle(); +var _color = /* @__PURE__ */ new Vector3(); +var MeshSurfaceSampler = class { + constructor(mesh) { + let geometry = mesh.geometry; + if (geometry.index) { + console.warn("THREE.MeshSurfaceSampler: Converting geometry to non-indexed BufferGeometry."); + geometry = geometry.toNonIndexed(); + } + this.geometry = geometry; + this.randomFunction = Math.random; + this.positionAttribute = this.geometry.getAttribute("position"); + this.colorAttribute = this.geometry.getAttribute("color"); + this.weightAttribute = null; + this.distribution = null; + } + setWeightAttribute(name) { + this.weightAttribute = name ? this.geometry.getAttribute(name) : null; + return this; + } + build() { + const positionAttribute = this.positionAttribute; + const weightAttribute = this.weightAttribute; + const faceWeights = new Float32Array(positionAttribute.count / 3); + for (let i = 0; i < positionAttribute.count; i += 3) { + let faceWeight = 1; + if (weightAttribute) faceWeight = weightAttribute.getX(i) + weightAttribute.getX(i + 1) + weightAttribute.getX(i + 2); + _face.a.fromBufferAttribute(positionAttribute, i); + _face.b.fromBufferAttribute(positionAttribute, i + 1); + _face.c.fromBufferAttribute(positionAttribute, i + 2); + faceWeight *= _face.getArea(); + faceWeights[i / 3] = faceWeight; + } + this.distribution = new Float32Array(positionAttribute.count / 3); + let cumulativeTotal = 0; + for (let i = 0; i < faceWeights.length; i++) { + cumulativeTotal += faceWeights[i]; + this.distribution[i] = cumulativeTotal; + } + return this; + } + setRandomGenerator(randomFunction) { + this.randomFunction = randomFunction; + return this; + } + sample(targetPosition, targetNormal, targetColor) { + const faceIndex = this.sampleFaceIndex(); + return this.sampleFace(faceIndex, targetPosition, targetNormal, targetColor); + } + sampleFaceIndex() { + const cumulativeTotal = this.distribution[this.distribution.length - 1]; + return this.binarySearch(this.randomFunction() * cumulativeTotal); + } + binarySearch(x) { + const dist = this.distribution; + let start = 0; + let end = dist.length - 1; + let index = -1; + while (start <= end) { + const mid = Math.ceil((start + end) / 2); + if (mid === 0 || dist[mid - 1] <= x && dist[mid] > x) { + index = mid; + break; + } else if (x < dist[mid]) end = mid - 1; + else start = mid + 1; + } + return index; + } + sampleFace(faceIndex, targetPosition, targetNormal, targetColor) { + let u = this.randomFunction(); + let v = this.randomFunction(); + if (u + v > 1) { + u = 1 - u; + v = 1 - v; + } + _face.a.fromBufferAttribute(this.positionAttribute, faceIndex * 3); + _face.b.fromBufferAttribute(this.positionAttribute, faceIndex * 3 + 1); + _face.c.fromBufferAttribute(this.positionAttribute, faceIndex * 3 + 2); + targetPosition.set(0, 0, 0).addScaledVector(_face.a, u).addScaledVector(_face.b, v).addScaledVector(_face.c, 1 - (u + v)); + if (targetNormal !== void 0) _face.getNormal(targetNormal); + if (targetColor !== void 0 && this.colorAttribute !== void 0) { + _face.a.fromBufferAttribute(this.colorAttribute, faceIndex * 3); + _face.b.fromBufferAttribute(this.colorAttribute, faceIndex * 3 + 1); + _face.c.fromBufferAttribute(this.colorAttribute, faceIndex * 3 + 2); + _color.set(0, 0, 0).addScaledVector(_face.a, u).addScaledVector(_face.b, v).addScaledVector(_face.c, 1 - (u + v)); + targetColor.r = _color.x; + targetColor.g = _color.y; + targetColor.b = _color.z; + } + return this; + } +}; +//#endregion +//#region node_modules/three-stdlib/controls/EventDispatcher.js +var __defProp$16 = Object.defineProperty; +var __defNormalProp$16 = (obj, key, value) => key in obj ? __defProp$16(obj, key, { + enumerable: true, + configurable: true, + writable: true, + value +}) : obj[key] = value; +var __publicField$16 = (obj, key, value) => { + __defNormalProp$16(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var EventDispatcher$1 = class { + constructor() { + __publicField$16(this, "_listeners"); + } + /** + * Adds a listener to an event type. + * @param type The type of event to listen to. + * @param listener The function that gets called when the event is fired. + */ + addEventListener(type, listener) { + if (this._listeners === void 0) this._listeners = {}; + const listeners = this._listeners; + if (listeners[type] === void 0) listeners[type] = []; + if (listeners[type].indexOf(listener) === -1) listeners[type].push(listener); + } + /** + * Checks if listener is added to an event type. + * @param type The type of event to listen to. + * @param listener The function that gets called when the event is fired. + */ + hasEventListener(type, listener) { + if (this._listeners === void 0) return false; + const listeners = this._listeners; + return listeners[type] !== void 0 && listeners[type].indexOf(listener) !== -1; + } + /** + * Removes a listener from an event type. + * @param type The type of the listener that gets removed. + * @param listener The listener function that gets removed. + */ + removeEventListener(type, listener) { + if (this._listeners === void 0) return; + const listenerArray = this._listeners[type]; + if (listenerArray !== void 0) { + const index = listenerArray.indexOf(listener); + if (index !== -1) listenerArray.splice(index, 1); + } + } + /** + * Fire an event type. + * @param event The event that gets fired. + */ + dispatchEvent(event) { + if (this._listeners === void 0) return; + const listenerArray = this._listeners[event.type]; + if (listenerArray !== void 0) { + event.target = this; + const array = listenerArray.slice(0); + for (let i = 0, l = array.length; i < l; i++) array[i].call(this, event); + event.target = null; + } + } +}; +//#endregion +//#region node_modules/three-stdlib/controls/FirstPersonControls.js +var __defProp$15 = Object.defineProperty; +var __defNormalProp$15 = (obj, key, value) => key in obj ? __defProp$15(obj, key, { + enumerable: true, + configurable: true, + writable: true, + value +}) : obj[key] = value; +var __publicField$15 = (obj, key, value) => { + __defNormalProp$15(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var targetPosition$1 = /* @__PURE__ */ new Vector3(); +var FirstPersonControls$1 = class extends EventDispatcher$1 { + constructor(object, domElement) { + super(); + __publicField$15(this, "object"); + __publicField$15(this, "domElement"); + __publicField$15(this, "enabled", true); + __publicField$15(this, "movementSpeed", 1); + __publicField$15(this, "lookSpeed", .005); + __publicField$15(this, "lookVertical", true); + __publicField$15(this, "autoForward", false); + __publicField$15(this, "activeLook", true); + __publicField$15(this, "heightSpeed", false); + __publicField$15(this, "heightCoef", 1); + __publicField$15(this, "heightMin", 0); + __publicField$15(this, "heightMax", 1); + __publicField$15(this, "constrainVertical", false); + __publicField$15(this, "verticalMin", 0); + __publicField$15(this, "verticalMax", Math.PI); + __publicField$15(this, "mouseDragOn", false); + __publicField$15(this, "autoSpeedFactor", 0); + __publicField$15(this, "mouseX", 0); + __publicField$15(this, "mouseY", 0); + __publicField$15(this, "moveForward", false); + __publicField$15(this, "moveBackward", false); + __publicField$15(this, "moveLeft", false); + __publicField$15(this, "moveRight", false); + __publicField$15(this, "moveUp", false); + __publicField$15(this, "moveDown", false); + __publicField$15(this, "viewHalfX", 0); + __publicField$15(this, "viewHalfY", 0); + __publicField$15(this, "lat", 0); + __publicField$15(this, "lon", 0); + __publicField$15(this, "lookDirection", new Vector3()); + __publicField$15(this, "spherical", new Spherical()); + __publicField$15(this, "target", new Vector3()); + __publicField$15(this, "connect", (domElement) => { + domElement.setAttribute("tabindex", "-1"); + domElement.style.touchAction = "none"; + domElement.addEventListener("contextmenu", this.contextmenu); + domElement.addEventListener("mousemove", this.onMouseMove); + domElement.addEventListener("mousedown", this.onMouseDown); + domElement.addEventListener("mouseup", this.onMouseUp); + this.domElement = domElement; + window.addEventListener("keydown", this.onKeyDown); + window.addEventListener("keyup", this.onKeyUp); + this.handleResize(); + }); + __publicField$15(this, "dispose", () => { + var _a, _b, _c, _d; + (_a = this.domElement) == null || _a.removeEventListener("contextmenu", this.contextmenu); + (_b = this.domElement) == null || _b.removeEventListener("mousedown", this.onMouseDown); + (_c = this.domElement) == null || _c.removeEventListener("mousemove", this.onMouseMove); + (_d = this.domElement) == null || _d.removeEventListener("mouseup", this.onMouseUp); + window.removeEventListener("keydown", this.onKeyDown); + window.removeEventListener("keyup", this.onKeyUp); + }); + __publicField$15(this, "handleResize", () => { + if (this.domElement) { + this.viewHalfX = this.domElement.offsetWidth / 2; + this.viewHalfY = this.domElement.offsetHeight / 2; + } + }); + __publicField$15(this, "onMouseDown", (event) => { + var _a; + (_a = this.domElement) == null || _a.focus(); + if (this.activeLook) switch (event.button) { + case 0: + this.moveForward = true; + break; + case 2: + this.moveBackward = true; + break; + } + this.mouseDragOn = true; + }); + __publicField$15(this, "onMouseUp", (event) => { + if (this.activeLook) switch (event.button) { + case 0: + this.moveForward = false; + break; + case 2: + this.moveBackward = false; + break; + } + this.mouseDragOn = false; + }); + __publicField$15(this, "onMouseMove", (event) => { + if (this.domElement) { + this.mouseX = event.pageX - this.domElement.offsetLeft - this.viewHalfX; + this.mouseY = event.pageY - this.domElement.offsetTop - this.viewHalfY; + } + }); + __publicField$15(this, "onKeyDown", (event) => { + switch (event.code) { + case "ArrowUp": + case "KeyW": + this.moveForward = true; + break; + case "ArrowLeft": + case "KeyA": + this.moveLeft = true; + break; + case "ArrowDown": + case "KeyS": + this.moveBackward = true; + break; + case "ArrowRight": + case "KeyD": + this.moveRight = true; + break; + case "KeyR": + this.moveUp = true; + break; + case "KeyF": + this.moveDown = true; + break; + } + }); + __publicField$15(this, "onKeyUp", (event) => { + switch (event.code) { + case "ArrowUp": + case "KeyW": + this.moveForward = false; + break; + case "ArrowLeft": + case "KeyA": + this.moveLeft = false; + break; + case "ArrowDown": + case "KeyS": + this.moveBackward = false; + break; + case "ArrowRight": + case "KeyD": + this.moveRight = false; + break; + case "KeyR": + this.moveUp = false; + break; + case "KeyF": + this.moveDown = false; + break; + } + }); + __publicField$15(this, "lookAt", (x, y, z) => { + if (x instanceof Vector3) this.target.copy(x); + else if (y && z) this.target.set(x, y, z); + this.object.lookAt(this.target); + this.setOrientation(); + return this; + }); + __publicField$15(this, "update", (delta) => { + if (!this.enabled) return; + if (this.heightSpeed) { + const heightDelta = MathUtils.clamp(this.object.position.y, this.heightMin, this.heightMax) - this.heightMin; + this.autoSpeedFactor = delta * (heightDelta * this.heightCoef); + } else this.autoSpeedFactor = 0; + const actualMoveSpeed = delta * this.movementSpeed; + if (this.moveForward || this.autoForward && !this.moveBackward) this.object.translateZ(-(actualMoveSpeed + this.autoSpeedFactor)); + if (this.moveBackward) this.object.translateZ(actualMoveSpeed); + if (this.moveLeft) this.object.translateX(-actualMoveSpeed); + if (this.moveRight) this.object.translateX(actualMoveSpeed); + if (this.moveUp) this.object.translateY(actualMoveSpeed); + if (this.moveDown) this.object.translateY(-actualMoveSpeed); + let actualLookSpeed = delta * this.lookSpeed; + if (!this.activeLook) actualLookSpeed = 0; + let verticalLookRatio = 1; + if (this.constrainVertical) verticalLookRatio = Math.PI / (this.verticalMax - this.verticalMin); + this.lon -= this.mouseX * actualLookSpeed; + if (this.lookVertical) this.lat -= this.mouseY * actualLookSpeed * verticalLookRatio; + this.lat = Math.max(-85, Math.min(85, this.lat)); + let phi = MathUtils.degToRad(90 - this.lat); + const theta = MathUtils.degToRad(this.lon); + if (this.constrainVertical) phi = MathUtils.mapLinear(phi, 0, Math.PI, this.verticalMin, this.verticalMax); + const position = this.object.position; + targetPosition$1.setFromSphericalCoords(1, phi, theta).add(position); + this.object.lookAt(targetPosition$1); + }); + __publicField$15(this, "contextmenu", (event) => event.preventDefault()); + __publicField$15(this, "setOrientation", () => { + this.lookDirection.set(0, 0, -1).applyQuaternion(this.object.quaternion); + this.spherical.setFromVector3(this.lookDirection); + this.lat = 90 - MathUtils.radToDeg(this.spherical.phi); + this.lon = MathUtils.radToDeg(this.spherical.theta); + }); + this.object = object; + this.domElement = domElement; + this.setOrientation(); + if (domElement) this.connect(domElement); + } +}; +//#endregion +//#region node_modules/three-stdlib/controls/TransformControls.js +var __defProp$14 = Object.defineProperty; +var __defNormalProp$14 = (obj, key, value) => key in obj ? __defProp$14(obj, key, { + enumerable: true, + configurable: true, + writable: true, + value +}) : obj[key] = value; +var __publicField$14 = (obj, key, value) => { + __defNormalProp$14(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var TransformControls$1 = class extends Object3D { + constructor(camera, domElement) { + super(); + __publicField$14(this, "isTransformControls", true); + __publicField$14(this, "visible", false); + __publicField$14(this, "domElement"); + __publicField$14(this, "raycaster", new Raycaster()); + __publicField$14(this, "gizmo"); + __publicField$14(this, "plane"); + __publicField$14(this, "tempVector", new Vector3()); + __publicField$14(this, "tempVector2", new Vector3()); + __publicField$14(this, "tempQuaternion", new Quaternion()); + __publicField$14(this, "unit", { + X: new Vector3(1, 0, 0), + Y: new Vector3(0, 1, 0), + Z: new Vector3(0, 0, 1) + }); + __publicField$14(this, "pointStart", new Vector3()); + __publicField$14(this, "pointEnd", new Vector3()); + __publicField$14(this, "offset", new Vector3()); + __publicField$14(this, "rotationAxis", new Vector3()); + __publicField$14(this, "startNorm", new Vector3()); + __publicField$14(this, "endNorm", new Vector3()); + __publicField$14(this, "rotationAngle", 0); + __publicField$14(this, "cameraPosition", new Vector3()); + __publicField$14(this, "cameraQuaternion", new Quaternion()); + __publicField$14(this, "cameraScale", new Vector3()); + __publicField$14(this, "parentPosition", new Vector3()); + __publicField$14(this, "parentQuaternion", new Quaternion()); + __publicField$14(this, "parentQuaternionInv", new Quaternion()); + __publicField$14(this, "parentScale", new Vector3()); + __publicField$14(this, "worldPositionStart", new Vector3()); + __publicField$14(this, "worldQuaternionStart", new Quaternion()); + __publicField$14(this, "worldScaleStart", new Vector3()); + __publicField$14(this, "worldPosition", new Vector3()); + __publicField$14(this, "worldQuaternion", new Quaternion()); + __publicField$14(this, "worldQuaternionInv", new Quaternion()); + __publicField$14(this, "worldScale", new Vector3()); + __publicField$14(this, "eye", new Vector3()); + __publicField$14(this, "positionStart", new Vector3()); + __publicField$14(this, "quaternionStart", new Quaternion()); + __publicField$14(this, "scaleStart", new Vector3()); + __publicField$14(this, "camera"); + __publicField$14(this, "object"); + __publicField$14(this, "enabled", true); + __publicField$14(this, "axis", null); + __publicField$14(this, "mode", "translate"); + __publicField$14(this, "translationSnap", null); + __publicField$14(this, "rotationSnap", null); + __publicField$14(this, "scaleSnap", null); + __publicField$14(this, "space", "world"); + __publicField$14(this, "size", 1); + __publicField$14(this, "dragging", false); + __publicField$14(this, "showX", true); + __publicField$14(this, "showY", true); + __publicField$14(this, "showZ", true); + __publicField$14(this, "changeEvent", { type: "change" }); + __publicField$14(this, "mouseDownEvent", { + type: "mouseDown", + mode: this.mode + }); + __publicField$14(this, "mouseUpEvent", { + type: "mouseUp", + mode: this.mode + }); + __publicField$14(this, "objectChangeEvent", { type: "objectChange" }); + __publicField$14(this, "intersectObjectWithRay", (object, raycaster, includeInvisible) => { + const allIntersections = raycaster.intersectObject(object, true); + for (let i = 0; i < allIntersections.length; i++) if (allIntersections[i].object.visible || includeInvisible) return allIntersections[i]; + return false; + }); + __publicField$14(this, "attach", (object) => { + this.object = object; + this.visible = true; + return this; + }); + __publicField$14(this, "detach", () => { + this.object = void 0; + this.visible = false; + this.axis = null; + return this; + }); + __publicField$14(this, "reset", () => { + if (!this.enabled) return this; + if (this.dragging) { + if (this.object !== void 0) { + this.object.position.copy(this.positionStart); + this.object.quaternion.copy(this.quaternionStart); + this.object.scale.copy(this.scaleStart); + this.dispatchEvent(this.changeEvent); + this.dispatchEvent(this.objectChangeEvent); + this.pointStart.copy(this.pointEnd); + } + } + return this; + }); + __publicField$14(this, "updateMatrixWorld", () => { + if (this.object !== void 0) { + this.object.updateMatrixWorld(); + if (this.object.parent === null) console.error("TransformControls: The attached 3D object must be a part of the scene graph."); + else this.object.parent.matrixWorld.decompose(this.parentPosition, this.parentQuaternion, this.parentScale); + this.object.matrixWorld.decompose(this.worldPosition, this.worldQuaternion, this.worldScale); + this.parentQuaternionInv.copy(this.parentQuaternion).invert(); + this.worldQuaternionInv.copy(this.worldQuaternion).invert(); + } + this.camera.updateMatrixWorld(); + this.camera.matrixWorld.decompose(this.cameraPosition, this.cameraQuaternion, this.cameraScale); + this.eye.copy(this.cameraPosition).sub(this.worldPosition).normalize(); + super.updateMatrixWorld(); + }); + __publicField$14(this, "pointerHover", (pointer) => { + if (this.object === void 0 || this.dragging === true) return; + this.raycaster.setFromCamera(pointer, this.camera); + const intersect = this.intersectObjectWithRay(this.gizmo.picker[this.mode], this.raycaster); + if (intersect) this.axis = intersect.object.name; + else this.axis = null; + }); + __publicField$14(this, "pointerDown", (pointer) => { + if (this.object === void 0 || this.dragging === true || pointer.button !== 0) return; + if (this.axis !== null) { + this.raycaster.setFromCamera(pointer, this.camera); + const planeIntersect = this.intersectObjectWithRay(this.plane, this.raycaster, true); + if (planeIntersect) { + let space = this.space; + if (this.mode === "scale") space = "local"; + else if (this.axis === "E" || this.axis === "XYZE" || this.axis === "XYZ") space = "world"; + if (space === "local" && this.mode === "rotate") { + const snap = this.rotationSnap; + if (this.axis === "X" && snap) this.object.rotation.x = Math.round(this.object.rotation.x / snap) * snap; + if (this.axis === "Y" && snap) this.object.rotation.y = Math.round(this.object.rotation.y / snap) * snap; + if (this.axis === "Z" && snap) this.object.rotation.z = Math.round(this.object.rotation.z / snap) * snap; + } + this.object.updateMatrixWorld(); + if (this.object.parent) this.object.parent.updateMatrixWorld(); + this.positionStart.copy(this.object.position); + this.quaternionStart.copy(this.object.quaternion); + this.scaleStart.copy(this.object.scale); + this.object.matrixWorld.decompose(this.worldPositionStart, this.worldQuaternionStart, this.worldScaleStart); + this.pointStart.copy(planeIntersect.point).sub(this.worldPositionStart); + } + this.dragging = true; + this.mouseDownEvent.mode = this.mode; + this.dispatchEvent(this.mouseDownEvent); + } + }); + __publicField$14(this, "pointerMove", (pointer) => { + const axis = this.axis; + const mode = this.mode; + const object = this.object; + let space = this.space; + if (mode === "scale") space = "local"; + else if (axis === "E" || axis === "XYZE" || axis === "XYZ") space = "world"; + if (object === void 0 || axis === null || this.dragging === false || pointer.button !== -1) return; + this.raycaster.setFromCamera(pointer, this.camera); + const planeIntersect = this.intersectObjectWithRay(this.plane, this.raycaster, true); + if (!planeIntersect) return; + this.pointEnd.copy(planeIntersect.point).sub(this.worldPositionStart); + if (mode === "translate") { + this.offset.copy(this.pointEnd).sub(this.pointStart); + if (space === "local" && axis !== "XYZ") this.offset.applyQuaternion(this.worldQuaternionInv); + if (axis.indexOf("X") === -1) this.offset.x = 0; + if (axis.indexOf("Y") === -1) this.offset.y = 0; + if (axis.indexOf("Z") === -1) this.offset.z = 0; + if (space === "local" && axis !== "XYZ") this.offset.applyQuaternion(this.quaternionStart).divide(this.parentScale); + else this.offset.applyQuaternion(this.parentQuaternionInv).divide(this.parentScale); + object.position.copy(this.offset).add(this.positionStart); + if (this.translationSnap) { + if (space === "local") { + object.position.applyQuaternion(this.tempQuaternion.copy(this.quaternionStart).invert()); + if (axis.search("X") !== -1) object.position.x = Math.round(object.position.x / this.translationSnap) * this.translationSnap; + if (axis.search("Y") !== -1) object.position.y = Math.round(object.position.y / this.translationSnap) * this.translationSnap; + if (axis.search("Z") !== -1) object.position.z = Math.round(object.position.z / this.translationSnap) * this.translationSnap; + object.position.applyQuaternion(this.quaternionStart); + } + if (space === "world") { + if (object.parent) object.position.add(this.tempVector.setFromMatrixPosition(object.parent.matrixWorld)); + if (axis.search("X") !== -1) object.position.x = Math.round(object.position.x / this.translationSnap) * this.translationSnap; + if (axis.search("Y") !== -1) object.position.y = Math.round(object.position.y / this.translationSnap) * this.translationSnap; + if (axis.search("Z") !== -1) object.position.z = Math.round(object.position.z / this.translationSnap) * this.translationSnap; + if (object.parent) object.position.sub(this.tempVector.setFromMatrixPosition(object.parent.matrixWorld)); + } + } + } else if (mode === "scale") { + if (axis.search("XYZ") !== -1) { + let d = this.pointEnd.length() / this.pointStart.length(); + if (this.pointEnd.dot(this.pointStart) < 0) d *= -1; + this.tempVector2.set(d, d, d); + } else { + this.tempVector.copy(this.pointStart); + this.tempVector2.copy(this.pointEnd); + this.tempVector.applyQuaternion(this.worldQuaternionInv); + this.tempVector2.applyQuaternion(this.worldQuaternionInv); + this.tempVector2.divide(this.tempVector); + if (axis.search("X") === -1) this.tempVector2.x = 1; + if (axis.search("Y") === -1) this.tempVector2.y = 1; + if (axis.search("Z") === -1) this.tempVector2.z = 1; + } + object.scale.copy(this.scaleStart).multiply(this.tempVector2); + if (this.scaleSnap && this.object) { + if (axis.search("X") !== -1) this.object.scale.x = Math.round(object.scale.x / this.scaleSnap) * this.scaleSnap || this.scaleSnap; + if (axis.search("Y") !== -1) object.scale.y = Math.round(object.scale.y / this.scaleSnap) * this.scaleSnap || this.scaleSnap; + if (axis.search("Z") !== -1) object.scale.z = Math.round(object.scale.z / this.scaleSnap) * this.scaleSnap || this.scaleSnap; + } + } else if (mode === "rotate") { + this.offset.copy(this.pointEnd).sub(this.pointStart); + const ROTATION_SPEED = 20 / this.worldPosition.distanceTo(this.tempVector.setFromMatrixPosition(this.camera.matrixWorld)); + if (axis === "E") { + this.rotationAxis.copy(this.eye); + this.rotationAngle = this.pointEnd.angleTo(this.pointStart); + this.startNorm.copy(this.pointStart).normalize(); + this.endNorm.copy(this.pointEnd).normalize(); + this.rotationAngle *= this.endNorm.cross(this.startNorm).dot(this.eye) < 0 ? 1 : -1; + } else if (axis === "XYZE") { + this.rotationAxis.copy(this.offset).cross(this.eye).normalize(); + this.rotationAngle = this.offset.dot(this.tempVector.copy(this.rotationAxis).cross(this.eye)) * ROTATION_SPEED; + } else if (axis === "X" || axis === "Y" || axis === "Z") { + this.rotationAxis.copy(this.unit[axis]); + this.tempVector.copy(this.unit[axis]); + if (space === "local") this.tempVector.applyQuaternion(this.worldQuaternion); + this.rotationAngle = this.offset.dot(this.tempVector.cross(this.eye).normalize()) * ROTATION_SPEED; + } + if (this.rotationSnap) this.rotationAngle = Math.round(this.rotationAngle / this.rotationSnap) * this.rotationSnap; + if (space === "local" && axis !== "E" && axis !== "XYZE") { + object.quaternion.copy(this.quaternionStart); + object.quaternion.multiply(this.tempQuaternion.setFromAxisAngle(this.rotationAxis, this.rotationAngle)).normalize(); + } else { + this.rotationAxis.applyQuaternion(this.parentQuaternionInv); + object.quaternion.copy(this.tempQuaternion.setFromAxisAngle(this.rotationAxis, this.rotationAngle)); + object.quaternion.multiply(this.quaternionStart).normalize(); + } + } + this.dispatchEvent(this.changeEvent); + this.dispatchEvent(this.objectChangeEvent); + }); + __publicField$14(this, "pointerUp", (pointer) => { + if (pointer.button !== 0) return; + if (this.dragging && this.axis !== null) { + this.mouseUpEvent.mode = this.mode; + this.dispatchEvent(this.mouseUpEvent); + } + this.dragging = false; + this.axis = null; + }); + __publicField$14(this, "getPointer", (event) => { + var _a; + if (this.domElement && ((_a = this.domElement.ownerDocument) == null ? void 0 : _a.pointerLockElement)) return { + x: 0, + y: 0, + button: event.button + }; + else { + const pointer = event.changedTouches ? event.changedTouches[0] : event; + const rect = this.domElement.getBoundingClientRect(); + return { + x: (pointer.clientX - rect.left) / rect.width * 2 - 1, + y: -(pointer.clientY - rect.top) / rect.height * 2 + 1, + button: event.button + }; + } + }); + __publicField$14(this, "onPointerHover", (event) => { + if (!this.enabled) return; + switch (event.pointerType) { + case "mouse": + case "pen": + this.pointerHover(this.getPointer(event)); + break; + } + }); + __publicField$14(this, "onPointerDown", (event) => { + if (!this.enabled || !this.domElement) return; + this.domElement.style.touchAction = "none"; + this.domElement.ownerDocument.addEventListener("pointermove", this.onPointerMove); + this.pointerHover(this.getPointer(event)); + this.pointerDown(this.getPointer(event)); + }); + __publicField$14(this, "onPointerMove", (event) => { + if (!this.enabled) return; + this.pointerMove(this.getPointer(event)); + }); + __publicField$14(this, "onPointerUp", (event) => { + if (!this.enabled || !this.domElement) return; + this.domElement.style.touchAction = ""; + this.domElement.ownerDocument.removeEventListener("pointermove", this.onPointerMove); + this.pointerUp(this.getPointer(event)); + }); + __publicField$14(this, "getMode", () => this.mode); + __publicField$14(this, "setMode", (mode) => { + this.mode = mode; + }); + __publicField$14(this, "setTranslationSnap", (translationSnap) => { + this.translationSnap = translationSnap; + }); + __publicField$14(this, "setRotationSnap", (rotationSnap) => { + this.rotationSnap = rotationSnap; + }); + __publicField$14(this, "setScaleSnap", (scaleSnap) => { + this.scaleSnap = scaleSnap; + }); + __publicField$14(this, "setSize", (size) => { + this.size = size; + }); + __publicField$14(this, "setSpace", (space) => { + this.space = space; + }); + __publicField$14(this, "update", () => { + console.warn("THREE.TransformControls: update function has no more functionality and therefore has been deprecated."); + }); + __publicField$14(this, "connect", (domElement) => { + if (domElement === document) console.error("THREE.OrbitControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead."); + this.domElement = domElement; + this.domElement.addEventListener("pointerdown", this.onPointerDown); + this.domElement.addEventListener("pointermove", this.onPointerHover); + this.domElement.ownerDocument.addEventListener("pointerup", this.onPointerUp); + }); + __publicField$14(this, "dispose", () => { + var _a, _b, _c, _d, _e, _f; + (_a = this.domElement) == null || _a.removeEventListener("pointerdown", this.onPointerDown); + (_b = this.domElement) == null || _b.removeEventListener("pointermove", this.onPointerHover); + (_d = (_c = this.domElement) == null ? void 0 : _c.ownerDocument) == null || _d.removeEventListener("pointermove", this.onPointerMove); + (_f = (_e = this.domElement) == null ? void 0 : _e.ownerDocument) == null || _f.removeEventListener("pointerup", this.onPointerUp); + this.traverse((child) => { + const mesh = child; + if (mesh.geometry) mesh.geometry.dispose(); + if (mesh.material) mesh.material.dispose(); + }); + }); + this.domElement = domElement; + this.camera = camera; + this.gizmo = new TransformControlsGizmo(); + this.add(this.gizmo); + this.plane = new TransformControlsPlane(); + this.add(this.plane); + const defineProperty = (propName, defaultValue) => { + let propValue = defaultValue; + Object.defineProperty(this, propName, { + get: function() { + return propValue !== void 0 ? propValue : defaultValue; + }, + set: function(value) { + if (propValue !== value) { + propValue = value; + this.plane[propName] = value; + this.gizmo[propName] = value; + this.dispatchEvent({ + type: propName + "-changed", + value + }); + this.dispatchEvent(this.changeEvent); + } + } + }); + this[propName] = defaultValue; + this.plane[propName] = defaultValue; + this.gizmo[propName] = defaultValue; + }; + defineProperty("camera", this.camera); + defineProperty("object", this.object); + defineProperty("enabled", this.enabled); + defineProperty("axis", this.axis); + defineProperty("mode", this.mode); + defineProperty("translationSnap", this.translationSnap); + defineProperty("rotationSnap", this.rotationSnap); + defineProperty("scaleSnap", this.scaleSnap); + defineProperty("space", this.space); + defineProperty("size", this.size); + defineProperty("dragging", this.dragging); + defineProperty("showX", this.showX); + defineProperty("showY", this.showY); + defineProperty("showZ", this.showZ); + defineProperty("worldPosition", this.worldPosition); + defineProperty("worldPositionStart", this.worldPositionStart); + defineProperty("worldQuaternion", this.worldQuaternion); + defineProperty("worldQuaternionStart", this.worldQuaternionStart); + defineProperty("cameraPosition", this.cameraPosition); + defineProperty("cameraQuaternion", this.cameraQuaternion); + defineProperty("pointStart", this.pointStart); + defineProperty("pointEnd", this.pointEnd); + defineProperty("rotationAxis", this.rotationAxis); + defineProperty("rotationAngle", this.rotationAngle); + defineProperty("eye", this.eye); + if (domElement !== void 0) this.connect(domElement); + } +}; +var TransformControlsGizmo = class extends Object3D { + constructor() { + super(); + __publicField$14(this, "isTransformControlsGizmo", true); + __publicField$14(this, "type", "TransformControlsGizmo"); + __publicField$14(this, "tempVector", new Vector3(0, 0, 0)); + __publicField$14(this, "tempEuler", new Euler()); + __publicField$14(this, "alignVector", new Vector3(0, 1, 0)); + __publicField$14(this, "zeroVector", new Vector3(0, 0, 0)); + __publicField$14(this, "lookAtMatrix", new Matrix4()); + __publicField$14(this, "tempQuaternion", new Quaternion()); + __publicField$14(this, "tempQuaternion2", new Quaternion()); + __publicField$14(this, "identityQuaternion", new Quaternion()); + __publicField$14(this, "unitX", new Vector3(1, 0, 0)); + __publicField$14(this, "unitY", new Vector3(0, 1, 0)); + __publicField$14(this, "unitZ", new Vector3(0, 0, 1)); + __publicField$14(this, "gizmo"); + __publicField$14(this, "picker"); + __publicField$14(this, "helper"); + __publicField$14(this, "rotationAxis", new Vector3()); + __publicField$14(this, "cameraPosition", new Vector3()); + __publicField$14(this, "worldPositionStart", new Vector3()); + __publicField$14(this, "worldQuaternionStart", new Quaternion()); + __publicField$14(this, "worldPosition", new Vector3()); + __publicField$14(this, "worldQuaternion", new Quaternion()); + __publicField$14(this, "eye", new Vector3()); + __publicField$14(this, "camera", null); + __publicField$14(this, "enabled", true); + __publicField$14(this, "axis", null); + __publicField$14(this, "mode", "translate"); + __publicField$14(this, "space", "world"); + __publicField$14(this, "size", 1); + __publicField$14(this, "dragging", false); + __publicField$14(this, "showX", true); + __publicField$14(this, "showY", true); + __publicField$14(this, "showZ", true); + __publicField$14(this, "updateMatrixWorld", () => { + let space = this.space; + if (this.mode === "scale") space = "local"; + const quaternion = space === "local" ? this.worldQuaternion : this.identityQuaternion; + this.gizmo["translate"].visible = this.mode === "translate"; + this.gizmo["rotate"].visible = this.mode === "rotate"; + this.gizmo["scale"].visible = this.mode === "scale"; + this.helper["translate"].visible = this.mode === "translate"; + this.helper["rotate"].visible = this.mode === "rotate"; + this.helper["scale"].visible = this.mode === "scale"; + let handles = []; + handles = handles.concat(this.picker[this.mode].children); + handles = handles.concat(this.gizmo[this.mode].children); + handles = handles.concat(this.helper[this.mode].children); + for (let i = 0; i < handles.length; i++) { + const handle = handles[i]; + handle.visible = true; + handle.rotation.set(0, 0, 0); + handle.position.copy(this.worldPosition); + let factor; + if (this.camera.isOrthographicCamera) factor = (this.camera.top - this.camera.bottom) / this.camera.zoom; + else factor = this.worldPosition.distanceTo(this.cameraPosition) * Math.min(1.9 * Math.tan(Math.PI * this.camera.fov / 360) / this.camera.zoom, 7); + handle.scale.set(1, 1, 1).multiplyScalar(factor * this.size / 7); + if (handle.tag === "helper") { + handle.visible = false; + if (handle.name === "AXIS") { + handle.position.copy(this.worldPositionStart); + handle.visible = !!this.axis; + if (this.axis === "X") { + this.tempQuaternion.setFromEuler(this.tempEuler.set(0, 0, 0)); + handle.quaternion.copy(quaternion).multiply(this.tempQuaternion); + if (Math.abs(this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye)) > .9) handle.visible = false; + } + if (this.axis === "Y") { + this.tempQuaternion.setFromEuler(this.tempEuler.set(0, 0, Math.PI / 2)); + handle.quaternion.copy(quaternion).multiply(this.tempQuaternion); + if (Math.abs(this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye)) > .9) handle.visible = false; + } + if (this.axis === "Z") { + this.tempQuaternion.setFromEuler(this.tempEuler.set(0, Math.PI / 2, 0)); + handle.quaternion.copy(quaternion).multiply(this.tempQuaternion); + if (Math.abs(this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye)) > .9) handle.visible = false; + } + if (this.axis === "XYZE") { + this.tempQuaternion.setFromEuler(this.tempEuler.set(0, Math.PI / 2, 0)); + this.alignVector.copy(this.rotationAxis); + handle.quaternion.setFromRotationMatrix(this.lookAtMatrix.lookAt(this.zeroVector, this.alignVector, this.unitY)); + handle.quaternion.multiply(this.tempQuaternion); + handle.visible = this.dragging; + } + if (this.axis === "E") handle.visible = false; + } else if (handle.name === "START") { + handle.position.copy(this.worldPositionStart); + handle.visible = this.dragging; + } else if (handle.name === "END") { + handle.position.copy(this.worldPosition); + handle.visible = this.dragging; + } else if (handle.name === "DELTA") { + handle.position.copy(this.worldPositionStart); + handle.quaternion.copy(this.worldQuaternionStart); + this.tempVector.set(1e-10, 1e-10, 1e-10).add(this.worldPositionStart).sub(this.worldPosition).multiplyScalar(-1); + this.tempVector.applyQuaternion(this.worldQuaternionStart.clone().invert()); + handle.scale.copy(this.tempVector); + handle.visible = this.dragging; + } else { + handle.quaternion.copy(quaternion); + if (this.dragging) handle.position.copy(this.worldPositionStart); + else handle.position.copy(this.worldPosition); + if (this.axis) handle.visible = this.axis.search(handle.name) !== -1; + } + continue; + } + handle.quaternion.copy(quaternion); + if (this.mode === "translate" || this.mode === "scale") { + const AXIS_HIDE_TRESHOLD = .99; + const PLANE_HIDE_TRESHOLD = .2; + const AXIS_FLIP_TRESHOLD = 0; + if (handle.name === "X" || handle.name === "XYZX") { + if (Math.abs(this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_TRESHOLD) { + handle.scale.set(1e-10, 1e-10, 1e-10); + handle.visible = false; + } + } + if (handle.name === "Y" || handle.name === "XYZY") { + if (Math.abs(this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_TRESHOLD) { + handle.scale.set(1e-10, 1e-10, 1e-10); + handle.visible = false; + } + } + if (handle.name === "Z" || handle.name === "XYZZ") { + if (Math.abs(this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_TRESHOLD) { + handle.scale.set(1e-10, 1e-10, 1e-10); + handle.visible = false; + } + } + if (handle.name === "XY") { + if (Math.abs(this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_TRESHOLD) { + handle.scale.set(1e-10, 1e-10, 1e-10); + handle.visible = false; + } + } + if (handle.name === "YZ") { + if (Math.abs(this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_TRESHOLD) { + handle.scale.set(1e-10, 1e-10, 1e-10); + handle.visible = false; + } + } + if (handle.name === "XZ") { + if (Math.abs(this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_TRESHOLD) { + handle.scale.set(1e-10, 1e-10, 1e-10); + handle.visible = false; + } + } + if (handle.name.search("X") !== -1) { + if (this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye) < AXIS_FLIP_TRESHOLD) if (handle.tag === "fwd") handle.visible = false; + else handle.scale.x *= -1; + else if (handle.tag === "bwd") handle.visible = false; + } + if (handle.name.search("Y") !== -1) { + if (this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye) < AXIS_FLIP_TRESHOLD) if (handle.tag === "fwd") handle.visible = false; + else handle.scale.y *= -1; + else if (handle.tag === "bwd") handle.visible = false; + } + if (handle.name.search("Z") !== -1) { + if (this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye) < AXIS_FLIP_TRESHOLD) if (handle.tag === "fwd") handle.visible = false; + else handle.scale.z *= -1; + else if (handle.tag === "bwd") handle.visible = false; + } + } else if (this.mode === "rotate") { + this.tempQuaternion2.copy(quaternion); + this.alignVector.copy(this.eye).applyQuaternion(this.tempQuaternion.copy(quaternion).invert()); + if (handle.name.search("E") !== -1) handle.quaternion.setFromRotationMatrix(this.lookAtMatrix.lookAt(this.eye, this.zeroVector, this.unitY)); + if (handle.name === "X") { + this.tempQuaternion.setFromAxisAngle(this.unitX, Math.atan2(-this.alignVector.y, this.alignVector.z)); + this.tempQuaternion.multiplyQuaternions(this.tempQuaternion2, this.tempQuaternion); + handle.quaternion.copy(this.tempQuaternion); + } + if (handle.name === "Y") { + this.tempQuaternion.setFromAxisAngle(this.unitY, Math.atan2(this.alignVector.x, this.alignVector.z)); + this.tempQuaternion.multiplyQuaternions(this.tempQuaternion2, this.tempQuaternion); + handle.quaternion.copy(this.tempQuaternion); + } + if (handle.name === "Z") { + this.tempQuaternion.setFromAxisAngle(this.unitZ, Math.atan2(this.alignVector.y, this.alignVector.x)); + this.tempQuaternion.multiplyQuaternions(this.tempQuaternion2, this.tempQuaternion); + handle.quaternion.copy(this.tempQuaternion); + } + } + handle.visible = handle.visible && (handle.name.indexOf("X") === -1 || this.showX); + handle.visible = handle.visible && (handle.name.indexOf("Y") === -1 || this.showY); + handle.visible = handle.visible && (handle.name.indexOf("Z") === -1 || this.showZ); + handle.visible = handle.visible && (handle.name.indexOf("E") === -1 || this.showX && this.showY && this.showZ); + handle.material.tempOpacity = handle.material.tempOpacity || handle.material.opacity; + handle.material.tempColor = handle.material.tempColor || handle.material.color.clone(); + handle.material.color.copy(handle.material.tempColor); + handle.material.opacity = handle.material.tempOpacity; + if (!this.enabled) { + handle.material.opacity *= .5; + handle.material.color.lerp(new Color(1, 1, 1), .5); + } else if (this.axis) if (handle.name === this.axis) { + handle.material.opacity = 1; + handle.material.color.lerp(new Color(1, 1, 1), .5); + } else if (this.axis.split("").some(function(a) { + return handle.name === a; + })) { + handle.material.opacity = 1; + handle.material.color.lerp(new Color(1, 1, 1), .5); + } else { + handle.material.opacity *= .25; + handle.material.color.lerp(new Color(1, 1, 1), .5); + } + } + super.updateMatrixWorld(); + }); + const gizmoMaterial = new MeshBasicMaterial({ + depthTest: false, + depthWrite: false, + transparent: true, + side: 2, + fog: false, + toneMapped: false + }); + const gizmoLineMaterial = new LineBasicMaterial({ + depthTest: false, + depthWrite: false, + transparent: true, + linewidth: 1, + fog: false, + toneMapped: false + }); + const matInvisible = gizmoMaterial.clone(); + matInvisible.opacity = .15; + const matHelper = gizmoMaterial.clone(); + matHelper.opacity = .33; + const matRed = gizmoMaterial.clone(); + matRed.color.set(16711680); + const matGreen = gizmoMaterial.clone(); + matGreen.color.set(65280); + const matBlue = gizmoMaterial.clone(); + matBlue.color.set(255); + const matWhiteTransparent = gizmoMaterial.clone(); + matWhiteTransparent.opacity = .25; + const matYellowTransparent = matWhiteTransparent.clone(); + matYellowTransparent.color.set(16776960); + const matCyanTransparent = matWhiteTransparent.clone(); + matCyanTransparent.color.set(65535); + const matMagentaTransparent = matWhiteTransparent.clone(); + matMagentaTransparent.color.set(16711935); + gizmoMaterial.clone().color.set(16776960); + const matLineRed = gizmoLineMaterial.clone(); + matLineRed.color.set(16711680); + const matLineGreen = gizmoLineMaterial.clone(); + matLineGreen.color.set(65280); + const matLineBlue = gizmoLineMaterial.clone(); + matLineBlue.color.set(255); + const matLineCyan = gizmoLineMaterial.clone(); + matLineCyan.color.set(65535); + const matLineMagenta = gizmoLineMaterial.clone(); + matLineMagenta.color.set(16711935); + const matLineYellow = gizmoLineMaterial.clone(); + matLineYellow.color.set(16776960); + const matLineGray = gizmoLineMaterial.clone(); + matLineGray.color.set(7895160); + const matLineYellowTransparent = matLineYellow.clone(); + matLineYellowTransparent.opacity = .25; + const arrowGeometry = new CylinderGeometry(0, .05, .2, 12, 1, false); + const scaleHandleGeometry = new BoxGeometry(.125, .125, .125); + const lineGeometry = new BufferGeometry(); + lineGeometry.setAttribute("position", new Float32BufferAttribute([ + 0, + 0, + 0, + 1, + 0, + 0 + ], 3)); + const CircleGeometry = (radius, arc) => { + const geometry = new BufferGeometry(); + const vertices = []; + for (let i = 0; i <= 64 * arc; ++i) vertices.push(0, Math.cos(i / 32 * Math.PI) * radius, Math.sin(i / 32 * Math.PI) * radius); + geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + return geometry; + }; + const TranslateHelperGeometry = () => { + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute([ + 0, + 0, + 0, + 1, + 1, + 1 + ], 3)); + return geometry; + }; + const gizmoTranslate = { + X: [ + [ + new Mesh(arrowGeometry, matRed), + [ + 1, + 0, + 0 + ], + [ + 0, + 0, + -Math.PI / 2 + ], + null, + "fwd" + ], + [ + new Mesh(arrowGeometry, matRed), + [ + 1, + 0, + 0 + ], + [ + 0, + 0, + Math.PI / 2 + ], + null, + "bwd" + ], + [new Line$1(lineGeometry, matLineRed)] + ], + Y: [ + [ + new Mesh(arrowGeometry, matGreen), + [ + 0, + 1, + 0 + ], + null, + null, + "fwd" + ], + [ + new Mesh(arrowGeometry, matGreen), + [ + 0, + 1, + 0 + ], + [ + Math.PI, + 0, + 0 + ], + null, + "bwd" + ], + [ + new Line$1(lineGeometry, matLineGreen), + null, + [ + 0, + 0, + Math.PI / 2 + ] + ] + ], + Z: [ + [ + new Mesh(arrowGeometry, matBlue), + [ + 0, + 0, + 1 + ], + [ + Math.PI / 2, + 0, + 0 + ], + null, + "fwd" + ], + [ + new Mesh(arrowGeometry, matBlue), + [ + 0, + 0, + 1 + ], + [ + -Math.PI / 2, + 0, + 0 + ], + null, + "bwd" + ], + [ + new Line$1(lineGeometry, matLineBlue), + null, + [ + 0, + -Math.PI / 2, + 0 + ] + ] + ], + XYZ: [[ + new Mesh(new OctahedronGeometry(.1, 0), matWhiteTransparent.clone()), + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + 0 + ] + ]], + XY: [ + [new Mesh(new PlaneGeometry(.295, .295), matYellowTransparent.clone()), [ + .15, + .15, + 0 + ]], + [ + new Line$1(lineGeometry, matLineYellow), + [ + .18, + .3, + 0 + ], + null, + [ + .125, + 1, + 1 + ] + ], + [ + new Line$1(lineGeometry, matLineYellow), + [ + .3, + .18, + 0 + ], + [ + 0, + 0, + Math.PI / 2 + ], + [ + .125, + 1, + 1 + ] + ] + ], + YZ: [ + [ + new Mesh(new PlaneGeometry(.295, .295), matCyanTransparent.clone()), + [ + 0, + .15, + .15 + ], + [ + 0, + Math.PI / 2, + 0 + ] + ], + [ + new Line$1(lineGeometry, matLineCyan), + [ + 0, + .18, + .3 + ], + [ + 0, + 0, + Math.PI / 2 + ], + [ + .125, + 1, + 1 + ] + ], + [ + new Line$1(lineGeometry, matLineCyan), + [ + 0, + .3, + .18 + ], + [ + 0, + -Math.PI / 2, + 0 + ], + [ + .125, + 1, + 1 + ] + ] + ], + XZ: [ + [ + new Mesh(new PlaneGeometry(.295, .295), matMagentaTransparent.clone()), + [ + .15, + 0, + .15 + ], + [ + -Math.PI / 2, + 0, + 0 + ] + ], + [ + new Line$1(lineGeometry, matLineMagenta), + [ + .18, + 0, + .3 + ], + null, + [ + .125, + 1, + 1 + ] + ], + [ + new Line$1(lineGeometry, matLineMagenta), + [ + .3, + 0, + .18 + ], + [ + 0, + -Math.PI / 2, + 0 + ], + [ + .125, + 1, + 1 + ] + ] + ] + }; + const pickerTranslate = { + X: [[ + new Mesh(new CylinderGeometry(.2, 0, 1, 4, 1, false), matInvisible), + [ + .6, + 0, + 0 + ], + [ + 0, + 0, + -Math.PI / 2 + ] + ]], + Y: [[new Mesh(new CylinderGeometry(.2, 0, 1, 4, 1, false), matInvisible), [ + 0, + .6, + 0 + ]]], + Z: [[ + new Mesh(new CylinderGeometry(.2, 0, 1, 4, 1, false), matInvisible), + [ + 0, + 0, + .6 + ], + [ + Math.PI / 2, + 0, + 0 + ] + ]], + XYZ: [[new Mesh(new OctahedronGeometry(.2, 0), matInvisible)]], + XY: [[new Mesh(new PlaneGeometry(.4, .4), matInvisible), [ + .2, + .2, + 0 + ]]], + YZ: [[ + new Mesh(new PlaneGeometry(.4, .4), matInvisible), + [ + 0, + .2, + .2 + ], + [ + 0, + Math.PI / 2, + 0 + ] + ]], + XZ: [[ + new Mesh(new PlaneGeometry(.4, .4), matInvisible), + [ + .2, + 0, + .2 + ], + [ + -Math.PI / 2, + 0, + 0 + ] + ]] + }; + const helperTranslate = { + START: [[ + new Mesh(new OctahedronGeometry(.01, 2), matHelper), + null, + null, + null, + "helper" + ]], + END: [[ + new Mesh(new OctahedronGeometry(.01, 2), matHelper), + null, + null, + null, + "helper" + ]], + DELTA: [[ + new Line$1(TranslateHelperGeometry(), matHelper), + null, + null, + null, + "helper" + ]], + X: [[ + new Line$1(lineGeometry, matHelper.clone()), + [ + -1e3, + 0, + 0 + ], + null, + [ + 1e6, + 1, + 1 + ], + "helper" + ]], + Y: [[ + new Line$1(lineGeometry, matHelper.clone()), + [ + 0, + -1e3, + 0 + ], + [ + 0, + 0, + Math.PI / 2 + ], + [ + 1e6, + 1, + 1 + ], + "helper" + ]], + Z: [[ + new Line$1(lineGeometry, matHelper.clone()), + [ + 0, + 0, + -1e3 + ], + [ + 0, + -Math.PI / 2, + 0 + ], + [ + 1e6, + 1, + 1 + ], + "helper" + ]] + }; + const gizmoRotate = { + X: [[new Line$1(CircleGeometry(1, .5), matLineRed)], [ + new Mesh(new OctahedronGeometry(.04, 0), matRed), + [ + 0, + 0, + .99 + ], + null, + [ + 1, + 3, + 1 + ] + ]], + Y: [[ + new Line$1(CircleGeometry(1, .5), matLineGreen), + null, + [ + 0, + 0, + -Math.PI / 2 + ] + ], [ + new Mesh(new OctahedronGeometry(.04, 0), matGreen), + [ + 0, + 0, + .99 + ], + null, + [ + 3, + 1, + 1 + ] + ]], + Z: [[ + new Line$1(CircleGeometry(1, .5), matLineBlue), + null, + [ + 0, + Math.PI / 2, + 0 + ] + ], [ + new Mesh(new OctahedronGeometry(.04, 0), matBlue), + [ + .99, + 0, + 0 + ], + null, + [ + 1, + 3, + 1 + ] + ]], + E: [ + [ + new Line$1(CircleGeometry(1.25, 1), matLineYellowTransparent), + null, + [ + 0, + Math.PI / 2, + 0 + ] + ], + [ + new Mesh(new CylinderGeometry(.03, 0, .15, 4, 1, false), matLineYellowTransparent), + [ + 1.17, + 0, + 0 + ], + [ + 0, + 0, + -Math.PI / 2 + ], + [ + 1, + 1, + .001 + ] + ], + [ + new Mesh(new CylinderGeometry(.03, 0, .15, 4, 1, false), matLineYellowTransparent), + [ + -1.17, + 0, + 0 + ], + [ + 0, + 0, + Math.PI / 2 + ], + [ + 1, + 1, + .001 + ] + ], + [ + new Mesh(new CylinderGeometry(.03, 0, .15, 4, 1, false), matLineYellowTransparent), + [ + 0, + -1.17, + 0 + ], + [ + Math.PI, + 0, + 0 + ], + [ + 1, + 1, + .001 + ] + ], + [ + new Mesh(new CylinderGeometry(.03, 0, .15, 4, 1, false), matLineYellowTransparent), + [ + 0, + 1.17, + 0 + ], + [ + 0, + 0, + 0 + ], + [ + 1, + 1, + .001 + ] + ] + ], + XYZE: [[ + new Line$1(CircleGeometry(1, 1), matLineGray), + null, + [ + 0, + Math.PI / 2, + 0 + ] + ]] + }; + const helperRotate = { AXIS: [[ + new Line$1(lineGeometry, matHelper.clone()), + [ + -1e3, + 0, + 0 + ], + null, + [ + 1e6, + 1, + 1 + ], + "helper" + ]] }; + const pickerRotate = { + X: [[ + new Mesh(new TorusGeometry(1, .1, 4, 24), matInvisible), + [ + 0, + 0, + 0 + ], + [ + 0, + -Math.PI / 2, + -Math.PI / 2 + ] + ]], + Y: [[ + new Mesh(new TorusGeometry(1, .1, 4, 24), matInvisible), + [ + 0, + 0, + 0 + ], + [ + Math.PI / 2, + 0, + 0 + ] + ]], + Z: [[ + new Mesh(new TorusGeometry(1, .1, 4, 24), matInvisible), + [ + 0, + 0, + 0 + ], + [ + 0, + 0, + -Math.PI / 2 + ] + ]], + E: [[new Mesh(new TorusGeometry(1.25, .1, 2, 24), matInvisible)]], + XYZE: [[new Mesh(new SphereGeometry(.7, 10, 8), matInvisible)]] + }; + const gizmoScale = { + X: [[ + new Mesh(scaleHandleGeometry, matRed), + [ + .8, + 0, + 0 + ], + [ + 0, + 0, + -Math.PI / 2 + ] + ], [ + new Line$1(lineGeometry, matLineRed), + null, + null, + [ + .8, + 1, + 1 + ] + ]], + Y: [[new Mesh(scaleHandleGeometry, matGreen), [ + 0, + .8, + 0 + ]], [ + new Line$1(lineGeometry, matLineGreen), + null, + [ + 0, + 0, + Math.PI / 2 + ], + [ + .8, + 1, + 1 + ] + ]], + Z: [[ + new Mesh(scaleHandleGeometry, matBlue), + [ + 0, + 0, + .8 + ], + [ + Math.PI / 2, + 0, + 0 + ] + ], [ + new Line$1(lineGeometry, matLineBlue), + null, + [ + 0, + -Math.PI / 2, + 0 + ], + [ + .8, + 1, + 1 + ] + ]], + XY: [ + [ + new Mesh(scaleHandleGeometry, matYellowTransparent), + [ + .85, + .85, + 0 + ], + null, + [ + 2, + 2, + .2 + ] + ], + [ + new Line$1(lineGeometry, matLineYellow), + [ + .855, + .98, + 0 + ], + null, + [ + .125, + 1, + 1 + ] + ], + [ + new Line$1(lineGeometry, matLineYellow), + [ + .98, + .855, + 0 + ], + [ + 0, + 0, + Math.PI / 2 + ], + [ + .125, + 1, + 1 + ] + ] + ], + YZ: [ + [ + new Mesh(scaleHandleGeometry, matCyanTransparent), + [ + 0, + .85, + .85 + ], + null, + [ + .2, + 2, + 2 + ] + ], + [ + new Line$1(lineGeometry, matLineCyan), + [ + 0, + .855, + .98 + ], + [ + 0, + 0, + Math.PI / 2 + ], + [ + .125, + 1, + 1 + ] + ], + [ + new Line$1(lineGeometry, matLineCyan), + [ + 0, + .98, + .855 + ], + [ + 0, + -Math.PI / 2, + 0 + ], + [ + .125, + 1, + 1 + ] + ] + ], + XZ: [ + [ + new Mesh(scaleHandleGeometry, matMagentaTransparent), + [ + .85, + 0, + .85 + ], + null, + [ + 2, + .2, + 2 + ] + ], + [ + new Line$1(lineGeometry, matLineMagenta), + [ + .855, + 0, + .98 + ], + null, + [ + .125, + 1, + 1 + ] + ], + [ + new Line$1(lineGeometry, matLineMagenta), + [ + .98, + 0, + .855 + ], + [ + 0, + -Math.PI / 2, + 0 + ], + [ + .125, + 1, + 1 + ] + ] + ], + XYZX: [[new Mesh(new BoxGeometry(.125, .125, .125), matWhiteTransparent.clone()), [ + 1.1, + 0, + 0 + ]]], + XYZY: [[new Mesh(new BoxGeometry(.125, .125, .125), matWhiteTransparent.clone()), [ + 0, + 1.1, + 0 + ]]], + XYZZ: [[new Mesh(new BoxGeometry(.125, .125, .125), matWhiteTransparent.clone()), [ + 0, + 0, + 1.1 + ]]] + }; + const pickerScale = { + X: [[ + new Mesh(new CylinderGeometry(.2, 0, .8, 4, 1, false), matInvisible), + [ + .5, + 0, + 0 + ], + [ + 0, + 0, + -Math.PI / 2 + ] + ]], + Y: [[new Mesh(new CylinderGeometry(.2, 0, .8, 4, 1, false), matInvisible), [ + 0, + .5, + 0 + ]]], + Z: [[ + new Mesh(new CylinderGeometry(.2, 0, .8, 4, 1, false), matInvisible), + [ + 0, + 0, + .5 + ], + [ + Math.PI / 2, + 0, + 0 + ] + ]], + XY: [[ + new Mesh(scaleHandleGeometry, matInvisible), + [ + .85, + .85, + 0 + ], + null, + [ + 3, + 3, + .2 + ] + ]], + YZ: [[ + new Mesh(scaleHandleGeometry, matInvisible), + [ + 0, + .85, + .85 + ], + null, + [ + .2, + 3, + 3 + ] + ]], + XZ: [[ + new Mesh(scaleHandleGeometry, matInvisible), + [ + .85, + 0, + .85 + ], + null, + [ + 3, + .2, + 3 + ] + ]], + XYZX: [[new Mesh(new BoxGeometry(.2, .2, .2), matInvisible), [ + 1.1, + 0, + 0 + ]]], + XYZY: [[new Mesh(new BoxGeometry(.2, .2, .2), matInvisible), [ + 0, + 1.1, + 0 + ]]], + XYZZ: [[new Mesh(new BoxGeometry(.2, .2, .2), matInvisible), [ + 0, + 0, + 1.1 + ]]] + }; + const helperScale = { + X: [[ + new Line$1(lineGeometry, matHelper.clone()), + [ + -1e3, + 0, + 0 + ], + null, + [ + 1e6, + 1, + 1 + ], + "helper" + ]], + Y: [[ + new Line$1(lineGeometry, matHelper.clone()), + [ + 0, + -1e3, + 0 + ], + [ + 0, + 0, + Math.PI / 2 + ], + [ + 1e6, + 1, + 1 + ], + "helper" + ]], + Z: [[ + new Line$1(lineGeometry, matHelper.clone()), + [ + 0, + 0, + -1e3 + ], + [ + 0, + -Math.PI / 2, + 0 + ], + [ + 1e6, + 1, + 1 + ], + "helper" + ]] + }; + const setupGizmo = (gizmoMap) => { + const gizmo = new Object3D(); + for (let name in gizmoMap) for (let i = gizmoMap[name].length; i--;) { + const object = gizmoMap[name][i][0].clone(); + const position = gizmoMap[name][i][1]; + const rotation = gizmoMap[name][i][2]; + const scale = gizmoMap[name][i][3]; + const tag = gizmoMap[name][i][4]; + object.name = name; + object.tag = tag; + if (position) object.position.set(position[0], position[1], position[2]); + if (rotation) object.rotation.set(rotation[0], rotation[1], rotation[2]); + if (scale) object.scale.set(scale[0], scale[1], scale[2]); + object.updateMatrix(); + const tempGeometry = object.geometry.clone(); + tempGeometry.applyMatrix4(object.matrix); + object.geometry = tempGeometry; + object.renderOrder = Infinity; + object.position.set(0, 0, 0); + object.rotation.set(0, 0, 0); + object.scale.set(1, 1, 1); + gizmo.add(object); + } + return gizmo; + }; + this.gizmo = {}; + this.picker = {}; + this.helper = {}; + this.add(this.gizmo["translate"] = setupGizmo(gizmoTranslate)); + this.add(this.gizmo["rotate"] = setupGizmo(gizmoRotate)); + this.add(this.gizmo["scale"] = setupGizmo(gizmoScale)); + this.add(this.picker["translate"] = setupGizmo(pickerTranslate)); + this.add(this.picker["rotate"] = setupGizmo(pickerRotate)); + this.add(this.picker["scale"] = setupGizmo(pickerScale)); + this.add(this.helper["translate"] = setupGizmo(helperTranslate)); + this.add(this.helper["rotate"] = setupGizmo(helperRotate)); + this.add(this.helper["scale"] = setupGizmo(helperScale)); + this.picker["translate"].visible = false; + this.picker["rotate"].visible = false; + this.picker["scale"].visible = false; + } +}; +var TransformControlsPlane = class extends Mesh { + constructor() { + super(new PlaneGeometry(1e5, 1e5, 2, 2), new MeshBasicMaterial({ + visible: false, + wireframe: true, + side: 2, + transparent: true, + opacity: .1, + toneMapped: false + })); + __publicField$14(this, "isTransformControlsPlane", true); + __publicField$14(this, "type", "TransformControlsPlane"); + __publicField$14(this, "unitX", new Vector3(1, 0, 0)); + __publicField$14(this, "unitY", new Vector3(0, 1, 0)); + __publicField$14(this, "unitZ", new Vector3(0, 0, 1)); + __publicField$14(this, "tempVector", new Vector3()); + __publicField$14(this, "dirVector", new Vector3()); + __publicField$14(this, "alignVector", new Vector3()); + __publicField$14(this, "tempMatrix", new Matrix4()); + __publicField$14(this, "identityQuaternion", new Quaternion()); + __publicField$14(this, "cameraQuaternion", new Quaternion()); + __publicField$14(this, "worldPosition", new Vector3()); + __publicField$14(this, "worldQuaternion", new Quaternion()); + __publicField$14(this, "eye", new Vector3()); + __publicField$14(this, "axis", null); + __publicField$14(this, "mode", "translate"); + __publicField$14(this, "space", "world"); + __publicField$14(this, "updateMatrixWorld", () => { + let space = this.space; + this.position.copy(this.worldPosition); + if (this.mode === "scale") space = "local"; + this.unitX.set(1, 0, 0).applyQuaternion(space === "local" ? this.worldQuaternion : this.identityQuaternion); + this.unitY.set(0, 1, 0).applyQuaternion(space === "local" ? this.worldQuaternion : this.identityQuaternion); + this.unitZ.set(0, 0, 1).applyQuaternion(space === "local" ? this.worldQuaternion : this.identityQuaternion); + this.alignVector.copy(this.unitY); + switch (this.mode) { + case "translate": + case "scale": + switch (this.axis) { + case "X": + this.alignVector.copy(this.eye).cross(this.unitX); + this.dirVector.copy(this.unitX).cross(this.alignVector); + break; + case "Y": + this.alignVector.copy(this.eye).cross(this.unitY); + this.dirVector.copy(this.unitY).cross(this.alignVector); + break; + case "Z": + this.alignVector.copy(this.eye).cross(this.unitZ); + this.dirVector.copy(this.unitZ).cross(this.alignVector); + break; + case "XY": + this.dirVector.copy(this.unitZ); + break; + case "YZ": + this.dirVector.copy(this.unitX); + break; + case "XZ": + this.alignVector.copy(this.unitZ); + this.dirVector.copy(this.unitY); + break; + case "XYZ": + case "E": + this.dirVector.set(0, 0, 0); + break; + } + break; + default: this.dirVector.set(0, 0, 0); + } + if (this.dirVector.length() === 0) this.quaternion.copy(this.cameraQuaternion); + else { + this.tempMatrix.lookAt(this.tempVector.set(0, 0, 0), this.dirVector, this.alignVector); + this.quaternion.setFromRotationMatrix(this.tempMatrix); + } + super.updateMatrixWorld(); + }); + } +}; +//#endregion +//#region node_modules/three-stdlib/controls/PointerLockControls.js +var __defProp$13 = Object.defineProperty; +var __defNormalProp$13 = (obj, key, value) => key in obj ? __defProp$13(obj, key, { + enumerable: true, + configurable: true, + writable: true, + value +}) : obj[key] = value; +var __publicField$13 = (obj, key, value) => { + __defNormalProp$13(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var _euler = /* @__PURE__ */ new Euler(0, 0, 0, "YXZ"); +var _vector$1 = /* @__PURE__ */ new Vector3(); +var _changeEvent$1 = { type: "change" }; +var _lockEvent = { type: "lock" }; +var _unlockEvent = { type: "unlock" }; +var _MOUSE_SENSITIVITY = .002; +var _PI_2 = Math.PI / 2; +var PointerLockControls$1 = class extends EventDispatcher$1 { + constructor(camera, domElement) { + super(); + __publicField$13(this, "camera"); + __publicField$13(this, "domElement"); + __publicField$13(this, "isLocked"); + __publicField$13(this, "minPolarAngle"); + __publicField$13(this, "maxPolarAngle"); + __publicField$13(this, "pointerSpeed"); + __publicField$13(this, "onMouseMove", (event) => { + if (!this.domElement || this.isLocked === false) return; + _euler.setFromQuaternion(this.camera.quaternion); + _euler.y -= event.movementX * _MOUSE_SENSITIVITY * this.pointerSpeed; + _euler.x -= event.movementY * _MOUSE_SENSITIVITY * this.pointerSpeed; + _euler.x = Math.max(_PI_2 - this.maxPolarAngle, Math.min(_PI_2 - this.minPolarAngle, _euler.x)); + this.camera.quaternion.setFromEuler(_euler); + this.dispatchEvent(_changeEvent$1); + }); + __publicField$13(this, "onPointerlockChange", () => { + if (!this.domElement) return; + if (this.domElement.ownerDocument.pointerLockElement === this.domElement) { + this.dispatchEvent(_lockEvent); + this.isLocked = true; + } else { + this.dispatchEvent(_unlockEvent); + this.isLocked = false; + } + }); + __publicField$13(this, "onPointerlockError", () => { + console.error("THREE.PointerLockControls: Unable to use Pointer Lock API"); + }); + __publicField$13(this, "connect", (domElement) => { + this.domElement = domElement || this.domElement; + if (!this.domElement) return; + this.domElement.ownerDocument.addEventListener("mousemove", this.onMouseMove); + this.domElement.ownerDocument.addEventListener("pointerlockchange", this.onPointerlockChange); + this.domElement.ownerDocument.addEventListener("pointerlockerror", this.onPointerlockError); + }); + __publicField$13(this, "disconnect", () => { + if (!this.domElement) return; + this.domElement.ownerDocument.removeEventListener("mousemove", this.onMouseMove); + this.domElement.ownerDocument.removeEventListener("pointerlockchange", this.onPointerlockChange); + this.domElement.ownerDocument.removeEventListener("pointerlockerror", this.onPointerlockError); + }); + __publicField$13(this, "dispose", () => { + this.disconnect(); + }); + __publicField$13(this, "getObject", () => { + return this.camera; + }); + __publicField$13(this, "direction", new Vector3(0, 0, -1)); + __publicField$13(this, "getDirection", (v) => { + return v.copy(this.direction).applyQuaternion(this.camera.quaternion); + }); + __publicField$13(this, "moveForward", (distance) => { + _vector$1.setFromMatrixColumn(this.camera.matrix, 0); + _vector$1.crossVectors(this.camera.up, _vector$1); + this.camera.position.addScaledVector(_vector$1, distance); + }); + __publicField$13(this, "moveRight", (distance) => { + _vector$1.setFromMatrixColumn(this.camera.matrix, 0); + this.camera.position.addScaledVector(_vector$1, distance); + }); + __publicField$13(this, "lock", () => { + if (this.domElement) this.domElement.requestPointerLock(); + }); + __publicField$13(this, "unlock", () => { + if (this.domElement) this.domElement.ownerDocument.exitPointerLock(); + }); + this.camera = camera; + this.domElement = domElement; + this.isLocked = false; + this.minPolarAngle = 0; + this.maxPolarAngle = Math.PI; + this.pointerSpeed = 1; + if (domElement) this.connect(domElement); + } +}; +//#endregion +//#region node_modules/three-stdlib/controls/DeviceOrientationControls.js +var __defProp$12 = Object.defineProperty; +var __defNormalProp$12 = (obj, key, value) => key in obj ? __defProp$12(obj, key, { + enumerable: true, + configurable: true, + writable: true, + value +}) : obj[key] = value; +var __publicField$12 = (obj, key, value) => { + __defNormalProp$12(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var DeviceOrientationControls$1 = class extends EventDispatcher$1 { + constructor(object) { + super(); + __publicField$12(this, "object"); + __publicField$12(this, "changeEvent", { type: "change" }); + __publicField$12(this, "EPS", 1e-6); + __publicField$12(this, "enabled", true); + __publicField$12(this, "deviceOrientation", { + alpha: 0, + beta: 0, + gamma: 0 + }); + __publicField$12(this, "screenOrientation", 0); + __publicField$12(this, "alphaOffset", 0); + __publicField$12(this, "onDeviceOrientationChangeEvent", (event) => { + this.deviceOrientation = event; + }); + __publicField$12(this, "onScreenOrientationChangeEvent", () => { + this.screenOrientation = window.orientation || 0; + }); + __publicField$12(this, "zee", new Vector3(0, 0, 1)); + __publicField$12(this, "euler", new Euler()); + __publicField$12(this, "q0", new Quaternion()); + __publicField$12(this, "q1", new Quaternion(-Math.sqrt(.5), 0, 0, Math.sqrt(.5))); + __publicField$12(this, "setObjectQuaternion", (quaternion, alpha, beta, gamma, orient) => { + this.euler.set(beta, alpha, -gamma, "YXZ"); + quaternion.setFromEuler(this.euler); + quaternion.multiply(this.q1); + quaternion.multiply(this.q0.setFromAxisAngle(this.zee, -orient)); + }); + __publicField$12(this, "connect", () => { + this.onScreenOrientationChangeEvent(); + if (window.DeviceOrientationEvent !== void 0 && typeof window.DeviceOrientationEvent.requestPermission === "function") window.DeviceOrientationEvent.requestPermission().then((response) => { + if (response == "granted") { + window.addEventListener("orientationchange", this.onScreenOrientationChangeEvent); + window.addEventListener("deviceorientation", this.onDeviceOrientationChangeEvent); + } + }).catch((error) => { + console.error("THREE.DeviceOrientationControls: Unable to use DeviceOrientation API:", error); + }); + else { + window.addEventListener("orientationchange", this.onScreenOrientationChangeEvent); + window.addEventListener("deviceorientation", this.onDeviceOrientationChangeEvent); + } + this.enabled = true; + }); + __publicField$12(this, "disconnect", () => { + window.removeEventListener("orientationchange", this.onScreenOrientationChangeEvent); + window.removeEventListener("deviceorientation", this.onDeviceOrientationChangeEvent); + this.enabled = false; + }); + __publicField$12(this, "lastQuaternion", new Quaternion()); + __publicField$12(this, "update", () => { + if (this.enabled === false) return; + const device = this.deviceOrientation; + if (device) { + const alpha = device.alpha ? MathUtils.degToRad(device.alpha) + this.alphaOffset : 0; + const beta = device.beta ? MathUtils.degToRad(device.beta) : 0; + const gamma = device.gamma ? MathUtils.degToRad(device.gamma) : 0; + const orient = this.screenOrientation ? MathUtils.degToRad(this.screenOrientation) : 0; + this.setObjectQuaternion(this.object.quaternion, alpha, beta, gamma, orient); + if (8 * (1 - this.lastQuaternion.dot(this.object.quaternion)) > this.EPS) { + this.lastQuaternion.copy(this.object.quaternion); + this.dispatchEvent(this.changeEvent); + } + } + }); + __publicField$12(this, "dispose", () => this.disconnect()); + this.object = object; + this.object.rotation.reorder("YXZ"); + this.connect(); + } +}; +//#endregion +//#region node_modules/three-stdlib/controls/TrackballControls.js +var __defProp$11 = Object.defineProperty; +var __defNormalProp$11 = (obj, key, value) => key in obj ? __defProp$11(obj, key, { + enumerable: true, + configurable: true, + writable: true, + value +}) : obj[key] = value; +var __publicField$11 = (obj, key, value) => { + __defNormalProp$11(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var TrackballControls$1 = class extends EventDispatcher$1 { + constructor(object, domElement) { + super(); + __publicField$11(this, "enabled", true); + __publicField$11(this, "screen", { + left: 0, + top: 0, + width: 0, + height: 0 + }); + __publicField$11(this, "rotateSpeed", 1); + __publicField$11(this, "zoomSpeed", 1.2); + __publicField$11(this, "panSpeed", .3); + __publicField$11(this, "noRotate", false); + __publicField$11(this, "noZoom", false); + __publicField$11(this, "noPan", false); + __publicField$11(this, "staticMoving", false); + __publicField$11(this, "dynamicDampingFactor", .2); + __publicField$11(this, "minDistance", 0); + __publicField$11(this, "maxDistance", Infinity); + __publicField$11(this, "keys", [ + "KeyA", + "KeyS", + "KeyD" + ]); + __publicField$11(this, "mouseButtons", { + LEFT: MOUSE.ROTATE, + MIDDLE: MOUSE.DOLLY, + RIGHT: MOUSE.PAN + }); + __publicField$11(this, "object"); + __publicField$11(this, "domElement"); + __publicField$11(this, "cursorZoom", false); + __publicField$11(this, "target", new Vector3()); + __publicField$11(this, "mousePosition", new Vector2()); + __publicField$11(this, "STATE", { + NONE: -1, + ROTATE: 0, + ZOOM: 1, + PAN: 2, + TOUCH_ROTATE: 3, + TOUCH_ZOOM_PAN: 4 + }); + __publicField$11(this, "EPS", 1e-6); + __publicField$11(this, "lastZoom", 1); + __publicField$11(this, "lastPosition", new Vector3()); + __publicField$11(this, "cursorVector", new Vector3()); + __publicField$11(this, "targetVector", new Vector3()); + __publicField$11(this, "_state", this.STATE.NONE); + __publicField$11(this, "_keyState", this.STATE.NONE); + __publicField$11(this, "_eye", new Vector3()); + __publicField$11(this, "_movePrev", new Vector2()); + __publicField$11(this, "_moveCurr", new Vector2()); + __publicField$11(this, "_lastAxis", new Vector3()); + __publicField$11(this, "_lastAngle", 0); + __publicField$11(this, "_zoomStart", new Vector2()); + __publicField$11(this, "_zoomEnd", new Vector2()); + __publicField$11(this, "_touchZoomDistanceStart", 0); + __publicField$11(this, "_touchZoomDistanceEnd", 0); + __publicField$11(this, "_panStart", new Vector2()); + __publicField$11(this, "_panEnd", new Vector2()); + __publicField$11(this, "target0"); + __publicField$11(this, "position0"); + __publicField$11(this, "up0"); + __publicField$11(this, "zoom0"); + __publicField$11(this, "changeEvent", { type: "change" }); + __publicField$11(this, "startEvent", { type: "start" }); + __publicField$11(this, "endEvent", { type: "end" }); + __publicField$11(this, "onScreenVector", new Vector2()); + __publicField$11(this, "getMouseOnScreen", (pageX, pageY) => { + this.onScreenVector.set((pageX - this.screen.left) / this.screen.width, (pageY - this.screen.top) / this.screen.height); + return this.onScreenVector; + }); + __publicField$11(this, "onCircleVector", new Vector2()); + __publicField$11(this, "getMouseOnCircle", (pageX, pageY) => { + this.onCircleVector.set((pageX - this.screen.width * .5 - this.screen.left) / (this.screen.width * .5), (this.screen.height + 2 * (this.screen.top - pageY)) / this.screen.width); + return this.onCircleVector; + }); + __publicField$11(this, "axis", new Vector3()); + __publicField$11(this, "quaternion", new Quaternion()); + __publicField$11(this, "eyeDirection", new Vector3()); + __publicField$11(this, "objectUpDirection", new Vector3()); + __publicField$11(this, "objectSidewaysDirection", new Vector3()); + __publicField$11(this, "moveDirection", new Vector3()); + __publicField$11(this, "angle", 0); + __publicField$11(this, "rotateCamera", () => { + this.moveDirection.set(this._moveCurr.x - this._movePrev.x, this._moveCurr.y - this._movePrev.y, 0); + this.angle = this.moveDirection.length(); + if (this.angle) { + this._eye.copy(this.object.position).sub(this.target); + this.eyeDirection.copy(this._eye).normalize(); + this.objectUpDirection.copy(this.object.up).normalize(); + this.objectSidewaysDirection.crossVectors(this.objectUpDirection, this.eyeDirection).normalize(); + this.objectUpDirection.setLength(this._moveCurr.y - this._movePrev.y); + this.objectSidewaysDirection.setLength(this._moveCurr.x - this._movePrev.x); + this.moveDirection.copy(this.objectUpDirection.add(this.objectSidewaysDirection)); + this.axis.crossVectors(this.moveDirection, this._eye).normalize(); + this.angle *= this.rotateSpeed; + this.quaternion.setFromAxisAngle(this.axis, this.angle); + this._eye.applyQuaternion(this.quaternion); + this.object.up.applyQuaternion(this.quaternion); + this._lastAxis.copy(this.axis); + this._lastAngle = this.angle; + } else if (!this.staticMoving && this._lastAngle) { + this._lastAngle *= Math.sqrt(1 - this.dynamicDampingFactor); + this._eye.copy(this.object.position).sub(this.target); + this.quaternion.setFromAxisAngle(this._lastAxis, this._lastAngle); + this._eye.applyQuaternion(this.quaternion); + this.object.up.applyQuaternion(this.quaternion); + } + this._movePrev.copy(this._moveCurr); + }); + __publicField$11(this, "zoomCamera", () => { + let factor; + if (this._state === this.STATE.TOUCH_ZOOM_PAN) { + factor = this._touchZoomDistanceStart / this._touchZoomDistanceEnd; + this._touchZoomDistanceStart = this._touchZoomDistanceEnd; + if (this.object.isPerspectiveCamera) this._eye.multiplyScalar(factor); + else if (this.object.isOrthographicCamera) { + this.object.zoom /= factor; + this.object.updateProjectionMatrix(); + } else console.warn("THREE.TrackballControls: Unsupported camera type"); + } else { + factor = 1 + (this._zoomEnd.y - this._zoomStart.y) * this.zoomSpeed; + if (Math.abs(factor - 1) > this.EPS && factor > 0) if (this.object.isPerspectiveCamera) { + if (factor > 1 && this._eye.length() >= this.maxDistance - this.EPS) factor = 1; + this._eye.multiplyScalar(factor); + } else if (this.object.isOrthographicCamera) { + if (factor > 1 && this.object.zoom < this.maxDistance * this.maxDistance) factor = 1; + this.object.zoom /= factor; + } else console.warn("THREE.TrackballControls: Unsupported camera type"); + if (this.staticMoving) this._zoomStart.copy(this._zoomEnd); + else this._zoomStart.y += (this._zoomEnd.y - this._zoomStart.y) * this.dynamicDampingFactor; + if (this.cursorZoom) { + this.targetVector.copy(this.target).project(this.object); + let worldPos = this.cursorVector.set(this.mousePosition.x, this.mousePosition.y, this.targetVector.z).unproject(this.object); + this.target.lerpVectors(worldPos, this.target, factor); + } + if (this.object.isOrthographicCamera) this.object.updateProjectionMatrix(); + } + }); + __publicField$11(this, "mouseChange", new Vector2()); + __publicField$11(this, "objectUp", new Vector3()); + __publicField$11(this, "pan", new Vector3()); + __publicField$11(this, "panCamera", () => { + if (!this.domElement) return; + this.mouseChange.copy(this._panEnd).sub(this._panStart); + if (this.mouseChange.lengthSq() > this.EPS) { + if (this.object.isOrthographicCamera) { + const orthoObject = this.object; + const scale_x = (orthoObject.right - orthoObject.left) / this.object.zoom; + const scale_y = (orthoObject.top - orthoObject.bottom) / this.object.zoom; + this.mouseChange.x *= scale_x; + this.mouseChange.y *= scale_y; + } else this.mouseChange.multiplyScalar(this._eye.length() * this.panSpeed); + this.pan.copy(this._eye).cross(this.object.up).setLength(this.mouseChange.x); + this.pan.add(this.objectUp.copy(this.object.up).setLength(this.mouseChange.y)); + this.object.position.add(this.pan); + this.target.add(this.pan); + if (this.staticMoving) this._panStart.copy(this._panEnd); + else this._panStart.add(this.mouseChange.subVectors(this._panEnd, this._panStart).multiplyScalar(this.dynamicDampingFactor)); + } + }); + __publicField$11(this, "checkDistances", () => { + if (!this.noZoom || !this.noPan) { + if (this._eye.lengthSq() > this.maxDistance * this.maxDistance) { + this.object.position.addVectors(this.target, this._eye.setLength(this.maxDistance)); + this._zoomStart.copy(this._zoomEnd); + } + if (this._eye.lengthSq() < this.minDistance * this.minDistance) { + this.object.position.addVectors(this.target, this._eye.setLength(this.minDistance)); + this._zoomStart.copy(this._zoomEnd); + } + } + }); + __publicField$11(this, "handleResize", () => { + if (!this.domElement) return; + const box = this.domElement.getBoundingClientRect(); + const d = this.domElement.ownerDocument.documentElement; + this.screen.left = box.left + window.pageXOffset - d.clientLeft; + this.screen.top = box.top + window.pageYOffset - d.clientTop; + this.screen.width = box.width; + this.screen.height = box.height; + }); + __publicField$11(this, "update", () => { + this._eye.subVectors(this.object.position, this.target); + if (!this.noRotate) this.rotateCamera(); + if (!this.noZoom) this.zoomCamera(); + if (!this.noPan) this.panCamera(); + this.object.position.addVectors(this.target, this._eye); + if (this.object.isPerspectiveCamera) { + this.checkDistances(); + this.object.lookAt(this.target); + if (this.lastPosition.distanceToSquared(this.object.position) > this.EPS) { + this.dispatchEvent(this.changeEvent); + this.lastPosition.copy(this.object.position); + } + } else if (this.object.isOrthographicCamera) { + this.object.lookAt(this.target); + if (this.lastPosition.distanceToSquared(this.object.position) > this.EPS || this.lastZoom !== this.object.zoom) { + this.dispatchEvent(this.changeEvent); + this.lastPosition.copy(this.object.position); + this.lastZoom = this.object.zoom; + } + } else console.warn("THREE.TrackballControls: Unsupported camera type"); + }); + __publicField$11(this, "reset", () => { + this._state = this.STATE.NONE; + this._keyState = this.STATE.NONE; + this.target.copy(this.target0); + this.object.position.copy(this.position0); + this.object.up.copy(this.up0); + this.object.zoom = this.zoom0; + this.object.updateProjectionMatrix(); + this._eye.subVectors(this.object.position, this.target); + this.object.lookAt(this.target); + this.dispatchEvent(this.changeEvent); + this.lastPosition.copy(this.object.position); + this.lastZoom = this.object.zoom; + }); + __publicField$11(this, "keydown", (event) => { + if (this.enabled === false) return; + window.removeEventListener("keydown", this.keydown); + if (this._keyState !== this.STATE.NONE) return; + else if (event.code === this.keys[this.STATE.ROTATE] && !this.noRotate) this._keyState = this.STATE.ROTATE; + else if (event.code === this.keys[this.STATE.ZOOM] && !this.noZoom) this._keyState = this.STATE.ZOOM; + else if (event.code === this.keys[this.STATE.PAN] && !this.noPan) this._keyState = this.STATE.PAN; + }); + __publicField$11(this, "onPointerDown", (event) => { + if (this.enabled === false) return; + switch (event.pointerType) { + case "mouse": + case "pen": + this.onMouseDown(event); + break; + } + }); + __publicField$11(this, "onPointerMove", (event) => { + if (this.enabled === false) return; + switch (event.pointerType) { + case "mouse": + case "pen": + this.onMouseMove(event); + break; + } + }); + __publicField$11(this, "onPointerUp", (event) => { + if (this.enabled === false) return; + switch (event.pointerType) { + case "mouse": + case "pen": + this.onMouseUp(); + break; + } + }); + __publicField$11(this, "keyup", () => { + if (this.enabled === false) return; + this._keyState = this.STATE.NONE; + window.addEventListener("keydown", this.keydown); + }); + __publicField$11(this, "onMouseDown", (event) => { + if (!this.domElement) return; + if (this._state === this.STATE.NONE) switch (event.button) { + case this.mouseButtons.LEFT: + this._state = this.STATE.ROTATE; + break; + case this.mouseButtons.MIDDLE: + this._state = this.STATE.ZOOM; + break; + case this.mouseButtons.RIGHT: + this._state = this.STATE.PAN; + break; + } + const state = this._keyState !== this.STATE.NONE ? this._keyState : this._state; + if (state === this.STATE.ROTATE && !this.noRotate) { + this._moveCurr.copy(this.getMouseOnCircle(event.pageX, event.pageY)); + this._movePrev.copy(this._moveCurr); + } else if (state === this.STATE.ZOOM && !this.noZoom) { + this._zoomStart.copy(this.getMouseOnScreen(event.pageX, event.pageY)); + this._zoomEnd.copy(this._zoomStart); + } else if (state === this.STATE.PAN && !this.noPan) { + this._panStart.copy(this.getMouseOnScreen(event.pageX, event.pageY)); + this._panEnd.copy(this._panStart); + } + this.domElement.ownerDocument.addEventListener("pointermove", this.onPointerMove); + this.domElement.ownerDocument.addEventListener("pointerup", this.onPointerUp); + this.dispatchEvent(this.startEvent); + }); + __publicField$11(this, "onMouseMove", (event) => { + if (this.enabled === false) return; + const state = this._keyState !== this.STATE.NONE ? this._keyState : this._state; + if (state === this.STATE.ROTATE && !this.noRotate) { + this._movePrev.copy(this._moveCurr); + this._moveCurr.copy(this.getMouseOnCircle(event.pageX, event.pageY)); + } else if (state === this.STATE.ZOOM && !this.noZoom) this._zoomEnd.copy(this.getMouseOnScreen(event.pageX, event.pageY)); + else if (state === this.STATE.PAN && !this.noPan) this._panEnd.copy(this.getMouseOnScreen(event.pageX, event.pageY)); + }); + __publicField$11(this, "onMouseUp", () => { + if (!this.domElement) return; + if (this.enabled === false) return; + this._state = this.STATE.NONE; + this.domElement.ownerDocument.removeEventListener("pointermove", this.onPointerMove); + this.domElement.ownerDocument.removeEventListener("pointerup", this.onPointerUp); + this.dispatchEvent(this.endEvent); + }); + __publicField$11(this, "mousewheel", (event) => { + if (this.enabled === false) return; + if (this.noZoom === true) return; + event.preventDefault(); + switch (event.deltaMode) { + case 2: + this._zoomStart.y -= event.deltaY * .025; + break; + case 1: + this._zoomStart.y -= event.deltaY * .01; + break; + default: + this._zoomStart.y -= event.deltaY * 25e-5; + break; + } + this.mousePosition.x = event.offsetX / this.screen.width * 2 - 1; + this.mousePosition.y = -(event.offsetY / this.screen.height) * 2 + 1; + this.dispatchEvent(this.startEvent); + this.dispatchEvent(this.endEvent); + }); + __publicField$11(this, "touchstart", (event) => { + if (this.enabled === false) return; + event.preventDefault(); + switch (event.touches.length) { + case 1: + this._state = this.STATE.TOUCH_ROTATE; + this._moveCurr.copy(this.getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY)); + this._movePrev.copy(this._moveCurr); + break; + default: + this._state = this.STATE.TOUCH_ZOOM_PAN; + const dx = event.touches[0].pageX - event.touches[1].pageX; + const dy = event.touches[0].pageY - event.touches[1].pageY; + this._touchZoomDistanceEnd = this._touchZoomDistanceStart = Math.sqrt(dx * dx + dy * dy); + const x = (event.touches[0].pageX + event.touches[1].pageX) / 2; + const y = (event.touches[0].pageY + event.touches[1].pageY) / 2; + this._panStart.copy(this.getMouseOnScreen(x, y)); + this._panEnd.copy(this._panStart); + break; + } + this.dispatchEvent(this.startEvent); + }); + __publicField$11(this, "touchmove", (event) => { + if (this.enabled === false) return; + event.preventDefault(); + switch (event.touches.length) { + case 1: + this._movePrev.copy(this._moveCurr); + this._moveCurr.copy(this.getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY)); + break; + default: + const dx = event.touches[0].pageX - event.touches[1].pageX; + const dy = event.touches[0].pageY - event.touches[1].pageY; + this._touchZoomDistanceEnd = Math.sqrt(dx * dx + dy * dy); + const x = (event.touches[0].pageX + event.touches[1].pageX) / 2; + const y = (event.touches[0].pageY + event.touches[1].pageY) / 2; + this._panEnd.copy(this.getMouseOnScreen(x, y)); + break; + } + }); + __publicField$11(this, "touchend", (event) => { + if (this.enabled === false) return; + switch (event.touches.length) { + case 0: + this._state = this.STATE.NONE; + break; + case 1: + this._state = this.STATE.TOUCH_ROTATE; + this._moveCurr.copy(this.getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY)); + this._movePrev.copy(this._moveCurr); + break; + } + this.dispatchEvent(this.endEvent); + }); + __publicField$11(this, "contextmenu", (event) => { + if (this.enabled === false) return; + event.preventDefault(); + }); + __publicField$11(this, "connect", (domElement) => { + if (domElement === document) console.error("THREE.OrbitControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead."); + this.domElement = domElement; + this.domElement.addEventListener("contextmenu", this.contextmenu); + this.domElement.addEventListener("pointerdown", this.onPointerDown); + this.domElement.addEventListener("wheel", this.mousewheel); + this.domElement.addEventListener("touchstart", this.touchstart); + this.domElement.addEventListener("touchend", this.touchend); + this.domElement.addEventListener("touchmove", this.touchmove); + this.domElement.ownerDocument.addEventListener("pointermove", this.onPointerMove); + this.domElement.ownerDocument.addEventListener("pointerup", this.onPointerUp); + window.addEventListener("keydown", this.keydown); + window.addEventListener("keyup", this.keyup); + this.handleResize(); + }); + __publicField$11(this, "dispose", () => { + if (!this.domElement) return; + this.domElement.removeEventListener("contextmenu", this.contextmenu); + this.domElement.removeEventListener("pointerdown", this.onPointerDown); + this.domElement.removeEventListener("wheel", this.mousewheel); + this.domElement.removeEventListener("touchstart", this.touchstart); + this.domElement.removeEventListener("touchend", this.touchend); + this.domElement.removeEventListener("touchmove", this.touchmove); + this.domElement.ownerDocument.removeEventListener("pointermove", this.onPointerMove); + this.domElement.ownerDocument.removeEventListener("pointerup", this.onPointerUp); + window.removeEventListener("keydown", this.keydown); + window.removeEventListener("keyup", this.keyup); + }); + this.object = object; + this.target0 = this.target.clone(); + this.position0 = this.object.position.clone(); + this.up0 = this.object.up.clone(); + this.zoom0 = this.object.zoom; + if (domElement !== void 0) this.connect(domElement); + this.update(); + } +}; +//#endregion +//#region node_modules/three-stdlib/controls/OrbitControls.js +var __defProp$10 = Object.defineProperty; +var __defNormalProp$10 = (obj, key, value) => key in obj ? __defProp$10(obj, key, { + enumerable: true, + configurable: true, + writable: true, + value +}) : obj[key] = value; +var __publicField$10 = (obj, key, value) => { + __defNormalProp$10(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var _ray$3 = /* @__PURE__ */ new Ray(); +var _plane = /* @__PURE__ */ new Plane$1(); +var TILT_LIMIT = Math.cos(70 * (Math.PI / 180)); +var moduloWrapAround = (offset, capacity) => (offset % capacity + capacity) % capacity; +var OrbitControls$1 = class extends EventDispatcher$1 { + constructor(object, domElement) { + super(); + __publicField$10(this, "object"); + __publicField$10(this, "domElement"); + __publicField$10(this, "enabled", true); + __publicField$10(this, "target", new Vector3()); + __publicField$10(this, "minDistance", 0); + __publicField$10(this, "maxDistance", Infinity); + __publicField$10(this, "minZoom", 0); + __publicField$10(this, "maxZoom", Infinity); + __publicField$10(this, "minPolarAngle", 0); + __publicField$10(this, "maxPolarAngle", Math.PI); + __publicField$10(this, "minAzimuthAngle", -Infinity); + __publicField$10(this, "maxAzimuthAngle", Infinity); + __publicField$10(this, "enableDamping", false); + __publicField$10(this, "dampingFactor", .05); + __publicField$10(this, "enableZoom", true); + __publicField$10(this, "zoomSpeed", 1); + __publicField$10(this, "enableRotate", true); + __publicField$10(this, "rotateSpeed", 1); + __publicField$10(this, "enablePan", true); + __publicField$10(this, "panSpeed", 1); + __publicField$10(this, "screenSpacePanning", true); + __publicField$10(this, "keyPanSpeed", 7); + __publicField$10(this, "zoomToCursor", false); + __publicField$10(this, "autoRotate", false); + __publicField$10(this, "autoRotateSpeed", 2); + __publicField$10(this, "reverseOrbit", false); + __publicField$10(this, "reverseHorizontalOrbit", false); + __publicField$10(this, "reverseVerticalOrbit", false); + __publicField$10(this, "keys", { + LEFT: "ArrowLeft", + UP: "ArrowUp", + RIGHT: "ArrowRight", + BOTTOM: "ArrowDown" + }); + __publicField$10(this, "mouseButtons", { + LEFT: MOUSE.ROTATE, + MIDDLE: MOUSE.DOLLY, + RIGHT: MOUSE.PAN + }); + __publicField$10(this, "touches", { + ONE: TOUCH.ROTATE, + TWO: TOUCH.DOLLY_PAN + }); + __publicField$10(this, "target0"); + __publicField$10(this, "position0"); + __publicField$10(this, "zoom0"); + __publicField$10(this, "_domElementKeyEvents", null); + __publicField$10(this, "getPolarAngle"); + __publicField$10(this, "getAzimuthalAngle"); + __publicField$10(this, "setPolarAngle"); + __publicField$10(this, "setAzimuthalAngle"); + __publicField$10(this, "getDistance"); + __publicField$10(this, "getZoomScale"); + __publicField$10(this, "listenToKeyEvents"); + __publicField$10(this, "stopListenToKeyEvents"); + __publicField$10(this, "saveState"); + __publicField$10(this, "reset"); + __publicField$10(this, "update"); + __publicField$10(this, "connect"); + __publicField$10(this, "dispose"); + __publicField$10(this, "dollyIn"); + __publicField$10(this, "dollyOut"); + __publicField$10(this, "getScale"); + __publicField$10(this, "setScale"); + this.object = object; + this.domElement = domElement; + this.target0 = this.target.clone(); + this.position0 = this.object.position.clone(); + this.zoom0 = this.object.zoom; + this.getPolarAngle = () => spherical.phi; + this.getAzimuthalAngle = () => spherical.theta; + this.setPolarAngle = (value) => { + let phi = moduloWrapAround(value, 2 * Math.PI); + let currentPhi = spherical.phi; + if (currentPhi < 0) currentPhi += 2 * Math.PI; + if (phi < 0) phi += 2 * Math.PI; + let phiDist = Math.abs(phi - currentPhi); + if (2 * Math.PI - phiDist < phiDist) if (phi < currentPhi) phi += 2 * Math.PI; + else currentPhi += 2 * Math.PI; + sphericalDelta.phi = phi - currentPhi; + scope.update(); + }; + this.setAzimuthalAngle = (value) => { + let theta = moduloWrapAround(value, 2 * Math.PI); + let currentTheta = spherical.theta; + if (currentTheta < 0) currentTheta += 2 * Math.PI; + if (theta < 0) theta += 2 * Math.PI; + let thetaDist = Math.abs(theta - currentTheta); + if (2 * Math.PI - thetaDist < thetaDist) if (theta < currentTheta) theta += 2 * Math.PI; + else currentTheta += 2 * Math.PI; + sphericalDelta.theta = theta - currentTheta; + scope.update(); + }; + this.getDistance = () => scope.object.position.distanceTo(scope.target); + this.listenToKeyEvents = (domElement2) => { + domElement2.addEventListener("keydown", onKeyDown); + this._domElementKeyEvents = domElement2; + }; + this.stopListenToKeyEvents = () => { + this._domElementKeyEvents.removeEventListener("keydown", onKeyDown); + this._domElementKeyEvents = null; + }; + this.saveState = () => { + scope.target0.copy(scope.target); + scope.position0.copy(scope.object.position); + scope.zoom0 = scope.object.zoom; + }; + this.reset = () => { + scope.target.copy(scope.target0); + scope.object.position.copy(scope.position0); + scope.object.zoom = scope.zoom0; + scope.object.updateProjectionMatrix(); + scope.dispatchEvent(changeEvent); + scope.update(); + state = STATE.NONE; + }; + this.update = (() => { + const offset = new Vector3(); + const up = new Vector3(0, 1, 0); + const quat = new Quaternion().setFromUnitVectors(object.up, up); + const quatInverse = quat.clone().invert(); + const lastPosition = new Vector3(); + const lastQuaternion = new Quaternion(); + const twoPI = 2 * Math.PI; + return function update() { + const position = scope.object.position; + quat.setFromUnitVectors(object.up, up); + quatInverse.copy(quat).invert(); + offset.copy(position).sub(scope.target); + offset.applyQuaternion(quat); + spherical.setFromVector3(offset); + if (scope.autoRotate && state === STATE.NONE) rotateLeft(getAutoRotationAngle()); + if (scope.enableDamping) { + spherical.theta += sphericalDelta.theta * scope.dampingFactor; + spherical.phi += sphericalDelta.phi * scope.dampingFactor; + } else { + spherical.theta += sphericalDelta.theta; + spherical.phi += sphericalDelta.phi; + } + let min = scope.minAzimuthAngle; + let max = scope.maxAzimuthAngle; + if (isFinite(min) && isFinite(max)) { + if (min < -Math.PI) min += twoPI; + else if (min > Math.PI) min -= twoPI; + if (max < -Math.PI) max += twoPI; + else if (max > Math.PI) max -= twoPI; + if (min <= max) spherical.theta = Math.max(min, Math.min(max, spherical.theta)); + else spherical.theta = spherical.theta > (min + max) / 2 ? Math.max(min, spherical.theta) : Math.min(max, spherical.theta); + } + spherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi)); + spherical.makeSafe(); + if (scope.enableDamping === true) scope.target.addScaledVector(panOffset, scope.dampingFactor); + else scope.target.add(panOffset); + if (scope.zoomToCursor && performCursorZoom || scope.object.isOrthographicCamera) spherical.radius = clampDistance(spherical.radius); + else spherical.radius = clampDistance(spherical.radius * scale); + offset.setFromSpherical(spherical); + offset.applyQuaternion(quatInverse); + position.copy(scope.target).add(offset); + if (!scope.object.matrixAutoUpdate) scope.object.updateMatrix(); + scope.object.lookAt(scope.target); + if (scope.enableDamping === true) { + sphericalDelta.theta *= 1 - scope.dampingFactor; + sphericalDelta.phi *= 1 - scope.dampingFactor; + panOffset.multiplyScalar(1 - scope.dampingFactor); + } else { + sphericalDelta.set(0, 0, 0); + panOffset.set(0, 0, 0); + } + let zoomChanged = false; + if (scope.zoomToCursor && performCursorZoom) { + let newRadius = null; + if (scope.object instanceof PerspectiveCamera$1 && scope.object.isPerspectiveCamera) { + const prevRadius = offset.length(); + newRadius = clampDistance(prevRadius * scale); + const radiusDelta = prevRadius - newRadius; + scope.object.position.addScaledVector(dollyDirection, radiusDelta); + scope.object.updateMatrixWorld(); + } else if (scope.object.isOrthographicCamera) { + const mouseBefore = new Vector3(mouse.x, mouse.y, 0); + mouseBefore.unproject(scope.object); + scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / scale)); + scope.object.updateProjectionMatrix(); + zoomChanged = true; + const mouseAfter = new Vector3(mouse.x, mouse.y, 0); + mouseAfter.unproject(scope.object); + scope.object.position.sub(mouseAfter).add(mouseBefore); + scope.object.updateMatrixWorld(); + newRadius = offset.length(); + } else { + console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."); + scope.zoomToCursor = false; + } + if (newRadius !== null) if (scope.screenSpacePanning) scope.target.set(0, 0, -1).transformDirection(scope.object.matrix).multiplyScalar(newRadius).add(scope.object.position); + else { + _ray$3.origin.copy(scope.object.position); + _ray$3.direction.set(0, 0, -1).transformDirection(scope.object.matrix); + if (Math.abs(scope.object.up.dot(_ray$3.direction)) < TILT_LIMIT) object.lookAt(scope.target); + else { + _plane.setFromNormalAndCoplanarPoint(scope.object.up, scope.target); + _ray$3.intersectPlane(_plane, scope.target); + } + } + } else if (scope.object instanceof OrthographicCamera$1 && scope.object.isOrthographicCamera) { + zoomChanged = scale !== 1; + if (zoomChanged) { + scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / scale)); + scope.object.updateProjectionMatrix(); + } + } + scale = 1; + performCursorZoom = false; + if (zoomChanged || lastPosition.distanceToSquared(scope.object.position) > EPS || 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) { + scope.dispatchEvent(changeEvent); + lastPosition.copy(scope.object.position); + lastQuaternion.copy(scope.object.quaternion); + zoomChanged = false; + return true; + } + return false; + }; + })(); + this.connect = (domElement2) => { + scope.domElement = domElement2; + scope.domElement.style.touchAction = "none"; + scope.domElement.addEventListener("contextmenu", onContextMenu); + scope.domElement.addEventListener("pointerdown", onPointerDown); + scope.domElement.addEventListener("pointercancel", onPointerUp); + scope.domElement.addEventListener("wheel", onMouseWheel); + }; + this.dispose = () => { + var _a, _b, _c, _d, _e, _f; + if (scope.domElement) scope.domElement.style.touchAction = "auto"; + (_a = scope.domElement) == null || _a.removeEventListener("contextmenu", onContextMenu); + (_b = scope.domElement) == null || _b.removeEventListener("pointerdown", onPointerDown); + (_c = scope.domElement) == null || _c.removeEventListener("pointercancel", onPointerUp); + (_d = scope.domElement) == null || _d.removeEventListener("wheel", onMouseWheel); + (_e = scope.domElement) == null || _e.ownerDocument.removeEventListener("pointermove", onPointerMove); + (_f = scope.domElement) == null || _f.ownerDocument.removeEventListener("pointerup", onPointerUp); + if (scope._domElementKeyEvents !== null) scope._domElementKeyEvents.removeEventListener("keydown", onKeyDown); + }; + const scope = this; + const changeEvent = { type: "change" }; + const startEvent = { type: "start" }; + const endEvent = { type: "end" }; + const STATE = { + NONE: -1, + ROTATE: 0, + DOLLY: 1, + PAN: 2, + TOUCH_ROTATE: 3, + TOUCH_PAN: 4, + TOUCH_DOLLY_PAN: 5, + TOUCH_DOLLY_ROTATE: 6 + }; + let state = STATE.NONE; + const EPS = 1e-6; + const spherical = new Spherical(); + const sphericalDelta = new Spherical(); + let scale = 1; + const panOffset = new Vector3(); + const rotateStart = new Vector2(); + const rotateEnd = new Vector2(); + const rotateDelta = new Vector2(); + const panStart = new Vector2(); + const panEnd = new Vector2(); + const panDelta = new Vector2(); + const dollyStart = new Vector2(); + const dollyEnd = new Vector2(); + const dollyDelta = new Vector2(); + const dollyDirection = new Vector3(); + const mouse = new Vector2(); + let performCursorZoom = false; + const pointers = []; + const pointerPositions = {}; + function getAutoRotationAngle() { + return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed; + } + function getZoomScale() { + return Math.pow(.95, scope.zoomSpeed); + } + function rotateLeft(angle) { + if (scope.reverseOrbit || scope.reverseHorizontalOrbit) sphericalDelta.theta += angle; + else sphericalDelta.theta -= angle; + } + function rotateUp(angle) { + if (scope.reverseOrbit || scope.reverseVerticalOrbit) sphericalDelta.phi += angle; + else sphericalDelta.phi -= angle; + } + const panLeft = (() => { + const v = new Vector3(); + return function panLeft2(distance, objectMatrix) { + v.setFromMatrixColumn(objectMatrix, 0); + v.multiplyScalar(-distance); + panOffset.add(v); + }; + })(); + const panUp = (() => { + const v = new Vector3(); + return function panUp2(distance, objectMatrix) { + if (scope.screenSpacePanning === true) v.setFromMatrixColumn(objectMatrix, 1); + else { + v.setFromMatrixColumn(objectMatrix, 0); + v.crossVectors(scope.object.up, v); + } + v.multiplyScalar(distance); + panOffset.add(v); + }; + })(); + const pan = (() => { + const offset = new Vector3(); + return function pan2(deltaX, deltaY) { + const element = scope.domElement; + if (element && scope.object instanceof PerspectiveCamera$1 && scope.object.isPerspectiveCamera) { + const position = scope.object.position; + offset.copy(position).sub(scope.target); + let targetDistance = offset.length(); + targetDistance *= Math.tan(scope.object.fov / 2 * Math.PI / 180); + panLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix); + panUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix); + } else if (element && scope.object instanceof OrthographicCamera$1 && scope.object.isOrthographicCamera) { + panLeft(deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth, scope.object.matrix); + panUp(deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight, scope.object.matrix); + } else { + console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."); + scope.enablePan = false; + } + }; + })(); + function setScale(newScale) { + if (scope.object instanceof PerspectiveCamera$1 && scope.object.isPerspectiveCamera || scope.object instanceof OrthographicCamera$1 && scope.object.isOrthographicCamera) scale = newScale; + else { + console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."); + scope.enableZoom = false; + } + } + function dollyOut(dollyScale) { + setScale(scale / dollyScale); + } + function dollyIn(dollyScale) { + setScale(scale * dollyScale); + } + function updateMouseParameters(event) { + if (!scope.zoomToCursor || !scope.domElement) return; + performCursorZoom = true; + const rect = scope.domElement.getBoundingClientRect(); + const x = event.clientX - rect.left; + const y = event.clientY - rect.top; + const w = rect.width; + const h = rect.height; + mouse.x = x / w * 2 - 1; + mouse.y = -(y / h) * 2 + 1; + dollyDirection.set(mouse.x, mouse.y, 1).unproject(scope.object).sub(scope.object.position).normalize(); + } + function clampDistance(dist) { + return Math.max(scope.minDistance, Math.min(scope.maxDistance, dist)); + } + function handleMouseDownRotate(event) { + rotateStart.set(event.clientX, event.clientY); + } + function handleMouseDownDolly(event) { + updateMouseParameters(event); + dollyStart.set(event.clientX, event.clientY); + } + function handleMouseDownPan(event) { + panStart.set(event.clientX, event.clientY); + } + function handleMouseMoveRotate(event) { + rotateEnd.set(event.clientX, event.clientY); + rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed); + const element = scope.domElement; + if (element) { + rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); + rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight); + } + rotateStart.copy(rotateEnd); + scope.update(); + } + function handleMouseMoveDolly(event) { + dollyEnd.set(event.clientX, event.clientY); + dollyDelta.subVectors(dollyEnd, dollyStart); + if (dollyDelta.y > 0) dollyOut(getZoomScale()); + else if (dollyDelta.y < 0) dollyIn(getZoomScale()); + dollyStart.copy(dollyEnd); + scope.update(); + } + function handleMouseMovePan(event) { + panEnd.set(event.clientX, event.clientY); + panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed); + pan(panDelta.x, panDelta.y); + panStart.copy(panEnd); + scope.update(); + } + function handleMouseWheel(event) { + updateMouseParameters(event); + if (event.deltaY < 0) dollyIn(getZoomScale()); + else if (event.deltaY > 0) dollyOut(getZoomScale()); + scope.update(); + } + function handleKeyDown(event) { + let needsUpdate = false; + switch (event.code) { + case scope.keys.UP: + pan(0, scope.keyPanSpeed); + needsUpdate = true; + break; + case scope.keys.BOTTOM: + pan(0, -scope.keyPanSpeed); + needsUpdate = true; + break; + case scope.keys.LEFT: + pan(scope.keyPanSpeed, 0); + needsUpdate = true; + break; + case scope.keys.RIGHT: + pan(-scope.keyPanSpeed, 0); + needsUpdate = true; + break; + } + if (needsUpdate) { + event.preventDefault(); + scope.update(); + } + } + function handleTouchStartRotate() { + if (pointers.length == 1) rotateStart.set(pointers[0].pageX, pointers[0].pageY); + else { + const x = .5 * (pointers[0].pageX + pointers[1].pageX); + const y = .5 * (pointers[0].pageY + pointers[1].pageY); + rotateStart.set(x, y); + } + } + function handleTouchStartPan() { + if (pointers.length == 1) panStart.set(pointers[0].pageX, pointers[0].pageY); + else { + const x = .5 * (pointers[0].pageX + pointers[1].pageX); + const y = .5 * (pointers[0].pageY + pointers[1].pageY); + panStart.set(x, y); + } + } + function handleTouchStartDolly() { + const dx = pointers[0].pageX - pointers[1].pageX; + const dy = pointers[0].pageY - pointers[1].pageY; + const distance = Math.sqrt(dx * dx + dy * dy); + dollyStart.set(0, distance); + } + function handleTouchStartDollyPan() { + if (scope.enableZoom) handleTouchStartDolly(); + if (scope.enablePan) handleTouchStartPan(); + } + function handleTouchStartDollyRotate() { + if (scope.enableZoom) handleTouchStartDolly(); + if (scope.enableRotate) handleTouchStartRotate(); + } + function handleTouchMoveRotate(event) { + if (pointers.length == 1) rotateEnd.set(event.pageX, event.pageY); + else { + const position = getSecondPointerPosition(event); + const x = .5 * (event.pageX + position.x); + const y = .5 * (event.pageY + position.y); + rotateEnd.set(x, y); + } + rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed); + const element = scope.domElement; + if (element) { + rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); + rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight); + } + rotateStart.copy(rotateEnd); + } + function handleTouchMovePan(event) { + if (pointers.length == 1) panEnd.set(event.pageX, event.pageY); + else { + const position = getSecondPointerPosition(event); + const x = .5 * (event.pageX + position.x); + const y = .5 * (event.pageY + position.y); + panEnd.set(x, y); + } + panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed); + pan(panDelta.x, panDelta.y); + panStart.copy(panEnd); + } + function handleTouchMoveDolly(event) { + const position = getSecondPointerPosition(event); + const dx = event.pageX - position.x; + const dy = event.pageY - position.y; + const distance = Math.sqrt(dx * dx + dy * dy); + dollyEnd.set(0, distance); + dollyDelta.set(0, Math.pow(dollyEnd.y / dollyStart.y, scope.zoomSpeed)); + dollyOut(dollyDelta.y); + dollyStart.copy(dollyEnd); + } + function handleTouchMoveDollyPan(event) { + if (scope.enableZoom) handleTouchMoveDolly(event); + if (scope.enablePan) handleTouchMovePan(event); + } + function handleTouchMoveDollyRotate(event) { + if (scope.enableZoom) handleTouchMoveDolly(event); + if (scope.enableRotate) handleTouchMoveRotate(event); + } + function onPointerDown(event) { + var _a, _b; + if (scope.enabled === false) return; + if (pointers.length === 0) { + (_a = scope.domElement) == null || _a.ownerDocument.addEventListener("pointermove", onPointerMove); + (_b = scope.domElement) == null || _b.ownerDocument.addEventListener("pointerup", onPointerUp); + } + addPointer(event); + if (event.pointerType === "touch") onTouchStart(event); + else onMouseDown(event); + } + function onPointerMove(event) { + if (scope.enabled === false) return; + if (event.pointerType === "touch") onTouchMove(event); + else onMouseMove(event); + } + function onPointerUp(event) { + var _a, _b, _c; + removePointer(event); + if (pointers.length === 0) { + (_a = scope.domElement) == null || _a.releasePointerCapture(event.pointerId); + (_b = scope.domElement) == null || _b.ownerDocument.removeEventListener("pointermove", onPointerMove); + (_c = scope.domElement) == null || _c.ownerDocument.removeEventListener("pointerup", onPointerUp); + } + scope.dispatchEvent(endEvent); + state = STATE.NONE; + } + function onMouseDown(event) { + let mouseAction; + switch (event.button) { + case 0: + mouseAction = scope.mouseButtons.LEFT; + break; + case 1: + mouseAction = scope.mouseButtons.MIDDLE; + break; + case 2: + mouseAction = scope.mouseButtons.RIGHT; + break; + default: mouseAction = -1; + } + switch (mouseAction) { + case MOUSE.DOLLY: + if (scope.enableZoom === false) return; + handleMouseDownDolly(event); + state = STATE.DOLLY; + break; + case MOUSE.ROTATE: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + if (scope.enablePan === false) return; + handleMouseDownPan(event); + state = STATE.PAN; + } else { + if (scope.enableRotate === false) return; + handleMouseDownRotate(event); + state = STATE.ROTATE; + } + break; + case MOUSE.PAN: + if (event.ctrlKey || event.metaKey || event.shiftKey) { + if (scope.enableRotate === false) return; + handleMouseDownRotate(event); + state = STATE.ROTATE; + } else { + if (scope.enablePan === false) return; + handleMouseDownPan(event); + state = STATE.PAN; + } + break; + default: state = STATE.NONE; + } + if (state !== STATE.NONE) scope.dispatchEvent(startEvent); + } + function onMouseMove(event) { + if (scope.enabled === false) return; + switch (state) { + case STATE.ROTATE: + if (scope.enableRotate === false) return; + handleMouseMoveRotate(event); + break; + case STATE.DOLLY: + if (scope.enableZoom === false) return; + handleMouseMoveDolly(event); + break; + case STATE.PAN: + if (scope.enablePan === false) return; + handleMouseMovePan(event); + break; + } + } + function onMouseWheel(event) { + if (scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE && state !== STATE.ROTATE) return; + event.preventDefault(); + scope.dispatchEvent(startEvent); + handleMouseWheel(event); + scope.dispatchEvent(endEvent); + } + function onKeyDown(event) { + if (scope.enabled === false || scope.enablePan === false) return; + handleKeyDown(event); + } + function onTouchStart(event) { + trackPointer(event); + switch (pointers.length) { + case 1: + switch (scope.touches.ONE) { + case TOUCH.ROTATE: + if (scope.enableRotate === false) return; + handleTouchStartRotate(); + state = STATE.TOUCH_ROTATE; + break; + case TOUCH.PAN: + if (scope.enablePan === false) return; + handleTouchStartPan(); + state = STATE.TOUCH_PAN; + break; + default: state = STATE.NONE; + } + break; + case 2: + switch (scope.touches.TWO) { + case TOUCH.DOLLY_PAN: + if (scope.enableZoom === false && scope.enablePan === false) return; + handleTouchStartDollyPan(); + state = STATE.TOUCH_DOLLY_PAN; + break; + case TOUCH.DOLLY_ROTATE: + if (scope.enableZoom === false && scope.enableRotate === false) return; + handleTouchStartDollyRotate(); + state = STATE.TOUCH_DOLLY_ROTATE; + break; + default: state = STATE.NONE; + } + break; + default: state = STATE.NONE; + } + if (state !== STATE.NONE) scope.dispatchEvent(startEvent); + } + function onTouchMove(event) { + trackPointer(event); + switch (state) { + case STATE.TOUCH_ROTATE: + if (scope.enableRotate === false) return; + handleTouchMoveRotate(event); + scope.update(); + break; + case STATE.TOUCH_PAN: + if (scope.enablePan === false) return; + handleTouchMovePan(event); + scope.update(); + break; + case STATE.TOUCH_DOLLY_PAN: + if (scope.enableZoom === false && scope.enablePan === false) return; + handleTouchMoveDollyPan(event); + scope.update(); + break; + case STATE.TOUCH_DOLLY_ROTATE: + if (scope.enableZoom === false && scope.enableRotate === false) return; + handleTouchMoveDollyRotate(event); + scope.update(); + break; + default: state = STATE.NONE; + } + } + function onContextMenu(event) { + if (scope.enabled === false) return; + event.preventDefault(); + } + function addPointer(event) { + pointers.push(event); + } + function removePointer(event) { + delete pointerPositions[event.pointerId]; + for (let i = 0; i < pointers.length; i++) if (pointers[i].pointerId == event.pointerId) { + pointers.splice(i, 1); + return; + } + } + function trackPointer(event) { + let position = pointerPositions[event.pointerId]; + if (position === void 0) { + position = new Vector2(); + pointerPositions[event.pointerId] = position; + } + position.set(event.pageX, event.pageY); + } + function getSecondPointerPosition(event) { + return pointerPositions[(event.pointerId === pointers[0].pointerId ? pointers[1] : pointers[0]).pointerId]; + } + this.dollyIn = (dollyScale = getZoomScale()) => { + dollyIn(dollyScale); + scope.update(); + }; + this.dollyOut = (dollyScale = getZoomScale()) => { + dollyOut(dollyScale); + scope.update(); + }; + this.getScale = () => { + return scale; + }; + this.setScale = (newScale) => { + setScale(newScale); + scope.update(); + }; + this.getZoomScale = () => { + return getZoomScale(); + }; + if (domElement !== void 0) this.connect(domElement); + this.update(); + } +}; +var MapControls$1 = class extends OrbitControls$1 { + constructor(object, domElement) { + super(object, domElement); + this.screenSpacePanning = false; + this.mouseButtons.LEFT = MOUSE.PAN; + this.mouseButtons.RIGHT = MOUSE.ROTATE; + this.touches.ONE = TOUCH.PAN; + this.touches.TWO = TOUCH.DOLLY_ROTATE; + } +}; +//#endregion +//#region node_modules/three-stdlib/controls/ArcballControls.js +var __defProp$9 = Object.defineProperty; +var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { + enumerable: true, + configurable: true, + writable: true, + value +}) : obj[key] = value; +var __publicField$9 = (obj, key, value) => { + __defNormalProp$9(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var STATE = { + IDLE: Symbol(), + ROTATE: Symbol(), + PAN: Symbol(), + SCALE: Symbol(), + FOV: Symbol(), + FOCUS: Symbol(), + ZROTATE: Symbol(), + TOUCH_MULTI: Symbol(), + ANIMATION_FOCUS: Symbol(), + ANIMATION_ROTATE: Symbol() +}; +var INPUT = { + NONE: Symbol(), + ONE_FINGER: Symbol(), + ONE_FINGER_SWITCHED: Symbol(), + TWO_FINGER: Symbol(), + MULT_FINGER: Symbol(), + CURSOR: Symbol() +}; +var _center = { + x: 0, + y: 0 +}; +var _transformation = { + camera: /* @__PURE__ */ new Matrix4(), + gizmos: /* @__PURE__ */ new Matrix4() +}; +var _changeEvent = { type: "change" }; +var _startEvent = { type: "start" }; +var _endEvent = { type: "end" }; +var ArcballControls$1 = class extends EventDispatcher$1 { + constructor(camera, domElement = null, scene = null) { + super(); + __publicField$9(this, "camera"); + __publicField$9(this, "domElement"); + __publicField$9(this, "scene"); + __publicField$9(this, "mouseActions"); + __publicField$9(this, "_mouseOp"); + __publicField$9(this, "_v2_1"); + __publicField$9(this, "_v3_1"); + __publicField$9(this, "_v3_2"); + __publicField$9(this, "_m4_1"); + __publicField$9(this, "_m4_2"); + __publicField$9(this, "_quat"); + __publicField$9(this, "_translationMatrix"); + __publicField$9(this, "_rotationMatrix"); + __publicField$9(this, "_scaleMatrix"); + __publicField$9(this, "_rotationAxis"); + __publicField$9(this, "_cameraMatrixState"); + __publicField$9(this, "_cameraProjectionState"); + __publicField$9(this, "_fovState"); + __publicField$9(this, "_upState"); + __publicField$9(this, "_zoomState"); + __publicField$9(this, "_nearPos"); + __publicField$9(this, "_farPos"); + __publicField$9(this, "_gizmoMatrixState"); + __publicField$9(this, "_up0"); + __publicField$9(this, "_zoom0"); + __publicField$9(this, "_fov0"); + __publicField$9(this, "_initialNear"); + __publicField$9(this, "_nearPos0"); + __publicField$9(this, "_initialFar"); + __publicField$9(this, "_farPos0"); + __publicField$9(this, "_cameraMatrixState0"); + __publicField$9(this, "_gizmoMatrixState0"); + __publicField$9(this, "_button"); + __publicField$9(this, "_touchStart"); + __publicField$9(this, "_touchCurrent"); + __publicField$9(this, "_input"); + __publicField$9(this, "_switchSensibility"); + __publicField$9(this, "_startFingerDistance"); + __publicField$9(this, "_currentFingerDistance"); + __publicField$9(this, "_startFingerRotation"); + __publicField$9(this, "_currentFingerRotation"); + __publicField$9(this, "_devPxRatio"); + __publicField$9(this, "_downValid"); + __publicField$9(this, "_nclicks"); + __publicField$9(this, "_downEvents"); + __publicField$9(this, "_clickStart"); + __publicField$9(this, "_maxDownTime"); + __publicField$9(this, "_maxInterval"); + __publicField$9(this, "_posThreshold"); + __publicField$9(this, "_movementThreshold"); + __publicField$9(this, "_currentCursorPosition"); + __publicField$9(this, "_startCursorPosition"); + __publicField$9(this, "_grid"); + __publicField$9(this, "_gridPosition"); + __publicField$9(this, "_gizmos"); + __publicField$9(this, "_curvePts"); + __publicField$9(this, "_timeStart"); + __publicField$9(this, "_animationId"); + __publicField$9(this, "focusAnimationTime"); + __publicField$9(this, "_timePrev"); + __publicField$9(this, "_timeCurrent"); + __publicField$9(this, "_anglePrev"); + __publicField$9(this, "_angleCurrent"); + __publicField$9(this, "_cursorPosPrev"); + __publicField$9(this, "_cursorPosCurr"); + __publicField$9(this, "_wPrev"); + __publicField$9(this, "_wCurr"); + __publicField$9(this, "adjustNearFar"); + __publicField$9(this, "scaleFactor"); + __publicField$9(this, "dampingFactor"); + __publicField$9(this, "wMax"); + __publicField$9(this, "enableAnimations"); + __publicField$9(this, "enableGrid"); + __publicField$9(this, "cursorZoom"); + __publicField$9(this, "minFov"); + __publicField$9(this, "maxFov"); + __publicField$9(this, "enabled"); + __publicField$9(this, "enablePan"); + __publicField$9(this, "enableRotate"); + __publicField$9(this, "enableZoom"); + __publicField$9(this, "minDistance"); + __publicField$9(this, "maxDistance"); + __publicField$9(this, "minZoom"); + __publicField$9(this, "maxZoom"); + __publicField$9(this, "target"); + __publicField$9(this, "_currentTarget"); + __publicField$9(this, "_tbRadius"); + __publicField$9(this, "_state"); + __publicField$9(this, "onWindowResize", () => { + const scale = (this._gizmos.scale.x + this._gizmos.scale.y + this._gizmos.scale.z) / 3; + if (this.camera) { + const tbRadius = this.calculateTbRadius(this.camera); + if (tbRadius !== void 0) this._tbRadius = tbRadius; + } + const newRadius = this._tbRadius / scale; + const points = new EllipseCurve(0, 0, newRadius, newRadius).getPoints(this._curvePts); + const curveGeometry = new BufferGeometry().setFromPoints(points); + for (const gizmo in this._gizmos.children) { + const child = this._gizmos.children[gizmo]; + child.geometry = curveGeometry; + } + this.dispatchEvent(_changeEvent); + }); + __publicField$9(this, "onContextMenu", (event) => { + if (!this.enabled) return; + for (let i = 0; i < this.mouseActions.length; i++) if (this.mouseActions[i].mouse == 2) { + event.preventDefault(); + break; + } + }); + __publicField$9(this, "onPointerCancel", () => { + this._touchStart.splice(0, this._touchStart.length); + this._touchCurrent.splice(0, this._touchCurrent.length); + this._input = INPUT.NONE; + }); + __publicField$9(this, "onPointerDown", (event) => { + if (event.button == 0 && event.isPrimary) { + this._downValid = true; + this._downEvents.push(event); + } else this._downValid = false; + if (event.pointerType == "touch" && this._input != INPUT.CURSOR) { + this._touchStart.push(event); + this._touchCurrent.push(event); + switch (this._input) { + case INPUT.NONE: + this._input = INPUT.ONE_FINGER; + this.onSinglePanStart(event, "ROTATE"); + window.addEventListener("pointermove", this.onPointerMove); + window.addEventListener("pointerup", this.onPointerUp); + break; + case INPUT.ONE_FINGER: + case INPUT.ONE_FINGER_SWITCHED: + this._input = INPUT.TWO_FINGER; + this.onRotateStart(); + this.onPinchStart(); + this.onDoublePanStart(); + break; + case INPUT.TWO_FINGER: + this._input = INPUT.MULT_FINGER; + this.onTriplePanStart(); + break; + } + } else if (event.pointerType != "touch" && this._input == INPUT.NONE) { + let modifier = null; + if (event.ctrlKey || event.metaKey) modifier = "CTRL"; + else if (event.shiftKey) modifier = "SHIFT"; + this._mouseOp = this.getOpFromAction(event.button, modifier); + if (this._mouseOp) { + window.addEventListener("pointermove", this.onPointerMove); + window.addEventListener("pointerup", this.onPointerUp); + this._input = INPUT.CURSOR; + this._button = event.button; + this.onSinglePanStart(event, this._mouseOp); + } + } + }); + __publicField$9(this, "onPointerMove", (event) => { + if (event.pointerType == "touch" && this._input != INPUT.CURSOR) switch (this._input) { + case INPUT.ONE_FINGER: + this.updateTouchEvent(event); + this.onSinglePanMove(event, STATE.ROTATE); + break; + case INPUT.ONE_FINGER_SWITCHED: + if (this.calculatePointersDistance(this._touchCurrent[0], event) * this._devPxRatio >= this._switchSensibility) { + this._input = INPUT.ONE_FINGER; + this.updateTouchEvent(event); + this.onSinglePanStart(event, "ROTATE"); + break; + } + break; + case INPUT.TWO_FINGER: + this.updateTouchEvent(event); + this.onRotateMove(); + this.onPinchMove(); + this.onDoublePanMove(); + break; + case INPUT.MULT_FINGER: + this.updateTouchEvent(event); + this.onTriplePanMove(); + break; + } + else if (event.pointerType != "touch" && this._input == INPUT.CURSOR) { + let modifier = null; + if (event.ctrlKey || event.metaKey) modifier = "CTRL"; + else if (event.shiftKey) modifier = "SHIFT"; + const mouseOpState = this.getOpStateFromAction(this._button, modifier); + if (mouseOpState) this.onSinglePanMove(event, mouseOpState); + } + if (this._downValid) { + if (this.calculatePointersDistance(this._downEvents[this._downEvents.length - 1], event) * this._devPxRatio > this._movementThreshold) this._downValid = false; + } + }); + __publicField$9(this, "onPointerUp", (event) => { + if (event.pointerType == "touch" && this._input != INPUT.CURSOR) { + const nTouch = this._touchCurrent.length; + for (let i = 0; i < nTouch; i++) if (this._touchCurrent[i].pointerId == event.pointerId) { + this._touchCurrent.splice(i, 1); + this._touchStart.splice(i, 1); + break; + } + switch (this._input) { + case INPUT.ONE_FINGER: + case INPUT.ONE_FINGER_SWITCHED: + window.removeEventListener("pointermove", this.onPointerMove); + window.removeEventListener("pointerup", this.onPointerUp); + this._input = INPUT.NONE; + this.onSinglePanEnd(); + break; + case INPUT.TWO_FINGER: + this.onDoublePanEnd(); + this.onPinchEnd(); + this.onRotateEnd(); + this._input = INPUT.ONE_FINGER_SWITCHED; + break; + case INPUT.MULT_FINGER: + if (this._touchCurrent.length == 0) { + window.removeEventListener("pointermove", this.onPointerMove); + window.removeEventListener("pointerup", this.onPointerUp); + this._input = INPUT.NONE; + this.onTriplePanEnd(); + } + break; + } + } else if (event.pointerType != "touch" && this._input == INPUT.CURSOR) { + window.removeEventListener("pointermove", this.onPointerMove); + window.removeEventListener("pointerup", this.onPointerUp); + this._input = INPUT.NONE; + this.onSinglePanEnd(); + this._button = -1; + } + if (event.isPrimary) if (this._downValid) if (event.timeStamp - this._downEvents[this._downEvents.length - 1].timeStamp <= this._maxDownTime) if (this._nclicks == 0) { + this._nclicks = 1; + this._clickStart = performance.now(); + } else { + const clickInterval = event.timeStamp - this._clickStart; + const movement = this.calculatePointersDistance(this._downEvents[1], this._downEvents[0]) * this._devPxRatio; + if (clickInterval <= this._maxInterval && movement <= this._posThreshold) { + this._nclicks = 0; + this._downEvents.splice(0, this._downEvents.length); + this.onDoubleTap(event); + } else { + this._nclicks = 1; + this._downEvents.shift(); + this._clickStart = performance.now(); + } + } + else { + this._downValid = false; + this._nclicks = 0; + this._downEvents.splice(0, this._downEvents.length); + } + else { + this._nclicks = 0; + this._downEvents.splice(0, this._downEvents.length); + } + }); + __publicField$9(this, "onWheel", (event) => { + var _a, _b; + if (this.enabled && this.enableZoom && this.domElement) { + let modifier = null; + if (event.ctrlKey || event.metaKey) modifier = "CTRL"; + else if (event.shiftKey) modifier = "SHIFT"; + const mouseOp = this.getOpFromAction("WHEEL", modifier); + if (mouseOp) { + event.preventDefault(); + this.dispatchEvent(_startEvent); + const notchDeltaY = 125; + let sgn = event.deltaY / notchDeltaY; + let size = 1; + if (sgn > 0) size = 1 / this.scaleFactor; + else if (sgn < 0) size = this.scaleFactor; + switch (mouseOp) { + case "ZOOM": + this.updateTbState(STATE.SCALE, true); + if (sgn > 0) size = 1 / Math.pow(this.scaleFactor, sgn); + else if (sgn < 0) size = Math.pow(this.scaleFactor, -sgn); + if (this.cursorZoom && this.enablePan) { + let scalePoint; + if (this.camera instanceof OrthographicCamera$1) scalePoint = (_a = this.unprojectOnTbPlane(this.camera, event.clientX, event.clientY, this.domElement)) == null ? void 0 : _a.applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._gizmos.position); + if (this.camera instanceof PerspectiveCamera$1) scalePoint = (_b = this.unprojectOnTbPlane(this.camera, event.clientX, event.clientY, this.domElement)) == null ? void 0 : _b.applyQuaternion(this.camera.quaternion).add(this._gizmos.position); + if (scalePoint !== void 0) this.applyTransformMatrix(this.applyScale(size, scalePoint)); + } else this.applyTransformMatrix(this.applyScale(size, this._gizmos.position)); + if (this._grid) { + this.disposeGrid(); + this.drawGrid(); + } + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_changeEvent); + this.dispatchEvent(_endEvent); + break; + case "FOV": + if (this.camera instanceof PerspectiveCamera$1) { + this.updateTbState(STATE.FOV, true); + if (event.deltaX != 0) { + sgn = event.deltaX / notchDeltaY; + size = 1; + if (sgn > 0) size = 1 / Math.pow(this.scaleFactor, sgn); + else if (sgn < 0) size = Math.pow(this.scaleFactor, -sgn); + } + this._v3_1.setFromMatrixPosition(this._cameraMatrixState); + const x = this._v3_1.distanceTo(this._gizmos.position); + let xNew = x / size; + xNew = MathUtils.clamp(xNew, this.minDistance, this.maxDistance); + const y = x * Math.tan(MathUtils.DEG2RAD * this.camera.fov * .5); + let newFov = MathUtils.RAD2DEG * (Math.atan(y / xNew) * 2); + if (newFov > this.maxFov) newFov = this.maxFov; + else if (newFov < this.minFov) newFov = this.minFov; + size = x / (y / Math.tan(MathUtils.DEG2RAD * (newFov / 2))); + this.setFov(newFov); + this.applyTransformMatrix(this.applyScale(size, this._gizmos.position, false)); + } + if (this._grid) { + this.disposeGrid(); + this.drawGrid(); + } + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_changeEvent); + this.dispatchEvent(_endEvent); + break; + } + } + } + }); + __publicField$9(this, "onSinglePanStart", (event, operation) => { + if (this.enabled && this.domElement) { + this.dispatchEvent(_startEvent); + this.setCenter(event.clientX, event.clientY); + switch (operation) { + case "PAN": + if (!this.enablePan) return; + if (this._animationId != -1) { + cancelAnimationFrame(this._animationId); + this._animationId = -1; + this._timeStart = -1; + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + if (this.camera) { + this.updateTbState(STATE.PAN, true); + const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement); + if (rayDir !== void 0) this._startCursorPosition.copy(rayDir); + if (this.enableGrid) { + this.drawGrid(); + this.dispatchEvent(_changeEvent); + } + } + break; + case "ROTATE": + if (!this.enableRotate) return; + if (this._animationId != -1) { + cancelAnimationFrame(this._animationId); + this._animationId = -1; + this._timeStart = -1; + } + if (this.camera) { + this.updateTbState(STATE.ROTATE, true); + const rayDir = this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius); + if (rayDir !== void 0) this._startCursorPosition.copy(rayDir); + this.activateGizmos(true); + if (this.enableAnimations) { + this._timePrev = this._timeCurrent = performance.now(); + this._angleCurrent = this._anglePrev = 0; + this._cursorPosPrev.copy(this._startCursorPosition); + this._cursorPosCurr.copy(this._cursorPosPrev); + this._wCurr = 0; + this._wPrev = this._wCurr; + } + } + this.dispatchEvent(_changeEvent); + break; + case "FOV": + if (!this.enableZoom) return; + if (this.camera instanceof PerspectiveCamera$1) { + if (this._animationId != -1) { + cancelAnimationFrame(this._animationId); + this._animationId = -1; + this._timeStart = -1; + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + this.updateTbState(STATE.FOV, true); + this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * .5); + this._currentCursorPosition.copy(this._startCursorPosition); + } + break; + case "ZOOM": + if (!this.enableZoom) return; + if (this._animationId != -1) { + cancelAnimationFrame(this._animationId); + this._animationId = -1; + this._timeStart = -1; + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + this.updateTbState(STATE.SCALE, true); + this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * .5); + this._currentCursorPosition.copy(this._startCursorPosition); + break; + } + } + }); + __publicField$9(this, "onSinglePanMove", (event, opState) => { + if (this.enabled && this.domElement) { + const restart = opState != this._state; + this.setCenter(event.clientX, event.clientY); + switch (opState) { + case STATE.PAN: + if (this.enablePan && this.camera) if (restart) { + this.dispatchEvent(_endEvent); + this.dispatchEvent(_startEvent); + this.updateTbState(opState, true); + const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement); + if (rayDir !== void 0) this._startCursorPosition.copy(rayDir); + if (this.enableGrid) this.drawGrid(); + this.activateGizmos(false); + } else { + const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement); + if (rayDir !== void 0) this._currentCursorPosition.copy(rayDir); + this.applyTransformMatrix(this.pan(this._startCursorPosition, this._currentCursorPosition)); + } + break; + case STATE.ROTATE: + if (this.enableRotate && this.camera) if (restart) { + this.dispatchEvent(_endEvent); + this.dispatchEvent(_startEvent); + this.updateTbState(opState, true); + const rayDir = this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius); + if (rayDir !== void 0) this._startCursorPosition.copy(rayDir); + if (this.enableGrid) this.disposeGrid(); + this.activateGizmos(true); + } else { + const rayDir = this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius); + if (rayDir !== void 0) this._currentCursorPosition.copy(rayDir); + const distance = this._startCursorPosition.distanceTo(this._currentCursorPosition); + const angle = this._startCursorPosition.angleTo(this._currentCursorPosition); + const amount = Math.max(distance / this._tbRadius, angle); + this.applyTransformMatrix(this.rotate(this.calculateRotationAxis(this._startCursorPosition, this._currentCursorPosition), amount)); + if (this.enableAnimations) { + this._timePrev = this._timeCurrent; + this._timeCurrent = performance.now(); + this._anglePrev = this._angleCurrent; + this._angleCurrent = amount; + this._cursorPosPrev.copy(this._cursorPosCurr); + this._cursorPosCurr.copy(this._currentCursorPosition); + this._wPrev = this._wCurr; + this._wCurr = this.calculateAngularSpeed(this._anglePrev, this._angleCurrent, this._timePrev, this._timeCurrent); + } + } + break; + case STATE.SCALE: + if (this.enableZoom) if (restart) { + this.dispatchEvent(_endEvent); + this.dispatchEvent(_startEvent); + this.updateTbState(opState, true); + this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * .5); + this._currentCursorPosition.copy(this._startCursorPosition); + if (this.enableGrid) this.disposeGrid(); + this.activateGizmos(false); + } else { + const screenNotches = 8; + this._currentCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * .5); + const movement = this._currentCursorPosition.y - this._startCursorPosition.y; + let size = 1; + if (movement < 0) size = 1 / Math.pow(this.scaleFactor, -movement * screenNotches); + else if (movement > 0) size = Math.pow(this.scaleFactor, movement * screenNotches); + this.applyTransformMatrix(this.applyScale(size, this._gizmos.position)); + } + break; + case STATE.FOV: + if (this.enableZoom && this.camera instanceof PerspectiveCamera$1) if (restart) { + this.dispatchEvent(_endEvent); + this.dispatchEvent(_startEvent); + this.updateTbState(opState, true); + this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * .5); + this._currentCursorPosition.copy(this._startCursorPosition); + if (this.enableGrid) this.disposeGrid(); + this.activateGizmos(false); + } else { + const screenNotches = 8; + this._currentCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * .5); + const movement = this._currentCursorPosition.y - this._startCursorPosition.y; + let size = 1; + if (movement < 0) size = 1 / Math.pow(this.scaleFactor, -movement * screenNotches); + else if (movement > 0) size = Math.pow(this.scaleFactor, movement * screenNotches); + this._v3_1.setFromMatrixPosition(this._cameraMatrixState); + const x = this._v3_1.distanceTo(this._gizmos.position); + let xNew = x / size; + xNew = MathUtils.clamp(xNew, this.minDistance, this.maxDistance); + const y = x * Math.tan(MathUtils.DEG2RAD * this._fovState * .5); + let newFov = MathUtils.RAD2DEG * (Math.atan(y / xNew) * 2); + newFov = MathUtils.clamp(newFov, this.minFov, this.maxFov); + const newDistance = y / Math.tan(MathUtils.DEG2RAD * (newFov / 2)); + size = x / newDistance; + this._v3_2.setFromMatrixPosition(this._gizmoMatrixState); + this.setFov(newFov); + this.applyTransformMatrix(this.applyScale(size, this._v3_2, false)); + const direction = this._gizmos.position.clone().sub(this.camera.position).normalize().multiplyScalar(newDistance / x); + this._m4_1.makeTranslation(direction.x, direction.y, direction.z); + } + break; + } + this.dispatchEvent(_changeEvent); + } + }); + __publicField$9(this, "onSinglePanEnd", () => { + if (this._state == STATE.ROTATE) { + if (!this.enableRotate) return; + if (this.enableAnimations) if (performance.now() - this._timeCurrent < 120) { + const w = Math.abs((this._wPrev + this._wCurr) / 2); + const self = this; + this._animationId = window.requestAnimationFrame(function(t) { + self.updateTbState(STATE.ANIMATION_ROTATE, true); + const rotationAxis = self.calculateRotationAxis(self._cursorPosPrev, self._cursorPosCurr); + self.onRotationAnim(t, rotationAxis, Math.min(w, self.wMax)); + }); + } else { + this.updateTbState(STATE.IDLE, false); + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + else { + this.updateTbState(STATE.IDLE, false); + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + } else if (this._state == STATE.PAN || this._state == STATE.IDLE) { + this.updateTbState(STATE.IDLE, false); + if (this.enableGrid) this.disposeGrid(); + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + this.dispatchEvent(_endEvent); + }); + __publicField$9(this, "onDoubleTap", (event) => { + if (this.enabled && this.enablePan && this.scene && this.camera && this.domElement) { + this.dispatchEvent(_startEvent); + this.setCenter(event.clientX, event.clientY); + const hitP = this.unprojectOnObj(this.getCursorNDC(_center.x, _center.y, this.domElement), this.camera); + if (hitP && this.enableAnimations) { + const self = this; + if (this._animationId != -1) window.cancelAnimationFrame(this._animationId); + this._timeStart = -1; + this._animationId = window.requestAnimationFrame(function(t) { + self.updateTbState(STATE.ANIMATION_FOCUS, true); + self.onFocusAnim(t, hitP, self._cameraMatrixState, self._gizmoMatrixState); + }); + } else if (hitP && !this.enableAnimations) { + this.updateTbState(STATE.FOCUS, true); + this.focus(hitP, this.scaleFactor); + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_changeEvent); + } + } + this.dispatchEvent(_endEvent); + }); + __publicField$9(this, "onDoublePanStart", () => { + if (this.enabled && this.enablePan && this.camera && this.domElement) { + this.dispatchEvent(_startEvent); + this.updateTbState(STATE.PAN, true); + this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2); + const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement, true); + if (rayDir !== void 0) this._startCursorPosition.copy(rayDir); + this._currentCursorPosition.copy(this._startCursorPosition); + this.activateGizmos(false); + } + }); + __publicField$9(this, "onDoublePanMove", () => { + if (this.enabled && this.enablePan && this.camera && this.domElement) { + this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2); + if (this._state != STATE.PAN) { + this.updateTbState(STATE.PAN, true); + this._startCursorPosition.copy(this._currentCursorPosition); + } + const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement, true); + if (rayDir !== void 0) this._currentCursorPosition.copy(rayDir); + this.applyTransformMatrix(this.pan(this._startCursorPosition, this._currentCursorPosition, true)); + this.dispatchEvent(_changeEvent); + } + }); + __publicField$9(this, "onDoublePanEnd", () => { + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_endEvent); + }); + __publicField$9(this, "onRotateStart", () => { + var _a; + if (this.enabled && this.enableRotate) { + this.dispatchEvent(_startEvent); + this.updateTbState(STATE.ZROTATE, true); + this._startFingerRotation = this.getAngle(this._touchCurrent[1], this._touchCurrent[0]) + this.getAngle(this._touchStart[1], this._touchStart[0]); + this._currentFingerRotation = this._startFingerRotation; + (_a = this.camera) == null || _a.getWorldDirection(this._rotationAxis); + if (!this.enablePan && !this.enableZoom) this.activateGizmos(true); + } + }); + __publicField$9(this, "onRotateMove", () => { + var _a; + if (this.enabled && this.enableRotate && this.camera && this.domElement) { + this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2); + let rotationPoint; + if (this._state != STATE.ZROTATE) { + this.updateTbState(STATE.ZROTATE, true); + this._startFingerRotation = this._currentFingerRotation; + } + this._currentFingerRotation = this.getAngle(this._touchCurrent[1], this._touchCurrent[0]) + this.getAngle(this._touchStart[1], this._touchStart[0]); + if (!this.enablePan) rotationPoint = new Vector3().setFromMatrixPosition(this._gizmoMatrixState); + else if (this.camera) { + this._v3_2.setFromMatrixPosition(this._gizmoMatrixState); + rotationPoint = (_a = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement)) == null ? void 0 : _a.applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._v3_2); + } + const amount = MathUtils.DEG2RAD * (this._startFingerRotation - this._currentFingerRotation); + if (rotationPoint !== void 0) this.applyTransformMatrix(this.zRotate(rotationPoint, amount)); + this.dispatchEvent(_changeEvent); + } + }); + __publicField$9(this, "onRotateEnd", () => { + this.updateTbState(STATE.IDLE, false); + this.activateGizmos(false); + this.dispatchEvent(_endEvent); + }); + __publicField$9(this, "onPinchStart", () => { + if (this.enabled && this.enableZoom) { + this.dispatchEvent(_startEvent); + this.updateTbState(STATE.SCALE, true); + this._startFingerDistance = this.calculatePointersDistance(this._touchCurrent[0], this._touchCurrent[1]); + this._currentFingerDistance = this._startFingerDistance; + this.activateGizmos(false); + } + }); + __publicField$9(this, "onPinchMove", () => { + var _a, _b; + if (this.enabled && this.enableZoom && this.domElement) { + this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2); + const minDistance = 12; + if (this._state != STATE.SCALE) { + this._startFingerDistance = this._currentFingerDistance; + this.updateTbState(STATE.SCALE, true); + } + this._currentFingerDistance = Math.max(this.calculatePointersDistance(this._touchCurrent[0], this._touchCurrent[1]), minDistance * this._devPxRatio); + const amount = this._currentFingerDistance / this._startFingerDistance; + let scalePoint; + if (!this.enablePan) scalePoint = this._gizmos.position; + else if (this.camera instanceof OrthographicCamera$1) scalePoint = (_a = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement)) == null ? void 0 : _a.applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._gizmos.position); + else if (this.camera instanceof PerspectiveCamera$1) scalePoint = (_b = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement)) == null ? void 0 : _b.applyQuaternion(this.camera.quaternion).add(this._gizmos.position); + if (scalePoint !== void 0) this.applyTransformMatrix(this.applyScale(amount, scalePoint)); + this.dispatchEvent(_changeEvent); + } + }); + __publicField$9(this, "onPinchEnd", () => { + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_endEvent); + }); + __publicField$9(this, "onTriplePanStart", () => { + if (this.enabled && this.enableZoom && this.domElement) { + this.dispatchEvent(_startEvent); + this.updateTbState(STATE.SCALE, true); + let clientX = 0; + let clientY = 0; + const nFingers = this._touchCurrent.length; + for (let i = 0; i < nFingers; i++) { + clientX += this._touchCurrent[i].clientX; + clientY += this._touchCurrent[i].clientY; + } + this.setCenter(clientX / nFingers, clientY / nFingers); + this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * .5); + this._currentCursorPosition.copy(this._startCursorPosition); + } + }); + __publicField$9(this, "onTriplePanMove", () => { + if (this.enabled && this.enableZoom && this.camera && this.domElement) { + let clientX = 0; + let clientY = 0; + const nFingers = this._touchCurrent.length; + for (let i = 0; i < nFingers; i++) { + clientX += this._touchCurrent[i].clientX; + clientY += this._touchCurrent[i].clientY; + } + this.setCenter(clientX / nFingers, clientY / nFingers); + const screenNotches = 8; + this._currentCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * .5); + const movement = this._currentCursorPosition.y - this._startCursorPosition.y; + let size = 1; + if (movement < 0) size = 1 / Math.pow(this.scaleFactor, -movement * screenNotches); + else if (movement > 0) size = Math.pow(this.scaleFactor, movement * screenNotches); + this._v3_1.setFromMatrixPosition(this._cameraMatrixState); + const x = this._v3_1.distanceTo(this._gizmos.position); + let xNew = x / size; + xNew = MathUtils.clamp(xNew, this.minDistance, this.maxDistance); + const y = x * Math.tan(MathUtils.DEG2RAD * this._fovState * .5); + let newFov = MathUtils.RAD2DEG * (Math.atan(y / xNew) * 2); + newFov = MathUtils.clamp(newFov, this.minFov, this.maxFov); + const newDistance = y / Math.tan(MathUtils.DEG2RAD * (newFov / 2)); + size = x / newDistance; + this._v3_2.setFromMatrixPosition(this._gizmoMatrixState); + this.setFov(newFov); + this.applyTransformMatrix(this.applyScale(size, this._v3_2, false)); + const direction = this._gizmos.position.clone().sub(this.camera.position).normalize().multiplyScalar(newDistance / x); + this._m4_1.makeTranslation(direction.x, direction.y, direction.z); + this.dispatchEvent(_changeEvent); + } + }); + __publicField$9(this, "onTriplePanEnd", () => { + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_endEvent); + }); + /** + * Set _center's x/y coordinates + * @param {Number} clientX + * @param {Number} clientY + */ + __publicField$9(this, "setCenter", (clientX, clientY) => { + _center.x = clientX; + _center.y = clientY; + }); + /** + * Set default mouse actions + */ + __publicField$9(this, "initializeMouseActions", () => { + this.setMouseAction("PAN", 0, "CTRL"); + this.setMouseAction("PAN", 2); + this.setMouseAction("ROTATE", 0); + this.setMouseAction("ZOOM", "WHEEL"); + this.setMouseAction("ZOOM", 1); + this.setMouseAction("FOV", "WHEEL", "SHIFT"); + this.setMouseAction("FOV", 1, "SHIFT"); + }); + /** + * Set a new mouse action by specifying the operation to be performed and a mouse/key combination. In case of conflict, replaces the existing one + * @param {String} operation The operation to be performed ('PAN', 'ROTATE', 'ZOOM', 'FOV) + * @param {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches + * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed + * @returns {Boolean} True if the mouse action has been successfully added, false otherwise + */ + __publicField$9(this, "setMouseAction", (operation, mouse, key = null) => { + const operationInput = [ + "PAN", + "ROTATE", + "ZOOM", + "FOV" + ]; + const mouseInput = [ + 0, + 1, + 2, + "WHEEL" + ]; + const keyInput = [ + "CTRL", + "SHIFT", + null + ]; + let state; + if (!operationInput.includes(operation) || !mouseInput.includes(mouse) || !keyInput.includes(key)) return false; + if (mouse == "WHEEL") { + if (operation != "ZOOM" && operation != "FOV") return false; + } + switch (operation) { + case "PAN": + state = STATE.PAN; + break; + case "ROTATE": + state = STATE.ROTATE; + break; + case "ZOOM": + state = STATE.SCALE; + break; + case "FOV": + state = STATE.FOV; + break; + } + const action = { + operation, + mouse, + key, + state + }; + for (let i = 0; i < this.mouseActions.length; i++) if (this.mouseActions[i].mouse == action.mouse && this.mouseActions[i].key == action.key) { + this.mouseActions.splice(i, 1, action); + return true; + } + this.mouseActions.push(action); + return true; + }); + /** + * Return the operation associated to a mouse/keyboard combination + * @param {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches + * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed + * @returns The operation if it has been found, null otherwise + */ + __publicField$9(this, "getOpFromAction", (mouse, key) => { + let action; + for (let i = 0; i < this.mouseActions.length; i++) { + action = this.mouseActions[i]; + if (action.mouse == mouse && action.key == key) return action.operation; + } + if (key) for (let i = 0; i < this.mouseActions.length; i++) { + action = this.mouseActions[i]; + if (action.mouse == mouse && action.key == null) return action.operation; + } + return null; + }); + /** + * Get the operation associated to mouse and key combination and returns the corresponding FSA state + * @param {Number} mouse Mouse button + * @param {String} key Keyboard modifier + * @returns The FSA state obtained from the operation associated to mouse/keyboard combination + */ + __publicField$9(this, "getOpStateFromAction", (mouse, key) => { + let action; + for (let i = 0; i < this.mouseActions.length; i++) { + action = this.mouseActions[i]; + if (action.mouse == mouse && action.key == key) return action.state; + } + if (key) for (let i = 0; i < this.mouseActions.length; i++) { + action = this.mouseActions[i]; + if (action.mouse == mouse && action.key == null) return action.state; + } + return null; + }); + /** + * Calculate the angle between two pointers + * @param {PointerEvent} p1 + * @param {PointerEvent} p2 + * @returns {Number} The angle between two pointers in degrees + */ + __publicField$9(this, "getAngle", (p1, p2) => { + return Math.atan2(p2.clientY - p1.clientY, p2.clientX - p1.clientX) * 180 / Math.PI; + }); + /** + * Update a PointerEvent inside current pointerevents array + * @param {PointerEvent} event + */ + __publicField$9(this, "updateTouchEvent", (event) => { + for (let i = 0; i < this._touchCurrent.length; i++) if (this._touchCurrent[i].pointerId == event.pointerId) { + this._touchCurrent.splice(i, 1, event); + break; + } + }); + /** + * Calculate the angular speed + * @param {Number} p0 Position at t0 + * @param {Number} p1 Position at t1 + * @param {Number} t0 Initial time in milliseconds + * @param {Number} t1 Ending time in milliseconds + */ + __publicField$9(this, "calculateAngularSpeed", (p0, p1, t0, t1) => { + const s = p1 - p0; + const t = (t1 - t0) / 1e3; + if (t == 0) return 0; + return s / t; + }); + /** + * Calculate the distance between two pointers + * @param {PointerEvent} p0 The first pointer + * @param {PointerEvent} p1 The second pointer + * @returns {number} The distance between the two pointers + */ + __publicField$9(this, "calculatePointersDistance", (p0, p1) => { + return Math.sqrt(Math.pow(p1.clientX - p0.clientX, 2) + Math.pow(p1.clientY - p0.clientY, 2)); + }); + /** + * Calculate the rotation axis as the vector perpendicular between two vectors + * @param {Vector3} vec1 The first vector + * @param {Vector3} vec2 The second vector + * @returns {Vector3} The normalized rotation axis + */ + __publicField$9(this, "calculateRotationAxis", (vec1, vec2) => { + this._rotationMatrix.extractRotation(this._cameraMatrixState); + this._quat.setFromRotationMatrix(this._rotationMatrix); + this._rotationAxis.crossVectors(vec1, vec2).applyQuaternion(this._quat); + return this._rotationAxis.normalize().clone(); + }); + /** + * Calculate the trackball radius so that gizmo's diamater will be 2/3 of the minimum side of the camera frustum + * @param {Camera} camera + * @returns {Number} The trackball radius + */ + __publicField$9(this, "calculateTbRadius", (camera) => { + const factor = .67; + const distance = camera.position.distanceTo(this._gizmos.position); + if (camera instanceof PerspectiveCamera$1) { + const halfFovV = MathUtils.DEG2RAD * camera.fov * .5; + const halfFovH = Math.atan(camera.aspect * Math.tan(halfFovV)); + return Math.tan(Math.min(halfFovV, halfFovH)) * distance * factor; + } else if (camera instanceof OrthographicCamera$1) return Math.min(camera.top, camera.right) * factor; + }); + /** + * Focus operation consist of positioning the point of interest in front of the camera and a slightly zoom in + * @param {Vector3} point The point of interest + * @param {Number} size Scale factor + * @param {Number} amount Amount of operation to be completed (used for focus animations, default is complete full operation) + */ + __publicField$9(this, "focus", (point, size, amount = 1) => { + if (this.camera) { + const focusPoint = point.clone(); + focusPoint.sub(this._gizmos.position).multiplyScalar(amount); + this._translationMatrix.makeTranslation(focusPoint.x, focusPoint.y, focusPoint.z); + const gizmoStateTemp = this._gizmoMatrixState.clone(); + this._gizmoMatrixState.premultiply(this._translationMatrix); + this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); + const cameraStateTemp = this._cameraMatrixState.clone(); + this._cameraMatrixState.premultiply(this._translationMatrix); + this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale); + if (this.enableZoom) this.applyTransformMatrix(this.applyScale(size, this._gizmos.position)); + this._gizmoMatrixState.copy(gizmoStateTemp); + this._cameraMatrixState.copy(cameraStateTemp); + } + }); + /** + * Draw a grid and add it to the scene + */ + __publicField$9(this, "drawGrid", () => { + if (this.scene) { + const color = 8947848; + const multiplier = 3; + let size, divisions, maxLength, tick; + if (this.camera instanceof OrthographicCamera$1) { + const width = this.camera.right - this.camera.left; + const height = this.camera.bottom - this.camera.top; + maxLength = Math.max(width, height); + tick = maxLength / 20; + size = maxLength / this.camera.zoom * multiplier; + divisions = size / tick * this.camera.zoom; + } else if (this.camera instanceof PerspectiveCamera$1) { + const distance = this.camera.position.distanceTo(this._gizmos.position); + const halfFovV = MathUtils.DEG2RAD * this.camera.fov * .5; + const halfFovH = Math.atan(this.camera.aspect * Math.tan(halfFovV)); + maxLength = Math.tan(Math.max(halfFovV, halfFovH)) * distance * 2; + tick = maxLength / 20; + size = maxLength * multiplier; + divisions = size / tick; + } + if (this._grid == null && this.camera) { + this._grid = new GridHelper(size, divisions, color, color); + this._grid.position.copy(this._gizmos.position); + this._gridPosition.copy(this._grid.position); + this._grid.quaternion.copy(this.camera.quaternion); + this._grid.rotateX(Math.PI * .5); + this.scene.add(this._grid); + } + } + }); + __publicField$9(this, "connect", (domElement) => { + if (domElement === document) console.error("THREE.ArcballControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead."); + this.domElement = domElement; + this.domElement.style.touchAction = "none"; + this.domElement.addEventListener("contextmenu", this.onContextMenu); + this.domElement.addEventListener("pointerdown", this.onPointerDown); + this.domElement.addEventListener("pointercancel", this.onPointerCancel); + this.domElement.addEventListener("wheel", this.onWheel); + }); + /** + * Remove all listeners, stop animations and clean scene + */ + __publicField$9(this, "dispose", () => { + var _a, _b, _c, _d, _e; + if (this._animationId != -1) window.cancelAnimationFrame(this._animationId); + (_a = this.domElement) == null || _a.removeEventListener("pointerdown", this.onPointerDown); + (_b = this.domElement) == null || _b.removeEventListener("pointercancel", this.onPointerCancel); + (_c = this.domElement) == null || _c.removeEventListener("wheel", this.onWheel); + (_d = this.domElement) == null || _d.removeEventListener("contextmenu", this.onContextMenu); + window.removeEventListener("pointermove", this.onPointerMove); + window.removeEventListener("pointerup", this.onPointerUp); + window.removeEventListener("resize", this.onWindowResize); + (_e = this.scene) == null || _e.remove(this._gizmos); + this.disposeGrid(); + }); + /** + * remove the grid from the scene + */ + __publicField$9(this, "disposeGrid", () => { + if (this._grid && this.scene) { + this.scene.remove(this._grid); + this._grid = null; + } + }); + /** + * Compute the easing out cubic function for ease out effect in animation + * @param {Number} t The absolute progress of the animation in the bound of 0 (beginning of the) and 1 (ending of animation) + * @returns {Number} Result of easing out cubic at time t + */ + __publicField$9(this, "easeOutCubic", (t) => { + return 1 - Math.pow(1 - t, 3); + }); + /** + * Make rotation gizmos more or less visible + * @param {Boolean} isActive If true, make gizmos more visible + */ + __publicField$9(this, "activateGizmos", (isActive) => { + for (const gizmo of this._gizmos.children) gizmo.material.setValues({ opacity: isActive ? 1 : .6 }); + }); + /** + * Calculate the cursor position in NDC + * @param {number} x Cursor horizontal coordinate within the canvas + * @param {number} y Cursor vertical coordinate within the canvas + * @param {HTMLElement} canvas The canvas where the renderer draws its output + * @returns {Vector2} Cursor normalized position inside the canvas + */ + __publicField$9(this, "getCursorNDC", (cursorX, cursorY, canvas) => { + const canvasRect = canvas.getBoundingClientRect(); + this._v2_1.setX((cursorX - canvasRect.left) / canvasRect.width * 2 - 1); + this._v2_1.setY((canvasRect.bottom - cursorY) / canvasRect.height * 2 - 1); + return this._v2_1.clone(); + }); + /** + * Calculate the cursor position inside the canvas x/y coordinates with the origin being in the center of the canvas + * @param {Number} x Cursor horizontal coordinate within the canvas + * @param {Number} y Cursor vertical coordinate within the canvas + * @param {HTMLElement} canvas The canvas where the renderer draws its output + * @returns {Vector2} Cursor position inside the canvas + */ + __publicField$9(this, "getCursorPosition", (cursorX, cursorY, canvas) => { + this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas)); + if (this.camera instanceof OrthographicCamera$1) { + this._v2_1.x *= (this.camera.right - this.camera.left) * .5; + this._v2_1.y *= (this.camera.top - this.camera.bottom) * .5; + } + return this._v2_1.clone(); + }); + /** + * Set the camera to be controlled + * @param {Camera} camera The virtual camera to be controlled + */ + __publicField$9(this, "setCamera", (camera) => { + if (camera) { + camera.lookAt(this.target); + camera.updateMatrix(); + if (camera instanceof PerspectiveCamera$1) { + this._fov0 = camera.fov; + this._fovState = camera.fov; + } + this._cameraMatrixState0.copy(camera.matrix); + this._cameraMatrixState.copy(this._cameraMatrixState0); + this._cameraProjectionState.copy(camera.projectionMatrix); + this._zoom0 = camera.zoom; + this._zoomState = this._zoom0; + this._initialNear = camera.near; + this._nearPos0 = camera.position.distanceTo(this.target) - camera.near; + this._nearPos = this._initialNear; + this._initialFar = camera.far; + this._farPos0 = camera.position.distanceTo(this.target) - camera.far; + this._farPos = this._initialFar; + this._up0.copy(camera.up); + this._upState.copy(camera.up); + this.camera = camera; + this.camera.updateProjectionMatrix(); + const tbRadius = this.calculateTbRadius(camera); + if (tbRadius !== void 0) this._tbRadius = tbRadius; + this.makeGizmos(this.target, this._tbRadius); + } + }); + /** + * Creates the rotation gizmos matching trackball center and radius + * @param {Vector3} tbCenter The trackball center + * @param {number} tbRadius The trackball radius + */ + __publicField$9(this, "makeGizmos", (tbCenter, tbRadius) => { + const points = new EllipseCurve(0, 0, tbRadius, tbRadius).getPoints(this._curvePts); + const curveGeometry = new BufferGeometry().setFromPoints(points); + const curveMaterialX = new LineBasicMaterial({ + color: 16744576, + fog: false, + transparent: true, + opacity: .6 + }); + const curveMaterialY = new LineBasicMaterial({ + color: 8454016, + fog: false, + transparent: true, + opacity: .6 + }); + const curveMaterialZ = new LineBasicMaterial({ + color: 8421631, + fog: false, + transparent: true, + opacity: .6 + }); + const gizmoX = new Line$1(curveGeometry, curveMaterialX); + const gizmoY = new Line$1(curveGeometry, curveMaterialY); + const gizmoZ = new Line$1(curveGeometry, curveMaterialZ); + const rotation = Math.PI * .5; + gizmoX.rotation.x = rotation; + gizmoY.rotation.y = rotation; + this._gizmoMatrixState0.identity().setPosition(tbCenter); + this._gizmoMatrixState.copy(this._gizmoMatrixState0); + if (this.camera && this.camera.zoom != 1) { + const size = 1 / this.camera.zoom; + this._scaleMatrix.makeScale(size, size, size); + this._translationMatrix.makeTranslation(-tbCenter.x, -tbCenter.y, -tbCenter.z); + this._gizmoMatrixState.premultiply(this._translationMatrix).premultiply(this._scaleMatrix); + this._translationMatrix.makeTranslation(tbCenter.x, tbCenter.y, tbCenter.z); + this._gizmoMatrixState.premultiply(this._translationMatrix); + } + this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); + this._gizmos.clear(); + this._gizmos.add(gizmoX); + this._gizmos.add(gizmoY); + this._gizmos.add(gizmoZ); + }); + /** + * Perform animation for focus operation + * @param {Number} time Instant in which this function is called as performance.now() + * @param {Vector3} point Point of interest for focus operation + * @param {Matrix4} cameraMatrix Camera matrix + * @param {Matrix4} gizmoMatrix Gizmos matrix + */ + __publicField$9(this, "onFocusAnim", (time, point, cameraMatrix, gizmoMatrix) => { + if (this._timeStart == -1) this._timeStart = time; + if (this._state == STATE.ANIMATION_FOCUS) { + const animTime = (time - this._timeStart) / this.focusAnimationTime; + this._gizmoMatrixState.copy(gizmoMatrix); + if (animTime >= 1) { + this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); + this.focus(point, this.scaleFactor); + this._timeStart = -1; + this.updateTbState(STATE.IDLE, false); + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } else { + const amount = this.easeOutCubic(animTime); + const size = 1 - amount + this.scaleFactor * amount; + this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); + this.focus(point, size, amount); + this.dispatchEvent(_changeEvent); + const self = this; + this._animationId = window.requestAnimationFrame(function(t) { + self.onFocusAnim(t, point, cameraMatrix, gizmoMatrix.clone()); + }); + } + } else { + this._animationId = -1; + this._timeStart = -1; + } + }); + /** + * Perform animation for rotation operation + * @param {Number} time Instant in which this function is called as performance.now() + * @param {Vector3} rotationAxis Rotation axis + * @param {number} w0 Initial angular velocity + */ + __publicField$9(this, "onRotationAnim", (time, rotationAxis, w0) => { + if (this._timeStart == -1) { + this._anglePrev = 0; + this._angleCurrent = 0; + this._timeStart = time; + } + if (this._state == STATE.ANIMATION_ROTATE) { + const deltaTime = (time - this._timeStart) / 1e3; + if (w0 + -this.dampingFactor * deltaTime > 0) { + this._angleCurrent = .5 * -this.dampingFactor * Math.pow(deltaTime, 2) + w0 * deltaTime + 0; + this.applyTransformMatrix(this.rotate(rotationAxis, this._angleCurrent)); + this.dispatchEvent(_changeEvent); + const self = this; + this._animationId = window.requestAnimationFrame(function(t) { + self.onRotationAnim(t, rotationAxis, w0); + }); + } else { + this._animationId = -1; + this._timeStart = -1; + this.updateTbState(STATE.IDLE, false); + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + } else { + this._animationId = -1; + this._timeStart = -1; + if (this._state != STATE.ROTATE) { + this.activateGizmos(false); + this.dispatchEvent(_changeEvent); + } + } + }); + /** + * Perform pan operation moving camera between two points + * @param {Vector3} p0 Initial point + * @param {Vector3} p1 Ending point + * @param {Boolean} adjust If movement should be adjusted considering camera distance (Perspective only) + */ + __publicField$9(this, "pan", (p0, p1, adjust = false) => { + if (this.camera) { + const movement = p0.clone().sub(p1); + if (this.camera instanceof OrthographicCamera$1) movement.multiplyScalar(1 / this.camera.zoom); + if (this.camera instanceof PerspectiveCamera$1 && adjust) { + this._v3_1.setFromMatrixPosition(this._cameraMatrixState0); + this._v3_2.setFromMatrixPosition(this._gizmoMatrixState0); + const distanceFactor = this._v3_1.distanceTo(this._v3_2) / this.camera.position.distanceTo(this._gizmos.position); + movement.multiplyScalar(1 / distanceFactor); + } + this._v3_1.set(movement.x, movement.y, 0).applyQuaternion(this.camera.quaternion); + this._m4_1.makeTranslation(this._v3_1.x, this._v3_1.y, this._v3_1.z); + this.setTransformationMatrices(this._m4_1, this._m4_1); + } + return _transformation; + }); + /** + * Reset trackball + */ + __publicField$9(this, "reset", () => { + if (this.camera) { + this.camera.zoom = this._zoom0; + if (this.camera instanceof PerspectiveCamera$1) this.camera.fov = this._fov0; + this.camera.near = this._nearPos; + this.camera.far = this._farPos; + this._cameraMatrixState.copy(this._cameraMatrixState0); + this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale); + this.camera.up.copy(this._up0); + this.camera.updateMatrix(); + this.camera.updateProjectionMatrix(); + this._gizmoMatrixState.copy(this._gizmoMatrixState0); + this._gizmoMatrixState0.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); + this._gizmos.updateMatrix(); + const tbRadius = this.calculateTbRadius(this.camera); + if (tbRadius !== void 0) this._tbRadius = tbRadius; + this.makeGizmos(this._gizmos.position, this._tbRadius); + this.camera.lookAt(this._gizmos.position); + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_changeEvent); + } + }); + /** + * Rotate the camera around an axis passing by trackball's center + * @param {Vector3} axis Rotation axis + * @param {number} angle Angle in radians + * @returns {Object} Object with 'camera' field containing transformation matrix resulting from the operation to be applied to the camera + */ + __publicField$9(this, "rotate", (axis, angle) => { + const point = this._gizmos.position; + this._translationMatrix.makeTranslation(-point.x, -point.y, -point.z); + this._rotationMatrix.makeRotationAxis(axis, -angle); + this._m4_1.makeTranslation(point.x, point.y, point.z); + this._m4_1.multiply(this._rotationMatrix); + this._m4_1.multiply(this._translationMatrix); + this.setTransformationMatrices(this._m4_1); + return _transformation; + }); + __publicField$9(this, "copyState", () => { + if (this.camera) { + const state = JSON.stringify(this.camera instanceof OrthographicCamera$1 ? { arcballState: { + cameraFar: this.camera.far, + cameraMatrix: this.camera.matrix, + cameraNear: this.camera.near, + cameraUp: this.camera.up, + cameraZoom: this.camera.zoom, + gizmoMatrix: this._gizmos.matrix + } } : { arcballState: { + cameraFar: this.camera.far, + cameraFov: this.camera.fov, + cameraMatrix: this.camera.matrix, + cameraNear: this.camera.near, + cameraUp: this.camera.up, + cameraZoom: this.camera.zoom, + gizmoMatrix: this._gizmos.matrix + } }); + navigator.clipboard.writeText(state); + } + }); + __publicField$9(this, "pasteState", () => { + const self = this; + navigator.clipboard.readText().then(function resolved(value) { + self.setStateFromJSON(value); + }); + }); + /** + * Save the current state of the control. This can later be recovered with .reset + */ + __publicField$9(this, "saveState", () => { + if (!this.camera) return; + this._cameraMatrixState0.copy(this.camera.matrix); + this._gizmoMatrixState0.copy(this._gizmos.matrix); + this._nearPos = this.camera.near; + this._farPos = this.camera.far; + this._zoom0 = this.camera.zoom; + this._up0.copy(this.camera.up); + if (this.camera instanceof PerspectiveCamera$1) this._fov0 = this.camera.fov; + }); + /** + * Perform uniform scale operation around a given point + * @param {Number} size Scale factor + * @param {Vector3} point Point around which scale + * @param {Boolean} scaleGizmos If gizmos should be scaled (Perspective only) + * @returns {Object} Object with 'camera' and 'gizmo' fields containing transformation matrices resulting from the operation to be applied to the camera and gizmos + */ + __publicField$9(this, "applyScale", (size, point, scaleGizmos = true) => { + if (!this.camera) return; + const scalePoint = point.clone(); + let sizeInverse = 1 / size; + if (this.camera instanceof OrthographicCamera$1) { + this.camera.zoom = this._zoomState; + this.camera.zoom *= size; + if (this.camera.zoom > this.maxZoom) { + this.camera.zoom = this.maxZoom; + sizeInverse = this._zoomState / this.maxZoom; + } else if (this.camera.zoom < this.minZoom) { + this.camera.zoom = this.minZoom; + sizeInverse = this._zoomState / this.minZoom; + } + this.camera.updateProjectionMatrix(); + this._v3_1.setFromMatrixPosition(this._gizmoMatrixState); + this._scaleMatrix.makeScale(sizeInverse, sizeInverse, sizeInverse); + this._translationMatrix.makeTranslation(-this._v3_1.x, -this._v3_1.y, -this._v3_1.z); + this._m4_2.makeTranslation(this._v3_1.x, this._v3_1.y, this._v3_1.z).multiply(this._scaleMatrix); + this._m4_2.multiply(this._translationMatrix); + scalePoint.sub(this._v3_1); + const amount = scalePoint.clone().multiplyScalar(sizeInverse); + scalePoint.sub(amount); + this._m4_1.makeTranslation(scalePoint.x, scalePoint.y, scalePoint.z); + this._m4_2.premultiply(this._m4_1); + this.setTransformationMatrices(this._m4_1, this._m4_2); + return _transformation; + } + if (this.camera instanceof PerspectiveCamera$1) { + this._v3_1.setFromMatrixPosition(this._cameraMatrixState); + this._v3_2.setFromMatrixPosition(this._gizmoMatrixState); + let distance = this._v3_1.distanceTo(scalePoint); + let amount = distance - distance * sizeInverse; + const newDistance = distance - amount; + if (newDistance < this.minDistance) { + sizeInverse = this.minDistance / distance; + amount = distance - distance * sizeInverse; + } else if (newDistance > this.maxDistance) { + sizeInverse = this.maxDistance / distance; + amount = distance - distance * sizeInverse; + } + let direction = scalePoint.clone().sub(this._v3_1).normalize().multiplyScalar(amount); + this._m4_1.makeTranslation(direction.x, direction.y, direction.z); + if (scaleGizmos) { + const pos = this._v3_2; + distance = pos.distanceTo(scalePoint); + amount = distance - distance * sizeInverse; + direction = scalePoint.clone().sub(this._v3_2).normalize().multiplyScalar(amount); + this._translationMatrix.makeTranslation(pos.x, pos.y, pos.z); + this._scaleMatrix.makeScale(sizeInverse, sizeInverse, sizeInverse); + this._m4_2.makeTranslation(direction.x, direction.y, direction.z).multiply(this._translationMatrix); + this._m4_2.multiply(this._scaleMatrix); + this._translationMatrix.makeTranslation(-pos.x, -pos.y, -pos.z); + this._m4_2.multiply(this._translationMatrix); + this.setTransformationMatrices(this._m4_1, this._m4_2); + } else this.setTransformationMatrices(this._m4_1); + return _transformation; + } + }); + /** + * Set camera fov + * @param {Number} value fov to be setted + */ + __publicField$9(this, "setFov", (value) => { + if (this.camera instanceof PerspectiveCamera$1) { + this.camera.fov = MathUtils.clamp(value, this.minFov, this.maxFov); + this.camera.updateProjectionMatrix(); + } + }); + /** + * Set the trackball's center point + * @param {Number} x X coordinate + * @param {Number} y Y coordinate + * @param {Number} z Z coordinate + */ + __publicField$9(this, "setTarget", (x, y, z) => { + if (this.camera) { + this.target.set(x, y, z); + this._gizmos.position.set(x, y, z); + const tbRadius = this.calculateTbRadius(this.camera); + if (tbRadius !== void 0) this._tbRadius = tbRadius; + this.makeGizmos(this.target, this._tbRadius); + this.camera.lookAt(this.target); + } + }); + /** + * Rotate camera around its direction axis passing by a given point by a given angle + * @param {Vector3} point The point where the rotation axis is passing trough + * @param {Number} angle Angle in radians + * @returns The computed transormation matix + */ + __publicField$9(this, "zRotate", (point, angle) => { + this._rotationMatrix.makeRotationAxis(this._rotationAxis, angle); + this._translationMatrix.makeTranslation(-point.x, -point.y, -point.z); + this._m4_1.makeTranslation(point.x, point.y, point.z); + this._m4_1.multiply(this._rotationMatrix); + this._m4_1.multiply(this._translationMatrix); + this._v3_1.setFromMatrixPosition(this._gizmoMatrixState).sub(point); + this._v3_2.copy(this._v3_1).applyAxisAngle(this._rotationAxis, angle); + this._v3_2.sub(this._v3_1); + this._m4_2.makeTranslation(this._v3_2.x, this._v3_2.y, this._v3_2.z); + this.setTransformationMatrices(this._m4_1, this._m4_2); + return _transformation; + }); + /** + * Unproject the cursor on the 3D object surface + * @param {Vector2} cursor Cursor coordinates in NDC + * @param {Camera} camera Virtual camera + * @returns {Vector3} The point of intersection with the model, if exist, null otherwise + */ + __publicField$9(this, "unprojectOnObj", (cursor, camera) => { + if (!this.scene) return null; + const raycaster = new Raycaster(); + raycaster.near = camera.near; + raycaster.far = camera.far; + raycaster.setFromCamera(cursor, camera); + const intersect = raycaster.intersectObjects(this.scene.children, true); + for (let i = 0; i < intersect.length; i++) if (intersect[i].object.uuid != this._gizmos.uuid && intersect[i].face) return intersect[i].point.clone(); + return null; + }); + /** + * Unproject the cursor on the trackball surface + * @param {Camera} camera The virtual camera + * @param {Number} cursorX Cursor horizontal coordinate on screen + * @param {Number} cursorY Cursor vertical coordinate on screen + * @param {HTMLElement} canvas The canvas where the renderer draws its output + * @param {number} tbRadius The trackball radius + * @returns {Vector3} The unprojected point on the trackball surface + */ + __publicField$9(this, "unprojectOnTbSurface", (camera, cursorX, cursorY, canvas, tbRadius) => { + if (camera instanceof OrthographicCamera$1) { + this._v2_1.copy(this.getCursorPosition(cursorX, cursorY, canvas)); + this._v3_1.set(this._v2_1.x, this._v2_1.y, 0); + const x2 = Math.pow(this._v2_1.x, 2); + const y2 = Math.pow(this._v2_1.y, 2); + const r2 = Math.pow(this._tbRadius, 2); + if (x2 + y2 <= r2 * .5) this._v3_1.setZ(Math.sqrt(r2 - (x2 + y2))); + else this._v3_1.setZ(r2 * .5 / Math.sqrt(x2 + y2)); + return this._v3_1; + } + if (camera instanceof PerspectiveCamera$1) { + this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas)); + this._v3_1.set(this._v2_1.x, this._v2_1.y, -1); + this._v3_1.applyMatrix4(camera.projectionMatrixInverse); + const rayDir = this._v3_1.clone().normalize(); + const cameraGizmoDistance = camera.position.distanceTo(this._gizmos.position); + const radius2 = Math.pow(tbRadius, 2); + const h = this._v3_1.z; + const l = Math.sqrt(Math.pow(this._v3_1.x, 2) + Math.pow(this._v3_1.y, 2)); + if (l == 0) { + rayDir.set(this._v3_1.x, this._v3_1.y, tbRadius); + return rayDir; + } + const m = h / l; + const q = cameraGizmoDistance; + let a = Math.pow(m, 2) + 1; + let b = 2 * m * q; + let c = Math.pow(q, 2) - radius2; + let delta = Math.pow(b, 2) - 4 * a * c; + if (delta >= 0) { + this._v2_1.setX((-b - Math.sqrt(delta)) / (2 * a)); + this._v2_1.setY(m * this._v2_1.x + q); + if (MathUtils.RAD2DEG * this._v2_1.angle() >= 45) { + const rayLength2 = Math.sqrt(Math.pow(this._v2_1.x, 2) + Math.pow(cameraGizmoDistance - this._v2_1.y, 2)); + rayDir.multiplyScalar(rayLength2); + rayDir.z += cameraGizmoDistance; + return rayDir; + } + } + a = m; + b = q; + c = -radius2 * .5; + delta = Math.pow(b, 2) - 4 * a * c; + this._v2_1.setX((-b - Math.sqrt(delta)) / (2 * a)); + this._v2_1.setY(m * this._v2_1.x + q); + const rayLength = Math.sqrt(Math.pow(this._v2_1.x, 2) + Math.pow(cameraGizmoDistance - this._v2_1.y, 2)); + rayDir.multiplyScalar(rayLength); + rayDir.z += cameraGizmoDistance; + return rayDir; + } + }); + /** + * Unproject the cursor on the plane passing through the center of the trackball orthogonal to the camera + * @param {Camera} camera The virtual camera + * @param {Number} cursorX Cursor horizontal coordinate on screen + * @param {Number} cursorY Cursor vertical coordinate on screen + * @param {HTMLElement} canvas The canvas where the renderer draws its output + * @param {Boolean} initialDistance If initial distance between camera and gizmos should be used for calculations instead of current (Perspective only) + * @returns {Vector3} The unprojected point on the trackball plane + */ + __publicField$9(this, "unprojectOnTbPlane", (camera, cursorX, cursorY, canvas, initialDistance = false) => { + if (camera instanceof OrthographicCamera$1) { + this._v2_1.copy(this.getCursorPosition(cursorX, cursorY, canvas)); + this._v3_1.set(this._v2_1.x, this._v2_1.y, 0); + return this._v3_1.clone(); + } + if (camera instanceof PerspectiveCamera$1) { + this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas)); + this._v3_1.set(this._v2_1.x, this._v2_1.y, -1); + this._v3_1.applyMatrix4(camera.projectionMatrixInverse); + const rayDir = this._v3_1.clone().normalize(); + const h = this._v3_1.z; + const l = Math.sqrt(Math.pow(this._v3_1.x, 2) + Math.pow(this._v3_1.y, 2)); + let cameraGizmoDistance; + if (initialDistance) cameraGizmoDistance = this._v3_1.setFromMatrixPosition(this._cameraMatrixState0).distanceTo(this._v3_2.setFromMatrixPosition(this._gizmoMatrixState0)); + else cameraGizmoDistance = camera.position.distanceTo(this._gizmos.position); + if (l == 0) { + rayDir.set(0, 0, 0); + return rayDir; + } + const m = h / l; + const q = cameraGizmoDistance; + const x = -q / m; + const rayLength = Math.sqrt(Math.pow(q, 2) + Math.pow(x, 2)); + rayDir.multiplyScalar(rayLength); + rayDir.z = 0; + return rayDir; + } + }); + /** + * Update camera and gizmos state + */ + __publicField$9(this, "updateMatrixState", () => { + if (!this.camera) return; + this._cameraMatrixState.copy(this.camera.matrix); + this._gizmoMatrixState.copy(this._gizmos.matrix); + if (this.camera instanceof OrthographicCamera$1) { + this._cameraProjectionState.copy(this.camera.projectionMatrix); + this.camera.updateProjectionMatrix(); + this._zoomState = this.camera.zoom; + } + if (this.camera instanceof PerspectiveCamera$1) this._fovState = this.camera.fov; + }); + /** + * Update the trackball FSA + * @param {STATE} newState New state of the FSA + * @param {Boolean} updateMatrices If matriices state should be updated + */ + __publicField$9(this, "updateTbState", (newState, updateMatrices) => { + this._state = newState; + if (updateMatrices) this.updateMatrixState(); + }); + __publicField$9(this, "update", () => { + const EPS = 1e-6; + if (!this.target.equals(this._currentTarget) && this.camera) { + this._gizmos.position.set(this.target.x, this.target.y, this.target.z); + const tbRadius = this.calculateTbRadius(this.camera); + if (tbRadius !== void 0) this._tbRadius = tbRadius; + this.makeGizmos(this.target, this._tbRadius); + this._currentTarget.copy(this.target); + } + if (!this.camera) return; + if (this.camera instanceof OrthographicCamera$1) { + if (this.camera.zoom > this.maxZoom || this.camera.zoom < this.minZoom) { + const newZoom = MathUtils.clamp(this.camera.zoom, this.minZoom, this.maxZoom); + this.applyTransformMatrix(this.applyScale(newZoom / this.camera.zoom, this._gizmos.position, true)); + } + } + if (this.camera instanceof PerspectiveCamera$1) { + const distance = this.camera.position.distanceTo(this._gizmos.position); + if (distance > this.maxDistance + EPS || distance < this.minDistance - EPS) { + const newDistance = MathUtils.clamp(distance, this.minDistance, this.maxDistance); + this.applyTransformMatrix(this.applyScale(newDistance / distance, this._gizmos.position)); + this.updateMatrixState(); + } + if (this.camera.fov < this.minFov || this.camera.fov > this.maxFov) { + this.camera.fov = MathUtils.clamp(this.camera.fov, this.minFov, this.maxFov); + this.camera.updateProjectionMatrix(); + } + const oldRadius = this._tbRadius; + const tbRadius = this.calculateTbRadius(this.camera); + if (tbRadius !== void 0) this._tbRadius = tbRadius; + if (oldRadius < this._tbRadius - EPS || oldRadius > this._tbRadius + EPS) { + const scale = (this._gizmos.scale.x + this._gizmos.scale.y + this._gizmos.scale.z) / 3; + const newRadius = this._tbRadius / scale; + const points = new EllipseCurve(0, 0, newRadius, newRadius).getPoints(this._curvePts); + const curveGeometry = new BufferGeometry().setFromPoints(points); + for (const gizmo in this._gizmos.children) { + const child = this._gizmos.children[gizmo]; + child.geometry = curveGeometry; + } + } + } + this.camera.lookAt(this._gizmos.position); + }); + __publicField$9(this, "setStateFromJSON", (json) => { + const state = JSON.parse(json); + if (state.arcballState && this.camera) { + this._cameraMatrixState.fromArray(state.arcballState.cameraMatrix.elements); + this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale); + this.camera.up.copy(state.arcballState.cameraUp); + this.camera.near = state.arcballState.cameraNear; + this.camera.far = state.arcballState.cameraFar; + this.camera.zoom = state.arcballState.cameraZoom; + if (this.camera instanceof PerspectiveCamera$1) this.camera.fov = state.arcballState.cameraFov; + this._gizmoMatrixState.fromArray(state.arcballState.gizmoMatrix.elements); + this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); + this.camera.updateMatrix(); + this.camera.updateProjectionMatrix(); + this._gizmos.updateMatrix(); + const tbRadius = this.calculateTbRadius(this.camera); + if (tbRadius !== void 0) this._tbRadius = tbRadius; + const gizmoTmp = new Matrix4().copy(this._gizmoMatrixState0); + this.makeGizmos(this._gizmos.position, this._tbRadius); + this._gizmoMatrixState0.copy(gizmoTmp); + this.camera.lookAt(this._gizmos.position); + this.updateTbState(STATE.IDLE, false); + this.dispatchEvent(_changeEvent); + } + }); + this.camera = null; + this.domElement = domElement; + this.scene = scene; + this.mouseActions = []; + this._mouseOp = null; + this._v2_1 = new Vector2(); + this._v3_1 = new Vector3(); + this._v3_2 = new Vector3(); + this._m4_1 = new Matrix4(); + this._m4_2 = new Matrix4(); + this._quat = new Quaternion(); + this._translationMatrix = new Matrix4(); + this._rotationMatrix = new Matrix4(); + this._scaleMatrix = new Matrix4(); + this._rotationAxis = new Vector3(); + this._cameraMatrixState = new Matrix4(); + this._cameraProjectionState = new Matrix4(); + this._fovState = 1; + this._upState = new Vector3(); + this._zoomState = 1; + this._nearPos = 0; + this._farPos = 0; + this._gizmoMatrixState = new Matrix4(); + this._up0 = new Vector3(); + this._zoom0 = 1; + this._fov0 = 0; + this._initialNear = 0; + this._nearPos0 = 0; + this._initialFar = 0; + this._farPos0 = 0; + this._cameraMatrixState0 = new Matrix4(); + this._gizmoMatrixState0 = new Matrix4(); + this._button = -1; + this._touchStart = []; + this._touchCurrent = []; + this._input = INPUT.NONE; + this._switchSensibility = 32; + this._startFingerDistance = 0; + this._currentFingerDistance = 0; + this._startFingerRotation = 0; + this._currentFingerRotation = 0; + this._devPxRatio = 0; + this._downValid = true; + this._nclicks = 0; + this._downEvents = []; + this._clickStart = 0; + this._maxDownTime = 250; + this._maxInterval = 300; + this._posThreshold = 24; + this._movementThreshold = 24; + this._currentCursorPosition = new Vector3(); + this._startCursorPosition = new Vector3(); + this._grid = null; + this._gridPosition = new Vector3(); + this._gizmos = new Group(); + this._curvePts = 128; + this._timeStart = -1; + this._animationId = -1; + this.focusAnimationTime = 500; + this._timePrev = 0; + this._timeCurrent = 0; + this._anglePrev = 0; + this._angleCurrent = 0; + this._cursorPosPrev = new Vector3(); + this._cursorPosCurr = new Vector3(); + this._wPrev = 0; + this._wCurr = 0; + this.adjustNearFar = false; + this.scaleFactor = 1.1; + this.dampingFactor = 25; + this.wMax = 20; + this.enableAnimations = true; + this.enableGrid = false; + this.cursorZoom = false; + this.minFov = 5; + this.maxFov = 90; + this.enabled = true; + this.enablePan = true; + this.enableRotate = true; + this.enableZoom = true; + this.minDistance = 0; + this.maxDistance = Infinity; + this.minZoom = 0; + this.maxZoom = Infinity; + this.target = new Vector3(0, 0, 0); + this._currentTarget = new Vector3(0, 0, 0); + this._tbRadius = 1; + this._state = STATE.IDLE; + this.setCamera(camera); + if (this.scene) this.scene.add(this._gizmos); + this._devPxRatio = window.devicePixelRatio; + this.initializeMouseActions(); + if (this.domElement) this.connect(this.domElement); + window.addEventListener("resize", this.onWindowResize); + } + /** + * Apply a transformation matrix, to the camera and gizmos + * @param {Object} transformation Object containing matrices to apply to camera and gizmos + */ + applyTransformMatrix(transformation) { + if ((transformation == null ? void 0 : transformation.camera) && this.camera) { + this._m4_1.copy(this._cameraMatrixState).premultiply(transformation.camera); + this._m4_1.decompose(this.camera.position, this.camera.quaternion, this.camera.scale); + this.camera.updateMatrix(); + if (this._state == STATE.ROTATE || this._state == STATE.ZROTATE || this._state == STATE.ANIMATION_ROTATE) this.camera.up.copy(this._upState).applyQuaternion(this.camera.quaternion); + } + if (transformation == null ? void 0 : transformation.gizmos) { + this._m4_1.copy(this._gizmoMatrixState).premultiply(transformation.gizmos); + this._m4_1.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); + this._gizmos.updateMatrix(); + } + if ((this._state == STATE.SCALE || this._state == STATE.FOCUS || this._state == STATE.ANIMATION_FOCUS) && this.camera) { + const tbRadius = this.calculateTbRadius(this.camera); + if (tbRadius !== void 0) this._tbRadius = tbRadius; + if (this.adjustNearFar) { + const cameraDistance = this.camera.position.distanceTo(this._gizmos.position); + const bb = new Box3(); + bb.setFromObject(this._gizmos); + const sphere = new Sphere$1(); + bb.getBoundingSphere(sphere); + const adjustedNearPosition = Math.max(this._nearPos0, sphere.radius + sphere.center.length()); + const regularNearPosition = cameraDistance - this._initialNear; + const minNearPos = Math.min(adjustedNearPosition, regularNearPosition); + this.camera.near = cameraDistance - minNearPos; + const adjustedFarPosition = Math.min(this._farPos0, -sphere.radius + sphere.center.length()); + const regularFarPosition = cameraDistance - this._initialFar; + const minFarPos = Math.min(adjustedFarPosition, regularFarPosition); + this.camera.far = cameraDistance - minFarPos; + this.camera.updateProjectionMatrix(); + } else { + let update = false; + if (this.camera.near != this._initialNear) { + this.camera.near = this._initialNear; + update = true; + } + if (this.camera.far != this._initialFar) { + this.camera.far = this._initialFar; + update = true; + } + if (update) this.camera.updateProjectionMatrix(); + } + } + } + /** + * Set gizmos visibility + * @param {Boolean} value Value of gizmos visibility + */ + setGizmosVisible(value) { + this._gizmos.visible = value; + this.dispatchEvent(_changeEvent); + } + /** + * Set values in transformation object + * @param {Matrix4} camera Transformation to be applied to the camera + * @param {Matrix4} gizmos Transformation to be applied to gizmos + */ + setTransformationMatrices(camera = null, gizmos = null) { + if (camera) if (_transformation.camera) _transformation.camera.copy(camera); + else _transformation.camera = camera.clone(); + else _transformation.camera = null; + if (gizmos) if (_transformation.gizmos) _transformation.gizmos.copy(gizmos); + else _transformation.gizmos = gizmos.clone(); + else _transformation.gizmos = null; + } +}; +//#endregion +//#region node_modules/three-stdlib/controls/FlyControls.js +var __defProp$8 = Object.defineProperty; +var __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { + enumerable: true, + configurable: true, + writable: true, + value +}) : obj[key] = value; +var __publicField$8 = (obj, key, value) => { + __defNormalProp$8(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +function contextmenu(event) { + event.preventDefault(); +} +var FlyControls$1 = class extends EventDispatcher$1 { + constructor(object, domElement) { + super(); + __publicField$8(this, "object"); + __publicField$8(this, "domElement", null); + __publicField$8(this, "movementSpeed", 1); + __publicField$8(this, "rollSpeed", .005); + __publicField$8(this, "dragToLook", false); + __publicField$8(this, "autoForward", false); + __publicField$8(this, "changeEvent", { type: "change" }); + __publicField$8(this, "EPS", 1e-6); + __publicField$8(this, "tmpQuaternion", new Quaternion()); + __publicField$8(this, "mouseStatus", 0); + __publicField$8(this, "movementSpeedMultiplier", 1); + __publicField$8(this, "moveState", { + up: 0, + down: 0, + left: 0, + right: 0, + forward: 0, + back: 0, + pitchUp: 0, + pitchDown: 0, + yawLeft: 0, + yawRight: 0, + rollLeft: 0, + rollRight: 0 + }); + __publicField$8(this, "moveVector", new Vector3(0, 0, 0)); + __publicField$8(this, "rotationVector", new Vector3(0, 0, 0)); + __publicField$8(this, "keydown", (event) => { + if (event.altKey) return; + switch (event.code) { + case "ShiftLeft": + case "ShiftRight": + this.movementSpeedMultiplier = .1; + break; + case "KeyW": + this.moveState.forward = 1; + break; + case "KeyS": + this.moveState.back = 1; + break; + case "KeyA": + this.moveState.left = 1; + break; + case "KeyD": + this.moveState.right = 1; + break; + case "KeyR": + this.moveState.up = 1; + break; + case "KeyF": + this.moveState.down = 1; + break; + case "ArrowUp": + this.moveState.pitchUp = 1; + break; + case "ArrowDown": + this.moveState.pitchDown = 1; + break; + case "ArrowLeft": + this.moveState.yawLeft = 1; + break; + case "ArrowRight": + this.moveState.yawRight = 1; + break; + case "KeyQ": + this.moveState.rollLeft = 1; + break; + case "KeyE": + this.moveState.rollRight = 1; + break; + } + this.updateMovementVector(); + this.updateRotationVector(); + }); + __publicField$8(this, "keyup", (event) => { + switch (event.code) { + case "ShiftLeft": + case "ShiftRight": + this.movementSpeedMultiplier = 1; + break; + case "KeyW": + this.moveState.forward = 0; + break; + case "KeyS": + this.moveState.back = 0; + break; + case "KeyA": + this.moveState.left = 0; + break; + case "KeyD": + this.moveState.right = 0; + break; + case "KeyR": + this.moveState.up = 0; + break; + case "KeyF": + this.moveState.down = 0; + break; + case "ArrowUp": + this.moveState.pitchUp = 0; + break; + case "ArrowDown": + this.moveState.pitchDown = 0; + break; + case "ArrowLeft": + this.moveState.yawLeft = 0; + break; + case "ArrowRight": + this.moveState.yawRight = 0; + break; + case "KeyQ": + this.moveState.rollLeft = 0; + break; + case "KeyE": + this.moveState.rollRight = 0; + break; + } + this.updateMovementVector(); + this.updateRotationVector(); + }); + __publicField$8(this, "pointerdown", (event) => { + if (this.dragToLook) this.mouseStatus++; + else { + switch (event.button) { + case 0: + this.moveState.forward = 1; + break; + case 2: + this.moveState.back = 1; + break; + } + this.updateMovementVector(); + } + }); + __publicField$8(this, "pointermove", (event) => { + if (!this.dragToLook || this.mouseStatus > 0) { + const container = this.getContainerDimensions(); + const halfWidth = container.size[0] / 2; + const halfHeight = container.size[1] / 2; + this.moveState.yawLeft = -(event.pageX - container.offset[0] - halfWidth) / halfWidth; + this.moveState.pitchDown = (event.pageY - container.offset[1] - halfHeight) / halfHeight; + this.updateRotationVector(); + } + }); + __publicField$8(this, "pointerup", (event) => { + if (this.dragToLook) { + this.mouseStatus--; + this.moveState.yawLeft = this.moveState.pitchDown = 0; + } else { + switch (event.button) { + case 0: + this.moveState.forward = 0; + break; + case 2: + this.moveState.back = 0; + break; + } + this.updateMovementVector(); + } + this.updateRotationVector(); + }); + __publicField$8(this, "lastQuaternion", new Quaternion()); + __publicField$8(this, "lastPosition", new Vector3()); + __publicField$8(this, "update", (delta) => { + const moveMult = delta * this.movementSpeed; + const rotMult = delta * this.rollSpeed; + this.object.translateX(this.moveVector.x * moveMult); + this.object.translateY(this.moveVector.y * moveMult); + this.object.translateZ(this.moveVector.z * moveMult); + this.tmpQuaternion.set(this.rotationVector.x * rotMult, this.rotationVector.y * rotMult, this.rotationVector.z * rotMult, 1).normalize(); + this.object.quaternion.multiply(this.tmpQuaternion); + if (this.lastPosition.distanceToSquared(this.object.position) > this.EPS || 8 * (1 - this.lastQuaternion.dot(this.object.quaternion)) > this.EPS) { + this.dispatchEvent(this.changeEvent); + this.lastQuaternion.copy(this.object.quaternion); + this.lastPosition.copy(this.object.position); + } + }); + __publicField$8(this, "updateMovementVector", () => { + const forward = this.moveState.forward || this.autoForward && !this.moveState.back ? 1 : 0; + this.moveVector.x = -this.moveState.left + this.moveState.right; + this.moveVector.y = -this.moveState.down + this.moveState.up; + this.moveVector.z = -forward + this.moveState.back; + }); + __publicField$8(this, "updateRotationVector", () => { + this.rotationVector.x = -this.moveState.pitchDown + this.moveState.pitchUp; + this.rotationVector.y = -this.moveState.yawRight + this.moveState.yawLeft; + this.rotationVector.z = -this.moveState.rollRight + this.moveState.rollLeft; + }); + __publicField$8(this, "getContainerDimensions", () => { + if (this.domElement != document && !(this.domElement instanceof Document)) return { + size: [this.domElement.offsetWidth, this.domElement.offsetHeight], + offset: [this.domElement.offsetLeft, this.domElement.offsetTop] + }; + else return { + size: [window.innerWidth, window.innerHeight], + offset: [0, 0] + }; + }); + __publicField$8(this, "connect", (domElement) => { + this.domElement = domElement; + if (!(domElement instanceof Document)) domElement.setAttribute("tabindex", -1); + this.domElement.addEventListener("contextmenu", contextmenu); + this.domElement.addEventListener("pointermove", this.pointermove); + this.domElement.addEventListener("pointerdown", this.pointerdown); + this.domElement.addEventListener("pointerup", this.pointerup); + window.addEventListener("keydown", this.keydown); + window.addEventListener("keyup", this.keyup); + }); + __publicField$8(this, "dispose", () => { + this.domElement.removeEventListener("contextmenu", contextmenu); + this.domElement.removeEventListener("pointermove", this.pointermove); + this.domElement.removeEventListener("pointerdown", this.pointerdown); + this.domElement.removeEventListener("pointerup", this.pointerup); + window.removeEventListener("keydown", this.keydown); + window.removeEventListener("keyup", this.keyup); + }); + this.object = object; + if (domElement !== void 0) this.connect(domElement); + this.updateMovementVector(); + this.updateRotationVector(); + } +}; +//#endregion +//#region node_modules/three-stdlib/postprocessing/Pass.js +var __defProp$7 = Object.defineProperty; +var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { + enumerable: true, + configurable: true, + writable: true, + value +}) : obj[key] = value; +var __publicField$7 = (obj, key, value) => { + __defNormalProp$7(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var Pass = class { + constructor() { + __publicField$7(this, "enabled", true); + __publicField$7(this, "needsSwap", true); + __publicField$7(this, "clear", false); + __publicField$7(this, "renderToScreen", false); + } + setSize(width, height) {} + render(renderer, writeBuffer, readBuffer, deltaTime, maskActive) { + console.error("THREE.Pass: .render() must be implemented in derived pass."); + } + dispose() {} +}; +var FullScreenQuad = class { + constructor(material) { + __publicField$7(this, "camera", new OrthographicCamera$1(-1, 1, 1, -1, 0, 1)); + __publicField$7(this, "geometry", new PlaneGeometry(2, 2)); + __publicField$7(this, "mesh"); + this.mesh = new Mesh(this.geometry, material); + } + get material() { + return this.mesh.material; + } + set material(value) { + this.mesh.material = value; + } + dispose() { + this.mesh.geometry.dispose(); + } + render(renderer) { + renderer.render(this.mesh, this.camera); + } +}; +//#endregion +//#region node_modules/three-stdlib/postprocessing/ShaderPass.js +var __defProp$6 = Object.defineProperty; +var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { + enumerable: true, + configurable: true, + writable: true, + value +}) : obj[key] = value; +var __publicField$6 = (obj, key, value) => { + __defNormalProp$6(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var ShaderPass = class extends Pass { + constructor(shader, textureID = "tDiffuse") { + super(); + __publicField$6(this, "textureID"); + __publicField$6(this, "uniforms"); + __publicField$6(this, "material"); + __publicField$6(this, "fsQuad"); + this.textureID = textureID; + if (shader instanceof ShaderMaterial) { + this.uniforms = shader.uniforms; + this.material = shader; + } else { + this.uniforms = UniformsUtils.clone(shader.uniforms); + this.material = new ShaderMaterial({ + defines: Object.assign({}, shader.defines), + uniforms: this.uniforms, + vertexShader: shader.vertexShader, + fragmentShader: shader.fragmentShader + }); + } + this.fsQuad = new FullScreenQuad(this.material); + } + render(renderer, writeBuffer, readBuffer) { + if (this.uniforms[this.textureID]) this.uniforms[this.textureID].value = readBuffer.texture; + this.fsQuad.material = this.material; + if (this.renderToScreen) { + renderer.setRenderTarget(null); + this.fsQuad.render(renderer); + } else { + renderer.setRenderTarget(writeBuffer); + if (this.clear) renderer.clear(renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil); + this.fsQuad.render(renderer); + } + } + dispose() { + this.fsQuad.dispose(); + this.material.dispose(); + } +}; +//#endregion +//#region node_modules/three-stdlib/shaders/CopyShader.js +var CopyShader = { + uniforms: { + tDiffuse: { value: null }, + opacity: { value: 1 } + }, + vertexShader: ` + varying vec2 vUv; + + void main() { + + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); + + } + `, + fragmentShader: ` + uniform float opacity; + + uniform sampler2D tDiffuse; + + varying vec2 vUv; + + void main() { + + vec4 texel = texture2D( tDiffuse, vUv ); + gl_FragColor = opacity * texel; + + } + ` +}; +//#endregion +//#region node_modules/three-stdlib/postprocessing/MaskPass.js +var __defProp$5 = Object.defineProperty; +var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { + enumerable: true, + configurable: true, + writable: true, + value +}) : obj[key] = value; +var __publicField$5 = (obj, key, value) => { + __defNormalProp$5(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var MaskPass = class extends Pass { + constructor(scene, camera) { + super(); + __publicField$5(this, "scene"); + __publicField$5(this, "camera"); + __publicField$5(this, "inverse"); + this.scene = scene; + this.camera = camera; + this.clear = true; + this.needsSwap = false; + this.inverse = false; + } + render(renderer, writeBuffer, readBuffer) { + const context = renderer.getContext(); + const state = renderer.state; + state.buffers.color.setMask(false); + state.buffers.depth.setMask(false); + state.buffers.color.setLocked(true); + state.buffers.depth.setLocked(true); + let writeValue, clearValue; + if (this.inverse) { + writeValue = 0; + clearValue = 1; + } else { + writeValue = 1; + clearValue = 0; + } + state.buffers.stencil.setTest(true); + state.buffers.stencil.setOp(context.REPLACE, context.REPLACE, context.REPLACE); + state.buffers.stencil.setFunc(context.ALWAYS, writeValue, 4294967295); + state.buffers.stencil.setClear(clearValue); + state.buffers.stencil.setLocked(true); + renderer.setRenderTarget(readBuffer); + if (this.clear) renderer.clear(); + renderer.render(this.scene, this.camera); + renderer.setRenderTarget(writeBuffer); + if (this.clear) renderer.clear(); + renderer.render(this.scene, this.camera); + state.buffers.color.setLocked(false); + state.buffers.depth.setLocked(false); + state.buffers.stencil.setLocked(false); + state.buffers.stencil.setFunc(context.EQUAL, 1, 4294967295); + state.buffers.stencil.setOp(context.KEEP, context.KEEP, context.KEEP); + state.buffers.stencil.setLocked(true); + } +}; +var ClearMaskPass = class extends Pass { + constructor() { + super(); + this.needsSwap = false; + } + render(renderer) { + renderer.state.buffers.stencil.setLocked(false); + renderer.state.buffers.stencil.setTest(false); + } +}; +//#endregion +//#region node_modules/three-stdlib/postprocessing/EffectComposer.js +var __defProp$4 = Object.defineProperty; +var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { + enumerable: true, + configurable: true, + writable: true, + value +}) : obj[key] = value; +var __publicField$4 = (obj, key, value) => { + __defNormalProp$4(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var EffectComposer = class { + constructor(renderer, renderTarget) { + __publicField$4(this, "renderer"); + __publicField$4(this, "_pixelRatio"); + __publicField$4(this, "_width"); + __publicField$4(this, "_height"); + __publicField$4(this, "renderTarget1"); + __publicField$4(this, "renderTarget2"); + __publicField$4(this, "writeBuffer"); + __publicField$4(this, "readBuffer"); + __publicField$4(this, "renderToScreen"); + __publicField$4(this, "passes", []); + __publicField$4(this, "copyPass"); + __publicField$4(this, "clock"); + this.renderer = renderer; + if (renderTarget === void 0) { + const parameters = { + minFilter: LinearFilter, + magFilter: LinearFilter, + format: RGBAFormat + }; + const size = renderer.getSize(new Vector2()); + this._pixelRatio = renderer.getPixelRatio(); + this._width = size.width; + this._height = size.height; + renderTarget = new WebGLRenderTarget(this._width * this._pixelRatio, this._height * this._pixelRatio, parameters); + renderTarget.texture.name = "EffectComposer.rt1"; + } else { + this._pixelRatio = 1; + this._width = renderTarget.width; + this._height = renderTarget.height; + } + this.renderTarget1 = renderTarget; + this.renderTarget2 = renderTarget.clone(); + this.renderTarget2.texture.name = "EffectComposer.rt2"; + this.writeBuffer = this.renderTarget1; + this.readBuffer = this.renderTarget2; + this.renderToScreen = true; + if (CopyShader === void 0) console.error("THREE.EffectComposer relies on CopyShader"); + if (ShaderPass === void 0) console.error("THREE.EffectComposer relies on ShaderPass"); + this.copyPass = new ShaderPass(CopyShader); + this.copyPass.material.blending = 0; + this.clock = new Clock(); + } + swapBuffers() { + const tmp = this.readBuffer; + this.readBuffer = this.writeBuffer; + this.writeBuffer = tmp; + } + addPass(pass) { + this.passes.push(pass); + pass.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio); + } + insertPass(pass, index) { + this.passes.splice(index, 0, pass); + pass.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio); + } + removePass(pass) { + const index = this.passes.indexOf(pass); + if (index !== -1) this.passes.splice(index, 1); + } + isLastEnabledPass(passIndex) { + for (let i = passIndex + 1; i < this.passes.length; i++) if (this.passes[i].enabled) return false; + return true; + } + render(deltaTime) { + if (deltaTime === void 0) deltaTime = this.clock.getDelta(); + const currentRenderTarget = this.renderer.getRenderTarget(); + let maskActive = false; + const il = this.passes.length; + for (let i = 0; i < il; i++) { + const pass = this.passes[i]; + if (pass.enabled === false) continue; + pass.renderToScreen = this.renderToScreen && this.isLastEnabledPass(i); + pass.render(this.renderer, this.writeBuffer, this.readBuffer, deltaTime, maskActive); + if (pass.needsSwap) { + if (maskActive) { + const context = this.renderer.getContext(); + const stencil = this.renderer.state.buffers.stencil; + stencil.setFunc(context.NOTEQUAL, 1, 4294967295); + this.copyPass.render(this.renderer, this.writeBuffer, this.readBuffer, deltaTime); + stencil.setFunc(context.EQUAL, 1, 4294967295); + } + this.swapBuffers(); + } + if (MaskPass !== void 0) { + if (pass instanceof MaskPass) maskActive = true; + else if (pass instanceof ClearMaskPass) maskActive = false; + } + } + this.renderer.setRenderTarget(currentRenderTarget); + } + reset(renderTarget) { + if (renderTarget === void 0) { + const size = this.renderer.getSize(new Vector2()); + this._pixelRatio = this.renderer.getPixelRatio(); + this._width = size.width; + this._height = size.height; + renderTarget = this.renderTarget1.clone(); + renderTarget.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio); + } + this.renderTarget1.dispose(); + this.renderTarget2.dispose(); + this.renderTarget1 = renderTarget; + this.renderTarget2 = renderTarget.clone(); + this.writeBuffer = this.renderTarget1; + this.readBuffer = this.renderTarget2; + } + setSize(width, height) { + this._width = width; + this._height = height; + const effectiveWidth = this._width * this._pixelRatio; + const effectiveHeight = this._height * this._pixelRatio; + this.renderTarget1.setSize(effectiveWidth, effectiveHeight); + this.renderTarget2.setSize(effectiveWidth, effectiveHeight); + for (let i = 0; i < this.passes.length; i++) this.passes[i].setSize(effectiveWidth, effectiveHeight); + } + setPixelRatio(pixelRatio) { + this._pixelRatio = pixelRatio; + this.setSize(this._width, this._height); + } + dispose() { + this.renderTarget1.dispose(); + this.renderTarget2.dispose(); + this.copyPass.dispose(); + } +}; +//#endregion +//#region node_modules/three-stdlib/postprocessing/RenderPass.js +var __defProp$3 = Object.defineProperty; +var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { + enumerable: true, + configurable: true, + writable: true, + value +}) : obj[key] = value; +var __publicField$3 = (obj, key, value) => { + __defNormalProp$3(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var RenderPass = class extends Pass { + constructor(scene, camera, overrideMaterial, clearColor, clearAlpha = 0) { + super(); + __publicField$3(this, "scene"); + __publicField$3(this, "camera"); + __publicField$3(this, "overrideMaterial"); + __publicField$3(this, "clearColor"); + __publicField$3(this, "clearAlpha"); + __publicField$3(this, "clearDepth", false); + __publicField$3(this, "_oldClearColor", new Color()); + this.scene = scene; + this.camera = camera; + this.overrideMaterial = overrideMaterial; + this.clearColor = clearColor; + this.clearAlpha = clearAlpha; + this.clear = true; + this.needsSwap = false; + } + render(renderer, writeBuffer, readBuffer) { + let oldAutoClear = renderer.autoClear; + renderer.autoClear = false; + let oldClearAlpha; + let oldOverrideMaterial = null; + if (this.overrideMaterial !== void 0) { + oldOverrideMaterial = this.scene.overrideMaterial; + this.scene.overrideMaterial = this.overrideMaterial; + } + if (this.clearColor) { + renderer.getClearColor(this._oldClearColor); + oldClearAlpha = renderer.getClearAlpha(); + renderer.setClearColor(this.clearColor, this.clearAlpha); + } + if (this.clearDepth) renderer.clearDepth(); + renderer.setRenderTarget(this.renderToScreen ? null : readBuffer); + if (this.clear) renderer.clear(renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil); + renderer.render(this.scene, this.camera); + if (this.clearColor) renderer.setClearColor(this._oldClearColor, oldClearAlpha); + if (this.overrideMaterial !== void 0) this.scene.overrideMaterial = oldOverrideMaterial; + renderer.autoClear = oldAutoClear; + } +}; +//#endregion +//#region node_modules/three-stdlib/_polyfill/LoaderUtils.js +function decodeText$1(array) { + if (typeof TextDecoder !== "undefined") return new TextDecoder().decode(array); + let s = ""; + for (let i = 0, il = array.length; i < il; i++) s += String.fromCharCode(array[i]); + try { + return decodeURIComponent(escape(s)); + } catch (e) { + return s; + } +} +//#endregion +//#region node_modules/three-stdlib/loaders/GLTFLoader.js +var SRGBColorSpace$1 = "srgb"; +var LinearSRGBColorSpace$1 = "srgb-linear"; +var sRGBEncoding$1 = 3001; +var LinearEncoding$1 = 3e3; +var GLTFLoader = class extends Loader$1 { + constructor(manager) { + super(manager); + this.dracoLoader = null; + this.ktx2Loader = null; + this.meshoptDecoder = null; + this.pluginCallbacks = []; + this.register(function(parser) { + return new GLTFMaterialsClearcoatExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsDispersionExtension(parser); + }); + this.register(function(parser) { + return new GLTFTextureBasisUExtension(parser); + }); + this.register(function(parser) { + return new GLTFTextureWebPExtension(parser); + }); + this.register(function(parser) { + return new GLTFTextureAVIFExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsSheenExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsTransmissionExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsVolumeExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsIorExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsEmissiveStrengthExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsSpecularExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsIridescenceExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsAnisotropyExtension(parser); + }); + this.register(function(parser) { + return new GLTFMaterialsBumpExtension(parser); + }); + this.register(function(parser) { + return new GLTFLightsExtension(parser); + }); + this.register(function(parser) { + return new GLTFMeshoptCompression(parser); + }); + this.register(function(parser) { + return new GLTFMeshGpuInstancing(parser); + }); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + let resourcePath; + if (this.resourcePath !== "") resourcePath = this.resourcePath; + else if (this.path !== "") { + const relativeUrl = LoaderUtils.extractUrlBase(url); + resourcePath = LoaderUtils.resolveURL(relativeUrl, this.path); + } else resourcePath = LoaderUtils.extractUrlBase(url); + this.manager.itemStart(url); + const _onError = function(e) { + if (onError) onError(e); + else console.error(e); + scope.manager.itemError(url); + scope.manager.itemEnd(url); + }; + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, function(data) { + try { + scope.parse(data, resourcePath, function(gltf) { + onLoad(gltf); + scope.manager.itemEnd(url); + }, _onError); + } catch (e) { + _onError(e); + } + }, onProgress, _onError); + } + setDRACOLoader(dracoLoader) { + this.dracoLoader = dracoLoader; + return this; + } + setDDSLoader() { + throw new Error("THREE.GLTFLoader: \"MSFT_texture_dds\" no longer supported. Please update to \"KHR_texture_basisu\"."); + } + setKTX2Loader(ktx2Loader) { + this.ktx2Loader = ktx2Loader; + return this; + } + setMeshoptDecoder(meshoptDecoder) { + this.meshoptDecoder = meshoptDecoder; + return this; + } + register(callback) { + if (this.pluginCallbacks.indexOf(callback) === -1) this.pluginCallbacks.push(callback); + return this; + } + unregister(callback) { + if (this.pluginCallbacks.indexOf(callback) !== -1) this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(callback), 1); + return this; + } + parse(data, path, onLoad, onError) { + let json; + const extensions = {}; + const plugins = {}; + if (typeof data === "string") json = JSON.parse(data); + else if (data instanceof ArrayBuffer) if (decodeText$1(new Uint8Array(data.slice(0, 4))) === BINARY_EXTENSION_HEADER_MAGIC) { + try { + extensions[EXTENSIONS.KHR_BINARY_GLTF] = new GLTFBinaryExtension(data); + } catch (error) { + if (onError) onError(error); + return; + } + json = JSON.parse(extensions[EXTENSIONS.KHR_BINARY_GLTF].content); + } else json = JSON.parse(decodeText$1(new Uint8Array(data))); + else json = data; + if (json.asset === void 0 || json.asset.version[0] < 2) { + if (onError) onError(/* @__PURE__ */ new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")); + return; + } + const parser = new GLTFParser(json, { + path: path || this.resourcePath || "", + crossOrigin: this.crossOrigin, + requestHeader: this.requestHeader, + manager: this.manager, + ktx2Loader: this.ktx2Loader, + meshoptDecoder: this.meshoptDecoder + }); + parser.fileLoader.setRequestHeader(this.requestHeader); + for (let i = 0; i < this.pluginCallbacks.length; i++) { + const plugin = this.pluginCallbacks[i](parser); + if (!plugin.name) console.error("THREE.GLTFLoader: Invalid plugin found: missing name"); + plugins[plugin.name] = plugin; + extensions[plugin.name] = true; + } + if (json.extensionsUsed) for (let i = 0; i < json.extensionsUsed.length; ++i) { + const extensionName = json.extensionsUsed[i]; + const extensionsRequired = json.extensionsRequired || []; + switch (extensionName) { + case EXTENSIONS.KHR_MATERIALS_UNLIT: + extensions[extensionName] = new GLTFMaterialsUnlitExtension(); + break; + case EXTENSIONS.KHR_DRACO_MESH_COMPRESSION: + extensions[extensionName] = new GLTFDracoMeshCompressionExtension(json, this.dracoLoader); + break; + case EXTENSIONS.KHR_TEXTURE_TRANSFORM: + extensions[extensionName] = new GLTFTextureTransformExtension(); + break; + case EXTENSIONS.KHR_MESH_QUANTIZATION: + extensions[extensionName] = new GLTFMeshQuantizationExtension(); + break; + default: if (extensionsRequired.indexOf(extensionName) >= 0 && plugins[extensionName] === void 0) console.warn("THREE.GLTFLoader: Unknown extension \"" + extensionName + "\"."); + } + } + parser.setExtensions(extensions); + parser.setPlugins(plugins); + parser.parse(onLoad, onError); + } + parseAsync(data, path) { + const scope = this; + return new Promise(function(resolve, reject) { + scope.parse(data, path, resolve, reject); + }); + } +}; +function GLTFRegistry() { + let objects = {}; + return { + get: function(key) { + return objects[key]; + }, + add: function(key, object) { + objects[key] = object; + }, + remove: function(key) { + delete objects[key]; + }, + removeAll: function() { + objects = {}; + } + }; +} +var EXTENSIONS = { + KHR_BINARY_GLTF: "KHR_binary_glTF", + KHR_DRACO_MESH_COMPRESSION: "KHR_draco_mesh_compression", + KHR_LIGHTS_PUNCTUAL: "KHR_lights_punctual", + KHR_MATERIALS_CLEARCOAT: "KHR_materials_clearcoat", + KHR_MATERIALS_DISPERSION: "KHR_materials_dispersion", + KHR_MATERIALS_IOR: "KHR_materials_ior", + KHR_MATERIALS_SHEEN: "KHR_materials_sheen", + KHR_MATERIALS_SPECULAR: "KHR_materials_specular", + KHR_MATERIALS_TRANSMISSION: "KHR_materials_transmission", + KHR_MATERIALS_IRIDESCENCE: "KHR_materials_iridescence", + KHR_MATERIALS_ANISOTROPY: "KHR_materials_anisotropy", + KHR_MATERIALS_UNLIT: "KHR_materials_unlit", + KHR_MATERIALS_VOLUME: "KHR_materials_volume", + KHR_TEXTURE_BASISU: "KHR_texture_basisu", + KHR_TEXTURE_TRANSFORM: "KHR_texture_transform", + KHR_MESH_QUANTIZATION: "KHR_mesh_quantization", + KHR_MATERIALS_EMISSIVE_STRENGTH: "KHR_materials_emissive_strength", + EXT_MATERIALS_BUMP: "EXT_materials_bump", + EXT_TEXTURE_WEBP: "EXT_texture_webp", + EXT_TEXTURE_AVIF: "EXT_texture_avif", + EXT_MESHOPT_COMPRESSION: "EXT_meshopt_compression", + EXT_MESH_GPU_INSTANCING: "EXT_mesh_gpu_instancing" +}; +var GLTFLightsExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL; + this.cache = { + refs: {}, + uses: {} + }; + } + _markDefs() { + const parser = this.parser; + const nodeDefs = this.parser.json.nodes || []; + for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) { + const nodeDef = nodeDefs[nodeIndex]; + if (nodeDef.extensions && nodeDef.extensions[this.name] && nodeDef.extensions[this.name].light !== void 0) parser._addNodeRef(this.cache, nodeDef.extensions[this.name].light); + } + } + _loadLight(lightIndex) { + const parser = this.parser; + const cacheKey = "light:" + lightIndex; + let dependency = parser.cache.get(cacheKey); + if (dependency) return dependency; + const json = parser.json; + const lightDef = ((json.extensions && json.extensions[this.name] || {}).lights || [])[lightIndex]; + let lightNode; + const color = new Color(16777215); + if (lightDef.color !== void 0) color.setRGB(lightDef.color[0], lightDef.color[1], lightDef.color[2], LinearSRGBColorSpace$1); + const range = lightDef.range !== void 0 ? lightDef.range : 0; + switch (lightDef.type) { + case "directional": + lightNode = new DirectionalLight(color); + lightNode.target.position.set(0, 0, -1); + lightNode.add(lightNode.target); + break; + case "point": + lightNode = new PointLight(color); + lightNode.distance = range; + break; + case "spot": + lightNode = new SpotLight$1(color); + lightNode.distance = range; + lightDef.spot = lightDef.spot || {}; + lightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== void 0 ? lightDef.spot.innerConeAngle : 0; + lightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== void 0 ? lightDef.spot.outerConeAngle : Math.PI / 4; + lightNode.angle = lightDef.spot.outerConeAngle; + lightNode.penumbra = 1 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle; + lightNode.target.position.set(0, 0, -1); + lightNode.add(lightNode.target); + break; + default: throw new Error("THREE.GLTFLoader: Unexpected light type: " + lightDef.type); + } + lightNode.position.set(0, 0, 0); + lightNode.decay = 2; + assignExtrasToUserData(lightNode, lightDef); + if (lightDef.intensity !== void 0) lightNode.intensity = lightDef.intensity; + lightNode.name = parser.createUniqueName(lightDef.name || "light_" + lightIndex); + dependency = Promise.resolve(lightNode); + parser.cache.add(cacheKey, dependency); + return dependency; + } + getDependency(type, index) { + if (type !== "light") return; + return this._loadLight(index); + } + createNodeAttachment(nodeIndex) { + const self2 = this; + const parser = this.parser; + const nodeDef = parser.json.nodes[nodeIndex]; + const lightIndex = (nodeDef.extensions && nodeDef.extensions[this.name] || {}).light; + if (lightIndex === void 0) return null; + return this._loadLight(lightIndex).then(function(light) { + return parser._getNodeRef(self2.cache, lightIndex, light); + }); + } +}; +var GLTFMaterialsUnlitExtension = class { + constructor() { + this.name = EXTENSIONS.KHR_MATERIALS_UNLIT; + } + getMaterialType() { + return MeshBasicMaterial; + } + extendParams(materialParams, materialDef, parser) { + const pending = []; + materialParams.color = new Color(1, 1, 1); + materialParams.opacity = 1; + const metallicRoughness = materialDef.pbrMetallicRoughness; + if (metallicRoughness) { + if (Array.isArray(metallicRoughness.baseColorFactor)) { + const array = metallicRoughness.baseColorFactor; + materialParams.color.setRGB(array[0], array[1], array[2], LinearSRGBColorSpace$1); + materialParams.opacity = array[3]; + } + if (metallicRoughness.baseColorTexture !== void 0) pending.push(parser.assignTexture(materialParams, "map", metallicRoughness.baseColorTexture, SRGBColorSpace$1)); + } + return Promise.all(pending); + } +}; +var GLTFMaterialsEmissiveStrengthExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_EMISSIVE_STRENGTH; + } + extendMaterialParams(materialIndex, materialParams) { + const materialDef = this.parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return Promise.resolve(); + const emissiveStrength = materialDef.extensions[this.name].emissiveStrength; + if (emissiveStrength !== void 0) materialParams.emissiveIntensity = emissiveStrength; + return Promise.resolve(); + } +}; +var GLTFMaterialsClearcoatExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT; + } + getMaterialType(materialIndex) { + const materialDef = this.parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return Promise.resolve(); + const pending = []; + const extension = materialDef.extensions[this.name]; + if (extension.clearcoatFactor !== void 0) materialParams.clearcoat = extension.clearcoatFactor; + if (extension.clearcoatTexture !== void 0) pending.push(parser.assignTexture(materialParams, "clearcoatMap", extension.clearcoatTexture)); + if (extension.clearcoatRoughnessFactor !== void 0) materialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor; + if (extension.clearcoatRoughnessTexture !== void 0) pending.push(parser.assignTexture(materialParams, "clearcoatRoughnessMap", extension.clearcoatRoughnessTexture)); + if (extension.clearcoatNormalTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "clearcoatNormalMap", extension.clearcoatNormalTexture)); + if (extension.clearcoatNormalTexture.scale !== void 0) { + const scale = extension.clearcoatNormalTexture.scale; + materialParams.clearcoatNormalScale = new Vector2(scale, scale); + } + } + return Promise.all(pending); + } +}; +var GLTFMaterialsDispersionExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_DISPERSION; + } + getMaterialType(materialIndex) { + const materialDef = this.parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const materialDef = this.parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return Promise.resolve(); + const extension = materialDef.extensions[this.name]; + materialParams.dispersion = extension.dispersion !== void 0 ? extension.dispersion : 0; + return Promise.resolve(); + } +}; +var GLTFMaterialsIridescenceExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_IRIDESCENCE; + } + getMaterialType(materialIndex) { + const materialDef = this.parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return Promise.resolve(); + const pending = []; + const extension = materialDef.extensions[this.name]; + if (extension.iridescenceFactor !== void 0) materialParams.iridescence = extension.iridescenceFactor; + if (extension.iridescenceTexture !== void 0) pending.push(parser.assignTexture(materialParams, "iridescenceMap", extension.iridescenceTexture)); + if (extension.iridescenceIor !== void 0) materialParams.iridescenceIOR = extension.iridescenceIor; + if (materialParams.iridescenceThicknessRange === void 0) materialParams.iridescenceThicknessRange = [100, 400]; + if (extension.iridescenceThicknessMinimum !== void 0) materialParams.iridescenceThicknessRange[0] = extension.iridescenceThicknessMinimum; + if (extension.iridescenceThicknessMaximum !== void 0) materialParams.iridescenceThicknessRange[1] = extension.iridescenceThicknessMaximum; + if (extension.iridescenceThicknessTexture !== void 0) pending.push(parser.assignTexture(materialParams, "iridescenceThicknessMap", extension.iridescenceThicknessTexture)); + return Promise.all(pending); + } +}; +var GLTFMaterialsSheenExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_SHEEN; + } + getMaterialType(materialIndex) { + const materialDef = this.parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return Promise.resolve(); + const pending = []; + materialParams.sheenColor = new Color(0, 0, 0); + materialParams.sheenRoughness = 0; + materialParams.sheen = 1; + const extension = materialDef.extensions[this.name]; + if (extension.sheenColorFactor !== void 0) { + const colorFactor = extension.sheenColorFactor; + materialParams.sheenColor.setRGB(colorFactor[0], colorFactor[1], colorFactor[2], LinearSRGBColorSpace$1); + } + if (extension.sheenRoughnessFactor !== void 0) materialParams.sheenRoughness = extension.sheenRoughnessFactor; + if (extension.sheenColorTexture !== void 0) pending.push(parser.assignTexture(materialParams, "sheenColorMap", extension.sheenColorTexture, SRGBColorSpace$1)); + if (extension.sheenRoughnessTexture !== void 0) pending.push(parser.assignTexture(materialParams, "sheenRoughnessMap", extension.sheenRoughnessTexture)); + return Promise.all(pending); + } +}; +var GLTFMaterialsTransmissionExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION; + } + getMaterialType(materialIndex) { + const materialDef = this.parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return Promise.resolve(); + const pending = []; + const extension = materialDef.extensions[this.name]; + if (extension.transmissionFactor !== void 0) materialParams.transmission = extension.transmissionFactor; + if (extension.transmissionTexture !== void 0) pending.push(parser.assignTexture(materialParams, "transmissionMap", extension.transmissionTexture)); + return Promise.all(pending); + } +}; +var GLTFMaterialsVolumeExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_VOLUME; + } + getMaterialType(materialIndex) { + const materialDef = this.parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return Promise.resolve(); + const pending = []; + const extension = materialDef.extensions[this.name]; + materialParams.thickness = extension.thicknessFactor !== void 0 ? extension.thicknessFactor : 0; + if (extension.thicknessTexture !== void 0) pending.push(parser.assignTexture(materialParams, "thicknessMap", extension.thicknessTexture)); + materialParams.attenuationDistance = extension.attenuationDistance || Infinity; + const colorArray = extension.attenuationColor || [ + 1, + 1, + 1 + ]; + materialParams.attenuationColor = new Color().setRGB(colorArray[0], colorArray[1], colorArray[2], LinearSRGBColorSpace$1); + return Promise.all(pending); + } +}; +var GLTFMaterialsIorExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_IOR; + } + getMaterialType(materialIndex) { + const materialDef = this.parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const materialDef = this.parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return Promise.resolve(); + const extension = materialDef.extensions[this.name]; + materialParams.ior = extension.ior !== void 0 ? extension.ior : 1.5; + return Promise.resolve(); + } +}; +var GLTFMaterialsSpecularExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_SPECULAR; + } + getMaterialType(materialIndex) { + const materialDef = this.parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return Promise.resolve(); + const pending = []; + const extension = materialDef.extensions[this.name]; + materialParams.specularIntensity = extension.specularFactor !== void 0 ? extension.specularFactor : 1; + if (extension.specularTexture !== void 0) pending.push(parser.assignTexture(materialParams, "specularIntensityMap", extension.specularTexture)); + const colorArray = extension.specularColorFactor || [ + 1, + 1, + 1 + ]; + materialParams.specularColor = new Color().setRGB(colorArray[0], colorArray[1], colorArray[2], LinearSRGBColorSpace$1); + if (extension.specularColorTexture !== void 0) pending.push(parser.assignTexture(materialParams, "specularColorMap", extension.specularColorTexture, SRGBColorSpace$1)); + return Promise.all(pending); + } +}; +var GLTFMaterialsBumpExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.EXT_MATERIALS_BUMP; + } + getMaterialType(materialIndex) { + const materialDef = this.parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return Promise.resolve(); + const pending = []; + const extension = materialDef.extensions[this.name]; + materialParams.bumpScale = extension.bumpFactor !== void 0 ? extension.bumpFactor : 1; + if (extension.bumpTexture !== void 0) pending.push(parser.assignTexture(materialParams, "bumpMap", extension.bumpTexture)); + return Promise.all(pending); + } +}; +var GLTFMaterialsAnisotropyExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_MATERIALS_ANISOTROPY; + } + getMaterialType(materialIndex) { + const materialDef = this.parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; + return MeshPhysicalMaterial; + } + extendMaterialParams(materialIndex, materialParams) { + const parser = this.parser; + const materialDef = parser.json.materials[materialIndex]; + if (!materialDef.extensions || !materialDef.extensions[this.name]) return Promise.resolve(); + const pending = []; + const extension = materialDef.extensions[this.name]; + if (extension.anisotropyStrength !== void 0) materialParams.anisotropy = extension.anisotropyStrength; + if (extension.anisotropyRotation !== void 0) materialParams.anisotropyRotation = extension.anisotropyRotation; + if (extension.anisotropyTexture !== void 0) pending.push(parser.assignTexture(materialParams, "anisotropyMap", extension.anisotropyTexture)); + return Promise.all(pending); + } +}; +var GLTFTextureBasisUExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.KHR_TEXTURE_BASISU; + } + loadTexture(textureIndex) { + const parser = this.parser; + const json = parser.json; + const textureDef = json.textures[textureIndex]; + if (!textureDef.extensions || !textureDef.extensions[this.name]) return null; + const extension = textureDef.extensions[this.name]; + const loader = parser.options.ktx2Loader; + if (!loader) if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures"); + else return null; + return parser.loadTextureImage(textureIndex, extension.source, loader); + } +}; +var GLTFTextureWebPExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.EXT_TEXTURE_WEBP; + this.isSupported = null; + } + loadTexture(textureIndex) { + const name = this.name; + const parser = this.parser; + const json = parser.json; + const textureDef = json.textures[textureIndex]; + if (!textureDef.extensions || !textureDef.extensions[name]) return null; + const extension = textureDef.extensions[name]; + const source = json.images[extension.source]; + let loader = parser.textureLoader; + if (source.uri) { + const handler = parser.options.manager.getHandler(source.uri); + if (handler !== null) loader = handler; + } + return this.detectSupport().then(function(isSupported) { + if (isSupported) return parser.loadTextureImage(textureIndex, extension.source, loader); + if (json.extensionsRequired && json.extensionsRequired.indexOf(name) >= 0) throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported."); + return parser.loadTexture(textureIndex); + }); + } + detectSupport() { + if (!this.isSupported) this.isSupported = new Promise(function(resolve) { + const image = new Image(); + image.src = "data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA"; + image.onload = image.onerror = function() { + resolve(image.height === 1); + }; + }); + return this.isSupported; + } +}; +var GLTFTextureAVIFExtension = class { + constructor(parser) { + this.parser = parser; + this.name = EXTENSIONS.EXT_TEXTURE_AVIF; + this.isSupported = null; + } + loadTexture(textureIndex) { + const name = this.name; + const parser = this.parser; + const json = parser.json; + const textureDef = json.textures[textureIndex]; + if (!textureDef.extensions || !textureDef.extensions[name]) return null; + const extension = textureDef.extensions[name]; + const source = json.images[extension.source]; + let loader = parser.textureLoader; + if (source.uri) { + const handler = parser.options.manager.getHandler(source.uri); + if (handler !== null) loader = handler; + } + return this.detectSupport().then(function(isSupported) { + if (isSupported) return parser.loadTextureImage(textureIndex, extension.source, loader); + if (json.extensionsRequired && json.extensionsRequired.indexOf(name) >= 0) throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported."); + return parser.loadTexture(textureIndex); + }); + } + detectSupport() { + if (!this.isSupported) this.isSupported = new Promise(function(resolve) { + const image = new Image(); + image.src = "data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI="; + image.onload = image.onerror = function() { + resolve(image.height === 1); + }; + }); + return this.isSupported; + } +}; +var GLTFMeshoptCompression = class { + constructor(parser) { + this.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION; + this.parser = parser; + } + loadBufferView(index) { + const json = this.parser.json; + const bufferView = json.bufferViews[index]; + if (bufferView.extensions && bufferView.extensions[this.name]) { + const extensionDef = bufferView.extensions[this.name]; + const buffer = this.parser.getDependency("buffer", extensionDef.buffer); + const decoder = this.parser.options.meshoptDecoder; + if (!decoder || !decoder.supported) if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files"); + else return null; + return buffer.then(function(res) { + const byteOffset = extensionDef.byteOffset || 0; + const byteLength = extensionDef.byteLength || 0; + const count = extensionDef.count; + const stride = extensionDef.byteStride; + const source = new Uint8Array(res, byteOffset, byteLength); + if (decoder.decodeGltfBufferAsync) return decoder.decodeGltfBufferAsync(count, stride, source, extensionDef.mode, extensionDef.filter).then(function(res2) { + return res2.buffer; + }); + else return decoder.ready.then(function() { + const result = new ArrayBuffer(count * stride); + decoder.decodeGltfBuffer(new Uint8Array(result), count, stride, source, extensionDef.mode, extensionDef.filter); + return result; + }); + }); + } else return null; + } +}; +var GLTFMeshGpuInstancing = class { + constructor(parser) { + this.name = EXTENSIONS.EXT_MESH_GPU_INSTANCING; + this.parser = parser; + } + createNodeMesh(nodeIndex) { + const json = this.parser.json; + const nodeDef = json.nodes[nodeIndex]; + if (!nodeDef.extensions || !nodeDef.extensions[this.name] || nodeDef.mesh === void 0) return null; + const meshDef = json.meshes[nodeDef.mesh]; + for (const primitive of meshDef.primitives) if (primitive.mode !== WEBGL_CONSTANTS.TRIANGLES && primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_STRIP && primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_FAN && primitive.mode !== void 0) return null; + const attributesDef = nodeDef.extensions[this.name].attributes; + const pending = []; + const attributes = {}; + for (const key in attributesDef) pending.push(this.parser.getDependency("accessor", attributesDef[key]).then((accessor) => { + attributes[key] = accessor; + return attributes[key]; + })); + if (pending.length < 1) return null; + pending.push(this.parser.createNodeMesh(nodeIndex)); + return Promise.all(pending).then((results) => { + const nodeObject = results.pop(); + const meshes = nodeObject.isGroup ? nodeObject.children : [nodeObject]; + const count = results[0].count; + const instancedMeshes = []; + for (const mesh of meshes) { + const m = new Matrix4(); + const p = new Vector3(); + const q = new Quaternion(); + const s = new Vector3(1, 1, 1); + const instancedMesh = new InstancedMesh(mesh.geometry, mesh.material, count); + for (let i = 0; i < count; i++) { + if (attributes.TRANSLATION) p.fromBufferAttribute(attributes.TRANSLATION, i); + if (attributes.ROTATION) q.fromBufferAttribute(attributes.ROTATION, i); + if (attributes.SCALE) s.fromBufferAttribute(attributes.SCALE, i); + instancedMesh.setMatrixAt(i, m.compose(p, q, s)); + } + for (const attributeName in attributes) if (attributeName === "_COLOR_0") { + const attr = attributes[attributeName]; + instancedMesh.instanceColor = new InstancedBufferAttribute(attr.array, attr.itemSize, attr.normalized); + } else if (attributeName !== "TRANSLATION" && attributeName !== "ROTATION" && attributeName !== "SCALE") mesh.geometry.setAttribute(attributeName, attributes[attributeName]); + Object3D.prototype.copy.call(instancedMesh, mesh); + this.parser.assignFinalMaterial(instancedMesh); + instancedMeshes.push(instancedMesh); + } + if (nodeObject.isGroup) { + nodeObject.clear(); + nodeObject.add(...instancedMeshes); + return nodeObject; + } + return instancedMeshes[0]; + }); + } +}; +var BINARY_EXTENSION_HEADER_MAGIC = "glTF"; +var BINARY_EXTENSION_HEADER_LENGTH = 12; +var BINARY_EXTENSION_CHUNK_TYPES = { + JSON: 1313821514, + BIN: 5130562 +}; +var GLTFBinaryExtension = class { + constructor(data) { + this.name = EXTENSIONS.KHR_BINARY_GLTF; + this.content = null; + this.body = null; + const headerView = new DataView(data, 0, BINARY_EXTENSION_HEADER_LENGTH); + this.header = { + magic: decodeText$1(new Uint8Array(data.slice(0, 4))), + version: headerView.getUint32(4, true), + length: headerView.getUint32(8, true) + }; + if (this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC) throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header."); + else if (this.header.version < 2) throw new Error("THREE.GLTFLoader: Legacy binary file detected."); + const chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH; + const chunkView = new DataView(data, BINARY_EXTENSION_HEADER_LENGTH); + let chunkIndex = 0; + while (chunkIndex < chunkContentsLength) { + const chunkLength = chunkView.getUint32(chunkIndex, true); + chunkIndex += 4; + const chunkType = chunkView.getUint32(chunkIndex, true); + chunkIndex += 4; + if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON) { + const contentArray = new Uint8Array(data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength); + this.content = decodeText$1(contentArray); + } else if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN) { + const byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex; + this.body = data.slice(byteOffset, byteOffset + chunkLength); + } + chunkIndex += chunkLength; + } + if (this.content === null) throw new Error("THREE.GLTFLoader: JSON content not found."); + } +}; +var GLTFDracoMeshCompressionExtension = class { + constructor(json, dracoLoader) { + if (!dracoLoader) throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided."); + this.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION; + this.json = json; + this.dracoLoader = dracoLoader; + this.dracoLoader.preload(); + } + decodePrimitive(primitive, parser) { + const json = this.json; + const dracoLoader = this.dracoLoader; + const bufferViewIndex = primitive.extensions[this.name].bufferView; + const gltfAttributeMap = primitive.extensions[this.name].attributes; + const threeAttributeMap = {}; + const attributeNormalizedMap = {}; + const attributeTypeMap = {}; + for (const attributeName in gltfAttributeMap) { + const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase(); + threeAttributeMap[threeAttributeName] = gltfAttributeMap[attributeName]; + } + for (const attributeName in primitive.attributes) { + const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase(); + if (gltfAttributeMap[attributeName] !== void 0) { + const accessorDef = json.accessors[primitive.attributes[attributeName]]; + attributeTypeMap[threeAttributeName] = WEBGL_COMPONENT_TYPES[accessorDef.componentType].name; + attributeNormalizedMap[threeAttributeName] = accessorDef.normalized === true; + } + } + return parser.getDependency("bufferView", bufferViewIndex).then(function(bufferView) { + return new Promise(function(resolve, reject) { + dracoLoader.decodeDracoFile(bufferView, function(geometry) { + for (const attributeName in geometry.attributes) { + const attribute = geometry.attributes[attributeName]; + const normalized = attributeNormalizedMap[attributeName]; + if (normalized !== void 0) attribute.normalized = normalized; + } + resolve(geometry); + }, threeAttributeMap, attributeTypeMap, LinearSRGBColorSpace$1, reject); + }); + }); + } +}; +var GLTFTextureTransformExtension = class { + constructor() { + this.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM; + } + extendTexture(texture, transform) { + if ((transform.texCoord === void 0 || transform.texCoord === texture.channel) && transform.offset === void 0 && transform.rotation === void 0 && transform.scale === void 0) return texture; + texture = texture.clone(); + if (transform.texCoord !== void 0) texture.channel = transform.texCoord; + if (transform.offset !== void 0) texture.offset.fromArray(transform.offset); + if (transform.rotation !== void 0) texture.rotation = transform.rotation; + if (transform.scale !== void 0) texture.repeat.fromArray(transform.scale); + texture.needsUpdate = true; + return texture; + } +}; +var GLTFMeshQuantizationExtension = class { + constructor() { + this.name = EXTENSIONS.KHR_MESH_QUANTIZATION; + } +}; +var GLTFCubicSplineInterpolant = class extends Interpolant { + constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { + super(parameterPositions, sampleValues, sampleSize, resultBuffer); + } + copySampleValue_(index) { + const result = this.resultBuffer, values = this.sampleValues, valueSize = this.valueSize, offset = index * valueSize * 3 + valueSize; + for (let i = 0; i !== valueSize; i++) result[i] = values[offset + i]; + return result; + } + interpolate_(i1, t0, t, t1) { + const result = this.resultBuffer; + const values = this.sampleValues; + const stride = this.valueSize; + const stride2 = stride * 2; + const stride3 = stride * 3; + const td = t1 - t0; + const p = (t - t0) / td; + const pp = p * p; + const ppp = pp * p; + const offset1 = i1 * stride3; + const offset0 = offset1 - stride3; + const s2 = -2 * ppp + 3 * pp; + const s3 = ppp - pp; + const s0 = 1 - s2; + const s1 = s3 - pp + p; + for (let i = 0; i !== stride; i++) { + const p0 = values[offset0 + i + stride]; + const m0 = values[offset0 + i + stride2] * td; + const p1 = values[offset1 + i + stride]; + const m1 = values[offset1 + i] * td; + result[i] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1; + } + return result; + } +}; +var _q = /* @__PURE__ */ new Quaternion(); +var GLTFCubicSplineQuaternionInterpolant = class extends GLTFCubicSplineInterpolant { + interpolate_(i1, t0, t, t1) { + const result = super.interpolate_(i1, t0, t, t1); + _q.fromArray(result).normalize().toArray(result); + return result; + } +}; +var WEBGL_CONSTANTS = { + FLOAT: 5126, + FLOAT_MAT3: 35675, + FLOAT_MAT4: 35676, + FLOAT_VEC2: 35664, + FLOAT_VEC3: 35665, + FLOAT_VEC4: 35666, + LINEAR: 9729, + REPEAT: 10497, + SAMPLER_2D: 35678, + POINTS: 0, + LINES: 1, + LINE_LOOP: 2, + LINE_STRIP: 3, + TRIANGLES: 4, + TRIANGLE_STRIP: 5, + TRIANGLE_FAN: 6, + UNSIGNED_BYTE: 5121, + UNSIGNED_SHORT: 5123 +}; +var WEBGL_COMPONENT_TYPES = { + 5120: Int8Array, + 5121: Uint8Array, + 5122: Int16Array, + 5123: Uint16Array, + 5125: Uint32Array, + 5126: Float32Array +}; +var WEBGL_FILTERS = { + 9728: NearestFilter, + 9729: LinearFilter, + 9984: NearestMipmapNearestFilter, + 9985: LinearMipmapNearestFilter, + 9986: NearestMipmapLinearFilter, + 9987: LinearMipmapLinearFilter +}; +var WEBGL_WRAPPINGS = { + 33071: ClampToEdgeWrapping, + 33648: MirroredRepeatWrapping, + 10497: RepeatWrapping +}; +var WEBGL_TYPE_SIZES = { + SCALAR: 1, + VEC2: 2, + VEC3: 3, + VEC4: 4, + MAT2: 4, + MAT3: 9, + MAT4: 16 +}; +var ATTRIBUTES = { + POSITION: "position", + NORMAL: "normal", + TANGENT: "tangent", + ...version$2 >= 152 ? { + TEXCOORD_0: "uv", + TEXCOORD_1: "uv1", + TEXCOORD_2: "uv2", + TEXCOORD_3: "uv3" + } : { + TEXCOORD_0: "uv", + TEXCOORD_1: "uv2" + }, + COLOR_0: "color", + WEIGHTS_0: "skinWeight", + JOINTS_0: "skinIndex" +}; +var PATH_PROPERTIES = { + scale: "scale", + translation: "position", + rotation: "quaternion", + weights: "morphTargetInfluences" +}; +var INTERPOLATION = { + CUBICSPLINE: void 0, + LINEAR: InterpolateLinear, + STEP: InterpolateDiscrete +}; +var ALPHA_MODES = { + OPAQUE: "OPAQUE", + MASK: "MASK", + BLEND: "BLEND" +}; +function createDefaultMaterial(cache) { + if (cache["DefaultMaterial"] === void 0) cache["DefaultMaterial"] = new MeshStandardMaterial({ + color: 16777215, + emissive: 0, + metalness: 1, + roughness: 1, + transparent: false, + depthTest: true, + side: 0 + }); + return cache["DefaultMaterial"]; +} +function addUnknownExtensionsToUserData(knownExtensions, object, objectDef) { + for (const name in objectDef.extensions) if (knownExtensions[name] === void 0) { + object.userData.gltfExtensions = object.userData.gltfExtensions || {}; + object.userData.gltfExtensions[name] = objectDef.extensions[name]; + } +} +function assignExtrasToUserData(object, gltfDef) { + if (gltfDef.extras !== void 0) if (typeof gltfDef.extras === "object") Object.assign(object.userData, gltfDef.extras); + else console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, " + gltfDef.extras); +} +function addMorphTargets(geometry, targets, parser) { + let hasMorphPosition = false; + let hasMorphNormal = false; + let hasMorphColor = false; + for (let i = 0, il = targets.length; i < il; i++) { + const target = targets[i]; + if (target.POSITION !== void 0) hasMorphPosition = true; + if (target.NORMAL !== void 0) hasMorphNormal = true; + if (target.COLOR_0 !== void 0) hasMorphColor = true; + if (hasMorphPosition && hasMorphNormal && hasMorphColor) break; + } + if (!hasMorphPosition && !hasMorphNormal && !hasMorphColor) return Promise.resolve(geometry); + const pendingPositionAccessors = []; + const pendingNormalAccessors = []; + const pendingColorAccessors = []; + for (let i = 0, il = targets.length; i < il; i++) { + const target = targets[i]; + if (hasMorphPosition) { + const pendingAccessor = target.POSITION !== void 0 ? parser.getDependency("accessor", target.POSITION) : geometry.attributes.position; + pendingPositionAccessors.push(pendingAccessor); + } + if (hasMorphNormal) { + const pendingAccessor = target.NORMAL !== void 0 ? parser.getDependency("accessor", target.NORMAL) : geometry.attributes.normal; + pendingNormalAccessors.push(pendingAccessor); + } + if (hasMorphColor) { + const pendingAccessor = target.COLOR_0 !== void 0 ? parser.getDependency("accessor", target.COLOR_0) : geometry.attributes.color; + pendingColorAccessors.push(pendingAccessor); + } + } + return Promise.all([ + Promise.all(pendingPositionAccessors), + Promise.all(pendingNormalAccessors), + Promise.all(pendingColorAccessors) + ]).then(function(accessors) { + const morphPositions = accessors[0]; + const morphNormals = accessors[1]; + const morphColors = accessors[2]; + if (hasMorphPosition) geometry.morphAttributes.position = morphPositions; + if (hasMorphNormal) geometry.morphAttributes.normal = morphNormals; + if (hasMorphColor) geometry.morphAttributes.color = morphColors; + geometry.morphTargetsRelative = true; + return geometry; + }); +} +function updateMorphTargets(mesh, meshDef) { + mesh.updateMorphTargets(); + if (meshDef.weights !== void 0) for (let i = 0, il = meshDef.weights.length; i < il; i++) mesh.morphTargetInfluences[i] = meshDef.weights[i]; + if (meshDef.extras && Array.isArray(meshDef.extras.targetNames)) { + const targetNames = meshDef.extras.targetNames; + if (mesh.morphTargetInfluences.length === targetNames.length) { + mesh.morphTargetDictionary = {}; + for (let i = 0, il = targetNames.length; i < il; i++) mesh.morphTargetDictionary[targetNames[i]] = i; + } else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names."); + } +} +function createPrimitiveKey(primitiveDef) { + let geometryKey; + const dracoExtension = primitiveDef.extensions && primitiveDef.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION]; + if (dracoExtension) geometryKey = "draco:" + dracoExtension.bufferView + ":" + dracoExtension.indices + ":" + createAttributesKey(dracoExtension.attributes); + else geometryKey = primitiveDef.indices + ":" + createAttributesKey(primitiveDef.attributes) + ":" + primitiveDef.mode; + if (primitiveDef.targets !== void 0) for (let i = 0, il = primitiveDef.targets.length; i < il; i++) geometryKey += ":" + createAttributesKey(primitiveDef.targets[i]); + return geometryKey; +} +function createAttributesKey(attributes) { + let attributesKey = ""; + const keys = Object.keys(attributes).sort(); + for (let i = 0, il = keys.length; i < il; i++) attributesKey += keys[i] + ":" + attributes[keys[i]] + ";"; + return attributesKey; +} +function getNormalizedComponentScale(constructor) { + switch (constructor) { + case Int8Array: return 1 / 127; + case Uint8Array: return 1 / 255; + case Int16Array: return 1 / 32767; + case Uint16Array: return 1 / 65535; + default: throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type."); + } +} +function getImageURIMimeType(uri) { + if (uri.search(/\.jpe?g($|\?)/i) > 0 || uri.search(/^data\:image\/jpeg/) === 0) return "image/jpeg"; + if (uri.search(/\.webp($|\?)/i) > 0 || uri.search(/^data\:image\/webp/) === 0) return "image/webp"; + return "image/png"; +} +var _identityMatrix = /* @__PURE__ */ new Matrix4(); +var GLTFParser = class { + constructor(json = {}, options = {}) { + this.json = json; + this.extensions = {}; + this.plugins = {}; + this.options = options; + this.cache = new GLTFRegistry(); + this.associations = /* @__PURE__ */ new Map(); + this.primitiveCache = {}; + this.nodeCache = {}; + this.meshCache = { + refs: {}, + uses: {} + }; + this.cameraCache = { + refs: {}, + uses: {} + }; + this.lightCache = { + refs: {}, + uses: {} + }; + this.sourceCache = {}; + this.textureCache = {}; + this.nodeNamesUsed = {}; + let isSafari = false; + let isFirefox = false; + let firefoxVersion = -1; + if (typeof navigator !== "undefined" && typeof navigator.userAgent !== "undefined") { + isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent) === true; + isFirefox = navigator.userAgent.indexOf("Firefox") > -1; + firefoxVersion = isFirefox ? navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1] : -1; + } + if (typeof createImageBitmap === "undefined" || isSafari || isFirefox && firefoxVersion < 98) this.textureLoader = new TextureLoader(this.options.manager); + else this.textureLoader = new ImageBitmapLoader(this.options.manager); + this.textureLoader.setCrossOrigin(this.options.crossOrigin); + this.textureLoader.setRequestHeader(this.options.requestHeader); + this.fileLoader = new FileLoader(this.options.manager); + this.fileLoader.setResponseType("arraybuffer"); + if (this.options.crossOrigin === "use-credentials") this.fileLoader.setWithCredentials(true); + } + setExtensions(extensions) { + this.extensions = extensions; + } + setPlugins(plugins) { + this.plugins = plugins; + } + parse(onLoad, onError) { + const parser = this; + const json = this.json; + const extensions = this.extensions; + this.cache.removeAll(); + this.nodeCache = {}; + this._invokeAll(function(ext) { + return ext._markDefs && ext._markDefs(); + }); + Promise.all(this._invokeAll(function(ext) { + return ext.beforeRoot && ext.beforeRoot(); + })).then(function() { + return Promise.all([ + parser.getDependencies("scene"), + parser.getDependencies("animation"), + parser.getDependencies("camera") + ]); + }).then(function(dependencies) { + const result = { + scene: dependencies[0][json.scene || 0], + scenes: dependencies[0], + animations: dependencies[1], + cameras: dependencies[2], + asset: json.asset, + parser, + userData: {} + }; + addUnknownExtensionsToUserData(extensions, result, json); + assignExtrasToUserData(result, json); + return Promise.all(parser._invokeAll(function(ext) { + return ext.afterRoot && ext.afterRoot(result); + })).then(function() { + for (const scene of result.scenes) scene.updateMatrixWorld(); + onLoad(result); + }); + }).catch(onError); + } + /** + * Marks the special nodes/meshes in json for efficient parse. + */ + _markDefs() { + const nodeDefs = this.json.nodes || []; + const skinDefs = this.json.skins || []; + const meshDefs = this.json.meshes || []; + for (let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex++) { + const joints = skinDefs[skinIndex].joints; + for (let i = 0, il = joints.length; i < il; i++) nodeDefs[joints[i]].isBone = true; + } + for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) { + const nodeDef = nodeDefs[nodeIndex]; + if (nodeDef.mesh !== void 0) { + this._addNodeRef(this.meshCache, nodeDef.mesh); + if (nodeDef.skin !== void 0) meshDefs[nodeDef.mesh].isSkinnedMesh = true; + } + if (nodeDef.camera !== void 0) this._addNodeRef(this.cameraCache, nodeDef.camera); + } + } + /** + * Counts references to shared node / Object3D resources. These resources + * can be reused, or "instantiated", at multiple nodes in the scene + * hierarchy. Mesh, Camera, and Light instances are instantiated and must + * be marked. Non-scenegraph resources (like Materials, Geometries, and + * Textures) can be reused directly and are not marked here. + * + * Example: CesiumMilkTruck sample model reuses "Wheel" meshes. + */ + _addNodeRef(cache, index) { + if (index === void 0) return; + if (cache.refs[index] === void 0) cache.refs[index] = cache.uses[index] = 0; + cache.refs[index]++; + } + /** Returns a reference to a shared resource, cloning it if necessary. */ + _getNodeRef(cache, index, object) { + if (cache.refs[index] <= 1) return object; + const ref = object.clone(); + const updateMappings = (original, clone) => { + const mappings = this.associations.get(original); + if (mappings != null) this.associations.set(clone, mappings); + for (const [i, child] of original.children.entries()) updateMappings(child, clone.children[i]); + }; + updateMappings(object, ref); + ref.name += "_instance_" + cache.uses[index]++; + return ref; + } + _invokeOne(func) { + const extensions = Object.values(this.plugins); + extensions.push(this); + for (let i = 0; i < extensions.length; i++) { + const result = func(extensions[i]); + if (result) return result; + } + return null; + } + _invokeAll(func) { + const extensions = Object.values(this.plugins); + extensions.unshift(this); + const pending = []; + for (let i = 0; i < extensions.length; i++) { + const result = func(extensions[i]); + if (result) pending.push(result); + } + return pending; + } + /** + * Requests the specified dependency asynchronously, with caching. + * @param {string} type + * @param {number} index + * @return {Promise} + */ + getDependency(type, index) { + const cacheKey = type + ":" + index; + let dependency = this.cache.get(cacheKey); + if (!dependency) { + switch (type) { + case "scene": + dependency = this.loadScene(index); + break; + case "node": + dependency = this._invokeOne(function(ext) { + return ext.loadNode && ext.loadNode(index); + }); + break; + case "mesh": + dependency = this._invokeOne(function(ext) { + return ext.loadMesh && ext.loadMesh(index); + }); + break; + case "accessor": + dependency = this.loadAccessor(index); + break; + case "bufferView": + dependency = this._invokeOne(function(ext) { + return ext.loadBufferView && ext.loadBufferView(index); + }); + break; + case "buffer": + dependency = this.loadBuffer(index); + break; + case "material": + dependency = this._invokeOne(function(ext) { + return ext.loadMaterial && ext.loadMaterial(index); + }); + break; + case "texture": + dependency = this._invokeOne(function(ext) { + return ext.loadTexture && ext.loadTexture(index); + }); + break; + case "skin": + dependency = this.loadSkin(index); + break; + case "animation": + dependency = this._invokeOne(function(ext) { + return ext.loadAnimation && ext.loadAnimation(index); + }); + break; + case "camera": + dependency = this.loadCamera(index); + break; + default: + dependency = this._invokeOne(function(ext) { + return ext != this && ext.getDependency && ext.getDependency(type, index); + }); + if (!dependency) throw new Error("Unknown type: " + type); + break; + } + this.cache.add(cacheKey, dependency); + } + return dependency; + } + /** + * Requests all dependencies of the specified type asynchronously, with caching. + * @param {string} type + * @return {Promise>} + */ + getDependencies(type) { + let dependencies = this.cache.get(type); + if (!dependencies) { + const parser = this; + const defs = this.json[type + (type === "mesh" ? "es" : "s")] || []; + dependencies = Promise.all(defs.map(function(def, index) { + return parser.getDependency(type, index); + })); + this.cache.add(type, dependencies); + } + return dependencies; + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views + * @param {number} bufferIndex + * @return {Promise} + */ + loadBuffer(bufferIndex) { + const bufferDef = this.json.buffers[bufferIndex]; + const loader = this.fileLoader; + if (bufferDef.type && bufferDef.type !== "arraybuffer") throw new Error("THREE.GLTFLoader: " + bufferDef.type + " buffer type is not supported."); + if (bufferDef.uri === void 0 && bufferIndex === 0) return Promise.resolve(this.extensions[EXTENSIONS.KHR_BINARY_GLTF].body); + const options = this.options; + return new Promise(function(resolve, reject) { + loader.load(LoaderUtils.resolveURL(bufferDef.uri, options.path), resolve, void 0, function() { + reject(/* @__PURE__ */ new Error("THREE.GLTFLoader: Failed to load buffer \"" + bufferDef.uri + "\".")); + }); + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views + * @param {number} bufferViewIndex + * @return {Promise} + */ + loadBufferView(bufferViewIndex) { + const bufferViewDef = this.json.bufferViews[bufferViewIndex]; + return this.getDependency("buffer", bufferViewDef.buffer).then(function(buffer) { + const byteLength = bufferViewDef.byteLength || 0; + const byteOffset = bufferViewDef.byteOffset || 0; + return buffer.slice(byteOffset, byteOffset + byteLength); + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors + * @param {number} accessorIndex + * @return {Promise} + */ + loadAccessor(accessorIndex) { + const parser = this; + const json = this.json; + const accessorDef = this.json.accessors[accessorIndex]; + if (accessorDef.bufferView === void 0 && accessorDef.sparse === void 0) { + const itemSize = WEBGL_TYPE_SIZES[accessorDef.type]; + const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType]; + const normalized = accessorDef.normalized === true; + const array = new TypedArray(accessorDef.count * itemSize); + return Promise.resolve(new BufferAttribute(array, itemSize, normalized)); + } + const pendingBufferViews = []; + if (accessorDef.bufferView !== void 0) pendingBufferViews.push(this.getDependency("bufferView", accessorDef.bufferView)); + else pendingBufferViews.push(null); + if (accessorDef.sparse !== void 0) { + pendingBufferViews.push(this.getDependency("bufferView", accessorDef.sparse.indices.bufferView)); + pendingBufferViews.push(this.getDependency("bufferView", accessorDef.sparse.values.bufferView)); + } + return Promise.all(pendingBufferViews).then(function(bufferViews) { + const bufferView = bufferViews[0]; + const itemSize = WEBGL_TYPE_SIZES[accessorDef.type]; + const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType]; + const elementBytes = TypedArray.BYTES_PER_ELEMENT; + const itemBytes = elementBytes * itemSize; + const byteOffset = accessorDef.byteOffset || 0; + const byteStride = accessorDef.bufferView !== void 0 ? json.bufferViews[accessorDef.bufferView].byteStride : void 0; + const normalized = accessorDef.normalized === true; + let array, bufferAttribute; + if (byteStride && byteStride !== itemBytes) { + const ibSlice = Math.floor(byteOffset / byteStride); + const ibCacheKey = "InterleavedBuffer:" + accessorDef.bufferView + ":" + accessorDef.componentType + ":" + ibSlice + ":" + accessorDef.count; + let ib = parser.cache.get(ibCacheKey); + if (!ib) { + array = new TypedArray(bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes); + ib = new InterleavedBuffer(array, byteStride / elementBytes); + parser.cache.add(ibCacheKey, ib); + } + bufferAttribute = new InterleavedBufferAttribute(ib, itemSize, byteOffset % byteStride / elementBytes, normalized); + } else { + if (bufferView === null) array = new TypedArray(accessorDef.count * itemSize); + else array = new TypedArray(bufferView, byteOffset, accessorDef.count * itemSize); + bufferAttribute = new BufferAttribute(array, itemSize, normalized); + } + if (accessorDef.sparse !== void 0) { + const itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR; + const TypedArrayIndices = WEBGL_COMPONENT_TYPES[accessorDef.sparse.indices.componentType]; + const byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0; + const byteOffsetValues = accessorDef.sparse.values.byteOffset || 0; + const sparseIndices = new TypedArrayIndices(bufferViews[1], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices); + const sparseValues = new TypedArray(bufferViews[2], byteOffsetValues, accessorDef.sparse.count * itemSize); + if (bufferView !== null) bufferAttribute = new BufferAttribute(bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized); + for (let i = 0, il = sparseIndices.length; i < il; i++) { + const index = sparseIndices[i]; + bufferAttribute.setX(index, sparseValues[i * itemSize]); + if (itemSize >= 2) bufferAttribute.setY(index, sparseValues[i * itemSize + 1]); + if (itemSize >= 3) bufferAttribute.setZ(index, sparseValues[i * itemSize + 2]); + if (itemSize >= 4) bufferAttribute.setW(index, sparseValues[i * itemSize + 3]); + if (itemSize >= 5) throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute."); + } + } + return bufferAttribute; + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures + * @param {number} textureIndex + * @return {Promise} + */ + loadTexture(textureIndex) { + const json = this.json; + const options = this.options; + const sourceIndex = json.textures[textureIndex].source; + const sourceDef = json.images[sourceIndex]; + let loader = this.textureLoader; + if (sourceDef.uri) { + const handler = options.manager.getHandler(sourceDef.uri); + if (handler !== null) loader = handler; + } + return this.loadTextureImage(textureIndex, sourceIndex, loader); + } + loadTextureImage(textureIndex, sourceIndex, loader) { + const parser = this; + const json = this.json; + const textureDef = json.textures[textureIndex]; + const sourceDef = json.images[sourceIndex]; + const cacheKey = (sourceDef.uri || sourceDef.bufferView) + ":" + textureDef.sampler; + if (this.textureCache[cacheKey]) return this.textureCache[cacheKey]; + const promise = this.loadImageSource(sourceIndex, loader).then(function(texture) { + texture.flipY = false; + texture.name = textureDef.name || sourceDef.name || ""; + if (texture.name === "" && typeof sourceDef.uri === "string" && sourceDef.uri.startsWith("data:image/") === false) texture.name = sourceDef.uri; + const sampler = (json.samplers || {})[textureDef.sampler] || {}; + texture.magFilter = WEBGL_FILTERS[sampler.magFilter] || 1006; + texture.minFilter = WEBGL_FILTERS[sampler.minFilter] || 1008; + texture.wrapS = WEBGL_WRAPPINGS[sampler.wrapS] || 1e3; + texture.wrapT = WEBGL_WRAPPINGS[sampler.wrapT] || 1e3; + parser.associations.set(texture, { textures: textureIndex }); + return texture; + }).catch(function() { + return null; + }); + this.textureCache[cacheKey] = promise; + return promise; + } + loadImageSource(sourceIndex, loader) { + const parser = this; + const json = this.json; + const options = this.options; + if (this.sourceCache[sourceIndex] !== void 0) return this.sourceCache[sourceIndex].then((texture) => texture.clone()); + const sourceDef = json.images[sourceIndex]; + const URL = self.URL || self.webkitURL; + let sourceURI = sourceDef.uri || ""; + let isObjectURL = false; + if (sourceDef.bufferView !== void 0) sourceURI = parser.getDependency("bufferView", sourceDef.bufferView).then(function(bufferView) { + isObjectURL = true; + const blob = new Blob([bufferView], { type: sourceDef.mimeType }); + sourceURI = URL.createObjectURL(blob); + return sourceURI; + }); + else if (sourceDef.uri === void 0) throw new Error("THREE.GLTFLoader: Image " + sourceIndex + " is missing URI and bufferView"); + const promise = Promise.resolve(sourceURI).then(function(sourceURI2) { + return new Promise(function(resolve, reject) { + let onLoad = resolve; + if (loader.isImageBitmapLoader === true) onLoad = function(imageBitmap) { + const texture = new Texture$1(imageBitmap); + texture.needsUpdate = true; + resolve(texture); + }; + loader.load(LoaderUtils.resolveURL(sourceURI2, options.path), onLoad, void 0, reject); + }); + }).then(function(texture) { + if (isObjectURL === true) URL.revokeObjectURL(sourceURI); + assignExtrasToUserData(texture, sourceDef); + texture.userData.mimeType = sourceDef.mimeType || getImageURIMimeType(sourceDef.uri); + return texture; + }).catch(function(error) { + console.error("THREE.GLTFLoader: Couldn't load texture", sourceURI); + throw error; + }); + this.sourceCache[sourceIndex] = promise; + return promise; + } + /** + * Asynchronously assigns a texture to the given material parameters. + * @param {Object} materialParams + * @param {string} mapName + * @param {Object} mapDef + * @return {Promise} + */ + assignTexture(materialParams, mapName, mapDef, colorSpace) { + const parser = this; + return this.getDependency("texture", mapDef.index).then(function(texture) { + if (!texture) return null; + if (mapDef.texCoord !== void 0 && mapDef.texCoord > 0) { + texture = texture.clone(); + texture.channel = mapDef.texCoord; + } + if (parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM]) { + const transform = mapDef.extensions !== void 0 ? mapDef.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM] : void 0; + if (transform) { + const gltfReference = parser.associations.get(texture); + texture = parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM].extendTexture(texture, transform); + parser.associations.set(texture, gltfReference); + } + } + if (colorSpace !== void 0) { + if (typeof colorSpace === "number") colorSpace = colorSpace === sRGBEncoding$1 ? SRGBColorSpace$1 : LinearSRGBColorSpace$1; + if ("colorSpace" in texture) texture.colorSpace = colorSpace; + else texture.encoding = colorSpace === SRGBColorSpace$1 ? sRGBEncoding$1 : LinearEncoding$1; + } + materialParams[mapName] = texture; + return texture; + }); + } + /** + * Assigns final material to a Mesh, Line, or Points instance. The instance + * already has a material (generated from the glTF material options alone) + * but reuse of the same glTF material may require multiple threejs materials + * to accommodate different primitive types, defines, etc. New materials will + * be created if necessary, and reused from a cache. + * @param {Object3D} mesh Mesh, Line, or Points instance. + */ + assignFinalMaterial(mesh) { + const geometry = mesh.geometry; + let material = mesh.material; + const useDerivativeTangents = geometry.attributes.tangent === void 0; + const useVertexColors = geometry.attributes.color !== void 0; + const useFlatShading = geometry.attributes.normal === void 0; + if (mesh.isPoints) { + const cacheKey = "PointsMaterial:" + material.uuid; + let pointsMaterial = this.cache.get(cacheKey); + if (!pointsMaterial) { + pointsMaterial = new PointsMaterial(); + Material.prototype.copy.call(pointsMaterial, material); + pointsMaterial.color.copy(material.color); + pointsMaterial.map = material.map; + pointsMaterial.sizeAttenuation = false; + this.cache.add(cacheKey, pointsMaterial); + } + material = pointsMaterial; + } else if (mesh.isLine) { + const cacheKey = "LineBasicMaterial:" + material.uuid; + let lineMaterial = this.cache.get(cacheKey); + if (!lineMaterial) { + lineMaterial = new LineBasicMaterial(); + Material.prototype.copy.call(lineMaterial, material); + lineMaterial.color.copy(material.color); + lineMaterial.map = material.map; + this.cache.add(cacheKey, lineMaterial); + } + material = lineMaterial; + } + if (useDerivativeTangents || useVertexColors || useFlatShading) { + let cacheKey = "ClonedMaterial:" + material.uuid + ":"; + if (useDerivativeTangents) cacheKey += "derivative-tangents:"; + if (useVertexColors) cacheKey += "vertex-colors:"; + if (useFlatShading) cacheKey += "flat-shading:"; + let cachedMaterial = this.cache.get(cacheKey); + if (!cachedMaterial) { + cachedMaterial = material.clone(); + if (useVertexColors) cachedMaterial.vertexColors = true; + if (useFlatShading) cachedMaterial.flatShading = true; + if (useDerivativeTangents) { + if (cachedMaterial.normalScale) cachedMaterial.normalScale.y *= -1; + if (cachedMaterial.clearcoatNormalScale) cachedMaterial.clearcoatNormalScale.y *= -1; + } + this.cache.add(cacheKey, cachedMaterial); + this.associations.set(cachedMaterial, this.associations.get(material)); + } + material = cachedMaterial; + } + mesh.material = material; + } + getMaterialType() { + return MeshStandardMaterial; + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials + * @param {number} materialIndex + * @return {Promise} + */ + loadMaterial(materialIndex) { + const parser = this; + const json = this.json; + const extensions = this.extensions; + const materialDef = json.materials[materialIndex]; + let materialType; + const materialParams = {}; + const materialExtensions = materialDef.extensions || {}; + const pending = []; + if (materialExtensions[EXTENSIONS.KHR_MATERIALS_UNLIT]) { + const kmuExtension = extensions[EXTENSIONS.KHR_MATERIALS_UNLIT]; + materialType = kmuExtension.getMaterialType(); + pending.push(kmuExtension.extendParams(materialParams, materialDef, parser)); + } else { + const metallicRoughness = materialDef.pbrMetallicRoughness || {}; + materialParams.color = new Color(1, 1, 1); + materialParams.opacity = 1; + if (Array.isArray(metallicRoughness.baseColorFactor)) { + const array = metallicRoughness.baseColorFactor; + materialParams.color.setRGB(array[0], array[1], array[2], LinearSRGBColorSpace$1); + materialParams.opacity = array[3]; + } + if (metallicRoughness.baseColorTexture !== void 0) pending.push(parser.assignTexture(materialParams, "map", metallicRoughness.baseColorTexture, SRGBColorSpace$1)); + materialParams.metalness = metallicRoughness.metallicFactor !== void 0 ? metallicRoughness.metallicFactor : 1; + materialParams.roughness = metallicRoughness.roughnessFactor !== void 0 ? metallicRoughness.roughnessFactor : 1; + if (metallicRoughness.metallicRoughnessTexture !== void 0) { + pending.push(parser.assignTexture(materialParams, "metalnessMap", metallicRoughness.metallicRoughnessTexture)); + pending.push(parser.assignTexture(materialParams, "roughnessMap", metallicRoughness.metallicRoughnessTexture)); + } + materialType = this._invokeOne(function(ext) { + return ext.getMaterialType && ext.getMaterialType(materialIndex); + }); + pending.push(Promise.all(this._invokeAll(function(ext) { + return ext.extendMaterialParams && ext.extendMaterialParams(materialIndex, materialParams); + }))); + } + if (materialDef.doubleSided === true) materialParams.side = 2; + const alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE; + if (alphaMode === ALPHA_MODES.BLEND) { + materialParams.transparent = true; + materialParams.depthWrite = false; + } else { + materialParams.transparent = false; + if (alphaMode === ALPHA_MODES.MASK) materialParams.alphaTest = materialDef.alphaCutoff !== void 0 ? materialDef.alphaCutoff : .5; + } + if (materialDef.normalTexture !== void 0 && materialType !== MeshBasicMaterial) { + pending.push(parser.assignTexture(materialParams, "normalMap", materialDef.normalTexture)); + materialParams.normalScale = new Vector2(1, 1); + if (materialDef.normalTexture.scale !== void 0) { + const scale = materialDef.normalTexture.scale; + materialParams.normalScale.set(scale, scale); + } + } + if (materialDef.occlusionTexture !== void 0 && materialType !== MeshBasicMaterial) { + pending.push(parser.assignTexture(materialParams, "aoMap", materialDef.occlusionTexture)); + if (materialDef.occlusionTexture.strength !== void 0) materialParams.aoMapIntensity = materialDef.occlusionTexture.strength; + } + if (materialDef.emissiveFactor !== void 0 && materialType !== MeshBasicMaterial) { + const emissiveFactor = materialDef.emissiveFactor; + materialParams.emissive = new Color().setRGB(emissiveFactor[0], emissiveFactor[1], emissiveFactor[2], LinearSRGBColorSpace$1); + } + if (materialDef.emissiveTexture !== void 0 && materialType !== MeshBasicMaterial) pending.push(parser.assignTexture(materialParams, "emissiveMap", materialDef.emissiveTexture, SRGBColorSpace$1)); + return Promise.all(pending).then(function() { + const material = new materialType(materialParams); + if (materialDef.name) material.name = materialDef.name; + assignExtrasToUserData(material, materialDef); + parser.associations.set(material, { materials: materialIndex }); + if (materialDef.extensions) addUnknownExtensionsToUserData(extensions, material, materialDef); + return material; + }); + } + /** When Object3D instances are targeted by animation, they need unique names. */ + createUniqueName(originalName) { + const sanitizedName = PropertyBinding.sanitizeNodeName(originalName || ""); + if (sanitizedName in this.nodeNamesUsed) return sanitizedName + "_" + ++this.nodeNamesUsed[sanitizedName]; + else { + this.nodeNamesUsed[sanitizedName] = 0; + return sanitizedName; + } + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry + * + * Creates BufferGeometries from primitives. + * + * @param {Array} primitives + * @return {Promise>} + */ + loadGeometries(primitives) { + const parser = this; + const extensions = this.extensions; + const cache = this.primitiveCache; + function createDracoPrimitive(primitive) { + return extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(primitive, parser).then(function(geometry) { + return addPrimitiveAttributes(geometry, primitive, parser); + }); + } + const pending = []; + for (let i = 0, il = primitives.length; i < il; i++) { + const primitive = primitives[i]; + const cacheKey = createPrimitiveKey(primitive); + const cached = cache[cacheKey]; + if (cached) pending.push(cached.promise); + else { + let geometryPromise; + if (primitive.extensions && primitive.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION]) geometryPromise = createDracoPrimitive(primitive); + else geometryPromise = addPrimitiveAttributes(new BufferGeometry(), primitive, parser); + cache[cacheKey] = { + primitive, + promise: geometryPromise + }; + pending.push(geometryPromise); + } + } + return Promise.all(pending); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes + * @param {number} meshIndex + * @return {Promise} + */ + loadMesh(meshIndex) { + const parser = this; + const json = this.json; + const extensions = this.extensions; + const meshDef = json.meshes[meshIndex]; + const primitives = meshDef.primitives; + const pending = []; + for (let i = 0, il = primitives.length; i < il; i++) { + const material = primitives[i].material === void 0 ? createDefaultMaterial(this.cache) : this.getDependency("material", primitives[i].material); + pending.push(material); + } + pending.push(parser.loadGeometries(primitives)); + return Promise.all(pending).then(function(results) { + const materials = results.slice(0, results.length - 1); + const geometries = results[results.length - 1]; + const meshes = []; + for (let i = 0, il = geometries.length; i < il; i++) { + const geometry = geometries[i]; + const primitive = primitives[i]; + let mesh; + const material = materials[i]; + if (primitive.mode === WEBGL_CONSTANTS.TRIANGLES || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN || primitive.mode === void 0) { + mesh = meshDef.isSkinnedMesh === true ? new SkinnedMesh(geometry, material) : new Mesh(geometry, material); + if (mesh.isSkinnedMesh === true) mesh.normalizeSkinWeights(); + if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP) mesh.geometry = toTrianglesDrawMode(mesh.geometry, 1); + else if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN) mesh.geometry = toTrianglesDrawMode(mesh.geometry, 2); + } else if (primitive.mode === WEBGL_CONSTANTS.LINES) mesh = new LineSegments(geometry, material); + else if (primitive.mode === WEBGL_CONSTANTS.LINE_STRIP) mesh = new Line$1(geometry, material); + else if (primitive.mode === WEBGL_CONSTANTS.LINE_LOOP) mesh = new LineLoop(geometry, material); + else if (primitive.mode === WEBGL_CONSTANTS.POINTS) mesh = new Points$1(geometry, material); + else throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + primitive.mode); + if (Object.keys(mesh.geometry.morphAttributes).length > 0) updateMorphTargets(mesh, meshDef); + mesh.name = parser.createUniqueName(meshDef.name || "mesh_" + meshIndex); + assignExtrasToUserData(mesh, meshDef); + if (primitive.extensions) addUnknownExtensionsToUserData(extensions, mesh, primitive); + parser.assignFinalMaterial(mesh); + meshes.push(mesh); + } + for (let i = 0, il = meshes.length; i < il; i++) parser.associations.set(meshes[i], { + meshes: meshIndex, + primitives: i + }); + if (meshes.length === 1) { + if (meshDef.extensions) addUnknownExtensionsToUserData(extensions, meshes[0], meshDef); + return meshes[0]; + } + const group = new Group(); + if (meshDef.extensions) addUnknownExtensionsToUserData(extensions, group, meshDef); + parser.associations.set(group, { meshes: meshIndex }); + for (let i = 0, il = meshes.length; i < il; i++) group.add(meshes[i]); + return group; + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras + * @param {number} cameraIndex + * @return {Promise} + */ + loadCamera(cameraIndex) { + let camera; + const cameraDef = this.json.cameras[cameraIndex]; + const params = cameraDef[cameraDef.type]; + if (!params) { + console.warn("THREE.GLTFLoader: Missing camera parameters."); + return; + } + if (cameraDef.type === "perspective") camera = new PerspectiveCamera$1(MathUtils.radToDeg(params.yfov), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6); + else if (cameraDef.type === "orthographic") camera = new OrthographicCamera$1(-params.xmag, params.xmag, params.ymag, -params.ymag, params.znear, params.zfar); + if (cameraDef.name) camera.name = this.createUniqueName(cameraDef.name); + assignExtrasToUserData(camera, cameraDef); + return Promise.resolve(camera); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins + * @param {number} skinIndex + * @return {Promise} + */ + loadSkin(skinIndex) { + const skinDef = this.json.skins[skinIndex]; + const pending = []; + for (let i = 0, il = skinDef.joints.length; i < il; i++) pending.push(this._loadNodeShallow(skinDef.joints[i])); + if (skinDef.inverseBindMatrices !== void 0) pending.push(this.getDependency("accessor", skinDef.inverseBindMatrices)); + else pending.push(null); + return Promise.all(pending).then(function(results) { + const inverseBindMatrices = results.pop(); + const jointNodes = results; + const bones = []; + const boneInverses = []; + for (let i = 0, il = jointNodes.length; i < il; i++) { + const jointNode = jointNodes[i]; + if (jointNode) { + bones.push(jointNode); + const mat = new Matrix4(); + if (inverseBindMatrices !== null) mat.fromArray(inverseBindMatrices.array, i * 16); + boneInverses.push(mat); + } else console.warn("THREE.GLTFLoader: Joint \"%s\" could not be found.", skinDef.joints[i]); + } + return new Skeleton(bones, boneInverses); + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations + * @param {number} animationIndex + * @return {Promise} + */ + loadAnimation(animationIndex) { + const json = this.json; + const parser = this; + const animationDef = json.animations[animationIndex]; + const animationName = animationDef.name ? animationDef.name : "animation_" + animationIndex; + const pendingNodes = []; + const pendingInputAccessors = []; + const pendingOutputAccessors = []; + const pendingSamplers = []; + const pendingTargets = []; + for (let i = 0, il = animationDef.channels.length; i < il; i++) { + const channel = animationDef.channels[i]; + const sampler = animationDef.samplers[channel.sampler]; + const target = channel.target; + const name = target.node; + const input = animationDef.parameters !== void 0 ? animationDef.parameters[sampler.input] : sampler.input; + const output = animationDef.parameters !== void 0 ? animationDef.parameters[sampler.output] : sampler.output; + if (target.node === void 0) continue; + pendingNodes.push(this.getDependency("node", name)); + pendingInputAccessors.push(this.getDependency("accessor", input)); + pendingOutputAccessors.push(this.getDependency("accessor", output)); + pendingSamplers.push(sampler); + pendingTargets.push(target); + } + return Promise.all([ + Promise.all(pendingNodes), + Promise.all(pendingInputAccessors), + Promise.all(pendingOutputAccessors), + Promise.all(pendingSamplers), + Promise.all(pendingTargets) + ]).then(function(dependencies) { + const nodes = dependencies[0]; + const inputAccessors = dependencies[1]; + const outputAccessors = dependencies[2]; + const samplers = dependencies[3]; + const targets = dependencies[4]; + const tracks = []; + for (let i = 0, il = nodes.length; i < il; i++) { + const node = nodes[i]; + const inputAccessor = inputAccessors[i]; + const outputAccessor = outputAccessors[i]; + const sampler = samplers[i]; + const target = targets[i]; + if (node === void 0) continue; + if (node.updateMatrix) node.updateMatrix(); + const createdTracks = parser._createAnimationTracks(node, inputAccessor, outputAccessor, sampler, target); + if (createdTracks) for (let k = 0; k < createdTracks.length; k++) tracks.push(createdTracks[k]); + } + return new AnimationClip(animationName, void 0, tracks); + }); + } + createNodeMesh(nodeIndex) { + const json = this.json; + const parser = this; + const nodeDef = json.nodes[nodeIndex]; + if (nodeDef.mesh === void 0) return null; + return parser.getDependency("mesh", nodeDef.mesh).then(function(mesh) { + const node = parser._getNodeRef(parser.meshCache, nodeDef.mesh, mesh); + if (nodeDef.weights !== void 0) node.traverse(function(o) { + if (!o.isMesh) return; + for (let i = 0, il = nodeDef.weights.length; i < il; i++) o.morphTargetInfluences[i] = nodeDef.weights[i]; + }); + return node; + }); + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy + * @param {number} nodeIndex + * @return {Promise} + */ + loadNode(nodeIndex) { + const json = this.json; + const parser = this; + const nodeDef = json.nodes[nodeIndex]; + const nodePending = parser._loadNodeShallow(nodeIndex); + const childPending = []; + const childrenDef = nodeDef.children || []; + for (let i = 0, il = childrenDef.length; i < il; i++) childPending.push(parser.getDependency("node", childrenDef[i])); + const skeletonPending = nodeDef.skin === void 0 ? Promise.resolve(null) : parser.getDependency("skin", nodeDef.skin); + return Promise.all([ + nodePending, + Promise.all(childPending), + skeletonPending + ]).then(function(results) { + const node = results[0]; + const children = results[1]; + const skeleton = results[2]; + if (skeleton !== null) node.traverse(function(mesh) { + if (!mesh.isSkinnedMesh) return; + mesh.bind(skeleton, _identityMatrix); + }); + for (let i = 0, il = children.length; i < il; i++) node.add(children[i]); + return node; + }); + } + _loadNodeShallow(nodeIndex) { + const json = this.json; + const extensions = this.extensions; + const parser = this; + if (this.nodeCache[nodeIndex] !== void 0) return this.nodeCache[nodeIndex]; + const nodeDef = json.nodes[nodeIndex]; + const nodeName = nodeDef.name ? parser.createUniqueName(nodeDef.name) : ""; + const pending = []; + const meshPromise = parser._invokeOne(function(ext) { + return ext.createNodeMesh && ext.createNodeMesh(nodeIndex); + }); + if (meshPromise) pending.push(meshPromise); + if (nodeDef.camera !== void 0) pending.push(parser.getDependency("camera", nodeDef.camera).then(function(camera) { + return parser._getNodeRef(parser.cameraCache, nodeDef.camera, camera); + })); + parser._invokeAll(function(ext) { + return ext.createNodeAttachment && ext.createNodeAttachment(nodeIndex); + }).forEach(function(promise) { + pending.push(promise); + }); + this.nodeCache[nodeIndex] = Promise.all(pending).then(function(objects) { + let node; + if (nodeDef.isBone === true) node = new Bone(); + else if (objects.length > 1) node = new Group(); + else if (objects.length === 1) node = objects[0]; + else node = new Object3D(); + if (node !== objects[0]) for (let i = 0, il = objects.length; i < il; i++) node.add(objects[i]); + if (nodeDef.name) { + node.userData.name = nodeDef.name; + node.name = nodeName; + } + assignExtrasToUserData(node, nodeDef); + if (nodeDef.extensions) addUnknownExtensionsToUserData(extensions, node, nodeDef); + if (nodeDef.matrix !== void 0) { + const matrix = new Matrix4(); + matrix.fromArray(nodeDef.matrix); + node.applyMatrix4(matrix); + } else { + if (nodeDef.translation !== void 0) node.position.fromArray(nodeDef.translation); + if (nodeDef.rotation !== void 0) node.quaternion.fromArray(nodeDef.rotation); + if (nodeDef.scale !== void 0) node.scale.fromArray(nodeDef.scale); + } + if (!parser.associations.has(node)) parser.associations.set(node, {}); + parser.associations.get(node).nodes = nodeIndex; + return node; + }); + return this.nodeCache[nodeIndex]; + } + /** + * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes + * @param {number} sceneIndex + * @return {Promise} + */ + loadScene(sceneIndex) { + const extensions = this.extensions; + const sceneDef = this.json.scenes[sceneIndex]; + const parser = this; + const scene = new Group(); + if (sceneDef.name) scene.name = parser.createUniqueName(sceneDef.name); + assignExtrasToUserData(scene, sceneDef); + if (sceneDef.extensions) addUnknownExtensionsToUserData(extensions, scene, sceneDef); + const nodeIds = sceneDef.nodes || []; + const pending = []; + for (let i = 0, il = nodeIds.length; i < il; i++) pending.push(parser.getDependency("node", nodeIds[i])); + return Promise.all(pending).then(function(nodes) { + for (let i = 0, il = nodes.length; i < il; i++) scene.add(nodes[i]); + const reduceAssociations = (node) => { + const reducedAssociations = /* @__PURE__ */ new Map(); + for (const [key, value] of parser.associations) if (key instanceof Material || key instanceof Texture$1) reducedAssociations.set(key, value); + node.traverse((node2) => { + const mappings = parser.associations.get(node2); + if (mappings != null) reducedAssociations.set(node2, mappings); + }); + return reducedAssociations; + }; + parser.associations = reduceAssociations(scene); + return scene; + }); + } + _createAnimationTracks(node, inputAccessor, outputAccessor, sampler, target) { + const tracks = []; + const targetName = node.name ? node.name : node.uuid; + const targetNames = []; + if (PATH_PROPERTIES[target.path] === PATH_PROPERTIES.weights) node.traverse(function(object) { + if (object.morphTargetInfluences) targetNames.push(object.name ? object.name : object.uuid); + }); + else targetNames.push(targetName); + let TypedKeyframeTrack; + switch (PATH_PROPERTIES[target.path]) { + case PATH_PROPERTIES.weights: + TypedKeyframeTrack = NumberKeyframeTrack; + break; + case PATH_PROPERTIES.rotation: + TypedKeyframeTrack = QuaternionKeyframeTrack; + break; + case PATH_PROPERTIES.position: + case PATH_PROPERTIES.scale: + TypedKeyframeTrack = VectorKeyframeTrack; + break; + default: + switch (outputAccessor.itemSize) { + case 1: + TypedKeyframeTrack = NumberKeyframeTrack; + break; + default: + TypedKeyframeTrack = VectorKeyframeTrack; + break; + } + break; + } + const interpolation = sampler.interpolation !== void 0 ? INTERPOLATION[sampler.interpolation] : InterpolateLinear; + const outputArray = this._getArrayFromAccessor(outputAccessor); + for (let j = 0, jl = targetNames.length; j < jl; j++) { + const track = new TypedKeyframeTrack(targetNames[j] + "." + PATH_PROPERTIES[target.path], inputAccessor.array, outputArray, interpolation); + if (sampler.interpolation === "CUBICSPLINE") this._createCubicSplineTrackInterpolant(track); + tracks.push(track); + } + return tracks; + } + _getArrayFromAccessor(accessor) { + let outputArray = accessor.array; + if (accessor.normalized) { + const scale = getNormalizedComponentScale(outputArray.constructor); + const scaled = new Float32Array(outputArray.length); + for (let j = 0, jl = outputArray.length; j < jl; j++) scaled[j] = outputArray[j] * scale; + outputArray = scaled; + } + return outputArray; + } + _createCubicSplineTrackInterpolant(track) { + track.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline(result) { + return new (this instanceof QuaternionKeyframeTrack ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant)(this.times, this.values, this.getValueSize() / 3, result); + }; + track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true; + } +}; +function computeBounds(geometry, primitiveDef, parser) { + const attributes = primitiveDef.attributes; + const box = new Box3(); + if (attributes.POSITION !== void 0) { + const accessor = parser.json.accessors[attributes.POSITION]; + const min = accessor.min; + const max = accessor.max; + if (min !== void 0 && max !== void 0) { + box.set(new Vector3(min[0], min[1], min[2]), new Vector3(max[0], max[1], max[2])); + if (accessor.normalized) { + const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]); + box.min.multiplyScalar(boxScale); + box.max.multiplyScalar(boxScale); + } + } else { + console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION."); + return; + } + } else return; + const targets = primitiveDef.targets; + if (targets !== void 0) { + const maxDisplacement = new Vector3(); + const vector = new Vector3(); + for (let i = 0, il = targets.length; i < il; i++) { + const target = targets[i]; + if (target.POSITION !== void 0) { + const accessor = parser.json.accessors[target.POSITION]; + const min = accessor.min; + const max = accessor.max; + if (min !== void 0 && max !== void 0) { + vector.setX(Math.max(Math.abs(min[0]), Math.abs(max[0]))); + vector.setY(Math.max(Math.abs(min[1]), Math.abs(max[1]))); + vector.setZ(Math.max(Math.abs(min[2]), Math.abs(max[2]))); + if (accessor.normalized) { + const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]); + vector.multiplyScalar(boxScale); + } + maxDisplacement.max(vector); + } else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION."); + } + } + box.expandByVector(maxDisplacement); + } + geometry.boundingBox = box; + const sphere = new Sphere$1(); + box.getCenter(sphere.center); + sphere.radius = box.min.distanceTo(box.max) / 2; + geometry.boundingSphere = sphere; +} +function addPrimitiveAttributes(geometry, primitiveDef, parser) { + const attributes = primitiveDef.attributes; + const pending = []; + function assignAttributeAccessor(accessorIndex, attributeName) { + return parser.getDependency("accessor", accessorIndex).then(function(accessor) { + geometry.setAttribute(attributeName, accessor); + }); + } + for (const gltfAttributeName in attributes) { + const threeAttributeName = ATTRIBUTES[gltfAttributeName] || gltfAttributeName.toLowerCase(); + if (threeAttributeName in geometry.attributes) continue; + pending.push(assignAttributeAccessor(attributes[gltfAttributeName], threeAttributeName)); + } + if (primitiveDef.indices !== void 0 && !geometry.index) { + const accessor = parser.getDependency("accessor", primitiveDef.indices).then(function(accessor2) { + geometry.setIndex(accessor2); + }); + pending.push(accessor); + } + assignExtrasToUserData(geometry, primitiveDef); + computeBounds(geometry, primitiveDef, parser); + return Promise.all(pending).then(function() { + return primitiveDef.targets !== void 0 ? addMorphTargets(geometry, primitiveDef.targets, parser) : geometry; + }); +} +//#endregion +//#region node_modules/three-stdlib/geometries/DecalGeometry.js +var DecalGeometry = class extends BufferGeometry { + constructor(mesh, position, orientation, size) { + super(); + const vertices = []; + const normals = []; + const uvs = []; + const plane = new Vector3(); + const projectorMatrix = new Matrix4(); + projectorMatrix.makeRotationFromEuler(orientation); + projectorMatrix.setPosition(position); + const projectorMatrixInverse = new Matrix4(); + projectorMatrixInverse.copy(projectorMatrix).invert(); + generate(); + this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + function generate() { + let i; + let decalVertices = []; + const vertex = new Vector3(); + const normal = new Vector3(); + if (mesh.geometry.isGeometry === true) { + console.error("THREE.DecalGeometry no longer supports THREE.Geometry. Use BufferGeometry instead."); + return; + } + const geometry = mesh.geometry; + const positionAttribute = geometry.attributes.position; + const normalAttribute = geometry.attributes.normal; + if (geometry.index !== null) { + const index = geometry.index; + for (i = 0; i < index.count; i++) { + vertex.fromBufferAttribute(positionAttribute, index.getX(i)); + normal.fromBufferAttribute(normalAttribute, index.getX(i)); + pushDecalVertex(decalVertices, vertex, normal); + } + } else for (i = 0; i < positionAttribute.count; i++) { + vertex.fromBufferAttribute(positionAttribute, i); + normal.fromBufferAttribute(normalAttribute, i); + pushDecalVertex(decalVertices, vertex, normal); + } + decalVertices = clipGeometry(decalVertices, plane.set(1, 0, 0)); + decalVertices = clipGeometry(decalVertices, plane.set(-1, 0, 0)); + decalVertices = clipGeometry(decalVertices, plane.set(0, 1, 0)); + decalVertices = clipGeometry(decalVertices, plane.set(0, -1, 0)); + decalVertices = clipGeometry(decalVertices, plane.set(0, 0, 1)); + decalVertices = clipGeometry(decalVertices, plane.set(0, 0, -1)); + for (i = 0; i < decalVertices.length; i++) { + const decalVertex = decalVertices[i]; + uvs.push(.5 + decalVertex.position.x / size.x, .5 + decalVertex.position.y / size.y); + decalVertex.position.applyMatrix4(projectorMatrix); + vertices.push(decalVertex.position.x, decalVertex.position.y, decalVertex.position.z); + normals.push(decalVertex.normal.x, decalVertex.normal.y, decalVertex.normal.z); + } + } + function pushDecalVertex(decalVertices, vertex, normal) { + vertex.applyMatrix4(mesh.matrixWorld); + vertex.applyMatrix4(projectorMatrixInverse); + normal.transformDirection(mesh.matrixWorld); + decalVertices.push(new DecalVertex(vertex.clone(), normal.clone())); + } + function clipGeometry(inVertices, plane2) { + const outVertices = []; + const s = .5 * Math.abs(size.dot(plane2)); + for (let i = 0; i < inVertices.length; i += 3) { + let v1Out, v2Out, v3Out, total = 0; + let nV1, nV2, nV3, nV4; + const d1 = inVertices[i + 0].position.dot(plane2) - s; + const d2 = inVertices[i + 1].position.dot(plane2) - s; + const d3 = inVertices[i + 2].position.dot(plane2) - s; + v1Out = d1 > 0; + v2Out = d2 > 0; + v3Out = d3 > 0; + total = (v1Out ? 1 : 0) + (v2Out ? 1 : 0) + (v3Out ? 1 : 0); + switch (total) { + case 0: + outVertices.push(inVertices[i]); + outVertices.push(inVertices[i + 1]); + outVertices.push(inVertices[i + 2]); + break; + case 1: + if (v1Out) { + nV1 = inVertices[i + 1]; + nV2 = inVertices[i + 2]; + nV3 = clip(inVertices[i], nV1, plane2, s); + nV4 = clip(inVertices[i], nV2, plane2, s); + } + if (v2Out) { + nV1 = inVertices[i]; + nV2 = inVertices[i + 2]; + nV3 = clip(inVertices[i + 1], nV1, plane2, s); + nV4 = clip(inVertices[i + 1], nV2, plane2, s); + outVertices.push(nV3); + outVertices.push(nV2.clone()); + outVertices.push(nV1.clone()); + outVertices.push(nV2.clone()); + outVertices.push(nV3.clone()); + outVertices.push(nV4); + break; + } + if (v3Out) { + nV1 = inVertices[i]; + nV2 = inVertices[i + 1]; + nV3 = clip(inVertices[i + 2], nV1, plane2, s); + nV4 = clip(inVertices[i + 2], nV2, plane2, s); + } + outVertices.push(nV1.clone()); + outVertices.push(nV2.clone()); + outVertices.push(nV3); + outVertices.push(nV4); + outVertices.push(nV3.clone()); + outVertices.push(nV2.clone()); + break; + case 2: + if (!v1Out) { + nV1 = inVertices[i].clone(); + nV2 = clip(nV1, inVertices[i + 1], plane2, s); + nV3 = clip(nV1, inVertices[i + 2], plane2, s); + outVertices.push(nV1); + outVertices.push(nV2); + outVertices.push(nV3); + } + if (!v2Out) { + nV1 = inVertices[i + 1].clone(); + nV2 = clip(nV1, inVertices[i + 2], plane2, s); + nV3 = clip(nV1, inVertices[i], plane2, s); + outVertices.push(nV1); + outVertices.push(nV2); + outVertices.push(nV3); + } + if (!v3Out) { + nV1 = inVertices[i + 2].clone(); + nV2 = clip(nV1, inVertices[i], plane2, s); + nV3 = clip(nV1, inVertices[i + 1], plane2, s); + outVertices.push(nV1); + outVertices.push(nV2); + outVertices.push(nV3); + } + break; + } + } + return outVertices; + } + function clip(v0, v1, p, s) { + const d0 = v0.position.dot(p) - s; + const s0 = d0 / (d0 - (v1.position.dot(p) - s)); + return new DecalVertex(new Vector3(v0.position.x + s0 * (v1.position.x - v0.position.x), v0.position.y + s0 * (v1.position.y - v0.position.y), v0.position.z + s0 * (v1.position.z - v0.position.z)), new Vector3(v0.normal.x + s0 * (v1.normal.x - v0.normal.x), v0.normal.y + s0 * (v1.normal.y - v0.normal.y), v0.normal.z + s0 * (v1.normal.z - v0.normal.z))); + } + } +}; +var DecalVertex = class { + constructor(position, normal) { + this.position = position; + this.normal = normal; + } + clone() { + return new this.constructor(this.position.clone(), this.normal.clone()); + } +}; +//#endregion +//#region node_modules/three-stdlib/geometries/TextGeometry.js +var TextGeometry = class extends ExtrudeGeometry { + constructor(text, parameters = {}) { + const { bevelEnabled = false, bevelSize = 8, bevelThickness = 10, font, height = 50, size = 100, lineHeight = 1, letterSpacing = 0, ...rest } = parameters; + if (font === void 0) super(); + else { + const shapes = font.generateShapes(text, size, { + lineHeight, + letterSpacing + }); + super(shapes, { + ...rest, + bevelEnabled, + bevelSize, + bevelThickness, + depth: height + }); + } + this.type = "TextGeometry"; + } +}; +//#endregion +//#region node_modules/three-stdlib/shaders/GammaCorrectionShader.js +var GammaCorrectionShader = { + uniforms: { tDiffuse: { value: null } }, + vertexShader: ` + varying vec2 vUv; + + void main() { + + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); + + } + `, + fragmentShader: ` + uniform sampler2D tDiffuse; + + varying vec2 vUv; + + void main() { + + vec4 tex = texture2D( tDiffuse, vUv ); + + #ifdef LinearTosRGB + gl_FragColor = LinearTosRGB( tex ); + #else + gl_FragColor = sRGBTransferOETF( tex ); + #endif + + } + ` +}; +//#endregion +//#region node_modules/three-stdlib/shaders/HorizontalBlurShader.js +var HorizontalBlurShader = { + uniforms: { + tDiffuse: { value: null }, + h: { value: 1 / 512 } + }, + vertexShader: ` + varying vec2 vUv; + + void main() { + + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); + + } + `, + fragmentShader: ` + uniform sampler2D tDiffuse; + uniform float h; + + varying vec2 vUv; + + void main() { + + vec4 sum = vec4( 0.0 ); + + sum += texture2D( tDiffuse, vec2( vUv.x - 4.0 * h, vUv.y ) ) * 0.051; + sum += texture2D( tDiffuse, vec2( vUv.x - 3.0 * h, vUv.y ) ) * 0.0918; + sum += texture2D( tDiffuse, vec2( vUv.x - 2.0 * h, vUv.y ) ) * 0.12245; + sum += texture2D( tDiffuse, vec2( vUv.x - 1.0 * h, vUv.y ) ) * 0.1531; + sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633; + sum += texture2D( tDiffuse, vec2( vUv.x + 1.0 * h, vUv.y ) ) * 0.1531; + sum += texture2D( tDiffuse, vec2( vUv.x + 2.0 * h, vUv.y ) ) * 0.12245; + sum += texture2D( tDiffuse, vec2( vUv.x + 3.0 * h, vUv.y ) ) * 0.0918; + sum += texture2D( tDiffuse, vec2( vUv.x + 4.0 * h, vUv.y ) ) * 0.051; + + gl_FragColor = sum; + + } + ` +}; +//#endregion +//#region node_modules/three-stdlib/shaders/VerticalBlurShader.js +var VerticalBlurShader = { + uniforms: { + tDiffuse: { value: null }, + v: { value: 1 / 512 } + }, + vertexShader: ` + varying vec2 vUv; + + void main() { + + vUv = uv; + gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); + + } + `, + fragmentShader: ` + + uniform sampler2D tDiffuse; + uniform float v; + + varying vec2 vUv; + + void main() { + + vec4 sum = vec4( 0.0 ); + + sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 4.0 * v ) ) * 0.051; + sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 3.0 * v ) ) * 0.0918; + sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 2.0 * v ) ) * 0.12245; + sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 1.0 * v ) ) * 0.1531; + sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633; + sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 1.0 * v ) ) * 0.1531; + sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 2.0 * v ) ) * 0.12245; + sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 3.0 * v ) ) * 0.0918; + sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 4.0 * v ) ) * 0.051; + + gl_FragColor = sum; + + } + ` +}; +//#endregion +//#region node_modules/three-stdlib/interactive/SelectionBox.js +var frustum = /* @__PURE__ */ new Frustum(); +var center$1 = /* @__PURE__ */ new Vector3(); +var tmpPoint = /* @__PURE__ */ new Vector3(); +var vecNear = /* @__PURE__ */ new Vector3(); +var vecTopLeft = /* @__PURE__ */ new Vector3(); +var vecTopRight = /* @__PURE__ */ new Vector3(); +var vecDownRight = /* @__PURE__ */ new Vector3(); +var vecDownLeft = /* @__PURE__ */ new Vector3(); +var vecFarTopLeft = /* @__PURE__ */ new Vector3(); +var vecFarTopRight = /* @__PURE__ */ new Vector3(); +var vecFarDownRight = /* @__PURE__ */ new Vector3(); +var vecFarDownLeft = /* @__PURE__ */ new Vector3(); +var vectemp1 = /* @__PURE__ */ new Vector3(); +var vectemp2 = /* @__PURE__ */ new Vector3(); +var vectemp3 = /* @__PURE__ */ new Vector3(); +var SelectionBox = class { + constructor(camera, scene, deep) { + this.camera = camera; + this.scene = scene; + this.startPoint = new Vector3(); + this.endPoint = new Vector3(); + this.collection = []; + this.deep = deep || Number.MAX_VALUE; + } + select(startPoint, endPoint) { + this.startPoint = startPoint || this.startPoint; + this.endPoint = endPoint || this.endPoint; + this.collection = []; + this.updateFrustum(this.startPoint, this.endPoint); + this.searchChildInFrustum(frustum, this.scene); + return this.collection; + } + updateFrustum(startPoint, endPoint) { + startPoint = startPoint || this.startPoint; + endPoint = endPoint || this.endPoint; + if (startPoint.x === endPoint.x) endPoint.x += Number.EPSILON; + if (startPoint.y === endPoint.y) endPoint.y += Number.EPSILON; + this.camera.updateProjectionMatrix(); + this.camera.updateMatrixWorld(); + if (this.camera.isPerspectiveCamera) { + tmpPoint.copy(startPoint); + tmpPoint.x = Math.min(startPoint.x, endPoint.x); + tmpPoint.y = Math.max(startPoint.y, endPoint.y); + endPoint.x = Math.max(startPoint.x, endPoint.x); + endPoint.y = Math.min(startPoint.y, endPoint.y); + vecNear.setFromMatrixPosition(this.camera.matrixWorld); + vecTopLeft.copy(tmpPoint); + vecTopRight.set(endPoint.x, tmpPoint.y, 0); + vecDownRight.copy(endPoint); + vecDownLeft.set(tmpPoint.x, endPoint.y, 0); + vecTopLeft.unproject(this.camera); + vecTopRight.unproject(this.camera); + vecDownRight.unproject(this.camera); + vecDownLeft.unproject(this.camera); + vectemp1.copy(vecTopLeft).sub(vecNear); + vectemp2.copy(vecTopRight).sub(vecNear); + vectemp3.copy(vecDownRight).sub(vecNear); + vectemp1.normalize(); + vectemp2.normalize(); + vectemp3.normalize(); + vectemp1.multiplyScalar(this.deep); + vectemp2.multiplyScalar(this.deep); + vectemp3.multiplyScalar(this.deep); + vectemp1.add(vecNear); + vectemp2.add(vecNear); + vectemp3.add(vecNear); + var planes = frustum.planes; + planes[0].setFromCoplanarPoints(vecNear, vecTopLeft, vecTopRight); + planes[1].setFromCoplanarPoints(vecNear, vecTopRight, vecDownRight); + planes[2].setFromCoplanarPoints(vecDownRight, vecDownLeft, vecNear); + planes[3].setFromCoplanarPoints(vecDownLeft, vecTopLeft, vecNear); + planes[4].setFromCoplanarPoints(vecTopRight, vecDownRight, vecDownLeft); + planes[5].setFromCoplanarPoints(vectemp3, vectemp2, vectemp1); + planes[5].normal.multiplyScalar(-1); + } else if (this.camera.isOrthographicCamera) { + const left = Math.min(startPoint.x, endPoint.x); + const top = Math.max(startPoint.y, endPoint.y); + const right = Math.max(startPoint.x, endPoint.x); + const down = Math.min(startPoint.y, endPoint.y); + vecTopLeft.set(left, top, -1); + vecTopRight.set(right, top, -1); + vecDownRight.set(right, down, -1); + vecDownLeft.set(left, down, -1); + vecFarTopLeft.set(left, top, 1); + vecFarTopRight.set(right, top, 1); + vecFarDownRight.set(right, down, 1); + vecFarDownLeft.set(left, down, 1); + vecTopLeft.unproject(this.camera); + vecTopRight.unproject(this.camera); + vecDownRight.unproject(this.camera); + vecDownLeft.unproject(this.camera); + vecFarTopLeft.unproject(this.camera); + vecFarTopRight.unproject(this.camera); + vecFarDownRight.unproject(this.camera); + vecFarDownLeft.unproject(this.camera); + var planes = frustum.planes; + planes[0].setFromCoplanarPoints(vecTopLeft, vecFarTopLeft, vecFarTopRight); + planes[1].setFromCoplanarPoints(vecTopRight, vecFarTopRight, vecFarDownRight); + planes[2].setFromCoplanarPoints(vecFarDownRight, vecFarDownLeft, vecDownLeft); + planes[3].setFromCoplanarPoints(vecFarDownLeft, vecFarTopLeft, vecTopLeft); + planes[4].setFromCoplanarPoints(vecTopRight, vecDownRight, vecDownLeft); + planes[5].setFromCoplanarPoints(vecFarDownRight, vecFarTopRight, vecFarTopLeft); + planes[5].normal.multiplyScalar(-1); + } else console.error("THREE.SelectionBox: Unsupported camera type."); + } + searchChildInFrustum(frustum2, object) { + if (object.isMesh || object.isLine || object.isPoints) { + if (object.material !== void 0) { + if (object.geometry.boundingSphere === null) object.geometry.computeBoundingSphere(); + center$1.copy(object.geometry.boundingSphere.center); + center$1.applyMatrix4(object.matrixWorld); + if (frustum2.containsPoint(center$1)) this.collection.push(object); + } + } + if (object.children.length > 0) for (let x = 0; x < object.children.length; x++) this.searchChildInFrustum(frustum2, object.children[x]); + } +}; +//#endregion +//#region node_modules/three-stdlib/effects/AsciiEffect.js +var AsciiEffect = class { + constructor(renderer, charSet = " .:-=+*#%@", options = {}) { + const fResolution = options["resolution"] || .15; + const iScale = options["scale"] || 1; + const bColor = options["color"] || false; + const bAlpha = options["alpha"] || false; + const bBlock = options["block"] || false; + const bInvert = options["invert"] || false; + const strResolution = options["strResolution"] || "low"; + let width, height; + const domElement = document.createElement("div"); + domElement.style.cursor = "default"; + const oAscii = document.createElement("table"); + domElement.appendChild(oAscii); + let iWidth, iHeight; + let oImg; + this.setSize = function(w, h) { + width = w; + height = h; + renderer.setSize(w, h); + initAsciiSize(); + }; + this.render = function(scene, camera) { + renderer.render(scene, camera); + asciifyImage(oAscii); + }; + this.domElement = domElement; + function initAsciiSize() { + iWidth = Math.floor(width * fResolution); + iHeight = Math.floor(height * fResolution); + oCanvas.width = iWidth; + oCanvas.height = iHeight; + oImg = renderer.domElement; + if (oImg.style.backgroundColor) { + oAscii.rows[0].cells[0].style.backgroundColor = oImg.style.backgroundColor; + oAscii.rows[0].cells[0].style.color = oImg.style.color; + } + oAscii.cellSpacing = 0; + oAscii.cellPadding = 0; + const oStyle = oAscii.style; + oStyle.whiteSpace = "pre"; + oStyle.margin = "0px"; + oStyle.padding = "0px"; + oStyle.letterSpacing = fLetterSpacing + "px"; + oStyle.fontFamily = strFont; + oStyle.fontSize = fFontSize + "px"; + oStyle.lineHeight = fLineHeight + "px"; + oStyle.textAlign = "left"; + oStyle.textDecoration = "none"; + } + const aDefaultCharList = " .,:;i1tfLCG08@".split(""); + const aDefaultColorCharList = " CGO08@".split(""); + const strFont = "courier new, monospace"; + const oCanvasImg = renderer.domElement; + const oCanvas = document.createElement("canvas"); + if (!oCanvas.getContext) return; + const oCtx = oCanvas.getContext("2d"); + if (!oCtx.getImageData) return; + let aCharList = bColor ? aDefaultColorCharList : aDefaultCharList; + if (charSet) aCharList = charSet; + const fFontSize = 2 / fResolution * iScale; + const fLineHeight = 2 / fResolution * iScale; + let fLetterSpacing = 0; + if (strResolution == "low") switch (iScale) { + case 1: + fLetterSpacing = -1; + break; + case 2: + case 3: + fLetterSpacing = -2.1; + break; + case 4: + fLetterSpacing = -3.1; + break; + case 5: + fLetterSpacing = -4.15; + break; + } + if (strResolution == "medium") switch (iScale) { + case 1: + fLetterSpacing = 0; + break; + case 2: + fLetterSpacing = -1; + break; + case 3: + fLetterSpacing = -1.04; + break; + case 4: + case 5: + fLetterSpacing = -2.1; + break; + } + if (strResolution == "high") switch (iScale) { + case 1: + case 2: + fLetterSpacing = 0; + break; + case 3: + case 4: + case 5: + fLetterSpacing = -1; + break; + } + function asciifyImage(oAscii2) { + oCtx.clearRect(0, 0, iWidth, iHeight); + oCtx.drawImage(oCanvasImg, 0, 0, iWidth, iHeight); + const oImgData = oCtx.getImageData(0, 0, iWidth, iHeight).data; + let strChars = ""; + for (let y = 0; y < iHeight; y += 2) { + for (let x = 0; x < iWidth; x++) { + const iOffset = (y * iWidth + x) * 4; + const iRed = oImgData[iOffset]; + const iGreen = oImgData[iOffset + 1]; + const iBlue = oImgData[iOffset + 2]; + const iAlpha = oImgData[iOffset + 3]; + let iCharIdx; + let fBrightness; + fBrightness = (.3 * iRed + .59 * iGreen + .11 * iBlue) / 255; + if (iAlpha == 0) fBrightness = 1; + iCharIdx = Math.floor((1 - fBrightness) * (aCharList.length - 1)); + if (bInvert) iCharIdx = aCharList.length - iCharIdx - 1; + let strThisChar = aCharList[iCharIdx]; + if (strThisChar === void 0 || strThisChar == " ") strThisChar = " "; + if (bColor) strChars += "" + strThisChar + ""; + else strChars += strThisChar; + } + strChars += "
"; + } + oAscii2.innerHTML = `${strChars}`; + } + } +}; +//#endregion +//#region node_modules/three-stdlib/curves/NURBSUtils.js +function findSpan(p, u, U) { + const n = U.length - p - 1; + if (u >= U[n]) return n - 1; + if (u <= U[p]) return p; + let low = p; + let high = n; + let mid = Math.floor((low + high) / 2); + while (u < U[mid] || u >= U[mid + 1]) { + if (u < U[mid]) high = mid; + else low = mid; + mid = Math.floor((low + high) / 2); + } + return mid; +} +function calcBasisFunctions(span, u, p, U) { + const N = []; + const left = []; + const right = []; + N[0] = 1; + for (let j = 1; j <= p; ++j) { + left[j] = u - U[span + 1 - j]; + right[j] = U[span + j] - u; + let saved = 0; + for (let r = 0; r < j; ++r) { + const rv = right[r + 1]; + const lv = left[j - r]; + const temp = N[r] / (rv + lv); + N[r] = saved + rv * temp; + saved = lv * temp; + } + N[j] = saved; + } + return N; +} +function calcBSplinePoint(p, U, P, u) { + const span = findSpan(p, u, U); + const N = calcBasisFunctions(span, u, p, U); + const C = new Vector4(0, 0, 0, 0); + for (let j = 0; j <= p; ++j) { + const point = P[span - p + j]; + const Nj = N[j]; + const wNj = point.w * Nj; + C.x += point.x * wNj; + C.y += point.y * wNj; + C.z += point.z * wNj; + C.w += point.w * Nj; + } + return C; +} +function calcBasisFunctionDerivatives(span, u, p, n, U) { + const zeroArr = []; + for (let i = 0; i <= p; ++i) zeroArr[i] = 0; + const ders = []; + for (let i = 0; i <= n; ++i) ders[i] = zeroArr.slice(0); + const ndu = []; + for (let i = 0; i <= p; ++i) ndu[i] = zeroArr.slice(0); + ndu[0][0] = 1; + const left = zeroArr.slice(0); + const right = zeroArr.slice(0); + for (let j = 1; j <= p; ++j) { + left[j] = u - U[span + 1 - j]; + right[j] = U[span + j] - u; + let saved = 0; + for (let r2 = 0; r2 < j; ++r2) { + const rv = right[r2 + 1]; + const lv = left[j - r2]; + ndu[j][r2] = rv + lv; + const temp = ndu[r2][j - 1] / ndu[j][r2]; + ndu[r2][j] = saved + rv * temp; + saved = lv * temp; + } + ndu[j][j] = saved; + } + for (let j = 0; j <= p; ++j) ders[0][j] = ndu[j][p]; + for (let r2 = 0; r2 <= p; ++r2) { + let s1 = 0; + let s2 = 1; + const a = []; + for (let i = 0; i <= p; ++i) a[i] = zeroArr.slice(0); + a[0][0] = 1; + for (let k = 1; k <= n; ++k) { + let d = 0; + const rk = r2 - k; + const pk = p - k; + if (r2 >= k) { + a[s2][0] = a[s1][0] / ndu[pk + 1][rk]; + d = a[s2][0] * ndu[rk][pk]; + } + const j1 = rk >= -1 ? 1 : -rk; + const j2 = r2 - 1 <= pk ? k - 1 : p - r2; + for (let j3 = j1; j3 <= j2; ++j3) { + a[s2][j3] = (a[s1][j3] - a[s1][j3 - 1]) / ndu[pk + 1][rk + j3]; + d += a[s2][j3] * ndu[rk + j3][pk]; + } + if (r2 <= pk) { + a[s2][k] = -a[s1][k - 1] / ndu[pk + 1][r2]; + d += a[s2][k] * ndu[r2][pk]; + } + ders[k][r2] = d; + const j = s1; + s1 = s2; + s2 = j; + } + } + let r = p; + for (let k = 1; k <= n; ++k) { + for (let j = 0; j <= p; ++j) ders[k][j] *= r; + r *= p - k; + } + return ders; +} +function calcBSplineDerivatives(p, U, P, u, nd) { + const du = nd < p ? nd : p; + const CK = []; + const span = findSpan(p, u, U); + const nders = calcBasisFunctionDerivatives(span, u, p, du, U); + const Pw = []; + for (let i = 0; i < P.length; ++i) { + const point = P[i].clone(); + const w = point.w; + point.x *= w; + point.y *= w; + point.z *= w; + Pw[i] = point; + } + for (let k = 0; k <= du; ++k) { + const point = Pw[span - p].clone().multiplyScalar(nders[k][0]); + for (let j = 1; j <= p; ++j) point.add(Pw[span - p + j].clone().multiplyScalar(nders[k][j])); + CK[k] = point; + } + for (let k = du + 1; k <= nd + 1; ++k) CK[k] = new Vector4(0, 0, 0); + return CK; +} +function calcKoverI(k, i) { + let nom = 1; + for (let j = 2; j <= k; ++j) nom *= j; + let denom = 1; + for (let j = 2; j <= i; ++j) denom *= j; + for (let j = 2; j <= k - i; ++j) denom *= j; + return nom / denom; +} +function calcRationalCurveDerivatives(Pders) { + const nd = Pders.length; + const Aders = []; + const wders = []; + for (let i = 0; i < nd; ++i) { + const point = Pders[i]; + Aders[i] = new Vector3(point.x, point.y, point.z); + wders[i] = point.w; + } + const CK = []; + for (let k = 0; k < nd; ++k) { + const v = Aders[k].clone(); + for (let i = 1; i <= k; ++i) v.sub(CK[k - i].clone().multiplyScalar(calcKoverI(k, i) * wders[i])); + CK[k] = v.divideScalar(wders[0]); + } + return CK; +} +function calcNURBSDerivatives(p, U, P, u, nd) { + return calcRationalCurveDerivatives(calcBSplineDerivatives(p, U, P, u, nd)); +} +//#endregion +//#region node_modules/three-stdlib/curves/NURBSCurve.js +var NURBSCurve = class extends Curve { + constructor(degree, knots, controlPoints, startKnot, endKnot) { + super(); + this.degree = degree; + this.knots = knots; + this.controlPoints = []; + this.startKnot = startKnot || 0; + this.endKnot = endKnot || this.knots.length - 1; + for (let i = 0; i < controlPoints.length; ++i) { + const point = controlPoints[i]; + this.controlPoints[i] = new Vector4(point.x, point.y, point.z, point.w); + } + } + getPoint(t, optionalTarget) { + const point = optionalTarget || new Vector3(); + const u = this.knots[this.startKnot] + t * (this.knots[this.endKnot] - this.knots[this.startKnot]); + const hpoint = calcBSplinePoint(this.degree, this.knots, this.controlPoints, u); + if (hpoint.w != 1) hpoint.divideScalar(hpoint.w); + return point.set(hpoint.x, hpoint.y, hpoint.z); + } + getTangent(t, optionalTarget) { + const tangent = optionalTarget || new Vector3(); + const u = this.knots[0] + t * (this.knots[this.knots.length - 1] - this.knots[0]); + const ders = calcNURBSDerivatives(this.degree, this.knots, this.controlPoints, u, 1); + tangent.copy(ders[1]).normalize(); + return tangent; + } +}; +//#endregion +//#region node_modules/three-stdlib/loaders/FBXLoader.js +var fbxTree; +var connections; +var sceneGraph; +var FBXLoader = class extends Loader$1 { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const path = scope.path === "" ? LoaderUtils.extractUrlBase(url) : scope.path; + const loader = new FileLoader(this.manager); + loader.setPath(scope.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(buffer) { + try { + onLoad(scope.parse(buffer, path)); + } catch (e) { + if (onError) onError(e); + else console.error(e); + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(FBXBuffer, path) { + if (isFbxFormatBinary(FBXBuffer)) fbxTree = new BinaryParser().parse(FBXBuffer); + else { + const FBXText = convertArrayBufferToString(FBXBuffer); + if (!isFbxFormatASCII(FBXText)) throw new Error("THREE.FBXLoader: Unknown format."); + if (getFbxVersion(FBXText) < 7e3) throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: " + getFbxVersion(FBXText)); + fbxTree = new TextParser().parse(FBXText); + } + return new FBXTreeParser(new TextureLoader(this.manager).setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin), this.manager).parse(fbxTree); + } +}; +var FBXTreeParser = class { + constructor(textureLoader, manager) { + this.textureLoader = textureLoader; + this.manager = manager; + } + parse() { + connections = this.parseConnections(); + const images = this.parseImages(); + const textures = this.parseTextures(images); + const materials = this.parseMaterials(textures); + const deformers = this.parseDeformers(); + const geometryMap = new GeometryParser().parse(deformers); + this.parseScene(deformers, geometryMap, materials); + return sceneGraph; + } + parseConnections() { + const connectionMap = /* @__PURE__ */ new Map(); + if ("Connections" in fbxTree) fbxTree.Connections.connections.forEach(function(rawConnection) { + const fromID = rawConnection[0]; + const toID = rawConnection[1]; + const relationship = rawConnection[2]; + if (!connectionMap.has(fromID)) connectionMap.set(fromID, { + parents: [], + children: [] + }); + const parentRelationship = { + ID: toID, + relationship + }; + connectionMap.get(fromID).parents.push(parentRelationship); + if (!connectionMap.has(toID)) connectionMap.set(toID, { + parents: [], + children: [] + }); + const childRelationship = { + ID: fromID, + relationship + }; + connectionMap.get(toID).children.push(childRelationship); + }); + return connectionMap; + } + parseImages() { + const images = {}; + const blobs = {}; + if ("Video" in fbxTree.Objects) { + const videoNodes = fbxTree.Objects.Video; + for (const nodeID in videoNodes) { + const videoNode = videoNodes[nodeID]; + const id = parseInt(nodeID); + images[id] = videoNode.RelativeFilename || videoNode.Filename; + if ("Content" in videoNode) { + const arrayBufferContent = videoNode.Content instanceof ArrayBuffer && videoNode.Content.byteLength > 0; + const base64Content = typeof videoNode.Content === "string" && videoNode.Content !== ""; + if (arrayBufferContent || base64Content) { + const image = this.parseImage(videoNodes[nodeID]); + blobs[videoNode.RelativeFilename || videoNode.Filename] = image; + } + } + } + } + for (const id in images) { + const filename = images[id]; + if (blobs[filename] !== void 0) images[id] = blobs[filename]; + else images[id] = images[id].split("\\").pop(); + } + return images; + } + parseImage(videoNode) { + const content = videoNode.Content; + const fileName = videoNode.RelativeFilename || videoNode.Filename; + const extension = fileName.slice(fileName.lastIndexOf(".") + 1).toLowerCase(); + let type; + switch (extension) { + case "bmp": + type = "image/bmp"; + break; + case "jpg": + case "jpeg": + type = "image/jpeg"; + break; + case "png": + type = "image/png"; + break; + case "tif": + type = "image/tiff"; + break; + case "tga": + if (this.manager.getHandler(".tga") === null) console.warn("FBXLoader: TGA loader not found, skipping ", fileName); + type = "image/tga"; + break; + default: + console.warn("FBXLoader: Image type \"" + extension + "\" is not supported."); + return; + } + if (typeof content === "string") return "data:" + type + ";base64," + content; + else { + const array = new Uint8Array(content); + return window.URL.createObjectURL(new Blob([array], { type })); + } + } + parseTextures(images) { + const textureMap = /* @__PURE__ */ new Map(); + if ("Texture" in fbxTree.Objects) { + const textureNodes = fbxTree.Objects.Texture; + for (const nodeID in textureNodes) { + const texture = this.parseTexture(textureNodes[nodeID], images); + textureMap.set(parseInt(nodeID), texture); + } + } + return textureMap; + } + parseTexture(textureNode, images) { + const texture = this.loadTexture(textureNode, images); + texture.ID = textureNode.id; + texture.name = textureNode.attrName; + const wrapModeU = textureNode.WrapModeU; + const wrapModeV = textureNode.WrapModeV; + const valueU = wrapModeU !== void 0 ? wrapModeU.value : 0; + const valueV = wrapModeV !== void 0 ? wrapModeV.value : 0; + texture.wrapS = valueU === 0 ? RepeatWrapping : ClampToEdgeWrapping; + texture.wrapT = valueV === 0 ? RepeatWrapping : ClampToEdgeWrapping; + if ("Scaling" in textureNode) { + const values = textureNode.Scaling.value; + texture.repeat.x = values[0]; + texture.repeat.y = values[1]; + } + return texture; + } + loadTexture(textureNode, images) { + let fileName; + const currentPath = this.textureLoader.path; + const children = connections.get(textureNode.id).children; + if (children !== void 0 && children.length > 0 && images[children[0].ID] !== void 0) { + fileName = images[children[0].ID]; + if (fileName.indexOf("blob:") === 0 || fileName.indexOf("data:") === 0) this.textureLoader.setPath(void 0); + } + let texture; + const extension = textureNode.FileName.slice(-3).toLowerCase(); + if (extension === "tga") { + const loader = this.manager.getHandler(".tga"); + if (loader === null) { + console.warn("FBXLoader: TGA loader not found, creating placeholder texture for", textureNode.RelativeFilename); + texture = new Texture$1(); + } else { + loader.setPath(this.textureLoader.path); + texture = loader.load(fileName); + } + } else if (extension === "psd") { + console.warn("FBXLoader: PSD textures are not supported, creating placeholder texture for", textureNode.RelativeFilename); + texture = new Texture$1(); + } else texture = this.textureLoader.load(fileName); + this.textureLoader.setPath(currentPath); + return texture; + } + parseMaterials(textureMap) { + const materialMap = /* @__PURE__ */ new Map(); + if ("Material" in fbxTree.Objects) { + const materialNodes = fbxTree.Objects.Material; + for (const nodeID in materialNodes) { + const material = this.parseMaterial(materialNodes[nodeID], textureMap); + if (material !== null) materialMap.set(parseInt(nodeID), material); + } + } + return materialMap; + } + parseMaterial(materialNode, textureMap) { + const ID = materialNode.id; + const name = materialNode.attrName; + let type = materialNode.ShadingModel; + if (typeof type === "object") type = type.value; + if (!connections.has(ID)) return null; + const parameters = this.parseParameters(materialNode, textureMap, ID); + let material; + switch (type.toLowerCase()) { + case "phong": + material = new MeshPhongMaterial(); + break; + case "lambert": + material = new MeshLambertMaterial(); + break; + default: + console.warn("THREE.FBXLoader: unknown material type \"%s\". Defaulting to MeshPhongMaterial.", type); + material = new MeshPhongMaterial(); + break; + } + material.setValues(parameters); + material.name = name; + return material; + } + parseParameters(materialNode, textureMap, ID) { + const parameters = {}; + if (materialNode.BumpFactor) parameters.bumpScale = materialNode.BumpFactor.value; + if (materialNode.Diffuse) parameters.color = new Color().fromArray(materialNode.Diffuse.value); + else if (materialNode.DiffuseColor && (materialNode.DiffuseColor.type === "Color" || materialNode.DiffuseColor.type === "ColorRGB")) parameters.color = new Color().fromArray(materialNode.DiffuseColor.value); + if (materialNode.DisplacementFactor) parameters.displacementScale = materialNode.DisplacementFactor.value; + if (materialNode.Emissive) parameters.emissive = new Color().fromArray(materialNode.Emissive.value); + else if (materialNode.EmissiveColor && (materialNode.EmissiveColor.type === "Color" || materialNode.EmissiveColor.type === "ColorRGB")) parameters.emissive = new Color().fromArray(materialNode.EmissiveColor.value); + if (materialNode.EmissiveFactor) parameters.emissiveIntensity = parseFloat(materialNode.EmissiveFactor.value); + if (materialNode.Opacity) parameters.opacity = parseFloat(materialNode.Opacity.value); + if (parameters.opacity < 1) parameters.transparent = true; + if (materialNode.ReflectionFactor) parameters.reflectivity = materialNode.ReflectionFactor.value; + if (materialNode.Shininess) parameters.shininess = materialNode.Shininess.value; + if (materialNode.Specular) parameters.specular = new Color().fromArray(materialNode.Specular.value); + else if (materialNode.SpecularColor && materialNode.SpecularColor.type === "Color") parameters.specular = new Color().fromArray(materialNode.SpecularColor.value); + const scope = this; + connections.get(ID).children.forEach(function(child) { + const type = child.relationship; + switch (type) { + case "Bump": + parameters.bumpMap = scope.getTexture(textureMap, child.ID); + break; + case "Maya|TEX_ao_map": + parameters.aoMap = scope.getTexture(textureMap, child.ID); + break; + case "DiffuseColor": + case "Maya|TEX_color_map": + parameters.map = scope.getTexture(textureMap, child.ID); + if (parameters.map !== void 0) if ("colorSpace" in parameters.map) parameters.map.colorSpace = "srgb"; + else parameters.map.encoding = 3001; + break; + case "DisplacementColor": + parameters.displacementMap = scope.getTexture(textureMap, child.ID); + break; + case "EmissiveColor": + parameters.emissiveMap = scope.getTexture(textureMap, child.ID); + if (parameters.emissiveMap !== void 0) if ("colorSpace" in parameters.emissiveMap) parameters.emissiveMap.colorSpace = "srgb"; + else parameters.emissiveMap.encoding = 3001; + break; + case "NormalMap": + case "Maya|TEX_normal_map": + parameters.normalMap = scope.getTexture(textureMap, child.ID); + break; + case "ReflectionColor": + parameters.envMap = scope.getTexture(textureMap, child.ID); + if (parameters.envMap !== void 0) { + parameters.envMap.mapping = 303; + if ("colorSpace" in parameters.envMap) parameters.envMap.colorSpace = "srgb"; + else parameters.envMap.encoding = 3001; + } + break; + case "SpecularColor": + parameters.specularMap = scope.getTexture(textureMap, child.ID); + if (parameters.specularMap !== void 0) if ("colorSpace" in parameters.specularMap) parameters.specularMap.colorSpace = "srgb"; + else parameters.specularMap.encoding = 3001; + break; + case "TransparentColor": + case "TransparencyFactor": + parameters.alphaMap = scope.getTexture(textureMap, child.ID); + parameters.transparent = true; + break; + default: + console.warn("THREE.FBXLoader: %s map is not supported in three.js, skipping texture.", type); + break; + } + }); + return parameters; + } + getTexture(textureMap, id) { + if ("LayeredTexture" in fbxTree.Objects && id in fbxTree.Objects.LayeredTexture) { + console.warn("THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer."); + id = connections.get(id).children[0].ID; + } + return textureMap.get(id); + } + parseDeformers() { + const skeletons = {}; + const morphTargets = {}; + if ("Deformer" in fbxTree.Objects) { + const DeformerNodes = fbxTree.Objects.Deformer; + for (const nodeID in DeformerNodes) { + const deformerNode = DeformerNodes[nodeID]; + const relationships = connections.get(parseInt(nodeID)); + if (deformerNode.attrType === "Skin") { + const skeleton = this.parseSkeleton(relationships, DeformerNodes); + skeleton.ID = nodeID; + if (relationships.parents.length > 1) console.warn("THREE.FBXLoader: skeleton attached to more than one geometry is not supported."); + skeleton.geometryID = relationships.parents[0].ID; + skeletons[nodeID] = skeleton; + } else if (deformerNode.attrType === "BlendShape") { + const morphTarget = { id: nodeID }; + morphTarget.rawTargets = this.parseMorphTargets(relationships, DeformerNodes); + morphTarget.id = nodeID; + if (relationships.parents.length > 1) console.warn("THREE.FBXLoader: morph target attached to more than one geometry is not supported."); + morphTargets[nodeID] = morphTarget; + } + } + } + return { + skeletons, + morphTargets + }; + } + parseSkeleton(relationships, deformerNodes) { + const rawBones = []; + relationships.children.forEach(function(child) { + const boneNode = deformerNodes[child.ID]; + if (boneNode.attrType !== "Cluster") return; + const rawBone = { + ID: child.ID, + indices: [], + weights: [], + transformLink: new Matrix4().fromArray(boneNode.TransformLink.a) + }; + if ("Indexes" in boneNode) { + rawBone.indices = boneNode.Indexes.a; + rawBone.weights = boneNode.Weights.a; + } + rawBones.push(rawBone); + }); + return { + rawBones, + bones: [] + }; + } + parseMorphTargets(relationships, deformerNodes) { + const rawMorphTargets = []; + for (let i = 0; i < relationships.children.length; i++) { + const child = relationships.children[i]; + const morphTargetNode = deformerNodes[child.ID]; + const rawMorphTarget = { + name: morphTargetNode.attrName, + initialWeight: morphTargetNode.DeformPercent, + id: morphTargetNode.id, + fullWeights: morphTargetNode.FullWeights.a + }; + if (morphTargetNode.attrType !== "BlendShapeChannel") return; + rawMorphTarget.geoID = connections.get(parseInt(child.ID)).children.filter(function(child2) { + return child2.relationship === void 0; + })[0].ID; + rawMorphTargets.push(rawMorphTarget); + } + return rawMorphTargets; + } + parseScene(deformers, geometryMap, materialMap) { + sceneGraph = new Group(); + const modelMap = this.parseModels(deformers.skeletons, geometryMap, materialMap); + const modelNodes = fbxTree.Objects.Model; + const scope = this; + modelMap.forEach(function(model) { + const modelNode = modelNodes[model.ID]; + scope.setLookAtProperties(model, modelNode); + connections.get(model.ID).parents.forEach(function(connection) { + const parent = modelMap.get(connection.ID); + if (parent !== void 0) parent.add(model); + }); + if (model.parent === null) sceneGraph.add(model); + }); + this.bindSkeleton(deformers.skeletons, geometryMap, modelMap); + this.createAmbientLight(); + sceneGraph.traverse(function(node) { + if (node.userData.transformData) { + if (node.parent) { + node.userData.transformData.parentMatrix = node.parent.matrix; + node.userData.transformData.parentMatrixWorld = node.parent.matrixWorld; + } + const transform = generateTransform(node.userData.transformData); + node.applyMatrix4(transform); + node.updateWorldMatrix(); + } + }); + const animations = new AnimationParser().parse(); + if (sceneGraph.children.length === 1 && sceneGraph.children[0].isGroup) { + sceneGraph.children[0].animations = animations; + sceneGraph = sceneGraph.children[0]; + } + sceneGraph.animations = animations; + } + parseModels(skeletons, geometryMap, materialMap) { + const modelMap = /* @__PURE__ */ new Map(); + const modelNodes = fbxTree.Objects.Model; + for (const nodeID in modelNodes) { + const id = parseInt(nodeID); + const node = modelNodes[nodeID]; + const relationships = connections.get(id); + let model = this.buildSkeleton(relationships, skeletons, id, node.attrName); + if (!model) { + switch (node.attrType) { + case "Camera": + model = this.createCamera(relationships); + break; + case "Light": + model = this.createLight(relationships); + break; + case "Mesh": + model = this.createMesh(relationships, geometryMap, materialMap); + break; + case "NurbsCurve": + model = this.createCurve(relationships, geometryMap); + break; + case "LimbNode": + case "Root": + model = new Bone(); + break; + default: + model = new Group(); + break; + } + model.name = node.attrName ? PropertyBinding.sanitizeNodeName(node.attrName) : ""; + model.ID = id; + } + this.getTransformData(model, node); + modelMap.set(id, model); + } + return modelMap; + } + buildSkeleton(relationships, skeletons, id, name) { + let bone = null; + relationships.parents.forEach(function(parent) { + for (const ID in skeletons) { + const skeleton = skeletons[ID]; + skeleton.rawBones.forEach(function(rawBone, i) { + if (rawBone.ID === parent.ID) { + const subBone = bone; + bone = new Bone(); + bone.matrixWorld.copy(rawBone.transformLink); + bone.name = name ? PropertyBinding.sanitizeNodeName(name) : ""; + bone.ID = id; + skeleton.bones[i] = bone; + if (subBone !== null) bone.add(subBone); + } + }); + } + }); + return bone; + } + createCamera(relationships) { + let model; + let cameraAttribute; + relationships.children.forEach(function(child) { + const attr = fbxTree.Objects.NodeAttribute[child.ID]; + if (attr !== void 0) cameraAttribute = attr; + }); + if (cameraAttribute === void 0) model = new Object3D(); + else { + let type = 0; + if (cameraAttribute.CameraProjectionType !== void 0 && cameraAttribute.CameraProjectionType.value === 1) type = 1; + let nearClippingPlane = 1; + if (cameraAttribute.NearPlane !== void 0) nearClippingPlane = cameraAttribute.NearPlane.value / 1e3; + let farClippingPlane = 1e3; + if (cameraAttribute.FarPlane !== void 0) farClippingPlane = cameraAttribute.FarPlane.value / 1e3; + let width = window.innerWidth; + let height = window.innerHeight; + if (cameraAttribute.AspectWidth !== void 0 && cameraAttribute.AspectHeight !== void 0) { + width = cameraAttribute.AspectWidth.value; + height = cameraAttribute.AspectHeight.value; + } + const aspect = width / height; + let fov = 45; + if (cameraAttribute.FieldOfView !== void 0) fov = cameraAttribute.FieldOfView.value; + const focalLength = cameraAttribute.FocalLength ? cameraAttribute.FocalLength.value : null; + switch (type) { + case 0: + model = new PerspectiveCamera$1(fov, aspect, nearClippingPlane, farClippingPlane); + if (focalLength !== null) model.setFocalLength(focalLength); + break; + case 1: + model = new OrthographicCamera$1(-width / 2, width / 2, height / 2, -height / 2, nearClippingPlane, farClippingPlane); + break; + default: + console.warn("THREE.FBXLoader: Unknown camera type " + type + "."); + model = new Object3D(); + break; + } + } + return model; + } + createLight(relationships) { + let model; + let lightAttribute; + relationships.children.forEach(function(child) { + const attr = fbxTree.Objects.NodeAttribute[child.ID]; + if (attr !== void 0) lightAttribute = attr; + }); + if (lightAttribute === void 0) model = new Object3D(); + else { + let type; + if (lightAttribute.LightType === void 0) type = 0; + else type = lightAttribute.LightType.value; + let color = 16777215; + if (lightAttribute.Color !== void 0) color = new Color().fromArray(lightAttribute.Color.value); + let intensity = lightAttribute.Intensity === void 0 ? 1 : lightAttribute.Intensity.value / 100; + if (lightAttribute.CastLightOnObject !== void 0 && lightAttribute.CastLightOnObject.value === 0) intensity = 0; + let distance = 0; + if (lightAttribute.FarAttenuationEnd !== void 0) if (lightAttribute.EnableFarAttenuation !== void 0 && lightAttribute.EnableFarAttenuation.value === 0) distance = 0; + else distance = lightAttribute.FarAttenuationEnd.value; + const decay = 1; + switch (type) { + case 0: + model = new PointLight(color, intensity, distance, decay); + break; + case 1: + model = new DirectionalLight(color, intensity); + break; + case 2: + let angle = Math.PI / 3; + if (lightAttribute.InnerAngle !== void 0) angle = MathUtils.degToRad(lightAttribute.InnerAngle.value); + let penumbra = 0; + if (lightAttribute.OuterAngle !== void 0) { + penumbra = MathUtils.degToRad(lightAttribute.OuterAngle.value); + penumbra = Math.max(penumbra, 1); + } + model = new SpotLight$1(color, intensity, distance, angle, penumbra, decay); + break; + default: + console.warn("THREE.FBXLoader: Unknown light type " + lightAttribute.LightType.value + ", defaulting to a PointLight."); + model = new PointLight(color, intensity); + break; + } + if (lightAttribute.CastShadows !== void 0 && lightAttribute.CastShadows.value === 1) model.castShadow = true; + } + return model; + } + createMesh(relationships, geometryMap, materialMap) { + let model; + let geometry = null; + let material = null; + const materials = []; + relationships.children.forEach(function(child) { + if (geometryMap.has(child.ID)) geometry = geometryMap.get(child.ID); + if (materialMap.has(child.ID)) materials.push(materialMap.get(child.ID)); + }); + if (materials.length > 1) material = materials; + else if (materials.length > 0) material = materials[0]; + else { + material = new MeshPhongMaterial({ color: 13421772 }); + materials.push(material); + } + if ("color" in geometry.attributes) materials.forEach(function(material2) { + material2.vertexColors = true; + }); + if (geometry.FBX_Deformer) { + model = new SkinnedMesh(geometry, material); + model.normalizeSkinWeights(); + } else model = new Mesh(geometry, material); + return model; + } + createCurve(relationships, geometryMap) { + return new Line$1(relationships.children.reduce(function(geo, child) { + if (geometryMap.has(child.ID)) geo = geometryMap.get(child.ID); + return geo; + }, null), new LineBasicMaterial({ + color: 3342591, + linewidth: 1 + })); + } + getTransformData(model, modelNode) { + const transformData = {}; + if ("InheritType" in modelNode) transformData.inheritType = parseInt(modelNode.InheritType.value); + if ("RotationOrder" in modelNode) transformData.eulerOrder = getEulerOrder(modelNode.RotationOrder.value); + else transformData.eulerOrder = "ZYX"; + if ("Lcl_Translation" in modelNode) transformData.translation = modelNode.Lcl_Translation.value; + if ("PreRotation" in modelNode) transformData.preRotation = modelNode.PreRotation.value; + if ("Lcl_Rotation" in modelNode) transformData.rotation = modelNode.Lcl_Rotation.value; + if ("PostRotation" in modelNode) transformData.postRotation = modelNode.PostRotation.value; + if ("Lcl_Scaling" in modelNode) transformData.scale = modelNode.Lcl_Scaling.value; + if ("ScalingOffset" in modelNode) transformData.scalingOffset = modelNode.ScalingOffset.value; + if ("ScalingPivot" in modelNode) transformData.scalingPivot = modelNode.ScalingPivot.value; + if ("RotationOffset" in modelNode) transformData.rotationOffset = modelNode.RotationOffset.value; + if ("RotationPivot" in modelNode) transformData.rotationPivot = modelNode.RotationPivot.value; + model.userData.transformData = transformData; + } + setLookAtProperties(model, modelNode) { + if ("LookAtProperty" in modelNode) connections.get(model.ID).children.forEach(function(child) { + if (child.relationship === "LookAtProperty") { + const lookAtTarget = fbxTree.Objects.Model[child.ID]; + if ("Lcl_Translation" in lookAtTarget) { + const pos = lookAtTarget.Lcl_Translation.value; + if (model.target !== void 0) { + model.target.position.fromArray(pos); + sceneGraph.add(model.target); + } else model.lookAt(new Vector3().fromArray(pos)); + } + } + }); + } + bindSkeleton(skeletons, geometryMap, modelMap) { + const bindMatrices = this.parsePoseNodes(); + for (const ID in skeletons) { + const skeleton = skeletons[ID]; + connections.get(parseInt(skeleton.ID)).parents.forEach(function(parent) { + if (geometryMap.has(parent.ID)) { + const geoID = parent.ID; + connections.get(geoID).parents.forEach(function(geoConnParent) { + if (modelMap.has(geoConnParent.ID)) modelMap.get(geoConnParent.ID).bind(new Skeleton(skeleton.bones), bindMatrices[geoConnParent.ID]); + }); + } + }); + } + } + parsePoseNodes() { + const bindMatrices = {}; + if ("Pose" in fbxTree.Objects) { + const BindPoseNode = fbxTree.Objects.Pose; + for (const nodeID in BindPoseNode) if (BindPoseNode[nodeID].attrType === "BindPose" && BindPoseNode[nodeID].NbPoseNodes > 0) { + const poseNodes = BindPoseNode[nodeID].PoseNode; + if (Array.isArray(poseNodes)) poseNodes.forEach(function(poseNode) { + bindMatrices[poseNode.Node] = new Matrix4().fromArray(poseNode.Matrix.a); + }); + else bindMatrices[poseNodes.Node] = new Matrix4().fromArray(poseNodes.Matrix.a); + } + } + return bindMatrices; + } + createAmbientLight() { + if ("GlobalSettings" in fbxTree && "AmbientColor" in fbxTree.GlobalSettings) { + const ambientColor = fbxTree.GlobalSettings.AmbientColor.value; + const r = ambientColor[0]; + const g = ambientColor[1]; + const b = ambientColor[2]; + if (r !== 0 || g !== 0 || b !== 0) { + const color = new Color(r, g, b); + sceneGraph.add(new AmbientLight(color, 1)); + } + } + } +}; +var GeometryParser = class { + parse(deformers) { + const geometryMap = /* @__PURE__ */ new Map(); + if ("Geometry" in fbxTree.Objects) { + const geoNodes = fbxTree.Objects.Geometry; + for (const nodeID in geoNodes) { + const relationships = connections.get(parseInt(nodeID)); + const geo = this.parseGeometry(relationships, geoNodes[nodeID], deformers); + geometryMap.set(parseInt(nodeID), geo); + } + } + return geometryMap; + } + parseGeometry(relationships, geoNode, deformers) { + switch (geoNode.attrType) { + case "Mesh": return this.parseMeshGeometry(relationships, geoNode, deformers); + case "NurbsCurve": return this.parseNurbsGeometry(geoNode); + } + } + parseMeshGeometry(relationships, geoNode, deformers) { + const skeletons = deformers.skeletons; + const morphTargets = []; + const modelNodes = relationships.parents.map(function(parent) { + return fbxTree.Objects.Model[parent.ID]; + }); + if (modelNodes.length === 0) return; + const skeleton = relationships.children.reduce(function(skeleton2, child) { + if (skeletons[child.ID] !== void 0) skeleton2 = skeletons[child.ID]; + return skeleton2; + }, null); + relationships.children.forEach(function(child) { + if (deformers.morphTargets[child.ID] !== void 0) morphTargets.push(deformers.morphTargets[child.ID]); + }); + const modelNode = modelNodes[0]; + const transformData = {}; + if ("RotationOrder" in modelNode) transformData.eulerOrder = getEulerOrder(modelNode.RotationOrder.value); + if ("InheritType" in modelNode) transformData.inheritType = parseInt(modelNode.InheritType.value); + if ("GeometricTranslation" in modelNode) transformData.translation = modelNode.GeometricTranslation.value; + if ("GeometricRotation" in modelNode) transformData.rotation = modelNode.GeometricRotation.value; + if ("GeometricScaling" in modelNode) transformData.scale = modelNode.GeometricScaling.value; + const transform = generateTransform(transformData); + return this.genGeometry(geoNode, skeleton, morphTargets, transform); + } + genGeometry(geoNode, skeleton, morphTargets, preTransform) { + const geo = new BufferGeometry(); + if (geoNode.attrName) geo.name = geoNode.attrName; + const geoInfo = this.parseGeoNode(geoNode, skeleton); + const buffers = this.genBuffers(geoInfo); + const positionAttribute = new Float32BufferAttribute(buffers.vertex, 3); + positionAttribute.applyMatrix4(preTransform); + geo.setAttribute("position", positionAttribute); + if (buffers.colors.length > 0) geo.setAttribute("color", new Float32BufferAttribute(buffers.colors, 3)); + if (skeleton) { + geo.setAttribute("skinIndex", new Uint16BufferAttribute(buffers.weightsIndices, 4)); + geo.setAttribute("skinWeight", new Float32BufferAttribute(buffers.vertexWeights, 4)); + geo.FBX_Deformer = skeleton; + } + if (buffers.normal.length > 0) { + const normalMatrix = new Matrix3().getNormalMatrix(preTransform); + const normalAttribute = new Float32BufferAttribute(buffers.normal, 3); + normalAttribute.applyNormalMatrix(normalMatrix); + geo.setAttribute("normal", normalAttribute); + } + buffers.uvs.forEach(function(uvBuffer, i) { + if (UV1 === "uv2") i++; + const name = i === 0 ? "uv" : `uv${i}`; + geo.setAttribute(name, new Float32BufferAttribute(buffers.uvs[i], 2)); + }); + if (geoInfo.material && geoInfo.material.mappingType !== "AllSame") { + let prevMaterialIndex = buffers.materialIndex[0]; + let startIndex = 0; + buffers.materialIndex.forEach(function(currentIndex, i) { + if (currentIndex !== prevMaterialIndex) { + geo.addGroup(startIndex, i - startIndex, prevMaterialIndex); + prevMaterialIndex = currentIndex; + startIndex = i; + } + }); + if (geo.groups.length > 0) { + const lastGroup = geo.groups[geo.groups.length - 1]; + const lastIndex = lastGroup.start + lastGroup.count; + if (lastIndex !== buffers.materialIndex.length) geo.addGroup(lastIndex, buffers.materialIndex.length - lastIndex, prevMaterialIndex); + } + if (geo.groups.length === 0) geo.addGroup(0, buffers.materialIndex.length, buffers.materialIndex[0]); + } + this.addMorphTargets(geo, geoNode, morphTargets, preTransform); + return geo; + } + parseGeoNode(geoNode, skeleton) { + const geoInfo = {}; + geoInfo.vertexPositions = geoNode.Vertices !== void 0 ? geoNode.Vertices.a : []; + geoInfo.vertexIndices = geoNode.PolygonVertexIndex !== void 0 ? geoNode.PolygonVertexIndex.a : []; + if (geoNode.LayerElementColor) geoInfo.color = this.parseVertexColors(geoNode.LayerElementColor[0]); + if (geoNode.LayerElementMaterial) geoInfo.material = this.parseMaterialIndices(geoNode.LayerElementMaterial[0]); + if (geoNode.LayerElementNormal) geoInfo.normal = this.parseNormals(geoNode.LayerElementNormal[0]); + if (geoNode.LayerElementUV) { + geoInfo.uv = []; + let i = 0; + while (geoNode.LayerElementUV[i]) { + if (geoNode.LayerElementUV[i].UV) geoInfo.uv.push(this.parseUVs(geoNode.LayerElementUV[i])); + i++; + } + } + geoInfo.weightTable = {}; + if (skeleton !== null) { + geoInfo.skeleton = skeleton; + skeleton.rawBones.forEach(function(rawBone, i) { + rawBone.indices.forEach(function(index, j) { + if (geoInfo.weightTable[index] === void 0) geoInfo.weightTable[index] = []; + geoInfo.weightTable[index].push({ + id: i, + weight: rawBone.weights[j] + }); + }); + }); + } + return geoInfo; + } + genBuffers(geoInfo) { + const buffers = { + vertex: [], + normal: [], + colors: [], + uvs: [], + materialIndex: [], + vertexWeights: [], + weightsIndices: [] + }; + let polygonIndex = 0; + let faceLength = 0; + let displayedWeightsWarning = false; + let facePositionIndexes = []; + let faceNormals = []; + let faceColors = []; + let faceUVs = []; + let faceWeights = []; + let faceWeightIndices = []; + const scope = this; + geoInfo.vertexIndices.forEach(function(vertexIndex, polygonVertexIndex) { + let materialIndex; + let endOfFace = false; + if (vertexIndex < 0) { + vertexIndex = vertexIndex ^ -1; + endOfFace = true; + } + let weightIndices = []; + let weights = []; + facePositionIndexes.push(vertexIndex * 3, vertexIndex * 3 + 1, vertexIndex * 3 + 2); + if (geoInfo.color) { + const data = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.color); + faceColors.push(data[0], data[1], data[2]); + } + if (geoInfo.skeleton) { + if (geoInfo.weightTable[vertexIndex] !== void 0) geoInfo.weightTable[vertexIndex].forEach(function(wt) { + weights.push(wt.weight); + weightIndices.push(wt.id); + }); + if (weights.length > 4) { + if (!displayedWeightsWarning) { + console.warn("THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights."); + displayedWeightsWarning = true; + } + const wIndex = [ + 0, + 0, + 0, + 0 + ]; + const Weight = [ + 0, + 0, + 0, + 0 + ]; + weights.forEach(function(weight, weightIndex) { + let currentWeight = weight; + let currentIndex = weightIndices[weightIndex]; + Weight.forEach(function(comparedWeight, comparedWeightIndex, comparedWeightArray) { + if (currentWeight > comparedWeight) { + comparedWeightArray[comparedWeightIndex] = currentWeight; + currentWeight = comparedWeight; + const tmp = wIndex[comparedWeightIndex]; + wIndex[comparedWeightIndex] = currentIndex; + currentIndex = tmp; + } + }); + }); + weightIndices = wIndex; + weights = Weight; + } + while (weights.length < 4) { + weights.push(0); + weightIndices.push(0); + } + for (let i = 0; i < 4; ++i) { + faceWeights.push(weights[i]); + faceWeightIndices.push(weightIndices[i]); + } + } + if (geoInfo.normal) { + const data = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.normal); + faceNormals.push(data[0], data[1], data[2]); + } + if (geoInfo.material && geoInfo.material.mappingType !== "AllSame") materialIndex = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.material)[0]; + if (geoInfo.uv) geoInfo.uv.forEach(function(uv, i) { + const data = getData(polygonVertexIndex, polygonIndex, vertexIndex, uv); + if (faceUVs[i] === void 0) faceUVs[i] = []; + faceUVs[i].push(data[0]); + faceUVs[i].push(data[1]); + }); + faceLength++; + if (endOfFace) { + scope.genFace(buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength); + polygonIndex++; + faceLength = 0; + facePositionIndexes = []; + faceNormals = []; + faceColors = []; + faceUVs = []; + faceWeights = []; + faceWeightIndices = []; + } + }); + return buffers; + } + genFace(buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength) { + for (let i = 2; i < faceLength; i++) { + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[0]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[1]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[2]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[(i - 1) * 3]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[(i - 1) * 3 + 1]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[(i - 1) * 3 + 2]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i * 3]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i * 3 + 1]]); + buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i * 3 + 2]]); + if (geoInfo.skeleton) { + buffers.vertexWeights.push(faceWeights[0]); + buffers.vertexWeights.push(faceWeights[1]); + buffers.vertexWeights.push(faceWeights[2]); + buffers.vertexWeights.push(faceWeights[3]); + buffers.vertexWeights.push(faceWeights[(i - 1) * 4]); + buffers.vertexWeights.push(faceWeights[(i - 1) * 4 + 1]); + buffers.vertexWeights.push(faceWeights[(i - 1) * 4 + 2]); + buffers.vertexWeights.push(faceWeights[(i - 1) * 4 + 3]); + buffers.vertexWeights.push(faceWeights[i * 4]); + buffers.vertexWeights.push(faceWeights[i * 4 + 1]); + buffers.vertexWeights.push(faceWeights[i * 4 + 2]); + buffers.vertexWeights.push(faceWeights[i * 4 + 3]); + buffers.weightsIndices.push(faceWeightIndices[0]); + buffers.weightsIndices.push(faceWeightIndices[1]); + buffers.weightsIndices.push(faceWeightIndices[2]); + buffers.weightsIndices.push(faceWeightIndices[3]); + buffers.weightsIndices.push(faceWeightIndices[(i - 1) * 4]); + buffers.weightsIndices.push(faceWeightIndices[(i - 1) * 4 + 1]); + buffers.weightsIndices.push(faceWeightIndices[(i - 1) * 4 + 2]); + buffers.weightsIndices.push(faceWeightIndices[(i - 1) * 4 + 3]); + buffers.weightsIndices.push(faceWeightIndices[i * 4]); + buffers.weightsIndices.push(faceWeightIndices[i * 4 + 1]); + buffers.weightsIndices.push(faceWeightIndices[i * 4 + 2]); + buffers.weightsIndices.push(faceWeightIndices[i * 4 + 3]); + } + if (geoInfo.color) { + buffers.colors.push(faceColors[0]); + buffers.colors.push(faceColors[1]); + buffers.colors.push(faceColors[2]); + buffers.colors.push(faceColors[(i - 1) * 3]); + buffers.colors.push(faceColors[(i - 1) * 3 + 1]); + buffers.colors.push(faceColors[(i - 1) * 3 + 2]); + buffers.colors.push(faceColors[i * 3]); + buffers.colors.push(faceColors[i * 3 + 1]); + buffers.colors.push(faceColors[i * 3 + 2]); + } + if (geoInfo.material && geoInfo.material.mappingType !== "AllSame") { + buffers.materialIndex.push(materialIndex); + buffers.materialIndex.push(materialIndex); + buffers.materialIndex.push(materialIndex); + } + if (geoInfo.normal) { + buffers.normal.push(faceNormals[0]); + buffers.normal.push(faceNormals[1]); + buffers.normal.push(faceNormals[2]); + buffers.normal.push(faceNormals[(i - 1) * 3]); + buffers.normal.push(faceNormals[(i - 1) * 3 + 1]); + buffers.normal.push(faceNormals[(i - 1) * 3 + 2]); + buffers.normal.push(faceNormals[i * 3]); + buffers.normal.push(faceNormals[i * 3 + 1]); + buffers.normal.push(faceNormals[i * 3 + 2]); + } + if (geoInfo.uv) geoInfo.uv.forEach(function(uv, j) { + if (buffers.uvs[j] === void 0) buffers.uvs[j] = []; + buffers.uvs[j].push(faceUVs[j][0]); + buffers.uvs[j].push(faceUVs[j][1]); + buffers.uvs[j].push(faceUVs[j][(i - 1) * 2]); + buffers.uvs[j].push(faceUVs[j][(i - 1) * 2 + 1]); + buffers.uvs[j].push(faceUVs[j][i * 2]); + buffers.uvs[j].push(faceUVs[j][i * 2 + 1]); + }); + } + } + addMorphTargets(parentGeo, parentGeoNode, morphTargets, preTransform) { + if (morphTargets.length === 0) return; + parentGeo.morphTargetsRelative = true; + parentGeo.morphAttributes.position = []; + const scope = this; + morphTargets.forEach(function(morphTarget) { + morphTarget.rawTargets.forEach(function(rawTarget) { + const morphGeoNode = fbxTree.Objects.Geometry[rawTarget.geoID]; + if (morphGeoNode !== void 0) scope.genMorphGeometry(parentGeo, parentGeoNode, morphGeoNode, preTransform, rawTarget.name); + }); + }); + } + genMorphGeometry(parentGeo, parentGeoNode, morphGeoNode, preTransform, name) { + const vertexIndices = parentGeoNode.PolygonVertexIndex !== void 0 ? parentGeoNode.PolygonVertexIndex.a : []; + const morphPositionsSparse = morphGeoNode.Vertices !== void 0 ? morphGeoNode.Vertices.a : []; + const indices = morphGeoNode.Indexes !== void 0 ? morphGeoNode.Indexes.a : []; + const length = parentGeo.attributes.position.count * 3; + const morphPositions = new Float32Array(length); + for (let i = 0; i < indices.length; i++) { + const morphIndex = indices[i] * 3; + morphPositions[morphIndex] = morphPositionsSparse[i * 3]; + morphPositions[morphIndex + 1] = morphPositionsSparse[i * 3 + 1]; + morphPositions[morphIndex + 2] = morphPositionsSparse[i * 3 + 2]; + } + const morphGeoInfo = { + vertexIndices, + vertexPositions: morphPositions + }; + const positionAttribute = new Float32BufferAttribute(this.genBuffers(morphGeoInfo).vertex, 3); + positionAttribute.name = name || morphGeoNode.attrName; + positionAttribute.applyMatrix4(preTransform); + parentGeo.morphAttributes.position.push(positionAttribute); + } + parseNormals(NormalNode) { + const mappingType = NormalNode.MappingInformationType; + const referenceType = NormalNode.ReferenceInformationType; + const buffer = NormalNode.Normals.a; + let indexBuffer = []; + if (referenceType === "IndexToDirect") { + if ("NormalIndex" in NormalNode) indexBuffer = NormalNode.NormalIndex.a; + else if ("NormalsIndex" in NormalNode) indexBuffer = NormalNode.NormalsIndex.a; + } + return { + dataSize: 3, + buffer, + indices: indexBuffer, + mappingType, + referenceType + }; + } + parseUVs(UVNode) { + const mappingType = UVNode.MappingInformationType; + const referenceType = UVNode.ReferenceInformationType; + const buffer = UVNode.UV.a; + let indexBuffer = []; + if (referenceType === "IndexToDirect") indexBuffer = UVNode.UVIndex.a; + return { + dataSize: 2, + buffer, + indices: indexBuffer, + mappingType, + referenceType + }; + } + parseVertexColors(ColorNode) { + const mappingType = ColorNode.MappingInformationType; + const referenceType = ColorNode.ReferenceInformationType; + const buffer = ColorNode.Colors.a; + let indexBuffer = []; + if (referenceType === "IndexToDirect") indexBuffer = ColorNode.ColorIndex.a; + return { + dataSize: 4, + buffer, + indices: indexBuffer, + mappingType, + referenceType + }; + } + parseMaterialIndices(MaterialNode) { + const mappingType = MaterialNode.MappingInformationType; + const referenceType = MaterialNode.ReferenceInformationType; + if (mappingType === "NoMappingInformation") return { + dataSize: 1, + buffer: [0], + indices: [0], + mappingType: "AllSame", + referenceType + }; + const materialIndexBuffer = MaterialNode.Materials.a; + const materialIndices = []; + for (let i = 0; i < materialIndexBuffer.length; ++i) materialIndices.push(i); + return { + dataSize: 1, + buffer: materialIndexBuffer, + indices: materialIndices, + mappingType, + referenceType + }; + } + parseNurbsGeometry(geoNode) { + if (NURBSCurve === void 0) { + console.error("THREE.FBXLoader: The loader relies on NURBSCurve for any nurbs present in the model. Nurbs will show up as empty geometry."); + return new BufferGeometry(); + } + const order = parseInt(geoNode.Order); + if (isNaN(order)) { + console.error("THREE.FBXLoader: Invalid Order %s given for geometry ID: %s", geoNode.Order, geoNode.id); + return new BufferGeometry(); + } + const degree = order - 1; + const knots = geoNode.KnotVector.a; + const controlPoints = []; + const pointsValues = geoNode.Points.a; + for (let i = 0, l = pointsValues.length; i < l; i += 4) controlPoints.push(new Vector4().fromArray(pointsValues, i)); + let startKnot, endKnot; + if (geoNode.Form === "Closed") controlPoints.push(controlPoints[0]); + else if (geoNode.Form === "Periodic") { + startKnot = degree; + endKnot = knots.length - 1 - startKnot; + for (let i = 0; i < degree; ++i) controlPoints.push(controlPoints[i]); + } + const points = new NURBSCurve(degree, knots, controlPoints, startKnot, endKnot).getPoints(controlPoints.length * 12); + return new BufferGeometry().setFromPoints(points); + } +}; +var AnimationParser = class { + parse() { + const animationClips = []; + const rawClips = this.parseClips(); + if (rawClips !== void 0) for (const key in rawClips) { + const rawClip = rawClips[key]; + const clip = this.addClip(rawClip); + animationClips.push(clip); + } + return animationClips; + } + parseClips() { + if (fbxTree.Objects.AnimationCurve === void 0) return void 0; + const curveNodesMap = this.parseAnimationCurveNodes(); + this.parseAnimationCurves(curveNodesMap); + const layersMap = this.parseAnimationLayers(curveNodesMap); + return this.parseAnimStacks(layersMap); + } + parseAnimationCurveNodes() { + const rawCurveNodes = fbxTree.Objects.AnimationCurveNode; + const curveNodesMap = /* @__PURE__ */ new Map(); + for (const nodeID in rawCurveNodes) { + const rawCurveNode = rawCurveNodes[nodeID]; + if (rawCurveNode.attrName.match(/S|R|T|DeformPercent/) !== null) { + const curveNode = { + id: rawCurveNode.id, + attr: rawCurveNode.attrName, + curves: {} + }; + curveNodesMap.set(curveNode.id, curveNode); + } + } + return curveNodesMap; + } + parseAnimationCurves(curveNodesMap) { + const rawCurves = fbxTree.Objects.AnimationCurve; + for (const nodeID in rawCurves) { + const animationCurve = { + id: rawCurves[nodeID].id, + times: rawCurves[nodeID].KeyTime.a.map(convertFBXTimeToSeconds), + values: rawCurves[nodeID].KeyValueFloat.a + }; + const relationships = connections.get(animationCurve.id); + if (relationships !== void 0) { + const animationCurveID = relationships.parents[0].ID; + const animationCurveRelationship = relationships.parents[0].relationship; + if (animationCurveRelationship.match(/X/)) curveNodesMap.get(animationCurveID).curves["x"] = animationCurve; + else if (animationCurveRelationship.match(/Y/)) curveNodesMap.get(animationCurveID).curves["y"] = animationCurve; + else if (animationCurveRelationship.match(/Z/)) curveNodesMap.get(animationCurveID).curves["z"] = animationCurve; + else if (animationCurveRelationship.match(/d|DeformPercent/) && curveNodesMap.has(animationCurveID)) curveNodesMap.get(animationCurveID).curves["morph"] = animationCurve; + } + } + } + parseAnimationLayers(curveNodesMap) { + const rawLayers = fbxTree.Objects.AnimationLayer; + const layersMap = /* @__PURE__ */ new Map(); + for (const nodeID in rawLayers) { + const layerCurveNodes = []; + const connection = connections.get(parseInt(nodeID)); + if (connection !== void 0) { + connection.children.forEach(function(child, i) { + if (curveNodesMap.has(child.ID)) { + const curveNode = curveNodesMap.get(child.ID); + if (curveNode.curves.x !== void 0 || curveNode.curves.y !== void 0 || curveNode.curves.z !== void 0) { + if (layerCurveNodes[i] === void 0) { + const modelID = connections.get(child.ID).parents.filter(function(parent) { + return parent.relationship !== void 0; + })[0].ID; + if (modelID !== void 0) { + const rawModel = fbxTree.Objects.Model[modelID.toString()]; + if (rawModel === void 0) { + console.warn("THREE.FBXLoader: Encountered a unused curve.", child); + return; + } + const node = { + modelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName(rawModel.attrName) : "", + ID: rawModel.id, + initialPosition: [ + 0, + 0, + 0 + ], + initialRotation: [ + 0, + 0, + 0 + ], + initialScale: [ + 1, + 1, + 1 + ] + }; + sceneGraph.traverse(function(child2) { + if (child2.ID === rawModel.id) { + node.transform = child2.matrix; + if (child2.userData.transformData) node.eulerOrder = child2.userData.transformData.eulerOrder; + } + }); + if (!node.transform) node.transform = new Matrix4(); + if ("PreRotation" in rawModel) node.preRotation = rawModel.PreRotation.value; + if ("PostRotation" in rawModel) node.postRotation = rawModel.PostRotation.value; + layerCurveNodes[i] = node; + } + } + if (layerCurveNodes[i]) layerCurveNodes[i][curveNode.attr] = curveNode; + } else if (curveNode.curves.morph !== void 0) { + if (layerCurveNodes[i] === void 0) { + const deformerID = connections.get(child.ID).parents.filter(function(parent) { + return parent.relationship !== void 0; + })[0].ID; + const morpherID = connections.get(deformerID).parents[0].ID; + const geoID = connections.get(morpherID).parents[0].ID; + const modelID = connections.get(geoID).parents[0].ID; + const rawModel = fbxTree.Objects.Model[modelID]; + layerCurveNodes[i] = { + modelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName(rawModel.attrName) : "", + morphName: fbxTree.Objects.Deformer[deformerID].attrName + }; + } + layerCurveNodes[i][curveNode.attr] = curveNode; + } + } + }); + layersMap.set(parseInt(nodeID), layerCurveNodes); + } + } + return layersMap; + } + parseAnimStacks(layersMap) { + const rawStacks = fbxTree.Objects.AnimationStack; + const rawClips = {}; + for (const nodeID in rawStacks) { + const children = connections.get(parseInt(nodeID)).children; + if (children.length > 1) console.warn("THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers."); + const layer = layersMap.get(children[0].ID); + rawClips[nodeID] = { + name: rawStacks[nodeID].attrName, + layer + }; + } + return rawClips; + } + addClip(rawClip) { + let tracks = []; + const scope = this; + rawClip.layer.forEach(function(rawTracks) { + tracks = tracks.concat(scope.generateTracks(rawTracks)); + }); + return new AnimationClip(rawClip.name, -1, tracks); + } + generateTracks(rawTracks) { + const tracks = []; + let initialPosition = new Vector3(); + let initialRotation = new Quaternion(); + let initialScale = new Vector3(); + if (rawTracks.transform) rawTracks.transform.decompose(initialPosition, initialRotation, initialScale); + initialPosition = initialPosition.toArray(); + initialRotation = new Euler().setFromQuaternion(initialRotation, rawTracks.eulerOrder).toArray(); + initialScale = initialScale.toArray(); + if (rawTracks.T !== void 0 && Object.keys(rawTracks.T.curves).length > 0) { + const positionTrack = this.generateVectorTrack(rawTracks.modelName, rawTracks.T.curves, initialPosition, "position"); + if (positionTrack !== void 0) tracks.push(positionTrack); + } + if (rawTracks.R !== void 0 && Object.keys(rawTracks.R.curves).length > 0) { + const rotationTrack = this.generateRotationTrack(rawTracks.modelName, rawTracks.R.curves, initialRotation, rawTracks.preRotation, rawTracks.postRotation, rawTracks.eulerOrder); + if (rotationTrack !== void 0) tracks.push(rotationTrack); + } + if (rawTracks.S !== void 0 && Object.keys(rawTracks.S.curves).length > 0) { + const scaleTrack = this.generateVectorTrack(rawTracks.modelName, rawTracks.S.curves, initialScale, "scale"); + if (scaleTrack !== void 0) tracks.push(scaleTrack); + } + if (rawTracks.DeformPercent !== void 0) { + const morphTrack = this.generateMorphTrack(rawTracks); + if (morphTrack !== void 0) tracks.push(morphTrack); + } + return tracks; + } + generateVectorTrack(modelName, curves, initialValue, type) { + const times = this.getTimesForAllAxes(curves); + const values = this.getKeyframeTrackValues(times, curves, initialValue); + return new VectorKeyframeTrack(modelName + "." + type, times, values); + } + generateRotationTrack(modelName, curves, initialValue, preRotation, postRotation, eulerOrder) { + if (curves.x !== void 0) { + this.interpolateRotations(curves.x); + curves.x.values = curves.x.values.map(MathUtils.degToRad); + } + if (curves.y !== void 0) { + this.interpolateRotations(curves.y); + curves.y.values = curves.y.values.map(MathUtils.degToRad); + } + if (curves.z !== void 0) { + this.interpolateRotations(curves.z); + curves.z.values = curves.z.values.map(MathUtils.degToRad); + } + const times = this.getTimesForAllAxes(curves); + const values = this.getKeyframeTrackValues(times, curves, initialValue); + if (preRotation !== void 0) { + preRotation = preRotation.map(MathUtils.degToRad); + preRotation.push(eulerOrder); + preRotation = new Euler().fromArray(preRotation); + preRotation = new Quaternion().setFromEuler(preRotation); + } + if (postRotation !== void 0) { + postRotation = postRotation.map(MathUtils.degToRad); + postRotation.push(eulerOrder); + postRotation = new Euler().fromArray(postRotation); + postRotation = new Quaternion().setFromEuler(postRotation).invert(); + } + const quaternion = new Quaternion(); + const euler = new Euler(); + const quaternionValues = []; + for (let i = 0; i < values.length; i += 3) { + euler.set(values[i], values[i + 1], values[i + 2], eulerOrder); + quaternion.setFromEuler(euler); + if (preRotation !== void 0) quaternion.premultiply(preRotation); + if (postRotation !== void 0) quaternion.multiply(postRotation); + quaternion.toArray(quaternionValues, i / 3 * 4); + } + return new QuaternionKeyframeTrack(modelName + ".quaternion", times, quaternionValues); + } + generateMorphTrack(rawTracks) { + const curves = rawTracks.DeformPercent.curves.morph; + const values = curves.values.map(function(val) { + return val / 100; + }); + const morphNum = sceneGraph.getObjectByName(rawTracks.modelName).morphTargetDictionary[rawTracks.morphName]; + return new NumberKeyframeTrack(rawTracks.modelName + ".morphTargetInfluences[" + morphNum + "]", curves.times, values); + } + getTimesForAllAxes(curves) { + let times = []; + if (curves.x !== void 0) times = times.concat(curves.x.times); + if (curves.y !== void 0) times = times.concat(curves.y.times); + if (curves.z !== void 0) times = times.concat(curves.z.times); + times = times.sort(function(a, b) { + return a - b; + }); + if (times.length > 1) { + let targetIndex = 1; + let lastValue = times[0]; + for (let i = 1; i < times.length; i++) { + const currentValue = times[i]; + if (currentValue !== lastValue) { + times[targetIndex] = currentValue; + lastValue = currentValue; + targetIndex++; + } + } + times = times.slice(0, targetIndex); + } + return times; + } + getKeyframeTrackValues(times, curves, initialValue) { + const prevValue = initialValue; + const values = []; + let xIndex = -1; + let yIndex = -1; + let zIndex = -1; + times.forEach(function(time) { + if (curves.x) xIndex = curves.x.times.indexOf(time); + if (curves.y) yIndex = curves.y.times.indexOf(time); + if (curves.z) zIndex = curves.z.times.indexOf(time); + if (xIndex !== -1) { + const xValue = curves.x.values[xIndex]; + values.push(xValue); + prevValue[0] = xValue; + } else values.push(prevValue[0]); + if (yIndex !== -1) { + const yValue = curves.y.values[yIndex]; + values.push(yValue); + prevValue[1] = yValue; + } else values.push(prevValue[1]); + if (zIndex !== -1) { + const zValue = curves.z.values[zIndex]; + values.push(zValue); + prevValue[2] = zValue; + } else values.push(prevValue[2]); + }); + return values; + } + interpolateRotations(curve) { + for (let i = 1; i < curve.values.length; i++) { + const initialValue = curve.values[i - 1]; + const valuesSpan = curve.values[i] - initialValue; + const absoluteSpan = Math.abs(valuesSpan); + if (absoluteSpan >= 180) { + const numSubIntervals = absoluteSpan / 180; + const step = valuesSpan / numSubIntervals; + let nextValue = initialValue + step; + const initialTime = curve.times[i - 1]; + const interval = (curve.times[i] - initialTime) / numSubIntervals; + let nextTime = initialTime + interval; + const interpolatedTimes = []; + const interpolatedValues = []; + while (nextTime < curve.times[i]) { + interpolatedTimes.push(nextTime); + nextTime += interval; + interpolatedValues.push(nextValue); + nextValue += step; + } + curve.times = inject(curve.times, i, interpolatedTimes); + curve.values = inject(curve.values, i, interpolatedValues); + } + } + } +}; +var TextParser = class { + getPrevNode() { + return this.nodeStack[this.currentIndent - 2]; + } + getCurrentNode() { + return this.nodeStack[this.currentIndent - 1]; + } + getCurrentProp() { + return this.currentProp; + } + pushStack(node) { + this.nodeStack.push(node); + this.currentIndent += 1; + } + popStack() { + this.nodeStack.pop(); + this.currentIndent -= 1; + } + setCurrentProp(val, name) { + this.currentProp = val; + this.currentPropName = name; + } + parse(text) { + this.currentIndent = 0; + this.allNodes = new FBXTree(); + this.nodeStack = []; + this.currentProp = []; + this.currentPropName = ""; + const scope = this; + const split = text.split(/[\r\n]+/); + split.forEach(function(line, i) { + const matchComment = line.match(/^[\s\t]*;/); + const matchEmpty = line.match(/^[\s\t]*$/); + if (matchComment || matchEmpty) return; + const matchBeginning = line.match("^\\t{" + scope.currentIndent + "}(\\w+):(.*){", ""); + const matchProperty = line.match("^\\t{" + scope.currentIndent + "}(\\w+):[\\s\\t\\r\\n](.*)"); + const matchEnd = line.match("^\\t{" + (scope.currentIndent - 1) + "}}"); + if (matchBeginning) scope.parseNodeBegin(line, matchBeginning); + else if (matchProperty) scope.parseNodeProperty(line, matchProperty, split[++i]); + else if (matchEnd) scope.popStack(); + else if (line.match(/^[^\s\t}]/)) scope.parseNodePropertyContinued(line); + }); + return this.allNodes; + } + parseNodeBegin(line, property) { + const nodeName = property[1].trim().replace(/^"/, "").replace(/"$/, ""); + const nodeAttrs = property[2].split(",").map(function(attr) { + return attr.trim().replace(/^"/, "").replace(/"$/, ""); + }); + const node = { name: nodeName }; + const attrs = this.parseNodeAttr(nodeAttrs); + const currentNode = this.getCurrentNode(); + if (this.currentIndent === 0) this.allNodes.add(nodeName, node); + else if (nodeName in currentNode) { + if (nodeName === "PoseNode") currentNode.PoseNode.push(node); + else if (currentNode[nodeName].id !== void 0) { + currentNode[nodeName] = {}; + currentNode[nodeName][currentNode[nodeName].id] = currentNode[nodeName]; + } + if (attrs.id !== "") currentNode[nodeName][attrs.id] = node; + } else if (typeof attrs.id === "number") { + currentNode[nodeName] = {}; + currentNode[nodeName][attrs.id] = node; + } else if (nodeName !== "Properties70") if (nodeName === "PoseNode") currentNode[nodeName] = [node]; + else currentNode[nodeName] = node; + if (typeof attrs.id === "number") node.id = attrs.id; + if (attrs.name !== "") node.attrName = attrs.name; + if (attrs.type !== "") node.attrType = attrs.type; + this.pushStack(node); + } + parseNodeAttr(attrs) { + let id = attrs[0]; + if (attrs[0] !== "") { + id = parseInt(attrs[0]); + if (isNaN(id)) id = attrs[0]; + } + let name = "", type = ""; + if (attrs.length > 1) { + name = attrs[1].replace(/^(\w+)::/, ""); + type = attrs[2]; + } + return { + id, + name, + type + }; + } + parseNodeProperty(line, property, contentLine) { + let propName = property[1].replace(/^"/, "").replace(/"$/, "").trim(); + let propValue = property[2].replace(/^"/, "").replace(/"$/, "").trim(); + if (propName === "Content" && propValue === ",") propValue = contentLine.replace(/"/g, "").replace(/,$/, "").trim(); + const currentNode = this.getCurrentNode(); + if (currentNode.name === "Properties70") { + this.parseNodeSpecialProperty(line, propName, propValue); + return; + } + if (propName === "C") { + const connProps = propValue.split(",").slice(1); + const from = parseInt(connProps[0]); + const to = parseInt(connProps[1]); + let rest = propValue.split(",").slice(3); + rest = rest.map(function(elem) { + return elem.trim().replace(/^"/, ""); + }); + propName = "connections"; + propValue = [from, to]; + append(propValue, rest); + if (currentNode[propName] === void 0) currentNode[propName] = []; + } + if (propName === "Node") currentNode.id = propValue; + if (propName in currentNode && Array.isArray(currentNode[propName])) currentNode[propName].push(propValue); + else if (propName !== "a") currentNode[propName] = propValue; + else currentNode.a = propValue; + this.setCurrentProp(currentNode, propName); + if (propName === "a" && propValue.slice(-1) !== ",") currentNode.a = parseNumberArray(propValue); + } + parseNodePropertyContinued(line) { + const currentNode = this.getCurrentNode(); + currentNode.a += line; + if (line.slice(-1) !== ",") currentNode.a = parseNumberArray(currentNode.a); + } + parseNodeSpecialProperty(line, propName, propValue) { + const props = propValue.split("\",").map(function(prop) { + return prop.trim().replace(/^\"/, "").replace(/\s/, "_"); + }); + const innerPropName = props[0]; + const innerPropType1 = props[1]; + const innerPropType2 = props[2]; + const innerPropFlag = props[3]; + let innerPropValue = props[4]; + switch (innerPropType1) { + case "int": + case "enum": + case "bool": + case "ULongLong": + case "double": + case "Number": + case "FieldOfView": + innerPropValue = parseFloat(innerPropValue); + break; + case "Color": + case "ColorRGB": + case "Vector3D": + case "Lcl_Translation": + case "Lcl_Rotation": + case "Lcl_Scaling": + innerPropValue = parseNumberArray(innerPropValue); + break; + } + this.getPrevNode()[innerPropName] = { + type: innerPropType1, + type2: innerPropType2, + flag: innerPropFlag, + value: innerPropValue + }; + this.setCurrentProp(this.getPrevNode(), innerPropName); + } +}; +var BinaryParser = class { + parse(buffer) { + const reader = new BinaryReader(buffer); + reader.skip(23); + const version = reader.getUint32(); + if (version < 6400) throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: " + version); + const allNodes = new FBXTree(); + while (!this.endOfContent(reader)) { + const node = this.parseNode(reader, version); + if (node !== null) allNodes.add(node.name, node); + } + return allNodes; + } + endOfContent(reader) { + if (reader.size() % 16 === 0) return (reader.getOffset() + 160 + 16 & -16) >= reader.size(); + else return reader.getOffset() + 160 + 16 >= reader.size(); + } + parseNode(reader, version) { + const node = {}; + const endOffset = version >= 7500 ? reader.getUint64() : reader.getUint32(); + const numProperties = version >= 7500 ? reader.getUint64() : reader.getUint32(); + version >= 7500 ? reader.getUint64() : reader.getUint32(); + const nameLen = reader.getUint8(); + const name = reader.getString(nameLen); + if (endOffset === 0) return null; + const propertyList = []; + for (let i = 0; i < numProperties; i++) propertyList.push(this.parseProperty(reader)); + const id = propertyList.length > 0 ? propertyList[0] : ""; + const attrName = propertyList.length > 1 ? propertyList[1] : ""; + const attrType = propertyList.length > 2 ? propertyList[2] : ""; + node.singleProperty = numProperties === 1 && reader.getOffset() === endOffset ? true : false; + while (endOffset > reader.getOffset()) { + const subNode = this.parseNode(reader, version); + if (subNode !== null) this.parseSubNode(name, node, subNode); + } + node.propertyList = propertyList; + if (typeof id === "number") node.id = id; + if (attrName !== "") node.attrName = attrName; + if (attrType !== "") node.attrType = attrType; + if (name !== "") node.name = name; + return node; + } + parseSubNode(name, node, subNode) { + if (subNode.singleProperty === true) { + const value = subNode.propertyList[0]; + if (Array.isArray(value)) { + node[subNode.name] = subNode; + subNode.a = value; + } else node[subNode.name] = value; + } else if (name === "Connections" && subNode.name === "C") { + const array = []; + subNode.propertyList.forEach(function(property, i) { + if (i !== 0) array.push(property); + }); + if (node.connections === void 0) node.connections = []; + node.connections.push(array); + } else if (subNode.name === "Properties70") Object.keys(subNode).forEach(function(key) { + node[key] = subNode[key]; + }); + else if (name === "Properties70" && subNode.name === "P") { + let innerPropName = subNode.propertyList[0]; + let innerPropType1 = subNode.propertyList[1]; + const innerPropType2 = subNode.propertyList[2]; + const innerPropFlag = subNode.propertyList[3]; + let innerPropValue; + if (innerPropName.indexOf("Lcl ") === 0) innerPropName = innerPropName.replace("Lcl ", "Lcl_"); + if (innerPropType1.indexOf("Lcl ") === 0) innerPropType1 = innerPropType1.replace("Lcl ", "Lcl_"); + if (innerPropType1 === "Color" || innerPropType1 === "ColorRGB" || innerPropType1 === "Vector" || innerPropType1 === "Vector3D" || innerPropType1.indexOf("Lcl_") === 0) innerPropValue = [ + subNode.propertyList[4], + subNode.propertyList[5], + subNode.propertyList[6] + ]; + else innerPropValue = subNode.propertyList[4]; + node[innerPropName] = { + type: innerPropType1, + type2: innerPropType2, + flag: innerPropFlag, + value: innerPropValue + }; + } else if (node[subNode.name] === void 0) if (typeof subNode.id === "number") { + node[subNode.name] = {}; + node[subNode.name][subNode.id] = subNode; + } else node[subNode.name] = subNode; + else if (subNode.name === "PoseNode") { + if (!Array.isArray(node[subNode.name])) node[subNode.name] = [node[subNode.name]]; + node[subNode.name].push(subNode); + } else if (node[subNode.name][subNode.id] === void 0) node[subNode.name][subNode.id] = subNode; + } + parseProperty(reader) { + const type = reader.getString(1); + let length; + switch (type) { + case "C": return reader.getBoolean(); + case "D": return reader.getFloat64(); + case "F": return reader.getFloat32(); + case "I": return reader.getInt32(); + case "L": return reader.getInt64(); + case "R": + length = reader.getUint32(); + return reader.getArrayBuffer(length); + case "S": + length = reader.getUint32(); + return reader.getString(length); + case "Y": return reader.getInt16(); + case "b": + case "c": + case "d": + case "f": + case "i": + case "l": + const arrayLength = reader.getUint32(); + const encoding = reader.getUint32(); + const compressedLength = reader.getUint32(); + if (encoding === 0) switch (type) { + case "b": + case "c": return reader.getBooleanArray(arrayLength); + case "d": return reader.getFloat64Array(arrayLength); + case "f": return reader.getFloat32Array(arrayLength); + case "i": return reader.getInt32Array(arrayLength); + case "l": return reader.getInt64Array(arrayLength); + } + const reader2 = new BinaryReader(unzlibSync(new Uint8Array(reader.getArrayBuffer(compressedLength))).buffer); + switch (type) { + case "b": + case "c": return reader2.getBooleanArray(arrayLength); + case "d": return reader2.getFloat64Array(arrayLength); + case "f": return reader2.getFloat32Array(arrayLength); + case "i": return reader2.getInt32Array(arrayLength); + case "l": return reader2.getInt64Array(arrayLength); + } + default: throw new Error("THREE.FBXLoader: Unknown property type " + type); + } + } +}; +var BinaryReader = class { + constructor(buffer, littleEndian) { + this.dv = new DataView(buffer); + this.offset = 0; + this.littleEndian = littleEndian !== void 0 ? littleEndian : true; + } + getOffset() { + return this.offset; + } + size() { + return this.dv.buffer.byteLength; + } + skip(length) { + this.offset += length; + } + getBoolean() { + return (this.getUint8() & 1) === 1; + } + getBooleanArray(size) { + const a = []; + for (let i = 0; i < size; i++) a.push(this.getBoolean()); + return a; + } + getUint8() { + const value = this.dv.getUint8(this.offset); + this.offset += 1; + return value; + } + getInt16() { + const value = this.dv.getInt16(this.offset, this.littleEndian); + this.offset += 2; + return value; + } + getInt32() { + const value = this.dv.getInt32(this.offset, this.littleEndian); + this.offset += 4; + return value; + } + getInt32Array(size) { + const a = []; + for (let i = 0; i < size; i++) a.push(this.getInt32()); + return a; + } + getUint32() { + const value = this.dv.getUint32(this.offset, this.littleEndian); + this.offset += 4; + return value; + } + getInt64() { + let low, high; + if (this.littleEndian) { + low = this.getUint32(); + high = this.getUint32(); + } else { + high = this.getUint32(); + low = this.getUint32(); + } + if (high & 2147483648) { + high = ~high & 4294967295; + low = ~low & 4294967295; + if (low === 4294967295) high = high + 1 & 4294967295; + low = low + 1 & 4294967295; + return -(high * 4294967296 + low); + } + return high * 4294967296 + low; + } + getInt64Array(size) { + const a = []; + for (let i = 0; i < size; i++) a.push(this.getInt64()); + return a; + } + getUint64() { + let low, high; + if (this.littleEndian) { + low = this.getUint32(); + high = this.getUint32(); + } else { + high = this.getUint32(); + low = this.getUint32(); + } + return high * 4294967296 + low; + } + getFloat32() { + const value = this.dv.getFloat32(this.offset, this.littleEndian); + this.offset += 4; + return value; + } + getFloat32Array(size) { + const a = []; + for (let i = 0; i < size; i++) a.push(this.getFloat32()); + return a; + } + getFloat64() { + const value = this.dv.getFloat64(this.offset, this.littleEndian); + this.offset += 8; + return value; + } + getFloat64Array(size) { + const a = []; + for (let i = 0; i < size; i++) a.push(this.getFloat64()); + return a; + } + getArrayBuffer(size) { + const value = this.dv.buffer.slice(this.offset, this.offset + size); + this.offset += size; + return value; + } + getString(size) { + let a = []; + for (let i = 0; i < size; i++) a[i] = this.getUint8(); + const nullByte = a.indexOf(0); + if (nullByte >= 0) a = a.slice(0, nullByte); + return decodeText$1(new Uint8Array(a)); + } +}; +var FBXTree = class { + add(key, val) { + this[key] = val; + } +}; +function isFbxFormatBinary(buffer) { + return buffer.byteLength >= 21 && "Kaydara FBX Binary \0" === convertArrayBufferToString(buffer, 0, 21); +} +function isFbxFormatASCII(text) { + const CORRECT = [ + "K", + "a", + "y", + "d", + "a", + "r", + "a", + "\\", + "F", + "B", + "X", + "\\", + "B", + "i", + "n", + "a", + "r", + "y", + "\\", + "\\" + ]; + let cursor = 0; + function read(offset) { + const result = text[offset - 1]; + text = text.slice(cursor + offset); + cursor++; + return result; + } + for (let i = 0; i < CORRECT.length; ++i) if (read(1) === CORRECT[i]) return false; + return true; +} +function getFbxVersion(text) { + const match = text.match(/FBXVersion: (\d+)/); + if (match) return parseInt(match[1]); + throw new Error("THREE.FBXLoader: Cannot find the version number for the file given."); +} +function convertFBXTimeToSeconds(time) { + return time / 46186158e3; +} +var dataArray = []; +function getData(polygonVertexIndex, polygonIndex, vertexIndex, infoObject) { + let index; + switch (infoObject.mappingType) { + case "ByPolygonVertex": + index = polygonVertexIndex; + break; + case "ByPolygon": + index = polygonIndex; + break; + case "ByVertice": + index = vertexIndex; + break; + case "AllSame": + index = infoObject.indices[0]; + break; + default: console.warn("THREE.FBXLoader: unknown attribute mapping type " + infoObject.mappingType); + } + if (infoObject.referenceType === "IndexToDirect") index = infoObject.indices[index]; + const from = index * infoObject.dataSize; + const to = from + infoObject.dataSize; + return slice(dataArray, infoObject.buffer, from, to); +} +var tempEuler = /* @__PURE__ */ new Euler(); +var tempVec = /* @__PURE__ */ new Vector3(); +function generateTransform(transformData) { + const lTranslationM = new Matrix4(); + const lPreRotationM = new Matrix4(); + const lRotationM = new Matrix4(); + const lPostRotationM = new Matrix4(); + const lScalingM = new Matrix4(); + const lScalingPivotM = new Matrix4(); + const lScalingOffsetM = new Matrix4(); + const lRotationOffsetM = new Matrix4(); + const lRotationPivotM = new Matrix4(); + const lParentGX = new Matrix4(); + const lParentLX = new Matrix4(); + const lGlobalT = new Matrix4(); + const inheritType = transformData.inheritType ? transformData.inheritType : 0; + if (transformData.translation) lTranslationM.setPosition(tempVec.fromArray(transformData.translation)); + if (transformData.preRotation) { + const array = transformData.preRotation.map(MathUtils.degToRad); + array.push(transformData.eulerOrder); + lPreRotationM.makeRotationFromEuler(tempEuler.fromArray(array)); + } + if (transformData.rotation) { + const array = transformData.rotation.map(MathUtils.degToRad); + array.push(transformData.eulerOrder); + lRotationM.makeRotationFromEuler(tempEuler.fromArray(array)); + } + if (transformData.postRotation) { + const array = transformData.postRotation.map(MathUtils.degToRad); + array.push(transformData.eulerOrder); + lPostRotationM.makeRotationFromEuler(tempEuler.fromArray(array)); + lPostRotationM.invert(); + } + if (transformData.scale) lScalingM.scale(tempVec.fromArray(transformData.scale)); + if (transformData.scalingOffset) lScalingOffsetM.setPosition(tempVec.fromArray(transformData.scalingOffset)); + if (transformData.scalingPivot) lScalingPivotM.setPosition(tempVec.fromArray(transformData.scalingPivot)); + if (transformData.rotationOffset) lRotationOffsetM.setPosition(tempVec.fromArray(transformData.rotationOffset)); + if (transformData.rotationPivot) lRotationPivotM.setPosition(tempVec.fromArray(transformData.rotationPivot)); + if (transformData.parentMatrixWorld) { + lParentLX.copy(transformData.parentMatrix); + lParentGX.copy(transformData.parentMatrixWorld); + } + const lLRM = lPreRotationM.clone().multiply(lRotationM).multiply(lPostRotationM); + const lParentGRM = new Matrix4(); + lParentGRM.extractRotation(lParentGX); + const lParentTM = new Matrix4(); + lParentTM.copyPosition(lParentGX); + const lParentGRSM = lParentTM.clone().invert().multiply(lParentGX); + const lParentGSM = lParentGRM.clone().invert().multiply(lParentGRSM); + const lLSM = lScalingM; + const lGlobalRS = new Matrix4(); + if (inheritType === 0) lGlobalRS.copy(lParentGRM).multiply(lLRM).multiply(lParentGSM).multiply(lLSM); + else if (inheritType === 1) lGlobalRS.copy(lParentGRM).multiply(lParentGSM).multiply(lLRM).multiply(lLSM); + else { + const lParentLSM_inv = new Matrix4().scale(new Vector3().setFromMatrixScale(lParentLX)).clone().invert(); + const lParentGSM_noLocal = lParentGSM.clone().multiply(lParentLSM_inv); + lGlobalRS.copy(lParentGRM).multiply(lLRM).multiply(lParentGSM_noLocal).multiply(lLSM); + } + const lRotationPivotM_inv = lRotationPivotM.clone().invert(); + const lScalingPivotM_inv = lScalingPivotM.clone().invert(); + let lTransform = lTranslationM.clone().multiply(lRotationOffsetM).multiply(lRotationPivotM).multiply(lPreRotationM).multiply(lRotationM).multiply(lPostRotationM).multiply(lRotationPivotM_inv).multiply(lScalingOffsetM).multiply(lScalingPivotM).multiply(lScalingM).multiply(lScalingPivotM_inv); + const lLocalTWithAllPivotAndOffsetInfo = new Matrix4().copyPosition(lTransform); + const lGlobalTranslation = lParentGX.clone().multiply(lLocalTWithAllPivotAndOffsetInfo); + lGlobalT.copyPosition(lGlobalTranslation); + lTransform = lGlobalT.clone().multiply(lGlobalRS); + lTransform.premultiply(lParentGX.invert()); + return lTransform; +} +function getEulerOrder(order) { + order = order || 0; + const enums = [ + "ZYX", + "YZX", + "XZY", + "ZXY", + "YXZ", + "XYZ" + ]; + if (order === 6) { + console.warn("THREE.FBXLoader: unsupported Euler Order: Spherical XYZ. Animations and rotations may be incorrect."); + return enums[0]; + } + return enums[order]; +} +function parseNumberArray(value) { + return value.split(",").map(function(val) { + return parseFloat(val); + }); +} +function convertArrayBufferToString(buffer, from, to) { + if (from === void 0) from = 0; + if (to === void 0) to = buffer.byteLength; + return decodeText$1(new Uint8Array(buffer, from, to)); +} +function append(a, b) { + for (let i = 0, j = a.length, l = b.length; i < l; i++, j++) a[j] = b[i]; +} +function slice(a, b, from, to) { + for (let i = from, j = 0; i < to; i++, j++) a[j] = b[i]; + return a; +} +function inject(a1, index, a2) { + return a1.slice(0, index).concat(a2).concat(a1.slice(index)); +} +//#endregion +//#region node_modules/three-stdlib/loaders/FontLoader.js +var __defProp$2 = Object.defineProperty; +var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { + enumerable: true, + configurable: true, + writable: true, + value +}) : obj[key] = value; +var __publicField$2 = (obj, key, value) => { + __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var FontLoader = class extends Loader$1 { + constructor(manager) { + super(manager); + } + load(url, onLoad, onProgress, onError) { + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, (response) => { + if (typeof response !== "string") throw new Error("unsupported data type"); + const json = JSON.parse(response); + const font = this.parse(json); + if (onLoad) onLoad(font); + }, onProgress, onError); + } + loadAsync(url, onProgress) { + return super.loadAsync(url, onProgress); + } + parse(json) { + return new Font(json); + } +}; +var Font = class { + constructor(data) { + __publicField$2(this, "data"); + __publicField$2(this, "isFont", true); + __publicField$2(this, "type", "Font"); + this.data = data; + } + generateShapes(text, size = 100, _options) { + const shapes = []; + const options = { + letterSpacing: 0, + lineHeight: 1, + ..._options + }; + const paths = createPaths(text, size, this.data, options); + for (let p = 0, pl = paths.length; p < pl; p++) Array.prototype.push.apply(shapes, paths[p].toShapes(false)); + return shapes; + } +}; +function createPaths(text, size, data, options) { + const chars = Array.from(text); + const scale = size / data.resolution; + const line_height = (data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness) * scale; + const paths = []; + let offsetX = 0, offsetY = 0; + for (let i = 0; i < chars.length; i++) { + const char = chars[i]; + if (char === "\n") { + offsetX = 0; + offsetY -= line_height * options.lineHeight; + } else { + const ret = createPath(char, scale, offsetX, offsetY, data); + if (ret) { + offsetX += ret.offsetX + options.letterSpacing; + paths.push(ret.path); + } + } + } + return paths; +} +function createPath(char, scale, offsetX, offsetY, data) { + const glyph = data.glyphs[char] || data.glyphs["?"]; + if (!glyph) { + console.error("THREE.Font: character \"" + char + "\" does not exists in font family " + data.familyName + "."); + return; + } + const path = new ShapePath(); + let x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2; + if (glyph.o) { + const outline = glyph._cachedOutline || (glyph._cachedOutline = glyph.o.split(" ")); + for (let i = 0, l = outline.length; i < l;) switch (outline[i++]) { + case "m": + x = parseInt(outline[i++]) * scale + offsetX; + y = parseInt(outline[i++]) * scale + offsetY; + path.moveTo(x, y); + break; + case "l": + x = parseInt(outline[i++]) * scale + offsetX; + y = parseInt(outline[i++]) * scale + offsetY; + path.lineTo(x, y); + break; + case "q": + cpx = parseInt(outline[i++]) * scale + offsetX; + cpy = parseInt(outline[i++]) * scale + offsetY; + cpx1 = parseInt(outline[i++]) * scale + offsetX; + cpy1 = parseInt(outline[i++]) * scale + offsetY; + path.quadraticCurveTo(cpx1, cpy1, cpx, cpy); + break; + case "b": + cpx = parseInt(outline[i++]) * scale + offsetX; + cpy = parseInt(outline[i++]) * scale + offsetY; + cpx1 = parseInt(outline[i++]) * scale + offsetX; + cpy1 = parseInt(outline[i++]) * scale + offsetY; + cpx2 = parseInt(outline[i++]) * scale + offsetX; + cpy2 = parseInt(outline[i++]) * scale + offsetY; + path.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, cpx, cpy); + break; + } + } + return { + offsetX: glyph.ha * scale, + path + }; +} +//#endregion +//#region node_modules/three-stdlib/_polyfill/Data3DTexture.js +var Data3DTexture = class extends Texture$1 { + constructor(data = null, width = 1, height = 1, depth = 1) { + super(null); + this.isData3DTexture = true; + this.image = { + data, + width, + height, + depth + }; + this.magFilter = NearestFilter; + this.minFilter = NearestFilter; + this.wrapR = ClampToEdgeWrapping; + this.generateMipmaps = false; + this.flipY = false; + this.unpackAlignment = 1; + } +}; +//#endregion +//#region node_modules/three-stdlib/utils/WorkerPool.js +var WorkerPool = class { + constructor(pool = 4) { + this.pool = pool; + this.queue = []; + this.workers = []; + this.workersResolve = []; + this.workerStatus = 0; + } + _initWorker(workerId) { + if (!this.workers[workerId]) { + const worker = this.workerCreator(); + worker.addEventListener("message", this._onMessage.bind(this, workerId)); + this.workers[workerId] = worker; + } + } + _getIdleWorker() { + for (let i = 0; i < this.pool; i++) if (!(this.workerStatus & 1 << i)) return i; + return -1; + } + _onMessage(workerId, msg) { + const resolve = this.workersResolve[workerId]; + resolve && resolve(msg); + if (this.queue.length) { + const { resolve: resolve2, msg: msg2, transfer } = this.queue.shift(); + this.workersResolve[workerId] = resolve2; + this.workers[workerId].postMessage(msg2, transfer); + } else this.workerStatus ^= 1 << workerId; + } + setWorkerCreator(workerCreator) { + this.workerCreator = workerCreator; + } + setWorkerLimit(pool) { + this.pool = pool; + } + postMessage(msg, transfer) { + return new Promise((resolve) => { + const workerId = this._getIdleWorker(); + if (workerId !== -1) { + this._initWorker(workerId); + this.workerStatus |= 1 << workerId; + this.workersResolve[workerId] = resolve; + this.workers[workerId].postMessage(msg, transfer); + } else this.queue.push({ + resolve, + msg, + transfer + }); + }); + } + dispose() { + this.workers.forEach((worker) => worker.terminate()); + this.workersResolve.length = 0; + this.workers.length = 0; + this.queue.length = 0; + this.workerStatus = 0; + } +}; +var KTX2Container = class { + constructor() { + this.vkFormat = 0; + this.typeSize = 1; + this.pixelWidth = 0; + this.pixelHeight = 0; + this.pixelDepth = 0; + this.layerCount = 0; + this.faceCount = 1; + this.supercompressionScheme = 0; + this.levels = []; + this.dataFormatDescriptor = [{ + vendorId: 0, + descriptorType: 0, + descriptorBlockSize: 0, + versionNumber: 2, + colorModel: 0, + colorPrimaries: 1, + transferFunction: 2, + flags: 0, + texelBlockDimension: [ + 0, + 0, + 0, + 0 + ], + bytesPlane: [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ], + samples: [] + }]; + this.keyValue = {}; + this.globalData = null; + } +}; +var BufferReader = class { + constructor(data, byteOffset, byteLength, littleEndian) { + this._dataView = void 0; + this._littleEndian = void 0; + this._offset = void 0; + this._dataView = new DataView(data.buffer, data.byteOffset + byteOffset, byteLength); + this._littleEndian = littleEndian; + this._offset = 0; + } + _nextUint8() { + const value = this._dataView.getUint8(this._offset); + this._offset += 1; + return value; + } + _nextUint16() { + const value = this._dataView.getUint16(this._offset, this._littleEndian); + this._offset += 2; + return value; + } + _nextUint32() { + const value = this._dataView.getUint32(this._offset, this._littleEndian); + this._offset += 4; + return value; + } + _nextUint64() { + const value = this._dataView.getUint32(this._offset, this._littleEndian) + 2 ** 32 * this._dataView.getUint32(this._offset + 4, this._littleEndian); + this._offset += 8; + return value; + } + _nextInt32() { + const value = this._dataView.getInt32(this._offset, this._littleEndian); + this._offset += 4; + return value; + } + _nextUint8Array(len) { + const value = new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + this._offset, len); + this._offset += len; + return value; + } + _skip(bytes) { + this._offset += bytes; + return this; + } + _scan(maxByteLength, term) { + if (term === void 0) term = 0; + const byteOffset = this._offset; + let byteLength = 0; + while (this._dataView.getUint8(this._offset) !== term && byteLength < maxByteLength) { + byteLength++; + this._offset++; + } + if (byteLength < maxByteLength) this._offset++; + return new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + byteOffset, byteLength); + } +}; +var KTX2_ID = [ + 171, + 75, + 84, + 88, + 32, + 50, + 48, + 187, + 13, + 10, + 26, + 10 +]; +function decodeText(buffer) { + if (typeof TextDecoder !== "undefined") return new TextDecoder().decode(buffer); + return Buffer.from(buffer).toString("utf8"); +} +function read(data) { + const id = new Uint8Array(data.buffer, data.byteOffset, KTX2_ID.length); + if (id[0] !== KTX2_ID[0] || id[1] !== KTX2_ID[1] || id[2] !== KTX2_ID[2] || id[3] !== KTX2_ID[3] || id[4] !== KTX2_ID[4] || id[5] !== KTX2_ID[5] || id[6] !== KTX2_ID[6] || id[7] !== KTX2_ID[7] || id[8] !== KTX2_ID[8] || id[9] !== KTX2_ID[9] || id[10] !== KTX2_ID[10] || id[11] !== KTX2_ID[11]) throw new Error("Missing KTX 2.0 identifier."); + const container = new KTX2Container(); + const headerByteLength = 17 * Uint32Array.BYTES_PER_ELEMENT; + const headerReader = new BufferReader(data, KTX2_ID.length, headerByteLength, true); + container.vkFormat = headerReader._nextUint32(); + container.typeSize = headerReader._nextUint32(); + container.pixelWidth = headerReader._nextUint32(); + container.pixelHeight = headerReader._nextUint32(); + container.pixelDepth = headerReader._nextUint32(); + container.layerCount = headerReader._nextUint32(); + container.faceCount = headerReader._nextUint32(); + const levelCount = headerReader._nextUint32(); + container.supercompressionScheme = headerReader._nextUint32(); + const dfdByteOffset = headerReader._nextUint32(); + const dfdByteLength = headerReader._nextUint32(); + const kvdByteOffset = headerReader._nextUint32(); + const kvdByteLength = headerReader._nextUint32(); + const sgdByteOffset = headerReader._nextUint64(); + const sgdByteLength = headerReader._nextUint64(); + const levelByteLength = levelCount * 3 * 8; + const levelReader = new BufferReader(data, KTX2_ID.length + headerByteLength, levelByteLength, true); + for (let i = 0; i < levelCount; i++) container.levels.push({ + levelData: new Uint8Array(data.buffer, data.byteOffset + levelReader._nextUint64(), levelReader._nextUint64()), + uncompressedByteLength: levelReader._nextUint64() + }); + const dfdReader = new BufferReader(data, dfdByteOffset, dfdByteLength, true); + const dfd = { + vendorId: dfdReader._skip(4)._nextUint16(), + descriptorType: dfdReader._nextUint16(), + versionNumber: dfdReader._nextUint16(), + descriptorBlockSize: dfdReader._nextUint16(), + colorModel: dfdReader._nextUint8(), + colorPrimaries: dfdReader._nextUint8(), + transferFunction: dfdReader._nextUint8(), + flags: dfdReader._nextUint8(), + texelBlockDimension: [ + dfdReader._nextUint8(), + dfdReader._nextUint8(), + dfdReader._nextUint8(), + dfdReader._nextUint8() + ], + bytesPlane: [ + dfdReader._nextUint8(), + dfdReader._nextUint8(), + dfdReader._nextUint8(), + dfdReader._nextUint8(), + dfdReader._nextUint8(), + dfdReader._nextUint8(), + dfdReader._nextUint8(), + dfdReader._nextUint8() + ], + samples: [] + }; + const numSamples = (dfd.descriptorBlockSize / 4 - 6) / 4; + for (let i = 0; i < numSamples; i++) { + const sample = { + bitOffset: dfdReader._nextUint16(), + bitLength: dfdReader._nextUint8(), + channelType: dfdReader._nextUint8(), + samplePosition: [ + dfdReader._nextUint8(), + dfdReader._nextUint8(), + dfdReader._nextUint8(), + dfdReader._nextUint8() + ], + sampleLower: -Infinity, + sampleUpper: Infinity + }; + if (sample.channelType & 64) { + sample.sampleLower = dfdReader._nextInt32(); + sample.sampleUpper = dfdReader._nextInt32(); + } else { + sample.sampleLower = dfdReader._nextUint32(); + sample.sampleUpper = dfdReader._nextUint32(); + } + dfd.samples[i] = sample; + } + container.dataFormatDescriptor.length = 0; + container.dataFormatDescriptor.push(dfd); + const kvdReader = new BufferReader(data, kvdByteOffset, kvdByteLength, true); + while (kvdReader._offset < kvdByteLength) { + const keyValueByteLength = kvdReader._nextUint32(); + const keyData = kvdReader._scan(keyValueByteLength); + const key = decodeText(keyData); + container.keyValue[key] = kvdReader._nextUint8Array(keyValueByteLength - keyData.byteLength - 1); + if (key.match(/^ktx/i)) { + const text = decodeText(container.keyValue[key]); + container.keyValue[key] = text.substring(0, text.lastIndexOf("\0")); + } + const kvPadding = keyValueByteLength % 4 ? 4 - keyValueByteLength % 4 : 0; + kvdReader._skip(kvPadding); + } + if (sgdByteLength <= 0) return container; + const sgdReader = new BufferReader(data, sgdByteOffset, sgdByteLength, true); + const endpointCount = sgdReader._nextUint16(); + const selectorCount = sgdReader._nextUint16(); + const endpointsByteLength = sgdReader._nextUint32(); + const selectorsByteLength = sgdReader._nextUint32(); + const tablesByteLength = sgdReader._nextUint32(); + const extendedByteLength = sgdReader._nextUint32(); + const imageDescs = []; + for (let i = 0; i < levelCount; i++) imageDescs.push({ + imageFlags: sgdReader._nextUint32(), + rgbSliceByteOffset: sgdReader._nextUint32(), + rgbSliceByteLength: sgdReader._nextUint32(), + alphaSliceByteOffset: sgdReader._nextUint32(), + alphaSliceByteLength: sgdReader._nextUint32() + }); + const endpointsByteOffset = sgdByteOffset + sgdReader._offset; + const selectorsByteOffset = endpointsByteOffset + endpointsByteLength; + const tablesByteOffset = selectorsByteOffset + selectorsByteLength; + const extendedByteOffset = tablesByteOffset + tablesByteLength; + container.globalData = { + endpointCount, + selectorCount, + imageDescs, + endpointsData: new Uint8Array(data.buffer, data.byteOffset + endpointsByteOffset, endpointsByteLength), + selectorsData: new Uint8Array(data.buffer, data.byteOffset + selectorsByteOffset, selectorsByteLength), + tablesData: new Uint8Array(data.buffer, data.byteOffset + tablesByteOffset, tablesByteLength), + extendedData: new Uint8Array(data.buffer, data.byteOffset + extendedByteOffset, extendedByteLength) + }; + return container; +} +//#endregion +//#region node_modules/three-stdlib/libs/zstddec.js +var init; +var instance; +var heap; +var IMPORT_OBJECT = { env: { emscripten_notify_memory_growth: function(index) { + heap = new Uint8Array(instance.exports.memory.buffer); +} } }; +var ZSTDDecoder = class { + init() { + if (init) return init; + if (typeof fetch !== "undefined") init = fetch("data:application/wasm;base64," + wasm).then((response) => response.arrayBuffer()).then((arrayBuffer) => WebAssembly.instantiate(arrayBuffer, IMPORT_OBJECT)).then(this._init); + else init = WebAssembly.instantiate(Buffer.from(wasm, "base64"), IMPORT_OBJECT).then(this._init); + return init; + } + _init(result) { + instance = result.instance; + IMPORT_OBJECT.env.emscripten_notify_memory_growth(0); + } + decode(array, uncompressedSize = 0) { + if (!instance) throw new Error(`ZSTDDecoder: Await .init() before decoding.`); + const compressedSize = array.byteLength; + const compressedPtr = instance.exports.malloc(compressedSize); + heap.set(array, compressedPtr); + uncompressedSize = uncompressedSize || Number(instance.exports.ZSTD_findDecompressedSize(compressedPtr, compressedSize)); + const uncompressedPtr = instance.exports.malloc(uncompressedSize); + const actualSize = instance.exports.ZSTD_decompress(uncompressedPtr, uncompressedSize, compressedPtr, compressedSize); + const dec = heap.slice(uncompressedPtr, uncompressedPtr + actualSize); + instance.exports.free(compressedPtr); + instance.exports.free(uncompressedPtr); + return dec; + } +}; +var wasm = "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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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"; +//#endregion +//#region node_modules/three-stdlib/_polyfill/CompressedCubeTexture.js +var CompressedCubeTexture = class extends CompressedTexture { + constructor(images, format, type) { + super(void 0, images[0].width, images[0].height, format, type, 301); + this.isCompressedCubeTexture = true; + this.isCubeTexture = true; + this.image = images; + } +}; +//#endregion +//#region node_modules/three-stdlib/_polyfill/CompressedArrayTexture.js +var CompressedArrayTexture = class extends CompressedTexture { + constructor(mipmaps, width, height, depth, format, type) { + super(mipmaps, width, height, format, type); + this.isCompressedArrayTexture = true; + this.image.depth = depth; + this.wrapR = ClampToEdgeWrapping; + } +}; +//#endregion +//#region node_modules/three-stdlib/loaders/KTX2Loader.js +var __defProp$1 = Object.defineProperty; +var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { + enumerable: true, + configurable: true, + writable: true, + value +}) : obj[key] = value; +var __publicField$1 = (obj, key, value) => { + __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value); + return value; +}; +var LinearEncoding = 3e3; +var sRGBEncoding = 3001; +var NoColorSpace = ""; +var DisplayP3ColorSpace = "display-p3"; +var LinearDisplayP3ColorSpace = "display-p3-linear"; +var LinearSRGBColorSpace = "srgb-linear"; +var SRGBColorSpace = "srgb"; +var _taskCache$1 = /* @__PURE__ */ new WeakMap(); +var _activeLoaders = 0; +var _zstd; +var KTX2Loader = /* @__PURE__ */ (() => { + const _KTX2Loader = class extends Loader$1 { + constructor(manager) { + super(manager); + this.transcoderPath = ""; + this.transcoderBinary = null; + this.transcoderPending = null; + this.workerPool = new WorkerPool(); + this.workerSourceURL = ""; + this.workerConfig = null; + if (typeof MSC_TRANSCODER !== "undefined") console.warn("THREE.KTX2Loader: Please update to latest \"basis_transcoder\". \"msc_basis_transcoder\" is no longer supported in three.js r125+."); + } + setTranscoderPath(path) { + this.transcoderPath = path; + return this; + } + setWorkerLimit(num) { + this.workerPool.setWorkerLimit(num); + return this; + } + detectSupport(renderer) { + this.workerConfig = { + astcSupported: renderer.extensions.has("WEBGL_compressed_texture_astc"), + etc1Supported: renderer.extensions.has("WEBGL_compressed_texture_etc1"), + etc2Supported: renderer.extensions.has("WEBGL_compressed_texture_etc"), + dxtSupported: renderer.extensions.has("WEBGL_compressed_texture_s3tc"), + bptcSupported: renderer.extensions.has("EXT_texture_compression_bptc"), + pvrtcSupported: renderer.extensions.has("WEBGL_compressed_texture_pvrtc") || renderer.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc") + }; + if (renderer.capabilities.isWebGL2) this.workerConfig.etc1Supported = false; + return this; + } + init() { + if (!this.transcoderPending) { + const jsLoader = new FileLoader(this.manager); + jsLoader.setPath(this.transcoderPath); + jsLoader.setWithCredentials(this.withCredentials); + const jsContent = jsLoader.loadAsync("basis_transcoder.js"); + const binaryLoader = new FileLoader(this.manager); + binaryLoader.setPath(this.transcoderPath); + binaryLoader.setResponseType("arraybuffer"); + binaryLoader.setWithCredentials(this.withCredentials); + const binaryContent = binaryLoader.loadAsync("basis_transcoder.wasm"); + this.transcoderPending = Promise.all([jsContent, binaryContent]).then(([jsContent2, binaryContent2]) => { + const fn = _KTX2Loader.BasisWorker.toString(); + const body = [ + "/* constants */", + "let _EngineFormat = " + JSON.stringify(_KTX2Loader.EngineFormat), + "let _TranscoderFormat = " + JSON.stringify(_KTX2Loader.TranscoderFormat), + "let _BasisFormat = " + JSON.stringify(_KTX2Loader.BasisFormat), + "/* basis_transcoder.js */", + jsContent2, + "/* worker */", + fn.substring(fn.indexOf("{") + 1, fn.lastIndexOf("}")) + ].join("\n"); + this.workerSourceURL = URL.createObjectURL(new Blob([body])); + this.transcoderBinary = binaryContent2; + this.workerPool.setWorkerCreator(() => { + const worker = new Worker(this.workerSourceURL); + const transcoderBinary = this.transcoderBinary.slice(0); + worker.postMessage({ + type: "init", + config: this.workerConfig, + transcoderBinary + }, [transcoderBinary]); + return worker; + }); + }); + if (_activeLoaders > 0) console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."); + _activeLoaders++; + } + return this.transcoderPending; + } + load(url, onLoad, onProgress, onError) { + if (this.workerConfig === null) throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`."); + const loader = new FileLoader(this.manager); + loader.setResponseType("arraybuffer"); + loader.setWithCredentials(this.withCredentials); + loader.load(url, (buffer) => { + if (_taskCache$1.has(buffer)) return _taskCache$1.get(buffer).promise.then(onLoad).catch(onError); + this._createTexture(buffer).then((texture) => onLoad ? onLoad(texture) : null).catch(onError); + }, onProgress, onError); + } + _createTextureFrom(transcodeResult, container) { + const { faces, width, height, format, type, error, dfdFlags } = transcodeResult; + if (type === "error") return Promise.reject(error); + let texture; + if (container.faceCount === 6) texture = new CompressedCubeTexture(faces, format, UnsignedByteType); + else { + const mipmaps = faces[0].mipmaps; + texture = container.layerCount > 1 ? new CompressedArrayTexture(mipmaps, width, height, container.layerCount, format, UnsignedByteType) : new CompressedTexture(mipmaps, width, height, format, UnsignedByteType); + } + texture.minFilter = faces[0].mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter; + texture.magFilter = LinearFilter; + texture.generateMipmaps = false; + texture.needsUpdate = true; + const colorSpace = parseColorSpace(container); + if ("colorSpace" in texture) texture.colorSpace = colorSpace; + else texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding; + texture.premultiplyAlpha = !!(dfdFlags & 1); + return texture; + } + /** + * @param {ArrayBuffer} buffer + * @param {object?} config + * @return {Promise} + */ + async _createTexture(buffer, config = {}) { + const container = read(new Uint8Array(buffer)); + if (container.vkFormat !== 0) return createRawTexture(container); + const taskConfig = config; + const texturePending = this.init().then(() => { + return this.workerPool.postMessage({ + type: "transcode", + buffer, + taskConfig + }, [buffer]); + }).then((e) => this._createTextureFrom(e.data, container)); + _taskCache$1.set(buffer, { promise: texturePending }); + return texturePending; + } + dispose() { + this.workerPool.dispose(); + if (this.workerSourceURL) URL.revokeObjectURL(this.workerSourceURL); + _activeLoaders--; + return this; + } + }; + let KTX2Loader2 = _KTX2Loader; + __publicField$1(KTX2Loader2, "BasisFormat", { + ETC1S: 0, + UASTC_4x4: 1 + }); + __publicField$1(KTX2Loader2, "TranscoderFormat", { + ETC1: 0, + ETC2: 1, + BC1: 2, + BC3: 3, + BC4: 4, + BC5: 5, + BC7_M6_OPAQUE_ONLY: 6, + BC7_M5: 7, + PVRTC1_4_RGB: 8, + PVRTC1_4_RGBA: 9, + ASTC_4x4: 10, + ATC_RGB: 11, + ATC_RGBA_INTERPOLATED_ALPHA: 12, + RGBA32: 13, + RGB565: 14, + BGR565: 15, + RGBA4444: 16 + }); + __publicField$1(KTX2Loader2, "EngineFormat", { + RGBAFormat, + RGBA_ASTC_4x4_Format, + RGBA_BPTC_Format, + RGBA_ETC2_EAC_Format, + RGBA_PVRTC_4BPPV1_Format, + RGBA_S3TC_DXT5_Format, + RGB_ETC1_Format, + RGB_ETC2_Format, + RGB_PVRTC_4BPPV1_Format, + RGB_S3TC_DXT1_Format + }); + __publicField$1(KTX2Loader2, "BasisWorker", function() { + let config; + let transcoderPending; + let BasisModule; + const EngineFormat = _EngineFormat; + const TranscoderFormat = _TranscoderFormat; + const BasisFormat = _BasisFormat; + self.addEventListener("message", function(e) { + const message = e.data; + switch (message.type) { + case "init": + config = message.config; + init(message.transcoderBinary); + break; + case "transcode": + transcoderPending.then(() => { + try { + const { faces, buffers, width, height, hasAlpha, format, dfdFlags } = transcode(message.buffer); + self.postMessage({ + type: "transcode", + id: message.id, + faces, + width, + height, + hasAlpha, + format, + dfdFlags + }, buffers); + } catch (error) { + console.error(error); + self.postMessage({ + type: "error", + id: message.id, + error: error.message + }); + } + }); + break; + } + }); + function init(wasmBinary) { + transcoderPending = new Promise((resolve) => { + BasisModule = { + wasmBinary, + onRuntimeInitialized: resolve + }; + BASIS(BasisModule); + }).then(() => { + BasisModule.initializeBasis(); + if (BasisModule.KTX2File === void 0) console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder."); + }); + } + function transcode(buffer) { + const ktx2File = new BasisModule.KTX2File(new Uint8Array(buffer)); + function cleanup() { + ktx2File.close(); + ktx2File.delete(); + } + if (!ktx2File.isValid()) { + cleanup(); + throw new Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file"); + } + const basisFormat = ktx2File.isUASTC() ? BasisFormat.UASTC_4x4 : BasisFormat.ETC1S; + const width = ktx2File.getWidth(); + const height = ktx2File.getHeight(); + const layerCount = ktx2File.getLayers() || 1; + const levelCount = ktx2File.getLevels(); + const faceCount = ktx2File.getFaces(); + const hasAlpha = ktx2File.getHasAlpha(); + const dfdFlags = ktx2File.getDFDFlags(); + const { transcoderFormat, engineFormat } = getTranscoderFormat(basisFormat, width, height, hasAlpha); + if (!width || !height || !levelCount) { + cleanup(); + throw new Error("THREE.KTX2Loader: Invalid texture"); + } + if (!ktx2File.startTranscoding()) { + cleanup(); + throw new Error("THREE.KTX2Loader: .startTranscoding failed"); + } + const faces = []; + const buffers = []; + for (let face = 0; face < faceCount; face++) { + const mipmaps = []; + for (let mip = 0; mip < levelCount; mip++) { + const layerMips = []; + let mipWidth, mipHeight; + for (let layer = 0; layer < layerCount; layer++) { + const levelInfo = ktx2File.getImageLevelInfo(mip, layer, face); + if (face === 0 && mip === 0 && layer === 0 && (levelInfo.origWidth % 4 !== 0 || levelInfo.origHeight % 4 !== 0)) console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."); + if (levelCount > 1) { + mipWidth = levelInfo.origWidth; + mipHeight = levelInfo.origHeight; + } else { + mipWidth = levelInfo.width; + mipHeight = levelInfo.height; + } + const dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, transcoderFormat)); + if (!ktx2File.transcodeImage(dst, mip, layer, face, transcoderFormat, 0, -1, -1)) { + cleanup(); + throw new Error("THREE.KTX2Loader: .transcodeImage failed."); + } + layerMips.push(dst); + } + const mipData = concat(layerMips); + mipmaps.push({ + data: mipData, + width: mipWidth, + height: mipHeight + }); + buffers.push(mipData.buffer); + } + faces.push({ + mipmaps, + width, + height, + format: engineFormat + }); + } + cleanup(); + return { + faces, + buffers, + width, + height, + hasAlpha, + format: engineFormat, + dfdFlags + }; + } + const FORMAT_OPTIONS = [ + { + if: "astcSupported", + basisFormat: [BasisFormat.UASTC_4x4], + transcoderFormat: [TranscoderFormat.ASTC_4x4, TranscoderFormat.ASTC_4x4], + engineFormat: [EngineFormat.RGBA_ASTC_4x4_Format, EngineFormat.RGBA_ASTC_4x4_Format], + priorityETC1S: Infinity, + priorityUASTC: 1, + needsPowerOfTwo: false + }, + { + if: "bptcSupported", + basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], + transcoderFormat: [TranscoderFormat.BC7_M5, TranscoderFormat.BC7_M5], + engineFormat: [EngineFormat.RGBA_BPTC_Format, EngineFormat.RGBA_BPTC_Format], + priorityETC1S: 3, + priorityUASTC: 2, + needsPowerOfTwo: false + }, + { + if: "dxtSupported", + basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], + transcoderFormat: [TranscoderFormat.BC1, TranscoderFormat.BC3], + engineFormat: [EngineFormat.RGB_S3TC_DXT1_Format, EngineFormat.RGBA_S3TC_DXT5_Format], + priorityETC1S: 4, + priorityUASTC: 5, + needsPowerOfTwo: false + }, + { + if: "etc2Supported", + basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], + transcoderFormat: [TranscoderFormat.ETC1, TranscoderFormat.ETC2], + engineFormat: [EngineFormat.RGB_ETC2_Format, EngineFormat.RGBA_ETC2_EAC_Format], + priorityETC1S: 1, + priorityUASTC: 3, + needsPowerOfTwo: false + }, + { + if: "etc1Supported", + basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], + transcoderFormat: [TranscoderFormat.ETC1], + engineFormat: [EngineFormat.RGB_ETC1_Format], + priorityETC1S: 2, + priorityUASTC: 4, + needsPowerOfTwo: false + }, + { + if: "pvrtcSupported", + basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], + transcoderFormat: [TranscoderFormat.PVRTC1_4_RGB, TranscoderFormat.PVRTC1_4_RGBA], + engineFormat: [EngineFormat.RGB_PVRTC_4BPPV1_Format, EngineFormat.RGBA_PVRTC_4BPPV1_Format], + priorityETC1S: 5, + priorityUASTC: 6, + needsPowerOfTwo: true + } + ]; + const ETC1S_OPTIONS = FORMAT_OPTIONS.sort(function(a, b) { + return a.priorityETC1S - b.priorityETC1S; + }); + const UASTC_OPTIONS = FORMAT_OPTIONS.sort(function(a, b) { + return a.priorityUASTC - b.priorityUASTC; + }); + function getTranscoderFormat(basisFormat, width, height, hasAlpha) { + let transcoderFormat; + let engineFormat; + const options = basisFormat === BasisFormat.ETC1S ? ETC1S_OPTIONS : UASTC_OPTIONS; + for (let i = 0; i < options.length; i++) { + const opt = options[i]; + if (!config[opt.if]) continue; + if (!opt.basisFormat.includes(basisFormat)) continue; + if (hasAlpha && opt.transcoderFormat.length < 2) continue; + if (opt.needsPowerOfTwo && !(isPowerOfTwo(width) && isPowerOfTwo(height))) continue; + transcoderFormat = opt.transcoderFormat[hasAlpha ? 1 : 0]; + engineFormat = opt.engineFormat[hasAlpha ? 1 : 0]; + return { + transcoderFormat, + engineFormat + }; + } + console.warn("THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32."); + transcoderFormat = TranscoderFormat.RGBA32; + engineFormat = EngineFormat.RGBAFormat; + return { + transcoderFormat, + engineFormat + }; + } + function isPowerOfTwo(value) { + if (value <= 2) return true; + return (value & value - 1) === 0 && value !== 0; + } + function concat(arrays) { + if (arrays.length === 1) return arrays[0]; + let totalByteLength = 0; + for (let i = 0; i < arrays.length; i++) { + const array = arrays[i]; + totalByteLength += array.byteLength; + } + const result = new Uint8Array(totalByteLength); + let byteOffset = 0; + for (let i = 0; i < arrays.length; i++) { + const array = arrays[i]; + result.set(array, byteOffset); + byteOffset += array.byteLength; + } + return result; + } + }); + return KTX2Loader2; +})(); +var UNCOMPRESSED_FORMATS = /* @__PURE__ */ new Set([ + RGBAFormat, + RGFormat, + RedFormat +]); +var FORMAT_MAP = { + [109]: RGBAFormat, + [97]: RGBAFormat, + [37]: RGBAFormat, + [43]: RGBAFormat, + [103]: RGFormat, + [83]: RGFormat, + [16]: RGFormat, + [22]: RGFormat, + [100]: RedFormat, + [76]: RedFormat, + [15]: RedFormat, + [9]: RedFormat, + [166]: RGBA_ASTC_6x6_Format, + [165]: RGBA_ASTC_6x6_Format +}; +var TYPE_MAP = { + [109]: FloatType, + [97]: HalfFloatType, + [37]: UnsignedByteType, + [43]: UnsignedByteType, + [103]: FloatType, + [83]: HalfFloatType, + [16]: UnsignedByteType, + [22]: UnsignedByteType, + [100]: FloatType, + [76]: HalfFloatType, + [15]: UnsignedByteType, + [9]: UnsignedByteType, + [166]: UnsignedByteType, + [165]: UnsignedByteType +}; +async function createRawTexture(container) { + const { vkFormat } = container; + if (FORMAT_MAP[vkFormat] === void 0) throw new Error("THREE.KTX2Loader: Unsupported vkFormat."); + let zstd; + if (container.supercompressionScheme === 2) { + if (!_zstd) _zstd = new Promise(async (resolve) => { + const zstd2 = new ZSTDDecoder(); + await zstd2.init(); + resolve(zstd2); + }); + zstd = await _zstd; + } + const mipmaps = []; + for (let levelIndex = 0; levelIndex < container.levels.length; levelIndex++) { + const levelWidth = Math.max(1, container.pixelWidth >> levelIndex); + const levelHeight = Math.max(1, container.pixelHeight >> levelIndex); + const levelDepth = container.pixelDepth ? Math.max(1, container.pixelDepth >> levelIndex) : 0; + const level = container.levels[levelIndex]; + let levelData; + if (container.supercompressionScheme === 0) levelData = level.levelData; + else if (container.supercompressionScheme === 2) levelData = zstd.decode(level.levelData, level.uncompressedByteLength); + else throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme."); + let data; + if (TYPE_MAP[vkFormat] === 1015) data = new Float32Array(levelData.buffer, levelData.byteOffset, levelData.byteLength / Float32Array.BYTES_PER_ELEMENT); + else if (TYPE_MAP[vkFormat] === 1016) data = new Uint16Array(levelData.buffer, levelData.byteOffset, levelData.byteLength / Uint16Array.BYTES_PER_ELEMENT); + else data = levelData; + mipmaps.push({ + data, + width: levelWidth, + height: levelHeight, + depth: levelDepth + }); + } + let texture; + if (UNCOMPRESSED_FORMATS.has(FORMAT_MAP[vkFormat])) texture = container.pixelDepth === 0 ? new DataTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight) : new Data3DTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight, container.pixelDepth); + else { + if (container.pixelDepth > 0) throw new Error("THREE.KTX2Loader: Unsupported pixelDepth."); + texture = new CompressedTexture(mipmaps, container.pixelWidth, container.pixelHeight); + } + texture.mipmaps = mipmaps; + texture.type = TYPE_MAP[vkFormat]; + texture.format = FORMAT_MAP[vkFormat]; + texture.needsUpdate = true; + const colorSpace = parseColorSpace(container); + if ("colorSpace" in texture) texture.colorSpace = colorSpace; + else texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding; + return Promise.resolve(texture); +} +function parseColorSpace(container) { + const dfd = container.dataFormatDescriptor[0]; + if (dfd.colorPrimaries === 1) return dfd.transferFunction === 2 ? SRGBColorSpace : LinearSRGBColorSpace; + else if (dfd.colorPrimaries === 10) return dfd.transferFunction === 2 ? DisplayP3ColorSpace : LinearDisplayP3ColorSpace; + else if (dfd.colorPrimaries === 0) return NoColorSpace; + else { + console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${dfd.colorPrimaries}"`); + return NoColorSpace; + } +} +//#endregion +//#region node_modules/three-stdlib/loaders/RGBELoader.js +var RGBELoader = class extends DataTextureLoader { + constructor(manager) { + super(manager); + this.type = HalfFloatType; + } + parse(buffer) { + const rgbe_read_error = 1, rgbe_write_error = 2, rgbe_format_error = 3, rgbe_memory_error = 4, rgbe_error = function(rgbe_error_code, msg) { + switch (rgbe_error_code) { + case rgbe_read_error: throw new Error("THREE.RGBELoader: Read Error: " + (msg || "")); + case rgbe_write_error: throw new Error("THREE.RGBELoader: Write Error: " + (msg || "")); + case rgbe_format_error: throw new Error("THREE.RGBELoader: Bad File Format: " + (msg || "")); + default: + case rgbe_memory_error: throw new Error("THREE.RGBELoader: Memory Error: " + (msg || "")); + } + }, RGBE_VALID_PROGRAMTYPE = 1, RGBE_VALID_FORMAT = 2, RGBE_VALID_DIMENSIONS = 4, NEWLINE = "\n", fgets = function(buffer2, lineLimit, consume) { + const chunkSize = 128; + lineLimit = !lineLimit ? 1024 : lineLimit; + let p = buffer2.pos, i = -1, len = 0, s = "", chunk = String.fromCharCode.apply(null, new Uint16Array(buffer2.subarray(p, p + chunkSize))); + while (0 > (i = chunk.indexOf(NEWLINE)) && len < lineLimit && p < buffer2.byteLength) { + s += chunk; + len += chunk.length; + p += chunkSize; + chunk += String.fromCharCode.apply(null, new Uint16Array(buffer2.subarray(p, p + chunkSize))); + } + if (-1 < i) { + if (false !== consume) buffer2.pos += len + i + 1; + return s + chunk.slice(0, i); + } + return false; + }, RGBE_ReadHeader = function(buffer2) { + const magic_token_re = /^#\?(\S+)/, gamma_re = /^\s*GAMMA\s*=\s*(\d+(\.\d+)?)\s*$/, exposure_re = /^\s*EXPOSURE\s*=\s*(\d+(\.\d+)?)\s*$/, format_re = /^\s*FORMAT=(\S+)\s*$/, dimensions_re = /^\s*\-Y\s+(\d+)\s+\+X\s+(\d+)\s*$/, header = { + valid: 0, + string: "", + comments: "", + programtype: "RGBE", + format: "", + gamma: 1, + exposure: 1, + width: 0, + height: 0 + }; + let line, match; + if (buffer2.pos >= buffer2.byteLength || !(line = fgets(buffer2))) rgbe_error(rgbe_read_error, "no header found"); + if (!(match = line.match(magic_token_re))) rgbe_error(rgbe_format_error, "bad initial token"); + header.valid |= RGBE_VALID_PROGRAMTYPE; + header.programtype = match[1]; + header.string += line + "\n"; + while (true) { + line = fgets(buffer2); + if (false === line) break; + header.string += line + "\n"; + if ("#" === line.charAt(0)) { + header.comments += line + "\n"; + continue; + } + if (match = line.match(gamma_re)) header.gamma = parseFloat(match[1]); + if (match = line.match(exposure_re)) header.exposure = parseFloat(match[1]); + if (match = line.match(format_re)) { + header.valid |= RGBE_VALID_FORMAT; + header.format = match[1]; + } + if (match = line.match(dimensions_re)) { + header.valid |= RGBE_VALID_DIMENSIONS; + header.height = parseInt(match[1], 10); + header.width = parseInt(match[2], 10); + } + if (header.valid & RGBE_VALID_FORMAT && header.valid & RGBE_VALID_DIMENSIONS) break; + } + if (!(header.valid & RGBE_VALID_FORMAT)) rgbe_error(rgbe_format_error, "missing format specifier"); + if (!(header.valid & RGBE_VALID_DIMENSIONS)) rgbe_error(rgbe_format_error, "missing image size specifier"); + return header; + }, RGBE_ReadPixels_RLE = function(buffer2, w2, h2) { + const scanline_width = w2; + if (scanline_width < 8 || scanline_width > 32767 || 2 !== buffer2[0] || 2 !== buffer2[1] || buffer2[2] & 128) return new Uint8Array(buffer2); + if (scanline_width !== (buffer2[2] << 8 | buffer2[3])) rgbe_error(rgbe_format_error, "wrong scanline width"); + const data_rgba = new Uint8Array(4 * w2 * h2); + if (!data_rgba.length) rgbe_error(rgbe_memory_error, "unable to allocate buffer space"); + let offset = 0, pos = 0; + const ptr_end = 4 * scanline_width; + const rgbeStart = new Uint8Array(4); + const scanline_buffer = new Uint8Array(ptr_end); + let num_scanlines = h2; + while (num_scanlines > 0 && pos < buffer2.byteLength) { + if (pos + 4 > buffer2.byteLength) rgbe_error(rgbe_read_error); + rgbeStart[0] = buffer2[pos++]; + rgbeStart[1] = buffer2[pos++]; + rgbeStart[2] = buffer2[pos++]; + rgbeStart[3] = buffer2[pos++]; + if (2 != rgbeStart[0] || 2 != rgbeStart[1] || (rgbeStart[2] << 8 | rgbeStart[3]) != scanline_width) rgbe_error(rgbe_format_error, "bad rgbe scanline format"); + let ptr = 0, count; + while (ptr < ptr_end && pos < buffer2.byteLength) { + count = buffer2[pos++]; + const isEncodedRun = count > 128; + if (isEncodedRun) count -= 128; + if (0 === count || ptr + count > ptr_end) rgbe_error(rgbe_format_error, "bad scanline data"); + if (isEncodedRun) { + const byteValue = buffer2[pos++]; + for (let i = 0; i < count; i++) scanline_buffer[ptr++] = byteValue; + } else { + scanline_buffer.set(buffer2.subarray(pos, pos + count), ptr); + ptr += count; + pos += count; + } + } + const l = scanline_width; + for (let i = 0; i < l; i++) { + let off = 0; + data_rgba[offset] = scanline_buffer[i + off]; + off += scanline_width; + data_rgba[offset + 1] = scanline_buffer[i + off]; + off += scanline_width; + data_rgba[offset + 2] = scanline_buffer[i + off]; + off += scanline_width; + data_rgba[offset + 3] = scanline_buffer[i + off]; + offset += 4; + } + num_scanlines--; + } + return data_rgba; + }; + const RGBEByteToRGBFloat = function(sourceArray, sourceOffset, destArray, destOffset) { + const e = sourceArray[sourceOffset + 3]; + const scale = Math.pow(2, e - 128) / 255; + destArray[destOffset + 0] = sourceArray[sourceOffset + 0] * scale; + destArray[destOffset + 1] = sourceArray[sourceOffset + 1] * scale; + destArray[destOffset + 2] = sourceArray[sourceOffset + 2] * scale; + destArray[destOffset + 3] = 1; + }; + const RGBEByteToRGBHalf = function(sourceArray, sourceOffset, destArray, destOffset) { + const e = sourceArray[sourceOffset + 3]; + const scale = Math.pow(2, e - 128) / 255; + destArray[destOffset + 0] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 0] * scale, 65504)); + destArray[destOffset + 1] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 1] * scale, 65504)); + destArray[destOffset + 2] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 2] * scale, 65504)); + destArray[destOffset + 3] = DataUtils.toHalfFloat(1); + }; + const byteArray = new Uint8Array(buffer); + byteArray.pos = 0; + const rgbe_header_info = RGBE_ReadHeader(byteArray); + const w = rgbe_header_info.width, h = rgbe_header_info.height, image_rgba_data = RGBE_ReadPixels_RLE(byteArray.subarray(byteArray.pos), w, h); + let data, type; + let numElements; + switch (this.type) { + case FloatType: + numElements = image_rgba_data.length / 4; + const floatArray = new Float32Array(numElements * 4); + for (let j = 0; j < numElements; j++) RGBEByteToRGBFloat(image_rgba_data, j * 4, floatArray, j * 4); + data = floatArray; + type = FloatType; + break; + case HalfFloatType: + numElements = image_rgba_data.length / 4; + const halfArray = new Uint16Array(numElements * 4); + for (let j = 0; j < numElements; j++) RGBEByteToRGBHalf(image_rgba_data, j * 4, halfArray, j * 4); + data = halfArray; + type = HalfFloatType; + break; + default: throw new Error("THREE.RGBELoader: Unsupported type: " + this.type); + } + return { + width: w, + height: h, + data, + header: rgbe_header_info.string, + gamma: rgbe_header_info.gamma, + exposure: rgbe_header_info.exposure, + type + }; + } + setDataType(value) { + this.type = value; + return this; + } + load(url, onLoad, onProgress, onError) { + function onLoadCallback(texture, texData) { + switch (texture.type) { + case FloatType: + case HalfFloatType: + if ("colorSpace" in texture) texture.colorSpace = "srgb-linear"; + else texture.encoding = 3e3; + texture.minFilter = LinearFilter; + texture.magFilter = LinearFilter; + texture.generateMipmaps = false; + texture.flipY = true; + break; + } + if (onLoad) onLoad(texture, texData); + } + return super.load(url, onLoadCallback, onProgress, onError); + } +}; +//#endregion +//#region node_modules/three-stdlib/loaders/EXRLoader.js +var hasColorSpace = version$2 >= 152; +var EXRLoader = class extends DataTextureLoader { + constructor(manager) { + super(manager); + this.type = HalfFloatType; + } + parse(buffer) { + const USHORT_RANGE = 65536; + const BITMAP_SIZE = 8192; + const HUF_DECBITS = 14; + const HUF_ENCSIZE = 65537; + const HUF_DECSIZE = 1 << HUF_DECBITS; + const HUF_DECMASK = HUF_DECSIZE - 1; + const NBITS = 16; + const A_OFFSET = 1 << NBITS - 1; + const MOD_MASK = (1 << NBITS) - 1; + const SHORT_ZEROCODE_RUN = 59; + const LONG_ZEROCODE_RUN = 63; + const SHORTEST_LONG_RUN = 65 - SHORT_ZEROCODE_RUN; + const ULONG_SIZE = 8; + const FLOAT32_SIZE = 4; + const INT32_SIZE = 4; + const INT16_SIZE = 2; + const INT8_SIZE = 1; + const STATIC_HUFFMAN = 0; + const DEFLATE = 1; + const UNKNOWN = 0; + const LOSSY_DCT = 1; + const RLE = 2; + const logBase = Math.pow(2.7182818, 2.2); + function reverseLutFromBitmap(bitmap, lut) { + var k = 0; + for (var i = 0; i < USHORT_RANGE; ++i) if (i == 0 || bitmap[i >> 3] & 1 << (i & 7)) lut[k++] = i; + var n = k - 1; + while (k < USHORT_RANGE) lut[k++] = 0; + return n; + } + function hufClearDecTable(hdec) { + for (var i = 0; i < HUF_DECSIZE; i++) { + hdec[i] = {}; + hdec[i].len = 0; + hdec[i].lit = 0; + hdec[i].p = null; + } + } + const getBitsReturn = { + l: 0, + c: 0, + lc: 0 + }; + function getBits(nBits, c, lc, uInt8Array2, inOffset) { + while (lc < nBits) { + c = c << 8 | parseUint8Array(uInt8Array2, inOffset); + lc += 8; + } + lc -= nBits; + getBitsReturn.l = c >> lc & (1 << nBits) - 1; + getBitsReturn.c = c; + getBitsReturn.lc = lc; + } + const hufTableBuffer = new Array(59); + function hufCanonicalCodeTable(hcode) { + for (var i = 0; i <= 58; ++i) hufTableBuffer[i] = 0; + for (var i = 0; i < HUF_ENCSIZE; ++i) hufTableBuffer[hcode[i]] += 1; + var c = 0; + for (var i = 58; i > 0; --i) { + var nc = c + hufTableBuffer[i] >> 1; + hufTableBuffer[i] = c; + c = nc; + } + for (var i = 0; i < HUF_ENCSIZE; ++i) { + var l = hcode[i]; + if (l > 0) hcode[i] = l | hufTableBuffer[l]++ << 6; + } + } + function hufUnpackEncTable(uInt8Array2, inDataView, inOffset, ni, im, iM, hcode) { + var p = inOffset; + var c = 0; + var lc = 0; + for (; im <= iM; im++) { + if (p.value - inOffset.value > ni) return false; + getBits(6, c, lc, uInt8Array2, p); + var l = getBitsReturn.l; + c = getBitsReturn.c; + lc = getBitsReturn.lc; + hcode[im] = l; + if (l == LONG_ZEROCODE_RUN) { + if (p.value - inOffset.value > ni) throw "Something wrong with hufUnpackEncTable"; + getBits(8, c, lc, uInt8Array2, p); + var zerun = getBitsReturn.l + SHORTEST_LONG_RUN; + c = getBitsReturn.c; + lc = getBitsReturn.lc; + if (im + zerun > iM + 1) throw "Something wrong with hufUnpackEncTable"; + while (zerun--) hcode[im++] = 0; + im--; + } else if (l >= SHORT_ZEROCODE_RUN) { + var zerun = l - SHORT_ZEROCODE_RUN + 2; + if (im + zerun > iM + 1) throw "Something wrong with hufUnpackEncTable"; + while (zerun--) hcode[im++] = 0; + im--; + } + } + hufCanonicalCodeTable(hcode); + } + function hufLength(code) { + return code & 63; + } + function hufCode(code) { + return code >> 6; + } + function hufBuildDecTable(hcode, im, iM, hdecod) { + for (; im <= iM; im++) { + var c = hufCode(hcode[im]); + var l = hufLength(hcode[im]); + if (c >> l) throw "Invalid table entry"; + if (l > HUF_DECBITS) { + var pl = hdecod[c >> l - HUF_DECBITS]; + if (pl.len) throw "Invalid table entry"; + pl.lit++; + if (pl.p) { + var p = pl.p; + pl.p = new Array(pl.lit); + for (var i = 0; i < pl.lit - 1; ++i) pl.p[i] = p[i]; + } else pl.p = new Array(1); + pl.p[pl.lit - 1] = im; + } else if (l) { + var plOffset = 0; + for (var i = 1 << HUF_DECBITS - l; i > 0; i--) { + var pl = hdecod[(c << HUF_DECBITS - l) + plOffset]; + if (pl.len || pl.p) throw "Invalid table entry"; + pl.len = l; + pl.lit = im; + plOffset++; + } + } + } + return true; + } + const getCharReturn = { + c: 0, + lc: 0 + }; + function getChar(c, lc, uInt8Array2, inOffset) { + c = c << 8 | parseUint8Array(uInt8Array2, inOffset); + lc += 8; + getCharReturn.c = c; + getCharReturn.lc = lc; + } + const getCodeReturn = { + c: 0, + lc: 0 + }; + function getCode(po, rlc, c, lc, uInt8Array2, inDataView, inOffset, outBuffer, outBufferOffset, outBufferEndOffset) { + if (po == rlc) { + if (lc < 8) { + getChar(c, lc, uInt8Array2, inOffset); + c = getCharReturn.c; + lc = getCharReturn.lc; + } + lc -= 8; + var cs = c >> lc; + var cs = new Uint8Array([cs])[0]; + if (outBufferOffset.value + cs > outBufferEndOffset) return false; + var s = outBuffer[outBufferOffset.value - 1]; + while (cs-- > 0) outBuffer[outBufferOffset.value++] = s; + } else if (outBufferOffset.value < outBufferEndOffset) outBuffer[outBufferOffset.value++] = po; + else return false; + getCodeReturn.c = c; + getCodeReturn.lc = lc; + } + function UInt16(value) { + return value & 65535; + } + function Int16(value) { + var ref = UInt16(value); + return ref > 32767 ? ref - 65536 : ref; + } + const wdec14Return = { + a: 0, + b: 0 + }; + function wdec14(l, h) { + var ls = Int16(l); + var hi = Int16(h); + var ai = ls + (hi & 1) + (hi >> 1); + var as = ai; + var bs = ai - hi; + wdec14Return.a = as; + wdec14Return.b = bs; + } + function wdec16(l, h) { + var m = UInt16(l); + var d = UInt16(h); + var bb = m - (d >> 1) & MOD_MASK; + wdec14Return.a = d + bb - A_OFFSET & MOD_MASK; + wdec14Return.b = bb; + } + function wav2Decode(buffer2, j, nx, ox, ny, oy, mx) { + var w14 = mx < 16384; + var n = nx > ny ? ny : nx; + var p = 1; + var p2; + while (p <= n) p <<= 1; + p >>= 1; + p2 = p; + p >>= 1; + while (p >= 1) { + var py = 0; + var ey = py + oy * (ny - p2); + var oy1 = oy * p; + var oy2 = oy * p2; + var ox1 = ox * p; + var ox2 = ox * p2; + var i00, i01, i10, i11; + for (; py <= ey; py += oy2) { + var px = py; + var ex = py + ox * (nx - p2); + for (; px <= ex; px += ox2) { + var p01 = px + ox1; + var p10 = px + oy1; + var p11 = p10 + ox1; + if (w14) { + wdec14(buffer2[px + j], buffer2[p10 + j]); + i00 = wdec14Return.a; + i10 = wdec14Return.b; + wdec14(buffer2[p01 + j], buffer2[p11 + j]); + i01 = wdec14Return.a; + i11 = wdec14Return.b; + wdec14(i00, i01); + buffer2[px + j] = wdec14Return.a; + buffer2[p01 + j] = wdec14Return.b; + wdec14(i10, i11); + buffer2[p10 + j] = wdec14Return.a; + buffer2[p11 + j] = wdec14Return.b; + } else { + wdec16(buffer2[px + j], buffer2[p10 + j]); + i00 = wdec14Return.a; + i10 = wdec14Return.b; + wdec16(buffer2[p01 + j], buffer2[p11 + j]); + i01 = wdec14Return.a; + i11 = wdec14Return.b; + wdec16(i00, i01); + buffer2[px + j] = wdec14Return.a; + buffer2[p01 + j] = wdec14Return.b; + wdec16(i10, i11); + buffer2[p10 + j] = wdec14Return.a; + buffer2[p11 + j] = wdec14Return.b; + } + } + if (nx & p) { + var p10 = px + oy1; + if (w14) wdec14(buffer2[px + j], buffer2[p10 + j]); + else wdec16(buffer2[px + j], buffer2[p10 + j]); + i00 = wdec14Return.a; + buffer2[p10 + j] = wdec14Return.b; + buffer2[px + j] = i00; + } + } + if (ny & p) { + var px = py; + var ex = py + ox * (nx - p2); + for (; px <= ex; px += ox2) { + var p01 = px + ox1; + if (w14) wdec14(buffer2[px + j], buffer2[p01 + j]); + else wdec16(buffer2[px + j], buffer2[p01 + j]); + i00 = wdec14Return.a; + buffer2[p01 + j] = wdec14Return.b; + buffer2[px + j] = i00; + } + } + p2 = p; + p >>= 1; + } + return py; + } + function hufDecode(encodingTable, decodingTable, uInt8Array2, inDataView, inOffset, ni, rlc, no, outBuffer, outOffset) { + var c = 0; + var lc = 0; + var outBufferEndOffset = no; + var inOffsetEnd = Math.trunc(inOffset.value + (ni + 7) / 8); + while (inOffset.value < inOffsetEnd) { + getChar(c, lc, uInt8Array2, inOffset); + c = getCharReturn.c; + lc = getCharReturn.lc; + while (lc >= HUF_DECBITS) { + var pl = decodingTable[c >> lc - HUF_DECBITS & HUF_DECMASK]; + if (pl.len) { + lc -= pl.len; + getCode(pl.lit, rlc, c, lc, uInt8Array2, inDataView, inOffset, outBuffer, outOffset, outBufferEndOffset); + c = getCodeReturn.c; + lc = getCodeReturn.lc; + } else { + if (!pl.p) throw "hufDecode issues"; + var j; + for (j = 0; j < pl.lit; j++) { + var l = hufLength(encodingTable[pl.p[j]]); + while (lc < l && inOffset.value < inOffsetEnd) { + getChar(c, lc, uInt8Array2, inOffset); + c = getCharReturn.c; + lc = getCharReturn.lc; + } + if (lc >= l) { + if (hufCode(encodingTable[pl.p[j]]) == (c >> lc - l & (1 << l) - 1)) { + lc -= l; + getCode(pl.p[j], rlc, c, lc, uInt8Array2, inDataView, inOffset, outBuffer, outOffset, outBufferEndOffset); + c = getCodeReturn.c; + lc = getCodeReturn.lc; + break; + } + } + } + if (j == pl.lit) throw "hufDecode issues"; + } + } + } + var i = 8 - ni & 7; + c >>= i; + lc -= i; + while (lc > 0) { + var pl = decodingTable[c << HUF_DECBITS - lc & HUF_DECMASK]; + if (pl.len) { + lc -= pl.len; + getCode(pl.lit, rlc, c, lc, uInt8Array2, inDataView, inOffset, outBuffer, outOffset, outBufferEndOffset); + c = getCodeReturn.c; + lc = getCodeReturn.lc; + } else throw "hufDecode issues"; + } + return true; + } + function hufUncompress(uInt8Array2, inDataView, inOffset, nCompressed, outBuffer, nRaw) { + var outOffset = { value: 0 }; + var initialInOffset = inOffset.value; + var im = parseUint32(inDataView, inOffset); + var iM = parseUint32(inDataView, inOffset); + inOffset.value += 4; + var nBits = parseUint32(inDataView, inOffset); + inOffset.value += 4; + if (im < 0 || im >= HUF_ENCSIZE || iM < 0 || iM >= HUF_ENCSIZE) throw "Something wrong with HUF_ENCSIZE"; + var freq = new Array(HUF_ENCSIZE); + var hdec = new Array(HUF_DECSIZE); + hufClearDecTable(hdec); + hufUnpackEncTable(uInt8Array2, inDataView, inOffset, nCompressed - (inOffset.value - initialInOffset), im, iM, freq); + if (nBits > 8 * (nCompressed - (inOffset.value - initialInOffset))) throw "Something wrong with hufUncompress"; + hufBuildDecTable(freq, im, iM, hdec); + hufDecode(freq, hdec, uInt8Array2, inDataView, inOffset, nBits, iM, nRaw, outBuffer, outOffset); + } + function applyLut(lut, data, nData) { + for (var i = 0; i < nData; ++i) data[i] = lut[data[i]]; + } + function predictor(source) { + for (var t = 1; t < source.length; t++) source[t] = source[t - 1] + source[t] - 128; + } + function interleaveScalar(source, out) { + var t1 = 0; + var t2 = Math.floor((source.length + 1) / 2); + var s = 0; + var stop = source.length - 1; + while (true) { + if (s > stop) break; + out[s++] = source[t1++]; + if (s > stop) break; + out[s++] = source[t2++]; + } + } + function decodeRunLength(source) { + var size = source.byteLength; + var out = new Array(); + var p = 0; + var reader = new DataView(source); + while (size > 0) { + var l = reader.getInt8(p++); + if (l < 0) { + var count = -l; + size -= count + 1; + for (var i = 0; i < count; i++) out.push(reader.getUint8(p++)); + } else { + var count = l; + size -= 2; + var value = reader.getUint8(p++); + for (var i = 0; i < count + 1; i++) out.push(value); + } + } + return out; + } + function lossyDctDecode(cscSet, rowPtrs, channelData, acBuffer, dcBuffer, outBuffer) { + var dataView = new DataView(outBuffer.buffer); + var width = channelData[cscSet.idx[0]].width; + var height = channelData[cscSet.idx[0]].height; + var numComp = 3; + var numFullBlocksX = Math.floor(width / 8); + var numBlocksX = Math.ceil(width / 8); + var numBlocksY = Math.ceil(height / 8); + var leftoverX = width - (numBlocksX - 1) * 8; + var leftoverY = height - (numBlocksY - 1) * 8; + var currAcComp = { value: 0 }; + var currDcComp = new Array(numComp); + var dctData = new Array(numComp); + var halfZigBlock = new Array(numComp); + var rowBlock = new Array(numComp); + var rowOffsets = new Array(numComp); + for (let comp2 = 0; comp2 < numComp; ++comp2) { + rowOffsets[comp2] = rowPtrs[cscSet.idx[comp2]]; + currDcComp[comp2] = comp2 < 1 ? 0 : currDcComp[comp2 - 1] + numBlocksX * numBlocksY; + dctData[comp2] = new Float32Array(64); + halfZigBlock[comp2] = new Uint16Array(64); + rowBlock[comp2] = new Uint16Array(numBlocksX * 64); + } + for (let blocky = 0; blocky < numBlocksY; ++blocky) { + var maxY = 8; + if (blocky == numBlocksY - 1) maxY = leftoverY; + var maxX = 8; + for (let blockx = 0; blockx < numBlocksX; ++blockx) { + if (blockx == numBlocksX - 1) maxX = leftoverX; + for (let comp2 = 0; comp2 < numComp; ++comp2) { + halfZigBlock[comp2].fill(0); + halfZigBlock[comp2][0] = dcBuffer[currDcComp[comp2]++]; + unRleAC(currAcComp, acBuffer, halfZigBlock[comp2]); + unZigZag(halfZigBlock[comp2], dctData[comp2]); + dctInverse(dctData[comp2]); + } + csc709Inverse(dctData); + for (let comp2 = 0; comp2 < numComp; ++comp2) convertToHalf(dctData[comp2], rowBlock[comp2], blockx * 64); + } + let offset2 = 0; + for (let comp2 = 0; comp2 < numComp; ++comp2) { + const type2 = channelData[cscSet.idx[comp2]].type; + for (let y2 = 8 * blocky; y2 < 8 * blocky + maxY; ++y2) { + offset2 = rowOffsets[comp2][y2]; + for (let blockx = 0; blockx < numFullBlocksX; ++blockx) { + const src = blockx * 64 + (y2 & 7) * 8; + dataView.setUint16(offset2 + 0 * INT16_SIZE * type2, rowBlock[comp2][src + 0], true); + dataView.setUint16(offset2 + 1 * INT16_SIZE * type2, rowBlock[comp2][src + 1], true); + dataView.setUint16(offset2 + 2 * INT16_SIZE * type2, rowBlock[comp2][src + 2], true); + dataView.setUint16(offset2 + 3 * INT16_SIZE * type2, rowBlock[comp2][src + 3], true); + dataView.setUint16(offset2 + 4 * INT16_SIZE * type2, rowBlock[comp2][src + 4], true); + dataView.setUint16(offset2 + 5 * INT16_SIZE * type2, rowBlock[comp2][src + 5], true); + dataView.setUint16(offset2 + 6 * INT16_SIZE * type2, rowBlock[comp2][src + 6], true); + dataView.setUint16(offset2 + 7 * INT16_SIZE * type2, rowBlock[comp2][src + 7], true); + offset2 += 8 * INT16_SIZE * type2; + } + } + if (numFullBlocksX != numBlocksX) for (let y2 = 8 * blocky; y2 < 8 * blocky + maxY; ++y2) { + const offset3 = rowOffsets[comp2][y2] + 8 * numFullBlocksX * INT16_SIZE * type2; + const src = numFullBlocksX * 64 + (y2 & 7) * 8; + for (let x2 = 0; x2 < maxX; ++x2) dataView.setUint16(offset3 + x2 * INT16_SIZE * type2, rowBlock[comp2][src + x2], true); + } + } + } + var halfRow = new Uint16Array(width); + var dataView = new DataView(outBuffer.buffer); + for (var comp = 0; comp < numComp; ++comp) { + channelData[cscSet.idx[comp]].decoded = true; + var type = channelData[cscSet.idx[comp]].type; + if (channelData[comp].type != 2) continue; + for (var y = 0; y < height; ++y) { + const offset2 = rowOffsets[comp][y]; + for (var x = 0; x < width; ++x) halfRow[x] = dataView.getUint16(offset2 + x * INT16_SIZE * type, true); + for (var x = 0; x < width; ++x) dataView.setFloat32(offset2 + x * INT16_SIZE * type, decodeFloat16(halfRow[x]), true); + } + } + } + function unRleAC(currAcComp, acBuffer, halfZigBlock) { + var acValue; + var dctComp = 1; + while (dctComp < 64) { + acValue = acBuffer[currAcComp.value]; + if (acValue == 65280) dctComp = 64; + else if (acValue >> 8 == 255) dctComp += acValue & 255; + else { + halfZigBlock[dctComp] = acValue; + dctComp++; + } + currAcComp.value++; + } + } + function unZigZag(src, dst) { + dst[0] = decodeFloat16(src[0]); + dst[1] = decodeFloat16(src[1]); + dst[2] = decodeFloat16(src[5]); + dst[3] = decodeFloat16(src[6]); + dst[4] = decodeFloat16(src[14]); + dst[5] = decodeFloat16(src[15]); + dst[6] = decodeFloat16(src[27]); + dst[7] = decodeFloat16(src[28]); + dst[8] = decodeFloat16(src[2]); + dst[9] = decodeFloat16(src[4]); + dst[10] = decodeFloat16(src[7]); + dst[11] = decodeFloat16(src[13]); + dst[12] = decodeFloat16(src[16]); + dst[13] = decodeFloat16(src[26]); + dst[14] = decodeFloat16(src[29]); + dst[15] = decodeFloat16(src[42]); + dst[16] = decodeFloat16(src[3]); + dst[17] = decodeFloat16(src[8]); + dst[18] = decodeFloat16(src[12]); + dst[19] = decodeFloat16(src[17]); + dst[20] = decodeFloat16(src[25]); + dst[21] = decodeFloat16(src[30]); + dst[22] = decodeFloat16(src[41]); + dst[23] = decodeFloat16(src[43]); + dst[24] = decodeFloat16(src[9]); + dst[25] = decodeFloat16(src[11]); + dst[26] = decodeFloat16(src[18]); + dst[27] = decodeFloat16(src[24]); + dst[28] = decodeFloat16(src[31]); + dst[29] = decodeFloat16(src[40]); + dst[30] = decodeFloat16(src[44]); + dst[31] = decodeFloat16(src[53]); + dst[32] = decodeFloat16(src[10]); + dst[33] = decodeFloat16(src[19]); + dst[34] = decodeFloat16(src[23]); + dst[35] = decodeFloat16(src[32]); + dst[36] = decodeFloat16(src[39]); + dst[37] = decodeFloat16(src[45]); + dst[38] = decodeFloat16(src[52]); + dst[39] = decodeFloat16(src[54]); + dst[40] = decodeFloat16(src[20]); + dst[41] = decodeFloat16(src[22]); + dst[42] = decodeFloat16(src[33]); + dst[43] = decodeFloat16(src[38]); + dst[44] = decodeFloat16(src[46]); + dst[45] = decodeFloat16(src[51]); + dst[46] = decodeFloat16(src[55]); + dst[47] = decodeFloat16(src[60]); + dst[48] = decodeFloat16(src[21]); + dst[49] = decodeFloat16(src[34]); + dst[50] = decodeFloat16(src[37]); + dst[51] = decodeFloat16(src[47]); + dst[52] = decodeFloat16(src[50]); + dst[53] = decodeFloat16(src[56]); + dst[54] = decodeFloat16(src[59]); + dst[55] = decodeFloat16(src[61]); + dst[56] = decodeFloat16(src[35]); + dst[57] = decodeFloat16(src[36]); + dst[58] = decodeFloat16(src[48]); + dst[59] = decodeFloat16(src[49]); + dst[60] = decodeFloat16(src[57]); + dst[61] = decodeFloat16(src[58]); + dst[62] = decodeFloat16(src[62]); + dst[63] = decodeFloat16(src[63]); + } + function dctInverse(data) { + const a = .5 * Math.cos(3.14159 / 4); + const b = .5 * Math.cos(3.14159 / 16); + const c = .5 * Math.cos(3.14159 / 8); + const d = .5 * Math.cos(3 * 3.14159 / 16); + const e = .5 * Math.cos(5 * 3.14159 / 16); + const f = .5 * Math.cos(3 * 3.14159 / 8); + const g = .5 * Math.cos(7 * 3.14159 / 16); + var alpha = new Array(4); + var beta = new Array(4); + var theta = new Array(4); + var gamma = new Array(4); + for (var row = 0; row < 8; ++row) { + var rowPtr = row * 8; + alpha[0] = c * data[rowPtr + 2]; + alpha[1] = f * data[rowPtr + 2]; + alpha[2] = c * data[rowPtr + 6]; + alpha[3] = f * data[rowPtr + 6]; + beta[0] = b * data[rowPtr + 1] + d * data[rowPtr + 3] + e * data[rowPtr + 5] + g * data[rowPtr + 7]; + beta[1] = d * data[rowPtr + 1] - g * data[rowPtr + 3] - b * data[rowPtr + 5] - e * data[rowPtr + 7]; + beta[2] = e * data[rowPtr + 1] - b * data[rowPtr + 3] + g * data[rowPtr + 5] + d * data[rowPtr + 7]; + beta[3] = g * data[rowPtr + 1] - e * data[rowPtr + 3] + d * data[rowPtr + 5] - b * data[rowPtr + 7]; + theta[0] = a * (data[rowPtr + 0] + data[rowPtr + 4]); + theta[3] = a * (data[rowPtr + 0] - data[rowPtr + 4]); + theta[1] = alpha[0] + alpha[3]; + theta[2] = alpha[1] - alpha[2]; + gamma[0] = theta[0] + theta[1]; + gamma[1] = theta[3] + theta[2]; + gamma[2] = theta[3] - theta[2]; + gamma[3] = theta[0] - theta[1]; + data[rowPtr + 0] = gamma[0] + beta[0]; + data[rowPtr + 1] = gamma[1] + beta[1]; + data[rowPtr + 2] = gamma[2] + beta[2]; + data[rowPtr + 3] = gamma[3] + beta[3]; + data[rowPtr + 4] = gamma[3] - beta[3]; + data[rowPtr + 5] = gamma[2] - beta[2]; + data[rowPtr + 6] = gamma[1] - beta[1]; + data[rowPtr + 7] = gamma[0] - beta[0]; + } + for (var column = 0; column < 8; ++column) { + alpha[0] = c * data[16 + column]; + alpha[1] = f * data[16 + column]; + alpha[2] = c * data[48 + column]; + alpha[3] = f * data[48 + column]; + beta[0] = b * data[8 + column] + d * data[24 + column] + e * data[40 + column] + g * data[56 + column]; + beta[1] = d * data[8 + column] - g * data[24 + column] - b * data[40 + column] - e * data[56 + column]; + beta[2] = e * data[8 + column] - b * data[24 + column] + g * data[40 + column] + d * data[56 + column]; + beta[3] = g * data[8 + column] - e * data[24 + column] + d * data[40 + column] - b * data[56 + column]; + theta[0] = a * (data[column] + data[32 + column]); + theta[3] = a * (data[column] - data[32 + column]); + theta[1] = alpha[0] + alpha[3]; + theta[2] = alpha[1] - alpha[2]; + gamma[0] = theta[0] + theta[1]; + gamma[1] = theta[3] + theta[2]; + gamma[2] = theta[3] - theta[2]; + gamma[3] = theta[0] - theta[1]; + data[0 + column] = gamma[0] + beta[0]; + data[8 + column] = gamma[1] + beta[1]; + data[16 + column] = gamma[2] + beta[2]; + data[24 + column] = gamma[3] + beta[3]; + data[32 + column] = gamma[3] - beta[3]; + data[40 + column] = gamma[2] - beta[2]; + data[48 + column] = gamma[1] - beta[1]; + data[56 + column] = gamma[0] - beta[0]; + } + } + function csc709Inverse(data) { + for (var i = 0; i < 64; ++i) { + var y = data[0][i]; + var cb = data[1][i]; + var cr = data[2][i]; + data[0][i] = y + 1.5747 * cr; + data[1][i] = y - .1873 * cb - .4682 * cr; + data[2][i] = y + 1.8556 * cb; + } + } + function convertToHalf(src, dst, idx) { + for (var i = 0; i < 64; ++i) dst[idx + i] = DataUtils.toHalfFloat(toLinear(src[i])); + } + function toLinear(float) { + if (float <= 1) return Math.sign(float) * Math.pow(Math.abs(float), 2.2); + else return Math.sign(float) * Math.pow(logBase, Math.abs(float) - 1); + } + function uncompressRAW(info) { + return new DataView(info.array.buffer, info.offset.value, info.size); + } + function uncompressRLE(info) { + var compressed = info.viewer.buffer.slice(info.offset.value, info.offset.value + info.size); + var rawBuffer = new Uint8Array(decodeRunLength(compressed)); + var tmpBuffer = new Uint8Array(rawBuffer.length); + predictor(rawBuffer); + interleaveScalar(rawBuffer, tmpBuffer); + return new DataView(tmpBuffer.buffer); + } + function uncompressZIP(info) { + var rawBuffer = unzlibSync(info.array.slice(info.offset.value, info.offset.value + info.size)); + var tmpBuffer = new Uint8Array(rawBuffer.length); + predictor(rawBuffer); + interleaveScalar(rawBuffer, tmpBuffer); + return new DataView(tmpBuffer.buffer); + } + function uncompressPIZ(info) { + var inDataView = info.viewer; + var inOffset = { value: info.offset.value }; + var outBuffer = new Uint16Array(info.width * info.scanlineBlockSize * (info.channels * info.type)); + var bitmap = new Uint8Array(BITMAP_SIZE); + var outBufferEnd = 0; + var pizChannelData = new Array(info.channels); + for (var i = 0; i < info.channels; i++) { + pizChannelData[i] = {}; + pizChannelData[i]["start"] = outBufferEnd; + pizChannelData[i]["end"] = pizChannelData[i]["start"]; + pizChannelData[i]["nx"] = info.width; + pizChannelData[i]["ny"] = info.lines; + pizChannelData[i]["size"] = info.type; + outBufferEnd += pizChannelData[i].nx * pizChannelData[i].ny * pizChannelData[i].size; + } + var minNonZero = parseUint16(inDataView, inOffset); + var maxNonZero = parseUint16(inDataView, inOffset); + if (maxNonZero >= BITMAP_SIZE) throw "Something is wrong with PIZ_COMPRESSION BITMAP_SIZE"; + if (minNonZero <= maxNonZero) for (var i = 0; i < maxNonZero - minNonZero + 1; i++) bitmap[i + minNonZero] = parseUint8(inDataView, inOffset); + var lut = new Uint16Array(USHORT_RANGE); + var maxValue = reverseLutFromBitmap(bitmap, lut); + var length = parseUint32(inDataView, inOffset); + hufUncompress(info.array, inDataView, inOffset, length, outBuffer, outBufferEnd); + for (var i = 0; i < info.channels; ++i) { + var cd = pizChannelData[i]; + for (var j = 0; j < pizChannelData[i].size; ++j) wav2Decode(outBuffer, cd.start + j, cd.nx, cd.size, cd.ny, cd.nx * cd.size, maxValue); + } + applyLut(lut, outBuffer, outBufferEnd); + var tmpOffset2 = 0; + var tmpBuffer = new Uint8Array(outBuffer.buffer.byteLength); + for (var y = 0; y < info.lines; y++) for (var c = 0; c < info.channels; c++) { + var cd = pizChannelData[c]; + var n = cd.nx * cd.size; + var cp = new Uint8Array(outBuffer.buffer, cd.end * INT16_SIZE, n * INT16_SIZE); + tmpBuffer.set(cp, tmpOffset2); + tmpOffset2 += n * INT16_SIZE; + cd.end += n; + } + return new DataView(tmpBuffer.buffer); + } + function uncompressPXR(info) { + var rawBuffer = unzlibSync(info.array.slice(info.offset.value, info.offset.value + info.size)); + const sz = info.lines * info.channels * info.width; + const tmpBuffer = info.type == 1 ? new Uint16Array(sz) : new Uint32Array(sz); + let tmpBufferEnd = 0; + let writePtr = 0; + const ptr = new Array(4); + for (let y = 0; y < info.lines; y++) for (let c = 0; c < info.channels; c++) { + let pixel = 0; + switch (info.type) { + case 1: + ptr[0] = tmpBufferEnd; + ptr[1] = ptr[0] + info.width; + tmpBufferEnd = ptr[1] + info.width; + for (let j = 0; j < info.width; ++j) { + const diff = rawBuffer[ptr[0]++] << 8 | rawBuffer[ptr[1]++]; + pixel += diff; + tmpBuffer[writePtr] = pixel; + writePtr++; + } + break; + case 2: + ptr[0] = tmpBufferEnd; + ptr[1] = ptr[0] + info.width; + ptr[2] = ptr[1] + info.width; + tmpBufferEnd = ptr[2] + info.width; + for (let j = 0; j < info.width; ++j) { + const diff = rawBuffer[ptr[0]++] << 24 | rawBuffer[ptr[1]++] << 16 | rawBuffer[ptr[2]++] << 8; + pixel += diff; + tmpBuffer[writePtr] = pixel; + writePtr++; + } + break; + } + } + return new DataView(tmpBuffer.buffer); + } + function uncompressDWA(info) { + var inDataView = info.viewer; + var inOffset = { value: info.offset.value }; + var outBuffer = new Uint8Array(info.width * info.lines * (info.channels * info.type * INT16_SIZE)); + var dwaHeader = { + version: parseInt64(inDataView, inOffset), + unknownUncompressedSize: parseInt64(inDataView, inOffset), + unknownCompressedSize: parseInt64(inDataView, inOffset), + acCompressedSize: parseInt64(inDataView, inOffset), + dcCompressedSize: parseInt64(inDataView, inOffset), + rleCompressedSize: parseInt64(inDataView, inOffset), + rleUncompressedSize: parseInt64(inDataView, inOffset), + rleRawSize: parseInt64(inDataView, inOffset), + totalAcUncompressedCount: parseInt64(inDataView, inOffset), + totalDcUncompressedCount: parseInt64(inDataView, inOffset), + acCompression: parseInt64(inDataView, inOffset) + }; + if (dwaHeader.version < 2) throw "EXRLoader.parse: " + EXRHeader.compression + " version " + dwaHeader.version + " is unsupported"; + var channelRules = new Array(); + var ruleSize = parseUint16(inDataView, inOffset) - INT16_SIZE; + while (ruleSize > 0) { + var name = parseNullTerminatedString(inDataView.buffer, inOffset); + var value = parseUint8(inDataView, inOffset); + var compression = value >> 2 & 3; + var csc = (value >> 4) - 1; + var index = new Int8Array([csc])[0]; + var type = parseUint8(inDataView, inOffset); + channelRules.push({ + name, + index, + type, + compression + }); + ruleSize -= name.length + 3; + } + var channels = EXRHeader.channels; + var channelData = new Array(info.channels); + for (var i = 0; i < info.channels; ++i) { + var cd = channelData[i] = {}; + var channel = channels[i]; + cd.name = channel.name; + cd.compression = UNKNOWN; + cd.decoded = false; + cd.type = channel.pixelType; + cd.pLinear = channel.pLinear; + cd.width = info.width; + cd.height = info.lines; + } + var cscSet = { idx: new Array(3) }; + for (var offset2 = 0; offset2 < info.channels; ++offset2) { + var cd = channelData[offset2]; + for (var i = 0; i < channelRules.length; ++i) { + var rule = channelRules[i]; + if (cd.name == rule.name) { + cd.compression = rule.compression; + if (rule.index >= 0) cscSet.idx[rule.index] = offset2; + cd.offset = offset2; + } + } + } + if (dwaHeader.acCompressedSize > 0) switch (dwaHeader.acCompression) { + case STATIC_HUFFMAN: + var acBuffer = new Uint16Array(dwaHeader.totalAcUncompressedCount); + hufUncompress(info.array, inDataView, inOffset, dwaHeader.acCompressedSize, acBuffer, dwaHeader.totalAcUncompressedCount); + break; + case DEFLATE: + var compressed = info.array.slice(inOffset.value, inOffset.value + dwaHeader.totalAcUncompressedCount); + var data = unzlibSync(compressed); + var acBuffer = new Uint16Array(data.buffer); + inOffset.value += dwaHeader.totalAcUncompressedCount; + break; + } + if (dwaHeader.dcCompressedSize > 0) { + var zlibInfo = { + array: info.array, + offset: inOffset, + size: dwaHeader.dcCompressedSize + }; + var dcBuffer = new Uint16Array(uncompressZIP(zlibInfo).buffer); + inOffset.value += dwaHeader.dcCompressedSize; + } + if (dwaHeader.rleRawSize > 0) { + var compressed = info.array.slice(inOffset.value, inOffset.value + dwaHeader.rleCompressedSize); + var data = unzlibSync(compressed); + var rleBuffer = decodeRunLength(data.buffer); + inOffset.value += dwaHeader.rleCompressedSize; + } + var outBufferEnd = 0; + var rowOffsets = new Array(channelData.length); + for (var i = 0; i < rowOffsets.length; ++i) rowOffsets[i] = new Array(); + for (var y = 0; y < info.lines; ++y) for (var chan = 0; chan < channelData.length; ++chan) { + rowOffsets[chan].push(outBufferEnd); + outBufferEnd += channelData[chan].width * info.type * INT16_SIZE; + } + lossyDctDecode(cscSet, rowOffsets, channelData, acBuffer, dcBuffer, outBuffer); + for (var i = 0; i < channelData.length; ++i) { + var cd = channelData[i]; + if (cd.decoded) continue; + switch (cd.compression) { + case RLE: + var row = 0; + var rleOffset = 0; + for (var y = 0; y < info.lines; ++y) { + var rowOffsetBytes = rowOffsets[i][row]; + for (var x = 0; x < cd.width; ++x) { + for (var byte = 0; byte < INT16_SIZE * cd.type; ++byte) outBuffer[rowOffsetBytes++] = rleBuffer[rleOffset + byte * cd.width * cd.height]; + rleOffset++; + } + row++; + } + break; + case LOSSY_DCT: + default: throw "EXRLoader.parse: unsupported channel compression"; + } + } + return new DataView(outBuffer.buffer); + } + function parseNullTerminatedString(buffer2, offset2) { + var uintBuffer = new Uint8Array(buffer2); + var endOffset = 0; + while (uintBuffer[offset2.value + endOffset] != 0) endOffset += 1; + var stringValue = new TextDecoder().decode(uintBuffer.slice(offset2.value, offset2.value + endOffset)); + offset2.value = offset2.value + endOffset + 1; + return stringValue; + } + function parseFixedLengthString(buffer2, offset2, size) { + var stringValue = new TextDecoder().decode(new Uint8Array(buffer2).slice(offset2.value, offset2.value + size)); + offset2.value = offset2.value + size; + return stringValue; + } + function parseRational(dataView, offset2) { + return [parseInt32(dataView, offset2), parseUint32(dataView, offset2)]; + } + function parseTimecode(dataView, offset2) { + return [parseUint32(dataView, offset2), parseUint32(dataView, offset2)]; + } + function parseInt32(dataView, offset2) { + var Int32 = dataView.getInt32(offset2.value, true); + offset2.value = offset2.value + INT32_SIZE; + return Int32; + } + function parseUint32(dataView, offset2) { + var Uint32 = dataView.getUint32(offset2.value, true); + offset2.value = offset2.value + INT32_SIZE; + return Uint32; + } + function parseUint8Array(uInt8Array2, offset2) { + var Uint8 = uInt8Array2[offset2.value]; + offset2.value = offset2.value + INT8_SIZE; + return Uint8; + } + function parseUint8(dataView, offset2) { + var Uint8 = dataView.getUint8(offset2.value); + offset2.value = offset2.value + INT8_SIZE; + return Uint8; + } + const parseInt64 = function(dataView, offset2) { + let int; + if ("getBigInt64" in DataView.prototype) int = Number(dataView.getBigInt64(offset2.value, true)); + else int = dataView.getUint32(offset2.value + 4, true) + Number(dataView.getUint32(offset2.value, true) << 32); + offset2.value += ULONG_SIZE; + return int; + }; + function parseFloat32(dataView, offset2) { + var float = dataView.getFloat32(offset2.value, true); + offset2.value += FLOAT32_SIZE; + return float; + } + function decodeFloat32(dataView, offset2) { + return DataUtils.toHalfFloat(parseFloat32(dataView, offset2)); + } + function decodeFloat16(binary) { + var exponent = (binary & 31744) >> 10, fraction = binary & 1023; + return (binary >> 15 ? -1 : 1) * (exponent ? exponent === 31 ? fraction ? NaN : Infinity : Math.pow(2, exponent - 15) * (1 + fraction / 1024) : 6103515625e-14 * (fraction / 1024)); + } + function parseUint16(dataView, offset2) { + var Uint16 = dataView.getUint16(offset2.value, true); + offset2.value += INT16_SIZE; + return Uint16; + } + function parseFloat16(buffer2, offset2) { + return decodeFloat16(parseUint16(buffer2, offset2)); + } + function parseChlist(dataView, buffer2, offset2, size) { + var startOffset = offset2.value; + var channels = []; + while (offset2.value < startOffset + size - 1) { + var name = parseNullTerminatedString(buffer2, offset2); + var pixelType = parseInt32(dataView, offset2); + var pLinear = parseUint8(dataView, offset2); + offset2.value += 3; + var xSampling = parseInt32(dataView, offset2); + var ySampling = parseInt32(dataView, offset2); + channels.push({ + name, + pixelType, + pLinear, + xSampling, + ySampling + }); + } + offset2.value += 1; + return channels; + } + function parseChromaticities(dataView, offset2) { + return { + redX: parseFloat32(dataView, offset2), + redY: parseFloat32(dataView, offset2), + greenX: parseFloat32(dataView, offset2), + greenY: parseFloat32(dataView, offset2), + blueX: parseFloat32(dataView, offset2), + blueY: parseFloat32(dataView, offset2), + whiteX: parseFloat32(dataView, offset2), + whiteY: parseFloat32(dataView, offset2) + }; + } + function parseCompression(dataView, offset2) { + return [ + "NO_COMPRESSION", + "RLE_COMPRESSION", + "ZIPS_COMPRESSION", + "ZIP_COMPRESSION", + "PIZ_COMPRESSION", + "PXR24_COMPRESSION", + "B44_COMPRESSION", + "B44A_COMPRESSION", + "DWAA_COMPRESSION", + "DWAB_COMPRESSION" + ][parseUint8(dataView, offset2)]; + } + function parseBox2i(dataView, offset2) { + return { + xMin: parseUint32(dataView, offset2), + yMin: parseUint32(dataView, offset2), + xMax: parseUint32(dataView, offset2), + yMax: parseUint32(dataView, offset2) + }; + } + function parseLineOrder(dataView, offset2) { + return ["INCREASING_Y"][parseUint8(dataView, offset2)]; + } + function parseV2f(dataView, offset2) { + return [parseFloat32(dataView, offset2), parseFloat32(dataView, offset2)]; + } + function parseV3f(dataView, offset2) { + return [ + parseFloat32(dataView, offset2), + parseFloat32(dataView, offset2), + parseFloat32(dataView, offset2) + ]; + } + function parseValue(dataView, buffer2, offset2, type, size) { + if (type === "string" || type === "stringvector" || type === "iccProfile") return parseFixedLengthString(buffer2, offset2, size); + else if (type === "chlist") return parseChlist(dataView, buffer2, offset2, size); + else if (type === "chromaticities") return parseChromaticities(dataView, offset2); + else if (type === "compression") return parseCompression(dataView, offset2); + else if (type === "box2i") return parseBox2i(dataView, offset2); + else if (type === "lineOrder") return parseLineOrder(dataView, offset2); + else if (type === "float") return parseFloat32(dataView, offset2); + else if (type === "v2f") return parseV2f(dataView, offset2); + else if (type === "v3f") return parseV3f(dataView, offset2); + else if (type === "int") return parseInt32(dataView, offset2); + else if (type === "rational") return parseRational(dataView, offset2); + else if (type === "timecode") return parseTimecode(dataView, offset2); + else if (type === "preview") { + offset2.value += size; + return "skipped"; + } else { + offset2.value += size; + return; + } + } + function parseHeader(dataView, buffer2, offset2) { + const EXRHeader2 = {}; + if (dataView.getUint32(0, true) != 20000630) throw "THREE.EXRLoader: provided file doesn't appear to be in OpenEXR format."; + EXRHeader2.version = dataView.getUint8(4); + const spec = dataView.getUint8(5); + EXRHeader2.spec = { + singleTile: !!(spec & 2), + longName: !!(spec & 4), + deepFormat: !!(spec & 8), + multiPart: !!(spec & 16) + }; + offset2.value = 8; + var keepReading = true; + while (keepReading) { + var attributeName = parseNullTerminatedString(buffer2, offset2); + if (attributeName == 0) keepReading = false; + else { + var attributeType = parseNullTerminatedString(buffer2, offset2); + var attributeValue = parseValue(dataView, buffer2, offset2, attributeType, parseUint32(dataView, offset2)); + if (attributeValue === void 0) console.warn(`EXRLoader.parse: skipped unknown header attribute type '${attributeType}'.`); + else EXRHeader2[attributeName] = attributeValue; + } + } + if ((spec & -5) != 0) { + console.error("EXRHeader:", EXRHeader2); + throw "THREE.EXRLoader: provided file is currently unsupported."; + } + return EXRHeader2; + } + function setupDecoder(EXRHeader2, dataView, uInt8Array2, offset2, outputType) { + const EXRDecoder2 = { + size: 0, + viewer: dataView, + array: uInt8Array2, + offset: offset2, + width: EXRHeader2.dataWindow.xMax - EXRHeader2.dataWindow.xMin + 1, + height: EXRHeader2.dataWindow.yMax - EXRHeader2.dataWindow.yMin + 1, + channels: EXRHeader2.channels.length, + bytesPerLine: null, + lines: null, + inputSize: null, + type: EXRHeader2.channels[0].pixelType, + uncompress: null, + getter: null, + format: null, + [hasColorSpace ? "colorSpace" : "encoding"]: null + }; + switch (EXRHeader2.compression) { + case "NO_COMPRESSION": + EXRDecoder2.lines = 1; + EXRDecoder2.uncompress = uncompressRAW; + break; + case "RLE_COMPRESSION": + EXRDecoder2.lines = 1; + EXRDecoder2.uncompress = uncompressRLE; + break; + case "ZIPS_COMPRESSION": + EXRDecoder2.lines = 1; + EXRDecoder2.uncompress = uncompressZIP; + break; + case "ZIP_COMPRESSION": + EXRDecoder2.lines = 16; + EXRDecoder2.uncompress = uncompressZIP; + break; + case "PIZ_COMPRESSION": + EXRDecoder2.lines = 32; + EXRDecoder2.uncompress = uncompressPIZ; + break; + case "PXR24_COMPRESSION": + EXRDecoder2.lines = 16; + EXRDecoder2.uncompress = uncompressPXR; + break; + case "DWAA_COMPRESSION": + EXRDecoder2.lines = 32; + EXRDecoder2.uncompress = uncompressDWA; + break; + case "DWAB_COMPRESSION": + EXRDecoder2.lines = 256; + EXRDecoder2.uncompress = uncompressDWA; + break; + default: throw "EXRLoader.parse: " + EXRHeader2.compression + " is unsupported"; + } + EXRDecoder2.scanlineBlockSize = EXRDecoder2.lines; + if (EXRDecoder2.type == 1) switch (outputType) { + case FloatType: + EXRDecoder2.getter = parseFloat16; + EXRDecoder2.inputSize = INT16_SIZE; + break; + case HalfFloatType: + EXRDecoder2.getter = parseUint16; + EXRDecoder2.inputSize = INT16_SIZE; + break; + } + else if (EXRDecoder2.type == 2) switch (outputType) { + case FloatType: + EXRDecoder2.getter = parseFloat32; + EXRDecoder2.inputSize = FLOAT32_SIZE; + break; + case HalfFloatType: + EXRDecoder2.getter = decodeFloat32; + EXRDecoder2.inputSize = FLOAT32_SIZE; + } + else throw "EXRLoader.parse: unsupported pixelType " + EXRDecoder2.type + " for " + EXRHeader2.compression + "."; + EXRDecoder2.blockCount = (EXRHeader2.dataWindow.yMax + 1) / EXRDecoder2.scanlineBlockSize; + for (var i = 0; i < EXRDecoder2.blockCount; i++) parseInt64(dataView, offset2); + EXRDecoder2.outputChannels = EXRDecoder2.channels == 3 ? 4 : EXRDecoder2.channels; + const size = EXRDecoder2.width * EXRDecoder2.height * EXRDecoder2.outputChannels; + switch (outputType) { + case FloatType: + EXRDecoder2.byteArray = new Float32Array(size); + if (EXRDecoder2.channels < EXRDecoder2.outputChannels) EXRDecoder2.byteArray.fill(1, 0, size); + break; + case HalfFloatType: + EXRDecoder2.byteArray = new Uint16Array(size); + if (EXRDecoder2.channels < EXRDecoder2.outputChannels) EXRDecoder2.byteArray.fill(15360, 0, size); + break; + default: + console.error("THREE.EXRLoader: unsupported type: ", outputType); + break; + } + EXRDecoder2.bytesPerLine = EXRDecoder2.width * EXRDecoder2.inputSize * EXRDecoder2.channels; + if (EXRDecoder2.outputChannels == 4) EXRDecoder2.format = RGBAFormat; + else EXRDecoder2.format = RedFormat; + if (hasColorSpace) EXRDecoder2.colorSpace = "srgb-linear"; + else EXRDecoder2.encoding = 3e3; + return EXRDecoder2; + } + const bufferDataView = new DataView(buffer); + const uInt8Array = new Uint8Array(buffer); + const offset = { value: 0 }; + const EXRHeader = parseHeader(bufferDataView, buffer, offset); + const EXRDecoder = setupDecoder(EXRHeader, bufferDataView, uInt8Array, offset, this.type); + const tmpOffset = { value: 0 }; + const channelOffsets = { + R: 0, + G: 1, + B: 2, + A: 3, + Y: 0 + }; + for (let scanlineBlockIdx = 0; scanlineBlockIdx < EXRDecoder.height / EXRDecoder.scanlineBlockSize; scanlineBlockIdx++) { + const line = parseUint32(bufferDataView, offset); + EXRDecoder.size = parseUint32(bufferDataView, offset); + EXRDecoder.lines = line + EXRDecoder.scanlineBlockSize > EXRDecoder.height ? EXRDecoder.height - line : EXRDecoder.scanlineBlockSize; + const viewer = EXRDecoder.size < EXRDecoder.lines * EXRDecoder.bytesPerLine ? EXRDecoder.uncompress(EXRDecoder) : uncompressRAW(EXRDecoder); + offset.value += EXRDecoder.size; + for (let line_y = 0; line_y < EXRDecoder.scanlineBlockSize; line_y++) { + const true_y = line_y + scanlineBlockIdx * EXRDecoder.scanlineBlockSize; + if (true_y >= EXRDecoder.height) break; + for (let channelID = 0; channelID < EXRDecoder.channels; channelID++) { + const cOff = channelOffsets[EXRHeader.channels[channelID].name]; + for (let x = 0; x < EXRDecoder.width; x++) { + tmpOffset.value = (line_y * (EXRDecoder.channels * EXRDecoder.width) + channelID * EXRDecoder.width + x) * EXRDecoder.inputSize; + const outIndex = (EXRDecoder.height - 1 - true_y) * (EXRDecoder.width * EXRDecoder.outputChannels) + x * EXRDecoder.outputChannels + cOff; + EXRDecoder.byteArray[outIndex] = EXRDecoder.getter(viewer, tmpOffset); + } + } + } + } + return { + header: EXRHeader, + width: EXRDecoder.width, + height: EXRDecoder.height, + data: EXRDecoder.byteArray, + format: EXRDecoder.format, + [hasColorSpace ? "colorSpace" : "encoding"]: EXRDecoder[hasColorSpace ? "colorSpace" : "encoding"], + type: this.type + }; + } + setDataType(value) { + this.type = value; + return this; + } + load(url, onLoad, onProgress, onError) { + function onLoadCallback(texture, texData) { + if (hasColorSpace) texture.colorSpace = texData.colorSpace; + else texture.encoding = texData.encoding; + texture.minFilter = LinearFilter; + texture.magFilter = LinearFilter; + texture.generateMipmaps = false; + texture.flipY = false; + if (onLoad) onLoad(texture, texData); + } + return super.load(url, onLoadCallback, onProgress, onError); + } +}; +//#endregion +//#region node_modules/three-stdlib/loaders/SVGLoader.js +var COLOR_SPACE_SVG = "srgb"; +var SVGLoader = /* @__PURE__ */ (() => { + class SVGLoader2 extends Loader$1 { + constructor(manager) { + super(manager); + this.defaultDPI = 90; + this.defaultUnit = "px"; + } + load(url, onLoad, onProgress, onError) { + const scope = this; + const loader = new FileLoader(scope.manager); + loader.setPath(scope.path); + loader.setRequestHeader(scope.requestHeader); + loader.setWithCredentials(scope.withCredentials); + loader.load(url, function(text) { + try { + onLoad(scope.parse(text)); + } catch (e) { + if (onError) onError(e); + else console.error(e); + scope.manager.itemError(url); + } + }, onProgress, onError); + } + parse(text) { + const scope = this; + function parseNode(node, style) { + if (node.nodeType !== 1) return; + const transform = getNodeTransform(node); + let isDefsNode = false; + let path = null; + switch (node.nodeName) { + case "svg": + style = parseStyle(node, style); + break; + case "style": + parseCSSStylesheet(node); + break; + case "g": + style = parseStyle(node, style); + break; + case "path": + style = parseStyle(node, style); + if (node.hasAttribute("d")) path = parsePathNode(node); + break; + case "rect": + style = parseStyle(node, style); + path = parseRectNode(node); + break; + case "polygon": + style = parseStyle(node, style); + path = parsePolygonNode(node); + break; + case "polyline": + style = parseStyle(node, style); + path = parsePolylineNode(node); + break; + case "circle": + style = parseStyle(node, style); + path = parseCircleNode(node); + break; + case "ellipse": + style = parseStyle(node, style); + path = parseEllipseNode(node); + break; + case "line": + style = parseStyle(node, style); + path = parseLineNode(node); + break; + case "defs": + isDefsNode = true; + break; + case "use": + style = parseStyle(node, style); + const usedNodeId = (node.getAttributeNS("http://www.w3.org/1999/xlink", "href") || "").substring(1); + const usedNode = node.viewportElement.getElementById(usedNodeId); + if (usedNode) parseNode(usedNode, style); + else console.warn("SVGLoader: 'use node' references non-existent node id: " + usedNodeId); + break; + } + if (path) { + if (style.fill !== void 0 && style.fill !== "none") path.color.setStyle(style.fill, COLOR_SPACE_SVG); + transformPath(path, currentTransform); + paths.push(path); + path.userData = { + node, + style + }; + } + const childNodes = node.childNodes; + for (let i = 0; i < childNodes.length; i++) { + const node2 = childNodes[i]; + if (isDefsNode && node2.nodeName !== "style" && node2.nodeName !== "defs") continue; + parseNode(node2, style); + } + if (transform) { + transformStack.pop(); + if (transformStack.length > 0) currentTransform.copy(transformStack[transformStack.length - 1]); + else currentTransform.identity(); + } + } + function parsePathNode(node) { + const path = new ShapePath(); + const point = new Vector2(); + const control = new Vector2(); + const firstPoint = new Vector2(); + let isFirstPoint = true; + let doSetFirstPoint = false; + const d = node.getAttribute("d"); + if (d === "" || d === "none") return null; + const commands = d.match(/[a-df-z][^a-df-z]*/gi); + for (let i = 0, l = commands.length; i < l; i++) { + const command = commands[i]; + const type = command.charAt(0); + const data2 = command.slice(1).trim(); + if (isFirstPoint === true) { + doSetFirstPoint = true; + isFirstPoint = false; + } + let numbers; + switch (type) { + case "M": + numbers = parseFloats(data2); + for (let j = 0, jl = numbers.length; j < jl; j += 2) { + point.x = numbers[j + 0]; + point.y = numbers[j + 1]; + control.x = point.x; + control.y = point.y; + if (j === 0) path.moveTo(point.x, point.y); + else path.lineTo(point.x, point.y); + if (j === 0) firstPoint.copy(point); + } + break; + case "H": + numbers = parseFloats(data2); + for (let j = 0, jl = numbers.length; j < jl; j++) { + point.x = numbers[j]; + control.x = point.x; + control.y = point.y; + path.lineTo(point.x, point.y); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "V": + numbers = parseFloats(data2); + for (let j = 0, jl = numbers.length; j < jl; j++) { + point.y = numbers[j]; + control.x = point.x; + control.y = point.y; + path.lineTo(point.x, point.y); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "L": + numbers = parseFloats(data2); + for (let j = 0, jl = numbers.length; j < jl; j += 2) { + point.x = numbers[j + 0]; + point.y = numbers[j + 1]; + control.x = point.x; + control.y = point.y; + path.lineTo(point.x, point.y); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "C": + numbers = parseFloats(data2); + for (let j = 0, jl = numbers.length; j < jl; j += 6) { + path.bezierCurveTo(numbers[j + 0], numbers[j + 1], numbers[j + 2], numbers[j + 3], numbers[j + 4], numbers[j + 5]); + control.x = numbers[j + 2]; + control.y = numbers[j + 3]; + point.x = numbers[j + 4]; + point.y = numbers[j + 5]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "S": + numbers = parseFloats(data2); + for (let j = 0, jl = numbers.length; j < jl; j += 4) { + path.bezierCurveTo(getReflection(point.x, control.x), getReflection(point.y, control.y), numbers[j + 0], numbers[j + 1], numbers[j + 2], numbers[j + 3]); + control.x = numbers[j + 0]; + control.y = numbers[j + 1]; + point.x = numbers[j + 2]; + point.y = numbers[j + 3]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "Q": + numbers = parseFloats(data2); + for (let j = 0, jl = numbers.length; j < jl; j += 4) { + path.quadraticCurveTo(numbers[j + 0], numbers[j + 1], numbers[j + 2], numbers[j + 3]); + control.x = numbers[j + 0]; + control.y = numbers[j + 1]; + point.x = numbers[j + 2]; + point.y = numbers[j + 3]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "T": + numbers = parseFloats(data2); + for (let j = 0, jl = numbers.length; j < jl; j += 2) { + const rx = getReflection(point.x, control.x); + const ry = getReflection(point.y, control.y); + path.quadraticCurveTo(rx, ry, numbers[j + 0], numbers[j + 1]); + control.x = rx; + control.y = ry; + point.x = numbers[j + 0]; + point.y = numbers[j + 1]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "A": + numbers = parseFloats(data2, [3, 4], 7); + for (let j = 0, jl = numbers.length; j < jl; j += 7) { + if (numbers[j + 5] == point.x && numbers[j + 6] == point.y) continue; + const start = point.clone(); + point.x = numbers[j + 5]; + point.y = numbers[j + 6]; + control.x = point.x; + control.y = point.y; + parseArcCommand(path, numbers[j], numbers[j + 1], numbers[j + 2], numbers[j + 3], numbers[j + 4], start, point); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "m": + numbers = parseFloats(data2); + for (let j = 0, jl = numbers.length; j < jl; j += 2) { + point.x += numbers[j + 0]; + point.y += numbers[j + 1]; + control.x = point.x; + control.y = point.y; + if (j === 0) path.moveTo(point.x, point.y); + else path.lineTo(point.x, point.y); + if (j === 0) firstPoint.copy(point); + } + break; + case "h": + numbers = parseFloats(data2); + for (let j = 0, jl = numbers.length; j < jl; j++) { + point.x += numbers[j]; + control.x = point.x; + control.y = point.y; + path.lineTo(point.x, point.y); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "v": + numbers = parseFloats(data2); + for (let j = 0, jl = numbers.length; j < jl; j++) { + point.y += numbers[j]; + control.x = point.x; + control.y = point.y; + path.lineTo(point.x, point.y); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "l": + numbers = parseFloats(data2); + for (let j = 0, jl = numbers.length; j < jl; j += 2) { + point.x += numbers[j + 0]; + point.y += numbers[j + 1]; + control.x = point.x; + control.y = point.y; + path.lineTo(point.x, point.y); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "c": + numbers = parseFloats(data2); + for (let j = 0, jl = numbers.length; j < jl; j += 6) { + path.bezierCurveTo(point.x + numbers[j + 0], point.y + numbers[j + 1], point.x + numbers[j + 2], point.y + numbers[j + 3], point.x + numbers[j + 4], point.y + numbers[j + 5]); + control.x = point.x + numbers[j + 2]; + control.y = point.y + numbers[j + 3]; + point.x += numbers[j + 4]; + point.y += numbers[j + 5]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "s": + numbers = parseFloats(data2); + for (let j = 0, jl = numbers.length; j < jl; j += 4) { + path.bezierCurveTo(getReflection(point.x, control.x), getReflection(point.y, control.y), point.x + numbers[j + 0], point.y + numbers[j + 1], point.x + numbers[j + 2], point.y + numbers[j + 3]); + control.x = point.x + numbers[j + 0]; + control.y = point.y + numbers[j + 1]; + point.x += numbers[j + 2]; + point.y += numbers[j + 3]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "q": + numbers = parseFloats(data2); + for (let j = 0, jl = numbers.length; j < jl; j += 4) { + path.quadraticCurveTo(point.x + numbers[j + 0], point.y + numbers[j + 1], point.x + numbers[j + 2], point.y + numbers[j + 3]); + control.x = point.x + numbers[j + 0]; + control.y = point.y + numbers[j + 1]; + point.x += numbers[j + 2]; + point.y += numbers[j + 3]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "t": + numbers = parseFloats(data2); + for (let j = 0, jl = numbers.length; j < jl; j += 2) { + const rx = getReflection(point.x, control.x); + const ry = getReflection(point.y, control.y); + path.quadraticCurveTo(rx, ry, point.x + numbers[j + 0], point.y + numbers[j + 1]); + control.x = rx; + control.y = ry; + point.x = point.x + numbers[j + 0]; + point.y = point.y + numbers[j + 1]; + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "a": + numbers = parseFloats(data2, [3, 4], 7); + for (let j = 0, jl = numbers.length; j < jl; j += 7) { + if (numbers[j + 5] == 0 && numbers[j + 6] == 0) continue; + const start = point.clone(); + point.x += numbers[j + 5]; + point.y += numbers[j + 6]; + control.x = point.x; + control.y = point.y; + parseArcCommand(path, numbers[j], numbers[j + 1], numbers[j + 2], numbers[j + 3], numbers[j + 4], start, point); + if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); + } + break; + case "Z": + case "z": + path.currentPath.autoClose = true; + if (path.currentPath.curves.length > 0) { + point.copy(firstPoint); + path.currentPath.currentPoint.copy(point); + isFirstPoint = true; + } + break; + default: console.warn(command); + } + doSetFirstPoint = false; + } + return path; + } + function parseCSSStylesheet(node) { + if (!node.sheet || !node.sheet.cssRules || !node.sheet.cssRules.length) return; + for (let i = 0; i < node.sheet.cssRules.length; i++) { + const stylesheet = node.sheet.cssRules[i]; + if (stylesheet.type !== 1) continue; + const selectorList = stylesheet.selectorText.split(/,/gm).filter(Boolean).map((i2) => i2.trim()); + for (let j = 0; j < selectorList.length; j++) { + const definitions = Object.fromEntries(Object.entries(stylesheet.style).filter(([, v]) => v !== "")); + stylesheets[selectorList[j]] = Object.assign(stylesheets[selectorList[j]] || {}, definitions); + } + } + } + function parseArcCommand(path, rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, start, end) { + if (rx == 0 || ry == 0) { + path.lineTo(end.x, end.y); + return; + } + x_axis_rotation = x_axis_rotation * Math.PI / 180; + rx = Math.abs(rx); + ry = Math.abs(ry); + const dx2 = (start.x - end.x) / 2; + const dy2 = (start.y - end.y) / 2; + const x1p = Math.cos(x_axis_rotation) * dx2 + Math.sin(x_axis_rotation) * dy2; + const y1p = -Math.sin(x_axis_rotation) * dx2 + Math.cos(x_axis_rotation) * dy2; + let rxs = rx * rx; + let rys = ry * ry; + const x1ps = x1p * x1p; + const y1ps = y1p * y1p; + const cr = x1ps / rxs + y1ps / rys; + if (cr > 1) { + const s = Math.sqrt(cr); + rx = s * rx; + ry = s * ry; + rxs = rx * rx; + rys = ry * ry; + } + const dq = rxs * y1ps + rys * x1ps; + const pq = (rxs * rys - dq) / dq; + let q = Math.sqrt(Math.max(0, pq)); + if (large_arc_flag === sweep_flag) q = -q; + const cxp = q * rx * y1p / ry; + const cyp = -q * ry * x1p / rx; + const cx = Math.cos(x_axis_rotation) * cxp - Math.sin(x_axis_rotation) * cyp + (start.x + end.x) / 2; + const cy = Math.sin(x_axis_rotation) * cxp + Math.cos(x_axis_rotation) * cyp + (start.y + end.y) / 2; + const theta = svgAngle(1, 0, (x1p - cxp) / rx, (y1p - cyp) / ry); + const delta = svgAngle((x1p - cxp) / rx, (y1p - cyp) / ry, (-x1p - cxp) / rx, (-y1p - cyp) / ry) % (Math.PI * 2); + path.currentPath.absellipse(cx, cy, rx, ry, theta, theta + delta, sweep_flag === 0, x_axis_rotation); + } + function svgAngle(ux, uy, vx, vy) { + const dot = ux * vx + uy * vy; + const len = Math.sqrt(ux * ux + uy * uy) * Math.sqrt(vx * vx + vy * vy); + let ang = Math.acos(Math.max(-1, Math.min(1, dot / len))); + if (ux * vy - uy * vx < 0) ang = -ang; + return ang; + } + function parseRectNode(node) { + const x = parseFloatWithUnits(node.getAttribute("x") || 0); + const y = parseFloatWithUnits(node.getAttribute("y") || 0); + const rx = parseFloatWithUnits(node.getAttribute("rx") || node.getAttribute("ry") || 0); + const ry = parseFloatWithUnits(node.getAttribute("ry") || node.getAttribute("rx") || 0); + const w = parseFloatWithUnits(node.getAttribute("width")); + const h = parseFloatWithUnits(node.getAttribute("height")); + const bci = .448084975506; + const path = new ShapePath(); + path.moveTo(x + rx, y); + path.lineTo(x + w - rx, y); + if (rx !== 0 || ry !== 0) path.bezierCurveTo(x + w - rx * bci, y, x + w, y + ry * bci, x + w, y + ry); + path.lineTo(x + w, y + h - ry); + if (rx !== 0 || ry !== 0) path.bezierCurveTo(x + w, y + h - ry * bci, x + w - rx * bci, y + h, x + w - rx, y + h); + path.lineTo(x + rx, y + h); + if (rx !== 0 || ry !== 0) path.bezierCurveTo(x + rx * bci, y + h, x, y + h - ry * bci, x, y + h - ry); + path.lineTo(x, y + ry); + if (rx !== 0 || ry !== 0) path.bezierCurveTo(x, y + ry * bci, x + rx * bci, y, x + rx, y); + return path; + } + function parsePolygonNode(node) { + function iterator(match, a, b) { + const x = parseFloatWithUnits(a); + const y = parseFloatWithUnits(b); + if (index === 0) path.moveTo(x, y); + else path.lineTo(x, y); + index++; + } + const regex = /([+-]?\d*\.?\d+(?:e[+-]?\d+)?)(?:,|\s)([+-]?\d*\.?\d+(?:e[+-]?\d+)?)/g; + const path = new ShapePath(); + let index = 0; + node.getAttribute("points").replace(regex, iterator); + path.currentPath.autoClose = true; + return path; + } + function parsePolylineNode(node) { + function iterator(match, a, b) { + const x = parseFloatWithUnits(a); + const y = parseFloatWithUnits(b); + if (index === 0) path.moveTo(x, y); + else path.lineTo(x, y); + index++; + } + const regex = /([+-]?\d*\.?\d+(?:e[+-]?\d+)?)(?:,|\s)([+-]?\d*\.?\d+(?:e[+-]?\d+)?)/g; + const path = new ShapePath(); + let index = 0; + node.getAttribute("points").replace(regex, iterator); + path.currentPath.autoClose = false; + return path; + } + function parseCircleNode(node) { + const x = parseFloatWithUnits(node.getAttribute("cx") || 0); + const y = parseFloatWithUnits(node.getAttribute("cy") || 0); + const r = parseFloatWithUnits(node.getAttribute("r") || 0); + const subpath = new Path(); + subpath.absarc(x, y, r, 0, Math.PI * 2); + const path = new ShapePath(); + path.subPaths.push(subpath); + return path; + } + function parseEllipseNode(node) { + const x = parseFloatWithUnits(node.getAttribute("cx") || 0); + const y = parseFloatWithUnits(node.getAttribute("cy") || 0); + const rx = parseFloatWithUnits(node.getAttribute("rx") || 0); + const ry = parseFloatWithUnits(node.getAttribute("ry") || 0); + const subpath = new Path(); + subpath.absellipse(x, y, rx, ry, 0, Math.PI * 2); + const path = new ShapePath(); + path.subPaths.push(subpath); + return path; + } + function parseLineNode(node) { + const x1 = parseFloatWithUnits(node.getAttribute("x1") || 0); + const y1 = parseFloatWithUnits(node.getAttribute("y1") || 0); + const x2 = parseFloatWithUnits(node.getAttribute("x2") || 0); + const y2 = parseFloatWithUnits(node.getAttribute("y2") || 0); + const path = new ShapePath(); + path.moveTo(x1, y1); + path.lineTo(x2, y2); + path.currentPath.autoClose = false; + return path; + } + function parseStyle(node, style) { + style = Object.assign({}, style); + let stylesheetStyles = {}; + if (node.hasAttribute("class")) { + const classSelectors = node.getAttribute("class").split(/\s/).filter(Boolean).map((i) => i.trim()); + for (let i = 0; i < classSelectors.length; i++) stylesheetStyles = Object.assign(stylesheetStyles, stylesheets["." + classSelectors[i]]); + } + if (node.hasAttribute("id")) stylesheetStyles = Object.assign(stylesheetStyles, stylesheets["#" + node.getAttribute("id")]); + function addStyle(svgName, jsName, adjustFunction) { + if (adjustFunction === void 0) adjustFunction = function copy(v) { + if (v.startsWith("url")) console.warn("SVGLoader: url access in attributes is not implemented."); + return v; + }; + if (node.hasAttribute(svgName)) style[jsName] = adjustFunction(node.getAttribute(svgName)); + if (stylesheetStyles[svgName]) style[jsName] = adjustFunction(stylesheetStyles[svgName]); + if (node.style && node.style[svgName] !== "") style[jsName] = adjustFunction(node.style[svgName]); + } + function clamp(v) { + return Math.max(0, Math.min(1, parseFloatWithUnits(v))); + } + function positive(v) { + return Math.max(0, parseFloatWithUnits(v)); + } + addStyle("fill", "fill"); + addStyle("fill-opacity", "fillOpacity", clamp); + addStyle("fill-rule", "fillRule"); + addStyle("opacity", "opacity", clamp); + addStyle("stroke", "stroke"); + addStyle("stroke-opacity", "strokeOpacity", clamp); + addStyle("stroke-width", "strokeWidth", positive); + addStyle("stroke-linejoin", "strokeLineJoin"); + addStyle("stroke-linecap", "strokeLineCap"); + addStyle("stroke-miterlimit", "strokeMiterLimit", positive); + addStyle("visibility", "visibility"); + return style; + } + function getReflection(a, b) { + return a - (b - a); + } + function parseFloats(input, flags, stride) { + if (typeof input !== "string") throw new TypeError("Invalid input: " + typeof input); + const RE = { + SEPARATOR: /[ \t\r\n\,.\-+]/, + WHITESPACE: /[ \t\r\n]/, + DIGIT: /[\d]/, + SIGN: /[-+]/, + POINT: /\./, + COMMA: /,/, + EXP: /e/i, + FLAGS: /[01]/ + }; + const SEP = 0; + const INT = 1; + const FLOAT = 2; + const EXP = 3; + let state = SEP; + let seenComma = true; + let number = "", exponent = ""; + const result = []; + function throwSyntaxError(current2, i, partial) { + const error = /* @__PURE__ */ new SyntaxError("Unexpected character \"" + current2 + "\" at index " + i + "."); + error.partial = partial; + throw error; + } + function newNumber() { + if (number !== "") if (exponent === "") result.push(Number(number)); + else result.push(Number(number) * Math.pow(10, Number(exponent))); + number = ""; + exponent = ""; + } + let current; + const length = input.length; + for (let i = 0; i < length; i++) { + current = input[i]; + if (Array.isArray(flags) && flags.includes(result.length % stride) && RE.FLAGS.test(current)) { + state = INT; + number = current; + newNumber(); + continue; + } + if (state === SEP) { + if (RE.WHITESPACE.test(current)) continue; + if (RE.DIGIT.test(current) || RE.SIGN.test(current)) { + state = INT; + number = current; + continue; + } + if (RE.POINT.test(current)) { + state = FLOAT; + number = current; + continue; + } + if (RE.COMMA.test(current)) { + if (seenComma) throwSyntaxError(current, i, result); + seenComma = true; + } + } + if (state === INT) { + if (RE.DIGIT.test(current)) { + number += current; + continue; + } + if (RE.POINT.test(current)) { + number += current; + state = FLOAT; + continue; + } + if (RE.EXP.test(current)) { + state = EXP; + continue; + } + if (RE.SIGN.test(current) && number.length === 1 && RE.SIGN.test(number[0])) throwSyntaxError(current, i, result); + } + if (state === FLOAT) { + if (RE.DIGIT.test(current)) { + number += current; + continue; + } + if (RE.EXP.test(current)) { + state = EXP; + continue; + } + if (RE.POINT.test(current) && number[number.length - 1] === ".") throwSyntaxError(current, i, result); + } + if (state === EXP) { + if (RE.DIGIT.test(current)) { + exponent += current; + continue; + } + if (RE.SIGN.test(current)) { + if (exponent === "") { + exponent += current; + continue; + } + if (exponent.length === 1 && RE.SIGN.test(exponent)) throwSyntaxError(current, i, result); + } + } + if (RE.WHITESPACE.test(current)) { + newNumber(); + state = SEP; + seenComma = false; + } else if (RE.COMMA.test(current)) { + newNumber(); + state = SEP; + seenComma = true; + } else if (RE.SIGN.test(current)) { + newNumber(); + state = INT; + number = current; + } else if (RE.POINT.test(current)) { + newNumber(); + state = FLOAT; + number = current; + } else throwSyntaxError(current, i, result); + } + newNumber(); + return result; + } + const units = [ + "mm", + "cm", + "in", + "pt", + "pc", + "px" + ]; + const unitConversion = { + mm: { + mm: 1, + cm: .1, + in: 1 / 25.4, + pt: 72 / 25.4, + pc: 6 / 25.4, + px: -1 + }, + cm: { + mm: 10, + cm: 1, + in: 1 / 2.54, + pt: 72 / 2.54, + pc: 6 / 2.54, + px: -1 + }, + in: { + mm: 25.4, + cm: 2.54, + in: 1, + pt: 72, + pc: 6, + px: -1 + }, + pt: { + mm: 25.4 / 72, + cm: 2.54 / 72, + in: 1 / 72, + pt: 1, + pc: 6 / 72, + px: -1 + }, + pc: { + mm: 25.4 / 6, + cm: 2.54 / 6, + in: 1 / 6, + pt: 72 / 6, + pc: 1, + px: -1 + }, + px: { px: 1 } + }; + function parseFloatWithUnits(string) { + let theUnit = "px"; + if (typeof string === "string" || string instanceof String) for (let i = 0, n = units.length; i < n; i++) { + const u = units[i]; + if (string.endsWith(u)) { + theUnit = u; + string = string.substring(0, string.length - u.length); + break; + } + } + let scale = void 0; + if (theUnit === "px" && scope.defaultUnit !== "px") scale = unitConversion["in"][scope.defaultUnit] / scope.defaultDPI; + else { + scale = unitConversion[theUnit][scope.defaultUnit]; + if (scale < 0) scale = unitConversion[theUnit]["in"] * scope.defaultDPI; + } + return scale * parseFloat(string); + } + function getNodeTransform(node) { + if (!(node.hasAttribute("transform") || node.nodeName === "use" && (node.hasAttribute("x") || node.hasAttribute("y")))) return null; + const transform = parseNodeTransform(node); + if (transformStack.length > 0) transform.premultiply(transformStack[transformStack.length - 1]); + currentTransform.copy(transform); + transformStack.push(transform); + return transform; + } + function parseNodeTransform(node) { + const transform = new Matrix3(); + const currentTransform2 = tempTransform0; + if (node.nodeName === "use" && (node.hasAttribute("x") || node.hasAttribute("y"))) { + const tx = parseFloatWithUnits(node.getAttribute("x")); + const ty = parseFloatWithUnits(node.getAttribute("y")); + transform.translate(tx, ty); + } + if (node.hasAttribute("transform")) { + const transformsTexts = node.getAttribute("transform").split(")"); + for (let tIndex = transformsTexts.length - 1; tIndex >= 0; tIndex--) { + const transformText = transformsTexts[tIndex].trim(); + if (transformText === "") continue; + const openParPos = transformText.indexOf("("); + const closeParPos = transformText.length; + if (openParPos > 0 && openParPos < closeParPos) { + const transformType = transformText.slice(0, openParPos); + const array = parseFloats(transformText.slice(openParPos + 1)); + currentTransform2.identity(); + switch (transformType) { + case "translate": + if (array.length >= 1) { + const tx = array[0]; + let ty = 0; + if (array.length >= 2) ty = array[1]; + currentTransform2.translate(tx, ty); + } + break; + case "rotate": + if (array.length >= 1) { + let angle = 0; + let cx = 0; + let cy = 0; + angle = array[0] * Math.PI / 180; + if (array.length >= 3) { + cx = array[1]; + cy = array[2]; + } + tempTransform1.makeTranslation(-cx, -cy); + tempTransform2.makeRotation(angle); + tempTransform3.multiplyMatrices(tempTransform2, tempTransform1); + tempTransform1.makeTranslation(cx, cy); + currentTransform2.multiplyMatrices(tempTransform1, tempTransform3); + } + break; + case "scale": + if (array.length >= 1) { + const scaleX = array[0]; + let scaleY = scaleX; + if (array.length >= 2) scaleY = array[1]; + currentTransform2.scale(scaleX, scaleY); + } + break; + case "skewX": + if (array.length === 1) currentTransform2.set(1, Math.tan(array[0] * Math.PI / 180), 0, 0, 1, 0, 0, 0, 1); + break; + case "skewY": + if (array.length === 1) currentTransform2.set(1, 0, 0, Math.tan(array[0] * Math.PI / 180), 1, 0, 0, 0, 1); + break; + case "matrix": + if (array.length === 6) currentTransform2.set(array[0], array[2], array[4], array[1], array[3], array[5], 0, 0, 1); + break; + } + } + transform.premultiply(currentTransform2); + } + } + return transform; + } + function transformPath(path, m) { + function transfVec2(v2) { + tempV3.set(v2.x, v2.y, 1).applyMatrix3(m); + v2.set(tempV3.x, tempV3.y); + } + function transfEllipseGeneric(curve) { + const a = curve.xRadius; + const b = curve.yRadius; + const cosTheta = Math.cos(curve.aRotation); + const sinTheta = Math.sin(curve.aRotation); + const v1 = new Vector3(a * cosTheta, a * sinTheta, 0); + const v2 = new Vector3(-b * sinTheta, b * cosTheta, 0); + const f1 = v1.applyMatrix3(m); + const f2 = v2.applyMatrix3(m); + const mF = tempTransform0.set(f1.x, f2.x, 0, f1.y, f2.y, 0, 0, 0, 1); + const mFInv = tempTransform1.copy(mF).invert(); + const mQe = tempTransform2.copy(mFInv).transpose().multiply(mFInv).elements; + const ed = eigenDecomposition(mQe[0], mQe[1], mQe[4]); + const rt1sqrt = Math.sqrt(ed.rt1); + const rt2sqrt = Math.sqrt(ed.rt2); + curve.xRadius = 1 / rt1sqrt; + curve.yRadius = 1 / rt2sqrt; + curve.aRotation = Math.atan2(ed.sn, ed.cs); + if (!((curve.aEndAngle - curve.aStartAngle) % (2 * Math.PI) < Number.EPSILON)) { + const mDsqrt = tempTransform1.set(rt1sqrt, 0, 0, 0, rt2sqrt, 0, 0, 0, 1); + const mRT = tempTransform2.set(ed.cs, ed.sn, 0, -ed.sn, ed.cs, 0, 0, 0, 1); + const mDRF = mDsqrt.multiply(mRT).multiply(mF); + const transformAngle = (phi) => { + const { x: cosR, y: sinR } = new Vector3(Math.cos(phi), Math.sin(phi), 0).applyMatrix3(mDRF); + return Math.atan2(sinR, cosR); + }; + curve.aStartAngle = transformAngle(curve.aStartAngle); + curve.aEndAngle = transformAngle(curve.aEndAngle); + if (isTransformFlipped(m)) curve.aClockwise = !curve.aClockwise; + } + } + function transfEllipseNoSkew(curve) { + const sx = getTransformScaleX(m); + const sy = getTransformScaleY(m); + curve.xRadius *= sx; + curve.yRadius *= sy; + const theta = sx > Number.EPSILON ? Math.atan2(m.elements[1], m.elements[0]) : Math.atan2(-m.elements[3], m.elements[4]); + curve.aRotation += theta; + if (isTransformFlipped(m)) { + curve.aStartAngle *= -1; + curve.aEndAngle *= -1; + curve.aClockwise = !curve.aClockwise; + } + } + const subPaths = path.subPaths; + for (let i = 0, n = subPaths.length; i < n; i++) { + const curves = subPaths[i].curves; + for (let j = 0; j < curves.length; j++) { + const curve = curves[j]; + if (curve.isLineCurve) { + transfVec2(curve.v1); + transfVec2(curve.v2); + } else if (curve.isCubicBezierCurve) { + transfVec2(curve.v0); + transfVec2(curve.v1); + transfVec2(curve.v2); + transfVec2(curve.v3); + } else if (curve.isQuadraticBezierCurve) { + transfVec2(curve.v0); + transfVec2(curve.v1); + transfVec2(curve.v2); + } else if (curve.isEllipseCurve) { + tempV2.set(curve.aX, curve.aY); + transfVec2(tempV2); + curve.aX = tempV2.x; + curve.aY = tempV2.y; + if (isTransformSkewed(m)) transfEllipseGeneric(curve); + else transfEllipseNoSkew(curve); + } + } + } + } + function isTransformFlipped(m) { + const te = m.elements; + return te[0] * te[4] - te[1] * te[3] < 0; + } + function isTransformSkewed(m) { + const te = m.elements; + const basisDot = te[0] * te[3] + te[1] * te[4]; + if (basisDot === 0) return false; + const sx = getTransformScaleX(m); + const sy = getTransformScaleY(m); + return Math.abs(basisDot / (sx * sy)) > Number.EPSILON; + } + function getTransformScaleX(m) { + const te = m.elements; + return Math.sqrt(te[0] * te[0] + te[1] * te[1]); + } + function getTransformScaleY(m) { + const te = m.elements; + return Math.sqrt(te[3] * te[3] + te[4] * te[4]); + } + function eigenDecomposition(A, B, C) { + let rt1, rt2, cs, sn, t; + const sm = A + C; + const df = A - C; + const rt = Math.sqrt(df * df + 4 * B * B); + if (sm > 0) { + rt1 = .5 * (sm + rt); + t = 1 / rt1; + rt2 = A * t * C - B * t * B; + } else if (sm < 0) rt2 = .5 * (sm - rt); + else { + rt1 = .5 * rt; + rt2 = -.5 * rt; + } + if (df > 0) cs = df + rt; + else cs = df - rt; + if (Math.abs(cs) > 2 * Math.abs(B)) { + t = -2 * B / cs; + sn = 1 / Math.sqrt(1 + t * t); + cs = t * sn; + } else if (Math.abs(B) === 0) { + cs = 1; + sn = 0; + } else { + t = -.5 * cs / B; + cs = 1 / Math.sqrt(1 + t * t); + sn = t * cs; + } + if (df > 0) { + t = cs; + cs = -sn; + sn = t; + } + return { + rt1, + rt2, + cs, + sn + }; + } + const paths = []; + const stylesheets = {}; + const transformStack = []; + const tempTransform0 = new Matrix3(); + const tempTransform1 = new Matrix3(); + const tempTransform2 = new Matrix3(); + const tempTransform3 = new Matrix3(); + const tempV2 = new Vector2(); + const tempV3 = new Vector3(); + const currentTransform = new Matrix3(); + const xml = new DOMParser().parseFromString(text, "image/svg+xml"); + parseNode(xml.documentElement, { + fill: "#000", + fillOpacity: 1, + strokeOpacity: 1, + strokeWidth: 1, + strokeLineJoin: "miter", + strokeLineCap: "butt", + strokeMiterLimit: 4 + }); + return { + paths, + xml: xml.documentElement + }; + } + static createShapes(shapePath) { + const BIGNUMBER = 999999999; + const IntersectionLocationType = { + ORIGIN: 0, + DESTINATION: 1, + BETWEEN: 2, + LEFT: 3, + RIGHT: 4, + BEHIND: 5, + BEYOND: 6 + }; + const classifyResult = { + loc: IntersectionLocationType.ORIGIN, + t: 0 + }; + function findEdgeIntersection(a0, a1, b0, b1) { + const x1 = a0.x; + const x2 = a1.x; + const x3 = b0.x; + const x4 = b1.x; + const y1 = a0.y; + const y2 = a1.y; + const y3 = b0.y; + const y4 = b1.y; + const nom1 = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3); + const nom2 = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3); + const denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1); + const t1 = nom1 / denom; + const t2 = nom2 / denom; + if (denom === 0 && nom1 !== 0 || t1 <= 0 || t1 >= 1 || t2 < 0 || t2 > 1) return null; + else if (nom1 === 0 && denom === 0) { + for (let i = 0; i < 2; i++) { + classifyPoint(i === 0 ? b0 : b1, a0, a1); + if (classifyResult.loc == IntersectionLocationType.ORIGIN) { + const point = i === 0 ? b0 : b1; + return { + x: point.x, + y: point.y, + t: classifyResult.t + }; + } else if (classifyResult.loc == IntersectionLocationType.BETWEEN) return { + x: +(x1 + classifyResult.t * (x2 - x1)).toPrecision(10), + y: +(y1 + classifyResult.t * (y2 - y1)).toPrecision(10), + t: classifyResult.t + }; + } + return null; + } else { + for (let i = 0; i < 2; i++) { + classifyPoint(i === 0 ? b0 : b1, a0, a1); + if (classifyResult.loc == IntersectionLocationType.ORIGIN) { + const point = i === 0 ? b0 : b1; + return { + x: point.x, + y: point.y, + t: classifyResult.t + }; + } + } + return { + x: +(x1 + t1 * (x2 - x1)).toPrecision(10), + y: +(y1 + t1 * (y2 - y1)).toPrecision(10), + t: t1 + }; + } + } + function classifyPoint(p, edgeStart, edgeEnd) { + const ax = edgeEnd.x - edgeStart.x; + const ay = edgeEnd.y - edgeStart.y; + const bx = p.x - edgeStart.x; + const by = p.y - edgeStart.y; + const sa = ax * by - bx * ay; + if (p.x === edgeStart.x && p.y === edgeStart.y) { + classifyResult.loc = IntersectionLocationType.ORIGIN; + classifyResult.t = 0; + return; + } + if (p.x === edgeEnd.x && p.y === edgeEnd.y) { + classifyResult.loc = IntersectionLocationType.DESTINATION; + classifyResult.t = 1; + return; + } + if (sa < -Number.EPSILON) { + classifyResult.loc = IntersectionLocationType.LEFT; + return; + } + if (sa > Number.EPSILON) { + classifyResult.loc = IntersectionLocationType.RIGHT; + return; + } + if (ax * bx < 0 || ay * by < 0) { + classifyResult.loc = IntersectionLocationType.BEHIND; + return; + } + if (Math.sqrt(ax * ax + ay * ay) < Math.sqrt(bx * bx + by * by)) { + classifyResult.loc = IntersectionLocationType.BEYOND; + return; + } + let t; + if (ax !== 0) t = bx / ax; + else t = by / ay; + classifyResult.loc = IntersectionLocationType.BETWEEN; + classifyResult.t = t; + } + function getIntersections(path1, path2) { + const intersectionsRaw = []; + const intersections = []; + for (let index = 1; index < path1.length; index++) { + const path1EdgeStart = path1[index - 1]; + const path1EdgeEnd = path1[index]; + for (let index2 = 1; index2 < path2.length; index2++) { + const path2EdgeStart = path2[index2 - 1]; + const path2EdgeEnd = path2[index2]; + const intersection = findEdgeIntersection(path1EdgeStart, path1EdgeEnd, path2EdgeStart, path2EdgeEnd); + if (intersection !== null && intersectionsRaw.find((i) => i.t <= intersection.t + Number.EPSILON && i.t >= intersection.t - Number.EPSILON) === void 0) { + intersectionsRaw.push(intersection); + intersections.push(new Vector2(intersection.x, intersection.y)); + } + } + } + return intersections; + } + function getScanlineIntersections(scanline, boundingBox, paths) { + const center = new Vector2(); + boundingBox.getCenter(center); + const allIntersections = []; + paths.forEach((path) => { + if (path.boundingBox.containsPoint(center)) getIntersections(scanline, path.points).forEach((p) => { + allIntersections.push({ + identifier: path.identifier, + isCW: path.isCW, + point: p + }); + }); + }); + allIntersections.sort((i1, i2) => { + return i1.point.x - i2.point.x; + }); + return allIntersections; + } + function isHoleTo(simplePath, allPaths, scanlineMinX2, scanlineMaxX2, _fillRule) { + if (_fillRule === null || _fillRule === void 0 || _fillRule === "") _fillRule = "nonzero"; + const centerBoundingBox = new Vector2(); + simplePath.boundingBox.getCenter(centerBoundingBox); + const scanlineIntersections = getScanlineIntersections([new Vector2(scanlineMinX2, centerBoundingBox.y), new Vector2(scanlineMaxX2, centerBoundingBox.y)], simplePath.boundingBox, allPaths); + scanlineIntersections.sort((i1, i2) => { + return i1.point.x - i2.point.x; + }); + const baseIntersections = []; + const otherIntersections = []; + scanlineIntersections.forEach((i2) => { + if (i2.identifier === simplePath.identifier) baseIntersections.push(i2); + else otherIntersections.push(i2); + }); + const firstXOfPath = baseIntersections[0].point.x; + const stack = []; + let i = 0; + while (i < otherIntersections.length && otherIntersections[i].point.x < firstXOfPath) { + if (stack.length > 0 && stack[stack.length - 1] === otherIntersections[i].identifier) stack.pop(); + else stack.push(otherIntersections[i].identifier); + i++; + } + stack.push(simplePath.identifier); + if (_fillRule === "evenodd") { + const isHole = stack.length % 2 === 0 ? true : false; + const isHoleFor = stack[stack.length - 2]; + return { + identifier: simplePath.identifier, + isHole, + for: isHoleFor + }; + } else if (_fillRule === "nonzero") { + let isHole = true; + let isHoleFor = null; + let lastCWValue = null; + for (let i2 = 0; i2 < stack.length; i2++) { + const identifier = stack[i2]; + if (isHole) { + lastCWValue = allPaths[identifier].isCW; + isHole = false; + isHoleFor = identifier; + } else if (lastCWValue !== allPaths[identifier].isCW) { + lastCWValue = allPaths[identifier].isCW; + isHole = true; + } + } + return { + identifier: simplePath.identifier, + isHole, + for: isHoleFor + }; + } else console.warn("fill-rule: \"" + _fillRule + "\" is currently not implemented."); + } + let scanlineMinX = BIGNUMBER; + let scanlineMaxX = -999999999; + let simplePaths = shapePath.subPaths.map((p) => { + const points = p.getPoints(); + let maxY = -999999999; + let minY = BIGNUMBER; + let maxX = -999999999; + let minX = BIGNUMBER; + for (let i = 0; i < points.length; i++) { + const p2 = points[i]; + if (p2.y > maxY) maxY = p2.y; + if (p2.y < minY) minY = p2.y; + if (p2.x > maxX) maxX = p2.x; + if (p2.x < minX) minX = p2.x; + } + if (scanlineMaxX <= maxX) scanlineMaxX = maxX + 1; + if (scanlineMinX >= minX) scanlineMinX = minX - 1; + return { + curves: p.curves, + points, + isCW: ShapeUtils.isClockWise(points), + identifier: -1, + boundingBox: new Box2(new Vector2(minX, minY), new Vector2(maxX, maxY)) + }; + }); + simplePaths = simplePaths.filter((sp) => sp.points.length > 1); + for (let identifier = 0; identifier < simplePaths.length; identifier++) simplePaths[identifier].identifier = identifier; + const isAHole = simplePaths.map((p) => isHoleTo(p, simplePaths, scanlineMinX, scanlineMaxX, shapePath.userData ? shapePath.userData.style.fillRule : void 0)); + const shapesToReturn = []; + simplePaths.forEach((p) => { + if (!isAHole[p.identifier].isHole) { + const shape = new Shape$1(); + shape.curves = p.curves; + isAHole.filter((h) => h.isHole && h.for === p.identifier).forEach((h) => { + const hole = simplePaths[h.identifier]; + const path = new Path(); + path.curves = hole.curves; + shape.holes.push(path); + }); + shapesToReturn.push(shape); + } + }); + return shapesToReturn; + } + static getStrokeStyle(width, color, lineJoin, lineCap, miterLimit) { + width = width !== void 0 ? width : 1; + color = color !== void 0 ? color : "#000"; + lineJoin = lineJoin !== void 0 ? lineJoin : "miter"; + lineCap = lineCap !== void 0 ? lineCap : "butt"; + miterLimit = miterLimit !== void 0 ? miterLimit : 4; + return { + strokeColor: color, + strokeWidth: width, + strokeLineJoin: lineJoin, + strokeLineCap: lineCap, + strokeMiterLimit: miterLimit + }; + } + static pointsToStroke(points, style, arcDivisions, minDistance) { + const vertices = []; + const normals = []; + const uvs = []; + if (SVGLoader2.pointsToStrokeWithBuffers(points, style, arcDivisions, minDistance, vertices, normals, uvs) === 0) return null; + const geometry = new BufferGeometry(); + geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); + geometry.setAttribute("normal", new Float32BufferAttribute(normals, 3)); + geometry.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + return geometry; + } + static pointsToStrokeWithBuffers(points, style, arcDivisions, minDistance, vertices, normals, uvs, vertexOffset) { + const tempV2_1 = new Vector2(); + const tempV2_2 = new Vector2(); + const tempV2_3 = new Vector2(); + const tempV2_4 = new Vector2(); + const tempV2_5 = new Vector2(); + const tempV2_6 = new Vector2(); + const tempV2_7 = new Vector2(); + const lastPointL = new Vector2(); + const lastPointR = new Vector2(); + const point0L = new Vector2(); + const point0R = new Vector2(); + const currentPointL = new Vector2(); + const currentPointR = new Vector2(); + const nextPointL = new Vector2(); + const nextPointR = new Vector2(); + const innerPoint = new Vector2(); + const outerPoint = new Vector2(); + arcDivisions = arcDivisions !== void 0 ? arcDivisions : 12; + minDistance = minDistance !== void 0 ? minDistance : .001; + vertexOffset = vertexOffset !== void 0 ? vertexOffset : 0; + points = removeDuplicatedPoints(points); + const numPoints = points.length; + if (numPoints < 2) return 0; + const isClosed = points[0].equals(points[numPoints - 1]); + let currentPoint; + let previousPoint = points[0]; + let nextPoint; + const strokeWidth2 = style.strokeWidth / 2; + const deltaU = 1 / (numPoints - 1); + let u0 = 0, u1; + let innerSideModified; + let joinIsOnLeftSide; + let isMiter; + let initialJoinIsOnLeftSide = false; + let numVertices = 0; + let currentCoordinate = vertexOffset * 3; + let currentCoordinateUV = vertexOffset * 2; + getNormal(points[0], points[1], tempV2_1).multiplyScalar(strokeWidth2); + lastPointL.copy(points[0]).sub(tempV2_1); + lastPointR.copy(points[0]).add(tempV2_1); + point0L.copy(lastPointL); + point0R.copy(lastPointR); + for (let iPoint = 1; iPoint < numPoints; iPoint++) { + currentPoint = points[iPoint]; + if (iPoint === numPoints - 1) if (isClosed) nextPoint = points[1]; + else nextPoint = void 0; + else nextPoint = points[iPoint + 1]; + const normal1 = tempV2_1; + getNormal(previousPoint, currentPoint, normal1); + tempV2_3.copy(normal1).multiplyScalar(strokeWidth2); + currentPointL.copy(currentPoint).sub(tempV2_3); + currentPointR.copy(currentPoint).add(tempV2_3); + u1 = u0 + deltaU; + innerSideModified = false; + if (nextPoint !== void 0) { + getNormal(currentPoint, nextPoint, tempV2_2); + tempV2_3.copy(tempV2_2).multiplyScalar(strokeWidth2); + nextPointL.copy(currentPoint).sub(tempV2_3); + nextPointR.copy(currentPoint).add(tempV2_3); + joinIsOnLeftSide = true; + tempV2_3.subVectors(nextPoint, previousPoint); + if (normal1.dot(tempV2_3) < 0) joinIsOnLeftSide = false; + if (iPoint === 1) initialJoinIsOnLeftSide = joinIsOnLeftSide; + tempV2_3.subVectors(nextPoint, currentPoint); + tempV2_3.normalize(); + const dot = Math.abs(normal1.dot(tempV2_3)); + if (dot > Number.EPSILON) { + const miterSide = strokeWidth2 / dot; + tempV2_3.multiplyScalar(-miterSide); + tempV2_4.subVectors(currentPoint, previousPoint); + tempV2_5.copy(tempV2_4).setLength(miterSide).add(tempV2_3); + innerPoint.copy(tempV2_5).negate(); + const miterLength2 = tempV2_5.length(); + const segmentLengthPrev = tempV2_4.length(); + tempV2_4.divideScalar(segmentLengthPrev); + tempV2_6.subVectors(nextPoint, currentPoint); + const segmentLengthNext = tempV2_6.length(); + tempV2_6.divideScalar(segmentLengthNext); + if (tempV2_4.dot(innerPoint) < segmentLengthPrev && tempV2_6.dot(innerPoint) < segmentLengthNext) innerSideModified = true; + outerPoint.copy(tempV2_5).add(currentPoint); + innerPoint.add(currentPoint); + isMiter = false; + if (innerSideModified) if (joinIsOnLeftSide) { + nextPointR.copy(innerPoint); + currentPointR.copy(innerPoint); + } else { + nextPointL.copy(innerPoint); + currentPointL.copy(innerPoint); + } + else makeSegmentTriangles(); + switch (style.strokeLineJoin) { + case "bevel": + makeSegmentWithBevelJoin(joinIsOnLeftSide, innerSideModified, u1); + break; + case "round": + createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide, innerSideModified); + if (joinIsOnLeftSide) makeCircularSector(currentPoint, currentPointL, nextPointL, u1, 0); + else makeCircularSector(currentPoint, nextPointR, currentPointR, u1, 1); + break; + default: + const miterFraction = strokeWidth2 * style.strokeMiterLimit / miterLength2; + if (miterFraction < 1) if (style.strokeLineJoin !== "miter-clip") { + makeSegmentWithBevelJoin(joinIsOnLeftSide, innerSideModified, u1); + break; + } else { + createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide, innerSideModified); + if (joinIsOnLeftSide) { + tempV2_6.subVectors(outerPoint, currentPointL).multiplyScalar(miterFraction).add(currentPointL); + tempV2_7.subVectors(outerPoint, nextPointL).multiplyScalar(miterFraction).add(nextPointL); + addVertex(currentPointL, u1, 0); + addVertex(tempV2_6, u1, 0); + addVertex(currentPoint, u1, .5); + addVertex(currentPoint, u1, .5); + addVertex(tempV2_6, u1, 0); + addVertex(tempV2_7, u1, 0); + addVertex(currentPoint, u1, .5); + addVertex(tempV2_7, u1, 0); + addVertex(nextPointL, u1, 0); + } else { + tempV2_6.subVectors(outerPoint, currentPointR).multiplyScalar(miterFraction).add(currentPointR); + tempV2_7.subVectors(outerPoint, nextPointR).multiplyScalar(miterFraction).add(nextPointR); + addVertex(currentPointR, u1, 1); + addVertex(tempV2_6, u1, 1); + addVertex(currentPoint, u1, .5); + addVertex(currentPoint, u1, .5); + addVertex(tempV2_6, u1, 1); + addVertex(tempV2_7, u1, 1); + addVertex(currentPoint, u1, .5); + addVertex(tempV2_7, u1, 1); + addVertex(nextPointR, u1, 1); + } + } + else { + if (innerSideModified) { + if (joinIsOnLeftSide) { + addVertex(lastPointR, u0, 1); + addVertex(lastPointL, u0, 0); + addVertex(outerPoint, u1, 0); + addVertex(lastPointR, u0, 1); + addVertex(outerPoint, u1, 0); + addVertex(innerPoint, u1, 1); + } else { + addVertex(lastPointR, u0, 1); + addVertex(lastPointL, u0, 0); + addVertex(outerPoint, u1, 1); + addVertex(lastPointL, u0, 0); + addVertex(innerPoint, u1, 0); + addVertex(outerPoint, u1, 1); + } + if (joinIsOnLeftSide) nextPointL.copy(outerPoint); + else nextPointR.copy(outerPoint); + } else if (joinIsOnLeftSide) { + addVertex(currentPointL, u1, 0); + addVertex(outerPoint, u1, 0); + addVertex(currentPoint, u1, .5); + addVertex(currentPoint, u1, .5); + addVertex(outerPoint, u1, 0); + addVertex(nextPointL, u1, 0); + } else { + addVertex(currentPointR, u1, 1); + addVertex(outerPoint, u1, 1); + addVertex(currentPoint, u1, .5); + addVertex(currentPoint, u1, .5); + addVertex(outerPoint, u1, 1); + addVertex(nextPointR, u1, 1); + } + isMiter = true; + } + break; + } + } else makeSegmentTriangles(); + } else makeSegmentTriangles(); + if (!isClosed && iPoint === numPoints - 1) addCapGeometry(points[0], point0L, point0R, joinIsOnLeftSide, true, u0); + u0 = u1; + previousPoint = currentPoint; + lastPointL.copy(nextPointL); + lastPointR.copy(nextPointR); + } + if (!isClosed) addCapGeometry(currentPoint, currentPointL, currentPointR, joinIsOnLeftSide, false, u1); + else if (innerSideModified && vertices) { + let lastOuter = outerPoint; + let lastInner = innerPoint; + if (initialJoinIsOnLeftSide !== joinIsOnLeftSide) { + lastOuter = innerPoint; + lastInner = outerPoint; + } + if (joinIsOnLeftSide) { + if (isMiter || initialJoinIsOnLeftSide) { + lastInner.toArray(vertices, 0); + lastInner.toArray(vertices, 9); + if (isMiter) lastOuter.toArray(vertices, 3); + } + } else if (isMiter || !initialJoinIsOnLeftSide) { + lastInner.toArray(vertices, 3); + lastInner.toArray(vertices, 9); + if (isMiter) lastOuter.toArray(vertices, 0); + } + } + return numVertices; + function getNormal(p1, p2, result) { + result.subVectors(p2, p1); + return result.set(-result.y, result.x).normalize(); + } + function addVertex(position, u, v) { + if (vertices) { + vertices[currentCoordinate] = position.x; + vertices[currentCoordinate + 1] = position.y; + vertices[currentCoordinate + 2] = 0; + if (normals) { + normals[currentCoordinate] = 0; + normals[currentCoordinate + 1] = 0; + normals[currentCoordinate + 2] = 1; + } + currentCoordinate += 3; + if (uvs) { + uvs[currentCoordinateUV] = u; + uvs[currentCoordinateUV + 1] = v; + currentCoordinateUV += 2; + } + } + numVertices += 3; + } + function makeCircularSector(center, p1, p2, u, v) { + tempV2_1.copy(p1).sub(center).normalize(); + tempV2_2.copy(p2).sub(center).normalize(); + let angle = Math.PI; + const dot = tempV2_1.dot(tempV2_2); + if (Math.abs(dot) < 1) angle = Math.abs(Math.acos(dot)); + angle /= arcDivisions; + tempV2_3.copy(p1); + for (let i = 0, il = arcDivisions - 1; i < il; i++) { + tempV2_4.copy(tempV2_3).rotateAround(center, angle); + addVertex(tempV2_3, u, v); + addVertex(tempV2_4, u, v); + addVertex(center, u, .5); + tempV2_3.copy(tempV2_4); + } + addVertex(tempV2_4, u, v); + addVertex(p2, u, v); + addVertex(center, u, .5); + } + function makeSegmentTriangles() { + addVertex(lastPointR, u0, 1); + addVertex(lastPointL, u0, 0); + addVertex(currentPointL, u1, 0); + addVertex(lastPointR, u0, 1); + addVertex(currentPointL, u1, 0); + addVertex(currentPointR, u1, 1); + } + function makeSegmentWithBevelJoin(joinIsOnLeftSide2, innerSideModified2, u) { + if (innerSideModified2) if (joinIsOnLeftSide2) { + addVertex(lastPointR, u0, 1); + addVertex(lastPointL, u0, 0); + addVertex(currentPointL, u1, 0); + addVertex(lastPointR, u0, 1); + addVertex(currentPointL, u1, 0); + addVertex(innerPoint, u1, 1); + addVertex(currentPointL, u, 0); + addVertex(nextPointL, u, 0); + addVertex(innerPoint, u, .5); + } else { + addVertex(lastPointR, u0, 1); + addVertex(lastPointL, u0, 0); + addVertex(currentPointR, u1, 1); + addVertex(lastPointL, u0, 0); + addVertex(innerPoint, u1, 0); + addVertex(currentPointR, u1, 1); + addVertex(currentPointR, u, 1); + addVertex(innerPoint, u, 0); + addVertex(nextPointR, u, 1); + } + else if (joinIsOnLeftSide2) { + addVertex(currentPointL, u, 0); + addVertex(nextPointL, u, 0); + addVertex(currentPoint, u, .5); + } else { + addVertex(currentPointR, u, 1); + addVertex(nextPointR, u, 0); + addVertex(currentPoint, u, .5); + } + } + function createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide2, innerSideModified2) { + if (innerSideModified2) if (joinIsOnLeftSide2) { + addVertex(lastPointR, u0, 1); + addVertex(lastPointL, u0, 0); + addVertex(currentPointL, u1, 0); + addVertex(lastPointR, u0, 1); + addVertex(currentPointL, u1, 0); + addVertex(innerPoint, u1, 1); + addVertex(currentPointL, u0, 0); + addVertex(currentPoint, u1, .5); + addVertex(innerPoint, u1, 1); + addVertex(currentPoint, u1, .5); + addVertex(nextPointL, u0, 0); + addVertex(innerPoint, u1, 1); + } else { + addVertex(lastPointR, u0, 1); + addVertex(lastPointL, u0, 0); + addVertex(currentPointR, u1, 1); + addVertex(lastPointL, u0, 0); + addVertex(innerPoint, u1, 0); + addVertex(currentPointR, u1, 1); + addVertex(currentPointR, u0, 1); + addVertex(innerPoint, u1, 0); + addVertex(currentPoint, u1, .5); + addVertex(currentPoint, u1, .5); + addVertex(innerPoint, u1, 0); + addVertex(nextPointR, u0, 1); + } + } + function addCapGeometry(center, p1, p2, joinIsOnLeftSide2, start, u) { + switch (style.strokeLineCap) { + case "round": + if (start) makeCircularSector(center, p2, p1, u, .5); + else makeCircularSector(center, p1, p2, u, .5); + break; + case "square": + if (start) { + tempV2_1.subVectors(p1, center); + tempV2_2.set(tempV2_1.y, -tempV2_1.x); + tempV2_3.addVectors(tempV2_1, tempV2_2).add(center); + tempV2_4.subVectors(tempV2_2, tempV2_1).add(center); + if (joinIsOnLeftSide2) { + tempV2_3.toArray(vertices, 3); + tempV2_4.toArray(vertices, 0); + tempV2_4.toArray(vertices, 9); + } else { + tempV2_3.toArray(vertices, 3); + uvs[7] === 1 ? tempV2_4.toArray(vertices, 9) : tempV2_3.toArray(vertices, 9); + tempV2_4.toArray(vertices, 0); + } + } else { + tempV2_1.subVectors(p2, center); + tempV2_2.set(tempV2_1.y, -tempV2_1.x); + tempV2_3.addVectors(tempV2_1, tempV2_2).add(center); + tempV2_4.subVectors(tempV2_2, tempV2_1).add(center); + const vl = vertices.length; + if (joinIsOnLeftSide2) { + tempV2_3.toArray(vertices, vl - 3); + tempV2_4.toArray(vertices, vl - 6); + tempV2_4.toArray(vertices, vl - 12); + } else { + tempV2_4.toArray(vertices, vl - 6); + tempV2_3.toArray(vertices, vl - 3); + tempV2_4.toArray(vertices, vl - 12); + } + } + break; + } + } + function removeDuplicatedPoints(points2) { + let dupPoints = false; + for (let i = 1, n = points2.length - 1; i < n; i++) if (points2[i].distanceTo(points2[i + 1]) < minDistance) { + dupPoints = true; + break; + } + if (!dupPoints) return points2; + const newPoints = []; + newPoints.push(points2[0]); + for (let i = 1, n = points2.length - 1; i < n; i++) if (points2[i].distanceTo(points2[i + 1]) >= minDistance) newPoints.push(points2[i]); + newPoints.push(points2[points2.length - 1]); + return newPoints; + } + } + } + return SVGLoader2; +})(); +//#endregion +//#region node_modules/three-stdlib/loaders/DRACOLoader.js +var _taskCache = /* @__PURE__ */ new WeakMap(); +var DRACOLoader = class extends Loader$1 { + constructor(manager) { + super(manager); + 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(path) { + this.decoderPath = path; + return this; + } + setDecoderConfig(config) { + this.decoderConfig = config; + return this; + } + setWorkerLimit(workerLimit) { + this.workerLimit = workerLimit; + return this; + } + load(url, onLoad, onProgress, onError) { + const loader = new FileLoader(this.manager); + loader.setPath(this.path); + loader.setResponseType("arraybuffer"); + loader.setRequestHeader(this.requestHeader); + loader.setWithCredentials(this.withCredentials); + loader.load(url, (buffer) => { + const taskConfig = { + attributeIDs: this.defaultAttributeIDs, + attributeTypes: this.defaultAttributeTypes, + useUniqueIDs: false + }; + this.decodeGeometry(buffer, taskConfig).then(onLoad).catch(onError); + }, onProgress, onError); + } + /** @deprecated Kept for backward-compatibility with previous DRACOLoader versions. */ + decodeDracoFile(buffer, callback, attributeIDs, attributeTypes) { + const taskConfig = { + attributeIDs: attributeIDs || this.defaultAttributeIDs, + attributeTypes: attributeTypes || this.defaultAttributeTypes, + useUniqueIDs: !!attributeIDs + }; + this.decodeGeometry(buffer, taskConfig).then(callback); + } + decodeGeometry(buffer, taskConfig) { + for (const attribute in taskConfig.attributeTypes) { + const type = taskConfig.attributeTypes[attribute]; + if (type.BYTES_PER_ELEMENT !== void 0) taskConfig.attributeTypes[attribute] = type.name; + } + const taskKey = JSON.stringify(taskConfig); + if (_taskCache.has(buffer)) { + const cachedTask = _taskCache.get(buffer); + if (cachedTask.key === taskKey) return cachedTask.promise; + else if (buffer.byteLength === 0) throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred."); + } + let worker; + const taskID = this.workerNextTaskID++; + const taskCost = buffer.byteLength; + const geometryPending = this._getWorker(taskID, taskCost).then((_worker) => { + worker = _worker; + return new Promise((resolve, reject) => { + worker._callbacks[taskID] = { + resolve, + reject + }; + worker.postMessage({ + type: "decode", + id: taskID, + taskConfig, + buffer + }, [buffer]); + }); + }).then((message) => this._createGeometry(message.geometry)); + geometryPending.catch(() => true).then(() => { + if (worker && taskID) this._releaseTask(worker, taskID); + }); + _taskCache.set(buffer, { + key: taskKey, + promise: geometryPending + }); + return geometryPending; + } + _createGeometry(geometryData) { + const geometry = new BufferGeometry(); + if (geometryData.index) geometry.setIndex(new BufferAttribute(geometryData.index.array, 1)); + for (let i = 0; i < geometryData.attributes.length; i++) { + const attribute = geometryData.attributes[i]; + const name = attribute.name; + const array = attribute.array; + const itemSize = attribute.itemSize; + geometry.setAttribute(name, new BufferAttribute(array, itemSize)); + } + return geometry; + } + _loadLibrary(url, responseType) { + const loader = new FileLoader(this.manager); + loader.setPath(this.decoderPath); + loader.setResponseType(responseType); + loader.setWithCredentials(this.withCredentials); + return new Promise((resolve, reject) => { + loader.load(url, resolve, void 0, reject); + }); + } + preload() { + this._initDecoder(); + return this; + } + _initDecoder() { + if (this.decoderPending) return this.decoderPending; + const useJS = typeof WebAssembly !== "object" || this.decoderConfig.type === "js"; + const librariesPending = []; + if (useJS) librariesPending.push(this._loadLibrary("draco_decoder.js", "text")); + else { + librariesPending.push(this._loadLibrary("draco_wasm_wrapper.js", "text")); + librariesPending.push(this._loadLibrary("draco_decoder.wasm", "arraybuffer")); + } + this.decoderPending = Promise.all(librariesPending).then((libraries) => { + const jsContent = libraries[0]; + if (!useJS) this.decoderConfig.wasmBinary = libraries[1]; + const fn = DRACOWorker.toString(); + const body = [ + "/* draco decoder */", + jsContent, + "", + "/* worker */", + fn.substring(fn.indexOf("{") + 1, fn.lastIndexOf("}")) + ].join("\n"); + this.workerSourceURL = URL.createObjectURL(new Blob([body])); + }); + return this.decoderPending; + } + _getWorker(taskID, taskCost) { + return this._initDecoder().then(() => { + if (this.workerPool.length < this.workerLimit) { + const worker2 = new Worker(this.workerSourceURL); + worker2._callbacks = {}; + worker2._taskCosts = {}; + worker2._taskLoad = 0; + worker2.postMessage({ + type: "init", + decoderConfig: this.decoderConfig + }); + worker2.onmessage = function(e) { + const message = e.data; + switch (message.type) { + case "decode": + worker2._callbacks[message.id].resolve(message); + break; + case "error": + worker2._callbacks[message.id].reject(message); + break; + default: console.error("THREE.DRACOLoader: Unexpected message, \"" + message.type + "\""); + } + }; + this.workerPool.push(worker2); + } else this.workerPool.sort(function(a, b) { + return a._taskLoad > b._taskLoad ? -1 : 1; + }); + const worker = this.workerPool[this.workerPool.length - 1]; + worker._taskCosts[taskID] = taskCost; + worker._taskLoad += taskCost; + return worker; + }); + } + _releaseTask(worker, taskID) { + worker._taskLoad -= worker._taskCosts[taskID]; + delete worker._callbacks[taskID]; + delete worker._taskCosts[taskID]; + } + debug() { + console.log("Task load: ", this.workerPool.map((worker) => worker._taskLoad)); + } + dispose() { + for (let i = 0; i < this.workerPool.length; ++i) this.workerPool[i].terminate(); + this.workerPool.length = 0; + return this; + } +}; +function DRACOWorker() { + let decoderConfig; + let decoderPending; + onmessage = function(e) { + const message = e.data; + switch (message.type) { + case "init": + decoderConfig = message.decoderConfig; + decoderPending = new Promise(function(resolve) { + decoderConfig.onModuleLoaded = function(draco) { + resolve({ draco }); + }; + DracoDecoderModule(decoderConfig); + }); + break; + case "decode": + const buffer = message.buffer; + const taskConfig = message.taskConfig; + decoderPending.then((module) => { + const draco = module.draco; + const decoder = new draco.Decoder(); + const decoderBuffer = new draco.DecoderBuffer(); + decoderBuffer.Init(new Int8Array(buffer), buffer.byteLength); + try { + const geometry = decodeGeometry(draco, decoder, decoderBuffer, taskConfig); + const buffers = geometry.attributes.map((attr) => attr.array.buffer); + if (geometry.index) buffers.push(geometry.index.array.buffer); + self.postMessage({ + type: "decode", + id: message.id, + geometry + }, buffers); + } catch (error) { + console.error(error); + self.postMessage({ + type: "error", + id: message.id, + error: error.message + }); + } finally { + draco.destroy(decoderBuffer); + draco.destroy(decoder); + } + }); + break; + } + }; + function decodeGeometry(draco, decoder, decoderBuffer, taskConfig) { + const attributeIDs = taskConfig.attributeIDs; + const attributeTypes = taskConfig.attributeTypes; + let dracoGeometry; + let decodingStatus; + const geometryType = decoder.GetEncodedGeometryType(decoderBuffer); + if (geometryType === draco.TRIANGULAR_MESH) { + dracoGeometry = new draco.Mesh(); + decodingStatus = decoder.DecodeBufferToMesh(decoderBuffer, dracoGeometry); + } else if (geometryType === draco.POINT_CLOUD) { + dracoGeometry = new draco.PointCloud(); + decodingStatus = decoder.DecodeBufferToPointCloud(decoderBuffer, dracoGeometry); + } else throw new Error("THREE.DRACOLoader: Unexpected geometry type."); + if (!decodingStatus.ok() || dracoGeometry.ptr === 0) throw new Error("THREE.DRACOLoader: Decoding failed: " + decodingStatus.error_msg()); + const geometry = { + index: null, + attributes: [] + }; + for (const attributeName in attributeIDs) { + const attributeType = self[attributeTypes[attributeName]]; + let attribute; + let attributeID; + if (taskConfig.useUniqueIDs) { + attributeID = attributeIDs[attributeName]; + attribute = decoder.GetAttributeByUniqueId(dracoGeometry, attributeID); + } else { + attributeID = decoder.GetAttributeId(dracoGeometry, draco[attributeIDs[attributeName]]); + if (attributeID === -1) continue; + attribute = decoder.GetAttribute(dracoGeometry, attributeID); + } + geometry.attributes.push(decodeAttribute(draco, decoder, dracoGeometry, attributeName, attributeType, attribute)); + } + if (geometryType === draco.TRIANGULAR_MESH) geometry.index = decodeIndex(draco, decoder, dracoGeometry); + draco.destroy(dracoGeometry); + return geometry; + } + function decodeIndex(draco, decoder, dracoGeometry) { + const numIndices = dracoGeometry.num_faces() * 3; + const byteLength = numIndices * 4; + const ptr = draco._malloc(byteLength); + decoder.GetTrianglesUInt32Array(dracoGeometry, byteLength, ptr); + const index = new Uint32Array(draco.HEAPF32.buffer, ptr, numIndices).slice(); + draco._free(ptr); + return { + array: index, + itemSize: 1 + }; + } + function decodeAttribute(draco, decoder, dracoGeometry, attributeName, attributeType, attribute) { + const numComponents = attribute.num_components(); + const numValues = dracoGeometry.num_points() * numComponents; + const byteLength = numValues * attributeType.BYTES_PER_ELEMENT; + const dataType = getDracoDataType(draco, attributeType); + const ptr = draco._malloc(byteLength); + decoder.GetAttributeDataArrayForAllPoints(dracoGeometry, attribute, dataType, byteLength, ptr); + const array = new attributeType(draco.HEAPF32.buffer, ptr, numValues).slice(); + draco._free(ptr); + return { + name: attributeName, + array, + itemSize: numComponents + }; + } + function getDracoDataType(draco, attributeType) { + switch (attributeType) { + case Float32Array: return draco.DT_FLOAT32; + case Int8Array: return draco.DT_INT8; + case Int16Array: return draco.DT_INT16; + case Int32Array: return draco.DT_INT32; + case Uint8Array: return draco.DT_UINT8; + case Uint16Array: return draco.DT_UINT16; + case Uint32Array: return draco.DT_UINT32; + } + } +} +//#endregion +//#region node_modules/three-stdlib/lines/LineSegmentsGeometry.js +var _box$1 = /* @__PURE__ */ new Box3(); +var _vector = /* @__PURE__ */ new Vector3(); +var LineSegmentsGeometry = class extends InstancedBufferGeometry { + constructor() { + super(); + this.isLineSegmentsGeometry = true; + this.type = "LineSegmentsGeometry"; + const positions = [ + -1, + 2, + 0, + 1, + 2, + 0, + -1, + 1, + 0, + 1, + 1, + 0, + -1, + 0, + 0, + 1, + 0, + 0, + -1, + -1, + 0, + 1, + -1, + 0 + ]; + const uvs = [ + -1, + 2, + 1, + 2, + -1, + 1, + 1, + 1, + -1, + -1, + 1, + -1, + -1, + -2, + 1, + -2 + ]; + this.setIndex([ + 0, + 2, + 1, + 2, + 3, + 1, + 2, + 4, + 3, + 4, + 5, + 3, + 4, + 6, + 5, + 6, + 7, + 5 + ]); + this.setAttribute("position", new Float32BufferAttribute(positions, 3)); + this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); + } + applyMatrix4(matrix) { + const start = this.attributes.instanceStart; + const end = this.attributes.instanceEnd; + if (start !== void 0) { + start.applyMatrix4(matrix); + end.applyMatrix4(matrix); + start.needsUpdate = true; + } + if (this.boundingBox !== null) this.computeBoundingBox(); + if (this.boundingSphere !== null) this.computeBoundingSphere(); + return this; + } + setPositions(array) { + let lineSegments; + if (array instanceof Float32Array) lineSegments = array; + else if (Array.isArray(array)) lineSegments = new Float32Array(array); + const instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1); + this.setAttribute("instanceStart", new InterleavedBufferAttribute(instanceBuffer, 3, 0)); + this.setAttribute("instanceEnd", new InterleavedBufferAttribute(instanceBuffer, 3, 3)); + this.computeBoundingBox(); + this.computeBoundingSphere(); + return this; + } + setColors(array, itemSize = 3) { + let colors; + if (array instanceof Float32Array) colors = array; + else if (Array.isArray(array)) colors = new Float32Array(array); + const instanceColorBuffer = new InstancedInterleavedBuffer(colors, itemSize * 2, 1); + this.setAttribute("instanceColorStart", new InterleavedBufferAttribute(instanceColorBuffer, itemSize, 0)); + this.setAttribute("instanceColorEnd", new InterleavedBufferAttribute(instanceColorBuffer, itemSize, itemSize)); + return this; + } + fromWireframeGeometry(geometry) { + this.setPositions(geometry.attributes.position.array); + return this; + } + fromEdgesGeometry(geometry) { + this.setPositions(geometry.attributes.position.array); + return this; + } + fromMesh(mesh) { + this.fromWireframeGeometry(new WireframeGeometry(mesh.geometry)); + return this; + } + fromLineSegments(lineSegments) { + const geometry = lineSegments.geometry; + this.setPositions(geometry.attributes.position.array); + return this; + } + computeBoundingBox() { + if (this.boundingBox === null) this.boundingBox = new Box3(); + const start = this.attributes.instanceStart; + const end = this.attributes.instanceEnd; + if (start !== void 0 && end !== void 0) { + this.boundingBox.setFromBufferAttribute(start); + _box$1.setFromBufferAttribute(end); + this.boundingBox.union(_box$1); + } + } + computeBoundingSphere() { + if (this.boundingSphere === null) this.boundingSphere = new Sphere$1(); + if (this.boundingBox === null) this.computeBoundingBox(); + const start = this.attributes.instanceStart; + const end = this.attributes.instanceEnd; + if (start !== void 0 && end !== void 0) { + const center = this.boundingSphere.center; + this.boundingBox.getCenter(center); + let maxRadiusSq = 0; + for (let i = 0, il = start.count; i < il; i++) { + _vector.fromBufferAttribute(start, i); + maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector)); + _vector.fromBufferAttribute(end, i); + maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector)); + } + this.boundingSphere.radius = Math.sqrt(maxRadiusSq); + if (isNaN(this.boundingSphere.radius)) console.error("THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.", this); + } + } + toJSON() {} + applyMatrix(matrix) { + console.warn("THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4()."); + return this.applyMatrix4(matrix); + } +}; +//#endregion +//#region node_modules/three-stdlib/lines/LineGeometry.js +var LineGeometry = class extends LineSegmentsGeometry { + constructor() { + super(); + this.isLineGeometry = true; + this.type = "LineGeometry"; + } + setPositions(array) { + const length = array.length - 3; + const points = new Float32Array(2 * length); + for (let i = 0; i < length; i += 3) { + points[2 * i] = array[i]; + points[2 * i + 1] = array[i + 1]; + points[2 * i + 2] = array[i + 2]; + points[2 * i + 3] = array[i + 3]; + points[2 * i + 4] = array[i + 4]; + points[2 * i + 5] = array[i + 5]; + } + super.setPositions(points); + return this; + } + setColors(array, itemSize = 3) { + const length = array.length - itemSize; + const colors = new Float32Array(2 * length); + if (itemSize === 3) for (let i = 0; i < length; i += itemSize) { + colors[2 * i] = array[i]; + colors[2 * i + 1] = array[i + 1]; + colors[2 * i + 2] = array[i + 2]; + colors[2 * i + 3] = array[i + 3]; + colors[2 * i + 4] = array[i + 4]; + colors[2 * i + 5] = array[i + 5]; + } + else for (let i = 0; i < length; i += itemSize) { + colors[2 * i] = array[i]; + colors[2 * i + 1] = array[i + 1]; + colors[2 * i + 2] = array[i + 2]; + colors[2 * i + 3] = array[i + 3]; + colors[2 * i + 4] = array[i + 4]; + colors[2 * i + 5] = array[i + 5]; + colors[2 * i + 6] = array[i + 6]; + colors[2 * i + 7] = array[i + 7]; + } + super.setColors(colors, itemSize); + return this; + } + fromLine(line) { + const geometry = line.geometry; + this.setPositions(geometry.attributes.position.array); + return this; + } +}; +//#endregion +//#region node_modules/three-stdlib/lines/LineMaterial.js +var LineMaterial = class extends ShaderMaterial { + constructor(parameters) { + super({ + type: "LineMaterial", + uniforms: UniformsUtils.clone(UniformsUtils.merge([ + UniformsLib.common, + UniformsLib.fog, + { + worldUnits: { value: 1 }, + linewidth: { value: 1 }, + resolution: { value: new Vector2(1, 1) }, + dashOffset: { value: 0 }, + dashScale: { value: 1 }, + dashSize: { value: 1 }, + gapSize: { value: 1 } + } + ])), + vertexShader: ` + #include + #include + #include + #include + + uniform float linewidth; + uniform vec2 resolution; + + attribute vec3 instanceStart; + attribute vec3 instanceEnd; + + #ifdef USE_COLOR + #ifdef USE_LINE_COLOR_ALPHA + varying vec4 vLineColor; + attribute vec4 instanceColorStart; + attribute vec4 instanceColorEnd; + #else + varying vec3 vLineColor; + attribute vec3 instanceColorStart; + attribute vec3 instanceColorEnd; + #endif + #endif + + #ifdef WORLD_UNITS + + varying vec4 worldPos; + varying vec3 worldStart; + varying vec3 worldEnd; + + #ifdef USE_DASH + + varying vec2 vUv; + + #endif + + #else + + varying vec2 vUv; + + #endif + + #ifdef USE_DASH + + uniform float dashScale; + attribute float instanceDistanceStart; + attribute float instanceDistanceEnd; + varying float vLineDistance; + + #endif + + void trimSegment( const in vec4 start, inout vec4 end ) { + + // trim end segment so it terminates between the camera plane and the near plane + + // conservative estimate of the near plane + float a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column + float b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column + float nearEstimate = - 0.5 * b / a; + + float alpha = ( nearEstimate - start.z ) / ( end.z - start.z ); + + end.xyz = mix( start.xyz, end.xyz, alpha ); + + } + + void main() { + + #ifdef USE_COLOR + + vLineColor = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd; + + #endif + + #ifdef USE_DASH + + vLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd; + vUv = uv; + + #endif + + float aspect = resolution.x / resolution.y; + + // camera space + vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 ); + vec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 ); + + #ifdef WORLD_UNITS + + worldStart = start.xyz; + worldEnd = end.xyz; + + #else + + vUv = uv; + + #endif + + // special case for perspective projection, and segments that terminate either in, or behind, the camera plane + // clearly the gpu firmware has a way of addressing this issue when projecting into ndc space + // but we need to perform ndc-space calculations in the shader, so we must address this issue directly + // perhaps there is a more elegant solution -- WestLangley + + bool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column + + if ( perspective ) { + + if ( start.z < 0.0 && end.z >= 0.0 ) { + + trimSegment( start, end ); + + } else if ( end.z < 0.0 && start.z >= 0.0 ) { + + trimSegment( end, start ); + + } + + } + + // clip space + vec4 clipStart = projectionMatrix * start; + vec4 clipEnd = projectionMatrix * end; + + // ndc space + vec3 ndcStart = clipStart.xyz / clipStart.w; + vec3 ndcEnd = clipEnd.xyz / clipEnd.w; + + // direction + vec2 dir = ndcEnd.xy - ndcStart.xy; + + // account for clip-space aspect ratio + dir.x *= aspect; + dir = normalize( dir ); + + #ifdef WORLD_UNITS + + // get the offset direction as perpendicular to the view vector + vec3 worldDir = normalize( end.xyz - start.xyz ); + vec3 offset; + if ( position.y < 0.5 ) { + + offset = normalize( cross( start.xyz, worldDir ) ); + + } else { + + offset = normalize( cross( end.xyz, worldDir ) ); + + } + + // sign flip + if ( position.x < 0.0 ) offset *= - 1.0; + + float forwardOffset = dot( worldDir, vec3( 0.0, 0.0, 1.0 ) ); + + // don't extend the line if we're rendering dashes because we + // won't be rendering the endcaps + #ifndef USE_DASH + + // extend the line bounds to encompass endcaps + start.xyz += - worldDir * linewidth * 0.5; + end.xyz += worldDir * linewidth * 0.5; + + // shift the position of the quad so it hugs the forward edge of the line + offset.xy -= dir * forwardOffset; + offset.z += 0.5; + + #endif + + // endcaps + if ( position.y > 1.0 || position.y < 0.0 ) { + + offset.xy += dir * 2.0 * forwardOffset; + + } + + // adjust for linewidth + offset *= linewidth * 0.5; + + // set the world position + worldPos = ( position.y < 0.5 ) ? start : end; + worldPos.xyz += offset; + + // project the worldpos + vec4 clip = projectionMatrix * worldPos; + + // shift the depth of the projected points so the line + // segments overlap neatly + vec3 clipPose = ( position.y < 0.5 ) ? ndcStart : ndcEnd; + clip.z = clipPose.z * clip.w; + + #else + + vec2 offset = vec2( dir.y, - dir.x ); + // undo aspect ratio adjustment + dir.x /= aspect; + offset.x /= aspect; + + // sign flip + if ( position.x < 0.0 ) offset *= - 1.0; + + // endcaps + if ( position.y < 0.0 ) { + + offset += - dir; + + } else if ( position.y > 1.0 ) { + + offset += dir; + + } + + // adjust for linewidth + offset *= linewidth; + + // adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ... + offset /= resolution.y; + + // select end + vec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd; + + // back to clip space + offset *= clip.w; + + clip.xy += offset; + + #endif + + gl_Position = clip; + + vec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation + + #include + #include + #include + + } + `, + fragmentShader: ` + uniform vec3 diffuse; + uniform float opacity; + uniform float linewidth; + + #ifdef USE_DASH + + uniform float dashOffset; + uniform float dashSize; + uniform float gapSize; + + #endif + + varying float vLineDistance; + + #ifdef WORLD_UNITS + + varying vec4 worldPos; + varying vec3 worldStart; + varying vec3 worldEnd; + + #ifdef USE_DASH + + varying vec2 vUv; + + #endif + + #else + + varying vec2 vUv; + + #endif + + #include + #include + #include + #include + + #ifdef USE_COLOR + #ifdef USE_LINE_COLOR_ALPHA + varying vec4 vLineColor; + #else + varying vec3 vLineColor; + #endif + #endif + + vec2 closestLineToLine(vec3 p1, vec3 p2, vec3 p3, vec3 p4) { + + float mua; + float mub; + + vec3 p13 = p1 - p3; + vec3 p43 = p4 - p3; + + vec3 p21 = p2 - p1; + + float d1343 = dot( p13, p43 ); + float d4321 = dot( p43, p21 ); + float d1321 = dot( p13, p21 ); + float d4343 = dot( p43, p43 ); + float d2121 = dot( p21, p21 ); + + float denom = d2121 * d4343 - d4321 * d4321; + + float numer = d1343 * d4321 - d1321 * d4343; + + mua = numer / denom; + mua = clamp( mua, 0.0, 1.0 ); + mub = ( d1343 + d4321 * ( mua ) ) / d4343; + mub = clamp( mub, 0.0, 1.0 ); + + return vec2( mua, mub ); + + } + + void main() { + + #include + + #ifdef USE_DASH + + if ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps + + if ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX + + #endif + + float alpha = opacity; + + #ifdef WORLD_UNITS + + // Find the closest points on the view ray and the line segment + vec3 rayEnd = normalize( worldPos.xyz ) * 1e5; + vec3 lineDir = worldEnd - worldStart; + vec2 params = closestLineToLine( worldStart, worldEnd, vec3( 0.0, 0.0, 0.0 ), rayEnd ); + + vec3 p1 = worldStart + lineDir * params.x; + vec3 p2 = rayEnd * params.y; + vec3 delta = p1 - p2; + float len = length( delta ); + float norm = len / linewidth; + + #ifndef USE_DASH + + #ifdef USE_ALPHA_TO_COVERAGE + + float dnorm = fwidth( norm ); + alpha = 1.0 - smoothstep( 0.5 - dnorm, 0.5 + dnorm, norm ); + + #else + + if ( norm > 0.5 ) { + + discard; + + } + + #endif + + #endif + + #else + + #ifdef USE_ALPHA_TO_COVERAGE + + // artifacts appear on some hardware if a derivative is taken within a conditional + float a = vUv.x; + float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0; + float len2 = a * a + b * b; + float dlen = fwidth( len2 ); + + if ( abs( vUv.y ) > 1.0 ) { + + alpha = 1.0 - smoothstep( 1.0 - dlen, 1.0 + dlen, len2 ); + + } + + #else + + if ( abs( vUv.y ) > 1.0 ) { + + float a = vUv.x; + float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0; + float len2 = a * a + b * b; + + if ( len2 > 1.0 ) discard; + + } + + #endif + + #endif + + vec4 diffuseColor = vec4( diffuse, alpha ); + #ifdef USE_COLOR + #ifdef USE_LINE_COLOR_ALPHA + diffuseColor *= vLineColor; + #else + diffuseColor.rgb *= vLineColor; + #endif + #endif + + #include + + gl_FragColor = diffuseColor; + + #include + #include <${version$2 >= 154 ? "colorspace_fragment" : "encodings_fragment"}> + #include + #include + + } + `, + clipping: true + }); + this.isLineMaterial = true; + this.onBeforeCompile = function() { + if (this.transparent) this.defines.USE_LINE_COLOR_ALPHA = "1"; + else delete this.defines.USE_LINE_COLOR_ALPHA; + }; + Object.defineProperties(this, { + color: { + enumerable: true, + get: function() { + return this.uniforms.diffuse.value; + }, + set: function(value) { + this.uniforms.diffuse.value = value; + } + }, + worldUnits: { + enumerable: true, + get: function() { + return "WORLD_UNITS" in this.defines; + }, + set: function(value) { + if (value === true) this.defines.WORLD_UNITS = ""; + else delete this.defines.WORLD_UNITS; + } + }, + linewidth: { + enumerable: true, + get: function() { + return this.uniforms.linewidth.value; + }, + set: function(value) { + this.uniforms.linewidth.value = value; + } + }, + dashed: { + enumerable: true, + get: function() { + return Boolean("USE_DASH" in this.defines); + }, + set(value) { + if (Boolean(value) !== Boolean("USE_DASH" in this.defines)) this.needsUpdate = true; + if (value === true) this.defines.USE_DASH = ""; + else delete this.defines.USE_DASH; + } + }, + dashScale: { + enumerable: true, + get: function() { + return this.uniforms.dashScale.value; + }, + set: function(value) { + this.uniforms.dashScale.value = value; + } + }, + dashSize: { + enumerable: true, + get: function() { + return this.uniforms.dashSize.value; + }, + set: function(value) { + this.uniforms.dashSize.value = value; + } + }, + dashOffset: { + enumerable: true, + get: function() { + return this.uniforms.dashOffset.value; + }, + set: function(value) { + this.uniforms.dashOffset.value = value; + } + }, + gapSize: { + enumerable: true, + get: function() { + return this.uniforms.gapSize.value; + }, + set: function(value) { + this.uniforms.gapSize.value = value; + } + }, + opacity: { + enumerable: true, + get: function() { + return this.uniforms.opacity.value; + }, + set: function(value) { + this.uniforms.opacity.value = value; + } + }, + resolution: { + enumerable: true, + get: function() { + return this.uniforms.resolution.value; + }, + set: function(value) { + this.uniforms.resolution.value.copy(value); + } + }, + alphaToCoverage: { + enumerable: true, + get: function() { + return Boolean("USE_ALPHA_TO_COVERAGE" in this.defines); + }, + set: function(value) { + if (Boolean(value) !== Boolean("USE_ALPHA_TO_COVERAGE" in this.defines)) this.needsUpdate = true; + if (value === true) { + this.defines.USE_ALPHA_TO_COVERAGE = ""; + this.extensions.derivatives = true; + } else { + delete this.defines.USE_ALPHA_TO_COVERAGE; + this.extensions.derivatives = false; + } + } + } + }); + this.setValues(parameters); + } +}; +//#endregion +//#region node_modules/three-stdlib/lines/LineSegments2.js +var _viewport = /* @__PURE__ */ new Vector4(); +var _start = /* @__PURE__ */ new Vector3(); +var _end = /* @__PURE__ */ new Vector3(); +var _start4 = /* @__PURE__ */ new Vector4(); +var _end4 = /* @__PURE__ */ new Vector4(); +var _ssOrigin = /* @__PURE__ */ new Vector4(); +var _ssOrigin3 = /* @__PURE__ */ new Vector3(); +var _mvMatrix = /* @__PURE__ */ new Matrix4(); +var _line = /* @__PURE__ */ new Line3(); +var _closestPoint = /* @__PURE__ */ new Vector3(); +var _box = /* @__PURE__ */ new Box3(); +var _sphere$3 = /* @__PURE__ */ new Sphere$1(); +var _clipToWorldVector = /* @__PURE__ */ new Vector4(); +var _ray$2, _lineWidth; +function getWorldSpaceHalfWidth(camera, distance, resolution) { + _clipToWorldVector.set(0, 0, -distance, 1).applyMatrix4(camera.projectionMatrix); + _clipToWorldVector.multiplyScalar(1 / _clipToWorldVector.w); + _clipToWorldVector.x = _lineWidth / resolution.width; + _clipToWorldVector.y = _lineWidth / resolution.height; + _clipToWorldVector.applyMatrix4(camera.projectionMatrixInverse); + _clipToWorldVector.multiplyScalar(1 / _clipToWorldVector.w); + return Math.abs(Math.max(_clipToWorldVector.x, _clipToWorldVector.y)); +} +function raycastWorldUnits(lineSegments, intersects) { + const matrixWorld = lineSegments.matrixWorld; + const geometry = lineSegments.geometry; + const instanceStart = geometry.attributes.instanceStart; + const instanceEnd = geometry.attributes.instanceEnd; + const segmentCount = Math.min(geometry.instanceCount, instanceStart.count); + for (let i = 0, l = segmentCount; i < l; i++) { + _line.start.fromBufferAttribute(instanceStart, i); + _line.end.fromBufferAttribute(instanceEnd, i); + _line.applyMatrix4(matrixWorld); + const pointOnLine = new Vector3(); + const point = new Vector3(); + _ray$2.distanceSqToSegment(_line.start, _line.end, point, pointOnLine); + if (point.distanceTo(pointOnLine) < _lineWidth * .5) intersects.push({ + point, + pointOnLine, + distance: _ray$2.origin.distanceTo(point), + object: lineSegments, + face: null, + faceIndex: i, + uv: null, + [UV1]: null + }); + } +} +function raycastScreenSpace(lineSegments, camera, intersects) { + const projectionMatrix = camera.projectionMatrix; + const resolution = lineSegments.material.resolution; + const matrixWorld = lineSegments.matrixWorld; + const geometry = lineSegments.geometry; + const instanceStart = geometry.attributes.instanceStart; + const instanceEnd = geometry.attributes.instanceEnd; + const segmentCount = Math.min(geometry.instanceCount, instanceStart.count); + const near = -camera.near; + _ray$2.at(1, _ssOrigin); + _ssOrigin.w = 1; + _ssOrigin.applyMatrix4(camera.matrixWorldInverse); + _ssOrigin.applyMatrix4(projectionMatrix); + _ssOrigin.multiplyScalar(1 / _ssOrigin.w); + _ssOrigin.x *= resolution.x / 2; + _ssOrigin.y *= resolution.y / 2; + _ssOrigin.z = 0; + _ssOrigin3.copy(_ssOrigin); + _mvMatrix.multiplyMatrices(camera.matrixWorldInverse, matrixWorld); + for (let i = 0, l = segmentCount; i < l; i++) { + _start4.fromBufferAttribute(instanceStart, i); + _end4.fromBufferAttribute(instanceEnd, i); + _start4.w = 1; + _end4.w = 1; + _start4.applyMatrix4(_mvMatrix); + _end4.applyMatrix4(_mvMatrix); + if (_start4.z > near && _end4.z > near) continue; + if (_start4.z > near) { + const deltaDist = _start4.z - _end4.z; + const t = (_start4.z - near) / deltaDist; + _start4.lerp(_end4, t); + } else if (_end4.z > near) { + const deltaDist = _end4.z - _start4.z; + const t = (_end4.z - near) / deltaDist; + _end4.lerp(_start4, t); + } + _start4.applyMatrix4(projectionMatrix); + _end4.applyMatrix4(projectionMatrix); + _start4.multiplyScalar(1 / _start4.w); + _end4.multiplyScalar(1 / _end4.w); + _start4.x *= resolution.x / 2; + _start4.y *= resolution.y / 2; + _end4.x *= resolution.x / 2; + _end4.y *= resolution.y / 2; + _line.start.copy(_start4); + _line.start.z = 0; + _line.end.copy(_end4); + _line.end.z = 0; + const param = _line.closestPointToPointParameter(_ssOrigin3, true); + _line.at(param, _closestPoint); + const zPos = MathUtils.lerp(_start4.z, _end4.z, param); + const isInClipSpace = zPos >= -1 && zPos <= 1; + const isInside = _ssOrigin3.distanceTo(_closestPoint) < _lineWidth * .5; + if (isInClipSpace && isInside) { + _line.start.fromBufferAttribute(instanceStart, i); + _line.end.fromBufferAttribute(instanceEnd, i); + _line.start.applyMatrix4(matrixWorld); + _line.end.applyMatrix4(matrixWorld); + const pointOnLine = new Vector3(); + const point = new Vector3(); + _ray$2.distanceSqToSegment(_line.start, _line.end, point, pointOnLine); + intersects.push({ + point, + pointOnLine, + distance: _ray$2.origin.distanceTo(point), + object: lineSegments, + face: null, + faceIndex: i, + uv: null, + [UV1]: null + }); + } + } +} +var LineSegments2 = class extends Mesh { + constructor(geometry = new LineSegmentsGeometry(), material = new LineMaterial({ color: Math.random() * 16777215 })) { + super(geometry, material); + this.isLineSegments2 = true; + this.type = "LineSegments2"; + } + computeLineDistances() { + const geometry = this.geometry; + const instanceStart = geometry.attributes.instanceStart; + const instanceEnd = geometry.attributes.instanceEnd; + const lineDistances = new Float32Array(2 * instanceStart.count); + for (let i = 0, j = 0, l = instanceStart.count; i < l; i++, j += 2) { + _start.fromBufferAttribute(instanceStart, i); + _end.fromBufferAttribute(instanceEnd, i); + lineDistances[j] = j === 0 ? 0 : lineDistances[j - 1]; + lineDistances[j + 1] = lineDistances[j] + _start.distanceTo(_end); + } + const instanceDistanceBuffer = new InstancedInterleavedBuffer(lineDistances, 2, 1); + geometry.setAttribute("instanceDistanceStart", new InterleavedBufferAttribute(instanceDistanceBuffer, 1, 0)); + geometry.setAttribute("instanceDistanceEnd", new InterleavedBufferAttribute(instanceDistanceBuffer, 1, 1)); + return this; + } + raycast(raycaster, intersects) { + const worldUnits = this.material.worldUnits; + const camera = raycaster.camera; + if (camera === null && !worldUnits) console.error("LineSegments2: \"Raycaster.camera\" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false."); + const threshold = raycaster.params.Line2 !== void 0 ? raycaster.params.Line2.threshold || 0 : 0; + _ray$2 = raycaster.ray; + const matrixWorld = this.matrixWorld; + const geometry = this.geometry; + const material = this.material; + _lineWidth = material.linewidth + threshold; + if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); + _sphere$3.copy(geometry.boundingSphere).applyMatrix4(matrixWorld); + let sphereMargin; + if (worldUnits) sphereMargin = _lineWidth * .5; + else sphereMargin = getWorldSpaceHalfWidth(camera, Math.max(camera.near, _sphere$3.distanceToPoint(_ray$2.origin)), material.resolution); + _sphere$3.radius += sphereMargin; + if (_ray$2.intersectsSphere(_sphere$3) === false) return; + if (geometry.boundingBox === null) geometry.computeBoundingBox(); + _box.copy(geometry.boundingBox).applyMatrix4(matrixWorld); + let boxMargin; + if (worldUnits) boxMargin = _lineWidth * .5; + else boxMargin = getWorldSpaceHalfWidth(camera, Math.max(camera.near, _box.distanceToPoint(_ray$2.origin)), material.resolution); + _box.expandByScalar(boxMargin); + if (_ray$2.intersectsBox(_box) === false) return; + if (worldUnits) raycastWorldUnits(this, intersects); + else raycastScreenSpace(this, camera, intersects); + } + onBeforeRender(renderer) { + const uniforms = this.material.uniforms; + if (uniforms && uniforms.resolution) { + renderer.getViewport(_viewport); + this.material.uniforms.resolution.value.set(_viewport.z, _viewport.w); + } + } +}; +//#endregion +//#region node_modules/three-stdlib/lines/Line2.js +var Line2 = class extends LineSegments2 { + constructor(geometry = new LineGeometry(), material = new LineMaterial({ color: Math.random() * 16777215 })) { + super(geometry, material); + this.isLine2 = true; + this.type = "Line2"; + } +}; +//#endregion +//#region node_modules/three-stdlib/libs/MeshoptDecoder.js +var generated; +var MeshoptDecoder = () => { + if (generated) return generated; + const wasm_base = "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"; + const wasm_simd = "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"; + const detector = new Uint8Array([ + 0, + 97, + 115, + 109, + 1, + 0, + 0, + 0, + 1, + 4, + 1, + 96, + 0, + 0, + 3, + 3, + 2, + 0, + 0, + 5, + 3, + 1, + 0, + 1, + 12, + 1, + 0, + 10, + 22, + 2, + 12, + 0, + 65, + 0, + 65, + 0, + 65, + 0, + 252, + 10, + 0, + 0, + 11, + 7, + 0, + 65, + 0, + 253, + 15, + 26, + 11 + ]); + const wasmpack = new Uint8Array([ + 32, + 0, + 65, + 253, + 3, + 1, + 2, + 34, + 4, + 106, + 6, + 5, + 11, + 8, + 7, + 20, + 13, + 33, + 12, + 16, + 128, + 9, + 116, + 64, + 19, + 113, + 127, + 15, + 10, + 21, + 22, + 14, + 255, + 66, + 24, + 54, + 136, + 107, + 18, + 23, + 192, + 26, + 114, + 118, + 132, + 17, + 77, + 101, + 130, + 144, + 27, + 87, + 131, + 44, + 45, + 74, + 156, + 154, + 70, + 167 + ]); + if (typeof WebAssembly !== "object") return { supported: false }; + let wasm = wasm_base; + if (WebAssembly.validate(detector)) wasm = wasm_simd; + let instance; + const promise = WebAssembly.instantiate(unpack(wasm), {}).then((result) => { + instance = result.instance; + instance.exports.__wasm_call_ctors(); + }); + function unpack(data) { + const result = new Uint8Array(data.length); + for (let i = 0; i < data.length; ++i) { + const ch = data.charCodeAt(i); + result[i] = ch > 96 ? ch - 71 : ch > 64 ? ch - 65 : ch > 47 ? ch + 4 : ch > 46 ? 63 : 62; + } + let write = 0; + for (let i = 0; i < data.length; ++i) result[write++] = result[i] < 60 ? wasmpack[result[i]] : (result[i] - 60) * 64 + result[++i]; + return result.buffer.slice(0, write); + } + function decode(fun, target, count, size, source, filter) { + const sbrk = instance.exports.sbrk; + const count4 = count + 3 & -4; + const tp = sbrk(count4 * size); + const sp = sbrk(source.length); + const heap = new Uint8Array(instance.exports.memory.buffer); + heap.set(source, sp); + const res = fun(tp, count, size, sp, source.length); + if (res === 0 && filter) filter(tp, count4, size); + target.set(heap.subarray(tp, tp + count * size)); + sbrk(tp - sbrk(0)); + if (res !== 0) throw new Error(`Malformed buffer data: ${res}`); + } + const filters = { + 0: "", + 1: "meshopt_decodeFilterOct", + 2: "meshopt_decodeFilterQuat", + 3: "meshopt_decodeFilterExp", + NONE: "", + OCTAHEDRAL: "meshopt_decodeFilterOct", + QUATERNION: "meshopt_decodeFilterQuat", + EXPONENTIAL: "meshopt_decodeFilterExp" + }; + const decoders = { + 0: "meshopt_decodeVertexBuffer", + 1: "meshopt_decodeIndexBuffer", + 2: "meshopt_decodeIndexSequence", + ATTRIBUTES: "meshopt_decodeVertexBuffer", + TRIANGLES: "meshopt_decodeIndexBuffer", + INDICES: "meshopt_decodeIndexSequence" + }; + generated = { + ready: promise, + supported: true, + decodeVertexBuffer(target, count, size, source, filter) { + decode(instance.exports.meshopt_decodeVertexBuffer, target, count, size, source, instance.exports[filters[filter]]); + }, + decodeIndexBuffer(target, count, size, source) { + decode(instance.exports.meshopt_decodeIndexBuffer, target, count, size, source); + }, + decodeIndexSequence(target, count, size, source) { + decode(instance.exports.meshopt_decodeIndexSequence, target, count, size, source); + }, + decodeGltfBuffer(target, count, size, source, mode, filter) { + decode(instance.exports[decoders[mode]], target, count, size, source, instance.exports[filters[filter]]); + } + }; + return generated; +}; +//#endregion //#region node_modules/zustand/esm/vanilla/shallow.mjs var isIterable = (obj) => Symbol.iterator in obj; var hasIterableEntries = (value) => "entries" in value; @@ -10917,7 +34001,7 @@ var ImageWithUrl = /* @__PURE__ */ import_react.forwardRef(({ url, ...props }, r var ImageWithTexture = /* @__PURE__ */ import_react.forwardRef(({ url: _url, ...props }, ref) => { return /*#__PURE__*/ import_react.createElement(ImageBase, _extends$1({}, props, { ref })); }); -var Image = /* @__PURE__ */ import_react.forwardRef((props, ref) => { +var Image$1 = /* @__PURE__ */ import_react.forwardRef((props, ref) => { if (props.url) return /*#__PURE__*/ import_react.createElement(ImageWithUrl, _extends$1({}, props, { ref })); else if (props.texture) return /*#__PURE__*/ import_react.createElement(ImageWithTexture, _extends$1({}, props, { ref })); else throw new Error(" requires a url or texture"); @@ -45181,7 +68265,7 @@ function useSpriteLoader(input, json, animationNames, numberOfFrames, onLoad, ca } setSpriteData(spriteDataRef.current); if ("encoding" in _spriteTexture) _spriteTexture.encoding = 3001; - else if ("colorSpace" in _spriteTexture) _spriteTexture.colorSpace = SRGBColorSpace; + else if ("colorSpace" in _spriteTexture) _spriteTexture.colorSpace = SRGBColorSpace$2; setSpriteTexture(_spriteTexture); setSpriteObj({ spriteTexture: _spriteTexture, @@ -52676,7 +75760,7 @@ var QuadRenderer = class QuadRenderer { * @returns */ toDataTexture(options) { - const returnValue = new DataTexture(this.toArray(), this.width, this.height, RGBAFormat, this._type, options?.mapping || 300, options?.wrapS || 1001, options?.wrapT || 1001, options?.magFilter || 1006, options?.minFilter || 1006, options?.anisotropy || 1, LinearSRGBColorSpace); + const returnValue = new DataTexture(this.toArray(), this.width, this.height, RGBAFormat, this._type, options?.mapping || 300, options?.wrapS || 1001, options?.wrapT || 1001, options?.magFilter || 1006, options?.minFilter || 1006, options?.anisotropy || 1, LinearSRGBColorSpace$2); returnValue.generateMipmaps = options?.generateMipmaps !== void 0 ? options?.generateMipmaps : false; return returnValue; } @@ -53071,7 +76155,7 @@ var LoaderBaseShared = class extends Loader$1 { width: 16, height: 16, type: HalfFloatType, - colorSpace: LinearSRGBColorSpace, + colorSpace: LinearSRGBColorSpace$2, material, renderer: this._renderer, renderTargetOptions: this._renderTargetOptions @@ -53100,10 +76184,10 @@ var LoaderBaseShared = class extends Loader$1 { }; } createTextures(sdrImage, gainMapImage, needsFlip) { - const gainMap = new Texture$1(gainMapImage || new ImageData(2, 2), 300, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, LinearMipMapLinearFilter, RGBAFormat, UnsignedByteType, 1, LinearSRGBColorSpace); + const gainMap = new Texture$1(gainMapImage || new ImageData(2, 2), 300, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, LinearMipMapLinearFilter, RGBAFormat, UnsignedByteType, 1, LinearSRGBColorSpace$2); gainMap.flipY = needsFlip; gainMap.needsUpdate = true; - const sdr = new Texture$1(sdrImage, 300, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, LinearMipMapLinearFilter, RGBAFormat, UnsignedByteType, 1, SRGBColorSpace); + const sdr = new Texture$1(sdrImage, 300, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, LinearMipMapLinearFilter, RGBAFormat, UnsignedByteType, 1, SRGBColorSpace$2); sdr.flipY = needsFlip; sdr.needsUpdate = true; return { @@ -66591,7 +89675,7 @@ var FaceControls = /* @__PURE__ */ (0, import_react.forwardRef)(({ camera, video const videoFrame = texture.source.data; setFaceLandmarkerResult(faceLandmarker == null ? void 0 : faceLandmarker.detectForVideo(videoFrame, now)); }, [faceLandmarker]); - const api = (0, import_react.useMemo)(() => Object.assign(Object.create(EventDispatcher$1.prototype), { + const api = (0, import_react.useMemo)(() => Object.assign(Object.create(EventDispatcher$2.prototype), { computeTarget, update, facemeshApiRef @@ -66636,6 +89720,6 @@ var FaceControls = /* @__PURE__ */ (0, import_react.forwardRef)(({ camera, video }); var useFaceControls = () => (0, import_react.useContext)(FaceControlsContext); //#endregion -export { AccumulativeShadows, AdaptiveDpr, AdaptiveEvents, ArcballControls, AsciiRenderer, BBAnchor, Backdrop, BakeShadows, Billboard, Bounds, Box, Bvh, CameraControls, CameraControls$1 as CameraControlsImpl, CameraShake, Capsule, CatmullRomLine, Caustics, Center, Circle, Clone, Cloud, CloudInstance, Clouds, ComputedAttribute, Cone, ContactShadows, CubeCamera, CubeTexture, CubicBezierLine, CurveModifier, CycleRaycast, Cylinder, Decal, Detailed, DetectGPU, DeviceOrientationControls, Dodecahedron, DragControls, Edges, Effects, Environment, EnvironmentCube, EnvironmentMap, EnvironmentPortal, Example, Extrude, FaceControls, FaceLandmarker, FaceLandmarkerDefaults, Facemesh, FacemeshDatas, FacemeshEye, FacemeshEyeDefaults, Fbo, Fbx, FirstPersonControls, Fisheye, Float, FlyControls, GizmoHelper, GizmoViewcube, GizmoViewport, Gltf, GradientTexture, GradientType, Grid, Helper, Html, Hud, Icosahedron, Image, Instance, InstancedAttribute, Instances, IsObject, KeyboardControls, Ktx2, Lathe, Lightformer, Line, Loader, MapControls, MarchingCube, MarchingCubes, MarchingPlane, Mask, MatcapTexture, Merged, MeshDiscardMaterial, MeshDistortMaterial, MeshPortalMaterial, MeshReflectorMaterial, MeshRefractionMaterial, MeshTransmissionMaterial, MeshWobbleMaterial, MotionPathControls, MultiMaterial, NormalTexture, Octahedron, OrbitControls, OrthographicCamera, Outlines, PerformanceMonitor, PerspectiveCamera, PivotControls, Plane, Point, PointMaterial, PointMaterialImpl, PointerLockControls, Points, PointsBuffer, Polyhedron, PositionMesh, PositionPoint, PositionalAudio, Preload, PresentationControls, Progress, QuadraticBezierLine, RandomizedLight, RenderCubeTexture, RenderTexture, Resize, Ring, RoundedBox, RoundedBoxGeometry, Sampler, ScreenQuad, ScreenSizer, ScreenSpace, ScreenVideoTexture, Scroll, ScrollControls, Segment, SegmentObject, Segments, Select, Shadow, ShadowAlpha, Shape, Sky, SoftShadows, Sparkles, Sphere, Splat, SpotLight, SpotLightShadow, SpriteAnimator, Stage, Stars, Stats, StatsGl, Svg, Tetrahedron, Text, Text3D, Texture, Torus, TorusKnot, TrackballControls, Trail, TrailTexture, TransformControls, Tube, VideoTexture, View, WebcamVideoTexture, Wireframe, accumulativeContext, calcPosFromAngles, calculateScaleFactor, checkIfFrameIsEmpty, createInstances, getFirstFrame, isWebGL2Available, meshBounds, shaderMaterial, useAnimations, useAspect, useBVH, useBounds, useBoxProjectedEnv, useCamera, useContextBridge, useCubeCamera, useCubeTexture, useCursor, useDepthBuffer, useDetectGPU, useEnvironment, useFBO, useFBX, useFaceControls, useFaceLandmarker, useFont, useGLTF, useGizmoContext, useHelper, useIntersect, useKTX2, useKeyboardControls, useMask, useMatcapTexture, useMotion, useNormalTexture, usePerformanceMonitor, useProgress, useScroll, useSelect, useSpriteAnimator, useSpriteLoader, useSurfaceSampler, useTexture, useTrail, useTrailTexture, useVideoTexture }; +export { AccumulativeShadows, AdaptiveDpr, AdaptiveEvents, ArcballControls, AsciiRenderer, BBAnchor, Backdrop, BakeShadows, Billboard, Bounds, Box, Bvh, CameraControls, CameraControls$1 as CameraControlsImpl, CameraShake, Capsule, CatmullRomLine, Caustics, Center, Circle, Clone, Cloud, CloudInstance, Clouds, ComputedAttribute, Cone, ContactShadows, CubeCamera, CubeTexture, CubicBezierLine, CurveModifier, CycleRaycast, Cylinder, Decal, Detailed, DetectGPU, DeviceOrientationControls, Dodecahedron, DragControls, Edges, Effects, Environment, EnvironmentCube, EnvironmentMap, EnvironmentPortal, Example, Extrude, FaceControls, FaceLandmarker, FaceLandmarkerDefaults, Facemesh, FacemeshDatas, FacemeshEye, FacemeshEyeDefaults, Fbo, Fbx, FirstPersonControls, Fisheye, Float, FlyControls, GizmoHelper, GizmoViewcube, GizmoViewport, Gltf, GradientTexture, GradientType, Grid, Helper, Html, Hud, Icosahedron, Image$1 as Image, Instance, InstancedAttribute, Instances, IsObject, KeyboardControls, Ktx2, Lathe, Lightformer, Line, Loader, MapControls, MarchingCube, MarchingCubes, MarchingPlane, Mask, MatcapTexture, Merged, MeshDiscardMaterial, MeshDistortMaterial, MeshPortalMaterial, MeshReflectorMaterial, MeshRefractionMaterial, MeshTransmissionMaterial, MeshWobbleMaterial, MotionPathControls, MultiMaterial, NormalTexture, Octahedron, OrbitControls, OrthographicCamera, Outlines, PerformanceMonitor, PerspectiveCamera, PivotControls, Plane, Point, PointMaterial, PointMaterialImpl, PointerLockControls, Points, PointsBuffer, Polyhedron, PositionMesh, PositionPoint, PositionalAudio, Preload, PresentationControls, Progress, QuadraticBezierLine, RandomizedLight, RenderCubeTexture, RenderTexture, Resize, Ring, RoundedBox, RoundedBoxGeometry, Sampler, ScreenQuad, ScreenSizer, ScreenSpace, ScreenVideoTexture, Scroll, ScrollControls, Segment, SegmentObject, Segments, Select, Shadow, ShadowAlpha, Shape, Sky, SoftShadows, Sparkles, Sphere, Splat, SpotLight, SpotLightShadow, SpriteAnimator, Stage, Stars, Stats, StatsGl, Svg, Tetrahedron, Text, Text3D, Texture, Torus, TorusKnot, TrackballControls, Trail, TrailTexture, TransformControls, Tube, VideoTexture, View, WebcamVideoTexture, Wireframe, accumulativeContext, calcPosFromAngles, calculateScaleFactor, checkIfFrameIsEmpty, createInstances, getFirstFrame, isWebGL2Available, meshBounds, shaderMaterial, useAnimations, useAspect, useBVH, useBounds, useBoxProjectedEnv, useCamera, useContextBridge, useCubeCamera, useCubeTexture, useCursor, useDepthBuffer, useDetectGPU, useEnvironment, useFBO, useFBX, useFaceControls, useFaceLandmarker, useFont, useGLTF, useGizmoContext, useHelper, useIntersect, useKTX2, useKeyboardControls, useMask, useMatcapTexture, useMotion, useNormalTexture, usePerformanceMonitor, useProgress, useScroll, useSelect, useSpriteAnimator, useSpriteLoader, useSurfaceSampler, useTexture, useTrail, useTrailTexture, useVideoTexture }; //# sourceMappingURL=@react-three_drei.js.map \ No newline at end of file diff --git a/node_modules/.vite/deps/@react-three_drei.js.map b/node_modules/.vite/deps/@react-three_drei.js.map index 56ef93c3..44548aae 100644 --- a/node_modules/.vite/deps/@react-three_drei.js.map +++ b/node_modules/.vite/deps/@react-three_drei.js.map @@ -1 +1 @@ -{"version":3,"file":"@react-three_drei.js","names":["_extends","OrthographicCamera","PerspectiveCamera","isRefObject","_extends","clamp","_toPrimitive","_toPropertyKey","_defineProperty","ownKeys","_objectSpread2","call","noop","identity","sharedConfig","_objectSpread2","THREE.Vector3","THREE.Vector2","THREE.Plane","THREE.Quaternion","THREE.Matrix4","_extends","_defineProperty","clamp","isLight","_position","col","context","context$1","_extends","_extends","context","create","context","THREE.Vector2","_extends","_extends","_extends","THREE.Vector3","_extends","_extends","_extends","_extends","_extends","_extends","assign","now","createSDFGenerator","now$1","Texture","Sphere","Text","_extends","clear","_extends","_extends","THREE.Color","_extends","THREE.ShaderMaterial","THREE.Uniform","version","THREE.Color","THREE.Vector2","version","_extends","THREE.EdgesGeometry","_extends","THREE.Color","THREE.Vector2","version","THREE.SkinnedMesh","THREE.InstancedMesh","THREE.Mesh","_extends","THREE.BufferGeometry","THREE.Vector3","THREE.Vector2","THREE.Matrix4","THREE.BufferAttribute","vertexShader","fragmentShader","THREE.ShaderMaterial","THREE.Color","defaults","_extends","_extends","THREE.Mesh","_extends","globalContext","_extends","THREE.Vector3","isArray","THREE.Vector3","THREE.Euler","THREE.Mesh","THREE.Object3D","_extends","_extends","Fragment","_extends","THREE.Vector2","version","THREE.Loader","THREE.DataTexture","THREE.RGBAFormat","THREE.FloatType","THREE.RGBAIntegerFormat","THREE.UnsignedIntType","THREE.Matrix4","THREE.Vector4","THREE.InstancedBufferAttribute","THREE.DynamicDrawUsage","THREE.InstancedBufferGeometry","THREE.BufferAttribute","THREE.Quaternion","THREE.Vector3","THREE.Color","_extends","THREE.WebGLRenderTarget","THREE.LinearFilter","THREE.HalfFloatType","THREE.DepthTexture","THREE.FloatType","isFunction","_extends","_extends","THREE.CubeCamera","_extends","_extends","_extends","_extends","_extends","_extends","THREE.Object3D","_extends","_extends","_extends","isOrthographicCamera","_sphere","CameraControls","bufferGeometry","CameraControlsImpl","_extends","THREE.Object3D","THREE.MeshBasicMaterial","THREE.SphereGeometry","THREE.CurvePath","THREE.Vector3","THREE.CatmullRomCurve3","_extends","THREE.Scene","_extends","_extends","THREE.Color","THREE.Vector3","version","THREE.Plane","_extends","_extends","calculateOffset","intersection","THREE.VideoTexture","THREE.Texture","THREE.TextureLoader","THREE.Vector3","THREE.SRGBColorSpace","StatsImpl","Stats","Stats","i","getGPUTier","Plane","Sphere","Plane","temp1","_vA","_raycast","_xyzFields","_raycastFirst","boundingBox","triangle","triangle2","invertedMat","obb","obb2","_intersectsGeometry","tempMatrix","obb","obb2","temp1","temp2","temp3","temp4","boundingBox","obb","obb2","tempMatrix","obb","ray","_mesh","Sphere","BVHShaderGLSL.bvh_struct_definitions","BVHShaderGLSL.common_functions","BVHShaderGLSL.bvh_ray_functions","_extends","THREE.Vector3","THREE.Box3","THREE.Vector3","_extends","Texture","Sphere","_extends","THREE.Matrix4","THREE.Mesh","THREE.Group","THREE.Color","THREE.Material","parentMatrix","translation","THREE.Vector3","rotation","THREE.Quaternion","scale","_extends","THREE.DynamicDrawUsage","context","THREE.PlaneGeometry","THREE.Group","THREE.Texture","THREE.Vector3","THREE.RepeatWrapping","_extends","THREE.Scene","_extends","_extends","THREE.ShaderMaterial","THREE.Vector2","THREE.Uniform","version","MeshReflectorMaterial","Plane","PerspectiveCamera","_extends","MeshRefractionMaterial","THREE.Color","THREE.Vector2","THREE.Matrix4","version","_extends","THREE.MeshPhysicalMaterial","THREE.Color","_extends","_extends","_extends","version","THREE.PointsMaterial","_extends","create","_extends","THREE.Box3","THREE.Vector3","THREE.Float32BufferAttribute","Shape","_extends","THREE.BufferGeometry","THREE.Sphere","THREE.Vector3","THREE.BufferAttribute","_extends","THREE.Box3","_extends","context","THREE.Vector3","THREE.Quaternion","THREE.Box3","THREE.Matrix4","OrthographicCamera","Texture","Loader","Texture","isRef","_extends","THREE.WebGLRenderTarget","THREE.PlaneGeometry","THREE.Mesh","THREE.MeshDepthMaterial","THREE.Color","THREE.ShaderMaterial","_extends","isGeometry","THREE.Color","version","THREE.Vector3","_extends","THREE.HalfFloatType","THREE.NearestFilter","THREE.WebGLRenderTarget","THREE.MeshLambertMaterial","_extends","_extends","THREE.Matrix4","THREE.MeshNormalMaterial","THREE.Color","version","THREE.Vector3","THREE.LinearFilter","THREE.UnsignedByteType","THREE.LinearMipmapLinearFilter","THREE.FloatType","THREE.CameraHelper","THREE.Frustum","THREE.Plane","THREE.Box3","_extends","THREE.ShaderMaterial","THREE.Vector3","THREE.Color","THREE.Vector2","version","_extends","THREE.Vector3","_extends","_extends","version","parentMatrix","context","_extends","THREE.ShaderMaterial","version","THREE.Vector2","THREE.Vector3","THREE.Vector4","THREE.Color","_extends","LIST_URL","THREE.Color","THREE.BufferAttribute","_extends","THREE.RGBADepthPacking","_inverseMatrix","THREE.Matrix4","_ray","THREE.Ray","_sphere","THREE.Sphere","THREE.Vector3","THREE.Group","THREE.Color","context","_extends","THREE.DynamicDrawUsage","context","THREE.Vector2","_extends","THREE.Color","THREE.Vector3","_extends","CubeCamera","Sphere","context","THREE.Scene","THREE.Object3D","Container","_extends","THREE.WebGLCubeRenderTarget","THREE.HalfFloatType","THREE.Scene","Container","_extends","THREE.ReplaceStencilOp","_extends","THREE.KeepStencilOp","THREE.OrthographicCamera","THREE.Vector3","THREE.Sphere","THREE.Matrix3","_extends","THREE.Quaternion","THREE.Euler","THREE.Vector2","version","THREE.Mesh","THREE.MeshBasicMaterial","THREE.Box3","THREE.OrthographicCamera","_extends","THREE.ShaderMaterial","THREE.WebGLRenderTarget","THREE.LinearMipmapLinearFilter","THREE.LinearFilter","THREE.FloatType","THREE.RedFormat","THREE.NearestFilter","ReactExports","useSyncExternalStoreExports","THREE.Color","THREE.Scene","_extends","context","vec1","THREE.Vector3","vec2","calculateOffset","upV","offsetMatrix","THREE.Matrix4","THREE.Quaternion","THREE.Vector3","THREE.Matrix4","ray","THREE.Ray","intersection","THREE.Plane","THREE.Ray","THREE.Vector3","THREE.Matrix4","THREE.Plane","THREE.Vector3","THREE.Matrix4","THREE.Quaternion","THREE.Matrix4","THREE.Box3","THREE.Vector3","_extends","_extends","_extends","THREE.Vector3","mean","THREE.Object3D","THREE.Quaternion","THREE.Sphere","THREE.Euler","THREE.Object3D","THREE.Vector3","Suspense","_extends"],"sources":["../../@babel/runtime/helpers/esm/extends.js","../../@react-three/drei/web/Html.js","../../@react-three/drei/web/CycleRaycast.js","../../@react-three/drei/web/useCursor.js","../../@react-three/drei/core/Progress.js","../../@react-three/drei/web/Loader.js","../../@use-gesture/core/dist/maths-0ab39ae9.esm.js","../../@use-gesture/core/dist/actions-fe213e88.esm.js","../../@use-gesture/core/dist/use-gesture-core.esm.js","../../@use-gesture/react/dist/use-gesture-react.esm.js","../../@react-three/drei/web/DragControls.js","../../maath/dist/objectSpread2-284232a6.esm.js","../../maath/dist/isNativeReflectConstruct-5594d075.esm.js","../../maath/dist/matrix-baa530bf.esm.js","../../maath/dist/triangle-b62b9067.esm.js","../../maath/dist/misc-19a3ec46.esm.js","../../maath/dist/classCallCheck-9098b006.esm.js","../../maath/dist/index-0332b2ed.esm.js","../../maath/dist/easing-0f4db1c0.esm.js","../../@react-three/drei/web/ScrollControls.js","../../@react-three/drei/web/PresentationControls.js","../../zustand/esm/middleware.mjs","../../@react-three/drei/web/KeyboardControls.js","../../zustand/esm/vanilla/shallow.mjs","../../@react-three/drei/web/Select.js","../../@react-three/drei/core/Billboard.js","../../@react-three/drei/core/ScreenSpace.js","../../@react-three/drei/core/calculateScaleFactor.js","../../@react-three/drei/core/ScreenSizer.js","../../@react-three/drei/core/Line.js","../../@react-three/drei/core/QuadraticBezierLine.js","../../@react-three/drei/core/CubicBezierLine.js","../../@react-three/drei/core/CatmullRomLine.js","../../@react-three/drei/core/PositionalAudio.js","../../troika-worker-utils/dist/troika-worker-utils.esm.js","../../webgl-sdf-generator/dist/webgl-sdf-generator.mjs","../../bidi-js/dist/bidi.mjs","../../troika-three-utils/dist/troika-three-utils.esm.js","../../troika-three-text/dist/troika-three-text.esm.js","../../@react-three/drei/core/Text.js","../../@react-three/drei/core/useFont.js","../../@react-three/drei/core/Text3D.js","../../@react-three/drei/core/Effects.js","../../@react-three/drei/core/GradientTexture.js","../../@react-three/drei/core/shaderMaterial.js","../../@react-three/drei/core/Texture.js","../../@react-three/drei/helpers/constants.js","../../@react-three/drei/core/Image.js","../../@react-three/drei/core/Edges.js","../../@react-three/drei/core/Outlines.js","../../meshline/dist/index.js","../../@react-three/drei/core/Trail.js","../../@react-three/drei/core/Sampler.js","../../@react-three/drei/core/ComputedAttribute.js","../../@react-three/drei/core/Clone.js","../../@react-three/drei/core/MarchingCubes.js","../../@react-three/drei/core/Decal.js","../../@react-three/drei/core/Svg.js","../../@react-three/drei/core/Gltf.js","../../@react-three/drei/core/AsciiRenderer.js","../../@react-three/drei/core/Splat.js","../../@react-three/drei/core/Fbo.js","../../@react-three/drei/core/OrthographicCamera.js","../../@react-three/drei/core/PerspectiveCamera.js","../../@react-three/drei/core/CubeCamera.js","../../@react-three/drei/core/DeviceOrientationControls.js","../../@react-three/drei/core/FlyControls.js","../../@react-three/drei/core/MapControls.js","../../@react-three/drei/core/OrbitControls.js","../../@react-three/drei/core/TrackballControls.js","../../@react-three/drei/core/ArcballControls.js","../../@react-three/drei/core/TransformControls.js","../../@react-three/drei/core/PointerLockControls.js","../../@react-three/drei/core/FirstPersonControls.js","../../camera-controls/dist/camera-controls.module.js","../../@react-three/drei/core/CameraControls.js","../../@react-three/drei/core/MotionPathControls.js","../../@react-three/drei/core/Hud.js","../../@react-three/drei/core/GizmoHelper.js","../../@react-three/drei/core/GizmoViewcube.js","../../@react-three/drei/core/GizmoViewport.js","../../@react-three/drei/core/Grid.js","../../@react-three/drei/core/CubeTexture.js","../../@react-three/drei/core/Fbx.js","../../@react-three/drei/core/Ktx2.js","../../hls.js/dist/hls.mjs","../../@react-three/drei/core/VideoTexture.js","../../@react-three/drei/core/useSpriteLoader.js","../../@react-three/drei/core/Helper.js","../../stats.js/build/stats.min.js","../../@react-three/drei/helpers/useEffectfulState.js","../../@react-three/drei/core/Stats.js","../../stats-gl/dist/panel.js","../../stats-gl/dist/main.js","../../@react-three/drei/core/StatsGl.js","../../@react-three/drei/core/useDepthBuffer.js","../../@react-three/drei/core/useAspect.js","../../@react-three/drei/core/useCamera.js","../../detect-gpu/dist/detect-gpu.esm.js","../../@react-three/drei/core/DetectGPU.js","../../three-mesh-bvh/src/core/Constants.js","../../three-mesh-bvh/src/core/build/geometryUtils.js","../../three-mesh-bvh/src/core/build/computeBoundsUtils.js","../../three-mesh-bvh/src/utils/ArrayBoxUtilities.js","../../three-mesh-bvh/src/core/build/splitUtils.js","../../three-mesh-bvh/src/core/MeshBVHNode.js","../../three-mesh-bvh/src/core/build/sortUtils.generated.js","../../three-mesh-bvh/src/core/build/sortUtils_indirect.generated.js","../../three-mesh-bvh/src/core/utils/nodeBufferUtils.js","../../three-mesh-bvh/src/core/build/buildUtils.js","../../three-mesh-bvh/src/core/build/buildTree.js","../../three-mesh-bvh/src/math/SeparatingAxisBounds.js","../../three-mesh-bvh/src/math/MathUtilities.js","../../three-mesh-bvh/src/math/ExtendedTriangle.js","../../three-mesh-bvh/src/math/OrientedBox.js","../../three-mesh-bvh/src/utils/PrimitivePool.js","../../three-mesh-bvh/src/utils/ExtendedTrianglePool.js","../../three-mesh-bvh/src/core/utils/BufferStack.js","../../three-mesh-bvh/src/core/cast/shapecast.js","../../three-mesh-bvh/src/core/cast/closestPointToPoint.js","../../three-mesh-bvh/src/utils/ThreeRayIntersectUtilities.js","../../three-mesh-bvh/src/utils/TriangleUtilities.js","../../three-mesh-bvh/src/core/utils/iterationUtils.generated.js","../../three-mesh-bvh/src/core/cast/refit.generated.js","../../three-mesh-bvh/src/core/utils/intersectUtils.js","../../three-mesh-bvh/src/core/utils/iterationUtils_indirect.generated.js","../../three-mesh-bvh/src/core/cast/raycast.generated.js","../../three-mesh-bvh/src/core/cast/raycastFirst.generated.js","../../three-mesh-bvh/src/core/cast/intersectsGeometry.generated.js","../../three-mesh-bvh/src/core/cast/closestPointToGeometry.generated.js","../../three-mesh-bvh/src/core/cast/refit_indirect.generated.js","../../three-mesh-bvh/src/core/cast/raycast_indirect.generated.js","../../three-mesh-bvh/src/core/cast/raycastFirst_indirect.generated.js","../../three-mesh-bvh/src/core/cast/intersectsGeometry_indirect.generated.js","../../three-mesh-bvh/src/core/cast/closestPointToGeometry_indirect.generated.js","../../three-mesh-bvh/src/utils/BufferUtils.js","../../three-mesh-bvh/src/core/cast/bvhcast.js","../../three-mesh-bvh/src/core/MeshBVH.js","../../three-mesh-bvh/src/utils/GeometryRayIntersectUtilities.js","../../three-mesh-bvh/src/utils/ExtensionUtilities.js","../../three-mesh-bvh/src/gpu/VertexAttributeTexture.js","../../three-mesh-bvh/src/gpu/MeshBVHUniformStruct.js","../../three-mesh-bvh/src/gpu/glsl/common_functions.glsl.js","../../three-mesh-bvh/src/gpu/glsl/bvh_ray_functions.glsl.js","../../three-mesh-bvh/src/gpu/glsl/bvh_struct_definitions.glsl.js","../../three-mesh-bvh/src/index.js","../../@react-three/drei/core/Bvh.js","../../@react-three/drei/core/useContextBridge.js","../../@react-three/drei/core/useAnimations.js","../../@react-three/drei/core/useIntersect.js","../../@react-three/drei/core/useBoxProjectedEnv.js","../../@react-three/drei/core/BBAnchor.js","../../@react-three/drei/core/TrailTexture.js","../../@react-three/drei/core/Center.js","../../@react-three/drei/core/Example.js","../../@react-three/drei/helpers/deprecated.js","../../@react-three/drei/core/Instances.js","../../@react-three/drei/core/SpriteAnimator.js","../../@react-three/drei/core/CurveModifier.js","../../@react-three/drei/helpers/glsl/distort.vert.glsl.js","../../@react-three/drei/core/MeshDistortMaterial.js","../../@react-three/drei/core/MeshWobbleMaterial.js","../../@react-three/drei/materials/ConvolutionMaterial.js","../../@react-three/drei/materials/BlurPass.js","../../@react-three/drei/materials/MeshReflectorMaterial.js","../../@react-three/drei/core/MeshReflectorMaterial.js","../../@react-three/drei/materials/MeshRefractionMaterial.js","../../@react-three/drei/core/MeshRefractionMaterial.js","../../@react-three/drei/materials/DiscardMaterial.js","../../@react-three/drei/core/MeshTransmissionMaterial.js","../../@react-three/drei/core/MeshDiscardMaterial.js","../../@react-three/drei/core/MultiMaterial.js","../../@react-three/drei/core/PointMaterial.js","../../@react-three/drei/core/softShadows.js","../../@react-three/drei/core/shapes.js","../../@react-three/drei/core/RoundedBox.js","../../@react-three/drei/core/ScreenQuad.js","../../@react-three/drei/core/Resize.js","../../@react-three/drei/core/Bounds.js","../../@react-three/drei/core/CameraShake.js","../../@react-three/drei/core/Float.js","../../@monogrid/gainmap-js/dist/QuadRenderer-Bj1xl_EK.js","../../@monogrid/gainmap-js/dist/Loader-DLI-_JDP.js","../../@monogrid/gainmap-js/dist/decode.js","../../@react-three/drei/helpers/environment-assets.js","../../@react-three/drei/core/useEnvironment.js","../../@react-three/drei/core/Environment.js","../../@react-three/drei/core/ContactShadows.js","../../@react-three/drei/core/AccumulativeShadows.js","../../@react-three/drei/core/Stage.js","../../@react-three/drei/core/Backdrop.js","../../@react-three/drei/core/Shadow.js","../../@react-three/drei/core/Caustics.js","../../@react-three/drei/materials/SpotLightMaterial.js","../../@react-three/drei/helpers/glsl/DefaultSpotlightShadowShadows.glsl.js","../../@react-three/drei/core/SpotLight.js","../../@react-three/drei/core/Lightformer.js","../../@react-three/drei/core/Sky.js","../../@react-three/drei/core/Stars.js","../../@react-three/drei/core/Cloud.js","../../@react-three/drei/core/Sparkles.js","../../@react-three/drei/core/MatcapTexture.js","../../@react-three/drei/core/NormalTexture.js","../../@react-three/drei/materials/WireframeMaterial.js","../../@react-three/drei/core/Wireframe.js","../../@react-three/drei/core/ShadowAlpha.js","../../@react-three/drei/core/Points.js","../../@react-three/drei/core/Segments.js","../../@react-three/drei/core/Detailed.js","../../@react-three/drei/core/Preload.js","../../@react-three/drei/core/BakeShadows.js","../../@react-three/drei/core/meshBounds.js","../../@react-three/drei/core/AdaptiveDpr.js","../../@react-three/drei/core/AdaptiveEvents.js","../../@react-three/drei/core/PerformanceMonitor.js","../../@react-three/drei/core/RenderTexture.js","../../@react-three/drei/core/RenderCubeTexture.js","../../@react-three/drei/core/Mask.js","../../@react-three/drei/core/Fisheye.js","../../@react-three/drei/core/MeshPortalMaterial.js","../../tunnel-rat/node_modules/zustand/esm/vanilla.mjs","../../tunnel-rat/node_modules/zustand/esm/index.mjs","../../tunnel-rat/dist/index.js","../../@react-three/drei/web/View.js","../../@react-three/drei/web/pivotControls/context.js","../../@react-three/drei/web/pivotControls/AxisArrow.js","../../@react-three/drei/web/pivotControls/AxisRotator.js","../../@react-three/drei/web/pivotControls/PlaneSlider.js","../../@react-three/drei/web/pivotControls/ScalingSphere.js","../../@react-three/drei/web/pivotControls/index.js","../../@react-three/drei/web/ScreenVideoTexture.js","../../@react-three/drei/web/WebcamVideoTexture.js","../../@react-three/drei/web/Facemesh.js","../../@react-three/drei/web/FaceLandmarker.js","../../@react-three/drei/web/FaceControls.js"],"sourcesContent":["function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom/client';\nimport { Vector3, DoubleSide, OrthographicCamera, PerspectiveCamera, Vector2 } from 'three';\nimport { useThree, useFrame } from '@react-three/fiber';\n\nconst v1 = /* @__PURE__ */new Vector3();\nconst v2 = /* @__PURE__ */new Vector3();\nconst v3 = /* @__PURE__ */new Vector3();\nconst v4 = /* @__PURE__ */new Vector2();\nfunction defaultCalculatePosition(el, camera, size) {\n const objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n objectPos.project(camera);\n const widthHalf = size.width / 2;\n const heightHalf = size.height / 2;\n return [objectPos.x * widthHalf + widthHalf, -(objectPos.y * heightHalf) + heightHalf];\n}\nfunction isObjectBehindCamera(el, camera) {\n const objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n const cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);\n const deltaCamObj = objectPos.sub(cameraPos);\n const camDir = camera.getWorldDirection(v3);\n return deltaCamObj.angleTo(camDir) > Math.PI / 2;\n}\nfunction isObjectVisible(el, camera, raycaster, occlude) {\n const elPos = v1.setFromMatrixPosition(el.matrixWorld);\n const screenPos = elPos.clone();\n screenPos.project(camera);\n v4.set(screenPos.x, screenPos.y);\n raycaster.setFromCamera(v4, camera);\n const intersects = raycaster.intersectObjects(occlude, true);\n if (intersects.length) {\n const intersectionDistance = intersects[0].distance;\n const pointDistance = elPos.distanceTo(raycaster.ray.origin);\n return pointDistance < intersectionDistance;\n }\n return true;\n}\nfunction objectScale(el, camera) {\n if (camera instanceof OrthographicCamera) {\n return camera.zoom;\n } else if (camera instanceof PerspectiveCamera) {\n const objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n const cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);\n const vFOV = camera.fov * Math.PI / 180;\n const dist = objectPos.distanceTo(cameraPos);\n const scaleFOV = 2 * Math.tan(vFOV / 2) * dist;\n return 1 / scaleFOV;\n } else {\n return 1;\n }\n}\nfunction objectZIndex(el, camera, zIndexRange) {\n if (camera instanceof PerspectiveCamera || camera instanceof OrthographicCamera) {\n const objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n const cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);\n const dist = objectPos.distanceTo(cameraPos);\n const A = (zIndexRange[1] - zIndexRange[0]) / (camera.far - camera.near);\n const B = zIndexRange[1] - A * camera.far;\n return Math.round(A * dist + B);\n }\n return undefined;\n}\nconst epsilon = value => Math.abs(value) < 1e-10 ? 0 : value;\nfunction getCSSMatrix(matrix, multipliers, prepend = '') {\n let matrix3d = 'matrix3d(';\n for (let i = 0; i !== 16; i++) {\n matrix3d += epsilon(multipliers[i] * matrix.elements[i]) + (i !== 15 ? ',' : ')');\n }\n return prepend + matrix3d;\n}\nconst getCameraCSSMatrix = (multipliers => {\n return matrix => getCSSMatrix(matrix, multipliers);\n})([1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1]);\nconst getObjectCSSMatrix = (scaleMultipliers => {\n return (matrix, factor) => getCSSMatrix(matrix, scaleMultipliers(factor), 'translate(-50%,-50%)');\n})(f => [1 / f, 1 / f, 1 / f, 1, -1 / f, -1 / f, -1 / f, -1, 1 / f, 1 / f, 1 / f, 1, 1, 1, 1, 1]);\nfunction isRefObject(ref) {\n return ref && typeof ref === 'object' && 'current' in ref;\n}\nconst Html = /* @__PURE__ */React.forwardRef(({\n children,\n eps = 0.001,\n style,\n className,\n prepend,\n center,\n fullscreen,\n portal,\n distanceFactor,\n sprite = false,\n transform = false,\n occlude,\n onOcclude,\n castShadow,\n receiveShadow,\n material,\n geometry,\n zIndexRange = [16777271, 0],\n calculatePosition = defaultCalculatePosition,\n as = 'div',\n wrapperClass,\n pointerEvents = 'auto',\n ...props\n}, ref) => {\n const {\n gl,\n camera,\n scene,\n size,\n raycaster,\n events,\n viewport\n } = useThree();\n const [el] = React.useState(() => document.createElement(as));\n const root = React.useRef(null);\n const group = React.useRef(null);\n const oldZoom = React.useRef(0);\n const oldPosition = React.useRef([0, 0]);\n const transformOuterRef = React.useRef(null);\n const transformInnerRef = React.useRef(null);\n // Append to the connected element, which makes HTML work with views\n const target = (portal == null ? void 0 : portal.current) || events.connected || gl.domElement.parentNode;\n const occlusionMeshRef = React.useRef(null);\n const isMeshSizeSet = React.useRef(false);\n const isRayCastOcclusion = React.useMemo(() => {\n return occlude && occlude !== 'blending' || Array.isArray(occlude) && occlude.length && isRefObject(occlude[0]);\n }, [occlude]);\n React.useLayoutEffect(() => {\n const el = gl.domElement;\n if (occlude && occlude === 'blending') {\n el.style.zIndex = `${Math.floor(zIndexRange[0] / 2)}`;\n el.style.position = 'absolute';\n el.style.pointerEvents = 'none';\n } else {\n el.style.zIndex = null;\n el.style.position = null;\n el.style.pointerEvents = null;\n }\n }, [occlude]);\n React.useLayoutEffect(() => {\n if (group.current) {\n const currentRoot = root.current = ReactDOM.createRoot(el);\n scene.updateMatrixWorld();\n if (transform) {\n el.style.cssText = `position:absolute;top:0;left:0;pointer-events:none;overflow:hidden;`;\n } else {\n const vec = calculatePosition(group.current, camera, size);\n el.style.cssText = `position:absolute;top:0;left:0;transform:translate3d(${vec[0]}px,${vec[1]}px,0);transform-origin:0 0;`;\n }\n if (target) {\n if (prepend) target.prepend(el);else target.appendChild(el);\n }\n return () => {\n if (target) target.removeChild(el);\n currentRoot.unmount();\n };\n }\n }, [target, transform]);\n React.useLayoutEffect(() => {\n if (wrapperClass) el.className = wrapperClass;\n }, [wrapperClass]);\n const styles = React.useMemo(() => {\n if (transform) {\n return {\n position: 'absolute',\n top: 0,\n left: 0,\n width: size.width,\n height: size.height,\n transformStyle: 'preserve-3d',\n pointerEvents: 'none'\n };\n } else {\n return {\n position: 'absolute',\n transform: center ? 'translate3d(-50%,-50%,0)' : 'none',\n ...(fullscreen && {\n top: -size.height / 2,\n left: -size.width / 2,\n width: size.width,\n height: size.height\n }),\n ...style\n };\n }\n }, [style, center, fullscreen, size, transform]);\n const transformInnerStyles = React.useMemo(() => ({\n position: 'absolute',\n pointerEvents\n }), [pointerEvents]);\n React.useLayoutEffect(() => {\n isMeshSizeSet.current = false;\n if (transform) {\n var _root$current;\n (_root$current = root.current) == null || _root$current.render(/*#__PURE__*/React.createElement(\"div\", {\n ref: transformOuterRef,\n style: styles\n }, /*#__PURE__*/React.createElement(\"div\", {\n ref: transformInnerRef,\n style: transformInnerStyles\n }, /*#__PURE__*/React.createElement(\"div\", {\n ref: ref,\n className: className,\n style: style,\n children: children\n }))));\n } else {\n var _root$current2;\n (_root$current2 = root.current) == null || _root$current2.render(/*#__PURE__*/React.createElement(\"div\", {\n ref: ref,\n style: styles,\n className: className,\n children: children\n }));\n }\n });\n const visible = React.useRef(true);\n useFrame(gl => {\n if (group.current) {\n camera.updateMatrixWorld();\n group.current.updateWorldMatrix(true, false);\n const vec = transform ? oldPosition.current : calculatePosition(group.current, camera, size);\n if (transform || Math.abs(oldZoom.current - camera.zoom) > eps || Math.abs(oldPosition.current[0] - vec[0]) > eps || Math.abs(oldPosition.current[1] - vec[1]) > eps) {\n const isBehindCamera = isObjectBehindCamera(group.current, camera);\n let raytraceTarget = false;\n if (isRayCastOcclusion) {\n if (Array.isArray(occlude)) {\n raytraceTarget = occlude.map(item => item.current);\n } else if (occlude !== 'blending') {\n raytraceTarget = [scene];\n }\n }\n const previouslyVisible = visible.current;\n if (raytraceTarget) {\n const isvisible = isObjectVisible(group.current, camera, raycaster, raytraceTarget);\n visible.current = isvisible && !isBehindCamera;\n } else {\n visible.current = !isBehindCamera;\n }\n if (previouslyVisible !== visible.current) {\n if (onOcclude) onOcclude(!visible.current);else el.style.display = visible.current ? 'block' : 'none';\n }\n const halfRange = Math.floor(zIndexRange[0] / 2);\n const zRange = occlude ? isRayCastOcclusion //\n ? [zIndexRange[0], halfRange] : [halfRange - 1, 0] : zIndexRange;\n el.style.zIndex = `${objectZIndex(group.current, camera, zRange)}`;\n if (transform) {\n const [widthHalf, heightHalf] = [size.width / 2, size.height / 2];\n const fov = camera.projectionMatrix.elements[5] * heightHalf;\n const {\n isOrthographicCamera,\n top,\n left,\n bottom,\n right\n } = camera;\n const cameraMatrix = getCameraCSSMatrix(camera.matrixWorldInverse);\n const cameraTransform = isOrthographicCamera ? `scale(${fov})translate(${epsilon(-(right + left) / 2)}px,${epsilon((top + bottom) / 2)}px)` : `translateZ(${fov}px)`;\n let matrix = group.current.matrixWorld;\n if (sprite) {\n matrix = camera.matrixWorldInverse.clone().transpose().copyPosition(matrix).scale(group.current.scale);\n matrix.elements[3] = matrix.elements[7] = matrix.elements[11] = 0;\n matrix.elements[15] = 1;\n }\n el.style.width = size.width + 'px';\n el.style.height = size.height + 'px';\n el.style.perspective = isOrthographicCamera ? '' : `${fov}px`;\n if (transformOuterRef.current && transformInnerRef.current) {\n transformOuterRef.current.style.transform = `${cameraTransform}${cameraMatrix}translate(${widthHalf}px,${heightHalf}px)`;\n transformInnerRef.current.style.transform = getObjectCSSMatrix(matrix, 1 / ((distanceFactor || 10) / 400));\n }\n } else {\n const scale = distanceFactor === undefined ? 1 : objectScale(group.current, camera) * distanceFactor;\n el.style.transform = `translate3d(${vec[0]}px,${vec[1]}px,0) scale(${scale})`;\n }\n oldPosition.current = vec;\n oldZoom.current = camera.zoom;\n }\n }\n if (!isRayCastOcclusion && occlusionMeshRef.current && !isMeshSizeSet.current) {\n if (transform) {\n if (transformOuterRef.current) {\n const el = transformOuterRef.current.children[0];\n if (el != null && el.clientWidth && el != null && el.clientHeight) {\n const {\n isOrthographicCamera\n } = camera;\n if (isOrthographicCamera || geometry) {\n if (props.scale) {\n if (!Array.isArray(props.scale)) {\n occlusionMeshRef.current.scale.setScalar(1 / props.scale);\n } else if (props.scale instanceof Vector3) {\n occlusionMeshRef.current.scale.copy(props.scale.clone().divideScalar(1));\n } else {\n occlusionMeshRef.current.scale.set(1 / props.scale[0], 1 / props.scale[1], 1 / props.scale[2]);\n }\n }\n } else {\n const ratio = (distanceFactor || 10) / 400;\n const w = el.clientWidth * ratio;\n const h = el.clientHeight * ratio;\n occlusionMeshRef.current.scale.set(w, h, 1);\n }\n isMeshSizeSet.current = true;\n }\n }\n } else {\n const ele = el.children[0];\n if (ele != null && ele.clientWidth && ele != null && ele.clientHeight) {\n const ratio = 1 / viewport.factor;\n const w = ele.clientWidth * ratio;\n const h = ele.clientHeight * ratio;\n occlusionMeshRef.current.scale.set(w, h, 1);\n isMeshSizeSet.current = true;\n }\n occlusionMeshRef.current.lookAt(gl.camera.position);\n }\n }\n });\n const shaders = React.useMemo(() => ({\n vertexShader: !transform ? /* glsl */`\n /*\n This shader is from the THREE's SpriteMaterial.\n We need to turn the backing plane into a Sprite\n (make it always face the camera) if \"transfrom\"\n is false.\n */\n #include \n\n void main() {\n vec2 center = vec2(0., 1.);\n float rotation = 0.0;\n\n // This is somewhat arbitrary, but it seems to work well\n // Need to figure out how to derive this dynamically if it even matters\n float size = 0.03;\n\n vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n vec2 scale;\n scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\n bool isPerspective = isPerspectiveMatrix( projectionMatrix );\n if ( isPerspective ) scale *= - mvPosition.z;\n\n vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale * size;\n vec2 rotatedPosition;\n rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n mvPosition.xy += rotatedPosition;\n\n gl_Position = projectionMatrix * mvPosition;\n }\n ` : undefined,\n fragmentShader: /* glsl */`\n void main() {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n `\n }), [transform]);\n return /*#__PURE__*/React.createElement(\"group\", _extends({}, props, {\n ref: group\n }), occlude && !isRayCastOcclusion && /*#__PURE__*/React.createElement(\"mesh\", {\n castShadow: castShadow,\n receiveShadow: receiveShadow,\n ref: occlusionMeshRef\n }, geometry || /*#__PURE__*/React.createElement(\"planeGeometry\", null), material || /*#__PURE__*/React.createElement(\"shaderMaterial\", {\n side: DoubleSide,\n vertexShader: shaders.vertexShader,\n fragmentShader: shaders.fragmentShader\n })));\n});\n\nexport { Html };\n","import * as React from 'react';\nimport { useThree } from '@react-three/fiber';\n\nfunction CycleRaycast({\n onChanged,\n portal,\n preventDefault = true,\n scroll = true,\n keyCode = 9\n}) {\n const cycle = React.useRef(0);\n const setEvents = useThree(state => state.setEvents);\n const get = useThree(state => state.get);\n const gl = useThree(state => state.gl);\n React.useEffect(() => {\n var _portal$current;\n let hits = [];\n let lastEvent = undefined;\n const prev = get().events.filter;\n const target = (_portal$current = portal == null ? void 0 : portal.current) !== null && _portal$current !== void 0 ? _portal$current : gl.domElement.parentNode;\n\n // Render custom status\n const renderStatus = () => target && onChanged && onChanged(hits, Math.round(cycle.current) % hits.length);\n\n // Overwrite the raycasters custom filter (this only exists in r3f)\n setEvents({\n filter: (intersections, state) => {\n // Reset cycle when the intersections change\n let clone = [...intersections];\n if (clone.length !== hits.length || !hits.every(hit => clone.map(e => e.object.uuid).includes(hit.object.uuid))) {\n cycle.current = 0;\n hits = clone;\n renderStatus();\n }\n // Run custom filter if there is one\n if (prev) clone = prev(clone, state);\n // Cycle through the actual raycast intersects\n for (let i = 0; i < Math.round(cycle.current) % clone.length; i++) {\n const first = clone.shift();\n clone = [...clone, first];\n }\n return clone;\n }\n });\n\n // Cycle, refresh events and render status\n const refresh = fn => {\n var _get$events$handlers, _get$events$handlers2;\n cycle.current = fn(cycle.current);\n // Cancel hovered elements and fake a pointer-move\n (_get$events$handlers = get().events.handlers) == null || _get$events$handlers.onPointerCancel(undefined);\n (_get$events$handlers2 = get().events.handlers) == null || _get$events$handlers2.onPointerMove(lastEvent);\n renderStatus();\n };\n\n // Key events\n const tabEvent = event => {\n if ((event.keyCode || event.which) === keyCode) {\n if (preventDefault) event.preventDefault();\n if (hits.length > 1) refresh(current => current + 1);\n }\n };\n\n // Wheel events\n const wheelEvent = event => {\n if (preventDefault) event.preventDefault();\n let delta = 0;\n if (!event) event = window.event;\n if (event.wheelDelta) delta = event.wheelDelta / 120;else if (event.detail) delta = -event.detail / 3;\n if (hits.length > 1) refresh(current => Math.abs(current - delta));\n };\n\n // Catch last move event and position custom status\n const moveEvent = event => lastEvent = event;\n document.addEventListener('pointermove', moveEvent, {\n passive: true\n });\n if (scroll) document.addEventListener('wheel', wheelEvent);\n if (keyCode !== undefined) document.addEventListener('keydown', tabEvent);\n return () => {\n // Clean up\n setEvents({\n filter: prev\n });\n if (keyCode !== undefined) document.removeEventListener('keydown', tabEvent);\n if (scroll) document.removeEventListener('wheel', wheelEvent);\n document.removeEventListener('pointermove', moveEvent);\n };\n }, [gl, get, setEvents, preventDefault, scroll, keyCode]);\n return null;\n}\n\nexport { CycleRaycast };\n","import * as React from 'react';\n\nfunction useCursor(hovered, onPointerOver = 'pointer', onPointerOut = 'auto', container = document.body) {\n React.useEffect(() => {\n if (hovered) {\n container.style.cursor = onPointerOver;\n return () => void (container.style.cursor = onPointerOut);\n }\n }, [hovered]);\n}\n\nexport { useCursor };\n","import * as React from 'react';\nimport { DefaultLoadingManager } from 'three';\nimport { create } from 'zustand';\n\nlet saveLastTotalLoaded = 0;\nconst useProgress = /* @__PURE__ */create(set => {\n DefaultLoadingManager.onStart = (item, loaded, total) => {\n set({\n active: true,\n item,\n loaded,\n total,\n progress: (loaded - saveLastTotalLoaded) / (total - saveLastTotalLoaded) * 100\n });\n };\n DefaultLoadingManager.onLoad = () => {\n set({\n active: false\n });\n };\n DefaultLoadingManager.onError = item => set(state => ({\n errors: [...state.errors, item]\n }));\n DefaultLoadingManager.onProgress = (item, loaded, total) => {\n if (loaded === total) {\n saveLastTotalLoaded = total;\n }\n set({\n active: true,\n item,\n loaded,\n total,\n progress: (loaded - saveLastTotalLoaded) / (total - saveLastTotalLoaded) * 100 || 100\n });\n };\n return {\n errors: [],\n active: false,\n progress: 0,\n item: '',\n loaded: 0,\n total: 0\n };\n});\n\n//\n\nfunction Progress({\n children\n}) {\n const result = useProgress();\n return /*#__PURE__*/React.createElement(React.Fragment, null, children == null ? void 0 : children(result));\n}\n\nexport { Progress, useProgress };\n","import * as React from 'react';\nimport { useProgress } from '../core/Progress.js';\n\nconst defaultDataInterpolation = p => `Loading ${p.toFixed(2)}%`;\nfunction Loader({\n containerStyles,\n innerStyles,\n barStyles,\n dataStyles,\n dataInterpolation = defaultDataInterpolation,\n initialState = active => active\n}) {\n const {\n active,\n progress\n } = useProgress();\n const progressRef = React.useRef(0);\n const rafRef = React.useRef(0);\n const progressSpanRef = React.useRef(null);\n const [shown, setShown] = React.useState(initialState(active));\n React.useEffect(() => {\n let t;\n if (active !== shown) t = setTimeout(() => setShown(active), 300);\n return () => clearTimeout(t);\n }, [shown, active]);\n const updateProgress = React.useCallback(() => {\n if (!progressSpanRef.current) return;\n progressRef.current += (progress - progressRef.current) / 2;\n if (progressRef.current > 0.95 * progress || progress === 100) progressRef.current = progress;\n progressSpanRef.current.innerText = dataInterpolation(progressRef.current);\n if (progressRef.current < progress) rafRef.current = requestAnimationFrame(updateProgress);\n }, [dataInterpolation, progress]);\n React.useEffect(() => {\n updateProgress();\n return () => cancelAnimationFrame(rafRef.current);\n }, [updateProgress]);\n return shown ? /*#__PURE__*/React.createElement(\"div\", {\n style: {\n ...styles.container,\n opacity: active ? 1 : 0,\n ...containerStyles\n }\n }, /*#__PURE__*/React.createElement(\"div\", null, /*#__PURE__*/React.createElement(\"div\", {\n style: {\n ...styles.inner,\n ...innerStyles\n }\n }, /*#__PURE__*/React.createElement(\"div\", {\n style: {\n ...styles.bar,\n transform: `scaleX(${progress / 100})`,\n ...barStyles\n }\n }), /*#__PURE__*/React.createElement(\"span\", {\n ref: progressSpanRef,\n style: {\n ...styles.data,\n ...dataStyles\n }\n })))) : null;\n}\nconst styles = {\n container: {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: '#171717',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'opacity 300ms ease',\n zIndex: 1000\n },\n inner: {\n width: 100,\n height: 3,\n background: '#272727',\n textAlign: 'center'\n },\n bar: {\n height: 3,\n width: '100%',\n background: 'white',\n transition: 'transform 200ms',\n transformOrigin: 'left center'\n },\n data: {\n display: 'inline-block',\n position: 'relative',\n fontVariantNumeric: 'tabular-nums',\n marginTop: '0.8em',\n color: '#f0f0f0',\n fontSize: '0.6em',\n fontFamily: `-apple-system, BlinkMacSystemFont, \"Inter\", \"Segoe UI\", \"Helvetica Neue\", Helvetica, Arial, Roboto, Ubuntu, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"`,\n whiteSpace: 'nowrap'\n }\n};\n\nexport { Loader };\n","function clamp(v, min, max) {\n return Math.max(min, Math.min(v, max));\n}\nconst V = {\n toVector(v, fallback) {\n if (v === undefined) v = fallback;\n return Array.isArray(v) ? v : [v, v];\n },\n add(v1, v2) {\n return [v1[0] + v2[0], v1[1] + v2[1]];\n },\n sub(v1, v2) {\n return [v1[0] - v2[0], v1[1] - v2[1]];\n },\n addTo(v1, v2) {\n v1[0] += v2[0];\n v1[1] += v2[1];\n },\n subTo(v1, v2) {\n v1[0] -= v2[0];\n v1[1] -= v2[1];\n }\n};\nfunction rubberband(distance, dimension, constant) {\n if (dimension === 0 || Math.abs(dimension) === Infinity) return Math.pow(distance, constant * 5);\n return distance * dimension * constant / (dimension + constant * distance);\n}\nfunction rubberbandIfOutOfBounds(position, min, max, constant = 0.15) {\n if (constant === 0) return clamp(position, min, max);\n if (position < min) return -rubberband(min - position, max - min, constant) + min;\n if (position > max) return +rubberband(position - max, max - min, constant) + max;\n return position;\n}\nfunction computeRubberband(bounds, [Vx, Vy], [Rx, Ry]) {\n const [[X0, X1], [Y0, Y1]] = bounds;\n return [rubberbandIfOutOfBounds(Vx, X0, X1, Rx), rubberbandIfOutOfBounds(Vy, Y0, Y1, Ry)];\n}\n\nexport { V, computeRubberband as c, rubberbandIfOutOfBounds as r };\n","import { V, c as computeRubberband } from './maths-0ab39ae9.esm.js';\n\nfunction _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\n\nfunction _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n}\n\nfunction _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\n\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\n\nconst EVENT_TYPE_MAP = {\n pointer: {\n start: 'down',\n change: 'move',\n end: 'up'\n },\n mouse: {\n start: 'down',\n change: 'move',\n end: 'up'\n },\n touch: {\n start: 'start',\n change: 'move',\n end: 'end'\n },\n gesture: {\n start: 'start',\n change: 'change',\n end: 'end'\n }\n};\nfunction capitalize(string) {\n if (!string) return '';\n return string[0].toUpperCase() + string.slice(1);\n}\nconst actionsWithoutCaptureSupported = ['enter', 'leave'];\nfunction hasCapture(capture = false, actionKey) {\n return capture && !actionsWithoutCaptureSupported.includes(actionKey);\n}\nfunction toHandlerProp(device, action = '', capture = false) {\n const deviceProps = EVENT_TYPE_MAP[device];\n const actionKey = deviceProps ? deviceProps[action] || action : action;\n return 'on' + capitalize(device) + capitalize(actionKey) + (hasCapture(capture, actionKey) ? 'Capture' : '');\n}\nconst pointerCaptureEvents = ['gotpointercapture', 'lostpointercapture'];\nfunction parseProp(prop) {\n let eventKey = prop.substring(2).toLowerCase();\n const passive = !!~eventKey.indexOf('passive');\n if (passive) eventKey = eventKey.replace('passive', '');\n const captureKey = pointerCaptureEvents.includes(eventKey) ? 'capturecapture' : 'capture';\n const capture = !!~eventKey.indexOf(captureKey);\n if (capture) eventKey = eventKey.replace('capture', '');\n return {\n device: eventKey,\n capture,\n passive\n };\n}\nfunction toDomEventType(device, action = '') {\n const deviceProps = EVENT_TYPE_MAP[device];\n const actionKey = deviceProps ? deviceProps[action] || action : action;\n return device + actionKey;\n}\nfunction isTouch(event) {\n return 'touches' in event;\n}\nfunction getPointerType(event) {\n if (isTouch(event)) return 'touch';\n if ('pointerType' in event) return event.pointerType;\n return 'mouse';\n}\nfunction getCurrentTargetTouchList(event) {\n return Array.from(event.touches).filter(e => {\n var _event$currentTarget, _event$currentTarget$;\n return e.target === event.currentTarget || ((_event$currentTarget = event.currentTarget) === null || _event$currentTarget === void 0 || (_event$currentTarget$ = _event$currentTarget.contains) === null || _event$currentTarget$ === void 0 ? void 0 : _event$currentTarget$.call(_event$currentTarget, e.target));\n });\n}\nfunction getTouchList(event) {\n return event.type === 'touchend' || event.type === 'touchcancel' ? event.changedTouches : event.targetTouches;\n}\nfunction getValueEvent(event) {\n return isTouch(event) ? getTouchList(event)[0] : event;\n}\nfunction distanceAngle(P1, P2) {\n try {\n const dx = P2.clientX - P1.clientX;\n const dy = P2.clientY - P1.clientY;\n const cx = (P2.clientX + P1.clientX) / 2;\n const cy = (P2.clientY + P1.clientY) / 2;\n const distance = Math.hypot(dx, dy);\n const angle = -(Math.atan2(dx, dy) * 180) / Math.PI;\n const origin = [cx, cy];\n return {\n angle,\n distance,\n origin\n };\n } catch (_unused) {}\n return null;\n}\nfunction touchIds(event) {\n return getCurrentTargetTouchList(event).map(touch => touch.identifier);\n}\nfunction touchDistanceAngle(event, ids) {\n const [P1, P2] = Array.from(event.touches).filter(touch => ids.includes(touch.identifier));\n return distanceAngle(P1, P2);\n}\nfunction pointerId(event) {\n const valueEvent = getValueEvent(event);\n return isTouch(event) ? valueEvent.identifier : valueEvent.pointerId;\n}\nfunction pointerValues(event) {\n const valueEvent = getValueEvent(event);\n return [valueEvent.clientX, valueEvent.clientY];\n}\nconst LINE_HEIGHT = 40;\nconst PAGE_HEIGHT = 800;\nfunction wheelValues(event) {\n let {\n deltaX,\n deltaY,\n deltaMode\n } = event;\n if (deltaMode === 1) {\n deltaX *= LINE_HEIGHT;\n deltaY *= LINE_HEIGHT;\n } else if (deltaMode === 2) {\n deltaX *= PAGE_HEIGHT;\n deltaY *= PAGE_HEIGHT;\n }\n return [deltaX, deltaY];\n}\nfunction scrollValues(event) {\n var _ref, _ref2;\n const {\n scrollX,\n scrollY,\n scrollLeft,\n scrollTop\n } = event.currentTarget;\n return [(_ref = scrollX !== null && scrollX !== void 0 ? scrollX : scrollLeft) !== null && _ref !== void 0 ? _ref : 0, (_ref2 = scrollY !== null && scrollY !== void 0 ? scrollY : scrollTop) !== null && _ref2 !== void 0 ? _ref2 : 0];\n}\nfunction getEventDetails(event) {\n const payload = {};\n if ('buttons' in event) payload.buttons = event.buttons;\n if ('shiftKey' in event) {\n const {\n shiftKey,\n altKey,\n metaKey,\n ctrlKey\n } = event;\n Object.assign(payload, {\n shiftKey,\n altKey,\n metaKey,\n ctrlKey\n });\n }\n return payload;\n}\n\nfunction call(v, ...args) {\n if (typeof v === 'function') {\n return v(...args);\n } else {\n return v;\n }\n}\nfunction noop() {}\nfunction chain(...fns) {\n if (fns.length === 0) return noop;\n if (fns.length === 1) return fns[0];\n return function () {\n let result;\n for (const fn of fns) {\n result = fn.apply(this, arguments) || result;\n }\n return result;\n };\n}\nfunction assignDefault(value, fallback) {\n return Object.assign({}, fallback, value || {});\n}\n\nconst BEFORE_LAST_KINEMATICS_DELAY = 32;\nclass Engine {\n constructor(ctrl, args, key) {\n this.ctrl = ctrl;\n this.args = args;\n this.key = key;\n if (!this.state) {\n this.state = {};\n this.computeValues([0, 0]);\n this.computeInitial();\n if (this.init) this.init();\n this.reset();\n }\n }\n get state() {\n return this.ctrl.state[this.key];\n }\n set state(state) {\n this.ctrl.state[this.key] = state;\n }\n get shared() {\n return this.ctrl.state.shared;\n }\n get eventStore() {\n return this.ctrl.gestureEventStores[this.key];\n }\n get timeoutStore() {\n return this.ctrl.gestureTimeoutStores[this.key];\n }\n get config() {\n return this.ctrl.config[this.key];\n }\n get sharedConfig() {\n return this.ctrl.config.shared;\n }\n get handler() {\n return this.ctrl.handlers[this.key];\n }\n reset() {\n const {\n state,\n shared,\n ingKey,\n args\n } = this;\n shared[ingKey] = state._active = state.active = state._blocked = state._force = false;\n state._step = [false, false];\n state.intentional = false;\n state._movement = [0, 0];\n state._distance = [0, 0];\n state._direction = [0, 0];\n state._delta = [0, 0];\n state._bounds = [[-Infinity, Infinity], [-Infinity, Infinity]];\n state.args = args;\n state.axis = undefined;\n state.memo = undefined;\n state.elapsedTime = state.timeDelta = 0;\n state.direction = [0, 0];\n state.distance = [0, 0];\n state.overflow = [0, 0];\n state._movementBound = [false, false];\n state.velocity = [0, 0];\n state.movement = [0, 0];\n state.delta = [0, 0];\n state.timeStamp = 0;\n }\n start(event) {\n const state = this.state;\n const config = this.config;\n if (!state._active) {\n this.reset();\n this.computeInitial();\n state._active = true;\n state.target = event.target;\n state.currentTarget = event.currentTarget;\n state.lastOffset = config.from ? call(config.from, state) : state.offset;\n state.offset = state.lastOffset;\n state.startTime = state.timeStamp = event.timeStamp;\n }\n }\n computeValues(values) {\n const state = this.state;\n state._values = values;\n state.values = this.config.transform(values);\n }\n computeInitial() {\n const state = this.state;\n state._initial = state._values;\n state.initial = state.values;\n }\n compute(event) {\n const {\n state,\n config,\n shared\n } = this;\n state.args = this.args;\n let dt = 0;\n if (event) {\n state.event = event;\n if (config.preventDefault && event.cancelable) state.event.preventDefault();\n state.type = event.type;\n shared.touches = this.ctrl.pointerIds.size || this.ctrl.touchIds.size;\n shared.locked = !!document.pointerLockElement;\n Object.assign(shared, getEventDetails(event));\n shared.down = shared.pressed = shared.buttons % 2 === 1 || shared.touches > 0;\n dt = event.timeStamp - state.timeStamp;\n state.timeStamp = event.timeStamp;\n state.elapsedTime = state.timeStamp - state.startTime;\n }\n if (state._active) {\n const _absoluteDelta = state._delta.map(Math.abs);\n V.addTo(state._distance, _absoluteDelta);\n }\n if (this.axisIntent) this.axisIntent(event);\n const [_m0, _m1] = state._movement;\n const [t0, t1] = config.threshold;\n const {\n _step,\n values\n } = state;\n if (config.hasCustomTransform) {\n if (_step[0] === false) _step[0] = Math.abs(_m0) >= t0 && values[0];\n if (_step[1] === false) _step[1] = Math.abs(_m1) >= t1 && values[1];\n } else {\n if (_step[0] === false) _step[0] = Math.abs(_m0) >= t0 && Math.sign(_m0) * t0;\n if (_step[1] === false) _step[1] = Math.abs(_m1) >= t1 && Math.sign(_m1) * t1;\n }\n state.intentional = _step[0] !== false || _step[1] !== false;\n if (!state.intentional) return;\n const movement = [0, 0];\n if (config.hasCustomTransform) {\n const [v0, v1] = values;\n movement[0] = _step[0] !== false ? v0 - _step[0] : 0;\n movement[1] = _step[1] !== false ? v1 - _step[1] : 0;\n } else {\n movement[0] = _step[0] !== false ? _m0 - _step[0] : 0;\n movement[1] = _step[1] !== false ? _m1 - _step[1] : 0;\n }\n if (this.restrictToAxis && !state._blocked) this.restrictToAxis(movement);\n const previousOffset = state.offset;\n const gestureIsActive = state._active && !state._blocked || state.active;\n if (gestureIsActive) {\n state.first = state._active && !state.active;\n state.last = !state._active && state.active;\n state.active = shared[this.ingKey] = state._active;\n if (event) {\n if (state.first) {\n if ('bounds' in config) state._bounds = call(config.bounds, state);\n if (this.setup) this.setup();\n }\n state.movement = movement;\n this.computeOffset();\n }\n }\n const [ox, oy] = state.offset;\n const [[x0, x1], [y0, y1]] = state._bounds;\n state.overflow = [ox < x0 ? -1 : ox > x1 ? 1 : 0, oy < y0 ? -1 : oy > y1 ? 1 : 0];\n state._movementBound[0] = state.overflow[0] ? state._movementBound[0] === false ? state._movement[0] : state._movementBound[0] : false;\n state._movementBound[1] = state.overflow[1] ? state._movementBound[1] === false ? state._movement[1] : state._movementBound[1] : false;\n const rubberband = state._active ? config.rubberband || [0, 0] : [0, 0];\n state.offset = computeRubberband(state._bounds, state.offset, rubberband);\n state.delta = V.sub(state.offset, previousOffset);\n this.computeMovement();\n if (gestureIsActive && (!state.last || dt > BEFORE_LAST_KINEMATICS_DELAY)) {\n state.delta = V.sub(state.offset, previousOffset);\n const absoluteDelta = state.delta.map(Math.abs);\n V.addTo(state.distance, absoluteDelta);\n state.direction = state.delta.map(Math.sign);\n state._direction = state._delta.map(Math.sign);\n if (!state.first && dt > 0) {\n state.velocity = [absoluteDelta[0] / dt, absoluteDelta[1] / dt];\n state.timeDelta = dt;\n }\n }\n }\n emit() {\n const state = this.state;\n const shared = this.shared;\n const config = this.config;\n if (!state._active) this.clean();\n if ((state._blocked || !state.intentional) && !state._force && !config.triggerAllEvents) return;\n const memo = this.handler(_objectSpread2(_objectSpread2(_objectSpread2({}, shared), state), {}, {\n [this.aliasKey]: state.values\n }));\n if (memo !== undefined) state.memo = memo;\n }\n clean() {\n this.eventStore.clean();\n this.timeoutStore.clean();\n }\n}\n\nfunction selectAxis([dx, dy], threshold) {\n const absDx = Math.abs(dx);\n const absDy = Math.abs(dy);\n if (absDx > absDy && absDx > threshold) {\n return 'x';\n }\n if (absDy > absDx && absDy > threshold) {\n return 'y';\n }\n return undefined;\n}\nclass CoordinatesEngine extends Engine {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"aliasKey\", 'xy');\n }\n reset() {\n super.reset();\n this.state.axis = undefined;\n }\n init() {\n this.state.offset = [0, 0];\n this.state.lastOffset = [0, 0];\n }\n computeOffset() {\n this.state.offset = V.add(this.state.lastOffset, this.state.movement);\n }\n computeMovement() {\n this.state.movement = V.sub(this.state.offset, this.state.lastOffset);\n }\n axisIntent(event) {\n const state = this.state;\n const config = this.config;\n if (!state.axis && event) {\n const threshold = typeof config.axisThreshold === 'object' ? config.axisThreshold[getPointerType(event)] : config.axisThreshold;\n state.axis = selectAxis(state._movement, threshold);\n }\n state._blocked = (config.lockDirection || !!config.axis) && !state.axis || !!config.axis && config.axis !== state.axis;\n }\n restrictToAxis(v) {\n if (this.config.axis || this.config.lockDirection) {\n switch (this.state.axis) {\n case 'x':\n v[1] = 0;\n break;\n case 'y':\n v[0] = 0;\n break;\n }\n }\n }\n}\n\nconst identity = v => v;\nconst DEFAULT_RUBBERBAND = 0.15;\nconst commonConfigResolver = {\n enabled(value = true) {\n return value;\n },\n eventOptions(value, _k, config) {\n return _objectSpread2(_objectSpread2({}, config.shared.eventOptions), value);\n },\n preventDefault(value = false) {\n return value;\n },\n triggerAllEvents(value = false) {\n return value;\n },\n rubberband(value = 0) {\n switch (value) {\n case true:\n return [DEFAULT_RUBBERBAND, DEFAULT_RUBBERBAND];\n case false:\n return [0, 0];\n default:\n return V.toVector(value);\n }\n },\n from(value) {\n if (typeof value === 'function') return value;\n if (value != null) return V.toVector(value);\n },\n transform(value, _k, config) {\n const transform = value || config.shared.transform;\n this.hasCustomTransform = !!transform;\n if (process.env.NODE_ENV === 'development') {\n const originalTransform = transform || identity;\n return v => {\n const r = originalTransform(v);\n if (!isFinite(r[0]) || !isFinite(r[1])) {\n console.warn(`[@use-gesture]: config.transform() must produce a valid result, but it was: [${r[0]},${[1]}]`);\n }\n return r;\n };\n }\n return transform || identity;\n },\n threshold(value) {\n return V.toVector(value, 0);\n }\n};\nif (process.env.NODE_ENV === 'development') {\n Object.assign(commonConfigResolver, {\n domTarget(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`domTarget\\` option has been renamed to \\`target\\`.`);\n }\n return NaN;\n },\n lockDirection(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`lockDirection\\` option has been merged with \\`axis\\`. Use it as in \\`{ axis: 'lock' }\\``);\n }\n return NaN;\n },\n initial(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`initial\\` option has been renamed to \\`from\\`.`);\n }\n return NaN;\n }\n });\n}\n\nconst DEFAULT_AXIS_THRESHOLD = 0;\nconst coordinatesConfigResolver = _objectSpread2(_objectSpread2({}, commonConfigResolver), {}, {\n axis(_v, _k, {\n axis\n }) {\n this.lockDirection = axis === 'lock';\n if (!this.lockDirection) return axis;\n },\n axisThreshold(value = DEFAULT_AXIS_THRESHOLD) {\n return value;\n },\n bounds(value = {}) {\n if (typeof value === 'function') {\n return state => coordinatesConfigResolver.bounds(value(state));\n }\n if ('current' in value) {\n return () => value.current;\n }\n if (typeof HTMLElement === 'function' && value instanceof HTMLElement) {\n return value;\n }\n const {\n left = -Infinity,\n right = Infinity,\n top = -Infinity,\n bottom = Infinity\n } = value;\n return [[left, right], [top, bottom]];\n }\n});\n\nconst KEYS_DELTA_MAP = {\n ArrowRight: (displacement, factor = 1) => [displacement * factor, 0],\n ArrowLeft: (displacement, factor = 1) => [-1 * displacement * factor, 0],\n ArrowUp: (displacement, factor = 1) => [0, -1 * displacement * factor],\n ArrowDown: (displacement, factor = 1) => [0, displacement * factor]\n};\nclass DragEngine extends CoordinatesEngine {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"ingKey\", 'dragging');\n }\n reset() {\n super.reset();\n const state = this.state;\n state._pointerId = undefined;\n state._pointerActive = false;\n state._keyboardActive = false;\n state._preventScroll = false;\n state._delayed = false;\n state.swipe = [0, 0];\n state.tap = false;\n state.canceled = false;\n state.cancel = this.cancel.bind(this);\n }\n setup() {\n const state = this.state;\n if (state._bounds instanceof HTMLElement) {\n const boundRect = state._bounds.getBoundingClientRect();\n const targetRect = state.currentTarget.getBoundingClientRect();\n const _bounds = {\n left: boundRect.left - targetRect.left + state.offset[0],\n right: boundRect.right - targetRect.right + state.offset[0],\n top: boundRect.top - targetRect.top + state.offset[1],\n bottom: boundRect.bottom - targetRect.bottom + state.offset[1]\n };\n state._bounds = coordinatesConfigResolver.bounds(_bounds);\n }\n }\n cancel() {\n const state = this.state;\n if (state.canceled) return;\n state.canceled = true;\n state._active = false;\n setTimeout(() => {\n this.compute();\n this.emit();\n }, 0);\n }\n setActive() {\n this.state._active = this.state._pointerActive || this.state._keyboardActive;\n }\n clean() {\n this.pointerClean();\n this.state._pointerActive = false;\n this.state._keyboardActive = false;\n super.clean();\n }\n pointerDown(event) {\n const config = this.config;\n const state = this.state;\n if (event.buttons != null && (Array.isArray(config.pointerButtons) ? !config.pointerButtons.includes(event.buttons) : config.pointerButtons !== -1 && config.pointerButtons !== event.buttons)) return;\n const ctrlIds = this.ctrl.setEventIds(event);\n if (config.pointerCapture) {\n event.target.setPointerCapture(event.pointerId);\n }\n if (ctrlIds && ctrlIds.size > 1 && state._pointerActive) return;\n this.start(event);\n this.setupPointer(event);\n state._pointerId = pointerId(event);\n state._pointerActive = true;\n this.computeValues(pointerValues(event));\n this.computeInitial();\n if (config.preventScrollAxis && getPointerType(event) !== 'mouse') {\n state._active = false;\n this.setupScrollPrevention(event);\n } else if (config.delay > 0) {\n this.setupDelayTrigger(event);\n if (config.triggerAllEvents) {\n this.compute(event);\n this.emit();\n }\n } else {\n this.startPointerDrag(event);\n }\n }\n startPointerDrag(event) {\n const state = this.state;\n state._active = true;\n state._preventScroll = true;\n state._delayed = false;\n this.compute(event);\n this.emit();\n }\n pointerMove(event) {\n const state = this.state;\n const config = this.config;\n if (!state._pointerActive) return;\n const id = pointerId(event);\n if (state._pointerId !== undefined && id !== state._pointerId) return;\n const _values = pointerValues(event);\n if (document.pointerLockElement === event.target) {\n state._delta = [event.movementX, event.movementY];\n } else {\n state._delta = V.sub(_values, state._values);\n this.computeValues(_values);\n }\n V.addTo(state._movement, state._delta);\n this.compute(event);\n if (state._delayed && state.intentional) {\n this.timeoutStore.remove('dragDelay');\n state.active = false;\n this.startPointerDrag(event);\n return;\n }\n if (config.preventScrollAxis && !state._preventScroll) {\n if (state.axis) {\n if (state.axis === config.preventScrollAxis || config.preventScrollAxis === 'xy') {\n state._active = false;\n this.clean();\n return;\n } else {\n this.timeoutStore.remove('startPointerDrag');\n this.startPointerDrag(event);\n return;\n }\n } else {\n return;\n }\n }\n this.emit();\n }\n pointerUp(event) {\n this.ctrl.setEventIds(event);\n try {\n if (this.config.pointerCapture && event.target.hasPointerCapture(event.pointerId)) {\n ;\n event.target.releasePointerCapture(event.pointerId);\n }\n } catch (_unused) {\n if (process.env.NODE_ENV === 'development') {\n console.warn(`[@use-gesture]: If you see this message, it's likely that you're using an outdated version of \\`@react-three/fiber\\`. \\n\\nPlease upgrade to the latest version.`);\n }\n }\n const state = this.state;\n const config = this.config;\n if (!state._active || !state._pointerActive) return;\n const id = pointerId(event);\n if (state._pointerId !== undefined && id !== state._pointerId) return;\n this.state._pointerActive = false;\n this.setActive();\n this.compute(event);\n const [dx, dy] = state._distance;\n state.tap = dx <= config.tapsThreshold && dy <= config.tapsThreshold;\n if (state.tap && config.filterTaps) {\n state._force = true;\n } else {\n const [_dx, _dy] = state._delta;\n const [_mx, _my] = state._movement;\n const [svx, svy] = config.swipe.velocity;\n const [sx, sy] = config.swipe.distance;\n const sdt = config.swipe.duration;\n if (state.elapsedTime < sdt) {\n const _vx = Math.abs(_dx / state.timeDelta);\n const _vy = Math.abs(_dy / state.timeDelta);\n if (_vx > svx && Math.abs(_mx) > sx) state.swipe[0] = Math.sign(_dx);\n if (_vy > svy && Math.abs(_my) > sy) state.swipe[1] = Math.sign(_dy);\n }\n }\n this.emit();\n }\n pointerClick(event) {\n if (!this.state.tap && event.detail > 0) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n setupPointer(event) {\n const config = this.config;\n const device = config.device;\n if (process.env.NODE_ENV === 'development') {\n try {\n if (device === 'pointer' && config.preventScrollDelay === undefined) {\n const currentTarget = 'uv' in event ? event.sourceEvent.currentTarget : event.currentTarget;\n const style = window.getComputedStyle(currentTarget);\n if (style.touchAction === 'auto') {\n console.warn(`[@use-gesture]: The drag target has its \\`touch-action\\` style property set to \\`auto\\`. It is recommended to add \\`touch-action: 'none'\\` so that the drag gesture behaves correctly on touch-enabled devices. For more information read this: https://use-gesture.netlify.app/docs/extras/#touch-action.\\n\\nThis message will only show in development mode. It won't appear in production. If this is intended, you can ignore it.`, currentTarget);\n }\n }\n } catch (_unused2) {}\n }\n if (config.pointerLock) {\n event.currentTarget.requestPointerLock();\n }\n if (!config.pointerCapture) {\n this.eventStore.add(this.sharedConfig.window, device, 'change', this.pointerMove.bind(this));\n this.eventStore.add(this.sharedConfig.window, device, 'end', this.pointerUp.bind(this));\n this.eventStore.add(this.sharedConfig.window, device, 'cancel', this.pointerUp.bind(this));\n }\n }\n pointerClean() {\n if (this.config.pointerLock && document.pointerLockElement === this.state.currentTarget) {\n document.exitPointerLock();\n }\n }\n preventScroll(event) {\n if (this.state._preventScroll && event.cancelable) {\n event.preventDefault();\n }\n }\n setupScrollPrevention(event) {\n this.state._preventScroll = false;\n persistEvent(event);\n const remove = this.eventStore.add(this.sharedConfig.window, 'touch', 'change', this.preventScroll.bind(this), {\n passive: false\n });\n this.eventStore.add(this.sharedConfig.window, 'touch', 'end', remove);\n this.eventStore.add(this.sharedConfig.window, 'touch', 'cancel', remove);\n this.timeoutStore.add('startPointerDrag', this.startPointerDrag.bind(this), this.config.preventScrollDelay, event);\n }\n setupDelayTrigger(event) {\n this.state._delayed = true;\n this.timeoutStore.add('dragDelay', () => {\n this.state._step = [0, 0];\n this.startPointerDrag(event);\n }, this.config.delay);\n }\n keyDown(event) {\n const deltaFn = KEYS_DELTA_MAP[event.key];\n if (deltaFn) {\n const state = this.state;\n const factor = event.shiftKey ? 10 : event.altKey ? 0.1 : 1;\n this.start(event);\n state._delta = deltaFn(this.config.keyboardDisplacement, factor);\n state._keyboardActive = true;\n V.addTo(state._movement, state._delta);\n this.compute(event);\n this.emit();\n }\n }\n keyUp(event) {\n if (!(event.key in KEYS_DELTA_MAP)) return;\n this.state._keyboardActive = false;\n this.setActive();\n this.compute(event);\n this.emit();\n }\n bind(bindFunction) {\n const device = this.config.device;\n bindFunction(device, 'start', this.pointerDown.bind(this));\n if (this.config.pointerCapture) {\n bindFunction(device, 'change', this.pointerMove.bind(this));\n bindFunction(device, 'end', this.pointerUp.bind(this));\n bindFunction(device, 'cancel', this.pointerUp.bind(this));\n bindFunction('lostPointerCapture', '', this.pointerUp.bind(this));\n }\n if (this.config.keys) {\n bindFunction('key', 'down', this.keyDown.bind(this));\n bindFunction('key', 'up', this.keyUp.bind(this));\n }\n if (this.config.filterTaps) {\n bindFunction('click', '', this.pointerClick.bind(this), {\n capture: true,\n passive: false\n });\n }\n }\n}\nfunction persistEvent(event) {\n 'persist' in event && typeof event.persist === 'function' && event.persist();\n}\n\nconst isBrowser = typeof window !== 'undefined' && window.document && window.document.createElement;\nfunction supportsTouchEvents() {\n return isBrowser && 'ontouchstart' in window;\n}\nfunction isTouchScreen() {\n return supportsTouchEvents() || isBrowser && window.navigator.maxTouchPoints > 1;\n}\nfunction supportsPointerEvents() {\n return isBrowser && 'onpointerdown' in window;\n}\nfunction supportsPointerLock() {\n return isBrowser && 'exitPointerLock' in window.document;\n}\nfunction supportsGestureEvents() {\n try {\n return 'constructor' in GestureEvent;\n } catch (e) {\n return false;\n }\n}\nconst SUPPORT = {\n isBrowser,\n gesture: supportsGestureEvents(),\n touch: supportsTouchEvents(),\n touchscreen: isTouchScreen(),\n pointer: supportsPointerEvents(),\n pointerLock: supportsPointerLock()\n};\n\nconst DEFAULT_PREVENT_SCROLL_DELAY = 250;\nconst DEFAULT_DRAG_DELAY = 180;\nconst DEFAULT_SWIPE_VELOCITY = 0.5;\nconst DEFAULT_SWIPE_DISTANCE = 50;\nconst DEFAULT_SWIPE_DURATION = 250;\nconst DEFAULT_KEYBOARD_DISPLACEMENT = 10;\nconst DEFAULT_DRAG_AXIS_THRESHOLD = {\n mouse: 0,\n touch: 0,\n pen: 8\n};\nconst dragConfigResolver = _objectSpread2(_objectSpread2({}, coordinatesConfigResolver), {}, {\n device(_v, _k, {\n pointer: {\n touch = false,\n lock = false,\n mouse = false\n } = {}\n }) {\n this.pointerLock = lock && SUPPORT.pointerLock;\n if (SUPPORT.touch && touch) return 'touch';\n if (this.pointerLock) return 'mouse';\n if (SUPPORT.pointer && !mouse) return 'pointer';\n if (SUPPORT.touch) return 'touch';\n return 'mouse';\n },\n preventScrollAxis(value, _k, {\n preventScroll\n }) {\n this.preventScrollDelay = typeof preventScroll === 'number' ? preventScroll : preventScroll || preventScroll === undefined && value ? DEFAULT_PREVENT_SCROLL_DELAY : undefined;\n if (!SUPPORT.touchscreen || preventScroll === false) return undefined;\n return value ? value : preventScroll !== undefined ? 'y' : undefined;\n },\n pointerCapture(_v, _k, {\n pointer: {\n capture = true,\n buttons = 1,\n keys = true\n } = {}\n }) {\n this.pointerButtons = buttons;\n this.keys = keys;\n return !this.pointerLock && this.device === 'pointer' && capture;\n },\n threshold(value, _k, {\n filterTaps = false,\n tapsThreshold = 3,\n axis = undefined\n }) {\n const threshold = V.toVector(value, filterTaps ? tapsThreshold : axis ? 1 : 0);\n this.filterTaps = filterTaps;\n this.tapsThreshold = tapsThreshold;\n return threshold;\n },\n swipe({\n velocity = DEFAULT_SWIPE_VELOCITY,\n distance = DEFAULT_SWIPE_DISTANCE,\n duration = DEFAULT_SWIPE_DURATION\n } = {}) {\n return {\n velocity: this.transform(V.toVector(velocity)),\n distance: this.transform(V.toVector(distance)),\n duration\n };\n },\n delay(value = 0) {\n switch (value) {\n case true:\n return DEFAULT_DRAG_DELAY;\n case false:\n return 0;\n default:\n return value;\n }\n },\n axisThreshold(value) {\n if (!value) return DEFAULT_DRAG_AXIS_THRESHOLD;\n return _objectSpread2(_objectSpread2({}, DEFAULT_DRAG_AXIS_THRESHOLD), value);\n },\n keyboardDisplacement(value = DEFAULT_KEYBOARD_DISPLACEMENT) {\n return value;\n }\n});\nif (process.env.NODE_ENV === 'development') {\n Object.assign(dragConfigResolver, {\n useTouch(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`useTouch\\` option has been renamed to \\`pointer.touch\\`. Use it as in \\`{ pointer: { touch: true } }\\`.`);\n }\n return NaN;\n },\n experimental_preventWindowScrollY(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`experimental_preventWindowScrollY\\` option has been renamed to \\`preventScroll\\`.`);\n }\n return NaN;\n },\n swipeVelocity(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`swipeVelocity\\` option has been renamed to \\`swipe.velocity\\`. Use it as in \\`{ swipe: { velocity: 0.5 } }\\`.`);\n }\n return NaN;\n },\n swipeDistance(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`swipeDistance\\` option has been renamed to \\`swipe.distance\\`. Use it as in \\`{ swipe: { distance: 50 } }\\`.`);\n }\n return NaN;\n },\n swipeDuration(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`swipeDuration\\` option has been renamed to \\`swipe.duration\\`. Use it as in \\`{ swipe: { duration: 250 } }\\`.`);\n }\n return NaN;\n }\n });\n}\n\nfunction clampStateInternalMovementToBounds(state) {\n const [ox, oy] = state.overflow;\n const [dx, dy] = state._delta;\n const [dirx, diry] = state._direction;\n if (ox < 0 && dx > 0 && dirx < 0 || ox > 0 && dx < 0 && dirx > 0) {\n state._movement[0] = state._movementBound[0];\n }\n if (oy < 0 && dy > 0 && diry < 0 || oy > 0 && dy < 0 && diry > 0) {\n state._movement[1] = state._movementBound[1];\n }\n}\n\nconst SCALE_ANGLE_RATIO_INTENT_DEG = 30;\nconst PINCH_WHEEL_RATIO = 100;\nclass PinchEngine extends Engine {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"ingKey\", 'pinching');\n _defineProperty(this, \"aliasKey\", 'da');\n }\n init() {\n this.state.offset = [1, 0];\n this.state.lastOffset = [1, 0];\n this.state._pointerEvents = new Map();\n }\n reset() {\n super.reset();\n const state = this.state;\n state._touchIds = [];\n state.canceled = false;\n state.cancel = this.cancel.bind(this);\n state.turns = 0;\n }\n computeOffset() {\n const {\n type,\n movement,\n lastOffset\n } = this.state;\n if (type === 'wheel') {\n this.state.offset = V.add(movement, lastOffset);\n } else {\n this.state.offset = [(1 + movement[0]) * lastOffset[0], movement[1] + lastOffset[1]];\n }\n }\n computeMovement() {\n const {\n offset,\n lastOffset\n } = this.state;\n this.state.movement = [offset[0] / lastOffset[0], offset[1] - lastOffset[1]];\n }\n axisIntent() {\n const state = this.state;\n const [_m0, _m1] = state._movement;\n if (!state.axis) {\n const axisMovementDifference = Math.abs(_m0) * SCALE_ANGLE_RATIO_INTENT_DEG - Math.abs(_m1);\n if (axisMovementDifference < 0) state.axis = 'angle';else if (axisMovementDifference > 0) state.axis = 'scale';\n }\n }\n restrictToAxis(v) {\n if (this.config.lockDirection) {\n if (this.state.axis === 'scale') v[1] = 0;else if (this.state.axis === 'angle') v[0] = 0;\n }\n }\n cancel() {\n const state = this.state;\n if (state.canceled) return;\n setTimeout(() => {\n state.canceled = true;\n state._active = false;\n this.compute();\n this.emit();\n }, 0);\n }\n touchStart(event) {\n this.ctrl.setEventIds(event);\n const state = this.state;\n const ctrlTouchIds = this.ctrl.touchIds;\n if (state._active) {\n if (state._touchIds.every(id => ctrlTouchIds.has(id))) return;\n }\n if (ctrlTouchIds.size < 2) return;\n this.start(event);\n state._touchIds = Array.from(ctrlTouchIds).slice(0, 2);\n const payload = touchDistanceAngle(event, state._touchIds);\n if (!payload) return;\n this.pinchStart(event, payload);\n }\n pointerStart(event) {\n if (event.buttons != null && event.buttons % 2 !== 1) return;\n this.ctrl.setEventIds(event);\n event.target.setPointerCapture(event.pointerId);\n const state = this.state;\n const _pointerEvents = state._pointerEvents;\n const ctrlPointerIds = this.ctrl.pointerIds;\n if (state._active) {\n if (Array.from(_pointerEvents.keys()).every(id => ctrlPointerIds.has(id))) return;\n }\n if (_pointerEvents.size < 2) {\n _pointerEvents.set(event.pointerId, event);\n }\n if (state._pointerEvents.size < 2) return;\n this.start(event);\n const payload = distanceAngle(...Array.from(_pointerEvents.values()));\n if (!payload) return;\n this.pinchStart(event, payload);\n }\n pinchStart(event, payload) {\n const state = this.state;\n state.origin = payload.origin;\n this.computeValues([payload.distance, payload.angle]);\n this.computeInitial();\n this.compute(event);\n this.emit();\n }\n touchMove(event) {\n if (!this.state._active) return;\n const payload = touchDistanceAngle(event, this.state._touchIds);\n if (!payload) return;\n this.pinchMove(event, payload);\n }\n pointerMove(event) {\n const _pointerEvents = this.state._pointerEvents;\n if (_pointerEvents.has(event.pointerId)) {\n _pointerEvents.set(event.pointerId, event);\n }\n if (!this.state._active) return;\n const payload = distanceAngle(...Array.from(_pointerEvents.values()));\n if (!payload) return;\n this.pinchMove(event, payload);\n }\n pinchMove(event, payload) {\n const state = this.state;\n const prev_a = state._values[1];\n const delta_a = payload.angle - prev_a;\n let delta_turns = 0;\n if (Math.abs(delta_a) > 270) delta_turns += Math.sign(delta_a);\n this.computeValues([payload.distance, payload.angle - 360 * delta_turns]);\n state.origin = payload.origin;\n state.turns = delta_turns;\n state._movement = [state._values[0] / state._initial[0] - 1, state._values[1] - state._initial[1]];\n this.compute(event);\n this.emit();\n }\n touchEnd(event) {\n this.ctrl.setEventIds(event);\n if (!this.state._active) return;\n if (this.state._touchIds.some(id => !this.ctrl.touchIds.has(id))) {\n this.state._active = false;\n this.compute(event);\n this.emit();\n }\n }\n pointerEnd(event) {\n const state = this.state;\n this.ctrl.setEventIds(event);\n try {\n event.target.releasePointerCapture(event.pointerId);\n } catch (_unused) {}\n if (state._pointerEvents.has(event.pointerId)) {\n state._pointerEvents.delete(event.pointerId);\n }\n if (!state._active) return;\n if (state._pointerEvents.size < 2) {\n state._active = false;\n this.compute(event);\n this.emit();\n }\n }\n gestureStart(event) {\n if (event.cancelable) event.preventDefault();\n const state = this.state;\n if (state._active) return;\n this.start(event);\n this.computeValues([event.scale, event.rotation]);\n state.origin = [event.clientX, event.clientY];\n this.compute(event);\n this.emit();\n }\n gestureMove(event) {\n if (event.cancelable) event.preventDefault();\n if (!this.state._active) return;\n const state = this.state;\n this.computeValues([event.scale, event.rotation]);\n state.origin = [event.clientX, event.clientY];\n const _previousMovement = state._movement;\n state._movement = [event.scale - 1, event.rotation];\n state._delta = V.sub(state._movement, _previousMovement);\n this.compute(event);\n this.emit();\n }\n gestureEnd(event) {\n if (!this.state._active) return;\n this.state._active = false;\n this.compute(event);\n this.emit();\n }\n wheel(event) {\n const modifierKey = this.config.modifierKey;\n if (modifierKey && (Array.isArray(modifierKey) ? !modifierKey.find(k => event[k]) : !event[modifierKey])) return;\n if (!this.state._active) this.wheelStart(event);else this.wheelChange(event);\n this.timeoutStore.add('wheelEnd', this.wheelEnd.bind(this));\n }\n wheelStart(event) {\n this.start(event);\n this.wheelChange(event);\n }\n wheelChange(event) {\n const isR3f = ('uv' in event);\n if (!isR3f) {\n if (event.cancelable) {\n event.preventDefault();\n }\n if (process.env.NODE_ENV === 'development' && !event.defaultPrevented) {\n console.warn(`[@use-gesture]: To properly support zoom on trackpads, try using the \\`target\\` option.\\n\\nThis message will only appear in development mode.`);\n }\n }\n const state = this.state;\n state._delta = [-wheelValues(event)[1] / PINCH_WHEEL_RATIO * state.offset[0], 0];\n V.addTo(state._movement, state._delta);\n clampStateInternalMovementToBounds(state);\n this.state.origin = [event.clientX, event.clientY];\n this.compute(event);\n this.emit();\n }\n wheelEnd() {\n if (!this.state._active) return;\n this.state._active = false;\n this.compute();\n this.emit();\n }\n bind(bindFunction) {\n const device = this.config.device;\n if (!!device) {\n bindFunction(device, 'start', this[device + 'Start'].bind(this));\n bindFunction(device, 'change', this[device + 'Move'].bind(this));\n bindFunction(device, 'end', this[device + 'End'].bind(this));\n bindFunction(device, 'cancel', this[device + 'End'].bind(this));\n bindFunction('lostPointerCapture', '', this[device + 'End'].bind(this));\n }\n if (this.config.pinchOnWheel) {\n bindFunction('wheel', '', this.wheel.bind(this), {\n passive: false\n });\n }\n }\n}\n\nconst pinchConfigResolver = _objectSpread2(_objectSpread2({}, commonConfigResolver), {}, {\n device(_v, _k, {\n shared,\n pointer: {\n touch = false\n } = {}\n }) {\n const sharedConfig = shared;\n if (sharedConfig.target && !SUPPORT.touch && SUPPORT.gesture) return 'gesture';\n if (SUPPORT.touch && touch) return 'touch';\n if (SUPPORT.touchscreen) {\n if (SUPPORT.pointer) return 'pointer';\n if (SUPPORT.touch) return 'touch';\n }\n },\n bounds(_v, _k, {\n scaleBounds = {},\n angleBounds = {}\n }) {\n const _scaleBounds = state => {\n const D = assignDefault(call(scaleBounds, state), {\n min: -Infinity,\n max: Infinity\n });\n return [D.min, D.max];\n };\n const _angleBounds = state => {\n const A = assignDefault(call(angleBounds, state), {\n min: -Infinity,\n max: Infinity\n });\n return [A.min, A.max];\n };\n if (typeof scaleBounds !== 'function' && typeof angleBounds !== 'function') return [_scaleBounds(), _angleBounds()];\n return state => [_scaleBounds(state), _angleBounds(state)];\n },\n threshold(value, _k, config) {\n this.lockDirection = config.axis === 'lock';\n const threshold = V.toVector(value, this.lockDirection ? [0.1, 3] : 0);\n return threshold;\n },\n modifierKey(value) {\n if (value === undefined) return 'ctrlKey';\n return value;\n },\n pinchOnWheel(value = true) {\n return value;\n }\n});\n\nclass MoveEngine extends CoordinatesEngine {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"ingKey\", 'moving');\n }\n move(event) {\n if (this.config.mouseOnly && event.pointerType !== 'mouse') return;\n if (!this.state._active) this.moveStart(event);else this.moveChange(event);\n this.timeoutStore.add('moveEnd', this.moveEnd.bind(this));\n }\n moveStart(event) {\n this.start(event);\n this.computeValues(pointerValues(event));\n this.compute(event);\n this.computeInitial();\n this.emit();\n }\n moveChange(event) {\n if (!this.state._active) return;\n const values = pointerValues(event);\n const state = this.state;\n state._delta = V.sub(values, state._values);\n V.addTo(state._movement, state._delta);\n this.computeValues(values);\n this.compute(event);\n this.emit();\n }\n moveEnd(event) {\n if (!this.state._active) return;\n this.state._active = false;\n this.compute(event);\n this.emit();\n }\n bind(bindFunction) {\n bindFunction('pointer', 'change', this.move.bind(this));\n bindFunction('pointer', 'leave', this.moveEnd.bind(this));\n }\n}\n\nconst moveConfigResolver = _objectSpread2(_objectSpread2({}, coordinatesConfigResolver), {}, {\n mouseOnly: (value = true) => value\n});\n\nclass ScrollEngine extends CoordinatesEngine {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"ingKey\", 'scrolling');\n }\n scroll(event) {\n if (!this.state._active) this.start(event);\n this.scrollChange(event);\n this.timeoutStore.add('scrollEnd', this.scrollEnd.bind(this));\n }\n scrollChange(event) {\n if (event.cancelable) event.preventDefault();\n const state = this.state;\n const values = scrollValues(event);\n state._delta = V.sub(values, state._values);\n V.addTo(state._movement, state._delta);\n this.computeValues(values);\n this.compute(event);\n this.emit();\n }\n scrollEnd() {\n if (!this.state._active) return;\n this.state._active = false;\n this.compute();\n this.emit();\n }\n bind(bindFunction) {\n bindFunction('scroll', '', this.scroll.bind(this));\n }\n}\n\nconst scrollConfigResolver = coordinatesConfigResolver;\n\nclass WheelEngine extends CoordinatesEngine {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"ingKey\", 'wheeling');\n }\n wheel(event) {\n if (!this.state._active) this.start(event);\n this.wheelChange(event);\n this.timeoutStore.add('wheelEnd', this.wheelEnd.bind(this));\n }\n wheelChange(event) {\n const state = this.state;\n state._delta = wheelValues(event);\n V.addTo(state._movement, state._delta);\n clampStateInternalMovementToBounds(state);\n this.compute(event);\n this.emit();\n }\n wheelEnd() {\n if (!this.state._active) return;\n this.state._active = false;\n this.compute();\n this.emit();\n }\n bind(bindFunction) {\n bindFunction('wheel', '', this.wheel.bind(this));\n }\n}\n\nconst wheelConfigResolver = coordinatesConfigResolver;\n\nclass HoverEngine extends CoordinatesEngine {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"ingKey\", 'hovering');\n }\n enter(event) {\n if (this.config.mouseOnly && event.pointerType !== 'mouse') return;\n this.start(event);\n this.computeValues(pointerValues(event));\n this.compute(event);\n this.emit();\n }\n leave(event) {\n if (this.config.mouseOnly && event.pointerType !== 'mouse') return;\n const state = this.state;\n if (!state._active) return;\n state._active = false;\n const values = pointerValues(event);\n state._movement = state._delta = V.sub(values, state._values);\n this.computeValues(values);\n this.compute(event);\n state.delta = state.movement;\n this.emit();\n }\n bind(bindFunction) {\n bindFunction('pointer', 'enter', this.enter.bind(this));\n bindFunction('pointer', 'leave', this.leave.bind(this));\n }\n}\n\nconst hoverConfigResolver = _objectSpread2(_objectSpread2({}, coordinatesConfigResolver), {}, {\n mouseOnly: (value = true) => value\n});\n\nconst EngineMap = new Map();\nconst ConfigResolverMap = new Map();\nfunction registerAction(action) {\n EngineMap.set(action.key, action.engine);\n ConfigResolverMap.set(action.key, action.resolver);\n}\nconst dragAction = {\n key: 'drag',\n engine: DragEngine,\n resolver: dragConfigResolver\n};\nconst hoverAction = {\n key: 'hover',\n engine: HoverEngine,\n resolver: hoverConfigResolver\n};\nconst moveAction = {\n key: 'move',\n engine: MoveEngine,\n resolver: moveConfigResolver\n};\nconst pinchAction = {\n key: 'pinch',\n engine: PinchEngine,\n resolver: pinchConfigResolver\n};\nconst scrollAction = {\n key: 'scroll',\n engine: ScrollEngine,\n resolver: scrollConfigResolver\n};\nconst wheelAction = {\n key: 'wheel',\n engine: WheelEngine,\n resolver: wheelConfigResolver\n};\n\nexport { ConfigResolverMap as C, EngineMap as E, SUPPORT as S, _objectSpread2 as _, _defineProperty as a, touchIds as b, chain as c, toHandlerProp as d, dragAction as e, pinchAction as f, hoverAction as h, isTouch as i, moveAction as m, parseProp as p, registerAction as r, scrollAction as s, toDomEventType as t, wheelAction as w };\n","import { S as SUPPORT, C as ConfigResolverMap, _ as _objectSpread2, a as _defineProperty, t as toDomEventType, i as isTouch, b as touchIds, E as EngineMap, c as chain, p as parseProp, d as toHandlerProp } from './actions-fe213e88.esm.js';\nimport './maths-0ab39ae9.esm.js';\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\n\nconst sharedConfigResolver = {\n target(value) {\n if (value) {\n return () => 'current' in value ? value.current : value;\n }\n return undefined;\n },\n enabled(value = true) {\n return value;\n },\n window(value = SUPPORT.isBrowser ? window : undefined) {\n return value;\n },\n eventOptions({\n passive = true,\n capture = false\n } = {}) {\n return {\n passive,\n capture\n };\n },\n transform(value) {\n return value;\n }\n};\n\nconst _excluded = [\"target\", \"eventOptions\", \"window\", \"enabled\", \"transform\"];\nfunction resolveWith(config = {}, resolvers) {\n const result = {};\n for (const [key, resolver] of Object.entries(resolvers)) {\n switch (typeof resolver) {\n case 'function':\n if (process.env.NODE_ENV === 'development') {\n const r = resolver.call(result, config[key], key, config);\n if (!Number.isNaN(r)) result[key] = r;\n } else {\n result[key] = resolver.call(result, config[key], key, config);\n }\n break;\n case 'object':\n result[key] = resolveWith(config[key], resolver);\n break;\n case 'boolean':\n if (resolver) result[key] = config[key];\n break;\n }\n }\n return result;\n}\nfunction parse(newConfig, gestureKey, _config = {}) {\n const _ref = newConfig,\n {\n target,\n eventOptions,\n window,\n enabled,\n transform\n } = _ref,\n rest = _objectWithoutProperties(_ref, _excluded);\n _config.shared = resolveWith({\n target,\n eventOptions,\n window,\n enabled,\n transform\n }, sharedConfigResolver);\n if (gestureKey) {\n const resolver = ConfigResolverMap.get(gestureKey);\n _config[gestureKey] = resolveWith(_objectSpread2({\n shared: _config.shared\n }, rest), resolver);\n } else {\n for (const key in rest) {\n const resolver = ConfigResolverMap.get(key);\n if (resolver) {\n _config[key] = resolveWith(_objectSpread2({\n shared: _config.shared\n }, rest[key]), resolver);\n } else if (process.env.NODE_ENV === 'development') {\n if (!['drag', 'pinch', 'scroll', 'wheel', 'move', 'hover'].includes(key)) {\n if (key === 'domTarget') {\n throw Error(`[@use-gesture]: \\`domTarget\\` option has been renamed to \\`target\\`.`);\n }\n console.warn(`[@use-gesture]: Unknown config key \\`${key}\\` was used. Please read the documentation for further information.`);\n }\n }\n }\n }\n return _config;\n}\n\nclass EventStore {\n constructor(ctrl, gestureKey) {\n _defineProperty(this, \"_listeners\", new Set());\n this._ctrl = ctrl;\n this._gestureKey = gestureKey;\n }\n add(element, device, action, handler, options) {\n const listeners = this._listeners;\n const type = toDomEventType(device, action);\n const _options = this._gestureKey ? this._ctrl.config[this._gestureKey].eventOptions : {};\n const eventOptions = _objectSpread2(_objectSpread2({}, _options), options);\n element.addEventListener(type, handler, eventOptions);\n const remove = () => {\n element.removeEventListener(type, handler, eventOptions);\n listeners.delete(remove);\n };\n listeners.add(remove);\n return remove;\n }\n clean() {\n this._listeners.forEach(remove => remove());\n this._listeners.clear();\n }\n}\n\nclass TimeoutStore {\n constructor() {\n _defineProperty(this, \"_timeouts\", new Map());\n }\n add(key, callback, ms = 140, ...args) {\n this.remove(key);\n this._timeouts.set(key, window.setTimeout(callback, ms, ...args));\n }\n remove(key) {\n const timeout = this._timeouts.get(key);\n if (timeout) window.clearTimeout(timeout);\n }\n clean() {\n this._timeouts.forEach(timeout => void window.clearTimeout(timeout));\n this._timeouts.clear();\n }\n}\n\nclass Controller {\n constructor(handlers) {\n _defineProperty(this, \"gestures\", new Set());\n _defineProperty(this, \"_targetEventStore\", new EventStore(this));\n _defineProperty(this, \"gestureEventStores\", {});\n _defineProperty(this, \"gestureTimeoutStores\", {});\n _defineProperty(this, \"handlers\", {});\n _defineProperty(this, \"config\", {});\n _defineProperty(this, \"pointerIds\", new Set());\n _defineProperty(this, \"touchIds\", new Set());\n _defineProperty(this, \"state\", {\n shared: {\n shiftKey: false,\n metaKey: false,\n ctrlKey: false,\n altKey: false\n }\n });\n resolveGestures(this, handlers);\n }\n setEventIds(event) {\n if (isTouch(event)) {\n this.touchIds = new Set(touchIds(event));\n return this.touchIds;\n } else if ('pointerId' in event) {\n if (event.type === 'pointerup' || event.type === 'pointercancel') this.pointerIds.delete(event.pointerId);else if (event.type === 'pointerdown') this.pointerIds.add(event.pointerId);\n return this.pointerIds;\n }\n }\n applyHandlers(handlers, nativeHandlers) {\n this.handlers = handlers;\n this.nativeHandlers = nativeHandlers;\n }\n applyConfig(config, gestureKey) {\n this.config = parse(config, gestureKey, this.config);\n }\n clean() {\n this._targetEventStore.clean();\n for (const key of this.gestures) {\n this.gestureEventStores[key].clean();\n this.gestureTimeoutStores[key].clean();\n }\n }\n effect() {\n if (this.config.shared.target) this.bind();\n return () => this._targetEventStore.clean();\n }\n bind(...args) {\n const sharedConfig = this.config.shared;\n const props = {};\n let target;\n if (sharedConfig.target) {\n target = sharedConfig.target();\n if (!target) return;\n }\n if (sharedConfig.enabled) {\n for (const gestureKey of this.gestures) {\n const gestureConfig = this.config[gestureKey];\n const bindFunction = bindToProps(props, gestureConfig.eventOptions, !!target);\n if (gestureConfig.enabled) {\n const Engine = EngineMap.get(gestureKey);\n new Engine(this, args, gestureKey).bind(bindFunction);\n }\n }\n const nativeBindFunction = bindToProps(props, sharedConfig.eventOptions, !!target);\n for (const eventKey in this.nativeHandlers) {\n nativeBindFunction(eventKey, '', event => this.nativeHandlers[eventKey](_objectSpread2(_objectSpread2({}, this.state.shared), {}, {\n event,\n args\n })), undefined, true);\n }\n }\n for (const handlerProp in props) {\n props[handlerProp] = chain(...props[handlerProp]);\n }\n if (!target) return props;\n for (const handlerProp in props) {\n const {\n device,\n capture,\n passive\n } = parseProp(handlerProp);\n this._targetEventStore.add(target, device, '', props[handlerProp], {\n capture,\n passive\n });\n }\n }\n}\nfunction setupGesture(ctrl, gestureKey) {\n ctrl.gestures.add(gestureKey);\n ctrl.gestureEventStores[gestureKey] = new EventStore(ctrl, gestureKey);\n ctrl.gestureTimeoutStores[gestureKey] = new TimeoutStore();\n}\nfunction resolveGestures(ctrl, internalHandlers) {\n if (internalHandlers.drag) setupGesture(ctrl, 'drag');\n if (internalHandlers.wheel) setupGesture(ctrl, 'wheel');\n if (internalHandlers.scroll) setupGesture(ctrl, 'scroll');\n if (internalHandlers.move) setupGesture(ctrl, 'move');\n if (internalHandlers.pinch) setupGesture(ctrl, 'pinch');\n if (internalHandlers.hover) setupGesture(ctrl, 'hover');\n}\nconst bindToProps = (props, eventOptions, withPassiveOption) => (device, action, handler, options = {}, isNative = false) => {\n var _options$capture, _options$passive;\n const capture = (_options$capture = options.capture) !== null && _options$capture !== void 0 ? _options$capture : eventOptions.capture;\n const passive = (_options$passive = options.passive) !== null && _options$passive !== void 0 ? _options$passive : eventOptions.passive;\n let handlerProp = isNative ? device : toHandlerProp(device, action, capture);\n if (withPassiveOption && passive) handlerProp += 'Passive';\n props[handlerProp] = props[handlerProp] || [];\n props[handlerProp].push(handler);\n};\n\nconst RE_NOT_NATIVE = /^on(Drag|Wheel|Scroll|Move|Pinch|Hover)/;\nfunction sortHandlers(_handlers) {\n const native = {};\n const handlers = {};\n const actions = new Set();\n for (let key in _handlers) {\n if (RE_NOT_NATIVE.test(key)) {\n actions.add(RegExp.lastMatch);\n handlers[key] = _handlers[key];\n } else {\n native[key] = _handlers[key];\n }\n }\n return [handlers, native, actions];\n}\nfunction registerGesture(actions, handlers, handlerKey, key, internalHandlers, config) {\n if (!actions.has(handlerKey)) return;\n if (!EngineMap.has(key)) {\n if (process.env.NODE_ENV === 'development') {\n console.warn(`[@use-gesture]: You've created a custom handler that that uses the \\`${key}\\` gesture but isn't properly configured.\\n\\nPlease add \\`${key}Action\\` when creating your handler.`);\n }\n return;\n }\n const startKey = handlerKey + 'Start';\n const endKey = handlerKey + 'End';\n const fn = state => {\n let memo = undefined;\n if (state.first && startKey in handlers) handlers[startKey](state);\n if (handlerKey in handlers) memo = handlers[handlerKey](state);\n if (state.last && endKey in handlers) handlers[endKey](state);\n return memo;\n };\n internalHandlers[key] = fn;\n config[key] = config[key] || {};\n}\nfunction parseMergedHandlers(mergedHandlers, mergedConfig) {\n const [handlers, nativeHandlers, actions] = sortHandlers(mergedHandlers);\n const internalHandlers = {};\n registerGesture(actions, handlers, 'onDrag', 'drag', internalHandlers, mergedConfig);\n registerGesture(actions, handlers, 'onWheel', 'wheel', internalHandlers, mergedConfig);\n registerGesture(actions, handlers, 'onScroll', 'scroll', internalHandlers, mergedConfig);\n registerGesture(actions, handlers, 'onPinch', 'pinch', internalHandlers, mergedConfig);\n registerGesture(actions, handlers, 'onMove', 'move', internalHandlers, mergedConfig);\n registerGesture(actions, handlers, 'onHover', 'hover', internalHandlers, mergedConfig);\n return {\n handlers: internalHandlers,\n config: mergedConfig,\n nativeHandlers\n };\n}\n\nexport { Controller, parseMergedHandlers };\n","import { registerAction, dragAction, pinchAction, wheelAction, scrollAction, moveAction, hoverAction } from '@use-gesture/core/actions';\nexport * from '@use-gesture/core/actions';\nimport React from 'react';\nimport { Controller, parseMergedHandlers } from '@use-gesture/core';\nexport * from '@use-gesture/core/utils';\nexport * from '@use-gesture/core/types';\n\nfunction useRecognizers(handlers, config = {}, gestureKey, nativeHandlers) {\n const ctrl = React.useMemo(() => new Controller(handlers), []);\n ctrl.applyHandlers(handlers, nativeHandlers);\n ctrl.applyConfig(config, gestureKey);\n React.useEffect(ctrl.effect.bind(ctrl));\n React.useEffect(() => {\n return ctrl.clean.bind(ctrl);\n }, []);\n if (config.target === undefined) {\n return ctrl.bind.bind(ctrl);\n }\n return undefined;\n}\n\nfunction useDrag(handler, config) {\n registerAction(dragAction);\n return useRecognizers({\n drag: handler\n }, config || {}, 'drag');\n}\n\nfunction usePinch(handler, config) {\n registerAction(pinchAction);\n return useRecognizers({\n pinch: handler\n }, config || {}, 'pinch');\n}\n\nfunction useWheel(handler, config) {\n registerAction(wheelAction);\n return useRecognizers({\n wheel: handler\n }, config || {}, 'wheel');\n}\n\nfunction useScroll(handler, config) {\n registerAction(scrollAction);\n return useRecognizers({\n scroll: handler\n }, config || {}, 'scroll');\n}\n\nfunction useMove(handler, config) {\n registerAction(moveAction);\n return useRecognizers({\n move: handler\n }, config || {}, 'move');\n}\n\nfunction useHover(handler, config) {\n registerAction(hoverAction);\n return useRecognizers({\n hover: handler\n }, config || {}, 'hover');\n}\n\nfunction createUseGesture(actions) {\n actions.forEach(registerAction);\n return function useGesture(_handlers, _config) {\n const {\n handlers,\n nativeHandlers,\n config\n } = parseMergedHandlers(_handlers, _config || {});\n return useRecognizers(handlers, config, undefined, nativeHandlers);\n };\n}\n\nfunction useGesture(handlers, config) {\n const hook = createUseGesture([dragAction, pinchAction, scrollAction, wheelAction, moveAction, hoverAction]);\n return hook(handlers, config || {});\n}\n\nexport { createUseGesture, useDrag, useGesture, useHover, useMove, usePinch, useScroll, useWheel };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { useThree } from '@react-three/fiber';\nimport { useGesture } from '@use-gesture/react';\n\nconst initialModelPosition = /* @__PURE__ */new THREE.Vector3();\nconst mousePosition2D = /* @__PURE__ */new THREE.Vector2();\nconst mousePosition3D = /* @__PURE__ */new THREE.Vector3();\nconst dragOffset = /* @__PURE__ */new THREE.Vector3();\nconst dragPlaneNormal = /* @__PURE__ */new THREE.Vector3();\nconst dragPlane = /* @__PURE__ */new THREE.Plane();\nconst DragControls = /*#__PURE__*/React.forwardRef(({\n autoTransform = true,\n matrix,\n axisLock,\n dragLimits,\n onHover,\n onDragStart,\n onDrag,\n onDragEnd,\n children,\n dragConfig,\n ...props\n}, fRef) => {\n const defaultControls = useThree(state => state.controls);\n const {\n camera,\n size,\n raycaster,\n invalidate\n } = useThree();\n const ref = React.useRef(null);\n const bind = useGesture({\n onHover: ({\n hovering\n }) => onHover && onHover(hovering !== null && hovering !== void 0 ? hovering : false),\n onDragStart: ({\n event\n }) => {\n if (defaultControls) defaultControls.enabled = false;\n const {\n point\n } = event;\n ref.current.matrix.decompose(initialModelPosition, new THREE.Quaternion(), new THREE.Vector3());\n mousePosition3D.copy(point);\n dragOffset.copy(mousePosition3D).sub(initialModelPosition);\n onDragStart && onDragStart(initialModelPosition);\n invalidate();\n },\n onDrag: ({\n xy: [dragX, dragY],\n intentional\n }) => {\n if (!intentional) return;\n const normalizedMouseX = (dragX - size.left) / size.width * 2 - 1;\n const normalizedMouseY = -((dragY - size.top) / size.height) * 2 + 1;\n mousePosition2D.set(normalizedMouseX, normalizedMouseY);\n raycaster.setFromCamera(mousePosition2D, camera);\n if (!axisLock) {\n camera.getWorldDirection(dragPlaneNormal).negate();\n } else {\n switch (axisLock) {\n case 'x':\n dragPlaneNormal.set(1, 0, 0);\n break;\n case 'y':\n dragPlaneNormal.set(0, 1, 0);\n break;\n case 'z':\n dragPlaneNormal.set(0, 0, 1);\n break;\n }\n }\n dragPlane.setFromNormalAndCoplanarPoint(dragPlaneNormal, mousePosition3D);\n raycaster.ray.intersectPlane(dragPlane, mousePosition3D);\n const previousLocalMatrix = ref.current.matrix.clone();\n const previousWorldMatrix = ref.current.matrixWorld.clone();\n const intendedNewPosition = new THREE.Vector3(mousePosition3D.x - dragOffset.x, mousePosition3D.y - dragOffset.y, mousePosition3D.z - dragOffset.z);\n if (dragLimits) {\n intendedNewPosition.x = dragLimits[0] ? Math.max(Math.min(intendedNewPosition.x, dragLimits[0][1]), dragLimits[0][0]) : intendedNewPosition.x;\n intendedNewPosition.y = dragLimits[1] ? Math.max(Math.min(intendedNewPosition.y, dragLimits[1][1]), dragLimits[1][0]) : intendedNewPosition.y;\n intendedNewPosition.z = dragLimits[2] ? Math.max(Math.min(intendedNewPosition.z, dragLimits[2][1]), dragLimits[2][0]) : intendedNewPosition.z;\n }\n if (autoTransform) {\n ref.current.matrix.setPosition(intendedNewPosition);\n const deltaLocalMatrix = ref.current.matrix.clone().multiply(previousLocalMatrix.invert());\n const deltaWorldMatrix = ref.current.matrix.clone().multiply(previousWorldMatrix.invert());\n onDrag && onDrag(ref.current.matrix, deltaLocalMatrix, ref.current.matrixWorld, deltaWorldMatrix);\n } else {\n const tempMatrix = new THREE.Matrix4().copy(ref.current.matrix);\n tempMatrix.setPosition(intendedNewPosition);\n const deltaLocalMatrix = tempMatrix.clone().multiply(previousLocalMatrix.invert());\n const deltaWorldMatrix = tempMatrix.clone().multiply(previousWorldMatrix.invert());\n onDrag && onDrag(tempMatrix, deltaLocalMatrix, ref.current.matrixWorld, deltaWorldMatrix);\n }\n invalidate();\n },\n onDragEnd: () => {\n if (defaultControls) defaultControls.enabled = true;\n onDragEnd && onDragEnd();\n invalidate();\n }\n }, {\n drag: {\n filterTaps: true,\n threshold: 1,\n ...(typeof dragConfig === 'object' ? dragConfig : {})\n }\n });\n React.useImperativeHandle(fRef, () => ref.current, []);\n React.useLayoutEffect(() => {\n if (!matrix) return;\n\n // If the matrix is a real matrix4 it means that the user wants to control the gizmo\n // In that case it should just be set, as a bare prop update would merely copy it\n ref.current.matrix = matrix;\n }, [matrix]);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref\n }, bind(), {\n matrix: matrix,\n matrixAutoUpdate: false\n }, props), children);\n});\n\nexport { DragControls };\n","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nexport { _objectSpread2 as _, _defineProperty as a };\n","function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nexport { _setPrototypeOf as _, _isNativeReflectConstruct as a };\n","import { Matrix3 } from 'three';\n\n/**\n *\n * @param terms\n *\n * | a b |\n * | c d |\n *\n * @returns {number} determinant\n */\n\nfunction determinant2() {\n for (var _len = arguments.length, terms = new Array(_len), _key = 0; _key < _len; _key++) {\n terms[_key] = arguments[_key];\n }\n\n var a = terms[0],\n b = terms[1],\n c = terms[2],\n d = terms[3];\n return a * d - b * c;\n}\n/**\n *\n * @param terms\n *\n * | a b c |\n * | d e f |\n * | g h i |\n *\n * @returns {number} determinant\n */\n\nfunction determinant3() {\n for (var _len2 = arguments.length, terms = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n terms[_key2] = arguments[_key2];\n }\n\n var a = terms[0],\n b = terms[1],\n c = terms[2],\n d = terms[3],\n e = terms[4],\n f = terms[5],\n g = terms[6],\n h = terms[7],\n i = terms[8];\n return a * e * i + b * f * g + c * d * h - c * e * g - b * d * i - a * f * h;\n}\n/**\n *\n * @param terms\n *\n * | a b c g |\n * | h i j k |\n * | l m n o |\n *\n * @returns {number} determinant\n */\n\nfunction determinant4() {\n for (var _len3 = arguments.length, terms = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n terms[_key3] = arguments[_key3];\n }\n\n terms[0];\n terms[1];\n terms[2];\n terms[3];\n terms[4];\n terms[5];\n terms[6];\n terms[7];\n terms[8];\n terms[9];\n terms[10];\n terms[11];\n terms[12];\n terms[13];\n terms[14]; // TODO\n}\n/**\n *\n * Get the determinant of matrix m without row r and col c\n *\n * @param {matrix} m Starter matrix\n * @param r row to remove\n * @param c col to remove\n *\n * | a b c |\n * m = | d e f |\n * | g h i |\n *\n * getMinor(m, 1, 1) would result in this determinant\n *\n * | a c |\n * | g i |\n *\n * @returns {number} determinant\n */\n\nfunction getMinor(matrix, r, c) {\n var _matrixTranspose = matrix.clone().transpose();\n\n var x = [];\n var l = _matrixTranspose.elements.length;\n var n = Math.sqrt(l);\n\n for (var i = 0; i < l; i++) {\n var element = _matrixTranspose.elements[i];\n var row = Math.floor(i / n);\n var col = i % n;\n\n if (row !== r - 1 && col !== c - 1) {\n x.push(element);\n }\n }\n\n return determinant3.apply(void 0, x);\n}\n/**\n *\n */\n\nfunction matrixSum3(m1, m2) {\n var sum = [];\n var m1Array = m1.toArray();\n var m2Array = m2.toArray();\n\n for (var i = 0; i < m1Array.length; i++) {\n sum[i] = m1Array[i] + m2Array[i];\n }\n\n return new Matrix3().fromArray(sum);\n}\n\nvar matrix = /*#__PURE__*/Object.freeze({\n __proto__: null,\n determinant2: determinant2,\n determinant3: determinant3,\n determinant4: determinant4,\n getMinor: getMinor,\n matrixSum3: matrixSum3\n});\n\nexport { matrixSum3 as a, determinant2 as b, determinant4 as c, determinant3 as d, getMinor as g, matrix as m };\n","import { a as _isNativeReflectConstruct, _ as _setPrototypeOf } from './isNativeReflectConstruct-5594d075.esm.js';\nimport { Vector2, Matrix4 } from 'three';\nimport { d as determinant3, g as getMinor } from './matrix-baa530bf.esm.js';\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _construct(Parent, args, Class) {\n if (_isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\n/**\n *\n * @param point\n *\n * @param triangle\n *\n * @returns {boolean} true if the point is in the triangle\n *\n * TODO: Find explainer\n */\nfunction isPointInTriangle(point, triangle) {\n var _triangle$ = _slicedToArray(triangle[0], 2),\n ax = _triangle$[0],\n ay = _triangle$[1];\n\n var _triangle$2 = _slicedToArray(triangle[1], 2),\n bx = _triangle$2[0],\n by = _triangle$2[1];\n\n var _triangle$3 = _slicedToArray(triangle[2], 2),\n cx = _triangle$3[0],\n cy = _triangle$3[1];\n\n var _point = _slicedToArray(point, 2),\n px = _point[0],\n py = _point[1]; // TODO Sub with static calc\n\n\n var matrix = new Matrix4(); // prettier-ignore\n\n matrix.set(ax, ay, ax * ax + ay * ay, 1, bx, by, bx * bx + by * by, 1, cx, cy, cx * cx + cy * cy, 1, px, py, px * px + py * py, 1);\n return matrix.determinant() <= 0;\n}\nfunction triangleDeterminant(triangle) {\n var _triangle$4 = _slicedToArray(triangle[0], 2),\n x1 = _triangle$4[0],\n y1 = _triangle$4[1];\n\n var _triangle$5 = _slicedToArray(triangle[1], 2),\n x2 = _triangle$5[0],\n y2 = _triangle$5[1];\n\n var _triangle$6 = _slicedToArray(triangle[2], 2),\n x3 = _triangle$6[0],\n y3 = _triangle$6[1]; // prettier-ignore\n\n\n return determinant3(x1, y1, 1, x2, y2, 1, x3, y3, 1);\n}\n/**\n * Uses triangle area determinant to check if 3 points are collinear.\n * If they are, they can't make a triangle, so the determinant will be 0!\n *\n * 0 1 2\n * ─────■─────■─────■\n *\n *\n * Fun fact, you can use this same determinant to check the order of the points in the triangle\n *\n * NOTE: Should this use a buffer instead? NOTE: Should this use a buffer instead? [x0, y0, x1, y1, x2, y2]?\n *\n */\n\nfunction arePointsCollinear(points) {\n return triangleDeterminant(points) === 0;\n} // TODO This is the same principle as the prev function, find a way to make it have sense\n\nfunction isTriangleClockwise(triangle) {\n return triangleDeterminant(triangle) < 0;\n}\n/**\n \nThe circumcircle is a circle touching all the vertices of a triangle or polygon.\n\n ┌───┐ \n │ B │ \n └───┘ \n .───●───. \n ,─' ╱ ╲ '─. \n ,' ╱ ╲ `. \n ╱ ╱ ╲ ╲ \n ; ╱ ╲ : \n │ ╱ ╲ │ \n │ ╱ ╲ │ \n : ╱ ╲ ; \n ╲ ╱ ╲ ╱ \n┌───┐ ●─────────────────● ┌───┐\n│ A │ `. ,' │ C │\n└───┘ '─. ,─' └───┘\n `─────' \n */\n\n/**\n *\n * @param triangle\n *\n * @returns {number} circumcircle\n */\n// https://math.stackexchange.com/a/1460096\n\nfunction getCircumcircle(triangle) {\n // TS-TODO the next few lines are ignored because the types aren't current to the change in vectors (that can now be iterated)\n // @ts-ignore\n var _triangle$7 = _slicedToArray(triangle[0], 2),\n ax = _triangle$7[0],\n ay = _triangle$7[1]; // @ts-ignore\n\n\n var _triangle$8 = _slicedToArray(triangle[1], 2),\n bx = _triangle$8[0],\n by = _triangle$8[1]; // @ts-ignore\n\n\n var _triangle$9 = _slicedToArray(triangle[2], 2),\n cx = _triangle$9[0],\n cy = _triangle$9[1];\n\n if (arePointsCollinear(triangle)) return null; // points are collinear\n\n var m = new Matrix4(); // prettier-ignore\n\n m.set(1, 1, 1, 1, ax * ax + ay * ay, ax, ay, 1, bx * bx + by * by, bx, by, 1, cx * cx + cy * cy, cx, cy, 1);\n var m11 = getMinor(m, 1, 1);\n var m13 = getMinor(m, 1, 3);\n var m12 = getMinor(m, 1, 2);\n var m14 = getMinor(m, 1, 4);\n var x0 = 0.5 * (m12 / m11);\n var y0 = 0.5 * (m13 / m11);\n var r2 = x0 * x0 + y0 * y0 + m14 / m11;\n return {\n x: Math.abs(x0) === 0 ? 0 : x0,\n y: Math.abs(y0) === 0 ? 0 : -y0,\n r: Math.sqrt(r2)\n };\n} // https://stackoverflow.com/questions/39984709/how-can-i-check-wether-a-point-is-inside-the-circumcircle-of-3-points\n\nfunction isPointInCircumcircle(point, triangle) {\n var _ref = Array.isArray(triangle[0]) ? triangle[0] : triangle[0].toArray(),\n _ref2 = _slicedToArray(_ref, 2),\n ax = _ref2[0],\n ay = _ref2[1];\n\n var _ref3 = Array.isArray(triangle[1]) ? triangle[1] : triangle[1].toArray(),\n _ref4 = _slicedToArray(_ref3, 2),\n bx = _ref4[0],\n by = _ref4[1];\n\n var _ref5 = Array.isArray(triangle[2]) ? triangle[2] : triangle[2].toArray(),\n _ref6 = _slicedToArray(_ref5, 2),\n cx = _ref6[0],\n cy = _ref6[1];\n\n var _point2 = _slicedToArray(point, 2),\n px = _point2[0],\n py = _point2[1];\n\n if (arePointsCollinear(triangle)) throw new Error(\"Collinear points don't form a triangle\");\n /**\n | ax-px, ay-py, (ax-px)² + (ay-py)² |\n det = | bx-px, by-py, (bx-px)² + (by-py)² |\n | cx-px, cy-py, (cx-px)² + (cy-py)² |\n */\n\n var x1mpx = ax - px;\n var aympy = ay - py;\n var bxmpx = bx - px;\n var bympy = by - py;\n var cxmpx = cx - px;\n var cympy = cy - py; // prettier-ignore\n\n var d = determinant3(x1mpx, aympy, x1mpx * x1mpx + aympy * aympy, bxmpx, bympy, bxmpx * bxmpx + bympy * bympy, cxmpx, cympy, cxmpx * cxmpx + cympy * cympy); // if d is 0, the point is on C\n\n if (d === 0) {\n return true;\n }\n\n return !isTriangleClockwise(triangle) ? d > 0 : d < 0;\n} // From https://algorithmtutor.com/Computational-Geometry/Determining-if-two-consecutive-segments-turn-left-or-right/\n\nvar mv1 = new Vector2();\nvar mv2 = new Vector2();\n/**\n \n ╱ ╲ \n ╱ ╲ \n ▕ ▏ \n \n right left \n\n * NOTE: Should this use a buffer instead? [x0, y0, x1, y1]?\n */\n\nfunction doThreePointsMakeARight(points) {\n var _points$map = points.map(function (p) {\n if (Array.isArray(p)) {\n return _construct(Vector2, _toConsumableArray(p));\n }\n\n return p;\n }),\n _points$map2 = _slicedToArray(_points$map, 3),\n p1 = _points$map2[0],\n p2 = _points$map2[1],\n p3 = _points$map2[2];\n\n if (arePointsCollinear(points)) return false; // @ts-ignore\n\n var p2p1 = mv1.subVectors(p2, p1); // @ts-ignore\n\n var p3p1 = mv2.subVectors(p3, p1);\n var cross = p3p1.cross(p2p1);\n return cross > 0;\n}\n\nvar triangle = /*#__PURE__*/Object.freeze({\n __proto__: null,\n isPointInTriangle: isPointInTriangle,\n triangleDeterminant: triangleDeterminant,\n arePointsCollinear: arePointsCollinear,\n isTriangleClockwise: isTriangleClockwise,\n getCircumcircle: getCircumcircle,\n isPointInCircumcircle: isPointInCircumcircle,\n doThreePointsMakeARight: doThreePointsMakeARight\n});\n\nexport { _slicedToArray as _, _toConsumableArray as a, triangleDeterminant as b, arePointsCollinear as c, doThreePointsMakeARight as d, isTriangleClockwise as e, isPointInCircumcircle as f, getCircumcircle as g, isPointInTriangle as i, triangle as t };\n","import { d as doThreePointsMakeARight, a as _toConsumableArray, _ as _slicedToArray } from './triangle-b62b9067.esm.js';\nimport { Vector3, Matrix3 } from 'three';\nimport { a as matrixSum3 } from './matrix-baa530bf.esm.js';\n\n/**\n * Clamps a value between a range.\n */\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(max, value));\n} // Loops the value t, so that it is never larger than length and never smaller than 0.\n\nfunction repeat(t, length) {\n return clamp(t - Math.floor(t / length) * length, 0, length);\n} // Calculates the shortest difference between two given angles.\n\nfunction deltaAngle(current, target) {\n var delta = repeat(target - current, Math.PI * 2);\n if (delta > Math.PI) delta -= Math.PI * 2;\n return delta;\n}\n/**\n * Converts degrees to radians.\n */\n\nfunction degToRad(degrees) {\n return degrees / 180 * Math.PI;\n}\n/**\n * Converts radians to degrees.\n */\n\nfunction radToDeg(radians) {\n return radians * 180 / Math.PI;\n} // adapted from https://gist.github.com/stephanbogner/a5f50548a06bec723dcb0991dcbb0856 by https://twitter.com/st_phan\n\nfunction fibonacciOnSphere(buffer, _ref) {\n var _ref$radius = _ref.radius,\n radius = _ref$radius === void 0 ? 1 : _ref$radius;\n var samples = buffer.length / 3;\n var offset = 2 / samples;\n var increment = Math.PI * (3 - 2.2360679775);\n\n for (var i = 0; i < buffer.length; i += 3) {\n var y = i * offset - 1 + offset / 2;\n var distance = Math.sqrt(1 - Math.pow(y, 2));\n var phi = i % samples * increment;\n var x = Math.cos(phi) * distance;\n var z = Math.sin(phi) * distance;\n buffer[i] = x * radius;\n buffer[i + 1] = y * radius;\n buffer[i + 2] = z * radius;\n }\n} // @ts-ignore\n\nfunction vectorEquals(a, b) {\n var eps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Number.EPSILON;\n return Math.abs(a.x - b.x) < eps && Math.abs(a.y - b.y) < eps && Math.abs(a.z - b.z) < eps;\n}\n/**\n * Sorts vectors in lexicographic order, works with both v2 and v3\n *\n * Use as:\n * const sorted = arrayOfVectors.sort(lexicographicOrder)\n */\n// https://en.wikipedia.org/wiki/Lexicographic_order\n\nfunction lexicographic(a, b) {\n if (a.x === b.x) {\n // do a check to see if points is 3D,\n // in which case add y eq check and sort by z\n if (typeof a.z !== \"undefined\") {\n if (a.y === b.y) {\n return a.z - b.z;\n }\n }\n\n return a.y - b.y;\n }\n\n return a.x - b.x;\n}\n/**\n * Convex Hull\n *\n * Returns an array of 2D Vectors representing the convex hull of a set of 2D Vectors\n */\n\n/**\n * Calculate the convex hull of a set of points\n */\n\nfunction convexHull(_points) {\n var points = _points.sort(lexicographic); // put p1 and p2 in a list lUpper with p1 as the first point\n\n\n var lUpper = [points[0], points[1]]; // for i <- 3 to n\n\n for (var i = 2; i < points.length; i++) {\n lUpper.push(points[i]); // while lUpper contains more than 2 points and the last three points in lUpper do not make a right turn\n\n while (lUpper.length > 2 && doThreePointsMakeARight(_toConsumableArray(lUpper.slice(-3)))) {\n // delete the middle of the last three points from lUpper\n lUpper.splice(lUpper.length - 2, 1);\n }\n } // put pn and pn-1 in a list lLower with pn as the first point\n\n\n var lLower = [points[points.length - 1], points[points.length - 2]]; // for (i <- n - 2 downto 1)\n\n for (var _i = points.length - 3; _i >= 0; _i--) {\n // append pi to lLower\n lLower.push(points[_i]); // while lLower contains more than 2 points and the last three points in lLower do not make a right turn\n\n while (lLower.length > 2 && doThreePointsMakeARight(_toConsumableArray(lLower.slice(-3)))) {\n // delete the middle of the last three points from lLower\n lLower.splice(lLower.length - 2, 1);\n }\n } // remove the first and last point from lLower to avoid duplication of the points where the upper and lower hull meet\n\n\n lLower.splice(0, 1);\n lLower.splice(lLower.length - 1, 1); // prettier-ignore\n\n var c = [].concat(lUpper, lLower);\n return c;\n}\nfunction remap(x, _ref2, _ref3) {\n var _ref4 = _slicedToArray(_ref2, 2),\n low1 = _ref4[0],\n high1 = _ref4[1];\n\n var _ref5 = _slicedToArray(_ref3, 2),\n low2 = _ref5[0],\n high2 = _ref5[1];\n\n return low2 + (x - low1) * (high2 - low2) / (high1 - low1);\n}\n/**\n *\n * https://www.desmos.com/calculator/vsnmlaljdu\n *\n * Ease-in-out, goes to -Infinite before 0 and Infinite after 1\n *\n * @param t\n * @returns\n */\n\nfunction fade(t) {\n return t * t * t * (t * (t * 6 - 15) + 10);\n}\n/**\n *\n * Returns the result of linearly interpolating between input A and input B by input T.\n *\n * @param v0\n * @param v1\n * @param t\n * @returns\n */\n\nfunction lerp(v0, v1, t) {\n return v0 * (1 - t) + v1 * t;\n}\n/**\n *\n * Returns the linear parameter that produces the interpolant specified by input T within the range of input A to input B.\n *\n * @param v0\n * @param v1\n * @param t\n * @returns\n */\n\nfunction inverseLerp(v0, v1, t) {\n return (t - v0) / (v1 - v0);\n}\n/**\n *\n */\n\nfunction normalize(x, y, z) {\n var m = Math.sqrt(x * x + y * y + z * z);\n return [x / m, y / m, z / m];\n}\n/**\n *\n */\n\nfunction pointOnCubeToPointOnSphere(x, y, z) {\n var x2 = x * x;\n var y2 = y * y;\n var z2 = z * z;\n var nx = x * Math.sqrt(1 - (y2 + z2) / 2 + y2 * z2 / 3);\n var ny = y * Math.sqrt(1 - (z2 + x2) / 2 + z2 * x2 / 3);\n var nz = z * Math.sqrt(1 - (x2 + y2) / 2 + x2 * y2 / 3);\n return [nx, ny, nz];\n} // https://math.stackexchange.com/questions/180418/calculate-rotation-matrix-to-align-vector-a-to-vector-b-in-3d\n\n/**\n * Give two unit vectors a and b, returns the transformation matrix that rotates a onto b.\n *\n * */\n\nfunction rotateVectorOnVector(a, b) {\n var v = new Vector3().crossVectors(a, b);\n var c = a.dot(b);\n var i = new Matrix3().identity(); // skew-symmetric cross-product matrix of 𝑣 https://en.wikipedia.org/wiki/Skew-symmetric_matrix\n // prettier-ignore\n\n var vx = new Matrix3().set(0, -v.z, v.y, v.z, 0, -v.x, -v.y, v.x, 0);\n var vxsquared = new Matrix3().multiplyMatrices(vx, vx).multiplyScalar(1 / (1 + c));\n\n var _final = matrixSum3(matrixSum3(i, vx), vxsquared);\n\n return _final;\n} // calculate latitude and longitude (in radians) from point on unit sphere\n\nfunction pointToCoordinate(x, y, z) {\n var lat = Math.asin(y);\n var lon = Math.atan2(x, -z);\n return [lat, lon];\n} // calculate point on unit sphere given latitude and logitude in radians\n\nfunction coordinateToPoint(lat, lon) {\n var y = Math.sin(lat);\n var r = Math.cos(lat);\n var x = Math.sin(lon) * r;\n var z = -Math.cos(lon) * r;\n return [x, y, z];\n}\n/**\n * Given a plane and a segment, return the intersection point if it exists or null it doesn't.\n */\n\nfunction planeSegmentIntersection(plane, segment) {\n var _segment = _slicedToArray(segment, 2),\n a = _segment[0],\n b = _segment[1];\n\n var matrix = rotateVectorOnVector(plane.normal, new Vector3(0, 1, 0));\n var t = inverseLerp(a.clone().applyMatrix3(matrix).y, b.clone().applyMatrix3(matrix).y, 0);\n return new Vector3().lerpVectors(a, b, t);\n}\n/**\n * Given a plane and a point, return the distance.\n */\n\nfunction pointToPlaneDistance(p, plane) {\n var d = plane.normal.dot(p); // TODO\n\n return d;\n}\nfunction getIndexFrom3D(coords, sides) {\n var _coords = _slicedToArray(coords, 3),\n ix = _coords[0],\n iy = _coords[1],\n iz = _coords[2];\n\n var _sides = _slicedToArray(sides, 2),\n rx = _sides[0],\n ry = _sides[1];\n\n return iz * rx * ry + iy * rx + ix;\n}\nfunction get3DFromIndex(index, size) {\n var _size = _slicedToArray(size, 2),\n rx = _size[0],\n ry = _size[1];\n\n var a = rx * ry;\n var z = index / a;\n var b = index - a * z;\n var y = b / rx;\n var x = b % rx;\n return [x, y, z];\n}\nfunction getIndexFrom2D(coords, size) {\n return coords[0] + size[0] * coords[1];\n}\nfunction get2DFromIndex(index, columns) {\n var x = index % columns;\n var y = Math.floor(index / columns);\n return [x, y];\n}\n\nvar misc = /*#__PURE__*/Object.freeze({\n __proto__: null,\n clamp: clamp,\n repeat: repeat,\n deltaAngle: deltaAngle,\n degToRad: degToRad,\n radToDeg: radToDeg,\n fibonacciOnSphere: fibonacciOnSphere,\n vectorEquals: vectorEquals,\n lexicographic: lexicographic,\n convexHull: convexHull,\n remap: remap,\n fade: fade,\n lerp: lerp,\n inverseLerp: inverseLerp,\n normalize: normalize,\n pointOnCubeToPointOnSphere: pointOnCubeToPointOnSphere,\n rotateVectorOnVector: rotateVectorOnVector,\n pointToCoordinate: pointToCoordinate,\n coordinateToPoint: coordinateToPoint,\n planeSegmentIntersection: planeSegmentIntersection,\n pointToPlaneDistance: pointToPlaneDistance,\n getIndexFrom3D: getIndexFrom3D,\n get3DFromIndex: get3DFromIndex,\n getIndexFrom2D: getIndexFrom2D,\n get2DFromIndex: get2DFromIndex\n});\n\nexport { degToRad as a, radToDeg as b, clamp as c, deltaAngle as d, fibonacciOnSphere as e, fade as f, lexicographic as g, convexHull as h, remap as i, inverseLerp as j, rotateVectorOnVector as k, lerp as l, misc as m, normalize as n, pointToCoordinate as o, pointOnCubeToPointOnSphere as p, coordinateToPoint as q, repeat as r, planeSegmentIntersection as s, pointToPlaneDistance as t, getIndexFrom3D as u, vectorEquals as v, get3DFromIndex as w, getIndexFrom2D as x, get2DFromIndex as y };\n","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nexport { _classCallCheck as _ };\n","import { a as _defineProperty, _ as _objectSpread2 } from './objectSpread2-284232a6.esm.js';\nimport { _ as _classCallCheck } from './classCallCheck-9098b006.esm.js';\nimport { l as lerp, f as fade } from './misc-19a3ec46.esm.js';\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\n/*\n * A speed-improved perlin and simplex noise algorithms for 2D.\n *\n * Based on example code by Stefan Gustavson (stegu@itn.liu.se).\n * Optimisations by Peter Eastman (peastman@drizzle.stanford.edu).\n * Better rank ordering method by Stefan Gustavson in 2012.\n * Converted to Javascript by Joseph Gentle.\n *\n * Version 2012-03-09\n *\n * This code was placed in the public domain by its original author,\n * Stefan Gustavson. You may use it as you see fit, but\n * attribution is appreciated.\n *\n */\n\nvar Grad = function Grad(x, y, z) {\n var _this = this;\n\n _classCallCheck(this, Grad);\n\n _defineProperty(this, \"dot2\", function (x, y) {\n return _this.x * x + _this.y * y;\n });\n\n _defineProperty(this, \"dot3\", function (x, y, z) {\n return _this.x * x + _this.y * y + _this.z * z;\n });\n\n this.x = x;\n this.y = y;\n this.z = z;\n};\n\nvar grad3 = [new Grad(1, 1, 0), new Grad(-1, 1, 0), new Grad(1, -1, 0), new Grad(-1, -1, 0), new Grad(1, 0, 1), new Grad(-1, 0, 1), new Grad(1, 0, -1), new Grad(-1, 0, -1), new Grad(0, 1, 1), new Grad(0, -1, 1), new Grad(0, 1, -1), new Grad(0, -1, -1)];\nvar p = [151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10, 23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211, 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208, 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123, 5, 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, 119, 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232, 178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249, 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205, 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180]; // To remove the need for index wrapping, double the permutation table length\n\nvar perm = new Array(512);\nvar gradP = new Array(512); // This isn't a very good seeding function, but it works ok. It supports 2^16\n// different seed values. Write something better if you need more seeds.\n\nvar seed = function seed(_seed) {\n if (_seed > 0 && _seed < 1) {\n // Scale the seed out\n _seed *= 65536;\n }\n\n _seed = Math.floor(_seed);\n\n if (_seed < 256) {\n _seed |= _seed << 8;\n }\n\n for (var i = 0; i < 256; i++) {\n var v;\n\n if (i & 1) {\n v = p[i] ^ _seed & 255;\n } else {\n v = p[i] ^ _seed >> 8 & 255;\n }\n\n perm[i] = perm[i + 256] = v;\n gradP[i] = gradP[i + 256] = grad3[v % 12];\n }\n};\nseed(0);\n/*\n for(var i=0; i<256; i++) {\n perm[i] = perm[i + 256] = p[i];\n gradP[i] = gradP[i + 256] = grad3[perm[i] % 12];\n }*/\n// Skewing and unskewing factors for 2, 3, and 4 dimensions\n\nvar F2 = 0.5 * (Math.sqrt(3) - 1);\nvar G2 = (3 - Math.sqrt(3)) / 6;\nvar F3 = 1 / 3;\nvar G3 = 1 / 6; // 2D simplex noise\n\nvar simplex2 = function simplex2(xin, yin) {\n var n0, n1, n2; // Noise contributions from the three corners\n // Skew the input space to determine which simplex cell we're in\n\n var s = (xin + yin) * F2; // Hairy factor for 2D\n\n var i = Math.floor(xin + s);\n var j = Math.floor(yin + s);\n var t = (i + j) * G2;\n var x0 = xin - i + t; // The x,y distances from the cell origin, unskewed.\n\n var y0 = yin - j + t; // For the 2D case, the simplex shape is an equilateral triangle.\n // Determine which simplex we are in.\n\n var i1, j1; // Offsets for second (middle) corner of simplex in (i,j) coords\n\n if (x0 > y0) {\n // lower triangle, XY order: (0,0)->(1,0)->(1,1)\n i1 = 1;\n j1 = 0;\n } else {\n // upper triangle, YX order: (0,0)->(0,1)->(1,1)\n i1 = 0;\n j1 = 1;\n } // A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and\n // a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where\n // c = (3-sqrt(3))/6\n\n\n var x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords\n\n var y1 = y0 - j1 + G2;\n var x2 = x0 - 1 + 2 * G2; // Offsets for last corner in (x,y) unskewed coords\n\n var y2 = y0 - 1 + 2 * G2; // Work out the hashed gradient indices of the three simplex corners\n\n i &= 255;\n j &= 255;\n var gi0 = gradP[i + perm[j]];\n var gi1 = gradP[i + i1 + perm[j + j1]];\n var gi2 = gradP[i + 1 + perm[j + 1]]; // Calculate the contribution from the three corners\n\n var t0 = 0.5 - x0 * x0 - y0 * y0;\n\n if (t0 < 0) {\n n0 = 0;\n } else {\n t0 *= t0;\n n0 = t0 * t0 * gi0.dot2(x0, y0); // (x,y) of grad3 used for 2D gradient\n }\n\n var t1 = 0.5 - x1 * x1 - y1 * y1;\n\n if (t1 < 0) {\n n1 = 0;\n } else {\n t1 *= t1;\n n1 = t1 * t1 * gi1.dot2(x1, y1);\n }\n\n var t2 = 0.5 - x2 * x2 - y2 * y2;\n\n if (t2 < 0) {\n n2 = 0;\n } else {\n t2 *= t2;\n n2 = t2 * t2 * gi2.dot2(x2, y2);\n } // Add contributions from each corner to get the final noise value.\n // The result is scaled to return values in the interval [-1,1].\n\n\n return 70 * (n0 + n1 + n2);\n}; // 3D simplex noise\n\nvar simplex3 = function simplex3(xin, yin, zin) {\n var n0, n1, n2, n3; // Noise contributions from the four corners\n // Skew the input space to determine which simplex cell we're in\n\n var s = (xin + yin + zin) * F3; // Hairy factor for 2D\n\n var i = Math.floor(xin + s);\n var j = Math.floor(yin + s);\n var k = Math.floor(zin + s);\n var t = (i + j + k) * G3;\n var x0 = xin - i + t; // The x,y distances from the cell origin, unskewed.\n\n var y0 = yin - j + t;\n var z0 = zin - k + t; // For the 3D case, the simplex shape is a slightly irregular tetrahedron.\n // Determine which simplex we are in.\n\n var i1, j1, k1; // Offsets for second corner of simplex in (i,j,k) coords\n\n var i2, j2, k2; // Offsets for third corner of simplex in (i,j,k) coords\n\n if (x0 >= y0) {\n if (y0 >= z0) {\n i1 = 1;\n j1 = 0;\n k1 = 0;\n i2 = 1;\n j2 = 1;\n k2 = 0;\n } else if (x0 >= z0) {\n i1 = 1;\n j1 = 0;\n k1 = 0;\n i2 = 1;\n j2 = 0;\n k2 = 1;\n } else {\n i1 = 0;\n j1 = 0;\n k1 = 1;\n i2 = 1;\n j2 = 0;\n k2 = 1;\n }\n } else {\n if (y0 < z0) {\n i1 = 0;\n j1 = 0;\n k1 = 1;\n i2 = 0;\n j2 = 1;\n k2 = 1;\n } else if (x0 < z0) {\n i1 = 0;\n j1 = 1;\n k1 = 0;\n i2 = 0;\n j2 = 1;\n k2 = 1;\n } else {\n i1 = 0;\n j1 = 1;\n k1 = 0;\n i2 = 1;\n j2 = 1;\n k2 = 0;\n }\n } // A step of (1,0,0) in (i,j,k) means a step of (1-c,-c,-c) in (x,y,z),\n // a step of (0,1,0) in (i,j,k) means a step of (-c,1-c,-c) in (x,y,z), and\n // a step of (0,0,1) in (i,j,k) means a step of (-c,-c,1-c) in (x,y,z), where\n // c = 1/6.\n\n\n var x1 = x0 - i1 + G3; // Offsets for second corner\n\n var y1 = y0 - j1 + G3;\n var z1 = z0 - k1 + G3;\n var x2 = x0 - i2 + 2 * G3; // Offsets for third corner\n\n var y2 = y0 - j2 + 2 * G3;\n var z2 = z0 - k2 + 2 * G3;\n var x3 = x0 - 1 + 3 * G3; // Offsets for fourth corner\n\n var y3 = y0 - 1 + 3 * G3;\n var z3 = z0 - 1 + 3 * G3; // Work out the hashed gradient indices of the four simplex corners\n\n i &= 255;\n j &= 255;\n k &= 255;\n var gi0 = gradP[i + perm[j + perm[k]]];\n var gi1 = gradP[i + i1 + perm[j + j1 + perm[k + k1]]];\n var gi2 = gradP[i + i2 + perm[j + j2 + perm[k + k2]]];\n var gi3 = gradP[i + 1 + perm[j + 1 + perm[k + 1]]]; // Calculate the contribution from the four corners\n\n var t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0;\n\n if (t0 < 0) {\n n0 = 0;\n } else {\n t0 *= t0;\n n0 = t0 * t0 * gi0.dot3(x0, y0, z0); // (x,y) of grad3 used for 2D gradient\n }\n\n var t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1;\n\n if (t1 < 0) {\n n1 = 0;\n } else {\n t1 *= t1;\n n1 = t1 * t1 * gi1.dot3(x1, y1, z1);\n }\n\n var t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2;\n\n if (t2 < 0) {\n n2 = 0;\n } else {\n t2 *= t2;\n n2 = t2 * t2 * gi2.dot3(x2, y2, z2);\n }\n\n var t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3;\n\n if (t3 < 0) {\n n3 = 0;\n } else {\n t3 *= t3;\n n3 = t3 * t3 * gi3.dot3(x3, y3, z3);\n } // Add contributions from each corner to get the final noise value.\n // The result is scaled to return values in the interval [-1,1].\n\n\n return 32 * (n0 + n1 + n2 + n3);\n}; // ##### Perlin noise stuff\n// 2D Perlin Noise\n\nvar perlin2 = function perlin2(x, y) {\n // Find unit grid cell containing point\n var X = Math.floor(x),\n Y = Math.floor(y); // Get relative xy coordinates of point within that cell\n\n x = x - X;\n y = y - Y; // Wrap the integer cells at 255 (smaller integer period can be introduced here)\n\n X = X & 255;\n Y = Y & 255; // Calculate noise contributions from each of the four corners\n\n var n00 = gradP[X + perm[Y]].dot2(x, y);\n var n01 = gradP[X + perm[Y + 1]].dot2(x, y - 1);\n var n10 = gradP[X + 1 + perm[Y]].dot2(x - 1, y);\n var n11 = gradP[X + 1 + perm[Y + 1]].dot2(x - 1, y - 1); // Compute the fade curve value for x\n\n var u = fade(x); // Interpolate the four results\n\n return lerp(lerp(n00, n10, u), lerp(n01, n11, u), fade(y));\n}; // 3D Perlin Noise\n\nvar perlin3 = function perlin3(x, y, z) {\n // Find unit grid cell containing point\n var X = Math.floor(x),\n Y = Math.floor(y),\n Z = Math.floor(z); // Get relative xyz coordinates of point within that cell\n\n x = x - X;\n y = y - Y;\n z = z - Z; // Wrap the integer cells at 255 (smaller integer period can be introduced here)\n\n X = X & 255;\n Y = Y & 255;\n Z = Z & 255; // Calculate noise contributions from each of the eight corners\n\n var n000 = gradP[X + perm[Y + perm[Z]]].dot3(x, y, z);\n var n001 = gradP[X + perm[Y + perm[Z + 1]]].dot3(x, y, z - 1);\n var n010 = gradP[X + perm[Y + 1 + perm[Z]]].dot3(x, y - 1, z);\n var n011 = gradP[X + perm[Y + 1 + perm[Z + 1]]].dot3(x, y - 1, z - 1);\n var n100 = gradP[X + 1 + perm[Y + perm[Z]]].dot3(x - 1, y, z);\n var n101 = gradP[X + 1 + perm[Y + perm[Z + 1]]].dot3(x - 1, y, z - 1);\n var n110 = gradP[X + 1 + perm[Y + 1 + perm[Z]]].dot3(x - 1, y - 1, z);\n var n111 = gradP[X + 1 + perm[Y + 1 + perm[Z + 1]]].dot3(x - 1, y - 1, z - 1); // Compute the fade curve value for x, y, z\n\n var u = fade(x);\n var v = fade(y);\n var w = fade(z); // Interpolate\n\n return lerp(lerp(lerp(n000, n100, u), lerp(n001, n101, u), w), lerp(lerp(n010, n110, u), lerp(n011, n111, u), w), v);\n};\n\nvar noise = /*#__PURE__*/Object.freeze({\n __proto__: null,\n seed: seed,\n simplex2: simplex2,\n simplex3: simplex3,\n perlin2: perlin2,\n perlin3: perlin3\n});\n\nvar TAU = Math.PI * 2;\nvar FlashGen = /*#__PURE__*/function () {\n function FlashGen(props) {\n _classCallCheck(this, FlashGen);\n\n _defineProperty(this, \"nextBurstTime\", 0);\n\n _defineProperty(this, \"nextFlashEndTime\", 0);\n\n _defineProperty(this, \"flashesDone\", 0);\n\n _defineProperty(this, \"isFlashing\", false);\n\n _defineProperty(this, \"currentCount\", 0);\n\n _defineProperty(this, \"flashIntensity\", 0);\n\n _defineProperty(this, \"isDecaying\", false);\n\n _defineProperty(this, \"autoBurst\", true);\n\n _defineProperty(this, \"decaySpeed\", 40);\n\n _defineProperty(this, \"minInterval\", 5000);\n\n _defineProperty(this, \"maxInterval\", 10000);\n\n _defineProperty(this, \"minDuration\", 50);\n\n _defineProperty(this, \"maxDuration\", 300);\n\n _defineProperty(this, \"count\", 5);\n\n Object.assign(this, props);\n }\n\n _createClass(FlashGen, [{\n key: \"scheduleNextBurst\",\n value: function scheduleNextBurst(currentTime) {\n var burstInterval = Math.random() * (this.maxInterval - this.minInterval) + this.minInterval;\n this.nextBurstTime = currentTime + burstInterval / 1000;\n this.flashesDone = 0;\n this.isFlashing = false;\n }\n }, {\n key: \"burst\",\n value: function burst() {\n this.nextBurstTime = 0;\n this.flashesDone = 0;\n this.isFlashing = false;\n }\n }, {\n key: \"update\",\n value: function update(currentTime, delta) {\n if (currentTime > this.nextBurstTime && this.currentCount === 0) {\n this.currentCount = Math.floor(Math.random() * this.count) + 1;\n }\n\n if (this.flashesDone < this.currentCount && currentTime > this.nextBurstTime) {\n if (!this.isFlashing) {\n this.isFlashing = true;\n this.flashIntensity = 1;\n var flashDuration = Math.random() * (this.maxDuration - this.minDuration) + this.minDuration;\n this.nextFlashEndTime = currentTime + flashDuration / 1000;\n } else if (this.isFlashing && currentTime > this.nextFlashEndTime) {\n this.isFlashing = false;\n this.isDecaying = true;\n this.flashesDone++;\n\n if (this.flashesDone >= this.currentCount) {\n this.currentCount = 0;\n if (this.autoBurst) this.scheduleNextBurst(currentTime);\n }\n }\n }\n\n if (this.isDecaying) {\n this.flashIntensity -= delta * this.decaySpeed;\n this.flashIntensity = Math.max(0, Math.min(1, this.flashIntensity));\n\n if (this.flashIntensity <= 0) {\n this.isDecaying = false;\n this.flashIntensity = 0;\n }\n }\n\n return this.flashIntensity;\n }\n }]);\n\n return FlashGen;\n}(); // Credits @kchapelier https://github.com/kchapelier/wavefunctioncollapse/blob/master/example/lcg.js#L22-L30\n\nfunction normalizeSeed(seed) {\n if (typeof seed === \"number\") {\n seed = Math.abs(seed);\n } else if (typeof seed === \"string\") {\n var string = seed;\n seed = 0;\n\n for (var i = 0; i < string.length; i++) {\n seed = (seed + (i + 1) * (string.charCodeAt(i) % 96)) % 2147483647;\n }\n }\n\n if (seed === 0) {\n seed = 311;\n }\n\n return seed;\n}\n\nfunction lcgRandom(seed) {\n var state = normalizeSeed(seed);\n return function () {\n var result = state * 48271 % 2147483647;\n state = result;\n return result / 2147483647;\n };\n}\n\nvar Generator = function Generator(_seed) {\n var _this = this;\n\n _classCallCheck(this, Generator);\n\n _defineProperty(this, \"seed\", 0);\n\n _defineProperty(this, \"init\", function (seed) {\n _this.seed = seed;\n _this.value = lcgRandom(seed);\n });\n\n _defineProperty(this, \"value\", lcgRandom(this.seed));\n\n this.init(_seed);\n};\nvar defaultGen = new Generator(Math.random());\n/***\n * [3D] Sphere\n */\n\nvar defaultSphere = {\n radius: 1,\n center: [0, 0, 0]\n}; // random on surface of sphere\n// - https://twitter.com/fermatslibrary/status/1430932503578226688\n// - https://mathworld.wolfram.com/SpherePointPicking.html\n\nfunction onSphere(buffer, sphere) {\n var rng = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultGen;\n\n var _defaultSphere$sphere = _objectSpread2(_objectSpread2({}, defaultSphere), sphere),\n radius = _defaultSphere$sphere.radius,\n center = _defaultSphere$sphere.center;\n\n for (var i = 0; i < buffer.length; i += 3) {\n var u = rng.value();\n var v = rng.value();\n var theta = Math.acos(2 * v - 1);\n var phi = TAU * u;\n buffer[i] = Math.sin(theta) * Math.cos(phi) * radius + center[0];\n buffer[i + 1] = Math.sin(theta) * Math.sin(phi) * radius + center[1];\n buffer[i + 2] = Math.cos(theta) * radius + center[2];\n }\n\n return buffer;\n} // from \"Another Method\" https://datagenetics.com/blog/january32020/index.html\n\nfunction inSphere(buffer, sphere) {\n var rng = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultGen;\n\n var _defaultSphere$sphere2 = _objectSpread2(_objectSpread2({}, defaultSphere), sphere),\n radius = _defaultSphere$sphere2.radius,\n center = _defaultSphere$sphere2.center;\n\n for (var i = 0; i < buffer.length; i += 3) {\n var u = Math.pow(rng.value(), 1 / 3);\n var x = rng.value() * 2 - 1;\n var y = rng.value() * 2 - 1;\n var z = rng.value() * 2 - 1;\n var mag = Math.sqrt(x * x + y * y + z * z);\n x = u * x / mag;\n y = u * y / mag;\n z = u * z / mag;\n buffer[i] = x * radius + center[0];\n buffer[i + 1] = y * radius + center[1];\n buffer[i + 2] = z * radius + center[2];\n }\n\n return buffer;\n}\n/***\n * [2D] Circle\n */\n\nvar defaultCircle = {\n radius: 1,\n center: [0, 0]\n}; // random circle https://stackoverflow.com/a/50746409\n\nfunction inCircle(buffer, circle) {\n var rng = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultGen;\n\n var _defaultCircle$circle = _objectSpread2(_objectSpread2({}, defaultCircle), circle),\n radius = _defaultCircle$circle.radius,\n center = _defaultCircle$circle.center;\n\n for (var i = 0; i < buffer.length; i += 2) {\n var r = radius * Math.sqrt(rng.value());\n var theta = rng.value() * TAU;\n buffer[i] = Math.sin(theta) * r + center[0];\n buffer[i + 1] = Math.cos(theta) * r + center[1];\n }\n\n return buffer;\n}\nfunction onCircle(buffer, circle) {\n var rng = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultGen;\n\n var _defaultCircle$circle2 = _objectSpread2(_objectSpread2({}, defaultCircle), circle),\n radius = _defaultCircle$circle2.radius,\n center = _defaultCircle$circle2.center;\n\n for (var i = 0; i < buffer.length; i += 2) {\n var theta = rng.value() * TAU;\n buffer[i] = Math.sin(theta) * radius + center[0];\n buffer[i + 1] = Math.cos(theta) * radius + center[1];\n }\n\n return buffer;\n}\n/**\n * [2D] Plane\n */\n\nvar defaultRect = {\n sides: 1,\n center: [0, 0]\n};\nfunction inRect(buffer, rect) {\n var rng = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultGen;\n\n var _defaultRect$rect = _objectSpread2(_objectSpread2({}, defaultRect), rect),\n sides = _defaultRect$rect.sides,\n center = _defaultRect$rect.center;\n\n var sideX = typeof sides === \"number\" ? sides : sides[0];\n var sideY = typeof sides === \"number\" ? sides : sides[1];\n\n for (var i = 0; i < buffer.length; i += 2) {\n buffer[i] = (rng.value() - 0.5) * sideX + center[0];\n buffer[i + 1] = (rng.value() - 0.5) * sideY + center[1];\n }\n\n return buffer;\n}\nfunction onRect(buffer, rect) {\n return buffer;\n}\n/***\n * [3D] Box\n */\n\nfunction inBox(buffer, box) {\n var rng = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultGen;\n\n var _defaultBox$box = _objectSpread2(_objectSpread2({}, defaultBox), box),\n sides = _defaultBox$box.sides,\n center = _defaultBox$box.center;\n\n var sideX = typeof sides === \"number\" ? sides : sides[0];\n var sideY = typeof sides === \"number\" ? sides : sides[1];\n var sideZ = typeof sides === \"number\" ? sides : sides[2];\n\n for (var i = 0; i < buffer.length; i += 3) {\n buffer[i] = (rng.value() - 0.5) * sideX + center[0];\n buffer[i + 1] = (rng.value() - 0.5) * sideY + center[1];\n buffer[i + 2] = (rng.value() - 0.5) * sideZ + center[2];\n }\n\n return buffer;\n}\nvar defaultBox = {\n sides: 1,\n center: [0, 0, 0]\n};\nfunction onBox(buffer, box) {\n var rng = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultGen;\n\n var _defaultBox$box2 = _objectSpread2(_objectSpread2({}, defaultBox), box),\n sides = _defaultBox$box2.sides,\n center = _defaultBox$box2.center;\n\n var sideX = typeof sides === \"number\" ? sides : sides[0];\n var sideY = typeof sides === \"number\" ? sides : sides[1];\n var sideZ = typeof sides === \"number\" ? sides : sides[2];\n\n for (var i = 0; i < buffer.length; i += 3) {\n buffer[i] = (rng.value() - 0.5) * sideX + center[0];\n buffer[i + 1] = (rng.value() - 0.5) * sideY + center[1];\n buffer[i + 2] = (rng.value() - 0.5) * sideZ + center[2];\n }\n\n return buffer;\n}\n\nvar index = /*#__PURE__*/Object.freeze({\n __proto__: null,\n FlashGen: FlashGen,\n Generator: Generator,\n onSphere: onSphere,\n inSphere: inSphere,\n inCircle: inCircle,\n onCircle: onCircle,\n inRect: inRect,\n onRect: onRect,\n inBox: inBox,\n onBox: onBox,\n noise: noise\n});\n\nexport { FlashGen as F, Generator as G, inSphere as a, inCircle as b, onCircle as c, inRect as d, onRect as e, inBox as f, onBox as g, index as i, noise as n, onSphere as o };\n","import { a as _toConsumableArray } from './triangle-b62b9067.esm.js';\nimport { Color, Vector3, Quaternion, Matrix4, Vector2, Vector4, Euler, Spherical } from 'three';\nimport { d as deltaAngle } from './misc-19a3ec46.esm.js';\n\nvar rsqw = function rsqw(t) {\n var delta = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.01;\n var a = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n var f = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1 / (2 * Math.PI);\n return a / Math.atan(1 / delta) * Math.atan(Math.sin(2 * Math.PI * t * f) / delta);\n};\nvar exp = function exp(t) {\n return 1 / (1 + t + 0.48 * t * t + 0.235 * t * t * t);\n};\nvar linear = function linear(t) {\n return t;\n};\nvar sine = {\n \"in\": function _in(x) {\n return 1 - Math.cos(x * Math.PI / 2);\n },\n out: function out(x) {\n return Math.sin(x * Math.PI / 2);\n },\n inOut: function inOut(x) {\n return -(Math.cos(Math.PI * x) - 1) / 2;\n }\n};\nvar cubic = {\n \"in\": function _in(x) {\n return x * x * x;\n },\n out: function out(x) {\n return 1 - Math.pow(1 - x, 3);\n },\n inOut: function inOut(x) {\n return x < 0.5 ? 4 * x * x * x : 1 - Math.pow(-2 * x + 2, 3) / 2;\n }\n};\nvar quint = {\n \"in\": function _in(x) {\n return x * x * x * x * x;\n },\n out: function out(x) {\n return 1 - Math.pow(1 - x, 5);\n },\n inOut: function inOut(x) {\n return x < 0.5 ? 16 * x * x * x * x * x : 1 - Math.pow(-2 * x + 2, 5) / 2;\n }\n};\nvar circ = {\n \"in\": function _in(x) {\n return 1 - Math.sqrt(1 - Math.pow(x, 2));\n },\n out: function out(x) {\n return Math.sqrt(1 - Math.pow(x - 1, 2));\n },\n inOut: function inOut(x) {\n return x < 0.5 ? (1 - Math.sqrt(1 - Math.pow(2 * x, 2))) / 2 : (Math.sqrt(1 - Math.pow(-2 * x + 2, 2)) + 1) / 2;\n }\n};\nvar quart = {\n \"in\": function _in(t) {\n return t * t * t * t;\n },\n out: function out(t) {\n return 1 - --t * t * t * t;\n },\n inOut: function inOut(t) {\n return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\n }\n};\nvar expo = {\n \"in\": function _in(x) {\n return x === 0 ? 0 : Math.pow(2, 10 * x - 10);\n },\n out: function out(x) {\n return x === 1 ? 1 : 1 - Math.pow(2, -10 * x);\n },\n inOut: function inOut(x) {\n return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? Math.pow(2, 20 * x - 10) / 2 : (2 - Math.pow(2, -20 * x + 10)) / 2;\n }\n};\n/**\n * Damp, based on Game Programming Gems 4 Chapter 1.10\n * Return value indicates whether the animation is still running.\n */\n\nfunction damp(\n/** The object */\ncurrent,\n/** The key to animate */\nprop,\n/** To goal value */\ntarget) {\n var smoothTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.25;\n var delta = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0.01;\n var maxSpeed = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : Infinity;\n var easing = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : exp;\n var eps = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 0.001;\n var vel = \"velocity_\" + prop;\n if (current.__damp === undefined) current.__damp = {};\n if (current.__damp[vel] === undefined) current.__damp[vel] = 0;\n\n if (Math.abs(current[prop] - target) <= eps) {\n current[prop] = target;\n return false;\n }\n\n smoothTime = Math.max(0.0001, smoothTime);\n var omega = 2 / smoothTime;\n var t = easing(omega * delta);\n var change = current[prop] - target;\n var originalTo = target; // Clamp maximum maxSpeed\n\n var maxChange = maxSpeed * smoothTime;\n change = Math.min(Math.max(change, -maxChange), maxChange);\n target = current[prop] - change;\n var temp = (current.__damp[vel] + omega * change) * delta;\n current.__damp[vel] = (current.__damp[vel] - omega * temp) * t;\n var output = target + (change + temp) * t; // Prevent overshooting\n\n if (originalTo - current[prop] > 0.0 === output > originalTo) {\n output = originalTo;\n current.__damp[vel] = (output - originalTo) / delta;\n }\n\n current[prop] = output;\n return true;\n}\n/**\n * DampLookAt\n */\n\nvar isCamera = function isCamera(v) {\n return v && v.isCamera;\n};\n\nvar isLight = function isLight(v) {\n return v && v.isLight;\n};\n\nvar vl3d = /*@__PURE__*/new Vector3();\n\nvar _q1 = /*@__PURE__*/new Quaternion();\n\nvar _q2 = /*@__PURE__*/new Quaternion();\n\nvar _m1 = /*@__PURE__*/new Matrix4();\n\nvar _position = /*@__PURE__*/new Vector3();\n\nfunction dampLookAt(current, target, smoothTime, delta, maxSpeed, easing, eps) {\n // This method does not support objects having non-uniformly-scaled parent(s)\n if (typeof target === \"number\") vl3d.setScalar(target);else if (Array.isArray(target)) vl3d.set(target[0], target[1], target[2]);else vl3d.copy(target);\n var parent = current.parent;\n current.updateWorldMatrix(true, false);\n\n _position.setFromMatrixPosition(current.matrixWorld);\n\n if (isCamera(current) || isLight(current)) _m1.lookAt(_position, vl3d, current.up);else _m1.lookAt(vl3d, _position, current.up);\n dampQ(current.quaternion, _q2.setFromRotationMatrix(_m1), smoothTime, delta, maxSpeed, easing, eps);\n\n if (parent) {\n _m1.extractRotation(parent.matrixWorld);\n\n _q1.setFromRotationMatrix(_m1);\n\n dampQ(current.quaternion, _q2.copy(current.quaternion).premultiply(_q1.invert()), smoothTime, delta, maxSpeed, easing, eps);\n }\n}\n/**\n * DampAngle, with a shortest-path\n */\n\nfunction dampAngle(current, prop, target, smoothTime, delta, maxSpeed, easing, eps) {\n return damp(current, prop, current[prop] + deltaAngle(current[prop], target), smoothTime, delta, maxSpeed, easing, eps);\n}\n/**\n * Vector2D Damp\n */\n\nvar v2d = /*@__PURE__*/new Vector2();\nvar a2, b2;\nfunction damp2(current, target, smoothTime, delta, maxSpeed, easing, eps) {\n if (typeof target === \"number\") v2d.setScalar(target);else if (Array.isArray(target)) v2d.set(target[0], target[1]);else v2d.copy(target);\n a2 = damp(current, \"x\", v2d.x, smoothTime, delta, maxSpeed, easing, eps);\n b2 = damp(current, \"y\", v2d.y, smoothTime, delta, maxSpeed, easing, eps);\n return a2 || b2;\n}\n/**\n * Vector3D Damp\n */\n\nvar v3d = /*@__PURE__*/new Vector3();\nvar a3, b3, c3;\nfunction damp3(current, target, smoothTime, delta, maxSpeed, easing, eps) {\n if (typeof target === \"number\") v3d.setScalar(target);else if (Array.isArray(target)) v3d.set(target[0], target[1], target[2]);else v3d.copy(target);\n a3 = damp(current, \"x\", v3d.x, smoothTime, delta, maxSpeed, easing, eps);\n b3 = damp(current, \"y\", v3d.y, smoothTime, delta, maxSpeed, easing, eps);\n c3 = damp(current, \"z\", v3d.z, smoothTime, delta, maxSpeed, easing, eps);\n return a3 || b3 || c3;\n}\n/**\n * Vector4D Damp\n */\n\nvar v4d = /*@__PURE__*/new Vector4();\nvar a4, b4, c4, d4;\nfunction damp4(current, target, smoothTime, delta, maxSpeed, easing, eps) {\n if (typeof target === \"number\") v4d.setScalar(target);else if (Array.isArray(target)) v4d.set(target[0], target[1], target[2], target[3]);else v4d.copy(target);\n a4 = damp(current, \"x\", v4d.x, smoothTime, delta, maxSpeed, easing, eps);\n b4 = damp(current, \"y\", v4d.y, smoothTime, delta, maxSpeed, easing, eps);\n c4 = damp(current, \"z\", v4d.z, smoothTime, delta, maxSpeed, easing, eps);\n d4 = damp(current, \"w\", v4d.w, smoothTime, delta, maxSpeed, easing, eps);\n return a4 || b4 || c4 || d4;\n}\n\n/**\n * Euler Damp\n */\nvar rot = /*@__PURE__*/new Euler();\nvar aE, bE, cE;\nfunction dampE(current, target, smoothTime, delta, maxSpeed, easing, eps) {\n if (Array.isArray(target)) rot.set(target[0], target[1], target[2], target[3]);else rot.copy(target);\n aE = dampAngle(current, \"x\", rot.x, smoothTime, delta, maxSpeed, easing, eps);\n bE = dampAngle(current, \"y\", rot.y, smoothTime, delta, maxSpeed, easing, eps);\n cE = dampAngle(current, \"z\", rot.z, smoothTime, delta, maxSpeed, easing, eps);\n return aE || bE || cE;\n}\n/**\n * Color Damp\n */\n\nvar col = /*@__PURE__*/new Color();\nvar aC, bC, cC;\nfunction dampC(current, target, smoothTime, delta, maxSpeed, easing, eps) {\n if (target instanceof Color) col.copy(target);else if (Array.isArray(target)) col.setRGB(target[0], target[1], target[2]);else col.set(target);\n aC = damp(current, \"r\", col.r, smoothTime, delta, maxSpeed, easing, eps);\n bC = damp(current, \"g\", col.g, smoothTime, delta, maxSpeed, easing, eps);\n cC = damp(current, \"b\", col.b, smoothTime, delta, maxSpeed, easing, eps);\n return aC || bC || cC;\n}\n/**\n * Quaternion Damp\n * https://gist.github.com/maxattack/4c7b4de00f5c1b95a33b\n * Copyright 2016 Max Kaufmann (max.kaufmann@gmail.com)\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nvar qt = /*@__PURE__*/new Quaternion();\nvar v4result = /*@__PURE__*/new Vector4();\nvar v4velocity = /*@__PURE__*/new Vector4();\nvar v4error = /*@__PURE__*/new Vector4();\nvar aQ, bQ, cQ, dQ;\nfunction dampQ(current, target, smoothTime, delta, maxSpeed, easing, eps) {\n var cur = current;\n if (Array.isArray(target)) qt.set(target[0], target[1], target[2], target[3]);else qt.copy(target);\n var multi = current.dot(qt) > 0 ? 1 : -1;\n qt.x *= multi;\n qt.y *= multi;\n qt.z *= multi;\n qt.w *= multi;\n aQ = damp(current, \"x\", qt.x, smoothTime, delta, maxSpeed, easing, eps);\n bQ = damp(current, \"y\", qt.y, smoothTime, delta, maxSpeed, easing, eps);\n cQ = damp(current, \"z\", qt.z, smoothTime, delta, maxSpeed, easing, eps);\n dQ = damp(current, \"w\", qt.w, smoothTime, delta, maxSpeed, easing, eps); // smooth damp (nlerp approx)\n\n v4result.set(current.x, current.y, current.z, current.w).normalize();\n v4velocity.set(cur.__damp.velocity_x, cur.__damp.velocity_y, cur.__damp.velocity_z, cur.__damp.velocity_w); // ensure deriv is tangent\n\n v4error.copy(v4result).multiplyScalar(v4velocity.dot(v4result) / v4result.dot(v4result));\n cur.__damp.velocity_x -= v4error.x;\n cur.__damp.velocity_y -= v4error.y;\n cur.__damp.velocity_z -= v4error.z;\n cur.__damp.velocity_w -= v4error.w;\n current.set(v4result.x, v4result.y, v4result.z, v4result.w);\n return aQ || bQ || cQ || dQ;\n}\n/**\n * Spherical Damp\n */\n\nvar spherical = /*@__PURE__*/new Spherical();\nvar aS, bS, cS;\nfunction dampS(current, target, smoothTime, delta, maxSpeed, easing, eps) {\n if (Array.isArray(target)) spherical.set(target[0], target[1], target[2]);else spherical.copy(target);\n aS = damp(current, \"radius\", spherical.radius, smoothTime, delta, maxSpeed, easing, eps);\n bS = dampAngle(current, \"phi\", spherical.phi, smoothTime, delta, maxSpeed, easing, eps);\n cS = dampAngle(current, \"theta\", spherical.theta, smoothTime, delta, maxSpeed, easing, eps);\n return aS || bS || cS;\n}\n/**\n * Matrix4 Damp\n */\n\nvar mat = /*@__PURE__*/new Matrix4();\nvar mPos = /*@__PURE__*/new Vector3();\nvar mRot = /*@__PURE__*/new Quaternion();\nvar mSca = /*@__PURE__*/new Vector3();\nvar aM, bM, cM;\nfunction dampM(current, target, smoothTime, delta, maxSpeed, easing, eps) {\n var cur = current;\n\n if (cur.__damp === undefined) {\n cur.__damp = {\n position: new Vector3(),\n rotation: new Quaternion(),\n scale: new Vector3()\n };\n current.decompose(cur.__damp.position, cur.__damp.rotation, cur.__damp.scale);\n }\n\n if (Array.isArray(target)) mat.set.apply(mat, _toConsumableArray(target));else mat.copy(target);\n mat.decompose(mPos, mRot, mSca);\n aM = damp3(cur.__damp.position, mPos, smoothTime, delta, maxSpeed, easing, eps);\n bM = dampQ(cur.__damp.rotation, mRot, smoothTime, delta, maxSpeed, easing, eps);\n cM = damp3(cur.__damp.scale, mSca, smoothTime, delta, maxSpeed, easing, eps);\n current.compose(cur.__damp.position, cur.__damp.rotation, cur.__damp.scale);\n return aM || bM || cM;\n}\n\nvar easing = /*#__PURE__*/Object.freeze({\n __proto__: null,\n rsqw: rsqw,\n exp: exp,\n linear: linear,\n sine: sine,\n cubic: cubic,\n quint: quint,\n circ: circ,\n quart: quart,\n expo: expo,\n damp: damp,\n dampLookAt: dampLookAt,\n dampAngle: dampAngle,\n damp2: damp2,\n damp3: damp3,\n damp4: damp4,\n dampE: dampE,\n dampC: dampC,\n dampQ: dampQ,\n dampS: dampS,\n dampM: dampM\n});\n\nexport { exp as a, circ as b, cubic as c, quart as d, easing as e, expo as f, damp as g, dampLookAt as h, dampAngle as i, damp2 as j, damp3 as k, linear as l, damp4 as m, dampE as n, dampC as o, dampQ as p, quint as q, rsqw as r, sine as s, dampS as t, dampM as u };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom/client';\nimport { useThree, useFrame, context as context$1 } from '@react-three/fiber';\nimport { easing } from 'maath';\n\nconst context = /* @__PURE__ */React.createContext(null);\nfunction useScroll() {\n return React.useContext(context);\n}\nfunction ScrollControls({\n eps = 0.00001,\n enabled = true,\n infinite,\n horizontal,\n pages = 1,\n distance = 1,\n damping = 0.25,\n maxSpeed = Infinity,\n prepend = false,\n style = {},\n children\n}) {\n const {\n get,\n setEvents,\n gl,\n size,\n invalidate,\n events\n } = useThree();\n const [el] = React.useState(() => document.createElement('div'));\n const [fill] = React.useState(() => document.createElement('div'));\n const [fixed] = React.useState(() => document.createElement('div'));\n const target = gl.domElement.parentNode;\n const scroll = React.useRef(0);\n const state = React.useMemo(() => {\n const state = {\n el,\n eps,\n fill,\n fixed,\n horizontal,\n damping,\n offset: 0,\n delta: 0,\n scroll,\n pages,\n // 0-1 for a range between from -> from + distance\n range(from, distance, margin = 0) {\n const start = from - margin;\n const end = start + distance + margin * 2;\n return this.offset < start ? 0 : this.offset > end ? 1 : (this.offset - start) / (end - start);\n },\n // 0-1-0 for a range between from -> from + distance\n curve(from, distance, margin = 0) {\n return Math.sin(this.range(from, distance, margin) * Math.PI);\n },\n // true/false for a range between from -> from + distance\n visible(from, distance, margin = 0) {\n const start = from - margin;\n const end = start + distance + margin * 2;\n return this.offset >= start && this.offset <= end;\n }\n };\n return state;\n }, [eps, damping, horizontal, pages]);\n React.useEffect(() => {\n el.style.position = 'absolute';\n el.style.width = '100%';\n el.style.height = '100%';\n el.style[horizontal ? 'overflowX' : 'overflowY'] = 'auto';\n el.style[horizontal ? 'overflowY' : 'overflowX'] = 'hidden';\n el.style.top = '0px';\n el.style.left = '0px';\n for (const key in style) {\n el.style[key] = style[key];\n }\n fixed.style.position = 'sticky';\n fixed.style.top = '0px';\n fixed.style.left = '0px';\n fixed.style.width = '100%';\n fixed.style.height = '100%';\n fixed.style.overflow = 'hidden';\n el.appendChild(fixed);\n fill.style.height = horizontal ? '100%' : `${pages * distance * 100}%`;\n fill.style.width = horizontal ? `${pages * distance * 100}%` : '100%';\n fill.style.pointerEvents = 'none';\n el.appendChild(fill);\n if (prepend) target.prepend(el);else target.appendChild(el);\n\n // Init scroll one pixel in to allow upward/leftward scroll\n el[horizontal ? 'scrollLeft' : 'scrollTop'] = 1;\n const oldTarget = events.connected || gl.domElement;\n requestAnimationFrame(() => events.connect == null ? void 0 : events.connect(el));\n const oldCompute = get().events.compute;\n setEvents({\n compute(event, state) {\n // we are using boundingClientRect because we could not rely on target.offsetTop as canvas could be positioned anywhere in dom\n const {\n left,\n top\n } = target.getBoundingClientRect();\n const offsetX = event.clientX - left;\n const offsetY = event.clientY - top;\n state.pointer.set(offsetX / state.size.width * 2 - 1, -(offsetY / state.size.height) * 2 + 1);\n state.raycaster.setFromCamera(state.pointer, state.camera);\n }\n });\n return () => {\n target.removeChild(el);\n setEvents({\n compute: oldCompute\n });\n events.connect == null || events.connect(oldTarget);\n };\n }, [pages, distance, horizontal, el, fill, fixed, target]);\n React.useEffect(() => {\n if (events.connected === el) {\n const containerLength = size[horizontal ? 'width' : 'height'];\n const scrollLength = el[horizontal ? 'scrollWidth' : 'scrollHeight'];\n const scrollThreshold = scrollLength - containerLength;\n let current = 0;\n let disableScroll = true;\n let firstRun = true;\n const onScroll = () => {\n // Prevent first scroll because it is indirectly caused by the one pixel offset\n if (!enabled || firstRun) return;\n invalidate();\n current = el[horizontal ? 'scrollLeft' : 'scrollTop'];\n scroll.current = current / scrollThreshold;\n if (infinite) {\n if (!disableScroll) {\n if (current >= scrollThreshold) {\n const damp = 1 - state.offset;\n el[horizontal ? 'scrollLeft' : 'scrollTop'] = 1;\n scroll.current = state.offset = -damp;\n disableScroll = true;\n } else if (current <= 0) {\n const damp = 1 + state.offset;\n el[horizontal ? 'scrollLeft' : 'scrollTop'] = scrollLength;\n scroll.current = state.offset = damp;\n disableScroll = true;\n }\n }\n if (disableScroll) setTimeout(() => disableScroll = false, 40);\n }\n };\n el.addEventListener('scroll', onScroll, {\n passive: true\n });\n requestAnimationFrame(() => firstRun = false);\n const onWheel = e => el.scrollLeft += e.deltaY / 2;\n if (horizontal) el.addEventListener('wheel', onWheel, {\n passive: true\n });\n return () => {\n el.removeEventListener('scroll', onScroll);\n if (horizontal) el.removeEventListener('wheel', onWheel);\n };\n }\n }, [el, events, size, infinite, state, invalidate, horizontal, enabled]);\n let last = 0;\n useFrame((_, delta) => {\n last = state.offset;\n easing.damp(state, 'offset', scroll.current, damping, delta, maxSpeed, undefined, eps);\n easing.damp(state, 'delta', Math.abs(last - state.offset), damping, delta, maxSpeed, undefined, eps);\n if (state.delta > eps) invalidate();\n });\n return /*#__PURE__*/React.createElement(context.Provider, {\n value: state\n }, children);\n}\nconst ScrollCanvas = /* @__PURE__ */React.forwardRef(({\n children\n}, ref) => {\n const group = React.useRef(null);\n React.useImperativeHandle(ref, () => group.current, []);\n const state = useScroll();\n const {\n width,\n height\n } = useThree(state => state.viewport);\n useFrame(() => {\n group.current.position.x = state.horizontal ? -width * (state.pages - 1) * state.offset : 0;\n group.current.position.y = state.horizontal ? 0 : height * (state.pages - 1) * state.offset;\n });\n return /*#__PURE__*/React.createElement(\"group\", {\n ref: group\n }, children);\n});\nconst ScrollHtml = /*#__PURE__*/React.forwardRef(({\n children,\n style,\n ...props\n}, ref) => {\n const state = useScroll();\n const group = React.useRef(null);\n React.useImperativeHandle(ref, () => group.current, []);\n const {\n width,\n height\n } = useThree(state => state.size);\n const fiberState = React.useContext(context$1);\n const root = React.useMemo(() => ReactDOM.createRoot(state.fixed), [state.fixed]);\n useFrame(() => {\n if (state.delta > state.eps) {\n group.current.style.transform = `translate3d(${state.horizontal ? -width * (state.pages - 1) * state.offset : 0}px,${state.horizontal ? 0 : height * (state.pages - 1) * -state.offset}px,0)`;\n }\n });\n root.render(/*#__PURE__*/React.createElement(\"div\", _extends({\n ref: group,\n style: {\n ...style,\n position: 'absolute',\n top: 0,\n left: 0,\n willChange: 'transform'\n }\n }, props), /*#__PURE__*/React.createElement(context.Provider, {\n value: state\n }, /*#__PURE__*/React.createElement(context$1.Provider, {\n value: fiberState\n }, children))));\n return null;\n});\nconst Scroll = /* @__PURE__ */React.forwardRef(({\n html,\n ...props\n}, ref) => {\n const El = html ? ScrollHtml : ScrollCanvas;\n return /*#__PURE__*/React.createElement(El, _extends({\n ref: ref\n }, props));\n});\n\nexport { Scroll, ScrollControls, useScroll };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { MathUtils } from 'three';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { useGesture } from '@use-gesture/react';\nimport { easing } from 'maath';\n\nfunction PresentationControls({\n enabled = true,\n snap,\n global,\n domElement,\n cursor = true,\n children,\n speed = 1,\n rotation = [0, 0, 0],\n zoom = 1,\n polar = [0, Math.PI / 2],\n azimuth = [-Infinity, Infinity],\n damping = 0.25\n}) {\n const events = useThree(state => state.events);\n const gl = useThree(state => state.gl);\n const explDomElement = domElement || events.connected || gl.domElement;\n const {\n size\n } = useThree();\n const rPolar = React.useMemo(() => [rotation[0] + polar[0], rotation[0] + polar[1]], [rotation[0], polar[0], polar[1]]);\n const rAzimuth = React.useMemo(() => [rotation[1] + azimuth[0], rotation[1] + azimuth[1]], [rotation[1], azimuth[0], azimuth[1]]);\n const rInitial = React.useMemo(() => [MathUtils.clamp(rotation[0], ...rPolar), MathUtils.clamp(rotation[1], ...rAzimuth), rotation[2]], [rotation[0], rotation[1], rotation[2], rPolar, rAzimuth]);\n React.useEffect(() => {\n if (global && cursor && enabled) {\n explDomElement.style.cursor = 'grab';\n gl.domElement.style.cursor = '';\n return () => {\n explDomElement.style.cursor = 'default';\n gl.domElement.style.cursor = 'default';\n };\n }\n }, [global, cursor, explDomElement, enabled]);\n const [animation] = React.useState({\n scale: 1,\n rotation: rInitial,\n damping\n });\n const ref = React.useRef(null);\n useFrame((state, delta) => {\n easing.damp3(ref.current.scale, animation.scale, animation.damping, delta);\n easing.dampE(ref.current.rotation, animation.rotation, animation.damping, delta);\n });\n const bind = useGesture({\n onHover: ({\n last\n }) => {\n if (cursor && !global && enabled) explDomElement.style.cursor = last ? 'auto' : 'grab';\n },\n onDrag: ({\n down,\n delta: [x, y],\n memo: [oldY, oldX] = animation.rotation || rInitial\n }) => {\n if (!enabled) return [y, x];\n if (cursor) explDomElement.style.cursor = down ? 'grabbing' : 'grab';\n x = MathUtils.clamp(oldX + x / size.width * Math.PI * speed, ...rAzimuth);\n y = MathUtils.clamp(oldY + y / size.height * Math.PI * speed, ...rPolar);\n animation.scale = down && y > rPolar[1] / 2 ? zoom : 1;\n animation.rotation = snap && !down ? rInitial : [y, x, 0];\n animation.damping = snap && !down && typeof snap !== 'boolean' ? snap : damping;\n return [y, x];\n }\n }, {\n target: global ? explDomElement : undefined\n });\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref\n }, bind == null ? void 0 : bind()), children);\n}\n\nexport { PresentationControls };\n","const reduxImpl = (reducer, initial) => (set, _get, api) => {\n api.dispatch = (action) => {\n set((state) => reducer(state, action), false, action);\n return action;\n };\n api.dispatchFromDevtools = true;\n return { dispatch: (...args) => api.dispatch(...args), ...initial };\n};\nconst redux = reduxImpl;\n\nconst shouldDispatchFromDevtools = (api) => !!api.dispatchFromDevtools && typeof api.dispatch === \"function\";\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name) => {\n const api = trackedConnections.get(name);\n if (!api) return {};\n return Object.fromEntries(\n Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()])\n );\n};\nconst extractConnectionInformation = (store, extensionConnector, options) => {\n if (store === void 0) {\n return {\n type: \"untracked\",\n connection: extensionConnector.connect(options)\n };\n }\n const existingConnection = trackedConnections.get(options.name);\n if (existingConnection) {\n return { type: \"tracked\", store, ...existingConnection };\n }\n const newConnection = {\n connection: extensionConnector.connect(options),\n stores: {}\n };\n trackedConnections.set(options.name, newConnection);\n return { type: \"tracked\", store, ...newConnection };\n};\nconst removeStoreFromTrackedConnections = (name, store) => {\n if (store === void 0) return;\n const connectionInfo = trackedConnections.get(name);\n if (!connectionInfo) return;\n delete connectionInfo.stores[store];\n if (Object.keys(connectionInfo.stores).length === 0) {\n trackedConnections.delete(name);\n }\n};\nconst v8StackLineRe = /.+ (.+) .+/;\nconst geckoStackLineRe = /^([^@]+)@/;\nfunction findCallerName(stack) {\n var _a, _b, _c;\n if (!stack) return void 0;\n const traceLines = stack.split(\"\\n\");\n const apiSetStateLineIndex = traceLines.findIndex(\n (traceLine) => traceLine.includes(\"api.setState\")\n );\n if (apiSetStateLineIndex < 0) return void 0;\n const callerLine = ((_a = traceLines[apiSetStateLineIndex + 1]) == null ? void 0 : _a.trim()) || \"\";\n return ((_b = v8StackLineRe.exec(callerLine)) == null ? void 0 : _b[1]) || ((_c = geckoStackLineRe.exec(callerLine)) == null ? void 0 : _c[1]);\n}\nconst devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => {\n const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;\n let extensionConnector;\n try {\n extensionConnector = (enabled != null ? enabled : (import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n } catch (e) {\n }\n if (!extensionConnector) {\n return fn(set, get, api);\n }\n const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);\n let isRecording = true;\n api.setState = ((state, replace, nameOrAction) => {\n const r = set(state, replace);\n if (!isRecording) return r;\n const action = nameOrAction === void 0 ? {\n type: anonymousActionType || findCallerName(new Error().stack) || \"anonymous\"\n } : typeof nameOrAction === \"string\" ? { type: nameOrAction } : nameOrAction;\n if (store === void 0) {\n connection == null ? void 0 : connection.send(action, get());\n return r;\n }\n connection == null ? void 0 : connection.send(\n {\n ...action,\n type: `${store}/${action.type}`\n },\n {\n ...getTrackedConnectionState(options.name),\n [store]: api.getState()\n }\n );\n return r;\n });\n api.devtools = {\n cleanup: () => {\n if (connection && typeof connection.unsubscribe === \"function\") {\n connection.unsubscribe();\n }\n removeStoreFromTrackedConnections(options.name, store);\n }\n };\n const setStateFromDevtools = (...a) => {\n const originalIsRecording = isRecording;\n isRecording = false;\n set(...a);\n isRecording = originalIsRecording;\n };\n const initialState = fn(api.setState, get, api);\n if (connectionInformation.type === \"untracked\") {\n connection == null ? void 0 : connection.init(initialState);\n } else {\n connectionInformation.stores[connectionInformation.store] = api;\n connection == null ? void 0 : connection.init(\n Object.fromEntries(\n Object.entries(connectionInformation.stores).map(([key, store2]) => [\n key,\n key === connectionInformation.store ? initialState : store2.getState()\n ])\n )\n );\n }\n if (shouldDispatchFromDevtools(api)) {\n let didWarnAboutReservedActionType = false;\n const originalDispatch = api.dispatch;\n api.dispatch = (...args) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && args[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n console.warn(\n '[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.'\n );\n didWarnAboutReservedActionType = true;\n }\n originalDispatch(...args);\n };\n }\n connection.subscribe((message) => {\n var _a;\n switch (message.type) {\n case \"ACTION\":\n if (typeof message.payload !== \"string\") {\n console.error(\n \"[zustand devtools middleware] Unsupported action format\"\n );\n return;\n }\n return parseJsonThen(\n message.payload,\n (action) => {\n if (action.type === \"__setState\") {\n if (store === void 0) {\n setStateFromDevtools(action.state);\n return;\n }\n if (Object.keys(action.state).length !== 1) {\n console.error(\n `\n [zustand devtools middleware] Unsupported __setState action format.\n When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),\n and value of this only key should be a state object. Example: { \"type\": \"__setState\", \"state\": { \"abc123Store\": { \"foo\": \"bar\" } } }\n `\n );\n }\n const stateFromDevtools = action.state[store];\n if (stateFromDevtools === void 0 || stateFromDevtools === null) {\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {\n setStateFromDevtools(stateFromDevtools);\n }\n return;\n }\n if (shouldDispatchFromDevtools(api)) {\n api.dispatch(action);\n }\n }\n );\n case \"DISPATCH\":\n switch (message.payload.type) {\n case \"RESET\":\n setStateFromDevtools(initialState);\n if (store === void 0) {\n return connection == null ? void 0 : connection.init(api.getState());\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"COMMIT\":\n if (store === void 0) {\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"ROLLBACK\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n setStateFromDevtools(state[store]);\n connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n });\n case \"JUMP_TO_STATE\":\n case \"JUMP_TO_ACTION\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {\n setStateFromDevtools(state[store]);\n }\n });\n case \"IMPORT_STATE\": {\n const { nextLiftedState } = message.payload;\n const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;\n if (!lastComputedState) return;\n if (store === void 0) {\n setStateFromDevtools(lastComputedState);\n } else {\n setStateFromDevtools(lastComputedState[store]);\n }\n connection == null ? void 0 : connection.send(\n null,\n // FIXME no-any\n nextLiftedState\n );\n return;\n }\n case \"PAUSE_RECORDING\":\n return isRecording = !isRecording;\n }\n return;\n }\n });\n return initialState;\n};\nconst devtools = devtoolsImpl;\nconst parseJsonThen = (stringified, fn) => {\n let parsed;\n try {\n parsed = JSON.parse(stringified);\n } catch (e) {\n console.error(\n \"[zustand devtools middleware] Could not parse the received json\",\n e\n );\n }\n if (parsed !== void 0) fn(parsed);\n};\n\nconst subscribeWithSelectorImpl = (fn) => (set, get, api) => {\n const origSubscribe = api.subscribe;\n api.subscribe = ((selector, optListener, options) => {\n let listener = selector;\n if (optListener) {\n const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;\n let currentSlice = selector(api.getState());\n listener = (state) => {\n const nextSlice = selector(state);\n if (!equalityFn(currentSlice, nextSlice)) {\n const previousSlice = currentSlice;\n optListener(currentSlice = nextSlice, previousSlice);\n }\n };\n if (options == null ? void 0 : options.fireImmediately) {\n optListener(currentSlice, currentSlice);\n }\n }\n return origSubscribe(listener);\n });\n const initialState = fn(set, get, api);\n return initialState;\n};\nconst subscribeWithSelector = subscribeWithSelectorImpl;\n\nfunction combine(initialState, create) {\n return (...args) => Object.assign({}, initialState, create(...args));\n}\n\nfunction createJSONStorage(getStorage, options) {\n let storage;\n try {\n storage = getStorage();\n } catch (e) {\n return;\n }\n const persistStorage = {\n getItem: (name) => {\n var _a;\n const parse = (str2) => {\n if (str2 === null) {\n return null;\n }\n return JSON.parse(str2, options == null ? void 0 : options.reviver);\n };\n const str = (_a = storage.getItem(name)) != null ? _a : null;\n if (str instanceof Promise) {\n return str.then(parse);\n }\n return parse(str);\n },\n setItem: (name, newValue) => storage.setItem(name, JSON.stringify(newValue, options == null ? void 0 : options.replacer)),\n removeItem: (name) => storage.removeItem(name)\n };\n return persistStorage;\n}\nconst toThenable = (fn) => (input) => {\n try {\n const result = fn(input);\n if (result instanceof Promise) {\n return result;\n }\n return {\n then(onFulfilled) {\n return toThenable(onFulfilled)(result);\n },\n catch(_onRejected) {\n return this;\n }\n };\n } catch (e) {\n return {\n then(_onFulfilled) {\n return this;\n },\n catch(onRejected) {\n return toThenable(onRejected)(e);\n }\n };\n }\n};\nconst persistImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n storage: createJSONStorage(() => window.localStorage),\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n let hydrationVersion = 0;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage = options.storage;\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const setItem = () => {\n const state = options.partialize({ ...get() });\n return storage.setItem(options.name, {\n state,\n version: options.version\n });\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n return setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n return setItem();\n },\n get,\n api\n );\n api.getInitialState = () => configResult;\n let stateFromStorage;\n const hydrate = () => {\n var _a, _b;\n if (!storage) return;\n const currentVersion = ++hydrationVersion;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => {\n var _a2;\n return cb((_a2 = get()) != null ? _a2 : configResult);\n });\n const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n const migration = options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n if (migration instanceof Promise) {\n return migration.then((result) => [true, result]);\n }\n return [true, migration];\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return [false, deserializedStorageValue.state];\n }\n }\n return [false, void 0];\n }).then((migrationResult) => {\n var _a2;\n if (currentVersion !== hydrationVersion) {\n return;\n }\n const [migrated, migratedState] = migrationResult;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n if (migrated) {\n return setItem();\n }\n }).then(() => {\n if (currentVersion !== hydrationVersion) {\n return;\n }\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(get(), void 0);\n stateFromStorage = get();\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n if (currentVersion !== hydrationVersion) {\n return;\n }\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.storage) {\n storage = newOptions.storage;\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n if (!options.skipHydration) {\n hydrate();\n }\n return stateFromStorage || configResult;\n};\nconst persist = persistImpl;\n\nfunction ssrSafe(config, isSSR = typeof window === \"undefined\") {\n return (set, get, api) => {\n if (!isSSR) {\n return config(set, get, api);\n }\n const ssrSet = () => {\n throw new Error(\"Cannot set state of Zustand store in SSR\");\n };\n api.setState = ssrSet;\n return config(ssrSet, get, api);\n };\n}\n\nexport { combine, createJSONStorage, devtools, persist, redux, subscribeWithSelector, ssrSafe as unstable_ssrSafe };\n","import * as React from 'react';\nimport { create } from 'zustand';\nimport { subscribeWithSelector } from 'zustand/middleware';\n\n// These are removed in Zustand v4\n// unknown\n\n// Zustand v3 marked deprecations in 3.x, but there's no visible upgrade path\n\nconst context = /* @__PURE__ */React.createContext(null);\nfunction KeyboardControls({\n map,\n children,\n onChange,\n domElement\n}) {\n const key = map.map(item => item.name + item.keys).join('-');\n const useControls = React.useMemo(() => {\n return create(subscribeWithSelector(() => map.reduce((prev, cur) => ({\n ...prev,\n [cur.name]: false\n }), {})));\n }, [key]);\n const api = React.useMemo(() => [useControls.subscribe, useControls.getState, useControls], [key]);\n const set = useControls.setState;\n React.useEffect(() => {\n const config = map.map(({\n name,\n keys,\n up\n }) => ({\n keys,\n up,\n fn: value => {\n // Set zustand state\n set({\n [name]: value\n });\n // Inform callback\n if (onChange) onChange(name, value, api[1]());\n }\n }));\n const keyMap = config.reduce((out, {\n keys,\n fn,\n up = true\n }) => {\n keys.forEach(key => out[key] = {\n fn,\n pressed: false,\n up\n });\n return out;\n }, {});\n const downHandler = ({\n key,\n code\n }) => {\n const obj = keyMap[key] || keyMap[code];\n if (!obj) return;\n const {\n fn,\n pressed,\n up\n } = obj;\n obj.pressed = true;\n if (up || !pressed) fn(true);\n };\n const upHandler = ({\n key,\n code\n }) => {\n const obj = keyMap[key] || keyMap[code];\n if (!obj) return;\n const {\n fn,\n up\n } = obj;\n obj.pressed = false;\n if (up) fn(false);\n };\n const source = domElement || window;\n source.addEventListener('keydown', downHandler, {\n passive: true\n });\n source.addEventListener('keyup', upHandler, {\n passive: true\n });\n return () => {\n source.removeEventListener('keydown', downHandler);\n source.removeEventListener('keyup', upHandler);\n };\n }, [domElement, key]);\n return /*#__PURE__*/React.createElement(context.Provider, {\n value: api,\n children: children\n });\n}\nfunction useKeyboardControls(sel) {\n const [sub, get, store] = React.useContext(context);\n if (sel) return store(sel);else return [sub, get];\n}\n\nexport { KeyboardControls, useKeyboardControls };\n","const isIterable = (obj) => Symbol.iterator in obj;\nconst hasIterableEntries = (value) => (\n // HACK: avoid checking entries type\n \"entries\" in value\n);\nconst compareEntries = (valueA, valueB) => {\n const mapA = valueA instanceof Map ? valueA : new Map(valueA.entries());\n const mapB = valueB instanceof Map ? valueB : new Map(valueB.entries());\n if (mapA.size !== mapB.size) {\n return false;\n }\n for (const [key, value] of mapA) {\n if (!mapB.has(key) || !Object.is(value, mapB.get(key))) {\n return false;\n }\n }\n return true;\n};\nconst compareIterables = (valueA, valueB) => {\n const iteratorA = valueA[Symbol.iterator]();\n const iteratorB = valueB[Symbol.iterator]();\n let nextA = iteratorA.next();\n let nextB = iteratorB.next();\n while (!nextA.done && !nextB.done) {\n if (!Object.is(nextA.value, nextB.value)) {\n return false;\n }\n nextA = iteratorA.next();\n nextB = iteratorB.next();\n }\n return !!nextA.done && !!nextB.done;\n};\nfunction shallow(valueA, valueB) {\n if (Object.is(valueA, valueB)) {\n return true;\n }\n if (typeof valueA !== \"object\" || valueA === null || typeof valueB !== \"object\" || valueB === null) {\n return false;\n }\n if (Object.getPrototypeOf(valueA) !== Object.getPrototypeOf(valueB)) {\n return false;\n }\n if (isIterable(valueA) && isIterable(valueB)) {\n if (hasIterableEntries(valueA) && hasIterableEntries(valueB)) {\n return compareEntries(valueA, valueB);\n }\n return compareIterables(valueA, valueB);\n }\n return compareEntries(\n { entries: () => Object.entries(valueA) },\n { entries: () => Object.entries(valueB) }\n );\n}\n\nexport { shallow };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { SelectionBox } from 'three-stdlib';\nimport { useThree } from '@react-three/fiber';\nimport { shallow } from 'zustand/shallow';\n\nconst context = /* @__PURE__ */React.createContext([]);\nfunction Select({\n box,\n multiple,\n children,\n onChange,\n onChangePointerUp,\n border = '1px solid #55aaff',\n backgroundColor = 'rgba(75, 160, 255, 0.1)',\n filter: customFilter = item => item,\n ...props\n}) {\n const [downed, down] = React.useState(false);\n const {\n setEvents,\n camera,\n raycaster,\n gl,\n controls,\n size,\n get\n } = useThree();\n const [hovered, hover] = React.useState(false);\n const [active, dispatch] = React.useReducer(\n // @ts-expect-error\n (state, {\n object,\n shift\n }) => {\n if (object === undefined) return [];else if (Array.isArray(object)) return object;else if (!shift) return state[0] === object ? [] : [object];\n // @ts-expect-error\n else if (state.includes(object)) return state.filter(o => o !== object);else return [object, ...state];\n }, []);\n React.useEffect(() => {\n if (downed) onChange == null || onChange(active);else onChangePointerUp == null || onChangePointerUp(active);\n }, [active, downed]);\n const onClick = React.useCallback(e => {\n e.stopPropagation();\n dispatch({\n object: customFilter([e.object])[0],\n shift: multiple && e.shiftKey\n });\n }, []);\n const onPointerMissed = React.useCallback(e => !hovered && dispatch({}), [hovered]);\n const ref = React.useRef(null);\n React.useEffect(() => {\n if (!box || !multiple) return;\n const selBox = new SelectionBox(camera, ref.current);\n const element = document.createElement('div');\n element.style.pointerEvents = 'none';\n element.style.border = border;\n element.style.backgroundColor = backgroundColor;\n element.style.position = 'fixed';\n const startPoint = new THREE.Vector2();\n const pointTopLeft = new THREE.Vector2();\n const pointBottomRight = new THREE.Vector2();\n const oldRaycasterEnabled = get().events.enabled;\n const oldControlsEnabled = controls == null ? void 0 : controls.enabled;\n let isDown = false;\n function prepareRay(event, vec) {\n const {\n offsetX,\n offsetY\n } = event;\n const {\n width,\n height\n } = size;\n vec.set(offsetX / width * 2 - 1, -(offsetY / height) * 2 + 1);\n }\n function onSelectStart(event) {\n var _gl$domElement$parent;\n if (controls) controls.enabled = false;\n setEvents({\n enabled: false\n });\n down(isDown = true);\n (_gl$domElement$parent = gl.domElement.parentElement) == null || _gl$domElement$parent.appendChild(element);\n element.style.left = `${event.clientX}px`;\n element.style.top = `${event.clientY}px`;\n element.style.width = '0px';\n element.style.height = '0px';\n startPoint.x = event.clientX;\n startPoint.y = event.clientY;\n }\n function onSelectMove(event) {\n pointBottomRight.x = Math.max(startPoint.x, event.clientX);\n pointBottomRight.y = Math.max(startPoint.y, event.clientY);\n pointTopLeft.x = Math.min(startPoint.x, event.clientX);\n pointTopLeft.y = Math.min(startPoint.y, event.clientY);\n element.style.left = `${pointTopLeft.x}px`;\n element.style.top = `${pointTopLeft.y}px`;\n element.style.width = `${pointBottomRight.x - pointTopLeft.x}px`;\n element.style.height = `${pointBottomRight.y - pointTopLeft.y}px`;\n }\n function onSelectOver() {\n if (isDown) {\n var _element$parentElemen;\n if (controls) controls.enabled = oldControlsEnabled;\n setEvents({\n enabled: oldRaycasterEnabled\n });\n down(isDown = false);\n (_element$parentElemen = element.parentElement) == null || _element$parentElemen.removeChild(element);\n }\n }\n function pointerDown(event) {\n if (event.shiftKey) {\n onSelectStart(event);\n prepareRay(event, selBox.startPoint);\n }\n }\n let previous = [];\n function pointerMove(event) {\n if (isDown) {\n onSelectMove(event);\n prepareRay(event, selBox.endPoint);\n const allSelected = selBox.select().sort(o => o.uuid).filter(o => o.isMesh);\n if (!shallow(allSelected, previous)) {\n previous = allSelected;\n dispatch({\n object: customFilter(allSelected)\n });\n }\n }\n }\n function pointerUp(event) {\n if (isDown) onSelectOver();\n }\n document.addEventListener('pointerdown', pointerDown, {\n passive: true\n });\n document.addEventListener('pointermove', pointerMove, {\n passive: true,\n capture: true\n });\n document.addEventListener('pointerup', pointerUp, {\n passive: true\n });\n return () => {\n document.removeEventListener('pointerdown', pointerDown);\n document.removeEventListener('pointermove', pointerMove, true);\n document.removeEventListener('pointerup', pointerUp);\n };\n }, [size.width, size.height, raycaster, camera, controls, gl]);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref,\n onClick: onClick,\n onPointerOver: () => hover(true),\n onPointerOut: () => hover(false),\n onPointerMissed: onPointerMissed\n }, props), /*#__PURE__*/React.createElement(context.Provider, {\n value: active\n }, children));\n}\n\n// The return type is explicitly declared here because otherwise TypeScript will emit `THREE.Object3D[]`.\n// The meaning of the generic parameter for `Object3D` was changed in r156, so it should not be included so that it\n// works with all versions of @types/three.\nfunction useSelect() {\n return React.useContext(context);\n}\n\nexport { Select, useSelect };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { Quaternion } from 'three';\nimport { useFrame } from '@react-three/fiber';\n\n/**\n * Wraps children in a billboarded group. Sample usage:\n *\n * ```js\n * \n * hi\n * \n * ```\n */\nconst Billboard = /* @__PURE__ */React.forwardRef(function Billboard({\n children,\n follow = true,\n lockX = false,\n lockY = false,\n lockZ = false,\n ...props\n}, fref) {\n const inner = React.useRef(null);\n const localRef = React.useRef(null);\n const q = new Quaternion();\n useFrame(({\n camera\n }) => {\n if (!follow || !localRef.current) return;\n\n // save previous rotation in case we're locking an axis\n const prevRotation = inner.current.rotation.clone();\n\n // always face the camera\n localRef.current.updateMatrix();\n localRef.current.updateWorldMatrix(false, false);\n localRef.current.getWorldQuaternion(q);\n camera.getWorldQuaternion(inner.current.quaternion).premultiply(q.invert());\n\n // readjust any axis that is locked\n if (lockX) inner.current.rotation.x = prevRotation.x;\n if (lockY) inner.current.rotation.y = prevRotation.y;\n if (lockZ) inner.current.rotation.z = prevRotation.z;\n });\n React.useImperativeHandle(fref, () => localRef.current, []);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: localRef\n }, props), /*#__PURE__*/React.createElement(\"group\", {\n ref: inner\n }, children));\n});\n\nexport { Billboard };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useFrame } from '@react-three/fiber';\n\nconst ScreenSpace = /* @__PURE__ */React.forwardRef(({\n children,\n depth = -1,\n ...rest\n}, ref) => {\n const localRef = React.useRef(null);\n React.useImperativeHandle(ref, () => localRef.current, []);\n useFrame(({\n camera\n }) => {\n localRef.current.quaternion.copy(camera.quaternion);\n localRef.current.position.copy(camera.position);\n });\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: localRef\n }, rest), /*#__PURE__*/React.createElement(\"group\", {\n \"position-z\": -depth\n }, children));\n});\n\nexport { ScreenSpace };\n","import * as THREE from 'three';\n\nconst tV0 = /* @__PURE__ */new THREE.Vector3();\nconst tV1 = /* @__PURE__ */new THREE.Vector3();\nconst tV2 = /* @__PURE__ */new THREE.Vector3();\nconst getPoint2 = (point3, camera, size) => {\n const widthHalf = size.width / 2;\n const heightHalf = size.height / 2;\n camera.updateMatrixWorld(false);\n const vector = point3.project(camera);\n vector.x = vector.x * widthHalf + widthHalf;\n vector.y = -(vector.y * heightHalf) + heightHalf;\n return vector;\n};\nconst getPoint3 = (point2, camera, size, zValue = 1) => {\n const vector = tV0.set(point2.x / size.width * 2 - 1, -(point2.y / size.height) * 2 + 1, zValue);\n vector.unproject(camera);\n return vector;\n};\nconst calculateScaleFactor = (point3, radiusPx, camera, size) => {\n const point2 = getPoint2(tV2.copy(point3), camera, size);\n let scale = 0;\n for (let i = 0; i < 2; ++i) {\n const point2off = tV1.copy(point2).setComponent(i, point2.getComponent(i) + radiusPx);\n const point3off = getPoint3(point2off, camera, size, point2off.z);\n scale = Math.max(scale, point3.distanceTo(point3off));\n }\n return scale;\n};\n\nexport { calculateScaleFactor };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useFrame } from '@react-three/fiber';\nimport * as React from 'react';\nimport { forwardRef, useRef } from 'react';\nimport { Vector3 } from 'three';\nimport { calculateScaleFactor } from './calculateScaleFactor.js';\n\nconst worldPos = /* @__PURE__ */new Vector3();\n/**\n * Wraps children in an `Object3D` and attempts to scale from\n * world units to screen units * scale factor.\n *\n * For example, this will render a box of roughly 1x1 pixel size,\n * independently of how far the camera is.\n *\n * ```jsx\n * \n * \n * \n * ```\n */\nconst ScreenSizer = /* @__PURE__ */forwardRef(({\n scale = 1,\n ...props\n}, ref) => {\n const container = useRef(null);\n React.useImperativeHandle(ref, () => container.current, []);\n useFrame(state => {\n const obj = container.current;\n if (!obj) return;\n const sf = calculateScaleFactor(obj.getWorldPosition(worldPos), scale, state.camera, state.size);\n obj.scale.setScalar(sf * scale);\n });\n return /*#__PURE__*/React.createElement(\"object3D\", _extends({\n ref: container\n }, props));\n});\n\nexport { ScreenSizer };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { Vector3, Vector4, Vector2, Color } from 'three';\nimport { useThree } from '@react-three/fiber';\nimport { LineSegments2, Line2, LineMaterial, LineSegmentsGeometry, LineGeometry } from 'three-stdlib';\n\nconst Line = /* @__PURE__ */React.forwardRef(function Line({\n points,\n color = 0xffffff,\n vertexColors,\n linewidth,\n lineWidth,\n segments,\n dashed,\n ...rest\n}, ref) {\n var _vertexColors$, _ref;\n const size = useThree(state => state.size);\n const line2 = React.useMemo(() => segments ? new LineSegments2() : new Line2(), [segments]);\n const [lineMaterial] = React.useState(() => new LineMaterial());\n const itemSize = (vertexColors == null || (_vertexColors$ = vertexColors[0]) == null ? void 0 : _vertexColors$.length) === 4 ? 4 : 3;\n const lineGeom = React.useMemo(() => {\n const geom = segments ? new LineSegmentsGeometry() : new LineGeometry();\n const pValues = points.map(p => {\n const isArray = Array.isArray(p);\n return p instanceof Vector3 || p instanceof Vector4 ? [p.x, p.y, p.z] : p instanceof Vector2 ? [p.x, p.y, 0] : isArray && p.length === 3 ? [p[0], p[1], p[2]] : isArray && p.length === 2 ? [p[0], p[1], 0] : p;\n });\n geom.setPositions(pValues.flat());\n if (vertexColors) {\n // using vertexColors requires the color value to be white see #1813\n color = 0xffffff;\n const cValues = vertexColors.map(c => c instanceof Color ? c.toArray() : c);\n geom.setColors(cValues.flat(), itemSize);\n }\n return geom;\n }, [points, segments, vertexColors, itemSize]);\n React.useLayoutEffect(() => {\n line2.computeLineDistances();\n }, [points, line2]);\n React.useLayoutEffect(() => {\n if (dashed) {\n lineMaterial.defines.USE_DASH = '';\n } else {\n // Setting lineMaterial.defines.USE_DASH to undefined is apparently not sufficient.\n delete lineMaterial.defines.USE_DASH;\n }\n lineMaterial.needsUpdate = true;\n }, [dashed, lineMaterial]);\n React.useEffect(() => {\n return () => {\n lineGeom.dispose();\n lineMaterial.dispose();\n };\n }, [lineGeom]);\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n object: line2,\n ref: ref\n }, rest), /*#__PURE__*/React.createElement(\"primitive\", {\n object: lineGeom,\n attach: \"geometry\"\n }), /*#__PURE__*/React.createElement(\"primitive\", _extends({\n object: lineMaterial,\n attach: \"material\",\n color: color,\n vertexColors: Boolean(vertexColors),\n resolution: [size.width, size.height],\n linewidth: (_ref = linewidth !== null && linewidth !== void 0 ? linewidth : lineWidth) !== null && _ref !== void 0 ? _ref : 1,\n dashed: dashed,\n transparent: itemSize === 4\n }, rest)));\n});\n\nexport { Line };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { QuadraticBezierCurve3, Vector3 } from 'three';\nimport { Line } from './Line.js';\n\nconst v = /* @__PURE__ */new Vector3();\nconst QuadraticBezierLine = /* @__PURE__ */React.forwardRef(function QuadraticBezierLine({\n start = [0, 0, 0],\n end = [0, 0, 0],\n mid,\n segments = 20,\n ...rest\n}, forwardref) {\n const ref = React.useRef(null);\n React.useImperativeHandle(forwardref, () => ref.current);\n const [curve] = React.useState(() => new QuadraticBezierCurve3(undefined, undefined, undefined));\n const getPoints = React.useCallback((start, end, mid, segments = 20) => {\n if (start instanceof Vector3) curve.v0.copy(start);else curve.v0.set(...start);\n if (end instanceof Vector3) curve.v2.copy(end);else curve.v2.set(...end);\n if (mid instanceof Vector3) {\n curve.v1.copy(mid);\n } else if (Array.isArray(mid)) {\n curve.v1.set(...mid);\n } else {\n curve.v1.copy(curve.v0.clone().add(curve.v2.clone().sub(curve.v0)).add(v.set(0, curve.v0.y - curve.v2.y, 0)));\n }\n return curve.getPoints(segments);\n }, []);\n React.useLayoutEffect(() => {\n ref.current.setPoints = (start, end, mid) => {\n const points = getPoints(start, end, mid);\n if (ref.current.geometry) ref.current.geometry.setPositions(points.map(p => p.toArray()).flat());\n };\n }, []);\n const points = React.useMemo(() => getPoints(start, end, mid, segments), [start, end, mid, segments]);\n return /*#__PURE__*/React.createElement(Line, _extends({\n ref: ref,\n points: points\n }, rest));\n});\n\nexport { QuadraticBezierLine };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { Vector3, CubicBezierCurve3 } from 'three';\nimport { Line } from './Line.js';\n\nconst CubicBezierLine = /* @__PURE__ */React.forwardRef(function CubicBezierLine({\n start,\n end,\n midA,\n midB,\n segments = 20,\n ...rest\n}, ref) {\n const points = React.useMemo(() => {\n const startV = start instanceof Vector3 ? start : new Vector3(...start);\n const endV = end instanceof Vector3 ? end : new Vector3(...end);\n const midAV = midA instanceof Vector3 ? midA : new Vector3(...midA);\n const midBV = midB instanceof Vector3 ? midB : new Vector3(...midB);\n const interpolatedV = new CubicBezierCurve3(startV, midAV, midBV, endV).getPoints(segments);\n return interpolatedV;\n }, [start, end, midA, midB, segments]);\n return /*#__PURE__*/React.createElement(Line, _extends({\n ref: ref,\n points: points\n }, rest));\n});\n\nexport { CubicBezierLine };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { Vector3, CatmullRomCurve3, Color } from 'three';\nimport { Line } from './Line.js';\n\nconst CatmullRomLine = /* @__PURE__ */React.forwardRef(function CatmullRomLine({\n points,\n closed = false,\n curveType = 'centripetal',\n tension = 0.5,\n segments = 20,\n vertexColors,\n ...rest\n}, ref) {\n const curve = React.useMemo(() => {\n const mappedPoints = points.map(pt => pt instanceof Vector3 ? pt : new Vector3(...pt));\n return new CatmullRomCurve3(mappedPoints, closed, curveType, tension);\n }, [points, closed, curveType, tension]);\n const segmentedPoints = React.useMemo(() => curve.getPoints(segments), [curve, segments]);\n const interpolatedVertexColors = React.useMemo(() => {\n if (!vertexColors || vertexColors.length < 2) return undefined;\n if (vertexColors.length === segments + 1) return vertexColors;\n const mappedColors = vertexColors.map(color => color instanceof Color ? color : new Color(...color));\n if (closed) mappedColors.push(mappedColors[0].clone());\n const iColors = [mappedColors[0]];\n const divisions = segments / (mappedColors.length - 1);\n for (let i = 1; i < segments; i++) {\n const alpha = i % divisions / divisions;\n const colorIndex = Math.floor(i / divisions);\n iColors.push(mappedColors[colorIndex].clone().lerp(mappedColors[colorIndex + 1], alpha));\n }\n iColors.push(mappedColors[mappedColors.length - 1]);\n return iColors;\n }, [vertexColors, segments]);\n return /*#__PURE__*/React.createElement(Line, _extends({\n ref: ref,\n points: segmentedPoints,\n vertexColors: interpolatedVertexColors\n }, rest));\n});\n\nexport { CatmullRomLine };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { AudioListener, AudioLoader } from 'three';\nimport { useThree, useLoader } from '@react-three/fiber';\n\nconst PositionalAudio = /* @__PURE__ */React.forwardRef(({\n url,\n distance = 1,\n loop = true,\n autoplay,\n ...props\n}, ref) => {\n const sound = React.useRef(null);\n React.useImperativeHandle(ref, () => sound.current, []);\n const camera = useThree(({\n camera\n }) => camera);\n const [listener] = React.useState(() => new AudioListener());\n const buffer = useLoader(AudioLoader, url);\n React.useEffect(() => {\n const _sound = sound.current;\n if (_sound) {\n _sound.setBuffer(buffer);\n _sound.setRefDistance(distance);\n _sound.setLoop(loop);\n if (autoplay && !_sound.isPlaying) _sound.play();\n }\n }, [buffer, camera, distance, loop]);\n React.useEffect(() => {\n const _sound = sound.current;\n camera.add(listener);\n return () => {\n camera.remove(listener);\n if (_sound) {\n if (_sound.isPlaying) _sound.stop();\n if (_sound.source && _sound.source._connected) _sound.disconnect();\n }\n };\n }, []);\n return /*#__PURE__*/React.createElement(\"positionalAudio\", _extends({\n ref: sound,\n args: [listener]\n }, props));\n});\n\nexport { PositionalAudio };\n","/**\n * Main content for the worker that handles the loading and execution of\n * modules within it.\n */\nfunction workerBootstrap() {\n var modules = Object.create(null);\n\n // Handle messages for registering a module\n function registerModule(ref, callback) {\n var id = ref.id;\n var name = ref.name;\n var dependencies = ref.dependencies; if ( dependencies === void 0 ) dependencies = [];\n var init = ref.init; if ( init === void 0 ) init = function(){};\n var getTransferables = ref.getTransferables; if ( getTransferables === void 0 ) getTransferables = null;\n\n // Only register once\n if (modules[id]) { return }\n\n try {\n // If any dependencies are modules, ensure they're registered and grab their value\n dependencies = dependencies.map(function (dep) {\n if (dep && dep.isWorkerModule) {\n registerModule(dep, function (depResult) {\n if (depResult instanceof Error) { throw depResult }\n });\n dep = modules[dep.id].value;\n }\n return dep\n });\n\n // Rehydrate functions\n init = rehydrate((\"<\" + name + \">.init\"), init);\n if (getTransferables) {\n getTransferables = rehydrate((\"<\" + name + \">.getTransferables\"), getTransferables);\n }\n\n // Initialize the module and store its value\n var value = null;\n if (typeof init === 'function') {\n value = init.apply(void 0, dependencies);\n } else {\n console.error('worker module init function failed to rehydrate');\n }\n modules[id] = {\n id: id,\n value: value,\n getTransferables: getTransferables\n };\n callback(value);\n } catch(err) {\n if (!(err && err.noLog)) {\n console.error(err);\n }\n callback(err);\n }\n }\n\n // Handle messages for calling a registered module's result function\n function callModule(ref, callback) {\n var ref$1;\n\n var id = ref.id;\n var args = ref.args;\n if (!modules[id] || typeof modules[id].value !== 'function') {\n callback(new Error((\"Worker module \" + id + \": not found or its 'init' did not return a function\")));\n }\n try {\n var result = (ref$1 = modules[id]).value.apply(ref$1, args);\n if (result && typeof result.then === 'function') {\n result.then(handleResult, function (rej) { return callback(rej instanceof Error ? rej : new Error('' + rej)); });\n } else {\n handleResult(result);\n }\n } catch(err) {\n callback(err);\n }\n function handleResult(result) {\n try {\n var tx = modules[id].getTransferables && modules[id].getTransferables(result);\n if (!tx || !Array.isArray(tx) || !tx.length) {\n tx = undefined; //postMessage is very picky about not passing null or empty transferables\n }\n callback(result, tx);\n } catch(err) {\n console.error(err);\n callback(err);\n }\n }\n }\n\n function rehydrate(name, str) {\n var result = void 0;\n self.troikaDefine = function (r) { return result = r; };\n var url = URL.createObjectURL(\n new Blob(\n [(\"/** \" + (name.replace(/\\*/g, '')) + \" **/\\n\\ntroikaDefine(\\n\" + str + \"\\n)\")],\n {type: 'application/javascript'}\n )\n );\n try {\n importScripts(url);\n } catch(err) {\n console.error(err);\n }\n URL.revokeObjectURL(url);\n delete self.troikaDefine;\n return result\n }\n\n // Handler for all messages within the worker\n self.addEventListener('message', function (e) {\n var ref = e.data;\n var messageId = ref.messageId;\n var action = ref.action;\n var data = ref.data;\n try {\n // Module registration\n if (action === 'registerModule') {\n registerModule(data, function (result) {\n if (result instanceof Error) {\n postMessage({\n messageId: messageId,\n success: false,\n error: result.message\n });\n } else {\n postMessage({\n messageId: messageId,\n success: true,\n result: {isCallable: typeof result === 'function'}\n });\n }\n });\n }\n // Invocation\n if (action === 'callModule') {\n callModule(data, function (result, transferables) {\n if (result instanceof Error) {\n postMessage({\n messageId: messageId,\n success: false,\n error: result.message\n });\n } else {\n postMessage({\n messageId: messageId,\n success: true,\n result: result\n }, transferables || undefined);\n }\n });\n }\n } catch(err) {\n postMessage({\n messageId: messageId,\n success: false,\n error: err.stack\n });\n }\n });\n}\n\n/**\n * Fallback for `defineWorkerModule` that behaves identically but runs in the main\n * thread, for when the execution environment doesn't support web workers or they\n * are disallowed due to e.g. CSP security restrictions.\n */\nfunction defineMainThreadModule(options) {\n var moduleFunc = function() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return moduleFunc._getInitResult().then(function (initResult) {\n if (typeof initResult === 'function') {\n return initResult.apply(void 0, args)\n } else {\n throw new Error('Worker module function was called but `init` did not return a callable function')\n }\n })\n };\n moduleFunc._getInitResult = function() {\n // We can ignore getTransferables in main thread. TODO workerId?\n var dependencies = options.dependencies;\n var init = options.init;\n\n // Resolve dependencies\n dependencies = Array.isArray(dependencies) ? dependencies.map(function (dep) {\n if (dep) {\n // If it's a worker module, use its main thread impl\n dep = dep.onMainThread || dep;\n // If it's a main thread worker module, use its init return value\n if (dep._getInitResult) {\n dep = dep._getInitResult();\n }\n }\n return dep\n }) : [];\n\n // Invoke init with the resolved dependencies\n var initPromise = Promise.all(dependencies).then(function (deps) {\n return init.apply(null, deps)\n });\n\n // Cache the resolved promise for subsequent calls\n moduleFunc._getInitResult = function () { return initPromise; };\n\n return initPromise\n };\n return moduleFunc\n}\n\nvar supportsWorkers = function () {\n var supported = false;\n\n // Only attempt worker initialization in browsers; elsewhere it would just be\n // noise e.g. loading into a Node environment for SSR.\n if (typeof window !== 'undefined' && typeof window.document !== 'undefined') {\n try {\n // TODO additional checks for things like importScripts within the worker?\n // Would need to be an async check.\n var worker = new Worker(\n URL.createObjectURL(new Blob([''], { type: 'application/javascript' }))\n );\n worker.terminate();\n supported = true;\n } catch (err) {\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'test') ; else {\n console.log(\n (\"Troika createWorkerModule: web workers not allowed; falling back to main thread execution. Cause: [\" + (err.message) + \"]\")\n );\n }\n }\n }\n\n // Cached result\n supportsWorkers = function () { return supported; };\n return supported\n};\n\nvar _workerModuleId = 0;\nvar _messageId = 0;\nvar _allowInitAsString = false;\nvar workers = Object.create(null);\nvar registeredModules = Object.create(null); //workerId -> Set\nvar openRequests = Object.create(null);\n\n\n/**\n * Define a module of code that will be executed with a web worker. This provides a simple\n * interface for moving chunks of logic off the main thread, and managing their dependencies\n * among one another.\n *\n * @param {object} options\n * @param {function} options.init\n * @param {array} [options.dependencies]\n * @param {function} [options.getTransferables]\n * @param {string} [options.name]\n * @param {string} [options.workerId]\n * @return {function(...[*]): {then}}\n */\nfunction defineWorkerModule(options) {\n if ((!options || typeof options.init !== 'function') && !_allowInitAsString) {\n throw new Error('requires `options.init` function')\n }\n var dependencies = options.dependencies;\n var init = options.init;\n var getTransferables = options.getTransferables;\n var workerId = options.workerId;\n\n var onMainThread = defineMainThreadModule(options);\n\n if (workerId == null) {\n workerId = '#default';\n }\n var id = \"workerModule\" + (++_workerModuleId);\n var name = options.name || id;\n var registrationPromise = null;\n\n dependencies = dependencies && dependencies.map(function (dep) {\n // Wrap raw functions as worker modules with no dependencies\n if (typeof dep === 'function' && !dep.workerModuleData) {\n _allowInitAsString = true;\n dep = defineWorkerModule({\n workerId: workerId,\n name: (\"<\" + name + \"> function dependency: \" + (dep.name)),\n init: (\"function(){return (\\n\" + (stringifyFunction(dep)) + \"\\n)}\")\n });\n _allowInitAsString = false;\n }\n // Grab postable data for worker modules\n if (dep && dep.workerModuleData) {\n dep = dep.workerModuleData;\n }\n return dep\n });\n\n function moduleFunc() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n if (!supportsWorkers()) {\n return onMainThread.apply(void 0, args)\n }\n\n // Register this module if needed\n if (!registrationPromise) {\n registrationPromise = callWorker(workerId,'registerModule', moduleFunc.workerModuleData);\n var unregister = function () {\n registrationPromise = null;\n registeredModules[workerId].delete(unregister);\n }\n ;(registeredModules[workerId] || (registeredModules[workerId] = new Set())).add(unregister);\n }\n\n // Invoke the module, returning a promise\n return registrationPromise.then(function (ref) {\n var isCallable = ref.isCallable;\n\n if (isCallable) {\n return callWorker(workerId,'callModule', {id: id, args: args})\n } else {\n throw new Error('Worker module function was called but `init` did not return a callable function')\n }\n })\n }\n moduleFunc.workerModuleData = {\n isWorkerModule: true,\n id: id,\n name: name,\n dependencies: dependencies,\n init: stringifyFunction(init),\n getTransferables: getTransferables && stringifyFunction(getTransferables)\n };\n\n moduleFunc.onMainThread = onMainThread;\n\n return moduleFunc\n}\n\n/**\n * Terminate an active Worker by a workerId that was passed to defineWorkerModule.\n * This only terminates the Worker itself; the worker module will remain available\n * and if you call it again its Worker will be respawned.\n * @param {string} workerId\n */\nfunction terminateWorker(workerId) {\n // Unregister all modules that were registered in that worker\n if (registeredModules[workerId]) {\n registeredModules[workerId].forEach(function (unregister) {\n unregister();\n });\n }\n // Terminate the Worker object\n if (workers[workerId]) {\n workers[workerId].terminate();\n delete workers[workerId];\n }\n}\n\n/**\n * Stringifies a function into a form that can be deserialized in the worker\n * @param fn\n */\nfunction stringifyFunction(fn) {\n var str = fn.toString();\n // If it was defined in object method/property format, it needs to be modified\n if (!/^function/.test(str) && /^\\w+\\s*\\(/.test(str)) {\n str = 'function ' + str;\n }\n return str\n}\n\n\nfunction getWorker(workerId) {\n var worker = workers[workerId];\n if (!worker) {\n // Bootstrap the worker's content\n var bootstrap = stringifyFunction(workerBootstrap);\n\n // Create the worker from the bootstrap function content\n worker = workers[workerId] = new Worker(\n URL.createObjectURL(\n new Blob(\n [(\"/** Worker Module Bootstrap: \" + (workerId.replace(/\\*/g, '')) + \" **/\\n\\n;(\" + bootstrap + \")()\")],\n {type: 'application/javascript'}\n )\n )\n );\n\n // Single handler for response messages from the worker\n worker.onmessage = function (e) {\n var response = e.data;\n var msgId = response.messageId;\n var callback = openRequests[msgId];\n if (!callback) {\n throw new Error('WorkerModule response with empty or unknown messageId')\n }\n delete openRequests[msgId];\n callback(response);\n };\n }\n return worker\n}\n\n// Issue a call to the worker with a callback to handle the response\nfunction callWorker(workerId, action, data) {\n return new Promise(function (resolve, reject) {\n var messageId = ++_messageId;\n openRequests[messageId] = function (response) {\n if (response.success) {\n resolve(response.result);\n } else {\n reject(new Error((\"Error in worker \" + action + \" call: \" + (response.error))));\n }\n };\n getWorker(workerId).postMessage({\n messageId: messageId,\n action: action,\n data: data\n });\n })\n}\n\nexport { defineWorkerModule, stringifyFunction, terminateWorker };\n","function SDFGenerator() {\nvar exports = (function (exports) {\n\n /**\n * Find the point on a quadratic bezier curve at t where t is in the range [0, 1]\n */\n function pointOnQuadraticBezier (x0, y0, x1, y1, x2, y2, t, pointOut) {\n var t2 = 1 - t;\n pointOut.x = t2 * t2 * x0 + 2 * t2 * t * x1 + t * t * x2;\n pointOut.y = t2 * t2 * y0 + 2 * t2 * t * y1 + t * t * y2;\n }\n\n /**\n * Find the point on a cubic bezier curve at t where t is in the range [0, 1]\n */\n function pointOnCubicBezier (x0, y0, x1, y1, x2, y2, x3, y3, t, pointOut) {\n var t2 = 1 - t;\n pointOut.x = t2 * t2 * t2 * x0 + 3 * t2 * t2 * t * x1 + 3 * t2 * t * t * x2 + t * t * t * x3;\n pointOut.y = t2 * t2 * t2 * y0 + 3 * t2 * t2 * t * y1 + 3 * t2 * t * t * y2 + t * t * t * y3;\n }\n\n /**\n * Parse a path string into its constituent line/curve commands, invoking a callback for each.\n * @param {string} pathString - An SVG-like path string to parse; should only contain commands: M/L/Q/C/Z\n * @param {function(\n * command: 'L'|'Q'|'C',\n * startX: number,\n * startY: number,\n * endX: number,\n * endY: number,\n * ctrl1X?: number,\n * ctrl1Y?: number,\n * ctrl2X?: number,\n * ctrl2Y?: number\n * )} commandCallback - A callback function that will be called once for each parsed path command, passing the\n * command identifier (only L/Q/C commands) and its numeric arguments.\n */\n function forEachPathCommand(pathString, commandCallback) {\n var segmentRE = /([MLQCZ])([^MLQCZ]*)/g;\n var match, firstX, firstY, prevX, prevY;\n while ((match = segmentRE.exec(pathString))) {\n var args = match[2]\n .replace(/^\\s*|\\s*$/g, '')\n .split(/[,\\s]+/)\n .map(function (v) { return parseFloat(v); });\n switch (match[1]) {\n case 'M':\n prevX = firstX = args[0];\n prevY = firstY = args[1];\n break\n case 'L':\n if (args[0] !== prevX || args[1] !== prevY) { // yup, some fonts have zero-length line commands\n commandCallback('L', prevX, prevY, (prevX = args[0]), (prevY = args[1]));\n }\n break\n case 'Q': {\n commandCallback('Q', prevX, prevY, (prevX = args[2]), (prevY = args[3]), args[0], args[1]);\n break\n }\n case 'C': {\n commandCallback('C', prevX, prevY, (prevX = args[4]), (prevY = args[5]), args[0], args[1], args[2], args[3]);\n break\n }\n case 'Z':\n if (prevX !== firstX || prevY !== firstY) {\n commandCallback('L', prevX, prevY, firstX, firstY);\n }\n break\n }\n }\n }\n\n /**\n * Convert a path string to a series of straight line segments\n * @param {string} pathString - An SVG-like path string to parse; should only contain commands: M/L/Q/C/Z\n * @param {function(x1:number, y1:number, x2:number, y2:number)} segmentCallback - A callback\n * function that will be called once for every line segment\n * @param {number} [curvePoints] - How many straight line segments to use when approximating a\n * bezier curve in the path. Defaults to 16.\n */\n function pathToLineSegments (pathString, segmentCallback, curvePoints) {\n if ( curvePoints === void 0 ) curvePoints = 16;\n\n var tempPoint = { x: 0, y: 0 };\n forEachPathCommand(pathString, function (command, startX, startY, endX, endY, ctrl1X, ctrl1Y, ctrl2X, ctrl2Y) {\n switch (command) {\n case 'L':\n segmentCallback(startX, startY, endX, endY);\n break\n case 'Q': {\n var prevCurveX = startX;\n var prevCurveY = startY;\n for (var i = 1; i < curvePoints; i++) {\n pointOnQuadraticBezier(\n startX, startY,\n ctrl1X, ctrl1Y,\n endX, endY,\n i / (curvePoints - 1),\n tempPoint\n );\n segmentCallback(prevCurveX, prevCurveY, tempPoint.x, tempPoint.y);\n prevCurveX = tempPoint.x;\n prevCurveY = tempPoint.y;\n }\n break\n }\n case 'C': {\n var prevCurveX$1 = startX;\n var prevCurveY$1 = startY;\n for (var i$1 = 1; i$1 < curvePoints; i$1++) {\n pointOnCubicBezier(\n startX, startY,\n ctrl1X, ctrl1Y,\n ctrl2X, ctrl2Y,\n endX, endY,\n i$1 / (curvePoints - 1),\n tempPoint\n );\n segmentCallback(prevCurveX$1, prevCurveY$1, tempPoint.x, tempPoint.y);\n prevCurveX$1 = tempPoint.x;\n prevCurveY$1 = tempPoint.y;\n }\n break\n }\n }\n });\n }\n\n var viewportQuadVertex = \"precision highp float;attribute vec2 aUV;varying vec2 vUV;void main(){vUV=aUV;gl_Position=vec4(mix(vec2(-1.0),vec2(1.0),aUV),0.0,1.0);}\";\n\n var copyTexFragment = \"precision highp float;uniform sampler2D tex;varying vec2 vUV;void main(){gl_FragColor=texture2D(tex,vUV);}\";\n\n var cache = new WeakMap();\n\n var glContextParams = {\n premultipliedAlpha: false,\n preserveDrawingBuffer: true,\n antialias: false,\n depth: false,\n };\n\n /**\n * This is a little helper library for WebGL. It assists with state management for a GL context.\n * It's pretty tightly wrapped to the needs of this package, not very general-purpose.\n *\n * @param { WebGLRenderingContext | HTMLCanvasElement | OffscreenCanvas } glOrCanvas - the GL context to wrap\n * @param { ({gl, getExtension, withProgram, withTexture, withTextureFramebuffer, handleContextLoss}) => void } callback\n */\n function withWebGLContext (glOrCanvas, callback) {\n var gl = glOrCanvas.getContext ? glOrCanvas.getContext('webgl', glContextParams) : glOrCanvas;\n var wrapper = cache.get(gl);\n if (!wrapper) {\n var isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext;\n var extensions = {};\n var programs = {};\n var textures = {};\n var textureUnit = -1;\n var framebufferStack = [];\n\n gl.canvas.addEventListener('webglcontextlost', function (e) {\n handleContextLoss();\n e.preventDefault();\n }, false);\n\n function getExtension (name) {\n var ext = extensions[name];\n if (!ext) {\n ext = extensions[name] = gl.getExtension(name);\n if (!ext) {\n throw new Error((name + \" not supported\"))\n }\n }\n return ext\n }\n\n function compileShader (src, type) {\n var shader = gl.createShader(type);\n gl.shaderSource(shader, src);\n gl.compileShader(shader);\n // const status = gl.getShaderParameter(shader, gl.COMPILE_STATUS)\n // if (!status && !gl.isContextLost()) {\n // throw new Error(gl.getShaderInfoLog(shader).trim())\n // }\n return shader\n }\n\n function withProgram (name, vert, frag, func) {\n if (!programs[name]) {\n var attributes = {};\n var uniforms = {};\n var program = gl.createProgram();\n gl.attachShader(program, compileShader(vert, gl.VERTEX_SHADER));\n gl.attachShader(program, compileShader(frag, gl.FRAGMENT_SHADER));\n gl.linkProgram(program);\n\n programs[name] = {\n program: program,\n transaction: function transaction (func) {\n gl.useProgram(program);\n func({\n setUniform: function setUniform (type, name) {\n var values = [], len = arguments.length - 2;\n while ( len-- > 0 ) values[ len ] = arguments[ len + 2 ];\n\n var uniformLoc = uniforms[name] || (uniforms[name] = gl.getUniformLocation(program, name));\n gl[(\"uniform\" + type)].apply(gl, [ uniformLoc ].concat( values ));\n },\n\n setAttribute: function setAttribute (name, size, usage, instancingDivisor, data) {\n var attr = attributes[name];\n if (!attr) {\n attr = attributes[name] = {\n buf: gl.createBuffer(), // TODO should we destroy our buffers?\n loc: gl.getAttribLocation(program, name),\n data: null\n };\n }\n gl.bindBuffer(gl.ARRAY_BUFFER, attr.buf);\n gl.vertexAttribPointer(attr.loc, size, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(attr.loc);\n if (isWebGL2) {\n gl.vertexAttribDivisor(attr.loc, instancingDivisor);\n } else {\n getExtension('ANGLE_instanced_arrays').vertexAttribDivisorANGLE(attr.loc, instancingDivisor);\n }\n if (data !== attr.data) {\n gl.bufferData(gl.ARRAY_BUFFER, data, usage);\n attr.data = data;\n }\n }\n });\n }\n };\n }\n\n programs[name].transaction(func);\n }\n\n function withTexture (name, func) {\n textureUnit++;\n try {\n gl.activeTexture(gl.TEXTURE0 + textureUnit);\n var texture = textures[name];\n if (!texture) {\n texture = textures[name] = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n }\n gl.bindTexture(gl.TEXTURE_2D, texture);\n func(texture, textureUnit);\n } finally {\n textureUnit--;\n }\n }\n\n function withTextureFramebuffer (texture, textureUnit, func) {\n var framebuffer = gl.createFramebuffer();\n framebufferStack.push(framebuffer);\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\n gl.activeTexture(gl.TEXTURE0 + textureUnit);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\n try {\n func(framebuffer);\n } finally {\n gl.deleteFramebuffer(framebuffer);\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebufferStack[--framebufferStack.length - 1] || null);\n }\n }\n\n function handleContextLoss () {\n extensions = {};\n programs = {};\n textures = {};\n textureUnit = -1;\n framebufferStack.length = 0;\n }\n\n cache.set(gl, wrapper = {\n gl: gl,\n isWebGL2: isWebGL2,\n getExtension: getExtension,\n withProgram: withProgram,\n withTexture: withTexture,\n withTextureFramebuffer: withTextureFramebuffer,\n handleContextLoss: handleContextLoss,\n });\n }\n callback(wrapper);\n }\n\n\n function renderImageData(glOrCanvas, imageData, x, y, width, height, channels, framebuffer) {\n if ( channels === void 0 ) channels = 15;\n if ( framebuffer === void 0 ) framebuffer = null;\n\n withWebGLContext(glOrCanvas, function (ref) {\n var gl = ref.gl;\n var withProgram = ref.withProgram;\n var withTexture = ref.withTexture;\n\n withTexture('copy', function (tex, texUnit) {\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, imageData);\n withProgram('copy', viewportQuadVertex, copyTexFragment, function (ref) {\n var setUniform = ref.setUniform;\n var setAttribute = ref.setAttribute;\n\n setAttribute('aUV', 2, gl.STATIC_DRAW, 0, new Float32Array([0, 0, 2, 0, 0, 2]));\n setUniform('1i', 'image', texUnit);\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer || null);\n gl.disable(gl.BLEND);\n gl.colorMask(channels & 8, channels & 4, channels & 2, channels & 1);\n gl.viewport(x, y, width, height);\n gl.scissor(x, y, width, height);\n gl.drawArrays(gl.TRIANGLES, 0, 3);\n });\n });\n });\n }\n\n /**\n * Resizing a canvas clears its contents; this utility copies the previous contents over.\n * @param canvas\n * @param newWidth\n * @param newHeight\n */\n function resizeWebGLCanvasWithoutClearing(canvas, newWidth, newHeight) {\n var width = canvas.width;\n var height = canvas.height;\n withWebGLContext(canvas, function (ref) {\n var gl = ref.gl;\n\n var data = new Uint8Array(width * height * 4);\n gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, data);\n canvas.width = newWidth;\n canvas.height = newHeight;\n renderImageData(gl, data, 0, 0, width, height);\n });\n }\n\n var webglUtils = /*#__PURE__*/Object.freeze({\n __proto__: null,\n withWebGLContext: withWebGLContext,\n renderImageData: renderImageData,\n resizeWebGLCanvasWithoutClearing: resizeWebGLCanvasWithoutClearing\n });\n\n function generate$2 (sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent) {\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n\n var textureData = new Uint8Array(sdfWidth * sdfHeight);\n\n var viewBoxWidth = viewBox[2] - viewBox[0];\n var viewBoxHeight = viewBox[3] - viewBox[1];\n\n // Decompose all paths into straight line segments and add them to an index\n var segments = [];\n pathToLineSegments(path, function (x1, y1, x2, y2) {\n segments.push({\n x1: x1, y1: y1, x2: x2, y2: y2,\n minX: Math.min(x1, x2),\n minY: Math.min(y1, y2),\n maxX: Math.max(x1, x2),\n maxY: Math.max(y1, y2)\n });\n });\n\n // Sort segments by maxX, this will let us short-circuit some loops below\n segments.sort(function (a, b) { return a.maxX - b.maxX; });\n\n // For each target SDF texel, find the distance from its center to its nearest line segment,\n // map that distance to an alpha value, and write that alpha to the texel\n for (var sdfX = 0; sdfX < sdfWidth; sdfX++) {\n for (var sdfY = 0; sdfY < sdfHeight; sdfY++) {\n var signedDist = findNearestSignedDistance(\n viewBox[0] + viewBoxWidth * (sdfX + 0.5) / sdfWidth,\n viewBox[1] + viewBoxHeight * (sdfY + 0.5) / sdfHeight\n );\n\n // Use an exponential scale to ensure the texels very near the glyph path have adequate\n // precision, while allowing the distance field to cover the entire texture, given that\n // there are only 8 bits available. Formula visualized: https://www.desmos.com/calculator/uiaq5aqiam\n var alpha = Math.pow((1 - Math.abs(signedDist) / maxDistance), sdfExponent) / 2;\n if (signedDist < 0) {\n alpha = 1 - alpha;\n }\n\n alpha = Math.max(0, Math.min(255, Math.round(alpha * 255))); //clamp\n textureData[sdfY * sdfWidth + sdfX] = alpha;\n }\n }\n\n return textureData\n\n /**\n * For a given x/y, search the index for the closest line segment and return\n * its signed distance. Negative = inside, positive = outside, zero = on edge\n * @param x\n * @param y\n * @returns {number}\n */\n function findNearestSignedDistance (x, y) {\n var closestDistSq = Infinity;\n var closestDist = Infinity;\n\n for (var i = segments.length; i--;) {\n var seg = segments[i];\n if (seg.maxX + closestDist <= x) { break } //sorting by maxX means no more can be closer, so we can short-circuit\n if (x + closestDist > seg.minX && y - closestDist < seg.maxY && y + closestDist > seg.minY) {\n var distSq = absSquareDistanceToLineSegment(x, y, seg.x1, seg.y1, seg.x2, seg.y2);\n if (distSq < closestDistSq) {\n closestDistSq = distSq;\n closestDist = Math.sqrt(closestDistSq);\n }\n }\n }\n\n // Flip to negative distance if inside the poly\n if (isPointInPoly(x, y)) {\n closestDist = -closestDist;\n }\n return closestDist\n }\n\n /**\n * Determine whether the given point lies inside or outside the glyph. Uses a simple\n * winding-number ray casting algorithm using a ray pointing east from the point.\n */\n function isPointInPoly (x, y) {\n var winding = 0;\n for (var i = segments.length; i--;) {\n var seg = segments[i];\n if (seg.maxX <= x) { break } //sorting by maxX means no more can cross, so we can short-circuit\n var intersects = ((seg.y1 > y) !== (seg.y2 > y)) && (x < (seg.x2 - seg.x1) * (y - seg.y1) / (seg.y2 - seg.y1) + seg.x1);\n if (intersects) {\n winding += seg.y1 < seg.y2 ? 1 : -1;\n }\n }\n return winding !== 0\n }\n }\n\n function generateIntoCanvas$2(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, canvas, x, y, channel) {\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n if ( x === void 0 ) x = 0;\n if ( y === void 0 ) y = 0;\n if ( channel === void 0 ) channel = 0;\n\n generateIntoFramebuffer$1(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, canvas, null, x, y, channel);\n }\n\n function generateIntoFramebuffer$1 (sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, glOrCanvas, framebuffer, x, y, channel) {\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n if ( x === void 0 ) x = 0;\n if ( y === void 0 ) y = 0;\n if ( channel === void 0 ) channel = 0;\n\n var data = generate$2(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent);\n // Expand single-channel data to rbga\n var rgbaData = new Uint8Array(data.length * 4);\n for (var i = 0; i < data.length; i++) {\n rgbaData[i * 4 + channel] = data[i];\n }\n renderImageData(glOrCanvas, rgbaData, x, y, sdfWidth, sdfHeight, 1 << (3 - channel), framebuffer);\n }\n\n /**\n * Find the absolute distance from a point to a line segment at closest approach\n */\n function absSquareDistanceToLineSegment (x, y, lineX0, lineY0, lineX1, lineY1) {\n var ldx = lineX1 - lineX0;\n var ldy = lineY1 - lineY0;\n var lengthSq = ldx * ldx + ldy * ldy;\n var t = lengthSq ? Math.max(0, Math.min(1, ((x - lineX0) * ldx + (y - lineY0) * ldy) / lengthSq)) : 0;\n var dx = x - (lineX0 + t * ldx);\n var dy = y - (lineY0 + t * ldy);\n return dx * dx + dy * dy\n }\n\n var javascript = /*#__PURE__*/Object.freeze({\n __proto__: null,\n generate: generate$2,\n generateIntoCanvas: generateIntoCanvas$2,\n generateIntoFramebuffer: generateIntoFramebuffer$1\n });\n\n var mainVertex = \"precision highp float;uniform vec4 uGlyphBounds;attribute vec2 aUV;attribute vec4 aLineSegment;varying vec4 vLineSegment;varying vec2 vGlyphXY;void main(){vLineSegment=aLineSegment;vGlyphXY=mix(uGlyphBounds.xy,uGlyphBounds.zw,aUV);gl_Position=vec4(mix(vec2(-1.0),vec2(1.0),aUV),0.0,1.0);}\";\n\n var mainFragment = \"precision highp float;uniform vec4 uGlyphBounds;uniform float uMaxDistance;uniform float uExponent;varying vec4 vLineSegment;varying vec2 vGlyphXY;float absDistToSegment(vec2 point,vec2 lineA,vec2 lineB){vec2 lineDir=lineB-lineA;float lenSq=dot(lineDir,lineDir);float t=lenSq==0.0 ? 0.0 : clamp(dot(point-lineA,lineDir)/lenSq,0.0,1.0);vec2 linePt=lineA+t*lineDir;return distance(point,linePt);}void main(){vec4 seg=vLineSegment;vec2 p=vGlyphXY;float dist=absDistToSegment(p,seg.xy,seg.zw);float val=pow(1.0-clamp(dist/uMaxDistance,0.0,1.0),uExponent)*0.5;bool crossing=(seg.y>p.y!=seg.w>p.y)&&(p.x<(seg.z-seg.x)*(p.y-seg.y)/(seg.w-seg.y)+seg.x);bool crossingUp=crossing&&vLineSegment.y bool\n\n function validateSupport (glOrCanvas) {\n if (!isTestingSupport && !isSupported(glOrCanvas)) {\n throw new Error('WebGL generation not supported')\n }\n }\n\n function generate$1 (sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, glOrCanvas) {\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n if ( glOrCanvas === void 0 ) glOrCanvas = null;\n\n if (!glOrCanvas) {\n glOrCanvas = implicitContext;\n if (!glOrCanvas) {\n var canvas = typeof OffscreenCanvas === 'function'\n ? new OffscreenCanvas(1, 1)\n : typeof document !== 'undefined'\n ? document.createElement('canvas')\n : null;\n if (!canvas) {\n throw new Error('OffscreenCanvas or DOM canvas not supported')\n }\n glOrCanvas = implicitContext = canvas.getContext('webgl', { depth: false });\n }\n }\n\n validateSupport(glOrCanvas);\n\n var rgbaData = new Uint8Array(sdfWidth * sdfHeight * 4); //not Uint8ClampedArray, cuz Safari\n\n // Render into a background texture framebuffer\n withWebGLContext(glOrCanvas, function (ref) {\n var gl = ref.gl;\n var withTexture = ref.withTexture;\n var withTextureFramebuffer = ref.withTextureFramebuffer;\n\n withTexture('readable', function (texture, textureUnit) {\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, sdfWidth, sdfHeight, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\n\n withTextureFramebuffer(texture, textureUnit, function (framebuffer) {\n generateIntoFramebuffer(\n sdfWidth,\n sdfHeight,\n path,\n viewBox,\n maxDistance,\n sdfExponent,\n gl,\n framebuffer,\n 0,\n 0,\n 0 // red channel\n );\n gl.readPixels(0, 0, sdfWidth, sdfHeight, gl.RGBA, gl.UNSIGNED_BYTE, rgbaData);\n });\n });\n });\n\n // Throw away all but the red channel\n var data = new Uint8Array(sdfWidth * sdfHeight);\n for (var i = 0, j = 0; i < rgbaData.length; i += 4) {\n data[j++] = rgbaData[i];\n }\n\n return data\n }\n\n function generateIntoCanvas$1(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, canvas, x, y, channel) {\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n if ( x === void 0 ) x = 0;\n if ( y === void 0 ) y = 0;\n if ( channel === void 0 ) channel = 0;\n\n generateIntoFramebuffer(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, canvas, null, x, y, channel);\n }\n\n function generateIntoFramebuffer (sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, glOrCanvas, framebuffer, x, y, channel) {\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n if ( x === void 0 ) x = 0;\n if ( y === void 0 ) y = 0;\n if ( channel === void 0 ) channel = 0;\n\n // Verify support\n validateSupport(glOrCanvas);\n\n // Compute path segments\n var lineSegmentCoords = [];\n pathToLineSegments(path, function (x1, y1, x2, y2) {\n lineSegmentCoords.push(x1, y1, x2, y2);\n });\n lineSegmentCoords = new Float32Array(lineSegmentCoords);\n\n withWebGLContext(glOrCanvas, function (ref) {\n var gl = ref.gl;\n var isWebGL2 = ref.isWebGL2;\n var getExtension = ref.getExtension;\n var withProgram = ref.withProgram;\n var withTexture = ref.withTexture;\n var withTextureFramebuffer = ref.withTextureFramebuffer;\n var handleContextLoss = ref.handleContextLoss;\n\n withTexture('rawDistances', function (intermediateTexture, intermediateTextureUnit) {\n if (sdfWidth !== intermediateTexture._lastWidth || sdfHeight !== intermediateTexture._lastHeight) {\n gl.texImage2D(\n gl.TEXTURE_2D, 0, gl.RGBA,\n intermediateTexture._lastWidth = sdfWidth,\n intermediateTexture._lastHeight = sdfHeight,\n 0, gl.RGBA, gl.UNSIGNED_BYTE, null\n );\n }\n\n // Unsigned distance pass\n withProgram('main', mainVertex, mainFragment, function (ref) {\n var setAttribute = ref.setAttribute;\n var setUniform = ref.setUniform;\n\n // Init extensions\n var instancingExtension = !isWebGL2 && getExtension('ANGLE_instanced_arrays');\n var blendMinMaxExtension = !isWebGL2 && getExtension('EXT_blend_minmax');\n\n // Init/update attributes\n setAttribute('aUV', 2, gl.STATIC_DRAW, 0, viewportUVs);\n setAttribute('aLineSegment', 4, gl.DYNAMIC_DRAW, 1, lineSegmentCoords);\n\n // Init/update uniforms\n setUniform.apply(void 0, [ '4f', 'uGlyphBounds' ].concat( viewBox ));\n setUniform('1f', 'uMaxDistance', maxDistance);\n setUniform('1f', 'uExponent', sdfExponent);\n\n // Render initial unsigned distance / winding number info to a texture\n withTextureFramebuffer(intermediateTexture, intermediateTextureUnit, function (framebuffer) {\n gl.enable(gl.BLEND);\n gl.colorMask(true, true, true, true);\n gl.viewport(0, 0, sdfWidth, sdfHeight);\n gl.scissor(0, 0, sdfWidth, sdfHeight);\n gl.blendFunc(gl.ONE, gl.ONE);\n // Red+Green channels are incremented (FUNC_ADD) for segment-ray crossings to give a \"winding number\".\n // Alpha holds the closest (MAX) unsigned distance.\n gl.blendEquationSeparate(gl.FUNC_ADD, isWebGL2 ? gl.MAX : blendMinMaxExtension.MAX_EXT);\n gl.clear(gl.COLOR_BUFFER_BIT);\n if (isWebGL2) {\n gl.drawArraysInstanced(gl.TRIANGLES, 0, 3, lineSegmentCoords.length / 4);\n } else {\n instancingExtension.drawArraysInstancedANGLE(gl.TRIANGLES, 0, 3, lineSegmentCoords.length / 4);\n }\n // Debug\n // const debug = new Uint8Array(sdfWidth * sdfHeight * 4)\n // gl.readPixels(0, 0, sdfWidth, sdfHeight, gl.RGBA, gl.UNSIGNED_BYTE, debug)\n // console.log('intermediate texture data: ', debug)\n });\n });\n\n // Use the data stored in the texture to apply inside/outside and write to the output framebuffer rect+channel.\n withProgram('post', viewportQuadVertex, postFragment, function (program) {\n program.setAttribute('aUV', 2, gl.STATIC_DRAW, 0, viewportUVs);\n program.setUniform('1i', 'tex', intermediateTextureUnit);\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\n gl.disable(gl.BLEND);\n gl.colorMask(channel === 0, channel === 1, channel === 2, channel === 3);\n gl.viewport(x, y, sdfWidth, sdfHeight);\n gl.scissor(x, y, sdfWidth, sdfHeight);\n gl.drawArrays(gl.TRIANGLES, 0, 3);\n });\n });\n\n // Handle context loss occurring during any of the above calls\n if (gl.isContextLost()) {\n handleContextLoss();\n throw new Error('webgl context lost')\n }\n });\n }\n\n function isSupported (glOrCanvas) {\n var key = (!glOrCanvas || glOrCanvas === implicitContext) ? NULL_OBJECT : (glOrCanvas.canvas || glOrCanvas);\n var supported = supportByCanvas.get(key);\n if (supported === undefined) {\n isTestingSupport = true;\n var failReason = null;\n try {\n // Since we can't detect all failure modes up front, let's just do a trial run of a\n // simple path and compare what we get back to the correct expected result. This will\n // also serve to prime the shader compilation.\n var expectedResult = [\n 97, 106, 97, 61,\n 99, 137, 118, 80,\n 80, 118, 137, 99,\n 61, 97, 106, 97\n ];\n var testResult = generate$1(\n 4,\n 4,\n 'M8,8L16,8L24,24L16,24Z',\n [0, 0, 32, 32],\n 24,\n 1,\n glOrCanvas\n );\n supported = testResult && expectedResult.length === testResult.length &&\n testResult.every(function (val, i) { return val === expectedResult[i]; });\n if (!supported) {\n failReason = 'bad trial run results';\n console.info(expectedResult, testResult);\n }\n } catch (err) {\n // TODO if it threw due to webgl context loss, should we maybe leave isSupported as null and try again later?\n supported = false;\n failReason = err.message;\n }\n if (failReason) {\n console.warn('WebGL SDF generation not supported:', failReason);\n }\n isTestingSupport = false;\n supportByCanvas.set(key, supported);\n }\n return supported\n }\n\n var webgl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n generate: generate$1,\n generateIntoCanvas: generateIntoCanvas$1,\n generateIntoFramebuffer: generateIntoFramebuffer,\n isSupported: isSupported\n });\n\n /**\n * Generate an SDF texture image for a 2D path.\n *\n * @param {number} sdfWidth - width of the SDF output image in pixels.\n * @param {number} sdfHeight - height of the SDF output image in pixels.\n * @param {string} path - an SVG-like path string describing the glyph; should only contain commands: M/L/Q/C/Z.\n * @param {number[]} viewBox - [minX, minY, maxX, maxY] in font units aligning with the texture's edges.\n * @param {number} maxDistance - the maximum distance from the glyph path in font units that will be encoded; defaults\n * to half the maximum viewBox dimension.\n * @param {number} [sdfExponent] - specifies an exponent for encoding the SDF's distance values; higher exponents\n * will give greater precision nearer the glyph's path.\n * @return {Uint8Array}\n */\n function generate(\n sdfWidth,\n sdfHeight,\n path,\n viewBox,\n maxDistance,\n sdfExponent\n ) {\n if ( maxDistance === void 0 ) maxDistance = Math.max(viewBox[2] - viewBox[0], viewBox[3] - viewBox[1]) / 2;\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n\n try {\n return generate$1.apply(webgl, arguments)\n } catch(e) {\n console.info('WebGL SDF generation failed, falling back to JS', e);\n return generate$2.apply(javascript, arguments)\n }\n }\n\n /**\n * Generate an SDF texture image for a 2D path, inserting the result into a WebGL `canvas` at a given x/y position\n * and color channel. This is generally much faster than calling `generate` because it does not require reading pixels\n * back from the GPU->CPU -- the `canvas` can be used directly as a WebGL texture image, so it all stays on the GPU.\n *\n * @param {number} sdfWidth - width of the SDF output image in pixels.\n * @param {number} sdfHeight - height of the SDF output image in pixels.\n * @param {string} path - an SVG-like path string describing the glyph; should only contain commands: M/L/Q/C/Z.\n * @param {number[]} viewBox - [minX, minY, maxX, maxY] in font units aligning with the texture's edges.\n * @param {number} maxDistance - the maximum distance from the glyph path in font units that will be encoded; defaults\n * to half the maximum viewBox dimension.\n * @param {number} [sdfExponent] - specifies an exponent for encoding the SDF's distance values; higher exponents\n * will give greater precision nearer the glyph's path.\n * @param {HTMLCanvasElement|OffscreenCanvas} canvas - a WebGL-enabled canvas into which the SDF will be rendered.\n * Only the relevant rect/channel will be modified, the rest will be preserved. To avoid unpredictable results\n * due to shared GL context state, this canvas should be dedicated to use by this library alone.\n * @param {number} x - the x position at which to render the SDF.\n * @param {number} y - the y position at which to render the SDF.\n * @param {number} channel - the color channel index (0-4) into which the SDF will be rendered.\n * @return {Uint8Array}\n */\n function generateIntoCanvas(\n sdfWidth,\n sdfHeight,\n path,\n viewBox,\n maxDistance,\n sdfExponent,\n canvas,\n x,\n y,\n channel\n ) {\n if ( maxDistance === void 0 ) maxDistance = Math.max(viewBox[2] - viewBox[0], viewBox[3] - viewBox[1]) / 2;\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n if ( x === void 0 ) x = 0;\n if ( y === void 0 ) y = 0;\n if ( channel === void 0 ) channel = 0;\n\n try {\n return generateIntoCanvas$1.apply(webgl, arguments)\n } catch(e) {\n console.info('WebGL SDF generation failed, falling back to JS', e);\n return generateIntoCanvas$2.apply(javascript, arguments)\n }\n }\n\n exports.forEachPathCommand = forEachPathCommand;\n exports.generate = generate;\n exports.generateIntoCanvas = generateIntoCanvas;\n exports.javascript = javascript;\n exports.pathToLineSegments = pathToLineSegments;\n exports.webgl = webgl;\n exports.webglUtils = webglUtils;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n return exports;\n\n}({}));\nreturn exports\n}\n\nexport { SDFGenerator as default };\n","function bidiFactory() {\nvar bidi = (function (exports) {\n\n // Bidi character types data, auto generated\n var DATA = {\n \"R\": \"13k,1a,2,3,3,2+1j,ch+16,a+1,5+2,2+n,5,a,4,6+16,4+3,h+1b,4mo,179q,2+9,2+11,2i9+7y,2+68,4,3+4,5+13,4+3,2+4k,3+29,8+cf,1t+7z,w+17,3+3m,1t+3z,16o1+5r,8+30,8+mc,29+1r,29+4v,75+73\",\n \"EN\": \"1c+9,3d+1,6,187+9,513,4+5,7+9,sf+j,175h+9,qw+q,161f+1d,4xt+a,25i+9\",\n \"ES\": \"17,2,6dp+1,f+1,av,16vr,mx+1,4o,2\",\n \"ET\": \"z+2,3h+3,b+1,ym,3e+1,2o,p4+1,8,6u,7c,g6,1wc,1n9+4,30+1b,2n,6d,qhx+1,h0m,a+1,49+2,63+1,4+1,6bb+3,12jj\",\n \"AN\": \"16o+5,2j+9,2+1,35,ed,1ff2+9,87+u\",\n \"CS\": \"18,2+1,b,2u,12k,55v,l,17v0,2,3,53,2+1,b\",\n \"B\": \"a,3,f+2,2v,690\",\n \"S\": \"9,2,k\",\n \"WS\": \"c,k,4f4,1vk+a,u,1j,335\",\n \"ON\": \"x+1,4+4,h+5,r+5,r+3,z,5+3,2+1,2+1,5,2+2,3+4,o,w,ci+1,8+d,3+d,6+8,2+g,39+1,9,6+1,2,33,b8,3+1,3c+1,7+1,5r,b,7h+3,sa+5,2,3i+6,jg+3,ur+9,2v,ij+1,9g+9,7+a,8m,4+1,49+x,14u,2+2,c+2,e+2,e+2,e+1,i+n,e+e,2+p,u+2,e+2,36+1,2+3,2+1,b,2+2,6+5,2,2,2,h+1,5+4,6+3,3+f,16+2,5+3l,3+81,1y+p,2+40,q+a,m+13,2r+ch,2+9e,75+hf,3+v,2+2w,6e+5,f+6,75+2a,1a+p,2+2g,d+5x,r+b,6+3,4+o,g,6+1,6+2,2k+1,4,2j,5h+z,1m+1,1e+f,t+2,1f+e,d+3,4o+3,2s+1,w,535+1r,h3l+1i,93+2,2s,b+1,3l+x,2v,4g+3,21+3,kz+1,g5v+1,5a,j+9,n+v,2,3,2+8,2+1,3+2,2,3,46+1,4+4,h+5,r+5,r+a,3h+2,4+6,b+4,78,1r+24,4+c,4,1hb,ey+6,103+j,16j+c,1ux+7,5+g,fsh,jdq+1t,4,57+2e,p1,1m,1m,1m,1m,4kt+1,7j+17,5+2r,d+e,3+e,2+e,2+10,m+4,w,1n+5,1q,4z+5,4b+rb,9+c,4+c,4+37,d+2g,8+b,l+b,5+1j,9+9,7+13,9+t,3+1,27+3c,2+29,2+3q,d+d,3+4,4+2,6+6,a+o,8+6,a+2,e+6,16+42,2+1i\",\n \"BN\": \"0+8,6+d,2s+5,2+p,e,4m9,1kt+2,2b+5,5+5,17q9+v,7k,6p+8,6+1,119d+3,440+7,96s+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+75,6p+2rz,1ben+1,1ekf+1,1ekf+1\",\n \"NSM\": \"lc+33,7o+6,7c+18,2,2+1,2+1,2,21+a,1d+k,h,2u+6,3+5,3+1,2+3,10,v+q,2k+a,1n+8,a,p+3,2+8,2+2,2+4,18+2,3c+e,2+v,1k,2,5+7,5,4+6,b+1,u,1n,5+3,9,l+1,r,3+1,1m,5+1,5+1,3+2,4,v+1,4,c+1,1m,5+4,2+1,5,l+1,n+5,2,1n,3,2+3,9,8+1,c+1,v,1q,d,1f,4,1m+2,6+2,2+3,8+1,c+1,u,1n,g+1,l+1,t+1,1m+1,5+3,9,l+1,u,21,8+2,2,2j,3+6,d+7,2r,3+8,c+5,23+1,s,2,2,1k+d,2+4,2+1,6+a,2+z,a,2v+3,2+5,2+1,3+1,q+1,5+2,h+3,e,3+1,7,g,jk+2,qb+2,u+2,u+1,v+1,1t+1,2+6,9,3+a,a,1a+2,3c+1,z,3b+2,5+1,a,7+2,64+1,3,1n,2+6,2,2,3+7,7+9,3,1d+g,1s+3,1d,2+4,2,6,15+8,d+1,x+3,3+1,2+2,1l,2+1,4,2+2,1n+7,3+1,49+2,2+c,2+6,5,7,4+1,5j+1l,2+4,k1+w,2db+2,3y,2p+v,ff+3,30+1,n9x+3,2+9,x+1,29+1,7l,4,5,q+1,6,48+1,r+h,e,13+7,q+a,1b+2,1d,3+3,3+1,14,1w+5,3+1,3+1,d,9,1c,1g,2+2,3+1,6+1,2,17+1,9,6n,3,5,fn5,ki+f,h+f,r2,6b,46+4,1af+2,2+1,6+3,15+2,5,4m+1,fy+3,as+1,4a+a,4x,1j+e,1l+2,1e+3,3+1,1y+2,11+4,2+7,1r,d+1,1h+8,b+3,3,2o+2,3,2+1,7,4h,4+7,m+1,1m+1,4,12+6,4+4,5g+7,3+2,2,o,2d+5,2,5+1,2+1,6n+3,7+1,2+1,s+1,2e+7,3,2+1,2z,2,3+5,2,2u+2,3+3,2+4,78+8,2+1,75+1,2,5,41+3,3+1,5,x+5,3+1,15+5,3+3,9,a+5,3+2,1b+c,2+1,bb+6,2+5,2d+l,3+6,2+1,2+1,3f+5,4,2+1,2+6,2,21+1,4,2,9o+1,f0c+4,1o+6,t5,1s+3,2a,f5l+1,43t+2,i+7,3+6,v+3,45+2,1j0+1i,5+1d,9,f,n+4,2+e,11t+6,2+g,3+6,2+1,2+4,7a+6,c6+3,15t+6,32+6,gzhy+6n\",\n \"AL\": \"16w,3,2,e+1b,z+2,2+2s,g+1,8+1,b+m,2+t,s+2i,c+e,4h+f,1d+1e,1bwe+dp,3+3z,x+c,2+1,35+3y,2rm+z,5+7,b+5,dt+l,c+u,17nl+27,1t+27,4x+6n,3+d\",\n \"LRO\": \"6ct\",\n \"RLO\": \"6cu\",\n \"LRE\": \"6cq\",\n \"RLE\": \"6cr\",\n \"PDF\": \"6cs\",\n \"LRI\": \"6ee\",\n \"RLI\": \"6ef\",\n \"FSI\": \"6eg\",\n \"PDI\": \"6eh\"\n };\n\n var TYPES = {};\n var TYPES_TO_NAMES = {};\n TYPES.L = 1; //L is the default\n TYPES_TO_NAMES[1] = 'L';\n Object.keys(DATA).forEach(function (type, i) {\n TYPES[type] = 1 << (i + 1);\n TYPES_TO_NAMES[TYPES[type]] = type;\n });\n Object.freeze(TYPES);\n\n var ISOLATE_INIT_TYPES = TYPES.LRI | TYPES.RLI | TYPES.FSI;\n var STRONG_TYPES = TYPES.L | TYPES.R | TYPES.AL;\n var NEUTRAL_ISOLATE_TYPES = TYPES.B | TYPES.S | TYPES.WS | TYPES.ON | TYPES.FSI | TYPES.LRI | TYPES.RLI | TYPES.PDI;\n var BN_LIKE_TYPES = TYPES.BN | TYPES.RLE | TYPES.LRE | TYPES.RLO | TYPES.LRO | TYPES.PDF;\n var TRAILING_TYPES = TYPES.S | TYPES.WS | TYPES.B | ISOLATE_INIT_TYPES | TYPES.PDI | BN_LIKE_TYPES;\n\n var map = null;\n\n function parseData () {\n if (!map) {\n //const start = performance.now()\n map = new Map();\n var loop = function ( type ) {\n if (DATA.hasOwnProperty(type)) {\n var lastCode = 0;\n DATA[type].split(',').forEach(function (range) {\n var ref = range.split('+');\n var skip = ref[0];\n var step = ref[1];\n skip = parseInt(skip, 36);\n step = step ? parseInt(step, 36) : 0;\n map.set(lastCode += skip, TYPES[type]);\n for (var i = 0; i < step; i++) {\n map.set(++lastCode, TYPES[type]);\n }\n });\n }\n };\n\n for (var type in DATA) loop( type );\n //console.log(`char types parsed in ${performance.now() - start}ms`)\n }\n }\n\n /**\n * @param {string} char\n * @return {number}\n */\n function getBidiCharType (char) {\n parseData();\n return map.get(char.codePointAt(0)) || TYPES.L\n }\n\n function getBidiCharTypeName(char) {\n return TYPES_TO_NAMES[getBidiCharType(char)]\n }\n\n // Bidi bracket pairs data, auto generated\n var data$1 = {\n \"pairs\": \"14>1,1e>2,u>2,2wt>1,1>1,1ge>1,1wp>1,1j>1,f>1,hm>1,1>1,u>1,u6>1,1>1,+5,28>1,w>1,1>1,+3,b8>1,1>1,+3,1>3,-1>-1,3>1,1>1,+2,1s>1,1>1,x>1,th>1,1>1,+2,db>1,1>1,+3,3>1,1>1,+2,14qm>1,1>1,+1,4q>1,1e>2,u>2,2>1,+1\",\n \"canonical\": \"6f1>-6dx,6dy>-6dx,6ec>-6ed,6ee>-6ed,6ww>2jj,-2ji>2jj,14r4>-1e7l,1e7m>-1e7l,1e7m>-1e5c,1e5d>-1e5b,1e5c>-14qx,14qy>-14qx,14vn>-1ecg,1ech>-1ecg,1edu>-1ecg,1eci>-1ecg,1eda>-1ecg,1eci>-1ecg,1eci>-168q,168r>-168q,168s>-14ye,14yf>-14ye\"\n };\n\n /**\n * Parses an string that holds encoded codepoint mappings, e.g. for bracket pairs or\n * mirroring characters, as encoded by scripts/generateBidiData.js. Returns an object\n * holding the `map`, and optionally a `reverseMap` if `includeReverse:true`.\n * @param {string} encodedString\n * @param {boolean} includeReverse - true if you want reverseMap in the output\n * @return {{map: Map, reverseMap?: Map}}\n */\n function parseCharacterMap (encodedString, includeReverse) {\n var radix = 36;\n var lastCode = 0;\n var map = new Map();\n var reverseMap = includeReverse && new Map();\n var prevPair;\n encodedString.split(',').forEach(function visit(entry) {\n if (entry.indexOf('+') !== -1) {\n for (var i = +entry; i--;) {\n visit(prevPair);\n }\n } else {\n prevPair = entry;\n var ref = entry.split('>');\n var a = ref[0];\n var b = ref[1];\n a = String.fromCodePoint(lastCode += parseInt(a, radix));\n b = String.fromCodePoint(lastCode += parseInt(b, radix));\n map.set(a, b);\n includeReverse && reverseMap.set(b, a);\n }\n });\n return { map: map, reverseMap: reverseMap }\n }\n\n var openToClose, closeToOpen, canonical;\n\n function parse$1 () {\n if (!openToClose) {\n //const start = performance.now()\n var ref = parseCharacterMap(data$1.pairs, true);\n var map = ref.map;\n var reverseMap = ref.reverseMap;\n openToClose = map;\n closeToOpen = reverseMap;\n canonical = parseCharacterMap(data$1.canonical, false).map;\n //console.log(`brackets parsed in ${performance.now() - start}ms`)\n }\n }\n\n function openingToClosingBracket (char) {\n parse$1();\n return openToClose.get(char) || null\n }\n\n function closingToOpeningBracket (char) {\n parse$1();\n return closeToOpen.get(char) || null\n }\n\n function getCanonicalBracket (char) {\n parse$1();\n return canonical.get(char) || null\n }\n\n // Local type aliases\n var TYPE_L = TYPES.L;\n var TYPE_R = TYPES.R;\n var TYPE_EN = TYPES.EN;\n var TYPE_ES = TYPES.ES;\n var TYPE_ET = TYPES.ET;\n var TYPE_AN = TYPES.AN;\n var TYPE_CS = TYPES.CS;\n var TYPE_B = TYPES.B;\n var TYPE_S = TYPES.S;\n var TYPE_ON = TYPES.ON;\n var TYPE_BN = TYPES.BN;\n var TYPE_NSM = TYPES.NSM;\n var TYPE_AL = TYPES.AL;\n var TYPE_LRO = TYPES.LRO;\n var TYPE_RLO = TYPES.RLO;\n var TYPE_LRE = TYPES.LRE;\n var TYPE_RLE = TYPES.RLE;\n var TYPE_PDF = TYPES.PDF;\n var TYPE_LRI = TYPES.LRI;\n var TYPE_RLI = TYPES.RLI;\n var TYPE_FSI = TYPES.FSI;\n var TYPE_PDI = TYPES.PDI;\n\n /**\n * @typedef {object} GetEmbeddingLevelsResult\n * @property {{start, end, level}[]} paragraphs\n * @property {Uint8Array} levels\n */\n\n /**\n * This function applies the Bidirectional Algorithm to a string, returning the resolved embedding levels\n * in a single Uint8Array plus a list of objects holding each paragraph's start and end indices and resolved\n * base embedding level.\n *\n * @param {string} string - The input string\n * @param {\"ltr\"|\"rtl\"|\"auto\"} [baseDirection] - Use \"ltr\" or \"rtl\" to force a base paragraph direction,\n * otherwise a direction will be chosen automatically from each paragraph's contents.\n * @return {GetEmbeddingLevelsResult}\n */\n function getEmbeddingLevels (string, baseDirection) {\n var MAX_DEPTH = 125;\n\n // Start by mapping all characters to their unicode type, as a bitmask integer\n var charTypes = new Uint32Array(string.length);\n for (var i = 0; i < string.length; i++) {\n charTypes[i] = getBidiCharType(string[i]);\n }\n\n var charTypeCounts = new Map(); //will be cleared at start of each paragraph\n function changeCharType(i, type) {\n var oldType = charTypes[i];\n charTypes[i] = type;\n charTypeCounts.set(oldType, charTypeCounts.get(oldType) - 1);\n if (oldType & NEUTRAL_ISOLATE_TYPES) {\n charTypeCounts.set(NEUTRAL_ISOLATE_TYPES, charTypeCounts.get(NEUTRAL_ISOLATE_TYPES) - 1);\n }\n charTypeCounts.set(type, (charTypeCounts.get(type) || 0) + 1);\n if (type & NEUTRAL_ISOLATE_TYPES) {\n charTypeCounts.set(NEUTRAL_ISOLATE_TYPES, (charTypeCounts.get(NEUTRAL_ISOLATE_TYPES) || 0) + 1);\n }\n }\n\n var embedLevels = new Uint8Array(string.length);\n var isolationPairs = new Map(); //init->pdi and pdi->init\n\n // === 3.3.1 The Paragraph Level ===\n // 3.3.1 P1: Split the text into paragraphs\n var paragraphs = []; // [{start, end, level}, ...]\n var paragraph = null;\n for (var i$1 = 0; i$1 < string.length; i$1++) {\n if (!paragraph) {\n paragraphs.push(paragraph = {\n start: i$1,\n end: string.length - 1,\n // 3.3.1 P2-P3: Determine the paragraph level\n level: baseDirection === 'rtl' ? 1 : baseDirection === 'ltr' ? 0 : determineAutoEmbedLevel(i$1, false)\n });\n }\n if (charTypes[i$1] & TYPE_B) {\n paragraph.end = i$1;\n paragraph = null;\n }\n }\n\n var FORMATTING_TYPES = TYPE_RLE | TYPE_LRE | TYPE_RLO | TYPE_LRO | ISOLATE_INIT_TYPES | TYPE_PDI | TYPE_PDF | TYPE_B;\n var nextEven = function (n) { return n + ((n & 1) ? 1 : 2); };\n var nextOdd = function (n) { return n + ((n & 1) ? 2 : 1); };\n\n // Everything from here on will operate per paragraph.\n for (var paraIdx = 0; paraIdx < paragraphs.length; paraIdx++) {\n paragraph = paragraphs[paraIdx];\n var statusStack = [{\n _level: paragraph.level,\n _override: 0, //0=neutral, 1=L, 2=R\n _isolate: 0 //bool\n }];\n var stackTop = (void 0);\n var overflowIsolateCount = 0;\n var overflowEmbeddingCount = 0;\n var validIsolateCount = 0;\n charTypeCounts.clear();\n\n // === 3.3.2 Explicit Levels and Directions ===\n for (var i$2 = paragraph.start; i$2 <= paragraph.end; i$2++) {\n var charType = charTypes[i$2];\n stackTop = statusStack[statusStack.length - 1];\n\n // Set initial counts\n charTypeCounts.set(charType, (charTypeCounts.get(charType) || 0) + 1);\n if (charType & NEUTRAL_ISOLATE_TYPES) {\n charTypeCounts.set(NEUTRAL_ISOLATE_TYPES, (charTypeCounts.get(NEUTRAL_ISOLATE_TYPES) || 0) + 1);\n }\n\n // Explicit Embeddings: 3.3.2 X2 - X3\n if (charType & FORMATTING_TYPES) { //prefilter all formatters\n if (charType & (TYPE_RLE | TYPE_LRE)) {\n embedLevels[i$2] = stackTop._level; // 5.2\n var level = (charType === TYPE_RLE ? nextOdd : nextEven)(stackTop._level);\n if (level <= MAX_DEPTH && !overflowIsolateCount && !overflowEmbeddingCount) {\n statusStack.push({\n _level: level,\n _override: 0,\n _isolate: 0\n });\n } else if (!overflowIsolateCount) {\n overflowEmbeddingCount++;\n }\n }\n\n // Explicit Overrides: 3.3.2 X4 - X5\n else if (charType & (TYPE_RLO | TYPE_LRO)) {\n embedLevels[i$2] = stackTop._level; // 5.2\n var level$1 = (charType === TYPE_RLO ? nextOdd : nextEven)(stackTop._level);\n if (level$1 <= MAX_DEPTH && !overflowIsolateCount && !overflowEmbeddingCount) {\n statusStack.push({\n _level: level$1,\n _override: (charType & TYPE_RLO) ? TYPE_R : TYPE_L,\n _isolate: 0\n });\n } else if (!overflowIsolateCount) {\n overflowEmbeddingCount++;\n }\n }\n\n // Isolates: 3.3.2 X5a - X5c\n else if (charType & ISOLATE_INIT_TYPES) {\n // X5c - FSI becomes either RLI or LRI\n if (charType & TYPE_FSI) {\n charType = determineAutoEmbedLevel(i$2 + 1, true) === 1 ? TYPE_RLI : TYPE_LRI;\n }\n\n embedLevels[i$2] = stackTop._level;\n if (stackTop._override) {\n changeCharType(i$2, stackTop._override);\n }\n var level$2 = (charType === TYPE_RLI ? nextOdd : nextEven)(stackTop._level);\n if (level$2 <= MAX_DEPTH && overflowIsolateCount === 0 && overflowEmbeddingCount === 0) {\n validIsolateCount++;\n statusStack.push({\n _level: level$2,\n _override: 0,\n _isolate: 1,\n _isolInitIndex: i$2\n });\n } else {\n overflowIsolateCount++;\n }\n }\n\n // Terminating Isolates: 3.3.2 X6a\n else if (charType & TYPE_PDI) {\n if (overflowIsolateCount > 0) {\n overflowIsolateCount--;\n } else if (validIsolateCount > 0) {\n overflowEmbeddingCount = 0;\n while (!statusStack[statusStack.length - 1]._isolate) {\n statusStack.pop();\n }\n // Add to isolation pairs bidirectional mapping:\n var isolInitIndex = statusStack[statusStack.length - 1]._isolInitIndex;\n if (isolInitIndex != null) {\n isolationPairs.set(isolInitIndex, i$2);\n isolationPairs.set(i$2, isolInitIndex);\n }\n statusStack.pop();\n validIsolateCount--;\n }\n stackTop = statusStack[statusStack.length - 1];\n embedLevels[i$2] = stackTop._level;\n if (stackTop._override) {\n changeCharType(i$2, stackTop._override);\n }\n }\n\n\n // Terminating Embeddings and Overrides: 3.3.2 X7\n else if (charType & TYPE_PDF) {\n if (overflowIsolateCount === 0) {\n if (overflowEmbeddingCount > 0) {\n overflowEmbeddingCount--;\n } else if (!stackTop._isolate && statusStack.length > 1) {\n statusStack.pop();\n stackTop = statusStack[statusStack.length - 1];\n }\n }\n embedLevels[i$2] = stackTop._level; // 5.2\n }\n\n // End of Paragraph: 3.3.2 X8\n else if (charType & TYPE_B) {\n embedLevels[i$2] = paragraph.level;\n }\n }\n\n // Non-formatting characters: 3.3.2 X6\n else {\n embedLevels[i$2] = stackTop._level;\n // NOTE: This exclusion of BN seems to go against what section 5.2 says, but is required for test passage\n if (stackTop._override && charType !== TYPE_BN) {\n changeCharType(i$2, stackTop._override);\n }\n }\n }\n\n // === 3.3.3 Preparations for Implicit Processing ===\n\n // Remove all RLE, LRE, RLO, LRO, PDF, and BN characters: 3.3.3 X9\n // Note: Due to section 5.2, we won't remove them, but we'll use the BN_LIKE_TYPES bitset to\n // easily ignore them all from here on out.\n\n // 3.3.3 X10\n // Compute the set of isolating run sequences as specified by BD13\n var levelRuns = [];\n var currentRun = null;\n for (var i$3 = paragraph.start; i$3 <= paragraph.end; i$3++) {\n var charType$1 = charTypes[i$3];\n if (!(charType$1 & BN_LIKE_TYPES)) {\n var lvl = embedLevels[i$3];\n var isIsolInit = charType$1 & ISOLATE_INIT_TYPES;\n var isPDI = charType$1 === TYPE_PDI;\n if (currentRun && lvl === currentRun._level) {\n currentRun._end = i$3;\n currentRun._endsWithIsolInit = isIsolInit;\n } else {\n levelRuns.push(currentRun = {\n _start: i$3,\n _end: i$3,\n _level: lvl,\n _startsWithPDI: isPDI,\n _endsWithIsolInit: isIsolInit\n });\n }\n }\n }\n var isolatingRunSeqs = []; // [{seqIndices: [], sosType: L|R, eosType: L|R}]\n for (var runIdx = 0; runIdx < levelRuns.length; runIdx++) {\n var run = levelRuns[runIdx];\n if (!run._startsWithPDI || (run._startsWithPDI && !isolationPairs.has(run._start))) {\n var seqRuns = [currentRun = run];\n for (var pdiIndex = (void 0); currentRun && currentRun._endsWithIsolInit && (pdiIndex = isolationPairs.get(currentRun._end)) != null;) {\n for (var i$4 = runIdx + 1; i$4 < levelRuns.length; i$4++) {\n if (levelRuns[i$4]._start === pdiIndex) {\n seqRuns.push(currentRun = levelRuns[i$4]);\n break\n }\n }\n }\n // build flat list of indices across all runs:\n var seqIndices = [];\n for (var i$5 = 0; i$5 < seqRuns.length; i$5++) {\n var run$1 = seqRuns[i$5];\n for (var j = run$1._start; j <= run$1._end; j++) {\n seqIndices.push(j);\n }\n }\n // determine the sos/eos types:\n var firstLevel = embedLevels[seqIndices[0]];\n var prevLevel = paragraph.level;\n for (var i$6 = seqIndices[0] - 1; i$6 >= 0; i$6--) {\n if (!(charTypes[i$6] & BN_LIKE_TYPES)) { //5.2\n prevLevel = embedLevels[i$6];\n break\n }\n }\n var lastIndex = seqIndices[seqIndices.length - 1];\n var lastLevel = embedLevels[lastIndex];\n var nextLevel = paragraph.level;\n if (!(charTypes[lastIndex] & ISOLATE_INIT_TYPES)) {\n for (var i$7 = lastIndex + 1; i$7 <= paragraph.end; i$7++) {\n if (!(charTypes[i$7] & BN_LIKE_TYPES)) { //5.2\n nextLevel = embedLevels[i$7];\n break\n }\n }\n }\n isolatingRunSeqs.push({\n _seqIndices: seqIndices,\n _sosType: Math.max(prevLevel, firstLevel) % 2 ? TYPE_R : TYPE_L,\n _eosType: Math.max(nextLevel, lastLevel) % 2 ? TYPE_R : TYPE_L\n });\n }\n }\n\n // The next steps are done per isolating run sequence\n for (var seqIdx = 0; seqIdx < isolatingRunSeqs.length; seqIdx++) {\n var ref = isolatingRunSeqs[seqIdx];\n var seqIndices$1 = ref._seqIndices;\n var sosType = ref._sosType;\n var eosType = ref._eosType;\n /**\n * All the level runs in an isolating run sequence have the same embedding level.\n * \n * DO NOT change any `embedLevels[i]` within the current scope.\n */\n var embedDirection = ((embedLevels[seqIndices$1[0]]) & 1) ? TYPE_R : TYPE_L;\n\n // === 3.3.4 Resolving Weak Types ===\n\n // W1 + 5.2. Search backward from each NSM to the first character in the isolating run sequence whose\n // bidirectional type is not BN, and set the NSM to ON if it is an isolate initiator or PDI, and to its\n // type otherwise. If the NSM is the first non-BN character, change the NSM to the type of sos.\n if (charTypeCounts.get(TYPE_NSM)) {\n for (var si = 0; si < seqIndices$1.length; si++) {\n var i$8 = seqIndices$1[si];\n if (charTypes[i$8] & TYPE_NSM) {\n var prevType = sosType;\n for (var sj = si - 1; sj >= 0; sj--) {\n if (!(charTypes[seqIndices$1[sj]] & BN_LIKE_TYPES)) { //5.2 scan back to first non-BN\n prevType = charTypes[seqIndices$1[sj]];\n break\n }\n }\n changeCharType(i$8, (prevType & (ISOLATE_INIT_TYPES | TYPE_PDI)) ? TYPE_ON : prevType);\n }\n }\n }\n\n // W2. Search backward from each instance of a European number until the first strong type (R, L, AL, or sos)\n // is found. If an AL is found, change the type of the European number to Arabic number.\n if (charTypeCounts.get(TYPE_EN)) {\n for (var si$1 = 0; si$1 < seqIndices$1.length; si$1++) {\n var i$9 = seqIndices$1[si$1];\n if (charTypes[i$9] & TYPE_EN) {\n for (var sj$1 = si$1 - 1; sj$1 >= -1; sj$1--) {\n var prevCharType = sj$1 === -1 ? sosType : charTypes[seqIndices$1[sj$1]];\n if (prevCharType & STRONG_TYPES) {\n if (prevCharType === TYPE_AL) {\n changeCharType(i$9, TYPE_AN);\n }\n break\n }\n }\n }\n }\n }\n\n // W3. Change all ALs to R\n if (charTypeCounts.get(TYPE_AL)) {\n for (var si$2 = 0; si$2 < seqIndices$1.length; si$2++) {\n var i$10 = seqIndices$1[si$2];\n if (charTypes[i$10] & TYPE_AL) {\n changeCharType(i$10, TYPE_R);\n }\n }\n }\n\n // W4. A single European separator between two European numbers changes to a European number. A single common\n // separator between two numbers of the same type changes to that type.\n if (charTypeCounts.get(TYPE_ES) || charTypeCounts.get(TYPE_CS)) {\n for (var si$3 = 1; si$3 < seqIndices$1.length - 1; si$3++) {\n var i$11 = seqIndices$1[si$3];\n if (charTypes[i$11] & (TYPE_ES | TYPE_CS)) {\n var prevType$1 = 0, nextType = 0;\n for (var sj$2 = si$3 - 1; sj$2 >= 0; sj$2--) {\n prevType$1 = charTypes[seqIndices$1[sj$2]];\n if (!(prevType$1 & BN_LIKE_TYPES)) { //5.2\n break\n }\n }\n for (var sj$3 = si$3 + 1; sj$3 < seqIndices$1.length; sj$3++) {\n nextType = charTypes[seqIndices$1[sj$3]];\n if (!(nextType & BN_LIKE_TYPES)) { //5.2\n break\n }\n }\n if (prevType$1 === nextType && (charTypes[i$11] === TYPE_ES ? prevType$1 === TYPE_EN : (prevType$1 & (TYPE_EN | TYPE_AN)))) {\n changeCharType(i$11, prevType$1);\n }\n }\n }\n }\n\n // W5. A sequence of European terminators adjacent to European numbers changes to all European numbers.\n if (charTypeCounts.get(TYPE_EN)) {\n for (var si$4 = 0; si$4 < seqIndices$1.length; si$4++) {\n var i$12 = seqIndices$1[si$4];\n if (charTypes[i$12] & TYPE_EN) {\n for (var sj$4 = si$4 - 1; sj$4 >= 0 && (charTypes[seqIndices$1[sj$4]] & (TYPE_ET | BN_LIKE_TYPES)); sj$4--) {\n changeCharType(seqIndices$1[sj$4], TYPE_EN);\n }\n for (si$4++; si$4 < seqIndices$1.length && (charTypes[seqIndices$1[si$4]] & (TYPE_ET | BN_LIKE_TYPES | TYPE_EN)); si$4++) {\n if (charTypes[seqIndices$1[si$4]] !== TYPE_EN) {\n changeCharType(seqIndices$1[si$4], TYPE_EN);\n }\n }\n }\n }\n }\n\n // W6. Otherwise, separators and terminators change to Other Neutral.\n if (charTypeCounts.get(TYPE_ET) || charTypeCounts.get(TYPE_ES) || charTypeCounts.get(TYPE_CS)) {\n for (var si$5 = 0; si$5 < seqIndices$1.length; si$5++) {\n var i$13 = seqIndices$1[si$5];\n if (charTypes[i$13] & (TYPE_ET | TYPE_ES | TYPE_CS)) {\n changeCharType(i$13, TYPE_ON);\n // 5.2 transform adjacent BNs too:\n for (var sj$5 = si$5 - 1; sj$5 >= 0 && (charTypes[seqIndices$1[sj$5]] & BN_LIKE_TYPES); sj$5--) {\n changeCharType(seqIndices$1[sj$5], TYPE_ON);\n }\n for (var sj$6 = si$5 + 1; sj$6 < seqIndices$1.length && (charTypes[seqIndices$1[sj$6]] & BN_LIKE_TYPES); sj$6++) {\n changeCharType(seqIndices$1[sj$6], TYPE_ON);\n }\n }\n }\n }\n\n // W7. Search backward from each instance of a European number until the first strong type (R, L, or sos)\n // is found. If an L is found, then change the type of the European number to L.\n // NOTE: implemented in single forward pass for efficiency\n if (charTypeCounts.get(TYPE_EN)) {\n for (var si$6 = 0, prevStrongType = sosType; si$6 < seqIndices$1.length; si$6++) {\n var i$14 = seqIndices$1[si$6];\n var type = charTypes[i$14];\n if (type & TYPE_EN) {\n if (prevStrongType === TYPE_L) {\n changeCharType(i$14, TYPE_L);\n }\n } else if (type & STRONG_TYPES) {\n prevStrongType = type;\n }\n }\n }\n\n // === 3.3.5 Resolving Neutral and Isolate Formatting Types ===\n\n if (charTypeCounts.get(NEUTRAL_ISOLATE_TYPES)) {\n // N0. Process bracket pairs in an isolating run sequence sequentially in the logical order of the text\n // positions of the opening paired brackets using the logic given below. Within this scope, bidirectional\n // types EN and AN are treated as R.\n var R_TYPES_FOR_N_STEPS = (TYPE_R | TYPE_EN | TYPE_AN);\n var STRONG_TYPES_FOR_N_STEPS = R_TYPES_FOR_N_STEPS | TYPE_L;\n\n // * Identify the bracket pairs in the current isolating run sequence according to BD16.\n var bracketPairs = [];\n {\n var openerStack = [];\n for (var si$7 = 0; si$7 < seqIndices$1.length; si$7++) {\n // NOTE: for any potential bracket character we also test that it still carries a NI\n // type, as that may have been changed earlier. This doesn't seem to be explicitly\n // called out in the spec, but is required for passage of certain tests.\n if (charTypes[seqIndices$1[si$7]] & NEUTRAL_ISOLATE_TYPES) {\n var char = string[seqIndices$1[si$7]];\n var oppositeBracket = (void 0);\n // Opening bracket\n if (openingToClosingBracket(char) !== null) {\n if (openerStack.length < 63) {\n openerStack.push({ char: char, seqIndex: si$7 });\n } else {\n break\n }\n }\n // Closing bracket\n else if ((oppositeBracket = closingToOpeningBracket(char)) !== null) {\n for (var stackIdx = openerStack.length - 1; stackIdx >= 0; stackIdx--) {\n var stackChar = openerStack[stackIdx].char;\n if (stackChar === oppositeBracket ||\n stackChar === closingToOpeningBracket(getCanonicalBracket(char)) ||\n openingToClosingBracket(getCanonicalBracket(stackChar)) === char\n ) {\n bracketPairs.push([openerStack[stackIdx].seqIndex, si$7]);\n openerStack.length = stackIdx; //pop the matching bracket and all following\n break\n }\n }\n }\n }\n }\n bracketPairs.sort(function (a, b) { return a[0] - b[0]; });\n }\n // * For each bracket-pair element in the list of pairs of text positions\n for (var pairIdx = 0; pairIdx < bracketPairs.length; pairIdx++) {\n var ref$1 = bracketPairs[pairIdx];\n var openSeqIdx = ref$1[0];\n var closeSeqIdx = ref$1[1];\n // a. Inspect the bidirectional types of the characters enclosed within the bracket pair.\n // b. If any strong type (either L or R) matching the embedding direction is found, set the type for both\n // brackets in the pair to match the embedding direction.\n var foundStrongType = false;\n var useStrongType = 0;\n for (var si$8 = openSeqIdx + 1; si$8 < closeSeqIdx; si$8++) {\n var i$15 = seqIndices$1[si$8];\n if (charTypes[i$15] & STRONG_TYPES_FOR_N_STEPS) {\n foundStrongType = true;\n var lr = (charTypes[i$15] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;\n if (lr === embedDirection) {\n useStrongType = lr;\n break\n }\n }\n }\n // c. Otherwise, if there is a strong type it must be opposite the embedding direction. Therefore, test\n // for an established context with a preceding strong type by checking backwards before the opening paired\n // bracket until the first strong type (L, R, or sos) is found.\n // 1. If the preceding strong type is also opposite the embedding direction, context is established, so\n // set the type for both brackets in the pair to that direction.\n // 2. Otherwise set the type for both brackets in the pair to the embedding direction.\n if (foundStrongType && !useStrongType) {\n useStrongType = sosType;\n for (var si$9 = openSeqIdx - 1; si$9 >= 0; si$9--) {\n var i$16 = seqIndices$1[si$9];\n if (charTypes[i$16] & STRONG_TYPES_FOR_N_STEPS) {\n var lr$1 = (charTypes[i$16] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;\n if (lr$1 !== embedDirection) {\n useStrongType = lr$1;\n } else {\n useStrongType = embedDirection;\n }\n break\n }\n }\n }\n if (useStrongType) {\n charTypes[seqIndices$1[openSeqIdx]] = charTypes[seqIndices$1[closeSeqIdx]] = useStrongType;\n // * Any number of characters that had original bidirectional character type NSM prior to the application\n // of W1 that immediately follow a paired bracket which changed to L or R under N0 should change to match\n // the type of their preceding bracket.\n if (useStrongType !== embedDirection) {\n for (var si$10 = openSeqIdx + 1; si$10 < seqIndices$1.length; si$10++) {\n if (!(charTypes[seqIndices$1[si$10]] & BN_LIKE_TYPES)) {\n if (getBidiCharType(string[seqIndices$1[si$10]]) & TYPE_NSM) {\n charTypes[seqIndices$1[si$10]] = useStrongType;\n }\n break\n }\n }\n }\n if (useStrongType !== embedDirection) {\n for (var si$11 = closeSeqIdx + 1; si$11 < seqIndices$1.length; si$11++) {\n if (!(charTypes[seqIndices$1[si$11]] & BN_LIKE_TYPES)) {\n if (getBidiCharType(string[seqIndices$1[si$11]]) & TYPE_NSM) {\n charTypes[seqIndices$1[si$11]] = useStrongType;\n }\n break\n }\n }\n }\n }\n }\n\n // N1. A sequence of NIs takes the direction of the surrounding strong text if the text on both sides has the\n // same direction.\n // N2. Any remaining NIs take the embedding direction.\n for (var si$12 = 0; si$12 < seqIndices$1.length; si$12++) {\n if (charTypes[seqIndices$1[si$12]] & NEUTRAL_ISOLATE_TYPES) {\n var niRunStart = si$12, niRunEnd = si$12;\n var prevType$2 = sosType; //si === 0 ? sosType : (charTypes[seqIndices[si - 1]] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L\n for (var si2 = si$12 - 1; si2 >= 0; si2--) {\n if (charTypes[seqIndices$1[si2]] & BN_LIKE_TYPES) {\n niRunStart = si2; //5.2 treat BNs adjacent to NIs as NIs\n } else {\n prevType$2 = (charTypes[seqIndices$1[si2]] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;\n break\n }\n }\n var nextType$1 = eosType;\n for (var si2$1 = si$12 + 1; si2$1 < seqIndices$1.length; si2$1++) {\n if (charTypes[seqIndices$1[si2$1]] & (NEUTRAL_ISOLATE_TYPES | BN_LIKE_TYPES)) {\n niRunEnd = si2$1;\n } else {\n nextType$1 = (charTypes[seqIndices$1[si2$1]] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;\n break\n }\n }\n for (var sj$7 = niRunStart; sj$7 <= niRunEnd; sj$7++) {\n charTypes[seqIndices$1[sj$7]] = prevType$2 === nextType$1 ? prevType$2 : embedDirection;\n }\n si$12 = niRunEnd;\n }\n }\n }\n }\n\n // === 3.3.6 Resolving Implicit Levels ===\n\n for (var i$17 = paragraph.start; i$17 <= paragraph.end; i$17++) {\n var level$3 = embedLevels[i$17];\n var type$1 = charTypes[i$17];\n // I2. For all characters with an odd (right-to-left) embedding level, those of type L, EN or AN go up one level.\n if (level$3 & 1) {\n if (type$1 & (TYPE_L | TYPE_EN | TYPE_AN)) {\n embedLevels[i$17]++;\n }\n }\n // I1. For all characters with an even (left-to-right) embedding level, those of type R go up one level\n // and those of type AN or EN go up two levels.\n else {\n if (type$1 & TYPE_R) {\n embedLevels[i$17]++;\n } else if (type$1 & (TYPE_AN | TYPE_EN)) {\n embedLevels[i$17] += 2;\n }\n }\n\n // 5.2: Resolve any LRE, RLE, LRO, RLO, PDF, or BN to the level of the preceding character if there is one,\n // and otherwise to the base level.\n if (type$1 & BN_LIKE_TYPES) {\n embedLevels[i$17] = i$17 === 0 ? paragraph.level : embedLevels[i$17 - 1];\n }\n\n // 3.4 L1.1-4: Reset the embedding level of segment/paragraph separators, and any sequence of whitespace or\n // isolate formatting characters preceding them or the end of the paragraph, to the paragraph level.\n // NOTE: this will also need to be applied to each individual line ending after line wrapping occurs.\n if (i$17 === paragraph.end || getBidiCharType(string[i$17]) & (TYPE_S | TYPE_B)) {\n for (var j$1 = i$17; j$1 >= 0 && (getBidiCharType(string[j$1]) & TRAILING_TYPES); j$1--) {\n embedLevels[j$1] = paragraph.level;\n }\n }\n }\n }\n\n // DONE! The resolved levels can then be used, after line wrapping, to flip runs of characters\n // according to section 3.4 Reordering Resolved Levels\n return {\n levels: embedLevels,\n paragraphs: paragraphs\n }\n\n function determineAutoEmbedLevel (start, isFSI) {\n // 3.3.1 P2 - P3\n for (var i = start; i < string.length; i++) {\n var charType = charTypes[i];\n if (charType & (TYPE_R | TYPE_AL)) {\n return 1\n }\n if ((charType & (TYPE_B | TYPE_L)) || (isFSI && charType === TYPE_PDI)) {\n return 0\n }\n if (charType & ISOLATE_INIT_TYPES) {\n var pdi = indexOfMatchingPDI(i);\n i = pdi === -1 ? string.length : pdi;\n }\n }\n return 0\n }\n\n function indexOfMatchingPDI (isolateStart) {\n // 3.1.2 BD9\n var isolationLevel = 1;\n for (var i = isolateStart + 1; i < string.length; i++) {\n var charType = charTypes[i];\n if (charType & TYPE_B) {\n break\n }\n if (charType & TYPE_PDI) {\n if (--isolationLevel === 0) {\n return i\n }\n } else if (charType & ISOLATE_INIT_TYPES) {\n isolationLevel++;\n }\n }\n return -1\n }\n }\n\n // Bidi mirrored chars data, auto generated\n var data = \"14>1,j>2,t>2,u>2,1a>g,2v3>1,1>1,1ge>1,1wd>1,b>1,1j>1,f>1,ai>3,-2>3,+1,8>1k0,-1jq>1y7,-1y6>1hf,-1he>1h6,-1h5>1ha,-1h8>1qi,-1pu>1,6>3u,-3s>7,6>1,1>1,f>1,1>1,+2,3>1,1>1,+13,4>1,1>1,6>1eo,-1ee>1,3>1mg,-1me>1mk,-1mj>1mi,-1mg>1mi,-1md>1,1>1,+2,1>10k,-103>1,1>1,4>1,5>1,1>1,+10,3>1,1>8,-7>8,+1,-6>7,+1,a>1,1>1,u>1,u6>1,1>1,+5,26>1,1>1,2>1,2>2,8>1,7>1,4>1,1>1,+5,b8>1,1>1,+3,1>3,-2>1,2>1,1>1,+2,c>1,3>1,1>1,+2,h>1,3>1,a>1,1>1,2>1,3>1,1>1,d>1,f>1,3>1,1a>1,1>1,6>1,7>1,13>1,k>1,1>1,+19,4>1,1>1,+2,2>1,1>1,+18,m>1,a>1,1>1,lk>1,1>1,4>1,2>1,f>1,3>1,1>1,+3,db>1,1>1,+3,3>1,1>1,+2,14qm>1,1>1,+1,6>1,4j>1,j>2,t>2,u>2,2>1,+1\";\n\n var mirrorMap;\n\n function parse () {\n if (!mirrorMap) {\n //const start = performance.now()\n var ref = parseCharacterMap(data, true);\n var map = ref.map;\n var reverseMap = ref.reverseMap;\n // Combine both maps into one\n reverseMap.forEach(function (value, key) {\n map.set(key, value);\n });\n mirrorMap = map;\n //console.log(`mirrored chars parsed in ${performance.now() - start}ms`)\n }\n }\n\n function getMirroredCharacter (char) {\n parse();\n return mirrorMap.get(char) || null\n }\n\n /**\n * Given a string and its resolved embedding levels, build a map of indices to replacement chars\n * for any characters in right-to-left segments that have defined mirrored characters.\n * @param string\n * @param embeddingLevels\n * @param [start]\n * @param [end]\n * @return {Map}\n */\n function getMirroredCharactersMap(string, embeddingLevels, start, end) {\n var strLen = string.length;\n start = Math.max(0, start == null ? 0 : +start);\n end = Math.min(strLen - 1, end == null ? strLen - 1 : +end);\n\n var map = new Map();\n for (var i = start; i <= end; i++) {\n if (embeddingLevels[i] & 1) { //only odd (rtl) levels\n var mirror = getMirroredCharacter(string[i]);\n if (mirror !== null) {\n map.set(i, mirror);\n }\n }\n }\n return map\n }\n\n /**\n * Given a start and end denoting a single line within a string, and a set of precalculated\n * bidi embedding levels, produce a list of segments whose ordering should be flipped, in sequence.\n * @param {string} string - the full input string\n * @param {GetEmbeddingLevelsResult} embeddingLevelsResult - the result object from getEmbeddingLevels\n * @param {number} [start] - first character in a subset of the full string\n * @param {number} [end] - last character in a subset of the full string\n * @return {number[][]} - the list of start/end segments that should be flipped, in order.\n */\n function getReorderSegments(string, embeddingLevelsResult, start, end) {\n var strLen = string.length;\n start = Math.max(0, start == null ? 0 : +start);\n end = Math.min(strLen - 1, end == null ? strLen - 1 : +end);\n\n var segments = [];\n embeddingLevelsResult.paragraphs.forEach(function (paragraph) {\n var lineStart = Math.max(start, paragraph.start);\n var lineEnd = Math.min(end, paragraph.end);\n if (lineStart < lineEnd) {\n // Local slice for mutation\n var lineLevels = embeddingLevelsResult.levels.slice(lineStart, lineEnd + 1);\n\n // 3.4 L1.4: Reset any sequence of whitespace characters and/or isolate formatting characters at the\n // end of the line to the paragraph level.\n for (var i = lineEnd; i >= lineStart && (getBidiCharType(string[i]) & TRAILING_TYPES); i--) {\n lineLevels[i] = paragraph.level;\n }\n\n // L2. From the highest level found in the text to the lowest odd level on each line, including intermediate levels\n // not actually present in the text, reverse any contiguous sequence of characters that are at that level or higher.\n var maxLevel = paragraph.level;\n var minOddLevel = Infinity;\n for (var i$1 = 0; i$1 < lineLevels.length; i$1++) {\n var level = lineLevels[i$1];\n if (level > maxLevel) { maxLevel = level; }\n if (level < minOddLevel) { minOddLevel = level | 1; }\n }\n for (var lvl = maxLevel; lvl >= minOddLevel; lvl--) {\n for (var i$2 = 0; i$2 < lineLevels.length; i$2++) {\n if (lineLevels[i$2] >= lvl) {\n var segStart = i$2;\n while (i$2 + 1 < lineLevels.length && lineLevels[i$2 + 1] >= lvl) {\n i$2++;\n }\n if (i$2 > segStart) {\n segments.push([segStart + lineStart, i$2 + lineStart]);\n }\n }\n }\n }\n }\n });\n return segments\n }\n\n /**\n * @param {string} string\n * @param {GetEmbeddingLevelsResult} embedLevelsResult\n * @param {number} [start]\n * @param {number} [end]\n * @return {string} the new string with bidi segments reordered\n */\n function getReorderedString(string, embedLevelsResult, start, end) {\n var indices = getReorderedIndices(string, embedLevelsResult, start, end);\n var chars = [].concat( string );\n indices.forEach(function (charIndex, i) {\n chars[i] = (\n (embedLevelsResult.levels[charIndex] & 1) ? getMirroredCharacter(string[charIndex]) : null\n ) || string[charIndex];\n });\n return chars.join('')\n }\n\n /**\n * @param {string} string\n * @param {GetEmbeddingLevelsResult} embedLevelsResult\n * @param {number} [start]\n * @param {number} [end]\n * @return {number[]} an array with character indices in their new bidi order\n */\n function getReorderedIndices(string, embedLevelsResult, start, end) {\n var segments = getReorderSegments(string, embedLevelsResult, start, end);\n // Fill an array with indices\n var indices = [];\n for (var i = 0; i < string.length; i++) {\n indices[i] = i;\n }\n // Reverse each segment in order\n segments.forEach(function (ref) {\n var start = ref[0];\n var end = ref[1];\n\n var slice = indices.slice(start, end + 1);\n for (var i = slice.length; i--;) {\n indices[end - i] = slice[i];\n }\n });\n return indices\n }\n\n exports.closingToOpeningBracket = closingToOpeningBracket;\n exports.getBidiCharType = getBidiCharType;\n exports.getBidiCharTypeName = getBidiCharTypeName;\n exports.getCanonicalBracket = getCanonicalBracket;\n exports.getEmbeddingLevels = getEmbeddingLevels;\n exports.getMirroredCharacter = getMirroredCharacter;\n exports.getMirroredCharactersMap = getMirroredCharactersMap;\n exports.getReorderSegments = getReorderSegments;\n exports.getReorderedIndices = getReorderedIndices;\n exports.getReorderedString = getReorderedString;\n exports.openingToClosingBracket = openingToClosingBracket;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n return exports;\n\n}({}));\nreturn bidi}\n\nexport default bidiFactory;\n","import { ShaderChunk, UniformsUtils, MeshDepthMaterial, RGBADepthPacking, MeshDistanceMaterial, ShaderLib, Matrix4, Vector3, Mesh, CylinderGeometry, Vector2, MeshStandardMaterial, DoubleSide } from 'three';\n\n/**\n * Regular expression for matching the `void main() {` opener line in GLSL.\n * @type {RegExp}\n */\nconst voidMainRegExp = /\\bvoid\\s+main\\s*\\(\\s*\\)\\s*{/g;\n\n/**\n * Recursively expands all `#include ` statements within string of shader code.\n * Copied from three's WebGLProgram#parseIncludes for external use.\n *\n * @param {string} source - The GLSL source code to evaluate\n * @return {string} The GLSL code with all includes expanded\n */\nfunction expandShaderIncludes( source ) {\n const pattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;\n function replace(match, include) {\n let chunk = ShaderChunk[include];\n return chunk ? expandShaderIncludes(chunk) : match\n }\n return source.replace( pattern, replace )\n}\n\n/*\n * This is a direct copy of MathUtils.generateUUID from Three.js, to preserve compatibility with three\n * versions before 0.113.0 as it was changed from Math to MathUtils in that version.\n * https://github.com/mrdoob/three.js/blob/dd8b5aa3b270c17096b90945cd2d6d1b13aaec53/src/math/MathUtils.js#L16\n */\n\nconst _lut = [];\n\nfor (let i = 0; i < 256; i++) {\n _lut[i] = (i < 16 ? '0' : '') + (i).toString(16);\n}\n\nfunction generateUUID() {\n\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\n\n const d0 = Math.random() * 0xffffffff | 0;\n const d1 = Math.random() * 0xffffffff | 0;\n const d2 = Math.random() * 0xffffffff | 0;\n const d3 = Math.random() * 0xffffffff | 0;\n const uuid = _lut[d0 & 0xff] + _lut[d0 >> 8 & 0xff] + _lut[d0 >> 16 & 0xff] + _lut[d0 >> 24 & 0xff] + '-' +\n _lut[d1 & 0xff] + _lut[d1 >> 8 & 0xff] + '-' + _lut[d1 >> 16 & 0x0f | 0x40] + _lut[d1 >> 24 & 0xff] + '-' +\n _lut[d2 & 0x3f | 0x80] + _lut[d2 >> 8 & 0xff] + '-' + _lut[d2 >> 16 & 0xff] + _lut[d2 >> 24 & 0xff] +\n _lut[d3 & 0xff] + _lut[d3 >> 8 & 0xff] + _lut[d3 >> 16 & 0xff] + _lut[d3 >> 24 & 0xff];\n\n // .toUpperCase() here flattens concatenated strings to save heap memory space.\n return uuid.toUpperCase()\n\n}\n\n// Local assign polyfill to avoid importing troika-core\nconst assign = Object.assign || function(/*target, ...sources*/) {\n let target = arguments[0];\n for (let i = 1, len = arguments.length; i < len; i++) {\n let source = arguments[i];\n if (source) {\n for (let prop in source) {\n if (Object.prototype.hasOwnProperty.call(source, prop)) {\n target[prop] = source[prop];\n }\n }\n }\n }\n return target\n};\n\n\nconst epoch = Date.now();\nconst CONSTRUCTOR_CACHE = new WeakMap();\nconst SHADER_UPGRADE_CACHE = new Map();\n\n// Material ids must be integers, but we can't access the increment from Three's `Material` module,\n// so let's choose a sufficiently large starting value that should theoretically never collide.\nlet materialInstanceId = 1e10;\n\n/**\n * A utility for creating a custom shader material derived from another material's\n * shaders. This allows you to inject custom shader logic and transforms into the\n * builtin ThreeJS materials without having to recreate them from scratch.\n *\n * @param {THREE.Material} baseMaterial - the original material to derive from\n *\n * @param {Object} options - How the base material should be modified.\n * @param {Object=} options.defines - Custom `defines` for the material\n * @param {Object=} options.extensions - Custom `extensions` for the material, e.g. `{derivatives: true}`\n * @param {Object=} options.uniforms - Custom `uniforms` for use in the modified shader. These can\n * be accessed and manipulated via the resulting material's `uniforms` property, just like\n * in a ShaderMaterial. You do not need to repeat the base material's own uniforms here.\n * @param {String=} options.timeUniform - If specified, a uniform of this name will be injected into\n * both shaders, and it will automatically be updated on each render frame with a number of\n * elapsed milliseconds. The \"zero\" epoch time is not significant so don't rely on this as a\n * true calendar time.\n * @param {String=} options.vertexDefs - Custom GLSL code to inject into the vertex shader's top-level\n * definitions, above the `void main()` function.\n * @param {String=} options.vertexMainIntro - Custom GLSL code to inject at the top of the vertex\n * shader's `void main` function.\n * @param {String=} options.vertexMainOutro - Custom GLSL code to inject at the end of the vertex\n * shader's `void main` function.\n * @param {String=} options.vertexTransform - Custom GLSL code to manipulate the `position`, `normal`,\n * and/or `uv` vertex attributes. This code will be wrapped within a standalone function with\n * those attributes exposed by their normal names as read/write values.\n * @param {String=} options.fragmentDefs - Custom GLSL code to inject into the fragment shader's top-level\n * definitions, above the `void main()` function.\n * @param {String=} options.fragmentMainIntro - Custom GLSL code to inject at the top of the fragment\n * shader's `void main` function.\n * @param {String=} options.fragmentMainOutro - Custom GLSL code to inject at the end of the fragment\n * shader's `void main` function. You can manipulate `gl_FragColor` here but keep in mind it goes\n * after any of ThreeJS's color postprocessing shader chunks (tonemapping, fog, etc.), so if you\n * want those to apply to your changes use `fragmentColorTransform` instead.\n * @param {String=} options.fragmentColorTransform - Custom GLSL code to manipulate the `gl_FragColor`\n * output value. Will be injected near the end of the `void main` function, but before any\n * of ThreeJS's color postprocessing shader chunks (tonemapping, fog, etc.), and before the\n * `fragmentMainOutro`.\n * @param {function({fragmentShader: string, vertexShader:string}):\n * {fragmentShader: string, vertexShader:string}} options.customRewriter - A function\n * for performing custom rewrites of the full shader code. Useful if you need to do something\n * special that's not covered by the other builtin options. This function will be executed before\n * any other transforms are applied.\n * @param {boolean=} options.chained - Set to `true` to prototype-chain the derived material to the base\n * material, rather than the default behavior of copying it. This allows the derived material to\n * automatically pick up changes made to the base material and its properties. This can be useful\n * where the derived material is hidden from the user as an implementation detail, allowing them\n * to work with the original material like normal. But it can result in unexpected behavior if not\n * handled carefully.\n *\n * @return {THREE.Material}\n *\n * The returned material will also have two new methods, `getDepthMaterial()` and `getDistanceMaterial()`,\n * which can be called to get a variant of the derived material for use in shadow casting. If the\n * target mesh is expected to cast shadows, then you can assign these to the mesh's `customDepthMaterial`\n * (for directional and spot lights) and/or `customDistanceMaterial` (for point lights) properties to\n * allow the cast shadow to honor your derived shader's vertex transforms and discarded fragments. These\n * will also set a custom `#define IS_DEPTH_MATERIAL` or `#define IS_DISTANCE_MATERIAL` that you can look\n * for in your derived shaders with `#ifdef` to customize their behavior for the depth or distance\n * scenarios, e.g. skipping antialiasing or expensive shader logic.\n */\nfunction createDerivedMaterial(baseMaterial, options) {\n // Generate a key that is unique to the content of these `options`. We'll use this\n // throughout for caching and for generating the upgraded shader code. This increases\n // the likelihood that the resulting shaders will line up across multiple calls so\n // their GL programs can be shared and cached.\n const optionsKey = getKeyForOptions(options);\n\n // First check to see if we've already derived from this baseMaterial using this\n // unique set of options, and if so reuse the constructor to avoid some allocations.\n let ctorsByDerivation = CONSTRUCTOR_CACHE.get(baseMaterial);\n if (!ctorsByDerivation) {\n CONSTRUCTOR_CACHE.set(baseMaterial, (ctorsByDerivation = Object.create(null)));\n }\n if (ctorsByDerivation[optionsKey]) {\n return new ctorsByDerivation[optionsKey]()\n }\n\n const privateBeforeCompileProp = `_onBeforeCompile${optionsKey}`;\n\n // Private onBeforeCompile handler that injects the modified shaders and uniforms when\n // the renderer switches to this material's program\n const onBeforeCompile = function (shaderInfo, renderer) {\n baseMaterial.onBeforeCompile.call(this, shaderInfo, renderer);\n\n // Upgrade the shaders, caching the result by incoming source code\n const cacheKey = this.customProgramCacheKey() + '|' + shaderInfo.vertexShader + '|' + shaderInfo.fragmentShader;\n let upgradedShaders = SHADER_UPGRADE_CACHE[cacheKey];\n if (!upgradedShaders) {\n const upgraded = upgradeShaders(this, shaderInfo, options, optionsKey);\n upgradedShaders = SHADER_UPGRADE_CACHE[cacheKey] = upgraded;\n }\n\n // Inject upgraded shaders and uniforms into the program\n shaderInfo.vertexShader = upgradedShaders.vertexShader;\n shaderInfo.fragmentShader = upgradedShaders.fragmentShader;\n assign(shaderInfo.uniforms, this.uniforms);\n\n // Inject auto-updating time uniform if requested\n if (options.timeUniform) {\n shaderInfo.uniforms[options.timeUniform] = {\n get value() {return Date.now() - epoch}\n };\n }\n\n // Users can still add their own handlers on top of ours\n if (this[privateBeforeCompileProp]) {\n this[privateBeforeCompileProp](shaderInfo);\n }\n };\n\n const DerivedMaterial = function DerivedMaterial() {\n return derive(options.chained ? baseMaterial : baseMaterial.clone())\n };\n\n const derive = function(base) {\n // Prototype chain to the base material\n const derived = Object.create(base, descriptor);\n\n // Store the baseMaterial for reference; this is always the original even when cloning\n Object.defineProperty(derived, 'baseMaterial', { value: baseMaterial });\n\n // Needs its own ids\n Object.defineProperty(derived, 'id', { value: materialInstanceId++ });\n derived.uuid = generateUUID();\n\n // Merge uniforms, defines, and extensions\n derived.uniforms = assign({}, base.uniforms, options.uniforms);\n derived.defines = assign({}, base.defines, options.defines);\n derived.defines[`TROIKA_DERIVED_MATERIAL_${optionsKey}`] = ''; //force a program change from the base material\n derived.extensions = assign({}, base.extensions, options.extensions);\n\n // Don't inherit EventDispatcher listeners\n derived._listeners = undefined;\n\n return derived\n };\n\n const descriptor = {\n constructor: {value: DerivedMaterial},\n isDerivedMaterial: {value: true},\n\n type: {\n get: () => baseMaterial.type,\n set: (value) => {baseMaterial.type = value;}\n },\n\n isDerivedFrom: {\n writable: true,\n configurable: true,\n value: function (testMaterial) {\n const base = this.baseMaterial;\n return testMaterial === base || (base.isDerivedMaterial && base.isDerivedFrom(testMaterial)) || false\n }\n },\n\n customProgramCacheKey: {\n writable: true,\n configurable: true,\n value: function () {\n return baseMaterial.customProgramCacheKey() + '|' + optionsKey\n }\n },\n\n onBeforeCompile: {\n get() {\n return onBeforeCompile\n },\n set(fn) {\n this[privateBeforeCompileProp] = fn;\n }\n },\n\n copy: {\n writable: true,\n configurable: true,\n value: function (source) {\n baseMaterial.copy.call(this, source);\n if (!baseMaterial.isShaderMaterial && !baseMaterial.isDerivedMaterial) {\n assign(this.extensions, source.extensions);\n assign(this.defines, source.defines);\n assign(this.uniforms, UniformsUtils.clone(source.uniforms));\n }\n return this\n }\n },\n\n clone: {\n writable: true,\n configurable: true,\n value: function () {\n const newBase = new baseMaterial.constructor();\n return derive(newBase).copy(this)\n }\n },\n\n /**\n * Utility to get a MeshDepthMaterial that will honor this derived material's vertex\n * transformations and discarded fragments.\n */\n getDepthMaterial: {\n writable: true,\n configurable: true,\n value: function() {\n let depthMaterial = this._depthMaterial;\n if (!depthMaterial) {\n depthMaterial = this._depthMaterial = createDerivedMaterial(\n baseMaterial.isDerivedMaterial\n ? baseMaterial.getDepthMaterial()\n : new MeshDepthMaterial({ depthPacking: RGBADepthPacking }),\n options\n );\n depthMaterial.defines.IS_DEPTH_MATERIAL = '';\n depthMaterial.uniforms = this.uniforms; //automatically recieve same uniform values\n }\n return depthMaterial\n }\n },\n\n /**\n * Utility to get a MeshDistanceMaterial that will honor this derived material's vertex\n * transformations and discarded fragments.\n */\n getDistanceMaterial: {\n writable: true,\n configurable: true,\n value: function() {\n let distanceMaterial = this._distanceMaterial;\n if (!distanceMaterial) {\n distanceMaterial = this._distanceMaterial = createDerivedMaterial(\n baseMaterial.isDerivedMaterial\n ? baseMaterial.getDistanceMaterial()\n : new MeshDistanceMaterial(),\n options\n );\n distanceMaterial.defines.IS_DISTANCE_MATERIAL = '';\n distanceMaterial.uniforms = this.uniforms; //automatically recieve same uniform values\n }\n return distanceMaterial\n }\n },\n\n dispose: {\n writable: true,\n configurable: true,\n value() {\n const {_depthMaterial, _distanceMaterial} = this;\n if (_depthMaterial) _depthMaterial.dispose();\n if (_distanceMaterial) _distanceMaterial.dispose();\n baseMaterial.dispose.call(this);\n }\n }\n };\n\n ctorsByDerivation[optionsKey] = DerivedMaterial;\n return new DerivedMaterial()\n}\n\n\nfunction upgradeShaders(material, {vertexShader, fragmentShader}, options, key) {\n let {\n vertexDefs,\n vertexMainIntro,\n vertexMainOutro,\n vertexTransform,\n fragmentDefs,\n fragmentMainIntro,\n fragmentMainOutro,\n fragmentColorTransform,\n customRewriter,\n timeUniform\n } = options;\n\n vertexDefs = vertexDefs || '';\n vertexMainIntro = vertexMainIntro || '';\n vertexMainOutro = vertexMainOutro || '';\n fragmentDefs = fragmentDefs || '';\n fragmentMainIntro = fragmentMainIntro || '';\n fragmentMainOutro = fragmentMainOutro || '';\n\n // Expand includes if needed\n if (vertexTransform || customRewriter) {\n vertexShader = expandShaderIncludes(vertexShader);\n }\n if (fragmentColorTransform || customRewriter) {\n // We need to be able to find postprocessing chunks after include expansion in order to\n // put them after the fragmentColorTransform, so mark them with comments first. Even if\n // this particular derivation doesn't have a fragmentColorTransform, other derivations may,\n // so we still mark them.\n fragmentShader = fragmentShader.replace(\n /^[ \\t]*#include <((?:tonemapping|encodings|colorspace|fog|premultiplied_alpha|dithering)_fragment)>/gm,\n '\\n//!BEGIN_POST_CHUNK $1\\n$&\\n//!END_POST_CHUNK\\n'\n );\n fragmentShader = expandShaderIncludes(fragmentShader);\n }\n\n // Apply custom rewriter function\n if (customRewriter) {\n let res = customRewriter({vertexShader, fragmentShader});\n vertexShader = res.vertexShader;\n fragmentShader = res.fragmentShader;\n }\n\n // The fragmentColorTransform needs to go before any postprocessing chunks, so extract\n // those and re-insert them into the outro in the correct place:\n if (fragmentColorTransform) {\n let postChunks = [];\n fragmentShader = fragmentShader.replace(\n /^\\/\\/!BEGIN_POST_CHUNK[^]+?^\\/\\/!END_POST_CHUNK/gm, // [^]+? = non-greedy match of any chars including newlines\n match => {\n postChunks.push(match);\n return ''\n }\n );\n fragmentMainOutro = `${fragmentColorTransform}\\n${postChunks.join('\\n')}\\n${fragmentMainOutro}`;\n }\n\n // Inject auto-updating time uniform if requested\n if (timeUniform) {\n const code = `\\nuniform float ${timeUniform};\\n`;\n vertexDefs = code + vertexDefs;\n fragmentDefs = code + fragmentDefs;\n }\n\n // Inject a function for the vertexTransform and rename all usages of position/normal/uv\n if (vertexTransform) {\n // Hoist these defs to the very top so they work in other function defs\n vertexShader = `vec3 troika_position_${key};\nvec3 troika_normal_${key};\nvec2 troika_uv_${key};\n${vertexShader}\n`;\n vertexDefs = `${vertexDefs}\nvoid troikaVertexTransform${key}(inout vec3 position, inout vec3 normal, inout vec2 uv) {\n ${vertexTransform}\n}\n`;\n vertexMainIntro = `\ntroika_position_${key} = vec3(position);\ntroika_normal_${key} = vec3(normal);\ntroika_uv_${key} = vec2(uv);\ntroikaVertexTransform${key}(troika_position_${key}, troika_normal_${key}, troika_uv_${key});\n${vertexMainIntro}\n`;\n vertexShader = vertexShader.replace(/\\b(position|normal|uv)\\b/g, (match, match1, index, fullStr) => {\n return /\\battribute\\s+vec[23]\\s+$/.test(fullStr.substr(0, index)) ? match1 : `troika_${match1}_${key}`\n });\n\n // Three r152 introduced the MAP_UV token, replace it too if it's pointing to the main 'uv'\n // Perhaps the other textures too going forward?\n if (!(material.map && material.map.channel > 0)) {\n vertexShader = vertexShader.replace(/\\bMAP_UV\\b/g, `troika_uv_${key}`);\n }\n }\n\n // Inject defs and intro/outro snippets\n vertexShader = injectIntoShaderCode(vertexShader, key, vertexDefs, vertexMainIntro, vertexMainOutro);\n fragmentShader = injectIntoShaderCode(fragmentShader, key, fragmentDefs, fragmentMainIntro, fragmentMainOutro);\n\n return {\n vertexShader,\n fragmentShader\n }\n}\n\nfunction injectIntoShaderCode(shaderCode, id, defs, intro, outro) {\n if (intro || outro || defs) {\n shaderCode = shaderCode.replace(voidMainRegExp, `\n${defs}\nvoid troikaOrigMain${id}() {`\n );\n shaderCode += `\nvoid main() {\n ${intro}\n troikaOrigMain${id}();\n ${outro}\n}`;\n }\n return shaderCode\n}\n\n\nfunction optionsJsonReplacer(key, value) {\n return key === 'uniforms' ? undefined : typeof value === 'function' ? value.toString() : value\n}\n\nlet _idCtr = 0;\nconst optionsHashesToIds = new Map();\nfunction getKeyForOptions(options) {\n const optionsHash = JSON.stringify(options, optionsJsonReplacer);\n let id = optionsHashesToIds.get(optionsHash);\n if (id == null) {\n optionsHashesToIds.set(optionsHash, (id = ++_idCtr));\n }\n return id\n}\n\n// Copied from threejs WebGLPrograms.js so we can resolve builtin materials to their shaders\n// TODO how can we keep this from getting stale?\nconst MATERIAL_TYPES_TO_SHADERS = {\n MeshDepthMaterial: 'depth',\n MeshDistanceMaterial: 'distanceRGBA',\n MeshNormalMaterial: 'normal',\n MeshBasicMaterial: 'basic',\n MeshLambertMaterial: 'lambert',\n MeshPhongMaterial: 'phong',\n MeshToonMaterial: 'toon',\n MeshStandardMaterial: 'physical',\n MeshPhysicalMaterial: 'physical',\n MeshMatcapMaterial: 'matcap',\n LineBasicMaterial: 'basic',\n LineDashedMaterial: 'dashed',\n PointsMaterial: 'points',\n ShadowMaterial: 'shadow',\n SpriteMaterial: 'sprite'\n};\n\n/**\n * Given a Three.js `Material` instance, find the shaders/uniforms that will be\n * used to render that material.\n *\n * @param material - the Material instance\n * @return {object} - the material's shader info: `{uniforms:{}, fragmentShader:'', vertexShader:''}`\n */\nfunction getShadersForMaterial(material) {\n let builtinType = MATERIAL_TYPES_TO_SHADERS[material.type];\n return builtinType ? ShaderLib[builtinType] : material //TODO fallback for unknown type?\n}\n\n/**\n * Find all uniforms and their types within a shader code string.\n *\n * @param {string} shader - The shader code to parse\n * @return {object} mapping of uniform names to their glsl type\n */\nfunction getShaderUniformTypes(shader) {\n let uniformRE = /\\buniform\\s+(int|float|vec[234]|mat[34])\\s+([A-Za-z_][\\w]*)/g;\n let uniforms = Object.create(null);\n let match;\n while ((match = uniformRE.exec(shader)) !== null) {\n uniforms[match[2]] = match[1];\n }\n return uniforms\n}\n\n/**\n * Helper for smoothing out the `m.getInverse(x)` --> `m.copy(x).invert()` conversion\n * that happened in ThreeJS r123.\n * @param {Matrix4} srcMatrix\n * @param {Matrix4} [tgtMatrix]\n */\nfunction invertMatrix4(srcMatrix, tgtMatrix = new Matrix4()) {\n if (typeof tgtMatrix.invert === 'function') {\n tgtMatrix.copy(srcMatrix).invert();\n } else {\n tgtMatrix.getInverse(srcMatrix);\n }\n return tgtMatrix\n}\n\n/*\nInput geometry is a cylinder with r=1, height in y dimension from 0 to 1,\ndivided into a reasonable number of height segments.\n*/\n\nconst vertexDefs = `\nuniform vec3 pointA;\nuniform vec3 controlA;\nuniform vec3 controlB;\nuniform vec3 pointB;\nuniform float radius;\nvarying float bezierT;\n\nvec3 cubicBezier(vec3 p1, vec3 c1, vec3 c2, vec3 p2, float t) {\n float t2 = 1.0 - t;\n float b0 = t2 * t2 * t2;\n float b1 = 3.0 * t * t2 * t2;\n float b2 = 3.0 * t * t * t2;\n float b3 = t * t * t;\n return b0 * p1 + b1 * c1 + b2 * c2 + b3 * p2;\n}\n\nvec3 cubicBezierDerivative(vec3 p1, vec3 c1, vec3 c2, vec3 p2, float t) {\n float t2 = 1.0 - t;\n return -3.0 * p1 * t2 * t2 +\n c1 * (3.0 * t2 * t2 - 6.0 * t2 * t) +\n c2 * (6.0 * t2 * t - 3.0 * t * t) +\n 3.0 * p2 * t * t;\n}\n`;\n\nconst vertexTransform = `\nfloat t = position.y;\nbezierT = t;\nvec3 bezierCenterPos = cubicBezier(pointA, controlA, controlB, pointB, t);\nvec3 bezierDir = normalize(cubicBezierDerivative(pointA, controlA, controlB, pointB, t));\n\n// Make \"sideways\" always perpendicular to the camera ray; this ensures that any twists\n// in the cylinder occur where you won't see them: \nvec3 viewDirection = normalMatrix * vec3(0.0, 0.0, 1.0);\nif (bezierDir == viewDirection) {\n bezierDir = normalize(cubicBezierDerivative(pointA, controlA, controlB, pointB, t == 1.0 ? t - 0.0001 : t + 0.0001));\n}\nvec3 sideways = normalize(cross(bezierDir, viewDirection));\nvec3 upish = normalize(cross(sideways, bezierDir));\n\n// Build a matrix for transforming this disc in the cylinder:\nmat4 discTx;\ndiscTx[0].xyz = sideways * radius;\ndiscTx[1].xyz = bezierDir * radius;\ndiscTx[2].xyz = upish * radius;\ndiscTx[3].xyz = bezierCenterPos;\ndiscTx[3][3] = 1.0;\n\n// Apply transform, ignoring original y\nposition = (discTx * vec4(position.x, 0.0, position.z, 1.0)).xyz;\nnormal = normalize(mat3(discTx) * normal);\n`;\n\nconst fragmentDefs = `\nuniform vec3 dashing;\nvarying float bezierT;\n`;\n\nconst fragmentMainIntro = `\nif (dashing.x + dashing.y > 0.0) {\n float dashFrac = mod(bezierT - dashing.z, dashing.x + dashing.y);\n if (dashFrac > dashing.x) {\n discard;\n }\n}\n`;\n\n// Debugging: separate color for each of the 6 sides:\n// const fragmentColorTransform = `\n// float sideNum = floor(vUV.x * 6.0);\n// vec3 mixColor = sideNum < 1.0 ? vec3(1.0, 0.0, 0.0) :\n// sideNum < 2.0 ? vec3(0.0, 1.0, 1.0) :\n// sideNum < 3.0 ? vec3(1.0, 1.0, 0.0) :\n// sideNum < 4.0 ? vec3(0.0, 0.0, 1.0) :\n// sideNum < 5.0 ? vec3(0.0, 1.0, 0.0) :\n// vec3(1.0, 0.0, 1.0);\n// gl_FragColor.xyz = mix(gl_FragColor.xyz, mixColor, 0.5);\n// `\n\n\n\nfunction createBezierMeshMaterial(baseMaterial) {\n return createDerivedMaterial(\n baseMaterial,\n {\n chained: true,\n uniforms: {\n pointA: {value: new Vector3()},\n controlA: {value: new Vector3()},\n controlB: {value: new Vector3()},\n pointB: {value: new Vector3()},\n radius: {value: 0.01},\n dashing: {value: new Vector3()} //on, off, offset\n },\n vertexDefs,\n vertexTransform,\n fragmentDefs,\n fragmentMainIntro\n }\n )\n}\n\nlet geometry = null;\n\nconst defaultBaseMaterial = /*#__PURE__*/new MeshStandardMaterial({color: 0xffffff, side: DoubleSide});\n\n\n/**\n * A ThreeJS `Mesh` that bends a tube shape along a 3D cubic bezier path. The bending is done\n * by deforming a straight cylindrical geometry in the vertex shader based on a set of four\n * control point uniforms. It patches the necessary GLSL into the mesh's assigned `material`\n * automatically.\n *\n * The cubiz bezier path is determined by its four `Vector3` properties:\n * - `pointA`\n * - `controlA`\n * - `controlB`\n * - `pointB`\n *\n * The tube's radius is controlled by its `radius` property, which defaults to `0.01`.\n *\n * You can also give the tube a dashed appearance with two properties:\n *\n * - `dashArray` - an array of two numbers, defining the length of \"on\" and \"off\" parts of\n * the dash. Each is a 0-1 ratio of the entire path's length. (Actually this is the `t` length\n * used as input to the cubic bezier function, not its visible length.)\n * - `dashOffset` - offset of where the dash starts. You can animate this to make the dashes move.\n *\n * Note that the dashes will appear like a hollow tube, not solid. This will be more apparent on\n * thicker tubes.\n *\n * TODO: proper geometry bounding sphere and raycasting\n * TODO: allow control of the geometry's segment counts\n */\nclass BezierMesh extends Mesh {\n static getGeometry() {\n return geometry || (geometry =\n new CylinderGeometry(1, 1, 1, 6, 64).translate(0, 0.5, 0)\n )\n }\n\n constructor() {\n super(\n BezierMesh.getGeometry(),\n defaultBaseMaterial\n );\n\n this.pointA = new Vector3();\n this.controlA = new Vector3();\n this.controlB = new Vector3();\n this.pointB = new Vector3();\n this.radius = 0.01;\n this.dashArray = new Vector2();\n this.dashOffset = 0;\n\n // TODO - disabling frustum culling until I figure out how to customize the\n // geometry's bounding sphere that gets used\n this.frustumCulled = false;\n }\n\n // Handler for automatically wrapping the base material with our upgrades. We do the wrapping\n // lazily on _read_ rather than write to avoid unnecessary wrapping on transient values.\n get material() {\n let derivedMaterial = this._derivedMaterial;\n const baseMaterial = this._baseMaterial || this._defaultMaterial || (this._defaultMaterial = defaultBaseMaterial.clone());\n if (!derivedMaterial || derivedMaterial.baseMaterial !== baseMaterial) {\n derivedMaterial = this._derivedMaterial = createBezierMeshMaterial(baseMaterial);\n // dispose the derived material when its base material is disposed:\n baseMaterial.addEventListener('dispose', function onDispose() {\n baseMaterial.removeEventListener('dispose', onDispose);\n derivedMaterial.dispose();\n });\n }\n return derivedMaterial\n }\n set material(baseMaterial) {\n this._baseMaterial = baseMaterial;\n }\n\n // Create and update material for shadows upon request:\n get customDepthMaterial() {\n return this.material.getDepthMaterial()\n }\n set customDepthMaterial(m) {\n // future: let the user override with their own?\n }\n get customDistanceMaterial() {\n return this.material.getDistanceMaterial()\n }\n set customDistanceMaterial(m) {\n // future: let the user override with their own?\n }\n\n onBeforeRender() {\n const {uniforms} = this.material;\n const {pointA, controlA, controlB, pointB, radius, dashArray, dashOffset} = this;\n uniforms.pointA.value.copy(pointA);\n uniforms.controlA.value.copy(controlA);\n uniforms.controlB.value.copy(controlB);\n uniforms.pointB.value.copy(pointB);\n uniforms.radius.value = radius;\n uniforms.dashing.value.set(dashArray.x, dashArray.y, dashOffset || 0);\n }\n\n raycast(/*raycaster, intersects*/) {\n // TODO - just fail for now\n }\n}\n\nexport { BezierMesh, createDerivedMaterial, expandShaderIncludes, getShaderUniformTypes, getShadersForMaterial, invertMatrix4, voidMainRegExp };\n","import { Texture, LinearFilter, Color, InstancedBufferGeometry, Sphere, Box3, InstancedBufferAttribute, PlaneGeometry, Vector2, Vector4, Matrix3, Mesh, MeshBasicMaterial, DoubleSide, Matrix4, Vector3, DataTexture, RGBAFormat, FloatType, DynamicDrawUsage } from 'three';\nimport { defineWorkerModule, terminateWorker } from 'troika-worker-utils';\nimport createSDFGenerator from 'webgl-sdf-generator';\nimport bidiFactory from 'bidi-js';\nimport { createDerivedMaterial, voidMainRegExp } from 'troika-three-utils';\n\n/*!\nCustom build of Typr.ts (https://github.com/fredli74/Typr.ts) for use in Troika text rendering.\nOriginal MIT license applies: https://github.com/fredli74/Typr.ts/blob/master/LICENSE\n*/\nfunction typrFactory(){return \"undefined\"==typeof window&&(self.window=self),function(r){var e={parse:function(r){var t=e._bin,a=new Uint8Array(r);if(\"ttcf\"==t.readASCII(a,0,4)){var n=4;t.readUshort(a,n),n+=2,t.readUshort(a,n),n+=2;var o=t.readUint(a,n);n+=4;for(var s=[],i=0;i>>t&1)&&e++;return e},e._lctf.readClassDef=function(r,t){var a=e._bin,n=[],o=a.readUshort(r,t);if(t+=2,1==o){var s=a.readUshort(r,t);t+=2;var i=a.readUshort(r,t);t+=2;for(var h=0;h0&&(o.featureParams=n+s);var i=a.readUshort(r,t);t+=2,o.tab=[];for(var h=0;h0&&(o.default=e._lctf.readLangSysTable(r,n+s));var i=a.readUshort(r,t);t+=2;for(var h=0;h255?-1:e.CFF.glyphByUnicode(r,e.CFF.tableSE[t])},e.CFF.readEncoding=function(r,t,a){e._bin;var n=[\".notdef\"],o=r[t];if(t++,0!=o)throw \"error: unknown encoding format: \"+o;var s=r[t];t++;for(var i=0;i>4,p=15&v;if(15!=c&&l.push(c),15!=p&&l.push(p),15==p)break}for(var U=\"\",g=[0,1,2,3,4,5,6,7,8,9,\".\",\"e\",\"e-\",\"reserved\",\"-\",\"endOfNumber\"],S=0;S=s.xMax||s.yMin>=s.yMax)return null;if(s.noc>0){s.endPts=[];for(var i=0;i=1&&i.fmt<=2){d=o.readUshort(r,a);a+=2;var f=o.readUshort(r,a);a+=2;var u=e._lctf.numOfOnes(d),l=e._lctf.numOfOnes(f);if(1==i.fmt){i.pairsets=[];var v=o.readUshort(r,a);a+=2;for(var c=0;c=1&&i.fmt<=2){if(1==i.fmt)i.delta=o.readShort(r,a),a+=2;else if(2==i.fmt){var d=o.readUshort(r,a);a+=2,i.newg=o.readUshorts(r,a,d),a+=2*i.newg.length;}}else if(2==t&&1==i.fmt){d=o.readUshort(r,a);a+=2,i.seqs=[];for(var f=0;f>>8;if(0!=(u&=15))throw \"unknown kern table format: \"+u;t=e.kern.readFormat0(r,t,h);}return h},e.kern.parseV1=function(r,t,a,n){var o=e._bin;o.readFixed(r,t),t+=4;var s=o.readUint(r,t);t+=4;for(var i={glyph1:[],rval:[]},h=0;h>>8;if(0!=(f&=15))throw \"unknown kern table format: \"+f;t=e.kern.readFormat0(r,t,i);}return i},e.kern.readFormat0=function(r,t,a){var n=e._bin,o=-1,s=n.readUshort(r,t);t+=2,n.readUshort(r,t),t+=2,n.readUshort(r,t),t+=2,n.readUshort(r,t),t+=2;for(var i=0;i=n.map.length?0:n.map[e];if(4==n.format){for(var o=-1,s=0;se)return 0;return 65535&(0!=n.idRangeOffset[o]?n.glyphIdArray[e-n.startCount[o]+(n.idRangeOffset[o]>>1)-(n.idRangeOffset.length-o)]:e+n.idDelta[o])}if(12==n.format){if(e>n.groups[n.groups.length-1][1])return 0;for(s=0;s-1?e.U._simpleGlyph(n,a):e.U._compoGlyph(n,t,a));},e.U._simpleGlyph=function(r,t){for(var a=0;ao)){for(var v=!0,c=0,p=0;po)){for(v=!0,p=0;p>1,s.length=0,h=!0;else if(\"o3\"==P||\"o23\"==P){s.length%2!=0&&!h&&(d=s.shift()+n.nominalWidthX),i+=s.length>>1,s.length=0,h=!0;}else if(\"o4\"==P)s.length>1&&!h&&(d=s.shift()+n.nominalWidthX,h=!0),f&&e.U.P.closePath(o),v+=s.pop(),e.U.P.moveTo(o,l,v),f=!0;else if(\"o5\"==P)for(;s.length>0;)l+=s.shift(),v+=s.shift(),e.U.P.lineTo(o,l,v);else if(\"o6\"==P||\"o7\"==P)for(var x=s.length,I=\"o6\"==P,w=0;wMath.abs(y-v)?l=b+s.shift():v=y+s.shift(),e.U.P.curveTo(o,c,p,U,g,F,C),e.U.P.curveTo(o,S,m,b,y,l,v));else if(\"o14\"==P){if(s.length>0&&!h&&(d=s.shift()+a.nominalWidthX,h=!0),4==s.length){var O=s.shift(),T=s.shift(),D=s.shift(),B=s.shift(),A=e.CFF.glyphBySE(a,D),R=e.CFF.glyphBySE(a,B);e.U._drawCFF(a.CharStrings[A],t,a,n,o),t.x=O,t.y=T,e.U._drawCFF(a.CharStrings[R],t,a,n,o);}f&&(e.U.P.closePath(o),f=!1);}else if(\"o19\"==P||\"o20\"==P){s.length%2!=0&&!h&&(d=s.shift()+n.nominalWidthX),i+=s.length>>1,s.length=0,h=!0,u+=i+7>>3;}else if(\"o21\"==P)s.length>2&&!h&&(d=s.shift()+n.nominalWidthX,h=!0),v+=s.pop(),l+=s.pop(),f&&e.U.P.closePath(o),e.U.P.moveTo(o,l,v),f=!0;else if(\"o22\"==P)s.length>1&&!h&&(d=s.shift()+n.nominalWidthX,h=!0),l+=s.pop(),f&&e.U.P.closePath(o),e.U.P.moveTo(o,l,v),f=!0;else if(\"o25\"==P){for(;s.length>6;)l+=s.shift(),v+=s.shift(),e.U.P.lineTo(o,l,v);c=l+s.shift(),p=v+s.shift(),U=c+s.shift(),g=p+s.shift(),l=U+s.shift(),v=g+s.shift(),e.U.P.curveTo(o,c,p,U,g,l,v);}else if(\"o26\"==P)for(s.length%2&&(l+=s.shift());s.length>0;)c=l,p=v+s.shift(),l=U=c+s.shift(),v=(g=p+s.shift())+s.shift(),e.U.P.curveTo(o,c,p,U,g,l,v);else if(\"o27\"==P)for(s.length%2&&(v+=s.shift());s.length>0;)p=v,U=(c=l+s.shift())+s.shift(),g=p+s.shift(),l=U+s.shift(),v=g,e.U.P.curveTo(o,c,p,U,g,l,v);else if(\"o10\"==P||\"o29\"==P){var L=\"o10\"==P?n:a;if(0==s.length)console.debug(\"error: empty stack\");else {var W=s.pop(),M=L.Subrs[W+L.Bias];t.x=l,t.y=v,t.nStems=i,t.haveWidth=h,t.width=d,t.open=f,e.U._drawCFF(M,t,a,n,o),l=t.x,v=t.y,i=t.nStems,h=t.haveWidth,d=t.width,f=t.open;}}else if(\"o30\"==P||\"o31\"==P){var V=s.length,E=(G=0,\"o31\"==P);for(G+=V-(x=-3&V);G>>1|(21845&g)<<1;h=(61680&(h=(52428&h)>>>2|(13107&h)<<2))>>>4|(3855&h)<<4,c[g]=((65280&h)>>>8|(255&h)<<8)>>>1;}var w=function(r,e,t){for(var a=r.length,i=0,o=new n(e);i>>v]=s;}else for(f=new n(a),i=0;i>>15-r[i]);return f},d=new e(288);for(g=0;g<144;++g)d[g]=8;for(g=144;g<256;++g)d[g]=9;for(g=256;g<280;++g)d[g]=7;for(g=280;g<288;++g)d[g]=8;var m=new e(32);for(g=0;g<32;++g)m[g]=5;var b=w(d,9,1),p=w(m,5,1),y=function(r){for(var e=r[0],n=1;ne&&(e=r[n]);return e},L=function(r,e,n){var t=e/8|0;return (r[t]|r[t+1]<<8)>>(7&e)&n},U=function(r,e){var n=e/8|0;return (r[n]|r[n+1]<<8|r[n+2]<<16)>>(7&e)},k=[\"unexpected EOF\",\"invalid block type\",\"invalid length/literal\",\"invalid distance\",\"stream finished\",\"no stream handler\",,\"no callback\",\"invalid UTF-8 data\",\"extra field too long\",\"date not in range 1980-2099\",\"filename too long\",\"stream finishing\",\"invalid zip data\"],T=function(r,e,n){var t=new Error(e||k[r]);if(t.code=r,Error.captureStackTrace&&Error.captureStackTrace(t,T),!n)throw t;return t},O=function(r,f,u){var s=r.length;if(!s||u&&!u.l&&s<5)return f||new e(0);var c=!f||u,g=!u||u.i;u||(u={}),f||(f=new e(3*s));var h,d=function(r){var n=f.length;if(r>n){var t=new e(Math.max(2*n,r));t.set(f),f=t;}},m=u.f||0,k=u.p||0,O=u.b||0,A=u.l,x=u.d,E=u.m,D=u.n,M=8*s;do{if(!A){u.f=m=L(r,k,1);var S=L(r,k+1,3);if(k+=3,!S){var V=r[(I=((h=k)/8|0)+(7&h&&1)+4)-4]|r[I-3]<<8,_=I+V;if(_>s){g&&T(0);break}c&&d(O+V),f.set(r.subarray(I,_),O),u.b=O+=V,u.p=k=8*_;continue}if(1==S)A=b,x=p,E=9,D=5;else if(2==S){var j=L(r,k,31)+257,z=L(r,k+10,15)+4,C=j+L(r,k+5,31)+1;k+=14;for(var F=new e(C),P=new e(19),q=0;q>>4)<16)F[q++]=I;else {var K=0,N=0;for(16==I?(N=3+L(r,k,3),k+=2,K=F[q-1]):17==I?(N=3+L(r,k,7),k+=3):18==I&&(N=11+L(r,k,127),k+=7);N--;)F[q++]=K;}}var Q=F.subarray(0,j),R=F.subarray(j);E=y(Q),D=y(R),A=w(Q,E,1),x=w(R,D,1);}else T(1);if(k>M){g&&T(0);break}}c&&d(O+131072);for(var W=(1<>>4;if((k+=15&K)>M){g&&T(0);break}if(K||T(2),Z<256)f[O++]=Z;else {if(256==Z){Y=k,A=null;break}var $=Z-254;if(Z>264){var rr=a[q=Z-257];$=L(r,k,(1<>>4;er||T(3),k+=15&er;R=l[nr];if(nr>3){rr=i[nr];R+=U(r,k)&(1<M){g&&T(0);break}c&&d(O+131072);for(var tr=O+$;Or.length)&&(i=r.length);var o=new(r instanceof n?n:r instanceof t?t:e)(i-a);return o.set(r.subarray(a,i)),o}(f,0,O)},A=new e(0);var x=\"undefined\"!=typeof TextDecoder&&new TextDecoder;try{x.decode(A,{stream:!0}),1;}catch(r){}return r.convert_streams=function(r){var e=new DataView(r),n=0;function t(){var r=e.getUint16(n);return n+=2,r}function a(){var r=e.getUint32(n);return n+=4,r}function i(r){m.setUint16(b,r),b+=2;}function o(r){m.setUint32(b,r),b+=4;}for(var f={signature:a(),flavor:a(),length:a(),numTables:t(),reserved:t(),totalSfntSize:a(),majorVersion:t(),minorVersion:t(),metaOffset:a(),metaLength:a(),metaOrigLength:a(),privOffset:a(),privLength:a()},u=0;Math.pow(2,u)<=f.numTables;)u++;u--;for(var v=16*Math.pow(2,u),s=16*f.numTables-v,l=12,c=[],g=0;g boolean} supportsCodePoint\n * @property {(text:string, fontSize:number, letterSpacing:number, callback) => number} forEachGlyph\n * @property {number} lineGap\n * @property {number} capHeight\n * @property {number} unitsPerEm\n */\n\n/**\n * @typedef {(buffer: ArrayBuffer) => ParsedFont} FontParser\n */\n\n/**\n * @returns {FontParser}\n */\nfunction parserFactory(Typr, woff2otf) {\n const cmdArgLengths = {\n M: 2,\n L: 2,\n Q: 4,\n C: 6,\n Z: 0\n };\n\n // {joinType: \"skip+step,...\"}\n const joiningTypeRawData = {\"C\":\"18g,ca,368,1kz\",\"D\":\"17k,6,2,2+4,5+c,2+6,2+1,10+1,9+f,j+11,2+1,a,2,2+1,15+2,3,j+2,6+3,2+8,2,2,2+1,w+a,4+e,3+3,2,3+2,3+5,23+w,2f+4,3,2+9,2,b,2+3,3,1k+9,6+1,3+1,2+2,2+d,30g,p+y,1,1+1g,f+x,2,sd2+1d,jf3+4,f+3,2+4,2+2,b+3,42,2,4+2,2+1,2,3,t+1,9f+w,2,el+2,2+g,d+2,2l,2+1,5,3+1,2+1,2,3,6,16wm+1v\",\"R\":\"17m+3,2,2,6+3,m,15+2,2+2,h+h,13,3+8,2,2,3+1,2,p+1,x,5+4,5,a,2,2,3,u,c+2,g+1,5,2+1,4+1,5j,6+1,2,b,2+2,f,2+1,1s+2,2,3+1,7,1ez0,2,2+1,4+4,b,4,3,b,42,2+2,4,3,2+1,2,o+3,ae,ep,x,2o+2,3+1,3,5+1,6\",\"L\":\"x9u,jff,a,fd,jv\",\"T\":\"4t,gj+33,7o+4,1+1,7c+18,2,2+1,2+1,2,21+a,2,1b+k,h,2u+6,3+5,3+1,2+3,y,2,v+q,2k+a,1n+8,a,p+3,2+8,2+2,2+4,18+2,3c+e,2+v,1k,2,5+7,5,4+6,b+1,u,1n,5+3,9,l+1,r,3+1,1m,5+1,5+1,3+2,4,v+1,4,c+1,1m,5+4,2+1,5,l+1,n+5,2,1n,3,2+3,9,8+1,c+1,v,1q,d,1f,4,1m+2,6+2,2+3,8+1,c+1,u,1n,3,7,6+1,l+1,t+1,1m+1,5+3,9,l+1,u,21,8+2,2,2j,3+6,d+7,2r,3+8,c+5,23+1,s,2,2,1k+d,2+4,2+1,6+a,2+z,a,2v+3,2+5,2+1,3+1,q+1,5+2,h+3,e,3+1,7,g,jk+2,qb+2,u+2,u+1,v+1,1t+1,2+6,9,3+a,a,1a+2,3c+1,z,3b+2,5+1,a,7+2,64+1,3,1n,2+6,2,2,3+7,7+9,3,1d+d,1,1+1,1s+3,1d,2+4,2,6,15+8,d+1,x+3,3+1,2+2,1l,2+1,4,2+2,1n+7,3+1,49+2,2+c,2+6,5,7,4+1,5j+1l,2+4,ek,3+1,r+4,1e+4,6+5,2p+c,1+3,1,1+2,1+b,2db+2,3y,2p+v,ff+3,30+1,n9x,1+2,2+9,x+1,29+1,7l,4,5,q+1,6,48+1,r+h,e,13+7,q+a,1b+2,1d,3+3,3+1,14,1w+5,3+1,3+1,d,9,1c,1g,2+2,3+1,6+1,2,17+1,9,6n,3,5,fn5,ki+f,h+f,5s,6y+2,ea,6b,46+4,1af+2,2+1,6+3,15+2,5,4m+1,fy+3,as+1,4a+a,4x,1j+e,1l+2,1e+3,3+1,1y+2,11+4,2+7,1r,d+1,1h+8,b+3,3,2o+2,3,2+1,7,4h,4+7,m+1,1m+1,4,12+6,4+4,5g+7,3+2,2,o,2d+5,2,5+1,2+1,6n+3,7+1,2+1,s+1,2e+7,3,2+1,2z,2,3+5,2,2u+2,3+3,2+4,78+8,2+1,75+1,2,5,41+3,3+1,5,x+9,15+5,3+3,9,a+5,3+2,1b+c,2+1,bb+6,2+5,2,2b+l,3+6,2+1,2+1,3f+5,4,2+1,2+6,2,21+1,4,2,9o+1,470+8,at4+4,1o+6,t5,1s+3,2a,f5l+1,2+3,43o+2,a+7,1+7,3+6,v+3,45+2,1j0+1i,5+1d,9,f,n+4,2+e,11t+6,2+g,3+6,2+1,2+4,7a+6,c6+3,15t+6,32+6,1,gzau,v+2n,3l+6n\"};\n\n const JT_LEFT = 1, //indicates that a character joins with the subsequent character, but does not join with the preceding character.\n JT_RIGHT = 2, //indicates that a character joins with the preceding character, but does not join with the subsequent character.\n JT_DUAL = 4, //indicates that a character joins with the preceding character and joins with the subsequent character.\n JT_TRANSPARENT = 8, //indicates that the character does not join with adjacent characters and that the character must be skipped over when the shaping engine is evaluating the joining positions in a sequence of characters. When a JT_TRANSPARENT character is encountered in a sequence, the JOINING_TYPE of the preceding character passes through. Diacritical marks are frequently assigned this value.\n JT_JOIN_CAUSING = 16, //indicates that the character forces the use of joining forms with the preceding and subsequent characters. Kashidas and the Zero Width Joiner (U+200D) are both JOIN_CAUSING characters.\n JT_NON_JOINING = 32; //indicates that a character does not join with the preceding or with the subsequent character.,\n\n let joiningTypeMap;\n function getCharJoiningType(ch) {\n if (!joiningTypeMap) {\n const m = {\n R: JT_RIGHT,\n L: JT_LEFT,\n D: JT_DUAL,\n C: JT_JOIN_CAUSING,\n U: JT_NON_JOINING,\n T: JT_TRANSPARENT\n };\n joiningTypeMap = new Map();\n for (let type in joiningTypeRawData) {\n let lastCode = 0;\n joiningTypeRawData[type].split(',').forEach(range => {\n let [skip, step] = range.split('+');\n skip = parseInt(skip,36);\n step = step ? parseInt(step, 36) : 0;\n joiningTypeMap.set(lastCode += skip, m[type]);\n for (let i = step; i--;) {\n joiningTypeMap.set(++lastCode, m[type]);\n }\n });\n }\n }\n return joiningTypeMap.get(ch) || JT_NON_JOINING\n }\n\n const ISOL = 1, INIT = 2, FINA = 3, MEDI = 4;\n const formsToFeatures = [null, 'isol', 'init', 'fina', 'medi'];\n\n function detectJoiningForms(str) {\n // This implements the algorithm described here:\n // https://github.com/n8willis/opentype-shaping-documents/blob/master/opentype-shaping-arabic-general.md\n const joiningForms = new Uint8Array(str.length);\n let prevJoiningType = JT_NON_JOINING;\n let prevForm = ISOL;\n let prevIndex = -1;\n for (let i = 0; i < str.length; i++) {\n const code = str.codePointAt(i);\n let joiningType = getCharJoiningType(code) | 0;\n let form = ISOL;\n if (joiningType & JT_TRANSPARENT) {\n continue\n }\n if (prevJoiningType & (JT_LEFT | JT_DUAL | JT_JOIN_CAUSING)) {\n if (joiningType & (JT_RIGHT | JT_DUAL | JT_JOIN_CAUSING)) {\n form = FINA;\n // isol->init, fina->medi\n if (prevForm === ISOL || prevForm === FINA) {\n joiningForms[prevIndex]++;\n }\n }\n else if (joiningType & (JT_LEFT | JT_NON_JOINING)) {\n // medi->fina, init->isol\n if (prevForm === INIT || prevForm === MEDI) {\n joiningForms[prevIndex]--;\n }\n }\n }\n else if (prevJoiningType & (JT_RIGHT | JT_NON_JOINING)) {\n // medi->fina, init->isol\n if (prevForm === INIT || prevForm === MEDI) {\n joiningForms[prevIndex]--;\n }\n }\n prevForm = joiningForms[i] = form;\n prevJoiningType = joiningType;\n prevIndex = i;\n if (code > 0xffff) i++;\n }\n // console.log(str.split('').map(ch => ch.codePointAt(0).toString(16)))\n // console.log(str.split('').map(ch => getCharJoiningType(ch.codePointAt(0))))\n // console.log(Array.from(joiningForms).map(f => formsToFeatures[f] || 'none'))\n return joiningForms\n }\n\n function stringToGlyphs (font, str) {\n const glyphIds = [];\n for (let i = 0; i < str.length; i++) {\n const cc = str.codePointAt(i);\n if (cc > 0xffff) i++;\n glyphIds.push(Typr.U.codeToGlyph(font, cc));\n }\n\n const gsub = font['GSUB'];\n if (gsub) {\n const {lookupList, featureList} = gsub;\n let joiningForms;\n const supportedFeatures = /^(rlig|liga|mset|isol|init|fina|medi|half|pres|blws|ccmp)$/;\n const usedLookups = [];\n featureList.forEach(feature => {\n if (supportedFeatures.test(feature.tag)) {\n for (let ti = 0; ti < feature.tab.length; ti++) {\n if (usedLookups[feature.tab[ti]]) continue\n usedLookups[feature.tab[ti]] = true;\n const tab = lookupList[feature.tab[ti]];\n const isJoiningFeature = /^(isol|init|fina|medi)$/.test(feature.tag);\n if (isJoiningFeature && !joiningForms) { //lazy\n joiningForms = detectJoiningForms(str);\n }\n for (let ci = 0; ci < glyphIds.length; ci++) {\n if (!joiningForms || !isJoiningFeature || formsToFeatures[joiningForms[ci]] === feature.tag) {\n Typr.U._applySubs(glyphIds, ci, tab, lookupList);\n }\n }\n }\n }\n });\n }\n\n return glyphIds\n }\n\n // Calculate advances and x/y offsets for each glyph, e.g. kerning and mark\n // attachments. This is a more complete version of Typr.U.getPairAdjustment\n // and should become an upstream replacement eventually.\n function calcGlyphPositions(font, glyphIds) {\n const positions = new Int16Array(glyphIds.length * 3); // [offsetX, offsetY, advanceX, ...]\n let glyphIndex = 0;\n for (; glyphIndex < glyphIds.length; glyphIndex++) {\n const glyphId = glyphIds[glyphIndex];\n if (glyphId === -1) continue;\n\n positions[glyphIndex * 3 + 2] = font.hmtx.aWidth[glyphId]; // populate advanceX in...advance.\n\n const gpos = font.GPOS;\n if (gpos) {\n const llist = gpos.lookupList;\n for (let i = 0; i < llist.length; i++) {\n const lookup = llist[i];\n for (let j = 0; j < lookup.tabs.length; j++) {\n const tab = lookup.tabs[j];\n // Single char placement\n if (lookup.ltype === 1) {\n const ind = Typr._lctf.coverageIndex(tab.coverage, glyphId);\n if (ind !== -1 && tab.pos) {\n applyValueRecord(tab.pos, glyphIndex);\n break\n }\n }\n // Pairs (kerning)\n else if (lookup.ltype === 2) {\n let adj = null;\n let prevGlyphIndex = getPrevGlyphIndex();\n if (prevGlyphIndex !== -1) {\n const coverageIndex = Typr._lctf.coverageIndex(tab.coverage, glyphIds[prevGlyphIndex]);\n if (coverageIndex !== -1) {\n if (tab.fmt === 1) {\n const right = tab.pairsets[coverageIndex];\n for (let k = 0; k < right.length; k++) {\n if (right[k].gid2 === glyphId) adj = right[k];\n }\n } else if (tab.fmt === 2) {\n const c1 = Typr.U._getGlyphClass(glyphIds[prevGlyphIndex], tab.classDef1);\n const c2 = Typr.U._getGlyphClass(glyphId, tab.classDef2);\n adj = tab.matrix[c1][c2];\n }\n if (adj) {\n if (adj.val1) applyValueRecord(adj.val1, prevGlyphIndex);\n if (adj.val2) applyValueRecord(adj.val2, glyphIndex);\n break\n }\n }\n }\n }\n // Mark to base\n else if (lookup.ltype === 4) {\n const markArrIndex = Typr._lctf.coverageIndex(tab.markCoverage, glyphId);\n if (markArrIndex !== -1) {\n const baseGlyphIndex = getPrevGlyphIndex(isBaseGlyph);\n const baseArrIndex = baseGlyphIndex === -1 ? -1 : Typr._lctf.coverageIndex(tab.baseCoverage, glyphIds[baseGlyphIndex]);\n if (baseArrIndex !== -1) {\n const markRecord = tab.markArray[markArrIndex];\n const baseAnchor = tab.baseArray[baseArrIndex][markRecord.markClass];\n positions[glyphIndex * 3] = baseAnchor.x - markRecord.x + positions[baseGlyphIndex * 3] - positions[baseGlyphIndex * 3 + 2];\n positions[glyphIndex * 3 + 1] = baseAnchor.y - markRecord.y + positions[baseGlyphIndex * 3 + 1];\n break;\n }\n }\n }\n // Mark to mark\n else if (lookup.ltype === 6) {\n const mark1ArrIndex = Typr._lctf.coverageIndex(tab.mark1Coverage, glyphId);\n if (mark1ArrIndex !== -1) {\n const prevGlyphIndex = getPrevGlyphIndex();\n if (prevGlyphIndex !== -1) {\n const prevGlyphId = glyphIds[prevGlyphIndex];\n if (getGlyphClass(font, prevGlyphId) === 3) { // only check mark glyphs\n const mark2ArrIndex = Typr._lctf.coverageIndex(tab.mark2Coverage, prevGlyphId);\n if (mark2ArrIndex !== -1) {\n const mark1Record = tab.mark1Array[mark1ArrIndex];\n const mark2Anchor = tab.mark2Array[mark2ArrIndex][mark1Record.markClass];\n positions[glyphIndex * 3] = mark2Anchor.x - mark1Record.x + positions[prevGlyphIndex * 3] - positions[prevGlyphIndex * 3 + 2];\n positions[glyphIndex * 3 + 1] = mark2Anchor.y - mark1Record.y + positions[prevGlyphIndex * 3 + 1];\n break;\n }\n }\n }\n }\n }\n }\n }\n }\n // Check kern table if no GPOS\n else if (font.kern && !font.cff) {\n const prevGlyphIndex = getPrevGlyphIndex();\n if (prevGlyphIndex !== -1) {\n const ind1 = font.kern.glyph1.indexOf(glyphIds[prevGlyphIndex]);\n if (ind1 !== -1) {\n const ind2 = font.kern.rval[ind1].glyph2.indexOf(glyphId);\n if (ind2 !== -1) {\n positions[prevGlyphIndex * 3 + 2] += font.kern.rval[ind1].vals[ind2];\n }\n }\n }\n }\n }\n\n return positions;\n\n function getPrevGlyphIndex(filter) {\n for (let i = glyphIndex - 1; i >=0; i--) {\n if (glyphIds[i] !== -1 && (!filter || filter(glyphIds[i]))) {\n return i\n }\n }\n return -1;\n }\n\n function isBaseGlyph(glyphId) {\n return getGlyphClass(font, glyphId) === 1;\n }\n\n function applyValueRecord(source, gi) {\n for (let i = 0; i < 3; i++) {\n positions[gi * 3 + i] += source[i] || 0;\n }\n }\n }\n\n function getGlyphClass(font, glyphId) {\n const classDef = font.GDEF && font.GDEF.glyphClassDef;\n return classDef ? Typr.U._getGlyphClass(glyphId, classDef) : 0;\n }\n\n function firstNum(...args) {\n for (let i = 0; i < args.length; i++) {\n if (typeof args[i] === 'number') {\n return args[i]\n }\n }\n }\n\n /**\n * @returns ParsedFont\n */\n function wrapFontObj(typrFont) {\n const glyphMap = Object.create(null);\n\n const os2 = typrFont['OS/2'];\n const hhea = typrFont.hhea;\n const unitsPerEm = typrFont.head.unitsPerEm;\n const ascender = firstNum(os2 && os2.sTypoAscender, hhea && hhea.ascender, unitsPerEm);\n\n /** @type ParsedFont */\n const fontObj = {\n unitsPerEm,\n ascender,\n descender: firstNum(os2 && os2.sTypoDescender, hhea && hhea.descender, 0),\n capHeight: firstNum(os2 && os2.sCapHeight, ascender),\n xHeight: firstNum(os2 && os2.sxHeight, ascender),\n lineGap: firstNum(os2 && os2.sTypoLineGap, hhea && hhea.lineGap),\n supportsCodePoint(code) {\n return Typr.U.codeToGlyph(typrFont, code) > 0\n },\n forEachGlyph(text, fontSize, letterSpacing, callback) {\n let penX = 0;\n const fontScale = 1 / fontObj.unitsPerEm * fontSize;\n\n const glyphIds = stringToGlyphs(typrFont, text);\n let charIndex = 0;\n const positions = calcGlyphPositions(typrFont, glyphIds);\n\n glyphIds.forEach((glyphId, i) => {\n // Typr returns a glyph index per string codepoint, with -1s in place of those that\n // were omitted due to ligature substitution. So we can track original index in the\n // string via simple increment, and skip everything else when seeing a -1.\n if (glyphId !== -1) {\n let glyphObj = glyphMap[glyphId];\n if (!glyphObj) {\n const {cmds, crds} = Typr.U.glyphToPath(typrFont, glyphId);\n\n // Build path string\n let path = '';\n let crdsIdx = 0;\n for (let i = 0, len = cmds.length; i < len; i++) {\n const numArgs = cmdArgLengths[cmds[i]];\n path += cmds[i];\n for (let j = 1; j <= numArgs; j++) {\n path += (j > 1 ? ',' : '') + crds[crdsIdx++];\n }\n }\n\n // Find extents - Glyf gives this in metadata but not CFF, and Typr doesn't\n // normalize the two, so it's simplest just to iterate ourselves.\n let xMin, yMin, xMax, yMax;\n if (crds.length) {\n xMin = yMin = Infinity;\n xMax = yMax = -Infinity;\n for (let i = 0, len = crds.length; i < len; i += 2) {\n let x = crds[i];\n let y = crds[i + 1];\n if (x < xMin) xMin = x;\n if (y < yMin) yMin = y;\n if (x > xMax) xMax = x;\n if (y > yMax) yMax = y;\n }\n } else {\n xMin = xMax = yMin = yMax = 0;\n }\n\n glyphObj = glyphMap[glyphId] = {\n index: glyphId,\n advanceWidth: typrFont.hmtx.aWidth[glyphId],\n xMin,\n yMin,\n xMax,\n yMax,\n path,\n };\n }\n\n callback.call(\n null,\n glyphObj,\n penX + positions[i * 3] * fontScale,\n positions[i * 3 + 1] * fontScale,\n charIndex\n );\n\n penX += positions[i * 3 + 2] * fontScale;\n if (letterSpacing) {\n penX += letterSpacing * fontSize;\n }\n }\n charIndex += (text.codePointAt(charIndex) > 0xffff ? 2 : 1);\n });\n\n return penX\n }\n };\n\n return fontObj\n }\n\n /**\n * @type FontParser\n */\n return function parse(buffer) {\n // Look to see if we have a WOFF file and convert it if so:\n const peek = new Uint8Array(buffer, 0, 4);\n const tag = Typr._bin.readASCII(peek, 0, 4);\n if (tag === 'wOFF') {\n buffer = woff2otf(buffer);\n } else if (tag === 'wOF2') {\n throw new Error('woff2 fonts not supported')\n }\n return wrapFontObj(Typr.parse(buffer)[0])\n }\n}\n\n\nconst workerModule = /*#__PURE__*/defineWorkerModule({\n name: 'Typr Font Parser',\n dependencies: [typrFactory, woff2otfFactory, parserFactory],\n init(typrFactory, woff2otfFactory, parserFactory) {\n const Typr = typrFactory();\n const woff2otf = woff2otfFactory();\n return parserFactory(Typr, woff2otf)\n }\n});\n\n/*!\nCustom bundle of @unicode-font-resolver/client v1.0.2 (https://github.com/lojjic/unicode-font-resolver)\nfor use in Troika text rendering. \nOriginal MIT license applies\n*/\nfunction unicodeFontResolverClientFactory(){return function(t){var n=function(){this.buckets=new Map;};n.prototype.add=function(t){var n=t>>5;this.buckets.set(n,(this.buckets.get(n)||0)|1<<(31&t));},n.prototype.has=function(t){var n=this.buckets.get(t>>5);return void 0!==n&&0!=(n&1<<(31&t))},n.prototype.serialize=function(){var t=[];return this.buckets.forEach((function(n,r){t.push((+r).toString(36)+\":\"+n.toString(36));})),t.join(\",\")},n.prototype.deserialize=function(t){var n=this;this.buckets.clear(),t.split(\",\").forEach((function(t){var r=t.split(\":\");n.buckets.set(parseInt(r[0],36),parseInt(r[1],36));}));};var r=Math.pow(2,8),e=r-1,o=~e;function a(t){var n=function(t){return t&o}(t).toString(16),e=function(t){return (t&o)+r-1}(t).toString(16);return \"codepoint-index/plane\"+(t>>16)+\"/\"+n+\"-\"+e+\".json\"}function i(t,n){var r=t&e,o=n.codePointAt(r/6|0);return 0!=((o=(o||48)-48)&1<65535&&(n++,E=n);},E=0;E65535&&(n++,r=n);},r=0;r65535&&(e++,y[e]=y[e-1]);}return {fontUrls:Array.from(h.keys()),chars:y}}))},Object.defineProperty(t,\"__esModule\",{value:!0}),t}({})}\n\n/**\n * @typedef {string | {src:string, label?:string, unicodeRange?:string, lang?:string}} UserFont\n */\n\n/**\n * @typedef {ClientOptions} FontResolverOptions\n * @property {Array|UserFont} [fonts]\n * @property {'normal'|'italic'} [style]\n * @property {'normal'|'bold'|number} [style]\n * @property {string} [unicodeFontsURL]\n */\n\n/**\n * @typedef {Object} FontResolverResult\n * @property {Uint8Array} chars\n * @property {Array} fonts\n */\n\n/**\n * @typedef {function} FontResolver\n * @param {string} text\n * @param {(FontResolverResult) => void} callback\n * @param {FontResolverOptions} [options]\n */\n\n/**\n * Factory for the FontResolver function.\n * @param {FontParser} fontParser\n * @param {{getFontsForString: function, CodePointSet: function}} unicodeFontResolverClient\n * @return {FontResolver}\n */\nfunction createFontResolver(fontParser, unicodeFontResolverClient) {\n /**\n * @type {Record}\n */\n const parsedFonts = Object.create(null);\n\n /**\n * @type {Record void>>}\n */\n const loadingFonts = Object.create(null);\n\n /**\n * Load a given font url\n */\n function doLoadFont(url, callback) {\n const onError = err => {\n console.error(`Failure loading font ${url}`, err);\n };\n try {\n const request = new XMLHttpRequest();\n request.open('get', url, true);\n request.responseType = 'arraybuffer';\n request.onload = function () {\n if (request.status >= 400) {\n onError(new Error(request.statusText));\n }\n else if (request.status > 0) {\n try {\n const fontObj = fontParser(request.response);\n fontObj.src = url;\n callback(fontObj);\n } catch (e) {\n onError(e);\n }\n }\n };\n request.onerror = onError;\n request.send();\n } catch(err) {\n onError(err);\n }\n }\n\n\n /**\n * Load a given font url if needed, invoking a callback when it's loaded. If already\n * loaded, the callback will be called synchronously.\n * @param {string} fontUrl\n * @param {(font: ParsedFont) => void} callback\n */\n function loadFont(fontUrl, callback) {\n let font = parsedFonts[fontUrl];\n if (font) {\n callback(font);\n } else if (loadingFonts[fontUrl]) {\n loadingFonts[fontUrl].push(callback);\n } else {\n loadingFonts[fontUrl] = [callback];\n doLoadFont(fontUrl, fontObj => {\n fontObj.src = fontUrl;\n parsedFonts[fontUrl] = fontObj;\n loadingFonts[fontUrl].forEach(cb => cb(fontObj));\n delete loadingFonts[fontUrl];\n });\n }\n }\n\n /**\n * For a given string of text, determine which fonts are required to fully render it and\n * ensure those fonts are loaded.\n */\n return function (text, callback, {\n lang,\n fonts: userFonts = [],\n style = 'normal',\n weight = 'normal',\n unicodeFontsURL\n } = {}) {\n const charResolutions = new Uint8Array(text.length);\n const fontResolutions = [];\n if (!text.length) {\n allDone();\n }\n\n const fontIndices = new Map();\n const fallbackRanges = []; // [[start, end], ...]\n\n if (style !== 'italic') style = 'normal';\n if (typeof weight !== 'number') {\n weight = weight === 'bold' ? 700 : 400;\n }\n\n if (userFonts && !Array.isArray(userFonts)) {\n userFonts = [userFonts];\n }\n userFonts = userFonts.slice()\n // filter by language\n .filter(def => !def.lang || def.lang.test(lang))\n // switch order for easier iteration\n .reverse();\n if (userFonts.length) {\n const UNKNOWN = 0;\n const RESOLVED = 1;\n const NEEDS_FALLBACK = 2;\n let prevCharResult = UNKNOWN\n\n ;(function resolveUserFonts (startIndex = 0) {\n for (let i = startIndex, iLen = text.length; i < iLen; i++) {\n const codePoint = text.codePointAt(i);\n // Carry previous character's result forward if:\n // - it resolved to a font that also covers this character\n // - this character is whitespace\n if (\n (prevCharResult === RESOLVED && fontResolutions[charResolutions[i - 1]].supportsCodePoint(codePoint)) ||\n (i > 0 && /\\s/.test(text[i]))\n ) {\n charResolutions[i] = charResolutions[i - 1];\n if (prevCharResult === NEEDS_FALLBACK) {\n fallbackRanges[fallbackRanges.length - 1][1] = i;\n }\n } else {\n for (let j = charResolutions[i], jLen = userFonts.length; j <= jLen; j++) {\n if (j === jLen) {\n // none of the user fonts matched; needs fallback\n const range = prevCharResult === NEEDS_FALLBACK ?\n fallbackRanges[fallbackRanges.length - 1] :\n (fallbackRanges[fallbackRanges.length] = [i, i]);\n range[1] = i;\n prevCharResult = NEEDS_FALLBACK;\n } else {\n charResolutions[i] = j;\n const { src, unicodeRange } = userFonts[j];\n // filter by optional explicit unicode ranges\n if (!unicodeRange || isCodeInRanges(codePoint, unicodeRange)) {\n const fontObj = parsedFonts[src];\n // font not yet loaded, load it and resume\n if (!fontObj) {\n loadFont(src, () => {\n resolveUserFonts(i);\n });\n return;\n }\n // if the font actually contains a glyph for this char, lock it in\n if (fontObj.supportsCodePoint(codePoint)) {\n let fontIndex = fontIndices.get(fontObj);\n if (typeof fontIndex !== 'number') {\n fontIndex = fontResolutions.length;\n fontResolutions.push(fontObj);\n fontIndices.set(fontObj, fontIndex);\n }\n charResolutions[i] = fontIndex;\n prevCharResult = RESOLVED;\n break;\n }\n }\n }\n }\n }\n\n if (codePoint > 0xffff && i + 1 < iLen) {\n charResolutions[i + 1] = charResolutions[i];\n i++;\n if (prevCharResult === NEEDS_FALLBACK) {\n fallbackRanges[fallbackRanges.length - 1][1] = i;\n }\n }\n }\n resolveFallbacks();\n })();\n } else {\n fallbackRanges.push([0, text.length - 1]);\n resolveFallbacks();\n }\n\n function resolveFallbacks() {\n if (fallbackRanges.length) {\n // Combine all fallback substrings into a single string for querying\n const fallbackString = fallbackRanges.map(range => text.substring(range[0], range[1] + 1)).join('\\n');\n unicodeFontResolverClient.getFontsForString(fallbackString, {\n lang: lang || undefined,\n style,\n weight,\n dataUrl: unicodeFontsURL\n }).then(({fontUrls, chars}) => {\n // Extract results and put them back in the main array\n const fontIndexOffset = fontResolutions.length;\n let charIdx = 0;\n fallbackRanges.forEach(range => {\n for (let i = 0, endIdx = range[1] - range[0]; i <= endIdx; i++) {\n charResolutions[range[0] + i] = chars[charIdx++] + fontIndexOffset;\n }\n charIdx++; //skip segment separator\n });\n\n // Load and parse the fallback fonts - avoiding Promise here to prevent polyfills in the worker\n let loadedCount = 0;\n fontUrls.forEach((url, i) => {\n loadFont(url, fontObj => {\n fontResolutions[i + fontIndexOffset] = fontObj;\n if (++loadedCount === fontUrls.length) {\n allDone();\n }\n });\n });\n });\n } else {\n allDone();\n }\n }\n\n function allDone() {\n callback({\n chars: charResolutions,\n fonts: fontResolutions\n });\n }\n\n function isCodeInRanges(code, ranges) {\n // todo optimize search - CodePointSet from unicode-font-resolver?\n for (let k = 0; k < ranges.length; k++) {\n const [start, end = start] = ranges[k];\n if (start <= code && code <= end) {\n return true\n }\n }\n return false\n }\n }\n}\n\nconst fontResolverWorkerModule = /*#__PURE__*/defineWorkerModule({\n name: 'FontResolver',\n dependencies: [\n createFontResolver,\n workerModule,\n unicodeFontResolverClientFactory,\n ],\n init(createFontResolver, fontParser, unicodeFontResolverClientFactory) {\n return createFontResolver(fontParser, unicodeFontResolverClientFactory());\n }\n});\n\n/**\n * @typedef {number|'left'|'center'|'right'} AnchorXValue\n */\n/**\n * @typedef {number|'top'|'top-baseline'|'top-cap'|'top-ex'|'middle'|'bottom-baseline'|'bottom'} AnchorYValue\n */\n\n/**\n * @typedef {object} TypesetParams\n * @property {string} text\n * @property {UserFont|UserFont[]} [font]\n * @property {string} [lang]\n * @property {number} [sdfGlyphSize=64]\n * @property {number} [fontSize=1]\n * @property {number|'normal'|'bold'} [fontWeight='normal']\n * @property {'normal'|'italic'} [fontStyle='normal']\n * @property {number} [letterSpacing=0]\n * @property {'normal'|number} [lineHeight='normal']\n * @property {number} [maxWidth]\n * @property {'ltr'|'rtl'} [direction='ltr']\n * @property {string} [textAlign='left']\n * @property {number} [textIndent=0]\n * @property {'normal'|'nowrap'} [whiteSpace='normal']\n * @property {'normal'|'break-word'} [overflowWrap='normal']\n * @property {AnchorXValue} [anchorX=0]\n * @property {AnchorYValue} [anchorY=0]\n * @property {boolean} [metricsOnly=false]\n * @property {string} [unicodeFontsURL]\n * @property {FontResolverResult} [preResolvedFonts]\n * @property {boolean} [includeCaretPositions=false]\n * @property {number} [chunkedBoundsSize=8192]\n * @property {{[rangeStartIndex]: number}} [colorRanges]\n */\n\n/**\n * @typedef {object} TypesetResult\n * @property {Uint16Array} glyphIds id for each glyph, specific to that glyph's font\n * @property {Uint8Array} glyphFontIndices index into fontData for each glyph\n * @property {Float32Array} glyphPositions x,y of each glyph's origin in layout\n * @property {{[font]: {[glyphId]: {path: string, pathBounds: number[]}}}} glyphData data about each glyph appearing in the text\n * @property {TypesetFontData[]} fontData data about each font used in the text\n * @property {Float32Array} [caretPositions] startX,endX,bottomY caret positions for each char\n * @property {Uint8Array} [glyphColors] color for each glyph, if color ranges supplied\n * chunkedBounds, //total rects per (n=chunkedBoundsSize) consecutive glyphs\n * fontSize, //calculated em height\n * topBaseline: anchorYOffset + lines[0].baseline, //y coordinate of the top line's baseline\n * blockBounds: [ //bounds for the whole block of text, including vertical padding for lineHeight\n * anchorXOffset,\n * anchorYOffset - totalHeight,\n * anchorXOffset + maxLineWidth,\n * anchorYOffset\n * ],\n * visibleBounds, //total bounds of visible text paths, may be larger or smaller than blockBounds\n * timings\n */\n\n/**\n * @typedef {object} TypesetFontData\n * @property src\n * @property unitsPerEm\n * @property ascender\n * @property descender\n * @property lineHeight\n * @property capHeight\n * @property xHeight\n */\n\n/**\n * @typedef {function} TypesetterTypesetFunction - compute fonts and layout for some text.\n * @param {TypesetParams} params\n * @param {(TypesetResult) => void} callback - function called when typesetting is complete.\n * If the params included `preResolvedFonts`, this will be called synchronously.\n */\n\n/**\n * @typedef {function} TypesetterMeasureFunction - compute width/height for some text.\n * @param {TypesetParams} params\n * @param {(width:number, height:number) => void} callback - function called when measurement is complete.\n * If the params included `preResolvedFonts`, this will be called synchronously.\n */\n\n\n/**\n * Factory function that creates a self-contained environment for processing text typesetting requests.\n *\n * It is important that this function has no closure dependencies, so that it can be easily injected\n * into the source for a Worker without requiring a build step or complex dependency loading. All its\n * dependencies must be passed in at initialization.\n *\n * @param {FontResolver} resolveFonts - function to resolve a string to parsed fonts\n * @param {object} bidi - the bidi.js implementation object\n * @return {{typeset: TypesetterTypesetFunction, measure: TypesetterMeasureFunction}}\n */\nfunction createTypesetter(resolveFonts, bidi) {\n const INF = Infinity;\n\n // Set of Unicode Default_Ignorable_Code_Point characters, these will not produce visible glyphs\n // eslint-disable-next-line no-misleading-character-class\n const DEFAULT_IGNORABLE_CHARS = /[\\u00AD\\u034F\\u061C\\u115F-\\u1160\\u17B4-\\u17B5\\u180B-\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u3164\\uFE00-\\uFE0F\\uFEFF\\uFFA0\\uFFF0-\\uFFF8]/;\n\n // This regex (instead of /\\s/) allows us to select all whitespace EXCEPT for non-breaking white spaces\n const lineBreakingWhiteSpace = `[^\\\\S\\\\u00A0]`;\n\n // Incomplete set of characters that allow line breaking after them\n // In the future we may consider a full Unicode line breaking algorithm impl: https://www.unicode.org/reports/tr14\n const BREAK_AFTER_CHARS = new RegExp(`${lineBreakingWhiteSpace}|[\\\\-\\\\u007C\\\\u00AD\\\\u2010\\\\u2012-\\\\u2014\\\\u2027\\\\u2056\\\\u2E17\\\\u2E40]`);\n\n /**\n * Load and parse all the necessary fonts to render a given string of text, then group\n * them into consecutive runs of characters sharing a font.\n */\n function calculateFontRuns({text, lang, fonts, style, weight, preResolvedFonts, unicodeFontsURL}, onDone) {\n const onResolved = ({chars, fonts: parsedFonts}) => {\n let curRun, prevVal;\n const runs = [];\n for (let i = 0; i < chars.length; i++) {\n if (chars[i] !== prevVal) {\n prevVal = chars[i];\n runs.push(curRun = { start: i, end: i, fontObj: parsedFonts[chars[i]]});\n } else {\n curRun.end = i;\n }\n }\n onDone(runs);\n };\n if (preResolvedFonts) {\n onResolved(preResolvedFonts);\n } else {\n resolveFonts(\n text,\n onResolved,\n { lang, fonts, style, weight, unicodeFontsURL }\n );\n }\n }\n\n /**\n * Main entry point.\n * Process a text string with given font and formatting parameters, and return all info\n * necessary to render all its glyphs.\n * @type TypesetterTypesetFunction\n */\n function typeset(\n {\n text='',\n font,\n lang,\n sdfGlyphSize=64,\n fontSize=400,\n fontWeight=1,\n fontStyle='normal',\n letterSpacing=0,\n lineHeight='normal',\n maxWidth=INF,\n direction,\n textAlign='left',\n textIndent=0,\n whiteSpace='normal',\n overflowWrap='normal',\n anchorX = 0,\n anchorY = 0,\n metricsOnly=false,\n unicodeFontsURL,\n preResolvedFonts=null,\n includeCaretPositions=false,\n chunkedBoundsSize=8192,\n colorRanges=null\n },\n callback\n ) {\n const mainStart = now();\n const timings = {fontLoad: 0, typesetting: 0};\n\n // Ensure newlines are normalized\n if (text.indexOf('\\r') > -1) {\n console.info('Typesetter: got text with \\\\r chars; normalizing to \\\\n');\n text = text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n }\n\n // Ensure we've got numbers not strings\n fontSize = +fontSize;\n letterSpacing = +letterSpacing;\n maxWidth = +maxWidth;\n lineHeight = lineHeight || 'normal';\n textIndent = +textIndent;\n\n calculateFontRuns({\n text,\n lang,\n style: fontStyle,\n weight: fontWeight,\n fonts: typeof font === 'string' ? [{src: font}] : font,\n unicodeFontsURL,\n preResolvedFonts\n }, runs => {\n timings.fontLoad = now() - mainStart;\n const hasMaxWidth = isFinite(maxWidth);\n let glyphIds = null;\n let glyphFontIndices = null;\n let glyphPositions = null;\n let glyphData = null;\n let glyphColors = null;\n let caretPositions = null;\n let visibleBounds = null;\n let chunkedBounds = null;\n let maxLineWidth = 0;\n let renderableGlyphCount = 0;\n let canWrap = whiteSpace !== 'nowrap';\n const metricsByFont = new Map(); // fontObj -> metrics\n const typesetStart = now();\n\n // Distribute glyphs into lines based on wrapping\n let lineXOffset = textIndent;\n let prevRunEndX = 0;\n let currentLine = new TextLine();\n const lines = [currentLine];\n runs.forEach(run => {\n const { fontObj } = run;\n const { ascender, descender, unitsPerEm, lineGap, capHeight, xHeight } = fontObj;\n\n // Calculate metrics for each font used\n let fontData = metricsByFont.get(fontObj);\n if (!fontData) {\n // Find conversion between native font units and fontSize units\n const fontSizeMult = fontSize / unitsPerEm;\n\n // Determine appropriate value for 'normal' line height based on the font's actual metrics\n // This does not guarantee individual glyphs won't exceed the line height, e.g. Roboto; should we use yMin/Max instead?\n const calcLineHeight = lineHeight === 'normal' ?\n (ascender - descender + lineGap) * fontSizeMult : lineHeight * fontSize;\n\n // Determine line height and leading adjustments\n const halfLeading = (calcLineHeight - (ascender - descender) * fontSizeMult) / 2;\n const caretHeight = Math.min(calcLineHeight, (ascender - descender) * fontSizeMult);\n const caretTop = (ascender + descender) / 2 * fontSizeMult + caretHeight / 2;\n fontData = {\n index: metricsByFont.size,\n src: fontObj.src,\n fontObj,\n fontSizeMult,\n unitsPerEm,\n ascender: ascender * fontSizeMult,\n descender: descender * fontSizeMult,\n capHeight: capHeight * fontSizeMult,\n xHeight: xHeight * fontSizeMult,\n lineHeight: calcLineHeight,\n baseline: -halfLeading - ascender * fontSizeMult, // baseline offset from top of line height\n // cap: -halfLeading - capHeight * fontSizeMult, // cap from top of line height\n // ex: -halfLeading - xHeight * fontSizeMult, // ex from top of line height\n caretTop,\n caretBottom: caretTop - caretHeight\n };\n metricsByFont.set(fontObj, fontData);\n }\n const { fontSizeMult } = fontData;\n\n const runText = text.slice(run.start, run.end + 1);\n let prevGlyphX, prevGlyphObj;\n fontObj.forEachGlyph(runText, fontSize, letterSpacing, (glyphObj, glyphX, glyphY, charIndex) => {\n glyphX += prevRunEndX;\n charIndex += run.start;\n prevGlyphX = glyphX;\n prevGlyphObj = glyphObj;\n const char = text.charAt(charIndex);\n const glyphWidth = glyphObj.advanceWidth * fontSizeMult;\n const curLineCount = currentLine.count;\n let nextLine;\n\n // Calc isWhitespace and isEmpty once per glyphObj\n if (!('isEmpty' in glyphObj)) {\n glyphObj.isWhitespace = !!char && new RegExp(lineBreakingWhiteSpace).test(char);\n glyphObj.canBreakAfter = !!char && BREAK_AFTER_CHARS.test(char);\n glyphObj.isEmpty = glyphObj.xMin === glyphObj.xMax || glyphObj.yMin === glyphObj.yMax || DEFAULT_IGNORABLE_CHARS.test(char);\n }\n if (!glyphObj.isWhitespace && !glyphObj.isEmpty) {\n renderableGlyphCount++;\n }\n\n // If a non-whitespace character overflows the max width, we need to soft-wrap\n if (canWrap && hasMaxWidth && !glyphObj.isWhitespace && glyphX + glyphWidth + lineXOffset > maxWidth && curLineCount) {\n // If it's the first char after a whitespace, start a new line\n if (currentLine.glyphAt(curLineCount - 1).glyphObj.canBreakAfter) {\n nextLine = new TextLine();\n lineXOffset = -glyphX;\n } else {\n // Back up looking for a whitespace character to wrap at\n for (let i = curLineCount; i--;) {\n // If we got the start of the line there's no soft break point; make hard break if overflowWrap='break-word'\n if (i === 0 && overflowWrap === 'break-word') {\n nextLine = new TextLine();\n lineXOffset = -glyphX;\n break\n }\n // Found a soft break point; move all chars since it to a new line\n else if (currentLine.glyphAt(i).glyphObj.canBreakAfter) {\n nextLine = currentLine.splitAt(i + 1);\n const adjustX = nextLine.glyphAt(0).x;\n lineXOffset -= adjustX;\n for (let j = nextLine.count; j--;) {\n nextLine.glyphAt(j).x -= adjustX;\n }\n break\n }\n }\n }\n if (nextLine) {\n currentLine.isSoftWrapped = true;\n currentLine = nextLine;\n lines.push(currentLine);\n maxLineWidth = maxWidth; //after soft wrapping use maxWidth as calculated width\n }\n }\n\n let fly = currentLine.glyphAt(currentLine.count);\n fly.glyphObj = glyphObj;\n fly.x = glyphX + lineXOffset;\n fly.y = glyphY;\n fly.width = glyphWidth;\n fly.charIndex = charIndex;\n fly.fontData = fontData;\n\n // Handle hard line breaks\n if (char === '\\n') {\n currentLine = new TextLine();\n lines.push(currentLine);\n lineXOffset = -(glyphX + glyphWidth + (letterSpacing * fontSize)) + textIndent;\n }\n });\n // At the end of a run we must capture the x position as the starting point for the next run\n prevRunEndX = prevGlyphX + prevGlyphObj.advanceWidth * fontSizeMult + letterSpacing * fontSize;\n });\n\n // Calculate width/height/baseline of each line (excluding trailing whitespace) and maximum block width\n let totalHeight = 0;\n lines.forEach(line => {\n let isTrailingWhitespace = true;\n for (let i = line.count; i--;) {\n const glyphInfo = line.glyphAt(i);\n // omit trailing whitespace from width calculation\n if (isTrailingWhitespace && !glyphInfo.glyphObj.isWhitespace) {\n line.width = glyphInfo.x + glyphInfo.width;\n if (line.width > maxLineWidth) {\n maxLineWidth = line.width;\n }\n isTrailingWhitespace = false;\n }\n // use the tallest line height, lowest baseline, and highest cap/ex\n let {lineHeight, capHeight, xHeight, baseline} = glyphInfo.fontData;\n if (lineHeight > line.lineHeight) line.lineHeight = lineHeight;\n const baselineDiff = baseline - line.baseline;\n if (baselineDiff < 0) { //shift all metrics down\n line.baseline += baselineDiff;\n line.cap += baselineDiff;\n line.ex += baselineDiff;\n }\n // compare cap/ex based on new lowest baseline\n line.cap = Math.max(line.cap, line.baseline + capHeight);\n line.ex = Math.max(line.ex, line.baseline + xHeight);\n }\n line.baseline -= totalHeight;\n line.cap -= totalHeight;\n line.ex -= totalHeight;\n totalHeight += line.lineHeight;\n });\n\n // Find overall position adjustments for anchoring\n let anchorXOffset = 0;\n let anchorYOffset = 0;\n if (anchorX) {\n if (typeof anchorX === 'number') {\n anchorXOffset = -anchorX;\n }\n else if (typeof anchorX === 'string') {\n anchorXOffset = -maxLineWidth * (\n anchorX === 'left' ? 0 :\n anchorX === 'center' ? 0.5 :\n anchorX === 'right' ? 1 :\n parsePercent(anchorX)\n );\n }\n }\n if (anchorY) {\n if (typeof anchorY === 'number') {\n anchorYOffset = -anchorY;\n }\n else if (typeof anchorY === 'string') {\n anchorYOffset = anchorY === 'top' ? 0 :\n anchorY === 'top-baseline' ? -lines[0].baseline :\n anchorY === 'top-cap' ? -lines[0].cap :\n anchorY === 'top-ex' ? -lines[0].ex :\n anchorY === 'middle' ? totalHeight / 2 :\n anchorY === 'bottom' ? totalHeight :\n anchorY === 'bottom-baseline' ? -lines[lines.length - 1].baseline :\n parsePercent(anchorY) * totalHeight;\n }\n }\n\n if (!metricsOnly) {\n // Resolve bidi levels\n const bidiLevelsResult = bidi.getEmbeddingLevels(text, direction);\n\n // Process each line, applying alignment offsets, adding each glyph to the atlas, and\n // collecting all renderable glyphs into a single collection.\n glyphIds = new Uint16Array(renderableGlyphCount);\n glyphFontIndices = new Uint8Array(renderableGlyphCount);\n glyphPositions = new Float32Array(renderableGlyphCount * 2);\n glyphData = {};\n visibleBounds = [INF, INF, -INF, -INF];\n chunkedBounds = [];\n if (includeCaretPositions) {\n caretPositions = new Float32Array(text.length * 4);\n }\n if (colorRanges) {\n glyphColors = new Uint8Array(renderableGlyphCount * 3);\n }\n let renderableGlyphIndex = 0;\n let prevCharIndex = -1;\n let colorCharIndex = -1;\n let chunk;\n let currentColor;\n lines.forEach((line, lineIndex) => {\n let {count:lineGlyphCount, width:lineWidth} = line;\n\n // Ignore empty lines\n if (lineGlyphCount > 0) {\n // Count trailing whitespaces, we want to ignore these for certain things\n let trailingWhitespaceCount = 0;\n for (let i = lineGlyphCount; i-- && line.glyphAt(i).glyphObj.isWhitespace;) {\n trailingWhitespaceCount++;\n }\n\n // Apply horizontal alignment adjustments\n let lineXOffset = 0;\n let justifyAdjust = 0;\n if (textAlign === 'center') {\n lineXOffset = (maxLineWidth - lineWidth) / 2;\n } else if (textAlign === 'right') {\n lineXOffset = maxLineWidth - lineWidth;\n } else if (textAlign === 'justify' && line.isSoftWrapped) {\n // count non-trailing whitespace characters, and we'll adjust the offsets per character in the next loop\n let whitespaceCount = 0;\n for (let i = lineGlyphCount - trailingWhitespaceCount; i--;) {\n if (line.glyphAt(i).glyphObj.isWhitespace) {\n whitespaceCount++;\n }\n }\n justifyAdjust = (maxLineWidth - lineWidth) / whitespaceCount;\n }\n if (justifyAdjust || lineXOffset) {\n let justifyOffset = 0;\n for (let i = 0; i < lineGlyphCount; i++) {\n let glyphInfo = line.glyphAt(i);\n const glyphObj = glyphInfo.glyphObj;\n glyphInfo.x += lineXOffset + justifyOffset;\n // Expand non-trailing whitespaces for justify alignment\n if (justifyAdjust !== 0 && glyphObj.isWhitespace && i < lineGlyphCount - trailingWhitespaceCount) {\n justifyOffset += justifyAdjust;\n glyphInfo.width += justifyAdjust;\n }\n }\n }\n\n // Perform bidi range flipping\n const flips = bidi.getReorderSegments(\n text, bidiLevelsResult, line.glyphAt(0).charIndex, line.glyphAt(line.count - 1).charIndex\n );\n for (let fi = 0; fi < flips.length; fi++) {\n const [start, end] = flips[fi];\n // Map start/end string indices to indices in the line\n let left = Infinity, right = -Infinity;\n for (let i = 0; i < lineGlyphCount; i++) {\n if (line.glyphAt(i).charIndex >= start) { // gte to handle removed characters\n let startInLine = i, endInLine = i;\n for (; endInLine < lineGlyphCount; endInLine++) {\n let info = line.glyphAt(endInLine);\n if (info.charIndex > end) {\n break\n }\n if (endInLine < lineGlyphCount - trailingWhitespaceCount) { //don't include trailing ws in flip width\n left = Math.min(left, info.x);\n right = Math.max(right, info.x + info.width);\n }\n }\n for (let j = startInLine; j < endInLine; j++) {\n const glyphInfo = line.glyphAt(j);\n glyphInfo.x = right - (glyphInfo.x + glyphInfo.width - left);\n }\n break\n }\n }\n }\n\n // Assemble final data arrays\n let glyphObj;\n const setGlyphObj = g => glyphObj = g;\n for (let i = 0; i < lineGlyphCount; i++) {\n const glyphInfo = line.glyphAt(i);\n glyphObj = glyphInfo.glyphObj;\n const glyphId = glyphObj.index;\n\n // Replace mirrored characters in rtl\n const rtl = bidiLevelsResult.levels[glyphInfo.charIndex] & 1; //odd level means rtl\n if (rtl) {\n const mirrored = bidi.getMirroredCharacter(text[glyphInfo.charIndex]);\n if (mirrored) {\n glyphInfo.fontData.fontObj.forEachGlyph(mirrored, 0, 0, setGlyphObj);\n }\n }\n\n // Add caret positions\n if (includeCaretPositions) {\n const {charIndex, fontData} = glyphInfo;\n const caretLeft = glyphInfo.x + anchorXOffset;\n const caretRight = glyphInfo.x + glyphInfo.width + anchorXOffset;\n caretPositions[charIndex * 4] = rtl ? caretRight : caretLeft; //start edge x\n caretPositions[charIndex * 4 + 1] = rtl ? caretLeft : caretRight; //end edge x\n caretPositions[charIndex * 4 + 2] = line.baseline + fontData.caretBottom + anchorYOffset; //common bottom y\n caretPositions[charIndex * 4 + 3] = line.baseline + fontData.caretTop + anchorYOffset; //common top y\n\n // If we skipped any chars from the previous glyph (due to ligature subs), fill in caret\n // positions for those missing char indices; currently this uses a best-guess by dividing\n // the ligature's width evenly. In the future we may try to use the font's LigatureCaretList\n // table to get better interior caret positions.\n const ligCount = charIndex - prevCharIndex;\n if (ligCount > 1) {\n fillLigatureCaretPositions(caretPositions, prevCharIndex, ligCount);\n }\n prevCharIndex = charIndex;\n }\n\n // Track current color range\n if (colorRanges) {\n const {charIndex} = glyphInfo;\n while(charIndex > colorCharIndex) {\n colorCharIndex++;\n if (colorRanges.hasOwnProperty(colorCharIndex)) {\n currentColor = colorRanges[colorCharIndex];\n }\n }\n }\n\n // Get atlas data for renderable glyphs\n if (!glyphObj.isWhitespace && !glyphObj.isEmpty) {\n const idx = renderableGlyphIndex++;\n const {fontSizeMult, src: fontSrc, index: fontIndex} = glyphInfo.fontData;\n\n // Add this glyph's path data\n const fontGlyphData = glyphData[fontSrc] || (glyphData[fontSrc] = {});\n if (!fontGlyphData[glyphId]) {\n fontGlyphData[glyphId] = {\n path: glyphObj.path,\n pathBounds: [glyphObj.xMin, glyphObj.yMin, glyphObj.xMax, glyphObj.yMax]\n };\n }\n\n // Determine final glyph position and add to glyphPositions array\n const glyphX = glyphInfo.x + anchorXOffset;\n const glyphY = glyphInfo.y + line.baseline + anchorYOffset;\n glyphPositions[idx * 2] = glyphX;\n glyphPositions[idx * 2 + 1] = glyphY;\n\n // Track total visible bounds\n const visX0 = glyphX + glyphObj.xMin * fontSizeMult;\n const visY0 = glyphY + glyphObj.yMin * fontSizeMult;\n const visX1 = glyphX + glyphObj.xMax * fontSizeMult;\n const visY1 = glyphY + glyphObj.yMax * fontSizeMult;\n if (visX0 < visibleBounds[0]) visibleBounds[0] = visX0;\n if (visY0 < visibleBounds[1]) visibleBounds[1] = visY0;\n if (visX1 > visibleBounds[2]) visibleBounds[2] = visX1;\n if (visY1 > visibleBounds[3]) visibleBounds[3] = visY1;\n\n // Track bounding rects for each chunk of N glyphs\n if (idx % chunkedBoundsSize === 0) {\n chunk = {start: idx, end: idx, rect: [INF, INF, -INF, -INF]};\n chunkedBounds.push(chunk);\n }\n chunk.end++;\n const chunkRect = chunk.rect;\n if (visX0 < chunkRect[0]) chunkRect[0] = visX0;\n if (visY0 < chunkRect[1]) chunkRect[1] = visY0;\n if (visX1 > chunkRect[2]) chunkRect[2] = visX1;\n if (visY1 > chunkRect[3]) chunkRect[3] = visY1;\n\n // Add to glyph ids and font indices arrays\n glyphIds[idx] = glyphId;\n glyphFontIndices[idx] = fontIndex;\n\n // Add colors\n if (colorRanges) {\n const start = idx * 3;\n glyphColors[start] = currentColor >> 16 & 255;\n glyphColors[start + 1] = currentColor >> 8 & 255;\n glyphColors[start + 2] = currentColor & 255;\n }\n }\n }\n }\n });\n\n // Fill in remaining caret positions in case the final character was a ligature\n if (caretPositions) {\n const ligCount = text.length - prevCharIndex;\n if (ligCount > 1) {\n fillLigatureCaretPositions(caretPositions, prevCharIndex, ligCount);\n }\n }\n }\n\n // Assemble final data about each font used\n const fontData = [];\n metricsByFont.forEach(({index, src, unitsPerEm, ascender, descender, lineHeight, capHeight, xHeight}) => {\n fontData[index] = {src, unitsPerEm, ascender, descender, lineHeight, capHeight, xHeight};\n });\n\n // Timing stats\n timings.typesetting = now() - typesetStart;\n\n callback({\n glyphIds, //id for each glyph, specific to that glyph's font\n glyphFontIndices, //index into fontData for each glyph\n glyphPositions, //x,y of each glyph's origin in layout\n glyphData, //dict holding data about each glyph appearing in the text\n fontData, //data about each font used in the text\n caretPositions, //startX,endX,bottomY caret positions for each char\n // caretHeight, //height of cursor from bottom to top - todo per glyph?\n glyphColors, //color for each glyph, if color ranges supplied\n chunkedBounds, //total rects per (n=chunkedBoundsSize) consecutive glyphs\n fontSize, //calculated em height\n topBaseline: anchorYOffset + lines[0].baseline, //y coordinate of the top line's baseline\n blockBounds: [ //bounds for the whole block of text, including vertical padding for lineHeight\n anchorXOffset,\n anchorYOffset - totalHeight,\n anchorXOffset + maxLineWidth,\n anchorYOffset\n ],\n visibleBounds, //total bounds of visible text paths, may be larger or smaller than blockBounds\n timings\n });\n });\n }\n\n\n /**\n * For a given text string and font parameters, determine the resulting block dimensions\n * after wrapping for the given maxWidth.\n * @param args\n * @param callback\n */\n function measure(args, callback) {\n typeset({...args, metricsOnly: true}, (result) => {\n const [x0, y0, x1, y1] = result.blockBounds;\n callback({\n width: x1 - x0,\n height: y1 - y0\n });\n });\n }\n\n function parsePercent(str) {\n let match = str.match(/^([\\d.]+)%$/);\n let pct = match ? parseFloat(match[1]) : NaN;\n return isNaN(pct) ? 0 : pct / 100\n }\n\n function fillLigatureCaretPositions(caretPositions, ligStartIndex, ligCount) {\n const ligStartX = caretPositions[ligStartIndex * 4];\n const ligEndX = caretPositions[ligStartIndex * 4 + 1];\n const ligBottom = caretPositions[ligStartIndex * 4 + 2];\n const ligTop = caretPositions[ligStartIndex * 4 + 3];\n const guessedAdvanceX = (ligEndX - ligStartX) / ligCount;\n for (let i = 0; i < ligCount; i++) {\n const startIndex = (ligStartIndex + i) * 4;\n caretPositions[startIndex] = ligStartX + guessedAdvanceX * i;\n caretPositions[startIndex + 1] = ligStartX + guessedAdvanceX * (i + 1);\n caretPositions[startIndex + 2] = ligBottom;\n caretPositions[startIndex + 3] = ligTop;\n }\n }\n\n function now() {\n return (self.performance || Date).now()\n }\n\n // Array-backed structure for a single line's glyphs data\n function TextLine() {\n this.data = [];\n }\n const textLineProps = ['glyphObj', 'x', 'y', 'width', 'charIndex', 'fontData'];\n TextLine.prototype = {\n width: 0,\n lineHeight: 0,\n baseline: 0,\n cap: 0,\n ex: 0,\n isSoftWrapped: false,\n get count() {\n return Math.ceil(this.data.length / textLineProps.length)\n },\n glyphAt(i) {\n let fly = TextLine.flyweight;\n fly.data = this.data;\n fly.index = i;\n return fly\n },\n splitAt(i) {\n let newLine = new TextLine();\n newLine.data = this.data.splice(i * textLineProps.length);\n return newLine\n }\n };\n TextLine.flyweight = textLineProps.reduce((obj, prop, i, all) => {\n Object.defineProperty(obj, prop, {\n get() {\n return this.data[this.index * textLineProps.length + i]\n },\n set(val) {\n this.data[this.index * textLineProps.length + i] = val;\n }\n });\n return obj\n }, {data: null, index: 0});\n\n\n return {\n typeset,\n measure,\n }\n}\n\nconst now = () => (self.performance || Date).now();\n\nconst mainThreadGenerator = /*#__PURE__*/ createSDFGenerator();\n\nlet warned;\n\n/**\n * Generate an SDF texture image for a single glyph path, placing the result into a webgl canvas at a\n * given location and channel. Utilizes the webgl-sdf-generator external package for GPU-accelerated SDF\n * generation when supported.\n */\nfunction generateSDF(width, height, path, viewBox, distance, exponent, canvas, x, y, channel, useWebGL = true) {\n // Allow opt-out\n if (!useWebGL) {\n return generateSDF_JS_Worker(width, height, path, viewBox, distance, exponent, canvas, x, y, channel)\n }\n\n // Attempt GPU-accelerated generation first\n return generateSDF_GL(width, height, path, viewBox, distance, exponent, canvas, x, y, channel).then(\n null,\n err => {\n // WebGL failed either due to a hard error or unexpected results; fall back to JS in workers\n if (!warned) {\n console.warn(`WebGL SDF generation failed, falling back to JS`, err);\n warned = true;\n }\n return generateSDF_JS_Worker(width, height, path, viewBox, distance, exponent, canvas, x, y, channel)\n }\n )\n}\n\nconst queue = [];\nconst chunkTimeBudget = 5; // ms\nlet timer = 0;\n\nfunction nextChunk() {\n const start = now();\n while (queue.length && now() - start < chunkTimeBudget) {\n queue.shift()();\n }\n timer = queue.length ? setTimeout(nextChunk, 0) : 0;\n}\n\n/**\n * WebGL-based implementation executed on the main thread. Requests are executed in time-bounded\n * macrotask chunks to allow render frames to execute in between.\n */\nconst generateSDF_GL = (...args) => {\n return new Promise((resolve, reject) => {\n queue.push(() => {\n const start = now();\n try {\n mainThreadGenerator.webgl.generateIntoCanvas(...args);\n resolve({ timing: now() - start });\n } catch (err) {\n reject(err);\n }\n });\n if (!timer) {\n timer = setTimeout(nextChunk, 0);\n }\n })\n};\n\nconst threadCount = 4; // how many workers to spawn\nconst idleTimeout = 2000; // workers will be terminated after being idle this many milliseconds\nconst threads = {};\nlet callNum = 0;\n\n/**\n * Fallback JS-based implementation, fanned out to a number of worker threads for parallelism\n */\nfunction generateSDF_JS_Worker(width, height, path, viewBox, distance, exponent, canvas, x, y, channel) {\n const workerId = 'TroikaTextSDFGenerator_JS_' + ((callNum++) % threadCount);\n let thread = threads[workerId];\n if (!thread) {\n thread = threads[workerId] = {\n workerModule: defineWorkerModule({\n name: workerId,\n workerId,\n dependencies: [\n createSDFGenerator,\n now\n ],\n init(_createSDFGenerator, now) {\n const generate = _createSDFGenerator().javascript.generate;\n return function (...args) {\n const start = now();\n const textureData = generate(...args);\n return {\n textureData,\n timing: now() - start\n }\n }\n },\n getTransferables(result) {\n return [result.textureData.buffer]\n }\n }),\n requests: 0,\n idleTimer: null\n };\n }\n\n thread.requests++;\n clearTimeout(thread.idleTimer);\n return thread.workerModule(width, height, path, viewBox, distance, exponent)\n .then(({ textureData, timing }) => {\n // copy result data into the canvas\n const start = now();\n // expand single-channel data into rgba\n const imageData = new Uint8Array(textureData.length * 4);\n for (let i = 0; i < textureData.length; i++) {\n imageData[i * 4 + channel] = textureData[i];\n }\n mainThreadGenerator.webglUtils.renderImageData(canvas, imageData, x, y, width, height, 1 << (3 - channel));\n timing += now() - start;\n\n // clean up workers after a while\n if (--thread.requests === 0) {\n thread.idleTimer = setTimeout(() => { terminateWorker(workerId); }, idleTimeout);\n }\n return { timing }\n })\n}\n\nfunction warmUpSDFCanvas(canvas) {\n if (!canvas._warm) {\n mainThreadGenerator.webgl.isSupported(canvas);\n canvas._warm = true;\n }\n}\n\nconst resizeWebGLCanvasWithoutClearing = mainThreadGenerator.webglUtils.resizeWebGLCanvasWithoutClearing;\n\nconst CONFIG = {\n defaultFontURL: null,\n unicodeFontsURL: null,\n sdfGlyphSize: 64,\n sdfMargin: 1 / 16,\n sdfExponent: 9,\n textureWidth: 2048,\n useWorker: true,\n};\nconst tempColor = /*#__PURE__*/new Color();\nlet hasRequested = false;\n\nfunction now$1() {\n return (self.performance || Date).now()\n}\n\n/**\n * Customizes the text builder configuration. This must be called prior to the first font processing\n * request, and applies to all fonts.\n *\n * @param {String} config.defaultFontURL - The URL of the default font to use for text processing\n * requests, in case none is specified or the specifiede font fails to load or parse.\n * Defaults to \"Roboto Regular\" from Google Fonts.\n * @param {String} config.unicodeFontsURL - A custom location for the fallback unicode-font-resolver\n * data and font files, if you don't want to use the default CDN. See\n * https://github.com/lojjic/unicode-font-resolver for details. It can also be\n * configured per text instance, but this lets you do it once globally.\n * @param {Number} config.sdfGlyphSize - The default size of each glyph's SDF (signed distance field)\n * texture used for rendering. Must be a power-of-two number, and applies to all fonts,\n * but note that this can also be overridden per call to `getTextRenderInfo()`.\n * Larger sizes can improve the quality of glyph rendering by increasing the sharpness\n * of corners and preventing loss of very thin lines, at the expense of memory. Defaults\n * to 64 which is generally a good balance of size and quality.\n * @param {Number} config.sdfExponent - The exponent used when encoding the SDF values. A higher exponent\n * shifts the encoded 8-bit values to achieve higher precision/accuracy at texels nearer\n * the glyph's path, with lower precision further away. Defaults to 9.\n * @param {Number} config.sdfMargin - How much space to reserve in the SDF as margin outside the glyph's\n * path, as a percentage of the SDF width. A larger margin increases the quality of\n * extruded glyph outlines, but decreases the precision available for the glyph itself.\n * Defaults to 1/16th of the glyph size.\n * @param {Number} config.textureWidth - The width of the SDF texture; must be a power of 2. Defaults to\n * 2048 which is a safe maximum texture dimension according to the stats at\n * https://webglstats.com/webgl/parameter/MAX_TEXTURE_SIZE and should allow for a\n * reasonably large number of glyphs (default glyph size of 64^2 and safe texture size of\n * 2048^2, times 4 channels, allows for 4096 glyphs.) This can be increased if you need to\n * increase the glyph size and/or have an extraordinary number of glyphs.\n * @param {Boolean} config.useWorker - Whether to run typesetting in a web worker. Defaults to true.\n */\nfunction configureTextBuilder(config) {\n if (hasRequested) {\n console.warn('configureTextBuilder called after first font request; will be ignored.');\n } else {\n assign(CONFIG, config);\n }\n}\n\n/**\n * Repository for all font SDF atlas textures and their glyph mappings. There is a separate atlas for\n * each sdfGlyphSize. Each atlas has a single Texture that holds all glyphs for all fonts.\n *\n * {\n * [sdfGlyphSize]: {\n * glyphCount: number,\n * sdfGlyphSize: number,\n * sdfTexture: Texture,\n * sdfCanvas: HTMLCanvasElement,\n * contextLost: boolean,\n * glyphsByFont: Map>\n * }\n * }\n */\nconst atlases = Object.create(null);\n\n/**\n * @typedef {object} TroikaTextRenderInfo - Format of the result from `getTextRenderInfo`.\n * @property {TypesetParams} parameters - The normalized input arguments to the render call.\n * @property {Texture} sdfTexture - The SDF atlas texture.\n * @property {number} sdfGlyphSize - The size of each glyph's SDF; see `configureTextBuilder`.\n * @property {number} sdfExponent - The exponent used in encoding the SDF's values; see `configureTextBuilder`.\n * @property {Float32Array} glyphBounds - List of [minX, minY, maxX, maxY] quad bounds for each glyph.\n * @property {Float32Array} glyphAtlasIndices - List holding each glyph's index in the SDF atlas.\n * @property {Uint8Array} [glyphColors] - List holding each glyph's [r, g, b] color, if `colorRanges` was supplied.\n * @property {Float32Array} [caretPositions] - A list of caret positions for all characters in the string; each is\n * four elements: the starting X, the ending X, the bottom Y, and the top Y for the caret.\n * @property {number} [caretHeight] - An appropriate height for all selection carets.\n * @property {number} ascender - The font's ascender metric.\n * @property {number} descender - The font's descender metric.\n * @property {number} capHeight - The font's cap height metric, based on the height of Latin capital letters.\n * @property {number} xHeight - The font's x height metric, based on the height of Latin lowercase letters.\n * @property {number} lineHeight - The final computed lineHeight measurement.\n * @property {number} topBaseline - The y position of the top line's baseline.\n * @property {Array} blockBounds - The total [minX, minY, maxX, maxY] rect of the whole text block;\n * this can include extra vertical space beyond the visible glyphs due to lineHeight, and is\n * equivalent to the dimensions of a block-level text element in CSS.\n * @property {Array} visibleBounds - The total [minX, minY, maxX, maxY] rect of the whole text block;\n * unlike `blockBounds` this is tightly wrapped to the visible glyph paths.\n * @property {Array} chunkedBounds - List of bounding rects for each consecutive set of N glyphs,\n * in the format `{start:N, end:N, rect:[minX, minY, maxX, maxY]}`.\n * @property {object} timings - Timing info for various parts of the rendering logic including SDF\n * generation, typesetting, etc.\n * @frozen\n */\n\n/**\n * @callback getTextRenderInfo~callback\n * @param {TroikaTextRenderInfo} textRenderInfo\n */\n\n/**\n * Main entry point for requesting the data needed to render a text string with given font parameters.\n * This is an asynchronous call, performing most of the logic in a web worker thread.\n * @param {TypesetParams} args\n * @param {getTextRenderInfo~callback} callback\n */\nfunction getTextRenderInfo(args, callback) {\n hasRequested = true;\n args = assign({}, args);\n const totalStart = now$1();\n\n // Convert relative URL to absolute so it can be resolved in the worker, and add fallbacks.\n // In the future we'll allow args.font to be a list with unicode ranges too.\n const { defaultFontURL } = CONFIG;\n const fonts = [];\n if (defaultFontURL) {\n fonts.push({label: 'default', src: toAbsoluteURL(defaultFontURL)});\n }\n if (args.font) {\n fonts.push({label: 'user', src: toAbsoluteURL(args.font)});\n }\n args.font = fonts;\n\n // Normalize text to a string\n args.text = '' + args.text;\n\n args.sdfGlyphSize = args.sdfGlyphSize || CONFIG.sdfGlyphSize;\n args.unicodeFontsURL = args.unicodeFontsURL || CONFIG.unicodeFontsURL;\n\n // Normalize colors\n if (args.colorRanges != null) {\n let colors = {};\n for (let key in args.colorRanges) {\n if (args.colorRanges.hasOwnProperty(key)) {\n let val = args.colorRanges[key];\n if (typeof val !== 'number') {\n val = tempColor.set(val).getHex();\n }\n colors[key] = val;\n }\n }\n args.colorRanges = colors;\n }\n\n Object.freeze(args);\n\n // Init the atlas if needed\n const {textureWidth, sdfExponent} = CONFIG;\n const {sdfGlyphSize} = args;\n const glyphsPerRow = (textureWidth / sdfGlyphSize * 4);\n let atlas = atlases[sdfGlyphSize];\n if (!atlas) {\n const canvas = document.createElement('canvas');\n canvas.width = textureWidth;\n canvas.height = sdfGlyphSize * 256 / glyphsPerRow; // start tall enough to fit 256 glyphs\n atlas = atlases[sdfGlyphSize] = {\n glyphCount: 0,\n sdfGlyphSize,\n sdfCanvas: canvas,\n sdfTexture: new Texture(\n canvas,\n undefined,\n undefined,\n undefined,\n LinearFilter,\n LinearFilter\n ),\n contextLost: false,\n glyphsByFont: new Map()\n };\n atlas.sdfTexture.generateMipmaps = false;\n initContextLossHandling(atlas);\n }\n\n const {sdfTexture, sdfCanvas} = atlas;\n\n // Issue request to the typesetting engine in the worker\n const typeset = CONFIG.useWorker ? typesetInWorker : typesetOnMainThread;\n typeset(args).then(result => {\n const {glyphIds, glyphFontIndices, fontData, glyphPositions, fontSize, timings} = result;\n const neededSDFs = [];\n const glyphBounds = new Float32Array(glyphIds.length * 4);\n let boundsIdx = 0;\n let positionsIdx = 0;\n const quadsStart = now$1();\n\n const fontGlyphMaps = fontData.map(font => {\n let map = atlas.glyphsByFont.get(font.src);\n if (!map) {\n atlas.glyphsByFont.set(font.src, map = new Map());\n }\n return map\n });\n\n glyphIds.forEach((glyphId, i) => {\n const fontIndex = glyphFontIndices[i];\n const {src: fontSrc, unitsPerEm} = fontData[fontIndex];\n let glyphInfo = fontGlyphMaps[fontIndex].get(glyphId);\n\n // If this is a glyphId not seen before, add it to the atlas\n if (!glyphInfo) {\n const {path, pathBounds} = result.glyphData[fontSrc][glyphId];\n\n // Margin around path edges in SDF, based on a percentage of the glyph's max dimension.\n // Note we add an extra 0.5 px over the configured value because the outer 0.5 doesn't contain\n // useful interpolated values and will be ignored anyway.\n const fontUnitsMargin = Math.max(pathBounds[2] - pathBounds[0], pathBounds[3] - pathBounds[1])\n / sdfGlyphSize * (CONFIG.sdfMargin * sdfGlyphSize + 0.5);\n\n const atlasIndex = atlas.glyphCount++;\n const sdfViewBox = [\n pathBounds[0] - fontUnitsMargin,\n pathBounds[1] - fontUnitsMargin,\n pathBounds[2] + fontUnitsMargin,\n pathBounds[3] + fontUnitsMargin,\n ];\n fontGlyphMaps[fontIndex].set(glyphId, (glyphInfo = { path, atlasIndex, sdfViewBox }));\n\n // Collect those that need SDF generation\n neededSDFs.push(glyphInfo);\n }\n\n // Calculate bounds for renderable quads\n // TODO can we get this back off the main thread?\n const {sdfViewBox} = glyphInfo;\n const posX = glyphPositions[positionsIdx++];\n const posY = glyphPositions[positionsIdx++];\n const fontSizeMult = fontSize / unitsPerEm;\n glyphBounds[boundsIdx++] = posX + sdfViewBox[0] * fontSizeMult;\n glyphBounds[boundsIdx++] = posY + sdfViewBox[1] * fontSizeMult;\n glyphBounds[boundsIdx++] = posX + sdfViewBox[2] * fontSizeMult;\n glyphBounds[boundsIdx++] = posY + sdfViewBox[3] * fontSizeMult;\n\n // Convert glyphId to SDF index for the shader\n glyphIds[i] = glyphInfo.atlasIndex;\n });\n timings.quads = (timings.quads || 0) + (now$1() - quadsStart);\n\n const sdfStart = now$1();\n timings.sdf = {};\n\n // Grow the texture height by power of 2 if needed\n const currentHeight = sdfCanvas.height;\n const neededRows = Math.ceil(atlas.glyphCount / glyphsPerRow);\n const neededHeight = Math.pow(2, Math.ceil(Math.log2(neededRows * sdfGlyphSize)));\n if (neededHeight > currentHeight) {\n // Since resizing the canvas clears its render buffer, it needs special handling to copy the old contents over\n console.info(`Increasing SDF texture size ${currentHeight}->${neededHeight}`);\n resizeWebGLCanvasWithoutClearing(sdfCanvas, textureWidth, neededHeight);\n // As of Three r136 textures cannot be resized once they're allocated on the GPU, we must dispose to reallocate it\n sdfTexture.dispose();\n }\n\n Promise.all(neededSDFs.map(glyphInfo =>\n generateGlyphSDF(glyphInfo, atlas, args.gpuAccelerateSDF).then(({timing}) => {\n timings.sdf[glyphInfo.atlasIndex] = timing;\n })\n )).then(() => {\n if (neededSDFs.length && !atlas.contextLost) {\n safariPre15Workaround(atlas);\n sdfTexture.needsUpdate = true;\n }\n timings.sdfTotal = now$1() - sdfStart;\n timings.total = now$1() - totalStart;\n // console.log(`SDF - ${timings.sdfTotal}, Total - ${timings.total - timings.fontLoad}`)\n\n // Invoke callback with the text layout arrays and updated texture\n callback(Object.freeze({\n parameters: args,\n sdfTexture,\n sdfGlyphSize,\n sdfExponent,\n glyphBounds,\n glyphAtlasIndices: glyphIds,\n glyphColors: result.glyphColors,\n caretPositions: result.caretPositions,\n chunkedBounds: result.chunkedBounds,\n ascender: result.ascender,\n descender: result.descender,\n lineHeight: result.lineHeight,\n capHeight: result.capHeight,\n xHeight: result.xHeight,\n topBaseline: result.topBaseline,\n blockBounds: result.blockBounds,\n visibleBounds: result.visibleBounds,\n timings: result.timings,\n }));\n });\n });\n\n // While the typesetting request is being handled, go ahead and make sure the atlas canvas context is\n // \"warmed up\"; the first request will be the longest due to shader program compilation so this gets\n // a head start on that process before SDFs actually start getting processed.\n Promise.resolve().then(() => {\n if (!atlas.contextLost) {\n warmUpSDFCanvas(sdfCanvas);\n }\n });\n}\n\nfunction generateGlyphSDF({path, atlasIndex, sdfViewBox}, {sdfGlyphSize, sdfCanvas, contextLost}, useGPU) {\n if (contextLost) {\n // If the context is lost there's nothing we can do, just quit silently and let it\n // get regenerated when the context is restored\n return Promise.resolve({timing: -1})\n }\n const {textureWidth, sdfExponent} = CONFIG;\n const maxDist = Math.max(sdfViewBox[2] - sdfViewBox[0], sdfViewBox[3] - sdfViewBox[1]);\n const squareIndex = Math.floor(atlasIndex / 4);\n const x = squareIndex % (textureWidth / sdfGlyphSize) * sdfGlyphSize;\n const y = Math.floor(squareIndex / (textureWidth / sdfGlyphSize)) * sdfGlyphSize;\n const channel = atlasIndex % 4;\n return generateSDF(sdfGlyphSize, sdfGlyphSize, path, sdfViewBox, maxDist, sdfExponent, sdfCanvas, x, y, channel, useGPU)\n}\n\nfunction initContextLossHandling(atlas) {\n const canvas = atlas.sdfCanvas;\n\n /*\n // Begin context loss simulation\n if (!window.WebGLDebugUtils) {\n let script = document.getElementById('WebGLDebugUtilsScript')\n if (!script) {\n script = document.createElement('script')\n script.id = 'WebGLDebugUtils'\n document.head.appendChild(script)\n script.src = 'https://cdn.jsdelivr.net/gh/KhronosGroup/WebGLDeveloperTools@b42e702/src/debug/webgl-debug.js'\n }\n script.addEventListener('load', () => {\n initContextLossHandling(atlas)\n })\n return\n }\n window.WebGLDebugUtils.makeLostContextSimulatingCanvas(canvas)\n canvas.loseContextInNCalls(500)\n canvas.addEventListener('webglcontextrestored', (event) => {\n canvas.loseContextInNCalls(5000)\n })\n // End context loss simulation\n */\n\n canvas.addEventListener('webglcontextlost', (event) => {\n console.log('Context Lost', event);\n event.preventDefault();\n atlas.contextLost = true;\n });\n canvas.addEventListener('webglcontextrestored', (event) => {\n console.log('Context Restored', event);\n atlas.contextLost = false;\n // Regenerate all glyphs into the restored canvas:\n const promises = [];\n atlas.glyphsByFont.forEach(glyphMap => {\n glyphMap.forEach(glyph => {\n promises.push(generateGlyphSDF(glyph, atlas, true));\n });\n });\n Promise.all(promises).then(() => {\n safariPre15Workaround(atlas);\n atlas.sdfTexture.needsUpdate = true;\n });\n });\n}\n\n/**\n * Preload a given font and optionally pre-generate glyph SDFs for one or more character sequences.\n * This can be useful to avoid long pauses when first showing text in a scene, by preloading the\n * needed fonts and glyphs up front along with other assets.\n *\n * @param {object} options\n * @param {string} options.font - URL of the font file to preload. If not given, the default font will\n * be loaded.\n * @param {string|string[]} options.characters - One or more character sequences for which to pre-\n * generate glyph SDFs. Note that this will honor ligature substitution, so you may need\n * to specify ligature sequences in addition to their individual characters to get all\n * possible glyphs, e.g. `[\"t\", \"h\", \"th\"]` to get the \"t\" and \"h\" glyphs plus the \"th\" ligature.\n * @param {number} options.sdfGlyphSize - The size at which to prerender the SDF textures for the\n * specified `characters`.\n * @param {function} callback - A function that will be called when the preloading is complete.\n */\nfunction preloadFont({font, characters, sdfGlyphSize}, callback) {\n let text = Array.isArray(characters) ? characters.join('\\n') : '' + characters;\n getTextRenderInfo({ font, sdfGlyphSize, text }, callback);\n}\n\n\n// Local assign impl so we don't have to import troika-core\nfunction assign(toObj, fromObj) {\n for (let key in fromObj) {\n if (fromObj.hasOwnProperty(key)) {\n toObj[key] = fromObj[key];\n }\n }\n return toObj\n}\n\n// Utility for making URLs absolute\nlet linkEl;\nfunction toAbsoluteURL(path) {\n if (!linkEl) {\n linkEl = typeof document === 'undefined' ? {} : document.createElement('a');\n }\n linkEl.href = path;\n return linkEl.href\n}\n\n/**\n * Safari < v15 seems unable to use the SDF webgl canvas as a texture. This applies a workaround\n * where it reads the pixels out of that canvas and uploads them as a data texture instead, at\n * a slight performance cost.\n */\nfunction safariPre15Workaround(atlas) {\n // Use createImageBitmap support as a proxy for Safari<15, all other mainstream browsers\n // have supported it for a long while so any false positives should be minimal.\n if (typeof createImageBitmap !== 'function') {\n console.info('Safari<15: applying SDF canvas workaround');\n const {sdfCanvas, sdfTexture} = atlas;\n const {width, height} = sdfCanvas;\n const gl = atlas.sdfCanvas.getContext('webgl');\n let pixels = sdfTexture.image.data;\n if (!pixels || pixels.length !== width * height * 4) {\n pixels = new Uint8Array(width * height * 4);\n sdfTexture.image = {width, height, data: pixels};\n sdfTexture.flipY = false;\n sdfTexture.isDataTexture = true;\n }\n gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\n }\n}\n\nconst typesetterWorkerModule = /*#__PURE__*/defineWorkerModule({\n name: 'Typesetter',\n dependencies: [\n createTypesetter,\n fontResolverWorkerModule,\n bidiFactory,\n ],\n init(createTypesetter, fontResolver, bidiFactory) {\n return createTypesetter(fontResolver, bidiFactory())\n }\n});\n\nconst typesetInWorker = /*#__PURE__*/defineWorkerModule({\n name: 'Typesetter',\n dependencies: [\n typesetterWorkerModule,\n ],\n init(typesetter) {\n return function(args) {\n return new Promise(resolve => {\n typesetter.typeset(args, resolve);\n })\n }\n },\n getTransferables(result) {\n // Mark array buffers as transferable to avoid cloning during postMessage\n const transferables = [];\n for (let p in result) {\n if (result[p] && result[p].buffer) {\n transferables.push(result[p].buffer);\n }\n }\n return transferables\n }\n});\n\nconst typesetOnMainThread = typesetInWorker.onMainThread;\n\nfunction dumpSDFTextures() {\n Object.keys(atlases).forEach(size => {\n const canvas = atlases[size].sdfCanvas;\n const {width, height} = canvas;\n console.log(\"%c.\", `\n background: url(${canvas.toDataURL()});\n background-size: ${width}px ${height}px;\n color: transparent;\n font-size: 0;\n line-height: ${height}px;\n padding-left: ${width}px;\n `);\n });\n}\n\nconst templateGeometries = {};\n\nfunction getTemplateGeometry(detail) {\n let geom = templateGeometries[detail];\n if (!geom) {\n geom = templateGeometries[detail] = new PlaneGeometry(1, 1, detail, detail).translate(0.5, 0.5, 0);\n }\n return geom\n}\n\nconst glyphBoundsAttrName = 'aTroikaGlyphBounds';\nconst glyphIndexAttrName = 'aTroikaGlyphIndex';\nconst glyphColorAttrName = 'aTroikaGlyphColor';\n\n/**\n@class GlyphsGeometry\n\nA specialized Geometry for rendering a set of text glyphs. Uses InstancedBufferGeometry to\nrender the glyphs using GPU instancing of a single quad, rather than constructing a whole\ngeometry with vertices, for much smaller attribute arraybuffers according to this math:\n\n Where N = number of glyphs...\n\n Instanced:\n - position: 4 * 3\n - index: 2 * 3\n - normal: 4 * 3\n - uv: 4 * 2\n - glyph x/y bounds: N * 4\n - glyph indices: N * 1\n = 5N + 38\n\n Non-instanced:\n - position: N * 4 * 3\n - index: N * 2 * 3\n - normal: N * 4 * 3\n - uv: N * 4 * 2\n - glyph indices: N * 1\n = 39N\n\nA downside of this is the rare-but-possible lack of the instanced arrays extension,\nwhich we could potentially work around with a fallback non-instanced implementation.\n\n*/\nclass GlyphsGeometry extends InstancedBufferGeometry {\n constructor() {\n super();\n\n this.detail = 1;\n this.curveRadius = 0;\n\n // Define groups for rendering text outline as a separate pass; these will only\n // be used when the `material` getter returns an array, i.e. outlineWidth > 0.\n this.groups = [\n {start: 0, count: Infinity, materialIndex: 0},\n {start: 0, count: Infinity, materialIndex: 1}\n ];\n\n // Preallocate empty bounding objects\n this.boundingSphere = new Sphere();\n this.boundingBox = new Box3();\n }\n\n computeBoundingSphere () {\n // No-op; we'll sync the boundingSphere proactively when needed.\n }\n\n computeBoundingBox() {\n // No-op; we'll sync the boundingBox proactively when needed.\n }\n\n set detail(detail) {\n if (detail !== this._detail) {\n this._detail = detail;\n if (typeof detail !== 'number' || detail < 1) {\n detail = 1;\n }\n let tpl = getTemplateGeometry(detail)\n ;['position', 'normal', 'uv'].forEach(attr => {\n this.attributes[attr] = tpl.attributes[attr].clone();\n });\n this.setIndex(tpl.getIndex().clone());\n }\n }\n get detail() {\n return this._detail\n }\n\n set curveRadius(r) {\n if (r !== this._curveRadius) {\n this._curveRadius = r;\n this._updateBounds();\n }\n }\n get curveRadius() {\n return this._curveRadius\n }\n\n /**\n * Update the geometry for a new set of glyphs.\n * @param {Float32Array} glyphBounds - An array holding the planar bounds for all glyphs\n * to be rendered, 4 entries for each glyph: x1,x2,y1,y1\n * @param {Float32Array} glyphAtlasIndices - An array holding the index of each glyph within\n * the SDF atlas texture.\n * @param {Array} blockBounds - An array holding the [minX, minY, maxX, maxY] across all glyphs\n * @param {Array} [chunkedBounds] - An array of objects describing bounds for each chunk of N\n * consecutive glyphs: `{start:N, end:N, rect:[minX, minY, maxX, maxY]}`. This can be\n * used with `applyClipRect` to choose an optimized `instanceCount`.\n * @param {Uint8Array} [glyphColors] - An array holding r,g,b values for each glyph.\n */\n updateGlyphs(glyphBounds, glyphAtlasIndices, blockBounds, chunkedBounds, glyphColors) {\n // Update the instance attributes\n this.updateAttributeData(glyphBoundsAttrName, glyphBounds, 4);\n this.updateAttributeData(glyphIndexAttrName, glyphAtlasIndices, 1);\n this.updateAttributeData(glyphColorAttrName, glyphColors, 3);\n this._blockBounds = blockBounds;\n this._chunkedBounds = chunkedBounds;\n this.instanceCount = glyphAtlasIndices.length;\n this._updateBounds();\n }\n\n _updateBounds() {\n const bounds = this._blockBounds;\n if (bounds) {\n const { curveRadius, boundingBox: bbox } = this;\n if (curveRadius) {\n const { PI, floor, min, max, sin, cos } = Math;\n const halfPi = PI / 2;\n const twoPi = PI * 2;\n const absR = Math.abs(curveRadius);\n const leftAngle = bounds[0] / absR;\n const rightAngle = bounds[2] / absR;\n const minX = floor((leftAngle + halfPi) / twoPi) !== floor((rightAngle + halfPi) / twoPi)\n ? -absR : min(sin(leftAngle) * absR, sin(rightAngle) * absR);\n const maxX = floor((leftAngle - halfPi) / twoPi) !== floor((rightAngle - halfPi) / twoPi)\n ? absR : max(sin(leftAngle) * absR, sin(rightAngle) * absR);\n const maxZ = floor((leftAngle + PI) / twoPi) !== floor((rightAngle + PI) / twoPi)\n ? absR * 2 : max(absR - cos(leftAngle) * absR, absR - cos(rightAngle) * absR);\n bbox.min.set(minX, bounds[1], curveRadius < 0 ? -maxZ : 0);\n bbox.max.set(maxX, bounds[3], curveRadius < 0 ? 0 : maxZ);\n } else {\n bbox.min.set(bounds[0], bounds[1], 0);\n bbox.max.set(bounds[2], bounds[3], 0);\n }\n bbox.getBoundingSphere(this.boundingSphere);\n }\n }\n\n /**\n * Given a clipping rect, and the chunkedBounds from the last updateGlyphs call, choose the lowest\n * `instanceCount` that will show all glyphs within the clipped view. This is an optimization\n * for long blocks of text that are clipped, to skip vertex shader evaluation for glyphs that would\n * be clipped anyway.\n *\n * Note that since `drawElementsInstanced[ANGLE]` only accepts an instance count and not a starting\n * offset, this optimization becomes less effective as the clipRect moves closer to the end of the\n * text block. We could fix that by switching from instancing to a full geometry with a drawRange,\n * but at the expense of much larger attribute buffers (see classdoc above.)\n *\n * @param {Vector4} clipRect\n */\n applyClipRect(clipRect) {\n let count = this.getAttribute(glyphIndexAttrName).count;\n let chunks = this._chunkedBounds;\n if (chunks) {\n for (let i = chunks.length; i--;) {\n count = chunks[i].end;\n let rect = chunks[i].rect;\n // note: both rects are l-b-r-t\n if (rect[1] < clipRect.w && rect[3] > clipRect.y && rect[0] < clipRect.z && rect[2] > clipRect.x) {\n break\n }\n }\n }\n this.instanceCount = count;\n }\n\n /**\n * Utility for updating instance attributes with automatic resizing\n */\n updateAttributeData(attrName, newArray, itemSize) {\n const attr = this.getAttribute(attrName);\n if (newArray) {\n // If length isn't changing, just update the attribute's array data\n if (attr && attr.array.length === newArray.length) {\n attr.array.set(newArray);\n attr.needsUpdate = true;\n } else {\n this.setAttribute(attrName, new InstancedBufferAttribute(newArray, itemSize));\n // If the new attribute has a different size, we also have to (as of r117) manually clear the\n // internal cached max instance count. See https://github.com/mrdoob/three.js/issues/19706\n // It's unclear if this is a threejs bug or a truly unsupported scenario; discussion in\n // that ticket is ambiguous as to whether replacing a BufferAttribute with one of a\n // different size is supported, but https://github.com/mrdoob/three.js/pull/17418 strongly\n // implies it should be supported. It's possible we need to\n delete this._maxInstanceCount; //for r117+, could be fragile\n this.dispose(); //for r118+, more robust feeling, but more heavy-handed than I'd like\n }\n } else if (attr) {\n this.deleteAttribute(attrName);\n }\n }\n}\n\n// language=GLSL\nconst VERTEX_DEFS = `\nuniform vec2 uTroikaSDFTextureSize;\nuniform float uTroikaSDFGlyphSize;\nuniform vec4 uTroikaTotalBounds;\nuniform vec4 uTroikaClipRect;\nuniform mat3 uTroikaOrient;\nuniform bool uTroikaUseGlyphColors;\nuniform float uTroikaEdgeOffset;\nuniform float uTroikaBlurRadius;\nuniform vec2 uTroikaPositionOffset;\nuniform float uTroikaCurveRadius;\nattribute vec4 aTroikaGlyphBounds;\nattribute float aTroikaGlyphIndex;\nattribute vec3 aTroikaGlyphColor;\nvarying vec2 vTroikaGlyphUV;\nvarying vec4 vTroikaTextureUVBounds;\nvarying float vTroikaTextureChannel;\nvarying vec3 vTroikaGlyphColor;\nvarying vec2 vTroikaGlyphDimensions;\n`;\n\n// language=GLSL prefix=\"void main() {\" suffix=\"}\"\nconst VERTEX_TRANSFORM = `\nvec4 bounds = aTroikaGlyphBounds;\nbounds.xz += uTroikaPositionOffset.x;\nbounds.yw -= uTroikaPositionOffset.y;\n\nvec4 outlineBounds = vec4(\n bounds.xy - uTroikaEdgeOffset - uTroikaBlurRadius,\n bounds.zw + uTroikaEdgeOffset + uTroikaBlurRadius\n);\nvec4 clippedBounds = vec4(\n clamp(outlineBounds.xy, uTroikaClipRect.xy, uTroikaClipRect.zw),\n clamp(outlineBounds.zw, uTroikaClipRect.xy, uTroikaClipRect.zw)\n);\n\nvec2 clippedXY = (mix(clippedBounds.xy, clippedBounds.zw, position.xy) - bounds.xy) / (bounds.zw - bounds.xy);\n\nposition.xy = mix(bounds.xy, bounds.zw, clippedXY);\n\nuv = (position.xy - uTroikaTotalBounds.xy) / (uTroikaTotalBounds.zw - uTroikaTotalBounds.xy);\n\nfloat rad = uTroikaCurveRadius;\nif (rad != 0.0) {\n float angle = position.x / rad;\n position.xz = vec2(sin(angle) * rad, rad - cos(angle) * rad);\n normal.xz = vec2(sin(angle), cos(angle));\n}\n \nposition = uTroikaOrient * position;\nnormal = uTroikaOrient * normal;\n\nvTroikaGlyphUV = clippedXY.xy;\nvTroikaGlyphDimensions = vec2(bounds[2] - bounds[0], bounds[3] - bounds[1]);\n\n${''/* NOTE: it seems important to calculate the glyph's bounding texture UVs here in the\n vertex shader, rather than in the fragment shader, as the latter gives strange artifacts\n on some glyphs (those in the leftmost texture column) on some systems. The exact reason\n isn't understood but doing this here, then mix()-ing in the fragment shader, seems to work. */}\nfloat txCols = uTroikaSDFTextureSize.x / uTroikaSDFGlyphSize;\nvec2 txUvPerSquare = uTroikaSDFGlyphSize / uTroikaSDFTextureSize;\nvec2 txStartUV = txUvPerSquare * vec2(\n mod(floor(aTroikaGlyphIndex / 4.0), txCols),\n floor(floor(aTroikaGlyphIndex / 4.0) / txCols)\n);\nvTroikaTextureUVBounds = vec4(txStartUV, vec2(txStartUV) + txUvPerSquare);\nvTroikaTextureChannel = mod(aTroikaGlyphIndex, 4.0);\n`;\n\n// language=GLSL\nconst FRAGMENT_DEFS = `\nuniform sampler2D uTroikaSDFTexture;\nuniform vec2 uTroikaSDFTextureSize;\nuniform float uTroikaSDFGlyphSize;\nuniform float uTroikaSDFExponent;\nuniform float uTroikaEdgeOffset;\nuniform float uTroikaFillOpacity;\nuniform float uTroikaBlurRadius;\nuniform vec3 uTroikaStrokeColor;\nuniform float uTroikaStrokeWidth;\nuniform float uTroikaStrokeOpacity;\nuniform bool uTroikaSDFDebug;\nvarying vec2 vTroikaGlyphUV;\nvarying vec4 vTroikaTextureUVBounds;\nvarying float vTroikaTextureChannel;\nvarying vec2 vTroikaGlyphDimensions;\n\nfloat troikaSdfValueToSignedDistance(float alpha) {\n // Inverse of exponential encoding in webgl-sdf-generator\n ${''/* TODO - there's some slight inaccuracy here when dealing with interpolated alpha values; those\n are linearly interpolated where the encoding is exponential. Look into improving this by rounding\n to nearest 2 whole texels, decoding those exponential values, and linearly interpolating the result.\n */}\n float maxDimension = max(vTroikaGlyphDimensions.x, vTroikaGlyphDimensions.y);\n float absDist = (1.0 - pow(2.0 * (alpha > 0.5 ? 1.0 - alpha : alpha), 1.0 / uTroikaSDFExponent)) * maxDimension;\n float signedDist = absDist * (alpha > 0.5 ? -1.0 : 1.0);\n return signedDist;\n}\n\nfloat troikaGlyphUvToSdfValue(vec2 glyphUV) {\n vec2 textureUV = mix(vTroikaTextureUVBounds.xy, vTroikaTextureUVBounds.zw, glyphUV);\n vec4 rgba = texture2D(uTroikaSDFTexture, textureUV);\n float ch = floor(vTroikaTextureChannel + 0.5); //NOTE: can't use round() in WebGL1\n return ch == 0.0 ? rgba.r : ch == 1.0 ? rgba.g : ch == 2.0 ? rgba.b : rgba.a;\n}\n\nfloat troikaGlyphUvToDistance(vec2 uv) {\n return troikaSdfValueToSignedDistance(troikaGlyphUvToSdfValue(uv));\n}\n\nfloat troikaGetAADist() {\n ${''/*\n When the standard derivatives extension is available, we choose an antialiasing alpha threshold based\n on the potential change in the SDF's alpha from this fragment to its neighbor. This strategy maximizes \n readability and edge crispness at all sizes and screen resolutions.\n */}\n #if defined(GL_OES_standard_derivatives) || __VERSION__ >= 300\n return length(fwidth(vTroikaGlyphUV * vTroikaGlyphDimensions)) * 0.5;\n #else\n return vTroikaGlyphDimensions.x / 64.0;\n #endif\n}\n\nfloat troikaGetFragDistValue() {\n vec2 clampedGlyphUV = clamp(vTroikaGlyphUV, 0.5 / uTroikaSDFGlyphSize, 1.0 - 0.5 / uTroikaSDFGlyphSize);\n float distance = troikaGlyphUvToDistance(clampedGlyphUV);\n \n // Extrapolate distance when outside bounds:\n distance += clampedGlyphUV == vTroikaGlyphUV ? 0.0 : \n length((vTroikaGlyphUV - clampedGlyphUV) * vTroikaGlyphDimensions);\n\n ${''/* \n // TODO more refined extrapolated distance by adjusting for angle of gradient at edge...\n // This has potential but currently gives very jagged extensions, maybe due to precision issues?\n float uvStep = 1.0 / uTroikaSDFGlyphSize;\n vec2 neighbor1UV = clampedGlyphUV + (\n vTroikaGlyphUV.x != clampedGlyphUV.x ? vec2(0.0, uvStep * sign(0.5 - vTroikaGlyphUV.y)) :\n vTroikaGlyphUV.y != clampedGlyphUV.y ? vec2(uvStep * sign(0.5 - vTroikaGlyphUV.x), 0.0) :\n vec2(0.0)\n );\n vec2 neighbor2UV = clampedGlyphUV + (\n vTroikaGlyphUV.x != clampedGlyphUV.x ? vec2(0.0, uvStep * -sign(0.5 - vTroikaGlyphUV.y)) :\n vTroikaGlyphUV.y != clampedGlyphUV.y ? vec2(uvStep * -sign(0.5 - vTroikaGlyphUV.x), 0.0) :\n vec2(0.0)\n );\n float neighbor1Distance = troikaGlyphUvToDistance(neighbor1UV);\n float neighbor2Distance = troikaGlyphUvToDistance(neighbor2UV);\n float distToUnclamped = length((vTroikaGlyphUV - clampedGlyphUV) * vTroikaGlyphDimensions);\n float distToNeighbor = length((clampedGlyphUV - neighbor1UV) * vTroikaGlyphDimensions);\n float gradientAngle1 = min(asin(abs(neighbor1Distance - distance) / distToNeighbor), PI / 2.0);\n float gradientAngle2 = min(asin(abs(neighbor2Distance - distance) / distToNeighbor), PI / 2.0);\n distance += (cos(gradientAngle1) + cos(gradientAngle2)) / 2.0 * distToUnclamped;\n */}\n\n return distance;\n}\n\nfloat troikaGetEdgeAlpha(float distance, float distanceOffset, float aaDist) {\n #if defined(IS_DEPTH_MATERIAL) || defined(IS_DISTANCE_MATERIAL)\n float alpha = step(-distanceOffset, -distance);\n #else\n\n float alpha = smoothstep(\n distanceOffset + aaDist,\n distanceOffset - aaDist,\n distance\n );\n #endif\n\n return alpha;\n}\n`;\n\n// language=GLSL prefix=\"void main() {\" suffix=\"}\"\nconst FRAGMENT_TRANSFORM = `\nfloat aaDist = troikaGetAADist();\nfloat fragDistance = troikaGetFragDistValue();\nfloat edgeAlpha = uTroikaSDFDebug ?\n troikaGlyphUvToSdfValue(vTroikaGlyphUV) :\n troikaGetEdgeAlpha(fragDistance, uTroikaEdgeOffset, max(aaDist, uTroikaBlurRadius));\n\n#if !defined(IS_DEPTH_MATERIAL) && !defined(IS_DISTANCE_MATERIAL)\nvec4 fillRGBA = gl_FragColor;\nfillRGBA.a *= uTroikaFillOpacity;\nvec4 strokeRGBA = uTroikaStrokeWidth == 0.0 ? fillRGBA : vec4(uTroikaStrokeColor, uTroikaStrokeOpacity);\nif (fillRGBA.a == 0.0) fillRGBA.rgb = strokeRGBA.rgb;\ngl_FragColor = mix(fillRGBA, strokeRGBA, smoothstep(\n -uTroikaStrokeWidth - aaDist,\n -uTroikaStrokeWidth + aaDist,\n fragDistance\n));\ngl_FragColor.a *= edgeAlpha;\n#endif\n\nif (edgeAlpha == 0.0) {\n discard;\n}\n`;\n\n\n/**\n * Create a material for rendering text, derived from a baseMaterial\n */\nfunction createTextDerivedMaterial(baseMaterial) {\n const textMaterial = createDerivedMaterial(baseMaterial, {\n chained: true,\n extensions: {\n derivatives: true\n },\n uniforms: {\n uTroikaSDFTexture: {value: null},\n uTroikaSDFTextureSize: {value: new Vector2()},\n uTroikaSDFGlyphSize: {value: 0},\n uTroikaSDFExponent: {value: 0},\n uTroikaTotalBounds: {value: new Vector4(0,0,0,0)},\n uTroikaClipRect: {value: new Vector4(0,0,0,0)},\n uTroikaEdgeOffset: {value: 0},\n uTroikaFillOpacity: {value: 1},\n uTroikaPositionOffset: {value: new Vector2()},\n uTroikaCurveRadius: {value: 0},\n uTroikaBlurRadius: {value: 0},\n uTroikaStrokeWidth: {value: 0},\n uTroikaStrokeColor: {value: new Color()},\n uTroikaStrokeOpacity: {value: 1},\n uTroikaOrient: {value: new Matrix3()},\n uTroikaUseGlyphColors: {value: true},\n uTroikaSDFDebug: {value: false}\n },\n vertexDefs: VERTEX_DEFS,\n vertexTransform: VERTEX_TRANSFORM,\n fragmentDefs: FRAGMENT_DEFS,\n fragmentColorTransform: FRAGMENT_TRANSFORM,\n customRewriter({vertexShader, fragmentShader}) {\n let uDiffuseRE = /\\buniform\\s+vec3\\s+diffuse\\b/;\n if (uDiffuseRE.test(fragmentShader)) {\n // Replace all instances of `diffuse` with our varying\n fragmentShader = fragmentShader\n .replace(uDiffuseRE, 'varying vec3 vTroikaGlyphColor')\n .replace(/\\bdiffuse\\b/g, 'vTroikaGlyphColor');\n // Make sure the vertex shader declares the uniform so we can grab it as a fallback\n if (!uDiffuseRE.test(vertexShader)) {\n vertexShader = vertexShader.replace(\n voidMainRegExp,\n 'uniform vec3 diffuse;\\n$&\\nvTroikaGlyphColor = uTroikaUseGlyphColors ? aTroikaGlyphColor / 255.0 : diffuse;\\n'\n );\n }\n }\n return { vertexShader, fragmentShader }\n }\n });\n\n // Force transparency - TODO is this reasonable?\n textMaterial.transparent = true;\n\n // Force single draw call when double-sided\n textMaterial.forceSinglePass = true;\n\n Object.defineProperties(textMaterial, {\n isTroikaTextMaterial: {value: true},\n\n // WebGLShadowMap reverses the side of the shadow material by default, which fails\n // for planes, so here we force the `shadowSide` to always match the main side.\n shadowSide: {\n get() {\n return this.side\n },\n set() {\n //no-op\n }\n }\n });\n\n return textMaterial\n}\n\nconst defaultMaterial = /*#__PURE__*/ new MeshBasicMaterial({\n color: 0xffffff,\n side: DoubleSide,\n transparent: true\n});\nconst defaultStrokeColor = 0x808080;\n\nconst tempMat4 = /*#__PURE__*/ new Matrix4();\nconst tempVec3a = /*#__PURE__*/ new Vector3();\nconst tempVec3b = /*#__PURE__*/ new Vector3();\nconst tempArray = [];\nconst origin = /*#__PURE__*/ new Vector3();\nconst defaultOrient = '+x+y';\n\nfunction first(o) {\n return Array.isArray(o) ? o[0] : o\n}\n\nlet getFlatRaycastMesh = () => {\n const mesh = new Mesh(\n new PlaneGeometry(1, 1),\n defaultMaterial\n );\n getFlatRaycastMesh = () => mesh;\n return mesh\n};\nlet getCurvedRaycastMesh = () => {\n const mesh = new Mesh(\n new PlaneGeometry(1, 1, 32, 1),\n defaultMaterial\n );\n getCurvedRaycastMesh = () => mesh;\n return mesh\n};\n\nconst syncStartEvent = { type: 'syncstart' };\nconst syncCompleteEvent = { type: 'synccomplete' };\n\nconst SYNCABLE_PROPS = [\n 'font',\n 'fontSize',\n 'fontStyle',\n 'fontWeight',\n 'lang',\n 'letterSpacing',\n 'lineHeight',\n 'maxWidth',\n 'overflowWrap',\n 'text',\n 'direction',\n 'textAlign',\n 'textIndent',\n 'whiteSpace',\n 'anchorX',\n 'anchorY',\n 'colorRanges',\n 'sdfGlyphSize'\n];\n\nconst COPYABLE_PROPS = SYNCABLE_PROPS.concat(\n 'material',\n 'color',\n 'depthOffset',\n 'clipRect',\n 'curveRadius',\n 'orientation',\n 'glyphGeometryDetail'\n);\n\n/**\n * @class Text\n *\n * A ThreeJS Mesh that renders a string of text on a plane in 3D space using signed distance\n * fields (SDF).\n */\nclass Text extends Mesh {\n constructor() {\n const geometry = new GlyphsGeometry();\n super(geometry, null);\n\n // === Text layout properties: === //\n\n /**\n * @member {string} text\n * The string of text to be rendered.\n */\n this.text = '';\n\n /**\n * @member {number|string} anchorX\n * Defines the horizontal position in the text block that should line up with the local origin.\n * Can be specified as a numeric x position in local units, a string percentage of the total\n * text block width e.g. `'25%'`, or one of the following keyword strings: 'left', 'center',\n * or 'right'.\n */\n this.anchorX = 0;\n\n /**\n * @member {number|string} anchorY\n * Defines the vertical position in the text block that should line up with the local origin.\n * Can be specified as a numeric y position in local units (note: down is negative y), a string\n * percentage of the total text block height e.g. `'25%'`, or one of the following keyword strings:\n * 'top', 'top-baseline', 'top-cap', 'top-ex', 'middle', 'bottom-baseline', or 'bottom'.\n */\n this.anchorY = 0;\n\n /**\n * @member {number} curveRadius\n * Defines a cylindrical radius along which the text's plane will be curved. Positive numbers put\n * the cylinder's centerline (oriented vertically) that distance in front of the text, for a concave\n * curvature, while negative numbers put it behind the text for a convex curvature. The centerline\n * will be aligned with the text's local origin; you can use `anchorX` to offset it.\n *\n * Since each glyph is by default rendered with a simple quad, each glyph remains a flat plane\n * internally. You can use `glyphGeometryDetail` to add more vertices for curvature inside glyphs.\n */\n this.curveRadius = 0;\n\n /**\n * @member {string} direction\n * Sets the base direction for the text. The default value of \"auto\" will choose a direction based\n * on the text's content according to the bidi spec. A value of \"ltr\" or \"rtl\" will force the direction.\n */\n this.direction = 'auto';\n\n /**\n * @member {string|null} font\n * URL of a custom font to be used. Font files can be in .ttf, .otf, or .woff (not .woff2) formats.\n * Defaults to Noto Sans.\n */\n this.font = null; //will use default from TextBuilder\n\n this.unicodeFontsURL = null; //defaults to CDN\n\n /**\n * @member {number} fontSize\n * The size at which to render the font in local units; corresponds to the em-box height\n * of the chosen `font`.\n */\n this.fontSize = 0.1;\n\n /**\n * @member {number|'normal'|'bold'}\n * The weight of the font. Currently only used for fallback Noto fonts.\n */\n this.fontWeight = 'normal';\n\n /**\n * @member {'normal'|'italic'}\n * The style of the font. Currently only used for fallback Noto fonts.\n */\n this.fontStyle = 'normal';\n\n /**\n * @member {string|null} lang\n * The language code of this text; can be used for explicitly selecting certain CJK fonts.\n */\n this.lang = null;\n\n /**\n * @member {number} letterSpacing\n * Sets a uniform adjustment to spacing between letters after kerning is applied. Positive\n * numbers increase spacing and negative numbers decrease it.\n */\n this.letterSpacing = 0;\n\n /**\n * @member {number|string} lineHeight\n * Sets the height of each line of text, as a multiple of the `fontSize`. Defaults to 'normal'\n * which chooses a reasonable height based on the chosen font's ascender/descender metrics.\n */\n this.lineHeight = 'normal';\n\n /**\n * @member {number} maxWidth\n * The maximum width of the text block, above which text may start wrapping according to the\n * `whiteSpace` and `overflowWrap` properties.\n */\n this.maxWidth = Infinity;\n\n /**\n * @member {string} overflowWrap\n * Defines how text wraps if the `whiteSpace` property is `normal`. Can be either `'normal'`\n * to break at whitespace characters, or `'break-word'` to allow breaking within words.\n * Defaults to `'normal'`.\n */\n this.overflowWrap = 'normal';\n\n /**\n * @member {string} textAlign\n * The horizontal alignment of each line of text within the overall text bounding box.\n */\n this.textAlign = 'left';\n\n /**\n * @member {number} textIndent\n * Indentation for the first character of a line; see CSS `text-indent`.\n */\n this.textIndent = 0;\n\n /**\n * @member {string} whiteSpace\n * Defines whether text should wrap when a line reaches the `maxWidth`. Can\n * be either `'normal'` (the default), to allow wrapping according to the `overflowWrap` property,\n * or `'nowrap'` to prevent wrapping. Note that `'normal'` here honors newline characters to\n * manually break lines, making it behave more like `'pre-wrap'` does in CSS.\n */\n this.whiteSpace = 'normal';\n\n\n // === Presentation properties: === //\n\n /**\n * @member {THREE.Material} material\n * Defines a _base_ material to be used when rendering the text. This material will be\n * automatically replaced with a material derived from it, that adds shader code to\n * decrease the alpha for each fragment (pixel) outside the text glyphs, with antialiasing.\n * By default it will derive from a simple white MeshBasicMaterial, but you can use any\n * of the other mesh materials to gain other features like lighting, texture maps, etc.\n *\n * Also see the `color` shortcut property.\n */\n this.material = null;\n\n /**\n * @member {string|number|THREE.Color} color\n * This is a shortcut for setting the `color` of the text's material. You can use this\n * if you don't want to specify a whole custom `material`. Also, if you do use a custom\n * `material`, this color will only be used for this particuar Text instance, even if\n * that same material instance is shared across multiple Text objects.\n */\n this.color = null;\n\n /**\n * @member {object|null} colorRanges\n * WARNING: This API is experimental and may change.\n * This allows more fine-grained control of colors for individual or ranges of characters,\n * taking precedence over the material's `color`. Its format is an Object whose keys each\n * define a starting character index for a range, and whose values are the color for each\n * range. The color value can be a numeric hex color value, a `THREE.Color` object, or\n * any of the strings accepted by `THREE.Color`.\n */\n this.colorRanges = null;\n\n /**\n * @member {number|string} outlineWidth\n * WARNING: This API is experimental and may change.\n * The width of an outline/halo to be drawn around each text glyph using the `outlineColor` and `outlineOpacity`.\n * Can be specified as either an absolute number in local units, or as a percentage string e.g.\n * `\"12%\"` which is treated as a percentage of the `fontSize`. Defaults to `0`, which means\n * no outline will be drawn unless an `outlineOffsetX/Y` or `outlineBlur` is set.\n */\n this.outlineWidth = 0;\n\n /**\n * @member {string|number|THREE.Color} outlineColor\n * WARNING: This API is experimental and may change.\n * The color of the text outline, if `outlineWidth`/`outlineBlur`/`outlineOffsetX/Y` are set.\n * Defaults to black.\n */\n this.outlineColor = 0x000000;\n\n /**\n * @member {number} outlineOpacity\n * WARNING: This API is experimental and may change.\n * The opacity of the outline, if `outlineWidth`/`outlineBlur`/`outlineOffsetX/Y` are set.\n * Defaults to `1`.\n */\n this.outlineOpacity = 1;\n\n /**\n * @member {number|string} outlineBlur\n * WARNING: This API is experimental and may change.\n * A blur radius applied to the outer edge of the text's outline. If the `outlineWidth` is\n * zero, the blur will be applied at the glyph edge, like CSS's `text-shadow` blur radius.\n * Can be specified as either an absolute number in local units, or as a percentage string e.g.\n * `\"12%\"` which is treated as a percentage of the `fontSize`. Defaults to `0`.\n */\n this.outlineBlur = 0;\n\n /**\n * @member {number|string} outlineOffsetX\n * WARNING: This API is experimental and may change.\n * A horizontal offset for the text outline.\n * Can be specified as either an absolute number in local units, or as a percentage string e.g. `\"12%\"`\n * which is treated as a percentage of the `fontSize`. Defaults to `0`.\n */\n this.outlineOffsetX = 0;\n\n /**\n * @member {number|string} outlineOffsetY\n * WARNING: This API is experimental and may change.\n * A vertical offset for the text outline.\n * Can be specified as either an absolute number in local units, or as a percentage string e.g. `\"12%\"`\n * which is treated as a percentage of the `fontSize`. Defaults to `0`.\n */\n this.outlineOffsetY = 0;\n\n /**\n * @member {number|string} strokeWidth\n * WARNING: This API is experimental and may change.\n * The width of an inner stroke drawn inside each text glyph using the `strokeColor` and `strokeOpacity`.\n * Can be specified as either an absolute number in local units, or as a percentage string e.g. `\"12%\"`\n * which is treated as a percentage of the `fontSize`. Defaults to `0`.\n */\n this.strokeWidth = 0;\n\n /**\n * @member {string|number|THREE.Color} strokeColor\n * WARNING: This API is experimental and may change.\n * The color of the text stroke, if `strokeWidth` is greater than zero. Defaults to gray.\n */\n this.strokeColor = defaultStrokeColor;\n\n /**\n * @member {number} strokeOpacity\n * WARNING: This API is experimental and may change.\n * The opacity of the stroke, if `strokeWidth` is greater than zero. Defaults to `1`.\n */\n this.strokeOpacity = 1;\n\n /**\n * @member {number} fillOpacity\n * WARNING: This API is experimental and may change.\n * The opacity of the glyph's fill from 0 to 1. This behaves like the material's `opacity` but allows\n * giving the fill a different opacity than the `strokeOpacity`. A fillOpacity of `0` makes the\n * interior of the glyph invisible, leaving just the `strokeWidth`. Defaults to `1`.\n */\n this.fillOpacity = 1;\n\n /**\n * @member {number} depthOffset\n * This is a shortcut for setting the material's `polygonOffset` and related properties,\n * which can be useful in preventing z-fighting when this text is laid on top of another\n * plane in the scene. Positive numbers are further from the camera, negatives closer.\n */\n this.depthOffset = 0;\n\n /**\n * @member {Array} clipRect\n * If specified, defines a `[minX, minY, maxX, maxY]` of a rectangle outside of which all\n * pixels will be discarded. This can be used for example to clip overflowing text when\n * `whiteSpace='nowrap'`.\n */\n this.clipRect = null;\n\n /**\n * @member {string} orientation\n * Defines the axis plane on which the text should be laid out when the mesh has no extra\n * rotation transform. It is specified as a string with two axes: the horizontal axis with\n * positive pointing right, and the vertical axis with positive pointing up. By default this\n * is '+x+y', meaning the text sits on the xy plane with the text's top toward positive y\n * and facing positive z. A value of '+x-z' would place it on the xz plane with the text's\n * top toward negative z and facing positive y.\n */\n this.orientation = defaultOrient;\n\n /**\n * @member {number} glyphGeometryDetail\n * Controls number of vertical/horizontal segments that make up each glyph's rectangular\n * plane. Defaults to 1. This can be increased to provide more geometrical detail for custom\n * vertex shader effects, for example.\n */\n this.glyphGeometryDetail = 1;\n\n /**\n * @member {number|null} sdfGlyphSize\n * The size of each glyph's SDF (signed distance field) used for rendering. This must be a\n * power-of-two number. Defaults to 64 which is generally a good balance of size and quality\n * for most fonts. Larger sizes can improve the quality of glyph rendering by increasing\n * the sharpness of corners and preventing loss of very thin lines, at the expense of\n * increased memory footprint and longer SDF generation time.\n */\n this.sdfGlyphSize = null;\n\n /**\n * @member {boolean} gpuAccelerateSDF\n * When `true`, the SDF generation process will be GPU-accelerated with WebGL when possible,\n * making it much faster especially for complex glyphs, and falling back to a JavaScript version\n * executed in web workers when support isn't available. It should automatically detect support,\n * but it's still somewhat experimental, so you can set it to `false` to force it to use the JS\n * version if you encounter issues with it.\n */\n this.gpuAccelerateSDF = true;\n\n this.debugSDF = false;\n }\n\n /**\n * Updates the text rendering according to the current text-related configuration properties.\n * This is an async process, so you can pass in a callback function to be executed when it\n * finishes.\n * @param {function} [callback]\n */\n sync(callback) {\n if (this._needsSync) {\n this._needsSync = false;\n\n // If there's another sync still in progress, queue\n if (this._isSyncing) {\n (this._queuedSyncs || (this._queuedSyncs = [])).push(callback);\n } else {\n this._isSyncing = true;\n this.dispatchEvent(syncStartEvent);\n\n getTextRenderInfo({\n text: this.text,\n font: this.font,\n lang: this.lang,\n fontSize: this.fontSize || 0.1,\n fontWeight: this.fontWeight || 'normal',\n fontStyle: this.fontStyle || 'normal',\n letterSpacing: this.letterSpacing || 0,\n lineHeight: this.lineHeight || 'normal',\n maxWidth: this.maxWidth,\n direction: this.direction || 'auto',\n textAlign: this.textAlign,\n textIndent: this.textIndent,\n whiteSpace: this.whiteSpace,\n overflowWrap: this.overflowWrap,\n anchorX: this.anchorX,\n anchorY: this.anchorY,\n colorRanges: this.colorRanges,\n includeCaretPositions: true, //TODO parameterize\n sdfGlyphSize: this.sdfGlyphSize,\n gpuAccelerateSDF: this.gpuAccelerateSDF,\n unicodeFontsURL: this.unicodeFontsURL,\n }, textRenderInfo => {\n this._isSyncing = false;\n\n // Save result for later use in onBeforeRender\n this._textRenderInfo = textRenderInfo;\n\n // Update the geometry attributes\n this.geometry.updateGlyphs(\n textRenderInfo.glyphBounds,\n textRenderInfo.glyphAtlasIndices,\n textRenderInfo.blockBounds,\n textRenderInfo.chunkedBounds,\n textRenderInfo.glyphColors\n );\n\n // If we had extra sync requests queued up, kick it off\n const queued = this._queuedSyncs;\n if (queued) {\n this._queuedSyncs = null;\n this._needsSync = true;\n this.sync(() => {\n queued.forEach(fn => fn && fn());\n });\n }\n\n this.dispatchEvent(syncCompleteEvent);\n if (callback) {\n callback();\n }\n });\n }\n }\n }\n\n /**\n * Initiate a sync if needed - note it won't complete until next frame at the\n * earliest so if possible it's a good idea to call sync() manually as soon as\n * all the properties have been set.\n * @override\n */\n onBeforeRender(renderer, scene, camera, geometry, material, group) {\n this.sync();\n\n // This may not always be a text material, e.g. if there's a scene.overrideMaterial present\n if (material.isTroikaTextMaterial) {\n this._prepareForRender(material);\n }\n }\n\n /**\n * Shortcut to dispose the geometry specific to this instance.\n * Note: we don't also dispose the derived material here because if anything else is\n * sharing the same base material it will result in a pause next frame as the program\n * is recompiled. Instead users can dispose the base material manually, like normal,\n * and we'll also dispose the derived material at that time.\n */\n dispose() {\n this.geometry.dispose();\n }\n\n /**\n * @property {TroikaTextRenderInfo|null} textRenderInfo\n * @readonly\n * The current processed rendering data for this TextMesh, returned by the TextBuilder after\n * a `sync()` call. This will be `null` initially, and may be stale for a short period until\n * the asynchrous `sync()` process completes.\n */\n get textRenderInfo() {\n return this._textRenderInfo || null\n }\n\n /**\n * Create the text derived material from the base material. Can be overridden to use a custom\n * derived material.\n */\n createDerivedMaterial(baseMaterial) {\n return createTextDerivedMaterial(baseMaterial)\n }\n\n // Handler for automatically wrapping the base material with our upgrades. We do the wrapping\n // lazily on _read_ rather than write to avoid unnecessary wrapping on transient values.\n get material() {\n let derivedMaterial = this._derivedMaterial;\n const baseMaterial = this._baseMaterial || this._defaultMaterial || (this._defaultMaterial = defaultMaterial.clone());\n if (!derivedMaterial || !derivedMaterial.isDerivedFrom(baseMaterial)) {\n derivedMaterial = this._derivedMaterial = this.createDerivedMaterial(baseMaterial);\n // dispose the derived material when its base material is disposed:\n baseMaterial.addEventListener('dispose', function onDispose() {\n baseMaterial.removeEventListener('dispose', onDispose);\n derivedMaterial.dispose();\n });\n }\n // If text outline is configured, render it as a preliminary draw using Three's multi-material\n // feature (see GlyphsGeometry which sets up `groups` for this purpose) Doing it with multi\n // materials ensures the layers are always rendered consecutively in a consistent order.\n // Each layer will trigger onBeforeRender with the appropriate material.\n if (this.hasOutline()) {\n let outlineMaterial = derivedMaterial._outlineMtl;\n if (!outlineMaterial) {\n outlineMaterial = derivedMaterial._outlineMtl = Object.create(derivedMaterial, {\n id: {value: derivedMaterial.id + 0.1}\n });\n outlineMaterial.isTextOutlineMaterial = true;\n outlineMaterial.depthWrite = false;\n outlineMaterial.map = null; //???\n derivedMaterial.addEventListener('dispose', function onDispose() {\n derivedMaterial.removeEventListener('dispose', onDispose);\n outlineMaterial.dispose();\n });\n }\n return [\n outlineMaterial,\n derivedMaterial\n ]\n } else {\n return derivedMaterial\n }\n }\n set material(baseMaterial) {\n if (baseMaterial && baseMaterial.isTroikaTextMaterial) { //prevent double-derivation\n this._derivedMaterial = baseMaterial;\n this._baseMaterial = baseMaterial.baseMaterial;\n } else {\n this._baseMaterial = baseMaterial;\n }\n }\n\n hasOutline() {\n return !!(this.outlineWidth || this.outlineBlur || this.outlineOffsetX || this.outlineOffsetY)\n }\n\n get glyphGeometryDetail() {\n return this.geometry.detail\n }\n set glyphGeometryDetail(detail) {\n this.geometry.detail = detail;\n }\n\n get curveRadius() {\n return this.geometry.curveRadius\n }\n set curveRadius(r) {\n this.geometry.curveRadius = r;\n }\n\n // Create and update material for shadows upon request:\n get customDepthMaterial() {\n return first(this.material).getDepthMaterial()\n }\n set customDepthMaterial(m) {\n // future: let the user override with their own?\n }\n get customDistanceMaterial() {\n return first(this.material).getDistanceMaterial()\n }\n set customDistanceMaterial(m) {\n // future: let the user override with their own?\n }\n\n _prepareForRender(material) {\n const isOutline = material.isTextOutlineMaterial;\n const uniforms = material.uniforms;\n const textInfo = this.textRenderInfo;\n if (textInfo) {\n const {sdfTexture, blockBounds} = textInfo;\n uniforms.uTroikaSDFTexture.value = sdfTexture;\n uniforms.uTroikaSDFTextureSize.value.set(sdfTexture.image.width, sdfTexture.image.height);\n uniforms.uTroikaSDFGlyphSize.value = textInfo.sdfGlyphSize;\n uniforms.uTroikaSDFExponent.value = textInfo.sdfExponent;\n uniforms.uTroikaTotalBounds.value.fromArray(blockBounds);\n uniforms.uTroikaUseGlyphColors.value = !isOutline && !!textInfo.glyphColors;\n\n let distanceOffset = 0;\n let blurRadius = 0;\n let strokeWidth = 0;\n let fillOpacity;\n let strokeOpacity;\n let strokeColor;\n let offsetX = 0;\n let offsetY = 0;\n\n if (isOutline) {\n let {outlineWidth, outlineOffsetX, outlineOffsetY, outlineBlur, outlineOpacity} = this;\n distanceOffset = this._parsePercent(outlineWidth) || 0;\n blurRadius = Math.max(0, this._parsePercent(outlineBlur) || 0);\n fillOpacity = outlineOpacity;\n offsetX = this._parsePercent(outlineOffsetX) || 0;\n offsetY = this._parsePercent(outlineOffsetY) || 0;\n } else {\n strokeWidth = Math.max(0, this._parsePercent(this.strokeWidth) || 0);\n if (strokeWidth) {\n strokeColor = this.strokeColor;\n uniforms.uTroikaStrokeColor.value.set(strokeColor == null ? defaultStrokeColor : strokeColor);\n strokeOpacity = this.strokeOpacity;\n if (strokeOpacity == null) strokeOpacity = 1;\n }\n fillOpacity = this.fillOpacity;\n }\n\n uniforms.uTroikaEdgeOffset.value = distanceOffset;\n uniforms.uTroikaPositionOffset.value.set(offsetX, offsetY);\n uniforms.uTroikaBlurRadius.value = blurRadius;\n uniforms.uTroikaStrokeWidth.value = strokeWidth;\n uniforms.uTroikaStrokeOpacity.value = strokeOpacity;\n uniforms.uTroikaFillOpacity.value = fillOpacity == null ? 1 : fillOpacity;\n uniforms.uTroikaCurveRadius.value = this.curveRadius || 0;\n\n let clipRect = this.clipRect;\n if (clipRect && Array.isArray(clipRect) && clipRect.length === 4) {\n uniforms.uTroikaClipRect.value.fromArray(clipRect);\n } else {\n // no clipping - choose a finite rect that shouldn't ever be reached by overflowing glyphs or outlines\n const pad = (this.fontSize || 0.1) * 100;\n uniforms.uTroikaClipRect.value.set(\n blockBounds[0] - pad,\n blockBounds[1] - pad,\n blockBounds[2] + pad,\n blockBounds[3] + pad\n );\n }\n this.geometry.applyClipRect(uniforms.uTroikaClipRect.value);\n }\n uniforms.uTroikaSDFDebug.value = !!this.debugSDF;\n material.polygonOffset = !!this.depthOffset;\n material.polygonOffsetFactor = material.polygonOffsetUnits = this.depthOffset || 0;\n\n // Shortcut for setting material color via `color` prop on the mesh; this is\n // applied only to the derived material to avoid mutating a shared base material.\n const color = isOutline ? (this.outlineColor || 0) : this.color;\n\n if (color == null) {\n delete material.color; //inherit from base\n } else {\n const colorObj = material.hasOwnProperty('color') ? material.color : (material.color = new Color());\n if (color !== colorObj._input || typeof color === 'object') {\n colorObj.set(colorObj._input = color);\n }\n }\n\n // base orientation\n let orient = this.orientation || defaultOrient;\n if (orient !== material._orientation) {\n let rotMat = uniforms.uTroikaOrient.value;\n orient = orient.replace(/[^-+xyz]/g, '');\n let match = orient !== defaultOrient && orient.match(/^([-+])([xyz])([-+])([xyz])$/);\n if (match) {\n let [, hSign, hAxis, vSign, vAxis] = match;\n tempVec3a.set(0, 0, 0)[hAxis] = hSign === '-' ? 1 : -1;\n tempVec3b.set(0, 0, 0)[vAxis] = vSign === '-' ? -1 : 1;\n tempMat4.lookAt(origin, tempVec3a.cross(tempVec3b), tempVec3b);\n rotMat.setFromMatrix4(tempMat4);\n } else {\n rotMat.identity();\n }\n material._orientation = orient;\n }\n }\n\n _parsePercent(value) {\n if (typeof value === 'string') {\n let match = value.match(/^(-?[\\d.]+)%$/);\n let pct = match ? parseFloat(match[1]) : NaN;\n value = (isNaN(pct) ? 0 : pct / 100) * this.fontSize;\n }\n return value\n }\n\n /**\n * Translate a point in local space to an x/y in the text plane.\n */\n localPositionToTextCoords(position, target = new Vector2()) {\n target.copy(position); //simple non-curved case is 1:1\n const r = this.curveRadius;\n if (r) { //flatten the curve\n target.x = Math.atan2(position.x, Math.abs(r) - Math.abs(position.z)) * Math.abs(r);\n }\n return target\n }\n\n /**\n * Translate a point in world space to an x/y in the text plane.\n */\n worldPositionToTextCoords(position, target = new Vector2()) {\n tempVec3a.copy(position);\n return this.localPositionToTextCoords(this.worldToLocal(tempVec3a), target)\n }\n\n /**\n * @override Custom raycasting to test against the whole text block's max rectangular bounds\n * TODO is there any reason to make this more granular, like within individual line or glyph rects?\n */\n raycast(raycaster, intersects) {\n const {textRenderInfo, curveRadius} = this;\n if (textRenderInfo) {\n const bounds = textRenderInfo.blockBounds;\n const raycastMesh = curveRadius ? getCurvedRaycastMesh() : getFlatRaycastMesh();\n const geom = raycastMesh.geometry;\n const {position, uv} = geom.attributes;\n for (let i = 0; i < uv.count; i++) {\n let x = bounds[0] + (uv.getX(i) * (bounds[2] - bounds[0]));\n const y = bounds[1] + (uv.getY(i) * (bounds[3] - bounds[1]));\n let z = 0;\n if (curveRadius) {\n z = curveRadius - Math.cos(x / curveRadius) * curveRadius;\n x = Math.sin(x / curveRadius) * curveRadius;\n }\n position.setXYZ(i, x, y, z);\n }\n geom.boundingSphere = this.geometry.boundingSphere;\n geom.boundingBox = this.geometry.boundingBox;\n raycastMesh.matrixWorld = this.matrixWorld;\n raycastMesh.material.side = this.material.side;\n tempArray.length = 0;\n raycastMesh.raycast(raycaster, tempArray);\n for (let i = 0; i < tempArray.length; i++) {\n tempArray[i].object = this;\n intersects.push(tempArray[i]);\n }\n }\n }\n\n copy(source) {\n // Prevent copying the geometry reference so we don't end up sharing attributes between instances\n const geom = this.geometry;\n super.copy(source);\n this.geometry = geom;\n\n COPYABLE_PROPS.forEach(prop => {\n this[prop] = source[prop];\n });\n return this\n }\n\n clone() {\n return new this.constructor().copy(this)\n }\n}\n\n\n// Create setters for properties that affect text layout:\nSYNCABLE_PROPS.forEach(prop => {\n const privateKey = '_private_' + prop;\n Object.defineProperty(Text.prototype, prop, {\n get() {\n return this[privateKey]\n },\n set(value) {\n if (value !== this[privateKey]) {\n this[privateKey] = value;\n this._needsSync = true;\n }\n }\n });\n});\n\nconst syncStartEvent$1 = { type: \"syncstart\" };\nconst syncCompleteEvent$1 = { type: \"synccomplete\" };\nconst memberIndexAttrName = \"aTroikaTextBatchMemberIndex\";\n\n\n/*\nData texture packing strategy:\n\n# Common:\n0-15: matrix\n16-19: uTroikaTotalBounds\n20-23: uTroikaClipRect\n24: diffuse (color/outlineColor)\n25: uTroikaFillOpacity (fillOpacity/outlineOpacity)\n26: uTroikaCurveRadius\n27: \n\n# Main:\n28: uTroikaStrokeWidth\n29: uTroikaStrokeColor\n30: uTroikaStrokeOpacity\n\n# Outline:\n28-29: uTroikaPositionOffset\n30: uTroikaEdgeOffset\n31: uTroikaBlurRadius\n*/\nconst floatsPerMember = 32;\n\nconst tempBox3 = new Box3();\nconst tempColor$1 = new Color();\n\n/**\n * @experimental\n *\n * A specialized `Text` implementation that accepts any number of `Text` children\n * and automatically batches them together to render in a single draw call.\n *\n * The `material` of each child `Text` will be ignored, and the `material` of the\n * `BatchedText` will be used for all of them instead.\n *\n * NOTE: This only works in WebGL2 or where the OES_texture_float extension is available.\n */\nclass BatchedText extends Text {\n constructor () {\n super();\n\n /**\n * @typedef {Object} PackingInfo\n * @property {number} index - the packing order index when last packed, or -1\n * @property {boolean} dirty - whether it has synced since last pack\n */\n\n /**\n * @type {Map}\n */\n this._members = new Map();\n this._dataTextures = {};\n\n this._onMemberSynced = (e) => {\n this._members.get(e.target).dirty = true;\n };\n }\n\n /**\n * @override\n * Batch any Text objects added as children\n */\n add (...objects) {\n for (let i = 0; i < objects.length; i++) {\n if (objects[i] instanceof Text) {\n this.addText(objects[i]);\n } else {\n super.add(objects[i]);\n }\n }\n return this;\n }\n\n /**\n * @override\n */\n remove (...objects) {\n for (let i = 0; i < objects.length; i++) {\n if (objects[i] instanceof Text) {\n this.removeText(objects[i]);\n } else {\n super.remove(objects[i]);\n }\n }\n return this;\n }\n\n /**\n * @param {Text} text\n */\n addText (text) {\n if (!this._members.has(text)) {\n this._members.set(text, {\n index: -1,\n glyphCount: -1,\n dirty: true\n });\n text.addEventListener(\"synccomplete\", this._onMemberSynced);\n }\n }\n\n /**\n * @param {Text} text\n */\n removeText (text) {\n this._needsRepack = true;\n text.removeEventListener(\"synccomplete\", this._onMemberSynced);\n this._members.delete(text);\n }\n\n /**\n * Use the custom derivation with extra batching logic\n */\n createDerivedMaterial (baseMaterial) {\n return createBatchedTextMaterial(baseMaterial);\n }\n\n updateMatrixWorld (force) {\n super.updateMatrixWorld(force);\n this.updateBounds();\n }\n\n /**\n * Update the batched geometry bounds to hold all members\n */\n updateBounds () {\n // Update member local matrices and the overall bounds\n const bbox = this.geometry.boundingBox.makeEmpty();\n this._members.forEach((_, text) => {\n if (text.matrixAutoUpdate) text.updateMatrix(); // ignore world matrix\n tempBox3.copy(text.geometry.boundingBox).applyMatrix4(text.matrix);\n bbox.union(tempBox3);\n });\n bbox.getBoundingSphere(this.geometry.boundingSphere);\n }\n\n /** @override */\n hasOutline() {\n // Iterator.some() not supported in Safari\n for (let member of this._members.keys()) {\n if (member.hasOutline()) return true;\n }\n return false;\n }\n\n /**\n * @override\n * Copy member matrices and uniform values into the data texture\n */\n _prepareForRender (material) {\n const isOutline = material.isTextOutlineMaterial;\n material.uniforms.uTroikaIsOutline.value = isOutline;\n\n // Resize the texture to fit in powers of 2\n let texture = this._dataTextures[isOutline ? 'outline' : 'main'];\n const dataLength = Math.pow(2, Math.ceil(Math.log2(this._members.size * floatsPerMember)));\n if (!texture || dataLength !== texture.image.data.length) {\n // console.log(`resizing: ${dataLength}`);\n if (texture) texture.dispose();\n const width = Math.min(dataLength / 4, 1024);\n texture = this._dataTextures[isOutline ? 'outline' : 'main'] = new DataTexture(\n new Float32Array(dataLength),\n width,\n dataLength / 4 / width,\n RGBAFormat,\n FloatType\n );\n }\n\n const texData = texture.image.data;\n const setTexData = (index, value) => {\n if (value !== texData[index]) {\n texData[index] = value;\n texture.needsUpdate = true;\n }\n };\n this._members.forEach(({ index, dirty }, text) => {\n if (index > -1) {\n const startIndex = index * floatsPerMember;\n\n // Matrix\n const matrix = text.matrix.elements;\n for (let i = 0; i < 16; i++) {\n setTexData(startIndex + i, matrix[i]);\n }\n\n // Let the member populate the uniforms, since that does all the appropriate\n // logic and handling of defaults, and we'll just grab the results from there\n text._prepareForRender(material);\n const {\n uTroikaTotalBounds,\n uTroikaClipRect,\n uTroikaPositionOffset,\n uTroikaEdgeOffset,\n uTroikaBlurRadius,\n uTroikaStrokeWidth,\n uTroikaStrokeColor,\n uTroikaStrokeOpacity,\n uTroikaFillOpacity,\n uTroikaCurveRadius,\n } = material.uniforms;\n\n // Total bounds for uv\n for (let i = 0; i < 4; i++) {\n setTexData(startIndex + 16 + i, uTroikaTotalBounds.value.getComponent(i));\n }\n\n // Clip rect\n for (let i = 0; i < 4; i++) {\n setTexData(startIndex + 20 + i, uTroikaClipRect.value.getComponent(i));\n }\n\n // Color\n let color = isOutline ? (text.outlineColor || 0) : text.color;\n if (color == null) color = this.color;\n if (color == null) color = this.material.color;\n if (color == null) color = 0xffffff;\n setTexData(startIndex + 24, tempColor$1.set(color).getHex());\n\n // Fill opacity / outline opacity\n setTexData(startIndex + 25, uTroikaFillOpacity.value);\n\n // Curve radius\n setTexData(startIndex + 26, uTroikaCurveRadius.value);\n\n if (isOutline) {\n // Outline properties\n setTexData(startIndex + 28, uTroikaPositionOffset.value.x);\n setTexData(startIndex + 29, uTroikaPositionOffset.value.y);\n setTexData(startIndex + 30, uTroikaEdgeOffset.value);\n setTexData(startIndex + 31, uTroikaBlurRadius.value);\n } else {\n // Stroke properties\n setTexData(startIndex + 28, uTroikaStrokeWidth.value);\n setTexData(startIndex + 29, tempColor$1.set(uTroikaStrokeColor.value).getHex());\n setTexData(startIndex + 30, uTroikaStrokeOpacity.value);\n }\n }\n });\n material.setMatrixTexture(texture);\n\n // For the non-member-specific uniforms:\n super._prepareForRender(material);\n }\n\n sync (callback) {\n // TODO: skip members updating their geometries, just use textRenderInfo directly\n\n // Trigger sync on all members that need it\n let syncPromises = this._needsRepack ? [] : null;\n this._needsRepack = false;\n this._members.forEach((packingInfo, text) => {\n if (packingInfo.dirty || text._needsSync) {\n packingInfo.dirty = false;\n (syncPromises || (syncPromises = [])).push(new Promise(resolve => {\n if (text._needsSync) {\n text.sync(resolve);\n } else {\n resolve();\n }\n }));\n }\n });\n\n // If any needed syncing, wait for them and then repack the batched geometry\n if (syncPromises) {\n this.dispatchEvent(syncStartEvent$1);\n\n Promise.all(syncPromises).then(() => {\n const { geometry } = this;\n const batchedAttributes = geometry.attributes;\n let memberIndexes = batchedAttributes[memberIndexAttrName] && batchedAttributes[memberIndexAttrName].array || new Uint16Array(0);\n let batchedGlyphIndexes = batchedAttributes[glyphIndexAttrName] && batchedAttributes[glyphIndexAttrName].array || new Float32Array(0);\n let batchedGlyphBounds = batchedAttributes[glyphBoundsAttrName] && batchedAttributes[glyphBoundsAttrName].array || new Float32Array(0);\n\n // Initial pass to collect total glyph count and resize the arrays if needed\n let totalGlyphCount = 0;\n this._members.forEach((packingInfo, { textRenderInfo }) => {\n if (textRenderInfo) {\n totalGlyphCount += textRenderInfo.glyphAtlasIndices.length;\n this._textRenderInfo = textRenderInfo; // TODO - need this, but be smarter\n }\n });\n if (totalGlyphCount !== memberIndexes.length) {\n memberIndexes = cloneAndResize(memberIndexes, totalGlyphCount);\n batchedGlyphIndexes = cloneAndResize(batchedGlyphIndexes, totalGlyphCount);\n batchedGlyphBounds = cloneAndResize(batchedGlyphBounds, totalGlyphCount * 4);\n }\n\n // Populate batch arrays\n let memberIndex = 0;\n let glyphIndex = 0;\n this._members.forEach((packingInfo, { textRenderInfo }) => {\n if (textRenderInfo) {\n const glyphCount = textRenderInfo.glyphAtlasIndices.length;\n memberIndexes.fill(memberIndex, glyphIndex, glyphIndex + glyphCount);\n\n // TODO can skip these for members that are not dirty or shifting overall position:\n batchedGlyphIndexes.set(textRenderInfo.glyphAtlasIndices, glyphIndex, glyphIndex + glyphCount);\n batchedGlyphBounds.set(textRenderInfo.glyphBounds, glyphIndex * 4, (glyphIndex + glyphCount) * 4);\n\n glyphIndex += glyphCount;\n packingInfo.index = memberIndex++;\n }\n });\n\n // Update the geometry attributes\n geometry.updateAttributeData(memberIndexAttrName, memberIndexes, 1);\n geometry.getAttribute(memberIndexAttrName).setUsage(DynamicDrawUsage);\n geometry.updateAttributeData(glyphIndexAttrName, batchedGlyphIndexes, 1);\n geometry.updateAttributeData(glyphBoundsAttrName, batchedGlyphBounds, 4);\n\n this.updateBounds();\n\n this.dispatchEvent(syncCompleteEvent$1);\n if (callback) {\n callback();\n }\n });\n }\n }\n\n copy (source) {\n if (source instanceof BatchedText) {\n super.copy(source);\n this._members.forEach((_, text) => this.removeText(text));\n source._members.forEach((_, text) => this.addText(text));\n }\n return this;\n }\n\n dispose () {\n super.dispose();\n Object.values(this._dataTextures).forEach(tex => tex.dispose());\n }\n}\n\nfunction cloneAndResize (source, newLength) {\n const copy = new source.constructor(newLength);\n copy.set(source.subarray(0, newLength));\n return copy;\n}\n\nfunction createBatchedTextMaterial (baseMaterial) {\n const texUniformName = \"uTroikaMatricesTexture\";\n const texSizeUniformName = \"uTroikaMatricesTextureSize\";\n\n // Due to how vertexTransform gets injected, the matrix transforms must happen\n // in the base material of TextDerivedMaterial, but other transforms to its\n // shader must come after, so we sandwich it between two derivations.\n\n // Transform the vertex position\n let batchMaterial = createDerivedMaterial(baseMaterial, {\n chained: true,\n uniforms: {\n [texSizeUniformName]: { value: new Vector2() },\n [texUniformName]: { value: null }\n },\n // language=GLSL\n vertexDefs: `\n uniform highp sampler2D ${texUniformName};\n uniform vec2 ${texSizeUniformName};\n attribute float ${memberIndexAttrName};\n\n vec4 troikaBatchTexel(float offset) {\n offset += ${memberIndexAttrName} * ${floatsPerMember.toFixed(1)} / 4.0;\n float w = ${texSizeUniformName}.x;\n vec2 uv = (vec2(mod(offset, w), floor(offset / w)) + 0.5) / ${texSizeUniformName};\n return texture2D(${texUniformName}, uv);\n }\n `,\n // language=GLSL prefix=\"void main() {\" suffix=\"}\"\n vertexTransform: `\n mat4 matrix = mat4(\n troikaBatchTexel(0.0),\n troikaBatchTexel(1.0),\n troikaBatchTexel(2.0),\n troikaBatchTexel(3.0)\n );\n position.xyz = (matrix * vec4(position, 1.0)).xyz;\n `,\n });\n\n // Add the text shaders\n batchMaterial = createTextDerivedMaterial(batchMaterial);\n\n // Now make other changes to the derived text shader code\n batchMaterial = createDerivedMaterial(batchMaterial, {\n chained: true,\n uniforms: {\n uTroikaIsOutline: {value: false},\n },\n customRewriter(shaders) {\n // Convert some text shader uniforms to varyings\n const varyingUniforms = [\n 'uTroikaTotalBounds',\n 'uTroikaClipRect',\n 'uTroikaPositionOffset',\n 'uTroikaEdgeOffset',\n 'uTroikaBlurRadius',\n 'uTroikaStrokeWidth',\n 'uTroikaStrokeColor',\n 'uTroikaStrokeOpacity',\n 'uTroikaFillOpacity',\n 'uTroikaCurveRadius',\n 'diffuse'\n ];\n varyingUniforms.forEach(uniformName => {\n shaders = uniformToVarying(shaders, uniformName);\n });\n return shaders\n },\n // language=GLSL\n vertexDefs: `\n uniform bool uTroikaIsOutline;\n vec3 troikaFloatToColor(float v) {\n return mod(floor(vec3(v / 65536.0, v / 256.0, v)), 256.0) / 256.0;\n }\n `,\n // language=GLSL prefix=\"void main() {\" suffix=\"}\"\n vertexTransform: `\n uTroikaTotalBounds = troikaBatchTexel(4.0);\n uTroikaClipRect = troikaBatchTexel(5.0);\n \n vec4 data = troikaBatchTexel(6.0);\n diffuse = troikaFloatToColor(data.x);\n uTroikaFillOpacity = data.y;\n uTroikaCurveRadius = data.z;\n \n data = troikaBatchTexel(7.0);\n if (uTroikaIsOutline) {\n if (data == vec4(0.0)) { // degenerate if zero outline\n position = vec3(0.0);\n } else {\n uTroikaPositionOffset = data.xy;\n uTroikaEdgeOffset = data.z;\n uTroikaBlurRadius = data.w;\n }\n } else {\n uTroikaStrokeWidth = data.x;\n uTroikaStrokeColor = troikaFloatToColor(data.y);\n uTroikaStrokeOpacity = data.z;\n }\n `,\n });\n\n batchMaterial.setMatrixTexture = (texture) => {\n batchMaterial.uniforms[texUniformName].value = texture;\n batchMaterial.uniforms[texSizeUniformName].value.set(texture.image.width, texture.image.height);\n };\n return batchMaterial;\n}\n\n/**\n * Turn a uniform into a varying/writeable value.\n * - If the uniform was used in the fragment shader, it will become a varying in both shaders.\n * - If the uniform was only used in the vertex shader, it will become a writeable var.\n */\nfunction uniformToVarying({vertexShader, fragmentShader}, uniformName, varyingName = uniformName) {\n const uniformRE = new RegExp(`uniform\\\\s+(bool|float|vec[234]|mat[34])\\\\s+${uniformName}\\\\b`);\n\n let type;\n let hadFragmentUniform = false;\n fragmentShader = fragmentShader.replace(uniformRE, ($0, $1) => {\n hadFragmentUniform = true;\n return `varying ${type = $1} ${varyingName}`\n });\n\n let hadVertexUniform = false;\n vertexShader = vertexShader.replace(uniformRE, (_, $1) => {\n hadVertexUniform = true;\n return `${hadFragmentUniform ? 'varying' : ''} ${type = $1} ${varyingName}`\n });\n if (!hadVertexUniform) {\n vertexShader = `${hadFragmentUniform ? 'varying' : ''} ${type} ${varyingName};\\n${vertexShader}`;\n }\n return {vertexShader, fragmentShader}\n}\n\n//=== Utility functions for dealing with carets and selection ranges ===//\n\n/**\n * @typedef {object} TextCaret\n * @property {number} x - x position of the caret\n * @property {number} y - y position of the caret's bottom\n * @property {number} height - height of the caret\n * @property {number} charIndex - the index in the original input string of this caret's target\n * character; the caret will be for the position _before_ that character.\n */\n\n/**\n * Given a local x/y coordinate in the text block plane, find the nearest caret position.\n * @param {TroikaTextRenderInfo} textRenderInfo - a result object from TextBuilder#getTextRenderInfo\n * @param {number} x\n * @param {number} y\n * @return {TextCaret | null}\n */\nfunction getCaretAtPoint(textRenderInfo, x, y) {\n let closestCaret = null;\n const rows = groupCaretsByRow(textRenderInfo);\n\n // Find nearest row by y first\n let closestRow = null;\n rows.forEach(row => {\n if (!closestRow || Math.abs(y - (row.top + row.bottom) / 2) < Math.abs(y - (closestRow.top + closestRow.bottom) / 2)) {\n closestRow = row;\n }\n });\n\n // Then find closest caret by x within that row\n closestRow.carets.forEach(caret => {\n if (!closestCaret || Math.abs(x - caret.x) < Math.abs(x - closestCaret.x)) {\n closestCaret = caret;\n }\n });\n return closestCaret\n}\n\n\nconst _rectsCache = new WeakMap();\n\n/**\n * Given start and end character indexes, return a list of rectangles covering all the\n * characters within that selection.\n * @param {TroikaTextRenderInfo} textRenderInfo\n * @param {number} start - index of the first char in the selection\n * @param {number} end - index of the first char after the selection\n * @return {Array<{left, top, right, bottom}> | null}\n */\nfunction getSelectionRects(textRenderInfo, start, end) {\n let rects;\n if (textRenderInfo) {\n // Check cache - textRenderInfo is frozen so it's safe to cache based on it\n let prevResult = _rectsCache.get(textRenderInfo);\n if (prevResult && prevResult.start === start && prevResult.end === end) {\n return prevResult.rects\n }\n\n const {caretPositions} = textRenderInfo;\n\n // Normalize\n if (end < start) {\n const s = start;\n start = end;\n end = s;\n }\n start = Math.max(start, 0);\n end = Math.min(end, caretPositions.length + 1);\n\n // Build list of rects, expanding the current rect for all characters in a run and starting\n // a new rect whenever reaching a new line or a new bidi direction\n rects = [];\n let currentRect = null;\n for (let i = start; i < end; i++) {\n const x1 = caretPositions[i * 4];\n const x2 = caretPositions[i * 4 + 1];\n const left = Math.min(x1, x2);\n const right = Math.max(x1, x2);\n const bottom = caretPositions[i * 4 + 2];\n const top = caretPositions[i * 4 + 3];\n if (!currentRect || bottom !== currentRect.bottom || top !== currentRect.top || left > currentRect.right || right < currentRect.left) {\n currentRect = {\n left: Infinity,\n right: -Infinity,\n bottom,\n top,\n };\n rects.push(currentRect);\n }\n currentRect.left = Math.min(left, currentRect.left);\n currentRect.right = Math.max(right, currentRect.right);\n }\n\n // Merge any overlapping rects, e.g. those formed by adjacent bidi runs\n rects.sort((a, b) => b.bottom - a.bottom || a.left - b.left);\n for (let i = rects.length - 1; i-- > 0;) {\n const rectA = rects[i];\n const rectB = rects[i + 1];\n if (rectA.bottom === rectB.bottom && rectA.top === rectB.top && rectA.left <= rectB.right && rectA.right >= rectB.left) {\n rectB.left = Math.min(rectB.left, rectA.left);\n rectB.right = Math.max(rectB.right, rectA.right);\n rects.splice(i, 1);\n }\n }\n\n _rectsCache.set(textRenderInfo, {start, end, rects});\n }\n return rects\n}\n\nconst _caretsByRowCache = new WeakMap();\n\n/**\n * Group a set of carets by row of text, caching the result. A single row of text may contain carets of\n * differing positions/heights if it has multiple fonts, and they may overlap slightly across rows, so this\n * uses an assumption of \"at least overlapping by half\" to put them in the same row.\n * @return Array<{bottom: number, top: number, carets: TextCaret[]}>\n */\nfunction groupCaretsByRow(textRenderInfo) {\n // textRenderInfo is frozen so it's safe to cache based on it\n let rows = _caretsByRowCache.get(textRenderInfo);\n if (!rows) {\n rows = [];\n const {caretPositions} = textRenderInfo;\n let curRow;\n\n const visitCaret = (x, bottom, top, charIndex) => {\n // new row if not overlapping by at least half\n if (!curRow || (top < (curRow.top + curRow.bottom) / 2)) {\n rows.push(curRow = {bottom, top, carets: []});\n }\n // expand vertical limits if necessary\n if (top > curRow.top) curRow.top = top;\n if (bottom < curRow.bottom) curRow.bottom = bottom;\n curRow.carets.push({\n x,\n y: bottom,\n height: top - bottom,\n charIndex,\n });\n };\n\n let i = 0;\n for (; i < caretPositions.length; i += 4) {\n visitCaret(caretPositions[i], caretPositions[i + 2], caretPositions[i + 3], i / 4);\n }\n // Add one more caret after the final char\n visitCaret(caretPositions[i - 3], caretPositions[i - 2], caretPositions[i - 1], i / 4);\n }\n _caretsByRowCache.set(textRenderInfo, rows);\n return rows\n}\n\nexport { BatchedText, GlyphsGeometry, Text, configureTextBuilder, createTextDerivedMaterial, dumpSDFTextures, fontResolverWorkerModule, getCaretAtPoint, getSelectionRects, getTextRenderInfo, preloadFont, typesetterWorkerModule };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { Text as Text$1, preloadFont } from 'troika-three-text';\nimport { useThree } from '@react-three/fiber';\nimport { suspend } from 'suspend-react';\n\nconst Text = /* @__PURE__ */React.forwardRef(({\n sdfGlyphSize = 64,\n anchorX = 'center',\n anchorY = 'middle',\n font,\n fontSize = 1,\n children,\n characters,\n onSync,\n ...props\n}, ref) => {\n const invalidate = useThree(({\n invalidate\n }) => invalidate);\n const [troikaMesh] = React.useState(() => new Text$1());\n const [nodes, text] = React.useMemo(() => {\n const n = [];\n let t = '';\n React.Children.forEach(children, child => {\n if (typeof child === 'string' || typeof child === 'number') {\n t += child;\n } else {\n n.push(child);\n }\n });\n return [n, t];\n }, [children]);\n suspend(() => new Promise(res => preloadFont({\n font,\n characters\n }, res)), ['troika-text', font, characters]);\n React.useLayoutEffect(() => void troikaMesh.sync(() => {\n invalidate();\n if (onSync) onSync(troikaMesh);\n }));\n React.useEffect(() => {\n return () => troikaMesh.dispose();\n }, [troikaMesh]);\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n object: troikaMesh,\n ref: ref,\n font: font,\n text: text,\n anchorX: anchorX,\n anchorY: anchorY,\n fontSize: fontSize,\n sdfGlyphSize: sdfGlyphSize\n }, props), nodes);\n});\n\nexport { Text };\n","import { FontLoader } from 'three-stdlib';\nimport { suspend, preload, clear } from 'suspend-react';\n\nlet fontLoader = null;\nasync function loadFontData(font) {\n return typeof font === 'string' ? await (await fetch(font)).json() : font;\n}\nfunction parseFontData(fontData) {\n if (!fontLoader) {\n fontLoader = new FontLoader();\n }\n return fontLoader.parse(fontData);\n}\nasync function loader(font) {\n const data = await loadFontData(font);\n return parseFontData(data);\n}\nfunction useFont(font) {\n return suspend(loader, [font]);\n}\nuseFont.preload = font => preload(loader, [font]);\nuseFont.clear = font => clear([font]);\n\nexport { useFont };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useMemo } from 'react';\nimport { extend } from '@react-three/fiber';\nimport { TextGeometry, mergeVertices } from 'three-stdlib';\nimport { useFont } from './useFont.js';\n\nconst types = ['string', 'number'];\nconst getTextFromChildren = children => {\n let label = '';\n const rest = [];\n React.Children.forEach(children, child => {\n if (types.includes(typeof child)) label += child + '';else rest.push(child);\n });\n return [label, ...rest];\n};\nconst Text3D = /* @__PURE__ */React.forwardRef(({\n font: _font,\n letterSpacing = 0,\n lineHeight = 1,\n size = 1,\n height = 0.2,\n bevelThickness = 0.1,\n bevelSize = 0.01,\n bevelEnabled = false,\n bevelOffset = 0,\n bevelSegments = 4,\n curveSegments = 8,\n smooth,\n children,\n ...props\n}, fref) => {\n React.useMemo(() => extend({\n RenamedTextGeometry: TextGeometry\n }), []);\n const ref = React.useRef(null);\n const font = useFont(_font);\n const opts = useMemo(() => {\n return {\n font,\n size,\n height,\n bevelThickness,\n bevelSize,\n bevelEnabled,\n bevelSegments,\n bevelOffset,\n curveSegments,\n letterSpacing,\n lineHeight\n };\n }, [font, size, height, bevelThickness, bevelSize, bevelEnabled, bevelSegments, bevelOffset, curveSegments, letterSpacing, lineHeight]);\n\n /**\n * We need the `children` in the deps because we\n * need to be able to do `{state}`.\n */\n const [label, ...rest] = useMemo(() => getTextFromChildren(children), [children]);\n const args = React.useMemo(() => [label, opts], [label, opts]);\n React.useLayoutEffect(() => {\n if (smooth) {\n ref.current.geometry = mergeVertices(ref.current.geometry, smooth);\n ref.current.geometry.computeVertexNormals();\n }\n }, [args, smooth]);\n React.useImperativeHandle(fref, () => ref.current, []);\n return /*#__PURE__*/React.createElement(\"mesh\", _extends({}, props, {\n ref: ref\n }), /*#__PURE__*/React.createElement(\"renamedTextGeometry\", {\n args: args\n }), rest);\n});\n\nexport { Text3D };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { WebGLRenderTarget, HalfFloatType, RGBAFormat, UnsignedByteType } from 'three';\nimport { extend, useThree, useFrame } from '@react-three/fiber';\nimport { EffectComposer, RenderPass, ShaderPass, GammaCorrectionShader } from 'three-stdlib';\n\nconst isWebGL2Available = () => {\n try {\n var canvas = document.createElement('canvas');\n return !!(window.WebGL2RenderingContext && canvas.getContext('webgl2'));\n } catch (e) {\n return false;\n }\n};\nconst Effects = /* @__PURE__ */React.forwardRef(({\n children,\n multisamping = 8,\n renderIndex = 1,\n disableRender,\n disableGamma,\n disableRenderPass,\n depthBuffer = true,\n stencilBuffer = false,\n anisotropy = 1,\n colorSpace,\n type,\n ...props\n}, ref) => {\n React.useMemo(() => extend({\n EffectComposer,\n RenderPass,\n ShaderPass\n }), []);\n const composer = React.useRef(null);\n React.useImperativeHandle(ref, () => composer.current, []);\n const {\n scene,\n camera,\n gl,\n size,\n viewport\n } = useThree();\n const [target] = React.useState(() => {\n const t = new WebGLRenderTarget(size.width, size.height, {\n type: type || HalfFloatType,\n format: RGBAFormat,\n depthBuffer,\n stencilBuffer,\n anisotropy\n });\n\n // sRGB textures must be RGBA8 since r137 https://github.com/mrdoob/three.js/pull/23129\n if (type === UnsignedByteType && colorSpace != null) {\n t.texture.colorSpace = colorSpace;\n }\n t.samples = multisamping;\n return t;\n });\n React.useEffect(() => {\n var _composer$current, _composer$current2;\n (_composer$current = composer.current) == null || _composer$current.setSize(size.width, size.height);\n (_composer$current2 = composer.current) == null || _composer$current2.setPixelRatio(viewport.dpr);\n }, [gl, size, viewport.dpr]);\n useFrame(() => {\n var _composer$current3;\n if (!disableRender) (_composer$current3 = composer.current) == null || _composer$current3.render();\n }, renderIndex);\n const passes = [];\n if (!disableRenderPass) passes.push(/*#__PURE__*/React.createElement(\"renderPass\", {\n key: \"renderpass\",\n attach: `passes-${passes.length}`,\n args: [scene, camera]\n }));\n if (!disableGamma) passes.push(/*#__PURE__*/React.createElement(\"shaderPass\", {\n attach: `passes-${passes.length}`,\n key: \"gammapass\",\n args: [GammaCorrectionShader]\n }));\n React.Children.forEach(children, el => {\n el && passes.push(/*#__PURE__*/React.cloneElement(el, {\n key: passes.length,\n attach: `passes-${passes.length}`\n }));\n });\n return /*#__PURE__*/React.createElement(\"effectComposer\", _extends({\n ref: composer,\n args: [gl, target]\n }, props), passes);\n});\n\nexport { Effects, isWebGL2Available };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useThree } from '@react-three/fiber';\nimport * as THREE from 'three';\n\nlet GradientType = /*#__PURE__*/function (GradientType) {\n GradientType[\"Linear\"] = \"linear\";\n GradientType[\"Radial\"] = \"radial\";\n return GradientType;\n}({});\nfunction GradientTexture({\n stops,\n colors,\n size = 1024,\n width = 16,\n type = GradientType.Linear,\n innerCircleRadius = 0,\n outerCircleRadius = 'auto',\n ...props\n}) {\n const gl = useThree(state => state.gl);\n const canvas = React.useMemo(() => {\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n canvas.width = width;\n canvas.height = size;\n let gradient;\n if (type === GradientType.Linear) {\n gradient = context.createLinearGradient(0, 0, 0, size);\n } else {\n const canvasCenterX = canvas.width / 2;\n const canvasCenterY = canvas.height / 2;\n const radius = outerCircleRadius !== 'auto' ? Math.abs(Number(outerCircleRadius)) : Math.sqrt(canvasCenterX ** 2 + canvasCenterY ** 2);\n gradient = context.createRadialGradient(canvasCenterX, canvasCenterY, Math.abs(innerCircleRadius), canvasCenterX, canvasCenterY, radius);\n }\n const tempColor = new THREE.Color(); // reuse instance for performance\n let i = stops.length;\n while (i--) {\n gradient.addColorStop(stops[i], tempColor.set(colors[i]).getStyle());\n }\n context.save();\n context.fillStyle = gradient;\n context.fillRect(0, 0, width, size);\n context.restore();\n return canvas;\n }, [stops]);\n return /*#__PURE__*/React.createElement(\"canvasTexture\", _extends({\n colorSpace: gl.outputColorSpace,\n args: [canvas],\n attach: \"map\"\n }, props));\n}\n\nexport { GradientTexture, GradientType };\n","import * as THREE from 'three';\n\nfunction shaderMaterial(uniforms, vertexShader, fragmentShader, onInit) {\n var _Class;\n return _Class = class extends THREE.ShaderMaterial {\n constructor(parameters) {\n super({\n vertexShader,\n fragmentShader,\n ...parameters\n });\n for (const key in uniforms) {\n this.uniforms[key] = new THREE.Uniform(uniforms[key]);\n Object.defineProperty(this, key, {\n get() {\n return this.uniforms[key].value;\n },\n set(value) {\n this.uniforms[key].value = value;\n }\n });\n }\n this.uniforms = THREE.UniformsUtils.clone(this.uniforms);\n onInit == null || onInit(this);\n }\n }, _Class.key = THREE.MathUtils.generateUUID(), _Class;\n}\n\nexport { shaderMaterial };\n","import * as React from 'react';\nimport { useLayoutEffect, useEffect, useMemo } from 'react';\nimport { TextureLoader, Texture as Texture$1 } from 'three';\nimport { useThree, useLoader } from '@react-three/fiber';\n\nconst IsObject = url => url === Object(url) && !Array.isArray(url) && typeof url !== 'function';\nfunction useTexture(input, onLoad) {\n const gl = useThree(state => state.gl);\n const textures = useLoader(TextureLoader, IsObject(input) ? Object.values(input) : input);\n useLayoutEffect(() => {\n onLoad == null || onLoad(textures);\n }, [onLoad]);\n\n // https://github.com/mrdoob/three.js/issues/22696\n // Upload the texture to the GPU immediately instead of waiting for the first render\n // NOTE: only available for WebGLRenderer\n useEffect(() => {\n if ('initTexture' in gl) {\n let textureArray = [];\n if (Array.isArray(textures)) {\n textureArray = textures;\n } else if (textures instanceof Texture$1) {\n textureArray = [textures];\n } else if (IsObject(textures)) {\n textureArray = Object.values(textures);\n }\n textureArray.forEach(texture => {\n if (texture instanceof Texture$1) {\n gl.initTexture(texture);\n }\n });\n }\n }, [gl, textures]);\n const mappedTextures = useMemo(() => {\n if (IsObject(input)) {\n const keyed = {};\n let i = 0;\n for (const key in input) keyed[key] = textures[i++];\n return keyed;\n } else {\n return textures;\n }\n }, [input, textures]);\n return mappedTextures;\n}\nuseTexture.preload = url => useLoader.preload(TextureLoader, url);\nuseTexture.clear = input => useLoader.clear(TextureLoader, input);\n\n//\n\nconst Texture = ({\n children,\n input,\n onLoad\n}) => {\n const ret = useTexture(input, onLoad);\n return /*#__PURE__*/React.createElement(React.Fragment, null, children == null ? void 0 : children(ret));\n};\n\nexport { IsObject, Texture, useTexture };\n","import { REVISION } from 'three';\n\nconst getVersion = () => parseInt(REVISION.replace(/\\D+/g, ''));\nconst version = /* @__PURE__ */getVersion();\n\nexport { version };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { extend, useThree } from '@react-three/fiber';\nimport { shaderMaterial } from './shaderMaterial.js';\nimport { useTexture } from './Texture.js';\nimport { version } from '../helpers/constants.js';\n\n// {texture: THREE.Texture} XOR {url: string}\n\nconst ImageMaterialImpl = /* @__PURE__ */shaderMaterial({\n color: /* @__PURE__ */new THREE.Color('white'),\n scale: /* @__PURE__ */new THREE.Vector2(1, 1),\n imageBounds: /* @__PURE__ */new THREE.Vector2(1, 1),\n resolution: 1024,\n map: null,\n zoom: 1,\n radius: 0,\n grayscale: 0,\n opacity: 1\n}, /* glsl */`\n varying vec2 vUv;\n varying vec2 vPos;\n void main() {\n gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);\n vUv = uv;\n vPos = position.xy;\n }\n`, /* glsl */`\n // mostly from https://gist.github.com/statico/df64c5d167362ecf7b34fca0b1459a44\n varying vec2 vUv;\n varying vec2 vPos;\n uniform vec2 scale;\n uniform vec2 imageBounds;\n uniform float resolution;\n uniform vec3 color;\n uniform sampler2D map;\n uniform float radius;\n uniform float zoom;\n uniform float grayscale;\n uniform float opacity;\n const vec3 luma = vec3(.299, 0.587, 0.114);\n vec4 toGrayscale(vec4 color, float intensity) {\n return vec4(mix(color.rgb, vec3(dot(color.rgb, luma)), intensity), color.a);\n }\n vec2 aspect(vec2 size) {\n return size / min(size.x, size.y);\n }\n \n const float PI = 3.14159265;\n \n // from https://iquilezles.org/articles/distfunctions\n float udRoundBox( vec2 p, vec2 b, float r ) {\n return length(max(abs(p)-b+r,0.0))-r;\n }\n\n void main() {\n vec2 s = aspect(scale);\n vec2 i = aspect(imageBounds);\n float rs = s.x / s.y;\n float ri = i.x / i.y;\n vec2 new = rs < ri ? vec2(i.x * s.y / i.y, s.y) : vec2(s.x, i.y * s.x / i.x);\n vec2 offset = (rs < ri ? vec2((new.x - s.x) / 2.0, 0.0) : vec2(0.0, (new.y - s.y) / 2.0)) / new;\n vec2 uv = vUv * s / new + offset;\n vec2 zUv = (uv - vec2(0.5, 0.5)) / zoom + vec2(0.5, 0.5);\n\n vec2 res = vec2(scale * resolution);\n vec2 halfRes = 0.5 * res;\n float b = udRoundBox(vUv.xy * res - halfRes, halfRes, resolution * radius); \n\t vec3 a = mix(vec3(1.0,0.0,0.0), vec3(0.0,0.0,0.0), smoothstep(0.0, 1.0, b));\n gl_FragColor = toGrayscale(texture2D(map, zUv) * vec4(color, opacity * a), grayscale);\n \n #include \n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }\n`);\nconst ImageBase = /* @__PURE__ */React.forwardRef(({\n children,\n color,\n segments = 1,\n scale = 1,\n zoom = 1,\n grayscale = 0,\n opacity = 1,\n radius = 0,\n texture,\n toneMapped,\n transparent,\n side,\n ...props\n}, fref) => {\n extend({\n ImageMaterial: ImageMaterialImpl\n });\n const ref = React.useRef(null);\n const size = useThree(state => state.size);\n const planeBounds = Array.isArray(scale) ? [scale[0], scale[1]] : [scale, scale];\n const imageBounds = [texture.image.width, texture.image.height];\n const resolution = Math.max(size.width, size.height);\n React.useImperativeHandle(fref, () => ref.current, []);\n React.useLayoutEffect(() => {\n // Support arbitrary plane geometries (for instance with rounded corners)\n // @ts-ignore\n if (ref.current.geometry.parameters) {\n // @ts-ignore\n ref.current.material.scale.set(\n // @ts-ignore\n planeBounds[0] * ref.current.geometry.parameters.width,\n // @ts-ignore\n planeBounds[1] * ref.current.geometry.parameters.height);\n }\n }, [planeBounds[0], planeBounds[1]]);\n return /*#__PURE__*/React.createElement(\"mesh\", _extends({\n ref: ref,\n scale: Array.isArray(scale) ? [...scale, 1] : scale\n }, props), /*#__PURE__*/React.createElement(\"planeGeometry\", {\n args: [1, 1, segments, segments]\n }), /*#__PURE__*/React.createElement(\"imageMaterial\", {\n color: color,\n map: texture,\n zoom: zoom,\n grayscale: grayscale,\n opacity: opacity,\n scale: planeBounds,\n imageBounds: imageBounds,\n resolution: resolution,\n radius: radius,\n toneMapped: toneMapped,\n transparent: transparent,\n side: side,\n key: ImageMaterialImpl.key\n }), children);\n});\nconst ImageWithUrl = /* @__PURE__ */React.forwardRef(({\n url,\n ...props\n}, ref) => {\n const texture = useTexture(url);\n return /*#__PURE__*/React.createElement(ImageBase, _extends({}, props, {\n texture: texture,\n ref: ref\n }));\n});\nconst ImageWithTexture = /* @__PURE__ */React.forwardRef(({\n url: _url,\n ...props\n}, ref) => {\n return /*#__PURE__*/React.createElement(ImageBase, _extends({}, props, {\n ref: ref\n }));\n});\nconst Image = /* @__PURE__ */React.forwardRef((props, ref) => {\n if (props.url) return /*#__PURE__*/React.createElement(ImageWithUrl, _extends({}, props, {\n ref: ref\n }));else if (props.texture) return /*#__PURE__*/React.createElement(ImageWithTexture, _extends({}, props, {\n ref: ref\n }));else throw new Error(' requires a url or texture');\n});\n\nexport { Image };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { Line } from './Line.js';\n\nconst Edges = /* @__PURE__ */React.forwardRef(({\n threshold = 15,\n geometry: explicitGeometry,\n ...props\n}, fref) => {\n const ref = React.useRef(null);\n React.useImperativeHandle(fref, () => ref.current, []);\n const tmpPoints = React.useMemo(() => [0, 0, 0, 1, 0, 0], []);\n const memoizedGeometry = React.useRef(null);\n const memoizedThreshold = React.useRef(null);\n React.useLayoutEffect(() => {\n const parent = ref.current.parent;\n const geometry = explicitGeometry !== null && explicitGeometry !== void 0 ? explicitGeometry : parent == null ? void 0 : parent.geometry;\n if (!geometry) return;\n const cached = memoizedGeometry.current === geometry && memoizedThreshold.current === threshold;\n if (cached) return;\n memoizedGeometry.current = geometry;\n memoizedThreshold.current = threshold;\n const points = new THREE.EdgesGeometry(geometry, threshold).attributes.position.array;\n ref.current.geometry.setPositions(points);\n ref.current.geometry.attributes.instanceStart.needsUpdate = true;\n ref.current.geometry.attributes.instanceEnd.needsUpdate = true;\n ref.current.computeLineDistances();\n });\n return /*#__PURE__*/React.createElement(Line, _extends({\n segments: true,\n points: tmpPoints,\n ref: ref,\n raycast: () => null\n }, props));\n});\n\nexport { Edges };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { shaderMaterial } from './shaderMaterial.js';\nimport { useThree, extend, applyProps } from '@react-three/fiber';\nimport { toCreasedNormals } from 'three-stdlib';\nimport { version } from '../helpers/constants.js';\n\nconst OutlinesMaterial = /* @__PURE__ */shaderMaterial({\n screenspace: false,\n color: /* @__PURE__ */new THREE.Color('black'),\n opacity: 1,\n thickness: 0.05,\n size: /* @__PURE__ */new THREE.Vector2()\n}, `#include \n #include \n #include \n #include \n uniform float thickness;\n uniform bool screenspace;\n uniform vec2 size;\n void main() {\n #if defined (USE_SKINNING)\n\t #include \n #include \n #include \n #include \n #include \n #endif\n #include \n\t #include \n\t #include \n #include \n #include \n vec4 tNormal = vec4(normal, 0.0);\n vec4 tPosition = vec4(transformed, 1.0);\n #ifdef USE_INSTANCING\n tNormal = instanceMatrix * tNormal;\n tPosition = instanceMatrix * tPosition;\n #endif\n if (screenspace) {\n vec3 newPosition = tPosition.xyz + tNormal.xyz * thickness;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(newPosition, 1.0); \n } else {\n vec4 clipPosition = projectionMatrix * modelViewMatrix * tPosition;\n vec4 clipNormal = projectionMatrix * modelViewMatrix * tNormal;\n vec2 offset = normalize(clipNormal.xy) * thickness / size * clipPosition.w * 2.0;\n clipPosition.xy += offset;\n gl_Position = clipPosition;\n }\n }`, `uniform vec3 color;\n uniform float opacity;\n #include \n void main(){\n #include \n gl_FragColor = vec4(color, opacity);\n #include \n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }`);\nfunction Outlines({\n color = 'black',\n opacity = 1,\n transparent = false,\n screenspace = false,\n toneMapped = true,\n polygonOffset = false,\n polygonOffsetFactor = 0,\n renderOrder = 0,\n thickness = 0.05,\n angle = Math.PI,\n clippingPlanes,\n ...props\n}) {\n const ref = React.useRef(null);\n const [material] = React.useState(() => new OutlinesMaterial({\n side: THREE.BackSide\n }));\n const {\n gl\n } = useThree();\n const contextSize = gl.getDrawingBufferSize(new THREE.Vector2());\n React.useMemo(() => extend({\n OutlinesMaterial\n }), []);\n const oldAngle = React.useRef(0);\n const oldGeometry = React.useRef(null);\n React.useLayoutEffect(() => {\n const group = ref.current;\n if (!group) return;\n const parent = group.parent;\n if (parent && parent.geometry) {\n if (oldAngle.current !== angle || oldGeometry.current !== parent.geometry) {\n var _group$children;\n oldAngle.current = angle;\n oldGeometry.current = parent.geometry;\n\n // Remove old mesh\n let mesh = (_group$children = group.children) == null ? void 0 : _group$children[0];\n if (mesh) {\n if (angle) mesh.geometry.dispose();\n group.remove(mesh);\n }\n if (parent.skeleton) {\n mesh = new THREE.SkinnedMesh();\n mesh.material = material;\n mesh.bind(parent.skeleton, parent.bindMatrix);\n group.add(mesh);\n } else if (parent.isInstancedMesh) {\n mesh = new THREE.InstancedMesh(parent.geometry, material, parent.count);\n mesh.instanceMatrix = parent.instanceMatrix;\n group.add(mesh);\n } else {\n mesh = new THREE.Mesh();\n mesh.material = material;\n group.add(mesh);\n }\n mesh.geometry = angle ? toCreasedNormals(parent.geometry, angle) : parent.geometry;\n mesh.morphTargetInfluences = parent.morphTargetInfluences;\n mesh.morphTargetDictionary = parent.morphTargetDictionary;\n }\n }\n });\n React.useLayoutEffect(() => {\n const group = ref.current;\n if (!group) return;\n const mesh = group.children[0];\n if (mesh) {\n mesh.renderOrder = renderOrder;\n const parent = group.parent;\n applyProps(mesh, {\n morphTargetInfluences: parent.morphTargetInfluences,\n morphTargetDictionary: parent.morphTargetDictionary\n });\n applyProps(mesh.material, {\n transparent,\n thickness,\n color,\n opacity,\n size: contextSize,\n screenspace,\n toneMapped,\n polygonOffset,\n polygonOffsetFactor,\n clippingPlanes,\n clipping: clippingPlanes && clippingPlanes.length > 0\n });\n }\n });\n React.useEffect(() => {\n return () => {\n // Dispose everything on unmount\n const group = ref.current;\n if (!group) return;\n const mesh = group.children[0];\n if (mesh) {\n if (angle) mesh.geometry.dispose();\n group.remove(mesh);\n }\n };\n }, []);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref\n }, props));\n}\n\nexport { Outlines };\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport * as THREE from \"three\";\nfunction memcpy(src, srcOffset, dst, dstOffset, length) {\n let i;\n src = src.subarray || src.slice ? src : src.buffer;\n dst = dst.subarray || dst.slice ? dst : dst.buffer;\n src = srcOffset ? src.subarray ? src.subarray(srcOffset, length && srcOffset + length) : src.slice(srcOffset, length && srcOffset + length) : src;\n if (dst.set) {\n dst.set(src, dstOffset);\n } else {\n for (i = 0; i < src.length; i++)\n dst[i + dstOffset] = src[i];\n }\n return dst;\n}\nfunction convertPoints(points) {\n if (points instanceof Float32Array)\n return points;\n if (points instanceof THREE.BufferGeometry)\n return points.getAttribute(\"position\").array;\n return points.map((p) => {\n const isArray = Array.isArray(p);\n return p instanceof THREE.Vector3 ? [p.x, p.y, p.z] : p instanceof THREE.Vector2 ? [p.x, p.y, 0] : isArray && p.length === 3 ? [p[0], p[1], p[2]] : isArray && p.length === 2 ? [p[0], p[1], 0] : p;\n }).flat();\n}\nclass MeshLineGeometry extends THREE.BufferGeometry {\n constructor() {\n super();\n __publicField(this, \"type\", \"MeshLine\");\n __publicField(this, \"isMeshLine\", true);\n __publicField(this, \"positions\", []);\n __publicField(this, \"previous\", []);\n __publicField(this, \"next\", []);\n __publicField(this, \"side\", []);\n __publicField(this, \"width\", []);\n __publicField(this, \"indices_array\", []);\n __publicField(this, \"uvs\", []);\n __publicField(this, \"counters\", []);\n __publicField(this, \"widthCallback\", null);\n __publicField(this, \"_attributes\");\n __publicField(this, \"_points\", []);\n __publicField(this, \"points\");\n __publicField(this, \"matrixWorld\", new THREE.Matrix4());\n Object.defineProperties(this, {\n points: {\n enumerable: true,\n get() {\n return this._points;\n },\n set(value) {\n this.setPoints(value, this.widthCallback);\n }\n }\n });\n }\n setMatrixWorld(matrixWorld) {\n this.matrixWorld = matrixWorld;\n }\n setPoints(points, wcb) {\n points = convertPoints(points);\n this._points = points;\n this.widthCallback = wcb != null ? wcb : null;\n this.positions = [];\n this.counters = [];\n if (points.length && points[0] instanceof THREE.Vector3) {\n for (let j = 0; j < points.length; j++) {\n const p = points[j];\n const c = j / (points.length - 1);\n this.positions.push(p.x, p.y, p.z);\n this.positions.push(p.x, p.y, p.z);\n this.counters.push(c);\n this.counters.push(c);\n }\n } else {\n for (let j = 0; j < points.length; j += 3) {\n const c = j / (points.length - 1);\n this.positions.push(points[j], points[j + 1], points[j + 2]);\n this.positions.push(points[j], points[j + 1], points[j + 2]);\n this.counters.push(c);\n this.counters.push(c);\n }\n }\n this.process();\n }\n compareV3(a, b) {\n const aa = a * 6;\n const ab = b * 6;\n return this.positions[aa] === this.positions[ab] && this.positions[aa + 1] === this.positions[ab + 1] && this.positions[aa + 2] === this.positions[ab + 2];\n }\n copyV3(a) {\n const aa = a * 6;\n return [this.positions[aa], this.positions[aa + 1], this.positions[aa + 2]];\n }\n process() {\n const l = this.positions.length / 6;\n this.previous = [];\n this.next = [];\n this.side = [];\n this.width = [];\n this.indices_array = [];\n this.uvs = [];\n let w;\n let v;\n if (this.compareV3(0, l - 1)) {\n v = this.copyV3(l - 2);\n } else {\n v = this.copyV3(0);\n }\n this.previous.push(v[0], v[1], v[2]);\n this.previous.push(v[0], v[1], v[2]);\n for (let j = 0; j < l; j++) {\n this.side.push(1);\n this.side.push(-1);\n if (this.widthCallback)\n w = this.widthCallback(j / (l - 1));\n else\n w = 1;\n this.width.push(w);\n this.width.push(w);\n this.uvs.push(j / (l - 1), 0);\n this.uvs.push(j / (l - 1), 1);\n if (j < l - 1) {\n v = this.copyV3(j);\n this.previous.push(v[0], v[1], v[2]);\n this.previous.push(v[0], v[1], v[2]);\n const n = j * 2;\n this.indices_array.push(n, n + 1, n + 2);\n this.indices_array.push(n + 2, n + 1, n + 3);\n }\n if (j > 0) {\n v = this.copyV3(j);\n this.next.push(v[0], v[1], v[2]);\n this.next.push(v[0], v[1], v[2]);\n }\n }\n if (this.compareV3(l - 1, 0)) {\n v = this.copyV3(1);\n } else {\n v = this.copyV3(l - 1);\n }\n this.next.push(v[0], v[1], v[2]);\n this.next.push(v[0], v[1], v[2]);\n if (!this._attributes || this._attributes.position.count !== this.counters.length) {\n this._attributes = {\n position: new THREE.BufferAttribute(new Float32Array(this.positions), 3),\n previous: new THREE.BufferAttribute(new Float32Array(this.previous), 3),\n next: new THREE.BufferAttribute(new Float32Array(this.next), 3),\n side: new THREE.BufferAttribute(new Float32Array(this.side), 1),\n width: new THREE.BufferAttribute(new Float32Array(this.width), 1),\n uv: new THREE.BufferAttribute(new Float32Array(this.uvs), 2),\n index: new THREE.BufferAttribute(new Uint16Array(this.indices_array), 1),\n counters: new THREE.BufferAttribute(new Float32Array(this.counters), 1)\n };\n } else {\n this._attributes.position.copyArray(new Float32Array(this.positions));\n this._attributes.position.needsUpdate = true;\n this._attributes.previous.copyArray(new Float32Array(this.previous));\n this._attributes.previous.needsUpdate = true;\n this._attributes.next.copyArray(new Float32Array(this.next));\n this._attributes.next.needsUpdate = true;\n this._attributes.side.copyArray(new Float32Array(this.side));\n this._attributes.side.needsUpdate = true;\n this._attributes.width.copyArray(new Float32Array(this.width));\n this._attributes.width.needsUpdate = true;\n this._attributes.uv.copyArray(new Float32Array(this.uvs));\n this._attributes.uv.needsUpdate = true;\n this._attributes.index.copyArray(new Uint16Array(this.indices_array));\n this._attributes.index.needsUpdate = true;\n }\n this.setAttribute(\"position\", this._attributes.position);\n this.setAttribute(\"previous\", this._attributes.previous);\n this.setAttribute(\"next\", this._attributes.next);\n this.setAttribute(\"side\", this._attributes.side);\n this.setAttribute(\"width\", this._attributes.width);\n this.setAttribute(\"uv\", this._attributes.uv);\n this.setAttribute(\"counters\", this._attributes.counters);\n this.setAttribute(\"position\", this._attributes.position);\n this.setAttribute(\"previous\", this._attributes.previous);\n this.setAttribute(\"next\", this._attributes.next);\n this.setAttribute(\"side\", this._attributes.side);\n this.setAttribute(\"width\", this._attributes.width);\n this.setAttribute(\"uv\", this._attributes.uv);\n this.setAttribute(\"counters\", this._attributes.counters);\n this.setIndex(this._attributes.index);\n this.computeBoundingSphere();\n this.computeBoundingBox();\n }\n advance({ x, y, z }) {\n const positions = this._attributes.position.array;\n const previous = this._attributes.previous.array;\n const next = this._attributes.next.array;\n const l = positions.length;\n memcpy(positions, 0, previous, 0, l);\n memcpy(positions, 6, positions, 0, l - 6);\n positions[l - 6] = x;\n positions[l - 5] = y;\n positions[l - 4] = z;\n positions[l - 3] = x;\n positions[l - 2] = y;\n positions[l - 1] = z;\n memcpy(positions, 6, next, 0, l - 6);\n next[l - 6] = x;\n next[l - 5] = y;\n next[l - 4] = z;\n next[l - 3] = x;\n next[l - 2] = y;\n next[l - 1] = z;\n this._attributes.position.needsUpdate = true;\n this._attributes.previous.needsUpdate = true;\n this._attributes.next.needsUpdate = true;\n }\n}\nconst vertexShader = `\n #include \n #include \n #include \n #include \n\n attribute vec3 previous;\n attribute vec3 next;\n attribute float side;\n attribute float width;\n attribute float counters;\n \n uniform vec2 resolution;\n uniform float lineWidth;\n uniform vec3 color;\n uniform float opacity;\n uniform float sizeAttenuation;\n \n varying vec2 vUV;\n varying vec4 vColor;\n varying float vCounters;\n \n vec2 fix(vec4 i, float aspect) {\n vec2 res = i.xy / i.w;\n res.x *= aspect;\n return res;\n }\n \n void main() {\n float aspect = resolution.x / resolution.y;\n vColor = vec4(color, opacity);\n vUV = uv;\n vCounters = counters;\n \n mat4 m = projectionMatrix * modelViewMatrix;\n vec4 finalPosition = m * vec4(position, 1.0) * aspect;\n vec4 prevPos = m * vec4(previous, 1.0);\n vec4 nextPos = m * vec4(next, 1.0);\n \n vec2 currentP = fix(finalPosition, aspect);\n vec2 prevP = fix(prevPos, aspect);\n vec2 nextP = fix(nextPos, aspect);\n \n float w = lineWidth * width;\n \n vec2 dir;\n if (nextP == currentP) dir = normalize(currentP - prevP);\n else if (prevP == currentP) dir = normalize(nextP - currentP);\n else {\n vec2 dir1 = normalize(currentP - prevP);\n vec2 dir2 = normalize(nextP - currentP);\n dir = normalize(dir1 + dir2);\n \n vec2 perp = vec2(-dir1.y, dir1.x);\n vec2 miter = vec2(-dir.y, dir.x);\n //w = clamp(w / dot(miter, perp), 0., 4. * lineWidth * width);\n }\n \n //vec2 normal = (cross(vec3(dir, 0.), vec3(0., 0., 1.))).xy;\n vec4 normal = vec4(-dir.y, dir.x, 0., 1.);\n normal.xy *= .5 * w;\n //normal *= projectionMatrix;\n if (sizeAttenuation == 0.) {\n normal.xy *= finalPosition.w;\n normal.xy /= (vec4(resolution, 0., 1.) * projectionMatrix).xy * aspect;\n }\n \n finalPosition.xy += normal.xy * side;\n gl_Position = finalPosition;\n #include \n #include \n vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);\n #include \n #include \n }\n`;\nconst version = /* @__PURE__ */ (() => parseInt(THREE.REVISION.replace(/\\D+/g, \"\")))();\nconst colorspace_fragment = version >= 154 ? \"colorspace_fragment\" : \"encodings_fragment\";\nconst fragmentShader = `\n #include \n #include \n #include \n \n uniform sampler2D map;\n uniform sampler2D alphaMap;\n uniform float useGradient;\n uniform float useMap;\n uniform float useAlphaMap;\n uniform float useDash;\n uniform float dashArray;\n uniform float dashOffset;\n uniform float dashRatio;\n uniform float visibility;\n uniform float alphaTest;\n uniform vec2 repeat;\n uniform vec3 gradient[2];\n \n varying vec2 vUV;\n varying vec4 vColor;\n varying float vCounters;\n \n void main() {\n #include \n vec4 diffuseColor = vColor;\n if (useGradient == 1.) diffuseColor = vec4(mix(gradient[0], gradient[1], vCounters), 1.0);\n if (useMap == 1.) diffuseColor *= texture2D(map, vUV * repeat);\n if (useAlphaMap == 1.) diffuseColor.a *= texture2D(alphaMap, vUV * repeat).a;\n if (diffuseColor.a < alphaTest) discard;\n if (useDash == 1.) diffuseColor.a *= ceil(mod(vCounters + dashOffset, dashArray) - (dashArray * dashRatio));\n diffuseColor.a *= step(vCounters, visibility);\n #include \n gl_FragColor = diffuseColor; \n #include \n #include \n #include <${colorspace_fragment}>\n }\n`;\nclass MeshLineMaterial extends THREE.ShaderMaterial {\n constructor(parameters) {\n super({\n uniforms: {\n ...THREE.UniformsLib.fog,\n lineWidth: { value: 1 },\n map: { value: null },\n useMap: { value: 0 },\n alphaMap: { value: null },\n useAlphaMap: { value: 0 },\n color: { value: new THREE.Color(16777215) },\n gradient: { value: [new THREE.Color(16711680), new THREE.Color(65280)] },\n opacity: { value: 1 },\n resolution: { value: new THREE.Vector2(1, 1) },\n sizeAttenuation: { value: 1 },\n dashArray: { value: 0 },\n dashOffset: { value: 0 },\n dashRatio: { value: 0.5 },\n useDash: { value: 0 },\n useGradient: { value: 0 },\n visibility: { value: 1 },\n alphaTest: { value: 0 },\n repeat: { value: new THREE.Vector2(1, 1) }\n },\n vertexShader,\n fragmentShader\n });\n __publicField(this, \"lineWidth\");\n __publicField(this, \"map\");\n __publicField(this, \"useMap\");\n __publicField(this, \"alphaMap\");\n __publicField(this, \"useAlphaMap\");\n __publicField(this, \"color\");\n __publicField(this, \"gradient\");\n __publicField(this, \"resolution\");\n __publicField(this, \"sizeAttenuation\");\n __publicField(this, \"dashArray\");\n __publicField(this, \"dashOffset\");\n __publicField(this, \"dashRatio\");\n __publicField(this, \"useDash\");\n __publicField(this, \"useGradient\");\n __publicField(this, \"visibility\");\n __publicField(this, \"repeat\");\n this.type = \"MeshLineMaterial\";\n Object.defineProperties(this, {\n lineWidth: {\n enumerable: true,\n get() {\n return this.uniforms.lineWidth.value;\n },\n set(value) {\n this.uniforms.lineWidth.value = value;\n }\n },\n map: {\n enumerable: true,\n get() {\n return this.uniforms.map.value;\n },\n set(value) {\n this.uniforms.map.value = value;\n }\n },\n useMap: {\n enumerable: true,\n get() {\n return this.uniforms.useMap.value;\n },\n set(value) {\n this.uniforms.useMap.value = value;\n }\n },\n alphaMap: {\n enumerable: true,\n get() {\n return this.uniforms.alphaMap.value;\n },\n set(value) {\n this.uniforms.alphaMap.value = value;\n }\n },\n useAlphaMap: {\n enumerable: true,\n get() {\n return this.uniforms.useAlphaMap.value;\n },\n set(value) {\n this.uniforms.useAlphaMap.value = value;\n }\n },\n color: {\n enumerable: true,\n get() {\n return this.uniforms.color.value;\n },\n set(value) {\n this.uniforms.color.value = value;\n }\n },\n gradient: {\n enumerable: true,\n get() {\n return this.uniforms.gradient.value;\n },\n set(value) {\n this.uniforms.gradient.value = value;\n }\n },\n opacity: {\n enumerable: true,\n get() {\n return this.uniforms.opacity.value;\n },\n set(value) {\n this.uniforms.opacity.value = value;\n }\n },\n resolution: {\n enumerable: true,\n get() {\n return this.uniforms.resolution.value;\n },\n set(value) {\n this.uniforms.resolution.value.copy(value);\n }\n },\n sizeAttenuation: {\n enumerable: true,\n get() {\n return this.uniforms.sizeAttenuation.value;\n },\n set(value) {\n this.uniforms.sizeAttenuation.value = value;\n }\n },\n dashArray: {\n enumerable: true,\n get() {\n return this.uniforms.dashArray.value;\n },\n set(value) {\n this.uniforms.dashArray.value = value;\n this.useDash = value !== 0 ? 1 : 0;\n }\n },\n dashOffset: {\n enumerable: true,\n get() {\n return this.uniforms.dashOffset.value;\n },\n set(value) {\n this.uniforms.dashOffset.value = value;\n }\n },\n dashRatio: {\n enumerable: true,\n get() {\n return this.uniforms.dashRatio.value;\n },\n set(value) {\n this.uniforms.dashRatio.value = value;\n }\n },\n useDash: {\n enumerable: true,\n get() {\n return this.uniforms.useDash.value;\n },\n set(value) {\n this.uniforms.useDash.value = value;\n }\n },\n useGradient: {\n enumerable: true,\n get() {\n return this.uniforms.useGradient.value;\n },\n set(value) {\n this.uniforms.useGradient.value = value;\n }\n },\n visibility: {\n enumerable: true,\n get() {\n return this.uniforms.visibility.value;\n },\n set(value) {\n this.uniforms.visibility.value = value;\n }\n },\n alphaTest: {\n enumerable: true,\n get() {\n return this.uniforms.alphaTest.value;\n },\n set(value) {\n this.uniforms.alphaTest.value = value;\n }\n },\n repeat: {\n enumerable: true,\n get() {\n return this.uniforms.repeat.value;\n },\n set(value) {\n this.uniforms.repeat.value.copy(value);\n }\n }\n });\n this.setValues(parameters);\n }\n copy(source) {\n super.copy(source);\n this.lineWidth = source.lineWidth;\n this.map = source.map;\n this.useMap = source.useMap;\n this.alphaMap = source.alphaMap;\n this.useAlphaMap = source.useAlphaMap;\n this.color.copy(source.color);\n this.gradient = source.gradient;\n this.opacity = source.opacity;\n this.resolution.copy(source.resolution);\n this.sizeAttenuation = source.sizeAttenuation;\n this.dashArray = source.dashArray;\n this.dashOffset = source.dashOffset;\n this.dashRatio = source.dashRatio;\n this.useDash = source.useDash;\n this.useGradient = source.useGradient;\n this.visibility = source.visibility;\n this.alphaTest = source.alphaTest;\n this.repeat.copy(source.repeat);\n return this;\n }\n}\nfunction raycast(raycaster, intersects) {\n const inverseMatrix = new THREE.Matrix4();\n const ray = new THREE.Ray();\n const sphere = new THREE.Sphere();\n const interRay = new THREE.Vector3();\n const geometry = this.geometry;\n sphere.copy(geometry.boundingSphere);\n sphere.applyMatrix4(this.matrixWorld);\n if (!raycaster.ray.intersectSphere(sphere, interRay))\n return;\n inverseMatrix.copy(this.matrixWorld).invert();\n ray.copy(raycaster.ray).applyMatrix4(inverseMatrix);\n const vStart = new THREE.Vector3();\n const vEnd = new THREE.Vector3();\n const interSegment = new THREE.Vector3();\n const step = this instanceof THREE.LineSegments ? 2 : 1;\n const index = geometry.index;\n const attributes = geometry.attributes;\n if (index !== null) {\n const indices = index.array;\n const positions = attributes.position.array;\n const widths = attributes.width.array;\n for (let i = 0, l = indices.length - 1; i < l; i += step) {\n const a = indices[i];\n const b = indices[i + 1];\n vStart.fromArray(positions, a * 3);\n vEnd.fromArray(positions, b * 3);\n const width = widths[Math.floor(i / 3)] != void 0 ? widths[Math.floor(i / 3)] : 1;\n const precision = raycaster.params.Line.threshold + this.material.lineWidth * width / 2;\n const precisionSq = precision * precision;\n const distSq = ray.distanceSqToSegment(vStart, vEnd, interRay, interSegment);\n if (distSq > precisionSq)\n continue;\n interRay.applyMatrix4(this.matrixWorld);\n const distance = raycaster.ray.origin.distanceTo(interRay);\n if (distance < raycaster.near || distance > raycaster.far)\n continue;\n intersects.push({\n distance,\n point: interSegment.clone().applyMatrix4(this.matrixWorld),\n index: i,\n face: null,\n faceIndex: void 0,\n object: this\n });\n i = l;\n }\n }\n}\nexport {\n MeshLineGeometry,\n MeshLineMaterial,\n raycast\n};\n","import { useFrame, useThree, createPortal } from '@react-three/fiber';\nimport * as React from 'react';\nimport { Vector3, Object3D, Vector2 } from 'three';\nimport { MeshLineGeometry, MeshLineMaterial } from 'meshline';\n\nconst defaults = {\n width: 0.2,\n length: 1,\n decay: 1,\n local: false,\n stride: 0,\n interval: 1\n};\nconst shiftLeft = (collection, steps = 1) => {\n collection.set(collection.subarray(steps));\n collection.fill(-Infinity, -steps);\n return collection;\n};\nfunction useTrail(target, settings) {\n const {\n length,\n local,\n decay,\n interval,\n stride\n } = {\n ...defaults,\n ...settings\n };\n const points = React.useRef(null);\n const [worldPosition] = React.useState(() => new Vector3());\n React.useLayoutEffect(() => {\n if (target) {\n points.current = Float32Array.from({\n length: length * 10 * 3\n }, (_, i) => target.position.getComponent(i % 3));\n }\n }, [length, target]);\n const prevPosition = React.useRef(new Vector3());\n const frameCount = React.useRef(0);\n useFrame(() => {\n if (!target) return;\n if (!points.current) return;\n if (frameCount.current === 0) {\n let newPosition;\n if (local) {\n newPosition = target.position;\n } else {\n target.getWorldPosition(worldPosition);\n newPosition = worldPosition;\n }\n const steps = 1 * decay;\n for (let i = 0; i < steps; i++) {\n if (newPosition.distanceTo(prevPosition.current) < stride) continue;\n shiftLeft(points.current, 3);\n points.current.set(newPosition.toArray(), points.current.length - 3);\n }\n prevPosition.current.copy(newPosition);\n }\n frameCount.current++;\n frameCount.current = frameCount.current % interval;\n });\n return points;\n}\nconst Trail = /* @__PURE__ */React.forwardRef((props, forwardRef) => {\n const {\n children\n } = props;\n const {\n width,\n length,\n decay,\n local,\n stride,\n interval\n } = {\n ...defaults,\n ...props\n };\n const {\n color = 'hotpink',\n attenuation,\n target\n } = props;\n const size = useThree(s => s.size);\n const scene = useThree(s => s.scene);\n const ref = React.useRef(null);\n const [anchor, setAnchor] = React.useState(null);\n const points = useTrail(anchor, {\n length,\n decay,\n local,\n stride,\n interval\n });\n React.useEffect(() => {\n const t = (target == null ? void 0 : target.current) || ref.current.children.find(o => {\n return o instanceof Object3D;\n });\n if (t) {\n setAnchor(t);\n }\n }, [points, target]);\n const geo = React.useMemo(() => new MeshLineGeometry(), []);\n const mat = React.useMemo(() => {\n var _matOverride, _matOverride2;\n const m = new MeshLineMaterial({\n lineWidth: 0.1 * width,\n color: color,\n sizeAttenuation: 1,\n resolution: new Vector2(size.width, size.height)\n });\n\n // Get and apply first from children\n let matOverride;\n if (children) {\n if (Array.isArray(children)) {\n matOverride = children.find(child => {\n const c = child;\n return typeof c.type === 'string' && c.type === 'meshLineMaterial';\n });\n } else {\n const c = children;\n if (typeof c.type === 'string' && c.type === 'meshLineMaterial') {\n matOverride = c;\n }\n }\n }\n if (typeof ((_matOverride = matOverride) == null ? void 0 : _matOverride.props) === 'object' && ((_matOverride2 = matOverride) == null ? void 0 : _matOverride2.props) !== null) {\n m.setValues(matOverride.props);\n }\n return m;\n }, [width, color, size, children]);\n React.useEffect(() => {\n mat.uniforms.resolution.value.set(size.width, size.height);\n }, [size]);\n useFrame(() => {\n if (!points.current) return;\n geo.setPoints(points.current, attenuation);\n });\n return /*#__PURE__*/React.createElement(\"group\", null, createPortal(/*#__PURE__*/React.createElement(\"mesh\", {\n ref: forwardRef,\n geometry: geo,\n material: mat\n }), scene), /*#__PURE__*/React.createElement(\"group\", {\n ref: ref\n }, children));\n});\n\nexport { Trail, useTrail };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { MeshSurfaceSampler } from 'three-stdlib';\nimport { InstancedBufferAttribute, Vector3, Color, Object3D } from 'three';\n\nfunction useSurfaceSampler(mesh, count = 16, transform, weight, instanceMesh) {\n const [buffer, setBuffer] = React.useState(() => {\n const arr = Array.from({\n length: count\n }, () => [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]).flat();\n return new InstancedBufferAttribute(Float32Array.from(arr), 16);\n });\n React.useLayoutEffect(() => {\n if (typeof mesh.current === 'undefined') return;\n const sampler = new MeshSurfaceSampler(mesh.current);\n if (weight) {\n sampler.setWeightAttribute(weight);\n }\n sampler.build();\n const position = new Vector3();\n const normal = new Vector3();\n const color = new Color();\n const dummy = new Object3D();\n mesh.current.updateMatrixWorld(true);\n for (let i = 0; i < count; i++) {\n sampler.sample(position, normal, color);\n if (typeof transform === 'function') {\n transform({\n dummy,\n sampledMesh: mesh.current,\n position,\n normal,\n color\n }, i);\n } else {\n dummy.position.copy(position);\n }\n dummy.updateMatrix();\n if (instanceMesh != null && instanceMesh.current) {\n instanceMesh.current.setMatrixAt(i, dummy.matrix);\n }\n dummy.matrix.toArray(buffer.array, i * 16);\n }\n if (instanceMesh != null && instanceMesh.current) {\n instanceMesh.current.instanceMatrix.needsUpdate = true;\n }\n buffer.needsUpdate = true;\n setBuffer(new InstancedBufferAttribute(buffer.array, buffer.itemSize).copy(buffer));\n }, [mesh, instanceMesh, weight, count, transform]);\n return buffer;\n}\nfunction Sampler({\n children,\n weight,\n transform,\n instances,\n mesh,\n count = 16,\n ...props\n}) {\n const group = React.useRef(null);\n const instancedRef = React.useRef(null);\n const meshToSampleRef = React.useRef(null);\n React.useLayoutEffect(() => {\n var _instances$current, _mesh$current;\n instancedRef.current = (_instances$current = instances == null ? void 0 : instances.current) !== null && _instances$current !== void 0 ? _instances$current : group.current.children.find(c => c.hasOwnProperty('instanceMatrix'));\n meshToSampleRef.current = (_mesh$current = mesh == null ? void 0 : mesh.current) !== null && _mesh$current !== void 0 ? _mesh$current : group.current.children.find(c => c.type === 'Mesh');\n }, [children, mesh == null ? void 0 : mesh.current, instances == null ? void 0 : instances.current]);\n useSurfaceSampler(meshToSampleRef, count, transform, weight, instancedRef);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: group\n }, props), children);\n}\n\nexport { Sampler, useSurfaceSampler };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { BufferAttribute } from 'three';\n\n/**\n * Used exclusively as a child of a BufferGeometry.\n * Computes the BufferAttribute by calling the `compute` function\n * and attaches the attribute to the geometry.\n */\nconst ComputedAttribute = ({\n compute,\n name,\n ...props\n}) => {\n const [bufferAttribute] = React.useState(() => new BufferAttribute(new Float32Array(0), 1));\n const primitive = React.useRef(null);\n React.useLayoutEffect(() => {\n if (primitive.current) {\n var _ref;\n // @ts-expect-error brittle\n const parent = (_ref = primitive.current.parent) !== null && _ref !== void 0 ? _ref : primitive.current.__r3f.parent.object;\n const attr = compute(parent);\n primitive.current.copy(attr);\n }\n }, [compute]);\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n ref: primitive,\n object: bufferAttribute,\n attach: `attributes-${name}`\n }, props));\n};\n\nexport { ComputedAttribute };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { SkeletonUtils } from 'three-stdlib';\n\nfunction createSpread(child, {\n keys = ['near', 'far', 'color', 'distance', 'decay', 'penumbra', 'angle', 'intensity', 'skeleton', 'visible', 'castShadow', 'receiveShadow', 'morphTargetDictionary', 'morphTargetInfluences', 'name', 'geometry', 'material', 'position', 'rotation', 'scale', 'up', 'userData', 'bindMode', 'bindMatrix', 'bindMatrixInverse', 'skeleton'],\n deep,\n inject,\n castShadow,\n receiveShadow\n}) {\n let spread = {};\n for (const key of keys) {\n spread[key] = child[key];\n }\n if (deep) {\n if (spread.geometry && deep !== 'materialsOnly') spread.geometry = spread.geometry.clone();\n if (spread.material && deep !== 'geometriesOnly') spread.material = spread.material.clone();\n }\n if (inject) {\n if (typeof inject === 'function') spread = {\n ...spread,\n children: inject(child)\n };else if (/*#__PURE__*/React.isValidElement(inject)) spread = {\n ...spread,\n children: inject\n };else spread = {\n ...spread,\n ...inject\n };\n }\n if (child instanceof THREE.Mesh) {\n if (castShadow) spread.castShadow = true;\n if (receiveShadow) spread.receiveShadow = true;\n }\n return spread;\n}\nconst Clone = /* @__PURE__ */React.forwardRef(({\n isChild = false,\n object,\n children,\n deep,\n castShadow,\n receiveShadow,\n inject,\n keys,\n ...props\n}, forwardRef) => {\n const config = {\n keys,\n deep,\n inject,\n castShadow,\n receiveShadow\n };\n object = React.useMemo(() => {\n if (isChild === false && !Array.isArray(object)) {\n let isSkinned = false;\n object.traverse(object => {\n if (object.isSkinnedMesh) isSkinned = true;\n });\n if (isSkinned) return SkeletonUtils.clone(object);\n }\n return object;\n }, [object, isChild]);\n\n // Deal with arrayed clones\n if (Array.isArray(object)) {\n return /*#__PURE__*/React.createElement(\"group\", _extends({}, props, {\n ref: forwardRef\n }), object.map(o => /*#__PURE__*/React.createElement(Clone, _extends({\n key: o.uuid,\n object: o\n }, config))), children);\n }\n\n // Singleton clones\n const {\n children: injectChildren,\n ...spread\n } = createSpread(object, config);\n const Element = object.type[0].toLowerCase() + object.type.slice(1);\n return /*#__PURE__*/React.createElement(Element, _extends({}, spread, props, {\n ref: forwardRef\n }), object.children.map(child => {\n if (child.type === 'Bone') return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n key: child.uuid,\n object: child\n }, config));\n return /*#__PURE__*/React.createElement(Clone, _extends({\n key: child.uuid,\n object: child\n }, config, {\n isChild: true\n }));\n }), children, injectChildren);\n});\n\nexport { Clone };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { MarchingCubes as MarchingCubes$1 } from 'three-stdlib';\nimport { useFrame } from '@react-three/fiber';\n\nconst globalContext = /* @__PURE__ */React.createContext(null);\nconst MarchingCubes = /* @__PURE__ */React.forwardRef(({\n resolution = 28,\n maxPolyCount = 10000,\n enableUvs = false,\n enableColors = false,\n children,\n ...props\n}, ref) => {\n const marchingCubesRef = React.useRef(null);\n React.useImperativeHandle(ref, () => marchingCubesRef.current, []);\n const marchingCubes = React.useMemo(() => new MarchingCubes$1(resolution, null, enableUvs, enableColors, maxPolyCount), [resolution, maxPolyCount, enableUvs, enableColors]);\n const api = React.useMemo(() => ({\n getParent: () => marchingCubesRef\n }), []);\n useFrame(() => {\n marchingCubes.update();\n marchingCubes.reset();\n }, -1); // To make sure the reset runs before the balls or planes are added\n\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"primitive\", _extends({\n object: marchingCubes,\n ref: marchingCubesRef\n }, props), /*#__PURE__*/React.createElement(globalContext.Provider, {\n value: api\n }, children)));\n});\nconst MarchingCube = /* @__PURE__ */React.forwardRef(({\n strength = 0.5,\n subtract = 12,\n color,\n ...props\n}, ref) => {\n const {\n getParent\n } = React.useContext(globalContext);\n const parentRef = React.useMemo(() => getParent(), [getParent]);\n const cubeRef = React.useRef(null);\n React.useImperativeHandle(ref, () => cubeRef.current, []);\n const vec = new THREE.Vector3();\n useFrame(state => {\n if (!parentRef.current || !cubeRef.current) return;\n cubeRef.current.getWorldPosition(vec);\n parentRef.current.addBall(0.5 + vec.x * 0.5, 0.5 + vec.y * 0.5, 0.5 + vec.z * 0.5, strength, subtract, color);\n });\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: cubeRef\n }, props));\n});\nconst MarchingPlane = /* @__PURE__ */React.forwardRef(({\n planeType: _planeType = 'x',\n strength = 0.5,\n subtract = 12,\n ...props\n}, ref) => {\n const {\n getParent\n } = React.useContext(globalContext);\n const parentRef = React.useMemo(() => getParent(), [getParent]);\n const wallRef = React.useRef(null);\n React.useImperativeHandle(ref, () => wallRef.current, []);\n const planeType = React.useMemo(() => _planeType === 'x' ? 'addPlaneX' : _planeType === 'y' ? 'addPlaneY' : 'addPlaneZ', [_planeType]);\n useFrame(() => {\n if (!parentRef.current || !wallRef.current) return;\n parentRef.current[planeType](strength, subtract);\n });\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: wallRef\n }, props));\n});\n\nexport { MarchingCube, MarchingCubes, MarchingPlane };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { applyProps } from '@react-three/fiber';\nimport { DecalGeometry } from 'three-stdlib';\n\nfunction isArray(vec) {\n return Array.isArray(vec);\n}\nfunction vecToArray(vec = [0, 0, 0]) {\n if (isArray(vec)) {\n return vec;\n } else if (vec instanceof THREE.Vector3 || vec instanceof THREE.Euler) {\n return [vec.x, vec.y, vec.z];\n } else {\n return [vec, vec, vec];\n }\n}\nconst Decal = /* @__PURE__ */React.forwardRef(function Decal({\n debug,\n depthTest = false,\n polygonOffsetFactor = -10,\n map,\n mesh,\n children,\n position,\n rotation,\n scale,\n ...props\n}, forwardRef) {\n const ref = React.useRef(null);\n React.useImperativeHandle(forwardRef, () => ref.current);\n const helper = React.useRef(null);\n const state = React.useRef({\n position: new THREE.Vector3(),\n rotation: new THREE.Euler(),\n scale: new THREE.Vector3(1, 1, 1)\n });\n React.useLayoutEffect(() => {\n const parent = (mesh == null ? void 0 : mesh.current) || ref.current.parent;\n const target = ref.current;\n if (!(parent instanceof THREE.Mesh)) {\n throw new Error('Decal must have a Mesh as parent or specify its \"mesh\" prop');\n }\n if (parent) {\n applyProps(state.current, {\n position,\n scale\n });\n\n // Zero out the parents matrix world for this operation\n const matrixWorld = parent.matrixWorld.clone();\n parent.matrixWorld.identity();\n if (!rotation || typeof rotation === 'number') {\n const o = new THREE.Object3D();\n o.position.copy(state.current.position);\n\n // Thanks https://x.com/N8Programs !\n const vertices = parent.geometry.attributes.position.array;\n if (parent.geometry.attributes.normal === undefined) parent.geometry.computeVertexNormals();\n const normal = parent.geometry.attributes.normal.array;\n let distance = Infinity;\n let closestNormal = new THREE.Vector3();\n const ox = o.position.x;\n const oy = o.position.y;\n const oz = o.position.z;\n const vLength = vertices.length;\n let chosenIdx = -1;\n for (let i = 0; i < vLength; i += 3) {\n const x = vertices[i];\n const y = vertices[i + 1];\n const z = vertices[i + 2];\n const xDiff = x - ox;\n const yDiff = y - oy;\n const zDiff = z - oz;\n const distSquared = xDiff * xDiff + yDiff * yDiff + zDiff * zDiff;\n if (distSquared < distance) {\n distance = distSquared;\n chosenIdx = i;\n }\n }\n closestNormal.fromArray(normal, chosenIdx);\n\n // Get vector tangent to normal\n o.lookAt(o.position.clone().add(closestNormal));\n o.rotateZ(Math.PI);\n o.rotateY(Math.PI);\n if (typeof rotation === 'number') o.rotateZ(rotation);\n applyProps(state.current, {\n rotation: o.rotation\n });\n } else {\n applyProps(state.current, {\n rotation\n });\n }\n if (helper.current) {\n applyProps(helper.current, state.current);\n }\n target.geometry = new DecalGeometry(parent, state.current.position, state.current.rotation, state.current.scale);\n // Reset parents matix-world\n parent.matrixWorld = matrixWorld;\n return () => {\n target.geometry.dispose();\n };\n }\n }, [mesh, ...vecToArray(position), ...vecToArray(scale), ...vecToArray(rotation)]);\n React.useLayoutEffect(() => {\n if (helper.current) {\n // Prevent the helpers from blocking rays\n helper.current.traverse(child => child.raycast = () => null);\n }\n }, [debug]);\n return /*#__PURE__*/React.createElement(\"mesh\", _extends({\n ref: ref,\n \"material-transparent\": true,\n \"material-polygonOffset\": true,\n \"material-polygonOffsetFactor\": polygonOffsetFactor,\n \"material-depthTest\": depthTest,\n \"material-map\": map\n }, props), children, debug && /*#__PURE__*/React.createElement(\"mesh\", {\n ref: helper\n }, /*#__PURE__*/React.createElement(\"boxGeometry\", null), /*#__PURE__*/React.createElement(\"meshNormalMaterial\", {\n wireframe: true\n }), /*#__PURE__*/React.createElement(\"axesHelper\", null)));\n});\n\nexport { Decal };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useLoader } from '@react-three/fiber';\nimport * as React from 'react';\nimport { forwardRef, useMemo, useEffect, Fragment } from 'react';\nimport { DoubleSide } from 'three';\nimport { SVGLoader } from 'three-stdlib';\n\nconst Svg = /* @__PURE__ */forwardRef(function R3FSvg({\n src,\n skipFill,\n skipStrokes,\n fillMaterial,\n strokeMaterial,\n fillMeshProps,\n strokeMeshProps,\n ...props\n}, ref) {\n const svg = useLoader(SVGLoader, !src.startsWith(' skipStrokes ? [] : svg.paths.map(path => {\n var _path$userData;\n return ((_path$userData = path.userData) == null ? void 0 : _path$userData.style.stroke) === undefined || path.userData.style.stroke === 'none' ? null : path.subPaths.map(subPath => SVGLoader.pointsToStroke(subPath.getPoints(), path.userData.style));\n }), [svg, skipStrokes]);\n useEffect(() => {\n return () => strokeGeometries.forEach(group => group && group.map(g => g.dispose()));\n }, [strokeGeometries]);\n let renderOrder = 0;\n return /*#__PURE__*/React.createElement(\"object3D\", _extends({\n ref: ref\n }, props), /*#__PURE__*/React.createElement(\"object3D\", {\n scale: [1, -1, 1]\n }, svg.paths.map((path, p) => {\n var _path$userData2, _path$userData3;\n return /*#__PURE__*/React.createElement(Fragment, {\n key: p\n }, !skipFill && ((_path$userData2 = path.userData) == null ? void 0 : _path$userData2.style.fill) !== undefined && path.userData.style.fill !== 'none' && SVGLoader.createShapes(path).map((shape, s) => /*#__PURE__*/React.createElement(\"mesh\", _extends({\n key: s\n }, fillMeshProps, {\n renderOrder: renderOrder++\n }), /*#__PURE__*/React.createElement(\"shapeGeometry\", {\n args: [shape]\n }), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", _extends({\n color: path.userData.style.fill,\n opacity: path.userData.style.fillOpacity,\n transparent: true,\n side: DoubleSide,\n depthWrite: false\n }, fillMaterial)))), !skipStrokes && ((_path$userData3 = path.userData) == null ? void 0 : _path$userData3.style.stroke) !== undefined && path.userData.style.stroke !== 'none' && path.subPaths.map((_subPath, s) => /*#__PURE__*/React.createElement(\"mesh\", _extends({\n key: s,\n geometry: strokeGeometries[p][s]\n }, strokeMeshProps, {\n renderOrder: renderOrder++\n }), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", _extends({\n color: path.userData.style.stroke,\n opacity: path.userData.style.strokeOpacity,\n transparent: true,\n side: DoubleSide,\n depthWrite: false\n }, strokeMaterial)))));\n })));\n});\n\nexport { Svg };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { GLTFLoader, DRACOLoader, MeshoptDecoder } from 'three-stdlib';\nimport { useLoader } from '@react-three/fiber';\nimport { Clone } from './Clone.js';\n\nlet dracoLoader = null;\nlet decoderPath = 'https://www.gstatic.com/draco/versioned/decoders/1.5.5/';\nfunction extensions(useDraco = true, useMeshopt = true, extendLoader) {\n return loader => {\n if (extendLoader) {\n extendLoader(loader);\n }\n if (useDraco) {\n if (!dracoLoader) {\n dracoLoader = new DRACOLoader();\n }\n dracoLoader.setDecoderPath(typeof useDraco === 'string' ? useDraco : decoderPath);\n loader.setDRACOLoader(dracoLoader);\n }\n if (useMeshopt) {\n loader.setMeshoptDecoder(typeof MeshoptDecoder === 'function' ? MeshoptDecoder() : MeshoptDecoder);\n }\n };\n}\nconst useGLTF = (path, useDraco, useMeshopt, extendLoader) => useLoader(GLTFLoader, path, extensions(useDraco, useMeshopt, extendLoader));\nuseGLTF.preload = (path, useDraco, useMeshopt, extendLoader) => useLoader.preload(GLTFLoader, path, extensions(useDraco, useMeshopt, extendLoader));\nuseGLTF.clear = path => useLoader.clear(GLTFLoader, path);\nuseGLTF.setDecoderPath = path => {\n decoderPath = path;\n};\n\n//\n\nconst Gltf = /* @__PURE__ */React.forwardRef(({\n src,\n useDraco,\n useMeshOpt,\n extendLoader,\n ...props\n}, ref) => {\n const {\n scene\n } = useGLTF(src, useDraco, useMeshOpt, extendLoader);\n return /*#__PURE__*/React.createElement(Clone, _extends({\n ref: ref\n }, props, {\n object: scene\n }));\n});\n\nexport { Gltf, useGLTF };\n","import * as React from 'react';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { AsciiEffect } from 'three-stdlib';\n\nfunction AsciiRenderer({\n renderIndex = 1,\n bgColor = 'black',\n fgColor = 'white',\n characters = ' .:-+*=%@#',\n invert = true,\n color = false,\n resolution = 0.15\n}) {\n // Reactive state\n const {\n size,\n gl,\n scene,\n camera\n } = useThree();\n\n // Create effect\n const effect = React.useMemo(() => {\n const effect = new AsciiEffect(gl, characters, {\n invert,\n color,\n resolution\n });\n effect.domElement.style.position = 'absolute';\n effect.domElement.style.top = '0px';\n effect.domElement.style.left = '0px';\n effect.domElement.style.pointerEvents = 'none';\n return effect;\n }, [characters, invert, color, resolution]);\n\n // Styling\n React.useLayoutEffect(() => {\n effect.domElement.style.color = fgColor;\n effect.domElement.style.backgroundColor = bgColor;\n }, [fgColor, bgColor]);\n\n // Append on mount, remove on unmount\n React.useEffect(() => {\n gl.domElement.style.opacity = '0';\n gl.domElement.parentNode.appendChild(effect.domElement);\n return () => {\n gl.domElement.style.opacity = '1';\n gl.domElement.parentNode.removeChild(effect.domElement);\n };\n }, [effect]);\n\n // Set size\n React.useEffect(() => {\n effect.setSize(size.width, size.height);\n }, [effect, size]);\n\n // Take over render-loop (that is what the index is for)\n useFrame(state => {\n effect.render(scene, camera);\n }, renderIndex);\n\n // return something to not break type signatures\n return /*#__PURE__*/React.createElement(React.Fragment, null);\n}\n\nexport { AsciiRenderer };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { extend, useThree, useLoader, useFrame } from '@react-three/fiber';\nimport { shaderMaterial } from './shaderMaterial.js';\nimport { version } from '../helpers/constants.js';\n\nconst SplatMaterial = /* @__PURE__ */shaderMaterial({\n alphaTest: 0,\n viewport: /* @__PURE__ */new THREE.Vector2(1980, 1080),\n focal: 1000.0,\n centerAndScaleTexture: null,\n covAndColorTexture: null\n}, /*glsl*/`\n precision highp sampler2D;\n precision highp usampler2D;\n out vec4 vColor;\n out vec3 vPosition;\n uniform vec2 resolution;\n uniform vec2 viewport;\n uniform float focal;\n attribute uint splatIndex;\n uniform sampler2D centerAndScaleTexture;\n uniform usampler2D covAndColorTexture; \n\n vec2 unpackInt16(in uint value) {\n int v = int(value);\n int v0 = v >> 16;\n int v1 = (v & 0xFFFF);\n if((v & 0x8000) != 0)\n v1 |= 0xFFFF0000;\n return vec2(float(v1), float(v0));\n }\n\n void main () {\n ivec2 texSize = textureSize(centerAndScaleTexture, 0);\n ivec2 texPos = ivec2(splatIndex%uint(texSize.x), splatIndex/uint(texSize.x));\n vec4 centerAndScaleData = texelFetch(centerAndScaleTexture, texPos, 0);\n vec4 center = vec4(centerAndScaleData.xyz, 1);\n vec4 camspace = modelViewMatrix * center;\n vec4 pos2d = projectionMatrix * camspace;\n\n float bounds = 1.2 * pos2d.w;\n if (pos2d.z < -pos2d.w || pos2d.x < -bounds || pos2d.x > bounds\n || pos2d.y < -bounds || pos2d.y > bounds) {\n gl_Position = vec4(0.0, 0.0, 2.0, 1.0);\n return;\n }\n\n uvec4 covAndColorData = texelFetch(covAndColorTexture, texPos, 0);\n vec2 cov3D_M11_M12 = unpackInt16(covAndColorData.x) * centerAndScaleData.w;\n vec2 cov3D_M13_M22 = unpackInt16(covAndColorData.y) * centerAndScaleData.w;\n vec2 cov3D_M23_M33 = unpackInt16(covAndColorData.z) * centerAndScaleData.w;\n mat3 Vrk = mat3(\n cov3D_M11_M12.x, cov3D_M11_M12.y, cov3D_M13_M22.x,\n cov3D_M11_M12.y, cov3D_M13_M22.y, cov3D_M23_M33.x,\n cov3D_M13_M22.x, cov3D_M23_M33.x, cov3D_M23_M33.y\n );\n\n mat3 J = mat3(\n focal / camspace.z, 0., -(focal * camspace.x) / (camspace.z * camspace.z),\n 0., focal / camspace.z, -(focal * camspace.y) / (camspace.z * camspace.z),\n 0., 0., 0.\n );\n\n mat3 W = transpose(mat3(modelViewMatrix));\n mat3 T = W * J;\n mat3 cov = transpose(T) * Vrk * T;\n vec2 vCenter = vec2(pos2d) / pos2d.w;\n float diagonal1 = cov[0][0] + 0.3;\n float offDiagonal = cov[0][1];\n float diagonal2 = cov[1][1] + 0.3;\n float mid = 0.5 * (diagonal1 + diagonal2);\n float radius = length(vec2((diagonal1 - diagonal2) / 2.0, offDiagonal));\n float lambda1 = mid + radius;\n float lambda2 = max(mid - radius, 0.1);\n vec2 diagonalVector = normalize(vec2(offDiagonal, lambda1 - diagonal1));\n vec2 v1 = min(sqrt(2.0 * lambda1), 1024.0) * diagonalVector;\n vec2 v2 = min(sqrt(2.0 * lambda2), 1024.0) * vec2(diagonalVector.y, -diagonalVector.x);\n uint colorUint = covAndColorData.w;\n vColor = vec4(\n float(colorUint & uint(0xFF)) / 255.0,\n float((colorUint >> uint(8)) & uint(0xFF)) / 255.0,\n float((colorUint >> uint(16)) & uint(0xFF)) / 255.0,\n float(colorUint >> uint(24)) / 255.0\n );\n vPosition = position;\n\n gl_Position = vec4(\n vCenter \n + position.x * v2 / viewport * 2.0 \n + position.y * v1 / viewport * 2.0, pos2d.z / pos2d.w, 1.0);\n }\n `, /*glsl*/`\n #include \n #include \n in vec4 vColor;\n in vec3 vPosition;\n void main () {\n float A = -dot(vPosition.xy, vPosition.xy);\n if (A < -4.0) discard;\n float B = exp(A) * vColor.a;\n vec4 diffuseColor = vec4(vColor.rgb, B);\n #include \n #include \n gl_FragColor = diffuseColor;\n #include \n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }\n `);\nfunction createWorker(self) {\n let matrices = null;\n let offset = 0;\n function sortSplats(view, hashed = false) {\n const vertexCount = matrices.length / 16;\n const threshold = -0.0001;\n let maxDepth = -Infinity;\n let minDepth = Infinity;\n const depthList = new Float32Array(vertexCount);\n const sizeList = new Int32Array(depthList.buffer);\n const validIndexList = new Int32Array(vertexCount);\n let validCount = 0;\n for (let i = 0; i < vertexCount; i++) {\n // Sign of depth is reversed\n const depth = view[0] * matrices[i * 16 + 12] + view[1] * matrices[i * 16 + 13] + view[2] * matrices[i * 16 + 14] + view[3];\n // Skip behind of camera and small, transparent splat\n if (hashed || depth < 0 && matrices[i * 16 + 15] > threshold * depth) {\n depthList[validCount] = depth;\n validIndexList[validCount] = i;\n validCount++;\n if (depth > maxDepth) maxDepth = depth;\n if (depth < minDepth) minDepth = depth;\n }\n }\n\n // This is a 16 bit single-pass counting sort\n const depthInv = (256 * 256 - 1) / (maxDepth - minDepth);\n const counts0 = new Uint32Array(256 * 256);\n for (let i = 0; i < validCount; i++) {\n sizeList[i] = (depthList[i] - minDepth) * depthInv | 0;\n counts0[sizeList[i]]++;\n }\n const starts0 = new Uint32Array(256 * 256);\n for (let i = 1; i < 256 * 256; i++) starts0[i] = starts0[i - 1] + counts0[i - 1];\n const depthIndex = new Uint32Array(validCount);\n for (let i = 0; i < validCount; i++) depthIndex[starts0[sizeList[i]]++] = validIndexList[i];\n return depthIndex;\n }\n self.onmessage = e => {\n if (e.data.method == 'push') {\n if (offset === 0) matrices = new Float32Array(e.data.length);\n const new_matrices = new Float32Array(e.data.matrices);\n matrices.set(new_matrices, offset);\n offset += new_matrices.length;\n } else if (e.data.method == 'sort') {\n if (matrices !== null) {\n const indices = sortSplats(new Float32Array(e.data.view), e.data.hashed);\n // @ts-ignore\n self.postMessage({\n indices,\n key: e.data.key\n }, [indices.buffer]);\n }\n }\n };\n}\nclass SplatLoader extends THREE.Loader {\n constructor(...args) {\n super(...args);\n // WebGLRenderer, needs to be filled out!\n this.gl = null;\n // Default chunk size for lazy loading\n this.chunkSize = 25000;\n }\n load(url, onLoad, onProgress, onError) {\n const shared = {\n gl: this.gl,\n url: this.manager.resolveURL(url),\n worker: new Worker(URL.createObjectURL(new Blob(['(', createWorker.toString(), ')(self)'], {\n type: 'application/javascript'\n }))),\n manager: this.manager,\n update: (target, camera, hashed) => update(camera, shared, target, hashed),\n connect: target => connect(shared, target),\n loading: false,\n loaded: false,\n loadedVertexCount: 0,\n chunkSize: this.chunkSize,\n totalDownloadBytes: 0,\n numVertices: 0,\n rowLength: 3 * 4 + 3 * 4 + 4 + 4,\n maxVertexes: 0,\n bufferTextureWidth: 0,\n bufferTextureHeight: 0,\n stream: null,\n centerAndScaleData: null,\n covAndColorData: null,\n covAndColorTexture: null,\n centerAndScaleTexture: null,\n onProgress\n };\n load(shared).then(onLoad).catch(e => {\n onError == null || onError(e);\n shared.manager.itemError(shared.url);\n });\n }\n}\nasync function load(shared) {\n shared.manager.itemStart(shared.url);\n const data = await fetch(shared.url);\n if (data.body === null) throw 'Failed to fetch file';\n let _totalDownloadBytes = data.headers.get('Content-Length');\n const totalDownloadBytes = _totalDownloadBytes ? parseInt(_totalDownloadBytes) : undefined;\n if (totalDownloadBytes == undefined) throw 'Failed to get content length';\n shared.stream = data.body.getReader();\n shared.totalDownloadBytes = totalDownloadBytes;\n shared.numVertices = Math.floor(shared.totalDownloadBytes / shared.rowLength);\n const context = shared.gl.getContext();\n let maxTextureSize = context.getParameter(context.MAX_TEXTURE_SIZE);\n shared.maxVertexes = maxTextureSize * maxTextureSize;\n if (shared.numVertices > shared.maxVertexes) shared.numVertices = shared.maxVertexes;\n shared.bufferTextureWidth = maxTextureSize;\n shared.bufferTextureHeight = Math.floor((shared.numVertices - 1) / maxTextureSize) + 1;\n shared.centerAndScaleData = new Float32Array(shared.bufferTextureWidth * shared.bufferTextureHeight * 4);\n shared.covAndColorData = new Uint32Array(shared.bufferTextureWidth * shared.bufferTextureHeight * 4);\n shared.centerAndScaleTexture = new THREE.DataTexture(shared.centerAndScaleData, shared.bufferTextureWidth, shared.bufferTextureHeight, THREE.RGBAFormat, THREE.FloatType);\n shared.centerAndScaleTexture.needsUpdate = true;\n shared.covAndColorTexture = new THREE.DataTexture(shared.covAndColorData, shared.bufferTextureWidth, shared.bufferTextureHeight, THREE.RGBAIntegerFormat, THREE.UnsignedIntType);\n shared.covAndColorTexture.internalFormat = 'RGBA32UI';\n shared.covAndColorTexture.needsUpdate = true;\n return shared;\n}\nasync function lazyLoad(shared) {\n shared.loading = true;\n let bytesDownloaded = 0;\n let bytesProcessed = 0;\n const chunks = [];\n let lastReportedProgress = 0;\n const lengthComputable = shared.totalDownloadBytes !== 0;\n while (true) {\n try {\n const {\n value,\n done\n } = await shared.stream.read();\n if (done) break;\n bytesDownloaded += value.length;\n if (shared.totalDownloadBytes != undefined) {\n const percent = bytesDownloaded / shared.totalDownloadBytes * 100;\n if (shared.onProgress && percent - lastReportedProgress > 1) {\n const event = new ProgressEvent('progress', {\n lengthComputable,\n loaded: bytesDownloaded,\n total: shared.totalDownloadBytes\n });\n shared.onProgress(event);\n lastReportedProgress = percent;\n }\n }\n chunks.push(value);\n const bytesRemains = bytesDownloaded - bytesProcessed;\n if (shared.totalDownloadBytes != undefined && bytesRemains > shared.rowLength * shared.chunkSize) {\n let vertexCount = Math.floor(bytesRemains / shared.rowLength);\n const concatenatedChunksbuffer = new Uint8Array(bytesRemains);\n let offset = 0;\n for (const chunk of chunks) {\n concatenatedChunksbuffer.set(chunk, offset);\n offset += chunk.length;\n }\n chunks.length = 0;\n if (bytesRemains > vertexCount * shared.rowLength) {\n const extra_data = new Uint8Array(bytesRemains - vertexCount * shared.rowLength);\n extra_data.set(concatenatedChunksbuffer.subarray(bytesRemains - extra_data.length, bytesRemains), 0);\n chunks.push(extra_data);\n }\n const buffer = new Uint8Array(vertexCount * shared.rowLength);\n buffer.set(concatenatedChunksbuffer.subarray(0, buffer.byteLength), 0);\n const matrices = pushDataBuffer(shared, buffer.buffer, vertexCount);\n shared.worker.postMessage({\n method: 'push',\n src: shared.url,\n length: shared.numVertices * 16,\n matrices: matrices.buffer\n }, [matrices.buffer]);\n bytesProcessed += vertexCount * shared.rowLength;\n if (shared.onProgress) {\n const event = new ProgressEvent('progress', {\n lengthComputable,\n loaded: shared.totalDownloadBytes,\n total: shared.totalDownloadBytes\n });\n shared.onProgress(event);\n }\n }\n } catch (error) {\n console.error(error);\n break;\n }\n }\n if (bytesDownloaded - bytesProcessed > 0) {\n // Concatenate the chunks into a single Uint8Array\n let concatenatedChunks = new Uint8Array(chunks.reduce((acc, chunk) => acc + chunk.length, 0));\n let offset = 0;\n for (const chunk of chunks) {\n concatenatedChunks.set(chunk, offset);\n offset += chunk.length;\n }\n let numVertices = Math.floor(concatenatedChunks.byteLength / shared.rowLength);\n const matrices = pushDataBuffer(shared, concatenatedChunks.buffer, numVertices);\n shared.worker.postMessage({\n method: 'push',\n src: shared.url,\n length: numVertices * 16,\n matrices: matrices.buffer\n }, [matrices.buffer]);\n }\n shared.loaded = true;\n shared.manager.itemEnd(shared.url);\n}\nfunction update(camera, shared, target, hashed) {\n camera.updateMatrixWorld();\n shared.gl.getCurrentViewport(target.viewport);\n // @ts-ignore\n target.material.viewport.x = target.viewport.z;\n // @ts-ignore\n target.material.viewport.y = target.viewport.w;\n target.material.focal = target.viewport.w / 2.0 * Math.abs(camera.projectionMatrix.elements[5]);\n if (target.ready) {\n if (hashed && target.sorted) return;\n target.ready = false;\n const view = new Float32Array([target.modelViewMatrix.elements[2], -target.modelViewMatrix.elements[6], target.modelViewMatrix.elements[10], target.modelViewMatrix.elements[14]]);\n shared.worker.postMessage({\n method: 'sort',\n src: shared.url,\n key: target.uuid,\n view: view.buffer,\n hashed\n }, [view.buffer]);\n if (hashed && shared.loaded) target.sorted = true;\n }\n}\nfunction connect(shared, target) {\n if (!shared.loading) lazyLoad(shared);\n target.ready = false;\n target.pm = new THREE.Matrix4();\n target.vm1 = new THREE.Matrix4();\n target.vm2 = new THREE.Matrix4();\n target.viewport = new THREE.Vector4();\n let splatIndexArray = new Uint32Array(shared.bufferTextureWidth * shared.bufferTextureHeight);\n const splatIndexes = new THREE.InstancedBufferAttribute(splatIndexArray, 1, false);\n splatIndexes.setUsage(THREE.DynamicDrawUsage);\n const geometry = target.geometry = new THREE.InstancedBufferGeometry();\n const positionsArray = new Float32Array(6 * 3);\n const positions = new THREE.BufferAttribute(positionsArray, 3);\n geometry.setAttribute('position', positions);\n positions.setXYZ(2, -2.0, 2.0, 0.0);\n positions.setXYZ(1, 2.0, 2.0, 0.0);\n positions.setXYZ(0, -2.0, -2.0, 0.0);\n positions.setXYZ(5, -2.0, -2.0, 0.0);\n positions.setXYZ(4, 2.0, 2.0, 0.0);\n positions.setXYZ(3, 2.0, -2.0, 0.0);\n positions.needsUpdate = true;\n geometry.setAttribute('splatIndex', splatIndexes);\n geometry.instanceCount = 1;\n function listener(e) {\n if (target && e.data.key === target.uuid) {\n let indexes = new Uint32Array(e.data.indices);\n // @ts-ignore\n geometry.attributes.splatIndex.set(indexes);\n geometry.attributes.splatIndex.needsUpdate = true;\n geometry.instanceCount = indexes.length;\n target.ready = true;\n }\n }\n shared.worker.addEventListener('message', listener);\n async function wait() {\n while (true) {\n const centerAndScaleTextureProperties = shared.gl.properties.get(shared.centerAndScaleTexture);\n const covAndColorTextureProperties = shared.gl.properties.get(shared.covAndColorTexture);\n if (centerAndScaleTextureProperties != null && centerAndScaleTextureProperties.__webglTexture && covAndColorTextureProperties != null && covAndColorTextureProperties.__webglTexture && shared.loadedVertexCount > 0) break;\n await new Promise(resolve => setTimeout(resolve, 10));\n }\n target.ready = true;\n }\n wait();\n return () => shared.worker.removeEventListener('message', listener);\n}\nfunction pushDataBuffer(shared, buffer, vertexCount) {\n const context = shared.gl.getContext();\n if (shared.loadedVertexCount + vertexCount > shared.maxVertexes) vertexCount = shared.maxVertexes - shared.loadedVertexCount;\n if (vertexCount <= 0) throw 'Failed to parse file';\n const u_buffer = new Uint8Array(buffer);\n const f_buffer = new Float32Array(buffer);\n const matrices = new Float32Array(vertexCount * 16);\n const covAndColorData_uint8 = new Uint8Array(shared.covAndColorData.buffer);\n const covAndColorData_int16 = new Int16Array(shared.covAndColorData.buffer);\n for (let i = 0; i < vertexCount; i++) {\n const quat = new THREE.Quaternion(-(u_buffer[32 * i + 28 + 1] - 128) / 128.0, (u_buffer[32 * i + 28 + 2] - 128) / 128.0, (u_buffer[32 * i + 28 + 3] - 128) / 128.0, -(u_buffer[32 * i + 28 + 0] - 128) / 128.0);\n quat.invert();\n const center = new THREE.Vector3(f_buffer[8 * i + 0], f_buffer[8 * i + 1], -f_buffer[8 * i + 2]);\n const scale = new THREE.Vector3(f_buffer[8 * i + 3 + 0], f_buffer[8 * i + 3 + 1], f_buffer[8 * i + 3 + 2]);\n const mtx = new THREE.Matrix4();\n mtx.makeRotationFromQuaternion(quat);\n mtx.transpose();\n mtx.scale(scale);\n const mtx_t = mtx.clone();\n mtx.transpose();\n mtx.premultiply(mtx_t);\n mtx.setPosition(center);\n const cov_indexes = [0, 1, 2, 5, 6, 10];\n let max_value = 0.0;\n for (let j = 0; j < cov_indexes.length; j++) if (Math.abs(mtx.elements[cov_indexes[j]]) > max_value) max_value = Math.abs(mtx.elements[cov_indexes[j]]);\n let destOffset = shared.loadedVertexCount * 4 + i * 4;\n shared.centerAndScaleData[destOffset + 0] = center.x;\n shared.centerAndScaleData[destOffset + 1] = -center.y;\n shared.centerAndScaleData[destOffset + 2] = center.z;\n shared.centerAndScaleData[destOffset + 3] = max_value / 32767.0;\n destOffset = shared.loadedVertexCount * 8 + i * 4 * 2;\n for (let j = 0; j < cov_indexes.length; j++) covAndColorData_int16[destOffset + j] = mtx.elements[cov_indexes[j]] * 32767.0 / max_value;\n\n // RGBA\n destOffset = shared.loadedVertexCount * 16 + (i * 4 + 3) * 4;\n const col = new THREE.Color(u_buffer[32 * i + 24 + 0] / 255, u_buffer[32 * i + 24 + 1] / 255, u_buffer[32 * i + 24 + 2] / 255);\n col.convertSRGBToLinear();\n covAndColorData_uint8[destOffset + 0] = col.r * 255;\n covAndColorData_uint8[destOffset + 1] = col.g * 255;\n covAndColorData_uint8[destOffset + 2] = col.b * 255;\n covAndColorData_uint8[destOffset + 3] = u_buffer[32 * i + 24 + 3];\n\n // Store scale and transparent to remove splat in sorting process\n mtx.elements[15] = Math.max(scale.x, scale.y, scale.z) * u_buffer[32 * i + 24 + 3] / 255.0;\n for (let j = 0; j < 16; j++) matrices[i * 16 + j] = mtx.elements[j];\n }\n while (vertexCount > 0) {\n let width = 0;\n let height = 0;\n const xoffset = shared.loadedVertexCount % shared.bufferTextureWidth;\n const yoffset = Math.floor(shared.loadedVertexCount / shared.bufferTextureWidth);\n if (shared.loadedVertexCount % shared.bufferTextureWidth != 0) {\n width = Math.min(shared.bufferTextureWidth, xoffset + vertexCount) - xoffset;\n height = 1;\n } else if (Math.floor(vertexCount / shared.bufferTextureWidth) > 0) {\n width = shared.bufferTextureWidth;\n height = Math.floor(vertexCount / shared.bufferTextureWidth);\n } else {\n width = vertexCount % shared.bufferTextureWidth;\n height = 1;\n }\n const centerAndScaleTextureProperties = shared.gl.properties.get(shared.centerAndScaleTexture);\n context.bindTexture(context.TEXTURE_2D, centerAndScaleTextureProperties.__webglTexture);\n context.texSubImage2D(context.TEXTURE_2D, 0, xoffset, yoffset, width, height, context.RGBA, context.FLOAT, shared.centerAndScaleData, shared.loadedVertexCount * 4);\n const covAndColorTextureProperties = shared.gl.properties.get(shared.covAndColorTexture);\n context.bindTexture(context.TEXTURE_2D, covAndColorTextureProperties.__webglTexture);\n context.texSubImage2D(context.TEXTURE_2D, 0, xoffset, yoffset, width, height,\n // @ts-ignore\n context.RGBA_INTEGER, context.UNSIGNED_INT, shared.covAndColorData, shared.loadedVertexCount * 4);\n shared.gl.resetState();\n shared.loadedVertexCount += width * height;\n vertexCount -= width * height;\n }\n return matrices;\n}\nfunction Splat({\n src,\n toneMapped = false,\n alphaTest = 0,\n alphaHash = false,\n chunkSize = 25000,\n ...props\n}) {\n extend({\n SplatMaterial\n });\n const ref = React.useRef(null);\n const gl = useThree(state => state.gl);\n const camera = useThree(state => state.camera);\n\n // Shared state, globally memoized, the same url re-uses the same daza\n const shared = useLoader(SplatLoader, src, loader => {\n loader.gl = gl;\n loader.chunkSize = chunkSize;\n });\n\n // Listen to worker results, apply them to the target mesh\n React.useLayoutEffect(() => shared.connect(ref.current), [src]);\n // Update the worker\n useFrame(() => shared.update(ref.current, camera, alphaHash));\n return /*#__PURE__*/React.createElement(\"mesh\", _extends({\n ref: ref,\n frustumCulled: false\n }, props), /*#__PURE__*/React.createElement(\"splatMaterial\", {\n key: `${src}/${alphaTest}/${alphaHash}${SplatMaterial.key}`,\n transparent: !alphaHash,\n depthTest: true,\n alphaTest: alphaHash ? 0 : alphaTest,\n centerAndScaleTexture: shared.centerAndScaleTexture,\n covAndColorTexture: shared.covAndColorTexture,\n depthWrite: alphaHash ? true : alphaTest > 0,\n blending: alphaHash ? THREE.NormalBlending : THREE.CustomBlending,\n blendSrcAlpha: THREE.OneFactor,\n alphaHash: !!alphaHash,\n toneMapped: toneMapped\n }));\n}\n\nexport { Splat };\n","import * as React from 'react';\nimport { forwardRef, useImperativeHandle } from 'react';\nimport * as THREE from 'three';\nimport { useThree } from '@react-three/fiber';\n\n// 👇 uncomment when TS version supports function overloads\n// export function useFBO(settings?: FBOSettings)\nfunction useFBO(/** Width in pixels, or settings (will render fullscreen by default) */\nwidth, /** Height in pixels */\nheight, /**Settings */\nsettings) {\n const size = useThree(state => state.size);\n const viewport = useThree(state => state.viewport);\n const _width = typeof width === 'number' ? width : size.width * viewport.dpr;\n const _height = typeof height === 'number' ? height : size.height * viewport.dpr;\n const _settings = (typeof width === 'number' ? settings : width) || {};\n const {\n samples = 0,\n depth,\n ...targetSettings\n } = _settings;\n const depthBuffer = depth !== null && depth !== void 0 ? depth : _settings.depthBuffer; // backwards compatibility for deprecated `depth` prop\n\n const target = React.useMemo(() => {\n const target = new THREE.WebGLRenderTarget(_width, _height, {\n minFilter: THREE.LinearFilter,\n magFilter: THREE.LinearFilter,\n type: THREE.HalfFloatType,\n ...targetSettings\n });\n if (depthBuffer) {\n target.depthTexture = new THREE.DepthTexture(_width, _height, THREE.FloatType);\n }\n target.samples = samples;\n return target;\n }, []);\n React.useLayoutEffect(() => {\n target.setSize(_width, _height);\n if (samples) target.samples = samples;\n }, [samples, target, _width, _height]);\n React.useEffect(() => {\n return () => target.dispose();\n }, []);\n return target;\n}\n\n//\n// Fbo component\n//\n\nconst Fbo = /* @__PURE__ */forwardRef(({\n children,\n width,\n height,\n ...settings\n}, fref) => {\n const target = useFBO(width, height, settings);\n useImperativeHandle(fref, () => target, [target]); // expose target through ref\n\n return /*#__PURE__*/React.createElement(React.Fragment, null, children == null ? void 0 : children(target));\n});\n\nexport { Fbo, useFBO };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { useFBO } from './Fbo.js';\n\nconst isFunction = node => typeof node === 'function';\nconst OrthographicCamera = /* @__PURE__ */React.forwardRef(({\n envMap,\n resolution = 256,\n frames = Infinity,\n children,\n makeDefault,\n ...props\n}, ref) => {\n const set = useThree(({\n set\n }) => set);\n const camera = useThree(({\n camera\n }) => camera);\n const size = useThree(({\n size\n }) => size);\n const cameraRef = React.useRef(null);\n React.useImperativeHandle(ref, () => cameraRef.current, []);\n const groupRef = React.useRef(null);\n const fbo = useFBO(resolution);\n React.useLayoutEffect(() => {\n if (!props.manual) {\n cameraRef.current.updateProjectionMatrix();\n }\n }, [size, props]);\n React.useLayoutEffect(() => {\n cameraRef.current.updateProjectionMatrix();\n });\n React.useLayoutEffect(() => {\n if (makeDefault) {\n const oldCam = camera;\n set(() => ({\n camera: cameraRef.current\n }));\n return () => set(() => ({\n camera: oldCam\n }));\n }\n // The camera should not be part of the dependency list because this components camera is a stable reference\n // that must exchange the default, and clean up after itself on unmount.\n }, [cameraRef, makeDefault, set]);\n let count = 0;\n let oldEnvMap = null;\n const functional = isFunction(children);\n useFrame(state => {\n if (functional && (frames === Infinity || count < frames)) {\n groupRef.current.visible = false;\n state.gl.setRenderTarget(fbo);\n oldEnvMap = state.scene.background;\n if (envMap) state.scene.background = envMap;\n state.gl.render(state.scene, cameraRef.current);\n state.scene.background = oldEnvMap;\n state.gl.setRenderTarget(null);\n groupRef.current.visible = true;\n count++;\n }\n });\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"orthographicCamera\", _extends({\n left: size.width / -2,\n right: size.width / 2,\n top: size.height / 2,\n bottom: size.height / -2,\n ref: cameraRef\n }, props), !functional && children), /*#__PURE__*/React.createElement(\"group\", {\n ref: groupRef\n }, functional && children(fbo.texture)));\n});\n\nexport { OrthographicCamera };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { useFBO } from './Fbo.js';\n\nconst isFunction = node => typeof node === 'function';\nconst PerspectiveCamera = /* @__PURE__ */React.forwardRef(({\n envMap,\n resolution = 256,\n frames = Infinity,\n makeDefault,\n children,\n ...props\n}, ref) => {\n const set = useThree(({\n set\n }) => set);\n const camera = useThree(({\n camera\n }) => camera);\n const size = useThree(({\n size\n }) => size);\n const cameraRef = React.useRef(null);\n React.useImperativeHandle(ref, () => cameraRef.current, []);\n const groupRef = React.useRef(null);\n const fbo = useFBO(resolution);\n React.useLayoutEffect(() => {\n if (!props.manual) {\n cameraRef.current.aspect = size.width / size.height;\n }\n }, [size, props]);\n React.useLayoutEffect(() => {\n cameraRef.current.updateProjectionMatrix();\n });\n let count = 0;\n let oldEnvMap = null;\n const functional = isFunction(children);\n useFrame(state => {\n if (functional && (frames === Infinity || count < frames)) {\n groupRef.current.visible = false;\n state.gl.setRenderTarget(fbo);\n oldEnvMap = state.scene.background;\n if (envMap) state.scene.background = envMap;\n state.gl.render(state.scene, cameraRef.current);\n state.scene.background = oldEnvMap;\n state.gl.setRenderTarget(null);\n groupRef.current.visible = true;\n count++;\n }\n });\n React.useLayoutEffect(() => {\n if (makeDefault) {\n const oldCam = camera;\n set(() => ({\n camera: cameraRef.current\n }));\n return () => set(() => ({\n camera: oldCam\n }));\n }\n // The camera should not be part of the dependency list because this components camera is a stable reference\n // that must exchange the default, and clean up after itself on unmount.\n }, [cameraRef, makeDefault, set]);\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"perspectiveCamera\", _extends({\n ref: cameraRef\n }, props), !functional && children), /*#__PURE__*/React.createElement(\"group\", {\n ref: groupRef\n }, functional && children(fbo.texture)));\n});\n\nexport { PerspectiveCamera };\n","import * as THREE from 'three';\nimport { WebGLCubeRenderTarget, HalfFloatType } from 'three';\nimport * as React from 'react';\nimport { useMemo, useEffect } from 'react';\nimport { useThree, useFrame } from '@react-three/fiber';\n\nfunction useCubeCamera({\n resolution = 256,\n near = 0.1,\n far = 1000,\n envMap,\n fog\n} = {}) {\n const gl = useThree(({\n gl\n }) => gl);\n const scene = useThree(({\n scene\n }) => scene);\n const fbo = useMemo(() => {\n const fbo = new WebGLCubeRenderTarget(resolution);\n fbo.texture.type = HalfFloatType;\n return fbo;\n }, [resolution]);\n useEffect(() => {\n return () => {\n fbo.dispose();\n };\n }, [fbo]);\n const camera = useMemo(() => new THREE.CubeCamera(near, far, fbo), [near, far, fbo]);\n let originalFog;\n let originalBackground;\n const update = React.useCallback(() => {\n originalFog = scene.fog;\n originalBackground = scene.background;\n scene.background = envMap || originalBackground;\n scene.fog = fog || originalFog;\n camera.update(gl, scene);\n scene.fog = originalFog;\n scene.background = originalBackground;\n }, [gl, scene, camera]);\n return {\n fbo,\n camera,\n update\n };\n}\nfunction CubeCamera({\n children,\n frames = Infinity,\n resolution,\n near,\n far,\n envMap,\n fog,\n ...props\n}) {\n const ref = React.useRef(null);\n const {\n fbo,\n camera,\n update\n } = useCubeCamera({\n resolution,\n near,\n far,\n envMap,\n fog\n });\n let count = 0;\n useFrame(() => {\n if (ref.current && (frames === Infinity || count < frames)) {\n ref.current.visible = false;\n update();\n ref.current.visible = true;\n count++;\n }\n });\n return /*#__PURE__*/React.createElement(\"group\", props, /*#__PURE__*/React.createElement(\"primitive\", {\n object: camera\n }), /*#__PURE__*/React.createElement(\"group\", {\n ref: ref\n }, children == null ? void 0 : children(fbo.texture)));\n}\n\nexport { CubeCamera, useCubeCamera };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport * as React from 'react';\nimport { DeviceOrientationControls as DeviceOrientationControls$1 } from 'three-stdlib';\n\nconst DeviceOrientationControls = /* @__PURE__ */React.forwardRef((props, ref) => {\n const {\n camera,\n onChange,\n makeDefault,\n ...rest\n } = props;\n const defaultCamera = useThree(state => state.camera);\n const invalidate = useThree(state => state.invalidate);\n const get = useThree(state => state.get);\n const set = useThree(state => state.set);\n const explCamera = camera || defaultCamera;\n const controls = React.useMemo(() => new DeviceOrientationControls$1(explCamera), [explCamera]);\n React.useEffect(() => {\n const callback = e => {\n invalidate();\n if (onChange) onChange(e);\n };\n controls == null || controls.addEventListener == null || controls.addEventListener('change', callback);\n return () => controls == null || controls.removeEventListener == null ? void 0 : controls.removeEventListener('change', callback);\n }, [onChange, controls, invalidate]);\n useFrame(() => controls == null ? void 0 : controls.update(), -1);\n React.useEffect(() => {\n const current = controls;\n current == null || current.connect();\n return () => current == null ? void 0 : current.dispose();\n }, [controls]);\n React.useEffect(() => {\n if (makeDefault) {\n const old = get().controls;\n // @ts-ignore https://github.com/three-types/three-ts-types/pull/1398\n set({\n controls\n });\n return () => set({\n controls: old\n });\n }\n }, [makeDefault, controls]);\n return controls ? /*#__PURE__*/React.createElement(\"primitive\", _extends({\n ref: ref,\n object: controls\n }, rest)) : null;\n});\n\nexport { DeviceOrientationControls };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport * as React from 'react';\nimport { FlyControls as FlyControls$1 } from 'three-stdlib';\n\nconst FlyControls = /* @__PURE__ */React.forwardRef(({\n domElement,\n ...props\n}, fref) => {\n const {\n onChange,\n makeDefault,\n ...rest\n } = props;\n const invalidate = useThree(state => state.invalidate);\n const camera = useThree(state => state.camera);\n const gl = useThree(state => state.gl);\n const events = useThree(state => state.events);\n const get = useThree(state => state.get);\n const set = useThree(state => state.set);\n const explDomElement = domElement || events.connected || gl.domElement;\n const controls = React.useMemo(() => new FlyControls$1(camera), [camera]);\n React.useEffect(() => {\n controls.connect(explDomElement);\n return () => void controls.dispose();\n }, [explDomElement, controls, invalidate]);\n React.useEffect(() => {\n const callback = e => {\n invalidate();\n if (onChange) onChange(e);\n };\n controls.addEventListener == null || controls.addEventListener('change', callback);\n return () => controls.removeEventListener == null ? void 0 : controls.removeEventListener('change', callback);\n }, [onChange, invalidate]);\n React.useEffect(() => {\n if (makeDefault) {\n const old = get().controls;\n // @ts-ignore https://github.com/three-types/three-ts-types/pull/1398\n set({\n controls\n });\n return () => set({\n controls: old\n });\n }\n }, [makeDefault, controls]);\n useFrame((_, delta) => controls.update(delta));\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n ref: fref,\n object: controls,\n args: [camera, explDomElement]\n }, rest));\n});\n\nexport { FlyControls };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport * as React from 'react';\nimport { MapControls as MapControls$1 } from 'three-stdlib';\n\nconst MapControls = /* @__PURE__ */React.forwardRef((props = {\n enableDamping: true\n}, ref) => {\n const {\n domElement,\n camera,\n makeDefault,\n onChange,\n onStart,\n onEnd,\n ...rest\n } = props;\n const invalidate = useThree(state => state.invalidate);\n const defaultCamera = useThree(state => state.camera);\n const gl = useThree(state => state.gl);\n const events = useThree(state => state.events);\n const set = useThree(state => state.set);\n const get = useThree(state => state.get);\n const explDomElement = domElement || events.connected || gl.domElement;\n const explCamera = camera || defaultCamera;\n const controls = React.useMemo(() => new MapControls$1(explCamera), [explCamera]);\n React.useEffect(() => {\n controls.connect(explDomElement);\n const callback = e => {\n invalidate();\n if (onChange) onChange(e);\n };\n controls.addEventListener('change', callback);\n if (onStart) controls.addEventListener('start', onStart);\n if (onEnd) controls.addEventListener('end', onEnd);\n return () => {\n controls.dispose();\n controls.removeEventListener('change', callback);\n if (onStart) controls.removeEventListener('start', onStart);\n if (onEnd) controls.removeEventListener('end', onEnd);\n };\n }, [onChange, onStart, onEnd, controls, invalidate, explDomElement]);\n React.useEffect(() => {\n if (makeDefault) {\n const old = get().controls;\n // @ts-ignore https://github.com/three-types/three-ts-types/pull/1398\n set({\n controls\n });\n return () => set({\n controls: old\n });\n }\n }, [makeDefault, controls]);\n useFrame(() => controls.update(), -1);\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n ref: ref,\n object: controls,\n enableDamping: true\n }, rest));\n});\n\nexport { MapControls };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport * as React from 'react';\nimport { OrbitControls as OrbitControls$1 } from 'three-stdlib';\n\nconst OrbitControls = /* @__PURE__ */React.forwardRef(({\n makeDefault,\n camera,\n regress,\n domElement,\n enableDamping = true,\n keyEvents = false,\n onChange,\n onStart,\n onEnd,\n ...restProps\n}, ref) => {\n const invalidate = useThree(state => state.invalidate);\n const defaultCamera = useThree(state => state.camera);\n const gl = useThree(state => state.gl);\n const events = useThree(state => state.events);\n const setEvents = useThree(state => state.setEvents);\n const set = useThree(state => state.set);\n const get = useThree(state => state.get);\n const performance = useThree(state => state.performance);\n const explCamera = camera || defaultCamera;\n const explDomElement = domElement || events.connected || gl.domElement;\n const controls = React.useMemo(() => new OrbitControls$1(explCamera), [explCamera]);\n useFrame(() => {\n if (controls.enabled) controls.update();\n }, -1);\n React.useEffect(() => {\n if (keyEvents) {\n controls.connect(keyEvents === true ? explDomElement : keyEvents);\n }\n controls.connect(explDomElement);\n return () => void controls.dispose();\n }, [keyEvents, explDomElement, regress, controls, invalidate]);\n React.useEffect(() => {\n const callback = e => {\n invalidate();\n if (regress) performance.regress();\n if (onChange) onChange(e);\n };\n const onStartCb = e => {\n if (onStart) onStart(e);\n };\n const onEndCb = e => {\n if (onEnd) onEnd(e);\n };\n controls.addEventListener('change', callback);\n controls.addEventListener('start', onStartCb);\n controls.addEventListener('end', onEndCb);\n return () => {\n controls.removeEventListener('start', onStartCb);\n controls.removeEventListener('end', onEndCb);\n controls.removeEventListener('change', callback);\n };\n }, [onChange, onStart, onEnd, controls, invalidate, setEvents]);\n React.useEffect(() => {\n if (makeDefault) {\n const old = get().controls;\n // @ts-ignore https://github.com/three-types/three-ts-types/pull/1398\n set({\n controls\n });\n return () => set({\n controls: old\n });\n }\n }, [makeDefault, controls]);\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n ref: ref,\n object: controls,\n enableDamping: enableDamping\n }, restProps));\n});\n\nexport { OrbitControls };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport * as React from 'react';\nimport { TrackballControls as TrackballControls$1 } from 'three-stdlib';\n\nconst TrackballControls = /* @__PURE__ */React.forwardRef(({\n makeDefault,\n camera,\n domElement,\n regress,\n onChange,\n onStart,\n onEnd,\n ...restProps\n}, ref) => {\n const {\n invalidate,\n camera: defaultCamera,\n gl,\n events,\n set,\n get,\n performance,\n viewport\n } = useThree();\n const explCamera = camera || defaultCamera;\n const explDomElement = domElement || events.connected || gl.domElement;\n const controls = React.useMemo(() => new TrackballControls$1(explCamera), [explCamera]);\n useFrame(() => {\n if (controls.enabled) controls.update();\n }, -1);\n React.useEffect(() => {\n controls.connect(explDomElement);\n return () => void controls.dispose();\n }, [explDomElement, regress, controls, invalidate]);\n React.useEffect(() => {\n const callback = e => {\n invalidate();\n if (regress) performance.regress();\n if (onChange) onChange(e);\n };\n controls.addEventListener('change', callback);\n if (onStart) controls.addEventListener('start', onStart);\n if (onEnd) controls.addEventListener('end', onEnd);\n return () => {\n if (onStart) controls.removeEventListener('start', onStart);\n if (onEnd) controls.removeEventListener('end', onEnd);\n controls.removeEventListener('change', callback);\n };\n }, [onChange, onStart, onEnd, controls, invalidate]);\n React.useEffect(() => {\n controls.handleResize();\n }, [viewport]);\n React.useEffect(() => {\n if (makeDefault) {\n const old = get().controls;\n // @ts-ignore https://github.com/three-types/three-ts-types/pull/1398\n set({\n controls\n });\n return () => set({\n controls: old\n });\n }\n }, [makeDefault, controls]);\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n ref: ref,\n object: controls\n }, restProps));\n});\n\nexport { TrackballControls };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport * as React from 'react';\nimport { forwardRef, useMemo, useEffect } from 'react';\nimport { ArcballControls as ArcballControls$1 } from 'three-stdlib';\n\nconst ArcballControls = /* @__PURE__ */forwardRef(({\n camera,\n makeDefault,\n regress,\n domElement,\n onChange,\n onStart,\n onEnd,\n ...restProps\n}, ref) => {\n const invalidate = useThree(state => state.invalidate);\n const defaultCamera = useThree(state => state.camera);\n const gl = useThree(state => state.gl);\n const events = useThree(state => state.events);\n const set = useThree(state => state.set);\n const get = useThree(state => state.get);\n const performance = useThree(state => state.performance);\n const explCamera = camera || defaultCamera;\n const explDomElement = domElement || events.connected || gl.domElement;\n const controls = useMemo(() => new ArcballControls$1(explCamera), [explCamera]);\n useFrame(() => {\n if (controls.enabled) controls.update();\n }, -1);\n useEffect(() => {\n controls.connect(explDomElement);\n return () => void controls.dispose();\n }, [explDomElement, regress, controls, invalidate]);\n useEffect(() => {\n const callback = e => {\n invalidate();\n if (regress) performance.regress();\n if (onChange) onChange(e);\n };\n controls.addEventListener('change', callback);\n if (onStart) controls.addEventListener('start', onStart);\n if (onEnd) controls.addEventListener('end', onEnd);\n return () => {\n controls.removeEventListener('change', callback);\n if (onStart) controls.removeEventListener('start', onStart);\n if (onEnd) controls.removeEventListener('end', onEnd);\n };\n }, [onChange, onStart, onEnd]);\n useEffect(() => {\n if (makeDefault) {\n const old = get().controls;\n // @ts-ignore https://github.com/three-types/three-ts-types/pull/1398\n set({\n controls\n });\n return () => set({\n controls: old\n });\n }\n }, [makeDefault, controls]);\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n ref: ref,\n object: controls\n }, restProps));\n});\n\nexport { ArcballControls };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useThree } from '@react-three/fiber';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { TransformControls as TransformControls$1 } from 'three-stdlib';\n\nconst TransformControls = /* @__PURE__ */React.forwardRef(({\n children,\n domElement,\n onChange,\n onMouseDown,\n onMouseUp,\n onObjectChange,\n object,\n makeDefault,\n camera,\n // Transform\n enabled,\n axis,\n mode,\n translationSnap,\n rotationSnap,\n scaleSnap,\n space,\n size,\n showX,\n showY,\n showZ,\n ...props\n}, ref) => {\n const defaultControls = useThree(state => state.controls);\n const gl = useThree(state => state.gl);\n const events = useThree(state => state.events);\n const defaultCamera = useThree(state => state.camera);\n const invalidate = useThree(state => state.invalidate);\n const get = useThree(state => state.get);\n const set = useThree(state => state.set);\n const explCamera = camera || defaultCamera;\n const explDomElement = domElement || events.connected || gl.domElement;\n const controls = React.useMemo(() => new TransformControls$1(explCamera, explDomElement), [explCamera, explDomElement]);\n const group = React.useRef(null);\n React.useLayoutEffect(() => {\n if (object) {\n controls.attach(object instanceof THREE.Object3D ? object : object.current);\n } else if (group.current instanceof THREE.Object3D) {\n controls.attach(group.current);\n }\n return () => void controls.detach();\n }, [object, children, controls]);\n React.useEffect(() => {\n if (defaultControls) {\n const callback = event => defaultControls.enabled = !event.value;\n controls.addEventListener('dragging-changed', callback);\n return () => controls.removeEventListener('dragging-changed', callback);\n }\n }, [controls, defaultControls]);\n const onChangeRef = React.useRef(undefined);\n const onMouseDownRef = React.useRef(undefined);\n const onMouseUpRef = React.useRef(undefined);\n const onObjectChangeRef = React.useRef(undefined);\n React.useLayoutEffect(() => void (onChangeRef.current = onChange), [onChange]);\n React.useLayoutEffect(() => void (onMouseDownRef.current = onMouseDown), [onMouseDown]);\n React.useLayoutEffect(() => void (onMouseUpRef.current = onMouseUp), [onMouseUp]);\n React.useLayoutEffect(() => void (onObjectChangeRef.current = onObjectChange), [onObjectChange]);\n React.useEffect(() => {\n const onChange = e => {\n invalidate();\n onChangeRef.current == null || onChangeRef.current(e);\n };\n const onMouseDown = e => onMouseDownRef.current == null ? void 0 : onMouseDownRef.current(e);\n const onMouseUp = e => onMouseUpRef.current == null ? void 0 : onMouseUpRef.current(e);\n const onObjectChange = e => onObjectChangeRef.current == null ? void 0 : onObjectChangeRef.current(e);\n controls.addEventListener('change', onChange);\n controls.addEventListener('mouseDown', onMouseDown);\n controls.addEventListener('mouseUp', onMouseUp);\n controls.addEventListener('objectChange', onObjectChange);\n return () => {\n controls.removeEventListener('change', onChange);\n controls.removeEventListener('mouseDown', onMouseDown);\n controls.removeEventListener('mouseUp', onMouseUp);\n controls.removeEventListener('objectChange', onObjectChange);\n };\n }, [invalidate, controls]);\n React.useEffect(() => {\n if (makeDefault) {\n const old = get().controls;\n set({\n controls\n });\n return () => set({\n controls: old\n });\n }\n }, [makeDefault, controls]);\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"primitive\", {\n ref: ref,\n object: controls,\n enabled: enabled,\n axis: axis,\n mode: mode,\n translationSnap: translationSnap,\n rotationSnap: rotationSnap,\n scaleSnap: scaleSnap,\n space: space,\n size: size,\n showX: showX,\n showY: showY,\n showZ: showZ\n }), /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: group\n }, props), children));\n});\n\nexport { TransformControls };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useThree } from '@react-three/fiber';\nimport * as React from 'react';\nimport { PointerLockControls as PointerLockControls$1 } from 'three-stdlib';\n\nconst PointerLockControls = /* @__PURE__ */React.forwardRef(({\n domElement,\n selector,\n onChange,\n onLock,\n onUnlock,\n enabled = true,\n makeDefault,\n ...props\n}, ref) => {\n const {\n camera,\n ...rest\n } = props;\n const setEvents = useThree(state => state.setEvents);\n const gl = useThree(state => state.gl);\n const defaultCamera = useThree(state => state.camera);\n const invalidate = useThree(state => state.invalidate);\n const events = useThree(state => state.events);\n const get = useThree(state => state.get);\n const set = useThree(state => state.set);\n const explCamera = camera || defaultCamera;\n const explDomElement = domElement || events.connected || gl.domElement;\n const controls = React.useMemo(() => new PointerLockControls$1(explCamera), [explCamera]);\n React.useEffect(() => {\n if (enabled) {\n controls.connect(explDomElement);\n // Force events to be centered while PLC is active\n const oldComputeOffsets = get().events.compute;\n setEvents({\n compute(event, state) {\n const offsetX = state.size.width / 2;\n const offsetY = state.size.height / 2;\n state.pointer.set(offsetX / state.size.width * 2 - 1, -(offsetY / state.size.height) * 2 + 1);\n state.raycaster.setFromCamera(state.pointer, state.camera);\n }\n });\n return () => {\n controls.disconnect();\n setEvents({\n compute: oldComputeOffsets\n });\n };\n }\n }, [enabled, controls]);\n React.useEffect(() => {\n const callback = e => {\n invalidate();\n if (onChange) onChange(e);\n };\n controls.addEventListener('change', callback);\n if (onLock) controls.addEventListener('lock', onLock);\n if (onUnlock) controls.addEventListener('unlock', onUnlock);\n\n // Enforce previous interaction\n const handler = () => controls.lock();\n const elements = selector ? Array.from(document.querySelectorAll(selector)) : [document];\n elements.forEach(element => element && element.addEventListener('click', handler));\n return () => {\n controls.removeEventListener('change', callback);\n if (onLock) controls.removeEventListener('lock', onLock);\n if (onUnlock) controls.removeEventListener('unlock', onUnlock);\n elements.forEach(element => element ? element.removeEventListener('click', handler) : undefined);\n };\n }, [onChange, onLock, onUnlock, selector, controls, invalidate]);\n React.useEffect(() => {\n if (makeDefault) {\n const old = get().controls;\n // @ts-ignore https://github.com/three-types/three-ts-types/pull/1398\n set({\n controls\n });\n return () => set({\n controls: old\n });\n }\n }, [makeDefault, controls]);\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n ref: ref,\n object: controls\n }, rest));\n});\n\nexport { PointerLockControls };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { FirstPersonControls as FirstPersonControls$1 } from 'three-stdlib';\n\nconst FirstPersonControls = /* @__PURE__ */React.forwardRef(({\n domElement,\n makeDefault,\n ...props\n}, ref) => {\n const camera = useThree(state => state.camera);\n const gl = useThree(state => state.gl);\n const events = useThree(state => state.events);\n const get = useThree(state => state.get);\n const set = useThree(state => state.set);\n const explDomElement = domElement || events.connected || gl.domElement;\n const [controls] = React.useState(() => new FirstPersonControls$1(camera, explDomElement));\n React.useEffect(() => {\n if (makeDefault) {\n const old = get().controls;\n set({\n controls\n });\n return () => set({\n controls: old\n });\n }\n }, [makeDefault, controls]);\n useFrame((_, delta) => {\n controls.update(delta);\n }, -1);\n return controls ? /*#__PURE__*/React.createElement(\"primitive\", _extends({\n ref: ref,\n object: controls\n }, props)) : null;\n});\n\nexport { FirstPersonControls };\n","/*!\n * camera-controls\n * https://github.com/yomotsu/camera-controls\n * (c) 2017 @yomotsu\n * Released under the MIT License.\n */\n// see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#value\nconst MOUSE_BUTTON = {\n LEFT: 1,\n RIGHT: 2,\n MIDDLE: 4,\n};\nconst ACTION = Object.freeze({\n NONE: 0b0,\n ROTATE: 0b1,\n TRUCK: 0b10,\n SCREEN_PAN: 0b100,\n OFFSET: 0b1000,\n DOLLY: 0b10000,\n ZOOM: 0b100000,\n TOUCH_ROTATE: 0b1000000,\n TOUCH_TRUCK: 0b10000000,\n TOUCH_SCREEN_PAN: 0b100000000,\n TOUCH_OFFSET: 0b1000000000,\n TOUCH_DOLLY: 0b10000000000,\n TOUCH_ZOOM: 0b100000000000,\n TOUCH_DOLLY_TRUCK: 0b1000000000000,\n TOUCH_DOLLY_SCREEN_PAN: 0b10000000000000,\n TOUCH_DOLLY_OFFSET: 0b100000000000000,\n TOUCH_DOLLY_ROTATE: 0b1000000000000000,\n TOUCH_ZOOM_TRUCK: 0b10000000000000000,\n TOUCH_ZOOM_OFFSET: 0b100000000000000000,\n TOUCH_ZOOM_SCREEN_PAN: 0b1000000000000000000,\n TOUCH_ZOOM_ROTATE: 0b10000000000000000000,\n});\nconst DOLLY_DIRECTION = {\n NONE: 0,\n IN: 1,\n OUT: -1,\n};\nfunction isPerspectiveCamera(camera) {\n return camera.isPerspectiveCamera;\n}\nfunction isOrthographicCamera(camera) {\n return camera.isOrthographicCamera;\n}\n\nconst PI_2 = Math.PI * 2;\nconst PI_HALF = Math.PI / 2;\n\nconst EPSILON = 1e-5;\nconst DEG2RAD = Math.PI / 180;\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\nfunction approxZero(number, error = EPSILON) {\n return Math.abs(number) < error;\n}\nfunction approxEquals(a, b, error = EPSILON) {\n return approxZero(a - b, error);\n}\nfunction roundToStep(value, step) {\n return Math.round(value / step) * step;\n}\nfunction infinityToMaxNumber(value) {\n if (isFinite(value))\n return value;\n if (value < 0)\n return -Number.MAX_VALUE;\n return Number.MAX_VALUE;\n}\nfunction maxNumberToInfinity(value) {\n if (Math.abs(value) < Number.MAX_VALUE)\n return value;\n return value * Infinity;\n}\n// https://docs.unity3d.com/ScriptReference/Mathf.SmoothDamp.html\n// https://github.com/Unity-Technologies/UnityCsReference/blob/a2bdfe9b3c4cd4476f44bf52f848063bfaf7b6b9/Runtime/Export/Math/Mathf.cs#L308\nfunction smoothDamp(current, target, currentVelocityRef, smoothTime, maxSpeed = Infinity, deltaTime) {\n // Based on Game Programming Gems 4 Chapter 1.10\n smoothTime = Math.max(0.0001, smoothTime);\n const omega = 2 / smoothTime;\n const x = omega * deltaTime;\n const exp = 1 / (1 + x + 0.48 * x * x + 0.235 * x * x * x);\n let change = current - target;\n const originalTo = target;\n // Clamp maximum speed\n const maxChange = maxSpeed * smoothTime;\n change = clamp(change, -maxChange, maxChange);\n target = current - change;\n const temp = (currentVelocityRef.value + omega * change) * deltaTime;\n currentVelocityRef.value = (currentVelocityRef.value - omega * temp) * exp;\n let output = target + (change + temp) * exp;\n // Prevent overshooting\n if (originalTo - current > 0.0 === output > originalTo) {\n output = originalTo;\n currentVelocityRef.value = (output - originalTo) / deltaTime;\n }\n return output;\n}\n// https://docs.unity3d.com/ScriptReference/Vector3.SmoothDamp.html\n// https://github.com/Unity-Technologies/UnityCsReference/blob/a2bdfe9b3c4cd4476f44bf52f848063bfaf7b6b9/Runtime/Export/Math/Vector3.cs#L97\nfunction smoothDampVec3(current, target, currentVelocityRef, smoothTime, maxSpeed = Infinity, deltaTime, out) {\n // Based on Game Programming Gems 4 Chapter 1.10\n smoothTime = Math.max(0.0001, smoothTime);\n const omega = 2 / smoothTime;\n const x = omega * deltaTime;\n const exp = 1 / (1 + x + 0.48 * x * x + 0.235 * x * x * x);\n let targetX = target.x;\n let targetY = target.y;\n let targetZ = target.z;\n let changeX = current.x - targetX;\n let changeY = current.y - targetY;\n let changeZ = current.z - targetZ;\n const originalToX = targetX;\n const originalToY = targetY;\n const originalToZ = targetZ;\n // Clamp maximum speed\n const maxChange = maxSpeed * smoothTime;\n const maxChangeSq = maxChange * maxChange;\n const magnitudeSq = changeX * changeX + changeY * changeY + changeZ * changeZ;\n if (magnitudeSq > maxChangeSq) {\n const magnitude = Math.sqrt(magnitudeSq);\n changeX = changeX / magnitude * maxChange;\n changeY = changeY / magnitude * maxChange;\n changeZ = changeZ / magnitude * maxChange;\n }\n targetX = current.x - changeX;\n targetY = current.y - changeY;\n targetZ = current.z - changeZ;\n const tempX = (currentVelocityRef.x + omega * changeX) * deltaTime;\n const tempY = (currentVelocityRef.y + omega * changeY) * deltaTime;\n const tempZ = (currentVelocityRef.z + omega * changeZ) * deltaTime;\n currentVelocityRef.x = (currentVelocityRef.x - omega * tempX) * exp;\n currentVelocityRef.y = (currentVelocityRef.y - omega * tempY) * exp;\n currentVelocityRef.z = (currentVelocityRef.z - omega * tempZ) * exp;\n out.x = targetX + (changeX + tempX) * exp;\n out.y = targetY + (changeY + tempY) * exp;\n out.z = targetZ + (changeZ + tempZ) * exp;\n // Prevent overshooting\n const origMinusCurrentX = originalToX - current.x;\n const origMinusCurrentY = originalToY - current.y;\n const origMinusCurrentZ = originalToZ - current.z;\n const outMinusOrigX = out.x - originalToX;\n const outMinusOrigY = out.y - originalToY;\n const outMinusOrigZ = out.z - originalToZ;\n if (origMinusCurrentX * outMinusOrigX + origMinusCurrentY * outMinusOrigY + origMinusCurrentZ * outMinusOrigZ > 0) {\n out.x = originalToX;\n out.y = originalToY;\n out.z = originalToZ;\n currentVelocityRef.x = (out.x - originalToX) / deltaTime;\n currentVelocityRef.y = (out.y - originalToY) / deltaTime;\n currentVelocityRef.z = (out.z - originalToZ) / deltaTime;\n }\n return out;\n}\n\nfunction extractClientCoordFromEvent(pointers, out) {\n out.set(0, 0);\n pointers.forEach((pointer) => {\n out.x += pointer.clientX;\n out.y += pointer.clientY;\n });\n out.x /= pointers.length;\n out.y /= pointers.length;\n}\n\nfunction notSupportedInOrthographicCamera(camera, message) {\n if (isOrthographicCamera(camera)) {\n console.warn(`${message} is not supported in OrthographicCamera`);\n return true;\n }\n return false;\n}\n\nclass EventDispatcher {\n _listeners = {};\n /**\n * Adds the specified event listener.\n * @param type event name\n * @param listener handler function\n * @category Methods\n */\n addEventListener(type, listener) {\n const listeners = this._listeners;\n if (listeners[type] === undefined)\n listeners[type] = [];\n if (listeners[type].indexOf(listener) === -1)\n listeners[type].push(listener);\n }\n /**\n * Presence of the specified event listener.\n * @param type event name\n * @param listener handler function\n * @category Methods\n */\n hasEventListener(type, listener) {\n const listeners = this._listeners;\n return listeners[type] !== undefined && listeners[type].indexOf(listener) !== -1;\n }\n /**\n * Removes the specified event listener\n * @param type event name\n * @param listener handler function\n * @category Methods\n */\n removeEventListener(type, listener) {\n const listeners = this._listeners;\n const listenerArray = listeners[type];\n if (listenerArray !== undefined) {\n const index = listenerArray.indexOf(listener);\n if (index !== -1)\n listenerArray.splice(index, 1);\n }\n }\n /**\n * Removes all event listeners\n * @param type event name\n * @category Methods\n */\n removeAllEventListeners(type) {\n if (!type) {\n this._listeners = {};\n return;\n }\n if (Array.isArray(this._listeners[type]))\n this._listeners[type].length = 0;\n }\n /**\n * Fire an event type.\n * @param event DispatcherEvent\n * @category Methods\n */\n dispatchEvent(event) {\n const listeners = this._listeners;\n const listenerArray = listeners[event.type];\n if (listenerArray !== undefined) {\n event.target = this;\n const array = listenerArray.slice(0);\n for (let i = 0, l = array.length; i < l; i++) {\n array[i].call(this, event);\n }\n }\n }\n}\n\nconst VERSION = '3.1.2'; // will be replaced with `version` in package.json during the build process.\nconst TOUCH_DOLLY_FACTOR = 1 / 8;\nconst isMac = /Mac/.test(globalThis?.navigator?.platform);\nlet THREE;\nlet _ORIGIN;\nlet _AXIS_Y;\nlet _AXIS_Z;\nlet _v2;\nlet _v3A;\nlet _v3B;\nlet _v3C;\nlet _cameraDirection;\nlet _xColumn;\nlet _yColumn;\nlet _zColumn;\nlet _deltaTarget;\nlet _deltaOffset;\nlet _sphericalA;\nlet _sphericalB;\nlet _box3A;\nlet _box3B;\nlet _sphere;\nlet _quaternionA;\nlet _quaternionB;\nlet _rotationMatrix;\nlet _raycaster;\nclass CameraControls extends EventDispatcher {\n /**\n * Injects THREE as the dependency. You can then proceed to use CameraControls.\n *\n * e.g\n * ```javascript\n * CameraControls.install( { THREE: THREE } );\n * ```\n *\n * Note: If you do not wish to use enter three.js to reduce file size(tree-shaking for example), make a subset to install.\n *\n * ```js\n * import {\n * \tVector2,\n * \tVector3,\n * \tVector4,\n * \tQuaternion,\n * \tMatrix4,\n * \tSpherical,\n * \tBox3,\n * \tSphere,\n * \tRaycaster,\n * \tMathUtils,\n * } from 'three';\n *\n * const subsetOfTHREE = {\n * \tVector2 : Vector2,\n * \tVector3 : Vector3,\n * \tVector4 : Vector4,\n * \tQuaternion: Quaternion,\n * \tMatrix4 : Matrix4,\n * \tSpherical : Spherical,\n * \tBox3 : Box3,\n * \tSphere : Sphere,\n * \tRaycaster : Raycaster,\n * };\n\n * CameraControls.install( { THREE: subsetOfTHREE } );\n * ```\n * @category Statics\n */\n static install(libs) {\n THREE = libs.THREE;\n _ORIGIN = Object.freeze(new THREE.Vector3(0, 0, 0));\n _AXIS_Y = Object.freeze(new THREE.Vector3(0, 1, 0));\n _AXIS_Z = Object.freeze(new THREE.Vector3(0, 0, 1));\n _v2 = new THREE.Vector2();\n _v3A = new THREE.Vector3();\n _v3B = new THREE.Vector3();\n _v3C = new THREE.Vector3();\n _cameraDirection = new THREE.Vector3();\n _xColumn = new THREE.Vector3();\n _yColumn = new THREE.Vector3();\n _zColumn = new THREE.Vector3();\n _deltaTarget = new THREE.Vector3();\n _deltaOffset = new THREE.Vector3();\n _sphericalA = new THREE.Spherical();\n _sphericalB = new THREE.Spherical();\n _box3A = new THREE.Box3();\n _box3B = new THREE.Box3();\n _sphere = new THREE.Sphere();\n _quaternionA = new THREE.Quaternion();\n _quaternionB = new THREE.Quaternion();\n _rotationMatrix = new THREE.Matrix4();\n _raycaster = new THREE.Raycaster();\n }\n /**\n * list all ACTIONs\n * @category Statics\n */\n static get ACTION() {\n return ACTION;\n }\n /**\n * Minimum vertical angle in radians.\n * The angle has to be between `0` and `.maxPolarAngle` inclusive.\n * The default value is `0`.\n *\n * e.g.\n * ```\n * cameraControls.maxPolarAngle = 0;\n * ```\n * @category Properties\n */\n minPolarAngle = 0; // radians\n /**\n * Maximum vertical angle in radians.\n * The angle has to be between `.maxPolarAngle` and `Math.PI` inclusive.\n * The default value is `Math.PI`.\n *\n * e.g.\n * ```\n * cameraControls.maxPolarAngle = Math.PI;\n * ```\n * @category Properties\n */\n maxPolarAngle = Math.PI; // radians\n /**\n * Minimum horizontal angle in radians.\n * The angle has to be less than `.maxAzimuthAngle`.\n * The default value is `- Infinity`.\n *\n * e.g.\n * ```\n * cameraControls.minAzimuthAngle = - Infinity;\n * ```\n * @category Properties\n */\n minAzimuthAngle = -Infinity; // radians\n /**\n * Maximum horizontal angle in radians.\n * The angle has to be greater than `.minAzimuthAngle`.\n * The default value is `Infinity`.\n *\n * e.g.\n * ```\n * cameraControls.maxAzimuthAngle = Infinity;\n * ```\n * @category Properties\n */\n maxAzimuthAngle = Infinity; // radians\n // How far you can dolly in and out ( PerspectiveCamera only )\n /**\n * Minimum distance for dolly. The value must be higher than `0`. Default is `Number.EPSILON`.\n * PerspectiveCamera only.\n * @category Properties\n */\n minDistance = Number.EPSILON;\n /**\n * Maximum distance for dolly. The value must be higher than `minDistance`. Default is `Infinity`.\n * PerspectiveCamera only.\n * @category Properties\n */\n maxDistance = Infinity;\n /**\n * `true` to enable Infinity Dolly for wheel and pinch. Use this with `minDistance` and `maxDistance`\n * If the Dolly distance is less (or over) than the `minDistance` (or `maxDistance`), `infinityDolly` will keep the distance and pushes the target position instead.\n * @category Properties\n */\n infinityDolly = false;\n /**\n * Minimum camera zoom.\n * @category Properties\n */\n minZoom = 0.01;\n /**\n * Maximum camera zoom.\n * @category Properties\n */\n maxZoom = Infinity;\n /**\n * Approximate time in seconds to reach the target. A smaller value will reach the target faster.\n * @category Properties\n */\n smoothTime = 0.25;\n /**\n * the smoothTime while dragging\n * @category Properties\n */\n draggingSmoothTime = 0.125;\n /**\n * Max transition speed in unit-per-seconds\n * @category Properties\n */\n maxSpeed = Infinity;\n /**\n * Speed of azimuth (horizontal) rotation.\n * @category Properties\n */\n azimuthRotateSpeed = 1.0;\n /**\n * Speed of polar (vertical) rotation.\n * @category Properties\n */\n polarRotateSpeed = 1.0;\n /**\n * Speed of mouse-wheel dollying.\n * @category Properties\n */\n dollySpeed = 1.0;\n /**\n * `true` to invert direction when dollying or zooming via drag\n * @category Properties\n */\n dollyDragInverted = false;\n /**\n * Speed of drag for truck and pedestal.\n * @category Properties\n */\n truckSpeed = 2.0;\n /**\n * `true` to enable Dolly-in to the mouse cursor coords.\n * @category Properties\n */\n dollyToCursor = false;\n /**\n * @category Properties\n */\n dragToOffset = false;\n /**\n * Friction ratio of the boundary.\n * @category Properties\n */\n boundaryFriction = 0.0;\n /**\n * Controls how soon the `rest` event fires as the camera slows.\n * @category Properties\n */\n restThreshold = 0.01;\n /**\n * An array of Meshes to collide with camera.\n * Be aware colliderMeshes may decrease performance. The collision test uses 4 raycasters from the camera since the near plane has 4 corners.\n * @category Properties\n */\n colliderMeshes = [];\n // button configs\n /**\n * User's mouse input config.\n *\n * | button to assign | behavior |\n * | --------------------- | -------- |\n * | `mouseButtons.left` | `CameraControls.ACTION.ROTATE`* \\| `CameraControls.ACTION.TRUCK` \\| `CameraControls.ACTION.OFFSET` \\| `CameraControls.ACTION.DOLLY` \\| `CameraControls.ACTION.ZOOM` \\| `CameraControls.ACTION.NONE` |\n * | `mouseButtons.right` | `CameraControls.ACTION.ROTATE` \\| `CameraControls.ACTION.TRUCK`* \\| `CameraControls.ACTION.OFFSET` \\| `CameraControls.ACTION.DOLLY` \\| `CameraControls.ACTION.ZOOM` \\| `CameraControls.ACTION.NONE` |\n * | `mouseButtons.wheel` ¹ | `CameraControls.ACTION.ROTATE` \\| `CameraControls.ACTION.TRUCK` \\| `CameraControls.ACTION.OFFSET` \\| `CameraControls.ACTION.DOLLY` \\| `CameraControls.ACTION.ZOOM` \\| `CameraControls.ACTION.NONE` |\n * | `mouseButtons.middle` ² | `CameraControls.ACTION.ROTATE` \\| `CameraControls.ACTION.TRUCK` \\| `CameraControls.ACTION.OFFSET` \\| `CameraControls.ACTION.DOLLY`* \\| `CameraControls.ACTION.ZOOM` \\| `CameraControls.ACTION.NONE` |\n *\n * 1. Mouse wheel event for scroll \"up/down\" on mac \"up/down/left/right\"\n * 2. Mouse click on wheel event \"button\"\n * - \\* is the default.\n * - The default of `mouseButtons.wheel` is:\n * - `DOLLY` for Perspective camera.\n * - `ZOOM` for Orthographic camera, and can't set `DOLLY`.\n * @category Properties\n */\n mouseButtons;\n /**\n * User's touch input config.\n *\n * | fingers to assign | behavior |\n * | --------------------- | -------- |\n * | `touches.one` | `CameraControls.ACTION.TOUCH_ROTATE`* \\| `CameraControls.ACTION.TOUCH_TRUCK` \\| `CameraControls.ACTION.TOUCH_OFFSET` \\| `CameraControls.ACTION.DOLLY` | `CameraControls.ACTION.ZOOM` | `CameraControls.ACTION.NONE` |\n * | `touches.two` | `ACTION.TOUCH_DOLLY_TRUCK` \\| `ACTION.TOUCH_DOLLY_OFFSET` \\| `ACTION.TOUCH_DOLLY_ROTATE` \\| `ACTION.TOUCH_ZOOM_TRUCK` \\| `ACTION.TOUCH_ZOOM_OFFSET` \\| `ACTION.TOUCH_ZOOM_ROTATE` \\| `ACTION.TOUCH_DOLLY` \\| `ACTION.TOUCH_ZOOM` \\| `CameraControls.ACTION.TOUCH_ROTATE` \\| `CameraControls.ACTION.TOUCH_TRUCK` \\| `CameraControls.ACTION.TOUCH_OFFSET` \\| `CameraControls.ACTION.NONE` |\n * | `touches.three` | `ACTION.TOUCH_DOLLY_TRUCK` \\| `ACTION.TOUCH_DOLLY_OFFSET` \\| `ACTION.TOUCH_DOLLY_ROTATE` \\| `ACTION.TOUCH_ZOOM_TRUCK` \\| `ACTION.TOUCH_ZOOM_OFFSET` \\| `ACTION.TOUCH_ZOOM_ROTATE` \\| `CameraControls.ACTION.TOUCH_ROTATE` \\| `CameraControls.ACTION.TOUCH_TRUCK` \\| `CameraControls.ACTION.TOUCH_OFFSET` \\| `CameraControls.ACTION.NONE` |\n *\n * - \\* is the default.\n * - The default of `touches.two` and `touches.three` is:\n * - `TOUCH_DOLLY_TRUCK` for Perspective camera.\n * - `TOUCH_ZOOM_TRUCK` for Orthographic camera, and can't set `TOUCH_DOLLY_TRUCK` and `TOUCH_DOLLY`.\n * @category Properties\n */\n touches;\n /**\n * Force cancel user dragging.\n * @category Methods\n */\n // cancel will be overwritten in the constructor.\n cancel = () => { };\n /**\n * Still an experimental feature.\n * This could change at any time.\n * @category Methods\n */\n lockPointer;\n /**\n * Still an experimental feature.\n * This could change at any time.\n * @category Methods\n */\n unlockPointer;\n _enabled = true;\n _camera;\n _yAxisUpSpace;\n _yAxisUpSpaceInverse;\n _state = ACTION.NONE;\n _domElement;\n _viewport = null;\n // the location of focus, where the object orbits around\n _target;\n _targetEnd;\n _focalOffset;\n _focalOffsetEnd;\n // rotation and dolly distance\n _spherical;\n _sphericalEnd;\n _lastDistance;\n _zoom;\n _zoomEnd;\n _lastZoom;\n // reset\n _cameraUp0;\n _target0;\n _position0;\n _zoom0;\n _focalOffset0;\n _dollyControlCoord;\n _changedDolly = 0;\n _changedZoom = 0;\n // collisionTest uses nearPlane. ( PerspectiveCamera only )\n _nearPlaneCorners;\n _hasRested = true;\n _boundary;\n _boundaryEnclosesCamera = false;\n _needsUpdate = true;\n _updatedLastTime = false;\n _elementRect = new DOMRect();\n _isDragging = false;\n _dragNeedsUpdate = true;\n _activePointers = [];\n _lockedPointer = null;\n _interactiveArea = new DOMRect(0, 0, 1, 1);\n // Use draggingSmoothTime over smoothTime while true.\n // set automatically true on user-dragging start.\n // set automatically false on programmable methods call.\n _isUserControllingRotate = false;\n _isUserControllingDolly = false;\n _isUserControllingTruck = false;\n _isUserControllingOffset = false;\n _isUserControllingZoom = false;\n _lastDollyDirection = DOLLY_DIRECTION.NONE;\n // velocities for smoothDamp\n _thetaVelocity = { value: 0 };\n _phiVelocity = { value: 0 };\n _radiusVelocity = { value: 0 };\n _targetVelocity = new THREE.Vector3();\n _focalOffsetVelocity = new THREE.Vector3();\n _zoomVelocity = { value: 0 };\n /**\n * @deprecated Use `cameraControls.mouseButtons.left = CameraControls.ACTION.SCREEN_PAN` instead.\n */\n set verticalDragToForward(_) {\n console.warn('camera-controls: `verticalDragToForward` was removed. Use `mouseButtons.left = CameraControls.ACTION.SCREEN_PAN` instead.');\n }\n /**\n * Creates a `CameraControls` instance.\n *\n * Note:\n * You **must install** three.js before using camera-controls. see [#install](#install)\n * Not doing so will lead to runtime errors (`undefined` references to THREE).\n *\n * e.g.\n * ```\n * CameraControls.install( { THREE } );\n * const cameraControls = new CameraControls( camera, domElement );\n * ```\n *\n * @param camera A `THREE.PerspectiveCamera` or `THREE.OrthographicCamera` to be controlled.\n * @param domElement A `HTMLElement` for the draggable area, usually `renderer.domElement`.\n * @category Constructor\n */\n constructor(camera, domElement) {\n super();\n // Check if the user has installed THREE\n if (typeof THREE === 'undefined') {\n console.error('camera-controls: `THREE` is undefined. You must first run `CameraControls.install( { THREE: THREE } )`. Check the docs for further information.');\n }\n this._camera = camera;\n this._yAxisUpSpace = new THREE.Quaternion().setFromUnitVectors(this._camera.up, _AXIS_Y);\n this._yAxisUpSpaceInverse = this._yAxisUpSpace.clone().invert();\n this._state = ACTION.NONE;\n // the location\n this._target = new THREE.Vector3();\n this._targetEnd = this._target.clone();\n this._focalOffset = new THREE.Vector3();\n this._focalOffsetEnd = this._focalOffset.clone();\n // rotation\n this._spherical = new THREE.Spherical().setFromVector3(_v3A.copy(this._camera.position).applyQuaternion(this._yAxisUpSpace));\n this._sphericalEnd = this._spherical.clone();\n this._lastDistance = this._spherical.radius;\n this._zoom = this._camera.zoom;\n this._zoomEnd = this._zoom;\n this._lastZoom = this._zoom;\n // collisionTest uses nearPlane.s\n this._nearPlaneCorners = [\n new THREE.Vector3(),\n new THREE.Vector3(),\n new THREE.Vector3(),\n new THREE.Vector3(),\n ];\n this._updateNearPlaneCorners();\n // Target cannot move outside of this box\n this._boundary = new THREE.Box3(new THREE.Vector3(-Infinity, -Infinity, -Infinity), new THREE.Vector3(Infinity, Infinity, Infinity));\n // reset\n this._cameraUp0 = this._camera.up.clone();\n this._target0 = this._target.clone();\n this._position0 = this._camera.position.clone();\n this._zoom0 = this._zoom;\n this._focalOffset0 = this._focalOffset.clone();\n this._dollyControlCoord = new THREE.Vector2();\n // configs\n this.mouseButtons = {\n left: ACTION.ROTATE,\n middle: ACTION.DOLLY,\n right: ACTION.TRUCK,\n wheel: isPerspectiveCamera(this._camera) ? ACTION.DOLLY :\n isOrthographicCamera(this._camera) ? ACTION.ZOOM :\n ACTION.NONE,\n };\n this.touches = {\n one: ACTION.TOUCH_ROTATE,\n two: isPerspectiveCamera(this._camera) ? ACTION.TOUCH_DOLLY_TRUCK :\n isOrthographicCamera(this._camera) ? ACTION.TOUCH_ZOOM_TRUCK :\n ACTION.NONE,\n three: ACTION.TOUCH_TRUCK,\n };\n const dragStartPosition = new THREE.Vector2();\n const lastDragPosition = new THREE.Vector2();\n const dollyStart = new THREE.Vector2();\n const onPointerDown = (event) => {\n if (!this._enabled || !this._domElement)\n return;\n if (this._interactiveArea.left !== 0 ||\n this._interactiveArea.top !== 0 ||\n this._interactiveArea.width !== 1 ||\n this._interactiveArea.height !== 1) {\n const elRect = this._domElement.getBoundingClientRect();\n const left = event.clientX / elRect.width;\n const top = event.clientY / elRect.height;\n // check if the interactiveArea contains the drag start position.\n if (left < this._interactiveArea.left ||\n left > this._interactiveArea.right ||\n top < this._interactiveArea.top ||\n top > this._interactiveArea.bottom)\n return;\n }\n // Don't call `event.preventDefault()` on the pointerdown event\n // to keep receiving pointermove evens outside dragging iframe\n // https://taye.me/blog/tips/2015/11/16/mouse-drag-outside-iframe/\n const mouseButton = event.pointerType !== 'mouse' ? null :\n (event.buttons & MOUSE_BUTTON.LEFT) === MOUSE_BUTTON.LEFT ? MOUSE_BUTTON.LEFT :\n (event.buttons & MOUSE_BUTTON.MIDDLE) === MOUSE_BUTTON.MIDDLE ? MOUSE_BUTTON.MIDDLE :\n (event.buttons & MOUSE_BUTTON.RIGHT) === MOUSE_BUTTON.RIGHT ? MOUSE_BUTTON.RIGHT :\n null;\n if (mouseButton !== null) {\n const zombiePointer = this._findPointerByMouseButton(mouseButton);\n zombiePointer && this._disposePointer(zombiePointer);\n }\n if ((event.buttons & MOUSE_BUTTON.LEFT) === MOUSE_BUTTON.LEFT && this._lockedPointer)\n return;\n const pointer = {\n pointerId: event.pointerId,\n clientX: event.clientX,\n clientY: event.clientY,\n deltaX: 0,\n deltaY: 0,\n mouseButton,\n };\n this._activePointers.push(pointer);\n // eslint-disable-next-line no-undef\n this._domElement.ownerDocument.removeEventListener('pointermove', onPointerMove, { passive: false });\n this._domElement.ownerDocument.removeEventListener('pointerup', onPointerUp);\n this._domElement.ownerDocument.addEventListener('pointermove', onPointerMove, { passive: false });\n this._domElement.ownerDocument.addEventListener('pointerup', onPointerUp);\n this._isDragging = true;\n startDragging(event);\n };\n const onPointerMove = (event) => {\n if (event.cancelable)\n event.preventDefault();\n const pointerId = event.pointerId;\n const pointer = this._lockedPointer || this._findPointerById(pointerId);\n if (!pointer)\n return;\n pointer.clientX = event.clientX;\n pointer.clientY = event.clientY;\n pointer.deltaX = event.movementX;\n pointer.deltaY = event.movementY;\n this._state = 0;\n if (event.pointerType === 'touch') {\n switch (this._activePointers.length) {\n case 1:\n this._state = this.touches.one;\n break;\n case 2:\n this._state = this.touches.two;\n break;\n case 3:\n this._state = this.touches.three;\n break;\n }\n }\n else {\n if ((!this._isDragging && this._lockedPointer) ||\n this._isDragging && (event.buttons & MOUSE_BUTTON.LEFT) === MOUSE_BUTTON.LEFT) {\n this._state = this._state | this.mouseButtons.left;\n }\n if (this._isDragging && (event.buttons & MOUSE_BUTTON.MIDDLE) === MOUSE_BUTTON.MIDDLE) {\n this._state = this._state | this.mouseButtons.middle;\n }\n if (this._isDragging && (event.buttons & MOUSE_BUTTON.RIGHT) === MOUSE_BUTTON.RIGHT) {\n this._state = this._state | this.mouseButtons.right;\n }\n }\n dragging();\n };\n const onPointerUp = (event) => {\n const pointer = this._findPointerById(event.pointerId);\n if (pointer && pointer === this._lockedPointer)\n return;\n pointer && this._disposePointer(pointer);\n if (event.pointerType === 'touch') {\n switch (this._activePointers.length) {\n case 0:\n this._state = ACTION.NONE;\n break;\n case 1:\n this._state = this.touches.one;\n break;\n case 2:\n this._state = this.touches.two;\n break;\n case 3:\n this._state = this.touches.three;\n break;\n }\n }\n else {\n this._state = ACTION.NONE;\n }\n endDragging();\n };\n let lastScrollTimeStamp = -1;\n const onMouseWheel = (event) => {\n if (!this._domElement)\n return;\n if (!this._enabled || this.mouseButtons.wheel === ACTION.NONE)\n return;\n if (this._interactiveArea.left !== 0 ||\n this._interactiveArea.top !== 0 ||\n this._interactiveArea.width !== 1 ||\n this._interactiveArea.height !== 1) {\n const elRect = this._domElement.getBoundingClientRect();\n const left = event.clientX / elRect.width;\n const top = event.clientY / elRect.height;\n // check if the interactiveArea contains the drag start position.\n if (left < this._interactiveArea.left ||\n left > this._interactiveArea.right ||\n top < this._interactiveArea.top ||\n top > this._interactiveArea.bottom)\n return;\n }\n event.preventDefault();\n if (this.dollyToCursor ||\n this.mouseButtons.wheel === ACTION.ROTATE ||\n this.mouseButtons.wheel === ACTION.TRUCK) {\n const now = performance.now();\n // only need to fire this at scroll start.\n if (lastScrollTimeStamp - now < 1000)\n this._getClientRect(this._elementRect);\n lastScrollTimeStamp = now;\n }\n // Ref: https://github.com/cedricpinson/osgjs/blob/00e5a7e9d9206c06fdde0436e1d62ab7cb5ce853/sources/osgViewer/input/source/InputSourceMouse.js#L89-L103\n const deltaYFactor = isMac ? -1 : -3;\n // Checks event.ctrlKey to detect multi-touch gestures on a trackpad.\n const delta = (event.deltaMode === 1 && !event.ctrlKey) ? event.deltaY / deltaYFactor : event.deltaY / (deltaYFactor * 10);\n const x = this.dollyToCursor ? (event.clientX - this._elementRect.x) / this._elementRect.width * 2 - 1 : 0;\n const y = this.dollyToCursor ? (event.clientY - this._elementRect.y) / this._elementRect.height * -2 + 1 : 0;\n // event.ctrlKey is set to true on macOS trackpad pinch gesture. In this case, always zoom.\n const controlMode = event.ctrlKey ? ACTION.ZOOM : this.mouseButtons.wheel;\n switch (controlMode) {\n case ACTION.ROTATE: {\n this._rotateInternal(event.deltaX, event.deltaY);\n this._isUserControllingRotate = true;\n break;\n }\n case ACTION.TRUCK: {\n this._truckInternal(event.deltaX, event.deltaY, false, false);\n this._isUserControllingTruck = true;\n break;\n }\n case ACTION.SCREEN_PAN: {\n this._truckInternal(event.deltaX, event.deltaY, false, true);\n this._isUserControllingTruck = true;\n break;\n }\n case ACTION.OFFSET: {\n this._truckInternal(event.deltaX, event.deltaY, true, false);\n this._isUserControllingOffset = true;\n break;\n }\n case ACTION.DOLLY: {\n this._dollyInternal(-delta, x, y);\n this._isUserControllingDolly = true;\n break;\n }\n case ACTION.ZOOM: {\n this._zoomInternal(-delta, x, y);\n this._isUserControllingZoom = true;\n break;\n }\n }\n this.dispatchEvent({ type: 'control' });\n };\n const onContextMenu = (event) => {\n if (!this._domElement || !this._enabled)\n return;\n // contextmenu event is fired right after pointerdown\n // remove attached handlers and active pointer, if interrupted by contextmenu.\n if (this.mouseButtons.right === CameraControls.ACTION.NONE) {\n const pointerId = event instanceof PointerEvent ? event.pointerId : 0;\n const pointer = this._findPointerById(pointerId);\n pointer && this._disposePointer(pointer);\n // eslint-disable-next-line no-undef\n this._domElement.ownerDocument.removeEventListener('pointermove', onPointerMove, { passive: false });\n this._domElement.ownerDocument.removeEventListener('pointerup', onPointerUp);\n return;\n }\n event.preventDefault();\n };\n const startDragging = (event) => {\n if (!this._enabled)\n return;\n extractClientCoordFromEvent(this._activePointers, _v2);\n this._getClientRect(this._elementRect);\n dragStartPosition.copy(_v2);\n lastDragPosition.copy(_v2);\n const isMultiTouch = this._activePointers.length >= 2;\n if (isMultiTouch) {\n // 2 finger pinch\n const dx = _v2.x - this._activePointers[1].clientX;\n const dy = _v2.y - this._activePointers[1].clientY;\n const distance = Math.sqrt(dx * dx + dy * dy);\n dollyStart.set(0, distance);\n // center coords of 2 finger truck\n const x = (this._activePointers[0].clientX + this._activePointers[1].clientX) * 0.5;\n const y = (this._activePointers[0].clientY + this._activePointers[1].clientY) * 0.5;\n lastDragPosition.set(x, y);\n }\n this._state = 0;\n if (!event) {\n if (this._lockedPointer)\n this._state = this._state | this.mouseButtons.left;\n }\n else if ('pointerType' in event && event.pointerType === 'touch') {\n switch (this._activePointers.length) {\n case 1:\n this._state = this.touches.one;\n break;\n case 2:\n this._state = this.touches.two;\n break;\n case 3:\n this._state = this.touches.three;\n break;\n }\n }\n else {\n if (!this._lockedPointer && (event.buttons & MOUSE_BUTTON.LEFT) === MOUSE_BUTTON.LEFT) {\n this._state = this._state | this.mouseButtons.left;\n }\n if ((event.buttons & MOUSE_BUTTON.MIDDLE) === MOUSE_BUTTON.MIDDLE) {\n this._state = this._state | this.mouseButtons.middle;\n }\n if ((event.buttons & MOUSE_BUTTON.RIGHT) === MOUSE_BUTTON.RIGHT) {\n this._state = this._state | this.mouseButtons.right;\n }\n }\n // stop current movement on drag start\n // - rotate\n if ((this._state & ACTION.ROTATE) === ACTION.ROTATE ||\n (this._state & ACTION.TOUCH_ROTATE) === ACTION.TOUCH_ROTATE ||\n (this._state & ACTION.TOUCH_DOLLY_ROTATE) === ACTION.TOUCH_DOLLY_ROTATE ||\n (this._state & ACTION.TOUCH_ZOOM_ROTATE) === ACTION.TOUCH_ZOOM_ROTATE) {\n this._sphericalEnd.theta = this._spherical.theta;\n this._sphericalEnd.phi = this._spherical.phi;\n this._thetaVelocity.value = 0;\n this._phiVelocity.value = 0;\n }\n // - truck and screen-pan\n if ((this._state & ACTION.TRUCK) === ACTION.TRUCK ||\n (this._state & ACTION.SCREEN_PAN) === ACTION.SCREEN_PAN ||\n (this._state & ACTION.TOUCH_TRUCK) === ACTION.TOUCH_TRUCK ||\n (this._state & ACTION.TOUCH_SCREEN_PAN) === ACTION.TOUCH_SCREEN_PAN ||\n (this._state & ACTION.TOUCH_DOLLY_TRUCK) === ACTION.TOUCH_DOLLY_TRUCK ||\n (this._state & ACTION.TOUCH_DOLLY_SCREEN_PAN) === ACTION.TOUCH_DOLLY_SCREEN_PAN ||\n (this._state & ACTION.TOUCH_ZOOM_TRUCK) === ACTION.TOUCH_ZOOM_TRUCK ||\n (this._state & ACTION.TOUCH_ZOOM_SCREEN_PAN) === ACTION.TOUCH_DOLLY_SCREEN_PAN) {\n this._targetEnd.copy(this._target);\n this._targetVelocity.set(0, 0, 0);\n }\n // - dolly\n if ((this._state & ACTION.DOLLY) === ACTION.DOLLY ||\n (this._state & ACTION.TOUCH_DOLLY) === ACTION.TOUCH_DOLLY ||\n (this._state & ACTION.TOUCH_DOLLY_TRUCK) === ACTION.TOUCH_DOLLY_TRUCK ||\n (this._state & ACTION.TOUCH_DOLLY_SCREEN_PAN) === ACTION.TOUCH_DOLLY_SCREEN_PAN ||\n (this._state & ACTION.TOUCH_DOLLY_OFFSET) === ACTION.TOUCH_DOLLY_OFFSET ||\n (this._state & ACTION.TOUCH_DOLLY_ROTATE) === ACTION.TOUCH_DOLLY_ROTATE) {\n this._sphericalEnd.radius = this._spherical.radius;\n this._radiusVelocity.value = 0;\n }\n // - zoom\n if ((this._state & ACTION.ZOOM) === ACTION.ZOOM ||\n (this._state & ACTION.TOUCH_ZOOM) === ACTION.TOUCH_ZOOM ||\n (this._state & ACTION.TOUCH_ZOOM_TRUCK) === ACTION.TOUCH_ZOOM_TRUCK ||\n (this._state & ACTION.TOUCH_ZOOM_SCREEN_PAN) === ACTION.TOUCH_ZOOM_SCREEN_PAN ||\n (this._state & ACTION.TOUCH_ZOOM_OFFSET) === ACTION.TOUCH_ZOOM_OFFSET ||\n (this._state & ACTION.TOUCH_ZOOM_ROTATE) === ACTION.TOUCH_ZOOM_ROTATE) {\n this._zoomEnd = this._zoom;\n this._zoomVelocity.value = 0;\n }\n // - offset\n if ((this._state & ACTION.OFFSET) === ACTION.OFFSET ||\n (this._state & ACTION.TOUCH_OFFSET) === ACTION.TOUCH_OFFSET ||\n (this._state & ACTION.TOUCH_DOLLY_OFFSET) === ACTION.TOUCH_DOLLY_OFFSET ||\n (this._state & ACTION.TOUCH_ZOOM_OFFSET) === ACTION.TOUCH_ZOOM_OFFSET) {\n this._focalOffsetEnd.copy(this._focalOffset);\n this._focalOffsetVelocity.set(0, 0, 0);\n }\n this.dispatchEvent({ type: 'controlstart' });\n };\n const dragging = () => {\n if (!this._enabled || !this._dragNeedsUpdate)\n return;\n this._dragNeedsUpdate = false;\n extractClientCoordFromEvent(this._activePointers, _v2);\n // When pointer lock is enabled clientX, clientY, screenX, and screenY remain 0.\n // If pointer lock is enabled, use the Delta directory, and assume active-pointer is not multiple.\n const isPointerLockActive = this._domElement && this._domElement.ownerDocument.pointerLockElement === this._domElement;\n const lockedPointer = isPointerLockActive ? this._lockedPointer || this._activePointers[0] : null;\n const deltaX = lockedPointer ? -lockedPointer.deltaX : lastDragPosition.x - _v2.x;\n const deltaY = lockedPointer ? -lockedPointer.deltaY : lastDragPosition.y - _v2.y;\n lastDragPosition.copy(_v2);\n // rotate\n if ((this._state & ACTION.ROTATE) === ACTION.ROTATE ||\n (this._state & ACTION.TOUCH_ROTATE) === ACTION.TOUCH_ROTATE ||\n (this._state & ACTION.TOUCH_DOLLY_ROTATE) === ACTION.TOUCH_DOLLY_ROTATE ||\n (this._state & ACTION.TOUCH_ZOOM_ROTATE) === ACTION.TOUCH_ZOOM_ROTATE) {\n this._rotateInternal(deltaX, deltaY);\n this._isUserControllingRotate = true;\n }\n // mouse dolly or zoom\n if ((this._state & ACTION.DOLLY) === ACTION.DOLLY ||\n (this._state & ACTION.ZOOM) === ACTION.ZOOM) {\n const dollyX = this.dollyToCursor ? (dragStartPosition.x - this._elementRect.x) / this._elementRect.width * 2 - 1 : 0;\n const dollyY = this.dollyToCursor ? (dragStartPosition.y - this._elementRect.y) / this._elementRect.height * -2 + 1 : 0;\n const dollyDirection = this.dollyDragInverted ? -1 : 1;\n if ((this._state & ACTION.DOLLY) === ACTION.DOLLY) {\n this._dollyInternal(dollyDirection * deltaY * TOUCH_DOLLY_FACTOR, dollyX, dollyY);\n this._isUserControllingDolly = true;\n }\n else {\n this._zoomInternal(dollyDirection * deltaY * TOUCH_DOLLY_FACTOR, dollyX, dollyY);\n this._isUserControllingZoom = true;\n }\n }\n // touch dolly or zoom\n if ((this._state & ACTION.TOUCH_DOLLY) === ACTION.TOUCH_DOLLY ||\n (this._state & ACTION.TOUCH_ZOOM) === ACTION.TOUCH_ZOOM ||\n (this._state & ACTION.TOUCH_DOLLY_TRUCK) === ACTION.TOUCH_DOLLY_TRUCK ||\n (this._state & ACTION.TOUCH_ZOOM_TRUCK) === ACTION.TOUCH_ZOOM_TRUCK ||\n (this._state & ACTION.TOUCH_DOLLY_SCREEN_PAN) === ACTION.TOUCH_DOLLY_SCREEN_PAN ||\n (this._state & ACTION.TOUCH_ZOOM_SCREEN_PAN) === ACTION.TOUCH_ZOOM_SCREEN_PAN ||\n (this._state & ACTION.TOUCH_DOLLY_OFFSET) === ACTION.TOUCH_DOLLY_OFFSET ||\n (this._state & ACTION.TOUCH_ZOOM_OFFSET) === ACTION.TOUCH_ZOOM_OFFSET ||\n (this._state & ACTION.TOUCH_DOLLY_ROTATE) === ACTION.TOUCH_DOLLY_ROTATE ||\n (this._state & ACTION.TOUCH_ZOOM_ROTATE) === ACTION.TOUCH_ZOOM_ROTATE) {\n const dx = _v2.x - this._activePointers[1].clientX;\n const dy = _v2.y - this._activePointers[1].clientY;\n const distance = Math.sqrt(dx * dx + dy * dy);\n const dollyDelta = dollyStart.y - distance;\n dollyStart.set(0, distance);\n const dollyX = this.dollyToCursor ? (lastDragPosition.x - this._elementRect.x) / this._elementRect.width * 2 - 1 : 0;\n const dollyY = this.dollyToCursor ? (lastDragPosition.y - this._elementRect.y) / this._elementRect.height * -2 + 1 : 0;\n if ((this._state & ACTION.TOUCH_DOLLY) === ACTION.TOUCH_DOLLY ||\n (this._state & ACTION.TOUCH_DOLLY_ROTATE) === ACTION.TOUCH_DOLLY_ROTATE ||\n (this._state & ACTION.TOUCH_DOLLY_TRUCK) === ACTION.TOUCH_DOLLY_TRUCK ||\n (this._state & ACTION.TOUCH_DOLLY_SCREEN_PAN) === ACTION.TOUCH_DOLLY_SCREEN_PAN ||\n (this._state & ACTION.TOUCH_DOLLY_OFFSET) === ACTION.TOUCH_DOLLY_OFFSET) {\n this._dollyInternal(dollyDelta * TOUCH_DOLLY_FACTOR, dollyX, dollyY);\n this._isUserControllingDolly = true;\n }\n else {\n this._zoomInternal(dollyDelta * TOUCH_DOLLY_FACTOR, dollyX, dollyY);\n this._isUserControllingZoom = true;\n }\n }\n // truck\n if ((this._state & ACTION.TRUCK) === ACTION.TRUCK ||\n (this._state & ACTION.TOUCH_TRUCK) === ACTION.TOUCH_TRUCK ||\n (this._state & ACTION.TOUCH_DOLLY_TRUCK) === ACTION.TOUCH_DOLLY_TRUCK ||\n (this._state & ACTION.TOUCH_ZOOM_TRUCK) === ACTION.TOUCH_ZOOM_TRUCK) {\n this._truckInternal(deltaX, deltaY, false, false);\n this._isUserControllingTruck = true;\n }\n // screen-pan\n if ((this._state & ACTION.SCREEN_PAN) === ACTION.SCREEN_PAN ||\n (this._state & ACTION.TOUCH_SCREEN_PAN) === ACTION.TOUCH_SCREEN_PAN ||\n (this._state & ACTION.TOUCH_DOLLY_SCREEN_PAN) === ACTION.TOUCH_DOLLY_SCREEN_PAN ||\n (this._state & ACTION.TOUCH_ZOOM_SCREEN_PAN) === ACTION.TOUCH_ZOOM_SCREEN_PAN) {\n this._truckInternal(deltaX, deltaY, false, true);\n this._isUserControllingTruck = true;\n }\n // offset\n if ((this._state & ACTION.OFFSET) === ACTION.OFFSET ||\n (this._state & ACTION.TOUCH_OFFSET) === ACTION.TOUCH_OFFSET ||\n (this._state & ACTION.TOUCH_DOLLY_OFFSET) === ACTION.TOUCH_DOLLY_OFFSET ||\n (this._state & ACTION.TOUCH_ZOOM_OFFSET) === ACTION.TOUCH_ZOOM_OFFSET) {\n this._truckInternal(deltaX, deltaY, true, false);\n this._isUserControllingOffset = true;\n }\n this.dispatchEvent({ type: 'control' });\n };\n const endDragging = () => {\n extractClientCoordFromEvent(this._activePointers, _v2);\n lastDragPosition.copy(_v2);\n this._dragNeedsUpdate = false;\n if (this._activePointers.length === 0 ||\n (this._activePointers.length === 1 && this._activePointers[0] === this._lockedPointer)) {\n this._isDragging = false;\n }\n if (this._activePointers.length === 0 && this._domElement) {\n // eslint-disable-next-line no-undef\n this._domElement.ownerDocument.removeEventListener('pointermove', onPointerMove, { passive: false });\n this._domElement.ownerDocument.removeEventListener('pointerup', onPointerUp);\n this.dispatchEvent({ type: 'controlend' });\n }\n };\n this.lockPointer = () => {\n if (!this._enabled || !this._domElement)\n return;\n this.cancel();\n // Element.requestPointerLock is allowed to happen without any pointer active - create a faux one for compatibility with controls\n this._lockedPointer = {\n pointerId: -1,\n clientX: 0,\n clientY: 0,\n deltaX: 0,\n deltaY: 0,\n mouseButton: null,\n };\n this._activePointers.push(this._lockedPointer);\n // eslint-disable-next-line no-undef\n this._domElement.ownerDocument.removeEventListener('pointermove', onPointerMove, { passive: false });\n this._domElement.ownerDocument.removeEventListener('pointerup', onPointerUp);\n this._domElement.requestPointerLock();\n this._domElement.ownerDocument.addEventListener('pointerlockchange', onPointerLockChange);\n this._domElement.ownerDocument.addEventListener('pointerlockerror', onPointerLockError);\n this._domElement.ownerDocument.addEventListener('pointermove', onPointerMove, { passive: false });\n this._domElement.ownerDocument.addEventListener('pointerup', onPointerUp);\n startDragging();\n };\n this.unlockPointer = () => {\n if (this._lockedPointer !== null) {\n this._disposePointer(this._lockedPointer);\n this._lockedPointer = null;\n }\n this._domElement?.ownerDocument.exitPointerLock();\n this._domElement?.ownerDocument.removeEventListener('pointerlockchange', onPointerLockChange);\n this._domElement?.ownerDocument.removeEventListener('pointerlockerror', onPointerLockError);\n this.cancel();\n };\n const onPointerLockChange = () => {\n const isPointerLockActive = this._domElement && this._domElement.ownerDocument.pointerLockElement === this._domElement;\n if (!isPointerLockActive)\n this.unlockPointer();\n };\n const onPointerLockError = () => {\n this.unlockPointer();\n };\n this._addAllEventListeners = (domElement) => {\n this._domElement = domElement;\n this._domElement.style.touchAction = 'none';\n this._domElement.style.userSelect = 'none';\n this._domElement.style.webkitUserSelect = 'none';\n this._domElement.addEventListener('pointerdown', onPointerDown);\n this._domElement.addEventListener('pointercancel', onPointerUp);\n this._domElement.addEventListener('wheel', onMouseWheel, { passive: false });\n this._domElement.addEventListener('contextmenu', onContextMenu);\n };\n this._removeAllEventListeners = () => {\n if (!this._domElement)\n return;\n this._domElement.style.touchAction = '';\n this._domElement.style.userSelect = '';\n this._domElement.style.webkitUserSelect = '';\n this._domElement.removeEventListener('pointerdown', onPointerDown);\n this._domElement.removeEventListener('pointercancel', onPointerUp);\n // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener#matching_event_listeners_for_removal\n // > it's probably wise to use the same values used for the call to `addEventListener()` when calling `removeEventListener()`\n // see https://github.com/microsoft/TypeScript/issues/32912#issuecomment-522142969\n // eslint-disable-next-line no-undef\n this._domElement.removeEventListener('wheel', onMouseWheel, { passive: false });\n this._domElement.removeEventListener('contextmenu', onContextMenu);\n // eslint-disable-next-line no-undef\n this._domElement.ownerDocument.removeEventListener('pointermove', onPointerMove, { passive: false });\n this._domElement.ownerDocument.removeEventListener('pointerup', onPointerUp);\n this._domElement.ownerDocument.removeEventListener('pointerlockchange', onPointerLockChange);\n this._domElement.ownerDocument.removeEventListener('pointerlockerror', onPointerLockError);\n };\n this.cancel = () => {\n if (this._state === ACTION.NONE)\n return;\n this._state = ACTION.NONE;\n this._activePointers.length = 0;\n endDragging();\n };\n if (domElement)\n this.connect(domElement);\n this.update(0);\n }\n /**\n * The camera to be controlled\n * @category Properties\n */\n get camera() {\n return this._camera;\n }\n set camera(camera) {\n this._camera = camera;\n this.updateCameraUp();\n this._camera.updateProjectionMatrix();\n this._updateNearPlaneCorners();\n this._needsUpdate = true;\n }\n /**\n * Whether or not the controls are enabled.\n * `false` to disable user dragging/touch-move, but all methods works.\n * @category Properties\n */\n get enabled() {\n return this._enabled;\n }\n set enabled(enabled) {\n this._enabled = enabled;\n if (!this._domElement)\n return;\n if (enabled) {\n this._domElement.style.touchAction = 'none';\n this._domElement.style.userSelect = 'none';\n this._domElement.style.webkitUserSelect = 'none';\n }\n else {\n this.cancel();\n this._domElement.style.touchAction = '';\n this._domElement.style.userSelect = '';\n this._domElement.style.webkitUserSelect = '';\n }\n }\n /**\n * Returns `true` if the controls are active updating.\n * readonly value.\n * @category Properties\n */\n get active() {\n return !this._hasRested;\n }\n /**\n * Getter for the current `ACTION`.\n * readonly value.\n * @category Properties\n */\n get currentAction() {\n return this._state;\n }\n /**\n * get/set Current distance.\n * @category Properties\n */\n get distance() {\n return this._spherical.radius;\n }\n set distance(distance) {\n if (this._spherical.radius === distance &&\n this._sphericalEnd.radius === distance)\n return;\n this._spherical.radius = distance;\n this._sphericalEnd.radius = distance;\n this._needsUpdate = true;\n }\n // horizontal angle\n /**\n * get/set the azimuth angle (horizontal) in radians.\n * Every 360 degrees turn is added to `.azimuthAngle` value, which is accumulative.\n * @category Properties\n */\n get azimuthAngle() {\n return this._spherical.theta;\n }\n set azimuthAngle(azimuthAngle) {\n if (this._spherical.theta === azimuthAngle &&\n this._sphericalEnd.theta === azimuthAngle)\n return;\n this._spherical.theta = azimuthAngle;\n this._sphericalEnd.theta = azimuthAngle;\n this._needsUpdate = true;\n }\n // vertical angle\n /**\n * get/set the polar angle (vertical) in radians.\n * @category Properties\n */\n get polarAngle() {\n return this._spherical.phi;\n }\n set polarAngle(polarAngle) {\n if (this._spherical.phi === polarAngle &&\n this._sphericalEnd.phi === polarAngle)\n return;\n this._spherical.phi = polarAngle;\n this._sphericalEnd.phi = polarAngle;\n this._needsUpdate = true;\n }\n /**\n * Whether camera position should be enclosed in the boundary or not.\n * @category Properties\n */\n get boundaryEnclosesCamera() {\n return this._boundaryEnclosesCamera;\n }\n set boundaryEnclosesCamera(boundaryEnclosesCamera) {\n this._boundaryEnclosesCamera = boundaryEnclosesCamera;\n this._needsUpdate = true;\n }\n /**\n * Set drag-start, touches and wheel enable area in the domElement.\n * each values are between `0` and `1` inclusive, where `0` is left/top and `1` is right/bottom of the screen.\n * e.g. `{ x: 0, y: 0, width: 1, height: 1 }` for entire area.\n * @category Properties\n */\n set interactiveArea(interactiveArea) {\n this._interactiveArea.width = clamp(interactiveArea.width, 0, 1);\n this._interactiveArea.height = clamp(interactiveArea.height, 0, 1);\n this._interactiveArea.x = clamp(interactiveArea.x, 0, 1 - this._interactiveArea.width);\n this._interactiveArea.y = clamp(interactiveArea.y, 0, 1 - this._interactiveArea.height);\n }\n /**\n * Adds the specified event listener.\n * Applicable event types (which is `K`) are:\n * | Event name | Timing |\n * | ------------------- | ------ |\n * | `'controlstart'` | When the user starts to control the camera via mouse / touches. ¹ |\n * | `'control'` | When the user controls the camera (dragging). |\n * | `'controlend'` | When the user ends to control the camera. ¹ |\n * | `'transitionstart'` | When any kind of transition starts, either user control or using a method with `enableTransition = true` |\n * | `'update'` | When the camera position is updated. |\n * | `'wake'` | When the camera starts moving. |\n * | `'rest'` | When the camera movement is below `.restThreshold` ². |\n * | `'sleep'` | When the camera end moving. |\n *\n * 1. `mouseButtons.wheel` (Mouse wheel control) does not emit `'controlstart'` and `'controlend'`. `mouseButtons.wheel` uses scroll-event internally, and scroll-event happens intermittently. That means \"start\" and \"end\" cannot be detected.\n * 2. Due to damping, `sleep` will usually fire a few seconds after the camera _appears_ to have stopped moving. If you want to do something (e.g. enable UI, perform another transition) at the point when the camera has stopped, you probably want the `rest` event. This can be fine tuned using the `.restThreshold` parameter. See the [Rest and Sleep Example](https://yomotsu.github.io/camera-controls/examples/rest-and-sleep.html).\n *\n * e.g.\n * ```\n * cameraControl.addEventListener( 'controlstart', myCallbackFunction );\n * ```\n * @param type event name\n * @param listener handler function\n * @category Methods\n */\n addEventListener(type, listener) {\n super.addEventListener(type, listener);\n }\n /**\n * Removes the specified event listener\n * e.g.\n * ```\n * cameraControl.addEventListener( 'controlstart', myCallbackFunction );\n * ```\n * @param type event name\n * @param listener handler function\n * @category Methods\n */\n removeEventListener(type, listener) {\n super.removeEventListener(type, listener);\n }\n /**\n * Rotate azimuthal angle(horizontal) and polar angle(vertical).\n * Every value is added to the current value.\n * @param azimuthAngle Azimuth rotate angle. In radian.\n * @param polarAngle Polar rotate angle. In radian.\n * @param enableTransition Whether to move smoothly or immediately\n * @category Methods\n */\n rotate(azimuthAngle, polarAngle, enableTransition = false) {\n return this.rotateTo(this._sphericalEnd.theta + azimuthAngle, this._sphericalEnd.phi + polarAngle, enableTransition);\n }\n /**\n * Rotate azimuthal angle(horizontal) to the given angle and keep the same polar angle(vertical) target.\n *\n * e.g.\n * ```\n * cameraControls.rotateAzimuthTo( 30 * THREE.MathUtils.DEG2RAD, true );\n * ```\n * @param azimuthAngle Azimuth rotate angle. In radian.\n * @param enableTransition Whether to move smoothly or immediately\n * @category Methods\n */\n rotateAzimuthTo(azimuthAngle, enableTransition = false) {\n return this.rotateTo(azimuthAngle, this._sphericalEnd.phi, enableTransition);\n }\n /**\n * Rotate polar angle(vertical) to the given angle and keep the same azimuthal angle(horizontal) target.\n *\n * e.g.\n * ```\n * cameraControls.rotatePolarTo( 30 * THREE.MathUtils.DEG2RAD, true );\n * ```\n * @param polarAngle Polar rotate angle. In radian.\n * @param enableTransition Whether to move smoothly or immediately\n * @category Methods\n */\n rotatePolarTo(polarAngle, enableTransition = false) {\n return this.rotateTo(this._sphericalEnd.theta, polarAngle, enableTransition);\n }\n /**\n * Rotate azimuthal angle(horizontal) and polar angle(vertical) to the given angle.\n * Camera view will rotate over the orbit pivot absolutely:\n *\n * azimuthAngle\n * ```\n * 0º\n * \\\n * 90º -----+----- -90º\n * \\\n * 180º\n * ```\n * | direction | angle |\n * | --------- | ---------------------- |\n * | front | 0º |\n * | left | 90º (`Math.PI / 2`) |\n * | right | -90º (`- Math.PI / 2`) |\n * | back | 180º (`Math.PI`) |\n *\n * polarAngle\n * ```\n * 180º\n * |\n * 90º\n * |\n * 0º\n * ```\n * | direction | angle |\n * | -------------------- | ---------------------- |\n * | top/sky | 180º (`Math.PI`) |\n * | horizontal from view | 90º (`Math.PI / 2`) |\n * | bottom/floor | 0º |\n *\n * @param azimuthAngle Azimuth rotate angle to. In radian.\n * @param polarAngle Polar rotate angle to. In radian.\n * @param enableTransition Whether to move smoothly or immediately\n * @category Methods\n */\n rotateTo(azimuthAngle, polarAngle, enableTransition = false) {\n this._isUserControllingRotate = false;\n const theta = clamp(azimuthAngle, this.minAzimuthAngle, this.maxAzimuthAngle);\n const phi = clamp(polarAngle, this.minPolarAngle, this.maxPolarAngle);\n this._sphericalEnd.theta = theta;\n this._sphericalEnd.phi = phi;\n this._sphericalEnd.makeSafe();\n this._needsUpdate = true;\n if (!enableTransition) {\n this._spherical.theta = this._sphericalEnd.theta;\n this._spherical.phi = this._sphericalEnd.phi;\n }\n const resolveImmediately = !enableTransition ||\n approxEquals(this._spherical.theta, this._sphericalEnd.theta, this.restThreshold) &&\n approxEquals(this._spherical.phi, this._sphericalEnd.phi, this.restThreshold);\n return this._createOnRestPromise(resolveImmediately);\n }\n /**\n * Dolly in/out camera position.\n * @param distance Distance of dollyIn. Negative number for dollyOut.\n * @param enableTransition Whether to move smoothly or immediately.\n * @category Methods\n */\n dolly(distance, enableTransition = false) {\n return this.dollyTo(this._sphericalEnd.radius - distance, enableTransition);\n }\n /**\n * Dolly in/out camera position to given distance.\n * @param distance Distance of dolly.\n * @param enableTransition Whether to move smoothly or immediately.\n * @category Methods\n */\n dollyTo(distance, enableTransition = false) {\n this._isUserControllingDolly = false;\n this._lastDollyDirection = DOLLY_DIRECTION.NONE;\n this._changedDolly = 0;\n return this._dollyToNoClamp(clamp(distance, this.minDistance, this.maxDistance), enableTransition);\n }\n _dollyToNoClamp(distance, enableTransition = false) {\n const lastRadius = this._sphericalEnd.radius;\n const hasCollider = this.colliderMeshes.length >= 1;\n if (hasCollider) {\n const maxDistanceByCollisionTest = this._collisionTest();\n const isCollided = approxEquals(maxDistanceByCollisionTest, this._spherical.radius);\n const isDollyIn = lastRadius > distance;\n if (!isDollyIn && isCollided)\n return Promise.resolve();\n this._sphericalEnd.radius = Math.min(distance, maxDistanceByCollisionTest);\n }\n else {\n this._sphericalEnd.radius = distance;\n }\n this._needsUpdate = true;\n if (!enableTransition) {\n this._spherical.radius = this._sphericalEnd.radius;\n }\n const resolveImmediately = !enableTransition || approxEquals(this._spherical.radius, this._sphericalEnd.radius, this.restThreshold);\n return this._createOnRestPromise(resolveImmediately);\n }\n /**\n * Dolly in, but does not change the distance between the target and the camera, and moves the target position instead.\n * Specify a negative value for dolly out.\n * @param distance Distance of dolly.\n * @param enableTransition Whether to move smoothly or immediately.\n * @category Methods\n */\n dollyInFixed(distance, enableTransition = false) {\n this._targetEnd.add(this._getCameraDirection(_cameraDirection).multiplyScalar(distance));\n if (!enableTransition) {\n this._target.copy(this._targetEnd);\n }\n const resolveImmediately = !enableTransition ||\n approxEquals(this._target.x, this._targetEnd.x, this.restThreshold) &&\n approxEquals(this._target.y, this._targetEnd.y, this.restThreshold) &&\n approxEquals(this._target.z, this._targetEnd.z, this.restThreshold);\n return this._createOnRestPromise(resolveImmediately);\n }\n /**\n * Zoom in/out camera. The value is added to camera zoom.\n * Limits set with `.minZoom` and `.maxZoom`\n * @param zoomStep zoom scale\n * @param enableTransition Whether to move smoothly or immediately\n * @category Methods\n */\n zoom(zoomStep, enableTransition = false) {\n return this.zoomTo(this._zoomEnd + zoomStep, enableTransition);\n }\n /**\n * Zoom in/out camera to given scale. The value overwrites camera zoom.\n * Limits set with .minZoom and .maxZoom\n * @param zoom\n * @param enableTransition\n * @category Methods\n */\n zoomTo(zoom, enableTransition = false) {\n this._isUserControllingZoom = false;\n this._zoomEnd = clamp(zoom, this.minZoom, this.maxZoom);\n this._needsUpdate = true;\n if (!enableTransition) {\n this._zoom = this._zoomEnd;\n }\n const resolveImmediately = !enableTransition || approxEquals(this._zoom, this._zoomEnd, this.restThreshold);\n this._changedZoom = 0;\n return this._createOnRestPromise(resolveImmediately);\n }\n /**\n * @deprecated `pan()` has been renamed to `truck()`\n * @category Methods\n */\n pan(x, y, enableTransition = false) {\n console.warn('`pan` has been renamed to `truck`');\n return this.truck(x, y, enableTransition);\n }\n /**\n * Truck and pedestal camera using current azimuthal angle\n * @param x Horizontal translate amount\n * @param y Vertical translate amount\n * @param enableTransition Whether to move smoothly or immediately\n * @category Methods\n */\n truck(x, y, enableTransition = false) {\n this._camera.updateMatrix();\n _xColumn.setFromMatrixColumn(this._camera.matrix, 0);\n _yColumn.setFromMatrixColumn(this._camera.matrix, 1);\n _xColumn.multiplyScalar(x);\n _yColumn.multiplyScalar(-y);\n const offset = _v3A.copy(_xColumn).add(_yColumn);\n const to = _v3B.copy(this._targetEnd).add(offset);\n return this.moveTo(to.x, to.y, to.z, enableTransition);\n }\n /**\n * Move forward / backward.\n * @param distance Amount to move forward / backward. Negative value to move backward\n * @param enableTransition Whether to move smoothly or immediately\n * @category Methods\n */\n forward(distance, enableTransition = false) {\n _v3A.setFromMatrixColumn(this._camera.matrix, 0);\n _v3A.crossVectors(this._camera.up, _v3A);\n _v3A.multiplyScalar(distance);\n const to = _v3B.copy(this._targetEnd).add(_v3A);\n return this.moveTo(to.x, to.y, to.z, enableTransition);\n }\n /**\n * Move up / down.\n * @param height Amount to move up / down. Negative value to move down\n * @param enableTransition Whether to move smoothly or immediately\n * @category Methods\n */\n elevate(height, enableTransition = false) {\n _v3A.copy(this._camera.up).multiplyScalar(height);\n return this.moveTo(this._targetEnd.x + _v3A.x, this._targetEnd.y + _v3A.y, this._targetEnd.z + _v3A.z, enableTransition);\n }\n /**\n * Move target position to given point.\n * @param x x coord to move center position\n * @param y y coord to move center position\n * @param z z coord to move center position\n * @param enableTransition Whether to move smoothly or immediately\n * @category Methods\n */\n moveTo(x, y, z, enableTransition = false) {\n this._isUserControllingTruck = false;\n const offset = _v3A.set(x, y, z).sub(this._targetEnd);\n this._encloseToBoundary(this._targetEnd, offset, this.boundaryFriction);\n this._needsUpdate = true;\n if (!enableTransition) {\n this._target.copy(this._targetEnd);\n }\n const resolveImmediately = !enableTransition ||\n approxEquals(this._target.x, this._targetEnd.x, this.restThreshold) &&\n approxEquals(this._target.y, this._targetEnd.y, this.restThreshold) &&\n approxEquals(this._target.z, this._targetEnd.z, this.restThreshold);\n return this._createOnRestPromise(resolveImmediately);\n }\n /**\n * Look in the given point direction.\n * @param x point x.\n * @param y point y.\n * @param z point z.\n * @param enableTransition Whether to move smoothly or immediately.\n * @returns Transition end promise\n * @category Methods\n */\n lookInDirectionOf(x, y, z, enableTransition = false) {\n const point = _v3A.set(x, y, z);\n const direction = point.sub(this._targetEnd).normalize();\n const position = direction.multiplyScalar(-this._sphericalEnd.radius).add(this._targetEnd);\n return this.setPosition(position.x, position.y, position.z, enableTransition);\n }\n /**\n * Fit the viewport to the box or the bounding box of the object, using the nearest axis. paddings are in unit.\n * set `cover: true` to fill enter screen.\n * e.g.\n * ```\n * cameraControls.fitToBox( myMesh );\n * ```\n * @param box3OrObject Axis aligned bounding box to fit the view.\n * @param enableTransition Whether to move smoothly or immediately.\n * @param options | `` { cover: boolean, paddingTop: number, paddingLeft: number, paddingBottom: number, paddingRight: number }\n * @returns Transition end promise\n * @category Methods\n */\n fitToBox(box3OrObject, enableTransition, { cover = false, paddingLeft = 0, paddingRight = 0, paddingBottom = 0, paddingTop = 0 } = {}) {\n const promises = [];\n const aabb = box3OrObject.isBox3\n ? _box3A.copy(box3OrObject)\n : _box3A.setFromObject(box3OrObject);\n if (aabb.isEmpty()) {\n console.warn('camera-controls: fitTo() cannot be used with an empty box. Aborting');\n Promise.resolve();\n }\n // round to closest axis ( forward | backward | right | left | top | bottom )\n const theta = roundToStep(this._sphericalEnd.theta, PI_HALF);\n const phi = roundToStep(this._sphericalEnd.phi, PI_HALF);\n promises.push(this.rotateTo(theta, phi, enableTransition));\n const normal = _v3A.setFromSpherical(this._sphericalEnd).normalize();\n const rotation = _quaternionA.setFromUnitVectors(normal, _AXIS_Z);\n const viewFromPolar = approxEquals(Math.abs(normal.y), 1);\n if (viewFromPolar) {\n rotation.multiply(_quaternionB.setFromAxisAngle(_AXIS_Y, theta));\n }\n rotation.multiply(this._yAxisUpSpaceInverse);\n // make oriented bounding box\n const bb = _box3B.makeEmpty();\n // left bottom back corner\n _v3B.copy(aabb.min).applyQuaternion(rotation);\n bb.expandByPoint(_v3B);\n // right bottom back corner\n _v3B.copy(aabb.min).setX(aabb.max.x).applyQuaternion(rotation);\n bb.expandByPoint(_v3B);\n // left top back corner\n _v3B.copy(aabb.min).setY(aabb.max.y).applyQuaternion(rotation);\n bb.expandByPoint(_v3B);\n // right top back corner\n _v3B.copy(aabb.max).setZ(aabb.min.z).applyQuaternion(rotation);\n bb.expandByPoint(_v3B);\n // left bottom front corner\n _v3B.copy(aabb.min).setZ(aabb.max.z).applyQuaternion(rotation);\n bb.expandByPoint(_v3B);\n // right bottom front corner\n _v3B.copy(aabb.max).setY(aabb.min.y).applyQuaternion(rotation);\n bb.expandByPoint(_v3B);\n // left top front corner\n _v3B.copy(aabb.max).setX(aabb.min.x).applyQuaternion(rotation);\n bb.expandByPoint(_v3B);\n // right top front corner\n _v3B.copy(aabb.max).applyQuaternion(rotation);\n bb.expandByPoint(_v3B);\n // add padding\n bb.min.x -= paddingLeft;\n bb.min.y -= paddingBottom;\n bb.max.x += paddingRight;\n bb.max.y += paddingTop;\n rotation.setFromUnitVectors(_AXIS_Z, normal);\n if (viewFromPolar) {\n rotation.premultiply(_quaternionB.invert());\n }\n rotation.premultiply(this._yAxisUpSpace);\n const bbSize = bb.getSize(_v3A);\n const center = bb.getCenter(_v3B).applyQuaternion(rotation);\n if (isPerspectiveCamera(this._camera)) {\n const distance = this.getDistanceToFitBox(bbSize.x, bbSize.y, bbSize.z, cover);\n promises.push(this.moveTo(center.x, center.y, center.z, enableTransition));\n promises.push(this.dollyTo(distance, enableTransition));\n promises.push(this.setFocalOffset(0, 0, 0, enableTransition));\n }\n else if (isOrthographicCamera(this._camera)) {\n const camera = this._camera;\n const width = camera.right - camera.left;\n const height = camera.top - camera.bottom;\n const zoom = cover ? Math.max(width / bbSize.x, height / bbSize.y) : Math.min(width / bbSize.x, height / bbSize.y);\n promises.push(this.moveTo(center.x, center.y, center.z, enableTransition));\n promises.push(this.zoomTo(zoom, enableTransition));\n promises.push(this.setFocalOffset(0, 0, 0, enableTransition));\n }\n return Promise.all(promises);\n }\n /**\n * Fit the viewport to the sphere or the bounding sphere of the object.\n * @param sphereOrMesh\n * @param enableTransition\n * @category Methods\n */\n fitToSphere(sphereOrMesh, enableTransition) {\n const promises = [];\n const isObject3D = 'isObject3D' in sphereOrMesh;\n const boundingSphere = isObject3D ?\n CameraControls.createBoundingSphere(sphereOrMesh, _sphere) :\n _sphere.copy(sphereOrMesh);\n promises.push(this.moveTo(boundingSphere.center.x, boundingSphere.center.y, boundingSphere.center.z, enableTransition));\n if (isPerspectiveCamera(this._camera)) {\n const distanceToFit = this.getDistanceToFitSphere(boundingSphere.radius);\n promises.push(this.dollyTo(distanceToFit, enableTransition));\n }\n else if (isOrthographicCamera(this._camera)) {\n const width = this._camera.right - this._camera.left;\n const height = this._camera.top - this._camera.bottom;\n const diameter = 2 * boundingSphere.radius;\n const zoom = Math.min(width / diameter, height / diameter);\n promises.push(this.zoomTo(zoom, enableTransition));\n }\n promises.push(this.setFocalOffset(0, 0, 0, enableTransition));\n return Promise.all(promises);\n }\n /**\n * Look at the `target` from the `position`.\n * @param positionX\n * @param positionY\n * @param positionZ\n * @param targetX\n * @param targetY\n * @param targetZ\n * @param enableTransition\n * @category Methods\n */\n setLookAt(positionX, positionY, positionZ, targetX, targetY, targetZ, enableTransition = false) {\n this._isUserControllingRotate = false;\n this._isUserControllingDolly = false;\n this._isUserControllingTruck = false;\n this._lastDollyDirection = DOLLY_DIRECTION.NONE;\n this._changedDolly = 0;\n const target = _v3B.set(targetX, targetY, targetZ);\n const position = _v3A.set(positionX, positionY, positionZ);\n this._targetEnd.copy(target);\n this._sphericalEnd.setFromVector3(position.sub(target).applyQuaternion(this._yAxisUpSpace));\n this._needsUpdate = true;\n if (!enableTransition) {\n this._target.copy(this._targetEnd);\n this._spherical.copy(this._sphericalEnd);\n }\n const resolveImmediately = !enableTransition ||\n approxEquals(this._target.x, this._targetEnd.x, this.restThreshold) &&\n approxEquals(this._target.y, this._targetEnd.y, this.restThreshold) &&\n approxEquals(this._target.z, this._targetEnd.z, this.restThreshold) &&\n approxEquals(this._spherical.theta, this._sphericalEnd.theta, this.restThreshold) &&\n approxEquals(this._spherical.phi, this._sphericalEnd.phi, this.restThreshold) &&\n approxEquals(this._spherical.radius, this._sphericalEnd.radius, this.restThreshold);\n return this._createOnRestPromise(resolveImmediately);\n }\n /**\n * Interpolates between two states.\n * @param stateA\n * @param stateB\n * @param t\n * @param enableTransition\n * @category Methods\n */\n lerp(stateA, stateB, t, enableTransition = false) {\n this._isUserControllingRotate = false;\n this._isUserControllingDolly = false;\n this._isUserControllingTruck = false;\n this._lastDollyDirection = DOLLY_DIRECTION.NONE;\n this._changedDolly = 0;\n const targetA = _v3A.set(...stateA.target);\n if ('spherical' in stateA) {\n _sphericalA.set(...stateA.spherical);\n }\n else {\n const positionA = _v3B.set(...stateA.position);\n _sphericalA.setFromVector3(positionA.sub(targetA).applyQuaternion(this._yAxisUpSpace));\n }\n const targetB = _v3C.set(...stateB.target);\n if ('spherical' in stateB) {\n _sphericalB.set(...stateB.spherical);\n }\n else {\n const positionB = _v3B.set(...stateB.position);\n _sphericalB.setFromVector3(positionB.sub(targetB).applyQuaternion(this._yAxisUpSpace));\n }\n this._targetEnd.copy(targetA.lerp(targetB, t)); // tricky\n const deltaTheta = _sphericalB.theta - _sphericalA.theta;\n const deltaPhi = _sphericalB.phi - _sphericalA.phi;\n const deltaRadius = _sphericalB.radius - _sphericalA.radius;\n this._sphericalEnd.set(_sphericalA.radius + deltaRadius * t, _sphericalA.phi + deltaPhi * t, _sphericalA.theta + deltaTheta * t);\n this._needsUpdate = true;\n if (!enableTransition) {\n this._target.copy(this._targetEnd);\n this._spherical.copy(this._sphericalEnd);\n }\n const resolveImmediately = !enableTransition ||\n approxEquals(this._target.x, this._targetEnd.x, this.restThreshold) &&\n approxEquals(this._target.y, this._targetEnd.y, this.restThreshold) &&\n approxEquals(this._target.z, this._targetEnd.z, this.restThreshold) &&\n approxEquals(this._spherical.theta, this._sphericalEnd.theta, this.restThreshold) &&\n approxEquals(this._spherical.phi, this._sphericalEnd.phi, this.restThreshold) &&\n approxEquals(this._spherical.radius, this._sphericalEnd.radius, this.restThreshold);\n return this._createOnRestPromise(resolveImmediately);\n }\n /**\n * Similar to setLookAt, but it interpolates between two states.\n * @param positionAX\n * @param positionAY\n * @param positionAZ\n * @param targetAX\n * @param targetAY\n * @param targetAZ\n * @param positionBX\n * @param positionBY\n * @param positionBZ\n * @param targetBX\n * @param targetBY\n * @param targetBZ\n * @param t\n * @param enableTransition\n * @category Methods\n */\n lerpLookAt(positionAX, positionAY, positionAZ, targetAX, targetAY, targetAZ, positionBX, positionBY, positionBZ, targetBX, targetBY, targetBZ, t, enableTransition = false) {\n return this.lerp({\n position: [positionAX, positionAY, positionAZ],\n target: [targetAX, targetAY, targetAZ],\n }, {\n position: [positionBX, positionBY, positionBZ],\n target: [targetBX, targetBY, targetBZ],\n }, t, enableTransition);\n }\n /**\n * Set angle and distance by given position.\n * An alias of `setLookAt()`, without target change. Thus keep gazing at the current target\n * @param positionX\n * @param positionY\n * @param positionZ\n * @param enableTransition\n * @category Methods\n */\n setPosition(positionX, positionY, positionZ, enableTransition = false) {\n return this.setLookAt(positionX, positionY, positionZ, this._targetEnd.x, this._targetEnd.y, this._targetEnd.z, enableTransition);\n }\n /**\n * Set the target position where gaze at.\n * An alias of `setLookAt()`, without position change. Thus keep the same position.\n * @param targetX\n * @param targetY\n * @param targetZ\n * @param enableTransition\n * @category Methods\n */\n setTarget(targetX, targetY, targetZ, enableTransition = false) {\n const pos = this.getPosition(_v3A);\n const promise = this.setLookAt(pos.x, pos.y, pos.z, targetX, targetY, targetZ, enableTransition);\n // see https://github.com/yomotsu/camera-controls/issues/335\n this._sphericalEnd.phi = clamp(this._sphericalEnd.phi, this.minPolarAngle, this.maxPolarAngle);\n return promise;\n }\n /**\n * Set focal offset using the screen parallel coordinates. z doesn't affect in Orthographic as with Dolly.\n * @param x\n * @param y\n * @param z\n * @param enableTransition\n * @category Methods\n */\n setFocalOffset(x, y, z, enableTransition = false) {\n this._isUserControllingOffset = false;\n this._focalOffsetEnd.set(x, y, z);\n this._needsUpdate = true;\n if (!enableTransition)\n this._focalOffset.copy(this._focalOffsetEnd);\n const resolveImmediately = !enableTransition ||\n approxEquals(this._focalOffset.x, this._focalOffsetEnd.x, this.restThreshold) &&\n approxEquals(this._focalOffset.y, this._focalOffsetEnd.y, this.restThreshold) &&\n approxEquals(this._focalOffset.z, this._focalOffsetEnd.z, this.restThreshold);\n return this._createOnRestPromise(resolveImmediately);\n }\n /**\n * Set orbit point without moving the camera.\n * SHOULD NOT RUN DURING ANIMATIONS. `setOrbitPoint()` will immediately fix the positions.\n * @param targetX\n * @param targetY\n * @param targetZ\n * @category Methods\n */\n setOrbitPoint(targetX, targetY, targetZ) {\n this._camera.updateMatrixWorld();\n _xColumn.setFromMatrixColumn(this._camera.matrixWorldInverse, 0);\n _yColumn.setFromMatrixColumn(this._camera.matrixWorldInverse, 1);\n _zColumn.setFromMatrixColumn(this._camera.matrixWorldInverse, 2);\n const position = _v3A.set(targetX, targetY, targetZ);\n const distance = position.distanceTo(this._camera.position);\n const cameraToPoint = position.sub(this._camera.position);\n _xColumn.multiplyScalar(cameraToPoint.x);\n _yColumn.multiplyScalar(cameraToPoint.y);\n _zColumn.multiplyScalar(cameraToPoint.z);\n _v3A.copy(_xColumn).add(_yColumn).add(_zColumn);\n _v3A.z = _v3A.z + distance;\n this.dollyTo(distance, false);\n this.setFocalOffset(-_v3A.x, _v3A.y, -_v3A.z, false);\n this.moveTo(targetX, targetY, targetZ, false);\n }\n /**\n * Set the boundary box that encloses the target of the camera. box3 is in THREE.Box3\n * @param box3\n * @category Methods\n */\n setBoundary(box3) {\n if (!box3) {\n this._boundary.min.set(-Infinity, -Infinity, -Infinity);\n this._boundary.max.set(Infinity, Infinity, Infinity);\n this._needsUpdate = true;\n return;\n }\n this._boundary.copy(box3);\n this._boundary.clampPoint(this._targetEnd, this._targetEnd);\n this._needsUpdate = true;\n }\n /**\n * Set (or unset) the current viewport.\n * Set this when you want to use renderer viewport and .dollyToCursor feature at the same time.\n * @param viewportOrX\n * @param y\n * @param width\n * @param height\n * @category Methods\n */\n setViewport(viewportOrX, y, width, height) {\n if (viewportOrX === null) { // null\n this._viewport = null;\n return;\n }\n this._viewport = this._viewport || new THREE.Vector4();\n if (typeof viewportOrX === 'number') { // number\n this._viewport.set(viewportOrX, y, width, height);\n }\n else { // Vector4\n this._viewport.copy(viewportOrX);\n }\n }\n /**\n * Calculate the distance to fit the box.\n * @param width box width\n * @param height box height\n * @param depth box depth\n * @returns distance\n * @category Methods\n */\n getDistanceToFitBox(width, height, depth, cover = false) {\n if (notSupportedInOrthographicCamera(this._camera, 'getDistanceToFitBox'))\n return this._spherical.radius;\n const boundingRectAspect = width / height;\n const fov = this._camera.getEffectiveFOV() * DEG2RAD;\n const aspect = this._camera.aspect;\n const heightToFit = (cover ? boundingRectAspect > aspect : boundingRectAspect < aspect) ? height : width / aspect;\n return heightToFit * 0.5 / Math.tan(fov * 0.5) + depth * 0.5;\n }\n /**\n * Calculate the distance to fit the sphere.\n * @param radius sphere radius\n * @returns distance\n * @category Methods\n */\n getDistanceToFitSphere(radius) {\n if (notSupportedInOrthographicCamera(this._camera, 'getDistanceToFitSphere'))\n return this._spherical.radius;\n // https://stackoverflow.com/a/44849975\n const vFOV = this._camera.getEffectiveFOV() * DEG2RAD;\n const hFOV = Math.atan(Math.tan(vFOV * 0.5) * this._camera.aspect) * 2;\n const fov = 1 < this._camera.aspect ? vFOV : hFOV;\n return radius / (Math.sin(fov * 0.5));\n }\n /**\n * Returns the orbit center position, where the camera looking at.\n * @param out The receiving Vector3 instance to copy the result\n * @param receiveEndValue Whether receive the transition end coords or current. default is `true`\n * @category Methods\n */\n getTarget(out, receiveEndValue = true) {\n const _out = !!out && out.isVector3 ? out : new THREE.Vector3();\n return _out.copy(receiveEndValue ? this._targetEnd : this._target);\n }\n /**\n * Returns the camera position.\n * @param out The receiving Vector3 instance to copy the result\n * @param receiveEndValue Whether receive the transition end coords or current. default is `true`\n * @category Methods\n */\n getPosition(out, receiveEndValue = true) {\n const _out = !!out && out.isVector3 ? out : new THREE.Vector3();\n return _out.setFromSpherical(receiveEndValue ? this._sphericalEnd : this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(receiveEndValue ? this._targetEnd : this._target);\n }\n /**\n * Returns the spherical coordinates of the orbit.\n * @param out The receiving Spherical instance to copy the result\n * @param receiveEndValue Whether receive the transition end coords or current. default is `true`\n * @category Methods\n */\n getSpherical(out, receiveEndValue = true) {\n const _out = out || new THREE.Spherical();\n return _out.copy(receiveEndValue ? this._sphericalEnd : this._spherical);\n }\n /**\n * Returns the focal offset, which is how much the camera appears to be translated in screen parallel coordinates.\n * @param out The receiving Vector3 instance to copy the result\n * @param receiveEndValue Whether receive the transition end coords or current. default is `true`\n * @category Methods\n */\n getFocalOffset(out, receiveEndValue = true) {\n const _out = !!out && out.isVector3 ? out : new THREE.Vector3();\n return _out.copy(receiveEndValue ? this._focalOffsetEnd : this._focalOffset);\n }\n /**\n * Normalize camera azimuth angle (horizontal rotation) between -180 and 180 degrees.\n * @returns This CameraControls instance.\n * @category Methods\n */\n normalizeRotations() {\n this._sphericalEnd.theta = ((this._sphericalEnd.theta % PI_2) + PI_2) % PI_2;\n if (this._sphericalEnd.theta > Math.PI)\n this._sphericalEnd.theta -= PI_2;\n this._spherical.theta += PI_2 * Math.round((this._sphericalEnd.theta - this._spherical.theta) / PI_2);\n return this;\n }\n /**\n * stop all transitions.\n */\n stop() {\n this._focalOffset.copy(this._focalOffsetEnd);\n this._target.copy(this._targetEnd);\n this._spherical.copy(this._sphericalEnd);\n this._zoom = this._zoomEnd;\n }\n /**\n * Reset all rotation and position to defaults.\n * @param enableTransition\n * @category Methods\n */\n reset(enableTransition = false) {\n if (!approxEquals(this._camera.up.x, this._cameraUp0.x) ||\n !approxEquals(this._camera.up.y, this._cameraUp0.y) ||\n !approxEquals(this._camera.up.z, this._cameraUp0.z)) {\n this._camera.up.copy(this._cameraUp0);\n const position = this.getPosition(_v3A);\n this.updateCameraUp();\n this.setPosition(position.x, position.y, position.z);\n }\n const promises = [\n this.setLookAt(this._position0.x, this._position0.y, this._position0.z, this._target0.x, this._target0.y, this._target0.z, enableTransition),\n this.setFocalOffset(this._focalOffset0.x, this._focalOffset0.y, this._focalOffset0.z, enableTransition),\n this.zoomTo(this._zoom0, enableTransition),\n ];\n return Promise.all(promises);\n }\n /**\n * Set current camera position as the default position.\n * @category Methods\n */\n saveState() {\n this._cameraUp0.copy(this._camera.up);\n this.getTarget(this._target0);\n this.getPosition(this._position0);\n this._zoom0 = this._zoom;\n this._focalOffset0.copy(this._focalOffset);\n }\n /**\n * Sync camera-up direction.\n * When camera-up vector is changed, `.updateCameraUp()` must be called.\n * @category Methods\n */\n updateCameraUp() {\n this._yAxisUpSpace.setFromUnitVectors(this._camera.up, _AXIS_Y);\n this._yAxisUpSpaceInverse.copy(this._yAxisUpSpace).invert();\n }\n /**\n * Apply current camera-up direction to the camera.\n * The orbit system will be re-initialized with the current position.\n * @category Methods\n */\n applyCameraUp() {\n const cameraDirection = _v3A.subVectors(this._target, this._camera.position).normalize();\n // So first find the vector off to the side, orthogonal to both this.object.up and\n // the \"view\" vector.\n const side = _v3B.crossVectors(cameraDirection, this._camera.up);\n // Then find the vector orthogonal to both this \"side\" vector and the \"view\" vector.\n // This vector will be the new \"up\" vector.\n this._camera.up.crossVectors(side, cameraDirection).normalize();\n this._camera.updateMatrixWorld();\n const position = this.getPosition(_v3A);\n this.updateCameraUp();\n this.setPosition(position.x, position.y, position.z);\n }\n /**\n * Update camera position and directions.\n * This should be called in your tick loop every time, and returns true if re-rendering is needed.\n * @param delta\n * @returns updated\n * @category Methods\n */\n update(delta) {\n const deltaTheta = this._sphericalEnd.theta - this._spherical.theta;\n const deltaPhi = this._sphericalEnd.phi - this._spherical.phi;\n const deltaRadius = this._sphericalEnd.radius - this._spherical.radius;\n const deltaTarget = _deltaTarget.subVectors(this._targetEnd, this._target);\n const deltaOffset = _deltaOffset.subVectors(this._focalOffsetEnd, this._focalOffset);\n const deltaZoom = this._zoomEnd - this._zoom;\n // update theta\n if (approxZero(deltaTheta)) {\n this._thetaVelocity.value = 0;\n this._spherical.theta = this._sphericalEnd.theta;\n }\n else {\n const smoothTime = this._isUserControllingRotate ? this.draggingSmoothTime : this.smoothTime;\n this._spherical.theta = smoothDamp(this._spherical.theta, this._sphericalEnd.theta, this._thetaVelocity, smoothTime, Infinity, delta);\n this._needsUpdate = true;\n }\n // update phi\n if (approxZero(deltaPhi)) {\n this._phiVelocity.value = 0;\n this._spherical.phi = this._sphericalEnd.phi;\n }\n else {\n const smoothTime = this._isUserControllingRotate ? this.draggingSmoothTime : this.smoothTime;\n this._spherical.phi = smoothDamp(this._spherical.phi, this._sphericalEnd.phi, this._phiVelocity, smoothTime, Infinity, delta);\n this._needsUpdate = true;\n }\n // update distance\n if (approxZero(deltaRadius)) {\n this._radiusVelocity.value = 0;\n this._spherical.radius = this._sphericalEnd.radius;\n }\n else {\n const smoothTime = this._isUserControllingDolly ? this.draggingSmoothTime : this.smoothTime;\n this._spherical.radius = smoothDamp(this._spherical.radius, this._sphericalEnd.radius, this._radiusVelocity, smoothTime, this.maxSpeed, delta);\n this._needsUpdate = true;\n }\n // update target position\n if (approxZero(deltaTarget.x) && approxZero(deltaTarget.y) && approxZero(deltaTarget.z)) {\n this._targetVelocity.set(0, 0, 0);\n this._target.copy(this._targetEnd);\n }\n else {\n const smoothTime = this._isUserControllingTruck ? this.draggingSmoothTime : this.smoothTime;\n smoothDampVec3(this._target, this._targetEnd, this._targetVelocity, smoothTime, this.maxSpeed, delta, this._target);\n this._needsUpdate = true;\n }\n // update focalOffset\n if (approxZero(deltaOffset.x) && approxZero(deltaOffset.y) && approxZero(deltaOffset.z)) {\n this._focalOffsetVelocity.set(0, 0, 0);\n this._focalOffset.copy(this._focalOffsetEnd);\n }\n else {\n const smoothTime = this._isUserControllingOffset ? this.draggingSmoothTime : this.smoothTime;\n smoothDampVec3(this._focalOffset, this._focalOffsetEnd, this._focalOffsetVelocity, smoothTime, this.maxSpeed, delta, this._focalOffset);\n this._needsUpdate = true;\n }\n // update zoom\n if (approxZero(deltaZoom)) {\n this._zoomVelocity.value = 0;\n this._zoom = this._zoomEnd;\n }\n else {\n const smoothTime = this._isUserControllingZoom ? this.draggingSmoothTime : this.smoothTime;\n this._zoom = smoothDamp(this._zoom, this._zoomEnd, this._zoomVelocity, smoothTime, Infinity, delta);\n }\n if (this.dollyToCursor) {\n if (isPerspectiveCamera(this._camera) && this._changedDolly !== 0) {\n const dollyControlAmount = this._spherical.radius - this._lastDistance;\n const camera = this._camera;\n const cameraDirection = this._getCameraDirection(_cameraDirection);\n const planeX = _v3A.copy(cameraDirection).cross(camera.up).normalize();\n if (planeX.lengthSq() === 0)\n planeX.x = 1.0;\n const planeY = _v3B.crossVectors(planeX, cameraDirection);\n const worldToScreen = this._sphericalEnd.radius * Math.tan(camera.getEffectiveFOV() * DEG2RAD * 0.5);\n const prevRadius = this._sphericalEnd.radius - dollyControlAmount;\n const lerpRatio = (prevRadius - this._sphericalEnd.radius) / this._sphericalEnd.radius;\n const cursor = _v3C.copy(this._targetEnd)\n .add(planeX.multiplyScalar(this._dollyControlCoord.x * worldToScreen * camera.aspect))\n .add(planeY.multiplyScalar(this._dollyControlCoord.y * worldToScreen));\n const newTargetEnd = _v3A.copy(this._targetEnd).lerp(cursor, lerpRatio);\n const isMin = this._lastDollyDirection === DOLLY_DIRECTION.IN && this._spherical.radius <= this.minDistance;\n const isMax = this._lastDollyDirection === DOLLY_DIRECTION.OUT && this.maxDistance <= this._spherical.radius;\n if (this.infinityDolly && (isMin || isMax)) {\n this._sphericalEnd.radius -= dollyControlAmount;\n this._spherical.radius -= dollyControlAmount;\n const dollyAmount = _v3B.copy(cameraDirection).multiplyScalar(-dollyControlAmount);\n newTargetEnd.add(dollyAmount);\n }\n // target position may be moved beyond boundary.\n this._boundary.clampPoint(newTargetEnd, newTargetEnd);\n const targetEndDiff = _v3B.subVectors(newTargetEnd, this._targetEnd);\n this._targetEnd.copy(newTargetEnd);\n this._target.add(targetEndDiff);\n this._changedDolly -= dollyControlAmount;\n if (approxZero(this._changedDolly))\n this._changedDolly = 0;\n }\n else if (isOrthographicCamera(this._camera) && this._changedZoom !== 0) {\n const dollyControlAmount = this._zoom - this._lastZoom;\n const camera = this._camera;\n const worldCursorPosition = _v3A.set(this._dollyControlCoord.x, this._dollyControlCoord.y, (camera.near + camera.far) / (camera.near - camera.far)).unproject(camera);\n const quaternion = _v3B.set(0, 0, -1).applyQuaternion(camera.quaternion);\n const cursor = _v3C.copy(worldCursorPosition).add(quaternion.multiplyScalar(-worldCursorPosition.dot(camera.up)));\n const prevZoom = this._zoom - dollyControlAmount;\n const lerpRatio = -(prevZoom - this._zoom) / this._zoom;\n // find the \"distance\" (aka plane constant in three.js) of Plane\n // from a given position (this._targetEnd) and normal vector (cameraDirection)\n // https://www.maplesoft.com/support/help/maple/view.aspx?path=MathApps%2FEquationOfAPlaneNormal#bkmrk0\n const cameraDirection = this._getCameraDirection(_cameraDirection);\n const prevPlaneConstant = this._targetEnd.dot(cameraDirection);\n const newTargetEnd = _v3A.copy(this._targetEnd).lerp(cursor, lerpRatio);\n const newPlaneConstant = newTargetEnd.dot(cameraDirection);\n // Pull back the camera depth that has moved, to be the camera stationary as zoom\n const pullBack = cameraDirection.multiplyScalar(newPlaneConstant - prevPlaneConstant);\n newTargetEnd.sub(pullBack);\n // target position may be moved beyond boundary.\n this._boundary.clampPoint(newTargetEnd, newTargetEnd);\n const targetEndDiff = _v3B.subVectors(newTargetEnd, this._targetEnd);\n this._targetEnd.copy(newTargetEnd);\n this._target.add(targetEndDiff);\n // this._target.copy( this._targetEnd );\n this._changedZoom -= dollyControlAmount;\n if (approxZero(this._changedZoom))\n this._changedZoom = 0;\n }\n }\n if (this._camera.zoom !== this._zoom) {\n this._camera.zoom = this._zoom;\n this._camera.updateProjectionMatrix();\n this._updateNearPlaneCorners();\n this._needsUpdate = true;\n }\n this._dragNeedsUpdate = true;\n // collision detection\n const maxDistance = this._collisionTest();\n this._spherical.radius = Math.min(this._spherical.radius, maxDistance);\n // decompose spherical to the camera position\n this._spherical.makeSafe();\n this._camera.position.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(this._target);\n this._camera.lookAt(this._target);\n // set offset after the orbit movement\n const affectOffset = !approxZero(this._focalOffset.x) ||\n !approxZero(this._focalOffset.y) ||\n !approxZero(this._focalOffset.z);\n if (affectOffset) {\n this._camera.matrix.compose(this._camera.position, this._camera.quaternion, this._camera.scale);\n _xColumn.setFromMatrixColumn(this._camera.matrix, 0);\n _yColumn.setFromMatrixColumn(this._camera.matrix, 1);\n _zColumn.setFromMatrixColumn(this._camera.matrix, 2);\n _xColumn.multiplyScalar(this._focalOffset.x);\n _yColumn.multiplyScalar(-this._focalOffset.y);\n _zColumn.multiplyScalar(this._focalOffset.z); // notice: z-offset will not affect in Orthographic.\n _v3A.copy(_xColumn).add(_yColumn).add(_zColumn);\n this._camera.position.add(_v3A);\n this._camera.updateMatrixWorld();\n }\n if (this._boundaryEnclosesCamera) {\n this._encloseToBoundary(this._camera.position.copy(this._target), _v3A.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse), 1.0);\n }\n const updated = this._needsUpdate;\n if (updated && !this._updatedLastTime) {\n this._hasRested = false;\n this.dispatchEvent({ type: 'wake' });\n this.dispatchEvent({ type: 'update' });\n }\n else if (updated) {\n this.dispatchEvent({ type: 'update' });\n if (approxZero(deltaTheta, this.restThreshold) &&\n approxZero(deltaPhi, this.restThreshold) &&\n approxZero(deltaRadius, this.restThreshold) &&\n approxZero(deltaTarget.x, this.restThreshold) &&\n approxZero(deltaTarget.y, this.restThreshold) &&\n approxZero(deltaTarget.z, this.restThreshold) &&\n approxZero(deltaOffset.x, this.restThreshold) &&\n approxZero(deltaOffset.y, this.restThreshold) &&\n approxZero(deltaOffset.z, this.restThreshold) &&\n approxZero(deltaZoom, this.restThreshold) &&\n !this._hasRested) {\n this._hasRested = true;\n this.dispatchEvent({ type: 'rest' });\n }\n }\n else if (!updated && this._updatedLastTime) {\n this.dispatchEvent({ type: 'sleep' });\n }\n this._lastDistance = this._spherical.radius;\n this._lastZoom = this._zoom;\n this._updatedLastTime = updated;\n this._needsUpdate = false;\n return updated;\n }\n /**\n * Get all state in JSON string\n * @category Methods\n */\n toJSON() {\n return JSON.stringify({\n enabled: this._enabled,\n minDistance: this.minDistance,\n maxDistance: infinityToMaxNumber(this.maxDistance),\n minZoom: this.minZoom,\n maxZoom: infinityToMaxNumber(this.maxZoom),\n minPolarAngle: this.minPolarAngle,\n maxPolarAngle: infinityToMaxNumber(this.maxPolarAngle),\n minAzimuthAngle: infinityToMaxNumber(this.minAzimuthAngle),\n maxAzimuthAngle: infinityToMaxNumber(this.maxAzimuthAngle),\n smoothTime: this.smoothTime,\n draggingSmoothTime: this.draggingSmoothTime,\n dollySpeed: this.dollySpeed,\n truckSpeed: this.truckSpeed,\n dollyToCursor: this.dollyToCursor,\n target: this._targetEnd.toArray(),\n position: _v3A.setFromSpherical(this._sphericalEnd).add(this._targetEnd).toArray(),\n zoom: this._zoomEnd,\n focalOffset: this._focalOffsetEnd.toArray(),\n target0: this._target0.toArray(),\n position0: this._position0.toArray(),\n zoom0: this._zoom0,\n focalOffset0: this._focalOffset0.toArray(),\n });\n }\n /**\n * Reproduce the control state with JSON. enableTransition is where anim or not in a boolean.\n * @param json\n * @param enableTransition\n * @category Methods\n */\n fromJSON(json, enableTransition = false) {\n const obj = JSON.parse(json);\n this.enabled = obj.enabled;\n this.minDistance = obj.minDistance;\n this.maxDistance = maxNumberToInfinity(obj.maxDistance);\n this.minZoom = obj.minZoom;\n this.maxZoom = maxNumberToInfinity(obj.maxZoom);\n this.minPolarAngle = obj.minPolarAngle;\n this.maxPolarAngle = maxNumberToInfinity(obj.maxPolarAngle);\n this.minAzimuthAngle = maxNumberToInfinity(obj.minAzimuthAngle);\n this.maxAzimuthAngle = maxNumberToInfinity(obj.maxAzimuthAngle);\n this.smoothTime = obj.smoothTime;\n this.draggingSmoothTime = obj.draggingSmoothTime;\n this.dollySpeed = obj.dollySpeed;\n this.truckSpeed = obj.truckSpeed;\n this.dollyToCursor = obj.dollyToCursor;\n this._target0.fromArray(obj.target0);\n this._position0.fromArray(obj.position0);\n this._zoom0 = obj.zoom0;\n this._focalOffset0.fromArray(obj.focalOffset0);\n this.moveTo(obj.target[0], obj.target[1], obj.target[2], enableTransition);\n _sphericalA.setFromVector3(_v3A.fromArray(obj.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace));\n this.rotateTo(_sphericalA.theta, _sphericalA.phi, enableTransition);\n this.dollyTo(_sphericalA.radius, enableTransition);\n this.zoomTo(obj.zoom, enableTransition);\n this.setFocalOffset(obj.focalOffset[0], obj.focalOffset[1], obj.focalOffset[2], enableTransition);\n this._needsUpdate = true;\n }\n /**\n * Attach all internal event handlers to enable drag control.\n * @category Methods\n */\n connect(domElement) {\n if (this._domElement) {\n console.warn('camera-controls is already connected.');\n return;\n }\n domElement.setAttribute('data-camera-controls-version', VERSION);\n this._addAllEventListeners(domElement);\n this._getClientRect(this._elementRect);\n }\n /**\n * Detach all internal event handlers to disable drag control.\n */\n disconnect() {\n this.cancel();\n this._removeAllEventListeners();\n if (this._domElement) {\n this._domElement.removeAttribute('data-camera-controls-version');\n this._domElement = undefined;\n }\n }\n /**\n * Dispose the cameraControls instance itself, remove all eventListeners.\n * @category Methods\n */\n dispose() {\n // remove all user event listeners\n this.removeAllEventListeners();\n // remove all internal event listeners\n this.disconnect();\n }\n // it's okay to expose public though\n _getTargetDirection(out) {\n // divide by distance to normalize, lighter than `Vector3.prototype.normalize()`\n return out.setFromSpherical(this._spherical).divideScalar(this._spherical.radius).applyQuaternion(this._yAxisUpSpaceInverse);\n }\n // it's okay to expose public though\n _getCameraDirection(out) {\n return this._getTargetDirection(out).negate();\n }\n _findPointerById(pointerId) {\n return this._activePointers.find((activePointer) => activePointer.pointerId === pointerId);\n }\n _findPointerByMouseButton(mouseButton) {\n return this._activePointers.find((activePointer) => activePointer.mouseButton === mouseButton);\n }\n _disposePointer(pointer) {\n this._activePointers.splice(this._activePointers.indexOf(pointer), 1);\n }\n _encloseToBoundary(position, offset, friction) {\n const offsetLength2 = offset.lengthSq();\n if (offsetLength2 === 0.0) { // sanity check\n return position;\n }\n // See: https://twitter.com/FMS_Cat/status/1106508958640988161\n const newTarget = _v3B.copy(offset).add(position); // target\n const clampedTarget = this._boundary.clampPoint(newTarget, _v3C); // clamped target\n const deltaClampedTarget = clampedTarget.sub(newTarget); // newTarget -> clampedTarget\n const deltaClampedTargetLength2 = deltaClampedTarget.lengthSq(); // squared length of deltaClampedTarget\n if (deltaClampedTargetLength2 === 0.0) { // when the position doesn't have to be clamped\n return position.add(offset);\n }\n else if (deltaClampedTargetLength2 === offsetLength2) { // when the position is completely stuck\n return position;\n }\n else if (friction === 0.0) {\n return position.add(offset).add(deltaClampedTarget);\n }\n else {\n const offsetFactor = 1.0 + friction * deltaClampedTargetLength2 / offset.dot(deltaClampedTarget);\n return position\n .add(_v3B.copy(offset).multiplyScalar(offsetFactor))\n .add(deltaClampedTarget.multiplyScalar(1.0 - friction));\n }\n }\n _updateNearPlaneCorners() {\n if (isPerspectiveCamera(this._camera)) {\n const camera = this._camera;\n const near = camera.near;\n const fov = camera.getEffectiveFOV() * DEG2RAD;\n const heightHalf = Math.tan(fov * 0.5) * near; // near plain half height\n const widthHalf = heightHalf * camera.aspect; // near plain half width\n this._nearPlaneCorners[0].set(-widthHalf, -heightHalf, 0);\n this._nearPlaneCorners[1].set(widthHalf, -heightHalf, 0);\n this._nearPlaneCorners[2].set(widthHalf, heightHalf, 0);\n this._nearPlaneCorners[3].set(-widthHalf, heightHalf, 0);\n }\n else if (isOrthographicCamera(this._camera)) {\n const camera = this._camera;\n const zoomInv = 1 / camera.zoom;\n const left = camera.left * zoomInv;\n const right = camera.right * zoomInv;\n const top = camera.top * zoomInv;\n const bottom = camera.bottom * zoomInv;\n this._nearPlaneCorners[0].set(left, top, 0);\n this._nearPlaneCorners[1].set(right, top, 0);\n this._nearPlaneCorners[2].set(right, bottom, 0);\n this._nearPlaneCorners[3].set(left, bottom, 0);\n }\n }\n _truckInternal = (deltaX, deltaY, dragToOffset, screenSpacePanning) => {\n let truckX;\n let pedestalY;\n if (isPerspectiveCamera(this._camera)) {\n const offset = _v3A.copy(this._camera.position).sub(this._target);\n // half of the fov is center to top of screen\n const fov = this._camera.getEffectiveFOV() * DEG2RAD;\n const targetDistance = offset.length() * Math.tan(fov * 0.5);\n truckX = (this.truckSpeed * deltaX * targetDistance / this._elementRect.height);\n pedestalY = (this.truckSpeed * deltaY * targetDistance / this._elementRect.height);\n }\n else if (isOrthographicCamera(this._camera)) {\n const camera = this._camera;\n truckX = this.truckSpeed * deltaX * (camera.right - camera.left) / camera.zoom / this._elementRect.width;\n pedestalY = this.truckSpeed * deltaY * (camera.top - camera.bottom) / camera.zoom / this._elementRect.height;\n }\n else {\n return;\n }\n if (screenSpacePanning) {\n dragToOffset ?\n this.setFocalOffset(this._focalOffsetEnd.x + truckX, this._focalOffsetEnd.y, this._focalOffsetEnd.z, true) :\n this.truck(truckX, 0, true);\n this.forward(-pedestalY, true);\n }\n else {\n dragToOffset ?\n this.setFocalOffset(this._focalOffsetEnd.x + truckX, this._focalOffsetEnd.y + pedestalY, this._focalOffsetEnd.z, true) :\n this.truck(truckX, pedestalY, true);\n }\n };\n _rotateInternal = (deltaX, deltaY) => {\n const theta = PI_2 * this.azimuthRotateSpeed * deltaX / this._elementRect.height; // divide by *height* to refer the resolution\n const phi = PI_2 * this.polarRotateSpeed * deltaY / this._elementRect.height;\n this.rotate(theta, phi, true);\n };\n _dollyInternal = (delta, x, y) => {\n const dollyScale = Math.pow(0.95, -delta * this.dollySpeed);\n const lastDistance = this._sphericalEnd.radius;\n const distance = this._sphericalEnd.radius * dollyScale;\n const clampedDistance = clamp(distance, this.minDistance, this.maxDistance);\n const overflowedDistance = clampedDistance - distance;\n if (this.infinityDolly && this.dollyToCursor) {\n this._dollyToNoClamp(distance, true);\n }\n else if (this.infinityDolly && !this.dollyToCursor) {\n this.dollyInFixed(overflowedDistance, true);\n this._dollyToNoClamp(clampedDistance, true);\n }\n else {\n this._dollyToNoClamp(clampedDistance, true);\n }\n if (this.dollyToCursor) {\n this._changedDolly += (this.infinityDolly ? distance : clampedDistance) - lastDistance;\n this._dollyControlCoord.set(x, y);\n }\n this._lastDollyDirection = Math.sign(-delta);\n };\n _zoomInternal = (delta, x, y) => {\n const zoomScale = Math.pow(0.95, delta * this.dollySpeed);\n const lastZoom = this._zoom;\n const zoom = this._zoom * zoomScale;\n // for both PerspectiveCamera and OrthographicCamera\n this.zoomTo(zoom, true);\n if (this.dollyToCursor) {\n this._changedZoom += zoom - lastZoom;\n this._dollyControlCoord.set(x, y);\n }\n };\n // lateUpdate\n _collisionTest() {\n let distance = Infinity;\n const hasCollider = this.colliderMeshes.length >= 1;\n if (!hasCollider)\n return distance;\n if (notSupportedInOrthographicCamera(this._camera, '_collisionTest'))\n return distance;\n const rayDirection = this._getTargetDirection(_cameraDirection);\n _rotationMatrix.lookAt(_ORIGIN, rayDirection, this._camera.up);\n for (let i = 0; i < 4; i++) {\n const nearPlaneCorner = _v3B.copy(this._nearPlaneCorners[i]);\n nearPlaneCorner.applyMatrix4(_rotationMatrix);\n const origin = _v3C.addVectors(this._target, nearPlaneCorner);\n _raycaster.set(origin, rayDirection);\n _raycaster.far = this._spherical.radius + 1;\n const intersects = _raycaster.intersectObjects(this.colliderMeshes);\n if (intersects.length !== 0 && intersects[0].distance < distance) {\n distance = intersects[0].distance;\n }\n }\n return distance;\n }\n /**\n * Get its client rect and package into given `DOMRect` .\n */\n _getClientRect(target) {\n if (!this._domElement)\n return;\n const rect = this._domElement.getBoundingClientRect();\n target.x = rect.left;\n target.y = rect.top;\n if (this._viewport) {\n target.x += this._viewport.x;\n target.y += rect.height - this._viewport.w - this._viewport.y;\n target.width = this._viewport.z;\n target.height = this._viewport.w;\n }\n else {\n target.width = rect.width;\n target.height = rect.height;\n }\n return target;\n }\n _createOnRestPromise(resolveImmediately) {\n if (resolveImmediately)\n return Promise.resolve();\n this._hasRested = false;\n this.dispatchEvent({ type: 'transitionstart' });\n return new Promise((resolve) => {\n const onResolve = () => {\n this.removeEventListener('rest', onResolve);\n resolve();\n };\n this.addEventListener('rest', onResolve);\n });\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _addAllEventListeners(_domElement) { }\n _removeAllEventListeners() { }\n /**\n * backward compatible\n * @deprecated use smoothTime (in seconds) instead\n * @category Properties\n */\n get dampingFactor() {\n console.warn('.dampingFactor has been deprecated. use smoothTime (in seconds) instead.');\n return 0;\n }\n /**\n * backward compatible\n * @deprecated use smoothTime (in seconds) instead\n * @category Properties\n */\n set dampingFactor(_) {\n console.warn('.dampingFactor has been deprecated. use smoothTime (in seconds) instead.');\n }\n /**\n * backward compatible\n * @deprecated use draggingSmoothTime (in seconds) instead\n * @category Properties\n */\n get draggingDampingFactor() {\n console.warn('.draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.');\n return 0;\n }\n /**\n * backward compatible\n * @deprecated use draggingSmoothTime (in seconds) instead\n * @category Properties\n */\n set draggingDampingFactor(_) {\n console.warn('.draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.');\n }\n static createBoundingSphere(object3d, out = new THREE.Sphere()) {\n const boundingSphere = out;\n const center = boundingSphere.center;\n _box3A.makeEmpty();\n // find the center\n object3d.traverseVisible((object) => {\n if (!object.isMesh)\n return;\n _box3A.expandByObject(object);\n });\n _box3A.getCenter(center);\n // find the radius\n let maxRadiusSq = 0;\n object3d.traverseVisible((object) => {\n if (!object.isMesh)\n return;\n const mesh = object;\n if (!mesh.geometry)\n return;\n const geometry = mesh.geometry.clone();\n geometry.applyMatrix4(mesh.matrixWorld);\n const bufferGeometry = geometry;\n const position = bufferGeometry.attributes.position;\n for (let i = 0, l = position.count; i < l; i++) {\n _v3A.fromBufferAttribute(position, i);\n maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_v3A));\n }\n });\n boundingSphere.radius = Math.sqrt(maxRadiusSq);\n return boundingSphere;\n }\n}\n\nexport { EventDispatcher, CameraControls as default };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { Box3, MathUtils, Matrix4, Quaternion, Raycaster, Sphere, Spherical, Vector2, Vector3, Vector4 } from 'three';\nimport * as React from 'react';\nimport { forwardRef, useMemo, useEffect } from 'react';\nimport { extend, useThree, useFrame } from '@react-three/fiber';\nimport CameraControlsImpl from 'camera-controls';\nexport { default as CameraControlsImpl } from 'camera-controls';\n\nconst CameraControls = /* @__PURE__ */forwardRef((props, ref) => {\n const {\n impl: SubclassImpl,\n camera,\n domElement,\n makeDefault,\n onControlStart,\n onControl,\n onControlEnd,\n onTransitionStart,\n onUpdate,\n onWake,\n onRest,\n onSleep,\n onStart,\n onEnd,\n onChange,\n regress,\n ...restProps\n } = props;\n const Impl = SubclassImpl !== null && SubclassImpl !== void 0 ? SubclassImpl : CameraControlsImpl;\n\n // useMemo is used here instead of useEffect, otherwise the useMemo below runs first and throws\n useMemo(() => {\n // to allow for tree shaking, we only import the subset of THREE that is used by camera-controls\n // see https://github.com/yomotsu/camera-controls#important\n const subsetOfTHREE = {\n Box3,\n MathUtils: {\n clamp: MathUtils.clamp\n },\n Matrix4,\n Quaternion,\n Raycaster,\n Sphere,\n Spherical,\n Vector2,\n Vector3,\n Vector4\n };\n Impl.install({\n THREE: subsetOfTHREE\n });\n extend({\n CameraControlsImpl: Impl\n });\n }, [Impl]);\n const defaultCamera = useThree(state => state.camera);\n const gl = useThree(state => state.gl);\n const invalidate = useThree(state => state.invalidate);\n const events = useThree(state => state.events);\n const setEvents = useThree(state => state.setEvents);\n const set = useThree(state => state.set);\n const get = useThree(state => state.get);\n const performance = useThree(state => state.performance);\n const explCamera = camera || defaultCamera;\n const explDomElement = domElement || events.connected || gl.domElement;\n const controls = useMemo(() => new Impl(explCamera), [Impl, explCamera]);\n useFrame((state, delta) => {\n controls.update(delta);\n }, -1);\n useEffect(() => {\n controls.connect(explDomElement);\n return () => void controls.disconnect();\n }, [explDomElement, controls]);\n useEffect(() => {\n function invalidateAndRegress() {\n invalidate();\n if (regress) performance.regress();\n }\n const handleControlStart = e => {\n invalidateAndRegress();\n onControlStart == null || onControlStart(e);\n onStart == null || onStart(e); // backwards compatibility\n };\n const handleControl = e => {\n invalidateAndRegress();\n onControl == null || onControl(e);\n onChange == null || onChange(e); // backwards compatibility\n };\n const handleControlEnd = e => {\n onControlEnd == null || onControlEnd(e);\n onEnd == null || onEnd(e); // backwards compatibility\n };\n const handleTransitionStart = e => {\n invalidateAndRegress();\n onTransitionStart == null || onTransitionStart(e);\n onChange == null || onChange(e); // backwards compatibility\n };\n const handleUpdate = e => {\n invalidateAndRegress();\n onUpdate == null || onUpdate(e);\n onChange == null || onChange(e); // backwards compatibility\n };\n const handleWake = e => {\n invalidateAndRegress();\n onWake == null || onWake(e);\n onChange == null || onChange(e); // backwards compatibility\n };\n const handleRest = e => {\n onRest == null || onRest(e);\n };\n const handleSleep = e => {\n onSleep == null || onSleep(e);\n };\n controls.addEventListener('controlstart', handleControlStart);\n controls.addEventListener('control', handleControl);\n controls.addEventListener('controlend', handleControlEnd);\n controls.addEventListener('transitionstart', handleTransitionStart);\n controls.addEventListener('update', handleUpdate);\n controls.addEventListener('wake', handleWake);\n controls.addEventListener('rest', handleRest);\n controls.addEventListener('sleep', handleSleep);\n return () => {\n controls.removeEventListener('controlstart', handleControlStart);\n controls.removeEventListener('control', handleControl);\n controls.removeEventListener('controlend', handleControlEnd);\n controls.removeEventListener('transitionstart', handleTransitionStart);\n controls.removeEventListener('update', handleUpdate);\n controls.removeEventListener('wake', handleWake);\n controls.removeEventListener('rest', handleRest);\n controls.removeEventListener('sleep', handleSleep);\n };\n }, [controls, invalidate, setEvents, regress, performance, onControlStart, onControl, onControlEnd, onTransitionStart, onUpdate, onWake, onRest, onSleep, onChange, onStart, onEnd]);\n useEffect(() => {\n if (makeDefault) {\n const old = get().controls;\n set({\n controls: controls\n });\n return () => set({\n controls: old\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [makeDefault, controls]);\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n ref: ref,\n object: controls\n }, restProps));\n});\n\nexport { CameraControls };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { useThree, useInstanceHandle, useFrame } from '@react-three/fiber';\nimport { misc, easing } from 'maath';\n\nconst isObject3DRef = ref => (ref == null ? void 0 : ref.current) instanceof THREE.Object3D;\nconst MotionContext = /* @__PURE__ */React.createContext(null);\nfunction useMotion() {\n const context = React.useContext(MotionContext);\n if (!context) throw new Error('useMotion hook must be used in a MotionPathControls component.');\n return context;\n}\nfunction Debug({\n points = 50,\n color = 'black'\n}) {\n const {\n path\n } = useMotion();\n const [dots, setDots] = React.useState([]);\n const material = React.useMemo(() => new THREE.MeshBasicMaterial({\n color: color\n }), [color]);\n const geometry = React.useMemo(() => new THREE.SphereGeometry(0.025, 16, 16), []);\n const last = React.useRef([]);\n React.useEffect(() => {\n if (path.curves !== last.current) {\n setDots(path.getPoints(points));\n last.current = path.curves;\n }\n });\n return dots.map((item, index) => /*#__PURE__*/React.createElement(\"mesh\", {\n key: index,\n material: material,\n geometry: geometry,\n position: [item.x, item.y, item.z]\n }));\n}\nconst MotionPathControls = /* @__PURE__ */React.forwardRef(({\n children,\n curves = [],\n debug = false,\n debugColor = 'black',\n object,\n focus,\n loop = true,\n offset = undefined,\n smooth = false,\n eps = 0.00001,\n damping = 0.1,\n focusDamping = 0.1,\n maxSpeed = Infinity,\n ...props\n}, fref) => {\n const {\n camera\n } = useThree();\n const ref = React.useRef(null);\n const pos = React.useRef(offset !== null && offset !== void 0 ? offset : 0);\n const path = React.useMemo(() => new THREE.CurvePath(), []);\n const state = React.useMemo(() => ({\n focus,\n object: (object == null ? void 0 : object.current) instanceof THREE.Object3D ? object : {\n current: camera\n },\n path,\n current: pos.current,\n offset: pos.current,\n point: new THREE.Vector3(),\n tangent: new THREE.Vector3(),\n next: new THREE.Vector3()\n }), [focus, object]);\n const instanceRef = useInstanceHandle(ref);\n React.useLayoutEffect(() => {\n const instance = instanceRef.current;\n path.curves = [];\n const _curves = curves.length > 0 ? curves : instance.children.map(instance => instance.object);\n for (let i = 0; i < _curves.length; i++) path.add(_curves[i]);\n\n // Smoothen curve\n if (smooth) {\n const points = path.getPoints(typeof smooth === 'number' ? smooth : 1);\n const catmull = new THREE.CatmullRomCurve3(points);\n path.curves = [catmull];\n }\n path.updateArcLengths();\n });\n React.useImperativeHandle(fref, () => Object.assign(ref.current, {\n motion: state\n }), [state]);\n React.useLayoutEffect(() => {\n // When offset changes, normalise pos to avoid overshoot spinning\n pos.current = misc.repeat(pos.current, 1);\n }, [offset]);\n const vec = React.useMemo(() => new THREE.Vector3(), []);\n useFrame((_state, delta) => {\n const lastOffset = state.offset;\n easing.damp(pos, 'current', offset !== undefined ? offset : state.current, damping, delta, maxSpeed, undefined, eps);\n state.offset = loop ? misc.repeat(pos.current, 1) : misc.clamp(pos.current, 0, 1);\n if (path.getCurveLengths().length > 0) {\n path.getPointAt(state.offset, state.point);\n path.getTangentAt(state.offset, state.tangent).normalize();\n path.getPointAt(misc.repeat(pos.current - (lastOffset - state.offset), 1), state.next);\n const target = (object == null ? void 0 : object.current) instanceof THREE.Object3D ? object.current : camera;\n target.position.copy(state.point);\n if (focus) {\n easing.dampLookAt(target, isObject3DRef(focus) ? focus.current.getWorldPosition(vec) : focus, focusDamping, delta, maxSpeed, undefined, eps);\n }\n }\n });\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref\n }, props), /*#__PURE__*/React.createElement(MotionContext.Provider, {\n value: state\n }, children, debug && /*#__PURE__*/React.createElement(Debug, {\n color: debugColor\n })));\n});\n\nexport { MotionPathControls, useMotion };\n","import * as THREE from 'three';\nimport * as React from 'react';\nimport { useThree, createPortal, useFrame } from '@react-three/fiber';\n\nfunction RenderHud({\n defaultScene,\n defaultCamera,\n renderPriority = 1\n}) {\n const {\n gl,\n scene,\n camera\n } = useThree();\n let oldCLear;\n useFrame(() => {\n oldCLear = gl.autoClear;\n if (renderPriority === 1) {\n // Clear scene and render the default scene\n gl.autoClear = true;\n gl.render(defaultScene, defaultCamera);\n }\n // Disable cleaning and render the portal with its own camera\n gl.autoClear = false;\n gl.clearDepth();\n gl.render(scene, camera);\n // Restore default\n gl.autoClear = oldCLear;\n }, renderPriority);\n // Without an element that receives pointer events state.pointer will always be 0/0\n return /*#__PURE__*/React.createElement(\"group\", {\n onPointerOver: () => null\n });\n}\nfunction Hud({\n children,\n renderPriority = 1\n}) {\n const {\n scene: defaultScene,\n camera: defaultCamera\n } = useThree();\n const [hudScene] = React.useState(() => new THREE.Scene());\n return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal(/*#__PURE__*/React.createElement(React.Fragment, null, children, /*#__PURE__*/React.createElement(RenderHud, {\n defaultScene: defaultScene,\n defaultCamera: defaultCamera,\n renderPriority: renderPriority\n })), hudScene, {\n events: {\n priority: renderPriority + 1\n }\n }));\n}\n\nexport { Hud };\n","import * as React from 'react';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { Vector3, Object3D, Matrix4, Quaternion } from 'three';\nimport { OrthographicCamera } from './OrthographicCamera.js';\nimport { Hud } from './Hud.js';\n\nconst Context = /* @__PURE__ */React.createContext({});\nconst useGizmoContext = () => {\n return React.useContext(Context);\n};\nconst turnRate = 2 * Math.PI; // turn rate in angles per second\nconst dummy = /* @__PURE__ */new Object3D();\nconst matrix = /* @__PURE__ */new Matrix4();\nconst [q1, q2] = [/* @__PURE__ */new Quaternion(), /* @__PURE__ */new Quaternion()];\nconst target = /* @__PURE__ */new Vector3();\nconst targetPosition = /* @__PURE__ */new Vector3();\nconst isOrbitControls = controls => {\n return 'minPolarAngle' in controls;\n};\nconst isCameraControls = controls => {\n return 'getTarget' in controls;\n};\nconst GizmoHelper = ({\n alignment = 'bottom-right',\n margin = [80, 80],\n renderPriority = 1,\n onUpdate,\n onTarget,\n children\n}) => {\n const size = useThree(state => state.size);\n const mainCamera = useThree(state => state.camera);\n // @ts-ignore\n const defaultControls = useThree(state => state.controls);\n const invalidate = useThree(state => state.invalidate);\n const gizmoRef = React.useRef(null);\n const virtualCam = React.useRef(null);\n const animating = React.useRef(false);\n const radius = React.useRef(0);\n const focusPoint = React.useRef(new Vector3(0, 0, 0));\n const defaultUp = React.useRef(new Vector3(0, 0, 0));\n React.useEffect(() => {\n defaultUp.current.copy(mainCamera.up);\n dummy.up.copy(mainCamera.up);\n }, [mainCamera]);\n const tweenCamera = React.useCallback(direction => {\n animating.current = true;\n if (defaultControls || onTarget) {\n focusPoint.current = (onTarget == null ? void 0 : onTarget()) || (isCameraControls(defaultControls) ? defaultControls.getTarget(focusPoint.current) : defaultControls == null ? void 0 : defaultControls.target);\n }\n radius.current = mainCamera.position.distanceTo(target);\n\n // Rotate from current camera orientation\n q1.copy(mainCamera.quaternion);\n\n // To new current camera orientation\n targetPosition.copy(direction).multiplyScalar(radius.current).add(target);\n dummy.lookAt(targetPosition);\n q2.copy(dummy.quaternion);\n invalidate();\n }, [defaultControls, mainCamera, onTarget, invalidate]);\n useFrame((_, delta) => {\n if (virtualCam.current && gizmoRef.current) {\n var _gizmoRef$current;\n // Animate step\n if (animating.current) {\n if (q1.angleTo(q2) < 0.01) {\n animating.current = false;\n // Orbit controls uses UP vector as the orbit axes,\n // so we need to reset it after the animation is done\n // moving it around for the controls to work correctly\n if (isOrbitControls(defaultControls)) {\n mainCamera.up.copy(defaultUp.current);\n }\n } else {\n const step = delta * turnRate;\n // animate position by doing a slerp and then scaling the position on the unit sphere\n q1.rotateTowards(q2, step);\n // animate orientation\n mainCamera.position.set(0, 0, 1).applyQuaternion(q1).multiplyScalar(radius.current).add(focusPoint.current);\n mainCamera.up.set(0, 1, 0).applyQuaternion(q1).normalize();\n mainCamera.quaternion.copy(q1);\n if (isCameraControls(defaultControls)) defaultControls.setPosition(mainCamera.position.x, mainCamera.position.y, mainCamera.position.z);\n if (onUpdate) onUpdate();else if (defaultControls) defaultControls.update(delta);\n invalidate();\n }\n }\n\n // Sync Gizmo with main camera orientation\n matrix.copy(mainCamera.matrix).invert();\n (_gizmoRef$current = gizmoRef.current) == null || _gizmoRef$current.quaternion.setFromRotationMatrix(matrix);\n }\n });\n const gizmoHelperContext = React.useMemo(() => ({\n tweenCamera\n }), [tweenCamera]);\n\n // Position gizmo component within scene\n const [marginX, marginY] = margin;\n const x = alignment.endsWith('-center') ? 0 : alignment.endsWith('-left') ? -size.width / 2 + marginX : size.width / 2 - marginX;\n const y = alignment.startsWith('center-') ? 0 : alignment.startsWith('top-') ? size.height / 2 - marginY : -size.height / 2 + marginY;\n return /*#__PURE__*/React.createElement(Hud, {\n renderPriority: renderPriority\n }, /*#__PURE__*/React.createElement(Context.Provider, {\n value: gizmoHelperContext\n }, /*#__PURE__*/React.createElement(OrthographicCamera, {\n makeDefault: true,\n ref: virtualCam,\n position: [0, 0, 200]\n }), /*#__PURE__*/React.createElement(\"group\", {\n ref: gizmoRef,\n position: [x, y, 0]\n }, children)));\n};\n\nexport { GizmoHelper, useGizmoContext };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useThree } from '@react-three/fiber';\nimport { useGizmoContext } from './GizmoHelper.js';\nimport { Vector3, CanvasTexture } from 'three';\n\nconst colors = {\n bg: '#f0f0f0',\n hover: '#999',\n text: 'black',\n stroke: 'black'\n};\nconst defaultFaces = ['Right', 'Left', 'Top', 'Bottom', 'Front', 'Back'];\nconst makePositionVector = xyz => new Vector3(...xyz).multiplyScalar(0.38);\nconst corners = /* @__PURE__ */[[1, 1, 1], [1, 1, -1], [1, -1, 1], [1, -1, -1], [-1, 1, 1], [-1, 1, -1], [-1, -1, 1], [-1, -1, -1]].map(makePositionVector);\nconst cornerDimensions = [0.25, 0.25, 0.25];\nconst edges = /* @__PURE__ */[[1, 1, 0], [1, 0, 1], [1, 0, -1], [1, -1, 0], [0, 1, 1], [0, 1, -1], [0, -1, 1], [0, -1, -1], [-1, 1, 0], [-1, 0, 1], [-1, 0, -1], [-1, -1, 0]].map(makePositionVector);\nconst edgeDimensions = /* @__PURE__ */edges.map(edge => edge.toArray().map(axis => axis == 0 ? 0.5 : 0.25));\nconst FaceMaterial = ({\n hover,\n index,\n font = '20px Inter var, Arial, sans-serif',\n faces = defaultFaces,\n color = colors.bg,\n hoverColor = colors.hover,\n textColor = colors.text,\n strokeColor = colors.stroke,\n opacity = 1\n}) => {\n const gl = useThree(state => state.gl);\n const texture = React.useMemo(() => {\n const canvas = document.createElement('canvas');\n canvas.width = 128;\n canvas.height = 128;\n const context = canvas.getContext('2d');\n context.fillStyle = color;\n context.fillRect(0, 0, canvas.width, canvas.height);\n context.strokeStyle = strokeColor;\n context.strokeRect(0, 0, canvas.width, canvas.height);\n context.font = font;\n context.textAlign = 'center';\n context.fillStyle = textColor;\n context.fillText(faces[index].toUpperCase(), 64, 76);\n return new CanvasTexture(canvas);\n }, [index, faces, font, color, textColor, strokeColor]);\n return /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n map: texture,\n \"map-anisotropy\": gl.capabilities.getMaxAnisotropy() || 1,\n attach: `material-${index}`,\n color: hover ? hoverColor : 'white',\n transparent: true,\n opacity: opacity\n });\n};\nconst FaceCube = props => {\n const {\n tweenCamera\n } = useGizmoContext();\n const [hover, setHover] = React.useState(null);\n const handlePointerOut = e => {\n e.stopPropagation();\n setHover(null);\n };\n const handleClick = e => {\n e.stopPropagation();\n tweenCamera(e.face.normal);\n };\n const handlePointerMove = e => {\n e.stopPropagation();\n setHover(Math.floor(e.faceIndex / 2));\n };\n return /*#__PURE__*/React.createElement(\"mesh\", {\n onPointerOut: handlePointerOut,\n onPointerMove: handlePointerMove,\n onClick: props.onClick || handleClick\n }, [...Array(6)].map((_, index) => /*#__PURE__*/React.createElement(FaceMaterial, _extends({\n key: index,\n index: index,\n hover: hover === index\n }, props))), /*#__PURE__*/React.createElement(\"boxGeometry\", null));\n};\nconst EdgeCube = ({\n onClick,\n dimensions,\n position,\n hoverColor = colors.hover\n}) => {\n const {\n tweenCamera\n } = useGizmoContext();\n const [hover, setHover] = React.useState(false);\n const handlePointerOut = e => {\n e.stopPropagation();\n setHover(false);\n };\n const handlePointerOver = e => {\n e.stopPropagation();\n setHover(true);\n };\n const handleClick = e => {\n e.stopPropagation();\n tweenCamera(position);\n };\n return /*#__PURE__*/React.createElement(\"mesh\", {\n scale: 1.01,\n position: position,\n onPointerOver: handlePointerOver,\n onPointerOut: handlePointerOut,\n onClick: onClick || handleClick\n }, /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n color: hover ? hoverColor : 'white',\n transparent: true,\n opacity: 0.6,\n visible: hover\n }), /*#__PURE__*/React.createElement(\"boxGeometry\", {\n args: dimensions\n }));\n};\nconst GizmoViewcube = props => {\n return /*#__PURE__*/React.createElement(\"group\", {\n scale: [60, 60, 60]\n }, /*#__PURE__*/React.createElement(FaceCube, props), edges.map((edge, index) => /*#__PURE__*/React.createElement(EdgeCube, _extends({\n key: index,\n position: edge,\n dimensions: edgeDimensions[index]\n }, props))), corners.map((corner, index) => /*#__PURE__*/React.createElement(EdgeCube, _extends({\n key: index,\n position: corner,\n dimensions: cornerDimensions\n }, props))));\n};\n\nexport { GizmoViewcube };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useThree } from '@react-three/fiber';\nimport { CanvasTexture } from 'three';\nimport { useGizmoContext } from './GizmoHelper.js';\n\nfunction Axis({\n scale = [0.8, 0.05, 0.05],\n color,\n rotation\n}) {\n return /*#__PURE__*/React.createElement(\"group\", {\n rotation: rotation\n }, /*#__PURE__*/React.createElement(\"mesh\", {\n position: [0.4, 0, 0]\n }, /*#__PURE__*/React.createElement(\"boxGeometry\", {\n args: scale\n }), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n color: color,\n toneMapped: false\n })));\n}\nfunction AxisHead({\n onClick,\n font,\n disabled,\n arcStyle,\n label,\n labelColor,\n axisHeadScale = 1,\n ...props\n}) {\n const gl = useThree(state => state.gl);\n const texture = React.useMemo(() => {\n const canvas = document.createElement('canvas');\n canvas.width = 64;\n canvas.height = 64;\n const context = canvas.getContext('2d');\n context.beginPath();\n context.arc(32, 32, 16, 0, 2 * Math.PI);\n context.closePath();\n context.fillStyle = arcStyle;\n context.fill();\n if (label) {\n context.font = font;\n context.textAlign = 'center';\n context.fillStyle = labelColor;\n context.fillText(label, 32, 41);\n }\n return new CanvasTexture(canvas);\n }, [arcStyle, label, labelColor, font]);\n const [active, setActive] = React.useState(false);\n const scale = (label ? 1 : 0.75) * (active ? 1.2 : 1) * axisHeadScale;\n const handlePointerOver = e => {\n e.stopPropagation();\n setActive(true);\n };\n const handlePointerOut = e => {\n e.stopPropagation();\n setActive(false);\n };\n return /*#__PURE__*/React.createElement(\"sprite\", _extends({\n scale: scale,\n onPointerOver: !disabled ? handlePointerOver : undefined,\n onPointerOut: !disabled ? onClick || handlePointerOut : undefined\n }, props), /*#__PURE__*/React.createElement(\"spriteMaterial\", {\n map: texture,\n \"map-anisotropy\": gl.capabilities.getMaxAnisotropy() || 1,\n alphaTest: 0.3,\n opacity: label ? 1 : 0.75,\n toneMapped: false\n }));\n}\nconst GizmoViewport = ({\n hideNegativeAxes,\n hideAxisHeads,\n disabled,\n font = '18px Inter var, Arial, sans-serif',\n axisColors = ['#ff2060', '#20df80', '#2080ff'],\n axisHeadScale = 1,\n axisScale,\n labels = ['X', 'Y', 'Z'],\n labelColor = '#000',\n onClick,\n ...props\n}) => {\n const [colorX, colorY, colorZ] = axisColors;\n const {\n tweenCamera\n } = useGizmoContext();\n const axisHeadProps = {\n font,\n disabled,\n labelColor,\n onClick,\n axisHeadScale,\n onPointerDown: !disabled ? e => {\n tweenCamera(e.object.position);\n e.stopPropagation();\n } : undefined\n };\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n scale: 40\n }, props), /*#__PURE__*/React.createElement(Axis, {\n color: colorX,\n rotation: [0, 0, 0],\n scale: axisScale\n }), /*#__PURE__*/React.createElement(Axis, {\n color: colorY,\n rotation: [0, 0, Math.PI / 2],\n scale: axisScale\n }), /*#__PURE__*/React.createElement(Axis, {\n color: colorZ,\n rotation: [0, -Math.PI / 2, 0],\n scale: axisScale\n }), !hideAxisHeads && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(AxisHead, _extends({\n arcStyle: colorX,\n position: [1, 0, 0],\n label: labels[0]\n }, axisHeadProps)), /*#__PURE__*/React.createElement(AxisHead, _extends({\n arcStyle: colorY,\n position: [0, 1, 0],\n label: labels[1]\n }, axisHeadProps)), /*#__PURE__*/React.createElement(AxisHead, _extends({\n arcStyle: colorZ,\n position: [0, 0, 1],\n label: labels[2]\n }, axisHeadProps)), !hideNegativeAxes && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(AxisHead, _extends({\n arcStyle: colorX,\n position: [-1, 0, 0]\n }, axisHeadProps)), /*#__PURE__*/React.createElement(AxisHead, _extends({\n arcStyle: colorY,\n position: [0, -1, 0]\n }, axisHeadProps)), /*#__PURE__*/React.createElement(AxisHead, _extends({\n arcStyle: colorZ,\n position: [0, 0, -1]\n }, axisHeadProps)))));\n};\n\nexport { GizmoViewport };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { extend, useFrame } from '@react-three/fiber';\nimport { shaderMaterial } from './shaderMaterial.js';\nimport { version } from '../helpers/constants.js';\n\nconst GridMaterial = /* @__PURE__ */shaderMaterial({\n cellSize: 0.5,\n sectionSize: 1,\n fadeDistance: 100,\n fadeStrength: 1,\n fadeFrom: 1,\n cellThickness: 0.5,\n sectionThickness: 1,\n cellColor: /* @__PURE__ */new THREE.Color(),\n sectionColor: /* @__PURE__ */new THREE.Color(),\n infiniteGrid: false,\n followCamera: false,\n worldCamProjPosition: /* @__PURE__ */new THREE.Vector3(),\n worldPlanePosition: /* @__PURE__ */new THREE.Vector3()\n}, /* glsl */`\n varying vec3 localPosition;\n varying vec4 worldPosition;\n\n uniform vec3 worldCamProjPosition;\n uniform vec3 worldPlanePosition;\n uniform float fadeDistance;\n uniform bool infiniteGrid;\n uniform bool followCamera;\n\n void main() {\n localPosition = position.xzy;\n if (infiniteGrid) localPosition *= 1.0 + fadeDistance;\n \n worldPosition = modelMatrix * vec4(localPosition, 1.0);\n if (followCamera) {\n worldPosition.xyz += (worldCamProjPosition - worldPlanePosition);\n localPosition = (inverse(modelMatrix) * worldPosition).xyz;\n }\n\n gl_Position = projectionMatrix * viewMatrix * worldPosition;\n }\n `, /* glsl */`\n varying vec3 localPosition;\n varying vec4 worldPosition;\n\n uniform vec3 worldCamProjPosition;\n uniform float cellSize;\n uniform float sectionSize;\n uniform vec3 cellColor;\n uniform vec3 sectionColor;\n uniform float fadeDistance;\n uniform float fadeStrength;\n uniform float fadeFrom;\n uniform float cellThickness;\n uniform float sectionThickness;\n\n float getGrid(float size, float thickness) {\n vec2 r = localPosition.xz / size;\n vec2 grid = abs(fract(r - 0.5) - 0.5) / fwidth(r);\n float line = min(grid.x, grid.y) + 1.0 - thickness;\n return 1.0 - min(line, 1.0);\n }\n\n void main() {\n float g1 = getGrid(cellSize, cellThickness);\n float g2 = getGrid(sectionSize, sectionThickness);\n\n vec3 from = worldCamProjPosition*vec3(fadeFrom);\n float dist = distance(from, worldPosition.xyz);\n float d = 1.0 - min(dist / fadeDistance, 1.0);\n vec3 color = mix(cellColor, sectionColor, min(1.0, sectionThickness * g2));\n\n gl_FragColor = vec4(color, (g1 + g2) * pow(d, fadeStrength));\n gl_FragColor.a = mix(0.75 * gl_FragColor.a, gl_FragColor.a, g2);\n if (gl_FragColor.a <= 0.0) discard;\n\n #include \n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }\n `);\nconst Grid = /* @__PURE__ */React.forwardRef(({\n args,\n cellColor = '#000000',\n sectionColor = '#2080ff',\n cellSize = 0.5,\n sectionSize = 1,\n followCamera = false,\n infiniteGrid = false,\n fadeDistance = 100,\n fadeStrength = 1,\n fadeFrom = 1,\n cellThickness = 0.5,\n sectionThickness = 1,\n side = THREE.BackSide,\n ...props\n}, fRef) => {\n extend({\n GridMaterial\n });\n const ref = React.useRef(null);\n React.useImperativeHandle(fRef, () => ref.current, []);\n const plane = new THREE.Plane();\n const upVector = new THREE.Vector3(0, 1, 0);\n const zeroVector = new THREE.Vector3(0, 0, 0);\n useFrame(state => {\n plane.setFromNormalAndCoplanarPoint(upVector, zeroVector).applyMatrix4(ref.current.matrixWorld);\n const gridMaterial = ref.current.material;\n const worldCamProjPosition = gridMaterial.uniforms.worldCamProjPosition;\n const worldPlanePosition = gridMaterial.uniforms.worldPlanePosition;\n plane.projectPoint(state.camera.position, worldCamProjPosition.value);\n worldPlanePosition.value.set(0, 0, 0).applyMatrix4(ref.current.matrixWorld);\n });\n const uniforms1 = {\n cellSize,\n sectionSize,\n cellColor,\n sectionColor,\n cellThickness,\n sectionThickness\n };\n const uniforms2 = {\n fadeDistance,\n fadeStrength,\n fadeFrom,\n infiniteGrid,\n followCamera\n };\n return /*#__PURE__*/React.createElement(\"mesh\", _extends({\n ref: ref,\n frustumCulled: false\n }, props), /*#__PURE__*/React.createElement(\"gridMaterial\", _extends({\n transparent: true,\n \"extensions-derivatives\": true,\n side: side\n }, uniforms1, uniforms2)), /*#__PURE__*/React.createElement(\"planeGeometry\", {\n args: args\n }));\n});\n\nexport { Grid };\n","import * as React from 'react';\nimport { CubeTextureLoader } from 'three';\nimport { useLoader } from '@react-three/fiber';\n\nfunction useCubeTexture(files, {\n path\n}) {\n const [cubeTexture] = useLoader(CubeTextureLoader, [files], loader => loader.setPath(path));\n return cubeTexture;\n}\nuseCubeTexture.preload = (files, {\n path\n}) => useLoader.preload(CubeTextureLoader, [files], loader => loader.setPath(path));\nfunction CubeTexture({\n children,\n files,\n ...options\n}) {\n const texture = useCubeTexture(files, {\n ...options\n });\n return /*#__PURE__*/React.createElement(React.Fragment, null, children == null ? void 0 : children(texture));\n}\n\nexport { CubeTexture, useCubeTexture };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { FBXLoader } from 'three-stdlib';\nimport { useLoader } from '@react-three/fiber';\nimport { Clone } from './Clone.js';\n\nfunction useFBX(path) {\n return useLoader(FBXLoader, path);\n}\nuseFBX.preload = path => useLoader.preload(FBXLoader, path);\nuseFBX.clear = input => useLoader.clear(FBXLoader, input);\nfunction Fbx({\n path,\n ...props\n}) {\n const fbx = useFBX(path);\n const object = fbx.children[0];\n return /*#__PURE__*/React.createElement(Clone, _extends({}, props, {\n object: object\n }));\n}\n\nexport { Fbx, useFBX };\n","import * as React from 'react';\nimport { useEffect } from 'react';\nimport { useThree, useLoader } from '@react-three/fiber';\nimport { KTX2Loader } from 'three-stdlib';\nimport { IsObject } from './Texture.js';\n\nconst cdn = 'https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master';\nfunction useKTX2(input, basisPath = `${cdn}/basis/`) {\n const gl = useThree(state => state.gl);\n const textures = useLoader(KTX2Loader, IsObject(input) ? Object.values(input) : input, loader => {\n loader.detectSupport(gl);\n loader.setTranscoderPath(basisPath);\n });\n\n // https://github.com/mrdoob/three.js/issues/22696\n // Upload the texture to the GPU immediately instead of waiting for the first render\n useEffect(() => {\n const array = Array.isArray(textures) ? textures : [textures];\n array.forEach(gl.initTexture);\n }, [gl, textures]);\n if (IsObject(input)) {\n const keys = Object.keys(input);\n const keyed = {};\n keys.forEach(key => Object.assign(keyed, {\n [key]: textures[keys.indexOf(key)]\n }));\n return keyed;\n } else {\n return textures;\n }\n}\nuseKTX2.preload = (url, basisPath = `${cdn}/basis/`) => useLoader.preload(KTX2Loader, url, loader => {\n loader.setTranscoderPath(basisPath);\n});\nuseKTX2.clear = input => useLoader.clear(KTX2Loader, input);\n\n//\n\nconst Ktx2 = ({\n children,\n input,\n basisPath\n}) => {\n const texture = useKTX2(input, basisPath);\n return /*#__PURE__*/React.createElement(React.Fragment, null, children == null ? void 0 : children(texture));\n};\n\nexport { Ktx2, useKTX2 };\n","// https://caniuse.com/mdn-javascript_builtins_number_isfinite\nconst isFiniteNumber = Number.isFinite || function (value) {\n return typeof value === 'number' && isFinite(value);\n};\n\n// https://caniuse.com/mdn-javascript_builtins_number_issafeinteger\nconst isSafeInteger = Number.isSafeInteger || function (value) {\n return typeof value === 'number' && Math.abs(value) <= MAX_SAFE_INTEGER;\n};\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\n\nlet ErrorTypes = /*#__PURE__*/function (ErrorTypes) {\n // Identifier for a network error (loading error / timeout ...)\n ErrorTypes[\"NETWORK_ERROR\"] = \"networkError\";\n // Identifier for a media Error (video/parsing/mediasource error)\n ErrorTypes[\"MEDIA_ERROR\"] = \"mediaError\";\n // EME (encrypted media extensions) errors\n ErrorTypes[\"KEY_SYSTEM_ERROR\"] = \"keySystemError\";\n // Identifier for a mux Error (demuxing/remuxing)\n ErrorTypes[\"MUX_ERROR\"] = \"muxError\";\n // Identifier for all other errors\n ErrorTypes[\"OTHER_ERROR\"] = \"otherError\";\n return ErrorTypes;\n}({});\nlet ErrorDetails = /*#__PURE__*/function (ErrorDetails) {\n ErrorDetails[\"KEY_SYSTEM_NO_KEYS\"] = \"keySystemNoKeys\";\n ErrorDetails[\"KEY_SYSTEM_NO_ACCESS\"] = \"keySystemNoAccess\";\n ErrorDetails[\"KEY_SYSTEM_NO_SESSION\"] = \"keySystemNoSession\";\n ErrorDetails[\"KEY_SYSTEM_NO_CONFIGURED_LICENSE\"] = \"keySystemNoConfiguredLicense\";\n ErrorDetails[\"KEY_SYSTEM_LICENSE_REQUEST_FAILED\"] = \"keySystemLicenseRequestFailed\";\n ErrorDetails[\"KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED\"] = \"keySystemServerCertificateRequestFailed\";\n ErrorDetails[\"KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED\"] = \"keySystemServerCertificateUpdateFailed\";\n ErrorDetails[\"KEY_SYSTEM_SESSION_UPDATE_FAILED\"] = \"keySystemSessionUpdateFailed\";\n ErrorDetails[\"KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED\"] = \"keySystemStatusOutputRestricted\";\n ErrorDetails[\"KEY_SYSTEM_STATUS_INTERNAL_ERROR\"] = \"keySystemStatusInternalError\";\n ErrorDetails[\"KEY_SYSTEM_DESTROY_MEDIA_KEYS_ERROR\"] = \"keySystemDestroyMediaKeysError\";\n ErrorDetails[\"KEY_SYSTEM_DESTROY_CLOSE_SESSION_ERROR\"] = \"keySystemDestroyCloseSessionError\";\n ErrorDetails[\"KEY_SYSTEM_DESTROY_REMOVE_SESSION_ERROR\"] = \"keySystemDestroyRemoveSessionError\";\n // Identifier for a manifest load error - data: { url : faulty URL, response : { code: error code, text: error text }}\n ErrorDetails[\"MANIFEST_LOAD_ERROR\"] = \"manifestLoadError\";\n // Identifier for a manifest load timeout - data: { url : faulty URL, response : { code: error code, text: error text }}\n ErrorDetails[\"MANIFEST_LOAD_TIMEOUT\"] = \"manifestLoadTimeOut\";\n // Identifier for a manifest parsing error - data: { url : faulty URL, reason : error reason}\n ErrorDetails[\"MANIFEST_PARSING_ERROR\"] = \"manifestParsingError\";\n // Identifier for a manifest with only incompatible codecs error - data: { url : faulty URL, reason : error reason}\n ErrorDetails[\"MANIFEST_INCOMPATIBLE_CODECS_ERROR\"] = \"manifestIncompatibleCodecsError\";\n // Identifier for a level which contains no fragments - data: { url: faulty URL, reason: \"no fragments found in level\", level: index of the bad level }\n ErrorDetails[\"LEVEL_EMPTY_ERROR\"] = \"levelEmptyError\";\n // Identifier for a level load error - data: { url : faulty URL, response : { code: error code, text: error text }}\n ErrorDetails[\"LEVEL_LOAD_ERROR\"] = \"levelLoadError\";\n // Identifier for a level load timeout - data: { url : faulty URL, response : { code: error code, text: error text }}\n ErrorDetails[\"LEVEL_LOAD_TIMEOUT\"] = \"levelLoadTimeOut\";\n // Identifier for a level parse error - data: { url : faulty URL, error: Error, reason: error message }\n ErrorDetails[\"LEVEL_PARSING_ERROR\"] = \"levelParsingError\";\n // Identifier for a level switch error - data: { level : faulty level Id, event : error description}\n ErrorDetails[\"LEVEL_SWITCH_ERROR\"] = \"levelSwitchError\";\n // Identifier for an audio track load error - data: { url : faulty URL, response : { code: error code, text: error text }}\n ErrorDetails[\"AUDIO_TRACK_LOAD_ERROR\"] = \"audioTrackLoadError\";\n // Identifier for an audio track load timeout - data: { url : faulty URL, response : { code: error code, text: error text }}\n ErrorDetails[\"AUDIO_TRACK_LOAD_TIMEOUT\"] = \"audioTrackLoadTimeOut\";\n // Identifier for a subtitle track load error - data: { url : faulty URL, response : { code: error code, text: error text }}\n ErrorDetails[\"SUBTITLE_LOAD_ERROR\"] = \"subtitleTrackLoadError\";\n // Identifier for a subtitle track load timeout - data: { url : faulty URL, response : { code: error code, text: error text }}\n ErrorDetails[\"SUBTITLE_TRACK_LOAD_TIMEOUT\"] = \"subtitleTrackLoadTimeOut\";\n // Identifier for fragment load error - data: { frag : fragment object, response : { code: error code, text: error text }}\n ErrorDetails[\"FRAG_LOAD_ERROR\"] = \"fragLoadError\";\n // Identifier for fragment load timeout error - data: { frag : fragment object}\n ErrorDetails[\"FRAG_LOAD_TIMEOUT\"] = \"fragLoadTimeOut\";\n // Identifier for a fragment decryption error event - data: {id : demuxer Id,frag: fragment object, reason : parsing error description }\n ErrorDetails[\"FRAG_DECRYPT_ERROR\"] = \"fragDecryptError\";\n // Identifier for a fragment parsing error event - data: { id : demuxer Id, reason : parsing error description }\n // will be renamed DEMUX_PARSING_ERROR and switched to MUX_ERROR in the next major release\n ErrorDetails[\"FRAG_PARSING_ERROR\"] = \"fragParsingError\";\n // Identifier for a fragment or part load skipped because of a GAP tag or attribute\n ErrorDetails[\"FRAG_GAP\"] = \"fragGap\";\n // Identifier for a remux alloc error event - data: { id : demuxer Id, frag : fragment object, bytes : nb of bytes on which allocation failed , reason : error text }\n ErrorDetails[\"REMUX_ALLOC_ERROR\"] = \"remuxAllocError\";\n // Identifier for decrypt key load error - data: { frag : fragment object, response : { code: error code, text: error text }}\n ErrorDetails[\"KEY_LOAD_ERROR\"] = \"keyLoadError\";\n // Identifier for decrypt key load timeout error - data: { frag : fragment object}\n ErrorDetails[\"KEY_LOAD_TIMEOUT\"] = \"keyLoadTimeOut\";\n // Triggered when an exception occurs while adding a sourceBuffer to MediaSource - data : { error : exception , mimeType : mimeType }\n ErrorDetails[\"BUFFER_ADD_CODEC_ERROR\"] = \"bufferAddCodecError\";\n // Triggered when source buffer(s) could not be created using level (manifest CODECS attribute), parsed media, or best guess codec(s) - data: { reason : error reason }\n ErrorDetails[\"BUFFER_INCOMPATIBLE_CODECS_ERROR\"] = \"bufferIncompatibleCodecsError\";\n // Identifier for a buffer append error - data: append error description\n ErrorDetails[\"BUFFER_APPEND_ERROR\"] = \"bufferAppendError\";\n // Identifier for a buffer appending error event - data: appending error description\n ErrorDetails[\"BUFFER_APPENDING_ERROR\"] = \"bufferAppendingError\";\n // Identifier for a buffer stalled error event\n ErrorDetails[\"BUFFER_STALLED_ERROR\"] = \"bufferStalledError\";\n // Identifier for a buffer full event\n ErrorDetails[\"BUFFER_FULL_ERROR\"] = \"bufferFullError\";\n // Identifier for a buffer seek over hole event\n ErrorDetails[\"BUFFER_SEEK_OVER_HOLE\"] = \"bufferSeekOverHole\";\n // Identifier for a buffer nudge on stall (playback is stuck although currentTime is in a buffered area)\n ErrorDetails[\"BUFFER_NUDGE_ON_STALL\"] = \"bufferNudgeOnStall\";\n // Identifier for a Interstitial Asset List load error - data: { url: faulty URL, response: { code: error code, text: error text } }\n ErrorDetails[\"ASSET_LIST_LOAD_ERROR\"] = \"assetListLoadError\";\n // Identifier for a Interstitial Asset List load timeout - data: { url: faulty URL, response: { code: error code, text: error text } }\n ErrorDetails[\"ASSET_LIST_LOAD_TIMEOUT\"] = \"assetListLoadTimeout\";\n // Identifier for a Interstitial Asset List parsing error - data: { url : faulty URL, reason : error reason, response : { code: error code, text: error text }}\n ErrorDetails[\"ASSET_LIST_PARSING_ERROR\"] = \"assetListParsingError\";\n // Identifier for a Interstitial Asset List parsing error - data: { url : faulty URL, reason : error reason, response : { code: error code, text: error text }}\n ErrorDetails[\"INTERSTITIAL_ASSET_ITEM_ERROR\"] = \"interstitialAssetItemError\";\n // Identifier for an internal exception happening inside hls.js while handling an event\n ErrorDetails[\"INTERNAL_EXCEPTION\"] = \"internalException\";\n // Identifier for an internal call to abort a loader\n ErrorDetails[\"INTERNAL_ABORTED\"] = \"aborted\";\n // Triggered when attachMedia fails\n ErrorDetails[\"ATTACH_MEDIA_ERROR\"] = \"attachMediaError\";\n // Uncategorized error\n ErrorDetails[\"UNKNOWN\"] = \"unknown\";\n return ErrorDetails;\n}({});\n\nlet Events = /*#__PURE__*/function (Events) {\n // Fired before MediaSource is attaching to media element\n Events[\"MEDIA_ATTACHING\"] = \"hlsMediaAttaching\";\n // Fired when MediaSource has been successfully attached to media element\n Events[\"MEDIA_ATTACHED\"] = \"hlsMediaAttached\";\n // Fired before detaching MediaSource from media element\n Events[\"MEDIA_DETACHING\"] = \"hlsMediaDetaching\";\n // Fired when MediaSource has been detached from media element\n Events[\"MEDIA_DETACHED\"] = \"hlsMediaDetached\";\n // Fired when HTMLMediaElement dispatches \"ended\" event, or stalls at end of VOD program\n Events[\"MEDIA_ENDED\"] = \"hlsMediaEnded\";\n // Fired after playback stall is resolved with playing, seeked, or ended event following BUFFER_STALLED_ERROR\n Events[\"STALL_RESOLVED\"] = \"hlsStallResolved\";\n // Fired when the buffer is going to be reset\n Events[\"BUFFER_RESET\"] = \"hlsBufferReset\";\n // Fired when we know about the codecs that we need buffers for to push into - data: {tracks : { container, codec, levelCodec, initSegment, metadata }}\n Events[\"BUFFER_CODECS\"] = \"hlsBufferCodecs\";\n // fired when sourcebuffers have been created - data: { tracks : tracks }\n Events[\"BUFFER_CREATED\"] = \"hlsBufferCreated\";\n // fired when we append a segment to the buffer - data: { segment: segment object }\n Events[\"BUFFER_APPENDING\"] = \"hlsBufferAppending\";\n // fired when we are done with appending a media segment to the buffer - data : { parent : segment parent that triggered BUFFER_APPENDING, pending : nb of segments waiting for appending for this segment parent}\n Events[\"BUFFER_APPENDED\"] = \"hlsBufferAppended\";\n // fired when the stream is finished and we want to notify the media buffer that there will be no more data - data: { }\n Events[\"BUFFER_EOS\"] = \"hlsBufferEos\";\n // fired when all buffers are full to the end of the program, after calling MediaSource.endOfStream() (unless restricted)\n Events[\"BUFFERED_TO_END\"] = \"hlsBufferedToEnd\";\n // fired when the media buffer should be flushed - data { startOffset, endOffset }\n Events[\"BUFFER_FLUSHING\"] = \"hlsBufferFlushing\";\n // fired when the media buffer has been flushed - data: { }\n Events[\"BUFFER_FLUSHED\"] = \"hlsBufferFlushed\";\n // fired to signal that a manifest loading starts - data: { url : manifestURL}\n Events[\"MANIFEST_LOADING\"] = \"hlsManifestLoading\";\n // fired after manifest has been loaded - data: { levels : [available quality levels], audioTracks : [ available audio tracks ], url : manifestURL, stats : LoaderStats }\n Events[\"MANIFEST_LOADED\"] = \"hlsManifestLoaded\";\n // fired after manifest has been parsed - data: { levels : [available quality levels], firstLevel : index of first quality level appearing in Manifest}\n Events[\"MANIFEST_PARSED\"] = \"hlsManifestParsed\";\n // fired when a level switch is requested - data: { level : id of new level }\n Events[\"LEVEL_SWITCHING\"] = \"hlsLevelSwitching\";\n // fired when a level switch is effective - data: { level : id of new level }\n Events[\"LEVEL_SWITCHED\"] = \"hlsLevelSwitched\";\n // fired when a level playlist loading starts - data: { url : level URL, level : id of level being loaded}\n Events[\"LEVEL_LOADING\"] = \"hlsLevelLoading\";\n // fired when a level playlist loading finishes - data: { details : levelDetails object, level : id of loaded level, stats : LoaderStats }\n Events[\"LEVEL_LOADED\"] = \"hlsLevelLoaded\";\n // fired when a level's details have been updated based on previous details, after it has been loaded - data: { details : levelDetails object, level : id of updated level }\n Events[\"LEVEL_UPDATED\"] = \"hlsLevelUpdated\";\n // fired when a level's PTS information has been updated after parsing a fragment - data: { details : levelDetails object, level : id of updated level, drift: PTS drift observed when parsing last fragment }\n Events[\"LEVEL_PTS_UPDATED\"] = \"hlsLevelPtsUpdated\";\n // fired to notify that levels have changed after removing a level - data: { levels : [available quality levels] }\n Events[\"LEVELS_UPDATED\"] = \"hlsLevelsUpdated\";\n // fired to notify that audio track lists has been updated - data: { audioTracks : audioTracks }\n Events[\"AUDIO_TRACKS_UPDATED\"] = \"hlsAudioTracksUpdated\";\n // fired when an audio track switching is requested - data: { id : audio track id }\n Events[\"AUDIO_TRACK_SWITCHING\"] = \"hlsAudioTrackSwitching\";\n // fired when an audio track switch actually occurs - data: { id : audio track id }\n Events[\"AUDIO_TRACK_SWITCHED\"] = \"hlsAudioTrackSwitched\";\n // fired when an audio track loading starts - data: { url : audio track URL, id : audio track id }\n Events[\"AUDIO_TRACK_LOADING\"] = \"hlsAudioTrackLoading\";\n // fired when an audio track loading finishes - data: { details : levelDetails object, id : audio track id, stats : LoaderStats }\n Events[\"AUDIO_TRACK_LOADED\"] = \"hlsAudioTrackLoaded\";\n // fired when an audio tracks's details have been updated based on previous details, after it has been loaded - data: { details : levelDetails object, id : track id }\n Events[\"AUDIO_TRACK_UPDATED\"] = \"hlsAudioTrackUpdated\";\n // fired to notify that subtitle track lists has been updated - data: { subtitleTracks : subtitleTracks }\n Events[\"SUBTITLE_TRACKS_UPDATED\"] = \"hlsSubtitleTracksUpdated\";\n // fired to notify that subtitle tracks were cleared as a result of stopping the media\n Events[\"SUBTITLE_TRACKS_CLEARED\"] = \"hlsSubtitleTracksCleared\";\n // fired when an subtitle track switch occurs - data: { id : subtitle track id }\n Events[\"SUBTITLE_TRACK_SWITCH\"] = \"hlsSubtitleTrackSwitch\";\n // fired when a subtitle track loading starts - data: { url : subtitle track URL, id : subtitle track id }\n Events[\"SUBTITLE_TRACK_LOADING\"] = \"hlsSubtitleTrackLoading\";\n // fired when a subtitle track loading finishes - data: { details : levelDetails object, id : subtitle track id, stats : LoaderStats }\n Events[\"SUBTITLE_TRACK_LOADED\"] = \"hlsSubtitleTrackLoaded\";\n // fired when a subtitle racks's details have been updated based on previous details, after it has been loaded - data: { details : levelDetails object, id : track id }\n Events[\"SUBTITLE_TRACK_UPDATED\"] = \"hlsSubtitleTrackUpdated\";\n // fired when a subtitle fragment has been processed - data: { success : boolean, frag : the processed frag }\n Events[\"SUBTITLE_FRAG_PROCESSED\"] = \"hlsSubtitleFragProcessed\";\n // fired when a set of VTTCues to be managed externally has been parsed - data: { type: string, track: string, cues: [ VTTCue ] }\n Events[\"CUES_PARSED\"] = \"hlsCuesParsed\";\n // fired when a text track to be managed externally is found - data: { tracks: [ { label: string, kind: string, default: boolean } ] }\n Events[\"NON_NATIVE_TEXT_TRACKS_FOUND\"] = \"hlsNonNativeTextTracksFound\";\n // fired when the first timestamp is found - data: { id : demuxer id, initPTS: initPTS, timescale: timescale, frag : fragment object }\n Events[\"INIT_PTS_FOUND\"] = \"hlsInitPtsFound\";\n // fired when a fragment loading starts - data: { frag : fragment object }\n Events[\"FRAG_LOADING\"] = \"hlsFragLoading\";\n // fired when a fragment loading is progressing - data: { frag : fragment object, { trequest, tfirst, loaded } }\n // FRAG_LOAD_PROGRESS = 'hlsFragLoadProgress',\n // Identifier for fragment load aborting for emergency switch down - data: { frag : fragment object }\n Events[\"FRAG_LOAD_EMERGENCY_ABORTED\"] = \"hlsFragLoadEmergencyAborted\";\n // fired when a fragment loading is completed - data: { frag : fragment object, payload : fragment payload, stats : LoaderStats }\n Events[\"FRAG_LOADED\"] = \"hlsFragLoaded\";\n // fired when a fragment has finished decrypting - data: { id : demuxer id, frag: fragment object, payload : fragment payload, stats : { tstart, tdecrypt } }\n Events[\"FRAG_DECRYPTED\"] = \"hlsFragDecrypted\";\n // fired when Init Segment has been extracted from fragment - data: { id : demuxer id, frag: fragment object, moov : moov MP4 box, codecs : codecs found while parsing fragment }\n Events[\"FRAG_PARSING_INIT_SEGMENT\"] = \"hlsFragParsingInitSegment\";\n // fired when parsing sei text is completed - data: { id : demuxer id, frag: fragment object, samples : [ sei samples pes ] }\n Events[\"FRAG_PARSING_USERDATA\"] = \"hlsFragParsingUserdata\";\n // fired when parsing id3 is completed - data: { id : demuxer id, frag: fragment object, samples : [ id3 samples pes ] }\n Events[\"FRAG_PARSING_METADATA\"] = \"hlsFragParsingMetadata\";\n // fired when data have been extracted from fragment - data: { id : demuxer id, frag: fragment object, data1 : moof MP4 box or TS fragments, data2 : mdat MP4 box or null}\n // FRAG_PARSING_DATA = 'hlsFragParsingData',\n // fired when fragment parsing is completed - data: { id : demuxer id, frag: fragment object }\n Events[\"FRAG_PARSED\"] = \"hlsFragParsed\";\n // fired when fragment remuxed MP4 boxes have all been appended into SourceBuffer - data: { id : demuxer id, frag : fragment object, stats : LoaderStats }\n Events[\"FRAG_BUFFERED\"] = \"hlsFragBuffered\";\n // fired when fragment matching with current media position is changing - data : { id : demuxer id, frag : fragment object }\n Events[\"FRAG_CHANGED\"] = \"hlsFragChanged\";\n // Identifier for a FPS drop event - data: { currentDropped, currentDecoded, totalDroppedFrames }\n Events[\"FPS_DROP\"] = \"hlsFpsDrop\";\n // triggered when FPS drop triggers auto level capping - data: { level, droppedLevel }\n Events[\"FPS_DROP_LEVEL_CAPPING\"] = \"hlsFpsDropLevelCapping\";\n // triggered when maxAutoLevel changes - data { autoLevelCapping, levels, maxAutoLevel, minAutoLevel, maxHdcpLevel }\n Events[\"MAX_AUTO_LEVEL_UPDATED\"] = \"hlsMaxAutoLevelUpdated\";\n // Identifier for an error event - data: { type : error type, details : error details, fatal : if true, hls.js cannot/will not try to recover, if false, hls.js will try to recover,other error specific data }\n Events[\"ERROR\"] = \"hlsError\";\n // fired when hls.js instance starts destroying. Different from MEDIA_DETACHED as one could want to detach and reattach a media to the instance of hls.js to handle mid-rolls for example - data: { }\n Events[\"DESTROYING\"] = \"hlsDestroying\";\n // fired when a decrypt key loading starts - data: { frag : fragment object }\n Events[\"KEY_LOADING\"] = \"hlsKeyLoading\";\n // fired when a decrypt key loading is completed - data: { frag : fragment object, keyInfo : KeyLoaderInfo }\n Events[\"KEY_LOADED\"] = \"hlsKeyLoaded\";\n // deprecated; please use BACK_BUFFER_REACHED - data : { bufferEnd: number }\n Events[\"LIVE_BACK_BUFFER_REACHED\"] = \"hlsLiveBackBufferReached\";\n // fired when the back buffer is reached as defined by the backBufferLength config option - data : { bufferEnd: number }\n Events[\"BACK_BUFFER_REACHED\"] = \"hlsBackBufferReached\";\n // fired after steering manifest has been loaded - data: { steeringManifest: SteeringManifest object, url: steering manifest URL }\n Events[\"STEERING_MANIFEST_LOADED\"] = \"hlsSteeringManifestLoaded\";\n // fired when asset list has begun loading\n Events[\"ASSET_LIST_LOADING\"] = \"hlsAssetListLoading\";\n // fired when a valid asset list is loaded\n Events[\"ASSET_LIST_LOADED\"] = \"hlsAssetListLoaded\";\n // fired when the list of Interstitial Events and Interstitial Schedule is updated\n Events[\"INTERSTITIALS_UPDATED\"] = \"hlsInterstitialsUpdated\";\n // fired when the buffer reaches an Interstitial Schedule boundary (both Primary segments and Interstitial Assets)\n Events[\"INTERSTITIALS_BUFFERED_TO_BOUNDARY\"] = \"hlsInterstitialsBufferedToBoundary\";\n // fired when a player instance for an Interstitial Asset has been created\n Events[\"INTERSTITIAL_ASSET_PLAYER_CREATED\"] = \"hlsInterstitialAssetPlayerCreated\";\n // Interstitial playback started\n Events[\"INTERSTITIAL_STARTED\"] = \"hlsInterstitialStarted\";\n // InterstitialAsset playback started\n Events[\"INTERSTITIAL_ASSET_STARTED\"] = \"hlsInterstitialAssetStarted\";\n // InterstitialAsset playback ended\n Events[\"INTERSTITIAL_ASSET_ENDED\"] = \"hlsInterstitialAssetEnded\";\n // InterstitialAsset playback errored\n Events[\"INTERSTITIAL_ASSET_ERROR\"] = \"hlsInterstitialAssetError\";\n // Interstitial playback ended\n Events[\"INTERSTITIAL_ENDED\"] = \"hlsInterstitialEnded\";\n // Interstitial schedule resumed primary playback\n Events[\"INTERSTITIALS_PRIMARY_RESUMED\"] = \"hlsInterstitialsPrimaryResumed\";\n // Interstitial players dispatch this event when playout limit is reached\n Events[\"PLAYOUT_LIMIT_REACHED\"] = \"hlsPlayoutLimitReached\";\n // Event DateRange cue \"enter\" event dispatched\n Events[\"EVENT_CUE_ENTER\"] = \"hlsEventCueEnter\";\n return Events;\n}({});\n\n/**\n * Defines each Event type and payload by Event name. Used in {@link hls.js#HlsEventEmitter} to strongly type the event listener API.\n */\n\nvar PlaylistContextType = {\n MANIFEST: \"manifest\",\n LEVEL: \"level\",\n AUDIO_TRACK: \"audioTrack\",\n SUBTITLE_TRACK: \"subtitleTrack\"\n};\nvar PlaylistLevelType = {\n MAIN: \"main\",\n AUDIO: \"audio\",\n SUBTITLE: \"subtitle\"\n};\n\n/*\n * compute an Exponential Weighted moving average\n * - https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average\n * - heavily inspired from shaka-player\n */\n\nclass EWMA {\n // About half of the estimated value will be from the last |halfLife| samples by weight.\n constructor(halfLife, estimate = 0, weight = 0) {\n this.halfLife = void 0;\n this.alpha_ = void 0;\n this.estimate_ = void 0;\n this.totalWeight_ = void 0;\n this.halfLife = halfLife;\n // Larger values of alpha expire historical data more slowly.\n this.alpha_ = halfLife ? Math.exp(Math.log(0.5) / halfLife) : 0;\n this.estimate_ = estimate;\n this.totalWeight_ = weight;\n }\n sample(weight, value) {\n const adjAlpha = Math.pow(this.alpha_, weight);\n this.estimate_ = value * (1 - adjAlpha) + adjAlpha * this.estimate_;\n this.totalWeight_ += weight;\n }\n getTotalWeight() {\n return this.totalWeight_;\n }\n getEstimate() {\n if (this.alpha_) {\n const zeroFactor = 1 - Math.pow(this.alpha_, this.totalWeight_);\n if (zeroFactor) {\n return this.estimate_ / zeroFactor;\n }\n }\n return this.estimate_;\n }\n}\n\n/*\n * EWMA Bandwidth Estimator\n * - heavily inspired from shaka-player\n * Tracks bandwidth samples and estimates available bandwidth.\n * Based on the minimum of two exponentially-weighted moving averages with\n * different half-lives.\n */\n\nclass EwmaBandWidthEstimator {\n constructor(slow, fast, defaultEstimate, defaultTTFB = 100) {\n this.defaultEstimate_ = void 0;\n this.minWeight_ = void 0;\n this.minDelayMs_ = void 0;\n this.slow_ = void 0;\n this.fast_ = void 0;\n this.defaultTTFB_ = void 0;\n this.ttfb_ = void 0;\n this.defaultEstimate_ = defaultEstimate;\n this.minWeight_ = 0.001;\n this.minDelayMs_ = 50;\n this.slow_ = new EWMA(slow);\n this.fast_ = new EWMA(fast);\n this.defaultTTFB_ = defaultTTFB;\n this.ttfb_ = new EWMA(slow);\n }\n update(slow, fast) {\n const {\n slow_,\n fast_,\n ttfb_\n } = this;\n if (slow_.halfLife !== slow) {\n this.slow_ = new EWMA(slow, slow_.getEstimate(), slow_.getTotalWeight());\n }\n if (fast_.halfLife !== fast) {\n this.fast_ = new EWMA(fast, fast_.getEstimate(), fast_.getTotalWeight());\n }\n if (ttfb_.halfLife !== slow) {\n this.ttfb_ = new EWMA(slow, ttfb_.getEstimate(), ttfb_.getTotalWeight());\n }\n }\n sample(durationMs, numBytes) {\n durationMs = Math.max(durationMs, this.minDelayMs_);\n const numBits = 8 * numBytes;\n // weight is duration in seconds\n const durationS = durationMs / 1000;\n // value is bandwidth in bits/s\n const bandwidthInBps = numBits / durationS;\n this.fast_.sample(durationS, bandwidthInBps);\n this.slow_.sample(durationS, bandwidthInBps);\n }\n sampleTTFB(ttfb) {\n // weight is frequency curve applied to TTFB in seconds\n // (longer times have less weight with expected input under 1 second)\n const seconds = ttfb / 1000;\n const weight = Math.sqrt(2) * Math.exp(-Math.pow(seconds, 2) / 2);\n this.ttfb_.sample(weight, Math.max(ttfb, 5));\n }\n canEstimate() {\n return this.fast_.getTotalWeight() >= this.minWeight_;\n }\n getEstimate() {\n if (this.canEstimate()) {\n // console.log('slow estimate:'+ Math.round(this.slow_.getEstimate()));\n // console.log('fast estimate:'+ Math.round(this.fast_.getEstimate()));\n // Take the minimum of these two estimates. This should have the effect of\n // adapting down quickly, but up more slowly.\n return Math.min(this.fast_.getEstimate(), this.slow_.getEstimate());\n } else {\n return this.defaultEstimate_;\n }\n }\n getEstimateTTFB() {\n if (this.ttfb_.getTotalWeight() >= this.minWeight_) {\n return this.ttfb_.getEstimate();\n } else {\n return this.defaultTTFB_;\n }\n }\n get defaultEstimate() {\n return this.defaultEstimate_;\n }\n destroy() {}\n}\n\nfunction _defineProperty(e, r, t) {\n return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: true,\n configurable: true,\n writable: true\n }) : e[r] = t, e;\n}\nfunction _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), true).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nfunction _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r);\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : i + \"\";\n}\n\nclass Logger {\n constructor(label, logger) {\n this.trace = void 0;\n this.debug = void 0;\n this.log = void 0;\n this.warn = void 0;\n this.info = void 0;\n this.error = void 0;\n const lb = `[${label}]:`;\n this.trace = noop;\n this.debug = logger.debug.bind(null, lb);\n this.log = logger.log.bind(null, lb);\n this.warn = logger.warn.bind(null, lb);\n this.info = logger.info.bind(null, lb);\n this.error = logger.error.bind(null, lb);\n }\n}\nconst noop = function noop() {};\nconst fakeLogger = {\n trace: noop,\n debug: noop,\n log: noop,\n warn: noop,\n info: noop,\n error: noop\n};\nfunction createLogger() {\n return _extends({}, fakeLogger);\n}\n\n// let lastCallTime;\n// function formatMsgWithTimeInfo(type, msg) {\n// const now = Date.now();\n// const diff = lastCallTime ? '+' + (now - lastCallTime) : '0';\n// lastCallTime = now;\n// msg = (new Date(now)).toISOString() + ' | [' + type + '] > ' + msg + ' ( ' + diff + ' ms )';\n// return msg;\n// }\n\nfunction consolePrintFn(type, id) {\n const func = self.console[type];\n return func ? func.bind(self.console, `${id ? '[' + id + '] ' : ''}[${type}] >`) : noop;\n}\nfunction getLoggerFn(key, debugConfig, id) {\n return debugConfig[key] ? debugConfig[key].bind(debugConfig) : consolePrintFn(key, id);\n}\nconst exportedLogger = createLogger();\nfunction enableLogs(debugConfig, context, id) {\n // check that console is available\n const newLogger = createLogger();\n if (typeof console === 'object' && debugConfig === true || typeof debugConfig === 'object') {\n const keys = [\n // Remove out from list here to hard-disable a log-level\n // 'trace',\n 'debug', 'log', 'info', 'warn', 'error'];\n keys.forEach(key => {\n newLogger[key] = getLoggerFn(key, debugConfig, id);\n });\n // Some browsers don't allow to use bind on console object anyway\n // fallback to default if needed\n try {\n newLogger.log(`Debug logs enabled for \"${context}\" in hls.js version ${\"1.6.16\"}`);\n } catch (e) {\n /* log fn threw an exception. All logger methods are no-ops. */\n return createLogger();\n }\n // global exported logger uses the same functions as new logger without `id`\n keys.forEach(key => {\n exportedLogger[key] = getLoggerFn(key, debugConfig);\n });\n } else {\n // Reset global exported logger\n _extends(exportedLogger, newLogger);\n }\n return newLogger;\n}\nconst logger = exportedLogger;\n\nfunction getMediaSource(preferManagedMediaSource = true) {\n if (typeof self === 'undefined') return undefined;\n const mms = (preferManagedMediaSource || !self.MediaSource) && self.ManagedMediaSource;\n return mms || self.MediaSource || self.WebKitMediaSource;\n}\nfunction isManagedMediaSource(source) {\n return typeof self !== 'undefined' && source === self.ManagedMediaSource;\n}\nfunction isCompatibleTrackChange(currentTracks, requiredTracks) {\n const trackNames = Object.keys(currentTracks);\n const requiredTrackNames = Object.keys(requiredTracks);\n const trackCount = trackNames.length;\n const requiredTrackCount = requiredTrackNames.length;\n return !trackCount || !requiredTrackCount || trackCount === requiredTrackCount && !trackNames.some(name => requiredTrackNames.indexOf(name) === -1);\n}\n\n// http://stackoverflow.com/questions/8936984/uint8array-to-string-in-javascript/22373197\n// http://www.onicos.com/staff/iz/amuse/javascript/expert/utf.txt\n/* utf.js - UTF-8 <=> UTF-16 convertion\n *\n * Copyright (C) 1999 Masanao Izumo \n * Version: 1.0\n * LastModified: Dec 25 1999\n * This library is free. You can redistribute it and/or modify it.\n */\n/**\n * Converts a UTF-8 array to a string.\n *\n * @param array - The UTF-8 array to convert\n *\n * @returns The string\n *\n * @group Utils\n *\n * @beta\n */\nfunction utf8ArrayToStr(array, exitOnNull = false) {\n if (typeof TextDecoder !== 'undefined') {\n const decoder = new TextDecoder('utf-8');\n const decoded = decoder.decode(array);\n if (exitOnNull) {\n // grab up to the first null\n const idx = decoded.indexOf('\\0');\n return idx !== -1 ? decoded.substring(0, idx) : decoded;\n }\n // remove any null characters\n return decoded.replace(/\\0/g, '');\n }\n const len = array.length;\n let c;\n let char2;\n let char3;\n let out = '';\n let i = 0;\n while (i < len) {\n c = array[i++];\n if (c === 0x00 && exitOnNull) {\n return out;\n } else if (c === 0x00 || c === 0x03) {\n // If the character is 3 (END_OF_TEXT) or 0 (NULL) then skip it\n continue;\n }\n switch (c >> 4) {\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n case 6:\n case 7:\n // 0xxxxxxx\n out += String.fromCharCode(c);\n break;\n case 12:\n case 13:\n // 110x xxxx 10xx xxxx\n char2 = array[i++];\n out += String.fromCharCode((c & 0x1f) << 6 | char2 & 0x3f);\n break;\n case 14:\n // 1110 xxxx 10xx xxxx 10xx xxxx\n char2 = array[i++];\n char3 = array[i++];\n out += String.fromCharCode((c & 0x0f) << 12 | (char2 & 0x3f) << 6 | (char3 & 0x3f) << 0);\n break;\n }\n }\n return out;\n}\n\n/**\n * hex dump helper class\n */\n\nfunction arrayToHex(array) {\n let str = '';\n for (let i = 0; i < array.length; i++) {\n let h = array[i].toString(16);\n if (h.length < 2) {\n h = '0' + h;\n }\n str += h;\n }\n return str;\n}\nfunction hexToArrayBuffer(str) {\n return Uint8Array.from(str.replace(/^0x/, '').replace(/([\\da-fA-F]{2}) ?/g, '0x$1 ').replace(/ +$/, '').split(' ')).buffer;\n}\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nvar urlToolkit = {exports: {}};\n\nvar hasRequiredUrlToolkit;\n\nfunction requireUrlToolkit () {\n\tif (hasRequiredUrlToolkit) return urlToolkit.exports;\n\thasRequiredUrlToolkit = 1;\n\t(function (module, exports) {\n\t\t// see https://tools.ietf.org/html/rfc1808\n\n\t\t(function (root) {\n\t\t var URL_REGEX =\n\t\t /^(?=((?:[a-zA-Z0-9+\\-.]+:)?))\\1(?=((?:\\/\\/[^\\/?#]*)?))\\2(?=((?:(?:[^?#\\/]*\\/)*[^;?#\\/]*)?))\\3((?:;[^?#]*)?)(\\?[^#]*)?(#[^]*)?$/;\n\t\t var FIRST_SEGMENT_REGEX = /^(?=([^\\/?#]*))\\1([^]*)$/;\n\t\t var SLASH_DOT_REGEX = /(?:\\/|^)\\.(?=\\/)/g;\n\t\t var SLASH_DOT_DOT_REGEX = /(?:\\/|^)\\.\\.\\/(?!\\.\\.\\/)[^\\/]*(?=\\/)/g;\n\n\t\t var URLToolkit = {\n\t\t // If opts.alwaysNormalize is true then the path will always be normalized even when it starts with / or //\n\t\t // E.g\n\t\t // With opts.alwaysNormalize = false (default, spec compliant)\n\t\t // http://a.com/b/cd + /e/f/../g => http://a.com/e/f/../g\n\t\t // With opts.alwaysNormalize = true (not spec compliant)\n\t\t // http://a.com/b/cd + /e/f/../g => http://a.com/e/g\n\t\t buildAbsoluteURL: function (baseURL, relativeURL, opts) {\n\t\t opts = opts || {};\n\t\t // remove any remaining space and CRLF\n\t\t baseURL = baseURL.trim();\n\t\t relativeURL = relativeURL.trim();\n\t\t if (!relativeURL) {\n\t\t // 2a) If the embedded URL is entirely empty, it inherits the\n\t\t // entire base URL (i.e., is set equal to the base URL)\n\t\t // and we are done.\n\t\t if (!opts.alwaysNormalize) {\n\t\t return baseURL;\n\t\t }\n\t\t var basePartsForNormalise = URLToolkit.parseURL(baseURL);\n\t\t if (!basePartsForNormalise) {\n\t\t throw new Error('Error trying to parse base URL.');\n\t\t }\n\t\t basePartsForNormalise.path = URLToolkit.normalizePath(\n\t\t basePartsForNormalise.path\n\t\t );\n\t\t return URLToolkit.buildURLFromParts(basePartsForNormalise);\n\t\t }\n\t\t var relativeParts = URLToolkit.parseURL(relativeURL);\n\t\t if (!relativeParts) {\n\t\t throw new Error('Error trying to parse relative URL.');\n\t\t }\n\t\t if (relativeParts.scheme) {\n\t\t // 2b) If the embedded URL starts with a scheme name, it is\n\t\t // interpreted as an absolute URL and we are done.\n\t\t if (!opts.alwaysNormalize) {\n\t\t return relativeURL;\n\t\t }\n\t\t relativeParts.path = URLToolkit.normalizePath(relativeParts.path);\n\t\t return URLToolkit.buildURLFromParts(relativeParts);\n\t\t }\n\t\t var baseParts = URLToolkit.parseURL(baseURL);\n\t\t if (!baseParts) {\n\t\t throw new Error('Error trying to parse base URL.');\n\t\t }\n\t\t if (!baseParts.netLoc && baseParts.path && baseParts.path[0] !== '/') {\n\t\t // If netLoc missing and path doesn't start with '/', assume everthing before the first '/' is the netLoc\n\t\t // This causes 'example.com/a' to be handled as '//example.com/a' instead of '/example.com/a'\n\t\t var pathParts = FIRST_SEGMENT_REGEX.exec(baseParts.path);\n\t\t baseParts.netLoc = pathParts[1];\n\t\t baseParts.path = pathParts[2];\n\t\t }\n\t\t if (baseParts.netLoc && !baseParts.path) {\n\t\t baseParts.path = '/';\n\t\t }\n\t\t var builtParts = {\n\t\t // 2c) Otherwise, the embedded URL inherits the scheme of\n\t\t // the base URL.\n\t\t scheme: baseParts.scheme,\n\t\t netLoc: relativeParts.netLoc,\n\t\t path: null,\n\t\t params: relativeParts.params,\n\t\t query: relativeParts.query,\n\t\t fragment: relativeParts.fragment,\n\t\t };\n\t\t if (!relativeParts.netLoc) {\n\t\t // 3) If the embedded URL's is non-empty, we skip to\n\t\t // Step 7. Otherwise, the embedded URL inherits the \n\t\t // (if any) of the base URL.\n\t\t builtParts.netLoc = baseParts.netLoc;\n\t\t // 4) If the embedded URL path is preceded by a slash \"/\", the\n\t\t // path is not relative and we skip to Step 7.\n\t\t if (relativeParts.path[0] !== '/') {\n\t\t if (!relativeParts.path) {\n\t\t // 5) If the embedded URL path is empty (and not preceded by a\n\t\t // slash), then the embedded URL inherits the base URL path\n\t\t builtParts.path = baseParts.path;\n\t\t // 5a) if the embedded URL's is non-empty, we skip to\n\t\t // step 7; otherwise, it inherits the of the base\n\t\t // URL (if any) and\n\t\t if (!relativeParts.params) {\n\t\t builtParts.params = baseParts.params;\n\t\t // 5b) if the embedded URL's is non-empty, we skip to\n\t\t // step 7; otherwise, it inherits the of the base\n\t\t // URL (if any) and we skip to step 7.\n\t\t if (!relativeParts.query) {\n\t\t builtParts.query = baseParts.query;\n\t\t }\n\t\t }\n\t\t } else {\n\t\t // 6) The last segment of the base URL's path (anything\n\t\t // following the rightmost slash \"/\", or the entire path if no\n\t\t // slash is present) is removed and the embedded URL's path is\n\t\t // appended in its place.\n\t\t var baseURLPath = baseParts.path;\n\t\t var newPath =\n\t\t baseURLPath.substring(0, baseURLPath.lastIndexOf('/') + 1) +\n\t\t relativeParts.path;\n\t\t builtParts.path = URLToolkit.normalizePath(newPath);\n\t\t }\n\t\t }\n\t\t }\n\t\t if (builtParts.path === null) {\n\t\t builtParts.path = opts.alwaysNormalize\n\t\t ? URLToolkit.normalizePath(relativeParts.path)\n\t\t : relativeParts.path;\n\t\t }\n\t\t return URLToolkit.buildURLFromParts(builtParts);\n\t\t },\n\t\t parseURL: function (url) {\n\t\t var parts = URL_REGEX.exec(url);\n\t\t if (!parts) {\n\t\t return null;\n\t\t }\n\t\t return {\n\t\t scheme: parts[1] || '',\n\t\t netLoc: parts[2] || '',\n\t\t path: parts[3] || '',\n\t\t params: parts[4] || '',\n\t\t query: parts[5] || '',\n\t\t fragment: parts[6] || '',\n\t\t };\n\t\t },\n\t\t normalizePath: function (path) {\n\t\t // The following operations are\n\t\t // then applied, in order, to the new path:\n\t\t // 6a) All occurrences of \"./\", where \".\" is a complete path\n\t\t // segment, are removed.\n\t\t // 6b) If the path ends with \".\" as a complete path segment,\n\t\t // that \".\" is removed.\n\t\t path = path.split('').reverse().join('').replace(SLASH_DOT_REGEX, '');\n\t\t // 6c) All occurrences of \"/../\", where is a\n\t\t // complete path segment not equal to \"..\", are removed.\n\t\t // Removal of these path segments is performed iteratively,\n\t\t // removing the leftmost matching pattern on each iteration,\n\t\t // until no matching pattern remains.\n\t\t // 6d) If the path ends with \"/..\", where is a\n\t\t // complete path segment not equal to \"..\", that\n\t\t // \"/..\" is removed.\n\t\t while (\n\t\t path.length !== (path = path.replace(SLASH_DOT_DOT_REGEX, '')).length\n\t\t ) {}\n\t\t return path.split('').reverse().join('');\n\t\t },\n\t\t buildURLFromParts: function (parts) {\n\t\t return (\n\t\t parts.scheme +\n\t\t parts.netLoc +\n\t\t parts.path +\n\t\t parts.params +\n\t\t parts.query +\n\t\t parts.fragment\n\t\t );\n\t\t },\n\t\t };\n\n\t\t module.exports = URLToolkit;\n\t\t})(); \n\t} (urlToolkit));\n\treturn urlToolkit.exports;\n}\n\nvar urlToolkitExports = requireUrlToolkit();\n\nclass LoadStats {\n constructor() {\n this.aborted = false;\n this.loaded = 0;\n this.retry = 0;\n this.total = 0;\n this.chunkCount = 0;\n this.bwEstimate = 0;\n this.loading = {\n start: 0,\n first: 0,\n end: 0\n };\n this.parsing = {\n start: 0,\n end: 0\n };\n this.buffering = {\n start: 0,\n first: 0,\n end: 0\n };\n }\n}\n\nvar ElementaryStreamTypes = {\n AUDIO: \"audio\",\n VIDEO: \"video\",\n AUDIOVIDEO: \"audiovideo\"\n};\nclass BaseSegment {\n constructor(base) {\n this._byteRange = null;\n this._url = null;\n this._stats = null;\n this._streams = null;\n // baseurl is the URL to the playlist\n this.base = void 0;\n // relurl is the portion of the URL that comes from inside the playlist.\n this.relurl = void 0;\n if (typeof base === 'string') {\n base = {\n url: base\n };\n }\n this.base = base;\n makeEnumerable(this, 'stats');\n }\n\n // setByteRange converts a EXT-X-BYTERANGE attribute into a two element array\n setByteRange(value, previous) {\n const params = value.split('@', 2);\n let start;\n if (params.length === 1) {\n start = (previous == null ? void 0 : previous.byteRangeEndOffset) || 0;\n } else {\n start = parseInt(params[1]);\n }\n this._byteRange = [start, parseInt(params[0]) + start];\n }\n get baseurl() {\n return this.base.url;\n }\n get byteRange() {\n if (this._byteRange === null) {\n return [];\n }\n return this._byteRange;\n }\n get byteRangeStartOffset() {\n return this.byteRange[0];\n }\n get byteRangeEndOffset() {\n return this.byteRange[1];\n }\n get elementaryStreams() {\n if (this._streams === null) {\n this._streams = {\n [ElementaryStreamTypes.AUDIO]: null,\n [ElementaryStreamTypes.VIDEO]: null,\n [ElementaryStreamTypes.AUDIOVIDEO]: null\n };\n }\n return this._streams;\n }\n set elementaryStreams(value) {\n this._streams = value;\n }\n get hasStats() {\n return this._stats !== null;\n }\n get hasStreams() {\n return this._streams !== null;\n }\n get stats() {\n if (this._stats === null) {\n this._stats = new LoadStats();\n }\n return this._stats;\n }\n set stats(value) {\n this._stats = value;\n }\n get url() {\n if (!this._url && this.baseurl && this.relurl) {\n this._url = urlToolkitExports.buildAbsoluteURL(this.baseurl, this.relurl, {\n alwaysNormalize: true\n });\n }\n return this._url || '';\n }\n set url(value) {\n this._url = value;\n }\n clearElementaryStreamInfo() {\n const {\n elementaryStreams\n } = this;\n elementaryStreams[ElementaryStreamTypes.AUDIO] = null;\n elementaryStreams[ElementaryStreamTypes.VIDEO] = null;\n elementaryStreams[ElementaryStreamTypes.AUDIOVIDEO] = null;\n }\n}\nfunction isMediaFragment(frag) {\n return frag.sn !== 'initSegment';\n}\n\n/**\n * Object representing parsed data from an HLS Segment. Found in {@link hls.js#LevelDetails.fragments}.\n */\nclass Fragment extends BaseSegment {\n constructor(type, base) {\n super(base);\n this._decryptdata = null;\n this._programDateTime = null;\n this._ref = null;\n // Approximate bit rate of the fragment expressed in bits per second (bps) as indicated by the last EXT-X-BITRATE (kbps) tag\n this._bitrate = void 0;\n this.rawProgramDateTime = null;\n this.tagList = [];\n // EXTINF has to be present for a m3u8 to be considered valid\n this.duration = 0;\n // sn notates the sequence number for a segment, and if set to a string can be 'initSegment'\n this.sn = 0;\n // levelkeys are the EXT-X-KEY tags that apply to this segment for decryption\n // core difference from the private field _decryptdata is the lack of the initialized IV\n // _decryptdata will set the IV for this segment based on the segment number in the fragment\n this.levelkeys = void 0;\n // A string representing the fragment type\n this.type = void 0;\n // A reference to the loader. Set while the fragment is loading, and removed afterwards. Used to abort fragment loading\n this.loader = null;\n // A reference to the key loader. Set while the key is loading, and removed afterwards. Used to abort key loading\n this.keyLoader = null;\n // The level/track index to which the fragment belongs\n this.level = -1;\n // The continuity counter of the fragment\n this.cc = 0;\n // The starting Presentation Time Stamp (PTS) of the fragment. Set after transmux complete.\n this.startPTS = void 0;\n // The ending Presentation Time Stamp (PTS) of the fragment. Set after transmux complete.\n this.endPTS = void 0;\n // The starting Decode Time Stamp (DTS) of the fragment. Set after transmux complete.\n this.startDTS = void 0;\n // The ending Decode Time Stamp (DTS) of the fragment. Set after transmux complete.\n this.endDTS = void 0;\n // The start time of the fragment, as listed in the manifest. Updated after transmux complete.\n this.start = 0;\n // The offset time (seconds) of the fragment from the start of the Playlist\n this.playlistOffset = 0;\n // Set by `updateFragPTSDTS` in level-helper\n this.deltaPTS = void 0;\n // The maximum starting Presentation Time Stamp (audio/video PTS) of the fragment. Set after transmux complete.\n this.maxStartPTS = void 0;\n // The minimum ending Presentation Time Stamp (audio/video PTS) of the fragment. Set after transmux complete.\n this.minEndPTS = void 0;\n // Init Segment bytes (unset for media segments)\n this.data = void 0;\n // A flag indicating whether the segment was downloaded in order to test bitrate, and was not buffered\n this.bitrateTest = false;\n // #EXTINF segment title\n this.title = null;\n // The Media Initialization Section for this segment\n this.initSegment = null;\n // Fragment is the last fragment in the media playlist\n this.endList = void 0;\n // Fragment is marked by an EXT-X-GAP tag indicating that it does not contain media data and should not be loaded\n this.gap = void 0;\n // Deprecated\n this.urlId = 0;\n this.type = type;\n }\n get byteLength() {\n if (this.hasStats) {\n const total = this.stats.total;\n if (total) {\n return total;\n }\n }\n if (this.byteRange.length) {\n const start = this.byteRange[0];\n const end = this.byteRange[1];\n if (isFiniteNumber(start) && isFiniteNumber(end)) {\n return end - start;\n }\n }\n return null;\n }\n get bitrate() {\n if (this.byteLength) {\n return this.byteLength * 8 / this.duration;\n }\n if (this._bitrate) {\n return this._bitrate;\n }\n return null;\n }\n set bitrate(value) {\n this._bitrate = value;\n }\n get decryptdata() {\n var _this$_decryptdata;\n const {\n levelkeys\n } = this;\n if (!levelkeys || levelkeys.NONE) {\n return null;\n }\n if (levelkeys.identity) {\n if (!this._decryptdata) {\n this._decryptdata = levelkeys.identity.getDecryptData(this.sn);\n }\n } else if (!((_this$_decryptdata = this._decryptdata) != null && _this$_decryptdata.keyId)) {\n const keyFormats = Object.keys(levelkeys);\n if (keyFormats.length === 1) {\n const levelKey = this._decryptdata = levelkeys[keyFormats[0]] || null;\n if (levelKey) {\n this._decryptdata = levelKey.getDecryptData(this.sn, levelkeys);\n }\n }\n }\n return this._decryptdata;\n }\n get end() {\n return this.start + this.duration;\n }\n get endProgramDateTime() {\n if (this.programDateTime === null) {\n return null;\n }\n const duration = !isFiniteNumber(this.duration) ? 0 : this.duration;\n return this.programDateTime + duration * 1000;\n }\n get encrypted() {\n var _this$_decryptdata2;\n // At the m3u8-parser level we need to add support for manifest signalled keyformats\n // when we want the fragment to start reporting that it is encrypted.\n // Currently, keyFormat will only be set for identity keys\n if ((_this$_decryptdata2 = this._decryptdata) != null && _this$_decryptdata2.encrypted) {\n return true;\n } else if (this.levelkeys) {\n var _this$levelkeys$keyFo;\n const keyFormats = Object.keys(this.levelkeys);\n const len = keyFormats.length;\n if (len > 1 || len === 1 && (_this$levelkeys$keyFo = this.levelkeys[keyFormats[0]]) != null && _this$levelkeys$keyFo.encrypted) {\n return true;\n }\n }\n return false;\n }\n get programDateTime() {\n if (this._programDateTime === null && this.rawProgramDateTime) {\n this.programDateTime = Date.parse(this.rawProgramDateTime);\n }\n return this._programDateTime;\n }\n set programDateTime(value) {\n if (!isFiniteNumber(value)) {\n this._programDateTime = this.rawProgramDateTime = null;\n return;\n }\n this._programDateTime = value;\n }\n get ref() {\n if (!isMediaFragment(this)) {\n return null;\n }\n if (!this._ref) {\n this._ref = {\n base: this.base,\n start: this.start,\n duration: this.duration,\n sn: this.sn,\n programDateTime: this.programDateTime\n };\n }\n return this._ref;\n }\n addStart(value) {\n this.setStart(this.start + value);\n }\n setStart(value) {\n this.start = value;\n if (this._ref) {\n this._ref.start = value;\n }\n }\n setDuration(value) {\n this.duration = value;\n if (this._ref) {\n this._ref.duration = value;\n }\n }\n setKeyFormat(keyFormat) {\n const levelkeys = this.levelkeys;\n if (levelkeys) {\n var _this$_decryptdata3;\n const key = levelkeys[keyFormat];\n if (key && !((_this$_decryptdata3 = this._decryptdata) != null && _this$_decryptdata3.keyId)) {\n this._decryptdata = key.getDecryptData(this.sn, levelkeys);\n }\n }\n }\n abortRequests() {\n var _this$loader, _this$keyLoader;\n (_this$loader = this.loader) == null || _this$loader.abort();\n (_this$keyLoader = this.keyLoader) == null || _this$keyLoader.abort();\n }\n setElementaryStreamInfo(type, startPTS, endPTS, startDTS, endDTS, partial = false) {\n const {\n elementaryStreams\n } = this;\n const info = elementaryStreams[type];\n if (!info) {\n elementaryStreams[type] = {\n startPTS,\n endPTS,\n startDTS,\n endDTS,\n partial\n };\n return;\n }\n info.startPTS = Math.min(info.startPTS, startPTS);\n info.endPTS = Math.max(info.endPTS, endPTS);\n info.startDTS = Math.min(info.startDTS, startDTS);\n info.endDTS = Math.max(info.endDTS, endDTS);\n }\n}\n\n/**\n * Object representing parsed data from an HLS Partial Segment. Found in {@link hls.js#LevelDetails.partList}.\n */\nclass Part extends BaseSegment {\n constructor(partAttrs, frag, base, index, previous) {\n super(base);\n this.fragOffset = 0;\n this.duration = 0;\n this.gap = false;\n this.independent = false;\n this.relurl = void 0;\n this.fragment = void 0;\n this.index = void 0;\n this.duration = partAttrs.decimalFloatingPoint('DURATION');\n this.gap = partAttrs.bool('GAP');\n this.independent = partAttrs.bool('INDEPENDENT');\n this.relurl = partAttrs.enumeratedString('URI');\n this.fragment = frag;\n this.index = index;\n const byteRange = partAttrs.enumeratedString('BYTERANGE');\n if (byteRange) {\n this.setByteRange(byteRange, previous);\n }\n if (previous) {\n this.fragOffset = previous.fragOffset + previous.duration;\n }\n }\n get start() {\n return this.fragment.start + this.fragOffset;\n }\n get end() {\n return this.start + this.duration;\n }\n get loaded() {\n const {\n elementaryStreams\n } = this;\n return !!(elementaryStreams.audio || elementaryStreams.video || elementaryStreams.audiovideo);\n }\n}\nfunction getOwnPropertyDescriptorFromPrototypeChain(object, property) {\n const prototype = Object.getPrototypeOf(object);\n if (prototype) {\n const propertyDescriptor = Object.getOwnPropertyDescriptor(prototype, property);\n if (propertyDescriptor) {\n return propertyDescriptor;\n }\n return getOwnPropertyDescriptorFromPrototypeChain(prototype, property);\n }\n}\nfunction makeEnumerable(object, property) {\n const d = getOwnPropertyDescriptorFromPrototypeChain(object, property);\n if (d) {\n d.enumerable = true;\n Object.defineProperty(object, property, d);\n }\n}\n\nconst UINT32_MAX$1 = Math.pow(2, 32) - 1;\nconst push = [].push;\n\n// We are using fixed track IDs for driving the MP4 remuxer\n// instead of following the TS PIDs.\n// There is no reason not to do this and some browsers/SourceBuffer-demuxers\n// may not like if there are TrackID \"switches\"\n// See https://github.com/video-dev/hls.js/issues/1331\n// Here we are mapping our internal track types to constant MP4 track IDs\n// With MSE currently one can only have one track of each, and we are muxing\n// whatever video/audio rendition in them.\nconst RemuxerTrackIdConfig = {\n video: 1,\n audio: 2,\n id3: 3,\n text: 4\n};\nfunction bin2str(data) {\n return String.fromCharCode.apply(null, data);\n}\nfunction readUint16(buffer, offset) {\n const val = buffer[offset] << 8 | buffer[offset + 1];\n return val < 0 ? 65536 + val : val;\n}\nfunction readUint32(buffer, offset) {\n const val = readSint32(buffer, offset);\n return val < 0 ? 4294967296 + val : val;\n}\nfunction readUint64(buffer, offset) {\n let result = readUint32(buffer, offset);\n result *= Math.pow(2, 32);\n result += readUint32(buffer, offset + 4);\n return result;\n}\nfunction readSint32(buffer, offset) {\n return buffer[offset] << 24 | buffer[offset + 1] << 16 | buffer[offset + 2] << 8 | buffer[offset + 3];\n}\n\n// Find \"moof\" box\nfunction hasMoofData(data) {\n const end = data.byteLength;\n for (let i = 0; i < end;) {\n const size = readUint32(data, i);\n if (size > 8 && data[i + 4] === 0x6d && data[i + 5] === 0x6f && data[i + 6] === 0x6f && data[i + 7] === 0x66) {\n return true;\n }\n i = size > 1 ? i + size : end;\n }\n return false;\n}\n\n// Find the data for a box specified by its path\nfunction findBox(data, path) {\n const results = [];\n if (!path.length) {\n // short-circuit the search for empty paths\n return results;\n }\n const end = data.byteLength;\n for (let i = 0; i < end;) {\n const size = readUint32(data, i);\n const type = bin2str(data.subarray(i + 4, i + 8));\n const endbox = size > 1 ? i + size : end;\n if (type === path[0]) {\n if (path.length === 1) {\n // this is the end of the path and we've found the box we were\n // looking for\n results.push(data.subarray(i + 8, endbox));\n } else {\n // recursively search for the next box along the path\n const subresults = findBox(data.subarray(i + 8, endbox), path.slice(1));\n if (subresults.length) {\n push.apply(results, subresults);\n }\n }\n }\n i = endbox;\n }\n\n // we've finished searching all of data\n return results;\n}\nfunction parseSegmentIndex(sidx) {\n const references = [];\n const version = sidx[0];\n\n // set initial offset, we skip the reference ID (not needed)\n let index = 8;\n const timescale = readUint32(sidx, index);\n index += 4;\n let earliestPresentationTime = 0;\n let firstOffset = 0;\n if (version === 0) {\n earliestPresentationTime = readUint32(sidx, index);\n firstOffset = readUint32(sidx, index + 4);\n index += 8;\n } else {\n earliestPresentationTime = readUint64(sidx, index);\n firstOffset = readUint64(sidx, index + 8);\n index += 16;\n }\n\n // skip reserved\n index += 2;\n let startByte = sidx.length + firstOffset;\n const referencesCount = readUint16(sidx, index);\n index += 2;\n for (let i = 0; i < referencesCount; i++) {\n let referenceIndex = index;\n const referenceInfo = readUint32(sidx, referenceIndex);\n referenceIndex += 4;\n const referenceSize = referenceInfo & 0x7fffffff;\n const referenceType = (referenceInfo & 0x80000000) >>> 31;\n if (referenceType === 1) {\n logger.warn('SIDX has hierarchical references (not supported)');\n return null;\n }\n const subsegmentDuration = readUint32(sidx, referenceIndex);\n referenceIndex += 4;\n references.push({\n referenceSize,\n subsegmentDuration,\n // unscaled\n info: {\n duration: subsegmentDuration / timescale,\n start: startByte,\n end: startByte + referenceSize - 1\n }\n });\n startByte += referenceSize;\n\n // Skipping 1 bit for |startsWithSap|, 3 bits for |sapType|, and 28 bits\n // for |sapDelta|.\n referenceIndex += 4;\n\n // skip to next ref\n index = referenceIndex;\n }\n return {\n earliestPresentationTime,\n timescale,\n version,\n referencesCount,\n references\n };\n}\n\n/**\n * Parses an MP4 initialization segment and extracts stream type and\n * timescale values for any declared tracks. Timescale values indicate the\n * number of clock ticks per second to assume for time-based values\n * elsewhere in the MP4.\n *\n * To determine the start time of an MP4, you need two pieces of\n * information: the timescale unit and the earliest base media decode\n * time. Multiple timescales can be specified within an MP4 but the\n * base media decode time is always expressed in the timescale from\n * the media header box for the track:\n * ```\n * moov > trak > mdia > mdhd.timescale\n * moov > trak > mdia > hdlr\n * ```\n * @param initSegment the bytes of the init segment\n * @returns a hash of track type to timescale values or null if\n * the init segment is malformed.\n */\n\nfunction parseInitSegment(initSegment) {\n const result = [];\n const traks = findBox(initSegment, ['moov', 'trak']);\n for (let i = 0; i < traks.length; i++) {\n const trak = traks[i];\n const tkhd = findBox(trak, ['tkhd'])[0];\n if (tkhd) {\n let version = tkhd[0];\n const trackId = readUint32(tkhd, version === 0 ? 12 : 20);\n const mdhd = findBox(trak, ['mdia', 'mdhd'])[0];\n if (mdhd) {\n version = mdhd[0];\n const timescale = readUint32(mdhd, version === 0 ? 12 : 20);\n const hdlr = findBox(trak, ['mdia', 'hdlr'])[0];\n if (hdlr) {\n const hdlrType = bin2str(hdlr.subarray(8, 12));\n const type = {\n soun: ElementaryStreamTypes.AUDIO,\n vide: ElementaryStreamTypes.VIDEO\n }[hdlrType];\n // Parse codec details\n const stsdBox = findBox(trak, ['mdia', 'minf', 'stbl', 'stsd'])[0];\n const stsd = parseStsd(stsdBox);\n if (type) {\n // Add 'audio', 'video', and 'audiovideo' track records that will map to SourceBuffers\n result[trackId] = {\n timescale,\n type,\n stsd\n };\n result[type] = _objectSpread2({\n timescale,\n id: trackId\n }, stsd);\n } else {\n // Add 'meta' and other track records\n result[trackId] = {\n timescale,\n type: hdlrType,\n stsd\n };\n }\n }\n }\n }\n }\n const trex = findBox(initSegment, ['moov', 'mvex', 'trex']);\n trex.forEach(trex => {\n const trackId = readUint32(trex, 4);\n const track = result[trackId];\n if (track) {\n track.default = {\n duration: readUint32(trex, 12),\n flags: readUint32(trex, 20)\n };\n }\n });\n return result;\n}\nfunction parseStsd(stsd) {\n const sampleEntries = stsd.subarray(8);\n const sampleEntriesEnd = sampleEntries.subarray(8 + 78);\n const fourCC = bin2str(sampleEntries.subarray(4, 8));\n let codec = fourCC;\n let supplemental;\n const encrypted = fourCC === 'enca' || fourCC === 'encv';\n if (encrypted) {\n const encBox = findBox(sampleEntries, [fourCC])[0];\n const encBoxChildren = encBox.subarray(fourCC === 'enca' ? 28 : 78);\n const sinfs = findBox(encBoxChildren, ['sinf']);\n sinfs.forEach(sinf => {\n const schm = findBox(sinf, ['schm'])[0];\n if (schm) {\n const scheme = bin2str(schm.subarray(4, 8));\n if (scheme === 'cbcs' || scheme === 'cenc') {\n const frma = findBox(sinf, ['frma'])[0];\n if (frma) {\n // for encrypted content codec fourCC will be in frma\n codec = bin2str(frma);\n }\n }\n }\n });\n }\n const codecFourCC = codec;\n switch (codec) {\n case 'avc1':\n case 'avc2':\n case 'avc3':\n case 'avc4':\n {\n // extract profile + compatibility + level out of avcC box\n const avcCBox = findBox(sampleEntriesEnd, ['avcC'])[0];\n if (avcCBox && avcCBox.length > 3) {\n codec += '.' + toHex(avcCBox[1]) + toHex(avcCBox[2]) + toHex(avcCBox[3]);\n supplemental = parseSupplementalDoViCodec(codecFourCC === 'avc1' ? 'dva1' : 'dvav', sampleEntriesEnd);\n }\n break;\n }\n case 'mp4a':\n {\n const codecBox = findBox(sampleEntries, [fourCC])[0];\n const esdsBox = findBox(codecBox.subarray(28), ['esds'])[0];\n if (esdsBox && esdsBox.length > 7) {\n let i = 4;\n // ES Descriptor tag\n if (esdsBox[i++] !== 0x03) {\n break;\n }\n i = skipBERInteger(esdsBox, i);\n i += 2; // skip es_id;\n const flags = esdsBox[i++];\n if (flags & 0x80) {\n i += 2; // skip dependency es_id\n }\n if (flags & 0x40) {\n i += esdsBox[i++]; // skip URL\n }\n // Decoder config descriptor\n if (esdsBox[i++] !== 0x04) {\n break;\n }\n i = skipBERInteger(esdsBox, i);\n const objectType = esdsBox[i++];\n if (objectType === 0x40) {\n codec += '.' + toHex(objectType);\n } else {\n break;\n }\n i += 12;\n // Decoder specific info\n if (esdsBox[i++] !== 0x05) {\n break;\n }\n i = skipBERInteger(esdsBox, i);\n const firstByte = esdsBox[i++];\n let audioObjectType = (firstByte & 0xf8) >> 3;\n if (audioObjectType === 31) {\n audioObjectType += 1 + ((firstByte & 0x7) << 3) + ((esdsBox[i] & 0xe0) >> 5);\n }\n codec += '.' + audioObjectType;\n }\n break;\n }\n case 'hvc1':\n case 'hev1':\n {\n const hvcCBox = findBox(sampleEntriesEnd, ['hvcC'])[0];\n if (hvcCBox && hvcCBox.length > 12) {\n const profileByte = hvcCBox[1];\n const profileSpace = ['', 'A', 'B', 'C'][profileByte >> 6];\n const generalProfileIdc = profileByte & 0x1f;\n const profileCompat = readUint32(hvcCBox, 2);\n const tierFlag = (profileByte & 0x20) >> 5 ? 'H' : 'L';\n const levelIDC = hvcCBox[12];\n const constraintIndicator = hvcCBox.subarray(6, 12);\n codec += '.' + profileSpace + generalProfileIdc;\n codec += '.' + reverse32BitInt(profileCompat).toString(16).toUpperCase();\n codec += '.' + tierFlag + levelIDC;\n let constraintString = '';\n for (let i = constraintIndicator.length; i--;) {\n const byte = constraintIndicator[i];\n if (byte || constraintString) {\n const encodedByte = byte.toString(16).toUpperCase();\n constraintString = '.' + encodedByte + constraintString;\n }\n }\n codec += constraintString;\n }\n supplemental = parseSupplementalDoViCodec(codecFourCC == 'hev1' ? 'dvhe' : 'dvh1', sampleEntriesEnd);\n break;\n }\n case 'dvh1':\n case 'dvhe':\n case 'dvav':\n case 'dva1':\n case 'dav1':\n {\n codec = parseSupplementalDoViCodec(codec, sampleEntriesEnd) || codec;\n break;\n }\n case 'vp09':\n {\n const vpcCBox = findBox(sampleEntriesEnd, ['vpcC'])[0];\n if (vpcCBox && vpcCBox.length > 6) {\n const profile = vpcCBox[4];\n const level = vpcCBox[5];\n const bitDepth = vpcCBox[6] >> 4 & 0x0f;\n codec += '.' + addLeadingZero(profile) + '.' + addLeadingZero(level) + '.' + addLeadingZero(bitDepth);\n }\n break;\n }\n case 'av01':\n {\n const av1CBox = findBox(sampleEntriesEnd, ['av1C'])[0];\n if (av1CBox && av1CBox.length > 2) {\n const profile = av1CBox[1] >>> 5;\n const level = av1CBox[1] & 0x1f;\n const tierFlag = av1CBox[2] >>> 7 ? 'H' : 'M';\n const highBitDepth = (av1CBox[2] & 0x40) >> 6;\n const twelveBit = (av1CBox[2] & 0x20) >> 5;\n const bitDepth = profile === 2 && highBitDepth ? twelveBit ? 12 : 10 : highBitDepth ? 10 : 8;\n const monochrome = (av1CBox[2] & 0x10) >> 4;\n const chromaSubsamplingX = (av1CBox[2] & 0x08) >> 3;\n const chromaSubsamplingY = (av1CBox[2] & 0x04) >> 2;\n const chromaSamplePosition = av1CBox[2] & 0x03;\n // TODO: parse color_description_present_flag\n // default it to BT.709/limited range for now\n // more info https://aomediacodec.github.io/av1-isobmff/#av1codecconfigurationbox-syntax\n const colorPrimaries = 1;\n const transferCharacteristics = 1;\n const matrixCoefficients = 1;\n const videoFullRangeFlag = 0;\n codec += '.' + profile + '.' + addLeadingZero(level) + tierFlag + '.' + addLeadingZero(bitDepth) + '.' + monochrome + '.' + chromaSubsamplingX + chromaSubsamplingY + chromaSamplePosition + '.' + addLeadingZero(colorPrimaries) + '.' + addLeadingZero(transferCharacteristics) + '.' + addLeadingZero(matrixCoefficients) + '.' + videoFullRangeFlag;\n supplemental = parseSupplementalDoViCodec('dav1', sampleEntriesEnd);\n }\n break;\n }\n }\n return {\n codec,\n encrypted,\n supplemental\n };\n}\nfunction parseSupplementalDoViCodec(fourCC, sampleEntriesEnd) {\n const dvvCResult = findBox(sampleEntriesEnd, ['dvvC']); // used by DoVi Profile 8 to 10\n const dvXCBox = dvvCResult.length ? dvvCResult[0] : findBox(sampleEntriesEnd, ['dvcC'])[0]; // used by DoVi Profiles up to 7 and 20\n if (dvXCBox) {\n const doViProfile = dvXCBox[2] >> 1 & 0x7f;\n const doViLevel = dvXCBox[2] << 5 & 0x20 | dvXCBox[3] >> 3 & 0x1f;\n return fourCC + '.' + addLeadingZero(doViProfile) + '.' + addLeadingZero(doViLevel);\n }\n}\nfunction reverse32BitInt(val) {\n let result = 0;\n for (let i = 0; i < 32; i++) {\n result |= (val >> i & 1) << 32 - 1 - i;\n }\n return result >>> 0;\n}\nfunction skipBERInteger(bytes, i) {\n const limit = i + 5;\n while (bytes[i++] & 0x80 && i < limit) {\n /* do nothing */\n }\n return i;\n}\nfunction toHex(x) {\n return ('0' + x.toString(16).toUpperCase()).slice(-2);\n}\nfunction addLeadingZero(num) {\n return (num < 10 ? '0' : '') + num;\n}\nfunction patchEncyptionData(initSegment, decryptdata) {\n if (!initSegment || !decryptdata) {\n return;\n }\n const keyId = decryptdata.keyId;\n if (keyId && decryptdata.isCommonEncryption) {\n applyToTencBoxes(initSegment, (tenc, isAudio) => {\n // Look for default key id (keyID offset is always 8 within the tenc box):\n const tencKeyId = tenc.subarray(8, 24);\n if (!tencKeyId.some(b => b !== 0)) {\n logger.log(`[eme] Patching keyId in 'enc${isAudio ? 'a' : 'v'}>sinf>>tenc' box: ${arrayToHex(tencKeyId)} -> ${arrayToHex(keyId)}`);\n tenc.set(keyId, 8);\n }\n });\n }\n}\nfunction parseKeyIdsFromTenc(initSegment) {\n const keyIds = [];\n applyToTencBoxes(initSegment, tenc => keyIds.push(tenc.subarray(8, 24)));\n return keyIds;\n}\nfunction applyToTencBoxes(initSegment, predicate) {\n const traks = findBox(initSegment, ['moov', 'trak']);\n traks.forEach(trak => {\n const stsd = findBox(trak, ['mdia', 'minf', 'stbl', 'stsd'])[0];\n if (!stsd) return;\n const sampleEntries = stsd.subarray(8);\n let encBoxes = findBox(sampleEntries, ['enca']);\n const isAudio = encBoxes.length > 0;\n if (!isAudio) {\n encBoxes = findBox(sampleEntries, ['encv']);\n }\n encBoxes.forEach(enc => {\n const encBoxChildren = isAudio ? enc.subarray(28) : enc.subarray(78);\n const sinfBoxes = findBox(encBoxChildren, ['sinf']);\n sinfBoxes.forEach(sinf => {\n const tenc = parseSinf(sinf);\n if (tenc) {\n predicate(tenc, isAudio);\n }\n });\n });\n });\n}\nfunction parseSinf(sinf) {\n const schm = findBox(sinf, ['schm'])[0];\n if (schm) {\n const scheme = bin2str(schm.subarray(4, 8));\n if (scheme === 'cbcs' || scheme === 'cenc') {\n const tenc = findBox(sinf, ['schi', 'tenc'])[0];\n if (tenc) {\n return tenc;\n }\n }\n }\n}\n\n/*\n For Reference:\n aligned(8) class TrackFragmentHeaderBox\n extends FullBox(‘tfhd’, 0, tf_flags){\n unsigned int(32) track_ID;\n // all the following are optional fields\n unsigned int(64) base_data_offset;\n unsigned int(32) sample_description_index;\n unsigned int(32) default_sample_duration;\n unsigned int(32) default_sample_size;\n unsigned int(32) default_sample_flags\n }\n */\n\nfunction getSampleData(data, initData, logger) {\n const tracks = {};\n const trafs = findBox(data, ['moof', 'traf']);\n for (let i = 0; i < trafs.length; i++) {\n const traf = trafs[i];\n // There is only one tfhd & trun per traf\n // This is true for CMAF style content, and we should perhaps check the ftyp\n // and only look for a single trun then, but for ISOBMFF we should check\n // for multiple track runs.\n const tfhd = findBox(traf, ['tfhd'])[0];\n // get the track id from the tfhd\n const id = readUint32(tfhd, 4);\n const track = initData[id];\n if (!track) {\n continue;\n }\n tracks[id] || (tracks[id] = {\n start: NaN,\n duration: 0,\n sampleCount: 0,\n timescale: track.timescale,\n type: track.type\n });\n const trackTimes = tracks[id];\n // get start DTS\n const tfdt = findBox(traf, ['tfdt'])[0];\n if (tfdt) {\n const version = tfdt[0];\n let baseTime = readUint32(tfdt, 4);\n if (version === 1) {\n // If value is too large, assume signed 64-bit. Negative track fragment decode times are invalid, but they exist in the wild.\n // This prevents large values from being used for initPTS, which can cause playlist sync issues.\n // https://github.com/video-dev/hls.js/issues/5303\n if (baseTime === UINT32_MAX$1) {\n logger.warn(`[mp4-demuxer]: Ignoring assumed invalid signed 64-bit track fragment decode time`);\n } else {\n baseTime *= UINT32_MAX$1 + 1;\n baseTime += readUint32(tfdt, 8);\n }\n }\n if (isFiniteNumber(baseTime) && (!isFiniteNumber(trackTimes.start) || baseTime < trackTimes.start)) {\n trackTimes.start = baseTime;\n }\n }\n const trackDefault = track.default;\n const tfhdFlags = readUint32(tfhd, 0) | (trackDefault == null ? void 0 : trackDefault.flags);\n let defaultSampleDuration = (trackDefault == null ? void 0 : trackDefault.duration) || 0;\n if (tfhdFlags & 0x000008) {\n // 0x000008 indicates the presence of the default_sample_duration field\n if (tfhdFlags & 0x000002) {\n // 0x000002 indicates the presence of the sample_description_index field, which precedes default_sample_duration\n // If present, the default_sample_duration exists at byte offset 12\n defaultSampleDuration = readUint32(tfhd, 12);\n } else {\n // Otherwise, the duration is at byte offset 8\n defaultSampleDuration = readUint32(tfhd, 8);\n }\n }\n const truns = findBox(traf, ['trun']);\n let sampleDTS = trackTimes.start || 0;\n let rawDuration = 0;\n let sampleDuration = defaultSampleDuration;\n for (let j = 0; j < truns.length; j++) {\n const trun = truns[j];\n const sampleCount = readUint32(trun, 4);\n const sampleIndex = trackTimes.sampleCount;\n trackTimes.sampleCount += sampleCount;\n // Get duration from samples\n const dataOffsetPresent = trun[3] & 0x01;\n const firstSampleFlagsPresent = trun[3] & 0x04;\n const sampleDurationPresent = trun[2] & 0x01;\n const sampleSizePresent = trun[2] & 0x02;\n const sampleFlagsPresent = trun[2] & 0x04;\n const sampleCompositionTimeOffsetPresent = trun[2] & 0x08;\n let offset = 8;\n let remaining = sampleCount;\n if (dataOffsetPresent) {\n offset += 4;\n }\n if (firstSampleFlagsPresent && sampleCount) {\n const isNonSyncSample = trun[offset + 1] & 0x01;\n if (!isNonSyncSample && trackTimes.keyFrameIndex === undefined) {\n trackTimes.keyFrameIndex = sampleIndex;\n }\n offset += 4;\n if (sampleDurationPresent) {\n sampleDuration = readUint32(trun, offset);\n offset += 4;\n } else {\n sampleDuration = defaultSampleDuration;\n }\n if (sampleSizePresent) {\n offset += 4;\n }\n if (sampleCompositionTimeOffsetPresent) {\n offset += 4;\n }\n sampleDTS += sampleDuration;\n rawDuration += sampleDuration;\n remaining--;\n }\n while (remaining--) {\n if (sampleDurationPresent) {\n sampleDuration = readUint32(trun, offset);\n offset += 4;\n } else {\n sampleDuration = defaultSampleDuration;\n }\n if (sampleSizePresent) {\n offset += 4;\n }\n if (sampleFlagsPresent) {\n const isNonSyncSample = trun[offset + 1] & 0x01;\n if (!isNonSyncSample) {\n if (trackTimes.keyFrameIndex === undefined) {\n trackTimes.keyFrameIndex = trackTimes.sampleCount - (remaining + 1);\n trackTimes.keyFrameStart = sampleDTS;\n }\n }\n offset += 4;\n }\n if (sampleCompositionTimeOffsetPresent) {\n offset += 4;\n }\n sampleDTS += sampleDuration;\n rawDuration += sampleDuration;\n }\n if (!rawDuration && defaultSampleDuration) {\n rawDuration += defaultSampleDuration * sampleCount;\n }\n }\n trackTimes.duration += rawDuration;\n }\n if (!Object.keys(tracks).some(trackId => tracks[trackId].duration)) {\n // If duration samples are not available in the traf use sidx subsegment_duration\n let sidxMinStart = Infinity;\n let sidxMaxEnd = 0;\n const sidxs = findBox(data, ['sidx']);\n for (let i = 0; i < sidxs.length; i++) {\n const sidx = parseSegmentIndex(sidxs[i]);\n if (sidx != null && sidx.references) {\n sidxMinStart = Math.min(sidxMinStart, sidx.earliestPresentationTime / sidx.timescale);\n const subSegmentDuration = sidx.references.reduce((dur, ref) => dur + ref.info.duration || 0, 0);\n sidxMaxEnd = Math.max(sidxMaxEnd, subSegmentDuration + sidx.earliestPresentationTime / sidx.timescale);\n }\n }\n if (sidxMaxEnd && isFiniteNumber(sidxMaxEnd)) {\n Object.keys(tracks).forEach(trackId => {\n if (!tracks[trackId].duration) {\n tracks[trackId].duration = sidxMaxEnd * tracks[trackId].timescale - tracks[trackId].start;\n }\n });\n }\n }\n return tracks;\n}\n\n// TODO: Check if the last moof+mdat pair is part of the valid range\nfunction segmentValidRange(data) {\n const segmentedRange = {\n valid: null,\n remainder: null\n };\n const moofs = findBox(data, ['moof']);\n if (moofs.length < 2) {\n segmentedRange.remainder = data;\n return segmentedRange;\n }\n const last = moofs[moofs.length - 1];\n // Offset by 8 bytes; findBox offsets the start by as much\n segmentedRange.valid = data.slice(0, last.byteOffset - 8);\n segmentedRange.remainder = data.slice(last.byteOffset - 8);\n return segmentedRange;\n}\nfunction appendUint8Array(data1, data2) {\n const temp = new Uint8Array(data1.length + data2.length);\n temp.set(data1);\n temp.set(data2, data1.length);\n return temp;\n}\nfunction parseSamples(timeOffset, track) {\n const seiSamples = [];\n const videoData = track.samples;\n const timescale = track.timescale;\n const trackId = track.id;\n let isHEVCFlavor = false;\n const moofs = findBox(videoData, ['moof']);\n moofs.map(moof => {\n const moofOffset = moof.byteOffset - 8;\n const trafs = findBox(moof, ['traf']);\n trafs.map(traf => {\n // get the base media decode time from the tfdt\n const baseTime = findBox(traf, ['tfdt']).map(tfdt => {\n const version = tfdt[0];\n let result = readUint32(tfdt, 4);\n if (version === 1) {\n result *= Math.pow(2, 32);\n result += readUint32(tfdt, 8);\n }\n return result / timescale;\n })[0];\n if (baseTime !== undefined) {\n timeOffset = baseTime;\n }\n return findBox(traf, ['tfhd']).map(tfhd => {\n const id = readUint32(tfhd, 4);\n const tfhdFlags = readUint32(tfhd, 0) & 0xffffff;\n const baseDataOffsetPresent = (tfhdFlags & 0x000001) !== 0;\n const sampleDescriptionIndexPresent = (tfhdFlags & 0x000002) !== 0;\n const defaultSampleDurationPresent = (tfhdFlags & 0x000008) !== 0;\n let defaultSampleDuration = 0;\n const defaultSampleSizePresent = (tfhdFlags & 0x000010) !== 0;\n let defaultSampleSize = 0;\n const defaultSampleFlagsPresent = (tfhdFlags & 0x000020) !== 0;\n let tfhdOffset = 8;\n if (id === trackId) {\n if (baseDataOffsetPresent) {\n tfhdOffset += 8;\n }\n if (sampleDescriptionIndexPresent) {\n tfhdOffset += 4;\n }\n if (defaultSampleDurationPresent) {\n defaultSampleDuration = readUint32(tfhd, tfhdOffset);\n tfhdOffset += 4;\n }\n if (defaultSampleSizePresent) {\n defaultSampleSize = readUint32(tfhd, tfhdOffset);\n tfhdOffset += 4;\n }\n if (defaultSampleFlagsPresent) {\n tfhdOffset += 4;\n }\n if (track.type === 'video') {\n isHEVCFlavor = isHEVC(track.codec);\n }\n findBox(traf, ['trun']).map(trun => {\n const version = trun[0];\n const flags = readUint32(trun, 0) & 0xffffff;\n const dataOffsetPresent = (flags & 0x000001) !== 0;\n let dataOffset = 0;\n const firstSampleFlagsPresent = (flags & 0x000004) !== 0;\n const sampleDurationPresent = (flags & 0x000100) !== 0;\n let sampleDuration = 0;\n const sampleSizePresent = (flags & 0x000200) !== 0;\n let sampleSize = 0;\n const sampleFlagsPresent = (flags & 0x000400) !== 0;\n const sampleCompositionOffsetsPresent = (flags & 0x000800) !== 0;\n let compositionOffset = 0;\n const sampleCount = readUint32(trun, 4);\n let trunOffset = 8; // past version, flags, and sample count\n\n if (dataOffsetPresent) {\n dataOffset = readUint32(trun, trunOffset);\n trunOffset += 4;\n }\n if (firstSampleFlagsPresent) {\n trunOffset += 4;\n }\n let sampleOffset = dataOffset + moofOffset;\n for (let ix = 0; ix < sampleCount; ix++) {\n if (sampleDurationPresent) {\n sampleDuration = readUint32(trun, trunOffset);\n trunOffset += 4;\n } else {\n sampleDuration = defaultSampleDuration;\n }\n if (sampleSizePresent) {\n sampleSize = readUint32(trun, trunOffset);\n trunOffset += 4;\n } else {\n sampleSize = defaultSampleSize;\n }\n if (sampleFlagsPresent) {\n trunOffset += 4;\n }\n if (sampleCompositionOffsetsPresent) {\n if (version === 0) {\n compositionOffset = readUint32(trun, trunOffset);\n } else {\n compositionOffset = readSint32(trun, trunOffset);\n }\n trunOffset += 4;\n }\n if (track.type === ElementaryStreamTypes.VIDEO) {\n let naluTotalSize = 0;\n while (naluTotalSize < sampleSize) {\n const naluSize = readUint32(videoData, sampleOffset);\n sampleOffset += 4;\n if (isSEIMessage(isHEVCFlavor, videoData[sampleOffset])) {\n const data = videoData.subarray(sampleOffset, sampleOffset + naluSize);\n parseSEIMessageFromNALu(data, isHEVCFlavor ? 2 : 1, timeOffset + compositionOffset / timescale, seiSamples);\n }\n sampleOffset += naluSize;\n naluTotalSize += naluSize + 4;\n }\n }\n timeOffset += sampleDuration / timescale;\n }\n });\n }\n });\n });\n });\n return seiSamples;\n}\nfunction isHEVC(codec) {\n if (!codec) {\n return false;\n }\n const baseCodec = codec.substring(0, 4);\n return baseCodec === 'hvc1' || baseCodec === 'hev1' ||\n // Dolby Vision\n baseCodec === 'dvh1' || baseCodec === 'dvhe';\n}\nfunction isSEIMessage(isHEVCFlavor, naluHeader) {\n if (isHEVCFlavor) {\n const naluType = naluHeader >> 1 & 0x3f;\n return naluType === 39 || naluType === 40;\n } else {\n const naluType = naluHeader & 0x1f;\n return naluType === 6;\n }\n}\nfunction parseSEIMessageFromNALu(unescapedData, headerSize, pts, samples) {\n const data = discardEPB(unescapedData);\n let seiPtr = 0;\n // skip nal header\n seiPtr += headerSize;\n let payloadType = 0;\n let payloadSize = 0;\n let b = 0;\n while (seiPtr < data.length) {\n payloadType = 0;\n do {\n if (seiPtr >= data.length) {\n break;\n }\n b = data[seiPtr++];\n payloadType += b;\n } while (b === 0xff);\n\n // Parse payload size.\n payloadSize = 0;\n do {\n if (seiPtr >= data.length) {\n break;\n }\n b = data[seiPtr++];\n payloadSize += b;\n } while (b === 0xff);\n const leftOver = data.length - seiPtr;\n // Create a variable to process the payload\n let payPtr = seiPtr;\n\n // Increment the seiPtr to the end of the payload\n if (payloadSize < leftOver) {\n seiPtr += payloadSize;\n } else if (payloadSize > leftOver) {\n // Some type of corruption has happened?\n logger.error(`Malformed SEI payload. ${payloadSize} is too small, only ${leftOver} bytes left to parse.`);\n // We might be able to parse some data, but let's be safe and ignore it.\n break;\n }\n if (payloadType === 4) {\n const countryCode = data[payPtr++];\n if (countryCode === 181) {\n const providerCode = readUint16(data, payPtr);\n payPtr += 2;\n if (providerCode === 49) {\n const userStructure = readUint32(data, payPtr);\n payPtr += 4;\n if (userStructure === 0x47413934) {\n const userDataType = data[payPtr++];\n\n // Raw CEA-608 bytes wrapped in CEA-708 packet\n if (userDataType === 3) {\n const firstByte = data[payPtr++];\n const totalCCs = 0x1f & firstByte;\n const enabled = 0x40 & firstByte;\n const totalBytes = enabled ? 2 + totalCCs * 3 : 0;\n const byteArray = new Uint8Array(totalBytes);\n if (enabled) {\n byteArray[0] = firstByte;\n for (let i = 1; i < totalBytes; i++) {\n byteArray[i] = data[payPtr++];\n }\n }\n samples.push({\n type: userDataType,\n payloadType,\n pts,\n bytes: byteArray\n });\n }\n }\n }\n }\n } else if (payloadType === 5) {\n if (payloadSize > 16) {\n const uuidStrArray = [];\n for (let i = 0; i < 16; i++) {\n const _b = data[payPtr++].toString(16);\n uuidStrArray.push(_b.length == 1 ? '0' + _b : _b);\n if (i === 3 || i === 5 || i === 7 || i === 9) {\n uuidStrArray.push('-');\n }\n }\n const length = payloadSize - 16;\n const userDataBytes = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n userDataBytes[i] = data[payPtr++];\n }\n samples.push({\n payloadType,\n pts,\n uuid: uuidStrArray.join(''),\n userData: utf8ArrayToStr(userDataBytes),\n userDataBytes\n });\n }\n }\n }\n}\n\n/**\n * remove Emulation Prevention bytes from a RBSP\n */\nfunction discardEPB(data) {\n const length = data.byteLength;\n const EPBPositions = [];\n let i = 1;\n\n // Find all `Emulation Prevention Bytes`\n while (i < length - 2) {\n if (data[i] === 0 && data[i + 1] === 0 && data[i + 2] === 0x03) {\n EPBPositions.push(i + 2);\n i += 2;\n } else {\n i++;\n }\n }\n\n // If no Emulation Prevention Bytes were found just return the original\n // array\n if (EPBPositions.length === 0) {\n return data;\n }\n\n // Create a new array to hold the NAL unit data\n const newLength = length - EPBPositions.length;\n const newData = new Uint8Array(newLength);\n let sourceIndex = 0;\n for (i = 0; i < newLength; sourceIndex++, i++) {\n if (sourceIndex === EPBPositions[0]) {\n // Skip this byte\n sourceIndex++;\n // Remove this position index\n EPBPositions.shift();\n }\n newData[i] = data[sourceIndex];\n }\n return newData;\n}\nfunction parseEmsg(data) {\n const version = data[0];\n let schemeIdUri = '';\n let value = '';\n let timeScale = 0;\n let presentationTimeDelta = 0;\n let presentationTime = 0;\n let eventDuration = 0;\n let id = 0;\n let offset = 0;\n if (version === 0) {\n while (bin2str(data.subarray(offset, offset + 1)) !== '\\0') {\n schemeIdUri += bin2str(data.subarray(offset, offset + 1));\n offset += 1;\n }\n schemeIdUri += bin2str(data.subarray(offset, offset + 1));\n offset += 1;\n while (bin2str(data.subarray(offset, offset + 1)) !== '\\0') {\n value += bin2str(data.subarray(offset, offset + 1));\n offset += 1;\n }\n value += bin2str(data.subarray(offset, offset + 1));\n offset += 1;\n timeScale = readUint32(data, 12);\n presentationTimeDelta = readUint32(data, 16);\n eventDuration = readUint32(data, 20);\n id = readUint32(data, 24);\n offset = 28;\n } else if (version === 1) {\n offset += 4;\n timeScale = readUint32(data, offset);\n offset += 4;\n const leftPresentationTime = readUint32(data, offset);\n offset += 4;\n const rightPresentationTime = readUint32(data, offset);\n offset += 4;\n presentationTime = 2 ** 32 * leftPresentationTime + rightPresentationTime;\n if (!isSafeInteger(presentationTime)) {\n presentationTime = Number.MAX_SAFE_INTEGER;\n logger.warn('Presentation time exceeds safe integer limit and wrapped to max safe integer in parsing emsg box');\n }\n eventDuration = readUint32(data, offset);\n offset += 4;\n id = readUint32(data, offset);\n offset += 4;\n while (bin2str(data.subarray(offset, offset + 1)) !== '\\0') {\n schemeIdUri += bin2str(data.subarray(offset, offset + 1));\n offset += 1;\n }\n schemeIdUri += bin2str(data.subarray(offset, offset + 1));\n offset += 1;\n while (bin2str(data.subarray(offset, offset + 1)) !== '\\0') {\n value += bin2str(data.subarray(offset, offset + 1));\n offset += 1;\n }\n value += bin2str(data.subarray(offset, offset + 1));\n offset += 1;\n }\n const payload = data.subarray(offset, data.byteLength);\n return {\n schemeIdUri,\n value,\n timeScale,\n presentationTime,\n presentationTimeDelta,\n eventDuration,\n id,\n payload\n };\n}\nfunction mp4Box(type, ...payload) {\n const len = payload.length;\n let size = 8;\n let i = len;\n while (i--) {\n size += payload[i].byteLength;\n }\n const result = new Uint8Array(size);\n result[0] = size >> 24 & 0xff;\n result[1] = size >> 16 & 0xff;\n result[2] = size >> 8 & 0xff;\n result[3] = size & 0xff;\n result.set(type, 4);\n for (i = 0, size = 8; i < len; i++) {\n result.set(payload[i], size);\n size += payload[i].byteLength;\n }\n return result;\n}\nfunction mp4pssh(systemId, keyids, data) {\n if (systemId.byteLength !== 16) {\n throw new RangeError('Invalid system id');\n }\n let version;\n let kids;\n {\n version = 0;\n kids = new Uint8Array();\n }\n let kidCount;\n if (version > 0) {\n kidCount = new Uint8Array(4);\n if (keyids.length > 0) {\n new DataView(kidCount.buffer).setUint32(0, keyids.length, false);\n }\n } else {\n kidCount = new Uint8Array();\n }\n const dataSize = new Uint8Array(4);\n if (data.byteLength > 0) {\n new DataView(dataSize.buffer).setUint32(0, data.byteLength, false);\n }\n return mp4Box([112, 115, 115, 104], new Uint8Array([version, 0x00, 0x00, 0x00 // Flags\n ]), systemId,\n // 16 bytes\n kidCount, kids, dataSize, data);\n}\nfunction parseMultiPssh(initData) {\n const results = [];\n if (initData instanceof ArrayBuffer) {\n const length = initData.byteLength;\n let offset = 0;\n while (offset + 32 < length) {\n const view = new DataView(initData, offset);\n const pssh = parsePssh(view);\n results.push(pssh);\n offset += pssh.size;\n }\n }\n return results;\n}\nfunction parsePssh(view) {\n const size = view.getUint32(0);\n const offset = view.byteOffset;\n const length = view.byteLength;\n if (length < size) {\n return {\n offset,\n size: length\n };\n }\n const type = view.getUint32(4);\n if (type !== 0x70737368) {\n return {\n offset,\n size\n };\n }\n const version = view.getUint32(8) >>> 24;\n if (version !== 0 && version !== 1) {\n return {\n offset,\n size\n };\n }\n const buffer = view.buffer;\n const systemId = arrayToHex(new Uint8Array(buffer, offset + 12, 16));\n let kids = null;\n let data = null;\n let dataSizeOffset = 0;\n if (version === 0) {\n dataSizeOffset = 28;\n } else {\n const kidCounts = view.getUint32(28);\n if (!kidCounts || length < 32 + kidCounts * 16) {\n return {\n offset,\n size\n };\n }\n kids = [];\n for (let i = 0; i < kidCounts; i++) {\n kids.push(new Uint8Array(buffer, offset + 32 + i * 16, 16));\n }\n dataSizeOffset = 32 + kidCounts * 16;\n }\n if (!dataSizeOffset) {\n return {\n offset,\n size\n };\n }\n const dataSizeOrKidCount = view.getUint32(dataSizeOffset);\n if (size - 32 < dataSizeOrKidCount) {\n return {\n offset,\n size\n };\n }\n data = new Uint8Array(buffer, offset + dataSizeOffset + 4, dataSizeOrKidCount);\n return {\n version,\n systemId,\n kids,\n data,\n offset,\n size\n };\n}\n\nconst userAgentHevcSupportIsInaccurate = () => {\n return /\\(Windows.+Firefox\\//i.test(navigator.userAgent);\n};\n\n// from http://mp4ra.org/codecs.html\n// values indicate codec selection preference (lower is higher priority)\nconst sampleEntryCodesISO = {\n audio: {\n a3ds: 1,\n 'ac-3': 0.95,\n 'ac-4': 1,\n alac: 0.9,\n alaw: 1,\n dra1: 1,\n 'dts+': 1,\n 'dts-': 1,\n dtsc: 1,\n dtse: 1,\n dtsh: 1,\n 'ec-3': 0.9,\n enca: 1,\n fLaC: 0.9,\n // MP4-RA listed codec entry for FLAC\n flac: 0.9,\n // legacy browser codec name for FLAC\n FLAC: 0.9,\n // some manifests may list \"FLAC\" with Apple's tools\n g719: 1,\n g726: 1,\n m4ae: 1,\n mha1: 1,\n mha2: 1,\n mhm1: 1,\n mhm2: 1,\n mlpa: 1,\n mp4a: 1,\n 'raw ': 1,\n Opus: 1,\n opus: 1,\n // browsers expect this to be lowercase despite MP4RA says 'Opus'\n samr: 1,\n sawb: 1,\n sawp: 1,\n sevc: 1,\n sqcp: 1,\n ssmv: 1,\n twos: 1,\n ulaw: 1\n },\n video: {\n avc1: 1,\n avc2: 1,\n avc3: 1,\n avc4: 1,\n avcp: 1,\n av01: 0.8,\n dav1: 0.8,\n drac: 1,\n dva1: 1,\n dvav: 1,\n dvh1: 0.7,\n dvhe: 0.7,\n encv: 1,\n hev1: 0.75,\n hvc1: 0.75,\n mjp2: 1,\n mp4v: 1,\n mvc1: 1,\n mvc2: 1,\n mvc3: 1,\n mvc4: 1,\n resv: 1,\n rv60: 1,\n s263: 1,\n svc1: 1,\n svc2: 1,\n 'vc-1': 1,\n vp08: 1,\n vp09: 0.9\n },\n text: {\n stpp: 1,\n wvtt: 1\n }\n};\nfunction isCodecType(codec, type) {\n const typeCodes = sampleEntryCodesISO[type];\n return !!typeCodes && !!typeCodes[codec.slice(0, 4)];\n}\nfunction areCodecsMediaSourceSupported(codecs, type, preferManagedMediaSource = true) {\n return !codecs.split(',').some(codec => !isCodecMediaSourceSupported(codec, type, preferManagedMediaSource));\n}\nfunction isCodecMediaSourceSupported(codec, type, preferManagedMediaSource = true) {\n var _MediaSource$isTypeSu;\n const MediaSource = getMediaSource(preferManagedMediaSource);\n return (_MediaSource$isTypeSu = MediaSource == null ? void 0 : MediaSource.isTypeSupported(mimeTypeForCodec(codec, type))) != null ? _MediaSource$isTypeSu : false;\n}\nfunction mimeTypeForCodec(codec, type) {\n return `${type}/mp4;codecs=${codec}`;\n}\nfunction videoCodecPreferenceValue(videoCodec) {\n if (videoCodec) {\n const fourCC = videoCodec.substring(0, 4);\n return sampleEntryCodesISO.video[fourCC];\n }\n return 2;\n}\nfunction codecsSetSelectionPreferenceValue(codecSet) {\n const limitedHevcSupport = userAgentHevcSupportIsInaccurate();\n return codecSet.split(',').reduce((num, fourCC) => {\n const lowerPriority = limitedHevcSupport && isHEVC(fourCC);\n const preferenceValue = lowerPriority ? 9 : sampleEntryCodesISO.video[fourCC];\n if (preferenceValue) {\n return (preferenceValue * 2 + num) / (num ? 3 : 2);\n }\n return (sampleEntryCodesISO.audio[fourCC] + num) / (num ? 2 : 1);\n }, 0);\n}\nconst CODEC_COMPATIBLE_NAMES = {};\nfunction getCodecCompatibleNameLower(lowerCaseCodec, preferManagedMediaSource = true) {\n if (CODEC_COMPATIBLE_NAMES[lowerCaseCodec]) {\n return CODEC_COMPATIBLE_NAMES[lowerCaseCodec];\n }\n const codecsToCheck = {\n // Idealy fLaC and Opus would be first (spec-compliant) but\n // some browsers will report that fLaC is supported then fail.\n // see: https://bugs.chromium.org/p/chromium/issues/detail?id=1422728\n flac: ['flac', 'fLaC', 'FLAC'],\n opus: ['opus', 'Opus'],\n // Replace audio codec info if browser does not support mp4a.40.34,\n // and demuxer can fallback to 'audio/mpeg' or 'audio/mp4;codecs=\"mp3\"'\n 'mp4a.40.34': ['mp3']\n }[lowerCaseCodec];\n for (let i = 0; i < codecsToCheck.length; i++) {\n var _getMediaSource;\n if (isCodecMediaSourceSupported(codecsToCheck[i], 'audio', preferManagedMediaSource)) {\n CODEC_COMPATIBLE_NAMES[lowerCaseCodec] = codecsToCheck[i];\n return codecsToCheck[i];\n } else if (codecsToCheck[i] === 'mp3' && (_getMediaSource = getMediaSource(preferManagedMediaSource)) != null && _getMediaSource.isTypeSupported('audio/mpeg')) {\n return '';\n }\n }\n return lowerCaseCodec;\n}\nconst AUDIO_CODEC_REGEXP = /flac|opus|mp4a\\.40\\.34/i;\nfunction getCodecCompatibleName(codec, preferManagedMediaSource = true) {\n return codec.replace(AUDIO_CODEC_REGEXP, m => getCodecCompatibleNameLower(m.toLowerCase(), preferManagedMediaSource));\n}\nfunction replaceVideoCodec(originalCodecs, newVideoCodec) {\n const codecs = [];\n if (originalCodecs) {\n const allCodecs = originalCodecs.split(',');\n for (let i = 0; i < allCodecs.length; i++) {\n if (!isCodecType(allCodecs[i], 'video')) {\n codecs.push(allCodecs[i]);\n }\n }\n }\n if (newVideoCodec) {\n codecs.push(newVideoCodec);\n }\n return codecs.join(',');\n}\nfunction pickMostCompleteCodecName(parsedCodec, levelCodec) {\n // Parsing of mp4a codecs strings in mp4-tools from media is incomplete as of d8c6c7a\n // so use level codec is parsed codec is unavailable or incomplete\n if (parsedCodec && (parsedCodec.length > 4 || ['ac-3', 'ec-3', 'alac', 'fLaC', 'Opus'].indexOf(parsedCodec) !== -1)) {\n if (isCodecSupportedAsType(parsedCodec, 'audio') || isCodecSupportedAsType(parsedCodec, 'video')) {\n return parsedCodec;\n }\n }\n if (levelCodec) {\n const levelCodecs = levelCodec.split(',');\n if (levelCodecs.length > 1) {\n if (parsedCodec) {\n for (let i = levelCodecs.length; i--;) {\n if (levelCodecs[i].substring(0, 4) === parsedCodec.substring(0, 4)) {\n return levelCodecs[i];\n }\n }\n }\n return levelCodecs[0];\n }\n }\n return levelCodec || parsedCodec;\n}\nfunction isCodecSupportedAsType(codec, type) {\n return isCodecType(codec, type) && isCodecMediaSourceSupported(codec, type);\n}\nfunction convertAVC1ToAVCOTI(videoCodecs) {\n // Convert avc1 codec string from RFC-4281 to RFC-6381 for MediaSource.isTypeSupported\n // Examples: avc1.66.30 to avc1.42001e and avc1.77.30,avc1.66.30 to avc1.4d001e,avc1.42001e.\n const codecs = videoCodecs.split(',');\n for (let i = 0; i < codecs.length; i++) {\n const avcdata = codecs[i].split('.');\n // only convert codec strings starting with avc1 (Examples: avc1.64001f,dvh1.05.07)\n if (avcdata.length > 2 && avcdata[0] === 'avc1') {\n codecs[i] = `avc1.${parseInt(avcdata[1]).toString(16)}${('000' + parseInt(avcdata[2]).toString(16)).slice(-4)}`;\n }\n }\n return codecs.join(',');\n}\nfunction fillInMissingAV01Params(videoCodec) {\n // Used to fill in incomplete AV1 playlist CODECS strings for mediaCapabilities.decodingInfo queries\n if (videoCodec.startsWith('av01.')) {\n const av1params = videoCodec.split('.');\n const placeholders = ['0', '111', '01', '01', '01', '0'];\n for (let i = av1params.length; i > 4 && i < 10; i++) {\n av1params[i] = placeholders[i - 4];\n }\n return av1params.join('.');\n }\n return videoCodec;\n}\nfunction getM2TSSupportedAudioTypes(preferManagedMediaSource) {\n const MediaSource = getMediaSource(preferManagedMediaSource) || {\n isTypeSupported: () => false\n };\n return {\n mpeg: MediaSource.isTypeSupported('audio/mpeg'),\n mp3: MediaSource.isTypeSupported('audio/mp4; codecs=\"mp3\"'),\n ac3: MediaSource.isTypeSupported('audio/mp4; codecs=\"ac-3\"') \n };\n}\nfunction getCodecsForMimeType(mimeType) {\n return mimeType.replace(/^.+codecs=[\"']?([^\"']+).*$/, '$1');\n}\n\n// @ts-ignore\nconst supportedResult = {\n supported: true,\n powerEfficient: true,\n smooth: true\n // keySystemAccess: null,\n};\n\n// @ts-ignore\nconst unsupportedResult = {\n supported: false,\n smooth: false,\n powerEfficient: false\n // keySystemAccess: null,\n};\nconst SUPPORTED_INFO_DEFAULT = {\n supported: true,\n configurations: [],\n decodingInfoResults: [supportedResult]\n};\nfunction getUnsupportedResult(error, configurations) {\n return {\n supported: false,\n configurations,\n decodingInfoResults: [unsupportedResult],\n error\n };\n}\nfunction requiresMediaCapabilitiesDecodingInfo(level, audioTracksByGroup, currentVideoRange, currentFrameRate, currentBw, audioPreference) {\n // Only test support when configuration is exceeds minimum options\n const videoCodecs = level.videoCodec;\n const audioGroups = level.audioCodec ? level.audioGroups : null;\n const audioCodecPreference = audioPreference == null ? void 0 : audioPreference.audioCodec;\n const channelsPreference = audioPreference == null ? void 0 : audioPreference.channels;\n const maxChannels = channelsPreference ? parseInt(channelsPreference) : audioCodecPreference ? Infinity : 2;\n let audioChannels = null;\n if (audioGroups != null && audioGroups.length) {\n try {\n if (audioGroups.length === 1 && audioGroups[0]) {\n audioChannels = audioTracksByGroup.groups[audioGroups[0]].channels;\n } else {\n audioChannels = audioGroups.reduce((acc, groupId) => {\n if (groupId) {\n const audioTrackGroup = audioTracksByGroup.groups[groupId];\n if (!audioTrackGroup) {\n throw new Error(`Audio track group ${groupId} not found`);\n }\n // Sum all channel key values\n Object.keys(audioTrackGroup.channels).forEach(key => {\n acc[key] = (acc[key] || 0) + audioTrackGroup.channels[key];\n });\n }\n return acc;\n }, {\n 2: 0\n });\n }\n } catch (error) {\n return true;\n }\n }\n return videoCodecs !== undefined && (\n // Force media capabilities check for HEVC to avoid failure on Windows\n videoCodecs.split(',').some(videoCodec => isHEVC(videoCodec)) || level.width > 1920 && level.height > 1088 || level.height > 1920 && level.width > 1088 || level.frameRate > Math.max(currentFrameRate, 30) || level.videoRange !== 'SDR' && level.videoRange !== currentVideoRange || level.bitrate > Math.max(currentBw, 8e6)) || !!audioChannels && isFiniteNumber(maxChannels) && Object.keys(audioChannels).some(channels => parseInt(channels) > maxChannels);\n}\nfunction getMediaDecodingInfoPromise(level, audioTracksByGroup, mediaCapabilities, cache = {}) {\n const videoCodecs = level.videoCodec;\n if (!videoCodecs && !level.audioCodec || !mediaCapabilities) {\n return Promise.resolve(SUPPORTED_INFO_DEFAULT);\n }\n const configurations = [];\n const videoDecodeList = makeVideoConfigurations(level);\n const videoCount = videoDecodeList.length;\n const audioDecodeList = makeAudioConfigurations(level, audioTracksByGroup, videoCount > 0);\n const audioCount = audioDecodeList.length;\n for (let i = videoCount || 1 * audioCount || 1; i--;) {\n const configuration = {\n type: 'media-source'\n };\n if (videoCount) {\n configuration.video = videoDecodeList[i % videoCount];\n }\n if (audioCount) {\n configuration.audio = audioDecodeList[i % audioCount];\n const audioBitrate = configuration.audio.bitrate;\n if (configuration.video && audioBitrate) {\n configuration.video.bitrate -= audioBitrate;\n }\n }\n configurations.push(configuration);\n }\n if (videoCodecs) {\n // Override Windows Firefox HEVC MediaCapabilities result (https://github.com/video-dev/hls.js/issues/7046)\n const ua = navigator.userAgent;\n if (videoCodecs.split(',').some(videoCodec => isHEVC(videoCodec)) && userAgentHevcSupportIsInaccurate()) {\n return Promise.resolve(getUnsupportedResult(new Error(`Overriding Windows Firefox HEVC MediaCapabilities result based on user-agent string: (${ua})`), configurations));\n }\n }\n return Promise.all(configurations.map(configuration => {\n // Cache MediaCapabilities promises\n const decodingInfoKey = getMediaDecodingInfoKey(configuration);\n return cache[decodingInfoKey] || (cache[decodingInfoKey] = mediaCapabilities.decodingInfo(configuration));\n })).then(decodingInfoResults => ({\n supported: !decodingInfoResults.some(info => !info.supported),\n configurations,\n decodingInfoResults\n })).catch(error => ({\n supported: false,\n configurations,\n decodingInfoResults: [],\n error\n }));\n}\nfunction makeVideoConfigurations(level) {\n var _level$videoCodec;\n const videoCodecs = (_level$videoCodec = level.videoCodec) == null ? void 0 : _level$videoCodec.split(',');\n const bitrate = getVariantDecodingBitrate(level);\n const width = level.width || 640;\n const height = level.height || 480;\n // Assume a framerate of 30fps since MediaCapabilities will not accept Level default of 0.\n const framerate = level.frameRate || 30;\n const videoRange = level.videoRange.toLowerCase();\n return videoCodecs ? videoCodecs.map(videoCodec => {\n const videoConfiguration = {\n contentType: mimeTypeForCodec(fillInMissingAV01Params(videoCodec), 'video'),\n width,\n height,\n bitrate,\n framerate\n };\n if (videoRange !== 'sdr') {\n videoConfiguration.transferFunction = videoRange;\n }\n return videoConfiguration;\n }) : [];\n}\nfunction makeAudioConfigurations(level, audioTracksByGroup, hasVideo) {\n var _level$audioCodec;\n const audioCodecs = (_level$audioCodec = level.audioCodec) == null ? void 0 : _level$audioCodec.split(',');\n const combinedBitrate = getVariantDecodingBitrate(level);\n if (audioCodecs && level.audioGroups) {\n return level.audioGroups.reduce((configurations, audioGroupId) => {\n var _audioTracksByGroup$g;\n const tracks = audioGroupId ? (_audioTracksByGroup$g = audioTracksByGroup.groups[audioGroupId]) == null ? void 0 : _audioTracksByGroup$g.tracks : null;\n if (tracks) {\n return tracks.reduce((configs, audioTrack) => {\n if (audioTrack.groupId === audioGroupId) {\n const channelsNumber = parseFloat(audioTrack.channels || '');\n audioCodecs.forEach(audioCodec => {\n const audioConfiguration = {\n contentType: mimeTypeForCodec(audioCodec, 'audio'),\n bitrate: hasVideo ? estimatedAudioBitrate(audioCodec, combinedBitrate) : combinedBitrate\n };\n if (channelsNumber) {\n audioConfiguration.channels = '' + channelsNumber;\n }\n configs.push(audioConfiguration);\n });\n }\n return configs;\n }, configurations);\n }\n return configurations;\n }, []);\n }\n return [];\n}\nfunction estimatedAudioBitrate(audioCodec, levelBitrate) {\n if (levelBitrate <= 1) {\n return 1;\n }\n let audioBitrate = 128000;\n if (audioCodec === 'ec-3') {\n audioBitrate = 768000;\n } else if (audioCodec === 'ac-3') {\n audioBitrate = 640000;\n }\n return Math.min(levelBitrate / 2, audioBitrate); // Don't exceed some % of level bitrate\n}\nfunction getVariantDecodingBitrate(level) {\n return Math.ceil(Math.max(level.bitrate * 0.9, level.averageBitrate) / 1000) * 1000 || 1;\n}\nfunction getMediaDecodingInfoKey(config) {\n let key = '';\n const {\n audio,\n video\n } = config;\n if (video) {\n const codec = getCodecsForMimeType(video.contentType);\n key += `${codec}_r${video.height}x${video.width}f${Math.ceil(video.framerate)}${video.transferFunction || 'sd'}_${Math.ceil(video.bitrate / 1e5)}`;\n }\n if (audio) {\n const codec = getCodecsForMimeType(audio.contentType);\n key += `${video ? '_' : ''}${codec}_c${audio.channels}`;\n }\n return key;\n}\n\nconst HdcpLevels = ['NONE', 'TYPE-0', 'TYPE-1', null];\nfunction isHdcpLevel(value) {\n return HdcpLevels.indexOf(value) > -1;\n}\nconst VideoRangeValues = ['SDR', 'PQ', 'HLG'];\nfunction isVideoRange(value) {\n return !!value && VideoRangeValues.indexOf(value) > -1;\n}\nvar HlsSkip = {\n No: \"\",\n Yes: \"YES\",\n v2: \"v2\"\n};\nfunction getSkipValue(details) {\n const {\n canSkipUntil,\n canSkipDateRanges,\n age\n } = details;\n // A Client SHOULD NOT request a Playlist Delta Update unless it already\n // has a version of the Playlist that is no older than one-half of the Skip Boundary.\n // @see: https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis#section-6.3.7\n const playlistRecentEnough = age < canSkipUntil / 2;\n if (canSkipUntil && playlistRecentEnough) {\n if (canSkipDateRanges) {\n return HlsSkip.v2;\n }\n return HlsSkip.Yes;\n }\n return HlsSkip.No;\n}\nclass HlsUrlParameters {\n constructor(msn, part, skip) {\n this.msn = void 0;\n this.part = void 0;\n this.skip = void 0;\n this.msn = msn;\n this.part = part;\n this.skip = skip;\n }\n addDirectives(uri) {\n const url = new self.URL(uri);\n if (this.msn !== undefined) {\n url.searchParams.set('_HLS_msn', this.msn.toString());\n }\n if (this.part !== undefined) {\n url.searchParams.set('_HLS_part', this.part.toString());\n }\n if (this.skip) {\n url.searchParams.set('_HLS_skip', this.skip);\n }\n return url.href;\n }\n}\nclass Level {\n constructor(data) {\n this._attrs = void 0;\n this.audioCodec = void 0;\n this.bitrate = void 0;\n this.codecSet = void 0;\n this.url = void 0;\n this.frameRate = void 0;\n this.height = void 0;\n this.id = void 0;\n this.name = void 0;\n this.supplemental = void 0;\n this.videoCodec = void 0;\n this.width = void 0;\n this.details = void 0;\n this.fragmentError = 0;\n this.loadError = 0;\n this.loaded = void 0;\n this.realBitrate = 0;\n this.supportedPromise = void 0;\n this.supportedResult = void 0;\n this._avgBitrate = 0;\n this._audioGroups = void 0;\n this._subtitleGroups = void 0;\n // Deprecated (retained for backwards compatibility)\n this._urlId = 0;\n this.url = [data.url];\n this._attrs = [data.attrs];\n this.bitrate = data.bitrate;\n if (data.details) {\n this.details = data.details;\n }\n this.id = data.id || 0;\n this.name = data.name;\n this.width = data.width || 0;\n this.height = data.height || 0;\n this.frameRate = data.attrs.optionalFloat('FRAME-RATE', 0);\n this._avgBitrate = data.attrs.decimalInteger('AVERAGE-BANDWIDTH');\n this.audioCodec = data.audioCodec;\n this.videoCodec = data.videoCodec;\n this.codecSet = [data.videoCodec, data.audioCodec].filter(c => !!c).map(s => s.substring(0, 4)).join(',');\n if ('supplemental' in data) {\n var _data$supplemental;\n this.supplemental = data.supplemental;\n const supplementalVideo = (_data$supplemental = data.supplemental) == null ? void 0 : _data$supplemental.videoCodec;\n if (supplementalVideo && supplementalVideo !== data.videoCodec) {\n this.codecSet += `,${supplementalVideo.substring(0, 4)}`;\n }\n }\n this.addGroupId('audio', data.attrs.AUDIO);\n this.addGroupId('text', data.attrs.SUBTITLES);\n }\n get maxBitrate() {\n return Math.max(this.realBitrate, this.bitrate);\n }\n get averageBitrate() {\n return this._avgBitrate || this.realBitrate || this.bitrate;\n }\n get attrs() {\n return this._attrs[0];\n }\n get codecs() {\n return this.attrs.CODECS || '';\n }\n get pathwayId() {\n return this.attrs['PATHWAY-ID'] || '.';\n }\n get videoRange() {\n return this.attrs['VIDEO-RANGE'] || 'SDR';\n }\n get score() {\n return this.attrs.optionalFloat('SCORE', 0);\n }\n get uri() {\n return this.url[0] || '';\n }\n hasAudioGroup(groupId) {\n return hasGroup(this._audioGroups, groupId);\n }\n hasSubtitleGroup(groupId) {\n return hasGroup(this._subtitleGroups, groupId);\n }\n get audioGroups() {\n return this._audioGroups;\n }\n get subtitleGroups() {\n return this._subtitleGroups;\n }\n addGroupId(type, groupId) {\n if (!groupId) {\n return;\n }\n if (type === 'audio') {\n let audioGroups = this._audioGroups;\n if (!audioGroups) {\n audioGroups = this._audioGroups = [];\n }\n if (audioGroups.indexOf(groupId) === -1) {\n audioGroups.push(groupId);\n }\n } else if (type === 'text') {\n let subtitleGroups = this._subtitleGroups;\n if (!subtitleGroups) {\n subtitleGroups = this._subtitleGroups = [];\n }\n if (subtitleGroups.indexOf(groupId) === -1) {\n subtitleGroups.push(groupId);\n }\n }\n }\n\n // Deprecated methods (retained for backwards compatibility)\n get urlId() {\n return 0;\n }\n set urlId(value) {}\n get audioGroupIds() {\n return this.audioGroups ? [this.audioGroupId] : undefined;\n }\n get textGroupIds() {\n return this.subtitleGroups ? [this.textGroupId] : undefined;\n }\n get audioGroupId() {\n var _this$audioGroups;\n return (_this$audioGroups = this.audioGroups) == null ? void 0 : _this$audioGroups[0];\n }\n get textGroupId() {\n var _this$subtitleGroups;\n return (_this$subtitleGroups = this.subtitleGroups) == null ? void 0 : _this$subtitleGroups[0];\n }\n addFallback() {}\n}\nfunction hasGroup(groups, groupId) {\n if (!groupId || !groups) {\n return false;\n }\n return groups.indexOf(groupId) !== -1;\n}\n\n/**\n * @returns Whether we can detect and validate HDR capability within the window context\n */\nfunction isHdrSupported() {\n if (typeof matchMedia === 'function') {\n const mediaQueryList = matchMedia('(dynamic-range: high)');\n const badQuery = matchMedia('bad query');\n if (mediaQueryList.media !== badQuery.media) {\n return mediaQueryList.matches === true;\n }\n }\n return false;\n}\n\n/**\n * Sanitizes inputs to return the active video selection options for HDR/SDR.\n * When both inputs are null:\n *\n * `{ preferHDR: false, allowedVideoRanges: [] }`\n *\n * When `currentVideoRange` non-null, maintain the active range:\n *\n * `{ preferHDR: currentVideoRange !== 'SDR', allowedVideoRanges: [currentVideoRange] }`\n *\n * When VideoSelectionOption non-null:\n *\n * - Allow all video ranges if `allowedVideoRanges` unspecified.\n * - If `preferHDR` is non-null use the value to filter `allowedVideoRanges`.\n * - Else check window for HDR support and set `preferHDR` to the result.\n *\n * @param currentVideoRange\n * @param videoPreference\n */\nfunction getVideoSelectionOptions(currentVideoRange, videoPreference) {\n let preferHDR = false;\n let allowedVideoRanges = [];\n if (currentVideoRange) {\n preferHDR = currentVideoRange !== 'SDR';\n allowedVideoRanges = [currentVideoRange];\n }\n if (videoPreference) {\n allowedVideoRanges = videoPreference.allowedVideoRanges || VideoRangeValues.slice(0);\n const allowAutoPreferHDR = allowedVideoRanges.join('') !== 'SDR' && !videoPreference.videoCodec;\n preferHDR = videoPreference.preferHDR !== undefined ? videoPreference.preferHDR : allowAutoPreferHDR && isHdrSupported();\n if (!preferHDR) {\n allowedVideoRanges = ['SDR'];\n }\n }\n return {\n preferHDR,\n allowedVideoRanges\n };\n}\n\nconst omitCircularRefsReplacer = replacer => {\n const known = new WeakSet();\n return (_, value) => {\n if (replacer) {\n value = replacer(_, value);\n }\n if (typeof value === 'object' && value !== null) {\n if (known.has(value)) {\n return;\n }\n known.add(value);\n }\n return value;\n };\n};\nconst stringify = (object, replacer) => JSON.stringify(object, omitCircularRefsReplacer(replacer));\n\nfunction getStartCodecTier(codecTiers, currentVideoRange, currentBw, audioPreference, videoPreference) {\n const codecSets = Object.keys(codecTiers);\n const channelsPreference = audioPreference == null ? void 0 : audioPreference.channels;\n const audioCodecPreference = audioPreference == null ? void 0 : audioPreference.audioCodec;\n const videoCodecPreference = videoPreference == null ? void 0 : videoPreference.videoCodec;\n const preferStereo = channelsPreference && parseInt(channelsPreference) === 2;\n // Use first level set to determine stereo, and minimum resolution and framerate\n let hasStereo = false;\n let hasCurrentVideoRange = false;\n let minHeight = Infinity;\n let minFramerate = Infinity;\n let minBitrate = Infinity;\n let minIndex = Infinity;\n let selectedScore = 0;\n let videoRanges = [];\n const {\n preferHDR,\n allowedVideoRanges\n } = getVideoSelectionOptions(currentVideoRange, videoPreference);\n for (let i = codecSets.length; i--;) {\n const tier = codecTiers[codecSets[i]];\n hasStereo || (hasStereo = tier.channels[2] > 0);\n minHeight = Math.min(minHeight, tier.minHeight);\n minFramerate = Math.min(minFramerate, tier.minFramerate);\n minBitrate = Math.min(minBitrate, tier.minBitrate);\n const matchingVideoRanges = allowedVideoRanges.filter(range => tier.videoRanges[range] > 0);\n if (matchingVideoRanges.length > 0) {\n hasCurrentVideoRange = true;\n }\n }\n minHeight = isFiniteNumber(minHeight) ? minHeight : 0;\n minFramerate = isFiniteNumber(minFramerate) ? minFramerate : 0;\n const maxHeight = Math.max(1080, minHeight);\n const maxFramerate = Math.max(30, minFramerate);\n minBitrate = isFiniteNumber(minBitrate) ? minBitrate : currentBw;\n currentBw = Math.max(minBitrate, currentBw);\n // If there are no variants with matching preference, set currentVideoRange to undefined\n if (!hasCurrentVideoRange) {\n currentVideoRange = undefined;\n }\n const hasMultipleSets = codecSets.length > 1;\n const codecSet = codecSets.reduce((selected, candidate) => {\n // Remove candiates which do not meet bitrate, default audio, stereo or channels preference, 1080p or lower, 30fps or lower, or SDR/HDR selection if present\n const candidateTier = codecTiers[candidate];\n if (candidate === selected) {\n return selected;\n }\n videoRanges = hasCurrentVideoRange ? allowedVideoRanges.filter(range => candidateTier.videoRanges[range] > 0) : [];\n if (hasMultipleSets) {\n if (candidateTier.minBitrate > currentBw) {\n logStartCodecCandidateIgnored(candidate, `min bitrate of ${candidateTier.minBitrate} > current estimate of ${currentBw}`);\n return selected;\n }\n if (!candidateTier.hasDefaultAudio) {\n logStartCodecCandidateIgnored(candidate, `no renditions with default or auto-select sound found`);\n return selected;\n }\n if (audioCodecPreference && candidate.indexOf(audioCodecPreference.substring(0, 4)) % 5 !== 0) {\n logStartCodecCandidateIgnored(candidate, `audio codec preference \"${audioCodecPreference}\" not found`);\n return selected;\n }\n if (channelsPreference && !preferStereo) {\n if (!candidateTier.channels[channelsPreference]) {\n logStartCodecCandidateIgnored(candidate, `no renditions with ${channelsPreference} channel sound found (channels options: ${Object.keys(candidateTier.channels)})`);\n return selected;\n }\n } else if ((!audioCodecPreference || preferStereo) && hasStereo && candidateTier.channels['2'] === 0) {\n logStartCodecCandidateIgnored(candidate, `no renditions with stereo sound found`);\n return selected;\n }\n if (candidateTier.minHeight > maxHeight) {\n logStartCodecCandidateIgnored(candidate, `min resolution of ${candidateTier.minHeight} > maximum of ${maxHeight}`);\n return selected;\n }\n if (candidateTier.minFramerate > maxFramerate) {\n logStartCodecCandidateIgnored(candidate, `min framerate of ${candidateTier.minFramerate} > maximum of ${maxFramerate}`);\n return selected;\n }\n if (!videoRanges.some(range => candidateTier.videoRanges[range] > 0)) {\n logStartCodecCandidateIgnored(candidate, `no variants with VIDEO-RANGE of ${stringify(videoRanges)} found`);\n return selected;\n }\n if (videoCodecPreference && candidate.indexOf(videoCodecPreference.substring(0, 4)) % 5 !== 0) {\n logStartCodecCandidateIgnored(candidate, `video codec preference \"${videoCodecPreference}\" not found`);\n return selected;\n }\n if (candidateTier.maxScore < selectedScore) {\n logStartCodecCandidateIgnored(candidate, `max score of ${candidateTier.maxScore} < selected max of ${selectedScore}`);\n return selected;\n }\n }\n // Remove candiates with less preferred codecs or more errors\n if (selected && (codecsSetSelectionPreferenceValue(candidate) >= codecsSetSelectionPreferenceValue(selected) || candidateTier.fragmentError > codecTiers[selected].fragmentError)) {\n return selected;\n }\n minIndex = candidateTier.minIndex;\n selectedScore = candidateTier.maxScore;\n return candidate;\n }, undefined);\n return {\n codecSet,\n videoRanges,\n preferHDR,\n minFramerate,\n minBitrate,\n minIndex\n };\n}\nfunction logStartCodecCandidateIgnored(codeSet, reason) {\n logger.log(`[abr] start candidates with \"${codeSet}\" ignored because ${reason}`);\n}\nfunction getAudioTracksByGroup(allAudioTracks) {\n return allAudioTracks.reduce((audioTracksByGroup, track) => {\n let trackGroup = audioTracksByGroup.groups[track.groupId];\n if (!trackGroup) {\n trackGroup = audioTracksByGroup.groups[track.groupId] = {\n tracks: [],\n channels: {\n 2: 0\n },\n hasDefault: false,\n hasAutoSelect: false\n };\n }\n trackGroup.tracks.push(track);\n const channelsKey = track.channels || '2';\n trackGroup.channels[channelsKey] = (trackGroup.channels[channelsKey] || 0) + 1;\n trackGroup.hasDefault = trackGroup.hasDefault || track.default;\n trackGroup.hasAutoSelect = trackGroup.hasAutoSelect || track.autoselect;\n if (trackGroup.hasDefault) {\n audioTracksByGroup.hasDefaultAudio = true;\n }\n if (trackGroup.hasAutoSelect) {\n audioTracksByGroup.hasAutoSelectAudio = true;\n }\n return audioTracksByGroup;\n }, {\n hasDefaultAudio: false,\n hasAutoSelectAudio: false,\n groups: {}\n });\n}\nfunction getCodecTiers(levels, audioTracksByGroup, minAutoLevel, maxAutoLevel) {\n return levels.slice(minAutoLevel, maxAutoLevel + 1).reduce((tiers, level, index) => {\n if (!level.codecSet) {\n return tiers;\n }\n const audioGroups = level.audioGroups;\n let tier = tiers[level.codecSet];\n if (!tier) {\n tiers[level.codecSet] = tier = {\n minBitrate: Infinity,\n minHeight: Infinity,\n minFramerate: Infinity,\n minIndex: index,\n maxScore: 0,\n videoRanges: {\n SDR: 0\n },\n channels: {\n '2': 0\n },\n hasDefaultAudio: !audioGroups,\n fragmentError: 0\n };\n }\n tier.minBitrate = Math.min(tier.minBitrate, level.bitrate);\n const lesserWidthOrHeight = Math.min(level.height, level.width);\n tier.minHeight = Math.min(tier.minHeight, lesserWidthOrHeight);\n tier.minFramerate = Math.min(tier.minFramerate, level.frameRate);\n tier.minIndex = Math.min(tier.minIndex, index);\n tier.maxScore = Math.max(tier.maxScore, level.score);\n tier.fragmentError += level.fragmentError;\n tier.videoRanges[level.videoRange] = (tier.videoRanges[level.videoRange] || 0) + 1;\n if (audioGroups) {\n audioGroups.forEach(audioGroupId => {\n if (!audioGroupId) {\n return;\n }\n const audioGroup = audioTracksByGroup.groups[audioGroupId];\n if (!audioGroup) {\n return;\n }\n // Default audio is any group with DEFAULT=YES, or if missing then any group with AUTOSELECT=YES, or all variants\n tier.hasDefaultAudio = tier.hasDefaultAudio || audioTracksByGroup.hasDefaultAudio ? audioGroup.hasDefault : audioGroup.hasAutoSelect || !audioTracksByGroup.hasDefaultAudio && !audioTracksByGroup.hasAutoSelectAudio;\n Object.keys(audioGroup.channels).forEach(channels => {\n tier.channels[channels] = (tier.channels[channels] || 0) + audioGroup.channels[channels];\n });\n });\n }\n return tiers;\n }, {});\n}\nfunction getBasicSelectionOption(option) {\n if (!option) {\n return option;\n }\n const {\n lang,\n assocLang,\n characteristics,\n channels,\n audioCodec\n } = option;\n return {\n lang,\n assocLang,\n characteristics,\n channels,\n audioCodec\n };\n}\nfunction findMatchingOption(option, tracks, matchPredicate) {\n if ('attrs' in option) {\n const index = tracks.indexOf(option);\n if (index !== -1) {\n return index;\n }\n }\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n if (matchesOption(option, track, matchPredicate)) {\n return i;\n }\n }\n return -1;\n}\nfunction matchesOption(option, track, matchPredicate) {\n const {\n groupId,\n name,\n lang,\n assocLang,\n default: isDefault\n } = option;\n const forced = option.forced;\n return (groupId === undefined || track.groupId === groupId) && (name === undefined || track.name === name) && (lang === undefined || languagesMatch(lang, track.lang)) && (lang === undefined || track.assocLang === assocLang) && (isDefault === undefined || track.default === isDefault) && (forced === undefined || track.forced === forced) && (!('characteristics' in option) || characteristicsMatch(option.characteristics || '', track.characteristics)) && (matchPredicate === undefined || matchPredicate(option, track));\n}\nfunction languagesMatch(languageA, languageB = '--') {\n if (languageA.length === languageB.length) {\n return languageA === languageB;\n }\n return languageA.startsWith(languageB) || languageB.startsWith(languageA);\n}\nfunction characteristicsMatch(characteristicsA, characteristicsB = '') {\n const arrA = characteristicsA.split(',');\n const arrB = characteristicsB.split(',');\n // Expects each item to be unique:\n return arrA.length === arrB.length && !arrA.some(el => arrB.indexOf(el) === -1);\n}\nfunction audioMatchPredicate(option, track) {\n const {\n audioCodec,\n channels\n } = option;\n return (audioCodec === undefined || (track.audioCodec || '').substring(0, 4) === audioCodec.substring(0, 4)) && (channels === undefined || channels === (track.channels || '2'));\n}\nfunction findClosestLevelWithAudioGroup(option, levels, allAudioTracks, searchIndex, matchPredicate) {\n const currentLevel = levels[searchIndex];\n // Are there variants with same URI as current level?\n // If so, find a match that does not require any level URI change\n const variants = levels.reduce((variantMap, level, index) => {\n const uri = level.uri;\n const renditions = variantMap[uri] || (variantMap[uri] = []);\n renditions.push(index);\n return variantMap;\n }, {});\n const renditions = variants[currentLevel.uri];\n if (renditions.length > 1) {\n searchIndex = Math.max.apply(Math, renditions);\n }\n // Find best match\n const currentVideoRange = currentLevel.videoRange;\n const currentFrameRate = currentLevel.frameRate;\n const currentVideoCodec = currentLevel.codecSet.substring(0, 4);\n const matchingVideo = searchDownAndUpList(levels, searchIndex, level => {\n if (level.videoRange !== currentVideoRange || level.frameRate !== currentFrameRate || level.codecSet.substring(0, 4) !== currentVideoCodec) {\n return false;\n }\n const audioGroups = level.audioGroups;\n const tracks = allAudioTracks.filter(track => !audioGroups || audioGroups.indexOf(track.groupId) !== -1);\n return findMatchingOption(option, tracks, matchPredicate) > -1;\n });\n if (matchingVideo > -1) {\n return matchingVideo;\n }\n return searchDownAndUpList(levels, searchIndex, level => {\n const audioGroups = level.audioGroups;\n const tracks = allAudioTracks.filter(track => !audioGroups || audioGroups.indexOf(track.groupId) !== -1);\n return findMatchingOption(option, tracks, matchPredicate) > -1;\n });\n}\nfunction searchDownAndUpList(arr, searchIndex, predicate) {\n for (let i = searchIndex; i > -1; i--) {\n if (predicate(arr[i])) {\n return i;\n }\n }\n for (let i = searchIndex + 1; i < arr.length; i++) {\n if (predicate(arr[i])) {\n return i;\n }\n }\n return -1;\n}\nfunction useAlternateAudio(audioTrackUrl, hls) {\n var _hls$loadLevelObj;\n return !!audioTrackUrl && audioTrackUrl !== ((_hls$loadLevelObj = hls.loadLevelObj) == null ? void 0 : _hls$loadLevelObj.uri);\n}\n\nclass AbrController extends Logger {\n constructor(_hls) {\n super('abr', _hls.logger);\n this.hls = void 0;\n this.lastLevelLoadSec = 0;\n this.lastLoadedFragLevel = -1;\n this.firstSelection = -1;\n this._nextAutoLevel = -1;\n this.nextAutoLevelKey = '';\n this.audioTracksByGroup = null;\n this.codecTiers = null;\n this.timer = -1;\n this.fragCurrent = null;\n this.partCurrent = null;\n this.bitrateTestDelay = 0;\n this.rebufferNotice = -1;\n this.supportedCache = {};\n this.bwEstimator = void 0;\n /*\n This method monitors the download rate of the current fragment, and will downswitch if that fragment will not load\n quickly enough to prevent underbuffering\n */\n this._abandonRulesCheck = levelLoaded => {\n var _ref;\n const {\n fragCurrent: frag,\n partCurrent: part,\n hls\n } = this;\n const {\n autoLevelEnabled,\n media\n } = hls;\n if (!frag || !media) {\n return;\n }\n const now = performance.now();\n const stats = part ? part.stats : frag.stats;\n const duration = part ? part.duration : frag.duration;\n const timeLoading = now - stats.loading.start;\n const minAutoLevel = hls.minAutoLevel;\n const loadingFragForLevel = frag.level;\n const currentAutoLevel = this._nextAutoLevel;\n // If frag loading is aborted, complete, or from lowest level, stop timer and return\n if (stats.aborted || stats.loaded && stats.loaded === stats.total || loadingFragForLevel <= minAutoLevel) {\n this.clearTimer();\n // reset forced auto level value so that next level will be selected\n this._nextAutoLevel = -1;\n return;\n }\n\n // This check only runs if we're in ABR mode\n if (!autoLevelEnabled) {\n return;\n }\n\n // Must be loading/loaded a new level or be in a playing state\n const fragBlockingSwitch = currentAutoLevel > -1 && currentAutoLevel !== loadingFragForLevel;\n const levelChange = !!levelLoaded || fragBlockingSwitch;\n if (!levelChange && (media.paused || !media.playbackRate || !media.readyState)) {\n return;\n }\n const bufferInfo = hls.mainForwardBufferInfo;\n if (!levelChange && bufferInfo === null) {\n return;\n }\n const ttfbEstimate = this.bwEstimator.getEstimateTTFB();\n const playbackRate = Math.abs(media.playbackRate);\n // To maintain stable adaptive playback, only begin monitoring frag loading after half or more of its playback duration has passed\n if (timeLoading <= Math.max(ttfbEstimate, 1000 * (duration / (playbackRate * 2)))) {\n return;\n }\n\n // bufferStarvationDelay is an estimate of the amount time (in seconds) it will take to exhaust the buffer\n const bufferStarvationDelay = bufferInfo ? bufferInfo.len / playbackRate : 0;\n const ttfb = stats.loading.first ? stats.loading.first - stats.loading.start : -1;\n const loadedFirstByte = stats.loaded && ttfb > -1;\n const bwEstimate = this.getBwEstimate();\n const levels = hls.levels;\n const level = levels[loadingFragForLevel];\n const expectedLen = Math.max(stats.loaded, Math.round(duration * (frag.bitrate || level.averageBitrate) / 8));\n let timeStreaming = loadedFirstByte ? timeLoading - ttfb : timeLoading;\n if (timeStreaming < 1 && loadedFirstByte) {\n timeStreaming = Math.min(timeLoading, stats.loaded * 8 / bwEstimate);\n }\n const loadRate = loadedFirstByte ? stats.loaded * 1000 / timeStreaming : 0;\n // fragLoadDelay is an estimate of the time (in seconds) it will take to buffer the remainder of the fragment\n const ttfbSeconds = ttfbEstimate / 1000;\n const fragLoadedDelay = loadRate ? (expectedLen - stats.loaded) / loadRate : expectedLen * 8 / bwEstimate + ttfbSeconds;\n // Only downswitch if the time to finish loading the current fragment is greater than the amount of buffer left\n if (fragLoadedDelay <= bufferStarvationDelay) {\n return;\n }\n const bwe = loadRate ? loadRate * 8 : bwEstimate;\n const live = ((_ref = (levelLoaded == null ? void 0 : levelLoaded.details) || this.hls.latestLevelDetails) == null ? void 0 : _ref.live) === true;\n const abrBandWidthUpFactor = this.hls.config.abrBandWidthUpFactor;\n let fragLevelNextLoadedDelay = Number.POSITIVE_INFINITY;\n let nextLoadLevel;\n // Iterate through lower level and try to find the largest one that avoids rebuffering\n for (nextLoadLevel = loadingFragForLevel - 1; nextLoadLevel > minAutoLevel; nextLoadLevel--) {\n // compute time to load next fragment at lower level\n // 8 = bits per byte (bps/Bps)\n const levelNextBitrate = levels[nextLoadLevel].maxBitrate;\n const requiresLevelLoad = !levels[nextLoadLevel].details || live;\n fragLevelNextLoadedDelay = this.getTimeToLoadFrag(ttfbSeconds, bwe, duration * levelNextBitrate, requiresLevelLoad);\n if (fragLevelNextLoadedDelay < Math.min(bufferStarvationDelay, duration + ttfbSeconds)) {\n break;\n }\n }\n // Only emergency switch down if it takes less time to load a new fragment at lowest level instead of continuing\n // to load the current one\n if (fragLevelNextLoadedDelay >= fragLoadedDelay) {\n return;\n }\n\n // if estimated load time of new segment is completely unreasonable, ignore and do not emergency switch down\n if (fragLevelNextLoadedDelay > duration * 10) {\n return;\n }\n if (loadedFirstByte) {\n // If there has been loading progress, sample bandwidth using loading time offset by minimum TTFB time\n this.bwEstimator.sample(timeLoading - Math.min(ttfbEstimate, ttfb), stats.loaded);\n } else {\n // If there has been no loading progress, sample TTFB\n this.bwEstimator.sampleTTFB(timeLoading);\n }\n const nextLoadLevelBitrate = levels[nextLoadLevel].maxBitrate;\n if (this.getBwEstimate() * abrBandWidthUpFactor > nextLoadLevelBitrate) {\n this.resetEstimator(nextLoadLevelBitrate);\n }\n const bestSwitchLevel = this.findBestLevel(nextLoadLevelBitrate, minAutoLevel, nextLoadLevel, 0, bufferStarvationDelay, 1, 1);\n if (bestSwitchLevel > -1) {\n nextLoadLevel = bestSwitchLevel;\n }\n this.warn(`Fragment ${frag.sn}${part ? ' part ' + part.index : ''} of level ${loadingFragForLevel} is loading too slowly;\n Fragment duration: ${frag.duration.toFixed(3)}\n Time to underbuffer: ${bufferStarvationDelay.toFixed(3)} s\n Estimated load time for current fragment: ${fragLoadedDelay.toFixed(3)} s\n Estimated load time for down switch fragment: ${fragLevelNextLoadedDelay.toFixed(3)} s\n TTFB estimate: ${ttfb | 0} ms\n Current BW estimate: ${isFiniteNumber(bwEstimate) ? bwEstimate | 0 : 'Unknown'} bps\n New BW estimate: ${this.getBwEstimate() | 0} bps\n Switching to level ${nextLoadLevel} @ ${nextLoadLevelBitrate | 0} bps`);\n hls.nextLoadLevel = hls.nextAutoLevel = nextLoadLevel;\n this.clearTimer();\n const abortAndSwitch = () => {\n // Are nextLoadLevel details available or is stream-controller still in \"WAITING_LEVEL\" state?\n this.clearTimer();\n if (this.fragCurrent === frag && this.hls.loadLevel === nextLoadLevel && nextLoadLevel > 0) {\n const bufferStarvationDelay = this.getStarvationDelay();\n this.warn(`Aborting inflight request ${nextLoadLevel > 0 ? 'and switching down' : ''}\n Fragment duration: ${frag.duration.toFixed(3)} s\n Time to underbuffer: ${bufferStarvationDelay.toFixed(3)} s`);\n frag.abortRequests();\n this.fragCurrent = this.partCurrent = null;\n if (nextLoadLevel > minAutoLevel) {\n let lowestSwitchLevel = this.findBestLevel(this.hls.levels[minAutoLevel].bitrate, minAutoLevel, nextLoadLevel, 0, bufferStarvationDelay, 1, 1);\n if (lowestSwitchLevel === -1) {\n lowestSwitchLevel = minAutoLevel;\n }\n this.hls.nextLoadLevel = this.hls.nextAutoLevel = lowestSwitchLevel;\n this.resetEstimator(this.hls.levels[lowestSwitchLevel].bitrate);\n }\n }\n };\n if (fragBlockingSwitch || fragLoadedDelay > fragLevelNextLoadedDelay * 2) {\n abortAndSwitch();\n } else {\n this.timer = self.setInterval(abortAndSwitch, fragLevelNextLoadedDelay * 1000);\n }\n hls.trigger(Events.FRAG_LOAD_EMERGENCY_ABORTED, {\n frag,\n part,\n stats\n });\n };\n this.hls = _hls;\n this.bwEstimator = this.initEstimator();\n this.registerListeners();\n }\n resetEstimator(abrEwmaDefaultEstimate) {\n if (abrEwmaDefaultEstimate) {\n this.log(`setting initial bwe to ${abrEwmaDefaultEstimate}`);\n this.hls.config.abrEwmaDefaultEstimate = abrEwmaDefaultEstimate;\n }\n this.firstSelection = -1;\n this.bwEstimator = this.initEstimator();\n }\n initEstimator() {\n const config = this.hls.config;\n return new EwmaBandWidthEstimator(config.abrEwmaSlowVoD, config.abrEwmaFastVoD, config.abrEwmaDefaultEstimate);\n }\n registerListeners() {\n const {\n hls\n } = this;\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.FRAG_LOADING, this.onFragLoading, this);\n hls.on(Events.FRAG_LOADED, this.onFragLoaded, this);\n hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n hls.on(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n hls.on(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n hls.on(Events.MAX_AUTO_LEVEL_UPDATED, this.onMaxAutoLevelUpdated, this);\n hls.on(Events.ERROR, this.onError, this);\n }\n unregisterListeners() {\n const {\n hls\n } = this;\n if (!hls) {\n return;\n }\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.FRAG_LOADING, this.onFragLoading, this);\n hls.off(Events.FRAG_LOADED, this.onFragLoaded, this);\n hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n hls.off(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n hls.off(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n hls.off(Events.MAX_AUTO_LEVEL_UPDATED, this.onMaxAutoLevelUpdated, this);\n hls.off(Events.ERROR, this.onError, this);\n }\n destroy() {\n this.unregisterListeners();\n this.clearTimer();\n // @ts-ignore\n this.hls = this._abandonRulesCheck = this.supportedCache = null;\n this.fragCurrent = this.partCurrent = null;\n }\n onManifestLoading(event, data) {\n this.lastLoadedFragLevel = -1;\n this.firstSelection = -1;\n this.lastLevelLoadSec = 0;\n this.supportedCache = {};\n this.fragCurrent = this.partCurrent = null;\n this.onLevelsUpdated();\n this.clearTimer();\n }\n onLevelsUpdated() {\n if (this.lastLoadedFragLevel > -1 && this.fragCurrent) {\n this.lastLoadedFragLevel = this.fragCurrent.level;\n }\n this._nextAutoLevel = -1;\n this.onMaxAutoLevelUpdated();\n this.codecTiers = null;\n this.audioTracksByGroup = null;\n }\n onMaxAutoLevelUpdated() {\n this.firstSelection = -1;\n this.nextAutoLevelKey = '';\n }\n onFragLoading(event, data) {\n const frag = data.frag;\n if (this.ignoreFragment(frag)) {\n return;\n }\n if (!frag.bitrateTest) {\n var _data$part;\n this.fragCurrent = frag;\n this.partCurrent = (_data$part = data.part) != null ? _data$part : null;\n }\n this.clearTimer();\n this.timer = self.setInterval(this._abandonRulesCheck, 100);\n }\n onLevelSwitching(event, data) {\n this.clearTimer();\n }\n onError(event, data) {\n if (data.fatal) {\n return;\n }\n switch (data.details) {\n case ErrorDetails.BUFFER_ADD_CODEC_ERROR:\n case ErrorDetails.BUFFER_APPEND_ERROR:\n // Reset last loaded level so that a new selection can be made after calling recoverMediaError\n this.lastLoadedFragLevel = -1;\n this.firstSelection = -1;\n break;\n case ErrorDetails.FRAG_LOAD_TIMEOUT:\n {\n const frag = data.frag;\n const {\n fragCurrent,\n partCurrent: part\n } = this;\n if (frag && fragCurrent && frag.sn === fragCurrent.sn && frag.level === fragCurrent.level) {\n const now = performance.now();\n const stats = part ? part.stats : frag.stats;\n const timeLoading = now - stats.loading.start;\n const ttfb = stats.loading.first ? stats.loading.first - stats.loading.start : -1;\n const loadedFirstByte = stats.loaded && ttfb > -1;\n if (loadedFirstByte) {\n const ttfbEstimate = this.bwEstimator.getEstimateTTFB();\n this.bwEstimator.sample(timeLoading - Math.min(ttfbEstimate, ttfb), stats.loaded);\n } else {\n this.bwEstimator.sampleTTFB(timeLoading);\n }\n }\n break;\n }\n }\n }\n getTimeToLoadFrag(timeToFirstByteSec, bandwidth, fragSizeBits, isSwitch) {\n const fragLoadSec = timeToFirstByteSec + fragSizeBits / bandwidth;\n const playlistLoadSec = isSwitch ? timeToFirstByteSec + this.lastLevelLoadSec : 0;\n return fragLoadSec + playlistLoadSec;\n }\n onLevelLoaded(event, data) {\n const config = this.hls.config;\n const {\n loading\n } = data.stats;\n const timeLoadingMs = loading.end - loading.first;\n if (isFiniteNumber(timeLoadingMs)) {\n this.lastLevelLoadSec = timeLoadingMs / 1000;\n }\n if (data.details.live) {\n this.bwEstimator.update(config.abrEwmaSlowLive, config.abrEwmaFastLive);\n } else {\n this.bwEstimator.update(config.abrEwmaSlowVoD, config.abrEwmaFastVoD);\n }\n if (this.timer > -1) {\n this._abandonRulesCheck(data.levelInfo);\n }\n }\n onFragLoaded(event, {\n frag,\n part\n }) {\n const stats = part ? part.stats : frag.stats;\n if (frag.type === PlaylistLevelType.MAIN) {\n this.bwEstimator.sampleTTFB(stats.loading.first - stats.loading.start);\n }\n if (this.ignoreFragment(frag)) {\n return;\n }\n // stop monitoring bw once frag loaded\n this.clearTimer();\n // reset forced auto level value so that next level will be selected\n if (frag.level === this._nextAutoLevel) {\n this._nextAutoLevel = -1;\n }\n this.firstSelection = -1;\n\n // compute level average bitrate\n if (this.hls.config.abrMaxWithRealBitrate) {\n const duration = part ? part.duration : frag.duration;\n const level = this.hls.levels[frag.level];\n const loadedBytes = (level.loaded ? level.loaded.bytes : 0) + stats.loaded;\n const loadedDuration = (level.loaded ? level.loaded.duration : 0) + duration;\n level.loaded = {\n bytes: loadedBytes,\n duration: loadedDuration\n };\n level.realBitrate = Math.round(8 * loadedBytes / loadedDuration);\n }\n if (frag.bitrateTest) {\n const fragBufferedData = {\n stats,\n frag,\n part,\n id: frag.type\n };\n this.onFragBuffered(Events.FRAG_BUFFERED, fragBufferedData);\n frag.bitrateTest = false;\n } else {\n // store level id after successful fragment load for playback\n this.lastLoadedFragLevel = frag.level;\n }\n }\n onFragBuffered(event, data) {\n const {\n frag,\n part\n } = data;\n const stats = part != null && part.stats.loaded ? part.stats : frag.stats;\n if (stats.aborted) {\n return;\n }\n if (this.ignoreFragment(frag)) {\n return;\n }\n // Use the difference between parsing and request instead of buffering and request to compute fragLoadingProcessing;\n // rationale is that buffer appending only happens once media is attached. This can happen when config.startFragPrefetch\n // is used. If we used buffering in that case, our BW estimate sample will be very large.\n const processingMs = stats.parsing.end - stats.loading.start - Math.min(stats.loading.first - stats.loading.start, this.bwEstimator.getEstimateTTFB());\n this.bwEstimator.sample(processingMs, stats.loaded);\n stats.bwEstimate = this.getBwEstimate();\n if (frag.bitrateTest) {\n this.bitrateTestDelay = processingMs / 1000;\n } else {\n this.bitrateTestDelay = 0;\n }\n }\n ignoreFragment(frag) {\n // Only count non-alt-audio frags which were actually buffered in our BW calculations\n return frag.type !== PlaylistLevelType.MAIN || frag.sn === 'initSegment';\n }\n clearTimer() {\n if (this.timer > -1) {\n self.clearInterval(this.timer);\n this.timer = -1;\n }\n }\n get firstAutoLevel() {\n const {\n maxAutoLevel,\n minAutoLevel\n } = this.hls;\n const bwEstimate = this.getBwEstimate();\n const maxStartDelay = this.hls.config.maxStarvationDelay;\n const abrAutoLevel = this.findBestLevel(bwEstimate, minAutoLevel, maxAutoLevel, 0, maxStartDelay, 1, 1);\n if (abrAutoLevel > -1) {\n return abrAutoLevel;\n }\n const firstLevel = this.hls.firstLevel;\n const clamped = Math.min(Math.max(firstLevel, minAutoLevel), maxAutoLevel);\n this.warn(`Could not find best starting auto level. Defaulting to first in playlist ${firstLevel} clamped to ${clamped}`);\n return clamped;\n }\n get forcedAutoLevel() {\n if (this.nextAutoLevelKey) {\n return -1;\n }\n return this._nextAutoLevel;\n }\n\n // return next auto level\n get nextAutoLevel() {\n const forcedAutoLevel = this.forcedAutoLevel;\n const bwEstimator = this.bwEstimator;\n const useEstimate = bwEstimator.canEstimate();\n const loadedFirstFrag = this.lastLoadedFragLevel > -1;\n // in case next auto level has been forced, and bw not available or not reliable, return forced value\n if (forcedAutoLevel !== -1 && (!useEstimate || !loadedFirstFrag || this.nextAutoLevelKey === this.getAutoLevelKey())) {\n return forcedAutoLevel;\n }\n\n // compute next level using ABR logic\n const nextABRAutoLevel = useEstimate && loadedFirstFrag ? this.getNextABRAutoLevel() : this.firstAutoLevel;\n\n // use forced auto level while it hasn't errored more than ABR selection\n if (forcedAutoLevel !== -1) {\n const levels = this.hls.levels;\n if (levels.length > Math.max(forcedAutoLevel, nextABRAutoLevel) && levels[forcedAutoLevel].loadError <= levels[nextABRAutoLevel].loadError) {\n return forcedAutoLevel;\n }\n }\n\n // save result until state has changed\n this._nextAutoLevel = nextABRAutoLevel;\n this.nextAutoLevelKey = this.getAutoLevelKey();\n return nextABRAutoLevel;\n }\n getAutoLevelKey() {\n return `${this.getBwEstimate()}_${this.getStarvationDelay().toFixed(2)}`;\n }\n getNextABRAutoLevel() {\n const {\n fragCurrent,\n partCurrent,\n hls\n } = this;\n if (hls.levels.length <= 1) {\n return hls.loadLevel;\n }\n const {\n maxAutoLevel,\n config,\n minAutoLevel\n } = hls;\n const currentFragDuration = partCurrent ? partCurrent.duration : fragCurrent ? fragCurrent.duration : 0;\n const avgbw = this.getBwEstimate();\n // bufferStarvationDelay is the wall-clock time left until the playback buffer is exhausted.\n const bufferStarvationDelay = this.getStarvationDelay();\n let bwFactor = config.abrBandWidthFactor;\n let bwUpFactor = config.abrBandWidthUpFactor;\n\n // First, look to see if we can find a level matching with our avg bandwidth AND that could also guarantee no rebuffering at all\n if (bufferStarvationDelay) {\n const _bestLevel = this.findBestLevel(avgbw, minAutoLevel, maxAutoLevel, bufferStarvationDelay, 0, bwFactor, bwUpFactor);\n if (_bestLevel >= 0) {\n this.rebufferNotice = -1;\n return _bestLevel;\n }\n }\n // not possible to get rid of rebuffering... try to find level that will guarantee less than maxStarvationDelay of rebuffering\n let maxStarvationDelay = currentFragDuration ? Math.min(currentFragDuration, config.maxStarvationDelay) : config.maxStarvationDelay;\n if (!bufferStarvationDelay) {\n // in case buffer is empty, let's check if previous fragment was loaded to perform a bitrate test\n const bitrateTestDelay = this.bitrateTestDelay;\n if (bitrateTestDelay) {\n // if it is the case, then we need to adjust our max starvation delay using maxLoadingDelay config value\n // max video loading delay used in automatic start level selection :\n // in that mode ABR controller will ensure that video loading time (ie the time to fetch the first fragment at lowest quality level +\n // the time to fetch the fragment at the appropriate quality level is less than ```maxLoadingDelay``` )\n // cap maxLoadingDelay and ensure it is not bigger 'than bitrate test' frag duration\n const maxLoadingDelay = currentFragDuration ? Math.min(currentFragDuration, config.maxLoadingDelay) : config.maxLoadingDelay;\n maxStarvationDelay = maxLoadingDelay - bitrateTestDelay;\n this.info(`bitrate test took ${Math.round(1000 * bitrateTestDelay)}ms, set first fragment max fetchDuration to ${Math.round(1000 * maxStarvationDelay)} ms`);\n // don't use conservative factor on bitrate test\n bwFactor = bwUpFactor = 1;\n }\n }\n const bestLevel = this.findBestLevel(avgbw, minAutoLevel, maxAutoLevel, bufferStarvationDelay, maxStarvationDelay, bwFactor, bwUpFactor);\n if (this.rebufferNotice !== bestLevel) {\n this.rebufferNotice = bestLevel;\n this.info(`${bufferStarvationDelay ? 'rebuffering expected' : 'buffer is empty'}, optimal quality level ${bestLevel}`);\n }\n if (bestLevel > -1) {\n return bestLevel;\n }\n // If no matching level found, see if min auto level would be a better option\n const minLevel = hls.levels[minAutoLevel];\n const autoLevel = hls.loadLevelObj;\n if (autoLevel && (minLevel == null ? void 0 : minLevel.bitrate) < autoLevel.bitrate) {\n return minAutoLevel;\n }\n // or if bitrate is not lower, continue to use loadLevel\n return hls.loadLevel;\n }\n getStarvationDelay() {\n const hls = this.hls;\n const media = hls.media;\n if (!media) {\n return Infinity;\n }\n // playbackRate is the absolute value of the playback rate; if media.playbackRate is 0, we use 1 to load as\n // if we're playing back at the normal rate.\n const playbackRate = media && media.playbackRate !== 0 ? Math.abs(media.playbackRate) : 1.0;\n const bufferInfo = hls.mainForwardBufferInfo;\n return (bufferInfo ? bufferInfo.len : 0) / playbackRate;\n }\n getBwEstimate() {\n return this.bwEstimator.canEstimate() ? this.bwEstimator.getEstimate() : this.hls.config.abrEwmaDefaultEstimate;\n }\n findBestLevel(currentBw, minAutoLevel, maxAutoLevel, bufferStarvationDelay, maxStarvationDelay, bwFactor, bwUpFactor) {\n var _this$hls$latestLevel;\n const maxFetchDuration = bufferStarvationDelay + maxStarvationDelay;\n const lastLoadedFragLevel = this.lastLoadedFragLevel;\n const selectionBaseLevel = lastLoadedFragLevel === -1 ? this.hls.firstLevel : lastLoadedFragLevel;\n const {\n fragCurrent,\n partCurrent\n } = this;\n const {\n levels,\n allAudioTracks,\n loadLevel,\n config\n } = this.hls;\n if (levels.length === 1) {\n return 0;\n }\n const level = levels[selectionBaseLevel];\n const live = !!((_this$hls$latestLevel = this.hls.latestLevelDetails) != null && _this$hls$latestLevel.live);\n const firstSelection = loadLevel === -1 || lastLoadedFragLevel === -1;\n let currentCodecSet;\n let currentVideoRange = 'SDR';\n let currentFrameRate = (level == null ? void 0 : level.frameRate) || 0;\n const {\n audioPreference,\n videoPreference\n } = config;\n const audioTracksByGroup = this.audioTracksByGroup || (this.audioTracksByGroup = getAudioTracksByGroup(allAudioTracks));\n let minStartIndex = -1;\n if (firstSelection) {\n if (this.firstSelection !== -1) {\n return this.firstSelection;\n }\n const codecTiers = this.codecTiers || (this.codecTiers = getCodecTiers(levels, audioTracksByGroup, minAutoLevel, maxAutoLevel));\n const startTier = getStartCodecTier(codecTiers, currentVideoRange, currentBw, audioPreference, videoPreference);\n const {\n codecSet,\n videoRanges,\n minFramerate,\n minBitrate,\n minIndex,\n preferHDR\n } = startTier;\n minStartIndex = minIndex;\n currentCodecSet = codecSet;\n currentVideoRange = preferHDR ? videoRanges[videoRanges.length - 1] : videoRanges[0];\n currentFrameRate = minFramerate;\n currentBw = Math.max(currentBw, minBitrate);\n this.log(`picked start tier ${stringify(startTier)}`);\n } else {\n currentCodecSet = level == null ? void 0 : level.codecSet;\n currentVideoRange = level == null ? void 0 : level.videoRange;\n }\n const currentFragDuration = partCurrent ? partCurrent.duration : fragCurrent ? fragCurrent.duration : 0;\n const ttfbEstimateSec = this.bwEstimator.getEstimateTTFB() / 1000;\n const levelsSkipped = [];\n for (let i = maxAutoLevel; i >= minAutoLevel; i--) {\n var _levelInfo$supportedR;\n const levelInfo = levels[i];\n const upSwitch = i > selectionBaseLevel;\n if (!levelInfo) {\n continue;\n }\n if (config.useMediaCapabilities && !levelInfo.supportedResult && !levelInfo.supportedPromise) {\n const mediaCapabilities = navigator.mediaCapabilities;\n if (typeof (mediaCapabilities == null ? void 0 : mediaCapabilities.decodingInfo) === 'function' && requiresMediaCapabilitiesDecodingInfo(levelInfo, audioTracksByGroup, currentVideoRange, currentFrameRate, currentBw, audioPreference)) {\n levelInfo.supportedPromise = getMediaDecodingInfoPromise(levelInfo, audioTracksByGroup, mediaCapabilities, this.supportedCache);\n levelInfo.supportedPromise.then(decodingInfo => {\n if (!this.hls) {\n return;\n }\n levelInfo.supportedResult = decodingInfo;\n const levels = this.hls.levels;\n const index = levels.indexOf(levelInfo);\n if (decodingInfo.error) {\n this.warn(`MediaCapabilities decodingInfo error: \"${decodingInfo.error}\" for level ${index} ${stringify(decodingInfo)}`);\n } else if (!decodingInfo.supported) {\n this.warn(`Unsupported MediaCapabilities decodingInfo result for level ${index} ${stringify(decodingInfo)}`);\n if (index > -1 && levels.length > 1) {\n this.log(`Removing unsupported level ${index}`);\n this.hls.removeLevel(index);\n if (this.hls.loadLevel === -1) {\n this.hls.nextLoadLevel = 0;\n }\n }\n } else if (decodingInfo.decodingInfoResults.some(info => info.smooth === false || info.powerEfficient === false)) {\n this.log(`MediaCapabilities decodingInfo for level ${index} not smooth or powerEfficient: ${stringify(decodingInfo)}`);\n }\n }).catch(error => {\n this.warn(`Error handling MediaCapabilities decodingInfo: ${error}`);\n });\n } else {\n levelInfo.supportedResult = SUPPORTED_INFO_DEFAULT;\n }\n }\n\n // skip candidates which change codec-family or video-range,\n // and which decrease or increase frame-rate for up and down-switch respectfully\n if (currentCodecSet && levelInfo.codecSet !== currentCodecSet || currentVideoRange && levelInfo.videoRange !== currentVideoRange || upSwitch && currentFrameRate > levelInfo.frameRate || !upSwitch && currentFrameRate > 0 && currentFrameRate < levelInfo.frameRate || (_levelInfo$supportedR = levelInfo.supportedResult) != null && (_levelInfo$supportedR = _levelInfo$supportedR.decodingInfoResults) != null && _levelInfo$supportedR.some(info => info.smooth === false)) {\n if (!firstSelection || i !== minStartIndex) {\n levelsSkipped.push(i);\n continue;\n }\n }\n const levelDetails = levelInfo.details;\n const avgDuration = (partCurrent ? levelDetails == null ? void 0 : levelDetails.partTarget : levelDetails == null ? void 0 : levelDetails.averagetargetduration) || currentFragDuration;\n let adjustedbw;\n // follow algorithm captured from stagefright :\n // https://android.googlesource.com/platform/frameworks/av/+/master/media/libstagefright/httplive/LiveSession.cpp\n // Pick the highest bandwidth stream below or equal to estimated bandwidth.\n // consider only 80% of the available bandwidth, but if we are switching up,\n // be even more conservative (70%) to avoid overestimating and immediately\n // switching back.\n if (!upSwitch) {\n adjustedbw = bwFactor * currentBw;\n } else {\n adjustedbw = bwUpFactor * currentBw;\n }\n\n // Use average bitrate when starvation delay (buffer length) is gt or eq two segment durations and rebuffering is not expected (maxStarvationDelay > 0)\n const bitrate = currentFragDuration && bufferStarvationDelay >= currentFragDuration * 2 && maxStarvationDelay === 0 ? levelInfo.averageBitrate : levelInfo.maxBitrate;\n const fetchDuration = this.getTimeToLoadFrag(ttfbEstimateSec, adjustedbw, bitrate * avgDuration, levelDetails === undefined);\n const canSwitchWithinTolerance =\n // if adjusted bw is greater than level bitrate AND\n adjustedbw >= bitrate && (\n // no level change, or new level has no error history\n i === lastLoadedFragLevel || levelInfo.loadError === 0 && levelInfo.fragmentError === 0) && (\n // fragment fetchDuration unknown OR live stream OR fragment fetchDuration less than max allowed fetch duration, then this level matches\n // we don't account for max Fetch Duration for live streams, this is to avoid switching down when near the edge of live sliding window ...\n // special case to support startLevel = -1 (bitrateTest) on live streams : in that case we should not exit loop so that findBestLevel will return -1\n fetchDuration <= ttfbEstimateSec || !isFiniteNumber(fetchDuration) || live && !this.bitrateTestDelay || fetchDuration < maxFetchDuration);\n if (canSwitchWithinTolerance) {\n const forcedAutoLevel = this.forcedAutoLevel;\n if (i !== loadLevel && (forcedAutoLevel === -1 || forcedAutoLevel !== loadLevel)) {\n if (levelsSkipped.length) {\n this.trace(`Skipped level(s) ${levelsSkipped.join(',')} of ${maxAutoLevel} max with CODECS and VIDEO-RANGE:\"${levels[levelsSkipped[0]].codecs}\" ${levels[levelsSkipped[0]].videoRange}; not compatible with \"${currentCodecSet}\" ${currentVideoRange}`);\n }\n this.info(`switch candidate:${selectionBaseLevel}->${i} adjustedbw(${Math.round(adjustedbw)})-bitrate=${Math.round(adjustedbw - bitrate)} ttfb:${ttfbEstimateSec.toFixed(1)} avgDuration:${avgDuration.toFixed(1)} maxFetchDuration:${maxFetchDuration.toFixed(1)} fetchDuration:${fetchDuration.toFixed(1)} firstSelection:${firstSelection} codecSet:${levelInfo.codecSet} videoRange:${levelInfo.videoRange} hls.loadLevel:${loadLevel}`);\n }\n if (firstSelection) {\n this.firstSelection = i;\n }\n // as we are looping from highest to lowest, this will return the best achievable quality level\n return i;\n }\n }\n // not enough time budget even with quality level 0 ... rebuffering might happen\n return -1;\n }\n set nextAutoLevel(nextLevel) {\n const value = this.deriveNextAutoLevel(nextLevel);\n if (this._nextAutoLevel !== value) {\n this.nextAutoLevelKey = '';\n this._nextAutoLevel = value;\n }\n }\n deriveNextAutoLevel(nextLevel) {\n const {\n maxAutoLevel,\n minAutoLevel\n } = this.hls;\n return Math.min(Math.max(nextLevel, minAutoLevel), maxAutoLevel);\n }\n}\n\nconst BinarySearch = {\n /**\n * Searches for an item in an array which matches a certain condition.\n * This requires the condition to only match one item in the array,\n * and for the array to be ordered.\n *\n * @param list The array to search.\n * @param comparisonFn\n * Called and provided a candidate item as the first argument.\n * Should return:\n * > -1 if the item should be located at a lower index than the provided item.\n * > 1 if the item should be located at a higher index than the provided item.\n * > 0 if the item is the item you're looking for.\n *\n * @returns the object if found, otherwise returns null\n */\n search: function (list, comparisonFn) {\n let minIndex = 0;\n let maxIndex = list.length - 1;\n let currentIndex = null;\n let currentElement = null;\n while (minIndex <= maxIndex) {\n currentIndex = (minIndex + maxIndex) / 2 | 0;\n currentElement = list[currentIndex];\n const comparisonResult = comparisonFn(currentElement);\n if (comparisonResult > 0) {\n minIndex = currentIndex + 1;\n } else if (comparisonResult < 0) {\n maxIndex = currentIndex - 1;\n } else {\n return currentElement;\n }\n }\n return null;\n }\n};\n\n/**\n * Returns first fragment whose endPdt value exceeds the given PDT, or null.\n * @param fragments - The array of candidate fragments\n * @param PDTValue - The PDT value which must be exceeded\n * @param maxFragLookUpTolerance - The amount of time that a fragment's start/end can be within in order to be considered contiguous\n */\nfunction findFragmentByPDT(fragments, PDTValue, maxFragLookUpTolerance) {\n if (PDTValue === null || !Array.isArray(fragments) || !fragments.length || !isFiniteNumber(PDTValue)) {\n return null;\n }\n\n // if less than start\n const startPDT = fragments[0].programDateTime;\n if (PDTValue < (startPDT || 0)) {\n return null;\n }\n const endPDT = fragments[fragments.length - 1].endProgramDateTime;\n if (PDTValue >= (endPDT || 0)) {\n return null;\n }\n for (let seg = 0; seg < fragments.length; ++seg) {\n const frag = fragments[seg];\n if (pdtWithinToleranceTest(PDTValue, maxFragLookUpTolerance, frag)) {\n return frag;\n }\n }\n return null;\n}\n\n/**\n * Finds a fragment based on the SN of the previous fragment; or based on the needs of the current buffer.\n * This method compensates for small buffer gaps by applying a tolerance to the start of any candidate fragment, thus\n * breaking any traps which would cause the same fragment to be continuously selected within a small range.\n * @param fragPrevious - The last frag successfully appended\n * @param fragments - The array of candidate fragments\n * @param bufferEnd - The end of the contiguous buffered range the playhead is currently within\n * @param maxFragLookUpTolerance - The amount of time that a fragment's start/end can be within in order to be considered contiguous\n * @returns a matching fragment or null\n */\nfunction findFragmentByPTS(fragPrevious, fragments, bufferEnd = 0, maxFragLookUpTolerance = 0, nextFragLookupTolerance = 0.005) {\n let fragNext = null;\n if (fragPrevious) {\n fragNext = fragments[1 + fragPrevious.sn - fragments[0].sn] || null;\n // check for buffer-end rounding error\n const bufferEdgeError = fragPrevious.endDTS - bufferEnd;\n if (bufferEdgeError > 0 && bufferEdgeError < 0.0000015) {\n bufferEnd += 0.0000015;\n }\n if (fragNext && fragPrevious.level !== fragNext.level && fragNext.end <= fragPrevious.end) {\n fragNext = fragments[2 + fragPrevious.sn - fragments[0].sn] || null;\n }\n } else if (bufferEnd === 0 && fragments[0].start === 0) {\n fragNext = fragments[0];\n }\n // Prefer the next fragment if it's within tolerance\n if (fragNext && ((!fragPrevious || fragPrevious.level === fragNext.level) && fragmentWithinToleranceTest(bufferEnd, maxFragLookUpTolerance, fragNext) === 0 || fragmentWithinFastStartSwitch(fragNext, fragPrevious, Math.min(nextFragLookupTolerance, maxFragLookUpTolerance)))) {\n return fragNext;\n }\n // We might be seeking past the tolerance so find the best match\n const foundFragment = BinarySearch.search(fragments, fragmentWithinToleranceTest.bind(null, bufferEnd, maxFragLookUpTolerance));\n if (foundFragment && (foundFragment !== fragPrevious || !fragNext)) {\n return foundFragment;\n }\n // If no match was found return the next fragment after fragPrevious, or null\n return fragNext;\n}\nfunction fragmentWithinFastStartSwitch(fragNext, fragPrevious, nextFragLookupTolerance) {\n if (fragPrevious && fragPrevious.start === 0 && fragPrevious.level < fragNext.level && (fragPrevious.endPTS || 0) > 0) {\n const firstDuration = fragPrevious.tagList.reduce((duration, tag) => {\n if (tag[0] === 'INF') {\n duration += parseFloat(tag[1]);\n }\n return duration;\n }, nextFragLookupTolerance);\n return fragNext.start <= firstDuration;\n }\n return false;\n}\n\n/**\n * The test function used by the findFragmentBySn's BinarySearch to look for the best match to the current buffer conditions.\n * @param candidate - The fragment to test\n * @param bufferEnd - The end of the current buffered range the playhead is currently within\n * @param maxFragLookUpTolerance - The amount of time that a fragment's start can be within in order to be considered contiguous\n * @returns 0 if it matches, 1 if too low, -1 if too high\n */\nfunction fragmentWithinToleranceTest(bufferEnd = 0, maxFragLookUpTolerance = 0, candidate) {\n // eagerly accept an accurate match (no tolerance)\n if (candidate.start <= bufferEnd && candidate.start + candidate.duration > bufferEnd) {\n return 0;\n }\n // offset should be within fragment boundary - config.maxFragLookUpTolerance\n // this is to cope with situations like\n // bufferEnd = 9.991\n // frag[Ø] : [0,10]\n // frag[1] : [10,20]\n // bufferEnd is within frag[0] range ... although what we are expecting is to return frag[1] here\n // frag start frag start+duration\n // |-----------------------------|\n // <---> <--->\n // ...--------><-----------------------------><---------....\n // previous frag matching fragment next frag\n // return -1 return 0 return 1\n // logger.log(`level/sn/start/end/bufEnd:${level}/${candidate.sn}/${candidate.start}/${(candidate.start+candidate.duration)}/${bufferEnd}`);\n // Set the lookup tolerance to be small enough to detect the current segment - ensures we don't skip over very small segments\n const candidateLookupTolerance = Math.min(maxFragLookUpTolerance, candidate.duration + (candidate.deltaPTS ? candidate.deltaPTS : 0));\n if (candidate.start + candidate.duration - candidateLookupTolerance <= bufferEnd) {\n return 1;\n } else if (candidate.start - candidateLookupTolerance > bufferEnd && candidate.start) {\n // if maxFragLookUpTolerance will have negative value then don't return -1 for first element\n return -1;\n }\n return 0;\n}\n\n/**\n * The test function used by the findFragmentByPdt's BinarySearch to look for the best match to the current buffer conditions.\n * This function tests the candidate's program date time values, as represented in Unix time\n * @param candidate - The fragment to test\n * @param pdtBufferEnd - The Unix time representing the end of the current buffered range\n * @param maxFragLookUpTolerance - The amount of time that a fragment's start can be within in order to be considered contiguous\n * @returns true if contiguous, false otherwise\n */\nfunction pdtWithinToleranceTest(pdtBufferEnd, maxFragLookUpTolerance, candidate) {\n const candidateLookupTolerance = Math.min(maxFragLookUpTolerance, candidate.duration + (candidate.deltaPTS ? candidate.deltaPTS : 0)) * 1000;\n\n // endProgramDateTime can be null, default to zero\n const endProgramDateTime = candidate.endProgramDateTime || 0;\n return endProgramDateTime - candidateLookupTolerance > pdtBufferEnd;\n}\nfunction findNearestWithCC(details, cc, pos) {\n if (details) {\n if (details.startCC <= cc && details.endCC >= cc) {\n let fragments = details.fragments;\n const {\n fragmentHint\n } = details;\n if (fragmentHint) {\n fragments = fragments.concat(fragmentHint);\n }\n let closest;\n BinarySearch.search(fragments, candidate => {\n if (candidate.cc < cc) {\n return 1;\n }\n if (candidate.cc > cc) {\n return -1;\n }\n closest = candidate;\n if (candidate.end <= pos) {\n return 1;\n }\n if (candidate.start > pos) {\n return -1;\n }\n return 0;\n });\n return closest || null;\n }\n }\n return null;\n}\n\nfunction isTimeoutError(error) {\n switch (error.details) {\n case ErrorDetails.FRAG_LOAD_TIMEOUT:\n case ErrorDetails.KEY_LOAD_TIMEOUT:\n case ErrorDetails.LEVEL_LOAD_TIMEOUT:\n case ErrorDetails.MANIFEST_LOAD_TIMEOUT:\n return true;\n }\n return false;\n}\nfunction isKeyError(error) {\n return error.details.startsWith('key');\n}\nfunction isUnusableKeyError(error) {\n return isKeyError(error) && !!error.frag && !error.frag.decryptdata;\n}\nfunction getRetryConfig(loadPolicy, error) {\n const isTimeout = isTimeoutError(error);\n return loadPolicy.default[`${isTimeout ? 'timeout' : 'error'}Retry`];\n}\nfunction getRetryDelay(retryConfig, retryCount) {\n // exponential backoff capped to max retry delay\n const backoffFactor = retryConfig.backoff === 'linear' ? 1 : Math.pow(2, retryCount);\n return Math.min(backoffFactor * retryConfig.retryDelayMs, retryConfig.maxRetryDelayMs);\n}\nfunction getLoaderConfigWithoutReties(loderConfig) {\n return _objectSpread2(_objectSpread2({}, loderConfig), {\n errorRetry: null,\n timeoutRetry: null\n });\n}\nfunction shouldRetry(retryConfig, retryCount, isTimeout, loaderResponse) {\n if (!retryConfig) {\n return false;\n }\n const httpStatus = loaderResponse == null ? void 0 : loaderResponse.code;\n const retry = retryCount < retryConfig.maxNumRetry && (retryForHttpStatus(httpStatus) || !!isTimeout);\n return retryConfig.shouldRetry ? retryConfig.shouldRetry(retryConfig, retryCount, isTimeout, loaderResponse, retry) : retry;\n}\nfunction retryForHttpStatus(httpStatus) {\n // Do not retry on status 4xx, status 0 (CORS error), or undefined (decrypt/gap/parse error)\n return offlineHttpStatus(httpStatus) || !!httpStatus && (httpStatus < 400 || httpStatus > 499);\n}\nfunction offlineHttpStatus(httpStatus) {\n return httpStatus === 0 && navigator.onLine === false;\n}\n\nvar NetworkErrorAction = {\n DoNothing: 0,\n SendEndCallback: 1,\n SendAlternateToPenaltyBox: 2,\n RemoveAlternatePermanently: 3,\n InsertDiscontinuity: 4,\n RetryRequest: 5\n};\nvar ErrorActionFlags = {\n None: 0,\n MoveAllAlternatesMatchingHost: 1,\n MoveAllAlternatesMatchingHDCP: 2,\n MoveAllAlternatesMatchingKey: 4,\n SwitchToSDR: 8\n};\nclass ErrorController extends Logger {\n constructor(hls) {\n super('error-controller', hls.logger);\n this.hls = void 0;\n this.playlistError = 0;\n this.hls = hls;\n this.registerListeners();\n }\n registerListeners() {\n const hls = this.hls;\n hls.on(Events.ERROR, this.onError, this);\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n }\n unregisterListeners() {\n const hls = this.hls;\n if (!hls) {\n return;\n }\n hls.off(Events.ERROR, this.onError, this);\n hls.off(Events.ERROR, this.onErrorOut, this);\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n }\n destroy() {\n this.unregisterListeners();\n // @ts-ignore\n this.hls = null;\n }\n startLoad(startPosition) {}\n stopLoad() {\n this.playlistError = 0;\n }\n getVariantLevelIndex(frag) {\n if ((frag == null ? void 0 : frag.type) === PlaylistLevelType.MAIN) {\n return frag.level;\n }\n return this.getVariantIndex();\n }\n getVariantIndex() {\n var _hls$loadLevelObj;\n const hls = this.hls;\n const currentLevel = hls.currentLevel;\n if ((_hls$loadLevelObj = hls.loadLevelObj) != null && _hls$loadLevelObj.details || currentLevel === -1) {\n return hls.loadLevel;\n }\n return currentLevel;\n }\n variantHasKey(level, keyInError) {\n if (level) {\n var _level$details;\n if ((_level$details = level.details) != null && _level$details.hasKey(keyInError)) {\n return true;\n }\n const audioGroupsIds = level.audioGroups;\n if (audioGroupsIds) {\n const audioTracks = this.hls.allAudioTracks.filter(track => audioGroupsIds.indexOf(track.groupId) >= 0);\n return audioTracks.some(track => {\n var _track$details;\n return (_track$details = track.details) == null ? void 0 : _track$details.hasKey(keyInError);\n });\n }\n }\n return false;\n }\n onManifestLoading() {\n this.playlistError = 0;\n }\n onLevelUpdated() {\n this.playlistError = 0;\n }\n onError(event, data) {\n var _data$frag;\n if (data.fatal) {\n return;\n }\n const hls = this.hls;\n const context = data.context;\n switch (data.details) {\n case ErrorDetails.FRAG_LOAD_ERROR:\n case ErrorDetails.FRAG_LOAD_TIMEOUT:\n case ErrorDetails.KEY_LOAD_ERROR:\n case ErrorDetails.KEY_LOAD_TIMEOUT:\n data.errorAction = this.getFragRetryOrSwitchAction(data);\n return;\n case ErrorDetails.FRAG_PARSING_ERROR:\n // ignore empty segment errors marked as gap\n if ((_data$frag = data.frag) != null && _data$frag.gap) {\n data.errorAction = createDoNothingErrorAction();\n return;\n }\n // falls through\n case ErrorDetails.FRAG_GAP:\n case ErrorDetails.FRAG_DECRYPT_ERROR:\n {\n // Switch level if possible, otherwise allow retry count to reach max error retries\n data.errorAction = this.getFragRetryOrSwitchAction(data);\n data.errorAction.action = NetworkErrorAction.SendAlternateToPenaltyBox;\n return;\n }\n case ErrorDetails.LEVEL_EMPTY_ERROR:\n case ErrorDetails.LEVEL_PARSING_ERROR:\n {\n var _data$context;\n // Only retry when empty and live\n const levelIndex = data.parent === PlaylistLevelType.MAIN ? data.level : hls.loadLevel;\n if (data.details === ErrorDetails.LEVEL_EMPTY_ERROR && !!((_data$context = data.context) != null && (_data$context = _data$context.levelDetails) != null && _data$context.live)) {\n data.errorAction = this.getPlaylistRetryOrSwitchAction(data, levelIndex);\n } else {\n // Escalate to fatal if not retrying or switching\n data.levelRetry = false;\n data.errorAction = this.getLevelSwitchAction(data, levelIndex);\n }\n }\n return;\n case ErrorDetails.LEVEL_LOAD_ERROR:\n case ErrorDetails.LEVEL_LOAD_TIMEOUT:\n if (typeof (context == null ? void 0 : context.level) === 'number') {\n data.errorAction = this.getPlaylistRetryOrSwitchAction(data, context.level);\n }\n return;\n case ErrorDetails.AUDIO_TRACK_LOAD_ERROR:\n case ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT:\n case ErrorDetails.SUBTITLE_LOAD_ERROR:\n case ErrorDetails.SUBTITLE_TRACK_LOAD_TIMEOUT:\n if (context) {\n const level = hls.loadLevelObj;\n if (level && (context.type === PlaylistContextType.AUDIO_TRACK && level.hasAudioGroup(context.groupId) || context.type === PlaylistContextType.SUBTITLE_TRACK && level.hasSubtitleGroup(context.groupId))) {\n // Perform Pathway switch or Redundant failover if possible for fastest recovery\n // otherwise allow playlist retry count to reach max error retries\n data.errorAction = this.getPlaylistRetryOrSwitchAction(data, hls.loadLevel);\n data.errorAction.action = NetworkErrorAction.SendAlternateToPenaltyBox;\n data.errorAction.flags = ErrorActionFlags.MoveAllAlternatesMatchingHost;\n return;\n }\n }\n return;\n case ErrorDetails.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED:\n {\n data.errorAction = {\n action: NetworkErrorAction.SendAlternateToPenaltyBox,\n flags: ErrorActionFlags.MoveAllAlternatesMatchingHDCP\n };\n }\n return;\n case ErrorDetails.KEY_SYSTEM_SESSION_UPDATE_FAILED:\n case ErrorDetails.KEY_SYSTEM_STATUS_INTERNAL_ERROR:\n case ErrorDetails.KEY_SYSTEM_NO_SESSION:\n {\n data.errorAction = {\n action: NetworkErrorAction.SendAlternateToPenaltyBox,\n flags: ErrorActionFlags.MoveAllAlternatesMatchingKey\n };\n }\n return;\n case ErrorDetails.BUFFER_ADD_CODEC_ERROR:\n case ErrorDetails.REMUX_ALLOC_ERROR:\n case ErrorDetails.BUFFER_APPEND_ERROR:\n // Buffer-controller can set errorAction when append errors can be ignored or resolved locally\n if (!data.errorAction) {\n var _data$level;\n data.errorAction = this.getLevelSwitchAction(data, (_data$level = data.level) != null ? _data$level : hls.loadLevel);\n }\n return;\n case ErrorDetails.INTERNAL_EXCEPTION:\n case ErrorDetails.BUFFER_APPENDING_ERROR:\n case ErrorDetails.BUFFER_FULL_ERROR:\n case ErrorDetails.LEVEL_SWITCH_ERROR:\n case ErrorDetails.BUFFER_STALLED_ERROR:\n case ErrorDetails.BUFFER_SEEK_OVER_HOLE:\n case ErrorDetails.BUFFER_NUDGE_ON_STALL:\n data.errorAction = createDoNothingErrorAction();\n return;\n }\n if (data.type === ErrorTypes.KEY_SYSTEM_ERROR) {\n // Do not retry level. Should be fatal if ErrorDetails.KEY_SYSTEM_ not handled with early return above.\n data.levelRetry = false;\n data.errorAction = createDoNothingErrorAction();\n }\n }\n getPlaylistRetryOrSwitchAction(data, levelIndex) {\n const hls = this.hls;\n const retryConfig = getRetryConfig(hls.config.playlistLoadPolicy, data);\n const retryCount = this.playlistError++;\n const retry = shouldRetry(retryConfig, retryCount, isTimeoutError(data), data.response);\n if (retry) {\n return {\n action: NetworkErrorAction.RetryRequest,\n flags: ErrorActionFlags.None,\n retryConfig,\n retryCount\n };\n }\n const errorAction = this.getLevelSwitchAction(data, levelIndex);\n if (retryConfig) {\n errorAction.retryConfig = retryConfig;\n errorAction.retryCount = retryCount;\n }\n return errorAction;\n }\n getFragRetryOrSwitchAction(data) {\n const hls = this.hls;\n // Share fragment error count accross media options (main, audio, subs)\n // This allows for level based rendition switching when media option assets fail\n const variantLevelIndex = this.getVariantLevelIndex(data.frag);\n const level = hls.levels[variantLevelIndex];\n const {\n fragLoadPolicy,\n keyLoadPolicy\n } = hls.config;\n const retryConfig = getRetryConfig(isKeyError(data) ? keyLoadPolicy : fragLoadPolicy, data);\n const fragmentErrors = hls.levels.reduce((acc, level) => acc + level.fragmentError, 0);\n // Switch levels when out of retried or level index out of bounds\n if (level) {\n if (data.details !== ErrorDetails.FRAG_GAP) {\n level.fragmentError++;\n }\n if (!isUnusableKeyError(data)) {\n const retry = shouldRetry(retryConfig, fragmentErrors, isTimeoutError(data), data.response);\n if (retry) {\n return {\n action: NetworkErrorAction.RetryRequest,\n flags: ErrorActionFlags.None,\n retryConfig,\n retryCount: fragmentErrors\n };\n }\n }\n }\n // Reach max retry count, or Missing level reference\n // Switch to valid index\n const errorAction = this.getLevelSwitchAction(data, variantLevelIndex);\n // Add retry details to allow skipping of FRAG_PARSING_ERROR\n if (retryConfig) {\n errorAction.retryConfig = retryConfig;\n errorAction.retryCount = fragmentErrors;\n }\n return errorAction;\n }\n getLevelSwitchAction(data, levelIndex) {\n const hls = this.hls;\n if (levelIndex === null || levelIndex === undefined) {\n levelIndex = hls.loadLevel;\n }\n const level = this.hls.levels[levelIndex];\n if (level) {\n var _data$frag2, _data$context2;\n const errorDetails = data.details;\n level.loadError++;\n if (errorDetails === ErrorDetails.BUFFER_APPEND_ERROR) {\n level.fragmentError++;\n }\n // Search for next level to retry\n let nextLevel = -1;\n const {\n levels,\n loadLevel,\n minAutoLevel,\n maxAutoLevel\n } = hls;\n if (!hls.autoLevelEnabled && !hls.config.preserveManualLevelOnError) {\n hls.loadLevel = -1;\n }\n const fragErrorType = (_data$frag2 = data.frag) == null ? void 0 : _data$frag2.type;\n // Find alternate audio codec if available on audio codec error\n const isAudioCodecError = fragErrorType === PlaylistLevelType.AUDIO && errorDetails === ErrorDetails.FRAG_PARSING_ERROR || data.sourceBufferName === 'audio' && (errorDetails === ErrorDetails.BUFFER_ADD_CODEC_ERROR || errorDetails === ErrorDetails.BUFFER_APPEND_ERROR);\n const findAudioCodecAlternate = isAudioCodecError && levels.some(({\n audioCodec\n }) => level.audioCodec !== audioCodec);\n // Find alternate video codec if available on video codec error\n const isVideoCodecError = data.sourceBufferName === 'video' && (errorDetails === ErrorDetails.BUFFER_ADD_CODEC_ERROR || errorDetails === ErrorDetails.BUFFER_APPEND_ERROR);\n const findVideoCodecAlternate = isVideoCodecError && levels.some(({\n codecSet,\n audioCodec\n }) => level.codecSet !== codecSet && level.audioCodec === audioCodec);\n const {\n type: playlistErrorType,\n groupId: playlistErrorGroupId\n } = (_data$context2 = data.context) != null ? _data$context2 : {};\n for (let i = levels.length; i--;) {\n const candidate = (i + loadLevel) % levels.length;\n if (candidate !== loadLevel && candidate >= minAutoLevel && candidate <= maxAutoLevel && levels[candidate].loadError === 0) {\n var _level$audioGroups, _level$subtitleGroups;\n const levelCandidate = levels[candidate];\n // Skip level switch if GAP tag is found in next level at same position\n if (errorDetails === ErrorDetails.FRAG_GAP && fragErrorType === PlaylistLevelType.MAIN && data.frag) {\n const levelDetails = levels[candidate].details;\n if (levelDetails) {\n const fragCandidate = findFragmentByPTS(data.frag, levelDetails.fragments, data.frag.start);\n if (fragCandidate != null && fragCandidate.gap) {\n continue;\n }\n }\n } else if (playlistErrorType === PlaylistContextType.AUDIO_TRACK && levelCandidate.hasAudioGroup(playlistErrorGroupId) || playlistErrorType === PlaylistContextType.SUBTITLE_TRACK && levelCandidate.hasSubtitleGroup(playlistErrorGroupId)) {\n // For audio/subs playlist errors find another group ID or fallthrough to redundant fail-over\n continue;\n } else if (fragErrorType === PlaylistLevelType.AUDIO && (_level$audioGroups = level.audioGroups) != null && _level$audioGroups.some(groupId => levelCandidate.hasAudioGroup(groupId)) || fragErrorType === PlaylistLevelType.SUBTITLE && (_level$subtitleGroups = level.subtitleGroups) != null && _level$subtitleGroups.some(groupId => levelCandidate.hasSubtitleGroup(groupId)) || findAudioCodecAlternate && level.audioCodec === levelCandidate.audioCodec || findVideoCodecAlternate && level.codecSet === levelCandidate.codecSet || !findAudioCodecAlternate && level.codecSet !== levelCandidate.codecSet) {\n // For video/audio/subs frag errors find another group ID or fallthrough to redundant fail-over\n continue;\n }\n nextLevel = candidate;\n break;\n }\n }\n if (nextLevel > -1 && hls.loadLevel !== nextLevel) {\n data.levelRetry = true;\n this.playlistError = 0;\n return {\n action: NetworkErrorAction.SendAlternateToPenaltyBox,\n flags: ErrorActionFlags.None,\n nextAutoLevel: nextLevel\n };\n }\n }\n // No levels to switch / Manual level selection / Level not found\n // Resolve with Pathway switch, Redundant fail-over, or stay on lowest Level\n return {\n action: NetworkErrorAction.SendAlternateToPenaltyBox,\n flags: ErrorActionFlags.MoveAllAlternatesMatchingHost\n };\n }\n onErrorOut(event, data) {\n var _data$errorAction;\n switch ((_data$errorAction = data.errorAction) == null ? void 0 : _data$errorAction.action) {\n case NetworkErrorAction.DoNothing:\n break;\n case NetworkErrorAction.SendAlternateToPenaltyBox:\n this.sendAlternateToPenaltyBox(data);\n if (!data.errorAction.resolved && data.details !== ErrorDetails.FRAG_GAP) {\n data.fatal = true;\n } else if (/MediaSource readyState: ended/.test(data.error.message)) {\n this.warn(`MediaSource ended after \"${data.sourceBufferName}\" sourceBuffer append error. Attempting to recover from media error.`);\n this.hls.recoverMediaError();\n }\n break;\n case NetworkErrorAction.RetryRequest:\n // handled by stream and playlist/level controllers\n break;\n }\n if (data.fatal) {\n this.hls.stopLoad();\n return;\n }\n }\n sendAlternateToPenaltyBox(data) {\n const hls = this.hls;\n const errorAction = data.errorAction;\n if (!errorAction) {\n return;\n }\n const {\n flags\n } = errorAction;\n const nextAutoLevel = errorAction.nextAutoLevel;\n switch (flags) {\n case ErrorActionFlags.None:\n this.switchLevel(data, nextAutoLevel);\n break;\n case ErrorActionFlags.MoveAllAlternatesMatchingHDCP:\n {\n const levelIndex = this.getVariantLevelIndex(data.frag);\n const level = hls.levels[levelIndex];\n const restrictedHdcpLevel = level == null ? void 0 : level.attrs['HDCP-LEVEL'];\n errorAction.hdcpLevel = restrictedHdcpLevel;\n if (restrictedHdcpLevel === 'NONE') {\n this.warn(`HDCP policy resticted output with HDCP-LEVEL=NONE`);\n } else if (restrictedHdcpLevel) {\n hls.maxHdcpLevel = HdcpLevels[HdcpLevels.indexOf(restrictedHdcpLevel) - 1];\n errorAction.resolved = true;\n this.warn(`Restricting playback to HDCP-LEVEL of \"${hls.maxHdcpLevel}\" or lower`);\n break;\n }\n // Fallthrough when no HDCP-LEVEL attribute is found\n }\n // eslint-disable-next-line no-fallthrough\n case ErrorActionFlags.MoveAllAlternatesMatchingKey:\n {\n const levelKey = data.decryptdata;\n if (levelKey) {\n // Penalize all levels with key\n const levels = this.hls.levels;\n const levelCountWithError = levels.length;\n for (let i = levelCountWithError; i--;) {\n if (this.variantHasKey(levels[i], levelKey)) {\n var _levels$i$audioGroups, _data$frag3;\n this.log(`Banned key found in level ${i} (${levels[i].bitrate}bps) or audio group \"${(_levels$i$audioGroups = levels[i].audioGroups) == null ? void 0 : _levels$i$audioGroups.join(',')}\" (${(_data$frag3 = data.frag) == null ? void 0 : _data$frag3.type} fragment) ${arrayToHex(levelKey.keyId || [])}`);\n levels[i].fragmentError++;\n levels[i].loadError++;\n this.log(`Removing level ${i} with key error (${data.error})`);\n this.hls.removeLevel(i);\n }\n }\n const frag = data.frag;\n if (this.hls.levels.length < levelCountWithError) {\n errorAction.resolved = true;\n } else if (frag && frag.type !== PlaylistLevelType.MAIN) {\n // Ignore key error for audio track with unmatched key (main session error)\n const fragLevelKey = frag.decryptdata;\n if (fragLevelKey && !levelKey.matches(fragLevelKey)) {\n errorAction.resolved = true;\n }\n }\n }\n break;\n }\n }\n // If not resolved by previous actions try to switch to next level\n if (!errorAction.resolved) {\n this.switchLevel(data, nextAutoLevel);\n }\n }\n switchLevel(data, levelIndex) {\n if (levelIndex !== undefined && data.errorAction) {\n this.warn(`switching to level ${levelIndex} after ${data.details}`);\n this.hls.nextAutoLevel = levelIndex;\n data.errorAction.resolved = true;\n // Stream controller is responsible for this but won't switch on false start\n this.hls.nextLoadLevel = this.hls.nextAutoLevel;\n if (data.details === ErrorDetails.BUFFER_ADD_CODEC_ERROR && data.mimeType && data.sourceBufferName !== 'audiovideo') {\n const codec = getCodecsForMimeType(data.mimeType);\n const levels = this.hls.levels;\n for (let i = levels.length; i--;) {\n if (levels[i][`${data.sourceBufferName}Codec`] === codec) {\n this.log(`Removing level ${i} for ${data.details} (\"${codec}\" not supported)`);\n this.hls.removeLevel(i);\n }\n }\n }\n }\n }\n}\nfunction createDoNothingErrorAction(resolved) {\n const errorAction = {\n action: NetworkErrorAction.DoNothing,\n flags: ErrorActionFlags.None\n };\n if (resolved) {\n errorAction.resolved = true;\n }\n return errorAction;\n}\n\nvar FragmentState = {\n NOT_LOADED: \"NOT_LOADED\",\n APPENDING: \"APPENDING\",\n PARTIAL: \"PARTIAL\",\n OK: \"OK\"\n};\nclass FragmentTracker {\n constructor(hls) {\n this.activePartLists = Object.create(null);\n this.endListFragments = Object.create(null);\n this.fragments = Object.create(null);\n this.timeRanges = Object.create(null);\n this.bufferPadding = 0.2;\n this.hls = void 0;\n this.hasGaps = false;\n this.hls = hls;\n this._registerListeners();\n }\n _registerListeners() {\n const {\n hls\n } = this;\n if (hls) {\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.BUFFER_APPENDED, this.onBufferAppended, this);\n hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n hls.on(Events.FRAG_LOADED, this.onFragLoaded, this);\n }\n }\n _unregisterListeners() {\n const {\n hls\n } = this;\n if (hls) {\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.BUFFER_APPENDED, this.onBufferAppended, this);\n hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n hls.off(Events.FRAG_LOADED, this.onFragLoaded, this);\n }\n }\n destroy() {\n this._unregisterListeners();\n // @ts-ignore\n this.hls =\n // @ts-ignore\n this.fragments =\n // @ts-ignore\n this.activePartLists =\n // @ts-ignore\n this.endListFragments = this.timeRanges = null;\n }\n\n /**\n * Return a Fragment or Part with an appended range that matches the position and levelType\n * Otherwise, return null\n */\n getAppendedFrag(position, levelType) {\n const activeParts = this.activePartLists[levelType];\n if (activeParts) {\n for (let i = activeParts.length; i--;) {\n const activePart = activeParts[i];\n if (!activePart) {\n break;\n }\n if (activePart.start <= position && position <= activePart.end && activePart.loaded) {\n return activePart;\n }\n }\n }\n return this.getBufferedFrag(position, levelType);\n }\n\n /**\n * Return a buffered Fragment that matches the position and levelType.\n * A buffered Fragment is one whose loading, parsing and appending is done (completed or \"partial\" meaning aborted).\n * If not found any Fragment, return null\n */\n getBufferedFrag(position, levelType) {\n return this.getFragAtPos(position, levelType, true);\n }\n getFragAtPos(position, levelType, buffered) {\n const {\n fragments\n } = this;\n const keys = Object.keys(fragments);\n for (let i = keys.length; i--;) {\n const fragmentEntity = fragments[keys[i]];\n if ((fragmentEntity == null ? void 0 : fragmentEntity.body.type) === levelType && (!buffered || fragmentEntity.buffered)) {\n const frag = fragmentEntity.body;\n if (frag.start <= position && position <= frag.end) {\n return frag;\n }\n }\n }\n return null;\n }\n\n /**\n * Partial fragments effected by coded frame eviction will be removed\n * The browser will unload parts of the buffer to free up memory for new buffer data\n * Fragments will need to be reloaded when the buffer is freed up, removing partial fragments will allow them to reload(since there might be parts that are still playable)\n */\n detectEvictedFragments(elementaryStream, timeRange, playlistType, appendedPart, removeAppending) {\n if (this.timeRanges) {\n this.timeRanges[elementaryStream] = timeRange;\n }\n // Check if any flagged fragments have been unloaded\n // excluding anything newer than appendedPartSn\n const appendedPartSn = (appendedPart == null ? void 0 : appendedPart.fragment.sn) || -1;\n Object.keys(this.fragments).forEach(key => {\n const fragmentEntity = this.fragments[key];\n if (!fragmentEntity) {\n return;\n }\n if (appendedPartSn >= fragmentEntity.body.sn) {\n return;\n }\n if (!fragmentEntity.buffered && (!fragmentEntity.loaded || removeAppending)) {\n if (fragmentEntity.body.type === playlistType) {\n this.removeFragment(fragmentEntity.body);\n }\n return;\n }\n const esData = fragmentEntity.range[elementaryStream];\n if (!esData) {\n return;\n }\n if (esData.time.length === 0) {\n this.removeFragment(fragmentEntity.body);\n return;\n }\n esData.time.some(time => {\n const isNotBuffered = !this.isTimeBuffered(time.startPTS, time.endPTS, timeRange);\n if (isNotBuffered) {\n // Unregister partial fragment as it needs to load again to be reused\n this.removeFragment(fragmentEntity.body);\n }\n return isNotBuffered;\n });\n });\n }\n\n /**\n * Checks if the fragment passed in is loaded in the buffer properly\n * Partially loaded fragments will be registered as a partial fragment\n */\n detectPartialFragments(data) {\n const timeRanges = this.timeRanges;\n if (!timeRanges || data.frag.sn === 'initSegment') {\n return;\n }\n const frag = data.frag;\n const fragKey = getFragmentKey(frag);\n const fragmentEntity = this.fragments[fragKey];\n if (!fragmentEntity || fragmentEntity.buffered && frag.gap) {\n return;\n }\n const isFragHint = !frag.relurl;\n Object.keys(timeRanges).forEach(elementaryStream => {\n const streamInfo = frag.elementaryStreams[elementaryStream];\n if (!streamInfo) {\n return;\n }\n const timeRange = timeRanges[elementaryStream];\n const partial = isFragHint || streamInfo.partial === true;\n fragmentEntity.range[elementaryStream] = this.getBufferedTimes(frag, data.part, partial, timeRange);\n });\n fragmentEntity.loaded = null;\n if (Object.keys(fragmentEntity.range).length) {\n this.bufferedEnd(fragmentEntity, frag);\n if (!isPartial(fragmentEntity)) {\n // Remove older fragment parts from lookup after frag is tracked as buffered\n this.removeParts(frag.sn - 1, frag.type);\n }\n } else {\n // remove fragment if nothing was appended\n this.removeFragment(fragmentEntity.body);\n }\n }\n bufferedEnd(fragmentEntity, frag) {\n fragmentEntity.buffered = true;\n const endList = fragmentEntity.body.endList = frag.endList || fragmentEntity.body.endList;\n if (endList) {\n this.endListFragments[fragmentEntity.body.type] = fragmentEntity;\n }\n }\n removeParts(snToKeep, levelType) {\n const activeParts = this.activePartLists[levelType];\n if (!activeParts) {\n return;\n }\n this.activePartLists[levelType] = filterParts(activeParts, part => part.fragment.sn >= snToKeep);\n }\n fragBuffered(frag, force) {\n const fragKey = getFragmentKey(frag);\n let fragmentEntity = this.fragments[fragKey];\n if (!fragmentEntity && force) {\n fragmentEntity = this.fragments[fragKey] = {\n body: frag,\n appendedPTS: null,\n loaded: null,\n buffered: false,\n range: Object.create(null)\n };\n if (frag.gap) {\n this.hasGaps = true;\n }\n }\n if (fragmentEntity) {\n fragmentEntity.loaded = null;\n this.bufferedEnd(fragmentEntity, frag);\n }\n }\n getBufferedTimes(fragment, part, partial, timeRange) {\n const buffered = {\n time: [],\n partial\n };\n const startPTS = fragment.start;\n const endPTS = fragment.end;\n const minEndPTS = fragment.minEndPTS || endPTS;\n const maxStartPTS = fragment.maxStartPTS || startPTS;\n for (let i = 0; i < timeRange.length; i++) {\n const startTime = timeRange.start(i) - this.bufferPadding;\n const endTime = timeRange.end(i) + this.bufferPadding;\n if (maxStartPTS >= startTime && minEndPTS <= endTime) {\n // Fragment is entirely contained in buffer\n // No need to check the other timeRange times since it's completely playable\n buffered.time.push({\n startPTS: Math.max(startPTS, timeRange.start(i)),\n endPTS: Math.min(endPTS, timeRange.end(i))\n });\n break;\n } else if (startPTS < endTime && endPTS > startTime) {\n const start = Math.max(startPTS, timeRange.start(i));\n const end = Math.min(endPTS, timeRange.end(i));\n if (end > start) {\n buffered.partial = true;\n // Check for intersection with buffer\n // Get playable sections of the fragment\n buffered.time.push({\n startPTS: start,\n endPTS: end\n });\n }\n } else if (endPTS <= startTime) {\n // No need to check the rest of the timeRange as it is in order\n break;\n }\n }\n return buffered;\n }\n\n /**\n * Gets the partial fragment for a certain time\n */\n getPartialFragment(time) {\n let bestFragment = null;\n let timePadding;\n let startTime;\n let endTime;\n let bestOverlap = 0;\n const {\n bufferPadding,\n fragments\n } = this;\n Object.keys(fragments).forEach(key => {\n const fragmentEntity = fragments[key];\n if (!fragmentEntity) {\n return;\n }\n if (isPartial(fragmentEntity)) {\n startTime = fragmentEntity.body.start - bufferPadding;\n endTime = fragmentEntity.body.end + bufferPadding;\n if (time >= startTime && time <= endTime) {\n // Use the fragment that has the most padding from start and end time\n timePadding = Math.min(time - startTime, endTime - time);\n if (bestOverlap <= timePadding) {\n bestFragment = fragmentEntity.body;\n bestOverlap = timePadding;\n }\n }\n }\n });\n return bestFragment;\n }\n isEndListAppended(type) {\n const lastFragmentEntity = this.endListFragments[type];\n return lastFragmentEntity !== undefined && (lastFragmentEntity.buffered || isPartial(lastFragmentEntity));\n }\n getState(fragment) {\n const fragKey = getFragmentKey(fragment);\n const fragmentEntity = this.fragments[fragKey];\n if (fragmentEntity) {\n if (!fragmentEntity.buffered) {\n return FragmentState.APPENDING;\n } else if (isPartial(fragmentEntity)) {\n return FragmentState.PARTIAL;\n } else {\n return FragmentState.OK;\n }\n }\n return FragmentState.NOT_LOADED;\n }\n isTimeBuffered(startPTS, endPTS, timeRange) {\n let startTime;\n let endTime;\n for (let i = 0; i < timeRange.length; i++) {\n startTime = timeRange.start(i) - this.bufferPadding;\n endTime = timeRange.end(i) + this.bufferPadding;\n if (startPTS >= startTime && endPTS <= endTime) {\n return true;\n }\n if (endPTS <= startTime) {\n // No need to check the rest of the timeRange as it is in order\n return false;\n }\n }\n return false;\n }\n onManifestLoading() {\n this.removeAllFragments();\n }\n onFragLoaded(event, data) {\n // don't track initsegment (for which sn is not a number)\n // don't track frags used for bitrateTest, they're irrelevant.\n if (data.frag.sn === 'initSegment' || data.frag.bitrateTest) {\n return;\n }\n const frag = data.frag;\n // Fragment entity `loaded` FragLoadedData is null when loading parts\n const loaded = data.part ? null : data;\n const fragKey = getFragmentKey(frag);\n this.fragments[fragKey] = {\n body: frag,\n appendedPTS: null,\n loaded,\n buffered: false,\n range: Object.create(null)\n };\n }\n onBufferAppended(event, data) {\n const {\n frag,\n part,\n timeRanges,\n type\n } = data;\n if (frag.sn === 'initSegment') {\n return;\n }\n const playlistType = frag.type;\n if (part) {\n let activeParts = this.activePartLists[playlistType];\n if (!activeParts) {\n this.activePartLists[playlistType] = activeParts = [];\n }\n activeParts.push(part);\n }\n // Store the latest timeRanges loaded in the buffer\n this.timeRanges = timeRanges;\n const timeRange = timeRanges[type];\n this.detectEvictedFragments(type, timeRange, playlistType, part);\n }\n onFragBuffered(event, data) {\n this.detectPartialFragments(data);\n }\n hasFragment(fragment) {\n const fragKey = getFragmentKey(fragment);\n return !!this.fragments[fragKey];\n }\n hasFragments(type) {\n const {\n fragments\n } = this;\n const keys = Object.keys(fragments);\n if (!type) {\n return keys.length > 0;\n }\n for (let i = keys.length; i--;) {\n const fragmentEntity = fragments[keys[i]];\n if ((fragmentEntity == null ? void 0 : fragmentEntity.body.type) === type) {\n return true;\n }\n }\n return false;\n }\n hasParts(type) {\n var _this$activePartLists;\n return !!((_this$activePartLists = this.activePartLists[type]) != null && _this$activePartLists.length);\n }\n removeFragmentsInRange(start, end, playlistType, withGapOnly, unbufferedOnly) {\n if (withGapOnly && !this.hasGaps) {\n return;\n }\n Object.keys(this.fragments).forEach(key => {\n const fragmentEntity = this.fragments[key];\n if (!fragmentEntity) {\n return;\n }\n const frag = fragmentEntity.body;\n if (frag.type !== playlistType || withGapOnly && !frag.gap) {\n return;\n }\n if (frag.start < end && frag.end > start && (fragmentEntity.buffered || unbufferedOnly)) {\n this.removeFragment(frag);\n }\n });\n }\n removeFragment(fragment) {\n const fragKey = getFragmentKey(fragment);\n fragment.clearElementaryStreamInfo();\n const activeParts = this.activePartLists[fragment.type];\n if (activeParts) {\n const snToRemove = fragment.sn;\n this.activePartLists[fragment.type] = filterParts(activeParts, part => part.fragment.sn !== snToRemove);\n }\n delete this.fragments[fragKey];\n if (fragment.endList) {\n delete this.endListFragments[fragment.type];\n }\n }\n removeAllFragments() {\n var _this$hls;\n this.fragments = Object.create(null);\n this.endListFragments = Object.create(null);\n this.activePartLists = Object.create(null);\n this.hasGaps = false;\n const partlist = (_this$hls = this.hls) == null || (_this$hls = _this$hls.latestLevelDetails) == null ? void 0 : _this$hls.partList;\n if (partlist) {\n partlist.forEach(part => part.clearElementaryStreamInfo());\n }\n }\n}\nfunction isPartial(fragmentEntity) {\n var _fragmentEntity$range, _fragmentEntity$range2, _fragmentEntity$range3;\n return fragmentEntity.buffered && !!(fragmentEntity.body.gap || (_fragmentEntity$range = fragmentEntity.range.video) != null && _fragmentEntity$range.partial || (_fragmentEntity$range2 = fragmentEntity.range.audio) != null && _fragmentEntity$range2.partial || (_fragmentEntity$range3 = fragmentEntity.range.audiovideo) != null && _fragmentEntity$range3.partial);\n}\nfunction getFragmentKey(fragment) {\n return `${fragment.type}_${fragment.level}_${fragment.sn}`;\n}\nfunction filterParts(partList, predicate) {\n return partList.filter(part => {\n const keep = predicate(part);\n if (!keep) {\n part.clearElementaryStreamInfo();\n }\n return keep;\n });\n}\n\nvar DecrypterAesMode = {\n cbc: 0,\n ctr: 1\n};\n\nclass AESCrypto {\n constructor(subtle, iv, aesMode) {\n this.subtle = void 0;\n this.aesIV = void 0;\n this.aesMode = void 0;\n this.subtle = subtle;\n this.aesIV = iv;\n this.aesMode = aesMode;\n }\n decrypt(data, key) {\n switch (this.aesMode) {\n case DecrypterAesMode.cbc:\n return this.subtle.decrypt({\n name: 'AES-CBC',\n iv: this.aesIV\n }, key, data);\n case DecrypterAesMode.ctr:\n return this.subtle.decrypt({\n name: 'AES-CTR',\n counter: this.aesIV,\n length: 64\n },\n //64 : NIST SP800-38A standard suggests that the counter should occupy half of the counter block\n key, data);\n default:\n throw new Error(`[AESCrypto] invalid aes mode ${this.aesMode}`);\n }\n }\n}\n\n// PKCS7\nfunction removePadding(array) {\n const outputBytes = array.byteLength;\n const paddingBytes = outputBytes && new DataView(array.buffer).getUint8(outputBytes - 1);\n if (paddingBytes) {\n return array.slice(0, outputBytes - paddingBytes);\n }\n return array;\n}\nclass AESDecryptor {\n constructor() {\n this.rcon = [0x0, 0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n this.subMix = [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)];\n this.invSubMix = [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)];\n this.sBox = new Uint32Array(256);\n this.invSBox = new Uint32Array(256);\n this.key = new Uint32Array(0);\n this.ksRows = 0;\n this.keySize = 0;\n this.keySchedule = void 0;\n this.invKeySchedule = void 0;\n this.initTable();\n }\n\n // Using view.getUint32() also swaps the byte order.\n uint8ArrayToUint32Array_(arrayBuffer) {\n const view = new DataView(arrayBuffer);\n const newArray = new Uint32Array(4);\n for (let i = 0; i < 4; i++) {\n newArray[i] = view.getUint32(i * 4);\n }\n return newArray;\n }\n initTable() {\n const sBox = this.sBox;\n const invSBox = this.invSBox;\n const subMix = this.subMix;\n const subMix0 = subMix[0];\n const subMix1 = subMix[1];\n const subMix2 = subMix[2];\n const subMix3 = subMix[3];\n const invSubMix = this.invSubMix;\n const invSubMix0 = invSubMix[0];\n const invSubMix1 = invSubMix[1];\n const invSubMix2 = invSubMix[2];\n const invSubMix3 = invSubMix[3];\n const d = new Uint32Array(256);\n let x = 0;\n let xi = 0;\n let i = 0;\n for (i = 0; i < 256; i++) {\n if (i < 128) {\n d[i] = i << 1;\n } else {\n d[i] = i << 1 ^ 0x11b;\n }\n }\n for (i = 0; i < 256; i++) {\n let sx = xi ^ xi << 1 ^ xi << 2 ^ xi << 3 ^ xi << 4;\n sx = sx >>> 8 ^ sx & 0xff ^ 0x63;\n sBox[x] = sx;\n invSBox[sx] = x;\n\n // Compute multiplication\n const x2 = d[x];\n const x4 = d[x2];\n const x8 = d[x4];\n\n // Compute sub/invSub bytes, mix columns tables\n let t = d[sx] * 0x101 ^ sx * 0x1010100;\n subMix0[x] = t << 24 | t >>> 8;\n subMix1[x] = t << 16 | t >>> 16;\n subMix2[x] = t << 8 | t >>> 24;\n subMix3[x] = t;\n\n // Compute inv sub bytes, inv mix columns tables\n t = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n invSubMix0[sx] = t << 24 | t >>> 8;\n invSubMix1[sx] = t << 16 | t >>> 16;\n invSubMix2[sx] = t << 8 | t >>> 24;\n invSubMix3[sx] = t;\n\n // Compute next counter\n if (!x) {\n x = xi = 1;\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]];\n xi ^= d[d[xi]];\n }\n }\n }\n expandKey(keyBuffer) {\n // convert keyBuffer to Uint32Array\n const key = this.uint8ArrayToUint32Array_(keyBuffer);\n let sameKey = true;\n let offset = 0;\n while (offset < key.length && sameKey) {\n sameKey = key[offset] === this.key[offset];\n offset++;\n }\n if (sameKey) {\n return;\n }\n this.key = key;\n const keySize = this.keySize = key.length;\n if (keySize !== 4 && keySize !== 6 && keySize !== 8) {\n throw new Error('Invalid aes key size=' + keySize);\n }\n const ksRows = this.ksRows = (keySize + 6 + 1) * 4;\n let ksRow;\n let invKsRow;\n const keySchedule = this.keySchedule = new Uint32Array(ksRows);\n const invKeySchedule = this.invKeySchedule = new Uint32Array(ksRows);\n const sbox = this.sBox;\n const rcon = this.rcon;\n const invSubMix = this.invSubMix;\n const invSubMix0 = invSubMix[0];\n const invSubMix1 = invSubMix[1];\n const invSubMix2 = invSubMix[2];\n const invSubMix3 = invSubMix[3];\n let prev;\n let t;\n for (ksRow = 0; ksRow < ksRows; ksRow++) {\n if (ksRow < keySize) {\n prev = keySchedule[ksRow] = key[ksRow];\n continue;\n }\n t = prev;\n if (ksRow % keySize === 0) {\n // Rot word\n t = t << 8 | t >>> 24;\n\n // Sub word\n t = sbox[t >>> 24] << 24 | sbox[t >>> 16 & 0xff] << 16 | sbox[t >>> 8 & 0xff] << 8 | sbox[t & 0xff];\n\n // Mix Rcon\n t ^= rcon[ksRow / keySize | 0] << 24;\n } else if (keySize > 6 && ksRow % keySize === 4) {\n // Sub word\n t = sbox[t >>> 24] << 24 | sbox[t >>> 16 & 0xff] << 16 | sbox[t >>> 8 & 0xff] << 8 | sbox[t & 0xff];\n }\n keySchedule[ksRow] = prev = (keySchedule[ksRow - keySize] ^ t) >>> 0;\n }\n for (invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n ksRow = ksRows - invKsRow;\n if (invKsRow & 3) {\n t = keySchedule[ksRow];\n } else {\n t = keySchedule[ksRow - 4];\n }\n if (invKsRow < 4 || ksRow <= 4) {\n invKeySchedule[invKsRow] = t;\n } else {\n invKeySchedule[invKsRow] = invSubMix0[sbox[t >>> 24]] ^ invSubMix1[sbox[t >>> 16 & 0xff]] ^ invSubMix2[sbox[t >>> 8 & 0xff]] ^ invSubMix3[sbox[t & 0xff]];\n }\n invKeySchedule[invKsRow] = invKeySchedule[invKsRow] >>> 0;\n }\n }\n\n // Adding this as a method greatly improves performance.\n networkToHostOrderSwap(word) {\n return word << 24 | (word & 0xff00) << 8 | (word & 0xff0000) >> 8 | word >>> 24;\n }\n decrypt(inputArrayBuffer, offset, aesIV) {\n const nRounds = this.keySize + 6;\n const invKeySchedule = this.invKeySchedule;\n const invSBOX = this.invSBox;\n const invSubMix = this.invSubMix;\n const invSubMix0 = invSubMix[0];\n const invSubMix1 = invSubMix[1];\n const invSubMix2 = invSubMix[2];\n const invSubMix3 = invSubMix[3];\n const initVector = this.uint8ArrayToUint32Array_(aesIV);\n let initVector0 = initVector[0];\n let initVector1 = initVector[1];\n let initVector2 = initVector[2];\n let initVector3 = initVector[3];\n const inputInt32 = new Int32Array(inputArrayBuffer);\n const outputInt32 = new Int32Array(inputInt32.length);\n let t0, t1, t2, t3;\n let s0, s1, s2, s3;\n let inputWords0, inputWords1, inputWords2, inputWords3;\n let ksRow, i;\n const swapWord = this.networkToHostOrderSwap;\n while (offset < inputInt32.length) {\n inputWords0 = swapWord(inputInt32[offset]);\n inputWords1 = swapWord(inputInt32[offset + 1]);\n inputWords2 = swapWord(inputInt32[offset + 2]);\n inputWords3 = swapWord(inputInt32[offset + 3]);\n s0 = inputWords0 ^ invKeySchedule[0];\n s1 = inputWords3 ^ invKeySchedule[1];\n s2 = inputWords2 ^ invKeySchedule[2];\n s3 = inputWords1 ^ invKeySchedule[3];\n ksRow = 4;\n\n // Iterate through the rounds of decryption\n for (i = 1; i < nRounds; i++) {\n t0 = invSubMix0[s0 >>> 24] ^ invSubMix1[s1 >> 16 & 0xff] ^ invSubMix2[s2 >> 8 & 0xff] ^ invSubMix3[s3 & 0xff] ^ invKeySchedule[ksRow];\n t1 = invSubMix0[s1 >>> 24] ^ invSubMix1[s2 >> 16 & 0xff] ^ invSubMix2[s3 >> 8 & 0xff] ^ invSubMix3[s0 & 0xff] ^ invKeySchedule[ksRow + 1];\n t2 = invSubMix0[s2 >>> 24] ^ invSubMix1[s3 >> 16 & 0xff] ^ invSubMix2[s0 >> 8 & 0xff] ^ invSubMix3[s1 & 0xff] ^ invKeySchedule[ksRow + 2];\n t3 = invSubMix0[s3 >>> 24] ^ invSubMix1[s0 >> 16 & 0xff] ^ invSubMix2[s1 >> 8 & 0xff] ^ invSubMix3[s2 & 0xff] ^ invKeySchedule[ksRow + 3];\n // Update state\n s0 = t0;\n s1 = t1;\n s2 = t2;\n s3 = t3;\n ksRow = ksRow + 4;\n }\n\n // Shift rows, sub bytes, add round key\n t0 = invSBOX[s0 >>> 24] << 24 ^ invSBOX[s1 >> 16 & 0xff] << 16 ^ invSBOX[s2 >> 8 & 0xff] << 8 ^ invSBOX[s3 & 0xff] ^ invKeySchedule[ksRow];\n t1 = invSBOX[s1 >>> 24] << 24 ^ invSBOX[s2 >> 16 & 0xff] << 16 ^ invSBOX[s3 >> 8 & 0xff] << 8 ^ invSBOX[s0 & 0xff] ^ invKeySchedule[ksRow + 1];\n t2 = invSBOX[s2 >>> 24] << 24 ^ invSBOX[s3 >> 16 & 0xff] << 16 ^ invSBOX[s0 >> 8 & 0xff] << 8 ^ invSBOX[s1 & 0xff] ^ invKeySchedule[ksRow + 2];\n t3 = invSBOX[s3 >>> 24] << 24 ^ invSBOX[s0 >> 16 & 0xff] << 16 ^ invSBOX[s1 >> 8 & 0xff] << 8 ^ invSBOX[s2 & 0xff] ^ invKeySchedule[ksRow + 3];\n\n // Write\n outputInt32[offset] = swapWord(t0 ^ initVector0);\n outputInt32[offset + 1] = swapWord(t3 ^ initVector1);\n outputInt32[offset + 2] = swapWord(t2 ^ initVector2);\n outputInt32[offset + 3] = swapWord(t1 ^ initVector3);\n\n // reset initVector to last 4 unsigned int\n initVector0 = inputWords0;\n initVector1 = inputWords1;\n initVector2 = inputWords2;\n initVector3 = inputWords3;\n offset = offset + 4;\n }\n return outputInt32.buffer;\n }\n}\n\nclass FastAESKey {\n constructor(subtle, key, aesMode) {\n this.subtle = void 0;\n this.key = void 0;\n this.aesMode = void 0;\n this.subtle = subtle;\n this.key = key;\n this.aesMode = aesMode;\n }\n expandKey() {\n const subtleAlgoName = getSubtleAlgoName(this.aesMode);\n return this.subtle.importKey('raw', this.key, {\n name: subtleAlgoName\n }, false, ['encrypt', 'decrypt']);\n }\n}\nfunction getSubtleAlgoName(aesMode) {\n switch (aesMode) {\n case DecrypterAesMode.cbc:\n return 'AES-CBC';\n case DecrypterAesMode.ctr:\n return 'AES-CTR';\n default:\n throw new Error(`[FastAESKey] invalid aes mode ${aesMode}`);\n }\n}\n\nconst CHUNK_SIZE = 16; // 16 bytes, 128 bits\n\nclass Decrypter {\n constructor(config, {\n removePKCS7Padding = true\n } = {}) {\n this.logEnabled = true;\n this.removePKCS7Padding = void 0;\n this.subtle = null;\n this.softwareDecrypter = null;\n this.key = null;\n this.fastAesKey = null;\n this.remainderData = null;\n this.currentIV = null;\n this.currentResult = null;\n this.useSoftware = void 0;\n this.enableSoftwareAES = void 0;\n this.enableSoftwareAES = config.enableSoftwareAES;\n this.removePKCS7Padding = removePKCS7Padding;\n // built in decryptor expects PKCS7 padding\n if (removePKCS7Padding) {\n try {\n const browserCrypto = self.crypto;\n if (browserCrypto) {\n this.subtle = browserCrypto.subtle || browserCrypto.webkitSubtle;\n }\n } catch (e) {\n /* no-op */\n }\n }\n this.useSoftware = !this.subtle;\n }\n destroy() {\n this.subtle = null;\n this.softwareDecrypter = null;\n this.key = null;\n this.fastAesKey = null;\n this.remainderData = null;\n this.currentIV = null;\n this.currentResult = null;\n }\n isSync() {\n return this.useSoftware;\n }\n flush() {\n const {\n currentResult,\n remainderData\n } = this;\n if (!currentResult || remainderData) {\n this.reset();\n return null;\n }\n const data = new Uint8Array(currentResult);\n this.reset();\n if (this.removePKCS7Padding) {\n return removePadding(data);\n }\n return data;\n }\n reset() {\n this.currentResult = null;\n this.currentIV = null;\n this.remainderData = null;\n if (this.softwareDecrypter) {\n this.softwareDecrypter = null;\n }\n }\n decrypt(data, key, iv, aesMode) {\n if (this.useSoftware) {\n return new Promise((resolve, reject) => {\n const dataView = ArrayBuffer.isView(data) ? data : new Uint8Array(data);\n this.softwareDecrypt(dataView, key, iv, aesMode);\n const decryptResult = this.flush();\n if (decryptResult) {\n resolve(decryptResult.buffer);\n } else {\n reject(new Error('[softwareDecrypt] Failed to decrypt data'));\n }\n });\n }\n return this.webCryptoDecrypt(new Uint8Array(data), key, iv, aesMode);\n }\n\n // Software decryption is progressive. Progressive decryption may not return a result on each call. Any cached\n // data is handled in the flush() call\n softwareDecrypt(data, key, iv, aesMode) {\n const {\n currentIV,\n currentResult,\n remainderData\n } = this;\n if (aesMode !== DecrypterAesMode.cbc || key.byteLength !== 16) {\n logger.warn('SoftwareDecrypt: can only handle AES-128-CBC');\n return null;\n }\n this.logOnce('JS AES decrypt');\n // The output is staggered during progressive parsing - the current result is cached, and emitted on the next call\n // This is done in order to strip PKCS7 padding, which is found at the end of each segment. We only know we've reached\n // the end on flush(), but by that time we have already received all bytes for the segment.\n // Progressive decryption does not work with WebCrypto\n\n if (remainderData) {\n data = appendUint8Array(remainderData, data);\n this.remainderData = null;\n }\n\n // Byte length must be a multiple of 16 (AES-128 = 128 bit blocks = 16 bytes)\n const currentChunk = this.getValidChunk(data);\n if (!currentChunk.length) {\n return null;\n }\n if (currentIV) {\n iv = currentIV;\n }\n let softwareDecrypter = this.softwareDecrypter;\n if (!softwareDecrypter) {\n softwareDecrypter = this.softwareDecrypter = new AESDecryptor();\n }\n softwareDecrypter.expandKey(key);\n const result = currentResult;\n this.currentResult = softwareDecrypter.decrypt(currentChunk.buffer, 0, iv);\n this.currentIV = currentChunk.slice(-16).buffer;\n if (!result) {\n return null;\n }\n return result;\n }\n webCryptoDecrypt(data, key, iv, aesMode) {\n if (this.key !== key || !this.fastAesKey) {\n if (!this.subtle) {\n return Promise.resolve(this.onWebCryptoError(data, key, iv, aesMode));\n }\n this.key = key;\n this.fastAesKey = new FastAESKey(this.subtle, key, aesMode);\n }\n return this.fastAesKey.expandKey().then(aesKey => {\n // decrypt using web crypto\n if (!this.subtle) {\n return Promise.reject(new Error('web crypto not initialized'));\n }\n this.logOnce('WebCrypto AES decrypt');\n const crypto = new AESCrypto(this.subtle, new Uint8Array(iv), aesMode);\n return crypto.decrypt(data.buffer, aesKey);\n }).catch(err => {\n logger.warn(`[decrypter]: WebCrypto Error, disable WebCrypto API, ${err.name}: ${err.message}`);\n return this.onWebCryptoError(data, key, iv, aesMode);\n });\n }\n onWebCryptoError(data, key, iv, aesMode) {\n const enableSoftwareAES = this.enableSoftwareAES;\n if (enableSoftwareAES) {\n this.useSoftware = true;\n this.logEnabled = true;\n this.softwareDecrypt(data, key, iv, aesMode);\n const decryptResult = this.flush();\n if (decryptResult) {\n return decryptResult.buffer;\n }\n }\n throw new Error('WebCrypto' + (enableSoftwareAES ? ' and softwareDecrypt' : '') + ': failed to decrypt data');\n }\n getValidChunk(data) {\n let currentChunk = data;\n const splitPoint = data.length - data.length % CHUNK_SIZE;\n if (splitPoint !== data.length) {\n currentChunk = data.slice(0, splitPoint);\n this.remainderData = data.slice(splitPoint);\n }\n return currentChunk;\n }\n logOnce(msg) {\n if (!this.logEnabled) {\n return;\n }\n logger.log(`[decrypter]: ${msg}`);\n this.logEnabled = false;\n }\n}\n\nconst MIN_CHUNK_SIZE = Math.pow(2, 17); // 128kb\n\nclass FragmentLoader {\n constructor(config) {\n this.config = void 0;\n this.loader = null;\n this.partLoadTimeout = -1;\n this.config = config;\n }\n destroy() {\n if (this.loader) {\n this.loader.destroy();\n this.loader = null;\n }\n }\n abort() {\n if (this.loader) {\n // Abort the loader for current fragment. Only one may load at any given time\n this.loader.abort();\n }\n }\n load(frag, onProgress) {\n const url = frag.url;\n if (!url) {\n return Promise.reject(new LoadError({\n type: ErrorTypes.NETWORK_ERROR,\n details: ErrorDetails.FRAG_LOAD_ERROR,\n fatal: false,\n frag,\n error: new Error(`Fragment does not have a ${url ? 'part list' : 'url'}`),\n networkDetails: null\n }));\n }\n this.abort();\n const config = this.config;\n const FragmentILoader = config.fLoader;\n const DefaultILoader = config.loader;\n return new Promise((resolve, reject) => {\n if (this.loader) {\n this.loader.destroy();\n }\n if (frag.gap) {\n if (frag.tagList.some(tags => tags[0] === 'GAP')) {\n reject(createGapLoadError(frag));\n return;\n } else {\n // Reset temporary treatment as GAP tag\n frag.gap = false;\n }\n }\n const loader = this.loader = FragmentILoader ? new FragmentILoader(config) : new DefaultILoader(config);\n const loaderContext = createLoaderContext(frag);\n frag.loader = loader;\n const loadPolicy = getLoaderConfigWithoutReties(config.fragLoadPolicy.default);\n const loaderConfig = {\n loadPolicy,\n timeout: loadPolicy.maxLoadTimeMs,\n maxRetry: 0,\n retryDelay: 0,\n maxRetryDelay: 0,\n highWaterMark: frag.sn === 'initSegment' ? Infinity : MIN_CHUNK_SIZE\n };\n // Assign frag stats to the loader's stats reference\n frag.stats = loader.stats;\n const callbacks = {\n onSuccess: (response, stats, context, networkDetails) => {\n this.resetLoader(frag, loader);\n let payload = response.data;\n if (context.resetIV && frag.decryptdata) {\n frag.decryptdata.iv = new Uint8Array(payload.slice(0, 16));\n payload = payload.slice(16);\n }\n resolve({\n frag,\n part: null,\n payload,\n networkDetails\n });\n },\n onError: (response, context, networkDetails, stats) => {\n this.resetLoader(frag, loader);\n reject(new LoadError({\n type: ErrorTypes.NETWORK_ERROR,\n details: ErrorDetails.FRAG_LOAD_ERROR,\n fatal: false,\n frag,\n response: _objectSpread2({\n url,\n data: undefined\n }, response),\n error: new Error(`HTTP Error ${response.code} ${response.text}`),\n networkDetails,\n stats\n }));\n },\n onAbort: (stats, context, networkDetails) => {\n this.resetLoader(frag, loader);\n reject(new LoadError({\n type: ErrorTypes.NETWORK_ERROR,\n details: ErrorDetails.INTERNAL_ABORTED,\n fatal: false,\n frag,\n error: new Error('Aborted'),\n networkDetails,\n stats\n }));\n },\n onTimeout: (stats, context, networkDetails) => {\n this.resetLoader(frag, loader);\n reject(new LoadError({\n type: ErrorTypes.NETWORK_ERROR,\n details: ErrorDetails.FRAG_LOAD_TIMEOUT,\n fatal: false,\n frag,\n error: new Error(`Timeout after ${loaderConfig.timeout}ms`),\n networkDetails,\n stats\n }));\n }\n };\n if (onProgress) {\n callbacks.onProgress = (stats, context, data, networkDetails) => onProgress({\n frag,\n part: null,\n payload: data,\n networkDetails\n });\n }\n loader.load(loaderContext, loaderConfig, callbacks);\n });\n }\n loadPart(frag, part, onProgress) {\n this.abort();\n const config = this.config;\n const FragmentILoader = config.fLoader;\n const DefaultILoader = config.loader;\n return new Promise((resolve, reject) => {\n if (this.loader) {\n this.loader.destroy();\n }\n if (frag.gap || part.gap) {\n reject(createGapLoadError(frag, part));\n return;\n }\n const loader = this.loader = FragmentILoader ? new FragmentILoader(config) : new DefaultILoader(config);\n const loaderContext = createLoaderContext(frag, part);\n frag.loader = loader;\n // Should we define another load policy for parts?\n const loadPolicy = getLoaderConfigWithoutReties(config.fragLoadPolicy.default);\n const loaderConfig = {\n loadPolicy,\n timeout: loadPolicy.maxLoadTimeMs,\n maxRetry: 0,\n retryDelay: 0,\n maxRetryDelay: 0,\n highWaterMark: MIN_CHUNK_SIZE\n };\n // Assign part stats to the loader's stats reference\n part.stats = loader.stats;\n loader.load(loaderContext, loaderConfig, {\n onSuccess: (response, stats, context, networkDetails) => {\n this.resetLoader(frag, loader);\n this.updateStatsFromPart(frag, part);\n const partLoadedData = {\n frag,\n part,\n payload: response.data,\n networkDetails\n };\n onProgress(partLoadedData);\n resolve(partLoadedData);\n },\n onError: (response, context, networkDetails, stats) => {\n this.resetLoader(frag, loader);\n reject(new LoadError({\n type: ErrorTypes.NETWORK_ERROR,\n details: ErrorDetails.FRAG_LOAD_ERROR,\n fatal: false,\n frag,\n part,\n response: _objectSpread2({\n url: loaderContext.url,\n data: undefined\n }, response),\n error: new Error(`HTTP Error ${response.code} ${response.text}`),\n networkDetails,\n stats\n }));\n },\n onAbort: (stats, context, networkDetails) => {\n frag.stats.aborted = part.stats.aborted;\n this.resetLoader(frag, loader);\n reject(new LoadError({\n type: ErrorTypes.NETWORK_ERROR,\n details: ErrorDetails.INTERNAL_ABORTED,\n fatal: false,\n frag,\n part,\n error: new Error('Aborted'),\n networkDetails,\n stats\n }));\n },\n onTimeout: (stats, context, networkDetails) => {\n this.resetLoader(frag, loader);\n reject(new LoadError({\n type: ErrorTypes.NETWORK_ERROR,\n details: ErrorDetails.FRAG_LOAD_TIMEOUT,\n fatal: false,\n frag,\n part,\n error: new Error(`Timeout after ${loaderConfig.timeout}ms`),\n networkDetails,\n stats\n }));\n }\n });\n });\n }\n updateStatsFromPart(frag, part) {\n const fragStats = frag.stats;\n const partStats = part.stats;\n const partTotal = partStats.total;\n fragStats.loaded += partStats.loaded;\n if (partTotal) {\n const estTotalParts = Math.round(frag.duration / part.duration);\n const estLoadedParts = Math.min(Math.round(fragStats.loaded / partTotal), estTotalParts);\n const estRemainingParts = estTotalParts - estLoadedParts;\n const estRemainingBytes = estRemainingParts * Math.round(fragStats.loaded / estLoadedParts);\n fragStats.total = fragStats.loaded + estRemainingBytes;\n } else {\n fragStats.total = Math.max(fragStats.loaded, fragStats.total);\n }\n const fragLoading = fragStats.loading;\n const partLoading = partStats.loading;\n if (fragLoading.start) {\n // add to fragment loader latency\n fragLoading.first += partLoading.first - partLoading.start;\n } else {\n fragLoading.start = partLoading.start;\n fragLoading.first = partLoading.first;\n }\n fragLoading.end = partLoading.end;\n }\n resetLoader(frag, loader) {\n frag.loader = null;\n if (this.loader === loader) {\n self.clearTimeout(this.partLoadTimeout);\n this.loader = null;\n }\n loader.destroy();\n }\n}\nfunction createLoaderContext(frag, part = null) {\n const segment = part || frag;\n const loaderContext = {\n frag,\n part,\n responseType: 'arraybuffer',\n url: segment.url,\n headers: {},\n rangeStart: 0,\n rangeEnd: 0\n };\n const start = segment.byteRangeStartOffset;\n const end = segment.byteRangeEndOffset;\n if (isFiniteNumber(start) && isFiniteNumber(end)) {\n var _frag$decryptdata;\n let byteRangeStart = start;\n let byteRangeEnd = end;\n if (frag.sn === 'initSegment' && isMethodFullSegmentAesCbc((_frag$decryptdata = frag.decryptdata) == null ? void 0 : _frag$decryptdata.method)) {\n // MAP segment encrypted with method 'AES-128' or 'AES-256' (cbc), when served with HTTP Range,\n // has the unencrypted size specified in the range.\n // Ref: https://tools.ietf.org/html/draft-pantos-hls-rfc8216bis-08#section-6.3.6\n const fragmentLen = end - start;\n if (fragmentLen % 16) {\n byteRangeEnd = end + (16 - fragmentLen % 16);\n }\n if (start !== 0) {\n loaderContext.resetIV = true;\n byteRangeStart = start - 16;\n }\n }\n loaderContext.rangeStart = byteRangeStart;\n loaderContext.rangeEnd = byteRangeEnd;\n }\n return loaderContext;\n}\nfunction createGapLoadError(frag, part) {\n const error = new Error(`GAP ${frag.gap ? 'tag' : 'attribute'} found`);\n const errorData = {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.FRAG_GAP,\n fatal: false,\n frag,\n error,\n networkDetails: null\n };\n if (part) {\n errorData.part = part;\n }\n (part ? part : frag).stats.aborted = true;\n return new LoadError(errorData);\n}\nfunction isMethodFullSegmentAesCbc(method) {\n return method === 'AES-128' || method === 'AES-256';\n}\nclass LoadError extends Error {\n constructor(data) {\n super(data.error.message);\n this.data = void 0;\n this.data = data;\n }\n}\n\n/**\n * @ignore\n * Sub-class specialization of EventHandler base class.\n *\n * TaskLoop allows to schedule a task function being called (optionnaly repeatedly) on the main loop,\n * scheduled asynchroneously, avoiding recursive calls in the same tick.\n *\n * The task itself is implemented in `doTick`. It can be requested and called for single execution\n * using the `tick` method.\n *\n * It will be assured that the task execution method (`tick`) only gets called once per main loop \"tick\",\n * no matter how often it gets requested for execution. Execution in further ticks will be scheduled accordingly.\n *\n * If further execution requests have already been scheduled on the next tick, it can be checked with `hasNextTick`,\n * and cancelled with `clearNextTick`.\n *\n * The task can be scheduled as an interval repeatedly with a period as parameter (see `setInterval`, `clearInterval`).\n *\n * Sub-classes need to implement the `doTick` method which will effectively have the task execution routine.\n *\n * Further explanations:\n *\n * The baseclass has a `tick` method that will schedule the doTick call. It may be called synchroneously\n * only for a stack-depth of one. On re-entrant calls, sub-sequent calls are scheduled for next main loop ticks.\n *\n * When the task execution (`tick` method) is called in re-entrant way this is detected and\n * we are limiting the task execution per call stack to exactly one, but scheduling/post-poning further\n * task processing on the next main loop iteration (also known as \"next tick\" in the Node/JS runtime lingo).\n */\nclass TaskLoop extends Logger {\n constructor(label, logger) {\n super(label, logger);\n this._boundTick = void 0;\n this._tickTimer = null;\n this._tickInterval = null;\n this._tickCallCount = 0;\n this._boundTick = this.tick.bind(this);\n }\n destroy() {\n this.onHandlerDestroying();\n this.onHandlerDestroyed();\n }\n onHandlerDestroying() {\n // clear all timers before unregistering from event bus\n this.clearNextTick();\n this.clearInterval();\n }\n onHandlerDestroyed() {}\n hasInterval() {\n return !!this._tickInterval;\n }\n hasNextTick() {\n return !!this._tickTimer;\n }\n\n /**\n * @param millis - Interval time (ms)\n * @eturns True when interval has been scheduled, false when already scheduled (no effect)\n */\n setInterval(millis) {\n if (!this._tickInterval) {\n this._tickCallCount = 0;\n this._tickInterval = self.setInterval(this._boundTick, millis);\n return true;\n }\n return false;\n }\n\n /**\n * @returns True when interval was cleared, false when none was set (no effect)\n */\n clearInterval() {\n if (this._tickInterval) {\n self.clearInterval(this._tickInterval);\n this._tickInterval = null;\n return true;\n }\n return false;\n }\n\n /**\n * @returns True when timeout was cleared, false when none was set (no effect)\n */\n clearNextTick() {\n if (this._tickTimer) {\n self.clearTimeout(this._tickTimer);\n this._tickTimer = null;\n return true;\n }\n return false;\n }\n\n /**\n * Will call the subclass doTick implementation in this main loop tick\n * or in the next one (via setTimeout(,0)) in case it has already been called\n * in this tick (in case this is a re-entrant call).\n */\n tick() {\n this._tickCallCount++;\n if (this._tickCallCount === 1) {\n this.doTick();\n // re-entrant call to tick from previous doTick call stack\n // -> schedule a call on the next main loop iteration to process this task processing request\n if (this._tickCallCount > 1) {\n // make sure only one timer exists at any time at max\n this.tickImmediate();\n }\n this._tickCallCount = 0;\n }\n }\n tickImmediate() {\n this.clearNextTick();\n this._tickTimer = self.setTimeout(this._boundTick, 0);\n }\n\n /**\n * For subclass to implement task logic\n * @abstract\n */\n doTick() {}\n}\n\nclass ChunkMetadata {\n constructor(level, sn, id, size = 0, part = -1, partial = false) {\n this.level = void 0;\n this.sn = void 0;\n this.part = void 0;\n this.id = void 0;\n this.size = void 0;\n this.partial = void 0;\n this.transmuxing = getNewPerformanceTiming();\n this.buffering = {\n audio: getNewPerformanceTiming(),\n video: getNewPerformanceTiming(),\n audiovideo: getNewPerformanceTiming()\n };\n this.level = level;\n this.sn = sn;\n this.id = id;\n this.size = size;\n this.part = part;\n this.partial = partial;\n }\n}\nfunction getNewPerformanceTiming() {\n return {\n start: 0,\n executeStart: 0,\n executeEnd: 0,\n end: 0\n };\n}\n\n/**\n * Provides methods dealing with buffer length retrieval for example.\n *\n * In general, a helper around HTML5 MediaElement TimeRanges gathered from `buffered` property.\n *\n * Also @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/buffered\n */\n\nconst noopBuffered = {\n length: 0,\n start: () => 0,\n end: () => 0\n};\nclass BufferHelper {\n /**\n * Return true if `media`'s buffered include `position`\n */\n static isBuffered(media, position) {\n if (media) {\n const buffered = BufferHelper.getBuffered(media);\n for (let i = buffered.length; i--;) {\n if (position >= buffered.start(i) && position <= buffered.end(i)) {\n return true;\n }\n }\n }\n return false;\n }\n static bufferedRanges(media) {\n if (media) {\n const timeRanges = BufferHelper.getBuffered(media);\n return BufferHelper.timeRangesToArray(timeRanges);\n }\n return [];\n }\n static timeRangesToArray(timeRanges) {\n const buffered = [];\n for (let i = 0; i < timeRanges.length; i++) {\n buffered.push({\n start: timeRanges.start(i),\n end: timeRanges.end(i)\n });\n }\n return buffered;\n }\n static bufferInfo(media, pos, maxHoleDuration) {\n if (media) {\n const buffered = BufferHelper.bufferedRanges(media);\n if (buffered.length) {\n return BufferHelper.bufferedInfo(buffered, pos, maxHoleDuration);\n }\n }\n return {\n len: 0,\n start: pos,\n end: pos,\n bufferedIndex: -1\n };\n }\n static bufferedInfo(buffered, pos, maxHoleDuration) {\n pos = Math.max(0, pos);\n // sort on buffer.start/smaller end (IE does not always return sorted buffered range)\n if (buffered.length > 1) {\n buffered.sort((a, b) => a.start - b.start || b.end - a.end);\n }\n let bufferedIndex = -1;\n let buffered2 = [];\n if (maxHoleDuration) {\n // there might be some small holes between buffer time range\n // consider that holes smaller than maxHoleDuration are irrelevant and build another\n // buffer time range representations that discards those holes\n for (let i = 0; i < buffered.length; i++) {\n if (pos >= buffered[i].start && pos <= buffered[i].end) {\n bufferedIndex = i;\n }\n const buf2len = buffered2.length;\n if (buf2len) {\n const buf2end = buffered2[buf2len - 1].end;\n // if small hole (value between 0 or maxHoleDuration ) or overlapping (negative)\n if (buffered[i].start - buf2end < maxHoleDuration) {\n // merge overlapping time ranges\n // update lastRange.end only if smaller than item.end\n // e.g. [ 1, 15] with [ 2,8] => [ 1,15] (no need to modify lastRange.end)\n // whereas [ 1, 8] with [ 2,15] => [ 1,15] ( lastRange should switch from [1,8] to [1,15])\n if (buffered[i].end > buf2end) {\n buffered2[buf2len - 1].end = buffered[i].end;\n }\n } else {\n // big hole\n buffered2.push(buffered[i]);\n }\n } else {\n // first value\n buffered2.push(buffered[i]);\n }\n }\n } else {\n buffered2 = buffered;\n }\n let bufferLen = 0;\n let nextStart;\n\n // bufferStart and bufferEnd are buffer boundaries around current playback position (pos)\n let bufferStart = pos;\n let bufferEnd = pos;\n for (let i = 0; i < buffered2.length; i++) {\n const start = buffered2[i].start;\n const end = buffered2[i].end;\n // logger.log('buf start/end:' + buffered.start(i) + '/' + buffered.end(i));\n if (bufferedIndex === -1 && pos >= start && pos <= end) {\n bufferedIndex = i;\n }\n if (pos + maxHoleDuration >= start && pos < end) {\n // play position is inside this buffer TimeRange, retrieve end of buffer position and buffer length\n bufferStart = start;\n bufferEnd = end;\n bufferLen = bufferEnd - pos;\n } else if (pos + maxHoleDuration < start) {\n nextStart = start;\n break;\n }\n }\n return {\n len: bufferLen,\n start: bufferStart || 0,\n end: bufferEnd || 0,\n nextStart,\n buffered,\n bufferedIndex\n };\n }\n\n /**\n * Safe method to get buffered property.\n * SourceBuffer.buffered may throw if SourceBuffer is removed from it's MediaSource\n */\n static getBuffered(media) {\n try {\n return media.buffered || noopBuffered;\n } catch (e) {\n logger.log('failed to get media.buffered', e);\n return noopBuffered;\n }\n }\n}\n\nconst VARIABLE_REPLACEMENT_REGEX = /\\{\\$([a-zA-Z0-9-_]+)\\}/g;\nfunction hasVariableReferences(str) {\n return VARIABLE_REPLACEMENT_REGEX.test(str);\n}\nfunction substituteVariables(parsed, value) {\n if (parsed.variableList !== null || parsed.hasVariableRefs) {\n const variableList = parsed.variableList;\n return value.replace(VARIABLE_REPLACEMENT_REGEX, variableReference => {\n const variableName = variableReference.substring(2, variableReference.length - 1);\n const variableValue = variableList == null ? void 0 : variableList[variableName];\n if (variableValue === undefined) {\n parsed.playlistParsingError || (parsed.playlistParsingError = new Error(`Missing preceding EXT-X-DEFINE tag for Variable Reference: \"${variableName}\"`));\n return variableReference;\n }\n return variableValue;\n });\n }\n return value;\n}\nfunction addVariableDefinition(parsed, attr, parentUrl) {\n let variableList = parsed.variableList;\n if (!variableList) {\n parsed.variableList = variableList = {};\n }\n let NAME;\n let VALUE;\n if ('QUERYPARAM' in attr) {\n NAME = attr.QUERYPARAM;\n try {\n const searchParams = new self.URL(parentUrl).searchParams;\n if (searchParams.has(NAME)) {\n VALUE = searchParams.get(NAME);\n } else {\n throw new Error(`\"${NAME}\" does not match any query parameter in URI: \"${parentUrl}\"`);\n }\n } catch (error) {\n parsed.playlistParsingError || (parsed.playlistParsingError = new Error(`EXT-X-DEFINE QUERYPARAM: ${error.message}`));\n }\n } else {\n NAME = attr.NAME;\n VALUE = attr.VALUE;\n }\n if (NAME in variableList) {\n parsed.playlistParsingError || (parsed.playlistParsingError = new Error(`EXT-X-DEFINE duplicate Variable Name declarations: \"${NAME}\"`));\n } else {\n variableList[NAME] = VALUE || '';\n }\n}\nfunction importVariableDefinition(parsed, attr, sourceVariableList) {\n const IMPORT = attr.IMPORT;\n if (sourceVariableList && IMPORT in sourceVariableList) {\n let variableList = parsed.variableList;\n if (!variableList) {\n parsed.variableList = variableList = {};\n }\n variableList[IMPORT] = sourceVariableList[IMPORT];\n } else {\n parsed.playlistParsingError || (parsed.playlistParsingError = new Error(`EXT-X-DEFINE IMPORT attribute not found in Multivariant Playlist: \"${IMPORT}\"`));\n }\n}\n\nconst DECIMAL_RESOLUTION_REGEX = /^(\\d+)x(\\d+)$/;\nconst ATTR_LIST_REGEX = /(.+?)=(\".*?\"|.*?)(?:,|$)/g;\n\n// adapted from https://github.com/kanongil/node-m3u8parse/blob/master/attrlist.js\nclass AttrList {\n constructor(attrs, parsed) {\n if (typeof attrs === 'string') {\n attrs = AttrList.parseAttrList(attrs, parsed);\n }\n _extends(this, attrs);\n }\n get clientAttrs() {\n return Object.keys(this).filter(attr => attr.substring(0, 2) === 'X-');\n }\n decimalInteger(attrName) {\n const intValue = parseInt(this[attrName], 10);\n if (intValue > Number.MAX_SAFE_INTEGER) {\n return Infinity;\n }\n return intValue;\n }\n hexadecimalInteger(attrName) {\n if (this[attrName]) {\n let stringValue = (this[attrName] || '0x').slice(2);\n stringValue = (stringValue.length & 1 ? '0' : '') + stringValue;\n const value = new Uint8Array(stringValue.length / 2);\n for (let i = 0; i < stringValue.length / 2; i++) {\n value[i] = parseInt(stringValue.slice(i * 2, i * 2 + 2), 16);\n }\n return value;\n }\n return null;\n }\n hexadecimalIntegerAsNumber(attrName) {\n const intValue = parseInt(this[attrName], 16);\n if (intValue > Number.MAX_SAFE_INTEGER) {\n return Infinity;\n }\n return intValue;\n }\n decimalFloatingPoint(attrName) {\n return parseFloat(this[attrName]);\n }\n optionalFloat(attrName, defaultValue) {\n const value = this[attrName];\n return value ? parseFloat(value) : defaultValue;\n }\n enumeratedString(attrName) {\n return this[attrName];\n }\n enumeratedStringList(attrName, dict) {\n const attrValue = this[attrName];\n return (attrValue ? attrValue.split(/[ ,]+/) : []).reduce((result, identifier) => {\n result[identifier.toLowerCase()] = true;\n return result;\n }, dict);\n }\n bool(attrName) {\n return this[attrName] === 'YES';\n }\n decimalResolution(attrName) {\n const res = DECIMAL_RESOLUTION_REGEX.exec(this[attrName]);\n if (res === null) {\n return undefined;\n }\n return {\n width: parseInt(res[1], 10),\n height: parseInt(res[2], 10)\n };\n }\n static parseAttrList(input, parsed) {\n let match;\n const attrs = {};\n const quote = '\"';\n ATTR_LIST_REGEX.lastIndex = 0;\n while ((match = ATTR_LIST_REGEX.exec(input)) !== null) {\n const name = match[1].trim();\n let value = match[2];\n const quotedString = value.indexOf(quote) === 0 && value.lastIndexOf(quote) === value.length - 1;\n let hexadecimalSequence = false;\n if (quotedString) {\n value = value.slice(1, -1);\n } else {\n switch (name) {\n case 'IV':\n case 'SCTE35-CMD':\n case 'SCTE35-IN':\n case 'SCTE35-OUT':\n hexadecimalSequence = true;\n }\n }\n if (parsed && (quotedString || hexadecimalSequence)) {\n {\n value = substituteVariables(parsed, value);\n }\n } else if (!hexadecimalSequence && !quotedString) {\n switch (name) {\n case 'CLOSED-CAPTIONS':\n if (value === 'NONE') {\n break;\n }\n // falls through\n case 'ALLOWED-CPC':\n case 'CLASS':\n case 'ASSOC-LANGUAGE':\n case 'AUDIO':\n case 'BYTERANGE':\n case 'CHANNELS':\n case 'CHARACTERISTICS':\n case 'CODECS':\n case 'DATA-ID':\n case 'END-DATE':\n case 'GROUP-ID':\n case 'ID':\n case 'IMPORT':\n case 'INSTREAM-ID':\n case 'KEYFORMAT':\n case 'KEYFORMATVERSIONS':\n case 'LANGUAGE':\n case 'NAME':\n case 'PATHWAY-ID':\n case 'QUERYPARAM':\n case 'RECENTLY-REMOVED-DATERANGES':\n case 'SERVER-URI':\n case 'STABLE-RENDITION-ID':\n case 'STABLE-VARIANT-ID':\n case 'START-DATE':\n case 'SUBTITLES':\n case 'SUPPLEMENTAL-CODECS':\n case 'URI':\n case 'VALUE':\n case 'VIDEO':\n case 'X-ASSET-LIST':\n case 'X-ASSET-URI':\n // Since we are not checking tag:attribute combination, just warn rather than ignoring attribute\n logger.warn(`${input}: attribute ${name} is missing quotes`);\n // continue;\n }\n }\n attrs[name] = value;\n }\n return attrs;\n }\n}\n\n// Avoid exporting const enum so that these values can be inlined\n\nconst CLASS_INTERSTITIAL = 'com.apple.hls.interstitial';\nfunction isDateRangeCueAttribute(attrName) {\n return attrName !== \"ID\" && attrName !== \"CLASS\" && attrName !== \"CUE\" && attrName !== \"START-DATE\" && attrName !== \"DURATION\" && attrName !== \"END-DATE\" && attrName !== \"END-ON-NEXT\";\n}\nfunction isSCTE35Attribute(attrName) {\n return attrName === \"SCTE35-OUT\" || attrName === \"SCTE35-IN\" || attrName === \"SCTE35-CMD\";\n}\nclass DateRange {\n constructor(dateRangeAttr, dateRangeWithSameId, tagCount = 0) {\n var _dateRangeWithSameId$;\n this.attr = void 0;\n this.tagAnchor = void 0;\n this.tagOrder = void 0;\n this._startDate = void 0;\n this._endDate = void 0;\n this._dateAtEnd = void 0;\n this._cue = void 0;\n this._badValueForSameId = void 0;\n this.tagAnchor = (dateRangeWithSameId == null ? void 0 : dateRangeWithSameId.tagAnchor) || null;\n this.tagOrder = (_dateRangeWithSameId$ = dateRangeWithSameId == null ? void 0 : dateRangeWithSameId.tagOrder) != null ? _dateRangeWithSameId$ : tagCount;\n if (dateRangeWithSameId) {\n const previousAttr = dateRangeWithSameId.attr;\n for (const key in previousAttr) {\n if (Object.prototype.hasOwnProperty.call(dateRangeAttr, key) && dateRangeAttr[key] !== previousAttr[key]) {\n logger.warn(`DATERANGE tag attribute: \"${key}\" does not match for tags with ID: \"${dateRangeAttr.ID}\"`);\n this._badValueForSameId = key;\n break;\n }\n }\n // Merge DateRange tags with the same ID\n dateRangeAttr = _extends(new AttrList({}), previousAttr, dateRangeAttr);\n }\n this.attr = dateRangeAttr;\n if (dateRangeWithSameId) {\n this._startDate = dateRangeWithSameId._startDate;\n this._cue = dateRangeWithSameId._cue;\n this._endDate = dateRangeWithSameId._endDate;\n this._dateAtEnd = dateRangeWithSameId._dateAtEnd;\n } else {\n this._startDate = new Date(dateRangeAttr[\"START-DATE\"]);\n }\n if (\"END-DATE\" in this.attr) {\n const endDate = (dateRangeWithSameId == null ? void 0 : dateRangeWithSameId.endDate) || new Date(this.attr[\"END-DATE\"]);\n if (isFiniteNumber(endDate.getTime())) {\n this._endDate = endDate;\n }\n }\n }\n get id() {\n return this.attr.ID;\n }\n get class() {\n return this.attr.CLASS;\n }\n get cue() {\n const _cue = this._cue;\n if (_cue === undefined) {\n return this._cue = this.attr.enumeratedStringList(this.attr.CUE ? 'CUE' : 'X-CUE', {\n pre: false,\n post: false,\n once: false\n });\n }\n return _cue;\n }\n get startTime() {\n const {\n tagAnchor\n } = this;\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\n if (tagAnchor === null || tagAnchor.programDateTime === null) {\n logger.warn(`Expected tagAnchor Fragment with PDT set for DateRange \"${this.id}\": ${tagAnchor}`);\n return NaN;\n }\n return tagAnchor.start + (this.startDate.getTime() - tagAnchor.programDateTime) / 1000;\n }\n get startDate() {\n return this._startDate;\n }\n get endDate() {\n const dateAtEnd = this._endDate || this._dateAtEnd;\n if (dateAtEnd) {\n return dateAtEnd;\n }\n const duration = this.duration;\n if (duration !== null) {\n return this._dateAtEnd = new Date(this._startDate.getTime() + duration * 1000);\n }\n return null;\n }\n get duration() {\n if (\"DURATION\" in this.attr) {\n const duration = this.attr.decimalFloatingPoint(\"DURATION\");\n if (isFiniteNumber(duration)) {\n return duration;\n }\n } else if (this._endDate) {\n return (this._endDate.getTime() - this._startDate.getTime()) / 1000;\n }\n return null;\n }\n get plannedDuration() {\n if (\"PLANNED-DURATION\" in this.attr) {\n return this.attr.decimalFloatingPoint(\"PLANNED-DURATION\");\n }\n return null;\n }\n get endOnNext() {\n return this.attr.bool(\"END-ON-NEXT\");\n }\n get isInterstitial() {\n return this.class === CLASS_INTERSTITIAL;\n }\n get isValid() {\n return !!this.id && !this._badValueForSameId && isFiniteNumber(this.startDate.getTime()) && (this.duration === null || this.duration >= 0) && (!this.endOnNext || !!this.class) && (!this.attr.CUE || !this.cue.pre && !this.cue.post || this.cue.pre !== this.cue.post) && (!this.isInterstitial || 'X-ASSET-URI' in this.attr || 'X-ASSET-LIST' in this.attr);\n }\n}\n\nconst DEFAULT_TARGET_DURATION = 10;\n\n/**\n * Object representing parsed data from an HLS Media Playlist. Found in {@link hls.js#Level.details}.\n */\nclass LevelDetails {\n constructor(baseUrl) {\n this.PTSKnown = false;\n this.alignedSliding = false;\n this.averagetargetduration = void 0;\n this.endCC = 0;\n this.endSN = 0;\n this.fragments = void 0;\n this.fragmentHint = void 0;\n this.partList = null;\n this.dateRanges = void 0;\n this.dateRangeTagCount = 0;\n this.live = true;\n this.requestScheduled = -1;\n this.ageHeader = 0;\n this.advancedDateTime = void 0;\n this.updated = true;\n this.advanced = true;\n this.misses = 0;\n this.startCC = 0;\n this.startSN = 0;\n this.startTimeOffset = null;\n this.targetduration = 0;\n this.totalduration = 0;\n this.type = null;\n this.url = void 0;\n this.m3u8 = '';\n this.version = null;\n this.canBlockReload = false;\n this.canSkipUntil = 0;\n this.canSkipDateRanges = false;\n this.skippedSegments = 0;\n this.recentlyRemovedDateranges = void 0;\n this.partHoldBack = 0;\n this.holdBack = 0;\n this.partTarget = 0;\n this.preloadHint = void 0;\n this.renditionReports = void 0;\n this.tuneInGoal = 0;\n this.deltaUpdateFailed = void 0;\n this.driftStartTime = 0;\n this.driftEndTime = 0;\n this.driftStart = 0;\n this.driftEnd = 0;\n this.encryptedFragments = void 0;\n this.playlistParsingError = null;\n this.variableList = null;\n this.hasVariableRefs = false;\n this.appliedTimelineOffset = void 0;\n this.fragments = [];\n this.encryptedFragments = [];\n this.dateRanges = {};\n this.url = baseUrl;\n }\n reloaded(previous) {\n if (!previous) {\n this.advanced = true;\n this.updated = true;\n return;\n }\n const partSnDiff = this.lastPartSn - previous.lastPartSn;\n const partIndexDiff = this.lastPartIndex - previous.lastPartIndex;\n this.updated = this.endSN !== previous.endSN || !!partIndexDiff || !!partSnDiff || !this.live;\n this.advanced = this.endSN > previous.endSN || partSnDiff > 0 || partSnDiff === 0 && partIndexDiff > 0;\n if (this.updated || this.advanced) {\n this.misses = Math.floor(previous.misses * 0.6);\n } else {\n this.misses = previous.misses + 1;\n }\n }\n hasKey(levelKey) {\n return this.encryptedFragments.some(frag => {\n let decryptdata = frag.decryptdata;\n if (!decryptdata) {\n frag.setKeyFormat(levelKey.keyFormat);\n decryptdata = frag.decryptdata;\n }\n return !!decryptdata && levelKey.matches(decryptdata);\n });\n }\n get hasProgramDateTime() {\n if (this.fragments.length) {\n return isFiniteNumber(this.fragments[this.fragments.length - 1].programDateTime);\n }\n return false;\n }\n get levelTargetDuration() {\n return this.averagetargetduration || this.targetduration || DEFAULT_TARGET_DURATION;\n }\n get drift() {\n const runTime = this.driftEndTime - this.driftStartTime;\n if (runTime > 0) {\n const runDuration = this.driftEnd - this.driftStart;\n return runDuration * 1000 / runTime;\n }\n return 1;\n }\n get edge() {\n return this.partEnd || this.fragmentEnd;\n }\n get partEnd() {\n var _this$partList;\n if ((_this$partList = this.partList) != null && _this$partList.length) {\n return this.partList[this.partList.length - 1].end;\n }\n return this.fragmentEnd;\n }\n get fragmentEnd() {\n if (this.fragments.length) {\n return this.fragments[this.fragments.length - 1].end;\n }\n return 0;\n }\n get fragmentStart() {\n if (this.fragments.length) {\n return this.fragments[0].start;\n }\n return 0;\n }\n get age() {\n if (this.advancedDateTime) {\n return Math.max(Date.now() - this.advancedDateTime, 0) / 1000;\n }\n return 0;\n }\n get lastPartIndex() {\n var _this$partList2;\n if ((_this$partList2 = this.partList) != null && _this$partList2.length) {\n return this.partList[this.partList.length - 1].index;\n }\n return -1;\n }\n get maxPartIndex() {\n const partList = this.partList;\n if (partList) {\n const lastIndex = this.lastPartIndex;\n if (lastIndex !== -1) {\n for (let i = partList.length; i--;) {\n if (partList[i].index > lastIndex) {\n return partList[i].index;\n }\n }\n return lastIndex;\n }\n }\n return 0;\n }\n get lastPartSn() {\n var _this$partList3;\n if ((_this$partList3 = this.partList) != null && _this$partList3.length) {\n return this.partList[this.partList.length - 1].fragment.sn;\n }\n return this.endSN;\n }\n get expired() {\n if (this.live && this.age && this.misses < 3) {\n const playlistWindowDuration = this.partEnd - this.fragmentStart;\n return this.age > Math.max(playlistWindowDuration, this.totalduration) + this.levelTargetDuration;\n }\n return false;\n }\n}\n\nfunction arrayValuesMatch(a, b) {\n if (a.length === b.length) {\n return !a.some((value, i) => value !== b[i]);\n }\n return false;\n}\nfunction optionalArrayValuesMatch(a, b) {\n if (!a && !b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n return arrayValuesMatch(a, b);\n}\n\nfunction isFullSegmentEncryption(method) {\n return method === 'AES-128' || method === 'AES-256' || method === 'AES-256-CTR';\n}\nfunction getAesModeFromFullSegmentMethod(method) {\n switch (method) {\n case 'AES-128':\n case 'AES-256':\n return DecrypterAesMode.cbc;\n case 'AES-256-CTR':\n return DecrypterAesMode.ctr;\n default:\n throw new Error(`invalid full segment method ${method}`);\n }\n}\n\nfunction base64Decode(base64encodedStr) {\n return Uint8Array.from(atob(base64encodedStr), c => c.charCodeAt(0));\n}\n\n// breaking up those two types in order to clarify what is happening in the decoding path.\n\n// http://stackoverflow.com/questions/8936984/uint8array-to-string-in-javascript/22373197\n// http://www.onicos.com/staff/iz/amuse/javascript/expert/utf.txt\n/* utf.js - UTF-8 <=> UTF-16 convertion\n *\n * Copyright (C) 1999 Masanao Izumo \n * Version: 1.0\n * LastModified: Dec 25 1999\n * This library is free. You can redistribute it and/or modify it.\n */\n\nfunction strToUtf8array(str) {\n return Uint8Array.from(unescape(encodeURIComponent(str)), c => c.charCodeAt(0));\n}\n\nfunction getKeyIdBytes(str) {\n const keyIdbytes = strToUtf8array(str).subarray(0, 16);\n const paddedkeyIdbytes = new Uint8Array(16);\n paddedkeyIdbytes.set(keyIdbytes, 16 - keyIdbytes.length);\n return paddedkeyIdbytes;\n}\nfunction changeEndianness(keyId) {\n const swap = function swap(array, from, to) {\n const cur = array[from];\n array[from] = array[to];\n array[to] = cur;\n };\n swap(keyId, 0, 3);\n swap(keyId, 1, 2);\n swap(keyId, 4, 5);\n swap(keyId, 6, 7);\n}\nfunction convertDataUriToArrayBytes(uri) {\n // data:[\n const colonsplit = uri.split(':');\n let keydata = null;\n if (colonsplit[0] === 'data' && colonsplit.length === 2) {\n const semicolonsplit = colonsplit[1].split(';');\n const commasplit = semicolonsplit[semicolonsplit.length - 1].split(',');\n if (commasplit.length === 2) {\n const isbase64 = commasplit[0] === 'base64';\n const data = commasplit[1];\n if (isbase64) {\n semicolonsplit.splice(-1, 1); // remove from processing\n keydata = base64Decode(data);\n } else {\n keydata = getKeyIdBytes(data);\n }\n }\n }\n return keydata;\n}\n\n/** returns `undefined` is `self` is missing, e.g. in node */\nconst optionalSelf = typeof self !== 'undefined' ? self : undefined;\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Navigator/requestMediaKeySystemAccess\n */\nvar KeySystems = {\n CLEARKEY: \"org.w3.clearkey\",\n FAIRPLAY: \"com.apple.fps\",\n PLAYREADY: \"com.microsoft.playready\",\n WIDEVINE: \"com.widevine.alpha\"\n};\n\n// Playlist #EXT-X-KEY KEYFORMAT values\nvar KeySystemFormats = {\n CLEARKEY: \"org.w3.clearkey\",\n FAIRPLAY: \"com.apple.streamingkeydelivery\",\n PLAYREADY: \"com.microsoft.playready\",\n WIDEVINE: \"urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed\"\n};\nfunction keySystemFormatToKeySystemDomain(format) {\n switch (format) {\n case KeySystemFormats.FAIRPLAY:\n return KeySystems.FAIRPLAY;\n case KeySystemFormats.PLAYREADY:\n return KeySystems.PLAYREADY;\n case KeySystemFormats.WIDEVINE:\n return KeySystems.WIDEVINE;\n case KeySystemFormats.CLEARKEY:\n return KeySystems.CLEARKEY;\n }\n}\nfunction keySystemDomainToKeySystemFormat(keySystem) {\n switch (keySystem) {\n case KeySystems.FAIRPLAY:\n return KeySystemFormats.FAIRPLAY;\n case KeySystems.PLAYREADY:\n return KeySystemFormats.PLAYREADY;\n case KeySystems.WIDEVINE:\n return KeySystemFormats.WIDEVINE;\n case KeySystems.CLEARKEY:\n return KeySystemFormats.CLEARKEY;\n }\n}\nfunction getKeySystemsForConfig(config) {\n const {\n drmSystems,\n widevineLicenseUrl\n } = config;\n const keySystemsToAttempt = drmSystems ? [KeySystems.FAIRPLAY, KeySystems.WIDEVINE, KeySystems.PLAYREADY, KeySystems.CLEARKEY].filter(keySystem => !!drmSystems[keySystem]) : [];\n if (!keySystemsToAttempt[KeySystems.WIDEVINE] && widevineLicenseUrl) {\n keySystemsToAttempt.push(KeySystems.WIDEVINE);\n }\n return keySystemsToAttempt;\n}\nconst requestMediaKeySystemAccess = function (_optionalSelf$navigat) {\n if (optionalSelf != null && (_optionalSelf$navigat = optionalSelf.navigator) != null && _optionalSelf$navigat.requestMediaKeySystemAccess) {\n return self.navigator.requestMediaKeySystemAccess.bind(self.navigator);\n } else {\n return null;\n }\n}();\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/MediaKeySystemConfiguration\n */\nfunction getSupportedMediaKeySystemConfigurations(keySystem, audioCodecs, videoCodecs, drmSystemOptions) {\n let initDataTypes;\n switch (keySystem) {\n case KeySystems.FAIRPLAY:\n initDataTypes = ['cenc', 'sinf'];\n break;\n case KeySystems.WIDEVINE:\n case KeySystems.PLAYREADY:\n initDataTypes = ['cenc'];\n break;\n case KeySystems.CLEARKEY:\n initDataTypes = ['cenc', 'keyids'];\n break;\n default:\n throw new Error(`Unknown key-system: ${keySystem}`);\n }\n return createMediaKeySystemConfigurations(initDataTypes, audioCodecs, videoCodecs, drmSystemOptions);\n}\nfunction createMediaKeySystemConfigurations(initDataTypes, audioCodecs, videoCodecs, drmSystemOptions) {\n const baseConfig = {\n initDataTypes: initDataTypes,\n persistentState: drmSystemOptions.persistentState || 'optional',\n distinctiveIdentifier: drmSystemOptions.distinctiveIdentifier || 'optional',\n sessionTypes: drmSystemOptions.sessionTypes || [drmSystemOptions.sessionType || 'temporary'],\n audioCapabilities: audioCodecs.map(codec => ({\n contentType: `audio/mp4; codecs=${codec}`,\n robustness: drmSystemOptions.audioRobustness || '',\n encryptionScheme: drmSystemOptions.audioEncryptionScheme || null\n })),\n videoCapabilities: videoCodecs.map(codec => ({\n contentType: `video/mp4; codecs=${codec}`,\n robustness: drmSystemOptions.videoRobustness || '',\n encryptionScheme: drmSystemOptions.videoEncryptionScheme || null\n }))\n };\n return [baseConfig];\n}\nfunction isPersistentSessionType(drmSystemOptions) {\n var _drmSystemOptions$ses;\n return !!drmSystemOptions && (drmSystemOptions.sessionType === 'persistent-license' || !!((_drmSystemOptions$ses = drmSystemOptions.sessionTypes) != null && _drmSystemOptions$ses.some(type => type === 'persistent-license')));\n}\nfunction parsePlayReadyWRM(keyBytes) {\n const keyBytesUtf16 = new Uint16Array(keyBytes.buffer, keyBytes.byteOffset, keyBytes.byteLength / 2);\n const keyByteStr = String.fromCharCode.apply(null, Array.from(keyBytesUtf16));\n\n // Parse Playready WRMHeader XML\n const xmlKeyBytes = keyByteStr.substring(keyByteStr.indexOf('<'), keyByteStr.length);\n const parser = new DOMParser();\n const xmlDoc = parser.parseFromString(xmlKeyBytes, 'text/xml');\n const keyData = xmlDoc.getElementsByTagName('KID')[0];\n if (keyData) {\n const keyId = keyData.childNodes[0] ? keyData.childNodes[0].nodeValue : keyData.getAttribute('VALUE');\n if (keyId) {\n const keyIdArray = base64Decode(keyId).subarray(0, 16);\n // KID value in PRO is a base64-encoded little endian GUID interpretation of UUID\n // KID value in ‘tenc’ is a big endian UUID GUID interpretation of UUID\n changeEndianness(keyIdArray);\n return keyIdArray;\n }\n }\n return null;\n}\n\nlet keyUriToKeyIdMap = {};\nclass LevelKey {\n static clearKeyUriToKeyIdMap() {\n keyUriToKeyIdMap = {};\n }\n static setKeyIdForUri(uri, keyId) {\n keyUriToKeyIdMap[uri] = keyId;\n }\n static addKeyIdForUri(uri) {\n const val = Object.keys(keyUriToKeyIdMap).length % Number.MAX_SAFE_INTEGER;\n const keyId = new Uint8Array(16);\n const dv = new DataView(keyId.buffer, 12, 4); // Just set the last 4 bytes\n dv.setUint32(0, val);\n keyUriToKeyIdMap[uri] = keyId;\n return keyId;\n }\n constructor(method, uri, format, formatversions = [1], iv = null, keyId) {\n this.uri = void 0;\n this.method = void 0;\n this.keyFormat = void 0;\n this.keyFormatVersions = void 0;\n this.encrypted = void 0;\n this.isCommonEncryption = void 0;\n this.iv = null;\n this.key = null;\n this.keyId = null;\n this.pssh = null;\n this.method = method;\n this.uri = uri;\n this.keyFormat = format;\n this.keyFormatVersions = formatversions;\n this.iv = iv;\n this.encrypted = method ? method !== 'NONE' : false;\n this.isCommonEncryption = this.encrypted && !isFullSegmentEncryption(method);\n if (keyId != null && keyId.startsWith('0x')) {\n this.keyId = new Uint8Array(hexToArrayBuffer(keyId));\n }\n }\n matches(key) {\n return key.uri === this.uri && key.method === this.method && key.encrypted === this.encrypted && key.keyFormat === this.keyFormat && arrayValuesMatch(key.keyFormatVersions, this.keyFormatVersions) && optionalArrayValuesMatch(key.iv, this.iv) && optionalArrayValuesMatch(key.keyId, this.keyId);\n }\n isSupported() {\n // If it's Segment encryption or No encryption, just select that key system\n if (this.method) {\n if (isFullSegmentEncryption(this.method) || this.method === 'NONE') {\n return true;\n }\n if (this.keyFormat === 'identity') {\n // Maintain support for clear SAMPLE-AES with MPEG-3 TS\n return this.method === 'SAMPLE-AES';\n } else {\n switch (this.keyFormat) {\n case KeySystemFormats.FAIRPLAY:\n case KeySystemFormats.WIDEVINE:\n case KeySystemFormats.PLAYREADY:\n case KeySystemFormats.CLEARKEY:\n return ['SAMPLE-AES', 'SAMPLE-AES-CENC', 'SAMPLE-AES-CTR'].indexOf(this.method) !== -1;\n }\n }\n }\n return false;\n }\n getDecryptData(sn, levelKeys) {\n if (!this.encrypted || !this.uri) {\n return null;\n }\n if (isFullSegmentEncryption(this.method)) {\n let iv = this.iv;\n if (!iv) {\n if (typeof sn !== 'number') {\n // We are fetching decryption data for a initialization segment\n // If the segment was encrypted with AES-128/256\n // It must have an IV defined. We cannot substitute the Segment Number in.\n logger.warn(`missing IV for initialization segment with method=\"${this.method}\" - compliance issue`);\n\n // Explicitly set sn to resulting value from implicit conversions 'initSegment' values for IV generation.\n sn = 0;\n }\n iv = createInitializationVector(sn);\n }\n const decryptdata = new LevelKey(this.method, this.uri, 'identity', this.keyFormatVersions, iv);\n return decryptdata;\n }\n if (this.keyId) {\n // Handle case where key id is changed in KEY_LOADING event handler #7542#issuecomment-3305203929\n const assignedKeyId = keyUriToKeyIdMap[this.uri];\n if (assignedKeyId && !arrayValuesMatch(this.keyId, assignedKeyId)) {\n LevelKey.setKeyIdForUri(this.uri, this.keyId);\n }\n if (this.pssh) {\n return this;\n }\n }\n\n // Key bytes are signalled the KEYID attribute, typically only found on WideVine KEY tags\n // Initialize keyId if possible\n const keyBytes = convertDataUriToArrayBytes(this.uri);\n if (keyBytes) {\n switch (this.keyFormat) {\n case KeySystemFormats.WIDEVINE:\n // Setting `pssh` on this LevelKey/DecryptData allows HLS.js to generate a session using\n // the playlist-key before the \"encrypted\" event. (Comment out to only use \"encrypted\" path.)\n this.pssh = keyBytes;\n // In case of Widevine, if KEYID is not in the playlist, assume only two fields in the pssh KEY tag URI.\n if (!this.keyId) {\n const results = parseMultiPssh(keyBytes.buffer);\n if (results.length) {\n var _psshData$kids;\n const psshData = results[0];\n this.keyId = (_psshData$kids = psshData.kids) != null && _psshData$kids.length ? psshData.kids[0] : null;\n }\n }\n if (!this.keyId) {\n this.keyId = getKeyIdFromPlayReadyKey(levelKeys);\n }\n break;\n case KeySystemFormats.PLAYREADY:\n {\n const PlayReadyKeySystemUUID = new Uint8Array([0x9a, 0x04, 0xf0, 0x79, 0x98, 0x40, 0x42, 0x86, 0xab, 0x92, 0xe6, 0x5b, 0xe0, 0x88, 0x5f, 0x95]);\n\n // Setting `pssh` on this LevelKey/DecryptData allows HLS.js to generate a session using\n // the playlist-key before the \"encrypted\" event. (Comment out to only use \"encrypted\" path.)\n this.pssh = mp4pssh(PlayReadyKeySystemUUID, null, keyBytes);\n this.keyId = parsePlayReadyWRM(keyBytes);\n break;\n }\n default:\n {\n let keydata = keyBytes.subarray(0, 16);\n if (keydata.length !== 16) {\n const padded = new Uint8Array(16);\n padded.set(keydata, 16 - keydata.length);\n keydata = padded;\n }\n this.keyId = keydata;\n break;\n }\n }\n }\n\n // Default behavior: get keyId from other KEY tag or URI lookup\n if (!this.keyId || this.keyId.byteLength !== 16) {\n let keyId;\n keyId = getKeyIdFromWidevineKey(levelKeys);\n if (!keyId) {\n keyId = getKeyIdFromPlayReadyKey(levelKeys);\n if (!keyId) {\n keyId = keyUriToKeyIdMap[this.uri];\n }\n }\n if (keyId) {\n this.keyId = keyId;\n LevelKey.setKeyIdForUri(this.uri, keyId);\n }\n }\n return this;\n }\n}\nfunction getKeyIdFromWidevineKey(levelKeys) {\n const widevineKey = levelKeys == null ? void 0 : levelKeys[KeySystemFormats.WIDEVINE];\n if (widevineKey) {\n return widevineKey.keyId;\n }\n return null;\n}\nfunction getKeyIdFromPlayReadyKey(levelKeys) {\n const playReadyKey = levelKeys == null ? void 0 : levelKeys[KeySystemFormats.PLAYREADY];\n if (playReadyKey) {\n const playReadyKeyBytes = convertDataUriToArrayBytes(playReadyKey.uri);\n if (playReadyKeyBytes) {\n return parsePlayReadyWRM(playReadyKeyBytes);\n }\n }\n return null;\n}\nfunction createInitializationVector(segmentNumber) {\n const uint8View = new Uint8Array(16);\n for (let i = 12; i < 16; i++) {\n uint8View[i] = segmentNumber >> 8 * (15 - i) & 0xff;\n }\n return uint8View;\n}\n\nconst MASTER_PLAYLIST_REGEX = /#EXT-X-STREAM-INF:([^\\r\\n]*)(?:[\\r\\n](?:#[^\\r\\n]*)?)*([^\\r\\n]+)|#EXT-X-(SESSION-DATA|SESSION-KEY|DEFINE|CONTENT-STEERING|START):([^\\r\\n]*)[\\r\\n]+/g;\nconst MASTER_PLAYLIST_MEDIA_REGEX = /#EXT-X-MEDIA:(.*)/g;\nconst IS_MEDIA_PLAYLIST = /^#EXT(?:INF|-X-TARGETDURATION):/m; // Handle empty Media Playlist (first EXTINF not signaled, but TARGETDURATION present)\n\nconst LEVEL_PLAYLIST_REGEX_FAST = new RegExp([/#EXTINF:\\s*(\\d*(?:\\.\\d+)?)(?:,(.*)\\s+)?/.source,\n// duration (#EXTINF:,), group 1 => duration, group 2 => title\n/(?!#) *(\\S[^\\r\\n]*)/.source,\n// segment URI, group 3 => the URI (note newline is not eaten)\n/#.*/.source // All other non-segment oriented tags will match with all groups empty\n].join('|'), 'g');\nconst LEVEL_PLAYLIST_REGEX_SLOW = new RegExp([/#EXT-X-(PROGRAM-DATE-TIME|BYTERANGE|DATERANGE|DEFINE|KEY|MAP|PART|PART-INF|PLAYLIST-TYPE|PRELOAD-HINT|RENDITION-REPORT|SERVER-CONTROL|SKIP|START):(.+)/.source, /#EXT-X-(BITRATE|DISCONTINUITY-SEQUENCE|MEDIA-SEQUENCE|TARGETDURATION|VERSION): *(\\d+)/.source, /#EXT-X-(DISCONTINUITY|ENDLIST|GAP|INDEPENDENT-SEGMENTS)/.source, /(#)([^:]*):(.*)/.source, /(#)(.*)(?:.*)\\r?\\n?/.source].join('|'));\nclass M3U8Parser {\n static findGroup(groups, mediaGroupId) {\n for (let i = 0; i < groups.length; i++) {\n const group = groups[i];\n if (group.id === mediaGroupId) {\n return group;\n }\n }\n }\n static resolve(url, baseUrl) {\n return urlToolkitExports.buildAbsoluteURL(baseUrl, url, {\n alwaysNormalize: true\n });\n }\n static isMediaPlaylist(str) {\n return IS_MEDIA_PLAYLIST.test(str);\n }\n static parseMasterPlaylist(string, baseurl) {\n const hasVariableRefs = hasVariableReferences(string) ;\n const parsed = {\n contentSteering: null,\n levels: [],\n playlistParsingError: null,\n sessionData: null,\n sessionKeys: null,\n startTimeOffset: null,\n variableList: null,\n hasVariableRefs\n };\n const levelsWithKnownCodecs = [];\n MASTER_PLAYLIST_REGEX.lastIndex = 0;\n if (!string.startsWith('#EXTM3U')) {\n parsed.playlistParsingError = new Error('no EXTM3U delimiter');\n return parsed;\n }\n let result;\n while ((result = MASTER_PLAYLIST_REGEX.exec(string)) != null) {\n if (result[1]) {\n var _level$unknownCodecs;\n // '#EXT-X-STREAM-INF' is found, parse level tag in group 1\n const attrs = new AttrList(result[1], parsed);\n const uri = substituteVariables(parsed, result[2]) ;\n const level = {\n attrs,\n bitrate: attrs.decimalInteger('BANDWIDTH') || attrs.decimalInteger('AVERAGE-BANDWIDTH'),\n name: attrs.NAME,\n url: M3U8Parser.resolve(uri, baseurl)\n };\n const resolution = attrs.decimalResolution('RESOLUTION');\n if (resolution) {\n level.width = resolution.width;\n level.height = resolution.height;\n }\n setCodecs(attrs.CODECS, level);\n const supplementalCodecs = attrs['SUPPLEMENTAL-CODECS'];\n if (supplementalCodecs) {\n level.supplemental = {};\n setCodecs(supplementalCodecs, level.supplemental);\n }\n if (!((_level$unknownCodecs = level.unknownCodecs) != null && _level$unknownCodecs.length)) {\n levelsWithKnownCodecs.push(level);\n }\n parsed.levels.push(level);\n } else if (result[3]) {\n const tag = result[3];\n const attributes = result[4];\n switch (tag) {\n case 'SESSION-DATA':\n {\n // #EXT-X-SESSION-DATA\n const sessionAttrs = new AttrList(attributes, parsed);\n const dataId = sessionAttrs['DATA-ID'];\n if (dataId) {\n if (parsed.sessionData === null) {\n parsed.sessionData = {};\n }\n parsed.sessionData[dataId] = sessionAttrs;\n }\n break;\n }\n case 'SESSION-KEY':\n {\n // #EXT-X-SESSION-KEY\n const sessionKey = parseKey(attributes, baseurl, parsed);\n if (sessionKey.encrypted && sessionKey.isSupported()) {\n if (parsed.sessionKeys === null) {\n parsed.sessionKeys = [];\n }\n parsed.sessionKeys.push(sessionKey);\n } else {\n logger.warn(`[Keys] Ignoring invalid EXT-X-SESSION-KEY tag: \"${attributes}\"`);\n }\n break;\n }\n case 'DEFINE':\n {\n // #EXT-X-DEFINE\n {\n const variableAttributes = new AttrList(attributes, parsed);\n addVariableDefinition(parsed, variableAttributes, baseurl);\n }\n break;\n }\n case 'CONTENT-STEERING':\n {\n // #EXT-X-CONTENT-STEERING\n const contentSteeringAttributes = new AttrList(attributes, parsed);\n parsed.contentSteering = {\n uri: M3U8Parser.resolve(contentSteeringAttributes['SERVER-URI'], baseurl),\n pathwayId: contentSteeringAttributes['PATHWAY-ID'] || '.'\n };\n break;\n }\n case 'START':\n {\n // #EXT-X-START\n parsed.startTimeOffset = parseStartTimeOffset(attributes);\n break;\n }\n }\n }\n }\n // Filter out levels with unknown codecs if it does not remove all levels\n const stripUnknownCodecLevels = levelsWithKnownCodecs.length > 0 && levelsWithKnownCodecs.length < parsed.levels.length;\n parsed.levels = stripUnknownCodecLevels ? levelsWithKnownCodecs : parsed.levels;\n if (parsed.levels.length === 0) {\n parsed.playlistParsingError = new Error('no levels found in manifest');\n }\n return parsed;\n }\n static parseMasterPlaylistMedia(string, baseurl, parsed) {\n let result;\n const results = {};\n const levels = parsed.levels;\n const groupsByType = {\n AUDIO: levels.map(level => ({\n id: level.attrs.AUDIO,\n audioCodec: level.audioCodec\n })),\n SUBTITLES: levels.map(level => ({\n id: level.attrs.SUBTITLES,\n textCodec: level.textCodec\n })),\n 'CLOSED-CAPTIONS': []\n };\n let id = 0;\n MASTER_PLAYLIST_MEDIA_REGEX.lastIndex = 0;\n while ((result = MASTER_PLAYLIST_MEDIA_REGEX.exec(string)) !== null) {\n const attrs = new AttrList(result[1], parsed);\n const type = attrs.TYPE;\n if (type) {\n const groups = groupsByType[type];\n const medias = results[type] || [];\n results[type] = medias;\n const lang = attrs.LANGUAGE;\n const assocLang = attrs['ASSOC-LANGUAGE'];\n const channels = attrs.CHANNELS;\n const characteristics = attrs.CHARACTERISTICS;\n const instreamId = attrs['INSTREAM-ID'];\n const media = {\n attrs,\n bitrate: 0,\n id: id++,\n groupId: attrs['GROUP-ID'] || '',\n name: attrs.NAME || lang || '',\n type,\n default: attrs.bool('DEFAULT'),\n autoselect: attrs.bool('AUTOSELECT'),\n forced: attrs.bool('FORCED'),\n lang,\n url: attrs.URI ? M3U8Parser.resolve(attrs.URI, baseurl) : ''\n };\n if (assocLang) {\n media.assocLang = assocLang;\n }\n if (channels) {\n media.channels = channels;\n }\n if (characteristics) {\n media.characteristics = characteristics;\n }\n if (instreamId) {\n media.instreamId = instreamId;\n }\n if (groups != null && groups.length) {\n // If there are audio or text groups signalled in the manifest, let's look for a matching codec string for this track\n // If we don't find the track signalled, lets use the first audio groups codec we have\n // Acting as a best guess\n const groupCodec = M3U8Parser.findGroup(groups, media.groupId) || groups[0];\n assignCodec(media, groupCodec, 'audioCodec');\n assignCodec(media, groupCodec, 'textCodec');\n }\n medias.push(media);\n }\n }\n return results;\n }\n static parseLevelPlaylist(string, baseurl, id, type, levelUrlId, multivariantVariableList) {\n var _LEVEL_PLAYLIST_REGEX;\n const base = {\n url: baseurl\n };\n const level = new LevelDetails(baseurl);\n const fragments = level.fragments;\n const programDateTimes = [];\n // The most recent init segment seen (applies to all subsequent segments)\n let currentInitSegment = null;\n let currentSN = 0;\n let currentPart = 0;\n let totalduration = 0;\n let discontinuityCounter = 0;\n let currentBitrate = 0;\n let prevFrag = null;\n let frag = new Fragment(type, base);\n let result;\n let i;\n let levelkeys;\n let firstPdtIndex = -1;\n let createNextFrag = false;\n let nextByteRange = null;\n let serverControlAttrs;\n LEVEL_PLAYLIST_REGEX_FAST.lastIndex = 0;\n level.m3u8 = string;\n level.hasVariableRefs = hasVariableReferences(string) ;\n if (((_LEVEL_PLAYLIST_REGEX = LEVEL_PLAYLIST_REGEX_FAST.exec(string)) == null ? void 0 : _LEVEL_PLAYLIST_REGEX[0]) !== '#EXTM3U') {\n level.playlistParsingError = new Error('Missing format identifier #EXTM3U');\n return level;\n }\n while ((result = LEVEL_PLAYLIST_REGEX_FAST.exec(string)) !== null) {\n if (createNextFrag) {\n createNextFrag = false;\n frag = new Fragment(type, base);\n // setup the next fragment for part loading\n frag.playlistOffset = totalduration;\n frag.setStart(totalduration);\n frag.sn = currentSN;\n frag.cc = discontinuityCounter;\n if (currentBitrate) {\n frag.bitrate = currentBitrate;\n }\n frag.level = id;\n if (currentInitSegment) {\n frag.initSegment = currentInitSegment;\n if (currentInitSegment.rawProgramDateTime) {\n frag.rawProgramDateTime = currentInitSegment.rawProgramDateTime;\n currentInitSegment.rawProgramDateTime = null;\n }\n if (nextByteRange) {\n frag.setByteRange(nextByteRange);\n nextByteRange = null;\n }\n }\n }\n const duration = result[1];\n if (duration) {\n // INF\n frag.duration = parseFloat(duration);\n // avoid sliced strings https://github.com/video-dev/hls.js/issues/939\n const title = (' ' + result[2]).slice(1);\n frag.title = title || null;\n frag.tagList.push(title ? ['INF', duration, title] : ['INF', duration]);\n } else if (result[3]) {\n // url\n if (isFiniteNumber(frag.duration)) {\n frag.playlistOffset = totalduration;\n frag.setStart(totalduration);\n if (levelkeys) {\n setFragLevelKeys(frag, levelkeys, level);\n }\n frag.sn = currentSN;\n frag.level = id;\n frag.cc = discontinuityCounter;\n fragments.push(frag);\n // avoid sliced strings https://github.com/video-dev/hls.js/issues/939\n const uri = (' ' + result[3]).slice(1);\n frag.relurl = substituteVariables(level, uri) ;\n assignProgramDateTime(frag, prevFrag, programDateTimes);\n prevFrag = frag;\n totalduration += frag.duration;\n currentSN++;\n currentPart = 0;\n createNextFrag = true;\n }\n } else {\n result = result[0].match(LEVEL_PLAYLIST_REGEX_SLOW);\n if (!result) {\n logger.warn('No matches on slow regex match for level playlist!');\n continue;\n }\n for (i = 1; i < result.length; i++) {\n if (result[i] !== undefined) {\n break;\n }\n }\n\n // avoid sliced strings https://github.com/video-dev/hls.js/issues/939\n const tag = (' ' + result[i]).slice(1);\n const value1 = (' ' + result[i + 1]).slice(1);\n const value2 = result[i + 2] ? (' ' + result[i + 2]).slice(1) : null;\n switch (tag) {\n case 'BYTERANGE':\n if (prevFrag) {\n frag.setByteRange(value1, prevFrag);\n } else {\n frag.setByteRange(value1);\n }\n break;\n case 'PROGRAM-DATE-TIME':\n // avoid sliced strings https://github.com/video-dev/hls.js/issues/939\n frag.rawProgramDateTime = value1;\n frag.tagList.push(['PROGRAM-DATE-TIME', value1]);\n if (firstPdtIndex === -1) {\n firstPdtIndex = fragments.length;\n }\n break;\n case 'PLAYLIST-TYPE':\n if (level.type) {\n assignMultipleMediaPlaylistTagOccuranceError(level, tag, result);\n }\n level.type = value1.toUpperCase();\n break;\n case 'MEDIA-SEQUENCE':\n if (level.startSN !== 0) {\n assignMultipleMediaPlaylistTagOccuranceError(level, tag, result);\n } else if (fragments.length > 0) {\n assignMustAppearBeforeSegmentsError(level, tag, result);\n }\n currentSN = level.startSN = parseInt(value1);\n break;\n case 'SKIP':\n {\n if (level.skippedSegments) {\n assignMultipleMediaPlaylistTagOccuranceError(level, tag, result);\n }\n const skipAttrs = new AttrList(value1, level);\n const skippedSegments = skipAttrs.decimalInteger('SKIPPED-SEGMENTS');\n if (isFiniteNumber(skippedSegments)) {\n level.skippedSegments += skippedSegments;\n // This will result in fragments[] containing undefined values, which we will fill in with `mergeDetails`\n for (let _i = skippedSegments; _i--;) {\n fragments.push(null);\n }\n currentSN += skippedSegments;\n }\n const recentlyRemovedDateranges = skipAttrs.enumeratedString('RECENTLY-REMOVED-DATERANGES');\n if (recentlyRemovedDateranges) {\n level.recentlyRemovedDateranges = (level.recentlyRemovedDateranges || []).concat(recentlyRemovedDateranges.split('\\t'));\n }\n break;\n }\n case 'TARGETDURATION':\n if (level.targetduration !== 0) {\n assignMultipleMediaPlaylistTagOccuranceError(level, tag, result);\n }\n level.targetduration = Math.max(parseInt(value1), 1);\n break;\n case 'VERSION':\n if (level.version !== null) {\n assignMultipleMediaPlaylistTagOccuranceError(level, tag, result);\n }\n level.version = parseInt(value1);\n break;\n case 'INDEPENDENT-SEGMENTS':\n break;\n case 'ENDLIST':\n if (!level.live) {\n assignMultipleMediaPlaylistTagOccuranceError(level, tag, result);\n }\n level.live = false;\n break;\n case '#':\n if (value1 || value2) {\n frag.tagList.push(value2 ? [value1, value2] : [value1]);\n }\n break;\n case 'DISCONTINUITY':\n discontinuityCounter++;\n frag.tagList.push(['DIS']);\n break;\n case 'GAP':\n frag.gap = true;\n frag.tagList.push([tag]);\n break;\n case 'BITRATE':\n frag.tagList.push([tag, value1]);\n currentBitrate = parseInt(value1) * 1000;\n if (isFiniteNumber(currentBitrate)) {\n frag.bitrate = currentBitrate;\n } else {\n currentBitrate = 0;\n }\n break;\n case 'DATERANGE':\n {\n const dateRangeAttr = new AttrList(value1, level);\n const dateRange = new DateRange(dateRangeAttr, level.dateRanges[dateRangeAttr.ID], level.dateRangeTagCount);\n level.dateRangeTagCount++;\n if (dateRange.isValid || level.skippedSegments) {\n level.dateRanges[dateRange.id] = dateRange;\n } else {\n logger.warn(`Ignoring invalid DATERANGE tag: \"${value1}\"`);\n }\n // Add to fragment tag list for backwards compatibility (< v1.2.0)\n frag.tagList.push(['EXT-X-DATERANGE', value1]);\n break;\n }\n case 'DEFINE':\n {\n {\n const variableAttributes = new AttrList(value1, level);\n if ('IMPORT' in variableAttributes) {\n importVariableDefinition(level, variableAttributes, multivariantVariableList);\n } else {\n addVariableDefinition(level, variableAttributes, baseurl);\n }\n }\n break;\n }\n case 'DISCONTINUITY-SEQUENCE':\n if (level.startCC !== 0) {\n assignMultipleMediaPlaylistTagOccuranceError(level, tag, result);\n } else if (fragments.length > 0) {\n assignMustAppearBeforeSegmentsError(level, tag, result);\n }\n level.startCC = discontinuityCounter = parseInt(value1);\n break;\n case 'KEY':\n {\n const levelKey = parseKey(value1, baseurl, level);\n if (levelKey.isSupported()) {\n if (levelKey.method === 'NONE') {\n levelkeys = undefined;\n break;\n }\n if (!levelkeys) {\n levelkeys = {};\n }\n const currentKey = levelkeys[levelKey.keyFormat];\n // Ignore duplicate playlist KEY tags\n if (!(currentKey != null && currentKey.matches(levelKey))) {\n if (currentKey) {\n levelkeys = _extends({}, levelkeys);\n }\n levelkeys[levelKey.keyFormat] = levelKey;\n }\n } else {\n logger.warn(`[Keys] Ignoring unsupported EXT-X-KEY tag: \"${value1}\"${'' }`);\n }\n break;\n }\n case 'START':\n level.startTimeOffset = parseStartTimeOffset(value1);\n break;\n case 'MAP':\n {\n const mapAttrs = new AttrList(value1, level);\n if (frag.duration) {\n // Initial segment tag is after segment duration tag.\n // #EXTINF: 6.0\n // #EXT-X-MAP:URI=\"init.mp4\n const init = new Fragment(type, base);\n setInitSegment(init, mapAttrs, id, levelkeys);\n currentInitSegment = init;\n frag.initSegment = currentInitSegment;\n if (currentInitSegment.rawProgramDateTime && !frag.rawProgramDateTime) {\n frag.rawProgramDateTime = currentInitSegment.rawProgramDateTime;\n }\n } else {\n // Initial segment tag is before segment duration tag\n // Handle case where EXT-X-MAP is declared after EXT-X-BYTERANGE\n const end = frag.byteRangeEndOffset;\n if (end) {\n const start = frag.byteRangeStartOffset;\n nextByteRange = `${end - start}@${start}`;\n } else {\n nextByteRange = null;\n }\n setInitSegment(frag, mapAttrs, id, levelkeys);\n currentInitSegment = frag;\n createNextFrag = true;\n }\n currentInitSegment.cc = discontinuityCounter;\n break;\n }\n case 'SERVER-CONTROL':\n {\n if (serverControlAttrs) {\n assignMultipleMediaPlaylistTagOccuranceError(level, tag, result);\n }\n serverControlAttrs = new AttrList(value1);\n level.canBlockReload = serverControlAttrs.bool('CAN-BLOCK-RELOAD');\n level.canSkipUntil = serverControlAttrs.optionalFloat('CAN-SKIP-UNTIL', 0);\n level.canSkipDateRanges = level.canSkipUntil > 0 && serverControlAttrs.bool('CAN-SKIP-DATERANGES');\n level.partHoldBack = serverControlAttrs.optionalFloat('PART-HOLD-BACK', 0);\n level.holdBack = serverControlAttrs.optionalFloat('HOLD-BACK', 0);\n break;\n }\n case 'PART-INF':\n {\n if (level.partTarget) {\n assignMultipleMediaPlaylistTagOccuranceError(level, tag, result);\n }\n const partInfAttrs = new AttrList(value1);\n level.partTarget = partInfAttrs.decimalFloatingPoint('PART-TARGET');\n break;\n }\n case 'PART':\n {\n let partList = level.partList;\n if (!partList) {\n partList = level.partList = [];\n }\n const previousFragmentPart = currentPart > 0 ? partList[partList.length - 1] : undefined;\n const index = currentPart++;\n const partAttrs = new AttrList(value1, level);\n const part = new Part(partAttrs, frag, base, index, previousFragmentPart);\n partList.push(part);\n frag.duration += part.duration;\n break;\n }\n case 'PRELOAD-HINT':\n {\n const preloadHintAttrs = new AttrList(value1, level);\n level.preloadHint = preloadHintAttrs;\n break;\n }\n case 'RENDITION-REPORT':\n {\n const renditionReportAttrs = new AttrList(value1, level);\n level.renditionReports = level.renditionReports || [];\n level.renditionReports.push(renditionReportAttrs);\n break;\n }\n default:\n logger.warn(`line parsed but not handled: ${result}`);\n break;\n }\n }\n }\n if (prevFrag && !prevFrag.relurl) {\n fragments.pop();\n totalduration -= prevFrag.duration;\n if (level.partList) {\n level.fragmentHint = prevFrag;\n }\n } else if (level.partList) {\n assignProgramDateTime(frag, prevFrag, programDateTimes);\n frag.cc = discontinuityCounter;\n level.fragmentHint = frag;\n if (levelkeys) {\n setFragLevelKeys(frag, levelkeys, level);\n }\n }\n if (!level.targetduration) {\n level.playlistParsingError = new Error(`Missing Target Duration`);\n }\n const fragmentLength = fragments.length;\n const firstFragment = fragments[0];\n const lastFragment = fragments[fragmentLength - 1];\n totalduration += level.skippedSegments * level.targetduration;\n if (totalduration > 0 && fragmentLength && lastFragment) {\n level.averagetargetduration = totalduration / fragmentLength;\n const lastSn = lastFragment.sn;\n level.endSN = lastSn !== 'initSegment' ? lastSn : 0;\n if (!level.live) {\n lastFragment.endList = true;\n }\n /**\n * Backfill any missing PDT values\n * \"If the first EXT-X-PROGRAM-DATE-TIME tag in a Playlist appears after\n * one or more Media Segment URIs, the client SHOULD extrapolate\n * backward from that tag (using EXTINF durations and/or media\n * timestamps) to associate dates with those segments.\"\n * We have already extrapolated forward, but all fragments up to the first instance of PDT do not have their PDTs\n * computed.\n */\n if (firstPdtIndex > 0) {\n backfillProgramDateTimes(fragments, firstPdtIndex);\n if (firstFragment) {\n programDateTimes.unshift(firstFragment);\n }\n }\n }\n if (level.fragmentHint) {\n totalduration += level.fragmentHint.duration;\n }\n level.totalduration = totalduration;\n if (programDateTimes.length && level.dateRangeTagCount && firstFragment) {\n mapDateRanges(programDateTimes, level);\n }\n level.endCC = discontinuityCounter;\n return level;\n }\n}\nfunction mapDateRanges(programDateTimes, details) {\n // Make sure DateRanges are mapped to a ProgramDateTime tag that applies a date to a segment that overlaps with its start date\n let programDateTimeCount = programDateTimes.length;\n if (!programDateTimeCount) {\n if (details.hasProgramDateTime) {\n const lastFragment = details.fragments[details.fragments.length - 1];\n programDateTimes.push(lastFragment);\n programDateTimeCount++;\n } else {\n // no segments with EXT-X-PROGRAM-DATE-TIME references in playlist history\n return;\n }\n }\n const lastProgramDateTime = programDateTimes[programDateTimeCount - 1];\n const playlistEnd = details.live ? Infinity : details.totalduration;\n const dateRangeIds = Object.keys(details.dateRanges);\n for (let i = dateRangeIds.length; i--;) {\n const dateRange = details.dateRanges[dateRangeIds[i]];\n const startDateTime = dateRange.startDate.getTime();\n dateRange.tagAnchor = lastProgramDateTime.ref;\n for (let j = programDateTimeCount; j--;) {\n var _programDateTimes$j;\n if (((_programDateTimes$j = programDateTimes[j]) == null ? void 0 : _programDateTimes$j.sn) < details.startSN) {\n break;\n }\n const fragIndex = findFragmentWithStartDate(details, startDateTime, programDateTimes, j, playlistEnd);\n if (fragIndex !== -1) {\n dateRange.tagAnchor = details.fragments[fragIndex].ref;\n break;\n }\n }\n }\n}\nfunction findFragmentWithStartDate(details, startDateTime, programDateTimes, index, endTime) {\n const pdtFragment = programDateTimes[index];\n if (pdtFragment) {\n // find matching range between PDT tags\n const pdtStart = pdtFragment.programDateTime;\n if (startDateTime >= pdtStart || index === 0) {\n var _programDateTimes;\n const durationBetweenPdt = (((_programDateTimes = programDateTimes[index + 1]) == null ? void 0 : _programDateTimes.start) || endTime) - pdtFragment.start;\n if (startDateTime <= pdtStart + durationBetweenPdt * 1000) {\n // map to fragment with date-time range\n const startIndex = programDateTimes[index].sn - details.startSN;\n if (startIndex < 0) {\n return -1;\n }\n const fragments = details.fragments;\n if (fragments.length > programDateTimes.length) {\n const endSegment = programDateTimes[index + 1] || fragments[fragments.length - 1];\n const endIndex = endSegment.sn - details.startSN;\n for (let i = endIndex; i > startIndex; i--) {\n const fragStartDateTime = fragments[i].programDateTime;\n if (startDateTime >= fragStartDateTime && startDateTime < fragStartDateTime + fragments[i].duration * 1000) {\n return i;\n }\n }\n }\n return startIndex;\n }\n }\n }\n return -1;\n}\nfunction parseKey(keyTagAttributes, baseurl, parsed) {\n var _keyAttrs$METHOD, _keyAttrs$KEYFORMAT;\n // https://tools.ietf.org/html/rfc8216#section-4.3.2.4\n const keyAttrs = new AttrList(keyTagAttributes, parsed);\n const decryptmethod = (_keyAttrs$METHOD = keyAttrs.METHOD) != null ? _keyAttrs$METHOD : '';\n const decrypturi = keyAttrs.URI;\n const decryptiv = keyAttrs.hexadecimalInteger('IV');\n const decryptkeyformatversions = keyAttrs.KEYFORMATVERSIONS;\n // From RFC: This attribute is OPTIONAL; its absence indicates an implicit value of \"identity\".\n const decryptkeyformat = (_keyAttrs$KEYFORMAT = keyAttrs.KEYFORMAT) != null ? _keyAttrs$KEYFORMAT : 'identity';\n if (decrypturi && keyAttrs.IV && !decryptiv) {\n logger.error(`Invalid IV: ${keyAttrs.IV}`);\n }\n // If decrypturi is a URI with a scheme, then baseurl will be ignored\n // No uri is allowed when METHOD is NONE\n const resolvedUri = decrypturi ? M3U8Parser.resolve(decrypturi, baseurl) : '';\n const keyFormatVersions = (decryptkeyformatversions ? decryptkeyformatversions : '1').split('/').map(Number).filter(Number.isFinite);\n return new LevelKey(decryptmethod, resolvedUri, decryptkeyformat, keyFormatVersions, decryptiv, keyAttrs.KEYID);\n}\nfunction parseStartTimeOffset(startAttributes) {\n const startAttrs = new AttrList(startAttributes);\n const startTimeOffset = startAttrs.decimalFloatingPoint('TIME-OFFSET');\n if (isFiniteNumber(startTimeOffset)) {\n return startTimeOffset;\n }\n return null;\n}\nfunction setCodecs(codecsAttributeValue, level) {\n let codecs = (codecsAttributeValue || '').split(/[ ,]+/).filter(c => c);\n ['video', 'audio', 'text'].forEach(type => {\n const filtered = codecs.filter(codec => isCodecType(codec, type));\n if (filtered.length) {\n // Comma separated list of all codecs for type\n level[`${type}Codec`] = filtered.map(c => c.split('/')[0]).join(',');\n // Remove known codecs so that only unknownCodecs are left after iterating through each type\n codecs = codecs.filter(codec => filtered.indexOf(codec) === -1);\n }\n });\n level.unknownCodecs = codecs;\n}\nfunction assignCodec(media, groupItem, codecProperty) {\n const codecValue = groupItem[codecProperty];\n if (codecValue) {\n media[codecProperty] = codecValue;\n }\n}\nfunction backfillProgramDateTimes(fragments, firstPdtIndex) {\n let fragPrev = fragments[firstPdtIndex];\n for (let i = firstPdtIndex; i--;) {\n const frag = fragments[i];\n // Exit on delta-playlist skipped segments\n if (!frag) {\n return;\n }\n frag.programDateTime = fragPrev.programDateTime - frag.duration * 1000;\n fragPrev = frag;\n }\n}\nfunction assignProgramDateTime(frag, prevFrag, programDateTimes) {\n if (frag.rawProgramDateTime) {\n programDateTimes.push(frag);\n } else if (prevFrag != null && prevFrag.programDateTime) {\n frag.programDateTime = prevFrag.endProgramDateTime;\n }\n}\nfunction setInitSegment(frag, mapAttrs, id, levelkeys) {\n frag.relurl = mapAttrs.URI;\n if (mapAttrs.BYTERANGE) {\n frag.setByteRange(mapAttrs.BYTERANGE);\n }\n frag.level = id;\n frag.sn = 'initSegment';\n if (levelkeys) {\n frag.levelkeys = levelkeys;\n }\n frag.initSegment = null;\n}\nfunction setFragLevelKeys(frag, levelkeys, level) {\n frag.levelkeys = levelkeys;\n const {\n encryptedFragments\n } = level;\n if ((!encryptedFragments.length || encryptedFragments[encryptedFragments.length - 1].levelkeys !== levelkeys) && Object.keys(levelkeys).some(format => levelkeys[format].isCommonEncryption)) {\n encryptedFragments.push(frag);\n }\n}\nfunction assignMultipleMediaPlaylistTagOccuranceError(level, tag, result) {\n level.playlistParsingError = new Error(`#EXT-X-${tag} must not appear more than once (${result[0]})`);\n}\nfunction assignMustAppearBeforeSegmentsError(level, tag, result) {\n level.playlistParsingError = new Error(`#EXT-X-${tag} must appear before the first Media Segment (${result[0]})`);\n}\n\nfunction updateFromToPTS(fragFrom, fragTo) {\n const fragToPTS = fragTo.startPTS;\n // if we know startPTS[toIdx]\n if (isFiniteNumber(fragToPTS)) {\n // update fragment duration.\n // it helps to fix drifts between playlist reported duration and fragment real duration\n let duration = 0;\n let frag;\n if (fragTo.sn > fragFrom.sn) {\n duration = fragToPTS - fragFrom.start;\n frag = fragFrom;\n } else {\n duration = fragFrom.start - fragToPTS;\n frag = fragTo;\n }\n if (frag.duration !== duration) {\n frag.setDuration(duration);\n }\n // we dont know startPTS[toIdx]\n } else if (fragTo.sn > fragFrom.sn) {\n const contiguous = fragFrom.cc === fragTo.cc;\n // TODO: With part-loading end/durations we need to confirm the whole fragment is loaded before using (or setting) minEndPTS\n if (contiguous && fragFrom.minEndPTS) {\n fragTo.setStart(fragFrom.start + (fragFrom.minEndPTS - fragFrom.start));\n } else {\n fragTo.setStart(fragFrom.start + fragFrom.duration);\n }\n } else {\n fragTo.setStart(Math.max(fragFrom.start - fragTo.duration, 0));\n }\n}\nfunction updateFragPTSDTS(details, frag, startPTS, endPTS, startDTS, endDTS, logger) {\n const parsedMediaDuration = endPTS - startPTS;\n if (parsedMediaDuration <= 0) {\n logger.warn('Fragment should have a positive duration', frag);\n endPTS = startPTS + frag.duration;\n endDTS = startDTS + frag.duration;\n }\n let maxStartPTS = startPTS;\n let minEndPTS = endPTS;\n const fragStartPts = frag.startPTS;\n const fragEndPts = frag.endPTS;\n if (isFiniteNumber(fragStartPts)) {\n // delta PTS between audio and video\n const deltaPTS = Math.abs(fragStartPts - startPTS);\n if (details && deltaPTS > details.totalduration) {\n logger.warn(`media timestamps and playlist times differ by ${deltaPTS}s for level ${frag.level} ${details.url}`);\n } else if (!isFiniteNumber(frag.deltaPTS)) {\n frag.deltaPTS = deltaPTS;\n } else {\n frag.deltaPTS = Math.max(deltaPTS, frag.deltaPTS);\n }\n maxStartPTS = Math.max(startPTS, fragStartPts);\n startPTS = Math.min(startPTS, fragStartPts);\n startDTS = frag.startDTS !== undefined ? Math.min(startDTS, frag.startDTS) : startDTS;\n minEndPTS = Math.min(endPTS, fragEndPts);\n endPTS = Math.max(endPTS, fragEndPts);\n endDTS = frag.endDTS !== undefined ? Math.max(endDTS, frag.endDTS) : endDTS;\n }\n const drift = startPTS - frag.start;\n if (frag.start !== 0) {\n frag.setStart(startPTS);\n }\n frag.setDuration(endPTS - frag.start);\n frag.startPTS = startPTS;\n frag.maxStartPTS = maxStartPTS;\n frag.startDTS = startDTS;\n frag.endPTS = endPTS;\n frag.minEndPTS = minEndPTS;\n frag.endDTS = endDTS;\n const sn = frag.sn;\n // exit if sn out of range\n if (!details || sn < details.startSN || sn > details.endSN) {\n return 0;\n }\n let i;\n const fragIdx = sn - details.startSN;\n const fragments = details.fragments;\n // update frag reference in fragments array\n // rationale is that fragments array might not contain this frag object.\n // this will happen if playlist has been refreshed between frag loading and call to updateFragPTSDTS()\n // if we don't update frag, we won't be able to propagate PTS info on the playlist\n // resulting in invalid sliding computation\n fragments[fragIdx] = frag;\n // adjust fragment PTS/duration from seqnum-1 to frag 0\n for (i = fragIdx; i > 0; i--) {\n updateFromToPTS(fragments[i], fragments[i - 1]);\n }\n\n // adjust fragment PTS/duration from seqnum to last frag\n for (i = fragIdx; i < fragments.length - 1; i++) {\n updateFromToPTS(fragments[i], fragments[i + 1]);\n }\n if (details.fragmentHint) {\n updateFromToPTS(fragments[fragments.length - 1], details.fragmentHint);\n }\n details.PTSKnown = details.alignedSliding = true;\n return drift;\n}\nfunction mergeDetails(oldDetails, newDetails, logger) {\n if (oldDetails === newDetails) {\n return;\n }\n // Track the last initSegment processed. Initialize it to the last one on the timeline.\n let currentInitSegment = null;\n const oldFragments = oldDetails.fragments;\n for (let i = oldFragments.length - 1; i >= 0; i--) {\n const oldInit = oldFragments[i].initSegment;\n if (oldInit) {\n currentInitSegment = oldInit;\n break;\n }\n }\n if (oldDetails.fragmentHint) {\n // prevent PTS and duration from being adjusted on the next hint\n delete oldDetails.fragmentHint.endPTS;\n }\n // check if old/new playlists have fragments in common\n // loop through overlapping SN and update startPTS, cc, and duration if any found\n let PTSFrag;\n mapFragmentIntersection(oldDetails, newDetails, (oldFrag, newFrag, newFragIndex, newFragments) => {\n if ((!newDetails.startCC || newDetails.skippedSegments) && newFrag.cc !== oldFrag.cc) {\n const ccOffset = oldFrag.cc - newFrag.cc;\n for (let i = newFragIndex; i < newFragments.length; i++) {\n newFragments[i].cc += ccOffset;\n }\n newDetails.endCC = newFragments[newFragments.length - 1].cc;\n }\n if (isFiniteNumber(oldFrag.startPTS) && isFiniteNumber(oldFrag.endPTS)) {\n newFrag.setStart(newFrag.startPTS = oldFrag.startPTS);\n newFrag.startDTS = oldFrag.startDTS;\n newFrag.maxStartPTS = oldFrag.maxStartPTS;\n newFrag.endPTS = oldFrag.endPTS;\n newFrag.endDTS = oldFrag.endDTS;\n newFrag.minEndPTS = oldFrag.minEndPTS;\n newFrag.setDuration(oldFrag.endPTS - oldFrag.startPTS);\n if (newFrag.duration) {\n PTSFrag = newFrag;\n }\n\n // PTS is known when any segment has startPTS and endPTS\n newDetails.PTSKnown = newDetails.alignedSliding = true;\n }\n if (oldFrag.hasStreams) {\n newFrag.elementaryStreams = oldFrag.elementaryStreams;\n }\n newFrag.loader = oldFrag.loader;\n if (oldFrag.hasStats) {\n newFrag.stats = oldFrag.stats;\n }\n if (oldFrag.initSegment) {\n newFrag.initSegment = oldFrag.initSegment;\n currentInitSegment = oldFrag.initSegment;\n }\n });\n const newFragments = newDetails.fragments;\n const fragmentsToCheck = newDetails.fragmentHint ? newFragments.concat(newDetails.fragmentHint) : newFragments;\n if (currentInitSegment) {\n fragmentsToCheck.forEach(frag => {\n var _currentInitSegment;\n if (frag && (!frag.initSegment || frag.initSegment.relurl === ((_currentInitSegment = currentInitSegment) == null ? void 0 : _currentInitSegment.relurl))) {\n frag.initSegment = currentInitSegment;\n }\n });\n }\n if (newDetails.skippedSegments) {\n newDetails.deltaUpdateFailed = newFragments.some(frag => !frag);\n if (newDetails.deltaUpdateFailed) {\n logger.warn('[level-helper] Previous playlist missing segments skipped in delta playlist');\n for (let i = newDetails.skippedSegments; i--;) {\n newFragments.shift();\n }\n newDetails.startSN = newFragments[0].sn;\n } else {\n if (newDetails.canSkipDateRanges) {\n newDetails.dateRanges = mergeDateRanges(oldDetails.dateRanges, newDetails, logger);\n }\n const programDateTimes = oldDetails.fragments.filter(frag => frag.rawProgramDateTime);\n if (oldDetails.hasProgramDateTime && !newDetails.hasProgramDateTime) {\n for (let i = 1; i < fragmentsToCheck.length; i++) {\n if (fragmentsToCheck[i].programDateTime === null) {\n assignProgramDateTime(fragmentsToCheck[i], fragmentsToCheck[i - 1], programDateTimes);\n }\n }\n }\n mapDateRanges(programDateTimes, newDetails);\n }\n newDetails.endCC = newFragments[newFragments.length - 1].cc;\n }\n if (!newDetails.startCC) {\n var _fragPriorToNewStart$;\n const fragPriorToNewStart = getFragmentWithSN(oldDetails, newDetails.startSN - 1);\n newDetails.startCC = (_fragPriorToNewStart$ = fragPriorToNewStart == null ? void 0 : fragPriorToNewStart.cc) != null ? _fragPriorToNewStart$ : newFragments[0].cc;\n }\n\n // Merge parts\n mapPartIntersection(oldDetails.partList, newDetails.partList, (oldPart, newPart) => {\n newPart.elementaryStreams = oldPart.elementaryStreams;\n newPart.stats = oldPart.stats;\n });\n\n // if at least one fragment contains PTS info, recompute PTS information for all fragments\n if (PTSFrag) {\n updateFragPTSDTS(newDetails, PTSFrag, PTSFrag.startPTS, PTSFrag.endPTS, PTSFrag.startDTS, PTSFrag.endDTS, logger);\n } else {\n // ensure that delta is within oldFragments range\n // also adjust sliding in case delta is 0 (we could have old=[50-60] and new=old=[50-61])\n // in that case we also need to adjust start offset of all fragments\n adjustSliding(oldDetails, newDetails);\n }\n if (newFragments.length) {\n newDetails.totalduration = newDetails.edge - newFragments[0].start;\n }\n newDetails.driftStartTime = oldDetails.driftStartTime;\n newDetails.driftStart = oldDetails.driftStart;\n const advancedDateTime = newDetails.advancedDateTime;\n if (newDetails.advanced && advancedDateTime) {\n const edge = newDetails.edge;\n if (!newDetails.driftStart) {\n newDetails.driftStartTime = advancedDateTime;\n newDetails.driftStart = edge;\n }\n newDetails.driftEndTime = advancedDateTime;\n newDetails.driftEnd = edge;\n } else {\n newDetails.driftEndTime = oldDetails.driftEndTime;\n newDetails.driftEnd = oldDetails.driftEnd;\n newDetails.advancedDateTime = oldDetails.advancedDateTime;\n }\n if (newDetails.requestScheduled === -1) {\n newDetails.requestScheduled = oldDetails.requestScheduled;\n }\n}\nfunction mergeDateRanges(oldDateRanges, newDetails, logger) {\n const {\n dateRanges: deltaDateRanges,\n recentlyRemovedDateranges\n } = newDetails;\n const dateRanges = _extends({}, oldDateRanges);\n if (recentlyRemovedDateranges) {\n recentlyRemovedDateranges.forEach(id => {\n delete dateRanges[id];\n });\n }\n const mergeIds = Object.keys(dateRanges);\n const mergeCount = mergeIds.length;\n if (!mergeCount) {\n return deltaDateRanges;\n }\n Object.keys(deltaDateRanges).forEach(id => {\n const mergedDateRange = dateRanges[id];\n const dateRange = new DateRange(deltaDateRanges[id].attr, mergedDateRange);\n if (dateRange.isValid) {\n dateRanges[id] = dateRange;\n if (!mergedDateRange) {\n dateRange.tagOrder += mergeCount;\n }\n } else {\n logger.warn(`Ignoring invalid Playlist Delta Update DATERANGE tag: \"${stringify(deltaDateRanges[id].attr)}\"`);\n }\n });\n return dateRanges;\n}\nfunction mapPartIntersection(oldParts, newParts, intersectionFn) {\n if (oldParts && newParts) {\n let delta = 0;\n for (let i = 0, len = oldParts.length; i <= len; i++) {\n const oldPart = oldParts[i];\n const newPart = newParts[i + delta];\n if (oldPart && newPart && oldPart.index === newPart.index && oldPart.fragment.sn === newPart.fragment.sn) {\n intersectionFn(oldPart, newPart);\n } else {\n delta--;\n }\n }\n }\n}\nfunction mapFragmentIntersection(oldDetails, newDetails, intersectionFn) {\n const skippedSegments = newDetails.skippedSegments;\n const start = Math.max(oldDetails.startSN, newDetails.startSN) - newDetails.startSN;\n const end = (oldDetails.fragmentHint ? 1 : 0) + (skippedSegments ? newDetails.endSN : Math.min(oldDetails.endSN, newDetails.endSN)) - newDetails.startSN;\n const delta = newDetails.startSN - oldDetails.startSN;\n const newFrags = newDetails.fragmentHint ? newDetails.fragments.concat(newDetails.fragmentHint) : newDetails.fragments;\n const oldFrags = oldDetails.fragmentHint ? oldDetails.fragments.concat(oldDetails.fragmentHint) : oldDetails.fragments;\n for (let i = start; i <= end; i++) {\n const oldFrag = oldFrags[delta + i];\n let newFrag = newFrags[i];\n if (skippedSegments && !newFrag && oldFrag) {\n // Fill in skipped segments in delta playlist\n newFrag = newDetails.fragments[i] = oldFrag;\n }\n if (oldFrag && newFrag) {\n intersectionFn(oldFrag, newFrag, i, newFrags);\n const uriBefore = oldFrag.relurl;\n const uriAfter = newFrag.relurl;\n if (uriBefore && notEqualAfterStrippingQueries(uriBefore, uriAfter)) {\n newDetails.playlistParsingError = getSequenceError(`media sequence mismatch ${newFrag.sn}:`, oldDetails, newDetails, oldFrag, newFrag);\n return;\n } else if (oldFrag.cc !== newFrag.cc) {\n newDetails.playlistParsingError = getSequenceError(`discontinuity sequence mismatch (${oldFrag.cc}!=${newFrag.cc})`, oldDetails, newDetails, oldFrag, newFrag);\n return;\n }\n }\n }\n}\nfunction getSequenceError(message, oldDetails, newDetails, oldFrag, newFrag) {\n return new Error(`${message} ${newFrag.url}\nPlaylist starting @${oldDetails.startSN}\n${oldDetails.m3u8}\n\nPlaylist starting @${newDetails.startSN}\n${newDetails.m3u8}`);\n}\nfunction adjustSliding(oldDetails, newDetails, matchingStableVariantOrRendition = true) {\n const delta = newDetails.startSN + newDetails.skippedSegments - oldDetails.startSN;\n const oldFragments = oldDetails.fragments;\n const advancedOrStable = delta >= 0;\n let sliding = 0;\n if (advancedOrStable && delta < oldFragments.length) {\n sliding = oldFragments[delta].start;\n } else if (advancedOrStable && newDetails.startSN === oldDetails.endSN + 1) {\n sliding = oldDetails.fragmentEnd;\n } else if (advancedOrStable && matchingStableVariantOrRendition) {\n // align with expected position (updated playlist start sequence is past end sequence of last update)\n sliding = oldDetails.fragmentStart + delta * newDetails.levelTargetDuration;\n } else if (!newDetails.skippedSegments && newDetails.fragmentStart === 0) {\n // align new start with old (playlist switch has a sequence with no overlap and should not be used for alignment)\n sliding = oldDetails.fragmentStart;\n } else {\n // new details already has a sliding offset or has skipped segments\n return;\n }\n addSliding(newDetails, sliding);\n}\nfunction addSliding(details, sliding) {\n if (sliding) {\n const fragments = details.fragments;\n for (let i = details.skippedSegments; i < fragments.length; i++) {\n fragments[i].addStart(sliding);\n }\n if (details.fragmentHint) {\n details.fragmentHint.addStart(sliding);\n }\n }\n}\nfunction computeReloadInterval(newDetails, distanceToLiveEdgeMs = Infinity) {\n let reloadInterval = 1000 * newDetails.targetduration;\n if (newDetails.updated) {\n // Use last segment duration when shorter than target duration and near live edge\n const fragments = newDetails.fragments;\n const liveEdgeMaxTargetDurations = 4;\n if (fragments.length && reloadInterval * liveEdgeMaxTargetDurations > distanceToLiveEdgeMs) {\n const lastSegmentDuration = fragments[fragments.length - 1].duration * 1000;\n if (lastSegmentDuration < reloadInterval) {\n reloadInterval = lastSegmentDuration;\n }\n }\n } else {\n // estimate = 'miss half average';\n // follow HLS Spec, If the client reloads a Playlist file and finds that it has not\n // changed then it MUST wait for a period of one-half the target\n // duration before retrying.\n reloadInterval /= 2;\n }\n return Math.round(reloadInterval);\n}\nfunction getFragmentWithSN(details, sn, fragCurrent) {\n if (!details) {\n return null;\n }\n let fragment = details.fragments[sn - details.startSN];\n if (fragment) {\n return fragment;\n }\n fragment = details.fragmentHint;\n if (fragment && fragment.sn === sn) {\n return fragment;\n }\n if (sn < details.startSN && fragCurrent && fragCurrent.sn === sn) {\n return fragCurrent;\n }\n return null;\n}\nfunction getPartWith(details, sn, partIndex) {\n if (!details) {\n return null;\n }\n return findPart(details.partList, sn, partIndex);\n}\nfunction findPart(partList, sn, partIndex) {\n if (partList) {\n for (let i = partList.length; i--;) {\n const part = partList[i];\n if (part.index === partIndex && part.fragment.sn === sn) {\n return part;\n }\n }\n }\n return null;\n}\nfunction reassignFragmentLevelIndexes(levels) {\n levels.forEach((level, index) => {\n var _level$details;\n (_level$details = level.details) == null || _level$details.fragments.forEach(fragment => {\n fragment.level = index;\n if (fragment.initSegment) {\n fragment.initSegment.level = index;\n }\n });\n });\n}\nfunction notEqualAfterStrippingQueries(uriBefore, uriAfter) {\n if (uriBefore !== uriAfter && uriAfter) {\n return stripQuery(uriBefore) !== stripQuery(uriAfter);\n }\n return false;\n}\nfunction stripQuery(uri) {\n return uri.replace(/\\?[^?]*$/, '');\n}\n\nfunction findFirstFragWithCC(fragments, cc) {\n for (let i = 0, len = fragments.length; i < len; i++) {\n var _fragments$i;\n if (((_fragments$i = fragments[i]) == null ? void 0 : _fragments$i.cc) === cc) {\n return fragments[i];\n }\n }\n return null;\n}\nfunction shouldAlignOnDiscontinuities(refDetails, details) {\n if (refDetails) {\n if (details.startCC < refDetails.endCC && details.endCC > refDetails.startCC) {\n return true;\n }\n }\n return false;\n}\nfunction adjustFragmentStart(frag, sliding) {\n const start = frag.start + sliding;\n frag.startPTS = start;\n frag.setStart(start);\n frag.endPTS = start + frag.duration;\n}\nfunction adjustSlidingStart(sliding, details) {\n // Update segments\n const fragments = details.fragments;\n for (let i = 0, len = fragments.length; i < len; i++) {\n adjustFragmentStart(fragments[i], sliding);\n }\n // Update LL-HLS parts at the end of the playlist\n if (details.fragmentHint) {\n adjustFragmentStart(details.fragmentHint, sliding);\n }\n details.alignedSliding = true;\n}\n\n/**\n * Using the parameters of the last level, this function computes PTS' of the new fragments so that they form a\n * contiguous stream with the last fragments.\n * The PTS of a fragment lets Hls.js know where it fits into a stream - by knowing every PTS, we know which fragment to\n * download at any given time. PTS is normally computed when the fragment is demuxed, so taking this step saves us time\n * and an extra download.\n * @param lastLevel\n * @param details\n */\nfunction alignStream(switchDetails, details) {\n if (!switchDetails) {\n return;\n }\n alignDiscontinuities(details, switchDetails);\n if (!details.alignedSliding) {\n // If the PTS wasn't figured out via discontinuity sequence that means there was no CC increase within the level.\n // Aligning via Program Date Time should therefore be reliable, since PDT should be the same within the same\n // discontinuity sequence.\n alignMediaPlaylistByPDT(details, switchDetails);\n }\n if (!details.alignedSliding && !details.skippedSegments) {\n // Try to align on sn so that we pick a better start fragment.\n // Do not perform this on playlists with delta updates as this is only to align levels on switch\n // and adjustSliding only adjusts fragments after skippedSegments.\n adjustSliding(switchDetails, details, false);\n }\n}\n\n/**\n * Ajust the start of fragments in `details` by the difference in time between fragments of the latest\n * shared discontinuity sequence change.\n * @param lastLevel - The details of the last loaded level\n * @param details - The details of the new level\n */\nfunction alignDiscontinuities(details, refDetails) {\n if (!shouldAlignOnDiscontinuities(refDetails, details)) {\n return;\n }\n const targetCC = Math.min(refDetails.endCC, details.endCC);\n const refFrag = findFirstFragWithCC(refDetails.fragments, targetCC);\n const frag = findFirstFragWithCC(details.fragments, targetCC);\n if (!refFrag || !frag) {\n return;\n }\n logger.log(`Aligning playlist at start of dicontinuity sequence ${targetCC}`);\n const delta = refFrag.start - frag.start;\n adjustSlidingStart(delta, details);\n}\n\n/**\n * Ensures appropriate time-alignment between renditions based on PDT.\n * This function assumes the timelines represented in `refDetails` are accurate, including the PDTs\n * for the last discontinuity sequence number shared by both playlists when present,\n * and uses the \"wallclock\"/PDT timeline as a cross-reference to `details`, adjusting the presentation\n * times/timelines of `details` accordingly.\n * Given the asynchronous nature of fetches and initial loads of live `main` and audio/subtitle tracks,\n * the primary purpose of this function is to ensure the \"local timelines\" of audio/subtitle tracks\n * are aligned to the main/video timeline, using PDT as the cross-reference/\"anchor\" that should\n * be consistent across playlists, per the HLS spec.\n * @param details - The details of the rendition you'd like to time-align (e.g. an audio rendition).\n * @param refDetails - The details of the reference rendition with start and PDT times for alignment.\n */\nfunction alignMediaPlaylistByPDT(details, refDetails) {\n if (!details.hasProgramDateTime || !refDetails.hasProgramDateTime) {\n return;\n }\n const fragments = details.fragments;\n const refFragments = refDetails.fragments;\n if (!fragments.length || !refFragments.length) {\n return;\n }\n\n // Calculate a delta to apply to all fragments according to the delta in PDT times and start times\n // of a fragment in the reference details, and a fragment in the target details of the same discontinuity.\n // If a fragment of the same discontinuity was not found use the middle fragment of both.\n let refFrag;\n let frag;\n const targetCC = Math.min(refDetails.endCC, details.endCC);\n if (refDetails.startCC < targetCC && details.startCC < targetCC) {\n refFrag = findFirstFragWithCC(refFragments, targetCC);\n frag = findFirstFragWithCC(fragments, targetCC);\n }\n if (!refFrag || !frag) {\n refFrag = refFragments[Math.floor(refFragments.length / 2)];\n frag = findFirstFragWithCC(fragments, refFrag.cc) || fragments[Math.floor(fragments.length / 2)];\n }\n const refPDT = refFrag.programDateTime;\n const targetPDT = frag.programDateTime;\n if (!refPDT || !targetPDT) {\n return;\n }\n const delta = (targetPDT - refPDT) / 1000 - (frag.start - refFrag.start);\n adjustSlidingStart(delta, details);\n}\n\nfunction addEventListener(el, type, listener) {\n removeEventListener(el, type, listener);\n el.addEventListener(type, listener);\n}\nfunction removeEventListener(el, type, listener) {\n el.removeEventListener(type, listener);\n}\n\n/**\n * TimeRanges to string helper\n */\n\nconst TimeRanges = {\n toString: function (r) {\n let log = '';\n const len = r.length;\n for (let i = 0; i < len; i++) {\n log += `[${r.start(i).toFixed(3)}-${r.end(i).toFixed(3)}]`;\n }\n return log;\n }\n};\n\nconst State = {\n STOPPED: 'STOPPED',\n IDLE: 'IDLE',\n KEY_LOADING: 'KEY_LOADING',\n FRAG_LOADING: 'FRAG_LOADING',\n FRAG_LOADING_WAITING_RETRY: 'FRAG_LOADING_WAITING_RETRY',\n WAITING_TRACK: 'WAITING_TRACK',\n PARSING: 'PARSING',\n PARSED: 'PARSED',\n ENDED: 'ENDED',\n ERROR: 'ERROR',\n WAITING_INIT_PTS: 'WAITING_INIT_PTS',\n WAITING_LEVEL: 'WAITING_LEVEL'\n};\nclass BaseStreamController extends TaskLoop {\n constructor(hls, fragmentTracker, keyLoader, logPrefix, playlistType) {\n super(logPrefix, hls.logger);\n this.hls = void 0;\n this.fragPrevious = null;\n this.fragCurrent = null;\n this.fragmentTracker = void 0;\n this.transmuxer = null;\n this._state = State.STOPPED;\n this.playlistType = void 0;\n this.media = null;\n this.mediaBuffer = null;\n this.config = void 0;\n this.bitrateTest = false;\n this.lastCurrentTime = 0;\n this.nextLoadPosition = 0;\n this.startPosition = 0;\n this.startTimeOffset = null;\n this.retryDate = 0;\n this.levels = null;\n this.fragmentLoader = void 0;\n this.keyLoader = void 0;\n this.levelLastLoaded = null;\n this.startFragRequested = false;\n this.decrypter = void 0;\n this.initPTS = [];\n this.buffering = true;\n this.loadingParts = false;\n this.loopSn = void 0;\n this.onMediaSeeking = () => {\n const {\n config,\n fragCurrent,\n media,\n mediaBuffer,\n state\n } = this;\n const currentTime = media ? media.currentTime : 0;\n const bufferInfo = BufferHelper.bufferInfo(mediaBuffer ? mediaBuffer : media, currentTime, config.maxBufferHole);\n const noFowardBuffer = !bufferInfo.len;\n this.log(`Media seeking to ${isFiniteNumber(currentTime) ? currentTime.toFixed(3) : currentTime}, state: ${state}, ${noFowardBuffer ? 'out of' : 'in'} buffer`);\n if (this.state === State.ENDED) {\n this.resetLoadingState();\n } else if (fragCurrent) {\n // Seeking while frag load is in progress\n const tolerance = config.maxFragLookUpTolerance;\n const fragStartOffset = fragCurrent.start - tolerance;\n const fragEndOffset = fragCurrent.start + fragCurrent.duration + tolerance;\n // if seeking out of buffered range or into new one\n if (noFowardBuffer || fragEndOffset < bufferInfo.start || fragStartOffset > bufferInfo.end) {\n const pastFragment = currentTime > fragEndOffset;\n // if the seek position is outside the current fragment range\n if (currentTime < fragStartOffset || pastFragment) {\n if (pastFragment && fragCurrent.loader) {\n this.log(`Cancelling fragment load for seek (sn: ${fragCurrent.sn})`);\n fragCurrent.abortRequests();\n this.resetLoadingState();\n }\n this.fragPrevious = null;\n }\n }\n }\n if (media) {\n // Remove gap fragments\n this.fragmentTracker.removeFragmentsInRange(currentTime, Infinity, this.playlistType, true);\n\n // Don't set lastCurrentTime with backward seeks (allows for frag selection with strict tolerances)\n const lastCurrentTime = this.lastCurrentTime;\n if (currentTime > lastCurrentTime) {\n this.lastCurrentTime = currentTime;\n }\n if (!this.loadingParts) {\n const bufferEnd = Math.max(bufferInfo.end, currentTime);\n const shouldLoadParts = this.shouldLoadParts(this.getLevelDetails(), bufferEnd);\n if (shouldLoadParts) {\n this.log(`LL-Part loading ON after seeking to ${currentTime.toFixed(2)} with buffer @${bufferEnd.toFixed(2)}`);\n this.loadingParts = shouldLoadParts;\n }\n }\n }\n\n // in case seeking occurs although no media buffered, adjust startPosition and nextLoadPosition to seek target\n if (!this.hls.hasEnoughToStart) {\n this.log(`Setting ${noFowardBuffer ? 'startPosition' : 'nextLoadPosition'} to ${currentTime} for seek without enough to start`);\n this.nextLoadPosition = currentTime;\n if (noFowardBuffer) {\n this.startPosition = currentTime;\n }\n }\n if (noFowardBuffer && this.state === State.IDLE) {\n // Async tick to speed up processing\n this.tickImmediate();\n }\n };\n this.onMediaEnded = () => {\n // reset startPosition and lastCurrentTime to restart playback @ stream beginning\n this.log(`setting startPosition to 0 because media ended`);\n this.startPosition = this.lastCurrentTime = 0;\n };\n this.playlistType = playlistType;\n this.hls = hls;\n this.fragmentLoader = new FragmentLoader(hls.config);\n this.keyLoader = keyLoader;\n this.fragmentTracker = fragmentTracker;\n this.config = hls.config;\n this.decrypter = new Decrypter(hls.config);\n }\n registerListeners() {\n const {\n hls\n } = this;\n hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n hls.on(Events.ERROR, this.onError, this);\n }\n unregisterListeners() {\n const {\n hls\n } = this;\n hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n hls.off(Events.ERROR, this.onError, this);\n }\n doTick() {\n this.onTickEnd();\n }\n onTickEnd() {}\n startLoad(startPosition) {}\n stopLoad() {\n if (this.state === State.STOPPED) {\n return;\n }\n this.fragmentLoader.abort();\n this.keyLoader.abort(this.playlistType);\n const frag = this.fragCurrent;\n if (frag != null && frag.loader) {\n frag.abortRequests();\n this.fragmentTracker.removeFragment(frag);\n }\n this.resetTransmuxer();\n this.fragCurrent = null;\n this.fragPrevious = null;\n this.clearInterval();\n this.clearNextTick();\n this.state = State.STOPPED;\n }\n get startPositionValue() {\n const {\n nextLoadPosition,\n startPosition\n } = this;\n if (startPosition === -1 && nextLoadPosition) {\n return nextLoadPosition;\n }\n return startPosition;\n }\n get bufferingEnabled() {\n return this.buffering;\n }\n pauseBuffering() {\n this.buffering = false;\n }\n resumeBuffering() {\n this.buffering = true;\n }\n get inFlightFrag() {\n return {\n frag: this.fragCurrent,\n state: this.state\n };\n }\n _streamEnded(bufferInfo, levelDetails) {\n // Stream is never \"ended\" when playlist is live or media is detached\n if (levelDetails.live || !this.media) {\n return false;\n }\n // Stream is not \"ended\" when nothing is buffered past the start\n const bufferEnd = bufferInfo.end || 0;\n const timelineStart = this.config.timelineOffset || 0;\n if (bufferEnd <= timelineStart) {\n return false;\n }\n // Stream is not \"ended\" when there is a second buffered range starting before the end of the playlist\n const bufferedRanges = bufferInfo.buffered;\n if (this.config.maxBufferHole && bufferedRanges && bufferedRanges.length > 1) {\n // make sure bufferInfo accounts for any gaps\n bufferInfo = BufferHelper.bufferedInfo(bufferedRanges, bufferInfo.start, 0);\n }\n const nextStart = bufferInfo.nextStart;\n const hasSecondBufferedRange = nextStart && nextStart > timelineStart && nextStart < levelDetails.edge;\n if (hasSecondBufferedRange) {\n return false;\n }\n // Playhead is in unbuffered region. Marking EoS now could result in Safari failing to dispatch \"ended\" event following seek on start.\n if (this.media.currentTime < bufferInfo.start) {\n return false;\n }\n const partList = levelDetails.partList;\n // Since the last part isn't guaranteed to correspond to the last playlist segment for Low-Latency HLS,\n // check instead if the last part is buffered.\n if (partList != null && partList.length) {\n const lastPart = partList[partList.length - 1];\n\n // Checking the midpoint of the part for potential margin of error and related issues.\n // NOTE: Technically I believe parts could yield content that is < the computed duration (including potential a duration of 0)\n // and still be spec-compliant, so there may still be edge cases here. Likewise, there could be issues in end of stream\n // part mismatches for independent audio and video playlists/segments.\n const lastPartBuffered = BufferHelper.isBuffered(this.media, lastPart.start + lastPart.duration / 2);\n return lastPartBuffered;\n }\n const playlistType = levelDetails.fragments[levelDetails.fragments.length - 1].type;\n return this.fragmentTracker.isEndListAppended(playlistType);\n }\n getLevelDetails() {\n if (this.levels && this.levelLastLoaded !== null) {\n return this.levelLastLoaded.details;\n }\n }\n get timelineOffset() {\n const configuredTimelineOffset = this.config.timelineOffset;\n if (configuredTimelineOffset) {\n var _this$getLevelDetails;\n return ((_this$getLevelDetails = this.getLevelDetails()) == null ? void 0 : _this$getLevelDetails.appliedTimelineOffset) || configuredTimelineOffset;\n }\n return 0;\n }\n onMediaAttached(event, data) {\n const media = this.media = this.mediaBuffer = data.media;\n addEventListener(media, 'seeking', this.onMediaSeeking);\n addEventListener(media, 'ended', this.onMediaEnded);\n const config = this.config;\n if (this.levels && config.autoStartLoad && this.state === State.STOPPED) {\n this.startLoad(config.startPosition);\n }\n }\n onMediaDetaching(event, data) {\n const transferringMedia = !!data.transferMedia;\n const media = this.media;\n if (media === null) {\n return;\n }\n if (media.ended) {\n this.log('MSE detaching and video ended, reset startPosition');\n this.startPosition = this.lastCurrentTime = 0;\n }\n\n // remove video listeners\n removeEventListener(media, 'seeking', this.onMediaSeeking);\n removeEventListener(media, 'ended', this.onMediaEnded);\n if (this.keyLoader && !transferringMedia) {\n this.keyLoader.detach();\n }\n this.media = this.mediaBuffer = null;\n this.loopSn = undefined;\n if (transferringMedia) {\n this.resetLoadingState();\n this.resetTransmuxer();\n return;\n }\n this.loadingParts = false;\n this.fragmentTracker.removeAllFragments();\n this.stopLoad();\n }\n onManifestLoading() {\n this.initPTS = [];\n this.levels = this.levelLastLoaded = this.fragCurrent = null;\n this.lastCurrentTime = this.startPosition = 0;\n this.startFragRequested = false;\n }\n onError(event, data) {}\n onManifestLoaded(event, data) {\n this.startTimeOffset = data.startTimeOffset;\n }\n onHandlerDestroying() {\n this.stopLoad();\n if (this.transmuxer) {\n this.transmuxer.destroy();\n this.transmuxer = null;\n }\n super.onHandlerDestroying();\n // @ts-ignore\n this.hls = this.onMediaSeeking = this.onMediaEnded = null;\n }\n onHandlerDestroyed() {\n this.state = State.STOPPED;\n if (this.fragmentLoader) {\n this.fragmentLoader.destroy();\n }\n if (this.keyLoader) {\n this.keyLoader.destroy();\n }\n if (this.decrypter) {\n this.decrypter.destroy();\n }\n this.hls = this.log = this.warn = this.decrypter = this.keyLoader = this.fragmentLoader = this.fragmentTracker = null;\n super.onHandlerDestroyed();\n }\n loadFragment(frag, level, targetBufferTime) {\n this.startFragRequested = true;\n this._loadFragForPlayback(frag, level, targetBufferTime);\n }\n _loadFragForPlayback(fragment, level, targetBufferTime) {\n const progressCallback = data => {\n const frag = data.frag;\n if (this.fragContextChanged(frag)) {\n this.warn(`${frag.type} sn: ${frag.sn}${data.part ? ' part: ' + data.part.index : ''} of ${this.fragInfo(frag, false, data.part)}) was dropped during download.`);\n this.fragmentTracker.removeFragment(frag);\n return;\n }\n frag.stats.chunkCount++;\n this._handleFragmentLoadProgress(data);\n };\n this._doFragLoad(fragment, level, targetBufferTime, progressCallback).then(data => {\n if (!data) {\n // if we're here we probably needed to backtrack or are waiting for more parts\n return;\n }\n const state = this.state;\n const frag = data.frag;\n if (this.fragContextChanged(frag)) {\n if (state === State.FRAG_LOADING || !this.fragCurrent && state === State.PARSING) {\n this.fragmentTracker.removeFragment(frag);\n this.state = State.IDLE;\n }\n return;\n }\n if ('payload' in data) {\n this.log(`Loaded ${frag.type} sn: ${frag.sn} of ${this.playlistLabel()} ${frag.level}`);\n this.hls.trigger(Events.FRAG_LOADED, data);\n }\n\n // Pass through the whole payload; controllers not implementing progressive loading receive data from this callback\n this._handleFragmentLoadComplete(data);\n }).catch(reason => {\n if (this.state === State.STOPPED || this.state === State.ERROR) {\n return;\n }\n this.warn(`Frag error: ${(reason == null ? void 0 : reason.message) || reason}`);\n this.resetFragmentLoading(fragment);\n });\n }\n clearTrackerIfNeeded(frag) {\n var _this$mediaBuffer;\n const {\n fragmentTracker\n } = this;\n const fragState = fragmentTracker.getState(frag);\n if (fragState === FragmentState.APPENDING) {\n // Lower the max buffer length and try again\n const playlistType = frag.type;\n const bufferedInfo = this.getFwdBufferInfo(this.mediaBuffer, playlistType);\n const minForwardBufferLength = Math.max(frag.duration, bufferedInfo ? bufferedInfo.len : this.config.maxBufferLength);\n // If backtracking, always remove from the tracker without reducing max buffer length\n const backtrackFragment = this.backtrackFragment;\n const backtracked = backtrackFragment ? frag.sn - backtrackFragment.sn : 0;\n if (backtracked === 1 || this.reduceMaxBufferLength(minForwardBufferLength, frag.duration)) {\n fragmentTracker.removeFragment(frag);\n }\n } else if (((_this$mediaBuffer = this.mediaBuffer) == null ? void 0 : _this$mediaBuffer.buffered.length) === 0) {\n // Stop gap for bad tracker / buffer flush behavior\n fragmentTracker.removeAllFragments();\n } else if (fragmentTracker.hasParts(frag.type)) {\n // In low latency mode, remove fragments for which only some parts were buffered\n fragmentTracker.detectPartialFragments({\n frag,\n part: null,\n stats: frag.stats,\n id: frag.type\n });\n if (fragmentTracker.getState(frag) === FragmentState.PARTIAL) {\n fragmentTracker.removeFragment(frag);\n }\n }\n }\n checkLiveUpdate(details) {\n if (details.updated && !details.live) {\n // Live stream ended, update fragment tracker\n const lastFragment = details.fragments[details.fragments.length - 1];\n this.fragmentTracker.detectPartialFragments({\n frag: lastFragment,\n part: null,\n stats: lastFragment.stats,\n id: lastFragment.type\n });\n }\n if (!details.fragments[0]) {\n details.deltaUpdateFailed = true;\n }\n }\n waitForLive(levelInfo) {\n const details = levelInfo.details;\n return (details == null ? void 0 : details.live) && details.type !== 'EVENT' && (this.levelLastLoaded !== levelInfo || details.expired);\n }\n flushMainBuffer(startOffset, endOffset, type = null) {\n if (!(startOffset - endOffset)) {\n return;\n }\n // When alternate audio is playing, the audio-stream-controller is responsible for the audio buffer. Otherwise,\n // passing a null type flushes both buffers\n const flushScope = {\n startOffset,\n endOffset,\n type\n };\n this.hls.trigger(Events.BUFFER_FLUSHING, flushScope);\n }\n _loadInitSegment(fragment, level) {\n this._doFragLoad(fragment, level).then(data => {\n const frag = data == null ? void 0 : data.frag;\n if (!frag || this.fragContextChanged(frag) || !this.levels) {\n throw new Error('init load aborted');\n }\n return data;\n }).then(data => {\n const {\n hls\n } = this;\n const {\n frag,\n payload\n } = data;\n const decryptData = frag.decryptdata;\n\n // check to see if the payload needs to be decrypted\n if (payload && payload.byteLength > 0 && decryptData != null && decryptData.key && decryptData.iv && isFullSegmentEncryption(decryptData.method)) {\n const startTime = self.performance.now();\n // decrypt init segment data\n return this.decrypter.decrypt(new Uint8Array(payload), decryptData.key.buffer, decryptData.iv.buffer, getAesModeFromFullSegmentMethod(decryptData.method)).catch(err => {\n hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.FRAG_DECRYPT_ERROR,\n fatal: false,\n error: err,\n reason: err.message,\n frag\n });\n throw err;\n }).then(decryptedData => {\n const endTime = self.performance.now();\n hls.trigger(Events.FRAG_DECRYPTED, {\n frag,\n payload: decryptedData,\n stats: {\n tstart: startTime,\n tdecrypt: endTime\n }\n });\n data.payload = decryptedData;\n return this.completeInitSegmentLoad(data);\n });\n }\n return this.completeInitSegmentLoad(data);\n }).catch(reason => {\n if (this.state === State.STOPPED || this.state === State.ERROR) {\n return;\n }\n this.warn(reason);\n this.resetFragmentLoading(fragment);\n });\n }\n completeInitSegmentLoad(data) {\n const {\n levels\n } = this;\n if (!levels) {\n throw new Error('init load aborted, missing levels');\n }\n const stats = data.frag.stats;\n if (this.state !== State.STOPPED) {\n this.state = State.IDLE;\n }\n data.frag.data = new Uint8Array(data.payload);\n stats.parsing.start = stats.buffering.start = self.performance.now();\n stats.parsing.end = stats.buffering.end = self.performance.now();\n this.tick();\n }\n unhandledEncryptionError(initSegment, frag) {\n var _tracks$audio, _tracks$video;\n const tracks = initSegment.tracks;\n if (tracks && !frag.encrypted && ((_tracks$audio = tracks.audio) != null && _tracks$audio.encrypted || (_tracks$video = tracks.video) != null && _tracks$video.encrypted) && (!this.config.emeEnabled || !this.keyLoader.emeController)) {\n const media = this.media;\n const error = new Error(`Encrypted track with no key in ${this.fragInfo(frag)} (media ${media ? 'attached mediaKeys: ' + media.mediaKeys : 'detached'})` );\n this.warn(error.message);\n // Ignore if media is detached or mediaKeys are set\n if (!media || media.mediaKeys) {\n return false;\n }\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.KEY_SYSTEM_ERROR,\n details: ErrorDetails.KEY_SYSTEM_NO_KEYS,\n fatal: false,\n error,\n frag\n });\n this.resetTransmuxer();\n return true;\n }\n return false;\n }\n fragContextChanged(frag) {\n const {\n fragCurrent\n } = this;\n return !frag || !fragCurrent || frag.sn !== fragCurrent.sn || frag.level !== fragCurrent.level;\n }\n fragBufferedComplete(frag, part) {\n const media = this.mediaBuffer ? this.mediaBuffer : this.media;\n this.log(`Buffered ${frag.type} sn: ${frag.sn}${part ? ' part: ' + part.index : ''} of ${this.fragInfo(frag, false, part)} > buffer:${media ? TimeRanges.toString(BufferHelper.getBuffered(media)) : '(detached)'})`);\n if (isMediaFragment(frag)) {\n var _this$levels;\n if (frag.type !== PlaylistLevelType.SUBTITLE) {\n const el = frag.elementaryStreams;\n if (!Object.keys(el).some(type => !!el[type])) {\n // empty segment\n this.state = State.IDLE;\n return;\n }\n }\n const level = (_this$levels = this.levels) == null ? void 0 : _this$levels[frag.level];\n if (level != null && level.fragmentError) {\n this.log(`Resetting level fragment error count of ${level.fragmentError} on frag buffered`);\n level.fragmentError = 0;\n }\n }\n this.state = State.IDLE;\n }\n _handleFragmentLoadComplete(fragLoadedEndData) {\n const {\n transmuxer\n } = this;\n if (!transmuxer) {\n return;\n }\n const {\n frag,\n part,\n partsLoaded\n } = fragLoadedEndData;\n // If we did not load parts, or loaded all parts, we have complete (not partial) fragment data\n const complete = !partsLoaded || partsLoaded.length === 0 || partsLoaded.some(fragLoaded => !fragLoaded);\n const chunkMeta = new ChunkMetadata(frag.level, frag.sn, frag.stats.chunkCount + 1, 0, part ? part.index : -1, !complete);\n transmuxer.flush(chunkMeta);\n }\n _handleFragmentLoadProgress(frag) {}\n _doFragLoad(frag, level, targetBufferTime = null, progressCallback) {\n var _frag$decryptdata;\n this.fragCurrent = frag;\n const details = level.details;\n if (!this.levels || !details) {\n throw new Error(`frag load aborted, missing level${details ? '' : ' detail'}s`);\n }\n let keyLoadingPromise = null;\n if (frag.encrypted && !((_frag$decryptdata = frag.decryptdata) != null && _frag$decryptdata.key)) {\n this.log(`Loading key for ${frag.sn} of [${details.startSN}-${details.endSN}], ${this.playlistLabel()} ${frag.level}`);\n this.state = State.KEY_LOADING;\n this.fragCurrent = frag;\n keyLoadingPromise = this.keyLoader.load(frag).then(keyLoadedData => {\n if (!this.fragContextChanged(keyLoadedData.frag)) {\n this.hls.trigger(Events.KEY_LOADED, keyLoadedData);\n if (this.state === State.KEY_LOADING) {\n this.state = State.IDLE;\n }\n return keyLoadedData;\n }\n });\n this.hls.trigger(Events.KEY_LOADING, {\n frag\n });\n if (this.fragCurrent === null) {\n this.log(`context changed in KEY_LOADING`);\n return Promise.resolve(null);\n }\n } else if (!frag.encrypted) {\n keyLoadingPromise = this.keyLoader.loadClear(frag, details.encryptedFragments, this.startFragRequested);\n if (keyLoadingPromise) {\n this.log(`[eme] blocking frag load until media-keys acquired`);\n }\n }\n const fragPrevious = this.fragPrevious;\n if (isMediaFragment(frag) && (!fragPrevious || frag.sn !== fragPrevious.sn)) {\n const shouldLoadParts = this.shouldLoadParts(level.details, frag.end);\n if (shouldLoadParts !== this.loadingParts) {\n this.log(`LL-Part loading ${shouldLoadParts ? 'ON' : 'OFF'} loading sn ${fragPrevious == null ? void 0 : fragPrevious.sn}->${frag.sn}`);\n this.loadingParts = shouldLoadParts;\n }\n }\n targetBufferTime = Math.max(frag.start, targetBufferTime || 0);\n if (this.loadingParts && isMediaFragment(frag)) {\n const partList = details.partList;\n if (partList && progressCallback) {\n if (targetBufferTime > details.fragmentEnd && details.fragmentHint) {\n frag = details.fragmentHint;\n }\n const partIndex = this.getNextPart(partList, frag, targetBufferTime);\n if (partIndex > -1) {\n const part = partList[partIndex];\n frag = this.fragCurrent = part.fragment;\n this.log(`Loading ${frag.type} sn: ${frag.sn} part: ${part.index} (${partIndex}/${partList.length - 1}) of ${this.fragInfo(frag, false, part)}) cc: ${frag.cc} [${details.startSN}-${details.endSN}], target: ${parseFloat(targetBufferTime.toFixed(3))}`);\n this.nextLoadPosition = part.start + part.duration;\n this.state = State.FRAG_LOADING;\n let _result;\n if (keyLoadingPromise) {\n _result = keyLoadingPromise.then(keyLoadedData => {\n if (!keyLoadedData || this.fragContextChanged(keyLoadedData.frag)) {\n return null;\n }\n return this.doFragPartsLoad(frag, part, level, progressCallback);\n }).catch(error => this.handleFragLoadError(error));\n } else {\n _result = this.doFragPartsLoad(frag, part, level, progressCallback).catch(error => this.handleFragLoadError(error));\n }\n this.hls.trigger(Events.FRAG_LOADING, {\n frag,\n part,\n targetBufferTime\n });\n if (this.fragCurrent === null) {\n return Promise.reject(new Error(`frag load aborted, context changed in FRAG_LOADING parts`));\n }\n return _result;\n } else if (!frag.url || this.loadedEndOfParts(partList, targetBufferTime)) {\n // Fragment hint has no parts\n return Promise.resolve(null);\n }\n }\n }\n if (isMediaFragment(frag) && this.loadingParts) {\n var _details$partList;\n this.log(`LL-Part loading OFF after next part miss @${targetBufferTime.toFixed(2)} Check buffer at sn: ${frag.sn} loaded parts: ${(_details$partList = details.partList) == null ? void 0 : _details$partList.filter(p => p.loaded).map(p => `[${p.start}-${p.end}]`)}`);\n this.loadingParts = false;\n } else if (!frag.url) {\n // Selected fragment hint for part but not loading parts\n return Promise.resolve(null);\n }\n this.log(`Loading ${frag.type} sn: ${frag.sn} of ${this.fragInfo(frag, false)}) cc: ${frag.cc} ${'[' + details.startSN + '-' + details.endSN + ']'}, target: ${parseFloat(targetBufferTime.toFixed(3))}`);\n // Don't update nextLoadPosition for fragments which are not buffered\n if (isFiniteNumber(frag.sn) && !this.bitrateTest) {\n this.nextLoadPosition = frag.start + frag.duration;\n }\n this.state = State.FRAG_LOADING;\n\n // Load key before streaming fragment data\n const dataOnProgress = this.config.progressive && frag.type !== PlaylistLevelType.SUBTITLE;\n let result;\n if (dataOnProgress && keyLoadingPromise) {\n result = keyLoadingPromise.then(keyLoadedData => {\n if (!keyLoadedData || this.fragContextChanged(keyLoadedData.frag)) {\n return null;\n }\n return this.fragmentLoader.load(frag, progressCallback);\n }).catch(error => this.handleFragLoadError(error));\n } else {\n // load unencrypted fragment data with progress event,\n // or handle fragment result after key and fragment are finished loading\n result = Promise.all([this.fragmentLoader.load(frag, dataOnProgress ? progressCallback : undefined), keyLoadingPromise]).then(([fragLoadedData]) => {\n if (!dataOnProgress && progressCallback) {\n progressCallback(fragLoadedData);\n }\n return fragLoadedData;\n }).catch(error => this.handleFragLoadError(error));\n }\n this.hls.trigger(Events.FRAG_LOADING, {\n frag,\n targetBufferTime\n });\n if (this.fragCurrent === null) {\n return Promise.reject(new Error(`frag load aborted, context changed in FRAG_LOADING`));\n }\n return result;\n }\n doFragPartsLoad(frag, fromPart, level, progressCallback) {\n return new Promise((resolve, reject) => {\n var _level$details;\n const partsLoaded = [];\n const initialPartList = (_level$details = level.details) == null ? void 0 : _level$details.partList;\n const loadPart = part => {\n this.fragmentLoader.loadPart(frag, part, progressCallback).then(partLoadedData => {\n partsLoaded[part.index] = partLoadedData;\n const loadedPart = partLoadedData.part;\n this.hls.trigger(Events.FRAG_LOADED, partLoadedData);\n const nextPart = getPartWith(level.details, frag.sn, part.index + 1) || findPart(initialPartList, frag.sn, part.index + 1);\n if (nextPart) {\n loadPart(nextPart);\n } else {\n return resolve({\n frag,\n part: loadedPart,\n partsLoaded\n });\n }\n }).catch(reject);\n };\n loadPart(fromPart);\n });\n }\n handleFragLoadError(error) {\n if ('data' in error) {\n const data = error.data;\n if (data.frag && data.details === ErrorDetails.INTERNAL_ABORTED) {\n this.handleFragLoadAborted(data.frag, data.part);\n } else if (data.frag && data.type === ErrorTypes.KEY_SYSTEM_ERROR) {\n data.frag.abortRequests();\n this.resetStartWhenNotLoaded();\n this.resetFragmentLoading(data.frag);\n } else {\n this.hls.trigger(Events.ERROR, data);\n }\n } else {\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.INTERNAL_EXCEPTION,\n err: error,\n error,\n fatal: true\n });\n }\n return null;\n }\n _handleTransmuxerFlush(chunkMeta) {\n const context = this.getCurrentContext(chunkMeta);\n if (!context || this.state !== State.PARSING) {\n if (!this.fragCurrent && this.state !== State.STOPPED && this.state !== State.ERROR) {\n this.state = State.IDLE;\n }\n return;\n }\n const {\n frag,\n part,\n level\n } = context;\n const now = self.performance.now();\n frag.stats.parsing.end = now;\n if (part) {\n part.stats.parsing.end = now;\n }\n // See if part loading should be disabled/enabled based on buffer and playback position.\n const levelDetails = this.getLevelDetails();\n const loadingPartsAtEdge = levelDetails && frag.sn > levelDetails.endSN;\n const shouldLoadParts = loadingPartsAtEdge || this.shouldLoadParts(levelDetails, frag.end);\n if (shouldLoadParts !== this.loadingParts) {\n this.log(`LL-Part loading ${shouldLoadParts ? 'ON' : 'OFF'} after parsing segment ending @${frag.end.toFixed(2)}`);\n this.loadingParts = shouldLoadParts;\n }\n this.updateLevelTiming(frag, part, level, chunkMeta.partial);\n }\n shouldLoadParts(details, bufferEnd) {\n if (this.config.lowLatencyMode) {\n if (!details) {\n return this.loadingParts;\n }\n if (details.partList) {\n var _details$fragmentHint;\n // Buffer must be ahead of first part + duration of parts after last segment\n // and playback must be at or past segment adjacent to part list\n const firstPart = details.partList[0];\n // Loading of VTT subtitle parts is not implemented in subtitle-stream-controller (#7460)\n if (firstPart.fragment.type === PlaylistLevelType.SUBTITLE) {\n return false;\n }\n const safePartStart = firstPart.end + (((_details$fragmentHint = details.fragmentHint) == null ? void 0 : _details$fragmentHint.duration) || 0);\n if (bufferEnd >= safePartStart) {\n var _this$media;\n const playhead = this.hls.hasEnoughToStart ? ((_this$media = this.media) == null ? void 0 : _this$media.currentTime) || this.lastCurrentTime : this.getLoadPosition();\n if (playhead > firstPart.start - firstPart.fragment.duration) {\n return true;\n }\n }\n }\n }\n return false;\n }\n getCurrentContext(chunkMeta) {\n const {\n levels,\n fragCurrent\n } = this;\n const {\n level: levelIndex,\n sn,\n part: partIndex\n } = chunkMeta;\n if (!(levels != null && levels[levelIndex])) {\n this.warn(`Levels object was unset while buffering fragment ${sn} of ${this.playlistLabel()} ${levelIndex}. The current chunk will not be buffered.`);\n return null;\n }\n const level = levels[levelIndex];\n const levelDetails = level.details;\n const part = partIndex > -1 ? getPartWith(levelDetails, sn, partIndex) : null;\n const frag = part ? part.fragment : getFragmentWithSN(levelDetails, sn, fragCurrent);\n if (!frag) {\n return null;\n }\n if (fragCurrent && fragCurrent !== frag) {\n frag.stats = fragCurrent.stats;\n }\n return {\n frag,\n part,\n level\n };\n }\n bufferFragmentData(data, frag, part, chunkMeta, noBacktracking) {\n if (this.state !== State.PARSING) {\n return;\n }\n const {\n data1,\n data2\n } = data;\n let buffer = data1;\n if (data2) {\n // Combine the moof + mdat so that we buffer with a single append\n buffer = appendUint8Array(data1, data2);\n }\n if (!buffer.length) {\n return;\n }\n const offsetTimestamp = this.initPTS[frag.cc];\n const offset = offsetTimestamp ? -offsetTimestamp.baseTime / offsetTimestamp.timescale : undefined;\n const segment = {\n type: data.type,\n frag,\n part,\n chunkMeta,\n offset,\n parent: frag.type,\n data: buffer\n };\n this.hls.trigger(Events.BUFFER_APPENDING, segment);\n if (data.dropped && data.independent && !part) {\n if (noBacktracking) {\n return;\n }\n // Clear buffer so that we reload previous segments sequentially if required\n this.flushBufferGap(frag);\n }\n }\n flushBufferGap(frag) {\n const media = this.media;\n if (!media) {\n return;\n }\n // If currentTime is not buffered, clear the back buffer so that we can backtrack as much as needed\n if (!BufferHelper.isBuffered(media, media.currentTime)) {\n this.flushMainBuffer(0, frag.start);\n return;\n }\n // Remove back-buffer without interrupting playback to allow back tracking\n const currentTime = media.currentTime;\n const bufferInfo = BufferHelper.bufferInfo(media, currentTime, 0);\n const fragDuration = frag.duration;\n const segmentFraction = Math.min(this.config.maxFragLookUpTolerance * 2, fragDuration * 0.25);\n const start = Math.max(Math.min(frag.start - segmentFraction, bufferInfo.end - segmentFraction), currentTime + segmentFraction);\n if (frag.start - start > segmentFraction) {\n this.flushMainBuffer(start, frag.start);\n }\n }\n getFwdBufferInfo(bufferable, type) {\n var _this$media2;\n const pos = this.getLoadPosition();\n if (!isFiniteNumber(pos)) {\n return null;\n }\n const backwardSeek = this.lastCurrentTime > pos;\n const maxBufferHole = backwardSeek || (_this$media2 = this.media) != null && _this$media2.paused ? 0 : this.config.maxBufferHole;\n return this.getFwdBufferInfoAtPos(bufferable, pos, type, maxBufferHole);\n }\n getFwdBufferInfoAtPos(bufferable, pos, type, maxBufferHole) {\n const bufferInfo = BufferHelper.bufferInfo(bufferable, pos, maxBufferHole);\n // Workaround flaw in getting forward buffer when maxBufferHole is smaller than gap at current pos\n if (bufferInfo.len === 0 && bufferInfo.nextStart !== undefined) {\n const bufferedFragAtPos = this.fragmentTracker.getBufferedFrag(pos, type);\n if (bufferedFragAtPos && (bufferInfo.nextStart <= bufferedFragAtPos.end || bufferedFragAtPos.gap)) {\n const gapDuration = Math.max(Math.min(bufferInfo.nextStart, bufferedFragAtPos.end) - pos, maxBufferHole);\n return BufferHelper.bufferInfo(bufferable, pos, gapDuration);\n }\n }\n return bufferInfo;\n }\n getMaxBufferLength(levelBitrate) {\n const {\n config\n } = this;\n let maxBufLen;\n if (levelBitrate) {\n maxBufLen = Math.max(8 * config.maxBufferSize / levelBitrate, config.maxBufferLength);\n } else {\n maxBufLen = config.maxBufferLength;\n }\n return Math.min(maxBufLen, config.maxMaxBufferLength);\n }\n exceedsMaxBuffer(bufferInfo, maxBufLen, selected) {\n const nextStart = bufferInfo.nextStart;\n if (nextStart && selected.start > nextStart) {\n const bufferedRanges = bufferInfo.buffered;\n if (bufferedRanges) {\n let fullBufferLength = bufferInfo.len;\n const bufferedIndex = bufferInfo.bufferedIndex;\n for (let i = bufferedRanges.length - 1; i > bufferedIndex; i--) {\n if (bufferedRanges[i].start < selected.start) {\n fullBufferLength += bufferedRanges[i].end - bufferedRanges[i].start;\n }\n }\n return fullBufferLength >= maxBufLen;\n }\n }\n return false;\n }\n reduceMaxBufferLength(threshold, fragDuration) {\n const config = this.config;\n const minLength = Math.max(Math.min(threshold - fragDuration, config.maxBufferLength), fragDuration);\n const reducedLength = Math.max(threshold - fragDuration * 3, config.maxMaxBufferLength / 2, minLength);\n if (reducedLength >= minLength) {\n // reduce max buffer length as it might be too high. we do this to avoid loop flushing ...\n config.maxMaxBufferLength = reducedLength;\n this.warn(`Reduce max buffer length to ${reducedLength}s`);\n return true;\n }\n return false;\n }\n getAppendedFrag(position, playlistType = PlaylistLevelType.MAIN) {\n const fragOrPart = this.fragmentTracker ? this.fragmentTracker.getAppendedFrag(position, playlistType) : null;\n if (fragOrPart && 'fragment' in fragOrPart) {\n return fragOrPart.fragment;\n }\n return fragOrPart;\n }\n getNextFragment(pos, levelDetails) {\n const fragments = levelDetails.fragments;\n const fragLen = fragments.length;\n if (!fragLen) {\n return null;\n }\n\n // find fragment index, contiguous with end of buffer position\n const {\n config\n } = this;\n const playlistStart = levelDetails.fragmentStart;\n const canLoadParts = config.lowLatencyMode && !!levelDetails.partList;\n let frag = null;\n if (levelDetails.live) {\n const initialLiveManifestSize = config.initialLiveManifestSize;\n if (fragLen < initialLiveManifestSize) {\n this.warn(`Not enough fragments to start playback (have: ${fragLen}, need: ${initialLiveManifestSize})`);\n return null;\n }\n // The real fragment start times for a live stream are only known after the PTS range for that level is known.\n // In order to discover the range, we load the best matching fragment for that level and demux it.\n // Do not load using live logic if the starting frag is requested - we want to use getFragmentAtPosition() so that\n // we get the fragment matching that start time\n if (!levelDetails.PTSKnown && !this.startFragRequested && this.startPosition === -1 || pos < playlistStart) {\n var _frag;\n if (canLoadParts && !this.loadingParts) {\n this.log(`LL-Part loading ON for initial live fragment`);\n this.loadingParts = true;\n }\n frag = this.getInitialLiveFragment(levelDetails);\n const configValue = this.config.startPosition;\n const mainStart = this.hls.startPosition;\n const liveSyncPosition = this.hls.liveSyncPosition;\n const fragStart = ((_frag = frag) == null ? void 0 : _frag.start) || 0;\n let startPosition;\n let reason;\n if (mainStart !== -1 && mainStart >= playlistStart) {\n startPosition = mainStart;\n reason = mainStart === configValue ? 'config' : 'next load start';\n } else if (liveSyncPosition !== null) {\n startPosition = liveSyncPosition;\n reason = 'live edge';\n } else {\n startPosition = pos;\n reason = 'buffer pos';\n }\n if (startPosition < fragStart) {\n startPosition = fragStart;\n reason = 'live frag start';\n }\n if (startPosition < playlistStart) {\n startPosition = playlistStart;\n reason = 'playlist start';\n }\n if (this.startPosition != startPosition || this.nextLoadPosition != startPosition) {\n this.log(`Setting startPosition to ${startPosition.toFixed(3)} ${mainStart === -1 ? '' : `(from ${configValue}) `}based on ${reason}. live edge: ${liveSyncPosition} live frag start: ${fragStart.toFixed(3)} playlist start: ${playlistStart.toFixed(3)} buffer pos: ${pos}`);\n this.startPosition = this.nextLoadPosition = startPosition;\n }\n }\n } else if (pos <= playlistStart) {\n // VoD playlist: if loadPosition before start of playlist, load first fragment\n frag = fragments[0];\n }\n\n // If we haven't run into any special cases already, just load the fragment most closely matching the requested position\n if (!frag) {\n const end = this.loadingParts ? levelDetails.partEnd : levelDetails.fragmentEnd;\n frag = this.getFragmentAtPosition(pos, end, levelDetails);\n }\n let programFrag = this.filterReplacedPrimary(frag, levelDetails);\n if (!programFrag && frag) {\n const curSNIdx = frag.sn - levelDetails.startSN;\n programFrag = this.filterReplacedPrimary(fragments[curSNIdx + 1] || null, levelDetails);\n }\n return this.mapToInitFragWhenRequired(programFrag);\n }\n isLoopLoading(frag, targetBufferTime) {\n if (this.nextLoadPosition <= targetBufferTime) {\n return false;\n }\n const trackerState = this.fragmentTracker.getState(frag);\n return trackerState === FragmentState.OK || trackerState === FragmentState.PARTIAL && !!frag.gap;\n }\n getNextFragmentLoopLoading(frag, levelDetails, bufferInfo, playlistType, maxBufLen) {\n let nextFragment = null;\n if (frag.gap) {\n nextFragment = this.getNextFragment(this.nextLoadPosition, levelDetails);\n if (nextFragment && !nextFragment.gap && bufferInfo.nextStart) {\n // Media buffered after GAP tags should not make the next buffer timerange exceed forward buffer length\n const nextbufferInfo = this.getFwdBufferInfoAtPos(this.mediaBuffer ? this.mediaBuffer : this.media, bufferInfo.nextStart, playlistType, 0);\n if (nextbufferInfo !== null && bufferInfo.len + nextbufferInfo.len >= maxBufLen) {\n // Returning here might result in not finding an audio and video candiate to skip to\n const sn = nextFragment.sn;\n if (this.loopSn !== sn) {\n this.log(`buffer full after gaps in \"${playlistType}\" playlist starting at sn: ${sn}`);\n this.loopSn = sn;\n }\n return null;\n }\n }\n }\n this.loopSn = undefined;\n return nextFragment;\n }\n get primaryPrefetch() {\n if (interstitialsEnabled(this.config)) {\n var _this$hls$interstitia;\n const playingInterstitial = (_this$hls$interstitia = this.hls.interstitialsManager) == null || (_this$hls$interstitia = _this$hls$interstitia.playingItem) == null ? void 0 : _this$hls$interstitia.event;\n if (playingInterstitial) {\n return true;\n }\n }\n return false;\n }\n filterReplacedPrimary(frag, details) {\n if (!frag) {\n return frag;\n }\n if (interstitialsEnabled(this.config) && frag.type !== PlaylistLevelType.SUBTITLE) {\n // Do not load fragments outside the buffering schedule segment\n const interstitials = this.hls.interstitialsManager;\n const bufferingItem = interstitials == null ? void 0 : interstitials.bufferingItem;\n if (bufferingItem) {\n const bufferingInterstitial = bufferingItem.event;\n if (bufferingInterstitial) {\n // Do not stream fragments while buffering Interstitial Events (except for overlap at the start)\n if (bufferingInterstitial.appendInPlace || Math.abs(frag.start - bufferingItem.start) > 1 || bufferingItem.start === 0) {\n return null;\n }\n } else {\n // Limit fragment loading to media in schedule item\n if (frag.end <= bufferingItem.start && (details == null ? void 0 : details.live) === false) {\n // fragment ends by schedule item start\n // this.fragmentTracker.fragBuffered(frag, true);\n return null;\n }\n if (frag.start > bufferingItem.end && bufferingItem.nextEvent) {\n // fragment is past schedule item end\n // allow some overflow when not appending in place to prevent stalls\n if (bufferingItem.nextEvent.appendInPlace || frag.start - bufferingItem.end > 1) {\n return null;\n }\n }\n }\n }\n // Skip loading of fragments that overlap completely with appendInPlace interstitials\n const playerQueue = interstitials == null ? void 0 : interstitials.playerQueue;\n if (playerQueue) {\n for (let i = playerQueue.length; i--;) {\n const interstitial = playerQueue[i].interstitial;\n if (interstitial.appendInPlace && frag.start >= interstitial.startTime && frag.end <= interstitial.resumeTime) {\n return null;\n }\n }\n }\n }\n return frag;\n }\n mapToInitFragWhenRequired(frag) {\n // If an initSegment is present, it must be buffered first\n if (frag != null && frag.initSegment && !frag.initSegment.data && !this.bitrateTest) {\n return frag.initSegment;\n }\n return frag;\n }\n getNextPart(partList, frag, targetBufferTime) {\n let nextPart = -1;\n let contiguous = false;\n let independentAttrOmitted = true;\n for (let i = 0, len = partList.length; i < len; i++) {\n const part = partList[i];\n independentAttrOmitted = independentAttrOmitted && !part.independent;\n if (nextPart > -1 && targetBufferTime < part.start) {\n break;\n }\n const loaded = part.loaded;\n if (loaded) {\n nextPart = -1;\n } else if (contiguous || (part.independent || independentAttrOmitted) && part.fragment === frag) {\n if (part.fragment !== frag) {\n this.warn(`Need buffer at ${targetBufferTime} but next unloaded part starts at ${part.start}`);\n }\n nextPart = i;\n }\n contiguous = loaded;\n }\n return nextPart;\n }\n loadedEndOfParts(partList, targetBufferTime) {\n let part;\n for (let i = partList.length; i--;) {\n part = partList[i];\n if (!part.loaded) {\n return false;\n }\n if (targetBufferTime > part.start) {\n return true;\n }\n }\n return false;\n }\n\n /*\n This method is used find the best matching first fragment for a live playlist. This fragment is used to calculate the\n \"sliding\" of the playlist, which is its offset from the start of playback. After sliding we can compute the real\n start and end times for each fragment in the playlist (after which this method will not need to be called).\n */\n getInitialLiveFragment(levelDetails) {\n const fragments = levelDetails.fragments;\n const fragPrevious = this.fragPrevious;\n let frag = null;\n if (fragPrevious) {\n if (levelDetails.hasProgramDateTime) {\n // Prefer using PDT, because it can be accurate enough to choose the correct fragment without knowing the level sliding\n frag = findFragmentByPDT(fragments, fragPrevious.endProgramDateTime, this.config.maxFragLookUpTolerance);\n if (frag) {\n this.log(`Live playlist, switching playlist, load frag with same PDT: ${fragPrevious.programDateTime}`);\n }\n }\n if (!frag) {\n // SN does not need to be accurate between renditions, but depending on the packaging it may be so.\n const targetSN = fragPrevious.sn + 1;\n if (targetSN >= levelDetails.startSN && targetSN <= levelDetails.endSN) {\n const fragNext = fragments[targetSN - levelDetails.startSN];\n // Ensure that we're staying within the continuity range, since PTS resets upon a new range\n if (fragPrevious.cc === fragNext.cc) {\n frag = fragNext;\n this.log(`Live playlist, switching playlist, load frag with next SN: ${frag.sn}`);\n }\n }\n // It's important to stay within the continuity range if available; otherwise the fragments in the playlist\n // will have the wrong start times\n if (!frag) {\n frag = findNearestWithCC(levelDetails, fragPrevious.cc, fragPrevious.end);\n if (frag) {\n this.log(`Live playlist, switching playlist, load frag with same CC: ${frag.sn}`);\n }\n }\n }\n } else {\n // Find a new start fragment when fragPrevious is null\n const liveStart = this.hls.liveSyncPosition;\n if (liveStart !== null) {\n frag = this.getFragmentAtPosition(liveStart, this.bitrateTest ? levelDetails.fragmentEnd : levelDetails.edge, levelDetails);\n }\n }\n return frag;\n }\n\n /*\n This method finds the best matching fragment given the provided position.\n */\n getFragmentAtPosition(bufferEnd, end, levelDetails) {\n const {\n config\n } = this;\n let {\n fragPrevious\n } = this;\n let {\n fragments,\n endSN\n } = levelDetails;\n const {\n fragmentHint\n } = levelDetails;\n const {\n maxFragLookUpTolerance\n } = config;\n const partList = levelDetails.partList;\n const loadingParts = !!(this.loadingParts && partList != null && partList.length && fragmentHint);\n if (loadingParts && !this.bitrateTest && partList[partList.length - 1].fragment.sn === fragmentHint.sn) {\n // Include incomplete fragment with parts at end\n fragments = fragments.concat(fragmentHint);\n endSN = fragmentHint.sn;\n }\n let frag;\n if (bufferEnd < end) {\n var _this$media3;\n const backwardSeek = bufferEnd < this.lastCurrentTime;\n const lookupTolerance = backwardSeek || bufferEnd > end - maxFragLookUpTolerance || (_this$media3 = this.media) != null && _this$media3.paused || !this.startFragRequested ? 0 : maxFragLookUpTolerance;\n // Remove the tolerance if it would put the bufferEnd past the actual end of stream\n // Uses buffer and sequence number to calculate switch segment (required if using EXT-X-DISCONTINUITY-SEQUENCE)\n frag = findFragmentByPTS(fragPrevious, fragments, bufferEnd, lookupTolerance);\n } else {\n // reach end of playlist\n frag = fragments[fragments.length - 1];\n }\n if (frag) {\n const curSNIdx = frag.sn - levelDetails.startSN;\n // Move fragPrevious forward to support forcing the next fragment to load\n // when the buffer catches up to a previously buffered range.\n const fragState = this.fragmentTracker.getState(frag);\n if (fragState === FragmentState.OK || fragState === FragmentState.PARTIAL && frag.gap) {\n fragPrevious = frag;\n }\n if (fragPrevious && frag.sn === fragPrevious.sn && (!loadingParts || partList[0].fragment.sn > frag.sn || !levelDetails.live)) {\n // Force the next fragment to load if the previous one was already selected. This can occasionally happen with\n // non-uniform fragment durations\n const sameLevel = frag.level === fragPrevious.level;\n if (sameLevel) {\n const nextFrag = fragments[curSNIdx + 1];\n if (frag.sn < endSN && this.fragmentTracker.getState(nextFrag) !== FragmentState.OK) {\n frag = nextFrag;\n } else {\n frag = null;\n }\n }\n }\n }\n return frag;\n }\n alignPlaylists(details, previousDetails, switchDetails) {\n // TODO: If not for `shouldAlignOnDiscontinuities` requiring fragPrevious.cc,\n // this could all go in level-helper mergeDetails()\n const length = details.fragments.length;\n if (!length) {\n this.warn(`No fragments in live playlist`);\n return 0;\n }\n const slidingStart = details.fragmentStart;\n const firstLevelLoad = !previousDetails;\n const aligned = details.alignedSliding && isFiniteNumber(slidingStart);\n if (firstLevelLoad || !aligned && !slidingStart) {\n alignStream(switchDetails, details);\n const alignedSlidingStart = details.fragmentStart;\n this.log(`Live playlist sliding: ${alignedSlidingStart.toFixed(2)} start-sn: ${previousDetails ? previousDetails.startSN : 'na'}->${details.startSN} fragments: ${length}`);\n return alignedSlidingStart;\n }\n return slidingStart;\n }\n waitForCdnTuneIn(details) {\n // Wait for Low-Latency CDN Tune-in to get an updated playlist\n const advancePartLimit = 3;\n return details.live && details.canBlockReload && details.partTarget && details.tuneInGoal > Math.max(details.partHoldBack, details.partTarget * advancePartLimit);\n }\n setStartPosition(details, sliding) {\n // compute start position if set to -1. use it straight away if value is defined\n let startPosition = this.startPosition;\n if (startPosition < sliding) {\n startPosition = -1;\n }\n const timelineOffset = this.timelineOffset;\n if (startPosition === -1) {\n // Use Playlist EXT-X-START:TIME-OFFSET when set\n // Prioritize Multivariant Playlist offset so that main, audio, and subtitle stream-controller start times match\n const offsetInMultivariantPlaylist = this.startTimeOffset !== null;\n const startTimeOffset = offsetInMultivariantPlaylist ? this.startTimeOffset : details.startTimeOffset;\n if (startTimeOffset !== null && isFiniteNumber(startTimeOffset)) {\n startPosition = sliding + startTimeOffset;\n if (startTimeOffset < 0) {\n startPosition += details.edge;\n }\n startPosition = Math.min(Math.max(sliding, startPosition), sliding + details.totalduration);\n this.log(`Setting startPosition to ${startPosition} for start time offset ${startTimeOffset} found in ${offsetInMultivariantPlaylist ? 'multivariant' : 'media'} playlist`);\n this.startPosition = startPosition;\n } else if (details.live) {\n // Leave this.startPosition at -1, so that we can use `getInitialLiveFragment` logic when startPosition has\n // not been specified via the config or an as an argument to startLoad (#3736).\n startPosition = this.hls.liveSyncPosition || sliding;\n this.log(`Setting startPosition to -1 to start at live edge ${startPosition}`);\n this.startPosition = -1;\n } else {\n this.log(`setting startPosition to 0 by default`);\n this.startPosition = startPosition = 0;\n }\n this.lastCurrentTime = startPosition + timelineOffset;\n }\n this.nextLoadPosition = startPosition + timelineOffset;\n }\n getLoadPosition() {\n var _this$hls;\n const {\n media\n } = this;\n // if we have not yet loaded any fragment, start loading from start position\n let pos = 0;\n if ((_this$hls = this.hls) != null && _this$hls.hasEnoughToStart && media) {\n pos = media.currentTime;\n } else if (this.nextLoadPosition >= 0) {\n pos = this.nextLoadPosition;\n }\n return pos;\n }\n handleFragLoadAborted(frag, part) {\n if (this.transmuxer && frag.type === this.playlistType && isMediaFragment(frag) && frag.stats.aborted) {\n this.log(`Fragment ${frag.sn}${part ? ' part ' + part.index : ''} of ${this.playlistLabel()} ${frag.level} was aborted`);\n this.resetFragmentLoading(frag);\n }\n }\n resetFragmentLoading(frag) {\n if (!this.fragCurrent || !this.fragContextChanged(frag) && this.state !== State.FRAG_LOADING_WAITING_RETRY) {\n this.state = State.IDLE;\n }\n }\n onFragmentOrKeyLoadError(filterType, data) {\n var _this$hls$latestLevel;\n if (data.chunkMeta && !data.frag) {\n const context = this.getCurrentContext(data.chunkMeta);\n if (context) {\n data.frag = context.frag;\n }\n }\n const frag = data.frag;\n // Handle frag error related to caller's filterType\n if (!frag || frag.type !== filterType || !this.levels) {\n return;\n }\n if (this.fragContextChanged(frag)) {\n var _this$fragCurrent;\n this.warn(`Frag load error must match current frag to retry ${frag.url} > ${(_this$fragCurrent = this.fragCurrent) == null ? void 0 : _this$fragCurrent.url}`);\n return;\n }\n const gapTagEncountered = data.details === ErrorDetails.FRAG_GAP;\n if (gapTagEncountered) {\n this.fragmentTracker.fragBuffered(frag, true);\n }\n // keep retrying until the limit will be reached\n const errorAction = data.errorAction;\n if (!errorAction) {\n this.state = State.ERROR;\n return;\n }\n const {\n action,\n flags,\n retryCount = 0,\n retryConfig\n } = errorAction;\n const couldRetry = !!retryConfig;\n const retry = couldRetry && action === NetworkErrorAction.RetryRequest;\n const noAlternate = couldRetry && !errorAction.resolved && flags === ErrorActionFlags.MoveAllAlternatesMatchingHost;\n const live = (_this$hls$latestLevel = this.hls.latestLevelDetails) == null ? void 0 : _this$hls$latestLevel.live;\n if (!retry && noAlternate && isMediaFragment(frag) && !frag.endList && live && !isUnusableKeyError(data)) {\n this.resetFragmentErrors(filterType);\n this.treatAsGap(frag);\n errorAction.resolved = true;\n } else if ((retry || noAlternate) && retryCount < retryConfig.maxNumRetry) {\n var _data$response;\n const offlineStatus = offlineHttpStatus((_data$response = data.response) == null ? void 0 : _data$response.code);\n const delay = getRetryDelay(retryConfig, retryCount);\n this.resetStartWhenNotLoaded();\n this.retryDate = self.performance.now() + delay;\n this.state = State.FRAG_LOADING_WAITING_RETRY;\n errorAction.resolved = true;\n if (offlineStatus) {\n this.log(`Waiting for connection (offline)`);\n this.retryDate = Infinity;\n data.reason = 'offline';\n return;\n }\n this.warn(`Fragment ${frag.sn} of ${filterType} ${frag.level} errored with ${data.details}, retrying loading ${retryCount + 1}/${retryConfig.maxNumRetry} in ${delay}ms`);\n } else if (retryConfig) {\n this.resetFragmentErrors(filterType);\n if (retryCount < retryConfig.maxNumRetry) {\n // Network retry is skipped when level switch is preferred\n if (!gapTagEncountered && action !== NetworkErrorAction.RemoveAlternatePermanently) {\n errorAction.resolved = true;\n }\n } else {\n this.warn(`${data.details} reached or exceeded max retry (${retryCount})`);\n return;\n }\n } else if (action === NetworkErrorAction.SendAlternateToPenaltyBox) {\n this.state = State.WAITING_LEVEL;\n } else {\n this.state = State.ERROR;\n }\n // Perform next async tick sooner to speed up error action resolution\n this.tickImmediate();\n }\n checkRetryDate() {\n const now = self.performance.now();\n const retryDate = this.retryDate;\n // if current time is gt than retryDate, or if media seeking let's switch to IDLE state to retry loading\n const waitingForConnection = retryDate === Infinity;\n if (!retryDate || now >= retryDate || waitingForConnection && !offlineHttpStatus(0)) {\n if (waitingForConnection) {\n this.log(`Connection restored (online)`);\n }\n this.resetStartWhenNotLoaded();\n this.state = State.IDLE;\n }\n }\n reduceLengthAndFlushBuffer(data) {\n // if in appending state\n if (this.state === State.PARSING || this.state === State.PARSED) {\n const frag = data.frag;\n const playlistType = data.parent;\n const bufferedInfo = this.getFwdBufferInfo(this.mediaBuffer, playlistType);\n // 0.5 : tolerance needed as some browsers stalls playback before reaching buffered end\n // reduce max buf len if current position is buffered\n const buffered = bufferedInfo && bufferedInfo.len > 0.5;\n if (buffered) {\n this.reduceMaxBufferLength(bufferedInfo.len, (frag == null ? void 0 : frag.duration) || 10);\n }\n const flushBuffer = !buffered;\n if (flushBuffer) {\n // current position is not buffered, but browser is still complaining about buffer full error\n // this happens on IE/Edge, refer to https://github.com/video-dev/hls.js/pull/708\n // in that case flush the whole audio buffer to recover\n this.warn(`Buffer full error while media.currentTime (${this.getLoadPosition()}) is not buffered, flush ${playlistType} buffer`);\n }\n if (frag) {\n this.fragmentTracker.removeFragment(frag);\n this.nextLoadPosition = frag.start;\n }\n this.resetLoadingState();\n return flushBuffer;\n }\n return false;\n }\n resetFragmentErrors(filterType) {\n if (filterType === PlaylistLevelType.AUDIO) {\n // Reset current fragment since audio track audio is essential and may not have a fail-over track\n this.fragCurrent = null;\n }\n // Fragment errors that result in a level switch or redundant fail-over\n // should reset the stream controller state to idle\n if (!this.hls.hasEnoughToStart) {\n this.startFragRequested = false;\n }\n if (this.state !== State.STOPPED) {\n this.state = State.IDLE;\n }\n }\n afterBufferFlushed(media, bufferType, playlistType) {\n if (!media) {\n return;\n }\n // After successful buffer flushing, filter flushed fragments from bufferedFrags use mediaBuffered instead of media\n // (so that we will check against video.buffered ranges in case of alt audio track)\n const bufferedTimeRanges = BufferHelper.getBuffered(media);\n this.fragmentTracker.detectEvictedFragments(bufferType, bufferedTimeRanges, playlistType);\n if (this.state === State.ENDED) {\n this.resetLoadingState();\n }\n }\n resetLoadingState() {\n this.log('Reset loading state');\n this.fragCurrent = null;\n this.fragPrevious = null;\n if (this.state !== State.STOPPED) {\n this.state = State.IDLE;\n }\n }\n resetStartWhenNotLoaded() {\n // if loadedmetadata is not set, it means that first frag request failed\n // in that case, reset startFragRequested flag\n if (!this.hls.hasEnoughToStart) {\n this.startFragRequested = false;\n const level = this.levelLastLoaded;\n const details = level ? level.details : null;\n if (details != null && details.live) {\n // Update the start position and return to IDLE to recover live start\n this.log(`resetting startPosition for live start`);\n this.startPosition = -1;\n this.setStartPosition(details, details.fragmentStart);\n this.resetLoadingState();\n } else {\n this.nextLoadPosition = this.startPosition;\n }\n }\n }\n resetWhenMissingContext(chunkMeta) {\n this.log(`Loading context changed while buffering sn ${chunkMeta.sn} of ${this.playlistLabel()} ${chunkMeta.level === -1 ? '<removed>' : chunkMeta.level}. This chunk will not be buffered.`);\n this.removeUnbufferedFrags();\n this.resetStartWhenNotLoaded();\n this.resetLoadingState();\n }\n removeUnbufferedFrags(start = 0) {\n this.fragmentTracker.removeFragmentsInRange(start, Infinity, this.playlistType, false, true);\n }\n updateLevelTiming(frag, part, level, partial) {\n const details = level.details;\n if (!details) {\n this.warn('level.details undefined');\n return;\n }\n const parsed = Object.keys(frag.elementaryStreams).reduce((result, type) => {\n const info = frag.elementaryStreams[type];\n if (info) {\n const parsedDuration = info.endPTS - info.startPTS;\n if (parsedDuration <= 0) {\n // Destroy the transmuxer after it's next time offset failed to advance because duration was <= 0.\n // The new transmuxer will be configured with a time offset matching the next fragment start,\n // preventing the timeline from shifting.\n this.warn(`Could not parse fragment ${frag.sn} ${type} duration reliably (${parsedDuration})`);\n return result || false;\n }\n const drift = partial ? 0 : updateFragPTSDTS(details, frag, info.startPTS, info.endPTS, info.startDTS, info.endDTS, this);\n this.hls.trigger(Events.LEVEL_PTS_UPDATED, {\n details,\n level,\n drift,\n type,\n frag,\n start: info.startPTS,\n end: info.endPTS\n });\n return true;\n }\n return result;\n }, false);\n if (!parsed) {\n var _this$transmuxer;\n const mediaNotFound = ((_this$transmuxer = this.transmuxer) == null ? void 0 : _this$transmuxer.error) === null;\n if (level.fragmentError === 0 || mediaNotFound && (level.fragmentError < 2 || frag.endList)) {\n // Mark and track the odd (or last) empty segment as a gap to avoid reloading\n this.treatAsGap(frag, level);\n }\n if (mediaNotFound) {\n const error = new Error(`Found no media in fragment ${frag.sn} of ${this.playlistLabel()} ${frag.level} resetting transmuxer to fallback to playlist timing`);\n this.warn(error.message);\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.FRAG_PARSING_ERROR,\n fatal: false,\n error,\n frag,\n reason: `Found no media in msn ${frag.sn} of ${this.playlistLabel()} \"${level.url}\"`\n });\n if (!this.hls) {\n return;\n }\n this.resetTransmuxer();\n }\n // For this error fallthrough. Marking parsed will allow advancing to next fragment.\n }\n this.state = State.PARSED;\n this.log(`Parsed ${frag.type} sn: ${frag.sn}${part ? ' part: ' + part.index : ''} of ${this.fragInfo(frag, false, part)})`);\n this.hls.trigger(Events.FRAG_PARSED, {\n frag,\n part\n });\n }\n playlistLabel() {\n return this.playlistType === PlaylistLevelType.MAIN ? 'level' : 'track';\n }\n fragInfo(frag, pts = true, part) {\n var _ref, _ref2;\n return `${this.playlistLabel()} ${frag.level} (${part ? 'part' : 'frag'}:[${((_ref = pts && !part ? frag.startPTS : (part || frag).start) != null ? _ref : NaN).toFixed(3)}-${((_ref2 = pts && !part ? frag.endPTS : (part || frag).end) != null ? _ref2 : NaN).toFixed(3)}]${part && frag.type === 'main' ? 'INDEPENDENT=' + (part.independent ? 'YES' : 'NO') : ''}`;\n }\n treatAsGap(frag, level) {\n if (level) {\n level.fragmentError++;\n }\n frag.gap = true;\n this.fragmentTracker.removeFragment(frag);\n this.fragmentTracker.fragBuffered(frag, true);\n }\n resetTransmuxer() {\n var _this$transmuxer2;\n (_this$transmuxer2 = this.transmuxer) == null || _this$transmuxer2.reset();\n }\n recoverWorkerError(data) {\n if (data.event === 'demuxerWorker') {\n this.fragmentTracker.removeAllFragments();\n if (this.transmuxer) {\n this.transmuxer.destroy();\n this.transmuxer = null;\n }\n this.resetStartWhenNotLoaded();\n this.resetLoadingState();\n }\n }\n set state(nextState) {\n const previousState = this._state;\n if (previousState !== nextState) {\n this._state = nextState;\n this.log(`${previousState}->${nextState}`);\n }\n }\n get state() {\n return this._state;\n }\n}\nfunction interstitialsEnabled(config) {\n return !!config.interstitialsController && config.enableInterstitialPlayback !== false;\n}\n\nclass ChunkCache {\n constructor() {\n this.chunks = [];\n this.dataLength = 0;\n }\n push(chunk) {\n this.chunks.push(chunk);\n this.dataLength += chunk.length;\n }\n flush() {\n const {\n chunks,\n dataLength\n } = this;\n let result;\n if (!chunks.length) {\n return new Uint8Array(0);\n } else if (chunks.length === 1) {\n result = chunks[0];\n } else {\n result = concatUint8Arrays(chunks, dataLength);\n }\n this.reset();\n return result;\n }\n reset() {\n this.chunks.length = 0;\n this.dataLength = 0;\n }\n}\nfunction concatUint8Arrays(chunks, dataLength) {\n const result = new Uint8Array(dataLength);\n let offset = 0;\n for (let i = 0; i < chunks.length; i++) {\n const chunk = chunks[i];\n result.set(chunk, offset);\n offset += chunk.length;\n }\n return result;\n}\n\nvar eventemitter3 = {exports: {}};\n\nvar hasRequiredEventemitter3;\n\nfunction requireEventemitter3 () {\n\tif (hasRequiredEventemitter3) return eventemitter3.exports;\n\thasRequiredEventemitter3 = 1;\n\t(function (module) {\n\n\t\tvar has = Object.prototype.hasOwnProperty\n\t\t , prefix = '~';\n\n\t\t/**\n\t\t * Constructor to create a storage for our `EE` objects.\n\t\t * An `Events` instance is a plain object whose properties are event names.\n\t\t *\n\t\t * @constructor\n\t\t * @private\n\t\t */\n\t\tfunction Events() {}\n\n\t\t//\n\t\t// We try to not inherit from `Object.prototype`. In some engines creating an\n\t\t// instance in this way is faster than calling `Object.create(null)` directly.\n\t\t// If `Object.create(null)` is not supported we prefix the event names with a\n\t\t// character to make sure that the built-in object properties are not\n\t\t// overridden or used as an attack vector.\n\t\t//\n\t\tif (Object.create) {\n\t\t Events.prototype = Object.create(null);\n\n\t\t //\n\t\t // This hack is needed because the `__proto__` property is still inherited in\n\t\t // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n\t\t //\n\t\t if (!new Events().__proto__) prefix = false;\n\t\t}\n\n\t\t/**\n\t\t * Representation of a single event listener.\n\t\t *\n\t\t * @param {Function} fn The listener function.\n\t\t * @param {*} context The context to invoke the listener with.\n\t\t * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n\t\t * @constructor\n\t\t * @private\n\t\t */\n\t\tfunction EE(fn, context, once) {\n\t\t this.fn = fn;\n\t\t this.context = context;\n\t\t this.once = once || false;\n\t\t}\n\n\t\t/**\n\t\t * Add a listener for a given event.\n\t\t *\n\t\t * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n\t\t * @param {(String|Symbol)} event The event name.\n\t\t * @param {Function} fn The listener function.\n\t\t * @param {*} context The context to invoke the listener with.\n\t\t * @param {Boolean} once Specify if the listener is a one-time listener.\n\t\t * @returns {EventEmitter}\n\t\t * @private\n\t\t */\n\t\tfunction addListener(emitter, event, fn, context, once) {\n\t\t if (typeof fn !== 'function') {\n\t\t throw new TypeError('The listener must be a function');\n\t\t }\n\n\t\t var listener = new EE(fn, context || emitter, once)\n\t\t , evt = prefix ? prefix + event : event;\n\n\t\t if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n\t\t else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n\t\t else emitter._events[evt] = [emitter._events[evt], listener];\n\n\t\t return emitter;\n\t\t}\n\n\t\t/**\n\t\t * Clear event by name.\n\t\t *\n\t\t * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n\t\t * @param {(String|Symbol)} evt The Event name.\n\t\t * @private\n\t\t */\n\t\tfunction clearEvent(emitter, evt) {\n\t\t if (--emitter._eventsCount === 0) emitter._events = new Events();\n\t\t else delete emitter._events[evt];\n\t\t}\n\n\t\t/**\n\t\t * Minimal `EventEmitter` interface that is molded against the Node.js\n\t\t * `EventEmitter` interface.\n\t\t *\n\t\t * @constructor\n\t\t * @public\n\t\t */\n\t\tfunction EventEmitter() {\n\t\t this._events = new Events();\n\t\t this._eventsCount = 0;\n\t\t}\n\n\t\t/**\n\t\t * Return an array listing the events for which the emitter has registered\n\t\t * listeners.\n\t\t *\n\t\t * @returns {Array}\n\t\t * @public\n\t\t */\n\t\tEventEmitter.prototype.eventNames = function eventNames() {\n\t\t var names = []\n\t\t , events\n\t\t , name;\n\n\t\t if (this._eventsCount === 0) return names;\n\n\t\t for (name in (events = this._events)) {\n\t\t if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n\t\t }\n\n\t\t if (Object.getOwnPropertySymbols) {\n\t\t return names.concat(Object.getOwnPropertySymbols(events));\n\t\t }\n\n\t\t return names;\n\t\t};\n\n\t\t/**\n\t\t * Return the listeners registered for a given event.\n\t\t *\n\t\t * @param {(String|Symbol)} event The event name.\n\t\t * @returns {Array} The registered listeners.\n\t\t * @public\n\t\t */\n\t\tEventEmitter.prototype.listeners = function listeners(event) {\n\t\t var evt = prefix ? prefix + event : event\n\t\t , handlers = this._events[evt];\n\n\t\t if (!handlers) return [];\n\t\t if (handlers.fn) return [handlers.fn];\n\n\t\t for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n\t\t ee[i] = handlers[i].fn;\n\t\t }\n\n\t\t return ee;\n\t\t};\n\n\t\t/**\n\t\t * Return the number of listeners listening to a given event.\n\t\t *\n\t\t * @param {(String|Symbol)} event The event name.\n\t\t * @returns {Number} The number of listeners.\n\t\t * @public\n\t\t */\n\t\tEventEmitter.prototype.listenerCount = function listenerCount(event) {\n\t\t var evt = prefix ? prefix + event : event\n\t\t , listeners = this._events[evt];\n\n\t\t if (!listeners) return 0;\n\t\t if (listeners.fn) return 1;\n\t\t return listeners.length;\n\t\t};\n\n\t\t/**\n\t\t * Calls each of the listeners registered for a given event.\n\t\t *\n\t\t * @param {(String|Symbol)} event The event name.\n\t\t * @returns {Boolean} `true` if the event had listeners, else `false`.\n\t\t * @public\n\t\t */\n\t\tEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n\t\t var evt = prefix ? prefix + event : event;\n\n\t\t if (!this._events[evt]) return false;\n\n\t\t var listeners = this._events[evt]\n\t\t , len = arguments.length\n\t\t , args\n\t\t , i;\n\n\t\t if (listeners.fn) {\n\t\t if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n\t\t switch (len) {\n\t\t case 1: return listeners.fn.call(listeners.context), true;\n\t\t case 2: return listeners.fn.call(listeners.context, a1), true;\n\t\t case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n\t\t case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n\t\t case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n\t\t case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n\t\t }\n\n\t\t for (i = 1, args = new Array(len -1); i < len; i++) {\n\t\t args[i - 1] = arguments[i];\n\t\t }\n\n\t\t listeners.fn.apply(listeners.context, args);\n\t\t } else {\n\t\t var length = listeners.length\n\t\t , j;\n\n\t\t for (i = 0; i < length; i++) {\n\t\t if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n\t\t switch (len) {\n\t\t case 1: listeners[i].fn.call(listeners[i].context); break;\n\t\t case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n\t\t case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n\t\t case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n\t\t default:\n\t\t if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n\t\t args[j - 1] = arguments[j];\n\t\t }\n\n\t\t listeners[i].fn.apply(listeners[i].context, args);\n\t\t }\n\t\t }\n\t\t }\n\n\t\t return true;\n\t\t};\n\n\t\t/**\n\t\t * Add a listener for a given event.\n\t\t *\n\t\t * @param {(String|Symbol)} event The event name.\n\t\t * @param {Function} fn The listener function.\n\t\t * @param {*} [context=this] The context to invoke the listener with.\n\t\t * @returns {EventEmitter} `this`.\n\t\t * @public\n\t\t */\n\t\tEventEmitter.prototype.on = function on(event, fn, context) {\n\t\t return addListener(this, event, fn, context, false);\n\t\t};\n\n\t\t/**\n\t\t * Add a one-time listener for a given event.\n\t\t *\n\t\t * @param {(String|Symbol)} event The event name.\n\t\t * @param {Function} fn The listener function.\n\t\t * @param {*} [context=this] The context to invoke the listener with.\n\t\t * @returns {EventEmitter} `this`.\n\t\t * @public\n\t\t */\n\t\tEventEmitter.prototype.once = function once(event, fn, context) {\n\t\t return addListener(this, event, fn, context, true);\n\t\t};\n\n\t\t/**\n\t\t * Remove the listeners of a given event.\n\t\t *\n\t\t * @param {(String|Symbol)} event The event name.\n\t\t * @param {Function} fn Only remove the listeners that match this function.\n\t\t * @param {*} context Only remove the listeners that have this context.\n\t\t * @param {Boolean} once Only remove one-time listeners.\n\t\t * @returns {EventEmitter} `this`.\n\t\t * @public\n\t\t */\n\t\tEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n\t\t var evt = prefix ? prefix + event : event;\n\n\t\t if (!this._events[evt]) return this;\n\t\t if (!fn) {\n\t\t clearEvent(this, evt);\n\t\t return this;\n\t\t }\n\n\t\t var listeners = this._events[evt];\n\n\t\t if (listeners.fn) {\n\t\t if (\n\t\t listeners.fn === fn &&\n\t\t (!once || listeners.once) &&\n\t\t (!context || listeners.context === context)\n\t\t ) {\n\t\t clearEvent(this, evt);\n\t\t }\n\t\t } else {\n\t\t for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n\t\t if (\n\t\t listeners[i].fn !== fn ||\n\t\t (once && !listeners[i].once) ||\n\t\t (context && listeners[i].context !== context)\n\t\t ) {\n\t\t events.push(listeners[i]);\n\t\t }\n\t\t }\n\n\t\t //\n\t\t // Reset the array, or remove it completely if we have no more listeners.\n\t\t //\n\t\t if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n\t\t else clearEvent(this, evt);\n\t\t }\n\n\t\t return this;\n\t\t};\n\n\t\t/**\n\t\t * Remove all listeners, or those of the specified event.\n\t\t *\n\t\t * @param {(String|Symbol)} [event] The event name.\n\t\t * @returns {EventEmitter} `this`.\n\t\t * @public\n\t\t */\n\t\tEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n\t\t var evt;\n\n\t\t if (event) {\n\t\t evt = prefix ? prefix + event : event;\n\t\t if (this._events[evt]) clearEvent(this, evt);\n\t\t } else {\n\t\t this._events = new Events();\n\t\t this._eventsCount = 0;\n\t\t }\n\n\t\t return this;\n\t\t};\n\n\t\t//\n\t\t// Alias methods names because people roll like that.\n\t\t//\n\t\tEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\t\tEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n\t\t//\n\t\t// Expose the prefix.\n\t\t//\n\t\tEventEmitter.prefixed = prefix;\n\n\t\t//\n\t\t// Allow `EventEmitter` to be imported as module namespace.\n\t\t//\n\t\tEventEmitter.EventEmitter = EventEmitter;\n\n\t\t//\n\t\t// Expose the module.\n\t\t//\n\t\t{\n\t\t module.exports = EventEmitter;\n\t\t} \n\t} (eventemitter3));\n\treturn eventemitter3.exports;\n}\n\nvar eventemitter3Exports = requireEventemitter3();\nvar EventEmitter = /*@__PURE__*/getDefaultExportFromCjs(eventemitter3Exports);\n\nconst version = \"1.6.16\";\n\n// ensure the worker ends up in the bundle\n// If the worker should not be included this gets aliased to empty.js\nconst workerStore = {};\nfunction hasUMDWorker() {\n return typeof __HLS_WORKER_BUNDLE__ === 'function';\n}\nfunction injectWorker() {\n const workerContext = workerStore[version];\n if (workerContext) {\n workerContext.clientCount++;\n return workerContext;\n }\n const blob = new self.Blob([`var exports={};var module={exports:exports};function define(f){f()};define.amd=true;(${__HLS_WORKER_BUNDLE__.toString()})(true);`], {\n type: 'text/javascript'\n });\n const objectURL = self.URL.createObjectURL(blob);\n const worker = new self.Worker(objectURL);\n const result = {\n worker,\n objectURL,\n clientCount: 1\n };\n workerStore[version] = result;\n return result;\n}\nfunction loadWorker(path) {\n const workerContext = workerStore[path];\n if (workerContext) {\n workerContext.clientCount++;\n return workerContext;\n }\n const scriptURL = new self.URL(path, self.location.href).href;\n const worker = new self.Worker(scriptURL);\n const result = {\n worker,\n scriptURL,\n clientCount: 1\n };\n workerStore[path] = result;\n return result;\n}\nfunction removeWorkerFromStore(path) {\n const workerContext = workerStore[path || version];\n if (workerContext) {\n const clientCount = workerContext.clientCount--;\n if (clientCount === 1) {\n const {\n worker,\n objectURL\n } = workerContext;\n delete workerStore[path || version];\n if (objectURL) {\n // revoke the Object URL that was used to create transmuxer worker, so as not to leak it\n self.URL.revokeObjectURL(objectURL);\n }\n worker.terminate();\n }\n }\n}\n\n/**\n * Returns true if an ID3 footer can be found at offset in data\n *\n * @param data - The data to search in\n * @param offset - The offset at which to start searching\n *\n * @returns `true` if an ID3 footer is found\n *\n * @internal\n *\n * @group ID3\n */\nfunction isId3Footer(data, offset) {\n /*\n * The footer is a copy of the header, but with a different identifier\n */\n if (offset + 10 <= data.length) {\n // look for '3DI' identifier\n if (data[offset] === 0x33 && data[offset + 1] === 0x44 && data[offset + 2] === 0x49) {\n // check version is within range\n if (data[offset + 3] < 0xff && data[offset + 4] < 0xff) {\n // check size is within range\n if (data[offset + 6] < 0x80 && data[offset + 7] < 0x80 && data[offset + 8] < 0x80 && data[offset + 9] < 0x80) {\n return true;\n }\n }\n }\n }\n return false;\n}\n\n/**\n * Returns true if an ID3 header can be found at offset in data\n *\n * @param data - The data to search in\n * @param offset - The offset at which to start searching\n *\n * @returns `true` if an ID3 header is found\n *\n * @internal\n *\n * @group ID3\n */\nfunction isId3Header(data, offset) {\n /*\n * http://id3.org/id3v2.3.0\n * [0] = 'I'\n * [1] = 'D'\n * [2] = '3'\n * [3,4] = {Version}\n * [5] = {Flags}\n * [6-9] = {ID3 Size}\n *\n * An ID3v2 tag can be detected with the following pattern:\n * $49 44 33 yy yy xx zz zz zz zz\n * Where yy is less than $FF, xx is the 'flags' byte and zz is less than $80\n */\n if (offset + 10 <= data.length) {\n // look for 'ID3' identifier\n if (data[offset] === 0x49 && data[offset + 1] === 0x44 && data[offset + 2] === 0x33) {\n // check version is within range\n if (data[offset + 3] < 0xff && data[offset + 4] < 0xff) {\n // check size is within range\n if (data[offset + 6] < 0x80 && data[offset + 7] < 0x80 && data[offset + 8] < 0x80 && data[offset + 9] < 0x80) {\n return true;\n }\n }\n }\n }\n return false;\n}\n\n/**\n * Read ID3 size\n *\n * @param data - The data to read from\n * @param offset - The offset at which to start reading\n *\n * @returns The size\n *\n * @internal\n *\n * @group ID3\n */\nfunction readId3Size(data, offset) {\n let size = 0;\n size = (data[offset] & 0x7f) << 21;\n size |= (data[offset + 1] & 0x7f) << 14;\n size |= (data[offset + 2] & 0x7f) << 7;\n size |= data[offset + 3] & 0x7f;\n return size;\n}\n\n/**\n * Returns any adjacent ID3 tags found in data starting at offset, as one block of data\n *\n * @param data - The data to search in\n * @param offset - The offset at which to start searching\n *\n * @returns The block of data containing any ID3 tags found\n * or `undefined` if no header is found at the starting offset\n *\n * @internal\n *\n * @group ID3\n */\nfunction getId3Data(data, offset) {\n const front = offset;\n let length = 0;\n while (isId3Header(data, offset)) {\n // ID3 header is 10 bytes\n length += 10;\n const size = readId3Size(data, offset + 6);\n length += size;\n if (isId3Footer(data, offset + 10)) {\n // ID3 footer is 10 bytes\n length += 10;\n }\n offset += length;\n }\n if (length > 0) {\n return data.subarray(front, front + length);\n }\n return undefined;\n}\n\nfunction getAudioConfig(observer, data, offset, manifestCodec) {\n const adtsSamplingRates = [96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350];\n const byte2 = data[offset + 2];\n const adtsSamplingIndex = byte2 >> 2 & 0xf;\n if (adtsSamplingIndex > 12) {\n const error = new Error(`invalid ADTS sampling index:${adtsSamplingIndex}`);\n observer.emit(Events.ERROR, Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.FRAG_PARSING_ERROR,\n fatal: true,\n error,\n reason: error.message\n });\n return;\n }\n // MPEG-4 Audio Object Type (profile_ObjectType+1)\n const adtsObjectType = (byte2 >> 6 & 0x3) + 1;\n const channelCount = data[offset + 3] >> 6 & 0x3 | (byte2 & 1) << 2;\n const codec = 'mp4a.40.' + adtsObjectType;\n /* refer to http://wiki.multimedia.cx/index.php?title=MPEG-4_Audio#Audio_Specific_Config\n ISO/IEC 14496-3 - Table 1.13 — Syntax of AudioSpecificConfig()\n Audio Profile / Audio Object Type\n 0: Null\n 1: AAC Main\n 2: AAC LC (Low Complexity)\n 3: AAC SSR (Scalable Sample Rate)\n 4: AAC LTP (Long Term Prediction)\n 5: SBR (Spectral Band Replication)\n 6: AAC Scalable\n sampling freq\n 0: 96000 Hz\n 1: 88200 Hz\n 2: 64000 Hz\n 3: 48000 Hz\n 4: 44100 Hz\n 5: 32000 Hz\n 6: 24000 Hz\n 7: 22050 Hz\n 8: 16000 Hz\n 9: 12000 Hz\n 10: 11025 Hz\n 11: 8000 Hz\n 12: 7350 Hz\n 13: Reserved\n 14: Reserved\n 15: frequency is written explictly\n Channel Configurations\n These are the channel configurations:\n 0: Defined in AOT Specifc Config\n 1: 1 channel: front-center\n 2: 2 channels: front-left, front-right\n */\n // audioObjectType = profile => profile, the MPEG-4 Audio Object Type minus 1\n const samplerate = adtsSamplingRates[adtsSamplingIndex];\n let aacSampleIndex = adtsSamplingIndex;\n if (adtsObjectType === 5 || adtsObjectType === 29) {\n // HE-AAC uses SBR (Spectral Band Replication) , high frequencies are constructed from low frequencies\n // there is a factor 2 between frame sample rate and output sample rate\n // multiply frequency by 2 (see table above, equivalent to substract 3)\n aacSampleIndex -= 3;\n }\n const config = [adtsObjectType << 3 | (aacSampleIndex & 0x0e) >> 1, (aacSampleIndex & 0x01) << 7 | channelCount << 3];\n logger.log(`manifest codec:${manifestCodec}, parsed codec:${codec}, channels:${channelCount}, rate:${samplerate} (ADTS object type:${adtsObjectType} sampling index:${adtsSamplingIndex})`);\n return {\n config,\n samplerate,\n channelCount,\n codec,\n parsedCodec: codec,\n manifestCodec\n };\n}\nfunction isHeaderPattern$1(data, offset) {\n return data[offset] === 0xff && (data[offset + 1] & 0xf6) === 0xf0;\n}\nfunction getHeaderLength(data, offset) {\n return data[offset + 1] & 0x01 ? 7 : 9;\n}\nfunction getFullFrameLength(data, offset) {\n return (data[offset + 3] & 0x03) << 11 | data[offset + 4] << 3 | (data[offset + 5] & 0xe0) >>> 5;\n}\nfunction canGetFrameLength(data, offset) {\n return offset + 5 < data.length;\n}\nfunction isHeader$1(data, offset) {\n // Look for ADTS header | 1111 1111 | 1111 X00X | where X can be either 0 or 1\n // Layer bits (position 14 and 15) in header should be always 0 for ADTS\n // More info https://wiki.multimedia.cx/index.php?title=ADTS\n return offset + 1 < data.length && isHeaderPattern$1(data, offset);\n}\nfunction canParse$1(data, offset) {\n return canGetFrameLength(data, offset) && isHeaderPattern$1(data, offset) && getFullFrameLength(data, offset) <= data.length - offset;\n}\nfunction probe$1(data, offset) {\n // same as isHeader but we also check that ADTS frame follows last ADTS frame\n // or end of data is reached\n if (isHeader$1(data, offset)) {\n // ADTS header Length\n const headerLength = getHeaderLength(data, offset);\n if (offset + headerLength >= data.length) {\n return false;\n }\n // ADTS frame Length\n const frameLength = getFullFrameLength(data, offset);\n if (frameLength <= headerLength) {\n return false;\n }\n const newOffset = offset + frameLength;\n return newOffset === data.length || isHeader$1(data, newOffset);\n }\n return false;\n}\nfunction initTrackConfig(track, observer, data, offset, audioCodec) {\n if (!track.samplerate) {\n const config = getAudioConfig(observer, data, offset, audioCodec);\n if (!config) {\n return;\n }\n _extends(track, config);\n }\n}\nfunction getFrameDuration(samplerate) {\n return 1024 * 90000 / samplerate;\n}\nfunction parseFrameHeader(data, offset) {\n // The protection skip bit tells us if we have 2 bytes of CRC data at the end of the ADTS header\n const headerLength = getHeaderLength(data, offset);\n if (offset + headerLength <= data.length) {\n // retrieve frame size\n const frameLength = getFullFrameLength(data, offset) - headerLength;\n if (frameLength > 0) {\n // logger.log(`AAC frame, offset/length/total/pts:${offset+headerLength}/${frameLength}/${data.byteLength}`);\n return {\n headerLength,\n frameLength\n };\n }\n }\n}\nfunction appendFrame$2(track, data, offset, pts, frameIndex) {\n const frameDuration = getFrameDuration(track.samplerate);\n const stamp = pts + frameIndex * frameDuration;\n const header = parseFrameHeader(data, offset);\n let unit;\n if (header) {\n const {\n frameLength,\n headerLength\n } = header;\n const _length = headerLength + frameLength;\n const missing = Math.max(0, offset + _length - data.length);\n // logger.log(`AAC frame ${frameIndex}, pts:${stamp} length@offset/total: ${frameLength}@${offset+headerLength}/${data.byteLength} missing: ${missing}`);\n if (missing) {\n unit = new Uint8Array(_length - headerLength);\n unit.set(data.subarray(offset + headerLength, data.length), 0);\n } else {\n unit = data.subarray(offset + headerLength, offset + _length);\n }\n const _sample = {\n unit,\n pts: stamp\n };\n if (!missing) {\n track.samples.push(_sample);\n }\n return {\n sample: _sample,\n length: _length,\n missing\n };\n }\n // overflow incomplete header\n const length = data.length - offset;\n unit = new Uint8Array(length);\n unit.set(data.subarray(offset, data.length), 0);\n const sample = {\n unit,\n pts: stamp\n };\n return {\n sample,\n length,\n missing: -1\n };\n}\n\n/**\n * Checks if the given data contains an ID3 tag.\n *\n * @param data - The data to check\n * @param offset - The offset at which to start checking\n *\n * @returns `true` if an ID3 tag is found\n *\n * @group ID3\n *\n * @beta\n */\nfunction canParseId3(data, offset) {\n return isId3Header(data, offset) && readId3Size(data, offset + 6) + 10 <= data.length - offset;\n}\n\nfunction toArrayBuffer(view) {\n if (view instanceof ArrayBuffer) {\n return view;\n } else {\n if (view.byteOffset == 0 && view.byteLength == view.buffer.byteLength) {\n // This is a TypedArray over the whole buffer.\n return view.buffer;\n }\n // This is a 'view' on the buffer. Create a new buffer that only contains\n // the data. Note that since this isn't an ArrayBuffer, the 'new' call\n // will allocate a new buffer to hold the copy.\n return new Uint8Array(view).buffer;\n }\n}\n\nfunction toUint8(data, offset = 0, length = Infinity) {\n return view(data, offset, length, Uint8Array);\n}\nfunction view(data, offset, length, Type) {\n const buffer = unsafeGetArrayBuffer(data);\n let bytesPerElement = 1;\n if ('BYTES_PER_ELEMENT' in Type) {\n bytesPerElement = Type.BYTES_PER_ELEMENT;\n }\n // Absolute end of the |data| view within |buffer|.\n const dataOffset = isArrayBufferView(data) ? data.byteOffset : 0;\n const dataEnd = (dataOffset + data.byteLength) / bytesPerElement;\n // Absolute start of the result within |buffer|.\n const rawStart = (dataOffset + offset) / bytesPerElement;\n const start = Math.floor(Math.max(0, Math.min(rawStart, dataEnd)));\n // Absolute end of the result within |buffer|.\n const end = Math.floor(Math.min(start + Math.max(length, 0), dataEnd));\n return new Type(buffer, start, end - start);\n}\nfunction unsafeGetArrayBuffer(view) {\n if (view instanceof ArrayBuffer) {\n return view;\n } else {\n return view.buffer;\n }\n}\nfunction isArrayBufferView(obj) {\n return obj && obj.buffer instanceof ArrayBuffer && obj.byteLength !== undefined && obj.byteOffset !== undefined;\n}\n\nfunction decodeId3ImageFrame(frame) {\n const metadataFrame = {\n key: frame.type,\n description: '',\n data: '',\n mimeType: null,\n pictureType: null\n };\n const utf8Encoding = 0x03;\n if (frame.size < 2) {\n return undefined;\n }\n if (frame.data[0] !== utf8Encoding) {\n console.log('Ignore frame with unrecognized character ' + 'encoding');\n return undefined;\n }\n const mimeTypeEndIndex = frame.data.subarray(1).indexOf(0);\n if (mimeTypeEndIndex === -1) {\n return undefined;\n }\n const mimeType = utf8ArrayToStr(toUint8(frame.data, 1, mimeTypeEndIndex));\n const pictureType = frame.data[2 + mimeTypeEndIndex];\n const descriptionEndIndex = frame.data.subarray(3 + mimeTypeEndIndex).indexOf(0);\n if (descriptionEndIndex === -1) {\n return undefined;\n }\n const description = utf8ArrayToStr(toUint8(frame.data, 3 + mimeTypeEndIndex, descriptionEndIndex));\n let data;\n if (mimeType === '-->') {\n data = utf8ArrayToStr(toUint8(frame.data, 4 + mimeTypeEndIndex + descriptionEndIndex));\n } else {\n data = toArrayBuffer(frame.data.subarray(4 + mimeTypeEndIndex + descriptionEndIndex));\n }\n metadataFrame.mimeType = mimeType;\n metadataFrame.pictureType = pictureType;\n metadataFrame.description = description;\n metadataFrame.data = data;\n return metadataFrame;\n}\n\n/**\n * Decode an ID3 PRIV frame.\n *\n * @param frame - the ID3 PRIV frame\n *\n * @returns The decoded ID3 PRIV frame\n *\n * @internal\n *\n * @group ID3\n */\nfunction decodeId3PrivFrame(frame) {\n /*\n Format: <text string>\\0<binary data>\n */\n if (frame.size < 2) {\n return undefined;\n }\n const owner = utf8ArrayToStr(frame.data, true);\n const privateData = new Uint8Array(frame.data.subarray(owner.length + 1));\n return {\n key: frame.type,\n info: owner,\n data: privateData.buffer\n };\n}\n\n/**\n * Decodes an ID3 text frame\n *\n * @param frame - the ID3 text frame\n *\n * @returns The decoded ID3 text frame\n *\n * @internal\n *\n * @group ID3\n */\nfunction decodeId3TextFrame(frame) {\n if (frame.size < 2) {\n return undefined;\n }\n if (frame.type === 'TXXX') {\n /*\n Format:\n [0] = {Text Encoding}\n [1-?] = {Description}\\0{Value}\n */\n let index = 1;\n const description = utf8ArrayToStr(frame.data.subarray(index), true);\n index += description.length + 1;\n const value = utf8ArrayToStr(frame.data.subarray(index));\n return {\n key: frame.type,\n info: description,\n data: value\n };\n }\n /*\n Format:\n [0] = {Text Encoding}\n [1-?] = {Value}\n */\n const text = utf8ArrayToStr(frame.data.subarray(1));\n return {\n key: frame.type,\n info: '',\n data: text\n };\n}\n\n/**\n * Decode a URL frame\n *\n * @param frame - the ID3 URL frame\n *\n * @returns The decoded ID3 URL frame\n *\n * @internal\n *\n * @group ID3\n */\nfunction decodeId3UrlFrame(frame) {\n if (frame.type === 'WXXX') {\n /*\n Format:\n [0] = {Text Encoding}\n [1-?] = {Description}\\0{URL}\n */\n if (frame.size < 2) {\n return undefined;\n }\n let index = 1;\n const description = utf8ArrayToStr(frame.data.subarray(index), true);\n index += description.length + 1;\n const value = utf8ArrayToStr(frame.data.subarray(index));\n return {\n key: frame.type,\n info: description,\n data: value\n };\n }\n /*\n Format:\n [0-?] = {URL}\n */\n const url = utf8ArrayToStr(frame.data);\n return {\n key: frame.type,\n info: '',\n data: url\n };\n}\n\n/**\n * Decode an ID3 frame.\n *\n * @param frame - the ID3 frame\n *\n * @returns The decoded ID3 frame\n *\n * @internal\n *\n * @group ID3\n */\nfunction decodeId3Frame(frame) {\n if (frame.type === 'PRIV') {\n return decodeId3PrivFrame(frame);\n } else if (frame.type[0] === 'W') {\n return decodeId3UrlFrame(frame);\n } else if (frame.type === 'APIC') {\n return decodeId3ImageFrame(frame);\n }\n return decodeId3TextFrame(frame);\n}\n\n/**\n * Returns the data of an ID3 frame.\n *\n * @param data - The data to read from\n *\n * @returns The data of the ID3 frame\n *\n * @internal\n *\n * @group ID3\n */\nfunction getId3FrameData(data) {\n /*\n Frame ID $xx xx xx xx (four characters)\n Size $xx xx xx xx\n Flags $xx xx\n */\n const type = String.fromCharCode(data[0], data[1], data[2], data[3]);\n const size = readId3Size(data, 4);\n // skip frame id, size, and flags\n const offset = 10;\n return {\n type,\n size,\n data: data.subarray(offset, offset + size)\n };\n}\n\nconst HEADER_FOOTER_SIZE = 10;\nconst FRAME_SIZE = 10;\n/**\n * Returns an array of ID3 frames found in all the ID3 tags in the id3Data\n *\n * @param id3Data - The ID3 data containing one or more ID3 tags\n *\n * @returns Array of ID3 frame objects\n *\n * @group ID3\n *\n * @beta\n */\nfunction getId3Frames(id3Data) {\n let offset = 0;\n const frames = [];\n while (isId3Header(id3Data, offset)) {\n const size = readId3Size(id3Data, offset + 6);\n if (id3Data[offset + 5] >> 6 & 1) {\n // skip extended header\n offset += HEADER_FOOTER_SIZE;\n }\n // skip past ID3 header\n offset += HEADER_FOOTER_SIZE;\n const end = offset + size;\n // loop through frames in the ID3 tag\n while (offset + FRAME_SIZE < end) {\n const frameData = getId3FrameData(id3Data.subarray(offset));\n const frame = decodeId3Frame(frameData);\n if (frame) {\n frames.push(frame);\n }\n // skip frame header and frame data\n offset += frameData.size + HEADER_FOOTER_SIZE;\n }\n if (isId3Footer(id3Data, offset)) {\n offset += HEADER_FOOTER_SIZE;\n }\n }\n return frames;\n}\n\n/**\n * Returns true if the ID3 frame is an Elementary Stream timestamp frame\n *\n * @param frame - the ID3 frame\n *\n * @returns `true` if the ID3 frame is an Elementary Stream timestamp frame\n *\n * @internal\n *\n * @group ID3\n */\nfunction isId3TimestampFrame(frame) {\n return frame && frame.key === 'PRIV' && frame.info === 'com.apple.streaming.transportStreamTimestamp';\n}\n\n/**\n * Read a 33 bit timestamp from an ID3 frame.\n *\n * @param timeStampFrame - the ID3 frame\n *\n * @returns The timestamp\n *\n * @internal\n *\n * @group ID3\n */\nfunction readId3Timestamp(timeStampFrame) {\n if (timeStampFrame.data.byteLength === 8) {\n const data = new Uint8Array(timeStampFrame.data);\n // timestamp is 33 bit expressed as a big-endian eight-octet number,\n // with the upper 31 bits set to zero.\n const pts33Bit = data[3] & 0x1;\n let timestamp = (data[4] << 23) + (data[5] << 15) + (data[6] << 7) + data[7];\n timestamp /= 45;\n if (pts33Bit) {\n timestamp += 47721858.84;\n } // 2^32 / 90\n return Math.round(timestamp);\n }\n return undefined;\n}\n\n/**\n * Searches for the Elementary Stream timestamp found in the ID3 data chunk\n *\n * @param data - Block of data containing one or more ID3 tags\n *\n * @returns The timestamp\n *\n * @group ID3\n *\n * @beta\n */\nfunction getId3Timestamp(data) {\n const frames = getId3Frames(data);\n for (let i = 0; i < frames.length; i++) {\n const frame = frames[i];\n if (isId3TimestampFrame(frame)) {\n return readId3Timestamp(frame);\n }\n }\n return undefined;\n}\n\nlet MetadataSchema = /*#__PURE__*/function (MetadataSchema) {\n MetadataSchema[\"audioId3\"] = \"org.id3\";\n MetadataSchema[\"dateRange\"] = \"com.apple.quicktime.HLS\";\n MetadataSchema[\"emsg\"] = \"https://aomedia.org/emsg/ID3\";\n MetadataSchema[\"misbklv\"] = \"urn:misb:KLV:bin:1910.1\";\n return MetadataSchema;\n}({});\n\nfunction dummyTrack(type = '', inputTimeScale = 90000) {\n return {\n type,\n id: -1,\n pid: -1,\n inputTimeScale,\n sequenceNumber: -1,\n samples: [],\n dropped: 0\n };\n}\n\nclass BaseAudioDemuxer {\n constructor() {\n this._audioTrack = void 0;\n this._id3Track = void 0;\n this.frameIndex = 0;\n this.cachedData = null;\n this.basePTS = null;\n this.initPTS = null;\n this.lastPTS = null;\n }\n resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n this._id3Track = {\n type: 'id3',\n id: 3,\n pid: -1,\n inputTimeScale: 90000,\n sequenceNumber: 0,\n samples: [],\n dropped: 0\n };\n }\n resetTimeStamp(deaultTimestamp) {\n this.initPTS = deaultTimestamp;\n this.resetContiguity();\n }\n resetContiguity() {\n this.basePTS = null;\n this.lastPTS = null;\n this.frameIndex = 0;\n }\n canParse(data, offset) {\n return false;\n }\n appendFrame(track, data, offset) {}\n\n // feed incoming data to the front of the parsing pipeline\n demux(data, timeOffset) {\n if (this.cachedData) {\n data = appendUint8Array(this.cachedData, data);\n this.cachedData = null;\n }\n let id3Data = getId3Data(data, 0);\n let offset = id3Data ? id3Data.length : 0;\n let lastDataIndex;\n const track = this._audioTrack;\n const id3Track = this._id3Track;\n const timestamp = id3Data ? getId3Timestamp(id3Data) : undefined;\n const length = data.length;\n if (this.basePTS === null || this.frameIndex === 0 && isFiniteNumber(timestamp)) {\n this.basePTS = initPTSFn(timestamp, timeOffset, this.initPTS);\n this.lastPTS = this.basePTS;\n }\n if (this.lastPTS === null) {\n this.lastPTS = this.basePTS;\n }\n\n // more expressive than alternative: id3Data?.length\n if (id3Data && id3Data.length > 0) {\n id3Track.samples.push({\n pts: this.lastPTS,\n dts: this.lastPTS,\n data: id3Data,\n type: MetadataSchema.audioId3,\n duration: Number.POSITIVE_INFINITY\n });\n }\n while (offset < length) {\n if (this.canParse(data, offset)) {\n const frame = this.appendFrame(track, data, offset);\n if (frame) {\n this.frameIndex++;\n this.lastPTS = frame.sample.pts;\n offset += frame.length;\n lastDataIndex = offset;\n } else {\n offset = length;\n }\n } else if (canParseId3(data, offset)) {\n // after a canParse, a call to getId3Data *should* always returns some data\n id3Data = getId3Data(data, offset);\n id3Track.samples.push({\n pts: this.lastPTS,\n dts: this.lastPTS,\n data: id3Data,\n type: MetadataSchema.audioId3,\n duration: Number.POSITIVE_INFINITY\n });\n offset += id3Data.length;\n lastDataIndex = offset;\n } else {\n offset++;\n }\n if (offset === length && lastDataIndex !== length) {\n const partialData = data.slice(lastDataIndex);\n if (this.cachedData) {\n this.cachedData = appendUint8Array(this.cachedData, partialData);\n } else {\n this.cachedData = partialData;\n }\n }\n }\n return {\n audioTrack: track,\n videoTrack: dummyTrack(),\n id3Track,\n textTrack: dummyTrack()\n };\n }\n demuxSampleAes(data, keyData, timeOffset) {\n return Promise.reject(new Error(`[${this}] This demuxer does not support Sample-AES decryption`));\n }\n flush(timeOffset) {\n // Parse cache in case of remaining frames.\n const cachedData = this.cachedData;\n if (cachedData) {\n this.cachedData = null;\n this.demux(cachedData, 0);\n }\n return {\n audioTrack: this._audioTrack,\n videoTrack: dummyTrack(),\n id3Track: this._id3Track,\n textTrack: dummyTrack()\n };\n }\n destroy() {\n this.cachedData = null;\n // @ts-ignore\n this._audioTrack = this._id3Track = undefined;\n }\n}\n\n/**\n * Initialize PTS\n * <p>\n * use timestamp unless it is undefined, NaN or Infinity\n * </p>\n */\nconst initPTSFn = (timestamp, timeOffset, initPTS) => {\n if (isFiniteNumber(timestamp)) {\n return timestamp * 90;\n }\n const init90kHz = initPTS ? initPTS.baseTime * 90000 / initPTS.timescale : 0;\n return timeOffset * 90000 + init90kHz;\n};\n\n/**\n * MPEG parser helper\n */\n\nlet chromeVersion$1 = null;\nconst BitratesMap = [32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160];\nconst SamplingRateMap = [44100, 48000, 32000, 22050, 24000, 16000, 11025, 12000, 8000];\nconst SamplesCoefficients = [\n// MPEG 2.5\n[0,\n// Reserved\n72,\n// Layer3\n144,\n// Layer2\n12 // Layer1\n],\n// Reserved\n[0,\n// Reserved\n0,\n// Layer3\n0,\n// Layer2\n0 // Layer1\n],\n// MPEG 2\n[0,\n// Reserved\n72,\n// Layer3\n144,\n// Layer2\n12 // Layer1\n],\n// MPEG 1\n[0,\n// Reserved\n144,\n// Layer3\n144,\n// Layer2\n12 // Layer1\n]];\nconst BytesInSlot = [0,\n// Reserved\n1,\n// Layer3\n1,\n// Layer2\n4 // Layer1\n];\nfunction appendFrame$1(track, data, offset, pts, frameIndex) {\n // Using http://www.datavoyage.com/mpgscript/mpeghdr.htm as a reference\n if (offset + 24 > data.length) {\n return;\n }\n const header = parseHeader(data, offset);\n if (header && offset + header.frameLength <= data.length) {\n const frameDuration = header.samplesPerFrame * 90000 / header.sampleRate;\n const stamp = pts + frameIndex * frameDuration;\n const sample = {\n unit: data.subarray(offset, offset + header.frameLength),\n pts: stamp,\n dts: stamp\n };\n track.config = [];\n track.channelCount = header.channelCount;\n track.samplerate = header.sampleRate;\n track.samples.push(sample);\n return {\n sample,\n length: header.frameLength,\n missing: 0\n };\n }\n}\nfunction parseHeader(data, offset) {\n const mpegVersion = data[offset + 1] >> 3 & 3;\n const mpegLayer = data[offset + 1] >> 1 & 3;\n const bitRateIndex = data[offset + 2] >> 4 & 15;\n const sampleRateIndex = data[offset + 2] >> 2 & 3;\n if (mpegVersion !== 1 && bitRateIndex !== 0 && bitRateIndex !== 15 && sampleRateIndex !== 3) {\n const paddingBit = data[offset + 2] >> 1 & 1;\n const channelMode = data[offset + 3] >> 6;\n const columnInBitrates = mpegVersion === 3 ? 3 - mpegLayer : mpegLayer === 3 ? 3 : 4;\n const bitRate = BitratesMap[columnInBitrates * 14 + bitRateIndex - 1] * 1000;\n const columnInSampleRates = mpegVersion === 3 ? 0 : mpegVersion === 2 ? 1 : 2;\n const sampleRate = SamplingRateMap[columnInSampleRates * 3 + sampleRateIndex];\n const channelCount = channelMode === 3 ? 1 : 2; // If bits of channel mode are `11` then it is a single channel (Mono)\n const sampleCoefficient = SamplesCoefficients[mpegVersion][mpegLayer];\n const bytesInSlot = BytesInSlot[mpegLayer];\n const samplesPerFrame = sampleCoefficient * 8 * bytesInSlot;\n const frameLength = Math.floor(sampleCoefficient * bitRate / sampleRate + paddingBit) * bytesInSlot;\n if (chromeVersion$1 === null) {\n const userAgent = navigator.userAgent || '';\n const result = userAgent.match(/Chrome\\/(\\d+)/i);\n chromeVersion$1 = result ? parseInt(result[1]) : 0;\n }\n const needChromeFix = !!chromeVersion$1 && chromeVersion$1 <= 87;\n if (needChromeFix && mpegLayer === 2 && bitRate >= 224000 && channelMode === 0) {\n // Work around bug in Chromium by setting channelMode to dual-channel (01) instead of stereo (00)\n data[offset + 3] = data[offset + 3] | 0x80;\n }\n return {\n sampleRate,\n channelCount,\n frameLength,\n samplesPerFrame\n };\n }\n}\nfunction isHeaderPattern(data, offset) {\n return data[offset] === 0xff && (data[offset + 1] & 0xe0) === 0xe0 && (data[offset + 1] & 0x06) !== 0x00;\n}\nfunction isHeader(data, offset) {\n // Look for MPEG header | 1111 1111 | 111X XYZX | where X can be either 0 or 1 and Y or Z should be 1\n // Layer bits (position 14 and 15) in header should be always different from 0 (Layer I or Layer II or Layer III)\n // More info http://www.mp3-tech.org/programmer/frame_header.html\n return offset + 1 < data.length && isHeaderPattern(data, offset);\n}\nfunction canParse(data, offset) {\n const headerSize = 4;\n return isHeaderPattern(data, offset) && headerSize <= data.length - offset;\n}\nfunction probe(data, offset) {\n // same as isHeader but we also check that MPEG frame follows last MPEG frame\n // or end of data is reached\n if (offset + 1 < data.length && isHeaderPattern(data, offset)) {\n // MPEG header Length\n const headerLength = 4;\n // MPEG frame Length\n const header = parseHeader(data, offset);\n let frameLength = headerLength;\n if (header != null && header.frameLength) {\n frameLength = header.frameLength;\n }\n const newOffset = offset + frameLength;\n return newOffset === data.length || isHeader(data, newOffset);\n }\n return false;\n}\n\n/**\n * AAC demuxer\n */\nclass AACDemuxer extends BaseAudioDemuxer {\n constructor(observer, config) {\n super();\n this.observer = void 0;\n this.config = void 0;\n this.observer = observer;\n this.config = config;\n }\n resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n super.resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration);\n this._audioTrack = {\n container: 'audio/adts',\n type: 'audio',\n id: 2,\n pid: -1,\n sequenceNumber: 0,\n segmentCodec: 'aac',\n samples: [],\n manifestCodec: audioCodec,\n duration: trackDuration,\n inputTimeScale: 90000,\n dropped: 0\n };\n }\n\n // Source for probe info - https://wiki.multimedia.cx/index.php?title=ADTS\n static probe(data, logger) {\n if (!data) {\n return false;\n }\n\n // Check for the ADTS sync word\n // Look for ADTS header | 1111 1111 | 1111 X00X | where X can be either 0 or 1\n // Layer bits (position 14 and 15) in header should be always 0 for ADTS\n // More info https://wiki.multimedia.cx/index.php?title=ADTS\n const id3Data = getId3Data(data, 0);\n let offset = (id3Data == null ? void 0 : id3Data.length) || 0;\n if (probe(data, offset)) {\n return false;\n }\n for (let length = data.length; offset < length; offset++) {\n if (probe$1(data, offset)) {\n logger.log('ADTS sync word found !');\n return true;\n }\n }\n return false;\n }\n canParse(data, offset) {\n return canParse$1(data, offset);\n }\n appendFrame(track, data, offset) {\n initTrackConfig(track, this.observer, data, offset, track.manifestCodec);\n const frame = appendFrame$2(track, data, offset, this.basePTS, this.frameIndex);\n if (frame && frame.missing === 0) {\n return frame;\n }\n }\n}\n\nconst getAudioBSID = (data, offset) => {\n // check the bsid to confirm ac-3 | ec-3\n let bsid = 0;\n let numBits = 5;\n offset += numBits;\n const temp = new Uint32Array(1); // unsigned 32 bit for temporary storage\n const mask = new Uint32Array(1); // unsigned 32 bit mask value\n const byte = new Uint8Array(1); // unsigned 8 bit for temporary storage\n while (numBits > 0) {\n byte[0] = data[offset];\n // read remaining bits, upto 8 bits at a time\n const bits = Math.min(numBits, 8);\n const shift = 8 - bits;\n mask[0] = 0xff000000 >>> 24 + shift << shift;\n temp[0] = (byte[0] & mask[0]) >> shift;\n bsid = !bsid ? temp[0] : bsid << bits | temp[0];\n offset += 1;\n numBits -= bits;\n }\n return bsid;\n};\n\nclass AC3Demuxer extends BaseAudioDemuxer {\n constructor(observer) {\n super();\n this.observer = void 0;\n this.observer = observer;\n }\n resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n super.resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration);\n this._audioTrack = {\n container: 'audio/ac-3',\n type: 'audio',\n id: 2,\n pid: -1,\n sequenceNumber: 0,\n segmentCodec: 'ac3',\n samples: [],\n manifestCodec: audioCodec,\n duration: trackDuration,\n inputTimeScale: 90000,\n dropped: 0\n };\n }\n canParse(data, offset) {\n return offset + 64 < data.length;\n }\n appendFrame(track, data, offset) {\n const frameLength = appendFrame(track, data, offset, this.basePTS, this.frameIndex);\n if (frameLength !== -1) {\n const sample = track.samples[track.samples.length - 1];\n return {\n sample,\n length: frameLength,\n missing: 0\n };\n }\n }\n static probe(data) {\n if (!data) {\n return false;\n }\n const id3Data = getId3Data(data, 0);\n if (!id3Data) {\n return false;\n }\n\n // look for the ac-3 sync bytes\n const offset = id3Data.length;\n if (data[offset] === 0x0b && data[offset + 1] === 0x77 && getId3Timestamp(id3Data) !== undefined &&\n // check the bsid to confirm ac-3\n getAudioBSID(data, offset) < 16) {\n return true;\n }\n return false;\n }\n}\nfunction appendFrame(track, data, start, pts, frameIndex) {\n if (start + 8 > data.length) {\n return -1; // not enough bytes left\n }\n if (data[start] !== 0x0b || data[start + 1] !== 0x77) {\n return -1; // invalid magic\n }\n\n // get sample rate\n const samplingRateCode = data[start + 4] >> 6;\n if (samplingRateCode >= 3) {\n return -1; // invalid sampling rate\n }\n const samplingRateMap = [48000, 44100, 32000];\n const sampleRate = samplingRateMap[samplingRateCode];\n\n // get frame size\n const frameSizeCode = data[start + 4] & 0x3f;\n const frameSizeMap = [64, 69, 96, 64, 70, 96, 80, 87, 120, 80, 88, 120, 96, 104, 144, 96, 105, 144, 112, 121, 168, 112, 122, 168, 128, 139, 192, 128, 140, 192, 160, 174, 240, 160, 175, 240, 192, 208, 288, 192, 209, 288, 224, 243, 336, 224, 244, 336, 256, 278, 384, 256, 279, 384, 320, 348, 480, 320, 349, 480, 384, 417, 576, 384, 418, 576, 448, 487, 672, 448, 488, 672, 512, 557, 768, 512, 558, 768, 640, 696, 960, 640, 697, 960, 768, 835, 1152, 768, 836, 1152, 896, 975, 1344, 896, 976, 1344, 1024, 1114, 1536, 1024, 1115, 1536, 1152, 1253, 1728, 1152, 1254, 1728, 1280, 1393, 1920, 1280, 1394, 1920];\n const frameLength = frameSizeMap[frameSizeCode * 3 + samplingRateCode] * 2;\n if (start + frameLength > data.length) {\n return -1;\n }\n\n // get channel count\n const channelMode = data[start + 6] >> 5;\n let skipCount = 0;\n if (channelMode === 2) {\n skipCount += 2;\n } else {\n if (channelMode & 1 && channelMode !== 1) {\n skipCount += 2;\n }\n if (channelMode & 4) {\n skipCount += 2;\n }\n }\n const lfeon = (data[start + 6] << 8 | data[start + 7]) >> 12 - skipCount & 1;\n const channelsMap = [2, 1, 2, 3, 3, 4, 4, 5];\n const channelCount = channelsMap[channelMode] + lfeon;\n\n // build dac3 box\n const bsid = data[start + 5] >> 3;\n const bsmod = data[start + 5] & 7;\n const config = new Uint8Array([samplingRateCode << 6 | bsid << 1 | bsmod >> 2, (bsmod & 3) << 6 | channelMode << 3 | lfeon << 2 | frameSizeCode >> 4, frameSizeCode << 4 & 0xe0]);\n const frameDuration = 1536 / sampleRate * 90000;\n const stamp = pts + frameIndex * frameDuration;\n const unit = data.subarray(start, start + frameLength);\n track.config = config;\n track.channelCount = channelCount;\n track.samplerate = sampleRate;\n track.samples.push({\n unit,\n pts: stamp\n });\n return frameLength;\n}\n\n/**\n * MP3 demuxer\n */\nclass MP3Demuxer extends BaseAudioDemuxer {\n resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n super.resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration);\n this._audioTrack = {\n container: 'audio/mpeg',\n type: 'audio',\n id: 2,\n pid: -1,\n sequenceNumber: 0,\n segmentCodec: 'mp3',\n samples: [],\n manifestCodec: audioCodec,\n duration: trackDuration,\n inputTimeScale: 90000,\n dropped: 0\n };\n }\n static probe(data) {\n if (!data) {\n return false;\n }\n\n // check if data contains ID3 timestamp and MPEG sync word\n // Look for MPEG header | 1111 1111 | 111X XYZX | where X can be either 0 or 1 and Y or Z should be 1\n // Layer bits (position 14 and 15) in header should be always different from 0 (Layer I or Layer II or Layer III)\n // More info http://www.mp3-tech.org/programmer/frame_header.html\n const id3Data = getId3Data(data, 0);\n let offset = (id3Data == null ? void 0 : id3Data.length) || 0;\n\n // Check for ac-3|ec-3 sync bytes and return false if present\n if (id3Data && data[offset] === 0x0b && data[offset + 1] === 0x77 && getId3Timestamp(id3Data) !== undefined &&\n // check the bsid to confirm ac-3 or ec-3 (not mp3)\n getAudioBSID(data, offset) <= 16) {\n return false;\n }\n for (let length = data.length; offset < length; offset++) {\n if (probe(data, offset)) {\n logger.log('MPEG Audio sync word found !');\n return true;\n }\n }\n return false;\n }\n canParse(data, offset) {\n return canParse(data, offset);\n }\n appendFrame(track, data, offset) {\n if (this.basePTS === null) {\n return;\n }\n return appendFrame$1(track, data, offset, this.basePTS, this.frameIndex);\n }\n}\n\nconst emsgSchemePattern = /\\/emsg[-/]ID3/i;\nclass MP4Demuxer {\n constructor(observer, config) {\n this.remainderData = null;\n this.timeOffset = 0;\n this.config = void 0;\n this.videoTrack = void 0;\n this.audioTrack = void 0;\n this.id3Track = void 0;\n this.txtTrack = void 0;\n this.config = config;\n }\n resetTimeStamp() {}\n resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n const videoTrack = this.videoTrack = dummyTrack('video', 1);\n const audioTrack = this.audioTrack = dummyTrack('audio', 1);\n const captionTrack = this.txtTrack = dummyTrack('text', 1);\n this.id3Track = dummyTrack('id3', 1);\n this.timeOffset = 0;\n if (!(initSegment != null && initSegment.byteLength)) {\n return;\n }\n const initData = parseInitSegment(initSegment);\n if (initData.video) {\n const {\n id,\n timescale,\n codec,\n supplemental\n } = initData.video;\n videoTrack.id = id;\n videoTrack.timescale = captionTrack.timescale = timescale;\n videoTrack.codec = codec;\n videoTrack.supplemental = supplemental;\n }\n if (initData.audio) {\n const {\n id,\n timescale,\n codec\n } = initData.audio;\n audioTrack.id = id;\n audioTrack.timescale = timescale;\n audioTrack.codec = codec;\n }\n captionTrack.id = RemuxerTrackIdConfig.text;\n videoTrack.sampleDuration = 0;\n videoTrack.duration = audioTrack.duration = trackDuration;\n }\n resetContiguity() {\n this.remainderData = null;\n }\n static probe(data) {\n return hasMoofData(data);\n }\n demux(data, timeOffset) {\n this.timeOffset = timeOffset;\n // Load all data into the avc track. The CMAF remuxer will look for the data in the samples object; the rest of the fields do not matter\n let videoSamples = data;\n const videoTrack = this.videoTrack;\n const textTrack = this.txtTrack;\n if (this.config.progressive) {\n // Split the bytestream into two ranges: one encompassing all data up until the start of the last moof, and everything else.\n // This is done to guarantee that we're sending valid data to MSE - when demuxing progressively, we have no guarantee\n // that the fetch loader gives us flush moof+mdat pairs. If we push jagged data to MSE, it will throw an exception.\n if (this.remainderData) {\n videoSamples = appendUint8Array(this.remainderData, data);\n }\n const segmentedData = segmentValidRange(videoSamples);\n this.remainderData = segmentedData.remainder;\n videoTrack.samples = segmentedData.valid || new Uint8Array();\n } else {\n videoTrack.samples = videoSamples;\n }\n const id3Track = this.extractID3Track(videoTrack, timeOffset);\n textTrack.samples = parseSamples(timeOffset, videoTrack);\n return {\n videoTrack,\n audioTrack: this.audioTrack,\n id3Track,\n textTrack: this.txtTrack\n };\n }\n flush() {\n const timeOffset = this.timeOffset;\n const videoTrack = this.videoTrack;\n const textTrack = this.txtTrack;\n videoTrack.samples = this.remainderData || new Uint8Array();\n this.remainderData = null;\n const id3Track = this.extractID3Track(videoTrack, this.timeOffset);\n textTrack.samples = parseSamples(timeOffset, videoTrack);\n return {\n videoTrack,\n audioTrack: dummyTrack(),\n id3Track,\n textTrack: dummyTrack()\n };\n }\n extractID3Track(videoTrack, timeOffset) {\n const id3Track = this.id3Track;\n if (videoTrack.samples.length) {\n const emsgs = findBox(videoTrack.samples, ['emsg']);\n if (emsgs) {\n emsgs.forEach(data => {\n const emsgInfo = parseEmsg(data);\n if (emsgSchemePattern.test(emsgInfo.schemeIdUri)) {\n const pts = getEmsgStartTime(emsgInfo, timeOffset);\n let duration = emsgInfo.eventDuration === 0xffffffff ? Number.POSITIVE_INFINITY : emsgInfo.eventDuration / emsgInfo.timeScale;\n // Safari takes anything <= 0.001 seconds and maps it to Infinity\n if (duration <= 0.001) {\n duration = Number.POSITIVE_INFINITY;\n }\n const payload = emsgInfo.payload;\n id3Track.samples.push({\n data: payload,\n len: payload.byteLength,\n dts: pts,\n pts: pts,\n type: MetadataSchema.emsg,\n duration: duration\n });\n } else if (this.config.enableEmsgKLVMetadata && emsgInfo.schemeIdUri.startsWith('urn:misb:KLV:bin:1910.1')) {\n const pts = getEmsgStartTime(emsgInfo, timeOffset);\n id3Track.samples.push({\n data: emsgInfo.payload,\n len: emsgInfo.payload.byteLength,\n dts: pts,\n pts: pts,\n type: MetadataSchema.misbklv,\n duration: Number.POSITIVE_INFINITY\n });\n }\n });\n }\n }\n return id3Track;\n }\n demuxSampleAes(data, keyData, timeOffset) {\n return Promise.reject(new Error('The MP4 demuxer does not support SAMPLE-AES decryption'));\n }\n destroy() {\n // @ts-ignore\n this.config = null;\n this.remainderData = null;\n this.videoTrack = this.audioTrack = this.id3Track = this.txtTrack = undefined;\n }\n}\nfunction getEmsgStartTime(emsgInfo, timeOffset) {\n return isFiniteNumber(emsgInfo.presentationTime) ? emsgInfo.presentationTime / emsgInfo.timeScale : timeOffset + emsgInfo.presentationTimeDelta / emsgInfo.timeScale;\n}\n\n/**\n * SAMPLE-AES decrypter\n */\n\nclass SampleAesDecrypter {\n constructor(observer, config, keyData) {\n this.keyData = void 0;\n this.decrypter = void 0;\n this.keyData = keyData;\n this.decrypter = new Decrypter(config, {\n removePKCS7Padding: false\n });\n }\n decryptBuffer(encryptedData) {\n return this.decrypter.decrypt(encryptedData, this.keyData.key.buffer, this.keyData.iv.buffer, DecrypterAesMode.cbc);\n }\n\n // AAC - encrypt all full 16 bytes blocks starting from offset 16\n decryptAacSample(samples, sampleIndex, callback) {\n const curUnit = samples[sampleIndex].unit;\n if (curUnit.length <= 16) {\n // No encrypted portion in this sample (first 16 bytes is not\n // encrypted, see https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/HLS_Sample_Encryption/Encryption/Encryption.html),\n return;\n }\n const encryptedData = curUnit.subarray(16, curUnit.length - curUnit.length % 16);\n const encryptedBuffer = encryptedData.buffer.slice(encryptedData.byteOffset, encryptedData.byteOffset + encryptedData.length);\n this.decryptBuffer(encryptedBuffer).then(decryptedBuffer => {\n const decryptedData = new Uint8Array(decryptedBuffer);\n curUnit.set(decryptedData, 16);\n if (!this.decrypter.isSync()) {\n this.decryptAacSamples(samples, sampleIndex + 1, callback);\n }\n }).catch(callback);\n }\n decryptAacSamples(samples, sampleIndex, callback) {\n for (;; sampleIndex++) {\n if (sampleIndex >= samples.length) {\n callback();\n return;\n }\n if (samples[sampleIndex].unit.length < 32) {\n continue;\n }\n this.decryptAacSample(samples, sampleIndex, callback);\n if (!this.decrypter.isSync()) {\n return;\n }\n }\n }\n\n // AVC - encrypt one 16 bytes block out of ten, starting from offset 32\n getAvcEncryptedData(decodedData) {\n const encryptedDataLen = Math.floor((decodedData.length - 48) / 160) * 16 + 16;\n const encryptedData = new Int8Array(encryptedDataLen);\n let outputPos = 0;\n for (let inputPos = 32; inputPos < decodedData.length - 16; inputPos += 160, outputPos += 16) {\n encryptedData.set(decodedData.subarray(inputPos, inputPos + 16), outputPos);\n }\n return encryptedData;\n }\n getAvcDecryptedUnit(decodedData, decryptedData) {\n const uint8DecryptedData = new Uint8Array(decryptedData);\n let inputPos = 0;\n for (let outputPos = 32; outputPos < decodedData.length - 16; outputPos += 160, inputPos += 16) {\n decodedData.set(uint8DecryptedData.subarray(inputPos, inputPos + 16), outputPos);\n }\n return decodedData;\n }\n decryptAvcSample(samples, sampleIndex, unitIndex, callback, curUnit) {\n const decodedData = discardEPB(curUnit.data);\n const encryptedData = this.getAvcEncryptedData(decodedData);\n this.decryptBuffer(encryptedData.buffer).then(decryptedBuffer => {\n curUnit.data = this.getAvcDecryptedUnit(decodedData, decryptedBuffer);\n if (!this.decrypter.isSync()) {\n this.decryptAvcSamples(samples, sampleIndex, unitIndex + 1, callback);\n }\n }).catch(callback);\n }\n decryptAvcSamples(samples, sampleIndex, unitIndex, callback) {\n if (samples instanceof Uint8Array) {\n throw new Error('Cannot decrypt samples of type Uint8Array');\n }\n for (;; sampleIndex++, unitIndex = 0) {\n if (sampleIndex >= samples.length) {\n callback();\n return;\n }\n const curUnits = samples[sampleIndex].units;\n for (;; unitIndex++) {\n if (unitIndex >= curUnits.length) {\n break;\n }\n const curUnit = curUnits[unitIndex];\n if (curUnit.data.length <= 48 || curUnit.type !== 1 && curUnit.type !== 5) {\n continue;\n }\n this.decryptAvcSample(samples, sampleIndex, unitIndex, callback, curUnit);\n if (!this.decrypter.isSync()) {\n return;\n }\n }\n }\n }\n}\n\nclass BaseVideoParser {\n constructor() {\n this.VideoSample = null;\n }\n createVideoSample(key, pts, dts) {\n return {\n key,\n frame: false,\n pts,\n dts,\n units: [],\n length: 0\n };\n }\n getLastNalUnit(samples) {\n var _VideoSample;\n let VideoSample = this.VideoSample;\n let lastUnit;\n // try to fallback to previous sample if current one is empty\n if (!VideoSample || VideoSample.units.length === 0) {\n VideoSample = samples[samples.length - 1];\n }\n if ((_VideoSample = VideoSample) != null && _VideoSample.units) {\n const units = VideoSample.units;\n lastUnit = units[units.length - 1];\n }\n return lastUnit;\n }\n pushAccessUnit(VideoSample, videoTrack) {\n if (VideoSample.units.length && VideoSample.frame) {\n // if sample does not have PTS/DTS, patch with last sample PTS/DTS\n if (VideoSample.pts === undefined) {\n const samples = videoTrack.samples;\n const nbSamples = samples.length;\n if (nbSamples) {\n const lastSample = samples[nbSamples - 1];\n VideoSample.pts = lastSample.pts;\n VideoSample.dts = lastSample.dts;\n } else {\n // dropping samples, no timestamp found\n videoTrack.dropped++;\n return;\n }\n }\n videoTrack.samples.push(VideoSample);\n }\n }\n parseNALu(track, array, endOfSegment) {\n const len = array.byteLength;\n let state = track.naluState || 0;\n const lastState = state;\n const units = [];\n let i = 0;\n let value;\n let overflow;\n let unitType;\n let lastUnitStart = -1;\n let lastUnitType = 0;\n // logger.log('PES:' + Hex.hexDump(array));\n\n if (state === -1) {\n // special use case where we found 3 or 4-byte start codes exactly at the end of previous PES packet\n lastUnitStart = 0;\n // NALu type is value read from offset 0\n lastUnitType = this.getNALuType(array, 0);\n state = 0;\n i = 1;\n }\n while (i < len) {\n value = array[i++];\n // optimization. state 0 and 1 are the predominant case. let's handle them outside of the switch/case\n if (!state) {\n state = value ? 0 : 1;\n continue;\n }\n if (state === 1) {\n state = value ? 0 : 2;\n continue;\n }\n // here we have state either equal to 2 or 3\n if (!value) {\n state = 3;\n } else if (value === 1) {\n overflow = i - state - 1;\n if (lastUnitStart >= 0) {\n const unit = {\n data: array.subarray(lastUnitStart, overflow),\n type: lastUnitType\n };\n // logger.log('pushing NALU, type/size:' + unit.type + '/' + unit.data.byteLength);\n units.push(unit);\n } else {\n // lastUnitStart is undefined => this is the first start code found in this PES packet\n // first check if start code delimiter is overlapping between 2 PES packets,\n // ie it started in last packet (lastState not zero)\n // and ended at the beginning of this PES packet (i <= 4 - lastState)\n const lastUnit = this.getLastNalUnit(track.samples);\n if (lastUnit) {\n if (lastState && i <= 4 - lastState) {\n // start delimiter overlapping between PES packets\n // strip start delimiter bytes from the end of last NAL unit\n // check if lastUnit had a state different from zero\n if (lastUnit.state) {\n // strip last bytes\n lastUnit.data = lastUnit.data.subarray(0, lastUnit.data.byteLength - lastState);\n }\n }\n // If NAL units are not starting right at the beginning of the PES packet, push preceding data into previous NAL unit.\n\n if (overflow > 0) {\n // logger.log('first NALU found with overflow:' + overflow);\n lastUnit.data = appendUint8Array(lastUnit.data, array.subarray(0, overflow));\n lastUnit.state = 0;\n }\n }\n }\n // check if we can read unit type\n if (i < len) {\n unitType = this.getNALuType(array, i);\n // logger.log('find NALU @ offset:' + i + ',type:' + unitType);\n lastUnitStart = i;\n lastUnitType = unitType;\n state = 0;\n } else {\n // not enough byte to read unit type. let's read it on next PES parsing\n state = -1;\n }\n } else {\n state = 0;\n }\n }\n if (lastUnitStart >= 0 && state >= 0) {\n const unit = {\n data: array.subarray(lastUnitStart, len),\n type: lastUnitType,\n state: state\n };\n units.push(unit);\n // logger.log('pushing NALU, type/size/state:' + unit.type + '/' + unit.data.byteLength + '/' + state);\n }\n // no NALu found\n if (units.length === 0) {\n // append pes.data to previous NAL unit\n const lastUnit = this.getLastNalUnit(track.samples);\n if (lastUnit) {\n lastUnit.data = appendUint8Array(lastUnit.data, array);\n }\n }\n track.naluState = state;\n return units;\n }\n}\n\n/**\n * Parser for exponential Golomb codes, a variable-bitwidth number encoding scheme used by h264.\n */\n\nclass ExpGolomb {\n constructor(data) {\n this.data = void 0;\n this.bytesAvailable = void 0;\n this.word = void 0;\n this.bitsAvailable = void 0;\n this.data = data;\n // the number of bytes left to examine in this.data\n this.bytesAvailable = data.byteLength;\n // the current word being examined\n this.word = 0; // :uint\n // the number of bits left to examine in the current word\n this.bitsAvailable = 0; // :uint\n }\n\n // ():void\n loadWord() {\n const data = this.data;\n const bytesAvailable = this.bytesAvailable;\n const position = data.byteLength - bytesAvailable;\n const workingBytes = new Uint8Array(4);\n const availableBytes = Math.min(4, bytesAvailable);\n if (availableBytes === 0) {\n throw new Error('no bytes available');\n }\n workingBytes.set(data.subarray(position, position + availableBytes));\n this.word = new DataView(workingBytes.buffer).getUint32(0);\n // track the amount of this.data that has been processed\n this.bitsAvailable = availableBytes * 8;\n this.bytesAvailable -= availableBytes;\n }\n\n // (count:int):void\n skipBits(count) {\n let skipBytes; // :int\n count = Math.min(count, this.bytesAvailable * 8 + this.bitsAvailable);\n if (this.bitsAvailable > count) {\n this.word <<= count;\n this.bitsAvailable -= count;\n } else {\n count -= this.bitsAvailable;\n skipBytes = count >> 3;\n count -= skipBytes << 3;\n this.bytesAvailable -= skipBytes;\n this.loadWord();\n this.word <<= count;\n this.bitsAvailable -= count;\n }\n }\n\n // (size:int):uint\n readBits(size) {\n let bits = Math.min(this.bitsAvailable, size); // :uint\n const valu = this.word >>> 32 - bits; // :uint\n if (size > 32) {\n logger.error('Cannot read more than 32 bits at a time');\n }\n this.bitsAvailable -= bits;\n if (this.bitsAvailable > 0) {\n this.word <<= bits;\n } else if (this.bytesAvailable > 0) {\n this.loadWord();\n } else {\n throw new Error('no bits available');\n }\n bits = size - bits;\n if (bits > 0 && this.bitsAvailable) {\n return valu << bits | this.readBits(bits);\n } else {\n return valu;\n }\n }\n\n // ():uint\n skipLZ() {\n let leadingZeroCount; // :uint\n for (leadingZeroCount = 0; leadingZeroCount < this.bitsAvailable; ++leadingZeroCount) {\n if ((this.word & 0x80000000 >>> leadingZeroCount) !== 0) {\n // the first bit of working word is 1\n this.word <<= leadingZeroCount;\n this.bitsAvailable -= leadingZeroCount;\n return leadingZeroCount;\n }\n }\n // we exhausted word and still have not found a 1\n this.loadWord();\n return leadingZeroCount + this.skipLZ();\n }\n\n // ():void\n skipUEG() {\n this.skipBits(1 + this.skipLZ());\n }\n\n // ():void\n skipEG() {\n this.skipBits(1 + this.skipLZ());\n }\n\n // ():uint\n readUEG() {\n const clz = this.skipLZ(); // :uint\n return this.readBits(clz + 1) - 1;\n }\n\n // ():int\n readEG() {\n const valu = this.readUEG(); // :int\n if (0x01 & valu) {\n // the number is odd if the low order bit is set\n return 1 + valu >>> 1; // add 1 to make it even, and divide by 2\n } else {\n return -1 * (valu >>> 1); // divide by two then make it negative\n }\n }\n\n // Some convenience functions\n // :Boolean\n readBoolean() {\n return this.readBits(1) === 1;\n }\n\n // ():int\n readUByte() {\n return this.readBits(8);\n }\n\n // ():int\n readUShort() {\n return this.readBits(16);\n }\n\n // ():int\n readUInt() {\n return this.readBits(32);\n }\n}\n\nclass AvcVideoParser extends BaseVideoParser {\n parsePES(track, textTrack, pes, endOfSegment) {\n const units = this.parseNALu(track, pes.data, endOfSegment);\n let VideoSample = this.VideoSample;\n let push;\n let spsfound = false;\n // free pes.data to save up some memory\n pes.data = null;\n\n // if new NAL units found and last sample still there, let's push ...\n // this helps parsing streams with missing AUD (only do this if AUD never found)\n if (VideoSample && units.length && !track.audFound) {\n this.pushAccessUnit(VideoSample, track);\n VideoSample = this.VideoSample = this.createVideoSample(false, pes.pts, pes.dts);\n }\n units.forEach(unit => {\n var _VideoSample2, _VideoSample3;\n switch (unit.type) {\n // NDR\n case 1:\n {\n let iskey = false;\n push = true;\n const data = unit.data;\n // only check slice type to detect KF in case SPS found in same packet (any keyframe is preceded by SPS ...)\n if (spsfound && data.length > 4) {\n // retrieve slice type by parsing beginning of NAL unit (follow H264 spec, slice_header definition) to detect keyframe embedded in NDR\n const sliceType = this.readSliceType(data);\n // 2 : I slice, 4 : SI slice, 7 : I slice, 9: SI slice\n // SI slice : A slice that is coded using intra prediction only and using quantisation of the prediction samples.\n // An SI slice can be coded such that its decoded samples can be constructed identically to an SP slice.\n // I slice: A slice that is not an SI slice that is decoded using intra prediction only.\n // if (sliceType === 2 || sliceType === 7) {\n if (sliceType === 2 || sliceType === 4 || sliceType === 7 || sliceType === 9) {\n iskey = true;\n }\n }\n if (iskey) {\n var _VideoSample;\n // if we have non-keyframe data already, that cannot belong to the same frame as a keyframe, so force a push\n if ((_VideoSample = VideoSample) != null && _VideoSample.frame && !VideoSample.key) {\n this.pushAccessUnit(VideoSample, track);\n VideoSample = this.VideoSample = null;\n }\n }\n if (!VideoSample) {\n VideoSample = this.VideoSample = this.createVideoSample(true, pes.pts, pes.dts);\n }\n VideoSample.frame = true;\n VideoSample.key = iskey;\n break;\n // IDR\n }\n case 5:\n push = true;\n // handle PES not starting with AUD\n // if we have frame data already, that cannot belong to the same frame, so force a push\n if ((_VideoSample2 = VideoSample) != null && _VideoSample2.frame && !VideoSample.key) {\n this.pushAccessUnit(VideoSample, track);\n VideoSample = this.VideoSample = null;\n }\n if (!VideoSample) {\n VideoSample = this.VideoSample = this.createVideoSample(true, pes.pts, pes.dts);\n }\n VideoSample.key = true;\n VideoSample.frame = true;\n break;\n // SEI\n case 6:\n {\n push = true;\n parseSEIMessageFromNALu(unit.data, 1, pes.pts, textTrack.samples);\n break;\n // SPS\n }\n case 7:\n {\n var _track$pixelRatio, _track$pixelRatio2;\n push = true;\n spsfound = true;\n const sps = unit.data;\n const config = this.readSPS(sps);\n if (!track.sps || track.width !== config.width || track.height !== config.height || ((_track$pixelRatio = track.pixelRatio) == null ? void 0 : _track$pixelRatio[0]) !== config.pixelRatio[0] || ((_track$pixelRatio2 = track.pixelRatio) == null ? void 0 : _track$pixelRatio2[1]) !== config.pixelRatio[1]) {\n track.width = config.width;\n track.height = config.height;\n track.pixelRatio = config.pixelRatio;\n track.sps = [sps];\n const codecarray = sps.subarray(1, 4);\n let codecstring = 'avc1.';\n for (let i = 0; i < 3; i++) {\n let h = codecarray[i].toString(16);\n if (h.length < 2) {\n h = '0' + h;\n }\n codecstring += h;\n }\n track.codec = codecstring;\n }\n break;\n }\n // PPS\n case 8:\n push = true;\n track.pps = [unit.data];\n break;\n // AUD\n case 9:\n push = true;\n track.audFound = true;\n if ((_VideoSample3 = VideoSample) != null && _VideoSample3.frame) {\n this.pushAccessUnit(VideoSample, track);\n VideoSample = null;\n }\n if (!VideoSample) {\n VideoSample = this.VideoSample = this.createVideoSample(false, pes.pts, pes.dts);\n }\n break;\n // Filler Data\n case 12:\n push = true;\n break;\n default:\n push = false;\n break;\n }\n if (VideoSample && push) {\n const units = VideoSample.units;\n units.push(unit);\n }\n });\n // if last PES packet, push samples\n if (endOfSegment && VideoSample) {\n this.pushAccessUnit(VideoSample, track);\n this.VideoSample = null;\n }\n }\n getNALuType(data, offset) {\n return data[offset] & 0x1f;\n }\n readSliceType(data) {\n const eg = new ExpGolomb(data);\n // skip NALu type\n eg.readUByte();\n // discard first_mb_in_slice\n eg.readUEG();\n // return slice_type\n return eg.readUEG();\n }\n\n /**\n * The scaling list is optionally transmitted as part of a sequence parameter\n * set and is not relevant to transmuxing.\n * @param count the number of entries in this scaling list\n * @see Recommendation ITU-T H.264, Section 7.3.2.1.1.1\n */\n skipScalingList(count, reader) {\n let lastScale = 8;\n let nextScale = 8;\n let deltaScale;\n for (let j = 0; j < count; j++) {\n if (nextScale !== 0) {\n deltaScale = reader.readEG();\n nextScale = (lastScale + deltaScale + 256) % 256;\n }\n lastScale = nextScale === 0 ? lastScale : nextScale;\n }\n }\n\n /**\n * Read a sequence parameter set and return some interesting video\n * properties. A sequence parameter set is the H264 metadata that\n * describes the properties of upcoming video frames.\n * @returns an object with configuration parsed from the\n * sequence parameter set, including the dimensions of the\n * associated video frames.\n */\n readSPS(sps) {\n const eg = new ExpGolomb(sps);\n let frameCropLeftOffset = 0;\n let frameCropRightOffset = 0;\n let frameCropTopOffset = 0;\n let frameCropBottomOffset = 0;\n let numRefFramesInPicOrderCntCycle;\n let scalingListCount;\n let i;\n const readUByte = eg.readUByte.bind(eg);\n const readBits = eg.readBits.bind(eg);\n const readUEG = eg.readUEG.bind(eg);\n const readBoolean = eg.readBoolean.bind(eg);\n const skipBits = eg.skipBits.bind(eg);\n const skipEG = eg.skipEG.bind(eg);\n const skipUEG = eg.skipUEG.bind(eg);\n const skipScalingList = this.skipScalingList.bind(this);\n readUByte();\n const profileIdc = readUByte(); // profile_idc\n readBits(5); // profileCompat constraint_set[0-4]_flag, u(5)\n skipBits(3); // reserved_zero_3bits u(3),\n readUByte(); // level_idc u(8)\n skipUEG(); // seq_parameter_set_id\n // some profiles have more optional data we don't need\n if (profileIdc === 100 || profileIdc === 110 || profileIdc === 122 || profileIdc === 244 || profileIdc === 44 || profileIdc === 83 || profileIdc === 86 || profileIdc === 118 || profileIdc === 128) {\n const chromaFormatIdc = readUEG();\n if (chromaFormatIdc === 3) {\n skipBits(1);\n } // separate_colour_plane_flag\n\n skipUEG(); // bit_depth_luma_minus8\n skipUEG(); // bit_depth_chroma_minus8\n skipBits(1); // qpprime_y_zero_transform_bypass_flag\n if (readBoolean()) {\n // seq_scaling_matrix_present_flag\n scalingListCount = chromaFormatIdc !== 3 ? 8 : 12;\n for (i = 0; i < scalingListCount; i++) {\n if (readBoolean()) {\n // seq_scaling_list_present_flag[ i ]\n if (i < 6) {\n skipScalingList(16, eg);\n } else {\n skipScalingList(64, eg);\n }\n }\n }\n }\n }\n skipUEG(); // log2_max_frame_num_minus4\n const picOrderCntType = readUEG();\n if (picOrderCntType === 0) {\n readUEG(); // log2_max_pic_order_cnt_lsb_minus4\n } else if (picOrderCntType === 1) {\n skipBits(1); // delta_pic_order_always_zero_flag\n skipEG(); // offset_for_non_ref_pic\n skipEG(); // offset_for_top_to_bottom_field\n numRefFramesInPicOrderCntCycle = readUEG();\n for (i = 0; i < numRefFramesInPicOrderCntCycle; i++) {\n skipEG();\n } // offset_for_ref_frame[ i ]\n }\n skipUEG(); // max_num_ref_frames\n skipBits(1); // gaps_in_frame_num_value_allowed_flag\n const picWidthInMbsMinus1 = readUEG();\n const picHeightInMapUnitsMinus1 = readUEG();\n const frameMbsOnlyFlag = readBits(1);\n if (frameMbsOnlyFlag === 0) {\n skipBits(1);\n } // mb_adaptive_frame_field_flag\n\n skipBits(1); // direct_8x8_inference_flag\n if (readBoolean()) {\n // frame_cropping_flag\n frameCropLeftOffset = readUEG();\n frameCropRightOffset = readUEG();\n frameCropTopOffset = readUEG();\n frameCropBottomOffset = readUEG();\n }\n let pixelRatio = [1, 1];\n if (readBoolean()) {\n // vui_parameters_present_flag\n if (readBoolean()) {\n // aspect_ratio_info_present_flag\n const aspectRatioIdc = readUByte();\n switch (aspectRatioIdc) {\n case 1:\n pixelRatio = [1, 1];\n break;\n case 2:\n pixelRatio = [12, 11];\n break;\n case 3:\n pixelRatio = [10, 11];\n break;\n case 4:\n pixelRatio = [16, 11];\n break;\n case 5:\n pixelRatio = [40, 33];\n break;\n case 6:\n pixelRatio = [24, 11];\n break;\n case 7:\n pixelRatio = [20, 11];\n break;\n case 8:\n pixelRatio = [32, 11];\n break;\n case 9:\n pixelRatio = [80, 33];\n break;\n case 10:\n pixelRatio = [18, 11];\n break;\n case 11:\n pixelRatio = [15, 11];\n break;\n case 12:\n pixelRatio = [64, 33];\n break;\n case 13:\n pixelRatio = [160, 99];\n break;\n case 14:\n pixelRatio = [4, 3];\n break;\n case 15:\n pixelRatio = [3, 2];\n break;\n case 16:\n pixelRatio = [2, 1];\n break;\n case 255:\n {\n pixelRatio = [readUByte() << 8 | readUByte(), readUByte() << 8 | readUByte()];\n break;\n }\n }\n }\n }\n return {\n width: Math.ceil((picWidthInMbsMinus1 + 1) * 16 - frameCropLeftOffset * 2 - frameCropRightOffset * 2),\n height: (2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1) * 16 - (frameMbsOnlyFlag ? 2 : 4) * (frameCropTopOffset + frameCropBottomOffset),\n pixelRatio: pixelRatio\n };\n }\n}\n\nclass HevcVideoParser extends BaseVideoParser {\n constructor(...args) {\n super(...args);\n this.initVPS = null;\n }\n parsePES(track, textTrack, pes, endOfSegment) {\n const units = this.parseNALu(track, pes.data, endOfSegment);\n let VideoSample = this.VideoSample;\n let push;\n let spsfound = false;\n // free pes.data to save up some memory\n pes.data = null;\n\n // if new NAL units found and last sample still there, let's push ...\n // this helps parsing streams with missing AUD (only do this if AUD never found)\n if (VideoSample && units.length && !track.audFound) {\n this.pushAccessUnit(VideoSample, track);\n VideoSample = this.VideoSample = this.createVideoSample(false, pes.pts, pes.dts);\n }\n units.forEach(unit => {\n var _VideoSample2, _VideoSample3;\n switch (unit.type) {\n // NON-IDR, NON RANDOM ACCESS SLICE\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n case 6:\n case 7:\n case 8:\n case 9:\n if (!VideoSample) {\n VideoSample = this.VideoSample = this.createVideoSample(false, pes.pts, pes.dts);\n }\n VideoSample.frame = true;\n push = true;\n break;\n\n // CRA, BLA (random access picture)\n case 16:\n case 17:\n case 18:\n case 21:\n push = true;\n if (spsfound) {\n var _VideoSample;\n // handle PES not starting with AUD\n // if we have frame data already, that cannot belong to the same frame, so force a push\n if ((_VideoSample = VideoSample) != null && _VideoSample.frame && !VideoSample.key) {\n this.pushAccessUnit(VideoSample, track);\n VideoSample = this.VideoSample = null;\n }\n }\n if (!VideoSample) {\n VideoSample = this.VideoSample = this.createVideoSample(true, pes.pts, pes.dts);\n }\n VideoSample.key = true;\n VideoSample.frame = true;\n break;\n\n // IDR\n case 19:\n case 20:\n push = true;\n // handle PES not starting with AUD\n // if we have frame data already, that cannot belong to the same frame, so force a push\n if ((_VideoSample2 = VideoSample) != null && _VideoSample2.frame && !VideoSample.key) {\n this.pushAccessUnit(VideoSample, track);\n VideoSample = this.VideoSample = null;\n }\n if (!VideoSample) {\n VideoSample = this.VideoSample = this.createVideoSample(true, pes.pts, pes.dts);\n }\n VideoSample.key = true;\n VideoSample.frame = true;\n break;\n\n // SEI\n case 39:\n push = true;\n parseSEIMessageFromNALu(unit.data, 2,\n // NALu header size\n pes.pts, textTrack.samples);\n break;\n\n // VPS\n case 32:\n push = true;\n if (!track.vps) {\n if (typeof track.params !== 'object') {\n track.params = {};\n }\n track.params = _extends(track.params, this.readVPS(unit.data));\n this.initVPS = unit.data;\n }\n track.vps = [unit.data];\n break;\n\n // SPS\n case 33:\n push = true;\n spsfound = true;\n if (track.vps !== undefined && track.vps[0] !== this.initVPS && track.sps !== undefined && !this.matchSPS(track.sps[0], unit.data)) {\n this.initVPS = track.vps[0];\n track.sps = track.pps = undefined;\n }\n if (!track.sps) {\n const config = this.readSPS(unit.data);\n track.width = config.width;\n track.height = config.height;\n track.pixelRatio = config.pixelRatio;\n track.codec = config.codecString;\n track.sps = [];\n if (typeof track.params !== 'object') {\n track.params = {};\n }\n for (const prop in config.params) {\n track.params[prop] = config.params[prop];\n }\n }\n this.pushParameterSet(track.sps, unit.data, track.vps);\n if (!VideoSample) {\n VideoSample = this.VideoSample = this.createVideoSample(true, pes.pts, pes.dts);\n }\n VideoSample.key = true;\n break;\n\n // PPS\n case 34:\n push = true;\n if (typeof track.params === 'object') {\n if (!track.pps) {\n track.pps = [];\n const config = this.readPPS(unit.data);\n for (const prop in config) {\n track.params[prop] = config[prop];\n }\n }\n this.pushParameterSet(track.pps, unit.data, track.vps);\n }\n break;\n\n // ACCESS UNIT DELIMITER\n case 35:\n push = true;\n track.audFound = true;\n if ((_VideoSample3 = VideoSample) != null && _VideoSample3.frame) {\n this.pushAccessUnit(VideoSample, track);\n VideoSample = null;\n }\n if (!VideoSample) {\n VideoSample = this.VideoSample = this.createVideoSample(false, pes.pts, pes.dts);\n }\n break;\n default:\n push = false;\n break;\n }\n if (VideoSample && push) {\n const units = VideoSample.units;\n units.push(unit);\n }\n });\n // if last PES packet, push samples\n if (endOfSegment && VideoSample) {\n this.pushAccessUnit(VideoSample, track);\n this.VideoSample = null;\n }\n }\n pushParameterSet(parameterSets, data, vps) {\n if (vps && vps[0] === this.initVPS || !vps && !parameterSets.length) {\n parameterSets.push(data);\n }\n }\n getNALuType(data, offset) {\n return (data[offset] & 0x7e) >>> 1;\n }\n ebsp2rbsp(arr) {\n const dst = new Uint8Array(arr.byteLength);\n let dstIdx = 0;\n for (let i = 0; i < arr.byteLength; i++) {\n if (i >= 2) {\n // Unescape: Skip 0x03 after 00 00\n if (arr[i] === 0x03 && arr[i - 1] === 0x00 && arr[i - 2] === 0x00) {\n continue;\n }\n }\n dst[dstIdx] = arr[i];\n dstIdx++;\n }\n return new Uint8Array(dst.buffer, 0, dstIdx);\n }\n pushAccessUnit(VideoSample, videoTrack) {\n super.pushAccessUnit(VideoSample, videoTrack);\n if (this.initVPS) {\n this.initVPS = null; // null initVPS to prevent possible track's sps/pps growth until next VPS\n }\n }\n readVPS(vps) {\n const eg = new ExpGolomb(vps);\n // remove header\n eg.readUByte();\n eg.readUByte();\n eg.readBits(4); // video_parameter_set_id\n eg.skipBits(2);\n eg.readBits(6); // max_layers_minus1\n const max_sub_layers_minus1 = eg.readBits(3);\n const temporal_id_nesting_flag = eg.readBoolean();\n // ...vui fps can be here, but empty fps value is not critical for metadata\n\n return {\n numTemporalLayers: max_sub_layers_minus1 + 1,\n temporalIdNested: temporal_id_nesting_flag\n };\n }\n readSPS(sps) {\n const eg = new ExpGolomb(this.ebsp2rbsp(sps));\n eg.readUByte();\n eg.readUByte();\n eg.readBits(4); //video_parameter_set_id\n const max_sub_layers_minus1 = eg.readBits(3);\n eg.readBoolean(); // temporal_id_nesting_flag\n\n // profile_tier_level\n const general_profile_space = eg.readBits(2);\n const general_tier_flag = eg.readBoolean();\n const general_profile_idc = eg.readBits(5);\n const general_profile_compatibility_flags_1 = eg.readUByte();\n const general_profile_compatibility_flags_2 = eg.readUByte();\n const general_profile_compatibility_flags_3 = eg.readUByte();\n const general_profile_compatibility_flags_4 = eg.readUByte();\n const general_constraint_indicator_flags_1 = eg.readUByte();\n const general_constraint_indicator_flags_2 = eg.readUByte();\n const general_constraint_indicator_flags_3 = eg.readUByte();\n const general_constraint_indicator_flags_4 = eg.readUByte();\n const general_constraint_indicator_flags_5 = eg.readUByte();\n const general_constraint_indicator_flags_6 = eg.readUByte();\n const general_level_idc = eg.readUByte();\n const sub_layer_profile_present_flags = [];\n const sub_layer_level_present_flags = [];\n for (let i = 0; i < max_sub_layers_minus1; i++) {\n sub_layer_profile_present_flags.push(eg.readBoolean());\n sub_layer_level_present_flags.push(eg.readBoolean());\n }\n if (max_sub_layers_minus1 > 0) {\n for (let i = max_sub_layers_minus1; i < 8; i++) {\n eg.readBits(2);\n }\n }\n for (let i = 0; i < max_sub_layers_minus1; i++) {\n if (sub_layer_profile_present_flags[i]) {\n eg.readUByte(); // sub_layer_profile_space, sub_layer_tier_flag, sub_layer_profile_idc\n eg.readUByte();\n eg.readUByte();\n eg.readUByte();\n eg.readUByte(); // sub_layer_profile_compatibility_flag\n eg.readUByte();\n eg.readUByte();\n eg.readUByte();\n eg.readUByte();\n eg.readUByte();\n eg.readUByte();\n }\n if (sub_layer_level_present_flags[i]) {\n eg.readUByte();\n }\n }\n eg.readUEG(); // seq_parameter_set_id\n const chroma_format_idc = eg.readUEG();\n if (chroma_format_idc == 3) {\n eg.skipBits(1); //separate_colour_plane_flag\n }\n const pic_width_in_luma_samples = eg.readUEG();\n const pic_height_in_luma_samples = eg.readUEG();\n const conformance_window_flag = eg.readBoolean();\n let pic_left_offset = 0,\n pic_right_offset = 0,\n pic_top_offset = 0,\n pic_bottom_offset = 0;\n if (conformance_window_flag) {\n pic_left_offset += eg.readUEG();\n pic_right_offset += eg.readUEG();\n pic_top_offset += eg.readUEG();\n pic_bottom_offset += eg.readUEG();\n }\n const bit_depth_luma_minus8 = eg.readUEG();\n const bit_depth_chroma_minus8 = eg.readUEG();\n const log2_max_pic_order_cnt_lsb_minus4 = eg.readUEG();\n const sub_layer_ordering_info_present_flag = eg.readBoolean();\n for (let i = sub_layer_ordering_info_present_flag ? 0 : max_sub_layers_minus1; i <= max_sub_layers_minus1; i++) {\n eg.skipUEG(); // max_dec_pic_buffering_minus1[i]\n eg.skipUEG(); // max_num_reorder_pics[i]\n eg.skipUEG(); // max_latency_increase_plus1[i]\n }\n eg.skipUEG(); // log2_min_luma_coding_block_size_minus3\n eg.skipUEG(); // log2_diff_max_min_luma_coding_block_size\n eg.skipUEG(); // log2_min_transform_block_size_minus2\n eg.skipUEG(); // log2_diff_max_min_transform_block_size\n eg.skipUEG(); // max_transform_hierarchy_depth_inter\n eg.skipUEG(); // max_transform_hierarchy_depth_intra\n const scaling_list_enabled_flag = eg.readBoolean();\n if (scaling_list_enabled_flag) {\n const sps_scaling_list_data_present_flag = eg.readBoolean();\n if (sps_scaling_list_data_present_flag) {\n for (let sizeId = 0; sizeId < 4; sizeId++) {\n for (let matrixId = 0; matrixId < (sizeId === 3 ? 2 : 6); matrixId++) {\n const scaling_list_pred_mode_flag = eg.readBoolean();\n if (!scaling_list_pred_mode_flag) {\n eg.readUEG(); // scaling_list_pred_matrix_id_delta\n } else {\n const coefNum = Math.min(64, 1 << 4 + (sizeId << 1));\n if (sizeId > 1) {\n eg.readEG();\n }\n for (let i = 0; i < coefNum; i++) {\n eg.readEG();\n }\n }\n }\n }\n }\n }\n eg.readBoolean(); // amp_enabled_flag\n eg.readBoolean(); // sample_adaptive_offset_enabled_flag\n const pcm_enabled_flag = eg.readBoolean();\n if (pcm_enabled_flag) {\n eg.readUByte();\n eg.skipUEG();\n eg.skipUEG();\n eg.readBoolean();\n }\n const num_short_term_ref_pic_sets = eg.readUEG();\n let num_delta_pocs = 0;\n for (let i = 0; i < num_short_term_ref_pic_sets; i++) {\n let inter_ref_pic_set_prediction_flag = false;\n if (i !== 0) {\n inter_ref_pic_set_prediction_flag = eg.readBoolean();\n }\n if (inter_ref_pic_set_prediction_flag) {\n if (i === num_short_term_ref_pic_sets) {\n eg.readUEG();\n }\n eg.readBoolean();\n eg.readUEG();\n let next_num_delta_pocs = 0;\n for (let j = 0; j <= num_delta_pocs; j++) {\n const used_by_curr_pic_flag = eg.readBoolean();\n let use_delta_flag = false;\n if (!used_by_curr_pic_flag) {\n use_delta_flag = eg.readBoolean();\n }\n if (used_by_curr_pic_flag || use_delta_flag) {\n next_num_delta_pocs++;\n }\n }\n num_delta_pocs = next_num_delta_pocs;\n } else {\n const num_negative_pics = eg.readUEG();\n const num_positive_pics = eg.readUEG();\n num_delta_pocs = num_negative_pics + num_positive_pics;\n for (let j = 0; j < num_negative_pics; j++) {\n eg.readUEG();\n eg.readBoolean();\n }\n for (let j = 0; j < num_positive_pics; j++) {\n eg.readUEG();\n eg.readBoolean();\n }\n }\n }\n const long_term_ref_pics_present_flag = eg.readBoolean();\n if (long_term_ref_pics_present_flag) {\n const num_long_term_ref_pics_sps = eg.readUEG();\n for (let i = 0; i < num_long_term_ref_pics_sps; i++) {\n for (let j = 0; j < log2_max_pic_order_cnt_lsb_minus4 + 4; j++) {\n eg.readBits(1);\n }\n eg.readBits(1);\n }\n }\n let min_spatial_segmentation_idc = 0;\n let sar_width = 1,\n sar_height = 1;\n let fps_fixed = true,\n fps_den = 1,\n fps_num = 0;\n eg.readBoolean(); // sps_temporal_mvp_enabled_flag\n eg.readBoolean(); // strong_intra_smoothing_enabled_flag\n let default_display_window_flag = false;\n const vui_parameters_present_flag = eg.readBoolean();\n if (vui_parameters_present_flag) {\n const aspect_ratio_info_present_flag = eg.readBoolean();\n if (aspect_ratio_info_present_flag) {\n const aspect_ratio_idc = eg.readUByte();\n const sar_width_table = [1, 12, 10, 16, 40, 24, 20, 32, 80, 18, 15, 64, 160, 4, 3, 2];\n const sar_height_table = [1, 11, 11, 11, 33, 11, 11, 11, 33, 11, 11, 33, 99, 3, 2, 1];\n if (aspect_ratio_idc > 0 && aspect_ratio_idc < 16) {\n sar_width = sar_width_table[aspect_ratio_idc - 1];\n sar_height = sar_height_table[aspect_ratio_idc - 1];\n } else if (aspect_ratio_idc === 255) {\n sar_width = eg.readBits(16);\n sar_height = eg.readBits(16);\n }\n }\n const overscan_info_present_flag = eg.readBoolean();\n if (overscan_info_present_flag) {\n eg.readBoolean();\n }\n const video_signal_type_present_flag = eg.readBoolean();\n if (video_signal_type_present_flag) {\n eg.readBits(3);\n eg.readBoolean();\n const colour_description_present_flag = eg.readBoolean();\n if (colour_description_present_flag) {\n eg.readUByte();\n eg.readUByte();\n eg.readUByte();\n }\n }\n const chroma_loc_info_present_flag = eg.readBoolean();\n if (chroma_loc_info_present_flag) {\n eg.readUEG();\n eg.readUEG();\n }\n eg.readBoolean(); // neutral_chroma_indication_flag\n eg.readBoolean(); // field_seq_flag\n eg.readBoolean(); // frame_field_info_present_flag\n default_display_window_flag = eg.readBoolean();\n if (default_display_window_flag) {\n eg.skipUEG();\n eg.skipUEG();\n eg.skipUEG();\n eg.skipUEG();\n }\n const vui_timing_info_present_flag = eg.readBoolean();\n if (vui_timing_info_present_flag) {\n fps_den = eg.readBits(32);\n fps_num = eg.readBits(32);\n const vui_poc_proportional_to_timing_flag = eg.readBoolean();\n if (vui_poc_proportional_to_timing_flag) {\n eg.readUEG();\n }\n const vui_hrd_parameters_present_flag = eg.readBoolean();\n if (vui_hrd_parameters_present_flag) {\n //const commonInfPresentFlag = true;\n //if (commonInfPresentFlag) {\n const nal_hrd_parameters_present_flag = eg.readBoolean();\n const vcl_hrd_parameters_present_flag = eg.readBoolean();\n let sub_pic_hrd_params_present_flag = false;\n if (nal_hrd_parameters_present_flag || vcl_hrd_parameters_present_flag) {\n sub_pic_hrd_params_present_flag = eg.readBoolean();\n if (sub_pic_hrd_params_present_flag) {\n eg.readUByte();\n eg.readBits(5);\n eg.readBoolean();\n eg.readBits(5);\n }\n eg.readBits(4); // bit_rate_scale\n eg.readBits(4); // cpb_size_scale\n if (sub_pic_hrd_params_present_flag) {\n eg.readBits(4);\n }\n eg.readBits(5);\n eg.readBits(5);\n eg.readBits(5);\n }\n //}\n for (let i = 0; i <= max_sub_layers_minus1; i++) {\n fps_fixed = eg.readBoolean(); // fixed_pic_rate_general_flag\n const fixed_pic_rate_within_cvs_flag = fps_fixed || eg.readBoolean();\n let low_delay_hrd_flag = false;\n if (fixed_pic_rate_within_cvs_flag) {\n eg.readEG();\n } else {\n low_delay_hrd_flag = eg.readBoolean();\n }\n const cpb_cnt = low_delay_hrd_flag ? 1 : eg.readUEG() + 1;\n if (nal_hrd_parameters_present_flag) {\n for (let j = 0; j < cpb_cnt; j++) {\n eg.readUEG();\n eg.readUEG();\n if (sub_pic_hrd_params_present_flag) {\n eg.readUEG();\n eg.readUEG();\n }\n eg.skipBits(1);\n }\n }\n if (vcl_hrd_parameters_present_flag) {\n for (let j = 0; j < cpb_cnt; j++) {\n eg.readUEG();\n eg.readUEG();\n if (sub_pic_hrd_params_present_flag) {\n eg.readUEG();\n eg.readUEG();\n }\n eg.skipBits(1);\n }\n }\n }\n }\n }\n const bitstream_restriction_flag = eg.readBoolean();\n if (bitstream_restriction_flag) {\n eg.readBoolean(); // tiles_fixed_structure_flag\n eg.readBoolean(); // motion_vectors_over_pic_boundaries_flag\n eg.readBoolean(); // restricted_ref_pic_lists_flag\n min_spatial_segmentation_idc = eg.readUEG();\n }\n }\n let width = pic_width_in_luma_samples,\n height = pic_height_in_luma_samples;\n if (conformance_window_flag) {\n let chroma_scale_w = 1,\n chroma_scale_h = 1;\n if (chroma_format_idc === 1) {\n // YUV 420\n chroma_scale_w = chroma_scale_h = 2;\n } else if (chroma_format_idc == 2) {\n // YUV 422\n chroma_scale_w = 2;\n }\n width = pic_width_in_luma_samples - chroma_scale_w * pic_right_offset - chroma_scale_w * pic_left_offset;\n height = pic_height_in_luma_samples - chroma_scale_h * pic_bottom_offset - chroma_scale_h * pic_top_offset;\n }\n const profile_space_string = general_profile_space ? ['A', 'B', 'C'][general_profile_space] : '';\n const profile_compatibility_buf = general_profile_compatibility_flags_1 << 24 | general_profile_compatibility_flags_2 << 16 | general_profile_compatibility_flags_3 << 8 | general_profile_compatibility_flags_4;\n let profile_compatibility_rev = 0;\n for (let i = 0; i < 32; i++) {\n profile_compatibility_rev = (profile_compatibility_rev | (profile_compatibility_buf >> i & 1) << 31 - i) >>> 0; // reverse bit position (and cast as UInt32)\n }\n let profile_compatibility_flags_string = profile_compatibility_rev.toString(16);\n if (general_profile_idc === 1 && profile_compatibility_flags_string === '2') {\n profile_compatibility_flags_string = '6';\n }\n const tier_flag_string = general_tier_flag ? 'H' : 'L';\n return {\n codecString: `hvc1.${profile_space_string}${general_profile_idc}.${profile_compatibility_flags_string}.${tier_flag_string}${general_level_idc}.B0`,\n params: {\n general_tier_flag,\n general_profile_idc,\n general_profile_space,\n general_profile_compatibility_flags: [general_profile_compatibility_flags_1, general_profile_compatibility_flags_2, general_profile_compatibility_flags_3, general_profile_compatibility_flags_4],\n general_constraint_indicator_flags: [general_constraint_indicator_flags_1, general_constraint_indicator_flags_2, general_constraint_indicator_flags_3, general_constraint_indicator_flags_4, general_constraint_indicator_flags_5, general_constraint_indicator_flags_6],\n general_level_idc,\n bit_depth: bit_depth_luma_minus8 + 8,\n bit_depth_luma_minus8,\n bit_depth_chroma_minus8,\n min_spatial_segmentation_idc,\n chroma_format_idc: chroma_format_idc,\n frame_rate: {\n fixed: fps_fixed,\n fps: fps_num / fps_den\n }\n },\n width,\n height,\n pixelRatio: [sar_width, sar_height]\n };\n }\n readPPS(pps) {\n const eg = new ExpGolomb(this.ebsp2rbsp(pps));\n eg.readUByte();\n eg.readUByte();\n eg.skipUEG(); // pic_parameter_set_id\n eg.skipUEG(); // seq_parameter_set_id\n eg.skipBits(2); // dependent_slice_segments_enabled_flag, output_flag_present_flag\n eg.skipBits(3); // num_extra_slice_header_bits\n eg.skipBits(2); // sign_data_hiding_enabled_flag, cabac_init_present_flag\n eg.skipUEG();\n eg.skipUEG();\n eg.skipEG(); // init_qp_minus26\n eg.skipBits(2); // constrained_intra_pred_flag, transform_skip_enabled_flag\n const cu_qp_delta_enabled_flag = eg.readBoolean();\n if (cu_qp_delta_enabled_flag) {\n eg.skipUEG();\n }\n eg.skipEG(); // cb_qp_offset\n eg.skipEG(); // cr_qp_offset\n eg.skipBits(4); // pps_slice_chroma_qp_offsets_present_flag, weighted_pred_flag, weighted_bipred_flag, transquant_bypass_enabled_flag\n const tiles_enabled_flag = eg.readBoolean();\n const entropy_coding_sync_enabled_flag = eg.readBoolean();\n let parallelismType = 1; // slice-based parallel decoding\n if (entropy_coding_sync_enabled_flag && tiles_enabled_flag) {\n parallelismType = 0; // mixed-type parallel decoding\n } else if (entropy_coding_sync_enabled_flag) {\n parallelismType = 3; // wavefront-based parallel decoding\n } else if (tiles_enabled_flag) {\n parallelismType = 2; // tile-based parallel decoding\n }\n return {\n parallelismType\n };\n }\n matchSPS(sps1, sps2) {\n // compare without headers and VPS related params\n return String.fromCharCode.apply(null, sps1).substr(3) === String.fromCharCode.apply(null, sps2).substr(3);\n }\n}\n\nconst PACKET_LENGTH = 188;\nclass TSDemuxer {\n constructor(observer, config, typeSupported, logger) {\n this.logger = void 0;\n this.observer = void 0;\n this.config = void 0;\n this.typeSupported = void 0;\n this.sampleAes = null;\n this.pmtParsed = false;\n this.audioCodec = void 0;\n this.videoCodec = void 0;\n this._pmtId = -1;\n this._videoTrack = void 0;\n this._audioTrack = void 0;\n this._id3Track = void 0;\n this._txtTrack = void 0;\n this.aacOverFlow = null;\n this.remainderData = null;\n this.videoParser = void 0;\n this.observer = observer;\n this.config = config;\n this.typeSupported = typeSupported;\n this.logger = logger;\n this.videoParser = null;\n }\n static probe(data, logger) {\n const syncOffset = TSDemuxer.syncOffset(data);\n if (syncOffset > 0) {\n logger.warn(`MPEG2-TS detected but first sync word found @ offset ${syncOffset}`);\n }\n return syncOffset !== -1;\n }\n static syncOffset(data) {\n const length = data.length;\n let scanwindow = Math.min(PACKET_LENGTH * 5, length - PACKET_LENGTH) + 1;\n let i = 0;\n while (i < scanwindow) {\n // a TS init segment should contain at least 2 TS packets: PAT and PMT, each starting with 0x47\n let foundPat = false;\n let packetStart = -1;\n let tsPackets = 0;\n for (let j = i; j < length; j += PACKET_LENGTH) {\n if (data[j] === 0x47 && (length - j === PACKET_LENGTH || data[j + PACKET_LENGTH] === 0x47)) {\n tsPackets++;\n if (packetStart === -1) {\n packetStart = j;\n // First sync word found at offset, increase scan length (#5251)\n if (packetStart !== 0) {\n scanwindow = Math.min(packetStart + PACKET_LENGTH * 99, data.length - PACKET_LENGTH) + 1;\n }\n }\n if (!foundPat) {\n foundPat = parsePID(data, j) === 0;\n }\n // Sync word found at 0 with 3 packets, or found at offset least 2 packets up to scanwindow (#5501)\n if (foundPat && tsPackets > 1 && (packetStart === 0 && tsPackets > 2 || j + PACKET_LENGTH > scanwindow)) {\n return packetStart;\n }\n } else if (tsPackets) {\n // Exit if sync word found, but does not contain contiguous packets\n return -1;\n } else {\n break;\n }\n }\n i++;\n }\n return -1;\n }\n\n /**\n * Creates a track model internal to demuxer used to drive remuxing input\n */\n static createTrack(type, duration) {\n return {\n container: type === 'video' || type === 'audio' ? 'video/mp2t' : undefined,\n type,\n id: RemuxerTrackIdConfig[type],\n pid: -1,\n inputTimeScale: 90000,\n sequenceNumber: 0,\n samples: [],\n dropped: 0,\n duration: type === 'audio' ? duration : undefined\n };\n }\n\n /**\n * Initializes a new init segment on the demuxer/remuxer interface. Needed for discontinuities/track-switches (or at stream start)\n * Resets all internal track instances of the demuxer.\n */\n resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n this.pmtParsed = false;\n this._pmtId = -1;\n this._videoTrack = TSDemuxer.createTrack('video');\n this._videoTrack.duration = trackDuration;\n this._audioTrack = TSDemuxer.createTrack('audio', trackDuration);\n this._id3Track = TSDemuxer.createTrack('id3');\n this._txtTrack = TSDemuxer.createTrack('text');\n this._audioTrack.segmentCodec = 'aac';\n\n // flush any partial content\n this.videoParser = null;\n this.aacOverFlow = null;\n this.remainderData = null;\n this.audioCodec = audioCodec;\n this.videoCodec = videoCodec;\n }\n resetTimeStamp() {}\n resetContiguity() {\n const {\n _audioTrack,\n _videoTrack,\n _id3Track\n } = this;\n if (_audioTrack) {\n _audioTrack.pesData = null;\n }\n if (_videoTrack) {\n _videoTrack.pesData = null;\n }\n if (_id3Track) {\n _id3Track.pesData = null;\n }\n this.aacOverFlow = null;\n this.remainderData = null;\n }\n demux(data, timeOffset, isSampleAes = false, flush = false) {\n if (!isSampleAes) {\n this.sampleAes = null;\n }\n let pes;\n const videoTrack = this._videoTrack;\n const audioTrack = this._audioTrack;\n const id3Track = this._id3Track;\n const textTrack = this._txtTrack;\n let videoPid = videoTrack.pid;\n let videoData = videoTrack.pesData;\n let audioPid = audioTrack.pid;\n let id3Pid = id3Track.pid;\n let audioData = audioTrack.pesData;\n let id3Data = id3Track.pesData;\n let unknownPID = null;\n let pmtParsed = this.pmtParsed;\n let pmtId = this._pmtId;\n let len = data.length;\n if (this.remainderData) {\n data = appendUint8Array(this.remainderData, data);\n len = data.length;\n this.remainderData = null;\n }\n if (len < PACKET_LENGTH && !flush) {\n this.remainderData = data;\n return {\n audioTrack,\n videoTrack,\n id3Track,\n textTrack\n };\n }\n const syncOffset = Math.max(0, TSDemuxer.syncOffset(data));\n len -= (len - syncOffset) % PACKET_LENGTH;\n if (len < data.byteLength && !flush) {\n this.remainderData = new Uint8Array(data.buffer, len, data.buffer.byteLength - len);\n }\n\n // loop through TS packets\n let tsPacketErrors = 0;\n for (let start = syncOffset; start < len; start += PACKET_LENGTH) {\n if (data[start] === 0x47) {\n const stt = !!(data[start + 1] & 0x40);\n const pid = parsePID(data, start);\n const atf = (data[start + 3] & 0x30) >> 4;\n\n // if an adaption field is present, its length is specified by the fifth byte of the TS packet header.\n let offset;\n if (atf > 1) {\n offset = start + 5 + data[start + 4];\n // continue if there is only adaptation field\n if (offset === start + PACKET_LENGTH) {\n continue;\n }\n } else {\n offset = start + 4;\n }\n switch (pid) {\n case videoPid:\n if (stt) {\n if (videoData && (pes = parsePES(videoData, this.logger))) {\n this.readyVideoParser(videoTrack.segmentCodec);\n if (this.videoParser !== null) {\n this.videoParser.parsePES(videoTrack, textTrack, pes, false);\n }\n }\n videoData = {\n data: [],\n size: 0\n };\n }\n if (videoData) {\n videoData.data.push(data.subarray(offset, start + PACKET_LENGTH));\n videoData.size += start + PACKET_LENGTH - offset;\n }\n break;\n case audioPid:\n if (stt) {\n if (audioData && (pes = parsePES(audioData, this.logger))) {\n switch (audioTrack.segmentCodec) {\n case 'aac':\n this.parseAACPES(audioTrack, pes);\n break;\n case 'mp3':\n this.parseMPEGPES(audioTrack, pes);\n break;\n case 'ac3':\n {\n this.parseAC3PES(audioTrack, pes);\n }\n break;\n }\n }\n audioData = {\n data: [],\n size: 0\n };\n }\n if (audioData) {\n audioData.data.push(data.subarray(offset, start + PACKET_LENGTH));\n audioData.size += start + PACKET_LENGTH - offset;\n }\n break;\n case id3Pid:\n if (stt) {\n if (id3Data && (pes = parsePES(id3Data, this.logger))) {\n this.parseID3PES(id3Track, pes);\n }\n id3Data = {\n data: [],\n size: 0\n };\n }\n if (id3Data) {\n id3Data.data.push(data.subarray(offset, start + PACKET_LENGTH));\n id3Data.size += start + PACKET_LENGTH - offset;\n }\n break;\n case 0:\n if (stt) {\n offset += data[offset] + 1;\n }\n pmtId = this._pmtId = parsePAT(data, offset);\n // this.logger.log('PMT PID:' + this._pmtId);\n break;\n case pmtId:\n {\n if (stt) {\n offset += data[offset] + 1;\n }\n const parsedPIDs = parsePMT(data, offset, this.typeSupported, isSampleAes, this.observer, this.logger);\n\n // only update track id if track PID found while parsing PMT\n // this is to avoid resetting the PID to -1 in case\n // track PID transiently disappears from the stream\n // this could happen in case of transient missing audio samples for example\n // NOTE this is only the PID of the track as found in TS,\n // but we are not using this for MP4 track IDs.\n videoPid = parsedPIDs.videoPid;\n if (videoPid > 0) {\n videoTrack.pid = videoPid;\n videoTrack.segmentCodec = parsedPIDs.segmentVideoCodec;\n }\n audioPid = parsedPIDs.audioPid;\n if (audioPid > 0) {\n audioTrack.pid = audioPid;\n audioTrack.segmentCodec = parsedPIDs.segmentAudioCodec;\n }\n id3Pid = parsedPIDs.id3Pid;\n if (id3Pid > 0) {\n id3Track.pid = id3Pid;\n }\n if (unknownPID !== null && !pmtParsed) {\n this.logger.warn(`MPEG-TS PMT found at ${start} after unknown PID '${unknownPID}'. Backtracking to sync byte @${syncOffset} to parse all TS packets.`);\n unknownPID = null;\n // we set it to -188, the += 188 in the for loop will reset start to 0\n start = syncOffset - 188;\n }\n pmtParsed = this.pmtParsed = true;\n break;\n }\n case 0x11:\n case 0x1fff:\n break;\n default:\n unknownPID = pid;\n break;\n }\n } else {\n tsPacketErrors++;\n }\n }\n if (tsPacketErrors > 0) {\n emitParsingError(this.observer, new Error(`Found ${tsPacketErrors} TS packet/s that do not start with 0x47`), undefined, this.logger);\n }\n videoTrack.pesData = videoData;\n audioTrack.pesData = audioData;\n id3Track.pesData = id3Data;\n const demuxResult = {\n audioTrack,\n videoTrack,\n id3Track,\n textTrack\n };\n if (flush) {\n this.extractRemainingSamples(demuxResult);\n }\n return demuxResult;\n }\n flush() {\n const {\n remainderData\n } = this;\n this.remainderData = null;\n let result;\n if (remainderData) {\n result = this.demux(remainderData, -1, false, true);\n } else {\n result = {\n videoTrack: this._videoTrack,\n audioTrack: this._audioTrack,\n id3Track: this._id3Track,\n textTrack: this._txtTrack\n };\n }\n this.extractRemainingSamples(result);\n if (this.sampleAes) {\n return this.decrypt(result, this.sampleAes);\n }\n return result;\n }\n extractRemainingSamples(demuxResult) {\n const {\n audioTrack,\n videoTrack,\n id3Track,\n textTrack\n } = demuxResult;\n const videoData = videoTrack.pesData;\n const audioData = audioTrack.pesData;\n const id3Data = id3Track.pesData;\n // try to parse last PES packets\n let pes;\n if (videoData && (pes = parsePES(videoData, this.logger))) {\n this.readyVideoParser(videoTrack.segmentCodec);\n if (this.videoParser !== null) {\n this.videoParser.parsePES(videoTrack, textTrack, pes, true);\n videoTrack.pesData = null;\n }\n } else {\n // either avcData null or PES truncated, keep it for next frag parsing\n videoTrack.pesData = videoData;\n }\n if (audioData && (pes = parsePES(audioData, this.logger))) {\n switch (audioTrack.segmentCodec) {\n case 'aac':\n this.parseAACPES(audioTrack, pes);\n break;\n case 'mp3':\n this.parseMPEGPES(audioTrack, pes);\n break;\n case 'ac3':\n {\n this.parseAC3PES(audioTrack, pes);\n }\n break;\n }\n audioTrack.pesData = null;\n } else {\n if (audioData != null && audioData.size) {\n this.logger.log('last AAC PES packet truncated,might overlap between fragments');\n }\n\n // either audioData null or PES truncated, keep it for next frag parsing\n audioTrack.pesData = audioData;\n }\n if (id3Data && (pes = parsePES(id3Data, this.logger))) {\n this.parseID3PES(id3Track, pes);\n id3Track.pesData = null;\n } else {\n // either id3Data null or PES truncated, keep it for next frag parsing\n id3Track.pesData = id3Data;\n }\n }\n demuxSampleAes(data, keyData, timeOffset) {\n const demuxResult = this.demux(data, timeOffset, true, !this.config.progressive);\n const sampleAes = this.sampleAes = new SampleAesDecrypter(this.observer, this.config, keyData);\n return this.decrypt(demuxResult, sampleAes);\n }\n readyVideoParser(codec) {\n if (this.videoParser === null) {\n if (codec === 'avc') {\n this.videoParser = new AvcVideoParser();\n } else if (codec === 'hevc') {\n this.videoParser = new HevcVideoParser();\n }\n }\n }\n decrypt(demuxResult, sampleAes) {\n return new Promise(resolve => {\n const {\n audioTrack,\n videoTrack\n } = demuxResult;\n if (audioTrack.samples && audioTrack.segmentCodec === 'aac') {\n sampleAes.decryptAacSamples(audioTrack.samples, 0, () => {\n if (videoTrack.samples) {\n sampleAes.decryptAvcSamples(videoTrack.samples, 0, 0, () => {\n resolve(demuxResult);\n });\n } else {\n resolve(demuxResult);\n }\n });\n } else if (videoTrack.samples) {\n sampleAes.decryptAvcSamples(videoTrack.samples, 0, 0, () => {\n resolve(demuxResult);\n });\n }\n });\n }\n destroy() {\n if (this.observer) {\n this.observer.removeAllListeners();\n }\n // @ts-ignore\n this.config = this.logger = this.observer = null;\n this.aacOverFlow = this.videoParser = this.remainderData = this.sampleAes = null;\n this._videoTrack = this._audioTrack = this._id3Track = this._txtTrack = undefined;\n }\n parseAACPES(track, pes) {\n let startOffset = 0;\n const aacOverFlow = this.aacOverFlow;\n let data = pes.data;\n if (aacOverFlow) {\n this.aacOverFlow = null;\n const frameMissingBytes = aacOverFlow.missing;\n const sampleLength = aacOverFlow.sample.unit.byteLength;\n // logger.log(`AAC: append overflowing ${sampleLength} bytes to beginning of new PES`);\n if (frameMissingBytes === -1) {\n data = appendUint8Array(aacOverFlow.sample.unit, data);\n } else {\n const frameOverflowBytes = sampleLength - frameMissingBytes;\n aacOverFlow.sample.unit.set(data.subarray(0, frameMissingBytes), frameOverflowBytes);\n track.samples.push(aacOverFlow.sample);\n startOffset = aacOverFlow.missing;\n }\n }\n // look for ADTS header (0xFFFx)\n let offset;\n let len;\n for (offset = startOffset, len = data.length; offset < len - 1; offset++) {\n if (isHeader$1(data, offset)) {\n break;\n }\n }\n // if ADTS header does not start straight from the beginning of the PES payload, raise an error\n if (offset !== startOffset) {\n let reason;\n const recoverable = offset < len - 1;\n if (recoverable) {\n reason = `AAC PES did not start with ADTS header,offset:${offset}`;\n } else {\n reason = 'No ADTS header found in AAC PES';\n }\n emitParsingError(this.observer, new Error(reason), recoverable, this.logger);\n if (!recoverable) {\n return;\n }\n }\n initTrackConfig(track, this.observer, data, offset, this.audioCodec);\n let pts;\n if (pes.pts !== undefined) {\n pts = pes.pts;\n } else if (aacOverFlow) {\n // if last AAC frame is overflowing, we should ensure timestamps are contiguous:\n // first sample PTS should be equal to last sample PTS + frameDuration\n const frameDuration = getFrameDuration(track.samplerate);\n pts = aacOverFlow.sample.pts + frameDuration;\n } else {\n this.logger.warn('[tsdemuxer]: AAC PES unknown PTS');\n return;\n }\n\n // scan for aac samples\n let frameIndex = 0;\n let frame;\n while (offset < len) {\n frame = appendFrame$2(track, data, offset, pts, frameIndex);\n offset += frame.length;\n if (!frame.missing) {\n frameIndex++;\n for (; offset < len - 1; offset++) {\n if (isHeader$1(data, offset)) {\n break;\n }\n }\n } else {\n this.aacOverFlow = frame;\n break;\n }\n }\n }\n parseMPEGPES(track, pes) {\n const data = pes.data;\n const length = data.length;\n let frameIndex = 0;\n let offset = 0;\n const pts = pes.pts;\n if (pts === undefined) {\n this.logger.warn('[tsdemuxer]: MPEG PES unknown PTS');\n return;\n }\n while (offset < length) {\n if (isHeader(data, offset)) {\n const frame = appendFrame$1(track, data, offset, pts, frameIndex);\n if (frame) {\n offset += frame.length;\n frameIndex++;\n } else {\n // logger.log('Unable to parse Mpeg audio frame');\n break;\n }\n } else {\n // nothing found, keep looking\n offset++;\n }\n }\n }\n parseAC3PES(track, pes) {\n {\n const data = pes.data;\n const pts = pes.pts;\n if (pts === undefined) {\n this.logger.warn('[tsdemuxer]: AC3 PES unknown PTS');\n return;\n }\n const length = data.length;\n let frameIndex = 0;\n let offset = 0;\n let parsed;\n while (offset < length && (parsed = appendFrame(track, data, offset, pts, frameIndex++)) > 0) {\n offset += parsed;\n }\n }\n }\n parseID3PES(id3Track, pes) {\n if (pes.pts === undefined) {\n this.logger.warn('[tsdemuxer]: ID3 PES unknown PTS');\n return;\n }\n const id3Sample = _extends({}, pes, {\n type: this._videoTrack ? MetadataSchema.emsg : MetadataSchema.audioId3,\n duration: Number.POSITIVE_INFINITY\n });\n id3Track.samples.push(id3Sample);\n }\n}\nfunction parsePID(data, offset) {\n // pid is a 13-bit field starting at the last bit of TS[1]\n return ((data[offset + 1] & 0x1f) << 8) + data[offset + 2];\n}\nfunction parsePAT(data, offset) {\n // skip the PSI header and parse the first PMT entry\n return (data[offset + 10] & 0x1f) << 8 | data[offset + 11];\n}\nfunction parsePMT(data, offset, typeSupported, isSampleAes, observer, logger) {\n const result = {\n audioPid: -1,\n videoPid: -1,\n id3Pid: -1,\n segmentVideoCodec: 'avc',\n segmentAudioCodec: 'aac'\n };\n const sectionLength = (data[offset + 1] & 0x0f) << 8 | data[offset + 2];\n const tableEnd = offset + 3 + sectionLength - 4;\n // to determine where the table is, we have to figure out how\n // long the program info descriptors are\n const programInfoLength = (data[offset + 10] & 0x0f) << 8 | data[offset + 11];\n // advance the offset to the first entry in the mapping table\n offset += 12 + programInfoLength;\n while (offset < tableEnd) {\n const pid = parsePID(data, offset);\n const esInfoLength = (data[offset + 3] & 0x0f) << 8 | data[offset + 4];\n switch (data[offset]) {\n case 0xcf:\n // SAMPLE-AES AAC\n if (!isSampleAes) {\n logEncryptedSamplesFoundInUnencryptedStream('ADTS AAC', logger);\n break;\n }\n /* falls through */\n case 0x0f:\n // ISO/IEC 13818-7 ADTS AAC (MPEG-2 lower bit-rate audio)\n // logger.log('AAC PID:' + pid);\n if (result.audioPid === -1) {\n result.audioPid = pid;\n }\n break;\n\n // Packetized metadata (ID3)\n case 0x15:\n // logger.log('ID3 PID:' + pid);\n if (result.id3Pid === -1) {\n result.id3Pid = pid;\n }\n break;\n case 0xdb:\n // SAMPLE-AES AVC\n if (!isSampleAes) {\n logEncryptedSamplesFoundInUnencryptedStream('H.264', logger);\n break;\n }\n /* falls through */\n case 0x1b:\n // ITU-T Rec. H.264 and ISO/IEC 14496-10 (lower bit-rate video)\n // logger.log('AVC PID:' + pid);\n if (result.videoPid === -1) {\n result.videoPid = pid;\n }\n break;\n\n // ISO/IEC 11172-3 (MPEG-1 audio)\n // or ISO/IEC 13818-3 (MPEG-2 halved sample rate audio)\n case 0x03:\n case 0x04:\n // logger.log('MPEG PID:' + pid);\n if (!typeSupported.mpeg && !typeSupported.mp3) {\n logger.log('MPEG audio found, not supported in this browser');\n } else if (result.audioPid === -1) {\n result.audioPid = pid;\n result.segmentAudioCodec = 'mp3';\n }\n break;\n case 0xc1:\n // SAMPLE-AES AC3\n if (!isSampleAes) {\n logEncryptedSamplesFoundInUnencryptedStream('AC-3', logger);\n break;\n }\n /* falls through */\n case 0x81:\n {\n if (!typeSupported.ac3) {\n logger.log('AC-3 audio found, not supported in this browser');\n } else if (result.audioPid === -1) {\n result.audioPid = pid;\n result.segmentAudioCodec = 'ac3';\n }\n }\n break;\n case 0x06:\n // stream_type 6 can mean a lot of different things in case of DVB.\n // We need to look at the descriptors. Right now, we're only interested\n // in AC-3 audio, so we do the descriptor parsing only when we don't have\n // an audio PID yet.\n if (result.audioPid === -1 && esInfoLength > 0) {\n let parsePos = offset + 5;\n let remaining = esInfoLength;\n while (remaining > 2) {\n const descriptorId = data[parsePos];\n switch (descriptorId) {\n case 0x6a:\n // DVB Descriptor for AC-3\n {\n if (typeSupported.ac3 !== true) {\n logger.log('AC-3 audio found, not supported in this browser for now');\n } else {\n result.audioPid = pid;\n result.segmentAudioCodec = 'ac3';\n }\n }\n break;\n }\n const descriptorLen = data[parsePos + 1] + 2;\n parsePos += descriptorLen;\n remaining -= descriptorLen;\n }\n }\n break;\n case 0xc2: // SAMPLE-AES EC3\n /* falls through */\n case 0x87:\n emitParsingError(observer, new Error('Unsupported EC-3 in M2TS found'), undefined, logger);\n return result;\n case 0x24:\n // ITU-T Rec. H.265 and ISO/IEC 23008-2 (HEVC)\n {\n if (result.videoPid === -1) {\n result.videoPid = pid;\n result.segmentVideoCodec = 'hevc';\n logger.log('HEVC in M2TS found');\n }\n }\n break;\n }\n // move to the next table entry\n // skip past the elementary stream descriptors, if present\n offset += esInfoLength + 5;\n }\n return result;\n}\nfunction emitParsingError(observer, error, levelRetry, logger) {\n logger.warn(`parsing error: ${error.message}`);\n observer.emit(Events.ERROR, Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.FRAG_PARSING_ERROR,\n fatal: false,\n levelRetry,\n error,\n reason: error.message\n });\n}\nfunction logEncryptedSamplesFoundInUnencryptedStream(type, logger) {\n logger.log(`${type} with AES-128-CBC encryption found in unencrypted stream`);\n}\nfunction parsePES(stream, logger) {\n let i = 0;\n let frag;\n let pesLen;\n let pesHdrLen;\n let pesPts;\n let pesDts;\n const data = stream.data;\n // safety check\n if (!stream || stream.size === 0) {\n return null;\n }\n\n // we might need up to 19 bytes to read PES header\n // if first chunk of data is less than 19 bytes, let's merge it with following ones until we get 19 bytes\n // usually only one merge is needed (and this is rare ...)\n while (data[0].length < 19 && data.length > 1) {\n data[0] = appendUint8Array(data[0], data[1]);\n data.splice(1, 1);\n }\n // retrieve PTS/DTS from first fragment\n frag = data[0];\n const pesPrefix = (frag[0] << 16) + (frag[1] << 8) + frag[2];\n if (pesPrefix === 1) {\n pesLen = (frag[4] << 8) + frag[5];\n // if PES parsed length is not zero and greater than total received length, stop parsing. PES might be truncated\n // minus 6 : PES header size\n if (pesLen && pesLen > stream.size - 6) {\n return null;\n }\n const pesFlags = frag[7];\n if (pesFlags & 0xc0) {\n /* PES header described here : http://dvd.sourceforge.net/dvdinfo/pes-hdr.html\n as PTS / DTS is 33 bit we cannot use bitwise operator in JS,\n as Bitwise operators treat their operands as a sequence of 32 bits */\n pesPts = (frag[9] & 0x0e) * 536870912 +\n // 1 << 29\n (frag[10] & 0xff) * 4194304 +\n // 1 << 22\n (frag[11] & 0xfe) * 16384 +\n // 1 << 14\n (frag[12] & 0xff) * 128 +\n // 1 << 7\n (frag[13] & 0xfe) / 2;\n if (pesFlags & 0x40) {\n pesDts = (frag[14] & 0x0e) * 536870912 +\n // 1 << 29\n (frag[15] & 0xff) * 4194304 +\n // 1 << 22\n (frag[16] & 0xfe) * 16384 +\n // 1 << 14\n (frag[17] & 0xff) * 128 +\n // 1 << 7\n (frag[18] & 0xfe) / 2;\n if (pesPts - pesDts > 60 * 90000) {\n logger.warn(`${Math.round((pesPts - pesDts) / 90000)}s delta between PTS and DTS, align them`);\n pesPts = pesDts;\n }\n } else {\n pesDts = pesPts;\n }\n }\n pesHdrLen = frag[8];\n // 9 bytes : 6 bytes for PES header + 3 bytes for PES extension\n let payloadStartOffset = pesHdrLen + 9;\n if (stream.size <= payloadStartOffset) {\n return null;\n }\n stream.size -= payloadStartOffset;\n // reassemble PES packet\n const pesData = new Uint8Array(stream.size);\n for (let j = 0, dataLen = data.length; j < dataLen; j++) {\n frag = data[j];\n let len = frag.byteLength;\n if (payloadStartOffset) {\n if (payloadStartOffset > len) {\n // trim full frag if PES header bigger than frag\n payloadStartOffset -= len;\n continue;\n } else {\n // trim partial frag if PES header smaller than frag\n frag = frag.subarray(payloadStartOffset);\n len -= payloadStartOffset;\n payloadStartOffset = 0;\n }\n }\n pesData.set(frag, i);\n i += len;\n }\n if (pesLen) {\n // payload size : remove PES header + PES extension\n pesLen -= pesHdrLen + 3;\n }\n return {\n data: pesData,\n pts: pesPts,\n dts: pesDts,\n len: pesLen\n };\n }\n return null;\n}\n\n/**\n * AAC helper\n */\n\nclass AAC {\n static getSilentFrame(codec, channelCount) {\n switch (codec) {\n case 'mp4a.40.2':\n if (channelCount === 1) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x23, 0x80]);\n } else if (channelCount === 2) {\n return new Uint8Array([0x21, 0x00, 0x49, 0x90, 0x02, 0x19, 0x00, 0x23, 0x80]);\n } else if (channelCount === 3) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x8e]);\n } else if (channelCount === 4) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x80, 0x2c, 0x80, 0x08, 0x02, 0x38]);\n } else if (channelCount === 5) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x82, 0x30, 0x04, 0x99, 0x00, 0x21, 0x90, 0x02, 0x38]);\n } else if (channelCount === 6) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x82, 0x30, 0x04, 0x99, 0x00, 0x21, 0x90, 0x02, 0x00, 0xb2, 0x00, 0x20, 0x08, 0xe0]);\n }\n break;\n // handle HE-AAC below (mp4a.40.5 / mp4a.40.29)\n default:\n if (channelCount === 1) {\n // ffmpeg -y -f lavfi -i \"aevalsrc=0:d=0.05\" -c:a libfdk_aac -profile:a aac_he -b:a 4k output.aac && hexdump -v -e '16/1 \"0x%x,\" \"\\n\"' -v output.aac\n return new Uint8Array([0x1, 0x40, 0x22, 0x80, 0xa3, 0x4e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0, 0x0, 0x1c, 0x6, 0xf1, 0xc1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5e]);\n } else if (channelCount === 2) {\n // ffmpeg -y -f lavfi -i \"aevalsrc=0|0:d=0.05\" -c:a libfdk_aac -profile:a aac_he_v2 -b:a 4k output.aac && hexdump -v -e '16/1 \"0x%x,\" \"\\n\"' -v output.aac\n return new Uint8Array([0x1, 0x40, 0x22, 0x80, 0xa3, 0x5e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0, 0x0, 0x0, 0x95, 0x0, 0x6, 0xf1, 0xa1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5e]);\n } else if (channelCount === 3) {\n // ffmpeg -y -f lavfi -i \"aevalsrc=0|0|0:d=0.05\" -c:a libfdk_aac -profile:a aac_he_v2 -b:a 4k output.aac && hexdump -v -e '16/1 \"0x%x,\" \"\\n\"' -v output.aac\n return new Uint8Array([0x1, 0x40, 0x22, 0x80, 0xa3, 0x5e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0, 0x0, 0x0, 0x95, 0x0, 0x6, 0xf1, 0xa1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5e]);\n }\n break;\n }\n return undefined;\n }\n}\n\n/**\n * Generate MP4 Box\n */\n\nconst UINT32_MAX = Math.pow(2, 32) - 1;\nclass MP4 {\n static init() {\n MP4.types = {\n avc1: [],\n // codingname\n avcC: [],\n hvc1: [],\n hvcC: [],\n btrt: [],\n dinf: [],\n dref: [],\n esds: [],\n ftyp: [],\n hdlr: [],\n mdat: [],\n mdhd: [],\n mdia: [],\n mfhd: [],\n minf: [],\n moof: [],\n moov: [],\n mp4a: [],\n '.mp3': [],\n dac3: [],\n 'ac-3': [],\n mvex: [],\n mvhd: [],\n pasp: [],\n sdtp: [],\n stbl: [],\n stco: [],\n stsc: [],\n stsd: [],\n stsz: [],\n stts: [],\n tfdt: [],\n tfhd: [],\n traf: [],\n trak: [],\n trun: [],\n trex: [],\n tkhd: [],\n vmhd: [],\n smhd: []\n };\n let i;\n for (i in MP4.types) {\n if (MP4.types.hasOwnProperty(i)) {\n MP4.types[i] = [i.charCodeAt(0), i.charCodeAt(1), i.charCodeAt(2), i.charCodeAt(3)];\n }\n }\n const videoHdlr = new Uint8Array([0x00,\n // version 0\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x00,\n // pre_defined\n 0x76, 0x69, 0x64, 0x65,\n // handler_type: 'vide'\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x56, 0x69, 0x64, 0x65, 0x6f, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'VideoHandler'\n ]);\n const audioHdlr = new Uint8Array([0x00,\n // version 0\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x00,\n // pre_defined\n 0x73, 0x6f, 0x75, 0x6e,\n // handler_type: 'soun'\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'SoundHandler'\n ]);\n MP4.HDLR_TYPES = {\n video: videoHdlr,\n audio: audioHdlr\n };\n const dref = new Uint8Array([0x00,\n // version 0\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x01,\n // entry_count\n 0x00, 0x00, 0x00, 0x0c,\n // entry_size\n 0x75, 0x72, 0x6c, 0x20,\n // 'url' type\n 0x00,\n // version 0\n 0x00, 0x00, 0x01 // entry_flags\n ]);\n const stco = new Uint8Array([0x00,\n // version\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ]);\n MP4.STTS = MP4.STSC = MP4.STCO = stco;\n MP4.STSZ = new Uint8Array([0x00,\n // version\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x00,\n // sample_size\n 0x00, 0x00, 0x00, 0x00 // sample_count\n ]);\n MP4.VMHD = new Uint8Array([0x00,\n // version\n 0x00, 0x00, 0x01,\n // flags\n 0x00, 0x00,\n // graphicsmode\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // opcolor\n ]);\n MP4.SMHD = new Uint8Array([0x00,\n // version\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00,\n // balance\n 0x00, 0x00 // reserved\n ]);\n MP4.STSD = new Uint8Array([0x00,\n // version 0\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x01]); // entry_count\n\n const majorBrand = new Uint8Array([105, 115, 111, 109]); // isom\n const avc1Brand = new Uint8Array([97, 118, 99, 49]); // avc1\n const minorVersion = new Uint8Array([0, 0, 0, 1]);\n MP4.FTYP = MP4.box(MP4.types.ftyp, majorBrand, minorVersion, majorBrand, avc1Brand);\n MP4.DINF = MP4.box(MP4.types.dinf, MP4.box(MP4.types.dref, dref));\n }\n static box(type, ...payload) {\n let size = 8;\n let i = payload.length;\n const len = i;\n // calculate the total size we need to allocate\n while (i--) {\n size += payload[i].byteLength;\n }\n const result = new Uint8Array(size);\n result[0] = size >> 24 & 0xff;\n result[1] = size >> 16 & 0xff;\n result[2] = size >> 8 & 0xff;\n result[3] = size & 0xff;\n result.set(type, 4);\n // copy the payload into the result\n for (i = 0, size = 8; i < len; i++) {\n // copy payload[i] array @ offset size\n result.set(payload[i], size);\n size += payload[i].byteLength;\n }\n return result;\n }\n static hdlr(type) {\n return MP4.box(MP4.types.hdlr, MP4.HDLR_TYPES[type]);\n }\n static mdat(data) {\n return MP4.box(MP4.types.mdat, data);\n }\n static mdhd(timescale, duration) {\n duration *= timescale;\n const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1));\n const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1));\n return MP4.box(MP4.types.mdhd, new Uint8Array([0x01,\n // version 1\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,\n // creation_time\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,\n // modification_time\n timescale >> 24 & 0xff, timescale >> 16 & 0xff, timescale >> 8 & 0xff, timescale & 0xff,\n // timescale\n upperWordDuration >> 24, upperWordDuration >> 16 & 0xff, upperWordDuration >> 8 & 0xff, upperWordDuration & 0xff, lowerWordDuration >> 24, lowerWordDuration >> 16 & 0xff, lowerWordDuration >> 8 & 0xff, lowerWordDuration & 0xff, 0x55, 0xc4,\n // 'und' language (undetermined)\n 0x00, 0x00]));\n }\n static mdia(track) {\n return MP4.box(MP4.types.mdia, MP4.mdhd(track.timescale || 0, track.duration || 0), MP4.hdlr(track.type), MP4.minf(track));\n }\n static mfhd(sequenceNumber) {\n return MP4.box(MP4.types.mfhd, new Uint8Array([0x00, 0x00, 0x00, 0x00,\n // flags\n sequenceNumber >> 24, sequenceNumber >> 16 & 0xff, sequenceNumber >> 8 & 0xff, sequenceNumber & 0xff // sequence_number\n ]));\n }\n static minf(track) {\n if (track.type === 'audio') {\n return MP4.box(MP4.types.minf, MP4.box(MP4.types.smhd, MP4.SMHD), MP4.DINF, MP4.stbl(track));\n } else {\n return MP4.box(MP4.types.minf, MP4.box(MP4.types.vmhd, MP4.VMHD), MP4.DINF, MP4.stbl(track));\n }\n }\n static moof(sn, baseMediaDecodeTime, track) {\n return MP4.box(MP4.types.moof, MP4.mfhd(sn), MP4.traf(track, baseMediaDecodeTime));\n }\n static moov(tracks) {\n let i = tracks.length;\n const boxes = [];\n while (i--) {\n boxes[i] = MP4.trak(tracks[i]);\n }\n return MP4.box.apply(null, [MP4.types.moov, MP4.mvhd(tracks[0].timescale || 0, tracks[0].duration || 0)].concat(boxes).concat(MP4.mvex(tracks)));\n }\n static mvex(tracks) {\n let i = tracks.length;\n const boxes = [];\n while (i--) {\n boxes[i] = MP4.trex(tracks[i]);\n }\n return MP4.box.apply(null, [MP4.types.mvex, ...boxes]);\n }\n static mvhd(timescale, duration) {\n duration *= timescale;\n const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1));\n const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1));\n const bytes = new Uint8Array([0x01,\n // version 1\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,\n // creation_time\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,\n // modification_time\n timescale >> 24 & 0xff, timescale >> 16 & 0xff, timescale >> 8 & 0xff, timescale & 0xff,\n // timescale\n upperWordDuration >> 24, upperWordDuration >> 16 & 0xff, upperWordDuration >> 8 & 0xff, upperWordDuration & 0xff, lowerWordDuration >> 24, lowerWordDuration >> 16 & 0xff, lowerWordDuration >> 8 & 0xff, lowerWordDuration & 0xff, 0x00, 0x01, 0x00, 0x00,\n // 1.0 rate\n 0x01, 0x00,\n // 1.0 volume\n 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,\n // transformation: unity matrix\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // pre_defined\n 0xff, 0xff, 0xff, 0xff // next_track_ID\n ]);\n return MP4.box(MP4.types.mvhd, bytes);\n }\n static sdtp(track) {\n const samples = track.samples || [];\n const bytes = new Uint8Array(4 + samples.length);\n let i;\n let flags;\n // leave the full box header (4 bytes) all zero\n // write the sample table\n for (i = 0; i < samples.length; i++) {\n flags = samples[i].flags;\n bytes[i + 4] = flags.dependsOn << 4 | flags.isDependedOn << 2 | flags.hasRedundancy;\n }\n return MP4.box(MP4.types.sdtp, bytes);\n }\n static stbl(track) {\n return MP4.box(MP4.types.stbl, MP4.stsd(track), MP4.box(MP4.types.stts, MP4.STTS), MP4.box(MP4.types.stsc, MP4.STSC), MP4.box(MP4.types.stsz, MP4.STSZ), MP4.box(MP4.types.stco, MP4.STCO));\n }\n static avc1(track) {\n let sps = [];\n let pps = [];\n let i;\n let data;\n let len;\n // assemble the SPSs\n\n for (i = 0; i < track.sps.length; i++) {\n data = track.sps[i];\n len = data.byteLength;\n sps.push(len >>> 8 & 0xff);\n sps.push(len & 0xff);\n\n // SPS\n sps = sps.concat(Array.prototype.slice.call(data));\n }\n\n // assemble the PPSs\n for (i = 0; i < track.pps.length; i++) {\n data = track.pps[i];\n len = data.byteLength;\n pps.push(len >>> 8 & 0xff);\n pps.push(len & 0xff);\n pps = pps.concat(Array.prototype.slice.call(data));\n }\n const avcc = MP4.box(MP4.types.avcC, new Uint8Array([0x01,\n // version\n sps[3],\n // profile\n sps[4],\n // profile compat\n sps[5],\n // level\n 0xfc | 3,\n // lengthSizeMinusOne, hard-coded to 4 bytes\n 0xe0 | track.sps.length // 3bit reserved (111) + numOfSequenceParameterSets\n ].concat(sps).concat([track.pps.length // numOfPictureParameterSets\n ]).concat(pps))); // \"PPS\"\n const width = track.width;\n const height = track.height;\n const hSpacing = track.pixelRatio[0];\n const vSpacing = track.pixelRatio[1];\n return MP4.box(MP4.types.avc1, new Uint8Array([0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x01,\n // data_reference_index\n 0x00, 0x00,\n // pre_defined\n 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // pre_defined\n width >> 8 & 0xff, width & 0xff,\n // width\n height >> 8 & 0xff, height & 0xff,\n // height\n 0x00, 0x48, 0x00, 0x00,\n // horizresolution\n 0x00, 0x48, 0x00, 0x00,\n // vertresolution\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x01,\n // frame_count\n 0x12, 0x64, 0x61, 0x69, 0x6c,\n // dailymotion/hls.js\n 0x79, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x68, 0x6c, 0x73, 0x2e, 0x6a, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // compressorname\n 0x00, 0x18,\n // depth = 24\n 0x11, 0x11]),\n // pre_defined = -1\n avcc, MP4.box(MP4.types.btrt, new Uint8Array([0x00, 0x1c, 0x9c, 0x80,\n // bufferSizeDB\n 0x00, 0x2d, 0xc6, 0xc0,\n // maxBitrate\n 0x00, 0x2d, 0xc6, 0xc0])),\n // avgBitrate\n MP4.box(MP4.types.pasp, new Uint8Array([hSpacing >> 24,\n // hSpacing\n hSpacing >> 16 & 0xff, hSpacing >> 8 & 0xff, hSpacing & 0xff, vSpacing >> 24,\n // vSpacing\n vSpacing >> 16 & 0xff, vSpacing >> 8 & 0xff, vSpacing & 0xff])));\n }\n static esds(track) {\n const config = track.config;\n return new Uint8Array([0x00,\n // version 0\n 0x00, 0x00, 0x00,\n // flags\n\n 0x03,\n // descriptor_type\n 0x19,\n // length\n\n 0x00, 0x01,\n // es_id\n\n 0x00,\n // stream_priority\n\n 0x04,\n // descriptor_type\n 0x11,\n // length\n 0x40,\n // codec : mpeg4_audio\n 0x15,\n // stream_type\n 0x00, 0x00, 0x00,\n // buffer_size\n 0x00, 0x00, 0x00, 0x00,\n // maxBitrate\n 0x00, 0x00, 0x00, 0x00,\n // avgBitrate\n\n 0x05,\n // descriptor_type\n 0x02,\n // length\n ...config, 0x06, 0x01, 0x02 // GASpecificConfig)); // length + audio config descriptor\n ]);\n }\n static audioStsd(track) {\n const samplerate = track.samplerate || 0;\n return new Uint8Array([0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x01,\n // data_reference_index\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, track.channelCount || 0,\n // channelcount\n 0x00, 0x10,\n // sampleSize:16bits\n 0x00, 0x00, 0x00, 0x00,\n // reserved2\n samplerate >> 8 & 0xff, samplerate & 0xff,\n //\n 0x00, 0x00]);\n }\n static mp4a(track) {\n return MP4.box(MP4.types.mp4a, MP4.audioStsd(track), MP4.box(MP4.types.esds, MP4.esds(track)));\n }\n static mp3(track) {\n return MP4.box(MP4.types['.mp3'], MP4.audioStsd(track));\n }\n static ac3(track) {\n return MP4.box(MP4.types['ac-3'], MP4.audioStsd(track), MP4.box(MP4.types.dac3, track.config));\n }\n static stsd(track) {\n const {\n segmentCodec\n } = track;\n if (track.type === 'audio') {\n if (segmentCodec === 'aac') {\n return MP4.box(MP4.types.stsd, MP4.STSD, MP4.mp4a(track));\n }\n if (segmentCodec === 'ac3' && track.config) {\n return MP4.box(MP4.types.stsd, MP4.STSD, MP4.ac3(track));\n }\n if (segmentCodec === 'mp3' && track.codec === 'mp3') {\n return MP4.box(MP4.types.stsd, MP4.STSD, MP4.mp3(track));\n }\n } else {\n if (track.pps && track.sps) {\n if (segmentCodec === 'avc') {\n return MP4.box(MP4.types.stsd, MP4.STSD, MP4.avc1(track));\n }\n if (segmentCodec === 'hevc' && track.vps) {\n return MP4.box(MP4.types.stsd, MP4.STSD, MP4.hvc1(track));\n }\n } else {\n throw new Error(`video track missing pps or sps`);\n }\n }\n throw new Error(`unsupported ${track.type} segment codec (${segmentCodec}/${track.codec})`);\n }\n static tkhd(track) {\n const id = track.id;\n const duration = (track.duration || 0) * (track.timescale || 0);\n const width = track.width || 0;\n const height = track.height || 0;\n const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1));\n const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1));\n return MP4.box(MP4.types.tkhd, new Uint8Array([0x01,\n // version 1\n 0x00, 0x00, 0x07,\n // flags\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,\n // creation_time\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,\n // modification_time\n id >> 24 & 0xff, id >> 16 & 0xff, id >> 8 & 0xff, id & 0xff,\n // track_ID\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n upperWordDuration >> 24, upperWordDuration >> 16 & 0xff, upperWordDuration >> 8 & 0xff, upperWordDuration & 0xff, lowerWordDuration >> 24, lowerWordDuration >> 16 & 0xff, lowerWordDuration >> 8 & 0xff, lowerWordDuration & 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00,\n // layer\n 0x00, 0x00,\n // alternate_group\n 0x00, 0x00,\n // non-audio track volume\n 0x00, 0x00,\n // reserved\n 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,\n // transformation: unity matrix\n width >> 8 & 0xff, width & 0xff, 0x00, 0x00,\n // width\n height >> 8 & 0xff, height & 0xff, 0x00, 0x00 // height\n ]));\n }\n static traf(track, baseMediaDecodeTime) {\n const sampleDependencyTable = MP4.sdtp(track);\n const id = track.id;\n const upperWordBaseMediaDecodeTime = Math.floor(baseMediaDecodeTime / (UINT32_MAX + 1));\n const lowerWordBaseMediaDecodeTime = Math.floor(baseMediaDecodeTime % (UINT32_MAX + 1));\n return MP4.box(MP4.types.traf, MP4.box(MP4.types.tfhd, new Uint8Array([0x00,\n // version 0\n 0x00, 0x00, 0x00,\n // flags\n id >> 24, id >> 16 & 0xff, id >> 8 & 0xff, id & 0xff // track_ID\n ])), MP4.box(MP4.types.tfdt, new Uint8Array([0x01,\n // version 1\n 0x00, 0x00, 0x00,\n // flags\n upperWordBaseMediaDecodeTime >> 24, upperWordBaseMediaDecodeTime >> 16 & 0xff, upperWordBaseMediaDecodeTime >> 8 & 0xff, upperWordBaseMediaDecodeTime & 0xff, lowerWordBaseMediaDecodeTime >> 24, lowerWordBaseMediaDecodeTime >> 16 & 0xff, lowerWordBaseMediaDecodeTime >> 8 & 0xff, lowerWordBaseMediaDecodeTime & 0xff])), MP4.trun(track, sampleDependencyTable.length + 16 +\n // tfhd\n 20 +\n // tfdt\n 8 +\n // traf header\n 16 +\n // mfhd\n 8 +\n // moof header\n 8),\n // mdat header\n sampleDependencyTable);\n }\n\n /**\n * Generate a track box.\n * @param track a track definition\n */\n static trak(track) {\n track.duration = track.duration || 0xffffffff;\n return MP4.box(MP4.types.trak, MP4.tkhd(track), MP4.mdia(track));\n }\n static trex(track) {\n const id = track.id;\n return MP4.box(MP4.types.trex, new Uint8Array([0x00,\n // version 0\n 0x00, 0x00, 0x00,\n // flags\n id >> 24, id >> 16 & 0xff, id >> 8 & 0xff, id & 0xff,\n // track_ID\n 0x00, 0x00, 0x00, 0x01,\n // default_sample_description_index\n 0x00, 0x00, 0x00, 0x00,\n // default_sample_duration\n 0x00, 0x00, 0x00, 0x00,\n // default_sample_size\n 0x00, 0x01, 0x00, 0x01 // default_sample_flags\n ]));\n }\n static trun(track, offset) {\n const samples = track.samples || [];\n const len = samples.length;\n const arraylen = 12 + 16 * len;\n const array = new Uint8Array(arraylen);\n let i;\n let sample;\n let duration;\n let size;\n let flags;\n let cts;\n offset += 8 + arraylen;\n array.set([track.type === 'video' ? 0x01 : 0x00,\n // version 1 for video with signed-int sample_composition_time_offset\n 0x00, 0x0f, 0x01,\n // flags\n len >>> 24 & 0xff, len >>> 16 & 0xff, len >>> 8 & 0xff, len & 0xff,\n // sample_count\n offset >>> 24 & 0xff, offset >>> 16 & 0xff, offset >>> 8 & 0xff, offset & 0xff // data_offset\n ], 0);\n for (i = 0; i < len; i++) {\n sample = samples[i];\n duration = sample.duration;\n size = sample.size;\n flags = sample.flags;\n cts = sample.cts;\n array.set([duration >>> 24 & 0xff, duration >>> 16 & 0xff, duration >>> 8 & 0xff, duration & 0xff,\n // sample_duration\n size >>> 24 & 0xff, size >>> 16 & 0xff, size >>> 8 & 0xff, size & 0xff,\n // sample_size\n flags.isLeading << 2 | flags.dependsOn, flags.isDependedOn << 6 | flags.hasRedundancy << 4 | flags.paddingValue << 1 | flags.isNonSync, flags.degradPrio & 0xf0 << 8, flags.degradPrio & 0x0f,\n // sample_flags\n cts >>> 24 & 0xff, cts >>> 16 & 0xff, cts >>> 8 & 0xff, cts & 0xff // sample_composition_time_offset\n ], 12 + 16 * i);\n }\n return MP4.box(MP4.types.trun, array);\n }\n static initSegment(tracks) {\n if (!MP4.types) {\n MP4.init();\n }\n const movie = MP4.moov(tracks);\n const result = appendUint8Array(MP4.FTYP, movie);\n return result;\n }\n static hvc1(track) {\n const ps = track.params;\n const units = [track.vps, track.sps, track.pps];\n const NALuLengthSize = 4;\n const config = new Uint8Array([0x01, ps.general_profile_space << 6 | (ps.general_tier_flag ? 32 : 0) | ps.general_profile_idc, ps.general_profile_compatibility_flags[0], ps.general_profile_compatibility_flags[1], ps.general_profile_compatibility_flags[2], ps.general_profile_compatibility_flags[3], ps.general_constraint_indicator_flags[0], ps.general_constraint_indicator_flags[1], ps.general_constraint_indicator_flags[2], ps.general_constraint_indicator_flags[3], ps.general_constraint_indicator_flags[4], ps.general_constraint_indicator_flags[5], ps.general_level_idc, 240 | ps.min_spatial_segmentation_idc >> 8, 255 & ps.min_spatial_segmentation_idc, 252 | ps.parallelismType, 252 | ps.chroma_format_idc, 248 | ps.bit_depth_luma_minus8, 248 | ps.bit_depth_chroma_minus8, 0x00, parseInt(ps.frame_rate.fps), NALuLengthSize - 1 | ps.temporal_id_nested << 2 | ps.num_temporal_layers << 3 | (ps.frame_rate.fixed ? 64 : 0), units.length]);\n\n // compute hvcC size in bytes\n let length = config.length;\n for (let i = 0; i < units.length; i += 1) {\n length += 3;\n for (let j = 0; j < units[i].length; j += 1) {\n length += 2 + units[i][j].length;\n }\n }\n const hvcC = new Uint8Array(length);\n hvcC.set(config, 0);\n length = config.length;\n // append parameter set units: one vps, one or more sps and pps\n const iMax = units.length - 1;\n for (let i = 0; i < units.length; i += 1) {\n hvcC.set(new Uint8Array([32 + i | (i === iMax ? 128 : 0), 0x00, units[i].length]), length);\n length += 3;\n for (let j = 0; j < units[i].length; j += 1) {\n hvcC.set(new Uint8Array([units[i][j].length >> 8, units[i][j].length & 255]), length);\n length += 2;\n hvcC.set(units[i][j], length);\n length += units[i][j].length;\n }\n }\n const hvcc = MP4.box(MP4.types.hvcC, hvcC);\n const width = track.width;\n const height = track.height;\n const hSpacing = track.pixelRatio[0];\n const vSpacing = track.pixelRatio[1];\n return MP4.box(MP4.types.hvc1, new Uint8Array([0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x01,\n // data_reference_index\n 0x00, 0x00,\n // pre_defined\n 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // pre_defined\n width >> 8 & 0xff, width & 0xff,\n // width\n height >> 8 & 0xff, height & 0xff,\n // height\n 0x00, 0x48, 0x00, 0x00,\n // horizresolution\n 0x00, 0x48, 0x00, 0x00,\n // vertresolution\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x01,\n // frame_count\n 0x12, 0x64, 0x61, 0x69, 0x6c,\n // dailymotion/hls.js\n 0x79, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x68, 0x6c, 0x73, 0x2e, 0x6a, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // compressorname\n 0x00, 0x18,\n // depth = 24\n 0x11, 0x11]),\n // pre_defined = -1\n hvcc, MP4.box(MP4.types.btrt, new Uint8Array([0x00, 0x1c, 0x9c, 0x80,\n // bufferSizeDB\n 0x00, 0x2d, 0xc6, 0xc0,\n // maxBitrate\n 0x00, 0x2d, 0xc6, 0xc0])),\n // avgBitrate\n MP4.box(MP4.types.pasp, new Uint8Array([hSpacing >> 24,\n // hSpacing\n hSpacing >> 16 & 0xff, hSpacing >> 8 & 0xff, hSpacing & 0xff, vSpacing >> 24,\n // vSpacing\n vSpacing >> 16 & 0xff, vSpacing >> 8 & 0xff, vSpacing & 0xff])));\n }\n}\nMP4.types = void 0;\nMP4.HDLR_TYPES = void 0;\nMP4.STTS = void 0;\nMP4.STSC = void 0;\nMP4.STCO = void 0;\nMP4.STSZ = void 0;\nMP4.VMHD = void 0;\nMP4.SMHD = void 0;\nMP4.STSD = void 0;\nMP4.FTYP = void 0;\nMP4.DINF = void 0;\n\nconst MPEG_TS_CLOCK_FREQ_HZ = 90000;\nfunction toTimescaleFromBase(baseTime, destScale, srcBase = 1, round = false) {\n const result = baseTime * destScale * srcBase; // equivalent to `(value * scale) / (1 / base)`\n return round ? Math.round(result) : result;\n}\nfunction toTimescaleFromScale(baseTime, destScale, srcScale = 1, round = false) {\n return toTimescaleFromBase(baseTime, destScale, 1 / srcScale, round);\n}\nfunction toMsFromMpegTsClock(baseTime, round = false) {\n return toTimescaleFromBase(baseTime, 1000, 1 / MPEG_TS_CLOCK_FREQ_HZ, round);\n}\nfunction toMpegTsClockFromTimescale(baseTime, srcScale = 1) {\n return toTimescaleFromBase(baseTime, MPEG_TS_CLOCK_FREQ_HZ, 1 / srcScale);\n}\nfunction timestampToString(timestamp) {\n const {\n baseTime,\n timescale,\n trackId\n } = timestamp;\n return `${baseTime / timescale} (${baseTime}/${timescale}) trackId: ${trackId}`;\n}\n\nconst MAX_SILENT_FRAME_DURATION = 10 * 1000; // 10 seconds\nconst AAC_SAMPLES_PER_FRAME = 1024;\nconst MPEG_AUDIO_SAMPLE_PER_FRAME = 1152;\nconst AC3_SAMPLES_PER_FRAME = 1536;\nlet chromeVersion = null;\nlet safariWebkitVersion = null;\nfunction createMp4Sample(isKeyframe, duration, size, cts) {\n return {\n duration,\n size,\n cts,\n flags: {\n isLeading: 0,\n isDependedOn: 0,\n hasRedundancy: 0,\n degradPrio: 0,\n dependsOn: isKeyframe ? 2 : 1,\n isNonSync: isKeyframe ? 0 : 1\n }\n };\n}\nclass MP4Remuxer extends Logger {\n constructor(observer, config, typeSupported, logger) {\n super('mp4-remuxer', logger);\n this.observer = void 0;\n this.config = void 0;\n this.typeSupported = void 0;\n this.ISGenerated = false;\n this._initPTS = null;\n this._initDTS = null;\n this.nextVideoTs = null;\n this.nextAudioTs = null;\n this.videoSampleDuration = null;\n this.isAudioContiguous = false;\n this.isVideoContiguous = false;\n this.videoTrackConfig = void 0;\n this.observer = observer;\n this.config = config;\n this.typeSupported = typeSupported;\n this.ISGenerated = false;\n if (chromeVersion === null) {\n const userAgent = navigator.userAgent || '';\n const result = userAgent.match(/Chrome\\/(\\d+)/i);\n chromeVersion = result ? parseInt(result[1]) : 0;\n }\n if (safariWebkitVersion === null) {\n const result = navigator.userAgent.match(/Safari\\/(\\d+)/i);\n safariWebkitVersion = result ? parseInt(result[1]) : 0;\n }\n }\n destroy() {\n // @ts-ignore\n this.config = this.videoTrackConfig = this._initPTS = this._initDTS = null;\n }\n resetTimeStamp(defaultTimeStamp) {\n const initPTS = this._initPTS;\n if (!initPTS || !defaultTimeStamp || defaultTimeStamp.trackId !== initPTS.trackId || defaultTimeStamp.baseTime !== initPTS.baseTime || defaultTimeStamp.timescale !== initPTS.timescale) {\n this.log(`Reset initPTS: ${initPTS ? timestampToString(initPTS) : initPTS} > ${defaultTimeStamp ? timestampToString(defaultTimeStamp) : defaultTimeStamp}`);\n }\n this._initPTS = this._initDTS = defaultTimeStamp;\n }\n resetNextTimestamp() {\n this.log('reset next timestamp');\n this.isVideoContiguous = false;\n this.isAudioContiguous = false;\n }\n resetInitSegment() {\n this.log('ISGenerated flag reset');\n this.ISGenerated = false;\n this.videoTrackConfig = undefined;\n }\n getVideoStartPts(videoSamples) {\n // Get the minimum PTS value relative to the first sample's PTS, normalized for 33-bit wrapping\n let rolloverDetected = false;\n const firstPts = videoSamples[0].pts;\n const startPTS = videoSamples.reduce((minPTS, sample) => {\n let pts = sample.pts;\n let delta = pts - minPTS;\n if (delta < -4294967296) {\n // 2^32, see PTSNormalize for reasoning, but we're hitting a rollover here, and we don't want that to impact the timeOffset calculation\n rolloverDetected = true;\n pts = normalizePts(pts, firstPts);\n delta = pts - minPTS;\n }\n if (delta > 0) {\n return minPTS;\n }\n return pts;\n }, firstPts);\n if (rolloverDetected) {\n this.debug('PTS rollover detected');\n }\n return startPTS;\n }\n remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, accurateTimeOffset, flush, playlistType) {\n let video;\n let audio;\n let initSegment;\n let text;\n let id3;\n let independent;\n let audioTimeOffset = timeOffset;\n let videoTimeOffset = timeOffset;\n\n // If we're remuxing audio and video progressively, wait until we've received enough samples for each track before proceeding.\n // This is done to synchronize the audio and video streams. We know if the current segment will have samples if the \"pid\"\n // parameter is greater than -1. The pid is set when the PMT is parsed, which contains the tracks list.\n // However, if the initSegment has already been generated, or we've reached the end of a segment (flush),\n // then we can remux one track without waiting for the other.\n const hasAudio = audioTrack.pid > -1;\n const hasVideo = videoTrack.pid > -1;\n const length = videoTrack.samples.length;\n const enoughAudioSamples = audioTrack.samples.length > 0;\n const enoughVideoSamples = flush && length > 0 || length > 1;\n const canRemuxAvc = (!hasAudio || enoughAudioSamples) && (!hasVideo || enoughVideoSamples) || this.ISGenerated || flush;\n if (canRemuxAvc) {\n if (this.ISGenerated) {\n var _videoTrack$pixelRati, _config$pixelRatio, _videoTrack$pixelRati2, _config$pixelRatio2;\n const config = this.videoTrackConfig;\n if (config && (videoTrack.width !== config.width || videoTrack.height !== config.height || ((_videoTrack$pixelRati = videoTrack.pixelRatio) == null ? void 0 : _videoTrack$pixelRati[0]) !== ((_config$pixelRatio = config.pixelRatio) == null ? void 0 : _config$pixelRatio[0]) || ((_videoTrack$pixelRati2 = videoTrack.pixelRatio) == null ? void 0 : _videoTrack$pixelRati2[1]) !== ((_config$pixelRatio2 = config.pixelRatio) == null ? void 0 : _config$pixelRatio2[1])) || !config && enoughVideoSamples || this.nextAudioTs === null && enoughAudioSamples) {\n this.resetInitSegment();\n }\n }\n if (!this.ISGenerated) {\n initSegment = this.generateIS(audioTrack, videoTrack, timeOffset, accurateTimeOffset);\n }\n const isVideoContiguous = this.isVideoContiguous;\n let firstKeyFrameIndex = -1;\n let firstKeyFramePTS;\n if (enoughVideoSamples) {\n firstKeyFrameIndex = findKeyframeIndex(videoTrack.samples);\n if (!isVideoContiguous && this.config.forceKeyFrameOnDiscontinuity) {\n independent = true;\n if (firstKeyFrameIndex > 0) {\n this.warn(`Dropped ${firstKeyFrameIndex} out of ${length} video samples due to a missing keyframe`);\n const startPTS = this.getVideoStartPts(videoTrack.samples);\n videoTrack.samples = videoTrack.samples.slice(firstKeyFrameIndex);\n videoTrack.dropped += firstKeyFrameIndex;\n videoTimeOffset += (videoTrack.samples[0].pts - startPTS) / videoTrack.inputTimeScale;\n firstKeyFramePTS = videoTimeOffset;\n } else if (firstKeyFrameIndex === -1) {\n this.warn(`No keyframe found out of ${length} video samples`);\n independent = false;\n }\n }\n }\n if (this.ISGenerated) {\n if (enoughAudioSamples && enoughVideoSamples) {\n // timeOffset is expected to be the offset of the first timestamp of this fragment (first DTS)\n // if first audio DTS is not aligned with first video DTS then we need to take that into account\n // when providing timeOffset to remuxAudio / remuxVideo. if we don't do that, there might be a permanent / small\n // drift between audio and video streams\n const startPTS = this.getVideoStartPts(videoTrack.samples);\n const tsDelta = normalizePts(audioTrack.samples[0].pts, startPTS) - startPTS;\n const audiovideoTimestampDelta = tsDelta / videoTrack.inputTimeScale;\n audioTimeOffset += Math.max(0, audiovideoTimestampDelta);\n videoTimeOffset += Math.max(0, -audiovideoTimestampDelta);\n }\n\n // Purposefully remuxing audio before video, so that remuxVideo can use nextAudioPts, which is calculated in remuxAudio.\n if (enoughAudioSamples) {\n // if initSegment was generated without audio samples, regenerate it again\n if (!audioTrack.samplerate) {\n this.warn('regenerate InitSegment as audio detected');\n initSegment = this.generateIS(audioTrack, videoTrack, timeOffset, accurateTimeOffset);\n }\n audio = this.remuxAudio(audioTrack, audioTimeOffset, this.isAudioContiguous, accurateTimeOffset, hasVideo || enoughVideoSamples || playlistType === PlaylistLevelType.AUDIO ? videoTimeOffset : undefined);\n if (enoughVideoSamples) {\n const audioTrackLength = audio ? audio.endPTS - audio.startPTS : 0;\n // if initSegment was generated without video samples, regenerate it again\n if (!videoTrack.inputTimeScale) {\n this.warn('regenerate InitSegment as video detected');\n initSegment = this.generateIS(audioTrack, videoTrack, timeOffset, accurateTimeOffset);\n }\n video = this.remuxVideo(videoTrack, videoTimeOffset, isVideoContiguous, audioTrackLength);\n }\n } else if (enoughVideoSamples) {\n video = this.remuxVideo(videoTrack, videoTimeOffset, isVideoContiguous, 0);\n }\n if (video) {\n video.firstKeyFrame = firstKeyFrameIndex;\n video.independent = firstKeyFrameIndex !== -1;\n video.firstKeyFramePTS = firstKeyFramePTS;\n }\n }\n }\n\n // Allow ID3 and text to remux, even if more audio/video samples are required\n if (this.ISGenerated && this._initPTS && this._initDTS) {\n if (id3Track.samples.length) {\n id3 = flushTextTrackMetadataCueSamples(id3Track, timeOffset, this._initPTS, this._initDTS);\n }\n if (textTrack.samples.length) {\n text = flushTextTrackUserdataCueSamples(textTrack, timeOffset, this._initPTS);\n }\n }\n return {\n audio,\n video,\n initSegment,\n independent,\n text,\n id3\n };\n }\n computeInitPts(basetime, timescale, presentationTime, type) {\n const offset = Math.round(presentationTime * timescale);\n let timestamp = normalizePts(basetime, offset);\n if (timestamp < offset + timescale) {\n this.log(`Adjusting PTS for rollover in timeline near ${(offset - timestamp) / timescale} ${type}`);\n while (timestamp < offset + timescale) {\n timestamp += 8589934592;\n }\n }\n return timestamp - offset;\n }\n generateIS(audioTrack, videoTrack, timeOffset, accurateTimeOffset) {\n const audioSamples = audioTrack.samples;\n const videoSamples = videoTrack.samples;\n const typeSupported = this.typeSupported;\n const tracks = {};\n const _initPTS = this._initPTS;\n let computePTSDTS = !_initPTS || accurateTimeOffset;\n let container = 'audio/mp4';\n let initPTS;\n let initDTS;\n let timescale;\n let trackId = -1;\n if (computePTSDTS) {\n initPTS = initDTS = Infinity;\n }\n if (audioTrack.config && audioSamples.length) {\n // let's use audio sampling rate as MP4 time scale.\n // rationale is that there is a integer nb of audio frames per audio sample (1024 for AAC)\n // using audio sampling rate here helps having an integer MP4 frame duration\n // this avoids potential rounding issue and AV sync issue\n audioTrack.timescale = audioTrack.samplerate;\n switch (audioTrack.segmentCodec) {\n case 'mp3':\n if (typeSupported.mpeg) {\n // Chrome and Safari\n container = 'audio/mpeg';\n audioTrack.codec = '';\n } else if (typeSupported.mp3) {\n // Firefox\n audioTrack.codec = 'mp3';\n }\n break;\n case 'ac3':\n audioTrack.codec = 'ac-3';\n break;\n }\n tracks.audio = {\n id: 'audio',\n container: container,\n codec: audioTrack.codec,\n initSegment: audioTrack.segmentCodec === 'mp3' && typeSupported.mpeg ? new Uint8Array(0) : MP4.initSegment([audioTrack]),\n metadata: {\n channelCount: audioTrack.channelCount\n }\n };\n if (computePTSDTS) {\n trackId = audioTrack.id;\n timescale = audioTrack.inputTimeScale;\n if (!_initPTS || timescale !== _initPTS.timescale) {\n // remember first PTS of this demuxing context. for audio, PTS = DTS\n initPTS = initDTS = this.computeInitPts(audioSamples[0].pts, timescale, timeOffset, 'audio');\n } else {\n computePTSDTS = false;\n }\n }\n }\n if (videoTrack.sps && videoTrack.pps && videoSamples.length) {\n // let's use input time scale as MP4 video timescale\n // we use input time scale straight away to avoid rounding issues on frame duration / cts computation\n videoTrack.timescale = videoTrack.inputTimeScale;\n tracks.video = {\n id: 'main',\n container: 'video/mp4',\n codec: videoTrack.codec,\n initSegment: MP4.initSegment([videoTrack]),\n metadata: {\n width: videoTrack.width,\n height: videoTrack.height\n }\n };\n if (computePTSDTS) {\n trackId = videoTrack.id;\n timescale = videoTrack.inputTimeScale;\n if (!_initPTS || timescale !== _initPTS.timescale) {\n const basePTS = this.getVideoStartPts(videoSamples);\n const baseDTS = normalizePts(videoSamples[0].dts, basePTS);\n const videoInitDTS = this.computeInitPts(baseDTS, timescale, timeOffset, 'video');\n const videoInitPTS = this.computeInitPts(basePTS, timescale, timeOffset, 'video');\n initDTS = Math.min(initDTS, videoInitDTS);\n initPTS = Math.min(initPTS, videoInitPTS);\n } else {\n computePTSDTS = false;\n }\n }\n this.videoTrackConfig = {\n width: videoTrack.width,\n height: videoTrack.height,\n pixelRatio: videoTrack.pixelRatio\n };\n }\n if (Object.keys(tracks).length) {\n this.ISGenerated = true;\n if (computePTSDTS) {\n if (_initPTS) {\n this.warn(`Timestamps at playlist time: ${accurateTimeOffset ? '' : '~'}${timeOffset} ${initPTS / timescale} != initPTS: ${_initPTS.baseTime / _initPTS.timescale} (${_initPTS.baseTime}/${_initPTS.timescale}) trackId: ${_initPTS.trackId}`);\n }\n this.log(`Found initPTS at playlist time: ${timeOffset} offset: ${initPTS / timescale} (${initPTS}/${timescale}) trackId: ${trackId}`);\n this._initPTS = {\n baseTime: initPTS,\n timescale: timescale,\n trackId: trackId\n };\n this._initDTS = {\n baseTime: initDTS,\n timescale: timescale,\n trackId: trackId\n };\n } else {\n initPTS = timescale = undefined;\n }\n return {\n tracks,\n initPTS,\n timescale,\n trackId\n };\n }\n }\n remuxVideo(track, timeOffset, contiguous, audioTrackLength) {\n const timeScale = track.inputTimeScale;\n const inputSamples = track.samples;\n const outputSamples = [];\n const nbSamples = inputSamples.length;\n const initPTS = this._initPTS;\n const initTime = initPTS.baseTime * timeScale / initPTS.timescale;\n let nextVideoTs = this.nextVideoTs;\n let offset = 8;\n let mp4SampleDuration = this.videoSampleDuration;\n let firstDTS;\n let lastDTS;\n let minPTS = Number.POSITIVE_INFINITY;\n let maxPTS = Number.NEGATIVE_INFINITY;\n let sortSamples = false;\n\n // if parsed fragment is contiguous with last one, let's use last DTS value as reference\n if (!contiguous || nextVideoTs === null) {\n const pts = initTime + timeOffset * timeScale;\n const cts = inputSamples[0].pts - normalizePts(inputSamples[0].dts, inputSamples[0].pts);\n if (chromeVersion && nextVideoTs !== null && Math.abs(pts - cts - (nextVideoTs + initTime)) < 15000) {\n // treat as contigous to adjust samples that would otherwise produce video buffer gaps in Chrome\n contiguous = true;\n } else {\n // if not contiguous, let's use target timeOffset\n nextVideoTs = pts - cts - initTime;\n }\n }\n\n // PTS is coded on 33bits, and can loop from -2^32 to 2^32\n // PTSNormalize will make PTS/DTS value monotonic, we use last known DTS value as reference value\n const nextVideoPts = nextVideoTs + initTime;\n for (let i = 0; i < nbSamples; i++) {\n const sample = inputSamples[i];\n sample.pts = normalizePts(sample.pts, nextVideoPts);\n sample.dts = normalizePts(sample.dts, nextVideoPts);\n if (sample.dts < inputSamples[i > 0 ? i - 1 : i].dts) {\n sortSamples = true;\n }\n }\n\n // sort video samples by DTS then PTS then demux id order\n if (sortSamples) {\n inputSamples.sort(function (a, b) {\n const deltadts = a.dts - b.dts;\n const deltapts = a.pts - b.pts;\n return deltadts || deltapts;\n });\n }\n\n // Get first/last DTS\n firstDTS = inputSamples[0].dts;\n lastDTS = inputSamples[inputSamples.length - 1].dts;\n\n // Sample duration (as expected by trun MP4 boxes), should be the delta between sample DTS\n // set this constant duration as being the avg delta between consecutive DTS.\n const inputDuration = lastDTS - firstDTS;\n const averageSampleDuration = inputDuration ? Math.round(inputDuration / (nbSamples - 1)) : mp4SampleDuration || track.inputTimeScale / 30;\n\n // if fragment are contiguous, detect hole/overlapping between fragments\n if (contiguous) {\n // check timestamp continuity across consecutive fragments (this is to remove inter-fragment gap/hole)\n const delta = firstDTS - nextVideoPts;\n const foundHole = delta > averageSampleDuration;\n const foundOverlap = delta < -1;\n if (foundHole || foundOverlap) {\n if (foundHole) {\n this.warn(`${(track.segmentCodec || '').toUpperCase()}: ${toMsFromMpegTsClock(delta, true)} ms (${delta}dts) hole between fragments detected at ${timeOffset.toFixed(3)}`);\n } else {\n this.warn(`${(track.segmentCodec || '').toUpperCase()}: ${toMsFromMpegTsClock(-delta, true)} ms (${delta}dts) overlapping between fragments detected at ${timeOffset.toFixed(3)}`);\n }\n if (!foundOverlap || nextVideoPts >= inputSamples[0].pts || chromeVersion) {\n firstDTS = nextVideoPts;\n const firstPTS = inputSamples[0].pts - delta;\n if (foundHole) {\n inputSamples[0].dts = firstDTS;\n inputSamples[0].pts = firstPTS;\n } else {\n let isPTSOrderRetained = true;\n for (let i = 0; i < inputSamples.length; i++) {\n if (inputSamples[i].dts > firstPTS && isPTSOrderRetained) {\n break;\n }\n const prevPTS = inputSamples[i].pts;\n inputSamples[i].dts -= delta;\n inputSamples[i].pts -= delta;\n\n // check to see if this sample's PTS order has changed\n // relative to the next one\n if (i < inputSamples.length - 1) {\n const nextSamplePTS = inputSamples[i + 1].pts;\n const currentSamplePTS = inputSamples[i].pts;\n const currentOrder = nextSamplePTS <= currentSamplePTS;\n const prevOrder = nextSamplePTS <= prevPTS;\n isPTSOrderRetained = currentOrder == prevOrder;\n }\n }\n }\n this.log(`Video: Initial PTS/DTS adjusted: ${toMsFromMpegTsClock(firstPTS, true)}/${toMsFromMpegTsClock(firstDTS, true)}, delta: ${toMsFromMpegTsClock(delta, true)} ms`);\n }\n }\n }\n firstDTS = Math.max(0, firstDTS);\n let nbNalu = 0;\n let naluLen = 0;\n let dtsStep = firstDTS;\n for (let i = 0; i < nbSamples; i++) {\n // compute total/avc sample length and nb of NAL units\n const sample = inputSamples[i];\n const units = sample.units;\n const nbUnits = units.length;\n let sampleLen = 0;\n for (let j = 0; j < nbUnits; j++) {\n sampleLen += units[j].data.length;\n }\n naluLen += sampleLen;\n nbNalu += nbUnits;\n sample.length = sampleLen;\n\n // ensure sample monotonic DTS\n if (sample.dts < dtsStep) {\n sample.dts = dtsStep;\n dtsStep += averageSampleDuration / 4 | 0 || 1;\n } else {\n dtsStep = sample.dts;\n }\n minPTS = Math.min(sample.pts, minPTS);\n maxPTS = Math.max(sample.pts, maxPTS);\n }\n lastDTS = inputSamples[nbSamples - 1].dts;\n\n /* concatenate the video data and construct the mdat in place\n (need 8 more bytes to fill length and mpdat type) */\n const mdatSize = naluLen + 4 * nbNalu + 8;\n let mdat;\n try {\n mdat = new Uint8Array(mdatSize);\n } catch (err) {\n this.observer.emit(Events.ERROR, Events.ERROR, {\n type: ErrorTypes.MUX_ERROR,\n details: ErrorDetails.REMUX_ALLOC_ERROR,\n fatal: false,\n error: err,\n bytes: mdatSize,\n reason: `fail allocating video mdat ${mdatSize}`\n });\n return;\n }\n const view = new DataView(mdat.buffer);\n view.setUint32(0, mdatSize);\n mdat.set(MP4.types.mdat, 4);\n let stretchedLastFrame = false;\n let minDtsDelta = Number.POSITIVE_INFINITY;\n let minPtsDelta = Number.POSITIVE_INFINITY;\n let maxDtsDelta = Number.NEGATIVE_INFINITY;\n let maxPtsDelta = Number.NEGATIVE_INFINITY;\n for (let i = 0; i < nbSamples; i++) {\n const VideoSample = inputSamples[i];\n const VideoSampleUnits = VideoSample.units;\n let mp4SampleLength = 0;\n // convert NALU bitstream to MP4 format (prepend NALU with size field)\n for (let j = 0, nbUnits = VideoSampleUnits.length; j < nbUnits; j++) {\n const unit = VideoSampleUnits[j];\n const unitData = unit.data;\n const unitDataLen = unit.data.byteLength;\n view.setUint32(offset, unitDataLen);\n offset += 4;\n mdat.set(unitData, offset);\n offset += unitDataLen;\n mp4SampleLength += 4 + unitDataLen;\n }\n\n // expected sample duration is the Decoding Timestamp diff of consecutive samples\n let ptsDelta;\n if (i < nbSamples - 1) {\n mp4SampleDuration = inputSamples[i + 1].dts - VideoSample.dts;\n ptsDelta = inputSamples[i + 1].pts - VideoSample.pts;\n } else {\n const config = this.config;\n const lastFrameDuration = i > 0 ? VideoSample.dts - inputSamples[i - 1].dts : averageSampleDuration;\n ptsDelta = i > 0 ? VideoSample.pts - inputSamples[i - 1].pts : averageSampleDuration;\n if (config.stretchShortVideoTrack && this.nextAudioTs !== null) {\n // In some cases, a segment's audio track duration may exceed the video track duration.\n // Since we've already remuxed audio, and we know how long the audio track is, we look to\n // see if the delta to the next segment is longer than maxBufferHole.\n // If so, playback would potentially get stuck, so we artificially inflate\n // the duration of the last frame to minimize any potential gap between segments.\n const gapTolerance = Math.floor(config.maxBufferHole * timeScale);\n const deltaToFrameEnd = (audioTrackLength ? minPTS + audioTrackLength * timeScale : this.nextAudioTs + initTime) - VideoSample.pts;\n if (deltaToFrameEnd > gapTolerance) {\n // We subtract lastFrameDuration from deltaToFrameEnd to try to prevent any video\n // frame overlap. maxBufferHole should be >> lastFrameDuration anyway.\n mp4SampleDuration = deltaToFrameEnd - lastFrameDuration;\n if (mp4SampleDuration < 0) {\n mp4SampleDuration = lastFrameDuration;\n } else {\n stretchedLastFrame = true;\n }\n this.log(`It is approximately ${deltaToFrameEnd / 90} ms to the next segment; using duration ${mp4SampleDuration / 90} ms for the last video frame.`);\n } else {\n mp4SampleDuration = lastFrameDuration;\n }\n } else {\n mp4SampleDuration = lastFrameDuration;\n }\n }\n const compositionTimeOffset = Math.round(VideoSample.pts - VideoSample.dts);\n minDtsDelta = Math.min(minDtsDelta, mp4SampleDuration);\n maxDtsDelta = Math.max(maxDtsDelta, mp4SampleDuration);\n minPtsDelta = Math.min(minPtsDelta, ptsDelta);\n maxPtsDelta = Math.max(maxPtsDelta, ptsDelta);\n outputSamples.push(createMp4Sample(VideoSample.key, mp4SampleDuration, mp4SampleLength, compositionTimeOffset));\n }\n if (outputSamples.length) {\n if (chromeVersion) {\n if (chromeVersion < 70) {\n // Chrome workaround, mark first sample as being a Random Access Point (keyframe) to avoid sourcebuffer append issue\n // https://code.google.com/p/chromium/issues/detail?id=229412\n const flags = outputSamples[0].flags;\n flags.dependsOn = 2;\n flags.isNonSync = 0;\n }\n } else if (safariWebkitVersion) {\n // Fix for \"CNN special report, with CC\" in test-streams (Safari browser only)\n // Ignore DTS when frame durations are irregular. Safari MSE does not handle this leading to gaps.\n if (maxPtsDelta - minPtsDelta < maxDtsDelta - minDtsDelta && averageSampleDuration / maxDtsDelta < 0.025 && outputSamples[0].cts === 0) {\n this.warn('Found irregular gaps in sample duration. Using PTS instead of DTS to determine MP4 sample duration.');\n let dts = firstDTS;\n for (let i = 0, len = outputSamples.length; i < len; i++) {\n const nextDts = dts + outputSamples[i].duration;\n const pts = dts + outputSamples[i].cts;\n if (i < len - 1) {\n const nextPts = nextDts + outputSamples[i + 1].cts;\n outputSamples[i].duration = nextPts - pts;\n } else {\n outputSamples[i].duration = i ? outputSamples[i - 1].duration : averageSampleDuration;\n }\n outputSamples[i].cts = 0;\n dts = nextDts;\n }\n }\n }\n }\n // next AVC/HEVC sample DTS should be equal to last sample DTS + last sample duration (in PES timescale)\n mp4SampleDuration = stretchedLastFrame || !mp4SampleDuration ? averageSampleDuration : mp4SampleDuration;\n const endDTS = lastDTS + mp4SampleDuration;\n this.nextVideoTs = nextVideoTs = endDTS - initTime;\n this.videoSampleDuration = mp4SampleDuration;\n this.isVideoContiguous = true;\n const moof = MP4.moof(track.sequenceNumber++, firstDTS, _extends(track, {\n samples: outputSamples\n }));\n const type = 'video';\n const data = {\n data1: moof,\n data2: mdat,\n startPTS: (minPTS - initTime) / timeScale,\n endPTS: (maxPTS + mp4SampleDuration - initTime) / timeScale,\n startDTS: (firstDTS - initTime) / timeScale,\n endDTS: nextVideoTs / timeScale,\n type,\n hasAudio: false,\n hasVideo: true,\n nb: outputSamples.length,\n dropped: track.dropped\n };\n track.samples = [];\n track.dropped = 0;\n return data;\n }\n getSamplesPerFrame(track) {\n switch (track.segmentCodec) {\n case 'mp3':\n return MPEG_AUDIO_SAMPLE_PER_FRAME;\n case 'ac3':\n return AC3_SAMPLES_PER_FRAME;\n default:\n return AAC_SAMPLES_PER_FRAME;\n }\n }\n remuxAudio(track, timeOffset, contiguous, accurateTimeOffset, videoTimeOffset) {\n const inputTimeScale = track.inputTimeScale;\n const mp4timeScale = track.samplerate ? track.samplerate : inputTimeScale;\n const scaleFactor = inputTimeScale / mp4timeScale;\n const mp4SampleDuration = this.getSamplesPerFrame(track);\n const inputSampleDuration = mp4SampleDuration * scaleFactor;\n const initPTS = this._initPTS;\n const rawMPEG = track.segmentCodec === 'mp3' && this.typeSupported.mpeg;\n const outputSamples = [];\n const alignedWithVideo = videoTimeOffset !== undefined;\n let inputSamples = track.samples;\n let offset = rawMPEG ? 0 : 8;\n let nextAudioTs = this.nextAudioTs || -1;\n\n // window.audioSamples ? window.audioSamples.push(inputSamples.map(s => s.pts)) : (window.audioSamples = [inputSamples.map(s => s.pts)]);\n\n // for audio samples, also consider consecutive fragments as being contiguous (even if a level switch occurs),\n // for sake of clarity:\n // consecutive fragments are frags with\n // - less than 100ms gaps between new time offset (if accurate) and next expected PTS OR\n // - less than 20 audio frames distance\n // contiguous fragments are consecutive fragments from same quality level (same level, new SN = old SN + 1)\n // this helps ensuring audio continuity\n // and this also avoids audio glitches/cut when switching quality, or reporting wrong duration on first audio frame\n const initTime = initPTS.baseTime * inputTimeScale / initPTS.timescale;\n const timeOffsetMpegTS = initTime + timeOffset * inputTimeScale;\n this.isAudioContiguous = contiguous = contiguous || inputSamples.length && nextAudioTs > 0 && (accurateTimeOffset && Math.abs(timeOffsetMpegTS - (nextAudioTs + initTime)) < 9000 || Math.abs(normalizePts(inputSamples[0].pts, timeOffsetMpegTS) - (nextAudioTs + initTime)) < 20 * inputSampleDuration);\n\n // compute normalized PTS\n inputSamples.forEach(function (sample) {\n sample.pts = normalizePts(sample.pts, timeOffsetMpegTS);\n });\n if (!contiguous || nextAudioTs < 0) {\n const sampleCount = inputSamples.length;\n // filter out sample with negative PTS that are not playable anyway\n // if we don't remove these negative samples, they will shift all audio samples forward.\n // leading to audio overlap between current / next fragment\n inputSamples = inputSamples.filter(sample => sample.pts >= 0);\n if (sampleCount !== inputSamples.length) {\n this.warn(`Removed ${inputSamples.length - sampleCount} of ${sampleCount} samples (initPTS ${initTime} / ${inputTimeScale})`);\n }\n\n // in case all samples have negative PTS, and have been filtered out, return now\n if (!inputSamples.length) {\n return;\n }\n if (videoTimeOffset === 0) {\n // Set the start to match video so that start gaps larger than inputSampleDuration are filled with silence\n nextAudioTs = 0;\n } else if (accurateTimeOffset && !alignedWithVideo) {\n // When not seeking, not live, and LevelDetails.PTSKnown, use fragment start as predicted next audio PTS\n nextAudioTs = Math.max(0, timeOffsetMpegTS - initTime);\n } else {\n // if frags are not contiguous and if we cant trust time offset, let's use first sample PTS as next audio PTS\n nextAudioTs = inputSamples[0].pts - initTime;\n }\n }\n\n // If the audio track is missing samples, the frames seem to get \"left-shifted\" within the\n // resulting mp4 segment, causing sync issues and leaving gaps at the end of the audio segment.\n // In an effort to prevent this from happening, we inject frames here where there are gaps.\n // When possible, we inject a silent frame; when that's not possible, we duplicate the last\n // frame.\n\n if (track.segmentCodec === 'aac') {\n const maxAudioFramesDrift = this.config.maxAudioFramesDrift;\n for (let i = 0, nextPts = nextAudioTs + initTime; i < inputSamples.length; i++) {\n // First, let's see how far off this frame is from where we expect it to be\n const sample = inputSamples[i];\n const pts = sample.pts;\n const delta = pts - nextPts;\n const duration = Math.abs(1000 * delta / inputTimeScale);\n\n // When remuxing with video, if we're overlapping by more than a duration, drop this sample to stay in sync\n if (delta <= -maxAudioFramesDrift * inputSampleDuration && alignedWithVideo) {\n if (i === 0) {\n this.warn(`Audio frame @ ${(pts / inputTimeScale).toFixed(3)}s overlaps marker by ${Math.round(1000 * delta / inputTimeScale)} ms.`);\n this.nextAudioTs = nextAudioTs = pts - initTime;\n nextPts = pts;\n }\n } // eslint-disable-line brace-style\n\n // Insert missing frames if:\n // 1: We're more than maxAudioFramesDrift frame away\n // 2: Not more than MAX_SILENT_FRAME_DURATION away\n // 3: currentTime (aka nextPtsNorm) is not 0\n // 4: remuxing with video (videoTimeOffset !== undefined)\n else if (delta >= maxAudioFramesDrift * inputSampleDuration && duration < MAX_SILENT_FRAME_DURATION && alignedWithVideo) {\n let missing = Math.round(delta / inputSampleDuration);\n // Adjust nextPts so that silent samples are aligned with media pts. This will prevent media samples from\n // later being shifted if nextPts is based on timeOffset and delta is not a multiple of inputSampleDuration.\n nextPts = pts - missing * inputSampleDuration;\n while (nextPts < 0 && missing && inputSampleDuration) {\n missing--;\n nextPts += inputSampleDuration;\n }\n if (i === 0) {\n this.nextAudioTs = nextAudioTs = nextPts - initTime;\n }\n this.warn(`Injecting ${missing} audio frames @ ${((nextPts - initTime) / inputTimeScale).toFixed(3)}s due to ${Math.round(1000 * delta / inputTimeScale)} ms gap.`);\n for (let j = 0; j < missing; j++) {\n let fillFrame = AAC.getSilentFrame(track.parsedCodec || track.manifestCodec || track.codec, track.channelCount);\n if (!fillFrame) {\n this.log('Unable to get silent frame for given audio codec; duplicating last frame instead.');\n fillFrame = sample.unit.subarray();\n }\n inputSamples.splice(i, 0, {\n unit: fillFrame,\n pts: nextPts\n });\n nextPts += inputSampleDuration;\n i++;\n }\n }\n sample.pts = nextPts;\n nextPts += inputSampleDuration;\n }\n }\n let firstPTS = null;\n let lastPTS = null;\n let mdat;\n let mdatSize = 0;\n let sampleLength = inputSamples.length;\n while (sampleLength--) {\n mdatSize += inputSamples[sampleLength].unit.byteLength;\n }\n for (let j = 0, _nbSamples = inputSamples.length; j < _nbSamples; j++) {\n const audioSample = inputSamples[j];\n const unit = audioSample.unit;\n let pts = audioSample.pts;\n if (lastPTS !== null) {\n // If we have more than one sample, set the duration of the sample to the \"real\" duration; the PTS diff with\n // the previous sample\n const prevSample = outputSamples[j - 1];\n prevSample.duration = Math.round((pts - lastPTS) / scaleFactor);\n } else {\n if (contiguous && track.segmentCodec === 'aac') {\n // set PTS/DTS to expected PTS/DTS\n pts = nextAudioTs + initTime;\n }\n // remember first PTS of our audioSamples\n firstPTS = pts;\n if (mdatSize > 0) {\n /* concatenate the audio data and construct the mdat in place\n (need 8 more bytes to fill length and mdat type) */\n mdatSize += offset;\n try {\n mdat = new Uint8Array(mdatSize);\n } catch (err) {\n this.observer.emit(Events.ERROR, Events.ERROR, {\n type: ErrorTypes.MUX_ERROR,\n details: ErrorDetails.REMUX_ALLOC_ERROR,\n fatal: false,\n error: err,\n bytes: mdatSize,\n reason: `fail allocating audio mdat ${mdatSize}`\n });\n return;\n }\n if (!rawMPEG) {\n const view = new DataView(mdat.buffer);\n view.setUint32(0, mdatSize);\n mdat.set(MP4.types.mdat, 4);\n }\n } else {\n // no audio samples\n return;\n }\n }\n mdat.set(unit, offset);\n const unitLen = unit.byteLength;\n offset += unitLen;\n // Default the sample's duration to the computed mp4SampleDuration, which will either be 1024 for AAC or 1152 for MPEG\n // In the case that we have 1 sample, this will be the duration. If we have more than one sample, the duration\n // becomes the PTS diff with the previous sample\n outputSamples.push(createMp4Sample(true, mp4SampleDuration, unitLen, 0));\n lastPTS = pts;\n }\n\n // We could end up with no audio samples if all input samples were overlapping with the previously remuxed ones\n const nbSamples = outputSamples.length;\n if (!nbSamples) {\n return;\n }\n\n // The next audio sample PTS should be equal to last sample PTS + duration\n const lastSample = outputSamples[outputSamples.length - 1];\n nextAudioTs = lastPTS - initTime;\n this.nextAudioTs = nextAudioTs + scaleFactor * lastSample.duration;\n\n // Set the track samples from inputSamples to outputSamples before remuxing\n const moof = rawMPEG ? new Uint8Array(0) : MP4.moof(track.sequenceNumber++, firstPTS / scaleFactor, _extends({}, track, {\n samples: outputSamples\n }));\n\n // Clear the track samples. This also clears the samples array in the demuxer, since the reference is shared\n track.samples = [];\n const start = (firstPTS - initTime) / inputTimeScale;\n const end = this.nextAudioTs / inputTimeScale;\n const type = 'audio';\n const audioData = {\n data1: moof,\n data2: mdat,\n startPTS: start,\n endPTS: end,\n startDTS: start,\n endDTS: end,\n type,\n hasAudio: true,\n hasVideo: false,\n nb: nbSamples\n };\n this.isAudioContiguous = true;\n return audioData;\n }\n}\nfunction normalizePts(value, reference) {\n let offset;\n if (reference === null) {\n return value;\n }\n if (reference < value) {\n // - 2^33\n offset = -8589934592;\n } else {\n // + 2^33\n offset = 8589934592;\n }\n /* PTS is 33bit (from 0 to 2^33 -1)\n if diff between value and reference is bigger than half of the amplitude (2^32) then it means that\n PTS looping occured. fill the gap */\n while (Math.abs(value - reference) > 4294967296) {\n value += offset;\n }\n return value;\n}\nfunction findKeyframeIndex(samples) {\n for (let i = 0; i < samples.length; i++) {\n if (samples[i].key) {\n return i;\n }\n }\n return -1;\n}\nfunction flushTextTrackMetadataCueSamples(track, timeOffset, initPTS, initDTS) {\n const length = track.samples.length;\n if (!length) {\n return;\n }\n const inputTimeScale = track.inputTimeScale;\n for (let index = 0; index < length; index++) {\n const sample = track.samples[index];\n // setting id3 pts, dts to relative time\n // using this._initPTS and this._initDTS to calculate relative time\n sample.pts = normalizePts(sample.pts - initPTS.baseTime * inputTimeScale / initPTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;\n sample.dts = normalizePts(sample.dts - initDTS.baseTime * inputTimeScale / initDTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;\n }\n const samples = track.samples;\n track.samples = [];\n return {\n samples\n };\n}\nfunction flushTextTrackUserdataCueSamples(track, timeOffset, initPTS) {\n const length = track.samples.length;\n if (!length) {\n return;\n }\n const inputTimeScale = track.inputTimeScale;\n for (let index = 0; index < length; index++) {\n const sample = track.samples[index];\n // setting text pts, dts to relative time\n // using this._initPTS and this._initDTS to calculate relative time\n sample.pts = normalizePts(sample.pts - initPTS.baseTime * inputTimeScale / initPTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;\n }\n track.samples.sort((a, b) => a.pts - b.pts);\n const samples = track.samples;\n track.samples = [];\n return {\n samples\n };\n}\n\nclass PassThroughRemuxer extends Logger {\n constructor(observer, config, typeSupported, logger) {\n super('passthrough-remuxer', logger);\n this.emitInitSegment = false;\n this.audioCodec = void 0;\n this.videoCodec = void 0;\n this.initData = void 0;\n this.initPTS = null;\n this.initTracks = void 0;\n this.lastEndTime = null;\n this.isVideoContiguous = false;\n }\n destroy() {}\n resetTimeStamp(defaultInitPTS) {\n this.lastEndTime = null;\n const initPTS = this.initPTS;\n if (initPTS && defaultInitPTS) {\n if (initPTS.baseTime === defaultInitPTS.baseTime && initPTS.timescale === defaultInitPTS.timescale) {\n return;\n }\n }\n this.initPTS = defaultInitPTS;\n }\n resetNextTimestamp() {\n this.isVideoContiguous = false;\n this.lastEndTime = null;\n }\n resetInitSegment(initSegment, audioCodec, videoCodec, decryptdata) {\n this.audioCodec = audioCodec;\n this.videoCodec = videoCodec;\n this.generateInitSegment(initSegment, decryptdata);\n this.emitInitSegment = true;\n }\n generateInitSegment(initSegment, decryptdata) {\n let {\n audioCodec,\n videoCodec\n } = this;\n if (!(initSegment != null && initSegment.byteLength)) {\n this.initTracks = undefined;\n this.initData = undefined;\n return;\n }\n const {\n audio,\n video\n } = this.initData = parseInitSegment(initSegment);\n if (decryptdata) {\n patchEncyptionData(initSegment, decryptdata);\n } else {\n const eitherTrack = audio || video;\n if (eitherTrack != null && eitherTrack.encrypted) {\n this.warn(`Init segment with encrypted track with has no key (\"${eitherTrack.codec}\")!`);\n }\n }\n\n // Get codec from initSegment\n if (audio) {\n audioCodec = getParsedTrackCodec(audio, ElementaryStreamTypes.AUDIO, this);\n }\n if (video) {\n videoCodec = getParsedTrackCodec(video, ElementaryStreamTypes.VIDEO, this);\n }\n const tracks = {};\n if (audio && video) {\n tracks.audiovideo = {\n container: 'video/mp4',\n codec: audioCodec + ',' + videoCodec,\n supplemental: video.supplemental,\n encrypted: video.encrypted,\n initSegment,\n id: 'main'\n };\n } else if (audio) {\n tracks.audio = {\n container: 'audio/mp4',\n codec: audioCodec,\n encrypted: audio.encrypted,\n initSegment,\n id: 'audio'\n };\n } else if (video) {\n tracks.video = {\n container: 'video/mp4',\n codec: videoCodec,\n supplemental: video.supplemental,\n encrypted: video.encrypted,\n initSegment,\n id: 'main'\n };\n } else {\n this.warn('initSegment does not contain moov or trak boxes.');\n }\n this.initTracks = tracks;\n }\n remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, accurateTimeOffset) {\n var _initData, _initData2;\n let {\n initPTS,\n lastEndTime\n } = this;\n const result = {\n audio: undefined,\n video: undefined,\n text: textTrack,\n id3: id3Track,\n initSegment: undefined\n };\n\n // If we haven't yet set a lastEndDTS, or it was reset, set it to the provided timeOffset. We want to use the\n // lastEndDTS over timeOffset whenever possible; during progressive playback, the media source will not update\n // the media duration (which is what timeOffset is provided as) before we need to process the next chunk.\n if (!isFiniteNumber(lastEndTime)) {\n lastEndTime = this.lastEndTime = timeOffset || 0;\n }\n\n // The binary segment data is added to the videoTrack in the mp4demuxer. We don't check to see if the data is only\n // audio or video (or both); adding it to video was an arbitrary choice.\n const data = videoTrack.samples;\n if (!data.length) {\n return result;\n }\n const initSegment = {\n initPTS: undefined,\n timescale: undefined,\n trackId: undefined\n };\n let initData = this.initData;\n if (!((_initData = initData) != null && _initData.length)) {\n this.generateInitSegment(data);\n initData = this.initData;\n }\n if (!((_initData2 = initData) != null && _initData2.length)) {\n // We can't remux if the initSegment could not be generated\n this.warn('Failed to generate initSegment.');\n return result;\n }\n if (this.emitInitSegment) {\n initSegment.tracks = this.initTracks;\n this.emitInitSegment = false;\n }\n const trackSampleData = getSampleData(data, initData, this);\n const audioSampleTimestamps = initData.audio ? trackSampleData[initData.audio.id] : null;\n const videoSampleTimestamps = initData.video ? trackSampleData[initData.video.id] : null;\n const videoStartTime = toStartEndOrDefault(videoSampleTimestamps, Infinity);\n const audioStartTime = toStartEndOrDefault(audioSampleTimestamps, Infinity);\n const videoEndTime = toStartEndOrDefault(videoSampleTimestamps, 0, true);\n const audioEndTime = toStartEndOrDefault(audioSampleTimestamps, 0, true);\n let decodeTime = timeOffset;\n let duration = 0;\n const syncOnAudio = audioSampleTimestamps && (!videoSampleTimestamps || !initPTS && audioStartTime < videoStartTime || initPTS && initPTS.trackId === initData.audio.id);\n const baseOffsetSamples = syncOnAudio ? audioSampleTimestamps : videoSampleTimestamps;\n if (baseOffsetSamples) {\n const timescale = baseOffsetSamples.timescale;\n const baseTime = baseOffsetSamples.start - timeOffset * timescale;\n const trackId = syncOnAudio ? initData.audio.id : initData.video.id;\n decodeTime = baseOffsetSamples.start / timescale;\n duration = syncOnAudio ? audioEndTime - audioStartTime : videoEndTime - videoStartTime;\n if ((accurateTimeOffset || !initPTS) && (isInvalidInitPts(initPTS, decodeTime, timeOffset, duration) || timescale !== initPTS.timescale)) {\n if (initPTS) {\n this.warn(`Timestamps at playlist time: ${accurateTimeOffset ? '' : '~'}${timeOffset} ${baseTime / timescale} != initPTS: ${initPTS.baseTime / initPTS.timescale} (${initPTS.baseTime}/${initPTS.timescale}) trackId: ${initPTS.trackId}`);\n }\n this.log(`Found initPTS at playlist time: ${timeOffset} offset: ${decodeTime - timeOffset} (${baseTime}/${timescale}) trackId: ${trackId}`);\n initPTS = null;\n initSegment.initPTS = baseTime;\n initSegment.timescale = timescale;\n initSegment.trackId = trackId;\n }\n } else {\n this.warn(`No audio or video samples found for initPTS at playlist time: ${timeOffset}`);\n }\n if (!initPTS) {\n if (!initSegment.timescale || initSegment.trackId === undefined || initSegment.initPTS === undefined) {\n this.warn('Could not set initPTS');\n initSegment.initPTS = decodeTime;\n initSegment.timescale = 1;\n initSegment.trackId = -1;\n }\n this.initPTS = initPTS = {\n baseTime: initSegment.initPTS,\n timescale: initSegment.timescale,\n trackId: initSegment.trackId\n };\n } else {\n initSegment.initPTS = initPTS.baseTime;\n initSegment.timescale = initPTS.timescale;\n initSegment.trackId = initPTS.trackId;\n }\n const startTime = decodeTime - initPTS.baseTime / initPTS.timescale;\n const endTime = startTime + duration;\n if (duration > 0) {\n this.lastEndTime = endTime;\n } else {\n this.warn('Duration parsed from mp4 should be greater than zero');\n this.resetNextTimestamp();\n }\n const hasAudio = !!initData.audio;\n const hasVideo = !!initData.video;\n let type = '';\n if (hasAudio) {\n type += 'audio';\n }\n if (hasVideo) {\n type += 'video';\n }\n const encrypted = (initData.audio ? initData.audio.encrypted : false) || (initData.video ? initData.video.encrypted : false);\n const track = {\n data1: data,\n startPTS: startTime,\n startDTS: startTime,\n endPTS: endTime,\n endDTS: endTime,\n type,\n hasAudio,\n hasVideo,\n nb: 1,\n dropped: 0,\n encrypted\n };\n result.audio = hasAudio && !hasVideo ? track : undefined;\n result.video = hasVideo ? track : undefined;\n const videoSampleCount = videoSampleTimestamps == null ? void 0 : videoSampleTimestamps.sampleCount;\n if (videoSampleCount) {\n const firstKeyFrame = videoSampleTimestamps.keyFrameIndex;\n const independent = firstKeyFrame !== -1;\n track.nb = videoSampleCount;\n track.dropped = firstKeyFrame === 0 || this.isVideoContiguous ? 0 : independent ? firstKeyFrame : videoSampleCount;\n track.independent = independent;\n track.firstKeyFrame = firstKeyFrame;\n if (independent && videoSampleTimestamps.keyFrameStart) {\n track.firstKeyFramePTS = (videoSampleTimestamps.keyFrameStart - initPTS.baseTime) / initPTS.timescale;\n }\n if (!this.isVideoContiguous) {\n result.independent = independent;\n }\n this.isVideoContiguous || (this.isVideoContiguous = independent);\n if (track.dropped) {\n this.warn(`fmp4 does not start with IDR: firstIDR ${firstKeyFrame}/${videoSampleCount} dropped: ${track.dropped} start: ${track.firstKeyFramePTS || 'NA'}`);\n }\n }\n result.initSegment = initSegment;\n result.id3 = flushTextTrackMetadataCueSamples(id3Track, timeOffset, initPTS, initPTS);\n if (textTrack.samples.length) {\n result.text = flushTextTrackUserdataCueSamples(textTrack, timeOffset, initPTS);\n }\n return result;\n }\n}\nfunction toStartEndOrDefault(trackTimes, defaultValue, end = false) {\n return (trackTimes == null ? void 0 : trackTimes.start) !== undefined ? (trackTimes.start + (end ? trackTimes.duration : 0)) / trackTimes.timescale : defaultValue;\n}\nfunction isInvalidInitPts(initPTS, startDTS, timeOffset, duration) {\n if (initPTS === null) {\n return true;\n }\n // InitPTS is invalid when distance from program would be more than segment duration or a minimum of one second\n const minDuration = Math.max(duration, 1);\n const startTime = startDTS - initPTS.baseTime / initPTS.timescale;\n return Math.abs(startTime - timeOffset) > minDuration;\n}\nfunction getParsedTrackCodec(track, type, logger) {\n const parsedCodec = track.codec;\n if (parsedCodec && parsedCodec.length > 4) {\n return parsedCodec;\n }\n if (type === ElementaryStreamTypes.AUDIO) {\n if (parsedCodec === 'ec-3' || parsedCodec === 'ac-3' || parsedCodec === 'alac') {\n return parsedCodec;\n }\n if (parsedCodec === 'fLaC' || parsedCodec === 'Opus') {\n // Opting not to get `preferManagedMediaSource` from player config for isSupported() check for simplicity\n const preferManagedMediaSource = false;\n return getCodecCompatibleName(parsedCodec, preferManagedMediaSource);\n }\n logger.warn(`Unhandled audio codec \"${parsedCodec}\" in mp4 MAP`);\n return parsedCodec || 'mp4a';\n }\n // Provide defaults based on codec type\n // This allows for some playback of some fmp4 playlists without CODECS defined in manifest\n logger.warn(`Unhandled video codec \"${parsedCodec}\" in mp4 MAP`);\n return parsedCodec || 'avc1';\n}\n\nlet now;\n// performance.now() not available on WebWorker, at least on Safari Desktop\ntry {\n now = self.performance.now.bind(self.performance);\n} catch (err) {\n now = Date.now;\n}\nconst muxConfig = [{\n demux: MP4Demuxer,\n remux: PassThroughRemuxer\n}, {\n demux: TSDemuxer,\n remux: MP4Remuxer\n}, {\n demux: AACDemuxer,\n remux: MP4Remuxer\n}, {\n demux: MP3Demuxer,\n remux: MP4Remuxer\n}];\n{\n muxConfig.splice(2, 0, {\n demux: AC3Demuxer,\n remux: MP4Remuxer\n });\n}\nclass Transmuxer {\n constructor(observer, typeSupported, config, vendor, id, logger) {\n this.asyncResult = false;\n this.logger = void 0;\n this.observer = void 0;\n this.typeSupported = void 0;\n this.config = void 0;\n this.id = void 0;\n this.demuxer = void 0;\n this.remuxer = void 0;\n this.decrypter = void 0;\n this.probe = void 0;\n this.decryptionPromise = null;\n this.transmuxConfig = void 0;\n this.currentTransmuxState = void 0;\n this.observer = observer;\n this.typeSupported = typeSupported;\n this.config = config;\n this.id = id;\n this.logger = logger;\n }\n configure(transmuxConfig) {\n this.transmuxConfig = transmuxConfig;\n if (this.decrypter) {\n this.decrypter.reset();\n }\n }\n push(data, decryptdata, chunkMeta, state) {\n const stats = chunkMeta.transmuxing;\n stats.executeStart = now();\n let uintData = new Uint8Array(data);\n const {\n currentTransmuxState,\n transmuxConfig\n } = this;\n if (state) {\n this.currentTransmuxState = state;\n }\n const {\n contiguous,\n discontinuity,\n trackSwitch,\n accurateTimeOffset,\n timeOffset,\n initSegmentChange\n } = state || currentTransmuxState;\n const {\n audioCodec,\n videoCodec,\n defaultInitPts,\n duration,\n initSegmentData\n } = transmuxConfig;\n const keyData = getEncryptionType(uintData, decryptdata);\n if (keyData && isFullSegmentEncryption(keyData.method)) {\n const decrypter = this.getDecrypter();\n const aesMode = getAesModeFromFullSegmentMethod(keyData.method);\n\n // Software decryption is synchronous; webCrypto is not\n if (decrypter.isSync()) {\n // Software decryption is progressive. Progressive decryption may not return a result on each call. Any cached\n // data is handled in the flush() call\n let decryptedData = decrypter.softwareDecrypt(uintData, keyData.key.buffer, keyData.iv.buffer, aesMode);\n // For Low-Latency HLS Parts, decrypt in place, since part parsing is expected on push progress\n const loadingParts = chunkMeta.part > -1;\n if (loadingParts) {\n const _data = decrypter.flush();\n decryptedData = _data ? _data.buffer : _data;\n }\n if (!decryptedData) {\n stats.executeEnd = now();\n return emptyResult(chunkMeta);\n }\n uintData = new Uint8Array(decryptedData);\n } else {\n this.asyncResult = true;\n this.decryptionPromise = decrypter.webCryptoDecrypt(uintData, keyData.key.buffer, keyData.iv.buffer, aesMode).then(decryptedData => {\n // Calling push here is important; if flush() is called while this is still resolving, this ensures that\n // the decrypted data has been transmuxed\n const result = this.push(decryptedData, null, chunkMeta);\n this.decryptionPromise = null;\n return result;\n });\n return this.decryptionPromise;\n }\n }\n const resetMuxers = this.needsProbing(discontinuity, trackSwitch);\n if (resetMuxers) {\n const error = this.configureTransmuxer(uintData);\n if (error) {\n this.logger.warn(`[transmuxer] ${error.message}`);\n this.observer.emit(Events.ERROR, Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.FRAG_PARSING_ERROR,\n fatal: false,\n error,\n reason: error.message\n });\n stats.executeEnd = now();\n return emptyResult(chunkMeta);\n }\n }\n if (discontinuity || trackSwitch || initSegmentChange || resetMuxers) {\n this.resetInitSegment(initSegmentData, audioCodec, videoCodec, duration, decryptdata);\n }\n if (discontinuity || initSegmentChange || resetMuxers) {\n this.resetInitialTimestamp(defaultInitPts);\n }\n if (!contiguous) {\n this.resetContiguity();\n }\n const result = this.transmux(uintData, keyData, timeOffset, accurateTimeOffset, chunkMeta);\n this.asyncResult = isPromise(result);\n const currentState = this.currentTransmuxState;\n currentState.contiguous = true;\n currentState.discontinuity = false;\n currentState.trackSwitch = false;\n stats.executeEnd = now();\n return result;\n }\n\n // Due to data caching, flush calls can produce more than one TransmuxerResult (hence the Array type)\n flush(chunkMeta) {\n const stats = chunkMeta.transmuxing;\n stats.executeStart = now();\n const {\n decrypter,\n currentTransmuxState,\n decryptionPromise\n } = this;\n if (decryptionPromise) {\n this.asyncResult = true;\n // Upon resolution, the decryption promise calls push() and returns its TransmuxerResult up the stack. Therefore\n // only flushing is required for async decryption\n return decryptionPromise.then(() => {\n return this.flush(chunkMeta);\n });\n }\n const transmuxResults = [];\n const {\n timeOffset\n } = currentTransmuxState;\n if (decrypter) {\n // The decrypter may have data cached, which needs to be demuxed. In this case we'll have two TransmuxResults\n // This happens in the case that we receive only 1 push call for a segment (either for non-progressive downloads,\n // or for progressive downloads with small segments)\n const decryptedData = decrypter.flush();\n if (decryptedData) {\n // Push always returns a TransmuxerResult if decryptdata is null\n transmuxResults.push(this.push(decryptedData.buffer, null, chunkMeta));\n }\n }\n const {\n demuxer,\n remuxer\n } = this;\n if (!demuxer || !remuxer) {\n // If probing failed, then Hls.js has been given content its not able to handle\n stats.executeEnd = now();\n const emptyResults = [emptyResult(chunkMeta)];\n if (this.asyncResult) {\n return Promise.resolve(emptyResults);\n }\n return emptyResults;\n }\n const demuxResultOrPromise = demuxer.flush(timeOffset);\n if (isPromise(demuxResultOrPromise)) {\n this.asyncResult = true;\n // Decrypt final SAMPLE-AES samples\n return demuxResultOrPromise.then(demuxResult => {\n this.flushRemux(transmuxResults, demuxResult, chunkMeta);\n return transmuxResults;\n });\n }\n this.flushRemux(transmuxResults, demuxResultOrPromise, chunkMeta);\n if (this.asyncResult) {\n return Promise.resolve(transmuxResults);\n }\n return transmuxResults;\n }\n flushRemux(transmuxResults, demuxResult, chunkMeta) {\n const {\n audioTrack,\n videoTrack,\n id3Track,\n textTrack\n } = demuxResult;\n const {\n accurateTimeOffset,\n timeOffset\n } = this.currentTransmuxState;\n this.logger.log(`[transmuxer.ts]: Flushed ${this.id} sn: ${chunkMeta.sn}${chunkMeta.part > -1 ? ' part: ' + chunkMeta.part : ''} of ${this.id === PlaylistLevelType.MAIN ? 'level' : 'track'} ${chunkMeta.level}`);\n const remuxResult = this.remuxer.remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, accurateTimeOffset, true, this.id);\n transmuxResults.push({\n remuxResult,\n chunkMeta\n });\n chunkMeta.transmuxing.executeEnd = now();\n }\n resetInitialTimestamp(defaultInitPts) {\n const {\n demuxer,\n remuxer\n } = this;\n if (!demuxer || !remuxer) {\n return;\n }\n demuxer.resetTimeStamp(defaultInitPts);\n remuxer.resetTimeStamp(defaultInitPts);\n }\n resetContiguity() {\n const {\n demuxer,\n remuxer\n } = this;\n if (!demuxer || !remuxer) {\n return;\n }\n demuxer.resetContiguity();\n remuxer.resetNextTimestamp();\n }\n resetInitSegment(initSegmentData, audioCodec, videoCodec, trackDuration, decryptdata) {\n const {\n demuxer,\n remuxer\n } = this;\n if (!demuxer || !remuxer) {\n return;\n }\n demuxer.resetInitSegment(initSegmentData, audioCodec, videoCodec, trackDuration);\n remuxer.resetInitSegment(initSegmentData, audioCodec, videoCodec, decryptdata);\n }\n destroy() {\n if (this.demuxer) {\n this.demuxer.destroy();\n this.demuxer = undefined;\n }\n if (this.remuxer) {\n this.remuxer.destroy();\n this.remuxer = undefined;\n }\n }\n transmux(data, keyData, timeOffset, accurateTimeOffset, chunkMeta) {\n let result;\n if (keyData && keyData.method === 'SAMPLE-AES') {\n result = this.transmuxSampleAes(data, keyData, timeOffset, accurateTimeOffset, chunkMeta);\n } else {\n result = this.transmuxUnencrypted(data, timeOffset, accurateTimeOffset, chunkMeta);\n }\n return result;\n }\n transmuxUnencrypted(data, timeOffset, accurateTimeOffset, chunkMeta) {\n const {\n audioTrack,\n videoTrack,\n id3Track,\n textTrack\n } = this.demuxer.demux(data, timeOffset, false, !this.config.progressive);\n const remuxResult = this.remuxer.remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, accurateTimeOffset, false, this.id);\n return {\n remuxResult,\n chunkMeta\n };\n }\n transmuxSampleAes(data, decryptData, timeOffset, accurateTimeOffset, chunkMeta) {\n return this.demuxer.demuxSampleAes(data, decryptData, timeOffset).then(demuxResult => {\n const remuxResult = this.remuxer.remux(demuxResult.audioTrack, demuxResult.videoTrack, demuxResult.id3Track, demuxResult.textTrack, timeOffset, accurateTimeOffset, false, this.id);\n return {\n remuxResult,\n chunkMeta\n };\n });\n }\n configureTransmuxer(data) {\n const {\n config,\n observer,\n typeSupported\n } = this;\n // probe for content type\n let mux;\n for (let i = 0, len = muxConfig.length; i < len; i++) {\n var _muxConfig$i$demux;\n if ((_muxConfig$i$demux = muxConfig[i].demux) != null && _muxConfig$i$demux.probe(data, this.logger)) {\n mux = muxConfig[i];\n break;\n }\n }\n if (!mux) {\n return new Error('Failed to find demuxer by probing fragment data');\n }\n // so let's check that current remuxer and demuxer are still valid\n const demuxer = this.demuxer;\n const remuxer = this.remuxer;\n const Remuxer = mux.remux;\n const Demuxer = mux.demux;\n if (!remuxer || !(remuxer instanceof Remuxer)) {\n this.remuxer = new Remuxer(observer, config, typeSupported, this.logger);\n }\n if (!demuxer || !(demuxer instanceof Demuxer)) {\n this.demuxer = new Demuxer(observer, config, typeSupported, this.logger);\n this.probe = Demuxer.probe;\n }\n }\n needsProbing(discontinuity, trackSwitch) {\n // in case of continuity change, or track switch\n // we might switch from content type (AAC container to TS container, or TS to fmp4 for example)\n return !this.demuxer || !this.remuxer || discontinuity || trackSwitch;\n }\n getDecrypter() {\n let decrypter = this.decrypter;\n if (!decrypter) {\n decrypter = this.decrypter = new Decrypter(this.config);\n }\n return decrypter;\n }\n}\nfunction getEncryptionType(data, decryptData) {\n let encryptionType = null;\n if (data.byteLength > 0 && (decryptData == null ? void 0 : decryptData.key) != null && decryptData.iv !== null && decryptData.method != null) {\n encryptionType = decryptData;\n }\n return encryptionType;\n}\nconst emptyResult = chunkMeta => ({\n remuxResult: {},\n chunkMeta\n});\nfunction isPromise(p) {\n return 'then' in p && p.then instanceof Function;\n}\nclass TransmuxConfig {\n constructor(audioCodec, videoCodec, initSegmentData, duration, defaultInitPts) {\n this.audioCodec = void 0;\n this.videoCodec = void 0;\n this.initSegmentData = void 0;\n this.duration = void 0;\n this.defaultInitPts = void 0;\n this.audioCodec = audioCodec;\n this.videoCodec = videoCodec;\n this.initSegmentData = initSegmentData;\n this.duration = duration;\n this.defaultInitPts = defaultInitPts || null;\n }\n}\nclass TransmuxState {\n constructor(discontinuity, contiguous, accurateTimeOffset, trackSwitch, timeOffset, initSegmentChange) {\n this.discontinuity = void 0;\n this.contiguous = void 0;\n this.accurateTimeOffset = void 0;\n this.trackSwitch = void 0;\n this.timeOffset = void 0;\n this.initSegmentChange = void 0;\n this.discontinuity = discontinuity;\n this.contiguous = contiguous;\n this.accurateTimeOffset = accurateTimeOffset;\n this.trackSwitch = trackSwitch;\n this.timeOffset = timeOffset;\n this.initSegmentChange = initSegmentChange;\n }\n}\n\nlet transmuxerInstanceCount = 0;\nclass TransmuxerInterface {\n constructor(_hls, id, onTransmuxComplete, onFlush) {\n this.error = null;\n this.hls = void 0;\n this.id = void 0;\n this.instanceNo = transmuxerInstanceCount++;\n this.observer = void 0;\n this.frag = null;\n this.part = null;\n this.useWorker = void 0;\n this.workerContext = null;\n this.transmuxer = null;\n this.onTransmuxComplete = void 0;\n this.onFlush = void 0;\n this.onWorkerMessage = event => {\n const data = event.data;\n const hls = this.hls;\n if (!hls || !(data != null && data.event) || data.instanceNo !== this.instanceNo) {\n return;\n }\n switch (data.event) {\n case 'init':\n {\n var _this$workerContext;\n const objectURL = (_this$workerContext = this.workerContext) == null ? void 0 : _this$workerContext.objectURL;\n if (objectURL) {\n // revoke the Object URL that was used to create transmuxer worker, so as not to leak it\n self.URL.revokeObjectURL(objectURL);\n }\n break;\n }\n case 'transmuxComplete':\n {\n this.handleTransmuxComplete(data.data);\n break;\n }\n case 'flush':\n {\n this.onFlush(data.data);\n break;\n }\n\n // pass logs from the worker thread to the main logger\n case 'workerLog':\n {\n if (hls.logger[data.data.logType]) {\n hls.logger[data.data.logType](data.data.message);\n }\n break;\n }\n default:\n {\n data.data = data.data || {};\n data.data.frag = this.frag;\n data.data.part = this.part;\n data.data.id = this.id;\n hls.trigger(data.event, data.data);\n break;\n }\n }\n };\n this.onWorkerError = event => {\n if (!this.hls) {\n return;\n }\n const error = new Error(`${event.message} (${event.filename}:${event.lineno})`);\n this.hls.config.enableWorker = false;\n this.hls.logger.warn(`Error in \"${this.id}\" Web Worker, fallback to inline`);\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.INTERNAL_EXCEPTION,\n fatal: false,\n event: 'demuxerWorker',\n error\n });\n };\n const config = _hls.config;\n this.hls = _hls;\n this.id = id;\n this.useWorker = !!config.enableWorker;\n this.onTransmuxComplete = onTransmuxComplete;\n this.onFlush = onFlush;\n const forwardMessage = (ev, data) => {\n data = data || {};\n data.frag = this.frag || undefined;\n if (ev === Events.ERROR) {\n data = data;\n data.parent = this.id;\n data.part = this.part;\n this.error = data.error;\n }\n this.hls.trigger(ev, data);\n };\n\n // forward events to main thread\n this.observer = new EventEmitter();\n this.observer.on(Events.FRAG_DECRYPTED, forwardMessage);\n this.observer.on(Events.ERROR, forwardMessage);\n const m2tsTypeSupported = getM2TSSupportedAudioTypes(config.preferManagedMediaSource);\n if (this.useWorker && typeof Worker !== 'undefined') {\n const logger = this.hls.logger;\n const canCreateWorker = config.workerPath || hasUMDWorker();\n if (canCreateWorker) {\n try {\n if (config.workerPath) {\n logger.log(`loading Web Worker ${config.workerPath} for \"${id}\"`);\n this.workerContext = loadWorker(config.workerPath);\n } else {\n logger.log(`injecting Web Worker for \"${id}\"`);\n this.workerContext = injectWorker();\n }\n const {\n worker\n } = this.workerContext;\n worker.addEventListener('message', this.onWorkerMessage);\n worker.addEventListener('error', this.onWorkerError);\n worker.postMessage({\n instanceNo: this.instanceNo,\n cmd: 'init',\n typeSupported: m2tsTypeSupported,\n id,\n config: stringify(config)\n });\n } catch (err) {\n logger.warn(`Error setting up \"${id}\" Web Worker, fallback to inline`, err);\n this.terminateWorker();\n this.error = null;\n this.transmuxer = new Transmuxer(this.observer, m2tsTypeSupported, config, '', id, _hls.logger);\n }\n return;\n }\n }\n this.transmuxer = new Transmuxer(this.observer, m2tsTypeSupported, config, '', id, _hls.logger);\n }\n reset() {\n this.frag = null;\n this.part = null;\n if (this.workerContext) {\n const instanceNo = this.instanceNo;\n this.instanceNo = transmuxerInstanceCount++;\n const config = this.hls.config;\n const m2tsTypeSupported = getM2TSSupportedAudioTypes(config.preferManagedMediaSource);\n this.workerContext.worker.postMessage({\n instanceNo: this.instanceNo,\n cmd: 'reset',\n resetNo: instanceNo,\n typeSupported: m2tsTypeSupported,\n id: this.id,\n config: stringify(config)\n });\n }\n }\n terminateWorker() {\n if (this.workerContext) {\n const {\n worker\n } = this.workerContext;\n this.workerContext = null;\n worker.removeEventListener('message', this.onWorkerMessage);\n worker.removeEventListener('error', this.onWorkerError);\n removeWorkerFromStore(this.hls.config.workerPath);\n }\n }\n destroy() {\n if (this.workerContext) {\n this.terminateWorker();\n // @ts-ignore\n this.onWorkerMessage = this.onWorkerError = null;\n } else {\n const transmuxer = this.transmuxer;\n if (transmuxer) {\n transmuxer.destroy();\n this.transmuxer = null;\n }\n }\n const observer = this.observer;\n if (observer) {\n observer.removeAllListeners();\n }\n this.frag = null;\n this.part = null;\n // @ts-ignore\n this.observer = null;\n // @ts-ignore\n this.hls = null;\n }\n push(data, initSegmentData, audioCodec, videoCodec, frag, part, duration, accurateTimeOffset, chunkMeta, defaultInitPTS) {\n var _frag$initSegment, _lastFrag$initSegment;\n chunkMeta.transmuxing.start = self.performance.now();\n const {\n instanceNo,\n transmuxer\n } = this;\n const timeOffset = part ? part.start : frag.start;\n // TODO: push \"clear-lead\" decrypt data for unencrypted fragments in streams with encrypted ones\n const decryptdata = frag.decryptdata;\n const lastFrag = this.frag;\n const discontinuity = !(lastFrag && frag.cc === lastFrag.cc);\n const trackSwitch = !(lastFrag && chunkMeta.level === lastFrag.level);\n const snDiff = lastFrag ? chunkMeta.sn - lastFrag.sn : -1;\n const partDiff = this.part ? chunkMeta.part - this.part.index : -1;\n const progressive = snDiff === 0 && chunkMeta.id > 1 && chunkMeta.id === (lastFrag == null ? void 0 : lastFrag.stats.chunkCount);\n const contiguous = !trackSwitch && (snDiff === 1 || snDiff === 0 && (partDiff === 1 || progressive && partDiff <= 0));\n const now = self.performance.now();\n if (trackSwitch || snDiff || frag.stats.parsing.start === 0) {\n frag.stats.parsing.start = now;\n }\n if (part && (partDiff || !contiguous)) {\n part.stats.parsing.start = now;\n }\n const initSegmentChange = !(lastFrag && ((_frag$initSegment = frag.initSegment) == null ? void 0 : _frag$initSegment.url) === ((_lastFrag$initSegment = lastFrag.initSegment) == null ? void 0 : _lastFrag$initSegment.url));\n const state = new TransmuxState(discontinuity, contiguous, accurateTimeOffset, trackSwitch, timeOffset, initSegmentChange);\n if (!contiguous || discontinuity || initSegmentChange) {\n this.hls.logger.log(`[transmuxer-interface]: Starting new transmux session for ${frag.type} sn: ${chunkMeta.sn}${chunkMeta.part > -1 ? ' part: ' + chunkMeta.part : ''} ${this.id === PlaylistLevelType.MAIN ? 'level' : 'track'}: ${chunkMeta.level} id: ${chunkMeta.id}\n discontinuity: ${discontinuity}\n trackSwitch: ${trackSwitch}\n contiguous: ${contiguous}\n accurateTimeOffset: ${accurateTimeOffset}\n timeOffset: ${timeOffset}\n initSegmentChange: ${initSegmentChange}`);\n const config = new TransmuxConfig(audioCodec, videoCodec, initSegmentData, duration, defaultInitPTS);\n this.configureTransmuxer(config);\n }\n this.frag = frag;\n this.part = part;\n\n // Frags with sn of 'initSegment' are not transmuxed\n if (this.workerContext) {\n // post fragment payload as transferable objects for ArrayBuffer (no copy)\n this.workerContext.worker.postMessage({\n instanceNo,\n cmd: 'demux',\n data,\n decryptdata,\n chunkMeta,\n state\n }, data instanceof ArrayBuffer ? [data] : []);\n } else if (transmuxer) {\n const transmuxResult = transmuxer.push(data, decryptdata, chunkMeta, state);\n if (isPromise(transmuxResult)) {\n transmuxResult.then(data => {\n this.handleTransmuxComplete(data);\n }).catch(error => {\n this.transmuxerError(error, chunkMeta, 'transmuxer-interface push error');\n });\n } else {\n this.handleTransmuxComplete(transmuxResult);\n }\n }\n }\n flush(chunkMeta) {\n chunkMeta.transmuxing.start = self.performance.now();\n const {\n instanceNo,\n transmuxer\n } = this;\n if (this.workerContext) {\n this.workerContext.worker.postMessage({\n instanceNo,\n cmd: 'flush',\n chunkMeta\n });\n } else if (transmuxer) {\n const transmuxResult = transmuxer.flush(chunkMeta);\n if (isPromise(transmuxResult)) {\n transmuxResult.then(data => {\n this.handleFlushResult(data, chunkMeta);\n }).catch(error => {\n this.transmuxerError(error, chunkMeta, 'transmuxer-interface flush error');\n });\n } else {\n this.handleFlushResult(transmuxResult, chunkMeta);\n }\n }\n }\n transmuxerError(error, chunkMeta, reason) {\n if (!this.hls) {\n return;\n }\n this.error = error;\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.FRAG_PARSING_ERROR,\n chunkMeta,\n frag: this.frag || undefined,\n part: this.part || undefined,\n fatal: false,\n error,\n err: error,\n reason\n });\n }\n handleFlushResult(results, chunkMeta) {\n results.forEach(result => {\n this.handleTransmuxComplete(result);\n });\n this.onFlush(chunkMeta);\n }\n configureTransmuxer(config) {\n const {\n instanceNo,\n transmuxer\n } = this;\n if (this.workerContext) {\n this.workerContext.worker.postMessage({\n instanceNo,\n cmd: 'configure',\n config\n });\n } else if (transmuxer) {\n transmuxer.configure(config);\n }\n }\n handleTransmuxComplete(result) {\n result.chunkMeta.transmuxing.end = self.performance.now();\n this.onTransmuxComplete(result);\n }\n}\n\nconst TICK_INTERVAL$3 = 100; // how often to tick in ms\n\nclass AudioStreamController extends BaseStreamController {\n constructor(hls, fragmentTracker, keyLoader) {\n super(hls, fragmentTracker, keyLoader, 'audio-stream-controller', PlaylistLevelType.AUDIO);\n this.mainAnchor = null;\n this.mainFragLoading = null;\n this.audioOnly = false;\n this.bufferedTrack = null;\n this.switchingTrack = null;\n this.trackId = -1;\n this.waitingData = null;\n this.mainDetails = null;\n this.flushing = false;\n this.bufferFlushed = false;\n this.cachedTrackLoadedData = null;\n this.registerListeners();\n }\n onHandlerDestroying() {\n this.unregisterListeners();\n super.onHandlerDestroying();\n this.resetItem();\n }\n resetItem() {\n this.mainDetails = this.mainAnchor = this.mainFragLoading = this.bufferedTrack = this.switchingTrack = this.waitingData = this.cachedTrackLoadedData = null;\n }\n registerListeners() {\n super.registerListeners();\n const {\n hls\n } = this;\n hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n hls.on(Events.AUDIO_TRACKS_UPDATED, this.onAudioTracksUpdated, this);\n hls.on(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n hls.on(Events.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this);\n hls.on(Events.BUFFER_RESET, this.onBufferReset, this);\n hls.on(Events.BUFFER_CREATED, this.onBufferCreated, this);\n hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n hls.on(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n hls.on(Events.INIT_PTS_FOUND, this.onInitPtsFound, this);\n hls.on(Events.FRAG_LOADING, this.onFragLoading, this);\n hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n }\n unregisterListeners() {\n const {\n hls\n } = this;\n if (!hls) {\n return;\n }\n super.unregisterListeners();\n hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n hls.off(Events.AUDIO_TRACKS_UPDATED, this.onAudioTracksUpdated, this);\n hls.off(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n hls.off(Events.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this);\n hls.off(Events.BUFFER_RESET, this.onBufferReset, this);\n hls.off(Events.BUFFER_CREATED, this.onBufferCreated, this);\n hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n hls.off(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n hls.off(Events.INIT_PTS_FOUND, this.onInitPtsFound, this);\n hls.off(Events.FRAG_LOADING, this.onFragLoading, this);\n hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n }\n\n // INIT_PTS_FOUND is triggered when the video track parsed in the stream-controller has a new PTS value\n onInitPtsFound(event, {\n frag,\n id,\n initPTS,\n timescale,\n trackId\n }) {\n // Always update the new INIT PTS\n // Can change due level switch\n if (id === PlaylistLevelType.MAIN) {\n const cc = frag.cc;\n const inFlightFrag = this.fragCurrent;\n this.initPTS[cc] = {\n baseTime: initPTS,\n timescale,\n trackId\n };\n this.log(`InitPTS for cc: ${cc} found from main: ${initPTS / timescale} (${initPTS}/${timescale}) trackId: ${trackId}`);\n this.mainAnchor = frag;\n // If we are waiting, tick immediately to unblock audio fragment transmuxing\n if (this.state === State.WAITING_INIT_PTS) {\n const waitingData = this.waitingData;\n if (!waitingData && !this.loadingParts || waitingData && waitingData.frag.cc !== cc) {\n this.syncWithAnchor(frag, waitingData == null ? void 0 : waitingData.frag);\n }\n } else if (!this.hls.hasEnoughToStart && inFlightFrag && inFlightFrag.cc !== cc) {\n inFlightFrag.abortRequests();\n this.syncWithAnchor(frag, inFlightFrag);\n } else if (this.state === State.IDLE) {\n this.tick();\n }\n }\n }\n getLoadPosition() {\n if (!this.startFragRequested && this.nextLoadPosition >= 0) {\n return this.nextLoadPosition;\n }\n return super.getLoadPosition();\n }\n syncWithAnchor(mainAnchor, waitingToAppend) {\n var _this$mainFragLoading;\n // Drop waiting fragment if videoTrackCC has changed since waitingFragment was set and initPTS was not found\n const mainFragLoading = ((_this$mainFragLoading = this.mainFragLoading) == null ? void 0 : _this$mainFragLoading.frag) || null;\n if (waitingToAppend) {\n if ((mainFragLoading == null ? void 0 : mainFragLoading.cc) === waitingToAppend.cc) {\n // Wait for loading frag to complete and INIT_PTS_FOUND\n return;\n }\n }\n const targetDiscontinuity = (mainFragLoading || mainAnchor).cc;\n const trackDetails = this.getLevelDetails();\n const pos = this.getLoadPosition();\n const syncFrag = findNearestWithCC(trackDetails, targetDiscontinuity, pos);\n // Only stop waiting for audioFrag.cc if an audio segment of the same discontinuity domain (cc) is found\n if (syncFrag) {\n this.log(`Syncing with main frag at ${syncFrag.start} cc ${syncFrag.cc}`);\n this.startFragRequested = false;\n this.nextLoadPosition = syncFrag.start;\n this.resetLoadingState();\n if (this.state === State.IDLE) {\n this.doTickIdle();\n }\n }\n }\n startLoad(startPosition, skipSeekToStartPosition) {\n if (!this.levels) {\n this.startPosition = startPosition;\n this.state = State.STOPPED;\n return;\n }\n const lastCurrentTime = this.lastCurrentTime;\n this.stopLoad();\n this.setInterval(TICK_INTERVAL$3);\n if (lastCurrentTime > 0 && startPosition === -1) {\n this.log(`Override startPosition with lastCurrentTime @${lastCurrentTime.toFixed(3)}`);\n startPosition = lastCurrentTime;\n this.state = State.IDLE;\n } else {\n this.state = State.WAITING_TRACK;\n }\n this.nextLoadPosition = this.lastCurrentTime = startPosition + this.timelineOffset;\n this.startPosition = skipSeekToStartPosition ? -1 : startPosition;\n this.tick();\n }\n doTick() {\n switch (this.state) {\n case State.IDLE:\n this.doTickIdle();\n break;\n case State.WAITING_TRACK:\n {\n const {\n levels,\n trackId\n } = this;\n const currenTrack = levels == null ? void 0 : levels[trackId];\n const details = currenTrack == null ? void 0 : currenTrack.details;\n if (details && !this.waitForLive(currenTrack)) {\n if (this.waitForCdnTuneIn(details)) {\n break;\n }\n this.state = State.WAITING_INIT_PTS;\n }\n break;\n }\n case State.FRAG_LOADING_WAITING_RETRY:\n {\n this.checkRetryDate();\n break;\n }\n case State.WAITING_INIT_PTS:\n {\n // Ensure we don't get stuck in the WAITING_INIT_PTS state if the waiting frag CC doesn't match any initPTS\n const waitingData = this.waitingData;\n if (waitingData) {\n const {\n frag,\n part,\n cache,\n complete\n } = waitingData;\n const mainAnchor = this.mainAnchor;\n if (this.initPTS[frag.cc] !== undefined) {\n this.waitingData = null;\n this.state = State.FRAG_LOADING;\n const payload = cache.flush().buffer;\n const data = {\n frag,\n part,\n payload,\n networkDetails: null\n };\n this._handleFragmentLoadProgress(data);\n if (complete) {\n super._handleFragmentLoadComplete(data);\n }\n } else if (mainAnchor && mainAnchor.cc !== waitingData.frag.cc) {\n this.syncWithAnchor(mainAnchor, waitingData.frag);\n }\n } else {\n this.state = State.IDLE;\n }\n }\n }\n this.onTickEnd();\n }\n resetLoadingState() {\n const waitingData = this.waitingData;\n if (waitingData) {\n this.fragmentTracker.removeFragment(waitingData.frag);\n this.waitingData = null;\n }\n super.resetLoadingState();\n }\n onTickEnd() {\n const {\n media\n } = this;\n if (!(media != null && media.readyState)) {\n // Exit early if we don't have media or if the media hasn't buffered anything yet (readyState 0)\n return;\n }\n this.lastCurrentTime = media.currentTime;\n }\n doTickIdle() {\n var _this$mainFragLoading2;\n const {\n hls,\n levels,\n media,\n trackId\n } = this;\n const config = hls.config;\n\n // 1. if buffering is suspended\n // 2. if video not attached AND\n // start fragment already requested OR start frag prefetch not enabled\n // 3. if tracks or track not loaded and selected\n // then exit loop\n // => if media not attached but start frag prefetch is enabled and start frag not requested yet, we will not exit loop\n if (!this.buffering || !media && !this.primaryPrefetch && (this.startFragRequested || !config.startFragPrefetch) || !(levels != null && levels[trackId])) {\n return;\n }\n const levelInfo = levels[trackId];\n const trackDetails = levelInfo.details;\n if (!trackDetails || this.waitForLive(levelInfo) || this.waitForCdnTuneIn(trackDetails)) {\n this.state = State.WAITING_TRACK;\n this.startFragRequested = false;\n return;\n }\n const bufferable = this.mediaBuffer ? this.mediaBuffer : this.media;\n if (this.bufferFlushed && bufferable) {\n this.bufferFlushed = false;\n this.afterBufferFlushed(bufferable, ElementaryStreamTypes.AUDIO, PlaylistLevelType.AUDIO);\n }\n const bufferInfo = this.getFwdBufferInfo(bufferable, PlaylistLevelType.AUDIO);\n if (bufferInfo === null) {\n return;\n }\n if (!this.switchingTrack && this._streamEnded(bufferInfo, trackDetails)) {\n hls.trigger(Events.BUFFER_EOS, {\n type: 'audio'\n });\n this.state = State.ENDED;\n return;\n }\n const bufferLen = bufferInfo.len;\n const maxBufLen = hls.maxBufferLength;\n const fragments = trackDetails.fragments;\n const start = fragments[0].start;\n const loadPosition = this.getLoadPosition();\n const targetBufferTime = this.flushing ? loadPosition : bufferInfo.end;\n if (this.switchingTrack && media) {\n const pos = loadPosition;\n // if currentTime (pos) is less than alt audio playlist start time, it means that alt audio is ahead of currentTime\n if (trackDetails.PTSKnown && pos < start) {\n // if everything is buffered from pos to start or if audio buffer upfront, let's seek to start\n if (bufferInfo.end > start || bufferInfo.nextStart) {\n this.log('Alt audio track ahead of main track, seek to start of alt audio track');\n media.currentTime = start + 0.05;\n }\n }\n }\n\n // if buffer length is less than maxBufLen, or near the end, find a fragment to load\n if (bufferLen >= maxBufLen && !this.switchingTrack && targetBufferTime < fragments[fragments.length - 1].start) {\n return;\n }\n let frag = this.getNextFragment(targetBufferTime, trackDetails);\n // Avoid loop loading by using nextLoadPosition set for backtracking and skipping consecutive GAP tags\n if (frag && this.isLoopLoading(frag, targetBufferTime)) {\n frag = this.getNextFragmentLoopLoading(frag, trackDetails, bufferInfo, PlaylistLevelType.MAIN, maxBufLen);\n }\n if (!frag) {\n this.bufferFlushed = true;\n return;\n }\n if (this.exceedsMaxBuffer(bufferInfo, maxBufLen, frag)) {\n return;\n }\n\n // Request audio segments up to one fragment ahead of main stream-controller\n let mainFragLoading = ((_this$mainFragLoading2 = this.mainFragLoading) == null ? void 0 : _this$mainFragLoading2.frag) || null;\n if (!this.audioOnly && this.startFragRequested && mainFragLoading && isMediaFragment(frag) && !frag.endList && (!trackDetails.live || !this.loadingParts && targetBufferTime < this.hls.liveSyncPosition)) {\n if (this.fragmentTracker.getState(mainFragLoading) === FragmentState.OK) {\n this.mainFragLoading = mainFragLoading = null;\n }\n if (mainFragLoading && isMediaFragment(mainFragLoading)) {\n if (frag.start > mainFragLoading.end) {\n // Get buffered frag at target position from tracker (loaded out of sequence)\n const mainFragAtPos = this.fragmentTracker.getFragAtPos(targetBufferTime, PlaylistLevelType.MAIN);\n if (mainFragAtPos && mainFragAtPos.end > mainFragLoading.end) {\n mainFragLoading = mainFragAtPos;\n this.mainFragLoading = {\n frag: mainFragAtPos,\n targetBufferTime: null\n };\n }\n }\n const atBufferSyncLimit = frag.start > mainFragLoading.end;\n if (atBufferSyncLimit) {\n return;\n }\n }\n }\n this.loadFragment(frag, levelInfo, targetBufferTime);\n }\n onMediaDetaching(event, data) {\n this.bufferFlushed = this.flushing = false;\n super.onMediaDetaching(event, data);\n }\n onAudioTracksUpdated(event, {\n audioTracks\n }) {\n // Reset tranxmuxer is essential for large context switches (Content Steering)\n this.resetTransmuxer();\n this.levels = audioTracks.map(mediaPlaylist => new Level(mediaPlaylist));\n }\n onAudioTrackSwitching(event, data) {\n // if any URL found on new audio track, it is an alternate audio track\n const altAudio = !!data.url;\n this.trackId = data.id;\n const {\n fragCurrent\n } = this;\n if (fragCurrent) {\n fragCurrent.abortRequests();\n this.removeUnbufferedFrags(fragCurrent.start);\n }\n this.resetLoadingState();\n\n // should we switch tracks ?\n if (altAudio) {\n this.switchingTrack = data;\n // main audio track are handled by stream-controller, just do something if switching to alt audio track\n this.flushAudioIfNeeded(data);\n if (this.state !== State.STOPPED) {\n // switching to audio track, start timer if not already started\n this.setInterval(TICK_INTERVAL$3);\n this.state = State.IDLE;\n this.tick();\n }\n } else {\n // destroy useless transmuxer when switching audio to main\n this.resetTransmuxer();\n this.switchingTrack = null;\n this.bufferedTrack = data;\n this.clearInterval();\n }\n }\n onManifestLoading() {\n super.onManifestLoading();\n this.bufferFlushed = this.flushing = this.audioOnly = false;\n this.resetItem();\n this.trackId = -1;\n }\n onLevelLoaded(event, data) {\n this.mainDetails = data.details;\n const cachedTrackLoadedData = this.cachedTrackLoadedData;\n if (cachedTrackLoadedData) {\n this.cachedTrackLoadedData = null;\n this.onAudioTrackLoaded(Events.AUDIO_TRACK_LOADED, cachedTrackLoadedData);\n }\n }\n onAudioTrackLoaded(event, data) {\n var _trackLevel$details;\n const {\n levels\n } = this;\n const {\n details: newDetails,\n id: trackId,\n groupId,\n track\n } = data;\n if (!levels) {\n this.warn(`Audio tracks reset while loading track ${trackId} \"${track.name}\" of \"${groupId}\"`);\n return;\n }\n const mainDetails = this.mainDetails;\n if (!mainDetails || newDetails.endCC > mainDetails.endCC || mainDetails.expired) {\n this.cachedTrackLoadedData = data;\n if (this.state !== State.STOPPED) {\n this.state = State.WAITING_TRACK;\n }\n return;\n }\n this.cachedTrackLoadedData = null;\n this.log(`Audio track ${trackId} \"${track.name}\" of \"${groupId}\" loaded [${newDetails.startSN},${newDetails.endSN}]${newDetails.lastPartSn ? `[part-${newDetails.lastPartSn}-${newDetails.lastPartIndex}]` : ''},duration:${newDetails.totalduration}`);\n const trackLevel = levels[trackId];\n let sliding = 0;\n if (newDetails.live || (_trackLevel$details = trackLevel.details) != null && _trackLevel$details.live) {\n this.checkLiveUpdate(newDetails);\n if (newDetails.deltaUpdateFailed) {\n return;\n }\n if (trackLevel.details) {\n var _this$levelLastLoaded;\n sliding = this.alignPlaylists(newDetails, trackLevel.details, (_this$levelLastLoaded = this.levelLastLoaded) == null ? void 0 : _this$levelLastLoaded.details);\n }\n if (!newDetails.alignedSliding) {\n // Align audio rendition with the \"main\" playlist on discontinuity change\n // or program-date-time (PDT)\n alignDiscontinuities(newDetails, mainDetails);\n if (!newDetails.alignedSliding) {\n alignMediaPlaylistByPDT(newDetails, mainDetails);\n }\n sliding = newDetails.fragmentStart;\n }\n }\n trackLevel.details = newDetails;\n this.levelLastLoaded = trackLevel;\n\n // compute start position if we are aligned with the main playlist\n if (!this.startFragRequested) {\n this.setStartPosition(mainDetails, sliding);\n }\n this.hls.trigger(Events.AUDIO_TRACK_UPDATED, {\n details: newDetails,\n id: trackId,\n groupId: data.groupId\n });\n\n // only switch back to IDLE state if we were waiting for track to start downloading a new fragment\n if (this.state === State.WAITING_TRACK && !this.waitForCdnTuneIn(newDetails)) {\n this.state = State.IDLE;\n }\n\n // trigger handler right now\n this.tick();\n }\n _handleFragmentLoadProgress(data) {\n var _frag$initSegment;\n const frag = data.frag;\n const {\n part,\n payload\n } = data;\n const {\n config,\n trackId,\n levels\n } = this;\n if (!levels) {\n this.warn(`Audio tracks were reset while fragment load was in progress. Fragment ${frag.sn} of level ${frag.level} will not be buffered`);\n return;\n }\n const track = levels[trackId];\n if (!track) {\n this.warn('Audio track is undefined on fragment load progress');\n return;\n }\n const details = track.details;\n if (!details) {\n this.warn('Audio track details undefined on fragment load progress');\n this.removeUnbufferedFrags(frag.start);\n return;\n }\n const audioCodec = config.defaultAudioCodec || track.audioCodec || 'mp4a.40.2';\n let transmuxer = this.transmuxer;\n if (!transmuxer) {\n transmuxer = this.transmuxer = new TransmuxerInterface(this.hls, PlaylistLevelType.AUDIO, this._handleTransmuxComplete.bind(this), this._handleTransmuxerFlush.bind(this));\n }\n\n // Check if we have video initPTS\n // If not we need to wait for it\n const initPTS = this.initPTS[frag.cc];\n const initSegmentData = (_frag$initSegment = frag.initSegment) == null ? void 0 : _frag$initSegment.data;\n if (initPTS !== undefined) {\n // this.log(`Transmuxing ${sn} of [${details.startSN} ,${details.endSN}],track ${trackId}`);\n // time Offset is accurate if level PTS is known, or if playlist is not sliding (not live)\n const accurateTimeOffset = false; // details.PTSKnown || !details.live;\n const partIndex = part ? part.index : -1;\n const partial = partIndex !== -1;\n const chunkMeta = new ChunkMetadata(frag.level, frag.sn, frag.stats.chunkCount, payload.byteLength, partIndex, partial);\n transmuxer.push(payload, initSegmentData, audioCodec, '', frag, part, details.totalduration, accurateTimeOffset, chunkMeta, initPTS);\n } else {\n this.log(`Unknown video PTS for cc ${frag.cc}, waiting for video PTS before demuxing audio frag ${frag.sn} of [${details.startSN} ,${details.endSN}],track ${trackId}`);\n const {\n cache\n } = this.waitingData = this.waitingData || {\n frag,\n part,\n cache: new ChunkCache(),\n complete: false\n };\n cache.push(new Uint8Array(payload));\n if (this.state !== State.STOPPED) {\n this.state = State.WAITING_INIT_PTS;\n }\n }\n }\n _handleFragmentLoadComplete(fragLoadedData) {\n if (this.waitingData) {\n this.waitingData.complete = true;\n return;\n }\n super._handleFragmentLoadComplete(fragLoadedData);\n }\n onBufferReset(/* event: Events.BUFFER_RESET */\n ) {\n // reset reference to sourcebuffers\n this.mediaBuffer = null;\n }\n onBufferCreated(event, data) {\n this.bufferFlushed = this.flushing = false;\n const audioTrack = data.tracks.audio;\n if (audioTrack) {\n this.mediaBuffer = audioTrack.buffer || null;\n }\n }\n onFragLoading(event, data) {\n if (!this.audioOnly && data.frag.type === PlaylistLevelType.MAIN && isMediaFragment(data.frag)) {\n this.mainFragLoading = data;\n if (this.state === State.IDLE) {\n this.tick();\n }\n }\n }\n onFragBuffered(event, data) {\n const {\n frag,\n part\n } = data;\n if (frag.type !== PlaylistLevelType.AUDIO) {\n if (!this.audioOnly && frag.type === PlaylistLevelType.MAIN && !frag.elementaryStreams.video && !frag.elementaryStreams.audiovideo) {\n this.audioOnly = true;\n this.mainFragLoading = null;\n }\n return;\n }\n if (this.fragContextChanged(frag)) {\n // If a level switch was requested while a fragment was buffering, it will emit the FRAG_BUFFERED event upon completion\n // Avoid setting state back to IDLE or concluding the audio switch; otherwise, the switched-to track will not buffer\n this.warn(`Fragment ${frag.sn}${part ? ' p: ' + part.index : ''} of level ${frag.level} finished buffering, but was aborted. state: ${this.state}, audioSwitch: ${this.switchingTrack ? this.switchingTrack.name : 'false'}`);\n return;\n }\n if (isMediaFragment(frag)) {\n this.fragPrevious = frag;\n const track = this.switchingTrack;\n if (track) {\n this.bufferedTrack = track;\n this.switchingTrack = null;\n this.hls.trigger(Events.AUDIO_TRACK_SWITCHED, _objectSpread2({}, track));\n }\n }\n this.fragBufferedComplete(frag, part);\n if (this.media) {\n this.tick();\n }\n }\n onError(event, data) {\n var _data$context;\n if (data.fatal) {\n this.state = State.ERROR;\n return;\n }\n switch (data.details) {\n case ErrorDetails.FRAG_GAP:\n case ErrorDetails.FRAG_PARSING_ERROR:\n case ErrorDetails.FRAG_DECRYPT_ERROR:\n case ErrorDetails.FRAG_LOAD_ERROR:\n case ErrorDetails.FRAG_LOAD_TIMEOUT:\n case ErrorDetails.KEY_LOAD_ERROR:\n case ErrorDetails.KEY_LOAD_TIMEOUT:\n this.onFragmentOrKeyLoadError(PlaylistLevelType.AUDIO, data);\n break;\n case ErrorDetails.AUDIO_TRACK_LOAD_ERROR:\n case ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT:\n case ErrorDetails.LEVEL_PARSING_ERROR:\n // in case of non fatal error while loading track, if not retrying to load track, switch back to IDLE\n if (!data.levelRetry && this.state === State.WAITING_TRACK && ((_data$context = data.context) == null ? void 0 : _data$context.type) === PlaylistContextType.AUDIO_TRACK) {\n this.state = State.IDLE;\n }\n break;\n case ErrorDetails.BUFFER_ADD_CODEC_ERROR:\n case ErrorDetails.BUFFER_APPEND_ERROR:\n if (data.parent !== 'audio') {\n return;\n }\n if (!this.reduceLengthAndFlushBuffer(data)) {\n this.resetLoadingState();\n }\n break;\n case ErrorDetails.BUFFER_FULL_ERROR:\n if (data.parent !== 'audio') {\n return;\n }\n if (this.reduceLengthAndFlushBuffer(data)) {\n this.bufferedTrack = null;\n super.flushMainBuffer(0, Number.POSITIVE_INFINITY, 'audio');\n }\n break;\n case ErrorDetails.INTERNAL_EXCEPTION:\n this.recoverWorkerError(data);\n break;\n }\n }\n onBufferFlushing(event, {\n type\n }) {\n if (type !== ElementaryStreamTypes.VIDEO) {\n this.flushing = true;\n }\n }\n onBufferFlushed(event, {\n type\n }) {\n if (type !== ElementaryStreamTypes.VIDEO) {\n this.flushing = false;\n this.bufferFlushed = true;\n if (this.state === State.ENDED) {\n this.state = State.IDLE;\n }\n const mediaBuffer = this.mediaBuffer || this.media;\n if (mediaBuffer) {\n this.afterBufferFlushed(mediaBuffer, type, PlaylistLevelType.AUDIO);\n this.tick();\n }\n }\n }\n _handleTransmuxComplete(transmuxResult) {\n var _id3$samples;\n const id = 'audio';\n const {\n hls\n } = this;\n const {\n remuxResult,\n chunkMeta\n } = transmuxResult;\n const context = this.getCurrentContext(chunkMeta);\n if (!context) {\n this.resetWhenMissingContext(chunkMeta);\n return;\n }\n const {\n frag,\n part,\n level\n } = context;\n const {\n details\n } = level;\n const {\n audio,\n text,\n id3,\n initSegment\n } = remuxResult;\n\n // Check if the current fragment has been aborted. We check this by first seeing if we're still playing the current level.\n // If we are, subsequently check if the currently loading fragment (fragCurrent) has changed.\n if (this.fragContextChanged(frag) || !details) {\n this.fragmentTracker.removeFragment(frag);\n return;\n }\n this.state = State.PARSING;\n if (this.switchingTrack && audio) {\n this.completeAudioSwitch(this.switchingTrack);\n }\n if (initSegment != null && initSegment.tracks) {\n const mapFragment = frag.initSegment || frag;\n if (this.unhandledEncryptionError(initSegment, frag)) {\n return;\n }\n this._bufferInitSegment(level, initSegment.tracks, mapFragment, chunkMeta);\n hls.trigger(Events.FRAG_PARSING_INIT_SEGMENT, {\n frag: mapFragment,\n id,\n tracks: initSegment.tracks\n });\n // Only flush audio from old audio tracks when PTS is known on new audio track\n }\n if (audio) {\n const {\n startPTS,\n endPTS,\n startDTS,\n endDTS\n } = audio;\n if (part) {\n part.elementaryStreams[ElementaryStreamTypes.AUDIO] = {\n startPTS,\n endPTS,\n startDTS,\n endDTS\n };\n }\n frag.setElementaryStreamInfo(ElementaryStreamTypes.AUDIO, startPTS, endPTS, startDTS, endDTS);\n this.bufferFragmentData(audio, frag, part, chunkMeta);\n }\n if (id3 != null && (_id3$samples = id3.samples) != null && _id3$samples.length) {\n const emittedID3 = _extends({\n id,\n frag,\n details\n }, id3);\n hls.trigger(Events.FRAG_PARSING_METADATA, emittedID3);\n }\n if (text) {\n const emittedText = _extends({\n id,\n frag,\n details\n }, text);\n hls.trigger(Events.FRAG_PARSING_USERDATA, emittedText);\n }\n }\n _bufferInitSegment(currentLevel, tracks, frag, chunkMeta) {\n if (this.state !== State.PARSING) {\n return;\n }\n // delete any video track found on audio transmuxer\n if (tracks.video) {\n delete tracks.video;\n }\n if (tracks.audiovideo) {\n delete tracks.audiovideo;\n }\n\n // include levelCodec in audio and video tracks\n if (!tracks.audio) {\n return;\n }\n const track = tracks.audio;\n track.id = PlaylistLevelType.AUDIO;\n const variantAudioCodecs = currentLevel.audioCodec;\n this.log(`Init audio buffer, container:${track.container}, codecs[level/parsed]=[${variantAudioCodecs}/${track.codec}]`);\n // SourceBuffer will use track.levelCodec if defined\n if (variantAudioCodecs && variantAudioCodecs.split(',').length === 1) {\n track.levelCodec = variantAudioCodecs;\n }\n this.hls.trigger(Events.BUFFER_CODECS, tracks);\n const initSegment = track.initSegment;\n if (initSegment != null && initSegment.byteLength) {\n const segment = {\n type: 'audio',\n frag,\n part: null,\n chunkMeta,\n parent: frag.type,\n data: initSegment\n };\n this.hls.trigger(Events.BUFFER_APPENDING, segment);\n }\n // trigger handler right now\n this.tickImmediate();\n }\n loadFragment(frag, track, targetBufferTime) {\n // only load if fragment is not loaded or if in audio switch\n const fragState = this.fragmentTracker.getState(frag);\n\n // we force a frag loading in audio switch as fragment tracker might not have evicted previous frags in case of quick audio switch\n if (this.switchingTrack || fragState === FragmentState.NOT_LOADED || fragState === FragmentState.PARTIAL) {\n var _track$details;\n if (!isMediaFragment(frag)) {\n this._loadInitSegment(frag, track);\n } else if ((_track$details = track.details) != null && _track$details.live && !this.initPTS[frag.cc]) {\n this.log(`Waiting for video PTS in continuity counter ${frag.cc} of live stream before loading audio fragment ${frag.sn} of level ${this.trackId}`);\n this.state = State.WAITING_INIT_PTS;\n const mainDetails = this.mainDetails;\n if (mainDetails && mainDetails.fragmentStart !== track.details.fragmentStart) {\n alignMediaPlaylistByPDT(track.details, mainDetails);\n }\n } else {\n super.loadFragment(frag, track, targetBufferTime);\n }\n } else {\n this.clearTrackerIfNeeded(frag);\n }\n }\n flushAudioIfNeeded(switchingTrack) {\n if (this.media && this.bufferedTrack) {\n const {\n name,\n lang,\n assocLang,\n characteristics,\n audioCodec,\n channels\n } = this.bufferedTrack;\n if (!matchesOption({\n name,\n lang,\n assocLang,\n characteristics,\n audioCodec,\n channels\n }, switchingTrack, audioMatchPredicate)) {\n if (useAlternateAudio(switchingTrack.url, this.hls)) {\n this.log('Switching audio track : flushing all audio');\n super.flushMainBuffer(0, Number.POSITIVE_INFINITY, 'audio');\n this.bufferedTrack = null;\n } else {\n // Main is being buffered. Set bufferedTrack so that it is flushed when switching back to alt-audio\n this.bufferedTrack = switchingTrack;\n }\n }\n }\n }\n completeAudioSwitch(switchingTrack) {\n const {\n hls\n } = this;\n this.flushAudioIfNeeded(switchingTrack);\n this.bufferedTrack = switchingTrack;\n this.switchingTrack = null;\n hls.trigger(Events.AUDIO_TRACK_SWITCHED, _objectSpread2({}, switchingTrack));\n }\n}\n\nclass BasePlaylistController extends Logger {\n constructor(hls, logPrefix) {\n super(logPrefix, hls.logger);\n this.hls = void 0;\n this.canLoad = false;\n this.timer = -1;\n this.hls = hls;\n }\n destroy() {\n this.clearTimer();\n // @ts-ignore\n this.hls = this.log = this.warn = null;\n }\n clearTimer() {\n if (this.timer !== -1) {\n self.clearTimeout(this.timer);\n this.timer = -1;\n }\n }\n startLoad() {\n this.canLoad = true;\n this.loadPlaylist();\n }\n stopLoad() {\n this.canLoad = false;\n this.clearTimer();\n }\n switchParams(playlistUri, previous, current) {\n const renditionReports = previous == null ? void 0 : previous.renditionReports;\n if (renditionReports) {\n let foundIndex = -1;\n for (let i = 0; i < renditionReports.length; i++) {\n const attr = renditionReports[i];\n let uri;\n try {\n uri = new self.URL(attr.URI, previous.url).href;\n } catch (error) {\n this.warn(`Could not construct new URL for Rendition Report: ${error}`);\n uri = attr.URI || '';\n }\n // Use exact match. Otherwise, the last partial match, if any, will be used\n // (Playlist URI includes a query string that the Rendition Report does not)\n if (uri === playlistUri) {\n foundIndex = i;\n break;\n } else if (uri === playlistUri.substring(0, uri.length)) {\n foundIndex = i;\n }\n }\n if (foundIndex !== -1) {\n const attr = renditionReports[foundIndex];\n const msn = parseInt(attr['LAST-MSN']) || previous.lastPartSn;\n let part = parseInt(attr['LAST-PART']) || previous.lastPartIndex;\n if (this.hls.config.lowLatencyMode) {\n const currentGoal = Math.min(previous.age - previous.partTarget, previous.targetduration);\n if (part >= 0 && currentGoal > previous.partTarget) {\n part += 1;\n }\n }\n const skip = current && getSkipValue(current);\n return new HlsUrlParameters(msn, part >= 0 ? part : undefined, skip);\n }\n }\n }\n loadPlaylist(hlsUrlParameters) {\n // Loading is handled by the subclasses\n this.clearTimer();\n }\n loadingPlaylist(playlist, hlsUrlParameters) {\n // Loading is handled by the subclasses\n this.clearTimer();\n }\n shouldLoadPlaylist(playlist) {\n return this.canLoad && !!playlist && !!playlist.url && (!playlist.details || playlist.details.live);\n }\n getUrlWithDirectives(uri, hlsUrlParameters) {\n if (hlsUrlParameters) {\n try {\n return hlsUrlParameters.addDirectives(uri);\n } catch (error) {\n this.warn(`Could not construct new URL with HLS Delivery Directives: ${error}`);\n }\n }\n return uri;\n }\n playlistLoaded(index, data, previousDetails) {\n const {\n details,\n stats\n } = data;\n\n // Set last updated date-time\n const now = self.performance.now();\n const elapsed = stats.loading.first ? Math.max(0, now - stats.loading.first) : 0;\n details.advancedDateTime = Date.now() - elapsed;\n\n // shift fragment starts with timelineOffset\n const timelineOffset = this.hls.config.timelineOffset;\n if (timelineOffset !== details.appliedTimelineOffset) {\n const offset = Math.max(timelineOffset || 0, 0);\n details.appliedTimelineOffset = offset;\n details.fragments.forEach(frag => {\n frag.setStart(frag.playlistOffset + offset);\n });\n }\n\n // if current playlist is a live playlist, arm a timer to reload it\n if (details.live || previousDetails != null && previousDetails.live) {\n const levelOrTrack = 'levelInfo' in data ? data.levelInfo : data.track;\n details.reloaded(previousDetails);\n // Merge live playlists to adjust fragment starts and fill in delta playlist skipped segments\n if (previousDetails && details.fragments.length > 0) {\n mergeDetails(previousDetails, details, this);\n const error = details.playlistParsingError;\n if (error) {\n this.warn(error);\n const hls = this.hls;\n if (!hls.config.ignorePlaylistParsingErrors) {\n var _details$fragments$;\n const {\n networkDetails\n } = data;\n hls.trigger(Events.ERROR, {\n type: ErrorTypes.NETWORK_ERROR,\n details: ErrorDetails.LEVEL_PARSING_ERROR,\n fatal: false,\n url: details.url,\n error,\n reason: error.message,\n level: data.level || undefined,\n parent: (_details$fragments$ = details.fragments[0]) == null ? void 0 : _details$fragments$.type,\n networkDetails,\n stats\n });\n return;\n }\n details.playlistParsingError = null;\n }\n }\n if (details.requestScheduled === -1) {\n details.requestScheduled = stats.loading.start;\n }\n const bufferInfo = this.hls.mainForwardBufferInfo;\n const position = bufferInfo ? bufferInfo.end - bufferInfo.len : 0;\n const distanceToLiveEdgeMs = (details.edge - position) * 1000;\n const reloadInterval = computeReloadInterval(details, distanceToLiveEdgeMs);\n if (details.requestScheduled + reloadInterval < now) {\n details.requestScheduled = now;\n } else {\n details.requestScheduled += reloadInterval;\n }\n this.log(`live playlist ${index} ${details.advanced ? 'REFRESHED ' + details.lastPartSn + '-' + details.lastPartIndex : details.updated ? 'UPDATED' : 'MISSED'}`);\n if (!this.canLoad || !details.live) {\n return;\n }\n let deliveryDirectives;\n let msn = undefined;\n let part = undefined;\n if (details.canBlockReload && details.endSN && details.advanced) {\n // Load level with LL-HLS delivery directives\n const lowLatencyMode = this.hls.config.lowLatencyMode;\n const lastPartSn = details.lastPartSn;\n const endSn = details.endSN;\n const lastPartIndex = details.lastPartIndex;\n const hasParts = lastPartIndex !== -1;\n const atLastPartOfSegment = lastPartSn === endSn;\n if (hasParts) {\n // When low latency mode is disabled, request the last part of the next segment\n if (atLastPartOfSegment) {\n msn = endSn + 1;\n part = lowLatencyMode ? 0 : lastPartIndex;\n } else {\n msn = lastPartSn;\n part = lowLatencyMode ? lastPartIndex + 1 : details.maxPartIndex;\n }\n } else {\n msn = endSn + 1;\n }\n // Low-Latency CDN Tune-in: \"age\" header and time since load indicates we're behind by more than one part\n // Update directives to obtain the Playlist that has the estimated additional duration of media\n const lastAdvanced = details.age;\n const cdnAge = lastAdvanced + details.ageHeader;\n let currentGoal = Math.min(cdnAge - details.partTarget, details.targetduration * 1.5);\n if (currentGoal > 0) {\n if (cdnAge > details.targetduration * 3) {\n // Omit segment and part directives when the last response was more than 3 target durations ago,\n this.log(`Playlist last advanced ${lastAdvanced.toFixed(2)}s ago. Omitting segment and part directives.`);\n msn = undefined;\n part = undefined;\n } else if (previousDetails != null && previousDetails.tuneInGoal && cdnAge - details.partTarget > previousDetails.tuneInGoal) {\n // If we attempted to get the next or latest playlist update, but currentGoal increased,\n // then we either can't catchup, or the \"age\" header cannot be trusted.\n this.warn(`CDN Tune-in goal increased from: ${previousDetails.tuneInGoal} to: ${currentGoal} with playlist age: ${details.age}`);\n currentGoal = 0;\n } else {\n const segments = Math.floor(currentGoal / details.targetduration);\n msn += segments;\n if (part !== undefined) {\n const parts = Math.round(currentGoal % details.targetduration / details.partTarget);\n part += parts;\n }\n this.log(`CDN Tune-in age: ${details.ageHeader}s last advanced ${lastAdvanced.toFixed(2)}s goal: ${currentGoal} skip sn ${segments} to part ${part}`);\n }\n details.tuneInGoal = currentGoal;\n }\n deliveryDirectives = this.getDeliveryDirectives(details, data.deliveryDirectives, msn, part);\n if (lowLatencyMode || !atLastPartOfSegment) {\n details.requestScheduled = now;\n this.loadingPlaylist(levelOrTrack, deliveryDirectives);\n return;\n }\n } else if (details.canBlockReload || details.canSkipUntil) {\n deliveryDirectives = this.getDeliveryDirectives(details, data.deliveryDirectives, msn, part);\n }\n if (deliveryDirectives && msn !== undefined && details.canBlockReload) {\n details.requestScheduled = stats.loading.first + Math.max(reloadInterval - elapsed * 2, reloadInterval / 2);\n }\n this.scheduleLoading(levelOrTrack, deliveryDirectives, details);\n } else {\n this.clearTimer();\n }\n }\n scheduleLoading(levelOrTrack, deliveryDirectives, updatedDetails) {\n const details = updatedDetails || levelOrTrack.details;\n if (!details) {\n this.loadingPlaylist(levelOrTrack, deliveryDirectives);\n return;\n }\n const now = self.performance.now();\n const requestScheduled = details.requestScheduled;\n if (now >= requestScheduled) {\n this.loadingPlaylist(levelOrTrack, deliveryDirectives);\n return;\n }\n const estimatedTimeUntilUpdate = requestScheduled - now;\n this.log(`reload live playlist ${levelOrTrack.name || levelOrTrack.bitrate + 'bps'} in ${Math.round(estimatedTimeUntilUpdate)} ms`);\n this.clearTimer();\n this.timer = self.setTimeout(() => this.loadingPlaylist(levelOrTrack, deliveryDirectives), estimatedTimeUntilUpdate);\n }\n getDeliveryDirectives(details, previousDeliveryDirectives, msn, part) {\n let skip = getSkipValue(details);\n if (previousDeliveryDirectives != null && previousDeliveryDirectives.skip && details.deltaUpdateFailed) {\n msn = previousDeliveryDirectives.msn;\n part = previousDeliveryDirectives.part;\n skip = HlsSkip.No;\n }\n return new HlsUrlParameters(msn, part, skip);\n }\n checkRetry(errorEvent) {\n const errorDetails = errorEvent.details;\n const isTimeout = isTimeoutError(errorEvent);\n const errorAction = errorEvent.errorAction;\n const {\n action,\n retryCount = 0,\n retryConfig\n } = errorAction || {};\n const retry = !!errorAction && !!retryConfig && (action === NetworkErrorAction.RetryRequest || !errorAction.resolved && action === NetworkErrorAction.SendAlternateToPenaltyBox);\n if (retry) {\n var _errorEvent$context;\n if (retryCount >= retryConfig.maxNumRetry) {\n return false;\n }\n if (isTimeout && (_errorEvent$context = errorEvent.context) != null && _errorEvent$context.deliveryDirectives) {\n // The LL-HLS request already timed out so retry immediately\n this.warn(`Retrying playlist loading ${retryCount + 1}/${retryConfig.maxNumRetry} after \"${errorDetails}\" without delivery-directives`);\n this.loadPlaylist();\n } else {\n const delay = getRetryDelay(retryConfig, retryCount);\n // Schedule level/track reload\n this.clearTimer();\n this.timer = self.setTimeout(() => this.loadPlaylist(), delay);\n this.warn(`Retrying playlist loading ${retryCount + 1}/${retryConfig.maxNumRetry} after \"${errorDetails}\" in ${delay}ms`);\n }\n // `levelRetry = true` used to inform other controllers that a retry is happening\n errorEvent.levelRetry = true;\n errorAction.resolved = true;\n }\n return retry;\n }\n}\n\nfunction subtitleOptionsIdentical(trackList1, trackList2) {\n if (trackList1.length !== trackList2.length) {\n return false;\n }\n for (let i = 0; i < trackList1.length; i++) {\n if (!mediaAttributesIdentical(trackList1[i].attrs, trackList2[i].attrs)) {\n return false;\n }\n }\n return true;\n}\nfunction mediaAttributesIdentical(attrs1, attrs2, customAttributes) {\n // Media options with the same rendition ID must be bit identical\n const stableRenditionId = attrs1['STABLE-RENDITION-ID'];\n if (stableRenditionId && !customAttributes) {\n return stableRenditionId === attrs2['STABLE-RENDITION-ID'];\n }\n // When rendition ID is not present, compare attributes\n return !(customAttributes || ['LANGUAGE', 'NAME', 'CHARACTERISTICS', 'AUTOSELECT', 'DEFAULT', 'FORCED', 'ASSOC-LANGUAGE']).some(subtitleAttribute => attrs1[subtitleAttribute] !== attrs2[subtitleAttribute]);\n}\nfunction subtitleTrackMatchesTextTrack(subtitleTrack, textTrack) {\n return textTrack.label.toLowerCase() === subtitleTrack.name.toLowerCase() && (!textTrack.language || textTrack.language.toLowerCase() === (subtitleTrack.lang || '').toLowerCase());\n}\n\nclass AudioTrackController extends BasePlaylistController {\n constructor(hls) {\n super(hls, 'audio-track-controller');\n this.tracks = [];\n this.groupIds = null;\n this.tracksInGroup = [];\n this.trackId = -1;\n this.currentTrack = null;\n this.selectDefaultTrack = true;\n this.registerListeners();\n }\n registerListeners() {\n const {\n hls\n } = this;\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.on(Events.LEVEL_LOADING, this.onLevelLoading, this);\n hls.on(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n hls.on(Events.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this);\n hls.on(Events.ERROR, this.onError, this);\n }\n unregisterListeners() {\n const {\n hls\n } = this;\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.off(Events.LEVEL_LOADING, this.onLevelLoading, this);\n hls.off(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n hls.off(Events.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this);\n hls.off(Events.ERROR, this.onError, this);\n }\n destroy() {\n this.unregisterListeners();\n this.tracks.length = 0;\n this.tracksInGroup.length = 0;\n this.currentTrack = null;\n super.destroy();\n }\n onManifestLoading() {\n this.tracks = [];\n this.tracksInGroup = [];\n this.groupIds = null;\n this.currentTrack = null;\n this.trackId = -1;\n this.selectDefaultTrack = true;\n }\n onManifestParsed(event, data) {\n this.tracks = data.audioTracks || [];\n }\n onAudioTrackLoaded(event, data) {\n const {\n id,\n groupId,\n details\n } = data;\n const trackInActiveGroup = this.tracksInGroup[id];\n if (!trackInActiveGroup || trackInActiveGroup.groupId !== groupId) {\n this.warn(`Audio track with id:${id} and group:${groupId} not found in active group ${trackInActiveGroup == null ? void 0 : trackInActiveGroup.groupId}`);\n return;\n }\n const curDetails = trackInActiveGroup.details;\n trackInActiveGroup.details = data.details;\n this.log(`Audio track ${id} \"${trackInActiveGroup.name}\" lang:${trackInActiveGroup.lang} group:${groupId} loaded [${details.startSN}-${details.endSN}]`);\n if (id === this.trackId) {\n this.playlistLoaded(id, data, curDetails);\n }\n }\n onLevelLoading(event, data) {\n this.switchLevel(data.level);\n }\n onLevelSwitching(event, data) {\n this.switchLevel(data.level);\n }\n switchLevel(levelIndex) {\n const levelInfo = this.hls.levels[levelIndex];\n if (!levelInfo) {\n return;\n }\n const audioGroups = levelInfo.audioGroups || null;\n const currentGroups = this.groupIds;\n let currentTrack = this.currentTrack;\n if (!audioGroups || (currentGroups == null ? void 0 : currentGroups.length) !== (audioGroups == null ? void 0 : audioGroups.length) || audioGroups != null && audioGroups.some(groupId => (currentGroups == null ? void 0 : currentGroups.indexOf(groupId)) === -1)) {\n this.groupIds = audioGroups;\n this.trackId = -1;\n this.currentTrack = null;\n const audioTracks = this.tracks.filter(track => !audioGroups || audioGroups.indexOf(track.groupId) !== -1);\n if (audioTracks.length) {\n // Disable selectDefaultTrack if there are no default tracks\n if (this.selectDefaultTrack && !audioTracks.some(track => track.default)) {\n this.selectDefaultTrack = false;\n }\n // track.id should match hls.audioTracks index\n audioTracks.forEach((track, i) => {\n track.id = i;\n });\n } else if (!currentTrack && !this.tracksInGroup.length) {\n // Do not dispatch AUDIO_TRACKS_UPDATED when there were and are no tracks\n return;\n }\n this.tracksInGroup = audioTracks;\n\n // Find preferred track\n const audioPreference = this.hls.config.audioPreference;\n if (!currentTrack && audioPreference) {\n const groupIndex = findMatchingOption(audioPreference, audioTracks, audioMatchPredicate);\n if (groupIndex > -1) {\n currentTrack = audioTracks[groupIndex];\n } else {\n const allIndex = findMatchingOption(audioPreference, this.tracks);\n currentTrack = this.tracks[allIndex];\n }\n }\n\n // Select initial track\n let trackId = this.findTrackId(currentTrack);\n if (trackId === -1 && currentTrack) {\n trackId = this.findTrackId(null);\n }\n\n // Dispatch events and load track if needed\n const audioTracksUpdated = {\n audioTracks\n };\n this.log(`Updating audio tracks, ${audioTracks.length} track(s) found in group(s): ${audioGroups == null ? void 0 : audioGroups.join(',')}`);\n this.hls.trigger(Events.AUDIO_TRACKS_UPDATED, audioTracksUpdated);\n const selectedTrackId = this.trackId;\n if (trackId !== -1 && selectedTrackId === -1) {\n this.setAudioTrack(trackId);\n } else if (audioTracks.length && selectedTrackId === -1) {\n var _this$groupIds;\n const error = new Error(`No audio track selected for current audio group-ID(s): ${(_this$groupIds = this.groupIds) == null ? void 0 : _this$groupIds.join(',')} track count: ${audioTracks.length}`);\n this.warn(error.message);\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.AUDIO_TRACK_LOAD_ERROR,\n fatal: true,\n error\n });\n }\n }\n }\n onError(event, data) {\n if (data.fatal || !data.context) {\n return;\n }\n if (data.context.type === PlaylistContextType.AUDIO_TRACK && data.context.id === this.trackId && (!this.groupIds || this.groupIds.indexOf(data.context.groupId) !== -1)) {\n this.checkRetry(data);\n }\n }\n get allAudioTracks() {\n return this.tracks;\n }\n get audioTracks() {\n return this.tracksInGroup;\n }\n get audioTrack() {\n return this.trackId;\n }\n set audioTrack(newId) {\n // If audio track is selected from API then don't choose from the manifest default track\n this.selectDefaultTrack = false;\n this.setAudioTrack(newId);\n }\n setAudioOption(audioOption) {\n const hls = this.hls;\n hls.config.audioPreference = audioOption;\n if (audioOption) {\n const allAudioTracks = this.allAudioTracks;\n this.selectDefaultTrack = false;\n if (allAudioTracks.length) {\n // First see if current option matches (no switch op)\n const currentTrack = this.currentTrack;\n if (currentTrack && matchesOption(audioOption, currentTrack, audioMatchPredicate)) {\n return currentTrack;\n }\n // Find option in available tracks (tracksInGroup)\n const groupIndex = findMatchingOption(audioOption, this.tracksInGroup, audioMatchPredicate);\n if (groupIndex > -1) {\n const track = this.tracksInGroup[groupIndex];\n this.setAudioTrack(groupIndex);\n return track;\n } else if (currentTrack) {\n // Find option in nearest level audio group\n let searchIndex = hls.loadLevel;\n if (searchIndex === -1) {\n searchIndex = hls.firstAutoLevel;\n }\n const switchIndex = findClosestLevelWithAudioGroup(audioOption, hls.levels, allAudioTracks, searchIndex, audioMatchPredicate);\n if (switchIndex === -1) {\n // could not find matching variant\n return null;\n }\n // and switch level to acheive the audio group switch\n hls.nextLoadLevel = switchIndex;\n }\n if (audioOption.channels || audioOption.audioCodec) {\n // Could not find a match with codec / channels predicate\n // Find a match without channels or codec\n const withoutCodecAndChannelsMatch = findMatchingOption(audioOption, allAudioTracks);\n if (withoutCodecAndChannelsMatch > -1) {\n return allAudioTracks[withoutCodecAndChannelsMatch];\n }\n }\n }\n }\n return null;\n }\n setAudioTrack(newId) {\n const tracks = this.tracksInGroup;\n\n // check if level idx is valid\n if (newId < 0 || newId >= tracks.length) {\n this.warn(`Invalid audio track id: ${newId}`);\n return;\n }\n this.selectDefaultTrack = false;\n const lastTrack = this.currentTrack;\n const track = tracks[newId];\n const trackLoaded = track.details && !track.details.live;\n if (newId === this.trackId && track === lastTrack && trackLoaded) {\n return;\n }\n this.log(`Switching to audio-track ${newId} \"${track.name}\" lang:${track.lang} group:${track.groupId} channels:${track.channels}`);\n this.trackId = newId;\n this.currentTrack = track;\n this.hls.trigger(Events.AUDIO_TRACK_SWITCHING, _objectSpread2({}, track));\n // Do not reload track unless live\n if (trackLoaded) {\n return;\n }\n const hlsUrlParameters = this.switchParams(track.url, lastTrack == null ? void 0 : lastTrack.details, track.details);\n this.loadPlaylist(hlsUrlParameters);\n }\n findTrackId(currentTrack) {\n const audioTracks = this.tracksInGroup;\n for (let i = 0; i < audioTracks.length; i++) {\n const track = audioTracks[i];\n if (this.selectDefaultTrack && !track.default) {\n continue;\n }\n if (!currentTrack || matchesOption(currentTrack, track, audioMatchPredicate)) {\n return i;\n }\n }\n if (currentTrack) {\n const {\n name,\n lang,\n assocLang,\n characteristics,\n audioCodec,\n channels\n } = currentTrack;\n for (let i = 0; i < audioTracks.length; i++) {\n const track = audioTracks[i];\n if (matchesOption({\n name,\n lang,\n assocLang,\n characteristics,\n audioCodec,\n channels\n }, track, audioMatchPredicate)) {\n return i;\n }\n }\n for (let i = 0; i < audioTracks.length; i++) {\n const track = audioTracks[i];\n if (mediaAttributesIdentical(currentTrack.attrs, track.attrs, ['LANGUAGE', 'ASSOC-LANGUAGE', 'CHARACTERISTICS'])) {\n return i;\n }\n }\n for (let i = 0; i < audioTracks.length; i++) {\n const track = audioTracks[i];\n if (mediaAttributesIdentical(currentTrack.attrs, track.attrs, ['LANGUAGE'])) {\n return i;\n }\n }\n }\n return -1;\n }\n loadPlaylist(hlsUrlParameters) {\n super.loadPlaylist();\n const audioTrack = this.currentTrack;\n if (!this.shouldLoadPlaylist(audioTrack)) {\n return;\n }\n // Do not load audio rendition with URI matching main variant URI\n if (useAlternateAudio(audioTrack.url, this.hls)) {\n this.scheduleLoading(audioTrack, hlsUrlParameters);\n }\n }\n loadingPlaylist(audioTrack, hlsUrlParameters) {\n super.loadingPlaylist(audioTrack, hlsUrlParameters);\n const id = audioTrack.id;\n const groupId = audioTrack.groupId;\n const url = this.getUrlWithDirectives(audioTrack.url, hlsUrlParameters);\n const details = audioTrack.details;\n const age = details == null ? void 0 : details.age;\n this.log(`Loading audio-track ${id} \"${audioTrack.name}\" lang:${audioTrack.lang} group:${groupId}${(hlsUrlParameters == null ? void 0 : hlsUrlParameters.msn) !== undefined ? ' at sn ' + hlsUrlParameters.msn + ' part ' + hlsUrlParameters.part : ''}${age && details.live ? ' age ' + age.toFixed(1) + (details.type ? ' ' + details.type || '' : '') : ''} ${url}`);\n this.hls.trigger(Events.AUDIO_TRACK_LOADING, {\n url,\n id,\n groupId,\n deliveryDirectives: hlsUrlParameters || null,\n track: audioTrack\n });\n }\n}\n\nclass BufferOperationQueue {\n constructor(sourceBufferReference) {\n this.tracks = void 0;\n this.queues = {\n video: [],\n audio: [],\n audiovideo: []\n };\n this.tracks = sourceBufferReference;\n }\n destroy() {\n this.tracks = this.queues = null;\n }\n append(operation, type, pending) {\n if (this.queues === null || this.tracks === null) {\n return;\n }\n const queue = this.queues[type];\n queue.push(operation);\n if (queue.length === 1 && !pending) {\n this.executeNext(type);\n }\n }\n appendBlocker(type) {\n return new Promise(resolve => {\n const operation = {\n label: 'async-blocker',\n execute: resolve,\n onStart: () => {},\n onComplete: () => {},\n onError: () => {}\n };\n this.append(operation, type);\n });\n }\n prependBlocker(type) {\n return new Promise(resolve => {\n if (this.queues) {\n const operation = {\n label: 'async-blocker-prepend',\n execute: resolve,\n onStart: () => {},\n onComplete: () => {},\n onError: () => {}\n };\n this.queues[type].unshift(operation);\n }\n });\n }\n removeBlockers() {\n if (this.queues === null) {\n return;\n }\n [this.queues.video, this.queues.audio, this.queues.audiovideo].forEach(queue => {\n var _queue$;\n const label = (_queue$ = queue[0]) == null ? void 0 : _queue$.label;\n if (label === 'async-blocker' || label === 'async-blocker-prepend') {\n queue[0].execute();\n queue.splice(0, 1);\n }\n });\n }\n unblockAudio(op) {\n if (this.queues === null) {\n return;\n }\n const queue = this.queues.audio;\n if (queue[0] === op) {\n this.shiftAndExecuteNext('audio');\n }\n }\n executeNext(type) {\n if (this.queues === null || this.tracks === null) {\n return;\n }\n const queue = this.queues[type];\n if (queue.length) {\n const operation = queue[0];\n try {\n // Operations are expected to result in an 'updateend' event being fired. If not, the queue will lock. Operations\n // which do not end with this event must call _onSBUpdateEnd manually\n operation.execute();\n } catch (error) {\n var _this$tracks$type;\n operation.onError(error);\n if (this.queues === null || this.tracks === null) {\n return;\n }\n\n // Only shift the current operation off, otherwise the updateend handler will do this for us\n const sb = (_this$tracks$type = this.tracks[type]) == null ? void 0 : _this$tracks$type.buffer;\n if (!(sb != null && sb.updating)) {\n this.shiftAndExecuteNext(type);\n }\n }\n }\n }\n shiftAndExecuteNext(type) {\n if (this.queues === null) {\n return;\n }\n this.queues[type].shift();\n this.executeNext(type);\n }\n current(type) {\n var _this$queues;\n return ((_this$queues = this.queues) == null ? void 0 : _this$queues[type][0]) || null;\n }\n toString() {\n const {\n queues,\n tracks\n } = this;\n if (queues === null || tracks === null) {\n return `<destroyed>`;\n }\n return `\n${this.list('video')}\n${this.list('audio')}\n${this.list('audiovideo')}}`;\n }\n list(type) {\n var _this$queues2, _this$tracks;\n return (_this$queues2 = this.queues) != null && _this$queues2[type] || (_this$tracks = this.tracks) != null && _this$tracks[type] ? `${type}: (${this.listSbInfo(type)}) ${this.listOps(type)}` : '';\n }\n listSbInfo(type) {\n var _this$tracks2;\n const track = (_this$tracks2 = this.tracks) == null ? void 0 : _this$tracks2[type];\n const sb = track == null ? void 0 : track.buffer;\n if (!sb) {\n return 'none';\n }\n return `SourceBuffer${sb.updating ? ' updating' : ''}${track.ended ? ' ended' : ''}${track.ending ? ' ending' : ''}`;\n }\n listOps(type) {\n var _this$queues3;\n return ((_this$queues3 = this.queues) == null ? void 0 : _this$queues3[type].map(op => op.label).join(', ')) || '';\n }\n}\n\nconst VIDEO_CODEC_PROFILE_REPLACE = /(avc[1234]|hvc1|hev1|dvh[1e]|vp09|av01)(?:\\.[^.,]+)+/;\nconst TRACK_REMOVED_ERROR_NAME = 'HlsJsTrackRemovedError';\nclass HlsJsTrackRemovedError extends Error {\n constructor(message) {\n super(message);\n this.name = TRACK_REMOVED_ERROR_NAME;\n }\n}\nclass BufferController extends Logger {\n constructor(hls, fragmentTracker) {\n super('buffer-controller', hls.logger);\n this.hls = void 0;\n this.fragmentTracker = void 0;\n // The level details used to determine duration, target-duration and live\n this.details = null;\n // cache the self generated object url to detect hijack of video tag\n this._objectUrl = null;\n // A queue of buffer operations which require the SourceBuffer to not be updating upon execution\n this.operationQueue = null;\n // The total number track codecs expected before any sourceBuffers are created (2: audio and video or 1: audiovideo | audio | video)\n this.bufferCodecEventsTotal = 0;\n // A reference to the attached media element\n this.media = null;\n // A reference to the active media source\n this.mediaSource = null;\n // Last MP3 audio chunk appended\n this.lastMpegAudioChunk = null;\n // Audio fragment blocked from appending until corresponding video appends or context changes\n this.blockedAudioAppend = null;\n // Keep track of video append position for unblocking audio\n this.lastVideoAppendEnd = 0;\n // Whether or not to use ManagedMediaSource API and append source element to media element.\n this.appendSource = void 0;\n // Transferred MediaSource information used to detmerine if duration end endstream may be appended\n this.transferData = void 0;\n // Directives used to override default MediaSource handling\n this.overrides = void 0;\n // Error counters\n this.appendErrors = {\n audio: 0,\n video: 0,\n audiovideo: 0\n };\n // Record of required or created buffers by type. SourceBuffer is stored in Track.buffer once created.\n this.tracks = {};\n // Array of SourceBuffer type and SourceBuffer (or null). One entry per TrackSet in this.tracks.\n this.sourceBuffers = [[null, null], [null, null]];\n this._onEndStreaming = event => {\n var _this$mediaSource;\n if (!this.hls) {\n return;\n }\n if (((_this$mediaSource = this.mediaSource) == null ? void 0 : _this$mediaSource.readyState) !== 'open') {\n return;\n }\n this.hls.pauseBuffering();\n };\n this._onStartStreaming = event => {\n if (!this.hls) {\n return;\n }\n this.hls.resumeBuffering();\n };\n // Keep as arrow functions so that we can directly reference these functions directly as event listeners\n this._onMediaSourceOpen = e => {\n const {\n media,\n mediaSource\n } = this;\n if (e) {\n this.log('Media source opened');\n }\n if (!media || !mediaSource) {\n return;\n }\n // once received, don't listen anymore to sourceopen event\n mediaSource.removeEventListener('sourceopen', this._onMediaSourceOpen);\n media.removeEventListener('emptied', this._onMediaEmptied);\n this.updateDuration();\n this.hls.trigger(Events.MEDIA_ATTACHED, {\n media,\n mediaSource: mediaSource\n });\n if (this.mediaSource !== null) {\n this.checkPendingTracks();\n }\n };\n this._onMediaSourceClose = () => {\n this.log('Media source closed');\n };\n this._onMediaSourceEnded = () => {\n this.log('Media source ended');\n };\n this._onMediaEmptied = () => {\n const {\n mediaSrc,\n _objectUrl\n } = this;\n if (mediaSrc !== _objectUrl) {\n this.error(`Media element src was set while attaching MediaSource (${_objectUrl} > ${mediaSrc})`);\n }\n };\n this.hls = hls;\n this.fragmentTracker = fragmentTracker;\n this.appendSource = isManagedMediaSource(getMediaSource(hls.config.preferManagedMediaSource));\n this.initTracks();\n this.registerListeners();\n }\n hasSourceTypes() {\n return Object.keys(this.tracks).length > 0;\n }\n destroy() {\n this.unregisterListeners();\n this.details = null;\n this.lastMpegAudioChunk = this.blockedAudioAppend = null;\n this.transferData = this.overrides = undefined;\n if (this.operationQueue) {\n this.operationQueue.destroy();\n this.operationQueue = null;\n }\n // @ts-ignore\n this.hls = this.fragmentTracker = null;\n // @ts-ignore\n this._onMediaSourceOpen = this._onMediaSourceClose = null;\n // @ts-ignore\n this._onMediaSourceEnded = null;\n // @ts-ignore\n this._onStartStreaming = this._onEndStreaming = null;\n }\n registerListeners() {\n const {\n hls\n } = this;\n hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.on(Events.BUFFER_RESET, this.onBufferReset, this);\n hls.on(Events.BUFFER_APPENDING, this.onBufferAppending, this);\n hls.on(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n hls.on(Events.BUFFER_EOS, this.onBufferEos, this);\n hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n hls.on(Events.FRAG_PARSED, this.onFragParsed, this);\n hls.on(Events.FRAG_CHANGED, this.onFragChanged, this);\n hls.on(Events.ERROR, this.onError, this);\n }\n unregisterListeners() {\n const {\n hls\n } = this;\n hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.off(Events.BUFFER_RESET, this.onBufferReset, this);\n hls.off(Events.BUFFER_APPENDING, this.onBufferAppending, this);\n hls.off(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n hls.off(Events.BUFFER_EOS, this.onBufferEos, this);\n hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n hls.off(Events.FRAG_PARSED, this.onFragParsed, this);\n hls.off(Events.FRAG_CHANGED, this.onFragChanged, this);\n hls.off(Events.ERROR, this.onError, this);\n }\n transferMedia() {\n const {\n media,\n mediaSource\n } = this;\n if (!media) {\n return null;\n }\n const tracks = {};\n if (this.operationQueue) {\n const updating = this.isUpdating();\n if (!updating) {\n this.operationQueue.removeBlockers();\n }\n const queued = this.isQueued();\n if (updating || queued) {\n this.warn(`Transfering MediaSource with${queued ? ' operations in queue' : ''}${updating ? ' updating SourceBuffer(s)' : ''} ${this.operationQueue}`);\n }\n this.operationQueue.destroy();\n }\n const transferData = this.transferData;\n if (!this.sourceBufferCount && transferData && transferData.mediaSource === mediaSource) {\n _extends(tracks, transferData.tracks);\n } else {\n this.sourceBuffers.forEach(tuple => {\n const [type] = tuple;\n if (type) {\n tracks[type] = _extends({}, this.tracks[type]);\n this.removeBuffer(type);\n }\n tuple[0] = tuple[1] = null;\n });\n }\n return {\n media,\n mediaSource,\n tracks\n };\n }\n initTracks() {\n const tracks = {};\n this.sourceBuffers = [[null, null], [null, null]];\n this.tracks = tracks;\n this.resetQueue();\n this.resetAppendErrors();\n this.lastMpegAudioChunk = this.blockedAudioAppend = null;\n this.lastVideoAppendEnd = 0;\n }\n onManifestLoading() {\n this.bufferCodecEventsTotal = 0;\n this.details = null;\n }\n onManifestParsed(event, data) {\n var _this$transferData;\n // in case of alt audio 2 BUFFER_CODECS events will be triggered, one per stream controller\n // sourcebuffers will be created all at once when the expected nb of tracks will be reached\n // in case alt audio is not used, only one BUFFER_CODEC event will be fired from main stream controller\n // it will contain the expected nb of source buffers, no need to compute it\n let codecEvents = 2;\n if (data.audio && !data.video || !data.altAudio) {\n codecEvents = 1;\n }\n this.bufferCodecEventsTotal = codecEvents;\n this.log(`${codecEvents} bufferCodec event(s) expected.`);\n if ((_this$transferData = this.transferData) != null && _this$transferData.mediaSource && this.sourceBufferCount && codecEvents) {\n this.bufferCreated();\n }\n }\n onMediaAttaching(event, data) {\n const media = this.media = data.media;\n this.transferData = this.overrides = undefined;\n const MediaSource = getMediaSource(this.appendSource);\n if (MediaSource) {\n const transferringMedia = !!data.mediaSource;\n if (transferringMedia || data.overrides) {\n this.transferData = data;\n this.overrides = data.overrides;\n }\n const ms = this.mediaSource = data.mediaSource || new MediaSource();\n this.assignMediaSource(ms);\n if (transferringMedia) {\n this._objectUrl = media.src;\n this.attachTransferred();\n } else {\n // cache the locally generated object url\n const objectUrl = this._objectUrl = self.URL.createObjectURL(ms);\n // link video and media Source\n if (this.appendSource) {\n try {\n media.removeAttribute('src');\n // ManagedMediaSource will not open without disableRemotePlayback set to false or source alternatives\n const MMS = self.ManagedMediaSource;\n media.disableRemotePlayback = media.disableRemotePlayback || MMS && ms instanceof MMS;\n removeSourceChildren(media);\n addSource(media, objectUrl);\n media.load();\n } catch (error) {\n media.src = objectUrl;\n }\n } else {\n media.src = objectUrl;\n }\n }\n media.addEventListener('emptied', this._onMediaEmptied);\n }\n }\n assignMediaSource(ms) {\n var _this$transferData2, _ms$constructor;\n this.log(`${((_this$transferData2 = this.transferData) == null ? void 0 : _this$transferData2.mediaSource) === ms ? 'transferred' : 'created'} media source: ${(_ms$constructor = ms.constructor) == null ? void 0 : _ms$constructor.name}`);\n // MediaSource listeners are arrow functions with a lexical scope, and do not need to be bound\n ms.addEventListener('sourceopen', this._onMediaSourceOpen);\n ms.addEventListener('sourceended', this._onMediaSourceEnded);\n ms.addEventListener('sourceclose', this._onMediaSourceClose);\n if (this.appendSource) {\n ms.addEventListener('startstreaming', this._onStartStreaming);\n ms.addEventListener('endstreaming', this._onEndStreaming);\n }\n }\n attachTransferred() {\n const media = this.media;\n const data = this.transferData;\n if (!data || !media) {\n return;\n }\n const requiredTracks = this.tracks;\n const transferredTracks = data.tracks;\n const trackNames = transferredTracks ? Object.keys(transferredTracks) : null;\n const trackCount = trackNames ? trackNames.length : 0;\n const mediaSourceOpenCallback = () => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n Promise.resolve().then(() => {\n if (this.media && this.mediaSourceOpenOrEnded) {\n this._onMediaSourceOpen();\n }\n });\n };\n if (transferredTracks && trackNames && trackCount) {\n if (!this.tracksReady) {\n // Wait for CODECS event(s)\n this.hls.config.startFragPrefetch = true;\n this.log(`attachTransferred: waiting for SourceBuffer track info`);\n return;\n }\n this.log(`attachTransferred: (bufferCodecEventsTotal ${this.bufferCodecEventsTotal})\nrequired tracks: ${stringify(requiredTracks, (key, value) => key === 'initSegment' ? undefined : value)};\ntransfer tracks: ${stringify(transferredTracks, (key, value) => key === 'initSegment' ? undefined : value)}}`);\n if (!isCompatibleTrackChange(transferredTracks, requiredTracks)) {\n // destroy attaching media source\n data.mediaSource = null;\n data.tracks = undefined;\n const currentTime = media.currentTime;\n const details = this.details;\n const startTime = Math.max(currentTime, (details == null ? void 0 : details.fragments[0].start) || 0);\n if (startTime - currentTime > 1) {\n this.log(`attachTransferred: waiting for playback to reach new tracks start time ${currentTime} -> ${startTime}`);\n return;\n }\n this.warn(`attachTransferred: resetting MediaSource for incompatible tracks (\"${Object.keys(transferredTracks)}\"->\"${Object.keys(requiredTracks)}\") start time: ${startTime} currentTime: ${currentTime}`);\n this.onMediaDetaching(Events.MEDIA_DETACHING, {});\n this.onMediaAttaching(Events.MEDIA_ATTACHING, data);\n media.currentTime = startTime;\n return;\n }\n this.transferData = undefined;\n trackNames.forEach(trackName => {\n const type = trackName;\n const track = transferredTracks[type];\n if (track) {\n const sb = track.buffer;\n if (sb) {\n // Purge fragment tracker of ejected segments for existing buffer\n const fragmentTracker = this.fragmentTracker;\n const playlistType = track.id;\n if (fragmentTracker.hasFragments(playlistType) || fragmentTracker.hasParts(playlistType)) {\n const bufferedTimeRanges = BufferHelper.getBuffered(sb);\n fragmentTracker.detectEvictedFragments(type, bufferedTimeRanges, playlistType, null, true);\n }\n // Transfer SourceBuffer\n const sbIndex = sourceBufferNameToIndex(type);\n const sbTuple = [type, sb];\n this.sourceBuffers[sbIndex] = sbTuple;\n if (sb.updating && this.operationQueue) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.operationQueue.prependBlocker(type);\n }\n this.trackSourceBuffer(type, track);\n }\n }\n });\n mediaSourceOpenCallback();\n this.bufferCreated();\n } else {\n this.log(`attachTransferred: MediaSource w/o SourceBuffers`);\n mediaSourceOpenCallback();\n }\n }\n get mediaSourceOpenOrEnded() {\n var _this$mediaSource2;\n const readyState = (_this$mediaSource2 = this.mediaSource) == null ? void 0 : _this$mediaSource2.readyState;\n return readyState === 'open' || readyState === 'ended';\n }\n onMediaDetaching(event, data) {\n const transferringMedia = !!data.transferMedia;\n this.transferData = this.overrides = undefined;\n const {\n media,\n mediaSource,\n _objectUrl\n } = this;\n if (mediaSource) {\n this.log(`media source ${transferringMedia ? 'transferring' : 'detaching'}`);\n if (transferringMedia) {\n // Detach SourceBuffers without removing from MediaSource\n // and leave `tracks` (required SourceBuffers configuration)\n this.sourceBuffers.forEach(([type]) => {\n if (type) {\n this.removeBuffer(type);\n }\n });\n this.resetQueue();\n } else {\n if (this.mediaSourceOpenOrEnded) {\n const open = mediaSource.readyState === 'open';\n try {\n const sourceBuffers = mediaSource.sourceBuffers;\n for (let i = sourceBuffers.length; i--;) {\n if (open) {\n sourceBuffers[i].abort();\n }\n mediaSource.removeSourceBuffer(sourceBuffers[i]);\n }\n if (open) {\n // endOfStream could trigger exception if any sourcebuffer is in updating state\n // we don't really care about checking sourcebuffer state here,\n // as we are anyway detaching the MediaSource\n // let's just avoid this exception to propagate\n mediaSource.endOfStream();\n }\n } catch (err) {\n this.warn(`onMediaDetaching: ${err.message} while calling endOfStream`);\n }\n }\n // Clean up the SourceBuffers by invoking onBufferReset\n if (this.sourceBufferCount) {\n this.onBufferReset();\n }\n }\n mediaSource.removeEventListener('sourceopen', this._onMediaSourceOpen);\n mediaSource.removeEventListener('sourceended', this._onMediaSourceEnded);\n mediaSource.removeEventListener('sourceclose', this._onMediaSourceClose);\n if (this.appendSource) {\n mediaSource.removeEventListener('startstreaming', this._onStartStreaming);\n mediaSource.removeEventListener('endstreaming', this._onEndStreaming);\n }\n this.mediaSource = null;\n this._objectUrl = null;\n }\n\n // Detach properly the MediaSource from the HTMLMediaElement as\n // suggested in https://github.com/w3c/media-source/issues/53.\n if (media) {\n media.removeEventListener('emptied', this._onMediaEmptied);\n if (!transferringMedia) {\n if (_objectUrl) {\n self.URL.revokeObjectURL(_objectUrl);\n }\n\n // clean up video tag src only if it's our own url. some external libraries might\n // hijack the video tag and change its 'src' without destroying the Hls instance first\n if (this.mediaSrc === _objectUrl) {\n media.removeAttribute('src');\n if (this.appendSource) {\n removeSourceChildren(media);\n }\n media.load();\n } else {\n this.warn('media|source.src was changed by a third party - skip cleanup');\n }\n }\n this.media = null;\n }\n this.hls.trigger(Events.MEDIA_DETACHED, data);\n }\n onBufferReset() {\n this.sourceBuffers.forEach(([type]) => {\n if (type) {\n this.resetBuffer(type);\n }\n });\n this.initTracks();\n }\n resetBuffer(type) {\n var _this$tracks$type;\n const sb = (_this$tracks$type = this.tracks[type]) == null ? void 0 : _this$tracks$type.buffer;\n this.removeBuffer(type);\n if (sb) {\n try {\n var _this$mediaSource3;\n if ((_this$mediaSource3 = this.mediaSource) != null && _this$mediaSource3.sourceBuffers.length) {\n this.mediaSource.removeSourceBuffer(sb);\n }\n } catch (err) {\n this.warn(`onBufferReset ${type}`, err);\n }\n }\n delete this.tracks[type];\n }\n removeBuffer(type) {\n this.removeBufferListeners(type);\n this.sourceBuffers[sourceBufferNameToIndex(type)] = [null, null];\n const track = this.tracks[type];\n if (track) {\n track.buffer = undefined;\n }\n }\n resetQueue() {\n if (this.operationQueue) {\n this.operationQueue.destroy();\n }\n this.operationQueue = new BufferOperationQueue(this.tracks);\n }\n onBufferCodecs(event, data) {\n var _data$audio;\n const tracks = this.tracks;\n const trackNames = Object.keys(data);\n this.log(`BUFFER_CODECS: \"${trackNames}\" (current SB count ${this.sourceBufferCount})`);\n const unmuxedToMuxed = 'audiovideo' in data && (tracks.audio || tracks.video) || tracks.audiovideo && ('audio' in data || 'video' in data);\n const muxedToUnmuxed = !unmuxedToMuxed && this.sourceBufferCount && this.media && trackNames.some(sbName => !tracks[sbName]);\n if (unmuxedToMuxed || muxedToUnmuxed) {\n this.warn(`Unsupported transition between \"${Object.keys(tracks)}\" and \"${trackNames}\" SourceBuffers`);\n // Do not add incompatible track ('audiovideo' <-> 'video'/'audio').\n // Allow following onBufferAppending handle to trigger BUFFER_APPEND_ERROR.\n // This will either be resolved by level switch or could be handled with recoverMediaError().\n return;\n }\n trackNames.forEach(trackName => {\n var _this$transferData3, _trackCodec;\n const parsedTrack = data[trackName];\n const {\n id,\n codec,\n levelCodec,\n container,\n metadata,\n supplemental\n } = parsedTrack;\n let track = tracks[trackName];\n const transferredTrack = (_this$transferData3 = this.transferData) == null || (_this$transferData3 = _this$transferData3.tracks) == null ? void 0 : _this$transferData3[trackName];\n const sbTrack = transferredTrack != null && transferredTrack.buffer ? transferredTrack : track;\n const sbCodec = (sbTrack == null ? void 0 : sbTrack.pendingCodec) || (sbTrack == null ? void 0 : sbTrack.codec);\n const trackLevelCodec = sbTrack == null ? void 0 : sbTrack.levelCodec;\n if (!track) {\n track = tracks[trackName] = {\n buffer: undefined,\n listeners: [],\n codec,\n supplemental,\n container,\n levelCodec,\n metadata,\n id\n };\n }\n // check if SourceBuffer codec needs to change\n const currentCodecFull = pickMostCompleteCodecName(sbCodec, trackLevelCodec);\n const currentCodec = currentCodecFull == null ? void 0 : currentCodecFull.replace(VIDEO_CODEC_PROFILE_REPLACE, '$1');\n let trackCodec = pickMostCompleteCodecName(codec, levelCodec);\n const nextCodec = (_trackCodec = trackCodec) == null ? void 0 : _trackCodec.replace(VIDEO_CODEC_PROFILE_REPLACE, '$1');\n if (trackCodec && currentCodecFull && currentCodec !== nextCodec) {\n if (trackName.slice(0, 5) === 'audio') {\n trackCodec = getCodecCompatibleName(trackCodec, this.appendSource);\n }\n this.log(`switching codec ${sbCodec} to ${trackCodec}`);\n if (trackCodec !== (track.pendingCodec || track.codec)) {\n track.pendingCodec = trackCodec;\n }\n track.container = container;\n this.appendChangeType(trackName, container, trackCodec);\n }\n });\n if (this.tracksReady || this.sourceBufferCount) {\n data.tracks = this.sourceBufferTracks;\n }\n\n // if sourcebuffers already created, do nothing ...\n if (this.sourceBufferCount) {\n return;\n }\n if (this.bufferCodecEventsTotal > 1 && !this.tracks.video && !data.video && ((_data$audio = data.audio) == null ? void 0 : _data$audio.id) === 'main') {\n // MVP is missing CODECS and only audio was found in main segment (#7524)\n this.log(`Main audio-only`);\n this.bufferCodecEventsTotal = 1;\n }\n if (this.mediaSourceOpenOrEnded) {\n this.checkPendingTracks();\n }\n }\n get sourceBufferTracks() {\n return Object.keys(this.tracks).reduce((baseTracks, type) => {\n const track = this.tracks[type];\n baseTracks[type] = {\n id: track.id,\n container: track.container,\n codec: track.codec,\n levelCodec: track.levelCodec\n };\n return baseTracks;\n }, {});\n }\n appendChangeType(type, container, codec) {\n const mimeType = `${container};codecs=${codec}`;\n const operation = {\n label: `change-type=${mimeType}`,\n execute: () => {\n const track = this.tracks[type];\n if (track) {\n const sb = track.buffer;\n if (sb != null && sb.changeType) {\n this.log(`changing ${type} sourceBuffer type to ${mimeType}`);\n sb.changeType(mimeType);\n track.codec = codec;\n track.container = container;\n }\n }\n this.shiftAndExecuteNext(type);\n },\n onStart: () => {},\n onComplete: () => {},\n onError: error => {\n this.warn(`Failed to change ${type} SourceBuffer type`, error);\n }\n };\n this.append(operation, type, this.isPending(this.tracks[type]));\n }\n blockAudio(partOrFrag) {\n var _this$fragmentTracker;\n const pStart = partOrFrag.start;\n const pTime = pStart + partOrFrag.duration * 0.05;\n const atGap = ((_this$fragmentTracker = this.fragmentTracker.getAppendedFrag(pStart, PlaylistLevelType.MAIN)) == null ? void 0 : _this$fragmentTracker.gap) === true;\n if (atGap) {\n return;\n }\n const op = {\n label: 'block-audio',\n execute: () => {\n var _this$fragmentTracker2;\n const videoTrack = this.tracks.video;\n if (this.lastVideoAppendEnd > pTime || videoTrack != null && videoTrack.buffer && BufferHelper.isBuffered(videoTrack.buffer, pTime) || ((_this$fragmentTracker2 = this.fragmentTracker.getAppendedFrag(pTime, PlaylistLevelType.MAIN)) == null ? void 0 : _this$fragmentTracker2.gap) === true) {\n this.blockedAudioAppend = null;\n this.shiftAndExecuteNext('audio');\n }\n },\n onStart: () => {},\n onComplete: () => {},\n onError: error => {\n this.warn('Error executing block-audio operation', error);\n }\n };\n this.blockedAudioAppend = {\n op,\n frag: partOrFrag\n };\n this.append(op, 'audio', true);\n }\n unblockAudio() {\n const {\n blockedAudioAppend,\n operationQueue\n } = this;\n if (blockedAudioAppend && operationQueue) {\n this.blockedAudioAppend = null;\n operationQueue.unblockAudio(blockedAudioAppend.op);\n }\n }\n onBufferAppending(event, eventData) {\n const {\n tracks\n } = this;\n const {\n data,\n type,\n parent,\n frag,\n part,\n chunkMeta,\n offset\n } = eventData;\n const chunkStats = chunkMeta.buffering[type];\n const {\n sn,\n cc\n } = frag;\n const bufferAppendingStart = self.performance.now();\n chunkStats.start = bufferAppendingStart;\n const fragBuffering = frag.stats.buffering;\n const partBuffering = part ? part.stats.buffering : null;\n if (fragBuffering.start === 0) {\n fragBuffering.start = bufferAppendingStart;\n }\n if (partBuffering && partBuffering.start === 0) {\n partBuffering.start = bufferAppendingStart;\n }\n\n // TODO: Only update timestampOffset when audio/mpeg fragment or part is not contiguous with previously appended\n // Adjusting `SourceBuffer.timestampOffset` (desired point in the timeline where the next frames should be appended)\n // in Chrome browser when we detect MPEG audio container and time delta between level PTS and `SourceBuffer.timestampOffset`\n // is greater than 100ms (this is enough to handle seek for VOD or level change for LIVE videos).\n // More info here: https://github.com/video-dev/hls.js/issues/332#issuecomment-257986486\n const audioTrack = tracks.audio;\n let checkTimestampOffset = false;\n if (type === 'audio' && (audioTrack == null ? void 0 : audioTrack.container) === 'audio/mpeg') {\n checkTimestampOffset = !this.lastMpegAudioChunk || chunkMeta.id === 1 || this.lastMpegAudioChunk.sn !== chunkMeta.sn;\n this.lastMpegAudioChunk = chunkMeta;\n }\n\n // Block audio append until overlapping video append\n const videoTrack = tracks.video;\n const videoSb = videoTrack == null ? void 0 : videoTrack.buffer;\n if (videoSb && sn !== 'initSegment') {\n const partOrFrag = part || frag;\n const blockedAudioAppend = this.blockedAudioAppend;\n if (type === 'audio' && parent !== 'main' && !this.blockedAudioAppend && !(videoTrack.ending || videoTrack.ended)) {\n const pStart = partOrFrag.start;\n const pTime = pStart + partOrFrag.duration * 0.05;\n const vbuffered = videoSb.buffered;\n const vappending = this.currentOp('video');\n if (!vbuffered.length && !vappending) {\n // wait for video before appending audio\n this.blockAudio(partOrFrag);\n } else if (!vappending && !BufferHelper.isBuffered(videoSb, pTime) && this.lastVideoAppendEnd < pTime) {\n // audio is ahead of video\n this.blockAudio(partOrFrag);\n }\n } else if (type === 'video') {\n const videoAppendEnd = partOrFrag.end;\n if (blockedAudioAppend) {\n const audioStart = blockedAudioAppend.frag.start;\n if (videoAppendEnd > audioStart || videoAppendEnd < this.lastVideoAppendEnd || BufferHelper.isBuffered(videoSb, audioStart)) {\n this.unblockAudio();\n }\n }\n this.lastVideoAppendEnd = videoAppendEnd;\n }\n }\n const fragStart = (part || frag).start;\n const operation = {\n label: `append-${type}`,\n execute: () => {\n var _this$tracks$type2;\n chunkStats.executeStart = self.performance.now();\n const sb = (_this$tracks$type2 = this.tracks[type]) == null ? void 0 : _this$tracks$type2.buffer;\n if (sb) {\n if (checkTimestampOffset) {\n this.updateTimestampOffset(sb, fragStart, 0.1, type, sn, cc);\n } else if (offset !== undefined && isFiniteNumber(offset)) {\n this.updateTimestampOffset(sb, offset, 0.000001, type, sn, cc);\n }\n }\n this.appendExecutor(data, type);\n },\n onStart: () => {\n // logger.debug(`[buffer-controller]: ${type} SourceBuffer updatestart`);\n },\n onComplete: () => {\n // logger.debug(`[buffer-controller]: ${type} SourceBuffer updateend`);\n const end = self.performance.now();\n chunkStats.executeEnd = chunkStats.end = end;\n if (fragBuffering.first === 0) {\n fragBuffering.first = end;\n }\n if (partBuffering && partBuffering.first === 0) {\n partBuffering.first = end;\n }\n const timeRanges = {};\n this.sourceBuffers.forEach(([type, sb]) => {\n if (type) {\n timeRanges[type] = BufferHelper.getBuffered(sb);\n }\n });\n this.appendErrors[type] = 0;\n if (type === 'audio' || type === 'video') {\n this.appendErrors.audiovideo = 0;\n } else {\n this.appendErrors.audio = 0;\n this.appendErrors.video = 0;\n }\n this.hls.trigger(Events.BUFFER_APPENDED, {\n type,\n frag,\n part,\n chunkMeta,\n parent: frag.type,\n timeRanges\n });\n },\n onError: error => {\n var _this$media;\n // in case any error occured while appending, put back segment in segments table\n const event = {\n type: ErrorTypes.MEDIA_ERROR,\n parent: frag.type,\n details: ErrorDetails.BUFFER_APPEND_ERROR,\n sourceBufferName: type,\n frag,\n part,\n chunkMeta,\n error,\n err: error,\n fatal: false\n };\n const mediaError = (_this$media = this.media) == null ? void 0 : _this$media.error;\n if (error.code === DOMException.QUOTA_EXCEEDED_ERR || error.name == 'QuotaExceededError' || `quota` in error) {\n // QuotaExceededError: http://www.w3.org/TR/html5/infrastructure.html#quotaexceedederror\n // let's stop appending any segments, and report BUFFER_FULL_ERROR error\n event.details = ErrorDetails.BUFFER_FULL_ERROR;\n } else if (error.code === DOMException.INVALID_STATE_ERR && this.mediaSourceOpenOrEnded && !mediaError) {\n // Allow retry for \"Failed to execute 'appendBuffer' on 'SourceBuffer': This SourceBuffer is still processing\" errors\n event.errorAction = createDoNothingErrorAction(true);\n } else if (error.name === TRACK_REMOVED_ERROR_NAME && this.sourceBufferCount === 0) {\n // Do nothing if sourceBuffers were removed (media is detached and append was not aborted)\n event.errorAction = createDoNothingErrorAction(true);\n } else {\n const appendErrorCount = ++this.appendErrors[type];\n /* with UHD content, we could get loop of quota exceeded error until\n browser is able to evict some data from sourcebuffer. Retrying can help recover.\n */\n this.warn(`Failed ${appendErrorCount}/${this.hls.config.appendErrorMaxRetry} times to append segment in \"${type}\" sourceBuffer (${mediaError ? mediaError : 'no media error'})`);\n if (appendErrorCount >= this.hls.config.appendErrorMaxRetry || !!mediaError) {\n event.fatal = true;\n }\n }\n this.hls.trigger(Events.ERROR, event);\n }\n };\n this.log(`queuing \"${type}\" append sn: ${sn}${part ? ' p: ' + part.index : ''} of ${frag.type === PlaylistLevelType.MAIN ? 'level' : 'track'} ${frag.level} cc: ${cc}`);\n this.append(operation, type, this.isPending(this.tracks[type]));\n }\n getFlushOp(type, start, end) {\n this.log(`queuing \"${type}\" remove ${start}-${end}`);\n return {\n label: 'remove',\n execute: () => {\n this.removeExecutor(type, start, end);\n },\n onStart: () => {\n // logger.debug(`[buffer-controller]: Started flushing ${data.startOffset} -> ${data.endOffset} for ${type} Source Buffer`);\n },\n onComplete: () => {\n // logger.debug(`[buffer-controller]: Finished flushing ${data.startOffset} -> ${data.endOffset} for ${type} Source Buffer`);\n this.hls.trigger(Events.BUFFER_FLUSHED, {\n type\n });\n },\n onError: error => {\n this.warn(`Failed to remove ${start}-${end} from \"${type}\" SourceBuffer`, error);\n }\n };\n }\n onBufferFlushing(event, data) {\n const {\n type,\n startOffset,\n endOffset\n } = data;\n if (type) {\n this.append(this.getFlushOp(type, startOffset, endOffset), type);\n } else {\n this.sourceBuffers.forEach(([type]) => {\n if (type) {\n this.append(this.getFlushOp(type, startOffset, endOffset), type);\n }\n });\n }\n }\n onFragParsed(event, data) {\n const {\n frag,\n part\n } = data;\n const buffersAppendedTo = [];\n const elementaryStreams = part ? part.elementaryStreams : frag.elementaryStreams;\n if (elementaryStreams[ElementaryStreamTypes.AUDIOVIDEO]) {\n buffersAppendedTo.push('audiovideo');\n } else {\n if (elementaryStreams[ElementaryStreamTypes.AUDIO]) {\n buffersAppendedTo.push('audio');\n }\n if (elementaryStreams[ElementaryStreamTypes.VIDEO]) {\n buffersAppendedTo.push('video');\n }\n }\n const onUnblocked = () => {\n const now = self.performance.now();\n frag.stats.buffering.end = now;\n if (part) {\n part.stats.buffering.end = now;\n }\n const stats = part ? part.stats : frag.stats;\n this.hls.trigger(Events.FRAG_BUFFERED, {\n frag,\n part,\n stats,\n id: frag.type\n });\n };\n if (buffersAppendedTo.length === 0) {\n this.warn(`Fragments must have at least one ElementaryStreamType set. type: ${frag.type} level: ${frag.level} sn: ${frag.sn}`);\n }\n this.blockBuffers(onUnblocked, buffersAppendedTo).catch(error => {\n this.warn(`Fragment buffered callback ${error}`);\n this.stepOperationQueue(this.sourceBufferTypes);\n });\n }\n onFragChanged(event, data) {\n this.trimBuffers();\n }\n get bufferedToEnd() {\n return this.sourceBufferCount > 0 && !this.sourceBuffers.some(([type]) => {\n if (type) {\n const track = this.tracks[type];\n if (track) {\n return !track.ended || track.ending;\n }\n }\n return false;\n });\n }\n\n // on BUFFER_EOS mark matching sourcebuffer(s) as \"ending\" and \"ended\" and queue endOfStream after remaining operations(s)\n // an undefined data.type will mark all buffers as EOS.\n onBufferEos(event, data) {\n var _this$overrides;\n this.sourceBuffers.forEach(([type]) => {\n if (type) {\n const track = this.tracks[type];\n if (!data.type || data.type === type) {\n track.ending = true;\n if (!track.ended) {\n track.ended = true;\n this.log(`${type} buffer reached EOS`);\n }\n }\n }\n });\n const allowEndOfStream = ((_this$overrides = this.overrides) == null ? void 0 : _this$overrides.endOfStream) !== false;\n const allTracksEnding = this.sourceBufferCount > 0 && !this.sourceBuffers.some(([type]) => {\n var _this$tracks$type3;\n return type && !((_this$tracks$type3 = this.tracks[type]) != null && _this$tracks$type3.ended);\n });\n if (allTracksEnding) {\n if (allowEndOfStream) {\n this.log(`Queueing EOS`);\n this.blockUntilOpen(() => {\n this.tracksEnded();\n const {\n mediaSource\n } = this;\n if (!mediaSource || mediaSource.readyState !== 'open') {\n if (mediaSource) {\n this.log(`Could not call mediaSource.endOfStream(). mediaSource.readyState: ${mediaSource.readyState}`);\n }\n return;\n }\n this.log(`Calling mediaSource.endOfStream()`);\n // Allow this to throw and be caught by the enqueueing function\n mediaSource.endOfStream();\n this.hls.trigger(Events.BUFFERED_TO_END, undefined);\n });\n } else {\n this.tracksEnded();\n this.hls.trigger(Events.BUFFERED_TO_END, undefined);\n }\n } else if (data.type === 'video') {\n // Make sure pending audio appends are unblocked when video reaches end\n this.unblockAudio();\n }\n }\n tracksEnded() {\n this.sourceBuffers.forEach(([type]) => {\n if (type !== null) {\n const track = this.tracks[type];\n if (track) {\n track.ending = false;\n }\n }\n });\n }\n onLevelUpdated(event, {\n details\n }) {\n if (!details.fragments.length) {\n return;\n }\n this.details = details;\n this.updateDuration();\n }\n updateDuration() {\n this.blockUntilOpen(() => {\n const durationAndRange = this.getDurationAndRange();\n if (!durationAndRange) {\n return;\n }\n this.updateMediaSource(durationAndRange);\n });\n }\n onError(event, data) {\n if (data.details === ErrorDetails.BUFFER_APPEND_ERROR && data.frag) {\n var _data$errorAction;\n const nextAutoLevel = (_data$errorAction = data.errorAction) == null ? void 0 : _data$errorAction.nextAutoLevel;\n if (isFiniteNumber(nextAutoLevel) && nextAutoLevel !== data.frag.level) {\n this.resetAppendErrors();\n }\n }\n }\n resetAppendErrors() {\n this.appendErrors = {\n audio: 0,\n video: 0,\n audiovideo: 0\n };\n }\n trimBuffers() {\n const {\n hls,\n details,\n media\n } = this;\n if (!media || details === null) {\n return;\n }\n if (!this.sourceBufferCount) {\n return;\n }\n const config = hls.config;\n const currentTime = media.currentTime;\n const targetDuration = details.levelTargetDuration;\n\n // Support for deprecated liveBackBufferLength\n const backBufferLength = details.live && config.liveBackBufferLength !== null ? config.liveBackBufferLength : config.backBufferLength;\n if (isFiniteNumber(backBufferLength) && backBufferLength >= 0) {\n const maxBackBufferLength = Math.max(backBufferLength, targetDuration);\n const targetBackBufferPosition = Math.floor(currentTime / targetDuration) * targetDuration - maxBackBufferLength;\n this.flushBackBuffer(currentTime, targetDuration, targetBackBufferPosition);\n }\n const frontBufferFlushThreshold = config.frontBufferFlushThreshold;\n if (isFiniteNumber(frontBufferFlushThreshold) && frontBufferFlushThreshold > 0) {\n const frontBufferLength = Math.max(config.maxBufferLength, frontBufferFlushThreshold);\n const maxFrontBufferLength = Math.max(frontBufferLength, targetDuration);\n const targetFrontBufferPosition = Math.floor(currentTime / targetDuration) * targetDuration + maxFrontBufferLength;\n this.flushFrontBuffer(currentTime, targetDuration, targetFrontBufferPosition);\n }\n }\n flushBackBuffer(currentTime, targetDuration, targetBackBufferPosition) {\n this.sourceBuffers.forEach(([type, sb]) => {\n if (sb) {\n const buffered = BufferHelper.getBuffered(sb);\n // when target buffer start exceeds actual buffer start\n if (buffered.length > 0 && targetBackBufferPosition > buffered.start(0)) {\n var _this$details;\n this.hls.trigger(Events.BACK_BUFFER_REACHED, {\n bufferEnd: targetBackBufferPosition\n });\n\n // Support for deprecated event:\n const track = this.tracks[type];\n if ((_this$details = this.details) != null && _this$details.live) {\n this.hls.trigger(Events.LIVE_BACK_BUFFER_REACHED, {\n bufferEnd: targetBackBufferPosition\n });\n } else if (track != null && track.ended) {\n this.log(`Cannot flush ${type} back buffer while SourceBuffer is in ended state`);\n return;\n }\n this.hls.trigger(Events.BUFFER_FLUSHING, {\n startOffset: 0,\n endOffset: targetBackBufferPosition,\n type\n });\n }\n }\n });\n }\n flushFrontBuffer(currentTime, targetDuration, targetFrontBufferPosition) {\n this.sourceBuffers.forEach(([type, sb]) => {\n if (sb) {\n const buffered = BufferHelper.getBuffered(sb);\n const numBufferedRanges = buffered.length;\n // The buffer is either empty or contiguous\n if (numBufferedRanges < 2) {\n return;\n }\n const bufferStart = buffered.start(numBufferedRanges - 1);\n const bufferEnd = buffered.end(numBufferedRanges - 1);\n // No flush if we can tolerate the current buffer length or the current buffer range we would flush is contiguous with current position\n if (targetFrontBufferPosition > bufferStart || currentTime >= bufferStart && currentTime <= bufferEnd) {\n return;\n }\n this.hls.trigger(Events.BUFFER_FLUSHING, {\n startOffset: bufferStart,\n endOffset: Infinity,\n type\n });\n }\n });\n }\n\n /**\n * Update Media Source duration to current level duration or override to Infinity if configuration parameter\n * 'liveDurationInfinity` is set to `true`\n * More details: https://github.com/video-dev/hls.js/issues/355\n */\n getDurationAndRange() {\n var _this$overrides2;\n const {\n details,\n mediaSource\n } = this;\n if (!details || !this.media || (mediaSource == null ? void 0 : mediaSource.readyState) !== 'open') {\n return null;\n }\n const playlistEnd = details.edge;\n if (details.live && this.hls.config.liveDurationInfinity) {\n const len = details.fragments.length;\n if (len && !!mediaSource.setLiveSeekableRange) {\n const start = Math.max(0, details.fragmentStart);\n const end = Math.max(start, playlistEnd);\n return {\n duration: Infinity,\n start,\n end\n };\n }\n return {\n duration: Infinity\n };\n }\n const overrideDuration = (_this$overrides2 = this.overrides) == null ? void 0 : _this$overrides2.duration;\n if (overrideDuration) {\n if (!isFiniteNumber(overrideDuration)) {\n return null;\n }\n return {\n duration: overrideDuration\n };\n }\n const mediaDuration = this.media.duration;\n const msDuration = isFiniteNumber(mediaSource.duration) ? mediaSource.duration : 0;\n if (playlistEnd > msDuration && playlistEnd > mediaDuration || !isFiniteNumber(mediaDuration)) {\n return {\n duration: playlistEnd\n };\n }\n return null;\n }\n updateMediaSource({\n duration,\n start,\n end\n }) {\n const mediaSource = this.mediaSource;\n if (!this.media || !mediaSource || mediaSource.readyState !== 'open') {\n return;\n }\n if (mediaSource.duration !== duration) {\n if (isFiniteNumber(duration)) {\n this.log(`Updating MediaSource duration to ${duration.toFixed(3)}`);\n }\n mediaSource.duration = duration;\n }\n if (start !== undefined && end !== undefined) {\n this.log(`MediaSource duration is set to ${mediaSource.duration}. Setting seekable range to ${start}-${end}.`);\n mediaSource.setLiveSeekableRange(start, end);\n }\n }\n get tracksReady() {\n const pendingTrackCount = this.pendingTrackCount;\n return pendingTrackCount > 0 && (pendingTrackCount >= this.bufferCodecEventsTotal || this.isPending(this.tracks.audiovideo));\n }\n checkPendingTracks() {\n const {\n bufferCodecEventsTotal,\n pendingTrackCount,\n tracks\n } = this;\n this.log(`checkPendingTracks (pending: ${pendingTrackCount} codec events expected: ${bufferCodecEventsTotal}) ${stringify(tracks)}`);\n // Check if we've received all of the expected bufferCodec events. When none remain, create all the sourceBuffers at once.\n // This is important because the MSE spec allows implementations to throw QuotaExceededErrors if creating new sourceBuffers after\n // data has been appended to existing ones.\n // 2 tracks is the max (one for audio, one for video). If we've reach this max go ahead and create the buffers.\n if (this.tracksReady) {\n var _this$transferData4;\n const transferredTracks = (_this$transferData4 = this.transferData) == null ? void 0 : _this$transferData4.tracks;\n if (transferredTracks && Object.keys(transferredTracks).length) {\n this.attachTransferred();\n } else {\n // ok, let's create them now !\n this.createSourceBuffers();\n }\n }\n }\n bufferCreated() {\n if (this.sourceBufferCount) {\n const tracks = {};\n this.sourceBuffers.forEach(([type, buffer]) => {\n if (type) {\n const track = this.tracks[type];\n tracks[type] = {\n buffer,\n container: track.container,\n codec: track.codec,\n supplemental: track.supplemental,\n levelCodec: track.levelCodec,\n id: track.id,\n metadata: track.metadata\n };\n }\n });\n this.hls.trigger(Events.BUFFER_CREATED, {\n tracks\n });\n this.log(`SourceBuffers created. Running queue: ${this.operationQueue}`);\n this.sourceBuffers.forEach(([type]) => {\n this.executeNext(type);\n });\n } else {\n const error = new Error('could not create source buffer for media codec(s)');\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.BUFFER_INCOMPATIBLE_CODECS_ERROR,\n fatal: true,\n error,\n reason: error.message\n });\n }\n }\n createSourceBuffers() {\n const {\n tracks,\n sourceBuffers,\n mediaSource\n } = this;\n if (!mediaSource) {\n throw new Error('createSourceBuffers called when mediaSource was null');\n }\n for (const trackName in tracks) {\n const type = trackName;\n const track = tracks[type];\n if (this.isPending(track)) {\n const codec = this.getTrackCodec(track, type);\n const mimeType = `${track.container};codecs=${codec}`;\n track.codec = codec;\n this.log(`creating sourceBuffer(${mimeType})${this.currentOp(type) ? ' Queued' : ''} ${stringify(track)}`);\n try {\n const sb = mediaSource.addSourceBuffer(mimeType);\n const sbIndex = sourceBufferNameToIndex(type);\n const sbTuple = [type, sb];\n sourceBuffers[sbIndex] = sbTuple;\n track.buffer = sb;\n } catch (error) {\n var _this$operationQueue;\n this.error(`error while trying to add sourceBuffer: ${error.message}`);\n // remove init segment from queue and delete track info\n this.shiftAndExecuteNext(type);\n (_this$operationQueue = this.operationQueue) == null || _this$operationQueue.removeBlockers();\n delete this.tracks[type];\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.BUFFER_ADD_CODEC_ERROR,\n fatal: false,\n error,\n sourceBufferName: type,\n mimeType: mimeType,\n parent: track.id\n });\n return;\n }\n this.trackSourceBuffer(type, track);\n }\n }\n this.bufferCreated();\n }\n getTrackCodec(track, trackName) {\n // Use supplemental video codec when supported when adding SourceBuffer (#5558)\n const supplementalCodec = track.supplemental;\n let trackCodec = track.codec;\n if (supplementalCodec && (trackName === 'video' || trackName === 'audiovideo') && areCodecsMediaSourceSupported(supplementalCodec, 'video')) {\n trackCodec = replaceVideoCodec(trackCodec, supplementalCodec);\n }\n const codec = pickMostCompleteCodecName(trackCodec, track.levelCodec);\n if (codec) {\n if (trackName.slice(0, 5) === 'audio') {\n return getCodecCompatibleName(codec, this.appendSource);\n }\n return codec;\n }\n return '';\n }\n trackSourceBuffer(type, track) {\n const buffer = track.buffer;\n if (!buffer) {\n return;\n }\n const codec = this.getTrackCodec(track, type);\n this.tracks[type] = {\n buffer,\n codec,\n container: track.container,\n levelCodec: track.levelCodec,\n supplemental: track.supplemental,\n metadata: track.metadata,\n id: track.id,\n listeners: []\n };\n this.removeBufferListeners(type);\n this.addBufferListener(type, 'updatestart', this.onSBUpdateStart);\n this.addBufferListener(type, 'updateend', this.onSBUpdateEnd);\n this.addBufferListener(type, 'error', this.onSBUpdateError);\n // ManagedSourceBuffer bufferedchange event\n if (this.appendSource) {\n this.addBufferListener(type, 'bufferedchange', (type, event) => {\n // If media was ejected check for a change. Added ranges are redundant with changes on 'updateend' event.\n const removedRanges = event.removedRanges;\n if (removedRanges != null && removedRanges.length) {\n this.hls.trigger(Events.BUFFER_FLUSHED, {\n type: type\n });\n }\n });\n }\n }\n get mediaSrc() {\n var _this$media2, _this$media2$querySel;\n const media = ((_this$media2 = this.media) == null || (_this$media2$querySel = _this$media2.querySelector) == null ? void 0 : _this$media2$querySel.call(_this$media2, 'source')) || this.media;\n return media == null ? void 0 : media.src;\n }\n onSBUpdateStart(type) {\n const operation = this.currentOp(type);\n if (!operation) {\n return;\n }\n operation.onStart();\n }\n onSBUpdateEnd(type) {\n var _this$mediaSource4;\n if (((_this$mediaSource4 = this.mediaSource) == null ? void 0 : _this$mediaSource4.readyState) === 'closed') {\n this.resetBuffer(type);\n return;\n }\n const operation = this.currentOp(type);\n if (!operation) {\n return;\n }\n operation.onComplete();\n this.shiftAndExecuteNext(type);\n }\n onSBUpdateError(type, event) {\n var _this$mediaSource5;\n const error = new Error(`${type} SourceBuffer error. MediaSource readyState: ${(_this$mediaSource5 = this.mediaSource) == null ? void 0 : _this$mediaSource5.readyState}`);\n this.error(`${error}`, event);\n // according to http://www.w3.org/TR/media-source/#sourcebuffer-append-error\n // SourceBuffer errors are not necessarily fatal; if so, the HTMLMediaElement will fire an error event\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.BUFFER_APPENDING_ERROR,\n sourceBufferName: type,\n error,\n fatal: false\n });\n // updateend is always fired after error, so we'll allow that to shift the current operation off of the queue\n const operation = this.currentOp(type);\n if (operation) {\n operation.onError(error);\n }\n }\n updateTimestampOffset(sb, timestampOffset, tolerance, type, sn, cc) {\n const delta = timestampOffset - sb.timestampOffset;\n if (Math.abs(delta) >= tolerance) {\n this.log(`Updating ${type} SourceBuffer timestampOffset to ${timestampOffset} (sn: ${sn} cc: ${cc})`);\n sb.timestampOffset = timestampOffset;\n }\n }\n\n // This method must result in an updateend event; if remove is not called, onSBUpdateEnd must be called manually\n removeExecutor(type, startOffset, endOffset) {\n const {\n media,\n mediaSource\n } = this;\n const track = this.tracks[type];\n const sb = track == null ? void 0 : track.buffer;\n if (!media || !mediaSource || !sb) {\n this.warn(`Attempting to remove from the ${type} SourceBuffer, but it does not exist`);\n this.shiftAndExecuteNext(type);\n return;\n }\n const mediaDuration = isFiniteNumber(media.duration) ? media.duration : Infinity;\n const msDuration = isFiniteNumber(mediaSource.duration) ? mediaSource.duration : Infinity;\n const removeStart = Math.max(0, startOffset);\n const removeEnd = Math.min(endOffset, mediaDuration, msDuration);\n if (removeEnd > removeStart && (!track.ending || track.ended)) {\n track.ended = false;\n this.log(`Removing [${removeStart},${removeEnd}] from the ${type} SourceBuffer`);\n sb.remove(removeStart, removeEnd);\n } else {\n // Cycle the queue\n this.shiftAndExecuteNext(type);\n }\n }\n\n // This method must result in an updateend event; if append is not called, onSBUpdateEnd must be called manually\n appendExecutor(data, type) {\n const track = this.tracks[type];\n const sb = track == null ? void 0 : track.buffer;\n if (!sb) {\n throw new HlsJsTrackRemovedError(`Attempting to append to the ${type} SourceBuffer, but it does not exist`);\n }\n track.ending = false;\n track.ended = false;\n sb.appendBuffer(data);\n }\n blockUntilOpen(callback) {\n if (this.isUpdating() || this.isQueued()) {\n this.blockBuffers(callback).catch(error => {\n this.warn(`SourceBuffer blocked callback ${error}`);\n this.stepOperationQueue(this.sourceBufferTypes);\n });\n } else {\n try {\n callback();\n } catch (error) {\n this.warn(`Callback run without blocking ${this.operationQueue} ${error}`);\n }\n }\n }\n isUpdating() {\n return this.sourceBuffers.some(([type, sb]) => type && sb.updating);\n }\n isQueued() {\n return this.sourceBuffers.some(([type]) => type && !!this.currentOp(type));\n }\n isPending(track) {\n return !!track && !track.buffer;\n }\n\n // Enqueues an operation to each SourceBuffer queue which, upon execution, resolves a promise. When all promises\n // resolve, the onUnblocked function is executed. Functions calling this method do not need to unblock the queue\n // upon completion, since we already do it here\n blockBuffers(onUnblocked, bufferNames = this.sourceBufferTypes) {\n if (!bufferNames.length) {\n this.log('Blocking operation requested, but no SourceBuffers exist');\n return Promise.resolve().then(onUnblocked);\n }\n const {\n operationQueue\n } = this;\n\n // logger.debug(`[buffer-controller]: Blocking ${buffers} SourceBuffer`);\n const blockingOperations = bufferNames.map(type => this.appendBlocker(type));\n const audioBlocked = bufferNames.length > 1 && !!this.blockedAudioAppend;\n if (audioBlocked) {\n this.unblockAudio();\n }\n return Promise.all(blockingOperations).then(result => {\n if (operationQueue !== this.operationQueue) {\n return;\n }\n // logger.debug(`[buffer-controller]: Blocking operation resolved; unblocking ${buffers} SourceBuffer`);\n onUnblocked();\n this.stepOperationQueue(this.sourceBufferTypes);\n });\n }\n stepOperationQueue(bufferNames) {\n bufferNames.forEach(type => {\n var _this$tracks$type4;\n const sb = (_this$tracks$type4 = this.tracks[type]) == null ? void 0 : _this$tracks$type4.buffer;\n // Only cycle the queue if the SB is not updating. There's a bug in Chrome which sets the SB updating flag to\n // true when changing the MediaSource duration (https://bugs.chromium.org/p/chromium/issues/detail?id=959359&can=2&q=mediasource%20duration)\n // While this is a workaround, it's probably useful to have around\n if (!sb || sb.updating) {\n return;\n }\n this.shiftAndExecuteNext(type);\n });\n }\n append(operation, type, pending) {\n if (this.operationQueue) {\n this.operationQueue.append(operation, type, pending);\n }\n }\n appendBlocker(type) {\n if (this.operationQueue) {\n return this.operationQueue.appendBlocker(type);\n }\n }\n currentOp(type) {\n if (this.operationQueue) {\n return this.operationQueue.current(type);\n }\n return null;\n }\n executeNext(type) {\n if (type && this.operationQueue) {\n this.operationQueue.executeNext(type);\n }\n }\n shiftAndExecuteNext(type) {\n if (this.operationQueue) {\n this.operationQueue.shiftAndExecuteNext(type);\n }\n }\n get pendingTrackCount() {\n return Object.keys(this.tracks).reduce((acc, type) => acc + (this.isPending(this.tracks[type]) ? 1 : 0), 0);\n }\n get sourceBufferCount() {\n return this.sourceBuffers.reduce((acc, [type]) => acc + (type ? 1 : 0), 0);\n }\n get sourceBufferTypes() {\n return this.sourceBuffers.map(([type]) => type).filter(type => !!type);\n }\n addBufferListener(type, event, fn) {\n const track = this.tracks[type];\n if (!track) {\n return;\n }\n const buffer = track.buffer;\n if (!buffer) {\n return;\n }\n const listener = fn.bind(this, type);\n track.listeners.push({\n event,\n listener\n });\n buffer.addEventListener(event, listener);\n }\n removeBufferListeners(type) {\n const track = this.tracks[type];\n if (!track) {\n return;\n }\n const buffer = track.buffer;\n if (!buffer) {\n return;\n }\n track.listeners.forEach(l => {\n buffer.removeEventListener(l.event, l.listener);\n });\n track.listeners.length = 0;\n }\n}\nfunction removeSourceChildren(node) {\n const sourceChildren = node.querySelectorAll('source');\n [].slice.call(sourceChildren).forEach(source => {\n node.removeChild(source);\n });\n}\nfunction addSource(media, url) {\n const source = self.document.createElement('source');\n source.type = 'video/mp4';\n source.src = url;\n media.appendChild(source);\n}\nfunction sourceBufferNameToIndex(type) {\n return type === 'audio' ? 1 : 0;\n}\n\nclass CapLevelController {\n constructor(hls) {\n this.hls = void 0;\n this.autoLevelCapping = void 0;\n this.firstLevel = void 0;\n this.media = void 0;\n this.restrictedLevels = void 0;\n this.timer = void 0;\n this.clientRect = void 0;\n this.streamController = void 0;\n this.hls = hls;\n this.autoLevelCapping = Number.POSITIVE_INFINITY;\n this.firstLevel = -1;\n this.media = null;\n this.restrictedLevels = [];\n this.timer = undefined;\n this.clientRect = null;\n this.registerListeners();\n }\n setStreamController(streamController) {\n this.streamController = streamController;\n }\n destroy() {\n if (this.hls) {\n this.unregisterListener();\n }\n if (this.timer) {\n this.stopCapping();\n }\n this.media = null;\n this.clientRect = null;\n // @ts-ignore\n this.hls = this.streamController = null;\n }\n registerListeners() {\n const {\n hls\n } = this;\n hls.on(Events.FPS_DROP_LEVEL_CAPPING, this.onFpsDropLevelCapping, this);\n hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.on(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n hls.on(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n }\n unregisterListener() {\n const {\n hls\n } = this;\n hls.off(Events.FPS_DROP_LEVEL_CAPPING, this.onFpsDropLevelCapping, this);\n hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.off(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n hls.off(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n }\n onFpsDropLevelCapping(event, data) {\n // Don't add a restricted level more than once\n const level = this.hls.levels[data.droppedLevel];\n if (this.isLevelAllowed(level)) {\n this.restrictedLevels.push({\n bitrate: level.bitrate,\n height: level.height,\n width: level.width\n });\n }\n }\n onMediaAttaching(event, data) {\n this.media = data.media instanceof HTMLVideoElement ? data.media : null;\n this.clientRect = null;\n if (this.timer && this.hls.levels.length) {\n this.detectPlayerSize();\n }\n }\n onManifestParsed(event, data) {\n const hls = this.hls;\n this.restrictedLevels = [];\n this.firstLevel = data.firstLevel;\n if (hls.config.capLevelToPlayerSize && data.video) {\n // Start capping immediately if the manifest has signaled video codecs\n this.startCapping();\n }\n }\n onLevelsUpdated(event, data) {\n if (this.timer && isFiniteNumber(this.autoLevelCapping)) {\n this.detectPlayerSize();\n }\n }\n\n // Only activate capping when playing a video stream; otherwise, multi-bitrate audio-only streams will be restricted\n // to the first level\n onBufferCodecs(event, data) {\n const hls = this.hls;\n if (hls.config.capLevelToPlayerSize && data.video) {\n // If the manifest did not signal a video codec capping has been deferred until we're certain video is present\n this.startCapping();\n }\n }\n onMediaDetaching() {\n this.stopCapping();\n this.media = null;\n }\n detectPlayerSize() {\n if (this.media) {\n if (this.mediaHeight <= 0 || this.mediaWidth <= 0) {\n this.clientRect = null;\n return;\n }\n const levels = this.hls.levels;\n if (levels.length) {\n const hls = this.hls;\n const maxLevel = this.getMaxLevel(levels.length - 1);\n if (maxLevel !== this.autoLevelCapping) {\n hls.logger.log(`Setting autoLevelCapping to ${maxLevel}: ${levels[maxLevel].height}p@${levels[maxLevel].bitrate} for media ${this.mediaWidth}x${this.mediaHeight}`);\n }\n hls.autoLevelCapping = maxLevel;\n if (hls.autoLevelEnabled && hls.autoLevelCapping > this.autoLevelCapping && this.streamController) {\n // if auto level capping has a higher value for the previous one, flush the buffer using nextLevelSwitch\n // usually happen when the user go to the fullscreen mode.\n this.streamController.nextLevelSwitch();\n }\n this.autoLevelCapping = hls.autoLevelCapping;\n }\n }\n }\n\n /*\n * returns level should be the one with the dimensions equal or greater than the media (player) dimensions (so the video will be downscaled)\n */\n getMaxLevel(capLevelIndex) {\n const levels = this.hls.levels;\n if (!levels.length) {\n return -1;\n }\n const validLevels = levels.filter((level, index) => this.isLevelAllowed(level) && index <= capLevelIndex);\n this.clientRect = null;\n return CapLevelController.getMaxLevelByMediaSize(validLevels, this.mediaWidth, this.mediaHeight);\n }\n startCapping() {\n if (this.timer) {\n // Don't reset capping if started twice; this can happen if the manifest signals a video codec\n return;\n }\n this.autoLevelCapping = Number.POSITIVE_INFINITY;\n self.clearInterval(this.timer);\n this.timer = self.setInterval(this.detectPlayerSize.bind(this), 1000);\n this.detectPlayerSize();\n }\n stopCapping() {\n this.restrictedLevels = [];\n this.firstLevel = -1;\n this.autoLevelCapping = Number.POSITIVE_INFINITY;\n if (this.timer) {\n self.clearInterval(this.timer);\n this.timer = undefined;\n }\n }\n getDimensions() {\n if (this.clientRect) {\n return this.clientRect;\n }\n const media = this.media;\n const boundsRect = {\n width: 0,\n height: 0\n };\n if (media) {\n const clientRect = media.getBoundingClientRect();\n boundsRect.width = clientRect.width;\n boundsRect.height = clientRect.height;\n if (!boundsRect.width && !boundsRect.height) {\n // When the media element has no width or height (equivalent to not being in the DOM),\n // then use its width and height attributes (media.width, media.height)\n boundsRect.width = clientRect.right - clientRect.left || media.width || 0;\n boundsRect.height = clientRect.bottom - clientRect.top || media.height || 0;\n }\n }\n this.clientRect = boundsRect;\n return boundsRect;\n }\n get mediaWidth() {\n return this.getDimensions().width * this.contentScaleFactor;\n }\n get mediaHeight() {\n return this.getDimensions().height * this.contentScaleFactor;\n }\n get contentScaleFactor() {\n let pixelRatio = 1;\n if (!this.hls.config.ignoreDevicePixelRatio) {\n try {\n pixelRatio = self.devicePixelRatio;\n } catch (e) {\n /* no-op */\n }\n }\n return Math.min(pixelRatio, this.hls.config.maxDevicePixelRatio);\n }\n isLevelAllowed(level) {\n const restrictedLevels = this.restrictedLevels;\n return !restrictedLevels.some(restrictedLevel => {\n return level.bitrate === restrictedLevel.bitrate && level.width === restrictedLevel.width && level.height === restrictedLevel.height;\n });\n }\n static getMaxLevelByMediaSize(levels, width, height) {\n if (!(levels != null && levels.length)) {\n return -1;\n }\n\n // Levels can have the same dimensions but differing bandwidths - since levels are ordered, we can look to the next\n // to determine whether we've chosen the greatest bandwidth for the media's dimensions\n const atGreatestBandwidth = (curLevel, nextLevel) => {\n if (!nextLevel) {\n return true;\n }\n return curLevel.width !== nextLevel.width || curLevel.height !== nextLevel.height;\n };\n\n // If we run through the loop without breaking, the media's dimensions are greater than every level, so default to\n // the max level\n let maxLevelIndex = levels.length - 1;\n // Prevent changes in aspect-ratio from causing capping to toggle back and forth\n const squareSize = Math.max(width, height);\n for (let i = 0; i < levels.length; i += 1) {\n const level = levels[i];\n if ((level.width >= squareSize || level.height >= squareSize) && atGreatestBandwidth(level, levels[i + 1])) {\n maxLevelIndex = i;\n break;\n }\n }\n return maxLevelIndex;\n }\n}\n\n/**\n * Common Media Object Type\n *\n * @internal\n */\nconst CmObjectType = {\n /**\n * text file, such as a manifest or playlist\n */\n MANIFEST: 'm',\n /**\n * audio only\n */\n AUDIO: 'a',\n /**\n * video only\n */\n VIDEO: 'v',\n /**\n * muxed audio and video\n */\n MUXED: 'av',\n /**\n * init segment\n */\n INIT: 'i',\n /**\n * caption or subtitle\n */\n CAPTION: 'c',\n /**\n * ISOBMFF timed text track\n */\n TIMED_TEXT: 'tt',\n /**\n * cryptographic key, license or certificate.\n */\n KEY: 'k',\n /**\n * other\n */\n OTHER: 'o'\n};\n\n/**\n * Common Media Client Data Object Type\n *\n * @group CMCD\n *\n * @beta\n *\n * @enum\n */\nconst CmcdObjectType = CmObjectType;\n\n/**\n * Common Media Streaming Format\n *\n * @internal\n */\nconst CmStreamingFormat = {\n /**\n * HTTP Live Streaming (HLS)\n */\n HLS: 'h'};\n\n/**\n * Common Media Client Data Streaming Format\n *\n * @group CMCD\n *\n * @enum\n *\n * @beta\n */\nconst CmcdStreamingFormat = CmStreamingFormat;\n\n/**\n * Structured Field Item\n *\n * @group Structured Field\n *\n * @beta\n */\nclass SfItem {\n constructor(value, params) {\n if (Array.isArray(value)) {\n value = value.map(v => v instanceof SfItem ? v : new SfItem(v));\n }\n this.value = value;\n this.params = params;\n }\n}\n\nconst DICT = 'Dict';\n\nfunction format(value) {\n if (Array.isArray(value)) {\n return JSON.stringify(value);\n }\n if (value instanceof Map) {\n return 'Map{}';\n }\n if (value instanceof Set) {\n return 'Set{}';\n }\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n return String(value);\n}\nfunction throwError(action, src, type, cause) {\n return new Error(`failed to ${action} \"${format(src)}\" as ${type}`, {\n cause\n });\n}\n\nfunction serializeError(src, type, cause) {\n return throwError('serialize', src, type, cause);\n}\n\n/**\n * A class to represent structured field tokens when `Symbol` is not available.\n *\n * @group Structured Field\n *\n * @beta\n */\nclass SfToken {\n constructor(description) {\n this.description = description;\n }\n}\n\nconst BARE_ITEM = 'Bare Item';\n\nconst BOOLEAN = 'Boolean';\n\n// 4.1.9. Serializing a Boolean\n//\n// Given a Boolean as input_boolean, return an ASCII string suitable for\n// use in a HTTP field value.\n//\n// 1. If input_boolean is not a boolean, fail serialization.\n//\n// 2. Let output be an empty string.\n//\n// 3. Append \"?\" to output.\n//\n// 4. If input_boolean is true, append \"1\" to output.\n//\n// 5. If input_boolean is false, append \"0\" to output.\n//\n// 6. Return output.\nfunction serializeBoolean(value) {\n if (typeof value !== 'boolean') {\n throw serializeError(value, BOOLEAN);\n }\n return value ? '?1' : '?0';\n}\n\n/**\n * Encodes binary data to base64\n *\n * @param binary - The binary data to encode\n * @returns The base64 encoded string\n *\n * @group Utils\n *\n * @beta\n */\nfunction encodeBase64(binary) {\n return btoa(String.fromCharCode(...binary));\n}\n\nconst BYTES = 'Byte Sequence';\n\n// 4.1.8. Serializing a Byte Sequence\n//\n// Given a Byte Sequence as input_bytes, return an ASCII string suitable\n// for use in a HTTP field value.\n//\n// 1. If input_bytes is not a sequence of bytes, fail serialization.\n//\n// 2. Let output be an empty string.\n//\n// 3. Append \":\" to output.\n//\n// 4. Append the result of base64-encoding input_bytes as per\n// [RFC4648], Section 4, taking account of the requirements below.\n//\n// 5. Append \":\" to output.\n//\n// 6. Return output.\n//\n// The encoded data is required to be padded with \"=\", as per [RFC4648],\n// Section 3.2.\n//\n// Likewise, encoded data SHOULD have pad bits set to zero, as per\n// [RFC4648], Section 3.5, unless it is not possible to do so due to\n// implementation constraints.\nfunction serializeByteSequence(value) {\n if (ArrayBuffer.isView(value) === false) {\n throw serializeError(value, BYTES);\n }\n return `:${encodeBase64(value)}:`;\n}\n\nconst INTEGER = 'Integer';\n\nfunction isInvalidInt(value) {\n return value < -999999999999999 || 999999999999999 < value;\n}\n\n// 4.1.4. Serializing an Integer\n//\n// Given an Integer as input_integer, return an ASCII string suitable\n// for use in a HTTP field value.\n//\n// 1. If input_integer is not an integer in the range of\n// -999,999,999,999,999 to 999,999,999,999,999 inclusive, fail\n// serialization.\n//\n// 2. Let output be an empty string.\n//\n// 3. If input_integer is less than (but not equal to) 0, append \"-\" to\n// output.\n//\n// 4. Append input_integer's numeric value represented in base 10 using\n// only decimal digits to output.\n//\n// 5. Return output.\nfunction serializeInteger(value) {\n if (isInvalidInt(value)) {\n throw serializeError(value, INTEGER);\n }\n return value.toString();\n}\n\n// 4.1.10. Serializing a Date\n//\n// Given a Date as input_integer, return an ASCII string suitable for\n// use in an HTTP field value.\n// 1. Let output be \"@\".\n// 2. Append to output the result of running Serializing an Integer\n// with input_date (Section 4.1.4).\n// 3. Return output.\nfunction serializeDate(value) {\n return `@${serializeInteger(value.getTime() / 1000)}`;\n}\n\n/**\n * This implements the rounding procedure described in step 2 of the \"Serializing a Decimal\" specification.\n * This rounding style is known as \"even rounding\", \"banker's rounding\", or \"commercial rounding\".\n *\n * @param value - The value to round\n * @param precision - The number of decimal places to round to\n * @returns The rounded value\n *\n * @group Utils\n *\n * @beta\n */\nfunction roundToEven(value, precision) {\n if (value < 0) {\n return -roundToEven(-value, precision);\n }\n const decimalShift = Math.pow(10, precision);\n const isEquidistant = Math.abs(value * decimalShift % 1 - 0.5) < Number.EPSILON;\n if (isEquidistant) {\n // If the tail of the decimal place is 'equidistant' we round to the nearest even value\n const flooredValue = Math.floor(value * decimalShift);\n return (flooredValue % 2 === 0 ? flooredValue : flooredValue + 1) / decimalShift;\n } else {\n // Otherwise, proceed as normal\n return Math.round(value * decimalShift) / decimalShift;\n }\n}\n\nconst DECIMAL = 'Decimal';\n\n// 4.1.5. Serializing a Decimal\n//\n// Given a decimal number as input_decimal, return an ASCII string\n// suitable for use in a HTTP field value.\n//\n// 1. If input_decimal is not a decimal number, fail serialization.\n//\n// 2. If input_decimal has more than three significant digits to the\n// right of the decimal point, round it to three decimal places,\n// rounding the final digit to the nearest value, or to the even\n// value if it is equidistant.\n//\n// 3. If input_decimal has more than 12 significant digits to the left\n// of the decimal point after rounding, fail serialization.\n//\n// 4. Let output be an empty string.\n//\n// 5. If input_decimal is less than (but not equal to) 0, append \"-\"\n// to output.\n//\n// 6. Append input_decimal's integer component represented in base 10\n// (using only decimal digits) to output; if it is zero, append\n// \"0\".\n//\n// 7. Append \".\" to output.\n//\n// 8. If input_decimal's fractional component is zero, append \"0\" to\n// output.\n//\n// 9. Otherwise, append the significant digits of input_decimal's\n// fractional component represented in base 10 (using only decimal\n// digits) to output.\n//\n// 10. Return output.\nfunction serializeDecimal(value) {\n const roundedValue = roundToEven(value, 3); // round to 3 decimal places\n if (Math.floor(Math.abs(roundedValue)).toString().length > 12) {\n throw serializeError(value, DECIMAL);\n }\n const stringValue = roundedValue.toString();\n return stringValue.includes('.') ? stringValue : `${stringValue}.0`;\n}\n\nconst STRING = 'String';\n\nconst STRING_REGEX = /[\\x00-\\x1f\\x7f]+/;\n\n// 4.1.6. Serializing a String\n//\n// Given a String as input_string, return an ASCII string suitable for\n// use in a HTTP field value.\n//\n// 1. Convert input_string into a sequence of ASCII characters; if\n// conversion fails, fail serialization.\n//\n// 2. If input_string contains characters in the range %x00-1f or %x7f\n// (i.e., not in VCHAR or SP), fail serialization.\n//\n// 3. Let output be the string DQUOTE.\n//\n// 4. For each character char in input_string:\n//\n// 1. If char is \"\\\" or DQUOTE:\n//\n// 1. Append \"\\\" to output.\n//\n// 2. Append char to output.\n//\n// 5. Append DQUOTE to output.\n//\n// 6. Return output.\nfunction serializeString(value) {\n if (STRING_REGEX.test(value)) {\n throw serializeError(value, STRING);\n }\n return `\"${value.replace(/\\\\/g, `\\\\\\\\`).replace(/\"/g, `\\\\\"`)}\"`;\n}\n\n/**\n * Converts a symbol to a string.\n *\n * @param symbol - The symbol to convert.\n *\n * @returns The string representation of the symbol.\n *\n * @internal\n */\nfunction symbolToStr(symbol) {\n return symbol.description || symbol.toString().slice(7, -1);\n}\n\nconst TOKEN = 'Token';\n\nfunction serializeToken(token) {\n const value = symbolToStr(token);\n if (/^([a-zA-Z*])([!#$%&'*+\\-.^_`|~\\w:/]*)$/.test(value) === false) {\n throw serializeError(value, TOKEN);\n }\n return value;\n}\n\n// 4.1.3.1. Serializing a Bare Item\n//\n// Given an Item as input_item, return an ASCII string suitable for use\n// in a HTTP field value.\n//\n// 1. If input_item is an Integer, return the result of running\n// Serializing an Integer (Section 4.1.4) with input_item.\n//\n// 2. If input_item is a Decimal, return the result of running\n// Serializing a Decimal (Section 4.1.5) with input_item.\n//\n// 3. If input_item is a String, return the result of running\n// Serializing a String (Section 4.1.6) with input_item.\n//\n// 4. If input_item is a Token, return the result of running\n// Serializing a Token (Section 4.1.7) with input_item.\n//\n// 5. If input_item is a Boolean, return the result of running\n// Serializing a Boolean (Section 4.1.9) with input_item.\n//\n// 6. If input_item is a Byte Sequence, return the result of running\n// Serializing a Byte Sequence (Section 4.1.8) with input_item.\n//\n// 7. If input_item is a Date, return the result of running Serializing\n// a Date (Section 4.1.10) with input_item.\n//\n// 8. Otherwise, fail serialization.\nfunction serializeBareItem(value) {\n switch (typeof value) {\n case 'number':\n if (!isFiniteNumber(value)) {\n throw serializeError(value, BARE_ITEM);\n }\n if (Number.isInteger(value)) {\n return serializeInteger(value);\n }\n return serializeDecimal(value);\n case 'string':\n return serializeString(value);\n case 'symbol':\n return serializeToken(value);\n case 'boolean':\n return serializeBoolean(value);\n case 'object':\n if (value instanceof Date) {\n return serializeDate(value);\n }\n if (value instanceof Uint8Array) {\n return serializeByteSequence(value);\n }\n if (value instanceof SfToken) {\n return serializeToken(value);\n }\n default:\n // fail\n throw serializeError(value, BARE_ITEM);\n }\n}\n\nconst KEY = 'Key';\n\n// 4.1.1.3. Serializing a Key\n//\n// Given a key as input_key, return an ASCII string suitable for use in\n// a HTTP field value.\n//\n// 1. Convert input_key into a sequence of ASCII characters; if\n// conversion fails, fail serialization.\n//\n// 2. If input_key contains characters not in lcalpha, DIGIT, \"_\", \"-\",\n// \".\", or \"*\" fail serialization.\n//\n// 3. If the first character of input_key is not lcalpha or \"*\", fail\n// serialization.\n//\n// 4. Let output be an empty string.\n//\n// 5. Append input_key to output.\n//\n// 6. Return output.\nfunction serializeKey(value) {\n if (/^[a-z*][a-z0-9\\-_.*]*$/.test(value) === false) {\n throw serializeError(value, KEY);\n }\n return value;\n}\n\n// 4.1.1.2. Serializing Parameters\n//\n// Given an ordered Dictionary as input_parameters (each member having a\n// param_name and a param_value), return an ASCII string suitable for\n// use in a HTTP field value.\n//\n// 1. Let output be an empty string.\n//\n// 2. For each param_name with a value of param_value in\n// input_parameters:\n//\n// 1. Append \";\" to output.\n//\n// 2. Append the result of running Serializing a Key\n// (Section 4.1.1.3) with param_name to output.\n//\n// 3. If param_value is not Boolean true:\n//\n// 1. Append \"=\" to output.\n//\n// 2. Append the result of running Serializing a bare Item\n// (Section 4.1.3.1) with param_value to output.\n//\n// 3. Return output.\nfunction serializeParams(params) {\n if (params == null) {\n return '';\n }\n return Object.entries(params).map(([key, value]) => {\n if (value === true) {\n return `;${serializeKey(key)}`; // omit true\n }\n return `;${serializeKey(key)}=${serializeBareItem(value)}`;\n }).join('');\n}\n\n// 4.1.3. Serializing an Item\n//\n// Given an Item as bare_item and Parameters as item_parameters, return\n// an ASCII string suitable for use in a HTTP field value.\n//\n// 1. Let output be an empty string.\n//\n// 2. Append the result of running Serializing a Bare Item\n// Section 4.1.3.1 with bare_item to output.\n//\n// 3. Append the result of running Serializing Parameters\n// Section 4.1.1.2 with item_parameters to output.\n//\n// 4. Return output.\nfunction serializeItem(value) {\n if (value instanceof SfItem) {\n return `${serializeBareItem(value.value)}${serializeParams(value.params)}`;\n } else {\n return serializeBareItem(value);\n }\n}\n\n// 4.1.1.1. Serializing an Inner List\n//\n// Given an array of (member_value, parameters) tuples as inner_list,\n// and parameters as list_parameters, return an ASCII string suitable\n// for use in a HTTP field value.\n//\n// 1. Let output be the string \"(\".\n//\n// 2. For each (member_value, parameters) of inner_list:\n//\n// 1. Append the result of running Serializing an Item\n// (Section 4.1.3) with (member_value, parameters) to output.\n//\n// 2. If more values remain in inner_list, append a single SP to\n// output.\n//\n// 3. Append \")\" to output.\n//\n// 4. Append the result of running Serializing Parameters\n// (Section 4.1.1.2) with list_parameters to output.\n//\n// 5. Return output.\nfunction serializeInnerList(value) {\n return `(${value.value.map(serializeItem).join(' ')})${serializeParams(value.params)}`;\n}\n\n// 4.1.2. Serializing a Dictionary\n//\n// Given an ordered Dictionary as input_dictionary (each member having a\n// member_name and a tuple value of (member_value, parameters)), return\n// an ASCII string suitable for use in a HTTP field value.\n//\n// 1. Let output be an empty string.\n//\n// 2. For each member_name with a value of (member_value, parameters)\n// in input_dictionary:\n//\n// 1. Append the result of running Serializing a Key\n// (Section 4.1.1.3) with member's member_name to output.\n//\n// 2. If member_value is Boolean true:\n//\n// 1. Append the result of running Serializing Parameters\n// (Section 4.1.1.2) with parameters to output.\n//\n// 3. Otherwise:\n//\n// 1. Append \"=\" to output.\n//\n// 2. If member_value is an array, append the result of running\n// Serializing an Inner List (Section 4.1.1.1) with\n// (member_value, parameters) to output.\n//\n// 3. Otherwise, append the result of running Serializing an\n// Item (Section 4.1.3) with (member_value, parameters) to\n// output.\n//\n// 4. If more members remain in input_dictionary:\n//\n// 1. Append \",\" to output.\n//\n// 2. Append a single SP to output.\n//\n// 3. Return output.\nfunction serializeDict(dict, options = {\n whitespace: true\n}) {\n if (typeof dict !== 'object' || dict == null) {\n throw serializeError(dict, DICT);\n }\n const entries = dict instanceof Map ? dict.entries() : Object.entries(dict);\n const optionalWhiteSpace = (options === null || options === void 0 ? void 0 : options.whitespace) ? ' ' : '';\n return Array.from(entries).map(([key, item]) => {\n if (item instanceof SfItem === false) {\n item = new SfItem(item);\n }\n let output = serializeKey(key);\n if (item.value === true) {\n output += serializeParams(item.params);\n } else {\n output += '=';\n if (Array.isArray(item.value)) {\n output += serializeInnerList(item);\n } else {\n output += serializeItem(item);\n }\n }\n return output;\n }).join(`,${optionalWhiteSpace}`);\n}\n\n/**\n * Encode an object into a structured field dictionary\n *\n * @param value - The structured field dictionary to encode\n * @param options - Encoding options\n *\n * @returns The structured field string\n *\n * @group Structured Field\n *\n * @beta\n */\nfunction encodeSfDict(value, options) {\n return serializeDict(value, options);\n}\n\n/**\n * CMCD object header name.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_OBJECT = 'CMCD-Object';\n\n/**\n * CMCD request header name.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_REQUEST = 'CMCD-Request';\n\n/**\n * CMCD session header name.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_SESSION = 'CMCD-Session';\n\n/**\n * CMCD status header name.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_STATUS = 'CMCD-Status';\n\n/**\n * The map of CMCD keys to their appropriate header shard.\n *\n * @group CMCD\n *\n * @internal\n */\nconst CMCD_HEADER_MAP = {\n // Object\n br: CMCD_OBJECT,\n ab: CMCD_OBJECT,\n d: CMCD_OBJECT,\n ot: CMCD_OBJECT,\n tb: CMCD_OBJECT,\n tpb: CMCD_OBJECT,\n lb: CMCD_OBJECT,\n tab: CMCD_OBJECT,\n lab: CMCD_OBJECT,\n url: CMCD_OBJECT,\n // Request\n pb: CMCD_REQUEST,\n bl: CMCD_REQUEST,\n tbl: CMCD_REQUEST,\n dl: CMCD_REQUEST,\n ltc: CMCD_REQUEST,\n mtp: CMCD_REQUEST,\n nor: CMCD_REQUEST,\n nrr: CMCD_REQUEST,\n rc: CMCD_REQUEST,\n sn: CMCD_REQUEST,\n sta: CMCD_REQUEST,\n su: CMCD_REQUEST,\n ttfb: CMCD_REQUEST,\n ttfbb: CMCD_REQUEST,\n ttlb: CMCD_REQUEST,\n cmsdd: CMCD_REQUEST,\n cmsds: CMCD_REQUEST,\n smrt: CMCD_REQUEST,\n df: CMCD_REQUEST,\n cs: CMCD_REQUEST,\n // TODO: Which header to put the `ts` field is not defined yet.\n ts: CMCD_REQUEST,\n // Session\n cid: CMCD_SESSION,\n pr: CMCD_SESSION,\n sf: CMCD_SESSION,\n sid: CMCD_SESSION,\n st: CMCD_SESSION,\n v: CMCD_SESSION,\n msd: CMCD_SESSION,\n // Status\n bs: CMCD_STATUS,\n bsd: CMCD_STATUS,\n cdn: CMCD_STATUS,\n rtp: CMCD_STATUS,\n bg: CMCD_STATUS,\n pt: CMCD_STATUS,\n ec: CMCD_STATUS,\n e: CMCD_STATUS\n};\n\n/**\n * CMCD header fields.\n *\n * @group CMCD\n *\n * @enum\n *\n * @beta\n */\nconst CmcdHeaderField = {\n /**\n * keys whose values vary with each request.\n */\n REQUEST: CMCD_REQUEST};\n\nfunction createHeaderMap(headerMap) {\n return Object.keys(headerMap).reduce((acc, field) => {\n var _a;\n (_a = headerMap[field]) === null || _a === void 0 ? void 0 : _a.forEach(key => acc[key] = field);\n return acc;\n }, {});\n}\n/**\n * Group a CMCD data object into header shards\n *\n * @param cmcd - The CMCD data object to convert.\n * @param customHeaderMap - A map of CMCD header fields to custom CMCD keys.\n *\n * @returns The CMCD header shards.\n *\n * @group CMCD\n *\n * @beta\n */\nfunction groupCmcdHeaders(cmcd, customHeaderMap) {\n const result = {};\n if (!cmcd) {\n return result;\n }\n const keys = Object.keys(cmcd);\n const custom = customHeaderMap ? createHeaderMap(customHeaderMap) : {};\n return keys.reduce((acc, key) => {\n var _a;\n const field = CMCD_HEADER_MAP[key] || custom[key] || CmcdHeaderField.REQUEST;\n const data = (_a = acc[field]) !== null && _a !== void 0 ? _a : acc[field] = {};\n data[key] = cmcd[key];\n return acc;\n }, result);\n}\n\n/**\n * Checks if the given key is a token field.\n *\n * @param key - The key to check.\n *\n * @returns `true` if the key is a token field.\n *\n * @internal\n */\nfunction isTokenField(key) {\n return ['ot', 'sf', 'st', 'e', 'sta'].includes(key);\n}\n\n/**\n * Checks if the given value is valid\n *\n * @param value - The value to check.\n *\n * @returns `true` if the key is a value is valid.\n *\n * @internal\n */\nfunction isValid(value) {\n if (typeof value === 'number') {\n return isFiniteNumber(value);\n }\n return value != null && value !== '' && value !== false;\n}\n\n/**\n * CMCD event mode variable name.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_EVENT_MODE = 'event';\n\n/**\n * Constructs a relative path from a URL.\n *\n * @param url - The destination URL\n * @param base - The base URL\n * @returns The relative path\n *\n * @group Utils\n *\n * @beta\n */\nfunction urlToRelativePath(url, base) {\n const to = new URL(url);\n const from = new URL(base);\n if (to.origin !== from.origin) {\n return url;\n }\n const toPath = to.pathname.split('/').slice(1);\n const fromPath = from.pathname.split('/').slice(1, -1);\n // remove common parents\n while (toPath[0] === fromPath[0]) {\n toPath.shift();\n fromPath.shift();\n }\n // add back paths\n while (fromPath.length) {\n fromPath.shift();\n toPath.unshift('..');\n }\n const relativePath = toPath.join('/');\n // preserve query parameters and hash of the destination url\n return relativePath + to.search + to.hash;\n}\n\nconst toRounded = value => Math.round(value);\nconst toUrlSafe = (value, options) => {\n if (Array.isArray(value)) {\n return value.map(item => toUrlSafe(item, options));\n }\n if (value instanceof SfItem && typeof value.value === 'string') {\n return new SfItem(toUrlSafe(value.value, options), value.params);\n } else {\n if (options.baseUrl) {\n value = urlToRelativePath(value, options.baseUrl);\n }\n return options.version === 1 ? encodeURIComponent(value) : value;\n }\n};\nconst toHundred = value => toRounded(value / 100) * 100;\nconst nor = (value, options) => {\n let norValue = value;\n if (options.version >= 2) {\n if (value instanceof SfItem && typeof value.value === 'string') {\n norValue = new SfItem([value]);\n } else if (typeof value === 'string') {\n norValue = [value];\n }\n }\n return toUrlSafe(norValue, options);\n};\n/**\n * The default formatters for CMCD values.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_FORMATTER_MAP = {\n /**\n * Bitrate (kbps) rounded integer\n */\n br: toRounded,\n /**\n * Duration (milliseconds) rounded integer\n */\n d: toRounded,\n /**\n * Buffer Length (milliseconds) rounded nearest 100ms\n */\n bl: toHundred,\n /**\n * Deadline (milliseconds) rounded nearest 100ms\n */\n dl: toHundred,\n /**\n * Measured Throughput (kbps) rounded nearest 100kbps\n */\n mtp: toHundred,\n /**\n * Next Object Request URL encoded\n */\n nor,\n /**\n * Requested maximum throughput (kbps) rounded nearest 100kbps\n */\n rtp: toHundred,\n /**\n * Top Bitrate (kbps) rounded integer\n */\n tb: toRounded\n};\n\n/**\n * CMCD request mode variable name.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_REQUEST_MODE = 'request';\n\n/**\n * CMCD response mode variable name.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_RESPONSE_MODE = 'response';\n\n/**\n * Defines the common keys for CMCD (Common Media Client Data) version 2.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_COMMON_KEYS = ['ab', 'bg', 'bl', 'br', 'bs', 'bsd', 'cdn', 'cid', 'cs', 'df', 'ec', 'lab', 'lb', 'ltc', 'msd', 'mtp', 'pb', 'pr', 'pt', 'sf', 'sid', 'sn', 'st', 'sta', 'tab', 'tb', 'tbl', 'tpb', 'ts', 'v'];\n\n/**\n * Defines the event-specific keys for CMCD (Common Media Client Data) version 2.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_EVENT_KEYS = ['e'];\n\nconst CUSTOM_KEY_REGEX = /^[a-zA-Z0-9-.]+-[a-zA-Z0-9-.]+$/;\n/**\n * Check if a key is a custom key.\n *\n * @param key - The key to check.\n *\n * @returns `true` if the key is a custom key, `false` otherwise.\n *\n * @group CMCD\n *\n * @beta\n */\nfunction isCmcdCustomKey(key) {\n return CUSTOM_KEY_REGEX.test(key);\n}\n\n/**\n * Check if a key is a valid CMCD event key.\n *\n * @param key - The key to check.\n *\n * @returns `true` if the key is a valid CMCD event key, `false` otherwise.\n *\n * @group CMCD\n *\n * @beta\n *\n * @example\n * {@includeCode ../../test/cmcd/isCmcdEventKey.test.ts#example}\n */\nfunction isCmcdEventKey(key) {\n return CMCD_COMMON_KEYS.includes(key) || CMCD_EVENT_KEYS.includes(key) || isCmcdCustomKey(key);\n}\n\n/**\n * Defines the request-specific keys for CMCD (Common Media Client Data) version 2.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_REQUEST_KEYS = ['d', 'dl', 'nor', 'ot', 'rtp', 'su'];\n\n/**\n * Check if a key is a valid CMCD request key.\n *\n * @param key - The key to check.\n *\n * @returns `true` if the key is a valid CMCD request key, `false` otherwise.\n *\n * @group CMCD\n *\n * @beta\n *\n * @example\n * {@includeCode ../../test/cmcd/isCmcdRequestKey.test.ts#example}\n */\nfunction isCmcdRequestKey(key) {\n return CMCD_COMMON_KEYS.includes(key) || CMCD_REQUEST_KEYS.includes(key) || isCmcdCustomKey(key);\n}\n\n/**\n * CMCD v2 - Response-only and timing keys.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_RESPONSE_KEYS = ['cmsdd', 'cmsds', 'rc', 'smrt', 'ttfb', 'ttfbb', 'ttlb', 'url'];\n\n/**\n * Check if a key is a valid CMCD response key.\n *\n * @param key - The key to check.\n *\n * @returns `true` if the key is a valid CMCD request key, `false` otherwise.\n *\n * @group CMCD\n *\n * @beta\n *\n * @example\n * {@includeCode ../../test/cmcd/isCmcdResponseKey.test.ts#example}\n */\nfunction isCmcdResponseKey(key) {\n return CMCD_COMMON_KEYS.includes(key) || CMCD_REQUEST_KEYS.includes(key) || CMCD_RESPONSE_KEYS.includes(key) || isCmcdCustomKey(key);\n}\n\n/**\n * Defines the keys for CMCD (Common Media Client Data) version 1.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_V1_KEYS = ['bl', 'br', 'bs', 'cid', 'd', 'dl', 'mtp', 'nor', 'nrr', 'ot', 'pr', 'rtp', 'sf', 'sid', 'st', 'su', 'tb', 'v'];\n\n/**\n * Filter function for CMCD v1 keys.\n *\n * @param key - The CMCD key to filter.\n *\n * @returns `true` if the key should be included, `false` otherwise.\n *\n * @group CMCD\n *\n * @beta\n *\n * @example\n * {@includeCode ../../test/cmcd/isCmcdV1Key.test.ts#example}\n */\nfunction isCmcdV1Key(key) {\n return CMCD_V1_KEYS.includes(key) || isCmcdCustomKey(key);\n}\n\nconst filterMap = {\n [CMCD_RESPONSE_MODE]: isCmcdResponseKey,\n [CMCD_EVENT_MODE]: isCmcdEventKey,\n [CMCD_REQUEST_MODE]: isCmcdRequestKey\n};\n/**\n * Convert a generic object to CMCD data.\n *\n * @param obj - The CMCD object to process.\n * @param options - Options for encoding.\n *\n * @group CMCD\n *\n * @beta\n */\nfunction prepareCmcdData(obj, options = {}) {\n const results = {};\n if (obj == null || typeof obj !== 'object') {\n return results;\n }\n const version = options.version || obj['v'] || 1;\n const reportingMode = options.reportingMode || CMCD_REQUEST_MODE;\n const keyFilter = version === 1 ? isCmcdV1Key : filterMap[reportingMode];\n // Filter keys based on the version, reporting mode and options\n let keys = Object.keys(obj).filter(keyFilter);\n const filter = options.filter;\n if (typeof filter === 'function') {\n keys = keys.filter(filter);\n }\n // Ensure all required keys are present before sorting\n const needsTimestamp = reportingMode === CMCD_RESPONSE_MODE || reportingMode === CMCD_EVENT_MODE;\n if (needsTimestamp && !keys.includes('ts')) {\n keys.push('ts');\n }\n if (version > 1 && !keys.includes('v')) {\n keys.push('v');\n }\n const formatters = _extends({}, CMCD_FORMATTER_MAP, options.formatters);\n const formatterOptions = {\n version,\n reportingMode,\n baseUrl: options.baseUrl\n };\n keys.sort().forEach(key => {\n let value = obj[key];\n const formatter = formatters[key];\n if (typeof formatter === 'function') {\n value = formatter(value, formatterOptions);\n }\n // Version should only be reported if not equal to 1.\n if (key === 'v') {\n if (version === 1) {\n return;\n } else {\n value = version;\n }\n }\n // Playback rate should only be sent if not equal to 1.\n if (key == 'pr' && value === 1) {\n return;\n }\n // Ensure a timestamp is set for response and event modes\n if (needsTimestamp && key === 'ts' && !isFiniteNumber(value)) {\n value = Date.now();\n }\n // ignore invalid values\n if (!isValid(value)) {\n return;\n }\n if (isTokenField(key) && typeof value === 'string') {\n value = new SfToken(value);\n }\n results[key] = value;\n });\n return results;\n}\n\n/**\n * Convert a CMCD data object to request headers\n *\n * @param cmcd - The CMCD data object to convert.\n * @param options - Options for encoding the CMCD object.\n *\n * @returns The CMCD header shards.\n *\n * @group CMCD\n *\n * @beta\n *\n * @example\n * {@includeCode ../../test/cmcd/toCmcdHeaders.test.ts#example}\n */\nfunction toCmcdHeaders(cmcd, options = {}) {\n const result = {};\n if (!cmcd) {\n return result;\n }\n const data = prepareCmcdData(cmcd, options);\n const shards = groupCmcdHeaders(data, options === null || options === void 0 ? void 0 : options.customHeaderMap);\n return Object.entries(shards).reduce((acc, [field, value]) => {\n const shard = encodeSfDict(value, {\n whitespace: false\n });\n if (shard) {\n acc[field] = shard;\n }\n return acc;\n }, result);\n}\n\n/**\n * Append CMCD query args to a header object.\n *\n * @param headers - The headers to append to.\n * @param cmcd - The CMCD object to append.\n * @param options - Encode options.\n *\n * @returns The headers with the CMCD header shards appended.\n *\n * @group CMCD\n *\n * @beta\n *\n * @example\n * {@includeCode ../../test/cmcd/appendCmcdHeaders.test.ts#example}\n */\nfunction appendCmcdHeaders(headers, cmcd, options) {\n return _extends(headers, toCmcdHeaders(cmcd, options));\n}\n\n/**\n * CMCD parameter name.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_PARAM = 'CMCD';\n\n/**\n * Encode a CMCD object to a string.\n *\n * @param cmcd - The CMCD object to encode.\n * @param options - Options for encoding.\n *\n * @returns The encoded CMCD string.\n *\n * @group CMCD\n *\n * @beta\n *\n * @example\n * {@includeCode ../../test/cmcd/encodeCmcd.test.ts#example}\n */\nfunction encodeCmcd(cmcd, options = {}) {\n if (!cmcd) {\n return '';\n }\n return encodeSfDict(prepareCmcdData(cmcd, options), {\n whitespace: false\n });\n}\n\n/**\n * Convert a CMCD data object to a URL encoded string.\n *\n * @param cmcd - The CMCD object to convert.\n * @param options - Options for encoding the CMCD object.\n *\n * @returns The URL encoded CMCD data.\n *\n * @group CMCD\n *\n * @beta\n */\nfunction toCmcdUrl(cmcd, options = {}) {\n if (!cmcd) {\n return '';\n }\n const params = encodeCmcd(cmcd, options);\n return encodeURIComponent(params);\n}\n\n/**\n * Convert a CMCD data object to a query arg.\n *\n * @param cmcd - The CMCD object to convert.\n * @param options - Options for encoding the CMCD object.\n *\n * @returns The CMCD query arg.\n *\n * @group CMCD\n *\n * @beta\n *\n * @example\n * {@includeCode ../../test/cmcd/toCmcdQuery.test.ts#example}\n */\nfunction toCmcdQuery(cmcd, options = {}) {\n if (!cmcd) {\n return '';\n }\n const value = toCmcdUrl(cmcd, options);\n return `${CMCD_PARAM}=${value}`;\n}\n\nconst REGEX = /CMCD=[^&#]+/;\n/**\n * Append CMCD query args to a URL.\n *\n * @param url - The URL to append to.\n * @param cmcd - The CMCD object to append.\n * @param options - Options for encoding the CMCD object.\n *\n * @returns The URL with the CMCD query args appended.\n *\n * @group CMCD\n *\n * @beta\n *\n * @example\n * {@includeCode ../../test/cmcd/appendCmcdQuery.test.ts#example}\n */\nfunction appendCmcdQuery(url, cmcd, options) {\n // TODO: Replace with URLSearchParams once we drop Safari < 10.1 & Chrome < 49 support.\n // https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams\n const query = toCmcdQuery(cmcd, options);\n if (!query) {\n return url;\n }\n if (REGEX.test(url)) {\n return url.replace(REGEX, query);\n }\n const separator = url.includes('?') ? '&' : '?';\n return `${url}${separator}${query}`;\n}\n\n/**\n * Controller to deal with Common Media Client Data (CMCD)\n * @see https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf\n */\nclass CMCDController {\n constructor(hls) {\n this.hls = void 0;\n this.config = void 0;\n this.media = void 0;\n this.sid = void 0;\n this.cid = void 0;\n this.useHeaders = false;\n this.includeKeys = void 0;\n this.initialized = false;\n this.starved = false;\n this.buffering = true;\n this.audioBuffer = void 0;\n this.videoBuffer = void 0;\n this.onWaiting = () => {\n if (this.initialized) {\n this.starved = true;\n }\n this.buffering = true;\n };\n this.onPlaying = () => {\n if (!this.initialized) {\n this.initialized = true;\n }\n this.buffering = false;\n };\n /**\n * Apply CMCD data to a manifest request.\n */\n this.applyPlaylistData = context => {\n try {\n this.apply(context, {\n ot: CmcdObjectType.MANIFEST,\n su: !this.initialized\n });\n } catch (error) {\n this.hls.logger.warn('Could not generate manifest CMCD data.', error);\n }\n };\n /**\n * Apply CMCD data to a segment request\n */\n this.applyFragmentData = context => {\n try {\n const {\n frag,\n part\n } = context;\n const level = this.hls.levels[frag.level];\n const ot = this.getObjectType(frag);\n const data = {\n d: (part || frag).duration * 1000,\n ot\n };\n if (ot === CmcdObjectType.VIDEO || ot === CmcdObjectType.AUDIO || ot == CmcdObjectType.MUXED) {\n data.br = level.bitrate / 1000;\n data.tb = this.getTopBandwidth(ot) / 1000;\n data.bl = this.getBufferLength(ot);\n }\n const next = part ? this.getNextPart(part) : this.getNextFrag(frag);\n if (next != null && next.url && next.url !== frag.url) {\n data.nor = next.url;\n }\n this.apply(context, data);\n } catch (error) {\n this.hls.logger.warn('Could not generate segment CMCD data.', error);\n }\n };\n this.hls = hls;\n const config = this.config = hls.config;\n const {\n cmcd\n } = config;\n if (cmcd != null) {\n config.pLoader = this.createPlaylistLoader();\n config.fLoader = this.createFragmentLoader();\n this.sid = cmcd.sessionId || hls.sessionId;\n this.cid = cmcd.contentId;\n this.useHeaders = cmcd.useHeaders === true;\n this.includeKeys = cmcd.includeKeys;\n this.registerListeners();\n }\n }\n registerListeners() {\n const hls = this.hls;\n hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.on(Events.MEDIA_DETACHED, this.onMediaDetached, this);\n hls.on(Events.BUFFER_CREATED, this.onBufferCreated, this);\n }\n unregisterListeners() {\n const hls = this.hls;\n hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.off(Events.MEDIA_DETACHED, this.onMediaDetached, this);\n hls.off(Events.BUFFER_CREATED, this.onBufferCreated, this);\n }\n destroy() {\n this.unregisterListeners();\n this.onMediaDetached();\n\n // @ts-ignore\n this.hls = this.config = this.audioBuffer = this.videoBuffer = null;\n // @ts-ignore\n this.onWaiting = this.onPlaying = this.media = null;\n }\n onMediaAttached(event, data) {\n this.media = data.media;\n this.media.addEventListener('waiting', this.onWaiting);\n this.media.addEventListener('playing', this.onPlaying);\n }\n onMediaDetached() {\n if (!this.media) {\n return;\n }\n this.media.removeEventListener('waiting', this.onWaiting);\n this.media.removeEventListener('playing', this.onPlaying);\n\n // @ts-ignore\n this.media = null;\n }\n onBufferCreated(event, data) {\n var _data$tracks$audio, _data$tracks$video;\n this.audioBuffer = (_data$tracks$audio = data.tracks.audio) == null ? void 0 : _data$tracks$audio.buffer;\n this.videoBuffer = (_data$tracks$video = data.tracks.video) == null ? void 0 : _data$tracks$video.buffer;\n }\n /**\n * Create baseline CMCD data\n */\n createData() {\n var _this$media;\n return {\n v: 1,\n sf: CmcdStreamingFormat.HLS,\n sid: this.sid,\n cid: this.cid,\n pr: (_this$media = this.media) == null ? void 0 : _this$media.playbackRate,\n mtp: this.hls.bandwidthEstimate / 1000\n };\n }\n\n /**\n * Apply CMCD data to a request.\n */\n apply(context, data = {}) {\n // apply baseline data\n _extends(data, this.createData());\n const isVideo = data.ot === CmcdObjectType.INIT || data.ot === CmcdObjectType.VIDEO || data.ot === CmcdObjectType.MUXED;\n if (this.starved && isVideo) {\n data.bs = true;\n data.su = true;\n this.starved = false;\n }\n if (data.su == null) {\n data.su = this.buffering;\n }\n\n // TODO: Implement rtp, nrr, dl\n\n const {\n includeKeys\n } = this;\n if (includeKeys) {\n data = Object.keys(data).reduce((acc, key) => {\n includeKeys.includes(key) && (acc[key] = data[key]);\n return acc;\n }, {});\n }\n const options = {\n baseUrl: context.url\n };\n if (this.useHeaders) {\n if (!context.headers) {\n context.headers = {};\n }\n appendCmcdHeaders(context.headers, data, options);\n } else {\n context.url = appendCmcdQuery(context.url, data, options);\n }\n }\n getNextFrag(fragment) {\n var _this$hls$levels$frag;\n const levelDetails = (_this$hls$levels$frag = this.hls.levels[fragment.level]) == null ? void 0 : _this$hls$levels$frag.details;\n if (levelDetails) {\n const index = fragment.sn - levelDetails.startSN;\n return levelDetails.fragments[index + 1];\n }\n return undefined;\n }\n getNextPart(part) {\n var _this$hls$levels$frag2;\n const {\n index,\n fragment\n } = part;\n const partList = (_this$hls$levels$frag2 = this.hls.levels[fragment.level]) == null || (_this$hls$levels$frag2 = _this$hls$levels$frag2.details) == null ? void 0 : _this$hls$levels$frag2.partList;\n if (partList) {\n const {\n sn\n } = fragment;\n for (let i = partList.length - 1; i >= 0; i--) {\n const p = partList[i];\n if (p.index === index && p.fragment.sn === sn) {\n return partList[i + 1];\n }\n }\n }\n return undefined;\n }\n\n /**\n * The CMCD object type.\n */\n getObjectType(fragment) {\n const {\n type\n } = fragment;\n if (type === 'subtitle') {\n return CmcdObjectType.TIMED_TEXT;\n }\n if (fragment.sn === 'initSegment') {\n return CmcdObjectType.INIT;\n }\n if (type === 'audio') {\n return CmcdObjectType.AUDIO;\n }\n if (type === 'main') {\n if (!this.hls.audioTracks.length) {\n return CmcdObjectType.MUXED;\n }\n return CmcdObjectType.VIDEO;\n }\n return undefined;\n }\n\n /**\n * Get the highest bitrate.\n */\n getTopBandwidth(type) {\n let bitrate = 0;\n let levels;\n const hls = this.hls;\n if (type === CmcdObjectType.AUDIO) {\n levels = hls.audioTracks;\n } else {\n const max = hls.maxAutoLevel;\n const len = max > -1 ? max + 1 : hls.levels.length;\n levels = hls.levels.slice(0, len);\n }\n levels.forEach(level => {\n if (level.bitrate > bitrate) {\n bitrate = level.bitrate;\n }\n });\n return bitrate > 0 ? bitrate : NaN;\n }\n\n /**\n * Get the buffer length for a media type in milliseconds\n */\n getBufferLength(type) {\n const media = this.media;\n const buffer = type === CmcdObjectType.AUDIO ? this.audioBuffer : this.videoBuffer;\n if (!buffer || !media) {\n return NaN;\n }\n const info = BufferHelper.bufferInfo(buffer, media.currentTime, this.config.maxBufferHole);\n return info.len * 1000;\n }\n\n /**\n * Create a playlist loader\n */\n createPlaylistLoader() {\n const {\n pLoader\n } = this.config;\n const apply = this.applyPlaylistData;\n const Ctor = pLoader || this.config.loader;\n return class CmcdPlaylistLoader {\n constructor(config) {\n this.loader = void 0;\n this.loader = new Ctor(config);\n }\n get stats() {\n return this.loader.stats;\n }\n get context() {\n return this.loader.context;\n }\n destroy() {\n this.loader.destroy();\n }\n abort() {\n this.loader.abort();\n }\n load(context, config, callbacks) {\n apply(context);\n this.loader.load(context, config, callbacks);\n }\n };\n }\n\n /**\n * Create a playlist loader\n */\n createFragmentLoader() {\n const {\n fLoader\n } = this.config;\n const apply = this.applyFragmentData;\n const Ctor = fLoader || this.config.loader;\n return class CmcdFragmentLoader {\n constructor(config) {\n this.loader = void 0;\n this.loader = new Ctor(config);\n }\n get stats() {\n return this.loader.stats;\n }\n get context() {\n return this.loader.context;\n }\n destroy() {\n this.loader.destroy();\n }\n abort() {\n this.loader.abort();\n }\n load(context, config, callbacks) {\n apply(context);\n this.loader.load(context, config, callbacks);\n }\n };\n }\n}\n\nconst PATHWAY_PENALTY_DURATION_MS = 300000;\nclass ContentSteeringController extends Logger {\n constructor(hls) {\n super('content-steering', hls.logger);\n this.hls = void 0;\n this.loader = null;\n this.uri = null;\n this.pathwayId = '.';\n this._pathwayPriority = null;\n this.timeToLoad = 300;\n this.reloadTimer = -1;\n this.updated = 0;\n this.started = false;\n this.enabled = true;\n this.levels = null;\n this.audioTracks = null;\n this.subtitleTracks = null;\n this.penalizedPathways = {};\n this.hls = hls;\n this.registerListeners();\n }\n registerListeners() {\n const hls = this.hls;\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.on(Events.ERROR, this.onError, this);\n }\n unregisterListeners() {\n const hls = this.hls;\n if (!hls) {\n return;\n }\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.off(Events.ERROR, this.onError, this);\n }\n pathways() {\n return (this.levels || []).reduce((pathways, level) => {\n if (pathways.indexOf(level.pathwayId) === -1) {\n pathways.push(level.pathwayId);\n }\n return pathways;\n }, []);\n }\n get pathwayPriority() {\n return this._pathwayPriority;\n }\n set pathwayPriority(pathwayPriority) {\n this.updatePathwayPriority(pathwayPriority);\n }\n startLoad() {\n this.started = true;\n this.clearTimeout();\n if (this.enabled && this.uri) {\n if (this.updated) {\n const ttl = this.timeToLoad * 1000 - (performance.now() - this.updated);\n if (ttl > 0) {\n this.scheduleRefresh(this.uri, ttl);\n return;\n }\n }\n this.loadSteeringManifest(this.uri);\n }\n }\n stopLoad() {\n this.started = false;\n if (this.loader) {\n this.loader.destroy();\n this.loader = null;\n }\n this.clearTimeout();\n }\n clearTimeout() {\n if (this.reloadTimer !== -1) {\n self.clearTimeout(this.reloadTimer);\n this.reloadTimer = -1;\n }\n }\n destroy() {\n this.unregisterListeners();\n this.stopLoad();\n // @ts-ignore\n this.hls = null;\n this.levels = this.audioTracks = this.subtitleTracks = null;\n }\n removeLevel(levelToRemove) {\n const levels = this.levels;\n if (levels) {\n this.levels = levels.filter(level => level !== levelToRemove);\n }\n }\n onManifestLoading() {\n this.stopLoad();\n this.enabled = true;\n this.timeToLoad = 300;\n this.updated = 0;\n this.uri = null;\n this.pathwayId = '.';\n this.levels = this.audioTracks = this.subtitleTracks = null;\n }\n onManifestLoaded(event, data) {\n const {\n contentSteering\n } = data;\n if (contentSteering === null) {\n return;\n }\n this.pathwayId = contentSteering.pathwayId;\n this.uri = contentSteering.uri;\n if (this.started) {\n this.startLoad();\n }\n }\n onManifestParsed(event, data) {\n this.audioTracks = data.audioTracks;\n this.subtitleTracks = data.subtitleTracks;\n }\n onError(event, data) {\n const {\n errorAction\n } = data;\n if ((errorAction == null ? void 0 : errorAction.action) === NetworkErrorAction.SendAlternateToPenaltyBox && errorAction.flags === ErrorActionFlags.MoveAllAlternatesMatchingHost) {\n const levels = this.levels;\n let pathwayPriority = this._pathwayPriority;\n let errorPathway = this.pathwayId;\n if (data.context) {\n const {\n groupId,\n pathwayId,\n type\n } = data.context;\n if (groupId && levels) {\n errorPathway = this.getPathwayForGroupId(groupId, type, errorPathway);\n } else if (pathwayId) {\n errorPathway = pathwayId;\n }\n }\n if (!(errorPathway in this.penalizedPathways)) {\n this.penalizedPathways[errorPathway] = performance.now();\n }\n if (!pathwayPriority && levels) {\n // If PATHWAY-PRIORITY was not provided, list pathways for error handling\n pathwayPriority = this.pathways();\n }\n if (pathwayPriority && pathwayPriority.length > 1) {\n this.updatePathwayPriority(pathwayPriority);\n errorAction.resolved = this.pathwayId !== errorPathway;\n }\n if (data.details === ErrorDetails.BUFFER_APPEND_ERROR && !data.fatal) {\n // Error will become fatal in buffer-controller when reaching `appendErrorMaxRetry`\n // Stream-controllers are expected to reduce buffer length even if this is not deemed a QuotaExceededError\n errorAction.resolved = true;\n } else if (!errorAction.resolved) {\n this.warn(`Could not resolve ${data.details} (\"${data.error.message}\") with content-steering for Pathway: ${errorPathway} levels: ${levels ? levels.length : levels} priorities: ${stringify(pathwayPriority)} penalized: ${stringify(this.penalizedPathways)}`);\n }\n }\n }\n filterParsedLevels(levels) {\n // Filter levels to only include those that are in the initial pathway\n this.levels = levels;\n let pathwayLevels = this.getLevelsForPathway(this.pathwayId);\n if (pathwayLevels.length === 0) {\n const pathwayId = levels[0].pathwayId;\n this.log(`No levels found in Pathway ${this.pathwayId}. Setting initial Pathway to \"${pathwayId}\"`);\n pathwayLevels = this.getLevelsForPathway(pathwayId);\n this.pathwayId = pathwayId;\n }\n if (pathwayLevels.length !== levels.length) {\n this.log(`Found ${pathwayLevels.length}/${levels.length} levels in Pathway \"${this.pathwayId}\"`);\n }\n return pathwayLevels;\n }\n getLevelsForPathway(pathwayId) {\n if (this.levels === null) {\n return [];\n }\n return this.levels.filter(level => pathwayId === level.pathwayId);\n }\n updatePathwayPriority(pathwayPriority) {\n this._pathwayPriority = pathwayPriority;\n let levels;\n\n // Evaluate if we should remove the pathway from the penalized list\n const penalizedPathways = this.penalizedPathways;\n const now = performance.now();\n Object.keys(penalizedPathways).forEach(pathwayId => {\n if (now - penalizedPathways[pathwayId] > PATHWAY_PENALTY_DURATION_MS) {\n delete penalizedPathways[pathwayId];\n }\n });\n for (let i = 0; i < pathwayPriority.length; i++) {\n const pathwayId = pathwayPriority[i];\n if (pathwayId in penalizedPathways) {\n continue;\n }\n if (pathwayId === this.pathwayId) {\n return;\n }\n const selectedIndex = this.hls.nextLoadLevel;\n const selectedLevel = this.hls.levels[selectedIndex];\n levels = this.getLevelsForPathway(pathwayId);\n if (levels.length > 0) {\n this.log(`Setting Pathway to \"${pathwayId}\"`);\n this.pathwayId = pathwayId;\n reassignFragmentLevelIndexes(levels);\n this.hls.trigger(Events.LEVELS_UPDATED, {\n levels\n });\n // Set LevelController's level to trigger LEVEL_SWITCHING which loads playlist if needed\n const levelAfterChange = this.hls.levels[selectedIndex];\n if (selectedLevel && levelAfterChange && this.levels) {\n if (levelAfterChange.attrs['STABLE-VARIANT-ID'] !== selectedLevel.attrs['STABLE-VARIANT-ID'] && levelAfterChange.bitrate !== selectedLevel.bitrate) {\n this.log(`Unstable Pathways change from bitrate ${selectedLevel.bitrate} to ${levelAfterChange.bitrate}`);\n }\n this.hls.nextLoadLevel = selectedIndex;\n }\n break;\n }\n }\n }\n getPathwayForGroupId(groupId, type, defaultPathway) {\n const levels = this.getLevelsForPathway(defaultPathway).concat(this.levels || []);\n for (let i = 0; i < levels.length; i++) {\n if (type === PlaylistContextType.AUDIO_TRACK && levels[i].hasAudioGroup(groupId) || type === PlaylistContextType.SUBTITLE_TRACK && levels[i].hasSubtitleGroup(groupId)) {\n return levels[i].pathwayId;\n }\n }\n return defaultPathway;\n }\n clonePathways(pathwayClones) {\n const levels = this.levels;\n if (!levels) {\n return;\n }\n const audioGroupCloneMap = {};\n const subtitleGroupCloneMap = {};\n pathwayClones.forEach(pathwayClone => {\n const {\n ID: cloneId,\n 'BASE-ID': baseId,\n 'URI-REPLACEMENT': uriReplacement\n } = pathwayClone;\n if (levels.some(level => level.pathwayId === cloneId)) {\n return;\n }\n const clonedVariants = this.getLevelsForPathway(baseId).map(baseLevel => {\n const attributes = new AttrList(baseLevel.attrs);\n attributes['PATHWAY-ID'] = cloneId;\n const clonedAudioGroupId = attributes.AUDIO && `${attributes.AUDIO}_clone_${cloneId}`;\n const clonedSubtitleGroupId = attributes.SUBTITLES && `${attributes.SUBTITLES}_clone_${cloneId}`;\n if (clonedAudioGroupId) {\n audioGroupCloneMap[attributes.AUDIO] = clonedAudioGroupId;\n attributes.AUDIO = clonedAudioGroupId;\n }\n if (clonedSubtitleGroupId) {\n subtitleGroupCloneMap[attributes.SUBTITLES] = clonedSubtitleGroupId;\n attributes.SUBTITLES = clonedSubtitleGroupId;\n }\n const url = performUriReplacement(baseLevel.uri, attributes['STABLE-VARIANT-ID'], 'PER-VARIANT-URIS', uriReplacement);\n const clonedLevel = new Level({\n attrs: attributes,\n audioCodec: baseLevel.audioCodec,\n bitrate: baseLevel.bitrate,\n height: baseLevel.height,\n name: baseLevel.name,\n url,\n videoCodec: baseLevel.videoCodec,\n width: baseLevel.width\n });\n if (baseLevel.audioGroups) {\n for (let i = 1; i < baseLevel.audioGroups.length; i++) {\n clonedLevel.addGroupId('audio', `${baseLevel.audioGroups[i]}_clone_${cloneId}`);\n }\n }\n if (baseLevel.subtitleGroups) {\n for (let i = 1; i < baseLevel.subtitleGroups.length; i++) {\n clonedLevel.addGroupId('text', `${baseLevel.subtitleGroups[i]}_clone_${cloneId}`);\n }\n }\n return clonedLevel;\n });\n levels.push(...clonedVariants);\n cloneRenditionGroups(this.audioTracks, audioGroupCloneMap, uriReplacement, cloneId);\n cloneRenditionGroups(this.subtitleTracks, subtitleGroupCloneMap, uriReplacement, cloneId);\n });\n }\n loadSteeringManifest(uri) {\n const config = this.hls.config;\n const Loader = config.loader;\n if (this.loader) {\n this.loader.destroy();\n }\n this.loader = new Loader(config);\n let url;\n try {\n url = new self.URL(uri);\n } catch (error) {\n this.enabled = false;\n this.log(`Failed to parse Steering Manifest URI: ${uri}`);\n return;\n }\n if (url.protocol !== 'data:') {\n const throughput = (this.hls.bandwidthEstimate || config.abrEwmaDefaultEstimate) | 0;\n url.searchParams.set('_HLS_pathway', this.pathwayId);\n url.searchParams.set('_HLS_throughput', '' + throughput);\n }\n const context = {\n responseType: 'json',\n url: url.href\n };\n const loadPolicy = config.steeringManifestLoadPolicy.default;\n const legacyRetryCompatibility = loadPolicy.errorRetry || loadPolicy.timeoutRetry || {};\n const loaderConfig = {\n loadPolicy,\n timeout: loadPolicy.maxLoadTimeMs,\n maxRetry: legacyRetryCompatibility.maxNumRetry || 0,\n retryDelay: legacyRetryCompatibility.retryDelayMs || 0,\n maxRetryDelay: legacyRetryCompatibility.maxRetryDelayMs || 0\n };\n const callbacks = {\n onSuccess: (response, stats, context, networkDetails) => {\n this.log(`Loaded steering manifest: \"${url}\"`);\n const steeringData = response.data;\n if ((steeringData == null ? void 0 : steeringData.VERSION) !== 1) {\n this.log(`Steering VERSION ${steeringData.VERSION} not supported!`);\n return;\n }\n this.updated = performance.now();\n this.timeToLoad = steeringData.TTL;\n const {\n 'RELOAD-URI': reloadUri,\n 'PATHWAY-CLONES': pathwayClones,\n 'PATHWAY-PRIORITY': pathwayPriority\n } = steeringData;\n if (reloadUri) {\n try {\n this.uri = new self.URL(reloadUri, url).href;\n } catch (error) {\n this.enabled = false;\n this.log(`Failed to parse Steering Manifest RELOAD-URI: ${reloadUri}`);\n return;\n }\n }\n this.scheduleRefresh(this.uri || context.url);\n if (pathwayClones) {\n this.clonePathways(pathwayClones);\n }\n const loadedSteeringData = {\n steeringManifest: steeringData,\n url: url.toString()\n };\n this.hls.trigger(Events.STEERING_MANIFEST_LOADED, loadedSteeringData);\n if (pathwayPriority) {\n this.updatePathwayPriority(pathwayPriority);\n }\n },\n onError: (error, context, networkDetails, stats) => {\n this.log(`Error loading steering manifest: ${error.code} ${error.text} (${context.url})`);\n this.stopLoad();\n if (error.code === 410) {\n this.enabled = false;\n this.log(`Steering manifest ${context.url} no longer available`);\n return;\n }\n let ttl = this.timeToLoad * 1000;\n if (error.code === 429) {\n const loader = this.loader;\n if (typeof (loader == null ? void 0 : loader.getResponseHeader) === 'function') {\n const retryAfter = loader.getResponseHeader('Retry-After');\n if (retryAfter) {\n ttl = parseFloat(retryAfter) * 1000;\n }\n }\n this.log(`Steering manifest ${context.url} rate limited`);\n return;\n }\n this.scheduleRefresh(this.uri || context.url, ttl);\n },\n onTimeout: (stats, context, networkDetails) => {\n this.log(`Timeout loading steering manifest (${context.url})`);\n this.scheduleRefresh(this.uri || context.url);\n }\n };\n this.log(`Requesting steering manifest: ${url}`);\n this.loader.load(context, loaderConfig, callbacks);\n }\n scheduleRefresh(uri, ttlMs = this.timeToLoad * 1000) {\n this.clearTimeout();\n this.reloadTimer = self.setTimeout(() => {\n var _this$hls;\n const media = (_this$hls = this.hls) == null ? void 0 : _this$hls.media;\n if (media && !media.ended) {\n this.loadSteeringManifest(uri);\n return;\n }\n this.scheduleRefresh(uri, this.timeToLoad * 1000);\n }, ttlMs);\n }\n}\nfunction cloneRenditionGroups(tracks, groupCloneMap, uriReplacement, cloneId) {\n if (!tracks) {\n return;\n }\n Object.keys(groupCloneMap).forEach(audioGroupId => {\n const clonedTracks = tracks.filter(track => track.groupId === audioGroupId).map(track => {\n const clonedTrack = _extends({}, track);\n clonedTrack.details = undefined;\n clonedTrack.attrs = new AttrList(clonedTrack.attrs);\n clonedTrack.url = clonedTrack.attrs.URI = performUriReplacement(track.url, track.attrs['STABLE-RENDITION-ID'], 'PER-RENDITION-URIS', uriReplacement);\n clonedTrack.groupId = clonedTrack.attrs['GROUP-ID'] = groupCloneMap[audioGroupId];\n clonedTrack.attrs['PATHWAY-ID'] = cloneId;\n return clonedTrack;\n });\n tracks.push(...clonedTracks);\n });\n}\nfunction performUriReplacement(uri, stableId, perOptionKey, uriReplacement) {\n const {\n HOST: host,\n PARAMS: params,\n [perOptionKey]: perOptionUris\n } = uriReplacement;\n let perVariantUri;\n if (stableId) {\n perVariantUri = perOptionUris == null ? void 0 : perOptionUris[stableId];\n if (perVariantUri) {\n uri = perVariantUri;\n }\n }\n const url = new self.URL(uri);\n if (host && !perVariantUri) {\n url.host = host;\n }\n if (params) {\n Object.keys(params).sort().forEach(key => {\n if (key) {\n url.searchParams.set(key, params[key]);\n }\n });\n }\n return url.href;\n}\n\n/**\n * Controller to deal with encrypted media extensions (EME)\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Encrypted_Media_Extensions_API\n *\n * @class\n * @constructor\n */\nclass EMEController extends Logger {\n constructor(hls) {\n super('eme', hls.logger);\n this.hls = void 0;\n this.config = void 0;\n this.media = null;\n this.mediaResolved = void 0;\n this.keyFormatPromise = null;\n this.keySystemAccessPromises = {};\n this._requestLicenseFailureCount = 0;\n this.mediaKeySessions = [];\n this.keyIdToKeySessionPromise = {};\n this.mediaKeys = null;\n this.setMediaKeysQueue = EMEController.CDMCleanupPromise ? [EMEController.CDMCleanupPromise] : [];\n this.bannedKeyIds = {};\n this.onMediaEncrypted = event => {\n const {\n initDataType,\n initData\n } = event;\n const logMessage = `\"${event.type}\" event: init data type: \"${initDataType}\"`;\n this.debug(logMessage);\n\n // Ignore event when initData is null\n if (initData === null) {\n return;\n }\n if (!this.keyFormatPromise) {\n let keySystems = Object.keys(this.keySystemAccessPromises);\n if (!keySystems.length) {\n keySystems = getKeySystemsForConfig(this.config);\n }\n const keyFormats = keySystems.map(keySystemDomainToKeySystemFormat).filter(k => !!k);\n this.keyFormatPromise = this.getKeyFormatPromise(keyFormats);\n }\n this.keyFormatPromise.then(keySystemFormat => {\n const keySystem = keySystemFormatToKeySystemDomain(keySystemFormat);\n if (initDataType !== 'sinf' || keySystem !== KeySystems.FAIRPLAY) {\n this.log(`Ignoring \"${event.type}\" event with init data type: \"${initDataType}\" for selected key-system ${keySystem}`);\n return;\n }\n\n // Match sinf keyId to playlist skd://keyId=\n let keyId;\n try {\n const json = bin2str(new Uint8Array(initData));\n const sinf = base64Decode(JSON.parse(json).sinf);\n const tenc = parseSinf(sinf);\n if (!tenc) {\n throw new Error(`'schm' box missing or not cbcs/cenc with schi > tenc`);\n }\n keyId = new Uint8Array(tenc.subarray(8, 24));\n } catch (error) {\n this.warn(`${logMessage} Failed to parse sinf: ${error}`);\n return;\n }\n const keyIdHex = arrayToHex(keyId);\n const {\n keyIdToKeySessionPromise,\n mediaKeySessions\n } = this;\n let keySessionContextPromise = keyIdToKeySessionPromise[keyIdHex];\n for (let i = 0; i < mediaKeySessions.length; i++) {\n // Match playlist key\n const keyContext = mediaKeySessions[i];\n const decryptdata = keyContext.decryptdata;\n if (!decryptdata.keyId) {\n continue;\n }\n const oldKeyIdHex = arrayToHex(decryptdata.keyId);\n if (arrayValuesMatch(keyId, decryptdata.keyId) || decryptdata.uri.replace(/-/g, '').indexOf(keyIdHex) !== -1) {\n keySessionContextPromise = keyIdToKeySessionPromise[oldKeyIdHex];\n if (!keySessionContextPromise) {\n continue;\n }\n if (decryptdata.pssh) {\n break;\n }\n delete keyIdToKeySessionPromise[oldKeyIdHex];\n decryptdata.pssh = new Uint8Array(initData);\n decryptdata.keyId = keyId;\n keySessionContextPromise = keyIdToKeySessionPromise[keyIdHex] = keySessionContextPromise.then(() => {\n return this.generateRequestWithPreferredKeySession(keyContext, initDataType, initData, 'encrypted-event-key-match');\n });\n keySessionContextPromise.catch(error => this.handleError(error));\n break;\n }\n }\n if (!keySessionContextPromise) {\n this.handleError(new Error(`Key ID ${keyIdHex} not encountered in playlist. Key-system sessions ${mediaKeySessions.length}.`));\n }\n }).catch(error => this.handleError(error));\n };\n this.onWaitingForKey = event => {\n this.log(`\"${event.type}\" event`);\n };\n this.hls = hls;\n this.config = hls.config;\n this.registerListeners();\n }\n destroy() {\n this.onDestroying();\n this.onMediaDetached();\n // Remove any references that could be held in config options or callbacks\n const config = this.config;\n config.requestMediaKeySystemAccessFunc = null;\n config.licenseXhrSetup = config.licenseResponseCallback = undefined;\n config.drmSystems = config.drmSystemOptions = {};\n // @ts-ignore\n this.hls = this.config = this.keyIdToKeySessionPromise = null;\n // @ts-ignore\n this.onMediaEncrypted = this.onWaitingForKey = null;\n }\n registerListeners() {\n this.hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n this.hls.on(Events.MEDIA_DETACHED, this.onMediaDetached, this);\n this.hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n this.hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n this.hls.on(Events.DESTROYING, this.onDestroying, this);\n }\n unregisterListeners() {\n this.hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n this.hls.off(Events.MEDIA_DETACHED, this.onMediaDetached, this);\n this.hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n this.hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n this.hls.off(Events.DESTROYING, this.onDestroying, this);\n }\n getLicenseServerUrl(keySystem) {\n const {\n drmSystems,\n widevineLicenseUrl\n } = this.config;\n const keySystemConfiguration = drmSystems == null ? void 0 : drmSystems[keySystem];\n if (keySystemConfiguration) {\n return keySystemConfiguration.licenseUrl;\n }\n\n // For backward compatibility\n if (keySystem === KeySystems.WIDEVINE && widevineLicenseUrl) {\n return widevineLicenseUrl;\n }\n }\n getLicenseServerUrlOrThrow(keySystem) {\n const url = this.getLicenseServerUrl(keySystem);\n if (url === undefined) {\n throw new Error(`no license server URL configured for key-system \"${keySystem}\"`);\n }\n return url;\n }\n getServerCertificateUrl(keySystem) {\n const {\n drmSystems\n } = this.config;\n const keySystemConfiguration = drmSystems == null ? void 0 : drmSystems[keySystem];\n if (keySystemConfiguration) {\n return keySystemConfiguration.serverCertificateUrl;\n } else {\n this.log(`No Server Certificate in config.drmSystems[\"${keySystem}\"]`);\n }\n }\n attemptKeySystemAccess(keySystemsToAttempt) {\n const levels = this.hls.levels;\n const uniqueCodec = (value, i, a) => !!value && a.indexOf(value) === i;\n const audioCodecs = levels.map(level => level.audioCodec).filter(uniqueCodec);\n const videoCodecs = levels.map(level => level.videoCodec).filter(uniqueCodec);\n if (audioCodecs.length + videoCodecs.length === 0) {\n videoCodecs.push('avc1.42e01e');\n }\n return new Promise((resolve, reject) => {\n const attempt = keySystems => {\n const keySystem = keySystems.shift();\n this.getMediaKeysPromise(keySystem, audioCodecs, videoCodecs).then(mediaKeys => resolve({\n keySystem,\n mediaKeys\n })).catch(error => {\n if (keySystems.length) {\n attempt(keySystems);\n } else if (error instanceof EMEKeyError) {\n reject(error);\n } else {\n reject(new EMEKeyError({\n type: ErrorTypes.KEY_SYSTEM_ERROR,\n details: ErrorDetails.KEY_SYSTEM_NO_ACCESS,\n error,\n fatal: true\n }, error.message));\n }\n });\n };\n attempt(keySystemsToAttempt);\n });\n }\n requestMediaKeySystemAccess(keySystem, supportedConfigurations) {\n const {\n requestMediaKeySystemAccessFunc\n } = this.config;\n if (!(typeof requestMediaKeySystemAccessFunc === 'function')) {\n let errMessage = `Configured requestMediaKeySystemAccess is not a function ${requestMediaKeySystemAccessFunc}`;\n if (requestMediaKeySystemAccess === null && self.location.protocol === 'http:') {\n errMessage = `navigator.requestMediaKeySystemAccess is not available over insecure protocol ${location.protocol}`;\n }\n return Promise.reject(new Error(errMessage));\n }\n return requestMediaKeySystemAccessFunc(keySystem, supportedConfigurations);\n }\n getMediaKeysPromise(keySystem, audioCodecs, videoCodecs) {\n var _keySystemAccessPromi;\n // This can throw, but is caught in event handler callpath\n const mediaKeySystemConfigs = getSupportedMediaKeySystemConfigurations(keySystem, audioCodecs, videoCodecs, this.config.drmSystemOptions || {});\n let keySystemAccessPromises = this.keySystemAccessPromises[keySystem];\n let keySystemAccess = (_keySystemAccessPromi = keySystemAccessPromises) == null ? void 0 : _keySystemAccessPromi.keySystemAccess;\n if (!keySystemAccess) {\n this.log(`Requesting encrypted media \"${keySystem}\" key-system access with config: ${stringify(mediaKeySystemConfigs)}`);\n keySystemAccess = this.requestMediaKeySystemAccess(keySystem, mediaKeySystemConfigs);\n const keySystemAccessPromisesNew = keySystemAccessPromises = this.keySystemAccessPromises[keySystem] = {\n keySystemAccess\n };\n keySystemAccess.catch(error => {\n this.log(`Failed to obtain access to key-system \"${keySystem}\": ${error}`);\n });\n return keySystemAccess.then(mediaKeySystemAccess => {\n this.log(`Access for key-system \"${mediaKeySystemAccess.keySystem}\" obtained`);\n const certificateRequest = this.fetchServerCertificate(keySystem);\n this.log(`Create media-keys for \"${keySystem}\"`);\n const mediaKeys = keySystemAccessPromisesNew.mediaKeys = mediaKeySystemAccess.createMediaKeys().then(mediaKeys => {\n this.log(`Media-keys created for \"${keySystem}\"`);\n keySystemAccessPromisesNew.hasMediaKeys = true;\n return certificateRequest.then(certificate => {\n if (certificate) {\n return this.setMediaKeysServerCertificate(mediaKeys, keySystem, certificate);\n }\n return mediaKeys;\n });\n });\n mediaKeys.catch(error => {\n this.error(`Failed to create media-keys for \"${keySystem}\"}: ${error}`);\n });\n return mediaKeys;\n });\n }\n return keySystemAccess.then(() => keySystemAccessPromises.mediaKeys);\n }\n createMediaKeySessionContext({\n decryptdata,\n keySystem,\n mediaKeys\n }) {\n this.log(`Creating key-system session \"${keySystem}\" keyId: ${arrayToHex(decryptdata.keyId || [])} keyUri: ${decryptdata.uri}`);\n const mediaKeysSession = mediaKeys.createSession();\n const mediaKeySessionContext = {\n decryptdata,\n keySystem,\n mediaKeys,\n mediaKeysSession,\n keyStatus: 'status-pending'\n };\n this.mediaKeySessions.push(mediaKeySessionContext);\n return mediaKeySessionContext;\n }\n renewKeySession(mediaKeySessionContext) {\n const decryptdata = mediaKeySessionContext.decryptdata;\n if (decryptdata.pssh) {\n const keySessionContext = this.createMediaKeySessionContext(mediaKeySessionContext);\n const keyId = getKeyIdString(decryptdata);\n const scheme = 'cenc';\n this.keyIdToKeySessionPromise[keyId] = this.generateRequestWithPreferredKeySession(keySessionContext, scheme, decryptdata.pssh.buffer, 'expired');\n } else {\n this.warn(`Could not renew expired session. Missing pssh initData.`);\n }\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.removeSession(mediaKeySessionContext);\n }\n updateKeySession(mediaKeySessionContext, data) {\n const keySession = mediaKeySessionContext.mediaKeysSession;\n this.log(`Updating key-session \"${keySession.sessionId}\" for keyId ${arrayToHex(mediaKeySessionContext.decryptdata.keyId || [])}\n } (data length: ${data.byteLength})`);\n return keySession.update(data);\n }\n getSelectedKeySystemFormats() {\n return Object.keys(this.keySystemAccessPromises).map(keySystem => ({\n keySystem,\n hasMediaKeys: this.keySystemAccessPromises[keySystem].hasMediaKeys\n })).filter(({\n hasMediaKeys\n }) => !!hasMediaKeys).map(({\n keySystem\n }) => keySystemDomainToKeySystemFormat(keySystem)).filter(keySystem => !!keySystem);\n }\n getKeySystemAccess(keySystemsToAttempt) {\n return this.getKeySystemSelectionPromise(keySystemsToAttempt).then(({\n keySystem,\n mediaKeys\n }) => {\n return this.attemptSetMediaKeys(keySystem, mediaKeys);\n });\n }\n selectKeySystem(keySystemsToAttempt) {\n return new Promise((resolve, reject) => {\n this.getKeySystemSelectionPromise(keySystemsToAttempt).then(({\n keySystem\n }) => {\n const keySystemFormat = keySystemDomainToKeySystemFormat(keySystem);\n if (keySystemFormat) {\n resolve(keySystemFormat);\n } else {\n reject(new Error(`Unable to find format for key-system \"${keySystem}\"`));\n }\n }).catch(reject);\n });\n }\n selectKeySystemFormat(frag) {\n const keyFormats = Object.keys(frag.levelkeys || {});\n if (!this.keyFormatPromise) {\n this.log(`Selecting key-system from fragment (sn: ${frag.sn} ${frag.type}: ${frag.level}) key formats ${keyFormats.join(', ')}`);\n this.keyFormatPromise = this.getKeyFormatPromise(keyFormats);\n }\n return this.keyFormatPromise;\n }\n getKeyFormatPromise(keyFormats) {\n const keySystemsInConfig = getKeySystemsForConfig(this.config);\n const keySystemsToAttempt = keyFormats.map(keySystemFormatToKeySystemDomain).filter(value => !!value && keySystemsInConfig.indexOf(value) !== -1);\n return this.selectKeySystem(keySystemsToAttempt);\n }\n getKeyStatus(decryptdata) {\n const {\n mediaKeySessions\n } = this;\n for (let i = 0; i < mediaKeySessions.length; i++) {\n const status = getKeyStatus(decryptdata, mediaKeySessions[i]);\n if (status) {\n return status;\n }\n }\n return undefined;\n }\n loadKey(data) {\n const decryptdata = data.keyInfo.decryptdata;\n const keyId = getKeyIdString(decryptdata);\n const badStatus = this.bannedKeyIds[keyId];\n if (badStatus || this.getKeyStatus(decryptdata) === 'internal-error') {\n const error = getKeyStatusError(badStatus || 'internal-error', decryptdata);\n this.handleError(error, data.frag);\n return Promise.reject(error);\n }\n const keyDetails = `(keyId: ${keyId} format: \"${decryptdata.keyFormat}\" method: ${decryptdata.method} uri: ${decryptdata.uri})`;\n this.log(`Starting session for key ${keyDetails}`);\n const keyContextPromise = this.keyIdToKeySessionPromise[keyId];\n if (!keyContextPromise) {\n const keySessionContextPromise = this.getKeySystemForKeyPromise(decryptdata).then(({\n keySystem,\n mediaKeys\n }) => {\n this.throwIfDestroyed();\n this.log(`Handle encrypted media sn: ${data.frag.sn} ${data.frag.type}: ${data.frag.level} using key ${keyDetails}`);\n return this.attemptSetMediaKeys(keySystem, mediaKeys).then(() => {\n this.throwIfDestroyed();\n return this.createMediaKeySessionContext({\n keySystem,\n mediaKeys,\n decryptdata\n });\n });\n }).then(keySessionContext => {\n const scheme = 'cenc';\n const initData = decryptdata.pssh ? decryptdata.pssh.buffer : null;\n return this.generateRequestWithPreferredKeySession(keySessionContext, scheme, initData, 'playlist-key');\n });\n keySessionContextPromise.catch(error => this.handleError(error, data.frag));\n this.keyIdToKeySessionPromise[keyId] = keySessionContextPromise;\n return keySessionContextPromise;\n }\n\n // Re-emit error for playlist key loading\n keyContextPromise.catch(error => {\n if (error instanceof EMEKeyError) {\n const errorData = _objectSpread2({}, error.data);\n if (this.getKeyStatus(decryptdata) === 'internal-error') {\n errorData.decryptdata = decryptdata;\n }\n const clonedError = new EMEKeyError(errorData, error.message);\n this.handleError(clonedError, data.frag);\n }\n });\n return keyContextPromise;\n }\n throwIfDestroyed(message = 'Invalid state') {\n if (!this.hls) {\n throw new Error('invalid state');\n }\n }\n handleError(error, frag) {\n if (!this.hls) {\n return;\n }\n if (error instanceof EMEKeyError) {\n if (frag) {\n error.data.frag = frag;\n }\n const levelKey = error.data.decryptdata;\n this.error(`${error.message}${levelKey ? ` (${arrayToHex(levelKey.keyId || [])})` : ''}`);\n this.hls.trigger(Events.ERROR, error.data);\n } else {\n this.error(error.message);\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.KEY_SYSTEM_ERROR,\n details: ErrorDetails.KEY_SYSTEM_NO_KEYS,\n error,\n fatal: true\n });\n }\n }\n getKeySystemForKeyPromise(decryptdata) {\n const keyId = getKeyIdString(decryptdata);\n const mediaKeySessionContext = this.keyIdToKeySessionPromise[keyId];\n if (!mediaKeySessionContext) {\n const keySystem = keySystemFormatToKeySystemDomain(decryptdata.keyFormat);\n const keySystemsToAttempt = keySystem ? [keySystem] : getKeySystemsForConfig(this.config);\n return this.attemptKeySystemAccess(keySystemsToAttempt);\n }\n return mediaKeySessionContext;\n }\n getKeySystemSelectionPromise(keySystemsToAttempt) {\n if (!keySystemsToAttempt.length) {\n keySystemsToAttempt = getKeySystemsForConfig(this.config);\n }\n if (keySystemsToAttempt.length === 0) {\n throw new EMEKeyError({\n type: ErrorTypes.KEY_SYSTEM_ERROR,\n details: ErrorDetails.KEY_SYSTEM_NO_CONFIGURED_LICENSE,\n fatal: true\n }, `Missing key-system license configuration options ${stringify({\n drmSystems: this.config.drmSystems\n })}`);\n }\n return this.attemptKeySystemAccess(keySystemsToAttempt);\n }\n attemptSetMediaKeys(keySystem, mediaKeys) {\n this.mediaResolved = undefined;\n if (this.mediaKeys === mediaKeys) {\n return Promise.resolve();\n }\n const queue = this.setMediaKeysQueue.slice();\n this.log(`Setting media-keys for \"${keySystem}\"`);\n // Only one setMediaKeys() can run at one time, and multiple setMediaKeys() operations\n // can be queued for execution for multiple key sessions.\n const setMediaKeysPromise = Promise.all(queue).then(() => {\n if (!this.media) {\n return new Promise((resolve, reject) => {\n this.mediaResolved = () => {\n this.mediaResolved = undefined;\n if (!this.media) {\n return reject(new Error('Attempted to set mediaKeys without media element attached'));\n }\n this.mediaKeys = mediaKeys;\n this.media.setMediaKeys(mediaKeys).then(resolve).catch(reject);\n };\n });\n }\n return this.media.setMediaKeys(mediaKeys);\n });\n this.mediaKeys = mediaKeys;\n this.setMediaKeysQueue.push(setMediaKeysPromise);\n return setMediaKeysPromise.then(() => {\n this.log(`Media-keys set for \"${keySystem}\"`);\n queue.push(setMediaKeysPromise);\n this.setMediaKeysQueue = this.setMediaKeysQueue.filter(p => queue.indexOf(p) === -1);\n });\n }\n generateRequestWithPreferredKeySession(context, initDataType, initData, reason) {\n var _this$config$drmSyste;\n const generateRequestFilter = (_this$config$drmSyste = this.config.drmSystems) == null || (_this$config$drmSyste = _this$config$drmSyste[context.keySystem]) == null ? void 0 : _this$config$drmSyste.generateRequest;\n if (generateRequestFilter) {\n try {\n const mappedInitData = generateRequestFilter.call(this.hls, initDataType, initData, context);\n if (!mappedInitData) {\n throw new Error('Invalid response from configured generateRequest filter');\n }\n initDataType = mappedInitData.initDataType;\n initData = mappedInitData.initData ? mappedInitData.initData : null;\n context.decryptdata.pssh = initData ? new Uint8Array(initData) : null;\n } catch (error) {\n this.warn(error.message);\n if (this.hls && this.hls.config.debug) {\n throw error;\n }\n }\n }\n if (initData === null) {\n this.log(`Skipping key-session request for \"${reason}\" (no initData)`);\n return Promise.resolve(context);\n }\n const keyId = getKeyIdString(context.decryptdata);\n const keyUri = context.decryptdata.uri;\n this.log(`Generating key-session request for \"${reason}\" keyId: ${keyId} URI: ${keyUri} (init data type: ${initDataType} length: ${initData.byteLength})`);\n const licenseStatus = new EventEmitter();\n const onmessage = context._onmessage = event => {\n const keySession = context.mediaKeysSession;\n if (!keySession) {\n licenseStatus.emit('error', new Error('invalid state'));\n return;\n }\n const {\n messageType,\n message\n } = event;\n this.log(`\"${messageType}\" message event for session \"${keySession.sessionId}\" message size: ${message.byteLength}`);\n if (messageType === 'license-request' || messageType === 'license-renewal') {\n this.renewLicense(context, message).catch(error => {\n if (licenseStatus.eventNames().length) {\n licenseStatus.emit('error', error);\n } else {\n this.handleError(error);\n }\n });\n } else if (messageType === 'license-release') {\n if (context.keySystem === KeySystems.FAIRPLAY) {\n this.updateKeySession(context, strToUtf8array('acknowledged')).then(() => this.removeSession(context)).catch(error => this.handleError(error));\n }\n } else {\n this.warn(`unhandled media key message type \"${messageType}\"`);\n }\n };\n const handleKeyStatus = (keyStatus, context) => {\n context.keyStatus = keyStatus;\n let keyError;\n if (keyStatus.startsWith('usable')) {\n licenseStatus.emit('resolved');\n } else if (keyStatus === 'internal-error' || keyStatus === 'output-restricted' || keyStatus === 'output-downscaled') {\n keyError = getKeyStatusError(keyStatus, context.decryptdata);\n } else if (keyStatus === 'expired') {\n keyError = new Error(`key expired (keyId: ${keyId})`);\n } else if (keyStatus === 'released') {\n keyError = new Error(`key released`);\n } else if (keyStatus === 'status-pending') ; else {\n this.warn(`unhandled key status change \"${keyStatus}\" (keyId: ${keyId})`);\n }\n if (keyError) {\n if (licenseStatus.eventNames().length) {\n licenseStatus.emit('error', keyError);\n } else {\n this.handleError(keyError);\n }\n }\n };\n const onkeystatuseschange = context._onkeystatuseschange = event => {\n const keySession = context.mediaKeysSession;\n if (!keySession) {\n licenseStatus.emit('error', new Error('invalid state'));\n return;\n }\n const keyStatuses = this.getKeyStatuses(context);\n const keyIds = Object.keys(keyStatuses);\n\n // exit if all keys are status-pending\n if (!keyIds.some(id => keyStatuses[id] !== 'status-pending')) {\n return;\n }\n\n // renew when a key status for a levelKey comes back expired\n if (keyStatuses[keyId] === 'expired') {\n // renew when a key status comes back expired\n this.log(`Expired key ${stringify(keyStatuses)} in key-session \"${context.mediaKeysSession.sessionId}\"`);\n this.renewKeySession(context);\n return;\n }\n let keyStatus = keyStatuses[keyId];\n if (keyStatus) {\n // handle status of current key\n handleKeyStatus(keyStatus, context);\n } else {\n var _context$keyStatusTim;\n // Timeout key-status\n const timeout = 1000;\n context.keyStatusTimeouts || (context.keyStatusTimeouts = {});\n (_context$keyStatusTim = context.keyStatusTimeouts)[keyId] || (_context$keyStatusTim[keyId] = self.setTimeout(() => {\n if (!context.mediaKeysSession || !this.mediaKeys) {\n return;\n }\n\n // Find key status in another session if missing (PlayReady #7519 no key-status \"single-key\" setup with shared key)\n const sessionKeyStatus = this.getKeyStatus(context.decryptdata);\n if (sessionKeyStatus && sessionKeyStatus !== 'status-pending') {\n this.log(`No status for keyId ${keyId} in key-session \"${context.mediaKeysSession.sessionId}\". Using session key-status ${sessionKeyStatus} from other session.`);\n return handleKeyStatus(sessionKeyStatus, context);\n }\n\n // Timeout key with internal-error\n this.log(`key status for ${keyId} in key-session \"${context.mediaKeysSession.sessionId}\" timed out after ${timeout}ms`);\n keyStatus = 'internal-error';\n handleKeyStatus(keyStatus, context);\n }, timeout));\n this.log(`No status for keyId ${keyId} (${stringify(keyStatuses)}).`);\n }\n };\n addEventListener(context.mediaKeysSession, 'message', onmessage);\n addEventListener(context.mediaKeysSession, 'keystatuseschange', onkeystatuseschange);\n const keyUsablePromise = new Promise((resolve, reject) => {\n licenseStatus.on('error', reject);\n licenseStatus.on('resolved', resolve);\n });\n return context.mediaKeysSession.generateRequest(initDataType, initData).then(() => {\n this.log(`Request generated for key-session \"${context.mediaKeysSession.sessionId}\" keyId: ${keyId} URI: ${keyUri}`);\n }).catch(error => {\n throw new EMEKeyError({\n type: ErrorTypes.KEY_SYSTEM_ERROR,\n details: ErrorDetails.KEY_SYSTEM_NO_SESSION,\n error,\n decryptdata: context.decryptdata,\n fatal: false\n }, `Error generating key-session request: ${error}`);\n }).then(() => keyUsablePromise).catch(error => {\n licenseStatus.removeAllListeners();\n return this.removeSession(context).then(() => {\n throw error;\n });\n }).then(() => {\n licenseStatus.removeAllListeners();\n return context;\n });\n }\n getKeyStatuses(mediaKeySessionContext) {\n const keyStatuses = {};\n mediaKeySessionContext.mediaKeysSession.keyStatuses.forEach((status, keyId) => {\n // keyStatuses.forEach is not standard API so the callback value looks weird on xboxone\n // xboxone callback(keyId, status) so we need to exchange them\n if (typeof keyId === 'string' && typeof status === 'object') {\n const temp = keyId;\n keyId = status;\n status = temp;\n }\n const keyIdArray = 'buffer' in keyId ? new Uint8Array(keyId.buffer, keyId.byteOffset, keyId.byteLength) : new Uint8Array(keyId);\n if (mediaKeySessionContext.keySystem === KeySystems.PLAYREADY && keyIdArray.length === 16) {\n // On some devices, the key ID has already been converted for endianness.\n // In such cases, this key ID is the one we need to cache.\n const originKeyIdWithStatusChange = arrayToHex(keyIdArray);\n // Cache the original key IDs to ensure compatibility across all cases.\n keyStatuses[originKeyIdWithStatusChange] = status;\n changeEndianness(keyIdArray);\n }\n const keyIdWithStatusChange = arrayToHex(keyIdArray);\n // Add to banned keys to prevent playlist usage and license requests\n if (status === 'internal-error') {\n this.bannedKeyIds[keyIdWithStatusChange] = status;\n }\n this.log(`key status change \"${status}\" for keyStatuses keyId: ${keyIdWithStatusChange} key-session \"${mediaKeySessionContext.mediaKeysSession.sessionId}\"`);\n keyStatuses[keyIdWithStatusChange] = status;\n });\n return keyStatuses;\n }\n fetchServerCertificate(keySystem) {\n const config = this.config;\n const Loader = config.loader;\n const certLoader = new Loader(config);\n const url = this.getServerCertificateUrl(keySystem);\n if (!url) {\n return Promise.resolve();\n }\n this.log(`Fetching server certificate for \"${keySystem}\"`);\n return new Promise((resolve, reject) => {\n const loaderContext = {\n responseType: 'arraybuffer',\n url\n };\n const loadPolicy = config.certLoadPolicy.default;\n const loaderConfig = {\n loadPolicy,\n timeout: loadPolicy.maxLoadTimeMs,\n maxRetry: 0,\n retryDelay: 0,\n maxRetryDelay: 0\n };\n const loaderCallbacks = {\n onSuccess: (response, stats, context, networkDetails) => {\n resolve(response.data);\n },\n onError: (response, contex, networkDetails, stats) => {\n reject(new EMEKeyError({\n type: ErrorTypes.KEY_SYSTEM_ERROR,\n details: ErrorDetails.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED,\n fatal: true,\n networkDetails,\n response: _objectSpread2({\n url: loaderContext.url,\n data: undefined\n }, response)\n }, `\"${keySystem}\" certificate request failed (${url}). Status: ${response.code} (${response.text})`));\n },\n onTimeout: (stats, context, networkDetails) => {\n reject(new EMEKeyError({\n type: ErrorTypes.KEY_SYSTEM_ERROR,\n details: ErrorDetails.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED,\n fatal: true,\n networkDetails,\n response: {\n url: loaderContext.url,\n data: undefined\n }\n }, `\"${keySystem}\" certificate request timed out (${url})`));\n },\n onAbort: (stats, context, networkDetails) => {\n reject(new Error('aborted'));\n }\n };\n certLoader.load(loaderContext, loaderConfig, loaderCallbacks);\n });\n }\n setMediaKeysServerCertificate(mediaKeys, keySystem, cert) {\n return new Promise((resolve, reject) => {\n mediaKeys.setServerCertificate(cert).then(success => {\n this.log(`setServerCertificate ${success ? 'success' : 'not supported by CDM'} (${cert.byteLength}) on \"${keySystem}\"`);\n resolve(mediaKeys);\n }).catch(error => {\n reject(new EMEKeyError({\n type: ErrorTypes.KEY_SYSTEM_ERROR,\n details: ErrorDetails.KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED,\n error,\n fatal: true\n }, error.message));\n });\n });\n }\n renewLicense(context, keyMessage) {\n return this.requestLicense(context, new Uint8Array(keyMessage)).then(data => {\n return this.updateKeySession(context, new Uint8Array(data)).catch(error => {\n throw new EMEKeyError({\n type: ErrorTypes.KEY_SYSTEM_ERROR,\n details: ErrorDetails.KEY_SYSTEM_SESSION_UPDATE_FAILED,\n decryptdata: context.decryptdata,\n error,\n fatal: false\n }, error.message);\n });\n });\n }\n unpackPlayReadyKeyMessage(xhr, licenseChallenge) {\n // On Edge, the raw license message is UTF-16-encoded XML. We need\n // to unpack the Challenge element (base64-encoded string containing the\n // actual license request) and any HttpHeader elements (sent as request\n // headers).\n // For PlayReady CDMs, we need to dig the Challenge out of the XML.\n const xmlString = String.fromCharCode.apply(null, new Uint16Array(licenseChallenge.buffer));\n if (!xmlString.includes('PlayReadyKeyMessage')) {\n // This does not appear to be a wrapped message as on Edge. Some\n // clients do not need this unwrapping, so we will assume this is one of\n // them. Note that \"xml\" at this point probably looks like random\n // garbage, since we interpreted UTF-8 as UTF-16.\n xhr.setRequestHeader('Content-Type', 'text/xml; charset=utf-8');\n return licenseChallenge;\n }\n const keyMessageXml = new DOMParser().parseFromString(xmlString, 'application/xml');\n // Set request headers.\n const headers = keyMessageXml.querySelectorAll('HttpHeader');\n if (headers.length > 0) {\n let header;\n for (let i = 0, len = headers.length; i < len; i++) {\n var _header$querySelector, _header$querySelector2;\n header = headers[i];\n const name = (_header$querySelector = header.querySelector('name')) == null ? void 0 : _header$querySelector.textContent;\n const value = (_header$querySelector2 = header.querySelector('value')) == null ? void 0 : _header$querySelector2.textContent;\n if (name && value) {\n xhr.setRequestHeader(name, value);\n }\n }\n }\n const challengeElement = keyMessageXml.querySelector('Challenge');\n const challengeText = challengeElement == null ? void 0 : challengeElement.textContent;\n if (!challengeText) {\n throw new Error(`Cannot find <Challenge> in key message`);\n }\n return strToUtf8array(atob(challengeText));\n }\n setupLicenseXHR(xhr, url, keysListItem, licenseChallenge) {\n const licenseXhrSetup = this.config.licenseXhrSetup;\n if (!licenseXhrSetup) {\n xhr.open('POST', url, true);\n return Promise.resolve({\n xhr,\n licenseChallenge\n });\n }\n return Promise.resolve().then(() => {\n if (!keysListItem.decryptdata) {\n throw new Error('Key removed');\n }\n return licenseXhrSetup.call(this.hls, xhr, url, keysListItem, licenseChallenge);\n }).catch(error => {\n if (!keysListItem.decryptdata) {\n // Key session removed. Cancel license request.\n throw error;\n }\n // let's try to open before running setup\n xhr.open('POST', url, true);\n return licenseXhrSetup.call(this.hls, xhr, url, keysListItem, licenseChallenge);\n }).then(licenseXhrSetupResult => {\n // if licenseXhrSetup did not yet call open, let's do it now\n if (!xhr.readyState) {\n xhr.open('POST', url, true);\n }\n const finalLicenseChallenge = licenseXhrSetupResult ? licenseXhrSetupResult : licenseChallenge;\n return {\n xhr,\n licenseChallenge: finalLicenseChallenge\n };\n });\n }\n requestLicense(keySessionContext, licenseChallenge) {\n const keyLoadPolicy = this.config.keyLoadPolicy.default;\n return new Promise((resolve, reject) => {\n const url = this.getLicenseServerUrlOrThrow(keySessionContext.keySystem);\n this.log(`Sending license request to URL: ${url}`);\n const xhr = new XMLHttpRequest();\n xhr.responseType = 'arraybuffer';\n xhr.onreadystatechange = () => {\n if (!this.hls || !keySessionContext.mediaKeysSession) {\n return reject(new Error('invalid state'));\n }\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n this._requestLicenseFailureCount = 0;\n let data = xhr.response;\n this.log(`License received ${data instanceof ArrayBuffer ? data.byteLength : data}`);\n const licenseResponseCallback = this.config.licenseResponseCallback;\n if (licenseResponseCallback) {\n try {\n data = licenseResponseCallback.call(this.hls, xhr, url, keySessionContext);\n } catch (error) {\n this.error(error);\n }\n }\n resolve(data);\n } else {\n const retryConfig = keyLoadPolicy.errorRetry;\n const maxNumRetry = retryConfig ? retryConfig.maxNumRetry : 0;\n this._requestLicenseFailureCount++;\n if (this._requestLicenseFailureCount > maxNumRetry || xhr.status >= 400 && xhr.status < 500) {\n reject(new EMEKeyError({\n type: ErrorTypes.KEY_SYSTEM_ERROR,\n details: ErrorDetails.KEY_SYSTEM_LICENSE_REQUEST_FAILED,\n decryptdata: keySessionContext.decryptdata,\n fatal: true,\n networkDetails: xhr,\n response: {\n url,\n data: undefined,\n code: xhr.status,\n text: xhr.statusText\n }\n }, `License Request XHR failed (${url}). Status: ${xhr.status} (${xhr.statusText})`));\n } else {\n const attemptsLeft = maxNumRetry - this._requestLicenseFailureCount + 1;\n this.warn(`Retrying license request, ${attemptsLeft} attempts left`);\n this.requestLicense(keySessionContext, licenseChallenge).then(resolve, reject);\n }\n }\n }\n };\n if (keySessionContext.licenseXhr && keySessionContext.licenseXhr.readyState !== XMLHttpRequest.DONE) {\n keySessionContext.licenseXhr.abort();\n }\n keySessionContext.licenseXhr = xhr;\n this.setupLicenseXHR(xhr, url, keySessionContext, licenseChallenge).then(({\n xhr,\n licenseChallenge\n }) => {\n if (keySessionContext.keySystem == KeySystems.PLAYREADY) {\n licenseChallenge = this.unpackPlayReadyKeyMessage(xhr, licenseChallenge);\n }\n xhr.send(licenseChallenge);\n }).catch(reject);\n });\n }\n onDestroying() {\n this.unregisterListeners();\n this._clear();\n }\n onMediaAttached(event, data) {\n if (!this.config.emeEnabled) {\n return;\n }\n const media = data.media;\n\n // keep reference of media\n this.media = media;\n addEventListener(media, 'encrypted', this.onMediaEncrypted);\n addEventListener(media, 'waitingforkey', this.onWaitingForKey);\n const mediaResolved = this.mediaResolved;\n if (mediaResolved) {\n mediaResolved();\n } else {\n this.mediaKeys = media.mediaKeys;\n }\n }\n onMediaDetached() {\n const media = this.media;\n if (media) {\n removeEventListener(media, 'encrypted', this.onMediaEncrypted);\n removeEventListener(media, 'waitingforkey', this.onWaitingForKey);\n this.media = null;\n this.mediaKeys = null;\n }\n }\n _clear() {\n var _media$setMediaKeys;\n this._requestLicenseFailureCount = 0;\n this.keyIdToKeySessionPromise = {};\n this.bannedKeyIds = {};\n const mediaResolved = this.mediaResolved;\n if (mediaResolved) {\n mediaResolved();\n }\n if (!this.mediaKeys && !this.mediaKeySessions.length) {\n return;\n }\n const media = this.media;\n const mediaKeysList = this.mediaKeySessions.slice();\n this.mediaKeySessions = [];\n this.mediaKeys = null;\n LevelKey.clearKeyUriToKeyIdMap();\n\n // Close all sessions and remove media keys from the video element.\n const keySessionCount = mediaKeysList.length;\n EMEController.CDMCleanupPromise = Promise.all(mediaKeysList.map(mediaKeySessionContext => this.removeSession(mediaKeySessionContext)).concat((media == null || (_media$setMediaKeys = media.setMediaKeys(null)) == null ? void 0 : _media$setMediaKeys.catch(error => {\n this.log(`Could not clear media keys: ${error}`);\n if (!this.hls) return;\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.KEY_SYSTEM_DESTROY_MEDIA_KEYS_ERROR,\n fatal: false,\n error: new Error(`Could not clear media keys: ${error}`)\n });\n })) || Promise.resolve())).catch(error => {\n this.log(`Could not close sessions and clear media keys: ${error}`);\n if (!this.hls) return;\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.KEY_SYSTEM_DESTROY_CLOSE_SESSION_ERROR,\n fatal: false,\n error: new Error(`Could not close sessions and clear media keys: ${error}`)\n });\n }).then(() => {\n if (keySessionCount) {\n this.log('finished closing key sessions and clearing media keys');\n }\n });\n }\n onManifestLoading() {\n this._clear();\n }\n onManifestLoaded(event, {\n sessionKeys\n }) {\n if (!sessionKeys || !this.config.emeEnabled) {\n return;\n }\n if (!this.keyFormatPromise) {\n const keyFormats = sessionKeys.reduce((formats, sessionKey) => {\n if (formats.indexOf(sessionKey.keyFormat) === -1) {\n formats.push(sessionKey.keyFormat);\n }\n return formats;\n }, []);\n this.log(`Selecting key-system from session-keys ${keyFormats.join(', ')}`);\n this.keyFormatPromise = this.getKeyFormatPromise(keyFormats);\n }\n }\n removeSession(mediaKeySessionContext) {\n const {\n mediaKeysSession,\n licenseXhr,\n decryptdata\n } = mediaKeySessionContext;\n if (mediaKeysSession) {\n this.log(`Remove licenses and keys and close session \"${mediaKeysSession.sessionId}\" keyId: ${arrayToHex((decryptdata == null ? void 0 : decryptdata.keyId) || [])}`);\n if (mediaKeySessionContext._onmessage) {\n mediaKeysSession.removeEventListener('message', mediaKeySessionContext._onmessage);\n mediaKeySessionContext._onmessage = undefined;\n }\n if (mediaKeySessionContext._onkeystatuseschange) {\n mediaKeysSession.removeEventListener('keystatuseschange', mediaKeySessionContext._onkeystatuseschange);\n mediaKeySessionContext._onkeystatuseschange = undefined;\n }\n if (licenseXhr && licenseXhr.readyState !== XMLHttpRequest.DONE) {\n licenseXhr.abort();\n }\n mediaKeySessionContext.mediaKeysSession = mediaKeySessionContext.decryptdata = mediaKeySessionContext.licenseXhr = undefined;\n const index = this.mediaKeySessions.indexOf(mediaKeySessionContext);\n if (index > -1) {\n this.mediaKeySessions.splice(index, 1);\n }\n const {\n keyStatusTimeouts\n } = mediaKeySessionContext;\n if (keyStatusTimeouts) {\n Object.keys(keyStatusTimeouts).forEach(keyId => self.clearTimeout(keyStatusTimeouts[keyId]));\n }\n const {\n drmSystemOptions\n } = this.config;\n const removePromise = isPersistentSessionType(drmSystemOptions) ? new Promise((resolve, reject) => {\n self.setTimeout(() => reject(new Error(`MediaKeySession.remove() timeout`)), 8000);\n mediaKeysSession.remove().then(resolve).catch(reject);\n }) : Promise.resolve();\n return removePromise.catch(error => {\n this.log(`Could not remove session: ${error}`);\n if (!this.hls) return;\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.KEY_SYSTEM_DESTROY_REMOVE_SESSION_ERROR,\n fatal: false,\n error: new Error(`Could not remove session: ${error}`)\n });\n }).then(() => {\n return mediaKeysSession.close();\n }).catch(error => {\n this.log(`Could not close session: ${error}`);\n if (!this.hls) return;\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.KEY_SYSTEM_DESTROY_CLOSE_SESSION_ERROR,\n fatal: false,\n error: new Error(`Could not close session: ${error}`)\n });\n });\n }\n return Promise.resolve();\n }\n}\nEMEController.CDMCleanupPromise = void 0;\nfunction getKeyIdString(decryptdata) {\n if (!decryptdata) {\n throw new Error('Could not read keyId of undefined decryptdata');\n }\n if (decryptdata.keyId === null) {\n throw new Error('keyId is null');\n }\n return arrayToHex(decryptdata.keyId);\n}\nfunction getKeyStatus(decryptdata, keyContext) {\n if (decryptdata.keyId && keyContext.mediaKeysSession.keyStatuses.has(decryptdata.keyId)) {\n return keyContext.mediaKeysSession.keyStatuses.get(decryptdata.keyId);\n }\n if (decryptdata.matches(keyContext.decryptdata)) {\n return keyContext.keyStatus;\n }\n return undefined;\n}\nclass EMEKeyError extends Error {\n constructor(data, message) {\n super(message);\n this.data = void 0;\n data.error || (data.error = new Error(message));\n this.data = data;\n data.err = data.error;\n }\n}\nfunction getKeyStatusError(keyStatus, decryptdata) {\n const outputRestricted = keyStatus === 'output-restricted';\n const details = outputRestricted ? ErrorDetails.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED : ErrorDetails.KEY_SYSTEM_STATUS_INTERNAL_ERROR;\n return new EMEKeyError({\n type: ErrorTypes.KEY_SYSTEM_ERROR,\n details,\n fatal: false,\n decryptdata\n }, outputRestricted ? 'HDCP level output restricted' : `key status changed to \"${keyStatus}\"`);\n}\n\nclass FPSController {\n constructor(hls) {\n this.hls = void 0;\n this.isVideoPlaybackQualityAvailable = false;\n this.timer = void 0;\n this.media = null;\n this.lastTime = void 0;\n this.lastDroppedFrames = 0;\n this.lastDecodedFrames = 0;\n // stream controller must be provided as a dependency!\n this.streamController = void 0;\n this.hls = hls;\n this.registerListeners();\n }\n setStreamController(streamController) {\n this.streamController = streamController;\n }\n registerListeners() {\n this.hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n this.hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n }\n unregisterListeners() {\n this.hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n this.hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n }\n destroy() {\n if (this.timer) {\n clearInterval(this.timer);\n }\n this.unregisterListeners();\n this.isVideoPlaybackQualityAvailable = false;\n this.media = null;\n }\n onMediaAttaching(event, data) {\n const config = this.hls.config;\n if (config.capLevelOnFPSDrop) {\n const media = data.media instanceof self.HTMLVideoElement ? data.media : null;\n this.media = media;\n if (media && typeof media.getVideoPlaybackQuality === 'function') {\n this.isVideoPlaybackQualityAvailable = true;\n }\n self.clearInterval(this.timer);\n this.timer = self.setInterval(this.checkFPSInterval.bind(this), config.fpsDroppedMonitoringPeriod);\n }\n }\n onMediaDetaching() {\n this.media = null;\n }\n checkFPS(video, decodedFrames, droppedFrames) {\n const currentTime = performance.now();\n if (decodedFrames) {\n if (this.lastTime) {\n const currentPeriod = currentTime - this.lastTime;\n const currentDropped = droppedFrames - this.lastDroppedFrames;\n const currentDecoded = decodedFrames - this.lastDecodedFrames;\n const droppedFPS = 1000 * currentDropped / currentPeriod;\n const hls = this.hls;\n hls.trigger(Events.FPS_DROP, {\n currentDropped: currentDropped,\n currentDecoded: currentDecoded,\n totalDroppedFrames: droppedFrames\n });\n if (droppedFPS > 0) {\n // hls.logger.log('checkFPS : droppedFPS/decodedFPS:' + droppedFPS/(1000 * currentDecoded / currentPeriod));\n if (currentDropped > hls.config.fpsDroppedMonitoringThreshold * currentDecoded) {\n let currentLevel = hls.currentLevel;\n hls.logger.warn('drop FPS ratio greater than max allowed value for currentLevel: ' + currentLevel);\n if (currentLevel > 0 && (hls.autoLevelCapping === -1 || hls.autoLevelCapping >= currentLevel)) {\n currentLevel = currentLevel - 1;\n hls.trigger(Events.FPS_DROP_LEVEL_CAPPING, {\n level: currentLevel,\n droppedLevel: hls.currentLevel\n });\n hls.autoLevelCapping = currentLevel;\n this.streamController.nextLevelSwitch();\n }\n }\n }\n }\n this.lastTime = currentTime;\n this.lastDroppedFrames = droppedFrames;\n this.lastDecodedFrames = decodedFrames;\n }\n }\n checkFPSInterval() {\n const video = this.media;\n if (video) {\n if (this.isVideoPlaybackQualityAvailable) {\n const videoPlaybackQuality = video.getVideoPlaybackQuality();\n this.checkFPS(video, videoPlaybackQuality.totalVideoFrames, videoPlaybackQuality.droppedVideoFrames);\n } else {\n // HTMLVideoElement doesn't include the webkit types\n this.checkFPS(video, video.webkitDecodedFrameCount, video.webkitDroppedFrameCount);\n }\n }\n }\n}\n\nfunction sendAddTrackEvent(track, videoEl) {\n let event;\n try {\n event = new Event('addtrack');\n } catch (err) {\n // for IE11\n event = document.createEvent('Event');\n event.initEvent('addtrack', false, false);\n }\n event.track = track;\n videoEl.dispatchEvent(event);\n}\nfunction addCueToTrack(track, cue) {\n // Sometimes there are cue overlaps on segmented vtts so the same\n // cue can appear more than once in different vtt files.\n // This avoid showing duplicated cues with same timecode and text.\n const mode = track.mode;\n if (mode === 'disabled') {\n track.mode = 'hidden';\n }\n if (track.cues && !track.cues.getCueById(cue.id)) {\n try {\n track.addCue(cue);\n if (!track.cues.getCueById(cue.id)) {\n throw new Error(`addCue is failed for: ${cue}`);\n }\n } catch (err) {\n logger.debug(`[texttrack-utils]: ${err}`);\n try {\n const textTrackCue = new self.TextTrackCue(cue.startTime, cue.endTime, cue.text);\n textTrackCue.id = cue.id;\n track.addCue(textTrackCue);\n } catch (err2) {\n logger.debug(`[texttrack-utils]: Legacy TextTrackCue fallback failed: ${err2}`);\n }\n }\n }\n if (mode === 'disabled') {\n track.mode = mode;\n }\n}\nfunction clearCurrentCues(track, enterHandler) {\n // When track.mode is disabled, track.cues will be null.\n // To guarantee the removal of cues, we need to temporarily\n // change the mode to hidden\n const mode = track.mode;\n if (mode === 'disabled') {\n track.mode = 'hidden';\n }\n if (track.cues) {\n for (let i = track.cues.length; i--;) {\n if (enterHandler) {\n track.cues[i].removeEventListener('enter', enterHandler);\n }\n track.removeCue(track.cues[i]);\n }\n }\n if (mode === 'disabled') {\n track.mode = mode;\n }\n}\nfunction removeCuesInRange(track, start, end, predicate) {\n const mode = track.mode;\n if (mode === 'disabled') {\n track.mode = 'hidden';\n }\n if (track.cues && track.cues.length > 0) {\n const cues = getCuesInRange(track.cues, start, end);\n for (let i = 0; i < cues.length; i++) {\n if (!predicate || predicate(cues[i])) {\n track.removeCue(cues[i]);\n }\n }\n }\n if (mode === 'disabled') {\n track.mode = mode;\n }\n}\n\n// Find first cue starting at or after given time.\n// Modified version of binary search O(log(n)).\nfunction getFirstCueIndexFromTime(cues, time) {\n // If first cue starts at or after time, start there\n if (time <= cues[0].startTime) {\n return 0;\n }\n // If the last cue ends before time there is no overlap\n const len = cues.length - 1;\n if (time > cues[len].endTime) {\n return -1;\n }\n let left = 0;\n let right = len;\n let mid;\n while (left <= right) {\n mid = Math.floor((right + left) / 2);\n if (time < cues[mid].startTime) {\n right = mid - 1;\n } else if (time > cues[mid].startTime && left < len) {\n left = mid + 1;\n } else {\n // If it's not lower or higher, it must be equal.\n return mid;\n }\n }\n // At this point, left and right have swapped.\n // No direct match was found, left or right element must be the closest. Check which one has the smallest diff.\n return cues[left].startTime - time < time - cues[right].startTime ? left : right;\n}\nfunction getCuesInRange(cues, start, end) {\n const cuesFound = [];\n const firstCueInRange = getFirstCueIndexFromTime(cues, start);\n if (firstCueInRange > -1) {\n for (let i = firstCueInRange, len = cues.length; i < len; i++) {\n const cue = cues[i];\n if (cue.startTime >= start && cue.endTime <= end) {\n cuesFound.push(cue);\n } else if (cue.startTime > end) {\n return cuesFound;\n }\n }\n }\n return cuesFound;\n}\nfunction filterSubtitleTracks(textTrackList) {\n const tracks = [];\n for (let i = 0; i < textTrackList.length; i++) {\n const track = textTrackList[i];\n // Edge adds a track without a label; we don't want to use it\n if ((track.kind === 'subtitles' || track.kind === 'captions') && track.label) {\n tracks.push(textTrackList[i]);\n }\n }\n return tracks;\n}\n\nclass SubtitleTrackController extends BasePlaylistController {\n constructor(hls) {\n super(hls, 'subtitle-track-controller');\n this.media = null;\n this.tracks = [];\n this.groupIds = null;\n this.tracksInGroup = [];\n this.trackId = -1;\n this.currentTrack = null;\n this.selectDefaultTrack = true;\n this.queuedDefaultTrack = -1;\n this.useTextTrackPolling = false;\n this.subtitlePollingInterval = -1;\n this._subtitleDisplay = true;\n this.asyncPollTrackChange = () => this.pollTrackChange(0);\n this.onTextTracksChanged = () => {\n if (!this.useTextTrackPolling) {\n self.clearInterval(this.subtitlePollingInterval);\n }\n // Media is undefined when switching streams via loadSource()\n if (!this.media || !this.hls.config.renderTextTracksNatively) {\n return;\n }\n let textTrack = null;\n const tracks = filterSubtitleTracks(this.media.textTracks);\n for (let i = 0; i < tracks.length; i++) {\n if (tracks[i].mode === 'hidden') {\n // Do not break in case there is a following track with showing.\n textTrack = tracks[i];\n } else if (tracks[i].mode === 'showing') {\n textTrack = tracks[i];\n break;\n }\n }\n\n // Find internal track index for TextTrack\n const trackId = this.findTrackForTextTrack(textTrack);\n if (this.subtitleTrack !== trackId) {\n this.setSubtitleTrack(trackId);\n }\n };\n this.registerListeners();\n }\n destroy() {\n this.unregisterListeners();\n this.tracks.length = 0;\n this.tracksInGroup.length = 0;\n this.currentTrack = null;\n // @ts-ignore\n this.onTextTracksChanged = this.asyncPollTrackChange = null;\n super.destroy();\n }\n get subtitleDisplay() {\n return this._subtitleDisplay;\n }\n set subtitleDisplay(value) {\n this._subtitleDisplay = value;\n if (this.trackId > -1) {\n this.toggleTrackModes();\n }\n }\n registerListeners() {\n const {\n hls\n } = this;\n hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.on(Events.LEVEL_LOADING, this.onLevelLoading, this);\n hls.on(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n hls.on(Events.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this);\n hls.on(Events.ERROR, this.onError, this);\n }\n unregisterListeners() {\n const {\n hls\n } = this;\n hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.off(Events.LEVEL_LOADING, this.onLevelLoading, this);\n hls.off(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n hls.off(Events.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this);\n hls.off(Events.ERROR, this.onError, this);\n }\n\n // Listen for subtitle track change, then extract the current track ID.\n onMediaAttached(event, data) {\n this.media = data.media;\n if (!this.media) {\n return;\n }\n if (this.queuedDefaultTrack > -1) {\n this.subtitleTrack = this.queuedDefaultTrack;\n this.queuedDefaultTrack = -1;\n }\n this.useTextTrackPolling = !(this.media.textTracks && 'onchange' in this.media.textTracks);\n if (this.useTextTrackPolling) {\n this.pollTrackChange(500);\n } else {\n this.media.textTracks.addEventListener('change', this.asyncPollTrackChange);\n }\n }\n pollTrackChange(timeout) {\n self.clearInterval(this.subtitlePollingInterval);\n this.subtitlePollingInterval = self.setInterval(this.onTextTracksChanged, timeout);\n }\n onMediaDetaching(event, data) {\n const media = this.media;\n if (!media) {\n return;\n }\n const transferringMedia = !!data.transferMedia;\n self.clearInterval(this.subtitlePollingInterval);\n if (!this.useTextTrackPolling) {\n media.textTracks.removeEventListener('change', this.asyncPollTrackChange);\n }\n if (this.trackId > -1) {\n this.queuedDefaultTrack = this.trackId;\n }\n\n // Disable all subtitle tracks before detachment so when reattached only tracks in that content are enabled.\n this.subtitleTrack = -1;\n this.media = null;\n if (transferringMedia) {\n return;\n }\n const textTracks = filterSubtitleTracks(media.textTracks);\n // Clear loaded cues on media detachment from tracks\n textTracks.forEach(track => {\n clearCurrentCues(track);\n });\n }\n onManifestLoading() {\n this.tracks = [];\n this.groupIds = null;\n this.tracksInGroup = [];\n this.trackId = -1;\n this.currentTrack = null;\n this.selectDefaultTrack = true;\n }\n\n // Fired whenever a new manifest is loaded.\n onManifestParsed(event, data) {\n this.tracks = data.subtitleTracks;\n }\n onSubtitleTrackLoaded(event, data) {\n const {\n id,\n groupId,\n details\n } = data;\n const trackInActiveGroup = this.tracksInGroup[id];\n if (!trackInActiveGroup || trackInActiveGroup.groupId !== groupId) {\n this.warn(`Subtitle track with id:${id} and group:${groupId} not found in active group ${trackInActiveGroup == null ? void 0 : trackInActiveGroup.groupId}`);\n return;\n }\n const curDetails = trackInActiveGroup.details;\n trackInActiveGroup.details = data.details;\n this.log(`Subtitle track ${id} \"${trackInActiveGroup.name}\" lang:${trackInActiveGroup.lang} group:${groupId} loaded [${details.startSN}-${details.endSN}]`);\n if (id === this.trackId) {\n this.playlistLoaded(id, data, curDetails);\n }\n }\n onLevelLoading(event, data) {\n this.switchLevel(data.level);\n }\n onLevelSwitching(event, data) {\n this.switchLevel(data.level);\n }\n switchLevel(levelIndex) {\n const levelInfo = this.hls.levels[levelIndex];\n if (!levelInfo) {\n return;\n }\n const subtitleGroups = levelInfo.subtitleGroups || null;\n const currentGroups = this.groupIds;\n let currentTrack = this.currentTrack;\n if (!subtitleGroups || (currentGroups == null ? void 0 : currentGroups.length) !== (subtitleGroups == null ? void 0 : subtitleGroups.length) || subtitleGroups != null && subtitleGroups.some(groupId => (currentGroups == null ? void 0 : currentGroups.indexOf(groupId)) === -1)) {\n this.groupIds = subtitleGroups;\n this.trackId = -1;\n this.currentTrack = null;\n const subtitleTracks = this.tracks.filter(track => !subtitleGroups || subtitleGroups.indexOf(track.groupId) !== -1);\n if (subtitleTracks.length) {\n // Disable selectDefaultTrack if there are no default tracks\n if (this.selectDefaultTrack && !subtitleTracks.some(track => track.default)) {\n this.selectDefaultTrack = false;\n }\n // track.id should match hls.audioTracks index\n subtitleTracks.forEach((track, i) => {\n track.id = i;\n });\n } else if (!currentTrack && !this.tracksInGroup.length) {\n // Do not dispatch SUBTITLE_TRACKS_UPDATED when there were and are no tracks\n return;\n }\n this.tracksInGroup = subtitleTracks;\n\n // Find preferred track\n const subtitlePreference = this.hls.config.subtitlePreference;\n if (!currentTrack && subtitlePreference) {\n this.selectDefaultTrack = false;\n const groupIndex = findMatchingOption(subtitlePreference, subtitleTracks);\n if (groupIndex > -1) {\n currentTrack = subtitleTracks[groupIndex];\n } else {\n const allIndex = findMatchingOption(subtitlePreference, this.tracks);\n currentTrack = this.tracks[allIndex];\n }\n }\n\n // Select initial track\n let trackId = this.findTrackId(currentTrack);\n if (trackId === -1 && currentTrack) {\n trackId = this.findTrackId(null);\n }\n\n // Dispatch events and load track if needed\n const subtitleTracksUpdated = {\n subtitleTracks\n };\n this.log(`Updating subtitle tracks, ${subtitleTracks.length} track(s) found in \"${subtitleGroups == null ? void 0 : subtitleGroups.join(',')}\" group-id`);\n this.hls.trigger(Events.SUBTITLE_TRACKS_UPDATED, subtitleTracksUpdated);\n if (trackId !== -1 && this.trackId === -1) {\n this.setSubtitleTrack(trackId);\n }\n }\n }\n findTrackId(currentTrack) {\n const tracks = this.tracksInGroup;\n const selectDefault = this.selectDefaultTrack;\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n if (selectDefault && !track.default || !selectDefault && !currentTrack) {\n continue;\n }\n if (!currentTrack || matchesOption(track, currentTrack)) {\n return i;\n }\n }\n if (currentTrack) {\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n if (mediaAttributesIdentical(currentTrack.attrs, track.attrs, ['LANGUAGE', 'ASSOC-LANGUAGE', 'CHARACTERISTICS'])) {\n return i;\n }\n }\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n if (mediaAttributesIdentical(currentTrack.attrs, track.attrs, ['LANGUAGE'])) {\n return i;\n }\n }\n }\n return -1;\n }\n findTrackForTextTrack(textTrack) {\n if (textTrack) {\n const tracks = this.tracksInGroup;\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n if (subtitleTrackMatchesTextTrack(track, textTrack)) {\n return i;\n }\n }\n }\n return -1;\n }\n onError(event, data) {\n if (data.fatal || !data.context) {\n return;\n }\n if (data.context.type === PlaylistContextType.SUBTITLE_TRACK && data.context.id === this.trackId && (!this.groupIds || this.groupIds.indexOf(data.context.groupId) !== -1)) {\n this.checkRetry(data);\n }\n }\n get allSubtitleTracks() {\n return this.tracks;\n }\n\n /** get alternate subtitle tracks list from playlist **/\n get subtitleTracks() {\n return this.tracksInGroup;\n }\n\n /** get/set index of the selected subtitle track (based on index in subtitle track lists) **/\n get subtitleTrack() {\n return this.trackId;\n }\n set subtitleTrack(newId) {\n this.selectDefaultTrack = false;\n this.setSubtitleTrack(newId);\n }\n setSubtitleOption(subtitleOption) {\n this.hls.config.subtitlePreference = subtitleOption;\n if (subtitleOption) {\n if (subtitleOption.id === -1) {\n this.setSubtitleTrack(-1);\n return null;\n }\n const allSubtitleTracks = this.allSubtitleTracks;\n this.selectDefaultTrack = false;\n if (allSubtitleTracks.length) {\n // First see if current option matches (no switch op)\n const currentTrack = this.currentTrack;\n if (currentTrack && matchesOption(subtitleOption, currentTrack)) {\n return currentTrack;\n }\n // Find option in current group\n const groupIndex = findMatchingOption(subtitleOption, this.tracksInGroup);\n if (groupIndex > -1) {\n const track = this.tracksInGroup[groupIndex];\n this.setSubtitleTrack(groupIndex);\n return track;\n } else if (currentTrack) {\n // If this is not the initial selection return null\n // option should have matched one in active group\n return null;\n } else {\n // Find the option in all tracks for initial selection\n const allIndex = findMatchingOption(subtitleOption, allSubtitleTracks);\n if (allIndex > -1) {\n return allSubtitleTracks[allIndex];\n }\n }\n }\n }\n return null;\n }\n loadPlaylist(hlsUrlParameters) {\n super.loadPlaylist();\n if (this.shouldLoadPlaylist(this.currentTrack)) {\n this.scheduleLoading(this.currentTrack, hlsUrlParameters);\n }\n }\n loadingPlaylist(currentTrack, hlsUrlParameters) {\n super.loadingPlaylist(currentTrack, hlsUrlParameters);\n const id = currentTrack.id;\n const groupId = currentTrack.groupId;\n const url = this.getUrlWithDirectives(currentTrack.url, hlsUrlParameters);\n const details = currentTrack.details;\n const age = details == null ? void 0 : details.age;\n this.log(`Loading subtitle ${id} \"${currentTrack.name}\" lang:${currentTrack.lang} group:${groupId}${(hlsUrlParameters == null ? void 0 : hlsUrlParameters.msn) !== undefined ? ' at sn ' + hlsUrlParameters.msn + ' part ' + hlsUrlParameters.part : ''}${age && details.live ? ' age ' + age.toFixed(1) + (details.type ? ' ' + details.type || '' : '') : ''} ${url}`);\n this.hls.trigger(Events.SUBTITLE_TRACK_LOADING, {\n url,\n id,\n groupId,\n deliveryDirectives: hlsUrlParameters || null,\n track: currentTrack\n });\n }\n\n /**\n * Disables the old subtitleTrack and sets current mode on the next subtitleTrack.\n * This operates on the DOM textTracks.\n * A value of -1 will disable all subtitle tracks.\n */\n toggleTrackModes() {\n const {\n media\n } = this;\n if (!media) {\n return;\n }\n const textTracks = filterSubtitleTracks(media.textTracks);\n const currentTrack = this.currentTrack;\n let nextTrack;\n if (currentTrack) {\n nextTrack = textTracks.filter(textTrack => subtitleTrackMatchesTextTrack(currentTrack, textTrack))[0];\n if (!nextTrack) {\n this.warn(`Unable to find subtitle TextTrack with name \"${currentTrack.name}\" and language \"${currentTrack.lang}\"`);\n }\n }\n [].slice.call(textTracks).forEach(track => {\n if (track.mode !== 'disabled' && track !== nextTrack) {\n track.mode = 'disabled';\n }\n });\n if (nextTrack) {\n const mode = this.subtitleDisplay ? 'showing' : 'hidden';\n if (nextTrack.mode !== mode) {\n nextTrack.mode = mode;\n }\n }\n }\n\n /**\n * This method is responsible for validating the subtitle index and periodically reloading if live.\n * Dispatches the SUBTITLE_TRACK_SWITCH event, which instructs the subtitle-stream-controller to load the selected track.\n */\n setSubtitleTrack(newId) {\n const tracks = this.tracksInGroup;\n\n // setting this.subtitleTrack will trigger internal logic\n // if media has not been attached yet, it will fail\n // we keep a reference to the default track id\n // and we'll set subtitleTrack when onMediaAttached is triggered\n if (!this.media) {\n this.queuedDefaultTrack = newId;\n return;\n }\n\n // exit if track id as already set or invalid\n if (newId < -1 || newId >= tracks.length || !isFiniteNumber(newId)) {\n this.warn(`Invalid subtitle track id: ${newId}`);\n return;\n }\n this.selectDefaultTrack = false;\n const lastTrack = this.currentTrack;\n const track = tracks[newId] || null;\n this.trackId = newId;\n this.currentTrack = track;\n this.toggleTrackModes();\n if (!track) {\n // switch to -1\n this.hls.trigger(Events.SUBTITLE_TRACK_SWITCH, {\n id: newId\n });\n return;\n }\n const trackLoaded = !!track.details && !track.details.live;\n if (newId === this.trackId && track === lastTrack && trackLoaded) {\n return;\n }\n this.log(`Switching to subtitle-track ${newId}` + (track ? ` \"${track.name}\" lang:${track.lang} group:${track.groupId}` : ''));\n const {\n id,\n groupId = '',\n name,\n type,\n url\n } = track;\n this.hls.trigger(Events.SUBTITLE_TRACK_SWITCH, {\n id,\n groupId,\n name,\n type,\n url\n });\n const hlsUrlParameters = this.switchParams(track.url, lastTrack == null ? void 0 : lastTrack.details, track.details);\n this.loadPlaylist(hlsUrlParameters);\n }\n}\n\n/**\n * Generate a random v4 UUID\n *\n * @returns A random v4 UUID\n *\n * @group Utils\n *\n * @beta\n */\nfunction uuid() {\n try {\n return crypto.randomUUID();\n } catch (error) {\n try {\n const url = URL.createObjectURL(new Blob());\n const uuid = url.toString();\n URL.revokeObjectURL(url);\n return uuid.slice(uuid.lastIndexOf('/') + 1);\n } catch (error) {\n let dt = new Date().getTime();\n const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\n const r = (dt + Math.random() * 16) % 16 | 0;\n dt = Math.floor(dt / 16);\n return (c == 'x' ? r : r & 0x3 | 0x8).toString(16);\n });\n return uuid;\n }\n }\n}\n\n// From https://github.com/darkskyapp/string-hash\nfunction hash(text) {\n let hash = 5381;\n let i = text.length;\n while (i) {\n hash = hash * 33 ^ text.charCodeAt(--i);\n }\n return (hash >>> 0).toString();\n}\n\nconst ALIGNED_END_THRESHOLD_SECONDS = 0.025;\nlet TimelineOccupancy = /*#__PURE__*/function (TimelineOccupancy) {\n TimelineOccupancy[TimelineOccupancy[\"Point\"] = 0] = \"Point\";\n TimelineOccupancy[TimelineOccupancy[\"Range\"] = 1] = \"Range\";\n return TimelineOccupancy;\n}({});\nfunction generateAssetIdentifier(interstitial, uri, assetListIndex) {\n return `${interstitial.identifier}-${assetListIndex + 1}-${hash(uri)}`;\n}\nclass InterstitialEvent {\n constructor(dateRange, base) {\n this.base = void 0;\n this._duration = null;\n this._timelineStart = null;\n this.appendInPlaceDisabled = void 0;\n this.appendInPlaceStarted = void 0;\n this.dateRange = void 0;\n this.hasPlayed = false;\n this.cumulativeDuration = 0;\n this.resumeOffset = NaN;\n this.playoutLimit = NaN;\n this.restrictions = {\n skip: false,\n jump: false\n };\n this.snapOptions = {\n out: false,\n in: false\n };\n this.assetList = [];\n this.assetListLoader = void 0;\n this.assetListResponse = null;\n this.resumeAnchor = void 0;\n this.error = void 0;\n this.resetOnResume = void 0;\n this.base = base;\n this.dateRange = dateRange;\n this.setDateRange(dateRange);\n }\n setDateRange(dateRange) {\n this.dateRange = dateRange;\n this.resumeOffset = dateRange.attr.optionalFloat('X-RESUME-OFFSET', this.resumeOffset);\n this.playoutLimit = dateRange.attr.optionalFloat('X-PLAYOUT-LIMIT', this.playoutLimit);\n this.restrictions = dateRange.attr.enumeratedStringList('X-RESTRICT', this.restrictions);\n this.snapOptions = dateRange.attr.enumeratedStringList('X-SNAP', this.snapOptions);\n }\n reset() {\n var _this$assetListLoader;\n this.appendInPlaceStarted = false;\n (_this$assetListLoader = this.assetListLoader) == null || _this$assetListLoader.destroy();\n this.assetListLoader = undefined;\n if (!this.supplementsPrimary) {\n this.assetListResponse = null;\n this.assetList = [];\n this._duration = null;\n }\n // `error?` is reset when seeking back over interstitial `startOffset`\n // using `schedule.resetErrorsInRange(start, end)`.\n }\n isAssetPastPlayoutLimit(assetIndex) {\n var _this$assetList$asset;\n if (assetIndex > 0 && assetIndex >= this.assetList.length) {\n return true;\n }\n const playoutLimit = this.playoutLimit;\n if (assetIndex <= 0 || isNaN(playoutLimit)) {\n return false;\n }\n if (playoutLimit === 0) {\n return true;\n }\n const assetOffset = ((_this$assetList$asset = this.assetList[assetIndex]) == null ? void 0 : _this$assetList$asset.startOffset) || 0;\n return assetOffset > playoutLimit;\n }\n findAssetIndex(asset) {\n const index = this.assetList.indexOf(asset);\n return index;\n }\n get identifier() {\n return this.dateRange.id;\n }\n get startDate() {\n return this.dateRange.startDate;\n }\n get startTime() {\n // Primary media timeline start time\n const startTime = this.dateRange.startTime;\n if (this.snapOptions.out) {\n const frag = this.dateRange.tagAnchor;\n if (frag) {\n return getSnapToFragmentTime(startTime, frag);\n }\n }\n return startTime;\n }\n get startOffset() {\n return this.cue.pre ? 0 : this.startTime;\n }\n get startIsAligned() {\n if (this.startTime === 0 || this.snapOptions.out) {\n return true;\n }\n const frag = this.dateRange.tagAnchor;\n if (frag) {\n const startTime = this.dateRange.startTime;\n const snappedStart = getSnapToFragmentTime(startTime, frag);\n return startTime - snappedStart < 0.1;\n }\n return false;\n }\n get resumptionOffset() {\n const resumeOffset = this.resumeOffset;\n const offset = isFiniteNumber(resumeOffset) ? resumeOffset : this.duration;\n return this.cumulativeDuration + offset;\n }\n get resumeTime() {\n // Primary media timeline resumption time\n const resumeTime = this.startOffset + this.resumptionOffset;\n if (this.snapOptions.in) {\n const frag = this.resumeAnchor;\n if (frag) {\n return getSnapToFragmentTime(resumeTime, frag);\n }\n }\n return resumeTime;\n }\n get appendInPlace() {\n if (this.appendInPlaceStarted) {\n return true;\n }\n if (this.appendInPlaceDisabled) {\n return false;\n }\n if (!this.cue.once && !this.cue.pre &&\n // preroll starts at startPosition before startPosition is known (live)\n this.startIsAligned && (isNaN(this.playoutLimit) && isNaN(this.resumeOffset) || this.resumeOffset && this.duration && Math.abs(this.resumeOffset - this.duration) < ALIGNED_END_THRESHOLD_SECONDS)) {\n return true;\n }\n return false;\n }\n set appendInPlace(value) {\n if (this.appendInPlaceStarted) {\n this.resetOnResume = !value;\n return;\n }\n this.appendInPlaceDisabled = !value;\n }\n\n // Extended timeline start time\n get timelineStart() {\n if (this._timelineStart !== null) {\n return this._timelineStart;\n }\n return this.startTime;\n }\n set timelineStart(value) {\n this._timelineStart = value;\n }\n get duration() {\n const playoutLimit = this.playoutLimit;\n let duration;\n if (this._duration !== null) {\n duration = this._duration;\n } else if (this.dateRange.duration) {\n duration = this.dateRange.duration;\n } else {\n duration = this.dateRange.plannedDuration || 0;\n }\n if (!isNaN(playoutLimit) && playoutLimit < duration) {\n duration = playoutLimit;\n }\n return duration;\n }\n set duration(value) {\n this._duration = value;\n }\n get cue() {\n return this.dateRange.cue;\n }\n get timelineOccupancy() {\n if (this.dateRange.attr['X-TIMELINE-OCCUPIES'] === 'RANGE') {\n return TimelineOccupancy.Range;\n }\n return TimelineOccupancy.Point;\n }\n get supplementsPrimary() {\n return this.dateRange.attr['X-TIMELINE-STYLE'] === 'PRIMARY';\n }\n get contentMayVary() {\n return this.dateRange.attr['X-CONTENT-MAY-VARY'] !== 'NO';\n }\n get assetUrl() {\n return this.dateRange.attr['X-ASSET-URI'];\n }\n get assetListUrl() {\n return this.dateRange.attr['X-ASSET-LIST'];\n }\n get baseUrl() {\n return this.base.url;\n }\n get assetListLoaded() {\n return this.assetList.length > 0 || this.assetListResponse !== null;\n }\n toString() {\n return eventToString(this);\n }\n}\nfunction getSnapToFragmentTime(time, frag) {\n return time - frag.start < frag.duration / 2 && !(Math.abs(time - (frag.start + frag.duration)) < ALIGNED_END_THRESHOLD_SECONDS) ? frag.start : frag.start + frag.duration;\n}\nfunction getInterstitialUrl(uri, sessionId, baseUrl) {\n const url = new self.URL(uri, baseUrl);\n if (url.protocol !== 'data:') {\n url.searchParams.set('_HLS_primary_id', sessionId);\n }\n return url;\n}\nfunction getNextAssetIndex(interstitial, assetListIndex) {\n while ((_interstitial$assetLi = interstitial.assetList[++assetListIndex]) != null && _interstitial$assetLi.error) {\n var _interstitial$assetLi;\n } /* no-op */\n return assetListIndex;\n}\nfunction eventToString(interstitial) {\n return `[\"${interstitial.identifier}\" ${interstitial.cue.pre ? '<pre>' : interstitial.cue.post ? '<post>' : ''}${interstitial.timelineStart.toFixed(2)}-${interstitial.resumeTime.toFixed(2)}]`;\n}\nfunction eventAssetToString(asset) {\n const start = asset.timelineStart;\n const duration = asset.duration || 0;\n return `[\"${asset.identifier}\" ${start.toFixed(2)}-${(start + duration).toFixed(2)}]`;\n}\n\nclass HlsAssetPlayer {\n constructor(HlsPlayerClass, userConfig, interstitial, assetItem) {\n this.hls = void 0;\n this.interstitial = void 0;\n this.assetItem = void 0;\n this.tracks = null;\n this.hasDetails = false;\n this.mediaAttached = null;\n this._currentTime = void 0;\n this._bufferedEosTime = void 0;\n this.checkPlayout = () => {\n if (this.reachedPlayout(this.currentTime) && this.hls) {\n this.hls.trigger(Events.PLAYOUT_LIMIT_REACHED, {});\n }\n };\n const hls = this.hls = new HlsPlayerClass(userConfig);\n this.interstitial = interstitial;\n this.assetItem = assetItem;\n const detailsLoaded = () => {\n this.hasDetails = true;\n };\n hls.once(Events.LEVEL_LOADED, detailsLoaded);\n hls.once(Events.AUDIO_TRACK_LOADED, detailsLoaded);\n hls.once(Events.SUBTITLE_TRACK_LOADED, detailsLoaded);\n hls.on(Events.MEDIA_ATTACHING, (name, {\n media\n }) => {\n this.removeMediaListeners();\n this.mediaAttached = media;\n const event = this.interstitial;\n if (event.playoutLimit) {\n media.addEventListener('timeupdate', this.checkPlayout);\n if (this.appendInPlace) {\n hls.on(Events.BUFFER_APPENDED, () => {\n const bufferedEnd = this.bufferedEnd;\n if (this.reachedPlayout(bufferedEnd)) {\n this._bufferedEosTime = bufferedEnd;\n hls.trigger(Events.BUFFERED_TO_END, undefined);\n }\n });\n }\n }\n });\n }\n get appendInPlace() {\n return this.interstitial.appendInPlace;\n }\n loadSource() {\n const hls = this.hls;\n if (!hls) {\n return;\n }\n if (!hls.url) {\n let uri = this.assetItem.uri;\n try {\n uri = getInterstitialUrl(uri, hls.config.primarySessionId || '').href;\n } catch (error) {\n // Ignore error parsing ASSET_URI or adding _HLS_primary_id to it. The\n // issue should surface as an INTERSTITIAL_ASSET_ERROR loading the asset.\n }\n hls.loadSource(uri);\n } else if (hls.levels.length && !hls.started) {\n hls.startLoad(-1, true);\n }\n }\n bufferedInPlaceToEnd(media) {\n var _this$hls;\n if (!this.appendInPlace) {\n return false;\n }\n if ((_this$hls = this.hls) != null && _this$hls.bufferedToEnd) {\n return true;\n }\n if (!media) {\n return false;\n }\n const duration = Math.min(this._bufferedEosTime || Infinity, this.duration);\n const start = this.timelineOffset;\n const bufferInfo = BufferHelper.bufferInfo(media, start, 0);\n const bufferedEnd = this.getAssetTime(bufferInfo.end);\n return bufferedEnd >= duration - 0.02;\n }\n reachedPlayout(time) {\n const interstitial = this.interstitial;\n const playoutLimit = interstitial.playoutLimit;\n return this.startOffset + time >= playoutLimit;\n }\n get destroyed() {\n var _this$hls2;\n return !((_this$hls2 = this.hls) != null && _this$hls2.userConfig);\n }\n get assetId() {\n return this.assetItem.identifier;\n }\n get interstitialId() {\n return this.assetItem.parentIdentifier;\n }\n get media() {\n var _this$hls3;\n return ((_this$hls3 = this.hls) == null ? void 0 : _this$hls3.media) || null;\n }\n get bufferedEnd() {\n const media = this.media || this.mediaAttached;\n if (!media) {\n if (this._bufferedEosTime) {\n return this._bufferedEosTime;\n }\n return this.currentTime;\n }\n const bufferInfo = BufferHelper.bufferInfo(media, media.currentTime, 0.001);\n return this.getAssetTime(bufferInfo.end);\n }\n get currentTime() {\n const media = this.media || this.mediaAttached;\n if (!media) {\n return this._currentTime || 0;\n }\n return this.getAssetTime(media.currentTime);\n }\n get duration() {\n const duration = this.assetItem.duration;\n if (!duration) {\n return 0;\n }\n const playoutLimit = this.interstitial.playoutLimit;\n if (playoutLimit) {\n const assetPlayout = playoutLimit - this.startOffset;\n if (assetPlayout > 0 && assetPlayout < duration) {\n return assetPlayout;\n }\n }\n return duration;\n }\n get remaining() {\n const duration = this.duration;\n if (!duration) {\n return 0;\n }\n return Math.max(0, duration - this.currentTime);\n }\n get startOffset() {\n return this.assetItem.startOffset;\n }\n get timelineOffset() {\n var _this$hls4;\n return ((_this$hls4 = this.hls) == null ? void 0 : _this$hls4.config.timelineOffset) || 0;\n }\n set timelineOffset(value) {\n const timelineOffset = this.timelineOffset;\n if (value !== timelineOffset) {\n const diff = value - timelineOffset;\n if (Math.abs(diff) > 1 / 90000 && this.hls) {\n if (this.hasDetails) {\n throw new Error(`Cannot set timelineOffset after playlists are loaded`);\n }\n this.hls.config.timelineOffset = value;\n }\n }\n }\n getAssetTime(time) {\n const timelineOffset = this.timelineOffset;\n const duration = this.duration;\n return Math.min(Math.max(0, time - timelineOffset), duration);\n }\n removeMediaListeners() {\n const media = this.mediaAttached;\n if (media) {\n this._currentTime = media.currentTime;\n this.bufferSnapShot();\n media.removeEventListener('timeupdate', this.checkPlayout);\n }\n }\n bufferSnapShot() {\n if (this.mediaAttached) {\n var _this$hls5;\n if ((_this$hls5 = this.hls) != null && _this$hls5.bufferedToEnd) {\n this._bufferedEosTime = this.bufferedEnd;\n }\n }\n }\n destroy() {\n this.removeMediaListeners();\n if (this.hls) {\n this.hls.destroy();\n }\n this.hls = null;\n // @ts-ignore\n this.tracks = this.mediaAttached = this.checkPlayout = null;\n }\n attachMedia(data) {\n var _this$hls6;\n this.loadSource();\n (_this$hls6 = this.hls) == null || _this$hls6.attachMedia(data);\n }\n detachMedia() {\n var _this$hls7;\n this.removeMediaListeners();\n this.mediaAttached = null;\n (_this$hls7 = this.hls) == null || _this$hls7.detachMedia();\n }\n resumeBuffering() {\n var _this$hls8;\n (_this$hls8 = this.hls) == null || _this$hls8.resumeBuffering();\n }\n pauseBuffering() {\n var _this$hls9;\n (_this$hls9 = this.hls) == null || _this$hls9.pauseBuffering();\n }\n transferMedia() {\n var _this$hls0;\n this.bufferSnapShot();\n return ((_this$hls0 = this.hls) == null ? void 0 : _this$hls0.transferMedia()) || null;\n }\n resetDetails() {\n const hls = this.hls;\n if (hls && this.hasDetails) {\n hls.stopLoad();\n const deleteDetails = obj => delete obj.details;\n hls.levels.forEach(deleteDetails);\n hls.allAudioTracks.forEach(deleteDetails);\n hls.allSubtitleTracks.forEach(deleteDetails);\n this.hasDetails = false;\n }\n }\n on(event, listener, context) {\n var _this$hls1;\n (_this$hls1 = this.hls) == null || _this$hls1.on(event, listener);\n }\n once(event, listener, context) {\n var _this$hls10;\n (_this$hls10 = this.hls) == null || _this$hls10.once(event, listener);\n }\n off(event, listener, context) {\n var _this$hls11;\n (_this$hls11 = this.hls) == null || _this$hls11.off(event, listener);\n }\n toString() {\n var _this$hls12;\n return `HlsAssetPlayer: ${eventAssetToString(this.assetItem)} ${(_this$hls12 = this.hls) == null ? void 0 : _this$hls12.sessionId} ${this.appendInPlace ? 'append-in-place' : ''}`;\n }\n}\n\nconst ABUTTING_THRESHOLD_SECONDS = 0.033;\nclass InterstitialsSchedule extends Logger {\n constructor(onScheduleUpdate, logger) {\n super('interstitials-sched', logger);\n this.onScheduleUpdate = void 0;\n this.eventMap = {};\n this.events = null;\n this.items = null;\n this.durations = {\n primary: 0,\n playout: 0,\n integrated: 0\n };\n this.onScheduleUpdate = onScheduleUpdate;\n }\n destroy() {\n this.reset();\n // @ts-ignore\n this.onScheduleUpdate = null;\n }\n reset() {\n this.eventMap = {};\n this.setDurations(0, 0, 0);\n if (this.events) {\n this.events.forEach(interstitial => interstitial.reset());\n }\n this.events = this.items = null;\n }\n resetErrorsInRange(start, end) {\n if (this.events) {\n return this.events.reduce((count, interstitial) => {\n if (start <= interstitial.startOffset && end > interstitial.startOffset) {\n delete interstitial.error;\n return count + 1;\n }\n return count;\n }, 0);\n }\n return 0;\n }\n get duration() {\n const items = this.items;\n return items ? items[items.length - 1].end : 0;\n }\n get length() {\n return this.items ? this.items.length : 0;\n }\n getEvent(identifier) {\n return identifier ? this.eventMap[identifier] || null : null;\n }\n hasEvent(identifier) {\n return identifier in this.eventMap;\n }\n findItemIndex(item, time) {\n if (item.event) {\n // Find Event Item\n return this.findEventIndex(item.event.identifier);\n }\n // Find Primary Item\n let index = -1;\n if (item.nextEvent) {\n index = this.findEventIndex(item.nextEvent.identifier) - 1;\n } else if (item.previousEvent) {\n index = this.findEventIndex(item.previousEvent.identifier) + 1;\n }\n const items = this.items;\n if (items) {\n if (!items[index]) {\n if (time === undefined) {\n time = item.start;\n }\n index = this.findItemIndexAtTime(time);\n }\n // Only return index of a Primary Item\n while (index >= 0 && (_items$index = items[index]) != null && _items$index.event) {\n var _items$index;\n // If index found is an interstitial it is not a valid result as it should have been matched up top\n // decrement until result is negative (not found) or a primary segment\n index--;\n }\n }\n return index;\n }\n findItemIndexAtTime(timelinePos, timelineType) {\n const items = this.items;\n if (items) {\n for (let i = 0; i < items.length; i++) {\n let timeRange = items[i];\n if (timelineType && timelineType !== 'primary') {\n timeRange = timeRange[timelineType];\n }\n if (timelinePos === timeRange.start || timelinePos > timeRange.start && timelinePos < timeRange.end) {\n return i;\n }\n }\n }\n return -1;\n }\n findJumpRestrictedIndex(startIndex, endIndex) {\n const items = this.items;\n if (items) {\n for (let i = startIndex; i <= endIndex; i++) {\n if (!items[i]) {\n break;\n }\n const event = items[i].event;\n if (event != null && event.restrictions.jump && !event.appendInPlace) {\n return i;\n }\n }\n }\n return -1;\n }\n findEventIndex(identifier) {\n const items = this.items;\n if (items) {\n for (let i = items.length; i--;) {\n var _items$i$event;\n if (((_items$i$event = items[i].event) == null ? void 0 : _items$i$event.identifier) === identifier) {\n return i;\n }\n }\n }\n return -1;\n }\n findAssetIndex(event, timelinePos) {\n const assetList = event.assetList;\n const length = assetList.length;\n if (length > 1) {\n for (let i = 0; i < length; i++) {\n const asset = assetList[i];\n if (!asset.error) {\n const timelineStart = asset.timelineStart;\n if (timelinePos === timelineStart || timelinePos > timelineStart && (timelinePos < timelineStart + (asset.duration || 0) || i === length - 1)) {\n return i;\n }\n }\n }\n }\n return 0;\n }\n get assetIdAtEnd() {\n var _this$items;\n const interstitialAtEnd = (_this$items = this.items) == null || (_this$items = _this$items[this.length - 1]) == null ? void 0 : _this$items.event;\n if (interstitialAtEnd) {\n const assetList = interstitialAtEnd.assetList;\n const assetAtEnd = assetList[assetList.length - 1];\n if (assetAtEnd) {\n return assetAtEnd.identifier;\n }\n }\n return null;\n }\n parseInterstitialDateRanges(mediaSelection, enableAppendInPlace) {\n const details = mediaSelection.main.details;\n const {\n dateRanges\n } = details;\n const previousInterstitialEvents = this.events;\n const interstitialEvents = this.parseDateRanges(dateRanges, {\n url: details.url\n }, enableAppendInPlace);\n const ids = Object.keys(dateRanges);\n const removedInterstitials = previousInterstitialEvents ? previousInterstitialEvents.filter(event => !ids.includes(event.identifier)) : [];\n if (interstitialEvents.length) {\n // pre-rolls, post-rolls, and events with the same start time are played in playlist tag order\n // all other events are ordered by start time\n interstitialEvents.sort((a, b) => {\n const aPre = a.cue.pre;\n const aPost = a.cue.post;\n const bPre = b.cue.pre;\n const bPost = b.cue.post;\n if (aPre && !bPre) {\n return -1;\n }\n if (bPre && !aPre) {\n return 1;\n }\n if (aPost && !bPost) {\n return 1;\n }\n if (bPost && !aPost) {\n return -1;\n }\n if (!aPre && !bPre && !aPost && !bPost) {\n const startA = a.startTime;\n const startB = b.startTime;\n if (startA !== startB) {\n return startA - startB;\n }\n }\n return a.dateRange.tagOrder - b.dateRange.tagOrder;\n });\n }\n this.events = interstitialEvents;\n\n // Clear removed DateRanges from buffered list (kills playback of active Interstitials)\n removedInterstitials.forEach(interstitial => {\n this.removeEvent(interstitial);\n });\n this.updateSchedule(mediaSelection, removedInterstitials);\n }\n updateSchedule(mediaSelection, removedInterstitials = [], forceUpdate = false) {\n const events = this.events || [];\n if (events.length || removedInterstitials.length || this.length < 2) {\n const currentItems = this.items;\n const updatedItems = this.parseSchedule(events, mediaSelection);\n const updated = forceUpdate || removedInterstitials.length || (currentItems == null ? void 0 : currentItems.length) !== updatedItems.length || updatedItems.some((item, i) => {\n return Math.abs(item.playout.start - currentItems[i].playout.start) > 0.005 || Math.abs(item.playout.end - currentItems[i].playout.end) > 0.005;\n });\n if (updated) {\n this.items = updatedItems;\n // call interstitials-controller onScheduleUpdated()\n this.onScheduleUpdate(removedInterstitials, currentItems);\n }\n }\n }\n parseDateRanges(dateRanges, baseData, enableAppendInPlace) {\n const interstitialEvents = [];\n const ids = Object.keys(dateRanges);\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n const dateRange = dateRanges[id];\n if (dateRange.isInterstitial) {\n let interstitial = this.eventMap[id];\n if (interstitial) {\n // Update InterstitialEvent already parsed and mapped\n // This retains already loaded duration and loaded asset list info\n interstitial.setDateRange(dateRange);\n } else {\n interstitial = new InterstitialEvent(dateRange, baseData);\n this.eventMap[id] = interstitial;\n if (enableAppendInPlace === false) {\n interstitial.appendInPlace = enableAppendInPlace;\n }\n }\n interstitialEvents.push(interstitial);\n }\n }\n return interstitialEvents;\n }\n parseSchedule(interstitialEvents, mediaSelection) {\n const schedule = [];\n const details = mediaSelection.main.details;\n const primaryDuration = details.live ? Infinity : details.edge;\n let playoutDuration = 0;\n\n // Filter events that have errored from the schedule (Primary fallback)\n interstitialEvents = interstitialEvents.filter(event => !event.error && !(event.cue.once && event.hasPlayed));\n if (interstitialEvents.length) {\n // Update Schedule\n this.resolveOffsets(interstitialEvents, mediaSelection);\n\n // Populate Schedule with Interstitial Event and Primary Segment Items\n let primaryPosition = 0;\n let integratedTime = 0;\n interstitialEvents.forEach((interstitial, i) => {\n const preroll = interstitial.cue.pre;\n const postroll = interstitial.cue.post;\n const previousEvent = interstitialEvents[i - 1] || null;\n const appendInPlace = interstitial.appendInPlace;\n const eventStart = postroll ? primaryDuration : interstitial.startOffset;\n const interstitialDuration = interstitial.duration;\n const timelineDuration = interstitial.timelineOccupancy === TimelineOccupancy.Range ? interstitialDuration : 0;\n const resumptionOffset = interstitial.resumptionOffset;\n const inSameStartTimeSequence = (previousEvent == null ? void 0 : previousEvent.startTime) === eventStart;\n const start = eventStart + interstitial.cumulativeDuration;\n let end = appendInPlace ? start + interstitialDuration : eventStart + resumptionOffset;\n if (preroll || !postroll && eventStart <= 0) {\n // preroll or in-progress midroll\n const integratedStart = integratedTime;\n integratedTime += timelineDuration;\n interstitial.timelineStart = start;\n const playoutStart = playoutDuration;\n playoutDuration += interstitialDuration;\n schedule.push({\n event: interstitial,\n start,\n end,\n playout: {\n start: playoutStart,\n end: playoutDuration\n },\n integrated: {\n start: integratedStart,\n end: integratedTime\n }\n });\n } else if (eventStart <= primaryDuration) {\n if (!inSameStartTimeSequence) {\n const segmentDuration = eventStart - primaryPosition;\n // Do not schedule a primary segment if interstitials are abutting by less than ABUTTING_THRESHOLD_SECONDS\n if (segmentDuration > ABUTTING_THRESHOLD_SECONDS) {\n // primary segment\n const timelineStart = primaryPosition;\n const _integratedStart = integratedTime;\n integratedTime += segmentDuration;\n const _playoutStart = playoutDuration;\n playoutDuration += segmentDuration;\n const primarySegment = {\n previousEvent: interstitialEvents[i - 1] || null,\n nextEvent: interstitial,\n start: timelineStart,\n end: timelineStart + segmentDuration,\n playout: {\n start: _playoutStart,\n end: playoutDuration\n },\n integrated: {\n start: _integratedStart,\n end: integratedTime\n }\n };\n schedule.push(primarySegment);\n } else if (segmentDuration > 0 && previousEvent) {\n // Add previous event `resumeTime` (based on duration or resumeOffset) so that it ends aligned with this one\n previousEvent.cumulativeDuration += segmentDuration;\n schedule[schedule.length - 1].end = eventStart;\n }\n }\n // midroll / postroll\n if (postroll) {\n end = start;\n }\n interstitial.timelineStart = start;\n const integratedStart = integratedTime;\n integratedTime += timelineDuration;\n const playoutStart = playoutDuration;\n playoutDuration += interstitialDuration;\n schedule.push({\n event: interstitial,\n start,\n end,\n playout: {\n start: playoutStart,\n end: playoutDuration\n },\n integrated: {\n start: integratedStart,\n end: integratedTime\n }\n });\n } else {\n // Interstitial starts after end of primary VOD - not included in schedule\n return;\n }\n const resumeTime = interstitial.resumeTime;\n if (postroll || resumeTime > primaryDuration) {\n primaryPosition = primaryDuration;\n } else {\n primaryPosition = resumeTime;\n }\n });\n if (primaryPosition < primaryDuration) {\n var _schedule;\n // last primary segment\n const timelineStart = primaryPosition;\n const integratedStart = integratedTime;\n const segmentDuration = primaryDuration - primaryPosition;\n integratedTime += segmentDuration;\n const playoutStart = playoutDuration;\n playoutDuration += segmentDuration;\n schedule.push({\n previousEvent: ((_schedule = schedule[schedule.length - 1]) == null ? void 0 : _schedule.event) || null,\n nextEvent: null,\n start: primaryPosition,\n end: timelineStart + segmentDuration,\n playout: {\n start: playoutStart,\n end: playoutDuration\n },\n integrated: {\n start: integratedStart,\n end: integratedTime\n }\n });\n }\n this.setDurations(primaryDuration, playoutDuration, integratedTime);\n } else {\n // no interstials - schedule is one primary segment\n const start = 0;\n schedule.push({\n previousEvent: null,\n nextEvent: null,\n start,\n end: primaryDuration,\n playout: {\n start,\n end: primaryDuration\n },\n integrated: {\n start,\n end: primaryDuration\n }\n });\n this.setDurations(primaryDuration, primaryDuration, primaryDuration);\n }\n return schedule;\n }\n setDurations(primary, playout, integrated) {\n this.durations = {\n primary,\n playout,\n integrated\n };\n }\n resolveOffsets(interstitialEvents, mediaSelection) {\n const details = mediaSelection.main.details;\n const primaryDuration = details.live ? Infinity : details.edge;\n\n // First resolve cumulative resumption offsets for Interstitials that start at the same DateTime\n let cumulativeDuration = 0;\n let lastScheduledStart = -1;\n interstitialEvents.forEach((interstitial, i) => {\n const preroll = interstitial.cue.pre;\n const postroll = interstitial.cue.post;\n const eventStart = preroll ? 0 : postroll ? primaryDuration : interstitial.startTime;\n this.updateAssetDurations(interstitial);\n\n // X-RESUME-OFFSET values of interstitials scheduled at the same time are cumulative\n const inSameStartTimeSequence = lastScheduledStart === eventStart;\n if (inSameStartTimeSequence) {\n interstitial.cumulativeDuration = cumulativeDuration;\n } else {\n cumulativeDuration = 0;\n lastScheduledStart = eventStart;\n }\n if (!postroll && interstitial.snapOptions.in) {\n // FIXME: Include audio playlist in snapping\n interstitial.resumeAnchor = findFragmentByPTS(null, details.fragments, interstitial.startOffset + interstitial.resumptionOffset, 0, 0) || undefined;\n }\n // Check if primary fragments align with resumption offset and disable appendInPlace if they do not\n if (interstitial.appendInPlace && !interstitial.appendInPlaceStarted) {\n const alignedSegmentStart = this.primaryCanResumeInPlaceAt(interstitial, mediaSelection);\n if (!alignedSegmentStart) {\n interstitial.appendInPlace = false;\n }\n }\n if (!interstitial.appendInPlace && i + 1 < interstitialEvents.length) {\n // abutting Interstitials must use the same MediaSource strategy, this applies to all whether or not they are back to back:\n const timeBetween = interstitialEvents[i + 1].startTime - interstitialEvents[i].resumeTime;\n if (timeBetween < ABUTTING_THRESHOLD_SECONDS) {\n interstitialEvents[i + 1].appendInPlace = false;\n if (interstitialEvents[i + 1].appendInPlace) {\n this.warn(`Could not change append strategy for abutting event ${interstitial}`);\n }\n }\n }\n // Update cumulativeDuration for next abutting interstitial with the same start date\n const resumeOffset = isFiniteNumber(interstitial.resumeOffset) ? interstitial.resumeOffset : interstitial.duration;\n cumulativeDuration += resumeOffset;\n });\n }\n primaryCanResumeInPlaceAt(interstitial, mediaSelection) {\n const resumeTime = interstitial.resumeTime;\n const resumesInPlaceAt = interstitial.startTime + interstitial.resumptionOffset;\n if (Math.abs(resumeTime - resumesInPlaceAt) > ALIGNED_END_THRESHOLD_SECONDS) {\n this.log(`\"${interstitial.identifier}\" resumption ${resumeTime} not aligned with estimated timeline end ${resumesInPlaceAt}`);\n return false;\n }\n const playlists = Object.keys(mediaSelection);\n return !playlists.some(playlistType => {\n const details = mediaSelection[playlistType].details;\n const playlistEnd = details.edge;\n if (resumeTime >= playlistEnd) {\n // Live playback - resumption segments are not yet available\n this.log(`\"${interstitial.identifier}\" resumption ${resumeTime} past ${playlistType} playlist end ${playlistEnd}`);\n // Assume alignment is possible (or reset can take place)\n return false;\n }\n const startFragment = findFragmentByPTS(null, details.fragments, resumeTime);\n if (!startFragment) {\n this.log(`\"${interstitial.identifier}\" resumption ${resumeTime} does not align with any fragments in ${playlistType} playlist (${details.fragStart}-${details.fragmentEnd})`);\n return true;\n }\n const allowance = playlistType === 'audio' ? 0.175 : 0;\n const alignedWithSegment = Math.abs(startFragment.start - resumeTime) < ALIGNED_END_THRESHOLD_SECONDS + allowance || Math.abs(startFragment.end - resumeTime) < ALIGNED_END_THRESHOLD_SECONDS + allowance;\n if (!alignedWithSegment) {\n this.log(`\"${interstitial.identifier}\" resumption ${resumeTime} not aligned with ${playlistType} fragment bounds (${startFragment.start}-${startFragment.end} sn: ${startFragment.sn} cc: ${startFragment.cc})`);\n return true;\n }\n return false;\n });\n }\n updateAssetDurations(interstitial) {\n if (!interstitial.assetListLoaded) {\n return;\n }\n const eventStart = interstitial.timelineStart;\n let sumDuration = 0;\n let hasUnknownDuration = false;\n let hasErrors = false;\n for (let i = 0; i < interstitial.assetList.length; i++) {\n const asset = interstitial.assetList[i];\n const timelineStart = eventStart + sumDuration;\n asset.startOffset = sumDuration;\n asset.timelineStart = timelineStart;\n hasUnknownDuration || (hasUnknownDuration = asset.duration === null);\n hasErrors || (hasErrors = !!asset.error);\n const duration = asset.error ? 0 : asset.duration || 0;\n sumDuration += duration;\n }\n // Use the sum of known durations when it is greater than the stated duration\n if (hasUnknownDuration && !hasErrors) {\n interstitial.duration = Math.max(sumDuration, interstitial.duration);\n } else {\n interstitial.duration = sumDuration;\n }\n }\n removeEvent(interstitial) {\n interstitial.reset();\n delete this.eventMap[interstitial.identifier];\n }\n}\nfunction segmentToString(segment) {\n return `[${segment.event ? '\"' + segment.event.identifier + '\"' : 'primary'}: ${segment.start.toFixed(2)}-${segment.end.toFixed(2)}]`;\n}\n\nclass AssetListLoader {\n constructor(hls) {\n this.hls = void 0;\n this.hls = hls;\n }\n destroy() {\n // @ts-ignore\n this.hls = null;\n }\n loadAssetList(interstitial, hlsStartOffset) {\n const assetListUrl = interstitial.assetListUrl;\n let url;\n try {\n url = getInterstitialUrl(assetListUrl, this.hls.sessionId, interstitial.baseUrl);\n } catch (error) {\n const errorData = this.assignAssetListError(interstitial, ErrorDetails.ASSET_LIST_LOAD_ERROR, error, assetListUrl);\n this.hls.trigger(Events.ERROR, errorData);\n return;\n }\n if (hlsStartOffset && url.protocol !== 'data:') {\n url.searchParams.set('_HLS_start_offset', '' + hlsStartOffset);\n }\n const config = this.hls.config;\n const Loader = config.loader;\n const loader = new Loader(config);\n const context = {\n responseType: 'json',\n url: url.href\n };\n const loadPolicy = config.interstitialAssetListLoadPolicy.default;\n const loaderConfig = {\n loadPolicy,\n timeout: loadPolicy.maxLoadTimeMs,\n maxRetry: 0,\n retryDelay: 0,\n maxRetryDelay: 0\n };\n const callbacks = {\n onSuccess: (response, stats, context, networkDetails) => {\n const assetListResponse = response.data;\n const assets = assetListResponse == null ? void 0 : assetListResponse.ASSETS;\n if (!Array.isArray(assets)) {\n const errorData = this.assignAssetListError(interstitial, ErrorDetails.ASSET_LIST_PARSING_ERROR, new Error(`Invalid interstitial asset list`), context.url, stats, networkDetails);\n this.hls.trigger(Events.ERROR, errorData);\n return;\n }\n interstitial.assetListResponse = assetListResponse;\n this.hls.trigger(Events.ASSET_LIST_LOADED, {\n event: interstitial,\n assetListResponse,\n networkDetails\n });\n },\n onError: (error, context, networkDetails, stats) => {\n const errorData = this.assignAssetListError(interstitial, ErrorDetails.ASSET_LIST_LOAD_ERROR, new Error(`Error loading X-ASSET-LIST: HTTP status ${error.code} ${error.text} (${context.url})`), context.url, stats, networkDetails);\n this.hls.trigger(Events.ERROR, errorData);\n },\n onTimeout: (stats, context, networkDetails) => {\n const errorData = this.assignAssetListError(interstitial, ErrorDetails.ASSET_LIST_LOAD_TIMEOUT, new Error(`Timeout loading X-ASSET-LIST (${context.url})`), context.url, stats, networkDetails);\n this.hls.trigger(Events.ERROR, errorData);\n }\n };\n loader.load(context, loaderConfig, callbacks);\n this.hls.trigger(Events.ASSET_LIST_LOADING, {\n event: interstitial\n });\n return loader;\n }\n assignAssetListError(interstitial, details, error, url, stats, networkDetails) {\n interstitial.error = error;\n return {\n type: ErrorTypes.NETWORK_ERROR,\n details,\n fatal: false,\n interstitial,\n url,\n error,\n networkDetails,\n stats\n };\n }\n}\n\nfunction playWithCatch(media) {\n var _media$play;\n media == null || (_media$play = media.play()) == null || _media$play.catch(() => {\n /* no-op */\n });\n}\nfunction timelineMessage(label, time) {\n return `[${label}] Advancing timeline position to ${time}`;\n}\nclass InterstitialsController extends Logger {\n constructor(hls, HlsPlayerClass) {\n super('interstitials', hls.logger);\n this.HlsPlayerClass = void 0;\n this.hls = void 0;\n this.assetListLoader = void 0;\n // Last updated LevelDetails\n this.mediaSelection = null;\n this.altSelection = null;\n // Media and MediaSource/SourceBuffers\n this.media = null;\n this.detachedData = null;\n this.requiredTracks = null;\n // Public Interface for Interstitial playback state and control\n this.manager = null;\n // Interstitial Asset Players\n this.playerQueue = [];\n // Timeline position tracking\n this.bufferedPos = -1;\n this.timelinePos = -1;\n // Schedule\n this.schedule = void 0;\n // Schedule playback and buffering state\n this.playingItem = null;\n this.bufferingItem = null;\n this.waitingItem = null;\n this.endedItem = null;\n this.playingAsset = null;\n this.endedAsset = null;\n this.bufferingAsset = null;\n this.shouldPlay = false;\n this.onPlay = () => {\n this.shouldPlay = true;\n };\n this.onPause = () => {\n this.shouldPlay = false;\n };\n this.onSeeking = () => {\n const currentTime = this.currentTime;\n if (currentTime === undefined || this.playbackDisabled || !this.schedule) {\n return;\n }\n const diff = currentTime - this.timelinePos;\n const roundingError = Math.abs(diff) < 1 / 705600000; // one flick\n if (roundingError) {\n return;\n }\n const backwardSeek = diff <= -0.01;\n if (this.timelinePos === -1 && !this.effectivePlayingItem) {\n this.checkStart();\n }\n this.timelinePos = currentTime;\n this.bufferedPos = currentTime;\n\n // Check if seeking out of an item\n const playingItem = this.playingItem;\n if (!playingItem) {\n this.checkBuffer();\n return;\n }\n if (backwardSeek) {\n const resetCount = this.schedule.resetErrorsInRange(currentTime, currentTime - diff);\n if (resetCount) {\n this.updateSchedule(true);\n }\n }\n this.checkBuffer();\n if (backwardSeek && currentTime < playingItem.start || currentTime >= playingItem.end) {\n var _this$media;\n const playingIndex = this.findItemIndex(playingItem);\n let scheduleIndex = this.schedule.findItemIndexAtTime(currentTime);\n if (scheduleIndex === -1) {\n scheduleIndex = playingIndex + (backwardSeek ? -1 : 1);\n this.log(`seeked ${backwardSeek ? 'back ' : ''}to position not covered by schedule ${currentTime} (resolving from ${playingIndex} to ${scheduleIndex})`);\n }\n if (!this.isInterstitial(playingItem) && (_this$media = this.media) != null && _this$media.paused) {\n this.shouldPlay = false;\n }\n if (!backwardSeek) {\n // check if an Interstitial between the current item and target item has an X-RESTRICT JUMP restriction\n if (scheduleIndex > playingIndex) {\n const jumpIndex = this.schedule.findJumpRestrictedIndex(playingIndex + 1, scheduleIndex);\n if (jumpIndex > playingIndex) {\n this.setSchedulePosition(jumpIndex);\n return;\n }\n }\n }\n this.setSchedulePosition(scheduleIndex);\n return;\n }\n // Check if seeking out of an asset (assumes same item following above check)\n const playingAsset = this.playingAsset;\n if (!playingAsset) {\n // restart Interstitial at end\n if (this.playingLastItem && this.isInterstitial(playingItem)) {\n const restartAsset = playingItem.event.assetList[0];\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (restartAsset) {\n this.endedItem = this.playingItem;\n this.playingItem = null;\n this.setScheduleToAssetAtTime(currentTime, restartAsset);\n }\n }\n return;\n }\n const start = playingAsset.timelineStart;\n const duration = playingAsset.duration || 0;\n if (backwardSeek && currentTime < start || currentTime >= start + duration) {\n var _playingItem$event;\n if ((_playingItem$event = playingItem.event) != null && _playingItem$event.appendInPlace) {\n // Return SourceBuffer(s) to primary player and flush\n this.clearAssetPlayers(playingItem.event, playingItem);\n this.flushFrontBuffer(currentTime);\n }\n this.setScheduleToAssetAtTime(currentTime, playingAsset);\n }\n };\n this.onTimeupdate = () => {\n const currentTime = this.currentTime;\n if (currentTime === undefined || this.playbackDisabled) {\n return;\n }\n if (this.timelinePos === -1 && !this.effectivePlayingItem) {\n this.checkStart();\n }\n\n // Only allow timeupdate to advance primary position, seeking is used for jumping back\n // this prevents primaryPos from being reset to 0 after re-attach\n if (currentTime > this.timelinePos) {\n this.timelinePos = currentTime;\n if (currentTime > this.bufferedPos) {\n this.checkBuffer();\n }\n } else {\n return;\n }\n\n // Check if playback has entered the next item\n const playingItem = this.playingItem;\n if (!playingItem || this.playingLastItem) {\n return;\n }\n if (currentTime >= playingItem.end) {\n this.timelinePos = playingItem.end;\n const playingIndex = this.findItemIndex(playingItem);\n this.setSchedulePosition(playingIndex + 1);\n }\n // Check if playback has entered the next asset\n const playingAsset = this.playingAsset;\n if (!playingAsset) {\n return;\n }\n const end = playingAsset.timelineStart + (playingAsset.duration || 0);\n if (currentTime >= end) {\n this.setScheduleToAssetAtTime(currentTime, playingAsset);\n }\n };\n // Schedule update callback\n this.onScheduleUpdate = (removedInterstitials, previousItems) => {\n const schedule = this.schedule;\n if (!schedule) {\n return;\n }\n const playingItem = this.playingItem;\n const interstitialEvents = schedule.events || [];\n const scheduleItems = schedule.items || [];\n const durations = schedule.durations;\n const removedIds = removedInterstitials.map(interstitial => interstitial.identifier);\n const interstitialsUpdated = !!(interstitialEvents.length || removedIds.length);\n if (interstitialsUpdated || previousItems) {\n this.log(`INTERSTITIALS_UPDATED (${interstitialEvents.length}): ${interstitialEvents}\nSchedule: ${scheduleItems.map(seg => segmentToString(seg))} pos: ${this.timelinePos}`);\n }\n if (removedIds.length) {\n this.log(`Removed events ${removedIds}`);\n }\n\n // Update schedule item references\n // Do not replace Interstitial playingItem without a match - used for INTERSTITIAL_ASSET_ENDED and INTERSTITIAL_ENDED\n let updatedPlayingItem = null;\n let updatedBufferingItem = null;\n if (playingItem) {\n updatedPlayingItem = this.updateItem(playingItem, this.timelinePos);\n if (this.itemsMatch(playingItem, updatedPlayingItem)) {\n this.playingItem = updatedPlayingItem;\n } else {\n this.waitingItem = this.endedItem = null;\n }\n }\n // Clear waitingItem if it has been removed from the schedule\n this.waitingItem = this.updateItem(this.waitingItem);\n this.endedItem = this.updateItem(this.endedItem);\n // Do not replace Interstitial bufferingItem without a match - used for transfering media element or source\n const bufferingItem = this.bufferingItem;\n if (bufferingItem) {\n updatedBufferingItem = this.updateItem(bufferingItem, this.bufferedPos);\n if (this.itemsMatch(bufferingItem, updatedBufferingItem)) {\n this.bufferingItem = updatedBufferingItem;\n } else if (bufferingItem.event) {\n // Interstitial removed from schedule (Live -> VOD or other scenario where Start Date is outside the range of VOD Playlist)\n this.bufferingItem = this.playingItem;\n this.clearInterstitial(bufferingItem.event, null);\n }\n }\n removedInterstitials.forEach(interstitial => {\n interstitial.assetList.forEach(asset => {\n this.clearAssetPlayer(asset.identifier, null);\n });\n });\n this.playerQueue.forEach(player => {\n if (player.interstitial.appendInPlace) {\n const timelineStart = player.assetItem.timelineStart;\n const diff = player.timelineOffset - timelineStart;\n if (diff) {\n try {\n player.timelineOffset = timelineStart;\n } catch (e) {\n if (Math.abs(diff) > ALIGNED_END_THRESHOLD_SECONDS) {\n this.warn(`${e} (\"${player.assetId}\" ${player.timelineOffset}->${timelineStart})`);\n }\n }\n }\n }\n });\n if (interstitialsUpdated || previousItems) {\n this.hls.trigger(Events.INTERSTITIALS_UPDATED, {\n events: interstitialEvents.slice(0),\n schedule: scheduleItems.slice(0),\n durations,\n removedIds\n });\n if (this.isInterstitial(playingItem) && removedIds.includes(playingItem.event.identifier)) {\n this.warn(`Interstitial \"${playingItem.event.identifier}\" removed while playing`);\n this.primaryFallback(playingItem.event);\n return;\n }\n if (playingItem) {\n this.trimInPlace(updatedPlayingItem, playingItem);\n }\n if (bufferingItem && updatedBufferingItem !== updatedPlayingItem) {\n this.trimInPlace(updatedBufferingItem, bufferingItem);\n }\n\n // Check if buffered to new Interstitial event boundary\n // (Live update publishes Interstitial with new segment)\n this.checkBuffer();\n }\n };\n this.hls = hls;\n this.HlsPlayerClass = HlsPlayerClass;\n this.assetListLoader = new AssetListLoader(hls);\n this.schedule = new InterstitialsSchedule(this.onScheduleUpdate, hls.logger);\n this.registerListeners();\n }\n registerListeners() {\n const hls = this.hls;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (hls) {\n hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n hls.on(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n hls.on(Events.AUDIO_TRACK_UPDATED, this.onAudioTrackUpdated, this);\n hls.on(Events.SUBTITLE_TRACK_SWITCH, this.onSubtitleTrackSwitch, this);\n hls.on(Events.SUBTITLE_TRACK_UPDATED, this.onSubtitleTrackUpdated, this);\n hls.on(Events.EVENT_CUE_ENTER, this.onInterstitialCueEnter, this);\n hls.on(Events.ASSET_LIST_LOADED, this.onAssetListLoaded, this);\n hls.on(Events.BUFFER_APPENDED, this.onBufferAppended, this);\n hls.on(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n hls.on(Events.BUFFERED_TO_END, this.onBufferedToEnd, this);\n hls.on(Events.MEDIA_ENDED, this.onMediaEnded, this);\n hls.on(Events.ERROR, this.onError, this);\n hls.on(Events.DESTROYING, this.onDestroying, this);\n }\n }\n unregisterListeners() {\n const hls = this.hls;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (hls) {\n hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n hls.off(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n hls.off(Events.AUDIO_TRACK_UPDATED, this.onAudioTrackUpdated, this);\n hls.off(Events.SUBTITLE_TRACK_SWITCH, this.onSubtitleTrackSwitch, this);\n hls.off(Events.SUBTITLE_TRACK_UPDATED, this.onSubtitleTrackUpdated, this);\n hls.off(Events.EVENT_CUE_ENTER, this.onInterstitialCueEnter, this);\n hls.off(Events.ASSET_LIST_LOADED, this.onAssetListLoaded, this);\n hls.off(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n hls.off(Events.BUFFER_APPENDED, this.onBufferAppended, this);\n hls.off(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n hls.off(Events.BUFFERED_TO_END, this.onBufferedToEnd, this);\n hls.off(Events.MEDIA_ENDED, this.onMediaEnded, this);\n hls.off(Events.ERROR, this.onError, this);\n hls.off(Events.DESTROYING, this.onDestroying, this);\n }\n }\n startLoad() {\n // TODO: startLoad - check for waitingItem and retry by resetting schedule\n this.resumeBuffering();\n }\n stopLoad() {\n // TODO: stopLoad - stop all scheule.events[].assetListLoader?.abort() then delete the loaders\n this.pauseBuffering();\n }\n resumeBuffering() {\n var _this$getBufferingPla;\n (_this$getBufferingPla = this.getBufferingPlayer()) == null || _this$getBufferingPla.resumeBuffering();\n }\n pauseBuffering() {\n var _this$getBufferingPla2;\n (_this$getBufferingPla2 = this.getBufferingPlayer()) == null || _this$getBufferingPla2.pauseBuffering();\n }\n destroy() {\n this.unregisterListeners();\n this.stopLoad();\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this.assetListLoader) {\n this.assetListLoader.destroy();\n }\n this.emptyPlayerQueue();\n this.clearScheduleState();\n if (this.schedule) {\n this.schedule.destroy();\n }\n this.media = this.detachedData = this.mediaSelection = this.requiredTracks = this.altSelection = this.schedule = this.manager = null;\n // @ts-ignore\n this.hls = this.HlsPlayerClass = this.log = null;\n // @ts-ignore\n this.assetListLoader = null;\n // @ts-ignore\n this.onPlay = this.onPause = this.onSeeking = this.onTimeupdate = null;\n // @ts-ignore\n this.onScheduleUpdate = null;\n }\n onDestroying() {\n const media = this.primaryMedia || this.media;\n if (media) {\n this.removeMediaListeners(media);\n }\n }\n removeMediaListeners(media) {\n removeEventListener(media, 'play', this.onPlay);\n removeEventListener(media, 'pause', this.onPause);\n removeEventListener(media, 'seeking', this.onSeeking);\n removeEventListener(media, 'timeupdate', this.onTimeupdate);\n }\n onMediaAttaching(event, data) {\n const media = this.media = data.media;\n addEventListener(media, 'seeking', this.onSeeking);\n addEventListener(media, 'timeupdate', this.onTimeupdate);\n addEventListener(media, 'play', this.onPlay);\n addEventListener(media, 'pause', this.onPause);\n }\n onMediaAttached(event, data) {\n const playingItem = this.effectivePlayingItem;\n const detachedMedia = this.detachedData;\n this.detachedData = null;\n if (playingItem === null) {\n this.checkStart();\n } else if (!detachedMedia) {\n // Resume schedule after detached externally\n this.clearScheduleState();\n const playingIndex = this.findItemIndex(playingItem);\n this.setSchedulePosition(playingIndex);\n }\n }\n clearScheduleState() {\n this.log(`clear schedule state`);\n this.playingItem = this.bufferingItem = this.waitingItem = this.endedItem = this.playingAsset = this.endedAsset = this.bufferingAsset = null;\n }\n onMediaDetaching(event, data) {\n const transferringMedia = !!data.transferMedia;\n const media = this.media;\n this.media = null;\n if (transferringMedia) {\n return;\n }\n if (media) {\n this.removeMediaListeners(media);\n }\n // If detachMedia is called while in an Interstitial, detach the asset player as well and reset the schedule position\n if (this.detachedData) {\n const player = this.getBufferingPlayer();\n if (player) {\n this.log(`Removing schedule state for detachedData and ${player}`);\n this.playingAsset = this.endedAsset = this.bufferingAsset = this.bufferingItem = this.waitingItem = this.detachedData = null;\n player.detachMedia();\n }\n this.shouldPlay = false;\n }\n }\n get interstitialsManager() {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!this.hls) {\n return null;\n }\n if (this.manager) {\n return this.manager;\n }\n const c = this;\n const effectiveBufferingItem = () => c.bufferingItem || c.waitingItem;\n const getAssetPlayer = asset => asset ? c.getAssetPlayer(asset.identifier) : asset;\n const getMappedTime = (item, timelineType, asset, controllerField, assetPlayerField) => {\n if (item) {\n let time = item[timelineType].start;\n const interstitial = item.event;\n if (interstitial) {\n if (timelineType === 'playout' || interstitial.timelineOccupancy !== TimelineOccupancy.Point) {\n const assetPlayer = getAssetPlayer(asset);\n if ((assetPlayer == null ? void 0 : assetPlayer.interstitial) === interstitial) {\n time += assetPlayer.assetItem.startOffset + assetPlayer[assetPlayerField];\n }\n }\n } else {\n const value = controllerField === 'bufferedPos' ? getBufferedEnd() : c[controllerField];\n time += value - item.start;\n }\n return time;\n }\n return 0;\n };\n const findMappedTime = (primaryTime, timelineType) => {\n var _c$schedule;\n if (primaryTime !== 0 && timelineType !== 'primary' && (_c$schedule = c.schedule) != null && _c$schedule.length) {\n var _c$schedule$items;\n const index = c.schedule.findItemIndexAtTime(primaryTime);\n const item = (_c$schedule$items = c.schedule.items) == null ? void 0 : _c$schedule$items[index];\n if (item) {\n const diff = item[timelineType].start - item.start;\n return primaryTime + diff;\n }\n }\n return primaryTime;\n };\n const getBufferedEnd = () => {\n const value = c.bufferedPos;\n if (value === Number.MAX_VALUE) {\n return getMappedDuration('primary');\n }\n return Math.max(value, 0);\n };\n const getMappedDuration = timelineType => {\n var _c$primaryDetails, _c$schedule2;\n if ((_c$primaryDetails = c.primaryDetails) != null && _c$primaryDetails.live) {\n // return end of last event item or playlist\n return c.primaryDetails.edge;\n }\n return ((_c$schedule2 = c.schedule) == null ? void 0 : _c$schedule2.durations[timelineType]) || 0;\n };\n const seekTo = (time, timelineType) => {\n var _item$event, _c$schedule$items2;\n const item = c.effectivePlayingItem;\n if (item != null && (_item$event = item.event) != null && _item$event.restrictions.skip || !c.schedule) {\n return;\n }\n c.log(`seek to ${time} \"${timelineType}\"`);\n const playingItem = c.effectivePlayingItem;\n const targetIndex = c.schedule.findItemIndexAtTime(time, timelineType);\n const targetItem = (_c$schedule$items2 = c.schedule.items) == null ? void 0 : _c$schedule$items2[targetIndex];\n const bufferingPlayer = c.getBufferingPlayer();\n const bufferingInterstitial = bufferingPlayer == null ? void 0 : bufferingPlayer.interstitial;\n const appendInPlace = bufferingInterstitial == null ? void 0 : bufferingInterstitial.appendInPlace;\n const seekInItem = playingItem && c.itemsMatch(playingItem, targetItem);\n if (playingItem && (appendInPlace || seekInItem)) {\n // seek in asset player or primary media (appendInPlace)\n const assetPlayer = getAssetPlayer(c.playingAsset);\n const media = (assetPlayer == null ? void 0 : assetPlayer.media) || c.primaryMedia;\n if (media) {\n const currentTime = timelineType === 'primary' ? media.currentTime : getMappedTime(playingItem, timelineType, c.playingAsset, 'timelinePos', 'currentTime');\n const diff = time - currentTime;\n const seekToTime = (appendInPlace ? currentTime : media.currentTime) + diff;\n if (seekToTime >= 0 && (!assetPlayer || appendInPlace || seekToTime <= assetPlayer.duration)) {\n media.currentTime = seekToTime;\n return;\n }\n }\n }\n // seek out of item or asset\n if (targetItem) {\n let seekToTime = time;\n if (timelineType !== 'primary') {\n const primarySegmentStart = targetItem[timelineType].start;\n const diff = time - primarySegmentStart;\n seekToTime = targetItem.start + diff;\n }\n const targetIsPrimary = !c.isInterstitial(targetItem);\n if ((!c.isInterstitial(playingItem) || playingItem.event.appendInPlace) && (targetIsPrimary || targetItem.event.appendInPlace)) {\n const media = c.media || (appendInPlace ? bufferingPlayer == null ? void 0 : bufferingPlayer.media : null);\n if (media) {\n media.currentTime = seekToTime;\n }\n } else if (playingItem) {\n // check if an Interstitial between the current item and target item has an X-RESTRICT JUMP restriction\n const playingIndex = c.findItemIndex(playingItem);\n if (targetIndex > playingIndex) {\n const jumpIndex = c.schedule.findJumpRestrictedIndex(playingIndex + 1, targetIndex);\n if (jumpIndex > playingIndex) {\n c.setSchedulePosition(jumpIndex);\n return;\n }\n }\n let assetIndex = 0;\n if (targetIsPrimary) {\n c.timelinePos = seekToTime;\n c.checkBuffer();\n } else {\n const assetList = targetItem.event.assetList;\n const eventTime = time - (targetItem[timelineType] || targetItem).start;\n for (let i = assetList.length; i--;) {\n const asset = assetList[i];\n if (asset.duration && eventTime >= asset.startOffset && eventTime < asset.startOffset + asset.duration) {\n assetIndex = i;\n break;\n }\n }\n }\n c.setSchedulePosition(targetIndex, assetIndex);\n }\n }\n };\n const getActiveInterstitial = () => {\n const playingItem = c.effectivePlayingItem;\n if (c.isInterstitial(playingItem)) {\n return playingItem;\n }\n const bufferingItem = effectiveBufferingItem();\n if (c.isInterstitial(bufferingItem)) {\n return bufferingItem;\n }\n return null;\n };\n const interstitialPlayer = {\n get bufferedEnd() {\n const interstitialItem = effectiveBufferingItem();\n const bufferingItem = c.bufferingItem;\n if (bufferingItem && bufferingItem === interstitialItem) {\n var _c$bufferingAsset;\n return getMappedTime(bufferingItem, 'playout', c.bufferingAsset, 'bufferedPos', 'bufferedEnd') - bufferingItem.playout.start || ((_c$bufferingAsset = c.bufferingAsset) == null ? void 0 : _c$bufferingAsset.startOffset) || 0;\n }\n return 0;\n },\n get currentTime() {\n const interstitialItem = getActiveInterstitial();\n const playingItem = c.effectivePlayingItem;\n if (playingItem && playingItem === interstitialItem) {\n return getMappedTime(playingItem, 'playout', c.effectivePlayingAsset, 'timelinePos', 'currentTime') - playingItem.playout.start;\n }\n return 0;\n },\n set currentTime(time) {\n const interstitialItem = getActiveInterstitial();\n const playingItem = c.effectivePlayingItem;\n if (playingItem && playingItem === interstitialItem) {\n seekTo(time + playingItem.playout.start, 'playout');\n }\n },\n get duration() {\n const interstitialItem = getActiveInterstitial();\n if (interstitialItem) {\n return interstitialItem.playout.end - interstitialItem.playout.start;\n }\n return 0;\n },\n get assetPlayers() {\n var _getActiveInterstitia;\n const assetList = (_getActiveInterstitia = getActiveInterstitial()) == null ? void 0 : _getActiveInterstitia.event.assetList;\n if (assetList) {\n return assetList.map(asset => c.getAssetPlayer(asset.identifier));\n }\n return [];\n },\n get playingIndex() {\n var _getActiveInterstitia2;\n const interstitial = (_getActiveInterstitia2 = getActiveInterstitial()) == null ? void 0 : _getActiveInterstitia2.event;\n if (interstitial && c.effectivePlayingAsset) {\n return interstitial.findAssetIndex(c.effectivePlayingAsset);\n }\n return -1;\n },\n get scheduleItem() {\n return getActiveInterstitial();\n }\n };\n return this.manager = {\n get events() {\n var _c$schedule3;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return ((_c$schedule3 = c.schedule) == null || (_c$schedule3 = _c$schedule3.events) == null ? void 0 : _c$schedule3.slice(0)) || [];\n },\n get schedule() {\n var _c$schedule4;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return ((_c$schedule4 = c.schedule) == null || (_c$schedule4 = _c$schedule4.items) == null ? void 0 : _c$schedule4.slice(0)) || [];\n },\n get interstitialPlayer() {\n if (getActiveInterstitial()) {\n return interstitialPlayer;\n }\n return null;\n },\n get playerQueue() {\n return c.playerQueue.slice(0);\n },\n get bufferingAsset() {\n return c.bufferingAsset;\n },\n get bufferingItem() {\n return effectiveBufferingItem();\n },\n get bufferingIndex() {\n const item = effectiveBufferingItem();\n return c.findItemIndex(item);\n },\n get playingAsset() {\n return c.effectivePlayingAsset;\n },\n get playingItem() {\n return c.effectivePlayingItem;\n },\n get playingIndex() {\n const item = c.effectivePlayingItem;\n return c.findItemIndex(item);\n },\n primary: {\n get bufferedEnd() {\n return getBufferedEnd();\n },\n get currentTime() {\n const timelinePos = c.timelinePos;\n return timelinePos > 0 ? timelinePos : 0;\n },\n set currentTime(time) {\n seekTo(time, 'primary');\n },\n get duration() {\n return getMappedDuration('primary');\n },\n get seekableStart() {\n var _c$primaryDetails2;\n return ((_c$primaryDetails2 = c.primaryDetails) == null ? void 0 : _c$primaryDetails2.fragmentStart) || 0;\n }\n },\n integrated: {\n get bufferedEnd() {\n return getMappedTime(effectiveBufferingItem(), 'integrated', c.bufferingAsset, 'bufferedPos', 'bufferedEnd');\n },\n get currentTime() {\n return getMappedTime(c.effectivePlayingItem, 'integrated', c.effectivePlayingAsset, 'timelinePos', 'currentTime');\n },\n set currentTime(time) {\n seekTo(time, 'integrated');\n },\n get duration() {\n return getMappedDuration('integrated');\n },\n get seekableStart() {\n var _c$primaryDetails3;\n return findMappedTime(((_c$primaryDetails3 = c.primaryDetails) == null ? void 0 : _c$primaryDetails3.fragmentStart) || 0, 'integrated');\n }\n },\n skip: () => {\n const item = c.effectivePlayingItem;\n const event = item == null ? void 0 : item.event;\n if (event && !event.restrictions.skip) {\n const index = c.findItemIndex(item);\n if (event.appendInPlace) {\n const time = item.playout.start + item.event.duration;\n seekTo(time + 0.001, 'playout');\n } else {\n c.advanceAfterAssetEnded(event, index, Infinity);\n }\n }\n }\n };\n }\n\n // Schedule getters\n get effectivePlayingItem() {\n return this.waitingItem || this.playingItem || this.endedItem;\n }\n get effectivePlayingAsset() {\n return this.playingAsset || this.endedAsset;\n }\n get playingLastItem() {\n var _this$schedule;\n const playingItem = this.playingItem;\n const items = (_this$schedule = this.schedule) == null ? void 0 : _this$schedule.items;\n if (!this.playbackStarted || !playingItem || !items) {\n return false;\n }\n return this.findItemIndex(playingItem) === items.length - 1;\n }\n get playbackStarted() {\n return this.effectivePlayingItem !== null;\n }\n\n // Media getters and event callbacks\n get currentTime() {\n var _this$bufferingItem, _media;\n if (this.mediaSelection === null) {\n // Do not advance before schedule is known\n return undefined;\n }\n // Ignore currentTime when detached for Interstitial playback with source reset\n const queuedForPlayback = this.waitingItem || this.playingItem;\n if (this.isInterstitial(queuedForPlayback) && !queuedForPlayback.event.appendInPlace) {\n return undefined;\n }\n let media = this.media;\n if (!media && (_this$bufferingItem = this.bufferingItem) != null && (_this$bufferingItem = _this$bufferingItem.event) != null && _this$bufferingItem.appendInPlace) {\n // Observe detached media currentTime when appending in place\n media = this.primaryMedia;\n }\n const currentTime = (_media = media) == null ? void 0 : _media.currentTime;\n if (currentTime === undefined || !isFiniteNumber(currentTime)) {\n return undefined;\n }\n return currentTime;\n }\n get primaryMedia() {\n var _this$detachedData;\n return this.media || ((_this$detachedData = this.detachedData) == null ? void 0 : _this$detachedData.media) || null;\n }\n isInterstitial(item) {\n return !!(item != null && item.event);\n }\n retreiveMediaSource(assetId, toSegment) {\n const player = this.getAssetPlayer(assetId);\n if (player) {\n this.transferMediaFromPlayer(player, toSegment);\n }\n }\n transferMediaFromPlayer(player, toSegment) {\n const appendInPlace = player.interstitial.appendInPlace;\n const playerMedia = player.media;\n if (appendInPlace && playerMedia === this.primaryMedia) {\n this.bufferingAsset = null;\n if (!toSegment || this.isInterstitial(toSegment) && !toSegment.event.appendInPlace) {\n // MediaSource cannot be transfered back to an Interstitial that requires a source reset\n // no-op when toSegment is undefined\n if (toSegment && playerMedia) {\n this.detachedData = {\n media: playerMedia\n };\n return;\n }\n }\n const attachMediaSourceData = player.transferMedia();\n this.log(`transfer MediaSource from ${player} ${stringify(attachMediaSourceData)}`);\n this.detachedData = attachMediaSourceData;\n } else if (toSegment && playerMedia) {\n this.shouldPlay || (this.shouldPlay = !playerMedia.paused);\n }\n }\n transferMediaTo(player, media) {\n var _this$detachedData2, _attachMediaSourceDat;\n if (player.media === media) {\n return;\n }\n let attachMediaSourceData = null;\n const primaryPlayer = this.hls;\n const isAssetPlayer = player !== primaryPlayer;\n const appendInPlace = isAssetPlayer && player.interstitial.appendInPlace;\n const detachedMediaSource = (_this$detachedData2 = this.detachedData) == null ? void 0 : _this$detachedData2.mediaSource;\n let logFromSource;\n if (primaryPlayer.media) {\n if (appendInPlace) {\n attachMediaSourceData = primaryPlayer.transferMedia();\n this.detachedData = attachMediaSourceData;\n }\n logFromSource = `Primary`;\n } else if (detachedMediaSource) {\n const bufferingPlayer = this.getBufferingPlayer();\n if (bufferingPlayer) {\n attachMediaSourceData = bufferingPlayer.transferMedia();\n logFromSource = `${bufferingPlayer}`;\n } else {\n logFromSource = `detached MediaSource`;\n }\n } else {\n logFromSource = `detached media`;\n }\n if (!attachMediaSourceData) {\n if (detachedMediaSource) {\n attachMediaSourceData = this.detachedData;\n this.log(`using detachedData: MediaSource ${stringify(attachMediaSourceData)}`);\n } else if (!this.detachedData || primaryPlayer.media === media) {\n // Keep interstitial media transition consistent\n const playerQueue = this.playerQueue;\n if (playerQueue.length > 1) {\n playerQueue.forEach(queuedPlayer => {\n if (isAssetPlayer && queuedPlayer.interstitial.appendInPlace !== appendInPlace) {\n const interstitial = queuedPlayer.interstitial;\n this.clearInterstitial(queuedPlayer.interstitial, null);\n interstitial.appendInPlace = false; // setter may be a no-op;\n // `appendInPlace` getter may still return `true` after insterstitial streaming has begun in that mode.\n if (interstitial.appendInPlace) {\n this.warn(`Could not change append strategy for queued assets ${interstitial}`);\n }\n }\n });\n }\n this.hls.detachMedia();\n this.detachedData = {\n media\n };\n }\n }\n const transferring = attachMediaSourceData && 'mediaSource' in attachMediaSourceData && ((_attachMediaSourceDat = attachMediaSourceData.mediaSource) == null ? void 0 : _attachMediaSourceDat.readyState) !== 'closed';\n const dataToAttach = transferring && attachMediaSourceData ? attachMediaSourceData : media;\n this.log(`${transferring ? 'transfering MediaSource' : 'attaching media'} to ${isAssetPlayer ? player : 'Primary'} from ${logFromSource} (media.currentTime: ${media.currentTime})`);\n const schedule = this.schedule;\n if (dataToAttach === attachMediaSourceData && schedule) {\n const isAssetAtEndOfSchedule = isAssetPlayer && player.assetId === schedule.assetIdAtEnd;\n // Prevent asset players from marking EoS on transferred MediaSource\n dataToAttach.overrides = {\n duration: schedule.duration,\n endOfStream: !isAssetPlayer || isAssetAtEndOfSchedule,\n cueRemoval: !isAssetPlayer\n };\n }\n player.attachMedia(dataToAttach);\n }\n onInterstitialCueEnter() {\n this.onTimeupdate();\n }\n // Scheduling methods\n checkStart() {\n const schedule = this.schedule;\n const interstitialEvents = schedule == null ? void 0 : schedule.events;\n if (!interstitialEvents || this.playbackDisabled || !this.media) {\n return;\n }\n // Check buffered to pre-roll\n if (this.bufferedPos === -1) {\n this.bufferedPos = 0;\n }\n // Start stepping through schedule when playback begins for the first time and we have a pre-roll\n const timelinePos = this.timelinePos;\n const effectivePlayingItem = this.effectivePlayingItem;\n if (timelinePos === -1) {\n const startPosition = this.hls.startPosition;\n this.timelinePos = startPosition;\n if (interstitialEvents.length === 0) {\n this.setSchedulePosition(0);\n } else if (interstitialEvents[0].cue.pre) {\n this.log(timelineMessage('checkStart (preroll)', startPosition));\n const index = schedule.findEventIndex(interstitialEvents[0].identifier);\n this.setSchedulePosition(index);\n } else if (startPosition >= 0 || !this.primaryLive) {\n this.log(timelineMessage('checkStart', startPosition));\n const start = this.timelinePos = startPosition > 0 ? startPosition : 0;\n const index = schedule.findItemIndexAtTime(start);\n this.setSchedulePosition(index);\n } else if (this.hls.liveSyncPosition === 0) {\n this.setSchedulePosition(0);\n } else {\n this.log('[checkStart] waiting for live start');\n }\n } else if (effectivePlayingItem && !this.playingItem) {\n this.log(timelineMessage('checkStart (playing item)', effectivePlayingItem.start));\n const index = schedule.findItemIndex(effectivePlayingItem);\n this.setSchedulePosition(index);\n }\n }\n advanceAssetBuffering(item, assetItem) {\n const interstitial = item.event;\n const assetListIndex = interstitial.findAssetIndex(assetItem);\n const nextAssetIndex = getNextAssetIndex(interstitial, assetListIndex);\n if (!interstitial.isAssetPastPlayoutLimit(nextAssetIndex)) {\n this.bufferedToEvent(item, nextAssetIndex);\n } else if (this.schedule) {\n var _this$schedule$items;\n const nextItem = (_this$schedule$items = this.schedule.items) == null ? void 0 : _this$schedule$items[this.findItemIndex(item) + 1];\n if (nextItem) {\n this.bufferedToItem(nextItem);\n }\n }\n }\n advanceAfterAssetEnded(interstitial, index, assetListIndex) {\n const nextAssetIndex = getNextAssetIndex(interstitial, assetListIndex);\n if (!interstitial.isAssetPastPlayoutLimit(nextAssetIndex)) {\n // Advance to next asset list item\n if (interstitial.appendInPlace) {\n const assetItem = interstitial.assetList[nextAssetIndex];\n if (assetItem) {\n this.advanceInPlace(assetItem.timelineStart);\n }\n }\n this.setSchedulePosition(index, nextAssetIndex);\n } else if (this.schedule) {\n // Advance to next schedule segment\n // check if we've reached the end of the program\n const scheduleItems = this.schedule.items;\n if (scheduleItems) {\n const nextIndex = index + 1;\n const scheduleLength = scheduleItems.length;\n if (nextIndex >= scheduleLength) {\n this.setSchedulePosition(-1);\n return;\n }\n const resumptionTime = interstitial.resumeTime;\n if (this.timelinePos < resumptionTime) {\n this.log(timelineMessage('advanceAfterAssetEnded', resumptionTime));\n this.timelinePos = resumptionTime;\n if (interstitial.appendInPlace) {\n this.advanceInPlace(resumptionTime);\n }\n this.checkBuffer(this.bufferedPos < resumptionTime);\n }\n this.setSchedulePosition(nextIndex);\n }\n }\n }\n setScheduleToAssetAtTime(time, playingAsset) {\n const schedule = this.schedule;\n if (!schedule) {\n return;\n }\n const parentIdentifier = playingAsset.parentIdentifier;\n const interstitial = schedule.getEvent(parentIdentifier);\n if (interstitial) {\n const itemIndex = schedule.findEventIndex(parentIdentifier);\n const assetListIndex = schedule.findAssetIndex(interstitial, time);\n this.advanceAfterAssetEnded(interstitial, itemIndex, assetListIndex - 1);\n }\n }\n setSchedulePosition(index, assetListIndex) {\n var _this$schedule2;\n const scheduleItems = (_this$schedule2 = this.schedule) == null ? void 0 : _this$schedule2.items;\n if (!scheduleItems || this.playbackDisabled) {\n return;\n }\n const scheduledItem = index >= 0 ? scheduleItems[index] : null;\n this.log(`setSchedulePosition ${index}, ${assetListIndex} (${scheduledItem ? segmentToString(scheduledItem) : scheduledItem}) pos: ${this.timelinePos}`);\n // Cleanup current item / asset\n const currentItem = this.waitingItem || this.playingItem;\n const playingLastItem = this.playingLastItem;\n if (this.isInterstitial(currentItem)) {\n const interstitial = currentItem.event;\n const playingAsset = this.playingAsset;\n const assetId = playingAsset == null ? void 0 : playingAsset.identifier;\n const player = assetId ? this.getAssetPlayer(assetId) : null;\n if (player && assetId && (!this.eventItemsMatch(currentItem, scheduledItem) || assetListIndex !== undefined && assetId !== interstitial.assetList[assetListIndex].identifier)) {\n var _this$detachedData3;\n const playingAssetListIndex = interstitial.findAssetIndex(playingAsset);\n this.log(`INTERSTITIAL_ASSET_ENDED ${playingAssetListIndex + 1}/${interstitial.assetList.length} ${eventAssetToString(playingAsset)}`);\n this.endedAsset = playingAsset;\n this.playingAsset = null;\n this.hls.trigger(Events.INTERSTITIAL_ASSET_ENDED, {\n asset: playingAsset,\n assetListIndex: playingAssetListIndex,\n event: interstitial,\n schedule: scheduleItems.slice(0),\n scheduleIndex: index,\n player\n });\n if (currentItem !== this.playingItem) {\n // Schedule change occured on INTERSTITIAL_ASSET_ENDED\n if (this.itemsMatch(currentItem, this.playingItem) &&\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n !this.playingAsset // INTERSTITIAL_ASSET_ENDED side-effect\n ) {\n this.advanceAfterAssetEnded(interstitial, this.findItemIndex(this.playingItem), playingAssetListIndex);\n }\n // Navigation occured on INTERSTITIAL_ASSET_ENDED\n return;\n }\n this.retreiveMediaSource(assetId, scheduledItem);\n if (player.media && !((_this$detachedData3 = this.detachedData) != null && _this$detachedData3.mediaSource)) {\n player.detachMedia();\n }\n }\n if (!this.eventItemsMatch(currentItem, scheduledItem)) {\n this.endedItem = currentItem;\n this.playingItem = null;\n this.log(`INTERSTITIAL_ENDED ${interstitial} ${segmentToString(currentItem)}`);\n interstitial.hasPlayed = true;\n this.hls.trigger(Events.INTERSTITIAL_ENDED, {\n event: interstitial,\n schedule: scheduleItems.slice(0),\n scheduleIndex: index\n });\n // Exiting an Interstitial\n if (interstitial.cue.once) {\n var _this$schedule3;\n // Remove interstitial with CUE attribute value of ONCE after it has played\n this.updateSchedule();\n const updatedScheduleItems = (_this$schedule3 = this.schedule) == null ? void 0 : _this$schedule3.items;\n if (scheduledItem && updatedScheduleItems) {\n const updatedIndex = this.findItemIndex(scheduledItem);\n this.advanceSchedule(updatedIndex, updatedScheduleItems, assetListIndex, currentItem, playingLastItem);\n }\n return;\n }\n }\n }\n this.advanceSchedule(index, scheduleItems, assetListIndex, currentItem, playingLastItem);\n }\n advanceSchedule(index, scheduleItems, assetListIndex, currentItem, playedLastItem) {\n const schedule = this.schedule;\n if (!schedule) {\n return;\n }\n const scheduledItem = scheduleItems[index] || null;\n const media = this.primaryMedia;\n // Cleanup out of range Interstitials\n const playerQueue = this.playerQueue;\n if (playerQueue.length) {\n playerQueue.forEach(player => {\n const interstitial = player.interstitial;\n const queuedIndex = schedule.findEventIndex(interstitial.identifier);\n if (queuedIndex < index || queuedIndex > index + 1) {\n this.clearInterstitial(interstitial, scheduledItem);\n }\n });\n }\n // Setup scheduled item\n if (this.isInterstitial(scheduledItem)) {\n this.timelinePos = Math.min(Math.max(this.timelinePos, scheduledItem.start), scheduledItem.end);\n // Handle Interstitial\n const interstitial = scheduledItem.event;\n // find asset index\n if (assetListIndex === undefined) {\n assetListIndex = schedule.findAssetIndex(interstitial, this.timelinePos);\n const assetIndexCandidate = getNextAssetIndex(interstitial, assetListIndex - 1);\n if (interstitial.isAssetPastPlayoutLimit(assetIndexCandidate) || interstitial.appendInPlace && this.timelinePos === scheduledItem.end) {\n this.advanceAfterAssetEnded(interstitial, index, assetListIndex);\n return;\n }\n assetListIndex = assetIndexCandidate;\n }\n // Ensure Interstitial is enqueued\n const waitingItem = this.waitingItem;\n if (!this.assetsBuffered(scheduledItem, media)) {\n this.setBufferingItem(scheduledItem);\n }\n let player = this.preloadAssets(interstitial, assetListIndex);\n if (!this.eventItemsMatch(scheduledItem, waitingItem || currentItem)) {\n this.waitingItem = scheduledItem;\n this.log(`INTERSTITIAL_STARTED ${segmentToString(scheduledItem)} ${interstitial.appendInPlace ? 'append in place' : ''}`);\n this.hls.trigger(Events.INTERSTITIAL_STARTED, {\n event: interstitial,\n schedule: scheduleItems.slice(0),\n scheduleIndex: index\n });\n }\n if (!interstitial.assetListLoaded) {\n // Waiting at end of primary content segment\n // Expect setSchedulePosition to be called again once ASSET-LIST is loaded\n this.log(`Waiting for ASSET-LIST to complete loading ${interstitial}`);\n return;\n }\n if (interstitial.assetListLoader) {\n interstitial.assetListLoader.destroy();\n interstitial.assetListLoader = undefined;\n }\n if (!media) {\n this.log(`Waiting for attachMedia to start Interstitial ${interstitial}`);\n return;\n }\n // Update schedule and asset list position now that it can start\n this.waitingItem = this.endedItem = null;\n this.playingItem = scheduledItem;\n\n // If asset-list is empty or missing asset index, advance to next item\n const assetItem = interstitial.assetList[assetListIndex];\n if (!assetItem) {\n this.advanceAfterAssetEnded(interstitial, index, assetListIndex || 0);\n return;\n }\n\n // Start Interstitial Playback\n if (!player) {\n player = this.getAssetPlayer(assetItem.identifier);\n }\n if (player === null || player.destroyed) {\n const assetListLength = interstitial.assetList.length;\n this.warn(`asset ${assetListIndex + 1}/${assetListLength} player destroyed ${interstitial}`);\n player = this.createAssetPlayer(interstitial, assetItem, assetListIndex);\n player.loadSource();\n }\n if (!this.eventItemsMatch(scheduledItem, this.bufferingItem)) {\n if (interstitial.appendInPlace && this.isAssetBuffered(assetItem)) {\n return;\n }\n }\n this.startAssetPlayer(player, assetListIndex, scheduleItems, index, media);\n if (this.shouldPlay) {\n playWithCatch(player.media);\n }\n } else if (scheduledItem) {\n this.resumePrimary(scheduledItem, index, currentItem);\n if (this.shouldPlay) {\n playWithCatch(this.hls.media);\n }\n } else if (playedLastItem && this.isInterstitial(currentItem)) {\n // Maintain playingItem state at end of schedule (setSchedulePosition(-1) called to end program)\n // this allows onSeeking handler to update schedule position\n this.endedItem = null;\n this.playingItem = currentItem;\n if (!currentItem.event.appendInPlace) {\n // Media must be re-attached to resume primary schedule if not sharing source\n this.attachPrimary(schedule.durations.primary, null);\n }\n }\n }\n get playbackDisabled() {\n return this.hls.config.enableInterstitialPlayback === false;\n }\n get primaryDetails() {\n var _this$mediaSelection;\n return (_this$mediaSelection = this.mediaSelection) == null ? void 0 : _this$mediaSelection.main.details;\n }\n get primaryLive() {\n var _this$primaryDetails;\n return !!((_this$primaryDetails = this.primaryDetails) != null && _this$primaryDetails.live);\n }\n resumePrimary(scheduledItem, index, fromItem) {\n var _this$detachedData4, _this$schedule4;\n this.playingItem = scheduledItem;\n this.playingAsset = this.endedAsset = null;\n this.waitingItem = this.endedItem = null;\n this.bufferedToItem(scheduledItem);\n this.log(`resuming ${segmentToString(scheduledItem)}`);\n if (!((_this$detachedData4 = this.detachedData) != null && _this$detachedData4.mediaSource)) {\n let timelinePos = this.timelinePos;\n if (timelinePos < scheduledItem.start || timelinePos >= scheduledItem.end) {\n timelinePos = this.getPrimaryResumption(scheduledItem, index);\n this.log(timelineMessage('resumePrimary', timelinePos));\n this.timelinePos = timelinePos;\n }\n this.attachPrimary(timelinePos, scheduledItem);\n }\n if (!fromItem) {\n return;\n }\n const scheduleItems = (_this$schedule4 = this.schedule) == null ? void 0 : _this$schedule4.items;\n if (!scheduleItems) {\n return;\n }\n this.log(`INTERSTITIALS_PRIMARY_RESUMED ${segmentToString(scheduledItem)}`);\n this.hls.trigger(Events.INTERSTITIALS_PRIMARY_RESUMED, {\n schedule: scheduleItems.slice(0),\n scheduleIndex: index\n });\n this.checkBuffer();\n }\n getPrimaryResumption(scheduledItem, index) {\n const itemStart = scheduledItem.start;\n if (this.primaryLive) {\n const details = this.primaryDetails;\n if (index === 0) {\n return this.hls.startPosition;\n } else if (details && (itemStart < details.fragmentStart || itemStart > details.edge)) {\n return this.hls.liveSyncPosition || -1;\n }\n }\n return itemStart;\n }\n isAssetBuffered(asset) {\n const player = this.getAssetPlayer(asset.identifier);\n if (player != null && player.hls) {\n return player.hls.bufferedToEnd;\n }\n const bufferInfo = BufferHelper.bufferInfo(this.primaryMedia, this.timelinePos, 0);\n return bufferInfo.end + 1 >= asset.timelineStart + (asset.duration || 0);\n }\n attachPrimary(timelinePos, item, skipSeekToStartPosition) {\n if (item) {\n this.setBufferingItem(item);\n } else {\n this.bufferingItem = this.playingItem;\n }\n this.bufferingAsset = null;\n const media = this.primaryMedia;\n if (!media) {\n return;\n }\n const hls = this.hls;\n if (hls.media) {\n this.checkBuffer();\n } else {\n this.transferMediaTo(hls, media);\n if (skipSeekToStartPosition) {\n this.startLoadingPrimaryAt(timelinePos, skipSeekToStartPosition);\n }\n }\n if (!skipSeekToStartPosition) {\n // Set primary position to resume time\n this.log(timelineMessage('attachPrimary', timelinePos));\n this.timelinePos = timelinePos;\n this.startLoadingPrimaryAt(timelinePos, skipSeekToStartPosition);\n }\n }\n startLoadingPrimaryAt(timelinePos, skipSeekToStartPosition) {\n var _hls$mainForwardBuffe;\n const hls = this.hls;\n if (!hls.loadingEnabled || !hls.media || Math.abs((((_hls$mainForwardBuffe = hls.mainForwardBufferInfo) == null ? void 0 : _hls$mainForwardBuffe.start) || hls.media.currentTime) - timelinePos) > 0.5) {\n hls.startLoad(timelinePos, skipSeekToStartPosition);\n } else if (!hls.bufferingEnabled) {\n hls.resumeBuffering();\n }\n }\n\n // HLS.js event callbacks\n onManifestLoading() {\n var _this$schedule5;\n this.stopLoad();\n (_this$schedule5 = this.schedule) == null || _this$schedule5.reset();\n this.emptyPlayerQueue();\n this.clearScheduleState();\n this.shouldPlay = false;\n this.bufferedPos = this.timelinePos = -1;\n this.mediaSelection = this.altSelection = this.manager = this.requiredTracks = null;\n // BUFFER_CODECS listener added here for buffer-controller to handle it first where it adds tracks\n this.hls.off(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n this.hls.on(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n }\n onLevelUpdated(event, data) {\n if (data.level === -1 || !this.schedule) {\n // level was removed\n return;\n }\n const main = this.hls.levels[data.level];\n if (!main.details) {\n return;\n }\n const currentSelection = _objectSpread2(_objectSpread2({}, this.mediaSelection || this.altSelection), {}, {\n main\n });\n this.mediaSelection = currentSelection;\n this.schedule.parseInterstitialDateRanges(currentSelection, this.hls.config.interstitialAppendInPlace);\n if (!this.effectivePlayingItem && this.schedule.items) {\n this.checkStart();\n }\n }\n onAudioTrackUpdated(event, data) {\n const audio = this.hls.audioTracks[data.id];\n const previousSelection = this.mediaSelection;\n if (!previousSelection) {\n this.altSelection = _objectSpread2(_objectSpread2({}, this.altSelection), {}, {\n audio\n });\n return;\n }\n const currentSelection = _objectSpread2(_objectSpread2({}, previousSelection), {}, {\n audio\n });\n this.mediaSelection = currentSelection;\n }\n onSubtitleTrackUpdated(event, data) {\n const subtitles = this.hls.subtitleTracks[data.id];\n const previousSelection = this.mediaSelection;\n if (!previousSelection) {\n this.altSelection = _objectSpread2(_objectSpread2({}, this.altSelection), {}, {\n subtitles\n });\n return;\n }\n const currentSelection = _objectSpread2(_objectSpread2({}, previousSelection), {}, {\n subtitles\n });\n this.mediaSelection = currentSelection;\n }\n onAudioTrackSwitching(event, data) {\n const audioOption = getBasicSelectionOption(data);\n this.playerQueue.forEach(({\n hls\n }) => hls && (hls.setAudioOption(data) || hls.setAudioOption(audioOption)));\n }\n onSubtitleTrackSwitch(event, data) {\n const subtitleOption = getBasicSelectionOption(data);\n this.playerQueue.forEach(({\n hls\n }) => hls && (hls.setSubtitleOption(data) || data.id !== -1 && hls.setSubtitleOption(subtitleOption)));\n }\n onBufferCodecs(event, data) {\n const requiredTracks = data.tracks;\n if (requiredTracks) {\n this.requiredTracks = requiredTracks;\n }\n }\n onBufferAppended(event, data) {\n this.checkBuffer();\n }\n onBufferFlushed(event, data) {\n const playingItem = this.playingItem;\n if (playingItem && !this.itemsMatch(playingItem, this.bufferingItem) && !this.isInterstitial(playingItem)) {\n const timelinePos = this.timelinePos;\n this.bufferedPos = timelinePos;\n this.checkBuffer();\n }\n }\n onBufferedToEnd(event) {\n if (!this.schedule) {\n return;\n }\n // Buffered to post-roll\n const interstitialEvents = this.schedule.events;\n if (this.bufferedPos < Number.MAX_VALUE && interstitialEvents) {\n for (let i = 0; i < interstitialEvents.length; i++) {\n const interstitial = interstitialEvents[i];\n if (interstitial.cue.post) {\n var _this$schedule$items2;\n const scheduleIndex = this.schedule.findEventIndex(interstitial.identifier);\n const item = (_this$schedule$items2 = this.schedule.items) == null ? void 0 : _this$schedule$items2[scheduleIndex];\n if (this.isInterstitial(item) && this.eventItemsMatch(item, this.bufferingItem)) {\n this.bufferedToItem(item, 0);\n }\n break;\n }\n }\n this.bufferedPos = Number.MAX_VALUE;\n }\n }\n onMediaEnded(event) {\n const playingItem = this.playingItem;\n if (!this.playingLastItem && playingItem) {\n const playingIndex = this.findItemIndex(playingItem);\n this.setSchedulePosition(playingIndex + 1);\n } else {\n this.shouldPlay = false;\n }\n }\n updateItem(previousItem, time) {\n var _this$schedule6;\n // find item in this.schedule.items;\n const items = (_this$schedule6 = this.schedule) == null ? void 0 : _this$schedule6.items;\n if (previousItem && items) {\n const index = this.findItemIndex(previousItem, time);\n return items[index] || null;\n }\n return null;\n }\n trimInPlace(updatedItem, itemBeforeUpdate) {\n if (this.isInterstitial(updatedItem) && updatedItem.event.appendInPlace && itemBeforeUpdate.end - updatedItem.end > 0.25) {\n updatedItem.event.assetList.forEach((asset, index) => {\n if (updatedItem.event.isAssetPastPlayoutLimit(index)) {\n this.clearAssetPlayer(asset.identifier, null);\n }\n });\n const flushStart = updatedItem.end + 0.25;\n const bufferInfo = BufferHelper.bufferInfo(this.primaryMedia, flushStart, 0);\n if (bufferInfo.end > flushStart || (bufferInfo.nextStart || 0) > flushStart) {\n this.log(`trim buffered interstitial ${segmentToString(updatedItem)} (was ${segmentToString(itemBeforeUpdate)})`);\n const skipSeekToStartPosition = true;\n this.attachPrimary(flushStart, null, skipSeekToStartPosition);\n this.flushFrontBuffer(flushStart);\n }\n }\n }\n itemsMatch(a, b) {\n return !!b && (a === b || a.event && b.event && this.eventItemsMatch(a, b) || !a.event && !b.event && this.findItemIndex(a) === this.findItemIndex(b));\n }\n eventItemsMatch(a, b) {\n var _b$event;\n return !!b && (a === b || a.event.identifier === ((_b$event = b.event) == null ? void 0 : _b$event.identifier));\n }\n findItemIndex(item, time) {\n return item && this.schedule ? this.schedule.findItemIndex(item, time) : -1;\n }\n updateSchedule(forceUpdate = false) {\n var _this$schedule7;\n const mediaSelection = this.mediaSelection;\n if (!mediaSelection) {\n return;\n }\n (_this$schedule7 = this.schedule) == null || _this$schedule7.updateSchedule(mediaSelection, [], forceUpdate);\n }\n\n // Schedule buffer control\n checkBuffer(starved) {\n var _this$schedule8;\n const items = (_this$schedule8 = this.schedule) == null ? void 0 : _this$schedule8.items;\n if (!items) {\n return;\n }\n // Find when combined forward buffer change reaches next schedule segment\n const bufferInfo = BufferHelper.bufferInfo(this.primaryMedia, this.timelinePos, 0);\n if (starved) {\n this.bufferedPos = this.timelinePos;\n }\n starved || (starved = bufferInfo.len < 1);\n this.updateBufferedPos(bufferInfo.end, items, starved);\n }\n updateBufferedPos(bufferEnd, items, bufferIsEmpty) {\n const schedule = this.schedule;\n const bufferingItem = this.bufferingItem;\n if (this.bufferedPos > bufferEnd || !schedule) {\n return;\n }\n if (items.length === 1 && this.itemsMatch(items[0], bufferingItem)) {\n this.bufferedPos = bufferEnd;\n return;\n }\n const playingItem = this.playingItem;\n const playingIndex = this.findItemIndex(playingItem);\n let bufferEndIndex = schedule.findItemIndexAtTime(bufferEnd);\n if (this.bufferedPos < bufferEnd) {\n var _nextItemToBuffer$eve;\n const bufferingIndex = this.findItemIndex(bufferingItem);\n const nextToBufferIndex = Math.min(bufferingIndex + 1, items.length - 1);\n const nextItemToBuffer = items[nextToBufferIndex];\n if (bufferEndIndex === -1 && bufferingItem && bufferEnd >= bufferingItem.end || (_nextItemToBuffer$eve = nextItemToBuffer.event) != null && _nextItemToBuffer$eve.appendInPlace && bufferEnd + 0.01 >= nextItemToBuffer.start) {\n bufferEndIndex = nextToBufferIndex;\n }\n if (this.isInterstitial(bufferingItem)) {\n const interstitial = bufferingItem.event;\n if (nextToBufferIndex - playingIndex > 1 && interstitial.appendInPlace === false) {\n // do not advance buffering item past Interstitial that requires source reset\n return;\n }\n if (interstitial.assetList.length === 0 && interstitial.assetListLoader) {\n // do not advance buffering item past Interstitial loading asset-list\n return;\n }\n }\n this.bufferedPos = bufferEnd;\n if (bufferEndIndex > bufferingIndex && bufferEndIndex > playingIndex) {\n this.bufferedToItem(nextItemToBuffer);\n } else {\n // allow more time than distance from edge for assets to load\n const details = this.primaryDetails;\n if (this.primaryLive && details && bufferEnd > details.edge - details.targetduration && nextItemToBuffer.start < details.edge + this.hls.config.interstitialLiveLookAhead && this.isInterstitial(nextItemToBuffer)) {\n this.preloadAssets(nextItemToBuffer.event, 0);\n }\n }\n } else if (bufferIsEmpty && playingItem && !this.itemsMatch(playingItem, bufferingItem)) {\n if (bufferEndIndex === playingIndex) {\n this.bufferedToItem(playingItem);\n } else if (bufferEndIndex === playingIndex + 1) {\n this.bufferedToItem(items[bufferEndIndex]);\n }\n }\n }\n assetsBuffered(item, media) {\n const assetList = item.event.assetList;\n if (assetList.length === 0) {\n return false;\n }\n return !item.event.assetList.some(asset => {\n const player = this.getAssetPlayer(asset.identifier);\n return !(player != null && player.bufferedInPlaceToEnd(media));\n });\n }\n setBufferingItem(item) {\n const bufferingLast = this.bufferingItem;\n const schedule = this.schedule;\n if (!this.itemsMatch(item, bufferingLast) && schedule) {\n const {\n items,\n events\n } = schedule;\n if (!items || !events) {\n return bufferingLast;\n }\n const isInterstitial = this.isInterstitial(item);\n const bufferingPlayer = this.getBufferingPlayer();\n this.bufferingItem = item;\n this.bufferedPos = Math.max(item.start, Math.min(item.end, this.timelinePos));\n const timeRemaining = bufferingPlayer ? bufferingPlayer.remaining : bufferingLast ? bufferingLast.end - this.timelinePos : 0;\n this.log(`INTERSTITIALS_BUFFERED_TO_BOUNDARY ${segmentToString(item)}` + (bufferingLast ? ` (${timeRemaining.toFixed(2)} remaining)` : ''));\n if (!this.playbackDisabled) {\n if (isInterstitial) {\n const bufferIndex = schedule.findAssetIndex(item.event, this.bufferedPos);\n // primary fragment loading will exit early in base-stream-controller while `bufferingItem` is set to an Interstitial block\n item.event.assetList.forEach((asset, i) => {\n const player = this.getAssetPlayer(asset.identifier);\n if (player) {\n if (i === bufferIndex) {\n player.loadSource();\n }\n player.resumeBuffering();\n }\n });\n } else {\n this.hls.resumeBuffering();\n this.playerQueue.forEach(player => player.pauseBuffering());\n }\n }\n this.hls.trigger(Events.INTERSTITIALS_BUFFERED_TO_BOUNDARY, {\n events: events.slice(0),\n schedule: items.slice(0),\n bufferingIndex: this.findItemIndex(item),\n playingIndex: this.findItemIndex(this.playingItem)\n });\n } else if (this.bufferingItem !== item) {\n this.bufferingItem = item;\n }\n return bufferingLast;\n }\n bufferedToItem(item, assetListIndex = 0) {\n const bufferingLast = this.setBufferingItem(item);\n if (this.playbackDisabled) {\n return;\n }\n if (this.isInterstitial(item)) {\n // Ensure asset list is loaded\n this.bufferedToEvent(item, assetListIndex);\n } else if (bufferingLast !== null) {\n // If primary player is detached, it is also stopped, restart loading at primary position\n this.bufferingAsset = null;\n const detachedData = this.detachedData;\n if (detachedData) {\n if (detachedData.mediaSource) {\n const skipSeekToStartPosition = true;\n this.attachPrimary(item.start, item, skipSeekToStartPosition);\n } else {\n this.preloadPrimary(item);\n }\n } else {\n // If not detached seek to resumption point\n this.preloadPrimary(item);\n }\n }\n }\n preloadPrimary(item) {\n const index = this.findItemIndex(item);\n const timelinePos = this.getPrimaryResumption(item, index);\n this.startLoadingPrimaryAt(timelinePos);\n }\n bufferedToEvent(item, assetListIndex) {\n const interstitial = item.event;\n const neverLoaded = interstitial.assetList.length === 0 && !interstitial.assetListLoader;\n const playOnce = interstitial.cue.once;\n if (neverLoaded || !playOnce) {\n // Buffered to Interstitial boundary\n const player = this.preloadAssets(interstitial, assetListIndex);\n if (player != null && player.interstitial.appendInPlace) {\n const media = this.primaryMedia;\n if (media) {\n this.bufferAssetPlayer(player, media);\n }\n }\n }\n }\n preloadAssets(interstitial, assetListIndex) {\n const uri = interstitial.assetUrl;\n const assetListLength = interstitial.assetList.length;\n const neverLoaded = assetListLength === 0 && !interstitial.assetListLoader;\n const playOnce = interstitial.cue.once;\n if (neverLoaded) {\n const timelineStart = interstitial.timelineStart;\n if (interstitial.appendInPlace) {\n var _playingItem$nextEven;\n const playingItem = this.playingItem;\n if (!this.isInterstitial(playingItem) && (playingItem == null || (_playingItem$nextEven = playingItem.nextEvent) == null ? void 0 : _playingItem$nextEven.identifier) === interstitial.identifier) {\n this.flushFrontBuffer(timelineStart + 0.25);\n }\n }\n let hlsStartOffset;\n let liveStartPosition = 0;\n if (!this.playingItem && this.primaryLive) {\n liveStartPosition = this.hls.startPosition;\n if (liveStartPosition === -1) {\n liveStartPosition = this.hls.liveSyncPosition || 0;\n }\n }\n if (liveStartPosition && !(interstitial.cue.pre || interstitial.cue.post)) {\n const startOffset = liveStartPosition - timelineStart;\n if (startOffset > 0) {\n hlsStartOffset = Math.round(startOffset * 1000) / 1000;\n }\n }\n this.log(`Load interstitial asset ${assetListIndex + 1}/${uri ? 1 : assetListLength} ${interstitial}${hlsStartOffset ? ` live-start: ${liveStartPosition} start-offset: ${hlsStartOffset}` : ''}`);\n if (uri) {\n return this.createAsset(interstitial, 0, 0, timelineStart, interstitial.duration, uri);\n }\n const assetListLoader = this.assetListLoader.loadAssetList(interstitial, hlsStartOffset);\n if (assetListLoader) {\n interstitial.assetListLoader = assetListLoader;\n }\n } else if (!playOnce && assetListLength) {\n // Re-buffered to Interstitial boundary, re-create asset player(s)\n for (let i = assetListIndex; i < assetListLength; i++) {\n const _asset = interstitial.assetList[i];\n const playerIndex = this.getAssetPlayerQueueIndex(_asset.identifier);\n if ((playerIndex === -1 || this.playerQueue[playerIndex].destroyed) && !_asset.error) {\n this.createAssetPlayer(interstitial, _asset, i);\n }\n }\n const asset = interstitial.assetList[assetListIndex];\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (asset) {\n const player = this.getAssetPlayer(asset.identifier);\n if (player) {\n player.loadSource();\n }\n return player;\n }\n }\n return null;\n }\n flushFrontBuffer(startOffset) {\n // Force queued flushing of all buffers\n const requiredTracks = this.requiredTracks;\n if (!requiredTracks) {\n return;\n }\n this.log(`Removing front buffer starting at ${startOffset}`);\n const sourceBufferNames = Object.keys(requiredTracks);\n sourceBufferNames.forEach(type => {\n this.hls.trigger(Events.BUFFER_FLUSHING, {\n startOffset,\n endOffset: Infinity,\n type\n });\n });\n }\n\n // Interstitial Asset Player control\n getAssetPlayerQueueIndex(assetId) {\n const playerQueue = this.playerQueue;\n for (let i = 0; i < playerQueue.length; i++) {\n if (assetId === playerQueue[i].assetId) {\n return i;\n }\n }\n return -1;\n }\n getAssetPlayer(assetId) {\n const index = this.getAssetPlayerQueueIndex(assetId);\n return this.playerQueue[index] || null;\n }\n getBufferingPlayer() {\n const {\n playerQueue,\n primaryMedia\n } = this;\n if (primaryMedia) {\n for (let i = 0; i < playerQueue.length; i++) {\n if (playerQueue[i].media === primaryMedia) {\n return playerQueue[i];\n }\n }\n }\n return null;\n }\n createAsset(interstitial, assetListIndex, startOffset, timelineStart, duration, uri) {\n const assetItem = {\n parentIdentifier: interstitial.identifier,\n identifier: generateAssetIdentifier(interstitial, uri, assetListIndex),\n duration,\n startOffset,\n timelineStart,\n uri\n };\n return this.createAssetPlayer(interstitial, assetItem, assetListIndex);\n }\n createAssetPlayer(interstitial, assetItem, assetListIndex) {\n const primary = this.hls;\n const userConfig = primary.userConfig;\n let videoPreference = userConfig.videoPreference;\n const currentLevel = primary.loadLevelObj || primary.levels[primary.currentLevel];\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (videoPreference || currentLevel) {\n videoPreference = _extends({}, videoPreference);\n if (currentLevel.videoCodec) {\n videoPreference.videoCodec = currentLevel.videoCodec;\n }\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (currentLevel.videoRange) {\n videoPreference.allowedVideoRanges = [currentLevel.videoRange];\n }\n }\n const selectedAudio = primary.audioTracks[primary.audioTrack];\n const selectedSubtitle = primary.subtitleTracks[primary.subtitleTrack];\n let startPosition = 0;\n if (this.primaryLive || interstitial.appendInPlace) {\n const timePastStart = this.timelinePos - assetItem.timelineStart;\n if (timePastStart > 1) {\n const duration = assetItem.duration;\n if (duration && timePastStart < duration) {\n startPosition = timePastStart;\n }\n }\n }\n const assetId = assetItem.identifier;\n const playerConfig = _objectSpread2(_objectSpread2({}, userConfig), {}, {\n maxMaxBufferLength: Math.min(180, primary.config.maxMaxBufferLength),\n autoStartLoad: true,\n startFragPrefetch: true,\n primarySessionId: primary.sessionId,\n assetPlayerId: assetId,\n abrEwmaDefaultEstimate: primary.bandwidthEstimate,\n interstitialsController: undefined,\n startPosition,\n liveDurationInfinity: false,\n testBandwidth: false,\n videoPreference,\n audioPreference: selectedAudio || userConfig.audioPreference,\n subtitlePreference: selectedSubtitle || userConfig.subtitlePreference\n });\n // TODO: limit maxMaxBufferLength in asset players to prevent QEE\n if (interstitial.appendInPlace) {\n interstitial.appendInPlaceStarted = true;\n if (assetItem.timelineStart) {\n playerConfig.timelineOffset = assetItem.timelineStart;\n }\n }\n const cmcd = playerConfig.cmcd;\n if (cmcd != null && cmcd.sessionId && cmcd.contentId) {\n playerConfig.cmcd = _extends({}, cmcd, {\n contentId: hash(assetItem.uri)\n });\n }\n if (this.getAssetPlayer(assetId)) {\n this.warn(`Duplicate date range identifier ${interstitial} and asset ${assetId}`);\n }\n const player = new HlsAssetPlayer(this.HlsPlayerClass, playerConfig, interstitial, assetItem);\n this.playerQueue.push(player);\n interstitial.assetList[assetListIndex] = assetItem;\n // Listen for LevelDetails and PTS change to update duration\n let initialDuration = true;\n const updateAssetPlayerDetails = details => {\n if (details.live) {\n var _this$schedule9;\n const error = new Error(`Interstitials MUST be VOD assets ${interstitial}`);\n const errorData = {\n fatal: true,\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.INTERSTITIAL_ASSET_ITEM_ERROR,\n error\n };\n const scheduleIndex = ((_this$schedule9 = this.schedule) == null ? void 0 : _this$schedule9.findEventIndex(interstitial.identifier)) || -1;\n this.handleAssetItemError(errorData, interstitial, scheduleIndex, assetListIndex, error.message);\n return;\n }\n // Get time at end of last fragment\n const duration = details.edge - details.fragmentStart;\n const currentAssetDuration = assetItem.duration;\n if (initialDuration || currentAssetDuration === null || duration > currentAssetDuration) {\n initialDuration = false;\n this.log(`Interstitial asset \"${assetId}\" duration change ${currentAssetDuration} > ${duration}`);\n assetItem.duration = duration;\n // Update schedule with new event and asset duration\n this.updateSchedule();\n }\n };\n player.on(Events.LEVEL_UPDATED, (event, {\n details\n }) => updateAssetPlayerDetails(details));\n player.on(Events.LEVEL_PTS_UPDATED, (event, {\n details\n }) => updateAssetPlayerDetails(details));\n player.on(Events.EVENT_CUE_ENTER, () => this.onInterstitialCueEnter());\n const onBufferCodecs = (event, data) => {\n const inQueuPlayer = this.getAssetPlayer(assetId);\n if (inQueuPlayer && data.tracks) {\n inQueuPlayer.off(Events.BUFFER_CODECS, onBufferCodecs);\n inQueuPlayer.tracks = data.tracks;\n const media = this.primaryMedia;\n if (this.bufferingAsset === inQueuPlayer.assetItem && media && !inQueuPlayer.media) {\n this.bufferAssetPlayer(inQueuPlayer, media);\n }\n }\n };\n player.on(Events.BUFFER_CODECS, onBufferCodecs);\n const bufferedToEnd = () => {\n var _this$schedule$items3;\n const inQueuPlayer = this.getAssetPlayer(assetId);\n this.log(`buffered to end of asset ${inQueuPlayer}`);\n if (!inQueuPlayer || !this.schedule) {\n return;\n }\n // Preload at end of asset\n const scheduleIndex = this.schedule.findEventIndex(interstitial.identifier);\n const item = (_this$schedule$items3 = this.schedule.items) == null ? void 0 : _this$schedule$items3[scheduleIndex];\n if (this.isInterstitial(item)) {\n this.advanceAssetBuffering(item, assetItem);\n }\n };\n player.on(Events.BUFFERED_TO_END, bufferedToEnd);\n const endedWithAssetIndex = assetIndex => {\n return () => {\n const inQueuPlayer = this.getAssetPlayer(assetId);\n if (!inQueuPlayer || !this.schedule) {\n return;\n }\n this.shouldPlay = true;\n const scheduleIndex = this.schedule.findEventIndex(interstitial.identifier);\n this.advanceAfterAssetEnded(interstitial, scheduleIndex, assetIndex);\n };\n };\n player.once(Events.MEDIA_ENDED, endedWithAssetIndex(assetListIndex));\n player.once(Events.PLAYOUT_LIMIT_REACHED, endedWithAssetIndex(Infinity));\n player.on(Events.ERROR, (event, data) => {\n if (!this.schedule) {\n return;\n }\n const inQueuPlayer = this.getAssetPlayer(assetId);\n if (data.details === ErrorDetails.BUFFER_STALLED_ERROR) {\n if (inQueuPlayer != null && inQueuPlayer.appendInPlace) {\n this.handleInPlaceStall(interstitial);\n return;\n }\n this.onTimeupdate();\n this.checkBuffer(true);\n return;\n }\n this.handleAssetItemError(data, interstitial, this.schedule.findEventIndex(interstitial.identifier), assetListIndex, `Asset player error ${data.error} ${interstitial}`);\n });\n player.on(Events.DESTROYING, () => {\n const inQueuPlayer = this.getAssetPlayer(assetId);\n if (!inQueuPlayer || !this.schedule) {\n return;\n }\n const error = new Error(`Asset player destroyed unexpectedly ${assetId}`);\n const errorData = {\n fatal: true,\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.INTERSTITIAL_ASSET_ITEM_ERROR,\n error\n };\n this.handleAssetItemError(errorData, interstitial, this.schedule.findEventIndex(interstitial.identifier), assetListIndex, error.message);\n });\n this.log(`INTERSTITIAL_ASSET_PLAYER_CREATED ${eventAssetToString(assetItem)}`);\n this.hls.trigger(Events.INTERSTITIAL_ASSET_PLAYER_CREATED, {\n asset: assetItem,\n assetListIndex,\n event: interstitial,\n player\n });\n return player;\n }\n clearInterstitial(interstitial, toSegment) {\n this.clearAssetPlayers(interstitial, toSegment);\n // Remove asset list and resolved duration\n interstitial.reset();\n }\n clearAssetPlayers(interstitial, toSegment) {\n interstitial.assetList.forEach(asset => {\n this.clearAssetPlayer(asset.identifier, toSegment);\n });\n }\n resetAssetPlayer(assetId) {\n // Reset asset player so that it's timeline can be adjusted without reloading the MVP\n const playerIndex = this.getAssetPlayerQueueIndex(assetId);\n if (playerIndex !== -1) {\n this.log(`reset asset player \"${assetId}\" after error`);\n const player = this.playerQueue[playerIndex];\n this.transferMediaFromPlayer(player, null);\n player.resetDetails();\n }\n }\n clearAssetPlayer(assetId, toSegment) {\n const playerIndex = this.getAssetPlayerQueueIndex(assetId);\n if (playerIndex !== -1) {\n const player = this.playerQueue[playerIndex];\n this.log(`clear ${player} toSegment: ${toSegment ? segmentToString(toSegment) : toSegment}`);\n this.transferMediaFromPlayer(player, toSegment);\n this.playerQueue.splice(playerIndex, 1);\n player.destroy();\n }\n }\n emptyPlayerQueue() {\n let player;\n while (player = this.playerQueue.pop()) {\n player.destroy();\n }\n this.playerQueue = [];\n }\n startAssetPlayer(player, assetListIndex, scheduleItems, scheduleIndex, media) {\n const {\n interstitial,\n assetItem,\n assetId\n } = player;\n const assetListLength = interstitial.assetList.length;\n const playingAsset = this.playingAsset;\n this.endedAsset = null;\n this.playingAsset = assetItem;\n if (!playingAsset || playingAsset.identifier !== assetId) {\n if (playingAsset) {\n // Exiting another Interstitial asset\n this.clearAssetPlayer(playingAsset.identifier, scheduleItems[scheduleIndex]);\n delete playingAsset.error;\n }\n this.log(`INTERSTITIAL_ASSET_STARTED ${assetListIndex + 1}/${assetListLength} ${eventAssetToString(assetItem)}`);\n this.hls.trigger(Events.INTERSTITIAL_ASSET_STARTED, {\n asset: assetItem,\n assetListIndex,\n event: interstitial,\n schedule: scheduleItems.slice(0),\n scheduleIndex,\n player\n });\n }\n\n // detach media and attach to interstitial player if it does not have another element attached\n this.bufferAssetPlayer(player, media);\n }\n bufferAssetPlayer(player, media) {\n var _this$schedule$items4, _this$detachedData5;\n if (!this.schedule) {\n return;\n }\n const {\n interstitial,\n assetItem\n } = player;\n const scheduleIndex = this.schedule.findEventIndex(interstitial.identifier);\n const item = (_this$schedule$items4 = this.schedule.items) == null ? void 0 : _this$schedule$items4[scheduleIndex];\n if (!item) {\n return;\n }\n player.loadSource();\n this.setBufferingItem(item);\n this.bufferingAsset = assetItem;\n const bufferingPlayer = this.getBufferingPlayer();\n if (bufferingPlayer === player) {\n return;\n }\n const appendInPlaceNext = interstitial.appendInPlace;\n if (appendInPlaceNext && (bufferingPlayer == null ? void 0 : bufferingPlayer.interstitial.appendInPlace) === false) {\n // Media is detached and not available to append in place\n return;\n }\n const activeTracks = (bufferingPlayer == null ? void 0 : bufferingPlayer.tracks) || ((_this$detachedData5 = this.detachedData) == null ? void 0 : _this$detachedData5.tracks) || this.requiredTracks;\n if (appendInPlaceNext && assetItem !== this.playingAsset) {\n // Do not buffer another item if tracks are unknown or incompatible\n if (!player.tracks) {\n this.log(`Waiting for track info before buffering ${player}`);\n return;\n }\n if (activeTracks && !isCompatibleTrackChange(activeTracks, player.tracks)) {\n const error = new Error(`Asset ${eventAssetToString(assetItem)} SourceBuffer tracks ('${Object.keys(player.tracks)}') are not compatible with primary content tracks ('${Object.keys(activeTracks)}')`);\n const errorData = {\n fatal: true,\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.INTERSTITIAL_ASSET_ITEM_ERROR,\n error\n };\n const assetListIndex = interstitial.findAssetIndex(assetItem);\n this.handleAssetItemError(errorData, interstitial, scheduleIndex, assetListIndex, error.message);\n return;\n }\n }\n this.transferMediaTo(player, media);\n }\n handleInPlaceStall(interstitial) {\n const schedule = this.schedule;\n const media = this.primaryMedia;\n if (!schedule || !media) {\n return;\n }\n const currentTime = media.currentTime;\n const foundAssetIndex = schedule.findAssetIndex(interstitial, currentTime);\n const stallingAsset = interstitial.assetList[foundAssetIndex];\n if (stallingAsset) {\n const player = this.getAssetPlayer(stallingAsset.identifier);\n if (player) {\n const assetCurrentTime = player.currentTime || currentTime - stallingAsset.timelineStart;\n const distanceFromEnd = player.duration - assetCurrentTime;\n this.warn(`Stalled at ${assetCurrentTime} of ${assetCurrentTime + distanceFromEnd} in ${player} ${interstitial} (media.currentTime: ${currentTime})`);\n if (assetCurrentTime && (distanceFromEnd / media.playbackRate < 0.5 || player.bufferedInPlaceToEnd(media)) && player.hls) {\n const scheduleIndex = schedule.findEventIndex(interstitial.identifier);\n this.advanceAfterAssetEnded(interstitial, scheduleIndex, foundAssetIndex);\n }\n }\n }\n }\n advanceInPlace(time) {\n const media = this.primaryMedia;\n if (media && media.currentTime < time) {\n media.currentTime = time;\n }\n }\n handleAssetItemError(data, interstitial, scheduleIndex, assetListIndex, errorMessage) {\n if (data.details === ErrorDetails.BUFFER_STALLED_ERROR) {\n return;\n }\n const assetItem = interstitial.assetList[assetListIndex] || null;\n this.warn(`INTERSTITIAL_ASSET_ERROR ${assetItem ? eventAssetToString(assetItem) : assetItem} ${data.error}`);\n if (!this.schedule) {\n return;\n }\n const assetId = (assetItem == null ? void 0 : assetItem.identifier) || '';\n const playerIndex = this.getAssetPlayerQueueIndex(assetId);\n const player = this.playerQueue[playerIndex] || null;\n const items = this.schedule.items;\n const interstitialAssetError = _extends({}, data, {\n fatal: false,\n errorAction: createDoNothingErrorAction(true),\n asset: assetItem,\n assetListIndex,\n event: interstitial,\n schedule: items,\n scheduleIndex,\n player\n });\n this.hls.trigger(Events.INTERSTITIAL_ASSET_ERROR, interstitialAssetError);\n if (!data.fatal) {\n return;\n }\n const playingAsset = this.playingAsset;\n const bufferingAsset = this.bufferingAsset;\n const error = new Error(errorMessage);\n if (assetItem) {\n this.clearAssetPlayer(assetId, null);\n assetItem.error = error;\n }\n\n // If all assets in interstitial fail, mark the interstitial with an error\n if (!interstitial.assetList.some(asset => !asset.error)) {\n interstitial.error = error;\n } else {\n // Reset level details and reload/parse media playlists to align with updated schedule\n for (let i = assetListIndex; i < interstitial.assetList.length; i++) {\n this.resetAssetPlayer(interstitial.assetList[i].identifier);\n }\n }\n this.updateSchedule(true);\n if (interstitial.error) {\n this.primaryFallback(interstitial);\n } else if (playingAsset && playingAsset.identifier === assetId) {\n this.advanceAfterAssetEnded(interstitial, scheduleIndex, assetListIndex);\n } else if (bufferingAsset && bufferingAsset.identifier === assetId && this.isInterstitial(this.bufferingItem)) {\n this.advanceAssetBuffering(this.bufferingItem, bufferingAsset);\n }\n }\n primaryFallback(interstitial) {\n // Fallback to Primary by on current or future events by updating schedule to skip errored interstitials/assets\n const flushStart = interstitial.timelineStart;\n const playingItem = this.effectivePlayingItem;\n let timelinePos = this.timelinePos;\n // Update schedule now that interstitial/assets are flagged with `error` for fallback\n if (playingItem) {\n this.log(`Fallback to primary from event \"${interstitial.identifier}\" start: ${flushStart} pos: ${timelinePos} playing: ${segmentToString(playingItem)} error: ${interstitial.error}`);\n if (timelinePos === -1) {\n timelinePos = this.hls.startPosition;\n }\n const newPlayingItem = this.updateItem(playingItem, timelinePos);\n if (this.itemsMatch(playingItem, newPlayingItem)) {\n this.clearInterstitial(interstitial, null);\n }\n if (interstitial.appendInPlace) {\n this.attachPrimary(flushStart, null);\n this.flushFrontBuffer(flushStart);\n }\n } else if (timelinePos === -1) {\n this.checkStart();\n return;\n }\n if (!this.schedule) {\n return;\n }\n const scheduleIndex = this.schedule.findItemIndexAtTime(timelinePos);\n this.setSchedulePosition(scheduleIndex);\n }\n\n // Asset List loading\n onAssetListLoaded(event, data) {\n var _this$schedule0, _this$bufferingItem2;\n const interstitial = data.event;\n const interstitialId = interstitial.identifier;\n const assets = data.assetListResponse.ASSETS;\n if (!((_this$schedule0 = this.schedule) != null && _this$schedule0.hasEvent(interstitialId))) {\n // Interstitial with id was removed\n return;\n }\n const eventStart = interstitial.timelineStart;\n const previousDuration = interstitial.duration;\n let sumDuration = 0;\n assets.forEach((asset, assetListIndex) => {\n const duration = parseFloat(asset.DURATION);\n this.createAsset(interstitial, assetListIndex, sumDuration, eventStart + sumDuration, duration, asset.URI);\n sumDuration += duration;\n });\n interstitial.duration = sumDuration;\n this.log(`Loaded asset-list with duration: ${sumDuration} (was: ${previousDuration}) ${interstitial}`);\n const waitingItem = this.waitingItem;\n const waitingForItem = (waitingItem == null ? void 0 : waitingItem.event.identifier) === interstitialId;\n\n // Update schedule now that asset.DURATION(s) are parsed\n this.updateSchedule();\n const bufferingEvent = (_this$bufferingItem2 = this.bufferingItem) == null ? void 0 : _this$bufferingItem2.event;\n\n // If buffer reached Interstitial, start buffering first asset\n if (waitingForItem) {\n var _this$schedule$items5;\n // Advance schedule when waiting for asset list data to play\n const scheduleIndex = this.schedule.findEventIndex(interstitialId);\n const item = (_this$schedule$items5 = this.schedule.items) == null ? void 0 : _this$schedule$items5[scheduleIndex];\n if (item) {\n if (!this.playingItem && this.timelinePos > item.end) {\n // Abandon if new duration is reduced enough to land playback in primary start\n const index = this.schedule.findItemIndexAtTime(this.timelinePos);\n if (index !== scheduleIndex) {\n interstitial.error = new Error(`Interstitial ${assets.length ? 'no longer within playback range' : 'asset-list is empty'} ${this.timelinePos} ${interstitial}`);\n this.log(interstitial.error.message);\n this.updateSchedule(true);\n this.primaryFallback(interstitial);\n return;\n }\n }\n this.setBufferingItem(item);\n }\n this.setSchedulePosition(scheduleIndex);\n } else if ((bufferingEvent == null ? void 0 : bufferingEvent.identifier) === interstitialId) {\n const assetItem = interstitial.assetList[0];\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (assetItem) {\n const player = this.getAssetPlayer(assetItem.identifier);\n if (bufferingEvent.appendInPlace) {\n // If buffering (but not playback) has reached this item transfer media-source\n const media = this.primaryMedia;\n if (player && media) {\n this.bufferAssetPlayer(player, media);\n }\n } else if (player) {\n player.loadSource();\n }\n }\n }\n }\n onError(event, data) {\n if (!this.schedule) {\n return;\n }\n switch (data.details) {\n case ErrorDetails.ASSET_LIST_PARSING_ERROR:\n case ErrorDetails.ASSET_LIST_LOAD_ERROR:\n case ErrorDetails.ASSET_LIST_LOAD_TIMEOUT:\n {\n const interstitial = data.interstitial;\n if (interstitial) {\n this.updateSchedule(true);\n this.primaryFallback(interstitial);\n }\n break;\n }\n case ErrorDetails.BUFFER_STALLED_ERROR:\n {\n const stallingItem = this.endedItem || this.waitingItem || this.playingItem;\n if (this.isInterstitial(stallingItem) && stallingItem.event.appendInPlace) {\n this.handleInPlaceStall(stallingItem.event);\n return;\n }\n this.log(`Primary player stall @${this.timelinePos} bufferedPos: ${this.bufferedPos}`);\n this.onTimeupdate();\n this.checkBuffer(true);\n break;\n }\n }\n }\n}\n\nconst TICK_INTERVAL$2 = 500; // how often to tick in ms\n\nclass SubtitleStreamController extends BaseStreamController {\n constructor(hls, fragmentTracker, keyLoader) {\n super(hls, fragmentTracker, keyLoader, 'subtitle-stream-controller', PlaylistLevelType.SUBTITLE);\n this.currentTrackId = -1;\n this.tracksBuffered = [];\n this.mainDetails = null;\n this.registerListeners();\n }\n onHandlerDestroying() {\n this.unregisterListeners();\n super.onHandlerDestroying();\n this.mainDetails = null;\n }\n registerListeners() {\n super.registerListeners();\n const {\n hls\n } = this;\n hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n hls.on(Events.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this);\n hls.on(Events.SUBTITLE_TRACK_SWITCH, this.onSubtitleTrackSwitch, this);\n hls.on(Events.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this);\n hls.on(Events.SUBTITLE_FRAG_PROCESSED, this.onSubtitleFragProcessed, this);\n hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n }\n unregisterListeners() {\n super.unregisterListeners();\n const {\n hls\n } = this;\n hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n hls.off(Events.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this);\n hls.off(Events.SUBTITLE_TRACK_SWITCH, this.onSubtitleTrackSwitch, this);\n hls.off(Events.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this);\n hls.off(Events.SUBTITLE_FRAG_PROCESSED, this.onSubtitleFragProcessed, this);\n hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n }\n startLoad(startPosition, skipSeekToStartPosition) {\n this.stopLoad();\n this.state = State.IDLE;\n this.setInterval(TICK_INTERVAL$2);\n this.nextLoadPosition = this.lastCurrentTime = startPosition + this.timelineOffset;\n this.startPosition = skipSeekToStartPosition ? -1 : startPosition;\n this.tick();\n }\n onManifestLoading() {\n super.onManifestLoading();\n this.mainDetails = null;\n }\n onMediaDetaching(event, data) {\n this.tracksBuffered = [];\n super.onMediaDetaching(event, data);\n }\n onLevelLoaded(event, data) {\n this.mainDetails = data.details;\n }\n onSubtitleFragProcessed(event, data) {\n const {\n frag,\n success\n } = data;\n if (!this.fragContextChanged(frag)) {\n if (isMediaFragment(frag)) {\n this.fragPrevious = frag;\n }\n this.state = State.IDLE;\n }\n if (!success) {\n return;\n }\n const buffered = this.tracksBuffered[this.currentTrackId];\n if (!buffered) {\n return;\n }\n\n // Create/update a buffered array matching the interface used by BufferHelper.bufferedInfo\n // so we can re-use the logic used to detect how much has been buffered\n let timeRange;\n const fragStart = frag.start;\n for (let i = 0; i < buffered.length; i++) {\n if (fragStart >= buffered[i].start && fragStart <= buffered[i].end) {\n timeRange = buffered[i];\n break;\n }\n }\n const fragEnd = frag.start + frag.duration;\n if (timeRange) {\n timeRange.end = fragEnd;\n } else {\n timeRange = {\n start: fragStart,\n end: fragEnd\n };\n buffered.push(timeRange);\n }\n this.fragmentTracker.fragBuffered(frag);\n this.fragBufferedComplete(frag, null);\n if (this.media) {\n this.tick();\n }\n }\n onBufferFlushing(event, data) {\n const {\n startOffset,\n endOffset\n } = data;\n if (startOffset === 0 && endOffset !== Number.POSITIVE_INFINITY) {\n const endOffsetSubtitles = endOffset - 1;\n if (endOffsetSubtitles <= 0) {\n return;\n }\n data.endOffsetSubtitles = Math.max(0, endOffsetSubtitles);\n this.tracksBuffered.forEach(buffered => {\n for (let i = 0; i < buffered.length;) {\n if (buffered[i].end <= endOffsetSubtitles) {\n buffered.shift();\n continue;\n } else if (buffered[i].start < endOffsetSubtitles) {\n buffered[i].start = endOffsetSubtitles;\n } else {\n break;\n }\n i++;\n }\n });\n this.fragmentTracker.removeFragmentsInRange(startOffset, endOffsetSubtitles, PlaylistLevelType.SUBTITLE);\n }\n }\n\n // If something goes wrong, proceed to next frag, if we were processing one.\n onError(event, data) {\n const frag = data.frag;\n if ((frag == null ? void 0 : frag.type) === PlaylistLevelType.SUBTITLE) {\n if (data.details === ErrorDetails.FRAG_GAP) {\n this.fragmentTracker.fragBuffered(frag, true);\n }\n if (this.fragCurrent) {\n this.fragCurrent.abortRequests();\n }\n if (this.state !== State.STOPPED) {\n this.state = State.IDLE;\n }\n }\n }\n\n // Got all new subtitle levels.\n onSubtitleTracksUpdated(event, {\n subtitleTracks\n }) {\n if (this.levels && subtitleOptionsIdentical(this.levels, subtitleTracks)) {\n this.levels = subtitleTracks.map(mediaPlaylist => new Level(mediaPlaylist));\n return;\n }\n this.tracksBuffered = [];\n this.levels = subtitleTracks.map(mediaPlaylist => {\n const level = new Level(mediaPlaylist);\n this.tracksBuffered[level.id] = [];\n return level;\n });\n this.fragmentTracker.removeFragmentsInRange(0, Number.POSITIVE_INFINITY, PlaylistLevelType.SUBTITLE);\n this.fragPrevious = null;\n this.mediaBuffer = null;\n }\n onSubtitleTrackSwitch(event, data) {\n var _this$levels;\n this.currentTrackId = data.id;\n if (!((_this$levels = this.levels) != null && _this$levels.length) || this.currentTrackId === -1) {\n this.clearInterval();\n return;\n }\n\n // Check if track has the necessary details to load fragments\n const currentTrack = this.levels[this.currentTrackId];\n if (currentTrack != null && currentTrack.details) {\n this.mediaBuffer = this.mediaBufferTimeRanges;\n } else {\n this.mediaBuffer = null;\n }\n if (currentTrack && this.state !== State.STOPPED) {\n this.setInterval(TICK_INTERVAL$2);\n }\n }\n\n // Got a new set of subtitle fragments.\n onSubtitleTrackLoaded(event, data) {\n var _track$details;\n const {\n currentTrackId,\n levels\n } = this;\n const {\n details: newDetails,\n id: trackId\n } = data;\n if (!levels) {\n this.warn(`Subtitle tracks were reset while loading level ${trackId}`);\n return;\n }\n const track = levels[trackId];\n if (trackId >= levels.length || !track) {\n return;\n }\n this.log(`Subtitle track ${trackId} loaded [${newDetails.startSN},${newDetails.endSN}]${newDetails.lastPartSn ? `[part-${newDetails.lastPartSn}-${newDetails.lastPartIndex}]` : ''},duration:${newDetails.totalduration}`);\n this.mediaBuffer = this.mediaBufferTimeRanges;\n let sliding = 0;\n if (newDetails.live || (_track$details = track.details) != null && _track$details.live) {\n if (newDetails.deltaUpdateFailed) {\n return;\n }\n const mainDetails = this.mainDetails;\n if (!mainDetails) {\n this.startFragRequested = false;\n return;\n }\n const mainSlidingStartFragment = mainDetails.fragments[0];\n if (!track.details) {\n if (newDetails.hasProgramDateTime && mainDetails.hasProgramDateTime) {\n alignMediaPlaylistByPDT(newDetails, mainDetails);\n sliding = newDetails.fragmentStart;\n } else if (mainSlidingStartFragment) {\n // line up live playlist with main so that fragments in range are loaded\n sliding = mainSlidingStartFragment.start;\n addSliding(newDetails, sliding);\n }\n } else {\n var _this$levelLastLoaded;\n sliding = this.alignPlaylists(newDetails, track.details, (_this$levelLastLoaded = this.levelLastLoaded) == null ? void 0 : _this$levelLastLoaded.details);\n if (sliding === 0 && mainSlidingStartFragment) {\n // realign with main when there is no overlap with last refresh\n sliding = mainSlidingStartFragment.start;\n addSliding(newDetails, sliding);\n }\n }\n // compute start position if we are aligned with the main playlist\n if (mainDetails && !this.startFragRequested) {\n this.setStartPosition(mainDetails, sliding);\n }\n }\n track.details = newDetails;\n this.levelLastLoaded = track;\n if (trackId !== currentTrackId) {\n return;\n }\n this.hls.trigger(Events.SUBTITLE_TRACK_UPDATED, {\n details: newDetails,\n id: trackId,\n groupId: data.groupId\n });\n\n // trigger handler right now\n this.tick();\n\n // If playlist is misaligned because of bad PDT or drift, delete details to resync with main on reload\n if (newDetails.live && !this.fragCurrent && this.media && this.state === State.IDLE) {\n const foundFrag = findFragmentByPTS(null, newDetails.fragments, this.media.currentTime, 0);\n if (!foundFrag) {\n this.warn('Subtitle playlist not aligned with playback');\n track.details = undefined;\n }\n }\n }\n _handleFragmentLoadComplete(fragLoadedData) {\n const {\n frag,\n payload\n } = fragLoadedData;\n const decryptData = frag.decryptdata;\n const hls = this.hls;\n if (this.fragContextChanged(frag)) {\n return;\n }\n // check to see if the payload needs to be decrypted\n if (payload && payload.byteLength > 0 && decryptData != null && decryptData.key && decryptData.iv && isFullSegmentEncryption(decryptData.method)) {\n const startTime = performance.now();\n // decrypt the subtitles\n this.decrypter.decrypt(new Uint8Array(payload), decryptData.key.buffer, decryptData.iv.buffer, getAesModeFromFullSegmentMethod(decryptData.method)).catch(err => {\n hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.FRAG_DECRYPT_ERROR,\n fatal: false,\n error: err,\n reason: err.message,\n frag\n });\n throw err;\n }).then(decryptedData => {\n const endTime = performance.now();\n hls.trigger(Events.FRAG_DECRYPTED, {\n frag,\n payload: decryptedData,\n stats: {\n tstart: startTime,\n tdecrypt: endTime\n }\n });\n }).catch(err => {\n this.warn(`${err.name}: ${err.message}`);\n this.state = State.IDLE;\n });\n }\n }\n doTick() {\n if (!this.media) {\n this.state = State.IDLE;\n return;\n }\n if (this.state === State.IDLE) {\n const {\n currentTrackId,\n levels\n } = this;\n const track = levels == null ? void 0 : levels[currentTrackId];\n if (!track || !levels.length || !track.details) {\n return;\n }\n if (this.waitForLive(track)) {\n return;\n }\n const {\n config\n } = this;\n const currentTime = this.getLoadPosition();\n const bufferedInfo = BufferHelper.bufferedInfo(this.tracksBuffered[this.currentTrackId] || [], currentTime, config.maxBufferHole);\n const {\n end: targetBufferTime,\n len: bufferLen\n } = bufferedInfo;\n const trackDetails = track.details;\n const maxBufLen = this.hls.maxBufferLength + trackDetails.levelTargetDuration;\n if (bufferLen > maxBufLen) {\n return;\n }\n const fragments = trackDetails.fragments;\n const fragLen = fragments.length;\n const end = trackDetails.edge;\n let foundFrag = null;\n const fragPrevious = this.fragPrevious;\n if (targetBufferTime < end) {\n const tolerance = config.maxFragLookUpTolerance;\n const lookupTolerance = targetBufferTime > end - tolerance ? 0 : tolerance;\n foundFrag = findFragmentByPTS(fragPrevious, fragments, Math.max(fragments[0].start, targetBufferTime), lookupTolerance);\n if (!foundFrag && fragPrevious && fragPrevious.start < fragments[0].start) {\n foundFrag = fragments[0];\n }\n } else {\n foundFrag = fragments[fragLen - 1];\n }\n foundFrag = this.filterReplacedPrimary(foundFrag, track.details);\n if (!foundFrag) {\n return;\n }\n // Load earlier fragment in same discontinuity to make up for misaligned playlists and cues that extend beyond end of segment\n const curSNIdx = foundFrag.sn - trackDetails.startSN;\n const prevFrag = fragments[curSNIdx - 1];\n if (prevFrag && prevFrag.cc === foundFrag.cc && this.fragmentTracker.getState(prevFrag) === FragmentState.NOT_LOADED) {\n foundFrag = prevFrag;\n }\n if (this.fragmentTracker.getState(foundFrag) === FragmentState.NOT_LOADED) {\n // only load if fragment is not loaded\n const fragToLoad = this.mapToInitFragWhenRequired(foundFrag);\n if (fragToLoad) {\n this.loadFragment(fragToLoad, track, targetBufferTime);\n }\n }\n }\n }\n loadFragment(frag, level, targetBufferTime) {\n if (!isMediaFragment(frag)) {\n this._loadInitSegment(frag, level);\n } else {\n super.loadFragment(frag, level, targetBufferTime);\n }\n }\n get mediaBufferTimeRanges() {\n return new BufferableInstance(this.tracksBuffered[this.currentTrackId] || []);\n }\n}\nclass BufferableInstance {\n constructor(timeranges) {\n this.buffered = void 0;\n const getRange = (name, index, length) => {\n index = index >>> 0;\n if (index > length - 1) {\n throw new DOMException(`Failed to execute '${name}' on 'TimeRanges': The index provided (${index}) is greater than the maximum bound (${length})`);\n }\n return timeranges[index][name];\n };\n this.buffered = {\n get length() {\n return timeranges.length;\n },\n end(index) {\n return getRange('end', index, timeranges.length);\n },\n start(index) {\n return getRange('start', index, timeranges.length);\n }\n };\n }\n}\n\n/**\n *\n * This code was ported from the dash.js project at:\n * https://github.com/Dash-Industry-Forum/dash.js/blob/development/externals/cea608-parser.js\n * https://github.com/Dash-Industry-Forum/dash.js/commit/8269b26a761e0853bb21d78780ed945144ecdd4d#diff-71bc295a2d6b6b7093a1d3290d53a4b2\n *\n * The original copyright appears below:\n *\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2015-2016, DASH Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * 2. Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * Exceptions from regular ASCII. CodePoints are mapped to UTF-16 codes\n */\n\nconst specialCea608CharsCodes = {\n 0x2a: 0xe1,\n // lowercase a, acute accent\n 0x5c: 0xe9,\n // lowercase e, acute accent\n 0x5e: 0xed,\n // lowercase i, acute accent\n 0x5f: 0xf3,\n // lowercase o, acute accent\n 0x60: 0xfa,\n // lowercase u, acute accent\n 0x7b: 0xe7,\n // lowercase c with cedilla\n 0x7c: 0xf7,\n // division symbol\n 0x7d: 0xd1,\n // uppercase N tilde\n 0x7e: 0xf1,\n // lowercase n tilde\n 0x7f: 0x2588,\n // Full block\n // THIS BLOCK INCLUDES THE 16 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS\n // THAT COME FROM HI BYTE=0x11 AND LOW BETWEEN 0x30 AND 0x3F\n // THIS MEANS THAT \\x50 MUST BE ADDED TO THE VALUES\n 0x80: 0xae,\n // Registered symbol (R)\n 0x81: 0xb0,\n // degree sign\n 0x82: 0xbd,\n // 1/2 symbol\n 0x83: 0xbf,\n // Inverted (open) question mark\n 0x84: 0x2122,\n // Trademark symbol (TM)\n 0x85: 0xa2,\n // Cents symbol\n 0x86: 0xa3,\n // Pounds sterling\n 0x87: 0x266a,\n // Music 8'th note\n 0x88: 0xe0,\n // lowercase a, grave accent\n 0x89: 0x20,\n // transparent space (regular)\n 0x8a: 0xe8,\n // lowercase e, grave accent\n 0x8b: 0xe2,\n // lowercase a, circumflex accent\n 0x8c: 0xea,\n // lowercase e, circumflex accent\n 0x8d: 0xee,\n // lowercase i, circumflex accent\n 0x8e: 0xf4,\n // lowercase o, circumflex accent\n 0x8f: 0xfb,\n // lowercase u, circumflex accent\n // THIS BLOCK INCLUDES THE 32 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS\n // THAT COME FROM HI BYTE=0x12 AND LOW BETWEEN 0x20 AND 0x3F\n 0x90: 0xc1,\n // capital letter A with acute\n 0x91: 0xc9,\n // capital letter E with acute\n 0x92: 0xd3,\n // capital letter O with acute\n 0x93: 0xda,\n // capital letter U with acute\n 0x94: 0xdc,\n // capital letter U with diaresis\n 0x95: 0xfc,\n // lowercase letter U with diaeresis\n 0x96: 0x2018,\n // opening single quote\n 0x97: 0xa1,\n // inverted exclamation mark\n 0x98: 0x2a,\n // asterisk\n 0x99: 0x2019,\n // closing single quote\n 0x9a: 0x2501,\n // box drawings heavy horizontal\n 0x9b: 0xa9,\n // copyright sign\n 0x9c: 0x2120,\n // Service mark\n 0x9d: 0x2022,\n // (round) bullet\n 0x9e: 0x201c,\n // Left double quotation mark\n 0x9f: 0x201d,\n // Right double quotation mark\n 0xa0: 0xc0,\n // uppercase A, grave accent\n 0xa1: 0xc2,\n // uppercase A, circumflex\n 0xa2: 0xc7,\n // uppercase C with cedilla\n 0xa3: 0xc8,\n // uppercase E, grave accent\n 0xa4: 0xca,\n // uppercase E, circumflex\n 0xa5: 0xcb,\n // capital letter E with diaresis\n 0xa6: 0xeb,\n // lowercase letter e with diaresis\n 0xa7: 0xce,\n // uppercase I, circumflex\n 0xa8: 0xcf,\n // uppercase I, with diaresis\n 0xa9: 0xef,\n // lowercase i, with diaresis\n 0xaa: 0xd4,\n // uppercase O, circumflex\n 0xab: 0xd9,\n // uppercase U, grave accent\n 0xac: 0xf9,\n // lowercase u, grave accent\n 0xad: 0xdb,\n // uppercase U, circumflex\n 0xae: 0xab,\n // left-pointing double angle quotation mark\n 0xaf: 0xbb,\n // right-pointing double angle quotation mark\n // THIS BLOCK INCLUDES THE 32 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS\n // THAT COME FROM HI BYTE=0x13 AND LOW BETWEEN 0x20 AND 0x3F\n 0xb0: 0xc3,\n // Uppercase A, tilde\n 0xb1: 0xe3,\n // Lowercase a, tilde\n 0xb2: 0xcd,\n // Uppercase I, acute accent\n 0xb3: 0xcc,\n // Uppercase I, grave accent\n 0xb4: 0xec,\n // Lowercase i, grave accent\n 0xb5: 0xd2,\n // Uppercase O, grave accent\n 0xb6: 0xf2,\n // Lowercase o, grave accent\n 0xb7: 0xd5,\n // Uppercase O, tilde\n 0xb8: 0xf5,\n // Lowercase o, tilde\n 0xb9: 0x7b,\n // Open curly brace\n 0xba: 0x7d,\n // Closing curly brace\n 0xbb: 0x5c,\n // Backslash\n 0xbc: 0x5e,\n // Caret\n 0xbd: 0x5f,\n // Underscore\n 0xbe: 0x7c,\n // Pipe (vertical line)\n 0xbf: 0x223c,\n // Tilde operator\n 0xc0: 0xc4,\n // Uppercase A, umlaut\n 0xc1: 0xe4,\n // Lowercase A, umlaut\n 0xc2: 0xd6,\n // Uppercase O, umlaut\n 0xc3: 0xf6,\n // Lowercase o, umlaut\n 0xc4: 0xdf,\n // Esszett (sharp S)\n 0xc5: 0xa5,\n // Yen symbol\n 0xc6: 0xa4,\n // Generic currency sign\n 0xc7: 0x2503,\n // Box drawings heavy vertical\n 0xc8: 0xc5,\n // Uppercase A, ring\n 0xc9: 0xe5,\n // Lowercase A, ring\n 0xca: 0xd8,\n // Uppercase O, stroke\n 0xcb: 0xf8,\n // Lowercase o, strok\n 0xcc: 0x250f,\n // Box drawings heavy down and right\n 0xcd: 0x2513,\n // Box drawings heavy down and left\n 0xce: 0x2517,\n // Box drawings heavy up and right\n 0xcf: 0x251b // Box drawings heavy up and left\n};\n\n/**\n * Utils\n */\nconst getCharForByte = byte => String.fromCharCode(specialCea608CharsCodes[byte] || byte);\nconst NR_ROWS = 15;\nconst NR_COLS = 100;\n// Tables to look up row from PAC data\nconst rowsLowCh1 = {\n 0x11: 1,\n 0x12: 3,\n 0x15: 5,\n 0x16: 7,\n 0x17: 9,\n 0x10: 11,\n 0x13: 12,\n 0x14: 14\n};\nconst rowsHighCh1 = {\n 0x11: 2,\n 0x12: 4,\n 0x15: 6,\n 0x16: 8,\n 0x17: 10,\n 0x13: 13,\n 0x14: 15\n};\nconst rowsLowCh2 = {\n 0x19: 1,\n 0x1a: 3,\n 0x1d: 5,\n 0x1e: 7,\n 0x1f: 9,\n 0x18: 11,\n 0x1b: 12,\n 0x1c: 14\n};\nconst rowsHighCh2 = {\n 0x19: 2,\n 0x1a: 4,\n 0x1d: 6,\n 0x1e: 8,\n 0x1f: 10,\n 0x1b: 13,\n 0x1c: 15\n};\nconst backgroundColors = ['white', 'green', 'blue', 'cyan', 'red', 'yellow', 'magenta', 'black', 'transparent'];\nclass CaptionsLogger {\n constructor() {\n this.time = null;\n this.verboseLevel = 0;\n }\n log(severity, msg) {\n if (this.verboseLevel >= severity) {\n const m = typeof msg === 'function' ? msg() : msg;\n logger.log(`${this.time} [${severity}] ${m}`);\n }\n }\n}\nconst numArrayToHexArray = function numArrayToHexArray(numArray) {\n const hexArray = [];\n for (let j = 0; j < numArray.length; j++) {\n hexArray.push(numArray[j].toString(16));\n }\n return hexArray;\n};\nclass PenState {\n constructor() {\n this.foreground = 'white';\n this.underline = false;\n this.italics = false;\n this.background = 'black';\n this.flash = false;\n }\n reset() {\n this.foreground = 'white';\n this.underline = false;\n this.italics = false;\n this.background = 'black';\n this.flash = false;\n }\n setStyles(styles) {\n const attribs = ['foreground', 'underline', 'italics', 'background', 'flash'];\n for (let i = 0; i < attribs.length; i++) {\n const style = attribs[i];\n if (styles.hasOwnProperty(style)) {\n this[style] = styles[style];\n }\n }\n }\n isDefault() {\n return this.foreground === 'white' && !this.underline && !this.italics && this.background === 'black' && !this.flash;\n }\n equals(other) {\n return this.foreground === other.foreground && this.underline === other.underline && this.italics === other.italics && this.background === other.background && this.flash === other.flash;\n }\n copy(newPenState) {\n this.foreground = newPenState.foreground;\n this.underline = newPenState.underline;\n this.italics = newPenState.italics;\n this.background = newPenState.background;\n this.flash = newPenState.flash;\n }\n toString() {\n return 'color=' + this.foreground + ', underline=' + this.underline + ', italics=' + this.italics + ', background=' + this.background + ', flash=' + this.flash;\n }\n}\n\n/**\n * Unicode character with styling and background.\n * @constructor\n */\nclass StyledUnicodeChar {\n constructor() {\n this.uchar = ' ';\n this.penState = new PenState();\n }\n reset() {\n this.uchar = ' ';\n this.penState.reset();\n }\n setChar(uchar, newPenState) {\n this.uchar = uchar;\n this.penState.copy(newPenState);\n }\n setPenState(newPenState) {\n this.penState.copy(newPenState);\n }\n equals(other) {\n return this.uchar === other.uchar && this.penState.equals(other.penState);\n }\n copy(newChar) {\n this.uchar = newChar.uchar;\n this.penState.copy(newChar.penState);\n }\n isEmpty() {\n return this.uchar === ' ' && this.penState.isDefault();\n }\n}\n\n/**\n * CEA-608 row consisting of NR_COLS instances of StyledUnicodeChar.\n * @constructor\n */\nclass Row {\n constructor(logger) {\n this.chars = [];\n this.pos = 0;\n this.currPenState = new PenState();\n this.cueStartTime = null;\n this.logger = void 0;\n for (let i = 0; i < NR_COLS; i++) {\n this.chars.push(new StyledUnicodeChar());\n }\n this.logger = logger;\n }\n equals(other) {\n for (let i = 0; i < NR_COLS; i++) {\n if (!this.chars[i].equals(other.chars[i])) {\n return false;\n }\n }\n return true;\n }\n copy(other) {\n for (let i = 0; i < NR_COLS; i++) {\n this.chars[i].copy(other.chars[i]);\n }\n }\n isEmpty() {\n let empty = true;\n for (let i = 0; i < NR_COLS; i++) {\n if (!this.chars[i].isEmpty()) {\n empty = false;\n break;\n }\n }\n return empty;\n }\n\n /**\n * Set the cursor to a valid column.\n */\n setCursor(absPos) {\n if (this.pos !== absPos) {\n this.pos = absPos;\n }\n if (this.pos < 0) {\n this.logger.log(3, 'Negative cursor position ' + this.pos);\n this.pos = 0;\n } else if (this.pos > NR_COLS) {\n this.logger.log(3, 'Too large cursor position ' + this.pos);\n this.pos = NR_COLS;\n }\n }\n\n /**\n * Move the cursor relative to current position.\n */\n moveCursor(relPos) {\n const newPos = this.pos + relPos;\n if (relPos > 1) {\n for (let i = this.pos + 1; i < newPos + 1; i++) {\n this.chars[i].setPenState(this.currPenState);\n }\n }\n this.setCursor(newPos);\n }\n\n /**\n * Backspace, move one step back and clear character.\n */\n backSpace() {\n this.moveCursor(-1);\n this.chars[this.pos].setChar(' ', this.currPenState);\n }\n insertChar(byte) {\n if (byte >= 0x90) {\n // Extended char\n this.backSpace();\n }\n const char = getCharForByte(byte);\n if (this.pos >= NR_COLS) {\n this.logger.log(0, () => 'Cannot insert ' + byte.toString(16) + ' (' + char + ') at position ' + this.pos + '. Skipping it!');\n return;\n }\n this.chars[this.pos].setChar(char, this.currPenState);\n this.moveCursor(1);\n }\n clearFromPos(startPos) {\n let i;\n for (i = startPos; i < NR_COLS; i++) {\n this.chars[i].reset();\n }\n }\n clear() {\n this.clearFromPos(0);\n this.pos = 0;\n this.currPenState.reset();\n }\n clearToEndOfRow() {\n this.clearFromPos(this.pos);\n }\n getTextString() {\n const chars = [];\n let empty = true;\n for (let i = 0; i < NR_COLS; i++) {\n const char = this.chars[i].uchar;\n if (char !== ' ') {\n empty = false;\n }\n chars.push(char);\n }\n if (empty) {\n return '';\n } else {\n return chars.join('');\n }\n }\n setPenStyles(styles) {\n this.currPenState.setStyles(styles);\n const currChar = this.chars[this.pos];\n currChar.setPenState(this.currPenState);\n }\n}\n\n/**\n * Keep a CEA-608 screen of 32x15 styled characters\n * @constructor\n */\nclass CaptionScreen {\n constructor(logger) {\n this.rows = [];\n this.currRow = NR_ROWS - 1;\n this.nrRollUpRows = null;\n this.lastOutputScreen = null;\n this.logger = void 0;\n for (let i = 0; i < NR_ROWS; i++) {\n this.rows.push(new Row(logger));\n }\n this.logger = logger;\n }\n reset() {\n for (let i = 0; i < NR_ROWS; i++) {\n this.rows[i].clear();\n }\n this.currRow = NR_ROWS - 1;\n }\n equals(other) {\n let equal = true;\n for (let i = 0; i < NR_ROWS; i++) {\n if (!this.rows[i].equals(other.rows[i])) {\n equal = false;\n break;\n }\n }\n return equal;\n }\n copy(other) {\n for (let i = 0; i < NR_ROWS; i++) {\n this.rows[i].copy(other.rows[i]);\n }\n }\n isEmpty() {\n let empty = true;\n for (let i = 0; i < NR_ROWS; i++) {\n if (!this.rows[i].isEmpty()) {\n empty = false;\n break;\n }\n }\n return empty;\n }\n backSpace() {\n const row = this.rows[this.currRow];\n row.backSpace();\n }\n clearToEndOfRow() {\n const row = this.rows[this.currRow];\n row.clearToEndOfRow();\n }\n\n /**\n * Insert a character (without styling) in the current row.\n */\n insertChar(char) {\n const row = this.rows[this.currRow];\n row.insertChar(char);\n }\n setPen(styles) {\n const row = this.rows[this.currRow];\n row.setPenStyles(styles);\n }\n moveCursor(relPos) {\n const row = this.rows[this.currRow];\n row.moveCursor(relPos);\n }\n setCursor(absPos) {\n this.logger.log(2, 'setCursor: ' + absPos);\n const row = this.rows[this.currRow];\n row.setCursor(absPos);\n }\n setPAC(pacData) {\n this.logger.log(2, () => 'pacData = ' + stringify(pacData));\n let newRow = pacData.row - 1;\n if (this.nrRollUpRows && newRow < this.nrRollUpRows - 1) {\n newRow = this.nrRollUpRows - 1;\n }\n\n // Make sure this only affects Roll-up Captions by checking this.nrRollUpRows\n if (this.nrRollUpRows && this.currRow !== newRow) {\n // clear all rows first\n for (let i = 0; i < NR_ROWS; i++) {\n this.rows[i].clear();\n }\n\n // Copy this.nrRollUpRows rows from lastOutputScreen and place it in the newRow location\n // topRowIndex - the start of rows to copy (inclusive index)\n const topRowIndex = this.currRow + 1 - this.nrRollUpRows;\n // We only copy if the last position was already shown.\n // We use the cueStartTime value to check this.\n const lastOutputScreen = this.lastOutputScreen;\n if (lastOutputScreen) {\n const prevLineTime = lastOutputScreen.rows[topRowIndex].cueStartTime;\n const time = this.logger.time;\n if (prevLineTime !== null && time !== null && prevLineTime < time) {\n for (let i = 0; i < this.nrRollUpRows; i++) {\n this.rows[newRow - this.nrRollUpRows + i + 1].copy(lastOutputScreen.rows[topRowIndex + i]);\n }\n }\n }\n }\n this.currRow = newRow;\n const row = this.rows[this.currRow];\n if (pacData.indent !== null) {\n const indent = pacData.indent;\n const prevPos = Math.max(indent - 1, 0);\n row.setCursor(pacData.indent);\n pacData.color = row.chars[prevPos].penState.foreground;\n }\n const styles = {\n foreground: pacData.color,\n underline: pacData.underline,\n italics: pacData.italics,\n background: 'black',\n flash: false\n };\n this.setPen(styles);\n }\n\n /**\n * Set background/extra foreground, but first do back_space, and then insert space (backwards compatibility).\n */\n setBkgData(bkgData) {\n this.logger.log(2, () => 'bkgData = ' + stringify(bkgData));\n this.backSpace();\n this.setPen(bkgData);\n this.insertChar(0x20); // Space\n }\n setRollUpRows(nrRows) {\n this.nrRollUpRows = nrRows;\n }\n rollUp() {\n if (this.nrRollUpRows === null) {\n this.logger.log(3, 'roll_up but nrRollUpRows not set yet');\n return; // Not properly setup\n }\n this.logger.log(1, () => this.getDisplayText());\n const topRowIndex = this.currRow + 1 - this.nrRollUpRows;\n const topRow = this.rows.splice(topRowIndex, 1)[0];\n topRow.clear();\n this.rows.splice(this.currRow, 0, topRow);\n this.logger.log(2, 'Rolling up');\n // this.logger.log(VerboseLevel.TEXT, this.get_display_text())\n }\n\n /**\n * Get all non-empty rows with as unicode text.\n */\n getDisplayText(asOneRow) {\n asOneRow = asOneRow || false;\n const displayText = [];\n let text = '';\n let rowNr = -1;\n for (let i = 0; i < NR_ROWS; i++) {\n const rowText = this.rows[i].getTextString();\n if (rowText) {\n rowNr = i + 1;\n if (asOneRow) {\n displayText.push('Row ' + rowNr + \": '\" + rowText + \"'\");\n } else {\n displayText.push(rowText.trim());\n }\n }\n }\n if (displayText.length > 0) {\n if (asOneRow) {\n text = '[' + displayText.join(' | ') + ']';\n } else {\n text = displayText.join('\\n');\n }\n }\n return text;\n }\n getTextAndFormat() {\n return this.rows;\n }\n}\n\n// var modes = ['MODE_ROLL-UP', 'MODE_POP-ON', 'MODE_PAINT-ON', 'MODE_TEXT'];\n\nclass Cea608Channel {\n constructor(channelNumber, outputFilter, logger) {\n this.chNr = void 0;\n this.outputFilter = void 0;\n this.mode = void 0;\n this.verbose = void 0;\n this.displayedMemory = void 0;\n this.nonDisplayedMemory = void 0;\n this.lastOutputScreen = void 0;\n this.currRollUpRow = void 0;\n this.writeScreen = void 0;\n this.cueStartTime = void 0;\n this.logger = void 0;\n this.chNr = channelNumber;\n this.outputFilter = outputFilter;\n this.mode = null;\n this.verbose = 0;\n this.displayedMemory = new CaptionScreen(logger);\n this.nonDisplayedMemory = new CaptionScreen(logger);\n this.lastOutputScreen = new CaptionScreen(logger);\n this.currRollUpRow = this.displayedMemory.rows[NR_ROWS - 1];\n this.writeScreen = this.displayedMemory;\n this.mode = null;\n this.cueStartTime = null; // Keeps track of where a cue started.\n this.logger = logger;\n }\n reset() {\n this.mode = null;\n this.displayedMemory.reset();\n this.nonDisplayedMemory.reset();\n this.lastOutputScreen.reset();\n this.outputFilter.reset();\n this.currRollUpRow = this.displayedMemory.rows[NR_ROWS - 1];\n this.writeScreen = this.displayedMemory;\n this.mode = null;\n this.cueStartTime = null;\n }\n getHandler() {\n return this.outputFilter;\n }\n setHandler(newHandler) {\n this.outputFilter = newHandler;\n }\n setPAC(pacData) {\n this.writeScreen.setPAC(pacData);\n }\n setBkgData(bkgData) {\n this.writeScreen.setBkgData(bkgData);\n }\n setMode(newMode) {\n if (newMode === this.mode) {\n return;\n }\n this.mode = newMode;\n this.logger.log(2, () => 'MODE=' + newMode);\n if (this.mode === 'MODE_POP-ON') {\n this.writeScreen = this.nonDisplayedMemory;\n } else {\n this.writeScreen = this.displayedMemory;\n this.writeScreen.reset();\n }\n if (this.mode !== 'MODE_ROLL-UP') {\n this.displayedMemory.nrRollUpRows = null;\n this.nonDisplayedMemory.nrRollUpRows = null;\n }\n this.mode = newMode;\n }\n insertChars(chars) {\n for (let i = 0; i < chars.length; i++) {\n this.writeScreen.insertChar(chars[i]);\n }\n const screen = this.writeScreen === this.displayedMemory ? 'DISP' : 'NON_DISP';\n this.logger.log(2, () => screen + ': ' + this.writeScreen.getDisplayText(true));\n if (this.mode === 'MODE_PAINT-ON' || this.mode === 'MODE_ROLL-UP') {\n this.logger.log(1, () => 'DISPLAYED: ' + this.displayedMemory.getDisplayText(true));\n this.outputDataUpdate();\n }\n }\n ccRCL() {\n // Resume Caption Loading (switch mode to Pop On)\n this.logger.log(2, 'RCL - Resume Caption Loading');\n this.setMode('MODE_POP-ON');\n }\n ccBS() {\n // BackSpace\n this.logger.log(2, 'BS - BackSpace');\n if (this.mode === 'MODE_TEXT') {\n return;\n }\n this.writeScreen.backSpace();\n if (this.writeScreen === this.displayedMemory) {\n this.outputDataUpdate();\n }\n }\n ccAOF() {\n // Reserved (formerly Alarm Off)\n }\n ccAON() {\n // Reserved (formerly Alarm On)\n }\n ccDER() {\n // Delete to End of Row\n this.logger.log(2, 'DER- Delete to End of Row');\n this.writeScreen.clearToEndOfRow();\n this.outputDataUpdate();\n }\n ccRU(nrRows) {\n // Roll-Up Captions-2,3,or 4 Rows\n this.logger.log(2, 'RU(' + nrRows + ') - Roll Up');\n this.writeScreen = this.displayedMemory;\n this.setMode('MODE_ROLL-UP');\n this.writeScreen.setRollUpRows(nrRows);\n }\n ccFON() {\n // Flash On\n this.logger.log(2, 'FON - Flash On');\n this.writeScreen.setPen({\n flash: true\n });\n }\n ccRDC() {\n // Resume Direct Captioning (switch mode to PaintOn)\n this.logger.log(2, 'RDC - Resume Direct Captioning');\n this.setMode('MODE_PAINT-ON');\n }\n ccTR() {\n // Text Restart in text mode (not supported, however)\n this.logger.log(2, 'TR');\n this.setMode('MODE_TEXT');\n }\n ccRTD() {\n // Resume Text Display in Text mode (not supported, however)\n this.logger.log(2, 'RTD');\n this.setMode('MODE_TEXT');\n }\n ccEDM() {\n // Erase Displayed Memory\n this.logger.log(2, 'EDM - Erase Displayed Memory');\n this.displayedMemory.reset();\n this.outputDataUpdate(true);\n }\n ccCR() {\n // Carriage Return\n this.logger.log(2, 'CR - Carriage Return');\n this.writeScreen.rollUp();\n this.outputDataUpdate(true);\n }\n ccENM() {\n // Erase Non-Displayed Memory\n this.logger.log(2, 'ENM - Erase Non-displayed Memory');\n this.nonDisplayedMemory.reset();\n }\n ccEOC() {\n // End of Caption (Flip Memories)\n this.logger.log(2, 'EOC - End Of Caption');\n if (this.mode === 'MODE_POP-ON') {\n const tmp = this.displayedMemory;\n this.displayedMemory = this.nonDisplayedMemory;\n this.nonDisplayedMemory = tmp;\n this.writeScreen = this.nonDisplayedMemory;\n this.logger.log(1, () => 'DISP: ' + this.displayedMemory.getDisplayText());\n }\n this.outputDataUpdate(true);\n }\n ccTO(nrCols) {\n // Tab Offset 1,2, or 3 columns\n this.logger.log(2, 'TO(' + nrCols + ') - Tab Offset');\n this.writeScreen.moveCursor(nrCols);\n }\n ccMIDROW(secondByte) {\n // Parse MIDROW command\n const styles = {\n flash: false\n };\n styles.underline = secondByte % 2 === 1;\n styles.italics = secondByte >= 0x2e;\n if (!styles.italics) {\n const colorIndex = Math.floor(secondByte / 2) - 0x10;\n const colors = ['white', 'green', 'blue', 'cyan', 'red', 'yellow', 'magenta'];\n styles.foreground = colors[colorIndex];\n } else {\n styles.foreground = 'white';\n }\n this.logger.log(2, 'MIDROW: ' + stringify(styles));\n this.writeScreen.setPen(styles);\n }\n outputDataUpdate(dispatch = false) {\n const time = this.logger.time;\n if (time === null) {\n return;\n }\n if (this.outputFilter) {\n if (this.cueStartTime === null && !this.displayedMemory.isEmpty()) {\n // Start of a new cue\n this.cueStartTime = time;\n } else {\n if (!this.displayedMemory.equals(this.lastOutputScreen)) {\n this.outputFilter.newCue(this.cueStartTime, time, this.lastOutputScreen);\n if (dispatch && this.outputFilter.dispatchCue) {\n this.outputFilter.dispatchCue();\n }\n this.cueStartTime = this.displayedMemory.isEmpty() ? null : time;\n }\n }\n this.lastOutputScreen.copy(this.displayedMemory);\n }\n }\n cueSplitAtTime(t) {\n if (this.outputFilter) {\n if (!this.displayedMemory.isEmpty()) {\n if (this.outputFilter.newCue) {\n this.outputFilter.newCue(this.cueStartTime, t, this.displayedMemory);\n }\n this.cueStartTime = t;\n }\n }\n }\n}\n\n// Will be 1 or 2 when parsing captions\n\nclass Cea608Parser {\n constructor(field, out1, out2) {\n this.channels = void 0;\n this.currentChannel = 0;\n this.cmdHistory = createCmdHistory();\n this.logger = void 0;\n const logger = this.logger = new CaptionsLogger();\n this.channels = [null, new Cea608Channel(field, out1, logger), new Cea608Channel(field + 1, out2, logger)];\n }\n getHandler(channel) {\n return this.channels[channel].getHandler();\n }\n setHandler(channel, newHandler) {\n this.channels[channel].setHandler(newHandler);\n }\n\n /**\n * Add data for time t in forms of list of bytes (unsigned ints). The bytes are treated as pairs.\n */\n addData(time, byteList) {\n this.logger.time = time;\n for (let i = 0; i < byteList.length; i += 2) {\n const a = byteList[i] & 0x7f;\n const b = byteList[i + 1] & 0x7f;\n let cmdFound = false;\n let charsFound = null;\n if (a === 0 && b === 0) {\n continue;\n } else {\n this.logger.log(3, () => '[' + numArrayToHexArray([byteList[i], byteList[i + 1]]) + '] -> (' + numArrayToHexArray([a, b]) + ')');\n }\n const cmdHistory = this.cmdHistory;\n const isControlCode = a >= 0x10 && a <= 0x1f;\n if (isControlCode) {\n // Skip redundant control codes\n if (hasCmdRepeated(a, b, cmdHistory)) {\n setLastCmd(null, null, cmdHistory);\n this.logger.log(3, () => 'Repeated command (' + numArrayToHexArray([a, b]) + ') is dropped');\n continue;\n }\n setLastCmd(a, b, this.cmdHistory);\n cmdFound = this.parseCmd(a, b);\n if (!cmdFound) {\n cmdFound = this.parseMidrow(a, b);\n }\n if (!cmdFound) {\n cmdFound = this.parsePAC(a, b);\n }\n if (!cmdFound) {\n cmdFound = this.parseBackgroundAttributes(a, b);\n }\n } else {\n setLastCmd(null, null, cmdHistory);\n }\n if (!cmdFound) {\n charsFound = this.parseChars(a, b);\n if (charsFound) {\n const currChNr = this.currentChannel;\n if (currChNr && currChNr > 0) {\n const channel = this.channels[currChNr];\n channel.insertChars(charsFound);\n } else {\n this.logger.log(2, 'No channel found yet. TEXT-MODE?');\n }\n }\n }\n if (!cmdFound && !charsFound) {\n this.logger.log(2, () => \"Couldn't parse cleaned data \" + numArrayToHexArray([a, b]) + ' orig: ' + numArrayToHexArray([byteList[i], byteList[i + 1]]));\n }\n }\n }\n\n /**\n * Parse Command.\n * @returns True if a command was found\n */\n parseCmd(a, b) {\n const cond1 = (a === 0x14 || a === 0x1c || a === 0x15 || a === 0x1d) && b >= 0x20 && b <= 0x2f;\n const cond2 = (a === 0x17 || a === 0x1f) && b >= 0x21 && b <= 0x23;\n if (!(cond1 || cond2)) {\n return false;\n }\n const chNr = a === 0x14 || a === 0x15 || a === 0x17 ? 1 : 2;\n const channel = this.channels[chNr];\n if (a === 0x14 || a === 0x15 || a === 0x1c || a === 0x1d) {\n if (b === 0x20) {\n channel.ccRCL();\n } else if (b === 0x21) {\n channel.ccBS();\n } else if (b === 0x22) {\n channel.ccAOF();\n } else if (b === 0x23) {\n channel.ccAON();\n } else if (b === 0x24) {\n channel.ccDER();\n } else if (b === 0x25) {\n channel.ccRU(2);\n } else if (b === 0x26) {\n channel.ccRU(3);\n } else if (b === 0x27) {\n channel.ccRU(4);\n } else if (b === 0x28) {\n channel.ccFON();\n } else if (b === 0x29) {\n channel.ccRDC();\n } else if (b === 0x2a) {\n channel.ccTR();\n } else if (b === 0x2b) {\n channel.ccRTD();\n } else if (b === 0x2c) {\n channel.ccEDM();\n } else if (b === 0x2d) {\n channel.ccCR();\n } else if (b === 0x2e) {\n channel.ccENM();\n } else if (b === 0x2f) {\n channel.ccEOC();\n }\n } else {\n // a == 0x17 || a == 0x1F\n channel.ccTO(b - 0x20);\n }\n this.currentChannel = chNr;\n return true;\n }\n\n /**\n * Parse midrow styling command\n */\n parseMidrow(a, b) {\n let chNr = 0;\n if ((a === 0x11 || a === 0x19) && b >= 0x20 && b <= 0x2f) {\n if (a === 0x11) {\n chNr = 1;\n } else {\n chNr = 2;\n }\n if (chNr !== this.currentChannel) {\n this.logger.log(0, 'Mismatch channel in midrow parsing');\n return false;\n }\n const channel = this.channels[chNr];\n if (!channel) {\n return false;\n }\n channel.ccMIDROW(b);\n this.logger.log(3, () => 'MIDROW (' + numArrayToHexArray([a, b]) + ')');\n return true;\n }\n return false;\n }\n\n /**\n * Parse Preable Access Codes (Table 53).\n * @returns {Boolean} Tells if PAC found\n */\n parsePAC(a, b) {\n let row;\n const case1 = (a >= 0x11 && a <= 0x17 || a >= 0x19 && a <= 0x1f) && b >= 0x40 && b <= 0x7f;\n const case2 = (a === 0x10 || a === 0x18) && b >= 0x40 && b <= 0x5f;\n if (!(case1 || case2)) {\n return false;\n }\n const chNr = a <= 0x17 ? 1 : 2;\n if (b >= 0x40 && b <= 0x5f) {\n row = chNr === 1 ? rowsLowCh1[a] : rowsLowCh2[a];\n } else {\n // 0x60 <= b <= 0x7F\n row = chNr === 1 ? rowsHighCh1[a] : rowsHighCh2[a];\n }\n const channel = this.channels[chNr];\n if (!channel) {\n return false;\n }\n channel.setPAC(this.interpretPAC(row, b));\n this.currentChannel = chNr;\n return true;\n }\n\n /**\n * Interpret the second byte of the pac, and return the information.\n * @returns pacData with style parameters\n */\n interpretPAC(row, byte) {\n let pacIndex;\n const pacData = {\n color: null,\n italics: false,\n indent: null,\n underline: false,\n row: row\n };\n if (byte > 0x5f) {\n pacIndex = byte - 0x60;\n } else {\n pacIndex = byte - 0x40;\n }\n pacData.underline = (pacIndex & 1) === 1;\n if (pacIndex <= 0xd) {\n pacData.color = ['white', 'green', 'blue', 'cyan', 'red', 'yellow', 'magenta', 'white'][Math.floor(pacIndex / 2)];\n } else if (pacIndex <= 0xf) {\n pacData.italics = true;\n pacData.color = 'white';\n } else {\n pacData.indent = Math.floor((pacIndex - 0x10) / 2) * 4;\n }\n return pacData; // Note that row has zero offset. The spec uses 1.\n }\n\n /**\n * Parse characters.\n * @returns An array with 1 to 2 codes corresponding to chars, if found. null otherwise.\n */\n parseChars(a, b) {\n let channelNr;\n let charCodes = null;\n let charCode1 = null;\n if (a >= 0x19) {\n channelNr = 2;\n charCode1 = a - 8;\n } else {\n channelNr = 1;\n charCode1 = a;\n }\n if (charCode1 >= 0x11 && charCode1 <= 0x13) {\n // Special character\n let oneCode;\n if (charCode1 === 0x11) {\n oneCode = b + 0x50;\n } else if (charCode1 === 0x12) {\n oneCode = b + 0x70;\n } else {\n oneCode = b + 0x90;\n }\n this.logger.log(2, () => \"Special char '\" + getCharForByte(oneCode) + \"' in channel \" + channelNr);\n charCodes = [oneCode];\n } else if (a >= 0x20 && a <= 0x7f) {\n charCodes = b === 0 ? [a] : [a, b];\n }\n if (charCodes) {\n this.logger.log(3, () => 'Char codes = ' + numArrayToHexArray(charCodes).join(','));\n }\n return charCodes;\n }\n\n /**\n * Parse extended background attributes as well as new foreground color black.\n * @returns True if background attributes are found\n */\n parseBackgroundAttributes(a, b) {\n const case1 = (a === 0x10 || a === 0x18) && b >= 0x20 && b <= 0x2f;\n const case2 = (a === 0x17 || a === 0x1f) && b >= 0x2d && b <= 0x2f;\n if (!(case1 || case2)) {\n return false;\n }\n let index;\n const bkgData = {};\n if (a === 0x10 || a === 0x18) {\n index = Math.floor((b - 0x20) / 2);\n bkgData.background = backgroundColors[index];\n if (b % 2 === 1) {\n bkgData.background = bkgData.background + '_semi';\n }\n } else if (b === 0x2d) {\n bkgData.background = 'transparent';\n } else {\n bkgData.foreground = 'black';\n if (b === 0x2f) {\n bkgData.underline = true;\n }\n }\n const chNr = a <= 0x17 ? 1 : 2;\n const channel = this.channels[chNr];\n channel.setBkgData(bkgData);\n return true;\n }\n\n /**\n * Reset state of parser and its channels.\n */\n reset() {\n for (let i = 0; i < Object.keys(this.channels).length; i++) {\n const channel = this.channels[i];\n if (channel) {\n channel.reset();\n }\n }\n setLastCmd(null, null, this.cmdHistory);\n }\n\n /**\n * Trigger the generation of a cue, and the start of a new one if displayScreens are not empty.\n */\n cueSplitAtTime(t) {\n for (let i = 0; i < this.channels.length; i++) {\n const channel = this.channels[i];\n if (channel) {\n channel.cueSplitAtTime(t);\n }\n }\n }\n}\nfunction setLastCmd(a, b, cmdHistory) {\n cmdHistory.a = a;\n cmdHistory.b = b;\n}\nfunction hasCmdRepeated(a, b, cmdHistory) {\n return cmdHistory.a === a && cmdHistory.b === b;\n}\nfunction createCmdHistory() {\n return {\n a: null,\n b: null\n };\n}\n\n/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar VTTCue = (function () {\n if (optionalSelf != null && optionalSelf.VTTCue) {\n return self.VTTCue;\n }\n const AllowedDirections = ['', 'lr', 'rl'];\n const AllowedAlignments = ['start', 'middle', 'end', 'left', 'right'];\n function isAllowedValue(allowed, value) {\n if (typeof value !== 'string') {\n return false;\n }\n // necessary for assuring the generic conforms to the Array interface\n if (!Array.isArray(allowed)) {\n return false;\n }\n // reset the type so that the next narrowing works well\n const lcValue = value.toLowerCase();\n // use the allow list to narrow the type to a specific subset of strings\n if (~allowed.indexOf(lcValue)) {\n return lcValue;\n }\n return false;\n }\n function findDirectionSetting(value) {\n return isAllowedValue(AllowedDirections, value);\n }\n function findAlignSetting(value) {\n return isAllowedValue(AllowedAlignments, value);\n }\n function extend(obj, ...rest) {\n let i = 1;\n for (; i < arguments.length; i++) {\n const cobj = arguments[i];\n for (const p in cobj) {\n obj[p] = cobj[p];\n }\n }\n return obj;\n }\n function VTTCue(startTime, endTime, text) {\n const cue = this;\n const baseObj = {\n enumerable: true\n };\n /**\n * Shim implementation specific properties. These properties are not in\n * the spec.\n */\n\n // Lets us know when the VTTCue's data has changed in such a way that we need\n // to recompute its display state. This lets us compute its display state\n // lazily.\n cue.hasBeenReset = false;\n\n /**\n * VTTCue and TextTrackCue properties\n * http://dev.w3.org/html5/webvtt/#vttcue-interface\n */\n\n let _id = '';\n let _pauseOnExit = false;\n let _startTime = startTime;\n let _endTime = endTime;\n let _text = text;\n let _region = null;\n let _vertical = '';\n let _snapToLines = true;\n let _line = 'auto';\n let _lineAlign = 'start';\n let _position = 50;\n let _positionAlign = 'middle';\n let _size = 50;\n let _align = 'middle';\n Object.defineProperty(cue, 'id', extend({}, baseObj, {\n get: function () {\n return _id;\n },\n set: function (value) {\n _id = '' + value;\n }\n }));\n Object.defineProperty(cue, 'pauseOnExit', extend({}, baseObj, {\n get: function () {\n return _pauseOnExit;\n },\n set: function (value) {\n _pauseOnExit = !!value;\n }\n }));\n Object.defineProperty(cue, 'startTime', extend({}, baseObj, {\n get: function () {\n return _startTime;\n },\n set: function (value) {\n if (typeof value !== 'number') {\n throw new TypeError('Start time must be set to a number.');\n }\n _startTime = value;\n this.hasBeenReset = true;\n }\n }));\n Object.defineProperty(cue, 'endTime', extend({}, baseObj, {\n get: function () {\n return _endTime;\n },\n set: function (value) {\n if (typeof value !== 'number') {\n throw new TypeError('End time must be set to a number.');\n }\n _endTime = value;\n this.hasBeenReset = true;\n }\n }));\n Object.defineProperty(cue, 'text', extend({}, baseObj, {\n get: function () {\n return _text;\n },\n set: function (value) {\n _text = '' + value;\n this.hasBeenReset = true;\n }\n }));\n\n // todo: implement VTTRegion polyfill?\n Object.defineProperty(cue, 'region', extend({}, baseObj, {\n get: function () {\n return _region;\n },\n set: function (value) {\n _region = value;\n this.hasBeenReset = true;\n }\n }));\n Object.defineProperty(cue, 'vertical', extend({}, baseObj, {\n get: function () {\n return _vertical;\n },\n set: function (value) {\n const setting = findDirectionSetting(value);\n // Have to check for false because the setting an be an empty string.\n if (setting === false) {\n throw new SyntaxError('An invalid or illegal string was specified.');\n }\n _vertical = setting;\n this.hasBeenReset = true;\n }\n }));\n Object.defineProperty(cue, 'snapToLines', extend({}, baseObj, {\n get: function () {\n return _snapToLines;\n },\n set: function (value) {\n _snapToLines = !!value;\n this.hasBeenReset = true;\n }\n }));\n Object.defineProperty(cue, 'line', extend({}, baseObj, {\n get: function () {\n return _line;\n },\n set: function (value) {\n if (typeof value !== 'number' && value !== 'auto') {\n throw new SyntaxError('An invalid number or illegal string was specified.');\n }\n _line = value;\n this.hasBeenReset = true;\n }\n }));\n Object.defineProperty(cue, 'lineAlign', extend({}, baseObj, {\n get: function () {\n return _lineAlign;\n },\n set: function (value) {\n const setting = findAlignSetting(value);\n if (!setting) {\n throw new SyntaxError('An invalid or illegal string was specified.');\n }\n _lineAlign = setting;\n this.hasBeenReset = true;\n }\n }));\n Object.defineProperty(cue, 'position', extend({}, baseObj, {\n get: function () {\n return _position;\n },\n set: function (value) {\n if (value < 0 || value > 100) {\n throw new Error('Position must be between 0 and 100.');\n }\n _position = value;\n this.hasBeenReset = true;\n }\n }));\n Object.defineProperty(cue, 'positionAlign', extend({}, baseObj, {\n get: function () {\n return _positionAlign;\n },\n set: function (value) {\n const setting = findAlignSetting(value);\n if (!setting) {\n throw new SyntaxError('An invalid or illegal string was specified.');\n }\n _positionAlign = setting;\n this.hasBeenReset = true;\n }\n }));\n Object.defineProperty(cue, 'size', extend({}, baseObj, {\n get: function () {\n return _size;\n },\n set: function (value) {\n if (value < 0 || value > 100) {\n throw new Error('Size must be between 0 and 100.');\n }\n _size = value;\n this.hasBeenReset = true;\n }\n }));\n Object.defineProperty(cue, 'align', extend({}, baseObj, {\n get: function () {\n return _align;\n },\n set: function (value) {\n const setting = findAlignSetting(value);\n if (!setting) {\n throw new SyntaxError('An invalid or illegal string was specified.');\n }\n _align = setting;\n this.hasBeenReset = true;\n }\n }));\n\n /**\n * Other <track> spec defined properties\n */\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#text-track-cue-display-state\n cue.displayState = undefined;\n }\n\n /**\n * VTTCue methods\n */\n\n VTTCue.prototype.getCueAsHTML = function () {\n // Assume WebVTT.convertCueToDOMTree is on the global.\n const WebVTT = self.WebVTT;\n return WebVTT.convertCueToDOMTree(self, this.text);\n };\n // this is a polyfill hack\n return VTTCue;\n})();\n\n/*\n * Source: https://github.com/mozilla/vtt.js/blob/master/dist/vtt.js\n */\n\nclass StringDecoder {\n decode(data, options) {\n if (!data) {\n return '';\n }\n if (typeof data !== 'string') {\n throw new Error('Error - expected string data.');\n }\n return decodeURIComponent(encodeURIComponent(data));\n }\n}\n\n// Try to parse input as a time stamp.\nfunction parseTimeStamp(input) {\n function computeSeconds(h, m, s, f) {\n return (h | 0) * 3600 + (m | 0) * 60 + (s | 0) + parseFloat(f || 0);\n }\n const m = input.match(/^(?:(\\d+):)?(\\d{2}):(\\d{2})(\\.\\d+)?/);\n if (!m) {\n return null;\n }\n if (parseFloat(m[2]) > 59) {\n // Timestamp takes the form of [hours]:[minutes].[milliseconds]\n // First position is hours as it's over 59.\n return computeSeconds(m[2], m[3], 0, m[4]);\n }\n // Timestamp takes the form of [hours (optional)]:[minutes]:[seconds].[milliseconds]\n return computeSeconds(m[1], m[2], m[3], m[4]);\n}\n\n// A settings object holds key/value pairs and will ignore anything but the first\n// assignment to a specific key.\nclass Settings {\n constructor() {\n this.values = Object.create(null);\n }\n // Only accept the first assignment to any key.\n set(k, v) {\n if (!this.get(k) && v !== '') {\n this.values[k] = v;\n }\n }\n // Return the value for a key, or a default value.\n // If 'defaultKey' is passed then 'dflt' is assumed to be an object with\n // a number of possible default values as properties where 'defaultKey' is\n // the key of the property that will be chosen; otherwise it's assumed to be\n // a single value.\n get(k, dflt, defaultKey) {\n if (defaultKey) {\n return this.has(k) ? this.values[k] : dflt[defaultKey];\n }\n return this.has(k) ? this.values[k] : dflt;\n }\n // Check whether we have a value for a key.\n has(k) {\n return k in this.values;\n }\n // Accept a setting if its one of the given alternatives.\n alt(k, v, a) {\n for (let n = 0; n < a.length; ++n) {\n if (v === a[n]) {\n this.set(k, v);\n break;\n }\n }\n }\n // Accept a setting if its a valid (signed) integer.\n integer(k, v) {\n if (/^-?\\d+$/.test(v)) {\n // integer\n this.set(k, parseInt(v, 10));\n }\n }\n // Accept a setting if its a valid percentage.\n percent(k, v) {\n if (/^([\\d]{1,3})(\\.[\\d]*)?%$/.test(v)) {\n const percent = parseFloat(v);\n if (percent >= 0 && percent <= 100) {\n this.set(k, percent);\n return true;\n }\n }\n return false;\n }\n}\n\n// Helper function to parse input into groups separated by 'groupDelim', and\n// interpret each group as a key/value pair separated by 'keyValueDelim'.\nfunction parseOptions(input, callback, keyValueDelim, groupDelim) {\n const groups = groupDelim ? input.split(groupDelim) : [input];\n for (const i in groups) {\n if (typeof groups[i] !== 'string') {\n continue;\n }\n const kv = groups[i].split(keyValueDelim);\n if (kv.length !== 2) {\n continue;\n }\n const k = kv[0];\n const v = kv[1];\n callback(k, v);\n }\n}\nconst defaults = new VTTCue(0, 0, '');\n// 'middle' was changed to 'center' in the spec: https://github.com/w3c/webvtt/pull/244\n// Safari doesn't yet support this change, but FF and Chrome do.\nconst center = defaults.align === 'middle' ? 'middle' : 'center';\nfunction parseCue(input, cue, regionList) {\n // Remember the original input if we need to throw an error.\n const oInput = input;\n // 4.1 WebVTT timestamp\n function consumeTimeStamp() {\n const ts = parseTimeStamp(input);\n if (ts === null) {\n throw new Error('Malformed timestamp: ' + oInput);\n }\n\n // Remove time stamp from input.\n input = input.replace(/^[^\\sa-zA-Z-]+/, '');\n return ts;\n }\n\n // 4.4.2 WebVTT cue settings\n function consumeCueSettings(input, cue) {\n const settings = new Settings();\n parseOptions(input, function (k, v) {\n let vals;\n switch (k) {\n case 'region':\n // Find the last region we parsed with the same region id.\n for (let i = regionList.length - 1; i >= 0; i--) {\n if (regionList[i].id === v) {\n settings.set(k, regionList[i].region);\n break;\n }\n }\n break;\n case 'vertical':\n settings.alt(k, v, ['rl', 'lr']);\n break;\n case 'line':\n vals = v.split(',');\n settings.integer(k, vals[0]);\n if (settings.percent(k, vals[0])) {\n settings.set('snapToLines', false);\n }\n settings.alt(k, vals[0], ['auto']);\n if (vals.length === 2) {\n settings.alt('lineAlign', vals[1], ['start', center, 'end']);\n }\n break;\n case 'position':\n vals = v.split(',');\n settings.percent(k, vals[0]);\n if (vals.length === 2) {\n settings.alt('positionAlign', vals[1], ['start', center, 'end', 'line-left', 'line-right', 'auto']);\n }\n break;\n case 'size':\n settings.percent(k, v);\n break;\n case 'align':\n settings.alt(k, v, ['start', center, 'end', 'left', 'right']);\n break;\n }\n }, /:/, /\\s/);\n\n // Apply default values for any missing fields.\n cue.region = settings.get('region', null);\n cue.vertical = settings.get('vertical', '');\n let line = settings.get('line', 'auto');\n if (line === 'auto' && defaults.line === -1) {\n // set numeric line number for Safari\n line = -1;\n }\n cue.line = line;\n cue.lineAlign = settings.get('lineAlign', 'start');\n cue.snapToLines = settings.get('snapToLines', true);\n cue.size = settings.get('size', 100);\n cue.align = settings.get('align', center);\n let position = settings.get('position', 'auto');\n if (position === 'auto' && defaults.position === 50) {\n // set numeric position for Safari\n position = cue.align === 'start' || cue.align === 'left' ? 0 : cue.align === 'end' || cue.align === 'right' ? 100 : 50;\n }\n cue.position = position;\n }\n function skipWhitespace() {\n input = input.replace(/^\\s+/, '');\n }\n\n // 4.1 WebVTT cue timings.\n skipWhitespace();\n cue.startTime = consumeTimeStamp(); // (1) collect cue start time\n skipWhitespace();\n if (input.slice(0, 3) !== '-->') {\n // (3) next characters must match '-->'\n throw new Error(\"Malformed time stamp (time stamps must be separated by '-->'): \" + oInput);\n }\n input = input.slice(3);\n skipWhitespace();\n cue.endTime = consumeTimeStamp(); // (5) collect cue end time\n\n // 4.1 WebVTT cue settings list.\n skipWhitespace();\n consumeCueSettings(input, cue);\n}\nfunction fixLineBreaks(input) {\n return input.replace(/<br(?: \\/)?>/gi, '\\n');\n}\nclass VTTParser {\n constructor() {\n this.state = 'INITIAL';\n this.buffer = '';\n this.decoder = new StringDecoder();\n this.regionList = [];\n this.cue = null;\n this.oncue = void 0;\n this.onparsingerror = void 0;\n this.onflush = void 0;\n }\n parse(data) {\n const _this = this;\n\n // If there is no data then we won't decode it, but will just try to parse\n // whatever is in buffer already. This may occur in circumstances, for\n // example when flush() is called.\n if (data) {\n // Try to decode the data that we received.\n _this.buffer += _this.decoder.decode(data, {\n stream: true\n });\n }\n function collectNextLine() {\n let buffer = _this.buffer;\n let pos = 0;\n buffer = fixLineBreaks(buffer);\n while (pos < buffer.length && buffer[pos] !== '\\r' && buffer[pos] !== '\\n') {\n ++pos;\n }\n const line = buffer.slice(0, pos);\n // Advance the buffer early in case we fail below.\n if (buffer[pos] === '\\r') {\n ++pos;\n }\n if (buffer[pos] === '\\n') {\n ++pos;\n }\n _this.buffer = buffer.slice(pos);\n return line;\n }\n\n // 3.2 WebVTT metadata header syntax\n function parseHeader(input) {\n parseOptions(input, function (k, v) {\n // switch (k) {\n // case 'region':\n // 3.3 WebVTT region metadata header syntax\n // console.log('parse region', v);\n // parseRegion(v);\n // break;\n // }\n }, /:/);\n }\n\n // 5.1 WebVTT file parsing.\n try {\n let line = '';\n if (_this.state === 'INITIAL') {\n // We can't start parsing until we have the first line.\n if (!/\\r\\n|\\n/.test(_this.buffer)) {\n return this;\n }\n line = collectNextLine();\n // strip of UTF-8 BOM if any\n // https://en.wikipedia.org/wiki/Byte_order_mark#UTF-8\n const m = line.match(/^()?WEBVTT([ \\t].*)?$/);\n if (!(m != null && m[0])) {\n throw new Error('Malformed WebVTT signature.');\n }\n _this.state = 'HEADER';\n }\n let alreadyCollectedLine = false;\n while (_this.buffer) {\n // We can't parse a line until we have the full line.\n if (!/\\r\\n|\\n/.test(_this.buffer)) {\n return this;\n }\n if (!alreadyCollectedLine) {\n line = collectNextLine();\n } else {\n alreadyCollectedLine = false;\n }\n switch (_this.state) {\n case 'HEADER':\n // 13-18 - Allow a header (metadata) under the WEBVTT line.\n if (/:/.test(line)) {\n parseHeader(line);\n } else if (!line) {\n // An empty line terminates the header and starts the body (cues).\n _this.state = 'ID';\n }\n continue;\n case 'NOTE':\n // Ignore NOTE blocks.\n if (!line) {\n _this.state = 'ID';\n }\n continue;\n case 'ID':\n // Check for the start of NOTE blocks.\n if (/^NOTE($|[ \\t])/.test(line)) {\n _this.state = 'NOTE';\n break;\n }\n // 19-29 - Allow any number of line terminators, then initialize new cue values.\n if (!line) {\n continue;\n }\n _this.cue = new VTTCue(0, 0, '');\n _this.state = 'CUE';\n // 30-39 - Check if self line contains an optional identifier or timing data.\n if (line.indexOf('-->') === -1) {\n _this.cue.id = line;\n continue;\n }\n // Process line as start of a cue.\n /* falls through */\n case 'CUE':\n // 40 - Collect cue timings and settings.\n if (!_this.cue) {\n _this.state = 'BADCUE';\n continue;\n }\n try {\n parseCue(line, _this.cue, _this.regionList);\n } catch (e) {\n // In case of an error ignore rest of the cue.\n _this.cue = null;\n _this.state = 'BADCUE';\n continue;\n }\n _this.state = 'CUETEXT';\n continue;\n case 'CUETEXT':\n {\n const hasSubstring = line.indexOf('-->') !== -1;\n // 34 - If we have an empty line then report the cue.\n // 35 - If we have the special substring '-->' then report the cue,\n // but do not collect the line as we need to process the current\n // one as a new cue.\n if (!line || hasSubstring && (alreadyCollectedLine = true)) {\n // We are done parsing self cue.\n if (_this.oncue && _this.cue) {\n _this.oncue(_this.cue);\n }\n _this.cue = null;\n _this.state = 'ID';\n continue;\n }\n if (_this.cue === null) {\n continue;\n }\n if (_this.cue.text) {\n _this.cue.text += '\\n';\n }\n _this.cue.text += line;\n }\n continue;\n case 'BADCUE':\n // 54-62 - Collect and discard the remaining cue.\n if (!line) {\n _this.state = 'ID';\n }\n }\n }\n } catch (e) {\n // If we are currently parsing a cue, report what we have.\n if (_this.state === 'CUETEXT' && _this.cue && _this.oncue) {\n _this.oncue(_this.cue);\n }\n _this.cue = null;\n // Enter BADWEBVTT state if header was not parsed correctly otherwise\n // another exception occurred so enter BADCUE state.\n _this.state = _this.state === 'INITIAL' ? 'BADWEBVTT' : 'BADCUE';\n }\n return this;\n }\n flush() {\n const _this = this;\n try {\n // Finish decoding the stream.\n // _this.buffer += _this.decoder.decode();\n // Synthesize the end of the current cue or region.\n if (_this.cue || _this.state === 'HEADER') {\n _this.buffer += '\\n\\n';\n _this.parse();\n }\n // If we've flushed, parsed, and we're still on the INITIAL state then\n // that means we don't have enough of the stream to parse the first\n // line.\n if (_this.state === 'INITIAL' || _this.state === 'BADWEBVTT') {\n throw new Error('Malformed WebVTT signature.');\n }\n } catch (e) {\n if (_this.onparsingerror) {\n _this.onparsingerror(e);\n }\n }\n if (_this.onflush) {\n _this.onflush();\n }\n return this;\n }\n}\n\nconst LINEBREAKS = /\\r\\n|\\n\\r|\\n|\\r/g;\n\n// String.prototype.startsWith is not supported in IE11\nconst startsWith = function startsWith(inputString, searchString, position = 0) {\n return inputString.slice(position, position + searchString.length) === searchString;\n};\nconst cueString2millis = function cueString2millis(timeString) {\n let ts = parseInt(timeString.slice(-3));\n const secs = parseInt(timeString.slice(-6, -4));\n const mins = parseInt(timeString.slice(-9, -7));\n const hours = timeString.length > 9 ? parseInt(timeString.substring(0, timeString.indexOf(':'))) : 0;\n if (!isFiniteNumber(ts) || !isFiniteNumber(secs) || !isFiniteNumber(mins) || !isFiniteNumber(hours)) {\n throw Error(`Malformed X-TIMESTAMP-MAP: Local:${timeString}`);\n }\n ts += 1000 * secs;\n ts += 60 * 1000 * mins;\n ts += 60 * 60 * 1000 * hours;\n return ts;\n};\n\n// Create a unique hash id for a cue based on start/end times and text.\n// This helps timeline-controller to avoid showing repeated captions.\nfunction generateCueId(startTime, endTime, text) {\n return hash(startTime.toString()) + hash(endTime.toString()) + hash(text);\n}\nconst calculateOffset = function calculateOffset(vttCCs, cc, presentationTime) {\n let currCC = vttCCs[cc];\n let prevCC = vttCCs[currCC.prevCC];\n\n // This is the first discontinuity or cues have been processed since the last discontinuity\n // Offset = current discontinuity time\n if (!prevCC || !prevCC.new && currCC.new) {\n vttCCs.ccOffset = vttCCs.presentationOffset = currCC.start;\n currCC.new = false;\n return;\n }\n\n // There have been discontinuities since cues were last parsed.\n // Offset = time elapsed\n while ((_prevCC = prevCC) != null && _prevCC.new) {\n var _prevCC;\n vttCCs.ccOffset += currCC.start - prevCC.start;\n currCC.new = false;\n currCC = prevCC;\n prevCC = vttCCs[currCC.prevCC];\n }\n vttCCs.presentationOffset = presentationTime;\n};\nfunction parseWebVTT(vttByteArray, initPTS, vttCCs, cc, timeOffset, callBack, errorCallBack) {\n const parser = new VTTParser();\n // Convert byteArray into string, replacing any somewhat exotic linefeeds with \"\\n\", then split on that character.\n // Uint8Array.prototype.reduce is not implemented in IE11\n const vttLines = utf8ArrayToStr(new Uint8Array(vttByteArray)).trim().replace(LINEBREAKS, '\\n').split('\\n');\n const cues = [];\n const init90kHz = initPTS ? toMpegTsClockFromTimescale(initPTS.baseTime, initPTS.timescale) : 0;\n let cueTime = '00:00.000';\n let timestampMapMPEGTS = 0;\n let timestampMapLOCAL = 0;\n let parsingError;\n let inHeader = true;\n parser.oncue = function (cue) {\n // Adjust cue timing; clamp cues to start no earlier than - and drop cues that don't end after - 0 on timeline.\n const currCC = vttCCs[cc];\n let cueOffset = vttCCs.ccOffset;\n\n // Calculate subtitle PTS offset\n const webVttMpegTsMapOffset = (timestampMapMPEGTS - init90kHz) / 90000;\n\n // Update offsets for new discontinuities\n if (currCC != null && currCC.new) {\n if (timestampMapLOCAL !== undefined) {\n // When local time is provided, offset = discontinuity start time - local time\n cueOffset = vttCCs.ccOffset = currCC.start;\n } else {\n calculateOffset(vttCCs, cc, webVttMpegTsMapOffset);\n }\n }\n if (webVttMpegTsMapOffset) {\n if (!initPTS) {\n parsingError = new Error('Missing initPTS for VTT MPEGTS');\n return;\n }\n // If we have MPEGTS, offset = presentation time + discontinuity offset\n cueOffset = webVttMpegTsMapOffset - vttCCs.presentationOffset;\n }\n const duration = cue.endTime - cue.startTime;\n const startTime = normalizePts((cue.startTime + cueOffset - timestampMapLOCAL) * 90000, timeOffset * 90000) / 90000;\n cue.startTime = Math.max(startTime, 0);\n cue.endTime = Math.max(startTime + duration, 0);\n\n //trim trailing webvtt block whitespaces\n const text = cue.text.trim();\n\n // Fix encoding of special characters\n cue.text = decodeURIComponent(encodeURIComponent(text));\n\n // If the cue was not assigned an id from the VTT file (line above the content), create one.\n if (!cue.id) {\n cue.id = generateCueId(cue.startTime, cue.endTime, text);\n }\n if (cue.endTime > 0) {\n cues.push(cue);\n }\n };\n parser.onparsingerror = function (error) {\n parsingError = error;\n };\n parser.onflush = function () {\n if (parsingError) {\n errorCallBack(parsingError);\n return;\n }\n callBack(cues);\n };\n\n // Go through contents line by line.\n vttLines.forEach(line => {\n if (inHeader) {\n // Look for X-TIMESTAMP-MAP in header.\n if (startsWith(line, 'X-TIMESTAMP-MAP=')) {\n // Once found, no more are allowed anyway, so stop searching.\n inHeader = false;\n // Extract LOCAL and MPEGTS.\n line.slice(16).split(',').forEach(timestamp => {\n if (startsWith(timestamp, 'LOCAL:')) {\n cueTime = timestamp.slice(6);\n } else if (startsWith(timestamp, 'MPEGTS:')) {\n timestampMapMPEGTS = parseInt(timestamp.slice(7));\n }\n });\n try {\n // Convert cue time to seconds\n timestampMapLOCAL = cueString2millis(cueTime) / 1000;\n } catch (error) {\n parsingError = error;\n }\n // Return without parsing X-TIMESTAMP-MAP line.\n return;\n } else if (line === '') {\n inHeader = false;\n }\n }\n // Parse line by default.\n parser.parse(line + '\\n');\n });\n parser.flush();\n}\n\nconst IMSC1_CODEC = 'stpp.ttml.im1t';\n\n// Time format: h:m:s:frames(.subframes)\nconst HMSF_REGEX = /^(\\d{2,}):(\\d{2}):(\\d{2}):(\\d{2})\\.?(\\d+)?$/;\n\n// Time format: hours, minutes, seconds, milliseconds, frames, ticks\nconst TIME_UNIT_REGEX = /^(\\d*(?:\\.\\d*)?)(h|m|s|ms|f|t)$/;\nconst textAlignToLineAlign = {\n left: 'start',\n center: 'center',\n right: 'end',\n start: 'start',\n end: 'end'\n};\nfunction parseIMSC1(payload, initPTS, callBack, errorCallBack) {\n const results = findBox(new Uint8Array(payload), ['mdat']);\n if (results.length === 0) {\n errorCallBack(new Error('Could not parse IMSC1 mdat'));\n return;\n }\n const ttmlList = results.map(mdat => utf8ArrayToStr(mdat));\n const syncTime = toTimescaleFromScale(initPTS.baseTime, 1, initPTS.timescale);\n try {\n ttmlList.forEach(ttml => callBack(parseTTML(ttml, syncTime)));\n } catch (error) {\n errorCallBack(error);\n }\n}\nfunction parseTTML(ttml, syncTime) {\n const parser = new DOMParser();\n const xmlDoc = parser.parseFromString(ttml, 'text/xml');\n const tt = xmlDoc.getElementsByTagName('tt')[0];\n if (!tt) {\n throw new Error('Invalid ttml');\n }\n const defaultRateInfo = {\n frameRate: 30,\n subFrameRate: 1,\n frameRateMultiplier: 0,\n tickRate: 0\n };\n const rateInfo = Object.keys(defaultRateInfo).reduce((result, key) => {\n result[key] = tt.getAttribute(`ttp:${key}`) || defaultRateInfo[key];\n return result;\n }, {});\n const trim = tt.getAttribute('xml:space') !== 'preserve';\n const styleElements = collectionToDictionary(getElementCollection(tt, 'styling', 'style'));\n const regionElements = collectionToDictionary(getElementCollection(tt, 'layout', 'region'));\n const cueElements = getElementCollection(tt, 'body', '[begin]');\n return [].map.call(cueElements, cueElement => {\n const cueText = getTextContent(cueElement, trim);\n if (!cueText || !cueElement.hasAttribute('begin')) {\n return null;\n }\n const startTime = parseTtmlTime(cueElement.getAttribute('begin'), rateInfo);\n const duration = parseTtmlTime(cueElement.getAttribute('dur'), rateInfo);\n let endTime = parseTtmlTime(cueElement.getAttribute('end'), rateInfo);\n if (startTime === null) {\n throw timestampParsingError(cueElement);\n }\n if (endTime === null) {\n if (duration === null) {\n throw timestampParsingError(cueElement);\n }\n endTime = startTime + duration;\n }\n const cue = new VTTCue(startTime - syncTime, endTime - syncTime, cueText);\n cue.id = generateCueId(cue.startTime, cue.endTime, cue.text);\n const region = regionElements[cueElement.getAttribute('region')];\n const style = styleElements[cueElement.getAttribute('style')];\n\n // Apply styles to cue\n const styles = getTtmlStyles(region, style, styleElements);\n const {\n textAlign\n } = styles;\n if (textAlign) {\n // cue.positionAlign not settable in FF~2016\n const lineAlign = textAlignToLineAlign[textAlign];\n if (lineAlign) {\n cue.lineAlign = lineAlign;\n }\n cue.align = textAlign;\n }\n _extends(cue, styles);\n return cue;\n }).filter(cue => cue !== null);\n}\nfunction getElementCollection(fromElement, parentName, childName) {\n const parent = fromElement.getElementsByTagName(parentName)[0];\n if (parent) {\n return [].slice.call(parent.querySelectorAll(childName));\n }\n return [];\n}\nfunction collectionToDictionary(elementsWithId) {\n return elementsWithId.reduce((dict, element) => {\n const id = element.getAttribute('xml:id');\n if (id) {\n dict[id] = element;\n }\n return dict;\n }, {});\n}\nfunction getTextContent(element, trim) {\n return [].slice.call(element.childNodes).reduce((str, node, i) => {\n var _node$childNodes;\n if (node.nodeName === 'br' && i) {\n return str + '\\n';\n }\n if ((_node$childNodes = node.childNodes) != null && _node$childNodes.length) {\n return getTextContent(node, trim);\n } else if (trim) {\n return str + node.textContent.trim().replace(/\\s+/g, ' ');\n }\n return str + node.textContent;\n }, '');\n}\nfunction getTtmlStyles(region, style, styleElements) {\n const ttsNs = 'http://www.w3.org/ns/ttml#styling';\n let regionStyle = null;\n const styleAttributes = ['displayAlign', 'textAlign', 'color', 'backgroundColor', 'fontSize', 'fontFamily'\n // 'fontWeight',\n // 'lineHeight',\n // 'wrapOption',\n // 'fontStyle',\n // 'direction',\n // 'writingMode'\n ];\n const regionStyleName = region != null && region.hasAttribute('style') ? region.getAttribute('style') : null;\n if (regionStyleName && styleElements.hasOwnProperty(regionStyleName)) {\n regionStyle = styleElements[regionStyleName];\n }\n return styleAttributes.reduce((styles, name) => {\n const value = getAttributeNS(style, ttsNs, name) || getAttributeNS(region, ttsNs, name) || getAttributeNS(regionStyle, ttsNs, name);\n if (value) {\n styles[name] = value;\n }\n return styles;\n }, {});\n}\nfunction getAttributeNS(element, ns, name) {\n if (!element) {\n return null;\n }\n return element.hasAttributeNS(ns, name) ? element.getAttributeNS(ns, name) : null;\n}\nfunction timestampParsingError(node) {\n return new Error(`Could not parse ttml timestamp ${node}`);\n}\nfunction parseTtmlTime(timeAttributeValue, rateInfo) {\n if (!timeAttributeValue) {\n return null;\n }\n let seconds = parseTimeStamp(timeAttributeValue);\n if (seconds === null) {\n if (HMSF_REGEX.test(timeAttributeValue)) {\n seconds = parseHoursMinutesSecondsFrames(timeAttributeValue, rateInfo);\n } else if (TIME_UNIT_REGEX.test(timeAttributeValue)) {\n seconds = parseTimeUnits(timeAttributeValue, rateInfo);\n }\n }\n return seconds;\n}\nfunction parseHoursMinutesSecondsFrames(timeAttributeValue, rateInfo) {\n const m = HMSF_REGEX.exec(timeAttributeValue);\n const frames = (m[4] | 0) + (m[5] | 0) / rateInfo.subFrameRate;\n return (m[1] | 0) * 3600 + (m[2] | 0) * 60 + (m[3] | 0) + frames / rateInfo.frameRate;\n}\nfunction parseTimeUnits(timeAttributeValue, rateInfo) {\n const m = TIME_UNIT_REGEX.exec(timeAttributeValue);\n const value = Number(m[1]);\n const unit = m[2];\n switch (unit) {\n case 'h':\n return value * 3600;\n case 'm':\n return value * 60;\n case 'ms':\n return value * 1000;\n case 'f':\n return value / rateInfo.frameRate;\n case 't':\n return value / rateInfo.tickRate;\n }\n return value;\n}\n\nclass OutputFilter {\n constructor(timelineController, trackName) {\n this.timelineController = void 0;\n this.cueRanges = [];\n this.trackName = void 0;\n this.startTime = null;\n this.endTime = null;\n this.screen = null;\n this.timelineController = timelineController;\n this.trackName = trackName;\n }\n dispatchCue() {\n if (this.startTime === null) {\n return;\n }\n this.timelineController.addCues(this.trackName, this.startTime, this.endTime, this.screen, this.cueRanges);\n this.startTime = null;\n }\n newCue(startTime, endTime, screen) {\n if (this.startTime === null || this.startTime > startTime) {\n this.startTime = startTime;\n }\n this.endTime = endTime;\n this.screen = screen;\n this.timelineController.createCaptionsTrack(this.trackName);\n }\n reset() {\n this.cueRanges = [];\n this.startTime = null;\n }\n}\n\nclass TimelineController {\n constructor(hls) {\n this.hls = void 0;\n this.media = null;\n this.config = void 0;\n this.enabled = true;\n this.Cues = void 0;\n this.textTracks = [];\n this.tracks = [];\n this.initPTS = [];\n this.unparsedVttFrags = [];\n this.captionsTracks = {};\n this.nonNativeCaptionsTracks = {};\n this.cea608Parser1 = void 0;\n this.cea608Parser2 = void 0;\n this.lastCc = -1;\n // Last video (CEA-608) fragment CC\n this.lastSn = -1;\n // Last video (CEA-608) fragment MSN\n this.lastPartIndex = -1;\n // Last video (CEA-608) fragment Part Index\n this.prevCC = -1;\n // Last subtitle fragment CC\n this.vttCCs = newVTTCCs();\n this.captionsProperties = void 0;\n this.hls = hls;\n this.config = hls.config;\n this.Cues = hls.config.cueHandler;\n this.captionsProperties = {\n textTrack1: {\n label: this.config.captionsTextTrack1Label,\n languageCode: this.config.captionsTextTrack1LanguageCode\n },\n textTrack2: {\n label: this.config.captionsTextTrack2Label,\n languageCode: this.config.captionsTextTrack2LanguageCode\n },\n textTrack3: {\n label: this.config.captionsTextTrack3Label,\n languageCode: this.config.captionsTextTrack3LanguageCode\n },\n textTrack4: {\n label: this.config.captionsTextTrack4Label,\n languageCode: this.config.captionsTextTrack4LanguageCode\n }\n };\n hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n hls.on(Events.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this);\n hls.on(Events.FRAG_LOADING, this.onFragLoading, this);\n hls.on(Events.FRAG_LOADED, this.onFragLoaded, this);\n hls.on(Events.FRAG_PARSING_USERDATA, this.onFragParsingUserdata, this);\n hls.on(Events.FRAG_DECRYPTED, this.onFragDecrypted, this);\n hls.on(Events.INIT_PTS_FOUND, this.onInitPtsFound, this);\n hls.on(Events.SUBTITLE_TRACKS_CLEARED, this.onSubtitleTracksCleared, this);\n hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n }\n destroy() {\n const {\n hls\n } = this;\n hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n hls.off(Events.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this);\n hls.off(Events.FRAG_LOADING, this.onFragLoading, this);\n hls.off(Events.FRAG_LOADED, this.onFragLoaded, this);\n hls.off(Events.FRAG_PARSING_USERDATA, this.onFragParsingUserdata, this);\n hls.off(Events.FRAG_DECRYPTED, this.onFragDecrypted, this);\n hls.off(Events.INIT_PTS_FOUND, this.onInitPtsFound, this);\n hls.off(Events.SUBTITLE_TRACKS_CLEARED, this.onSubtitleTracksCleared, this);\n hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n // @ts-ignore\n this.hls = this.config = this.media = null;\n this.cea608Parser1 = this.cea608Parser2 = undefined;\n }\n initCea608Parsers() {\n const channel1 = new OutputFilter(this, 'textTrack1');\n const channel2 = new OutputFilter(this, 'textTrack2');\n const channel3 = new OutputFilter(this, 'textTrack3');\n const channel4 = new OutputFilter(this, 'textTrack4');\n this.cea608Parser1 = new Cea608Parser(1, channel1, channel2);\n this.cea608Parser2 = new Cea608Parser(3, channel3, channel4);\n }\n addCues(trackName, startTime, endTime, screen, cueRanges) {\n // skip cues which overlap more than 50% with previously parsed time ranges\n let merged = false;\n for (let i = cueRanges.length; i--;) {\n const cueRange = cueRanges[i];\n const overlap = intersection(cueRange[0], cueRange[1], startTime, endTime);\n if (overlap >= 0) {\n cueRange[0] = Math.min(cueRange[0], startTime);\n cueRange[1] = Math.max(cueRange[1], endTime);\n merged = true;\n if (overlap / (endTime - startTime) > 0.5) {\n return;\n }\n }\n }\n if (!merged) {\n cueRanges.push([startTime, endTime]);\n }\n if (this.config.renderTextTracksNatively) {\n const track = this.captionsTracks[trackName];\n this.Cues.newCue(track, startTime, endTime, screen);\n } else {\n const cues = this.Cues.newCue(null, startTime, endTime, screen);\n this.hls.trigger(Events.CUES_PARSED, {\n type: 'captions',\n cues,\n track: trackName\n });\n }\n }\n\n // Triggered when an initial PTS is found; used for synchronisation of WebVTT.\n onInitPtsFound(event, {\n frag,\n id,\n initPTS,\n timescale,\n trackId\n }) {\n const {\n unparsedVttFrags\n } = this;\n if (id === PlaylistLevelType.MAIN) {\n this.initPTS[frag.cc] = {\n baseTime: initPTS,\n timescale,\n trackId\n };\n }\n\n // Due to asynchronous processing, initial PTS may arrive later than the first VTT fragments are loaded.\n // Parse any unparsed fragments upon receiving the initial PTS.\n if (unparsedVttFrags.length) {\n this.unparsedVttFrags = [];\n unparsedVttFrags.forEach(data => {\n if (this.initPTS[data.frag.cc]) {\n this.onFragLoaded(Events.FRAG_LOADED, data);\n } else {\n this.hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n success: false,\n frag: data.frag,\n error: new Error('Subtitle discontinuity domain does not match main')\n });\n }\n });\n }\n }\n getExistingTrack(label, language) {\n const {\n media\n } = this;\n if (media) {\n for (let i = 0; i < media.textTracks.length; i++) {\n const textTrack = media.textTracks[i];\n if (canReuseVttTextTrack(textTrack, {\n name: label,\n lang: language,\n characteristics: 'transcribes-spoken-dialog,describes-music-and-sound'})) {\n return textTrack;\n }\n }\n }\n return null;\n }\n createCaptionsTrack(trackName) {\n if (this.config.renderTextTracksNatively) {\n this.createNativeTrack(trackName);\n } else {\n this.createNonNativeTrack(trackName);\n }\n }\n createNativeTrack(trackName) {\n if (this.captionsTracks[trackName]) {\n return;\n }\n const {\n captionsProperties,\n captionsTracks,\n media\n } = this;\n const {\n label,\n languageCode\n } = captionsProperties[trackName];\n // Enable reuse of existing text track.\n const existingTrack = this.getExistingTrack(label, languageCode);\n if (!existingTrack) {\n const textTrack = this.createTextTrack('captions', label, languageCode);\n if (textTrack) {\n // Set a special property on the track so we know it's managed by Hls.js\n textTrack[trackName] = true;\n captionsTracks[trackName] = textTrack;\n }\n } else {\n captionsTracks[trackName] = existingTrack;\n clearCurrentCues(captionsTracks[trackName]);\n sendAddTrackEvent(captionsTracks[trackName], media);\n }\n }\n createNonNativeTrack(trackName) {\n if (this.nonNativeCaptionsTracks[trackName]) {\n return;\n }\n // Create a list of a single track for the provider to consume\n const trackProperties = this.captionsProperties[trackName];\n if (!trackProperties) {\n return;\n }\n const label = trackProperties.label;\n const track = {\n _id: trackName,\n label,\n kind: 'captions',\n default: trackProperties.media ? !!trackProperties.media.default : false,\n closedCaptions: trackProperties.media\n };\n this.nonNativeCaptionsTracks[trackName] = track;\n this.hls.trigger(Events.NON_NATIVE_TEXT_TRACKS_FOUND, {\n tracks: [track]\n });\n }\n createTextTrack(kind, label, lang) {\n const media = this.media;\n if (!media) {\n return;\n }\n return media.addTextTrack(kind, label, lang);\n }\n onMediaAttaching(event, data) {\n this.media = data.media;\n if (!data.mediaSource) {\n this._cleanTracks();\n }\n }\n onMediaDetaching(event, data) {\n const transferringMedia = !!data.transferMedia;\n this.media = null;\n if (transferringMedia) {\n return;\n }\n const {\n captionsTracks\n } = this;\n Object.keys(captionsTracks).forEach(trackName => {\n clearCurrentCues(captionsTracks[trackName]);\n delete captionsTracks[trackName];\n });\n this.nonNativeCaptionsTracks = {};\n }\n onManifestLoading() {\n // Detect discontinuity in video fragment (CEA-608) parsing\n this.lastCc = -1;\n this.lastSn = -1;\n this.lastPartIndex = -1;\n // Detect discontinuity in subtitle manifests\n this.prevCC = -1;\n this.vttCCs = newVTTCCs();\n // Reset tracks\n this._cleanTracks();\n this.tracks = [];\n this.captionsTracks = {};\n this.nonNativeCaptionsTracks = {};\n this.textTracks = [];\n this.unparsedVttFrags = [];\n this.initPTS = [];\n if (this.cea608Parser1 && this.cea608Parser2) {\n this.cea608Parser1.reset();\n this.cea608Parser2.reset();\n }\n }\n _cleanTracks() {\n // clear outdated subtitles\n const {\n media\n } = this;\n if (!media) {\n return;\n }\n const textTracks = media.textTracks;\n if (textTracks) {\n for (let i = 0; i < textTracks.length; i++) {\n clearCurrentCues(textTracks[i]);\n }\n }\n }\n onSubtitleTracksUpdated(event, data) {\n const tracks = data.subtitleTracks || [];\n const hasIMSC1 = tracks.some(track => track.textCodec === IMSC1_CODEC);\n if (this.config.enableWebVTT || hasIMSC1 && this.config.enableIMSC1) {\n const listIsIdentical = subtitleOptionsIdentical(this.tracks, tracks);\n if (listIsIdentical) {\n this.tracks = tracks;\n return;\n }\n this.textTracks = [];\n this.tracks = tracks;\n if (this.config.renderTextTracksNatively) {\n const media = this.media;\n const inUseTracks = media ? filterSubtitleTracks(media.textTracks) : null;\n this.tracks.forEach((track, index) => {\n // Reuse tracks with the same label and lang, but do not reuse 608/708 tracks\n let textTrack;\n if (inUseTracks) {\n let inUseTrack = null;\n for (let i = 0; i < inUseTracks.length; i++) {\n if (inUseTracks[i] && canReuseVttTextTrack(inUseTracks[i], track)) {\n inUseTrack = inUseTracks[i];\n inUseTracks[i] = null;\n break;\n }\n }\n if (inUseTrack) {\n textTrack = inUseTrack;\n }\n }\n if (textTrack) {\n clearCurrentCues(textTrack);\n } else {\n const textTrackKind = captionsOrSubtitlesFromCharacteristics(track);\n textTrack = this.createTextTrack(textTrackKind, track.name, track.lang);\n if (textTrack) {\n textTrack.mode = 'disabled';\n }\n }\n if (textTrack) {\n this.textTracks.push(textTrack);\n }\n });\n // Warn when video element has captions or subtitle TextTracks carried over from another source\n if (inUseTracks != null && inUseTracks.length) {\n const unusedTextTracks = inUseTracks.filter(t => t !== null).map(t => t.label);\n if (unusedTextTracks.length) {\n this.hls.logger.warn(`Media element contains unused subtitle tracks: ${unusedTextTracks.join(', ')}. Replace media element for each source to clear TextTracks and captions menu.`);\n }\n }\n } else if (this.tracks.length) {\n // Create a list of tracks for the provider to consume\n const tracksList = this.tracks.map(track => {\n return {\n label: track.name,\n kind: track.type.toLowerCase(),\n default: track.default,\n subtitleTrack: track\n };\n });\n this.hls.trigger(Events.NON_NATIVE_TEXT_TRACKS_FOUND, {\n tracks: tracksList\n });\n }\n }\n }\n onManifestLoaded(event, data) {\n if (this.config.enableCEA708Captions && data.captions) {\n data.captions.forEach(captionsTrack => {\n const instreamIdMatch = /(?:CC|SERVICE)([1-4])/.exec(captionsTrack.instreamId);\n if (!instreamIdMatch) {\n return;\n }\n const trackName = `textTrack${instreamIdMatch[1]}`;\n const trackProperties = this.captionsProperties[trackName];\n if (!trackProperties) {\n return;\n }\n trackProperties.label = captionsTrack.name;\n if (captionsTrack.lang) {\n // optional attribute\n trackProperties.languageCode = captionsTrack.lang;\n }\n trackProperties.media = captionsTrack;\n });\n }\n }\n closedCaptionsForLevel(frag) {\n const level = this.hls.levels[frag.level];\n return level == null ? void 0 : level.attrs['CLOSED-CAPTIONS'];\n }\n onFragLoading(event, data) {\n // if this frag isn't contiguous, clear the parser so cues with bad start/end times aren't added to the textTrack\n if (this.enabled && data.frag.type === PlaylistLevelType.MAIN) {\n var _data$part$index, _data$part;\n const {\n cea608Parser1,\n cea608Parser2,\n lastSn\n } = this;\n const {\n cc,\n sn\n } = data.frag;\n const partIndex = (_data$part$index = (_data$part = data.part) == null ? void 0 : _data$part.index) != null ? _data$part$index : -1;\n if (cea608Parser1 && cea608Parser2) {\n if (sn !== lastSn + 1 || sn === lastSn && partIndex !== this.lastPartIndex + 1 || cc !== this.lastCc) {\n cea608Parser1.reset();\n cea608Parser2.reset();\n }\n }\n this.lastCc = cc;\n this.lastSn = sn;\n this.lastPartIndex = partIndex;\n }\n }\n onFragLoaded(event, data) {\n const {\n frag,\n payload\n } = data;\n if (frag.type === PlaylistLevelType.SUBTITLE) {\n // If fragment is subtitle type, parse as WebVTT.\n if (payload.byteLength) {\n const decryptData = frag.decryptdata;\n // fragment after decryption has a stats object\n const decrypted = 'stats' in data;\n // If the subtitles are not encrypted, parse VTTs now. Otherwise, we need to wait.\n if (decryptData == null || !decryptData.encrypted || decrypted) {\n const trackPlaylistMedia = this.tracks[frag.level];\n const vttCCs = this.vttCCs;\n if (!vttCCs[frag.cc]) {\n vttCCs[frag.cc] = {\n start: frag.start,\n prevCC: this.prevCC,\n new: true\n };\n this.prevCC = frag.cc;\n }\n if (trackPlaylistMedia && trackPlaylistMedia.textCodec === IMSC1_CODEC) {\n this._parseIMSC1(frag, payload);\n } else {\n this._parseVTTs(data);\n }\n }\n } else {\n // In case there is no payload, finish unsuccessfully.\n this.hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n success: false,\n frag,\n error: new Error('Empty subtitle payload')\n });\n }\n }\n }\n _parseIMSC1(frag, payload) {\n const hls = this.hls;\n parseIMSC1(payload, this.initPTS[frag.cc], cues => {\n this._appendCues(cues, frag.level);\n hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n success: true,\n frag: frag\n });\n }, error => {\n hls.logger.log(`Failed to parse IMSC1: ${error}`);\n hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n success: false,\n frag: frag,\n error\n });\n });\n }\n _parseVTTs(data) {\n var _frag$initSegment;\n const {\n frag,\n payload\n } = data;\n // We need an initial synchronisation PTS. Store fragments as long as none has arrived\n const {\n initPTS,\n unparsedVttFrags\n } = this;\n const maxAvCC = initPTS.length - 1;\n if (!initPTS[frag.cc] && maxAvCC === -1) {\n unparsedVttFrags.push(data);\n return;\n }\n const hls = this.hls;\n // Parse the WebVTT file contents.\n const payloadWebVTT = (_frag$initSegment = frag.initSegment) != null && _frag$initSegment.data ? appendUint8Array(frag.initSegment.data, new Uint8Array(payload)).buffer : payload;\n parseWebVTT(payloadWebVTT, this.initPTS[frag.cc], this.vttCCs, frag.cc, frag.start, cues => {\n this._appendCues(cues, frag.level);\n hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n success: true,\n frag: frag\n });\n }, error => {\n const missingInitPTS = error.message === 'Missing initPTS for VTT MPEGTS';\n if (missingInitPTS) {\n unparsedVttFrags.push(data);\n } else {\n this._fallbackToIMSC1(frag, payload);\n }\n // Something went wrong while parsing. Trigger event with success false.\n hls.logger.log(`Failed to parse VTT cue: ${error}`);\n if (missingInitPTS && maxAvCC > frag.cc) {\n return;\n }\n hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n success: false,\n frag: frag,\n error\n });\n });\n }\n _fallbackToIMSC1(frag, payload) {\n // If textCodec is unknown, try parsing as IMSC1. Set textCodec based on the result\n const trackPlaylistMedia = this.tracks[frag.level];\n if (!trackPlaylistMedia.textCodec) {\n parseIMSC1(payload, this.initPTS[frag.cc], () => {\n trackPlaylistMedia.textCodec = IMSC1_CODEC;\n this._parseIMSC1(frag, payload);\n }, () => {\n trackPlaylistMedia.textCodec = 'wvtt';\n });\n }\n }\n _appendCues(cues, fragLevel) {\n const hls = this.hls;\n if (this.config.renderTextTracksNatively) {\n const textTrack = this.textTracks[fragLevel];\n // WebVTTParser.parse is an async method and if the currently selected text track mode is set to \"disabled\"\n // before parsing is done then don't try to access currentTrack.cues.getCueById as cues will be null\n // and trying to access getCueById method of cues will throw an exception\n // Because we check if the mode is disabled, we can force check `cues` below. They can't be null.\n if (!textTrack || textTrack.mode === 'disabled') {\n return;\n }\n cues.forEach(cue => addCueToTrack(textTrack, cue));\n } else {\n const currentTrack = this.tracks[fragLevel];\n if (!currentTrack) {\n return;\n }\n const track = currentTrack.default ? 'default' : 'subtitles' + fragLevel;\n hls.trigger(Events.CUES_PARSED, {\n type: 'subtitles',\n cues,\n track\n });\n }\n }\n onFragDecrypted(event, data) {\n const {\n frag\n } = data;\n if (frag.type === PlaylistLevelType.SUBTITLE) {\n this.onFragLoaded(Events.FRAG_LOADED, data);\n }\n }\n onSubtitleTracksCleared() {\n this.tracks = [];\n this.captionsTracks = {};\n }\n onFragParsingUserdata(event, data) {\n if (!this.enabled || !this.config.enableCEA708Captions) {\n return;\n }\n const {\n frag,\n samples\n } = data;\n if (frag.type === PlaylistLevelType.MAIN && this.closedCaptionsForLevel(frag) === 'NONE') {\n return;\n }\n // If the event contains captions (found in the bytes property), push all bytes into the parser immediately\n // It will create the proper timestamps based on the PTS value\n for (let i = 0; i < samples.length; i++) {\n const ccBytes = samples[i].bytes;\n if (ccBytes) {\n if (!this.cea608Parser1) {\n this.initCea608Parsers();\n }\n const ccdatas = this.extractCea608Data(ccBytes);\n this.cea608Parser1.addData(samples[i].pts, ccdatas[0]);\n this.cea608Parser2.addData(samples[i].pts, ccdatas[1]);\n }\n }\n }\n onBufferFlushing(event, {\n startOffset,\n endOffset,\n endOffsetSubtitles,\n type\n }) {\n const {\n media\n } = this;\n if (!media || media.currentTime < endOffset) {\n return;\n }\n // Clear 608 caption cues from the captions TextTracks when the video back buffer is flushed\n // Forward cues are never removed because we can loose streamed 608 content from recent fragments\n if (!type || type === 'video') {\n const {\n captionsTracks\n } = this;\n Object.keys(captionsTracks).forEach(trackName => removeCuesInRange(captionsTracks[trackName], startOffset, endOffset));\n }\n if (this.config.renderTextTracksNatively) {\n // Clear VTT/IMSC1 subtitle cues from the subtitle TextTracks when the back buffer is flushed\n if (startOffset === 0 && endOffsetSubtitles !== undefined) {\n const {\n textTracks\n } = this;\n Object.keys(textTracks).forEach(trackName => removeCuesInRange(textTracks[trackName], startOffset, endOffsetSubtitles));\n }\n }\n }\n extractCea608Data(byteArray) {\n const actualCCBytes = [[], []];\n const count = byteArray[0] & 0x1f;\n let position = 2;\n for (let j = 0; j < count; j++) {\n const tmpByte = byteArray[position++];\n const ccbyte1 = 0x7f & byteArray[position++];\n const ccbyte2 = 0x7f & byteArray[position++];\n if (ccbyte1 === 0 && ccbyte2 === 0) {\n continue;\n }\n const ccValid = (0x04 & tmpByte) !== 0; // Support all four channels\n if (ccValid) {\n const ccType = 0x03 & tmpByte;\n if (0x00 /* CEA608 field1*/ === ccType || 0x01 /* CEA608 field2*/ === ccType) {\n // Exclude CEA708 CC data.\n actualCCBytes[ccType].push(ccbyte1);\n actualCCBytes[ccType].push(ccbyte2);\n }\n }\n }\n return actualCCBytes;\n }\n}\nfunction captionsOrSubtitlesFromCharacteristics(track) {\n if (track.characteristics) {\n if (/transcribes-spoken-dialog/gi.test(track.characteristics) && /describes-music-and-sound/gi.test(track.characteristics)) {\n return 'captions';\n }\n }\n return 'subtitles';\n}\nfunction canReuseVttTextTrack(inUseTrack, manifestTrack) {\n return !!inUseTrack && inUseTrack.kind === captionsOrSubtitlesFromCharacteristics(manifestTrack) && subtitleTrackMatchesTextTrack(manifestTrack, inUseTrack);\n}\nfunction intersection(x1, x2, y1, y2) {\n return Math.min(x2, y2) - Math.max(x1, y1);\n}\nfunction newVTTCCs() {\n return {\n ccOffset: 0,\n presentationOffset: 0,\n 0: {\n start: 0,\n prevCC: -1,\n new: true\n }\n };\n}\n\nconst WHITESPACE_CHAR = /\\s/;\nconst Cues = {\n newCue(track, startTime, endTime, captionScreen) {\n const result = [];\n let row;\n // the type data states this is VTTCue, but it can potentially be a TextTrackCue on old browsers\n let cue;\n let indenting;\n let indent;\n let text;\n const Cue = self.VTTCue || self.TextTrackCue;\n for (let r = 0; r < captionScreen.rows.length; r++) {\n row = captionScreen.rows[r];\n indenting = true;\n indent = 0;\n text = '';\n if (!row.isEmpty()) {\n var _track$cues;\n for (let c = 0; c < row.chars.length; c++) {\n if (WHITESPACE_CHAR.test(row.chars[c].uchar) && indenting) {\n indent++;\n } else {\n text += row.chars[c].uchar;\n indenting = false;\n }\n }\n // To be used for cleaning-up orphaned roll-up captions\n row.cueStartTime = startTime;\n\n // Give a slight bump to the endTime if it's equal to startTime to avoid a SyntaxError in IE\n if (startTime === endTime) {\n endTime += 0.0001;\n }\n if (indent >= 16) {\n indent--;\n } else {\n indent++;\n }\n const cueText = fixLineBreaks(text.trim());\n const id = generateCueId(startTime, endTime, cueText);\n\n // If this cue already exists in the track do not push it\n if (!(track != null && (_track$cues = track.cues) != null && _track$cues.getCueById(id))) {\n cue = new Cue(startTime, endTime, cueText);\n cue.id = id;\n cue.line = r + 1;\n cue.align = 'left';\n // Clamp the position between 10 and 80 percent (CEA-608 PAC indent code)\n // https://dvcs.w3.org/hg/text-tracks/raw-file/default/608toVTT/608toVTT.html#positioning-in-cea-608\n // Firefox throws an exception and captions break with out of bounds 0-100 values\n cue.position = 10 + Math.min(80, Math.floor(indent * 8 / 32) * 10);\n result.push(cue);\n }\n }\n }\n if (track && result.length) {\n // Sort bottom cues in reverse order so that they render in line order when overlapping in Chrome\n result.sort((cueA, cueB) => {\n if (cueA.line === 'auto' || cueB.line === 'auto') {\n return 0;\n }\n if (cueA.line > 8 && cueB.line > 8) {\n return cueB.line - cueA.line;\n }\n return cueA.line - cueB.line;\n });\n result.forEach(cue => addCueToTrack(track, cue));\n }\n return result;\n }\n};\n\nfunction fetchSupported() {\n if (\n // @ts-ignore\n self.fetch && self.AbortController && self.ReadableStream && self.Request) {\n try {\n new self.ReadableStream({}); // eslint-disable-line no-new\n return true;\n } catch (e) {\n /* noop */\n }\n }\n return false;\n}\nconst BYTERANGE = /(\\d+)-(\\d+)\\/(\\d+)/;\nclass FetchLoader {\n constructor(config) {\n this.fetchSetup = void 0;\n this.requestTimeout = void 0;\n this.request = null;\n this.response = null;\n this.controller = void 0;\n this.context = null;\n this.config = null;\n this.callbacks = null;\n this.stats = void 0;\n this.loader = null;\n this.fetchSetup = config.fetchSetup || getRequest;\n this.controller = new self.AbortController();\n this.stats = new LoadStats();\n }\n destroy() {\n this.loader = this.callbacks = this.context = this.config = this.request = null;\n this.abortInternal();\n this.response = null;\n // @ts-ignore\n this.fetchSetup = this.controller = this.stats = null;\n }\n abortInternal() {\n if (this.controller && !this.stats.loading.end) {\n this.stats.aborted = true;\n this.controller.abort();\n }\n }\n abort() {\n var _this$callbacks;\n this.abortInternal();\n if ((_this$callbacks = this.callbacks) != null && _this$callbacks.onAbort) {\n this.callbacks.onAbort(this.stats, this.context, this.response);\n }\n }\n load(context, config, callbacks) {\n const stats = this.stats;\n if (stats.loading.start) {\n throw new Error('Loader can only be used once.');\n }\n stats.loading.start = self.performance.now();\n const initParams = getRequestParameters(context, this.controller.signal);\n const isArrayBuffer = context.responseType === 'arraybuffer';\n const LENGTH = isArrayBuffer ? 'byteLength' : 'length';\n const {\n maxTimeToFirstByteMs,\n maxLoadTimeMs\n } = config.loadPolicy;\n this.context = context;\n this.config = config;\n this.callbacks = callbacks;\n this.request = this.fetchSetup(context, initParams);\n self.clearTimeout(this.requestTimeout);\n config.timeout = maxTimeToFirstByteMs && isFiniteNumber(maxTimeToFirstByteMs) ? maxTimeToFirstByteMs : maxLoadTimeMs;\n this.requestTimeout = self.setTimeout(() => {\n if (this.callbacks) {\n this.abortInternal();\n this.callbacks.onTimeout(stats, context, this.response);\n }\n }, config.timeout);\n const fetchPromise = isPromise(this.request) ? this.request.then(self.fetch) : self.fetch(this.request);\n fetchPromise.then(response => {\n var _this$callbacks2;\n this.response = this.loader = response;\n const first = Math.max(self.performance.now(), stats.loading.start);\n self.clearTimeout(this.requestTimeout);\n config.timeout = maxLoadTimeMs;\n this.requestTimeout = self.setTimeout(() => {\n if (this.callbacks) {\n this.abortInternal();\n this.callbacks.onTimeout(stats, context, this.response);\n }\n }, maxLoadTimeMs - (first - stats.loading.start));\n if (!response.ok) {\n const {\n status,\n statusText\n } = response;\n throw new FetchError(statusText || 'fetch, bad network response', status, response);\n }\n stats.loading.first = first;\n stats.total = getContentLength(response.headers) || stats.total;\n const onProgress = (_this$callbacks2 = this.callbacks) == null ? void 0 : _this$callbacks2.onProgress;\n if (onProgress && isFiniteNumber(config.highWaterMark)) {\n return this.loadProgressively(response, stats, context, config.highWaterMark, onProgress);\n }\n if (isArrayBuffer) {\n return response.arrayBuffer();\n }\n if (context.responseType === 'json') {\n return response.json();\n }\n return response.text();\n }).then(responseData => {\n var _this$callbacks3, _this$callbacks4;\n const response = this.response;\n if (!response) {\n throw new Error('loader destroyed');\n }\n self.clearTimeout(this.requestTimeout);\n stats.loading.end = Math.max(self.performance.now(), stats.loading.first);\n const total = responseData[LENGTH];\n if (total) {\n stats.loaded = stats.total = total;\n }\n const loaderResponse = {\n url: response.url,\n data: responseData,\n code: response.status\n };\n const onProgress = (_this$callbacks3 = this.callbacks) == null ? void 0 : _this$callbacks3.onProgress;\n if (onProgress && !isFiniteNumber(config.highWaterMark)) {\n onProgress(stats, context, responseData, response);\n }\n (_this$callbacks4 = this.callbacks) == null || _this$callbacks4.onSuccess(loaderResponse, stats, context, response);\n }).catch(error => {\n var _this$callbacks5;\n self.clearTimeout(this.requestTimeout);\n if (stats.aborted) {\n return;\n }\n // CORS errors result in an undefined code. Set it to 0 here to align with XHR's behavior\n // when destroying, 'error' itself can be undefined\n const code = !error ? 0 : error.code || 0;\n const text = !error ? null : error.message;\n (_this$callbacks5 = this.callbacks) == null || _this$callbacks5.onError({\n code,\n text\n }, context, error ? error.details : null, stats);\n });\n }\n getCacheAge() {\n let result = null;\n if (this.response) {\n const ageHeader = this.response.headers.get('age');\n result = ageHeader ? parseFloat(ageHeader) : null;\n }\n return result;\n }\n getResponseHeader(name) {\n return this.response ? this.response.headers.get(name) : null;\n }\n loadProgressively(response, stats, context, highWaterMark = 0, onProgress) {\n const chunkCache = new ChunkCache();\n const reader = response.body.getReader();\n const pump = () => {\n return reader.read().then(data => {\n if (data.done) {\n if (chunkCache.dataLength) {\n onProgress(stats, context, chunkCache.flush().buffer, response);\n }\n return Promise.resolve(new ArrayBuffer(0));\n }\n const chunk = data.value;\n const len = chunk.length;\n stats.loaded += len;\n if (len < highWaterMark || chunkCache.dataLength) {\n // The current chunk is too small to to be emitted or the cache already has data\n // Push it to the cache\n chunkCache.push(chunk);\n if (chunkCache.dataLength >= highWaterMark) {\n // flush in order to join the typed arrays\n onProgress(stats, context, chunkCache.flush().buffer, response);\n }\n } else {\n // If there's nothing cached already, and the chache is large enough\n // just emit the progress event\n onProgress(stats, context, chunk.buffer, response);\n }\n return pump();\n }).catch(() => {\n /* aborted */\n return Promise.reject();\n });\n };\n return pump();\n }\n}\nfunction getRequestParameters(context, signal) {\n const initParams = {\n method: 'GET',\n mode: 'cors',\n credentials: 'same-origin',\n signal,\n headers: new self.Headers(_extends({}, context.headers))\n };\n if (context.rangeEnd) {\n initParams.headers.set('Range', 'bytes=' + context.rangeStart + '-' + String(context.rangeEnd - 1));\n }\n return initParams;\n}\nfunction getByteRangeLength(byteRangeHeader) {\n const result = BYTERANGE.exec(byteRangeHeader);\n if (result) {\n return parseInt(result[2]) - parseInt(result[1]) + 1;\n }\n}\nfunction getContentLength(headers) {\n const contentRange = headers.get('Content-Range');\n if (contentRange) {\n const byteRangeLength = getByteRangeLength(contentRange);\n if (isFiniteNumber(byteRangeLength)) {\n return byteRangeLength;\n }\n }\n const contentLength = headers.get('Content-Length');\n if (contentLength) {\n return parseInt(contentLength);\n }\n}\nfunction getRequest(context, initParams) {\n return new self.Request(context.url, initParams);\n}\nclass FetchError extends Error {\n constructor(message, code, details) {\n super(message);\n this.code = void 0;\n this.details = void 0;\n this.code = code;\n this.details = details;\n }\n}\n\nconst AGE_HEADER_LINE_REGEX = /^age:\\s*[\\d.]+\\s*$/im;\nclass XhrLoader {\n constructor(config) {\n this.xhrSetup = void 0;\n this.requestTimeout = void 0;\n this.retryTimeout = void 0;\n this.retryDelay = void 0;\n this.config = null;\n this.callbacks = null;\n this.context = null;\n this.loader = null;\n this.stats = void 0;\n this.xhrSetup = config ? config.xhrSetup || null : null;\n this.stats = new LoadStats();\n this.retryDelay = 0;\n }\n destroy() {\n this.callbacks = null;\n this.abortInternal();\n this.loader = null;\n this.config = null;\n this.context = null;\n this.xhrSetup = null;\n }\n abortInternal() {\n const loader = this.loader;\n self.clearTimeout(this.requestTimeout);\n self.clearTimeout(this.retryTimeout);\n if (loader) {\n loader.onreadystatechange = null;\n loader.onprogress = null;\n if (loader.readyState !== 4) {\n this.stats.aborted = true;\n loader.abort();\n }\n }\n }\n abort() {\n var _this$callbacks;\n this.abortInternal();\n if ((_this$callbacks = this.callbacks) != null && _this$callbacks.onAbort) {\n this.callbacks.onAbort(this.stats, this.context, this.loader);\n }\n }\n load(context, config, callbacks) {\n if (this.stats.loading.start) {\n throw new Error('Loader can only be used once.');\n }\n this.stats.loading.start = self.performance.now();\n this.context = context;\n this.config = config;\n this.callbacks = callbacks;\n this.loadInternal();\n }\n loadInternal() {\n const {\n config,\n context\n } = this;\n if (!config || !context) {\n return;\n }\n const xhr = this.loader = new self.XMLHttpRequest();\n const stats = this.stats;\n stats.loading.first = 0;\n stats.loaded = 0;\n stats.aborted = false;\n const xhrSetup = this.xhrSetup;\n if (xhrSetup) {\n Promise.resolve().then(() => {\n if (this.loader !== xhr || this.stats.aborted) return;\n return xhrSetup(xhr, context.url);\n }).catch(error => {\n if (this.loader !== xhr || this.stats.aborted) return;\n xhr.open('GET', context.url, true);\n return xhrSetup(xhr, context.url);\n }).then(() => {\n if (this.loader !== xhr || this.stats.aborted) return;\n this.openAndSendXhr(xhr, context, config);\n }).catch(error => {\n var _this$callbacks2;\n // IE11 throws an exception on xhr.open if attempting to access an HTTP resource over HTTPS\n (_this$callbacks2 = this.callbacks) == null || _this$callbacks2.onError({\n code: xhr.status,\n text: error.message\n }, context, xhr, stats);\n return;\n });\n } else {\n this.openAndSendXhr(xhr, context, config);\n }\n }\n openAndSendXhr(xhr, context, config) {\n if (!xhr.readyState) {\n xhr.open('GET', context.url, true);\n }\n const headers = context.headers;\n const {\n maxTimeToFirstByteMs,\n maxLoadTimeMs\n } = config.loadPolicy;\n if (headers) {\n for (const header in headers) {\n xhr.setRequestHeader(header, headers[header]);\n }\n }\n if (context.rangeEnd) {\n xhr.setRequestHeader('Range', 'bytes=' + context.rangeStart + '-' + (context.rangeEnd - 1));\n }\n xhr.onreadystatechange = this.readystatechange.bind(this);\n xhr.onprogress = this.loadprogress.bind(this);\n xhr.responseType = context.responseType;\n // setup timeout before we perform request\n self.clearTimeout(this.requestTimeout);\n config.timeout = maxTimeToFirstByteMs && isFiniteNumber(maxTimeToFirstByteMs) ? maxTimeToFirstByteMs : maxLoadTimeMs;\n this.requestTimeout = self.setTimeout(this.loadtimeout.bind(this), config.timeout);\n xhr.send();\n }\n readystatechange() {\n const {\n context,\n loader: xhr,\n stats\n } = this;\n if (!context || !xhr) {\n return;\n }\n const readyState = xhr.readyState;\n const config = this.config;\n\n // don't proceed if xhr has been aborted\n if (stats.aborted) {\n return;\n }\n\n // >= HEADERS_RECEIVED\n if (readyState >= 2) {\n if (stats.loading.first === 0) {\n stats.loading.first = Math.max(self.performance.now(), stats.loading.start);\n // readyState >= 2 AND readyState !==4 (readyState = HEADERS_RECEIVED || LOADING) rearm timeout as xhr not finished yet\n if (config.timeout !== config.loadPolicy.maxLoadTimeMs) {\n self.clearTimeout(this.requestTimeout);\n config.timeout = config.loadPolicy.maxLoadTimeMs;\n this.requestTimeout = self.setTimeout(this.loadtimeout.bind(this), config.loadPolicy.maxLoadTimeMs - (stats.loading.first - stats.loading.start));\n }\n }\n if (readyState === 4) {\n self.clearTimeout(this.requestTimeout);\n xhr.onreadystatechange = null;\n xhr.onprogress = null;\n const status = xhr.status;\n // http status between 200 to 299 are all successful\n const useResponseText = xhr.responseType === 'text' ? xhr.responseText : null;\n if (status >= 200 && status < 300) {\n const data = useResponseText != null ? useResponseText : xhr.response;\n if (data != null) {\n var _this$callbacks3, _this$callbacks4;\n stats.loading.end = Math.max(self.performance.now(), stats.loading.first);\n const len = xhr.responseType === 'arraybuffer' ? data.byteLength : data.length;\n stats.loaded = stats.total = len;\n stats.bwEstimate = stats.total * 8000 / (stats.loading.end - stats.loading.first);\n const onProgress = (_this$callbacks3 = this.callbacks) == null ? void 0 : _this$callbacks3.onProgress;\n if (onProgress) {\n onProgress(stats, context, data, xhr);\n }\n const _response = {\n url: xhr.responseURL,\n data: data,\n code: status\n };\n (_this$callbacks4 = this.callbacks) == null || _this$callbacks4.onSuccess(_response, stats, context, xhr);\n return;\n }\n }\n\n // Handle bad status or nullish response\n const retryConfig = config.loadPolicy.errorRetry;\n const retryCount = stats.retry;\n // if max nb of retries reached or if http status between 400 and 499 (such error cannot be recovered, retrying is useless), return error\n const response = {\n url: context.url,\n data: undefined,\n code: status\n };\n if (shouldRetry(retryConfig, retryCount, false, response)) {\n this.retry(retryConfig);\n } else {\n var _this$callbacks5;\n logger.error(`${status} while loading ${context.url}`);\n (_this$callbacks5 = this.callbacks) == null || _this$callbacks5.onError({\n code: status,\n text: xhr.statusText\n }, context, xhr, stats);\n }\n }\n }\n }\n loadtimeout() {\n if (!this.config) return;\n const retryConfig = this.config.loadPolicy.timeoutRetry;\n const retryCount = this.stats.retry;\n if (shouldRetry(retryConfig, retryCount, true)) {\n this.retry(retryConfig);\n } else {\n var _this$context;\n logger.warn(`timeout while loading ${(_this$context = this.context) == null ? void 0 : _this$context.url}`);\n const callbacks = this.callbacks;\n if (callbacks) {\n this.abortInternal();\n callbacks.onTimeout(this.stats, this.context, this.loader);\n }\n }\n }\n retry(retryConfig) {\n const {\n context,\n stats\n } = this;\n this.retryDelay = getRetryDelay(retryConfig, stats.retry);\n stats.retry++;\n logger.warn(`${status ? 'HTTP Status ' + status : 'Timeout'} while loading ${context == null ? void 0 : context.url}, retrying ${stats.retry}/${retryConfig.maxNumRetry} in ${this.retryDelay}ms`);\n // abort and reset internal state\n this.abortInternal();\n this.loader = null;\n // schedule retry\n self.clearTimeout(this.retryTimeout);\n this.retryTimeout = self.setTimeout(this.loadInternal.bind(this), this.retryDelay);\n }\n loadprogress(event) {\n const stats = this.stats;\n stats.loaded = event.loaded;\n if (event.lengthComputable) {\n stats.total = event.total;\n }\n }\n getCacheAge() {\n let result = null;\n if (this.loader && AGE_HEADER_LINE_REGEX.test(this.loader.getAllResponseHeaders())) {\n const ageHeader = this.loader.getResponseHeader('age');\n result = ageHeader ? parseFloat(ageHeader) : null;\n }\n return result;\n }\n getResponseHeader(name) {\n if (this.loader && new RegExp(`^${name}:\\\\s*[\\\\d.]+\\\\s*$`, 'im').test(this.loader.getAllResponseHeaders())) {\n return this.loader.getResponseHeader(name);\n }\n return null;\n }\n}\n\n/**\n * @deprecated use fragLoadPolicy.default\n */\n\n/**\n * @deprecated use manifestLoadPolicy.default and playlistLoadPolicy.default\n */\n\nconst defaultLoadPolicy = {\n maxTimeToFirstByteMs: 8000,\n maxLoadTimeMs: 20000,\n timeoutRetry: null,\n errorRetry: null\n};\n\n/**\n * @ignore\n * If possible, keep hlsDefaultConfig shallow\n * It is cloned whenever a new Hls instance is created, by keeping the config\n * shallow the properties are cloned, and we don't end up manipulating the default\n */\nconst hlsDefaultConfig = _objectSpread2(_objectSpread2({\n autoStartLoad: true,\n // used by stream-controller\n startPosition: -1,\n // used by stream-controller\n defaultAudioCodec: undefined,\n // used by stream-controller\n debug: false,\n // used by logger\n capLevelOnFPSDrop: false,\n // used by fps-controller\n capLevelToPlayerSize: false,\n // used by cap-level-controller\n ignoreDevicePixelRatio: false,\n // used by cap-level-controller\n maxDevicePixelRatio: Number.POSITIVE_INFINITY,\n // used by cap-level-controller\n preferManagedMediaSource: true,\n initialLiveManifestSize: 1,\n // used by stream-controller\n maxBufferLength: 30,\n // used by stream-controller\n backBufferLength: Infinity,\n // used by buffer-controller\n frontBufferFlushThreshold: Infinity,\n startOnSegmentBoundary: false,\n // used by stream-controller\n maxBufferSize: 60 * 1000 * 1000,\n // used by stream-controller\n maxFragLookUpTolerance: 0.25,\n // used by stream-controller\n maxBufferHole: 0.1,\n // used by stream-controller and gap-controller\n detectStallWithCurrentTimeMs: 1250,\n // used by gap-controller\n highBufferWatchdogPeriod: 2,\n // used by gap-controller\n nudgeOffset: 0.1,\n // used by gap-controller\n nudgeMaxRetry: 3,\n // used by gap-controller\n nudgeOnVideoHole: true,\n // used by gap-controller\n liveSyncMode: 'edge',\n // used by stream-controller\n liveSyncDurationCount: 3,\n // used by latency-controller\n liveSyncOnStallIncrease: 1,\n // used by latency-controller\n liveMaxLatencyDurationCount: Infinity,\n // used by latency-controller\n liveSyncDuration: undefined,\n // used by latency-controller\n liveMaxLatencyDuration: undefined,\n // used by latency-controller\n maxLiveSyncPlaybackRate: 1,\n // used by latency-controller\n liveDurationInfinity: false,\n // used by buffer-controller\n /**\n * @deprecated use backBufferLength\n */\n liveBackBufferLength: null,\n // used by buffer-controller\n maxMaxBufferLength: 600,\n // used by stream-controller\n enableWorker: true,\n // used by transmuxer\n workerPath: null,\n // used by transmuxer\n enableSoftwareAES: true,\n // used by decrypter\n startLevel: undefined,\n // used by level-controller\n startFragPrefetch: false,\n // used by stream-controller\n fpsDroppedMonitoringPeriod: 5000,\n // used by fps-controller\n fpsDroppedMonitoringThreshold: 0.2,\n // used by fps-controller\n appendErrorMaxRetry: 3,\n // used by buffer-controller\n ignorePlaylistParsingErrors: false,\n loader: XhrLoader,\n // loader: FetchLoader,\n fLoader: undefined,\n // used by fragment-loader\n pLoader: undefined,\n // used by playlist-loader\n xhrSetup: undefined,\n // used by xhr-loader\n licenseXhrSetup: undefined,\n // used by eme-controller\n licenseResponseCallback: undefined,\n // used by eme-controller\n abrController: AbrController,\n bufferController: BufferController,\n capLevelController: CapLevelController,\n errorController: ErrorController,\n fpsController: FPSController,\n stretchShortVideoTrack: false,\n // used by mp4-remuxer\n maxAudioFramesDrift: 1,\n // used by mp4-remuxer\n forceKeyFrameOnDiscontinuity: true,\n // used by ts-demuxer\n abrEwmaFastLive: 3,\n // used by abr-controller\n abrEwmaSlowLive: 9,\n // used by abr-controller\n abrEwmaFastVoD: 3,\n // used by abr-controller\n abrEwmaSlowVoD: 9,\n // used by abr-controller\n abrEwmaDefaultEstimate: 5e5,\n // 500 kbps // used by abr-controller\n abrEwmaDefaultEstimateMax: 5e6,\n // 5 mbps\n abrBandWidthFactor: 0.95,\n // used by abr-controller\n abrBandWidthUpFactor: 0.7,\n // used by abr-controller\n abrMaxWithRealBitrate: false,\n // used by abr-controller\n maxStarvationDelay: 4,\n // used by abr-controller\n maxLoadingDelay: 4,\n // used by abr-controller\n minAutoBitrate: 0,\n // used by hls\n emeEnabled: false,\n // used by eme-controller\n widevineLicenseUrl: undefined,\n // used by eme-controller\n drmSystems: {},\n // used by eme-controller\n drmSystemOptions: {},\n // used by eme-controller\n requestMediaKeySystemAccessFunc: requestMediaKeySystemAccess ,\n // used by eme-controller\n requireKeySystemAccessOnStart: false,\n // used by eme-controller\n testBandwidth: true,\n progressive: false,\n lowLatencyMode: true,\n cmcd: undefined,\n enableDateRangeMetadataCues: true,\n enableEmsgMetadataCues: true,\n enableEmsgKLVMetadata: false,\n enableID3MetadataCues: true,\n enableInterstitialPlayback: true,\n interstitialAppendInPlace: true,\n interstitialLiveLookAhead: 10,\n useMediaCapabilities: true,\n preserveManualLevelOnError: false,\n certLoadPolicy: {\n default: defaultLoadPolicy\n },\n keyLoadPolicy: {\n default: {\n maxTimeToFirstByteMs: 8000,\n maxLoadTimeMs: 20000,\n timeoutRetry: {\n maxNumRetry: 1,\n retryDelayMs: 1000,\n maxRetryDelayMs: 20000,\n backoff: 'linear'\n },\n errorRetry: {\n maxNumRetry: 8,\n retryDelayMs: 1000,\n maxRetryDelayMs: 20000,\n backoff: 'linear'\n }\n }\n },\n manifestLoadPolicy: {\n default: {\n maxTimeToFirstByteMs: Infinity,\n maxLoadTimeMs: 20000,\n timeoutRetry: {\n maxNumRetry: 2,\n retryDelayMs: 0,\n maxRetryDelayMs: 0\n },\n errorRetry: {\n maxNumRetry: 1,\n retryDelayMs: 1000,\n maxRetryDelayMs: 8000\n }\n }\n },\n playlistLoadPolicy: {\n default: {\n maxTimeToFirstByteMs: 10000,\n maxLoadTimeMs: 20000,\n timeoutRetry: {\n maxNumRetry: 2,\n retryDelayMs: 0,\n maxRetryDelayMs: 0\n },\n errorRetry: {\n maxNumRetry: 2,\n retryDelayMs: 1000,\n maxRetryDelayMs: 8000\n }\n }\n },\n fragLoadPolicy: {\n default: {\n maxTimeToFirstByteMs: 10000,\n maxLoadTimeMs: 120000,\n timeoutRetry: {\n maxNumRetry: 4,\n retryDelayMs: 0,\n maxRetryDelayMs: 0\n },\n errorRetry: {\n maxNumRetry: 6,\n retryDelayMs: 1000,\n maxRetryDelayMs: 8000\n }\n }\n },\n steeringManifestLoadPolicy: {\n default: {\n maxTimeToFirstByteMs: 10000,\n maxLoadTimeMs: 20000,\n timeoutRetry: {\n maxNumRetry: 2,\n retryDelayMs: 0,\n maxRetryDelayMs: 0\n },\n errorRetry: {\n maxNumRetry: 1,\n retryDelayMs: 1000,\n maxRetryDelayMs: 8000\n }\n } \n },\n interstitialAssetListLoadPolicy: {\n default: {\n maxTimeToFirstByteMs: 10000,\n maxLoadTimeMs: 30000,\n timeoutRetry: {\n maxNumRetry: 0,\n retryDelayMs: 0,\n maxRetryDelayMs: 0\n },\n errorRetry: {\n maxNumRetry: 0,\n retryDelayMs: 1000,\n maxRetryDelayMs: 8000\n }\n } \n },\n // These default settings are deprecated in favor of the above policies\n // and are maintained for backwards compatibility\n manifestLoadingTimeOut: 10000,\n manifestLoadingMaxRetry: 1,\n manifestLoadingRetryDelay: 1000,\n manifestLoadingMaxRetryTimeout: 64000,\n levelLoadingTimeOut: 10000,\n levelLoadingMaxRetry: 4,\n levelLoadingRetryDelay: 1000,\n levelLoadingMaxRetryTimeout: 64000,\n fragLoadingTimeOut: 20000,\n fragLoadingMaxRetry: 6,\n fragLoadingRetryDelay: 1000,\n fragLoadingMaxRetryTimeout: 64000\n}, timelineConfig()), {}, {\n subtitleStreamController: SubtitleStreamController ,\n subtitleTrackController: SubtitleTrackController ,\n timelineController: TimelineController ,\n audioStreamController: AudioStreamController ,\n audioTrackController: AudioTrackController ,\n emeController: EMEController ,\n cmcdController: CMCDController ,\n contentSteeringController: ContentSteeringController ,\n interstitialsController: InterstitialsController \n});\nfunction timelineConfig() {\n return {\n cueHandler: Cues,\n // used by timeline-controller\n enableWebVTT: true,\n // used by timeline-controller\n enableIMSC1: true,\n // used by timeline-controller\n enableCEA708Captions: true,\n // used by timeline-controller\n captionsTextTrack1Label: 'English',\n // used by timeline-controller\n captionsTextTrack1LanguageCode: 'en',\n // used by timeline-controller\n captionsTextTrack2Label: 'Spanish',\n // used by timeline-controller\n captionsTextTrack2LanguageCode: 'es',\n // used by timeline-controller\n captionsTextTrack3Label: 'Unknown CC',\n // used by timeline-controller\n captionsTextTrack3LanguageCode: '',\n // used by timeline-controller\n captionsTextTrack4Label: 'Unknown CC',\n // used by timeline-controller\n captionsTextTrack4LanguageCode: '',\n // used by timeline-controller\n renderTextTracksNatively: true\n };\n}\n\n/**\n * @ignore\n */\nfunction mergeConfig(defaultConfig, userConfig, logger) {\n if ((userConfig.liveSyncDurationCount || userConfig.liveMaxLatencyDurationCount) && (userConfig.liveSyncDuration || userConfig.liveMaxLatencyDuration)) {\n throw new Error(\"Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration\");\n }\n if (userConfig.liveMaxLatencyDurationCount !== undefined && (userConfig.liveSyncDurationCount === undefined || userConfig.liveMaxLatencyDurationCount <= userConfig.liveSyncDurationCount)) {\n throw new Error('Illegal hls.js config: \"liveMaxLatencyDurationCount\" must be greater than \"liveSyncDurationCount\"');\n }\n if (userConfig.liveMaxLatencyDuration !== undefined && (userConfig.liveSyncDuration === undefined || userConfig.liveMaxLatencyDuration <= userConfig.liveSyncDuration)) {\n throw new Error('Illegal hls.js config: \"liveMaxLatencyDuration\" must be greater than \"liveSyncDuration\"');\n }\n const defaultsCopy = deepCpy(defaultConfig);\n\n // Backwards compatibility with deprecated config values\n const deprecatedSettingTypes = ['manifest', 'level', 'frag'];\n const deprecatedSettings = ['TimeOut', 'MaxRetry', 'RetryDelay', 'MaxRetryTimeout'];\n deprecatedSettingTypes.forEach(type => {\n const policyName = `${type === 'level' ? 'playlist' : type}LoadPolicy`;\n const policyNotSet = userConfig[policyName] === undefined;\n const report = [];\n deprecatedSettings.forEach(setting => {\n const deprecatedSetting = `${type}Loading${setting}`;\n const value = userConfig[deprecatedSetting];\n if (value !== undefined && policyNotSet) {\n report.push(deprecatedSetting);\n const settings = defaultsCopy[policyName].default;\n userConfig[policyName] = {\n default: settings\n };\n switch (setting) {\n case 'TimeOut':\n settings.maxLoadTimeMs = value;\n settings.maxTimeToFirstByteMs = value;\n break;\n case 'MaxRetry':\n settings.errorRetry.maxNumRetry = value;\n settings.timeoutRetry.maxNumRetry = value;\n break;\n case 'RetryDelay':\n settings.errorRetry.retryDelayMs = value;\n settings.timeoutRetry.retryDelayMs = value;\n break;\n case 'MaxRetryTimeout':\n settings.errorRetry.maxRetryDelayMs = value;\n settings.timeoutRetry.maxRetryDelayMs = value;\n break;\n }\n }\n });\n if (report.length) {\n logger.warn(`hls.js config: \"${report.join('\", \"')}\" setting(s) are deprecated, use \"${policyName}\": ${stringify(userConfig[policyName])}`);\n }\n });\n return _objectSpread2(_objectSpread2({}, defaultsCopy), userConfig);\n}\nfunction deepCpy(obj) {\n if (obj && typeof obj === 'object') {\n if (Array.isArray(obj)) {\n return obj.map(deepCpy);\n }\n return Object.keys(obj).reduce((result, key) => {\n result[key] = deepCpy(obj[key]);\n return result;\n }, {});\n }\n return obj;\n}\n\n/**\n * @ignore\n */\nfunction enableStreamingMode(config, logger) {\n const currentLoader = config.loader;\n if (currentLoader !== FetchLoader && currentLoader !== XhrLoader) {\n // If a developer has configured their own loader, respect that choice\n logger.log('[config]: Custom loader detected, cannot enable progressive streaming');\n config.progressive = false;\n } else {\n const canStreamProgressively = fetchSupported();\n if (canStreamProgressively) {\n config.loader = FetchLoader;\n config.progressive = true;\n config.enableSoftwareAES = true;\n logger.log('[config]: Progressive streaming enabled, using FetchLoader');\n }\n }\n}\n\nconst MAX_START_GAP_JUMP = 2.0;\nconst SKIP_BUFFER_HOLE_STEP_SECONDS = 0.1;\nconst SKIP_BUFFER_RANGE_START = 0.05;\nconst TICK_INTERVAL$1 = 100;\nclass GapController extends TaskLoop {\n constructor(hls, fragmentTracker) {\n super('gap-controller', hls.logger);\n this.hls = void 0;\n this.fragmentTracker = void 0;\n this.media = null;\n this.mediaSource = void 0;\n this.nudgeRetry = 0;\n this.stallReported = false;\n this.stalled = null;\n this.moved = false;\n this.seeking = false;\n this.buffered = {};\n this.lastCurrentTime = 0;\n this.ended = 0;\n this.waiting = 0;\n this.onMediaPlaying = () => {\n this.ended = 0;\n this.waiting = 0;\n };\n this.onMediaWaiting = () => {\n var _this$media;\n if ((_this$media = this.media) != null && _this$media.seeking) {\n return;\n }\n this.waiting = self.performance.now();\n this.tick();\n };\n this.onMediaEnded = () => {\n if (this.hls) {\n var _this$media2;\n // ended is set when triggering MEDIA_ENDED so that we do not trigger it again on stall or on tick with media.ended\n this.ended = ((_this$media2 = this.media) == null ? void 0 : _this$media2.currentTime) || 1;\n this.hls.trigger(Events.MEDIA_ENDED, {\n stalled: false\n });\n }\n };\n this.hls = hls;\n this.fragmentTracker = fragmentTracker;\n this.registerListeners();\n }\n registerListeners() {\n const {\n hls\n } = this;\n if (hls) {\n hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.on(Events.BUFFER_APPENDED, this.onBufferAppended, this);\n }\n }\n unregisterListeners() {\n const {\n hls\n } = this;\n if (hls) {\n hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.off(Events.BUFFER_APPENDED, this.onBufferAppended, this);\n }\n }\n destroy() {\n super.destroy();\n this.unregisterListeners();\n this.media = this.hls = this.fragmentTracker = null;\n this.mediaSource = undefined;\n }\n onMediaAttached(event, data) {\n this.setInterval(TICK_INTERVAL$1);\n this.mediaSource = data.mediaSource;\n const media = this.media = data.media;\n addEventListener(media, 'playing', this.onMediaPlaying);\n addEventListener(media, 'waiting', this.onMediaWaiting);\n addEventListener(media, 'ended', this.onMediaEnded);\n }\n onMediaDetaching(event, data) {\n this.clearInterval();\n const {\n media\n } = this;\n if (media) {\n removeEventListener(media, 'playing', this.onMediaPlaying);\n removeEventListener(media, 'waiting', this.onMediaWaiting);\n removeEventListener(media, 'ended', this.onMediaEnded);\n this.media = null;\n }\n this.mediaSource = undefined;\n }\n onBufferAppended(event, data) {\n this.buffered = data.timeRanges;\n }\n get hasBuffered() {\n return Object.keys(this.buffered).length > 0;\n }\n tick() {\n var _this$media3;\n if (!((_this$media3 = this.media) != null && _this$media3.readyState) || !this.hasBuffered) {\n return;\n }\n const currentTime = this.media.currentTime;\n this.poll(currentTime, this.lastCurrentTime);\n this.lastCurrentTime = currentTime;\n }\n\n /**\n * Checks if the playhead is stuck within a gap, and if so, attempts to free it.\n * A gap is an unbuffered range between two buffered ranges (or the start and the first buffered range).\n *\n * @param lastCurrentTime - Previously read playhead position\n */\n poll(currentTime, lastCurrentTime) {\n var _this$hls, _this$hls2;\n const config = (_this$hls = this.hls) == null ? void 0 : _this$hls.config;\n if (!config) {\n return;\n }\n const media = this.media;\n if (!media) {\n return;\n }\n const {\n seeking\n } = media;\n const seeked = this.seeking && !seeking;\n const beginSeek = !this.seeking && seeking;\n const pausedEndedOrHalted = media.paused && !seeking || media.ended || media.playbackRate === 0;\n this.seeking = seeking;\n\n // The playhead is moving, no-op\n if (currentTime !== lastCurrentTime) {\n if (lastCurrentTime) {\n this.ended = 0;\n }\n this.moved = true;\n if (!seeking) {\n this.nudgeRetry = 0;\n // When crossing between buffered video time ranges, but not audio, flush pipeline with seek (Chrome)\n if (config.nudgeOnVideoHole && !pausedEndedOrHalted && currentTime > lastCurrentTime) {\n this.nudgeOnVideoHole(currentTime, lastCurrentTime);\n }\n }\n if (this.waiting === 0) {\n this.stallResolved(currentTime);\n }\n return;\n }\n\n // Clear stalled state when beginning or finishing seeking so that we don't report stalls coming out of a seek\n if (beginSeek || seeked) {\n if (seeked) {\n this.stallResolved(currentTime);\n }\n return;\n }\n\n // The playhead should not be moving\n if (pausedEndedOrHalted) {\n this.nudgeRetry = 0;\n this.stallResolved(currentTime);\n // Fire MEDIA_ENDED to workaround event not being dispatched by browser\n if (!this.ended && media.ended && this.hls) {\n this.ended = currentTime || 1;\n this.hls.trigger(Events.MEDIA_ENDED, {\n stalled: false\n });\n }\n return;\n }\n if (!BufferHelper.getBuffered(media).length) {\n this.nudgeRetry = 0;\n return;\n }\n\n // Resolve stalls at buffer holes using the main buffer, whose ranges are the intersections of the A/V sourcebuffers\n const bufferInfo = BufferHelper.bufferInfo(media, currentTime, 0);\n const nextStart = bufferInfo.nextStart || 0;\n const fragmentTracker = this.fragmentTracker;\n if (seeking && fragmentTracker && this.hls) {\n // Is there a fragment loading/parsing/appending before currentTime?\n const inFlightDependency = getInFlightDependency(this.hls.inFlightFragments, currentTime);\n\n // Waiting for seeking in a buffered range to complete\n const hasEnoughBuffer = bufferInfo.len > MAX_START_GAP_JUMP;\n // Next buffered range is too far ahead to jump to while still seeking\n const noBufferHole = !nextStart || inFlightDependency || nextStart - currentTime > MAX_START_GAP_JUMP && !fragmentTracker.getPartialFragment(currentTime);\n if (hasEnoughBuffer || noBufferHole) {\n return;\n }\n // Reset moved state when seeking to a point in or before a gap/hole\n this.moved = false;\n }\n\n // Skip start gaps if we haven't played, but the last poll detected the start of a stall\n // The addition poll gives the browser a chance to jump the gap for us\n const levelDetails = (_this$hls2 = this.hls) == null ? void 0 : _this$hls2.latestLevelDetails;\n if (!this.moved && this.stalled !== null && fragmentTracker) {\n // There is no playable buffer (seeked, waiting for buffer)\n const isBuffered = bufferInfo.len > 0;\n if (!isBuffered && !nextStart) {\n return;\n }\n // Jump start gaps within jump threshold\n const startJump = Math.max(nextStart, bufferInfo.start || 0) - currentTime;\n\n // When joining a live stream with audio tracks, account for live playlist window sliding by allowing\n // a larger jump over start gaps caused by the audio-stream-controller buffering a start fragment\n // that begins over 1 target duration after the video start position.\n const isLive = !!(levelDetails != null && levelDetails.live);\n const maxStartGapJump = isLive ? levelDetails.targetduration * 2 : MAX_START_GAP_JUMP;\n const appended = appendedFragAtPosition(currentTime, fragmentTracker);\n if (startJump > 0 && (startJump <= maxStartGapJump || appended)) {\n if (!media.paused) {\n this._trySkipBufferHole(appended);\n }\n return;\n }\n }\n\n // Start tracking stall time\n const detectStallWithCurrentTimeMs = config.detectStallWithCurrentTimeMs;\n const tnow = self.performance.now();\n const tWaiting = this.waiting;\n let stalled = this.stalled;\n if (stalled === null) {\n // Use time of recent \"waiting\" event\n if (tWaiting > 0 && tnow - tWaiting < detectStallWithCurrentTimeMs) {\n stalled = this.stalled = tWaiting;\n } else {\n this.stalled = tnow;\n return;\n }\n }\n const stalledDuration = tnow - stalled;\n if (!seeking && (stalledDuration >= detectStallWithCurrentTimeMs || tWaiting) && this.hls) {\n var _this$mediaSource;\n // Dispatch MEDIA_ENDED when media.ended/ended event is not signalled at end of stream\n if (((_this$mediaSource = this.mediaSource) == null ? void 0 : _this$mediaSource.readyState) === 'ended' && !(levelDetails != null && levelDetails.live) && Math.abs(currentTime - ((levelDetails == null ? void 0 : levelDetails.edge) || 0)) < 1) {\n if (this.ended) {\n return;\n }\n this.ended = currentTime || 1;\n this.hls.trigger(Events.MEDIA_ENDED, {\n stalled: true\n });\n return;\n }\n // Report stalling after trying to fix\n this._reportStall(bufferInfo);\n if (!this.media || !this.hls) {\n return;\n }\n }\n const bufferedWithHoles = BufferHelper.bufferInfo(media, currentTime, config.maxBufferHole);\n this._tryFixBufferStall(bufferedWithHoles, stalledDuration, currentTime);\n }\n stallResolved(currentTime) {\n const stalled = this.stalled;\n if (stalled && this.hls) {\n this.stalled = null;\n // The playhead is now moving, but was previously stalled\n if (this.stallReported) {\n const stalledDuration = self.performance.now() - stalled;\n this.log(`playback not stuck anymore @${currentTime}, after ${Math.round(stalledDuration)}ms`);\n this.stallReported = false;\n this.waiting = 0;\n this.hls.trigger(Events.STALL_RESOLVED, {});\n }\n }\n }\n nudgeOnVideoHole(currentTime, lastCurrentTime) {\n var _this$buffered$audio;\n // Chrome will play one second past a hole in video buffered time ranges without rendering any video from the subsequent range and then stall as long as audio is buffered:\n // https://github.com/video-dev/hls.js/issues/5631\n // https://issues.chromium.org/issues/40280613#comment10\n // Detect the potential for this situation and proactively seek to flush the video pipeline once the playhead passes the start of the video hole.\n // When there are audio and video buffers and currentTime is past the end of the first video buffered range...\n const videoSourceBuffered = this.buffered.video;\n if (this.hls && this.media && this.fragmentTracker && (_this$buffered$audio = this.buffered.audio) != null && _this$buffered$audio.length && videoSourceBuffered && videoSourceBuffered.length > 1 && currentTime > videoSourceBuffered.end(0)) {\n // and audio is buffered at the playhead\n const audioBufferInfo = BufferHelper.bufferedInfo(BufferHelper.timeRangesToArray(this.buffered.audio), currentTime, 0);\n if (audioBufferInfo.len > 1 && lastCurrentTime >= audioBufferInfo.start) {\n const videoTimes = BufferHelper.timeRangesToArray(videoSourceBuffered);\n const lastBufferedIndex = BufferHelper.bufferedInfo(videoTimes, lastCurrentTime, 0).bufferedIndex;\n // nudge when crossing into another video buffered range (hole).\n if (lastBufferedIndex > -1 && lastBufferedIndex < videoTimes.length - 1) {\n const bufferedIndex = BufferHelper.bufferedInfo(videoTimes, currentTime, 0).bufferedIndex;\n const holeStart = videoTimes[lastBufferedIndex].end;\n const holeEnd = videoTimes[lastBufferedIndex + 1].start;\n if ((bufferedIndex === -1 || bufferedIndex > lastBufferedIndex) && holeEnd - holeStart < 1 &&\n // `maxBufferHole` may be too small and setting it to 0 should not disable this feature\n currentTime - holeStart < 2) {\n const error = new Error(`nudging playhead to flush pipeline after video hole. currentTime: ${currentTime} hole: ${holeStart} -> ${holeEnd} buffered index: ${bufferedIndex}`);\n this.warn(error.message);\n // Magic number to flush the pipeline without interuption to audio playback:\n this.media.currentTime += 0.000001;\n let frag = appendedFragAtPosition(currentTime, this.fragmentTracker);\n if (frag && 'fragment' in frag) {\n frag = frag.fragment;\n } else if (!frag) {\n frag = undefined;\n }\n const bufferInfo = BufferHelper.bufferInfo(this.media, currentTime, 0);\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.BUFFER_SEEK_OVER_HOLE,\n fatal: false,\n error,\n reason: error.message,\n frag,\n buffer: bufferInfo.len,\n bufferInfo\n });\n }\n }\n }\n }\n }\n\n /**\n * Detects and attempts to fix known buffer stalling issues.\n * @param bufferInfo - The properties of the current buffer.\n * @param stalledDurationMs - The amount of time Hls.js has been stalling for.\n * @private\n */\n _tryFixBufferStall(bufferInfo, stalledDurationMs, currentTime) {\n var _this$hls3, _this$hls4;\n const {\n fragmentTracker,\n media\n } = this;\n const config = (_this$hls3 = this.hls) == null ? void 0 : _this$hls3.config;\n if (!media || !fragmentTracker || !config) {\n return;\n }\n const levelDetails = (_this$hls4 = this.hls) == null ? void 0 : _this$hls4.latestLevelDetails;\n const appended = appendedFragAtPosition(currentTime, fragmentTracker);\n if (appended || levelDetails != null && levelDetails.live && currentTime < levelDetails.fragmentStart) {\n // Try to skip over the buffer hole caused by a partial fragment\n // This method isn't limited by the size of the gap between buffered ranges\n const targetTime = this._trySkipBufferHole(appended);\n // we return here in this case, meaning\n // the branch below only executes when we haven't seeked to a new position\n if (targetTime || !this.media) {\n return;\n }\n }\n\n // if we haven't had to skip over a buffer hole of a partial fragment\n // we may just have to \"nudge\" the playlist as the browser decoding/rendering engine\n // needs to cross some sort of threshold covering all source-buffers content\n // to start playing properly.\n const bufferedRanges = bufferInfo.buffered;\n const adjacentTraversal = this.adjacentTraversal(bufferInfo, currentTime);\n if ((bufferedRanges && bufferedRanges.length > 1 && bufferInfo.len > config.maxBufferHole || bufferInfo.nextStart && (bufferInfo.nextStart - currentTime < config.maxBufferHole || adjacentTraversal)) && (stalledDurationMs > config.highBufferWatchdogPeriod * 1000 || this.waiting)) {\n this.warn('Trying to nudge playhead over buffer-hole');\n // Try to nudge currentTime over a buffer hole if we've been stalling for the configured amount of seconds\n // We only try to jump the hole if it's under the configured size\n this._tryNudgeBuffer(bufferInfo);\n }\n }\n adjacentTraversal(bufferInfo, currentTime) {\n const fragmentTracker = this.fragmentTracker;\n const nextStart = bufferInfo.nextStart;\n if (fragmentTracker && nextStart) {\n const current = fragmentTracker.getFragAtPos(currentTime, PlaylistLevelType.MAIN);\n const next = fragmentTracker.getFragAtPos(nextStart, PlaylistLevelType.MAIN);\n if (current && next) {\n return next.sn - current.sn < 2;\n }\n }\n return false;\n }\n\n /**\n * Triggers a BUFFER_STALLED_ERROR event, but only once per stall period.\n * @param bufferLen - The playhead distance from the end of the current buffer segment.\n * @private\n */\n _reportStall(bufferInfo) {\n const {\n hls,\n media,\n stallReported,\n stalled\n } = this;\n if (!stallReported && stalled !== null && media && hls) {\n // Report stalled error once\n this.stallReported = true;\n const error = new Error(`Playback stalling at @${media.currentTime} due to low buffer (${stringify(bufferInfo)})`);\n this.warn(error.message);\n hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.BUFFER_STALLED_ERROR,\n fatal: false,\n error,\n buffer: bufferInfo.len,\n bufferInfo,\n stalled: {\n start: stalled\n }\n });\n }\n }\n\n /**\n * Attempts to fix buffer stalls by jumping over known gaps caused by partial fragments\n * @param appended - The fragment or part found at the current time (where playback is stalling).\n * @private\n */\n _trySkipBufferHole(appended) {\n var _this$hls5;\n const {\n fragmentTracker,\n media\n } = this;\n const config = (_this$hls5 = this.hls) == null ? void 0 : _this$hls5.config;\n if (!media || !fragmentTracker || !config) {\n return 0;\n }\n\n // Check if currentTime is between unbuffered regions of partial fragments\n const currentTime = media.currentTime;\n const bufferInfo = BufferHelper.bufferInfo(media, currentTime, 0);\n const startTime = currentTime < bufferInfo.start ? bufferInfo.start : bufferInfo.nextStart;\n if (startTime && this.hls) {\n const bufferStarved = bufferInfo.len <= config.maxBufferHole;\n const waiting = bufferInfo.len > 0 && bufferInfo.len < 1 && media.readyState < 3;\n const gapLength = startTime - currentTime;\n if (gapLength > 0 && (bufferStarved || waiting)) {\n // Only allow large gaps to be skipped if it is a start gap, or all fragments in skip range are partial\n if (gapLength > config.maxBufferHole) {\n let startGap = false;\n if (currentTime === 0) {\n const startFrag = fragmentTracker.getAppendedFrag(0, PlaylistLevelType.MAIN);\n if (startFrag && startTime < startFrag.end) {\n startGap = true;\n }\n }\n if (!startGap && appended) {\n var _this$hls$loadLevelOb;\n // Do not seek when selected variant playlist is unloaded\n if (!((_this$hls$loadLevelOb = this.hls.loadLevelObj) != null && _this$hls$loadLevelOb.details)) {\n return 0;\n }\n // Do not seek when required fragments are inflight or appending\n const inFlightDependency = getInFlightDependency(this.hls.inFlightFragments, startTime);\n if (inFlightDependency) {\n return 0;\n }\n // Do not seek if we can't walk tracked fragments to end of gap\n let moreToLoad = false;\n let pos = appended.end;\n while (pos < startTime) {\n const provisioned = appendedFragAtPosition(pos, fragmentTracker);\n if (provisioned) {\n pos += provisioned.duration;\n } else {\n moreToLoad = true;\n break;\n }\n }\n if (moreToLoad) {\n return 0;\n }\n }\n }\n const targetTime = Math.max(startTime + SKIP_BUFFER_RANGE_START, currentTime + SKIP_BUFFER_HOLE_STEP_SECONDS);\n this.warn(`skipping hole, adjusting currentTime from ${currentTime} to ${targetTime}`);\n this.moved = true;\n media.currentTime = targetTime;\n if (!(appended != null && appended.gap)) {\n const error = new Error(`fragment loaded with buffer holes, seeking from ${currentTime} to ${targetTime}`);\n const errorData = {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.BUFFER_SEEK_OVER_HOLE,\n fatal: false,\n error,\n reason: error.message,\n buffer: bufferInfo.len,\n bufferInfo\n };\n if (appended) {\n if ('fragment' in appended) {\n errorData.part = appended;\n } else {\n errorData.frag = appended;\n }\n }\n this.hls.trigger(Events.ERROR, errorData);\n }\n return targetTime;\n }\n }\n return 0;\n }\n\n /**\n * Attempts to fix buffer stalls by advancing the mediaElement's current time by a small amount.\n * @private\n */\n _tryNudgeBuffer(bufferInfo) {\n const {\n hls,\n media,\n nudgeRetry\n } = this;\n const config = hls == null ? void 0 : hls.config;\n if (!media || !config) {\n return 0;\n }\n const currentTime = media.currentTime;\n this.nudgeRetry++;\n if (nudgeRetry < config.nudgeMaxRetry) {\n const targetTime = currentTime + (nudgeRetry + 1) * config.nudgeOffset;\n // playback stalled in buffered area ... let's nudge currentTime to try to overcome this\n const error = new Error(`Nudging 'currentTime' from ${currentTime} to ${targetTime}`);\n this.warn(error.message);\n media.currentTime = targetTime;\n hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.BUFFER_NUDGE_ON_STALL,\n error,\n fatal: false,\n buffer: bufferInfo.len,\n bufferInfo\n });\n } else {\n const error = new Error(`Playhead still not moving while enough data buffered @${currentTime} after ${config.nudgeMaxRetry} nudges`);\n this.error(error.message);\n hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.BUFFER_STALLED_ERROR,\n error,\n fatal: true,\n buffer: bufferInfo.len,\n bufferInfo\n });\n }\n }\n}\nfunction getInFlightDependency(inFlightFragments, currentTime) {\n const main = inFlight(inFlightFragments.main);\n if (main && main.start <= currentTime) {\n return main;\n }\n const audio = inFlight(inFlightFragments.audio);\n if (audio && audio.start <= currentTime) {\n return audio;\n }\n return null;\n}\nfunction inFlight(inFlightData) {\n if (!inFlightData) {\n return null;\n }\n switch (inFlightData.state) {\n case State.IDLE:\n case State.STOPPED:\n case State.ENDED:\n case State.ERROR:\n return null;\n }\n return inFlightData.frag;\n}\nfunction appendedFragAtPosition(pos, fragmentTracker) {\n return fragmentTracker.getAppendedFrag(pos, PlaylistLevelType.MAIN) || fragmentTracker.getPartialFragment(pos);\n}\n\nconst MIN_CUE_DURATION = 0.25;\nfunction getCueClass() {\n if (typeof self === 'undefined') return undefined;\n return self.VTTCue || self.TextTrackCue;\n}\nfunction createCueWithDataFields(Cue, startTime, endTime, data, type) {\n let cue = new Cue(startTime, endTime, '');\n try {\n cue.value = data;\n if (type) {\n cue.type = type;\n }\n } catch (e) {\n cue = new Cue(startTime, endTime, stringify(type ? _objectSpread2({\n type\n }, data) : data));\n }\n return cue;\n}\n\n// VTTCue latest draft allows an infinite duration, fallback\n// to MAX_VALUE if necessary\nconst MAX_CUE_ENDTIME = (() => {\n const Cue = getCueClass();\n try {\n Cue && new Cue(0, Number.POSITIVE_INFINITY, '');\n } catch (e) {\n return Number.MAX_VALUE;\n }\n return Number.POSITIVE_INFINITY;\n})();\nclass ID3TrackController {\n constructor(hls) {\n this.hls = void 0;\n this.id3Track = null;\n this.media = null;\n this.dateRangeCuesAppended = {};\n this.removeCues = true;\n this.assetCue = void 0;\n this.onEventCueEnter = () => {\n if (!this.hls) {\n return;\n }\n this.hls.trigger(Events.EVENT_CUE_ENTER, {});\n };\n this.hls = hls;\n this._registerListeners();\n }\n destroy() {\n this._unregisterListeners();\n this.id3Track = null;\n this.media = null;\n this.dateRangeCuesAppended = {};\n // @ts-ignore\n this.hls = this.onEventCueEnter = null;\n }\n _registerListeners() {\n const {\n hls\n } = this;\n if (hls) {\n hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.FRAG_PARSING_METADATA, this.onFragParsingMetadata, this);\n hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n hls.on(Events.LEVEL_PTS_UPDATED, this.onLevelPtsUpdated, this);\n }\n }\n _unregisterListeners() {\n const {\n hls\n } = this;\n if (hls) {\n hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.FRAG_PARSING_METADATA, this.onFragParsingMetadata, this);\n hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n hls.off(Events.LEVEL_PTS_UPDATED, this.onLevelPtsUpdated, this);\n }\n }\n // Add ID3 metatadata text track.\n onMediaAttaching(event, data) {\n var _data$overrides;\n this.media = data.media;\n if (((_data$overrides = data.overrides) == null ? void 0 : _data$overrides.cueRemoval) === false) {\n this.removeCues = false;\n }\n }\n onMediaAttached() {\n var _this$hls;\n const details = (_this$hls = this.hls) == null ? void 0 : _this$hls.latestLevelDetails;\n if (details) {\n this.updateDateRangeCues(details);\n }\n }\n onMediaDetaching(event, data) {\n this.media = null;\n const transferringMedia = !!data.transferMedia;\n if (transferringMedia) {\n return;\n }\n if (this.id3Track) {\n if (this.removeCues) {\n clearCurrentCues(this.id3Track, this.onEventCueEnter);\n }\n this.id3Track = null;\n }\n this.dateRangeCuesAppended = {};\n }\n onManifestLoading() {\n this.dateRangeCuesAppended = {};\n }\n createTrack(media) {\n const track = this.getID3Track(media.textTracks);\n track.mode = 'hidden';\n return track;\n }\n getID3Track(textTracks) {\n if (!this.media) {\n return;\n }\n for (let i = 0; i < textTracks.length; i++) {\n const textTrack = textTracks[i];\n if (textTrack.kind === 'metadata' && textTrack.label === 'id3') {\n // send 'addtrack' when reusing the textTrack for metadata,\n // same as what we do for captions\n sendAddTrackEvent(textTrack, this.media);\n return textTrack;\n }\n }\n return this.media.addTextTrack('metadata', 'id3');\n }\n onFragParsingMetadata(event, data) {\n if (!this.media || !this.hls) {\n return;\n }\n const {\n enableEmsgMetadataCues,\n enableID3MetadataCues\n } = this.hls.config;\n if (!enableEmsgMetadataCues && !enableID3MetadataCues) {\n return;\n }\n const {\n samples\n } = data;\n\n // create track dynamically\n if (!this.id3Track) {\n this.id3Track = this.createTrack(this.media);\n }\n const Cue = getCueClass();\n if (!Cue) {\n return;\n }\n for (let i = 0; i < samples.length; i++) {\n const type = samples[i].type;\n if (type === MetadataSchema.emsg && !enableEmsgMetadataCues || !enableID3MetadataCues) {\n continue;\n }\n const frames = getId3Frames(samples[i].data);\n const startTime = samples[i].pts;\n let endTime = startTime + samples[i].duration;\n if (endTime > MAX_CUE_ENDTIME) {\n endTime = MAX_CUE_ENDTIME;\n }\n const timeDiff = endTime - startTime;\n if (timeDiff <= 0) {\n endTime = startTime + MIN_CUE_DURATION;\n }\n for (let j = 0; j < frames.length; j++) {\n const frame = frames[j];\n // Safari doesn't put the timestamp frame in the TextTrack\n if (!isId3TimestampFrame(frame)) {\n // add a bounds to any unbounded cues\n this.updateId3CueEnds(startTime, type);\n const cue = createCueWithDataFields(Cue, startTime, endTime, frame, type);\n if (cue) {\n this.id3Track.addCue(cue);\n }\n }\n }\n }\n }\n updateId3CueEnds(startTime, type) {\n var _this$id3Track;\n const cues = (_this$id3Track = this.id3Track) == null ? void 0 : _this$id3Track.cues;\n if (cues) {\n for (let i = cues.length; i--;) {\n const cue = cues[i];\n if (cue.type === type && cue.startTime < startTime && cue.endTime === MAX_CUE_ENDTIME) {\n cue.endTime = startTime;\n }\n }\n }\n }\n onBufferFlushing(event, {\n startOffset,\n endOffset,\n type\n }) {\n const {\n id3Track,\n hls\n } = this;\n if (!hls) {\n return;\n }\n const {\n config: {\n enableEmsgMetadataCues,\n enableID3MetadataCues\n }\n } = hls;\n if (id3Track && (enableEmsgMetadataCues || enableID3MetadataCues)) {\n let predicate;\n if (type === 'audio') {\n predicate = cue => cue.type === MetadataSchema.audioId3 && enableID3MetadataCues;\n } else if (type === 'video') {\n predicate = cue => cue.type === MetadataSchema.emsg && enableEmsgMetadataCues;\n } else {\n predicate = cue => cue.type === MetadataSchema.audioId3 && enableID3MetadataCues || cue.type === MetadataSchema.emsg && enableEmsgMetadataCues;\n }\n removeCuesInRange(id3Track, startOffset, endOffset, predicate);\n }\n }\n onLevelUpdated(event, {\n details\n }) {\n this.updateDateRangeCues(details, true);\n }\n onLevelPtsUpdated(event, data) {\n if (Math.abs(data.drift) > 0.01) {\n this.updateDateRangeCues(data.details);\n }\n }\n updateDateRangeCues(details, removeOldCues) {\n if (!this.hls || !this.media) {\n return;\n }\n const {\n assetPlayerId,\n timelineOffset,\n enableDateRangeMetadataCues,\n interstitialsController\n } = this.hls.config;\n if (!enableDateRangeMetadataCues) {\n return;\n }\n const Cue = getCueClass();\n if (assetPlayerId && timelineOffset && !interstitialsController) {\n const {\n fragmentStart,\n fragmentEnd\n } = details;\n let cue = this.assetCue;\n if (cue) {\n cue.startTime = fragmentStart;\n cue.endTime = fragmentEnd;\n } else if (Cue) {\n cue = this.assetCue = createCueWithDataFields(Cue, fragmentStart, fragmentEnd, {\n assetPlayerId: this.hls.config.assetPlayerId\n }, 'hlsjs.interstitial.asset');\n if (cue) {\n cue.id = assetPlayerId;\n this.id3Track || (this.id3Track = this.createTrack(this.media));\n this.id3Track.addCue(cue);\n cue.addEventListener('enter', this.onEventCueEnter);\n }\n }\n }\n if (!details.hasProgramDateTime) {\n return;\n }\n const {\n id3Track\n } = this;\n const {\n dateRanges\n } = details;\n const ids = Object.keys(dateRanges);\n let dateRangeCuesAppended = this.dateRangeCuesAppended;\n // Remove cues from track not found in details.dateRanges\n if (id3Track && removeOldCues) {\n var _id3Track$cues;\n if ((_id3Track$cues = id3Track.cues) != null && _id3Track$cues.length) {\n const idsToRemove = Object.keys(dateRangeCuesAppended).filter(id => !ids.includes(id));\n for (let i = idsToRemove.length; i--;) {\n var _dateRangeCuesAppende;\n const id = idsToRemove[i];\n const cues = (_dateRangeCuesAppende = dateRangeCuesAppended[id]) == null ? void 0 : _dateRangeCuesAppende.cues;\n delete dateRangeCuesAppended[id];\n if (cues) {\n Object.keys(cues).forEach(key => {\n const cue = cues[key];\n if (cue) {\n cue.removeEventListener('enter', this.onEventCueEnter);\n try {\n id3Track.removeCue(cue);\n } catch (e) {\n /* no-op */\n }\n }\n });\n }\n }\n } else {\n dateRangeCuesAppended = this.dateRangeCuesAppended = {};\n }\n }\n // Exit if the playlist does not have Date Ranges or does not have Program Date Time\n const lastFragment = details.fragments[details.fragments.length - 1];\n if (ids.length === 0 || !isFiniteNumber(lastFragment == null ? void 0 : lastFragment.programDateTime)) {\n return;\n }\n this.id3Track || (this.id3Track = this.createTrack(this.media));\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n const dateRange = dateRanges[id];\n const startTime = dateRange.startTime;\n\n // Process DateRanges to determine end-time (known DURATION, END-DATE, or END-ON-NEXT)\n const appendedDateRangeCues = dateRangeCuesAppended[id];\n const cues = (appendedDateRangeCues == null ? void 0 : appendedDateRangeCues.cues) || {};\n let durationKnown = (appendedDateRangeCues == null ? void 0 : appendedDateRangeCues.durationKnown) || false;\n let endTime = MAX_CUE_ENDTIME;\n const {\n duration,\n endDate\n } = dateRange;\n if (endDate && duration !== null) {\n endTime = startTime + duration;\n durationKnown = true;\n } else if (dateRange.endOnNext && !durationKnown) {\n const nextDateRangeWithSameClass = ids.reduce((candidateDateRange, id) => {\n if (id !== dateRange.id) {\n const otherDateRange = dateRanges[id];\n if (otherDateRange.class === dateRange.class && otherDateRange.startDate > dateRange.startDate && (!candidateDateRange || dateRange.startDate < candidateDateRange.startDate)) {\n return otherDateRange;\n }\n }\n return candidateDateRange;\n }, null);\n if (nextDateRangeWithSameClass) {\n endTime = nextDateRangeWithSameClass.startTime;\n durationKnown = true;\n }\n }\n\n // Create TextTrack Cues for each MetadataGroup Item (select DateRange attribute)\n // This is to emulate Safari HLS playback handling of DateRange tags\n const attributes = Object.keys(dateRange.attr);\n for (let j = 0; j < attributes.length; j++) {\n const key = attributes[j];\n if (!isDateRangeCueAttribute(key)) {\n continue;\n }\n const cue = cues[key];\n if (cue) {\n if (durationKnown && !(appendedDateRangeCues != null && appendedDateRangeCues.durationKnown)) {\n cue.endTime = endTime;\n } else if (Math.abs(cue.startTime - startTime) > 0.01) {\n cue.startTime = startTime;\n cue.endTime = endTime;\n }\n } else if (Cue) {\n let data = dateRange.attr[key];\n if (isSCTE35Attribute(key)) {\n data = hexToArrayBuffer(data);\n }\n const payload = {\n key,\n data\n };\n const _cue = createCueWithDataFields(Cue, startTime, endTime, payload, MetadataSchema.dateRange);\n if (_cue) {\n _cue.id = id;\n this.id3Track.addCue(_cue);\n cues[key] = _cue;\n if (interstitialsController) {\n if (key === 'X-ASSET-LIST' || key === 'X-ASSET-URL') {\n _cue.addEventListener('enter', this.onEventCueEnter);\n }\n }\n }\n }\n }\n\n // Keep track of processed DateRanges by ID for updating cues with new DateRange tag attributes\n dateRangeCuesAppended[id] = {\n cues,\n dateRange,\n durationKnown\n };\n }\n }\n}\n\nclass LatencyController {\n constructor(hls) {\n this.hls = void 0;\n this.config = void 0;\n this.media = null;\n this.currentTime = 0;\n this.stallCount = 0;\n this._latency = null;\n this._targetLatencyUpdated = false;\n this.onTimeupdate = () => {\n const {\n media\n } = this;\n const levelDetails = this.levelDetails;\n if (!media || !levelDetails) {\n return;\n }\n this.currentTime = media.currentTime;\n const latency = this.computeLatency();\n if (latency === null) {\n return;\n }\n this._latency = latency;\n\n // Adapt playbackRate to meet target latency in low-latency mode\n const {\n lowLatencyMode,\n maxLiveSyncPlaybackRate\n } = this.config;\n if (!lowLatencyMode || maxLiveSyncPlaybackRate === 1 || !levelDetails.live) {\n return;\n }\n const targetLatency = this.targetLatency;\n if (targetLatency === null) {\n return;\n }\n const distanceFromTarget = latency - targetLatency;\n // Only adjust playbackRate when within one target duration of targetLatency\n // and more than one second from under-buffering.\n // Playback further than one target duration from target can be considered DVR playback.\n const liveMinLatencyDuration = Math.min(this.maxLatency, targetLatency + levelDetails.targetduration);\n const inLiveRange = distanceFromTarget < liveMinLatencyDuration;\n if (inLiveRange && distanceFromTarget > 0.05 && this.forwardBufferLength > 1) {\n const max = Math.min(2, Math.max(1.0, maxLiveSyncPlaybackRate));\n const rate = Math.round(2 / (1 + Math.exp(-0.75 * distanceFromTarget - this.edgeStalled)) * 20) / 20;\n const playbackRate = Math.min(max, Math.max(1, rate));\n this.changeMediaPlaybackRate(media, playbackRate);\n } else if (media.playbackRate !== 1 && media.playbackRate !== 0) {\n this.changeMediaPlaybackRate(media, 1);\n }\n };\n this.hls = hls;\n this.config = hls.config;\n this.registerListeners();\n }\n get levelDetails() {\n var _this$hls;\n return ((_this$hls = this.hls) == null ? void 0 : _this$hls.latestLevelDetails) || null;\n }\n get latency() {\n return this._latency || 0;\n }\n get maxLatency() {\n const {\n config\n } = this;\n if (config.liveMaxLatencyDuration !== undefined) {\n return config.liveMaxLatencyDuration;\n }\n const levelDetails = this.levelDetails;\n return levelDetails ? config.liveMaxLatencyDurationCount * levelDetails.targetduration : 0;\n }\n get targetLatency() {\n const levelDetails = this.levelDetails;\n if (levelDetails === null || this.hls === null) {\n return null;\n }\n const {\n holdBack,\n partHoldBack,\n targetduration\n } = levelDetails;\n const {\n liveSyncDuration,\n liveSyncDurationCount,\n lowLatencyMode\n } = this.config;\n const userConfig = this.hls.userConfig;\n let targetLatency = lowLatencyMode ? partHoldBack || holdBack : holdBack;\n if (this._targetLatencyUpdated || userConfig.liveSyncDuration || userConfig.liveSyncDurationCount || targetLatency === 0) {\n targetLatency = liveSyncDuration !== undefined ? liveSyncDuration : liveSyncDurationCount * targetduration;\n }\n const maxLiveSyncOnStallIncrease = targetduration;\n return targetLatency + Math.min(this.stallCount * this.config.liveSyncOnStallIncrease, maxLiveSyncOnStallIncrease);\n }\n set targetLatency(latency) {\n this.stallCount = 0;\n this.config.liveSyncDuration = latency;\n this._targetLatencyUpdated = true;\n }\n get liveSyncPosition() {\n const liveEdge = this.estimateLiveEdge();\n const targetLatency = this.targetLatency;\n if (liveEdge === null || targetLatency === null) {\n return null;\n }\n const levelDetails = this.levelDetails;\n if (levelDetails === null) {\n return null;\n }\n const edge = levelDetails.edge;\n const syncPosition = liveEdge - targetLatency - this.edgeStalled;\n const min = edge - levelDetails.totalduration;\n const max = edge - (this.config.lowLatencyMode && levelDetails.partTarget || levelDetails.targetduration);\n return Math.min(Math.max(min, syncPosition), max);\n }\n get drift() {\n const levelDetails = this.levelDetails;\n if (levelDetails === null) {\n return 1;\n }\n return levelDetails.drift;\n }\n get edgeStalled() {\n const levelDetails = this.levelDetails;\n if (levelDetails === null) {\n return 0;\n }\n const maxLevelUpdateAge = (this.config.lowLatencyMode && levelDetails.partTarget || levelDetails.targetduration) * 3;\n return Math.max(levelDetails.age - maxLevelUpdateAge, 0);\n }\n get forwardBufferLength() {\n const {\n media\n } = this;\n const levelDetails = this.levelDetails;\n if (!media || !levelDetails) {\n return 0;\n }\n const bufferedRanges = media.buffered.length;\n return (bufferedRanges ? media.buffered.end(bufferedRanges - 1) : levelDetails.edge) - this.currentTime;\n }\n destroy() {\n this.unregisterListeners();\n this.onMediaDetaching();\n this.hls = null;\n }\n registerListeners() {\n const {\n hls\n } = this;\n if (!hls) {\n return;\n }\n hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n hls.on(Events.ERROR, this.onError, this);\n }\n unregisterListeners() {\n const {\n hls\n } = this;\n if (!hls) {\n return;\n }\n hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n hls.off(Events.ERROR, this.onError, this);\n }\n onMediaAttached(event, data) {\n this.media = data.media;\n this.media.addEventListener('timeupdate', this.onTimeupdate);\n }\n onMediaDetaching() {\n if (this.media) {\n this.media.removeEventListener('timeupdate', this.onTimeupdate);\n this.media = null;\n }\n }\n onManifestLoading() {\n this._latency = null;\n this.stallCount = 0;\n }\n onLevelUpdated(event, {\n details\n }) {\n if (details.advanced) {\n this.onTimeupdate();\n }\n if (!details.live && this.media) {\n this.media.removeEventListener('timeupdate', this.onTimeupdate);\n }\n }\n onError(event, data) {\n var _this$levelDetails;\n if (data.details !== ErrorDetails.BUFFER_STALLED_ERROR) {\n return;\n }\n this.stallCount++;\n if (this.hls && (_this$levelDetails = this.levelDetails) != null && _this$levelDetails.live) {\n this.hls.logger.warn('[latency-controller]: Stall detected, adjusting target latency');\n }\n }\n changeMediaPlaybackRate(media, playbackRate) {\n var _this$hls2, _this$targetLatency;\n if (media.playbackRate === playbackRate) {\n return;\n }\n (_this$hls2 = this.hls) == null || _this$hls2.logger.debug(`[latency-controller]: latency=${this.latency.toFixed(3)}, targetLatency=${(_this$targetLatency = this.targetLatency) == null ? void 0 : _this$targetLatency.toFixed(3)}, forwardBufferLength=${this.forwardBufferLength.toFixed(3)}: adjusting playback rate from ${media.playbackRate} to ${playbackRate}`);\n media.playbackRate = playbackRate;\n }\n estimateLiveEdge() {\n const levelDetails = this.levelDetails;\n if (levelDetails === null) {\n return null;\n }\n return levelDetails.edge + levelDetails.age;\n }\n computeLatency() {\n const liveEdge = this.estimateLiveEdge();\n if (liveEdge === null) {\n return null;\n }\n return liveEdge - this.currentTime;\n }\n}\n\nclass LevelController extends BasePlaylistController {\n constructor(hls, contentSteeringController) {\n super(hls, 'level-controller');\n this._levels = [];\n this._firstLevel = -1;\n this._maxAutoLevel = -1;\n this._startLevel = void 0;\n this.currentLevel = null;\n this.currentLevelIndex = -1;\n this.manualLevelIndex = -1;\n this.steering = void 0;\n this.onParsedComplete = void 0;\n this.steering = contentSteeringController;\n this._registerListeners();\n }\n _registerListeners() {\n const {\n hls\n } = this;\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n hls.on(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n hls.on(Events.ERROR, this.onError, this);\n }\n _unregisterListeners() {\n const {\n hls\n } = this;\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n hls.off(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n hls.off(Events.ERROR, this.onError, this);\n }\n destroy() {\n this._unregisterListeners();\n this.steering = null;\n this.resetLevels();\n super.destroy();\n }\n stopLoad() {\n const levels = this._levels;\n\n // clean up live level details to force reload them, and reset load errors\n levels.forEach(level => {\n level.loadError = 0;\n level.fragmentError = 0;\n });\n super.stopLoad();\n }\n resetLevels() {\n this._startLevel = undefined;\n this.manualLevelIndex = -1;\n this.currentLevelIndex = -1;\n this.currentLevel = null;\n this._levels = [];\n this._maxAutoLevel = -1;\n }\n onManifestLoading(event, data) {\n this.resetLevels();\n }\n onManifestLoaded(event, data) {\n const preferManagedMediaSource = this.hls.config.preferManagedMediaSource;\n const levels = [];\n const redundantSet = {};\n const generatePathwaySet = {};\n let resolutionFound = false;\n let videoCodecFound = false;\n let audioCodecFound = false;\n data.levels.forEach(levelParsed => {\n const attributes = levelParsed.attrs;\n let {\n audioCodec,\n videoCodec\n } = levelParsed;\n if (audioCodec) {\n // Returns empty and set to undefined for 'mp4a.40.34' with fallback to 'audio/mpeg' SourceBuffer\n levelParsed.audioCodec = audioCodec = getCodecCompatibleName(audioCodec, preferManagedMediaSource) || undefined;\n }\n if (videoCodec) {\n videoCodec = levelParsed.videoCodec = convertAVC1ToAVCOTI(videoCodec);\n }\n\n // only keep levels with supported audio/video codecs\n const {\n width,\n height,\n unknownCodecs\n } = levelParsed;\n const unknownUnsupportedCodecCount = (unknownCodecs == null ? void 0 : unknownCodecs.length) || 0;\n resolutionFound || (resolutionFound = !!(width && height));\n videoCodecFound || (videoCodecFound = !!videoCodec);\n audioCodecFound || (audioCodecFound = !!audioCodec);\n if (unknownUnsupportedCodecCount || audioCodec && !this.isAudioSupported(audioCodec) || videoCodec && !this.isVideoSupported(videoCodec)) {\n this.log(`Some or all CODECS not supported \"${attributes.CODECS}\"`);\n return;\n }\n const {\n CODECS,\n 'FRAME-RATE': FRAMERATE,\n 'HDCP-LEVEL': HDCP,\n 'PATHWAY-ID': PATHWAY,\n RESOLUTION,\n 'VIDEO-RANGE': VIDEO_RANGE\n } = attributes;\n const contentSteeringPrefix = `${PATHWAY || '.'}-`;\n const levelKey = `${contentSteeringPrefix}${levelParsed.bitrate}-${RESOLUTION}-${FRAMERATE}-${CODECS}-${VIDEO_RANGE}-${HDCP}`;\n if (!redundantSet[levelKey]) {\n const level = this.createLevel(levelParsed);\n redundantSet[levelKey] = level;\n generatePathwaySet[levelKey] = 1;\n levels.push(level);\n } else if (redundantSet[levelKey].uri !== levelParsed.url && !levelParsed.attrs['PATHWAY-ID']) {\n // Assign Pathway IDs to Redundant Streams (default Pathways is \".\". Redundant Streams \"..\", \"...\", and so on.)\n // Content Steering controller to handles Pathway fallback on error\n const pathwayCount = generatePathwaySet[levelKey] += 1;\n levelParsed.attrs['PATHWAY-ID'] = new Array(pathwayCount + 1).join('.');\n const level = this.createLevel(levelParsed);\n redundantSet[levelKey] = level;\n levels.push(level);\n } else {\n redundantSet[levelKey].addGroupId('audio', attributes.AUDIO);\n redundantSet[levelKey].addGroupId('text', attributes.SUBTITLES);\n }\n });\n this.filterAndSortMediaOptions(levels, data, resolutionFound, videoCodecFound, audioCodecFound);\n }\n createLevel(levelParsed) {\n const level = new Level(levelParsed);\n const supplemental = levelParsed.supplemental;\n if (supplemental != null && supplemental.videoCodec && !this.isVideoSupported(supplemental.videoCodec)) {\n const error = new Error(`SUPPLEMENTAL-CODECS not supported \"${supplemental.videoCodec}\"`);\n this.log(error.message);\n level.supportedResult = getUnsupportedResult(error, []);\n }\n return level;\n }\n isAudioSupported(codec) {\n return areCodecsMediaSourceSupported(codec, 'audio', this.hls.config.preferManagedMediaSource);\n }\n isVideoSupported(codec) {\n return areCodecsMediaSourceSupported(codec, 'video', this.hls.config.preferManagedMediaSource);\n }\n filterAndSortMediaOptions(filteredLevels, data, resolutionFound, videoCodecFound, audioCodecFound) {\n var _data$stats;\n let audioTracks = [];\n let subtitleTracks = [];\n let levels = filteredLevels;\n const statsParsing = ((_data$stats = data.stats) == null ? void 0 : _data$stats.parsing) || {};\n\n // remove audio-only and invalid video-range levels if we also have levels with video codecs or RESOLUTION signalled\n if ((resolutionFound || videoCodecFound) && audioCodecFound) {\n levels = levels.filter(({\n videoCodec,\n videoRange,\n width,\n height\n }) => (!!videoCodec || !!(width && height)) && isVideoRange(videoRange));\n }\n if (levels.length === 0) {\n // Dispatch error after MANIFEST_LOADED is done propagating\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n Promise.resolve().then(() => {\n if (this.hls) {\n let message = 'no level with compatible codecs found in manifest';\n let reason = message;\n if (data.levels.length) {\n reason = `one or more CODECS in variant not supported: ${stringify(data.levels.map(level => level.attrs.CODECS).filter((value, index, array) => array.indexOf(value) === index))}`;\n this.warn(reason);\n message += ` (${reason})`;\n }\n const error = new Error(message);\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.MANIFEST_INCOMPATIBLE_CODECS_ERROR,\n fatal: true,\n url: data.url,\n error,\n reason\n });\n }\n });\n statsParsing.end = performance.now();\n return;\n }\n if (data.audioTracks) {\n audioTracks = data.audioTracks.filter(track => !track.audioCodec || this.isAudioSupported(track.audioCodec));\n // Assign ids after filtering as array indices by group-id\n assignTrackIdsByGroup(audioTracks);\n }\n if (data.subtitles) {\n subtitleTracks = data.subtitles;\n assignTrackIdsByGroup(subtitleTracks);\n }\n // start bitrate is the first bitrate of the manifest\n const unsortedLevels = levels.slice(0);\n // sort levels from lowest to highest\n levels.sort((a, b) => {\n if (a.attrs['HDCP-LEVEL'] !== b.attrs['HDCP-LEVEL']) {\n return (a.attrs['HDCP-LEVEL'] || '') > (b.attrs['HDCP-LEVEL'] || '') ? 1 : -1;\n }\n // sort on height before bitrate for cap-level-controller\n if (resolutionFound && a.height !== b.height) {\n return a.height - b.height;\n }\n if (a.frameRate !== b.frameRate) {\n return a.frameRate - b.frameRate;\n }\n if (a.videoRange !== b.videoRange) {\n return VideoRangeValues.indexOf(a.videoRange) - VideoRangeValues.indexOf(b.videoRange);\n }\n if (a.videoCodec !== b.videoCodec) {\n const valueA = videoCodecPreferenceValue(a.videoCodec);\n const valueB = videoCodecPreferenceValue(b.videoCodec);\n if (valueA !== valueB) {\n return valueB - valueA;\n }\n }\n if (a.uri === b.uri && a.codecSet !== b.codecSet) {\n const valueA = codecsSetSelectionPreferenceValue(a.codecSet);\n const valueB = codecsSetSelectionPreferenceValue(b.codecSet);\n if (valueA !== valueB) {\n return valueB - valueA;\n }\n }\n if (a.averageBitrate !== b.averageBitrate) {\n return a.averageBitrate - b.averageBitrate;\n }\n return 0;\n });\n let firstLevelInPlaylist = unsortedLevels[0];\n if (this.steering) {\n levels = this.steering.filterParsedLevels(levels);\n if (levels.length !== unsortedLevels.length) {\n for (let i = 0; i < unsortedLevels.length; i++) {\n if (unsortedLevels[i].pathwayId === levels[0].pathwayId) {\n firstLevelInPlaylist = unsortedLevels[i];\n break;\n }\n }\n }\n }\n this._levels = levels;\n\n // find index of first level in sorted levels\n for (let i = 0; i < levels.length; i++) {\n if (levels[i] === firstLevelInPlaylist) {\n var _this$hls$userConfig;\n this._firstLevel = i;\n const firstLevelBitrate = firstLevelInPlaylist.bitrate;\n const bandwidthEstimate = this.hls.bandwidthEstimate;\n this.log(`manifest loaded, ${levels.length} level(s) found, first bitrate: ${firstLevelBitrate}`);\n // Update default bwe to first variant bitrate as long it has not been configured or set\n if (((_this$hls$userConfig = this.hls.userConfig) == null ? void 0 : _this$hls$userConfig.abrEwmaDefaultEstimate) === undefined) {\n const startingBwEstimate = Math.min(firstLevelBitrate, this.hls.config.abrEwmaDefaultEstimateMax);\n if (startingBwEstimate > bandwidthEstimate && bandwidthEstimate === this.hls.abrEwmaDefaultEstimate) {\n this.hls.bandwidthEstimate = startingBwEstimate;\n }\n }\n break;\n }\n }\n\n // Audio is only alternate if manifest include a URI along with the audio group tag,\n // and this is not an audio-only stream where levels contain audio-only\n const audioOnly = audioCodecFound && !videoCodecFound;\n const config = this.hls.config;\n const altAudioEnabled = !!(config.audioStreamController && config.audioTrackController);\n const edata = {\n levels,\n audioTracks,\n subtitleTracks,\n sessionData: data.sessionData,\n sessionKeys: data.sessionKeys,\n firstLevel: this._firstLevel,\n stats: data.stats,\n audio: audioCodecFound,\n video: videoCodecFound,\n altAudio: altAudioEnabled && !audioOnly && audioTracks.some(t => !!t.url)\n };\n statsParsing.end = performance.now();\n this.hls.trigger(Events.MANIFEST_PARSED, edata);\n }\n get levels() {\n if (this._levels.length === 0) {\n return null;\n }\n return this._levels;\n }\n get loadLevelObj() {\n return this.currentLevel;\n }\n get level() {\n return this.currentLevelIndex;\n }\n set level(newLevel) {\n const levels = this._levels;\n if (levels.length === 0) {\n return;\n }\n // check if level idx is valid\n if (newLevel < 0 || newLevel >= levels.length) {\n // invalid level id given, trigger error\n const error = new Error('invalid level idx');\n const fatal = newLevel < 0;\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.LEVEL_SWITCH_ERROR,\n level: newLevel,\n fatal,\n error,\n reason: error.message\n });\n if (fatal) {\n return;\n }\n newLevel = Math.min(newLevel, levels.length - 1);\n }\n const lastLevelIndex = this.currentLevelIndex;\n const lastLevel = this.currentLevel;\n const lastPathwayId = lastLevel ? lastLevel.attrs['PATHWAY-ID'] : undefined;\n const level = levels[newLevel];\n const pathwayId = level.attrs['PATHWAY-ID'];\n this.currentLevelIndex = newLevel;\n this.currentLevel = level;\n if (lastLevelIndex === newLevel && lastLevel && lastPathwayId === pathwayId) {\n return;\n }\n this.log(`Switching to level ${newLevel} (${level.height ? level.height + 'p ' : ''}${level.videoRange ? level.videoRange + ' ' : ''}${level.codecSet ? level.codecSet + ' ' : ''}@${level.bitrate})${pathwayId ? ' with Pathway ' + pathwayId : ''} from level ${lastLevelIndex}${lastPathwayId ? ' with Pathway ' + lastPathwayId : ''}`);\n const levelSwitchingData = {\n level: newLevel,\n attrs: level.attrs,\n details: level.details,\n bitrate: level.bitrate,\n averageBitrate: level.averageBitrate,\n maxBitrate: level.maxBitrate,\n realBitrate: level.realBitrate,\n width: level.width,\n height: level.height,\n codecSet: level.codecSet,\n audioCodec: level.audioCodec,\n videoCodec: level.videoCodec,\n audioGroups: level.audioGroups,\n subtitleGroups: level.subtitleGroups,\n loaded: level.loaded,\n loadError: level.loadError,\n fragmentError: level.fragmentError,\n name: level.name,\n id: level.id,\n uri: level.uri,\n url: level.url,\n urlId: 0,\n audioGroupIds: level.audioGroupIds,\n textGroupIds: level.textGroupIds\n };\n this.hls.trigger(Events.LEVEL_SWITCHING, levelSwitchingData);\n // check if we need to load playlist for this level\n const levelDetails = level.details;\n if (!levelDetails || levelDetails.live) {\n // level not retrieved yet, or live playlist we need to (re)load it\n const hlsUrlParameters = this.switchParams(level.uri, lastLevel == null ? void 0 : lastLevel.details, levelDetails);\n this.loadPlaylist(hlsUrlParameters);\n }\n }\n get manualLevel() {\n return this.manualLevelIndex;\n }\n set manualLevel(newLevel) {\n this.manualLevelIndex = newLevel;\n if (this._startLevel === undefined) {\n this._startLevel = newLevel;\n }\n if (newLevel !== -1) {\n this.level = newLevel;\n }\n }\n get firstLevel() {\n return this._firstLevel;\n }\n set firstLevel(newLevel) {\n this._firstLevel = newLevel;\n }\n get startLevel() {\n // Setting hls.startLevel (this._startLevel) overrides config.startLevel\n if (this._startLevel === undefined) {\n const configStartLevel = this.hls.config.startLevel;\n if (configStartLevel !== undefined) {\n return configStartLevel;\n }\n return this.hls.firstAutoLevel;\n }\n return this._startLevel;\n }\n set startLevel(newLevel) {\n this._startLevel = newLevel;\n }\n get pathways() {\n if (this.steering) {\n return this.steering.pathways();\n }\n return [];\n }\n get pathwayPriority() {\n if (this.steering) {\n return this.steering.pathwayPriority;\n }\n return null;\n }\n set pathwayPriority(pathwayPriority) {\n if (this.steering) {\n const pathwaysList = this.steering.pathways();\n const filteredPathwayPriority = pathwayPriority.filter(pathwayId => {\n return pathwaysList.indexOf(pathwayId) !== -1;\n });\n if (pathwayPriority.length < 1) {\n this.warn(`pathwayPriority ${pathwayPriority} should contain at least one pathway from list: ${pathwaysList}`);\n return;\n }\n this.steering.pathwayPriority = filteredPathwayPriority;\n }\n }\n onError(event, data) {\n if (data.fatal || !data.context) {\n return;\n }\n if (data.context.type === PlaylistContextType.LEVEL && data.context.level === this.level) {\n this.checkRetry(data);\n }\n }\n\n // reset errors on the successful load of a fragment\n onFragBuffered(event, {\n frag\n }) {\n if (frag !== undefined && frag.type === PlaylistLevelType.MAIN) {\n const el = frag.elementaryStreams;\n if (!Object.keys(el).some(type => !!el[type])) {\n return;\n }\n const level = this._levels[frag.level];\n if (level != null && level.loadError) {\n this.log(`Resetting level error count of ${level.loadError} on frag buffered`);\n level.loadError = 0;\n }\n }\n }\n onLevelLoaded(event, data) {\n var _data$deliveryDirecti2;\n const {\n level,\n details\n } = data;\n const curLevel = data.levelInfo;\n if (!curLevel) {\n var _data$deliveryDirecti;\n this.warn(`Invalid level index ${level}`);\n if ((_data$deliveryDirecti = data.deliveryDirectives) != null && _data$deliveryDirecti.skip) {\n details.deltaUpdateFailed = true;\n }\n return;\n }\n\n // only process level loaded events matching with expected level or prior to switch when media playlist is loaded directly\n if (curLevel === this.currentLevel || data.withoutMultiVariant) {\n // reset level load error counter on successful level loaded only if there is no issues with fragments\n if (curLevel.fragmentError === 0) {\n curLevel.loadError = 0;\n }\n // Ignore matching details populated by loading a Media Playlist directly\n let previousDetails = curLevel.details;\n if (previousDetails === data.details && previousDetails.advanced) {\n previousDetails = undefined;\n }\n this.playlistLoaded(level, data, previousDetails);\n } else if ((_data$deliveryDirecti2 = data.deliveryDirectives) != null && _data$deliveryDirecti2.skip) {\n // received a delta playlist update that cannot be merged\n details.deltaUpdateFailed = true;\n }\n }\n loadPlaylist(hlsUrlParameters) {\n super.loadPlaylist();\n if (this.shouldLoadPlaylist(this.currentLevel)) {\n this.scheduleLoading(this.currentLevel, hlsUrlParameters);\n }\n }\n loadingPlaylist(currentLevel, hlsUrlParameters) {\n super.loadingPlaylist(currentLevel, hlsUrlParameters);\n const url = this.getUrlWithDirectives(currentLevel.uri, hlsUrlParameters);\n const currentLevelIndex = this.currentLevelIndex;\n const pathwayId = currentLevel.attrs['PATHWAY-ID'];\n const details = currentLevel.details;\n const age = details == null ? void 0 : details.age;\n this.log(`Loading level index ${currentLevelIndex}${(hlsUrlParameters == null ? void 0 : hlsUrlParameters.msn) !== undefined ? ' at sn ' + hlsUrlParameters.msn + ' part ' + hlsUrlParameters.part : ''}${pathwayId ? ' Pathway ' + pathwayId : ''}${age && details.live ? ' age ' + age.toFixed(1) + (details.type ? ' ' + details.type || '' : '') : ''} ${url}`);\n this.hls.trigger(Events.LEVEL_LOADING, {\n url,\n level: currentLevelIndex,\n levelInfo: currentLevel,\n pathwayId: currentLevel.attrs['PATHWAY-ID'],\n id: 0,\n // Deprecated Level urlId\n deliveryDirectives: hlsUrlParameters || null\n });\n }\n get nextLoadLevel() {\n if (this.manualLevelIndex !== -1) {\n return this.manualLevelIndex;\n } else {\n return this.hls.nextAutoLevel;\n }\n }\n set nextLoadLevel(nextLevel) {\n this.level = nextLevel;\n if (this.manualLevelIndex === -1) {\n this.hls.nextAutoLevel = nextLevel;\n }\n }\n removeLevel(levelIndex) {\n var _this$currentLevel;\n if (this._levels.length === 1) {\n return;\n }\n const levels = this._levels.filter((level, index) => {\n if (index !== levelIndex) {\n return true;\n }\n if (this.steering) {\n this.steering.removeLevel(level);\n }\n if (level === this.currentLevel) {\n this.currentLevel = null;\n this.currentLevelIndex = -1;\n if (level.details) {\n level.details.fragments.forEach(f => f.level = -1);\n }\n }\n return false;\n });\n reassignFragmentLevelIndexes(levels);\n this._levels = levels;\n if (this.currentLevelIndex > -1 && (_this$currentLevel = this.currentLevel) != null && _this$currentLevel.details) {\n this.currentLevelIndex = this.currentLevel.details.fragments[0].level;\n }\n if (this.manualLevelIndex > -1) {\n this.manualLevelIndex = this.currentLevelIndex;\n }\n const maxLevel = levels.length - 1;\n this._firstLevel = Math.min(this._firstLevel, maxLevel);\n if (this._startLevel) {\n this._startLevel = Math.min(this._startLevel, maxLevel);\n }\n this.hls.trigger(Events.LEVELS_UPDATED, {\n levels\n });\n }\n onLevelsUpdated(event, {\n levels\n }) {\n this._levels = levels;\n }\n checkMaxAutoUpdated() {\n const {\n autoLevelCapping,\n maxAutoLevel,\n maxHdcpLevel\n } = this.hls;\n if (this._maxAutoLevel !== maxAutoLevel) {\n this._maxAutoLevel = maxAutoLevel;\n this.hls.trigger(Events.MAX_AUTO_LEVEL_UPDATED, {\n autoLevelCapping,\n levels: this.levels,\n maxAutoLevel,\n minAutoLevel: this.hls.minAutoLevel,\n maxHdcpLevel\n });\n }\n }\n}\nfunction assignTrackIdsByGroup(tracks) {\n const groups = {};\n tracks.forEach(track => {\n const groupId = track.groupId || '';\n track.id = groups[groupId] = groups[groupId] || 0;\n groups[groupId]++;\n });\n}\n\nfunction getSourceBuffer() {\n return self.SourceBuffer || self.WebKitSourceBuffer;\n}\nfunction isMSESupported() {\n const mediaSource = getMediaSource();\n if (!mediaSource) {\n return false;\n }\n\n // if SourceBuffer is exposed ensure its API is valid\n // Older browsers do not expose SourceBuffer globally so checking SourceBuffer.prototype is impossible\n const sourceBuffer = getSourceBuffer();\n return !sourceBuffer || sourceBuffer.prototype && typeof sourceBuffer.prototype.appendBuffer === 'function' && typeof sourceBuffer.prototype.remove === 'function';\n}\nfunction isSupported() {\n if (!isMSESupported()) {\n return false;\n }\n const mediaSource = getMediaSource();\n return typeof (mediaSource == null ? void 0 : mediaSource.isTypeSupported) === 'function' && (['avc1.42E01E,mp4a.40.2', 'av01.0.01M.08', 'vp09.00.50.08'].some(codecsForVideoContainer => mediaSource.isTypeSupported(mimeTypeForCodec(codecsForVideoContainer, 'video'))) || ['mp4a.40.2', 'fLaC'].some(codecForAudioContainer => mediaSource.isTypeSupported(mimeTypeForCodec(codecForAudioContainer, 'audio'))));\n}\nfunction changeTypeSupported() {\n var _sourceBuffer$prototy;\n const sourceBuffer = getSourceBuffer();\n return typeof (sourceBuffer == null || (_sourceBuffer$prototy = sourceBuffer.prototype) == null ? void 0 : _sourceBuffer$prototy.changeType) === 'function';\n}\n\nconst TICK_INTERVAL = 100; // how often to tick in ms\n\nclass StreamController extends BaseStreamController {\n constructor(hls, fragmentTracker, keyLoader) {\n super(hls, fragmentTracker, keyLoader, 'stream-controller', PlaylistLevelType.MAIN);\n this.audioCodecSwap = false;\n this.level = -1;\n this._forceStartLoad = false;\n this._hasEnoughToStart = false;\n this.altAudio = 0;\n this.audioOnly = false;\n this.fragPlaying = null;\n this.fragLastKbps = 0;\n this.couldBacktrack = false;\n this.backtrackFragment = null;\n this.audioCodecSwitch = false;\n this.videoBuffer = null;\n this.onMediaPlaying = () => {\n // tick to speed up FRAG_CHANGED triggering\n this.tick();\n };\n this.onMediaSeeked = () => {\n const media = this.media;\n const currentTime = media ? media.currentTime : null;\n if (currentTime === null || !isFiniteNumber(currentTime)) {\n return;\n }\n this.log(`Media seeked to ${currentTime.toFixed(3)}`);\n\n // If seeked was issued before buffer was appended do not tick immediately\n if (!this.getBufferedFrag(currentTime)) {\n return;\n }\n const bufferInfo = this.getFwdBufferInfoAtPos(media, currentTime, PlaylistLevelType.MAIN, 0);\n if (bufferInfo === null || bufferInfo.len === 0) {\n this.warn(`Main forward buffer length at ${currentTime} on \"seeked\" event ${bufferInfo ? bufferInfo.len : 'empty'})`);\n return;\n }\n\n // tick to speed up FRAG_CHANGED triggering\n this.tick();\n };\n this.registerListeners();\n }\n registerListeners() {\n super.registerListeners();\n const {\n hls\n } = this;\n hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.on(Events.LEVEL_LOADING, this.onLevelLoading, this);\n hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n hls.on(Events.FRAG_LOAD_EMERGENCY_ABORTED, this.onFragLoadEmergencyAborted, this);\n hls.on(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n hls.on(Events.AUDIO_TRACK_SWITCHED, this.onAudioTrackSwitched, this);\n hls.on(Events.BUFFER_CREATED, this.onBufferCreated, this);\n hls.on(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n hls.on(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n }\n unregisterListeners() {\n super.unregisterListeners();\n const {\n hls\n } = this;\n hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n hls.off(Events.FRAG_LOAD_EMERGENCY_ABORTED, this.onFragLoadEmergencyAborted, this);\n hls.off(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n hls.off(Events.AUDIO_TRACK_SWITCHED, this.onAudioTrackSwitched, this);\n hls.off(Events.BUFFER_CREATED, this.onBufferCreated, this);\n hls.off(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n hls.off(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n }\n onHandlerDestroying() {\n // @ts-ignore\n this.onMediaPlaying = this.onMediaSeeked = null;\n this.unregisterListeners();\n super.onHandlerDestroying();\n }\n startLoad(startPosition, skipSeekToStartPosition) {\n if (this.levels) {\n const {\n lastCurrentTime,\n hls\n } = this;\n this.stopLoad();\n this.setInterval(TICK_INTERVAL);\n this.level = -1;\n if (!this.startFragRequested) {\n // determine load level\n let startLevel = hls.startLevel;\n if (startLevel === -1) {\n if (hls.config.testBandwidth && this.levels.length > 1) {\n // -1 : guess start Level by doing a bitrate test by loading first fragment of lowest quality level\n startLevel = 0;\n this.bitrateTest = true;\n } else {\n startLevel = hls.firstAutoLevel;\n }\n }\n // set new level to playlist loader : this will trigger start level load\n // hls.nextLoadLevel remains until it is set to a new value or until a new frag is successfully loaded\n hls.nextLoadLevel = startLevel;\n this.level = hls.loadLevel;\n this._hasEnoughToStart = !!skipSeekToStartPosition;\n }\n // if startPosition undefined but lastCurrentTime set, set startPosition to last currentTime\n if (lastCurrentTime > 0 && startPosition === -1 && !skipSeekToStartPosition) {\n this.log(`Override startPosition with lastCurrentTime @${lastCurrentTime.toFixed(3)}`);\n startPosition = lastCurrentTime;\n }\n this.state = State.IDLE;\n this.nextLoadPosition = this.lastCurrentTime = startPosition + this.timelineOffset;\n this.startPosition = skipSeekToStartPosition ? -1 : startPosition;\n this.tick();\n } else {\n this._forceStartLoad = true;\n this.state = State.STOPPED;\n }\n }\n stopLoad() {\n this._forceStartLoad = false;\n super.stopLoad();\n }\n doTick() {\n switch (this.state) {\n case State.WAITING_LEVEL:\n {\n const {\n levels,\n level\n } = this;\n const currentLevel = levels == null ? void 0 : levels[level];\n const details = currentLevel == null ? void 0 : currentLevel.details;\n if (details && (!details.live || this.levelLastLoaded === currentLevel && !this.waitForLive(currentLevel))) {\n if (this.waitForCdnTuneIn(details)) {\n break;\n }\n this.state = State.IDLE;\n break;\n } else if (this.hls.nextLoadLevel !== this.level) {\n this.state = State.IDLE;\n break;\n }\n break;\n }\n case State.FRAG_LOADING_WAITING_RETRY:\n this.checkRetryDate();\n break;\n }\n if (this.state === State.IDLE) {\n this.doTickIdle();\n }\n this.onTickEnd();\n }\n onTickEnd() {\n var _this$media;\n super.onTickEnd();\n if ((_this$media = this.media) != null && _this$media.readyState && this.media.seeking === false) {\n this.lastCurrentTime = this.media.currentTime;\n }\n this.checkFragmentChanged();\n }\n doTickIdle() {\n const {\n hls,\n levelLastLoaded,\n levels,\n media\n } = this;\n\n // if start level not parsed yet OR\n // if video not attached AND start fragment already requested OR start frag prefetch not enabled\n // exit loop, as we either need more info (level not parsed) or we need media to be attached to load new fragment\n if (levelLastLoaded === null || !media && !this.primaryPrefetch && (this.startFragRequested || !hls.config.startFragPrefetch)) {\n return;\n }\n\n // If the \"main\" level is audio-only but we are loading an alternate track in the same group, do not load anything\n if (this.altAudio && this.audioOnly) {\n return;\n }\n const level = this.buffering ? hls.nextLoadLevel : hls.loadLevel;\n if (!(levels != null && levels[level])) {\n return;\n }\n const levelInfo = levels[level];\n\n // if buffer length is less than maxBufLen try to load a new fragment\n\n const bufferInfo = this.getMainFwdBufferInfo();\n if (bufferInfo === null) {\n return;\n }\n const lastDetails = this.getLevelDetails();\n if (lastDetails && this._streamEnded(bufferInfo, lastDetails)) {\n const data = {};\n if (this.altAudio === 2) {\n data.type = 'video';\n }\n this.hls.trigger(Events.BUFFER_EOS, data);\n this.state = State.ENDED;\n return;\n }\n if (!this.buffering) {\n return;\n }\n\n // set next load level : this will trigger a playlist load if needed\n if (hls.loadLevel !== level && hls.manualLevel === -1) {\n this.log(`Adapting to level ${level} from level ${this.level}`);\n }\n this.level = hls.nextLoadLevel = level;\n const levelDetails = levelInfo.details;\n // if level info not retrieved yet, switch state and wait for level retrieval\n // if live playlist, ensure that new playlist has been refreshed to avoid loading/try to load\n // a useless and outdated fragment (that might even introduce load error if it is already out of the live playlist)\n if (!levelDetails || this.state === State.WAITING_LEVEL || this.waitForLive(levelInfo)) {\n this.level = level;\n this.state = State.WAITING_LEVEL;\n this.startFragRequested = false;\n return;\n }\n const bufferLen = bufferInfo.len;\n\n // compute max Buffer Length that we could get from this load level, based on level bitrate. don't buffer more than 60 MB and more than 30s\n const maxBufLen = this.getMaxBufferLength(levelInfo.maxBitrate);\n\n // Stay idle if we are still with buffer margins\n if (bufferLen >= maxBufLen) {\n return;\n }\n if (this.backtrackFragment && this.backtrackFragment.start > bufferInfo.end) {\n this.backtrackFragment = null;\n }\n const targetBufferTime = this.backtrackFragment ? this.backtrackFragment.start : bufferInfo.end;\n let frag = this.getNextFragment(targetBufferTime, levelDetails);\n // Avoid backtracking by loading an earlier segment in streams with segments that do not start with a key frame (flagged by `couldBacktrack`)\n if (this.couldBacktrack && !this.fragPrevious && frag && isMediaFragment(frag) && this.fragmentTracker.getState(frag) !== FragmentState.OK) {\n var _this$backtrackFragme;\n const backtrackSn = ((_this$backtrackFragme = this.backtrackFragment) != null ? _this$backtrackFragme : frag).sn;\n const fragIdx = backtrackSn - levelDetails.startSN;\n const backtrackFrag = levelDetails.fragments[fragIdx - 1];\n if (backtrackFrag && frag.cc === backtrackFrag.cc) {\n frag = backtrackFrag;\n this.fragmentTracker.removeFragment(backtrackFrag);\n }\n } else if (this.backtrackFragment && bufferInfo.len) {\n this.backtrackFragment = null;\n }\n // Avoid loop loading by using nextLoadPosition set for backtracking and skipping consecutive GAP tags\n if (frag && this.isLoopLoading(frag, targetBufferTime)) {\n const gapStart = frag.gap;\n if (!gapStart) {\n // Cleanup the fragment tracker before trying to find the next unbuffered fragment\n const type = this.audioOnly && !this.altAudio ? ElementaryStreamTypes.AUDIO : ElementaryStreamTypes.VIDEO;\n const mediaBuffer = (type === ElementaryStreamTypes.VIDEO ? this.videoBuffer : this.mediaBuffer) || this.media;\n if (mediaBuffer) {\n this.afterBufferFlushed(mediaBuffer, type, PlaylistLevelType.MAIN);\n }\n }\n frag = this.getNextFragmentLoopLoading(frag, levelDetails, bufferInfo, PlaylistLevelType.MAIN, maxBufLen);\n }\n if (!frag) {\n return;\n }\n if (this.exceedsMaxBuffer(bufferInfo, maxBufLen, frag)) {\n return;\n }\n if (frag.initSegment && !frag.initSegment.data && !this.bitrateTest) {\n frag = frag.initSegment;\n }\n this.loadFragment(frag, levelInfo, targetBufferTime);\n }\n loadFragment(frag, level, targetBufferTime) {\n // Check if fragment is not loaded\n const fragState = this.fragmentTracker.getState(frag);\n if (fragState === FragmentState.NOT_LOADED || fragState === FragmentState.PARTIAL) {\n if (!isMediaFragment(frag)) {\n this._loadInitSegment(frag, level);\n } else if (this.bitrateTest) {\n this.log(`Fragment ${frag.sn} of level ${frag.level} is being downloaded to test bitrate and will not be buffered`);\n this._loadBitrateTestFrag(frag, level);\n } else {\n super.loadFragment(frag, level, targetBufferTime);\n }\n } else {\n this.clearTrackerIfNeeded(frag);\n }\n }\n getBufferedFrag(position) {\n return this.fragmentTracker.getBufferedFrag(position, PlaylistLevelType.MAIN);\n }\n followingBufferedFrag(frag) {\n if (frag) {\n // try to get range of next fragment (500ms after this range)\n return this.getBufferedFrag(frag.end + 0.5);\n }\n return null;\n }\n\n /*\n on immediate level switch :\n - pause playback if playing\n - cancel any pending load request\n - and trigger a buffer flush\n */\n immediateLevelSwitch() {\n this.abortCurrentFrag();\n this.flushMainBuffer(0, Number.POSITIVE_INFINITY);\n if (this.altAudio !== 0) {\n var _this$getLevelDetails;\n // If behind the live window, remove audio too to keep buffered media aligned\n const liveWindowStart = ((_this$getLevelDetails = this.getLevelDetails()) == null ? void 0 : _this$getLevelDetails.fragmentStart) || 0;\n if (liveWindowStart > this.lastCurrentTime) {\n super.flushMainBuffer(0, Number.POSITIVE_INFINITY, 'audio');\n }\n }\n }\n\n /**\n * try to switch ASAP without breaking video playback:\n * in order to ensure smooth but quick level switching,\n * we need to find the next flushable buffer range\n * we should take into account new segment fetch time\n */\n nextLevelSwitch() {\n const {\n levels,\n media\n } = this;\n // ensure that media is defined and that metadata are available (to retrieve currentTime)\n if (media != null && media.readyState) {\n let fetchdelay;\n const fragPlayingCurrent = this.getAppendedFrag(media.currentTime);\n if (fragPlayingCurrent && fragPlayingCurrent.start > 1) {\n // flush buffer preceding current fragment (flush until current fragment start offset)\n // minus 1s to avoid video freezing, that could happen if we flush keyframe of current video ...\n this.flushMainBuffer(0, fragPlayingCurrent.start - 1);\n }\n const levelDetails = this.getLevelDetails();\n if (levelDetails != null && levelDetails.live) {\n const bufferInfo = this.getMainFwdBufferInfo();\n // Do not flush in live stream with low buffer\n if (!bufferInfo || bufferInfo.len < levelDetails.targetduration * 2) {\n return;\n }\n }\n if (!media.paused && levels) {\n // add a safety delay of 1s\n const nextLevelId = this.hls.nextLoadLevel;\n const nextLevel = levels[nextLevelId];\n const fragLastKbps = this.fragLastKbps;\n if (fragLastKbps && this.fragCurrent) {\n fetchdelay = this.fragCurrent.duration * nextLevel.maxBitrate / (1000 * fragLastKbps) + 1;\n } else {\n fetchdelay = 0;\n }\n } else {\n fetchdelay = 0;\n }\n // this.log('fetchdelay:'+fetchdelay);\n // find buffer range that will be reached once new fragment will be fetched\n const bufferedFrag = this.getBufferedFrag(media.currentTime + fetchdelay);\n if (bufferedFrag) {\n // we can flush buffer range following this one without stalling playback\n const nextBufferedFrag = this.followingBufferedFrag(bufferedFrag);\n if (nextBufferedFrag) {\n // if we are here, we can also cancel any loading/demuxing in progress, as they are useless\n this.abortCurrentFrag();\n // start flush position is in next buffered frag. Leave some padding for non-independent segments and smoother playback.\n const maxStart = nextBufferedFrag.maxStartPTS ? nextBufferedFrag.maxStartPTS : nextBufferedFrag.start;\n const fragDuration = nextBufferedFrag.duration;\n const startPts = Math.max(bufferedFrag.end, maxStart + Math.min(Math.max(fragDuration - this.config.maxFragLookUpTolerance, fragDuration * (this.couldBacktrack ? 0.5 : 0.125)), fragDuration * (this.couldBacktrack ? 0.75 : 0.25)));\n this.flushMainBuffer(startPts, Number.POSITIVE_INFINITY);\n }\n }\n }\n }\n abortCurrentFrag() {\n const fragCurrent = this.fragCurrent;\n this.fragCurrent = null;\n this.backtrackFragment = null;\n if (fragCurrent) {\n fragCurrent.abortRequests();\n this.fragmentTracker.removeFragment(fragCurrent);\n }\n switch (this.state) {\n case State.KEY_LOADING:\n case State.FRAG_LOADING:\n case State.FRAG_LOADING_WAITING_RETRY:\n case State.PARSING:\n case State.PARSED:\n this.state = State.IDLE;\n break;\n }\n this.nextLoadPosition = this.getLoadPosition();\n }\n flushMainBuffer(startOffset, endOffset) {\n super.flushMainBuffer(startOffset, endOffset, this.altAudio === 2 ? 'video' : null);\n }\n onMediaAttached(event, data) {\n super.onMediaAttached(event, data);\n const media = data.media;\n addEventListener(media, 'playing', this.onMediaPlaying);\n addEventListener(media, 'seeked', this.onMediaSeeked);\n }\n onMediaDetaching(event, data) {\n const {\n media\n } = this;\n if (media) {\n removeEventListener(media, 'playing', this.onMediaPlaying);\n removeEventListener(media, 'seeked', this.onMediaSeeked);\n }\n this.videoBuffer = null;\n this.fragPlaying = null;\n super.onMediaDetaching(event, data);\n const transferringMedia = !!data.transferMedia;\n if (transferringMedia) {\n return;\n }\n this._hasEnoughToStart = false;\n }\n onManifestLoading() {\n super.onManifestLoading();\n // reset buffer on manifest loading\n this.log('Trigger BUFFER_RESET');\n this.hls.trigger(Events.BUFFER_RESET, undefined);\n this.couldBacktrack = false;\n this.fragLastKbps = 0;\n this.fragPlaying = this.backtrackFragment = null;\n this.altAudio = 0;\n this.audioOnly = false;\n }\n onManifestParsed(event, data) {\n // detect if we have different kind of audio codecs used amongst playlists\n let aac = false;\n let heaac = false;\n for (let i = 0; i < data.levels.length; i++) {\n const codec = data.levels[i].audioCodec;\n if (codec) {\n aac = aac || codec.indexOf('mp4a.40.2') !== -1;\n heaac = heaac || codec.indexOf('mp4a.40.5') !== -1;\n }\n }\n this.audioCodecSwitch = aac && heaac && !changeTypeSupported();\n if (this.audioCodecSwitch) {\n this.log('Both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC');\n }\n this.levels = data.levels;\n this.startFragRequested = false;\n }\n onLevelLoading(event, data) {\n const {\n levels\n } = this;\n if (!levels || this.state !== State.IDLE) {\n return;\n }\n const level = data.levelInfo;\n if (!level.details || level.details.live && (this.levelLastLoaded !== level || level.details.expired) || this.waitForCdnTuneIn(level.details)) {\n this.state = State.WAITING_LEVEL;\n }\n }\n onLevelLoaded(event, data) {\n var _curLevel$details;\n const {\n levels,\n startFragRequested\n } = this;\n const newLevelId = data.level;\n const newDetails = data.details;\n const duration = newDetails.totalduration;\n if (!levels) {\n this.warn(`Levels were reset while loading level ${newLevelId}`);\n return;\n }\n this.log(`Level ${newLevelId} loaded [${newDetails.startSN},${newDetails.endSN}]${newDetails.lastPartSn ? `[part-${newDetails.lastPartSn}-${newDetails.lastPartIndex}]` : ''}, cc [${newDetails.startCC}, ${newDetails.endCC}] duration:${duration}`);\n const curLevel = data.levelInfo;\n const fragCurrent = this.fragCurrent;\n if (fragCurrent && (this.state === State.FRAG_LOADING || this.state === State.FRAG_LOADING_WAITING_RETRY)) {\n if (fragCurrent.level !== data.level && fragCurrent.loader) {\n this.abortCurrentFrag();\n }\n }\n let sliding = 0;\n if (newDetails.live || (_curLevel$details = curLevel.details) != null && _curLevel$details.live) {\n var _this$levelLastLoaded;\n this.checkLiveUpdate(newDetails);\n if (newDetails.deltaUpdateFailed) {\n return;\n }\n sliding = this.alignPlaylists(newDetails, curLevel.details, (_this$levelLastLoaded = this.levelLastLoaded) == null ? void 0 : _this$levelLastLoaded.details);\n }\n // override level info\n curLevel.details = newDetails;\n this.levelLastLoaded = curLevel;\n if (!startFragRequested) {\n this.setStartPosition(newDetails, sliding);\n }\n this.hls.trigger(Events.LEVEL_UPDATED, {\n details: newDetails,\n level: newLevelId\n });\n\n // only switch back to IDLE state if we were waiting for level to start downloading a new fragment\n if (this.state === State.WAITING_LEVEL) {\n if (this.waitForCdnTuneIn(newDetails)) {\n // Wait for Low-Latency CDN Tune-in\n return;\n }\n this.state = State.IDLE;\n }\n if (startFragRequested && newDetails.live) {\n this.synchronizeToLiveEdge(newDetails);\n }\n\n // trigger handler right now\n this.tick();\n }\n synchronizeToLiveEdge(levelDetails) {\n const {\n config,\n media\n } = this;\n if (!media) {\n return;\n }\n const liveSyncPosition = this.hls.liveSyncPosition;\n const currentTime = this.getLoadPosition();\n const start = levelDetails.fragmentStart;\n const end = levelDetails.edge;\n const withinSlidingWindow = currentTime >= start - config.maxFragLookUpTolerance && currentTime <= end;\n // Continue if we can seek forward to sync position or if current time is outside of sliding window\n if (liveSyncPosition !== null && media.duration > liveSyncPosition && (currentTime < liveSyncPosition || !withinSlidingWindow)) {\n // Continue if buffer is starving or if current time is behind max latency\n const maxLatency = config.liveMaxLatencyDuration !== undefined ? config.liveMaxLatencyDuration : config.liveMaxLatencyDurationCount * levelDetails.targetduration;\n if (!withinSlidingWindow && media.readyState < 4 || currentTime < end - maxLatency) {\n if (!this._hasEnoughToStart) {\n this.nextLoadPosition = liveSyncPosition;\n }\n // Only seek if ready and there is not a significant forward buffer available for playback\n if (media.readyState) {\n this.warn(`Playback: ${currentTime.toFixed(3)} is located too far from the end of live sliding playlist: ${end}, reset currentTime to : ${liveSyncPosition.toFixed(3)}`);\n if (this.config.liveSyncMode === 'buffered') {\n var _bufferInfo$buffered;\n const bufferInfo = BufferHelper.bufferInfo(media, liveSyncPosition, 0);\n if (!((_bufferInfo$buffered = bufferInfo.buffered) != null && _bufferInfo$buffered.length)) {\n media.currentTime = liveSyncPosition;\n return;\n }\n const isLiveSyncInBuffer = bufferInfo.start <= currentTime;\n if (isLiveSyncInBuffer) {\n media.currentTime = liveSyncPosition;\n return;\n }\n const {\n nextStart\n } = BufferHelper.bufferedInfo(bufferInfo.buffered, currentTime, 0);\n if (nextStart) {\n media.currentTime = nextStart;\n }\n } else {\n media.currentTime = liveSyncPosition;\n }\n }\n }\n }\n }\n _handleFragmentLoadProgress(data) {\n var _frag$initSegment;\n const frag = data.frag;\n const {\n part,\n payload\n } = data;\n const {\n levels\n } = this;\n if (!levels) {\n this.warn(`Levels were reset while fragment load was in progress. Fragment ${frag.sn} of level ${frag.level} will not be buffered`);\n return;\n }\n const currentLevel = levels[frag.level];\n if (!currentLevel) {\n this.warn(`Level ${frag.level} not found on progress`);\n return;\n }\n const details = currentLevel.details;\n if (!details) {\n this.warn(`Dropping fragment ${frag.sn} of level ${frag.level} after level details were reset`);\n this.fragmentTracker.removeFragment(frag);\n return;\n }\n const videoCodec = currentLevel.videoCodec;\n\n // time Offset is accurate if level PTS is known, or if playlist is not sliding (not live)\n const accurateTimeOffset = details.PTSKnown || !details.live;\n const initSegmentData = (_frag$initSegment = frag.initSegment) == null ? void 0 : _frag$initSegment.data;\n const audioCodec = this._getAudioCodec(currentLevel);\n\n // transmux the MPEG-TS data to ISO-BMFF segments\n // this.log(`Transmuxing ${frag.sn} of [${details.startSN} ,${details.endSN}],level ${frag.level}, cc ${frag.cc}`);\n const transmuxer = this.transmuxer = this.transmuxer || new TransmuxerInterface(this.hls, PlaylistLevelType.MAIN, this._handleTransmuxComplete.bind(this), this._handleTransmuxerFlush.bind(this));\n const partIndex = part ? part.index : -1;\n const partial = partIndex !== -1;\n const chunkMeta = new ChunkMetadata(frag.level, frag.sn, frag.stats.chunkCount, payload.byteLength, partIndex, partial);\n const initPTS = this.initPTS[frag.cc];\n transmuxer.push(payload, initSegmentData, audioCodec, videoCodec, frag, part, details.totalduration, accurateTimeOffset, chunkMeta, initPTS);\n }\n onAudioTrackSwitching(event, data) {\n const hls = this.hls;\n // if any URL found on new audio track, it is an alternate audio track\n const fromAltAudio = this.altAudio !== 0;\n const altAudio = useAlternateAudio(data.url, hls);\n // if we switch on main audio, ensure that main fragment scheduling is synced with media.buffered\n // don't do anything if we switch to alt audio: audio stream controller is handling it.\n // we will just have to change buffer scheduling on audioTrackSwitched\n if (!altAudio) {\n if (this.mediaBuffer !== this.media) {\n this.log('Switching on main audio, use media.buffered to schedule main fragment loading');\n this.mediaBuffer = this.media;\n const fragCurrent = this.fragCurrent;\n // we need to refill audio buffer from main: cancel any frag loading to speed up audio switch\n if (fragCurrent) {\n this.log('Switching to main audio track, cancel main fragment load');\n fragCurrent.abortRequests();\n this.fragmentTracker.removeFragment(fragCurrent);\n }\n // destroy transmuxer to force init segment generation (following audio switch)\n this.resetTransmuxer();\n // switch to IDLE state to load new fragment\n this.resetLoadingState();\n } else if (this.audioOnly) {\n // Reset audio transmuxer so when switching back to main audio we're not still appending where we left off\n this.resetTransmuxer();\n }\n // If switching from alt to main audio, flush all audio and trigger track switched\n if (fromAltAudio) {\n this.altAudio = 0;\n this.fragmentTracker.removeAllFragments();\n hls.once(Events.BUFFER_FLUSHED, () => {\n if (!this.hls) {\n return;\n }\n this.hls.trigger(Events.AUDIO_TRACK_SWITCHED, data);\n });\n hls.trigger(Events.BUFFER_FLUSHING, {\n startOffset: 0,\n endOffset: Number.POSITIVE_INFINITY,\n type: null\n });\n return;\n }\n hls.trigger(Events.AUDIO_TRACK_SWITCHED, data);\n } else {\n this.altAudio = 1;\n }\n }\n onAudioTrackSwitched(event, data) {\n const altAudio = useAlternateAudio(data.url, this.hls);\n if (altAudio) {\n const videoBuffer = this.videoBuffer;\n // if we switched on alternate audio, ensure that main fragment scheduling is synced with video sourcebuffer buffered\n if (videoBuffer && this.mediaBuffer !== videoBuffer) {\n this.log('Switching on alternate audio, use video.buffered to schedule main fragment loading');\n this.mediaBuffer = videoBuffer;\n }\n }\n this.altAudio = altAudio ? 2 : 0;\n this.tick();\n }\n onBufferCreated(event, data) {\n const tracks = data.tracks;\n let mediaTrack;\n let name;\n let alternate = false;\n for (const type in tracks) {\n const track = tracks[type];\n if (track.id === 'main') {\n name = type;\n mediaTrack = track;\n // keep video source buffer reference\n if (type === 'video') {\n const videoTrack = tracks[type];\n if (videoTrack) {\n this.videoBuffer = videoTrack.buffer;\n }\n }\n } else {\n alternate = true;\n }\n }\n if (alternate && mediaTrack) {\n this.log(`Alternate track found, use ${name}.buffered to schedule main fragment loading`);\n this.mediaBuffer = mediaTrack.buffer;\n } else {\n this.mediaBuffer = this.media;\n }\n }\n onFragBuffered(event, data) {\n const {\n frag,\n part\n } = data;\n const bufferedMainFragment = frag.type === PlaylistLevelType.MAIN;\n if (bufferedMainFragment) {\n if (this.fragContextChanged(frag)) {\n // If a level switch was requested while a fragment was buffering, it will emit the FRAG_BUFFERED event upon completion\n // Avoid setting state back to IDLE, since that will interfere with a level switch\n this.warn(`Fragment ${frag.sn}${part ? ' p: ' + part.index : ''} of level ${frag.level} finished buffering, but was aborted. state: ${this.state}`);\n if (this.state === State.PARSED) {\n this.state = State.IDLE;\n }\n return;\n }\n const stats = part ? part.stats : frag.stats;\n this.fragLastKbps = Math.round(8 * stats.total / (stats.buffering.end - stats.loading.first));\n if (isMediaFragment(frag)) {\n this.fragPrevious = frag;\n }\n this.fragBufferedComplete(frag, part);\n }\n const media = this.media;\n if (!media) {\n return;\n }\n if (!this._hasEnoughToStart && BufferHelper.getBuffered(media).length) {\n this._hasEnoughToStart = true;\n this.seekToStartPos();\n }\n if (bufferedMainFragment) {\n this.tick();\n }\n }\n get hasEnoughToStart() {\n return this._hasEnoughToStart;\n }\n onError(event, data) {\n var _data$context;\n if (data.fatal) {\n this.state = State.ERROR;\n return;\n }\n switch (data.details) {\n case ErrorDetails.FRAG_GAP:\n case ErrorDetails.FRAG_PARSING_ERROR:\n case ErrorDetails.FRAG_DECRYPT_ERROR:\n case ErrorDetails.FRAG_LOAD_ERROR:\n case ErrorDetails.FRAG_LOAD_TIMEOUT:\n case ErrorDetails.KEY_LOAD_ERROR:\n case ErrorDetails.KEY_LOAD_TIMEOUT:\n this.onFragmentOrKeyLoadError(PlaylistLevelType.MAIN, data);\n break;\n case ErrorDetails.LEVEL_LOAD_ERROR:\n case ErrorDetails.LEVEL_LOAD_TIMEOUT:\n case ErrorDetails.LEVEL_PARSING_ERROR:\n // in case of non fatal error while loading level, if level controller is not retrying to load level, switch back to IDLE\n if (!data.levelRetry && this.state === State.WAITING_LEVEL && ((_data$context = data.context) == null ? void 0 : _data$context.type) === PlaylistContextType.LEVEL) {\n this.state = State.IDLE;\n }\n break;\n case ErrorDetails.BUFFER_ADD_CODEC_ERROR:\n case ErrorDetails.BUFFER_APPEND_ERROR:\n if (data.parent !== 'main') {\n return;\n }\n if (this.reduceLengthAndFlushBuffer(data)) {\n this.resetLoadingState();\n }\n break;\n case ErrorDetails.BUFFER_FULL_ERROR:\n if (data.parent !== 'main') {\n return;\n }\n if (this.reduceLengthAndFlushBuffer(data)) {\n const isAssetPlayer = !this.config.interstitialsController && this.config.assetPlayerId;\n if (isAssetPlayer) {\n // Use currentTime in buffer estimate to prevent loading more until playback advances\n this._hasEnoughToStart = true;\n } else {\n this.flushMainBuffer(0, Number.POSITIVE_INFINITY);\n }\n }\n break;\n case ErrorDetails.INTERNAL_EXCEPTION:\n this.recoverWorkerError(data);\n break;\n }\n }\n onFragLoadEmergencyAborted() {\n this.state = State.IDLE;\n // if loadedmetadata is not set, it means that we are emergency switch down on first frag\n // in that case, reset startFragRequested flag\n if (!this._hasEnoughToStart) {\n this.startFragRequested = false;\n this.nextLoadPosition = this.lastCurrentTime;\n }\n this.tickImmediate();\n }\n onBufferFlushed(event, {\n type\n }) {\n if (type !== ElementaryStreamTypes.AUDIO || !this.altAudio) {\n const mediaBuffer = (type === ElementaryStreamTypes.VIDEO ? this.videoBuffer : this.mediaBuffer) || this.media;\n if (mediaBuffer) {\n this.afterBufferFlushed(mediaBuffer, type, PlaylistLevelType.MAIN);\n this.tick();\n }\n }\n }\n onLevelsUpdated(event, data) {\n if (this.level > -1 && this.fragCurrent) {\n this.level = this.fragCurrent.level;\n if (this.level === -1) {\n this.resetWhenMissingContext(this.fragCurrent);\n }\n }\n this.levels = data.levels;\n }\n swapAudioCodec() {\n this.audioCodecSwap = !this.audioCodecSwap;\n }\n\n /**\n * Seeks to the set startPosition if not equal to the mediaElement's current time.\n */\n seekToStartPos() {\n const {\n media\n } = this;\n if (!media) {\n return;\n }\n const currentTime = media.currentTime;\n let startPosition = this.startPosition;\n // only adjust currentTime if different from startPosition or if startPosition not buffered\n // at that stage, there should be only one buffered range, as we reach that code after first fragment has been buffered\n if (startPosition >= 0 && currentTime < startPosition) {\n if (media.seeking) {\n this.log(`could not seek to ${startPosition}, already seeking at ${currentTime}`);\n return;\n }\n\n // Offset start position by timeline offset\n const timelineOffset = this.timelineOffset;\n if (timelineOffset && startPosition) {\n startPosition += timelineOffset;\n }\n const details = this.getLevelDetails();\n const buffered = BufferHelper.getBuffered(media);\n const bufferStart = buffered.length ? buffered.start(0) : 0;\n const delta = bufferStart - startPosition;\n const skipTolerance = Math.max(this.config.maxBufferHole, this.config.maxFragLookUpTolerance);\n if (this.config.startOnSegmentBoundary || delta > 0 && (delta < skipTolerance || this.loadingParts && delta < 2 * ((details == null ? void 0 : details.partTarget) || 0))) {\n this.log(`adjusting start position by ${delta} to match buffer start`);\n startPosition += delta;\n this.startPosition = startPosition;\n }\n if (currentTime < startPosition) {\n this.log(`seek to target start position ${startPosition} from current time ${currentTime} buffer start ${bufferStart}`);\n media.currentTime = startPosition;\n }\n }\n }\n _getAudioCodec(currentLevel) {\n let audioCodec = this.config.defaultAudioCodec || currentLevel.audioCodec;\n if (this.audioCodecSwap && audioCodec) {\n this.log('Swapping audio codec');\n if (audioCodec.indexOf('mp4a.40.5') !== -1) {\n audioCodec = 'mp4a.40.2';\n } else {\n audioCodec = 'mp4a.40.5';\n }\n }\n return audioCodec;\n }\n _loadBitrateTestFrag(fragment, level) {\n fragment.bitrateTest = true;\n this._doFragLoad(fragment, level).then(data => {\n const {\n hls\n } = this;\n const frag = data == null ? void 0 : data.frag;\n if (!frag || this.fragContextChanged(frag)) {\n return;\n }\n level.fragmentError = 0;\n this.state = State.IDLE;\n this.startFragRequested = false;\n this.bitrateTest = false;\n const stats = frag.stats;\n // Bitrate tests fragments are neither parsed nor buffered\n stats.parsing.start = stats.parsing.end = stats.buffering.start = stats.buffering.end = self.performance.now();\n hls.trigger(Events.FRAG_LOADED, data);\n frag.bitrateTest = false;\n }).catch(reason => {\n if (this.state === State.STOPPED || this.state === State.ERROR) {\n return;\n }\n this.warn(reason);\n this.resetFragmentLoading(fragment);\n });\n }\n _handleTransmuxComplete(transmuxResult) {\n const id = this.playlistType;\n const {\n hls\n } = this;\n const {\n remuxResult,\n chunkMeta\n } = transmuxResult;\n const context = this.getCurrentContext(chunkMeta);\n if (!context) {\n this.resetWhenMissingContext(chunkMeta);\n return;\n }\n const {\n frag,\n part,\n level\n } = context;\n const {\n video,\n text,\n id3,\n initSegment\n } = remuxResult;\n const {\n details\n } = level;\n // The audio-stream-controller handles audio buffering if Hls.js is playing an alternate audio track\n const audio = this.altAudio ? undefined : remuxResult.audio;\n\n // Check if the current fragment has been aborted. We check this by first seeing if we're still playing the current level.\n // If we are, subsequently check if the currently loading fragment (fragCurrent) has changed.\n if (this.fragContextChanged(frag)) {\n this.fragmentTracker.removeFragment(frag);\n return;\n }\n this.state = State.PARSING;\n if (initSegment) {\n const tracks = initSegment.tracks;\n if (tracks) {\n const mapFragment = frag.initSegment || frag;\n if (this.unhandledEncryptionError(initSegment, frag)) {\n return;\n }\n this._bufferInitSegment(level, tracks, mapFragment, chunkMeta);\n hls.trigger(Events.FRAG_PARSING_INIT_SEGMENT, {\n frag: mapFragment,\n id,\n tracks\n });\n }\n const baseTime = initSegment.initPTS;\n const timescale = initSegment.timescale;\n const initPTS = this.initPTS[frag.cc];\n if (isFiniteNumber(baseTime) && (!initPTS || initPTS.baseTime !== baseTime || initPTS.timescale !== timescale)) {\n const trackId = initSegment.trackId;\n this.initPTS[frag.cc] = {\n baseTime,\n timescale,\n trackId\n };\n hls.trigger(Events.INIT_PTS_FOUND, {\n frag,\n id,\n initPTS: baseTime,\n timescale,\n trackId\n });\n }\n }\n\n // Avoid buffering if backtracking this fragment\n if (video && details) {\n if (audio && video.type === 'audiovideo') {\n this.logMuxedErr(frag);\n }\n const prevFrag = details.fragments[frag.sn - 1 - details.startSN];\n const isFirstFragment = frag.sn === details.startSN;\n const isFirstInDiscontinuity = !prevFrag || frag.cc > prevFrag.cc;\n if (remuxResult.independent !== false) {\n const {\n startPTS,\n endPTS,\n startDTS,\n endDTS\n } = video;\n if (part) {\n part.elementaryStreams[video.type] = {\n startPTS,\n endPTS,\n startDTS,\n endDTS\n };\n } else {\n if (video.firstKeyFrame && video.independent && chunkMeta.id === 1 && !isFirstInDiscontinuity) {\n this.couldBacktrack = true;\n }\n if (video.dropped && video.independent) {\n // Backtrack if dropped frames create a gap after currentTime\n\n const bufferInfo = this.getMainFwdBufferInfo();\n const targetBufferTime = (bufferInfo ? bufferInfo.end : this.getLoadPosition()) + this.config.maxBufferHole;\n const startTime = video.firstKeyFramePTS ? video.firstKeyFramePTS : startPTS;\n if (!isFirstFragment && targetBufferTime < startTime - this.config.maxBufferHole && !isFirstInDiscontinuity) {\n this.backtrack(frag);\n return;\n } else if (isFirstInDiscontinuity) {\n // Mark segment with a gap to avoid loop loading\n frag.gap = true;\n }\n // Set video stream start to fragment start so that truncated samples do not distort the timeline, and mark it partial\n frag.setElementaryStreamInfo(video.type, frag.start, endPTS, frag.start, endDTS, true);\n } else if (isFirstFragment && startPTS - (details.appliedTimelineOffset || 0) > MAX_START_GAP_JUMP) {\n // Mark segment with a gap to skip large start gap\n frag.gap = true;\n }\n }\n frag.setElementaryStreamInfo(video.type, startPTS, endPTS, startDTS, endDTS);\n if (this.backtrackFragment) {\n this.backtrackFragment = frag;\n }\n this.bufferFragmentData(video, frag, part, chunkMeta, isFirstFragment || isFirstInDiscontinuity);\n } else if (isFirstFragment || isFirstInDiscontinuity) {\n // Mark segment with a gap to avoid loop loading\n frag.gap = true;\n } else {\n this.backtrack(frag);\n return;\n }\n }\n if (audio) {\n const {\n startPTS,\n endPTS,\n startDTS,\n endDTS\n } = audio;\n if (part) {\n part.elementaryStreams[ElementaryStreamTypes.AUDIO] = {\n startPTS,\n endPTS,\n startDTS,\n endDTS\n };\n }\n frag.setElementaryStreamInfo(ElementaryStreamTypes.AUDIO, startPTS, endPTS, startDTS, endDTS);\n this.bufferFragmentData(audio, frag, part, chunkMeta);\n }\n if (details && id3 != null && id3.samples.length) {\n const emittedID3 = {\n id,\n frag,\n details,\n samples: id3.samples\n };\n hls.trigger(Events.FRAG_PARSING_METADATA, emittedID3);\n }\n if (details && text) {\n const emittedText = {\n id,\n frag,\n details,\n samples: text.samples\n };\n hls.trigger(Events.FRAG_PARSING_USERDATA, emittedText);\n }\n }\n logMuxedErr(frag) {\n this.warn(`${isMediaFragment(frag) ? 'Media' : 'Init'} segment with muxed audiovideo where only video expected: ${frag.url}`);\n }\n _bufferInitSegment(currentLevel, tracks, frag, chunkMeta) {\n if (this.state !== State.PARSING) {\n return;\n }\n this.audioOnly = !!tracks.audio && !tracks.video;\n\n // if audio track is expected to come from audio stream controller, discard any coming from main\n if (this.altAudio && !this.audioOnly) {\n delete tracks.audio;\n if (tracks.audiovideo) {\n this.logMuxedErr(frag);\n }\n }\n // include levelCodec in audio and video tracks\n const {\n audio,\n video,\n audiovideo\n } = tracks;\n if (audio) {\n const levelCodec = currentLevel.audioCodec;\n let audioCodec = pickMostCompleteCodecName(audio.codec, levelCodec);\n // Add level and profile to make up for remuxer not being able to parse full codec\n // (logger warning \"Unhandled audio codec...\")\n if (audioCodec === 'mp4a') {\n audioCodec = 'mp4a.40.5';\n }\n // Handle `audioCodecSwitch`\n const ua = navigator.userAgent.toLowerCase();\n if (this.audioCodecSwitch) {\n if (audioCodec) {\n if (audioCodec.indexOf('mp4a.40.5') !== -1) {\n audioCodec = 'mp4a.40.2';\n } else {\n audioCodec = 'mp4a.40.5';\n }\n }\n // In the case that AAC and HE-AAC audio codecs are signalled in manifest,\n // force HE-AAC, as it seems that most browsers prefers it.\n // don't force HE-AAC if mono stream, or in Firefox\n const audioMetadata = audio.metadata;\n if (audioMetadata && 'channelCount' in audioMetadata && (audioMetadata.channelCount || 1) !== 1 && ua.indexOf('firefox') === -1) {\n audioCodec = 'mp4a.40.5';\n }\n }\n // HE-AAC is broken on Android, always signal audio codec as AAC even if variant manifest states otherwise\n if (audioCodec && audioCodec.indexOf('mp4a.40.5') !== -1 && ua.indexOf('android') !== -1 && audio.container !== 'audio/mpeg') {\n // Exclude mpeg audio\n audioCodec = 'mp4a.40.2';\n this.log(`Android: force audio codec to ${audioCodec}`);\n }\n if (levelCodec && levelCodec !== audioCodec) {\n this.log(`Swapping manifest audio codec \"${levelCodec}\" for \"${audioCodec}\"`);\n }\n audio.levelCodec = audioCodec;\n audio.id = PlaylistLevelType.MAIN;\n this.log(`Init audio buffer, container:${audio.container}, codecs[selected/level/parsed]=[${audioCodec || ''}/${levelCodec || ''}/${audio.codec}]`);\n delete tracks.audiovideo;\n }\n if (video) {\n video.levelCodec = currentLevel.videoCodec;\n video.id = PlaylistLevelType.MAIN;\n const parsedVideoCodec = video.codec;\n if ((parsedVideoCodec == null ? void 0 : parsedVideoCodec.length) === 4) {\n // Make up for passthrough-remuxer not being able to parse full codec\n // (logger warning \"Unhandled video codec...\")\n switch (parsedVideoCodec) {\n case 'hvc1':\n case 'hev1':\n video.codec = 'hvc1.1.6.L120.90';\n break;\n case 'av01':\n video.codec = 'av01.0.04M.08';\n break;\n case 'avc1':\n video.codec = 'avc1.42e01e';\n break;\n }\n }\n this.log(`Init video buffer, container:${video.container}, codecs[level/parsed]=[${currentLevel.videoCodec || ''}/${parsedVideoCodec}]${video.codec !== parsedVideoCodec ? ' parsed-corrected=' + video.codec : ''}${video.supplemental ? ' supplemental=' + video.supplemental : ''}`);\n delete tracks.audiovideo;\n }\n if (audiovideo) {\n this.log(`Init audiovideo buffer, container:${audiovideo.container}, codecs[level/parsed]=[${currentLevel.codecs}/${audiovideo.codec}]`);\n delete tracks.video;\n delete tracks.audio;\n }\n const trackTypes = Object.keys(tracks);\n if (trackTypes.length) {\n this.hls.trigger(Events.BUFFER_CODECS, tracks);\n if (!this.hls) {\n // Exit after fatal tracks error\n return;\n }\n // loop through tracks that are going to be provided to bufferController\n trackTypes.forEach(trackName => {\n const track = tracks[trackName];\n const initSegment = track.initSegment;\n if (initSegment != null && initSegment.byteLength) {\n this.hls.trigger(Events.BUFFER_APPENDING, {\n type: trackName,\n data: initSegment,\n frag,\n part: null,\n chunkMeta,\n parent: frag.type\n });\n }\n });\n }\n // trigger handler right now\n this.tickImmediate();\n }\n getMainFwdBufferInfo() {\n // Observe video SourceBuffer (this.mediaBuffer) only when alt-audio is used, otherwise observe combined media buffer\n const bufferOutput = this.mediaBuffer && this.altAudio === 2 ? this.mediaBuffer : this.media;\n return this.getFwdBufferInfo(bufferOutput, PlaylistLevelType.MAIN);\n }\n get maxBufferLength() {\n const {\n levels,\n level\n } = this;\n const levelInfo = levels == null ? void 0 : levels[level];\n if (!levelInfo) {\n return this.config.maxBufferLength;\n }\n return this.getMaxBufferLength(levelInfo.maxBitrate);\n }\n backtrack(frag) {\n this.couldBacktrack = true;\n // Causes findFragments to backtrack through fragments to find the keyframe\n this.backtrackFragment = frag;\n this.resetTransmuxer();\n this.flushBufferGap(frag);\n this.fragmentTracker.removeFragment(frag);\n this.fragPrevious = null;\n this.nextLoadPosition = frag.start;\n this.state = State.IDLE;\n }\n checkFragmentChanged() {\n const video = this.media;\n let fragPlayingCurrent = null;\n if (video && video.readyState > 1 && video.seeking === false) {\n const currentTime = video.currentTime;\n /* if video element is in seeked state, currentTime can only increase.\n (assuming that playback rate is positive ...)\n As sometimes currentTime jumps back to zero after a\n media decode error, check this, to avoid seeking back to\n wrong position after a media decode error\n */\n\n if (BufferHelper.isBuffered(video, currentTime)) {\n fragPlayingCurrent = this.getAppendedFrag(currentTime);\n } else if (BufferHelper.isBuffered(video, currentTime + 0.1)) {\n /* ensure that FRAG_CHANGED event is triggered at startup,\n when first video frame is displayed and playback is paused.\n add a tolerance of 100ms, in case current position is not buffered,\n check if current pos+100ms is buffered and use that buffer range\n for FRAG_CHANGED event reporting */\n fragPlayingCurrent = this.getAppendedFrag(currentTime + 0.1);\n }\n if (fragPlayingCurrent) {\n this.backtrackFragment = null;\n const fragPlaying = this.fragPlaying;\n const fragCurrentLevel = fragPlayingCurrent.level;\n if (!fragPlaying || fragPlayingCurrent.sn !== fragPlaying.sn || fragPlaying.level !== fragCurrentLevel) {\n this.fragPlaying = fragPlayingCurrent;\n this.hls.trigger(Events.FRAG_CHANGED, {\n frag: fragPlayingCurrent\n });\n if (!fragPlaying || fragPlaying.level !== fragCurrentLevel) {\n this.hls.trigger(Events.LEVEL_SWITCHED, {\n level: fragCurrentLevel\n });\n }\n }\n }\n }\n }\n get nextLevel() {\n const frag = this.nextBufferedFrag;\n if (frag) {\n return frag.level;\n }\n return -1;\n }\n get currentFrag() {\n var _this$media2;\n if (this.fragPlaying) {\n return this.fragPlaying;\n }\n const currentTime = ((_this$media2 = this.media) == null ? void 0 : _this$media2.currentTime) || this.lastCurrentTime;\n if (isFiniteNumber(currentTime)) {\n return this.getAppendedFrag(currentTime);\n }\n return null;\n }\n get currentProgramDateTime() {\n var _this$media3;\n const currentTime = ((_this$media3 = this.media) == null ? void 0 : _this$media3.currentTime) || this.lastCurrentTime;\n if (isFiniteNumber(currentTime)) {\n const details = this.getLevelDetails();\n const frag = this.currentFrag || (details ? findFragmentByPTS(null, details.fragments, currentTime) : null);\n if (frag) {\n const programDateTime = frag.programDateTime;\n if (programDateTime !== null) {\n const epocMs = programDateTime + (currentTime - frag.start) * 1000;\n return new Date(epocMs);\n }\n }\n }\n return null;\n }\n get currentLevel() {\n const frag = this.currentFrag;\n if (frag) {\n return frag.level;\n }\n return -1;\n }\n get nextBufferedFrag() {\n const frag = this.currentFrag;\n if (frag) {\n return this.followingBufferedFrag(frag);\n }\n return null;\n }\n get forceStartLoad() {\n return this._forceStartLoad;\n }\n}\n\nclass KeyLoader extends Logger {\n constructor(config, logger) {\n super('key-loader', logger);\n this.config = void 0;\n this.keyIdToKeyInfo = {};\n this.emeController = null;\n this.config = config;\n }\n abort(type) {\n for (const id in this.keyIdToKeyInfo) {\n const loader = this.keyIdToKeyInfo[id].loader;\n if (loader) {\n var _loader$context;\n if (type && type !== ((_loader$context = loader.context) == null ? void 0 : _loader$context.frag.type)) {\n return;\n }\n loader.abort();\n }\n }\n }\n detach() {\n for (const id in this.keyIdToKeyInfo) {\n const keyInfo = this.keyIdToKeyInfo[id];\n // Remove cached EME keys on detach\n if (keyInfo.mediaKeySessionContext || keyInfo.decryptdata.isCommonEncryption) {\n delete this.keyIdToKeyInfo[id];\n }\n }\n }\n destroy() {\n this.detach();\n for (const id in this.keyIdToKeyInfo) {\n const loader = this.keyIdToKeyInfo[id].loader;\n if (loader) {\n loader.destroy();\n }\n }\n this.keyIdToKeyInfo = {};\n }\n createKeyLoadError(frag, details = ErrorDetails.KEY_LOAD_ERROR, error, networkDetails, response) {\n return new LoadError({\n type: ErrorTypes.NETWORK_ERROR,\n details,\n fatal: false,\n frag,\n response,\n error,\n networkDetails\n });\n }\n loadClear(loadingFrag, encryptedFragments, startFragRequested) {\n if (this.emeController && this.config.emeEnabled && !this.emeController.getSelectedKeySystemFormats().length) {\n // Access key-system with nearest key on start (loading frag is unencrypted)\n if (encryptedFragments.length) {\n for (let i = 0, l = encryptedFragments.length; i < l; i++) {\n const frag = encryptedFragments[i];\n // Loading at or before segment with EXT-X-KEY, or first frag loading and last EXT-X-KEY\n if (loadingFrag.cc <= frag.cc && (!isMediaFragment(loadingFrag) || !isMediaFragment(frag) || loadingFrag.sn < frag.sn) || !startFragRequested && i == l - 1) {\n return this.emeController.selectKeySystemFormat(frag).then(keySystemFormat => {\n if (!this.emeController) {\n return;\n }\n frag.setKeyFormat(keySystemFormat);\n const keySystem = keySystemFormatToKeySystemDomain(keySystemFormat);\n if (keySystem) {\n return this.emeController.getKeySystemAccess([keySystem]);\n }\n });\n }\n }\n }\n if (this.config.requireKeySystemAccessOnStart) {\n const keySystemsInConfig = getKeySystemsForConfig(this.config);\n if (keySystemsInConfig.length) {\n return this.emeController.getKeySystemAccess(keySystemsInConfig);\n }\n }\n }\n return null;\n }\n load(frag) {\n if (!frag.decryptdata && frag.encrypted && this.emeController && this.config.emeEnabled) {\n // Multiple keys, but none selected, resolve in eme-controller\n return this.emeController.selectKeySystemFormat(frag).then(keySystemFormat => {\n return this.loadInternal(frag, keySystemFormat);\n });\n }\n return this.loadInternal(frag);\n }\n loadInternal(frag, keySystemFormat) {\n var _keyInfo, _keyInfo2;\n if (keySystemFormat) {\n frag.setKeyFormat(keySystemFormat);\n }\n const decryptdata = frag.decryptdata;\n if (!decryptdata) {\n const error = new Error(keySystemFormat ? `Expected frag.decryptdata to be defined after setting format ${keySystemFormat}` : `Missing decryption data on fragment in onKeyLoading (emeEnabled with controller: ${this.emeController && this.config.emeEnabled})`);\n return Promise.reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_ERROR, error));\n }\n const uri = decryptdata.uri;\n if (!uri) {\n return Promise.reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_ERROR, new Error(`Invalid key URI: \"${uri}\"`)));\n }\n const id = getKeyId(decryptdata);\n let keyInfo = this.keyIdToKeyInfo[id];\n if ((_keyInfo = keyInfo) != null && _keyInfo.decryptdata.key) {\n decryptdata.key = keyInfo.decryptdata.key;\n return Promise.resolve({\n frag,\n keyInfo\n });\n }\n // Return key load promise once it has a mediakey session with an usable key status\n if (this.emeController && (_keyInfo2 = keyInfo) != null && _keyInfo2.keyLoadPromise) {\n const keyStatus = this.emeController.getKeyStatus(keyInfo.decryptdata);\n switch (keyStatus) {\n case 'usable':\n case 'usable-in-future':\n return keyInfo.keyLoadPromise.then(keyLoadedData => {\n // Return the correct fragment with updated decryptdata key and loaded keyInfo\n const {\n keyInfo\n } = keyLoadedData;\n decryptdata.key = keyInfo.decryptdata.key;\n return {\n frag,\n keyInfo\n };\n });\n }\n // If we have a key session and status and it is not pending or usable, continue\n // This will go back to the eme-controller for expired keys to get a new keyLoadPromise\n }\n\n // Load the key or return the loading promise\n this.log(`${this.keyIdToKeyInfo[id] ? 'Rel' : 'L'}oading${decryptdata.keyId ? ' keyId: ' + arrayToHex(decryptdata.keyId) : ''} URI: ${decryptdata.uri} from ${frag.type} ${frag.level}`);\n keyInfo = this.keyIdToKeyInfo[id] = {\n decryptdata,\n keyLoadPromise: null,\n loader: null,\n mediaKeySessionContext: null\n };\n switch (decryptdata.method) {\n case 'SAMPLE-AES':\n case 'SAMPLE-AES-CENC':\n case 'SAMPLE-AES-CTR':\n if (decryptdata.keyFormat === 'identity') {\n // loadKeyHTTP handles http(s) and data URLs\n return this.loadKeyHTTP(keyInfo, frag);\n }\n return this.loadKeyEME(keyInfo, frag);\n case 'AES-128':\n case 'AES-256':\n case 'AES-256-CTR':\n return this.loadKeyHTTP(keyInfo, frag);\n default:\n return Promise.reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_ERROR, new Error(`Key supplied with unsupported METHOD: \"${decryptdata.method}\"`)));\n }\n }\n loadKeyEME(keyInfo, frag) {\n const keyLoadedData = {\n frag,\n keyInfo\n };\n if (this.emeController && this.config.emeEnabled) {\n var _frag$initSegment;\n if (!keyInfo.decryptdata.keyId && (_frag$initSegment = frag.initSegment) != null && _frag$initSegment.data) {\n const keyIds = parseKeyIdsFromTenc(frag.initSegment.data);\n if (keyIds.length) {\n let keyId = keyIds[0];\n if (keyId.some(b => b !== 0)) {\n this.log(`Using keyId found in init segment ${arrayToHex(keyId)}`);\n LevelKey.setKeyIdForUri(keyInfo.decryptdata.uri, keyId);\n } else {\n keyId = LevelKey.addKeyIdForUri(keyInfo.decryptdata.uri);\n this.log(`Generating keyId to patch media ${arrayToHex(keyId)}`);\n }\n keyInfo.decryptdata.keyId = keyId;\n }\n }\n if (!keyInfo.decryptdata.keyId && !isMediaFragment(frag)) {\n // Resolve so that unencrypted init segment is loaded\n // key id is extracted from tenc box when processing key for next segment above\n return Promise.resolve(keyLoadedData);\n }\n const keySessionContextPromise = this.emeController.loadKey(keyLoadedData);\n return (keyInfo.keyLoadPromise = keySessionContextPromise.then(keySessionContext => {\n keyInfo.mediaKeySessionContext = keySessionContext;\n return keyLoadedData;\n })).catch(error => {\n // Remove promise for license renewal or retry\n keyInfo.keyLoadPromise = null;\n if ('data' in error) {\n error.data.frag = frag;\n }\n throw error;\n });\n }\n return Promise.resolve(keyLoadedData);\n }\n loadKeyHTTP(keyInfo, frag) {\n const config = this.config;\n const Loader = config.loader;\n const keyLoader = new Loader(config);\n frag.keyLoader = keyInfo.loader = keyLoader;\n return keyInfo.keyLoadPromise = new Promise((resolve, reject) => {\n const loaderContext = {\n keyInfo,\n frag,\n responseType: 'arraybuffer',\n url: keyInfo.decryptdata.uri\n };\n\n // maxRetry is 0 so that instead of retrying the same key on the same variant multiple times,\n // key-loader will trigger an error and rely on stream-controller to handle retry logic.\n // this will also align retry logic with fragment-loader\n const loadPolicy = config.keyLoadPolicy.default;\n const loaderConfig = {\n loadPolicy,\n timeout: loadPolicy.maxLoadTimeMs,\n maxRetry: 0,\n retryDelay: 0,\n maxRetryDelay: 0\n };\n const loaderCallbacks = {\n onSuccess: (response, stats, context, networkDetails) => {\n const {\n frag,\n keyInfo\n } = context;\n const id = getKeyId(keyInfo.decryptdata);\n if (!frag.decryptdata || keyInfo !== this.keyIdToKeyInfo[id]) {\n return reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_ERROR, new Error('after key load, decryptdata unset or changed'), networkDetails));\n }\n keyInfo.decryptdata.key = frag.decryptdata.key = new Uint8Array(response.data);\n\n // detach fragment key loader on load success\n frag.keyLoader = null;\n keyInfo.loader = null;\n resolve({\n frag,\n keyInfo\n });\n },\n onError: (response, context, networkDetails, stats) => {\n this.resetLoader(context);\n reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_ERROR, new Error(`HTTP Error ${response.code} loading key ${response.text}`), networkDetails, _objectSpread2({\n url: loaderContext.url,\n data: undefined\n }, response)));\n },\n onTimeout: (stats, context, networkDetails) => {\n this.resetLoader(context);\n reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_TIMEOUT, new Error('key loading timed out'), networkDetails));\n },\n onAbort: (stats, context, networkDetails) => {\n this.resetLoader(context);\n reject(this.createKeyLoadError(frag, ErrorDetails.INTERNAL_ABORTED, new Error('key loading aborted'), networkDetails));\n }\n };\n keyLoader.load(loaderContext, loaderConfig, loaderCallbacks);\n });\n }\n resetLoader(context) {\n const {\n frag,\n keyInfo,\n url: uri\n } = context;\n const loader = keyInfo.loader;\n if (frag.keyLoader === loader) {\n frag.keyLoader = null;\n keyInfo.loader = null;\n }\n const id = getKeyId(keyInfo.decryptdata) || uri;\n delete this.keyIdToKeyInfo[id];\n if (loader) {\n loader.destroy();\n }\n }\n}\nfunction getKeyId(decryptdata) {\n if (decryptdata.keyFormat !== KeySystemFormats.FAIRPLAY) {\n const keyId = decryptdata.keyId;\n if (keyId) {\n return arrayToHex(keyId);\n }\n }\n return decryptdata.uri;\n}\n\nfunction mapContextToLevelType(context) {\n const {\n type\n } = context;\n switch (type) {\n case PlaylistContextType.AUDIO_TRACK:\n return PlaylistLevelType.AUDIO;\n case PlaylistContextType.SUBTITLE_TRACK:\n return PlaylistLevelType.SUBTITLE;\n default:\n return PlaylistLevelType.MAIN;\n }\n}\nfunction getResponseUrl(response, context) {\n let url = response.url;\n // responseURL not supported on some browsers (it is used to detect URL redirection)\n // data-uri mode also not supported (but no need to detect redirection)\n if (url === undefined || url.indexOf('data:') === 0) {\n // fallback to initial URL\n url = context.url;\n }\n return url;\n}\nclass PlaylistLoader {\n constructor(hls) {\n this.hls = void 0;\n this.loaders = Object.create(null);\n this.variableList = null;\n this.onManifestLoaded = this.checkAutostartLoad;\n this.hls = hls;\n this.registerListeners();\n }\n startLoad(startPosition) {}\n stopLoad() {\n this.destroyInternalLoaders();\n }\n registerListeners() {\n const {\n hls\n } = this;\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.LEVEL_LOADING, this.onLevelLoading, this);\n hls.on(Events.AUDIO_TRACK_LOADING, this.onAudioTrackLoading, this);\n hls.on(Events.SUBTITLE_TRACK_LOADING, this.onSubtitleTrackLoading, this);\n hls.on(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n }\n unregisterListeners() {\n const {\n hls\n } = this;\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.LEVEL_LOADING, this.onLevelLoading, this);\n hls.off(Events.AUDIO_TRACK_LOADING, this.onAudioTrackLoading, this);\n hls.off(Events.SUBTITLE_TRACK_LOADING, this.onSubtitleTrackLoading, this);\n hls.off(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n }\n\n /**\n * Returns defaults or configured loader-type overloads (pLoader and loader config params)\n */\n createInternalLoader(context) {\n const config = this.hls.config;\n const PLoader = config.pLoader;\n const Loader = config.loader;\n const InternalLoader = PLoader || Loader;\n const loader = new InternalLoader(config);\n this.loaders[context.type] = loader;\n return loader;\n }\n getInternalLoader(context) {\n return this.loaders[context.type];\n }\n resetInternalLoader(contextType) {\n if (this.loaders[contextType]) {\n delete this.loaders[contextType];\n }\n }\n\n /**\n * Call `destroy` on all internal loader instances mapped (one per context type)\n */\n destroyInternalLoaders() {\n for (const contextType in this.loaders) {\n const loader = this.loaders[contextType];\n if (loader) {\n loader.destroy();\n }\n this.resetInternalLoader(contextType);\n }\n }\n destroy() {\n this.variableList = null;\n this.unregisterListeners();\n this.destroyInternalLoaders();\n }\n onManifestLoading(event, data) {\n const {\n url\n } = data;\n this.variableList = null;\n this.load({\n id: null,\n level: 0,\n responseType: 'text',\n type: PlaylistContextType.MANIFEST,\n url,\n deliveryDirectives: null,\n levelOrTrack: null\n });\n }\n onLevelLoading(event, data) {\n const {\n id,\n level,\n pathwayId,\n url,\n deliveryDirectives,\n levelInfo\n } = data;\n this.load({\n id,\n level,\n pathwayId,\n responseType: 'text',\n type: PlaylistContextType.LEVEL,\n url,\n deliveryDirectives,\n levelOrTrack: levelInfo\n });\n }\n onAudioTrackLoading(event, data) {\n const {\n id,\n groupId,\n url,\n deliveryDirectives,\n track\n } = data;\n this.load({\n id,\n groupId,\n level: null,\n responseType: 'text',\n type: PlaylistContextType.AUDIO_TRACK,\n url,\n deliveryDirectives,\n levelOrTrack: track\n });\n }\n onSubtitleTrackLoading(event, data) {\n const {\n id,\n groupId,\n url,\n deliveryDirectives,\n track\n } = data;\n this.load({\n id,\n groupId,\n level: null,\n responseType: 'text',\n type: PlaylistContextType.SUBTITLE_TRACK,\n url,\n deliveryDirectives,\n levelOrTrack: track\n });\n }\n onLevelsUpdated(event, data) {\n // abort and delete loader of removed levels\n const loader = this.loaders[PlaylistContextType.LEVEL];\n if (loader) {\n const context = loader.context;\n if (context && !data.levels.some(lvl => lvl === context.levelOrTrack)) {\n loader.abort();\n delete this.loaders[PlaylistContextType.LEVEL];\n }\n }\n }\n load(context) {\n var _context$deliveryDire;\n const config = this.hls.config;\n\n // logger.debug(`[playlist-loader]: Loading playlist of type ${context.type}, level: ${context.level}, id: ${context.id}`);\n\n // Check if a loader for this context already exists\n let loader = this.getInternalLoader(context);\n if (loader) {\n const logger = this.hls.logger;\n const loaderContext = loader.context;\n if (loaderContext && loaderContext.levelOrTrack === context.levelOrTrack && (loaderContext.url === context.url || loaderContext.deliveryDirectives && !context.deliveryDirectives)) {\n // same URL can't overlap, or wait for blocking request\n if (loaderContext.url === context.url) {\n logger.log(`[playlist-loader]: ignore ${context.url} ongoing request`);\n } else {\n logger.log(`[playlist-loader]: ignore ${context.url} in favor of ${loaderContext.url}`);\n }\n return;\n }\n logger.log(`[playlist-loader]: aborting previous loader for type: ${context.type}`);\n loader.abort();\n }\n\n // apply different configs for retries depending on\n // context (manifest, level, audio/subs playlist)\n let loadPolicy;\n if (context.type === PlaylistContextType.MANIFEST) {\n loadPolicy = config.manifestLoadPolicy.default;\n } else {\n loadPolicy = _extends({}, config.playlistLoadPolicy.default, {\n timeoutRetry: null,\n errorRetry: null\n });\n }\n loader = this.createInternalLoader(context);\n\n // Override level/track timeout for LL-HLS requests\n // (the default of 10000ms is counter productive to blocking playlist reload requests)\n if (isFiniteNumber((_context$deliveryDire = context.deliveryDirectives) == null ? void 0 : _context$deliveryDire.part)) {\n let levelDetails;\n if (context.type === PlaylistContextType.LEVEL && context.level !== null) {\n levelDetails = this.hls.levels[context.level].details;\n } else if (context.type === PlaylistContextType.AUDIO_TRACK && context.id !== null) {\n levelDetails = this.hls.audioTracks[context.id].details;\n } else if (context.type === PlaylistContextType.SUBTITLE_TRACK && context.id !== null) {\n levelDetails = this.hls.subtitleTracks[context.id].details;\n }\n if (levelDetails) {\n const partTarget = levelDetails.partTarget;\n const targetDuration = levelDetails.targetduration;\n if (partTarget && targetDuration) {\n const maxLowLatencyPlaylistRefresh = Math.max(partTarget * 3, targetDuration * 0.8) * 1000;\n loadPolicy = _extends({}, loadPolicy, {\n maxTimeToFirstByteMs: Math.min(maxLowLatencyPlaylistRefresh, loadPolicy.maxTimeToFirstByteMs),\n maxLoadTimeMs: Math.min(maxLowLatencyPlaylistRefresh, loadPolicy.maxTimeToFirstByteMs)\n });\n }\n }\n }\n const legacyRetryCompatibility = loadPolicy.errorRetry || loadPolicy.timeoutRetry || {};\n const loaderConfig = {\n loadPolicy,\n timeout: loadPolicy.maxLoadTimeMs,\n maxRetry: legacyRetryCompatibility.maxNumRetry || 0,\n retryDelay: legacyRetryCompatibility.retryDelayMs || 0,\n maxRetryDelay: legacyRetryCompatibility.maxRetryDelayMs || 0\n };\n const loaderCallbacks = {\n onSuccess: (response, stats, context, networkDetails) => {\n const loader = this.getInternalLoader(context);\n this.resetInternalLoader(context.type);\n const string = response.data;\n stats.parsing.start = performance.now();\n if (M3U8Parser.isMediaPlaylist(string) || context.type !== PlaylistContextType.MANIFEST) {\n this.handleTrackOrLevelPlaylist(response, stats, context, networkDetails || null, loader);\n } else {\n this.handleMasterPlaylist(response, stats, context, networkDetails);\n }\n },\n onError: (response, context, networkDetails, stats) => {\n this.handleNetworkError(context, networkDetails, false, response, stats);\n },\n onTimeout: (stats, context, networkDetails) => {\n this.handleNetworkError(context, networkDetails, true, undefined, stats);\n }\n };\n\n // logger.debug(`[playlist-loader]: Calling internal loader delegate for URL: ${context.url}`);\n\n loader.load(context, loaderConfig, loaderCallbacks);\n }\n checkAutostartLoad() {\n if (!this.hls) {\n return;\n }\n const {\n config: {\n autoStartLoad,\n startPosition\n },\n forceStartLoad\n } = this.hls;\n if (autoStartLoad || forceStartLoad) {\n this.hls.logger.log(`${autoStartLoad ? 'auto' : 'force'} startLoad with configured startPosition ${startPosition}`);\n this.hls.startLoad(startPosition);\n }\n }\n handleMasterPlaylist(response, stats, context, networkDetails) {\n const hls = this.hls;\n const string = response.data;\n const url = getResponseUrl(response, context);\n const parsedResult = M3U8Parser.parseMasterPlaylist(string, url);\n if (parsedResult.playlistParsingError) {\n stats.parsing.end = performance.now();\n this.handleManifestParsingError(response, context, parsedResult.playlistParsingError, networkDetails, stats);\n return;\n }\n const {\n contentSteering,\n levels,\n sessionData,\n sessionKeys,\n startTimeOffset,\n variableList\n } = parsedResult;\n this.variableList = variableList;\n\n // Treat unknown codec as audio or video codec based on passing `isTypeSupported` check\n // (allows for playback of any supported codec even if not indexed in utils/codecs)\n levels.forEach(levelParsed => {\n const {\n unknownCodecs\n } = levelParsed;\n if (unknownCodecs) {\n const {\n preferManagedMediaSource\n } = this.hls.config;\n let {\n audioCodec,\n videoCodec\n } = levelParsed;\n for (let i = unknownCodecs.length; i--;) {\n const unknownCodec = unknownCodecs[i];\n if (areCodecsMediaSourceSupported(unknownCodec, 'audio', preferManagedMediaSource)) {\n levelParsed.audioCodec = audioCodec = audioCodec ? `${audioCodec},${unknownCodec}` : unknownCodec;\n sampleEntryCodesISO.audio[audioCodec.substring(0, 4)] = 2;\n unknownCodecs.splice(i, 1);\n } else if (areCodecsMediaSourceSupported(unknownCodec, 'video', preferManagedMediaSource)) {\n levelParsed.videoCodec = videoCodec = videoCodec ? `${videoCodec},${unknownCodec}` : unknownCodec;\n sampleEntryCodesISO.video[videoCodec.substring(0, 4)] = 2;\n unknownCodecs.splice(i, 1);\n }\n }\n }\n });\n const {\n AUDIO: audioTracks = [],\n SUBTITLES: subtitles,\n 'CLOSED-CAPTIONS': captions\n } = M3U8Parser.parseMasterPlaylistMedia(string, url, parsedResult);\n if (audioTracks.length) {\n // check if we have found an audio track embedded in main playlist (audio track without URI attribute)\n const embeddedAudioFound = audioTracks.some(audioTrack => !audioTrack.url);\n\n // if no embedded audio track defined, but audio codec signaled in quality level,\n // we need to signal this main audio track this could happen with playlists with\n // alt audio rendition in which quality levels (main)\n // contains both audio+video. but with mixed audio track not signaled\n if (!embeddedAudioFound && levels[0].audioCodec && !levels[0].attrs.AUDIO) {\n this.hls.logger.log('[playlist-loader]: audio codec signaled in quality level, but no embedded audio track signaled, create one');\n audioTracks.unshift({\n type: 'main',\n name: 'main',\n groupId: 'main',\n default: false,\n autoselect: false,\n forced: false,\n id: -1,\n attrs: new AttrList({}),\n bitrate: 0,\n url: ''\n });\n }\n }\n hls.trigger(Events.MANIFEST_LOADED, {\n levels,\n audioTracks,\n subtitles,\n captions,\n contentSteering,\n url,\n stats,\n networkDetails,\n sessionData,\n sessionKeys,\n startTimeOffset,\n variableList\n });\n }\n handleTrackOrLevelPlaylist(response, stats, context, networkDetails, loader) {\n const hls = this.hls;\n const {\n id,\n level,\n type\n } = context;\n const url = getResponseUrl(response, context);\n const levelId = isFiniteNumber(level) ? level : isFiniteNumber(id) ? id : 0;\n const levelType = mapContextToLevelType(context);\n const levelDetails = M3U8Parser.parseLevelPlaylist(response.data, url, levelId, levelType, 0, this.variableList);\n\n // We have done our first request (Manifest-type) and receive\n // not a master playlist but a chunk-list (track/level)\n // We fire the manifest-loaded event anyway with the parsed level-details\n // by creating a single-level structure for it.\n if (type === PlaylistContextType.MANIFEST) {\n const singleLevel = {\n attrs: new AttrList({}),\n bitrate: 0,\n details: levelDetails,\n name: '',\n url\n };\n levelDetails.requestScheduled = stats.loading.start + computeReloadInterval(levelDetails, 0);\n hls.trigger(Events.MANIFEST_LOADED, {\n levels: [singleLevel],\n audioTracks: [],\n url,\n stats,\n networkDetails,\n sessionData: null,\n sessionKeys: null,\n contentSteering: null,\n startTimeOffset: null,\n variableList: null\n });\n }\n\n // save parsing time\n stats.parsing.end = performance.now();\n\n // extend the context with the new levelDetails property\n context.levelDetails = levelDetails;\n this.handlePlaylistLoaded(levelDetails, response, stats, context, networkDetails, loader);\n }\n handleManifestParsingError(response, context, error, networkDetails, stats) {\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.NETWORK_ERROR,\n details: ErrorDetails.MANIFEST_PARSING_ERROR,\n fatal: context.type === PlaylistContextType.MANIFEST,\n url: response.url,\n err: error,\n error,\n reason: error.message,\n response,\n context,\n networkDetails,\n stats\n });\n }\n handleNetworkError(context, networkDetails, timeout = false, response, stats) {\n let message = `A network ${timeout ? 'timeout' : 'error' + (response ? ' (status ' + response.code + ')' : '')} occurred while loading ${context.type}`;\n if (context.type === PlaylistContextType.LEVEL) {\n message += `: ${context.level} id: ${context.id}`;\n } else if (context.type === PlaylistContextType.AUDIO_TRACK || context.type === PlaylistContextType.SUBTITLE_TRACK) {\n message += ` id: ${context.id} group-id: \"${context.groupId}\"`;\n }\n const error = new Error(message);\n this.hls.logger.warn(`[playlist-loader]: ${message}`);\n let details = ErrorDetails.UNKNOWN;\n let fatal = false;\n const loader = this.getInternalLoader(context);\n switch (context.type) {\n case PlaylistContextType.MANIFEST:\n details = timeout ? ErrorDetails.MANIFEST_LOAD_TIMEOUT : ErrorDetails.MANIFEST_LOAD_ERROR;\n fatal = true;\n break;\n case PlaylistContextType.LEVEL:\n details = timeout ? ErrorDetails.LEVEL_LOAD_TIMEOUT : ErrorDetails.LEVEL_LOAD_ERROR;\n fatal = false;\n break;\n case PlaylistContextType.AUDIO_TRACK:\n details = timeout ? ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT : ErrorDetails.AUDIO_TRACK_LOAD_ERROR;\n fatal = false;\n break;\n case PlaylistContextType.SUBTITLE_TRACK:\n details = timeout ? ErrorDetails.SUBTITLE_TRACK_LOAD_TIMEOUT : ErrorDetails.SUBTITLE_LOAD_ERROR;\n fatal = false;\n break;\n }\n if (loader) {\n this.resetInternalLoader(context.type);\n }\n const errorData = {\n type: ErrorTypes.NETWORK_ERROR,\n details,\n fatal,\n url: context.url,\n loader,\n context,\n error,\n networkDetails,\n stats\n };\n if (response) {\n const url = (networkDetails == null ? void 0 : networkDetails.url) || context.url;\n errorData.response = _objectSpread2({\n url,\n data: undefined\n }, response);\n }\n this.hls.trigger(Events.ERROR, errorData);\n }\n handlePlaylistLoaded(levelDetails, response, stats, context, networkDetails, loader) {\n const hls = this.hls;\n const {\n type,\n level,\n levelOrTrack,\n id,\n groupId,\n deliveryDirectives\n } = context;\n const url = getResponseUrl(response, context);\n const parent = mapContextToLevelType(context);\n let levelIndex = typeof context.level === 'number' && parent === PlaylistLevelType.MAIN ? level : undefined;\n const error = levelDetails.playlistParsingError;\n if (error) {\n this.hls.logger.warn(`${error} ${levelDetails.url}`);\n if (!hls.config.ignorePlaylistParsingErrors) {\n hls.trigger(Events.ERROR, {\n type: ErrorTypes.NETWORK_ERROR,\n details: ErrorDetails.LEVEL_PARSING_ERROR,\n fatal: false,\n url,\n error,\n reason: error.message,\n response,\n context,\n level: levelIndex,\n parent,\n networkDetails,\n stats\n });\n return;\n }\n levelDetails.playlistParsingError = null;\n }\n if (!levelDetails.fragments.length) {\n const _error = levelDetails.playlistParsingError = new Error('No Segments found in Playlist');\n hls.trigger(Events.ERROR, {\n type: ErrorTypes.NETWORK_ERROR,\n details: ErrorDetails.LEVEL_EMPTY_ERROR,\n fatal: false,\n url,\n error: _error,\n reason: _error.message,\n response,\n context,\n level: levelIndex,\n parent,\n networkDetails,\n stats\n });\n return;\n }\n if (levelDetails.live && loader) {\n if (loader.getCacheAge) {\n levelDetails.ageHeader = loader.getCacheAge() || 0;\n }\n if (!loader.getCacheAge || isNaN(levelDetails.ageHeader)) {\n levelDetails.ageHeader = 0;\n }\n }\n switch (type) {\n case PlaylistContextType.MANIFEST:\n case PlaylistContextType.LEVEL:\n if (levelIndex) {\n if (!levelOrTrack) {\n // fall-through to hls.levels[0]\n levelIndex = 0;\n } else {\n if (levelOrTrack !== hls.levels[levelIndex]) {\n // correct levelIndex when lower levels were removed from hls.levels\n const updatedIndex = hls.levels.indexOf(levelOrTrack);\n if (updatedIndex > -1) {\n levelIndex = updatedIndex;\n }\n }\n }\n }\n hls.trigger(Events.LEVEL_LOADED, {\n details: levelDetails,\n levelInfo: levelOrTrack || hls.levels[0],\n level: levelIndex || 0,\n id: id || 0,\n stats,\n networkDetails,\n deliveryDirectives,\n withoutMultiVariant: type === PlaylistContextType.MANIFEST\n });\n break;\n case PlaylistContextType.AUDIO_TRACK:\n hls.trigger(Events.AUDIO_TRACK_LOADED, {\n details: levelDetails,\n track: levelOrTrack,\n id: id || 0,\n groupId: groupId || '',\n stats,\n networkDetails,\n deliveryDirectives\n });\n break;\n case PlaylistContextType.SUBTITLE_TRACK:\n hls.trigger(Events.SUBTITLE_TRACK_LOADED, {\n details: levelDetails,\n track: levelOrTrack,\n id: id || 0,\n groupId: groupId || '',\n stats,\n networkDetails,\n deliveryDirectives\n });\n break;\n }\n }\n}\n\n/**\n * The `Hls` class is the core of the HLS.js library used to instantiate player instances.\n * @public\n */\nclass Hls {\n /**\n * Get the video-dev/hls.js package version.\n */\n static get version() {\n return version;\n }\n\n /**\n * Check if the required MediaSource Extensions are available.\n */\n static isMSESupported() {\n return isMSESupported();\n }\n\n /**\n * Check if MediaSource Extensions are available and isTypeSupported checks pass for any baseline codecs.\n */\n static isSupported() {\n return isSupported();\n }\n\n /**\n * Get the MediaSource global used for MSE playback (ManagedMediaSource, MediaSource, or WebKitMediaSource).\n */\n static getMediaSource() {\n return getMediaSource();\n }\n static get Events() {\n return Events;\n }\n static get MetadataSchema() {\n return MetadataSchema;\n }\n static get ErrorTypes() {\n return ErrorTypes;\n }\n static get ErrorDetails() {\n return ErrorDetails;\n }\n\n /**\n * Get the default configuration applied to new instances.\n */\n static get DefaultConfig() {\n if (!Hls.defaultConfig) {\n return hlsDefaultConfig;\n }\n return Hls.defaultConfig;\n }\n\n /**\n * Replace the default configuration applied to new instances.\n */\n static set DefaultConfig(defaultConfig) {\n Hls.defaultConfig = defaultConfig;\n }\n\n /**\n * Creates an instance of an HLS client that can attach to exactly one `HTMLMediaElement`.\n * @param userConfig - Configuration options applied over `Hls.DefaultConfig`\n */\n constructor(userConfig = {}) {\n /**\n * The runtime configuration used by the player. At instantiation this is combination of `hls.userConfig` merged over `Hls.DefaultConfig`.\n */\n this.config = void 0;\n /**\n * The configuration object provided on player instantiation.\n */\n this.userConfig = void 0;\n /**\n * The logger functions used by this player instance, configured on player instantiation.\n */\n this.logger = void 0;\n this.coreComponents = void 0;\n this.networkControllers = void 0;\n this._emitter = new EventEmitter();\n this._autoLevelCapping = -1;\n this._maxHdcpLevel = null;\n this.abrController = void 0;\n this.bufferController = void 0;\n this.capLevelController = void 0;\n this.latencyController = void 0;\n this.levelController = void 0;\n this.streamController = void 0;\n this.audioStreamController = void 0;\n this.subtititleStreamController = void 0;\n this.audioTrackController = void 0;\n this.subtitleTrackController = void 0;\n this.interstitialsController = void 0;\n this.gapController = void 0;\n this.emeController = void 0;\n this.cmcdController = void 0;\n this._media = null;\n this._url = null;\n this._sessionId = void 0;\n this.triggeringException = void 0;\n this.started = false;\n const logger = this.logger = enableLogs(userConfig.debug || false, 'Hls instance', userConfig.assetPlayerId);\n const config = this.config = mergeConfig(Hls.DefaultConfig, userConfig, logger);\n this.userConfig = userConfig;\n if (config.progressive) {\n enableStreamingMode(config, logger);\n }\n\n // core controllers and network loaders\n const {\n abrController: _AbrController,\n bufferController: _BufferController,\n capLevelController: _CapLevelController,\n errorController: _ErrorController,\n fpsController: _FpsController\n } = config;\n const errorController = new _ErrorController(this);\n const abrController = this.abrController = new _AbrController(this);\n // FragmentTracker must be defined before StreamController because the order of event handling is important\n const fragmentTracker = new FragmentTracker(this);\n const _InterstitialsController = config.interstitialsController;\n const interstitialsController = _InterstitialsController ? this.interstitialsController = new _InterstitialsController(this, Hls) : null;\n const bufferController = this.bufferController = new _BufferController(this, fragmentTracker);\n const capLevelController = this.capLevelController = new _CapLevelController(this);\n const fpsController = new _FpsController(this);\n const playListLoader = new PlaylistLoader(this);\n const _ContentSteeringController = config.contentSteeringController;\n // Instantiate ConentSteeringController before LevelController to receive Multivariant Playlist events first\n const contentSteering = _ContentSteeringController ? new _ContentSteeringController(this) : null;\n const levelController = this.levelController = new LevelController(this, contentSteering);\n const id3TrackController = new ID3TrackController(this);\n const keyLoader = new KeyLoader(this.config, this.logger);\n const streamController = this.streamController = new StreamController(this, fragmentTracker, keyLoader);\n const gapController = this.gapController = new GapController(this, fragmentTracker);\n\n // Cap level controller uses streamController to flush the buffer\n capLevelController.setStreamController(streamController);\n // fpsController uses streamController to switch when frames are being dropped\n fpsController.setStreamController(streamController);\n const networkControllers = [playListLoader, levelController, streamController];\n if (interstitialsController) {\n networkControllers.splice(1, 0, interstitialsController);\n }\n if (contentSteering) {\n networkControllers.splice(1, 0, contentSteering);\n }\n this.networkControllers = networkControllers;\n const coreComponents = [abrController, bufferController, gapController, capLevelController, fpsController, id3TrackController, fragmentTracker];\n this.audioTrackController = this.createController(config.audioTrackController, networkControllers);\n const AudioStreamControllerClass = config.audioStreamController;\n if (AudioStreamControllerClass) {\n networkControllers.push(this.audioStreamController = new AudioStreamControllerClass(this, fragmentTracker, keyLoader));\n }\n // Instantiate subtitleTrackController before SubtitleStreamController to receive level events first\n this.subtitleTrackController = this.createController(config.subtitleTrackController, networkControllers);\n const SubtitleStreamControllerClass = config.subtitleStreamController;\n if (SubtitleStreamControllerClass) {\n networkControllers.push(this.subtititleStreamController = new SubtitleStreamControllerClass(this, fragmentTracker, keyLoader));\n }\n this.createController(config.timelineController, coreComponents);\n keyLoader.emeController = this.emeController = this.createController(config.emeController, coreComponents);\n this.cmcdController = this.createController(config.cmcdController, coreComponents);\n this.latencyController = this.createController(LatencyController, coreComponents);\n this.coreComponents = coreComponents;\n\n // Error controller handles errors before and after all other controllers\n // This listener will be invoked after all other controllers error listeners\n networkControllers.push(errorController);\n const onErrorOut = errorController.onErrorOut;\n if (typeof onErrorOut === 'function') {\n this.on(Events.ERROR, onErrorOut, errorController);\n }\n // Autostart load handler\n this.on(Events.MANIFEST_LOADED, playListLoader.onManifestLoaded, playListLoader);\n }\n createController(ControllerClass, components) {\n if (ControllerClass) {\n const controllerInstance = new ControllerClass(this);\n if (components) {\n components.push(controllerInstance);\n }\n return controllerInstance;\n }\n return null;\n }\n\n // Delegate the EventEmitter through the public API of Hls.js\n on(event, listener, context = this) {\n this._emitter.on(event, listener, context);\n }\n once(event, listener, context = this) {\n this._emitter.once(event, listener, context);\n }\n removeAllListeners(event) {\n this._emitter.removeAllListeners(event);\n }\n off(event, listener, context = this, once) {\n this._emitter.off(event, listener, context, once);\n }\n listeners(event) {\n return this._emitter.listeners(event);\n }\n emit(event, name, eventObject) {\n return this._emitter.emit(event, name, eventObject);\n }\n trigger(event, eventObject) {\n if (this.config.debug) {\n return this.emit(event, event, eventObject);\n } else {\n try {\n return this.emit(event, event, eventObject);\n } catch (error) {\n this.logger.error('An internal error happened while handling event ' + event + '. Error message: \"' + error.message + '\". Here is a stacktrace:', error);\n // Prevent recursion in error event handlers that throw #5497\n if (!this.triggeringException) {\n this.triggeringException = true;\n const fatal = event === Events.ERROR;\n this.trigger(Events.ERROR, {\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.INTERNAL_EXCEPTION,\n fatal,\n event,\n error\n });\n this.triggeringException = false;\n }\n }\n }\n return false;\n }\n listenerCount(event) {\n return this._emitter.listenerCount(event);\n }\n\n /**\n * Dispose of the instance\n */\n destroy() {\n this.logger.log('destroy');\n this.trigger(Events.DESTROYING, undefined);\n this.detachMedia();\n this.removeAllListeners();\n this._autoLevelCapping = -1;\n this._url = null;\n this.networkControllers.forEach(component => component.destroy());\n this.networkControllers.length = 0;\n this.coreComponents.forEach(component => component.destroy());\n this.coreComponents.length = 0;\n // Remove any references that could be held in config options or callbacks\n const config = this.config;\n config.xhrSetup = config.fetchSetup = undefined;\n // @ts-ignore\n this.userConfig = null;\n }\n\n /**\n * Attaches Hls.js to a media element\n */\n attachMedia(data) {\n if (!data || 'media' in data && !data.media) {\n const error = new Error(`attachMedia failed: invalid argument (${data})`);\n this.trigger(Events.ERROR, {\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.ATTACH_MEDIA_ERROR,\n fatal: true,\n error\n });\n return;\n }\n this.logger.log(`attachMedia`);\n if (this._media) {\n this.logger.warn(`media must be detached before attaching`);\n this.detachMedia();\n }\n const attachMediaSource = 'media' in data;\n const media = attachMediaSource ? data.media : data;\n const attachingData = attachMediaSource ? data : {\n media\n };\n this._media = media;\n this.trigger(Events.MEDIA_ATTACHING, attachingData);\n }\n\n /**\n * Detach Hls.js from the media\n */\n detachMedia() {\n this.logger.log('detachMedia');\n this.trigger(Events.MEDIA_DETACHING, {});\n this._media = null;\n }\n\n /**\n * Detach HTMLMediaElement, MediaSource, and SourceBuffers without reset, for attaching to another instance\n */\n transferMedia() {\n this._media = null;\n const transferMedia = this.bufferController.transferMedia();\n this.trigger(Events.MEDIA_DETACHING, {\n transferMedia\n });\n return transferMedia;\n }\n\n /**\n * Set the source URL. Can be relative or absolute.\n */\n loadSource(url) {\n this.stopLoad();\n const media = this.media;\n const loadedSource = this._url;\n const loadingSource = this._url = urlToolkitExports.buildAbsoluteURL(self.location.href, url, {\n alwaysNormalize: true\n });\n this._autoLevelCapping = -1;\n this._maxHdcpLevel = null;\n this.logger.log(`loadSource:${loadingSource}`);\n if (media && loadedSource && (loadedSource !== loadingSource || this.bufferController.hasSourceTypes())) {\n // Remove and re-create MediaSource\n this.detachMedia();\n this.attachMedia(media);\n }\n // when attaching to a source URL, trigger a playlist load\n this.trigger(Events.MANIFEST_LOADING, {\n url: url\n });\n }\n\n /**\n * Gets the currently loaded URL\n */\n get url() {\n return this._url;\n }\n\n /**\n * Whether or not enough has been buffered to seek to start position or use `media.currentTime` to determine next load position\n */\n get hasEnoughToStart() {\n return this.streamController.hasEnoughToStart;\n }\n\n /**\n * Get the startPosition set on startLoad(position) or on autostart with config.startPosition\n */\n get startPosition() {\n return this.streamController.startPositionValue;\n }\n\n /**\n * Start loading data from the stream source.\n * Depending on default config, client starts loading automatically when a source is set.\n *\n * @param startPosition - Set the start position to stream from.\n * Defaults to -1 (None: starts from earliest point)\n */\n startLoad(startPosition = -1, skipSeekToStartPosition) {\n this.logger.log(`startLoad(${startPosition + (skipSeekToStartPosition ? ', <skip seek to start>' : '')})`);\n this.started = true;\n this.resumeBuffering();\n for (let i = 0; i < this.networkControllers.length; i++) {\n this.networkControllers[i].startLoad(startPosition, skipSeekToStartPosition);\n if (!this.started || !this.networkControllers) {\n break;\n }\n }\n }\n\n /**\n * Stop loading of any stream data.\n */\n stopLoad() {\n this.logger.log('stopLoad');\n this.started = false;\n for (let i = 0; i < this.networkControllers.length; i++) {\n this.networkControllers[i].stopLoad();\n if (this.started || !this.networkControllers) {\n break;\n }\n }\n }\n\n /**\n * Returns whether loading, toggled with `startLoad()` and `stopLoad()`, is active or not`.\n */\n get loadingEnabled() {\n return this.started;\n }\n\n /**\n * Returns state of fragment loading toggled by calling `pauseBuffering()` and `resumeBuffering()`.\n */\n get bufferingEnabled() {\n return this.streamController.bufferingEnabled;\n }\n\n /**\n * Resumes stream controller segment loading after `pauseBuffering` has been called.\n */\n resumeBuffering() {\n if (!this.bufferingEnabled) {\n this.logger.log(`resume buffering`);\n this.networkControllers.forEach(controller => {\n if (controller.resumeBuffering) {\n controller.resumeBuffering();\n }\n });\n }\n }\n\n /**\n * Prevents stream controller from loading new segments until `resumeBuffering` is called.\n * This allows for media buffering to be paused without interupting playlist loading.\n */\n pauseBuffering() {\n if (this.bufferingEnabled) {\n this.logger.log(`pause buffering`);\n this.networkControllers.forEach(controller => {\n if (controller.pauseBuffering) {\n controller.pauseBuffering();\n }\n });\n }\n }\n get inFlightFragments() {\n const inFlightData = {\n [PlaylistLevelType.MAIN]: this.streamController.inFlightFrag\n };\n if (this.audioStreamController) {\n inFlightData[PlaylistLevelType.AUDIO] = this.audioStreamController.inFlightFrag;\n }\n if (this.subtititleStreamController) {\n inFlightData[PlaylistLevelType.SUBTITLE] = this.subtititleStreamController.inFlightFrag;\n }\n return inFlightData;\n }\n\n /**\n * Swap through possible audio codecs in the stream (for example to switch from stereo to 5.1)\n */\n swapAudioCodec() {\n this.logger.log('swapAudioCodec');\n this.streamController.swapAudioCodec();\n }\n\n /**\n * When the media-element fails, this allows to detach and then re-attach it\n * as one call (convenience method).\n *\n * Automatic recovery of media-errors by this process is configurable.\n */\n recoverMediaError() {\n this.logger.log('recoverMediaError');\n const media = this._media;\n const time = media == null ? void 0 : media.currentTime;\n this.detachMedia();\n if (media) {\n this.attachMedia(media);\n if (time) {\n this.startLoad(time);\n }\n }\n }\n removeLevel(levelIndex) {\n this.levelController.removeLevel(levelIndex);\n }\n\n /**\n * @returns a UUID for this player instance\n */\n get sessionId() {\n let _sessionId = this._sessionId;\n if (!_sessionId) {\n _sessionId = this._sessionId = uuid();\n }\n return _sessionId;\n }\n\n /**\n * @returns an array of levels (variants) sorted by HDCP-LEVEL, RESOLUTION (height), FRAME-RATE, CODECS, VIDEO-RANGE, and BANDWIDTH\n */\n get levels() {\n const levels = this.levelController.levels;\n return levels ? levels : [];\n }\n\n /**\n * @returns LevelDetails of last loaded level (variant) or `null` prior to loading a media playlist.\n */\n get latestLevelDetails() {\n return this.streamController.getLevelDetails() || null;\n }\n\n /**\n * @returns Level object of selected level (variant) or `null` prior to selecting a level or once the level is removed.\n */\n get loadLevelObj() {\n return this.levelController.loadLevelObj;\n }\n\n /**\n * Index of quality level (variant) currently played\n */\n get currentLevel() {\n return this.streamController.currentLevel;\n }\n\n /**\n * Set quality level index immediately. This will flush the current buffer to replace the quality asap. That means playback will interrupt at least shortly to re-buffer and re-sync eventually. Set to -1 for automatic level selection.\n */\n set currentLevel(newLevel) {\n this.logger.log(`set currentLevel:${newLevel}`);\n this.levelController.manualLevel = newLevel;\n this.streamController.immediateLevelSwitch();\n }\n\n /**\n * Index of next quality level loaded as scheduled by stream controller.\n */\n get nextLevel() {\n return this.streamController.nextLevel;\n }\n\n /**\n * Set quality level index for next loaded data.\n * This will switch the video quality asap, without interrupting playback.\n * May abort current loading of data, and flush parts of buffer (outside currently played fragment region).\n * @param newLevel - Pass -1 for automatic level selection\n */\n set nextLevel(newLevel) {\n this.logger.log(`set nextLevel:${newLevel}`);\n this.levelController.manualLevel = newLevel;\n this.streamController.nextLevelSwitch();\n }\n\n /**\n * Return the quality level of the currently or last (of none is loaded currently) segment\n */\n get loadLevel() {\n return this.levelController.level;\n }\n\n /**\n * Set quality level index for next loaded data in a conservative way.\n * This will switch the quality without flushing, but interrupt current loading.\n * Thus the moment when the quality switch will appear in effect will only be after the already existing buffer.\n * @param newLevel - Pass -1 for automatic level selection\n */\n set loadLevel(newLevel) {\n this.logger.log(`set loadLevel:${newLevel}`);\n this.levelController.manualLevel = newLevel;\n }\n\n /**\n * get next quality level loaded\n */\n get nextLoadLevel() {\n return this.levelController.nextLoadLevel;\n }\n\n /**\n * Set quality level of next loaded segment in a fully \"non-destructive\" way.\n * Same as `loadLevel` but will wait for next switch (until current loading is done).\n */\n set nextLoadLevel(level) {\n this.levelController.nextLoadLevel = level;\n }\n\n /**\n * Return \"first level\": like a default level, if not set,\n * falls back to index of first level referenced in manifest\n */\n get firstLevel() {\n return Math.max(this.levelController.firstLevel, this.minAutoLevel);\n }\n\n /**\n * Sets \"first-level\", see getter.\n */\n set firstLevel(newLevel) {\n this.logger.log(`set firstLevel:${newLevel}`);\n this.levelController.firstLevel = newLevel;\n }\n\n /**\n * Return the desired start level for the first fragment that will be loaded.\n * The default value of -1 indicates automatic start level selection.\n * Setting hls.nextAutoLevel without setting a startLevel will result in\n * the nextAutoLevel value being used for one fragment load.\n */\n get startLevel() {\n const startLevel = this.levelController.startLevel;\n if (startLevel === -1 && this.abrController.forcedAutoLevel > -1) {\n return this.abrController.forcedAutoLevel;\n }\n return startLevel;\n }\n\n /**\n * set start level (level of first fragment that will be played back)\n * if not overrided by user, first level appearing in manifest will be used as start level\n * if -1 : automatic start level selection, playback will start from level matching download bandwidth\n * (determined from download of first segment)\n */\n set startLevel(newLevel) {\n this.logger.log(`set startLevel:${newLevel}`);\n // if not in automatic start level detection, ensure startLevel is greater than minAutoLevel\n if (newLevel !== -1) {\n newLevel = Math.max(newLevel, this.minAutoLevel);\n }\n this.levelController.startLevel = newLevel;\n }\n\n /**\n * Whether level capping is enabled.\n * Default value is set via `config.capLevelToPlayerSize`.\n */\n get capLevelToPlayerSize() {\n return this.config.capLevelToPlayerSize;\n }\n\n /**\n * Enables or disables level capping. If disabled after previously enabled, `nextLevelSwitch` will be immediately called.\n */\n set capLevelToPlayerSize(shouldStartCapping) {\n const newCapLevelToPlayerSize = !!shouldStartCapping;\n if (newCapLevelToPlayerSize !== this.config.capLevelToPlayerSize) {\n if (newCapLevelToPlayerSize) {\n this.capLevelController.startCapping(); // If capping occurs, nextLevelSwitch will happen based on size.\n } else {\n this.capLevelController.stopCapping();\n this.autoLevelCapping = -1;\n this.streamController.nextLevelSwitch(); // Now we're uncapped, get the next level asap.\n }\n this.config.capLevelToPlayerSize = newCapLevelToPlayerSize;\n }\n }\n\n /**\n * Capping/max level value that should be used by automatic level selection algorithm (`ABRController`)\n */\n get autoLevelCapping() {\n return this._autoLevelCapping;\n }\n\n /**\n * Returns the current bandwidth estimate in bits per second, when available. Otherwise, `NaN` is returned.\n */\n get bandwidthEstimate() {\n const {\n bwEstimator\n } = this.abrController;\n if (!bwEstimator) {\n return NaN;\n }\n return bwEstimator.getEstimate();\n }\n set bandwidthEstimate(abrEwmaDefaultEstimate) {\n this.abrController.resetEstimator(abrEwmaDefaultEstimate);\n }\n get abrEwmaDefaultEstimate() {\n const {\n bwEstimator\n } = this.abrController;\n if (!bwEstimator) {\n return NaN;\n }\n return bwEstimator.defaultEstimate;\n }\n\n /**\n * get time to first byte estimate\n * @type {number}\n */\n get ttfbEstimate() {\n const {\n bwEstimator\n } = this.abrController;\n if (!bwEstimator) {\n return NaN;\n }\n return bwEstimator.getEstimateTTFB();\n }\n\n /**\n * Capping/max level value that should be used by automatic level selection algorithm (`ABRController`)\n */\n set autoLevelCapping(newLevel) {\n if (this._autoLevelCapping !== newLevel) {\n this.logger.log(`set autoLevelCapping:${newLevel}`);\n this._autoLevelCapping = newLevel;\n this.levelController.checkMaxAutoUpdated();\n }\n }\n get maxHdcpLevel() {\n return this._maxHdcpLevel;\n }\n set maxHdcpLevel(value) {\n if (isHdcpLevel(value) && this._maxHdcpLevel !== value) {\n this._maxHdcpLevel = value;\n this.levelController.checkMaxAutoUpdated();\n }\n }\n\n /**\n * True when automatic level selection enabled\n */\n get autoLevelEnabled() {\n return this.levelController.manualLevel === -1;\n }\n\n /**\n * Level set manually (if any)\n */\n get manualLevel() {\n return this.levelController.manualLevel;\n }\n\n /**\n * min level selectable in auto mode according to config.minAutoBitrate\n */\n get minAutoLevel() {\n const {\n levels,\n config: {\n minAutoBitrate\n }\n } = this;\n if (!levels) return 0;\n const len = levels.length;\n for (let i = 0; i < len; i++) {\n if (levels[i].maxBitrate >= minAutoBitrate) {\n return i;\n }\n }\n return 0;\n }\n\n /**\n * max level selectable in auto mode according to autoLevelCapping\n */\n get maxAutoLevel() {\n const {\n levels,\n autoLevelCapping,\n maxHdcpLevel\n } = this;\n let maxAutoLevel;\n if (autoLevelCapping === -1 && levels != null && levels.length) {\n maxAutoLevel = levels.length - 1;\n } else {\n maxAutoLevel = autoLevelCapping;\n }\n if (maxHdcpLevel) {\n for (let i = maxAutoLevel; i--;) {\n const hdcpLevel = levels[i].attrs['HDCP-LEVEL'];\n if (hdcpLevel && hdcpLevel <= maxHdcpLevel) {\n return i;\n }\n }\n }\n return maxAutoLevel;\n }\n get firstAutoLevel() {\n return this.abrController.firstAutoLevel;\n }\n\n /**\n * next automatically selected quality level\n */\n get nextAutoLevel() {\n return this.abrController.nextAutoLevel;\n }\n\n /**\n * this setter is used to force next auto level.\n * this is useful to force a switch down in auto mode:\n * in case of load error on level N, hls.js can set nextAutoLevel to N-1 for example)\n * forced value is valid for one fragment. upon successful frag loading at forced level,\n * this value will be resetted to -1 by ABR controller.\n */\n set nextAutoLevel(nextLevel) {\n this.abrController.nextAutoLevel = nextLevel;\n }\n\n /**\n * get the datetime value relative to media.currentTime for the active level Program Date Time if present\n */\n get playingDate() {\n return this.streamController.currentProgramDateTime;\n }\n get mainForwardBufferInfo() {\n return this.streamController.getMainFwdBufferInfo();\n }\n get maxBufferLength() {\n return this.streamController.maxBufferLength;\n }\n\n /**\n * Find and select the best matching audio track, making a level switch when a Group change is necessary.\n * Updates `hls.config.audioPreference`. Returns the selected track, or null when no matching track is found.\n */\n setAudioOption(audioOption) {\n var _this$audioTrackContr;\n return ((_this$audioTrackContr = this.audioTrackController) == null ? void 0 : _this$audioTrackContr.setAudioOption(audioOption)) || null;\n }\n /**\n * Find and select the best matching subtitle track, making a level switch when a Group change is necessary.\n * Updates `hls.config.subtitlePreference`. Returns the selected track, or null when no matching track is found.\n */\n setSubtitleOption(subtitleOption) {\n var _this$subtitleTrackCo;\n return ((_this$subtitleTrackCo = this.subtitleTrackController) == null ? void 0 : _this$subtitleTrackCo.setSubtitleOption(subtitleOption)) || null;\n }\n\n /**\n * Get the complete list of audio tracks across all media groups\n */\n get allAudioTracks() {\n const audioTrackController = this.audioTrackController;\n return audioTrackController ? audioTrackController.allAudioTracks : [];\n }\n\n /**\n * Get the list of selectable audio tracks\n */\n get audioTracks() {\n const audioTrackController = this.audioTrackController;\n return audioTrackController ? audioTrackController.audioTracks : [];\n }\n\n /**\n * index of the selected audio track (index in audio track lists)\n */\n get audioTrack() {\n const audioTrackController = this.audioTrackController;\n return audioTrackController ? audioTrackController.audioTrack : -1;\n }\n\n /**\n * selects an audio track, based on its index in audio track lists\n */\n set audioTrack(audioTrackId) {\n const audioTrackController = this.audioTrackController;\n if (audioTrackController) {\n audioTrackController.audioTrack = audioTrackId;\n }\n }\n\n /**\n * get the complete list of subtitle tracks across all media groups\n */\n get allSubtitleTracks() {\n const subtitleTrackController = this.subtitleTrackController;\n return subtitleTrackController ? subtitleTrackController.allSubtitleTracks : [];\n }\n\n /**\n * get alternate subtitle tracks list from playlist\n */\n get subtitleTracks() {\n const subtitleTrackController = this.subtitleTrackController;\n return subtitleTrackController ? subtitleTrackController.subtitleTracks : [];\n }\n\n /**\n * index of the selected subtitle track (index in subtitle track lists)\n */\n get subtitleTrack() {\n const subtitleTrackController = this.subtitleTrackController;\n return subtitleTrackController ? subtitleTrackController.subtitleTrack : -1;\n }\n get media() {\n return this._media;\n }\n\n /**\n * select an subtitle track, based on its index in subtitle track lists\n */\n set subtitleTrack(subtitleTrackId) {\n const subtitleTrackController = this.subtitleTrackController;\n if (subtitleTrackController) {\n subtitleTrackController.subtitleTrack = subtitleTrackId;\n }\n }\n\n /**\n * Whether subtitle display is enabled or not\n */\n get subtitleDisplay() {\n const subtitleTrackController = this.subtitleTrackController;\n return subtitleTrackController ? subtitleTrackController.subtitleDisplay : false;\n }\n\n /**\n * Enable/disable subtitle display rendering\n */\n set subtitleDisplay(value) {\n const subtitleTrackController = this.subtitleTrackController;\n if (subtitleTrackController) {\n subtitleTrackController.subtitleDisplay = value;\n }\n }\n\n /**\n * get mode for Low-Latency HLS loading\n */\n get lowLatencyMode() {\n return this.config.lowLatencyMode;\n }\n\n /**\n * Enable/disable Low-Latency HLS part playlist and segment loading, and start live streams at playlist PART-HOLD-BACK rather than HOLD-BACK.\n */\n set lowLatencyMode(mode) {\n this.config.lowLatencyMode = mode;\n }\n\n /**\n * Position (in seconds) of live sync point (ie edge of live position minus safety delay defined by ```hls.config.liveSyncDuration```)\n * @returns null prior to loading live Playlist\n */\n get liveSyncPosition() {\n return this.latencyController.liveSyncPosition;\n }\n\n /**\n * Estimated position (in seconds) of live edge (ie edge of live playlist plus time sync playlist advanced)\n * @returns 0 before first playlist is loaded\n */\n get latency() {\n return this.latencyController.latency;\n }\n\n /**\n * maximum distance from the edge before the player seeks forward to ```hls.liveSyncPosition```\n * configured using ```liveMaxLatencyDurationCount``` (multiple of target duration) or ```liveMaxLatencyDuration```\n * @returns 0 before first playlist is loaded\n */\n get maxLatency() {\n return this.latencyController.maxLatency;\n }\n\n /**\n * target distance from the edge as calculated by the latency controller\n */\n get targetLatency() {\n return this.latencyController.targetLatency;\n }\n set targetLatency(latency) {\n this.latencyController.targetLatency = latency;\n }\n\n /**\n * the rate at which the edge of the current live playlist is advancing or 1 if there is none\n */\n get drift() {\n return this.latencyController.drift;\n }\n\n /**\n * set to true when startLoad is called before MANIFEST_PARSED event\n */\n get forceStartLoad() {\n return this.streamController.forceStartLoad;\n }\n\n /**\n * ContentSteering pathways getter\n */\n get pathways() {\n return this.levelController.pathways;\n }\n\n /**\n * ContentSteering pathwayPriority getter/setter\n */\n get pathwayPriority() {\n return this.levelController.pathwayPriority;\n }\n set pathwayPriority(pathwayPriority) {\n this.levelController.pathwayPriority = pathwayPriority;\n }\n\n /**\n * returns true when all SourceBuffers are buffered to the end\n */\n get bufferedToEnd() {\n var _this$bufferControlle;\n return !!((_this$bufferControlle = this.bufferController) != null && _this$bufferControlle.bufferedToEnd);\n }\n\n /**\n * returns Interstitials Program Manager\n */\n get interstitialsManager() {\n var _this$interstitialsCo;\n return ((_this$interstitialsCo = this.interstitialsController) == null ? void 0 : _this$interstitialsCo.interstitialsManager) || null;\n }\n\n /**\n * returns mediaCapabilities.decodingInfo for a variant/rendition\n */\n getMediaDecodingInfo(level, audioTracks = this.allAudioTracks) {\n const audioTracksByGroup = getAudioTracksByGroup(audioTracks);\n return getMediaDecodingInfoPromise(level, audioTracksByGroup, navigator.mediaCapabilities);\n }\n}\nHls.defaultConfig = void 0;\n\nexport { AbrController, AttrList, AudioStreamController, AudioTrackController, BasePlaylistController, BaseSegment, BaseStreamController, BufferController, CMCDController, CapLevelController, ChunkMetadata, ContentSteeringController, Cues, DateRange, EMEController, ErrorActionFlags, ErrorController, ErrorDetails, ErrorTypes, Events, FPSController, FetchLoader, Fragment, Hls, HlsSkip, HlsUrlParameters, KeySystemFormats, KeySystems, Level, LevelDetails, LevelKey, LoadStats, M3U8Parser, MetadataSchema, NetworkErrorAction, Part, PlaylistLevelType, SubtitleStreamController, SubtitleTrackController, TimelineController, XhrLoader, Hls as default, fetchSupported, getMediaSource, isMSESupported, isSupported, requestMediaKeySystemAccess };\n//# sourceMappingURL=hls.mjs.map\n","import * as React from 'react';\nimport { useRef, useEffect, forwardRef, useImperativeHandle } from 'react';\nimport * as THREE from 'three';\nimport { useThree } from '@react-three/fiber';\nimport { suspend } from 'suspend-react';\nimport { Events } from 'hls.js';\n\n/* eslint react-hooks/exhaustive-deps: 1 */\nconst IS_BROWSER = /* @__PURE__ */((_window$document, _window$navigator) => typeof window !== 'undefined' && typeof ((_window$document = window.document) == null ? void 0 : _window$document.createElement) === 'function' && typeof ((_window$navigator = window.navigator) == null ? void 0 : _window$navigator.userAgent) === 'string')();\nlet _HLSModule = null;\nasync function getHls(...args) {\n var _HLSModule2;\n (_HLSModule2 = _HLSModule) !== null && _HLSModule2 !== void 0 ? _HLSModule2 : _HLSModule = await import('hls.js'); // singleton\n const Ctor = _HLSModule.default;\n if (Ctor.isSupported()) {\n return new Ctor(...args);\n }\n return null;\n}\nfunction useVideoTexture(srcOrSrcObject, {\n unsuspend = 'loadedmetadata',\n start = true,\n hls: hlsConfig = {},\n crossOrigin = 'anonymous',\n muted = true,\n loop = true,\n playsInline = true,\n onVideoFrame,\n ...videoProps\n} = {}) {\n const gl = useThree(state => state.gl);\n const hlsRef = useRef(null);\n const texture = suspend(() => new Promise(async res => {\n let src = undefined;\n let srcObject = undefined;\n if (typeof srcOrSrcObject === 'string') {\n src = srcOrSrcObject;\n } else {\n srcObject = srcOrSrcObject;\n }\n const video = Object.assign(document.createElement('video'), {\n src,\n srcObject,\n crossOrigin,\n loop,\n muted,\n playsInline,\n ...videoProps\n });\n\n // hlsjs extension\n if (src && IS_BROWSER && src.endsWith('.m3u8')) {\n const hls = hlsRef.current = await getHls(hlsConfig);\n if (hls) {\n hls.on(Events.MEDIA_ATTACHED, () => void hls.loadSource(src));\n hls.attachMedia(video);\n }\n }\n const texture = new THREE.VideoTexture(video);\n texture.colorSpace = gl.outputColorSpace;\n video.addEventListener(unsuspend, () => res(texture));\n }), [srcOrSrcObject]);\n const video = texture.source.data;\n useVideoFrame(video, onVideoFrame);\n useEffect(() => {\n start && texture.image.play();\n return () => {\n if (hlsRef.current) {\n hlsRef.current.destroy();\n hlsRef.current = null;\n }\n };\n }, [texture, start]);\n return texture;\n}\n\n//\n// VideoTexture\n//\n\nconst VideoTexture = /* @__PURE__ */forwardRef(({\n children,\n src,\n ...config\n}, fref) => {\n const texture = useVideoTexture(src, config);\n useEffect(() => {\n return () => void texture.dispose();\n }, [texture]);\n useImperativeHandle(fref, () => texture, [texture]); // expose texture through ref\n\n return /*#__PURE__*/React.createElement(React.Fragment, null, children == null ? void 0 : children(texture));\n});\n\n// rVFC hook\n\nconst useVideoFrame = (video, f) => {\n useEffect(() => {\n if (!f) return;\n if (!video.requestVideoFrameCallback) return;\n let handle;\n const callback = (...args) => {\n f(...args);\n handle = video.requestVideoFrameCallback(callback);\n };\n video.requestVideoFrameCallback(callback);\n return () => video.cancelVideoFrameCallback(handle);\n }, [video, f]);\n};\n\nexport { VideoTexture, useVideoTexture };\n","import * as THREE from 'three';\nimport { TextureLoader } from 'three';\nimport { useThree, useLoader } from '@react-three/fiber';\nimport * as React from 'react';\nimport { useState } from 'react';\n\n/* eslint react-hooks/exhaustive-deps: 1 */\n// utils\nconst getFirstFrame = (frames, frameName) => {\n if (Array.isArray(frames)) {\n return frames[0];\n } else {\n const k = frameName !== null && frameName !== void 0 ? frameName : Object.keys(frames)[0];\n return frames[k][0];\n }\n};\nconst checkIfFrameIsEmpty = frameData => {\n for (let i = 3; i < frameData.length; i += 4) {\n if (frameData[i] !== 0) {\n return false;\n }\n }\n return true;\n};\nfunction useSpriteLoader(/** The URL of the sprite sheet. */\ninput, /** The JSON data of the sprite sheet. */\njson, /** The names of the animations in the sprite sheet. */\nanimationNames, /** The number of frames in the sprite sheet. */\nnumberOfFrames, /** A callback that is called when the sprite sheet is loaded. */\nonLoad, /** The settings to use when creating the 2D context. */\ncanvasRenderingContext2DSettings) {\n const viewportRef = React.useRef(useThree(state => state.viewport));\n const spriteDataRef = React.useRef(null);\n const totalFrames = React.useRef(0);\n const aspectFactor = 0.1;\n const inputRef = React.useRef(input);\n const jsonRef = React.useRef(json);\n const animationFramesRef = React.useRef(animationNames);\n const [spriteData, setSpriteData] = useState(null);\n const [spriteTexture, setSpriteTexture] = React.useState(new THREE.Texture());\n const textureLoader = React.useMemo(() => new THREE.TextureLoader(), []);\n const [spriteObj, setSpriteObj] = useState(null);\n const calculateAspectRatio = React.useCallback((width, height, factor) => {\n const adaptedHeight = height * (viewportRef.current.aspect > width / height ? viewportRef.current.width / width : viewportRef.current.height / height);\n const adaptedWidth = width * (viewportRef.current.aspect > width / height ? viewportRef.current.width / width : viewportRef.current.height / height);\n const scaleX = adaptedWidth * factor;\n const scaleY = adaptedHeight * factor;\n const currentMaxScale = 1;\n // Calculate the maximum scale based on the aspect ratio and max scale limit\n let finalMaxScaleW = Math.min(currentMaxScale, scaleX);\n let finalMaxScaleH = Math.min(currentMaxScale, scaleY);\n\n // Ensure that scaleX and scaleY do not exceed the max scale while maintaining aspect ratio\n if (scaleX > currentMaxScale) {\n finalMaxScaleW = currentMaxScale;\n finalMaxScaleH = scaleY / scaleX * currentMaxScale;\n }\n return new THREE.Vector3(finalMaxScaleW, finalMaxScaleH, 1);\n }, []);\n const getRowsAndColumns = React.useCallback((texture, totalFrames) => {\n if (texture.image) {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d', canvasRenderingContext2DSettings);\n if (!ctx) {\n throw new Error('Failed to get 2d context');\n }\n canvas.width = texture.image.width;\n canvas.height = texture.image.height;\n ctx.drawImage(texture.image, 0, 0);\n const width = texture.image.width;\n const height = texture.image.height;\n\n // Calculate rows and columns based on the number of frames and image dimensions\n const cols = Math.round(Math.sqrt(totalFrames * (width / height)));\n const rows = Math.round(totalFrames / cols);\n const frameWidth = width / cols;\n const frameHeight = height / rows;\n const emptyFrames = [];\n for (let row = 0; row < rows; row++) {\n for (let col = 0; col < cols; col++) {\n const frameIndex = row * cols + col;\n if (frameIndex >= totalFrames) {\n emptyFrames.push({\n row,\n col\n });\n continue;\n }\n const frameData = ctx.getImageData(col * frameWidth, row * frameHeight, frameWidth, frameHeight).data;\n const isEmpty = checkIfFrameIsEmpty(frameData);\n if (isEmpty) {\n emptyFrames.push({\n row,\n col\n });\n }\n }\n }\n return {\n rows,\n columns: cols,\n frameWidth,\n frameHeight,\n emptyFrames\n };\n } else {\n return {\n rows: 0,\n columns: 0,\n frameWidth: 0,\n frameHeight: 0,\n emptyFrames: []\n };\n }\n }, [canvasRenderingContext2DSettings]);\n\n // calculate scale ratio for the frames\n const calculateScaleRatio = React.useCallback(frames => {\n // Helper function to calculate scale ratio for an array of frames\n const processFrameArray = frameArray => {\n // Find the largest frame\n let largestFrame = null;\n for (const frame of frameArray) {\n const {\n w,\n h\n } = frame.frame;\n const area = w * h;\n if (!largestFrame || area > largestFrame.area) {\n largestFrame = {\n w,\n h,\n area\n };\n }\n }\n\n // Set scaleRatio property on each frame\n const frameArr = frameArray.map(frame => {\n const {\n w,\n h\n } = frame.frame;\n const area = w * h;\n const scaleRatio = largestFrame ? area === largestFrame.area ? 1 : Math.sqrt(area / largestFrame.area) : 1;\n return {\n ...frame,\n scaleRatio\n };\n });\n return frameArr;\n };\n\n // Handle both array and record cases\n if (Array.isArray(frames)) {\n return processFrameArray(frames);\n } else {\n const result = {};\n for (const key in frames) {\n result[key] = processFrameArray(frames[key]);\n }\n return result;\n }\n }, []);\n\n // for frame based JSON Hash sprite data\n const parseFrames = React.useCallback(() => {\n const sprites = {};\n const data = spriteDataRef.current;\n const delimiters = animationFramesRef.current;\n if (data) {\n if (delimiters && Array.isArray(data['frames'])) {\n for (let i = 0; i < delimiters.length; i++) {\n // we convert each named animation group into an array\n sprites[delimiters[i]] = [];\n for (const value of data['frames']) {\n const frameData = value['frame'];\n const sourceWidth = value['sourceSize']['w'];\n const sourceHeight = value['sourceSize']['h'];\n if (typeof value['filename'] === 'string' && value['filename'].toLowerCase().indexOf(delimiters[i].toLowerCase()) !== -1) {\n sprites[delimiters[i]].push({\n ...value,\n frame: frameData,\n sourceSize: {\n w: sourceWidth,\n h: sourceHeight\n }\n });\n }\n }\n }\n for (const frame in sprites) {\n const scaleRatioData = calculateScaleRatio(sprites[frame]);\n if (Array.isArray(scaleRatioData)) {\n sprites[frame] = scaleRatioData;\n }\n }\n return sprites;\n } else if (delimiters && typeof data['frames'] === 'object') {\n for (let i = 0; i < delimiters.length; i++) {\n // we convert each named animation group into an array\n sprites[delimiters[i]] = [];\n for (const innerKey in data['frames']) {\n const value = data['frames'][innerKey];\n const frameData = value['frame'];\n const sourceWidth = value['sourceSize']['w'];\n const sourceHeight = value['sourceSize']['h'];\n if (typeof innerKey === 'string' && innerKey.toLowerCase().indexOf(delimiters[i].toLowerCase()) !== -1) {\n sprites[delimiters[i]].push({\n ...value,\n frame: frameData,\n sourceSize: {\n w: sourceWidth,\n h: sourceHeight\n }\n });\n }\n }\n }\n for (const frame in sprites) {\n const scaleRatioData = calculateScaleRatio(sprites[frame]);\n if (Array.isArray(scaleRatioData)) {\n sprites[frame] = scaleRatioData;\n }\n }\n return sprites;\n } else {\n let spritesArr = [];\n if (data != null && data.frames) {\n if (Array.isArray(data.frames)) {\n spritesArr = data.frames.map(frame => ({\n ...frame,\n x: frame.frame.x,\n y: frame.frame.y,\n w: frame.frame.w,\n h: frame.frame.h\n }));\n } else {\n spritesArr = Object.values(data.frames).flat().map(frame => ({\n ...frame,\n x: frame.frame.x,\n y: frame.frame.y,\n w: frame.frame.w,\n h: frame.frame.h\n }));\n }\n }\n return calculateScaleRatio(spritesArr);\n }\n }\n return [];\n }, [calculateScaleRatio, spriteDataRef]);\n const parseSpriteData = React.useCallback((json, _spriteTexture) => {\n let aspect = new THREE.Vector3(1, 1, 1);\n // sprite only case\n if (json === null) {\n if (_spriteTexture && numberOfFrames) {\n //get size from texture\n const width = _spriteTexture.image.width;\n const height = _spriteTexture.image.height;\n totalFrames.current = numberOfFrames;\n const {\n rows,\n columns,\n frameWidth,\n frameHeight,\n emptyFrames\n } = getRowsAndColumns(_spriteTexture, numberOfFrames);\n const nonJsonFrames = {\n frames: [],\n meta: {\n version: '1.0',\n size: {\n w: width,\n h: height\n },\n rows,\n columns,\n frameWidth,\n frameHeight,\n scale: '1'\n }\n };\n for (let row = 0; row < rows; row++) {\n for (let col = 0; col < columns; col++) {\n const isExcluded = (emptyFrames !== null && emptyFrames !== void 0 ? emptyFrames : []).some(coord => coord.row === row && coord.col === col);\n if (isExcluded) {\n continue;\n }\n if (Array.isArray(nonJsonFrames.frames)) {\n nonJsonFrames.frames.push({\n frame: {\n x: col * frameWidth,\n y: row * frameHeight,\n w: frameWidth,\n h: frameHeight\n },\n scaleRatio: 1,\n rotated: false,\n trimmed: false,\n spriteSourceSize: {\n x: 0,\n y: 0,\n w: frameWidth,\n h: frameHeight\n },\n sourceSize: {\n w: frameWidth,\n h: frameHeight\n }\n });\n }\n }\n }\n aspect = calculateAspectRatio(frameWidth, frameHeight, aspectFactor);\n spriteDataRef.current = nonJsonFrames;\n }\n\n //scale ratio for standalone sprite\n if (spriteDataRef.current && spriteDataRef.current.frames) {\n spriteDataRef.current.frames = calculateScaleRatio(spriteDataRef.current.frames);\n }\n } else if (_spriteTexture) {\n spriteDataRef.current = json;\n spriteDataRef.current.frames = parseFrames();\n totalFrames.current = Array.isArray(json.frames) ? json.frames.length : Object.keys(json.frames).length;\n const {\n w,\n h\n } = getFirstFrame(json.frames).sourceSize;\n aspect = calculateAspectRatio(w, h, aspectFactor);\n }\n setSpriteData(spriteDataRef.current);\n if ('encoding' in _spriteTexture) {\n _spriteTexture.encoding = 3001; // sRGBEncoding\n } else if ('colorSpace' in _spriteTexture) {\n //@ts-ignore\n _spriteTexture.colorSpace = THREE.SRGBColorSpace;\n }\n setSpriteTexture(_spriteTexture);\n setSpriteObj({\n spriteTexture: _spriteTexture,\n spriteData: spriteDataRef.current,\n aspect: aspect\n });\n }, [getRowsAndColumns, numberOfFrames, parseFrames, calculateAspectRatio, calculateScaleRatio]);\n\n /**\r\n *\r\n */\n const loadJsonAndTextureAndExecuteCallback = React.useCallback((jsonUrl, textureUrl, callback) => {\n const jsonPromise = fetch(jsonUrl).then(response => response.json());\n const texturePromise = new Promise(resolve => {\n textureLoader.load(textureUrl, resolve);\n });\n Promise.all([jsonPromise, texturePromise]).then(response => {\n callback(response[0], response[1]);\n });\n }, [textureLoader]);\n const loadStandaloneSprite = React.useCallback(textureUrl => {\n if (!textureUrl && !inputRef.current) {\n throw new Error('Either textureUrl or input must be provided');\n }\n const validUrl = textureUrl !== null && textureUrl !== void 0 ? textureUrl : inputRef.current;\n if (!validUrl) {\n throw new Error('A valid texture URL must be provided');\n }\n textureLoader.load(validUrl, texture => parseSpriteData(null, texture));\n }, [textureLoader, parseSpriteData]);\n const loadJsonAndTexture = React.useCallback((textureUrl, jsonUrl) => {\n if (jsonUrl && textureUrl) {\n loadJsonAndTextureAndExecuteCallback(jsonUrl, textureUrl, parseSpriteData);\n } else {\n loadStandaloneSprite(textureUrl);\n }\n }, [loadJsonAndTextureAndExecuteCallback, loadStandaloneSprite, parseSpriteData]);\n React.useLayoutEffect(() => {\n if (jsonRef.current && inputRef.current) {\n loadJsonAndTextureAndExecuteCallback(jsonRef.current, inputRef.current, parseSpriteData);\n } else if (inputRef.current) {\n // only load the texture, this is an image sprite only\n loadStandaloneSprite();\n }\n const _inputRef = inputRef.current;\n return () => {\n if (_inputRef) {\n useLoader.clear(TextureLoader, _inputRef);\n }\n };\n }, [loadJsonAndTextureAndExecuteCallback, loadStandaloneSprite, parseSpriteData]);\n React.useLayoutEffect(() => {\n onLoad == null || onLoad(spriteTexture, spriteData !== null && spriteData !== void 0 ? spriteData : null);\n }, [spriteTexture, spriteData, onLoad]);\n return {\n spriteObj,\n loadJsonAndTexture\n };\n}\nuseSpriteLoader.preload = url => useLoader.preload(TextureLoader, url);\nuseSpriteLoader.clear = input => useLoader.clear(TextureLoader, input);\n\nexport { checkIfFrameIsEmpty, getFirstFrame, useSpriteLoader };\n","import * as React from 'react';\nimport { useThree, useFrame } from '@react-three/fiber';\n\nfunction useHelper(object3D, helperConstructor, ...args) {\n const helper = React.useRef(null);\n const scene = useThree(state => state.scene);\n React.useLayoutEffect(() => {\n let currentHelper = undefined;\n if (object3D && object3D != null && object3D.current && helperConstructor) {\n helper.current = currentHelper = new helperConstructor(object3D.current, ...args);\n }\n if (currentHelper) {\n // Prevent the helpers from blocking rays\n currentHelper.traverse(child => child.raycast = () => null);\n scene.add(currentHelper);\n return () => {\n helper.current = undefined;\n scene.remove(currentHelper);\n currentHelper.dispose == null || currentHelper.dispose();\n };\n }\n }, [scene, helperConstructor, object3D, ...args]);\n useFrame(() => {\n var _helper$current;\n return void ((_helper$current = helper.current) == null || _helper$current.update == null ? void 0 : _helper$current.update());\n });\n return helper;\n}\n\n//\n\nconst Helper = ({\n type: helperConstructor,\n args = []\n}) => {\n const thisRef = React.useRef(null);\n const parentRef = React.useRef(null);\n React.useLayoutEffect(() => {\n parentRef.current = thisRef.current.parent;\n });\n useHelper(parentRef, helperConstructor, ...args);\n return /*#__PURE__*/React.createElement(\"object3D\", {\n ref: thisRef\n });\n};\n\nexport { Helper, useHelper };\n","// stats.js - http://github.com/mrdoob/stats.js\n(function(f,e){\"object\"===typeof exports&&\"undefined\"!==typeof module?module.exports=e():\"function\"===typeof define&&define.amd?define(e):f.Stats=e()})(this,function(){var f=function(){function e(a){c.appendChild(a.dom);return a}function u(a){for(var d=0;d<c.children.length;d++)c.children[d].style.display=d===a?\"block\":\"none\";l=a}var l=0,c=document.createElement(\"div\");c.style.cssText=\"position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000\";c.addEventListener(\"click\",function(a){a.preventDefault();\nu(++l%c.children.length)},!1);var k=(performance||Date).now(),g=k,a=0,r=e(new f.Panel(\"FPS\",\"#0ff\",\"#002\")),h=e(new f.Panel(\"MS\",\"#0f0\",\"#020\"));if(self.performance&&self.performance.memory)var t=e(new f.Panel(\"MB\",\"#f08\",\"#201\"));u(0);return{REVISION:16,dom:c,addPanel:e,showPanel:u,begin:function(){k=(performance||Date).now()},end:function(){a++;var c=(performance||Date).now();h.update(c-k,200);if(c>g+1E3&&(r.update(1E3*a/(c-g),100),g=c,a=0,t)){var d=performance.memory;t.update(d.usedJSHeapSize/\n1048576,d.jsHeapSizeLimit/1048576)}return c},update:function(){k=this.end()},domElement:c,setMode:u}};f.Panel=function(e,f,l){var c=Infinity,k=0,g=Math.round,a=g(window.devicePixelRatio||1),r=80*a,h=48*a,t=3*a,v=2*a,d=3*a,m=15*a,n=74*a,p=30*a,q=document.createElement(\"canvas\");q.width=r;q.height=h;q.style.cssText=\"width:80px;height:48px\";var b=q.getContext(\"2d\");b.font=\"bold \"+9*a+\"px Helvetica,Arial,sans-serif\";b.textBaseline=\"top\";b.fillStyle=l;b.fillRect(0,0,r,h);b.fillStyle=f;b.fillText(e,t,v);\nb.fillRect(d,m,n,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d,m,n,p);return{dom:q,update:function(h,w){c=Math.min(c,h);k=Math.max(k,h);b.fillStyle=l;b.globalAlpha=1;b.fillRect(0,0,r,m);b.fillStyle=f;b.fillText(g(h)+\" \"+e+\" (\"+g(c)+\"-\"+g(k)+\")\",t,v);b.drawImage(q,d+a,m,n-a,p,d,m,n-a,p);b.fillRect(d+n-a,m,a,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d+n-a,m,a,g((1-h/w)*p))}}};return f});\n","import * as React from 'react';\n\nfunction call(ref, value) {\n if (typeof ref === 'function') ref(value);else if (ref != null) ref.current = value;\n}\nfunction useEffectfulState(fn, deps = [], cb) {\n const [state, set] = React.useState();\n React.useLayoutEffect(() => {\n const value = fn();\n set(value);\n call(cb, value);\n return () => call(cb, null);\n }, deps);\n return state;\n}\n\nexport { useEffectfulState };\n","import * as React from 'react';\nimport { addEffect, addAfterEffect } from '@react-three/fiber';\nimport StatsImpl from 'stats.js';\nimport { useEffectfulState } from '../helpers/useEffectfulState.js';\n\nfunction Stats({\n showPanel = 0,\n className,\n parent\n}) {\n const stats = useEffectfulState(() => new StatsImpl(), []);\n React.useEffect(() => {\n if (stats) {\n const node = parent && parent.current || document.body;\n stats.showPanel(showPanel);\n node == null || node.appendChild(stats.dom);\n const classNames = (className !== null && className !== void 0 ? className : '').split(' ').filter(cls => cls);\n if (classNames.length) stats.dom.classList.add(...classNames);\n const begin = addEffect(() => stats.begin());\n const end = addAfterEffect(() => stats.end());\n return () => {\n if (classNames.length) stats.dom.classList.remove(...classNames);\n node == null || node.removeChild(stats.dom);\n begin();\n end();\n };\n }\n }, [parent, stats, className, showPanel]);\n return null;\n}\n\nexport { Stats };\n","class Panel {\n constructor(name, fg, bg) {\n this.name = name;\n this.fg = fg;\n this.bg = bg;\n this.gradient = null;\n this.PR = Math.round(window.devicePixelRatio || 1);\n this.WIDTH = 90 * this.PR;\n this.HEIGHT = 48 * this.PR;\n this.TEXT_X = 3 * this.PR;\n this.TEXT_Y = 2 * this.PR;\n this.GRAPH_X = 3 * this.PR;\n this.GRAPH_Y = 15 * this.PR;\n this.GRAPH_WIDTH = 84 * this.PR;\n this.GRAPH_HEIGHT = 30 * this.PR;\n this.canvas = document.createElement(\"canvas\");\n this.canvas.width = this.WIDTH;\n this.canvas.height = this.HEIGHT;\n this.canvas.style.width = \"90px\";\n this.canvas.style.height = \"48px\";\n this.canvas.style.position = \"absolute\";\n this.canvas.style.cssText = \"width:90px;height:48px\";\n this.context = this.canvas.getContext(\"2d\");\n this.initializeCanvas();\n }\n createGradient() {\n if (!this.context)\n throw new Error(\"No context\");\n const gradient = this.context.createLinearGradient(\n 0,\n this.GRAPH_Y,\n 0,\n this.GRAPH_Y + this.GRAPH_HEIGHT\n );\n let startColor;\n const endColor = this.fg;\n switch (this.fg.toLowerCase()) {\n case \"#0ff\":\n startColor = \"#006666\";\n break;\n case \"#0f0\":\n startColor = \"#006600\";\n break;\n case \"#ff0\":\n startColor = \"#666600\";\n break;\n case \"#e1e1e1\":\n startColor = \"#666666\";\n break;\n default:\n startColor = this.bg;\n break;\n }\n gradient.addColorStop(0, startColor);\n gradient.addColorStop(1, endColor);\n return gradient;\n }\n initializeCanvas() {\n if (!this.context)\n return;\n this.context.font = \"bold \" + 9 * this.PR + \"px Helvetica,Arial,sans-serif\";\n this.context.textBaseline = \"top\";\n this.gradient = this.createGradient();\n this.context.fillStyle = this.bg;\n this.context.fillRect(0, 0, this.WIDTH, this.HEIGHT);\n this.context.fillStyle = this.fg;\n this.context.fillText(this.name, this.TEXT_X, this.TEXT_Y);\n this.context.fillStyle = this.fg;\n this.context.fillRect(this.GRAPH_X, this.GRAPH_Y, this.GRAPH_WIDTH, this.GRAPH_HEIGHT);\n this.context.fillStyle = this.bg;\n this.context.globalAlpha = 0.9;\n this.context.fillRect(this.GRAPH_X, this.GRAPH_Y, this.GRAPH_WIDTH, this.GRAPH_HEIGHT);\n }\n update(value, valueGraph, maxValue, maxGraph, decimals = 0) {\n if (!this.context || !this.gradient)\n return;\n const min = Math.min(Infinity, value);\n const max = Math.max(maxValue, value);\n maxGraph = Math.max(maxGraph, valueGraph);\n this.context.globalAlpha = 1;\n this.context.fillStyle = this.bg;\n this.context.fillRect(0, 0, this.WIDTH, this.GRAPH_Y);\n this.context.fillStyle = this.fg;\n this.context.fillText(\n `${value.toFixed(decimals)} ${this.name} (${min.toFixed(decimals)}-${parseFloat(\n max.toFixed(decimals)\n )})`,\n this.TEXT_X,\n this.TEXT_Y\n );\n this.context.drawImage(\n this.canvas,\n this.GRAPH_X + this.PR,\n this.GRAPH_Y,\n this.GRAPH_WIDTH - this.PR,\n this.GRAPH_HEIGHT,\n this.GRAPH_X,\n this.GRAPH_Y,\n this.GRAPH_WIDTH - this.PR,\n this.GRAPH_HEIGHT\n );\n const columnHeight = this.GRAPH_HEIGHT - (1 - valueGraph / maxGraph) * this.GRAPH_HEIGHT;\n if (columnHeight > 0) {\n this.context.globalAlpha = 1;\n this.context.fillStyle = this.gradient;\n this.context.fillRect(\n this.GRAPH_X + this.GRAPH_WIDTH - this.PR,\n this.GRAPH_Y + this.GRAPH_HEIGHT - columnHeight,\n this.PR,\n columnHeight\n );\n }\n }\n}\nexport {\n Panel\n};\n//# sourceMappingURL=panel.js.map\n","import { Panel } from \"./panel.js\";\nconst _Stats = class _Stats2 {\n constructor({\n trackGPU = false,\n logsPerSecond = 30,\n samplesLog = 60,\n samplesGraph = 10,\n precision = 2,\n minimal = false,\n horizontal = true,\n mode = 0\n } = {}) {\n this.gl = null;\n this.ext = null;\n this.activeQuery = null;\n this.gpuQueries = [];\n this.threeRendererPatched = false;\n this.frames = 0;\n this.renderCount = 0;\n this.isRunningCPUProfiling = false;\n this.totalCpuDuration = 0;\n this.totalGpuDuration = 0;\n this.totalGpuDurationCompute = 0;\n this.totalFps = 0;\n this.gpuPanel = null;\n this.gpuPanelCompute = null;\n this.averageFps = { logs: [], graph: [] };\n this.averageCpu = { logs: [], graph: [] };\n this.averageGpu = { logs: [], graph: [] };\n this.averageGpuCompute = { logs: [], graph: [] };\n this.handleClick = (event) => {\n event.preventDefault();\n this.showPanel(++this.mode % this.dom.children.length);\n };\n this.handleResize = () => {\n this.resizePanel(this.fpsPanel, 0);\n this.resizePanel(this.msPanel, 1);\n if (this.gpuPanel)\n this.resizePanel(this.gpuPanel, 2);\n if (this.gpuPanelCompute)\n this.resizePanel(this.gpuPanelCompute, 3);\n };\n this.mode = mode;\n this.horizontal = horizontal;\n this.minimal = minimal;\n this.trackGPU = trackGPU;\n this.samplesLog = samplesLog;\n this.samplesGraph = samplesGraph;\n this.precision = precision;\n this.logsPerSecond = logsPerSecond;\n this.dom = document.createElement(\"div\");\n this.initializeDOM();\n this.beginTime = performance.now();\n this.prevTime = this.beginTime;\n this.prevCpuTime = this.beginTime;\n this.fpsPanel = this.addPanel(new _Stats2.Panel(\"FPS\", \"#0ff\", \"#002\"), 0);\n this.msPanel = this.addPanel(new _Stats2.Panel(\"CPU\", \"#0f0\", \"#020\"), 1);\n this.setupEventListeners();\n }\n initializeDOM() {\n this.dom.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n opacity: 0.9;\n z-index: 10000;\n ${this.minimal ? \"cursor: pointer;\" : \"\"}\n `;\n }\n setupEventListeners() {\n if (this.minimal) {\n this.dom.addEventListener(\"click\", this.handleClick);\n this.showPanel(this.mode);\n } else {\n window.addEventListener(\"resize\", this.handleResize);\n }\n }\n async init(canvasOrGL) {\n if (!canvasOrGL) {\n console.error('Stats: The \"canvas\" parameter is undefined.');\n return;\n }\n if (this.handleThreeRenderer(canvasOrGL))\n return;\n if (await this.handleWebGPURenderer(canvasOrGL))\n return;\n if (!this.initializeWebGL(canvasOrGL))\n return;\n }\n handleThreeRenderer(renderer) {\n if (renderer.isWebGLRenderer && !this.threeRendererPatched) {\n this.patchThreeRenderer(renderer);\n this.gl = renderer.getContext();\n if (this.trackGPU) {\n this.initializeGPUTracking();\n }\n return true;\n }\n return false;\n }\n async handleWebGPURenderer(renderer) {\n if (renderer.isWebGPURenderer) {\n if (this.trackGPU) {\n renderer.backend.trackTimestamp = true;\n if (await renderer.hasFeatureAsync(\"timestamp-query\")) {\n this.initializeWebGPUPanels();\n }\n }\n this.info = renderer.info;\n return true;\n }\n return false;\n }\n initializeWebGPUPanels() {\n this.gpuPanel = this.addPanel(new _Stats2.Panel(\"GPU\", \"#ff0\", \"#220\"), 2);\n this.gpuPanelCompute = this.addPanel(\n new _Stats2.Panel(\"CPT\", \"#e1e1e1\", \"#212121\"),\n 3\n );\n }\n initializeWebGL(canvasOrGL) {\n if (canvasOrGL instanceof WebGL2RenderingContext) {\n this.gl = canvasOrGL;\n } else if (canvasOrGL instanceof HTMLCanvasElement || canvasOrGL instanceof OffscreenCanvas) {\n this.gl = canvasOrGL.getContext(\"webgl2\");\n if (!this.gl) {\n console.error(\"Stats: Unable to obtain WebGL2 context.\");\n return false;\n }\n } else {\n console.error(\n \"Stats: Invalid input type. Expected WebGL2RenderingContext, HTMLCanvasElement, or OffscreenCanvas.\"\n );\n return false;\n }\n return true;\n }\n initializeGPUTracking() {\n if (this.gl) {\n this.ext = this.gl.getExtension(\"EXT_disjoint_timer_query_webgl2\");\n if (this.ext) {\n this.gpuPanel = this.addPanel(new _Stats2.Panel(\"GPU\", \"#ff0\", \"#220\"), 2);\n }\n }\n }\n begin() {\n if (!this.isRunningCPUProfiling) {\n this.beginProfiling(\"cpu-started\");\n }\n if (!this.gl || !this.ext)\n return;\n if (this.activeQuery) {\n this.gl.endQuery(this.ext.TIME_ELAPSED_EXT);\n }\n this.activeQuery = this.gl.createQuery();\n if (this.activeQuery) {\n this.gl.beginQuery(this.ext.TIME_ELAPSED_EXT, this.activeQuery);\n }\n }\n end() {\n this.renderCount++;\n if (this.gl && this.ext && this.activeQuery) {\n this.gl.endQuery(this.ext.TIME_ELAPSED_EXT);\n this.gpuQueries.push({ query: this.activeQuery });\n this.activeQuery = null;\n }\n }\n update() {\n if (!this.info) {\n this.processGpuQueries();\n } else {\n this.processWebGPUTimestamps();\n }\n this.endProfiling(\"cpu-started\", \"cpu-finished\", \"cpu-duration\");\n this.updateAverages();\n this.resetCounters();\n }\n processWebGPUTimestamps() {\n this.totalGpuDuration = this.info.render.timestamp;\n this.totalGpuDurationCompute = this.info.compute.timestamp;\n this.addToAverage(this.totalGpuDurationCompute, this.averageGpuCompute);\n }\n updateAverages() {\n this.addToAverage(this.totalCpuDuration, this.averageCpu);\n this.addToAverage(this.totalGpuDuration, this.averageGpu);\n }\n resetCounters() {\n this.renderCount = 0;\n if (this.totalCpuDuration === 0) {\n this.beginProfiling(\"cpu-started\");\n }\n this.totalCpuDuration = 0;\n this.totalFps = 0;\n this.beginTime = this.endInternal();\n }\n resizePanel(panel, offset) {\n panel.canvas.style.position = \"absolute\";\n if (this.minimal) {\n panel.canvas.style.display = \"none\";\n } else {\n panel.canvas.style.display = \"block\";\n if (this.horizontal) {\n panel.canvas.style.top = \"0px\";\n panel.canvas.style.left = offset * panel.WIDTH / panel.PR + \"px\";\n } else {\n panel.canvas.style.left = \"0px\";\n panel.canvas.style.top = offset * panel.HEIGHT / panel.PR + \"px\";\n }\n }\n }\n addPanel(panel, offset) {\n if (panel.canvas) {\n this.dom.appendChild(panel.canvas);\n this.resizePanel(panel, offset);\n }\n return panel;\n }\n showPanel(id) {\n for (let i = 0; i < this.dom.children.length; i++) {\n const child = this.dom.children[i];\n child.style.display = i === id ? \"block\" : \"none\";\n }\n this.mode = id;\n }\n processGpuQueries() {\n if (!this.gl || !this.ext)\n return;\n this.totalGpuDuration = 0;\n this.gpuQueries.forEach((queryInfo, index) => {\n if (this.gl) {\n const available = this.gl.getQueryParameter(queryInfo.query, this.gl.QUERY_RESULT_AVAILABLE);\n const disjoint = this.gl.getParameter(this.ext.GPU_DISJOINT_EXT);\n if (available && !disjoint) {\n const elapsed = this.gl.getQueryParameter(queryInfo.query, this.gl.QUERY_RESULT);\n const duration = elapsed * 1e-6;\n this.totalGpuDuration += duration;\n this.gl.deleteQuery(queryInfo.query);\n this.gpuQueries.splice(index, 1);\n }\n }\n });\n }\n endInternal() {\n this.frames++;\n const time = (performance || Date).now();\n const elapsed = time - this.prevTime;\n if (time >= this.prevCpuTime + 1e3 / this.logsPerSecond) {\n const fps = Math.round(this.frames * 1e3 / elapsed);\n this.addToAverage(fps, this.averageFps);\n this.updatePanel(this.fpsPanel, this.averageFps, 0);\n this.updatePanel(this.msPanel, this.averageCpu, this.precision);\n this.updatePanel(this.gpuPanel, this.averageGpu, this.precision);\n if (this.gpuPanelCompute) {\n this.updatePanel(this.gpuPanelCompute, this.averageGpuCompute);\n }\n this.frames = 0;\n this.prevCpuTime = time;\n this.prevTime = time;\n }\n return time;\n }\n addToAverage(value, averageArray) {\n averageArray.logs.push(value);\n if (averageArray.logs.length > this.samplesLog) {\n averageArray.logs.shift();\n }\n averageArray.graph.push(value);\n if (averageArray.graph.length > this.samplesGraph) {\n averageArray.graph.shift();\n }\n }\n beginProfiling(marker) {\n if (window.performance) {\n window.performance.mark(marker);\n this.isRunningCPUProfiling = true;\n }\n }\n endProfiling(startMarker, endMarker, measureName) {\n if (window.performance && endMarker && this.isRunningCPUProfiling) {\n window.performance.mark(endMarker);\n const cpuMeasure = performance.measure(measureName, startMarker, endMarker);\n this.totalCpuDuration += cpuMeasure.duration;\n this.isRunningCPUProfiling = false;\n }\n }\n updatePanel(panel, averageArray, precision = 2) {\n if (averageArray.logs.length > 0) {\n let sumLog = 0;\n let max = 0.01;\n for (let i = 0; i < averageArray.logs.length; i++) {\n sumLog += averageArray.logs[i];\n if (averageArray.logs[i] > max) {\n max = averageArray.logs[i];\n }\n }\n let sumGraph = 0;\n let maxGraph = 0.01;\n for (let i = 0; i < averageArray.graph.length; i++) {\n sumGraph += averageArray.graph[i];\n if (averageArray.graph[i] > maxGraph) {\n maxGraph = averageArray.graph[i];\n }\n }\n if (panel) {\n panel.update(sumLog / Math.min(averageArray.logs.length, this.samplesLog), sumGraph / Math.min(averageArray.graph.length, this.samplesGraph), max, maxGraph, precision);\n }\n }\n }\n get domElement() {\n return this.dom;\n }\n patchThreeRenderer(renderer) {\n const originalRenderMethod = renderer.render;\n const statsInstance = this;\n renderer.render = function(scene, camera) {\n statsInstance.begin();\n originalRenderMethod.call(this, scene, camera);\n statsInstance.end();\n };\n this.threeRendererPatched = true;\n }\n};\n_Stats.Panel = Panel;\nlet Stats = _Stats;\nexport {\n Stats as default\n};\n//# sourceMappingURL=main.js.map\n","import { useThree, addAfterEffect } from '@react-three/fiber';\nimport * as React from 'react';\nimport Stats from 'stats-gl';\n\nconst StatsGl = /* @__PURE__ */React.forwardRef(function StatsGl({\n className,\n parent,\n id,\n clearStatsGlStyle,\n ...props\n}, fref) {\n const gl = useThree(state => state.gl);\n const stats = React.useMemo(() => {\n const stats = new Stats({\n ...props\n });\n stats.init(gl);\n return stats;\n }, [gl]);\n React.useImperativeHandle(fref, () => stats.domElement, [stats]);\n React.useEffect(() => {\n if (stats) {\n const node = parent && parent.current || document.body;\n node == null || node.appendChild(stats.domElement);\n stats.domElement.querySelectorAll('canvas').forEach(canvas => {\n canvas.style.removeProperty('position');\n });\n if (id) stats.domElement.id = id;\n if (clearStatsGlStyle) stats.domElement.removeAttribute('style');\n stats.domElement.removeAttribute('style');\n const classNames = (className !== null && className !== void 0 ? className : '').split(' ').filter(cls => cls);\n if (classNames.length) stats.domElement.classList.add(...classNames);\n const end = addAfterEffect(() => stats.update());\n return () => {\n if (classNames.length) stats.domElement.classList.remove(...classNames);\n node == null || node.removeChild(stats.domElement);\n end();\n };\n }\n }, [parent, stats, className, id, clearStatsGlStyle]);\n return null;\n});\n\nexport { StatsGl };\n","import { DepthTexture, DepthFormat, UnsignedShortType } from 'three';\nimport * as React from 'react';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { useFBO } from './Fbo.js';\n\nfunction useDepthBuffer({\n size = 256,\n frames = Infinity\n} = {}) {\n const dpr = useThree(state => state.viewport.dpr);\n const {\n width,\n height\n } = useThree(state => state.size);\n const w = size || width * dpr;\n const h = size || height * dpr;\n const depthConfig = React.useMemo(() => {\n const depthTexture = new DepthTexture(w, h);\n depthTexture.format = DepthFormat;\n depthTexture.type = UnsignedShortType;\n return {\n depthTexture\n };\n }, [w, h]);\n let count = 0;\n const depthFBO = useFBO(w, h, depthConfig);\n useFrame(state => {\n if (frames === Infinity || count < frames) {\n state.gl.setRenderTarget(depthFBO);\n state.gl.render(state.scene, state.camera);\n state.gl.setRenderTarget(null);\n count++;\n }\n });\n return depthFBO.depthTexture;\n}\n\nexport { useDepthBuffer };\n","import { useThree } from '@react-three/fiber';\n\nfunction useAspect(width, height, factor = 1) {\n const v = useThree(state => state.viewport);\n const adaptedHeight = height * (v.aspect > width / height ? v.width / width : v.height / height);\n const adaptedWidth = width * (v.aspect > width / height ? v.width / width : v.height / height);\n return [adaptedWidth * factor, adaptedHeight * factor, 1];\n}\n\nexport { useAspect };\n","import * as React from 'react';\nimport { Raycaster, Camera } from 'three';\nimport { useThree, applyProps } from '@react-three/fiber';\n\nfunction useCamera(camera, props) {\n const pointer = useThree(state => state.pointer);\n const [raycast] = React.useState(() => {\n const raycaster = new Raycaster();\n if (props) applyProps(raycaster, props);\n return function (_, intersects) {\n raycaster.setFromCamera(pointer, camera instanceof Camera ? camera : camera.current);\n const rc = this.constructor.prototype.raycast.bind(this);\n if (rc) rc(raycaster, intersects);\n };\n });\n return raycast;\n}\n\nexport { useCamera };\n","function e(e,t,r,n){return new(r||(r=Promise))((function(o,a){function i(e){try{d(n.next(e))}catch(e){a(e)}}function c(e){try{d(n.throw(e))}catch(e){a(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,c)}d((n=n.apply(e,t||[])).next())}))}\"function\"==typeof SuppressedError&&SuppressedError;const t=[\"geforce 320m\",\"geforce 8600\",\"geforce 8600m gt\",\"geforce 8800 gs\",\"geforce 8800 gt\",\"geforce 9400\",\"geforce 9400m g\",\"geforce 9400m\",\"geforce 9600m gt\",\"geforce 9600m\",\"geforce fx go5200\",\"geforce gt 120\",\"geforce gt 130\",\"geforce gt 330m\",\"geforce gtx 285\",\"google swiftshader\",\"intel g41\",\"intel g45\",\"intel gma 4500mhd\",\"intel gma x3100\",\"intel hd 3000\",\"intel q45\",\"legacy\",\"mali-2\",\"mali-3\",\"mali-4\",\"quadro fx 1500\",\"quadro fx 4\",\"quadro fx 5\",\"radeon hd 2400\",\"radeon hd 2600\",\"radeon hd 4670\",\"radeon hd 4850\",\"radeon hd 4870\",\"radeon hd 5670\",\"radeon hd 5750\",\"radeon hd 6290\",\"radeon hd 6300\",\"radeon hd 6310\",\"radeon hd 6320\",\"radeon hd 6490m\",\"radeon hd 6630m\",\"radeon hd 6750m\",\"radeon hd 6770m\",\"radeon hd 6970m\",\"sgx 543\",\"sgx543\"];function r(e){return e=e.toLowerCase().replace(/.*angle ?\\((.+)\\)(?: on vulkan [0-9.]+)?$/i,\"$1\").replace(/\\s(\\d{1,2}gb|direct3d.+$)|\\(r\\)| \\([^)]+\\)$/g,\"\").replace(/(?:vulkan|opengl) \\d+\\.\\d+(?:\\.\\d+)?(?: \\((.*)\\))?/,\"$1\")}const n=\"undefined\"==typeof window,o=(()=>{if(n)return;const{userAgent:e,platform:t,maxTouchPoints:r}=window.navigator,o=/(iphone|ipod|ipad)/i.test(e),a=\"iPad\"===t||\"MacIntel\"===t&&r>0&&!window.MSStream;return{isIpad:a,isMobile:/android/i.test(e)||o||a,isSafari12:/Version\\/12.+Safari/.test(e),isFirefox:/Firefox/.test(e)}})();function a(e,t,r){if(!r)return[t];const n=function(e){const t=\"\\n precision highp float;\\n attribute vec3 aPosition;\\n varying float vvv;\\n void main() {\\n vvv = 0.31622776601683794;\\n gl_Position = vec4(aPosition, 1.0);\\n }\\n \",r=\"\\n precision highp float;\\n varying float vvv;\\n void main() {\\n vec4 enc = vec4(1.0, 255.0, 65025.0, 16581375.0) * vvv;\\n enc = fract(enc);\\n enc -= enc.yzww * vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0);\\n gl_FragColor = enc;\\n }\\n \",n=e.createShader(35633),o=e.createShader(35632),a=e.createProgram();if(!(o&&n&&a))return;e.shaderSource(n,t),e.shaderSource(o,r),e.compileShader(n),e.compileShader(o),e.attachShader(a,n),e.attachShader(a,o),e.linkProgram(a),e.detachShader(a,n),e.detachShader(a,o),e.deleteShader(n),e.deleteShader(o),e.useProgram(a);const i=e.createBuffer();e.bindBuffer(34962,i),e.bufferData(34962,new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),35044);const c=e.getAttribLocation(a,\"aPosition\");e.vertexAttribPointer(c,3,5126,!1,0,0),e.enableVertexAttribArray(c),e.clearColor(1,1,1,1),e.clear(16384),e.viewport(0,0,1,1),e.drawArrays(4,0,3);const d=new Uint8Array(4);return e.readPixels(0,0,1,1,6408,5121,d),e.deleteProgram(a),e.deleteBuffer(i),d.join(\"\")}(e),a=\"801621810\",i=\"8016218135\",c=\"80162181161\",d=(null==o?void 0:o.isIpad)?[[\"a7\",c,12],[\"a8\",i,15],[\"a8x\",i,15],[\"a9\",i,15],[\"a9x\",i,15],[\"a10\",i,15],[\"a10x\",i,15],[\"a12\",a,15],[\"a12x\",a,15],[\"a12z\",a,15],[\"a14\",a,15],[\"a15\",a,15],[\"m1\",a,15],[\"m2\",a,15]]:[[\"a7\",c,12],[\"a8\",i,12],[\"a9\",i,15],[\"a10\",i,15],[\"a11\",a,15],[\"a12\",a,15],[\"a13\",a,15],[\"a14\",a,15],[\"a15\",a,15],[\"a16\",a,15],[\"a17\",a,15]];let l;\"80162181255\"===n?l=d.filter((([,,e])=>e>=14)):(l=d.filter((([,e])=>e===n)),l.length||(l=d));return l.map((([e])=>`apple ${e} gpu`))}class i extends Error{constructor(e){super(e),Object.setPrototypeOf(this,new.target.prototype)}}const c=[],d=[];function l(e,t){if(e===t)return 0;const r=e;e.length>t.length&&(e=t,t=r);let n=e.length,o=t.length;for(;n>0&&e.charCodeAt(~-n)===t.charCodeAt(~-o);)n--,o--;let a,i=0;for(;i<n&&e.charCodeAt(i)===t.charCodeAt(i);)i++;if(n-=i,o-=i,0===n)return o;let l,s,f=0,u=0,g=0;for(;u<n;)d[u]=e.charCodeAt(i+u),c[u]=++u;for(;g<o;)for(a=t.charCodeAt(i+g),l=g++,f=g,u=0;u<n;u++)s=a===d[u]?l:l+1,l=c[u],f=c[u]=l>f?s>f?f+1:s:s>l?l+1:s;return f}function s(e){return null!=e}const f=({mobileTiers:c=[0,15,30,60],desktopTiers:d=[0,15,30,60],override:f={},glContext:u,failIfMajorPerformanceCaveat:g=!1,benchmarksURL:h=\"https://unpkg.com/detect-gpu@5.0.70/dist/benchmarks\"}={})=>e(void 0,void 0,void 0,(function*(){const p={};if(n)return{tier:0,type:\"SSR\"};const{isIpad:m=!!(null==o?void 0:o.isIpad),isMobile:v=!!(null==o?void 0:o.isMobile),screenSize:w=window.screen,loadBenchmarks:x=(t=>e(void 0,void 0,void 0,(function*(){const e=yield fetch(`${h}/${t}`).then((e=>e.json()));if(parseInt(e.shift().split(\".\")[0],10)<4)throw new i(\"Detect GPU benchmark data is out of date. Please update to version 4x\");return e})))}=f;let{renderer:A}=f;const P=(e,t,r,n,o)=>({device:o,fps:n,gpu:r,isMobile:v,tier:e,type:t});let S,b=\"\";if(A)A=r(A),S=[A];else{const e=u||function(e,t=!1){const r={alpha:!1,antialias:!1,depth:!1,failIfMajorPerformanceCaveat:t,powerPreference:\"high-performance\",stencil:!1};e&&delete r.powerPreference;const n=window.document.createElement(\"canvas\"),o=n.getContext(\"webgl\",r)||n.getContext(\"experimental-webgl\",r);return null!=o?o:void 0}(null==o?void 0:o.isSafari12,g);if(!e)return P(0,\"WEBGL_UNSUPPORTED\");const t=(null==o?void 0:o.isFirefox)?null:e.getExtension(\"WEBGL_debug_renderer_info\");if(A=t?e.getParameter(t.UNMASKED_RENDERER_WEBGL):e.getParameter(e.RENDERER),!A)return P(1,\"FALLBACK\");b=A,A=r(A),S=function(e,t,r){return\"apple gpu\"===t?a(e,t,r):[t]}(e,A,v)}const E=(yield Promise.all(S.map((function(t){var r;return e(this,void 0,void 0,(function*(){const e=(e=>{const t=v?[\"adreno\",\"apple\",\"mali-t\",\"mali\",\"nvidia\",\"powervr\",\"samsung\"]:[\"intel\",\"apple\",\"amd\",\"radeon\",\"nvidia\",\"geforce\",\"adreno\"];for(const r of t)if(e.includes(r))return r})(t);if(!e)return;const n=`${v?\"m\":\"d\"}-${e}${m?\"-ipad\":\"\"}.json`,o=p[n]=null!==(r=p[n])&&void 0!==r?r:x(n);let a;try{a=yield o}catch(e){if(e instanceof i)throw e;return}const c=function(e){var t;const r=(e=e.replace(/\\([^)]+\\)/,\"\")).match(/\\d+/)||e.match(/(\\W|^)([A-Za-z]{1,3})(\\W|$)/g);return null!==(t=null==r?void 0:r.join(\"\").replace(/\\W|amd/g,\"\"))&&void 0!==t?t:\"\"}(t);let d=a.filter((([,e])=>e===c));d.length||(d=a.filter((([e])=>e.includes(t))));const s=d.length;if(0===s)return;const f=t.split(/[.,()\\[\\]/\\s]/g).sort().filter(((e,t,r)=>0===t||e!==r[t-1])).join(\" \");let u,[g,,,,h]=s>1?d.map((e=>[e,l(f,e[2])])).sort((([,e],[,t])=>e-t))[0][0]:d[0],A=Number.MAX_VALUE;const{devicePixelRatio:P}=window,S=w.width*P*w.height*P;for(const e of h){const[t,r]=e,n=t*r,o=Math.abs(S-n);o<A&&(A=o,u=e)}if(!u)return;const[,,b,E]=u;return[A,b,g,E]}))})))).filter(s).sort((([e=Number.MAX_VALUE,t],[r=Number.MAX_VALUE,n])=>e===r?t-n:e-r));if(!E.length){const e=t.find((e=>A.includes(e)));return e?P(0,\"BLOCKLISTED\",e):P(1,\"FALLBACK\",`${A} (${b})`)}const[,y,C,L]=E[0];if(-1===y)return P(0,\"BLOCKLISTED\",C,y,L);const M=v?c:d;let $=0;for(let e=0;e<M.length;e++)y>=M[e]&&($=e);return P($,\"BENCHMARK\",C,y,L)}));export{f as getGPUTier};\n//# sourceMappingURL=detect-gpu.esm.js.map\n","import * as React from 'react';\nimport { getGPUTier } from 'detect-gpu';\nimport { suspend } from 'suspend-react';\n\nconst useDetectGPU = props => suspend(() => getGPUTier(props), ['useDetectGPU']);\nfunction DetectGPU({\n children,\n ...options\n}) {\n const result = useDetectGPU(options);\n return /*#__PURE__*/React.createElement(React.Fragment, null, children == null ? void 0 : children(result));\n}\n\nexport { DetectGPU, useDetectGPU };\n","// Split strategy constants\nexport const CENTER = 0;\nexport const AVERAGE = 1;\nexport const SAH = 2;\n\n// Traversal constants\nexport const NOT_INTERSECTED = 0;\nexport const INTERSECTED = 1;\nexport const CONTAINED = 2;\n\n// SAH cost constants\n// TODO: hone these costs more. The relative difference between them should be the\n// difference in measured time to perform a triangle intersection vs traversing\n// bounds.\nexport const TRIANGLE_INTERSECT_COST = 1.25;\nexport const TRAVERSAL_COST = 1;\n\n\n// Build constants\nexport const BYTES_PER_NODE = 6 * 4 + 4 + 4;\nexport const IS_LEAFNODE_FLAG = 0xFFFF;\n\n// EPSILON for computing floating point error during build\n// https://en.wikipedia.org/wiki/Machine_epsilon#Values_for_standard_hardware_floating_point_arithmetics\nexport const FLOAT32_EPSILON = Math.pow( 2, - 24 );\n\nexport const SKIP_GENERATION = Symbol( 'SKIP_GENERATION' );\n","import { BufferAttribute } from 'three';\n\nexport function getVertexCount( geo ) {\n\n\treturn geo.index ? geo.index.count : geo.attributes.position.count;\n\n}\n\nexport function getTriCount( geo ) {\n\n\treturn getVertexCount( geo ) / 3;\n\n}\n\nexport function getIndexArray( vertexCount, BufferConstructor = ArrayBuffer ) {\n\n\tif ( vertexCount > 65535 ) {\n\n\t\treturn new Uint32Array( new BufferConstructor( 4 * vertexCount ) );\n\n\t} else {\n\n\t\treturn new Uint16Array( new BufferConstructor( 2 * vertexCount ) );\n\n\t}\n\n}\n\n// ensures that an index is present on the geometry\nexport function ensureIndex( geo, options ) {\n\n\tif ( ! geo.index ) {\n\n\t\tconst vertexCount = geo.attributes.position.count;\n\t\tconst BufferConstructor = options.useSharedArrayBuffer ? SharedArrayBuffer : ArrayBuffer;\n\t\tconst index = getIndexArray( vertexCount, BufferConstructor );\n\t\tgeo.setIndex( new BufferAttribute( index, 1 ) );\n\n\t\tfor ( let i = 0; i < vertexCount; i ++ ) {\n\n\t\t\tindex[ i ] = i;\n\n\t\t}\n\n\t}\n\n}\n\n// Computes the set of { offset, count } ranges which need independent BVH roots. Each\n// region in the geometry index that belongs to a different set of material groups requires\n// a separate BVH root, so that triangles indices belonging to one group never get swapped\n// with triangle indices belongs to another group. For example, if the groups were like this:\n//\n// [-------------------------------------------------------------]\n// |__________________|\n// g0 = [0, 20] |______________________||_____________________|\n// g1 = [16, 40] g2 = [41, 60]\n//\n// we would need four BVH roots: [0, 15], [16, 20], [21, 40], [41, 60].\nexport function getFullGeometryRange( geo, range ) {\n\n\tconst triCount = getTriCount( geo );\n\tconst drawRange = range ? range : geo.drawRange;\n\tconst start = drawRange.start / 3;\n\tconst end = ( drawRange.start + drawRange.count ) / 3;\n\n\tconst offset = Math.max( 0, start );\n\tconst count = Math.min( triCount, end ) - offset;\n\treturn [ {\n\t\toffset: Math.floor( offset ),\n\t\tcount: Math.floor( count ),\n\t} ];\n\n}\n\nexport function getRootIndexRanges( geo, range ) {\n\n\tif ( ! geo.groups || ! geo.groups.length ) {\n\n\t\treturn getFullGeometryRange( geo, range );\n\n\t}\n\n\tconst ranges = [];\n\tconst rangeBoundaries = new Set();\n\n\tconst drawRange = range ? range : geo.drawRange;\n\tconst drawRangeStart = drawRange.start / 3;\n\tconst drawRangeEnd = ( drawRange.start + drawRange.count ) / 3;\n\tfor ( const group of geo.groups ) {\n\n\t\tconst groupStart = group.start / 3;\n\t\tconst groupEnd = ( group.start + group.count ) / 3;\n\t\trangeBoundaries.add( Math.max( drawRangeStart, groupStart ) );\n\t\trangeBoundaries.add( Math.min( drawRangeEnd, groupEnd ) );\n\n\t}\n\n\n\t// note that if you don't pass in a comparator, it sorts them lexicographically as strings :-(\n\tconst sortedBoundaries = Array.from( rangeBoundaries.values() ).sort( ( a, b ) => a - b );\n\tfor ( let i = 0; i < sortedBoundaries.length - 1; i ++ ) {\n\n\t\tconst start = sortedBoundaries[ i ];\n\t\tconst end = sortedBoundaries[ i + 1 ];\n\n\t\tranges.push( {\n\t\t\toffset: Math.floor( start ),\n\t\t\tcount: Math.floor( end - start ),\n\t\t} );\n\n\t}\n\n\treturn ranges;\n\n}\n\nexport function hasGroupGaps( geometry, range ) {\n\n\tconst vertexCount = getTriCount( geometry );\n\tconst groups = getRootIndexRanges( geometry, range )\n\t\t.sort( ( a, b ) => a.offset - b.offset );\n\n\tconst finalGroup = groups[ groups.length - 1 ];\n\tfinalGroup.count = Math.min( vertexCount - finalGroup.offset, finalGroup.count );\n\n\tlet total = 0;\n\tgroups.forEach( ( { count } ) => total += count );\n\treturn vertexCount !== total;\n\n}\n","import { FLOAT32_EPSILON } from '../Constants.js';\nimport { getTriCount } from './geometryUtils.js';\n\n// computes the union of the bounds of all of the given triangles and puts the resulting box in \"target\".\n// A bounding box is computed for the centroids of the triangles, as well, and placed in \"centroidTarget\".\n// These are computed together to avoid redundant accesses to bounds array.\nexport function getBounds( triangleBounds, offset, count, target, centroidTarget ) {\n\n\tlet minx = Infinity;\n\tlet miny = Infinity;\n\tlet minz = Infinity;\n\tlet maxx = - Infinity;\n\tlet maxy = - Infinity;\n\tlet maxz = - Infinity;\n\n\tlet cminx = Infinity;\n\tlet cminy = Infinity;\n\tlet cminz = Infinity;\n\tlet cmaxx = - Infinity;\n\tlet cmaxy = - Infinity;\n\tlet cmaxz = - Infinity;\n\n\tfor ( let i = offset * 6, end = ( offset + count ) * 6; i < end; i += 6 ) {\n\n\t\tconst cx = triangleBounds[ i + 0 ];\n\t\tconst hx = triangleBounds[ i + 1 ];\n\t\tconst lx = cx - hx;\n\t\tconst rx = cx + hx;\n\t\tif ( lx < minx ) minx = lx;\n\t\tif ( rx > maxx ) maxx = rx;\n\t\tif ( cx < cminx ) cminx = cx;\n\t\tif ( cx > cmaxx ) cmaxx = cx;\n\n\t\tconst cy = triangleBounds[ i + 2 ];\n\t\tconst hy = triangleBounds[ i + 3 ];\n\t\tconst ly = cy - hy;\n\t\tconst ry = cy + hy;\n\t\tif ( ly < miny ) miny = ly;\n\t\tif ( ry > maxy ) maxy = ry;\n\t\tif ( cy < cminy ) cminy = cy;\n\t\tif ( cy > cmaxy ) cmaxy = cy;\n\n\t\tconst cz = triangleBounds[ i + 4 ];\n\t\tconst hz = triangleBounds[ i + 5 ];\n\t\tconst lz = cz - hz;\n\t\tconst rz = cz + hz;\n\t\tif ( lz < minz ) minz = lz;\n\t\tif ( rz > maxz ) maxz = rz;\n\t\tif ( cz < cminz ) cminz = cz;\n\t\tif ( cz > cmaxz ) cmaxz = cz;\n\n\t}\n\n\ttarget[ 0 ] = minx;\n\ttarget[ 1 ] = miny;\n\ttarget[ 2 ] = minz;\n\n\ttarget[ 3 ] = maxx;\n\ttarget[ 4 ] = maxy;\n\ttarget[ 5 ] = maxz;\n\n\tcentroidTarget[ 0 ] = cminx;\n\tcentroidTarget[ 1 ] = cminy;\n\tcentroidTarget[ 2 ] = cminz;\n\n\tcentroidTarget[ 3 ] = cmaxx;\n\tcentroidTarget[ 4 ] = cmaxy;\n\tcentroidTarget[ 5 ] = cmaxz;\n\n}\n\n// precomputes the bounding box for each triangle; required for quickly calculating tree splits.\n// result is an array of size tris.length * 6 where triangle i maps to a\n// [x_center, x_delta, y_center, y_delta, z_center, z_delta] tuple starting at index i * 6,\n// representing the center and half-extent in each dimension of triangle i\nexport function computeTriangleBounds( geo, target = null, offset = null, count = null ) {\n\n\tconst posAttr = geo.attributes.position;\n\tconst index = geo.index ? geo.index.array : null;\n\tconst triCount = getTriCount( geo );\n\tconst normalized = posAttr.normalized;\n\tlet triangleBounds;\n\tif ( target === null ) {\n\n\t\ttriangleBounds = new Float32Array( triCount * 6 );\n\t\toffset = 0;\n\t\tcount = triCount;\n\n\t} else {\n\n\t\ttriangleBounds = target;\n\t\toffset = offset || 0;\n\t\tcount = count || triCount;\n\n\t}\n\n\t// used for non-normalized positions\n\tconst posArr = posAttr.array;\n\n\t// support for an interleaved position buffer\n\tconst bufferOffset = posAttr.offset || 0;\n\tlet stride = 3;\n\tif ( posAttr.isInterleavedBufferAttribute ) {\n\n\t\tstride = posAttr.data.stride;\n\n\t}\n\n\t// used for normalized positions\n\tconst getters = [ 'getX', 'getY', 'getZ' ];\n\n\tfor ( let tri = offset; tri < offset + count; tri ++ ) {\n\n\t\tconst tri3 = tri * 3;\n\t\tconst tri6 = tri * 6;\n\n\t\tlet ai = tri3 + 0;\n\t\tlet bi = tri3 + 1;\n\t\tlet ci = tri3 + 2;\n\n\t\tif ( index ) {\n\n\t\t\tai = index[ ai ];\n\t\t\tbi = index[ bi ];\n\t\t\tci = index[ ci ];\n\n\t\t}\n\n\t\t// we add the stride and offset here since we access the array directly\n\t\t// below for the sake of performance\n\t\tif ( ! normalized ) {\n\n\t\t\tai = ai * stride + bufferOffset;\n\t\t\tbi = bi * stride + bufferOffset;\n\t\t\tci = ci * stride + bufferOffset;\n\n\t\t}\n\n\t\tfor ( let el = 0; el < 3; el ++ ) {\n\n\t\t\tlet a, b, c;\n\n\t\t\tif ( normalized ) {\n\n\t\t\t\ta = posAttr[ getters[ el ] ]( ai );\n\t\t\t\tb = posAttr[ getters[ el ] ]( bi );\n\t\t\t\tc = posAttr[ getters[ el ] ]( ci );\n\n\t\t\t} else {\n\n\t\t\t\ta = posArr[ ai + el ];\n\t\t\t\tb = posArr[ bi + el ];\n\t\t\t\tc = posArr[ ci + el ];\n\n\t\t\t}\n\n\t\t\tlet min = a;\n\t\t\tif ( b < min ) min = b;\n\t\t\tif ( c < min ) min = c;\n\n\t\t\tlet max = a;\n\t\t\tif ( b > max ) max = b;\n\t\t\tif ( c > max ) max = c;\n\n\t\t\t// Increase the bounds size by float32 epsilon to avoid precision errors when\n\t\t\t// converting to 32 bit float. Scale the epsilon by the size of the numbers being\n\t\t\t// worked with.\n\t\t\tconst halfExtents = ( max - min ) / 2;\n\t\t\tconst el2 = el * 2;\n\t\t\ttriangleBounds[ tri6 + el2 + 0 ] = min + halfExtents;\n\t\t\ttriangleBounds[ tri6 + el2 + 1 ] = halfExtents + ( Math.abs( min ) + halfExtents ) * FLOAT32_EPSILON;\n\n\t\t}\n\n\t}\n\n\treturn triangleBounds;\n\n}\n","export function arrayToBox( nodeIndex32, array, target ) {\n\n\ttarget.min.x = array[ nodeIndex32 ];\n\ttarget.min.y = array[ nodeIndex32 + 1 ];\n\ttarget.min.z = array[ nodeIndex32 + 2 ];\n\n\ttarget.max.x = array[ nodeIndex32 + 3 ];\n\ttarget.max.y = array[ nodeIndex32 + 4 ];\n\ttarget.max.z = array[ nodeIndex32 + 5 ];\n\n\treturn target;\n\n}\n\nexport function makeEmptyBounds( target ) {\n\n\ttarget[ 0 ] = target[ 1 ] = target[ 2 ] = Infinity;\n\ttarget[ 3 ] = target[ 4 ] = target[ 5 ] = - Infinity;\n\n}\n\nexport function getLongestEdgeIndex( bounds ) {\n\n\tlet splitDimIdx = - 1;\n\tlet splitDist = - Infinity;\n\n\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\tconst dist = bounds[ i + 3 ] - bounds[ i ];\n\t\tif ( dist > splitDist ) {\n\n\t\t\tsplitDist = dist;\n\t\t\tsplitDimIdx = i;\n\n\t\t}\n\n\t}\n\n\treturn splitDimIdx;\n\n}\n\n// copies bounds a into bounds b\nexport function copyBounds( source, target ) {\n\n\ttarget.set( source );\n\n}\n\n// sets bounds target to the union of bounds a and b\nexport function unionBounds( a, b, target ) {\n\n\tlet aVal, bVal;\n\tfor ( let d = 0; d < 3; d ++ ) {\n\n\t\tconst d3 = d + 3;\n\n\t\t// set the minimum values\n\t\taVal = a[ d ];\n\t\tbVal = b[ d ];\n\t\ttarget[ d ] = aVal < bVal ? aVal : bVal;\n\n\t\t// set the max values\n\t\taVal = a[ d3 ];\n\t\tbVal = b[ d3 ];\n\t\ttarget[ d3 ] = aVal > bVal ? aVal : bVal;\n\n\t}\n\n}\n\n// expands the given bounds by the provided triangle bounds\nexport function expandByTriangleBounds( startIndex, triangleBounds, bounds ) {\n\n\tfor ( let d = 0; d < 3; d ++ ) {\n\n\t\tconst tCenter = triangleBounds[ startIndex + 2 * d ];\n\t\tconst tHalf = triangleBounds[ startIndex + 2 * d + 1 ];\n\n\t\tconst tMin = tCenter - tHalf;\n\t\tconst tMax = tCenter + tHalf;\n\n\t\tif ( tMin < bounds[ d ] ) {\n\n\t\t\tbounds[ d ] = tMin;\n\n\t\t}\n\n\t\tif ( tMax > bounds[ d + 3 ] ) {\n\n\t\t\tbounds[ d + 3 ] = tMax;\n\n\t\t}\n\n\t}\n\n}\n\n// compute bounds surface area\nexport function computeSurfaceArea( bounds ) {\n\n\tconst d0 = bounds[ 3 ] - bounds[ 0 ];\n\tconst d1 = bounds[ 4 ] - bounds[ 1 ];\n\tconst d2 = bounds[ 5 ] - bounds[ 2 ];\n\n\treturn 2 * ( d0 * d1 + d1 * d2 + d2 * d0 );\n\n}\n","import { getLongestEdgeIndex, computeSurfaceArea, copyBounds, unionBounds, expandByTriangleBounds } from '../../utils/ArrayBoxUtilities.js';\nimport { CENTER, AVERAGE, SAH, TRIANGLE_INTERSECT_COST, TRAVERSAL_COST } from '../Constants.js';\n\nconst BIN_COUNT = 32;\nconst binsSort = ( a, b ) => a.candidate - b.candidate;\nconst sahBins = new Array( BIN_COUNT ).fill().map( () => {\n\n\treturn {\n\n\t\tcount: 0,\n\t\tbounds: new Float32Array( 6 ),\n\t\trightCacheBounds: new Float32Array( 6 ),\n\t\tleftCacheBounds: new Float32Array( 6 ),\n\t\tcandidate: 0,\n\n\t};\n\n} );\nconst leftBounds = new Float32Array( 6 );\n\nexport function getOptimalSplit( nodeBoundingData, centroidBoundingData, triangleBounds, offset, count, strategy ) {\n\n\tlet axis = - 1;\n\tlet pos = 0;\n\n\t// Center\n\tif ( strategy === CENTER ) {\n\n\t\taxis = getLongestEdgeIndex( centroidBoundingData );\n\t\tif ( axis !== - 1 ) {\n\n\t\t\tpos = ( centroidBoundingData[ axis ] + centroidBoundingData[ axis + 3 ] ) / 2;\n\n\t\t}\n\n\t} else if ( strategy === AVERAGE ) {\n\n\t\taxis = getLongestEdgeIndex( nodeBoundingData );\n\t\tif ( axis !== - 1 ) {\n\n\t\t\tpos = getAverage( triangleBounds, offset, count, axis );\n\n\t\t}\n\n\t} else if ( strategy === SAH ) {\n\n\t\tconst rootSurfaceArea = computeSurfaceArea( nodeBoundingData );\n\t\tlet bestCost = TRIANGLE_INTERSECT_COST * count;\n\n\t\t// iterate over all axes\n\t\tconst cStart = offset * 6;\n\t\tconst cEnd = ( offset + count ) * 6;\n\t\tfor ( let a = 0; a < 3; a ++ ) {\n\n\t\t\tconst axisLeft = centroidBoundingData[ a ];\n\t\t\tconst axisRight = centroidBoundingData[ a + 3 ];\n\t\t\tconst axisLength = axisRight - axisLeft;\n\t\t\tconst binWidth = axisLength / BIN_COUNT;\n\n\t\t\t// If we have fewer triangles than we're planning to split then just check all\n\t\t\t// the triangle positions because it will be faster.\n\t\t\tif ( count < BIN_COUNT / 4 ) {\n\n\t\t\t\t// initialize the bin candidates\n\t\t\t\tconst truncatedBins = [ ...sahBins ];\n\t\t\t\ttruncatedBins.length = count;\n\n\t\t\t\t// set the candidates\n\t\t\t\tlet b = 0;\n\t\t\t\tfor ( let c = cStart; c < cEnd; c += 6, b ++ ) {\n\n\t\t\t\t\tconst bin = truncatedBins[ b ];\n\t\t\t\t\tbin.candidate = triangleBounds[ c + 2 * a ];\n\t\t\t\t\tbin.count = 0;\n\n\t\t\t\t\tconst {\n\t\t\t\t\t\tbounds,\n\t\t\t\t\t\tleftCacheBounds,\n\t\t\t\t\t\trightCacheBounds,\n\t\t\t\t\t} = bin;\n\t\t\t\t\tfor ( let d = 0; d < 3; d ++ ) {\n\n\t\t\t\t\t\trightCacheBounds[ d ] = Infinity;\n\t\t\t\t\t\trightCacheBounds[ d + 3 ] = - Infinity;\n\n\t\t\t\t\t\tleftCacheBounds[ d ] = Infinity;\n\t\t\t\t\t\tleftCacheBounds[ d + 3 ] = - Infinity;\n\n\t\t\t\t\t\tbounds[ d ] = Infinity;\n\t\t\t\t\t\tbounds[ d + 3 ] = - Infinity;\n\n\t\t\t\t\t}\n\n\t\t\t\t\texpandByTriangleBounds( c, triangleBounds, bounds );\n\n\t\t\t\t}\n\n\t\t\t\ttruncatedBins.sort( binsSort );\n\n\t\t\t\t// remove redundant splits\n\t\t\t\tlet splitCount = count;\n\t\t\t\tfor ( let bi = 0; bi < splitCount; bi ++ ) {\n\n\t\t\t\t\tconst bin = truncatedBins[ bi ];\n\t\t\t\t\twhile ( bi + 1 < splitCount && truncatedBins[ bi + 1 ].candidate === bin.candidate ) {\n\n\t\t\t\t\t\ttruncatedBins.splice( bi + 1, 1 );\n\t\t\t\t\t\tsplitCount --;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// find the appropriate bin for each triangle and expand the bounds.\n\t\t\t\tfor ( let c = cStart; c < cEnd; c += 6 ) {\n\n\t\t\t\t\tconst center = triangleBounds[ c + 2 * a ];\n\t\t\t\t\tfor ( let bi = 0; bi < splitCount; bi ++ ) {\n\n\t\t\t\t\t\tconst bin = truncatedBins[ bi ];\n\t\t\t\t\t\tif ( center >= bin.candidate ) {\n\n\t\t\t\t\t\t\texpandByTriangleBounds( c, triangleBounds, bin.rightCacheBounds );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\texpandByTriangleBounds( c, triangleBounds, bin.leftCacheBounds );\n\t\t\t\t\t\t\tbin.count ++;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// expand all the bounds\n\t\t\t\tfor ( let bi = 0; bi < splitCount; bi ++ ) {\n\n\t\t\t\t\tconst bin = truncatedBins[ bi ];\n\t\t\t\t\tconst leftCount = bin.count;\n\t\t\t\t\tconst rightCount = count - bin.count;\n\n\t\t\t\t\t// check the cost of this split\n\t\t\t\t\tconst leftBounds = bin.leftCacheBounds;\n\t\t\t\t\tconst rightBounds = bin.rightCacheBounds;\n\n\t\t\t\t\tlet leftProb = 0;\n\t\t\t\t\tif ( leftCount !== 0 ) {\n\n\t\t\t\t\t\tleftProb = computeSurfaceArea( leftBounds ) / rootSurfaceArea;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet rightProb = 0;\n\t\t\t\t\tif ( rightCount !== 0 ) {\n\n\t\t\t\t\t\trightProb = computeSurfaceArea( rightBounds ) / rootSurfaceArea;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cost = TRAVERSAL_COST + TRIANGLE_INTERSECT_COST * (\n\t\t\t\t\t\tleftProb * leftCount + rightProb * rightCount\n\t\t\t\t\t);\n\n\t\t\t\t\tif ( cost < bestCost ) {\n\n\t\t\t\t\t\taxis = a;\n\t\t\t\t\t\tbestCost = cost;\n\t\t\t\t\t\tpos = bin.candidate;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// reset the bins\n\t\t\t\tfor ( let i = 0; i < BIN_COUNT; i ++ ) {\n\n\t\t\t\t\tconst bin = sahBins[ i ];\n\t\t\t\t\tbin.count = 0;\n\t\t\t\t\tbin.candidate = axisLeft + binWidth + i * binWidth;\n\n\t\t\t\t\tconst bounds = bin.bounds;\n\t\t\t\t\tfor ( let d = 0; d < 3; d ++ ) {\n\n\t\t\t\t\t\tbounds[ d ] = Infinity;\n\t\t\t\t\t\tbounds[ d + 3 ] = - Infinity;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// iterate over all center positions\n\t\t\t\tfor ( let c = cStart; c < cEnd; c += 6 ) {\n\n\t\t\t\t\tconst triCenter = triangleBounds[ c + 2 * a ];\n\t\t\t\t\tconst relativeCenter = triCenter - axisLeft;\n\n\t\t\t\t\t// in the partition function if the centroid lies on the split plane then it is\n\t\t\t\t\t// considered to be on the right side of the split\n\t\t\t\t\tlet binIndex = ~ ~ ( relativeCenter / binWidth );\n\t\t\t\t\tif ( binIndex >= BIN_COUNT ) binIndex = BIN_COUNT - 1;\n\n\t\t\t\t\tconst bin = sahBins[ binIndex ];\n\t\t\t\t\tbin.count ++;\n\n\t\t\t\t\texpandByTriangleBounds( c, triangleBounds, bin.bounds );\n\n\t\t\t\t}\n\n\t\t\t\t// cache the unioned bounds from right to left so we don't have to regenerate them each time\n\t\t\t\tconst lastBin = sahBins[ BIN_COUNT - 1 ];\n\t\t\t\tcopyBounds( lastBin.bounds, lastBin.rightCacheBounds );\n\t\t\t\tfor ( let i = BIN_COUNT - 2; i >= 0; i -- ) {\n\n\t\t\t\t\tconst bin = sahBins[ i ];\n\t\t\t\t\tconst nextBin = sahBins[ i + 1 ];\n\t\t\t\t\tunionBounds( bin.bounds, nextBin.rightCacheBounds, bin.rightCacheBounds );\n\n\t\t\t\t}\n\n\t\t\t\tlet leftCount = 0;\n\t\t\t\tfor ( let i = 0; i < BIN_COUNT - 1; i ++ ) {\n\n\t\t\t\t\tconst bin = sahBins[ i ];\n\t\t\t\t\tconst binCount = bin.count;\n\t\t\t\t\tconst bounds = bin.bounds;\n\n\t\t\t\t\tconst nextBin = sahBins[ i + 1 ];\n\t\t\t\t\tconst rightBounds = nextBin.rightCacheBounds;\n\n\t\t\t\t\t// don't do anything with the bounds if the new bounds have no triangles\n\t\t\t\t\tif ( binCount !== 0 ) {\n\n\t\t\t\t\t\tif ( leftCount === 0 ) {\n\n\t\t\t\t\t\t\tcopyBounds( bounds, leftBounds );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tunionBounds( bounds, leftBounds, leftBounds );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tleftCount += binCount;\n\n\t\t\t\t\t// check the cost of this split\n\t\t\t\t\tlet leftProb = 0;\n\t\t\t\t\tlet rightProb = 0;\n\n\t\t\t\t\tif ( leftCount !== 0 ) {\n\n\t\t\t\t\t\tleftProb = computeSurfaceArea( leftBounds ) / rootSurfaceArea;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst rightCount = count - leftCount;\n\t\t\t\t\tif ( rightCount !== 0 ) {\n\n\t\t\t\t\t\trightProb = computeSurfaceArea( rightBounds ) / rootSurfaceArea;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cost = TRAVERSAL_COST + TRIANGLE_INTERSECT_COST * (\n\t\t\t\t\t\tleftProb * leftCount + rightProb * rightCount\n\t\t\t\t\t);\n\n\t\t\t\t\tif ( cost < bestCost ) {\n\n\t\t\t\t\t\taxis = a;\n\t\t\t\t\t\tbestCost = cost;\n\t\t\t\t\t\tpos = bin.candidate;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\tconsole.warn( `MeshBVH: Invalid build strategy value ${ strategy } used.` );\n\n\t}\n\n\treturn { axis, pos };\n\n}\n\n// returns the average coordinate on the specified axis of the all the provided triangles\nfunction getAverage( triangleBounds, offset, count, axis ) {\n\n\tlet avg = 0;\n\tfor ( let i = offset, end = offset + count; i < end; i ++ ) {\n\n\t\tavg += triangleBounds[ i * 6 + axis * 2 ];\n\n\t}\n\n\treturn avg / count;\n\n}\n","export class MeshBVHNode {\n\n\tconstructor() {\n\n\t\t// internal nodes have boundingData, left, right, and splitAxis\n\t\t// leaf nodes have offset and count (referring to primitives in the mesh geometry)\n\n\t\tthis.boundingData = new Float32Array( 6 );\n\n\t}\n\n}\n","/********************************************************/\n/* This file is generated from \"sortUtils.template.js\". */\n/********************************************************/\n// reorders `tris` such that for `count` elements after `offset`, elements on the left side of the split\n// will be on the left and elements on the right side of the split will be on the right. returns the index\n// of the first element on the right side, or offset + count if there are no elements on the right side.\nfunction partition( indirectBuffer, index, triangleBounds, offset, count, split ) {\n\n\tlet left = offset;\n\tlet right = offset + count - 1;\n\tconst pos = split.pos;\n\tconst axisOffset = split.axis * 2;\n\n\t// hoare partitioning, see e.g. https://en.wikipedia.org/wiki/Quicksort#Hoare_partition_scheme\n\twhile ( true ) {\n\n\t\twhile ( left <= right && triangleBounds[ left * 6 + axisOffset ] < pos ) {\n\n\t\t\tleft ++;\n\n\t\t}\n\n\t\t// if a triangle center lies on the partition plane it is considered to be on the right side\n\t\twhile ( left <= right && triangleBounds[ right * 6 + axisOffset ] >= pos ) {\n\n\t\t\tright --;\n\n\t\t}\n\n\t\tif ( left < right ) {\n\n\t\t\t// we need to swap all of the information associated with the triangles at index\n\t\t\t// left and right; that's the verts in the geometry index, the bounds,\n\t\t\t// and perhaps the SAH planes\n\n\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\tlet t0 = index[ left * 3 + i ];\n\t\t\t\tindex[ left * 3 + i ] = index[ right * 3 + i ];\n\t\t\t\tindex[ right * 3 + i ] = t0;\n\n\t\t\t}\n\n\n\t\t\t// swap bounds\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tlet tb = triangleBounds[ left * 6 + i ];\n\t\t\t\ttriangleBounds[ left * 6 + i ] = triangleBounds[ right * 6 + i ];\n\t\t\t\ttriangleBounds[ right * 6 + i ] = tb;\n\n\t\t\t}\n\n\t\t\tleft ++;\n\t\t\tright --;\n\n\t\t} else {\n\n\t\t\treturn left;\n\n\t\t}\n\n\t}\n\n}\n\nexport { partition };\n","/********************************************************/\n/* This file is generated from \"sortUtils.template.js\". */\n/********************************************************/\n// reorders `tris` such that for `count` elements after `offset`, elements on the left side of the split\n// will be on the left and elements on the right side of the split will be on the right. returns the index\n// of the first element on the right side, or offset + count if there are no elements on the right side.\nfunction partition_indirect( indirectBuffer, index, triangleBounds, offset, count, split ) {\n\n\tlet left = offset;\n\tlet right = offset + count - 1;\n\tconst pos = split.pos;\n\tconst axisOffset = split.axis * 2;\n\n\t// hoare partitioning, see e.g. https://en.wikipedia.org/wiki/Quicksort#Hoare_partition_scheme\n\twhile ( true ) {\n\n\t\twhile ( left <= right && triangleBounds[ left * 6 + axisOffset ] < pos ) {\n\n\t\t\tleft ++;\n\n\t\t}\n\n\t\t// if a triangle center lies on the partition plane it is considered to be on the right side\n\t\twhile ( left <= right && triangleBounds[ right * 6 + axisOffset ] >= pos ) {\n\n\t\t\tright --;\n\n\t\t}\n\n\t\tif ( left < right ) {\n\n\t\t\t// we need to swap all of the information associated with the triangles at index\n\t\t\t// left and right; that's the verts in the geometry index, the bounds,\n\t\t\t// and perhaps the SAH planes\n\t\t\tlet t = indirectBuffer[ left ];\n\t\t\tindirectBuffer[ left ] = indirectBuffer[ right ];\n\t\t\tindirectBuffer[ right ] = t;\n\n\n\t\t\t// swap bounds\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tlet tb = triangleBounds[ left * 6 + i ];\n\t\t\t\ttriangleBounds[ left * 6 + i ] = triangleBounds[ right * 6 + i ];\n\t\t\t\ttriangleBounds[ right * 6 + i ] = tb;\n\n\t\t\t}\n\n\t\t\tleft ++;\n\t\t\tright --;\n\n\t\t} else {\n\n\t\t\treturn left;\n\n\t\t}\n\n\t}\n\n}\n\nexport { partition_indirect };\n","export function IS_LEAF( n16, uint16Array ) {\n\n\treturn uint16Array[ n16 + 15 ] === 0xFFFF;\n\n}\n\nexport function OFFSET( n32, uint32Array ) {\n\n\treturn uint32Array[ n32 + 6 ];\n\n}\n\nexport function COUNT( n16, uint16Array ) {\n\n\treturn uint16Array[ n16 + 14 ];\n\n}\n\nexport function LEFT_NODE( n32 ) {\n\n\treturn n32 + 8;\n\n}\n\nexport function RIGHT_NODE( n32, uint32Array ) {\n\n\treturn uint32Array[ n32 + 6 ];\n\n}\n\nexport function SPLIT_AXIS( n32, uint32Array ) {\n\n\treturn uint32Array[ n32 + 7 ];\n\n}\n\nexport function BOUNDING_DATA_INDEX( n32 ) {\n\n\treturn n32;\n\n}\n","import { BYTES_PER_NODE, IS_LEAFNODE_FLAG } from '../Constants.js';\nimport { IS_LEAF } from '../utils/nodeBufferUtils.js';\n\nlet float32Array, uint32Array, uint16Array, uint8Array;\nconst MAX_POINTER = Math.pow( 2, 32 );\n\nexport function countNodes( node ) {\n\n\tif ( 'count' in node ) {\n\n\t\treturn 1;\n\n\t} else {\n\n\t\treturn 1 + countNodes( node.left ) + countNodes( node.right );\n\n\t}\n\n}\n\nexport function populateBuffer( byteOffset, node, buffer ) {\n\n\tfloat32Array = new Float32Array( buffer );\n\tuint32Array = new Uint32Array( buffer );\n\tuint16Array = new Uint16Array( buffer );\n\tuint8Array = new Uint8Array( buffer );\n\n\treturn _populateBuffer( byteOffset, node );\n\n}\n\n// pack structure\n// boundingData \t\t\t\t: 6 float32\n// right / offset \t\t\t\t: 1 uint32\n// splitAxis / isLeaf + count \t: 1 uint32 / 2 uint16\nfunction _populateBuffer( byteOffset, node ) {\n\n\tconst stride4Offset = byteOffset / 4;\n\tconst stride2Offset = byteOffset / 2;\n\tconst isLeaf = 'count' in node;\n\tconst boundingData = node.boundingData;\n\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\tfloat32Array[ stride4Offset + i ] = boundingData[ i ];\n\n\t}\n\n\tif ( isLeaf ) {\n\n\t\tif ( node.buffer ) {\n\n\t\t\tconst buffer = node.buffer;\n\t\t\tuint8Array.set( new Uint8Array( buffer ), byteOffset );\n\n\t\t\tfor ( let offset = byteOffset, l = byteOffset + buffer.byteLength; offset < l; offset += BYTES_PER_NODE ) {\n\n\t\t\t\tconst offset2 = offset / 2;\n\t\t\t\tif ( ! IS_LEAF( offset2, uint16Array ) ) {\n\n\t\t\t\t\tuint32Array[ ( offset / 4 ) + 6 ] += stride4Offset;\n\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn byteOffset + buffer.byteLength;\n\n\t\t} else {\n\n\t\t\tconst offset = node.offset;\n\t\t\tconst count = node.count;\n\t\t\tuint32Array[ stride4Offset + 6 ] = offset;\n\t\t\tuint16Array[ stride2Offset + 14 ] = count;\n\t\t\tuint16Array[ stride2Offset + 15 ] = IS_LEAFNODE_FLAG;\n\t\t\treturn byteOffset + BYTES_PER_NODE;\n\n\t\t}\n\n\t} else {\n\n\t\tconst left = node.left;\n\t\tconst right = node.right;\n\t\tconst splitAxis = node.splitAxis;\n\n\t\tlet nextUnusedPointer;\n\t\tnextUnusedPointer = _populateBuffer( byteOffset + BYTES_PER_NODE, left );\n\n\t\tif ( ( nextUnusedPointer / 4 ) > MAX_POINTER ) {\n\n\t\t\tthrow new Error( 'MeshBVH: Cannot store child pointer greater than 32 bits.' );\n\n\t\t}\n\n\t\tuint32Array[ stride4Offset + 6 ] = nextUnusedPointer / 4;\n\t\tnextUnusedPointer = _populateBuffer( nextUnusedPointer, right );\n\n\t\tuint32Array[ stride4Offset + 7 ] = splitAxis;\n\t\treturn nextUnusedPointer;\n\n\t}\n\n}\n","import { ensureIndex, getFullGeometryRange, getRootIndexRanges, getTriCount, hasGroupGaps, } from './geometryUtils.js';\nimport { getBounds, computeTriangleBounds } from './computeBoundsUtils.js';\nimport { getOptimalSplit } from './splitUtils.js';\nimport { MeshBVHNode } from '../MeshBVHNode.js';\nimport { BYTES_PER_NODE } from '../Constants.js';\n\nimport { partition } from './sortUtils.generated.js';\nimport { partition_indirect } from './sortUtils_indirect.generated.js';\nimport { countNodes, populateBuffer } from './buildUtils.js';\n\nexport function generateIndirectBuffer( geometry, useSharedArrayBuffer ) {\n\n\tconst triCount = ( geometry.index ? geometry.index.count : geometry.attributes.position.count ) / 3;\n\tconst useUint32 = triCount > 2 ** 16;\n\tconst byteCount = useUint32 ? 4 : 2;\n\n\tconst buffer = useSharedArrayBuffer ? new SharedArrayBuffer( triCount * byteCount ) : new ArrayBuffer( triCount * byteCount );\n\tconst indirectBuffer = useUint32 ? new Uint32Array( buffer ) : new Uint16Array( buffer );\n\tfor ( let i = 0, l = indirectBuffer.length; i < l; i ++ ) {\n\n\t\tindirectBuffer[ i ] = i;\n\n\t}\n\n\treturn indirectBuffer;\n\n}\n\nexport function buildTree( bvh, triangleBounds, offset, count, options ) {\n\n\t// epxand variables\n\tconst {\n\t\tmaxDepth,\n\t\tverbose,\n\t\tmaxLeafTris,\n\t\tstrategy,\n\t\tonProgress,\n\t\tindirect,\n\t} = options;\n\tconst indirectBuffer = bvh._indirectBuffer;\n\tconst geometry = bvh.geometry;\n\tconst indexArray = geometry.index ? geometry.index.array : null;\n\tconst partionFunc = indirect ? partition_indirect : partition;\n\n\t// generate intermediate variables\n\tconst totalTriangles = getTriCount( geometry );\n\tconst cacheCentroidBoundingData = new Float32Array( 6 );\n\tlet reachedMaxDepth = false;\n\n\tconst root = new MeshBVHNode();\n\tgetBounds( triangleBounds, offset, count, root.boundingData, cacheCentroidBoundingData );\n\tsplitNode( root, offset, count, cacheCentroidBoundingData );\n\treturn root;\n\n\tfunction triggerProgress( trianglesProcessed ) {\n\n\t\tif ( onProgress ) {\n\n\t\t\tonProgress( trianglesProcessed / totalTriangles );\n\n\t\t}\n\n\t}\n\n\t// either recursively splits the given node, creating left and right subtrees for it, or makes it a leaf node,\n\t// recording the offset and count of its triangles and writing them into the reordered geometry index.\n\tfunction splitNode( node, offset, count, centroidBoundingData = null, depth = 0 ) {\n\n\t\tif ( ! reachedMaxDepth && depth >= maxDepth ) {\n\n\t\t\treachedMaxDepth = true;\n\t\t\tif ( verbose ) {\n\n\t\t\t\tconsole.warn( `MeshBVH: Max depth of ${ maxDepth } reached when generating BVH. Consider increasing maxDepth.` );\n\t\t\t\tconsole.warn( geometry );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// early out if we've met our capacity\n\t\tif ( count <= maxLeafTris || depth >= maxDepth ) {\n\n\t\t\ttriggerProgress( offset + count );\n\t\t\tnode.offset = offset;\n\t\t\tnode.count = count;\n\t\t\treturn node;\n\n\t\t}\n\n\t\t// Find where to split the volume\n\t\tconst split = getOptimalSplit( node.boundingData, centroidBoundingData, triangleBounds, offset, count, strategy );\n\t\tif ( split.axis === - 1 ) {\n\n\t\t\ttriggerProgress( offset + count );\n\t\t\tnode.offset = offset;\n\t\t\tnode.count = count;\n\t\t\treturn node;\n\n\t\t}\n\n\t\tconst splitOffset = partionFunc( indirectBuffer, indexArray, triangleBounds, offset, count, split );\n\n\t\t// create the two new child nodes\n\t\tif ( splitOffset === offset || splitOffset === offset + count ) {\n\n\t\t\ttriggerProgress( offset + count );\n\t\t\tnode.offset = offset;\n\t\t\tnode.count = count;\n\n\t\t} else {\n\n\t\t\tnode.splitAxis = split.axis;\n\n\t\t\t// create the left child and compute its bounding box\n\t\t\tconst left = new MeshBVHNode();\n\t\t\tconst lstart = offset;\n\t\t\tconst lcount = splitOffset - offset;\n\t\t\tnode.left = left;\n\n\t\t\tgetBounds( triangleBounds, lstart, lcount, left.boundingData, cacheCentroidBoundingData );\n\t\t\tsplitNode( left, lstart, lcount, cacheCentroidBoundingData, depth + 1 );\n\n\t\t\t// repeat for right\n\t\t\tconst right = new MeshBVHNode();\n\t\t\tconst rstart = splitOffset;\n\t\t\tconst rcount = count - lcount;\n\t\t\tnode.right = right;\n\n\t\t\tgetBounds( triangleBounds, rstart, rcount, right.boundingData, cacheCentroidBoundingData );\n\t\t\tsplitNode( right, rstart, rcount, cacheCentroidBoundingData, depth + 1 );\n\n\t\t}\n\n\t\treturn node;\n\n\t}\n\n}\n\nexport function buildPackedTree( bvh, options ) {\n\n\tconst geometry = bvh.geometry;\n\tif ( options.indirect ) {\n\n\t\tbvh._indirectBuffer = generateIndirectBuffer( geometry, options.useSharedArrayBuffer );\n\n\t\tif ( hasGroupGaps( geometry, options.range ) && ! options.verbose ) {\n\n\t\t\tconsole.warn(\n\t\t\t\t'MeshBVH: Provided geometry contains groups or a range that do not fully span the vertex contents while using the \"indirect\" option. ' +\n\t\t\t\t'BVH may incorrectly report intersections on unrendered portions of the geometry.'\n\t\t\t);\n\n\t\t}\n\n\t}\n\n\tif ( ! bvh._indirectBuffer ) {\n\n\t\tensureIndex( geometry, options );\n\n\t}\n\n\tconst BufferConstructor = options.useSharedArrayBuffer ? SharedArrayBuffer : ArrayBuffer;\n\n\tconst triangleBounds = computeTriangleBounds( geometry );\n\tconst geometryRanges = options.indirect ? getFullGeometryRange( geometry, options.range ) : getRootIndexRanges( geometry, options.range );\n\tbvh._roots = geometryRanges.map( range => {\n\n\t\tconst root = buildTree( bvh, triangleBounds, range.offset, range.count, options );\n\t\tconst nodeCount = countNodes( root );\n\t\tconst buffer = new BufferConstructor( BYTES_PER_NODE * nodeCount );\n\t\tpopulateBuffer( 0, root, buffer );\n\t\treturn buffer;\n\n\t} );\n\n}\n","import { Vector3 } from 'three';\n\nexport class SeparatingAxisBounds {\n\n\tconstructor() {\n\n\t\tthis.min = Infinity;\n\t\tthis.max = - Infinity;\n\n\t}\n\n\tsetFromPointsField( points, field ) {\n\n\t\tlet min = Infinity;\n\t\tlet max = - Infinity;\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst p = points[ i ];\n\t\t\tconst val = p[ field ];\n\t\t\tmin = val < min ? val : min;\n\t\t\tmax = val > max ? val : max;\n\n\t\t}\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tsetFromPoints( axis, points ) {\n\n\t\tlet min = Infinity;\n\t\tlet max = - Infinity;\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst p = points[ i ];\n\t\t\tconst val = axis.dot( p );\n\t\t\tmin = val < min ? val : min;\n\t\t\tmax = val > max ? val : max;\n\n\t\t}\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tisSeparated( other ) {\n\n\t\treturn this.min > other.max || other.min > this.max;\n\n\t}\n\n}\n\nSeparatingAxisBounds.prototype.setFromBox = ( function () {\n\n\tconst p = new Vector3();\n\treturn function setFromBox( axis, box ) {\n\n\t\tconst boxMin = box.min;\n\t\tconst boxMax = box.max;\n\t\tlet min = Infinity;\n\t\tlet max = - Infinity;\n\t\tfor ( let x = 0; x <= 1; x ++ ) {\n\n\t\t\tfor ( let y = 0; y <= 1; y ++ ) {\n\n\t\t\t\tfor ( let z = 0; z <= 1; z ++ ) {\n\n\t\t\t\t\tp.x = boxMin.x * x + boxMax.x * ( 1 - x );\n\t\t\t\t\tp.y = boxMin.y * y + boxMax.y * ( 1 - y );\n\t\t\t\t\tp.z = boxMin.z * z + boxMax.z * ( 1 - z );\n\n\t\t\t\t\tconst val = axis.dot( p );\n\t\t\t\t\tmin = Math.min( val, min );\n\t\t\t\t\tmax = Math.max( val, max );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t};\n\n} )();\n\nexport const areIntersecting = ( function () {\n\n\tconst cacheSatBounds = new SeparatingAxisBounds();\n\treturn function areIntersecting( shape1, shape2 ) {\n\n\t\tconst points1 = shape1.points;\n\t\tconst satAxes1 = shape1.satAxes;\n\t\tconst satBounds1 = shape1.satBounds;\n\n\t\tconst points2 = shape2.points;\n\t\tconst satAxes2 = shape2.satAxes;\n\t\tconst satBounds2 = shape2.satBounds;\n\n\t\t// check axes of the first shape\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst sb = satBounds1[ i ];\n\t\t\tconst sa = satAxes1[ i ];\n\t\t\tcacheSatBounds.setFromPoints( sa, points2 );\n\t\t\tif ( sb.isSeparated( cacheSatBounds ) ) return false;\n\n\t\t}\n\n\t\t// check axes of the second shape\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst sb = satBounds2[ i ];\n\t\t\tconst sa = satAxes2[ i ];\n\t\t\tcacheSatBounds.setFromPoints( sa, points1 );\n\t\t\tif ( sb.isSeparated( cacheSatBounds ) ) return false;\n\n\t\t}\n\n\t};\n\n} )();\n","import { Vector3, Vector2, Plane, Line3 } from 'three';\n\nexport const closestPointLineToLine = ( function () {\n\n\t// https://github.com/juj/MathGeoLib/blob/master/src/Geometry/Line.cpp#L56\n\tconst dir1 = new Vector3();\n\tconst dir2 = new Vector3();\n\tconst v02 = new Vector3();\n\treturn function closestPointLineToLine( l1, l2, result ) {\n\n\t\tconst v0 = l1.start;\n\t\tconst v10 = dir1;\n\t\tconst v2 = l2.start;\n\t\tconst v32 = dir2;\n\n\t\tv02.subVectors( v0, v2 );\n\t\tdir1.subVectors( l1.end, l1.start );\n\t\tdir2.subVectors( l2.end, l2.start );\n\n\t\t// float d0232 = v02.Dot(v32);\n\t\tconst d0232 = v02.dot( v32 );\n\n\t\t// float d3210 = v32.Dot(v10);\n\t\tconst d3210 = v32.dot( v10 );\n\n\t\t// float d3232 = v32.Dot(v32);\n\t\tconst d3232 = v32.dot( v32 );\n\n\t\t// float d0210 = v02.Dot(v10);\n\t\tconst d0210 = v02.dot( v10 );\n\n\t\t// float d1010 = v10.Dot(v10);\n\t\tconst d1010 = v10.dot( v10 );\n\n\t\t// float denom = d1010*d3232 - d3210*d3210;\n\t\tconst denom = d1010 * d3232 - d3210 * d3210;\n\n\t\tlet d, d2;\n\t\tif ( denom !== 0 ) {\n\n\t\t\td = ( d0232 * d3210 - d0210 * d3232 ) / denom;\n\n\t\t} else {\n\n\t\t\td = 0;\n\n\t\t}\n\n\t\td2 = ( d0232 + d * d3210 ) / d3232;\n\n\t\tresult.x = d;\n\t\tresult.y = d2;\n\n\t};\n\n} )();\n\nexport const closestPointsSegmentToSegment = ( function () {\n\n\t// https://github.com/juj/MathGeoLib/blob/master/src/Geometry/LineSegment.cpp#L187\n\tconst paramResult = new Vector2();\n\tconst temp1 = new Vector3();\n\tconst temp2 = new Vector3();\n\treturn function closestPointsSegmentToSegment( l1, l2, target1, target2 ) {\n\n\t\tclosestPointLineToLine( l1, l2, paramResult );\n\n\t\tlet d = paramResult.x;\n\t\tlet d2 = paramResult.y;\n\t\tif ( d >= 0 && d <= 1 && d2 >= 0 && d2 <= 1 ) {\n\n\t\t\tl1.at( d, target1 );\n\t\t\tl2.at( d2, target2 );\n\n\t\t\treturn;\n\n\t\t} else if ( d >= 0 && d <= 1 ) {\n\n\t\t\t// Only d2 is out of bounds.\n\t\t\tif ( d2 < 0 ) {\n\n\t\t\t\tl2.at( 0, target2 );\n\n\t\t\t} else {\n\n\t\t\t\tl2.at( 1, target2 );\n\n\t\t\t}\n\n\t\t\tl1.closestPointToPoint( target2, true, target1 );\n\t\t\treturn;\n\n\t\t} else if ( d2 >= 0 && d2 <= 1 ) {\n\n\t\t\t// Only d is out of bounds.\n\t\t\tif ( d < 0 ) {\n\n\t\t\t\tl1.at( 0, target1 );\n\n\t\t\t} else {\n\n\t\t\t\tl1.at( 1, target1 );\n\n\t\t\t}\n\n\t\t\tl2.closestPointToPoint( target1, true, target2 );\n\t\t\treturn;\n\n\t\t} else {\n\n\t\t\t// Both u and u2 are out of bounds.\n\t\t\tlet p;\n\t\t\tif ( d < 0 ) {\n\n\t\t\t\tp = l1.start;\n\n\t\t\t} else {\n\n\t\t\t\tp = l1.end;\n\n\t\t\t}\n\n\t\t\tlet p2;\n\t\t\tif ( d2 < 0 ) {\n\n\t\t\t\tp2 = l2.start;\n\n\t\t\t} else {\n\n\t\t\t\tp2 = l2.end;\n\n\t\t\t}\n\n\t\t\tconst closestPoint = temp1;\n\t\t\tconst closestPoint2 = temp2;\n\t\t\tl1.closestPointToPoint( p2, true, temp1 );\n\t\t\tl2.closestPointToPoint( p, true, temp2 );\n\n\t\t\tif ( closestPoint.distanceToSquared( p2 ) <= closestPoint2.distanceToSquared( p ) ) {\n\n\t\t\t\ttarget1.copy( closestPoint );\n\t\t\t\ttarget2.copy( p2 );\n\t\t\t\treturn;\n\n\t\t\t} else {\n\n\t\t\t\ttarget1.copy( p );\n\t\t\t\ttarget2.copy( closestPoint2 );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n} )();\n\n\nexport const sphereIntersectTriangle = ( function () {\n\n\t// https://stackoverflow.com/questions/34043955/detect-collision-between-sphere-and-triangle-in-three-js\n\tconst closestPointTemp = new Vector3();\n\tconst projectedPointTemp = new Vector3();\n\tconst planeTemp = new Plane();\n\tconst lineTemp = new Line3();\n\treturn function sphereIntersectTriangle( sphere, triangle ) {\n\n\t\tconst { radius, center } = sphere;\n\t\tconst { a, b, c } = triangle;\n\n\t\t// phase 1\n\t\tlineTemp.start = a;\n\t\tlineTemp.end = b;\n\t\tconst closestPoint1 = lineTemp.closestPointToPoint( center, true, closestPointTemp );\n\t\tif ( closestPoint1.distanceTo( center ) <= radius ) return true;\n\n\t\tlineTemp.start = a;\n\t\tlineTemp.end = c;\n\t\tconst closestPoint2 = lineTemp.closestPointToPoint( center, true, closestPointTemp );\n\t\tif ( closestPoint2.distanceTo( center ) <= radius ) return true;\n\n\t\tlineTemp.start = b;\n\t\tlineTemp.end = c;\n\t\tconst closestPoint3 = lineTemp.closestPointToPoint( center, true, closestPointTemp );\n\t\tif ( closestPoint3.distanceTo( center ) <= radius ) return true;\n\n\t\t// phase 2\n\t\tconst plane = triangle.getPlane( planeTemp );\n\t\tconst dp = Math.abs( plane.distanceToPoint( center ) );\n\t\tif ( dp <= radius ) {\n\n\t\t\tconst pp = plane.projectPoint( center, projectedPointTemp );\n\t\t\tconst cp = triangle.containsPoint( pp );\n\t\t\tif ( cp ) return true;\n\n\t\t}\n\n\t\treturn false;\n\n\t};\n\n} )();\n","import { Triangle, Vector3, Line3, Sphere, Plane } from 'three';\nimport { SeparatingAxisBounds } from './SeparatingAxisBounds.js';\nimport { closestPointsSegmentToSegment, sphereIntersectTriangle } from './MathUtilities.js';\n\nconst ZERO_EPSILON = 1e-15;\nfunction isNearZero( value ) {\n\n\treturn Math.abs( value ) < ZERO_EPSILON;\n\n}\n\nexport class ExtendedTriangle extends Triangle {\n\n\tconstructor( ...args ) {\n\n\t\tsuper( ...args );\n\n\t\tthis.isExtendedTriangle = true;\n\t\tthis.satAxes = new Array( 4 ).fill().map( () => new Vector3() );\n\t\tthis.satBounds = new Array( 4 ).fill().map( () => new SeparatingAxisBounds() );\n\t\tthis.points = [ this.a, this.b, this.c ];\n\t\tthis.sphere = new Sphere();\n\t\tthis.plane = new Plane();\n\t\tthis.needsUpdate = true;\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn sphereIntersectTriangle( sphere, this );\n\n\t}\n\n\tupdate() {\n\n\t\tconst a = this.a;\n\t\tconst b = this.b;\n\t\tconst c = this.c;\n\t\tconst points = this.points;\n\n\t\tconst satAxes = this.satAxes;\n\t\tconst satBounds = this.satBounds;\n\n\t\tconst axis0 = satAxes[ 0 ];\n\t\tconst sab0 = satBounds[ 0 ];\n\t\tthis.getNormal( axis0 );\n\t\tsab0.setFromPoints( axis0, points );\n\n\t\tconst axis1 = satAxes[ 1 ];\n\t\tconst sab1 = satBounds[ 1 ];\n\t\taxis1.subVectors( a, b );\n\t\tsab1.setFromPoints( axis1, points );\n\n\t\tconst axis2 = satAxes[ 2 ];\n\t\tconst sab2 = satBounds[ 2 ];\n\t\taxis2.subVectors( b, c );\n\t\tsab2.setFromPoints( axis2, points );\n\n\t\tconst axis3 = satAxes[ 3 ];\n\t\tconst sab3 = satBounds[ 3 ];\n\t\taxis3.subVectors( c, a );\n\t\tsab3.setFromPoints( axis3, points );\n\n\t\tthis.sphere.setFromPoints( this.points );\n\t\tthis.plane.setFromNormalAndCoplanarPoint( axis0, a );\n\t\tthis.needsUpdate = false;\n\n\t}\n\n}\n\nExtendedTriangle.prototype.closestPointToSegment = ( function () {\n\n\tconst point1 = new Vector3();\n\tconst point2 = new Vector3();\n\tconst edge = new Line3();\n\n\treturn function distanceToSegment( segment, target1 = null, target2 = null ) {\n\n\t\tconst { start, end } = segment;\n\t\tconst points = this.points;\n\t\tlet distSq;\n\t\tlet closestDistanceSq = Infinity;\n\n\t\t// check the triangle edges\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst nexti = ( i + 1 ) % 3;\n\t\t\tedge.start.copy( points[ i ] );\n\t\t\tedge.end.copy( points[ nexti ] );\n\n\t\t\tclosestPointsSegmentToSegment( edge, segment, point1, point2 );\n\n\t\t\tdistSq = point1.distanceToSquared( point2 );\n\t\t\tif ( distSq < closestDistanceSq ) {\n\n\t\t\t\tclosestDistanceSq = distSq;\n\t\t\t\tif ( target1 ) target1.copy( point1 );\n\t\t\t\tif ( target2 ) target2.copy( point2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// check end points\n\t\tthis.closestPointToPoint( start, point1 );\n\t\tdistSq = start.distanceToSquared( point1 );\n\t\tif ( distSq < closestDistanceSq ) {\n\n\t\t\tclosestDistanceSq = distSq;\n\t\t\tif ( target1 ) target1.copy( point1 );\n\t\t\tif ( target2 ) target2.copy( start );\n\n\t\t}\n\n\t\tthis.closestPointToPoint( end, point1 );\n\t\tdistSq = end.distanceToSquared( point1 );\n\t\tif ( distSq < closestDistanceSq ) {\n\n\t\t\tclosestDistanceSq = distSq;\n\t\t\tif ( target1 ) target1.copy( point1 );\n\t\t\tif ( target2 ) target2.copy( end );\n\n\t\t}\n\n\t\treturn Math.sqrt( closestDistanceSq );\n\n\t};\n\n} )();\n\nExtendedTriangle.prototype.intersectsTriangle = ( function () {\n\n\tconst saTri2 = new ExtendedTriangle();\n\tconst arr1 = new Array( 3 );\n\tconst arr2 = new Array( 3 );\n\tconst cachedSatBounds = new SeparatingAxisBounds();\n\tconst cachedSatBounds2 = new SeparatingAxisBounds();\n\tconst cachedAxis = new Vector3();\n\tconst dir = new Vector3();\n\tconst dir1 = new Vector3();\n\tconst dir2 = new Vector3();\n\tconst tempDir = new Vector3();\n\tconst edge = new Line3();\n\tconst edge1 = new Line3();\n\tconst edge2 = new Line3();\n\tconst tempPoint = new Vector3();\n\n\tfunction triIntersectPlane( tri, plane, targetEdge ) {\n\n\t\t// find the edge that intersects the other triangle plane\n\t\tconst points = tri.points;\n\t\tlet count = 0;\n\t\tlet startPointIntersection = - 1;\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst { start, end } = edge;\n\t\t\tstart.copy( points[ i ] );\n\t\t\tend.copy( points[ ( i + 1 ) % 3 ] );\n\t\t\tedge.delta( dir );\n\n\t\t\tconst startIntersects = isNearZero( plane.distanceToPoint( start ) );\n\t\t\tif ( isNearZero( plane.normal.dot( dir ) ) && startIntersects ) {\n\n\t\t\t\t// if the edge lies on the plane then take the line\n\t\t\t\ttargetEdge.copy( edge );\n\t\t\t\tcount = 2;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\t// check if the start point is near the plane because \"intersectLine\" is not robust to that case\n\t\t\tconst doesIntersect = plane.intersectLine( edge, tempPoint );\n\t\t\tif ( ! doesIntersect && startIntersects ) {\n\n\t\t\t\ttempPoint.copy( start );\n\n\t\t\t}\n\n\t\t\t// ignore the end point\n\t\t\tif ( ( doesIntersect || startIntersects ) && ! isNearZero( tempPoint.distanceTo( end ) ) ) {\n\n\t\t\t\tif ( count <= 1 ) {\n\n\t\t\t\t\t// assign to the start or end point and save which index was snapped to\n\t\t\t\t\t// the start point if necessary\n\t\t\t\t\tconst point = count === 1 ? targetEdge.start : targetEdge.end;\n\t\t\t\t\tpoint.copy( tempPoint );\n\t\t\t\t\tif ( startIntersects ) {\n\n\t\t\t\t\t\tstartPointIntersection = count;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( count >= 2 ) {\n\n\t\t\t\t\t// if we're here that means that there must have been one point that had\n\t\t\t\t\t// snapped to the start point so replace it here\n\t\t\t\t\tconst point = startPointIntersection === 1 ? targetEdge.start : targetEdge.end;\n\t\t\t\t\tpoint.copy( tempPoint );\n\t\t\t\t\tcount = 2;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tcount ++;\n\t\t\t\tif ( count === 2 && startPointIntersection === - 1 ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn count;\n\n\t}\n\n\t// TODO: If the triangles are coplanar and intersecting the target is nonsensical. It should at least\n\t// be a line contained by both triangles if not a different special case somehow represented in the return result.\n\treturn function intersectsTriangle( other, target = null, suppressLog = false ) {\n\n\t\tif ( this.needsUpdate ) {\n\n\t\t\tthis.update();\n\n\t\t}\n\n\t\tif ( ! other.isExtendedTriangle ) {\n\n\t\t\tsaTri2.copy( other );\n\t\t\tsaTri2.update();\n\t\t\tother = saTri2;\n\n\t\t} else if ( other.needsUpdate ) {\n\n\t\t\tother.update();\n\n\t\t}\n\n\t\tconst plane1 = this.plane;\n\t\tconst plane2 = other.plane;\n\n\t\tif ( Math.abs( plane1.normal.dot( plane2.normal ) ) > 1.0 - 1e-10 ) {\n\n\t\t\t// perform separating axis intersection test only for coplanar triangles\n\t\t\tconst satBounds1 = this.satBounds;\n\t\t\tconst satAxes1 = this.satAxes;\n\t\t\tarr2[ 0 ] = other.a;\n\t\t\tarr2[ 1 ] = other.b;\n\t\t\tarr2[ 2 ] = other.c;\n\t\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\t\tconst sb = satBounds1[ i ];\n\t\t\t\tconst sa = satAxes1[ i ];\n\t\t\t\tcachedSatBounds.setFromPoints( sa, arr2 );\n\t\t\t\tif ( sb.isSeparated( cachedSatBounds ) ) return false;\n\n\t\t\t}\n\n\t\t\tconst satBounds2 = other.satBounds;\n\t\t\tconst satAxes2 = other.satAxes;\n\t\t\tarr1[ 0 ] = this.a;\n\t\t\tarr1[ 1 ] = this.b;\n\t\t\tarr1[ 2 ] = this.c;\n\t\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\t\tconst sb = satBounds2[ i ];\n\t\t\t\tconst sa = satAxes2[ i ];\n\t\t\t\tcachedSatBounds.setFromPoints( sa, arr1 );\n\t\t\t\tif ( sb.isSeparated( cachedSatBounds ) ) return false;\n\n\t\t\t}\n\n\t\t\t// check crossed axes\n\t\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\t\tconst sa1 = satAxes1[ i ];\n\t\t\t\tfor ( let i2 = 0; i2 < 4; i2 ++ ) {\n\n\t\t\t\t\tconst sa2 = satAxes2[ i2 ];\n\t\t\t\t\tcachedAxis.crossVectors( sa1, sa2 );\n\t\t\t\t\tcachedSatBounds.setFromPoints( cachedAxis, arr1 );\n\t\t\t\t\tcachedSatBounds2.setFromPoints( cachedAxis, arr2 );\n\t\t\t\t\tif ( cachedSatBounds.isSeparated( cachedSatBounds2 ) ) return false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( target ) {\n\n\t\t\t\t// TODO find two points that intersect on the edges and make that the result\n\t\t\t\tif ( ! suppressLog ) {\n\n\t\t\t\t\tconsole.warn( 'ExtendedTriangle.intersectsTriangle: Triangles are coplanar which does not support an output edge. Setting edge to 0, 0, 0.' );\n\n\t\t\t\t}\n\n\t\t\t\ttarget.start.set( 0, 0, 0 );\n\t\t\t\ttarget.end.set( 0, 0, 0 );\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t} else {\n\n\t\t\t// find the edge that intersects the other triangle plane\n\t\t\tconst count1 = triIntersectPlane( this, plane2, edge1 );\n\t\t\tif ( count1 === 1 && other.containsPoint( edge1.end ) ) {\n\n\t\t\t\tif ( target ) {\n\n\t\t\t\t\ttarget.start.copy( edge1.end );\n\t\t\t\t\ttarget.end.copy( edge1.end );\n\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\n\t\t\t} else if ( count1 !== 2 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// find the other triangles edge that intersects this plane\n\t\t\tconst count2 = triIntersectPlane( other, plane1, edge2 );\n\t\t\tif ( count2 === 1 && this.containsPoint( edge2.end ) ) {\n\n\t\t\t\tif ( target ) {\n\n\t\t\t\t\ttarget.start.copy( edge2.end );\n\t\t\t\t\ttarget.end.copy( edge2.end );\n\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\n\t\t\t} else if ( count2 !== 2 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// find swap the second edge so both lines are running the same direction\n\t\t\tedge1.delta( dir1 );\n\t\t\tedge2.delta( dir2 );\n\n\t\t\tif ( dir1.dot( dir2 ) < 0 ) {\n\n\t\t\t\tlet tmp = edge2.start;\n\t\t\t\tedge2.start = edge2.end;\n\t\t\t\tedge2.end = tmp;\n\n\t\t\t}\n\n\t\t\t// check if the edges are overlapping\n\t\t\tconst s1 = edge1.start.dot( dir1 );\n\t\t\tconst e1 = edge1.end.dot( dir1 );\n\t\t\tconst s2 = edge2.start.dot( dir1 );\n\t\t\tconst e2 = edge2.end.dot( dir1 );\n\t\t\tconst separated1 = e1 < s2;\n\t\t\tconst separated2 = s1 < e2;\n\n\t\t\tif ( s1 !== e2 && s2 !== e1 && separated1 === separated2 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// assign the target output\n\t\t\tif ( target ) {\n\n\t\t\t\ttempDir.subVectors( edge1.start, edge2.start );\n\t\t\t\tif ( tempDir.dot( dir1 ) > 0 ) {\n\n\t\t\t\t\ttarget.start.copy( edge1.start );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttarget.start.copy( edge2.start );\n\n\t\t\t\t}\n\n\t\t\t\ttempDir.subVectors( edge1.end, edge2.end );\n\t\t\t\tif ( tempDir.dot( dir1 ) < 0 ) {\n\n\t\t\t\t\ttarget.end.copy( edge1.end );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttarget.end.copy( edge2.end );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t};\n\n} )();\n\n\nExtendedTriangle.prototype.distanceToPoint = ( function () {\n\n\tconst target = new Vector3();\n\treturn function distanceToPoint( point ) {\n\n\t\tthis.closestPointToPoint( point, target );\n\t\treturn point.distanceTo( target );\n\n\t};\n\n} )();\n\n\nExtendedTriangle.prototype.distanceToTriangle = ( function () {\n\n\tconst point = new Vector3();\n\tconst point2 = new Vector3();\n\tconst cornerFields = [ 'a', 'b', 'c' ];\n\tconst line1 = new Line3();\n\tconst line2 = new Line3();\n\n\treturn function distanceToTriangle( other, target1 = null, target2 = null ) {\n\n\t\tconst lineTarget = target1 || target2 ? line1 : null;\n\t\tif ( this.intersectsTriangle( other, lineTarget ) ) {\n\n\t\t\tif ( target1 || target2 ) {\n\n\t\t\t\tif ( target1 ) lineTarget.getCenter( target1 );\n\t\t\t\tif ( target2 ) lineTarget.getCenter( target2 );\n\n\t\t\t}\n\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tlet closestDistanceSq = Infinity;\n\n\t\t// check all point distances\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tlet dist;\n\t\t\tconst field = cornerFields[ i ];\n\t\t\tconst otherVec = other[ field ];\n\t\t\tthis.closestPointToPoint( otherVec, point );\n\n\t\t\tdist = otherVec.distanceToSquared( point );\n\n\t\t\tif ( dist < closestDistanceSq ) {\n\n\t\t\t\tclosestDistanceSq = dist;\n\t\t\t\tif ( target1 ) target1.copy( point );\n\t\t\t\tif ( target2 ) target2.copy( otherVec );\n\n\t\t\t}\n\n\n\t\t\tconst thisVec = this[ field ];\n\t\t\tother.closestPointToPoint( thisVec, point );\n\n\t\t\tdist = thisVec.distanceToSquared( point );\n\n\t\t\tif ( dist < closestDistanceSq ) {\n\n\t\t\t\tclosestDistanceSq = dist;\n\t\t\t\tif ( target1 ) target1.copy( thisVec );\n\t\t\t\tif ( target2 ) target2.copy( point );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst f11 = cornerFields[ i ];\n\t\t\tconst f12 = cornerFields[ ( i + 1 ) % 3 ];\n\t\t\tline1.set( this[ f11 ], this[ f12 ] );\n\t\t\tfor ( let i2 = 0; i2 < 3; i2 ++ ) {\n\n\t\t\t\tconst f21 = cornerFields[ i2 ];\n\t\t\t\tconst f22 = cornerFields[ ( i2 + 1 ) % 3 ];\n\t\t\t\tline2.set( other[ f21 ], other[ f22 ] );\n\n\t\t\t\tclosestPointsSegmentToSegment( line1, line2, point, point2 );\n\n\t\t\t\tconst dist = point.distanceToSquared( point2 );\n\t\t\t\tif ( dist < closestDistanceSq ) {\n\n\t\t\t\t\tclosestDistanceSq = dist;\n\t\t\t\t\tif ( target1 ) target1.copy( point );\n\t\t\t\t\tif ( target2 ) target2.copy( point2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Math.sqrt( closestDistanceSq );\n\n\t};\n\n} )();\n","import { Vector3, Matrix4, Line3 } from 'three';\nimport { SeparatingAxisBounds } from './SeparatingAxisBounds.js';\nimport { ExtendedTriangle } from './ExtendedTriangle.js';\nimport { closestPointsSegmentToSegment } from './MathUtilities.js';\n\nexport class OrientedBox {\n\n\tconstructor( min, max, matrix ) {\n\n\t\tthis.isOrientedBox = true;\n\t\tthis.min = new Vector3();\n\t\tthis.max = new Vector3();\n\t\tthis.matrix = new Matrix4();\n\t\tthis.invMatrix = new Matrix4();\n\t\tthis.points = new Array( 8 ).fill().map( () => new Vector3() );\n\t\tthis.satAxes = new Array( 3 ).fill().map( () => new Vector3() );\n\t\tthis.satBounds = new Array( 3 ).fill().map( () => new SeparatingAxisBounds() );\n\t\tthis.alignedSatBounds = new Array( 3 ).fill().map( () => new SeparatingAxisBounds() );\n\t\tthis.needsUpdate = false;\n\n\t\tif ( min ) this.min.copy( min );\n\t\tif ( max ) this.max.copy( max );\n\t\tif ( matrix ) this.matrix.copy( matrix );\n\n\t}\n\n\tset( min, max, matrix ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\t\tthis.matrix.copy( matrix );\n\t\tthis.needsUpdate = true;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.min.copy( other.min );\n\t\tthis.max.copy( other.max );\n\t\tthis.matrix.copy( other.matrix );\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nOrientedBox.prototype.update = ( function () {\n\n\treturn function update() {\n\n\t\tconst matrix = this.matrix;\n\t\tconst min = this.min;\n\t\tconst max = this.max;\n\n\t\tconst points = this.points;\n\t\tfor ( let x = 0; x <= 1; x ++ ) {\n\n\t\t\tfor ( let y = 0; y <= 1; y ++ ) {\n\n\t\t\t\tfor ( let z = 0; z <= 1; z ++ ) {\n\n\t\t\t\t\tconst i = ( ( 1 << 0 ) * x ) | ( ( 1 << 1 ) * y ) | ( ( 1 << 2 ) * z );\n\t\t\t\t\tconst v = points[ i ];\n\t\t\t\t\tv.x = x ? max.x : min.x;\n\t\t\t\t\tv.y = y ? max.y : min.y;\n\t\t\t\t\tv.z = z ? max.z : min.z;\n\n\t\t\t\t\tv.applyMatrix4( matrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst satBounds = this.satBounds;\n\t\tconst satAxes = this.satAxes;\n\t\tconst minVec = points[ 0 ];\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst axis = satAxes[ i ];\n\t\t\tconst sb = satBounds[ i ];\n\t\t\tconst index = 1 << i;\n\t\t\tconst pi = points[ index ];\n\n\t\t\taxis.subVectors( minVec, pi );\n\t\t\tsb.setFromPoints( axis, points );\n\n\t\t}\n\n\t\tconst alignedSatBounds = this.alignedSatBounds;\n\t\talignedSatBounds[ 0 ].setFromPointsField( points, 'x' );\n\t\talignedSatBounds[ 1 ].setFromPointsField( points, 'y' );\n\t\talignedSatBounds[ 2 ].setFromPointsField( points, 'z' );\n\n\t\tthis.invMatrix.copy( this.matrix ).invert();\n\t\tthis.needsUpdate = false;\n\n\t};\n\n} )();\n\nOrientedBox.prototype.intersectsBox = ( function () {\n\n\tconst aabbBounds = new SeparatingAxisBounds();\n\treturn function intersectsBox( box ) {\n\n\t\t// TODO: should this be doing SAT against the AABB?\n\t\tif ( this.needsUpdate ) {\n\n\t\t\tthis.update();\n\n\t\t}\n\n\t\tconst min = box.min;\n\t\tconst max = box.max;\n\t\tconst satBounds = this.satBounds;\n\t\tconst satAxes = this.satAxes;\n\t\tconst alignedSatBounds = this.alignedSatBounds;\n\n\t\taabbBounds.min = min.x;\n\t\taabbBounds.max = max.x;\n\t\tif ( alignedSatBounds[ 0 ].isSeparated( aabbBounds ) ) return false;\n\n\t\taabbBounds.min = min.y;\n\t\taabbBounds.max = max.y;\n\t\tif ( alignedSatBounds[ 1 ].isSeparated( aabbBounds ) ) return false;\n\n\t\taabbBounds.min = min.z;\n\t\taabbBounds.max = max.z;\n\t\tif ( alignedSatBounds[ 2 ].isSeparated( aabbBounds ) ) return false;\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst axis = satAxes[ i ];\n\t\t\tconst sb = satBounds[ i ];\n\t\t\taabbBounds.setFromBox( axis, box );\n\t\t\tif ( sb.isSeparated( aabbBounds ) ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t};\n\n} )();\n\nOrientedBox.prototype.intersectsTriangle = ( function () {\n\n\tconst saTri = new ExtendedTriangle();\n\tconst pointsArr = new Array( 3 );\n\tconst cachedSatBounds = new SeparatingAxisBounds();\n\tconst cachedSatBounds2 = new SeparatingAxisBounds();\n\tconst cachedAxis = new Vector3();\n\treturn function intersectsTriangle( triangle ) {\n\n\t\tif ( this.needsUpdate ) {\n\n\t\t\tthis.update();\n\n\t\t}\n\n\t\tif ( ! triangle.isExtendedTriangle ) {\n\n\t\t\tsaTri.copy( triangle );\n\t\t\tsaTri.update();\n\t\t\ttriangle = saTri;\n\n\t\t} else if ( triangle.needsUpdate ) {\n\n\t\t\ttriangle.update();\n\n\t\t}\n\n\t\tconst satBounds = this.satBounds;\n\t\tconst satAxes = this.satAxes;\n\n\t\tpointsArr[ 0 ] = triangle.a;\n\t\tpointsArr[ 1 ] = triangle.b;\n\t\tpointsArr[ 2 ] = triangle.c;\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst sb = satBounds[ i ];\n\t\t\tconst sa = satAxes[ i ];\n\t\t\tcachedSatBounds.setFromPoints( sa, pointsArr );\n\t\t\tif ( sb.isSeparated( cachedSatBounds ) ) return false;\n\n\t\t}\n\n\t\tconst triSatBounds = triangle.satBounds;\n\t\tconst triSatAxes = triangle.satAxes;\n\t\tconst points = this.points;\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst sb = triSatBounds[ i ];\n\t\t\tconst sa = triSatAxes[ i ];\n\t\t\tcachedSatBounds.setFromPoints( sa, points );\n\t\t\tif ( sb.isSeparated( cachedSatBounds ) ) return false;\n\n\t\t}\n\n\t\t// check crossed axes\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst sa1 = satAxes[ i ];\n\t\t\tfor ( let i2 = 0; i2 < 4; i2 ++ ) {\n\n\t\t\t\tconst sa2 = triSatAxes[ i2 ];\n\t\t\t\tcachedAxis.crossVectors( sa1, sa2 );\n\t\t\t\tcachedSatBounds.setFromPoints( cachedAxis, pointsArr );\n\t\t\t\tcachedSatBounds2.setFromPoints( cachedAxis, points );\n\t\t\t\tif ( cachedSatBounds.isSeparated( cachedSatBounds2 ) ) return false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t};\n\n} )();\n\nOrientedBox.prototype.closestPointToPoint = ( function () {\n\n\treturn function closestPointToPoint( point, target1 ) {\n\n\t\tif ( this.needsUpdate ) {\n\n\t\t\tthis.update();\n\n\t\t}\n\n\t\ttarget1\n\t\t\t.copy( point )\n\t\t\t.applyMatrix4( this.invMatrix )\n\t\t\t.clamp( this.min, this.max )\n\t\t\t.applyMatrix4( this.matrix );\n\n\t\treturn target1;\n\n\t};\n\n} )();\n\nOrientedBox.prototype.distanceToPoint = ( function () {\n\n\tconst target = new Vector3();\n\treturn function distanceToPoint( point ) {\n\n\t\tthis.closestPointToPoint( point, target );\n\t\treturn point.distanceTo( target );\n\n\t};\n\n} )();\n\nOrientedBox.prototype.distanceToBox = ( function () {\n\n\tconst xyzFields = [ 'x', 'y', 'z' ];\n\tconst segments1 = new Array( 12 ).fill().map( () => new Line3() );\n\tconst segments2 = new Array( 12 ).fill().map( () => new Line3() );\n\n\tconst point1 = new Vector3();\n\tconst point2 = new Vector3();\n\n\t// early out if we find a value below threshold\n\treturn function distanceToBox( box, threshold = 0, target1 = null, target2 = null ) {\n\n\t\tif ( this.needsUpdate ) {\n\n\t\t\tthis.update();\n\n\t\t}\n\n\t\tif ( this.intersectsBox( box ) ) {\n\n\t\t\tif ( target1 || target2 ) {\n\n\t\t\t\tbox.getCenter( point2 );\n\t\t\t\tthis.closestPointToPoint( point2, point1 );\n\t\t\t\tbox.closestPointToPoint( point1, point2 );\n\n\t\t\t\tif ( target1 ) target1.copy( point1 );\n\t\t\t\tif ( target2 ) target2.copy( point2 );\n\n\t\t\t}\n\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tconst threshold2 = threshold * threshold;\n\t\tconst min = box.min;\n\t\tconst max = box.max;\n\t\tconst points = this.points;\n\n\n\t\t// iterate over every edge and compare distances\n\t\tlet closestDistanceSq = Infinity;\n\n\t\t// check over all these points\n\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\tconst p = points[ i ];\n\t\t\tpoint2.copy( p ).clamp( min, max );\n\n\t\t\tconst dist = p.distanceToSquared( point2 );\n\t\t\tif ( dist < closestDistanceSq ) {\n\n\t\t\t\tclosestDistanceSq = dist;\n\t\t\t\tif ( target1 ) target1.copy( p );\n\t\t\t\tif ( target2 ) target2.copy( point2 );\n\n\t\t\t\tif ( dist < threshold2 ) return Math.sqrt( dist );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate and check all line segment distances\n\t\tlet count = 0;\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tfor ( let i1 = 0; i1 <= 1; i1 ++ ) {\n\n\t\t\t\tfor ( let i2 = 0; i2 <= 1; i2 ++ ) {\n\n\t\t\t\t\tconst nextIndex = ( i + 1 ) % 3;\n\t\t\t\t\tconst nextIndex2 = ( i + 2 ) % 3;\n\n\t\t\t\t\t// get obb line segments\n\t\t\t\t\tconst index = i1 << nextIndex | i2 << nextIndex2;\n\t\t\t\t\tconst index2 = 1 << i | i1 << nextIndex | i2 << nextIndex2;\n\t\t\t\t\tconst p1 = points[ index ];\n\t\t\t\t\tconst p2 = points[ index2 ];\n\t\t\t\t\tconst line1 = segments1[ count ];\n\t\t\t\t\tline1.set( p1, p2 );\n\n\n\t\t\t\t\t// get aabb line segments\n\t\t\t\t\tconst f1 = xyzFields[ i ];\n\t\t\t\t\tconst f2 = xyzFields[ nextIndex ];\n\t\t\t\t\tconst f3 = xyzFields[ nextIndex2 ];\n\t\t\t\t\tconst line2 = segments2[ count ];\n\t\t\t\t\tconst start = line2.start;\n\t\t\t\t\tconst end = line2.end;\n\n\t\t\t\t\tstart[ f1 ] = min[ f1 ];\n\t\t\t\t\tstart[ f2 ] = i1 ? min[ f2 ] : max[ f2 ];\n\t\t\t\t\tstart[ f3 ] = i2 ? min[ f3 ] : max[ f2 ];\n\n\t\t\t\t\tend[ f1 ] = max[ f1 ];\n\t\t\t\t\tend[ f2 ] = i1 ? min[ f2 ] : max[ f2 ];\n\t\t\t\t\tend[ f3 ] = i2 ? min[ f3 ] : max[ f2 ];\n\n\t\t\t\t\tcount ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// check all the other boxes point\n\t\tfor ( let x = 0; x <= 1; x ++ ) {\n\n\t\t\tfor ( let y = 0; y <= 1; y ++ ) {\n\n\t\t\t\tfor ( let z = 0; z <= 1; z ++ ) {\n\n\t\t\t\t\tpoint2.x = x ? max.x : min.x;\n\t\t\t\t\tpoint2.y = y ? max.y : min.y;\n\t\t\t\t\tpoint2.z = z ? max.z : min.z;\n\n\t\t\t\t\tthis.closestPointToPoint( point2, point1 );\n\t\t\t\t\tconst dist = point2.distanceToSquared( point1 );\n\t\t\t\t\tif ( dist < closestDistanceSq ) {\n\n\t\t\t\t\t\tclosestDistanceSq = dist;\n\t\t\t\t\t\tif ( target1 ) target1.copy( point1 );\n\t\t\t\t\t\tif ( target2 ) target2.copy( point2 );\n\n\t\t\t\t\t\tif ( dist < threshold2 ) return Math.sqrt( dist );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 12; i ++ ) {\n\n\t\t\tconst l1 = segments1[ i ];\n\t\t\tfor ( let i2 = 0; i2 < 12; i2 ++ ) {\n\n\t\t\t\tconst l2 = segments2[ i2 ];\n\t\t\t\tclosestPointsSegmentToSegment( l1, l2, point1, point2 );\n\t\t\t\tconst dist = point1.distanceToSquared( point2 );\n\t\t\t\tif ( dist < closestDistanceSq ) {\n\n\t\t\t\t\tclosestDistanceSq = dist;\n\t\t\t\t\tif ( target1 ) target1.copy( point1 );\n\t\t\t\t\tif ( target2 ) target2.copy( point2 );\n\n\t\t\t\t\tif ( dist < threshold2 ) return Math.sqrt( dist );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Math.sqrt( closestDistanceSq );\n\n\t};\n\n} )();\n","export class PrimitivePool {\n\n\tconstructor( getNewPrimitive ) {\n\n\t\tthis._getNewPrimitive = getNewPrimitive;\n\t\tthis._primitives = [];\n\n\t}\n\n\tgetPrimitive() {\n\n\t\tconst primitives = this._primitives;\n\t\tif ( primitives.length === 0 ) {\n\n\t\t\treturn this._getNewPrimitive();\n\n\t\t} else {\n\n\t\t\treturn primitives.pop();\n\n\t\t}\n\n\t}\n\n\treleasePrimitive( primitive ) {\n\n\t\tthis._primitives.push( primitive );\n\n\t}\n\n}\n","import { ExtendedTriangle } from '../math/ExtendedTriangle.js';\nimport { PrimitivePool } from './PrimitivePool.js';\n\nclass ExtendedTrianglePoolBase extends PrimitivePool {\n\n\tconstructor() {\n\n\t\tsuper( () => new ExtendedTriangle() );\n\n\t}\n\n}\n\nexport const ExtendedTrianglePool = /* @__PURE__ */ new ExtendedTrianglePoolBase();\n","class _BufferStack {\n\n\tconstructor() {\n\n\t\tthis.float32Array = null;\n\t\tthis.uint16Array = null;\n\t\tthis.uint32Array = null;\n\n\t\tconst stack = [];\n\t\tlet prevBuffer = null;\n\t\tthis.setBuffer = buffer => {\n\n\t\t\tif ( prevBuffer ) {\n\n\t\t\t\tstack.push( prevBuffer );\n\n\t\t\t}\n\n\t\t\tprevBuffer = buffer;\n\t\t\tthis.float32Array = new Float32Array( buffer );\n\t\t\tthis.uint16Array = new Uint16Array( buffer );\n\t\t\tthis.uint32Array = new Uint32Array( buffer );\n\n\t\t};\n\n\t\tthis.clearBuffer = () => {\n\n\t\t\tprevBuffer = null;\n\t\t\tthis.float32Array = null;\n\t\t\tthis.uint16Array = null;\n\t\t\tthis.uint32Array = null;\n\n\t\t\tif ( stack.length !== 0 ) {\n\n\t\t\t\tthis.setBuffer( stack.pop() );\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n}\n\nexport const BufferStack = new _BufferStack();\n","import { Box3 } from 'three';\nimport { CONTAINED } from '../Constants.js';\nimport { arrayToBox } from '../../utils/ArrayBoxUtilities.js';\nimport { PrimitivePool } from '../../utils/PrimitivePool.js';\nimport { COUNT, OFFSET, LEFT_NODE, RIGHT_NODE, IS_LEAF, BOUNDING_DATA_INDEX } from '../utils/nodeBufferUtils.js';\nimport { BufferStack } from '../utils/BufferStack.js';\n\nlet _box1, _box2;\nconst boxStack = [];\nconst boxPool = /* @__PURE__ */ new PrimitivePool( () => new Box3() );\n\nexport function shapecast( bvh, root, intersectsBounds, intersectsRange, boundsTraverseOrder, byteOffset ) {\n\n\t// setup\n\t_box1 = boxPool.getPrimitive();\n\t_box2 = boxPool.getPrimitive();\n\tboxStack.push( _box1, _box2 );\n\tBufferStack.setBuffer( bvh._roots[ root ] );\n\n\tconst result = shapecastTraverse( 0, bvh.geometry, intersectsBounds, intersectsRange, boundsTraverseOrder, byteOffset );\n\n\t// cleanup\n\tBufferStack.clearBuffer();\n\tboxPool.releasePrimitive( _box1 );\n\tboxPool.releasePrimitive( _box2 );\n\tboxStack.pop();\n\tboxStack.pop();\n\n\tconst length = boxStack.length;\n\tif ( length > 0 ) {\n\n\t\t_box2 = boxStack[ length - 1 ];\n\t\t_box1 = boxStack[ length - 2 ];\n\n\t}\n\n\treturn result;\n\n}\n\nfunction shapecastTraverse(\n\tnodeIndex32,\n\tgeometry,\n\tintersectsBoundsFunc,\n\tintersectsRangeFunc,\n\tnodeScoreFunc = null,\n\tnodeIndexByteOffset = 0, // offset for unique node identifier\n\tdepth = 0\n) {\n\n\tconst { float32Array, uint16Array, uint32Array } = BufferStack;\n\tlet nodeIndex16 = nodeIndex32 * 2;\n\n\tconst isLeaf = IS_LEAF( nodeIndex16, uint16Array );\n\tif ( isLeaf ) {\n\n\t\tconst offset = OFFSET( nodeIndex32, uint32Array );\n\t\tconst count = COUNT( nodeIndex16, uint16Array );\n\t\tarrayToBox( BOUNDING_DATA_INDEX( nodeIndex32 ), float32Array, _box1 );\n\t\treturn intersectsRangeFunc( offset, count, false, depth, nodeIndexByteOffset + nodeIndex32, _box1 );\n\n\t} else {\n\n\t\tconst left = LEFT_NODE( nodeIndex32 );\n\t\tconst right = RIGHT_NODE( nodeIndex32, uint32Array );\n\t\tlet c1 = left;\n\t\tlet c2 = right;\n\n\t\tlet score1, score2;\n\t\tlet box1, box2;\n\t\tif ( nodeScoreFunc ) {\n\n\t\t\tbox1 = _box1;\n\t\t\tbox2 = _box2;\n\n\t\t\t// bounding data is not offset\n\t\t\tarrayToBox( BOUNDING_DATA_INDEX( c1 ), float32Array, box1 );\n\t\t\tarrayToBox( BOUNDING_DATA_INDEX( c2 ), float32Array, box2 );\n\n\t\t\tscore1 = nodeScoreFunc( box1 );\n\t\t\tscore2 = nodeScoreFunc( box2 );\n\n\t\t\tif ( score2 < score1 ) {\n\n\t\t\t\tc1 = right;\n\t\t\t\tc2 = left;\n\n\t\t\t\tconst temp = score1;\n\t\t\t\tscore1 = score2;\n\t\t\t\tscore2 = temp;\n\n\t\t\t\tbox1 = box2;\n\t\t\t\t// box2 is always set before use below\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Check box 1 intersection\n\t\tif ( ! box1 ) {\n\n\t\t\tbox1 = _box1;\n\t\t\tarrayToBox( BOUNDING_DATA_INDEX( c1 ), float32Array, box1 );\n\n\t\t}\n\n\t\tconst isC1Leaf = IS_LEAF( c1 * 2, uint16Array );\n\t\tconst c1Intersection = intersectsBoundsFunc( box1, isC1Leaf, score1, depth + 1, nodeIndexByteOffset + c1 );\n\n\t\tlet c1StopTraversal;\n\t\tif ( c1Intersection === CONTAINED ) {\n\n\t\t\tconst offset = getLeftOffset( c1 );\n\t\t\tconst end = getRightEndOffset( c1 );\n\t\t\tconst count = end - offset;\n\n\t\t\tc1StopTraversal = intersectsRangeFunc( offset, count, true, depth + 1, nodeIndexByteOffset + c1, box1 );\n\n\t\t} else {\n\n\t\t\tc1StopTraversal =\n\t\t\t\tc1Intersection &&\n\t\t\t\tshapecastTraverse(\n\t\t\t\t\tc1,\n\t\t\t\t\tgeometry,\n\t\t\t\t\tintersectsBoundsFunc,\n\t\t\t\t\tintersectsRangeFunc,\n\t\t\t\t\tnodeScoreFunc,\n\t\t\t\t\tnodeIndexByteOffset,\n\t\t\t\t\tdepth + 1\n\t\t\t\t);\n\n\t\t}\n\n\t\tif ( c1StopTraversal ) return true;\n\n\t\t// Check box 2 intersection\n\t\t// cached box2 will have been overwritten by previous traversal\n\t\tbox2 = _box2;\n\t\tarrayToBox( BOUNDING_DATA_INDEX( c2 ), float32Array, box2 );\n\n\t\tconst isC2Leaf = IS_LEAF( c2 * 2, uint16Array );\n\t\tconst c2Intersection = intersectsBoundsFunc( box2, isC2Leaf, score2, depth + 1, nodeIndexByteOffset + c2 );\n\n\t\tlet c2StopTraversal;\n\t\tif ( c2Intersection === CONTAINED ) {\n\n\t\t\tconst offset = getLeftOffset( c2 );\n\t\t\tconst end = getRightEndOffset( c2 );\n\t\t\tconst count = end - offset;\n\n\t\t\tc2StopTraversal = intersectsRangeFunc( offset, count, true, depth + 1, nodeIndexByteOffset + c2, box2 );\n\n\t\t} else {\n\n\t\t\tc2StopTraversal =\n\t\t\t\tc2Intersection &&\n\t\t\t\tshapecastTraverse(\n\t\t\t\t\tc2,\n\t\t\t\t\tgeometry,\n\t\t\t\t\tintersectsBoundsFunc,\n\t\t\t\t\tintersectsRangeFunc,\n\t\t\t\t\tnodeScoreFunc,\n\t\t\t\t\tnodeIndexByteOffset,\n\t\t\t\t\tdepth + 1\n\t\t\t\t);\n\n\t\t}\n\n\t\tif ( c2StopTraversal ) return true;\n\n\t\treturn false;\n\n\t\t// Define these inside the function so it has access to the local variables needed\n\t\t// when converting to the buffer equivalents\n\t\tfunction getLeftOffset( nodeIndex32 ) {\n\n\t\t\tconst { uint16Array, uint32Array } = BufferStack;\n\t\t\tlet nodeIndex16 = nodeIndex32 * 2;\n\n\t\t\t// traverse until we find a leaf\n\t\t\twhile ( ! IS_LEAF( nodeIndex16, uint16Array ) ) {\n\n\t\t\t\tnodeIndex32 = LEFT_NODE( nodeIndex32 );\n\t\t\t\tnodeIndex16 = nodeIndex32 * 2;\n\n\t\t\t}\n\n\t\t\treturn OFFSET( nodeIndex32, uint32Array );\n\n\t\t}\n\n\t\tfunction getRightEndOffset( nodeIndex32 ) {\n\n\t\t\tconst { uint16Array, uint32Array } = BufferStack;\n\t\t\tlet nodeIndex16 = nodeIndex32 * 2;\n\n\t\t\t// traverse until we find a leaf\n\t\t\twhile ( ! IS_LEAF( nodeIndex16, uint16Array ) ) {\n\n\t\t\t\t// adjust offset to point to the right node\n\t\t\t\tnodeIndex32 = RIGHT_NODE( nodeIndex32, uint32Array );\n\t\t\t\tnodeIndex16 = nodeIndex32 * 2;\n\n\t\t\t}\n\n\t\t\t// return the end offset of the triangle range\n\t\t\treturn OFFSET( nodeIndex32, uint32Array ) + COUNT( nodeIndex16, uint16Array );\n\n\t\t}\n\n\t}\n\n}\n","import { Vector3 } from 'three';\n\nconst temp = /* @__PURE__ */ new Vector3();\nconst temp1 = /* @__PURE__ */ new Vector3();\n\nexport function closestPointToPoint(\n\tbvh,\n\tpoint,\n\ttarget = { },\n\tminThreshold = 0,\n\tmaxThreshold = Infinity,\n) {\n\n\t// early out if under minThreshold\n\t// skip checking if over maxThreshold\n\t// set minThreshold = maxThreshold to quickly check if a point is within a threshold\n\t// returns Infinity if no value found\n\tconst minThresholdSq = minThreshold * minThreshold;\n\tconst maxThresholdSq = maxThreshold * maxThreshold;\n\tlet closestDistanceSq = Infinity;\n\tlet closestDistanceTriIndex = null;\n\tbvh.shapecast(\n\n\t\t{\n\n\t\t\tboundsTraverseOrder: box => {\n\n\t\t\t\ttemp.copy( point ).clamp( box.min, box.max );\n\t\t\t\treturn temp.distanceToSquared( point );\n\n\t\t\t},\n\n\t\t\tintersectsBounds: ( box, isLeaf, score ) => {\n\n\t\t\t\treturn score < closestDistanceSq && score < maxThresholdSq;\n\n\t\t\t},\n\n\t\t\tintersectsTriangle: ( tri, triIndex ) => {\n\n\t\t\t\ttri.closestPointToPoint( point, temp );\n\t\t\t\tconst distSq = point.distanceToSquared( temp );\n\t\t\t\tif ( distSq < closestDistanceSq ) {\n\n\t\t\t\t\ttemp1.copy( temp );\n\t\t\t\t\tclosestDistanceSq = distSq;\n\t\t\t\t\tclosestDistanceTriIndex = triIndex;\n\n\t\t\t\t}\n\n\t\t\t\tif ( distSq < minThresholdSq ) {\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t}\n\n\t);\n\n\tif ( closestDistanceSq === Infinity ) return null;\n\n\tconst closestDistance = Math.sqrt( closestDistanceSq );\n\n\tif ( ! target.point ) target.point = temp1.clone();\n\telse target.point.copy( temp1 );\n\ttarget.distance = closestDistance,\n\ttarget.faceIndex = closestDistanceTriIndex;\n\n\treturn target;\n\n}\n","import { Vector3, Vector2, Triangle, DoubleSide, BackSide, REVISION } from 'three';\n\nconst IS_GT_REVISION_169 = parseInt( REVISION ) >= 169;\n\n// Ripped and modified From THREE.js Mesh raycast\n// https://github.com/mrdoob/three.js/blob/0aa87c999fe61e216c1133fba7a95772b503eddf/src/objects/Mesh.js#L115\nconst _vA = /* @__PURE__ */ new Vector3();\nconst _vB = /* @__PURE__ */ new Vector3();\nconst _vC = /* @__PURE__ */ new Vector3();\n\nconst _uvA = /* @__PURE__ */ new Vector2();\nconst _uvB = /* @__PURE__ */ new Vector2();\nconst _uvC = /* @__PURE__ */ new Vector2();\n\nconst _normalA = /* @__PURE__ */ new Vector3();\nconst _normalB = /* @__PURE__ */ new Vector3();\nconst _normalC = /* @__PURE__ */ new Vector3();\n\nconst _intersectionPoint = /* @__PURE__ */ new Vector3();\nfunction checkIntersection( ray, pA, pB, pC, point, side, near, far ) {\n\n\tlet intersect;\n\tif ( side === BackSide ) {\n\n\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t} else {\n\n\t\tintersect = ray.intersectTriangle( pA, pB, pC, side !== DoubleSide, point );\n\n\t}\n\n\tif ( intersect === null ) return null;\n\n\tconst distance = ray.origin.distanceTo( point );\n\n\tif ( distance < near || distance > far ) return null;\n\n\treturn {\n\n\t\tdistance: distance,\n\t\tpoint: point.clone(),\n\n\t};\n\n}\n\nfunction checkBufferGeometryIntersection( ray, position, normal, uv, uv1, a, b, c, side, near, far ) {\n\n\t_vA.fromBufferAttribute( position, a );\n\t_vB.fromBufferAttribute( position, b );\n\t_vC.fromBufferAttribute( position, c );\n\n\tconst intersection = checkIntersection( ray, _vA, _vB, _vC, _intersectionPoint, side, near, far );\n\n\tif ( intersection ) {\n\n\t\tconst barycoord = new Vector3();\n\t\tTriangle.getBarycoord( _intersectionPoint, _vA, _vB, _vC, barycoord );\n\n\t\tif ( uv ) {\n\n\t\t\t_uvA.fromBufferAttribute( uv, a );\n\t\t\t_uvB.fromBufferAttribute( uv, b );\n\t\t\t_uvC.fromBufferAttribute( uv, c );\n\n\t\t\tintersection.uv = Triangle.getInterpolation( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t}\n\n\t\tif ( uv1 ) {\n\n\t\t\t_uvA.fromBufferAttribute( uv1, a );\n\t\t\t_uvB.fromBufferAttribute( uv1, b );\n\t\t\t_uvC.fromBufferAttribute( uv1, c );\n\n\t\t\tintersection.uv1 = Triangle.getInterpolation( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t}\n\n\t\tif ( normal ) {\n\n\t\t\t_normalA.fromBufferAttribute( normal, a );\n\t\t\t_normalB.fromBufferAttribute( normal, b );\n\t\t\t_normalC.fromBufferAttribute( normal, c );\n\n\t\t\tintersection.normal = Triangle.getInterpolation( _intersectionPoint, _vA, _vB, _vC, _normalA, _normalB, _normalC, new Vector3() );\n\t\t\tif ( intersection.normal.dot( ray.direction ) > 0 ) {\n\n\t\t\t\tintersection.normal.multiplyScalar( - 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst face = {\n\t\t\ta: a,\n\t\t\tb: b,\n\t\t\tc: c,\n\t\t\tnormal: new Vector3(),\n\t\t\tmaterialIndex: 0\n\t\t};\n\n\t\tTriangle.getNormal( _vA, _vB, _vC, face.normal );\n\n\t\tintersection.face = face;\n\t\tintersection.faceIndex = a;\n\n\t\tif ( IS_GT_REVISION_169 ) {\n\n\t\t\tintersection.barycoord = barycoord;\n\n\t\t}\n\n\t}\n\n\treturn intersection;\n\n}\n\n// https://github.com/mrdoob/three.js/blob/0aa87c999fe61e216c1133fba7a95772b503eddf/src/objects/Mesh.js#L258\nfunction intersectTri( geo, side, ray, tri, intersections, near, far ) {\n\n\tconst triOffset = tri * 3;\n\tlet a = triOffset + 0;\n\tlet b = triOffset + 1;\n\tlet c = triOffset + 2;\n\n\tconst index = geo.index;\n\tif ( geo.index ) {\n\n\t\ta = index.getX( a );\n\t\tb = index.getX( b );\n\t\tc = index.getX( c );\n\n\t}\n\n\tconst { position, normal, uv, uv1 } = geo.attributes;\n\tconst intersection = checkBufferGeometryIntersection( ray, position, normal, uv, uv1, a, b, c, side, near, far );\n\n\tif ( intersection ) {\n\n\t\tintersection.faceIndex = tri;\n\t\tif ( intersections ) intersections.push( intersection );\n\t\treturn intersection;\n\n\t}\n\n\treturn null;\n\n}\n\nexport { intersectTri };\n","\nimport { Vector2, Vector3, Triangle } from 'three';\n\n// sets the vertices of triangle `tri` with the 3 vertices after i\nexport function setTriangle( tri, i, index, pos ) {\n\n\tconst ta = tri.a;\n\tconst tb = tri.b;\n\tconst tc = tri.c;\n\n\tlet i0 = i;\n\tlet i1 = i + 1;\n\tlet i2 = i + 2;\n\tif ( index ) {\n\n\t\ti0 = index.getX( i0 );\n\t\ti1 = index.getX( i1 );\n\t\ti2 = index.getX( i2 );\n\n\t}\n\n\tta.x = pos.getX( i0 );\n\tta.y = pos.getY( i0 );\n\tta.z = pos.getZ( i0 );\n\n\ttb.x = pos.getX( i1 );\n\ttb.y = pos.getY( i1 );\n\ttb.z = pos.getZ( i1 );\n\n\ttc.x = pos.getX( i2 );\n\ttc.y = pos.getY( i2 );\n\ttc.z = pos.getZ( i2 );\n\n}\n\nconst tempV1 = /* @__PURE__ */ new Vector3();\nconst tempV2 = /* @__PURE__ */ new Vector3();\nconst tempV3 = /* @__PURE__ */ new Vector3();\nconst tempUV1 = /* @__PURE__ */ new Vector2();\nconst tempUV2 = /* @__PURE__ */ new Vector2();\nconst tempUV3 = /* @__PURE__ */ new Vector2();\n\nexport function getTriangleHitPointInfo( point, geometry, triangleIndex, target ) {\n\n\tconst indices = geometry.getIndex().array;\n\tconst positions = geometry.getAttribute( 'position' );\n\tconst uvs = geometry.getAttribute( 'uv' );\n\n\tconst a = indices[ triangleIndex * 3 ];\n\tconst b = indices[ triangleIndex * 3 + 1 ];\n\tconst c = indices[ triangleIndex * 3 + 2 ];\n\n\ttempV1.fromBufferAttribute( positions, a );\n\ttempV2.fromBufferAttribute( positions, b );\n\ttempV3.fromBufferAttribute( positions, c );\n\n\t// find the associated material index\n\tlet materialIndex = 0;\n\tconst groups = geometry.groups;\n\tconst firstVertexIndex = triangleIndex * 3;\n\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\t\tconst { start, count } = group;\n\t\tif ( firstVertexIndex >= start && firstVertexIndex < start + count ) {\n\n\t\t\tmaterialIndex = group.materialIndex;\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\t// extract barycoord\n\tconst barycoord = target && target.barycoord ? target.barycoord : new Vector3();\n\tTriangle.getBarycoord( point, tempV1, tempV2, tempV3, barycoord );\n\n\t// extract uvs\n\tlet uv = null;\n\tif ( uvs ) {\n\n\t\ttempUV1.fromBufferAttribute( uvs, a );\n\t\ttempUV2.fromBufferAttribute( uvs, b );\n\t\ttempUV3.fromBufferAttribute( uvs, c );\n\n\t\tif ( target && target.uv ) uv = target.uv;\n\t\telse uv = new Vector2();\n\n\t\tTriangle.getInterpolation( point, tempV1, tempV2, tempV3, tempUV1, tempUV2, tempUV3, uv );\n\n\t}\n\n\t// adjust the provided target or create a new one\n\tif ( target ) {\n\n\t\tif ( ! target.face ) target.face = { };\n\t\ttarget.face.a = a;\n\t\ttarget.face.b = b;\n\t\ttarget.face.c = c;\n\t\ttarget.face.materialIndex = materialIndex;\n\t\tif ( ! target.face.normal ) target.face.normal = new Vector3();\n\t\tTriangle.getNormal( tempV1, tempV2, tempV3, target.face.normal );\n\n\t\tif ( uv ) target.uv = uv;\n\t\ttarget.barycoord = barycoord;\n\n\t\treturn target;\n\n\t} else {\n\n\t\treturn {\n\t\t\tface: {\n\t\t\t\ta: a,\n\t\t\t\tb: b,\n\t\t\t\tc: c,\n\t\t\t\tmaterialIndex: materialIndex,\n\t\t\t\tnormal: Triangle.getNormal( tempV1, tempV2, tempV3, new Vector3() )\n\t\t\t},\n\t\t\tuv: uv,\n\t\t\tbarycoord: barycoord,\n\t\t};\n\n\t}\n\n}\n","import { intersectTri } from '../../utils/ThreeRayIntersectUtilities.js';\nimport { setTriangle } from '../../utils/TriangleUtilities.js';\n\n/*************************************************************/\n/* This file is generated from \"iterationUtils.template.js\". */\n/*************************************************************/\n/* eslint-disable indent */\n\nfunction intersectTris( bvh, side, ray, offset, count, intersections, near, far ) {\n\n\tconst { geometry, _indirectBuffer } = bvh;\n\tfor ( let i = offset, end = offset + count; i < end; i ++ ) {\n\n\n\t\tintersectTri( geometry, side, ray, i, intersections, near, far );\n\n\n\t}\n\n}\n\nfunction intersectClosestTri( bvh, side, ray, offset, count, near, far ) {\n\n\tconst { geometry, _indirectBuffer } = bvh;\n\tlet dist = Infinity;\n\tlet res = null;\n\tfor ( let i = offset, end = offset + count; i < end; i ++ ) {\n\n\t\tlet intersection;\n\n\t\tintersection = intersectTri( geometry, side, ray, i, null, near, far );\n\n\n\t\tif ( intersection && intersection.distance < dist ) {\n\n\t\t\tres = intersection;\n\t\t\tdist = intersection.distance;\n\n\t\t}\n\n\t}\n\n\treturn res;\n\n}\n\nfunction iterateOverTriangles(\n\toffset,\n\tcount,\n\tbvh,\n\tintersectsTriangleFunc,\n\tcontained,\n\tdepth,\n\ttriangle\n) {\n\n\tconst { geometry } = bvh;\n\tconst { index } = geometry;\n\tconst pos = geometry.attributes.position;\n\tfor ( let i = offset, l = count + offset; i < l; i ++ ) {\n\n\t\tlet tri;\n\n\t\ttri = i;\n\n\t\tsetTriangle( triangle, tri * 3, index, pos );\n\t\ttriangle.needsUpdate = true;\n\n\t\tif ( intersectsTriangleFunc( triangle, tri, contained, depth ) ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t}\n\n\treturn false;\n\n}\n\nexport { intersectClosestTri, intersectTris, iterateOverTriangles };\n","import { IS_LEAFNODE_FLAG } from '../Constants.js';\n\n/****************************************************/\n/* This file is generated from \"refit.template.js\". */\n/****************************************************/\n\nfunction refit( bvh, nodeIndices = null ) {\n\n\tif ( nodeIndices && Array.isArray( nodeIndices ) ) {\n\n\t\tnodeIndices = new Set( nodeIndices );\n\n\t}\n\n\tconst geometry = bvh.geometry;\n\tconst indexArr = geometry.index ? geometry.index.array : null;\n\tconst posAttr = geometry.attributes.position;\n\n\tlet buffer, uint32Array, uint16Array, float32Array;\n\tlet byteOffset = 0;\n\tconst roots = bvh._roots;\n\tfor ( let i = 0, l = roots.length; i < l; i ++ ) {\n\n\t\tbuffer = roots[ i ];\n\t\tuint32Array = new Uint32Array( buffer );\n\t\tuint16Array = new Uint16Array( buffer );\n\t\tfloat32Array = new Float32Array( buffer );\n\n\t\t_traverse( 0, byteOffset );\n\t\tbyteOffset += buffer.byteLength;\n\n\t}\n\n\tfunction _traverse( node32Index, byteOffset, force = false ) {\n\n\t\tconst node16Index = node32Index * 2;\n\t\tconst isLeaf = uint16Array[ node16Index + 15 ] === IS_LEAFNODE_FLAG;\n\t\tif ( isLeaf ) {\n\n\t\t\tconst offset = uint32Array[ node32Index + 6 ];\n\t\t\tconst count = uint16Array[ node16Index + 14 ];\n\n\t\t\tlet minx = Infinity;\n\t\t\tlet miny = Infinity;\n\t\t\tlet minz = Infinity;\n\t\t\tlet maxx = - Infinity;\n\t\t\tlet maxy = - Infinity;\n\t\t\tlet maxz = - Infinity;\n\n\n\t\t\tfor ( let i = 3 * offset, l = 3 * ( offset + count ); i < l; i ++ ) {\n\n\t\t\t\tlet index = indexArr[ i ];\n\t\t\t\tconst x = posAttr.getX( index );\n\t\t\t\tconst y = posAttr.getY( index );\n\t\t\t\tconst z = posAttr.getZ( index );\n\n\t\t\t\tif ( x < minx ) minx = x;\n\t\t\t\tif ( x > maxx ) maxx = x;\n\n\t\t\t\tif ( y < miny ) miny = y;\n\t\t\t\tif ( y > maxy ) maxy = y;\n\n\t\t\t\tif ( z < minz ) minz = z;\n\t\t\t\tif ( z > maxz ) maxz = z;\n\n\t\t\t}\n\n\n\t\t\tif (\n\t\t\t\tfloat32Array[ node32Index + 0 ] !== minx ||\n\t\t\t\tfloat32Array[ node32Index + 1 ] !== miny ||\n\t\t\t\tfloat32Array[ node32Index + 2 ] !== minz ||\n\n\t\t\t\tfloat32Array[ node32Index + 3 ] !== maxx ||\n\t\t\t\tfloat32Array[ node32Index + 4 ] !== maxy ||\n\t\t\t\tfloat32Array[ node32Index + 5 ] !== maxz\n\t\t\t) {\n\n\t\t\t\tfloat32Array[ node32Index + 0 ] = minx;\n\t\t\t\tfloat32Array[ node32Index + 1 ] = miny;\n\t\t\t\tfloat32Array[ node32Index + 2 ] = minz;\n\n\t\t\t\tfloat32Array[ node32Index + 3 ] = maxx;\n\t\t\t\tfloat32Array[ node32Index + 4 ] = maxy;\n\t\t\t\tfloat32Array[ node32Index + 5 ] = maxz;\n\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst left = node32Index + 8;\n\t\t\tconst right = uint32Array[ node32Index + 6 ];\n\n\t\t\t// the identifying node indices provided by the shapecast function include offsets of all\n\t\t\t// root buffers to guarantee they're unique between roots so offset left and right indices here.\n\t\t\tconst offsetLeft = left + byteOffset;\n\t\t\tconst offsetRight = right + byteOffset;\n\t\t\tlet forceChildren = force;\n\t\t\tlet includesLeft = false;\n\t\t\tlet includesRight = false;\n\n\t\t\tif ( nodeIndices ) {\n\n\t\t\t\t// if we see that neither the left or right child are included in the set that need to be updated\n\t\t\t\t// then we assume that all children need to be updated.\n\t\t\t\tif ( ! forceChildren ) {\n\n\t\t\t\t\tincludesLeft = nodeIndices.has( offsetLeft );\n\t\t\t\t\tincludesRight = nodeIndices.has( offsetRight );\n\t\t\t\t\tforceChildren = ! includesLeft && ! includesRight;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tincludesLeft = true;\n\t\t\t\tincludesRight = true;\n\n\t\t\t}\n\n\t\t\tconst traverseLeft = forceChildren || includesLeft;\n\t\t\tconst traverseRight = forceChildren || includesRight;\n\n\t\t\tlet leftChange = false;\n\t\t\tif ( traverseLeft ) {\n\n\t\t\t\tleftChange = _traverse( left, byteOffset, forceChildren );\n\n\t\t\t}\n\n\t\t\tlet rightChange = false;\n\t\t\tif ( traverseRight ) {\n\n\t\t\t\trightChange = _traverse( right, byteOffset, forceChildren );\n\n\t\t\t}\n\n\t\t\tconst didChange = leftChange || rightChange;\n\t\t\tif ( didChange ) {\n\n\t\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\tconst lefti = left + i;\n\t\t\t\t\tconst righti = right + i;\n\t\t\t\t\tconst minLeftValue = float32Array[ lefti ];\n\t\t\t\t\tconst maxLeftValue = float32Array[ lefti + 3 ];\n\t\t\t\t\tconst minRightValue = float32Array[ righti ];\n\t\t\t\t\tconst maxRightValue = float32Array[ righti + 3 ];\n\n\t\t\t\t\tfloat32Array[ node32Index + i ] = minLeftValue < minRightValue ? minLeftValue : minRightValue;\n\t\t\t\t\tfloat32Array[ node32Index + i + 3 ] = maxLeftValue > maxRightValue ? maxLeftValue : maxRightValue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn didChange;\n\n\t\t}\n\n\t}\n\n}\n\nexport { refit };\n","/**\n * This function performs intersection tests similar to Ray.intersectBox in three.js,\n * with the difference that the box values are read from an array to improve performance.\n */\nexport function intersectRay( nodeIndex32, array, ray, near, far ) {\n\n\tlet tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\tconst invdirx = 1 / ray.direction.x,\n\t\tinvdiry = 1 / ray.direction.y,\n\t\tinvdirz = 1 / ray.direction.z;\n\n\tconst ox = ray.origin.x;\n\tconst oy = ray.origin.y;\n\tconst oz = ray.origin.z;\n\n\tlet minx = array[ nodeIndex32 ];\n\tlet maxx = array[ nodeIndex32 + 3 ];\n\n\tlet miny = array[ nodeIndex32 + 1 ];\n\tlet maxy = array[ nodeIndex32 + 3 + 1 ];\n\n\tlet minz = array[ nodeIndex32 + 2 ];\n\tlet maxz = array[ nodeIndex32 + 3 + 2 ];\n\n\tif ( invdirx >= 0 ) {\n\n\t\ttmin = ( minx - ox ) * invdirx;\n\t\ttmax = ( maxx - ox ) * invdirx;\n\n\t} else {\n\n\t\ttmin = ( maxx - ox ) * invdirx;\n\t\ttmax = ( minx - ox ) * invdirx;\n\n\t}\n\n\tif ( invdiry >= 0 ) {\n\n\t\ttymin = ( miny - oy ) * invdiry;\n\t\ttymax = ( maxy - oy ) * invdiry;\n\n\t} else {\n\n\t\ttymin = ( maxy - oy ) * invdiry;\n\t\ttymax = ( miny - oy ) * invdiry;\n\n\t}\n\n\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return false;\n\n\tif ( tymin > tmin || isNaN( tmin ) ) tmin = tymin;\n\n\tif ( tymax < tmax || isNaN( tmax ) ) tmax = tymax;\n\n\tif ( invdirz >= 0 ) {\n\n\t\ttzmin = ( minz - oz ) * invdirz;\n\t\ttzmax = ( maxz - oz ) * invdirz;\n\n\t} else {\n\n\t\ttzmin = ( maxz - oz ) * invdirz;\n\t\ttzmax = ( minz - oz ) * invdirz;\n\n\t}\n\n\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return false;\n\n\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t//return point closest to the ray (positive side)\n\n\treturn tmin <= far && tmax >= near;\n\n}\n","import { intersectTri } from '../../utils/ThreeRayIntersectUtilities.js';\nimport { setTriangle } from '../../utils/TriangleUtilities.js';\n\n/*************************************************************/\n/* This file is generated from \"iterationUtils.template.js\". */\n/*************************************************************/\n/* eslint-disable indent */\n\nfunction intersectTris_indirect( bvh, side, ray, offset, count, intersections, near, far ) {\n\n\tconst { geometry, _indirectBuffer } = bvh;\n\tfor ( let i = offset, end = offset + count; i < end; i ++ ) {\n\n\t\tlet vi = _indirectBuffer ? _indirectBuffer[ i ] : i;\n\t\tintersectTri( geometry, side, ray, vi, intersections, near, far );\n\n\n\t}\n\n}\n\nfunction intersectClosestTri_indirect( bvh, side, ray, offset, count, near, far ) {\n\n\tconst { geometry, _indirectBuffer } = bvh;\n\tlet dist = Infinity;\n\tlet res = null;\n\tfor ( let i = offset, end = offset + count; i < end; i ++ ) {\n\n\t\tlet intersection;\n\t\tintersection = intersectTri( geometry, side, ray, _indirectBuffer ? _indirectBuffer[ i ] : i, null, near, far );\n\n\n\t\tif ( intersection && intersection.distance < dist ) {\n\n\t\t\tres = intersection;\n\t\t\tdist = intersection.distance;\n\n\t\t}\n\n\t}\n\n\treturn res;\n\n}\n\nfunction iterateOverTriangles_indirect(\n\toffset,\n\tcount,\n\tbvh,\n\tintersectsTriangleFunc,\n\tcontained,\n\tdepth,\n\ttriangle\n) {\n\n\tconst { geometry } = bvh;\n\tconst { index } = geometry;\n\tconst pos = geometry.attributes.position;\n\tfor ( let i = offset, l = count + offset; i < l; i ++ ) {\n\n\t\tlet tri;\n\t\ttri = bvh.resolveTriangleIndex( i );\n\n\t\tsetTriangle( triangle, tri * 3, index, pos );\n\t\ttriangle.needsUpdate = true;\n\n\t\tif ( intersectsTriangleFunc( triangle, tri, contained, depth ) ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t}\n\n\treturn false;\n\n}\n\nexport { intersectClosestTri_indirect, intersectTris_indirect, iterateOverTriangles_indirect };\n","import { intersectRay } from '../utils/intersectUtils.js';\nimport { IS_LEAF, OFFSET, COUNT, LEFT_NODE, RIGHT_NODE } from '../utils/nodeBufferUtils.js';\nimport { BufferStack } from '../utils/BufferStack.js';\nimport { intersectTris } from '../utils/iterationUtils.generated.js';\nimport '../utils/iterationUtils_indirect.generated.js';\n\n/******************************************************/\n/* This file is generated from \"raycast.template.js\". */\n/******************************************************/\n\nfunction raycast( bvh, root, side, ray, intersects, near, far ) {\n\n\tBufferStack.setBuffer( bvh._roots[ root ] );\n\t_raycast( 0, bvh, side, ray, intersects, near, far );\n\tBufferStack.clearBuffer();\n\n}\n\nfunction _raycast( nodeIndex32, bvh, side, ray, intersects, near, far ) {\n\n\tconst { float32Array, uint16Array, uint32Array } = BufferStack;\n\tconst nodeIndex16 = nodeIndex32 * 2;\n\tconst isLeaf = IS_LEAF( nodeIndex16, uint16Array );\n\tif ( isLeaf ) {\n\n\t\tconst offset = OFFSET( nodeIndex32, uint32Array );\n\t\tconst count = COUNT( nodeIndex16, uint16Array );\n\n\n\t\tintersectTris( bvh, side, ray, offset, count, intersects, near, far );\n\n\n\t} else {\n\n\t\tconst leftIndex = LEFT_NODE( nodeIndex32 );\n\t\tif ( intersectRay( leftIndex, float32Array, ray, near, far ) ) {\n\n\t\t\t_raycast( leftIndex, bvh, side, ray, intersects, near, far );\n\n\t\t}\n\n\t\tconst rightIndex = RIGHT_NODE( nodeIndex32, uint32Array );\n\t\tif ( intersectRay( rightIndex, float32Array, ray, near, far ) ) {\n\n\t\t\t_raycast( rightIndex, bvh, side, ray, intersects, near, far );\n\n\t\t}\n\n\t}\n\n}\n\nexport { raycast };\n","import { IS_LEAF, OFFSET, COUNT, SPLIT_AXIS, LEFT_NODE, RIGHT_NODE } from '../utils/nodeBufferUtils.js';\nimport { BufferStack } from '../utils/BufferStack.js';\nimport { intersectRay } from '../utils/intersectUtils.js';\nimport { intersectClosestTri } from '../utils/iterationUtils.generated.js';\nimport '../utils/iterationUtils_indirect.generated.js';\n\n/***********************************************************/\n/* This file is generated from \"raycastFirst.template.js\". */\n/***********************************************************/\n\nconst _xyzFields = [ 'x', 'y', 'z' ];\n\nfunction raycastFirst( bvh, root, side, ray, near, far ) {\n\n\tBufferStack.setBuffer( bvh._roots[ root ] );\n\tconst result = _raycastFirst( 0, bvh, side, ray, near, far );\n\tBufferStack.clearBuffer();\n\n\treturn result;\n\n}\n\nfunction _raycastFirst( nodeIndex32, bvh, side, ray, near, far ) {\n\n\tconst { float32Array, uint16Array, uint32Array } = BufferStack;\n\tlet nodeIndex16 = nodeIndex32 * 2;\n\n\tconst isLeaf = IS_LEAF( nodeIndex16, uint16Array );\n\tif ( isLeaf ) {\n\n\t\tconst offset = OFFSET( nodeIndex32, uint32Array );\n\t\tconst count = COUNT( nodeIndex16, uint16Array );\n\n\n\t\t// eslint-disable-next-line no-unreachable\n\t\treturn intersectClosestTri( bvh, side, ray, offset, count, near, far );\n\n\n\t} else {\n\n\t\t// consider the position of the split plane with respect to the oncoming ray; whichever direction\n\t\t// the ray is coming from, look for an intersection among that side of the tree first\n\t\tconst splitAxis = SPLIT_AXIS( nodeIndex32, uint32Array );\n\t\tconst xyzAxis = _xyzFields[ splitAxis ];\n\t\tconst rayDir = ray.direction[ xyzAxis ];\n\t\tconst leftToRight = rayDir >= 0;\n\n\t\t// c1 is the child to check first\n\t\tlet c1, c2;\n\t\tif ( leftToRight ) {\n\n\t\t\tc1 = LEFT_NODE( nodeIndex32 );\n\t\t\tc2 = RIGHT_NODE( nodeIndex32, uint32Array );\n\n\t\t} else {\n\n\t\t\tc1 = RIGHT_NODE( nodeIndex32, uint32Array );\n\t\t\tc2 = LEFT_NODE( nodeIndex32 );\n\n\t\t}\n\n\t\tconst c1Intersection = intersectRay( c1, float32Array, ray, near, far );\n\t\tconst c1Result = c1Intersection ? _raycastFirst( c1, bvh, side, ray, near, far ) : null;\n\n\t\t// if we got an intersection in the first node and it's closer than the second node's bounding\n\t\t// box, we don't need to consider the second node because it couldn't possibly be a better result\n\t\tif ( c1Result ) {\n\n\t\t\t// check if the point is within the second bounds\n\t\t\t// \"point\" is in the local frame of the bvh\n\t\t\tconst point = c1Result.point[ xyzAxis ];\n\t\t\tconst isOutside = leftToRight ?\n\t\t\t\tpoint <= float32Array[ c2 + splitAxis ] : // min bounding data\n\t\t\t\tpoint >= float32Array[ c2 + splitAxis + 3 ]; // max bounding data\n\n\t\t\tif ( isOutside ) {\n\n\t\t\t\treturn c1Result;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// either there was no intersection in the first node, or there could still be a closer\n\t\t// intersection in the second, so check the second node and then take the better of the two\n\t\tconst c2Intersection = intersectRay( c2, float32Array, ray, near, far );\n\t\tconst c2Result = c2Intersection ? _raycastFirst( c2, bvh, side, ray, near, far ) : null;\n\n\t\tif ( c1Result && c2Result ) {\n\n\t\t\treturn c1Result.distance <= c2Result.distance ? c1Result : c2Result;\n\n\t\t} else {\n\n\t\t\treturn c1Result || c2Result || null;\n\n\t\t}\n\n\t}\n\n}\n\nexport { raycastFirst };\n","import { Box3, Matrix4 } from 'three';\nimport { OrientedBox } from '../../math/OrientedBox.js';\nimport { ExtendedTriangle } from '../../math/ExtendedTriangle.js';\nimport { setTriangle } from '../../utils/TriangleUtilities.js';\nimport { arrayToBox } from '../../utils/ArrayBoxUtilities.js';\nimport { IS_LEAF, OFFSET, COUNT, BOUNDING_DATA_INDEX } from '../utils/nodeBufferUtils.js';\nimport { BufferStack } from '../utils/BufferStack.js';\n\n/*****************************************************************/\n/* This file is generated from \"intersectsGeometry.template.js\". */\n/*****************************************************************/\n/* eslint-disable indent */\n\nconst boundingBox = /* @__PURE__ */ new Box3();\nconst triangle = /* @__PURE__ */ new ExtendedTriangle();\nconst triangle2 = /* @__PURE__ */ new ExtendedTriangle();\nconst invertedMat = /* @__PURE__ */ new Matrix4();\n\nconst obb = /* @__PURE__ */ new OrientedBox();\nconst obb2 = /* @__PURE__ */ new OrientedBox();\n\nfunction intersectsGeometry( bvh, root, otherGeometry, geometryToBvh ) {\n\n\tBufferStack.setBuffer( bvh._roots[ root ] );\n\tconst result = _intersectsGeometry( 0, bvh, otherGeometry, geometryToBvh );\n\tBufferStack.clearBuffer();\n\n\treturn result;\n\n}\n\nfunction _intersectsGeometry( nodeIndex32, bvh, otherGeometry, geometryToBvh, cachedObb = null ) {\n\n\tconst { float32Array, uint16Array, uint32Array } = BufferStack;\n\tlet nodeIndex16 = nodeIndex32 * 2;\n\n\tif ( cachedObb === null ) {\n\n\t\tif ( ! otherGeometry.boundingBox ) {\n\n\t\t\totherGeometry.computeBoundingBox();\n\n\t\t}\n\n\t\tobb.set( otherGeometry.boundingBox.min, otherGeometry.boundingBox.max, geometryToBvh );\n\t\tcachedObb = obb;\n\n\t}\n\n\tconst isLeaf = IS_LEAF( nodeIndex16, uint16Array );\n\tif ( isLeaf ) {\n\n\t\tconst thisGeometry = bvh.geometry;\n\t\tconst thisIndex = thisGeometry.index;\n\t\tconst thisPos = thisGeometry.attributes.position;\n\n\t\tconst index = otherGeometry.index;\n\t\tconst pos = otherGeometry.attributes.position;\n\n\t\tconst offset = OFFSET( nodeIndex32, uint32Array );\n\t\tconst count = COUNT( nodeIndex16, uint16Array );\n\n\t\t// get the inverse of the geometry matrix so we can transform our triangles into the\n\t\t// geometry space we're trying to test. We assume there are fewer triangles being checked\n\t\t// here.\n\t\tinvertedMat.copy( geometryToBvh ).invert();\n\n\t\tif ( otherGeometry.boundsTree ) {\n\n\t\t\t// if there's a bounds tree\n\t\t\tarrayToBox( BOUNDING_DATA_INDEX( nodeIndex32 ), float32Array, obb2 );\n\t\t\tobb2.matrix.copy( invertedMat );\n\t\t\tobb2.needsUpdate = true;\n\n\t\t\t// TODO: use a triangle iteration function here\n\t\t\tconst res = otherGeometry.boundsTree.shapecast( {\n\n\t\t\t\tintersectsBounds: box => obb2.intersectsBox( box ),\n\n\t\t\t\tintersectsTriangle: tri => {\n\n\t\t\t\t\ttri.a.applyMatrix4( geometryToBvh );\n\t\t\t\t\ttri.b.applyMatrix4( geometryToBvh );\n\t\t\t\t\ttri.c.applyMatrix4( geometryToBvh );\n\t\t\t\t\ttri.needsUpdate = true;\n\n\n\t\t\t\t\tfor ( let i = offset * 3, l = ( count + offset ) * 3; i < l; i += 3 ) {\n\n\t\t\t\t\t\t// this triangle needs to be transformed into the current BVH coordinate frame\n\t\t\t\t\t\tsetTriangle( triangle2, i, thisIndex, thisPos );\n\t\t\t\t\t\ttriangle2.needsUpdate = true;\n\t\t\t\t\t\tif ( tri.intersectsTriangle( triangle2 ) ) {\n\n\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\treturn res;\n\n\t\t} else {\n\n\t\t\t// if we're just dealing with raw geometry\n\n\t\t\tfor ( let i = offset * 3, l = ( count + offset ) * 3; i < l; i += 3 ) {\n\n\t\t\t\t// this triangle needs to be transformed into the current BVH coordinate frame\n\t\t\t\tsetTriangle( triangle, i, thisIndex, thisPos );\n\n\n\t\t\t\ttriangle.a.applyMatrix4( invertedMat );\n\t\t\t\ttriangle.b.applyMatrix4( invertedMat );\n\t\t\t\ttriangle.c.applyMatrix4( invertedMat );\n\t\t\t\ttriangle.needsUpdate = true;\n\n\t\t\t\tfor ( let i2 = 0, l2 = index.count; i2 < l2; i2 += 3 ) {\n\n\t\t\t\t\tsetTriangle( triangle2, i2, index, pos );\n\t\t\t\t\ttriangle2.needsUpdate = true;\n\n\t\t\t\t\tif ( triangle.intersectsTriangle( triangle2 ) ) {\n\n\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\n\t\t\t}\n\n\n\t\t}\n\n\t} else {\n\n\t\tconst left = nodeIndex32 + 8;\n\t\tconst right = uint32Array[ nodeIndex32 + 6 ];\n\n\t\tarrayToBox( BOUNDING_DATA_INDEX( left ), float32Array, boundingBox );\n\t\tconst leftIntersection =\n\t\t\tcachedObb.intersectsBox( boundingBox ) &&\n\t\t\t_intersectsGeometry( left, bvh, otherGeometry, geometryToBvh, cachedObb );\n\n\t\tif ( leftIntersection ) return true;\n\n\t\tarrayToBox( BOUNDING_DATA_INDEX( right ), float32Array, boundingBox );\n\t\tconst rightIntersection =\n\t\t\tcachedObb.intersectsBox( boundingBox ) &&\n\t\t\t_intersectsGeometry( right, bvh, otherGeometry, geometryToBvh, cachedObb );\n\n\t\tif ( rightIntersection ) return true;\n\n\t\treturn false;\n\n\t}\n\n}\n\nexport { intersectsGeometry };\n","import { Matrix4, Vector3 } from 'three';\nimport { OrientedBox } from '../../math/OrientedBox.js';\nimport { setTriangle } from '../../utils/TriangleUtilities.js';\nimport { getTriCount } from '../build/geometryUtils.js';\nimport { ExtendedTrianglePool } from '../../utils/ExtendedTrianglePool.js';\n\n/*********************************************************************/\n/* This file is generated from \"closestPointToGeometry.template.js\". */\n/*********************************************************************/\n\nconst tempMatrix = /* @__PURE__ */ new Matrix4();\nconst obb = /* @__PURE__ */ new OrientedBox();\nconst obb2 = /* @__PURE__ */ new OrientedBox();\nconst temp1 = /* @__PURE__ */ new Vector3();\nconst temp2 = /* @__PURE__ */ new Vector3();\nconst temp3 = /* @__PURE__ */ new Vector3();\nconst temp4 = /* @__PURE__ */ new Vector3();\n\nfunction closestPointToGeometry(\n\tbvh,\n\totherGeometry,\n\tgeometryToBvh,\n\ttarget1 = { },\n\ttarget2 = { },\n\tminThreshold = 0,\n\tmaxThreshold = Infinity,\n) {\n\n\tif ( ! otherGeometry.boundingBox ) {\n\n\t\totherGeometry.computeBoundingBox();\n\n\t}\n\n\tobb.set( otherGeometry.boundingBox.min, otherGeometry.boundingBox.max, geometryToBvh );\n\tobb.needsUpdate = true;\n\n\tconst geometry = bvh.geometry;\n\tconst pos = geometry.attributes.position;\n\tconst index = geometry.index;\n\tconst otherPos = otherGeometry.attributes.position;\n\tconst otherIndex = otherGeometry.index;\n\tconst triangle = ExtendedTrianglePool.getPrimitive();\n\tconst triangle2 = ExtendedTrianglePool.getPrimitive();\n\n\tlet tempTarget1 = temp1;\n\tlet tempTargetDest1 = temp2;\n\tlet tempTarget2 = null;\n\tlet tempTargetDest2 = null;\n\n\tif ( target2 ) {\n\n\t\ttempTarget2 = temp3;\n\t\ttempTargetDest2 = temp4;\n\n\t}\n\n\tlet closestDistance = Infinity;\n\tlet closestDistanceTriIndex = null;\n\tlet closestDistanceOtherTriIndex = null;\n\ttempMatrix.copy( geometryToBvh ).invert();\n\tobb2.matrix.copy( tempMatrix );\n\tbvh.shapecast(\n\t\t{\n\n\t\t\tboundsTraverseOrder: box => {\n\n\t\t\t\treturn obb.distanceToBox( box );\n\n\t\t\t},\n\n\t\t\tintersectsBounds: ( box, isLeaf, score ) => {\n\n\t\t\t\tif ( score < closestDistance && score < maxThreshold ) {\n\n\t\t\t\t\t// if we know the triangles of this bounds will be intersected next then\n\t\t\t\t\t// save the bounds to use during triangle checks.\n\t\t\t\t\tif ( isLeaf ) {\n\n\t\t\t\t\t\tobb2.min.copy( box.min );\n\t\t\t\t\t\tobb2.max.copy( box.max );\n\t\t\t\t\t\tobb2.needsUpdate = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t},\n\n\t\t\tintersectsRange: ( offset, count ) => {\n\n\t\t\t\tif ( otherGeometry.boundsTree ) {\n\n\t\t\t\t\t// if the other geometry has a bvh then use the accelerated path where we use shapecast to find\n\t\t\t\t\t// the closest bounds in the other geometry to check.\n\t\t\t\t\tconst otherBvh = otherGeometry.boundsTree;\n\t\t\t\t\treturn otherBvh.shapecast( {\n\t\t\t\t\t\tboundsTraverseOrder: box => {\n\n\t\t\t\t\t\t\treturn obb2.distanceToBox( box );\n\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tintersectsBounds: ( box, isLeaf, score ) => {\n\n\t\t\t\t\t\t\treturn score < closestDistance && score < maxThreshold;\n\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tintersectsRange: ( otherOffset, otherCount ) => {\n\n\t\t\t\t\t\t\tfor ( let i2 = otherOffset, l2 = otherOffset + otherCount; i2 < l2; i2 ++ ) {\n\n\n\t\t\t\t\t\t\t\tsetTriangle( triangle2, 3 * i2, otherIndex, otherPos );\n\n\t\t\t\t\t\t\t\ttriangle2.a.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\t\t\ttriangle2.b.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\t\t\ttriangle2.c.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\t\t\ttriangle2.needsUpdate = true;\n\n\t\t\t\t\t\t\t\tfor ( let i = offset, l = offset + count; i < l; i ++ ) {\n\n\n\t\t\t\t\t\t\t\t\tsetTriangle( triangle, 3 * i, index, pos );\n\n\t\t\t\t\t\t\t\t\ttriangle.needsUpdate = true;\n\n\t\t\t\t\t\t\t\t\tconst dist = triangle.distanceToTriangle( triangle2, tempTarget1, tempTarget2 );\n\t\t\t\t\t\t\t\t\tif ( dist < closestDistance ) {\n\n\t\t\t\t\t\t\t\t\t\ttempTargetDest1.copy( tempTarget1 );\n\n\t\t\t\t\t\t\t\t\t\tif ( tempTargetDest2 ) {\n\n\t\t\t\t\t\t\t\t\t\t\ttempTargetDest2.copy( tempTarget2 );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tclosestDistance = dist;\n\t\t\t\t\t\t\t\t\t\tclosestDistanceTriIndex = i;\n\t\t\t\t\t\t\t\t\t\tclosestDistanceOtherTriIndex = i2;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// stop traversal if we find a point that's under the given threshold\n\t\t\t\t\t\t\t\t\tif ( dist < minThreshold ) {\n\n\t\t\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t},\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// If no bounds tree then we'll just check every triangle.\n\t\t\t\t\tconst triCount = getTriCount( otherGeometry );\n\t\t\t\t\tfor ( let i2 = 0, l2 = triCount; i2 < l2; i2 ++ ) {\n\n\t\t\t\t\t\tsetTriangle( triangle2, 3 * i2, otherIndex, otherPos );\n\t\t\t\t\t\ttriangle2.a.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\ttriangle2.b.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\ttriangle2.c.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\ttriangle2.needsUpdate = true;\n\n\t\t\t\t\t\tfor ( let i = offset, l = offset + count; i < l; i ++ ) {\n\n\n\t\t\t\t\t\t\tsetTriangle( triangle, 3 * i, index, pos );\n\n\t\t\t\t\t\t\ttriangle.needsUpdate = true;\n\n\t\t\t\t\t\t\tconst dist = triangle.distanceToTriangle( triangle2, tempTarget1, tempTarget2 );\n\t\t\t\t\t\t\tif ( dist < closestDistance ) {\n\n\t\t\t\t\t\t\t\ttempTargetDest1.copy( tempTarget1 );\n\n\t\t\t\t\t\t\t\tif ( tempTargetDest2 ) {\n\n\t\t\t\t\t\t\t\t\ttempTargetDest2.copy( tempTarget2 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tclosestDistance = dist;\n\t\t\t\t\t\t\t\tclosestDistanceTriIndex = i;\n\t\t\t\t\t\t\t\tclosestDistanceOtherTriIndex = i2;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// stop traversal if we find a point that's under the given threshold\n\t\t\t\t\t\t\tif ( dist < minThreshold ) {\n\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t}\n\n\t);\n\n\tExtendedTrianglePool.releasePrimitive( triangle );\n\tExtendedTrianglePool.releasePrimitive( triangle2 );\n\n\tif ( closestDistance === Infinity ) {\n\n\t\treturn null;\n\n\t}\n\n\tif ( ! target1.point ) {\n\n\t\ttarget1.point = tempTargetDest1.clone();\n\n\t} else {\n\n\t\ttarget1.point.copy( tempTargetDest1 );\n\n\t}\n\n\ttarget1.distance = closestDistance,\n\ttarget1.faceIndex = closestDistanceTriIndex;\n\n\tif ( target2 ) {\n\n\t\tif ( ! target2.point ) target2.point = tempTargetDest2.clone();\n\t\telse target2.point.copy( tempTargetDest2 );\n\t\ttarget2.point.applyMatrix4( tempMatrix );\n\t\ttempTargetDest1.applyMatrix4( tempMatrix );\n\t\ttarget2.distance = tempTargetDest1.sub( target2.point ).length();\n\t\ttarget2.faceIndex = closestDistanceOtherTriIndex;\n\n\t}\n\n\treturn target1;\n\n}\n\nexport { closestPointToGeometry };\n","import { IS_LEAFNODE_FLAG } from '../Constants.js';\n\n/****************************************************/\n/* This file is generated from \"refit.template.js\". */\n/****************************************************/\n\nfunction refit_indirect( bvh, nodeIndices = null ) {\n\n\tif ( nodeIndices && Array.isArray( nodeIndices ) ) {\n\n\t\tnodeIndices = new Set( nodeIndices );\n\n\t}\n\n\tconst geometry = bvh.geometry;\n\tconst indexArr = geometry.index ? geometry.index.array : null;\n\tconst posAttr = geometry.attributes.position;\n\n\tlet buffer, uint32Array, uint16Array, float32Array;\n\tlet byteOffset = 0;\n\tconst roots = bvh._roots;\n\tfor ( let i = 0, l = roots.length; i < l; i ++ ) {\n\n\t\tbuffer = roots[ i ];\n\t\tuint32Array = new Uint32Array( buffer );\n\t\tuint16Array = new Uint16Array( buffer );\n\t\tfloat32Array = new Float32Array( buffer );\n\n\t\t_traverse( 0, byteOffset );\n\t\tbyteOffset += buffer.byteLength;\n\n\t}\n\n\tfunction _traverse( node32Index, byteOffset, force = false ) {\n\n\t\tconst node16Index = node32Index * 2;\n\t\tconst isLeaf = uint16Array[ node16Index + 15 ] === IS_LEAFNODE_FLAG;\n\t\tif ( isLeaf ) {\n\n\t\t\tconst offset = uint32Array[ node32Index + 6 ];\n\t\t\tconst count = uint16Array[ node16Index + 14 ];\n\n\t\t\tlet minx = Infinity;\n\t\t\tlet miny = Infinity;\n\t\t\tlet minz = Infinity;\n\t\t\tlet maxx = - Infinity;\n\t\t\tlet maxy = - Infinity;\n\t\t\tlet maxz = - Infinity;\n\n\t\t\tfor ( let i = offset, l = offset + count; i < l; i ++ ) {\n\n\t\t\t\tconst t = 3 * bvh.resolveTriangleIndex( i );\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\tlet index = t + j;\n\t\t\t\t\tindex = indexArr ? indexArr[ index ] : index;\n\n\t\t\t\t\tconst x = posAttr.getX( index );\n\t\t\t\t\tconst y = posAttr.getY( index );\n\t\t\t\t\tconst z = posAttr.getZ( index );\n\n\t\t\t\t\tif ( x < minx ) minx = x;\n\t\t\t\t\tif ( x > maxx ) maxx = x;\n\n\t\t\t\t\tif ( y < miny ) miny = y;\n\t\t\t\t\tif ( y > maxy ) maxy = y;\n\n\t\t\t\t\tif ( z < minz ) minz = z;\n\t\t\t\t\tif ( z > maxz ) maxz = z;\n\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tif (\n\t\t\t\tfloat32Array[ node32Index + 0 ] !== minx ||\n\t\t\t\tfloat32Array[ node32Index + 1 ] !== miny ||\n\t\t\t\tfloat32Array[ node32Index + 2 ] !== minz ||\n\n\t\t\t\tfloat32Array[ node32Index + 3 ] !== maxx ||\n\t\t\t\tfloat32Array[ node32Index + 4 ] !== maxy ||\n\t\t\t\tfloat32Array[ node32Index + 5 ] !== maxz\n\t\t\t) {\n\n\t\t\t\tfloat32Array[ node32Index + 0 ] = minx;\n\t\t\t\tfloat32Array[ node32Index + 1 ] = miny;\n\t\t\t\tfloat32Array[ node32Index + 2 ] = minz;\n\n\t\t\t\tfloat32Array[ node32Index + 3 ] = maxx;\n\t\t\t\tfloat32Array[ node32Index + 4 ] = maxy;\n\t\t\t\tfloat32Array[ node32Index + 5 ] = maxz;\n\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst left = node32Index + 8;\n\t\t\tconst right = uint32Array[ node32Index + 6 ];\n\n\t\t\t// the identifying node indices provided by the shapecast function include offsets of all\n\t\t\t// root buffers to guarantee they're unique between roots so offset left and right indices here.\n\t\t\tconst offsetLeft = left + byteOffset;\n\t\t\tconst offsetRight = right + byteOffset;\n\t\t\tlet forceChildren = force;\n\t\t\tlet includesLeft = false;\n\t\t\tlet includesRight = false;\n\n\t\t\tif ( nodeIndices ) {\n\n\t\t\t\t// if we see that neither the left or right child are included in the set that need to be updated\n\t\t\t\t// then we assume that all children need to be updated.\n\t\t\t\tif ( ! forceChildren ) {\n\n\t\t\t\t\tincludesLeft = nodeIndices.has( offsetLeft );\n\t\t\t\t\tincludesRight = nodeIndices.has( offsetRight );\n\t\t\t\t\tforceChildren = ! includesLeft && ! includesRight;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tincludesLeft = true;\n\t\t\t\tincludesRight = true;\n\n\t\t\t}\n\n\t\t\tconst traverseLeft = forceChildren || includesLeft;\n\t\t\tconst traverseRight = forceChildren || includesRight;\n\n\t\t\tlet leftChange = false;\n\t\t\tif ( traverseLeft ) {\n\n\t\t\t\tleftChange = _traverse( left, byteOffset, forceChildren );\n\n\t\t\t}\n\n\t\t\tlet rightChange = false;\n\t\t\tif ( traverseRight ) {\n\n\t\t\t\trightChange = _traverse( right, byteOffset, forceChildren );\n\n\t\t\t}\n\n\t\t\tconst didChange = leftChange || rightChange;\n\t\t\tif ( didChange ) {\n\n\t\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\tconst lefti = left + i;\n\t\t\t\t\tconst righti = right + i;\n\t\t\t\t\tconst minLeftValue = float32Array[ lefti ];\n\t\t\t\t\tconst maxLeftValue = float32Array[ lefti + 3 ];\n\t\t\t\t\tconst minRightValue = float32Array[ righti ];\n\t\t\t\t\tconst maxRightValue = float32Array[ righti + 3 ];\n\n\t\t\t\t\tfloat32Array[ node32Index + i ] = minLeftValue < minRightValue ? minLeftValue : minRightValue;\n\t\t\t\t\tfloat32Array[ node32Index + i + 3 ] = maxLeftValue > maxRightValue ? maxLeftValue : maxRightValue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn didChange;\n\n\t\t}\n\n\t}\n\n}\n\nexport { refit_indirect };\n","import { intersectRay } from '../utils/intersectUtils.js';\nimport { IS_LEAF, OFFSET, COUNT, LEFT_NODE, RIGHT_NODE } from '../utils/nodeBufferUtils.js';\nimport { BufferStack } from '../utils/BufferStack.js';\nimport '../utils/iterationUtils.generated.js';\nimport { intersectTris_indirect } from '../utils/iterationUtils_indirect.generated.js';\n\n/******************************************************/\n/* This file is generated from \"raycast.template.js\". */\n/******************************************************/\n\nfunction raycast_indirect( bvh, root, side, ray, intersects, near, far ) {\n\n\tBufferStack.setBuffer( bvh._roots[ root ] );\n\t_raycast( 0, bvh, side, ray, intersects, near, far );\n\tBufferStack.clearBuffer();\n\n}\n\nfunction _raycast( nodeIndex32, bvh, side, ray, intersects, near, far ) {\n\n\tconst { float32Array, uint16Array, uint32Array } = BufferStack;\n\tconst nodeIndex16 = nodeIndex32 * 2;\n\tconst isLeaf = IS_LEAF( nodeIndex16, uint16Array );\n\tif ( isLeaf ) {\n\n\t\tconst offset = OFFSET( nodeIndex32, uint32Array );\n\t\tconst count = COUNT( nodeIndex16, uint16Array );\n\n\t\tintersectTris_indirect( bvh, side, ray, offset, count, intersects, near, far );\n\n\n\t} else {\n\n\t\tconst leftIndex = LEFT_NODE( nodeIndex32 );\n\t\tif ( intersectRay( leftIndex, float32Array, ray, near, far ) ) {\n\n\t\t\t_raycast( leftIndex, bvh, side, ray, intersects, near, far );\n\n\t\t}\n\n\t\tconst rightIndex = RIGHT_NODE( nodeIndex32, uint32Array );\n\t\tif ( intersectRay( rightIndex, float32Array, ray, near, far ) ) {\n\n\t\t\t_raycast( rightIndex, bvh, side, ray, intersects, near, far );\n\n\t\t}\n\n\t}\n\n}\n\nexport { raycast_indirect };\n","import { IS_LEAF, OFFSET, COUNT, SPLIT_AXIS, LEFT_NODE, RIGHT_NODE } from '../utils/nodeBufferUtils.js';\nimport { BufferStack } from '../utils/BufferStack.js';\nimport { intersectRay } from '../utils/intersectUtils.js';\nimport '../utils/iterationUtils.generated.js';\nimport { intersectClosestTri_indirect } from '../utils/iterationUtils_indirect.generated.js';\n\n/***********************************************************/\n/* This file is generated from \"raycastFirst.template.js\". */\n/***********************************************************/\n\nconst _xyzFields = [ 'x', 'y', 'z' ];\n\nfunction raycastFirst_indirect( bvh, root, side, ray, near, far ) {\n\n\tBufferStack.setBuffer( bvh._roots[ root ] );\n\tconst result = _raycastFirst( 0, bvh, side, ray, near, far );\n\tBufferStack.clearBuffer();\n\n\treturn result;\n\n}\n\nfunction _raycastFirst( nodeIndex32, bvh, side, ray, near, far ) {\n\n\tconst { float32Array, uint16Array, uint32Array } = BufferStack;\n\tlet nodeIndex16 = nodeIndex32 * 2;\n\n\tconst isLeaf = IS_LEAF( nodeIndex16, uint16Array );\n\tif ( isLeaf ) {\n\n\t\tconst offset = OFFSET( nodeIndex32, uint32Array );\n\t\tconst count = COUNT( nodeIndex16, uint16Array );\n\n\t\treturn intersectClosestTri_indirect( bvh, side, ray, offset, count, near, far );\n\n\n\t} else {\n\n\t\t// consider the position of the split plane with respect to the oncoming ray; whichever direction\n\t\t// the ray is coming from, look for an intersection among that side of the tree first\n\t\tconst splitAxis = SPLIT_AXIS( nodeIndex32, uint32Array );\n\t\tconst xyzAxis = _xyzFields[ splitAxis ];\n\t\tconst rayDir = ray.direction[ xyzAxis ];\n\t\tconst leftToRight = rayDir >= 0;\n\n\t\t// c1 is the child to check first\n\t\tlet c1, c2;\n\t\tif ( leftToRight ) {\n\n\t\t\tc1 = LEFT_NODE( nodeIndex32 );\n\t\t\tc2 = RIGHT_NODE( nodeIndex32, uint32Array );\n\n\t\t} else {\n\n\t\t\tc1 = RIGHT_NODE( nodeIndex32, uint32Array );\n\t\t\tc2 = LEFT_NODE( nodeIndex32 );\n\n\t\t}\n\n\t\tconst c1Intersection = intersectRay( c1, float32Array, ray, near, far );\n\t\tconst c1Result = c1Intersection ? _raycastFirst( c1, bvh, side, ray, near, far ) : null;\n\n\t\t// if we got an intersection in the first node and it's closer than the second node's bounding\n\t\t// box, we don't need to consider the second node because it couldn't possibly be a better result\n\t\tif ( c1Result ) {\n\n\t\t\t// check if the point is within the second bounds\n\t\t\t// \"point\" is in the local frame of the bvh\n\t\t\tconst point = c1Result.point[ xyzAxis ];\n\t\t\tconst isOutside = leftToRight ?\n\t\t\t\tpoint <= float32Array[ c2 + splitAxis ] : // min bounding data\n\t\t\t\tpoint >= float32Array[ c2 + splitAxis + 3 ]; // max bounding data\n\n\t\t\tif ( isOutside ) {\n\n\t\t\t\treturn c1Result;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// either there was no intersection in the first node, or there could still be a closer\n\t\t// intersection in the second, so check the second node and then take the better of the two\n\t\tconst c2Intersection = intersectRay( c2, float32Array, ray, near, far );\n\t\tconst c2Result = c2Intersection ? _raycastFirst( c2, bvh, side, ray, near, far ) : null;\n\n\t\tif ( c1Result && c2Result ) {\n\n\t\t\treturn c1Result.distance <= c2Result.distance ? c1Result : c2Result;\n\n\t\t} else {\n\n\t\t\treturn c1Result || c2Result || null;\n\n\t\t}\n\n\t}\n\n}\n\nexport { raycastFirst_indirect };\n","import { Box3, Matrix4 } from 'three';\nimport { OrientedBox } from '../../math/OrientedBox.js';\nimport { ExtendedTriangle } from '../../math/ExtendedTriangle.js';\nimport { setTriangle } from '../../utils/TriangleUtilities.js';\nimport { arrayToBox } from '../../utils/ArrayBoxUtilities.js';\nimport { IS_LEAF, OFFSET, COUNT, BOUNDING_DATA_INDEX } from '../utils/nodeBufferUtils.js';\nimport { BufferStack } from '../utils/BufferStack.js';\n\n/*****************************************************************/\n/* This file is generated from \"intersectsGeometry.template.js\". */\n/*****************************************************************/\n/* eslint-disable indent */\n\nconst boundingBox = /* @__PURE__ */ new Box3();\nconst triangle = /* @__PURE__ */ new ExtendedTriangle();\nconst triangle2 = /* @__PURE__ */ new ExtendedTriangle();\nconst invertedMat = /* @__PURE__ */ new Matrix4();\n\nconst obb = /* @__PURE__ */ new OrientedBox();\nconst obb2 = /* @__PURE__ */ new OrientedBox();\n\nfunction intersectsGeometry_indirect( bvh, root, otherGeometry, geometryToBvh ) {\n\n\tBufferStack.setBuffer( bvh._roots[ root ] );\n\tconst result = _intersectsGeometry( 0, bvh, otherGeometry, geometryToBvh );\n\tBufferStack.clearBuffer();\n\n\treturn result;\n\n}\n\nfunction _intersectsGeometry( nodeIndex32, bvh, otherGeometry, geometryToBvh, cachedObb = null ) {\n\n\tconst { float32Array, uint16Array, uint32Array } = BufferStack;\n\tlet nodeIndex16 = nodeIndex32 * 2;\n\n\tif ( cachedObb === null ) {\n\n\t\tif ( ! otherGeometry.boundingBox ) {\n\n\t\t\totherGeometry.computeBoundingBox();\n\n\t\t}\n\n\t\tobb.set( otherGeometry.boundingBox.min, otherGeometry.boundingBox.max, geometryToBvh );\n\t\tcachedObb = obb;\n\n\t}\n\n\tconst isLeaf = IS_LEAF( nodeIndex16, uint16Array );\n\tif ( isLeaf ) {\n\n\t\tconst thisGeometry = bvh.geometry;\n\t\tconst thisIndex = thisGeometry.index;\n\t\tconst thisPos = thisGeometry.attributes.position;\n\n\t\tconst index = otherGeometry.index;\n\t\tconst pos = otherGeometry.attributes.position;\n\n\t\tconst offset = OFFSET( nodeIndex32, uint32Array );\n\t\tconst count = COUNT( nodeIndex16, uint16Array );\n\n\t\t// get the inverse of the geometry matrix so we can transform our triangles into the\n\t\t// geometry space we're trying to test. We assume there are fewer triangles being checked\n\t\t// here.\n\t\tinvertedMat.copy( geometryToBvh ).invert();\n\n\t\tif ( otherGeometry.boundsTree ) {\n\n\t\t\t// if there's a bounds tree\n\t\t\tarrayToBox( BOUNDING_DATA_INDEX( nodeIndex32 ), float32Array, obb2 );\n\t\t\tobb2.matrix.copy( invertedMat );\n\t\t\tobb2.needsUpdate = true;\n\n\t\t\t// TODO: use a triangle iteration function here\n\t\t\tconst res = otherGeometry.boundsTree.shapecast( {\n\n\t\t\t\tintersectsBounds: box => obb2.intersectsBox( box ),\n\n\t\t\t\tintersectsTriangle: tri => {\n\n\t\t\t\t\ttri.a.applyMatrix4( geometryToBvh );\n\t\t\t\t\ttri.b.applyMatrix4( geometryToBvh );\n\t\t\t\t\ttri.c.applyMatrix4( geometryToBvh );\n\t\t\t\t\ttri.needsUpdate = true;\n\n\t\t\t\t\tfor ( let i = offset, l = count + offset; i < l; i ++ ) {\n\n\t\t\t\t\t\t// this triangle needs to be transformed into the current BVH coordinate frame\n\t\t\t\t\t\tsetTriangle( triangle2, 3 * bvh.resolveTriangleIndex( i ), thisIndex, thisPos );\n\t\t\t\t\t\ttriangle2.needsUpdate = true;\n\t\t\t\t\t\tif ( tri.intersectsTriangle( triangle2 ) ) {\n\n\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\treturn res;\n\n\t\t} else {\n\n\t\t\t// if we're just dealing with raw geometry\n\t\t\tfor ( let i = offset, l = count + offset; i < l; i ++ ) {\n\n\t\t\t\t// this triangle needs to be transformed into the current BVH coordinate frame\n\t\t\t\tconst ti = bvh.resolveTriangleIndex( i );\n\t\t\t\tsetTriangle( triangle, 3 * ti, thisIndex, thisPos );\n\n\n\t\t\t\ttriangle.a.applyMatrix4( invertedMat );\n\t\t\t\ttriangle.b.applyMatrix4( invertedMat );\n\t\t\t\ttriangle.c.applyMatrix4( invertedMat );\n\t\t\t\ttriangle.needsUpdate = true;\n\n\t\t\t\tfor ( let i2 = 0, l2 = index.count; i2 < l2; i2 += 3 ) {\n\n\t\t\t\t\tsetTriangle( triangle2, i2, index, pos );\n\t\t\t\t\ttriangle2.needsUpdate = true;\n\n\t\t\t\t\tif ( triangle.intersectsTriangle( triangle2 ) ) {\n\n\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t}\n\n\t} else {\n\n\t\tconst left = nodeIndex32 + 8;\n\t\tconst right = uint32Array[ nodeIndex32 + 6 ];\n\n\t\tarrayToBox( BOUNDING_DATA_INDEX( left ), float32Array, boundingBox );\n\t\tconst leftIntersection =\n\t\t\tcachedObb.intersectsBox( boundingBox ) &&\n\t\t\t_intersectsGeometry( left, bvh, otherGeometry, geometryToBvh, cachedObb );\n\n\t\tif ( leftIntersection ) return true;\n\n\t\tarrayToBox( BOUNDING_DATA_INDEX( right ), float32Array, boundingBox );\n\t\tconst rightIntersection =\n\t\t\tcachedObb.intersectsBox( boundingBox ) &&\n\t\t\t_intersectsGeometry( right, bvh, otherGeometry, geometryToBvh, cachedObb );\n\n\t\tif ( rightIntersection ) return true;\n\n\t\treturn false;\n\n\t}\n\n}\n\nexport { intersectsGeometry_indirect };\n","import { Matrix4, Vector3 } from 'three';\nimport { OrientedBox } from '../../math/OrientedBox.js';\nimport { setTriangle } from '../../utils/TriangleUtilities.js';\nimport { getTriCount } from '../build/geometryUtils.js';\nimport { ExtendedTrianglePool } from '../../utils/ExtendedTrianglePool.js';\n\n/*********************************************************************/\n/* This file is generated from \"closestPointToGeometry.template.js\". */\n/*********************************************************************/\n\nconst tempMatrix = /* @__PURE__ */ new Matrix4();\nconst obb = /* @__PURE__ */ new OrientedBox();\nconst obb2 = /* @__PURE__ */ new OrientedBox();\nconst temp1 = /* @__PURE__ */ new Vector3();\nconst temp2 = /* @__PURE__ */ new Vector3();\nconst temp3 = /* @__PURE__ */ new Vector3();\nconst temp4 = /* @__PURE__ */ new Vector3();\n\nfunction closestPointToGeometry_indirect(\n\tbvh,\n\totherGeometry,\n\tgeometryToBvh,\n\ttarget1 = { },\n\ttarget2 = { },\n\tminThreshold = 0,\n\tmaxThreshold = Infinity,\n) {\n\n\tif ( ! otherGeometry.boundingBox ) {\n\n\t\totherGeometry.computeBoundingBox();\n\n\t}\n\n\tobb.set( otherGeometry.boundingBox.min, otherGeometry.boundingBox.max, geometryToBvh );\n\tobb.needsUpdate = true;\n\n\tconst geometry = bvh.geometry;\n\tconst pos = geometry.attributes.position;\n\tconst index = geometry.index;\n\tconst otherPos = otherGeometry.attributes.position;\n\tconst otherIndex = otherGeometry.index;\n\tconst triangle = ExtendedTrianglePool.getPrimitive();\n\tconst triangle2 = ExtendedTrianglePool.getPrimitive();\n\n\tlet tempTarget1 = temp1;\n\tlet tempTargetDest1 = temp2;\n\tlet tempTarget2 = null;\n\tlet tempTargetDest2 = null;\n\n\tif ( target2 ) {\n\n\t\ttempTarget2 = temp3;\n\t\ttempTargetDest2 = temp4;\n\n\t}\n\n\tlet closestDistance = Infinity;\n\tlet closestDistanceTriIndex = null;\n\tlet closestDistanceOtherTriIndex = null;\n\ttempMatrix.copy( geometryToBvh ).invert();\n\tobb2.matrix.copy( tempMatrix );\n\tbvh.shapecast(\n\t\t{\n\n\t\t\tboundsTraverseOrder: box => {\n\n\t\t\t\treturn obb.distanceToBox( box );\n\n\t\t\t},\n\n\t\t\tintersectsBounds: ( box, isLeaf, score ) => {\n\n\t\t\t\tif ( score < closestDistance && score < maxThreshold ) {\n\n\t\t\t\t\t// if we know the triangles of this bounds will be intersected next then\n\t\t\t\t\t// save the bounds to use during triangle checks.\n\t\t\t\t\tif ( isLeaf ) {\n\n\t\t\t\t\t\tobb2.min.copy( box.min );\n\t\t\t\t\t\tobb2.max.copy( box.max );\n\t\t\t\t\t\tobb2.needsUpdate = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t},\n\n\t\t\tintersectsRange: ( offset, count ) => {\n\n\t\t\t\tif ( otherGeometry.boundsTree ) {\n\n\t\t\t\t\t// if the other geometry has a bvh then use the accelerated path where we use shapecast to find\n\t\t\t\t\t// the closest bounds in the other geometry to check.\n\t\t\t\t\tconst otherBvh = otherGeometry.boundsTree;\n\t\t\t\t\treturn otherBvh.shapecast( {\n\t\t\t\t\t\tboundsTraverseOrder: box => {\n\n\t\t\t\t\t\t\treturn obb2.distanceToBox( box );\n\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tintersectsBounds: ( box, isLeaf, score ) => {\n\n\t\t\t\t\t\t\treturn score < closestDistance && score < maxThreshold;\n\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tintersectsRange: ( otherOffset, otherCount ) => {\n\n\t\t\t\t\t\t\tfor ( let i2 = otherOffset, l2 = otherOffset + otherCount; i2 < l2; i2 ++ ) {\n\n\t\t\t\t\t\t\t\tconst ti2 = otherBvh.resolveTriangleIndex( i2 );\n\t\t\t\t\t\t\t\tsetTriangle( triangle2, 3 * ti2, otherIndex, otherPos );\n\n\t\t\t\t\t\t\t\ttriangle2.a.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\t\t\ttriangle2.b.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\t\t\ttriangle2.c.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\t\t\ttriangle2.needsUpdate = true;\n\n\t\t\t\t\t\t\t\tfor ( let i = offset, l = offset + count; i < l; i ++ ) {\n\n\t\t\t\t\t\t\t\t\tconst ti = bvh.resolveTriangleIndex( i );\n\t\t\t\t\t\t\t\t\tsetTriangle( triangle, 3 * ti, index, pos );\n\n\t\t\t\t\t\t\t\t\ttriangle.needsUpdate = true;\n\n\t\t\t\t\t\t\t\t\tconst dist = triangle.distanceToTriangle( triangle2, tempTarget1, tempTarget2 );\n\t\t\t\t\t\t\t\t\tif ( dist < closestDistance ) {\n\n\t\t\t\t\t\t\t\t\t\ttempTargetDest1.copy( tempTarget1 );\n\n\t\t\t\t\t\t\t\t\t\tif ( tempTargetDest2 ) {\n\n\t\t\t\t\t\t\t\t\t\t\ttempTargetDest2.copy( tempTarget2 );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tclosestDistance = dist;\n\t\t\t\t\t\t\t\t\t\tclosestDistanceTriIndex = i;\n\t\t\t\t\t\t\t\t\t\tclosestDistanceOtherTriIndex = i2;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// stop traversal if we find a point that's under the given threshold\n\t\t\t\t\t\t\t\t\tif ( dist < minThreshold ) {\n\n\t\t\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t},\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// If no bounds tree then we'll just check every triangle.\n\t\t\t\t\tconst triCount = getTriCount( otherGeometry );\n\t\t\t\t\tfor ( let i2 = 0, l2 = triCount; i2 < l2; i2 ++ ) {\n\n\t\t\t\t\t\tsetTriangle( triangle2, 3 * i2, otherIndex, otherPos );\n\t\t\t\t\t\ttriangle2.a.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\ttriangle2.b.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\ttriangle2.c.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\ttriangle2.needsUpdate = true;\n\n\t\t\t\t\t\tfor ( let i = offset, l = offset + count; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tconst ti = bvh.resolveTriangleIndex( i );\n\t\t\t\t\t\t\tsetTriangle( triangle, 3 * ti, index, pos );\n\n\t\t\t\t\t\t\ttriangle.needsUpdate = true;\n\n\t\t\t\t\t\t\tconst dist = triangle.distanceToTriangle( triangle2, tempTarget1, tempTarget2 );\n\t\t\t\t\t\t\tif ( dist < closestDistance ) {\n\n\t\t\t\t\t\t\t\ttempTargetDest1.copy( tempTarget1 );\n\n\t\t\t\t\t\t\t\tif ( tempTargetDest2 ) {\n\n\t\t\t\t\t\t\t\t\ttempTargetDest2.copy( tempTarget2 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tclosestDistance = dist;\n\t\t\t\t\t\t\t\tclosestDistanceTriIndex = i;\n\t\t\t\t\t\t\t\tclosestDistanceOtherTriIndex = i2;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// stop traversal if we find a point that's under the given threshold\n\t\t\t\t\t\t\tif ( dist < minThreshold ) {\n\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t}\n\n\t);\n\n\tExtendedTrianglePool.releasePrimitive( triangle );\n\tExtendedTrianglePool.releasePrimitive( triangle2 );\n\n\tif ( closestDistance === Infinity ) {\n\n\t\treturn null;\n\n\t}\n\n\tif ( ! target1.point ) {\n\n\t\ttarget1.point = tempTargetDest1.clone();\n\n\t} else {\n\n\t\ttarget1.point.copy( tempTargetDest1 );\n\n\t}\n\n\ttarget1.distance = closestDistance,\n\ttarget1.faceIndex = closestDistanceTriIndex;\n\n\tif ( target2 ) {\n\n\t\tif ( ! target2.point ) target2.point = tempTargetDest2.clone();\n\t\telse target2.point.copy( tempTargetDest2 );\n\t\ttarget2.point.applyMatrix4( tempMatrix );\n\t\ttempTargetDest1.applyMatrix4( tempMatrix );\n\t\ttarget2.distance = tempTargetDest1.sub( target2.point ).length();\n\t\ttarget2.faceIndex = closestDistanceOtherTriIndex;\n\n\t}\n\n\treturn target1;\n\n}\n\nexport { closestPointToGeometry_indirect };\n","export function isSharedArrayBufferSupported() {\n\n\treturn typeof SharedArrayBuffer !== 'undefined';\n\n}\n\nexport function convertToBufferType( array, BufferConstructor ) {\n\n\tif ( array === null ) {\n\n\t\treturn array;\n\n\t} else if ( array.buffer ) {\n\n\t\tconst buffer = array.buffer;\n\t\tif ( buffer.constructor === BufferConstructor ) {\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tconst ArrayConstructor = array.constructor;\n\t\tconst result = new ArrayConstructor( new BufferConstructor( buffer.byteLength ) );\n\t\tresult.set( array );\n\t\treturn result;\n\n\t} else {\n\n\t\tif ( array.constructor === BufferConstructor ) {\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tconst result = new BufferConstructor( array.byteLength );\n\t\tnew Uint8Array( result ).set( new Uint8Array( array ) );\n\t\treturn result;\n\n\t}\n\n}\n","import { Box3, Matrix4 } from 'three';\nimport { BufferStack } from '../utils/BufferStack.js';\nimport { BOUNDING_DATA_INDEX, COUNT, IS_LEAF, LEFT_NODE, OFFSET, RIGHT_NODE } from '../utils/nodeBufferUtils.js';\nimport { arrayToBox } from '../../utils/ArrayBoxUtilities.js';\nimport { PrimitivePool } from '../../utils/PrimitivePool.js';\n\nconst _bufferStack1 = new BufferStack.constructor();\nconst _bufferStack2 = new BufferStack.constructor();\nconst _boxPool = new PrimitivePool( () => new Box3() );\nconst _leftBox1 = new Box3();\nconst _rightBox1 = new Box3();\n\nconst _leftBox2 = new Box3();\nconst _rightBox2 = new Box3();\n\nlet _active = false;\n\nexport function bvhcast( bvh, otherBvh, matrixToLocal, intersectsRanges ) {\n\n\tif ( _active ) {\n\n\t\tthrow new Error( 'MeshBVH: Recursive calls to bvhcast not supported.' );\n\n\t}\n\n\t_active = true;\n\n\tconst roots = bvh._roots;\n\tconst otherRoots = otherBvh._roots;\n\tlet result;\n\tlet offset1 = 0;\n\tlet offset2 = 0;\n\tconst invMat = new Matrix4().copy( matrixToLocal ).invert();\n\n\t// iterate over the first set of roots\n\tfor ( let i = 0, il = roots.length; i < il; i ++ ) {\n\n\t\t_bufferStack1.setBuffer( roots[ i ] );\n\t\toffset2 = 0;\n\n\t\t// prep the initial root box\n\t\tconst localBox = _boxPool.getPrimitive();\n\t\tarrayToBox( BOUNDING_DATA_INDEX( 0 ), _bufferStack1.float32Array, localBox );\n\t\tlocalBox.applyMatrix4( invMat );\n\n\t\t// iterate over the second set of roots\n\t\tfor ( let j = 0, jl = otherRoots.length; j < jl; j ++ ) {\n\n\t\t\t_bufferStack2.setBuffer( otherRoots[ j ] );\n\n\t\t\tresult = _traverse(\n\t\t\t\t0, 0, matrixToLocal, invMat, intersectsRanges,\n\t\t\t\toffset1, offset2, 0, 0,\n\t\t\t\tlocalBox,\n\t\t\t);\n\n\t\t\t_bufferStack2.clearBuffer();\n\t\t\toffset2 += otherRoots[ j ].length;\n\n\t\t\tif ( result ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// release stack info\n\t\t_boxPool.releasePrimitive( localBox );\n\t\t_bufferStack1.clearBuffer();\n\t\toffset1 += roots[ i ].length;\n\n\t\tif ( result ) {\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\t_active = false;\n\treturn result;\n\n}\n\nfunction _traverse(\n\tnode1Index32,\n\tnode2Index32,\n\tmatrix2to1,\n\tmatrix1to2,\n\tintersectsRangesFunc,\n\n\t// offsets for ids\n\tnode1IndexByteOffset = 0,\n\tnode2IndexByteOffset = 0,\n\n\t// tree depth\n\tdepth1 = 0,\n\tdepth2 = 0,\n\n\tcurrBox = null,\n\treversed = false,\n\n) {\n\n\t// get the buffer stacks associated with the current indices\n\tlet bufferStack1, bufferStack2;\n\tif ( reversed ) {\n\n\t\tbufferStack1 = _bufferStack2;\n\t\tbufferStack2 = _bufferStack1;\n\n\t} else {\n\n\t\tbufferStack1 = _bufferStack1;\n\t\tbufferStack2 = _bufferStack2;\n\n\t}\n\n\t// get the local instances of the typed buffers\n\tconst\n\t\tfloat32Array1 = bufferStack1.float32Array,\n\t\tuint32Array1 = bufferStack1.uint32Array,\n\t\tuint16Array1 = bufferStack1.uint16Array,\n\t\tfloat32Array2 = bufferStack2.float32Array,\n\t\tuint32Array2 = bufferStack2.uint32Array,\n\t\tuint16Array2 = bufferStack2.uint16Array;\n\n\tconst node1Index16 = node1Index32 * 2;\n\tconst node2Index16 = node2Index32 * 2;\n\tconst isLeaf1 = IS_LEAF( node1Index16, uint16Array1 );\n\tconst isLeaf2 = IS_LEAF( node2Index16, uint16Array2 );\n\tlet result = false;\n\tif ( isLeaf2 && isLeaf1 ) {\n\n\t\t// if both bounds are leaf nodes then fire the callback if the boxes intersect\n\t\tif ( reversed ) {\n\n\t\t\tresult = intersectsRangesFunc(\n\t\t\t\tOFFSET( node2Index32, uint32Array2 ), COUNT( node2Index32 * 2, uint16Array2 ),\n\t\t\t\tOFFSET( node1Index32, uint32Array1 ), COUNT( node1Index32 * 2, uint16Array1 ),\n\t\t\t\tdepth2, node2IndexByteOffset + node2Index32,\n\t\t\t\tdepth1, node1IndexByteOffset + node1Index32,\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tresult = intersectsRangesFunc(\n\t\t\t\tOFFSET( node1Index32, uint32Array1 ), COUNT( node1Index32 * 2, uint16Array1 ),\n\t\t\t\tOFFSET( node2Index32, uint32Array2 ), COUNT( node2Index32 * 2, uint16Array2 ),\n\t\t\t\tdepth1, node1IndexByteOffset + node1Index32,\n\t\t\t\tdepth2, node2IndexByteOffset + node2Index32,\n\t\t\t);\n\n\t\t}\n\n\t} else if ( isLeaf2 ) {\n\n\t\t// SWAP\n\t\t// If we've traversed to the leaf node on the other bvh then we need to swap over\n\t\t// to traverse down the first one\n\n\t\t// get the new box to use\n\t\tconst newBox = _boxPool.getPrimitive();\n\t\tarrayToBox( BOUNDING_DATA_INDEX( node2Index32 ), float32Array2, newBox );\n\t\tnewBox.applyMatrix4( matrix2to1 );\n\n\t\t// get the child bounds to check before traversal\n\t\tconst cl1 = LEFT_NODE( node1Index32 );\n\t\tconst cr1 = RIGHT_NODE( node1Index32, uint32Array1 );\n\t\tarrayToBox( BOUNDING_DATA_INDEX( cl1 ), float32Array1, _leftBox1 );\n\t\tarrayToBox( BOUNDING_DATA_INDEX( cr1 ), float32Array1, _rightBox1 );\n\n\t\t// precompute the intersections otherwise the global boxes will be modified during traversal\n\t\tconst intersectCl1 = newBox.intersectsBox( _leftBox1 );\n\t\tconst intersectCr1 = newBox.intersectsBox( _rightBox1 );\n\t\tresult = (\n\t\t\tintersectCl1 && _traverse(\n\t\t\t\tnode2Index32, cl1, matrix1to2, matrix2to1, intersectsRangesFunc,\n\t\t\t\tnode2IndexByteOffset, node1IndexByteOffset, depth2, depth1 + 1,\n\t\t\t\tnewBox, ! reversed,\n\t\t\t)\n\t\t) || (\n\t\t\tintersectCr1 && _traverse(\n\t\t\t\tnode2Index32, cr1, matrix1to2, matrix2to1, intersectsRangesFunc,\n\t\t\t\tnode2IndexByteOffset, node1IndexByteOffset, depth2, depth1 + 1,\n\t\t\t\tnewBox, ! reversed,\n\t\t\t)\n\t\t);\n\n\t\t_boxPool.releasePrimitive( newBox );\n\n\t} else {\n\n\t\t// if neither are leaves then we should swap if one of the children does not\n\t\t// intersect with the current bounds\n\n\t\t// get the child bounds to check\n\t\tconst cl2 = LEFT_NODE( node2Index32 );\n\t\tconst cr2 = RIGHT_NODE( node2Index32, uint32Array2 );\n\t\tarrayToBox( BOUNDING_DATA_INDEX( cl2 ), float32Array2, _leftBox2 );\n\t\tarrayToBox( BOUNDING_DATA_INDEX( cr2 ), float32Array2, _rightBox2 );\n\n\t\tconst leftIntersects = currBox.intersectsBox( _leftBox2 );\n\t\tconst rightIntersects = currBox.intersectsBox( _rightBox2 );\n\t\tif ( leftIntersects && rightIntersects ) {\n\n\t\t\t// continue to traverse both children if they both intersect\n\t\t\tresult = _traverse(\n\t\t\t\tnode1Index32, cl2, matrix2to1, matrix1to2, intersectsRangesFunc,\n\t\t\t\tnode1IndexByteOffset, node2IndexByteOffset, depth1, depth2 + 1,\n\t\t\t\tcurrBox, reversed,\n\t\t\t) || _traverse(\n\t\t\t\tnode1Index32, cr2, matrix2to1, matrix1to2, intersectsRangesFunc,\n\t\t\t\tnode1IndexByteOffset, node2IndexByteOffset, depth1, depth2 + 1,\n\t\t\t\tcurrBox, reversed,\n\t\t\t);\n\n\t\t} else if ( leftIntersects ) {\n\n\t\t\tif ( isLeaf1 ) {\n\n\t\t\t\t// if the current box is a leaf then just continue\n\t\t\t\tresult = _traverse(\n\t\t\t\t\tnode1Index32, cl2, matrix2to1, matrix1to2, intersectsRangesFunc,\n\t\t\t\t\tnode1IndexByteOffset, node2IndexByteOffset, depth1, depth2 + 1,\n\t\t\t\t\tcurrBox, reversed,\n\t\t\t\t);\n\n\t\t\t} else {\n\n\t\t\t\t// SWAP\n\t\t\t\t// if only one box intersects then we have to swap to the other bvh to continue\n\t\t\t\tconst newBox = _boxPool.getPrimitive();\n\t\t\t\tnewBox.copy( _leftBox2 ).applyMatrix4( matrix2to1 );\n\n\t\t\t\tconst cl1 = LEFT_NODE( node1Index32 );\n\t\t\t\tconst cr1 = RIGHT_NODE( node1Index32, uint32Array1 );\n\t\t\t\tarrayToBox( BOUNDING_DATA_INDEX( cl1 ), float32Array1, _leftBox1 );\n\t\t\t\tarrayToBox( BOUNDING_DATA_INDEX( cr1 ), float32Array1, _rightBox1 );\n\n\t\t\t\t// precompute the intersections otherwise the global boxes will be modified during traversal\n\t\t\t\tconst intersectCl1 = newBox.intersectsBox( _leftBox1 );\n\t\t\t\tconst intersectCr1 = newBox.intersectsBox( _rightBox1 );\n\t\t\t\tresult = (\n\t\t\t\t\tintersectCl1 && _traverse(\n\t\t\t\t\t\tcl2, cl1, matrix1to2, matrix2to1, intersectsRangesFunc,\n\t\t\t\t\t\tnode2IndexByteOffset, node1IndexByteOffset, depth2, depth1 + 1,\n\t\t\t\t\t\tnewBox, ! reversed,\n\t\t\t\t\t)\n\t\t\t\t) || (\n\t\t\t\t\tintersectCr1 && _traverse(\n\t\t\t\t\t\tcl2, cr1, matrix1to2, matrix2to1, intersectsRangesFunc,\n\t\t\t\t\t\tnode2IndexByteOffset, node1IndexByteOffset, depth2, depth1 + 1,\n\t\t\t\t\t\tnewBox, ! reversed,\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t\t_boxPool.releasePrimitive( newBox );\n\n\t\t\t}\n\n\t\t} else if ( rightIntersects ) {\n\n\t\t\tif ( isLeaf1 ) {\n\n\t\t\t\t// if the current box is a leaf then just continue\n\t\t\t\tresult = _traverse(\n\t\t\t\t\tnode1Index32, cr2, matrix2to1, matrix1to2, intersectsRangesFunc,\n\t\t\t\t\tnode1IndexByteOffset, node2IndexByteOffset, depth1, depth2 + 1,\n\t\t\t\t\tcurrBox, reversed,\n\t\t\t\t);\n\n\t\t\t} else {\n\n\t\t\t\t// SWAP\n\t\t\t\t// if only one box intersects then we have to swap to the other bvh to continue\n\t\t\t\tconst newBox = _boxPool.getPrimitive();\n\t\t\t\tnewBox.copy( _rightBox2 ).applyMatrix4( matrix2to1 );\n\n\t\t\t\tconst cl1 = LEFT_NODE( node1Index32 );\n\t\t\t\tconst cr1 = RIGHT_NODE( node1Index32, uint32Array1 );\n\t\t\t\tarrayToBox( BOUNDING_DATA_INDEX( cl1 ), float32Array1, _leftBox1 );\n\t\t\t\tarrayToBox( BOUNDING_DATA_INDEX( cr1 ), float32Array1, _rightBox1 );\n\n\t\t\t\t// precompute the intersections otherwise the global boxes will be modified during traversal\n\t\t\t\tconst intersectCl1 = newBox.intersectsBox( _leftBox1 );\n\t\t\t\tconst intersectCr1 = newBox.intersectsBox( _rightBox1 );\n\t\t\t\tresult = (\n\t\t\t\t\tintersectCl1 && _traverse(\n\t\t\t\t\t\tcr2, cl1, matrix1to2, matrix2to1, intersectsRangesFunc,\n\t\t\t\t\t\tnode2IndexByteOffset, node1IndexByteOffset, depth2, depth1 + 1,\n\t\t\t\t\t\tnewBox, ! reversed,\n\t\t\t\t\t)\n\t\t\t\t) || (\n\t\t\t\t\tintersectCr1 && _traverse(\n\t\t\t\t\t\tcr2, cr1, matrix1to2, matrix2to1, intersectsRangesFunc,\n\t\t\t\t\t\tnode2IndexByteOffset, node1IndexByteOffset, depth2, depth1 + 1,\n\t\t\t\t\t\tnewBox, ! reversed,\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t\t_boxPool.releasePrimitive( newBox );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn result;\n\n}\n\n","import { BufferAttribute, Box3, FrontSide } from 'three';\nimport { CENTER, BYTES_PER_NODE, IS_LEAFNODE_FLAG, SKIP_GENERATION } from './Constants.js';\nimport { buildPackedTree } from './build/buildTree.js';\nimport { OrientedBox } from '../math/OrientedBox.js';\nimport { arrayToBox } from '../utils/ArrayBoxUtilities.js';\nimport { ExtendedTrianglePool } from '../utils/ExtendedTrianglePool.js';\nimport { shapecast } from './cast/shapecast.js';\nimport { closestPointToPoint } from './cast/closestPointToPoint.js';\n\nimport { iterateOverTriangles } from './utils/iterationUtils.generated.js';\nimport { refit } from './cast/refit.generated.js';\nimport { raycast } from './cast/raycast.generated.js';\nimport { raycastFirst } from './cast/raycastFirst.generated.js';\nimport { intersectsGeometry } from './cast/intersectsGeometry.generated.js';\nimport { closestPointToGeometry } from './cast/closestPointToGeometry.generated.js';\n\nimport { iterateOverTriangles_indirect } from './utils/iterationUtils_indirect.generated.js';\nimport { refit_indirect } from './cast/refit_indirect.generated.js';\nimport { raycast_indirect } from './cast/raycast_indirect.generated.js';\nimport { raycastFirst_indirect } from './cast/raycastFirst_indirect.generated.js';\nimport { intersectsGeometry_indirect } from './cast/intersectsGeometry_indirect.generated.js';\nimport { closestPointToGeometry_indirect } from './cast/closestPointToGeometry_indirect.generated.js';\nimport { isSharedArrayBufferSupported } from '../utils/BufferUtils.js';\nimport { setTriangle } from '../utils/TriangleUtilities.js';\nimport { bvhcast } from './cast/bvhcast.js';\n\nconst obb = /* @__PURE__ */ new OrientedBox();\nconst tempBox = /* @__PURE__ */ new Box3();\nexport const DEFAULT_OPTIONS = {\n\tstrategy: CENTER,\n\tmaxDepth: 40,\n\tmaxLeafTris: 10,\n\tuseSharedArrayBuffer: false,\n\tsetBoundingBox: true,\n\tonProgress: null,\n\tindirect: false,\n\tverbose: true,\n\trange: null\n};\n\nexport class MeshBVH {\n\n\tstatic serialize( bvh, options = {} ) {\n\n\t\toptions = {\n\t\t\tcloneBuffers: true,\n\t\t\t...options,\n\t\t};\n\n\t\tconst geometry = bvh.geometry;\n\t\tconst rootData = bvh._roots;\n\t\tconst indirectBuffer = bvh._indirectBuffer;\n\t\tconst indexAttribute = geometry.getIndex();\n\t\tlet result;\n\t\tif ( options.cloneBuffers ) {\n\n\t\t\tresult = {\n\t\t\t\troots: rootData.map( root => root.slice() ),\n\t\t\t\tindex: indexAttribute ? indexAttribute.array.slice() : null,\n\t\t\t\tindirectBuffer: indirectBuffer ? indirectBuffer.slice() : null,\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tresult = {\n\t\t\t\troots: rootData,\n\t\t\t\tindex: indexAttribute ? indexAttribute.array : null,\n\t\t\t\tindirectBuffer: indirectBuffer,\n\t\t\t};\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tstatic deserialize( data, geometry, options = {} ) {\n\n\t\toptions = {\n\t\t\tsetIndex: true,\n\t\t\tindirect: Boolean( data.indirectBuffer ),\n\t\t\t...options,\n\t\t};\n\n\t\tconst { index, roots, indirectBuffer } = data;\n\t\tconst bvh = new MeshBVH( geometry, { ...options, [ SKIP_GENERATION ]: true } );\n\t\tbvh._roots = roots;\n\t\tbvh._indirectBuffer = indirectBuffer || null;\n\n\t\tif ( options.setIndex ) {\n\n\t\t\tconst indexAttribute = geometry.getIndex();\n\t\t\tif ( indexAttribute === null ) {\n\n\t\t\t\tconst newIndex = new BufferAttribute( data.index, 1, false );\n\t\t\t\tgeometry.setIndex( newIndex );\n\n\t\t\t} else if ( indexAttribute.array !== index ) {\n\n\t\t\t\tindexAttribute.array.set( index );\n\t\t\t\tindexAttribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn bvh;\n\n\t}\n\n\tget indirect() {\n\n\t\treturn ! ! this._indirectBuffer;\n\n\t}\n\n\tconstructor( geometry, options = {} ) {\n\n\t\tif ( ! geometry.isBufferGeometry ) {\n\n\t\t\tthrow new Error( 'MeshBVH: Only BufferGeometries are supported.' );\n\n\t\t} else if ( geometry.index && geometry.index.isInterleavedBufferAttribute ) {\n\n\t\t\tthrow new Error( 'MeshBVH: InterleavedBufferAttribute is not supported for the index attribute.' );\n\n\t\t}\n\n\t\t// default options\n\t\toptions = Object.assign( {\n\n\t\t\t...DEFAULT_OPTIONS,\n\n\t\t\t// undocumented options\n\n\t\t\t// Whether to skip generating the tree. Used for deserialization.\n\t\t\t[ SKIP_GENERATION ]: false,\n\n\t\t}, options );\n\n\t\tif ( options.useSharedArrayBuffer && ! isSharedArrayBufferSupported() ) {\n\n\t\t\tthrow new Error( 'MeshBVH: SharedArrayBuffer is not available.' );\n\n\t\t}\n\n\t\t// retain references to the geometry so we can use them it without having to\n\t\t// take a geometry reference in every function.\n\t\tthis.geometry = geometry;\n\t\tthis._roots = null;\n\t\tthis._indirectBuffer = null;\n\t\tif ( ! options[ SKIP_GENERATION ] ) {\n\n\t\t\tbuildPackedTree( this, options );\n\n\t\t\tif ( ! geometry.boundingBox && options.setBoundingBox ) {\n\n\t\t\t\tgeometry.boundingBox = this.getBoundingBox( new Box3() );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.resolveTriangleIndex = options.indirect ? i => this._indirectBuffer[ i ] : i => i;\n\n\t}\n\n\trefit( nodeIndices = null ) {\n\n\t\tconst refitFunc = this.indirect ? refit_indirect : refit;\n\t\treturn refitFunc( this, nodeIndices );\n\n\t}\n\n\ttraverse( callback, rootIndex = 0 ) {\n\n\t\tconst buffer = this._roots[ rootIndex ];\n\t\tconst uint32Array = new Uint32Array( buffer );\n\t\tconst uint16Array = new Uint16Array( buffer );\n\t\t_traverse( 0 );\n\n\t\tfunction _traverse( node32Index, depth = 0 ) {\n\n\t\t\tconst node16Index = node32Index * 2;\n\t\t\tconst isLeaf = uint16Array[ node16Index + 15 ] === IS_LEAFNODE_FLAG;\n\t\t\tif ( isLeaf ) {\n\n\t\t\t\tconst offset = uint32Array[ node32Index + 6 ];\n\t\t\t\tconst count = uint16Array[ node16Index + 14 ];\n\t\t\t\tcallback( depth, isLeaf, new Float32Array( buffer, node32Index * 4, 6 ), offset, count );\n\n\t\t\t} else {\n\n\t\t\t\t// TODO: use node functions here\n\t\t\t\tconst left = node32Index + BYTES_PER_NODE / 4;\n\t\t\t\tconst right = uint32Array[ node32Index + 6 ];\n\t\t\t\tconst splitAxis = uint32Array[ node32Index + 7 ];\n\t\t\t\tconst stopTraversal = callback( depth, isLeaf, new Float32Array( buffer, node32Index * 4, 6 ), splitAxis );\n\n\t\t\t\tif ( ! stopTraversal ) {\n\n\t\t\t\t\t_traverse( left, depth + 1 );\n\t\t\t\t\t_traverse( right, depth + 1 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/* Core Cast Functions */\n\traycast( ray, materialOrSide = FrontSide, near = 0, far = Infinity ) {\n\n\t\tconst roots = this._roots;\n\t\tconst geometry = this.geometry;\n\t\tconst intersects = [];\n\t\tconst isMaterial = materialOrSide.isMaterial;\n\t\tconst isArrayMaterial = Array.isArray( materialOrSide );\n\n\t\tconst groups = geometry.groups;\n\t\tconst side = isMaterial ? materialOrSide.side : materialOrSide;\n\t\tconst raycastFunc = this.indirect ? raycast_indirect : raycast;\n\t\tfor ( let i = 0, l = roots.length; i < l; i ++ ) {\n\n\t\t\tconst materialSide = isArrayMaterial ? materialOrSide[ groups[ i ].materialIndex ].side : side;\n\t\t\tconst startCount = intersects.length;\n\n\t\t\traycastFunc( this, i, materialSide, ray, intersects, near, far );\n\n\t\t\tif ( isArrayMaterial ) {\n\n\t\t\t\tconst materialIndex = groups[ i ].materialIndex;\n\t\t\t\tfor ( let j = startCount, jl = intersects.length; j < jl; j ++ ) {\n\n\t\t\t\t\tintersects[ j ].face.materialIndex = materialIndex;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn intersects;\n\n\t}\n\n\traycastFirst( ray, materialOrSide = FrontSide, near = 0, far = Infinity ) {\n\n\t\tconst roots = this._roots;\n\t\tconst geometry = this.geometry;\n\t\tconst isMaterial = materialOrSide.isMaterial;\n\t\tconst isArrayMaterial = Array.isArray( materialOrSide );\n\n\t\tlet closestResult = null;\n\n\t\tconst groups = geometry.groups;\n\t\tconst side = isMaterial ? materialOrSide.side : materialOrSide;\n\t\tconst raycastFirstFunc = this.indirect ? raycastFirst_indirect : raycastFirst;\n\t\tfor ( let i = 0, l = roots.length; i < l; i ++ ) {\n\n\t\t\tconst materialSide = isArrayMaterial ? materialOrSide[ groups[ i ].materialIndex ].side : side;\n\t\t\tconst result = raycastFirstFunc( this, i, materialSide, ray, near, far );\n\t\t\tif ( result != null && ( closestResult == null || result.distance < closestResult.distance ) ) {\n\n\t\t\t\tclosestResult = result;\n\t\t\t\tif ( isArrayMaterial ) {\n\n\t\t\t\t\tresult.face.materialIndex = groups[ i ].materialIndex;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn closestResult;\n\n\t}\n\n\tintersectsGeometry( otherGeometry, geomToMesh ) {\n\n\t\tlet result = false;\n\t\tconst roots = this._roots;\n\t\tconst intersectsGeometryFunc = this.indirect ? intersectsGeometry_indirect : intersectsGeometry;\n\t\tfor ( let i = 0, l = roots.length; i < l; i ++ ) {\n\n\t\t\tresult = intersectsGeometryFunc( this, i, otherGeometry, geomToMesh );\n\n\t\t\tif ( result ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tshapecast( callbacks ) {\n\n\t\tconst triangle = ExtendedTrianglePool.getPrimitive();\n\t\tconst iterateFunc = this.indirect ? iterateOverTriangles_indirect : iterateOverTriangles;\n\t\tlet {\n\t\t\tboundsTraverseOrder,\n\t\t\tintersectsBounds,\n\t\t\tintersectsRange,\n\t\t\tintersectsTriangle,\n\t\t} = callbacks;\n\n\t\t// wrap the intersectsRange function\n\t\tif ( intersectsRange && intersectsTriangle ) {\n\n\t\t\tconst originalIntersectsRange = intersectsRange;\n\t\t\tintersectsRange = ( offset, count, contained, depth, nodeIndex ) => {\n\n\t\t\t\tif ( ! originalIntersectsRange( offset, count, contained, depth, nodeIndex ) ) {\n\n\t\t\t\t\treturn iterateFunc( offset, count, this, intersectsTriangle, contained, depth, triangle );\n\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\n\t\t\t};\n\n\t\t} else if ( ! intersectsRange ) {\n\n\t\t\tif ( intersectsTriangle ) {\n\n\t\t\t\tintersectsRange = ( offset, count, contained, depth ) => {\n\n\t\t\t\t\treturn iterateFunc( offset, count, this, intersectsTriangle, contained, depth, triangle );\n\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tintersectsRange = ( offset, count, contained ) => {\n\n\t\t\t\t\treturn contained;\n\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\t// run shapecast\n\t\tlet result = false;\n\t\tlet byteOffset = 0;\n\t\tconst roots = this._roots;\n\t\tfor ( let i = 0, l = roots.length; i < l; i ++ ) {\n\n\t\t\tconst root = roots[ i ];\n\t\t\tresult = shapecast( this, i, intersectsBounds, intersectsRange, boundsTraverseOrder, byteOffset );\n\n\t\t\tif ( result ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tbyteOffset += root.byteLength;\n\n\t\t}\n\n\t\tExtendedTrianglePool.releasePrimitive( triangle );\n\n\t\treturn result;\n\n\t}\n\n\tbvhcast( otherBvh, matrixToLocal, callbacks ) {\n\n\t\tlet {\n\t\t\tintersectsRanges,\n\t\t\tintersectsTriangles,\n\t\t} = callbacks;\n\n\t\tconst triangle1 = ExtendedTrianglePool.getPrimitive();\n\t\tconst indexAttr1 = this.geometry.index;\n\t\tconst positionAttr1 = this.geometry.attributes.position;\n\t\tconst assignTriangle1 = this.indirect ?\n\t\t\ti1 => {\n\n\n\t\t\t\tconst ti = this.resolveTriangleIndex( i1 );\n\t\t\t\tsetTriangle( triangle1, ti * 3, indexAttr1, positionAttr1 );\n\n\t\t\t} :\n\t\t\ti1 => {\n\n\t\t\t\tsetTriangle( triangle1, i1 * 3, indexAttr1, positionAttr1 );\n\n\t\t\t};\n\n\t\tconst triangle2 = ExtendedTrianglePool.getPrimitive();\n\t\tconst indexAttr2 = otherBvh.geometry.index;\n\t\tconst positionAttr2 = otherBvh.geometry.attributes.position;\n\t\tconst assignTriangle2 = otherBvh.indirect ?\n\t\t\ti2 => {\n\n\t\t\t\tconst ti2 = otherBvh.resolveTriangleIndex( i2 );\n\t\t\t\tsetTriangle( triangle2, ti2 * 3, indexAttr2, positionAttr2 );\n\n\t\t\t} :\n\t\t\ti2 => {\n\n\t\t\t\tsetTriangle( triangle2, i2 * 3, indexAttr2, positionAttr2 );\n\n\t\t\t};\n\n\t\t// generate triangle callback if needed\n\t\tif ( intersectsTriangles ) {\n\n\t\t\tconst iterateOverDoubleTriangles = ( offset1, count1, offset2, count2, depth1, index1, depth2, index2 ) => {\n\n\t\t\t\tfor ( let i2 = offset2, l2 = offset2 + count2; i2 < l2; i2 ++ ) {\n\n\t\t\t\t\tassignTriangle2( i2 );\n\n\t\t\t\t\ttriangle2.a.applyMatrix4( matrixToLocal );\n\t\t\t\t\ttriangle2.b.applyMatrix4( matrixToLocal );\n\t\t\t\t\ttriangle2.c.applyMatrix4( matrixToLocal );\n\t\t\t\t\ttriangle2.needsUpdate = true;\n\n\t\t\t\t\tfor ( let i1 = offset1, l1 = offset1 + count1; i1 < l1; i1 ++ ) {\n\n\t\t\t\t\t\tassignTriangle1( i1 );\n\n\t\t\t\t\t\ttriangle1.needsUpdate = true;\n\n\t\t\t\t\t\tif ( intersectsTriangles( triangle1, triangle2, i1, i2, depth1, index1, depth2, index2 ) ) {\n\n\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t};\n\n\t\t\tif ( intersectsRanges ) {\n\n\t\t\t\tconst originalIntersectsRanges = intersectsRanges;\n\t\t\t\tintersectsRanges = function ( offset1, count1, offset2, count2, depth1, index1, depth2, index2 ) {\n\n\t\t\t\t\tif ( ! originalIntersectsRanges( offset1, count1, offset2, count2, depth1, index1, depth2, index2 ) ) {\n\n\t\t\t\t\t\treturn iterateOverDoubleTriangles( offset1, count1, offset2, count2, depth1, index1, depth2, index2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tintersectsRanges = iterateOverDoubleTriangles;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn bvhcast( this, otherBvh, matrixToLocal, intersectsRanges );\n\n\t}\n\n\n\t/* Derived Cast Functions */\n\tintersectsBox( box, boxToMesh ) {\n\n\t\tobb.set( box.min, box.max, boxToMesh );\n\t\tobb.needsUpdate = true;\n\n\t\treturn this.shapecast(\n\t\t\t{\n\t\t\t\tintersectsBounds: box => obb.intersectsBox( box ),\n\t\t\t\tintersectsTriangle: tri => obb.intersectsTriangle( tri )\n\t\t\t}\n\t\t);\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn this.shapecast(\n\t\t\t{\n\t\t\t\tintersectsBounds: box => sphere.intersectsBox( box ),\n\t\t\t\tintersectsTriangle: tri => tri.intersectsSphere( sphere )\n\t\t\t}\n\t\t);\n\n\t}\n\n\tclosestPointToGeometry( otherGeometry, geometryToBvh, target1 = { }, target2 = { }, minThreshold = 0, maxThreshold = Infinity ) {\n\n\t\tconst closestPointToGeometryFunc = this.indirect ? closestPointToGeometry_indirect : closestPointToGeometry;\n\t\treturn closestPointToGeometryFunc(\n\t\t\tthis,\n\t\t\totherGeometry,\n\t\t\tgeometryToBvh,\n\t\t\ttarget1,\n\t\t\ttarget2,\n\t\t\tminThreshold,\n\t\t\tmaxThreshold,\n\t\t);\n\n\t}\n\n\tclosestPointToPoint( point, target = { }, minThreshold = 0, maxThreshold = Infinity ) {\n\n\t\treturn closestPointToPoint(\n\t\t\tthis,\n\t\t\tpoint,\n\t\t\ttarget,\n\t\t\tminThreshold,\n\t\t\tmaxThreshold,\n\t\t);\n\n\t}\n\n\tgetBoundingBox( target ) {\n\n\t\ttarget.makeEmpty();\n\n\t\tconst roots = this._roots;\n\t\troots.forEach( buffer => {\n\n\t\t\tarrayToBox( 0, new Float32Array( buffer ), tempBox );\n\t\t\ttarget.union( tempBox );\n\n\t\t} );\n\n\t\treturn target;\n\n\t}\n\n}\n","// converts the given BVH raycast intersection to align with the three.js raycast\n// structure (include object, world space distance and point).\nexport function convertRaycastIntersect( hit, object, raycaster ) {\n\n\tif ( hit === null ) {\n\n\t\treturn null;\n\n\t}\n\n\thit.point.applyMatrix4( object.matrixWorld );\n\thit.distance = hit.point.distanceTo( raycaster.ray.origin );\n\thit.object = object;\n\n\treturn hit;\n\n}\n","import { Ray, Matrix4, Mesh, Vector3, Sphere, BatchedMesh, REVISION } from 'three';\nimport { convertRaycastIntersect } from './GeometryRayIntersectUtilities.js';\nimport { MeshBVH } from '../core/MeshBVH.js';\n\nconst IS_REVISION_166 = parseInt( REVISION ) >= 166;\nconst ray = /* @__PURE__ */ new Ray();\nconst direction = /* @__PURE__ */ new Vector3();\nconst tmpInverseMatrix = /* @__PURE__ */ new Matrix4();\nconst origMeshRaycastFunc = Mesh.prototype.raycast;\nconst origBatchedRaycastFunc = BatchedMesh.prototype.raycast;\nconst _worldScale = /* @__PURE__ */ new Vector3();\nconst _mesh = /* @__PURE__ */ new Mesh();\nconst _batchIntersects = [];\n\nexport function acceleratedRaycast( raycaster, intersects ) {\n\n\tif ( this.isBatchedMesh ) {\n\n\t\tacceleratedBatchedMeshRaycast.call( this, raycaster, intersects );\n\n\t} else {\n\n\t\tacceleratedMeshRaycast.call( this, raycaster, intersects );\n\n\t}\n\n}\n\nfunction acceleratedBatchedMeshRaycast( raycaster, intersects ) {\n\n\tif ( this.boundsTrees ) {\n\n\t\t// TODO: remove use of geometry info, instance info when r170 is minimum version\n\t\tconst boundsTrees = this.boundsTrees;\n\t\tconst drawInfo = this._drawInfo || this._instanceInfo;\n\t\tconst drawRanges = this._drawRanges || this._geometryInfo;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\t_mesh.material = this.material;\n\t\t_mesh.geometry = this.geometry;\n\n\t\tconst oldBoundsTree = _mesh.geometry.boundsTree;\n\t\tconst oldDrawRange = _mesh.geometry.drawRange;\n\n\t\tif ( _mesh.geometry.boundingSphere === null ) {\n\n\t\t\t_mesh.geometry.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\t// TODO: provide new method to get instances count instead of 'drawInfo.length'\n\t\tfor ( let i = 0, l = drawInfo.length; i < l; i ++ ) {\n\n\t\t\tif ( ! this.getVisibleAt( i ) ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// TODO: use getGeometryIndex\n\t\t\tconst geometryId = drawInfo[ i ].geometryIndex;\n\n\t\t\t_mesh.geometry.boundsTree = boundsTrees[ geometryId ];\n\n\t\t\tthis.getMatrixAt( i, _mesh.matrixWorld ).premultiply( matrixWorld );\n\n\t\t\tif ( ! _mesh.geometry.boundsTree ) {\n\n\t\t\t\tthis.getBoundingBoxAt( geometryId, _mesh.geometry.boundingBox );\n\t\t\t\tthis.getBoundingSphereAt( geometryId, _mesh.geometry.boundingSphere );\n\n\t\t\t\tconst drawRange = drawRanges[ geometryId ];\n\t\t\t\t_mesh.geometry.setDrawRange( drawRange.start, drawRange.count );\n\n\t\t\t}\n\n\t\t\t_mesh.raycast( raycaster, _batchIntersects );\n\n\t\t\tfor ( let j = 0, l = _batchIntersects.length; j < l; j ++ ) {\n\n\t\t\t\tconst intersect = _batchIntersects[ j ];\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersect.batchId = i;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_batchIntersects.length = 0;\n\n\t\t}\n\n\t\t_mesh.geometry.boundsTree = oldBoundsTree;\n\t\t_mesh.geometry.drawRange = oldDrawRange;\n\t\t_mesh.material = null;\n\t\t_mesh.geometry = null;\n\n\t} else {\n\n\t\torigBatchedRaycastFunc.call( this, raycaster, intersects );\n\n\t}\n\n}\n\nfunction acceleratedMeshRaycast( raycaster, intersects ) {\n\n\tif ( this.geometry.boundsTree ) {\n\n\t\tif ( this.material === undefined ) return;\n\n\t\ttmpInverseMatrix.copy( this.matrixWorld ).invert();\n\t\tray.copy( raycaster.ray ).applyMatrix4( tmpInverseMatrix );\n\n\t\t_worldScale.setFromMatrixScale( this.matrixWorld );\n\t\tdirection.copy( ray.direction ).multiply( _worldScale );\n\n\t\tconst scaleFactor = direction.length();\n\t\tconst near = raycaster.near / scaleFactor;\n\t\tconst far = raycaster.far / scaleFactor;\n\n\t\tconst bvh = this.geometry.boundsTree;\n\t\tif ( raycaster.firstHitOnly === true ) {\n\n\t\t\tconst hit = convertRaycastIntersect( bvh.raycastFirst( ray, this.material, near, far ), this, raycaster );\n\t\t\tif ( hit ) {\n\n\t\t\t\tintersects.push( hit );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst hits = bvh.raycast( ray, this.material, near, far );\n\t\t\tfor ( let i = 0, l = hits.length; i < l; i ++ ) {\n\n\t\t\t\tconst hit = convertRaycastIntersect( hits[ i ], this, raycaster );\n\t\t\t\tif ( hit ) {\n\n\t\t\t\t\tintersects.push( hit );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\torigMeshRaycastFunc.call( this, raycaster, intersects );\n\n\t}\n\n}\n\nexport function computeBoundsTree( options = {} ) {\n\n\tthis.boundsTree = new MeshBVH( this, options );\n\treturn this.boundsTree;\n\n}\n\nexport function disposeBoundsTree() {\n\n\tthis.boundsTree = null;\n\n}\n\nexport function computeBatchedBoundsTree( index = - 1, options = {} ) {\n\n\tif ( ! IS_REVISION_166 ) {\n\n\t\tthrow new Error( 'BatchedMesh: Three r166+ is required to compute bounds trees.' );\n\n\t}\n\n\tif ( options.indirect ) {\n\n\t\tconsole.warn( '\"Indirect\" is set to false because it is not supported for BatchedMesh.' );\n\n\t}\n\n\toptions = {\n\t\t...options,\n\t\tindirect: false,\n\t\trange: null\n\t};\n\n\tconst drawRanges = this._drawRanges || this._geometryInfo;\n\tconst geometryCount = this._geometryCount;\n\tif ( ! this.boundsTrees ) {\n\n\t\tthis.boundsTrees = new Array( geometryCount ).fill( null );\n\n\t}\n\n\tconst boundsTrees = this.boundsTrees;\n\twhile ( boundsTrees.length < geometryCount ) {\n\n\t\tboundsTrees.push( null );\n\n\t}\n\n\tif ( index < 0 ) {\n\n\t\tfor ( let i = 0; i < geometryCount; i ++ ) {\n\n\t\t\toptions.range = drawRanges[ i ];\n\t\t\tboundsTrees[ i ] = new MeshBVH( this.geometry, options );\n\n\t\t}\n\n\t\treturn boundsTrees;\n\n\t} else {\n\n\t\tif ( index < drawRanges.length ) {\n\n\t\t\toptions.range = drawRanges[ index ];\n\t\t\tboundsTrees[ index ] = new MeshBVH( this.geometry, options );\n\n\t\t}\n\n\t\treturn boundsTrees[ index ] || null;\n\n\t}\n\n}\n\nexport function disposeBatchedBoundsTree( index = - 1 ) {\n\n\tif ( index < 0 ) {\n\n\t\tthis.boundsTrees.fill( null );\n\n\t} else {\n\n\t\tif ( index < this.boundsTree.length ) {\n\n\t\t\tthis.boundsTrees[ index ] = null;\n\n\t\t}\n\n\t}\n\n}\n","import {\n\tDataTexture,\n\tFloatType,\n\tIntType,\n\tUnsignedIntType,\n\tByteType,\n\tUnsignedByteType,\n\tShortType,\n\tUnsignedShortType,\n\n\tRedFormat,\n\tRGFormat,\n\tRGBAFormat,\n\n\tRedIntegerFormat,\n\tRGIntegerFormat,\n\tRGBAIntegerFormat,\n\n\tNearestFilter,\n} from 'three';\n\nfunction countToStringFormat( count ) {\n\n\tswitch ( count ) {\n\n\t\tcase 1: return 'R';\n\t\tcase 2: return 'RG';\n\t\tcase 3: return 'RGBA';\n\t\tcase 4: return 'RGBA';\n\n\t}\n\n\tthrow new Error();\n\n}\n\nfunction countToFormat( count ) {\n\n\tswitch ( count ) {\n\n\t\tcase 1: return RedFormat;\n\t\tcase 2: return RGFormat;\n\t\tcase 3: return RGBAFormat;\n\t\tcase 4: return RGBAFormat;\n\n\t}\n\n}\n\nfunction countToIntFormat( count ) {\n\n\tswitch ( count ) {\n\n\t\tcase 1: return RedIntegerFormat;\n\t\tcase 2: return RGIntegerFormat;\n\t\tcase 3: return RGBAIntegerFormat;\n\t\tcase 4: return RGBAIntegerFormat;\n\n\t}\n\n}\n\nexport class VertexAttributeTexture extends DataTexture {\n\n\tconstructor() {\n\n\t\tsuper();\n\t\tthis.minFilter = NearestFilter;\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.generateMipmaps = false;\n\t\tthis.overrideItemSize = null;\n\t\tthis._forcedType = null;\n\n\t}\n\n\tupdateFrom( attr ) {\n\n\t\tconst overrideItemSize = this.overrideItemSize;\n\t\tconst originalItemSize = attr.itemSize;\n\t\tconst originalCount = attr.count;\n\t\tif ( overrideItemSize !== null ) {\n\n\t\t\tif ( ( originalItemSize * originalCount ) % overrideItemSize !== 0.0 ) {\n\n\t\t\t\tthrow new Error( 'VertexAttributeTexture: overrideItemSize must divide evenly into buffer length.' );\n\n\t\t\t}\n\n\t\t\tattr.itemSize = overrideItemSize;\n\t\t\tattr.count = originalCount * originalItemSize / overrideItemSize;\n\n\t\t}\n\n\t\tconst itemSize = attr.itemSize;\n\t\tconst count = attr.count;\n\t\tconst normalized = attr.normalized;\n\t\tconst originalBufferCons = attr.array.constructor;\n\t\tconst byteCount = originalBufferCons.BYTES_PER_ELEMENT;\n\t\tlet targetType = this._forcedType;\n\t\tlet finalStride = itemSize;\n\n\t\t// derive the type of texture this should be in the shader\n\t\tif ( targetType === null ) {\n\n\t\t\tswitch ( originalBufferCons ) {\n\n\t\t\t\tcase Float32Array:\n\t\t\t\t\ttargetType = FloatType;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase Uint8Array:\n\t\t\t\tcase Uint16Array:\n\t\t\t\tcase Uint32Array:\n\t\t\t\t\ttargetType = UnsignedIntType;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase Int8Array:\n\t\t\t\tcase Int16Array:\n\t\t\t\tcase Int32Array:\n\t\t\t\t\ttargetType = IntType;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// get the target format to store the texture as\n\t\tlet type, format, normalizeValue, targetBufferCons;\n\t\tlet internalFormat = countToStringFormat( itemSize );\n\t\tswitch ( targetType ) {\n\n\t\t\tcase FloatType:\n\t\t\t\tnormalizeValue = 1.0;\n\t\t\t\tformat = countToFormat( itemSize );\n\n\t\t\t\tif ( normalized && byteCount === 1 ) {\n\n\t\t\t\t\ttargetBufferCons = originalBufferCons;\n\t\t\t\t\tinternalFormat += '8';\n\n\t\t\t\t\tif ( originalBufferCons === Uint8Array ) {\n\n\t\t\t\t\t\ttype = UnsignedByteType;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttype = ByteType;\n\t\t\t\t\t\tinternalFormat += '_SNORM';\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttargetBufferCons = Float32Array;\n\t\t\t\t\tinternalFormat += '32F';\n\t\t\t\t\ttype = FloatType;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase IntType:\n\t\t\t\tinternalFormat += byteCount * 8 + 'I';\n\t\t\t\tnormalizeValue = normalized ? Math.pow( 2, originalBufferCons.BYTES_PER_ELEMENT * 8 - 1 ) : 1.0;\n\t\t\t\tformat = countToIntFormat( itemSize );\n\n\t\t\t\tif ( byteCount === 1 ) {\n\n\t\t\t\t\ttargetBufferCons = Int8Array;\n\t\t\t\t\ttype = ByteType;\n\n\t\t\t\t} else if ( byteCount === 2 ) {\n\n\t\t\t\t\ttargetBufferCons = Int16Array;\n\t\t\t\t\ttype = ShortType;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttargetBufferCons = Int32Array;\n\t\t\t\t\ttype = IntType;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase UnsignedIntType:\n\t\t\t\tinternalFormat += byteCount * 8 + 'UI';\n\t\t\t\tnormalizeValue = normalized ? Math.pow( 2, originalBufferCons.BYTES_PER_ELEMENT * 8 - 1 ) : 1.0;\n\t\t\t\tformat = countToIntFormat( itemSize );\n\n\t\t\t\tif ( byteCount === 1 ) {\n\n\t\t\t\t\ttargetBufferCons = Uint8Array;\n\t\t\t\t\ttype = UnsignedByteType;\n\n\t\t\t\t} else if ( byteCount === 2 ) {\n\n\t\t\t\t\ttargetBufferCons = Uint16Array;\n\t\t\t\t\ttype = UnsignedShortType;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttargetBufferCons = Uint32Array;\n\t\t\t\t\ttype = UnsignedIntType;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\t// there will be a mismatch between format length and final length because\n\t\t// RGBFormat and RGBIntegerFormat was removed\n\t\tif ( finalStride === 3 && ( format === RGBAFormat || format === RGBAIntegerFormat ) ) {\n\n\t\t\tfinalStride = 4;\n\n\t\t}\n\n\t\t// copy the data over to the new texture array\n\t\tconst dimension = Math.ceil( Math.sqrt( count ) ) || 1;\n\t\tconst length = finalStride * dimension * dimension;\n\t\tconst dataArray = new targetBufferCons( length );\n\n\t\t// temporarily set the normalized state to false since we have custom normalization logic\n\t\tconst originalNormalized = attr.normalized;\n\t\tattr.normalized = false;\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tconst ii = finalStride * i;\n\t\t\tdataArray[ ii ] = attr.getX( i ) / normalizeValue;\n\n\t\t\tif ( itemSize >= 2 ) {\n\n\t\t\t\tdataArray[ ii + 1 ] = attr.getY( i ) / normalizeValue;\n\n\t\t\t}\n\n\t\t\tif ( itemSize >= 3 ) {\n\n\t\t\t\tdataArray[ ii + 2 ] = attr.getZ( i ) / normalizeValue;\n\n\t\t\t\tif ( finalStride === 4 ) {\n\n\t\t\t\t\tdataArray[ ii + 3 ] = 1.0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( itemSize >= 4 ) {\n\n\t\t\t\tdataArray[ ii + 3 ] = attr.getW( i ) / normalizeValue;\n\n\t\t\t}\n\n\t\t}\n\n\t\tattr.normalized = originalNormalized;\n\n\t\tthis.internalFormat = internalFormat;\n\t\tthis.format = format;\n\t\tthis.type = type;\n\t\tthis.image.width = dimension;\n\t\tthis.image.height = dimension;\n\t\tthis.image.data = dataArray;\n\t\tthis.needsUpdate = true;\n\t\tthis.dispose();\n\n\t\tattr.itemSize = originalItemSize;\n\t\tattr.count = originalCount;\n\n\t}\n\n}\n\nexport class UIntVertexAttributeTexture extends VertexAttributeTexture {\n\n\tconstructor() {\n\n\t\tsuper();\n\t\tthis._forcedType = UnsignedIntType;\n\n\t}\n\n}\n\nexport class IntVertexAttributeTexture extends VertexAttributeTexture {\n\n\tconstructor() {\n\n\t\tsuper();\n\t\tthis._forcedType = IntType;\n\n\t}\n\n\n}\n\nexport class FloatVertexAttributeTexture extends VertexAttributeTexture {\n\n\tconstructor() {\n\n\t\tsuper();\n\t\tthis._forcedType = FloatType;\n\n\t}\n\n}\n","import {\n\tDataTexture,\n\tFloatType,\n\tUnsignedIntType,\n\tRGBAFormat,\n\tRGIntegerFormat,\n\tNearestFilter,\n\tBufferAttribute,\n} from 'three';\nimport {\n\tFloatVertexAttributeTexture,\n\tUIntVertexAttributeTexture,\n} from './VertexAttributeTexture.js';\nimport { BYTES_PER_NODE } from '../core/Constants.js';\nimport {\n\tBOUNDING_DATA_INDEX,\n\tCOUNT,\n\tIS_LEAF,\n\tRIGHT_NODE,\n\tOFFSET,\n\tSPLIT_AXIS,\n} from '../core/utils/nodeBufferUtils.js';\nimport { getIndexArray, getVertexCount } from '../core/build/geometryUtils.js';\n\nexport class MeshBVHUniformStruct {\n\n\tconstructor() {\n\n\t\tthis.index = new UIntVertexAttributeTexture();\n\t\tthis.position = new FloatVertexAttributeTexture();\n\t\tthis.bvhBounds = new DataTexture();\n\t\tthis.bvhContents = new DataTexture();\n\t\tthis._cachedIndexAttr = null;\n\n\t\tthis.index.overrideItemSize = 3;\n\n\t}\n\n\tupdateFrom( bvh ) {\n\n\t\tconst { geometry } = bvh;\n\t\tbvhToTextures( bvh, this.bvhBounds, this.bvhContents );\n\n\t\tthis.position.updateFrom( geometry.attributes.position );\n\n\t\t// dereference a new index attribute if we're using indirect storage\n\t\tif ( bvh.indirect ) {\n\n\t\t\tconst indirectBuffer = bvh._indirectBuffer;\n\t\t\tif (\n\t\t\t\tthis._cachedIndexAttr === null ||\n\t\t\t\tthis._cachedIndexAttr.count !== indirectBuffer.length\n\t\t\t) {\n\n\t\t\t\tif ( geometry.index ) {\n\n\t\t\t\t\tthis._cachedIndexAttr = geometry.index.clone();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst array = getIndexArray( getVertexCount( geometry ) );\n\t\t\t\t\tthis._cachedIndexAttr = new BufferAttribute( array, 1, false );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tdereferenceIndex( geometry, indirectBuffer, this._cachedIndexAttr );\n\t\t\tthis.index.updateFrom( this._cachedIndexAttr );\n\n\t\t} else {\n\n\t\t\tthis.index.updateFrom( geometry.index );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tconst { index, position, bvhBounds, bvhContents } = this;\n\n\t\tif ( index ) index.dispose();\n\t\tif ( position ) position.dispose();\n\t\tif ( bvhBounds ) bvhBounds.dispose();\n\t\tif ( bvhContents ) bvhContents.dispose();\n\n\t}\n\n}\n\nfunction dereferenceIndex( geometry, indirectBuffer, target ) {\n\n\tconst unpacked = target.array;\n\tconst indexArray = geometry.index ? geometry.index.array : null;\n\tfor ( let i = 0, l = indirectBuffer.length; i < l; i ++ ) {\n\n\t\tconst i3 = 3 * i;\n\t\tconst v3 = 3 * indirectBuffer[ i ];\n\t\tfor ( let c = 0; c < 3; c ++ ) {\n\n\t\t\tunpacked[ i3 + c ] = indexArray ? indexArray[ v3 + c ] : v3 + c;\n\n\t\t}\n\n\t}\n\n}\n\nfunction bvhToTextures( bvh, boundsTexture, contentsTexture ) {\n\n\tconst roots = bvh._roots;\n\n\tif ( roots.length !== 1 ) {\n\n\t\tthrow new Error( 'MeshBVHUniformStruct: Multi-root BVHs not supported.' );\n\n\t}\n\n\tconst root = roots[ 0 ];\n\tconst uint16Array = new Uint16Array( root );\n\tconst uint32Array = new Uint32Array( root );\n\tconst float32Array = new Float32Array( root );\n\n\t// Both bounds need two elements per node so compute the height so it's twice as long as\n\t// the width so we can expand the row by two and still have a square texture\n\tconst nodeCount = root.byteLength / BYTES_PER_NODE;\n\tconst boundsDimension = 2 * Math.ceil( Math.sqrt( nodeCount / 2 ) );\n\tconst boundsArray = new Float32Array( 4 * boundsDimension * boundsDimension );\n\n\tconst contentsDimension = Math.ceil( Math.sqrt( nodeCount ) );\n\tconst contentsArray = new Uint32Array( 2 * contentsDimension * contentsDimension );\n\n\tfor ( let i = 0; i < nodeCount; i ++ ) {\n\n\t\tconst nodeIndex32 = i * BYTES_PER_NODE / 4;\n\t\tconst nodeIndex16 = nodeIndex32 * 2;\n\t\tconst boundsIndex = BOUNDING_DATA_INDEX( nodeIndex32 );\n\t\tfor ( let b = 0; b < 3; b ++ ) {\n\n\t\t\tboundsArray[ 8 * i + 0 + b ] = float32Array[ boundsIndex + 0 + b ];\n\t\t\tboundsArray[ 8 * i + 4 + b ] = float32Array[ boundsIndex + 3 + b ];\n\n\t\t}\n\n\t\tif ( IS_LEAF( nodeIndex16, uint16Array ) ) {\n\n\t\t\tconst count = COUNT( nodeIndex16, uint16Array );\n\t\t\tconst offset = OFFSET( nodeIndex32, uint32Array );\n\n\t\t\tconst mergedLeafCount = 0xffff0000 | count;\n\t\t\tcontentsArray[ i * 2 + 0 ] = mergedLeafCount;\n\t\t\tcontentsArray[ i * 2 + 1 ] = offset;\n\n\t\t} else {\n\n\t\t\tconst rightIndex = 4 * RIGHT_NODE( nodeIndex32, uint32Array ) / BYTES_PER_NODE;\n\t\t\tconst splitAxis = SPLIT_AXIS( nodeIndex32, uint32Array );\n\n\t\t\tcontentsArray[ i * 2 + 0 ] = splitAxis;\n\t\t\tcontentsArray[ i * 2 + 1 ] = rightIndex;\n\n\t\t}\n\n\t}\n\n\tboundsTexture.image.data = boundsArray;\n\tboundsTexture.image.width = boundsDimension;\n\tboundsTexture.image.height = boundsDimension;\n\tboundsTexture.format = RGBAFormat;\n\tboundsTexture.type = FloatType;\n\tboundsTexture.internalFormat = 'RGBA32F';\n\tboundsTexture.minFilter = NearestFilter;\n\tboundsTexture.magFilter = NearestFilter;\n\tboundsTexture.generateMipmaps = false;\n\tboundsTexture.needsUpdate = true;\n\tboundsTexture.dispose();\n\n\tcontentsTexture.image.data = contentsArray;\n\tcontentsTexture.image.width = contentsDimension;\n\tcontentsTexture.image.height = contentsDimension;\n\tcontentsTexture.format = RGIntegerFormat;\n\tcontentsTexture.type = UnsignedIntType;\n\tcontentsTexture.internalFormat = 'RG32UI';\n\tcontentsTexture.minFilter = NearestFilter;\n\tcontentsTexture.magFilter = NearestFilter;\n\tcontentsTexture.generateMipmaps = false;\n\tcontentsTexture.needsUpdate = true;\n\tcontentsTexture.dispose();\n\n}\n","export const common_functions = /* glsl */`\n\n// A stack of uint32 indices can can store the indices for\n// a perfectly balanced tree with a depth up to 31. Lower stack\n// depth gets higher performance.\n//\n// However not all trees are balanced. Best value to set this to\n// is the trees max depth.\n#ifndef BVH_STACK_DEPTH\n#define BVH_STACK_DEPTH 60\n#endif\n\n#ifndef INFINITY\n#define INFINITY 1e20\n#endif\n\n// Utilities\nuvec4 uTexelFetch1D( usampler2D tex, uint index ) {\n\n\tuint width = uint( textureSize( tex, 0 ).x );\n\tuvec2 uv;\n\tuv.x = index % width;\n\tuv.y = index / width;\n\n\treturn texelFetch( tex, ivec2( uv ), 0 );\n\n}\n\nivec4 iTexelFetch1D( isampler2D tex, uint index ) {\n\n\tuint width = uint( textureSize( tex, 0 ).x );\n\tuvec2 uv;\n\tuv.x = index % width;\n\tuv.y = index / width;\n\n\treturn texelFetch( tex, ivec2( uv ), 0 );\n\n}\n\nvec4 texelFetch1D( sampler2D tex, uint index ) {\n\n\tuint width = uint( textureSize( tex, 0 ).x );\n\tuvec2 uv;\n\tuv.x = index % width;\n\tuv.y = index / width;\n\n\treturn texelFetch( tex, ivec2( uv ), 0 );\n\n}\n\nvec4 textureSampleBarycoord( sampler2D tex, vec3 barycoord, uvec3 faceIndices ) {\n\n\treturn\n\t\tbarycoord.x * texelFetch1D( tex, faceIndices.x ) +\n\t\tbarycoord.y * texelFetch1D( tex, faceIndices.y ) +\n\t\tbarycoord.z * texelFetch1D( tex, faceIndices.z );\n\n}\n\nvoid ndcToCameraRay(\n\tvec2 coord, mat4 cameraWorld, mat4 invProjectionMatrix,\n\tout vec3 rayOrigin, out vec3 rayDirection\n) {\n\n\t// get camera look direction and near plane for camera clipping\n\tvec4 lookDirection = cameraWorld * vec4( 0.0, 0.0, - 1.0, 0.0 );\n\tvec4 nearVector = invProjectionMatrix * vec4( 0.0, 0.0, - 1.0, 1.0 );\n\tfloat near = abs( nearVector.z / nearVector.w );\n\n\t// get the camera direction and position from camera matrices\n\tvec4 origin = cameraWorld * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec4 direction = invProjectionMatrix * vec4( coord, 0.5, 1.0 );\n\tdirection /= direction.w;\n\tdirection = cameraWorld * direction - origin;\n\n\t// slide the origin along the ray until it sits at the near clip plane position\n\torigin.xyz += direction.xyz * near / dot( direction, lookDirection );\n\n\trayOrigin = origin.xyz;\n\trayDirection = direction.xyz;\n\n}\n`;\n","export const bvh_ray_functions = /* glsl */`\n\n#ifndef TRI_INTERSECT_EPSILON\n#define TRI_INTERSECT_EPSILON 1e-5\n#endif\n\n// Raycasting\nbool intersectsBounds( vec3 rayOrigin, vec3 rayDirection, vec3 boundsMin, vec3 boundsMax, out float dist ) {\n\n\t// https://www.reddit.com/r/opengl/comments/8ntzz5/fast_glsl_ray_box_intersection/\n\t// https://tavianator.com/2011/ray_box.html\n\tvec3 invDir = 1.0 / rayDirection;\n\n\t// find intersection distances for each plane\n\tvec3 tMinPlane = invDir * ( boundsMin - rayOrigin );\n\tvec3 tMaxPlane = invDir * ( boundsMax - rayOrigin );\n\n\t// get the min and max distances from each intersection\n\tvec3 tMinHit = min( tMaxPlane, tMinPlane );\n\tvec3 tMaxHit = max( tMaxPlane, tMinPlane );\n\n\t// get the furthest hit distance\n\tvec2 t = max( tMinHit.xx, tMinHit.yz );\n\tfloat t0 = max( t.x, t.y );\n\n\t// get the minimum hit distance\n\tt = min( tMaxHit.xx, tMaxHit.yz );\n\tfloat t1 = min( t.x, t.y );\n\n\t// set distance to 0.0 if the ray starts inside the box\n\tdist = max( t0, 0.0 );\n\n\treturn t1 >= dist;\n\n}\n\nbool intersectsTriangle(\n\tvec3 rayOrigin, vec3 rayDirection, vec3 a, vec3 b, vec3 c,\n\tout vec3 barycoord, out vec3 norm, out float dist, out float side\n) {\n\n\t// https://stackoverflow.com/questions/42740765/intersection-between-line-and-triangle-in-3d\n\tvec3 edge1 = b - a;\n\tvec3 edge2 = c - a;\n\tnorm = cross( edge1, edge2 );\n\n\tfloat det = - dot( rayDirection, norm );\n\tfloat invdet = 1.0 / det;\n\n\tvec3 AO = rayOrigin - a;\n\tvec3 DAO = cross( AO, rayDirection );\n\n\tvec4 uvt;\n\tuvt.x = dot( edge2, DAO ) * invdet;\n\tuvt.y = - dot( edge1, DAO ) * invdet;\n\tuvt.z = dot( AO, norm ) * invdet;\n\tuvt.w = 1.0 - uvt.x - uvt.y;\n\n\t// set the hit information\n\tbarycoord = uvt.wxy; // arranged in A, B, C order\n\tdist = uvt.z;\n\tside = sign( det );\n\tnorm = side * normalize( norm );\n\n\t// add an epsilon to avoid misses between triangles\n\tuvt += vec4( TRI_INTERSECT_EPSILON );\n\n\treturn all( greaterThanEqual( uvt, vec4( 0.0 ) ) );\n\n}\n\nbool intersectTriangles(\n\t// geometry info and triangle range\n\tsampler2D positionAttr, usampler2D indexAttr, uint offset, uint count,\n\n\t// ray\n\tvec3 rayOrigin, vec3 rayDirection,\n\n\t// outputs\n\tinout float minDistance, inout uvec4 faceIndices, inout vec3 faceNormal, inout vec3 barycoord,\n\tinout float side, inout float dist\n) {\n\n\tbool found = false;\n\tvec3 localBarycoord, localNormal;\n\tfloat localDist, localSide;\n\tfor ( uint i = offset, l = offset + count; i < l; i ++ ) {\n\n\t\tuvec3 indices = uTexelFetch1D( indexAttr, i ).xyz;\n\t\tvec3 a = texelFetch1D( positionAttr, indices.x ).rgb;\n\t\tvec3 b = texelFetch1D( positionAttr, indices.y ).rgb;\n\t\tvec3 c = texelFetch1D( positionAttr, indices.z ).rgb;\n\n\t\tif (\n\t\t\tintersectsTriangle( rayOrigin, rayDirection, a, b, c, localBarycoord, localNormal, localDist, localSide )\n\t\t\t&& localDist < minDistance\n\t\t) {\n\n\t\t\tfound = true;\n\t\t\tminDistance = localDist;\n\n\t\t\tfaceIndices = uvec4( indices.xyz, i );\n\t\t\tfaceNormal = localNormal;\n\n\t\t\tside = localSide;\n\t\t\tbarycoord = localBarycoord;\n\t\t\tdist = localDist;\n\n\t\t}\n\n\t}\n\n\treturn found;\n\n}\n\nbool intersectsBVHNodeBounds( vec3 rayOrigin, vec3 rayDirection, sampler2D bvhBounds, uint currNodeIndex, out float dist ) {\n\n\tuint cni2 = currNodeIndex * 2u;\n\tvec3 boundsMin = texelFetch1D( bvhBounds, cni2 ).xyz;\n\tvec3 boundsMax = texelFetch1D( bvhBounds, cni2 + 1u ).xyz;\n\treturn intersectsBounds( rayOrigin, rayDirection, boundsMin, boundsMax, dist );\n\n}\n\n// use a macro to hide the fact that we need to expand the struct into separate fields\n#define\\\n\tbvhIntersectFirstHit(\\\n\t\tbvh,\\\n\t\trayOrigin, rayDirection, faceIndices, faceNormal, barycoord, side, dist\\\n\t)\\\n\t_bvhIntersectFirstHit(\\\n\t\tbvh.position, bvh.index, bvh.bvhBounds, bvh.bvhContents,\\\n\t\trayOrigin, rayDirection, faceIndices, faceNormal, barycoord, side, dist\\\n\t)\n\nbool _bvhIntersectFirstHit(\n\t// bvh info\n\tsampler2D bvh_position, usampler2D bvh_index, sampler2D bvh_bvhBounds, usampler2D bvh_bvhContents,\n\n\t// ray\n\tvec3 rayOrigin, vec3 rayDirection,\n\n\t// output variables split into separate variables due to output precision\n\tinout uvec4 faceIndices, inout vec3 faceNormal, inout vec3 barycoord,\n\tinout float side, inout float dist\n) {\n\n\t// stack needs to be twice as long as the deepest tree we expect because\n\t// we push both the left and right child onto the stack every traversal\n\tint ptr = 0;\n\tuint stack[ BVH_STACK_DEPTH ];\n\tstack[ 0 ] = 0u;\n\n\tfloat triangleDistance = INFINITY;\n\tbool found = false;\n\twhile ( ptr > - 1 && ptr < BVH_STACK_DEPTH ) {\n\n\t\tuint currNodeIndex = stack[ ptr ];\n\t\tptr --;\n\n\t\t// check if we intersect the current bounds\n\t\tfloat boundsHitDistance;\n\t\tif (\n\t\t\t! intersectsBVHNodeBounds( rayOrigin, rayDirection, bvh_bvhBounds, currNodeIndex, boundsHitDistance )\n\t\t\t|| boundsHitDistance > triangleDistance\n\t\t) {\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tuvec2 boundsInfo = uTexelFetch1D( bvh_bvhContents, currNodeIndex ).xy;\n\t\tbool isLeaf = bool( boundsInfo.x & 0xffff0000u );\n\n\t\tif ( isLeaf ) {\n\n\t\t\tuint count = boundsInfo.x & 0x0000ffffu;\n\t\t\tuint offset = boundsInfo.y;\n\n\t\t\tfound = intersectTriangles(\n\t\t\t\tbvh_position, bvh_index, offset, count,\n\t\t\t\trayOrigin, rayDirection, triangleDistance,\n\t\t\t\tfaceIndices, faceNormal, barycoord, side, dist\n\t\t\t) || found;\n\n\t\t} else {\n\n\t\t\tuint leftIndex = currNodeIndex + 1u;\n\t\t\tuint splitAxis = boundsInfo.x & 0x0000ffffu;\n\t\t\tuint rightIndex = boundsInfo.y;\n\n\t\t\tbool leftToRight = rayDirection[ splitAxis ] >= 0.0;\n\t\t\tuint c1 = leftToRight ? leftIndex : rightIndex;\n\t\t\tuint c2 = leftToRight ? rightIndex : leftIndex;\n\n\t\t\t// set c2 in the stack so we traverse it later. We need to keep track of a pointer in\n\t\t\t// the stack while we traverse. The second pointer added is the one that will be\n\t\t\t// traversed first\n\t\t\tptr ++;\n\t\t\tstack[ ptr ] = c2;\n\n\t\t\tptr ++;\n\t\t\tstack[ ptr ] = c1;\n\n\t\t}\n\n\t}\n\n\treturn found;\n\n}\n`;\n","// Note that a struct cannot be used for the hit record including faceIndices, faceNormal, barycoord,\n// side, and dist because on some mobile GPUS (such as Adreno) numbers are afforded less precision specifically\n// when in a struct leading to inaccurate hit results. See KhronosGroup/WebGL#3351 for more details.\nexport const bvh_struct_definitions = /* glsl */`\nstruct BVH {\n\n\tusampler2D index;\n\tsampler2D position;\n\n\tsampler2D bvhBounds;\n\tusampler2D bvhContents;\n\n};\n`;\n","export { MeshBVH } from './core/MeshBVH.js';\nexport { MeshBVHHelper } from './objects/MeshBVHHelper.js';\nexport { CENTER, AVERAGE, SAH, NOT_INTERSECTED, INTERSECTED, CONTAINED } from './core/Constants.js';\nexport { getBVHExtremes, estimateMemoryInBytes, getJSONStructure, validateBounds } from './debug/Debug.js';\nexport * from './utils/ExtensionUtilities.js';\nexport { getTriangleHitPointInfo } from './utils/TriangleUtilities.js';\nexport * from './math/ExtendedTriangle.js';\nexport * from './math/OrientedBox.js';\nexport * from './gpu/MeshBVHUniformStruct.js';\nexport * from './gpu/VertexAttributeTexture.js';\nexport * from './utils/StaticGeometryGenerator.js';\nexport * as BVHShaderGLSL from './gpu/BVHShaderGLSL.js';\n\n// backwards compatibility\nimport * as BVHShaderGLSL from './gpu/BVHShaderGLSL.js';\nexport const shaderStructs = BVHShaderGLSL.bvh_struct_definitions;\nexport const shaderDistanceFunction = BVHShaderGLSL.bvh_distance_functions;\nexport const shaderIntersectFunction = `\n\t${ BVHShaderGLSL.common_functions }\n\t${ BVHShaderGLSL.bvh_ray_functions }\n`;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useThree } from '@react-three/fiber';\nimport * as React from 'react';\nimport { Mesh } from 'three';\nimport { SAH, acceleratedRaycast, computeBoundsTree, disposeBoundsTree } from 'three-mesh-bvh';\n\nconst isMesh = child => child.isMesh;\n\n/**\n * @deprecated Use the Bvh component instead\n */\nfunction useBVH(mesh, options) {\n options = {\n strategy: SAH,\n verbose: false,\n setBoundingBox: true,\n maxDepth: 40,\n maxLeafTris: 10,\n indirect: false,\n ...options\n };\n React.useEffect(() => {\n if (mesh.current) {\n mesh.current.raycast = acceleratedRaycast;\n const geometry = mesh.current.geometry;\n geometry.computeBoundsTree = computeBoundsTree;\n geometry.disposeBoundsTree = disposeBoundsTree;\n geometry.computeBoundsTree(options);\n return () => {\n if (geometry.boundsTree) {\n geometry.disposeBoundsTree();\n }\n };\n }\n }, [mesh, JSON.stringify(options)]);\n}\nconst Bvh = /* @__PURE__ */React.forwardRef(({\n enabled = true,\n firstHitOnly = false,\n children,\n strategy = SAH,\n verbose = false,\n setBoundingBox = true,\n maxDepth = 40,\n maxLeafTris = 10,\n indirect = false,\n ...props\n}, fref) => {\n const ref = React.useRef(null);\n const raycaster = useThree(state => state.raycaster);\n React.useImperativeHandle(fref, () => ref.current, []);\n React.useEffect(() => {\n if (enabled) {\n const options = {\n strategy,\n verbose,\n setBoundingBox,\n maxDepth,\n maxLeafTris,\n indirect\n };\n const group = ref.current;\n // This can only safely work if the component is used once, but there is no alternative.\n // Hijacking the raycast method to do it for individual meshes is not an option as it would\n // cost too much memory ...\n raycaster.firstHitOnly = firstHitOnly;\n group.traverse(child => {\n // Only include meshes that do not yet have a boundsTree and whose raycast is standard issue\n if (isMesh(child) && !child.geometry.boundsTree && child.raycast === Mesh.prototype.raycast) {\n child.raycast = acceleratedRaycast;\n child.geometry.computeBoundsTree = computeBoundsTree;\n child.geometry.disposeBoundsTree = disposeBoundsTree;\n child.geometry.computeBoundsTree(options);\n }\n });\n return () => {\n delete raycaster.firstHitOnly;\n group.traverse(child => {\n if (isMesh(child) && child.geometry.boundsTree) {\n child.geometry.disposeBoundsTree();\n child.raycast = Mesh.prototype.raycast;\n }\n });\n };\n }\n }, []);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref\n }, props), children);\n});\n\nexport { Bvh, useBVH };\n","import * as React from 'react';\n\n/* eslint-disable react-hooks/rules-of-hooks */\nfunction useContextBridge(...contexts) {\n const cRef = React.useRef([]);\n cRef.current = contexts.map(context => React.useContext(context));\n return React.useMemo(() => ({\n children\n }) => contexts.reduceRight((acc, Context, i) => /*#__PURE__*/React.createElement(Context.Provider, {\n value: cRef.current[i],\n children: acc\n }), children\n /*\n * done this way in reference to:\n * https://github.com/DefinitelyTyped/DefinitelyTyped/issues/44572#issuecomment-625878049\n * https://github.com/microsoft/TypeScript/issues/14729\n */), []);\n}\n\nexport { useContextBridge };\n","import * as React from 'react';\nimport { Object3D, AnimationMixer } from 'three';\nimport { useFrame } from '@react-three/fiber';\n\nfunction useAnimations(clips, root) {\n const ref = React.useRef(null);\n const [actualRef] = React.useState(() => root ? root instanceof Object3D ? {\n current: root\n } : root : ref);\n const [mixer] = React.useState(() => new AnimationMixer(undefined));\n React.useLayoutEffect(() => {\n if (root) actualRef.current = root instanceof Object3D ? root : root.current;\n mixer._root = actualRef.current;\n });\n const lazyActions = React.useRef({});\n const api = React.useMemo(() => {\n const actions = {};\n clips.forEach(clip => Object.defineProperty(actions, clip.name, {\n enumerable: true,\n get() {\n if (actualRef.current) {\n return lazyActions.current[clip.name] || (lazyActions.current[clip.name] = mixer.clipAction(clip, actualRef.current));\n }\n },\n configurable: true\n }));\n return {\n ref: actualRef,\n clips,\n actions,\n names: clips.map(c => c.name),\n mixer\n };\n }, [clips]);\n useFrame((state, delta) => mixer.update(delta));\n React.useEffect(() => {\n const currentRoot = actualRef.current;\n return () => {\n // Clean up only when clips change, wipe out lazy actions and uncache clips\n lazyActions.current = {};\n mixer.stopAllAction();\n Object.values(api.actions).forEach(action => {\n if (currentRoot) {\n mixer.uncacheAction(action, currentRoot);\n }\n });\n };\n }, [clips]);\n return api;\n}\n\nexport { useAnimations };\n","import * as React from 'react';\nimport { addEffect, addAfterEffect } from '@react-three/fiber';\n\nfunction useIntersect(onChange) {\n const ref = React.useRef(null);\n const check = React.useRef(false);\n const temp = React.useRef(false);\n const callback = React.useRef(onChange);\n React.useLayoutEffect(() => void (callback.current = onChange), [onChange]);\n React.useEffect(() => {\n const obj = ref.current;\n if (obj) {\n // Stamp out frustum check pre-emptively\n const unsub1 = addEffect(() => {\n check.current = false;\n return true;\n });\n // If the object is inside the frustum three will call onRender\n const oldOnRender = obj.onBeforeRender;\n obj.onBeforeRender = () => check.current = true;\n // Compare the check value against the temp value, if it differs set state\n const unsub2 = addAfterEffect(() => {\n if (check.current !== temp.current) callback.current == null || callback.current(temp.current = check.current);\n return true;\n });\n return () => {\n obj.onBeforeRender = oldOnRender;\n unsub1();\n unsub2();\n };\n }\n }, []);\n return ref;\n}\n\nexport { useIntersect };\n","import * as THREE from 'three';\nimport * as React from 'react';\nimport { applyProps } from '@react-three/fiber';\n\n// credits for the box-projecting shader code go to codercat (https://codercat.tk)\n// and @0beqz https://gist.github.com/0beqz/8d51b4ae16d68021a09fb504af708fca\n\nconst worldposReplace = /* glsl */`\n#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n #ifdef BOX_PROJECTED_ENV_MAP\n vWorldPosition = worldPosition.xyz;\n #endif\n#endif\n`;\nconst boxProjectDefinitions = /*glsl */`\n#ifdef BOX_PROJECTED_ENV_MAP\n uniform vec3 envMapSize;\n uniform vec3 envMapPosition;\n varying vec3 vWorldPosition;\n \n vec3 parallaxCorrectNormal( vec3 v, vec3 cubeSize, vec3 cubePos ) {\n vec3 nDir = normalize( v );\n vec3 rbmax = ( .5 * cubeSize + cubePos - vWorldPosition ) / nDir;\n vec3 rbmin = ( -.5 * cubeSize + cubePos - vWorldPosition ) / nDir;\n vec3 rbminmax;\n rbminmax.x = ( nDir.x > 0. ) ? rbmax.x : rbmin.x;\n rbminmax.y = ( nDir.y > 0. ) ? rbmax.y : rbmin.y;\n rbminmax.z = ( nDir.z > 0. ) ? rbmax.z : rbmin.z;\n float correction = min( min( rbminmax.x, rbminmax.y ), rbminmax.z );\n vec3 boxIntersection = vWorldPosition + nDir * correction; \n return boxIntersection - cubePos;\n }\n#endif\n`;\n\n// will be inserted after \"vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\"\nconst getIBLIrradiance_patch = /* glsl */`\n#ifdef BOX_PROJECTED_ENV_MAP\n worldNormal = parallaxCorrectNormal( worldNormal, envMapSize, envMapPosition );\n#endif\n`;\n\n// will be inserted after \"reflectVec = inverseTransformDirection( reflectVec, viewMatrix );\"\nconst getIBLRadiance_patch = /* glsl */`\n#ifdef BOX_PROJECTED_ENV_MAP\n reflectVec = parallaxCorrectNormal( reflectVec, envMapSize, envMapPosition );\n#endif\n`;\n\n// FIXME Replace with `THREE.WebGLProgramParametersWithUniforms` type when able to target @types/three@0.160.0\n\nfunction boxProjectedEnvMap(shader, envMapPosition, envMapSize) {\n // defines\n shader.defines.BOX_PROJECTED_ENV_MAP = true;\n // uniforms\n shader.uniforms.envMapPosition = {\n value: envMapPosition\n };\n shader.uniforms.envMapSize = {\n value: envMapSize\n };\n // vertex shader\n shader.vertexShader = `\n varying vec3 vWorldPosition;\n ${shader.vertexShader.replace('#include <worldpos_vertex>', worldposReplace)}`;\n // fragment shader\n shader.fragmentShader = `\n ${boxProjectDefinitions}\n ${shader.fragmentShader.replace('#include <envmap_physical_pars_fragment>', THREE.ShaderChunk.envmap_physical_pars_fragment).replace('vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );', `vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n ${getIBLIrradiance_patch}\n `).replace('reflectVec = inverseTransformDirection( reflectVec, viewMatrix );', `reflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n ${getIBLRadiance_patch}\n `)}`;\n}\nfunction useBoxProjectedEnv(position = new THREE.Vector3(), size = new THREE.Vector3()) {\n const [config] = React.useState(() => ({\n position: new THREE.Vector3(),\n size: new THREE.Vector3()\n }));\n applyProps(config, {\n position,\n size\n });\n const ref = React.useRef(null);\n const spread = React.useMemo(() => ({\n ref,\n onBeforeCompile: shader => boxProjectedEnvMap(shader, config.position, config.size),\n customProgramCacheKey: () => JSON.stringify(config.position.toArray()) + JSON.stringify(config.size.toArray())\n }), [...config.position.toArray(), ...config.size.toArray()]);\n React.useLayoutEffect(() => void (ref.current.needsUpdate = true), [config]);\n return spread;\n}\n\nexport { useBoxProjectedEnv };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { useFrame } from '@react-three/fiber';\n\nconst boundingBox = /* @__PURE__ */new THREE.Box3();\nconst boundingBoxSize = /* @__PURE__ */new THREE.Vector3();\nconst BBAnchor = ({\n anchor,\n ...props\n}) => {\n const ref = React.useRef(null);\n const parentRef = React.useRef(null);\n\n // Reattach group created by this component to the parent's parent,\n // so it becomes a sibling of its initial parent.\n // We do that so the children have no impact on a bounding box of a parent.\n React.useEffect(() => {\n var _ref$current;\n if ((_ref$current = ref.current) != null && (_ref$current = _ref$current.parent) != null && _ref$current.parent) {\n parentRef.current = ref.current.parent;\n ref.current.parent.parent.add(ref.current);\n }\n }, []);\n useFrame(() => {\n if (parentRef.current) {\n boundingBox.setFromObject(parentRef.current);\n boundingBox.getSize(boundingBoxSize);\n ref.current.position.set(parentRef.current.position.x + boundingBoxSize.x * (Array.isArray(anchor) ? anchor[0] : anchor.x) / 2, parentRef.current.position.y + boundingBoxSize.y * (Array.isArray(anchor) ? anchor[1] : anchor.y) / 2, parentRef.current.position.z + boundingBoxSize.z * (Array.isArray(anchor) ? anchor[2] : anchor.z) / 2);\n }\n });\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref\n }, props));\n};\n\nexport { BBAnchor };\n","import * as React from 'react';\nimport { useMemo, useCallback } from 'react';\nimport { useFrame } from '@react-three/fiber';\nimport { Texture } from 'three';\n\n// smooth new sample (measurement) based on previous sample (current)\nfunction smoothAverage(current, measurement, smoothing = 0.9) {\n return measurement * smoothing + current * (1.0 - smoothing);\n}\n\n// default ease\nconst easeCircleOut = x => Math.sqrt(1 - Math.pow(x - 1, 2));\nclass TrailTextureImpl {\n constructor({\n size = 256,\n maxAge = 750,\n radius = 0.3,\n intensity = 0.2,\n interpolate = 0,\n smoothing = 0,\n minForce = 0.3,\n blend = 'screen',\n // source-over is canvas default. Others are slower\n ease = easeCircleOut\n } = {}) {\n this.size = size;\n this.maxAge = maxAge;\n this.radius = radius;\n this.intensity = intensity;\n this.ease = ease;\n this.interpolate = interpolate;\n this.smoothing = smoothing;\n this.minForce = minForce;\n this.blend = blend;\n this.trail = [];\n this.force = 0;\n this.initTexture();\n }\n initTexture() {\n this.canvas = document.createElement('canvas');\n this.canvas.width = this.canvas.height = this.size;\n const ctx = this.canvas.getContext('2d');\n if (ctx === null) {\n throw new Error('2D not available');\n }\n this.ctx = ctx;\n this.ctx.fillStyle = 'black';\n this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n this.texture = new Texture(this.canvas);\n this.canvas.id = 'touchTexture';\n this.canvas.style.width = this.canvas.style.height = `${this.canvas.width}px`;\n }\n update(delta) {\n this.clear();\n\n // age points\n this.trail.forEach((point, i) => {\n point.age += delta * 1000;\n // remove old\n if (point.age > this.maxAge) {\n this.trail.splice(i, 1);\n }\n });\n\n // reset force when empty (when smoothing)\n if (!this.trail.length) this.force = 0;\n this.trail.forEach(point => {\n this.drawTouch(point);\n });\n this.texture.needsUpdate = true;\n }\n clear() {\n this.ctx.globalCompositeOperation = 'source-over';\n this.ctx.fillStyle = 'black';\n this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n }\n addTouch(point) {\n const last = this.trail[this.trail.length - 1];\n if (last) {\n const dx = last.x - point.x;\n const dy = last.y - point.y;\n const dd = dx * dx + dy * dy;\n const force = Math.max(this.minForce, Math.min(dd * 10000, 1));\n this.force = smoothAverage(force, this.force, this.smoothing);\n if (!!this.interpolate) {\n const lines = Math.ceil(dd / Math.pow(this.radius * 0.5 / this.interpolate, 2));\n if (lines > 1) {\n for (let i = 1; i < lines; i++) {\n this.trail.push({\n x: last.x - dx / lines * i,\n y: last.y - dy / lines * i,\n age: 0,\n force\n });\n }\n }\n }\n }\n this.trail.push({\n x: point.x,\n y: point.y,\n age: 0,\n force: this.force\n });\n }\n drawTouch(point) {\n const pos = {\n x: point.x * this.size,\n y: (1 - point.y) * this.size\n };\n let intensity = 1;\n if (point.age < this.maxAge * 0.3) {\n intensity = this.ease(point.age / (this.maxAge * 0.3));\n } else {\n intensity = this.ease(1 - (point.age - this.maxAge * 0.3) / (this.maxAge * 0.7));\n }\n intensity *= point.force;\n\n // apply blending\n this.ctx.globalCompositeOperation = this.blend;\n const radius = this.size * this.radius * intensity;\n const grd = this.ctx.createRadialGradient(pos.x, pos.y, Math.max(0, radius * 0.25), pos.x, pos.y, Math.max(0, radius));\n grd.addColorStop(0, `rgba(255, 255, 255, ${this.intensity})`);\n grd.addColorStop(1, `rgba(0, 0, 0, 0.0)`);\n this.ctx.beginPath();\n this.ctx.fillStyle = grd;\n this.ctx.arc(pos.x, pos.y, Math.max(0, radius), 0, Math.PI * 2);\n this.ctx.fill();\n }\n}\nfunction useTrailTexture(config = {}) {\n const {\n size,\n maxAge,\n radius,\n intensity,\n interpolate,\n smoothing,\n minForce,\n blend,\n ease\n } = config;\n const trail = useMemo(() => new TrailTextureImpl(config), [size, maxAge, radius, intensity, interpolate, smoothing, minForce, blend, ease]);\n useFrame((_, delta) => void trail.update(delta));\n const onMove = useCallback(e => trail.addTouch(e.uv), [trail]);\n return [trail.texture, onMove];\n}\n\n//\n\nconst TrailTexture = ({\n children,\n ...config\n}) => {\n const ret = useTrailTexture(config);\n return /*#__PURE__*/React.createElement(React.Fragment, null, children == null ? void 0 : children(ret));\n};\n\nexport { TrailTexture, useTrailTexture };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { Box3, Vector3, Sphere } from 'three';\nimport * as React from 'react';\n\nconst Center = /* @__PURE__ */React.forwardRef(function Center({\n children,\n object,\n disable,\n disableX,\n disableY,\n disableZ,\n left,\n right,\n top,\n bottom,\n front,\n back,\n onCentered,\n precise = true,\n cacheKey = 0,\n ...props\n}, fRef) {\n const ref = React.useRef(null);\n const outer = React.useRef(null);\n const inner = React.useRef(null);\n const [box3] = React.useState(() => new Box3());\n const [center] = React.useState(() => new Vector3());\n const [sphere] = React.useState(() => new Sphere());\n React.useLayoutEffect(() => {\n outer.current.matrixWorld.identity();\n box3.setFromObject(object !== null && object !== void 0 ? object : inner.current, precise);\n const width = box3.max.x - box3.min.x;\n const height = box3.max.y - box3.min.y;\n const depth = box3.max.z - box3.min.z;\n box3.getCenter(center);\n box3.getBoundingSphere(sphere);\n const vAlign = top ? height / 2 : bottom ? -height / 2 : 0;\n const hAlign = left ? -width / 2 : right ? width / 2 : 0;\n const dAlign = front ? depth / 2 : back ? -depth / 2 : 0;\n outer.current.position.set(disable || disableX ? 0 : -center.x + hAlign, disable || disableY ? 0 : -center.y + vAlign, disable || disableZ ? 0 : -center.z + dAlign);\n\n // Only fire onCentered if the bounding box has changed\n onCentered == null || onCentered({\n parent: ref.current.parent,\n container: ref.current,\n width,\n height,\n depth,\n boundingBox: box3,\n boundingSphere: sphere,\n center: center,\n verticalAlignment: vAlign,\n horizontalAlignment: hAlign,\n depthAlignment: dAlign\n });\n }, [cacheKey, onCentered, top, left, front, disable, disableX, disableY, disableZ, object, precise, right, bottom, back, box3, center, sphere]);\n React.useImperativeHandle(fRef, () => ref.current, []);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref\n }, props), /*#__PURE__*/React.createElement(\"group\", {\n ref: outer\n }, /*#__PURE__*/React.createElement(\"group\", {\n ref: inner\n }, children)));\n});\n\nexport { Center };\n","import * as React from 'react';\nimport { Text3D } from './Text3D.js';\nimport { Center } from './Center.js';\n\n/* eslint react-hooks/exhaustive-deps: 1 */\n/**\n * A simple counter example component. Click to increment, meta-click to decrement.\n */\nconst Example = /* @__PURE__ */React.forwardRef(({\n font,\n color = '#cbcbcb',\n bevelSize = 0.04,\n debug = false,\n children,\n ...props\n}, fref) => {\n const [counter, setCounter] = React.useState(0);\n const incr = React.useCallback((x = 1) => setCounter(counter + x), [counter]);\n const decr = React.useCallback((x = 1) => setCounter(counter - x), [counter]);\n\n // ref-API\n const api = React.useMemo(() => ({\n incr,\n decr\n }), [incr, decr]);\n React.useImperativeHandle(fref, () => api, [api]);\n return /*#__PURE__*/React.createElement(\"group\", props, /*#__PURE__*/React.createElement(React.Suspense, {\n fallback: null\n }, /*#__PURE__*/React.createElement(Center, {\n top: true,\n cacheKey: JSON.stringify({\n counter,\n font\n })\n }, /*#__PURE__*/React.createElement(Text3D, {\n bevelEnabled: true,\n bevelSize: bevelSize,\n font: font\n }, debug ? /*#__PURE__*/React.createElement(\"meshNormalMaterial\", {\n wireframe: true\n }) : /*#__PURE__*/React.createElement(\"meshStandardMaterial\", {\n color: color\n }), counter))), children);\n});\n\nexport { Example };\n","/**\n * Sets `BufferAttribute.updateRange` since r159.\n */\nconst setUpdateRange = (attribute, updateRange) => {\n attribute.updateRanges[0] = updateRange;\n};\n\nexport { setUpdateRange };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { extend, useFrame } from '@react-three/fiber';\nimport { setUpdateRange } from '../helpers/deprecated.js';\n\nfunction isFunctionChild(value) {\n return typeof value === 'function';\n}\nconst _instanceLocalMatrix = /* @__PURE__ */new THREE.Matrix4();\nconst _instanceWorldMatrix = /* @__PURE__ */new THREE.Matrix4();\nconst _instanceIntersects = [];\nconst _mesh = /* @__PURE__ */new THREE.Mesh();\nclass PositionMesh extends THREE.Group {\n constructor() {\n super();\n this.color = new THREE.Color('white');\n this.instance = {\n current: undefined\n };\n this.instanceKey = {\n current: undefined\n };\n }\n\n // This will allow the virtual instance have bounds\n get geometry() {\n var _this$instance$curren;\n return (_this$instance$curren = this.instance.current) == null ? void 0 : _this$instance$curren.geometry;\n }\n\n // And this will allow the virtual instance to receive events\n raycast(raycaster, intersects) {\n const parent = this.instance.current;\n if (!parent) return;\n if (!parent.geometry || !parent.material) return;\n _mesh.geometry = parent.geometry;\n const matrixWorld = parent.matrixWorld;\n const instanceId = parent.userData.instances.indexOf(this.instanceKey);\n // If the instance wasn't found or exceeds the parents draw range, bail out\n if (instanceId === -1 || instanceId > parent.count) return;\n // calculate the world matrix for each instance\n parent.getMatrixAt(instanceId, _instanceLocalMatrix);\n _instanceWorldMatrix.multiplyMatrices(matrixWorld, _instanceLocalMatrix);\n // the mesh represents this single instance\n _mesh.matrixWorld = _instanceWorldMatrix;\n // raycast side according to instance material\n if (parent.material instanceof THREE.Material) _mesh.material.side = parent.material.side;else _mesh.material.side = parent.material[0].side;\n _mesh.raycast(raycaster, _instanceIntersects);\n // process the result of raycast\n for (let i = 0, l = _instanceIntersects.length; i < l; i++) {\n const intersect = _instanceIntersects[i];\n intersect.instanceId = instanceId;\n intersect.object = this;\n intersects.push(intersect);\n }\n _instanceIntersects.length = 0;\n }\n}\nconst globalContext = /* @__PURE__ */React.createContext(null);\nconst parentMatrix = /* @__PURE__ */new THREE.Matrix4();\nconst instanceMatrix = /* @__PURE__ */new THREE.Matrix4();\nconst tempMatrix = /* @__PURE__ */new THREE.Matrix4();\nconst translation = /* @__PURE__ */new THREE.Vector3();\nconst rotation = /* @__PURE__ */new THREE.Quaternion();\nconst scale = /* @__PURE__ */new THREE.Vector3();\nconst isInstancedBufferAttribute = attr => attr.isInstancedBufferAttribute;\nconst Instance = /* @__PURE__ */React.forwardRef(({\n context,\n children,\n ...props\n}, ref) => {\n React.useMemo(() => extend({\n PositionMesh\n }), []);\n const group = React.useRef(null);\n React.useImperativeHandle(ref, () => group.current, []);\n const {\n subscribe,\n getParent\n } = React.useContext(context || globalContext);\n React.useLayoutEffect(() => subscribe(group), []);\n return /*#__PURE__*/React.createElement(\"positionMesh\", _extends({\n instance: getParent(),\n instanceKey: group,\n ref: group\n }, props), children);\n});\nconst Instances = /* @__PURE__ */React.forwardRef(({\n context,\n children,\n range,\n limit = 1000,\n frames = Infinity,\n ...props\n}, ref) => {\n const [{\n localContext,\n instance\n }] = React.useState(() => {\n const localContext = /*#__PURE__*/React.createContext(null);\n return {\n localContext,\n instance: /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(Instance, _extends({\n context: localContext\n }, props, {\n ref: ref\n })))\n };\n });\n const parentRef = React.useRef(null);\n React.useImperativeHandle(ref, () => parentRef.current, []);\n const [instances, setInstances] = React.useState([]);\n const [[matrices, colors]] = React.useState(() => {\n const mArray = new Float32Array(limit * 16);\n for (let i = 0; i < limit; i++) tempMatrix.identity().toArray(mArray, i * 16);\n return [mArray, new Float32Array([...new Array(limit * 3)].map(() => 1))];\n });\n React.useEffect(() => {\n // We might be a frame too late? 🤷‍♂️\n parentRef.current.instanceMatrix.needsUpdate = true;\n });\n let iterations = 0;\n let count = 0;\n const attributes = React.useRef([]);\n React.useLayoutEffect(() => {\n attributes.current = Object.entries(parentRef.current.geometry.attributes).filter(([_name, value]) => isInstancedBufferAttribute(value));\n });\n useFrame(() => {\n if (frames === Infinity || iterations < frames) {\n parentRef.current.updateMatrix();\n parentRef.current.updateMatrixWorld();\n parentMatrix.copy(parentRef.current.matrixWorld).invert();\n count = Math.min(limit, range !== undefined ? range : limit, instances.length);\n parentRef.current.count = count;\n setUpdateRange(parentRef.current.instanceMatrix, {\n start: 0,\n count: count * 16\n });\n setUpdateRange(parentRef.current.instanceColor, {\n start: 0,\n count: count * 3\n });\n for (let i = 0; i < instances.length; i++) {\n const instance = instances[i].current;\n // Multiply the inverse of the InstancedMesh world matrix or else\n // Instances will be double-transformed if <Instances> isn't at identity\n instance.matrixWorld.decompose(translation, rotation, scale);\n instanceMatrix.compose(translation, rotation, scale).premultiply(parentMatrix);\n instanceMatrix.toArray(matrices, i * 16);\n parentRef.current.instanceMatrix.needsUpdate = true;\n instance.color.toArray(colors, i * 3);\n parentRef.current.instanceColor.needsUpdate = true;\n }\n iterations++;\n }\n });\n const api = React.useMemo(() => ({\n getParent: () => parentRef,\n subscribe: ref => {\n setInstances(instances => [...instances, ref]);\n return () => setInstances(instances => instances.filter(item => item.current !== ref.current));\n }\n }), []);\n return /*#__PURE__*/React.createElement(\"instancedMesh\", _extends({\n userData: {\n instances,\n limit,\n frames\n },\n matrixAutoUpdate: false,\n ref: parentRef,\n args: [null, null, 0],\n raycast: () => null\n }, props), /*#__PURE__*/React.createElement(\"instancedBufferAttribute\", {\n attach: \"instanceMatrix\",\n args: [matrices, 16],\n usage: THREE.DynamicDrawUsage\n }), /*#__PURE__*/React.createElement(\"instancedBufferAttribute\", {\n attach: \"instanceColor\",\n args: [colors, 3],\n usage: THREE.DynamicDrawUsage\n }), isFunctionChild(children) ? /*#__PURE__*/React.createElement(localContext.Provider, {\n value: api\n }, children(instance)) : context ? /*#__PURE__*/React.createElement(context.Provider, {\n value: api\n }, children) : /*#__PURE__*/React.createElement(globalContext.Provider, {\n value: api\n }, children));\n});\n// TODO: make this non-recursive and type-safe\nconst Merged = /* @__PURE__ */React.forwardRef(function Merged({\n meshes,\n children,\n ...props\n}, ref) {\n const isArray = Array.isArray(meshes);\n // Filter out meshes from collections, which may contain non-meshes\n // @ts-expect-error\n if (!isArray) for (const key of Object.keys(meshes)) if (!meshes[key].isMesh) delete meshes[key];\n const render = args => isArray ?\n // @ts-expect-error\n children(...args) : children(\n // @ts-expect-error\n Object.keys(meshes)\n // @ts-expect-error\n .filter(key => meshes[key].isMesh).reduce((acc, key, i) => ({\n ...acc,\n [key]: args[i]\n }), {}));\n\n // @ts-expect-error\n const components = (isArray ? meshes : Object.values(meshes)).map(({\n geometry,\n material\n }) => /*#__PURE__*/React.createElement(Instances, _extends({\n key: geometry.uuid,\n geometry: geometry,\n material: material\n }, props)));\n return /*#__PURE__*/React.createElement(\"group\", {\n ref: ref\n }, renderRecursive(render, components));\n});\n\n// https://github.com/jamesplease/react-composer\nfunction renderRecursive(render, components, results = []) {\n // Once components is exhausted, we can render out the results array.\n if (!components[0]) {\n return render(results);\n }\n\n // Continue recursion for remaining items.\n // results.concat([value]) ensures [...results, value] instead of [...results, ...value]\n function nextRender(value) {\n return renderRecursive(render, components.slice(1), results.concat([value]));\n }\n\n // Each props.components entry is either an element or function [element factory]\n return typeof components[0] === 'function' ?\n // When it is a function, produce an element by invoking it with \"render component values\".\n components[0]({\n results,\n render: nextRender\n }) :\n /*#__PURE__*/\n // When it is an element, enhance the element's props with the render prop.\n React.cloneElement(components[0], {\n children: nextRender\n });\n}\n\n/** Idea and implementation for global instances and instanced attributes by\n/* Matias Gonzalez Fernandez https://x.com/matiNotFound\n/* and Paul Henschel https://x.com/0xca0a\n*/\nfunction createInstances() {\n const context = /*#__PURE__*/React.createContext(null);\n return [/*#__PURE__*/React.forwardRef((props, fref) => /*#__PURE__*/React.createElement(Instances, _extends({\n ref: fref,\n context: context\n }, props))), /*#__PURE__*/React.forwardRef((props, fref) => /*#__PURE__*/React.createElement(Instance, _extends({\n ref: fref,\n context: context\n }, props)))];\n}\nconst InstancedAttribute = /*#__PURE__*/React.forwardRef(({\n name,\n defaultValue,\n normalized,\n usage = THREE.DynamicDrawUsage\n}, fref) => {\n const ref = React.useRef(null);\n React.useImperativeHandle(fref, () => ref.current, []);\n React.useLayoutEffect(() => {\n const parent = ref.current.__r3f.parent.object;\n parent.geometry.attributes[name] = ref.current;\n const value = Array.isArray(defaultValue) ? defaultValue : [defaultValue];\n const array = Array.from({\n length: parent.userData.limit\n }, () => value).flat();\n ref.current.array = new Float32Array(array);\n ref.current.itemSize = value.length;\n // @ts-expect-error\n ref.current.count = array.length / ref.current.itemSize;\n return () => {\n delete parent.geometry.attributes[name];\n };\n }, [name]);\n let iterations = 0;\n useFrame(() => {\n const parent = ref.current.__r3f.parent.object;\n if (parent.userData.frames === Infinity || iterations < parent.userData.frames) {\n for (let i = 0; i < parent.userData.instances.length; i++) {\n const instance = parent.userData.instances[i].current;\n const value = instance[name];\n if (value !== undefined) {\n ref.current.set(Array.isArray(value) ? value : typeof value.toArray === 'function' ? value.toArray() : [value], i * ref.current.itemSize);\n ref.current.needsUpdate = true;\n }\n }\n iterations++;\n }\n });\n // @ts-expect-error we're abusing three API here by mutating immutable args\n return /*#__PURE__*/React.createElement(\"instancedBufferAttribute\", {\n ref: ref,\n usage: usage,\n normalized: normalized\n });\n});\n\nexport { Instance, InstancedAttribute, Instances, Merged, PositionMesh, createInstances };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useFrame } from '@react-three/fiber';\nimport * as THREE from 'three';\nimport { Instances, Instance } from './Instances.js';\nimport { Billboard } from './Billboard.js';\nimport { useSpriteLoader, getFirstFrame } from './useSpriteLoader.js';\n\n// Frame-related types\n\nconst context = /*#__PURE__*/React.createContext(null);\nfunction useSpriteAnimator() {\n return React.useContext(context);\n}\n\n// Type guard for SpriteData\nfunction isSpriteData(data) {\n return data !== null && 'meta' in data && 'frames' in data;\n}\nconst geometry = /* @__PURE__ */new THREE.PlaneGeometry(1, 1);\nconst SpriteAnimator = /* @__PURE__ */React.forwardRef(({\n startFrame = 0,\n endFrame,\n fps = 30,\n frameName = '',\n textureDataURL,\n textureImageURL,\n loop = false,\n numberOfFrames = 1,\n autoPlay = true,\n animationNames,\n onStart,\n onEnd,\n onLoopEnd,\n onFrame,\n play,\n pause = false,\n flipX = false,\n alphaTest = 0.0,\n children,\n asSprite = false,\n offset,\n playBackwards = false,\n resetOnEnd = false,\n maxItems = 1,\n instanceItems = [[0, 0, 0]],\n spriteDataset,\n canvasRenderingContext2DSettings,\n roundFramePosition = false,\n meshProps = {},\n ...props\n}, fref) => {\n const ref = React.useRef(new THREE.Group());\n const spriteData = React.useRef(null);\n const matRef = React.useRef(null);\n const spriteRef = React.useRef(null);\n const timerOffset = React.useRef(window.performance.now());\n const currentFrame = React.useRef(startFrame);\n const currentFrameName = React.useRef(frameName);\n const fpsInterval = fps > 0 ? 1000 / fps : 0;\n const [spriteTexture, setSpriteTexture] = React.useState(new THREE.Texture());\n const totalFrames = React.useRef(0);\n const [aspect, setAspect] = React.useState(new THREE.Vector3(1, 1, 1));\n const flipOffset = flipX ? -1 : 1;\n const pauseRef = React.useRef(pause);\n const pos = React.useRef(offset);\n const softEnd = React.useRef(false);\n const {\n spriteObj,\n loadJsonAndTexture\n } = useSpriteLoader(null, null, animationNames, numberOfFrames, undefined, canvasRenderingContext2DSettings);\n const frameNameRef = React.useRef(frameName);\n\n // lite version for pre-loaded assets\n const parseSpriteDataLite = React.useCallback((textureData, data) => {\n if (data === null) {\n if (numberOfFrames) {\n //get size from texture\n\n totalFrames.current = numberOfFrames;\n if (playBackwards) {\n currentFrame.current = numberOfFrames - 1;\n }\n spriteData.current = data;\n }\n } else {\n var _spriteData$current$f, _spriteData$current;\n spriteData.current = data;\n if (spriteData.current && Array.isArray(spriteData.current.frames)) {\n totalFrames.current = spriteData.current.frames.length;\n } else if (spriteData.current && typeof spriteData.current === 'object' && frameNameRef.current) {\n totalFrames.current = spriteData.current.frames[frameNameRef.current].length;\n } else {\n totalFrames.current = 0;\n }\n if (playBackwards) {\n currentFrame.current = totalFrames.current - 1;\n }\n const {\n w,\n h\n } = getFirstFrame((_spriteData$current$f = (_spriteData$current = spriteData.current) == null ? void 0 : _spriteData$current.frames) !== null && _spriteData$current$f !== void 0 ? _spriteData$current$f : [], frameNameRef.current).sourceSize;\n const aspect = calculateAspectRatio(w, h);\n setAspect(aspect);\n if (matRef.current) {\n matRef.current.map = textureData;\n }\n }\n setSpriteTexture(textureData);\n }, [numberOfFrames, playBackwards]);\n\n // modify the sprite material after json is parsed and state updated\n const modifySpritePosition = React.useCallback(() => {\n if (!spriteData.current) return;\n const {\n meta: {\n size: metaInfo\n },\n frames\n } = spriteData.current;\n const {\n w: frameW,\n h: frameH\n } = Array.isArray(frames) ? frames[0].sourceSize : frameName ? frames[frameName] ? frames[frameName][0].sourceSize : {\n w: 0,\n h: 0\n } : {\n w: 0,\n h: 0\n };\n if (matRef.current && matRef.current.map) {\n matRef.current.map.wrapS = matRef.current.map.wrapT = THREE.RepeatWrapping;\n matRef.current.map.center.set(0, 0);\n matRef.current.map.repeat.set(1 * flipOffset / (metaInfo.w / frameW), 1 / (metaInfo.h / frameH));\n }\n //const framesH = (metaInfo.w - 1) / frameW\n const framesV = (metaInfo.h - 1) / frameH;\n const frameOffsetY = 1 / framesV;\n if (matRef.current && matRef.current.map) {\n matRef.current.map.offset.x = 0.0; //-matRef.current.map.repeat.x\n matRef.current.map.offset.y = 1 - frameOffsetY;\n }\n if (onStart) {\n onStart({\n currentFrameName: frameName !== null && frameName !== void 0 ? frameName : '',\n currentFrame: currentFrame.current\n });\n }\n }, [flipOffset, frameName, onStart]);\n const state = React.useMemo(() => ({\n current: pos.current,\n offset: pos.current,\n imageUrl: textureImageURL,\n hasEnded: false,\n ref: fref\n }), [textureImageURL, fref]);\n React.useImperativeHandle(fref, () => ref.current, []);\n React.useLayoutEffect(() => {\n pos.current = offset;\n }, [offset]);\n const calculateAspectRatio = (width, height) => {\n var _spriteRef$current;\n const ret = new THREE.Vector3();\n const aspectRatio = height / width;\n ret.set(1, aspectRatio, 1);\n (_spriteRef$current = spriteRef.current) == null || _spriteRef$current.scale.copy(ret);\n return ret;\n };\n\n // initial loads\n React.useEffect(() => {\n if (spriteDataset) {\n var _spriteDataset$sprite;\n parseSpriteDataLite(spriteDataset == null || (_spriteDataset$sprite = spriteDataset.spriteTexture) == null ? void 0 : _spriteDataset$sprite.clone(), spriteDataset.spriteData);\n } else {\n if (textureImageURL && textureDataURL) {\n loadJsonAndTexture(textureImageURL, textureDataURL);\n }\n }\n }, [loadJsonAndTexture, spriteDataset, textureDataURL, textureImageURL, parseSpriteDataLite]);\n React.useEffect(() => {\n if (spriteObj) {\n var _spriteObj$spriteText;\n parseSpriteDataLite(spriteObj == null || (_spriteObj$spriteText = spriteObj.spriteTexture) == null ? void 0 : _spriteObj$spriteText.clone(), spriteObj == null ? void 0 : spriteObj.spriteData);\n }\n }, [spriteObj, parseSpriteDataLite]);\n\n // support backwards play\n React.useEffect(() => {\n state.hasEnded = false;\n if (spriteData.current && playBackwards === true) {\n var _ref;\n currentFrame.current = ((_ref = spriteData.current.frames.length) !== null && _ref !== void 0 ? _ref : 0) - 1;\n } else {\n currentFrame.current = 0;\n }\n }, [playBackwards, state]);\n React.useLayoutEffect(() => {\n modifySpritePosition();\n }, [spriteTexture, flipX, modifySpritePosition]);\n React.useEffect(() => {\n if (autoPlay) {\n pauseRef.current = false;\n }\n }, [autoPlay]);\n React.useLayoutEffect(() => {\n if (currentFrameName.current !== frameName && frameName) {\n currentFrame.current = 0;\n currentFrameName.current = frameName;\n state.hasEnded = false;\n if (fpsInterval <= 0) {\n currentFrame.current = endFrame || startFrame || 0;\n }\n // modifySpritePosition()\n if (spriteData.current) {\n const {\n w,\n h\n } = getFirstFrame(spriteData.current.frames, frameName).sourceSize;\n const _aspect = calculateAspectRatio(w, h);\n setAspect(_aspect);\n }\n }\n }, [frameName, fpsInterval, state, endFrame, startFrame]);\n\n // run the animation on each frame\n const runAnimation = () => {\n if (!isSpriteData(spriteData.current)) return;\n const {\n meta: {\n size: metaInfo\n },\n frames\n } = spriteData.current;\n const {\n w: frameW,\n h: frameH\n } = getFirstFrame(frames, frameName).sourceSize;\n const spriteFrames = Array.isArray(frames) ? frames : frameName ? frames[frameName] : [];\n const _endFrame = endFrame || spriteFrames.length - 1;\n var _offset = offset === undefined ? state.current : offset;\n if (fpsInterval <= 0) {\n currentFrame.current = endFrame || startFrame || 0;\n calculateFinalPosition(frameW, frameH, metaInfo, spriteFrames);\n return;\n }\n const now = window.performance.now();\n const diff = now - timerOffset.current;\n if (diff <= fpsInterval) return;\n\n // conditionals to support backwards play\n var endCondition = playBackwards ? currentFrame.current < 0 : currentFrame.current > _endFrame;\n var onStartCondition = playBackwards ? currentFrame.current === _endFrame : currentFrame.current === 0;\n var manualProgressEndCondition = playBackwards ? currentFrame.current < 0 : currentFrame.current >= _endFrame;\n if (endCondition) {\n currentFrame.current = loop ? startFrame !== null && startFrame !== void 0 ? startFrame : 0 : 0;\n if (playBackwards) {\n currentFrame.current = _endFrame;\n }\n if (loop) {\n onLoopEnd == null || onLoopEnd({\n currentFrameName: frameName !== null && frameName !== void 0 ? frameName : '',\n currentFrame: currentFrame.current\n });\n } else {\n onEnd == null || onEnd({\n currentFrameName: frameName !== null && frameName !== void 0 ? frameName : '',\n currentFrame: currentFrame.current\n });\n state.hasEnded = !resetOnEnd;\n if (resetOnEnd) {\n pauseRef.current = true;\n //calculateFinalPosition(frameW, frameH, metaInfo, spriteFrames)\n }\n }\n if (!loop) return;\n } else if (onStartCondition) {\n onStart == null || onStart({\n currentFrameName: frameName !== null && frameName !== void 0 ? frameName : '',\n currentFrame: currentFrame.current\n });\n }\n\n // for manual update\n if (_offset !== undefined && manualProgressEndCondition) {\n if (softEnd.current === false) {\n onEnd == null || onEnd({\n currentFrameName: frameName !== null && frameName !== void 0 ? frameName : '',\n currentFrame: currentFrame.current\n });\n softEnd.current = true;\n }\n } else {\n // same for start?\n softEnd.current = false;\n }\n\n // clock to limit fps\n if (diff <= fpsInterval) return;\n timerOffset.current = now - diff % fpsInterval;\n calculateFinalPosition(frameW, frameH, metaInfo, spriteFrames);\n };\n const calculateFinalPosition = (frameW, frameH, metaInfo, spriteFrames) => {\n // get the manual update offset to find the next frame\n var _offset = offset === undefined ? state.current : offset;\n const targetFrame = currentFrame.current;\n let finalValX = 0;\n let finalValY = 0;\n calculateAspectRatio(frameW, frameH);\n const framesH = roundFramePosition ? Math.round((metaInfo.w - 1) / frameW) : (metaInfo.w - 1) / frameW;\n const framesV = roundFramePosition ? Math.round((metaInfo.h - 1) / frameH) : (metaInfo.h - 1) / frameH;\n if (!spriteFrames[targetFrame]) {\n return;\n }\n const {\n frame: {\n x: frameX,\n y: frameY\n },\n sourceSize: {\n w: originalSizeX,\n h: originalSizeY\n }\n } = spriteFrames[targetFrame];\n const frameOffsetX = 1 / framesH;\n const frameOffsetY = 1 / framesV;\n if (matRef.current && matRef.current.map) {\n finalValX = flipOffset > 0 ? frameOffsetX * (frameX / originalSizeX) : frameOffsetX * (frameX / originalSizeX) - matRef.current.map.repeat.x;\n finalValY = Math.abs(1 - frameOffsetY) - frameOffsetY * (frameY / originalSizeY);\n matRef.current.map.offset.x = finalValX;\n matRef.current.map.offset.y = finalValY;\n }\n\n // if manual update is active\n if (_offset !== undefined && _offset !== null) {\n // Calculate the frame index, based on offset given from the provider\n let frameIndex = Math.floor(_offset * spriteFrames.length);\n\n // Ensure the frame index is within the valid range\n frameIndex = Math.max(0, Math.min(frameIndex, spriteFrames.length - 1));\n if (isNaN(frameIndex)) {\n frameIndex = 0; //fallback\n }\n currentFrame.current = frameIndex;\n } else {\n // auto update\n if (playBackwards) {\n currentFrame.current -= 1;\n } else {\n currentFrame.current += 1;\n }\n }\n };\n\n // *** Warning! It runs on every frame! ***\n useFrame((_state, _delta) => {\n var _spriteData$current2, _matRef$current;\n if (!((_spriteData$current2 = spriteData.current) != null && _spriteData$current2.frames) || !((_matRef$current = matRef.current) != null && _matRef$current.map)) {\n return;\n }\n if (pauseRef.current) {\n return;\n }\n if (!state.hasEnded && (autoPlay || play)) {\n runAnimation();\n onFrame == null || onFrame({\n currentFrameName: currentFrameName.current,\n currentFrame: currentFrame.current\n });\n }\n });\n function multiplyScale(initialScale = new THREE.Vector3(1, 1, 1), newScale = 1) {\n if (typeof newScale === 'number') return initialScale.multiplyScalar(newScale);\n if (Array.isArray(newScale)) return initialScale.multiply(new THREE.Vector3(...newScale));\n if (newScale instanceof THREE.Vector3) return initialScale.multiply(newScale);\n }\n return /*#__PURE__*/React.createElement(\"group\", _extends({}, props, {\n ref: ref,\n scale: multiplyScale(aspect, props.scale)\n }), /*#__PURE__*/React.createElement(context.Provider, {\n value: state\n }, asSprite && /*#__PURE__*/React.createElement(Billboard, null, /*#__PURE__*/React.createElement(\"mesh\", _extends({\n ref: spriteRef,\n scale: 1.0,\n geometry: geometry\n }, meshProps), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n premultipliedAlpha: false,\n toneMapped: false,\n side: THREE.DoubleSide,\n ref: matRef,\n map: spriteTexture,\n transparent: true,\n alphaTest: alphaTest !== null && alphaTest !== void 0 ? alphaTest : 0.0\n }))), !asSprite && /*#__PURE__*/React.createElement(Instances, _extends({\n geometry: geometry,\n limit: maxItems !== null && maxItems !== void 0 ? maxItems : 1\n }, meshProps), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n premultipliedAlpha: false,\n toneMapped: false,\n side: THREE.DoubleSide,\n ref: matRef,\n map: spriteTexture,\n transparent: true,\n alphaTest: alphaTest !== null && alphaTest !== void 0 ? alphaTest : 0.0\n }), (instanceItems !== null && instanceItems !== void 0 ? instanceItems : [0]).map((item, index) => /*#__PURE__*/React.createElement(Instance, _extends({\n key: index,\n ref: (instanceItems == null ? void 0 : instanceItems.length) === 1 ? spriteRef : null,\n position: item,\n scale: 1.0\n }, meshProps)))), children));\n});\n\nexport { SpriteAnimator, useSpriteAnimator };\n","import * as React from 'react';\nimport * as THREE from 'three';\nimport { createPortal } from '@react-three/fiber';\nimport { Flow } from 'three-stdlib';\n\nconst CurveModifier = /* @__PURE__ */React.forwardRef(({\n children,\n curve\n}, ref) => {\n const [scene] = React.useState(() => new THREE.Scene());\n const [obj, set] = React.useState();\n const modifier = React.useRef(null);\n React.useLayoutEffect(() => {\n modifier.current = new Flow(scene.children[0]);\n set(modifier.current.object3D);\n }, [children]);\n React.useEffect(() => {\n var _modifier$current;\n if (curve) (_modifier$current = modifier.current) == null || _modifier$current.updateCurve(0, curve);\n }, [curve]);\n React.useImperativeHandle(ref, () => modifier.current);\n return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal(children, scene), obj && /*#__PURE__*/React.createElement(\"primitive\", {\n object: obj\n }));\n});\n\nexport { CurveModifier };\n","var distort = \"#define GLSLIFY 1\\nvec3 mod289(vec3 x){return x-floor(x*(1.0/289.0))*289.0;}vec4 mod289(vec4 x){return x-floor(x*(1.0/289.0))*289.0;}vec4 permute(vec4 x){return mod289(((x*34.0)+1.0)*x);}vec4 taylorInvSqrt(vec4 r){return 1.79284291400159-0.85373472095314*r;}float snoise(vec3 v){const vec2 C=vec2(1.0/6.0,1.0/3.0);const vec4 D=vec4(0.0,0.5,1.0,2.0);vec3 i=floor(v+dot(v,C.yyy));vec3 x0=v-i+dot(i,C.xxx);vec3 g=step(x0.yzx,x0.xyz);vec3 l=1.0-g;vec3 i1=min(g.xyz,l.zxy);vec3 i2=max(g.xyz,l.zxy);vec3 x1=x0-i1+C.xxx;vec3 x2=x0-i2+C.yyy;vec3 x3=x0-D.yyy;i=mod289(i);vec4 p=permute(permute(permute(i.z+vec4(0.0,i1.z,i2.z,1.0))+i.y+vec4(0.0,i1.y,i2.y,1.0))+i.x+vec4(0.0,i1.x,i2.x,1.0));float n_=0.142857142857;vec3 ns=n_*D.wyz-D.xzx;vec4 j=p-49.0*floor(p*ns.z*ns.z);vec4 x_=floor(j*ns.z);vec4 y_=floor(j-7.0*x_);vec4 x=x_*ns.x+ns.yyyy;vec4 y=y_*ns.x+ns.yyyy;vec4 h=1.0-abs(x)-abs(y);vec4 b0=vec4(x.xy,y.xy);vec4 b1=vec4(x.zw,y.zw);vec4 s0=floor(b0)*2.0+1.0;vec4 s1=floor(b1)*2.0+1.0;vec4 sh=-step(h,vec4(0.0));vec4 a0=b0.xzyw+s0.xzyw*sh.xxyy;vec4 a1=b1.xzyw+s1.xzyw*sh.zzww;vec3 p0=vec3(a0.xy,h.x);vec3 p1=vec3(a0.zw,h.y);vec3 p2=vec3(a1.xy,h.z);vec3 p3=vec3(a1.zw,h.w);vec4 norm=taylorInvSqrt(vec4(dot(p0,p0),dot(p1,p1),dot(p2,p2),dot(p3,p3)));p0*=norm.x;p1*=norm.y;p2*=norm.z;p3*=norm.w;vec4 m=max(0.6-vec4(dot(x0,x0),dot(x1,x1),dot(x2,x2),dot(x3,x3)),0.0);m=m*m;return 42.0*dot(m*m,vec4(dot(p0,x0),dot(p1,x1),dot(p2,x2),dot(p3,x3)));}\"; // eslint-disable-line\n\nexport { distort as default };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { MeshPhysicalMaterial } from 'three';\nimport { useFrame } from '@react-three/fiber';\nimport distort from '../helpers/glsl/distort.vert.glsl.js';\n\nclass DistortMaterialImpl extends MeshPhysicalMaterial {\n constructor(parameters = {}) {\n super(parameters);\n this.setValues(parameters);\n this._time = {\n value: 0\n };\n this._distort = {\n value: 0.4\n };\n this._radius = {\n value: 1\n };\n }\n\n // FIXME Use `THREE.WebGLProgramParametersWithUniforms` type when able to target @types/three@0.160.0\n onBeforeCompile(shader) {\n shader.uniforms.time = this._time;\n shader.uniforms.radius = this._radius;\n shader.uniforms.distort = this._distort;\n shader.vertexShader = `\n uniform float time;\n uniform float radius;\n uniform float distort;\n ${distort}\n ${shader.vertexShader}\n `;\n shader.vertexShader = shader.vertexShader.replace('#include <begin_vertex>', `\n float updateTime = time / 50.0;\n float noise = snoise(vec3(position / 2.0 + updateTime * 5.0));\n vec3 transformed = vec3(position * (noise * pow(distort, 2.0) + radius));\n `);\n }\n get time() {\n return this._time.value;\n }\n set time(v) {\n this._time.value = v;\n }\n get distort() {\n return this._distort.value;\n }\n set distort(v) {\n this._distort.value = v;\n }\n get radius() {\n return this._radius.value;\n }\n set radius(v) {\n this._radius.value = v;\n }\n}\nconst MeshDistortMaterial = /* @__PURE__ */React.forwardRef(({\n speed = 1,\n ...props\n}, ref) => {\n const [material] = React.useState(() => new DistortMaterialImpl());\n useFrame(state => material && (material.time = state.clock.elapsedTime * speed));\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n object: material,\n ref: ref,\n attach: \"material\"\n }, props));\n});\n\nexport { MeshDistortMaterial };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { MeshStandardMaterial } from 'three';\nimport { useFrame } from '@react-three/fiber';\n\nclass WobbleMaterialImpl extends MeshStandardMaterial {\n constructor(parameters = {}) {\n super(parameters);\n this.setValues(parameters);\n this._time = {\n value: 0\n };\n this._factor = {\n value: 1\n };\n }\n\n // FIXME Use `THREE.WebGLProgramParametersWithUniforms` type when able to target @types/three@0.160.0\n onBeforeCompile(shader) {\n shader.uniforms.time = this._time;\n shader.uniforms.factor = this._factor;\n shader.vertexShader = `\n uniform float time;\n uniform float factor;\n ${shader.vertexShader}\n `;\n shader.vertexShader = shader.vertexShader.replace('#include <begin_vertex>', `float theta = sin( time + position.y ) / 2.0 * factor;\n float c = cos( theta );\n float s = sin( theta );\n mat3 m = mat3( c, 0, s, 0, 1, 0, -s, 0, c );\n vec3 transformed = vec3( position ) * m;\n vNormal = vNormal * m;`);\n }\n get time() {\n return this._time.value;\n }\n set time(v) {\n this._time.value = v;\n }\n get factor() {\n return this._factor.value;\n }\n set factor(v) {\n this._factor.value = v;\n }\n}\nconst MeshWobbleMaterial = /* @__PURE__ */React.forwardRef(({\n speed = 1,\n ...props\n}, ref) => {\n const [material] = React.useState(() => new WobbleMaterialImpl());\n useFrame(state => material && (material.time = state.clock.elapsedTime * speed));\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n object: material,\n ref: ref,\n attach: \"material\"\n }, props));\n});\n\nexport { MeshWobbleMaterial };\n","import * as THREE from 'three';\nimport { version } from '../helpers/constants.js';\n\nclass ConvolutionMaterial extends THREE.ShaderMaterial {\n constructor(texelSize = new THREE.Vector2()) {\n super({\n uniforms: {\n inputBuffer: new THREE.Uniform(null),\n depthBuffer: new THREE.Uniform(null),\n resolution: new THREE.Uniform(new THREE.Vector2()),\n texelSize: new THREE.Uniform(new THREE.Vector2()),\n halfTexelSize: new THREE.Uniform(new THREE.Vector2()),\n kernel: new THREE.Uniform(0.0),\n scale: new THREE.Uniform(1.0),\n cameraNear: new THREE.Uniform(0.0),\n cameraFar: new THREE.Uniform(1.0),\n minDepthThreshold: new THREE.Uniform(0.0),\n maxDepthThreshold: new THREE.Uniform(1.0),\n depthScale: new THREE.Uniform(0.0),\n depthToBlurRatioBias: new THREE.Uniform(0.25)\n },\n fragmentShader: `#include <common>\n #include <dithering_pars_fragment> \n uniform sampler2D inputBuffer;\n uniform sampler2D depthBuffer;\n uniform float cameraNear;\n uniform float cameraFar;\n uniform float minDepthThreshold;\n uniform float maxDepthThreshold;\n uniform float depthScale;\n uniform float depthToBlurRatioBias;\n varying vec2 vUv;\n varying vec2 vUv0;\n varying vec2 vUv1;\n varying vec2 vUv2;\n varying vec2 vUv3;\n\n void main() {\n float depthFactor = 0.0;\n \n #ifdef USE_DEPTH\n vec4 depth = texture2D(depthBuffer, vUv);\n depthFactor = smoothstep(minDepthThreshold, maxDepthThreshold, 1.0-(depth.r * depth.a));\n depthFactor *= depthScale;\n depthFactor = max(0.0, min(1.0, depthFactor + 0.25));\n #endif\n \n vec4 sum = texture2D(inputBuffer, mix(vUv0, vUv, depthFactor));\n sum += texture2D(inputBuffer, mix(vUv1, vUv, depthFactor));\n sum += texture2D(inputBuffer, mix(vUv2, vUv, depthFactor));\n sum += texture2D(inputBuffer, mix(vUv3, vUv, depthFactor));\n gl_FragColor = sum * 0.25 ;\n\n #include <dithering_fragment>\n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }`,\n vertexShader: `uniform vec2 texelSize;\n uniform vec2 halfTexelSize;\n uniform float kernel;\n uniform float scale;\n varying vec2 vUv;\n varying vec2 vUv0;\n varying vec2 vUv1;\n varying vec2 vUv2;\n varying vec2 vUv3;\n\n void main() {\n vec2 uv = position.xy * 0.5 + 0.5;\n vUv = uv;\n\n vec2 dUv = (texelSize * vec2(kernel) + halfTexelSize) * scale;\n vUv0 = vec2(uv.x - dUv.x, uv.y + dUv.y);\n vUv1 = vec2(uv.x + dUv.x, uv.y + dUv.y);\n vUv2 = vec2(uv.x + dUv.x, uv.y - dUv.y);\n vUv3 = vec2(uv.x - dUv.x, uv.y - dUv.y);\n\n gl_Position = vec4(position.xy, 1.0, 1.0);\n }`,\n blending: THREE.NoBlending,\n depthWrite: false,\n depthTest: false\n });\n this.toneMapped = false;\n this.setTexelSize(texelSize.x, texelSize.y);\n this.kernel = new Float32Array([0.0, 1.0, 2.0, 2.0, 3.0]);\n }\n setTexelSize(x, y) {\n this.uniforms.texelSize.value.set(x, y);\n this.uniforms.halfTexelSize.value.set(x, y).multiplyScalar(0.5);\n }\n setResolution(resolution) {\n this.uniforms.resolution.value.copy(resolution);\n }\n}\n\nexport { ConvolutionMaterial };\n","import { WebGLRenderTarget, LinearFilter, HalfFloatType, Vector2, Scene, Camera, BufferGeometry, BufferAttribute, Mesh } from 'three';\nimport { ConvolutionMaterial } from './ConvolutionMaterial.js';\n\nclass BlurPass {\n constructor({\n gl,\n resolution,\n width = 500,\n height = 500,\n minDepthThreshold = 0,\n maxDepthThreshold = 1,\n depthScale = 0,\n depthToBlurRatioBias = 0.25\n }) {\n this.renderToScreen = false;\n this.renderTargetA = new WebGLRenderTarget(resolution, resolution, {\n minFilter: LinearFilter,\n magFilter: LinearFilter,\n stencilBuffer: false,\n depthBuffer: false,\n type: HalfFloatType\n });\n this.renderTargetB = this.renderTargetA.clone();\n this.convolutionMaterial = new ConvolutionMaterial();\n this.convolutionMaterial.setTexelSize(1.0 / width, 1.0 / height);\n this.convolutionMaterial.setResolution(new Vector2(width, height));\n this.scene = new Scene();\n this.camera = new Camera();\n this.convolutionMaterial.uniforms.minDepthThreshold.value = minDepthThreshold;\n this.convolutionMaterial.uniforms.maxDepthThreshold.value = maxDepthThreshold;\n this.convolutionMaterial.uniforms.depthScale.value = depthScale;\n this.convolutionMaterial.uniforms.depthToBlurRatioBias.value = depthToBlurRatioBias;\n this.convolutionMaterial.defines.USE_DEPTH = depthScale > 0;\n const vertices = new Float32Array([-1, -1, 0, 3, -1, 0, -1, 3, 0]);\n const uvs = new Float32Array([0, 0, 2, 0, 0, 2]);\n const geometry = new BufferGeometry();\n geometry.setAttribute('position', new BufferAttribute(vertices, 3));\n geometry.setAttribute('uv', new BufferAttribute(uvs, 2));\n this.screen = new Mesh(geometry, this.convolutionMaterial);\n this.screen.frustumCulled = false;\n this.scene.add(this.screen);\n }\n render(renderer, inputBuffer, outputBuffer) {\n const scene = this.scene;\n const camera = this.camera;\n const renderTargetA = this.renderTargetA;\n const renderTargetB = this.renderTargetB;\n let material = this.convolutionMaterial;\n let uniforms = material.uniforms;\n uniforms.depthBuffer.value = inputBuffer.depthTexture;\n const kernel = material.kernel;\n let lastRT = inputBuffer;\n let destRT;\n let i, l;\n // Apply the multi-pass blur.\n for (i = 0, l = kernel.length - 1; i < l; ++i) {\n // Alternate between targets.\n destRT = (i & 1) === 0 ? renderTargetA : renderTargetB;\n uniforms.kernel.value = kernel[i];\n uniforms.inputBuffer.value = lastRT.texture;\n renderer.setRenderTarget(destRT);\n renderer.render(scene, camera);\n lastRT = destRT;\n }\n uniforms.kernel.value = kernel[i];\n uniforms.inputBuffer.value = lastRT.texture;\n renderer.setRenderTarget(this.renderToScreen ? null : outputBuffer);\n renderer.render(scene, camera);\n }\n}\n\nexport { BlurPass };\n","import { MeshStandardMaterial } from 'three';\n\nclass MeshReflectorMaterial extends MeshStandardMaterial {\n constructor(parameters = {}) {\n super(parameters);\n this._tDepth = {\n value: null\n };\n this._distortionMap = {\n value: null\n };\n this._tDiffuse = {\n value: null\n };\n this._tDiffuseBlur = {\n value: null\n };\n this._textureMatrix = {\n value: null\n };\n this._hasBlur = {\n value: false\n };\n this._mirror = {\n value: 0.0\n };\n this._mixBlur = {\n value: 0.0\n };\n this._blurStrength = {\n value: 0.5\n };\n this._minDepthThreshold = {\n value: 0.9\n };\n this._maxDepthThreshold = {\n value: 1\n };\n this._depthScale = {\n value: 0\n };\n this._depthToBlurRatioBias = {\n value: 0.25\n };\n this._distortion = {\n value: 1\n };\n this._mixContrast = {\n value: 1.0\n };\n this.setValues(parameters);\n }\n onBeforeCompile(shader) {\n var _shader$defines;\n if (!((_shader$defines = shader.defines) != null && _shader$defines.USE_UV)) {\n shader.defines.USE_UV = '';\n }\n shader.uniforms.hasBlur = this._hasBlur;\n shader.uniforms.tDiffuse = this._tDiffuse;\n shader.uniforms.tDepth = this._tDepth;\n shader.uniforms.distortionMap = this._distortionMap;\n shader.uniforms.tDiffuseBlur = this._tDiffuseBlur;\n shader.uniforms.textureMatrix = this._textureMatrix;\n shader.uniforms.mirror = this._mirror;\n shader.uniforms.mixBlur = this._mixBlur;\n shader.uniforms.mixStrength = this._blurStrength;\n shader.uniforms.minDepthThreshold = this._minDepthThreshold;\n shader.uniforms.maxDepthThreshold = this._maxDepthThreshold;\n shader.uniforms.depthScale = this._depthScale;\n shader.uniforms.depthToBlurRatioBias = this._depthToBlurRatioBias;\n shader.uniforms.distortion = this._distortion;\n shader.uniforms.mixContrast = this._mixContrast;\n shader.vertexShader = `\n uniform mat4 textureMatrix;\n varying vec4 my_vUv;\n ${shader.vertexShader}`;\n shader.vertexShader = shader.vertexShader.replace('#include <project_vertex>', `#include <project_vertex>\n my_vUv = textureMatrix * vec4( position, 1.0 );\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );`);\n shader.fragmentShader = `\n uniform sampler2D tDiffuse;\n uniform sampler2D tDiffuseBlur;\n uniform sampler2D tDepth;\n uniform sampler2D distortionMap;\n uniform float distortion;\n uniform float cameraNear;\n\t\t\t uniform float cameraFar;\n uniform bool hasBlur;\n uniform float mixBlur;\n uniform float mirror;\n uniform float mixStrength;\n uniform float minDepthThreshold;\n uniform float maxDepthThreshold;\n uniform float mixContrast;\n uniform float depthScale;\n uniform float depthToBlurRatioBias;\n varying vec4 my_vUv;\n ${shader.fragmentShader}`;\n shader.fragmentShader = shader.fragmentShader.replace('#include <emissivemap_fragment>', `#include <emissivemap_fragment>\n\n float distortionFactor = 0.0;\n #ifdef USE_DISTORTION\n distortionFactor = texture2D(distortionMap, vUv).r * distortion;\n #endif\n\n vec4 new_vUv = my_vUv;\n new_vUv.x += distortionFactor;\n new_vUv.y += distortionFactor;\n\n vec4 base = texture2DProj(tDiffuse, new_vUv);\n vec4 blur = texture2DProj(tDiffuseBlur, new_vUv);\n\n vec4 merge = base;\n\n #ifdef USE_NORMALMAP\n vec2 normal_uv = vec2(0.0);\n vec4 normalColor = texture2D(normalMap, vUv * normalScale);\n vec3 my_normal = normalize( vec3( normalColor.r * 2.0 - 1.0, normalColor.b, normalColor.g * 2.0 - 1.0 ) );\n vec3 coord = new_vUv.xyz / new_vUv.w;\n normal_uv = coord.xy + coord.z * my_normal.xz * 0.05;\n vec4 base_normal = texture2D(tDiffuse, normal_uv);\n vec4 blur_normal = texture2D(tDiffuseBlur, normal_uv);\n merge = base_normal;\n blur = blur_normal;\n #endif\n\n float depthFactor = 0.0001;\n float blurFactor = 0.0;\n\n #ifdef USE_DEPTH\n vec4 depth = texture2DProj(tDepth, new_vUv);\n depthFactor = smoothstep(minDepthThreshold, maxDepthThreshold, 1.0-(depth.r * depth.a));\n depthFactor *= depthScale;\n depthFactor = max(0.0001, min(1.0, depthFactor));\n\n #ifdef USE_BLUR\n blur = blur * min(1.0, depthFactor + depthToBlurRatioBias);\n merge = merge * min(1.0, depthFactor + 0.5);\n #else\n merge = merge * depthFactor;\n #endif\n\n #endif\n\n float reflectorRoughnessFactor = roughness;\n #ifdef USE_ROUGHNESSMAP\n vec4 reflectorTexelRoughness = texture2D( roughnessMap, vUv );\n reflectorRoughnessFactor *= reflectorTexelRoughness.g;\n #endif\n\n #ifdef USE_BLUR\n blurFactor = min(1.0, mixBlur * reflectorRoughnessFactor);\n merge = mix(merge, blur, blurFactor);\n #endif\n\n vec4 newMerge = vec4(0.0, 0.0, 0.0, 1.0);\n newMerge.r = (merge.r - 0.5) * mixContrast + 0.5;\n newMerge.g = (merge.g - 0.5) * mixContrast + 0.5;\n newMerge.b = (merge.b - 0.5) * mixContrast + 0.5;\n\n diffuseColor.rgb = diffuseColor.rgb * ((1.0 - min(1.0, mirror)) + newMerge.rgb * mixStrength);\n `);\n }\n get tDiffuse() {\n return this._tDiffuse.value;\n }\n set tDiffuse(v) {\n this._tDiffuse.value = v;\n }\n get tDepth() {\n return this._tDepth.value;\n }\n set tDepth(v) {\n this._tDepth.value = v;\n }\n get distortionMap() {\n return this._distortionMap.value;\n }\n set distortionMap(v) {\n this._distortionMap.value = v;\n }\n get tDiffuseBlur() {\n return this._tDiffuseBlur.value;\n }\n set tDiffuseBlur(v) {\n this._tDiffuseBlur.value = v;\n }\n get textureMatrix() {\n return this._textureMatrix.value;\n }\n set textureMatrix(v) {\n this._textureMatrix.value = v;\n }\n get hasBlur() {\n return this._hasBlur.value;\n }\n set hasBlur(v) {\n this._hasBlur.value = v;\n }\n get mirror() {\n return this._mirror.value;\n }\n set mirror(v) {\n this._mirror.value = v;\n }\n get mixBlur() {\n return this._mixBlur.value;\n }\n set mixBlur(v) {\n this._mixBlur.value = v;\n }\n get mixStrength() {\n return this._blurStrength.value;\n }\n set mixStrength(v) {\n this._blurStrength.value = v;\n }\n get minDepthThreshold() {\n return this._minDepthThreshold.value;\n }\n set minDepthThreshold(v) {\n this._minDepthThreshold.value = v;\n }\n get maxDepthThreshold() {\n return this._maxDepthThreshold.value;\n }\n set maxDepthThreshold(v) {\n this._maxDepthThreshold.value = v;\n }\n get depthScale() {\n return this._depthScale.value;\n }\n set depthScale(v) {\n this._depthScale.value = v;\n }\n get depthToBlurRatioBias() {\n return this._depthToBlurRatioBias.value;\n }\n set depthToBlurRatioBias(v) {\n this._depthToBlurRatioBias.value = v;\n }\n get distortion() {\n return this._distortion.value;\n }\n set distortion(v) {\n this._distortion.value = v;\n }\n get mixContrast() {\n return this._mixContrast.value;\n }\n set mixContrast(v) {\n this._mixContrast.value = v;\n }\n}\n\nexport { MeshReflectorMaterial };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { Plane, Vector3, Matrix4, Vector4, PerspectiveCamera, WebGLRenderTarget, DepthTexture, DepthFormat, UnsignedShortType, LinearFilter, HalfFloatType } from 'three';\nimport { extend, useThree, useFrame } from '@react-three/fiber';\nimport { BlurPass } from '../materials/BlurPass.js';\nimport { MeshReflectorMaterial as MeshReflectorMaterial$1 } from '../materials/MeshReflectorMaterial.js';\n\nconst MeshReflectorMaterial = /* @__PURE__ */React.forwardRef(({\n mixBlur = 0,\n mixStrength = 1,\n resolution = 256,\n blur = [0, 0],\n minDepthThreshold = 0.9,\n maxDepthThreshold = 1,\n depthScale = 0,\n depthToBlurRatioBias = 0.25,\n mirror = 0,\n distortion = 1,\n mixContrast = 1,\n distortionMap,\n reflectorOffset = 0,\n ...props\n}, ref) => {\n extend({\n MeshReflectorMaterialImpl: MeshReflectorMaterial$1\n });\n const gl = useThree(({\n gl\n }) => gl);\n const camera = useThree(({\n camera\n }) => camera);\n const scene = useThree(({\n scene\n }) => scene);\n blur = Array.isArray(blur) ? blur : [blur, blur];\n const hasBlur = blur[0] + blur[1] > 0;\n const blurX = blur[0];\n const blurY = blur[1];\n const materialRef = React.useRef(null);\n React.useImperativeHandle(ref, () => materialRef.current, []);\n const [reflectorPlane] = React.useState(() => new Plane());\n const [normal] = React.useState(() => new Vector3());\n const [reflectorWorldPosition] = React.useState(() => new Vector3());\n const [cameraWorldPosition] = React.useState(() => new Vector3());\n const [rotationMatrix] = React.useState(() => new Matrix4());\n const [lookAtPosition] = React.useState(() => new Vector3(0, 0, -1));\n const [clipPlane] = React.useState(() => new Vector4());\n const [view] = React.useState(() => new Vector3());\n const [target] = React.useState(() => new Vector3());\n const [q] = React.useState(() => new Vector4());\n const [textureMatrix] = React.useState(() => new Matrix4());\n const [virtualCamera] = React.useState(() => new PerspectiveCamera());\n const beforeRender = React.useCallback(() => {\n var _materialRef$current;\n const parent = materialRef.current.parent || ((_materialRef$current = materialRef.current) == null || (_materialRef$current = _materialRef$current.__r3f.parent) == null ? void 0 : _materialRef$current.object);\n if (!parent) return;\n reflectorWorldPosition.setFromMatrixPosition(parent.matrixWorld);\n cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);\n rotationMatrix.extractRotation(parent.matrixWorld);\n normal.set(0, 0, 1);\n normal.applyMatrix4(rotationMatrix);\n reflectorWorldPosition.addScaledVector(normal, reflectorOffset);\n view.subVectors(reflectorWorldPosition, cameraWorldPosition);\n // Avoid rendering when reflector is facing away\n if (view.dot(normal) > 0) return;\n view.reflect(normal).negate();\n view.add(reflectorWorldPosition);\n rotationMatrix.extractRotation(camera.matrixWorld);\n lookAtPosition.set(0, 0, -1);\n lookAtPosition.applyMatrix4(rotationMatrix);\n lookAtPosition.add(cameraWorldPosition);\n target.subVectors(reflectorWorldPosition, lookAtPosition);\n target.reflect(normal).negate();\n target.add(reflectorWorldPosition);\n virtualCamera.position.copy(view);\n virtualCamera.up.set(0, 1, 0);\n virtualCamera.up.applyMatrix4(rotationMatrix);\n virtualCamera.up.reflect(normal);\n virtualCamera.lookAt(target);\n virtualCamera.far = camera.far; // Used in WebGLBackground\n virtualCamera.updateMatrixWorld();\n virtualCamera.projectionMatrix.copy(camera.projectionMatrix);\n // Update the texture matrix\n textureMatrix.set(0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0);\n textureMatrix.multiply(virtualCamera.projectionMatrix);\n textureMatrix.multiply(virtualCamera.matrixWorldInverse);\n textureMatrix.multiply(parent.matrixWorld);\n // Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html\n // Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf\n reflectorPlane.setFromNormalAndCoplanarPoint(normal, reflectorWorldPosition);\n reflectorPlane.applyMatrix4(virtualCamera.matrixWorldInverse);\n clipPlane.set(reflectorPlane.normal.x, reflectorPlane.normal.y, reflectorPlane.normal.z, reflectorPlane.constant);\n const projectionMatrix = virtualCamera.projectionMatrix;\n q.x = (Math.sign(clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0];\n q.y = (Math.sign(clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5];\n q.z = -1.0;\n q.w = (1.0 + projectionMatrix.elements[10]) / projectionMatrix.elements[14];\n // Calculate the scaled plane vector\n clipPlane.multiplyScalar(2.0 / clipPlane.dot(q));\n // Replacing the third row of the projection matrix\n projectionMatrix.elements[2] = clipPlane.x;\n projectionMatrix.elements[6] = clipPlane.y;\n projectionMatrix.elements[10] = clipPlane.z + 1.0;\n projectionMatrix.elements[14] = clipPlane.w;\n }, [camera, reflectorOffset]);\n const [fbo1, fbo2, blurpass, reflectorProps] = React.useMemo(() => {\n const parameters = {\n minFilter: LinearFilter,\n magFilter: LinearFilter,\n type: HalfFloatType\n };\n const fbo1 = new WebGLRenderTarget(resolution, resolution, parameters);\n fbo1.depthBuffer = true;\n fbo1.depthTexture = new DepthTexture(resolution, resolution);\n fbo1.depthTexture.format = DepthFormat;\n fbo1.depthTexture.type = UnsignedShortType;\n const fbo2 = new WebGLRenderTarget(resolution, resolution, parameters);\n const blurpass = new BlurPass({\n gl,\n resolution,\n width: blurX,\n height: blurY,\n minDepthThreshold,\n maxDepthThreshold,\n depthScale,\n depthToBlurRatioBias\n });\n const reflectorProps = {\n mirror,\n textureMatrix,\n mixBlur,\n tDiffuse: fbo1.texture,\n tDepth: fbo1.depthTexture,\n tDiffuseBlur: fbo2.texture,\n hasBlur,\n mixStrength,\n minDepthThreshold,\n maxDepthThreshold,\n depthScale,\n depthToBlurRatioBias,\n distortion,\n distortionMap,\n mixContrast,\n 'defines-USE_BLUR': hasBlur ? '' : undefined,\n 'defines-USE_DEPTH': depthScale > 0 ? '' : undefined,\n 'defines-USE_DISTORTION': distortionMap ? '' : undefined\n };\n return [fbo1, fbo2, blurpass, reflectorProps];\n }, [gl, blurX, blurY, textureMatrix, resolution, mirror, hasBlur, mixBlur, mixStrength, minDepthThreshold, maxDepthThreshold, depthScale, depthToBlurRatioBias, distortion, distortionMap, mixContrast]);\n useFrame(() => {\n var _materialRef$current2;\n const parent = materialRef.current.parent || ((_materialRef$current2 = materialRef.current) == null || (_materialRef$current2 = _materialRef$current2.__r3f.parent) == null ? void 0 : _materialRef$current2.object);\n if (!parent) return;\n parent.visible = false;\n const currentXrEnabled = gl.xr.enabled;\n const currentShadowAutoUpdate = gl.shadowMap.autoUpdate;\n beforeRender();\n gl.xr.enabled = false;\n gl.shadowMap.autoUpdate = false;\n gl.setRenderTarget(fbo1);\n gl.state.buffers.depth.setMask(true);\n if (!gl.autoClear) gl.clear();\n gl.render(scene, virtualCamera);\n if (hasBlur) blurpass.render(gl, fbo1, fbo2);\n gl.xr.enabled = currentXrEnabled;\n gl.shadowMap.autoUpdate = currentShadowAutoUpdate;\n parent.visible = true;\n gl.setRenderTarget(null);\n });\n return /*#__PURE__*/React.createElement(\"meshReflectorMaterialImpl\", _extends({\n attach: \"material\"\n // Defines can't be updated dynamically, so we need to recreate the material\n ,\n key: 'key' + reflectorProps['defines-USE_BLUR'] + reflectorProps['defines-USE_DEPTH'] + reflectorProps['defines-USE_DISTORTION'],\n ref: materialRef\n }, reflectorProps, props));\n});\n\nexport { MeshReflectorMaterial };\n","import * as THREE from 'three';\nimport { shaderMaterial } from '../core/shaderMaterial.js';\nimport { shaderStructs, shaderIntersectFunction, MeshBVHUniformStruct } from 'three-mesh-bvh';\nimport { version } from '../helpers/constants.js';\n\n// Author: N8Programs\nconst MeshRefractionMaterial = /* @__PURE__ */shaderMaterial({\n envMap: null,\n bounces: 3,\n ior: 2.4,\n correctMips: true,\n aberrationStrength: 0.01,\n fresnel: 0,\n bvh: /* @__PURE__ */new MeshBVHUniformStruct(),\n color: /* @__PURE__ */new THREE.Color('white'),\n opacity: 1,\n resolution: /* @__PURE__ */new THREE.Vector2(),\n viewMatrixInverse: /* @__PURE__ */new THREE.Matrix4(),\n projectionMatrixInverse: /* @__PURE__ */new THREE.Matrix4()\n}, /*glsl*/`\n uniform mat4 viewMatrixInverse;\n\n varying vec3 vWorldPosition;\n varying vec3 vNormal;\n varying mat4 vModelMatrixInverse;\n\n #include <color_pars_vertex>\n\n void main() {\n #include <color_vertex>\n\n vec4 transformedNormal = vec4(normal, 0.0);\n vec4 transformedPosition = vec4(position, 1.0);\n #ifdef USE_INSTANCING\n transformedNormal = instanceMatrix * transformedNormal;\n transformedPosition = instanceMatrix * transformedPosition;\n #endif\n\n #ifdef USE_INSTANCING\n vModelMatrixInverse = inverse(modelMatrix * instanceMatrix);\n #else\n vModelMatrixInverse = inverse(modelMatrix);\n #endif\n\n vWorldPosition = (modelMatrix * transformedPosition).xyz;\n vNormal = normalize((viewMatrixInverse * vec4(normalMatrix * transformedNormal.xyz, 0.0)).xyz);\n gl_Position = projectionMatrix * viewMatrix * modelMatrix * transformedPosition;\n }`, /*glsl*/`\n #define ENVMAP_TYPE_CUBE_UV\n precision highp isampler2D;\n precision highp usampler2D;\n varying vec3 vWorldPosition;\n varying vec3 vNormal;\n varying mat4 vModelMatrixInverse;\n\n #include <color_pars_fragment>\n\n #ifdef ENVMAP_TYPE_CUBEM\n uniform samplerCube envMap;\n #else\n uniform sampler2D envMap;\n #endif\n\n uniform float bounces;\n ${shaderStructs}\n ${shaderIntersectFunction}\n uniform BVH bvh;\n uniform float ior;\n uniform bool correctMips;\n uniform vec2 resolution;\n uniform float fresnel;\n uniform mat4 modelMatrix;\n uniform mat4 projectionMatrixInverse;\n uniform mat4 viewMatrixInverse;\n uniform float aberrationStrength;\n uniform vec3 color;\n uniform float opacity;\n\n float fresnelFunc(vec3 viewDirection, vec3 worldNormal) {\n return pow( 1.0 + dot( viewDirection, worldNormal), 10.0 );\n }\n\n vec3 totalInternalReflection(vec3 ro, vec3 rd, vec3 normal, float ior, mat4 modelMatrixInverse) {\n vec3 rayOrigin = ro;\n vec3 rayDirection = rd;\n rayDirection = refract(rayDirection, normal, 1.0 / ior);\n rayOrigin = vWorldPosition + rayDirection * 0.001;\n rayOrigin = (modelMatrixInverse * vec4(rayOrigin, 1.0)).xyz;\n rayDirection = normalize((modelMatrixInverse * vec4(rayDirection, 0.0)).xyz);\n for(float i = 0.0; i < bounces; i++) {\n uvec4 faceIndices = uvec4( 0u );\n vec3 faceNormal = vec3( 0.0, 0.0, 1.0 );\n vec3 barycoord = vec3( 0.0 );\n float side = 1.0;\n float dist = 0.0;\n bvhIntersectFirstHit( bvh, rayOrigin, rayDirection, faceIndices, faceNormal, barycoord, side, dist );\n vec3 hitPos = rayOrigin + rayDirection * max(dist - 0.001, 0.0);\n vec3 tempDir = refract(rayDirection, faceNormal, ior);\n if (length(tempDir) != 0.0) {\n rayDirection = tempDir;\n break;\n }\n rayDirection = reflect(rayDirection, faceNormal);\n rayOrigin = hitPos + rayDirection * 0.01;\n }\n rayDirection = normalize((modelMatrix * vec4(rayDirection, 0.0)).xyz);\n return rayDirection;\n }\n\n #include <common>\n #include <cube_uv_reflection_fragment>\n\n #ifdef ENVMAP_TYPE_CUBEM\n vec4 textureGradient(samplerCube envMap, vec3 rayDirection, vec3 directionCamPerfect) {\n return textureGrad(envMap, rayDirection, dFdx(correctMips ? directionCamPerfect: rayDirection), dFdy(correctMips ? directionCamPerfect: rayDirection));\n }\n #else\n vec4 textureGradient(sampler2D envMap, vec3 rayDirection, vec3 directionCamPerfect) {\n vec2 uvv = equirectUv( rayDirection );\n vec2 smoothUv = equirectUv( directionCamPerfect );\n return textureGrad(envMap, uvv, dFdx(correctMips ? smoothUv : uvv), dFdy(correctMips ? smoothUv : uvv));\n }\n #endif\n\n void main() {\n vec2 uv = gl_FragCoord.xy / resolution;\n vec3 directionCamPerfect = (projectionMatrixInverse * vec4(uv * 2.0 - 1.0, 0.0, 1.0)).xyz;\n directionCamPerfect = (viewMatrixInverse * vec4(directionCamPerfect, 0.0)).xyz;\n directionCamPerfect = normalize(directionCamPerfect);\n vec3 normal = vNormal;\n vec3 rayOrigin = cameraPosition;\n vec3 rayDirection = normalize(vWorldPosition - cameraPosition);\n\n vec4 diffuseColor = vec4(color, opacity);\n #include <color_fragment>\n\n #ifdef CHROMATIC_ABERRATIONS\n vec3 rayDirectionG = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior, 1.0), vModelMatrixInverse);\n #ifdef FAST_CHROMA\n vec3 rayDirectionR = normalize(rayDirectionG + 1.0 * vec3(aberrationStrength / 2.0));\n vec3 rayDirectionB = normalize(rayDirectionG - 1.0 * vec3(aberrationStrength / 2.0));\n #else\n vec3 rayDirectionR = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior * (1.0 - aberrationStrength), 1.0), vModelMatrixInverse);\n vec3 rayDirectionB = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior * (1.0 + aberrationStrength), 1.0), vModelMatrixInverse);\n #endif\n float finalColorR = textureGradient(envMap, rayDirectionR, directionCamPerfect).r;\n float finalColorG = textureGradient(envMap, rayDirectionG, directionCamPerfect).g;\n float finalColorB = textureGradient(envMap, rayDirectionB, directionCamPerfect).b;\n diffuseColor.rgb *= vec3(finalColorR, finalColorG, finalColorB);\n #else\n rayDirection = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior, 1.0), vModelMatrixInverse);\n diffuseColor.rgb *= textureGradient(envMap, rayDirection, directionCamPerfect).rgb;\n #endif\n\n vec3 viewDirection = normalize(vWorldPosition - cameraPosition);\n float nFresnel = fresnelFunc(viewDirection, normal) * fresnel;\n gl_FragColor = vec4(mix(diffuseColor.rgb, vec3(1.0), nFresnel), diffuseColor.a);\n\n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }`);\n\nexport { MeshRefractionMaterial };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useRef, useMemo, useLayoutEffect } from 'react';\nimport { extend, useThree, useFrame } from '@react-three/fiber';\nimport { MeshBVHUniformStruct, MeshBVH, SAH } from 'three-mesh-bvh';\nimport { MeshRefractionMaterial as MeshRefractionMaterial$1 } from '../materials/MeshRefractionMaterial.js';\n\nconst isCubeTexture = def => def && def.isCubeTexture;\nfunction MeshRefractionMaterial({\n aberrationStrength = 0,\n fastChroma = true,\n envMap,\n ...props\n}) {\n extend({\n MeshRefractionMaterial: MeshRefractionMaterial$1\n });\n const material = useRef(null);\n const {\n size\n } = useThree();\n const defines = useMemo(() => {\n var _ref, _envMap$image$;\n const temp = {};\n // Sampler2D and SamplerCube need different defines\n const isCubeMap = isCubeTexture(envMap);\n const w = (_ref = isCubeMap ? (_envMap$image$ = envMap.image[0]) == null ? void 0 : _envMap$image$.width : envMap.image.width) !== null && _ref !== void 0 ? _ref : 1024;\n const cubeSize = w / 4;\n const _lodMax = Math.floor(Math.log2(cubeSize));\n const _cubeSize = Math.pow(2, _lodMax);\n const width = 3 * Math.max(_cubeSize, 16 * 7);\n const height = 4 * _cubeSize;\n if (isCubeMap) temp.ENVMAP_TYPE_CUBEM = '';\n temp.CUBEUV_TEXEL_WIDTH = `${1.0 / width}`;\n temp.CUBEUV_TEXEL_HEIGHT = `${1.0 / height}`;\n temp.CUBEUV_MAX_MIP = `${_lodMax}.0`;\n // Add defines from chromatic aberration\n if (aberrationStrength > 0) temp.CHROMATIC_ABERRATIONS = '';\n if (fastChroma) temp.FAST_CHROMA = '';\n return temp;\n }, [aberrationStrength, fastChroma]);\n useLayoutEffect(() => {\n var _material$current;\n // Get the geometry of this materials parent\n const geometry = (_material$current = material.current) == null || (_material$current = _material$current.__r3f) == null || (_material$current = _material$current.parent) == null || (_material$current = _material$current.object) == null ? void 0 : _material$current.geometry;\n // Update the BVH\n if (geometry) {\n material.current.bvh = new MeshBVHUniformStruct();\n material.current.bvh.updateFrom(new MeshBVH(geometry.clone().toNonIndexed(), {\n strategy: SAH\n }));\n }\n }, []);\n useFrame(({\n camera\n }) => {\n material.current.viewMatrixInverse = camera.matrixWorld;\n material.current.projectionMatrixInverse = camera.projectionMatrixInverse;\n });\n return /*#__PURE__*/React.createElement(\"meshRefractionMaterial\", _extends({\n // @ts-ignore\n key: JSON.stringify(defines)\n // @ts-ignore\n ,\n defines: defines,\n ref: material,\n resolution: [size.width, size.height],\n aberrationStrength: aberrationStrength,\n envMap: envMap\n }, props));\n}\n\nexport { MeshRefractionMaterial };\n","import { shaderMaterial } from '../core/shaderMaterial.js';\n\nconst DiscardMaterial = /* @__PURE__ */shaderMaterial({}, 'void main() { }', 'void main() { gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); discard; }');\n\nexport { DiscardMaterial };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { extend, useFrame } from '@react-three/fiber';\nimport { useFBO } from './Fbo.js';\nimport { DiscardMaterial } from '../materials/DiscardMaterial.js';\n\nclass MeshTransmissionMaterialImpl extends THREE.MeshPhysicalMaterial {\n constructor(samples = 6, transmissionSampler = false) {\n super();\n this.uniforms = {\n chromaticAberration: {\n value: 0.05\n },\n // Transmission must always be 0, unless transmissionSampler is being used\n transmission: {\n value: 0\n },\n // Instead a workaround is used, see below for reasons why\n _transmission: {\n value: 1\n },\n transmissionMap: {\n value: null\n },\n // Roughness is 1 in THREE.MeshPhysicalMaterial but it makes little sense in a transmission material\n roughness: {\n value: 0\n },\n thickness: {\n value: 0\n },\n thicknessMap: {\n value: null\n },\n attenuationDistance: {\n value: Infinity\n },\n attenuationColor: {\n value: new THREE.Color('white')\n },\n anisotropicBlur: {\n value: 0.1\n },\n time: {\n value: 0\n },\n distortion: {\n value: 0.0\n },\n distortionScale: {\n value: 0.5\n },\n temporalDistortion: {\n value: 0.0\n },\n buffer: {\n value: null\n }\n };\n this.onBeforeCompile = shader => {\n shader.uniforms = {\n ...shader.uniforms,\n ...this.uniforms\n };\n\n // Fix for r153-r156 anisotropy chunks\n // https://github.com/mrdoob/three.js/pull/26716\n if (this.anisotropy > 0) shader.defines.USE_ANISOTROPY = '';\n\n // If the transmission sampler is active inject a flag\n if (transmissionSampler) shader.defines.USE_SAMPLER = '';\n // Otherwise we do use use .transmission and must therefore force USE_TRANSMISSION\n // because threejs won't inject it for us\n else shader.defines.USE_TRANSMISSION = '';\n\n // Head\n shader.fragmentShader = /*glsl*/`\n uniform float chromaticAberration; \n uniform float anisotropicBlur; \n uniform float time;\n uniform float distortion;\n uniform float distortionScale;\n uniform float temporalDistortion;\n uniform sampler2D buffer;\n\n vec3 random3(vec3 c) {\n float j = 4096.0*sin(dot(c,vec3(17.0, 59.4, 15.0)));\n vec3 r;\n r.z = fract(512.0*j);\n j *= .125;\n r.x = fract(512.0*j);\n j *= .125;\n r.y = fract(512.0*j);\n return r-0.5;\n }\n\n uint hash( uint x ) {\n x += ( x << 10u );\n x ^= ( x >> 6u );\n x += ( x << 3u );\n x ^= ( x >> 11u );\n x += ( x << 15u );\n return x;\n }\n\n // Compound versions of the hashing algorithm I whipped together.\n uint hash( uvec2 v ) { return hash( v.x ^ hash(v.y) ); }\n uint hash( uvec3 v ) { return hash( v.x ^ hash(v.y) ^ hash(v.z) ); }\n uint hash( uvec4 v ) { return hash( v.x ^ hash(v.y) ^ hash(v.z) ^ hash(v.w) ); }\n\n // Construct a float with half-open range [0:1] using low 23 bits.\n // All zeroes yields 0.0, all ones yields the next smallest representable value below 1.0.\n float floatConstruct( uint m ) {\n const uint ieeeMantissa = 0x007FFFFFu; // binary32 mantissa bitmask\n const uint ieeeOne = 0x3F800000u; // 1.0 in IEEE binary32\n m &= ieeeMantissa; // Keep only mantissa bits (fractional part)\n m |= ieeeOne; // Add fractional part to 1.0\n float f = uintBitsToFloat( m ); // Range [1:2]\n return f - 1.0; // Range [0:1]\n }\n\n // Pseudo-random value in half-open range [0:1].\n float randomBase( float x ) { return floatConstruct(hash(floatBitsToUint(x))); }\n float randomBase( vec2 v ) { return floatConstruct(hash(floatBitsToUint(v))); }\n float randomBase( vec3 v ) { return floatConstruct(hash(floatBitsToUint(v))); }\n float randomBase( vec4 v ) { return floatConstruct(hash(floatBitsToUint(v))); }\n float rand(float seed) {\n float result = randomBase(vec3(gl_FragCoord.xy, seed));\n return result;\n }\n\n const float F3 = 0.3333333;\n const float G3 = 0.1666667;\n\n float snoise(vec3 p) {\n vec3 s = floor(p + dot(p, vec3(F3)));\n vec3 x = p - s + dot(s, vec3(G3));\n vec3 e = step(vec3(0.0), x - x.yzx);\n vec3 i1 = e*(1.0 - e.zxy);\n vec3 i2 = 1.0 - e.zxy*(1.0 - e);\n vec3 x1 = x - i1 + G3;\n vec3 x2 = x - i2 + 2.0*G3;\n vec3 x3 = x - 1.0 + 3.0*G3;\n vec4 w, d;\n w.x = dot(x, x);\n w.y = dot(x1, x1);\n w.z = dot(x2, x2);\n w.w = dot(x3, x3);\n w = max(0.6 - w, 0.0);\n d.x = dot(random3(s), x);\n d.y = dot(random3(s + i1), x1);\n d.z = dot(random3(s + i2), x2);\n d.w = dot(random3(s + 1.0), x3);\n w *= w;\n w *= w;\n d *= w;\n return dot(d, vec4(52.0));\n }\n\n float snoiseFractal(vec3 m) {\n return 0.5333333* snoise(m)\n +0.2666667* snoise(2.0*m)\n +0.1333333* snoise(4.0*m)\n +0.0666667* snoise(8.0*m);\n }\\n` + shader.fragmentShader;\n\n // Remove transmission\n shader.fragmentShader = shader.fragmentShader.replace('#include <transmission_pars_fragment>', /*glsl*/`\n #ifdef USE_TRANSMISSION\n // Transmission code is based on glTF-Sampler-Viewer\n // https://github.com/KhronosGroup/glTF-Sample-Viewer\n uniform float _transmission;\n uniform float thickness;\n uniform float attenuationDistance;\n uniform vec3 attenuationColor;\n #ifdef USE_TRANSMISSIONMAP\n uniform sampler2D transmissionMap;\n #endif\n #ifdef USE_THICKNESSMAP\n uniform sampler2D thicknessMap;\n #endif\n uniform vec2 transmissionSamplerSize;\n uniform sampler2D transmissionSamplerMap;\n uniform mat4 modelMatrix;\n uniform mat4 projectionMatrix;\n varying vec3 vWorldPosition;\n vec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n // Direction of refracted light.\n vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n // Compute rotation-independant scaling of the model matrix.\n vec3 modelScale;\n modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n // The thickness is specified in local space.\n return normalize( refractionVector ) * thickness * modelScale;\n }\n float applyIorToRoughness( const in float roughness, const in float ior ) {\n // Scale roughness with IOR so that an IOR of 1.0 results in no microfacet refraction and\n // an IOR of 1.5 results in the default amount of microfacet refraction.\n return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n }\n vec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n float framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior ); \n #ifdef USE_SAMPLER\n #ifdef texture2DLodEXT\n return texture2DLodEXT(transmissionSamplerMap, fragCoord.xy, framebufferLod);\n #else\n return texture2D(transmissionSamplerMap, fragCoord.xy, framebufferLod);\n #endif\n #else\n return texture2D(buffer, fragCoord.xy);\n #endif\n }\n vec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n if ( isinf( attenuationDistance ) ) {\n // Attenuation distance is +∞, i.e. the transmitted color is not attenuated at all.\n return radiance;\n } else {\n // Compute light attenuation using Beer's law.\n vec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n vec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); // Beer's law\n return transmittance * radiance;\n }\n }\n vec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n const in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n const in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness,\n const in vec3 attenuationColor, const in float attenuationDistance ) {\n vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n vec3 refractedRayExit = position + transmissionRay;\n // Project refracted vector on the framebuffer, while mapping to normalized device coordinates.\n vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n vec2 refractionCoords = ndcPos.xy / ndcPos.w;\n refractionCoords += 1.0;\n refractionCoords /= 2.0;\n // Sample framebuffer to get pixel the refracted ray hits.\n vec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n vec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\n // Get the specular component.\n vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n return vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\n }\n #endif\\n`);\n\n // Add refraction\n shader.fragmentShader = shader.fragmentShader.replace('#include <transmission_fragment>', /*glsl*/` \n // Improve the refraction to use the world pos\n material.transmission = _transmission;\n material.transmissionAlpha = 1.0;\n material.thickness = thickness;\n material.attenuationDistance = attenuationDistance;\n material.attenuationColor = attenuationColor;\n #ifdef USE_TRANSMISSIONMAP\n material.transmission *= texture2D( transmissionMap, vUv ).r;\n #endif\n #ifdef USE_THICKNESSMAP\n material.thickness *= texture2D( thicknessMap, vUv ).g;\n #endif\n \n vec3 pos = vWorldPosition;\n float runningSeed = 0.0;\n vec3 v = normalize( cameraPosition - pos );\n vec3 n = inverseTransformDirection( normal, viewMatrix );\n vec3 transmission = vec3(0.0);\n float transmissionR, transmissionB, transmissionG;\n float randomCoords = rand(runningSeed++);\n float thickness_smear = thickness * max(pow(roughnessFactor, 0.33), anisotropicBlur);\n vec3 distortionNormal = vec3(0.0);\n vec3 temporalOffset = vec3(time, -time, -time) * temporalDistortion;\n if (distortion > 0.0) {\n distortionNormal = distortion * vec3(snoiseFractal(vec3((pos * distortionScale + temporalOffset))), snoiseFractal(vec3(pos.zxy * distortionScale - temporalOffset)), snoiseFractal(vec3(pos.yxz * distortionScale + temporalOffset)));\n }\n for (float i = 0.0; i < ${samples}.0; i ++) {\n vec3 sampleNorm = normalize(n + roughnessFactor * roughnessFactor * 2.0 * normalize(vec3(rand(runningSeed++) - 0.5, rand(runningSeed++) - 0.5, rand(runningSeed++) - 0.5)) * pow(rand(runningSeed++), 0.33) + distortionNormal);\n transmissionR = getIBLVolumeRefraction(\n sampleNorm, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n pos, modelMatrix, viewMatrix, projectionMatrix, material.ior, material.thickness + thickness_smear * (i + randomCoords) / float(${samples}),\n material.attenuationColor, material.attenuationDistance\n ).r;\n transmissionG = getIBLVolumeRefraction(\n sampleNorm, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n pos, modelMatrix, viewMatrix, projectionMatrix, material.ior * (1.0 + chromaticAberration * (i + randomCoords) / float(${samples})) , material.thickness + thickness_smear * (i + randomCoords) / float(${samples}),\n material.attenuationColor, material.attenuationDistance\n ).g;\n transmissionB = getIBLVolumeRefraction(\n sampleNorm, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n pos, modelMatrix, viewMatrix, projectionMatrix, material.ior * (1.0 + 2.0 * chromaticAberration * (i + randomCoords) / float(${samples})), material.thickness + thickness_smear * (i + randomCoords) / float(${samples}),\n material.attenuationColor, material.attenuationDistance\n ).b;\n transmission.r += transmissionR;\n transmission.g += transmissionG;\n transmission.b += transmissionB;\n }\n transmission /= ${samples}.0;\n totalDiffuse = mix( totalDiffuse, transmission.rgb, material.transmission );\\n`);\n };\n Object.keys(this.uniforms).forEach(name => Object.defineProperty(this, name, {\n get: () => this.uniforms[name].value,\n set: v => this.uniforms[name].value = v\n }));\n }\n}\nconst MeshTransmissionMaterial = /* @__PURE__ */React.forwardRef(({\n buffer,\n transmissionSampler = false,\n backside = false,\n side = THREE.FrontSide,\n transmission = 1,\n thickness = 0,\n backsideThickness = 0,\n backsideEnvMapIntensity = 1,\n samples = 10,\n resolution,\n backsideResolution,\n background,\n anisotropy,\n anisotropicBlur,\n ...props\n}, fref) => {\n extend({\n MeshTransmissionMaterial: MeshTransmissionMaterialImpl\n });\n const ref = React.useRef(null);\n const [discardMaterial] = React.useState(() => new DiscardMaterial());\n const fboBack = useFBO(backsideResolution || resolution);\n const fboMain = useFBO(resolution);\n let oldBg;\n let oldEnvMapIntensity;\n let oldTone;\n let parent;\n useFrame(state => {\n ref.current.time = state.clock.elapsedTime;\n // Render only if the buffer matches the built-in and no transmission sampler is set\n if (ref.current.buffer === fboMain.texture && !transmissionSampler) {\n var _r3f$parent;\n parent = (_r3f$parent = ref.current.__r3f.parent) == null ? void 0 : _r3f$parent.object;\n if (parent) {\n // Save defaults\n oldTone = state.gl.toneMapping;\n oldBg = state.scene.background;\n oldEnvMapIntensity = ref.current.envMapIntensity;\n\n // Switch off tonemapping lest it double tone maps\n // Save the current background and set the HDR as the new BG\n // Use discardmaterial, the parent will be invisible, but it's shadows will still be cast\n state.gl.toneMapping = THREE.NoToneMapping;\n if (background) state.scene.background = background;\n parent.material = discardMaterial;\n if (backside) {\n // Render into the backside buffer\n state.gl.setRenderTarget(fboBack);\n state.gl.render(state.scene, state.camera);\n // And now prepare the material for the main render using the backside buffer\n parent.material = ref.current;\n parent.material.buffer = fboBack.texture;\n parent.material.thickness = backsideThickness;\n parent.material.side = THREE.BackSide;\n parent.material.envMapIntensity = backsideEnvMapIntensity;\n }\n\n // Render into the main buffer\n state.gl.setRenderTarget(fboMain);\n state.gl.render(state.scene, state.camera);\n parent.material = ref.current;\n parent.material.thickness = thickness;\n parent.material.side = side;\n parent.material.buffer = fboMain.texture;\n parent.material.envMapIntensity = oldEnvMapIntensity;\n\n // Set old state back\n state.scene.background = oldBg;\n state.gl.setRenderTarget(null);\n state.gl.toneMapping = oldTone;\n }\n }\n });\n\n // Forward ref\n React.useImperativeHandle(fref, () => ref.current, []);\n return /*#__PURE__*/React.createElement(\"meshTransmissionMaterial\", _extends({\n // Samples must re-compile the shader so we memoize it\n args: [samples, transmissionSampler],\n ref: ref\n }, props, {\n buffer: buffer || fboMain.texture\n // @ts-ignore\n ,\n _transmission: transmission\n // In order for this to not incur extra cost \"transmission\" must be set to 0 and treated as a reserved prop.\n // This is because THREE.WebGLRenderer will check for transmission > 0 and execute extra renders.\n // The exception is when transmissionSampler is set, in which case we are using three's built in sampler.\n ,\n anisotropicBlur: anisotropicBlur !== null && anisotropicBlur !== void 0 ? anisotropicBlur : anisotropy,\n transmission: transmissionSampler ? transmission : 0,\n thickness: thickness,\n side: side\n }));\n});\n\nexport { MeshTransmissionMaterial };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { extend } from '@react-three/fiber';\nimport { DiscardMaterial } from '../materials/DiscardMaterial.js';\n\nconst MeshDiscardMaterial = /* @__PURE__ */React.forwardRef((props, fref) => {\n extend({\n DiscardMaterialImpl: DiscardMaterial\n });\n return /*#__PURE__*/React.createElement(\"discardMaterialImpl\", _extends({\n ref: fref\n }, props));\n});\n\nexport { MeshDiscardMaterial };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\n\nfunction MultiMaterial(props) {\n const group = React.useRef(null);\n React.useLayoutEffect(() => {\n const parent = group.current.parent;\n const geometry = parent == null ? void 0 : parent.geometry;\n if (geometry) {\n const oldMaterial = parent.material;\n parent.material = group.current.__r3f.children.map(instance => instance.object);\n const oldGroups = [...geometry.groups];\n geometry.clearGroups();\n parent.material.forEach((material, index) => {\n if (index < parent.material.length - 1) material.depthWrite = false;\n geometry.addGroup(0, Infinity, index);\n });\n return () => {\n parent.material = oldMaterial;\n geometry.groups = oldGroups;\n };\n }\n });\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: group\n }, props));\n}\n\nexport { MultiMaterial };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { version } from '../helpers/constants.js';\n\nconst opaque_fragment = version >= 154 ? 'opaque_fragment' : 'output_fragment';\nclass PointMaterialImpl extends THREE.PointsMaterial {\n constructor(props) {\n super(props);\n this.onBeforeCompile = (shader, renderer) => {\n const {\n isWebGL2\n } = renderer.capabilities;\n shader.fragmentShader = shader.fragmentShader.replace(`#include <${opaque_fragment}>`, `\n ${!isWebGL2 ? `#extension GL_OES_standard_derivatives : enable\\n#include <${opaque_fragment}>` : `#include <${opaque_fragment}>`}\n vec2 cxy = 2.0 * gl_PointCoord - 1.0;\n float r = dot(cxy, cxy);\n float delta = fwidth(r); \n float mask = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r);\n gl_FragColor = vec4(gl_FragColor.rgb, mask * gl_FragColor.a );\n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n `);\n };\n }\n}\nconst PointMaterial = /* @__PURE__ */React.forwardRef((props, ref) => {\n const [material] = React.useState(() => new PointMaterialImpl(null));\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({}, props, {\n object: material,\n ref: ref,\n attach: \"material\"\n }));\n});\n\nexport { PointMaterial, PointMaterialImpl };\n","import * as React from 'react';\nimport * as THREE from 'three';\nimport { useThree } from '@react-three/fiber';\n\n/* Integration and compilation: @N8Programs\n Inspired by:\n https://github.com/mrdoob/three.js/blob/dev/examples/webgl_shadowmap_pcss.html\n https://developer.nvidia.com/gpugems/gpugems2/part-ii-shading-lighting-and-shadows/chapter-17-efficient-soft-edged-shadows-using\n https://developer.download.nvidia.com/whitepapers/2008/PCSS_Integration.pdf\n https://github.com/mrdoob/three.js/blob/master/examples/webgl_shadowmap_pcss.html [spidersharma03]\n https://spline.design/\n Concept:\n https://www.gamedev.net/tutorials/programming/graphics/contact-hardening-soft-shadows-made-fast-r4906/\n Vogel Disk Implementation:\n https://www.shadertoy.com/view/4l3yRM [ashalah]\n High-Frequency Noise Implementation:\n https://www.shadertoy.com/view/tt3fDH [spawner64]\n*/\nconst pcss = ({\n focus = 0,\n size = 25,\n samples = 10\n} = {}) => `\n#define PENUMBRA_FILTER_SIZE float(${size})\n#define RGB_NOISE_FUNCTION(uv) (randRGB(uv))\nvec3 randRGB(vec2 uv) {\n return vec3(\n fract(sin(dot(uv, vec2(12.75613, 38.12123))) * 13234.76575),\n fract(sin(dot(uv, vec2(19.45531, 58.46547))) * 43678.23431),\n fract(sin(dot(uv, vec2(23.67817, 78.23121))) * 93567.23423)\n );\n}\n\nvec3 lowPassRandRGB(vec2 uv) {\n // 3x3 convolution (average)\n // can be implemented as separable with an extra buffer for a total of 6 samples instead of 9\n vec3 result = vec3(0);\n result += RGB_NOISE_FUNCTION(uv + vec2(-1.0, -1.0));\n result += RGB_NOISE_FUNCTION(uv + vec2(-1.0, 0.0));\n result += RGB_NOISE_FUNCTION(uv + vec2(-1.0, +1.0));\n result += RGB_NOISE_FUNCTION(uv + vec2( 0.0, -1.0));\n result += RGB_NOISE_FUNCTION(uv + vec2( 0.0, 0.0));\n result += RGB_NOISE_FUNCTION(uv + vec2( 0.0, +1.0));\n result += RGB_NOISE_FUNCTION(uv + vec2(+1.0, -1.0));\n result += RGB_NOISE_FUNCTION(uv + vec2(+1.0, 0.0));\n result += RGB_NOISE_FUNCTION(uv + vec2(+1.0, +1.0));\n result *= 0.111111111; // 1.0 / 9.0\n return result;\n}\nvec3 highPassRandRGB(vec2 uv) {\n // by subtracting the low-pass signal from the original signal, we're being left with the high-pass signal\n // hp(x) = x - lp(x)\n return RGB_NOISE_FUNCTION(uv) - lowPassRandRGB(uv) + 0.5;\n}\n\n\nvec2 vogelDiskSample(int sampleIndex, int sampleCount, float angle) {\n const float goldenAngle = 2.399963f; // radians\n float r = sqrt(float(sampleIndex) + 0.5f) / sqrt(float(sampleCount));\n float theta = float(sampleIndex) * goldenAngle + angle;\n float sine = sin(theta);\n float cosine = cos(theta);\n return vec2(cosine, sine) * r;\n}\nfloat penumbraSize( const in float zReceiver, const in float zBlocker ) { // Parallel plane estimation\n return (zReceiver - zBlocker) / zBlocker;\n}\nfloat findBlocker(sampler2D shadowMap, vec2 uv, float compare, float angle) {\n float texelSize = 1.0 / float(textureSize(shadowMap, 0).x);\n float blockerDepthSum = float(${focus});\n float blockers = 0.0;\n\n int j = 0;\n vec2 offset = vec2(0.);\n float depth = 0.;\n\n #pragma unroll_loop_start\n for(int i = 0; i < ${samples}; i ++) {\n offset = (vogelDiskSample(j, ${samples}, angle) * texelSize) * 2.0 * PENUMBRA_FILTER_SIZE;\n depth = unpackRGBAToDepth( texture2D( shadowMap, uv + offset));\n if (depth < compare) {\n blockerDepthSum += depth;\n blockers++;\n }\n j++;\n }\n #pragma unroll_loop_end\n\n if (blockers > 0.0) {\n return blockerDepthSum / blockers;\n }\n return -1.0;\n}\n\n \nfloat vogelFilter(sampler2D shadowMap, vec2 uv, float zReceiver, float filterRadius, float angle) {\n float texelSize = 1.0 / float(textureSize(shadowMap, 0).x);\n float shadow = 0.0f;\n int j = 0;\n vec2 vogelSample = vec2(0.0);\n vec2 offset = vec2(0.0);\n #pragma unroll_loop_start\n for (int i = 0; i < ${samples}; i++) {\n vogelSample = vogelDiskSample(j, ${samples}, angle) * texelSize;\n offset = vogelSample * (1.0 + filterRadius * float(${size}));\n shadow += step( zReceiver, unpackRGBAToDepth( texture2D( shadowMap, uv + offset ) ) );\n j++;\n }\n #pragma unroll_loop_end\n return shadow * 1.0 / ${samples}.0;\n}\n\nfloat PCSS (sampler2D shadowMap, vec4 coords) {\n vec2 uv = coords.xy;\n float zReceiver = coords.z; // Assumed to be eye-space z in this code\n float angle = highPassRandRGB(gl_FragCoord.xy).r * PI2;\n float avgBlockerDepth = findBlocker(shadowMap, uv, zReceiver, angle);\n if (avgBlockerDepth == -1.0) {\n return 1.0;\n }\n float penumbraRatio = penumbraSize(zReceiver, avgBlockerDepth);\n return vogelFilter(shadowMap, uv, zReceiver, 1.25 * penumbraRatio, angle);\n}`;\nfunction reset(gl, scene, camera) {\n scene.traverse(object => {\n if (object.material) {\n gl.properties.remove(object.material);\n object.material.dispose == null || object.material.dispose();\n }\n });\n gl.info.programs.length = 0;\n gl.compile(scene, camera);\n}\nfunction SoftShadows({\n focus = 0,\n samples = 10,\n size = 25\n}) {\n const gl = useThree(state => state.gl);\n const scene = useThree(state => state.scene);\n const camera = useThree(state => state.camera);\n React.useEffect(() => {\n const original = THREE.ShaderChunk.shadowmap_pars_fragment;\n THREE.ShaderChunk.shadowmap_pars_fragment = THREE.ShaderChunk.shadowmap_pars_fragment.replace('#ifdef USE_SHADOWMAP', '#ifdef USE_SHADOWMAP\\n' + pcss({\n size,\n samples,\n focus\n })).replace('#if defined( SHADOWMAP_TYPE_PCF )', '\\nreturn PCSS(shadowMap, shadowCoord);\\n#if defined( SHADOWMAP_TYPE_PCF )');\n reset(gl, scene, camera);\n return () => {\n THREE.ShaderChunk.shadowmap_pars_fragment = original;\n reset(gl, scene, camera);\n };\n }, [focus, size, samples]);\n return null;\n}\n\nexport { SoftShadows };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\n\nfunction create(type, effect) {\n const El = type + 'Geometry';\n return /*#__PURE__*/React.forwardRef(({\n args,\n children,\n ...props\n }, fref) => {\n const ref = React.useRef(null);\n React.useImperativeHandle(fref, () => ref.current);\n React.useLayoutEffect(() => void (effect == null ? void 0 : effect(ref.current)));\n return /*#__PURE__*/React.createElement(\"mesh\", _extends({\n ref: ref\n }, props), /*#__PURE__*/React.createElement(El, {\n attach: \"geometry\",\n args: args\n }), children);\n });\n}\nconst Box = /* @__PURE__ */create('box');\nconst Circle = /* @__PURE__ */create('circle');\nconst Cone = /* @__PURE__ */create('cone');\nconst Cylinder = /* @__PURE__ */create('cylinder');\nconst Sphere = /* @__PURE__ */create('sphere');\nconst Plane = /* @__PURE__ */create('plane');\nconst Tube = /* @__PURE__ */create('tube');\nconst Torus = /* @__PURE__ */create('torus');\nconst TorusKnot = /* @__PURE__ */create('torusKnot');\nconst Tetrahedron = /* @__PURE__ */create('tetrahedron');\nconst Ring = /* @__PURE__ */create('ring');\nconst Polyhedron = /* @__PURE__ */create('polyhedron');\nconst Icosahedron = /* @__PURE__ */create('icosahedron');\nconst Octahedron = /* @__PURE__ */create('octahedron');\nconst Dodecahedron = /* @__PURE__ */create('dodecahedron');\nconst Extrude = /* @__PURE__ */create('extrude');\nconst Lathe = /* @__PURE__ */create('lathe');\nconst Capsule = /* @__PURE__ */create('capsule');\nconst Shape = /* @__PURE__ */create('shape', ({\n geometry\n}) => {\n // Calculate UVs (by https://discourse.threejs.org/u/prisoner849)\n // https://discourse.threejs.org/t/custom-shape-in-image-not-working/49348/10\n const pos = geometry.attributes.position;\n const b3 = new THREE.Box3().setFromBufferAttribute(pos);\n const b3size = new THREE.Vector3();\n b3.getSize(b3size);\n const uv = [];\n let x = 0,\n y = 0,\n u = 0,\n v = 0;\n for (let i = 0; i < pos.count; i++) {\n x = pos.getX(i);\n y = pos.getY(i);\n u = (x - b3.min.x) / b3size.x;\n v = (y - b3.min.y) / b3size.y;\n uv.push(u, v);\n }\n geometry.setAttribute('uv', new THREE.Float32BufferAttribute(uv, 2));\n});\n\nexport { Box, Capsule, Circle, Cone, Cylinder, Dodecahedron, Extrude, Icosahedron, Lathe, Octahedron, Plane, Polyhedron, Ring, Shape, Sphere, Tetrahedron, Torus, TorusKnot, Tube };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { Shape } from 'three';\nimport { toCreasedNormals } from 'three-stdlib';\n\nconst eps = 0.00001;\nfunction createShape(width, height, radius0) {\n const shape = new Shape();\n const radius = radius0 - eps;\n shape.absarc(eps, eps, eps, -Math.PI / 2, -Math.PI, true);\n shape.absarc(eps, height - radius * 2, eps, Math.PI, Math.PI / 2, true);\n shape.absarc(width - radius * 2, height - radius * 2, eps, Math.PI / 2, 0, true);\n shape.absarc(width - radius * 2, eps, eps, 0, -Math.PI / 2, true);\n return shape;\n}\nconst RoundedBox = /* @__PURE__ */React.forwardRef(function RoundedBox({\n args: [width = 1, height = 1, depth = 1] = [],\n radius = 0.05,\n steps = 1,\n smoothness = 4,\n bevelSegments = 4,\n creaseAngle = 0.4,\n children,\n ...rest\n}, ref) {\n return /*#__PURE__*/React.createElement(\"mesh\", _extends({\n ref: ref\n }, rest), /*#__PURE__*/React.createElement(RoundedBoxGeometry, {\n args: [width, height, depth],\n radius: radius,\n steps: steps,\n smoothness: smoothness,\n bevelSegments: bevelSegments,\n creaseAngle: creaseAngle\n }), children);\n});\nconst RoundedBoxGeometry = /* @__PURE__ */React.forwardRef(function RoundedBoxGeometry({\n args: [width = 1, height = 1, depth = 1] = [],\n radius = 0.05,\n steps = 1,\n smoothness = 4,\n bevelSegments = 4,\n creaseAngle = 0.4,\n ...rest\n}, ref) {\n const shape = React.useMemo(() => createShape(width, height, radius), [width, height, radius]);\n const params = React.useMemo(() => ({\n depth: depth - radius * 2,\n bevelEnabled: true,\n bevelSegments: bevelSegments * 2,\n steps,\n bevelSize: radius - eps,\n bevelThickness: radius,\n curveSegments: smoothness\n }), [depth, radius, smoothness, bevelSegments, steps]);\n const geomRef = React.useRef(null);\n React.useLayoutEffect(() => {\n if (geomRef.current) {\n geomRef.current.center();\n toCreasedNormals(geomRef.current, creaseAngle);\n }\n }, [shape, params, creaseAngle]);\n React.useImperativeHandle(ref, () => geomRef.current);\n return /*#__PURE__*/React.createElement(\"extrudeGeometry\", _extends({\n ref: geomRef,\n args: [shape, params]\n }, rest));\n});\n\nexport { RoundedBox, RoundedBoxGeometry };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\n\nfunction createScreenQuadGeometry() {\n const geometry = new THREE.BufferGeometry();\n const vertices = new Float32Array([-1, -1, 3, -1, -1, 3]);\n geometry.boundingSphere = new THREE.Sphere();\n geometry.boundingSphere.set(new THREE.Vector3(), Infinity);\n geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 2));\n return geometry;\n}\nconst ScreenQuad = /* @__PURE__ */React.forwardRef(function ScreenQuad({\n children,\n ...restProps\n}, ref) {\n const geometry = React.useMemo(createScreenQuadGeometry, []);\n return /*#__PURE__*/React.createElement(\"mesh\", _extends({\n ref: ref,\n geometry: geometry,\n frustumCulled: false\n }, restProps), children);\n});\n\nexport { ScreenQuad };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\n\nconst Resize = /* @__PURE__ */React.forwardRef(({\n children,\n width,\n height,\n depth,\n box3,\n precise = true,\n ...props\n}, fRef) => {\n const ref = React.useRef(null);\n const outer = React.useRef(null);\n const inner = React.useRef(null);\n React.useLayoutEffect(() => {\n outer.current.matrixWorld.identity();\n let box = box3 || new THREE.Box3().setFromObject(inner.current, precise);\n const w = box.max.x - box.min.x;\n const h = box.max.y - box.min.y;\n const d = box.max.z - box.min.z;\n let dimension = Math.max(w, h, d);\n if (width) dimension = w;\n if (height) dimension = h;\n if (depth) dimension = d;\n outer.current.scale.setScalar(1 / dimension);\n }, [width, height, depth, box3, precise]);\n React.useImperativeHandle(fRef, () => ref.current, []);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref\n }, props), /*#__PURE__*/React.createElement(\"group\", {\n ref: outer\n }, /*#__PURE__*/React.createElement(\"group\", {\n ref: inner\n }, children)));\n});\n\nexport { Resize };\n","import * as React from 'react';\nimport * as THREE from 'three';\nimport { useThree, useFrame } from '@react-three/fiber';\n\nvar AnimationState = /*#__PURE__*/function (AnimationState) {\n AnimationState[AnimationState[\"NONE\"] = 0] = \"NONE\";\n AnimationState[AnimationState[\"START\"] = 1] = \"START\";\n AnimationState[AnimationState[\"ACTIVE\"] = 2] = \"ACTIVE\";\n return AnimationState;\n}(AnimationState || {});\nconst isOrthographic = def => def && def.isOrthographicCamera;\nconst isBox3 = def => def && def.isBox3;\nconst interpolateFuncDefault = t => {\n // Imitates the previously used THREE.MathUtils.damp\n return 1 - Math.exp(-5 * t) + 0.007 * t;\n};\nconst context = /*#__PURE__*/React.createContext(null);\nfunction Bounds({\n children,\n maxDuration = 1.0,\n margin = 1.2,\n observe,\n fit,\n clip,\n interpolateFunc = interpolateFuncDefault,\n onFit\n}) {\n const ref = React.useRef(null);\n const {\n camera,\n size,\n invalidate\n } = useThree();\n const controls = useThree(state => state.controls);\n const onFitRef = React.useRef(onFit);\n onFitRef.current = onFit;\n const origin = React.useRef({\n camPos: new THREE.Vector3(),\n camRot: new THREE.Quaternion(),\n camZoom: 1\n });\n const goal = React.useRef({\n camPos: undefined,\n camRot: undefined,\n camZoom: undefined,\n camUp: undefined,\n target: undefined\n });\n const animationState = React.useRef(AnimationState.NONE);\n const t = React.useRef(0); // represent animation state from 0 to 1\n\n const [box] = React.useState(() => new THREE.Box3());\n const api = React.useMemo(() => {\n function getSize() {\n const boxSize = box.getSize(new THREE.Vector3());\n const center = box.getCenter(new THREE.Vector3());\n const maxSize = Math.max(boxSize.x, boxSize.y, boxSize.z);\n const fitHeightDistance = isOrthographic(camera) ? maxSize * 4 : maxSize / (2 * Math.atan(Math.PI * camera.fov / 360));\n const fitWidthDistance = isOrthographic(camera) ? maxSize * 4 : fitHeightDistance / camera.aspect;\n const distance = margin * Math.max(fitHeightDistance, fitWidthDistance);\n return {\n box,\n size: boxSize,\n center,\n distance\n };\n }\n return {\n getSize,\n refresh(object) {\n if (isBox3(object)) box.copy(object);else {\n const target = object || ref.current;\n if (!target) return this;\n target.updateWorldMatrix(true, true);\n box.setFromObject(target);\n }\n if (box.isEmpty()) {\n const max = camera.position.length() || 10;\n box.setFromCenterAndSize(new THREE.Vector3(), new THREE.Vector3(max, max, max));\n }\n origin.current.camPos.copy(camera.position);\n origin.current.camRot.copy(camera.quaternion);\n isOrthographic(camera) && (origin.current.camZoom = camera.zoom);\n goal.current.camPos = undefined;\n goal.current.camRot = undefined;\n goal.current.camZoom = undefined;\n goal.current.camUp = undefined;\n goal.current.target = undefined;\n return this;\n },\n reset() {\n const {\n center,\n distance\n } = getSize();\n const direction = camera.position.clone().sub(center).normalize();\n goal.current.camPos = center.clone().addScaledVector(direction, distance);\n goal.current.target = center.clone();\n const mCamRot = new THREE.Matrix4().lookAt(goal.current.camPos, goal.current.target, camera.up);\n goal.current.camRot = new THREE.Quaternion().setFromRotationMatrix(mCamRot);\n animationState.current = AnimationState.START;\n t.current = 0;\n return this;\n },\n moveTo(position) {\n goal.current.camPos = Array.isArray(position) ? new THREE.Vector3(...position) : position.clone();\n animationState.current = AnimationState.START;\n t.current = 0;\n return this;\n },\n lookAt({\n target,\n up\n }) {\n goal.current.target = Array.isArray(target) ? new THREE.Vector3(...target) : target.clone();\n if (up) {\n goal.current.camUp = Array.isArray(up) ? new THREE.Vector3(...up) : up.clone();\n } else {\n goal.current.camUp = camera.up.clone();\n }\n const mCamRot = new THREE.Matrix4().lookAt(goal.current.camPos || camera.position, goal.current.target, goal.current.camUp);\n goal.current.camRot = new THREE.Quaternion().setFromRotationMatrix(mCamRot);\n animationState.current = AnimationState.START;\n t.current = 0;\n return this;\n },\n /**\n * @deprecated Use moveTo and lookAt instead\n */\n to({\n position,\n target\n }) {\n return this.moveTo(position).lookAt({\n target\n });\n },\n fit() {\n if (!isOrthographic(camera)) {\n // For non-orthographic cameras, fit should behave exactly like reset\n return this.reset();\n }\n\n // For orthographic cameras, fit should only modify the zoom value\n let maxHeight = 0,\n maxWidth = 0;\n const vertices = [new THREE.Vector3(box.min.x, box.min.y, box.min.z), new THREE.Vector3(box.min.x, box.max.y, box.min.z), new THREE.Vector3(box.min.x, box.min.y, box.max.z), new THREE.Vector3(box.min.x, box.max.y, box.max.z), new THREE.Vector3(box.max.x, box.max.y, box.max.z), new THREE.Vector3(box.max.x, box.max.y, box.min.z), new THREE.Vector3(box.max.x, box.min.y, box.max.z), new THREE.Vector3(box.max.x, box.min.y, box.min.z)];\n\n // Transform the center and each corner to camera space\n const pos = goal.current.camPos || camera.position;\n const target = goal.current.target || (controls == null ? void 0 : controls.target);\n const up = goal.current.camUp || camera.up;\n const mCamWInv = target ? new THREE.Matrix4().lookAt(pos, target, up).setPosition(pos).invert() : camera.matrixWorldInverse;\n for (const v of vertices) {\n v.applyMatrix4(mCamWInv);\n maxHeight = Math.max(maxHeight, Math.abs(v.y));\n maxWidth = Math.max(maxWidth, Math.abs(v.x));\n }\n maxHeight *= 2;\n maxWidth *= 2;\n const zoomForHeight = (camera.top - camera.bottom) / maxHeight;\n const zoomForWidth = (camera.right - camera.left) / maxWidth;\n goal.current.camZoom = Math.min(zoomForHeight, zoomForWidth) / margin;\n animationState.current = AnimationState.START;\n t.current = 0;\n onFitRef.current && onFitRef.current(this.getSize());\n return this;\n },\n clip() {\n const {\n distance\n } = getSize();\n camera.near = distance / 100;\n camera.far = distance * 100;\n camera.updateProjectionMatrix();\n if (controls) {\n controls.maxDistance = distance * 10;\n controls.update();\n }\n invalidate();\n return this;\n }\n };\n }, [box, camera, controls, margin, invalidate]);\n React.useLayoutEffect(() => {\n if (controls) {\n // Try to prevent drag hijacking\n const callback = () => {\n if (controls && goal.current.target && animationState.current !== AnimationState.NONE) {\n const front = new THREE.Vector3().setFromMatrixColumn(camera.matrix, 2);\n const d0 = origin.current.camPos.distanceTo(controls.target);\n const d1 = (goal.current.camPos || origin.current.camPos).distanceTo(goal.current.target);\n const d = (1 - t.current) * d0 + t.current * d1;\n controls.target.copy(camera.position).addScaledVector(front, -d);\n controls.update();\n }\n animationState.current = AnimationState.NONE;\n };\n controls.addEventListener('start', callback);\n return () => controls.removeEventListener('start', callback);\n }\n }, [controls]);\n\n // Scale pointer on window resize\n const count = React.useRef(0);\n React.useLayoutEffect(() => {\n if (observe || count.current++ === 0) {\n api.refresh();\n if (fit) api.reset().fit();\n if (clip) api.clip();\n }\n }, [size, clip, fit, observe, camera, controls]);\n useFrame((state, delta) => {\n // This [additional animation step START] is needed to guarantee that delta used in animation isn't absurdly high (2-3 seconds) which is actually possible if rendering happens on demand...\n if (animationState.current === AnimationState.START) {\n animationState.current = AnimationState.ACTIVE;\n invalidate();\n } else if (animationState.current === AnimationState.ACTIVE) {\n t.current += delta / maxDuration;\n if (t.current >= 1) {\n goal.current.camPos && camera.position.copy(goal.current.camPos);\n goal.current.camRot && camera.quaternion.copy(goal.current.camRot);\n goal.current.camUp && camera.up.copy(goal.current.camUp);\n goal.current.camZoom && isOrthographic(camera) && (camera.zoom = goal.current.camZoom);\n camera.updateMatrixWorld();\n camera.updateProjectionMatrix();\n if (controls && goal.current.target) {\n controls.target.copy(goal.current.target);\n controls.update();\n }\n animationState.current = AnimationState.NONE;\n } else {\n const k = interpolateFunc(t.current);\n goal.current.camPos && camera.position.lerpVectors(origin.current.camPos, goal.current.camPos, k);\n goal.current.camRot && camera.quaternion.slerpQuaternions(origin.current.camRot, goal.current.camRot, k);\n goal.current.camUp && camera.up.set(0, 1, 0).applyQuaternion(camera.quaternion);\n goal.current.camZoom && isOrthographic(camera) && (camera.zoom = (1 - k) * origin.current.camZoom + k * goal.current.camZoom);\n camera.updateMatrixWorld();\n camera.updateProjectionMatrix();\n }\n invalidate();\n }\n });\n return /*#__PURE__*/React.createElement(\"group\", {\n ref: ref\n }, /*#__PURE__*/React.createElement(context.Provider, {\n value: api\n }, children));\n}\nfunction useBounds() {\n return React.useContext(context);\n}\n\nexport { Bounds, useBounds };\n","import * as React from 'react';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { SimplexNoise } from 'three-stdlib';\n\nconst CameraShake = /* @__PURE__ */React.forwardRef(({\n intensity = 1,\n decay,\n decayRate = 0.65,\n maxYaw = 0.1,\n maxPitch = 0.1,\n maxRoll = 0.1,\n yawFrequency = 0.1,\n pitchFrequency = 0.1,\n rollFrequency = 0.1\n}, ref) => {\n const camera = useThree(state => state.camera);\n const defaultControls = useThree(state => state.controls);\n const intensityRef = React.useRef(intensity);\n const initialRotation = React.useRef(camera.rotation.clone());\n const [yawNoise] = React.useState(() => new SimplexNoise());\n const [pitchNoise] = React.useState(() => new SimplexNoise());\n const [rollNoise] = React.useState(() => new SimplexNoise());\n const constrainIntensity = () => {\n if (intensityRef.current < 0 || intensityRef.current > 1) {\n intensityRef.current = intensityRef.current < 0 ? 0 : 1;\n }\n };\n React.useImperativeHandle(ref, () => ({\n getIntensity: () => intensityRef.current,\n setIntensity: val => {\n intensityRef.current = val;\n constrainIntensity();\n }\n }), []);\n React.useEffect(() => {\n if (defaultControls) {\n const callback = () => void (initialRotation.current = camera.rotation.clone());\n defaultControls.addEventListener('change', callback);\n callback();\n return () => void defaultControls.removeEventListener('change', callback);\n }\n }, [camera, defaultControls]);\n useFrame((state, delta) => {\n const shake = Math.pow(intensityRef.current, 2);\n const yaw = maxYaw * shake * yawNoise.noise(state.clock.elapsedTime * yawFrequency, 1);\n const pitch = maxPitch * shake * pitchNoise.noise(state.clock.elapsedTime * pitchFrequency, 1);\n const roll = maxRoll * shake * rollNoise.noise(state.clock.elapsedTime * rollFrequency, 1);\n camera.rotation.set(initialRotation.current.x + pitch, initialRotation.current.y + yaw, initialRotation.current.z + roll);\n if (decay && intensityRef.current > 0) {\n intensityRef.current -= decayRate * delta;\n constrainIntensity();\n }\n });\n return null;\n});\n\nexport { CameraShake };\n","import * as React from 'react';\nimport { useFrame } from '@react-three/fiber';\nimport * as THREE from 'three';\n\nconst Float = /* @__PURE__ */React.forwardRef(({\n children,\n enabled = true,\n speed = 1,\n rotationIntensity = 1,\n floatIntensity = 1,\n floatingRange = [-0.1, 0.1],\n autoInvalidate = false,\n ...props\n}, forwardRef) => {\n const ref = React.useRef(null);\n React.useImperativeHandle(forwardRef, () => ref.current, []);\n const offset = React.useRef(Math.random() * 10000);\n useFrame(state => {\n var _floatingRange$, _floatingRange$2;\n if (!enabled || speed === 0) return;\n if (autoInvalidate) state.invalidate();\n const t = offset.current + state.clock.elapsedTime;\n ref.current.rotation.x = Math.cos(t / 4 * speed) / 8 * rotationIntensity;\n ref.current.rotation.y = Math.sin(t / 4 * speed) / 8 * rotationIntensity;\n ref.current.rotation.z = Math.sin(t / 4 * speed) / 20 * rotationIntensity;\n let yPosition = Math.sin(t / 4 * speed) / 10;\n yPosition = THREE.MathUtils.mapLinear(yPosition, -0.1, 0.1, (_floatingRange$ = floatingRange == null ? void 0 : floatingRange[0]) !== null && _floatingRange$ !== void 0 ? _floatingRange$ : -0.1, (_floatingRange$2 = floatingRange == null ? void 0 : floatingRange[1]) !== null && _floatingRange$2 !== void 0 ? _floatingRange$2 : 0.1);\n ref.current.position.y = yPosition * floatIntensity;\n ref.current.updateMatrix();\n });\n return /*#__PURE__*/React.createElement(\"group\", props, /*#__PURE__*/React.createElement(\"group\", {\n ref: ref,\n matrixAutoUpdate: false\n }, children));\n});\n\nexport { Float };\n","/**\n * @monogrid/gainmap-js v3.4.0\n * With ❤️, by MONOGRID <gainmap@monogrid.com>\n */\n\nimport { ClampToEdgeWrapping, LinearFilter, Scene, OrthographicCamera, HalfFloatType, FloatType, Mesh, PlaneGeometry, WebGLRenderTarget, RGBAFormat, UVMapping, WebGLRenderer, DataTexture, LinearSRGBColorSpace, ShaderMaterial, Texture, MeshBasicMaterial, IntType, ShortType, ByteType, UnsignedIntType, UnsignedByteType } from 'three';\n\nconst getBufferForType = (type, width, height) => {\n let out;\n switch (type) {\n case UnsignedByteType:\n out = new Uint8ClampedArray(width * height * 4);\n break;\n case HalfFloatType:\n out = new Uint16Array(width * height * 4);\n break;\n case UnsignedIntType:\n out = new Uint32Array(width * height * 4);\n break;\n case ByteType:\n out = new Int8Array(width * height * 4);\n break;\n case ShortType:\n out = new Int16Array(width * height * 4);\n break;\n case IntType:\n out = new Int32Array(width * height * 4);\n break;\n case FloatType:\n out = new Float32Array(width * height * 4);\n break;\n default:\n throw new Error('Unsupported data type');\n }\n return out;\n};\nlet _canReadPixelsResult;\n/**\n * Test if this browser implementation can correctly read pixels from the specified\n * Render target type.\n *\n * Runs only once\n *\n * @param type\n * @param renderer\n * @param camera\n * @param renderTargetOptions\n * @returns\n */\nconst canReadPixels = (type, renderer, camera, renderTargetOptions) => {\n if (_canReadPixelsResult !== undefined)\n return _canReadPixelsResult;\n const testRT = new WebGLRenderTarget(1, 1, renderTargetOptions);\n renderer.setRenderTarget(testRT);\n const mesh = new Mesh(new PlaneGeometry(), new MeshBasicMaterial({ color: 0xffffff }));\n renderer.render(mesh, camera);\n renderer.setRenderTarget(null);\n const out = getBufferForType(type, testRT.width, testRT.height);\n renderer.readRenderTargetPixels(testRT, 0, 0, testRT.width, testRT.height, out);\n testRT.dispose();\n mesh.geometry.dispose();\n mesh.material.dispose();\n _canReadPixelsResult = out[0] !== 0;\n return _canReadPixelsResult;\n};\n/**\n * Utility class used for rendering a texture with a material\n *\n * @category Core\n * @group Core\n */\nclass QuadRenderer {\n _renderer;\n _rendererIsDisposable = false;\n _material;\n _scene;\n _camera;\n _quad;\n _renderTarget;\n _width;\n _height;\n _type;\n _colorSpace;\n _supportsReadPixels = true;\n /**\n * Constructs a new QuadRenderer\n *\n * @param options Parameters for this QuadRenderer\n */\n constructor(options) {\n this._width = options.width;\n this._height = options.height;\n this._type = options.type;\n this._colorSpace = options.colorSpace;\n const rtOptions = {\n // fixed options\n format: RGBAFormat,\n depthBuffer: false,\n stencilBuffer: false,\n // user options\n type: this._type, // set in class property\n colorSpace: this._colorSpace, // set in class property\n anisotropy: options.renderTargetOptions?.anisotropy !== undefined ? options.renderTargetOptions?.anisotropy : 1,\n generateMipmaps: options.renderTargetOptions?.generateMipmaps !== undefined ? options.renderTargetOptions?.generateMipmaps : false,\n magFilter: options.renderTargetOptions?.magFilter !== undefined ? options.renderTargetOptions?.magFilter : LinearFilter,\n minFilter: options.renderTargetOptions?.minFilter !== undefined ? options.renderTargetOptions?.minFilter : LinearFilter,\n samples: options.renderTargetOptions?.samples !== undefined ? options.renderTargetOptions?.samples : undefined,\n wrapS: options.renderTargetOptions?.wrapS !== undefined ? options.renderTargetOptions?.wrapS : ClampToEdgeWrapping,\n wrapT: options.renderTargetOptions?.wrapT !== undefined ? options.renderTargetOptions?.wrapT : ClampToEdgeWrapping\n };\n this._material = options.material;\n if (options.renderer) {\n this._renderer = options.renderer;\n }\n else {\n this._renderer = QuadRenderer.instantiateRenderer();\n this._rendererIsDisposable = true;\n }\n this._scene = new Scene();\n this._camera = new OrthographicCamera();\n this._camera.position.set(0, 0, 10);\n this._camera.left = -0.5;\n this._camera.right = 0.5;\n this._camera.top = 0.5;\n this._camera.bottom = -0.5;\n this._camera.updateProjectionMatrix();\n if (!canReadPixels(this._type, this._renderer, this._camera, rtOptions)) {\n let alternativeType;\n switch (this._type) {\n case HalfFloatType:\n alternativeType = this._renderer.extensions.has('EXT_color_buffer_float') ? FloatType : undefined;\n break;\n }\n if (alternativeType !== undefined) {\n console.warn(`This browser does not support reading pixels from ${this._type} RenderTargets, switching to ${FloatType}`);\n this._type = alternativeType;\n }\n else {\n this._supportsReadPixels = false;\n console.warn('This browser dos not support toArray or toDataTexture, calls to those methods will result in an error thrown');\n }\n }\n this._quad = new Mesh(new PlaneGeometry(), this._material);\n this._quad.geometry.computeBoundingBox();\n this._scene.add(this._quad);\n this._renderTarget = new WebGLRenderTarget(this.width, this.height, rtOptions);\n this._renderTarget.texture.mapping = options.renderTargetOptions?.mapping !== undefined ? options.renderTargetOptions?.mapping : UVMapping;\n }\n /**\n * Instantiates a temporary renderer\n *\n * @returns\n */\n static instantiateRenderer() {\n const renderer = new WebGLRenderer();\n renderer.setSize(128, 128);\n // renderer.outputColorSpace = SRGBColorSpace\n // renderer.toneMapping = LinearToneMapping\n // renderer.debug.checkShaderErrors = false\n // this._rendererIsDisposable = true\n return renderer;\n }\n /**\n * Renders the input texture using the specified material\n */\n render = () => {\n this._renderer.setRenderTarget(this._renderTarget);\n try {\n this._renderer.render(this._scene, this._camera);\n }\n catch (e) {\n this._renderer.setRenderTarget(null);\n throw e;\n }\n this._renderer.setRenderTarget(null);\n };\n /**\n * Obtains a Buffer containing the rendered texture.\n *\n * @throws Error if the browser cannot read pixels from this RenderTarget type.\n * @returns a TypedArray containing RGBA values from this renderer\n */\n toArray() {\n if (!this._supportsReadPixels)\n throw new Error('Can\\'t read pixels in this browser');\n const out = getBufferForType(this._type, this._width, this._height);\n this._renderer.readRenderTargetPixels(this._renderTarget, 0, 0, this._width, this._height, out);\n return out;\n }\n /**\n * Performs a readPixel operation in the renderTarget\n * and returns a DataTexture containing the read data\n *\n * @param options options\n * @returns\n */\n toDataTexture(options) {\n const returnValue = new DataTexture(\n // fixed values\n this.toArray(), this.width, this.height, RGBAFormat, this._type, \n // user values\n options?.mapping || UVMapping, options?.wrapS || ClampToEdgeWrapping, options?.wrapT || ClampToEdgeWrapping, options?.magFilter || LinearFilter, options?.minFilter || LinearFilter, options?.anisotropy || 1, \n // fixed value\n LinearSRGBColorSpace);\n // set this afterwards, we can't set it in constructor\n returnValue.generateMipmaps = options?.generateMipmaps !== undefined ? options?.generateMipmaps : false;\n return returnValue;\n }\n /**\n * If using a disposable renderer, it will dispose it.\n */\n disposeOnDemandRenderer() {\n this._renderer.setRenderTarget(null);\n if (this._rendererIsDisposable) {\n this._renderer.dispose();\n this._renderer.forceContextLoss();\n }\n }\n /**\n * Will dispose of **all** assets used by this renderer.\n *\n *\n * @param disposeRenderTarget will dispose of the renderTarget which will not be usable later\n * set this to true if you passed the `renderTarget.texture` to a `PMREMGenerator`\n * or are otherwise done with it.\n *\n * @example\n * ```js\n * const loader = new HDRJPGLoader(renderer)\n * const result = await loader.loadAsync('gainmap.jpeg')\n * const mesh = new Mesh(geometry, new MeshBasicMaterial({ map: result.renderTarget.texture }) )\n * // DO NOT dispose the renderTarget here,\n * // it is used directly in the material\n * result.dispose()\n * ```\n *\n * @example\n * ```js\n * const loader = new HDRJPGLoader(renderer)\n * const pmremGenerator = new PMREMGenerator( renderer );\n * const result = await loader.loadAsync('gainmap.jpeg')\n * const envMap = pmremGenerator.fromEquirectangular(result.renderTarget.texture)\n * const mesh = new Mesh(geometry, new MeshStandardMaterial({ envMap }) )\n * // renderTarget can be disposed here\n * // because it was used to generate a PMREM texture\n * result.dispose(true)\n * ```\n */\n dispose(disposeRenderTarget) {\n this.disposeOnDemandRenderer();\n if (disposeRenderTarget) {\n this.renderTarget.dispose();\n }\n // dispose shader material texture uniforms\n if (this.material instanceof ShaderMaterial) {\n Object.values(this.material.uniforms).forEach(v => {\n if (v.value instanceof Texture)\n v.value.dispose();\n });\n }\n // dispose other material properties\n Object.values(this.material).forEach(value => {\n if (value instanceof Texture)\n value.dispose();\n });\n this.material.dispose();\n this._quad.geometry.dispose();\n }\n /**\n * Width of the texture\n */\n get width() { return this._width; }\n set width(value) {\n this._width = value;\n this._renderTarget.setSize(this._width, this._height);\n }\n /**\n * Height of the texture\n */\n get height() { return this._height; }\n set height(value) {\n this._height = value;\n this._renderTarget.setSize(this._width, this._height);\n }\n /**\n * The renderer used\n */\n get renderer() { return this._renderer; }\n /**\n * The `WebGLRenderTarget` used.\n */\n get renderTarget() { return this._renderTarget; }\n set renderTarget(value) {\n this._renderTarget = value;\n this._width = value.width;\n this._height = value.height;\n // this._type = value.texture.type\n }\n /**\n * The `Material` used.\n */\n get material() { return this._material; }\n /**\n *\n */\n get type() { return this._type; }\n get colorSpace() { return this._colorSpace; }\n}\n\nexport { QuadRenderer as Q };\n","/**\n * @monogrid/gainmap-js v3.4.0\n * With ❤️, by MONOGRID <gainmap@monogrid.com>\n */\n\nimport { SRGBColorSpace, LinearSRGBColorSpace, HalfFloatType, Loader, LoadingManager, Texture, UVMapping, ClampToEdgeWrapping, LinearFilter, LinearMipMapLinearFilter, RGBAFormat, UnsignedByteType } from 'three';\n\n/**\n * Shared decode implementation factory\n * Creates a decode function that prepares a QuadRenderer with the given parameters\n */\nfunction createDecodeFunction(config) {\n return (params) => {\n const { sdr, gainMap, renderer } = params;\n if (sdr.colorSpace !== SRGBColorSpace) {\n console.warn('SDR Colorspace needs to be *SRGBColorSpace*, setting it automatically');\n sdr.colorSpace = SRGBColorSpace;\n }\n sdr.needsUpdate = true;\n if (gainMap.colorSpace !== LinearSRGBColorSpace) {\n console.warn('Gainmap Colorspace needs to be *LinearSRGBColorSpace*, setting it automatically');\n gainMap.colorSpace = LinearSRGBColorSpace;\n }\n gainMap.needsUpdate = true;\n const material = config.createMaterial({\n ...params,\n sdr,\n gainMap\n });\n const quadRenderer = config.createQuadRenderer({\n width: sdr.image.width,\n height: sdr.image.height,\n type: HalfFloatType,\n colorSpace: LinearSRGBColorSpace,\n material,\n renderer,\n renderTargetOptions: params.renderTargetOptions\n });\n return quadRenderer;\n };\n}\n\nclass GainMapNotFoundError extends Error {\n}\n\nclass XMPMetadataNotFoundError extends Error {\n}\n\nconst getXMLValue = (xml, tag, defaultValue) => {\n // Check for attribute format first: tag=\"value\"\n const attributeMatch = new RegExp(`${tag}=\"([^\"]*)\"`, 'i').exec(xml);\n if (attributeMatch)\n return attributeMatch[1];\n // Check for tag format: <tag>value</tag> or <tag><rdf:li>value</rdf:li>...</tag>\n const tagMatch = new RegExp(`<${tag}[^>]*>([\\\\s\\\\S]*?)</${tag}>`, 'i').exec(xml);\n if (tagMatch) {\n // Check if it contains rdf:li elements\n const liValues = tagMatch[1].match(/<rdf:li>([^<]*)<\\/rdf:li>/g);\n if (liValues && liValues.length === 3) {\n return liValues.map(v => v.replace(/<\\/?rdf:li>/g, ''));\n }\n return tagMatch[1].trim();\n }\n if (defaultValue !== undefined)\n return defaultValue;\n throw new Error(`Can't find ${tag} in gainmap metadata`);\n};\nconst extractXMP = (input) => {\n let str;\n // support node test environment\n if (typeof TextDecoder !== 'undefined')\n str = new TextDecoder().decode(input);\n else\n str = input.toString();\n let start = str.indexOf('<x:xmpmeta');\n while (start !== -1) {\n const end = str.indexOf('x:xmpmeta>', start);\n const xmpBlock = str.slice(start, end + 10);\n try {\n const gainMapMin = getXMLValue(xmpBlock, 'hdrgm:GainMapMin', '0');\n const gainMapMax = getXMLValue(xmpBlock, 'hdrgm:GainMapMax');\n const gamma = getXMLValue(xmpBlock, 'hdrgm:Gamma', '1');\n const offsetSDR = getXMLValue(xmpBlock, 'hdrgm:OffsetSDR', '0.015625');\n const offsetHDR = getXMLValue(xmpBlock, 'hdrgm:OffsetHDR', '0.015625');\n // These are always attributes, so we can use a simpler regex\n const hdrCapacityMinMatch = /hdrgm:HDRCapacityMin=\"([^\"]*)\"/.exec(xmpBlock);\n const hdrCapacityMin = hdrCapacityMinMatch ? hdrCapacityMinMatch[1] : '0';\n const hdrCapacityMaxMatch = /hdrgm:HDRCapacityMax=\"([^\"]*)\"/.exec(xmpBlock);\n if (!hdrCapacityMaxMatch)\n throw new Error('Incomplete gainmap metadata');\n const hdrCapacityMax = hdrCapacityMaxMatch[1];\n return {\n gainMapMin: Array.isArray(gainMapMin) ? gainMapMin.map(v => parseFloat(v)) : [parseFloat(gainMapMin), parseFloat(gainMapMin), parseFloat(gainMapMin)],\n gainMapMax: Array.isArray(gainMapMax) ? gainMapMax.map(v => parseFloat(v)) : [parseFloat(gainMapMax), parseFloat(gainMapMax), parseFloat(gainMapMax)],\n gamma: Array.isArray(gamma) ? gamma.map(v => parseFloat(v)) : [parseFloat(gamma), parseFloat(gamma), parseFloat(gamma)],\n offsetSdr: Array.isArray(offsetSDR) ? offsetSDR.map(v => parseFloat(v)) : [parseFloat(offsetSDR), parseFloat(offsetSDR), parseFloat(offsetSDR)],\n offsetHdr: Array.isArray(offsetHDR) ? offsetHDR.map(v => parseFloat(v)) : [parseFloat(offsetHDR), parseFloat(offsetHDR), parseFloat(offsetHDR)],\n hdrCapacityMin: parseFloat(hdrCapacityMin),\n hdrCapacityMax: parseFloat(hdrCapacityMax)\n };\n }\n catch (e) {\n // Continue searching for another xmpmeta block if this one fails\n }\n start = str.indexOf('<x:xmpmeta', end);\n }\n};\n\n/**\n * MPF Extractor (Multi Picture Format Extractor)\n * By Henrik S Nilsson 2019\n *\n * Extracts images stored in images based on the MPF format (found here: https://www.cipa.jp/e/std/std-sec.html\n * under \"CIPA DC-007-Translation-2021 Multi-Picture Format\"\n *\n * Overly commented, and without intention of being complete or production ready.\n * Created to extract depth maps from iPhone images, and to learn about image metadata.\n * Kudos to: Phil Harvey (exiftool), Jaume Sanchez (android-lens-blur-depth-extractor)\n */\nclass MPFExtractor {\n options;\n constructor(options) {\n this.options = {\n debug: options && options.debug !== undefined ? options.debug : false,\n extractFII: options && options.extractFII !== undefined ? options.extractFII : true,\n extractNonFII: options && options.extractNonFII !== undefined ? options.extractNonFII : true\n };\n }\n extract(imageArrayBuffer) {\n return new Promise((resolve, reject) => {\n const debug = this.options.debug;\n const dataView = new DataView(imageArrayBuffer.buffer);\n // If you're executing this line on a big endian machine, it'll be reversed.\n // bigEnd further down though, refers to the endianness of the image itself.\n if (dataView.getUint16(0) !== 0xffd8) {\n reject(new Error('Not a valid jpeg'));\n return;\n }\n const length = dataView.byteLength;\n let offset = 2;\n let loops = 0;\n let marker; // APP# marker\n while (offset < length) {\n if (++loops > 250) {\n reject(new Error(`Found no marker after ${loops} loops 😵`));\n return;\n }\n if (dataView.getUint8(offset) !== 0xff) {\n reject(new Error(`Not a valid marker at offset 0x${offset.toString(16)}, found: 0x${dataView.getUint8(offset).toString(16)}`));\n return;\n }\n marker = dataView.getUint8(offset + 1);\n if (debug)\n console.log(`Marker: ${marker.toString(16)}`);\n if (marker === 0xe2) {\n if (debug)\n console.log('Found APP2 marker (0xffe2)');\n // Works for iPhone 8 Plus, X, and XSMax. Or any photos of MPF format.\n // Great way to visualize image information in html is using Exiftool. E.g.:\n // ./exiftool.exe -htmldump -wantTrailer photo.jpg > photo.html\n const formatPt = offset + 4;\n /*\n * Structure of the MP Format Identifier\n *\n * Offset Addr. | Code (Hex) | Description\n * +00 ff Marker Prefix <-- offset\n * +01 e2 APP2\n * +02 #n APP2 Field Length\n * +03 #n APP2 Field Length\n * +04 4d 'M' <-- formatPt\n * +05 50 'P'\n * +06 46 'F'\n * +07 00 NULL\n * <-- tiffOffset\n */\n if (dataView.getUint32(formatPt) === 0x4d504600) {\n // Found MPF tag, so we start dig out sub images\n const tiffOffset = formatPt + 4;\n let bigEnd; // Endianness from TIFF header\n // Test for TIFF validity and endianness\n // 0x4949 and 0x4D4D ('II' and 'MM') marks Little Endian and Big Endian\n if (dataView.getUint16(tiffOffset) === 0x4949) {\n bigEnd = false;\n }\n else if (dataView.getUint16(tiffOffset) === 0x4d4d) {\n bigEnd = true;\n }\n else {\n reject(new Error('No valid endianness marker found in TIFF header'));\n return;\n }\n if (dataView.getUint16(tiffOffset + 2, !bigEnd) !== 0x002a) {\n reject(new Error('Not valid TIFF data! (no 0x002A marker)'));\n return;\n }\n // 32 bit number stating the offset from the start of the 8 Byte MP Header\n // to MP Index IFD Least possible value is thus 8 (means 0 offset)\n const firstIFDOffset = dataView.getUint32(tiffOffset + 4, !bigEnd);\n if (firstIFDOffset < 0x00000008) {\n reject(new Error('Not valid TIFF data! (First offset less than 8)'));\n return;\n }\n // Move ahead to MP Index IFD\n // Assume we're at the first IFD, so firstIFDOffset points to\n // MP Index IFD and not MP Attributes IFD. (If we try extract from a sub image,\n // we fail silently here due to this assumption)\n // Count (2 Byte) | MP Index Fields a.k.a. MP Entries (count * 12 Byte) | Offset of Next IFD (4 Byte)\n const dirStart = tiffOffset + firstIFDOffset; // Start of IFD (Image File Directory)\n const count = dataView.getUint16(dirStart, !bigEnd); // Count of MPEntries (2 Byte)\n // Extract info from MPEntries (starting after Count)\n const entriesStart = dirStart + 2;\n let numberOfImages = 0;\n for (let i = entriesStart; i < entriesStart + 12 * count; i += 12) {\n // Each entry is 12 Bytes long\n // Check MP Index IFD tags, here we only take tag 0xb001 = Number of images\n if (dataView.getUint16(i, !bigEnd) === 0xb001) {\n // stored in Last 4 bytes of its 12 Byte entry.\n numberOfImages = dataView.getUint32(i + 8, !bigEnd);\n }\n }\n const nextIFDOffsetLen = 4; // 4 Byte offset field that appears after MP Index IFD tags\n const MPImageListValPt = dirStart + 2 + count * 12 + nextIFDOffsetLen;\n const images = [];\n for (let i = MPImageListValPt; i < MPImageListValPt + numberOfImages * 16; i += 16) {\n const image = {\n MPType: dataView.getUint32(i, !bigEnd),\n size: dataView.getUint32(i + 4, !bigEnd),\n // This offset is specified relative to the address of the MP Endian\n // field in the MP Header, unless the image is a First Individual Image,\n // in which case the value of the offset shall be NULL (0x00000000).\n dataOffset: dataView.getUint32(i + 8, !bigEnd),\n dependantImages: dataView.getUint32(i + 12, !bigEnd),\n start: -1,\n end: -1,\n isFII: false\n };\n if (!image.dataOffset) {\n // dataOffset is 0x00000000 for First Individual Image\n image.start = 0;\n image.isFII = true;\n }\n else {\n image.start = tiffOffset + image.dataOffset;\n image.isFII = false;\n }\n image.end = image.start + image.size;\n images.push(image);\n }\n if (this.options.extractNonFII && images.length) {\n const bufferBlob = new Blob([dataView]);\n const imgs = [];\n for (const image of images) {\n if (image.isFII && !this.options.extractFII) {\n continue; // Skip FII\n }\n const imageBlob = bufferBlob.slice(image.start, image.end + 1, 'image/jpeg');\n // we don't need this\n // const imageUrl = URL.createObjectURL(imageBlob)\n // image.img = document.createElement('img')\n // image.img.src = imageUrl\n imgs.push(imageBlob);\n }\n resolve(imgs);\n }\n }\n }\n offset += 2 + dataView.getUint16(offset + 2);\n }\n });\n }\n}\n\n/**\n * Extracts XMP Metadata and the gain map recovery image\n * from a single JPEG file.\n *\n * @category Decoding Functions\n * @group Decoding Functions\n * @param jpegFile an `Uint8Array` containing and encoded JPEG file\n * @returns an sdr `Uint8Array` compressed in JPEG, a gainMap `Uint8Array` compressed in JPEG and the XMP parsed XMP metadata\n * @throws Error if XMP Metadata is not found\n * @throws Error if Gain map image is not found\n * @example\n * import { FileLoader } from 'three'\n * import { extractGainmapFromJPEG } from '@monogrid/gainmap-js'\n *\n * const jpegFile = await new FileLoader()\n * .setResponseType('arraybuffer')\n * .loadAsync('image.jpg')\n *\n * const { sdr, gainMap, metadata } = extractGainmapFromJPEG(jpegFile)\n */\nconst extractGainmapFromJPEG = async (jpegFile) => {\n const metadata = extractXMP(jpegFile);\n if (!metadata)\n throw new XMPMetadataNotFoundError('Gain map XMP metadata not found');\n const mpfExtractor = new MPFExtractor({ extractFII: true, extractNonFII: true });\n const images = await mpfExtractor.extract(jpegFile);\n if (images.length !== 2)\n throw new GainMapNotFoundError('Gain map recovery image not found');\n return {\n sdr: new Uint8Array(await images[0].arrayBuffer()),\n gainMap: new Uint8Array(await images[1].arrayBuffer()),\n metadata\n };\n};\n\n/**\n * private function, async get image from blob\n *\n * @param blob\n * @returns\n */\nconst getHTMLImageFromBlob = (blob) => {\n return new Promise((resolve, reject) => {\n const img = document.createElement('img');\n img.onload = () => { resolve(img); };\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n img.onerror = (e) => { reject(e); };\n img.src = URL.createObjectURL(blob);\n });\n};\n\n/**\n * Shared base class for loaders that extracts common logic\n */\nclass LoaderBaseShared extends Loader {\n _renderer;\n _renderTargetOptions;\n _internalLoadingManager;\n _config;\n constructor(config, manager) {\n super(manager);\n this._config = config;\n if (config.renderer)\n this._renderer = config.renderer;\n this._internalLoadingManager = new LoadingManager();\n }\n setRenderer(renderer) {\n this._renderer = renderer;\n return this;\n }\n setRenderTargetOptions(options) {\n this._renderTargetOptions = options;\n return this;\n }\n prepareQuadRenderer() {\n if (!this._renderer) {\n console.warn('WARNING: A Renderer was not passed to this Loader constructor or in setRenderer, the result of this Loader will need to be converted to a Data Texture with toDataTexture() before you can use it in your renderer.');\n }\n const material = this._config.createMaterial({\n gainMapMax: [1, 1, 1],\n gainMapMin: [0, 0, 0],\n gamma: [1, 1, 1],\n offsetHdr: [1, 1, 1],\n offsetSdr: [1, 1, 1],\n hdrCapacityMax: 1,\n hdrCapacityMin: 0,\n maxDisplayBoost: 1,\n gainMap: new Texture(),\n sdr: new Texture()\n });\n return this._config.createQuadRenderer({\n width: 16,\n height: 16,\n type: HalfFloatType,\n colorSpace: LinearSRGBColorSpace,\n material,\n renderer: this._renderer,\n renderTargetOptions: this._renderTargetOptions\n });\n }\n async processImages(sdrBuffer, gainMapBuffer, imageOrientation) {\n const gainMapBlob = gainMapBuffer ? new Blob([gainMapBuffer], { type: 'image/jpeg' }) : undefined;\n const sdrBlob = new Blob([sdrBuffer], { type: 'image/jpeg' });\n let sdrImage;\n let gainMapImage;\n let needsFlip = false;\n if (typeof createImageBitmap === 'undefined') {\n const res = await Promise.all([\n gainMapBlob ? getHTMLImageFromBlob(gainMapBlob) : Promise.resolve(undefined),\n getHTMLImageFromBlob(sdrBlob)\n ]);\n gainMapImage = res[0];\n sdrImage = res[1];\n needsFlip = imageOrientation === 'flipY';\n }\n else {\n const res = await Promise.all([\n gainMapBlob ? createImageBitmap(gainMapBlob, { imageOrientation: imageOrientation || 'flipY' }) : Promise.resolve(undefined),\n createImageBitmap(sdrBlob, { imageOrientation: imageOrientation || 'flipY' })\n ]);\n gainMapImage = res[0];\n sdrImage = res[1];\n }\n return { sdrImage, gainMapImage, needsFlip };\n }\n createTextures(sdrImage, gainMapImage, needsFlip) {\n const gainMap = new Texture(gainMapImage || new ImageData(2, 2), UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, LinearMipMapLinearFilter, RGBAFormat, UnsignedByteType, 1, LinearSRGBColorSpace);\n gainMap.flipY = needsFlip;\n gainMap.needsUpdate = true;\n const sdr = new Texture(sdrImage, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, LinearMipMapLinearFilter, RGBAFormat, UnsignedByteType, 1, SRGBColorSpace);\n sdr.flipY = needsFlip;\n sdr.needsUpdate = true;\n return { gainMap, sdr };\n }\n updateQuadRenderer(quadRenderer, sdrImage, gainMap, sdr, metadata) {\n quadRenderer.width = sdrImage.width;\n quadRenderer.height = sdrImage.height;\n quadRenderer.material.gainMap = gainMap;\n quadRenderer.material.sdr = sdr;\n quadRenderer.material.gainMapMin = metadata.gainMapMin;\n quadRenderer.material.gainMapMax = metadata.gainMapMax;\n quadRenderer.material.offsetHdr = metadata.offsetHdr;\n quadRenderer.material.offsetSdr = metadata.offsetSdr;\n quadRenderer.material.gamma = metadata.gamma;\n quadRenderer.material.hdrCapacityMin = metadata.hdrCapacityMin;\n quadRenderer.material.hdrCapacityMax = metadata.hdrCapacityMax;\n quadRenderer.material.maxDisplayBoost = Math.pow(2, metadata.hdrCapacityMax);\n quadRenderer.material.needsUpdate = true;\n }\n}\n\nexport { GainMapNotFoundError as G, LoaderBaseShared as L, MPFExtractor as M, XMPMetadataNotFoundError as X, extractXMP as a, createDecodeFunction as c, extractGainmapFromJPEG as e };\n","/**\n * @monogrid/gainmap-js v3.4.0\n * With ❤️, by MONOGRID <gainmap@monogrid.com>\n */\n\nimport { Q as QuadRenderer } from './QuadRenderer-Bj1xl_EK.js';\nimport { c as createDecodeFunction, L as LoaderBaseShared, e as extractGainmapFromJPEG, X as XMPMetadataNotFoundError, G as GainMapNotFoundError } from './Loader-DLI-_JDP.js';\nexport { M as MPFExtractor, a as extractXMP } from './Loader-DLI-_JDP.js';\nimport { ShaderMaterial, NoBlending, Vector3, WebGLRenderer, FileLoader } from 'three';\n\nconst vertexShader = /* glsl */ `\nvarying vec2 vUv;\n\nvoid main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}\n`;\nconst fragmentShader = /* glsl */ `\n// min half float value\n#define HALF_FLOAT_MIN vec3( -65504, -65504, -65504 )\n// max half float value\n#define HALF_FLOAT_MAX vec3( 65504, 65504, 65504 )\n\nuniform sampler2D sdr;\nuniform sampler2D gainMap;\nuniform vec3 gamma;\nuniform vec3 offsetHdr;\nuniform vec3 offsetSdr;\nuniform vec3 gainMapMin;\nuniform vec3 gainMapMax;\nuniform float weightFactor;\n\nvarying vec2 vUv;\n\nvoid main() {\n vec3 rgb = texture2D( sdr, vUv ).rgb;\n vec3 recovery = texture2D( gainMap, vUv ).rgb;\n vec3 logRecovery = pow( recovery, gamma );\n vec3 logBoost = gainMapMin * ( 1.0 - logRecovery ) + gainMapMax * logRecovery;\n vec3 hdrColor = (rgb + offsetSdr) * exp2( logBoost * weightFactor ) - offsetHdr;\n vec3 clampedHdrColor = max( HALF_FLOAT_MIN, min( HALF_FLOAT_MAX, hdrColor ));\n gl_FragColor = vec4( clampedHdrColor , 1.0 );\n}\n`;\n/**\n * A Material which is able to decode the Gainmap into a full HDR Representation\n *\n * @category Materials\n * @group Materials\n */\nclass GainMapDecoderMaterial extends ShaderMaterial {\n _maxDisplayBoost;\n _hdrCapacityMin;\n _hdrCapacityMax;\n /**\n *\n * @param params\n */\n constructor({ gamma, offsetHdr, offsetSdr, gainMapMin, gainMapMax, maxDisplayBoost, hdrCapacityMin, hdrCapacityMax, sdr, gainMap }) {\n super({\n name: 'GainMapDecoderMaterial',\n vertexShader,\n fragmentShader,\n uniforms: {\n sdr: { value: sdr },\n gainMap: { value: gainMap },\n gamma: { value: new Vector3(1.0 / gamma[0], 1.0 / gamma[1], 1.0 / gamma[2]) },\n offsetHdr: { value: new Vector3().fromArray(offsetHdr) },\n offsetSdr: { value: new Vector3().fromArray(offsetSdr) },\n gainMapMin: { value: new Vector3().fromArray(gainMapMin) },\n gainMapMax: { value: new Vector3().fromArray(gainMapMax) },\n weightFactor: {\n value: (Math.log2(maxDisplayBoost) - hdrCapacityMin) / (hdrCapacityMax - hdrCapacityMin)\n }\n },\n blending: NoBlending,\n depthTest: false,\n depthWrite: false\n });\n this._maxDisplayBoost = maxDisplayBoost;\n this._hdrCapacityMin = hdrCapacityMin;\n this._hdrCapacityMax = hdrCapacityMax;\n this.needsUpdate = true;\n this.uniformsNeedUpdate = true;\n }\n get sdr() { return this.uniforms.sdr.value; }\n set sdr(value) { this.uniforms.sdr.value = value; }\n get gainMap() { return this.uniforms.gainMap.value; }\n set gainMap(value) { this.uniforms.gainMap.value = value; }\n /**\n * @see {@link GainMapMetadata.offsetHdr}\n */\n get offsetHdr() { return this.uniforms.offsetHdr.value.toArray(); }\n set offsetHdr(value) { this.uniforms.offsetHdr.value.fromArray(value); }\n /**\n * @see {@link GainMapMetadata.offsetSdr}\n */\n get offsetSdr() { return this.uniforms.offsetSdr.value.toArray(); }\n set offsetSdr(value) { this.uniforms.offsetSdr.value.fromArray(value); }\n /**\n * @see {@link GainMapMetadata.gainMapMin}\n */\n get gainMapMin() { return this.uniforms.gainMapMin.value.toArray(); }\n set gainMapMin(value) { this.uniforms.gainMapMin.value.fromArray(value); }\n /**\n * @see {@link GainMapMetadata.gainMapMax}\n */\n get gainMapMax() { return this.uniforms.gainMapMax.value.toArray(); }\n set gainMapMax(value) { this.uniforms.gainMapMax.value.fromArray(value); }\n /**\n * @see {@link GainMapMetadata.gamma}\n */\n get gamma() {\n const g = this.uniforms.gamma.value;\n return [1 / g.x, 1 / g.y, 1 / g.z];\n }\n set gamma(value) {\n const g = this.uniforms.gamma.value;\n g.x = 1.0 / value[0];\n g.y = 1.0 / value[1];\n g.z = 1.0 / value[2];\n }\n /**\n * @see {@link GainMapMetadata.hdrCapacityMin}\n * @remarks Logarithmic space\n */\n get hdrCapacityMin() { return this._hdrCapacityMin; }\n set hdrCapacityMin(value) {\n this._hdrCapacityMin = value;\n this.calculateWeight();\n }\n /**\n * @see {@link GainMapMetadata.hdrCapacityMin}\n * @remarks Logarithmic space\n */\n get hdrCapacityMax() { return this._hdrCapacityMax; }\n set hdrCapacityMax(value) {\n this._hdrCapacityMax = value;\n this.calculateWeight();\n }\n /**\n * @see {@link GainmapDecodingParameters.maxDisplayBoost}\n * @remarks Non Logarithmic space\n */\n get maxDisplayBoost() { return this._maxDisplayBoost; }\n set maxDisplayBoost(value) {\n this._maxDisplayBoost = Math.max(1, Math.min(65504, value));\n this.calculateWeight();\n }\n calculateWeight() {\n const val = (Math.log2(this._maxDisplayBoost) - this._hdrCapacityMin) / (this._hdrCapacityMax - this._hdrCapacityMin);\n this.uniforms.weightFactor.value = Math.max(0, Math.min(1, val));\n }\n}\n\nconst decodeImpl = createDecodeFunction({\n renderer: WebGLRenderer,\n createMaterial: (params) => new GainMapDecoderMaterial(params),\n createQuadRenderer: (params) => new QuadRenderer(params)\n});\n/**\n * Decodes a gain map using a WebGL RenderTarget\n *\n * @category Decoding Functions\n * @group Decoding Functions\n * @example\n * import { decode } from '@monogrid/gainmap-js'\n * import {\n * Mesh,\n * MeshBasicMaterial,\n * PerspectiveCamera,\n * PlaneGeometry,\n * Scene,\n * TextureLoader,\n * WebGLRenderer\n * } from 'three'\n *\n * const renderer = new WebGLRenderer()\n *\n * const textureLoader = new TextureLoader()\n *\n * // load SDR Representation\n * const sdr = await textureLoader.loadAsync('sdr.jpg')\n * // load Gain map recovery image\n * const gainMap = await textureLoader.loadAsync('gainmap.jpg')\n * // load metadata\n * const metadata = await (await fetch('metadata.json')).json()\n *\n * const result = decode({\n * sdr,\n * gainMap,\n * // this allows to use `result.renderTarget.texture` directly\n * renderer,\n * // this will restore the full HDR range\n * maxDisplayBoost: Math.pow(2, metadata.hdrCapacityMax),\n * ...metadata\n * })\n *\n * const scene = new Scene()\n * // `result` can be used to populate a Texture\n * const mesh = new Mesh(\n * new PlaneGeometry(),\n * new MeshBasicMaterial({ map: result.renderTarget.texture })\n * )\n * scene.add(mesh)\n * renderer.render(scene, new PerspectiveCamera())\n *\n * // result must be manually disposed\n * // when you are done using it\n * result.dispose()\n *\n * @param params\n * @returns\n * @throws {Error} if the WebGLRenderer fails to render the gain map\n */\nconst decode = (params) => {\n // Ensure renderer is defined for the base function\n if (!params.renderer) {\n throw new Error('Renderer is required for decode function');\n }\n const quadRenderer = decodeImpl({\n ...params,\n renderer: params.renderer\n });\n try {\n quadRenderer.render();\n }\n catch (e) {\n quadRenderer.disposeOnDemandRenderer();\n throw e;\n }\n return quadRenderer;\n};\n\n/**\n * Base class for WebGL loaders\n * @template TUrl - The type of URL used to load resources\n */\nclass LoaderBaseWebGL extends LoaderBaseShared {\n constructor(renderer, manager) {\n super({\n renderer,\n createMaterial: (params) => new GainMapDecoderMaterial(params),\n createQuadRenderer: (params) => new QuadRenderer(params)\n }, manager);\n }\n /**\n * @private\n * @param quadRenderer\n * @param metadata\n * @param sdrBuffer\n * @param gainMapBuffer\n */\n async render(quadRenderer, metadata, sdrBuffer, gainMapBuffer) {\n const { sdrImage, gainMapImage, needsFlip } = await this.processImages(sdrBuffer, gainMapBuffer, 'flipY');\n const { gainMap, sdr } = this.createTextures(sdrImage, gainMapImage, needsFlip);\n this.updateQuadRenderer(quadRenderer, sdrImage, gainMap, sdr, metadata);\n quadRenderer.render();\n }\n}\n\n/**\n * A Three.js Loader for the gain map format.\n *\n * @category Loaders\n * @group Loaders\n *\n * @example\n * import { GainMapLoader } from '@monogrid/gainmap-js'\n * import {\n * EquirectangularReflectionMapping,\n * Mesh,\n * MeshBasicMaterial,\n * PerspectiveCamera,\n * PlaneGeometry,\n * Scene,\n * WebGLRenderer\n * } from 'three'\n *\n * const renderer = new WebGLRenderer()\n *\n * const loader = new GainMapLoader(renderer)\n * .setRenderTargetOptions({ mapping: EquirectangularReflectionMapping })\n *\n * const result = await loader.loadAsync(['sdr.jpeg', 'gainmap.jpeg', 'metadata.json'])\n * // `result` can be used to populate a Texture\n *\n * const scene = new Scene()\n * const mesh = new Mesh(\n * new PlaneGeometry(),\n * new MeshBasicMaterial({ map: result.renderTarget.texture })\n * )\n * scene.add(mesh)\n * renderer.render(scene, new PerspectiveCamera())\n *\n * // Starting from three.js r159\n * // `result.renderTarget.texture` can\n * // also be used as Equirectangular scene background\n * //\n * // it was previously needed to convert it\n * // to a DataTexture with `result.toDataTexture()`\n * scene.background = result.renderTarget.texture\n *\n * // result must be manually disposed\n * // when you are done using it\n * result.dispose()\n *\n */\nclass GainMapLoader extends LoaderBaseWebGL {\n /**\n * Loads a gainmap using separate data\n * * sdr image\n * * gain map image\n * * metadata json\n *\n * useful for webp gain maps\n *\n * @param urls An array in the form of [sdr.jpg, gainmap.jpg, metadata.json]\n * @param onLoad Load complete callback, will receive the result\n * @param onProgress Progress callback, will receive a `ProgressEvent`\n * @param onError Error callback\n * @returns\n */\n load([sdrUrl, gainMapUrl, metadataUrl], onLoad, onProgress, onError) {\n const quadRenderer = this.prepareQuadRenderer();\n let sdr;\n let gainMap;\n let metadata;\n const loadCheck = async () => {\n if (sdr && gainMap && metadata) {\n // solves #16\n try {\n await this.render(quadRenderer, metadata, sdr, gainMap);\n }\n catch (error) {\n this.manager.itemError(sdrUrl);\n this.manager.itemError(gainMapUrl);\n this.manager.itemError(metadataUrl);\n if (typeof onError === 'function')\n onError(error);\n quadRenderer.disposeOnDemandRenderer();\n return;\n }\n if (typeof onLoad === 'function')\n onLoad(quadRenderer);\n this.manager.itemEnd(sdrUrl);\n this.manager.itemEnd(gainMapUrl);\n this.manager.itemEnd(metadataUrl);\n quadRenderer.disposeOnDemandRenderer();\n }\n };\n let sdrLengthComputable = true;\n let sdrTotal = 0;\n let sdrLoaded = 0;\n let gainMapLengthComputable = true;\n let gainMapTotal = 0;\n let gainMapLoaded = 0;\n let metadataLengthComputable = true;\n let metadataTotal = 0;\n let metadataLoaded = 0;\n const progressHandler = () => {\n if (typeof onProgress === 'function') {\n const total = sdrTotal + gainMapTotal + metadataTotal;\n const loaded = sdrLoaded + gainMapLoaded + metadataLoaded;\n const lengthComputable = sdrLengthComputable && gainMapLengthComputable && metadataLengthComputable;\n onProgress(new ProgressEvent('progress', { lengthComputable, loaded, total }));\n }\n };\n this.manager.itemStart(sdrUrl);\n this.manager.itemStart(gainMapUrl);\n this.manager.itemStart(metadataUrl);\n const sdrLoader = new FileLoader(this._internalLoadingManager);\n sdrLoader.setResponseType('arraybuffer');\n sdrLoader.setRequestHeader(this.requestHeader);\n sdrLoader.setPath(this.path);\n sdrLoader.setWithCredentials(this.withCredentials);\n sdrLoader.load(sdrUrl, async (buffer) => {\n /* istanbul ignore if\n this condition exists only because of three.js types + strict mode\n */\n if (typeof buffer === 'string')\n throw new Error('Invalid sdr buffer');\n sdr = buffer;\n await loadCheck();\n }, (e) => {\n sdrLengthComputable = e.lengthComputable;\n sdrLoaded = e.loaded;\n sdrTotal = e.total;\n progressHandler();\n }, (error) => {\n this.manager.itemError(sdrUrl);\n if (typeof onError === 'function')\n onError(error);\n });\n const gainMapLoader = new FileLoader(this._internalLoadingManager);\n gainMapLoader.setResponseType('arraybuffer');\n gainMapLoader.setRequestHeader(this.requestHeader);\n gainMapLoader.setPath(this.path);\n gainMapLoader.setWithCredentials(this.withCredentials);\n gainMapLoader.load(gainMapUrl, async (buffer) => {\n /* istanbul ignore if\n this condition exists only because of three.js types + strict mode\n */\n if (typeof buffer === 'string')\n throw new Error('Invalid gainmap buffer');\n gainMap = buffer;\n await loadCheck();\n }, (e) => {\n gainMapLengthComputable = e.lengthComputable;\n gainMapLoaded = e.loaded;\n gainMapTotal = e.total;\n progressHandler();\n }, (error) => {\n this.manager.itemError(gainMapUrl);\n if (typeof onError === 'function')\n onError(error);\n });\n const metadataLoader = new FileLoader(this._internalLoadingManager);\n // metadataLoader.setResponseType('json')\n metadataLoader.setRequestHeader(this.requestHeader);\n metadataLoader.setPath(this.path);\n metadataLoader.setWithCredentials(this.withCredentials);\n metadataLoader.load(metadataUrl, async (json) => {\n /* istanbul ignore if\n this condition exists only because of three.js types + strict mode\n */\n if (typeof json !== 'string')\n throw new Error('Invalid metadata string');\n // TODO: implement check on JSON file and remove this eslint disable\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n metadata = JSON.parse(json);\n await loadCheck();\n }, (e) => {\n metadataLengthComputable = e.lengthComputable;\n metadataLoaded = e.loaded;\n metadataTotal = e.total;\n progressHandler();\n }, (error) => {\n this.manager.itemError(metadataUrl);\n if (typeof onError === 'function')\n onError(error);\n });\n return quadRenderer;\n }\n}\n\n/**\n * A Three.js Loader for a JPEG with embedded gainmap metadata.\n *\n * @category Loaders\n * @group Loaders\n *\n * @example\n * import { HDRJPGLoader } from '@monogrid/gainmap-js'\n * import {\n * EquirectangularReflectionMapping,\n * Mesh,\n * MeshBasicMaterial,\n * PerspectiveCamera,\n * PlaneGeometry,\n * Scene,\n * WebGLRenderer\n * } from 'three'\n *\n * const renderer = new WebGLRenderer()\n *\n * const loader = new HDRJPGLoader(renderer)\n * .setRenderTargetOptions({ mapping: EquirectangularReflectionMapping })\n *\n * const result = await loader.loadAsync('gainmap.jpeg')\n * // `result` can be used to populate a Texture\n *\n * const scene = new Scene()\n * const mesh = new Mesh(\n * new PlaneGeometry(),\n * new MeshBasicMaterial({ map: result.renderTarget.texture })\n * )\n * scene.add(mesh)\n * renderer.render(scene, new PerspectiveCamera())\n *\n * // Starting from three.js r159\n * // `result.renderTarget.texture` can\n * // also be used as Equirectangular scene background\n * //\n * // it was previously needed to convert it\n * // to a DataTexture with `result.toDataTexture()`\n * scene.background = result.renderTarget.texture\n *\n * // result must be manually disposed\n * // when you are done using it\n * result.dispose()\n *\n */\nclass HDRJPGLoader extends LoaderBaseWebGL {\n /**\n * Loads a JPEG containing gain map metadata\n * Renders a normal SDR image if gainmap data is not found\n *\n * @param url Path to a JPEG file containing embedded gain map metadata\n * @param onLoad Load complete callback, will receive the result\n * @param onProgress Progress callback, will receive a `ProgressEvent`\n * @param onError Error callback\n * @returns\n */\n load(url, onLoad, onProgress, onError) {\n const quadRenderer = this.prepareQuadRenderer();\n const loader = new FileLoader(this._internalLoadingManager);\n loader.setResponseType('arraybuffer');\n loader.setRequestHeader(this.requestHeader);\n loader.setPath(this.path);\n loader.setWithCredentials(this.withCredentials);\n this.manager.itemStart(url);\n loader.load(url, async (jpeg) => {\n /* istanbul ignore if\n this condition exists only because of three.js types + strict mode\n */\n if (typeof jpeg === 'string')\n throw new Error('Invalid buffer, received [string], was expecting [ArrayBuffer]');\n const jpegBuffer = new Uint8Array(jpeg);\n let sdrJPEG;\n let gainMapJPEG;\n let metadata;\n try {\n const extractionResult = await extractGainmapFromJPEG(jpegBuffer);\n // gain map is successfully reconstructed\n sdrJPEG = extractionResult.sdr;\n gainMapJPEG = extractionResult.gainMap;\n metadata = extractionResult.metadata;\n }\n catch (e) {\n // render the SDR version if this is not a gainmap\n if (e instanceof XMPMetadataNotFoundError || e instanceof GainMapNotFoundError) {\n console.warn(`Failure to reconstruct an HDR image from ${url}: Gain map metadata not found in the file, HDRJPGLoader will render the SDR jpeg`);\n metadata = {\n gainMapMin: [0, 0, 0],\n gainMapMax: [1, 1, 1],\n gamma: [1, 1, 1],\n hdrCapacityMin: 0,\n hdrCapacityMax: 1,\n offsetHdr: [0, 0, 0],\n offsetSdr: [0, 0, 0]\n };\n sdrJPEG = jpegBuffer;\n }\n else {\n throw e;\n }\n }\n // solves #16\n try {\n await this.render(quadRenderer, metadata, sdrJPEG.buffer, gainMapJPEG?.buffer);\n }\n catch (error) {\n this.manager.itemError(url);\n if (typeof onError === 'function')\n onError(error);\n quadRenderer.disposeOnDemandRenderer();\n return;\n }\n if (typeof onLoad === 'function')\n onLoad(quadRenderer);\n this.manager.itemEnd(url);\n quadRenderer.disposeOnDemandRenderer();\n }, onProgress, (error) => {\n this.manager.itemError(url);\n if (typeof onError === 'function')\n onError(error);\n });\n return quadRenderer;\n }\n}\n\nexport { GainMapDecoderMaterial, GainMapLoader, GainMapNotFoundError, HDRJPGLoader, HDRJPGLoader as JPEGRLoader, LoaderBaseShared, QuadRenderer, XMPMetadataNotFoundError, createDecodeFunction, decode, extractGainmapFromJPEG };\n","const presetsObj = {\n apartment: 'lebombo_1k.hdr',\n city: 'potsdamer_platz_1k.hdr',\n dawn: 'kiara_1_dawn_1k.hdr',\n forest: 'forest_slope_1k.hdr',\n lobby: 'st_fagans_interior_1k.hdr',\n night: 'dikhololo_night_1k.hdr',\n park: 'rooitou_park_1k.hdr',\n studio: 'studio_small_03_1k.hdr',\n sunset: 'venice_sunset_1k.hdr',\n warehouse: 'empty_warehouse_01_1k.hdr'\n};\n\nexport { presetsObj };\n","import { useThree, useLoader } from '@react-three/fiber';\nimport { CubeReflectionMapping, EquirectangularReflectionMapping, CubeTextureLoader } from 'three';\nimport { RGBELoader, EXRLoader } from 'three-stdlib';\nimport { HDRJPGLoader, GainMapLoader } from '@monogrid/gainmap-js';\nimport { presetsObj } from '../helpers/environment-assets.js';\nimport { useLayoutEffect } from 'react';\n\nconst CUBEMAP_ROOT = 'https://raw.githack.com/pmndrs/drei-assets/456060a26bbeb8fdf79326f224b6d99b8bcce736/hdri/';\nconst isArray = arr => Array.isArray(arr);\nconst defaultFiles = ['/px.png', '/nx.png', '/py.png', '/ny.png', '/pz.png', '/nz.png'];\nfunction useEnvironment({\n files = defaultFiles,\n path = '',\n preset = undefined,\n colorSpace = undefined,\n extensions\n} = {}) {\n if (preset) {\n validatePreset(preset);\n files = presetsObj[preset];\n path = CUBEMAP_ROOT;\n }\n\n // Everything else\n const multiFile = isArray(files);\n const {\n extension,\n isCubemap\n } = getExtension(files);\n const loader = getLoader(extension);\n if (!loader) throw new Error('useEnvironment: Unrecognized file extension: ' + files);\n const gl = useThree(state => state.gl);\n useLayoutEffect(() => {\n // Only required for gainmap\n if (extension !== 'webp' && extension !== 'jpg' && extension !== 'jpeg') return;\n function clearGainmapTexture() {\n useLoader.clear(loader, multiFile ? [files] : files);\n }\n gl.domElement.addEventListener('webglcontextlost', clearGainmapTexture, {\n once: true\n });\n }, [files, gl.domElement]);\n const loaderResult = useLoader(loader, multiFile ? [files] : files, loader => {\n // Gainmap requires a renderer\n if (extension === 'webp' || extension === 'jpg' || extension === 'jpeg') {\n // @ts-expect-error\n loader.setRenderer(gl);\n }\n loader.setPath == null || loader.setPath(path);\n // @ts-expect-error\n if (extensions) extensions(loader);\n });\n let texture = multiFile ?\n // @ts-ignore\n loaderResult[0] : loaderResult;\n if (extension === 'jpg' || extension === 'jpeg' || extension === 'webp') {\n var _renderTarget;\n texture = (_renderTarget = texture.renderTarget) == null ? void 0 : _renderTarget.texture;\n }\n texture.mapping = isCubemap ? CubeReflectionMapping : EquirectangularReflectionMapping;\n texture.colorSpace = colorSpace !== null && colorSpace !== void 0 ? colorSpace : isCubemap ? 'srgb' : 'srgb-linear';\n return texture;\n}\nconst preloadDefaultOptions = {\n files: defaultFiles,\n path: '',\n preset: undefined,\n extensions: undefined\n};\nuseEnvironment.preload = preloadOptions => {\n const options = {\n ...preloadDefaultOptions,\n ...preloadOptions\n };\n let {\n files,\n path = ''\n } = options;\n const {\n preset,\n extensions\n } = options;\n if (preset) {\n validatePreset(preset);\n files = presetsObj[preset];\n path = CUBEMAP_ROOT;\n }\n const {\n extension\n } = getExtension(files);\n if (extension === 'webp' || extension === 'jpg' || extension === 'jpeg') {\n throw new Error('useEnvironment: Preloading gainmaps is not supported');\n }\n const loader = getLoader(extension);\n if (!loader) throw new Error('useEnvironment: Unrecognized file extension: ' + files);\n useLoader.preload(loader, isArray(files) ? [files] : files, loader => {\n loader.setPath == null || loader.setPath(path);\n // @ts-expect-error\n if (extensions) extensions(loader);\n });\n};\nconst clearDefaultOptins = {\n files: defaultFiles,\n preset: undefined\n};\nuseEnvironment.clear = clearOptions => {\n const options = {\n ...clearDefaultOptins,\n ...clearOptions\n };\n let {\n files\n } = options;\n const {\n preset\n } = options;\n if (preset) {\n validatePreset(preset);\n files = presetsObj[preset];\n }\n const {\n extension\n } = getExtension(files);\n const loader = getLoader(extension);\n if (!loader) throw new Error('useEnvironment: Unrecognized file extension: ' + files);\n useLoader.clear(loader, isArray(files) ? [files] : files);\n};\nfunction validatePreset(preset) {\n if (!(preset in presetsObj)) throw new Error('Preset must be one of: ' + Object.keys(presetsObj).join(', '));\n}\nfunction getExtension(files) {\n var _firstEntry$split$pop;\n const isCubemap = isArray(files) && files.length === 6;\n const isGainmap = isArray(files) && files.length === 3 && files.some(file => file.endsWith('json'));\n const firstEntry = isArray(files) ? files[0] : files;\n\n // Everything else\n const extension = isCubemap ? 'cube' : isGainmap ? 'webp' : firstEntry.startsWith('data:application/exr') ? 'exr' : firstEntry.startsWith('data:application/hdr') ? 'hdr' : firstEntry.startsWith('data:image/jpeg') ? 'jpg' : (_firstEntry$split$pop = firstEntry.split('.').pop()) == null || (_firstEntry$split$pop = _firstEntry$split$pop.split('?')) == null || (_firstEntry$split$pop = _firstEntry$split$pop.shift()) == null ? void 0 : _firstEntry$split$pop.toLowerCase();\n return {\n extension,\n isCubemap,\n isGainmap\n };\n}\nfunction getLoader(extension) {\n const loader = extension === 'cube' ? CubeTextureLoader : extension === 'hdr' ? RGBELoader : extension === 'exr' ? EXRLoader : extension === 'jpg' || extension === 'jpeg' ? HDRJPGLoader : extension === 'webp' ? GainMapLoader : null;\n return loader;\n}\n\nexport { useEnvironment };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useThree, useFrame, createPortal, applyProps, extend } from '@react-three/fiber';\nimport { Scene, WebGLCubeRenderTarget, HalfFloatType } from 'three';\nimport { GroundProjectedEnv } from 'three-stdlib';\nimport { useEnvironment } from './useEnvironment.js';\n\nconst isRef = obj => obj.current && obj.current.isScene;\nconst resolveScene = scene => isRef(scene) ? scene.current : scene;\nfunction setEnvProps(background, scene, defaultScene, texture, sceneProps = {}) {\n var _target$backgroundRot, _target$backgroundRot2, _target$environmentRo, _target$environmentRo2;\n // defaults\n sceneProps = {\n backgroundBlurriness: 0,\n backgroundIntensity: 1,\n backgroundRotation: [0, 0, 0],\n environmentIntensity: 1,\n environmentRotation: [0, 0, 0],\n ...sceneProps\n };\n const target = resolveScene(scene || defaultScene);\n const oldbg = target.background;\n const oldenv = target.environment;\n const oldSceneProps = {\n // @ts-ignore\n backgroundBlurriness: target.backgroundBlurriness,\n // @ts-ignore\n backgroundIntensity: target.backgroundIntensity,\n // @ts-ignore\n backgroundRotation: (_target$backgroundRot = (_target$backgroundRot2 = target.backgroundRotation) == null || _target$backgroundRot2.clone == null ? void 0 : _target$backgroundRot2.clone()) !== null && _target$backgroundRot !== void 0 ? _target$backgroundRot : [0, 0, 0],\n // @ts-ignore\n environmentIntensity: target.environmentIntensity,\n // @ts-ignore\n environmentRotation: (_target$environmentRo = (_target$environmentRo2 = target.environmentRotation) == null || _target$environmentRo2.clone == null ? void 0 : _target$environmentRo2.clone()) !== null && _target$environmentRo !== void 0 ? _target$environmentRo : [0, 0, 0]\n };\n if (background !== 'only') target.environment = texture;\n if (background) target.background = texture;\n applyProps(target, sceneProps);\n return () => {\n if (background !== 'only') target.environment = oldenv;\n if (background) target.background = oldbg;\n applyProps(target, oldSceneProps);\n };\n}\nfunction EnvironmentMap({\n scene,\n background = false,\n map,\n ...config\n}) {\n const defaultScene = useThree(state => state.scene);\n React.useLayoutEffect(() => {\n if (map) return setEnvProps(background, scene, defaultScene, map, config);\n });\n return null;\n}\nfunction EnvironmentCube({\n background = false,\n scene,\n blur,\n backgroundBlurriness,\n backgroundIntensity,\n backgroundRotation,\n environmentIntensity,\n environmentRotation,\n ...rest\n}) {\n const texture = useEnvironment(rest);\n const defaultScene = useThree(state => state.scene);\n React.useLayoutEffect(() => {\n return setEnvProps(background, scene, defaultScene, texture, {\n backgroundBlurriness: blur !== null && blur !== void 0 ? blur : backgroundBlurriness,\n backgroundIntensity,\n backgroundRotation,\n environmentIntensity,\n environmentRotation\n });\n });\n React.useEffect(() => {\n return () => {\n texture.dispose();\n };\n }, [texture]);\n return null;\n}\nfunction EnvironmentPortal({\n children,\n near = 0.1,\n far = 1000,\n resolution = 256,\n frames = 1,\n map,\n background = false,\n blur,\n backgroundBlurriness,\n backgroundIntensity,\n backgroundRotation,\n environmentIntensity,\n environmentRotation,\n scene,\n files,\n path,\n preset = undefined,\n extensions\n}) {\n const gl = useThree(state => state.gl);\n const defaultScene = useThree(state => state.scene);\n const camera = React.useRef(null);\n const [virtualScene] = React.useState(() => new Scene());\n const fbo = React.useMemo(() => {\n const fbo = new WebGLCubeRenderTarget(resolution);\n fbo.texture.type = HalfFloatType;\n return fbo;\n }, [resolution]);\n React.useEffect(() => {\n return () => {\n fbo.dispose();\n };\n }, [fbo]);\n React.useLayoutEffect(() => {\n if (frames === 1) {\n const autoClear = gl.autoClear;\n gl.autoClear = true;\n camera.current.update(gl, virtualScene);\n gl.autoClear = autoClear;\n }\n return setEnvProps(background, scene, defaultScene, fbo.texture, {\n backgroundBlurriness: blur !== null && blur !== void 0 ? blur : backgroundBlurriness,\n backgroundIntensity,\n backgroundRotation,\n environmentIntensity,\n environmentRotation\n });\n }, [children, virtualScene, fbo.texture, scene, defaultScene, background, frames, gl]);\n let count = 1;\n useFrame(() => {\n if (frames === Infinity || count < frames) {\n const autoClear = gl.autoClear;\n gl.autoClear = true;\n camera.current.update(gl, virtualScene);\n gl.autoClear = autoClear;\n count++;\n }\n });\n return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal(/*#__PURE__*/React.createElement(React.Fragment, null, children, /*#__PURE__*/React.createElement(\"cubeCamera\", {\n ref: camera,\n args: [near, far, fbo]\n }), files || preset ? /*#__PURE__*/React.createElement(EnvironmentCube, {\n background: true,\n files: files,\n preset: preset,\n path: path,\n extensions: extensions\n }) : map ? /*#__PURE__*/React.createElement(EnvironmentMap, {\n background: true,\n map: map,\n extensions: extensions\n }) : null), virtualScene));\n}\nfunction EnvironmentGround(props) {\n var _props$ground, _props$ground2, _scale, _props$ground3;\n const textureDefault = useEnvironment(props);\n const texture = props.map || textureDefault;\n React.useMemo(() => extend({\n GroundProjectedEnvImpl: GroundProjectedEnv\n }), []);\n React.useEffect(() => {\n return () => {\n textureDefault.dispose();\n };\n }, [textureDefault]);\n const args = React.useMemo(() => [texture], [texture]);\n const height = (_props$ground = props.ground) == null ? void 0 : _props$ground.height;\n const radius = (_props$ground2 = props.ground) == null ? void 0 : _props$ground2.radius;\n const scale = (_scale = (_props$ground3 = props.ground) == null ? void 0 : _props$ground3.scale) !== null && _scale !== void 0 ? _scale : 1000;\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(EnvironmentMap, _extends({}, props, {\n map: texture\n })), /*#__PURE__*/React.createElement(\"groundProjectedEnvImpl\", {\n args: args,\n scale: scale,\n height: height,\n radius: radius\n }));\n}\nfunction Environment(props) {\n return props.ground ? /*#__PURE__*/React.createElement(EnvironmentGround, props) : props.map ? /*#__PURE__*/React.createElement(EnvironmentMap, props) : props.children ? /*#__PURE__*/React.createElement(EnvironmentPortal, props) : /*#__PURE__*/React.createElement(EnvironmentCube, props);\n}\n\nexport { Environment, EnvironmentCube, EnvironmentMap, EnvironmentPortal };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { HorizontalBlurShader, VerticalBlurShader } from 'three-stdlib';\n\nconst ContactShadows = /* @__PURE__ */React.forwardRef(({\n scale = 10,\n frames = Infinity,\n opacity = 1,\n width = 1,\n height = 1,\n blur = 1,\n near = 0,\n far = 10,\n resolution = 512,\n smooth = true,\n color = '#000000',\n depthWrite = false,\n renderOrder,\n ...props\n}, fref) => {\n const ref = React.useRef(null);\n const scene = useThree(state => state.scene);\n const gl = useThree(state => state.gl);\n const shadowCamera = React.useRef(null);\n width = width * (Array.isArray(scale) ? scale[0] : scale || 1);\n height = height * (Array.isArray(scale) ? scale[1] : scale || 1);\n const [renderTarget, planeGeometry, depthMaterial, blurPlane, horizontalBlurMaterial, verticalBlurMaterial, renderTargetBlur] = React.useMemo(() => {\n const renderTarget = new THREE.WebGLRenderTarget(resolution, resolution);\n const renderTargetBlur = new THREE.WebGLRenderTarget(resolution, resolution);\n renderTargetBlur.texture.generateMipmaps = renderTarget.texture.generateMipmaps = false;\n const planeGeometry = new THREE.PlaneGeometry(width, height).rotateX(Math.PI / 2);\n const blurPlane = new THREE.Mesh(planeGeometry);\n const depthMaterial = new THREE.MeshDepthMaterial();\n depthMaterial.depthTest = depthMaterial.depthWrite = false;\n depthMaterial.onBeforeCompile = shader => {\n shader.uniforms = {\n ...shader.uniforms,\n ucolor: {\n value: new THREE.Color(color)\n }\n };\n shader.fragmentShader = shader.fragmentShader.replace(`void main() {`,\n //\n `uniform vec3 ucolor;\n void main() {\n `);\n shader.fragmentShader = shader.fragmentShader.replace('vec4( vec3( 1.0 - fragCoordZ ), opacity );',\n // Colorize the shadow, multiply by the falloff so that the center can remain darker\n 'vec4( ucolor * fragCoordZ * 2.0, ( 1.0 - fragCoordZ ) * 1.0 );');\n };\n const horizontalBlurMaterial = new THREE.ShaderMaterial(HorizontalBlurShader);\n const verticalBlurMaterial = new THREE.ShaderMaterial(VerticalBlurShader);\n verticalBlurMaterial.depthTest = horizontalBlurMaterial.depthTest = false;\n return [renderTarget, planeGeometry, depthMaterial, blurPlane, horizontalBlurMaterial, verticalBlurMaterial, renderTargetBlur];\n }, [resolution, width, height, scale, color]);\n const blurShadows = blur => {\n blurPlane.visible = true;\n blurPlane.material = horizontalBlurMaterial;\n horizontalBlurMaterial.uniforms.tDiffuse.value = renderTarget.texture;\n horizontalBlurMaterial.uniforms.h.value = blur * 1 / 256;\n gl.setRenderTarget(renderTargetBlur);\n gl.render(blurPlane, shadowCamera.current);\n blurPlane.material = verticalBlurMaterial;\n verticalBlurMaterial.uniforms.tDiffuse.value = renderTargetBlur.texture;\n verticalBlurMaterial.uniforms.v.value = blur * 1 / 256;\n gl.setRenderTarget(renderTarget);\n gl.render(blurPlane, shadowCamera.current);\n blurPlane.visible = false;\n };\n let count = 0;\n let initialBackground;\n let initialOverrideMaterial;\n useFrame(() => {\n if (shadowCamera.current && (frames === Infinity || count < frames)) {\n count++;\n initialBackground = scene.background;\n initialOverrideMaterial = scene.overrideMaterial;\n ref.current.visible = false;\n scene.background = null;\n scene.overrideMaterial = depthMaterial;\n gl.setRenderTarget(renderTarget);\n gl.render(scene, shadowCamera.current);\n blurShadows(blur);\n if (smooth) blurShadows(blur * 0.4);\n gl.setRenderTarget(null);\n ref.current.visible = true;\n scene.overrideMaterial = initialOverrideMaterial;\n scene.background = initialBackground;\n }\n });\n React.useImperativeHandle(fref, () => ref.current, []);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n \"rotation-x\": Math.PI / 2\n }, props, {\n ref: ref\n }), /*#__PURE__*/React.createElement(\"mesh\", {\n renderOrder: renderOrder,\n geometry: planeGeometry,\n scale: [1, -1, 1],\n rotation: [-Math.PI / 2, 0, 0]\n }, /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n transparent: true,\n map: renderTarget.texture,\n opacity: opacity,\n depthWrite: depthWrite\n })), /*#__PURE__*/React.createElement(\"orthographicCamera\", {\n ref: shadowCamera,\n args: [-width / 2, width / 2, height / 2, -height / 2, near, far]\n }));\n});\n\nexport { ContactShadows };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { extend, useThree, useFrame } from '@react-three/fiber';\nimport { shaderMaterial } from './shaderMaterial.js';\nimport { DiscardMaterial } from '../materials/DiscardMaterial.js';\nimport { version } from '../helpers/constants.js';\n\nfunction isLight(object) {\n return object.isLight;\n}\nfunction isGeometry(object) {\n return !!object.geometry;\n}\nconst accumulativeContext = /* @__PURE__ */React.createContext(null);\nconst SoftShadowMaterial = /* @__PURE__ */shaderMaterial({\n color: /* @__PURE__ */new THREE.Color(),\n blend: 2.0,\n alphaTest: 0.75,\n opacity: 0,\n map: null\n}, `varying vec2 vUv;\n void main() {\n gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);\n vUv = uv;\n }`, `varying vec2 vUv;\n uniform sampler2D map;\n uniform vec3 color;\n uniform float opacity;\n uniform float alphaTest;\n uniform float blend;\n void main() {\n vec4 sampledDiffuseColor = texture2D(map, vUv);\n gl_FragColor = vec4(color * sampledDiffuseColor.r * blend, max(0.0, (1.0 - (sampledDiffuseColor.r + sampledDiffuseColor.g + sampledDiffuseColor.b) / alphaTest)) * opacity);\n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }`);\nconst AccumulativeShadows = /* @__PURE__ */React.forwardRef(({\n children,\n temporal,\n frames = 40,\n limit = Infinity,\n blend = 20,\n scale = 10,\n opacity = 1,\n alphaTest = 0.75,\n color = 'black',\n colorBlend = 2,\n resolution = 1024,\n toneMapped = true,\n ...props\n}, forwardRef) => {\n extend({\n SoftShadowMaterial\n });\n const gl = useThree(state => state.gl);\n const scene = useThree(state => state.scene);\n const camera = useThree(state => state.camera);\n const invalidate = useThree(state => state.invalidate);\n const gPlane = React.useRef(null);\n const gLights = React.useRef(null);\n const [plm] = React.useState(() => new ProgressiveLightMap(gl, scene, resolution));\n React.useLayoutEffect(() => {\n plm.configure(gPlane.current);\n }, []);\n const api = React.useMemo(() => ({\n lights: new Map(),\n temporal: !!temporal,\n frames: Math.max(2, frames),\n blend: Math.max(2, frames === Infinity ? blend : frames),\n count: 0,\n getMesh: () => gPlane.current,\n reset: () => {\n // Clear buffers, reset opacities, set frame count to 0\n plm.clear();\n const material = gPlane.current.material;\n material.opacity = 0;\n material.alphaTest = 0;\n api.count = 0;\n },\n update: (frames = 1) => {\n // Adapt the opacity-blend ratio to the number of frames\n const material = gPlane.current.material;\n if (!api.temporal) {\n material.opacity = opacity;\n material.alphaTest = alphaTest;\n } else {\n material.opacity = Math.min(opacity, material.opacity + opacity / api.blend);\n material.alphaTest = Math.min(alphaTest, material.alphaTest + alphaTest / api.blend);\n }\n\n // Switch accumulative lights on\n gLights.current.visible = true;\n // Collect scene lights and meshes\n plm.prepare();\n\n // Update the lightmap and the accumulative lights\n for (let i = 0; i < frames; i++) {\n api.lights.forEach(light => light.update());\n plm.update(camera, api.blend);\n }\n // Switch lights off\n gLights.current.visible = false;\n // Restore lights and meshes\n plm.finish();\n }\n }), [plm, camera, scene, temporal, frames, blend, opacity, alphaTest]);\n React.useLayoutEffect(() => {\n // Reset internals, buffers, ...\n api.reset();\n // Update lightmap\n if (!api.temporal && api.frames !== Infinity) api.update(api.blend);\n });\n\n // Expose api, allow children to set itself as the main light source\n React.useImperativeHandle(forwardRef, () => api, [api]);\n useFrame(() => {\n if ((api.temporal || api.frames === Infinity) && api.count < api.frames && api.count < limit) {\n invalidate();\n api.update();\n api.count++;\n }\n });\n return /*#__PURE__*/React.createElement(\"group\", props, /*#__PURE__*/React.createElement(\"group\", {\n traverse: () => null,\n ref: gLights\n }, /*#__PURE__*/React.createElement(accumulativeContext.Provider, {\n value: api\n }, children)), /*#__PURE__*/React.createElement(\"mesh\", {\n receiveShadow: true,\n ref: gPlane,\n scale: scale,\n rotation: [-Math.PI / 2, 0, 0]\n }, /*#__PURE__*/React.createElement(\"planeGeometry\", null), /*#__PURE__*/React.createElement(\"softShadowMaterial\", {\n transparent: true,\n depthWrite: false,\n toneMapped: toneMapped,\n color: color,\n blend: colorBlend,\n map: plm.progressiveLightMap2.texture\n })));\n});\nconst RandomizedLight = /* @__PURE__ */React.forwardRef(({\n castShadow = true,\n bias = 0.001,\n mapSize = 512,\n size = 5,\n near = 0.5,\n far = 500,\n frames = 1,\n position = [0, 0, 0],\n radius = 1,\n amount = 8,\n intensity = version >= 155 ? Math.PI : 1,\n ambient = 0.5,\n ...props\n}, forwardRef) => {\n const gLights = React.useRef(null);\n const length = new THREE.Vector3(...position).length();\n const parent = React.useContext(accumulativeContext);\n const update = React.useCallback(() => {\n let light;\n if (gLights.current) {\n for (let l = 0; l < gLights.current.children.length; l++) {\n light = gLights.current.children[l];\n if (Math.random() > ambient) {\n light.position.set(position[0] + THREE.MathUtils.randFloatSpread(radius), position[1] + THREE.MathUtils.randFloatSpread(radius), position[2] + THREE.MathUtils.randFloatSpread(radius));\n } else {\n let lambda = Math.acos(2 * Math.random() - 1) - Math.PI / 2.0;\n let phi = 2 * Math.PI * Math.random();\n light.position.set(Math.cos(lambda) * Math.cos(phi) * length, Math.abs(Math.cos(lambda) * Math.sin(phi) * length), Math.sin(lambda) * length);\n }\n }\n }\n }, [radius, ambient, length, ...position]);\n const api = React.useMemo(() => ({\n update\n }), [update]);\n React.useImperativeHandle(forwardRef, () => api, [api]);\n React.useLayoutEffect(() => {\n var _parent$lights;\n const group = gLights.current;\n if (parent) (_parent$lights = parent.lights) == null || _parent$lights.set(group.uuid, api);\n return () => {\n var _parent$lights2;\n return void (parent == null || (_parent$lights2 = parent.lights) == null ? void 0 : _parent$lights2.delete(group.uuid));\n };\n }, [parent, api]);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: gLights\n }, props), Array.from({\n length: amount\n }, (_, index) => /*#__PURE__*/React.createElement(\"directionalLight\", {\n key: index,\n castShadow: castShadow,\n \"shadow-bias\": bias,\n \"shadow-mapSize\": [mapSize, mapSize],\n intensity: intensity / amount\n }, /*#__PURE__*/React.createElement(\"orthographicCamera\", {\n attach: \"shadow-camera\",\n args: [-size, size, size, -size, near, far]\n }))));\n});\n\n// Based on \"Progressive Light Map Accumulator\", by [zalo](https://github.com/zalo/)\nclass ProgressiveLightMap {\n constructor(renderer, scene, res = 1024) {\n this.renderer = renderer;\n this.res = res;\n this.scene = scene;\n this.buffer1Active = false;\n this.lights = [];\n this.meshes = [];\n this.object = null;\n this.clearColor = new THREE.Color();\n this.clearAlpha = 0;\n\n // Create the Progressive LightMap Texture\n const textureParams = {\n type: THREE.HalfFloatType,\n magFilter: THREE.NearestFilter,\n minFilter: THREE.NearestFilter\n };\n this.progressiveLightMap1 = new THREE.WebGLRenderTarget(this.res, this.res, textureParams);\n this.progressiveLightMap2 = new THREE.WebGLRenderTarget(this.res, this.res, textureParams);\n\n // Inject some spicy new logic into a standard phong material\n this.discardMat = new DiscardMaterial();\n this.targetMat = new THREE.MeshLambertMaterial({\n fog: false\n });\n this.previousShadowMap = {\n value: this.progressiveLightMap1.texture\n };\n this.averagingWindow = {\n value: 100\n };\n this.targetMat.onBeforeCompile = shader => {\n // Vertex Shader: Set Vertex Positions to the Unwrapped UV Positions\n shader.vertexShader = 'varying vec2 vUv;\\n' + shader.vertexShader.slice(0, -1) + 'vUv = uv; gl_Position = vec4((uv - 0.5) * 2.0, 1.0, 1.0); }';\n\n // Fragment Shader: Set Pixels to average in the Previous frame's Shadows\n const bodyStart = shader.fragmentShader.indexOf('void main() {');\n shader.fragmentShader = 'varying vec2 vUv;\\n' + shader.fragmentShader.slice(0, bodyStart) + 'uniform sampler2D previousShadowMap;\\n\tuniform float averagingWindow;\\n' + shader.fragmentShader.slice(bodyStart - 1, -1) + `\\nvec3 texelOld = texture2D(previousShadowMap, vUv).rgb;\n gl_FragColor.rgb = mix(texelOld, gl_FragColor.rgb, 1.0/ averagingWindow);\n }`;\n\n // Set the Previous Frame's Texture Buffer and Averaging Window\n shader.uniforms.previousShadowMap = this.previousShadowMap;\n shader.uniforms.averagingWindow = this.averagingWindow;\n };\n }\n clear() {\n this.renderer.getClearColor(this.clearColor);\n this.clearAlpha = this.renderer.getClearAlpha();\n this.renderer.setClearColor('black', 1);\n this.renderer.setRenderTarget(this.progressiveLightMap1);\n this.renderer.clear();\n this.renderer.setRenderTarget(this.progressiveLightMap2);\n this.renderer.clear();\n this.renderer.setRenderTarget(null);\n this.renderer.setClearColor(this.clearColor, this.clearAlpha);\n this.lights = [];\n this.meshes = [];\n this.scene.traverse(object => {\n if (isGeometry(object)) {\n this.meshes.push({\n object,\n material: object.material\n });\n } else if (isLight(object)) {\n this.lights.push({\n object,\n intensity: object.intensity\n });\n }\n });\n }\n prepare() {\n this.lights.forEach(light => light.object.intensity = 0);\n this.meshes.forEach(mesh => mesh.object.material = this.discardMat);\n }\n finish() {\n this.lights.forEach(light => light.object.intensity = light.intensity);\n this.meshes.forEach(mesh => mesh.object.material = mesh.material);\n }\n configure(object) {\n this.object = object;\n }\n update(camera, blendWindow = 100) {\n if (!this.object) return;\n // Set each object's material to the UV Unwrapped Surface Mapping Version\n this.averagingWindow.value = blendWindow;\n this.object.material = this.targetMat;\n // Ping-pong two surface buffers for reading/writing\n const activeMap = this.buffer1Active ? this.progressiveLightMap1 : this.progressiveLightMap2;\n const inactiveMap = this.buffer1Active ? this.progressiveLightMap2 : this.progressiveLightMap1;\n // Render the object's surface maps\n const oldBg = this.scene.background;\n this.scene.background = null;\n this.renderer.setRenderTarget(activeMap);\n this.previousShadowMap.value = inactiveMap.texture;\n this.buffer1Active = !this.buffer1Active;\n this.renderer.render(this.scene, camera);\n this.renderer.setRenderTarget(null);\n this.scene.background = oldBg;\n }\n}\n\nexport { AccumulativeShadows, RandomizedLight, accumulativeContext };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { Environment } from './Environment.js';\nimport { ContactShadows } from './ContactShadows.js';\nimport { Center } from './Center.js';\nimport { AccumulativeShadows, RandomizedLight } from './AccumulativeShadows.js';\nimport { Bounds, useBounds } from './Bounds.js';\n\nconst presets = {\n rembrandt: {\n main: [1, 2, 1],\n fill: [-2, -0.5, -2]\n },\n portrait: {\n main: [-1, 2, 0.5],\n fill: [-1, 0.5, -1.5]\n },\n upfront: {\n main: [0, 2, 1],\n fill: [-1, 0.5, -1.5]\n },\n soft: {\n main: [-2, 4, 4],\n fill: [-1, 0.5, -1.5]\n }\n};\nfunction Refit({\n radius,\n adjustCamera\n}) {\n const api = useBounds();\n React.useEffect(() => {\n if (adjustCamera) api.refresh().clip().fit();\n }, [radius, adjustCamera]);\n return null;\n}\nfunction Stage({\n children,\n center,\n adjustCamera = true,\n intensity = 0.5,\n shadows = 'contact',\n environment = 'city',\n preset = 'rembrandt',\n ...props\n}) {\n var _bias, _normalBias, _size, _offset, _amount, _radius, _ambient, _intensity;\n const config = typeof preset === 'string' ? presets[preset] : preset;\n const [{\n radius,\n height\n }, set] = React.useState({\n radius: 0,\n width: 0,\n height: 0,\n depth: 0\n });\n const shadowBias = (_bias = shadows == null ? void 0 : shadows.bias) !== null && _bias !== void 0 ? _bias : -0.0001;\n const normalBias = (_normalBias = shadows == null ? void 0 : shadows.normalBias) !== null && _normalBias !== void 0 ? _normalBias : 0;\n const shadowSize = (_size = shadows == null ? void 0 : shadows.size) !== null && _size !== void 0 ? _size : 1024;\n const shadowOffset = (_offset = shadows == null ? void 0 : shadows.offset) !== null && _offset !== void 0 ? _offset : 0;\n const contactShadow = shadows === 'contact' || (shadows == null ? void 0 : shadows.type) === 'contact';\n const accumulativeShadow = shadows === 'accumulative' || (shadows == null ? void 0 : shadows.type) === 'accumulative';\n const shadowSpread = {\n ...(typeof shadows === 'object' ? shadows : {})\n };\n const environmentProps = !environment ? null : typeof environment === 'string' ? {\n preset: environment\n } : environment;\n const onCentered = React.useCallback(props => {\n const {\n width,\n height,\n depth,\n boundingSphere\n } = props;\n set({\n radius: boundingSphere.radius,\n width,\n height,\n depth\n });\n if (center != null && center.onCentered) center.onCentered(props);\n }, []);\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"ambientLight\", {\n intensity: intensity / 3\n }), /*#__PURE__*/React.createElement(\"spotLight\", {\n penumbra: 1,\n position: [config.main[0] * radius, config.main[1] * radius, config.main[2] * radius],\n intensity: intensity * 2,\n castShadow: !!shadows,\n \"shadow-bias\": shadowBias,\n \"shadow-normalBias\": normalBias,\n \"shadow-mapSize\": shadowSize\n }), /*#__PURE__*/React.createElement(\"pointLight\", {\n position: [config.fill[0] * radius, config.fill[1] * radius, config.fill[2] * radius],\n intensity: intensity\n }), /*#__PURE__*/React.createElement(Bounds, _extends({\n fit: !!adjustCamera,\n clip: !!adjustCamera,\n margin: Number(adjustCamera),\n observe: true\n }, props), /*#__PURE__*/React.createElement(Refit, {\n radius: radius,\n adjustCamera: adjustCamera\n }), /*#__PURE__*/React.createElement(Center, _extends({}, center, {\n position: [0, shadowOffset / 2, 0],\n onCentered: onCentered\n }), children)), /*#__PURE__*/React.createElement(\"group\", {\n position: [0, -height / 2 - shadowOffset / 2, 0]\n }, contactShadow && /*#__PURE__*/React.createElement(ContactShadows, _extends({\n scale: radius * 4,\n far: radius,\n blur: 2\n }, shadowSpread)), accumulativeShadow && /*#__PURE__*/React.createElement(AccumulativeShadows, _extends({\n temporal: true,\n frames: 100,\n alphaTest: 0.9,\n toneMapped: true,\n scale: radius * 4\n }, shadowSpread), /*#__PURE__*/React.createElement(RandomizedLight, {\n amount: (_amount = shadowSpread.amount) !== null && _amount !== void 0 ? _amount : 8,\n radius: (_radius = shadowSpread.radius) !== null && _radius !== void 0 ? _radius : radius,\n ambient: (_ambient = shadowSpread.ambient) !== null && _ambient !== void 0 ? _ambient : 0.5,\n intensity: (_intensity = shadowSpread.intensity) !== null && _intensity !== void 0 ? _intensity : 1,\n position: [config.main[0] * radius, config.main[1] * radius, config.main[2] * radius],\n size: radius * 4,\n bias: -shadowBias,\n mapSize: shadowSize\n }))), environment && /*#__PURE__*/React.createElement(Environment, environmentProps));\n}\n\nexport { Stage };\n","import * as React from 'react';\n\nconst easeInExpo = x => x === 0 ? 0 : Math.pow(2, 10 * x - 10);\nfunction Backdrop({\n children,\n floor = 0.25,\n segments = 20,\n receiveShadow,\n ...props\n}) {\n const ref = React.useRef(null);\n React.useLayoutEffect(() => {\n let i = 0;\n const offset = segments / segments / 2;\n const position = ref.current.attributes.position;\n for (let x = 0; x < segments + 1; x++) {\n for (let y = 0; y < segments + 1; y++) {\n position.setXYZ(i++, x / segments - offset + (x === 0 ? -floor : 0), y / segments - offset, easeInExpo(x / segments));\n }\n }\n position.needsUpdate = true;\n ref.current.computeVertexNormals();\n }, [segments, floor]);\n return /*#__PURE__*/React.createElement(\"group\", props, /*#__PURE__*/React.createElement(\"mesh\", {\n receiveShadow: receiveShadow,\n rotation: [-Math.PI / 2, 0, Math.PI / 2]\n }, /*#__PURE__*/React.createElement(\"planeGeometry\", {\n ref: ref,\n args: [1, 1, segments, segments]\n }), children));\n}\n\nexport { Backdrop };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { Color, DoubleSide } from 'three';\n\nconst Shadow = /* @__PURE__ */React.forwardRef(({\n fog = false,\n renderOrder,\n depthWrite = false,\n colorStop = 0.0,\n color = 'black',\n opacity = 0.5,\n ...props\n}, ref) => {\n const canvas = React.useMemo(() => {\n const canvas = document.createElement('canvas');\n canvas.width = 128;\n canvas.height = 128;\n const context = canvas.getContext('2d');\n const gradient = context.createRadialGradient(canvas.width / 2, canvas.height / 2, 0, canvas.width / 2, canvas.height / 2, canvas.width / 2);\n gradient.addColorStop(colorStop, new Color(color).getStyle());\n gradient.addColorStop(1, 'rgba(0,0,0,0)');\n context.fillStyle = gradient;\n context.fillRect(0, 0, canvas.width, canvas.height);\n return canvas;\n }, [color, colorStop]);\n return /*#__PURE__*/React.createElement(\"mesh\", _extends({\n renderOrder: renderOrder,\n ref: ref,\n \"rotation-x\": -Math.PI / 2\n }, props), /*#__PURE__*/React.createElement(\"planeGeometry\", null), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n transparent: true,\n opacity: opacity,\n fog: fog,\n depthWrite: depthWrite,\n side: DoubleSide\n }, /*#__PURE__*/React.createElement(\"canvasTexture\", {\n attach: \"map\",\n args: [canvas]\n })));\n});\n\nexport { Shadow };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { extend, useThree, useFrame } from '@react-three/fiber';\nimport { useFBO } from './Fbo.js';\nimport { useHelper } from './Helper.js';\nimport { shaderMaterial } from './shaderMaterial.js';\nimport { Edges } from './Edges.js';\nimport { FullScreenQuad } from 'three-stdlib';\nimport { version } from '../helpers/constants.js';\n\nfunction createNormalMaterial(side = THREE.FrontSide) {\n const viewMatrix = {\n value: new THREE.Matrix4()\n };\n return Object.assign(new THREE.MeshNormalMaterial({\n side\n }), {\n viewMatrix,\n onBeforeCompile: shader => {\n shader.uniforms.viewMatrix = viewMatrix;\n shader.fragmentShader = `vec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n }\\n` + shader.fragmentShader.replace('#include <normal_fragment_maps>', `#include <normal_fragment_maps>\n normal = inverseTransformDirection( normal, viewMatrix );\\n`);\n }\n });\n}\nconst CausticsProjectionMaterial = /* @__PURE__ */shaderMaterial({\n causticsTexture: null,\n causticsTextureB: null,\n color: /* @__PURE__ */new THREE.Color(),\n lightProjMatrix: /* @__PURE__ */new THREE.Matrix4(),\n lightViewMatrix: /* @__PURE__ */new THREE.Matrix4()\n}, `varying vec3 vWorldPosition;\n void main() {\n gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);\n vec4 worldPosition = modelMatrix * vec4(position, 1.);\n vWorldPosition = worldPosition.xyz;\n }`, `varying vec3 vWorldPosition;\n uniform vec3 color;\n uniform sampler2D causticsTexture;\n uniform sampler2D causticsTextureB;\n uniform mat4 lightProjMatrix;\n uniform mat4 lightViewMatrix;\n void main() {\n // Apply caustics\n vec4 lightSpacePos = lightProjMatrix * lightViewMatrix * vec4(vWorldPosition, 1.0);\n lightSpacePos.xyz /= lightSpacePos.w;\n lightSpacePos.xyz = lightSpacePos.xyz * 0.5 + 0.5;\n vec3 front = texture2D(causticsTexture, lightSpacePos.xy).rgb;\n vec3 back = texture2D(causticsTextureB, lightSpacePos.xy).rgb;\n gl_FragColor = vec4((front + back) * color, 1.0);\n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }`);\nconst CausticsMaterial = /* @__PURE__ */shaderMaterial({\n cameraMatrixWorld: /* @__PURE__ */new THREE.Matrix4(),\n cameraProjectionMatrixInv: /* @__PURE__ */new THREE.Matrix4(),\n normalTexture: null,\n depthTexture: null,\n lightDir: /* @__PURE__ */new THREE.Vector3(0, 1, 0),\n lightPlaneNormal: /* @__PURE__ */new THREE.Vector3(0, 1, 0),\n lightPlaneConstant: 0,\n near: 0.1,\n far: 100,\n modelMatrix: /* @__PURE__ */new THREE.Matrix4(),\n worldRadius: 1 / 40,\n ior: 1.1,\n bounces: 0,\n resolution: 1024,\n size: 10,\n intensity: 0.5\n}, /* glsl */`\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }`, /* glsl */`\n uniform mat4 cameraMatrixWorld;\n uniform mat4 cameraProjectionMatrixInv;\n uniform vec3 lightDir;\n uniform vec3 lightPlaneNormal;\n uniform float lightPlaneConstant;\n uniform float near;\n uniform float far;\n uniform float time;\n uniform float worldRadius;\n uniform float resolution;\n uniform float size;\n uniform float intensity;\n uniform float ior;\n precision highp isampler2D;\n precision highp usampler2D;\n uniform sampler2D normalTexture;\n uniform sampler2D depthTexture;\n uniform float bounces;\n varying vec2 vUv;\n vec3 WorldPosFromDepth(float depth, vec2 coord) {\n float z = depth * 2.0 - 1.0;\n vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, z, 1.0);\n vec4 viewSpacePosition = cameraProjectionMatrixInv * clipSpacePosition;\n // Perspective division\n viewSpacePosition /= viewSpacePosition.w;\n vec4 worldSpacePosition = cameraMatrixWorld * viewSpacePosition;\n return worldSpacePosition.xyz;\n }\n float sdPlane( vec3 p, vec3 n, float h ) {\n // n must be normalized\n return dot(p,n) + h;\n }\n float planeIntersect( vec3 ro, vec3 rd, vec4 p ) {\n return -(dot(ro,p.xyz)+p.w)/dot(rd,p.xyz);\n }\n vec3 totalInternalReflection(vec3 ro, vec3 rd, vec3 pos, vec3 normal, float ior, out vec3 rayOrigin, out vec3 rayDirection) {\n rayOrigin = ro;\n rayDirection = rd;\n rayDirection = refract(rayDirection, normal, 1.0 / ior);\n rayOrigin = pos + rayDirection * 0.1;\n return rayDirection;\n }\n void main() {\n // Each sample consists of random offset in the x and y direction\n float caustic = 0.0;\n float causticTexelSize = (1.0 / resolution) * size * 2.0;\n float texelsNeeded = worldRadius / causticTexelSize;\n float sampleRadius = texelsNeeded / resolution;\n float sum = 0.0;\n if (texture2D(depthTexture, vUv).x == 1.0) {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n return;\n }\n vec2 offset1 = vec2(-0.5, -0.5);//vec2(rand() - 0.5, rand() - 0.5);\n vec2 offset2 = vec2(-0.5, 0.5);//vec2(rand() - 0.5, rand() - 0.5);\n vec2 offset3 = vec2(0.5, 0.5);//vec2(rand() - 0.5, rand() - 0.5);\n vec2 offset4 = vec2(0.5, -0.5);//vec2(rand() - 0.5, rand() - 0.5);\n vec2 uv1 = vUv + offset1 * sampleRadius;\n vec2 uv2 = vUv + offset2 * sampleRadius;\n vec2 uv3 = vUv + offset3 * sampleRadius;\n vec2 uv4 = vUv + offset4 * sampleRadius;\n vec3 normal1 = texture2D(normalTexture, uv1, -10.0).rgb * 2.0 - 1.0;\n vec3 normal2 = texture2D(normalTexture, uv2, -10.0).rgb * 2.0 - 1.0;\n vec3 normal3 = texture2D(normalTexture, uv3, -10.0).rgb * 2.0 - 1.0;\n vec3 normal4 = texture2D(normalTexture, uv4, -10.0).rgb * 2.0 - 1.0;\n float depth1 = texture2D(depthTexture, uv1, -10.0).x;\n float depth2 = texture2D(depthTexture, uv2, -10.0).x;\n float depth3 = texture2D(depthTexture, uv3, -10.0).x;\n float depth4 = texture2D(depthTexture, uv4, -10.0).x;\n // Sanity check the depths\n if (depth1 == 1.0 || depth2 == 1.0 || depth3 == 1.0 || depth4 == 1.0) {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n return;\n }\n vec3 pos1 = WorldPosFromDepth(depth1, uv1);\n vec3 pos2 = WorldPosFromDepth(depth2, uv2);\n vec3 pos3 = WorldPosFromDepth(depth3, uv3);\n vec3 pos4 = WorldPosFromDepth(depth4, uv4);\n vec3 originPos1 = WorldPosFromDepth(0.0, uv1);\n vec3 originPos2 = WorldPosFromDepth(0.0, uv2);\n vec3 originPos3 = WorldPosFromDepth(0.0, uv3);\n vec3 originPos4 = WorldPosFromDepth(0.0, uv4);\n vec3 endPos1, endPos2, endPos3, endPos4;\n vec3 endDir1, endDir2, endDir3, endDir4;\n totalInternalReflection(originPos1, lightDir, pos1, normal1, ior, endPos1, endDir1);\n totalInternalReflection(originPos2, lightDir, pos2, normal2, ior, endPos2, endDir2);\n totalInternalReflection(originPos3, lightDir, pos3, normal3, ior, endPos3, endDir3);\n totalInternalReflection(originPos4, lightDir, pos4, normal4, ior, endPos4, endDir4);\n float lightPosArea = length(cross(originPos2 - originPos1, originPos3 - originPos1)) + length(cross(originPos3 - originPos1, originPos4 - originPos1));\n float t1 = planeIntersect(endPos1, endDir1, vec4(lightPlaneNormal, lightPlaneConstant));\n float t2 = planeIntersect(endPos2, endDir2, vec4(lightPlaneNormal, lightPlaneConstant));\n float t3 = planeIntersect(endPos3, endDir3, vec4(lightPlaneNormal, lightPlaneConstant));\n float t4 = planeIntersect(endPos4, endDir4, vec4(lightPlaneNormal, lightPlaneConstant));\n vec3 finalPos1 = endPos1 + endDir1 * t1;\n vec3 finalPos2 = endPos2 + endDir2 * t2;\n vec3 finalPos3 = endPos3 + endDir3 * t3;\n vec3 finalPos4 = endPos4 + endDir4 * t4;\n float finalArea = length(cross(finalPos2 - finalPos1, finalPos3 - finalPos1)) + length(cross(finalPos3 - finalPos1, finalPos4 - finalPos1));\n caustic += intensity * (lightPosArea / finalArea);\n // Calculate the area of the triangle in light spaces\n gl_FragColor = vec4(vec3(max(caustic, 0.0)), 1.0);\n }`);\nconst NORMALPROPS = {\n depth: true,\n minFilter: THREE.LinearFilter,\n magFilter: THREE.LinearFilter,\n type: THREE.UnsignedByteType\n};\nconst CAUSTICPROPS = {\n minFilter: THREE.LinearMipmapLinearFilter,\n magFilter: THREE.LinearFilter,\n type: THREE.FloatType,\n generateMipmaps: true\n};\nconst Caustics = /* @__PURE__ */React.forwardRef(({\n debug,\n children,\n frames = 1,\n ior = 1.1,\n color = 'white',\n causticsOnly = false,\n backside = false,\n backsideIOR = 1.1,\n worldRadius = 0.3125,\n intensity = 0.05,\n resolution = 2024,\n lightSource = [5, 5, 5],\n ...props\n}, fref) => {\n extend({\n CausticsProjectionMaterial\n });\n const ref = React.useRef(null);\n const camera = React.useRef(null);\n const scene = React.useRef(null);\n const plane = React.useRef(null);\n const gl = useThree(state => state.gl);\n const helper = useHelper(debug && camera, THREE.CameraHelper);\n\n // Buffers for front and back faces\n const normalTarget = useFBO(resolution, resolution, NORMALPROPS);\n const normalTargetB = useFBO(resolution, resolution, NORMALPROPS);\n const causticsTarget = useFBO(resolution, resolution, CAUSTICPROPS);\n const causticsTargetB = useFBO(resolution, resolution, CAUSTICPROPS);\n // Normal materials for front and back faces\n const [normalMat] = React.useState(() => createNormalMaterial());\n const [normalMatB] = React.useState(() => createNormalMaterial(THREE.BackSide));\n // The quad that catches the caustics\n const [causticsMaterial] = React.useState(() => new CausticsMaterial());\n const [causticsQuad] = React.useState(() => new FullScreenQuad(causticsMaterial));\n React.useLayoutEffect(() => {\n ref.current.updateWorldMatrix(false, true);\n });\n let count = 0;\n const v = new THREE.Vector3();\n const lpF = new THREE.Frustum();\n const lpM = new THREE.Matrix4();\n const lpP = new THREE.Plane();\n const lightDir = new THREE.Vector3();\n const lightDirInv = new THREE.Vector3();\n const bounds = new THREE.Box3();\n const focusPos = new THREE.Vector3();\n const boundsVertices = [];\n const worldVerts = [];\n const projectedVerts = [];\n const lightDirs = [];\n const cameraPos = new THREE.Vector3();\n for (let i = 0; i < 8; i++) {\n boundsVertices.push(new THREE.Vector3());\n worldVerts.push(new THREE.Vector3());\n projectedVerts.push(new THREE.Vector3());\n lightDirs.push(new THREE.Vector3());\n }\n useFrame(() => {\n if (frames === Infinity || count++ < frames) {\n var _scene$current$parent, _helper$current;\n if (Array.isArray(lightSource)) lightDir.fromArray(lightSource).normalize();else lightDir.copy(ref.current.worldToLocal(lightSource.current.getWorldPosition(v)).normalize());\n lightDirInv.copy(lightDir).multiplyScalar(-1);\n (_scene$current$parent = scene.current.parent) == null || _scene$current$parent.matrixWorld.identity();\n bounds.setFromObject(scene.current, true);\n boundsVertices[0].set(bounds.min.x, bounds.min.y, bounds.min.z);\n boundsVertices[1].set(bounds.min.x, bounds.min.y, bounds.max.z);\n boundsVertices[2].set(bounds.min.x, bounds.max.y, bounds.min.z);\n boundsVertices[3].set(bounds.min.x, bounds.max.y, bounds.max.z);\n boundsVertices[4].set(bounds.max.x, bounds.min.y, bounds.min.z);\n boundsVertices[5].set(bounds.max.x, bounds.min.y, bounds.max.z);\n boundsVertices[6].set(bounds.max.x, bounds.max.y, bounds.min.z);\n boundsVertices[7].set(bounds.max.x, bounds.max.y, bounds.max.z);\n for (let i = 0; i < 8; i++) {\n worldVerts[i].copy(boundsVertices[i]);\n }\n bounds.getCenter(focusPos);\n boundsVertices.map(v => v.sub(focusPos));\n const lightPlane = lpP.set(lightDirInv, 0);\n boundsVertices.map((v, i) => lightPlane.projectPoint(v, projectedVerts[i]));\n const centralVert = projectedVerts.reduce((a, b) => a.add(b), v.set(0, 0, 0)).divideScalar(projectedVerts.length);\n const radius = projectedVerts.map(v => v.distanceTo(centralVert)).reduce((a, b) => Math.max(a, b));\n const dirLength = boundsVertices.map(x => x.dot(lightDir)).reduce((a, b) => Math.max(a, b));\n // Shadows\n camera.current.position.copy(cameraPos.copy(lightDir).multiplyScalar(dirLength).add(focusPos));\n camera.current.lookAt(scene.current.localToWorld(focusPos));\n const dirMatrix = lpM.lookAt(camera.current.position, focusPos, v.set(0, 1, 0));\n camera.current.left = -radius;\n camera.current.right = radius;\n camera.current.top = radius;\n camera.current.bottom = -radius;\n const yOffset = v.set(0, radius, 0).applyMatrix4(dirMatrix);\n const yTime = (camera.current.position.y + yOffset.y) / lightDir.y;\n camera.current.near = 0.1;\n camera.current.far = yTime;\n camera.current.updateProjectionMatrix();\n camera.current.updateMatrixWorld();\n\n // Now find size of ground plane\n const groundProjectedCoords = worldVerts.map((v, i) => v.add(lightDirs[i].copy(lightDir).multiplyScalar(-v.y / lightDir.y)));\n const centerPos = groundProjectedCoords.reduce((a, b) => a.add(b), v.set(0, 0, 0)).divideScalar(groundProjectedCoords.length);\n const maxSize = 2 * groundProjectedCoords.map(v => Math.hypot(v.x - centerPos.x, v.z - centerPos.z)).reduce((a, b) => Math.max(a, b));\n plane.current.scale.setScalar(maxSize);\n plane.current.position.copy(centerPos);\n if (debug) (_helper$current = helper.current) == null || _helper$current.update();\n\n // Inject uniforms\n normalMatB.viewMatrix.value = normalMat.viewMatrix.value = camera.current.matrixWorldInverse;\n const dirLightNearPlane = lpF.setFromProjectionMatrix(lpM.multiplyMatrices(camera.current.projectionMatrix, camera.current.matrixWorldInverse)).planes[4];\n causticsMaterial.cameraMatrixWorld = camera.current.matrixWorld;\n causticsMaterial.cameraProjectionMatrixInv = camera.current.projectionMatrixInverse;\n causticsMaterial.lightDir = lightDirInv;\n causticsMaterial.lightPlaneNormal = dirLightNearPlane.normal;\n causticsMaterial.lightPlaneConstant = dirLightNearPlane.constant;\n causticsMaterial.near = camera.current.near;\n causticsMaterial.far = camera.current.far;\n causticsMaterial.resolution = resolution;\n causticsMaterial.size = radius;\n causticsMaterial.intensity = intensity;\n causticsMaterial.worldRadius = worldRadius;\n\n // Switch the scene on\n scene.current.visible = true;\n\n // Render front face normals\n gl.setRenderTarget(normalTarget);\n gl.clear();\n scene.current.overrideMaterial = normalMat;\n gl.render(scene.current, camera.current);\n\n // Render back face normals, if enabled\n gl.setRenderTarget(normalTargetB);\n gl.clear();\n if (backside) {\n scene.current.overrideMaterial = normalMatB;\n gl.render(scene.current, camera.current);\n }\n\n // Remove the override material\n scene.current.overrideMaterial = null;\n\n // Render front face caustics\n causticsMaterial.ior = ior;\n plane.current.material.lightProjMatrix = camera.current.projectionMatrix;\n plane.current.material.lightViewMatrix = camera.current.matrixWorldInverse;\n causticsMaterial.normalTexture = normalTarget.texture;\n causticsMaterial.depthTexture = normalTarget.depthTexture;\n gl.setRenderTarget(causticsTarget);\n gl.clear();\n causticsQuad.render(gl);\n\n // Render back face caustics, if enabled\n causticsMaterial.ior = backsideIOR;\n causticsMaterial.normalTexture = normalTargetB.texture;\n causticsMaterial.depthTexture = normalTargetB.depthTexture;\n gl.setRenderTarget(causticsTargetB);\n gl.clear();\n if (backside) causticsQuad.render(gl);\n\n // Reset render target\n gl.setRenderTarget(null);\n\n // Switch the scene off if caustics is all that's wanted\n if (causticsOnly) scene.current.visible = false;\n }\n });\n React.useImperativeHandle(fref, () => ref.current, []);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref\n }, props), /*#__PURE__*/React.createElement(\"scene\", {\n ref: scene\n }, /*#__PURE__*/React.createElement(\"orthographicCamera\", {\n ref: camera,\n up: [0, 1, 0]\n }), children), /*#__PURE__*/React.createElement(\"mesh\", {\n renderOrder: 2,\n ref: plane,\n \"rotation-x\": -Math.PI / 2\n }, /*#__PURE__*/React.createElement(\"planeGeometry\", null), /*#__PURE__*/React.createElement(\"causticsProjectionMaterial\", {\n transparent: true,\n color: color,\n causticsTexture: causticsTarget.texture,\n causticsTextureB: causticsTargetB.texture,\n blending: THREE.CustomBlending,\n blendSrc: THREE.OneFactor,\n blendDst: THREE.SrcAlphaFactor,\n depthWrite: false\n }), debug && /*#__PURE__*/React.createElement(Edges, null, /*#__PURE__*/React.createElement(\"lineBasicMaterial\", {\n color: \"#ffff00\",\n toneMapped: false\n }))));\n});\n\nexport { Caustics };\n","import * as THREE from 'three';\nimport { version } from '../helpers/constants.js';\n\nclass SpotLightMaterial extends THREE.ShaderMaterial {\n constructor() {\n super({\n uniforms: {\n depth: {\n value: null\n },\n opacity: {\n value: 1\n },\n attenuation: {\n value: 2.5\n },\n anglePower: {\n value: 12\n },\n spotPosition: {\n value: new THREE.Vector3(0, 0, 0)\n },\n lightColor: {\n value: new THREE.Color('white')\n },\n cameraNear: {\n value: 0\n },\n cameraFar: {\n value: 1\n },\n resolution: {\n value: new THREE.Vector2(0, 0)\n }\n },\n transparent: true,\n depthWrite: false,\n vertexShader: /* glsl */`\n varying vec3 vNormal;\n varying float vViewZ;\n varying float vIntensity;\n uniform vec3 spotPosition;\n uniform float attenuation;\n\n #include <common>\n #include <logdepthbuf_pars_vertex>\n\n void main() {\n // compute intensity\n vNormal = normalize(normalMatrix * normal);\n vec4 worldPosition = modelMatrix * vec4(position, 1);\n vec4 viewPosition = viewMatrix * worldPosition;\n vViewZ = viewPosition.z;\n\n vIntensity = 1.0 - saturate(distance(worldPosition.xyz, spotPosition) / attenuation);\n\n gl_Position = projectionMatrix * viewPosition;\n\n #include <logdepthbuf_vertex>\n }\n `,\n fragmentShader: /* glsl */`\n varying vec3 vNormal;\n varying float vViewZ;\n varying float vIntensity;\n\n uniform vec3 lightColor;\n uniform float anglePower;\n uniform sampler2D depth;\n uniform vec2 resolution;\n uniform float cameraNear;\n uniform float cameraFar;\n uniform float opacity;\n\n #include <packing>\n #include <logdepthbuf_pars_fragment>\n\n float readDepth(sampler2D depthSampler, vec2 uv) {\n float fragCoordZ = texture(depthSampler, uv).r;\n\n // https://github.com/mrdoob/three.js/issues/23072\n #ifdef USE_LOGDEPTHBUF\n float viewZ = 1.0 - exp2(fragCoordZ * log(cameraFar + 1.0) / log(2.0));\n #else\n float viewZ = perspectiveDepthToViewZ(fragCoordZ, cameraNear, cameraFar);\n #endif\n\n return viewZ;\n }\n\n void main() {\n #include <logdepthbuf_fragment>\n\n vec3 normal = vec3(vNormal.x, vNormal.y, abs(vNormal.z));\n float angleIntensity = pow(dot(normal, vec3(0, 0, 1)), anglePower);\n float intensity = vIntensity * angleIntensity;\n\n // fades when z is close to sampled depth, meaning the cone is intersecting existing geometry\n bool isSoft = resolution[0] > 0.0 && resolution[1] > 0.0;\n if (isSoft) {\n vec2 uv = gl_FragCoord.xy / resolution;\n intensity *= smoothstep(0.0, 1.0, vViewZ - readDepth(depth, uv));\n }\n\n gl_FragColor = vec4(lightColor, intensity * opacity);\n\n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }\n `\n });\n }\n}\n\nexport { SpotLightMaterial };\n","var SpotlightShadowShader = \"#define GLSLIFY 1\\nvarying vec2 vUv;uniform sampler2D uShadowMap;uniform float uTime;void main(){vec3 color=texture2D(uShadowMap,vUv).xyz;gl_FragColor=vec4(color,1.);}\"; // eslint-disable-line\n\nexport { SpotlightShadowShader as default };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { Vector3, CylinderGeometry, Matrix4, WebGLRenderTarget, RGBAFormat, ShaderMaterial, DoubleSide, RepeatWrapping } from 'three';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { FullScreenQuad } from 'three-stdlib';\nimport { SpotLightMaterial } from '../materials/SpotLightMaterial.js';\nimport SpotlightShadowShader from '../helpers/glsl/DefaultSpotlightShadowShadows.glsl.js';\n\nconst isSpotLight = child => {\n return child == null ? void 0 : child.isSpotLight;\n};\nfunction VolumetricMesh({\n opacity = 1,\n radiusTop,\n radiusBottom,\n depthBuffer,\n color = 'white',\n distance = 5,\n angle = 0.15,\n attenuation = 5,\n anglePower = 5\n}) {\n const mesh = React.useRef(null);\n const size = useThree(state => state.size);\n const camera = useThree(state => state.camera);\n const dpr = useThree(state => state.viewport.dpr);\n const [material] = React.useState(() => new SpotLightMaterial());\n const [vec] = React.useState(() => new Vector3());\n radiusTop = radiusTop === undefined ? 0.1 : radiusTop;\n radiusBottom = radiusBottom === undefined ? angle * 7 : radiusBottom;\n useFrame(() => {\n material.uniforms.spotPosition.value.copy(mesh.current.getWorldPosition(vec));\n mesh.current.lookAt(mesh.current.parent.target.getWorldPosition(vec));\n });\n const geom = React.useMemo(() => {\n const geometry = new CylinderGeometry(radiusTop, radiusBottom, distance, 128, 64, true);\n geometry.applyMatrix4(new Matrix4().makeTranslation(0, -distance / 2, 0));\n geometry.applyMatrix4(new Matrix4().makeRotationX(-Math.PI / 2));\n return geometry;\n }, [distance, radiusTop, radiusBottom]);\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"mesh\", {\n ref: mesh,\n geometry: geom,\n raycast: () => null\n }, /*#__PURE__*/React.createElement(\"primitive\", {\n object: material,\n attach: \"material\",\n \"uniforms-opacity-value\": opacity,\n \"uniforms-lightColor-value\": color,\n \"uniforms-attenuation-value\": attenuation,\n \"uniforms-anglePower-value\": anglePower,\n \"uniforms-depth-value\": depthBuffer,\n \"uniforms-cameraNear-value\": camera.near,\n \"uniforms-cameraFar-value\": camera.far,\n \"uniforms-resolution-value\": depthBuffer ? [size.width * dpr, size.height * dpr] : [0, 0]\n })));\n}\nfunction useCommon(spotlight, mesh, width, height, distance) {\n const [[pos, dir]] = React.useState(() => [new Vector3(), new Vector3()]);\n React.useLayoutEffect(() => {\n if (isSpotLight(spotlight.current)) {\n spotlight.current.shadow.mapSize.set(width, height);\n spotlight.current.shadow.needsUpdate = true;\n } else {\n throw new Error('SpotlightShadow must be a child of a SpotLight');\n }\n }, [spotlight, width, height]);\n useFrame(() => {\n if (!spotlight.current) return;\n const A = spotlight.current.position;\n const B = spotlight.current.target.position;\n dir.copy(B).sub(A);\n var len = dir.length();\n dir.normalize().multiplyScalar(len * distance);\n pos.copy(A).add(dir);\n mesh.current.position.copy(pos);\n mesh.current.lookAt(spotlight.current.target.position);\n });\n}\nfunction SpotlightShadowWithShader({\n distance = 0.4,\n alphaTest = 0.5,\n map,\n shader = SpotlightShadowShader,\n width = 512,\n height = 512,\n scale = 1,\n children,\n ...rest\n}) {\n const mesh = React.useRef(null);\n const spotlight = rest.spotlightRef;\n const debug = rest.debug;\n useCommon(spotlight, mesh, width, height, distance);\n const renderTarget = React.useMemo(() => new WebGLRenderTarget(width, height, {\n format: RGBAFormat,\n stencilBuffer: false\n // depthTexture: null!\n }), [width, height]);\n const uniforms = React.useRef({\n uShadowMap: {\n value: map\n },\n uTime: {\n value: 0\n }\n });\n React.useEffect(() => void (uniforms.current.uShadowMap.value = map), [map]);\n const fsQuad = React.useMemo(() => new FullScreenQuad(new ShaderMaterial({\n uniforms: uniforms.current,\n vertexShader: /* glsl */`\n varying vec2 vUv;\n\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: shader\n })), [shader]);\n React.useEffect(() => () => {\n fsQuad.material.dispose();\n fsQuad.dispose();\n }, [fsQuad]);\n React.useEffect(() => () => renderTarget.dispose(), [renderTarget]);\n useFrame(({\n gl\n }, dt) => {\n uniforms.current.uTime.value += dt;\n gl.setRenderTarget(renderTarget);\n fsQuad.render(gl);\n gl.setRenderTarget(null);\n });\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"mesh\", {\n ref: mesh,\n scale: scale,\n castShadow: true\n }, /*#__PURE__*/React.createElement(\"planeGeometry\", null), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n transparent: true,\n side: DoubleSide,\n alphaTest: alphaTest,\n alphaMap: renderTarget.texture,\n \"alphaMap-wrapS\": RepeatWrapping,\n \"alphaMap-wrapT\": RepeatWrapping,\n opacity: debug ? 1 : 0\n }, children)));\n}\nfunction SpotlightShadowWithoutShader({\n distance = 0.4,\n alphaTest = 0.5,\n map,\n width = 512,\n height = 512,\n scale,\n children,\n ...rest\n}) {\n const mesh = React.useRef(null);\n const spotlight = rest.spotlightRef;\n const debug = rest.debug;\n useCommon(spotlight, mesh, width, height, distance);\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"mesh\", {\n ref: mesh,\n scale: scale,\n castShadow: true\n }, /*#__PURE__*/React.createElement(\"planeGeometry\", null), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n transparent: true,\n side: DoubleSide,\n alphaTest: alphaTest,\n alphaMap: map,\n \"alphaMap-wrapS\": RepeatWrapping,\n \"alphaMap-wrapT\": RepeatWrapping,\n opacity: debug ? 1 : 0\n }, children)));\n}\nfunction SpotLightShadow(props) {\n if (props.shader) return /*#__PURE__*/React.createElement(SpotlightShadowWithShader, props);\n return /*#__PURE__*/React.createElement(SpotlightShadowWithoutShader, props);\n}\nconst SpotLight = /*#__PURE__*/React.forwardRef(({\n // Volumetric\n opacity = 1,\n radiusTop,\n radiusBottom,\n depthBuffer,\n color = 'white',\n distance = 5,\n angle = 0.15,\n attenuation = 5,\n anglePower = 5,\n volumetric = true,\n debug = false,\n children,\n ...props\n}, ref) => {\n const spotlight = React.useRef(null);\n React.useImperativeHandle(ref, () => spotlight.current, []);\n return /*#__PURE__*/React.createElement(\"group\", null, debug && spotlight.current && /*#__PURE__*/React.createElement(\"spotLightHelper\", {\n args: [spotlight.current]\n }), /*#__PURE__*/React.createElement(\"spotLight\", _extends({\n ref: spotlight,\n angle: angle,\n color: color,\n distance: distance,\n castShadow: true\n }, props), volumetric && /*#__PURE__*/React.createElement(VolumetricMesh, {\n debug: debug,\n opacity: opacity,\n radiusTop: radiusTop,\n radiusBottom: radiusBottom,\n depthBuffer: depthBuffer,\n color: color,\n distance: distance,\n angle: angle,\n attenuation: attenuation,\n anglePower: anglePower\n })), children && /*#__PURE__*/React.cloneElement(children, {\n spotlightRef: spotlight,\n debug: debug\n }));\n});\n\nexport { SpotLight, SpotLightShadow };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { applyProps } from '@react-three/fiber';\nimport * as React from 'react';\nimport * as THREE from 'three';\n\nconst Lightformer = /* @__PURE__ */React.forwardRef(({\n light,\n args,\n map,\n toneMapped = false,\n color = 'white',\n form: Form = 'rect',\n intensity = 1,\n scale = 1,\n target = [0, 0, 0],\n children,\n ...props\n}, forwardRef) => {\n // Apply emissive power\n const ref = React.useRef(null);\n React.useImperativeHandle(forwardRef, () => ref.current, []);\n React.useLayoutEffect(() => {\n if (!children && !props.material) {\n applyProps(ref.current.material, {\n color\n });\n ref.current.material.color.multiplyScalar(intensity);\n }\n }, [color, intensity, children, props.material]);\n\n // Target light\n React.useLayoutEffect(() => {\n if (!props.rotation) ref.current.quaternion.identity();\n if (target && !props.rotation) {\n 'boolean' === typeof target ? ref.current.lookAt(0, 0, 0) : ref.current.lookAt(Array.isArray(target) ? new THREE.Vector3(...target) : target);\n }\n }, [target, props.rotation]);\n\n // Fix 2-dimensional scale\n scale = Array.isArray(scale) && scale.length === 2 ? [scale[0], scale[1], 1] : scale;\n return /*#__PURE__*/React.createElement(\"mesh\", _extends({\n ref: ref,\n scale: scale\n }, props), Form === 'circle' ? /*#__PURE__*/React.createElement(\"ringGeometry\", {\n args: args ? args : [0, 0.5, 64]\n }) : Form === 'ring' ? /*#__PURE__*/React.createElement(\"ringGeometry\", {\n args: args ? args : [0.25, 0.5, 64]\n }) : Form === 'rect' || Form === 'plane' ? /*#__PURE__*/React.createElement(\"planeGeometry\", {\n args: args ? args : [1, 1]\n }) : Form === 'box' ? /*#__PURE__*/React.createElement(\"boxGeometry\", {\n args: args ? args : [1, 1, 1]\n }) : /*#__PURE__*/React.createElement(Form, {\n args: args\n }), children ? children : /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n toneMapped: toneMapped,\n map: map,\n side: THREE.DoubleSide\n }), light && /*#__PURE__*/React.createElement(\"pointLight\", _extends({\n castShadow: true\n }, light)));\n});\n\nexport { Lightformer };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { Sky as Sky$1 } from 'three-stdlib';\nimport { Vector3 } from 'three';\n\nfunction calcPosFromAngles(inclination, azimuth, vector = new Vector3()) {\n const theta = Math.PI * (inclination - 0.5);\n const phi = 2 * Math.PI * (azimuth - 0.5);\n vector.x = Math.cos(phi);\n vector.y = Math.sin(theta);\n vector.z = Math.sin(phi);\n return vector;\n}\nconst Sky = /* @__PURE__ */React.forwardRef(({\n inclination = 0.6,\n azimuth = 0.1,\n distance = 1000,\n mieCoefficient = 0.005,\n mieDirectionalG = 0.8,\n rayleigh = 0.5,\n turbidity = 10,\n sunPosition = calcPosFromAngles(inclination, azimuth),\n ...props\n}, ref) => {\n const scale = React.useMemo(() => new Vector3().setScalar(distance), [distance]);\n const [sky] = React.useState(() => new Sky$1());\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n object: sky,\n ref: ref,\n \"material-uniforms-mieCoefficient-value\": mieCoefficient,\n \"material-uniforms-mieDirectionalG-value\": mieDirectionalG,\n \"material-uniforms-rayleigh-value\": rayleigh,\n \"material-uniforms-sunPosition-value\": sunPosition,\n \"material-uniforms-turbidity-value\": turbidity,\n scale: scale\n }, props));\n});\n\nexport { Sky, calcPosFromAngles };\n","import * as React from 'react';\nimport { useFrame } from '@react-three/fiber';\nimport { Color, AdditiveBlending, ShaderMaterial, Vector3, Spherical } from 'three';\nimport { version } from '../helpers/constants.js';\n\nclass StarfieldMaterial extends ShaderMaterial {\n constructor() {\n super({\n uniforms: {\n time: {\n value: 0.0\n },\n fade: {\n value: 1.0\n }\n },\n vertexShader: /* glsl */`\n uniform float time;\n attribute float size;\n varying vec3 vColor;\n void main() {\n vColor = color;\n vec4 mvPosition = modelViewMatrix * vec4(position, 0.5);\n gl_PointSize = size * (30.0 / -mvPosition.z) * (3.0 + sin(time + 100.0));\n gl_Position = projectionMatrix * mvPosition;\n }`,\n fragmentShader: /* glsl */`\n uniform sampler2D pointTexture;\n uniform float fade;\n varying vec3 vColor;\n void main() {\n float opacity = 1.0;\n if (fade == 1.0) {\n float d = distance(gl_PointCoord, vec2(0.5, 0.5));\n opacity = 1.0 / (1.0 + exp(16.0 * (d - 0.25)));\n }\n gl_FragColor = vec4(vColor, opacity);\n\n #include <tonemapping_fragment>\n\t #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }`\n });\n }\n}\nconst genStar = r => {\n return new Vector3().setFromSpherical(new Spherical(r, Math.acos(1 - Math.random() * 2), Math.random() * 2 * Math.PI));\n};\nconst Stars = /* @__PURE__ */React.forwardRef(({\n radius = 100,\n depth = 50,\n count = 5000,\n saturation = 0,\n factor = 4,\n fade = false,\n speed = 1\n}, ref) => {\n const material = React.useRef(null);\n const [position, color, size] = React.useMemo(() => {\n const positions = [];\n const colors = [];\n const sizes = Array.from({\n length: count\n }, () => (0.5 + 0.5 * Math.random()) * factor);\n const color = new Color();\n let r = radius + depth;\n const increment = depth / count;\n for (let i = 0; i < count; i++) {\n r -= increment * Math.random();\n positions.push(...genStar(r).toArray());\n color.setHSL(i / count, saturation, 0.9);\n colors.push(color.r, color.g, color.b);\n }\n return [new Float32Array(positions), new Float32Array(colors), new Float32Array(sizes)];\n }, [count, depth, factor, radius, saturation]);\n useFrame(state => material.current && (material.current.uniforms.time.value = state.clock.elapsedTime * speed));\n const [starfieldMaterial] = React.useState(() => new StarfieldMaterial());\n return /*#__PURE__*/React.createElement(\"points\", {\n ref: ref\n }, /*#__PURE__*/React.createElement(\"bufferGeometry\", null, /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-position\",\n args: [position, 3]\n }), /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-color\",\n args: [color, 3]\n }), /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-size\",\n args: [size, 1]\n })), /*#__PURE__*/React.createElement(\"primitive\", {\n ref: material,\n object: starfieldMaterial,\n attach: \"material\",\n blending: AdditiveBlending,\n \"uniforms-fade-value\": fade,\n depthWrite: false,\n transparent: true,\n vertexColors: true\n }));\n});\n\nexport { Stars };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { REVISION, Quaternion, Vector3, DynamicDrawUsage, MeshLambertMaterial, Matrix4, Color } from 'three';\nimport { extend, useFrame, applyProps } from '@react-three/fiber';\nimport { useTexture } from './Texture.js';\nimport { setUpdateRange } from '../helpers/deprecated.js';\n\nconst CLOUD_URL = 'https://rawcdn.githack.com/pmndrs/drei-assets/9225a9f1fbd449d9411125c2f419b843d0308c9f/cloud.png';\nconst parentMatrix = /* @__PURE__ */new Matrix4();\nconst translation = /* @__PURE__ */new Vector3();\nconst rotation = /* @__PURE__ */new Quaternion();\nconst cpos = /* @__PURE__ */new Vector3();\nconst cquat = /* @__PURE__ */new Quaternion();\nconst scale = /* @__PURE__ */new Vector3();\nconst context = /* @__PURE__ */React.createContext(null);\nconst Clouds = /* @__PURE__ */React.forwardRef(({\n children,\n material = MeshLambertMaterial,\n texture = CLOUD_URL,\n range,\n limit = 200,\n frustumCulled,\n ...props\n}, fref) => {\n var _image$width, _image$height;\n const CloudMaterial = React.useMemo(() => {\n return class extends material {\n constructor() {\n super();\n const opaque_fragment = parseInt(REVISION.replace(/\\D+/g, '')) >= 154 ? 'opaque_fragment' : 'output_fragment';\n this.onBeforeCompile = shader => {\n shader.vertexShader = `attribute float cloudOpacity;\n varying float vOpacity;\n ` + shader.vertexShader.replace('#include <fog_vertex>', `#include <fog_vertex>\n vOpacity = cloudOpacity;\n `);\n shader.fragmentShader = `varying float vOpacity;\n ` + shader.fragmentShader.replace(`#include <${opaque_fragment}>`, `#include <${opaque_fragment}>\n gl_FragColor = vec4(outgoingLight, diffuseColor.a * vOpacity);\n `);\n };\n }\n };\n }, [material]);\n extend({\n CloudMaterial\n });\n const instance = React.useRef(null);\n const clouds = React.useRef([]);\n const opacities = React.useMemo(() => new Float32Array(Array.from({\n length: limit\n }, () => 1)), [limit]);\n const colors = React.useMemo(() => new Float32Array(Array.from({\n length: limit\n }, () => [1, 1, 1]).flat()), [limit]);\n const cloudTexture = useTexture(texture);\n let t = 0;\n let index = 0;\n let config;\n const qat = new Quaternion();\n const dir = new Vector3(0, 0, 1);\n const pos = new Vector3();\n useFrame((state, delta) => {\n t = state.clock.elapsedTime;\n parentMatrix.copy(instance.current.matrixWorld).invert();\n state.camera.matrixWorld.decompose(cpos, cquat, scale);\n for (index = 0; index < clouds.current.length; index++) {\n config = clouds.current[index];\n config.ref.current.matrixWorld.decompose(translation, rotation, scale);\n translation.add(pos.copy(config.position).applyQuaternion(rotation).multiply(scale));\n rotation.copy(cquat).multiply(qat.setFromAxisAngle(dir, config.rotation += delta * config.rotationFactor));\n scale.multiplyScalar(config.volume + (1 + Math.sin(t * config.density * config.speed)) / 2 * config.growth);\n config.matrix.compose(translation, rotation, scale).premultiply(parentMatrix);\n config.dist = translation.distanceTo(cpos);\n }\n\n // Depth-sort. Instances have no specific draw order, w/o sorting z would be random\n clouds.current.sort((a, b) => b.dist - a.dist);\n for (index = 0; index < clouds.current.length; index++) {\n config = clouds.current[index];\n opacities[index] = config.opacity * (config.dist < config.fade - 1 ? config.dist / config.fade : 1);\n instance.current.setMatrixAt(index, config.matrix);\n instance.current.setColorAt(index, config.color);\n }\n\n // Update instance\n instance.current.geometry.attributes.cloudOpacity.needsUpdate = true;\n instance.current.instanceMatrix.needsUpdate = true;\n if (instance.current.instanceColor) instance.current.instanceColor.needsUpdate = true;\n });\n React.useLayoutEffect(() => {\n const count = Math.min(limit, range !== undefined ? range : limit, clouds.current.length);\n instance.current.count = count;\n setUpdateRange(instance.current.instanceMatrix, {\n start: 0,\n count: count * 16\n });\n if (instance.current.instanceColor) {\n setUpdateRange(instance.current.instanceColor, {\n start: 0,\n count: count * 3\n });\n }\n setUpdateRange(instance.current.geometry.attributes.cloudOpacity, {\n start: 0,\n count: count\n });\n });\n let imageBounds = [(_image$width = cloudTexture.image.width) !== null && _image$width !== void 0 ? _image$width : 1, (_image$height = cloudTexture.image.height) !== null && _image$height !== void 0 ? _image$height : 1];\n const max = Math.max(imageBounds[0], imageBounds[1]);\n imageBounds = [imageBounds[0] / max, imageBounds[1] / max];\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: fref\n }, props), /*#__PURE__*/React.createElement(context.Provider, {\n value: clouds\n }, children, /*#__PURE__*/React.createElement(\"instancedMesh\", {\n matrixAutoUpdate: false,\n ref: instance,\n args: [null, null, limit],\n frustumCulled: frustumCulled\n }, /*#__PURE__*/React.createElement(\"instancedBufferAttribute\", {\n usage: DynamicDrawUsage,\n attach: \"instanceColor\",\n args: [colors, 3]\n }), /*#__PURE__*/React.createElement(\"planeGeometry\", {\n args: [...imageBounds]\n }, /*#__PURE__*/React.createElement(\"instancedBufferAttribute\", {\n usage: DynamicDrawUsage,\n attach: \"attributes-cloudOpacity\",\n args: [opacities, 1]\n })), /*#__PURE__*/React.createElement(\"cloudMaterial\", {\n key: material.name,\n map: cloudTexture,\n transparent: true,\n depthWrite: false\n }))));\n});\nconst CloudInstance = /* @__PURE__ */React.forwardRef(({\n opacity = 1,\n speed = 0,\n bounds = [5, 1, 1],\n segments = 20,\n color = '#ffffff',\n fade = 10,\n volume = 6,\n smallestVolume = 0.25,\n distribute = null,\n growth = 4,\n concentrate = 'inside',\n seed = Math.random(),\n ...props\n}, fref) => {\n function random() {\n const x = Math.sin(seed++) * 10000;\n return x - Math.floor(x);\n }\n const parent = React.useContext(context);\n const ref = React.useRef(null);\n const uuid = React.useId();\n const clouds = React.useMemo(() => {\n return [...new Array(segments)].map((_, index) => ({\n segments,\n bounds: new Vector3(1, 1, 1),\n position: new Vector3(),\n uuid,\n index,\n ref,\n dist: 0,\n matrix: new Matrix4(),\n color: new Color(),\n rotation: index * (Math.PI / segments)\n }));\n }, [segments, uuid]);\n React.useLayoutEffect(() => {\n clouds.forEach((cloud, index) => {\n applyProps(cloud, {\n volume,\n color,\n speed,\n growth,\n opacity,\n fade,\n bounds,\n density: Math.max(0.5, random()),\n rotationFactor: Math.max(0.2, 0.5 * random()) * speed\n });\n // Only distribute randomly if there are multiple segments\n\n const distributed = distribute == null ? void 0 : distribute(cloud, index);\n if (distributed || segments > 1) {\n var _distributed$point;\n cloud.position.copy(cloud.bounds).multiply((_distributed$point = distributed == null ? void 0 : distributed.point) !== null && _distributed$point !== void 0 ? _distributed$point : {\n x: random() * 2 - 1,\n y: random() * 2 - 1,\n z: random() * 2 - 1\n });\n }\n const xDiff = Math.abs(cloud.position.x);\n const yDiff = Math.abs(cloud.position.y);\n const zDiff = Math.abs(cloud.position.z);\n const max = Math.max(xDiff, yDiff, zDiff);\n cloud.length = 1;\n if (xDiff === max) cloud.length -= xDiff / cloud.bounds.x;\n if (yDiff === max) cloud.length -= yDiff / cloud.bounds.y;\n if (zDiff === max) cloud.length -= zDiff / cloud.bounds.z;\n cloud.volume = ((distributed == null ? void 0 : distributed.volume) !== undefined ? distributed.volume : Math.max(Math.max(0, smallestVolume), concentrate === 'random' ? random() : concentrate === 'inside' ? cloud.length : 1 - cloud.length)) * volume;\n });\n }, [concentrate, bounds, fade, color, opacity, growth, volume, seed, segments, speed]);\n React.useLayoutEffect(() => {\n const temp = clouds;\n parent.current = [...parent.current, ...temp];\n return () => {\n parent.current = parent.current.filter(item => item.uuid !== uuid);\n };\n }, [clouds]);\n React.useImperativeHandle(fref, () => ref.current, []);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref\n }, props));\n});\nconst Cloud = /* @__PURE__ */React.forwardRef((props, fref) => {\n const parent = React.useContext(context);\n if (parent) return /*#__PURE__*/React.createElement(CloudInstance, _extends({\n ref: fref\n }, props));\n return /*#__PURE__*/React.createElement(Clouds, null, /*#__PURE__*/React.createElement(CloudInstance, _extends({\n ref: fref\n }, props)));\n});\n\nexport { Cloud, CloudInstance, Clouds };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { extend, useThree, useFrame } from '@react-three/fiber';\nimport { version } from '../helpers/constants.js';\n\nclass SparklesImplMaterial extends THREE.ShaderMaterial {\n constructor() {\n super({\n uniforms: {\n time: {\n value: 0\n },\n pixelRatio: {\n value: 1\n }\n },\n vertexShader: /* glsl */`\n uniform float pixelRatio;\n uniform float time;\n attribute float size; \n attribute float speed; \n attribute float opacity;\n attribute vec3 noise;\n attribute vec3 color;\n varying vec3 vColor;\n varying float vOpacity;\n\n void main() {\n vec4 modelPosition = modelMatrix * vec4(position, 1.0);\n modelPosition.y += sin(time * speed + modelPosition.x * noise.x * 100.0) * 0.2;\n modelPosition.z += cos(time * speed + modelPosition.x * noise.y * 100.0) * 0.2;\n modelPosition.x += cos(time * speed + modelPosition.x * noise.z * 100.0) * 0.2;\n vec4 viewPosition = viewMatrix * modelPosition;\n vec4 projectionPostion = projectionMatrix * viewPosition;\n gl_Position = projectionPostion;\n gl_PointSize = size * 25. * pixelRatio;\n gl_PointSize *= (1.0 / - viewPosition.z);\n vColor = color;\n vOpacity = opacity;\n }\n `,\n fragmentShader: /* glsl */`\n varying vec3 vColor;\n varying float vOpacity;\n void main() {\n float distanceToCenter = distance(gl_PointCoord, vec2(0.5));\n float strength = 0.05 / distanceToCenter - 0.1;\n gl_FragColor = vec4(vColor, strength * vOpacity);\n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }\n `\n });\n }\n get time() {\n return this.uniforms.time.value;\n }\n set time(value) {\n this.uniforms.time.value = value;\n }\n get pixelRatio() {\n return this.uniforms.pixelRatio.value;\n }\n set pixelRatio(value) {\n this.uniforms.pixelRatio.value = value;\n }\n}\nconst isFloat32Array = def => def && def.constructor === Float32Array;\nconst expandColor = v => [v.r, v.g, v.b];\nconst isVector = v => v instanceof THREE.Vector2 || v instanceof THREE.Vector3 || v instanceof THREE.Vector4;\nconst normalizeVector = v => {\n if (Array.isArray(v)) return v;else if (isVector(v)) return v.toArray();\n return [v, v, v];\n};\nfunction usePropAsIsOrAsAttribute(count, prop, setDefault) {\n return React.useMemo(() => {\n if (prop !== undefined) {\n if (isFloat32Array(prop)) {\n return prop;\n } else {\n if (prop instanceof THREE.Color) {\n const a = Array.from({\n length: count * 3\n }, () => expandColor(prop)).flat();\n return Float32Array.from(a);\n } else if (isVector(prop) || Array.isArray(prop)) {\n const a = Array.from({\n length: count * 3\n }, () => normalizeVector(prop)).flat();\n return Float32Array.from(a);\n }\n return Float32Array.from({\n length: count\n }, () => prop);\n }\n }\n return Float32Array.from({\n length: count\n }, setDefault);\n }, [prop]);\n}\nconst Sparkles = /* @__PURE__ */React.forwardRef(({\n noise = 1,\n count = 100,\n speed = 1,\n opacity = 1,\n scale = 1,\n size,\n color,\n children,\n ...props\n}, forwardRef) => {\n React.useMemo(() => extend({\n SparklesImplMaterial\n }), []);\n const ref = React.useRef(null);\n const dpr = useThree(state => state.viewport.dpr);\n const _scale = normalizeVector(scale);\n const positions = React.useMemo(() => Float32Array.from(Array.from({\n length: count\n }, () => _scale.map(THREE.MathUtils.randFloatSpread)).flat()), [count, ..._scale]);\n const sizes = usePropAsIsOrAsAttribute(count, size, Math.random);\n const opacities = usePropAsIsOrAsAttribute(count, opacity);\n const speeds = usePropAsIsOrAsAttribute(count, speed);\n const noises = usePropAsIsOrAsAttribute(count * 3, noise);\n const colors = usePropAsIsOrAsAttribute(color === undefined ? count * 3 : count, !isFloat32Array(color) ? new THREE.Color(color) : color, () => 1);\n useFrame(state => {\n if (ref.current && ref.current.material) ref.current.material.time = state.clock.elapsedTime;\n });\n React.useImperativeHandle(forwardRef, () => ref.current, []);\n return /*#__PURE__*/React.createElement(\"points\", _extends({\n key: `particle-${count}-${JSON.stringify(scale)}`\n }, props, {\n ref: ref\n }), /*#__PURE__*/React.createElement(\"bufferGeometry\", null, /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-position\",\n args: [positions, 3]\n }), /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-size\",\n args: [sizes, 1]\n }), /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-opacity\",\n args: [opacities, 1]\n }), /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-speed\",\n args: [speeds, 1]\n }), /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-color\",\n args: [colors, 3]\n }), /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-noise\",\n args: [noises, 3]\n })), children ? children : /*#__PURE__*/React.createElement(\"sparklesImplMaterial\", {\n transparent: true,\n pixelRatio: dpr,\n depthWrite: false\n }));\n});\n\nexport { Sparkles };\n","import * as React from 'react';\nimport { useTexture } from './Texture.js';\nimport { suspend } from 'suspend-react';\n\nfunction getFormatString(format) {\n switch (format) {\n case 64:\n return '-64px';\n case 128:\n return '-128px';\n case 256:\n return '-256px';\n case 512:\n return '-512px';\n default:\n return '';\n }\n}\nconst LIST_URL = 'https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/matcaps.json';\nconst MATCAP_ROOT = 'https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d';\nfunction useMatcapTexture(id = 0, format = 1024, onLoad) {\n const matcapList = suspend(() => fetch(LIST_URL).then(res => res.json()), ['matcapList']);\n const DEFAULT_MATCAP = matcapList[0];\n const numTot = React.useMemo(() => Object.keys(matcapList).length, []);\n const fileHash = React.useMemo(() => {\n if (typeof id === 'string') {\n return id;\n } else if (typeof id === 'number') {\n return matcapList[id];\n }\n return null;\n }, [id]);\n const fileName = `${fileHash || DEFAULT_MATCAP}${getFormatString(format)}.png`;\n const url = `${MATCAP_ROOT}/${format}/${fileName}`;\n const matcapTexture = useTexture(url, onLoad);\n return [matcapTexture, url, numTot];\n}\n\n//\n\nconst MatcapTexture = ({\n children,\n id,\n format,\n onLoad\n}) => {\n const texture = useMatcapTexture(id, format, onLoad);\n return /*#__PURE__*/React.createElement(React.Fragment, null, children == null ? void 0 : children(texture));\n};\n\nexport { MatcapTexture, useMatcapTexture };\n","import * as React from 'react';\nimport { useTexture } from './Texture.js';\nimport { RepeatWrapping, Vector2 } from 'three';\nimport { suspend } from 'suspend-react';\n\nconst NORMAL_ROOT = 'https://rawcdn.githack.com/pmndrs/drei-assets/7a3104997e1576f83472829815b00880d88b32fb';\nconst LIST_URL = 'https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/normals/normals.json';\nfunction useNormalTexture(id = 0, settings = {}, onLoad) {\n const {\n repeat = [1, 1],\n anisotropy = 1,\n offset = [0, 0]\n } = settings;\n const normalsList = suspend(() => fetch(LIST_URL).then(res => res.json()), ['normalsList']);\n const numTot = React.useMemo(() => Object.keys(normalsList).length, []);\n const DEFAULT_NORMAL = normalsList[0];\n const imageName = normalsList[id] || DEFAULT_NORMAL;\n const url = `${NORMAL_ROOT}/normals/${imageName}`;\n const normalTexture = useTexture(url, onLoad);\n React.useLayoutEffect(() => {\n if (!normalTexture) return;\n normalTexture.wrapS = normalTexture.wrapT = RepeatWrapping;\n normalTexture.repeat = new Vector2(repeat[0], repeat[1]);\n normalTexture.offset = new Vector2(offset[0], offset[1]);\n normalTexture.anisotropy = anisotropy;\n }, [normalTexture, anisotropy, repeat, offset]);\n return [normalTexture, url, numTot];\n}\n\n//\n\nconst NormalTexture = ({\n children,\n id,\n onLoad,\n ...settings\n}) => {\n const ret = useNormalTexture(id, settings, onLoad);\n return /*#__PURE__*/React.createElement(React.Fragment, null, children == null ? void 0 : children(ret));\n};\n\nexport { NormalTexture, useNormalTexture };\n","import * as THREE from 'three';\nimport * as React from 'react';\nimport { shaderMaterial } from '../core/shaderMaterial.js';\n\nconst WireframeMaterialShaders = {\n uniforms: {\n strokeOpacity: 1,\n fillOpacity: 0.25,\n fillMix: 0,\n thickness: 0.05,\n colorBackfaces: false,\n dashInvert: true,\n dash: false,\n dashRepeats: 4,\n dashLength: 0.5,\n squeeze: false,\n squeezeMin: 0.2,\n squeezeMax: 1,\n stroke: /* @__PURE__ */new THREE.Color('#ff0000'),\n backfaceStroke: /* @__PURE__ */new THREE.Color('#0000ff'),\n fill: /* @__PURE__ */new THREE.Color('#00ff00')\n },\n vertex: /* glsl */`\n\t attribute vec3 barycentric;\n\t\n\t\tvarying vec3 v_edges_Barycentric;\n\t\tvarying vec3 v_edges_Position;\n\n\t\tvoid initWireframe() {\n\t\t\tv_edges_Barycentric = barycentric;\n\t\t\tv_edges_Position = position.xyz;\n\t\t}\n\t `,\n fragment: /* glsl */`\n\t\t#ifndef PI\n\t \t#define PI 3.1415926535897932384626433832795\n\t\t#endif\n \n\t varying vec3 v_edges_Barycentric;\n\t varying vec3 v_edges_Position;\n \n\t uniform float strokeOpacity;\n\t uniform float fillOpacity;\n\t uniform float fillMix;\n\t uniform float thickness;\n\t uniform bool colorBackfaces;\n \n\t // Dash\n\t uniform bool dashInvert;\n\t uniform bool dash;\n\t uniform bool dashOnly;\n\t uniform float dashRepeats;\n\t uniform float dashLength;\n \n\t // Squeeze\n\t uniform bool squeeze;\n\t uniform float squeezeMin;\n\t uniform float squeezeMax;\n \n\t // Colors\n\t uniform vec3 stroke;\n\t uniform vec3 backfaceStroke;\n\t uniform vec3 fill;\n \n\t // This is like\n\t float wireframe_aastep(float threshold, float dist) {\n\t\t float afwidth = fwidth(dist) * 0.5;\n\t\t return smoothstep(threshold - afwidth, threshold + afwidth, dist);\n\t }\n \n\t float wireframe_map(float value, float min1, float max1, float min2, float max2) {\n\t\t return min2 + (value - min1) * (max2 - min2) / (max1 - min1);\n\t }\n \n\t float getWireframe() {\n\t\t\tvec3 barycentric = v_edges_Barycentric;\n\t\t\n\t\t\t// Distance from center of each triangle to its edges.\n\t\t\tfloat d = min(min(barycentric.x, barycentric.y), barycentric.z);\n\n\t\t\t// for dashed rendering, we can use this to get the 0 .. 1 value of the line length\n\t\t\tfloat positionAlong = max(barycentric.x, barycentric.y);\n\t\t\tif (barycentric.y < barycentric.x && barycentric.y < barycentric.z) {\n\t\t\t\tpositionAlong = 1.0 - positionAlong;\n\t\t\t}\n\n\t\t\t// the thickness of the stroke\n\t\t\tfloat computedThickness = wireframe_map(thickness, 0.0, 1.0, 0.0, 0.34);\n\n\t\t\t// if we want to shrink the thickness toward the center of the line segment\n\t\t\tif (squeeze) {\n\t\t\t\tcomputedThickness *= mix(squeezeMin, squeezeMax, (1.0 - sin(positionAlong * PI)));\n\t\t\t}\n\n\t\t\t// Create dash pattern\n\t\t\tif (dash) {\n\t\t\t\t// here we offset the stroke position depending on whether it\n\t\t\t\t// should overlap or not\n\t\t\t\tfloat offset = 1.0 / dashRepeats * dashLength / 2.0;\n\t\t\t\tif (!dashInvert) {\n\t\t\t\t\toffset += 1.0 / dashRepeats / 2.0;\n\t\t\t\t}\n\n\t\t\t\t// if we should animate the dash or not\n\t\t\t\t// if (dashAnimate) {\n\t\t\t\t// \toffset += time * 0.22;\n\t\t\t\t// }\n\n\t\t\t\t// create the repeating dash pattern\n\t\t\t\tfloat pattern = fract((positionAlong + offset) * dashRepeats);\n\t\t\t\tcomputedThickness *= 1.0 - wireframe_aastep(dashLength, pattern);\n\t\t\t}\n\n\t\t\t// compute the anti-aliased stroke edge \n\t\t\tfloat edge = 1.0 - wireframe_aastep(computedThickness, d);\n\n\t\t\treturn edge;\n\t }\n\t `\n};\nconst WireframeMaterial = /* @__PURE__ */shaderMaterial(WireframeMaterialShaders.uniforms, WireframeMaterialShaders.vertex + /* glsl */`\n \tvoid main() {\n\t\tinitWireframe();\n\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n\t}\n `, WireframeMaterialShaders.fragment + /* glsl */`\n void main () {\n\t\t// Compute color\n\n\t\tfloat edge = getWireframe();\n\t\tvec4 colorStroke = vec4(stroke, edge);\n\n\t\t#ifdef FLIP_SIDED\n\t\t\tcolorStroke.rgb = backfaceStroke;\n\t\t#endif\n \n\t\tvec4 colorFill = vec4(fill, fillOpacity);\n\t\tvec4 outColor = mix(colorFill, colorStroke, edge * strokeOpacity);\n\n\t\tgl_FragColor = outColor;\n\t}\n `);\nfunction setWireframeOverride(material, uniforms) {\n material.onBeforeCompile = shader => {\n shader.uniforms = {\n ...shader.uniforms,\n ...uniforms\n };\n shader.vertexShader = shader.vertexShader.replace('void main() {', `\n\t\t ${WireframeMaterialShaders.vertex}\n\t\t void main() {\n\t\t\tinitWireframe();\n\t\t`);\n shader.fragmentShader = shader.fragmentShader.replace('void main() {', `\n\t\t ${WireframeMaterialShaders.fragment}\n\t\t void main() {\n\t\t`);\n shader.fragmentShader = shader.fragmentShader.replace('#include <color_fragment>', /* glsl */`\n\t\t #include <color_fragment>\n\t\t\t float edge = getWireframe();\n\t\t vec4 colorStroke = vec4(stroke, edge);\n\t\t #ifdef FLIP_SIDED\n\t\t\tcolorStroke.rgb = backfaceStroke;\n\t\t #endif\n\t\t vec4 colorFill = vec4(mix(diffuseColor.rgb, fill, fillMix), mix(diffuseColor.a, fillOpacity, fillMix));\n\t\t vec4 outColor = mix(colorFill, colorStroke, edge * strokeOpacity);\n\n\t\t diffuseColor.rgb = outColor.rgb;\n\t\t diffuseColor.a *= outColor.a;\n\t\t`);\n };\n material.side = THREE.DoubleSide;\n material.transparent = true;\n}\nfunction useWireframeUniforms(uniforms, props) {\n React.useEffect(() => {\n var _props$fillOpacity;\n return void (uniforms.fillOpacity.value = (_props$fillOpacity = props.fillOpacity) !== null && _props$fillOpacity !== void 0 ? _props$fillOpacity : uniforms.fillOpacity.value);\n }, [props.fillOpacity]);\n React.useEffect(() => {\n var _props$fillMix;\n return void (uniforms.fillMix.value = (_props$fillMix = props.fillMix) !== null && _props$fillMix !== void 0 ? _props$fillMix : uniforms.fillMix.value);\n }, [props.fillMix]);\n React.useEffect(() => {\n var _props$strokeOpacity;\n return void (uniforms.strokeOpacity.value = (_props$strokeOpacity = props.strokeOpacity) !== null && _props$strokeOpacity !== void 0 ? _props$strokeOpacity : uniforms.strokeOpacity.value);\n }, [props.strokeOpacity]);\n React.useEffect(() => {\n var _props$thickness;\n return void (uniforms.thickness.value = (_props$thickness = props.thickness) !== null && _props$thickness !== void 0 ? _props$thickness : uniforms.thickness.value);\n }, [props.thickness]);\n React.useEffect(() => void (uniforms.colorBackfaces.value = !!props.colorBackfaces), [props.colorBackfaces]);\n React.useEffect(() => void (uniforms.dash.value = !!props.dash), [props.dash]);\n React.useEffect(() => void (uniforms.dashInvert.value = !!props.dashInvert), [props.dashInvert]);\n React.useEffect(() => {\n var _props$dashRepeats;\n return void (uniforms.dashRepeats.value = (_props$dashRepeats = props.dashRepeats) !== null && _props$dashRepeats !== void 0 ? _props$dashRepeats : uniforms.dashRepeats.value);\n }, [props.dashRepeats]);\n React.useEffect(() => {\n var _props$dashLength;\n return void (uniforms.dashLength.value = (_props$dashLength = props.dashLength) !== null && _props$dashLength !== void 0 ? _props$dashLength : uniforms.dashLength.value);\n }, [props.dashLength]);\n React.useEffect(() => void (uniforms.squeeze.value = !!props.squeeze), [props.squeeze]);\n React.useEffect(() => {\n var _props$squeezeMin;\n return void (uniforms.squeezeMin.value = (_props$squeezeMin = props.squeezeMin) !== null && _props$squeezeMin !== void 0 ? _props$squeezeMin : uniforms.squeezeMin.value);\n }, [props.squeezeMin]);\n React.useEffect(() => {\n var _props$squeezeMax;\n return void (uniforms.squeezeMax.value = (_props$squeezeMax = props.squeezeMax) !== null && _props$squeezeMax !== void 0 ? _props$squeezeMax : uniforms.squeezeMax.value);\n }, [props.squeezeMax]);\n React.useEffect(() => void (uniforms.stroke.value = props.stroke ? new THREE.Color(props.stroke) : uniforms.stroke.value), [props.stroke]);\n React.useEffect(() => void (uniforms.fill.value = props.fill ? new THREE.Color(props.fill) : uniforms.fill.value), [props.fill]);\n React.useEffect(() => void (uniforms.backfaceStroke.value = props.backfaceStroke ? new THREE.Color(props.backfaceStroke) : uniforms.backfaceStroke.value), [props.backfaceStroke]);\n}\n\nexport { WireframeMaterial, WireframeMaterialShaders, setWireframeOverride, useWireframeUniforms };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { extend } from '@react-three/fiber';\nimport { WireframeMaterial, WireframeMaterialShaders, useWireframeUniforms, setWireframeOverride } from '../materials/WireframeMaterial.js';\n\nfunction isWithGeometry(object) {\n return !!(object != null && object.geometry);\n}\nfunction isGeometry(object) {\n return !!(object != null && object.isBufferGeometry);\n}\nfunction isRefObject(object) {\n return !!(object != null && object.current);\n}\nfunction isRef(object) {\n return (object == null ? void 0 : object.current) !== undefined;\n}\nfunction isWireframeGeometry(geometry) {\n return geometry.type === 'WireframeGeometry';\n}\nfunction getUniforms() {\n const u = {};\n for (const key in WireframeMaterialShaders.uniforms) {\n u[key] = {\n value: WireframeMaterialShaders.uniforms[key]\n };\n }\n return u;\n}\nfunction getBarycentricCoordinates(geometry, removeEdge) {\n const position = geometry.getAttribute('position');\n const count = position.count;\n const barycentric = [];\n for (let i = 0; i < count; i++) {\n const even = i % 2 === 0;\n const Q = removeEdge ? 1 : 0;\n if (even) {\n barycentric.push(0, 0, 1, 0, 1, 0, 1, 0, Q);\n } else {\n barycentric.push(0, 1, 0, 0, 0, 1, 1, 0, Q);\n }\n }\n return new THREE.BufferAttribute(Float32Array.from(barycentric), 3);\n}\nfunction getInputGeometry(inputGeometry) {\n const geo = isRefObject(inputGeometry) ? inputGeometry.current : inputGeometry;\n if (!isGeometry(geo)) {\n // Disallow WireframeGeometry\n if (isWireframeGeometry(geo)) {\n throw new Error('Wireframe: WireframeGeometry is not supported.');\n }\n const parent = geo.parent;\n if (isWithGeometry(parent)) {\n // Disallow WireframeGeometry\n if (isWireframeGeometry(parent.geometry)) {\n throw new Error('Wireframe: WireframeGeometry is not supported.');\n }\n return parent.geometry;\n }\n } else {\n return geo;\n }\n}\nfunction setBarycentricCoordinates(geometry, simplify) {\n if (geometry.index) {\n console.warn('Wireframe: Requires non-indexed geometry, converting to non-indexed geometry.');\n const nonIndexedGeo = geometry.toNonIndexed();\n geometry.copy(nonIndexedGeo);\n geometry.setIndex(null);\n }\n const newBarycentric = getBarycentricCoordinates(geometry, simplify);\n geometry.setAttribute('barycentric', newBarycentric);\n}\nfunction WireframeWithCustomGeo({\n geometry: customGeometry,\n simplify = false,\n ...props\n}) {\n extend({\n MeshWireframeMaterial: WireframeMaterial\n });\n const [geometry, setGeometry] = React.useState(null);\n React.useLayoutEffect(() => {\n const geom = getInputGeometry(customGeometry);\n if (!geom) {\n throw new Error('Wireframe: geometry prop must be a BufferGeometry or a ref to a BufferGeometry.');\n }\n setBarycentricCoordinates(geom, simplify);\n if (isRef(customGeometry)) {\n setGeometry(geom);\n }\n }, [simplify, customGeometry]);\n const drawnGeo = isRef(customGeometry) ? geometry : customGeometry;\n return /*#__PURE__*/React.createElement(React.Fragment, null, drawnGeo && /*#__PURE__*/React.createElement(\"mesh\", {\n geometry: drawnGeo\n }, /*#__PURE__*/React.createElement(\"meshWireframeMaterial\", _extends({\n attach: \"material\",\n transparent: true,\n side: THREE.DoubleSide,\n polygonOffset: true //\n ,\n polygonOffsetFactor: -4\n }, props, {\n extensions: {\n derivatives: true,\n fragDepth: false,\n drawBuffers: false,\n shaderTextureLOD: false\n }\n }))));\n}\nfunction WireframeWithoutCustomGeo({\n simplify = false,\n ...props\n}) {\n const objectRef = React.useRef(null);\n const uniforms = React.useMemo(() => getUniforms(), [WireframeMaterialShaders.uniforms]);\n useWireframeUniforms(uniforms, props);\n React.useLayoutEffect(() => {\n const geom = getInputGeometry(objectRef);\n if (!geom) {\n throw new Error('Wireframe: Must be a child of a Mesh, Line or Points object or specify a geometry prop.');\n }\n const og = geom.clone();\n setBarycentricCoordinates(geom, simplify);\n return () => {\n geom.copy(og);\n og.dispose();\n };\n }, [simplify]);\n React.useLayoutEffect(() => {\n const parentMesh = objectRef.current.parent;\n const og = parentMesh.material.clone();\n setWireframeOverride(parentMesh.material, uniforms);\n return () => {\n parentMesh.material.dispose();\n parentMesh.material = og;\n };\n }, []);\n return /*#__PURE__*/React.createElement(\"object3D\", {\n ref: objectRef\n });\n}\nfunction Wireframe({\n geometry: customGeometry,\n ...props\n}) {\n if (customGeometry) {\n return /*#__PURE__*/React.createElement(WireframeWithCustomGeo, _extends({\n geometry: customGeometry\n }, props));\n }\n return /*#__PURE__*/React.createElement(WireframeWithoutCustomGeo, props);\n}\n\nexport { Wireframe };\n","import { useFrame } from '@react-three/fiber';\nimport * as React from 'react';\nimport * as THREE from 'three';\n\n/**\n * Integration and compilation: Faraz Shaikh (https://twitter.com/CantBeFaraz)\n *\n * Based on:\n * - https://gkjohnson.github.io/threejs-sandbox/screendoor-transparency/ by Garrett Johnson (https://github.com/gkjohnson)\n *\n * Note:\n * - Must depreciate in favor of https://github.com/mrdoob/three.js/issues/10600 when it's ready.\n */\nfunction ShadowAlpha({\n opacity,\n alphaMap\n}) {\n const depthMaterialRef = React.useRef(null);\n const distanceMaterialRef = React.useRef(null);\n const uShadowOpacity = React.useRef({\n value: 1\n });\n const uAlphaMap = React.useRef({\n value: null\n });\n const uHasAlphaMap = React.useRef({\n value: false\n });\n React.useLayoutEffect(() => {\n depthMaterialRef.current.onBeforeCompile = distanceMaterialRef.current.onBeforeCompile = shader => {\n // Need to get the \"void main\" line dynamically because the lines for\n // MeshDistanceMaterial and MeshDepthMaterial are different 🤦‍♂️\n const mainLineStart = shader.fragmentShader.indexOf('void main');\n let mainLine = '';\n let ch;\n let i = mainLineStart;\n while (ch !== '\\n' && i < mainLineStart + 100) {\n ch = shader.fragmentShader.charAt(i);\n mainLine += ch;\n i++;\n }\n mainLine = mainLine.trim();\n shader.vertexShader = shader.vertexShader.replace('void main() {', `\n varying vec2 custom_vUv;\n\n void main() {\n custom_vUv = uv;\n \n `);\n shader.fragmentShader = shader.fragmentShader.replace(mainLine, `\n uniform float uShadowOpacity;\n uniform sampler2D uAlphaMap;\n uniform bool uHasAlphaMap;\n\n varying vec2 custom_vUv;\n \n float bayerDither2x2( vec2 v ) {\n return mod( 3.0 * v.y + 2.0 * v.x, 4.0 );\n }\n \n float bayerDither4x4( vec2 v ) {\n vec2 P1 = mod( v, 2.0 );\n vec2 P2 = mod( floor( 0.5 * v ), 2.0 );\n return 4.0 * bayerDither2x2( P1 ) + bayerDither2x2( P2 );\n }\n \n void main() {\n float alpha = \n uHasAlphaMap ? \n uShadowOpacity * texture2D(uAlphaMap, custom_vUv).x\n : uShadowOpacity;\n\n if( ( bayerDither4x4( floor( mod( gl_FragCoord.xy, 4.0 ) ) ) ) / 16.0 >= alpha ) discard;\n \n `);\n shader.uniforms['uShadowOpacity'] = uShadowOpacity.current;\n shader.uniforms['uAlphaMap'] = uAlphaMap.current;\n shader.uniforms['uHasAlphaMap'] = uHasAlphaMap.current;\n };\n }, []);\n useFrame(() => {\n var _r3f;\n const parent = (_r3f = depthMaterialRef.current.__r3f) == null || (_r3f = _r3f.parent) == null ? void 0 : _r3f.object;\n if (parent) {\n const parentMainMaterial = parent.material;\n if (parentMainMaterial) {\n uShadowOpacity.current.value = opacity !== null && opacity !== void 0 ? opacity : parentMainMaterial.opacity;\n if (alphaMap === false) {\n uAlphaMap.current.value = null;\n uHasAlphaMap.current.value = false;\n } else {\n uAlphaMap.current.value = alphaMap || parentMainMaterial.alphaMap;\n uHasAlphaMap.current.value = !!uAlphaMap.current.value;\n }\n }\n }\n });\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"meshDepthMaterial\", {\n ref: depthMaterialRef,\n attach: \"customDepthMaterial\",\n depthPacking: THREE.RGBADepthPacking\n }), /*#__PURE__*/React.createElement(\"meshDistanceMaterial\", {\n ref: distanceMaterialRef,\n attach: \"customDistanceMaterial\"\n }));\n}\n\nexport { ShadowAlpha };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { extend, useFrame } from '@react-three/fiber';\n\nconst _inverseMatrix = /* @__PURE__ */new THREE.Matrix4();\nconst _ray = /* @__PURE__ */new THREE.Ray();\nconst _sphere = /* @__PURE__ */new THREE.Sphere();\nconst _position = /* @__PURE__ */new THREE.Vector3();\nclass PositionPoint extends THREE.Group {\n constructor() {\n super();\n this.size = 0;\n this.color = new THREE.Color('white');\n this.instance = {\n current: undefined\n };\n this.instanceKey = {\n current: undefined\n };\n }\n\n // This will allow the virtual instance have bounds\n get geometry() {\n var _this$instance$curren;\n return (_this$instance$curren = this.instance.current) == null ? void 0 : _this$instance$curren.geometry;\n }\n raycast(raycaster, intersects) {\n var _raycaster$params$Poi, _raycaster$params$Poi2;\n const parent = this.instance.current;\n if (!parent || !parent.geometry) return;\n const instanceId = parent.userData.instances.indexOf(this.instanceKey);\n // If the instance wasn't found or exceeds the parents draw range, bail out\n if (instanceId === -1 || instanceId > parent.geometry.drawRange.count) return;\n const threshold = (_raycaster$params$Poi = (_raycaster$params$Poi2 = raycaster.params.Points) == null ? void 0 : _raycaster$params$Poi2.threshold) !== null && _raycaster$params$Poi !== void 0 ? _raycaster$params$Poi : 1;\n _sphere.set(this.getWorldPosition(_position), threshold);\n if (raycaster.ray.intersectsSphere(_sphere) === false) return;\n _inverseMatrix.copy(parent.matrixWorld).invert();\n _ray.copy(raycaster.ray).applyMatrix4(_inverseMatrix);\n const localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3);\n const localThresholdSq = localThreshold * localThreshold;\n const rayPointDistanceSq = _ray.distanceSqToPoint(this.position);\n if (rayPointDistanceSq < localThresholdSq) {\n const intersectPoint = new THREE.Vector3();\n _ray.closestPointToPoint(this.position, intersectPoint);\n intersectPoint.applyMatrix4(this.matrixWorld);\n const distance = raycaster.ray.origin.distanceTo(intersectPoint);\n if (distance < raycaster.near || distance > raycaster.far) return;\n intersects.push({\n distance: distance,\n distanceToRay: Math.sqrt(rayPointDistanceSq),\n point: intersectPoint,\n index: instanceId,\n face: null,\n object: this\n });\n }\n }\n}\nlet i, positionRef;\nconst context = /* @__PURE__ */React.createContext(null);\nconst parentMatrix = /* @__PURE__ */new THREE.Matrix4();\nconst position = /* @__PURE__ */new THREE.Vector3();\n\n/**\n * Instance implementation, relies on react + context to update the attributes based on the children of this component\n */\nconst PointsInstances = /* @__PURE__ */React.forwardRef(({\n children,\n range,\n limit = 1000,\n ...props\n}, ref) => {\n const parentRef = React.useRef(null);\n React.useImperativeHandle(ref, () => parentRef.current, []);\n const [refs, setRefs] = React.useState([]);\n const [[positions, colors, sizes]] = React.useState(() => [new Float32Array(limit * 3), Float32Array.from({\n length: limit * 3\n }, () => 1), Float32Array.from({\n length: limit\n }, () => 1)]);\n React.useEffect(() => {\n // We might be a frame too late? 🤷‍♂️\n parentRef.current.geometry.attributes.position.needsUpdate = true;\n });\n useFrame(() => {\n parentRef.current.updateMatrix();\n parentRef.current.updateMatrixWorld();\n parentMatrix.copy(parentRef.current.matrixWorld).invert();\n parentRef.current.geometry.drawRange.count = Math.min(limit, range !== undefined ? range : limit, refs.length);\n for (i = 0; i < refs.length; i++) {\n positionRef = refs[i].current;\n positionRef.getWorldPosition(position).applyMatrix4(parentMatrix);\n position.toArray(positions, i * 3);\n parentRef.current.geometry.attributes.position.needsUpdate = true;\n positionRef.matrixWorldNeedsUpdate = true;\n positionRef.color.toArray(colors, i * 3);\n parentRef.current.geometry.attributes.color.needsUpdate = true;\n sizes.set([positionRef.size], i);\n parentRef.current.geometry.attributes.size.needsUpdate = true;\n }\n });\n const api = React.useMemo(() => ({\n getParent: () => parentRef,\n subscribe: ref => {\n setRefs(refs => [...refs, ref]);\n return () => setRefs(refs => refs.filter(item => item.current !== ref.current));\n }\n }), []);\n return /*#__PURE__*/React.createElement(\"points\", _extends({\n userData: {\n instances: refs\n },\n matrixAutoUpdate: false,\n ref: parentRef,\n raycast: () => null\n }, props), /*#__PURE__*/React.createElement(\"bufferGeometry\", null, /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-position\",\n args: [positions, 3],\n usage: THREE.DynamicDrawUsage\n }), /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-color\",\n args: [colors, 3],\n usage: THREE.DynamicDrawUsage\n }), /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-size\",\n args: [sizes, 1],\n usage: THREE.DynamicDrawUsage\n })), /*#__PURE__*/React.createElement(context.Provider, {\n value: api\n }, children));\n});\nconst Point = /* @__PURE__ */React.forwardRef(({\n children,\n ...props\n}, ref) => {\n React.useMemo(() => extend({\n PositionPoint\n }), []);\n const group = React.useRef(null);\n React.useImperativeHandle(ref, () => group.current, []);\n const {\n subscribe,\n getParent\n } = React.useContext(context);\n React.useLayoutEffect(() => subscribe(group), []);\n return /*#__PURE__*/React.createElement(\"positionPoint\", _extends({\n instance: getParent(),\n instanceKey: group,\n ref: group\n }, props), children);\n});\n\n/**\n * Buffer implementation, relies on complete buffers of the correct number, leaves it to the user to update them\n */\n\nconst PointsBuffer = /* @__PURE__ */React.forwardRef(({\n children,\n positions,\n colors,\n sizes,\n stride = 3,\n ...props\n}, forwardedRef) => {\n const pointsRef = React.useRef(null);\n React.useImperativeHandle(forwardedRef, () => pointsRef.current, []);\n useFrame(() => {\n const attr = pointsRef.current.geometry.attributes;\n attr.position.needsUpdate = true;\n if (colors) attr.color.needsUpdate = true;\n if (sizes) attr.size.needsUpdate = true;\n });\n return /*#__PURE__*/React.createElement(\"points\", _extends({\n ref: pointsRef\n }, props), /*#__PURE__*/React.createElement(\"bufferGeometry\", null, /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-position\",\n args: [positions, stride],\n usage: THREE.DynamicDrawUsage\n }), colors && /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-color\",\n args: [colors, stride],\n count: colors.length / stride,\n usage: THREE.DynamicDrawUsage\n }), sizes && /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-size\",\n args: [sizes, 1],\n count: sizes.length / stride,\n usage: THREE.DynamicDrawUsage\n })), children);\n});\nconst Points = /* @__PURE__ */React.forwardRef((props, forwardedRef) => {\n if (props.positions instanceof Float32Array) {\n return /*#__PURE__*/React.createElement(PointsBuffer, _extends({}, props, {\n ref: forwardedRef\n }));\n } else return /*#__PURE__*/React.createElement(PointsInstances, _extends({}, props, {\n ref: forwardedRef\n }));\n});\n\nexport { Point, Points, PointsBuffer, PositionPoint };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { extend, useFrame } from '@react-three/fiber';\nimport { Line2, LineMaterial, LineSegmentsGeometry } from 'three-stdlib';\n\nconst context = /* @__PURE__ */React.createContext(null);\nconst Segments = /* @__PURE__ */React.forwardRef((props, forwardedRef) => {\n React.useMemo(() => extend({\n SegmentObject\n }), []);\n const {\n limit = 1000,\n lineWidth = 1.0,\n children,\n ...rest\n } = props;\n const [segments, setSegments] = React.useState([]);\n const [line] = React.useState(() => new Line2());\n const [material] = React.useState(() => new LineMaterial());\n const [geometry] = React.useState(() => new LineSegmentsGeometry());\n const [resolution] = React.useState(() => new THREE.Vector2(512, 512));\n const [positions] = React.useState(() => Array(limit * 6).fill(0));\n const [colors] = React.useState(() => Array(limit * 6).fill(0));\n const api = React.useMemo(() => ({\n subscribe: ref => {\n setSegments(segments => [...segments, ref]);\n return () => setSegments(segments => segments.filter(item => item.current !== ref.current));\n }\n }), []);\n useFrame(() => {\n for (let i = 0; i < limit; i++) {\n var _segments$i;\n const segment = (_segments$i = segments[i]) == null ? void 0 : _segments$i.current;\n if (segment) {\n positions[i * 6 + 0] = segment.start.x;\n positions[i * 6 + 1] = segment.start.y;\n positions[i * 6 + 2] = segment.start.z;\n positions[i * 6 + 3] = segment.end.x;\n positions[i * 6 + 4] = segment.end.y;\n positions[i * 6 + 5] = segment.end.z;\n colors[i * 6 + 0] = segment.color.r;\n colors[i * 6 + 1] = segment.color.g;\n colors[i * 6 + 2] = segment.color.b;\n colors[i * 6 + 3] = segment.color.r;\n colors[i * 6 + 4] = segment.color.g;\n colors[i * 6 + 5] = segment.color.b;\n }\n }\n geometry.setColors(colors);\n geometry.setPositions(positions);\n line.computeLineDistances();\n });\n return /*#__PURE__*/React.createElement(\"primitive\", {\n object: line,\n ref: forwardedRef\n }, /*#__PURE__*/React.createElement(\"primitive\", {\n object: geometry,\n attach: \"geometry\"\n }), /*#__PURE__*/React.createElement(\"primitive\", _extends({\n object: material,\n attach: \"material\",\n vertexColors: true,\n resolution: resolution,\n linewidth: lineWidth\n }, rest)), /*#__PURE__*/React.createElement(context.Provider, {\n value: api\n }, children));\n});\nclass SegmentObject {\n constructor() {\n this.color = new THREE.Color('white');\n this.start = new THREE.Vector3(0, 0, 0);\n this.end = new THREE.Vector3(0, 0, 0);\n }\n}\nconst normPos = pos => pos instanceof THREE.Vector3 ? pos : new THREE.Vector3(...(typeof pos === 'number' ? [pos, pos, pos] : pos));\nconst Segment = /* @__PURE__ */React.forwardRef(({\n color,\n start,\n end\n}, forwardedRef) => {\n const api = React.useContext(context);\n if (!api) throw 'Segment must used inside Segments component.';\n const ref = React.useRef(null);\n React.useImperativeHandle(forwardedRef, () => ref.current, []);\n React.useLayoutEffect(() => api.subscribe(ref), []);\n return /*#__PURE__*/React.createElement(\"segmentObject\", {\n ref: ref,\n color: color,\n start: normPos(start),\n end: normPos(end)\n });\n});\n\nexport { Segment, SegmentObject, Segments };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useFrame } from '@react-three/fiber';\n\nconst Detailed = /* @__PURE__ */React.forwardRef(({\n children,\n hysteresis = 0,\n distances,\n ...props\n}, ref) => {\n const lodRef = React.useRef(null);\n React.useImperativeHandle(ref, () => lodRef.current, []);\n React.useLayoutEffect(() => {\n const {\n current: lod\n } = lodRef;\n lod.levels.length = 0;\n lod.children.forEach((object, index) => lod.levels.push({\n object,\n hysteresis,\n distance: distances[index]\n }));\n });\n useFrame(state => {\n var _lodRef$current;\n return (_lodRef$current = lodRef.current) == null ? void 0 : _lodRef$current.update(state.camera);\n });\n return /*#__PURE__*/React.createElement(\"lOD\", _extends({\n ref: lodRef\n }, props), children);\n});\n\nexport { Detailed };\n","import { WebGLCubeRenderTarget, CubeCamera } from 'three';\nimport * as React from 'react';\nimport { useThree } from '@react-three/fiber';\n\nfunction Preload({\n all,\n scene,\n camera\n}) {\n const gl = useThree(({\n gl\n }) => gl);\n const dCamera = useThree(({\n camera\n }) => camera);\n const dScene = useThree(({\n scene\n }) => scene);\n\n // Layout effect because it must run before React commits\n React.useLayoutEffect(() => {\n const invisible = [];\n if (all) {\n (scene || dScene).traverse(object => {\n if (object.visible === false) {\n invisible.push(object);\n object.visible = true;\n }\n });\n }\n // Now compile the scene\n gl.compile(scene || dScene, camera || dCamera);\n // And for good measure, hit it with a cube camera\n const cubeRenderTarget = new WebGLCubeRenderTarget(128);\n const cubeCamera = new CubeCamera(0.01, 100000, cubeRenderTarget);\n cubeCamera.update(gl, scene || dScene);\n cubeRenderTarget.dispose();\n // Flips these objects back\n invisible.forEach(object => object.visible = false);\n }, []);\n return null;\n}\n\nexport { Preload };\n","import { useEffect } from 'react';\nimport { useThree } from '@react-three/fiber';\n\nfunction BakeShadows() {\n const gl = useThree(state => state.gl);\n useEffect(() => {\n gl.shadowMap.autoUpdate = false;\n gl.shadowMap.needsUpdate = true;\n return () => {\n gl.shadowMap.autoUpdate = gl.shadowMap.needsUpdate = true;\n };\n }, [gl.shadowMap]);\n return null;\n}\n\nexport { BakeShadows };\n","import { Matrix4, Ray, Sphere, Vector3 } from 'three';\n\nconst _inverseMatrix = /* @__PURE__ */new Matrix4();\nconst _ray = /* @__PURE__ */new Ray();\nconst _sphere = /* @__PURE__ */new Sphere();\nconst _vA = /* @__PURE__ */new Vector3();\nfunction meshBounds(raycaster, intersects) {\n const geometry = this.geometry;\n const material = this.material;\n const matrixWorld = this.matrixWorld;\n if (material === undefined) return;\n // Checking boundingSphere distance to ray\n if (geometry.boundingSphere === null) geometry.computeBoundingSphere();\n _sphere.copy(geometry.boundingSphere);\n _sphere.applyMatrix4(matrixWorld);\n if (raycaster.ray.intersectsSphere(_sphere) === false) return;\n _inverseMatrix.copy(matrixWorld).invert();\n _ray.copy(raycaster.ray).applyMatrix4(_inverseMatrix);\n // Check boundingBox before continuing\n if (geometry.boundingBox !== null && _ray.intersectBox(geometry.boundingBox, _vA) === null) return;\n intersects.push({\n distance: _vA.distanceTo(raycaster.ray.origin),\n point: _vA.clone(),\n object: this\n });\n}\n\nexport { meshBounds };\n","import * as React from 'react';\nimport { useThree } from '@react-three/fiber';\n\nfunction AdaptiveDpr({\n pixelated\n}) {\n const gl = useThree(state => state.gl);\n const active = useThree(state => state.internal.active);\n const current = useThree(state => state.performance.current);\n const initialDpr = useThree(state => state.viewport.initialDpr);\n const setDpr = useThree(state => state.setDpr);\n // Restore initial pixelratio on unmount\n React.useEffect(() => {\n const domElement = gl.domElement;\n return () => {\n if (active) setDpr(initialDpr);\n if (pixelated && domElement) domElement.style.imageRendering = 'auto';\n };\n }, []);\n // Set adaptive pixelratio\n React.useEffect(() => {\n setDpr(current * initialDpr);\n if (pixelated && gl.domElement) gl.domElement.style.imageRendering = current === 1 ? 'auto' : 'pixelated';\n }, [current]);\n return null;\n}\n\nexport { AdaptiveDpr };\n","import * as React from 'react';\nimport { useThree } from '@react-three/fiber';\n\nfunction AdaptiveEvents() {\n const get = useThree(state => state.get);\n const setEvents = useThree(state => state.setEvents);\n const current = useThree(state => state.performance.current);\n React.useEffect(() => {\n const enabled = get().events.enabled;\n return () => setEvents({\n enabled\n });\n }, []);\n React.useEffect(() => setEvents({\n enabled: current === 1\n }), [current]);\n return null;\n}\n\nexport { AdaptiveEvents };\n","import * as React from 'react';\nimport { useState, useContext, useRef, useLayoutEffect, createContext } from 'react';\nimport { useFrame } from '@react-three/fiber';\n\nconst context = /* @__PURE__ */createContext(null);\nfunction PerformanceMonitor({\n iterations = 10,\n ms = 250,\n threshold = 0.75,\n step = 0.1,\n factor: _factor = 0.5,\n flipflops = Infinity,\n bounds = refreshrate => refreshrate > 100 ? [60, 100] : [40, 60],\n onIncline,\n onDecline,\n onChange,\n onFallback,\n children\n}) {\n const decimalPlacesRatio = Math.pow(10, 0);\n const [api, _] = useState(() => ({\n fps: 0,\n index: 0,\n factor: _factor,\n flipped: 0,\n refreshrate: 0,\n fallback: false,\n frames: [],\n averages: [],\n subscriptions: new Map(),\n subscribe: ref => {\n const key = Symbol();\n api.subscriptions.set(key, ref.current);\n return () => void api.subscriptions.delete(key);\n }\n }));\n let lastFactor = 0;\n useFrame(() => {\n const {\n frames,\n averages\n } = api;\n\n // If the fallback has been reached do not continue running samples\n if (api.fallback) return;\n if (averages.length < iterations) {\n frames.push(performance.now());\n const msPassed = frames[frames.length - 1] - frames[0];\n if (msPassed >= ms) {\n api.fps = Math.round(frames.length / msPassed * 1000 * decimalPlacesRatio) / decimalPlacesRatio;\n api.refreshrate = Math.max(api.refreshrate, api.fps);\n averages[api.index++ % iterations] = api.fps;\n if (averages.length === iterations) {\n const [lower, upper] = bounds(api.refreshrate);\n const upperBounds = averages.filter(value => value >= upper);\n const lowerBounds = averages.filter(value => value < lower);\n // Trigger incline when more than -threshold- avgs exceed the upper bound\n if (upperBounds.length > iterations * threshold) {\n api.factor = Math.min(1, api.factor + step);\n api.flipped++;\n if (onIncline) onIncline(api);\n api.subscriptions.forEach(value => value.onIncline && value.onIncline(api));\n }\n // Trigger decline when more than -threshold- avgs are below the lower bound\n if (lowerBounds.length > iterations * threshold) {\n api.factor = Math.max(0, api.factor - step);\n api.flipped++;\n if (onDecline) onDecline(api);\n api.subscriptions.forEach(value => value.onDecline && value.onDecline(api));\n }\n if (lastFactor !== api.factor) {\n lastFactor = api.factor;\n if (onChange) onChange(api);\n api.subscriptions.forEach(value => value.onChange && value.onChange(api));\n }\n if (api.flipped > flipflops && !api.fallback) {\n api.fallback = true;\n if (onFallback) onFallback(api);\n api.subscriptions.forEach(value => value.onFallback && value.onFallback(api));\n }\n api.averages = [];\n\n // Resetting the refreshrate creates more problems than it solves atm\n // api.refreshrate = 0\n }\n api.frames = [];\n }\n }\n });\n return /*#__PURE__*/React.createElement(context.Provider, {\n value: api\n }, children);\n}\nfunction usePerformanceMonitor({\n onIncline,\n onDecline,\n onChange,\n onFallback\n}) {\n const api = useContext(context);\n const ref = useRef({\n onIncline,\n onDecline,\n onChange,\n onFallback\n });\n useLayoutEffect(() => {\n ref.current.onIncline = onIncline;\n ref.current.onDecline = onDecline;\n ref.current.onChange = onChange;\n ref.current.onFallback = onFallback;\n }, [onIncline, onDecline, onChange, onFallback]);\n useLayoutEffect(() => api.subscribe(ref), [api]);\n}\n\nexport { PerformanceMonitor, usePerformanceMonitor };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { useThree, createPortal, useFrame } from '@react-three/fiber';\nimport { useFBO } from './Fbo.js';\n\nconst RenderTexture = /* @__PURE__ */React.forwardRef(({\n children,\n compute,\n width,\n height,\n samples = 8,\n renderPriority = 0,\n eventPriority = 0,\n frames = Infinity,\n stencilBuffer = false,\n depthBuffer = true,\n generateMipmaps = false,\n ...props\n}, forwardRef) => {\n const {\n size,\n viewport\n } = useThree();\n const fbo = useFBO((width || size.width) * viewport.dpr, (height || size.height) * viewport.dpr, {\n samples,\n stencilBuffer,\n depthBuffer,\n generateMipmaps\n });\n const [vScene] = React.useState(() => new THREE.Scene());\n const uvCompute = React.useCallback((event, state, previous) => {\n var _fbo$texture, _previous$previousRoo;\n // Since this is only a texture it does not have an easy way to obtain the parent, which we\n // need to transform event coordinates to local coordinates. We use r3f internals to find the\n // next Object3D.\n let parent = (_fbo$texture = fbo.texture) == null || (_fbo$texture = _fbo$texture.__r3f.parent) == null ? void 0 : _fbo$texture.object;\n while (parent && !(parent instanceof THREE.Object3D)) {\n var _parent$__r3f$parent;\n parent = (_parent$__r3f$parent = parent.__r3f.parent) == null ? void 0 : _parent$__r3f$parent.object;\n }\n if (!parent) return false;\n // First we call the previous state-onion-layers compute, this is what makes it possible to nest portals\n if (!previous.raycaster.camera) previous.events.compute(event, previous, (_previous$previousRoo = previous.previousRoot) == null ? void 0 : _previous$previousRoo.getState());\n // We run a quick check against the parent, if it isn't hit there's no need to raycast at all\n const [intersection] = previous.raycaster.intersectObject(parent);\n if (!intersection) return false;\n // We take that hits uv coords, set up this layers raycaster, et voilà, we have raycasting on arbitrary surfaces\n const uv = intersection.uv;\n if (!uv) return false;\n state.raycaster.setFromCamera(state.pointer.set(uv.x * 2 - 1, uv.y * 2 - 1), state.camera);\n }, []);\n React.useImperativeHandle(forwardRef, () => fbo.texture, [fbo]);\n return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal(/*#__PURE__*/React.createElement(Container, {\n renderPriority: renderPriority,\n frames: frames,\n fbo: fbo\n }, children, /*#__PURE__*/React.createElement(\"group\", {\n onPointerOver: () => null\n })), vScene, {\n events: {\n compute: compute || uvCompute,\n priority: eventPriority\n }\n }), /*#__PURE__*/React.createElement(\"primitive\", _extends({\n object: fbo.texture\n }, props)));\n});\n\n// The container component has to be separate, it can not be inlined because \"useFrame(state\" when run inside createPortal will return\n// the portals own state which includes user-land overrides (custom cameras etc), but if it is executed in <RenderTexture>'s render function\n// it would return the default state.\nfunction Container({\n frames,\n renderPriority,\n children,\n fbo\n}) {\n let count = 0;\n let oldAutoClear;\n let oldXrEnabled;\n let oldRenderTarget;\n let oldIsPresenting;\n useFrame(state => {\n if (frames === Infinity || count < frames) {\n oldAutoClear = state.gl.autoClear;\n oldXrEnabled = state.gl.xr.enabled;\n oldRenderTarget = state.gl.getRenderTarget();\n oldIsPresenting = state.gl.xr.isPresenting;\n state.gl.autoClear = true;\n state.gl.xr.enabled = false;\n state.gl.xr.isPresenting = false;\n state.gl.setRenderTarget(fbo);\n state.gl.render(state.scene, state.camera);\n state.gl.setRenderTarget(oldRenderTarget);\n state.gl.autoClear = oldAutoClear;\n state.gl.xr.enabled = oldXrEnabled;\n state.gl.xr.isPresenting = oldIsPresenting;\n count++;\n }\n }, renderPriority);\n return /*#__PURE__*/React.createElement(React.Fragment, null, children);\n}\n\nexport { RenderTexture };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { useThree, createPortal, useFrame } from '@react-three/fiber';\n\nconst RenderCubeTexture = /* @__PURE__ */React.forwardRef(({\n children,\n compute,\n renderPriority = -1,\n eventPriority = 0,\n frames = Infinity,\n stencilBuffer = false,\n depthBuffer = true,\n generateMipmaps = false,\n resolution = 896,\n near = 0.1,\n far = 1000,\n flip = false,\n position,\n rotation,\n scale,\n quaternion,\n matrix,\n matrixAutoUpdate,\n ...props\n}, forwardRef) => {\n const {\n size,\n viewport\n } = useThree();\n const camera = React.useRef(null);\n const fbo = React.useMemo(() => {\n const fbo = new THREE.WebGLCubeRenderTarget(Math.max((resolution || size.width) * viewport.dpr, (resolution || size.height) * viewport.dpr), {\n stencilBuffer,\n depthBuffer,\n generateMipmaps\n });\n fbo.texture.isRenderTargetTexture = !flip;\n fbo.texture.flipY = true;\n fbo.texture.type = THREE.HalfFloatType;\n return fbo;\n }, [resolution, flip]);\n React.useEffect(() => {\n return () => fbo.dispose();\n }, [fbo]);\n const [vScene] = React.useState(() => new THREE.Scene());\n React.useImperativeHandle(forwardRef, () => ({\n scene: vScene,\n fbo,\n camera: camera.current\n }), [fbo]);\n return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal(/*#__PURE__*/React.createElement(Container, {\n renderPriority: renderPriority,\n frames: frames,\n camera: camera\n }, children, /*#__PURE__*/React.createElement(\"group\", {\n onPointerOver: () => null\n })), vScene, {\n events: {\n compute,\n priority: eventPriority\n }\n }), /*#__PURE__*/React.createElement(\"primitive\", _extends({\n object: fbo.texture\n }, props)), /*#__PURE__*/React.createElement(\"cubeCamera\", {\n ref: camera,\n args: [near, far, fbo],\n position: position,\n rotation: rotation,\n scale: scale,\n quaternion: quaternion,\n matrix: matrix,\n matrixAutoUpdate: matrixAutoUpdate\n }));\n});\n\n// The container component has to be separate, it can not be inlined because \"useFrame(state\" when run inside createPortal will return\n// the portals own state which includes user-land overrides (custom cameras etc), but if it is executed in <RenderTexture>'s render function\n// it would return the default state.\nfunction Container({\n frames,\n renderPriority,\n children,\n camera\n}) {\n let count = 0;\n useFrame(state => {\n if (frames === Infinity || count < frames) {\n camera.current.update(state.gl, state.scene);\n count++;\n }\n }, renderPriority);\n return /*#__PURE__*/React.createElement(React.Fragment, null, children);\n}\n\nexport { RenderCubeTexture };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\n\nconst Mask = /* @__PURE__ */React.forwardRef(({\n id = 1,\n colorWrite = false,\n depthWrite = false,\n ...props\n}, fref) => {\n const ref = React.useRef(null);\n const spread = React.useMemo(() => ({\n colorWrite,\n depthWrite,\n stencilWrite: true,\n stencilRef: id,\n stencilFunc: THREE.AlwaysStencilFunc,\n stencilFail: THREE.ReplaceStencilOp,\n stencilZFail: THREE.ReplaceStencilOp,\n stencilZPass: THREE.ReplaceStencilOp\n }), [id, colorWrite, depthWrite]);\n React.useLayoutEffect(() => {\n Object.assign(ref.current.material, spread);\n });\n React.useImperativeHandle(fref, () => ref.current, []);\n return /*#__PURE__*/React.createElement(\"mesh\", _extends({\n ref: ref,\n renderOrder: -id\n }, props));\n});\nfunction useMask(id, inverse = false) {\n return {\n stencilWrite: true,\n stencilRef: id,\n stencilFunc: inverse ? THREE.NotEqualStencilFunc : THREE.EqualStencilFunc,\n stencilFail: THREE.KeepStencilOp,\n stencilZFail: THREE.KeepStencilOp,\n stencilZPass: THREE.KeepStencilOp\n };\n}\n\nexport { Mask, useMask };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { RenderCubeTexture } from './RenderCubeTexture.js';\n\nfunction Fisheye({\n renderPriority = 1,\n zoom = 0,\n segments = 64,\n children,\n resolution = 896,\n ...props\n}) {\n const sphere = React.useRef(null);\n const cubeApi = React.useRef(null);\n\n // This isn't more than a simple sphere and a fixed orthographc camera\n // pointing at it. A virtual scene is portalled into the environment map\n // of its material. The cube-camera filming that scene is being synced to\n // the portals default camera with the <UpdateCubeCamera> component.\n\n const {\n width,\n height\n } = useThree(state => state.size);\n const [orthoC] = React.useState(() => new THREE.OrthographicCamera());\n React.useLayoutEffect(() => {\n orthoC.position.set(0, 0, 100);\n orthoC.zoom = 100;\n orthoC.left = width / -2;\n orthoC.right = width / 2;\n orthoC.top = height / 2;\n orthoC.bottom = height / -2;\n orthoC.updateProjectionMatrix();\n }, [width, height]);\n const radius = Math.sqrt(width * width + height * height) / 100 * (0.5 + zoom / 2);\n const normal = new THREE.Vector3();\n const sph = new THREE.Sphere(new THREE.Vector3(), radius);\n const normalMatrix = new THREE.Matrix3();\n const compute = React.useCallback((event, state, prev) => {\n // Raycast from the render camera to the sphere and get the surface normal\n // of the point hit in world space of the sphere scene\n // We have to set the raycaster using the orthocam and pointer\n // to perform sphere interscetions.\n state.pointer.set(event.offsetX / state.size.width * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1);\n state.raycaster.setFromCamera(state.pointer, orthoC);\n if (!state.raycaster.ray.intersectSphere(sph, normal)) return;else normal.normalize();\n // Get the matrix for transforming normals into world space\n normalMatrix.getNormalMatrix(cubeApi.current.camera.matrixWorld);\n // Get the ray\n cubeApi.current.camera.getWorldPosition(state.raycaster.ray.origin);\n state.raycaster.ray.direction.set(0, 0, 1).reflect(normal);\n state.raycaster.ray.direction.x *= -1; // flip across X to accommodate the \"flip\" of the env map\n state.raycaster.ray.direction.applyNormalMatrix(normalMatrix).multiplyScalar(-1);\n return undefined;\n }, []);\n useFrame(state => {\n // Take over rendering\n if (renderPriority) state.gl.render(sphere.current, orthoC);\n }, renderPriority);\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"mesh\", _extends({\n ref: sphere\n }, props, {\n scale: radius\n }), /*#__PURE__*/React.createElement(\"sphereGeometry\", {\n args: [1, segments, segments]\n }), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", null, /*#__PURE__*/React.createElement(RenderCubeTexture, {\n compute: compute,\n attach: \"envMap\",\n flip: true,\n resolution: resolution,\n ref: cubeApi\n }, children, /*#__PURE__*/React.createElement(UpdateCubeCamera, {\n api: cubeApi\n })))));\n}\nfunction UpdateCubeCamera({\n api\n}) {\n const t = new THREE.Vector3();\n const r = new THREE.Quaternion();\n const s = new THREE.Vector3();\n const e = new THREE.Euler(0, Math.PI, 0);\n useFrame(state => {\n // Read out the cameras whereabouts, state.camera is the one *within* the portal\n state.camera.matrixWorld.decompose(t, r, s);\n // Apply its position and rotation, flip the Y axis\n api.current.camera.position.copy(t);\n api.current.camera.quaternion.setFromEuler(e).premultiply(r);\n });\n return null;\n}\n\nexport { Fisheye };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { extend, useThree, useFrame } from '@react-three/fiber';\nimport { useIntersect } from './useIntersect.js';\nimport { useFBO } from './Fbo.js';\nimport { RenderTexture } from './RenderTexture.js';\nimport { shaderMaterial } from './shaderMaterial.js';\nimport { FullScreenQuad } from 'three-stdlib';\nimport { version } from '../helpers/constants.js';\n\nconst PortalMaterialImpl = /* @__PURE__ */shaderMaterial({\n blur: 0,\n map: null,\n sdf: null,\n blend: 0,\n size: 0,\n resolution: /* @__PURE__ */new THREE.Vector2()\n}, `varying vec2 vUv;\n void main() {\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n vUv = uv;\n }`, `uniform sampler2D sdf;\n uniform sampler2D map;\n uniform float blur;\n uniform float size;\n uniform float time;\n uniform vec2 resolution;\n varying vec2 vUv;\n #include <packing>\n void main() {\n vec2 uv = gl_FragCoord.xy / resolution.xy;\n vec4 t = texture2D(map, uv);\n float k = blur;\n float d = texture2D(sdf, vUv).r/size;\n float alpha = 1.0 - smoothstep(0.0, 1.0, clamp(d/k + 1.0, 0.0, 1.0));\n gl_FragColor = vec4(t.rgb, blur == 0.0 ? t.a : t.a * alpha);\n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }`);\nconst MeshPortalMaterial = /* @__PURE__ */React.forwardRef(({\n children,\n events = undefined,\n blur = 0,\n eventPriority = 0,\n renderPriority = 0,\n worldUnits = false,\n resolution = 512,\n ...props\n}, fref) => {\n extend({\n PortalMaterialImpl\n });\n const ref = React.useRef(null);\n const {\n scene,\n gl,\n size,\n viewport,\n setEvents\n } = useThree();\n const maskRenderTarget = useFBO(resolution, resolution);\n const [priority, setPriority] = React.useState(0);\n useFrame(() => {\n // If blend is > 0 then the portal is being entered, the render-priority must change\n const p = ref.current.blend > 0 ? Math.max(1, renderPriority) : 0;\n if (priority !== p) setPriority(p);\n });\n React.useEffect(() => {\n if (events !== undefined) setEvents({\n enabled: !events\n });\n }, [events]);\n const [visible, setVisible] = React.useState(true);\n // See if the parent mesh is in the camera frustum\n const parent = useIntersect(setVisible);\n React.useLayoutEffect(() => {\n var _ref$current;\n // Since the ref above is not tied to a mesh directly (we're inside a material),\n // it has to be tied to the parent mesh here\n parent.current = (_ref$current = ref.current) == null || (_ref$current = _ref$current.__r3f.parent) == null ? void 0 : _ref$current.object;\n }, []);\n React.useLayoutEffect(() => {\n if (!parent.current) return;\n\n // Apply the SDF mask only once\n if (blur && ref.current.sdf === null) {\n const tempMesh = new THREE.Mesh(parent.current.geometry, new THREE.MeshBasicMaterial());\n const boundingBox = new THREE.Box3().setFromBufferAttribute(tempMesh.geometry.attributes.position);\n const orthoCam = new THREE.OrthographicCamera(boundingBox.min.x * (1 + 2 / resolution), boundingBox.max.x * (1 + 2 / resolution), boundingBox.max.y * (1 + 2 / resolution), boundingBox.min.y * (1 + 2 / resolution), 0.1, 1000);\n orthoCam.position.set(0, 0, 1);\n orthoCam.lookAt(0, 0, 0);\n gl.setRenderTarget(maskRenderTarget);\n gl.render(tempMesh, orthoCam);\n const sg = makeSDFGenerator(resolution, resolution, gl);\n const sdf = sg(maskRenderTarget.texture);\n const readSdf = new Float32Array(resolution * resolution);\n gl.readRenderTargetPixels(sdf, 0, 0, resolution, resolution, readSdf);\n // Get smallest value in sdf\n let min = Infinity;\n for (let i = 0; i < readSdf.length; i++) {\n if (readSdf[i] < min) min = readSdf[i];\n }\n min = -min;\n ref.current.size = min;\n ref.current.sdf = sdf.texture;\n gl.setRenderTarget(null);\n }\n }, [resolution, blur]);\n React.useImperativeHandle(fref, () => ref.current);\n const compute = React.useCallback((event, state, previous) => {\n var _ref$current2;\n if (!parent.current) return false;\n state.pointer.set(event.offsetX / state.size.width * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1);\n state.raycaster.setFromCamera(state.pointer, state.camera);\n if (((_ref$current2 = ref.current) == null ? void 0 : _ref$current2.blend) === 0) {\n // We run a quick check against the parent, if it isn't hit there's no need to raycast at all\n const [intersection] = state.raycaster.intersectObject(parent.current);\n if (!intersection) {\n // Cancel out the raycast camera if the parent mesh isn't hit\n state.raycaster.camera = undefined;\n return false;\n }\n }\n }, []);\n return /*#__PURE__*/React.createElement(\"portalMaterialImpl\", _extends({\n ref: ref,\n blur: blur,\n blend: 0,\n resolution: [size.width * viewport.dpr, size.height * viewport.dpr],\n attach: \"material\"\n }, props), /*#__PURE__*/React.createElement(RenderTexture, {\n attach: \"map\",\n frames: visible ? Infinity : 0,\n eventPriority: eventPriority,\n renderPriority: renderPriority,\n compute: compute\n }, children, /*#__PURE__*/React.createElement(ManagePortalScene, {\n events: events,\n rootScene: scene,\n priority: priority,\n material: ref,\n worldUnits: worldUnits\n })));\n});\nfunction ManagePortalScene({\n events = undefined,\n rootScene,\n material,\n priority,\n worldUnits\n}) {\n const scene = useThree(state => state.scene);\n const setEvents = useThree(state => state.setEvents);\n const buffer1 = useFBO();\n const buffer2 = useFBO();\n React.useLayoutEffect(() => {\n scene.matrixAutoUpdate = false;\n }, []);\n React.useEffect(() => {\n if (events !== undefined) setEvents({\n enabled: events\n });\n }, [events]);\n const [quad, blend] = React.useMemo(() => {\n // This fullscreen-quad is used to blend the two textures\n const blend = {\n value: 0\n };\n const quad = new FullScreenQuad(new THREE.ShaderMaterial({\n uniforms: {\n a: {\n value: buffer1.texture\n },\n b: {\n value: buffer2.texture\n },\n blend\n },\n vertexShader: /*glsl*/`\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }`,\n fragmentShader: /*glsl*/`\n uniform sampler2D a;\n uniform sampler2D b;\n uniform float blend;\n varying vec2 vUv;\n #include <packing>\n void main() {\n vec4 ta = texture2D(a, vUv);\n vec4 tb = texture2D(b, vUv);\n gl_FragColor = mix(tb, ta, blend);\n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }`\n }));\n return [quad, blend];\n }, []);\n useFrame(state => {\n var _material$current;\n let parent = material == null || (_material$current = material.current) == null || (_material$current = _material$current.__r3f.parent) == null ? void 0 : _material$current.object;\n if (parent) {\n // Move portal contents along with the parent if worldUnits is true\n if (!worldUnits) {\n var _material$current2;\n // If the portal renders exclusively the original scene needs to be updated\n if (priority && ((_material$current2 = material.current) == null ? void 0 : _material$current2.blend) === 1) parent.updateWorldMatrix(true, false);\n scene.matrixWorld.copy(parent.matrixWorld);\n } else scene.matrixWorld.identity();\n\n // This bit is only necessary if the portal is blended, now it has a render-priority\n // and will take over the render loop\n if (priority) {\n var _material$current3, _material$current4, _material$current5;\n if (((_material$current3 = material.current) == null ? void 0 : _material$current3.blend) > 0 && ((_material$current4 = material.current) == null ? void 0 : _material$current4.blend) < 1) {\n // If blend is ongoing (> 0 and < 1) then we need to render both the root scene\n // and the portal scene, both will then be mixed in the quad from above\n blend.value = material.current.blend;\n state.gl.setRenderTarget(buffer1);\n state.gl.render(scene, state.camera);\n state.gl.setRenderTarget(buffer2);\n state.gl.render(rootScene, state.camera);\n state.gl.setRenderTarget(null);\n quad.render(state.gl);\n } else if (((_material$current5 = material.current) == null ? void 0 : _material$current5.blend) === 1) {\n // However if blend is 1 we only need to render the portal scene\n state.gl.render(scene, state.camera);\n }\n }\n }\n }, priority);\n return /*#__PURE__*/React.createElement(React.Fragment, null);\n}\nconst makeSDFGenerator = (clientWidth, clientHeight, renderer) => {\n let finalTarget = new THREE.WebGLRenderTarget(clientWidth, clientHeight, {\n minFilter: THREE.LinearMipmapLinearFilter,\n magFilter: THREE.LinearFilter,\n type: THREE.FloatType,\n format: THREE.RedFormat,\n generateMipmaps: true\n });\n let outsideRenderTarget = new THREE.WebGLRenderTarget(clientWidth, clientHeight, {\n minFilter: THREE.NearestFilter,\n magFilter: THREE.NearestFilter\n });\n let insideRenderTarget = new THREE.WebGLRenderTarget(clientWidth, clientHeight, {\n minFilter: THREE.NearestFilter,\n magFilter: THREE.NearestFilter\n });\n let outsideRenderTarget2 = new THREE.WebGLRenderTarget(clientWidth, clientHeight, {\n minFilter: THREE.NearestFilter,\n magFilter: THREE.NearestFilter\n });\n let insideRenderTarget2 = new THREE.WebGLRenderTarget(clientWidth, clientHeight, {\n minFilter: THREE.NearestFilter,\n magFilter: THREE.NearestFilter\n });\n let outsideRenderTargetFinal = new THREE.WebGLRenderTarget(clientWidth, clientHeight, {\n minFilter: THREE.NearestFilter,\n magFilter: THREE.NearestFilter,\n type: THREE.FloatType,\n format: THREE.RedFormat\n });\n let insideRenderTargetFinal = new THREE.WebGLRenderTarget(clientWidth, clientHeight, {\n minFilter: THREE.NearestFilter,\n magFilter: THREE.NearestFilter,\n type: THREE.FloatType,\n format: THREE.RedFormat\n });\n const uvRender = new FullScreenQuad(new THREE.ShaderMaterial({\n uniforms: {\n tex: {\n value: null\n }\n },\n vertexShader: /*glsl*/`\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }`,\n fragmentShader: /*glsl*/`\n uniform sampler2D tex;\n varying vec2 vUv;\n #include <packing>\n void main() {\n gl_FragColor = pack2HalfToRGBA(vUv * (round(texture2D(tex, vUv).x)));\n }`\n }));\n const uvRenderInside = new FullScreenQuad(new THREE.ShaderMaterial({\n uniforms: {\n tex: {\n value: null\n }\n },\n vertexShader: /*glsl*/`\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }`,\n fragmentShader: /*glsl*/`\n uniform sampler2D tex;\n varying vec2 vUv;\n #include <packing>\n void main() {\n gl_FragColor = pack2HalfToRGBA(vUv * (1.0 - round(texture2D(tex, vUv).x)));\n }`\n }));\n const jumpFloodRender = new FullScreenQuad(new THREE.ShaderMaterial({\n uniforms: {\n tex: {\n value: null\n },\n offset: {\n value: 0.0\n },\n level: {\n value: 0.0\n },\n maxSteps: {\n value: 0.0\n }\n },\n vertexShader: /*glsl*/`\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }`,\n fragmentShader: /*glsl*/`\n varying vec2 vUv;\n uniform sampler2D tex;\n uniform float offset;\n uniform float level;\n uniform float maxSteps;\n #include <packing>\n void main() {\n float closestDist = 9999999.9;\n vec2 closestPos = vec2(0.0);\n for (float x = -1.0; x <= 1.0; x += 1.0) {\n for (float y = -1.0; y <= 1.0; y += 1.0) {\n vec2 voffset = vUv;\n voffset += vec2(x, y) * vec2(${1 / clientWidth}, ${1 / clientHeight}) * offset;\n vec2 pos = unpackRGBATo2Half(texture2D(tex, voffset));\n float dist = distance(pos.xy, vUv);\n if(pos.x != 0.0 && pos.y != 0.0 && dist < closestDist) {\n closestDist = dist;\n closestPos = pos;\n }\n }\n }\n gl_FragColor = pack2HalfToRGBA(closestPos);\n }`\n }));\n const distanceFieldRender = new FullScreenQuad(new THREE.ShaderMaterial({\n uniforms: {\n tex: {\n value: null\n },\n size: {\n value: new THREE.Vector2(clientWidth, clientHeight)\n }\n },\n vertexShader: /*glsl*/`\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }`,\n fragmentShader: /*glsl*/`\n varying vec2 vUv;\n uniform sampler2D tex;\n uniform vec2 size;\n #include <packing>\n void main() {\n gl_FragColor = vec4(distance(size * unpackRGBATo2Half(texture2D(tex, vUv)), size * vUv), 0.0, 0.0, 0.0);\n }`\n }));\n const compositeRender = new FullScreenQuad(new THREE.ShaderMaterial({\n uniforms: {\n inside: {\n value: insideRenderTargetFinal.texture\n },\n outside: {\n value: outsideRenderTargetFinal.texture\n },\n tex: {\n value: null\n }\n },\n vertexShader: /*glsl*/`\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }`,\n fragmentShader: /*glsl*/`\n varying vec2 vUv;\n uniform sampler2D inside;\n uniform sampler2D outside;\n uniform sampler2D tex;\n #include <packing>\n void main() {\n float i = texture2D(inside, vUv).x;\n float o =texture2D(outside, vUv).x;\n if (texture2D(tex, vUv).x == 0.0) {\n gl_FragColor = vec4(o, 0.0, 0.0, 0.0);\n } else {\n gl_FragColor = vec4(-i, 0.0, 0.0, 0.0);\n }\n }`\n }));\n return image => {\n let ft = finalTarget;\n image.minFilter = THREE.NearestFilter;\n image.magFilter = THREE.NearestFilter;\n uvRender.material.uniforms.tex.value = image;\n renderer.setRenderTarget(outsideRenderTarget);\n uvRender.render(renderer);\n const passes = Math.ceil(Math.log(Math.max(clientWidth, clientHeight)) / Math.log(2.0));\n let lastTarget = outsideRenderTarget;\n let target = null;\n for (let i = 0; i < passes; i++) {\n const offset = Math.pow(2, passes - i - 1);\n target = lastTarget === outsideRenderTarget ? outsideRenderTarget2 : outsideRenderTarget;\n jumpFloodRender.material.uniforms.level.value = i;\n jumpFloodRender.material.uniforms.maxSteps.value = passes;\n jumpFloodRender.material.uniforms.offset.value = offset;\n jumpFloodRender.material.uniforms.tex.value = lastTarget.texture;\n renderer.setRenderTarget(target);\n jumpFloodRender.render(renderer);\n lastTarget = target;\n }\n renderer.setRenderTarget(outsideRenderTargetFinal);\n distanceFieldRender.material.uniforms.tex.value = target.texture;\n distanceFieldRender.render(renderer);\n uvRenderInside.material.uniforms.tex.value = image;\n renderer.setRenderTarget(insideRenderTarget);\n uvRenderInside.render(renderer);\n lastTarget = insideRenderTarget;\n for (let i = 0; i < passes; i++) {\n const offset = Math.pow(2, passes - i - 1);\n target = lastTarget === insideRenderTarget ? insideRenderTarget2 : insideRenderTarget;\n jumpFloodRender.material.uniforms.level.value = i;\n jumpFloodRender.material.uniforms.maxSteps.value = passes;\n jumpFloodRender.material.uniforms.offset.value = offset;\n jumpFloodRender.material.uniforms.tex.value = lastTarget.texture;\n renderer.setRenderTarget(target);\n jumpFloodRender.render(renderer);\n lastTarget = target;\n }\n renderer.setRenderTarget(insideRenderTargetFinal);\n distanceFieldRender.material.uniforms.tex.value = target.texture;\n distanceFieldRender.render(renderer);\n renderer.setRenderTarget(ft);\n compositeRender.material.uniforms.tex.value = image;\n compositeRender.render(renderer);\n renderer.setRenderTarget(null);\n return ft;\n };\n};\n\nexport { MeshPortalMaterial };\n","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const destroy = () => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected.\"\n );\n }\n listeners.clear();\n };\n const api = { setState, getState, getInitialState, subscribe, destroy };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\nvar vanilla = (createState) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] Default export is deprecated. Instead use import { createStore } from 'zustand/vanilla'.\"\n );\n }\n return createStore(createState);\n};\n\nexport { createStore, vanilla as default };\n","import { createStore } from 'zustand/vanilla';\nexport * from 'zustand/vanilla';\nimport ReactExports from 'react';\nimport useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector.js';\n\nconst { useDebugValue } = ReactExports;\nconst { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports;\nlet didWarnAboutEqualityFn = false;\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity, equalityFn) {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && equalityFn && !didWarnAboutEqualityFn) {\n console.warn(\n \"[DEPRECATED] Use `createWithEqualityFn` instead of `create` or use `useStoreWithEqualityFn` instead of `useStore`. They can be imported from 'zustand/traditional'. https://github.com/pmndrs/zustand/discussions/1937\"\n );\n didWarnAboutEqualityFn = true;\n }\n const slice = useSyncExternalStoreWithSelector(\n api.subscribe,\n api.getState,\n api.getServerState || api.getInitialState,\n selector,\n equalityFn\n );\n useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && typeof createState !== \"function\") {\n console.warn(\n \"[DEPRECATED] Passing a vanilla store will be unsupported in a future version. Instead use `import { useStore } from 'zustand'`.\"\n );\n }\n const api = typeof createState === \"function\" ? createStore(createState) : createState;\n const useBoundStore = (selector, equalityFn) => useStore(api, selector, equalityFn);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = (createState) => createState ? createImpl(createState) : createImpl;\nvar react = (createState) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] Default export is deprecated. Instead use `import { create } from 'zustand'`.\"\n );\n }\n return create(createState);\n};\n\nexport { create, react as default, useStore };\n","import React from 'react';\nimport { create } from 'zustand';\n\nvar _window$document, _window$navigator;\n/**\n * An SSR-friendly useLayoutEffect.\n *\n * React currently throws a warning when using useLayoutEffect on the server.\n * To get around it, we can conditionally useEffect on the server (no-op) and\n * useLayoutEffect elsewhere.\n *\n * @see https://github.com/facebook/react/issues/14927\n */\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' && ((_window$document = window.document) != null && _window$document.createElement || ((_window$navigator = window.navigator) == null ? void 0 : _window$navigator.product) === 'ReactNative') ? React.useLayoutEffect : React.useEffect;\n\nfunction tunnel() {\n const useStore = create(set => ({\n current: new Array(),\n version: 0,\n set\n }));\n return {\n In: ({\n children\n }) => {\n const set = useStore(state => state.set);\n const version = useStore(state => state.version);\n /* When this component mounts, we increase the store's version number.\n This will cause all existing rats to re-render (just like if the Out component\n were mapping items to a list.) The re-rendering will cause the final \n order of rendered components to match what the user is expecting. */\n\n useIsomorphicLayoutEffect(() => {\n set(state => ({\n version: state.version + 1\n }));\n }, []);\n /* Any time the children _or_ the store's version number change, insert\n the specified React children into the list of rats. */\n\n useIsomorphicLayoutEffect(() => {\n set(({\n current\n }) => ({\n current: [...current, children]\n }));\n return () => set(({\n current\n }) => ({\n current: current.filter(c => c !== children)\n }));\n }, [children, version]);\n return null;\n },\n Out: () => {\n const current = useStore(state => state.current);\n return /*#__PURE__*/React.createElement(React.Fragment, null, current);\n }\n };\n}\n\nexport { tunnel as default };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { context, useThree, createPortal, useFrame } from '@react-three/fiber';\nimport tunnel from 'tunnel-rat';\n\nconst isOrthographicCamera = def => def && def.isOrthographicCamera;\nconst col = /* @__PURE__ */new THREE.Color();\nconst tracked = /* @__PURE__ */tunnel();\nfunction computeContainerPosition(canvasSize, trackRect) {\n const {\n right,\n top,\n left: trackLeft,\n bottom: trackBottom,\n width,\n height\n } = trackRect;\n const isOffscreen = trackRect.bottom < 0 || top > canvasSize.height || right < 0 || trackRect.left > canvasSize.width;\n const canvasBottom = canvasSize.top + canvasSize.height;\n const bottom = canvasBottom - trackBottom;\n const left = trackLeft - canvasSize.left;\n return {\n position: {\n width,\n height,\n left,\n top,\n bottom,\n right\n },\n isOffscreen\n };\n}\nfunction prepareSkissor(state, {\n left,\n bottom,\n width,\n height\n}) {\n let autoClear;\n const aspect = width / height;\n if (isOrthographicCamera(state.camera)) {\n if (!state.camera.manual) {\n if (state.camera.left !== width / -2 || state.camera.right !== width / 2 || state.camera.top !== height / 2 || state.camera.bottom !== height / -2) {\n Object.assign(state.camera, {\n left: width / -2,\n right: width / 2,\n top: height / 2,\n bottom: height / -2\n });\n state.camera.updateProjectionMatrix();\n }\n } else {\n state.camera.updateProjectionMatrix();\n }\n } else if (state.camera.aspect !== aspect) {\n state.camera.aspect = aspect;\n state.camera.updateProjectionMatrix();\n }\n autoClear = state.gl.autoClear;\n state.gl.autoClear = false;\n state.gl.setViewport(left, bottom, width, height);\n state.gl.setScissor(left, bottom, width, height);\n state.gl.setScissorTest(true);\n return autoClear;\n}\nfunction finishSkissor(state, autoClear) {\n // Restore the default state\n state.gl.setScissorTest(false);\n state.gl.autoClear = autoClear;\n}\nfunction clear(state) {\n state.gl.getClearColor(col);\n state.gl.setClearColor(col, state.gl.getClearAlpha());\n state.gl.clear(true, true);\n}\nfunction Container({\n visible = true,\n canvasSize,\n scene,\n index,\n children,\n frames,\n rect,\n track\n}) {\n const rootState = useThree();\n const [isOffscreen, setOffscreen] = React.useState(false);\n let frameCount = 0;\n useFrame(state => {\n if (frames === Infinity || frameCount <= frames) {\n var _track$current;\n if (track) rect.current = (_track$current = track.current) == null ? void 0 : _track$current.getBoundingClientRect();\n frameCount++;\n }\n if (rect.current) {\n const {\n position,\n isOffscreen: _isOffscreen\n } = computeContainerPosition(canvasSize, rect.current);\n if (isOffscreen !== _isOffscreen) setOffscreen(_isOffscreen);\n if (visible && !isOffscreen && rect.current) {\n const autoClear = prepareSkissor(state, position);\n // When children are present render the portalled scene, otherwise the default scene\n state.gl.render(children ? state.scene : scene, state.camera);\n finishSkissor(state, autoClear);\n }\n }\n }, index);\n React.useLayoutEffect(() => {\n const curRect = rect.current;\n if (curRect && (!visible || !isOffscreen)) {\n // If the view is not visible clear it once, but stop rendering afterwards!\n const {\n position\n } = computeContainerPosition(canvasSize, curRect);\n const autoClear = prepareSkissor(rootState, position);\n clear(rootState);\n finishSkissor(rootState, autoClear);\n }\n }, [visible, isOffscreen]);\n React.useEffect(() => {\n if (!track) return;\n const curRect = rect.current;\n // Connect the event layer to the tracking element\n const old = rootState.get().events.connected;\n rootState.setEvents({\n connected: track.current\n });\n return () => {\n if (curRect) {\n const {\n position\n } = computeContainerPosition(canvasSize, curRect);\n const autoClear = prepareSkissor(rootState, position);\n clear(rootState);\n finishSkissor(rootState, autoClear);\n }\n rootState.setEvents({\n connected: old\n });\n };\n }, [track]);\n return /*#__PURE__*/React.createElement(React.Fragment, null, children, /*#__PURE__*/React.createElement(\"group\", {\n onPointerOver: () => null\n }));\n}\nconst CanvasView = /* @__PURE__ */React.forwardRef(({\n track,\n visible = true,\n index = 1,\n id,\n style,\n className,\n frames = Infinity,\n children,\n ...props\n}, fref) => {\n var _rect$current, _rect$current2, _rect$current3, _rect$current4;\n const rect = React.useRef(null);\n const {\n size,\n scene\n } = useThree();\n const [virtualScene] = React.useState(() => new THREE.Scene());\n const [ready, toggle] = React.useReducer(() => true, false);\n const compute = React.useCallback((event, state) => {\n if (rect.current && track && track.current && event.target === track.current) {\n const {\n width,\n height,\n left,\n top\n } = rect.current;\n const x = event.clientX - left;\n const y = event.clientY - top;\n state.pointer.set(x / width * 2 - 1, -(y / height) * 2 + 1);\n state.raycaster.setFromCamera(state.pointer, state.camera);\n }\n }, [rect, track]);\n React.useEffect(() => {\n var _track$current2;\n // We need the tracking elements bounds beforehand in order to inject it into the portal\n if (track) rect.current = (_track$current2 = track.current) == null ? void 0 : _track$current2.getBoundingClientRect();\n // And now we can proceed\n toggle();\n }, [track]);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: fref\n }, props), ready && createPortal(/*#__PURE__*/React.createElement(Container, {\n visible: visible,\n canvasSize: size,\n frames: frames,\n scene: scene,\n track: track,\n rect: rect,\n index: index\n }, children), virtualScene, {\n events: {\n compute,\n priority: index\n },\n size: {\n width: (_rect$current = rect.current) == null ? void 0 : _rect$current.width,\n height: (_rect$current2 = rect.current) == null ? void 0 : _rect$current2.height,\n // @ts-ignore\n top: (_rect$current3 = rect.current) == null ? void 0 : _rect$current3.top,\n // @ts-ignore\n left: (_rect$current4 = rect.current) == null ? void 0 : _rect$current4.left\n }\n }));\n});\nconst HtmlView = /* @__PURE__ */React.forwardRef(({\n as: El = 'div',\n id,\n visible,\n className,\n style,\n index = 1,\n track,\n frames = Infinity,\n children,\n ...props\n}, fref) => {\n const uuid = React.useId();\n const ref = React.useRef(null);\n React.useImperativeHandle(fref, () => ref.current);\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(El, _extends({\n ref: ref,\n id: id,\n className: className,\n style: style\n }, props)), /*#__PURE__*/React.createElement(tracked.In, null, /*#__PURE__*/React.createElement(CanvasView, {\n visible: visible,\n key: uuid,\n track: ref,\n frames: frames,\n index: index\n }, children)));\n});\nconst View = /* @__PURE__ */(() => {\n const _View = /*#__PURE__*/React.forwardRef((props, fref) => {\n // If we're inside a canvas we should be able to access the context store\n const store = React.useContext(context);\n // If that's not the case we render a tunnel\n if (!store) return /*#__PURE__*/React.createElement(HtmlView, _extends({\n ref: fref\n }, props));\n // Otherwise a plain canvas-view\n else return /*#__PURE__*/React.createElement(CanvasView, _extends({\n ref: fref\n }, props));\n });\n _View.Port = () => /*#__PURE__*/React.createElement(tracked.Out, null);\n return _View;\n})();\n\nexport { View };\n","import * as React from 'react';\n\nconst context = /* @__PURE__ */React.createContext(null);\n\nexport { context };\n","import * as React from 'react';\nimport * as THREE from 'three';\nimport { useThree } from '@react-three/fiber';\nimport { Line } from '../../core/Line.js';\nimport { Html } from '../Html.js';\nimport { context } from './context.js';\n\nconst vec1 = /* @__PURE__ */new THREE.Vector3();\nconst vec2 = /* @__PURE__ */new THREE.Vector3();\nconst calculateOffset = (clickPoint, normal, rayStart, rayDir) => {\n const e1 = normal.dot(normal);\n const e2 = normal.dot(clickPoint) - normal.dot(rayStart);\n const e3 = normal.dot(rayDir);\n if (e3 === 0) {\n return -e2 / e1;\n }\n vec1.copy(rayDir).multiplyScalar(e1 / e3).sub(normal);\n vec2.copy(rayDir).multiplyScalar(e2 / e3).add(rayStart).sub(clickPoint);\n const offset = -vec1.dot(vec2) / vec1.dot(vec1);\n return offset;\n};\nconst upV = /* @__PURE__ */new THREE.Vector3(0, 1, 0);\nconst offsetMatrix = /* @__PURE__ */new THREE.Matrix4();\nconst AxisArrow = ({\n direction,\n axis\n}) => {\n const {\n translation,\n translationLimits,\n annotations,\n annotationsClass,\n depthTest,\n scale,\n lineWidth,\n fixed,\n axisColors,\n hoveredColor,\n opacity,\n renderOrder,\n onDragStart,\n onDrag,\n onDragEnd,\n userData\n } = React.useContext(context);\n const camControls = useThree(state => state.controls);\n const divRef = React.useRef(null);\n const objRef = React.useRef(null);\n const clickInfo = React.useRef(null);\n const offset0 = React.useRef(0);\n const [isHovered, setIsHovered] = React.useState(false);\n const onPointerDown = React.useCallback(e => {\n if (annotations) {\n divRef.current.innerText = `${translation.current[axis].toFixed(2)}`;\n divRef.current.style.display = 'block';\n }\n e.stopPropagation();\n const rotation = new THREE.Matrix4().extractRotation(objRef.current.matrixWorld);\n const clickPoint = e.point.clone();\n const origin = new THREE.Vector3().setFromMatrixPosition(objRef.current.matrixWorld);\n const dir = direction.clone().applyMatrix4(rotation).normalize();\n clickInfo.current = {\n clickPoint,\n dir\n };\n offset0.current = translation.current[axis];\n onDragStart({\n component: 'Arrow',\n axis,\n origin,\n directions: [dir]\n });\n camControls && (camControls.enabled = false);\n // @ts-ignore - setPointerCapture is not in the type definition\n e.target.setPointerCapture(e.pointerId);\n }, [annotations, direction, camControls, onDragStart, translation, axis]);\n const onPointerMove = React.useCallback(e => {\n e.stopPropagation();\n if (!isHovered) setIsHovered(true);\n if (clickInfo.current) {\n const {\n clickPoint,\n dir\n } = clickInfo.current;\n const [min, max] = (translationLimits == null ? void 0 : translationLimits[axis]) || [undefined, undefined];\n let offset = calculateOffset(clickPoint, dir, e.ray.origin, e.ray.direction);\n if (min !== undefined) {\n offset = Math.max(offset, min - offset0.current);\n }\n if (max !== undefined) {\n offset = Math.min(offset, max - offset0.current);\n }\n translation.current[axis] = offset0.current + offset;\n if (annotations) {\n divRef.current.innerText = `${translation.current[axis].toFixed(2)}`;\n }\n offsetMatrix.makeTranslation(dir.x * offset, dir.y * offset, dir.z * offset);\n onDrag(offsetMatrix);\n }\n }, [annotations, onDrag, isHovered, translation, translationLimits, axis]);\n const onPointerUp = React.useCallback(e => {\n if (annotations) {\n divRef.current.style.display = 'none';\n }\n e.stopPropagation();\n clickInfo.current = null;\n onDragEnd();\n camControls && (camControls.enabled = true);\n // @ts-ignore - releasePointerCapture & PointerEvent#pointerId is not in the type definition\n e.target.releasePointerCapture(e.pointerId);\n }, [annotations, camControls, onDragEnd]);\n const onPointerOut = React.useCallback(e => {\n e.stopPropagation();\n setIsHovered(false);\n }, []);\n const {\n cylinderLength,\n coneWidth,\n coneLength,\n matrixL\n } = React.useMemo(() => {\n const coneWidth = fixed ? lineWidth / scale * 1.6 : scale / 20;\n const coneLength = fixed ? 0.2 : scale / 5;\n const cylinderLength = fixed ? 1 - coneLength : scale - coneLength;\n const quaternion = new THREE.Quaternion().setFromUnitVectors(upV, direction.clone().normalize());\n const matrixL = new THREE.Matrix4().makeRotationFromQuaternion(quaternion);\n return {\n cylinderLength,\n coneWidth,\n coneLength,\n matrixL\n };\n }, [direction, scale, lineWidth, fixed]);\n const color_ = isHovered ? hoveredColor : axisColors[axis];\n return /*#__PURE__*/React.createElement(\"group\", {\n ref: objRef\n }, /*#__PURE__*/React.createElement(\"group\", {\n matrix: matrixL,\n matrixAutoUpdate: false,\n onPointerDown: onPointerDown,\n onPointerMove: onPointerMove,\n onPointerUp: onPointerUp,\n onPointerOut: onPointerOut\n }, annotations && /*#__PURE__*/React.createElement(Html, {\n position: [0, -coneLength, 0]\n }, /*#__PURE__*/React.createElement(\"div\", {\n style: {\n display: 'none',\n background: '#151520',\n color: 'white',\n padding: '6px 8px',\n borderRadius: 7,\n whiteSpace: 'nowrap'\n },\n className: annotationsClass,\n ref: divRef\n })), /*#__PURE__*/React.createElement(\"mesh\", {\n visible: false,\n position: [0, (cylinderLength + coneLength) / 2.0, 0],\n userData: userData\n }, /*#__PURE__*/React.createElement(\"cylinderGeometry\", {\n args: [coneWidth * 1.4, coneWidth * 1.4, cylinderLength + coneLength, 8, 1]\n })), /*#__PURE__*/React.createElement(Line, {\n transparent: true,\n raycast: () => null,\n depthTest: depthTest,\n points: [0, 0, 0, 0, cylinderLength, 0],\n lineWidth: lineWidth,\n side: THREE.DoubleSide,\n color: color_,\n opacity: opacity,\n polygonOffset: true,\n renderOrder: renderOrder,\n polygonOffsetFactor: -10,\n fog: false\n }), /*#__PURE__*/React.createElement(\"mesh\", {\n raycast: () => null,\n position: [0, cylinderLength + coneLength / 2.0, 0],\n renderOrder: renderOrder\n }, /*#__PURE__*/React.createElement(\"coneGeometry\", {\n args: [coneWidth, coneLength, 24, 1]\n }), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n transparent: true,\n depthTest: depthTest,\n color: color_,\n opacity: opacity,\n polygonOffset: true,\n polygonOffsetFactor: -10,\n fog: false\n }))));\n};\n\nexport { AxisArrow, calculateOffset };\n","import * as React from 'react';\nimport * as THREE from 'three';\nimport { useThree } from '@react-three/fiber';\nimport { Line } from '../../core/Line.js';\nimport { Html } from '../Html.js';\nimport { context } from './context.js';\n\nconst clickDir = /* @__PURE__ */new THREE.Vector3();\nconst intersectionDir = /* @__PURE__ */new THREE.Vector3();\nconst toDegrees = radians => radians * 180 / Math.PI;\nconst toRadians = degrees => degrees * Math.PI / 180;\nconst calculateAngle = (clickPoint, intersectionPoint, origin, e1, e2) => {\n clickDir.copy(clickPoint).sub(origin);\n intersectionDir.copy(intersectionPoint).sub(origin);\n const dote1e1 = e1.dot(e1);\n const dote2e2 = e2.dot(e2);\n const uClick = clickDir.dot(e1) / dote1e1;\n const vClick = clickDir.dot(e2) / dote2e2;\n const uIntersection = intersectionDir.dot(e1) / dote1e1;\n const vIntersection = intersectionDir.dot(e2) / dote2e2;\n const angleClick = Math.atan2(vClick, uClick);\n const angleIntersection = Math.atan2(vIntersection, uIntersection);\n return angleIntersection - angleClick;\n};\nconst fmod = (num, denom) => {\n let k = Math.floor(num / denom);\n k = k < 0 ? k + 1 : k;\n return num - k * denom;\n};\nconst minimizeAngle = angle => {\n let result = fmod(angle, 2 * Math.PI);\n if (Math.abs(result) < 1e-6) {\n return 0.0;\n }\n if (result < 0.0) {\n result += 2 * Math.PI;\n }\n return result;\n};\nconst rotMatrix = /* @__PURE__ */new THREE.Matrix4();\nconst posNew = /* @__PURE__ */new THREE.Vector3();\nconst ray = /* @__PURE__ */new THREE.Ray();\nconst intersection = /* @__PURE__ */new THREE.Vector3();\nconst AxisRotator = ({\n dir1,\n dir2,\n axis\n}) => {\n const {\n rotationLimits,\n annotations,\n annotationsClass,\n depthTest,\n scale,\n lineWidth,\n fixed,\n axisColors,\n hoveredColor,\n renderOrder,\n opacity,\n onDragStart,\n onDrag,\n onDragEnd,\n userData\n } = React.useContext(context);\n const camControls = useThree(state => state.controls);\n const divRef = React.useRef(null);\n const objRef = React.useRef(null);\n const angle0 = React.useRef(0);\n const angle = React.useRef(0);\n const clickInfo = React.useRef(null);\n const [isHovered, setIsHovered] = React.useState(false);\n const onPointerDown = React.useCallback(e => {\n if (annotations) {\n divRef.current.innerText = `${toDegrees(angle.current).toFixed(0)}º`;\n divRef.current.style.display = 'block';\n }\n e.stopPropagation();\n const clickPoint = e.point.clone();\n const origin = new THREE.Vector3().setFromMatrixPosition(objRef.current.matrixWorld);\n const e1 = new THREE.Vector3().setFromMatrixColumn(objRef.current.matrixWorld, 0).normalize();\n const e2 = new THREE.Vector3().setFromMatrixColumn(objRef.current.matrixWorld, 1).normalize();\n const normal = new THREE.Vector3().setFromMatrixColumn(objRef.current.matrixWorld, 2).normalize();\n const plane = new THREE.Plane().setFromNormalAndCoplanarPoint(normal, origin);\n clickInfo.current = {\n clickPoint,\n origin,\n e1,\n e2,\n normal,\n plane\n };\n onDragStart({\n component: 'Rotator',\n axis,\n origin,\n directions: [e1, e2, normal]\n });\n camControls && (camControls.enabled = false);\n // @ts-ignore\n e.target.setPointerCapture(e.pointerId);\n }, [annotations, camControls, onDragStart, axis]);\n const onPointerMove = React.useCallback(e => {\n e.stopPropagation();\n if (!isHovered) setIsHovered(true);\n if (clickInfo.current) {\n const {\n clickPoint,\n origin,\n e1,\n e2,\n normal,\n plane\n } = clickInfo.current;\n const [min, max] = (rotationLimits == null ? void 0 : rotationLimits[axis]) || [undefined, undefined];\n ray.copy(e.ray);\n ray.intersectPlane(plane, intersection);\n ray.direction.negate();\n ray.intersectPlane(plane, intersection);\n let deltaAngle = calculateAngle(clickPoint, intersection, origin, e1, e2);\n let degrees = toDegrees(deltaAngle);\n\n // @ts-ignore\n if (e.shiftKey) {\n degrees = Math.round(degrees / 10) * 10;\n deltaAngle = toRadians(degrees);\n }\n if (min !== undefined && max !== undefined && max - min < 2 * Math.PI) {\n deltaAngle = minimizeAngle(deltaAngle);\n deltaAngle = deltaAngle > Math.PI ? deltaAngle - 2 * Math.PI : deltaAngle;\n deltaAngle = THREE.MathUtils.clamp(deltaAngle, min - angle0.current, max - angle0.current);\n angle.current = angle0.current + deltaAngle;\n } else {\n angle.current = minimizeAngle(angle0.current + deltaAngle);\n angle.current = angle.current > Math.PI ? angle.current - 2 * Math.PI : angle.current;\n }\n if (annotations) {\n degrees = toDegrees(angle.current);\n divRef.current.innerText = `${degrees.toFixed(0)}º`;\n }\n rotMatrix.makeRotationAxis(normal, deltaAngle);\n posNew.copy(origin).applyMatrix4(rotMatrix).sub(origin).negate();\n rotMatrix.setPosition(posNew);\n onDrag(rotMatrix);\n }\n }, [annotations, onDrag, isHovered, rotationLimits, axis]);\n const onPointerUp = React.useCallback(e => {\n if (annotations) {\n divRef.current.style.display = 'none';\n }\n e.stopPropagation();\n angle0.current = angle.current;\n clickInfo.current = null;\n onDragEnd();\n camControls && (camControls.enabled = true);\n // @ts-ignore\n e.target.releasePointerCapture(e.pointerId);\n }, [annotations, camControls, onDragEnd]);\n const onPointerOut = React.useCallback(e => {\n e.stopPropagation();\n setIsHovered(false);\n }, []);\n const matrixL = React.useMemo(() => {\n const dir1N = dir1.clone().normalize();\n const dir2N = dir2.clone().normalize();\n return new THREE.Matrix4().makeBasis(dir1N, dir2N, dir1N.clone().cross(dir2N));\n }, [dir1, dir2]);\n const r = fixed ? 0.65 : scale * 0.65;\n const arc = React.useMemo(() => {\n const segments = 32;\n const points = [];\n for (let j = 0; j <= segments; j++) {\n const angle = j * (Math.PI / 2) / segments;\n points.push(new THREE.Vector3(Math.cos(angle) * r, Math.sin(angle) * r, 0));\n }\n return points;\n }, [r]);\n return /*#__PURE__*/React.createElement(\"group\", {\n ref: objRef,\n onPointerDown: onPointerDown,\n onPointerMove: onPointerMove,\n onPointerUp: onPointerUp,\n onPointerOut: onPointerOut,\n matrix: matrixL,\n matrixAutoUpdate: false\n }, annotations && /*#__PURE__*/React.createElement(Html, {\n position: [r, r, 0]\n }, /*#__PURE__*/React.createElement(\"div\", {\n style: {\n display: 'none',\n background: '#151520',\n color: 'white',\n padding: '6px 8px',\n borderRadius: 7,\n whiteSpace: 'nowrap'\n },\n className: annotationsClass,\n ref: divRef\n })), /*#__PURE__*/React.createElement(Line, {\n points: arc,\n lineWidth: lineWidth * 4,\n visible: false,\n userData: userData\n }), /*#__PURE__*/React.createElement(Line, {\n transparent: true,\n raycast: () => null,\n depthTest: depthTest,\n points: arc,\n lineWidth: lineWidth,\n side: THREE.DoubleSide,\n color: isHovered ? hoveredColor : axisColors[axis],\n opacity: opacity,\n polygonOffset: true,\n polygonOffsetFactor: -10,\n renderOrder: renderOrder,\n fog: false\n }));\n};\n\nexport { AxisRotator };\n","import * as React from 'react';\nimport * as THREE from 'three';\nimport { useThree } from '@react-three/fiber';\nimport { Line } from '../../core/Line.js';\nimport { Html } from '../Html.js';\nimport { context } from './context.js';\n\nconst decomposeIntoBasis = (e1, e2, offset) => {\n const i1 = Math.abs(e1.x) >= Math.abs(e1.y) && Math.abs(e1.x) >= Math.abs(e1.z) ? 0 : Math.abs(e1.y) >= Math.abs(e1.x) && Math.abs(e1.y) >= Math.abs(e1.z) ? 1 : 2;\n const e2DegrowthOrder = [0, 1, 2].sort((a, b) => Math.abs(e2.getComponent(b)) - Math.abs(e2.getComponent(a)));\n const i2 = i1 === e2DegrowthOrder[0] ? e2DegrowthOrder[1] : e2DegrowthOrder[0];\n const a1 = e1.getComponent(i1);\n const a2 = e1.getComponent(i2);\n const b1 = e2.getComponent(i1);\n const b2 = e2.getComponent(i2);\n const c1 = offset.getComponent(i1);\n const c2 = offset.getComponent(i2);\n const y = (c2 - c1 * (a2 / a1)) / (b2 - b1 * (a2 / a1));\n const x = (c1 - y * b1) / a1;\n return [x, y];\n};\nconst ray = /* @__PURE__ */new THREE.Ray();\nconst intersection = /* @__PURE__ */new THREE.Vector3();\nconst offsetMatrix = /* @__PURE__ */new THREE.Matrix4();\nconst PlaneSlider = ({\n dir1,\n dir2,\n axis\n}) => {\n const {\n translation,\n translationLimits,\n annotations,\n annotationsClass,\n depthTest,\n scale,\n lineWidth,\n fixed,\n axisColors,\n hoveredColor,\n opacity,\n renderOrder,\n onDragStart,\n onDrag,\n onDragEnd,\n userData\n } = React.useContext(context);\n const camControls = useThree(state => state.controls);\n const divRef = React.useRef(null);\n const objRef = React.useRef(null);\n const clickInfo = React.useRef(null);\n const offsetX0 = React.useRef(0);\n const offsetY0 = React.useRef(0);\n const [isHovered, setIsHovered] = React.useState(false);\n const onPointerDown = React.useCallback(e => {\n if (annotations) {\n divRef.current.innerText = `${translation.current[(axis + 1) % 3].toFixed(2)}, ${translation.current[(axis + 2) % 3].toFixed(2)}`;\n divRef.current.style.display = 'block';\n }\n e.stopPropagation();\n const clickPoint = e.point.clone();\n const origin = new THREE.Vector3().setFromMatrixPosition(objRef.current.matrixWorld);\n const e1 = new THREE.Vector3().setFromMatrixColumn(objRef.current.matrixWorld, 0).normalize();\n const e2 = new THREE.Vector3().setFromMatrixColumn(objRef.current.matrixWorld, 1).normalize();\n const normal = new THREE.Vector3().setFromMatrixColumn(objRef.current.matrixWorld, 2).normalize();\n const plane = new THREE.Plane().setFromNormalAndCoplanarPoint(normal, origin);\n clickInfo.current = {\n clickPoint,\n e1,\n e2,\n plane\n };\n offsetX0.current = translation.current[(axis + 1) % 3];\n offsetY0.current = translation.current[(axis + 2) % 3];\n onDragStart({\n component: 'Slider',\n axis,\n origin,\n directions: [e1, e2, normal]\n });\n camControls && (camControls.enabled = false);\n // @ts-ignore\n e.target.setPointerCapture(e.pointerId);\n }, [annotations, camControls, onDragStart, axis]);\n const onPointerMove = React.useCallback(e => {\n e.stopPropagation();\n if (!isHovered) setIsHovered(true);\n if (clickInfo.current) {\n const {\n clickPoint,\n e1,\n e2,\n plane\n } = clickInfo.current;\n const [minX, maxX] = (translationLimits == null ? void 0 : translationLimits[(axis + 1) % 3]) || [undefined, undefined];\n const [minY, maxY] = (translationLimits == null ? void 0 : translationLimits[(axis + 2) % 3]) || [undefined, undefined];\n ray.copy(e.ray);\n ray.intersectPlane(plane, intersection);\n ray.direction.negate();\n ray.intersectPlane(plane, intersection);\n intersection.sub(clickPoint);\n let [offsetX, offsetY] = decomposeIntoBasis(e1, e2, intersection);\n /* let offsetY = (intersection.y - (intersection.x * e1.y) / e1.x) / (e2.y - (e2.x * e1.y) / e1.x)\n let offsetX = (intersection.x - offsetY * e2.x) / e1.x */\n if (minX !== undefined) {\n offsetX = Math.max(offsetX, minX - offsetX0.current);\n }\n if (maxX !== undefined) {\n offsetX = Math.min(offsetX, maxX - offsetX0.current);\n }\n if (minY !== undefined) {\n offsetY = Math.max(offsetY, minY - offsetY0.current);\n }\n if (maxY !== undefined) {\n offsetY = Math.min(offsetY, maxY - offsetY0.current);\n }\n translation.current[(axis + 1) % 3] = offsetX0.current + offsetX;\n translation.current[(axis + 2) % 3] = offsetY0.current + offsetY;\n if (annotations) {\n divRef.current.innerText = `${translation.current[(axis + 1) % 3].toFixed(2)}, ${translation.current[(axis + 2) % 3].toFixed(2)}`;\n }\n offsetMatrix.makeTranslation(offsetX * e1.x + offsetY * e2.x, offsetX * e1.y + offsetY * e2.y, offsetX * e1.z + offsetY * e2.z);\n onDrag(offsetMatrix);\n }\n }, [annotations, onDrag, isHovered, translation, translationLimits, axis]);\n const onPointerUp = React.useCallback(e => {\n if (annotations) {\n divRef.current.style.display = 'none';\n }\n e.stopPropagation();\n clickInfo.current = null;\n onDragEnd();\n camControls && (camControls.enabled = true);\n // @ts-ignore\n e.target.releasePointerCapture(e.pointerId);\n }, [annotations, camControls, onDragEnd]);\n const onPointerOut = React.useCallback(e => {\n e.stopPropagation();\n setIsHovered(false);\n }, []);\n const matrixL = React.useMemo(() => {\n const dir1N = dir1.clone().normalize();\n const dir2N = dir2.clone().normalize();\n return new THREE.Matrix4().makeBasis(dir1N, dir2N, dir1N.clone().cross(dir2N));\n }, [dir1, dir2]);\n const pos1 = fixed ? 1 / 7 : scale / 7;\n const length = fixed ? 0.225 : scale * 0.225;\n const color = isHovered ? hoveredColor : axisColors[axis];\n const points = React.useMemo(() => [new THREE.Vector3(0, 0, 0), new THREE.Vector3(0, length, 0), new THREE.Vector3(length, length, 0), new THREE.Vector3(length, 0, 0), new THREE.Vector3(0, 0, 0)], [length]);\n return /*#__PURE__*/React.createElement(\"group\", {\n ref: objRef,\n matrix: matrixL,\n matrixAutoUpdate: false\n }, annotations && /*#__PURE__*/React.createElement(Html, {\n position: [0, 0, 0]\n }, /*#__PURE__*/React.createElement(\"div\", {\n style: {\n display: 'none',\n background: '#151520',\n color: 'white',\n padding: '6px 8px',\n borderRadius: 7,\n whiteSpace: 'nowrap'\n },\n className: annotationsClass,\n ref: divRef\n })), /*#__PURE__*/React.createElement(\"group\", {\n position: [pos1 * 1.7, pos1 * 1.7, 0]\n }, /*#__PURE__*/React.createElement(\"mesh\", {\n visible: true,\n onPointerDown: onPointerDown,\n onPointerMove: onPointerMove,\n onPointerUp: onPointerUp,\n onPointerOut: onPointerOut,\n scale: length,\n userData: userData,\n renderOrder: renderOrder\n }, /*#__PURE__*/React.createElement(\"planeGeometry\", null), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n transparent: true,\n depthTest: depthTest,\n color: color,\n polygonOffset: true,\n polygonOffsetFactor: -10,\n side: THREE.DoubleSide,\n fog: false\n })), /*#__PURE__*/React.createElement(Line, {\n position: [-length / 2, -length / 2, 0],\n transparent: true,\n depthTest: depthTest,\n points: points,\n lineWidth: lineWidth,\n color: color,\n opacity: opacity,\n polygonOffset: true,\n polygonOffsetFactor: -10,\n userData: userData,\n fog: false,\n renderOrder: renderOrder\n })));\n};\n\nexport { PlaneSlider };\n","import * as React from 'react';\nimport * as THREE from 'three';\nimport { useThree } from '@react-three/fiber';\nimport { Html } from '../Html.js';\nimport { context } from './context.js';\nimport { calculateScaleFactor } from '../../core/calculateScaleFactor.js';\n\nconst vec1 = /* @__PURE__ */new THREE.Vector3();\nconst vec2 = /* @__PURE__ */new THREE.Vector3();\nconst calculateOffset = (clickPoint, normal, rayStart, rayDir) => {\n const e1 = normal.dot(normal);\n const e2 = normal.dot(clickPoint) - normal.dot(rayStart);\n const e3 = normal.dot(rayDir);\n if (e3 === 0) {\n return -e2 / e1;\n }\n vec1.copy(rayDir).multiplyScalar(e1 / e3).sub(normal);\n vec2.copy(rayDir).multiplyScalar(e2 / e3).add(rayStart).sub(clickPoint);\n const offset = -vec1.dot(vec2) / vec1.dot(vec1);\n return offset;\n};\nconst upV = /* @__PURE__ */new THREE.Vector3(0, 1, 0);\nconst scaleV = /* @__PURE__ */new THREE.Vector3();\nconst scaleMatrix = /* @__PURE__ */new THREE.Matrix4();\nconst ScalingSphere = ({\n direction,\n axis\n}) => {\n const {\n scaleLimits,\n annotations,\n annotationsClass,\n depthTest,\n scale,\n lineWidth,\n fixed,\n axisColors,\n hoveredColor,\n opacity,\n renderOrder,\n onDragStart,\n onDrag,\n onDragEnd,\n userData\n } = React.useContext(context);\n const size = useThree(state => state.size);\n const camControls = useThree(state => state.controls);\n const divRef = React.useRef(null);\n const objRef = React.useRef(null);\n const meshRef = React.useRef(null);\n const scale0 = React.useRef(1);\n const scaleCur = React.useRef(1);\n const clickInfo = React.useRef(null);\n const [isHovered, setIsHovered] = React.useState(false);\n const position = fixed ? 1.2 : 1.2 * scale;\n const onPointerDown = React.useCallback(e => {\n if (annotations) {\n divRef.current.innerText = `${scaleCur.current.toFixed(2)}`;\n divRef.current.style.display = 'block';\n }\n e.stopPropagation();\n const rotation = new THREE.Matrix4().extractRotation(objRef.current.matrixWorld);\n const clickPoint = e.point.clone();\n const origin = new THREE.Vector3().setFromMatrixPosition(objRef.current.matrixWorld);\n const dir = direction.clone().applyMatrix4(rotation).normalize();\n const mPLG = objRef.current.matrixWorld.clone();\n const mPLGInv = mPLG.clone().invert();\n const offsetMultiplier = fixed ? 1 / calculateScaleFactor(objRef.current.getWorldPosition(vec1), scale, e.camera, size) : 1;\n clickInfo.current = {\n clickPoint,\n dir,\n mPLG,\n mPLGInv,\n offsetMultiplier\n };\n onDragStart({\n component: 'Sphere',\n axis,\n origin,\n directions: [dir]\n });\n camControls && (camControls.enabled = false);\n // @ts-ignore - setPointerCapture is not in the type definition\n e.target.setPointerCapture(e.pointerId);\n }, [annotations, camControls, direction, onDragStart, axis, fixed, scale, size]);\n const onPointerMove = React.useCallback(e => {\n e.stopPropagation();\n if (!isHovered) setIsHovered(true);\n if (clickInfo.current) {\n const {\n clickPoint,\n dir,\n mPLG,\n mPLGInv,\n offsetMultiplier\n } = clickInfo.current;\n const [min, max] = (scaleLimits == null ? void 0 : scaleLimits[axis]) || [1e-5, undefined]; // always limit the minimal value, since setting it very low might break the transform\n\n const offsetW = calculateOffset(clickPoint, dir, e.ray.origin, e.ray.direction);\n const offsetL = offsetW * offsetMultiplier;\n const offsetH = fixed ? offsetL : offsetL / scale;\n let upscale = Math.pow(2, offsetH * 0.2);\n\n // @ts-ignore\n if (e.shiftKey) {\n upscale = Math.round(upscale * 10) / 10;\n }\n upscale = Math.max(upscale, min / scale0.current);\n if (max !== undefined) {\n upscale = Math.min(upscale, max / scale0.current);\n }\n scaleCur.current = scale0.current * upscale;\n meshRef.current.position.set(0, position + offsetL, 0);\n if (annotations) {\n divRef.current.innerText = `${scaleCur.current.toFixed(2)}`;\n }\n scaleV.set(1, 1, 1);\n scaleV.setComponent(axis, upscale);\n scaleMatrix.makeScale(scaleV.x, scaleV.y, scaleV.z).premultiply(mPLG).multiply(mPLGInv);\n onDrag(scaleMatrix);\n }\n }, [annotations, position, onDrag, isHovered, scaleLimits, axis]);\n const onPointerUp = React.useCallback(e => {\n if (annotations) {\n divRef.current.style.display = 'none';\n }\n e.stopPropagation();\n scale0.current = scaleCur.current;\n clickInfo.current = null;\n meshRef.current.position.set(0, position, 0);\n onDragEnd();\n camControls && (camControls.enabled = true);\n // @ts-ignore - releasePointerCapture & PointerEvent#pointerId is not in the type definition\n e.target.releasePointerCapture(e.pointerId);\n }, [annotations, camControls, onDragEnd, position]);\n const onPointerOut = React.useCallback(e => {\n e.stopPropagation();\n setIsHovered(false);\n }, []);\n const {\n radius,\n matrixL\n } = React.useMemo(() => {\n const radius = fixed ? lineWidth / scale * 1.8 : scale / 22.5;\n const quaternion = new THREE.Quaternion().setFromUnitVectors(upV, direction.clone().normalize());\n const matrixL = new THREE.Matrix4().makeRotationFromQuaternion(quaternion);\n return {\n radius,\n matrixL\n };\n }, [direction, scale, lineWidth, fixed]);\n const color = isHovered ? hoveredColor : axisColors[axis];\n return /*#__PURE__*/React.createElement(\"group\", {\n ref: objRef\n }, /*#__PURE__*/React.createElement(\"group\", {\n matrix: matrixL,\n matrixAutoUpdate: false,\n onPointerDown: onPointerDown,\n onPointerMove: onPointerMove,\n onPointerUp: onPointerUp,\n onPointerOut: onPointerOut\n }, annotations && /*#__PURE__*/React.createElement(Html, {\n position: [0, position / 2, 0]\n }, /*#__PURE__*/React.createElement(\"div\", {\n style: {\n display: 'none',\n background: '#151520',\n color: 'white',\n padding: '6px 8px',\n borderRadius: 7,\n whiteSpace: 'nowrap'\n },\n className: annotationsClass,\n ref: divRef\n })), /*#__PURE__*/React.createElement(\"mesh\", {\n ref: meshRef,\n position: [0, position, 0],\n renderOrder: renderOrder,\n userData: userData\n }, /*#__PURE__*/React.createElement(\"sphereGeometry\", {\n args: [radius, 12, 12]\n }), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n transparent: true,\n depthTest: depthTest,\n color: color,\n opacity: opacity,\n polygonOffset: true,\n polygonOffsetFactor: -10\n }))));\n};\n\nexport { ScalingSphere, calculateOffset };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { AxisArrow } from './AxisArrow.js';\nimport { AxisRotator } from './AxisRotator.js';\nimport { PlaneSlider } from './PlaneSlider.js';\nimport { ScalingSphere } from './ScalingSphere.js';\nimport { context } from './context.js';\nimport { calculateScaleFactor } from '../../core/calculateScaleFactor.js';\n\nconst mL0 = /* @__PURE__ */new THREE.Matrix4();\nconst mW0 = /* @__PURE__ */new THREE.Matrix4();\nconst mP = /* @__PURE__ */new THREE.Matrix4();\nconst mPInv = /* @__PURE__ */new THREE.Matrix4();\nconst mW = /* @__PURE__ */new THREE.Matrix4();\nconst mL = /* @__PURE__ */new THREE.Matrix4();\nconst mL0Inv = /* @__PURE__ */new THREE.Matrix4();\nconst mdL = /* @__PURE__ */new THREE.Matrix4();\nconst mG = /* @__PURE__ */new THREE.Matrix4();\nconst bb = /* @__PURE__ */new THREE.Box3();\nconst bbObj = /* @__PURE__ */new THREE.Box3();\nconst vCenter = /* @__PURE__ */new THREE.Vector3();\nconst vSize = /* @__PURE__ */new THREE.Vector3();\nconst vAnchorOffset = /* @__PURE__ */new THREE.Vector3();\nconst vPosition = /* @__PURE__ */new THREE.Vector3();\nconst vScale = /* @__PURE__ */new THREE.Vector3();\nconst xDir = /* @__PURE__ */new THREE.Vector3(1, 0, 0);\nconst yDir = /* @__PURE__ */new THREE.Vector3(0, 1, 0);\nconst zDir = /* @__PURE__ */new THREE.Vector3(0, 0, 1);\nconst PivotControls = /* @__PURE__ */React.forwardRef(({\n enabled = true,\n matrix,\n onDragStart,\n onDrag,\n onDragEnd,\n autoTransform = true,\n anchor,\n disableAxes = false,\n disableSliders = false,\n disableRotations = false,\n disableScaling = false,\n activeAxes = [true, true, true],\n offset = [0, 0, 0],\n rotation = [0, 0, 0],\n scale = 1,\n lineWidth = 4,\n fixed = false,\n translationLimits,\n rotationLimits,\n scaleLimits,\n depthTest = true,\n renderOrder = 500,\n axisColors = ['#ff2060', '#20df80', '#2080ff'],\n hoveredColor = '#ffff40',\n annotations = false,\n annotationsClass,\n opacity = 1,\n visible = true,\n userData,\n children,\n ...props\n}, fRef) => {\n const invalidate = useThree(state => state.invalidate);\n const parentRef = React.useRef(null);\n const ref = React.useRef(null);\n const gizmoRef = React.useRef(null);\n const childrenRef = React.useRef(null);\n const translation = React.useRef([0, 0, 0]);\n const cameraScale = React.useRef(new THREE.Vector3(1, 1, 1));\n const gizmoScale = React.useRef(new THREE.Vector3(1, 1, 1));\n React.useLayoutEffect(() => {\n if (!anchor) return;\n childrenRef.current.updateWorldMatrix(true, true);\n mPInv.copy(childrenRef.current.matrixWorld).invert();\n bb.makeEmpty();\n childrenRef.current.traverse(obj => {\n if (!obj.geometry) return;\n if (!obj.geometry.boundingBox) obj.geometry.computeBoundingBox();\n mL.copy(obj.matrixWorld).premultiply(mPInv);\n bbObj.copy(obj.geometry.boundingBox);\n bbObj.applyMatrix4(mL);\n bb.union(bbObj);\n });\n vCenter.copy(bb.max).add(bb.min).multiplyScalar(0.5);\n vSize.copy(bb.max).sub(bb.min).multiplyScalar(0.5);\n vAnchorOffset.copy(vSize).multiply(new THREE.Vector3(...anchor)).add(vCenter);\n vPosition.set(...offset).add(vAnchorOffset);\n gizmoRef.current.position.copy(vPosition);\n invalidate();\n });\n const config = React.useMemo(() => ({\n onDragStart: props => {\n mL0.copy(ref.current.matrix);\n mW0.copy(ref.current.matrixWorld);\n onDragStart && onDragStart(props);\n invalidate();\n },\n onDrag: mdW => {\n mP.copy(parentRef.current.matrixWorld);\n mPInv.copy(mP).invert();\n // After applying the delta\n mW.copy(mW0).premultiply(mdW);\n mL.copy(mW).premultiply(mPInv);\n mL0Inv.copy(mL0).invert();\n mdL.copy(mL).multiply(mL0Inv);\n if (autoTransform) {\n ref.current.matrix.copy(mL);\n }\n onDrag && onDrag(mL, mdL, mW, mdW);\n invalidate();\n },\n onDragEnd: () => {\n if (onDragEnd) onDragEnd();\n invalidate();\n },\n translation,\n translationLimits,\n rotationLimits,\n axisColors,\n hoveredColor,\n opacity,\n scale,\n lineWidth,\n fixed,\n depthTest,\n renderOrder,\n userData,\n annotations,\n annotationsClass\n }), [onDragStart, onDrag, onDragEnd, translation, translationLimits, rotationLimits, scaleLimits, depthTest, scale, lineWidth, fixed, ...axisColors, hoveredColor, opacity, userData, autoTransform, annotations, annotationsClass]);\n const vec = new THREE.Vector3();\n useFrame(state => {\n if (fixed) {\n const sf = calculateScaleFactor(gizmoRef.current.getWorldPosition(vec), scale, state.camera, state.size);\n cameraScale.current.setScalar(sf);\n }\n if (matrix && matrix instanceof THREE.Matrix4) {\n ref.current.matrix = matrix;\n }\n // Update gizmo scale in accordance with matrix changes\n // Without this, there might be noticable turbulences if scaling happens fast enough\n ref.current.updateWorldMatrix(true, true);\n mG.makeRotationFromEuler(gizmoRef.current.rotation).setPosition(gizmoRef.current.position).premultiply(ref.current.matrixWorld);\n gizmoScale.current.setFromMatrixScale(mG);\n vScale.copy(cameraScale.current).divide(gizmoScale.current);\n if (Math.abs(gizmoRef.current.scale.x - vScale.x) > 1e-4 || Math.abs(gizmoRef.current.scale.y - vScale.y) > 1e-4 || Math.abs(gizmoRef.current.scale.z - vScale.z) > 1e-4) {\n gizmoRef.current.scale.copy(vScale);\n state.invalidate();\n }\n });\n React.useImperativeHandle(fRef, () => ref.current, []);\n return /*#__PURE__*/React.createElement(context.Provider, {\n value: config\n }, /*#__PURE__*/React.createElement(\"group\", {\n ref: parentRef\n }, /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref,\n matrix: matrix,\n matrixAutoUpdate: false\n }, props), /*#__PURE__*/React.createElement(\"group\", {\n visible: visible,\n ref: gizmoRef,\n position: offset,\n rotation: rotation\n }, enabled && /*#__PURE__*/React.createElement(React.Fragment, null, !disableAxes && activeAxes[0] && /*#__PURE__*/React.createElement(AxisArrow, {\n axis: 0,\n direction: xDir\n }), !disableAxes && activeAxes[1] && /*#__PURE__*/React.createElement(AxisArrow, {\n axis: 1,\n direction: yDir\n }), !disableAxes && activeAxes[2] && /*#__PURE__*/React.createElement(AxisArrow, {\n axis: 2,\n direction: zDir\n }), !disableSliders && activeAxes[0] && activeAxes[1] && /*#__PURE__*/React.createElement(PlaneSlider, {\n axis: 2,\n dir1: xDir,\n dir2: yDir\n }), !disableSliders && activeAxes[0] && activeAxes[2] && /*#__PURE__*/React.createElement(PlaneSlider, {\n axis: 1,\n dir1: zDir,\n dir2: xDir\n }), !disableSliders && activeAxes[2] && activeAxes[1] && /*#__PURE__*/React.createElement(PlaneSlider, {\n axis: 0,\n dir1: yDir,\n dir2: zDir\n }), !disableRotations && activeAxes[0] && activeAxes[1] && /*#__PURE__*/React.createElement(AxisRotator, {\n axis: 2,\n dir1: xDir,\n dir2: yDir\n }), !disableRotations && activeAxes[0] && activeAxes[2] && /*#__PURE__*/React.createElement(AxisRotator, {\n axis: 1,\n dir1: zDir,\n dir2: xDir\n }), !disableRotations && activeAxes[2] && activeAxes[1] && /*#__PURE__*/React.createElement(AxisRotator, {\n axis: 0,\n dir1: yDir,\n dir2: zDir\n }), !disableScaling && activeAxes[0] && /*#__PURE__*/React.createElement(ScalingSphere, {\n axis: 0,\n direction: xDir\n }), !disableScaling && activeAxes[1] && /*#__PURE__*/React.createElement(ScalingSphere, {\n axis: 1,\n direction: yDir\n }), !disableScaling && activeAxes[2] && /*#__PURE__*/React.createElement(ScalingSphere, {\n axis: 2,\n direction: zDir\n }))), /*#__PURE__*/React.createElement(\"group\", {\n ref: childrenRef\n }, children))));\n});\n\nexport { PivotControls };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { forwardRef, useEffect } from 'react';\nimport { suspend, clear } from 'suspend-react';\nimport { VideoTexture } from '../core/VideoTexture.js';\n\n/**\n * Create a video texture from [`getDisplayMedia`](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia)\n */\nconst ScreenVideoTexture = /* @__PURE__ */forwardRef(({\n options = {\n video: true\n },\n ...props\n}, fref) => {\n const mediaStream = suspend(() => navigator.mediaDevices.getDisplayMedia(options), []);\n useEffect(() => {\n return () => {\n mediaStream == null || mediaStream.getTracks().forEach(track => track.stop());\n clear([]);\n };\n }, [mediaStream]);\n return /*#__PURE__*/React.createElement(VideoTexture, _extends({\n ref: fref\n }, props, {\n src: mediaStream\n }));\n});\n\nexport { ScreenVideoTexture };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { forwardRef, useEffect } from 'react';\nimport { suspend, clear } from 'suspend-react';\nimport { VideoTexture } from '../core/VideoTexture.js';\n\n/**\n * Create a video texture from [`getUserMedia`](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)\n */\nconst WebcamVideoTexture = /* @__PURE__ */forwardRef(({\n constraints = {\n audio: false,\n video: {\n facingMode: 'user'\n }\n },\n ...props\n}, fref) => {\n const mediaStream = suspend(() => navigator.mediaDevices.getUserMedia(constraints), []);\n useEffect(() => {\n return () => {\n mediaStream == null || mediaStream.getTracks().forEach(track => track.stop());\n clear([]);\n };\n }, [mediaStream]);\n return /*#__PURE__*/React.createElement(VideoTexture, _extends({\n ref: fref\n }, props, {\n src: mediaStream\n }));\n});\n\nexport { WebcamVideoTexture };\n","import * as React from 'react';\nimport * as THREE from 'three';\nimport { useThree } from '@react-three/fiber';\nimport { Line } from '../core/Line.js';\n\n/* eslint react-hooks/exhaustive-deps: 1 */\nconst defaultLookAt = /* @__PURE__ */new THREE.Vector3(0, 0, -1);\nconst normal = /* @__PURE__ */function () {\n const a = new THREE.Vector3();\n const b = new THREE.Vector3();\n const c = new THREE.Vector3();\n const ab = new THREE.Vector3();\n const ac = new THREE.Vector3();\n return function (v1, v2, v3, v) {\n a.copy(v1);\n b.copy(v2);\n c.copy(v3);\n ab.copy(b).sub(a);\n ac.copy(c).sub(a);\n return v.crossVectors(ac, ab).normalize();\n };\n}();\nfunction mean(v1, v2) {\n return v1.clone().add(v2).multiplyScalar(0.5);\n}\nconst Facemesh = /* @__PURE__ */React.forwardRef(({\n points = FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.faceLandmarks[0],\n face,\n facialTransformationMatrix,\n faceBlendshapes,\n offset,\n offsetScalar = 80,\n width,\n height,\n depth = 1,\n verticalTri = [159, 386, 152],\n origin,\n eyes = true,\n eyesAsOrigin = false,\n debug = false,\n children,\n ...props\n}, fref) => {\n var _meshRef$current3;\n if (face) {\n points = face.keypoints;\n console.warn('Facemesh `face` prop is deprecated: use `points` instead');\n }\n const offsetRef = React.useRef(null);\n const scaleRef = React.useRef(null);\n const originRef = React.useRef(null);\n const outerRef = React.useRef(null);\n const meshRef = React.useRef(null);\n const eyeRightRef = React.useRef(null);\n const eyeLeftRef = React.useRef(null);\n const [sightDir] = React.useState(() => new THREE.Vector3());\n const [transform] = React.useState(() => new THREE.Object3D());\n const [sightDirQuaternion] = React.useState(() => new THREE.Quaternion());\n const [_origin] = React.useState(() => new THREE.Vector3());\n const {\n invalidate\n } = useThree();\n React.useEffect(() => {\n var _meshRef$current;\n (_meshRef$current = meshRef.current) == null || _meshRef$current.geometry.setIndex(FacemeshDatas.TRIANGULATION);\n }, []);\n const [bboxSize] = React.useState(() => new THREE.Vector3());\n React.useEffect(() => {\n var _meshRef$current2, _outerRef$current;\n const faceGeometry = (_meshRef$current2 = meshRef.current) == null ? void 0 : _meshRef$current2.geometry;\n if (!faceGeometry) return;\n faceGeometry.setFromPoints(points);\n faceGeometry.setDrawRange(0, FacemeshDatas.TRIANGULATION.length);\n\n //\n // A. compute sightDir vector\n //\n // - either from `facialTransformationMatrix` if available\n // - or from `verticalTri`\n //\n\n if (facialTransformationMatrix) {\n // from facialTransformationMatrix\n transform.matrix.fromArray(facialTransformationMatrix.data);\n transform.matrix.decompose(transform.position, transform.quaternion, transform.scale);\n\n // Rotation: y and z axes are inverted\n transform.rotation.y *= -1;\n transform.rotation.z *= -1;\n sightDirQuaternion.setFromEuler(transform.rotation);\n\n // Offset: y and z axes are inverted\n if (offset) {\n var _offsetRef$current;\n transform.position.y *= -1;\n transform.position.z *= -1;\n (_offsetRef$current = offsetRef.current) == null || _offsetRef$current.position.copy(transform.position.divideScalar(offsetScalar));\n } else {\n var _offsetRef$current2;\n (_offsetRef$current2 = offsetRef.current) == null || _offsetRef$current2.position.set(0, 0, 0); // reset\n }\n } else {\n // normal to verticalTri\n normal(points[verticalTri[0]], points[verticalTri[1]], points[verticalTri[2]], sightDir);\n sightDirQuaternion.setFromUnitVectors(defaultLookAt, sightDir);\n }\n const sightDirQuaternionInverse = sightDirQuaternion.clone().invert();\n\n //\n // B. geometry (straightened)\n //\n\n // 1. center (before rotate back)\n faceGeometry.computeBoundingBox();\n if (debug) invalidate(); // invalidate to force re-render for box3Helper (after .computeBoundingBox())\n faceGeometry.center();\n\n // 2. rotate back + rotate outerRef (once 1.)\n faceGeometry.applyQuaternion(sightDirQuaternionInverse);\n (_outerRef$current = outerRef.current) == null || _outerRef$current.setRotationFromQuaternion(sightDirQuaternion);\n\n // 3. 👀 eyes\n if (eyes) {\n if (!faceBlendshapes) {\n console.warn('Facemesh `eyes` option only works if `faceBlendshapes` is provided: skipping.');\n } else {\n if (eyeRightRef.current && eyeLeftRef.current && originRef.current) {\n if (eyesAsOrigin) {\n // compute the middle of the 2 eyes as the `origin`\n const eyeRightSphere = eyeRightRef.current._computeSphere(faceGeometry);\n const eyeLeftSphere = eyeLeftRef.current._computeSphere(faceGeometry);\n const eyesCenter = mean(eyeRightSphere.center, eyeLeftSphere.center);\n origin = eyesCenter.negate(); // eslint-disable-line react-hooks/exhaustive-deps\n\n eyeRightRef.current._update(faceGeometry, faceBlendshapes, eyeRightSphere);\n eyeLeftRef.current._update(faceGeometry, faceBlendshapes, eyeLeftSphere);\n } else {\n eyeRightRef.current._update(faceGeometry, faceBlendshapes);\n eyeLeftRef.current._update(faceGeometry, faceBlendshapes);\n }\n }\n }\n }\n\n // 3. origin\n if (originRef.current) {\n if (origin !== undefined) {\n if (typeof origin === 'number') {\n const position = faceGeometry.getAttribute('position');\n _origin.set(-position.getX(origin), -position.getY(origin), -position.getZ(origin));\n } else if (origin.isVector3) {\n _origin.copy(origin);\n }\n } else {\n _origin.setScalar(0);\n }\n originRef.current.position.copy(_origin);\n }\n\n // 4. re-scale\n if (scaleRef.current) {\n let scale = 1;\n if (width || height || depth) {\n faceGeometry.boundingBox.getSize(bboxSize);\n if (width) scale = width / bboxSize.x; // fit in width\n if (height) scale = height / bboxSize.y; // fit in height\n if (depth) scale = depth / bboxSize.z; // fit in depth\n }\n scaleRef.current.scale.setScalar(scale !== 1 ? scale : 1);\n }\n faceGeometry.computeVertexNormals();\n faceGeometry.attributes.position.needsUpdate = true;\n }, [points, facialTransformationMatrix, faceBlendshapes, transform, offset, offsetScalar, width, height, depth, verticalTri, origin, eyes, debug, invalidate, sightDir, sightDirQuaternion, bboxSize, _origin]);\n\n //\n // API\n //\n\n const api = React.useMemo(() => ({\n outerRef,\n meshRef,\n eyeRightRef,\n eyeLeftRef\n }), []);\n React.useImperativeHandle(fref, () => api, [api]);\n const [meshBboxSize] = React.useState(() => new THREE.Vector3());\n const bbox = (_meshRef$current3 = meshRef.current) == null ? void 0 : _meshRef$current3.geometry.boundingBox;\n const one = (bbox == null ? void 0 : bbox.getSize(meshBboxSize).z) || 1;\n return /*#__PURE__*/React.createElement(\"group\", props, /*#__PURE__*/React.createElement(\"group\", {\n ref: offsetRef\n }, /*#__PURE__*/React.createElement(\"group\", {\n ref: outerRef\n }, /*#__PURE__*/React.createElement(\"group\", {\n ref: scaleRef\n }, debug ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"axesHelper\", {\n args: [one]\n }), /*#__PURE__*/React.createElement(Line, {\n points: [[0, 0, 0], [0, 0, -one]],\n color: 0x00ffff\n })) : null, /*#__PURE__*/React.createElement(\"group\", {\n ref: originRef\n }, eyes && faceBlendshapes && /*#__PURE__*/React.createElement(\"group\", {\n name: \"eyes\"\n }, /*#__PURE__*/React.createElement(FacemeshEye, {\n side: \"left\",\n ref: eyeRightRef,\n debug: debug\n }), /*#__PURE__*/React.createElement(FacemeshEye, {\n side: \"right\",\n ref: eyeLeftRef,\n debug: debug\n })), /*#__PURE__*/React.createElement(\"mesh\", {\n ref: meshRef,\n name: \"face\"\n }, children, debug ? /*#__PURE__*/React.createElement(React.Fragment, null, bbox && /*#__PURE__*/React.createElement(\"box3Helper\", {\n args: [bbox]\n })) : null))))));\n});\n\n//\n// 👁️ FacemeshEye\n//\n\nconst FacemeshEyeDefaults = {\n contourLandmarks: {\n right: [33, 133, 159, 145, 153],\n left: [263, 362, 386, 374, 380]\n },\n blendshapes: {\n right: [14, 16, 18, 12],\n // lookIn,lookOut, lookUp,lookDown\n left: [13, 15, 17, 11] // lookIn,lookOut, lookUp,lookDown\n },\n color: {\n right: 'red',\n left: '#00ff00'\n },\n fov: {\n horizontal: 100,\n vertical: 90\n }\n};\nconst FacemeshEye = /* @__PURE__ */React.forwardRef(({\n side,\n debug = true\n}, fref) => {\n const eyeMeshRef = React.useRef(null);\n const irisDirRef = React.useRef(null);\n\n //\n // _computeSphere()\n //\n // Compute eye's sphere .position and .radius\n //\n\n const [sphere] = React.useState(() => new THREE.Sphere());\n const _computeSphere = React.useCallback(faceGeometry => {\n const position = faceGeometry.getAttribute('position');\n\n // get some eye contour landmarks points (from geometry)\n const eyeContourLandmarks = FacemeshEyeDefaults.contourLandmarks[side];\n const eyeContourPoints = eyeContourLandmarks.map(i => new THREE.Vector3(position.getX(i), position.getY(i), position.getZ(i))); // prettier-ignore\n\n // compute center (centroid from eyeContourPoints)\n sphere.center.set(0, 0, 0);\n eyeContourPoints.forEach(v => sphere.center.add(v));\n sphere.center.divideScalar(eyeContourPoints.length);\n\n // radius (eye half-width)\n sphere.radius = eyeContourPoints[0].sub(eyeContourPoints[1]).length() / 2;\n return sphere;\n }, [sphere, side]);\n\n //\n // _update()\n //\n // Update:\n // - A. eye's mesh (according to sphere)\n // - B. iris direction (according to \"look*\" blendshapes)\n //\n\n const [rotation] = React.useState(() => new THREE.Euler());\n const _update = React.useCallback((faceGeometry, faceBlendshapes, sphere) => {\n // A.\n if (eyeMeshRef.current) {\n var _sphere;\n (_sphere = sphere) !== null && _sphere !== void 0 ? _sphere : sphere = _computeSphere(faceGeometry); // compute sphere dims (if not passed)\n eyeMeshRef.current.position.copy(sphere.center);\n eyeMeshRef.current.scale.setScalar(sphere.radius);\n }\n\n // B.\n if (faceBlendshapes && irisDirRef.current) {\n const blendshapes = FacemeshEyeDefaults.blendshapes[side];\n const lookIn = faceBlendshapes.categories[blendshapes[0]].score;\n const lookOut = faceBlendshapes.categories[blendshapes[1]].score;\n const lookUp = faceBlendshapes.categories[blendshapes[2]].score;\n const lookDown = faceBlendshapes.categories[blendshapes[3]].score;\n const hfov = FacemeshEyeDefaults.fov.horizontal * THREE.MathUtils.DEG2RAD;\n const vfov = FacemeshEyeDefaults.fov.vertical * THREE.MathUtils.DEG2RAD;\n const rx = hfov * 0.5 * (lookDown - lookUp);\n const ry = vfov * 0.5 * (lookIn - lookOut) * (side === 'left' ? 1 : -1);\n rotation.set(rx, ry, 0);\n irisDirRef.current.setRotationFromEuler(rotation);\n }\n }, [_computeSphere, side, rotation]);\n\n //\n // API\n //\n\n const api = React.useMemo(() => ({\n eyeMeshRef: eyeMeshRef,\n irisDirRef: irisDirRef,\n _computeSphere,\n _update\n }), [_computeSphere, _update]);\n React.useImperativeHandle(fref, () => api, [api]);\n const color = FacemeshEyeDefaults.color[side];\n return /*#__PURE__*/React.createElement(\"group\", null, /*#__PURE__*/React.createElement(\"group\", {\n ref: eyeMeshRef\n }, debug && /*#__PURE__*/React.createElement(\"axesHelper\", null), /*#__PURE__*/React.createElement(\"group\", {\n ref: irisDirRef\n }, /*#__PURE__*/React.createElement(React.Fragment, null, debug && /*#__PURE__*/React.createElement(Line, {\n points: [[0, 0, 0], [0, 0, -2]],\n lineWidth: 1,\n color: color\n })))));\n});\n\n//\n// Sample datas\n//\n\nconst FacemeshDatas = {\n // Extracted from: https://github.com/tensorflow/tfjs-models/blob/a8f500809f5afe38feea27870c77e7ba03a6ece4/face-landmarks-detection/demos/shared/triangulation.js\n // prettier-ignore\n TRIANGULATION: [127, 34, 139, 11, 0, 37, 232, 231, 120, 72, 37, 39, 128, 121, 47, 232, 121, 128, 104, 69, 67, 175, 171, 148, 157, 154, 155, 118, 50, 101, 73, 39, 40, 9, 151, 108, 48, 115, 131, 194, 204, 211, 74, 40, 185, 80, 42, 183, 40, 92, 186, 230, 229, 118, 202, 212, 214, 83, 18, 17, 76, 61, 146, 160, 29, 30, 56, 157, 173, 106, 204, 194, 135, 214, 192, 203, 165, 98, 21, 71, 68, 51, 45, 4, 144, 24, 23, 77, 146, 91, 205, 50, 187, 201, 200, 18, 91, 106, 182, 90, 91, 181, 85, 84, 17, 206, 203, 36, 148, 171, 140, 92, 40, 39, 193, 189, 244, 159, 158, 28, 247, 246, 161, 236, 3, 196, 54, 68, 104, 193, 168, 8, 117, 228, 31, 189, 193, 55, 98, 97, 99, 126, 47, 100, 166, 79, 218, 155, 154, 26, 209, 49, 131, 135, 136, 150, 47, 126, 217, 223, 52, 53, 45, 51, 134, 211, 170, 140, 67, 69, 108, 43, 106, 91, 230, 119, 120, 226, 130, 247, 63, 53, 52, 238, 20, 242, 46, 70, 156, 78, 62, 96, 46, 53, 63, 143, 34, 227, 173, 155, 133, 123, 117, 111, 44, 125, 19, 236, 134, 51, 216, 206, 205, 154, 153, 22, 39, 37, 167, 200, 201, 208, 36, 142, 100, 57, 212, 202, 20, 60, 99, 28, 158, 157, 35, 226, 113, 160, 159, 27, 204, 202, 210, 113, 225, 46, 43, 202, 204, 62, 76, 77, 137, 123, 116, 41, 38, 72, 203, 129, 142, 64, 98, 240, 49, 102, 64, 41, 73, 74, 212, 216, 207, 42, 74, 184, 169, 170, 211, 170, 149, 176, 105, 66, 69, 122, 6, 168, 123, 147, 187, 96, 77, 90, 65, 55, 107, 89, 90, 180, 101, 100, 120, 63, 105, 104, 93, 137, 227, 15, 86, 85, 129, 102, 49, 14, 87, 86, 55, 8, 9, 100, 47, 121, 145, 23, 22, 88, 89, 179, 6, 122, 196, 88, 95, 96, 138, 172, 136, 215, 58, 172, 115, 48, 219, 42, 80, 81, 195, 3, 51, 43, 146, 61, 171, 175, 199, 81, 82, 38, 53, 46, 225, 144, 163, 110, 246, 33, 7, 52, 65, 66, 229, 228, 117, 34, 127, 234, 107, 108, 69, 109, 108, 151, 48, 64, 235, 62, 78, 191, 129, 209, 126, 111, 35, 143, 163, 161, 246, 117, 123, 50, 222, 65, 52, 19, 125, 141, 221, 55, 65, 3, 195, 197, 25, 7, 33, 220, 237, 44, 70, 71, 139, 122, 193, 245, 247, 130, 33, 71, 21, 162, 153, 158, 159, 170, 169, 150, 188, 174, 196, 216, 186, 92, 144, 160, 161, 2, 97, 167, 141, 125, 241, 164, 167, 37, 72, 38, 12, 145, 159, 160, 38, 82, 13, 63, 68, 71, 226, 35, 111, 158, 153, 154, 101, 50, 205, 206, 92, 165, 209, 198, 217, 165, 167, 97, 220, 115, 218, 133, 112, 243, 239, 238, 241, 214, 135, 169, 190, 173, 133, 171, 208, 32, 125, 44, 237, 86, 87, 178, 85, 86, 179, 84, 85, 180, 83, 84, 181, 201, 83, 182, 137, 93, 132, 76, 62, 183, 61, 76, 184, 57, 61, 185, 212, 57, 186, 214, 207, 187, 34, 143, 156, 79, 239, 237, 123, 137, 177, 44, 1, 4, 201, 194, 32, 64, 102, 129, 213, 215, 138, 59, 166, 219, 242, 99, 97, 2, 94, 141, 75, 59, 235, 24, 110, 228, 25, 130, 226, 23, 24, 229, 22, 23, 230, 26, 22, 231, 112, 26, 232, 189, 190, 243, 221, 56, 190, 28, 56, 221, 27, 28, 222, 29, 27, 223, 30, 29, 224, 247, 30, 225, 238, 79, 20, 166, 59, 75, 60, 75, 240, 147, 177, 215, 20, 79, 166, 187, 147, 213, 112, 233, 244, 233, 128, 245, 128, 114, 188, 114, 217, 174, 131, 115, 220, 217, 198, 236, 198, 131, 134, 177, 132, 58, 143, 35, 124, 110, 163, 7, 228, 110, 25, 356, 389, 368, 11, 302, 267, 452, 350, 349, 302, 303, 269, 357, 343, 277, 452, 453, 357, 333, 332, 297, 175, 152, 377, 384, 398, 382, 347, 348, 330, 303, 304, 270, 9, 336, 337, 278, 279, 360, 418, 262, 431, 304, 408, 409, 310, 415, 407, 270, 409, 410, 450, 348, 347, 422, 430, 434, 313, 314, 17, 306, 307, 375, 387, 388, 260, 286, 414, 398, 335, 406, 418, 364, 367, 416, 423, 358, 327, 251, 284, 298, 281, 5, 4, 373, 374, 253, 307, 320, 321, 425, 427, 411, 421, 313, 18, 321, 405, 406, 320, 404, 405, 315, 16, 17, 426, 425, 266, 377, 400, 369, 322, 391, 269, 417, 465, 464, 386, 257, 258, 466, 260, 388, 456, 399, 419, 284, 332, 333, 417, 285, 8, 346, 340, 261, 413, 441, 285, 327, 460, 328, 355, 371, 329, 392, 439, 438, 382, 341, 256, 429, 420, 360, 364, 394, 379, 277, 343, 437, 443, 444, 283, 275, 440, 363, 431, 262, 369, 297, 338, 337, 273, 375, 321, 450, 451, 349, 446, 342, 467, 293, 334, 282, 458, 461, 462, 276, 353, 383, 308, 324, 325, 276, 300, 293, 372, 345, 447, 382, 398, 362, 352, 345, 340, 274, 1, 19, 456, 248, 281, 436, 427, 425, 381, 256, 252, 269, 391, 393, 200, 199, 428, 266, 330, 329, 287, 273, 422, 250, 462, 328, 258, 286, 384, 265, 353, 342, 387, 259, 257, 424, 431, 430, 342, 353, 276, 273, 335, 424, 292, 325, 307, 366, 447, 345, 271, 303, 302, 423, 266, 371, 294, 455, 460, 279, 278, 294, 271, 272, 304, 432, 434, 427, 272, 407, 408, 394, 430, 431, 395, 369, 400, 334, 333, 299, 351, 417, 168, 352, 280, 411, 325, 319, 320, 295, 296, 336, 319, 403, 404, 330, 348, 349, 293, 298, 333, 323, 454, 447, 15, 16, 315, 358, 429, 279, 14, 15, 316, 285, 336, 9, 329, 349, 350, 374, 380, 252, 318, 402, 403, 6, 197, 419, 318, 319, 325, 367, 364, 365, 435, 367, 397, 344, 438, 439, 272, 271, 311, 195, 5, 281, 273, 287, 291, 396, 428, 199, 311, 271, 268, 283, 444, 445, 373, 254, 339, 263, 466, 249, 282, 334, 296, 449, 347, 346, 264, 447, 454, 336, 296, 299, 338, 10, 151, 278, 439, 455, 292, 407, 415, 358, 371, 355, 340, 345, 372, 390, 249, 466, 346, 347, 280, 442, 443, 282, 19, 94, 370, 441, 442, 295, 248, 419, 197, 263, 255, 359, 440, 275, 274, 300, 383, 368, 351, 412, 465, 263, 467, 466, 301, 368, 389, 380, 374, 386, 395, 378, 379, 412, 351, 419, 436, 426, 322, 373, 390, 388, 2, 164, 393, 370, 462, 461, 164, 0, 267, 302, 11, 12, 374, 373, 387, 268, 12, 13, 293, 300, 301, 446, 261, 340, 385, 384, 381, 330, 266, 425, 426, 423, 391, 429, 355, 437, 391, 327, 326, 440, 457, 438, 341, 382, 362, 459, 457, 461, 434, 430, 394, 414, 463, 362, 396, 369, 262, 354, 461, 457, 316, 403, 402, 315, 404, 403, 314, 405, 404, 313, 406, 405, 421, 418, 406, 366, 401, 361, 306, 408, 407, 291, 409, 408, 287, 410, 409, 432, 436, 410, 434, 416, 411, 264, 368, 383, 309, 438, 457, 352, 376, 401, 274, 275, 4, 421, 428, 262, 294, 327, 358, 433, 416, 367, 289, 455, 439, 462, 370, 326, 2, 326, 370, 305, 460, 455, 254, 449, 448, 255, 261, 446, 253, 450, 449, 252, 451, 450, 256, 452, 451, 341, 453, 452, 413, 464, 463, 441, 413, 414, 258, 442, 441, 257, 443, 442, 259, 444, 443, 260, 445, 444, 467, 342, 445, 459, 458, 250, 289, 392, 290, 290, 328, 460, 376, 433, 435, 250, 290, 392, 411, 416, 433, 341, 463, 464, 453, 464, 465, 357, 465, 412, 343, 412, 399, 360, 363, 440, 437, 399, 456, 420, 456, 363, 401, 435, 288, 372, 383, 353, 339, 255, 249, 448, 261, 255, 133, 243, 190, 133, 155, 112, 33, 246, 247, 33, 130, 25, 398, 384, 286, 362, 398, 414, 362, 463, 341, 263, 359, 467, 263, 249, 255, 466, 467, 260, 75, 60, 166, 238, 239, 79, 162, 127, 139, 72, 11, 37, 121, 232, 120, 73, 72, 39, 114, 128, 47, 233, 232, 128, 103, 104, 67, 152, 175, 148, 173, 157, 155, 119, 118, 101, 74, 73, 40, 107, 9, 108, 49, 48, 131, 32, 194, 211, 184, 74, 185, 191, 80, 183, 185, 40, 186, 119, 230, 118, 210, 202, 214, 84, 83, 17, 77, 76, 146, 161, 160, 30, 190, 56, 173, 182, 106, 194, 138, 135, 192, 129, 203, 98, 54, 21, 68, 5, 51, 4, 145, 144, 23, 90, 77, 91, 207, 205, 187, 83, 201, 18, 181, 91, 182, 180, 90, 181, 16, 85, 17, 205, 206, 36, 176, 148, 140, 165, 92, 39, 245, 193, 244, 27, 159, 28, 30, 247, 161, 174, 236, 196, 103, 54, 104, 55, 193, 8, 111, 117, 31, 221, 189, 55, 240, 98, 99, 142, 126, 100, 219, 166, 218, 112, 155, 26, 198, 209, 131, 169, 135, 150, 114, 47, 217, 224, 223, 53, 220, 45, 134, 32, 211, 140, 109, 67, 108, 146, 43, 91, 231, 230, 120, 113, 226, 247, 105, 63, 52, 241, 238, 242, 124, 46, 156, 95, 78, 96, 70, 46, 63, 116, 143, 227, 116, 123, 111, 1, 44, 19, 3, 236, 51, 207, 216, 205, 26, 154, 22, 165, 39, 167, 199, 200, 208, 101, 36, 100, 43, 57, 202, 242, 20, 99, 56, 28, 157, 124, 35, 113, 29, 160, 27, 211, 204, 210, 124, 113, 46, 106, 43, 204, 96, 62, 77, 227, 137, 116, 73, 41, 72, 36, 203, 142, 235, 64, 240, 48, 49, 64, 42, 41, 74, 214, 212, 207, 183, 42, 184, 210, 169, 211, 140, 170, 176, 104, 105, 69, 193, 122, 168, 50, 123, 187, 89, 96, 90, 66, 65, 107, 179, 89, 180, 119, 101, 120, 68, 63, 104, 234, 93, 227, 16, 15, 85, 209, 129, 49, 15, 14, 86, 107, 55, 9, 120, 100, 121, 153, 145, 22, 178, 88, 179, 197, 6, 196, 89, 88, 96, 135, 138, 136, 138, 215, 172, 218, 115, 219, 41, 42, 81, 5, 195, 51, 57, 43, 61, 208, 171, 199, 41, 81, 38, 224, 53, 225, 24, 144, 110, 105, 52, 66, 118, 229, 117, 227, 34, 234, 66, 107, 69, 10, 109, 151, 219, 48, 235, 183, 62, 191, 142, 129, 126, 116, 111, 143, 7, 163, 246, 118, 117, 50, 223, 222, 52, 94, 19, 141, 222, 221, 65, 196, 3, 197, 45, 220, 44, 156, 70, 139, 188, 122, 245, 139, 71, 162, 145, 153, 159, 149, 170, 150, 122, 188, 196, 206, 216, 92, 163, 144, 161, 164, 2, 167, 242, 141, 241, 0, 164, 37, 11, 72, 12, 144, 145, 160, 12, 38, 13, 70, 63, 71, 31, 226, 111, 157, 158, 154, 36, 101, 205, 203, 206, 165, 126, 209, 217, 98, 165, 97, 237, 220, 218, 237, 239, 241, 210, 214, 169, 140, 171, 32, 241, 125, 237, 179, 86, 178, 180, 85, 179, 181, 84, 180, 182, 83, 181, 194, 201, 182, 177, 137, 132, 184, 76, 183, 185, 61, 184, 186, 57, 185, 216, 212, 186, 192, 214, 187, 139, 34, 156, 218, 79, 237, 147, 123, 177, 45, 44, 4, 208, 201, 32, 98, 64, 129, 192, 213, 138, 235, 59, 219, 141, 242, 97, 97, 2, 141, 240, 75, 235, 229, 24, 228, 31, 25, 226, 230, 23, 229, 231, 22, 230, 232, 26, 231, 233, 112, 232, 244, 189, 243, 189, 221, 190, 222, 28, 221, 223, 27, 222, 224, 29, 223, 225, 30, 224, 113, 247, 225, 99, 60, 240, 213, 147, 215, 60, 20, 166, 192, 187, 213, 243, 112, 244, 244, 233, 245, 245, 128, 188, 188, 114, 174, 134, 131, 220, 174, 217, 236, 236, 198, 134, 215, 177, 58, 156, 143, 124, 25, 110, 7, 31, 228, 25, 264, 356, 368, 0, 11, 267, 451, 452, 349, 267, 302, 269, 350, 357, 277, 350, 452, 357, 299, 333, 297, 396, 175, 377, 381, 384, 382, 280, 347, 330, 269, 303, 270, 151, 9, 337, 344, 278, 360, 424, 418, 431, 270, 304, 409, 272, 310, 407, 322, 270, 410, 449, 450, 347, 432, 422, 434, 18, 313, 17, 291, 306, 375, 259, 387, 260, 424, 335, 418, 434, 364, 416, 391, 423, 327, 301, 251, 298, 275, 281, 4, 254, 373, 253, 375, 307, 321, 280, 425, 411, 200, 421, 18, 335, 321, 406, 321, 320, 405, 314, 315, 17, 423, 426, 266, 396, 377, 369, 270, 322, 269, 413, 417, 464, 385, 386, 258, 248, 456, 419, 298, 284, 333, 168, 417, 8, 448, 346, 261, 417, 413, 285, 326, 327, 328, 277, 355, 329, 309, 392, 438, 381, 382, 256, 279, 429, 360, 365, 364, 379, 355, 277, 437, 282, 443, 283, 281, 275, 363, 395, 431, 369, 299, 297, 337, 335, 273, 321, 348, 450, 349, 359, 446, 467, 283, 293, 282, 250, 458, 462, 300, 276, 383, 292, 308, 325, 283, 276, 293, 264, 372, 447, 346, 352, 340, 354, 274, 19, 363, 456, 281, 426, 436, 425, 380, 381, 252, 267, 269, 393, 421, 200, 428, 371, 266, 329, 432, 287, 422, 290, 250, 328, 385, 258, 384, 446, 265, 342, 386, 387, 257, 422, 424, 430, 445, 342, 276, 422, 273, 424, 306, 292, 307, 352, 366, 345, 268, 271, 302, 358, 423, 371, 327, 294, 460, 331, 279, 294, 303, 271, 304, 436, 432, 427, 304, 272, 408, 395, 394, 431, 378, 395, 400, 296, 334, 299, 6, 351, 168, 376, 352, 411, 307, 325, 320, 285, 295, 336, 320, 319, 404, 329, 330, 349, 334, 293, 333, 366, 323, 447, 316, 15, 315, 331, 358, 279, 317, 14, 316, 8, 285, 9, 277, 329, 350, 253, 374, 252, 319, 318, 403, 351, 6, 419, 324, 318, 325, 397, 367, 365, 288, 435, 397, 278, 344, 439, 310, 272, 311, 248, 195, 281, 375, 273, 291, 175, 396, 199, 312, 311, 268, 276, 283, 445, 390, 373, 339, 295, 282, 296, 448, 449, 346, 356, 264, 454, 337, 336, 299, 337, 338, 151, 294, 278, 455, 308, 292, 415, 429, 358, 355, 265, 340, 372, 388, 390, 466, 352, 346, 280, 295, 442, 282, 354, 19, 370, 285, 441, 295, 195, 248, 197, 457, 440, 274, 301, 300, 368, 417, 351, 465, 251, 301, 389, 385, 380, 386, 394, 395, 379, 399, 412, 419, 410, 436, 322, 387, 373, 388, 326, 2, 393, 354, 370, 461, 393, 164, 267, 268, 302, 12, 386, 374, 387, 312, 268, 13, 298, 293, 301, 265, 446, 340, 380, 385, 381, 280, 330, 425, 322, 426, 391, 420, 429, 437, 393, 391, 326, 344, 440, 438, 458, 459, 461, 364, 434, 394, 428, 396, 262, 274, 354, 457, 317, 316, 402, 316, 315, 403, 315, 314, 404, 314, 313, 405, 313, 421, 406, 323, 366, 361, 292, 306, 407, 306, 291, 408, 291, 287, 409, 287, 432, 410, 427, 434, 411, 372, 264, 383, 459, 309, 457, 366, 352, 401, 1, 274, 4, 418, 421, 262, 331, 294, 358, 435, 433, 367, 392, 289, 439, 328, 462, 326, 94, 2, 370, 289, 305, 455, 339, 254, 448, 359, 255, 446, 254, 253, 449, 253, 252, 450, 252, 256, 451, 256, 341, 452, 414, 413, 463, 286, 441, 414, 286, 258, 441, 258, 257, 442, 257, 259, 443, 259, 260, 444, 260, 467, 445, 309, 459, 250, 305, 289, 290, 305, 290, 460, 401, 376, 435, 309, 250, 392, 376, 411, 433, 453, 341, 464, 357, 453, 465, 343, 357, 412, 437, 343, 399, 344, 360, 440, 420, 437, 456, 360, 420, 363, 361, 401, 288, 265, 372, 353, 390, 339, 249, 339, 448, 255],\n // My face as default (captured with a 640x480 webcam)\n // prettier-ignore\n SAMPLE_FACE: {\n \"keypoints\": [{\n \"x\": 356.2804412841797,\n \"y\": 295.1960563659668,\n \"z\": -23.786449432373047,\n \"name\": \"lips\"\n }, {\n \"x\": 354.8859405517578,\n \"y\": 264.69520568847656,\n \"z\": -36.718435287475586\n }, {\n \"x\": 355.2180862426758,\n \"y\": 275.3360366821289,\n \"z\": -21.183712482452393\n }, {\n \"x\": 347.349853515625,\n \"y\": 242.4400234222412,\n \"z\": -25.093655586242676\n }, {\n \"x\": 354.40135955810547,\n \"y\": 256.67933464050293,\n \"z\": -38.23572635650635\n }, {\n \"x\": 353.7689971923828,\n \"y\": 247.54886627197266,\n \"z\": -34.5475435256958\n }, {\n \"x\": 352.1288299560547,\n \"y\": 227.34312057495117,\n \"z\": -13.095386028289795\n }, {\n \"x\": 303.5013198852539,\n \"y\": 234.67002868652344,\n \"z\": 12.500141859054565,\n \"name\": \"rightEye\"\n }, {\n \"x\": 351.09378814697266,\n \"y\": 211.87547206878662,\n \"z\": -6.413471698760986\n }, {\n \"x\": 350.7115936279297,\n \"y\": 202.1251630783081,\n \"z\": -6.413471698760986\n }, {\n \"x\": 348.33667755126953,\n \"y\": 168.7741756439209,\n \"z\": 6.483500003814697,\n \"name\": \"faceOval\"\n }, {\n \"x\": 356.4806365966797,\n \"y\": 299.2995357513428,\n \"z\": -23.144519329071045\n }, {\n \"x\": 356.5511703491211,\n \"y\": 302.66146659851074,\n \"z\": -21.020312309265137\n }, {\n \"x\": 356.6239547729492,\n \"y\": 304.1536331176758,\n \"z\": -18.137459754943848,\n \"name\": \"lips\"\n }, {\n \"x\": 356.5807342529297,\n \"y\": 305.1840591430664,\n \"z\": -18.767719268798828,\n \"name\": \"lips\"\n }, {\n \"x\": 356.8241500854492,\n \"y\": 308.25711250305176,\n \"z\": -20.16829490661621\n }, {\n \"x\": 357.113037109375,\n \"y\": 312.26277351379395,\n \"z\": -22.10575819015503\n }, {\n \"x\": 357.34962463378906,\n \"y\": 317.1123218536377,\n \"z\": -21.837315559387207,\n \"name\": \"lips\"\n }, {\n \"x\": 357.6658630371094,\n \"y\": 325.51036834716797,\n \"z\": -16.27002477645874\n }, {\n \"x\": 355.0201416015625,\n \"y\": 269.36279296875,\n \"z\": -33.73054027557373\n }, {\n \"x\": 348.5237503051758,\n \"y\": 270.33411026000977,\n \"z\": -24.93025302886963\n }, {\n \"x\": 279.97331619262695,\n \"y\": 213.24176788330078,\n \"z\": 47.759642601013184,\n \"name\": \"faceOval\"\n }, {\n \"x\": 322.66529083251953,\n \"y\": 238.5027265548706,\n \"z\": 5.535193085670471\n }, {\n \"x\": 316.0983657836914,\n \"y\": 239.94489669799805,\n \"z\": 5.777376294136047\n }, {\n \"x\": 309.9431610107422,\n \"y\": 240.24518966674805,\n \"z\": 7.510589361190796\n }, {\n \"x\": 301.31994247436523,\n \"y\": 237.86138534545898,\n \"z\": 13.118728399276733\n }, {\n \"x\": 328.14266204833984,\n \"y\": 235.80496788024902,\n \"z\": 6.646900177001953\n }, {\n \"x\": 313.7326431274414,\n \"y\": 222.11161136627197,\n \"z\": 3.9887237548828125\n }, {\n \"x\": 320.45196533203125,\n \"y\": 221.87729358673096,\n \"z\": 4.601476192474365\n }, {\n \"x\": 307.35679626464844,\n \"y\": 223.63793849945068,\n \"z\": 5.932023525238037\n }, {\n \"x\": 303.0031204223633,\n \"y\": 226.3743782043457,\n \"z\": 8.479321002960205\n }, {\n \"x\": 296.80023193359375,\n \"y\": 242.94299125671387,\n \"z\": 15.931552648544312\n }, {\n \"x\": 332.2352981567383,\n \"y\": 340.77341079711914,\n \"z\": -10.165848731994629\n }, {\n \"x\": 301.38587951660156,\n \"y\": 233.46447944641113,\n \"z\": 14.764405488967896,\n \"name\": \"rightEye\"\n }, {\n \"x\": 279.0147018432617,\n \"y\": 244.37155723571777,\n \"z\": 45.77549457550049\n }, {\n \"x\": 289.60548400878906,\n \"y\": 239.1807460784912,\n \"z\": 23.191204071044922\n }, {\n \"x\": 320.32257080078125,\n \"y\": 267.1292781829834,\n \"z\": -4.954537749290466\n }, {\n \"x\": 347.64583587646484,\n \"y\": 294.4955062866211,\n \"z\": -23.062820434570312,\n \"name\": \"lips\"\n }, {\n \"x\": 349.28138732910156,\n \"y\": 303.1095886230469,\n \"z\": -20.238323211669922\n }, {\n \"x\": 338.9453125,\n \"y\": 298.19186210632324,\n \"z\": -19.456336498260498,\n \"name\": \"lips\"\n }, {\n \"x\": 333.36788177490234,\n \"y\": 302.6706790924072,\n \"z\": -14.776077270507812,\n \"name\": \"lips\"\n }, {\n \"x\": 342.89188385009766,\n \"y\": 304.3561363220215,\n \"z\": -17.752301692962646\n }, {\n \"x\": 337.7375030517578,\n \"y\": 306.0098361968994,\n \"z\": -13.410515785217285\n }, {\n \"x\": 325.6159210205078,\n \"y\": 316.22995376586914,\n \"z\": -6.681914925575256\n }, {\n \"x\": 349.0104675292969,\n \"y\": 264.9818515777588,\n \"z\": -36.274919509887695\n }, {\n \"x\": 347.7138900756836,\n \"y\": 257.5664806365967,\n \"z\": -37.67549514770508\n }, {\n \"x\": 291.79357528686523,\n \"y\": 218.88171672821045,\n \"z\": 11.578094959259033,\n \"name\": \"rightEyebrow\"\n }, {\n \"x\": 332.2689437866211,\n \"y\": 247.56946563720703,\n \"z\": -3.3730539679527283\n }, {\n \"x\": 332.0074462890625,\n \"y\": 267.1201229095459,\n \"z\": -19.969879388809204\n }, {\n \"x\": 331.27952575683594,\n \"y\": 263.6967658996582,\n \"z\": -17.47218608856201\n }, {\n \"x\": 301.04373931884766,\n \"y\": 269.56552505493164,\n \"z\": 3.61815482378006\n }, {\n \"x\": 347.4863815307617,\n \"y\": 249.0706443786621,\n \"z\": -32.633421421051025\n }, {\n \"x\": 307.26118087768555,\n \"y\": 208.2646894454956,\n \"z\": 1.1591226607561111,\n \"name\": \"rightEyebrow\"\n }, {\n \"x\": 297.91919708251953,\n \"y\": 212.22604751586914,\n \"z\": 5.914516448974609,\n \"name\": \"rightEyebrow\"\n }, {\n \"x\": 285.1651382446289,\n \"y\": 197.98450469970703,\n \"z\": 36.391637325286865,\n \"name\": \"faceOval\"\n }, {\n \"x\": 337.04097747802734,\n \"y\": 211.25229835510254,\n \"z\": -4.548954665660858\n }, {\n \"x\": 326.5912628173828,\n \"y\": 223.16698551177979,\n \"z\": 6.670243740081787\n }, {\n \"x\": 320.05664825439453,\n \"y\": 309.5834255218506,\n \"z\": -4.055835008621216\n }, {\n \"x\": 289.6866226196289,\n \"y\": 314.617395401001,\n \"z\": 53.875489234924316,\n \"name\": \"faceOval\"\n }, {\n \"x\": 337.4256896972656,\n \"y\": 270.8755302429199,\n \"z\": -17.67060160636902\n }, {\n \"x\": 343.69922637939453,\n \"y\": 273.0000400543213,\n \"z\": -18.756048679351807\n }, {\n \"x\": 327.4242401123047,\n \"y\": 309.22399520874023,\n \"z\": -4.703601002693176,\n \"name\": \"lips\"\n }, {\n \"x\": 330.37220001220703,\n \"y\": 308.3323001861572,\n \"z\": -6.442649960517883\n }, {\n \"x\": 293.87027740478516,\n \"y\": 207.7961826324463,\n \"z\": 9.821539521217346,\n \"name\": \"rightEyebrow\"\n }, {\n \"x\": 332.11437225341797,\n \"y\": 271.22812271118164,\n \"z\": -16.64351224899292\n }, {\n \"x\": 320.1197814941406,\n \"y\": 207.40366458892822,\n \"z\": -2.48164564371109,\n \"name\": \"rightEyebrow\"\n }, {\n \"x\": 318.59575271606445,\n \"y\": 201.07443809509277,\n \"z\": -3.110446035861969,\n \"name\": \"rightEyebrow\"\n }, {\n \"x\": 310.72303771972656,\n \"y\": 175.75075149536133,\n \"z\": 13.328815698623657,\n \"name\": \"faceOval\"\n }, {\n \"x\": 289.67578887939453,\n \"y\": 202.29835510253906,\n \"z\": 21.370456218719482\n }, {\n \"x\": 315.30879974365234,\n \"y\": 187.35260009765625,\n \"z\": 5.0304025411605835\n }, {\n \"x\": 287.8936767578125,\n \"y\": 216.54793739318848,\n \"z\": 17.81065821647644,\n \"name\": \"rightEyebrow\"\n }, {\n \"x\": 283.9391899108887,\n \"y\": 215.01142501831055,\n \"z\": 32.04984903335571\n }, {\n \"x\": 348.35330963134766,\n \"y\": 299.4155788421631,\n \"z\": -22.47924566268921\n }, {\n \"x\": 341.1790466308594,\n \"y\": 301.8221855163574,\n \"z\": -18.977805376052856\n }, {\n \"x\": 335.69713592529297,\n \"y\": 304.4266891479492,\n \"z\": -14.682706594467163\n }, {\n \"x\": 339.4615173339844,\n \"y\": 272.3654365539551,\n \"z\": -16.38674020767212\n }, {\n \"x\": 328.99600982666016,\n \"y\": 308.86685371398926,\n \"z\": -5.616893768310547\n }, {\n \"x\": 332.00313568115234,\n \"y\": 309.1875743865967,\n \"z\": -10.335084199905396\n }, {\n \"x\": 331.0068130493164,\n \"y\": 307.9274368286133,\n \"z\": -6.681914925575256,\n \"name\": \"lips\"\n }, {\n \"x\": 341.13792419433594,\n \"y\": 266.4876937866211,\n \"z\": -26.56425952911377\n }, {\n \"x\": 339.02950286865234,\n \"y\": 305.6663703918457,\n \"z\": -12.33674168586731,\n \"name\": \"lips\"\n }, {\n \"x\": 344.22935485839844,\n \"y\": 304.9452781677246,\n \"z\": -15.161235332489014,\n \"name\": \"lips\"\n }, {\n \"x\": 350.1844024658203,\n \"y\": 304.374303817749,\n \"z\": -17.5305438041687,\n \"name\": \"lips\"\n }, {\n \"x\": 348.52630615234375,\n \"y\": 325.9562301635742,\n \"z\": -16.164982318878174\n }, {\n \"x\": 348.6581802368164,\n \"y\": 317.1624183654785,\n \"z\": -21.510512828826904,\n \"name\": \"lips\"\n }, {\n \"x\": 348.9766311645508,\n \"y\": 312.1923065185547,\n \"z\": -21.708929538726807\n }, {\n \"x\": 349.2427444458008,\n \"y\": 308.0660820007324,\n \"z\": -19.643079042434692\n }, {\n \"x\": 349.67491149902344,\n \"y\": 305.42747497558594,\n \"z\": -18.16080331802368,\n \"name\": \"lips\"\n }, {\n \"x\": 337.95589447021484,\n \"y\": 306.6535949707031,\n \"z\": -12.803598642349243,\n \"name\": \"lips\"\n }, {\n \"x\": 337.06878662109375,\n \"y\": 307.63169288635254,\n \"z\": -14.274203777313232\n }, {\n \"x\": 335.77449798583984,\n \"y\": 309.8449516296387,\n \"z\": -15.698124170303345\n }, {\n \"x\": 334.6099090576172,\n \"y\": 312.7997016906738,\n \"z\": -14.764405488967896,\n \"name\": \"lips\"\n }, {\n \"x\": 327.2330856323242,\n \"y\": 293.80866050720215,\n \"z\": -11.864047050476074\n }, {\n \"x\": 280.97679138183594,\n \"y\": 279.79928970336914,\n \"z\": 68.90834331512451,\n \"name\": \"faceOval\"\n }, {\n \"x\": 355.13843536376953,\n \"y\": 271.7875671386719,\n \"z\": -25.350427627563477\n }, {\n \"x\": 334.7235870361328,\n \"y\": 307.4656391143799,\n \"z\": -9.302158951759338,\n \"name\": \"lips\"\n }, {\n \"x\": 333.5293960571289,\n \"y\": 307.89782524108887,\n \"z\": -10.200862884521484\n }, {\n \"x\": 346.29688262939453,\n \"y\": 276.4256286621094,\n \"z\": -19.748122692108154\n }, {\n \"x\": 335.16246795654297,\n \"y\": 276.22097969055176,\n \"z\": -12.313398122787476\n }, {\n \"x\": 345.09132385253906,\n \"y\": 274.7082996368408,\n \"z\": -19.304605722427368\n }, {\n \"x\": 325.4267883300781,\n \"y\": 252.95130729675293,\n \"z\": -1.6661019623279572\n }, {\n \"x\": 315.347843170166,\n \"y\": 259.05200958251953,\n \"z\": -0.25604281574487686\n }, {\n \"x\": 330.44933319091797,\n \"y\": 267.7570152282715,\n \"z\": -14.017432928085327\n }, {\n \"x\": 294.96768951416016,\n \"y\": 185.26001930236816,\n \"z\": 23.903164863586426,\n \"name\": \"faceOval\"\n }, {\n \"x\": 299.63531494140625,\n \"y\": 192.7913761138916,\n \"z\": 12.640198469161987\n }, {\n \"x\": 304.5452117919922,\n \"y\": 202.4142837524414,\n \"z\": 3.244667649269104,\n \"name\": \"rightEyebrow\"\n }, {\n \"x\": 331.6915512084961,\n \"y\": 320.0467872619629,\n \"z\": -10.632705688476562\n }, {\n \"x\": 334.5911407470703,\n \"y\": 201.27566814422607,\n \"z\": -6.133356094360352,\n \"name\": \"rightEyebrow\"\n }, {\n \"x\": 331.4815902709961,\n \"y\": 185.44180870056152,\n \"z\": 0.6627205014228821\n }, {\n \"x\": 328.05816650390625,\n \"y\": 170.8385467529297,\n \"z\": 7.358860373497009,\n \"name\": \"faceOval\"\n }, {\n \"x\": 304.49764251708984,\n \"y\": 239.76297855377197,\n \"z\": 10.387605428695679\n }, {\n \"x\": 290.6382179260254,\n \"y\": 248.85257720947266,\n \"z\": 19.03616428375244\n }, {\n \"x\": 331.5682601928711,\n \"y\": 233.20727348327637,\n \"z\": 7.837390303611755\n }, {\n \"x\": 295.5115509033203,\n \"y\": 228.9834451675415,\n \"z\": 14.41426157951355\n }, {\n \"x\": 336.94332122802734,\n \"y\": 241.8259334564209,\n \"z\": -5.27842104434967\n }, {\n \"x\": 336.2792205810547,\n \"y\": 262.7049922943115,\n \"z\": -26.12074375152588\n }, {\n \"x\": 284.4102478027344,\n \"y\": 255.3262710571289,\n \"z\": 25.467140674591064\n }, {\n \"x\": 295.1420593261719,\n \"y\": 253.02655220031738,\n \"z\": 12.430112361907959\n }, {\n \"x\": 303.5196113586426,\n \"y\": 254.20703887939453,\n \"z\": 6.139191389083862\n }, {\n \"x\": 315.73450088500977,\n \"y\": 251.64799690246582,\n \"z\": 3.3788898587226868\n }, {\n \"x\": 324.69661712646484,\n \"y\": 247.56494522094727,\n \"z\": 2.3328344523906708\n }, {\n \"x\": 331.57970428466797,\n \"y\": 243.02241325378418,\n \"z\": 1.1423448473215103\n }, {\n \"x\": 345.6210708618164,\n \"y\": 229.9976634979248,\n \"z\": -10.825285911560059\n }, {\n \"x\": 286.26644134521484,\n \"y\": 270.37991523742676,\n \"z\": 21.708929538726807\n }, {\n \"x\": 290.2525520324707,\n \"y\": 228.4921360015869,\n \"z\": 17.71728754043579\n }, {\n \"x\": 351.65367126464844,\n \"y\": 269.3400764465332,\n \"z\": -33.450424671173096\n }, {\n \"x\": 333.1378936767578,\n \"y\": 253.88388633728027,\n \"z\": -7.230473756790161\n }, {\n \"x\": 277.8318977355957,\n \"y\": 246.95331573486328,\n \"z\": 68.20805549621582,\n \"name\": \"faceOval\"\n }, {\n \"x\": 336.6680908203125,\n \"y\": 238.10003757476807,\n \"z\": 0.7688578963279724\n }, {\n \"x\": 329.95800018310547,\n \"y\": 269.18323516845703,\n \"z\": -7.207130789756775\n }, {\n \"x\": 299.17491912841797,\n \"y\": 234.13324356079102,\n \"z\": 15.95489501953125\n }, {\n \"x\": 335.61729431152344,\n \"y\": 258.71752738952637,\n \"z\": -23.016133308410645\n }, {\n \"x\": 284.1079330444336,\n \"y\": 297.0343494415283,\n \"z\": 63.25934886932373,\n \"name\": \"faceOval\"\n }, {\n \"x\": 331.44542694091797,\n \"y\": 230.6892442703247,\n \"z\": 9.92658257484436,\n \"name\": \"rightEye\"\n }, {\n \"x\": 341.41536712646484,\n \"y\": 253.01264762878418,\n \"z\": -29.038610458374023\n }, {\n \"x\": 303.5472869873047,\n \"y\": 327.5896739959717,\n \"z\": 16.725212335586548\n }, {\n \"x\": 304.7756576538086,\n \"y\": 337.4389457702637,\n \"z\": 27.38126277923584,\n \"name\": \"faceOval\"\n }, {\n \"x\": 280.80501556396484,\n \"y\": 275.32050132751465,\n \"z\": 45.0752067565918\n }, {\n \"x\": 295.43582916259766,\n \"y\": 318.4501647949219,\n \"z\": 26.2608003616333\n }, {\n \"x\": 281.4303207397461,\n \"y\": 228.7355661392212,\n \"z\": 40.94350814819336\n }, {\n \"x\": 331.2549591064453,\n \"y\": 349.4216537475586,\n \"z\": -7.376367449760437\n }, {\n \"x\": 352.4247741699219,\n \"y\": 271.7330074310303,\n \"z\": -24.953596591949463\n }, {\n \"x\": 327.5672912597656,\n \"y\": 260.41900634765625,\n \"z\": -5.456410646438599\n }, {\n \"x\": 284.5432472229004,\n \"y\": 241.7647933959961,\n \"z\": 29.668869972229004\n }, {\n \"x\": 310,\n \"y\": 235.66174507141113,\n \"z\": 8.502663969993591,\n \"name\": \"rightEye\"\n }, {\n \"x\": 315.7071113586426,\n \"y\": 235.7572603225708,\n \"z\": 6.938687562942505,\n \"name\": \"rightEye\"\n }, {\n \"x\": 330.41088104248047,\n \"y\": 311.04143142700195,\n \"z\": -9.325502514839172,\n \"name\": \"lips\"\n }, {\n \"x\": 288.5377502441406,\n \"y\": 285.31983375549316,\n \"z\": 21.837315559387207\n }, {\n \"x\": 344.55039978027344,\n \"y\": 359.4300842285156,\n \"z\": -6.705257892608643,\n \"name\": \"faceOval\"\n }, {\n \"x\": 323.41880798339844,\n \"y\": 351.67362213134766,\n \"z\": 7.802375555038452,\n \"name\": \"faceOval\"\n }, {\n \"x\": 314.64088439941406,\n \"y\": 346.11894607543945,\n \"z\": 16.36339783668518,\n \"name\": \"faceOval\"\n }, {\n \"x\": 349.4945526123047,\n \"y\": 184.8434829711914,\n \"z\": -0.21847527474164963\n }, {\n \"x\": 359.24694061279297,\n \"y\": 359.8348903656006,\n \"z\": -8.403456211090088,\n \"name\": \"faceOval\"\n }, {\n \"x\": 321.26182556152344,\n \"y\": 234.64492321014404,\n \"z\": 6.90950870513916,\n \"name\": \"rightEye\"\n }, {\n \"x\": 326.318359375,\n \"y\": 232.90250301361084,\n \"z\": 8.029969334602356,\n \"name\": \"rightEye\"\n }, {\n \"x\": 329.6211624145508,\n \"y\": 231.6195774078369,\n \"z\": 9.722331762313843,\n \"name\": \"rightEye\"\n }, {\n \"x\": 285.9398078918457,\n \"y\": 228.2351303100586,\n \"z\": 24.650139808654785\n }, {\n \"x\": 325.79288482666016,\n \"y\": 227.88007736206055,\n \"z\": 7.469738721847534,\n \"name\": \"rightEye\"\n }, {\n \"x\": 320.1699447631836,\n \"y\": 227.5934886932373,\n \"z\": 6.168370842933655,\n \"name\": \"rightEye\"\n }, {\n \"x\": 314.85408782958984,\n \"y\": 227.85282611846924,\n \"z\": 6.2675780057907104,\n \"name\": \"rightEye\"\n }, {\n \"x\": 309.3084907531738,\n \"y\": 229.1516876220703,\n \"z\": 7.7031683921813965,\n \"name\": \"rightEye\"\n }, {\n \"x\": 305.5621337890625,\n \"y\": 230.92366218566895,\n \"z\": 9.722331762313843,\n \"name\": \"rightEye\"\n }, {\n \"x\": 277.8681945800781,\n \"y\": 228.5354232788086,\n \"z\": 59.71122741699219,\n \"name\": \"faceOval\"\n }, {\n \"x\": 306.1444664001465,\n \"y\": 235.1954698562622,\n \"z\": 10.603528022766113,\n \"name\": \"rightEye\"\n }, {\n \"x\": 355.4478454589844,\n \"y\": 281.96210861206055,\n \"z\": -20.565123558044434\n }, {\n \"x\": 333.02661895751953,\n \"y\": 288.0105400085449,\n \"z\": -14.72939133644104\n }, {\n \"x\": 337.15728759765625,\n \"y\": 269.2059516906738,\n \"z\": -19.8414945602417\n }, {\n \"x\": 345.9898376464844,\n \"y\": 283.5453128814697,\n \"z\": -20.4834246635437\n }, {\n \"x\": 351.48963928222656,\n \"y\": 219.98916149139404,\n \"z\": -7.0378947257995605\n }, {\n \"x\": 312.39574432373047,\n \"y\": 336.50628089904785,\n \"z\": 8.671900033950806\n }, {\n \"x\": 321.32152557373047,\n \"y\": 343.1755256652832,\n \"z\": 0.9067271649837494\n }, {\n \"x\": 343.78379821777344,\n \"y\": 353.2975959777832,\n \"z\": -14.355905055999756\n }, {\n \"x\": 296.8791389465332,\n \"y\": 327.91497230529785,\n \"z\": 41.01353645324707,\n \"name\": \"faceOval\"\n }, {\n \"x\": 329.6939468383789,\n \"y\": 229.27897453308105,\n \"z\": 8.934508562088013,\n \"name\": \"rightEye\"\n }, {\n \"x\": 341.6905212402344,\n \"y\": 241.4073657989502,\n \"z\": -14.589333534240723\n }, {\n \"x\": 359.03079986572266,\n \"y\": 353.48859786987305,\n \"z\": -15.803166627883911\n }, {\n \"x\": 333.1861877441406,\n \"y\": 356.43213272094727,\n \"z\": -1.0234417766332626,\n \"name\": \"faceOval\"\n }, {\n \"x\": 283.97483825683594,\n \"y\": 291.4318656921387,\n \"z\": 41.94725513458252\n }, {\n \"x\": 343.33770751953125,\n \"y\": 305.830135345459,\n \"z\": -15.756480693817139,\n \"name\": \"lips\"\n }, {\n \"x\": 342.40283966064453,\n \"y\": 307.7453899383545,\n \"z\": -17.4021577835083\n }, {\n \"x\": 341.53621673583984,\n \"y\": 311.0595703125,\n \"z\": -19.047834873199463\n }, {\n \"x\": 340.9107208251953,\n \"y\": 315.4837703704834,\n \"z\": -18.5576331615448,\n \"name\": \"lips\"\n }, {\n \"x\": 339.1478729248047,\n \"y\": 323.42233657836914,\n \"z\": -14.367576837539673\n }, {\n \"x\": 333.3201599121094,\n \"y\": 307.4406337738037,\n \"z\": -9.617288708686829\n }, {\n \"x\": 331.2411117553711,\n \"y\": 306.9811820983887,\n \"z\": -9.669809937477112\n }, {\n \"x\": 329.23255920410156,\n \"y\": 306.0508346557617,\n \"z\": -9.582273960113525,\n \"name\": \"lips\"\n }, {\n \"x\": 322.4586486816406,\n \"y\": 301.33323669433594,\n \"z\": -7.720675468444824\n }, {\n \"x\": 297.1712112426758,\n \"y\": 286.9552803039551,\n \"z\": 8.240055441856384\n }, {\n \"x\": 341.3060760498047,\n \"y\": 235.4432201385498,\n \"z\": -7.504753470420837\n }, {\n \"x\": 336.9318389892578,\n \"y\": 224.3451976776123,\n \"z\": 5.829898118972778\n }, {\n \"x\": 332.65323638916016,\n \"y\": 226.70403957366943,\n \"z\": 8.105834126472473\n }, {\n \"x\": 334.67357635498047,\n \"y\": 306.4397621154785,\n \"z\": -8.981193900108337,\n \"name\": \"lips\"\n }, {\n \"x\": 297.4601936340332,\n \"y\": 306.29210472106934,\n \"z\": 15.476365089416504\n }, {\n \"x\": 342.9119110107422,\n \"y\": 222.37077713012695,\n \"z\": -2.754466235637665\n }, {\n \"x\": 335.4629898071289,\n \"y\": 332.20250129699707,\n \"z\": -11.823196411132812\n }, {\n \"x\": 353.2412338256836,\n \"y\": 240.56339263916016,\n \"z\": -27.147831916809082\n }, {\n \"x\": 346.3080596923828,\n \"y\": 236.41446590423584,\n \"z\": -18.452589511871338\n }, {\n \"x\": 352.6475143432617,\n \"y\": 234.1420555114746,\n \"z\": -19.748122692108154\n }, {\n \"x\": 337.3209762573242,\n \"y\": 253.39937210083008,\n \"z\": -16.024924516677856\n }, {\n \"x\": 358.6122131347656,\n \"y\": 344.90861892700195,\n \"z\": -18.592647314071655\n }, {\n \"x\": 358.1117248535156,\n \"y\": 334.64990615844727,\n \"z\": -17.49552845954895\n }, {\n \"x\": 346.4450454711914,\n \"y\": 335.0321102142334,\n \"z\": -16.32838249206543\n }, {\n \"x\": 319.17640686035156,\n \"y\": 320.2833938598633,\n \"z\": -3.276764452457428\n }, {\n \"x\": 325.2540588378906,\n \"y\": 276.2369728088379,\n \"z\": -6.460157036781311\n }, {\n \"x\": 326.7214584350586,\n \"y\": 327.3939514160156,\n \"z\": -7.417217493057251\n }, {\n \"x\": 310.7190132141113,\n \"y\": 277.2265148162842,\n \"z\": -3.5452082753181458\n }, {\n \"x\": 319.78355407714844,\n \"y\": 284.8238182067871,\n \"z\": -6.4543211460113525\n }, {\n \"x\": 305.773983001709,\n \"y\": 290.83580017089844,\n \"z\": 0.06907138042151928\n }, {\n \"x\": 344.4001770019531,\n \"y\": 344.85408782958984,\n \"z\": -16.946970224380493\n }, {\n \"x\": 333.1879425048828,\n \"y\": 258.74256134033203,\n \"z\": -11.90489649772644\n }, {\n \"x\": 313.80598068237305,\n \"y\": 327.08919525146484,\n \"z\": 2.2277912497520447\n }, {\n \"x\": 322.9637908935547,\n \"y\": 334.6819496154785,\n \"z\": -3.3643004298210144\n }, {\n \"x\": 313.4055519104004,\n \"y\": 311.2166690826416,\n \"z\": -1.1175429821014404\n }, {\n \"x\": 291.0865783691406,\n \"y\": 298.2831001281738,\n \"z\": 22.467575073242188\n }, {\n \"x\": 305.6580924987793,\n \"y\": 313.3707904815674,\n \"z\": 5.561453700065613\n }, {\n \"x\": 288.23760986328125,\n \"y\": 305.9941864013672,\n \"z\": 36.765122413635254\n }, {\n \"x\": 315.10692596435547,\n \"y\": 296.26991271972656,\n \"z\": -4.604393839836121\n }, {\n \"x\": 337.50518798828125,\n \"y\": 247.5944423675537,\n \"z\": -10.597691535949707\n }, {\n \"x\": 338.8450622558594,\n \"y\": 265.47778129577637,\n \"z\": -27.778091430664062\n }, {\n \"x\": 334.25254821777344,\n \"y\": 269.0671920776367,\n \"z\": -20.938611030578613\n }, {\n \"x\": 341.64512634277344,\n \"y\": 259.6387195587158,\n \"z\": -32.189905643463135\n }, {\n \"x\": 331.44081115722656,\n \"y\": 219.0976095199585,\n \"z\": 4.207563698291779\n }, {\n \"x\": 320.56339263916016,\n \"y\": 216.49658203125,\n \"z\": 2.930997312068939\n }, {\n \"x\": 311.21912002563477,\n \"y\": 216.57853603363037,\n \"z\": 2.9674705862998962\n }, {\n \"x\": 303.46256256103516,\n \"y\": 218.54614734649658,\n \"z\": 5.357203483581543\n }, {\n \"x\": 297.99999237060547,\n \"y\": 222.505202293396,\n \"z\": 9.325502514839172\n }, {\n \"x\": 294.93839263916016,\n \"y\": 236.39654159545898,\n \"z\": 18.534289598464966\n }, {\n \"x\": 278.87489318847656,\n \"y\": 259.7095584869385,\n \"z\": 45.68212032318115\n }, {\n \"x\": 300.3782653808594,\n \"y\": 245.38593292236328,\n \"z\": 12.278382778167725\n }, {\n \"x\": 307.06348419189453,\n \"y\": 246.36857986450195,\n \"z\": 8.164191246032715\n }, {\n \"x\": 315.5229187011719,\n \"y\": 245.3949737548828,\n \"z\": 5.503097176551819\n }, {\n \"x\": 323.71395111083984,\n \"y\": 242.75178909301758,\n \"z\": 4.6335723996162415\n }, {\n \"x\": 330.2785873413086,\n \"y\": 239.34658527374268,\n \"z\": 4.937030673027039\n }, {\n \"x\": 334.6982192993164,\n \"y\": 236.0460376739502,\n \"z\": 4.823233783245087\n }, {\n \"x\": 279.3412208557129,\n \"y\": 263.5196113586426,\n \"z\": 70.91583728790283,\n \"name\": \"faceOval\"\n }, {\n \"x\": 334.65972900390625,\n \"y\": 271.6648578643799,\n \"z\": -17.775644063949585\n }, {\n \"x\": 342.05677032470703,\n \"y\": 246.99846267700195,\n \"z\": -20.84523916244507\n }, {\n \"x\": 344.0357971191406,\n \"y\": 264.5701503753662,\n \"z\": -32.936880588531494\n }, {\n \"x\": 348.25531005859375,\n \"y\": 268.6645030975342,\n \"z\": -30.695960521697998\n }, {\n \"x\": 344.12227630615234,\n \"y\": 266.34212493896484,\n \"z\": -29.808926582336426\n }, {\n \"x\": 337.12318420410156,\n \"y\": 274.2556858062744,\n \"z\": -15.768152475357056\n }, {\n \"x\": 349.49047088623047,\n \"y\": 269.071683883667,\n \"z\": -32.51670837402344\n }, {\n \"x\": 350.1683044433594,\n \"y\": 271.4691352844238,\n \"z\": -24.93025302886963\n }, {\n \"x\": 333.9634704589844,\n \"y\": 230.56639194488525,\n \"z\": 8.89949381351471\n }, {\n \"x\": 338.2147979736328,\n \"y\": 231.4807891845703,\n \"z\": 4.6715047955513\n }, {\n \"x\": 340.4712677001953,\n \"y\": 231.74463272094727,\n \"z\": -0.34996166825294495\n }, {\n \"x\": 303.28975677490234,\n \"y\": 232.24980354309082,\n \"z\": 11.916568279266357,\n \"name\": \"rightEye\"\n }, {\n \"x\": 299.4649124145508,\n \"y\": 229.53842639923096,\n \"z\": 12.325069904327393\n }, {\n \"x\": 359.09618377685547,\n \"y\": 241.77349090576172,\n \"z\": -24.650139808654785\n }, {\n \"x\": 399.46216583251953,\n \"y\": 229.89503860473633,\n \"z\": 15.919880867004395,\n \"name\": \"leftEye\"\n }, {\n \"x\": 361.38919830322266,\n \"y\": 269.6129894256592,\n \"z\": -24.510080814361572\n }, {\n \"x\": 416.9973373413086,\n \"y\": 206.0895538330078,\n \"z\": 53.26857566833496,\n \"name\": \"faceOval\"\n }, {\n \"x\": 381.32179260253906,\n \"y\": 235.5476474761963,\n \"z\": 7.6214683055877686\n }, {\n \"x\": 387.8068542480469,\n \"y\": 236.25958442687988,\n \"z\": 8.345099091529846\n }, {\n \"x\": 393.95751953125,\n \"y\": 235.8660364151001,\n \"z\": 10.475142002105713\n }, {\n \"x\": 401.84600830078125,\n \"y\": 232.77019500732422,\n \"z\": 16.760226488113403\n }, {\n \"x\": 375.70568084716797,\n \"y\": 233.48456382751465,\n \"z\": 8.234220147132874\n }, {\n \"x\": 388.17752838134766,\n \"y\": 218.94717693328857,\n \"z\": 6.810300946235657\n }, {\n \"x\": 381.64928436279297,\n \"y\": 219.2656660079956,\n \"z\": 6.711093783378601\n }, {\n \"x\": 394.4760513305664,\n \"y\": 219.66821193695068,\n \"z\": 9.173773527145386\n }, {\n \"x\": 398.8843536376953,\n \"y\": 221.8837022781372,\n \"z\": 12.03328251838684\n }, {\n \"x\": 406.5454864501953,\n \"y\": 237.12156772613525,\n \"z\": 19.7131085395813\n }, {\n \"x\": 383.87447357177734,\n \"y\": 337.6932907104492,\n \"z\": -8.631049990653992\n }, {\n \"x\": 401.2682342529297,\n \"y\": 228.5916566848755,\n \"z\": 18.359217643737793,\n \"name\": \"leftEye\"\n }, {\n \"x\": 422.0449447631836,\n \"y\": 236.73934936523438,\n \"z\": 51.16771221160889\n }, {\n \"x\": 412.69153594970703,\n \"y\": 232.80198097229004,\n \"z\": 27.52131938934326\n }, {\n \"x\": 387.3497772216797,\n \"y\": 263.298397064209,\n \"z\": -2.8609684109687805\n }, {\n \"x\": 364.5124053955078,\n \"y\": 293.39221000671387,\n \"z\": -22.397546768188477,\n \"name\": \"lips\"\n }, {\n \"x\": 363.62987518310547,\n \"y\": 302.1291446685791,\n \"z\": -19.643079042434692\n }, {\n \"x\": 373.2334518432617,\n \"y\": 295.8647060394287,\n \"z\": -18.125789165496826,\n \"name\": \"lips\"\n }, {\n \"x\": 378.83365631103516,\n \"y\": 299.5177745819092,\n \"z\": -13.153743743896484,\n \"name\": \"lips\"\n }, {\n \"x\": 369.91477966308594,\n \"y\": 302.5704002380371,\n \"z\": -16.65518283843994\n }, {\n \"x\": 374.9167251586914,\n \"y\": 303.5416603088379,\n \"z\": -11.963253021240234\n }, {\n \"x\": 387.58888244628906,\n \"y\": 312.2716999053955,\n \"z\": -4.680258631706238\n }, {\n \"x\": 360.6635284423828,\n \"y\": 264.31986808776855,\n \"z\": -35.94811677932739\n }, {\n \"x\": 361.04564666748047,\n \"y\": 256.8225860595703,\n \"z\": -37.278664112091064\n }, {\n \"x\": 408.3855438232422,\n \"y\": 213.52088928222656,\n \"z\": 15.756480693817139,\n \"name\": \"leftEyebrow\"\n }, {\n \"x\": 373.2946014404297,\n \"y\": 245.38101196289062,\n \"z\": -1.9316278398036957\n }, {\n \"x\": 376.83860778808594,\n \"y\": 264.3721103668213,\n \"z\": -18.510947227478027\n }, {\n \"x\": 376.9546127319336,\n \"y\": 261.0010528564453,\n \"z\": -15.989909172058105\n }, {\n \"x\": 406.1498260498047,\n \"y\": 263.5030174255371,\n \"z\": 7.072908878326416\n }, {\n \"x\": 360.07205963134766,\n \"y\": 248.3631706237793,\n \"z\": -32.16656446456909\n }, {\n \"x\": 393.11119079589844,\n \"y\": 205.10473251342773,\n \"z\": 3.7786373496055603,\n \"name\": \"leftEyebrow\"\n }, {\n \"x\": 402.12791442871094,\n \"y\": 207.89000988006592,\n \"z\": 9.383859634399414,\n \"name\": \"leftEyebrow\"\n }, {\n \"x\": 410.8693313598633,\n \"y\": 191.6182279586792,\n \"z\": 41.27030849456787,\n \"name\": \"faceOval\"\n }, {\n \"x\": 364.9509811401367,\n \"y\": 210.40483474731445,\n \"z\": -3.758212625980377\n }, {\n \"x\": 375.94444274902344,\n \"y\": 221.1331844329834,\n \"z\": 8.368442058563232\n }, {\n \"x\": 392.1904754638672,\n \"y\": 305.0360298156738,\n \"z\": -1.752179116010666\n }, {\n \"x\": 419.50225830078125,\n \"y\": 307.25592613220215,\n \"z\": 58.96425247192383,\n \"name\": \"faceOval\"\n }, {\n \"x\": 372.0027160644531,\n \"y\": 268.7212657928467,\n \"z\": -16.631840467453003\n }, {\n \"x\": 366.1614227294922,\n \"y\": 271.6237449645996,\n \"z\": -18.219159841537476\n }, {\n \"x\": 385.00938415527344,\n \"y\": 305.3863334655762,\n \"z\": -2.567722797393799\n }, {\n \"x\": 381.99771881103516,\n \"y\": 304.9723720550537,\n \"z\": -4.575215280056\n }, {\n \"x\": 405.078125,\n \"y\": 203.21216583251953,\n \"z\": 13.713973760604858,\n \"name\": \"leftEyebrow\"\n }, {\n \"x\": 377.13207244873047,\n \"y\": 268.4710121154785,\n \"z\": -15.266278982162476\n }, {\n \"x\": 380.9713363647461,\n \"y\": 205.36980628967285,\n \"z\": -0.7250899076461792,\n \"name\": \"leftEyebrow\"\n }, {\n \"x\": 381.7788314819336,\n \"y\": 198.9268398284912,\n \"z\": -1.184653863310814,\n \"name\": \"leftEyebrow\"\n }, {\n \"x\": 385.5204772949219,\n \"y\": 172.1484375,\n \"z\": 16.04826807975769,\n \"name\": \"faceOval\"\n }, {\n \"x\": 407.94189453125,\n \"y\": 196.76236152648926,\n \"z\": 25.723915100097656\n }, {\n \"x\": 383.03890228271484,\n \"y\": 184.5157527923584,\n \"z\": 7.393874526023865\n }, {\n \"x\": 411.61781311035156,\n \"y\": 210.79241752624512,\n \"z\": 22.315845489501953,\n \"name\": \"leftEyebrow\"\n }, {\n \"x\": 414.30870056152344,\n \"y\": 208.4643030166626,\n \"z\": 37.021894454956055\n }, {\n \"x\": 364.28722381591797,\n \"y\": 298.35777282714844,\n \"z\": -21.86065673828125\n }, {\n \"x\": 371.3682556152344,\n \"y\": 299.78848457336426,\n \"z\": -17.834001779556274\n }, {\n \"x\": 376.88201904296875,\n \"y\": 301.6696071624756,\n \"z\": -13.153743743896484\n }, {\n \"x\": 370.2193832397461,\n \"y\": 270.49095153808594,\n \"z\": -15.569736957550049\n }, {\n \"x\": 383.5081100463867,\n \"y\": 305.2726364135742,\n \"z\": -3.673594295978546\n }, {\n \"x\": 380.73760986328125,\n \"y\": 305.96869468688965,\n \"z\": -8.660228252410889\n }, {\n \"x\": 381.2334442138672,\n \"y\": 304.63574409484863,\n \"z\": -4.820316135883331,\n \"name\": \"lips\"\n }, {\n \"x\": 368.1698989868164,\n \"y\": 264.8884963989258,\n \"z\": -25.653886795043945\n }, {\n \"x\": 373.5087203979492,\n \"y\": 303.4233856201172,\n \"z\": -10.95950722694397,\n \"name\": \"lips\"\n }, {\n \"x\": 368.4544372558594,\n \"y\": 303.29601287841797,\n \"z\": -14.169161319732666,\n \"name\": \"lips\"\n }, {\n \"x\": 362.76554107666016,\n \"y\": 303.5735607147217,\n \"z\": -16.911956071853638,\n \"name\": \"lips\"\n }, {\n \"x\": 366.60980224609375,\n \"y\": 324.8870658874512,\n \"z\": -15.616422891616821\n }, {\n \"x\": 365.7067108154297,\n \"y\": 315.95678329467773,\n \"z\": -20.903596878051758,\n \"name\": \"lips\"\n }, {\n \"x\": 365.0083923339844,\n \"y\": 311.2232208251953,\n \"z\": -21.066999435424805\n }, {\n \"x\": 364.1508102416992,\n \"y\": 307.0583438873291,\n \"z\": -18.907777070999146\n }, {\n \"x\": 363.37512969970703,\n \"y\": 304.5721435546875,\n \"z\": -17.42550015449524,\n \"name\": \"lips\"\n }, {\n \"x\": 374.580078125,\n \"y\": 304.3059539794922,\n \"z\": -11.40302300453186,\n \"name\": \"lips\"\n }, {\n \"x\": 375.55362701416016,\n \"y\": 305.0998020172119,\n \"z\": -12.861957550048828\n }, {\n \"x\": 377.2437286376953,\n \"y\": 307.1674346923828,\n \"z\": -14.215847253799438\n }, {\n \"x\": 378.68587493896484,\n \"y\": 309.9015712738037,\n \"z\": -13.223772048950195,\n \"name\": \"lips\"\n }, {\n \"x\": 383.8992691040039,\n \"y\": 290.29629707336426,\n \"z\": -9.97326910495758\n }, {\n \"x\": 423.3871841430664,\n \"y\": 271.91688537597656,\n \"z\": 74.37058925628662,\n \"name\": \"faceOval\"\n }, {\n \"x\": 377.68043518066406,\n \"y\": 304.62209701538086,\n \"z\": -7.603961229324341,\n \"name\": \"lips\"\n }, {\n \"x\": 379.00428771972656,\n \"y\": 304.9314594268799,\n \"z\": -8.57852816581726\n }, {\n \"x\": 364.00279998779297,\n \"y\": 275.2813911437988,\n \"z\": -19.25792098045349\n }, {\n \"x\": 374.68231201171875,\n \"y\": 273.82555961608887,\n \"z\": -11.28047227859497\n }, {\n \"x\": 365.0354766845703,\n \"y\": 273.4548568725586,\n \"z\": -18.791062831878662\n }, {\n \"x\": 380.61901092529297,\n \"y\": 249.8848056793213,\n \"z\": 0.15501167625188828\n }, {\n \"x\": 391.14158630371094,\n \"y\": 254.7934627532959,\n \"z\": 2.0906515419483185\n }, {\n \"x\": 378.1761169433594,\n \"y\": 264.9612236022949,\n \"z\": -12.605184316635132\n }, {\n \"x\": 400.9540557861328,\n \"y\": 179.99592304229736,\n \"z\": 27.82477855682373,\n \"name\": \"faceOval\"\n }, {\n \"x\": 398.0038833618164,\n \"y\": 188.50656509399414,\n \"z\": 16.094952821731567\n }, {\n \"x\": 394.8717498779297,\n \"y\": 199.0359592437744,\n \"z\": 6.226727366447449,\n \"name\": \"leftEyebrow\"\n }, {\n \"x\": 382.10926055908203,\n \"y\": 316.83926582336426,\n \"z\": -8.946179747581482\n }, {\n \"x\": 366.51588439941406,\n \"y\": 200.32583713531494,\n \"z\": -5.24632453918457,\n \"name\": \"leftEyebrow\"\n }, {\n \"x\": 367.4893569946289,\n \"y\": 183.87210845947266,\n \"z\": 1.9039081037044525\n }, {\n \"x\": 368.6243438720703,\n \"y\": 168.8127565383911,\n \"z\": 8.736093044281006,\n \"name\": \"faceOval\"\n }, {\n \"x\": 398.96175384521484,\n \"y\": 234.9675178527832,\n \"z\": 13.713973760604858\n }, {\n \"x\": 412.9645538330078,\n \"y\": 242.23042488098145,\n \"z\": 23.272905349731445\n }, {\n \"x\": 372.05257415771484,\n \"y\": 231.41919136047363,\n \"z\": 9.226294755935669\n }, {\n \"x\": 406.0722351074219,\n \"y\": 223.58965873718262,\n \"z\": 18.370890617370605\n }, {\n \"x\": 368.27442169189453,\n \"y\": 240.2039337158203,\n \"z\": -4.166713654994965\n }, {\n \"x\": 372.3575210571289,\n \"y\": 260.66442489624023,\n \"z\": -24.976940155029297\n }, {\n \"x\": 419.2244338989258,\n \"y\": 247.9079246520996,\n \"z\": 30.299127101898193\n }, {\n \"x\": 409.43885803222656,\n \"y\": 246.60913467407227,\n \"z\": 16.398411989212036\n }, {\n \"x\": 401.69139862060547,\n \"y\": 248.76328468322754,\n \"z\": 9.395531415939331\n }, {\n \"x\": 389.7608184814453,\n \"y\": 247.56915092468262,\n \"z\": 5.841569304466248\n }, {\n \"x\": 380.5461883544922,\n \"y\": 244.55984115600586,\n \"z\": 4.263003468513489\n }, {\n \"x\": 373.25817108154297,\n \"y\": 240.80214500427246,\n \"z\": 2.5356262922286987\n }, {\n \"x\": 358.77086639404297,\n \"y\": 229.35615062713623,\n \"z\": -10.387605428695679\n }, {\n \"x\": 419.5793914794922,\n \"y\": 262.8478717803955,\n \"z\": 26.5175724029541\n }, {\n \"x\": 410.8808898925781,\n \"y\": 222.51372814178467,\n \"z\": 22.199130058288574\n }, {\n \"x\": 358.45714569091797,\n \"y\": 268.91467094421387,\n \"z\": -33.17030906677246\n }, {\n \"x\": 373.4129333496094,\n \"y\": 251.6385841369629,\n \"z\": -5.771540403366089\n }, {\n \"x\": 422.5408172607422,\n \"y\": 239.23919677734375,\n \"z\": 74.04378890991211,\n \"name\": \"faceOval\"\n }, {\n \"x\": 367.8171920776367,\n \"y\": 236.58040523529053,\n \"z\": 1.820748895406723\n }, {\n \"x\": 378.51959228515625,\n \"y\": 266.2532329559326,\n \"z\": -5.74819803237915\n }, {\n \"x\": 403.3472442626953,\n \"y\": 229.05112266540527,\n \"z\": 19.689764976501465\n }, {\n \"x\": 372.34840393066406,\n \"y\": 256.6451168060303,\n \"z\": -21.872329711914062\n }, {\n \"x\": 422.54566192626953,\n \"y\": 289.1587829589844,\n \"z\": 68.67491245269775,\n \"name\": \"faceOval\"\n }, {\n \"x\": 371.9297409057617,\n \"y\": 228.90116214752197,\n \"z\": 11.432201862335205,\n \"name\": \"leftEye\"\n }, {\n \"x\": 366.21360778808594,\n \"y\": 251.6158962249756,\n \"z\": -28.19826364517212\n }, {\n \"x\": 409.1571807861328,\n \"y\": 321.3156223297119,\n \"z\": 20.2266526222229\n }, {\n \"x\": 408.52943420410156,\n \"y\": 331.44238471984863,\n \"z\": 31.09278917312622,\n \"name\": \"faceOval\"\n }, {\n \"x\": 424.2788314819336,\n \"y\": 267.1992301940918,\n \"z\": 50.467424392700195\n }, {\n \"x\": 415.60352325439453,\n \"y\": 311.6528606414795,\n \"z\": 30.579242706298828\n }, {\n \"x\": 418.12793731689453,\n \"y\": 221.59927368164062,\n \"z\": 46.26569747924805\n }, {\n \"x\": 385.68286895751953,\n \"y\": 346.0184955596924,\n \"z\": -5.70151150226593\n }, {\n \"x\": 357.82936096191406,\n \"y\": 271.3758373260498,\n \"z\": -24.836881160736084\n }, {\n \"x\": 379.588623046875,\n \"y\": 257.5071716308594,\n \"z\": -3.755294680595398\n }, {\n \"x\": 417.4592590332031,\n \"y\": 234.71948146820068,\n \"z\": 34.5475435256958\n }, {\n \"x\": 393.4684371948242,\n \"y\": 231.58967971801758,\n \"z\": 11.408859491348267,\n \"name\": \"leftEye\"\n }, {\n \"x\": 387.8864288330078,\n \"y\": 232.14245796203613,\n \"z\": 9.51808214187622,\n \"name\": \"leftEye\"\n }, {\n \"x\": 382.4981689453125,\n \"y\": 307.5654888153076,\n \"z\": -7.522260546684265,\n \"name\": \"lips\"\n }, {\n \"x\": 419.00169372558594,\n \"y\": 277.8332805633545,\n \"z\": 26.424202919006348\n }, {\n \"x\": 373.62953186035156,\n \"y\": 357.6375102996826,\n \"z\": -5.75986921787262,\n \"name\": \"faceOval\"\n }, {\n \"x\": 392.8708267211914,\n \"y\": 347.72446632385254,\n \"z\": 10.154176950454712,\n \"name\": \"faceOval\"\n }, {\n \"x\": 400.3953552246094,\n \"y\": 341.0005187988281,\n \"z\": 19.39797878265381,\n \"name\": \"faceOval\"\n }, {\n \"x\": 382.25440979003906,\n \"y\": 231.66935920715332,\n \"z\": 8.998700976371765,\n \"name\": \"leftEye\"\n }, {\n \"x\": 377.14550018310547,\n \"y\": 230.4228687286377,\n \"z\": 9.804032444953918,\n \"name\": \"leftEye\"\n }, {\n \"x\": 373.8358688354492,\n \"y\": 229.64950561523438,\n \"z\": 11.292144060134888,\n \"name\": \"leftEye\"\n }, {\n \"x\": 414.5794677734375,\n \"y\": 221.67891025543213,\n \"z\": 29.412097930908203\n }, {\n \"x\": 377.00672149658203,\n \"y\": 225.66201210021973,\n \"z\": 9.360517263412476,\n \"name\": \"leftEye\"\n }, {\n \"x\": 382.29530334472656,\n \"y\": 224.8431158065796,\n \"z\": 8.32175612449646,\n \"name\": \"leftEye\"\n }, {\n \"x\": 387.5133514404297,\n \"y\": 224.49507236480713,\n \"z\": 8.917000889778137,\n \"name\": \"leftEye\"\n }, {\n \"x\": 393.15906524658203,\n \"y\": 225.24795055389404,\n \"z\": 10.737749338150024,\n \"name\": \"leftEye\"\n }, {\n \"x\": 397.05554962158203,\n \"y\": 226.55359268188477,\n \"z\": 13.002015352249146,\n \"name\": \"leftEye\"\n }, {\n \"x\": 420.5299377441406,\n \"y\": 221.014666557312,\n \"z\": 65.40690422058105,\n \"name\": \"faceOval\"\n }, {\n \"x\": 397.06920623779297,\n \"y\": 230.6661558151245,\n \"z\": 13.807345628738403,\n \"name\": \"leftEye\"\n }, {\n \"x\": 377.94647216796875,\n \"y\": 285.1647090911865,\n \"z\": -13.305472135543823\n }, {\n \"x\": 372.1118927001953,\n \"y\": 267.1267318725586,\n \"z\": -18.83774757385254\n }, {\n \"x\": 364.9968719482422,\n \"y\": 282.24411964416504,\n \"z\": -19.818150997161865\n }, {\n \"x\": 401.973876953125,\n \"y\": 331.20131492614746,\n \"z\": 11.566424369812012\n }, {\n \"x\": 394.3083190917969,\n \"y\": 338.86693954467773,\n \"z\": 3.142542541027069\n }, {\n \"x\": 373.9820861816406,\n \"y\": 351.4504623413086,\n \"z\": -13.50388765335083\n }, {\n \"x\": 414.3888854980469,\n \"y\": 321.24735832214355,\n \"z\": 45.51872253417969,\n \"name\": \"faceOval\"\n }, {\n \"x\": 373.44234466552734,\n \"y\": 227.33163356781006,\n \"z\": 10.626870393753052,\n \"name\": \"leftEye\"\n }, {\n \"x\": 364.0731430053711,\n \"y\": 240.31539916992188,\n \"z\": -13.807345628738403\n }, {\n \"x\": 384.2658233642578,\n \"y\": 353.3793067932129,\n \"z\": 0.7385850697755814,\n \"name\": \"faceOval\"\n }, {\n \"x\": 423.20526123046875,\n \"y\": 283.5176181793213,\n \"z\": 47.152724266052246\n }, {\n \"x\": 369.42798614501953,\n \"y\": 304.0898895263672,\n \"z\": -14.647691249847412,\n \"name\": \"lips\"\n }, {\n \"x\": 370.63812255859375,\n \"y\": 305.90051651000977,\n \"z\": -16.211668252944946\n }, {\n \"x\": 371.91192626953125,\n \"y\": 309.0167713165283,\n \"z\": -17.84567356109619\n }, {\n \"x\": 373.0583953857422,\n \"y\": 313.3545398712158,\n \"z\": -17.378815412521362,\n \"name\": \"lips\"\n }, {\n \"x\": 375.39905548095703,\n \"y\": 321.09289169311523,\n \"z\": -13.118728399276733\n }, {\n \"x\": 379.2567825317383,\n \"y\": 304.3582534790039,\n \"z\": -7.924926280975342\n }, {\n \"x\": 381.18797302246094,\n \"y\": 303.7031364440918,\n \"z\": -7.843226194381714\n }, {\n \"x\": 383.0918502807617,\n \"y\": 302.4884605407715,\n \"z\": -7.6506465673446655,\n \"name\": \"lips\"\n }, {\n \"x\": 389.09461975097656,\n \"y\": 297.1475315093994,\n \"z\": -5.5497825145721436\n }, {\n \"x\": 411.6408920288086,\n \"y\": 280.24898529052734,\n \"z\": 12.02161192893982\n }, {\n \"x\": 363.3110809326172,\n \"y\": 234.27620887756348,\n \"z\": -6.775286793708801\n }, {\n \"x\": 366.0474395751953,\n \"y\": 223.29872131347656,\n \"z\": 6.827808618545532\n }, {\n \"x\": 370.34427642822266,\n \"y\": 225.1457118988037,\n \"z\": 9.558931589126587\n }, {\n \"x\": 377.5371551513672,\n \"y\": 303.60079765319824,\n \"z\": -7.358860373497009,\n \"name\": \"lips\"\n }, {\n \"x\": 412.9557800292969,\n \"y\": 299.53579902648926,\n \"z\": 19.39797878265381\n }, {\n \"x\": 360.0810241699219,\n \"y\": 221.72012329101562,\n \"z\": -2.153385728597641\n }, {\n \"x\": 379.82784271240234,\n \"y\": 329.47723388671875,\n \"z\": -10.48097848892212\n }, {\n \"x\": 359.08477783203125,\n \"y\": 235.7911491394043,\n \"z\": -18.079102039337158\n }, {\n \"x\": 369.6688461303711,\n \"y\": 251.5407943725586,\n \"z\": -14.962821006774902\n }, {\n \"x\": 369.5555114746094,\n \"y\": 333.5307312011719,\n \"z\": -15.67478060722351\n }, {\n \"x\": 394.0193176269531,\n \"y\": 315.6973171234131,\n \"z\": -0.9920747578144073\n }, {\n \"x\": 383.78997802734375,\n \"y\": 272.7268695831299,\n \"z\": -4.689012169837952\n }, {\n \"x\": 387.67765045166016,\n \"y\": 323.6722755432129,\n \"z\": -5.640236139297485\n }, {\n \"x\": 397.8769302368164,\n \"y\": 272.1331214904785,\n \"z\": -0.9395531564950943\n }, {\n \"x\": 389.87476348876953,\n \"y\": 280.5630111694336,\n \"z\": -4.29218202829361\n }, {\n \"x\": 403.83888244628906,\n \"y\": 285.1167869567871,\n \"z\": 3.0229100584983826\n }, {\n \"x\": 372.5467300415039,\n \"y\": 343.1070327758789,\n \"z\": -16.153310537338257\n }, {\n \"x\": 374.1112518310547,\n \"y\": 256.3721466064453,\n \"z\": -10.574349164962769\n }, {\n \"x\": 399.73785400390625,\n \"y\": 321.77515983581543,\n \"z\": 4.849494695663452\n }, {\n \"x\": 392.03365325927734,\n \"y\": 330.56447982788086,\n \"z\": -1.3407598435878754\n }, {\n \"x\": 398.59134674072266,\n \"y\": 305.93902587890625,\n \"z\": 1.517290621995926\n }, {\n \"x\": 417.95997619628906,\n \"y\": 290.9716987609863,\n \"z\": 26.89105987548828\n }, {\n \"x\": 406.04541778564453,\n \"y\": 307.35154151916504,\n \"z\": 8.666064143180847\n }, {\n \"x\": 420.75328826904297,\n \"y\": 298.40752601623535,\n \"z\": 41.78385257720947\n }, {\n \"x\": 395.4522705078125,\n \"y\": 291.4153575897217,\n \"z\": -2.1752697229385376\n }, {\n \"x\": 368.6452102661133,\n \"y\": 245.8882999420166,\n \"z\": -9.453888535499573\n }, {\n \"x\": 370.34900665283203,\n \"y\": 263.56690406799316,\n \"z\": -26.75100326538086\n }, {\n \"x\": 374.98477935791016,\n \"y\": 266.6126346588135,\n \"z\": -19.77146625518799\n }, {\n \"x\": 366.99840545654297,\n \"y\": 258.12140464782715,\n \"z\": -31.372904777526855\n }, {\n \"x\": 371.00616455078125,\n \"y\": 217.63479709625244,\n \"z\": 5.60522198677063\n }, {\n \"x\": 381.30577087402344,\n \"y\": 214.14087295532227,\n \"z\": 4.983716309070587\n }, {\n \"x\": 390.1496124267578,\n \"y\": 213.38221549987793,\n \"z\": 5.593550801277161\n }, {\n \"x\": 397.7696990966797,\n \"y\": 214.3659782409668,\n \"z\": 8.57852816581726\n }, {\n \"x\": 403.1652069091797,\n \"y\": 217.65509605407715,\n \"z\": 13.013685941696167\n }, {\n \"x\": 407.3551940917969,\n \"y\": 230.72525024414062,\n \"z\": 22.444231510162354\n }, {\n \"x\": 424.0876770019531,\n \"y\": 251.7839241027832,\n \"z\": 51.16771221160889\n }, {\n \"x\": 403.50196838378906,\n \"y\": 239.88757610321045,\n \"z\": 15.803166627883911\n }, {\n \"x\": 397.31719970703125,\n \"y\": 241.49806022644043,\n \"z\": 11.233787536621094\n }, {\n \"x\": 388.99425506591797,\n \"y\": 241.4366912841797,\n \"z\": 7.948269248008728\n }, {\n \"x\": 380.7804489135742,\n \"y\": 239.78078842163086,\n \"z\": 6.600214838981628\n }, {\n \"x\": 374.01336669921875,\n \"y\": 237.11946487426758,\n \"z\": 6.349278092384338\n }, {\n \"x\": 369.39125061035156,\n \"y\": 234.35351371765137,\n \"z\": 5.987462401390076\n }, {\n \"x\": 422.9730987548828,\n \"y\": 255.76455116271973,\n \"z\": 76.61150932312012,\n \"name\": \"faceOval\"\n }, {\n \"x\": 374.73915100097656,\n \"y\": 269.24214363098145,\n \"z\": -16.608498096466064\n }, {\n \"x\": 364.61681365966797,\n \"y\": 245.71088790893555,\n \"z\": -20.02823829650879\n }, {\n \"x\": 365.3834533691406,\n \"y\": 263.34174156188965,\n \"z\": -32.32996463775635\n }, {\n \"x\": 361.58252716064453,\n \"y\": 267.8273677825928,\n \"z\": -30.345816612243652\n }, {\n \"x\": 365.37208557128906,\n \"y\": 265.0249671936035,\n \"z\": -29.178667068481445\n }, {\n \"x\": 372.72605895996094,\n \"y\": 272.05135345458984,\n \"z\": -14.834434986114502\n }, {\n \"x\": 360.48614501953125,\n \"y\": 268.34827423095703,\n \"z\": -32.189905643463135\n }, {\n \"x\": 359.9516296386719,\n \"y\": 270.8049201965332,\n \"z\": -24.650139808654785\n }, {\n \"x\": 369.5049285888672,\n \"y\": 229.01945114135742,\n \"z\": 10.107489824295044\n }, {\n \"x\": 365.5447769165039,\n \"y\": 230.24096488952637,\n \"z\": 5.593550801277161\n }, {\n \"x\": 363.50669860839844,\n \"y\": 230.6208372116089,\n \"z\": 0.43622106313705444\n }, {\n \"x\": 399.3529510498047,\n \"y\": 227.65677452087402,\n \"z\": 15.35965085029602,\n \"name\": \"leftEye\"\n }, {\n \"x\": 402.5693130493164,\n \"y\": 224.60190296173096,\n \"z\": 15.931552648544312\n }],\n \"box\": {\n \"xMin\": 277.8318977355957,\n \"yMin\": 168.7741756439209,\n \"xMax\": 424.2788314819336,\n \"yMax\": 359.8348903656006,\n \"width\": 146.4469337463379,\n \"height\": 191.0607147216797\n }\n },\n // Tasks-vision: https://developers.google.com/mediapipe/solutions/vision/face_landmarker/web_js\n // prettier-ignore\n SAMPLE_FACELANDMARKER_RESULT: {\n \"faceLandmarks\": [[{\n \"x\": 0.5760777592658997,\n \"y\": 0.8639070391654968,\n \"z\": -0.030997956171631813\n }, {\n \"x\": 0.572094738483429,\n \"y\": 0.7886289358139038,\n \"z\": -0.07189624011516571\n }, {\n \"x\": 0.5723551511764526,\n \"y\": 0.8075382709503174,\n \"z\": -0.03578168898820877\n }, {\n \"x\": 0.5548420548439026,\n \"y\": 0.7188365459442139,\n \"z\": -0.057787876576185226\n }, {\n \"x\": 0.5706077814102173,\n \"y\": 0.7674974799156189,\n \"z\": -0.07740399986505508\n }, {\n \"x\": 0.5681378245353699,\n \"y\": 0.7387768030166626,\n \"z\": -0.07356284558773041\n }, {\n \"x\": 0.5621535181999207,\n \"y\": 0.6681165099143982,\n \"z\": -0.04189874976873398\n }, {\n \"x\": 0.46613582968711853,\n \"y\": 0.6679812073707581,\n \"z\": 0.011289681307971478\n }, {\n \"x\": 0.5579932928085327,\n \"y\": 0.6174106597900391,\n \"z\": -0.03502821549773216\n }, {\n \"x\": 0.5563451647758484,\n \"y\": 0.5905600190162659,\n \"z\": -0.03928658738732338\n }, {\n \"x\": 0.5487832427024841,\n \"y\": 0.4900572597980499,\n \"z\": -0.029898937791585922\n }, {\n \"x\": 0.5765544176101685,\n \"y\": 0.8692144751548767,\n \"z\": -0.02831427752971649\n }, {\n \"x\": 0.5771114230155945,\n \"y\": 0.873644232749939,\n \"z\": -0.02345779910683632\n }, {\n \"x\": 0.5771905779838562,\n \"y\": 0.877016007900238,\n \"z\": -0.016658689826726913\n }, {\n \"x\": 0.5778058767318726,\n \"y\": 0.8770116567611694,\n \"z\": -0.014505492523312569\n }, {\n \"x\": 0.5783766508102417,\n \"y\": 0.8835000991821289,\n \"z\": -0.015996402129530907\n }, {\n \"x\": 0.5792440176010132,\n \"y\": 0.8913810849189758,\n \"z\": -0.01924579218029976\n }, {\n \"x\": 0.5796768069267273,\n \"y\": 0.8996334671974182,\n \"z\": -0.018261712044477463\n }, {\n \"x\": 0.5817288160324097,\n \"y\": 0.9255813956260681,\n \"z\": -0.007126849144697189\n }, {\n \"x\": 0.5726592540740967,\n \"y\": 0.7992473244667053,\n \"z\": -0.0643521398305893\n }, {\n \"x\": 0.5579419136047363,\n \"y\": 0.7996989488601685,\n \"z\": -0.04566684365272522\n }, {\n \"x\": 0.4216199815273285,\n \"y\": 0.5958762764930725,\n \"z\": 0.06776496022939682\n }, {\n \"x\": 0.5052269697189331,\n \"y\": 0.6796539425849915,\n \"z\": -0.0010737782577052712\n }, {\n \"x\": 0.49243026971817017,\n \"y\": 0.6838865876197815,\n \"z\": -0.0005227324436418712\n }, {\n \"x\": 0.4796970784664154,\n \"y\": 0.6856290102005005,\n \"z\": 0.002684245817363262\n }, {\n \"x\": 0.4618356227874756,\n \"y\": 0.6764569878578186,\n \"z\": 0.013439622707664967\n }, {\n \"x\": 0.5160380601882935,\n \"y\": 0.6737282276153564,\n \"z\": -0.000017607348127057776\n }, {\n \"x\": 0.48070961236953735,\n \"y\": 0.6255870461463928,\n \"z\": -0.008339674212038517\n }, {\n \"x\": 0.49719780683517456,\n \"y\": 0.6256808042526245,\n \"z\": -0.008027955889701843\n }, {\n \"x\": 0.46674346923828125,\n \"y\": 0.6317623853683472,\n \"z\": -0.004460199736058712\n }, {\n \"x\": 0.4582492709159851,\n \"y\": 0.641118049621582,\n \"z\": 0.0011905613355338573\n }, {\n \"x\": 0.45408669114112854,\n \"y\": 0.6911458969116211,\n \"z\": 0.020514748990535736\n }, {\n \"x\": 0.535312294960022,\n \"y\": 0.9619986414909363,\n \"z\": 0.012499462813138962\n }, {\n \"x\": 0.4608460068702698,\n \"y\": 0.6628725528717041,\n \"z\": 0.01517564244568348\n }, {\n \"x\": 0.4206731915473938,\n \"y\": 0.6828458309173584,\n \"z\": 0.07848648726940155\n }, {\n \"x\": 0.4390624463558197,\n \"y\": 0.6796106696128845,\n \"z\": 0.03283142298460007\n }, {\n \"x\": 0.5029968619346619,\n \"y\": 0.7701570391654968,\n \"z\": -0.009734481573104858\n }, {\n \"x\": 0.5595027208328247,\n \"y\": 0.8607323169708252,\n \"z\": -0.030043255537748337\n }, {\n \"x\": 0.5621269941329956,\n \"y\": 0.8738374710083008,\n \"z\": -0.021709579974412918\n }, {\n \"x\": 0.5451499819755554,\n \"y\": 0.865527331829071,\n \"z\": -0.022014077752828598\n }, {\n \"x\": 0.5351184010505676,\n \"y\": 0.8705098032951355,\n \"z\": -0.011602800339460373\n }, {\n \"x\": 0.5495014190673828,\n \"y\": 0.8744956254959106,\n \"z\": -0.016490943729877472\n }, {\n \"x\": 0.5395170450210571,\n \"y\": 0.8759440779685974,\n \"z\": -0.007333362940698862\n }, {\n \"x\": 0.5183624029159546,\n \"y\": 0.8959754705429077,\n \"z\": 0.010520773939788342\n }, {\n \"x\": 0.5604349374771118,\n \"y\": 0.7895449995994568,\n \"z\": -0.07082037627696991\n }, {\n \"x\": 0.557381272315979,\n \"y\": 0.7687489986419678,\n \"z\": -0.07590588927268982\n }, {\n \"x\": 0.4432901442050934,\n \"y\": 0.6308897733688354,\n \"z\": 0.0027153254486620426\n }, {\n \"x\": 0.5258325338363647,\n \"y\": 0.7151225805282593,\n \"z\": -0.014676518738269806\n }, {\n \"x\": 0.5271827578544617,\n \"y\": 0.7833116054534912,\n \"z\": -0.037643320858478546\n }, {\n \"x\": 0.5257382988929749,\n \"y\": 0.7717816233634949,\n \"z\": -0.03401920944452286\n }, {\n \"x\": 0.46516409516334534,\n \"y\": 0.7705106735229492,\n \"z\": 0.0065747760236263275\n }, {\n \"x\": 0.5558893084526062,\n \"y\": 0.7420997619628906,\n \"z\": -0.0694495290517807\n }, {\n \"x\": 0.4720408320426941,\n \"y\": 0.6066038608551025,\n \"z\": -0.021204356104135513\n }, {\n \"x\": 0.45432573556900024,\n \"y\": 0.6158540844917297,\n \"z\": -0.011054684408009052\n }, {\n \"x\": 0.4305151402950287,\n \"y\": 0.5608053803443909,\n \"z\": 0.0396830290555954\n }, {\n \"x\": 0.5310865640640259,\n \"y\": 0.6157484650611877,\n \"z\": -0.03081176057457924\n }, {\n \"x\": 0.5114666223526001,\n \"y\": 0.6329749226570129,\n \"z\": -0.00335998204536736\n }, {\n \"x\": 0.506435751914978,\n \"y\": 0.8786543607711792,\n \"z\": 0.012980876490473747\n }, {\n \"x\": 0.4480472207069397,\n \"y\": 0.8640613555908203,\n \"z\": 0.12569651007652283\n }, {\n \"x\": 0.5372058153152466,\n \"y\": 0.7942581176757812,\n \"z\": -0.03168361634016037\n }, {\n \"x\": 0.5488379597663879,\n \"y\": 0.8001630306243896,\n \"z\": -0.03280917927622795\n }, {\n \"x\": 0.5213388204574585,\n \"y\": 0.8794381618499756,\n \"z\": 0.011892606504261494\n }, {\n \"x\": 0.5242055654525757,\n \"y\": 0.8789222240447998,\n \"z\": 0.008370225317776203\n }, {\n \"x\": 0.4477175176143646,\n \"y\": 0.6039950251579285,\n \"z\": -0.0050799972377717495\n }, {\n \"x\": 0.526964008808136,\n \"y\": 0.7916748523712158,\n \"z\": -0.02968614175915718\n }, {\n \"x\": 0.4971255660057068,\n \"y\": 0.6050706505775452,\n \"z\": -0.028175678104162216\n }, {\n \"x\": 0.4938119053840637,\n \"y\": 0.5882453918457031,\n \"z\": -0.03210941329598427\n }, {\n \"x\": 0.4757143557071686,\n \"y\": 0.5094879865646362,\n \"z\": -0.01300730835646391\n }, {\n \"x\": 0.43947282433509827,\n \"y\": 0.5816648006439209,\n \"z\": 0.01415177434682846\n }, {\n \"x\": 0.485664039850235,\n \"y\": 0.5477864146232605,\n \"z\": -0.023685332387685776\n }, {\n \"x\": 0.43635931611061096,\n \"y\": 0.6226438283920288,\n \"z\": 0.013606148771941662\n }, {\n \"x\": 0.42910251021385193,\n \"y\": 0.6102726459503174,\n \"z\": 0.03926564007997513\n }, {\n \"x\": 0.5605402588844299,\n \"y\": 0.8680099248886108,\n \"z\": -0.027318159118294716\n }, {\n \"x\": 0.5474816560745239,\n \"y\": 0.8702861070632935,\n \"z\": -0.019686367362737656\n }, {\n \"x\": 0.5373021364212036,\n \"y\": 0.8728838562965393,\n \"z\": -0.010484928265213966\n }, {\n \"x\": 0.540735125541687,\n \"y\": 0.7979167103767395,\n \"z\": -0.029073253273963928\n }, {\n \"x\": 0.5228585004806519,\n \"y\": 0.87913578748703,\n \"z\": 0.009915109723806381\n }, {\n \"x\": 0.530497670173645,\n \"y\": 0.8815253973007202,\n \"z\": 0.0020524784922599792\n }, {\n \"x\": 0.5259912610054016,\n \"y\": 0.8790552616119385,\n \"z\": 0.007895970717072487\n }, {\n \"x\": 0.5433906316757202,\n \"y\": 0.7882310748100281,\n \"z\": -0.05121905356645584\n }, {\n \"x\": 0.541388213634491,\n \"y\": 0.8777219653129578,\n \"z\": -0.00466804439201951\n }, {\n \"x\": 0.5515822172164917,\n \"y\": 0.8767023086547852,\n \"z\": -0.010475946590304375\n }, {\n \"x\": 0.5637003779411316,\n \"y\": 0.877059817314148,\n \"z\": -0.015273625031113625\n }, {\n \"x\": 0.5640299320220947,\n \"y\": 0.9263423085212708,\n \"z\": -0.00658724969252944\n }, {\n \"x\": 0.5642300248146057,\n \"y\": 0.8993074893951416,\n \"z\": -0.017653480172157288\n }, {\n \"x\": 0.5637336373329163,\n \"y\": 0.8910360932350159,\n \"z\": -0.01852807030081749\n }, {\n \"x\": 0.5637134313583374,\n \"y\": 0.8837276697158813,\n \"z\": -0.01482592523097992\n }, {\n \"x\": 0.564205527305603,\n \"y\": 0.8768964409828186,\n \"z\": -0.01331155002117157\n }, {\n \"x\": 0.5419867634773254,\n \"y\": 0.8778373599052429,\n \"z\": -0.0037720394320786\n }, {\n \"x\": 0.5404468774795532,\n \"y\": 0.880696177482605,\n \"z\": -0.005610354244709015\n }, {\n \"x\": 0.5392338633537292,\n \"y\": 0.8845721483230591,\n \"z\": -0.007352025713771582\n }, {\n \"x\": 0.538469672203064,\n \"y\": 0.8891173601150513,\n \"z\": -0.005154991988092661\n }, {\n \"x\": 0.5189250111579895,\n \"y\": 0.8452741503715515,\n \"z\": -0.009755070321261883\n }, {\n \"x\": 0.4258975088596344,\n \"y\": 0.7662280797958374,\n \"z\": 0.1387351155281067\n }, {\n \"x\": 0.5725725293159485,\n \"y\": 0.8041572570800781,\n \"z\": -0.04583907872438431\n }, {\n \"x\": 0.5342061519622803,\n \"y\": 0.8785833120346069,\n \"z\": 0.002659974154084921\n }, {\n \"x\": 0.5324031114578247,\n \"y\": 0.8804071545600891,\n \"z\": 0.0017832003068178892\n }, {\n \"x\": 0.5538818836212158,\n \"y\": 0.8078407645225525,\n \"z\": -0.03254539892077446\n }, {\n \"x\": 0.5325431823730469,\n \"y\": 0.8026832938194275,\n \"z\": -0.019140373915433884\n }, {\n \"x\": 0.5514076948165894,\n \"y\": 0.8043903112411499,\n \"z\": -0.03313535451889038\n }, {\n \"x\": 0.5131856203079224,\n \"y\": 0.7284771800041199,\n \"z\": -0.009399853646755219\n }, {\n \"x\": 0.49331504106521606,\n \"y\": 0.7443980574607849,\n \"z\": -0.005225230939686298\n }, {\n \"x\": 0.5239617824554443,\n \"y\": 0.7807451486587524,\n \"z\": -0.025881027802824974\n }, {\n \"x\": 0.4473606050014496,\n \"y\": 0.5315827131271362,\n \"z\": 0.011164786294102669\n }, {\n \"x\": 0.45718759298324585,\n \"y\": 0.5604941248893738,\n \"z\": -0.005943301599472761\n }, {\n \"x\": 0.4670005738735199,\n \"y\": 0.5909327268600464,\n \"z\": -0.019681761041283607\n }, {\n \"x\": 0.5311570167541504,\n \"y\": 0.9076261520385742,\n \"z\": 0.00389476353302598\n }, {\n \"x\": 0.5249923467636108,\n \"y\": 0.5893563628196716,\n \"z\": -0.037981919944286346\n }, {\n \"x\": 0.5166932344436646,\n \"y\": 0.5429551005363464,\n \"z\": -0.03319704160094261\n }, {\n \"x\": 0.5085030198097229,\n \"y\": 0.49676206707954407,\n \"z\": -0.02691275253891945\n }, {\n \"x\": 0.4687720239162445,\n \"y\": 0.6834565997123718,\n \"z\": 0.008113506250083447\n }, {\n \"x\": 0.4426414966583252,\n \"y\": 0.7069531679153442,\n \"z\": 0.028577271848917007\n }, {\n \"x\": 0.5230373740196228,\n \"y\": 0.6675713658332825,\n \"z\": 0.001773772411979735\n }, {\n \"x\": 0.4481240212917328,\n \"y\": 0.6527872085571289,\n \"z\": 0.012414850294589996\n }, {\n \"x\": 0.5339856743812561,\n \"y\": 0.7012367844581604,\n \"z\": -0.020220188423991203\n }, {\n \"x\": 0.5347223281860352,\n \"y\": 0.7761190533638,\n \"z\": -0.05141595005989075\n }, {\n \"x\": 0.4315067231655121,\n \"y\": 0.7211957573890686,\n \"z\": 0.04381405934691429\n }, {\n \"x\": 0.45203351974487305,\n \"y\": 0.7206180095672607,\n \"z\": 0.017288070172071457\n }, {\n \"x\": 0.46892452239990234,\n \"y\": 0.7265436053276062,\n \"z\": 0.005602988880127668\n }, {\n \"x\": 0.49314674735069275,\n \"y\": 0.7202282547950745,\n \"z\": -0.0006408205372281373\n }, {\n \"x\": 0.5104925632476807,\n \"y\": 0.7091827392578125,\n \"z\": -0.00362918758764863\n }, {\n \"x\": 0.5232142210006714,\n \"y\": 0.698553740978241,\n \"z\": -0.00787867046892643\n }, {\n \"x\": 0.5497883558273315,\n \"y\": 0.6743605136871338,\n \"z\": -0.036349106580019\n }, {\n \"x\": 0.43658503890037537,\n \"y\": 0.7627100348472595,\n \"z\": 0.042555369436740875\n }, {\n \"x\": 0.4397648870944977,\n \"y\": 0.6528646349906921,\n \"z\": 0.017956094816327095\n }, {\n \"x\": 0.5653332471847534,\n \"y\": 0.7992802858352661,\n \"z\": -0.06365057826042175\n }, {\n \"x\": 0.5285563468933105,\n \"y\": 0.736810564994812,\n \"z\": -0.018836988136172295\n }, {\n \"x\": 0.4180678725242615,\n \"y\": 0.6792560815811157,\n \"z\": 0.12284679710865021\n }, {\n \"x\": 0.5328429937362671,\n \"y\": 0.6865872144699097,\n \"z\": -0.010484723374247551\n }, {\n \"x\": 0.5230283141136169,\n \"y\": 0.7809416055679321,\n \"z\": -0.011922398582100868\n }, {\n \"x\": 0.4551771283149719,\n \"y\": 0.6650775074958801,\n \"z\": 0.01774493046104908\n }, {\n \"x\": 0.5337203741073608,\n \"y\": 0.7618928551673889,\n \"z\": -0.04697106033563614\n }, {\n \"x\": 0.43463975191116333,\n \"y\": 0.8133478164672852,\n \"z\": 0.1354849934577942\n }, {\n \"x\": 0.5225707292556763,\n \"y\": 0.6605283617973328,\n \"z\": 0.004980515688657761\n }, {\n \"x\": 0.5441933870315552,\n \"y\": 0.7497199773788452,\n \"z\": -0.06091512367129326\n }, {\n \"x\": 0.4774007797241211,\n \"y\": 0.9159183502197266,\n \"z\": 0.059622734785079956\n }, {\n \"x\": 0.48068761825561523,\n \"y\": 0.9364941716194153,\n \"z\": 0.08404944837093353\n }, {\n \"x\": 0.4268292486667633,\n \"y\": 0.7657528519630432,\n \"z\": 0.09051097184419632\n }, {\n \"x\": 0.46051913499832153,\n \"y\": 0.8880485892295837,\n \"z\": 0.0738474428653717\n }, {\n \"x\": 0.4243420660495758,\n \"y\": 0.6434382200241089,\n \"z\": 0.06230505183339119\n }, {\n \"x\": 0.5342157483100891,\n \"y\": 0.9835634231567383,\n \"z\": 0.021662971004843712\n }, {\n \"x\": 0.5668109655380249,\n \"y\": 0.8042187094688416,\n \"z\": -0.044937074184417725\n }, {\n \"x\": 0.5176341533660889,\n \"y\": 0.7530587315559387,\n \"z\": -0.012967454269528389\n }, {\n \"x\": 0.430206298828125,\n \"y\": 0.6835605502128601,\n \"z\": 0.04612284153699875\n }, {\n \"x\": 0.4794231951236725,\n \"y\": 0.6732114553451538,\n \"z\": 0.003970044665038586\n }, {\n \"x\": 0.49073347449302673,\n \"y\": 0.6722435355186462,\n \"z\": 0.0008692514384165406\n }, {\n \"x\": 0.5294116139411926,\n \"y\": 0.884677529335022,\n \"z\": 0.004413890186697245\n }, {\n \"x\": 0.4430122375488281,\n \"y\": 0.80235356092453,\n \"z\": 0.04987282305955887\n }, {\n \"x\": 0.5603825449943542,\n \"y\": 1.0092442035675049,\n \"z\": 0.026417359709739685\n }, {\n \"x\": 0.5186598300933838,\n \"y\": 0.9828659892082214,\n \"z\": 0.0513598807156086\n }, {\n \"x\": 0.5010536909103394,\n \"y\": 0.9640932679176331,\n \"z\": 0.06591596454381943\n }, {\n \"x\": 0.5524769425392151,\n \"y\": 0.539441704750061,\n \"z\": -0.035816047340631485\n }, {\n \"x\": 0.5879997611045837,\n \"y\": 1.0091472864151,\n \"z\": 0.02285068854689598\n }, {\n \"x\": 0.5016193985939026,\n \"y\": 0.6684437990188599,\n \"z\": 0.00028415941051207483\n }, {\n \"x\": 0.511952817440033,\n \"y\": 0.6642197370529175,\n \"z\": 0.0021144719794392586\n }, {\n \"x\": 0.5194343328475952,\n \"y\": 0.6623469591140747,\n \"z\": 0.004674181342124939\n }, {\n \"x\": 0.4321230351924896,\n \"y\": 0.6496355533599854,\n \"z\": 0.03124697133898735\n }, {\n \"x\": 0.508686363697052,\n \"y\": 0.6479565501213074,\n \"z\": -0.00044765998609364033\n }, {\n \"x\": 0.4963986277580261,\n \"y\": 0.6431032419204712,\n \"z\": -0.0032507688738405704\n }, {\n \"x\": 0.4845542013645172,\n \"y\": 0.6430778503417969,\n \"z\": -0.002903624437749386\n }, {\n \"x\": 0.4733612537384033,\n \"y\": 0.647506833076477,\n \"z\": 0.00023347247042693198\n }, {\n \"x\": 0.4668654501438141,\n \"y\": 0.653346598148346,\n \"z\": 0.004762572236359119\n }, {\n \"x\": 0.41815051436424255,\n \"y\": 0.633708119392395,\n \"z\": 0.09809435904026031\n }, {\n \"x\": 0.47159942984580994,\n \"y\": 0.6711485385894775,\n \"z\": 0.007849935442209244\n }, {\n \"x\": 0.5734396576881409,\n \"y\": 0.8256140351295471,\n \"z\": -0.03155219927430153\n }, {\n \"x\": 0.5306524038314819,\n \"y\": 0.8337990641593933,\n \"z\": -0.018351426348090172\n }, {\n \"x\": 0.5371729135513306,\n \"y\": 0.7910830974578857,\n \"z\": -0.037286680191755295\n }, {\n \"x\": 0.5549534559249878,\n \"y\": 0.8275275826454163,\n \"z\": -0.030664825811982155\n }, {\n \"x\": 0.5597432255744934,\n \"y\": 0.6418541669845581,\n \"z\": -0.03318847343325615\n }, {\n \"x\": 0.4958484172821045,\n \"y\": 0.9429569244384766,\n \"z\": 0.048340678215026855\n }, {\n \"x\": 0.5140507817268372,\n \"y\": 0.9634028077125549,\n \"z\": 0.03589847311377525\n }, {\n \"x\": 0.5587693452835083,\n \"y\": 0.9951097369194031,\n \"z\": 0.00908728688955307\n }, {\n \"x\": 0.46411189436912537,\n \"y\": 0.9051855206489563,\n \"z\": 0.10601935535669327\n }, {\n \"x\": 0.5181609392166138,\n \"y\": 0.6554316878318787,\n \"z\": 0.002546071307733655\n }, {\n \"x\": 0.5436590909957886,\n \"y\": 0.7085841298103333,\n \"z\": -0.03844436630606651\n }, {\n \"x\": 0.5872187614440918,\n \"y\": 0.9960382580757141,\n \"z\": 0.0063423276878893375\n }, {\n \"x\": 0.5379653573036194,\n \"y\": 0.9989125728607178,\n \"z\": 0.03636329993605614\n }, {\n \"x\": 0.4350326955318451,\n \"y\": 0.8088565468788147,\n \"z\": 0.09147704392671585\n }, {\n \"x\": 0.5523084998130798,\n \"y\": 0.8773422837257385,\n \"z\": -0.009068487212061882\n }, {\n \"x\": 0.5510149598121643,\n \"y\": 0.8816931843757629,\n \"z\": -0.011043853126466274\n }, {\n \"x\": 0.5503793954849243,\n \"y\": 0.88776695728302,\n \"z\": -0.01348799467086792\n }, {\n \"x\": 0.5501549243927002,\n \"y\": 0.8954370617866516,\n \"z\": -0.012142189778387547\n }, {\n \"x\": 0.546072781085968,\n \"y\": 0.9192524552345276,\n \"z\": -0.003157563041895628\n }, {\n \"x\": 0.5314661860466003,\n \"y\": 0.8771666884422302,\n \"z\": 0.0005075141089037061\n }, {\n \"x\": 0.5293324589729309,\n \"y\": 0.8762547969818115,\n \"z\": 0.00039177737198770046\n }, {\n \"x\": 0.5275698900222778,\n \"y\": 0.8750609755516052,\n \"z\": 0.000047732755774632096\n }, {\n \"x\": 0.5104271173477173,\n \"y\": 0.8607332110404968,\n \"z\": 0.0012934643309563398\n }, {\n \"x\": 0.45938700437545776,\n \"y\": 0.8134918212890625,\n \"z\": 0.023569690063595772\n }, {\n \"x\": 0.5418947339057922,\n \"y\": 0.6864100694656372,\n \"z\": -0.027333909645676613\n }, {\n \"x\": 0.531914234161377,\n \"y\": 0.6456130743026733,\n \"z\": -0.005434140563011169\n }, {\n \"x\": 0.523697018623352,\n \"y\": 0.647885262966156,\n \"z\": -0.0002466466394253075\n }, {\n \"x\": 0.5338191390037537,\n \"y\": 0.8783687353134155,\n \"z\": 0.002268768846988678\n }, {\n \"x\": 0.46226605772972107,\n \"y\": 0.8610277771949768,\n \"z\": 0.04718952998518944\n }, {\n \"x\": 0.5434442758560181,\n \"y\": 0.6456181406974792,\n \"z\": -0.02327350154519081\n }, {\n \"x\": 0.5399754643440247,\n \"y\": 0.940219521522522,\n \"z\": 0.005075343884527683\n }, {\n \"x\": 0.5661457777023315,\n \"y\": 0.71457839012146,\n \"z\": -0.06242101639509201\n }, {\n \"x\": 0.5523148775100708,\n \"y\": 0.6974870562553406,\n \"z\": -0.04863070324063301\n }, {\n \"x\": 0.5639959573745728,\n \"y\": 0.6923378109931946,\n \"z\": -0.05180761218070984\n }, {\n \"x\": 0.5367592573165894,\n \"y\": 0.7423217296600342,\n \"z\": -0.03623027727007866\n }, {\n \"x\": 0.5853689908981323,\n \"y\": 0.9752064943313599,\n \"z\": -0.002361974213272333\n }, {\n \"x\": 0.5835235118865967,\n \"y\": 0.9493685960769653,\n \"z\": -0.003941743168979883\n }, {\n \"x\": 0.5615018606185913,\n \"y\": 0.949194610118866,\n \"z\": -0.0015953965485095978\n }, {\n \"x\": 0.5068561434745789,\n \"y\": 0.9048219323158264,\n \"z\": 0.01862684078514576\n }, {\n \"x\": 0.5134067535400391,\n \"y\": 0.7971825003623962,\n \"z\": -0.008485661819577217\n }, {\n \"x\": 0.5223897099494934,\n \"y\": 0.925589919090271,\n \"z\": 0.01249657291918993\n }, {\n \"x\": 0.48500555753707886,\n \"y\": 0.7959478497505188,\n \"z\": -0.0032065745908766985\n }, {\n \"x\": 0.5037734508514404,\n \"y\": 0.8184596300125122,\n \"z\": -0.004932103678584099\n }, {\n \"x\": 0.4766361117362976,\n \"y\": 0.828806459903717,\n \"z\": 0.01027688942849636\n }, {\n \"x\": 0.5589827299118042,\n \"y\": 0.974656343460083,\n \"z\": 0.0009666886180639267\n }, {\n \"x\": 0.5294582843780518,\n \"y\": 0.7541216611862183,\n \"z\": -0.025603046640753746\n }, {\n \"x\": 0.4973002076148987,\n \"y\": 0.9208990931510925,\n \"z\": 0.031931452453136444\n }, {\n \"x\": 0.5163551568984985,\n \"y\": 0.9432790875434875,\n \"z\": 0.024321340024471283\n }, {\n \"x\": 0.49399662017822266,\n \"y\": 0.8814862370491028,\n \"z\": 0.018687399104237556\n }, {\n \"x\": 0.44948166608810425,\n \"y\": 0.836137592792511,\n \"z\": 0.05702034756541252\n }, {\n \"x\": 0.47898444533348083,\n \"y\": 0.8836610913276672,\n \"z\": 0.03150695189833641\n }, {\n \"x\": 0.4454479217529297,\n \"y\": 0.8499438166618347,\n \"z\": 0.08868525922298431\n }, {\n \"x\": 0.49572959542274475,\n \"y\": 0.8452823758125305,\n \"z\": 0.0036111653316766024\n }, {\n \"x\": 0.5362502336502075,\n \"y\": 0.7222585678100586,\n \"z\": -0.027912352234125137\n }, {\n \"x\": 0.5393770337104797,\n \"y\": 0.7850722074508667,\n \"z\": -0.05415399745106697\n }, {\n \"x\": 0.531399667263031,\n \"y\": 0.7898418307304382,\n \"z\": -0.03883346915245056\n }, {\n \"x\": 0.5451627373695374,\n \"y\": 0.7717036604881287,\n \"z\": -0.06480253487825394\n }, {\n \"x\": 0.5206395983695984,\n \"y\": 0.6287745833396912,\n \"z\": -0.010521138086915016\n }, {\n \"x\": 0.4974782466888428,\n \"y\": 0.6191938519477844,\n \"z\": -0.014098240062594414\n }, {\n \"x\": 0.4774145185947418,\n \"y\": 0.6193130612373352,\n \"z\": -0.013643337413668633\n }, {\n \"x\": 0.4616098403930664,\n \"y\": 0.6259890198707581,\n \"z\": -0.008448202162981033\n }, {\n \"x\": 0.4516478478908539,\n \"y\": 0.6368461847305298,\n \"z\": 0.00009050309745362028\n }, {\n \"x\": 0.4485096037387848,\n \"y\": 0.6719120740890503,\n \"z\": 0.022984720766544342\n }, {\n \"x\": 0.42177659273147583,\n \"y\": 0.7240667343139648,\n \"z\": 0.08511673659086227\n }, {\n \"x\": 0.4616215229034424,\n \"y\": 0.6988231539726257,\n \"z\": 0.014238474890589714\n }, {\n \"x\": 0.4755798876285553,\n \"y\": 0.7034608721733093,\n \"z\": 0.00625590980052948\n }, {\n \"x\": 0.4924992024898529,\n \"y\": 0.7005885243415833,\n \"z\": 0.0009391739731654525\n }, {\n \"x\": 0.5082254409790039,\n \"y\": 0.693384051322937,\n \"z\": -0.0009464038303121924\n }, {\n \"x\": 0.5203112959861755,\n \"y\": 0.6849707961082458,\n \"z\": -0.0022114769089967012\n }, {\n \"x\": 0.52867591381073,\n \"y\": 0.6779075860977173,\n \"z\": -0.002962538506835699\n }, {\n \"x\": 0.4213953912258148,\n \"y\": 0.7219811677932739,\n \"z\": 0.1350894570350647\n }, {\n \"x\": 0.5320829749107361,\n \"y\": 0.794858992099762,\n \"z\": -0.03181503340601921\n }, {\n \"x\": 0.5452795028686523,\n \"y\": 0.7286570072174072,\n \"z\": -0.04771539941430092\n }, {\n \"x\": 0.5496407747268677,\n \"y\": 0.7866933345794678,\n \"z\": -0.06452003121376038\n }, {\n \"x\": 0.557040274143219,\n \"y\": 0.7962084412574768,\n \"z\": -0.05837344378232956\n }, {\n \"x\": 0.549176812171936,\n \"y\": 0.7895247936248779,\n \"z\": -0.057761140167713165\n }, {\n \"x\": 0.5362890362739563,\n \"y\": 0.8005836606025696,\n \"z\": -0.026903774589300156\n }, {\n \"x\": 0.560200035572052,\n \"y\": 0.7983731031417847,\n \"z\": -0.06172555685043335\n }, {\n \"x\": 0.5616944432258606,\n \"y\": 0.8022753596305847,\n \"z\": -0.045200999826192856\n }, {\n \"x\": 0.5273328423500061,\n \"y\": 0.6611284017562866,\n \"z\": 0.0029021520167589188\n }, {\n \"x\": 0.534850537776947,\n \"y\": 0.6660012006759644,\n \"z\": -0.005215510260313749\n }, {\n \"x\": 0.5394860506057739,\n \"y\": 0.6701375246047974,\n \"z\": -0.014931917190551758\n }, {\n \"x\": 0.4634307324886322,\n \"y\": 0.658291757106781,\n \"z\": 0.009295716881752014\n }, {\n \"x\": 0.4538393020629883,\n \"y\": 0.6519932150840759,\n \"z\": 0.00930330716073513\n }, {\n \"x\": 0.5776031613349915,\n \"y\": 0.7159298658370972,\n \"z\": -0.057365912944078445\n }, {\n \"x\": 0.6504855155944824,\n \"y\": 0.6461779475212097,\n \"z\": 0.014184834435582161\n }, {\n \"x\": 0.5860154032707214,\n \"y\": 0.7962266206741333,\n \"z\": -0.04522843658924103\n }, {\n \"x\": 0.6842049360275269,\n \"y\": 0.5631637573242188,\n \"z\": 0.07207967340946198\n }, {\n \"x\": 0.6152560710906982,\n \"y\": 0.6674962639808655,\n \"z\": 0.0007529259892180562\n }, {\n \"x\": 0.6280948519706726,\n \"y\": 0.6684326529502869,\n \"z\": 0.0016892586136236787\n }, {\n \"x\": 0.6408625245094299,\n \"y\": 0.6663892269134521,\n \"z\": 0.005331226624548435\n }, {\n \"x\": 0.6557814478874207,\n \"y\": 0.6534678936004639,\n \"z\": 0.01646413467824459\n }, {\n \"x\": 0.6035663485527039,\n \"y\": 0.6639701724052429,\n \"z\": 0.0013799630105495453\n }, {\n \"x\": 0.6329053044319153,\n \"y\": 0.608010470867157,\n \"z\": -0.006195899099111557\n }, {\n \"x\": 0.6167260408401489,\n \"y\": 0.6117533445358276,\n \"z\": -0.006319951266050339\n }, {\n \"x\": 0.6471013426780701,\n \"y\": 0.6112449765205383,\n \"z\": -0.0017843559617176652\n }, {\n \"x\": 0.6560901999473572,\n \"y\": 0.6185776591300964,\n \"z\": 0.004047257360070944\n }, {\n \"x\": 0.6666946411132812,\n \"y\": 0.6651176810264587,\n \"z\": 0.023647578433156013\n }, {\n \"x\": 0.6311345100402832,\n \"y\": 0.9495396018028259,\n \"z\": 0.014004078693687916\n }, {\n \"x\": 0.6544655561447144,\n \"y\": 0.6397901773452759,\n \"z\": 0.01809609681367874\n }, {\n \"x\": 0.6965808868408203,\n \"y\": 0.6482675075531006,\n \"z\": 0.08304904401302338\n }, {\n \"x\": 0.679817259311676,\n \"y\": 0.650188148021698,\n \"z\": 0.03632688894867897\n }, {\n \"x\": 0.6336516737937927,\n \"y\": 0.7541458010673523,\n \"z\": -0.007742783520370722\n }, {\n \"x\": 0.5921701192855835,\n \"y\": 0.8567668199539185,\n \"z\": -0.029399123042821884\n }, {\n \"x\": 0.591663658618927,\n \"y\": 0.870215654373169,\n \"z\": -0.02103729173541069\n }, {\n \"x\": 0.6068367958068848,\n \"y\": 0.8584195375442505,\n \"z\": -0.020668085664510727\n }, {\n \"x\": 0.6176617741584778,\n \"y\": 0.860965371131897,\n \"z\": -0.009790095500648022\n }, {\n \"x\": 0.6040634512901306,\n \"y\": 0.8686612844467163,\n \"z\": -0.015289564616978168\n }, {\n \"x\": 0.6143736839294434,\n \"y\": 0.8671170473098755,\n \"z\": -0.005712216719985008\n }, {\n \"x\": 0.6373105049133301,\n \"y\": 0.8815656900405884,\n \"z\": 0.012672550976276398\n }, {\n \"x\": 0.5832505822181702,\n \"y\": 0.7866312861442566,\n \"z\": -0.07051534950733185\n }, {\n \"x\": 0.5836675763130188,\n \"y\": 0.7658692598342896,\n \"z\": -0.07566110789775848\n }, {\n \"x\": 0.6709531545639038,\n \"y\": 0.604898989200592,\n \"z\": 0.005951565690338612\n }, {\n \"x\": 0.6029891967773438,\n \"y\": 0.705652117729187,\n \"z\": -0.013388276100158691\n }, {\n \"x\": 0.6131622195243835,\n \"y\": 0.7728396058082581,\n \"z\": -0.036248479038476944\n }, {\n \"x\": 0.6123163104057312,\n \"y\": 0.7612020373344421,\n \"z\": -0.03264721855521202\n }, {\n \"x\": 0.6696187853813171,\n \"y\": 0.744706928730011,\n \"z\": 0.009673702530562878\n }, {\n \"x\": 0.5803102254867554,\n \"y\": 0.7385968565940857,\n \"z\": -0.0689152330160141\n }, {\n \"x\": 0.6404349207878113,\n \"y\": 0.5877999663352966,\n \"z\": -0.01929756999015808\n }, {\n \"x\": 0.6588467955589294,\n \"y\": 0.5929454565048218,\n \"z\": -0.008487257175147533\n }, {\n \"x\": 0.6720337867736816,\n \"y\": 0.530631422996521,\n \"z\": 0.043437421321868896\n }, {\n \"x\": 0.584305465221405,\n \"y\": 0.6099005341529846,\n \"z\": -0.030301367864012718\n }, {\n \"x\": 0.6034283638000488,\n \"y\": 0.6217452883720398,\n \"z\": -0.001970183802768588\n }, {\n \"x\": 0.6460927724838257,\n \"y\": 0.8608663082122803,\n \"z\": 0.015541625209152699\n }, {\n \"x\": 0.6957815289497375,\n \"y\": 0.8326103091239929,\n \"z\": 0.13015234470367432\n }, {\n \"x\": 0.6043362617492676,\n \"y\": 0.7861682772636414,\n \"z\": -0.030476901680231094\n }, {\n \"x\": 0.594293475151062,\n \"y\": 0.7942103147506714,\n \"z\": -0.032218821346759796\n }, {\n \"x\": 0.6324057579040527,\n \"y\": 0.8665139675140381,\n \"z\": 0.014255806803703308\n }, {\n \"x\": 0.6296147704124451,\n \"y\": 0.8667733669281006,\n \"z\": 0.010388285852968693\n }, {\n \"x\": 0.663644552230835,\n \"y\": 0.5798642635345459,\n \"z\": -0.0022301070857793093\n }, {\n \"x\": 0.6140630841255188,\n \"y\": 0.7809288501739502,\n \"z\": -0.02835679054260254\n }, {\n \"x\": 0.615908145904541,\n \"y\": 0.5921698212623596,\n \"z\": -0.026804860681295395\n }, {\n \"x\": 0.617181122303009,\n \"y\": 0.5748661756515503,\n \"z\": -0.03060605563223362\n }, {\n \"x\": 0.6222207546234131,\n \"y\": 0.49137672781944275,\n \"z\": -0.011151673272252083\n }, {\n \"x\": 0.6669357419013977,\n \"y\": 0.5541607141494751,\n \"z\": 0.017466170713305473\n }, {\n \"x\": 0.6182981729507446,\n \"y\": 0.5320425629615784,\n \"z\": -0.021793590858578682\n }, {\n \"x\": 0.6760554313659668,\n \"y\": 0.595052182674408,\n \"z\": 0.017115700989961624\n }, {\n \"x\": 0.6801463961601257,\n \"y\": 0.5800720453262329,\n \"z\": 0.043127160519361496\n }, {\n \"x\": 0.5922210812568665,\n \"y\": 0.8644017577171326,\n \"z\": -0.02662893570959568\n }, {\n \"x\": 0.6054555177688599,\n \"y\": 0.8637874722480774,\n \"z\": -0.018363753333687782\n }, {\n \"x\": 0.6161889433860779,\n \"y\": 0.8641164898872375,\n \"z\": -0.008808949030935764\n }, {\n \"x\": 0.6017249822616577,\n \"y\": 0.7901403307914734,\n \"z\": -0.028126630932092667\n }, {\n \"x\": 0.631446123123169,\n \"y\": 0.8664817810058594,\n \"z\": 0.012112865224480629\n }, {\n \"x\": 0.6249198913574219,\n \"y\": 0.8716511130332947,\n \"z\": 0.003882825840264559\n }, {\n \"x\": 0.6281915903091431,\n \"y\": 0.867301881313324,\n \"z\": 0.009891441091895103\n }, {\n \"x\": 0.5986843109130859,\n \"y\": 0.7813931703567505,\n \"z\": -0.050227612257003784\n }, {\n \"x\": 0.6126407384872437,\n \"y\": 0.869275689125061,\n \"z\": -0.0031255714129656553\n }, {\n \"x\": 0.6027271151542664,\n \"y\": 0.8711842894554138,\n \"z\": -0.009324162267148495\n }, {\n \"x\": 0.59088134765625,\n \"y\": 0.8742044568061829,\n \"z\": -0.014608660712838173\n }, {\n \"x\": 0.5984604358673096,\n \"y\": 0.9216185212135315,\n \"z\": -0.005981989670544863\n }, {\n \"x\": 0.5950398445129395,\n \"y\": 0.8964707255363464,\n \"z\": -0.01703473925590515\n }, {\n \"x\": 0.5941568613052368,\n \"y\": 0.8882410526275635,\n \"z\": -0.017784785479307175\n }, {\n \"x\": 0.5928806662559509,\n \"y\": 0.8803883194923401,\n \"z\": -0.014153128489851952\n }, {\n \"x\": 0.5909661054611206,\n \"y\": 0.8748103976249695,\n \"z\": -0.012609979137778282\n }, {\n \"x\": 0.6128016710281372,\n \"y\": 0.8702545762062073,\n \"z\": -0.0022550546564161777\n }, {\n \"x\": 0.6150846481323242,\n \"y\": 0.8726804256439209,\n \"z\": -0.00414019962772727\n }, {\n \"x\": 0.6173093914985657,\n \"y\": 0.8770190477371216,\n \"z\": -0.005970994010567665\n }, {\n \"x\": 0.619335412979126,\n \"y\": 0.8814800977706909,\n \"z\": -0.0036864024586975574\n }, {\n \"x\": 0.6292637586593628,\n \"y\": 0.8314558267593384,\n \"z\": -0.007714875973761082\n }, {\n \"x\": 0.702275276184082,\n \"y\": 0.7320667505264282,\n \"z\": 0.1433621346950531\n }, {\n \"x\": 0.6204835176467896,\n \"y\": 0.8689177632331848,\n \"z\": 0.0044869170524179935\n }, {\n \"x\": 0.6223508715629578,\n \"y\": 0.8704851269721985,\n \"z\": 0.00352082890458405\n }, {\n \"x\": 0.590448260307312,\n \"y\": 0.8029727935791016,\n \"z\": -0.03200828656554222\n }, {\n \"x\": 0.6097423434257507,\n \"y\": 0.7933741211891174,\n \"z\": -0.018042555078864098\n }, {\n \"x\": 0.59229576587677,\n \"y\": 0.7993767261505127,\n \"z\": -0.032564569264650345\n }, {\n \"x\": 0.6171364188194275,\n \"y\": 0.7153720259666443,\n \"z\": -0.007672437466681004\n }, {\n \"x\": 0.6389747858047485,\n \"y\": 0.726390540599823,\n \"z\": -0.002999067772179842\n }, {\n \"x\": 0.6151940226554871,\n \"y\": 0.769412100315094,\n \"z\": -0.024427521973848343\n }, {\n \"x\": 0.6526776552200317,\n \"y\": 0.505868136882782,\n \"z\": 0.01412637997418642\n }, {\n \"x\": 0.6475822329521179,\n \"y\": 0.5375454425811768,\n \"z\": -0.0033899128902703524\n }, {\n \"x\": 0.6433356404304504,\n \"y\": 0.5714520215988159,\n \"z\": -0.017428796738386154\n }, {\n \"x\": 0.626949667930603,\n \"y\": 0.8962116837501526,\n \"z\": 0.005602736957371235\n }, {\n \"x\": 0.5868416428565979,\n \"y\": 0.5829002261161804,\n \"z\": -0.03727729618549347\n }, {\n \"x\": 0.5877229571342468,\n \"y\": 0.5345035791397095,\n \"z\": -0.032396964728832245\n }, {\n \"x\": 0.5887066125869751,\n \"y\": 0.48655083775520325,\n \"z\": -0.025856535881757736\n }, {\n \"x\": 0.6507197618484497,\n \"y\": 0.6612282991409302,\n \"z\": 0.011114613153040409\n }, {\n \"x\": 0.6803066730499268,\n \"y\": 0.677992045879364,\n \"z\": 0.032125361263751984\n }, {\n \"x\": 0.5963194370269775,\n \"y\": 0.6598632335662842,\n \"z\": 0.002976928371936083\n }, {\n \"x\": 0.667536199092865,\n \"y\": 0.6274255514144897,\n \"z\": 0.015618261881172657\n }, {\n \"x\": 0.5930740833282471,\n \"y\": 0.6940041780471802,\n \"z\": -0.019217798486351967\n }, {\n \"x\": 0.6053346395492554,\n \"y\": 0.7676517963409424,\n \"z\": -0.050308309495449066\n }, {\n \"x\": 0.6934473514556885,\n \"y\": 0.6884298920631409,\n \"z\": 0.04794462397694588\n }, {\n \"x\": 0.6738007664680481,\n \"y\": 0.6934011578559875,\n \"z\": 0.020697161555290222\n }, {\n \"x\": 0.6588084697723389,\n \"y\": 0.7033141851425171,\n \"z\": 0.008462334051728249\n }, {\n \"x\": 0.6346072554588318,\n \"y\": 0.7029502391815186,\n \"z\": 0.001542167621664703\n }, {\n \"x\": 0.6157816648483276,\n \"y\": 0.6966525912284851,\n \"z\": -0.002009218093007803\n }, {\n \"x\": 0.6015574336051941,\n \"y\": 0.688928484916687,\n \"z\": -0.006588225718587637\n }, {\n \"x\": 0.5746836066246033,\n \"y\": 0.6711069345474243,\n \"z\": -0.03597589209675789\n }, {\n \"x\": 0.6947521567344666,\n \"y\": 0.7309479117393494,\n \"z\": 0.046707939356565475\n }, {\n \"x\": 0.6759101152420044,\n \"y\": 0.6249120831489563,\n \"z\": 0.021654341369867325\n }, {\n \"x\": 0.5794773101806641,\n \"y\": 0.7971615195274353,\n \"z\": -0.06339326500892639\n }, {\n \"x\": 0.6041849851608276,\n \"y\": 0.727514922618866,\n \"z\": -0.017512541264295578\n }, {\n \"x\": 0.6968844532966614,\n \"y\": 0.6440950036048889,\n \"z\": 0.12727996706962585\n }, {\n \"x\": 0.5910853147506714,\n \"y\": 0.679325520992279,\n \"z\": -0.009497715160250664\n }, {\n \"x\": 0.6157375574111938,\n \"y\": 0.7695677280426025,\n \"z\": -0.010624290443956852\n }, {\n \"x\": 0.6606494784355164,\n \"y\": 0.6410489678382874,\n \"z\": 0.0208158977329731\n }, {\n \"x\": 0.6040687561035156,\n \"y\": 0.7531470656394958,\n \"z\": -0.045887019485235214\n }, {\n \"x\": 0.7012156248092651,\n \"y\": 0.780247151851654,\n \"z\": 0.14028730988502502\n }, {\n \"x\": 0.595149576663971,\n \"y\": 0.6527782678604126,\n \"z\": 0.006308757700026035\n }, {\n \"x\": 0.5925500392913818,\n \"y\": 0.7436665892601013,\n \"z\": -0.060151755809783936\n }, {\n \"x\": 0.6780198812484741,\n \"y\": 0.8905693888664246,\n \"z\": 0.0626060739159584\n }, {\n \"x\": 0.676746666431427,\n \"y\": 0.9113880395889282,\n \"z\": 0.08726003766059875\n }, {\n \"x\": 0.7030686140060425,\n \"y\": 0.7312687635421753,\n \"z\": 0.09529774636030197\n }, {\n \"x\": 0.688987135887146,\n \"y\": 0.8588417172431946,\n \"z\": 0.07752864807844162\n }, {\n \"x\": 0.6883691549301147,\n \"y\": 0.6109960675239563,\n \"z\": 0.06669612973928452\n }, {\n \"x\": 0.6358906030654907,\n \"y\": 0.9702065587043762,\n \"z\": 0.023120900616049767\n }, {\n \"x\": 0.5781539678573608,\n \"y\": 0.8023634552955627,\n \"z\": -0.044763918966054916\n }, {\n \"x\": 0.6170316934585571,\n \"y\": 0.7408350706100464,\n \"z\": -0.011375460773706436\n }, {\n \"x\": 0.688542366027832,\n \"y\": 0.6516284346580505,\n \"z\": 0.050206027925014496\n }, {\n \"x\": 0.6385149359703064,\n \"y\": 0.6540714502334595,\n \"z\": 0.006462941411882639\n }, {\n \"x\": 0.6279382109642029,\n \"y\": 0.6563615798950195,\n \"z\": 0.003062846139073372\n }, {\n \"x\": 0.6268895268440247,\n \"y\": 0.8736732006072998,\n \"z\": 0.00627936702221632\n }, {\n \"x\": 0.6944946050643921,\n \"y\": 0.7709181308746338,\n \"z\": 0.053824134171009064\n }, {\n \"x\": 0.614617109298706,\n \"y\": 1.0022112131118774,\n \"z\": 0.02719894051551819\n }, {\n \"x\": 0.6493719220161438,\n \"y\": 0.9665167927742004,\n \"z\": 0.053563784807920456\n }, {\n \"x\": 0.6624587178230286,\n \"y\": 0.943530797958374,\n \"z\": 0.068605437874794\n }, {\n \"x\": 0.6162528991699219,\n \"y\": 0.6558693051338196,\n \"z\": 0.002187855076044798\n }, {\n \"x\": 0.6058168411254883,\n \"y\": 0.654328465461731,\n \"z\": 0.0036193584091961384\n }, {\n \"x\": 0.5987918972969055,\n \"y\": 0.6536934971809387,\n \"z\": 0.006134530063718557\n }, {\n \"x\": 0.6831037402153015,\n \"y\": 0.6195642948150635,\n \"z\": 0.03511790186166763\n }, {\n \"x\": 0.6062582731246948,\n \"y\": 0.6356398463249207,\n \"z\": 0.001280312892049551\n }, {\n \"x\": 0.6174948811531067,\n \"y\": 0.62776118516922,\n \"z\": -0.0013642468256875873\n }, {\n \"x\": 0.6297246217727661,\n \"y\": 0.6253792643547058,\n \"z\": -0.0007034156005829573\n }, {\n \"x\": 0.6407091617584229,\n \"y\": 0.627578616142273,\n \"z\": 0.0028144705574959517\n }, {\n \"x\": 0.6479622721672058,\n \"y\": 0.6322650909423828,\n \"z\": 0.00750273372977972\n }, {\n \"x\": 0.6915091276168823,\n \"y\": 0.5990704298019409,\n \"z\": 0.10270945727825165\n }, {\n \"x\": 0.6457163095474243,\n \"y\": 0.6504453420639038,\n \"z\": 0.010696077719330788\n }, {\n \"x\": 0.6164222955703735,\n \"y\": 0.8231936097145081,\n \"z\": -0.016772059723734856\n }, {\n \"x\": 0.6042401194572449,\n \"y\": 0.7830976843833923,\n \"z\": -0.03630910441279411\n }, {\n \"x\": 0.5922216773033142,\n \"y\": 0.8228387236595154,\n \"z\": -0.029992375522851944\n }, {\n \"x\": 0.6646111011505127,\n \"y\": 0.92097008228302,\n \"z\": 0.050967294722795486\n }, {\n \"x\": 0.651232898235321,\n \"y\": 0.9460107088088989,\n \"z\": 0.038000158965587616\n }, {\n \"x\": 0.6140977144241333,\n \"y\": 0.9882472157478333,\n \"z\": 0.009882091544568539\n }, {\n \"x\": 0.6870781183242798,\n \"y\": 0.8768675327301025,\n \"z\": 0.10980932414531708\n }, {\n \"x\": 0.5986856818199158,\n \"y\": 0.6456438899040222,\n \"z\": 0.003999010659754276\n }, {\n \"x\": 0.585981547832489,\n \"y\": 0.7034481763839722,\n \"z\": -0.0377722829580307\n }, {\n \"x\": 0.6342031359672546,\n \"y\": 0.9867448806762695,\n \"z\": 0.03786521404981613\n }, {\n \"x\": 0.7013950943946838,\n \"y\": 0.776049017906189,\n \"z\": 0.09598205983638763\n }, {\n \"x\": 0.6030206680297852,\n \"y\": 0.8719133138656616,\n \"z\": -0.007931148633360863\n }, {\n \"x\": 0.6050592064857483,\n \"y\": 0.8767156004905701,\n \"z\": -0.009791925549507141\n }, {\n \"x\": 0.6073468923568726,\n \"y\": 0.8831382393836975,\n \"z\": -0.012361008673906326\n }, {\n \"x\": 0.6087977290153503,\n \"y\": 0.890143632888794,\n \"z\": -0.01098148338496685\n }, {\n \"x\": 0.6147705316543579,\n \"y\": 0.9110084772109985,\n \"z\": -0.0018823575228452682\n }, {\n \"x\": 0.622577965259552,\n \"y\": 0.8670604825019836,\n \"z\": 0.002609190298244357\n }, {\n \"x\": 0.6241236329078674,\n \"y\": 0.8651344180107117,\n \"z\": 0.0025534380692988634\n }, {\n \"x\": 0.6257084608078003,\n \"y\": 0.8638408184051514,\n \"z\": 0.0023300074972212315\n }, {\n \"x\": 0.639931321144104,\n \"y\": 0.8449671268463135,\n \"z\": 0.0038123116828501225\n }, {\n \"x\": 0.6810906529426575,\n \"y\": 0.7856625318527222,\n \"z\": 0.02717764675617218\n }, {\n \"x\": 0.583532452583313,\n \"y\": 0.6811994910240173,\n \"z\": -0.026588857173919678\n }, {\n \"x\": 0.5855660438537598,\n \"y\": 0.6393819451332092,\n \"z\": -0.004512844607234001\n }, {\n \"x\": 0.5932201743125916,\n \"y\": 0.6398029327392578,\n \"z\": 0.0008020466193556786\n }, {\n \"x\": 0.6200879812240601,\n \"y\": 0.8683351874351501,\n \"z\": 0.00417016725987196\n }, {\n \"x\": 0.6842559576034546,\n \"y\": 0.8330534100532532,\n \"z\": 0.050836317241191864\n }, {\n \"x\": 0.5754412412643433,\n \"y\": 0.6418221592903137,\n \"z\": -0.022838059812784195\n }, {\n \"x\": 0.6232790350914001,\n \"y\": 0.9295297265052795,\n \"z\": 0.006339520215988159\n }, {\n \"x\": 0.5764067769050598,\n \"y\": 0.694546639919281,\n \"z\": -0.04825803264975548\n }, {\n \"x\": 0.59778892993927,\n \"y\": 0.7343927621841431,\n \"z\": -0.035004377365112305\n }, {\n \"x\": 0.6042810678482056,\n \"y\": 0.9441440105438232,\n \"z\": -0.0010970570147037506\n }, {\n \"x\": 0.6496372222900391,\n \"y\": 0.8869078159332275,\n \"z\": 0.021036235615611076\n }, {\n \"x\": 0.6274012327194214,\n \"y\": 0.7830310463905334,\n \"z\": -0.006658440921455622\n }, {\n \"x\": 0.637792706489563,\n \"y\": 0.9104999899864197,\n \"z\": 0.014290250837802887\n }, {\n \"x\": 0.6549934148788452,\n \"y\": 0.7748609185218811,\n \"z\": -0.0006672973395325243\n }, {\n \"x\": 0.6404005289077759,\n \"y\": 0.801220715045929,\n \"z\": -0.0026642554439604282\n }, {\n \"x\": 0.6671456694602966,\n \"y\": 0.8045546412467957,\n \"z\": 0.013180811889469624\n }, {\n \"x\": 0.6107483506202698,\n \"y\": 0.9680658578872681,\n \"z\": 0.001778992242179811\n }, {\n \"x\": 0.6060343980789185,\n \"y\": 0.744587242603302,\n \"z\": -0.024382334202528\n }, {\n \"x\": 0.6602751612663269,\n \"y\": 0.8998945355415344,\n \"z\": 0.0344940721988678\n }, {\n \"x\": 0.6463775038719177,\n \"y\": 0.9262562394142151,\n \"z\": 0.02617623284459114\n }, {\n \"x\": 0.6579852104187012,\n \"y\": 0.8602304458618164,\n \"z\": 0.021586716175079346\n }, {\n \"x\": 0.6926165223121643,\n \"y\": 0.8053340315818787,\n \"z\": 0.061075080186128616\n }, {\n \"x\": 0.6724731922149658,\n \"y\": 0.8594399690628052,\n \"z\": 0.03457934781908989\n }, {\n \"x\": 0.6975721716880798,\n \"y\": 0.8183245062828064,\n \"z\": 0.09300774335861206\n }, {\n \"x\": 0.6512877941131592,\n \"y\": 0.8258221745491028,\n \"z\": 0.006324059329926968\n }, {\n \"x\": 0.594887375831604,\n \"y\": 0.7148372530937195,\n \"z\": -0.026898479089140892\n }, {\n \"x\": 0.6017440557479858,\n \"y\": 0.7773507833480835,\n \"z\": -0.05312420800328255\n }, {\n \"x\": 0.6096571683883667,\n \"y\": 0.7806998491287231,\n \"z\": -0.037646256387233734\n }, {\n \"x\": 0.5952993035316467,\n \"y\": 0.7654367685317993,\n \"z\": -0.06398405134677887\n }, {\n \"x\": 0.5950021147727966,\n \"y\": 0.6201304793357849,\n \"z\": -0.009297547861933708\n }, {\n \"x\": 0.6165438890457153,\n \"y\": 0.6052900552749634,\n \"z\": -0.012455573305487633\n }, {\n \"x\": 0.6362661719322205,\n \"y\": 0.6015968918800354,\n \"z\": -0.011649220250546932\n }, {\n \"x\": 0.6522727608680725,\n \"y\": 0.6046400666236877,\n \"z\": -0.005903332494199276\n }, {\n \"x\": 0.6625409722328186,\n \"y\": 0.6128141283988953,\n \"z\": 0.0030042496509850025\n }, {\n \"x\": 0.6688099503517151,\n \"y\": 0.6457712054252625,\n \"z\": 0.026322703808546066\n }, {\n \"x\": 0.7013440728187561,\n \"y\": 0.6893666386604309,\n \"z\": 0.08984331786632538\n }, {\n \"x\": 0.6608623266220093,\n \"y\": 0.6749406456947327,\n \"z\": 0.0172116681933403\n }, {\n \"x\": 0.6482325196266174,\n \"y\": 0.6823726296424866,\n \"z\": 0.008881398476660252\n }, {\n \"x\": 0.6313265562057495,\n \"y\": 0.6842025518417358,\n \"z\": 0.0031308617908507586\n }, {\n \"x\": 0.6147016286849976,\n \"y\": 0.6809731721878052,\n \"z\": 0.0007630771724507213\n }, {\n \"x\": 0.6018834114074707,\n \"y\": 0.6755372285842896,\n \"z\": -0.0008834321051836014\n }, {\n \"x\": 0.5925027132034302,\n \"y\": 0.670681357383728,\n \"z\": -0.001968748401850462\n }, {\n \"x\": 0.700127363204956,\n \"y\": 0.6871103644371033,\n \"z\": 0.13980500400066376\n }, {\n \"x\": 0.6095665693283081,\n \"y\": 0.7853189706802368,\n \"z\": -0.03074747882783413\n }, {\n \"x\": 0.5880423784255981,\n \"y\": 0.7229287028312683,\n \"z\": -0.04691500961780548\n }, {\n \"x\": 0.5930182337760925,\n \"y\": 0.7811514139175415,\n \"z\": -0.06398335844278336\n }, {\n \"x\": 0.5867722034454346,\n \"y\": 0.7922660112380981,\n \"z\": -0.05794971063733101\n }, {\n \"x\": 0.5933279991149902,\n \"y\": 0.7842848896980286,\n \"z\": -0.05714067071676254\n }, {\n \"x\": 0.6063535809516907,\n \"y\": 0.7920218706130981,\n \"z\": -0.02590685710310936\n }, {\n \"x\": 0.5839452743530273,\n \"y\": 0.794978141784668,\n \"z\": -0.0615212507545948\n }, {\n \"x\": 0.5828126072883606,\n \"y\": 0.8000800013542175,\n \"z\": -0.0449722595512867\n }, {\n \"x\": 0.5909603834152222,\n \"y\": 0.6541213393211365,\n \"z\": 0.003991890233010054\n }, {\n \"x\": 0.5852181911468506,\n \"y\": 0.6602938771247864,\n \"z\": -0.004428438376635313\n }, {\n \"x\": 0.5825737714767456,\n \"y\": 0.6651063561439514,\n \"z\": -0.014345290139317513\n }, {\n \"x\": 0.6517343521118164,\n \"y\": 0.6362385153770447,\n \"z\": 0.012151890434324741\n }, {\n \"x\": 0.6615052819252014,\n \"y\": 0.6281577944755554,\n \"z\": 0.0123682152479887\n }, {\n \"x\": 0.4856873154640198,\n \"y\": 0.6568945646286011,\n \"z\": 0.000720038078725338\n }, {\n \"x\": 0.49988406896591187,\n \"y\": 0.6547410488128662,\n \"z\": 0.0006949726957827806\n }, {\n \"x\": 0.48438939452171326,\n \"y\": 0.6392973065376282,\n \"z\": 0.000705525919329375\n }, {\n \"x\": 0.47143134474754333,\n \"y\": 0.6589511632919312,\n \"z\": 0.0006980331381782889\n }, {\n \"x\": 0.48704618215560913,\n \"y\": 0.6752797961235046,\n \"z\": 0.0006921177846379578\n }, {\n \"x\": 0.6243702173233032,\n \"y\": 0.640461802482605,\n \"z\": -0.00006592126737814397\n }, {\n \"x\": 0.6390967965126038,\n \"y\": 0.6385173797607422,\n \"z\": -0.00016105435497593135\n }, {\n \"x\": 0.6230536699295044,\n \"y\": 0.6224825382232666,\n \"z\": -0.00016136496560648084\n }, {\n \"x\": 0.6095397472381592,\n \"y\": 0.641917884349823,\n \"z\": -0.0001803556369850412\n }, {\n \"x\": 0.6250996589660645,\n \"y\": 0.6586247682571411,\n \"z\": -0.0001785515050869435\n }]],\n \"faceBlendshapes\": [{\n \"categories\": [{\n \"index\": 0,\n \"score\": 0.000005187174338061595,\n \"categoryName\": \"_neutral\",\n \"displayName\": \"\"\n }, {\n \"index\": 1,\n \"score\": 0.24521504342556,\n \"categoryName\": \"browDownLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 2,\n \"score\": 0.1987743377685547,\n \"categoryName\": \"browDownRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 3,\n \"score\": 0.013400448486208916,\n \"categoryName\": \"browInnerUp\",\n \"displayName\": \"\"\n }, {\n \"index\": 4,\n \"score\": 0.012361560948193073,\n \"categoryName\": \"browOuterUpLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 5,\n \"score\": 0.019305096939206123,\n \"categoryName\": \"browOuterUpRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 6,\n \"score\": 0.000028426356948330067,\n \"categoryName\": \"cheekPuff\",\n \"displayName\": \"\"\n }, {\n \"index\": 7,\n \"score\": 3.4500112633395474e-7,\n \"categoryName\": \"cheekSquintLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 8,\n \"score\": 4.83789051486383e-7,\n \"categoryName\": \"cheekSquintRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 9,\n \"score\": 0.07650448381900787,\n \"categoryName\": \"eyeBlinkLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 10,\n \"score\": 0.05070012807846069,\n \"categoryName\": \"eyeBlinkRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 11,\n \"score\": 0.13978900015354156,\n \"categoryName\": \"eyeLookDownLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 12,\n \"score\": 0.14198613166809082,\n \"categoryName\": \"eyeLookDownRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 13,\n \"score\": 0.2177766114473343,\n \"categoryName\": \"eyeLookInLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 14,\n \"score\": 0.014739357866346836,\n \"categoryName\": \"eyeLookInRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 15,\n \"score\": 0.02361512929201126,\n \"categoryName\": \"eyeLookOutLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 16,\n \"score\": 0.19679604470729828,\n \"categoryName\": \"eyeLookOutRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 17,\n \"score\": 0.04874616861343384,\n \"categoryName\": \"eyeLookUpLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 18,\n \"score\": 0.049392376095056534,\n \"categoryName\": \"eyeLookUpRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 19,\n \"score\": 0.34944331645965576,\n \"categoryName\": \"eyeSquintLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 20,\n \"score\": 0.2939716875553131,\n \"categoryName\": \"eyeSquintRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 21,\n \"score\": 0.005955042317509651,\n \"categoryName\": \"eyeWideLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 22,\n \"score\": 0.006776117719709873,\n \"categoryName\": \"eyeWideRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 23,\n \"score\": 0.000016942436559475027,\n \"categoryName\": \"jawForward\",\n \"displayName\": \"\"\n }, {\n \"index\": 24,\n \"score\": 0.0045165494084358215,\n \"categoryName\": \"jawLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 25,\n \"score\": 0.07803940027952194,\n \"categoryName\": \"jawOpen\",\n \"displayName\": \"\"\n }, {\n \"index\": 26,\n \"score\": 0.00002090057751047425,\n \"categoryName\": \"jawRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 27,\n \"score\": 0.06032035872340202,\n \"categoryName\": \"mouthClose\",\n \"displayName\": \"\"\n }, {\n \"index\": 28,\n \"score\": 0.00228882092051208,\n \"categoryName\": \"mouthDimpleLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 29,\n \"score\": 0.00781762320548296,\n \"categoryName\": \"mouthDimpleRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 30,\n \"score\": 0.0017093931091949344,\n \"categoryName\": \"mouthFrownLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 31,\n \"score\": 0.0019319106359034777,\n \"categoryName\": \"mouthFrownRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 32,\n \"score\": 0.00008485237776767462,\n \"categoryName\": \"mouthFunnel\",\n \"displayName\": \"\"\n }, {\n \"index\": 33,\n \"score\": 0.0009051355300471187,\n \"categoryName\": \"mouthLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 34,\n \"score\": 0.0003630454302765429,\n \"categoryName\": \"mouthLowerDownLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 35,\n \"score\": 0.00017601238505449146,\n \"categoryName\": \"mouthLowerDownRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 36,\n \"score\": 0.12865161895751953,\n \"categoryName\": \"mouthPressLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 37,\n \"score\": 0.20137207210063934,\n \"categoryName\": \"mouthPressRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 38,\n \"score\": 0.0022203284315764904,\n \"categoryName\": \"mouthPucker\",\n \"displayName\": \"\"\n }, {\n \"index\": 39,\n \"score\": 0.0009096377179957926,\n \"categoryName\": \"mouthRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 40,\n \"score\": 0.34189721941947937,\n \"categoryName\": \"mouthRollLower\",\n \"displayName\": \"\"\n }, {\n \"index\": 41,\n \"score\": 0.11409689486026764,\n \"categoryName\": \"mouthRollUpper\",\n \"displayName\": \"\"\n }, {\n \"index\": 42,\n \"score\": 0.17172536253929138,\n \"categoryName\": \"mouthShrugLower\",\n \"displayName\": \"\"\n }, {\n \"index\": 43,\n \"score\": 0.004038424696773291,\n \"categoryName\": \"mouthShrugUpper\",\n \"displayName\": \"\"\n }, {\n \"index\": 44,\n \"score\": 0.00023205230536404997,\n \"categoryName\": \"mouthSmileLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 45,\n \"score\": 0.00019313619122840464,\n \"categoryName\": \"mouthSmileRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 46,\n \"score\": 0.0018571305554360151,\n \"categoryName\": \"mouthStretchLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 47,\n \"score\": 0.0023813238367438316,\n \"categoryName\": \"mouthStretchRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 48,\n \"score\": 0.000024323100660694763,\n \"categoryName\": \"mouthUpperUpLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 49,\n \"score\": 0.00003161552012898028,\n \"categoryName\": \"mouthUpperUpRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 50,\n \"score\": 1.08198406678639e-7,\n \"categoryName\": \"noseSneerLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 51,\n \"score\": 0.0000012652527630052646,\n \"categoryName\": \"noseSneerRight\",\n \"displayName\": \"\"\n }],\n \"headIndex\": -1,\n \"headName\": \"\"\n }],\n \"facialTransformationMatrixes\": [{\n \"rows\": 4,\n \"columns\": 4,\n \"data\": [0.9947517514228821, 0.10230544209480286, 0.0013679931871592999, 0, -0.10230997204780579, 0.9947447776794434, 0.003816320328041911, 0, -0.000970348424743861, -0.0039362297393381596, 0.9999914169311523, 0, 2.8888821601867676, -7.808934211730957, -30.52109146118164, 1]\n }]\n }\n};\n\nexport { Facemesh, FacemeshDatas, FacemeshEye, FacemeshEyeDefaults };\n","import * as React from 'react';\nimport { forwardRef, useEffect, useImperativeHandle, useContext, createContext } from 'react';\nimport { suspend, clear } from 'suspend-react';\n\n/* eslint react-hooks/exhaustive-deps: 1 */\nconst FaceLandmarkerContext = /* @__PURE__ */createContext({});\nconst FaceLandmarkerDefaults = {\n basePath: 'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.17/wasm',\n options: {\n baseOptions: {\n modelAssetPath: 'https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/1/face_landmarker.task',\n delegate: 'GPU'\n },\n runningMode: 'VIDEO',\n outputFaceBlendshapes: true,\n outputFacialTransformationMatrixes: true\n }\n};\nconst FaceLandmarker = /*#__PURE__*/forwardRef(({\n basePath = FaceLandmarkerDefaults.basePath,\n options = FaceLandmarkerDefaults.options,\n children\n}, fref) => {\n const opts = JSON.stringify(options);\n const faceLandmarker = suspend(async () => {\n const {\n FilesetResolver,\n FaceLandmarker\n } = await import('@mediapipe/tasks-vision');\n const vision = await FilesetResolver.forVisionTasks(basePath);\n return FaceLandmarker.createFromOptions(vision, options);\n }, [basePath, opts]);\n useEffect(() => {\n return () => {\n faceLandmarker == null || faceLandmarker.close();\n clear([basePath, opts]);\n };\n }, [faceLandmarker, basePath, opts]);\n useImperativeHandle(fref, () => faceLandmarker, [faceLandmarker]); // expose faceLandmarker through ref\n\n return /*#__PURE__*/React.createElement(FaceLandmarkerContext.Provider, {\n value: faceLandmarker\n }, children);\n});\nfunction useFaceLandmarker() {\n return useContext(FaceLandmarkerContext);\n}\n\nexport { FaceLandmarker, FaceLandmarkerDefaults, useFaceLandmarker };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { forwardRef, useRef, useState, useCallback, useMemo, useImperativeHandle, useEffect, Suspense, useContext, createContext } from 'react';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { easing } from 'maath';\nimport { VideoTexture } from '../core/VideoTexture.js';\nimport { WebcamVideoTexture } from './WebcamVideoTexture.js';\nimport { Facemesh } from './Facemesh.js';\nimport { useFaceLandmarker } from './FaceLandmarker.js';\n\nfunction mean(v1, v2) {\n return v1.clone().add(v2).multiplyScalar(0.5);\n}\nfunction localToLocal(objSrc, v, objDst) {\n // see: https://discourse.threejs.org/t/object3d-localtolocal/51564\n const v_world = objSrc.localToWorld(v);\n return objDst.worldToLocal(v_world);\n}\n\n//\n//\n//\n\nconst FaceControlsContext = /* @__PURE__ */createContext({});\n\n/**\n * The camera follows your face.\n *\n * Pre-requisite: wrap into a `FaceLandmarker` provider:\n *\n * ```jsx\n * <FaceLandmarker>...</FaceLandmarker>\n * ```\n */\n\nconst FaceControls = /* @__PURE__ */forwardRef(({\n camera,\n videoTexture = {\n start: true\n },\n manualDetect = false,\n faceLandmarkerResult,\n manualUpdate = false,\n makeDefault,\n smoothTime = 0.25,\n offset = true,\n offsetScalar = 80,\n eyes = false,\n eyesAsOrigin = true,\n depth = 0.15,\n debug = false,\n facemesh\n}, fref) => {\n var _result$facialTransfo, _result$faceBlendshap;\n const scene = useThree(state => state.scene);\n const defaultCamera = useThree(state => state.camera);\n const set = useThree(state => state.set);\n const get = useThree(state => state.get);\n const explCamera = camera || defaultCamera;\n const facemeshApiRef = useRef(null);\n\n //\n // computeTarget()\n //\n // Compute `target` position and rotation for the camera (according to <Facemesh>)\n //\n // 1. 👀 either following the 2 eyes\n // 2. 👤 or just the head mesh\n //\n\n const [target] = useState(() => new THREE.Object3D());\n const [irisRightDirPos] = useState(() => new THREE.Vector3());\n const [irisLeftDirPos] = useState(() => new THREE.Vector3());\n const [irisRightLookAt] = useState(() => new THREE.Vector3());\n const [irisLeftLookAt] = useState(() => new THREE.Vector3());\n const computeTarget = useCallback(() => {\n // same parent as the camera\n target.parent = explCamera.parent;\n const facemeshApi = facemeshApiRef.current;\n if (facemeshApi) {\n const {\n outerRef,\n eyeRightRef,\n eyeLeftRef\n } = facemeshApi;\n if (eyeRightRef.current && eyeLeftRef.current) {\n // 1. 👀\n\n const {\n irisDirRef: irisRightDirRef\n } = eyeRightRef.current;\n const {\n irisDirRef: irisLeftDirRef\n } = eyeLeftRef.current;\n if (irisRightDirRef.current && irisLeftDirRef.current && outerRef.current) {\n //\n // position: mean of irisRightDirPos,irisLeftDirPos\n //\n irisRightDirPos.copy(localToLocal(irisRightDirRef.current, new THREE.Vector3(0, 0, 0), outerRef.current));\n irisLeftDirPos.copy(localToLocal(irisLeftDirRef.current, new THREE.Vector3(0, 0, 0), outerRef.current));\n target.position.copy(localToLocal(outerRef.current, mean(irisRightDirPos, irisLeftDirPos), explCamera.parent || scene));\n\n //\n // lookAt: mean of irisRightLookAt,irisLeftLookAt\n //\n irisRightLookAt.copy(localToLocal(irisRightDirRef.current, new THREE.Vector3(0, 0, 1), outerRef.current));\n irisLeftLookAt.copy(localToLocal(irisLeftDirRef.current, new THREE.Vector3(0, 0, 1), outerRef.current));\n target.lookAt(outerRef.current.localToWorld(mean(irisRightLookAt, irisLeftLookAt)));\n }\n } else {\n // 2. 👤\n\n if (outerRef.current) {\n target.position.copy(localToLocal(outerRef.current, new THREE.Vector3(0, 0, 0), explCamera.parent || scene));\n target.lookAt(outerRef.current.localToWorld(new THREE.Vector3(0, 0, 1)));\n }\n }\n }\n return target;\n }, [explCamera, irisLeftDirPos, irisLeftLookAt, irisRightDirPos, irisRightLookAt, scene, target]);\n\n //\n // update()\n //\n // Updating the camera `current` position and rotation, following `target`\n //\n\n const [current] = useState(() => new THREE.Object3D());\n const update = useCallback(function (delta, target) {\n if (explCamera) {\n var _target;\n (_target = target) !== null && _target !== void 0 ? _target : target = computeTarget();\n if (smoothTime > 0) {\n // damping current\n const eps = 1e-9;\n easing.damp3(current.position, target.position, smoothTime, delta, undefined, undefined, eps);\n easing.dampE(current.rotation, target.rotation, smoothTime, delta, undefined, undefined, eps);\n } else {\n // instant\n current.position.copy(target.position);\n current.rotation.copy(target.rotation);\n }\n explCamera.position.copy(current.position);\n explCamera.rotation.copy(current.rotation);\n }\n }, [explCamera, computeTarget, smoothTime, current.position, current.rotation]);\n useFrame((_, delta) => {\n if (manualUpdate) return;\n update(delta);\n });\n\n //\n // onVideoFrame (only used if !manualDetect)\n //\n\n const videoTextureRef = useRef(null);\n const [_faceLandmarkerResult, setFaceLandmarkerResult] = useState();\n const faceLandmarker = useFaceLandmarker();\n const onVideoFrame = useCallback((now, metadata) => {\n const texture = videoTextureRef.current;\n if (!texture) return;\n const videoFrame = texture.source.data;\n const result = faceLandmarker == null ? void 0 : faceLandmarker.detectForVideo(videoFrame, now);\n setFaceLandmarkerResult(result);\n }, [faceLandmarker]);\n\n //\n // Ref API\n //\n\n const api = useMemo(() => Object.assign(Object.create(THREE.EventDispatcher.prototype), {\n computeTarget,\n update,\n facemeshApiRef\n }), [computeTarget, update]);\n useImperativeHandle(fref, () => api, [api]);\n\n //\n // makeDefault (`controls` global state)\n //\n\n useEffect(() => {\n if (makeDefault) {\n const old = get().controls;\n set({\n controls: api\n });\n return () => set({\n controls: old\n });\n }\n }, [makeDefault, api, get, set]);\n\n //\n //\n //\n\n const result = faceLandmarkerResult !== null && faceLandmarkerResult !== void 0 ? faceLandmarkerResult : _faceLandmarkerResult;\n const points = result == null ? void 0 : result.faceLandmarks[0];\n const facialTransformationMatrix = result == null || (_result$facialTransfo = result.facialTransformationMatrixes) == null ? void 0 : _result$facialTransfo[0];\n const faceBlendshapes = result == null || (_result$faceBlendshap = result.faceBlendshapes) == null ? void 0 : _result$faceBlendshap[0];\n const videoTextureProps = {\n onVideoFrame,\n ...videoTexture\n };\n return /*#__PURE__*/React.createElement(FaceControlsContext.Provider, {\n value: api\n }, !manualDetect && /*#__PURE__*/React.createElement(Suspense, {\n fallback: null\n }, 'src' in videoTextureProps ? /*#__PURE__*/React.createElement(VideoTexture, _extends({\n ref: videoTextureRef\n }, videoTextureProps)) : /*#__PURE__*/React.createElement(WebcamVideoTexture, _extends({\n ref: videoTextureRef\n }, videoTextureProps))), /*#__PURE__*/React.createElement(Facemesh, _extends({\n ref: facemeshApiRef,\n children: /*#__PURE__*/React.createElement(\"meshNormalMaterial\", {\n side: THREE.DoubleSide\n })\n }, facemesh, {\n points: points,\n depth: depth,\n facialTransformationMatrix: facialTransformationMatrix,\n faceBlendshapes: faceBlendshapes,\n eyes: eyes,\n eyesAsOrigin: eyesAsOrigin,\n offset: offset,\n offsetScalar: offsetScalar,\n debug: debug,\n \"rotation-z\": Math.PI,\n visible: debug\n })));\n});\nconst useFaceControls = () => useContext(FaceControlsContext);\n\nexport { FaceControls, useFaceControls };\n"],"x_google_ignoreList":[220,221],"mappings":"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AK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAI;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAI;EAAI;EAAI;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAI;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;EAAG;EAAK;EAAI;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAG;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAI;EAAK;EAAG;EAAI;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAG;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAG;EAAK;EAAK;EAAI;EAAG;EAAI;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAG;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAI;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAG;EAAG;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAG;EAAI;EAAK;EAAI;EAAI;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAG;EAAK;EAAI;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAG;EAAI;EAAG;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAG;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAI;EAAI;EAAG;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAI;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAG;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAG;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAG;EAAK;EAAI;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAG;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAG;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAG;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAG;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAG;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;CAAG;CAGxzY,aAAa;EACX,aAAa;GAAC;IACZ,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;EAAC;EACD,OAAO;GACL,QAAQ;GACR,QAAQ;GACR,QAAQ;GACR,QAAQ;GACR,SAAS;GACT,UAAU;EACZ;CACF;CAGA,8BAA8B;EAC5B,iBAAiB,CAAC;GAAC;IACjB,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;EAAC,CAAC;EACF,mBAAmB,CAAC;GAClB,cAAc;IAAC;KACb,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB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"} \ No newline at end of file +{"version":3,"file":"@react-three_drei.js","names":["_extends","OrthographicCamera","PerspectiveCamera","isRefObject","_extends","clamp","_toPrimitive","_toPropertyKey","_defineProperty","ownKeys","_objectSpread2","call","noop","identity","sharedConfig","_objectSpread2","THREE.Vector3","THREE.Vector2","THREE.Plane","THREE.Quaternion","THREE.Matrix4","_extends","_defineProperty","clamp","isLight","_position","col","context","context$1","_extends","_extends","context","create","version","version","__defProp","__defNormalProp","__publicField","getUniforms","i","MarchingCubes","Sphere","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","Sky","version","isCubeTexture","version","__defProp","__defNormalProp","__publicField","EventDispatcher","__defProp","__defNormalProp","__publicField","targetPosition","FirstPersonControls","EventDispatcher","__defProp","__defNormalProp","__publicField","TransformControls","Line","__defProp","__defNormalProp","__publicField","_vector","_changeEvent","PointerLockControls","EventDispatcher","__defProp","__defNormalProp","__publicField","DeviceOrientationControls","EventDispatcher","__defProp","__defNormalProp","__publicField","TrackballControls","EventDispatcher","__defProp","__defNormalProp","__publicField","_ray","Plane","OrbitControls","EventDispatcher","PerspectiveCamera","OrthographicCamera","MapControls","__defProp","__defNormalProp","__publicField","ArcballControls","EventDispatcher","OrthographicCamera","PerspectiveCamera","Line","Sphere","__defProp","__defNormalProp","__publicField","FlyControls","EventDispatcher","__defProp","__defNormalProp","__publicField","OrthographicCamera","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","decodeText","SRGBColorSpace","LinearSRGBColorSpace","sRGBEncoding","LinearEncoding","Loader","decodeText","SpotLight","version","Texture","Line","Points","PerspectiveCamera","OrthographicCamera","Sphere","center","Loader","Texture","PerspectiveCamera","OrthographicCamera","SpotLight","Line","decodeText","__defProp","__defNormalProp","__publicField","Loader","Texture","__defProp","__defNormalProp","__publicField","_taskCache","Loader","version","Loader","Shape","Loader","_box","Sphere","version","_sphere","Sphere","_ray","context","THREE.Vector2","_extends","_extends","_extends","THREE.Vector3","_extends","_extends","_extends","_extends","_extends","_extends","assign","now","createSDFGenerator","now$1","Texture","Sphere","Text","_extends","clear","_extends","_extends","THREE.Color","_extends","THREE.ShaderMaterial","THREE.Uniform","version","THREE.Color","THREE.Vector2","version","_extends","Image","THREE.EdgesGeometry","_extends","THREE.Color","THREE.Vector2","version","THREE.SkinnedMesh","THREE.InstancedMesh","THREE.Mesh","_extends","THREE.BufferGeometry","THREE.Vector3","THREE.Vector2","THREE.Matrix4","THREE.BufferAttribute","vertexShader","fragmentShader","THREE.ShaderMaterial","THREE.Color","defaults","_extends","_extends","THREE.Mesh","_extends","globalContext","_extends","THREE.Vector3","isArray","THREE.Vector3","THREE.Euler","THREE.Mesh","THREE.Object3D","_extends","_extends","Fragment","_extends","THREE.Vector2","version","THREE.Loader","THREE.DataTexture","THREE.RGBAFormat","THREE.FloatType","THREE.RGBAIntegerFormat","THREE.UnsignedIntType","THREE.Matrix4","THREE.Vector4","THREE.InstancedBufferAttribute","THREE.DynamicDrawUsage","THREE.InstancedBufferGeometry","THREE.BufferAttribute","THREE.Quaternion","THREE.Vector3","THREE.Color","_extends","THREE.WebGLRenderTarget","THREE.LinearFilter","THREE.HalfFloatType","THREE.DepthTexture","THREE.FloatType","isFunction","_extends","_extends","THREE.CubeCamera","_extends","_extends","_extends","_extends","_extends","_extends","THREE.Object3D","_extends","_extends","_extends","isOrthographicCamera","_sphere","CameraControls","bufferGeometry","CameraControlsImpl","_extends","THREE.Object3D","THREE.MeshBasicMaterial","THREE.SphereGeometry","THREE.CurvePath","THREE.Vector3","THREE.CatmullRomCurve3","_extends","THREE.Scene","_extends","_extends","THREE.Color","THREE.Vector3","version","THREE.Plane","_extends","_extends","calculateOffset","intersection","THREE.VideoTexture","THREE.Texture","THREE.TextureLoader","THREE.Vector3","THREE.SRGBColorSpace","StatsImpl","Stats","Stats","i","getGPUTier","Plane","Sphere","Plane","temp1","_vA","_raycast","_xyzFields","_raycastFirst","boundingBox","triangle","triangle2","invertedMat","obb","obb2","_intersectsGeometry","tempMatrix","obb","obb2","temp1","temp2","temp3","temp4","boundingBox","obb","obb2","tempMatrix","obb","ray","_mesh","Sphere","BVHShaderGLSL.bvh_struct_definitions","BVHShaderGLSL.common_functions","BVHShaderGLSL.bvh_ray_functions","_extends","THREE.Vector3","THREE.Box3","THREE.Vector3","_extends","Texture","Sphere","_extends","THREE.Matrix4","THREE.Mesh","THREE.Group","THREE.Color","THREE.Material","parentMatrix","translation","THREE.Vector3","rotation","THREE.Quaternion","scale","_extends","THREE.DynamicDrawUsage","context","THREE.PlaneGeometry","THREE.Group","THREE.Texture","THREE.Vector3","THREE.RepeatWrapping","_extends","THREE.Scene","_extends","_extends","THREE.ShaderMaterial","THREE.Vector2","THREE.Uniform","version","MeshReflectorMaterial","Plane","PerspectiveCamera","_extends","MeshRefractionMaterial","THREE.Color","THREE.Vector2","THREE.Matrix4","version","_extends","THREE.MeshPhysicalMaterial","THREE.Color","_extends","_extends","_extends","version","THREE.PointsMaterial","_extends","create","_extends","THREE.Box3","THREE.Vector3","THREE.Float32BufferAttribute","Shape","_extends","THREE.BufferGeometry","THREE.Sphere","THREE.Vector3","THREE.BufferAttribute","_extends","THREE.Box3","_extends","context","THREE.Vector3","THREE.Quaternion","THREE.Box3","THREE.Matrix4","OrthographicCamera","LinearSRGBColorSpace","Texture","SRGBColorSpace","LinearSRGBColorSpace","Loader","Texture","isRef","_extends","THREE.WebGLRenderTarget","THREE.PlaneGeometry","THREE.Mesh","THREE.MeshDepthMaterial","THREE.Color","THREE.ShaderMaterial","_extends","isGeometry","THREE.Color","version","THREE.Vector3","_extends","THREE.HalfFloatType","THREE.NearestFilter","THREE.WebGLRenderTarget","THREE.MeshLambertMaterial","_extends","_extends","THREE.Matrix4","THREE.MeshNormalMaterial","THREE.Color","version","THREE.Vector3","THREE.LinearFilter","THREE.UnsignedByteType","THREE.LinearMipmapLinearFilter","THREE.FloatType","THREE.CameraHelper","THREE.Frustum","THREE.Plane","THREE.Box3","_extends","THREE.ShaderMaterial","THREE.Vector3","THREE.Color","THREE.Vector2","version","_extends","THREE.Vector3","_extends","_extends","version","parentMatrix","context","_extends","THREE.ShaderMaterial","version","THREE.Vector2","THREE.Vector3","THREE.Vector4","THREE.Color","_extends","LIST_URL","THREE.Color","THREE.BufferAttribute","_extends","THREE.RGBADepthPacking","_inverseMatrix","THREE.Matrix4","_ray","THREE.Ray","_sphere","THREE.Sphere","THREE.Vector3","THREE.Group","THREE.Color","context","_extends","THREE.DynamicDrawUsage","context","THREE.Vector2","_extends","THREE.Color","THREE.Vector3","_extends","CubeCamera","Sphere","context","THREE.Scene","THREE.Object3D","Container","_extends","THREE.WebGLCubeRenderTarget","THREE.HalfFloatType","THREE.Scene","Container","_extends","THREE.ReplaceStencilOp","_extends","THREE.KeepStencilOp","THREE.OrthographicCamera","THREE.Vector3","THREE.Sphere","THREE.Matrix3","_extends","THREE.Quaternion","THREE.Euler","THREE.Vector2","version","THREE.Mesh","THREE.MeshBasicMaterial","THREE.Box3","THREE.OrthographicCamera","_extends","THREE.ShaderMaterial","THREE.WebGLRenderTarget","THREE.LinearMipmapLinearFilter","THREE.LinearFilter","THREE.FloatType","THREE.RedFormat","THREE.NearestFilter","ReactExports","useSyncExternalStoreExports","THREE.Color","THREE.Scene","_extends","context","vec1","THREE.Vector3","vec2","calculateOffset","upV","offsetMatrix","THREE.Matrix4","THREE.Quaternion","THREE.Vector3","THREE.Matrix4","ray","THREE.Ray","intersection","THREE.Plane","THREE.Ray","THREE.Vector3","THREE.Matrix4","THREE.Plane","THREE.Vector3","THREE.Matrix4","THREE.Quaternion","THREE.Matrix4","THREE.Box3","THREE.Vector3","_extends","_extends","_extends","THREE.Vector3","mean","THREE.Object3D","THREE.Quaternion","THREE.Sphere","THREE.Euler","THREE.Object3D","THREE.Vector3","Suspense","_extends"],"sources":["../../@babel/runtime/helpers/esm/extends.js","../../@react-three/drei/web/Html.js","../../@react-three/drei/web/CycleRaycast.js","../../@react-three/drei/web/useCursor.js","../../@react-three/drei/core/Progress.js","../../@react-three/drei/web/Loader.js","../../@use-gesture/core/dist/maths-0ab39ae9.esm.js","../../@use-gesture/core/dist/actions-fe213e88.esm.js","../../@use-gesture/core/dist/use-gesture-core.esm.js","../../@use-gesture/react/dist/use-gesture-react.esm.js","../../@react-three/drei/web/DragControls.js","../../maath/dist/objectSpread2-284232a6.esm.js","../../maath/dist/isNativeReflectConstruct-5594d075.esm.js","../../maath/dist/matrix-baa530bf.esm.js","../../maath/dist/triangle-b62b9067.esm.js","../../maath/dist/misc-19a3ec46.esm.js","../../maath/dist/classCallCheck-9098b006.esm.js","../../maath/dist/index-0332b2ed.esm.js","../../maath/dist/easing-0f4db1c0.esm.js","../../@react-three/drei/web/ScrollControls.js","../../@react-three/drei/web/PresentationControls.js","../../zustand/esm/middleware.mjs","../../@react-three/drei/web/KeyboardControls.js","../../three-stdlib/_polyfill/constants.js","../../three-stdlib/_polyfill/uv1.js","../../three-stdlib/modifiers/CurveModifier.js","../../three-stdlib/utils/BufferGeometryUtils.js","../../three-stdlib/node_modules/fflate/esm/browser.js","../../three-stdlib/objects/MarchingCubes.js","../../three-stdlib/math/SimplexNoise.js","../../three-stdlib/objects/Sky.js","../../three-stdlib/objects/GroundProjectedEnv.js","../../three-stdlib/utils/SkeletonUtils.js","../../three-stdlib/math/MeshSurfaceSampler.js","../../three-stdlib/controls/EventDispatcher.js","../../three-stdlib/controls/FirstPersonControls.js","../../three-stdlib/controls/TransformControls.js","../../three-stdlib/controls/PointerLockControls.js","../../three-stdlib/controls/DeviceOrientationControls.js","../../three-stdlib/controls/TrackballControls.js","../../three-stdlib/controls/OrbitControls.js","../../three-stdlib/controls/ArcballControls.js","../../three-stdlib/controls/FlyControls.js","../../three-stdlib/postprocessing/Pass.js","../../three-stdlib/postprocessing/ShaderPass.js","../../three-stdlib/shaders/CopyShader.js","../../three-stdlib/postprocessing/MaskPass.js","../../three-stdlib/postprocessing/EffectComposer.js","../../three-stdlib/postprocessing/RenderPass.js","../../three-stdlib/_polyfill/LoaderUtils.js","../../three-stdlib/loaders/GLTFLoader.js","../../three-stdlib/geometries/DecalGeometry.js","../../three-stdlib/geometries/TextGeometry.js","../../three-stdlib/shaders/GammaCorrectionShader.js","../../three-stdlib/shaders/HorizontalBlurShader.js","../../three-stdlib/shaders/VerticalBlurShader.js","../../three-stdlib/interactive/SelectionBox.js","../../three-stdlib/effects/AsciiEffect.js","../../three-stdlib/curves/NURBSUtils.js","../../three-stdlib/curves/NURBSCurve.js","../../three-stdlib/loaders/FBXLoader.js","../../three-stdlib/loaders/FontLoader.js","../../three-stdlib/_polyfill/Data3DTexture.js","../../three-stdlib/utils/WorkerPool.js","../../three-stdlib/libs/ktx-parse.js","../../three-stdlib/libs/zstddec.js","../../three-stdlib/_polyfill/CompressedCubeTexture.js","../../three-stdlib/_polyfill/CompressedArrayTexture.js","../../three-stdlib/loaders/KTX2Loader.js","../../three-stdlib/loaders/RGBELoader.js","../../three-stdlib/loaders/EXRLoader.js","../../three-stdlib/loaders/SVGLoader.js","../../three-stdlib/loaders/DRACOLoader.js","../../three-stdlib/lines/LineSegmentsGeometry.js","../../three-stdlib/lines/LineGeometry.js","../../three-stdlib/lines/LineMaterial.js","../../three-stdlib/lines/LineSegments2.js","../../three-stdlib/lines/Line2.js","../../three-stdlib/libs/MeshoptDecoder.js","../../zustand/esm/vanilla/shallow.mjs","../../@react-three/drei/web/Select.js","../../@react-three/drei/core/Billboard.js","../../@react-three/drei/core/ScreenSpace.js","../../@react-three/drei/core/calculateScaleFactor.js","../../@react-three/drei/core/ScreenSizer.js","../../@react-three/drei/core/Line.js","../../@react-three/drei/core/QuadraticBezierLine.js","../../@react-three/drei/core/CubicBezierLine.js","../../@react-three/drei/core/CatmullRomLine.js","../../@react-three/drei/core/PositionalAudio.js","../../troika-worker-utils/dist/troika-worker-utils.esm.js","../../webgl-sdf-generator/dist/webgl-sdf-generator.mjs","../../bidi-js/dist/bidi.mjs","../../troika-three-utils/dist/troika-three-utils.esm.js","../../troika-three-text/dist/troika-three-text.esm.js","../../@react-three/drei/core/Text.js","../../@react-three/drei/core/useFont.js","../../@react-three/drei/core/Text3D.js","../../@react-three/drei/core/Effects.js","../../@react-three/drei/core/GradientTexture.js","../../@react-three/drei/core/shaderMaterial.js","../../@react-three/drei/core/Texture.js","../../@react-three/drei/helpers/constants.js","../../@react-three/drei/core/Image.js","../../@react-three/drei/core/Edges.js","../../@react-three/drei/core/Outlines.js","../../meshline/dist/index.js","../../@react-three/drei/core/Trail.js","../../@react-three/drei/core/Sampler.js","../../@react-three/drei/core/ComputedAttribute.js","../../@react-three/drei/core/Clone.js","../../@react-three/drei/core/MarchingCubes.js","../../@react-three/drei/core/Decal.js","../../@react-three/drei/core/Svg.js","../../@react-three/drei/core/Gltf.js","../../@react-three/drei/core/AsciiRenderer.js","../../@react-three/drei/core/Splat.js","../../@react-three/drei/core/Fbo.js","../../@react-three/drei/core/OrthographicCamera.js","../../@react-three/drei/core/PerspectiveCamera.js","../../@react-three/drei/core/CubeCamera.js","../../@react-three/drei/core/DeviceOrientationControls.js","../../@react-three/drei/core/FlyControls.js","../../@react-three/drei/core/MapControls.js","../../@react-three/drei/core/OrbitControls.js","../../@react-three/drei/core/TrackballControls.js","../../@react-three/drei/core/ArcballControls.js","../../@react-three/drei/core/TransformControls.js","../../@react-three/drei/core/PointerLockControls.js","../../@react-three/drei/core/FirstPersonControls.js","../../camera-controls/dist/camera-controls.module.js","../../@react-three/drei/core/CameraControls.js","../../@react-three/drei/core/MotionPathControls.js","../../@react-three/drei/core/Hud.js","../../@react-three/drei/core/GizmoHelper.js","../../@react-three/drei/core/GizmoViewcube.js","../../@react-three/drei/core/GizmoViewport.js","../../@react-three/drei/core/Grid.js","../../@react-three/drei/core/CubeTexture.js","../../@react-three/drei/core/Fbx.js","../../@react-three/drei/core/Ktx2.js","../../hls.js/dist/hls.mjs","../../@react-three/drei/core/VideoTexture.js","../../@react-three/drei/core/useSpriteLoader.js","../../@react-three/drei/core/Helper.js","../../stats.js/build/stats.min.js","../../@react-three/drei/helpers/useEffectfulState.js","../../@react-three/drei/core/Stats.js","../../stats-gl/dist/panel.js","../../stats-gl/dist/main.js","../../@react-three/drei/core/StatsGl.js","../../@react-three/drei/core/useDepthBuffer.js","../../@react-three/drei/core/useAspect.js","../../@react-three/drei/core/useCamera.js","../../detect-gpu/dist/detect-gpu.esm.js","../../@react-three/drei/core/DetectGPU.js","../../three-mesh-bvh/src/core/Constants.js","../../three-mesh-bvh/src/core/build/geometryUtils.js","../../three-mesh-bvh/src/core/build/computeBoundsUtils.js","../../three-mesh-bvh/src/utils/ArrayBoxUtilities.js","../../three-mesh-bvh/src/core/build/splitUtils.js","../../three-mesh-bvh/src/core/MeshBVHNode.js","../../three-mesh-bvh/src/core/build/sortUtils.generated.js","../../three-mesh-bvh/src/core/build/sortUtils_indirect.generated.js","../../three-mesh-bvh/src/core/utils/nodeBufferUtils.js","../../three-mesh-bvh/src/core/build/buildUtils.js","../../three-mesh-bvh/src/core/build/buildTree.js","../../three-mesh-bvh/src/math/SeparatingAxisBounds.js","../../three-mesh-bvh/src/math/MathUtilities.js","../../three-mesh-bvh/src/math/ExtendedTriangle.js","../../three-mesh-bvh/src/math/OrientedBox.js","../../three-mesh-bvh/src/utils/PrimitivePool.js","../../three-mesh-bvh/src/utils/ExtendedTrianglePool.js","../../three-mesh-bvh/src/core/utils/BufferStack.js","../../three-mesh-bvh/src/core/cast/shapecast.js","../../three-mesh-bvh/src/core/cast/closestPointToPoint.js","../../three-mesh-bvh/src/utils/ThreeRayIntersectUtilities.js","../../three-mesh-bvh/src/utils/TriangleUtilities.js","../../three-mesh-bvh/src/core/utils/iterationUtils.generated.js","../../three-mesh-bvh/src/core/cast/refit.generated.js","../../three-mesh-bvh/src/core/utils/intersectUtils.js","../../three-mesh-bvh/src/core/utils/iterationUtils_indirect.generated.js","../../three-mesh-bvh/src/core/cast/raycast.generated.js","../../three-mesh-bvh/src/core/cast/raycastFirst.generated.js","../../three-mesh-bvh/src/core/cast/intersectsGeometry.generated.js","../../three-mesh-bvh/src/core/cast/closestPointToGeometry.generated.js","../../three-mesh-bvh/src/core/cast/refit_indirect.generated.js","../../three-mesh-bvh/src/core/cast/raycast_indirect.generated.js","../../three-mesh-bvh/src/core/cast/raycastFirst_indirect.generated.js","../../three-mesh-bvh/src/core/cast/intersectsGeometry_indirect.generated.js","../../three-mesh-bvh/src/core/cast/closestPointToGeometry_indirect.generated.js","../../three-mesh-bvh/src/utils/BufferUtils.js","../../three-mesh-bvh/src/core/cast/bvhcast.js","../../three-mesh-bvh/src/core/MeshBVH.js","../../three-mesh-bvh/src/utils/GeometryRayIntersectUtilities.js","../../three-mesh-bvh/src/utils/ExtensionUtilities.js","../../three-mesh-bvh/src/gpu/VertexAttributeTexture.js","../../three-mesh-bvh/src/gpu/MeshBVHUniformStruct.js","../../three-mesh-bvh/src/gpu/glsl/common_functions.glsl.js","../../three-mesh-bvh/src/gpu/glsl/bvh_ray_functions.glsl.js","../../three-mesh-bvh/src/gpu/glsl/bvh_struct_definitions.glsl.js","../../three-mesh-bvh/src/index.js","../../@react-three/drei/core/Bvh.js","../../@react-three/drei/core/useContextBridge.js","../../@react-three/drei/core/useAnimations.js","../../@react-three/drei/core/useIntersect.js","../../@react-three/drei/core/useBoxProjectedEnv.js","../../@react-three/drei/core/BBAnchor.js","../../@react-three/drei/core/TrailTexture.js","../../@react-three/drei/core/Center.js","../../@react-three/drei/core/Example.js","../../@react-three/drei/helpers/deprecated.js","../../@react-three/drei/core/Instances.js","../../@react-three/drei/core/SpriteAnimator.js","../../@react-three/drei/core/CurveModifier.js","../../@react-three/drei/helpers/glsl/distort.vert.glsl.js","../../@react-three/drei/core/MeshDistortMaterial.js","../../@react-three/drei/core/MeshWobbleMaterial.js","../../@react-three/drei/materials/ConvolutionMaterial.js","../../@react-three/drei/materials/BlurPass.js","../../@react-three/drei/materials/MeshReflectorMaterial.js","../../@react-three/drei/core/MeshReflectorMaterial.js","../../@react-three/drei/materials/MeshRefractionMaterial.js","../../@react-three/drei/core/MeshRefractionMaterial.js","../../@react-three/drei/materials/DiscardMaterial.js","../../@react-three/drei/core/MeshTransmissionMaterial.js","../../@react-three/drei/core/MeshDiscardMaterial.js","../../@react-three/drei/core/MultiMaterial.js","../../@react-three/drei/core/PointMaterial.js","../../@react-three/drei/core/softShadows.js","../../@react-three/drei/core/shapes.js","../../@react-three/drei/core/RoundedBox.js","../../@react-three/drei/core/ScreenQuad.js","../../@react-three/drei/core/Resize.js","../../@react-three/drei/core/Bounds.js","../../@react-three/drei/core/CameraShake.js","../../@react-three/drei/core/Float.js","../../@monogrid/gainmap-js/dist/QuadRenderer-Bj1xl_EK.js","../../@monogrid/gainmap-js/dist/Loader-DLI-_JDP.js","../../@monogrid/gainmap-js/dist/decode.js","../../@react-three/drei/helpers/environment-assets.js","../../@react-three/drei/core/useEnvironment.js","../../@react-three/drei/core/Environment.js","../../@react-three/drei/core/ContactShadows.js","../../@react-three/drei/core/AccumulativeShadows.js","../../@react-three/drei/core/Stage.js","../../@react-three/drei/core/Backdrop.js","../../@react-three/drei/core/Shadow.js","../../@react-three/drei/core/Caustics.js","../../@react-three/drei/materials/SpotLightMaterial.js","../../@react-three/drei/helpers/glsl/DefaultSpotlightShadowShadows.glsl.js","../../@react-three/drei/core/SpotLight.js","../../@react-three/drei/core/Lightformer.js","../../@react-three/drei/core/Sky.js","../../@react-three/drei/core/Stars.js","../../@react-three/drei/core/Cloud.js","../../@react-three/drei/core/Sparkles.js","../../@react-three/drei/core/MatcapTexture.js","../../@react-three/drei/core/NormalTexture.js","../../@react-three/drei/materials/WireframeMaterial.js","../../@react-three/drei/core/Wireframe.js","../../@react-three/drei/core/ShadowAlpha.js","../../@react-three/drei/core/Points.js","../../@react-three/drei/core/Segments.js","../../@react-three/drei/core/Detailed.js","../../@react-three/drei/core/Preload.js","../../@react-three/drei/core/BakeShadows.js","../../@react-three/drei/core/meshBounds.js","../../@react-three/drei/core/AdaptiveDpr.js","../../@react-three/drei/core/AdaptiveEvents.js","../../@react-three/drei/core/PerformanceMonitor.js","../../@react-three/drei/core/RenderTexture.js","../../@react-three/drei/core/RenderCubeTexture.js","../../@react-three/drei/core/Mask.js","../../@react-three/drei/core/Fisheye.js","../../@react-three/drei/core/MeshPortalMaterial.js","../../tunnel-rat/node_modules/zustand/esm/vanilla.mjs","../../tunnel-rat/node_modules/zustand/esm/index.mjs","../../tunnel-rat/dist/index.js","../../@react-three/drei/web/View.js","../../@react-three/drei/web/pivotControls/context.js","../../@react-three/drei/web/pivotControls/AxisArrow.js","../../@react-three/drei/web/pivotControls/AxisRotator.js","../../@react-three/drei/web/pivotControls/PlaneSlider.js","../../@react-three/drei/web/pivotControls/ScalingSphere.js","../../@react-three/drei/web/pivotControls/index.js","../../@react-three/drei/web/ScreenVideoTexture.js","../../@react-three/drei/web/WebcamVideoTexture.js","../../@react-three/drei/web/Facemesh.js","../../@react-three/drei/web/FaceLandmarker.js","../../@react-three/drei/web/FaceControls.js"],"sourcesContent":["function _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nexport { _extends as default };","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom/client';\nimport { Vector3, DoubleSide, OrthographicCamera, PerspectiveCamera, Vector2 } from 'three';\nimport { useThree, useFrame } from '@react-three/fiber';\n\nconst v1 = /* @__PURE__ */new Vector3();\nconst v2 = /* @__PURE__ */new Vector3();\nconst v3 = /* @__PURE__ */new Vector3();\nconst v4 = /* @__PURE__ */new Vector2();\nfunction defaultCalculatePosition(el, camera, size) {\n const objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n objectPos.project(camera);\n const widthHalf = size.width / 2;\n const heightHalf = size.height / 2;\n return [objectPos.x * widthHalf + widthHalf, -(objectPos.y * heightHalf) + heightHalf];\n}\nfunction isObjectBehindCamera(el, camera) {\n const objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n const cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);\n const deltaCamObj = objectPos.sub(cameraPos);\n const camDir = camera.getWorldDirection(v3);\n return deltaCamObj.angleTo(camDir) > Math.PI / 2;\n}\nfunction isObjectVisible(el, camera, raycaster, occlude) {\n const elPos = v1.setFromMatrixPosition(el.matrixWorld);\n const screenPos = elPos.clone();\n screenPos.project(camera);\n v4.set(screenPos.x, screenPos.y);\n raycaster.setFromCamera(v4, camera);\n const intersects = raycaster.intersectObjects(occlude, true);\n if (intersects.length) {\n const intersectionDistance = intersects[0].distance;\n const pointDistance = elPos.distanceTo(raycaster.ray.origin);\n return pointDistance < intersectionDistance;\n }\n return true;\n}\nfunction objectScale(el, camera) {\n if (camera instanceof OrthographicCamera) {\n return camera.zoom;\n } else if (camera instanceof PerspectiveCamera) {\n const objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n const cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);\n const vFOV = camera.fov * Math.PI / 180;\n const dist = objectPos.distanceTo(cameraPos);\n const scaleFOV = 2 * Math.tan(vFOV / 2) * dist;\n return 1 / scaleFOV;\n } else {\n return 1;\n }\n}\nfunction objectZIndex(el, camera, zIndexRange) {\n if (camera instanceof PerspectiveCamera || camera instanceof OrthographicCamera) {\n const objectPos = v1.setFromMatrixPosition(el.matrixWorld);\n const cameraPos = v2.setFromMatrixPosition(camera.matrixWorld);\n const dist = objectPos.distanceTo(cameraPos);\n const A = (zIndexRange[1] - zIndexRange[0]) / (camera.far - camera.near);\n const B = zIndexRange[1] - A * camera.far;\n return Math.round(A * dist + B);\n }\n return undefined;\n}\nconst epsilon = value => Math.abs(value) < 1e-10 ? 0 : value;\nfunction getCSSMatrix(matrix, multipliers, prepend = '') {\n let matrix3d = 'matrix3d(';\n for (let i = 0; i !== 16; i++) {\n matrix3d += epsilon(multipliers[i] * matrix.elements[i]) + (i !== 15 ? ',' : ')');\n }\n return prepend + matrix3d;\n}\nconst getCameraCSSMatrix = (multipliers => {\n return matrix => getCSSMatrix(matrix, multipliers);\n})([1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1, 1, -1, 1, 1]);\nconst getObjectCSSMatrix = (scaleMultipliers => {\n return (matrix, factor) => getCSSMatrix(matrix, scaleMultipliers(factor), 'translate(-50%,-50%)');\n})(f => [1 / f, 1 / f, 1 / f, 1, -1 / f, -1 / f, -1 / f, -1, 1 / f, 1 / f, 1 / f, 1, 1, 1, 1, 1]);\nfunction isRefObject(ref) {\n return ref && typeof ref === 'object' && 'current' in ref;\n}\nconst Html = /* @__PURE__ */React.forwardRef(({\n children,\n eps = 0.001,\n style,\n className,\n prepend,\n center,\n fullscreen,\n portal,\n distanceFactor,\n sprite = false,\n transform = false,\n occlude,\n onOcclude,\n castShadow,\n receiveShadow,\n material,\n geometry,\n zIndexRange = [16777271, 0],\n calculatePosition = defaultCalculatePosition,\n as = 'div',\n wrapperClass,\n pointerEvents = 'auto',\n ...props\n}, ref) => {\n const {\n gl,\n camera,\n scene,\n size,\n raycaster,\n events,\n viewport\n } = useThree();\n const [el] = React.useState(() => document.createElement(as));\n const root = React.useRef(null);\n const group = React.useRef(null);\n const oldZoom = React.useRef(0);\n const oldPosition = React.useRef([0, 0]);\n const transformOuterRef = React.useRef(null);\n const transformInnerRef = React.useRef(null);\n // Append to the connected element, which makes HTML work with views\n const target = (portal == null ? void 0 : portal.current) || events.connected || gl.domElement.parentNode;\n const occlusionMeshRef = React.useRef(null);\n const isMeshSizeSet = React.useRef(false);\n const isRayCastOcclusion = React.useMemo(() => {\n return occlude && occlude !== 'blending' || Array.isArray(occlude) && occlude.length && isRefObject(occlude[0]);\n }, [occlude]);\n React.useLayoutEffect(() => {\n const el = gl.domElement;\n if (occlude && occlude === 'blending') {\n el.style.zIndex = `${Math.floor(zIndexRange[0] / 2)}`;\n el.style.position = 'absolute';\n el.style.pointerEvents = 'none';\n } else {\n el.style.zIndex = null;\n el.style.position = null;\n el.style.pointerEvents = null;\n }\n }, [occlude]);\n React.useLayoutEffect(() => {\n if (group.current) {\n const currentRoot = root.current = ReactDOM.createRoot(el);\n scene.updateMatrixWorld();\n if (transform) {\n el.style.cssText = `position:absolute;top:0;left:0;pointer-events:none;overflow:hidden;`;\n } else {\n const vec = calculatePosition(group.current, camera, size);\n el.style.cssText = `position:absolute;top:0;left:0;transform:translate3d(${vec[0]}px,${vec[1]}px,0);transform-origin:0 0;`;\n }\n if (target) {\n if (prepend) target.prepend(el);else target.appendChild(el);\n }\n return () => {\n if (target) target.removeChild(el);\n currentRoot.unmount();\n };\n }\n }, [target, transform]);\n React.useLayoutEffect(() => {\n if (wrapperClass) el.className = wrapperClass;\n }, [wrapperClass]);\n const styles = React.useMemo(() => {\n if (transform) {\n return {\n position: 'absolute',\n top: 0,\n left: 0,\n width: size.width,\n height: size.height,\n transformStyle: 'preserve-3d',\n pointerEvents: 'none'\n };\n } else {\n return {\n position: 'absolute',\n transform: center ? 'translate3d(-50%,-50%,0)' : 'none',\n ...(fullscreen && {\n top: -size.height / 2,\n left: -size.width / 2,\n width: size.width,\n height: size.height\n }),\n ...style\n };\n }\n }, [style, center, fullscreen, size, transform]);\n const transformInnerStyles = React.useMemo(() => ({\n position: 'absolute',\n pointerEvents\n }), [pointerEvents]);\n React.useLayoutEffect(() => {\n isMeshSizeSet.current = false;\n if (transform) {\n var _root$current;\n (_root$current = root.current) == null || _root$current.render(/*#__PURE__*/React.createElement(\"div\", {\n ref: transformOuterRef,\n style: styles\n }, /*#__PURE__*/React.createElement(\"div\", {\n ref: transformInnerRef,\n style: transformInnerStyles\n }, /*#__PURE__*/React.createElement(\"div\", {\n ref: ref,\n className: className,\n style: style,\n children: children\n }))));\n } else {\n var _root$current2;\n (_root$current2 = root.current) == null || _root$current2.render(/*#__PURE__*/React.createElement(\"div\", {\n ref: ref,\n style: styles,\n className: className,\n children: children\n }));\n }\n });\n const visible = React.useRef(true);\n useFrame(gl => {\n if (group.current) {\n camera.updateMatrixWorld();\n group.current.updateWorldMatrix(true, false);\n const vec = transform ? oldPosition.current : calculatePosition(group.current, camera, size);\n if (transform || Math.abs(oldZoom.current - camera.zoom) > eps || Math.abs(oldPosition.current[0] - vec[0]) > eps || Math.abs(oldPosition.current[1] - vec[1]) > eps) {\n const isBehindCamera = isObjectBehindCamera(group.current, camera);\n let raytraceTarget = false;\n if (isRayCastOcclusion) {\n if (Array.isArray(occlude)) {\n raytraceTarget = occlude.map(item => item.current);\n } else if (occlude !== 'blending') {\n raytraceTarget = [scene];\n }\n }\n const previouslyVisible = visible.current;\n if (raytraceTarget) {\n const isvisible = isObjectVisible(group.current, camera, raycaster, raytraceTarget);\n visible.current = isvisible && !isBehindCamera;\n } else {\n visible.current = !isBehindCamera;\n }\n if (previouslyVisible !== visible.current) {\n if (onOcclude) onOcclude(!visible.current);else el.style.display = visible.current ? 'block' : 'none';\n }\n const halfRange = Math.floor(zIndexRange[0] / 2);\n const zRange = occlude ? isRayCastOcclusion //\n ? [zIndexRange[0], halfRange] : [halfRange - 1, 0] : zIndexRange;\n el.style.zIndex = `${objectZIndex(group.current, camera, zRange)}`;\n if (transform) {\n const [widthHalf, heightHalf] = [size.width / 2, size.height / 2];\n const fov = camera.projectionMatrix.elements[5] * heightHalf;\n const {\n isOrthographicCamera,\n top,\n left,\n bottom,\n right\n } = camera;\n const cameraMatrix = getCameraCSSMatrix(camera.matrixWorldInverse);\n const cameraTransform = isOrthographicCamera ? `scale(${fov})translate(${epsilon(-(right + left) / 2)}px,${epsilon((top + bottom) / 2)}px)` : `translateZ(${fov}px)`;\n let matrix = group.current.matrixWorld;\n if (sprite) {\n matrix = camera.matrixWorldInverse.clone().transpose().copyPosition(matrix).scale(group.current.scale);\n matrix.elements[3] = matrix.elements[7] = matrix.elements[11] = 0;\n matrix.elements[15] = 1;\n }\n el.style.width = size.width + 'px';\n el.style.height = size.height + 'px';\n el.style.perspective = isOrthographicCamera ? '' : `${fov}px`;\n if (transformOuterRef.current && transformInnerRef.current) {\n transformOuterRef.current.style.transform = `${cameraTransform}${cameraMatrix}translate(${widthHalf}px,${heightHalf}px)`;\n transformInnerRef.current.style.transform = getObjectCSSMatrix(matrix, 1 / ((distanceFactor || 10) / 400));\n }\n } else {\n const scale = distanceFactor === undefined ? 1 : objectScale(group.current, camera) * distanceFactor;\n el.style.transform = `translate3d(${vec[0]}px,${vec[1]}px,0) scale(${scale})`;\n }\n oldPosition.current = vec;\n oldZoom.current = camera.zoom;\n }\n }\n if (!isRayCastOcclusion && occlusionMeshRef.current && !isMeshSizeSet.current) {\n if (transform) {\n if (transformOuterRef.current) {\n const el = transformOuterRef.current.children[0];\n if (el != null && el.clientWidth && el != null && el.clientHeight) {\n const {\n isOrthographicCamera\n } = camera;\n if (isOrthographicCamera || geometry) {\n if (props.scale) {\n if (!Array.isArray(props.scale)) {\n occlusionMeshRef.current.scale.setScalar(1 / props.scale);\n } else if (props.scale instanceof Vector3) {\n occlusionMeshRef.current.scale.copy(props.scale.clone().divideScalar(1));\n } else {\n occlusionMeshRef.current.scale.set(1 / props.scale[0], 1 / props.scale[1], 1 / props.scale[2]);\n }\n }\n } else {\n const ratio = (distanceFactor || 10) / 400;\n const w = el.clientWidth * ratio;\n const h = el.clientHeight * ratio;\n occlusionMeshRef.current.scale.set(w, h, 1);\n }\n isMeshSizeSet.current = true;\n }\n }\n } else {\n const ele = el.children[0];\n if (ele != null && ele.clientWidth && ele != null && ele.clientHeight) {\n const ratio = 1 / viewport.factor;\n const w = ele.clientWidth * ratio;\n const h = ele.clientHeight * ratio;\n occlusionMeshRef.current.scale.set(w, h, 1);\n isMeshSizeSet.current = true;\n }\n occlusionMeshRef.current.lookAt(gl.camera.position);\n }\n }\n });\n const shaders = React.useMemo(() => ({\n vertexShader: !transform ? /* glsl */`\n /*\n This shader is from the THREE's SpriteMaterial.\n We need to turn the backing plane into a Sprite\n (make it always face the camera) if \"transfrom\"\n is false.\n */\n #include <common>\n\n void main() {\n vec2 center = vec2(0., 1.);\n float rotation = 0.0;\n\n // This is somewhat arbitrary, but it seems to work well\n // Need to figure out how to derive this dynamically if it even matters\n float size = 0.03;\n\n vec4 mvPosition = modelViewMatrix * vec4( 0.0, 0.0, 0.0, 1.0 );\n vec2 scale;\n scale.x = length( vec3( modelMatrix[ 0 ].x, modelMatrix[ 0 ].y, modelMatrix[ 0 ].z ) );\n scale.y = length( vec3( modelMatrix[ 1 ].x, modelMatrix[ 1 ].y, modelMatrix[ 1 ].z ) );\n\n bool isPerspective = isPerspectiveMatrix( projectionMatrix );\n if ( isPerspective ) scale *= - mvPosition.z;\n\n vec2 alignedPosition = ( position.xy - ( center - vec2( 0.5 ) ) ) * scale * size;\n vec2 rotatedPosition;\n rotatedPosition.x = cos( rotation ) * alignedPosition.x - sin( rotation ) * alignedPosition.y;\n rotatedPosition.y = sin( rotation ) * alignedPosition.x + cos( rotation ) * alignedPosition.y;\n mvPosition.xy += rotatedPosition;\n\n gl_Position = projectionMatrix * mvPosition;\n }\n ` : undefined,\n fragmentShader: /* glsl */`\n void main() {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0);\n }\n `\n }), [transform]);\n return /*#__PURE__*/React.createElement(\"group\", _extends({}, props, {\n ref: group\n }), occlude && !isRayCastOcclusion && /*#__PURE__*/React.createElement(\"mesh\", {\n castShadow: castShadow,\n receiveShadow: receiveShadow,\n ref: occlusionMeshRef\n }, geometry || /*#__PURE__*/React.createElement(\"planeGeometry\", null), material || /*#__PURE__*/React.createElement(\"shaderMaterial\", {\n side: DoubleSide,\n vertexShader: shaders.vertexShader,\n fragmentShader: shaders.fragmentShader\n })));\n});\n\nexport { Html };\n","import * as React from 'react';\nimport { useThree } from '@react-three/fiber';\n\nfunction CycleRaycast({\n onChanged,\n portal,\n preventDefault = true,\n scroll = true,\n keyCode = 9\n}) {\n const cycle = React.useRef(0);\n const setEvents = useThree(state => state.setEvents);\n const get = useThree(state => state.get);\n const gl = useThree(state => state.gl);\n React.useEffect(() => {\n var _portal$current;\n let hits = [];\n let lastEvent = undefined;\n const prev = get().events.filter;\n const target = (_portal$current = portal == null ? void 0 : portal.current) !== null && _portal$current !== void 0 ? _portal$current : gl.domElement.parentNode;\n\n // Render custom status\n const renderStatus = () => target && onChanged && onChanged(hits, Math.round(cycle.current) % hits.length);\n\n // Overwrite the raycasters custom filter (this only exists in r3f)\n setEvents({\n filter: (intersections, state) => {\n // Reset cycle when the intersections change\n let clone = [...intersections];\n if (clone.length !== hits.length || !hits.every(hit => clone.map(e => e.object.uuid).includes(hit.object.uuid))) {\n cycle.current = 0;\n hits = clone;\n renderStatus();\n }\n // Run custom filter if there is one\n if (prev) clone = prev(clone, state);\n // Cycle through the actual raycast intersects\n for (let i = 0; i < Math.round(cycle.current) % clone.length; i++) {\n const first = clone.shift();\n clone = [...clone, first];\n }\n return clone;\n }\n });\n\n // Cycle, refresh events and render status\n const refresh = fn => {\n var _get$events$handlers, _get$events$handlers2;\n cycle.current = fn(cycle.current);\n // Cancel hovered elements and fake a pointer-move\n (_get$events$handlers = get().events.handlers) == null || _get$events$handlers.onPointerCancel(undefined);\n (_get$events$handlers2 = get().events.handlers) == null || _get$events$handlers2.onPointerMove(lastEvent);\n renderStatus();\n };\n\n // Key events\n const tabEvent = event => {\n if ((event.keyCode || event.which) === keyCode) {\n if (preventDefault) event.preventDefault();\n if (hits.length > 1) refresh(current => current + 1);\n }\n };\n\n // Wheel events\n const wheelEvent = event => {\n if (preventDefault) event.preventDefault();\n let delta = 0;\n if (!event) event = window.event;\n if (event.wheelDelta) delta = event.wheelDelta / 120;else if (event.detail) delta = -event.detail / 3;\n if (hits.length > 1) refresh(current => Math.abs(current - delta));\n };\n\n // Catch last move event and position custom status\n const moveEvent = event => lastEvent = event;\n document.addEventListener('pointermove', moveEvent, {\n passive: true\n });\n if (scroll) document.addEventListener('wheel', wheelEvent);\n if (keyCode !== undefined) document.addEventListener('keydown', tabEvent);\n return () => {\n // Clean up\n setEvents({\n filter: prev\n });\n if (keyCode !== undefined) document.removeEventListener('keydown', tabEvent);\n if (scroll) document.removeEventListener('wheel', wheelEvent);\n document.removeEventListener('pointermove', moveEvent);\n };\n }, [gl, get, setEvents, preventDefault, scroll, keyCode]);\n return null;\n}\n\nexport { CycleRaycast };\n","import * as React from 'react';\n\nfunction useCursor(hovered, onPointerOver = 'pointer', onPointerOut = 'auto', container = document.body) {\n React.useEffect(() => {\n if (hovered) {\n container.style.cursor = onPointerOver;\n return () => void (container.style.cursor = onPointerOut);\n }\n }, [hovered]);\n}\n\nexport { useCursor };\n","import * as React from 'react';\nimport { DefaultLoadingManager } from 'three';\nimport { create } from 'zustand';\n\nlet saveLastTotalLoaded = 0;\nconst useProgress = /* @__PURE__ */create(set => {\n DefaultLoadingManager.onStart = (item, loaded, total) => {\n set({\n active: true,\n item,\n loaded,\n total,\n progress: (loaded - saveLastTotalLoaded) / (total - saveLastTotalLoaded) * 100\n });\n };\n DefaultLoadingManager.onLoad = () => {\n set({\n active: false\n });\n };\n DefaultLoadingManager.onError = item => set(state => ({\n errors: [...state.errors, item]\n }));\n DefaultLoadingManager.onProgress = (item, loaded, total) => {\n if (loaded === total) {\n saveLastTotalLoaded = total;\n }\n set({\n active: true,\n item,\n loaded,\n total,\n progress: (loaded - saveLastTotalLoaded) / (total - saveLastTotalLoaded) * 100 || 100\n });\n };\n return {\n errors: [],\n active: false,\n progress: 0,\n item: '',\n loaded: 0,\n total: 0\n };\n});\n\n//\n\nfunction Progress({\n children\n}) {\n const result = useProgress();\n return /*#__PURE__*/React.createElement(React.Fragment, null, children == null ? void 0 : children(result));\n}\n\nexport { Progress, useProgress };\n","import * as React from 'react';\nimport { useProgress } from '../core/Progress.js';\n\nconst defaultDataInterpolation = p => `Loading ${p.toFixed(2)}%`;\nfunction Loader({\n containerStyles,\n innerStyles,\n barStyles,\n dataStyles,\n dataInterpolation = defaultDataInterpolation,\n initialState = active => active\n}) {\n const {\n active,\n progress\n } = useProgress();\n const progressRef = React.useRef(0);\n const rafRef = React.useRef(0);\n const progressSpanRef = React.useRef(null);\n const [shown, setShown] = React.useState(initialState(active));\n React.useEffect(() => {\n let t;\n if (active !== shown) t = setTimeout(() => setShown(active), 300);\n return () => clearTimeout(t);\n }, [shown, active]);\n const updateProgress = React.useCallback(() => {\n if (!progressSpanRef.current) return;\n progressRef.current += (progress - progressRef.current) / 2;\n if (progressRef.current > 0.95 * progress || progress === 100) progressRef.current = progress;\n progressSpanRef.current.innerText = dataInterpolation(progressRef.current);\n if (progressRef.current < progress) rafRef.current = requestAnimationFrame(updateProgress);\n }, [dataInterpolation, progress]);\n React.useEffect(() => {\n updateProgress();\n return () => cancelAnimationFrame(rafRef.current);\n }, [updateProgress]);\n return shown ? /*#__PURE__*/React.createElement(\"div\", {\n style: {\n ...styles.container,\n opacity: active ? 1 : 0,\n ...containerStyles\n }\n }, /*#__PURE__*/React.createElement(\"div\", null, /*#__PURE__*/React.createElement(\"div\", {\n style: {\n ...styles.inner,\n ...innerStyles\n }\n }, /*#__PURE__*/React.createElement(\"div\", {\n style: {\n ...styles.bar,\n transform: `scaleX(${progress / 100})`,\n ...barStyles\n }\n }), /*#__PURE__*/React.createElement(\"span\", {\n ref: progressSpanRef,\n style: {\n ...styles.data,\n ...dataStyles\n }\n })))) : null;\n}\nconst styles = {\n container: {\n position: 'absolute',\n top: 0,\n left: 0,\n width: '100%',\n height: '100%',\n background: '#171717',\n display: 'flex',\n alignItems: 'center',\n justifyContent: 'center',\n transition: 'opacity 300ms ease',\n zIndex: 1000\n },\n inner: {\n width: 100,\n height: 3,\n background: '#272727',\n textAlign: 'center'\n },\n bar: {\n height: 3,\n width: '100%',\n background: 'white',\n transition: 'transform 200ms',\n transformOrigin: 'left center'\n },\n data: {\n display: 'inline-block',\n position: 'relative',\n fontVariantNumeric: 'tabular-nums',\n marginTop: '0.8em',\n color: '#f0f0f0',\n fontSize: '0.6em',\n fontFamily: `-apple-system, BlinkMacSystemFont, \"Inter\", \"Segoe UI\", \"Helvetica Neue\", Helvetica, Arial, Roboto, Ubuntu, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\", \"Segoe UI Symbol\"`,\n whiteSpace: 'nowrap'\n }\n};\n\nexport { Loader };\n","function clamp(v, min, max) {\n return Math.max(min, Math.min(v, max));\n}\nconst V = {\n toVector(v, fallback) {\n if (v === undefined) v = fallback;\n return Array.isArray(v) ? v : [v, v];\n },\n add(v1, v2) {\n return [v1[0] + v2[0], v1[1] + v2[1]];\n },\n sub(v1, v2) {\n return [v1[0] - v2[0], v1[1] - v2[1]];\n },\n addTo(v1, v2) {\n v1[0] += v2[0];\n v1[1] += v2[1];\n },\n subTo(v1, v2) {\n v1[0] -= v2[0];\n v1[1] -= v2[1];\n }\n};\nfunction rubberband(distance, dimension, constant) {\n if (dimension === 0 || Math.abs(dimension) === Infinity) return Math.pow(distance, constant * 5);\n return distance * dimension * constant / (dimension + constant * distance);\n}\nfunction rubberbandIfOutOfBounds(position, min, max, constant = 0.15) {\n if (constant === 0) return clamp(position, min, max);\n if (position < min) return -rubberband(min - position, max - min, constant) + min;\n if (position > max) return +rubberband(position - max, max - min, constant) + max;\n return position;\n}\nfunction computeRubberband(bounds, [Vx, Vy], [Rx, Ry]) {\n const [[X0, X1], [Y0, Y1]] = bounds;\n return [rubberbandIfOutOfBounds(Vx, X0, X1, Rx), rubberbandIfOutOfBounds(Vy, Y0, Y1, Ry)];\n}\n\nexport { V, computeRubberband as c, rubberbandIfOutOfBounds as r };\n","import { V, c as computeRubberband } from './maths-0ab39ae9.esm.js';\n\nfunction _toPrimitive(input, hint) {\n if (typeof input !== \"object\" || input === null) return input;\n var prim = input[Symbol.toPrimitive];\n if (prim !== undefined) {\n var res = prim.call(input, hint || \"default\");\n if (typeof res !== \"object\") return res;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (hint === \"string\" ? String : Number)(input);\n}\n\nfunction _toPropertyKey(arg) {\n var key = _toPrimitive(arg, \"string\");\n return typeof key === \"symbol\" ? key : String(key);\n}\n\nfunction _defineProperty(obj, key, value) {\n key = _toPropertyKey(key);\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n return obj;\n}\n\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), !0).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\n\nconst EVENT_TYPE_MAP = {\n pointer: {\n start: 'down',\n change: 'move',\n end: 'up'\n },\n mouse: {\n start: 'down',\n change: 'move',\n end: 'up'\n },\n touch: {\n start: 'start',\n change: 'move',\n end: 'end'\n },\n gesture: {\n start: 'start',\n change: 'change',\n end: 'end'\n }\n};\nfunction capitalize(string) {\n if (!string) return '';\n return string[0].toUpperCase() + string.slice(1);\n}\nconst actionsWithoutCaptureSupported = ['enter', 'leave'];\nfunction hasCapture(capture = false, actionKey) {\n return capture && !actionsWithoutCaptureSupported.includes(actionKey);\n}\nfunction toHandlerProp(device, action = '', capture = false) {\n const deviceProps = EVENT_TYPE_MAP[device];\n const actionKey = deviceProps ? deviceProps[action] || action : action;\n return 'on' + capitalize(device) + capitalize(actionKey) + (hasCapture(capture, actionKey) ? 'Capture' : '');\n}\nconst pointerCaptureEvents = ['gotpointercapture', 'lostpointercapture'];\nfunction parseProp(prop) {\n let eventKey = prop.substring(2).toLowerCase();\n const passive = !!~eventKey.indexOf('passive');\n if (passive) eventKey = eventKey.replace('passive', '');\n const captureKey = pointerCaptureEvents.includes(eventKey) ? 'capturecapture' : 'capture';\n const capture = !!~eventKey.indexOf(captureKey);\n if (capture) eventKey = eventKey.replace('capture', '');\n return {\n device: eventKey,\n capture,\n passive\n };\n}\nfunction toDomEventType(device, action = '') {\n const deviceProps = EVENT_TYPE_MAP[device];\n const actionKey = deviceProps ? deviceProps[action] || action : action;\n return device + actionKey;\n}\nfunction isTouch(event) {\n return 'touches' in event;\n}\nfunction getPointerType(event) {\n if (isTouch(event)) return 'touch';\n if ('pointerType' in event) return event.pointerType;\n return 'mouse';\n}\nfunction getCurrentTargetTouchList(event) {\n return Array.from(event.touches).filter(e => {\n var _event$currentTarget, _event$currentTarget$;\n return e.target === event.currentTarget || ((_event$currentTarget = event.currentTarget) === null || _event$currentTarget === void 0 || (_event$currentTarget$ = _event$currentTarget.contains) === null || _event$currentTarget$ === void 0 ? void 0 : _event$currentTarget$.call(_event$currentTarget, e.target));\n });\n}\nfunction getTouchList(event) {\n return event.type === 'touchend' || event.type === 'touchcancel' ? event.changedTouches : event.targetTouches;\n}\nfunction getValueEvent(event) {\n return isTouch(event) ? getTouchList(event)[0] : event;\n}\nfunction distanceAngle(P1, P2) {\n try {\n const dx = P2.clientX - P1.clientX;\n const dy = P2.clientY - P1.clientY;\n const cx = (P2.clientX + P1.clientX) / 2;\n const cy = (P2.clientY + P1.clientY) / 2;\n const distance = Math.hypot(dx, dy);\n const angle = -(Math.atan2(dx, dy) * 180) / Math.PI;\n const origin = [cx, cy];\n return {\n angle,\n distance,\n origin\n };\n } catch (_unused) {}\n return null;\n}\nfunction touchIds(event) {\n return getCurrentTargetTouchList(event).map(touch => touch.identifier);\n}\nfunction touchDistanceAngle(event, ids) {\n const [P1, P2] = Array.from(event.touches).filter(touch => ids.includes(touch.identifier));\n return distanceAngle(P1, P2);\n}\nfunction pointerId(event) {\n const valueEvent = getValueEvent(event);\n return isTouch(event) ? valueEvent.identifier : valueEvent.pointerId;\n}\nfunction pointerValues(event) {\n const valueEvent = getValueEvent(event);\n return [valueEvent.clientX, valueEvent.clientY];\n}\nconst LINE_HEIGHT = 40;\nconst PAGE_HEIGHT = 800;\nfunction wheelValues(event) {\n let {\n deltaX,\n deltaY,\n deltaMode\n } = event;\n if (deltaMode === 1) {\n deltaX *= LINE_HEIGHT;\n deltaY *= LINE_HEIGHT;\n } else if (deltaMode === 2) {\n deltaX *= PAGE_HEIGHT;\n deltaY *= PAGE_HEIGHT;\n }\n return [deltaX, deltaY];\n}\nfunction scrollValues(event) {\n var _ref, _ref2;\n const {\n scrollX,\n scrollY,\n scrollLeft,\n scrollTop\n } = event.currentTarget;\n return [(_ref = scrollX !== null && scrollX !== void 0 ? scrollX : scrollLeft) !== null && _ref !== void 0 ? _ref : 0, (_ref2 = scrollY !== null && scrollY !== void 0 ? scrollY : scrollTop) !== null && _ref2 !== void 0 ? _ref2 : 0];\n}\nfunction getEventDetails(event) {\n const payload = {};\n if ('buttons' in event) payload.buttons = event.buttons;\n if ('shiftKey' in event) {\n const {\n shiftKey,\n altKey,\n metaKey,\n ctrlKey\n } = event;\n Object.assign(payload, {\n shiftKey,\n altKey,\n metaKey,\n ctrlKey\n });\n }\n return payload;\n}\n\nfunction call(v, ...args) {\n if (typeof v === 'function') {\n return v(...args);\n } else {\n return v;\n }\n}\nfunction noop() {}\nfunction chain(...fns) {\n if (fns.length === 0) return noop;\n if (fns.length === 1) return fns[0];\n return function () {\n let result;\n for (const fn of fns) {\n result = fn.apply(this, arguments) || result;\n }\n return result;\n };\n}\nfunction assignDefault(value, fallback) {\n return Object.assign({}, fallback, value || {});\n}\n\nconst BEFORE_LAST_KINEMATICS_DELAY = 32;\nclass Engine {\n constructor(ctrl, args, key) {\n this.ctrl = ctrl;\n this.args = args;\n this.key = key;\n if (!this.state) {\n this.state = {};\n this.computeValues([0, 0]);\n this.computeInitial();\n if (this.init) this.init();\n this.reset();\n }\n }\n get state() {\n return this.ctrl.state[this.key];\n }\n set state(state) {\n this.ctrl.state[this.key] = state;\n }\n get shared() {\n return this.ctrl.state.shared;\n }\n get eventStore() {\n return this.ctrl.gestureEventStores[this.key];\n }\n get timeoutStore() {\n return this.ctrl.gestureTimeoutStores[this.key];\n }\n get config() {\n return this.ctrl.config[this.key];\n }\n get sharedConfig() {\n return this.ctrl.config.shared;\n }\n get handler() {\n return this.ctrl.handlers[this.key];\n }\n reset() {\n const {\n state,\n shared,\n ingKey,\n args\n } = this;\n shared[ingKey] = state._active = state.active = state._blocked = state._force = false;\n state._step = [false, false];\n state.intentional = false;\n state._movement = [0, 0];\n state._distance = [0, 0];\n state._direction = [0, 0];\n state._delta = [0, 0];\n state._bounds = [[-Infinity, Infinity], [-Infinity, Infinity]];\n state.args = args;\n state.axis = undefined;\n state.memo = undefined;\n state.elapsedTime = state.timeDelta = 0;\n state.direction = [0, 0];\n state.distance = [0, 0];\n state.overflow = [0, 0];\n state._movementBound = [false, false];\n state.velocity = [0, 0];\n state.movement = [0, 0];\n state.delta = [0, 0];\n state.timeStamp = 0;\n }\n start(event) {\n const state = this.state;\n const config = this.config;\n if (!state._active) {\n this.reset();\n this.computeInitial();\n state._active = true;\n state.target = event.target;\n state.currentTarget = event.currentTarget;\n state.lastOffset = config.from ? call(config.from, state) : state.offset;\n state.offset = state.lastOffset;\n state.startTime = state.timeStamp = event.timeStamp;\n }\n }\n computeValues(values) {\n const state = this.state;\n state._values = values;\n state.values = this.config.transform(values);\n }\n computeInitial() {\n const state = this.state;\n state._initial = state._values;\n state.initial = state.values;\n }\n compute(event) {\n const {\n state,\n config,\n shared\n } = this;\n state.args = this.args;\n let dt = 0;\n if (event) {\n state.event = event;\n if (config.preventDefault && event.cancelable) state.event.preventDefault();\n state.type = event.type;\n shared.touches = this.ctrl.pointerIds.size || this.ctrl.touchIds.size;\n shared.locked = !!document.pointerLockElement;\n Object.assign(shared, getEventDetails(event));\n shared.down = shared.pressed = shared.buttons % 2 === 1 || shared.touches > 0;\n dt = event.timeStamp - state.timeStamp;\n state.timeStamp = event.timeStamp;\n state.elapsedTime = state.timeStamp - state.startTime;\n }\n if (state._active) {\n const _absoluteDelta = state._delta.map(Math.abs);\n V.addTo(state._distance, _absoluteDelta);\n }\n if (this.axisIntent) this.axisIntent(event);\n const [_m0, _m1] = state._movement;\n const [t0, t1] = config.threshold;\n const {\n _step,\n values\n } = state;\n if (config.hasCustomTransform) {\n if (_step[0] === false) _step[0] = Math.abs(_m0) >= t0 && values[0];\n if (_step[1] === false) _step[1] = Math.abs(_m1) >= t1 && values[1];\n } else {\n if (_step[0] === false) _step[0] = Math.abs(_m0) >= t0 && Math.sign(_m0) * t0;\n if (_step[1] === false) _step[1] = Math.abs(_m1) >= t1 && Math.sign(_m1) * t1;\n }\n state.intentional = _step[0] !== false || _step[1] !== false;\n if (!state.intentional) return;\n const movement = [0, 0];\n if (config.hasCustomTransform) {\n const [v0, v1] = values;\n movement[0] = _step[0] !== false ? v0 - _step[0] : 0;\n movement[1] = _step[1] !== false ? v1 - _step[1] : 0;\n } else {\n movement[0] = _step[0] !== false ? _m0 - _step[0] : 0;\n movement[1] = _step[1] !== false ? _m1 - _step[1] : 0;\n }\n if (this.restrictToAxis && !state._blocked) this.restrictToAxis(movement);\n const previousOffset = state.offset;\n const gestureIsActive = state._active && !state._blocked || state.active;\n if (gestureIsActive) {\n state.first = state._active && !state.active;\n state.last = !state._active && state.active;\n state.active = shared[this.ingKey] = state._active;\n if (event) {\n if (state.first) {\n if ('bounds' in config) state._bounds = call(config.bounds, state);\n if (this.setup) this.setup();\n }\n state.movement = movement;\n this.computeOffset();\n }\n }\n const [ox, oy] = state.offset;\n const [[x0, x1], [y0, y1]] = state._bounds;\n state.overflow = [ox < x0 ? -1 : ox > x1 ? 1 : 0, oy < y0 ? -1 : oy > y1 ? 1 : 0];\n state._movementBound[0] = state.overflow[0] ? state._movementBound[0] === false ? state._movement[0] : state._movementBound[0] : false;\n state._movementBound[1] = state.overflow[1] ? state._movementBound[1] === false ? state._movement[1] : state._movementBound[1] : false;\n const rubberband = state._active ? config.rubberband || [0, 0] : [0, 0];\n state.offset = computeRubberband(state._bounds, state.offset, rubberband);\n state.delta = V.sub(state.offset, previousOffset);\n this.computeMovement();\n if (gestureIsActive && (!state.last || dt > BEFORE_LAST_KINEMATICS_DELAY)) {\n state.delta = V.sub(state.offset, previousOffset);\n const absoluteDelta = state.delta.map(Math.abs);\n V.addTo(state.distance, absoluteDelta);\n state.direction = state.delta.map(Math.sign);\n state._direction = state._delta.map(Math.sign);\n if (!state.first && dt > 0) {\n state.velocity = [absoluteDelta[0] / dt, absoluteDelta[1] / dt];\n state.timeDelta = dt;\n }\n }\n }\n emit() {\n const state = this.state;\n const shared = this.shared;\n const config = this.config;\n if (!state._active) this.clean();\n if ((state._blocked || !state.intentional) && !state._force && !config.triggerAllEvents) return;\n const memo = this.handler(_objectSpread2(_objectSpread2(_objectSpread2({}, shared), state), {}, {\n [this.aliasKey]: state.values\n }));\n if (memo !== undefined) state.memo = memo;\n }\n clean() {\n this.eventStore.clean();\n this.timeoutStore.clean();\n }\n}\n\nfunction selectAxis([dx, dy], threshold) {\n const absDx = Math.abs(dx);\n const absDy = Math.abs(dy);\n if (absDx > absDy && absDx > threshold) {\n return 'x';\n }\n if (absDy > absDx && absDy > threshold) {\n return 'y';\n }\n return undefined;\n}\nclass CoordinatesEngine extends Engine {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"aliasKey\", 'xy');\n }\n reset() {\n super.reset();\n this.state.axis = undefined;\n }\n init() {\n this.state.offset = [0, 0];\n this.state.lastOffset = [0, 0];\n }\n computeOffset() {\n this.state.offset = V.add(this.state.lastOffset, this.state.movement);\n }\n computeMovement() {\n this.state.movement = V.sub(this.state.offset, this.state.lastOffset);\n }\n axisIntent(event) {\n const state = this.state;\n const config = this.config;\n if (!state.axis && event) {\n const threshold = typeof config.axisThreshold === 'object' ? config.axisThreshold[getPointerType(event)] : config.axisThreshold;\n state.axis = selectAxis(state._movement, threshold);\n }\n state._blocked = (config.lockDirection || !!config.axis) && !state.axis || !!config.axis && config.axis !== state.axis;\n }\n restrictToAxis(v) {\n if (this.config.axis || this.config.lockDirection) {\n switch (this.state.axis) {\n case 'x':\n v[1] = 0;\n break;\n case 'y':\n v[0] = 0;\n break;\n }\n }\n }\n}\n\nconst identity = v => v;\nconst DEFAULT_RUBBERBAND = 0.15;\nconst commonConfigResolver = {\n enabled(value = true) {\n return value;\n },\n eventOptions(value, _k, config) {\n return _objectSpread2(_objectSpread2({}, config.shared.eventOptions), value);\n },\n preventDefault(value = false) {\n return value;\n },\n triggerAllEvents(value = false) {\n return value;\n },\n rubberband(value = 0) {\n switch (value) {\n case true:\n return [DEFAULT_RUBBERBAND, DEFAULT_RUBBERBAND];\n case false:\n return [0, 0];\n default:\n return V.toVector(value);\n }\n },\n from(value) {\n if (typeof value === 'function') return value;\n if (value != null) return V.toVector(value);\n },\n transform(value, _k, config) {\n const transform = value || config.shared.transform;\n this.hasCustomTransform = !!transform;\n if (process.env.NODE_ENV === 'development') {\n const originalTransform = transform || identity;\n return v => {\n const r = originalTransform(v);\n if (!isFinite(r[0]) || !isFinite(r[1])) {\n console.warn(`[@use-gesture]: config.transform() must produce a valid result, but it was: [${r[0]},${[1]}]`);\n }\n return r;\n };\n }\n return transform || identity;\n },\n threshold(value) {\n return V.toVector(value, 0);\n }\n};\nif (process.env.NODE_ENV === 'development') {\n Object.assign(commonConfigResolver, {\n domTarget(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`domTarget\\` option has been renamed to \\`target\\`.`);\n }\n return NaN;\n },\n lockDirection(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`lockDirection\\` option has been merged with \\`axis\\`. Use it as in \\`{ axis: 'lock' }\\``);\n }\n return NaN;\n },\n initial(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`initial\\` option has been renamed to \\`from\\`.`);\n }\n return NaN;\n }\n });\n}\n\nconst DEFAULT_AXIS_THRESHOLD = 0;\nconst coordinatesConfigResolver = _objectSpread2(_objectSpread2({}, commonConfigResolver), {}, {\n axis(_v, _k, {\n axis\n }) {\n this.lockDirection = axis === 'lock';\n if (!this.lockDirection) return axis;\n },\n axisThreshold(value = DEFAULT_AXIS_THRESHOLD) {\n return value;\n },\n bounds(value = {}) {\n if (typeof value === 'function') {\n return state => coordinatesConfigResolver.bounds(value(state));\n }\n if ('current' in value) {\n return () => value.current;\n }\n if (typeof HTMLElement === 'function' && value instanceof HTMLElement) {\n return value;\n }\n const {\n left = -Infinity,\n right = Infinity,\n top = -Infinity,\n bottom = Infinity\n } = value;\n return [[left, right], [top, bottom]];\n }\n});\n\nconst KEYS_DELTA_MAP = {\n ArrowRight: (displacement, factor = 1) => [displacement * factor, 0],\n ArrowLeft: (displacement, factor = 1) => [-1 * displacement * factor, 0],\n ArrowUp: (displacement, factor = 1) => [0, -1 * displacement * factor],\n ArrowDown: (displacement, factor = 1) => [0, displacement * factor]\n};\nclass DragEngine extends CoordinatesEngine {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"ingKey\", 'dragging');\n }\n reset() {\n super.reset();\n const state = this.state;\n state._pointerId = undefined;\n state._pointerActive = false;\n state._keyboardActive = false;\n state._preventScroll = false;\n state._delayed = false;\n state.swipe = [0, 0];\n state.tap = false;\n state.canceled = false;\n state.cancel = this.cancel.bind(this);\n }\n setup() {\n const state = this.state;\n if (state._bounds instanceof HTMLElement) {\n const boundRect = state._bounds.getBoundingClientRect();\n const targetRect = state.currentTarget.getBoundingClientRect();\n const _bounds = {\n left: boundRect.left - targetRect.left + state.offset[0],\n right: boundRect.right - targetRect.right + state.offset[0],\n top: boundRect.top - targetRect.top + state.offset[1],\n bottom: boundRect.bottom - targetRect.bottom + state.offset[1]\n };\n state._bounds = coordinatesConfigResolver.bounds(_bounds);\n }\n }\n cancel() {\n const state = this.state;\n if (state.canceled) return;\n state.canceled = true;\n state._active = false;\n setTimeout(() => {\n this.compute();\n this.emit();\n }, 0);\n }\n setActive() {\n this.state._active = this.state._pointerActive || this.state._keyboardActive;\n }\n clean() {\n this.pointerClean();\n this.state._pointerActive = false;\n this.state._keyboardActive = false;\n super.clean();\n }\n pointerDown(event) {\n const config = this.config;\n const state = this.state;\n if (event.buttons != null && (Array.isArray(config.pointerButtons) ? !config.pointerButtons.includes(event.buttons) : config.pointerButtons !== -1 && config.pointerButtons !== event.buttons)) return;\n const ctrlIds = this.ctrl.setEventIds(event);\n if (config.pointerCapture) {\n event.target.setPointerCapture(event.pointerId);\n }\n if (ctrlIds && ctrlIds.size > 1 && state._pointerActive) return;\n this.start(event);\n this.setupPointer(event);\n state._pointerId = pointerId(event);\n state._pointerActive = true;\n this.computeValues(pointerValues(event));\n this.computeInitial();\n if (config.preventScrollAxis && getPointerType(event) !== 'mouse') {\n state._active = false;\n this.setupScrollPrevention(event);\n } else if (config.delay > 0) {\n this.setupDelayTrigger(event);\n if (config.triggerAllEvents) {\n this.compute(event);\n this.emit();\n }\n } else {\n this.startPointerDrag(event);\n }\n }\n startPointerDrag(event) {\n const state = this.state;\n state._active = true;\n state._preventScroll = true;\n state._delayed = false;\n this.compute(event);\n this.emit();\n }\n pointerMove(event) {\n const state = this.state;\n const config = this.config;\n if (!state._pointerActive) return;\n const id = pointerId(event);\n if (state._pointerId !== undefined && id !== state._pointerId) return;\n const _values = pointerValues(event);\n if (document.pointerLockElement === event.target) {\n state._delta = [event.movementX, event.movementY];\n } else {\n state._delta = V.sub(_values, state._values);\n this.computeValues(_values);\n }\n V.addTo(state._movement, state._delta);\n this.compute(event);\n if (state._delayed && state.intentional) {\n this.timeoutStore.remove('dragDelay');\n state.active = false;\n this.startPointerDrag(event);\n return;\n }\n if (config.preventScrollAxis && !state._preventScroll) {\n if (state.axis) {\n if (state.axis === config.preventScrollAxis || config.preventScrollAxis === 'xy') {\n state._active = false;\n this.clean();\n return;\n } else {\n this.timeoutStore.remove('startPointerDrag');\n this.startPointerDrag(event);\n return;\n }\n } else {\n return;\n }\n }\n this.emit();\n }\n pointerUp(event) {\n this.ctrl.setEventIds(event);\n try {\n if (this.config.pointerCapture && event.target.hasPointerCapture(event.pointerId)) {\n ;\n event.target.releasePointerCapture(event.pointerId);\n }\n } catch (_unused) {\n if (process.env.NODE_ENV === 'development') {\n console.warn(`[@use-gesture]: If you see this message, it's likely that you're using an outdated version of \\`@react-three/fiber\\`. \\n\\nPlease upgrade to the latest version.`);\n }\n }\n const state = this.state;\n const config = this.config;\n if (!state._active || !state._pointerActive) return;\n const id = pointerId(event);\n if (state._pointerId !== undefined && id !== state._pointerId) return;\n this.state._pointerActive = false;\n this.setActive();\n this.compute(event);\n const [dx, dy] = state._distance;\n state.tap = dx <= config.tapsThreshold && dy <= config.tapsThreshold;\n if (state.tap && config.filterTaps) {\n state._force = true;\n } else {\n const [_dx, _dy] = state._delta;\n const [_mx, _my] = state._movement;\n const [svx, svy] = config.swipe.velocity;\n const [sx, sy] = config.swipe.distance;\n const sdt = config.swipe.duration;\n if (state.elapsedTime < sdt) {\n const _vx = Math.abs(_dx / state.timeDelta);\n const _vy = Math.abs(_dy / state.timeDelta);\n if (_vx > svx && Math.abs(_mx) > sx) state.swipe[0] = Math.sign(_dx);\n if (_vy > svy && Math.abs(_my) > sy) state.swipe[1] = Math.sign(_dy);\n }\n }\n this.emit();\n }\n pointerClick(event) {\n if (!this.state.tap && event.detail > 0) {\n event.preventDefault();\n event.stopPropagation();\n }\n }\n setupPointer(event) {\n const config = this.config;\n const device = config.device;\n if (process.env.NODE_ENV === 'development') {\n try {\n if (device === 'pointer' && config.preventScrollDelay === undefined) {\n const currentTarget = 'uv' in event ? event.sourceEvent.currentTarget : event.currentTarget;\n const style = window.getComputedStyle(currentTarget);\n if (style.touchAction === 'auto') {\n console.warn(`[@use-gesture]: The drag target has its \\`touch-action\\` style property set to \\`auto\\`. It is recommended to add \\`touch-action: 'none'\\` so that the drag gesture behaves correctly on touch-enabled devices. For more information read this: https://use-gesture.netlify.app/docs/extras/#touch-action.\\n\\nThis message will only show in development mode. It won't appear in production. If this is intended, you can ignore it.`, currentTarget);\n }\n }\n } catch (_unused2) {}\n }\n if (config.pointerLock) {\n event.currentTarget.requestPointerLock();\n }\n if (!config.pointerCapture) {\n this.eventStore.add(this.sharedConfig.window, device, 'change', this.pointerMove.bind(this));\n this.eventStore.add(this.sharedConfig.window, device, 'end', this.pointerUp.bind(this));\n this.eventStore.add(this.sharedConfig.window, device, 'cancel', this.pointerUp.bind(this));\n }\n }\n pointerClean() {\n if (this.config.pointerLock && document.pointerLockElement === this.state.currentTarget) {\n document.exitPointerLock();\n }\n }\n preventScroll(event) {\n if (this.state._preventScroll && event.cancelable) {\n event.preventDefault();\n }\n }\n setupScrollPrevention(event) {\n this.state._preventScroll = false;\n persistEvent(event);\n const remove = this.eventStore.add(this.sharedConfig.window, 'touch', 'change', this.preventScroll.bind(this), {\n passive: false\n });\n this.eventStore.add(this.sharedConfig.window, 'touch', 'end', remove);\n this.eventStore.add(this.sharedConfig.window, 'touch', 'cancel', remove);\n this.timeoutStore.add('startPointerDrag', this.startPointerDrag.bind(this), this.config.preventScrollDelay, event);\n }\n setupDelayTrigger(event) {\n this.state._delayed = true;\n this.timeoutStore.add('dragDelay', () => {\n this.state._step = [0, 0];\n this.startPointerDrag(event);\n }, this.config.delay);\n }\n keyDown(event) {\n const deltaFn = KEYS_DELTA_MAP[event.key];\n if (deltaFn) {\n const state = this.state;\n const factor = event.shiftKey ? 10 : event.altKey ? 0.1 : 1;\n this.start(event);\n state._delta = deltaFn(this.config.keyboardDisplacement, factor);\n state._keyboardActive = true;\n V.addTo(state._movement, state._delta);\n this.compute(event);\n this.emit();\n }\n }\n keyUp(event) {\n if (!(event.key in KEYS_DELTA_MAP)) return;\n this.state._keyboardActive = false;\n this.setActive();\n this.compute(event);\n this.emit();\n }\n bind(bindFunction) {\n const device = this.config.device;\n bindFunction(device, 'start', this.pointerDown.bind(this));\n if (this.config.pointerCapture) {\n bindFunction(device, 'change', this.pointerMove.bind(this));\n bindFunction(device, 'end', this.pointerUp.bind(this));\n bindFunction(device, 'cancel', this.pointerUp.bind(this));\n bindFunction('lostPointerCapture', '', this.pointerUp.bind(this));\n }\n if (this.config.keys) {\n bindFunction('key', 'down', this.keyDown.bind(this));\n bindFunction('key', 'up', this.keyUp.bind(this));\n }\n if (this.config.filterTaps) {\n bindFunction('click', '', this.pointerClick.bind(this), {\n capture: true,\n passive: false\n });\n }\n }\n}\nfunction persistEvent(event) {\n 'persist' in event && typeof event.persist === 'function' && event.persist();\n}\n\nconst isBrowser = typeof window !== 'undefined' && window.document && window.document.createElement;\nfunction supportsTouchEvents() {\n return isBrowser && 'ontouchstart' in window;\n}\nfunction isTouchScreen() {\n return supportsTouchEvents() || isBrowser && window.navigator.maxTouchPoints > 1;\n}\nfunction supportsPointerEvents() {\n return isBrowser && 'onpointerdown' in window;\n}\nfunction supportsPointerLock() {\n return isBrowser && 'exitPointerLock' in window.document;\n}\nfunction supportsGestureEvents() {\n try {\n return 'constructor' in GestureEvent;\n } catch (e) {\n return false;\n }\n}\nconst SUPPORT = {\n isBrowser,\n gesture: supportsGestureEvents(),\n touch: supportsTouchEvents(),\n touchscreen: isTouchScreen(),\n pointer: supportsPointerEvents(),\n pointerLock: supportsPointerLock()\n};\n\nconst DEFAULT_PREVENT_SCROLL_DELAY = 250;\nconst DEFAULT_DRAG_DELAY = 180;\nconst DEFAULT_SWIPE_VELOCITY = 0.5;\nconst DEFAULT_SWIPE_DISTANCE = 50;\nconst DEFAULT_SWIPE_DURATION = 250;\nconst DEFAULT_KEYBOARD_DISPLACEMENT = 10;\nconst DEFAULT_DRAG_AXIS_THRESHOLD = {\n mouse: 0,\n touch: 0,\n pen: 8\n};\nconst dragConfigResolver = _objectSpread2(_objectSpread2({}, coordinatesConfigResolver), {}, {\n device(_v, _k, {\n pointer: {\n touch = false,\n lock = false,\n mouse = false\n } = {}\n }) {\n this.pointerLock = lock && SUPPORT.pointerLock;\n if (SUPPORT.touch && touch) return 'touch';\n if (this.pointerLock) return 'mouse';\n if (SUPPORT.pointer && !mouse) return 'pointer';\n if (SUPPORT.touch) return 'touch';\n return 'mouse';\n },\n preventScrollAxis(value, _k, {\n preventScroll\n }) {\n this.preventScrollDelay = typeof preventScroll === 'number' ? preventScroll : preventScroll || preventScroll === undefined && value ? DEFAULT_PREVENT_SCROLL_DELAY : undefined;\n if (!SUPPORT.touchscreen || preventScroll === false) return undefined;\n return value ? value : preventScroll !== undefined ? 'y' : undefined;\n },\n pointerCapture(_v, _k, {\n pointer: {\n capture = true,\n buttons = 1,\n keys = true\n } = {}\n }) {\n this.pointerButtons = buttons;\n this.keys = keys;\n return !this.pointerLock && this.device === 'pointer' && capture;\n },\n threshold(value, _k, {\n filterTaps = false,\n tapsThreshold = 3,\n axis = undefined\n }) {\n const threshold = V.toVector(value, filterTaps ? tapsThreshold : axis ? 1 : 0);\n this.filterTaps = filterTaps;\n this.tapsThreshold = tapsThreshold;\n return threshold;\n },\n swipe({\n velocity = DEFAULT_SWIPE_VELOCITY,\n distance = DEFAULT_SWIPE_DISTANCE,\n duration = DEFAULT_SWIPE_DURATION\n } = {}) {\n return {\n velocity: this.transform(V.toVector(velocity)),\n distance: this.transform(V.toVector(distance)),\n duration\n };\n },\n delay(value = 0) {\n switch (value) {\n case true:\n return DEFAULT_DRAG_DELAY;\n case false:\n return 0;\n default:\n return value;\n }\n },\n axisThreshold(value) {\n if (!value) return DEFAULT_DRAG_AXIS_THRESHOLD;\n return _objectSpread2(_objectSpread2({}, DEFAULT_DRAG_AXIS_THRESHOLD), value);\n },\n keyboardDisplacement(value = DEFAULT_KEYBOARD_DISPLACEMENT) {\n return value;\n }\n});\nif (process.env.NODE_ENV === 'development') {\n Object.assign(dragConfigResolver, {\n useTouch(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`useTouch\\` option has been renamed to \\`pointer.touch\\`. Use it as in \\`{ pointer: { touch: true } }\\`.`);\n }\n return NaN;\n },\n experimental_preventWindowScrollY(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`experimental_preventWindowScrollY\\` option has been renamed to \\`preventScroll\\`.`);\n }\n return NaN;\n },\n swipeVelocity(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`swipeVelocity\\` option has been renamed to \\`swipe.velocity\\`. Use it as in \\`{ swipe: { velocity: 0.5 } }\\`.`);\n }\n return NaN;\n },\n swipeDistance(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`swipeDistance\\` option has been renamed to \\`swipe.distance\\`. Use it as in \\`{ swipe: { distance: 50 } }\\`.`);\n }\n return NaN;\n },\n swipeDuration(value) {\n if (value !== undefined) {\n throw Error(`[@use-gesture]: \\`swipeDuration\\` option has been renamed to \\`swipe.duration\\`. Use it as in \\`{ swipe: { duration: 250 } }\\`.`);\n }\n return NaN;\n }\n });\n}\n\nfunction clampStateInternalMovementToBounds(state) {\n const [ox, oy] = state.overflow;\n const [dx, dy] = state._delta;\n const [dirx, diry] = state._direction;\n if (ox < 0 && dx > 0 && dirx < 0 || ox > 0 && dx < 0 && dirx > 0) {\n state._movement[0] = state._movementBound[0];\n }\n if (oy < 0 && dy > 0 && diry < 0 || oy > 0 && dy < 0 && diry > 0) {\n state._movement[1] = state._movementBound[1];\n }\n}\n\nconst SCALE_ANGLE_RATIO_INTENT_DEG = 30;\nconst PINCH_WHEEL_RATIO = 100;\nclass PinchEngine extends Engine {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"ingKey\", 'pinching');\n _defineProperty(this, \"aliasKey\", 'da');\n }\n init() {\n this.state.offset = [1, 0];\n this.state.lastOffset = [1, 0];\n this.state._pointerEvents = new Map();\n }\n reset() {\n super.reset();\n const state = this.state;\n state._touchIds = [];\n state.canceled = false;\n state.cancel = this.cancel.bind(this);\n state.turns = 0;\n }\n computeOffset() {\n const {\n type,\n movement,\n lastOffset\n } = this.state;\n if (type === 'wheel') {\n this.state.offset = V.add(movement, lastOffset);\n } else {\n this.state.offset = [(1 + movement[0]) * lastOffset[0], movement[1] + lastOffset[1]];\n }\n }\n computeMovement() {\n const {\n offset,\n lastOffset\n } = this.state;\n this.state.movement = [offset[0] / lastOffset[0], offset[1] - lastOffset[1]];\n }\n axisIntent() {\n const state = this.state;\n const [_m0, _m1] = state._movement;\n if (!state.axis) {\n const axisMovementDifference = Math.abs(_m0) * SCALE_ANGLE_RATIO_INTENT_DEG - Math.abs(_m1);\n if (axisMovementDifference < 0) state.axis = 'angle';else if (axisMovementDifference > 0) state.axis = 'scale';\n }\n }\n restrictToAxis(v) {\n if (this.config.lockDirection) {\n if (this.state.axis === 'scale') v[1] = 0;else if (this.state.axis === 'angle') v[0] = 0;\n }\n }\n cancel() {\n const state = this.state;\n if (state.canceled) return;\n setTimeout(() => {\n state.canceled = true;\n state._active = false;\n this.compute();\n this.emit();\n }, 0);\n }\n touchStart(event) {\n this.ctrl.setEventIds(event);\n const state = this.state;\n const ctrlTouchIds = this.ctrl.touchIds;\n if (state._active) {\n if (state._touchIds.every(id => ctrlTouchIds.has(id))) return;\n }\n if (ctrlTouchIds.size < 2) return;\n this.start(event);\n state._touchIds = Array.from(ctrlTouchIds).slice(0, 2);\n const payload = touchDistanceAngle(event, state._touchIds);\n if (!payload) return;\n this.pinchStart(event, payload);\n }\n pointerStart(event) {\n if (event.buttons != null && event.buttons % 2 !== 1) return;\n this.ctrl.setEventIds(event);\n event.target.setPointerCapture(event.pointerId);\n const state = this.state;\n const _pointerEvents = state._pointerEvents;\n const ctrlPointerIds = this.ctrl.pointerIds;\n if (state._active) {\n if (Array.from(_pointerEvents.keys()).every(id => ctrlPointerIds.has(id))) return;\n }\n if (_pointerEvents.size < 2) {\n _pointerEvents.set(event.pointerId, event);\n }\n if (state._pointerEvents.size < 2) return;\n this.start(event);\n const payload = distanceAngle(...Array.from(_pointerEvents.values()));\n if (!payload) return;\n this.pinchStart(event, payload);\n }\n pinchStart(event, payload) {\n const state = this.state;\n state.origin = payload.origin;\n this.computeValues([payload.distance, payload.angle]);\n this.computeInitial();\n this.compute(event);\n this.emit();\n }\n touchMove(event) {\n if (!this.state._active) return;\n const payload = touchDistanceAngle(event, this.state._touchIds);\n if (!payload) return;\n this.pinchMove(event, payload);\n }\n pointerMove(event) {\n const _pointerEvents = this.state._pointerEvents;\n if (_pointerEvents.has(event.pointerId)) {\n _pointerEvents.set(event.pointerId, event);\n }\n if (!this.state._active) return;\n const payload = distanceAngle(...Array.from(_pointerEvents.values()));\n if (!payload) return;\n this.pinchMove(event, payload);\n }\n pinchMove(event, payload) {\n const state = this.state;\n const prev_a = state._values[1];\n const delta_a = payload.angle - prev_a;\n let delta_turns = 0;\n if (Math.abs(delta_a) > 270) delta_turns += Math.sign(delta_a);\n this.computeValues([payload.distance, payload.angle - 360 * delta_turns]);\n state.origin = payload.origin;\n state.turns = delta_turns;\n state._movement = [state._values[0] / state._initial[0] - 1, state._values[1] - state._initial[1]];\n this.compute(event);\n this.emit();\n }\n touchEnd(event) {\n this.ctrl.setEventIds(event);\n if (!this.state._active) return;\n if (this.state._touchIds.some(id => !this.ctrl.touchIds.has(id))) {\n this.state._active = false;\n this.compute(event);\n this.emit();\n }\n }\n pointerEnd(event) {\n const state = this.state;\n this.ctrl.setEventIds(event);\n try {\n event.target.releasePointerCapture(event.pointerId);\n } catch (_unused) {}\n if (state._pointerEvents.has(event.pointerId)) {\n state._pointerEvents.delete(event.pointerId);\n }\n if (!state._active) return;\n if (state._pointerEvents.size < 2) {\n state._active = false;\n this.compute(event);\n this.emit();\n }\n }\n gestureStart(event) {\n if (event.cancelable) event.preventDefault();\n const state = this.state;\n if (state._active) return;\n this.start(event);\n this.computeValues([event.scale, event.rotation]);\n state.origin = [event.clientX, event.clientY];\n this.compute(event);\n this.emit();\n }\n gestureMove(event) {\n if (event.cancelable) event.preventDefault();\n if (!this.state._active) return;\n const state = this.state;\n this.computeValues([event.scale, event.rotation]);\n state.origin = [event.clientX, event.clientY];\n const _previousMovement = state._movement;\n state._movement = [event.scale - 1, event.rotation];\n state._delta = V.sub(state._movement, _previousMovement);\n this.compute(event);\n this.emit();\n }\n gestureEnd(event) {\n if (!this.state._active) return;\n this.state._active = false;\n this.compute(event);\n this.emit();\n }\n wheel(event) {\n const modifierKey = this.config.modifierKey;\n if (modifierKey && (Array.isArray(modifierKey) ? !modifierKey.find(k => event[k]) : !event[modifierKey])) return;\n if (!this.state._active) this.wheelStart(event);else this.wheelChange(event);\n this.timeoutStore.add('wheelEnd', this.wheelEnd.bind(this));\n }\n wheelStart(event) {\n this.start(event);\n this.wheelChange(event);\n }\n wheelChange(event) {\n const isR3f = ('uv' in event);\n if (!isR3f) {\n if (event.cancelable) {\n event.preventDefault();\n }\n if (process.env.NODE_ENV === 'development' && !event.defaultPrevented) {\n console.warn(`[@use-gesture]: To properly support zoom on trackpads, try using the \\`target\\` option.\\n\\nThis message will only appear in development mode.`);\n }\n }\n const state = this.state;\n state._delta = [-wheelValues(event)[1] / PINCH_WHEEL_RATIO * state.offset[0], 0];\n V.addTo(state._movement, state._delta);\n clampStateInternalMovementToBounds(state);\n this.state.origin = [event.clientX, event.clientY];\n this.compute(event);\n this.emit();\n }\n wheelEnd() {\n if (!this.state._active) return;\n this.state._active = false;\n this.compute();\n this.emit();\n }\n bind(bindFunction) {\n const device = this.config.device;\n if (!!device) {\n bindFunction(device, 'start', this[device + 'Start'].bind(this));\n bindFunction(device, 'change', this[device + 'Move'].bind(this));\n bindFunction(device, 'end', this[device + 'End'].bind(this));\n bindFunction(device, 'cancel', this[device + 'End'].bind(this));\n bindFunction('lostPointerCapture', '', this[device + 'End'].bind(this));\n }\n if (this.config.pinchOnWheel) {\n bindFunction('wheel', '', this.wheel.bind(this), {\n passive: false\n });\n }\n }\n}\n\nconst pinchConfigResolver = _objectSpread2(_objectSpread2({}, commonConfigResolver), {}, {\n device(_v, _k, {\n shared,\n pointer: {\n touch = false\n } = {}\n }) {\n const sharedConfig = shared;\n if (sharedConfig.target && !SUPPORT.touch && SUPPORT.gesture) return 'gesture';\n if (SUPPORT.touch && touch) return 'touch';\n if (SUPPORT.touchscreen) {\n if (SUPPORT.pointer) return 'pointer';\n if (SUPPORT.touch) return 'touch';\n }\n },\n bounds(_v, _k, {\n scaleBounds = {},\n angleBounds = {}\n }) {\n const _scaleBounds = state => {\n const D = assignDefault(call(scaleBounds, state), {\n min: -Infinity,\n max: Infinity\n });\n return [D.min, D.max];\n };\n const _angleBounds = state => {\n const A = assignDefault(call(angleBounds, state), {\n min: -Infinity,\n max: Infinity\n });\n return [A.min, A.max];\n };\n if (typeof scaleBounds !== 'function' && typeof angleBounds !== 'function') return [_scaleBounds(), _angleBounds()];\n return state => [_scaleBounds(state), _angleBounds(state)];\n },\n threshold(value, _k, config) {\n this.lockDirection = config.axis === 'lock';\n const threshold = V.toVector(value, this.lockDirection ? [0.1, 3] : 0);\n return threshold;\n },\n modifierKey(value) {\n if (value === undefined) return 'ctrlKey';\n return value;\n },\n pinchOnWheel(value = true) {\n return value;\n }\n});\n\nclass MoveEngine extends CoordinatesEngine {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"ingKey\", 'moving');\n }\n move(event) {\n if (this.config.mouseOnly && event.pointerType !== 'mouse') return;\n if (!this.state._active) this.moveStart(event);else this.moveChange(event);\n this.timeoutStore.add('moveEnd', this.moveEnd.bind(this));\n }\n moveStart(event) {\n this.start(event);\n this.computeValues(pointerValues(event));\n this.compute(event);\n this.computeInitial();\n this.emit();\n }\n moveChange(event) {\n if (!this.state._active) return;\n const values = pointerValues(event);\n const state = this.state;\n state._delta = V.sub(values, state._values);\n V.addTo(state._movement, state._delta);\n this.computeValues(values);\n this.compute(event);\n this.emit();\n }\n moveEnd(event) {\n if (!this.state._active) return;\n this.state._active = false;\n this.compute(event);\n this.emit();\n }\n bind(bindFunction) {\n bindFunction('pointer', 'change', this.move.bind(this));\n bindFunction('pointer', 'leave', this.moveEnd.bind(this));\n }\n}\n\nconst moveConfigResolver = _objectSpread2(_objectSpread2({}, coordinatesConfigResolver), {}, {\n mouseOnly: (value = true) => value\n});\n\nclass ScrollEngine extends CoordinatesEngine {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"ingKey\", 'scrolling');\n }\n scroll(event) {\n if (!this.state._active) this.start(event);\n this.scrollChange(event);\n this.timeoutStore.add('scrollEnd', this.scrollEnd.bind(this));\n }\n scrollChange(event) {\n if (event.cancelable) event.preventDefault();\n const state = this.state;\n const values = scrollValues(event);\n state._delta = V.sub(values, state._values);\n V.addTo(state._movement, state._delta);\n this.computeValues(values);\n this.compute(event);\n this.emit();\n }\n scrollEnd() {\n if (!this.state._active) return;\n this.state._active = false;\n this.compute();\n this.emit();\n }\n bind(bindFunction) {\n bindFunction('scroll', '', this.scroll.bind(this));\n }\n}\n\nconst scrollConfigResolver = coordinatesConfigResolver;\n\nclass WheelEngine extends CoordinatesEngine {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"ingKey\", 'wheeling');\n }\n wheel(event) {\n if (!this.state._active) this.start(event);\n this.wheelChange(event);\n this.timeoutStore.add('wheelEnd', this.wheelEnd.bind(this));\n }\n wheelChange(event) {\n const state = this.state;\n state._delta = wheelValues(event);\n V.addTo(state._movement, state._delta);\n clampStateInternalMovementToBounds(state);\n this.compute(event);\n this.emit();\n }\n wheelEnd() {\n if (!this.state._active) return;\n this.state._active = false;\n this.compute();\n this.emit();\n }\n bind(bindFunction) {\n bindFunction('wheel', '', this.wheel.bind(this));\n }\n}\n\nconst wheelConfigResolver = coordinatesConfigResolver;\n\nclass HoverEngine extends CoordinatesEngine {\n constructor(...args) {\n super(...args);\n _defineProperty(this, \"ingKey\", 'hovering');\n }\n enter(event) {\n if (this.config.mouseOnly && event.pointerType !== 'mouse') return;\n this.start(event);\n this.computeValues(pointerValues(event));\n this.compute(event);\n this.emit();\n }\n leave(event) {\n if (this.config.mouseOnly && event.pointerType !== 'mouse') return;\n const state = this.state;\n if (!state._active) return;\n state._active = false;\n const values = pointerValues(event);\n state._movement = state._delta = V.sub(values, state._values);\n this.computeValues(values);\n this.compute(event);\n state.delta = state.movement;\n this.emit();\n }\n bind(bindFunction) {\n bindFunction('pointer', 'enter', this.enter.bind(this));\n bindFunction('pointer', 'leave', this.leave.bind(this));\n }\n}\n\nconst hoverConfigResolver = _objectSpread2(_objectSpread2({}, coordinatesConfigResolver), {}, {\n mouseOnly: (value = true) => value\n});\n\nconst EngineMap = new Map();\nconst ConfigResolverMap = new Map();\nfunction registerAction(action) {\n EngineMap.set(action.key, action.engine);\n ConfigResolverMap.set(action.key, action.resolver);\n}\nconst dragAction = {\n key: 'drag',\n engine: DragEngine,\n resolver: dragConfigResolver\n};\nconst hoverAction = {\n key: 'hover',\n engine: HoverEngine,\n resolver: hoverConfigResolver\n};\nconst moveAction = {\n key: 'move',\n engine: MoveEngine,\n resolver: moveConfigResolver\n};\nconst pinchAction = {\n key: 'pinch',\n engine: PinchEngine,\n resolver: pinchConfigResolver\n};\nconst scrollAction = {\n key: 'scroll',\n engine: ScrollEngine,\n resolver: scrollConfigResolver\n};\nconst wheelAction = {\n key: 'wheel',\n engine: WheelEngine,\n resolver: wheelConfigResolver\n};\n\nexport { ConfigResolverMap as C, EngineMap as E, SUPPORT as S, _objectSpread2 as _, _defineProperty as a, touchIds as b, chain as c, toHandlerProp as d, dragAction as e, pinchAction as f, hoverAction as h, isTouch as i, moveAction as m, parseProp as p, registerAction as r, scrollAction as s, toDomEventType as t, wheelAction as w };\n","import { S as SUPPORT, C as ConfigResolverMap, _ as _objectSpread2, a as _defineProperty, t as toDomEventType, i as isTouch, b as touchIds, E as EngineMap, c as chain, p as parseProp, d as toHandlerProp } from './actions-fe213e88.esm.js';\nimport './maths-0ab39ae9.esm.js';\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n var target = _objectWithoutPropertiesLoose(source, excluded);\n var key, i;\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n return target;\n}\n\nconst sharedConfigResolver = {\n target(value) {\n if (value) {\n return () => 'current' in value ? value.current : value;\n }\n return undefined;\n },\n enabled(value = true) {\n return value;\n },\n window(value = SUPPORT.isBrowser ? window : undefined) {\n return value;\n },\n eventOptions({\n passive = true,\n capture = false\n } = {}) {\n return {\n passive,\n capture\n };\n },\n transform(value) {\n return value;\n }\n};\n\nconst _excluded = [\"target\", \"eventOptions\", \"window\", \"enabled\", \"transform\"];\nfunction resolveWith(config = {}, resolvers) {\n const result = {};\n for (const [key, resolver] of Object.entries(resolvers)) {\n switch (typeof resolver) {\n case 'function':\n if (process.env.NODE_ENV === 'development') {\n const r = resolver.call(result, config[key], key, config);\n if (!Number.isNaN(r)) result[key] = r;\n } else {\n result[key] = resolver.call(result, config[key], key, config);\n }\n break;\n case 'object':\n result[key] = resolveWith(config[key], resolver);\n break;\n case 'boolean':\n if (resolver) result[key] = config[key];\n break;\n }\n }\n return result;\n}\nfunction parse(newConfig, gestureKey, _config = {}) {\n const _ref = newConfig,\n {\n target,\n eventOptions,\n window,\n enabled,\n transform\n } = _ref,\n rest = _objectWithoutProperties(_ref, _excluded);\n _config.shared = resolveWith({\n target,\n eventOptions,\n window,\n enabled,\n transform\n }, sharedConfigResolver);\n if (gestureKey) {\n const resolver = ConfigResolverMap.get(gestureKey);\n _config[gestureKey] = resolveWith(_objectSpread2({\n shared: _config.shared\n }, rest), resolver);\n } else {\n for (const key in rest) {\n const resolver = ConfigResolverMap.get(key);\n if (resolver) {\n _config[key] = resolveWith(_objectSpread2({\n shared: _config.shared\n }, rest[key]), resolver);\n } else if (process.env.NODE_ENV === 'development') {\n if (!['drag', 'pinch', 'scroll', 'wheel', 'move', 'hover'].includes(key)) {\n if (key === 'domTarget') {\n throw Error(`[@use-gesture]: \\`domTarget\\` option has been renamed to \\`target\\`.`);\n }\n console.warn(`[@use-gesture]: Unknown config key \\`${key}\\` was used. Please read the documentation for further information.`);\n }\n }\n }\n }\n return _config;\n}\n\nclass EventStore {\n constructor(ctrl, gestureKey) {\n _defineProperty(this, \"_listeners\", new Set());\n this._ctrl = ctrl;\n this._gestureKey = gestureKey;\n }\n add(element, device, action, handler, options) {\n const listeners = this._listeners;\n const type = toDomEventType(device, action);\n const _options = this._gestureKey ? this._ctrl.config[this._gestureKey].eventOptions : {};\n const eventOptions = _objectSpread2(_objectSpread2({}, _options), options);\n element.addEventListener(type, handler, eventOptions);\n const remove = () => {\n element.removeEventListener(type, handler, eventOptions);\n listeners.delete(remove);\n };\n listeners.add(remove);\n return remove;\n }\n clean() {\n this._listeners.forEach(remove => remove());\n this._listeners.clear();\n }\n}\n\nclass TimeoutStore {\n constructor() {\n _defineProperty(this, \"_timeouts\", new Map());\n }\n add(key, callback, ms = 140, ...args) {\n this.remove(key);\n this._timeouts.set(key, window.setTimeout(callback, ms, ...args));\n }\n remove(key) {\n const timeout = this._timeouts.get(key);\n if (timeout) window.clearTimeout(timeout);\n }\n clean() {\n this._timeouts.forEach(timeout => void window.clearTimeout(timeout));\n this._timeouts.clear();\n }\n}\n\nclass Controller {\n constructor(handlers) {\n _defineProperty(this, \"gestures\", new Set());\n _defineProperty(this, \"_targetEventStore\", new EventStore(this));\n _defineProperty(this, \"gestureEventStores\", {});\n _defineProperty(this, \"gestureTimeoutStores\", {});\n _defineProperty(this, \"handlers\", {});\n _defineProperty(this, \"config\", {});\n _defineProperty(this, \"pointerIds\", new Set());\n _defineProperty(this, \"touchIds\", new Set());\n _defineProperty(this, \"state\", {\n shared: {\n shiftKey: false,\n metaKey: false,\n ctrlKey: false,\n altKey: false\n }\n });\n resolveGestures(this, handlers);\n }\n setEventIds(event) {\n if (isTouch(event)) {\n this.touchIds = new Set(touchIds(event));\n return this.touchIds;\n } else if ('pointerId' in event) {\n if (event.type === 'pointerup' || event.type === 'pointercancel') this.pointerIds.delete(event.pointerId);else if (event.type === 'pointerdown') this.pointerIds.add(event.pointerId);\n return this.pointerIds;\n }\n }\n applyHandlers(handlers, nativeHandlers) {\n this.handlers = handlers;\n this.nativeHandlers = nativeHandlers;\n }\n applyConfig(config, gestureKey) {\n this.config = parse(config, gestureKey, this.config);\n }\n clean() {\n this._targetEventStore.clean();\n for (const key of this.gestures) {\n this.gestureEventStores[key].clean();\n this.gestureTimeoutStores[key].clean();\n }\n }\n effect() {\n if (this.config.shared.target) this.bind();\n return () => this._targetEventStore.clean();\n }\n bind(...args) {\n const sharedConfig = this.config.shared;\n const props = {};\n let target;\n if (sharedConfig.target) {\n target = sharedConfig.target();\n if (!target) return;\n }\n if (sharedConfig.enabled) {\n for (const gestureKey of this.gestures) {\n const gestureConfig = this.config[gestureKey];\n const bindFunction = bindToProps(props, gestureConfig.eventOptions, !!target);\n if (gestureConfig.enabled) {\n const Engine = EngineMap.get(gestureKey);\n new Engine(this, args, gestureKey).bind(bindFunction);\n }\n }\n const nativeBindFunction = bindToProps(props, sharedConfig.eventOptions, !!target);\n for (const eventKey in this.nativeHandlers) {\n nativeBindFunction(eventKey, '', event => this.nativeHandlers[eventKey](_objectSpread2(_objectSpread2({}, this.state.shared), {}, {\n event,\n args\n })), undefined, true);\n }\n }\n for (const handlerProp in props) {\n props[handlerProp] = chain(...props[handlerProp]);\n }\n if (!target) return props;\n for (const handlerProp in props) {\n const {\n device,\n capture,\n passive\n } = parseProp(handlerProp);\n this._targetEventStore.add(target, device, '', props[handlerProp], {\n capture,\n passive\n });\n }\n }\n}\nfunction setupGesture(ctrl, gestureKey) {\n ctrl.gestures.add(gestureKey);\n ctrl.gestureEventStores[gestureKey] = new EventStore(ctrl, gestureKey);\n ctrl.gestureTimeoutStores[gestureKey] = new TimeoutStore();\n}\nfunction resolveGestures(ctrl, internalHandlers) {\n if (internalHandlers.drag) setupGesture(ctrl, 'drag');\n if (internalHandlers.wheel) setupGesture(ctrl, 'wheel');\n if (internalHandlers.scroll) setupGesture(ctrl, 'scroll');\n if (internalHandlers.move) setupGesture(ctrl, 'move');\n if (internalHandlers.pinch) setupGesture(ctrl, 'pinch');\n if (internalHandlers.hover) setupGesture(ctrl, 'hover');\n}\nconst bindToProps = (props, eventOptions, withPassiveOption) => (device, action, handler, options = {}, isNative = false) => {\n var _options$capture, _options$passive;\n const capture = (_options$capture = options.capture) !== null && _options$capture !== void 0 ? _options$capture : eventOptions.capture;\n const passive = (_options$passive = options.passive) !== null && _options$passive !== void 0 ? _options$passive : eventOptions.passive;\n let handlerProp = isNative ? device : toHandlerProp(device, action, capture);\n if (withPassiveOption && passive) handlerProp += 'Passive';\n props[handlerProp] = props[handlerProp] || [];\n props[handlerProp].push(handler);\n};\n\nconst RE_NOT_NATIVE = /^on(Drag|Wheel|Scroll|Move|Pinch|Hover)/;\nfunction sortHandlers(_handlers) {\n const native = {};\n const handlers = {};\n const actions = new Set();\n for (let key in _handlers) {\n if (RE_NOT_NATIVE.test(key)) {\n actions.add(RegExp.lastMatch);\n handlers[key] = _handlers[key];\n } else {\n native[key] = _handlers[key];\n }\n }\n return [handlers, native, actions];\n}\nfunction registerGesture(actions, handlers, handlerKey, key, internalHandlers, config) {\n if (!actions.has(handlerKey)) return;\n if (!EngineMap.has(key)) {\n if (process.env.NODE_ENV === 'development') {\n console.warn(`[@use-gesture]: You've created a custom handler that that uses the \\`${key}\\` gesture but isn't properly configured.\\n\\nPlease add \\`${key}Action\\` when creating your handler.`);\n }\n return;\n }\n const startKey = handlerKey + 'Start';\n const endKey = handlerKey + 'End';\n const fn = state => {\n let memo = undefined;\n if (state.first && startKey in handlers) handlers[startKey](state);\n if (handlerKey in handlers) memo = handlers[handlerKey](state);\n if (state.last && endKey in handlers) handlers[endKey](state);\n return memo;\n };\n internalHandlers[key] = fn;\n config[key] = config[key] || {};\n}\nfunction parseMergedHandlers(mergedHandlers, mergedConfig) {\n const [handlers, nativeHandlers, actions] = sortHandlers(mergedHandlers);\n const internalHandlers = {};\n registerGesture(actions, handlers, 'onDrag', 'drag', internalHandlers, mergedConfig);\n registerGesture(actions, handlers, 'onWheel', 'wheel', internalHandlers, mergedConfig);\n registerGesture(actions, handlers, 'onScroll', 'scroll', internalHandlers, mergedConfig);\n registerGesture(actions, handlers, 'onPinch', 'pinch', internalHandlers, mergedConfig);\n registerGesture(actions, handlers, 'onMove', 'move', internalHandlers, mergedConfig);\n registerGesture(actions, handlers, 'onHover', 'hover', internalHandlers, mergedConfig);\n return {\n handlers: internalHandlers,\n config: mergedConfig,\n nativeHandlers\n };\n}\n\nexport { Controller, parseMergedHandlers };\n","import { registerAction, dragAction, pinchAction, wheelAction, scrollAction, moveAction, hoverAction } from '@use-gesture/core/actions';\nexport * from '@use-gesture/core/actions';\nimport React from 'react';\nimport { Controller, parseMergedHandlers } from '@use-gesture/core';\nexport * from '@use-gesture/core/utils';\nexport * from '@use-gesture/core/types';\n\nfunction useRecognizers(handlers, config = {}, gestureKey, nativeHandlers) {\n const ctrl = React.useMemo(() => new Controller(handlers), []);\n ctrl.applyHandlers(handlers, nativeHandlers);\n ctrl.applyConfig(config, gestureKey);\n React.useEffect(ctrl.effect.bind(ctrl));\n React.useEffect(() => {\n return ctrl.clean.bind(ctrl);\n }, []);\n if (config.target === undefined) {\n return ctrl.bind.bind(ctrl);\n }\n return undefined;\n}\n\nfunction useDrag(handler, config) {\n registerAction(dragAction);\n return useRecognizers({\n drag: handler\n }, config || {}, 'drag');\n}\n\nfunction usePinch(handler, config) {\n registerAction(pinchAction);\n return useRecognizers({\n pinch: handler\n }, config || {}, 'pinch');\n}\n\nfunction useWheel(handler, config) {\n registerAction(wheelAction);\n return useRecognizers({\n wheel: handler\n }, config || {}, 'wheel');\n}\n\nfunction useScroll(handler, config) {\n registerAction(scrollAction);\n return useRecognizers({\n scroll: handler\n }, config || {}, 'scroll');\n}\n\nfunction useMove(handler, config) {\n registerAction(moveAction);\n return useRecognizers({\n move: handler\n }, config || {}, 'move');\n}\n\nfunction useHover(handler, config) {\n registerAction(hoverAction);\n return useRecognizers({\n hover: handler\n }, config || {}, 'hover');\n}\n\nfunction createUseGesture(actions) {\n actions.forEach(registerAction);\n return function useGesture(_handlers, _config) {\n const {\n handlers,\n nativeHandlers,\n config\n } = parseMergedHandlers(_handlers, _config || {});\n return useRecognizers(handlers, config, undefined, nativeHandlers);\n };\n}\n\nfunction useGesture(handlers, config) {\n const hook = createUseGesture([dragAction, pinchAction, scrollAction, wheelAction, moveAction, hoverAction]);\n return hook(handlers, config || {});\n}\n\nexport { createUseGesture, useDrag, useGesture, useHover, useMove, usePinch, useScroll, useWheel };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { useThree } from '@react-three/fiber';\nimport { useGesture } from '@use-gesture/react';\n\nconst initialModelPosition = /* @__PURE__ */new THREE.Vector3();\nconst mousePosition2D = /* @__PURE__ */new THREE.Vector2();\nconst mousePosition3D = /* @__PURE__ */new THREE.Vector3();\nconst dragOffset = /* @__PURE__ */new THREE.Vector3();\nconst dragPlaneNormal = /* @__PURE__ */new THREE.Vector3();\nconst dragPlane = /* @__PURE__ */new THREE.Plane();\nconst DragControls = /*#__PURE__*/React.forwardRef(({\n autoTransform = true,\n matrix,\n axisLock,\n dragLimits,\n onHover,\n onDragStart,\n onDrag,\n onDragEnd,\n children,\n dragConfig,\n ...props\n}, fRef) => {\n const defaultControls = useThree(state => state.controls);\n const {\n camera,\n size,\n raycaster,\n invalidate\n } = useThree();\n const ref = React.useRef(null);\n const bind = useGesture({\n onHover: ({\n hovering\n }) => onHover && onHover(hovering !== null && hovering !== void 0 ? hovering : false),\n onDragStart: ({\n event\n }) => {\n if (defaultControls) defaultControls.enabled = false;\n const {\n point\n } = event;\n ref.current.matrix.decompose(initialModelPosition, new THREE.Quaternion(), new THREE.Vector3());\n mousePosition3D.copy(point);\n dragOffset.copy(mousePosition3D).sub(initialModelPosition);\n onDragStart && onDragStart(initialModelPosition);\n invalidate();\n },\n onDrag: ({\n xy: [dragX, dragY],\n intentional\n }) => {\n if (!intentional) return;\n const normalizedMouseX = (dragX - size.left) / size.width * 2 - 1;\n const normalizedMouseY = -((dragY - size.top) / size.height) * 2 + 1;\n mousePosition2D.set(normalizedMouseX, normalizedMouseY);\n raycaster.setFromCamera(mousePosition2D, camera);\n if (!axisLock) {\n camera.getWorldDirection(dragPlaneNormal).negate();\n } else {\n switch (axisLock) {\n case 'x':\n dragPlaneNormal.set(1, 0, 0);\n break;\n case 'y':\n dragPlaneNormal.set(0, 1, 0);\n break;\n case 'z':\n dragPlaneNormal.set(0, 0, 1);\n break;\n }\n }\n dragPlane.setFromNormalAndCoplanarPoint(dragPlaneNormal, mousePosition3D);\n raycaster.ray.intersectPlane(dragPlane, mousePosition3D);\n const previousLocalMatrix = ref.current.matrix.clone();\n const previousWorldMatrix = ref.current.matrixWorld.clone();\n const intendedNewPosition = new THREE.Vector3(mousePosition3D.x - dragOffset.x, mousePosition3D.y - dragOffset.y, mousePosition3D.z - dragOffset.z);\n if (dragLimits) {\n intendedNewPosition.x = dragLimits[0] ? Math.max(Math.min(intendedNewPosition.x, dragLimits[0][1]), dragLimits[0][0]) : intendedNewPosition.x;\n intendedNewPosition.y = dragLimits[1] ? Math.max(Math.min(intendedNewPosition.y, dragLimits[1][1]), dragLimits[1][0]) : intendedNewPosition.y;\n intendedNewPosition.z = dragLimits[2] ? Math.max(Math.min(intendedNewPosition.z, dragLimits[2][1]), dragLimits[2][0]) : intendedNewPosition.z;\n }\n if (autoTransform) {\n ref.current.matrix.setPosition(intendedNewPosition);\n const deltaLocalMatrix = ref.current.matrix.clone().multiply(previousLocalMatrix.invert());\n const deltaWorldMatrix = ref.current.matrix.clone().multiply(previousWorldMatrix.invert());\n onDrag && onDrag(ref.current.matrix, deltaLocalMatrix, ref.current.matrixWorld, deltaWorldMatrix);\n } else {\n const tempMatrix = new THREE.Matrix4().copy(ref.current.matrix);\n tempMatrix.setPosition(intendedNewPosition);\n const deltaLocalMatrix = tempMatrix.clone().multiply(previousLocalMatrix.invert());\n const deltaWorldMatrix = tempMatrix.clone().multiply(previousWorldMatrix.invert());\n onDrag && onDrag(tempMatrix, deltaLocalMatrix, ref.current.matrixWorld, deltaWorldMatrix);\n }\n invalidate();\n },\n onDragEnd: () => {\n if (defaultControls) defaultControls.enabled = true;\n onDragEnd && onDragEnd();\n invalidate();\n }\n }, {\n drag: {\n filterTaps: true,\n threshold: 1,\n ...(typeof dragConfig === 'object' ? dragConfig : {})\n }\n });\n React.useImperativeHandle(fRef, () => ref.current, []);\n React.useLayoutEffect(() => {\n if (!matrix) return;\n\n // If the matrix is a real matrix4 it means that the user wants to control the gizmo\n // In that case it should just be set, as a bare prop update would merely copy it\n ref.current.matrix = matrix;\n }, [matrix]);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref\n }, bind(), {\n matrix: matrix,\n matrixAutoUpdate: false\n }, props), children);\n});\n\nexport { DragControls };\n","function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n\n if (enumerableOnly) {\n symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n }\n\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nexport { _objectSpread2 as _, _defineProperty as a };\n","function _setPrototypeOf(o, p) {\n _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) {\n o.__proto__ = p;\n return o;\n };\n\n return _setPrototypeOf(o, p);\n}\n\nfunction _isNativeReflectConstruct() {\n if (typeof Reflect === \"undefined\" || !Reflect.construct) return false;\n if (Reflect.construct.sham) return false;\n if (typeof Proxy === \"function\") return true;\n\n try {\n Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {}));\n return true;\n } catch (e) {\n return false;\n }\n}\n\nexport { _setPrototypeOf as _, _isNativeReflectConstruct as a };\n","import { Matrix3 } from 'three';\n\n/**\n *\n * @param terms\n *\n * | a b |\n * | c d |\n *\n * @returns {number} determinant\n */\n\nfunction determinant2() {\n for (var _len = arguments.length, terms = new Array(_len), _key = 0; _key < _len; _key++) {\n terms[_key] = arguments[_key];\n }\n\n var a = terms[0],\n b = terms[1],\n c = terms[2],\n d = terms[3];\n return a * d - b * c;\n}\n/**\n *\n * @param terms\n *\n * | a b c |\n * | d e f |\n * | g h i |\n *\n * @returns {number} determinant\n */\n\nfunction determinant3() {\n for (var _len2 = arguments.length, terms = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n terms[_key2] = arguments[_key2];\n }\n\n var a = terms[0],\n b = terms[1],\n c = terms[2],\n d = terms[3],\n e = terms[4],\n f = terms[5],\n g = terms[6],\n h = terms[7],\n i = terms[8];\n return a * e * i + b * f * g + c * d * h - c * e * g - b * d * i - a * f * h;\n}\n/**\n *\n * @param terms\n *\n * | a b c g |\n * | h i j k |\n * | l m n o |\n *\n * @returns {number} determinant\n */\n\nfunction determinant4() {\n for (var _len3 = arguments.length, terms = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n terms[_key3] = arguments[_key3];\n }\n\n terms[0];\n terms[1];\n terms[2];\n terms[3];\n terms[4];\n terms[5];\n terms[6];\n terms[7];\n terms[8];\n terms[9];\n terms[10];\n terms[11];\n terms[12];\n terms[13];\n terms[14]; // TODO\n}\n/**\n *\n * Get the determinant of matrix m without row r and col c\n *\n * @param {matrix} m Starter matrix\n * @param r row to remove\n * @param c col to remove\n *\n * | a b c |\n * m = | d e f |\n * | g h i |\n *\n * getMinor(m, 1, 1) would result in this determinant\n *\n * | a c |\n * | g i |\n *\n * @returns {number} determinant\n */\n\nfunction getMinor(matrix, r, c) {\n var _matrixTranspose = matrix.clone().transpose();\n\n var x = [];\n var l = _matrixTranspose.elements.length;\n var n = Math.sqrt(l);\n\n for (var i = 0; i < l; i++) {\n var element = _matrixTranspose.elements[i];\n var row = Math.floor(i / n);\n var col = i % n;\n\n if (row !== r - 1 && col !== c - 1) {\n x.push(element);\n }\n }\n\n return determinant3.apply(void 0, x);\n}\n/**\n *\n */\n\nfunction matrixSum3(m1, m2) {\n var sum = [];\n var m1Array = m1.toArray();\n var m2Array = m2.toArray();\n\n for (var i = 0; i < m1Array.length; i++) {\n sum[i] = m1Array[i] + m2Array[i];\n }\n\n return new Matrix3().fromArray(sum);\n}\n\nvar matrix = /*#__PURE__*/Object.freeze({\n __proto__: null,\n determinant2: determinant2,\n determinant3: determinant3,\n determinant4: determinant4,\n getMinor: getMinor,\n matrixSum3: matrixSum3\n});\n\nexport { matrixSum3 as a, determinant2 as b, determinant4 as c, determinant3 as d, getMinor as g, matrix as m };\n","import { a as _isNativeReflectConstruct, _ as _setPrototypeOf } from './isNativeReflectConstruct-5594d075.esm.js';\nimport { Vector2, Matrix4 } from 'three';\nimport { d as determinant3, g as getMinor } from './matrix-baa530bf.esm.js';\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n var _i = arr == null ? null : typeof Symbol !== \"undefined\" && arr[Symbol.iterator] || arr[\"@@iterator\"];\n\n if (_i == null) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n\n var _s, _e;\n\n try {\n for (_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) return _arrayLikeToArray(arr);\n}\n\nfunction _iterableToArray(iter) {\n if (typeof Symbol !== \"undefined\" && iter[Symbol.iterator] != null || iter[\"@@iterator\"] != null) return Array.from(iter);\n}\n\nfunction _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _toConsumableArray(arr) {\n return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();\n}\n\nfunction _construct(Parent, args, Class) {\n if (_isNativeReflectConstruct()) {\n _construct = Reflect.construct;\n } else {\n _construct = function _construct(Parent, args, Class) {\n var a = [null];\n a.push.apply(a, args);\n var Constructor = Function.bind.apply(Parent, a);\n var instance = new Constructor();\n if (Class) _setPrototypeOf(instance, Class.prototype);\n return instance;\n };\n }\n\n return _construct.apply(null, arguments);\n}\n\n/**\n *\n * @param point\n *\n * @param triangle\n *\n * @returns {boolean} true if the point is in the triangle\n *\n * TODO: Find explainer\n */\nfunction isPointInTriangle(point, triangle) {\n var _triangle$ = _slicedToArray(triangle[0], 2),\n ax = _triangle$[0],\n ay = _triangle$[1];\n\n var _triangle$2 = _slicedToArray(triangle[1], 2),\n bx = _triangle$2[0],\n by = _triangle$2[1];\n\n var _triangle$3 = _slicedToArray(triangle[2], 2),\n cx = _triangle$3[0],\n cy = _triangle$3[1];\n\n var _point = _slicedToArray(point, 2),\n px = _point[0],\n py = _point[1]; // TODO Sub with static calc\n\n\n var matrix = new Matrix4(); // prettier-ignore\n\n matrix.set(ax, ay, ax * ax + ay * ay, 1, bx, by, bx * bx + by * by, 1, cx, cy, cx * cx + cy * cy, 1, px, py, px * px + py * py, 1);\n return matrix.determinant() <= 0;\n}\nfunction triangleDeterminant(triangle) {\n var _triangle$4 = _slicedToArray(triangle[0], 2),\n x1 = _triangle$4[0],\n y1 = _triangle$4[1];\n\n var _triangle$5 = _slicedToArray(triangle[1], 2),\n x2 = _triangle$5[0],\n y2 = _triangle$5[1];\n\n var _triangle$6 = _slicedToArray(triangle[2], 2),\n x3 = _triangle$6[0],\n y3 = _triangle$6[1]; // prettier-ignore\n\n\n return determinant3(x1, y1, 1, x2, y2, 1, x3, y3, 1);\n}\n/**\n * Uses triangle area determinant to check if 3 points are collinear.\n * If they are, they can't make a triangle, so the determinant will be 0!\n *\n * 0 1 2\n * ─────■─────■─────■\n *\n *\n * Fun fact, you can use this same determinant to check the order of the points in the triangle\n *\n * NOTE: Should this use a buffer instead? NOTE: Should this use a buffer instead? [x0, y0, x1, y1, x2, y2]?\n *\n */\n\nfunction arePointsCollinear(points) {\n return triangleDeterminant(points) === 0;\n} // TODO This is the same principle as the prev function, find a way to make it have sense\n\nfunction isTriangleClockwise(triangle) {\n return triangleDeterminant(triangle) < 0;\n}\n/**\n \nThe circumcircle is a circle touching all the vertices of a triangle or polygon.\n\n ┌───┐ \n │ B │ \n └───┘ \n .───●───. \n ,─' ╱ ╲ '─. \n ,' ╱ ╲ `. \n ╱ ╱ ╲ ╲ \n ; ╱ ╲ : \n │ ╱ ╲ │ \n │ ╱ ╲ │ \n : ╱ ╲ ; \n ╲ ╱ ╲ ╱ \n┌───┐ ●─────────────────● ┌───┐\n│ A │ `. ,' │ C │\n└───┘ '─. ,─' └───┘\n `─────' \n */\n\n/**\n *\n * @param triangle\n *\n * @returns {number} circumcircle\n */\n// https://math.stackexchange.com/a/1460096\n\nfunction getCircumcircle(triangle) {\n // TS-TODO the next few lines are ignored because the types aren't current to the change in vectors (that can now be iterated)\n // @ts-ignore\n var _triangle$7 = _slicedToArray(triangle[0], 2),\n ax = _triangle$7[0],\n ay = _triangle$7[1]; // @ts-ignore\n\n\n var _triangle$8 = _slicedToArray(triangle[1], 2),\n bx = _triangle$8[0],\n by = _triangle$8[1]; // @ts-ignore\n\n\n var _triangle$9 = _slicedToArray(triangle[2], 2),\n cx = _triangle$9[0],\n cy = _triangle$9[1];\n\n if (arePointsCollinear(triangle)) return null; // points are collinear\n\n var m = new Matrix4(); // prettier-ignore\n\n m.set(1, 1, 1, 1, ax * ax + ay * ay, ax, ay, 1, bx * bx + by * by, bx, by, 1, cx * cx + cy * cy, cx, cy, 1);\n var m11 = getMinor(m, 1, 1);\n var m13 = getMinor(m, 1, 3);\n var m12 = getMinor(m, 1, 2);\n var m14 = getMinor(m, 1, 4);\n var x0 = 0.5 * (m12 / m11);\n var y0 = 0.5 * (m13 / m11);\n var r2 = x0 * x0 + y0 * y0 + m14 / m11;\n return {\n x: Math.abs(x0) === 0 ? 0 : x0,\n y: Math.abs(y0) === 0 ? 0 : -y0,\n r: Math.sqrt(r2)\n };\n} // https://stackoverflow.com/questions/39984709/how-can-i-check-wether-a-point-is-inside-the-circumcircle-of-3-points\n\nfunction isPointInCircumcircle(point, triangle) {\n var _ref = Array.isArray(triangle[0]) ? triangle[0] : triangle[0].toArray(),\n _ref2 = _slicedToArray(_ref, 2),\n ax = _ref2[0],\n ay = _ref2[1];\n\n var _ref3 = Array.isArray(triangle[1]) ? triangle[1] : triangle[1].toArray(),\n _ref4 = _slicedToArray(_ref3, 2),\n bx = _ref4[0],\n by = _ref4[1];\n\n var _ref5 = Array.isArray(triangle[2]) ? triangle[2] : triangle[2].toArray(),\n _ref6 = _slicedToArray(_ref5, 2),\n cx = _ref6[0],\n cy = _ref6[1];\n\n var _point2 = _slicedToArray(point, 2),\n px = _point2[0],\n py = _point2[1];\n\n if (arePointsCollinear(triangle)) throw new Error(\"Collinear points don't form a triangle\");\n /**\n | ax-px, ay-py, (ax-px)² + (ay-py)² |\n det = | bx-px, by-py, (bx-px)² + (by-py)² |\n | cx-px, cy-py, (cx-px)² + (cy-py)² |\n */\n\n var x1mpx = ax - px;\n var aympy = ay - py;\n var bxmpx = bx - px;\n var bympy = by - py;\n var cxmpx = cx - px;\n var cympy = cy - py; // prettier-ignore\n\n var d = determinant3(x1mpx, aympy, x1mpx * x1mpx + aympy * aympy, bxmpx, bympy, bxmpx * bxmpx + bympy * bympy, cxmpx, cympy, cxmpx * cxmpx + cympy * cympy); // if d is 0, the point is on C\n\n if (d === 0) {\n return true;\n }\n\n return !isTriangleClockwise(triangle) ? d > 0 : d < 0;\n} // From https://algorithmtutor.com/Computational-Geometry/Determining-if-two-consecutive-segments-turn-left-or-right/\n\nvar mv1 = new Vector2();\nvar mv2 = new Vector2();\n/**\n \n ╱ ╲ \n ╱ ╲ \n ▕ ▏ \n \n right left \n\n * NOTE: Should this use a buffer instead? [x0, y0, x1, y1]?\n */\n\nfunction doThreePointsMakeARight(points) {\n var _points$map = points.map(function (p) {\n if (Array.isArray(p)) {\n return _construct(Vector2, _toConsumableArray(p));\n }\n\n return p;\n }),\n _points$map2 = _slicedToArray(_points$map, 3),\n p1 = _points$map2[0],\n p2 = _points$map2[1],\n p3 = _points$map2[2];\n\n if (arePointsCollinear(points)) return false; // @ts-ignore\n\n var p2p1 = mv1.subVectors(p2, p1); // @ts-ignore\n\n var p3p1 = mv2.subVectors(p3, p1);\n var cross = p3p1.cross(p2p1);\n return cross > 0;\n}\n\nvar triangle = /*#__PURE__*/Object.freeze({\n __proto__: null,\n isPointInTriangle: isPointInTriangle,\n triangleDeterminant: triangleDeterminant,\n arePointsCollinear: arePointsCollinear,\n isTriangleClockwise: isTriangleClockwise,\n getCircumcircle: getCircumcircle,\n isPointInCircumcircle: isPointInCircumcircle,\n doThreePointsMakeARight: doThreePointsMakeARight\n});\n\nexport { _slicedToArray as _, _toConsumableArray as a, triangleDeterminant as b, arePointsCollinear as c, doThreePointsMakeARight as d, isTriangleClockwise as e, isPointInCircumcircle as f, getCircumcircle as g, isPointInTriangle as i, triangle as t };\n","import { d as doThreePointsMakeARight, a as _toConsumableArray, _ as _slicedToArray } from './triangle-b62b9067.esm.js';\nimport { Vector3, Matrix3 } from 'three';\nimport { a as matrixSum3 } from './matrix-baa530bf.esm.js';\n\n/**\n * Clamps a value between a range.\n */\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(max, value));\n} // Loops the value t, so that it is never larger than length and never smaller than 0.\n\nfunction repeat(t, length) {\n return clamp(t - Math.floor(t / length) * length, 0, length);\n} // Calculates the shortest difference between two given angles.\n\nfunction deltaAngle(current, target) {\n var delta = repeat(target - current, Math.PI * 2);\n if (delta > Math.PI) delta -= Math.PI * 2;\n return delta;\n}\n/**\n * Converts degrees to radians.\n */\n\nfunction degToRad(degrees) {\n return degrees / 180 * Math.PI;\n}\n/**\n * Converts radians to degrees.\n */\n\nfunction radToDeg(radians) {\n return radians * 180 / Math.PI;\n} // adapted from https://gist.github.com/stephanbogner/a5f50548a06bec723dcb0991dcbb0856 by https://twitter.com/st_phan\n\nfunction fibonacciOnSphere(buffer, _ref) {\n var _ref$radius = _ref.radius,\n radius = _ref$radius === void 0 ? 1 : _ref$radius;\n var samples = buffer.length / 3;\n var offset = 2 / samples;\n var increment = Math.PI * (3 - 2.2360679775);\n\n for (var i = 0; i < buffer.length; i += 3) {\n var y = i * offset - 1 + offset / 2;\n var distance = Math.sqrt(1 - Math.pow(y, 2));\n var phi = i % samples * increment;\n var x = Math.cos(phi) * distance;\n var z = Math.sin(phi) * distance;\n buffer[i] = x * radius;\n buffer[i + 1] = y * radius;\n buffer[i + 2] = z * radius;\n }\n} // @ts-ignore\n\nfunction vectorEquals(a, b) {\n var eps = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Number.EPSILON;\n return Math.abs(a.x - b.x) < eps && Math.abs(a.y - b.y) < eps && Math.abs(a.z - b.z) < eps;\n}\n/**\n * Sorts vectors in lexicographic order, works with both v2 and v3\n *\n * Use as:\n * const sorted = arrayOfVectors.sort(lexicographicOrder)\n */\n// https://en.wikipedia.org/wiki/Lexicographic_order\n\nfunction lexicographic(a, b) {\n if (a.x === b.x) {\n // do a check to see if points is 3D,\n // in which case add y eq check and sort by z\n if (typeof a.z !== \"undefined\") {\n if (a.y === b.y) {\n return a.z - b.z;\n }\n }\n\n return a.y - b.y;\n }\n\n return a.x - b.x;\n}\n/**\n * Convex Hull\n *\n * Returns an array of 2D Vectors representing the convex hull of a set of 2D Vectors\n */\n\n/**\n * Calculate the convex hull of a set of points\n */\n\nfunction convexHull(_points) {\n var points = _points.sort(lexicographic); // put p1 and p2 in a list lUpper with p1 as the first point\n\n\n var lUpper = [points[0], points[1]]; // for i <- 3 to n\n\n for (var i = 2; i < points.length; i++) {\n lUpper.push(points[i]); // while lUpper contains more than 2 points and the last three points in lUpper do not make a right turn\n\n while (lUpper.length > 2 && doThreePointsMakeARight(_toConsumableArray(lUpper.slice(-3)))) {\n // delete the middle of the last three points from lUpper\n lUpper.splice(lUpper.length - 2, 1);\n }\n } // put pn and pn-1 in a list lLower with pn as the first point\n\n\n var lLower = [points[points.length - 1], points[points.length - 2]]; // for (i <- n - 2 downto 1)\n\n for (var _i = points.length - 3; _i >= 0; _i--) {\n // append pi to lLower\n lLower.push(points[_i]); // while lLower contains more than 2 points and the last three points in lLower do not make a right turn\n\n while (lLower.length > 2 && doThreePointsMakeARight(_toConsumableArray(lLower.slice(-3)))) {\n // delete the middle of the last three points from lLower\n lLower.splice(lLower.length - 2, 1);\n }\n } // remove the first and last point from lLower to avoid duplication of the points where the upper and lower hull meet\n\n\n lLower.splice(0, 1);\n lLower.splice(lLower.length - 1, 1); // prettier-ignore\n\n var c = [].concat(lUpper, lLower);\n return c;\n}\nfunction remap(x, _ref2, _ref3) {\n var _ref4 = _slicedToArray(_ref2, 2),\n low1 = _ref4[0],\n high1 = _ref4[1];\n\n var _ref5 = _slicedToArray(_ref3, 2),\n low2 = _ref5[0],\n high2 = _ref5[1];\n\n return low2 + (x - low1) * (high2 - low2) / (high1 - low1);\n}\n/**\n *\n * https://www.desmos.com/calculator/vsnmlaljdu\n *\n * Ease-in-out, goes to -Infinite before 0 and Infinite after 1\n *\n * @param t\n * @returns\n */\n\nfunction fade(t) {\n return t * t * t * (t * (t * 6 - 15) + 10);\n}\n/**\n *\n * Returns the result of linearly interpolating between input A and input B by input T.\n *\n * @param v0\n * @param v1\n * @param t\n * @returns\n */\n\nfunction lerp(v0, v1, t) {\n return v0 * (1 - t) + v1 * t;\n}\n/**\n *\n * Returns the linear parameter that produces the interpolant specified by input T within the range of input A to input B.\n *\n * @param v0\n * @param v1\n * @param t\n * @returns\n */\n\nfunction inverseLerp(v0, v1, t) {\n return (t - v0) / (v1 - v0);\n}\n/**\n *\n */\n\nfunction normalize(x, y, z) {\n var m = Math.sqrt(x * x + y * y + z * z);\n return [x / m, y / m, z / m];\n}\n/**\n *\n */\n\nfunction pointOnCubeToPointOnSphere(x, y, z) {\n var x2 = x * x;\n var y2 = y * y;\n var z2 = z * z;\n var nx = x * Math.sqrt(1 - (y2 + z2) / 2 + y2 * z2 / 3);\n var ny = y * Math.sqrt(1 - (z2 + x2) / 2 + z2 * x2 / 3);\n var nz = z * Math.sqrt(1 - (x2 + y2) / 2 + x2 * y2 / 3);\n return [nx, ny, nz];\n} // https://math.stackexchange.com/questions/180418/calculate-rotation-matrix-to-align-vector-a-to-vector-b-in-3d\n\n/**\n * Give two unit vectors a and b, returns the transformation matrix that rotates a onto b.\n *\n * */\n\nfunction rotateVectorOnVector(a, b) {\n var v = new Vector3().crossVectors(a, b);\n var c = a.dot(b);\n var i = new Matrix3().identity(); // skew-symmetric cross-product matrix of 𝑣 https://en.wikipedia.org/wiki/Skew-symmetric_matrix\n // prettier-ignore\n\n var vx = new Matrix3().set(0, -v.z, v.y, v.z, 0, -v.x, -v.y, v.x, 0);\n var vxsquared = new Matrix3().multiplyMatrices(vx, vx).multiplyScalar(1 / (1 + c));\n\n var _final = matrixSum3(matrixSum3(i, vx), vxsquared);\n\n return _final;\n} // calculate latitude and longitude (in radians) from point on unit sphere\n\nfunction pointToCoordinate(x, y, z) {\n var lat = Math.asin(y);\n var lon = Math.atan2(x, -z);\n return [lat, lon];\n} // calculate point on unit sphere given latitude and logitude in radians\n\nfunction coordinateToPoint(lat, lon) {\n var y = Math.sin(lat);\n var r = Math.cos(lat);\n var x = Math.sin(lon) * r;\n var z = -Math.cos(lon) * r;\n return [x, y, z];\n}\n/**\n * Given a plane and a segment, return the intersection point if it exists or null it doesn't.\n */\n\nfunction planeSegmentIntersection(plane, segment) {\n var _segment = _slicedToArray(segment, 2),\n a = _segment[0],\n b = _segment[1];\n\n var matrix = rotateVectorOnVector(plane.normal, new Vector3(0, 1, 0));\n var t = inverseLerp(a.clone().applyMatrix3(matrix).y, b.clone().applyMatrix3(matrix).y, 0);\n return new Vector3().lerpVectors(a, b, t);\n}\n/**\n * Given a plane and a point, return the distance.\n */\n\nfunction pointToPlaneDistance(p, plane) {\n var d = plane.normal.dot(p); // TODO\n\n return d;\n}\nfunction getIndexFrom3D(coords, sides) {\n var _coords = _slicedToArray(coords, 3),\n ix = _coords[0],\n iy = _coords[1],\n iz = _coords[2];\n\n var _sides = _slicedToArray(sides, 2),\n rx = _sides[0],\n ry = _sides[1];\n\n return iz * rx * ry + iy * rx + ix;\n}\nfunction get3DFromIndex(index, size) {\n var _size = _slicedToArray(size, 2),\n rx = _size[0],\n ry = _size[1];\n\n var a = rx * ry;\n var z = index / a;\n var b = index - a * z;\n var y = b / rx;\n var x = b % rx;\n return [x, y, z];\n}\nfunction getIndexFrom2D(coords, size) {\n return coords[0] + size[0] * coords[1];\n}\nfunction get2DFromIndex(index, columns) {\n var x = index % columns;\n var y = Math.floor(index / columns);\n return [x, y];\n}\n\nvar misc = /*#__PURE__*/Object.freeze({\n __proto__: null,\n clamp: clamp,\n repeat: repeat,\n deltaAngle: deltaAngle,\n degToRad: degToRad,\n radToDeg: radToDeg,\n fibonacciOnSphere: fibonacciOnSphere,\n vectorEquals: vectorEquals,\n lexicographic: lexicographic,\n convexHull: convexHull,\n remap: remap,\n fade: fade,\n lerp: lerp,\n inverseLerp: inverseLerp,\n normalize: normalize,\n pointOnCubeToPointOnSphere: pointOnCubeToPointOnSphere,\n rotateVectorOnVector: rotateVectorOnVector,\n pointToCoordinate: pointToCoordinate,\n coordinateToPoint: coordinateToPoint,\n planeSegmentIntersection: planeSegmentIntersection,\n pointToPlaneDistance: pointToPlaneDistance,\n getIndexFrom3D: getIndexFrom3D,\n get3DFromIndex: get3DFromIndex,\n getIndexFrom2D: getIndexFrom2D,\n get2DFromIndex: get2DFromIndex\n});\n\nexport { degToRad as a, radToDeg as b, clamp as c, deltaAngle as d, fibonacciOnSphere as e, fade as f, lexicographic as g, convexHull as h, remap as i, inverseLerp as j, rotateVectorOnVector as k, lerp as l, misc as m, normalize as n, pointToCoordinate as o, pointOnCubeToPointOnSphere as p, coordinateToPoint as q, repeat as r, planeSegmentIntersection as s, pointToPlaneDistance as t, getIndexFrom3D as u, vectorEquals as v, get3DFromIndex as w, getIndexFrom2D as x, get2DFromIndex as y };\n","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nexport { _classCallCheck as _ };\n","import { a as _defineProperty, _ as _objectSpread2 } from './objectSpread2-284232a6.esm.js';\nimport { _ as _classCallCheck } from './classCallCheck-9098b006.esm.js';\nimport { l as lerp, f as fade } from './misc-19a3ec46.esm.js';\n\nfunction _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\n/*\n * A speed-improved perlin and simplex noise algorithms for 2D.\n *\n * Based on example code by Stefan Gustavson (stegu@itn.liu.se).\n * Optimisations by Peter Eastman (peastman@drizzle.stanford.edu).\n * Better rank ordering method by Stefan Gustavson in 2012.\n * Converted to Javascript by Joseph Gentle.\n *\n * Version 2012-03-09\n *\n * This code was placed in the public domain by its original author,\n * Stefan Gustavson. You may use it as you see fit, but\n * attribution is appreciated.\n *\n */\n\nvar Grad = function Grad(x, y, z) {\n var _this = this;\n\n _classCallCheck(this, Grad);\n\n _defineProperty(this, \"dot2\", function (x, y) {\n return _this.x * x + _this.y * y;\n });\n\n _defineProperty(this, \"dot3\", function (x, y, z) {\n return _this.x * x + _this.y * y + _this.z * z;\n });\n\n this.x = x;\n this.y = y;\n this.z = z;\n};\n\nvar grad3 = [new Grad(1, 1, 0), new Grad(-1, 1, 0), new Grad(1, -1, 0), new Grad(-1, -1, 0), new Grad(1, 0, 1), new Grad(-1, 0, 1), new Grad(1, 0, -1), new Grad(-1, 0, -1), new Grad(0, 1, 1), new Grad(0, -1, 1), new Grad(0, 1, -1), new Grad(0, -1, -1)];\nvar p = [151, 160, 137, 91, 90, 15, 131, 13, 201, 95, 96, 53, 194, 233, 7, 225, 140, 36, 103, 30, 69, 142, 8, 99, 37, 240, 21, 10, 23, 190, 6, 148, 247, 120, 234, 75, 0, 26, 197, 62, 94, 252, 219, 203, 117, 35, 11, 32, 57, 177, 33, 88, 237, 149, 56, 87, 174, 20, 125, 136, 171, 168, 68, 175, 74, 165, 71, 134, 139, 48, 27, 166, 77, 146, 158, 231, 83, 111, 229, 122, 60, 211, 133, 230, 220, 105, 92, 41, 55, 46, 245, 40, 244, 102, 143, 54, 65, 25, 63, 161, 1, 216, 80, 73, 209, 76, 132, 187, 208, 89, 18, 169, 200, 196, 135, 130, 116, 188, 159, 86, 164, 100, 109, 198, 173, 186, 3, 64, 52, 217, 226, 250, 124, 123, 5, 202, 38, 147, 118, 126, 255, 82, 85, 212, 207, 206, 59, 227, 47, 16, 58, 17, 182, 189, 28, 42, 223, 183, 170, 213, 119, 248, 152, 2, 44, 154, 163, 70, 221, 153, 101, 155, 167, 43, 172, 9, 129, 22, 39, 253, 19, 98, 108, 110, 79, 113, 224, 232, 178, 185, 112, 104, 218, 246, 97, 228, 251, 34, 242, 193, 238, 210, 144, 12, 191, 179, 162, 241, 81, 51, 145, 235, 249, 14, 239, 107, 49, 192, 214, 31, 181, 199, 106, 157, 184, 84, 204, 176, 115, 121, 50, 45, 127, 4, 150, 254, 138, 236, 205, 93, 222, 114, 67, 29, 24, 72, 243, 141, 128, 195, 78, 66, 215, 61, 156, 180]; // To remove the need for index wrapping, double the permutation table length\n\nvar perm = new Array(512);\nvar gradP = new Array(512); // This isn't a very good seeding function, but it works ok. It supports 2^16\n// different seed values. Write something better if you need more seeds.\n\nvar seed = function seed(_seed) {\n if (_seed > 0 && _seed < 1) {\n // Scale the seed out\n _seed *= 65536;\n }\n\n _seed = Math.floor(_seed);\n\n if (_seed < 256) {\n _seed |= _seed << 8;\n }\n\n for (var i = 0; i < 256; i++) {\n var v;\n\n if (i & 1) {\n v = p[i] ^ _seed & 255;\n } else {\n v = p[i] ^ _seed >> 8 & 255;\n }\n\n perm[i] = perm[i + 256] = v;\n gradP[i] = gradP[i + 256] = grad3[v % 12];\n }\n};\nseed(0);\n/*\n for(var i=0; i<256; i++) {\n perm[i] = perm[i + 256] = p[i];\n gradP[i] = gradP[i + 256] = grad3[perm[i] % 12];\n }*/\n// Skewing and unskewing factors for 2, 3, and 4 dimensions\n\nvar F2 = 0.5 * (Math.sqrt(3) - 1);\nvar G2 = (3 - Math.sqrt(3)) / 6;\nvar F3 = 1 / 3;\nvar G3 = 1 / 6; // 2D simplex noise\n\nvar simplex2 = function simplex2(xin, yin) {\n var n0, n1, n2; // Noise contributions from the three corners\n // Skew the input space to determine which simplex cell we're in\n\n var s = (xin + yin) * F2; // Hairy factor for 2D\n\n var i = Math.floor(xin + s);\n var j = Math.floor(yin + s);\n var t = (i + j) * G2;\n var x0 = xin - i + t; // The x,y distances from the cell origin, unskewed.\n\n var y0 = yin - j + t; // For the 2D case, the simplex shape is an equilateral triangle.\n // Determine which simplex we are in.\n\n var i1, j1; // Offsets for second (middle) corner of simplex in (i,j) coords\n\n if (x0 > y0) {\n // lower triangle, XY order: (0,0)->(1,0)->(1,1)\n i1 = 1;\n j1 = 0;\n } else {\n // upper triangle, YX order: (0,0)->(0,1)->(1,1)\n i1 = 0;\n j1 = 1;\n } // A step of (1,0) in (i,j) means a step of (1-c,-c) in (x,y), and\n // a step of (0,1) in (i,j) means a step of (-c,1-c) in (x,y), where\n // c = (3-sqrt(3))/6\n\n\n var x1 = x0 - i1 + G2; // Offsets for middle corner in (x,y) unskewed coords\n\n var y1 = y0 - j1 + G2;\n var x2 = x0 - 1 + 2 * G2; // Offsets for last corner in (x,y) unskewed coords\n\n var y2 = y0 - 1 + 2 * G2; // Work out the hashed gradient indices of the three simplex corners\n\n i &= 255;\n j &= 255;\n var gi0 = gradP[i + perm[j]];\n var gi1 = gradP[i + i1 + perm[j + j1]];\n var gi2 = gradP[i + 1 + perm[j + 1]]; // Calculate the contribution from the three corners\n\n var t0 = 0.5 - x0 * x0 - y0 * y0;\n\n if (t0 < 0) {\n n0 = 0;\n } else {\n t0 *= t0;\n n0 = t0 * t0 * gi0.dot2(x0, y0); // (x,y) of grad3 used for 2D gradient\n }\n\n var t1 = 0.5 - x1 * x1 - y1 * y1;\n\n if (t1 < 0) {\n n1 = 0;\n } else {\n t1 *= t1;\n n1 = t1 * t1 * gi1.dot2(x1, y1);\n }\n\n var t2 = 0.5 - x2 * x2 - y2 * y2;\n\n if (t2 < 0) {\n n2 = 0;\n } else {\n t2 *= t2;\n n2 = t2 * t2 * gi2.dot2(x2, y2);\n } // Add contributions from each corner to get the final noise value.\n // The result is scaled to return values in the interval [-1,1].\n\n\n return 70 * (n0 + n1 + n2);\n}; // 3D simplex noise\n\nvar simplex3 = function simplex3(xin, yin, zin) {\n var n0, n1, n2, n3; // Noise contributions from the four corners\n // Skew the input space to determine which simplex cell we're in\n\n var s = (xin + yin + zin) * F3; // Hairy factor for 2D\n\n var i = Math.floor(xin + s);\n var j = Math.floor(yin + s);\n var k = Math.floor(zin + s);\n var t = (i + j + k) * G3;\n var x0 = xin - i + t; // The x,y distances from the cell origin, unskewed.\n\n var y0 = yin - j + t;\n var z0 = zin - k + t; // For the 3D case, the simplex shape is a slightly irregular tetrahedron.\n // Determine which simplex we are in.\n\n var i1, j1, k1; // Offsets for second corner of simplex in (i,j,k) coords\n\n var i2, j2, k2; // Offsets for third corner of simplex in (i,j,k) coords\n\n if (x0 >= y0) {\n if (y0 >= z0) {\n i1 = 1;\n j1 = 0;\n k1 = 0;\n i2 = 1;\n j2 = 1;\n k2 = 0;\n } else if (x0 >= z0) {\n i1 = 1;\n j1 = 0;\n k1 = 0;\n i2 = 1;\n j2 = 0;\n k2 = 1;\n } else {\n i1 = 0;\n j1 = 0;\n k1 = 1;\n i2 = 1;\n j2 = 0;\n k2 = 1;\n }\n } else {\n if (y0 < z0) {\n i1 = 0;\n j1 = 0;\n k1 = 1;\n i2 = 0;\n j2 = 1;\n k2 = 1;\n } else if (x0 < z0) {\n i1 = 0;\n j1 = 1;\n k1 = 0;\n i2 = 0;\n j2 = 1;\n k2 = 1;\n } else {\n i1 = 0;\n j1 = 1;\n k1 = 0;\n i2 = 1;\n j2 = 1;\n k2 = 0;\n }\n } // A step of (1,0,0) in (i,j,k) means a step of (1-c,-c,-c) in (x,y,z),\n // a step of (0,1,0) in (i,j,k) means a step of (-c,1-c,-c) in (x,y,z), and\n // a step of (0,0,1) in (i,j,k) means a step of (-c,-c,1-c) in (x,y,z), where\n // c = 1/6.\n\n\n var x1 = x0 - i1 + G3; // Offsets for second corner\n\n var y1 = y0 - j1 + G3;\n var z1 = z0 - k1 + G3;\n var x2 = x0 - i2 + 2 * G3; // Offsets for third corner\n\n var y2 = y0 - j2 + 2 * G3;\n var z2 = z0 - k2 + 2 * G3;\n var x3 = x0 - 1 + 3 * G3; // Offsets for fourth corner\n\n var y3 = y0 - 1 + 3 * G3;\n var z3 = z0 - 1 + 3 * G3; // Work out the hashed gradient indices of the four simplex corners\n\n i &= 255;\n j &= 255;\n k &= 255;\n var gi0 = gradP[i + perm[j + perm[k]]];\n var gi1 = gradP[i + i1 + perm[j + j1 + perm[k + k1]]];\n var gi2 = gradP[i + i2 + perm[j + j2 + perm[k + k2]]];\n var gi3 = gradP[i + 1 + perm[j + 1 + perm[k + 1]]]; // Calculate the contribution from the four corners\n\n var t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0;\n\n if (t0 < 0) {\n n0 = 0;\n } else {\n t0 *= t0;\n n0 = t0 * t0 * gi0.dot3(x0, y0, z0); // (x,y) of grad3 used for 2D gradient\n }\n\n var t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1;\n\n if (t1 < 0) {\n n1 = 0;\n } else {\n t1 *= t1;\n n1 = t1 * t1 * gi1.dot3(x1, y1, z1);\n }\n\n var t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2;\n\n if (t2 < 0) {\n n2 = 0;\n } else {\n t2 *= t2;\n n2 = t2 * t2 * gi2.dot3(x2, y2, z2);\n }\n\n var t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3;\n\n if (t3 < 0) {\n n3 = 0;\n } else {\n t3 *= t3;\n n3 = t3 * t3 * gi3.dot3(x3, y3, z3);\n } // Add contributions from each corner to get the final noise value.\n // The result is scaled to return values in the interval [-1,1].\n\n\n return 32 * (n0 + n1 + n2 + n3);\n}; // ##### Perlin noise stuff\n// 2D Perlin Noise\n\nvar perlin2 = function perlin2(x, y) {\n // Find unit grid cell containing point\n var X = Math.floor(x),\n Y = Math.floor(y); // Get relative xy coordinates of point within that cell\n\n x = x - X;\n y = y - Y; // Wrap the integer cells at 255 (smaller integer period can be introduced here)\n\n X = X & 255;\n Y = Y & 255; // Calculate noise contributions from each of the four corners\n\n var n00 = gradP[X + perm[Y]].dot2(x, y);\n var n01 = gradP[X + perm[Y + 1]].dot2(x, y - 1);\n var n10 = gradP[X + 1 + perm[Y]].dot2(x - 1, y);\n var n11 = gradP[X + 1 + perm[Y + 1]].dot2(x - 1, y - 1); // Compute the fade curve value for x\n\n var u = fade(x); // Interpolate the four results\n\n return lerp(lerp(n00, n10, u), lerp(n01, n11, u), fade(y));\n}; // 3D Perlin Noise\n\nvar perlin3 = function perlin3(x, y, z) {\n // Find unit grid cell containing point\n var X = Math.floor(x),\n Y = Math.floor(y),\n Z = Math.floor(z); // Get relative xyz coordinates of point within that cell\n\n x = x - X;\n y = y - Y;\n z = z - Z; // Wrap the integer cells at 255 (smaller integer period can be introduced here)\n\n X = X & 255;\n Y = Y & 255;\n Z = Z & 255; // Calculate noise contributions from each of the eight corners\n\n var n000 = gradP[X + perm[Y + perm[Z]]].dot3(x, y, z);\n var n001 = gradP[X + perm[Y + perm[Z + 1]]].dot3(x, y, z - 1);\n var n010 = gradP[X + perm[Y + 1 + perm[Z]]].dot3(x, y - 1, z);\n var n011 = gradP[X + perm[Y + 1 + perm[Z + 1]]].dot3(x, y - 1, z - 1);\n var n100 = gradP[X + 1 + perm[Y + perm[Z]]].dot3(x - 1, y, z);\n var n101 = gradP[X + 1 + perm[Y + perm[Z + 1]]].dot3(x - 1, y, z - 1);\n var n110 = gradP[X + 1 + perm[Y + 1 + perm[Z]]].dot3(x - 1, y - 1, z);\n var n111 = gradP[X + 1 + perm[Y + 1 + perm[Z + 1]]].dot3(x - 1, y - 1, z - 1); // Compute the fade curve value for x, y, z\n\n var u = fade(x);\n var v = fade(y);\n var w = fade(z); // Interpolate\n\n return lerp(lerp(lerp(n000, n100, u), lerp(n001, n101, u), w), lerp(lerp(n010, n110, u), lerp(n011, n111, u), w), v);\n};\n\nvar noise = /*#__PURE__*/Object.freeze({\n __proto__: null,\n seed: seed,\n simplex2: simplex2,\n simplex3: simplex3,\n perlin2: perlin2,\n perlin3: perlin3\n});\n\nvar TAU = Math.PI * 2;\nvar FlashGen = /*#__PURE__*/function () {\n function FlashGen(props) {\n _classCallCheck(this, FlashGen);\n\n _defineProperty(this, \"nextBurstTime\", 0);\n\n _defineProperty(this, \"nextFlashEndTime\", 0);\n\n _defineProperty(this, \"flashesDone\", 0);\n\n _defineProperty(this, \"isFlashing\", false);\n\n _defineProperty(this, \"currentCount\", 0);\n\n _defineProperty(this, \"flashIntensity\", 0);\n\n _defineProperty(this, \"isDecaying\", false);\n\n _defineProperty(this, \"autoBurst\", true);\n\n _defineProperty(this, \"decaySpeed\", 40);\n\n _defineProperty(this, \"minInterval\", 5000);\n\n _defineProperty(this, \"maxInterval\", 10000);\n\n _defineProperty(this, \"minDuration\", 50);\n\n _defineProperty(this, \"maxDuration\", 300);\n\n _defineProperty(this, \"count\", 5);\n\n Object.assign(this, props);\n }\n\n _createClass(FlashGen, [{\n key: \"scheduleNextBurst\",\n value: function scheduleNextBurst(currentTime) {\n var burstInterval = Math.random() * (this.maxInterval - this.minInterval) + this.minInterval;\n this.nextBurstTime = currentTime + burstInterval / 1000;\n this.flashesDone = 0;\n this.isFlashing = false;\n }\n }, {\n key: \"burst\",\n value: function burst() {\n this.nextBurstTime = 0;\n this.flashesDone = 0;\n this.isFlashing = false;\n }\n }, {\n key: \"update\",\n value: function update(currentTime, delta) {\n if (currentTime > this.nextBurstTime && this.currentCount === 0) {\n this.currentCount = Math.floor(Math.random() * this.count) + 1;\n }\n\n if (this.flashesDone < this.currentCount && currentTime > this.nextBurstTime) {\n if (!this.isFlashing) {\n this.isFlashing = true;\n this.flashIntensity = 1;\n var flashDuration = Math.random() * (this.maxDuration - this.minDuration) + this.minDuration;\n this.nextFlashEndTime = currentTime + flashDuration / 1000;\n } else if (this.isFlashing && currentTime > this.nextFlashEndTime) {\n this.isFlashing = false;\n this.isDecaying = true;\n this.flashesDone++;\n\n if (this.flashesDone >= this.currentCount) {\n this.currentCount = 0;\n if (this.autoBurst) this.scheduleNextBurst(currentTime);\n }\n }\n }\n\n if (this.isDecaying) {\n this.flashIntensity -= delta * this.decaySpeed;\n this.flashIntensity = Math.max(0, Math.min(1, this.flashIntensity));\n\n if (this.flashIntensity <= 0) {\n this.isDecaying = false;\n this.flashIntensity = 0;\n }\n }\n\n return this.flashIntensity;\n }\n }]);\n\n return FlashGen;\n}(); // Credits @kchapelier https://github.com/kchapelier/wavefunctioncollapse/blob/master/example/lcg.js#L22-L30\n\nfunction normalizeSeed(seed) {\n if (typeof seed === \"number\") {\n seed = Math.abs(seed);\n } else if (typeof seed === \"string\") {\n var string = seed;\n seed = 0;\n\n for (var i = 0; i < string.length; i++) {\n seed = (seed + (i + 1) * (string.charCodeAt(i) % 96)) % 2147483647;\n }\n }\n\n if (seed === 0) {\n seed = 311;\n }\n\n return seed;\n}\n\nfunction lcgRandom(seed) {\n var state = normalizeSeed(seed);\n return function () {\n var result = state * 48271 % 2147483647;\n state = result;\n return result / 2147483647;\n };\n}\n\nvar Generator = function Generator(_seed) {\n var _this = this;\n\n _classCallCheck(this, Generator);\n\n _defineProperty(this, \"seed\", 0);\n\n _defineProperty(this, \"init\", function (seed) {\n _this.seed = seed;\n _this.value = lcgRandom(seed);\n });\n\n _defineProperty(this, \"value\", lcgRandom(this.seed));\n\n this.init(_seed);\n};\nvar defaultGen = new Generator(Math.random());\n/***\n * [3D] Sphere\n */\n\nvar defaultSphere = {\n radius: 1,\n center: [0, 0, 0]\n}; // random on surface of sphere\n// - https://twitter.com/fermatslibrary/status/1430932503578226688\n// - https://mathworld.wolfram.com/SpherePointPicking.html\n\nfunction onSphere(buffer, sphere) {\n var rng = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultGen;\n\n var _defaultSphere$sphere = _objectSpread2(_objectSpread2({}, defaultSphere), sphere),\n radius = _defaultSphere$sphere.radius,\n center = _defaultSphere$sphere.center;\n\n for (var i = 0; i < buffer.length; i += 3) {\n var u = rng.value();\n var v = rng.value();\n var theta = Math.acos(2 * v - 1);\n var phi = TAU * u;\n buffer[i] = Math.sin(theta) * Math.cos(phi) * radius + center[0];\n buffer[i + 1] = Math.sin(theta) * Math.sin(phi) * radius + center[1];\n buffer[i + 2] = Math.cos(theta) * radius + center[2];\n }\n\n return buffer;\n} // from \"Another Method\" https://datagenetics.com/blog/january32020/index.html\n\nfunction inSphere(buffer, sphere) {\n var rng = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultGen;\n\n var _defaultSphere$sphere2 = _objectSpread2(_objectSpread2({}, defaultSphere), sphere),\n radius = _defaultSphere$sphere2.radius,\n center = _defaultSphere$sphere2.center;\n\n for (var i = 0; i < buffer.length; i += 3) {\n var u = Math.pow(rng.value(), 1 / 3);\n var x = rng.value() * 2 - 1;\n var y = rng.value() * 2 - 1;\n var z = rng.value() * 2 - 1;\n var mag = Math.sqrt(x * x + y * y + z * z);\n x = u * x / mag;\n y = u * y / mag;\n z = u * z / mag;\n buffer[i] = x * radius + center[0];\n buffer[i + 1] = y * radius + center[1];\n buffer[i + 2] = z * radius + center[2];\n }\n\n return buffer;\n}\n/***\n * [2D] Circle\n */\n\nvar defaultCircle = {\n radius: 1,\n center: [0, 0]\n}; // random circle https://stackoverflow.com/a/50746409\n\nfunction inCircle(buffer, circle) {\n var rng = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultGen;\n\n var _defaultCircle$circle = _objectSpread2(_objectSpread2({}, defaultCircle), circle),\n radius = _defaultCircle$circle.radius,\n center = _defaultCircle$circle.center;\n\n for (var i = 0; i < buffer.length; i += 2) {\n var r = radius * Math.sqrt(rng.value());\n var theta = rng.value() * TAU;\n buffer[i] = Math.sin(theta) * r + center[0];\n buffer[i + 1] = Math.cos(theta) * r + center[1];\n }\n\n return buffer;\n}\nfunction onCircle(buffer, circle) {\n var rng = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultGen;\n\n var _defaultCircle$circle2 = _objectSpread2(_objectSpread2({}, defaultCircle), circle),\n radius = _defaultCircle$circle2.radius,\n center = _defaultCircle$circle2.center;\n\n for (var i = 0; i < buffer.length; i += 2) {\n var theta = rng.value() * TAU;\n buffer[i] = Math.sin(theta) * radius + center[0];\n buffer[i + 1] = Math.cos(theta) * radius + center[1];\n }\n\n return buffer;\n}\n/**\n * [2D] Plane\n */\n\nvar defaultRect = {\n sides: 1,\n center: [0, 0]\n};\nfunction inRect(buffer, rect) {\n var rng = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultGen;\n\n var _defaultRect$rect = _objectSpread2(_objectSpread2({}, defaultRect), rect),\n sides = _defaultRect$rect.sides,\n center = _defaultRect$rect.center;\n\n var sideX = typeof sides === \"number\" ? sides : sides[0];\n var sideY = typeof sides === \"number\" ? sides : sides[1];\n\n for (var i = 0; i < buffer.length; i += 2) {\n buffer[i] = (rng.value() - 0.5) * sideX + center[0];\n buffer[i + 1] = (rng.value() - 0.5) * sideY + center[1];\n }\n\n return buffer;\n}\nfunction onRect(buffer, rect) {\n return buffer;\n}\n/***\n * [3D] Box\n */\n\nfunction inBox(buffer, box) {\n var rng = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultGen;\n\n var _defaultBox$box = _objectSpread2(_objectSpread2({}, defaultBox), box),\n sides = _defaultBox$box.sides,\n center = _defaultBox$box.center;\n\n var sideX = typeof sides === \"number\" ? sides : sides[0];\n var sideY = typeof sides === \"number\" ? sides : sides[1];\n var sideZ = typeof sides === \"number\" ? sides : sides[2];\n\n for (var i = 0; i < buffer.length; i += 3) {\n buffer[i] = (rng.value() - 0.5) * sideX + center[0];\n buffer[i + 1] = (rng.value() - 0.5) * sideY + center[1];\n buffer[i + 2] = (rng.value() - 0.5) * sideZ + center[2];\n }\n\n return buffer;\n}\nvar defaultBox = {\n sides: 1,\n center: [0, 0, 0]\n};\nfunction onBox(buffer, box) {\n var rng = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : defaultGen;\n\n var _defaultBox$box2 = _objectSpread2(_objectSpread2({}, defaultBox), box),\n sides = _defaultBox$box2.sides,\n center = _defaultBox$box2.center;\n\n var sideX = typeof sides === \"number\" ? sides : sides[0];\n var sideY = typeof sides === \"number\" ? sides : sides[1];\n var sideZ = typeof sides === \"number\" ? sides : sides[2];\n\n for (var i = 0; i < buffer.length; i += 3) {\n buffer[i] = (rng.value() - 0.5) * sideX + center[0];\n buffer[i + 1] = (rng.value() - 0.5) * sideY + center[1];\n buffer[i + 2] = (rng.value() - 0.5) * sideZ + center[2];\n }\n\n return buffer;\n}\n\nvar index = /*#__PURE__*/Object.freeze({\n __proto__: null,\n FlashGen: FlashGen,\n Generator: Generator,\n onSphere: onSphere,\n inSphere: inSphere,\n inCircle: inCircle,\n onCircle: onCircle,\n inRect: inRect,\n onRect: onRect,\n inBox: inBox,\n onBox: onBox,\n noise: noise\n});\n\nexport { FlashGen as F, Generator as G, inSphere as a, inCircle as b, onCircle as c, inRect as d, onRect as e, inBox as f, onBox as g, index as i, noise as n, onSphere as o };\n","import { a as _toConsumableArray } from './triangle-b62b9067.esm.js';\nimport { Color, Vector3, Quaternion, Matrix4, Vector2, Vector4, Euler, Spherical } from 'three';\nimport { d as deltaAngle } from './misc-19a3ec46.esm.js';\n\nvar rsqw = function rsqw(t) {\n var delta = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0.01;\n var a = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n var f = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 1 / (2 * Math.PI);\n return a / Math.atan(1 / delta) * Math.atan(Math.sin(2 * Math.PI * t * f) / delta);\n};\nvar exp = function exp(t) {\n return 1 / (1 + t + 0.48 * t * t + 0.235 * t * t * t);\n};\nvar linear = function linear(t) {\n return t;\n};\nvar sine = {\n \"in\": function _in(x) {\n return 1 - Math.cos(x * Math.PI / 2);\n },\n out: function out(x) {\n return Math.sin(x * Math.PI / 2);\n },\n inOut: function inOut(x) {\n return -(Math.cos(Math.PI * x) - 1) / 2;\n }\n};\nvar cubic = {\n \"in\": function _in(x) {\n return x * x * x;\n },\n out: function out(x) {\n return 1 - Math.pow(1 - x, 3);\n },\n inOut: function inOut(x) {\n return x < 0.5 ? 4 * x * x * x : 1 - Math.pow(-2 * x + 2, 3) / 2;\n }\n};\nvar quint = {\n \"in\": function _in(x) {\n return x * x * x * x * x;\n },\n out: function out(x) {\n return 1 - Math.pow(1 - x, 5);\n },\n inOut: function inOut(x) {\n return x < 0.5 ? 16 * x * x * x * x * x : 1 - Math.pow(-2 * x + 2, 5) / 2;\n }\n};\nvar circ = {\n \"in\": function _in(x) {\n return 1 - Math.sqrt(1 - Math.pow(x, 2));\n },\n out: function out(x) {\n return Math.sqrt(1 - Math.pow(x - 1, 2));\n },\n inOut: function inOut(x) {\n return x < 0.5 ? (1 - Math.sqrt(1 - Math.pow(2 * x, 2))) / 2 : (Math.sqrt(1 - Math.pow(-2 * x + 2, 2)) + 1) / 2;\n }\n};\nvar quart = {\n \"in\": function _in(t) {\n return t * t * t * t;\n },\n out: function out(t) {\n return 1 - --t * t * t * t;\n },\n inOut: function inOut(t) {\n return t < 0.5 ? 8 * t * t * t * t : 1 - 8 * --t * t * t * t;\n }\n};\nvar expo = {\n \"in\": function _in(x) {\n return x === 0 ? 0 : Math.pow(2, 10 * x - 10);\n },\n out: function out(x) {\n return x === 1 ? 1 : 1 - Math.pow(2, -10 * x);\n },\n inOut: function inOut(x) {\n return x === 0 ? 0 : x === 1 ? 1 : x < 0.5 ? Math.pow(2, 20 * x - 10) / 2 : (2 - Math.pow(2, -20 * x + 10)) / 2;\n }\n};\n/**\n * Damp, based on Game Programming Gems 4 Chapter 1.10\n * Return value indicates whether the animation is still running.\n */\n\nfunction damp(\n/** The object */\ncurrent,\n/** The key to animate */\nprop,\n/** To goal value */\ntarget) {\n var smoothTime = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0.25;\n var delta = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0.01;\n var maxSpeed = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : Infinity;\n var easing = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : exp;\n var eps = arguments.length > 7 && arguments[7] !== undefined ? arguments[7] : 0.001;\n var vel = \"velocity_\" + prop;\n if (current.__damp === undefined) current.__damp = {};\n if (current.__damp[vel] === undefined) current.__damp[vel] = 0;\n\n if (Math.abs(current[prop] - target) <= eps) {\n current[prop] = target;\n return false;\n }\n\n smoothTime = Math.max(0.0001, smoothTime);\n var omega = 2 / smoothTime;\n var t = easing(omega * delta);\n var change = current[prop] - target;\n var originalTo = target; // Clamp maximum maxSpeed\n\n var maxChange = maxSpeed * smoothTime;\n change = Math.min(Math.max(change, -maxChange), maxChange);\n target = current[prop] - change;\n var temp = (current.__damp[vel] + omega * change) * delta;\n current.__damp[vel] = (current.__damp[vel] - omega * temp) * t;\n var output = target + (change + temp) * t; // Prevent overshooting\n\n if (originalTo - current[prop] > 0.0 === output > originalTo) {\n output = originalTo;\n current.__damp[vel] = (output - originalTo) / delta;\n }\n\n current[prop] = output;\n return true;\n}\n/**\n * DampLookAt\n */\n\nvar isCamera = function isCamera(v) {\n return v && v.isCamera;\n};\n\nvar isLight = function isLight(v) {\n return v && v.isLight;\n};\n\nvar vl3d = /*@__PURE__*/new Vector3();\n\nvar _q1 = /*@__PURE__*/new Quaternion();\n\nvar _q2 = /*@__PURE__*/new Quaternion();\n\nvar _m1 = /*@__PURE__*/new Matrix4();\n\nvar _position = /*@__PURE__*/new Vector3();\n\nfunction dampLookAt(current, target, smoothTime, delta, maxSpeed, easing, eps) {\n // This method does not support objects having non-uniformly-scaled parent(s)\n if (typeof target === \"number\") vl3d.setScalar(target);else if (Array.isArray(target)) vl3d.set(target[0], target[1], target[2]);else vl3d.copy(target);\n var parent = current.parent;\n current.updateWorldMatrix(true, false);\n\n _position.setFromMatrixPosition(current.matrixWorld);\n\n if (isCamera(current) || isLight(current)) _m1.lookAt(_position, vl3d, current.up);else _m1.lookAt(vl3d, _position, current.up);\n dampQ(current.quaternion, _q2.setFromRotationMatrix(_m1), smoothTime, delta, maxSpeed, easing, eps);\n\n if (parent) {\n _m1.extractRotation(parent.matrixWorld);\n\n _q1.setFromRotationMatrix(_m1);\n\n dampQ(current.quaternion, _q2.copy(current.quaternion).premultiply(_q1.invert()), smoothTime, delta, maxSpeed, easing, eps);\n }\n}\n/**\n * DampAngle, with a shortest-path\n */\n\nfunction dampAngle(current, prop, target, smoothTime, delta, maxSpeed, easing, eps) {\n return damp(current, prop, current[prop] + deltaAngle(current[prop], target), smoothTime, delta, maxSpeed, easing, eps);\n}\n/**\n * Vector2D Damp\n */\n\nvar v2d = /*@__PURE__*/new Vector2();\nvar a2, b2;\nfunction damp2(current, target, smoothTime, delta, maxSpeed, easing, eps) {\n if (typeof target === \"number\") v2d.setScalar(target);else if (Array.isArray(target)) v2d.set(target[0], target[1]);else v2d.copy(target);\n a2 = damp(current, \"x\", v2d.x, smoothTime, delta, maxSpeed, easing, eps);\n b2 = damp(current, \"y\", v2d.y, smoothTime, delta, maxSpeed, easing, eps);\n return a2 || b2;\n}\n/**\n * Vector3D Damp\n */\n\nvar v3d = /*@__PURE__*/new Vector3();\nvar a3, b3, c3;\nfunction damp3(current, target, smoothTime, delta, maxSpeed, easing, eps) {\n if (typeof target === \"number\") v3d.setScalar(target);else if (Array.isArray(target)) v3d.set(target[0], target[1], target[2]);else v3d.copy(target);\n a3 = damp(current, \"x\", v3d.x, smoothTime, delta, maxSpeed, easing, eps);\n b3 = damp(current, \"y\", v3d.y, smoothTime, delta, maxSpeed, easing, eps);\n c3 = damp(current, \"z\", v3d.z, smoothTime, delta, maxSpeed, easing, eps);\n return a3 || b3 || c3;\n}\n/**\n * Vector4D Damp\n */\n\nvar v4d = /*@__PURE__*/new Vector4();\nvar a4, b4, c4, d4;\nfunction damp4(current, target, smoothTime, delta, maxSpeed, easing, eps) {\n if (typeof target === \"number\") v4d.setScalar(target);else if (Array.isArray(target)) v4d.set(target[0], target[1], target[2], target[3]);else v4d.copy(target);\n a4 = damp(current, \"x\", v4d.x, smoothTime, delta, maxSpeed, easing, eps);\n b4 = damp(current, \"y\", v4d.y, smoothTime, delta, maxSpeed, easing, eps);\n c4 = damp(current, \"z\", v4d.z, smoothTime, delta, maxSpeed, easing, eps);\n d4 = damp(current, \"w\", v4d.w, smoothTime, delta, maxSpeed, easing, eps);\n return a4 || b4 || c4 || d4;\n}\n\n/**\n * Euler Damp\n */\nvar rot = /*@__PURE__*/new Euler();\nvar aE, bE, cE;\nfunction dampE(current, target, smoothTime, delta, maxSpeed, easing, eps) {\n if (Array.isArray(target)) rot.set(target[0], target[1], target[2], target[3]);else rot.copy(target);\n aE = dampAngle(current, \"x\", rot.x, smoothTime, delta, maxSpeed, easing, eps);\n bE = dampAngle(current, \"y\", rot.y, smoothTime, delta, maxSpeed, easing, eps);\n cE = dampAngle(current, \"z\", rot.z, smoothTime, delta, maxSpeed, easing, eps);\n return aE || bE || cE;\n}\n/**\n * Color Damp\n */\n\nvar col = /*@__PURE__*/new Color();\nvar aC, bC, cC;\nfunction dampC(current, target, smoothTime, delta, maxSpeed, easing, eps) {\n if (target instanceof Color) col.copy(target);else if (Array.isArray(target)) col.setRGB(target[0], target[1], target[2]);else col.set(target);\n aC = damp(current, \"r\", col.r, smoothTime, delta, maxSpeed, easing, eps);\n bC = damp(current, \"g\", col.g, smoothTime, delta, maxSpeed, easing, eps);\n cC = damp(current, \"b\", col.b, smoothTime, delta, maxSpeed, easing, eps);\n return aC || bC || cC;\n}\n/**\n * Quaternion Damp\n * https://gist.github.com/maxattack/4c7b4de00f5c1b95a33b\n * Copyright 2016 Max Kaufmann (max.kaufmann@gmail.com)\n * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the \"Software\"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:\n * The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\n */\n\nvar qt = /*@__PURE__*/new Quaternion();\nvar v4result = /*@__PURE__*/new Vector4();\nvar v4velocity = /*@__PURE__*/new Vector4();\nvar v4error = /*@__PURE__*/new Vector4();\nvar aQ, bQ, cQ, dQ;\nfunction dampQ(current, target, smoothTime, delta, maxSpeed, easing, eps) {\n var cur = current;\n if (Array.isArray(target)) qt.set(target[0], target[1], target[2], target[3]);else qt.copy(target);\n var multi = current.dot(qt) > 0 ? 1 : -1;\n qt.x *= multi;\n qt.y *= multi;\n qt.z *= multi;\n qt.w *= multi;\n aQ = damp(current, \"x\", qt.x, smoothTime, delta, maxSpeed, easing, eps);\n bQ = damp(current, \"y\", qt.y, smoothTime, delta, maxSpeed, easing, eps);\n cQ = damp(current, \"z\", qt.z, smoothTime, delta, maxSpeed, easing, eps);\n dQ = damp(current, \"w\", qt.w, smoothTime, delta, maxSpeed, easing, eps); // smooth damp (nlerp approx)\n\n v4result.set(current.x, current.y, current.z, current.w).normalize();\n v4velocity.set(cur.__damp.velocity_x, cur.__damp.velocity_y, cur.__damp.velocity_z, cur.__damp.velocity_w); // ensure deriv is tangent\n\n v4error.copy(v4result).multiplyScalar(v4velocity.dot(v4result) / v4result.dot(v4result));\n cur.__damp.velocity_x -= v4error.x;\n cur.__damp.velocity_y -= v4error.y;\n cur.__damp.velocity_z -= v4error.z;\n cur.__damp.velocity_w -= v4error.w;\n current.set(v4result.x, v4result.y, v4result.z, v4result.w);\n return aQ || bQ || cQ || dQ;\n}\n/**\n * Spherical Damp\n */\n\nvar spherical = /*@__PURE__*/new Spherical();\nvar aS, bS, cS;\nfunction dampS(current, target, smoothTime, delta, maxSpeed, easing, eps) {\n if (Array.isArray(target)) spherical.set(target[0], target[1], target[2]);else spherical.copy(target);\n aS = damp(current, \"radius\", spherical.radius, smoothTime, delta, maxSpeed, easing, eps);\n bS = dampAngle(current, \"phi\", spherical.phi, smoothTime, delta, maxSpeed, easing, eps);\n cS = dampAngle(current, \"theta\", spherical.theta, smoothTime, delta, maxSpeed, easing, eps);\n return aS || bS || cS;\n}\n/**\n * Matrix4 Damp\n */\n\nvar mat = /*@__PURE__*/new Matrix4();\nvar mPos = /*@__PURE__*/new Vector3();\nvar mRot = /*@__PURE__*/new Quaternion();\nvar mSca = /*@__PURE__*/new Vector3();\nvar aM, bM, cM;\nfunction dampM(current, target, smoothTime, delta, maxSpeed, easing, eps) {\n var cur = current;\n\n if (cur.__damp === undefined) {\n cur.__damp = {\n position: new Vector3(),\n rotation: new Quaternion(),\n scale: new Vector3()\n };\n current.decompose(cur.__damp.position, cur.__damp.rotation, cur.__damp.scale);\n }\n\n if (Array.isArray(target)) mat.set.apply(mat, _toConsumableArray(target));else mat.copy(target);\n mat.decompose(mPos, mRot, mSca);\n aM = damp3(cur.__damp.position, mPos, smoothTime, delta, maxSpeed, easing, eps);\n bM = dampQ(cur.__damp.rotation, mRot, smoothTime, delta, maxSpeed, easing, eps);\n cM = damp3(cur.__damp.scale, mSca, smoothTime, delta, maxSpeed, easing, eps);\n current.compose(cur.__damp.position, cur.__damp.rotation, cur.__damp.scale);\n return aM || bM || cM;\n}\n\nvar easing = /*#__PURE__*/Object.freeze({\n __proto__: null,\n rsqw: rsqw,\n exp: exp,\n linear: linear,\n sine: sine,\n cubic: cubic,\n quint: quint,\n circ: circ,\n quart: quart,\n expo: expo,\n damp: damp,\n dampLookAt: dampLookAt,\n dampAngle: dampAngle,\n damp2: damp2,\n damp3: damp3,\n damp4: damp4,\n dampE: dampE,\n dampC: dampC,\n dampQ: dampQ,\n dampS: dampS,\n dampM: dampM\n});\n\nexport { exp as a, circ as b, cubic as c, quart as d, easing as e, expo as f, damp as g, dampLookAt as h, dampAngle as i, damp2 as j, damp3 as k, linear as l, damp4 as m, dampE as n, dampC as o, dampQ as p, quint as q, rsqw as r, sine as s, dampS as t, dampM as u };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as ReactDOM from 'react-dom/client';\nimport { useThree, useFrame, context as context$1 } from '@react-three/fiber';\nimport { easing } from 'maath';\n\nconst context = /* @__PURE__ */React.createContext(null);\nfunction useScroll() {\n return React.useContext(context);\n}\nfunction ScrollControls({\n eps = 0.00001,\n enabled = true,\n infinite,\n horizontal,\n pages = 1,\n distance = 1,\n damping = 0.25,\n maxSpeed = Infinity,\n prepend = false,\n style = {},\n children\n}) {\n const {\n get,\n setEvents,\n gl,\n size,\n invalidate,\n events\n } = useThree();\n const [el] = React.useState(() => document.createElement('div'));\n const [fill] = React.useState(() => document.createElement('div'));\n const [fixed] = React.useState(() => document.createElement('div'));\n const target = gl.domElement.parentNode;\n const scroll = React.useRef(0);\n const state = React.useMemo(() => {\n const state = {\n el,\n eps,\n fill,\n fixed,\n horizontal,\n damping,\n offset: 0,\n delta: 0,\n scroll,\n pages,\n // 0-1 for a range between from -> from + distance\n range(from, distance, margin = 0) {\n const start = from - margin;\n const end = start + distance + margin * 2;\n return this.offset < start ? 0 : this.offset > end ? 1 : (this.offset - start) / (end - start);\n },\n // 0-1-0 for a range between from -> from + distance\n curve(from, distance, margin = 0) {\n return Math.sin(this.range(from, distance, margin) * Math.PI);\n },\n // true/false for a range between from -> from + distance\n visible(from, distance, margin = 0) {\n const start = from - margin;\n const end = start + distance + margin * 2;\n return this.offset >= start && this.offset <= end;\n }\n };\n return state;\n }, [eps, damping, horizontal, pages]);\n React.useEffect(() => {\n el.style.position = 'absolute';\n el.style.width = '100%';\n el.style.height = '100%';\n el.style[horizontal ? 'overflowX' : 'overflowY'] = 'auto';\n el.style[horizontal ? 'overflowY' : 'overflowX'] = 'hidden';\n el.style.top = '0px';\n el.style.left = '0px';\n for (const key in style) {\n el.style[key] = style[key];\n }\n fixed.style.position = 'sticky';\n fixed.style.top = '0px';\n fixed.style.left = '0px';\n fixed.style.width = '100%';\n fixed.style.height = '100%';\n fixed.style.overflow = 'hidden';\n el.appendChild(fixed);\n fill.style.height = horizontal ? '100%' : `${pages * distance * 100}%`;\n fill.style.width = horizontal ? `${pages * distance * 100}%` : '100%';\n fill.style.pointerEvents = 'none';\n el.appendChild(fill);\n if (prepend) target.prepend(el);else target.appendChild(el);\n\n // Init scroll one pixel in to allow upward/leftward scroll\n el[horizontal ? 'scrollLeft' : 'scrollTop'] = 1;\n const oldTarget = events.connected || gl.domElement;\n requestAnimationFrame(() => events.connect == null ? void 0 : events.connect(el));\n const oldCompute = get().events.compute;\n setEvents({\n compute(event, state) {\n // we are using boundingClientRect because we could not rely on target.offsetTop as canvas could be positioned anywhere in dom\n const {\n left,\n top\n } = target.getBoundingClientRect();\n const offsetX = event.clientX - left;\n const offsetY = event.clientY - top;\n state.pointer.set(offsetX / state.size.width * 2 - 1, -(offsetY / state.size.height) * 2 + 1);\n state.raycaster.setFromCamera(state.pointer, state.camera);\n }\n });\n return () => {\n target.removeChild(el);\n setEvents({\n compute: oldCompute\n });\n events.connect == null || events.connect(oldTarget);\n };\n }, [pages, distance, horizontal, el, fill, fixed, target]);\n React.useEffect(() => {\n if (events.connected === el) {\n const containerLength = size[horizontal ? 'width' : 'height'];\n const scrollLength = el[horizontal ? 'scrollWidth' : 'scrollHeight'];\n const scrollThreshold = scrollLength - containerLength;\n let current = 0;\n let disableScroll = true;\n let firstRun = true;\n const onScroll = () => {\n // Prevent first scroll because it is indirectly caused by the one pixel offset\n if (!enabled || firstRun) return;\n invalidate();\n current = el[horizontal ? 'scrollLeft' : 'scrollTop'];\n scroll.current = current / scrollThreshold;\n if (infinite) {\n if (!disableScroll) {\n if (current >= scrollThreshold) {\n const damp = 1 - state.offset;\n el[horizontal ? 'scrollLeft' : 'scrollTop'] = 1;\n scroll.current = state.offset = -damp;\n disableScroll = true;\n } else if (current <= 0) {\n const damp = 1 + state.offset;\n el[horizontal ? 'scrollLeft' : 'scrollTop'] = scrollLength;\n scroll.current = state.offset = damp;\n disableScroll = true;\n }\n }\n if (disableScroll) setTimeout(() => disableScroll = false, 40);\n }\n };\n el.addEventListener('scroll', onScroll, {\n passive: true\n });\n requestAnimationFrame(() => firstRun = false);\n const onWheel = e => el.scrollLeft += e.deltaY / 2;\n if (horizontal) el.addEventListener('wheel', onWheel, {\n passive: true\n });\n return () => {\n el.removeEventListener('scroll', onScroll);\n if (horizontal) el.removeEventListener('wheel', onWheel);\n };\n }\n }, [el, events, size, infinite, state, invalidate, horizontal, enabled]);\n let last = 0;\n useFrame((_, delta) => {\n last = state.offset;\n easing.damp(state, 'offset', scroll.current, damping, delta, maxSpeed, undefined, eps);\n easing.damp(state, 'delta', Math.abs(last - state.offset), damping, delta, maxSpeed, undefined, eps);\n if (state.delta > eps) invalidate();\n });\n return /*#__PURE__*/React.createElement(context.Provider, {\n value: state\n }, children);\n}\nconst ScrollCanvas = /* @__PURE__ */React.forwardRef(({\n children\n}, ref) => {\n const group = React.useRef(null);\n React.useImperativeHandle(ref, () => group.current, []);\n const state = useScroll();\n const {\n width,\n height\n } = useThree(state => state.viewport);\n useFrame(() => {\n group.current.position.x = state.horizontal ? -width * (state.pages - 1) * state.offset : 0;\n group.current.position.y = state.horizontal ? 0 : height * (state.pages - 1) * state.offset;\n });\n return /*#__PURE__*/React.createElement(\"group\", {\n ref: group\n }, children);\n});\nconst ScrollHtml = /*#__PURE__*/React.forwardRef(({\n children,\n style,\n ...props\n}, ref) => {\n const state = useScroll();\n const group = React.useRef(null);\n React.useImperativeHandle(ref, () => group.current, []);\n const {\n width,\n height\n } = useThree(state => state.size);\n const fiberState = React.useContext(context$1);\n const root = React.useMemo(() => ReactDOM.createRoot(state.fixed), [state.fixed]);\n useFrame(() => {\n if (state.delta > state.eps) {\n group.current.style.transform = `translate3d(${state.horizontal ? -width * (state.pages - 1) * state.offset : 0}px,${state.horizontal ? 0 : height * (state.pages - 1) * -state.offset}px,0)`;\n }\n });\n root.render(/*#__PURE__*/React.createElement(\"div\", _extends({\n ref: group,\n style: {\n ...style,\n position: 'absolute',\n top: 0,\n left: 0,\n willChange: 'transform'\n }\n }, props), /*#__PURE__*/React.createElement(context.Provider, {\n value: state\n }, /*#__PURE__*/React.createElement(context$1.Provider, {\n value: fiberState\n }, children))));\n return null;\n});\nconst Scroll = /* @__PURE__ */React.forwardRef(({\n html,\n ...props\n}, ref) => {\n const El = html ? ScrollHtml : ScrollCanvas;\n return /*#__PURE__*/React.createElement(El, _extends({\n ref: ref\n }, props));\n});\n\nexport { Scroll, ScrollControls, useScroll };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { MathUtils } from 'three';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { useGesture } from '@use-gesture/react';\nimport { easing } from 'maath';\n\nfunction PresentationControls({\n enabled = true,\n snap,\n global,\n domElement,\n cursor = true,\n children,\n speed = 1,\n rotation = [0, 0, 0],\n zoom = 1,\n polar = [0, Math.PI / 2],\n azimuth = [-Infinity, Infinity],\n damping = 0.25\n}) {\n const events = useThree(state => state.events);\n const gl = useThree(state => state.gl);\n const explDomElement = domElement || events.connected || gl.domElement;\n const {\n size\n } = useThree();\n const rPolar = React.useMemo(() => [rotation[0] + polar[0], rotation[0] + polar[1]], [rotation[0], polar[0], polar[1]]);\n const rAzimuth = React.useMemo(() => [rotation[1] + azimuth[0], rotation[1] + azimuth[1]], [rotation[1], azimuth[0], azimuth[1]]);\n const rInitial = React.useMemo(() => [MathUtils.clamp(rotation[0], ...rPolar), MathUtils.clamp(rotation[1], ...rAzimuth), rotation[2]], [rotation[0], rotation[1], rotation[2], rPolar, rAzimuth]);\n React.useEffect(() => {\n if (global && cursor && enabled) {\n explDomElement.style.cursor = 'grab';\n gl.domElement.style.cursor = '';\n return () => {\n explDomElement.style.cursor = 'default';\n gl.domElement.style.cursor = 'default';\n };\n }\n }, [global, cursor, explDomElement, enabled]);\n const [animation] = React.useState({\n scale: 1,\n rotation: rInitial,\n damping\n });\n const ref = React.useRef(null);\n useFrame((state, delta) => {\n easing.damp3(ref.current.scale, animation.scale, animation.damping, delta);\n easing.dampE(ref.current.rotation, animation.rotation, animation.damping, delta);\n });\n const bind = useGesture({\n onHover: ({\n last\n }) => {\n if (cursor && !global && enabled) explDomElement.style.cursor = last ? 'auto' : 'grab';\n },\n onDrag: ({\n down,\n delta: [x, y],\n memo: [oldY, oldX] = animation.rotation || rInitial\n }) => {\n if (!enabled) return [y, x];\n if (cursor) explDomElement.style.cursor = down ? 'grabbing' : 'grab';\n x = MathUtils.clamp(oldX + x / size.width * Math.PI * speed, ...rAzimuth);\n y = MathUtils.clamp(oldY + y / size.height * Math.PI * speed, ...rPolar);\n animation.scale = down && y > rPolar[1] / 2 ? zoom : 1;\n animation.rotation = snap && !down ? rInitial : [y, x, 0];\n animation.damping = snap && !down && typeof snap !== 'boolean' ? snap : damping;\n return [y, x];\n }\n }, {\n target: global ? explDomElement : undefined\n });\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref\n }, bind == null ? void 0 : bind()), children);\n}\n\nexport { PresentationControls };\n","const reduxImpl = (reducer, initial) => (set, _get, api) => {\n api.dispatch = (action) => {\n set((state) => reducer(state, action), false, action);\n return action;\n };\n api.dispatchFromDevtools = true;\n return { dispatch: (...args) => api.dispatch(...args), ...initial };\n};\nconst redux = reduxImpl;\n\nconst shouldDispatchFromDevtools = (api) => !!api.dispatchFromDevtools && typeof api.dispatch === \"function\";\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name) => {\n const api = trackedConnections.get(name);\n if (!api) return {};\n return Object.fromEntries(\n Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()])\n );\n};\nconst extractConnectionInformation = (store, extensionConnector, options) => {\n if (store === void 0) {\n return {\n type: \"untracked\",\n connection: extensionConnector.connect(options)\n };\n }\n const existingConnection = trackedConnections.get(options.name);\n if (existingConnection) {\n return { type: \"tracked\", store, ...existingConnection };\n }\n const newConnection = {\n connection: extensionConnector.connect(options),\n stores: {}\n };\n trackedConnections.set(options.name, newConnection);\n return { type: \"tracked\", store, ...newConnection };\n};\nconst removeStoreFromTrackedConnections = (name, store) => {\n if (store === void 0) return;\n const connectionInfo = trackedConnections.get(name);\n if (!connectionInfo) return;\n delete connectionInfo.stores[store];\n if (Object.keys(connectionInfo.stores).length === 0) {\n trackedConnections.delete(name);\n }\n};\nconst v8StackLineRe = /.+ (.+) .+/;\nconst geckoStackLineRe = /^([^@]+)@/;\nfunction findCallerName(stack) {\n var _a, _b, _c;\n if (!stack) return void 0;\n const traceLines = stack.split(\"\\n\");\n const apiSetStateLineIndex = traceLines.findIndex(\n (traceLine) => traceLine.includes(\"api.setState\")\n );\n if (apiSetStateLineIndex < 0) return void 0;\n const callerLine = ((_a = traceLines[apiSetStateLineIndex + 1]) == null ? void 0 : _a.trim()) || \"\";\n return ((_b = v8StackLineRe.exec(callerLine)) == null ? void 0 : _b[1]) || ((_c = geckoStackLineRe.exec(callerLine)) == null ? void 0 : _c[1]);\n}\nconst devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => {\n const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;\n let extensionConnector;\n try {\n extensionConnector = (enabled != null ? enabled : (import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n } catch (e) {\n }\n if (!extensionConnector) {\n return fn(set, get, api);\n }\n const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);\n let isRecording = true;\n api.setState = ((state, replace, nameOrAction) => {\n const r = set(state, replace);\n if (!isRecording) return r;\n const action = nameOrAction === void 0 ? {\n type: anonymousActionType || findCallerName(new Error().stack) || \"anonymous\"\n } : typeof nameOrAction === \"string\" ? { type: nameOrAction } : nameOrAction;\n if (store === void 0) {\n connection == null ? void 0 : connection.send(action, get());\n return r;\n }\n connection == null ? void 0 : connection.send(\n {\n ...action,\n type: `${store}/${action.type}`\n },\n {\n ...getTrackedConnectionState(options.name),\n [store]: api.getState()\n }\n );\n return r;\n });\n api.devtools = {\n cleanup: () => {\n if (connection && typeof connection.unsubscribe === \"function\") {\n connection.unsubscribe();\n }\n removeStoreFromTrackedConnections(options.name, store);\n }\n };\n const setStateFromDevtools = (...a) => {\n const originalIsRecording = isRecording;\n isRecording = false;\n set(...a);\n isRecording = originalIsRecording;\n };\n const initialState = fn(api.setState, get, api);\n if (connectionInformation.type === \"untracked\") {\n connection == null ? void 0 : connection.init(initialState);\n } else {\n connectionInformation.stores[connectionInformation.store] = api;\n connection == null ? void 0 : connection.init(\n Object.fromEntries(\n Object.entries(connectionInformation.stores).map(([key, store2]) => [\n key,\n key === connectionInformation.store ? initialState : store2.getState()\n ])\n )\n );\n }\n if (shouldDispatchFromDevtools(api)) {\n let didWarnAboutReservedActionType = false;\n const originalDispatch = api.dispatch;\n api.dispatch = (...args) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && args[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n console.warn(\n '[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.'\n );\n didWarnAboutReservedActionType = true;\n }\n originalDispatch(...args);\n };\n }\n connection.subscribe((message) => {\n var _a;\n switch (message.type) {\n case \"ACTION\":\n if (typeof message.payload !== \"string\") {\n console.error(\n \"[zustand devtools middleware] Unsupported action format\"\n );\n return;\n }\n return parseJsonThen(\n message.payload,\n (action) => {\n if (action.type === \"__setState\") {\n if (store === void 0) {\n setStateFromDevtools(action.state);\n return;\n }\n if (Object.keys(action.state).length !== 1) {\n console.error(\n `\n [zustand devtools middleware] Unsupported __setState action format.\n When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),\n and value of this only key should be a state object. Example: { \"type\": \"__setState\", \"state\": { \"abc123Store\": { \"foo\": \"bar\" } } }\n `\n );\n }\n const stateFromDevtools = action.state[store];\n if (stateFromDevtools === void 0 || stateFromDevtools === null) {\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {\n setStateFromDevtools(stateFromDevtools);\n }\n return;\n }\n if (shouldDispatchFromDevtools(api)) {\n api.dispatch(action);\n }\n }\n );\n case \"DISPATCH\":\n switch (message.payload.type) {\n case \"RESET\":\n setStateFromDevtools(initialState);\n if (store === void 0) {\n return connection == null ? void 0 : connection.init(api.getState());\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"COMMIT\":\n if (store === void 0) {\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"ROLLBACK\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n setStateFromDevtools(state[store]);\n connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n });\n case \"JUMP_TO_STATE\":\n case \"JUMP_TO_ACTION\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {\n setStateFromDevtools(state[store]);\n }\n });\n case \"IMPORT_STATE\": {\n const { nextLiftedState } = message.payload;\n const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;\n if (!lastComputedState) return;\n if (store === void 0) {\n setStateFromDevtools(lastComputedState);\n } else {\n setStateFromDevtools(lastComputedState[store]);\n }\n connection == null ? void 0 : connection.send(\n null,\n // FIXME no-any\n nextLiftedState\n );\n return;\n }\n case \"PAUSE_RECORDING\":\n return isRecording = !isRecording;\n }\n return;\n }\n });\n return initialState;\n};\nconst devtools = devtoolsImpl;\nconst parseJsonThen = (stringified, fn) => {\n let parsed;\n try {\n parsed = JSON.parse(stringified);\n } catch (e) {\n console.error(\n \"[zustand devtools middleware] Could not parse the received json\",\n e\n );\n }\n if (parsed !== void 0) fn(parsed);\n};\n\nconst subscribeWithSelectorImpl = (fn) => (set, get, api) => {\n const origSubscribe = api.subscribe;\n api.subscribe = ((selector, optListener, options) => {\n let listener = selector;\n if (optListener) {\n const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;\n let currentSlice = selector(api.getState());\n listener = (state) => {\n const nextSlice = selector(state);\n if (!equalityFn(currentSlice, nextSlice)) {\n const previousSlice = currentSlice;\n optListener(currentSlice = nextSlice, previousSlice);\n }\n };\n if (options == null ? void 0 : options.fireImmediately) {\n optListener(currentSlice, currentSlice);\n }\n }\n return origSubscribe(listener);\n });\n const initialState = fn(set, get, api);\n return initialState;\n};\nconst subscribeWithSelector = subscribeWithSelectorImpl;\n\nfunction combine(initialState, create) {\n return (...args) => Object.assign({}, initialState, create(...args));\n}\n\nfunction createJSONStorage(getStorage, options) {\n let storage;\n try {\n storage = getStorage();\n } catch (e) {\n return;\n }\n const persistStorage = {\n getItem: (name) => {\n var _a;\n const parse = (str2) => {\n if (str2 === null) {\n return null;\n }\n return JSON.parse(str2, options == null ? void 0 : options.reviver);\n };\n const str = (_a = storage.getItem(name)) != null ? _a : null;\n if (str instanceof Promise) {\n return str.then(parse);\n }\n return parse(str);\n },\n setItem: (name, newValue) => storage.setItem(name, JSON.stringify(newValue, options == null ? void 0 : options.replacer)),\n removeItem: (name) => storage.removeItem(name)\n };\n return persistStorage;\n}\nconst toThenable = (fn) => (input) => {\n try {\n const result = fn(input);\n if (result instanceof Promise) {\n return result;\n }\n return {\n then(onFulfilled) {\n return toThenable(onFulfilled)(result);\n },\n catch(_onRejected) {\n return this;\n }\n };\n } catch (e) {\n return {\n then(_onFulfilled) {\n return this;\n },\n catch(onRejected) {\n return toThenable(onRejected)(e);\n }\n };\n }\n};\nconst persistImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n storage: createJSONStorage(() => window.localStorage),\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n let hydrationVersion = 0;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage = options.storage;\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const setItem = () => {\n const state = options.partialize({ ...get() });\n return storage.setItem(options.name, {\n state,\n version: options.version\n });\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n return setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n return setItem();\n },\n get,\n api\n );\n api.getInitialState = () => configResult;\n let stateFromStorage;\n const hydrate = () => {\n var _a, _b;\n if (!storage) return;\n const currentVersion = ++hydrationVersion;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => {\n var _a2;\n return cb((_a2 = get()) != null ? _a2 : configResult);\n });\n const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n const migration = options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n );\n if (migration instanceof Promise) {\n return migration.then((result) => [true, result]);\n }\n return [true, migration];\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return [false, deserializedStorageValue.state];\n }\n }\n return [false, void 0];\n }).then((migrationResult) => {\n var _a2;\n if (currentVersion !== hydrationVersion) {\n return;\n }\n const [migrated, migratedState] = migrationResult;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n if (migrated) {\n return setItem();\n }\n }).then(() => {\n if (currentVersion !== hydrationVersion) {\n return;\n }\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(get(), void 0);\n stateFromStorage = get();\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n if (currentVersion !== hydrationVersion) {\n return;\n }\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.storage) {\n storage = newOptions.storage;\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n if (!options.skipHydration) {\n hydrate();\n }\n return stateFromStorage || configResult;\n};\nconst persist = persistImpl;\n\nfunction ssrSafe(config, isSSR = typeof window === \"undefined\") {\n return (set, get, api) => {\n if (!isSSR) {\n return config(set, get, api);\n }\n const ssrSet = () => {\n throw new Error(\"Cannot set state of Zustand store in SSR\");\n };\n api.setState = ssrSet;\n return config(ssrSet, get, api);\n };\n}\n\nexport { combine, createJSONStorage, devtools, persist, redux, subscribeWithSelector, ssrSafe as unstable_ssrSafe };\n","import * as React from 'react';\nimport { create } from 'zustand';\nimport { subscribeWithSelector } from 'zustand/middleware';\n\n// These are removed in Zustand v4\n// unknown\n\n// Zustand v3 marked deprecations in 3.x, but there's no visible upgrade path\n\nconst context = /* @__PURE__ */React.createContext(null);\nfunction KeyboardControls({\n map,\n children,\n onChange,\n domElement\n}) {\n const key = map.map(item => item.name + item.keys).join('-');\n const useControls = React.useMemo(() => {\n return create(subscribeWithSelector(() => map.reduce((prev, cur) => ({\n ...prev,\n [cur.name]: false\n }), {})));\n }, [key]);\n const api = React.useMemo(() => [useControls.subscribe, useControls.getState, useControls], [key]);\n const set = useControls.setState;\n React.useEffect(() => {\n const config = map.map(({\n name,\n keys,\n up\n }) => ({\n keys,\n up,\n fn: value => {\n // Set zustand state\n set({\n [name]: value\n });\n // Inform callback\n if (onChange) onChange(name, value, api[1]());\n }\n }));\n const keyMap = config.reduce((out, {\n keys,\n fn,\n up = true\n }) => {\n keys.forEach(key => out[key] = {\n fn,\n pressed: false,\n up\n });\n return out;\n }, {});\n const downHandler = ({\n key,\n code\n }) => {\n const obj = keyMap[key] || keyMap[code];\n if (!obj) return;\n const {\n fn,\n pressed,\n up\n } = obj;\n obj.pressed = true;\n if (up || !pressed) fn(true);\n };\n const upHandler = ({\n key,\n code\n }) => {\n const obj = keyMap[key] || keyMap[code];\n if (!obj) return;\n const {\n fn,\n up\n } = obj;\n obj.pressed = false;\n if (up) fn(false);\n };\n const source = domElement || window;\n source.addEventListener('keydown', downHandler, {\n passive: true\n });\n source.addEventListener('keyup', upHandler, {\n passive: true\n });\n return () => {\n source.removeEventListener('keydown', downHandler);\n source.removeEventListener('keyup', upHandler);\n };\n }, [domElement, key]);\n return /*#__PURE__*/React.createElement(context.Provider, {\n value: api,\n children: children\n });\n}\nfunction useKeyboardControls(sel) {\n const [sub, get, store] = React.useContext(context);\n if (sel) return store(sel);else return [sub, get];\n}\n\nexport { KeyboardControls, useKeyboardControls };\n","import { REVISION } from \"three\";\nconst version = /* @__PURE__ */ (() => parseInt(REVISION.replace(/\\D+/g, \"\")))();\nexport {\n version\n};\n//# sourceMappingURL=constants.js.map\n","import { version } from \"./constants.js\";\nconst UV1 = version >= 125 ? \"uv1\" : \"uv2\";\nexport {\n UV1\n};\n//# sourceMappingURL=uv1.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { DataTexture, RGBAFormat, FloatType, RepeatWrapping, NearestFilter, Mesh, InstancedMesh, DynamicDrawUsage, Matrix4 } from \"three\";\nconst CHANNELS = 4;\nconst TEXTURE_WIDTH = 1024;\nconst TEXTURE_HEIGHT = 4;\nconst initSplineTexture = (numberOfCurves = 1) => {\n const dataArray = new Float32Array(TEXTURE_WIDTH * TEXTURE_HEIGHT * numberOfCurves * CHANNELS);\n const dataTexture = new DataTexture(dataArray, TEXTURE_WIDTH, TEXTURE_HEIGHT * numberOfCurves, RGBAFormat, FloatType);\n dataTexture.wrapS = RepeatWrapping;\n dataTexture.wrapT = RepeatWrapping;\n dataTexture.magFilter = NearestFilter;\n dataTexture.needsUpdate = true;\n return dataTexture;\n};\nconst updateSplineTexture = (texture, splineCurve, offset = 0) => {\n const numberOfPoints = Math.floor(TEXTURE_WIDTH * (TEXTURE_HEIGHT / 4));\n splineCurve.arcLengthDivisions = numberOfPoints / 2;\n splineCurve.updateArcLengths();\n const points = splineCurve.getSpacedPoints(numberOfPoints);\n const frenetFrames = splineCurve.computeFrenetFrames(numberOfPoints, true);\n for (let i = 0; i < numberOfPoints; i++) {\n const rowOffset = Math.floor(i / TEXTURE_WIDTH);\n const rowIndex = i % TEXTURE_WIDTH;\n let pt = points[i];\n setTextureValue(texture, rowIndex, pt.x, pt.y, pt.z, 0 + rowOffset + TEXTURE_HEIGHT * offset);\n pt = frenetFrames.tangents[i];\n setTextureValue(texture, rowIndex, pt.x, pt.y, pt.z, 1 + rowOffset + TEXTURE_HEIGHT * offset);\n pt = frenetFrames.normals[i];\n setTextureValue(texture, rowIndex, pt.x, pt.y, pt.z, 2 + rowOffset + TEXTURE_HEIGHT * offset);\n pt = frenetFrames.binormals[i];\n setTextureValue(texture, rowIndex, pt.x, pt.y, pt.z, 3 + rowOffset + TEXTURE_HEIGHT * offset);\n }\n texture.needsUpdate = true;\n};\nconst setTextureValue = (texture, index, x, y, z, o) => {\n const image = texture.image;\n const { data } = image;\n const i = CHANNELS * TEXTURE_WIDTH * o;\n data[index * CHANNELS + i + 0] = x;\n data[index * CHANNELS + i + 1] = y;\n data[index * CHANNELS + i + 2] = z;\n data[index * CHANNELS + i + 3] = 1;\n};\nconst getUniforms = (splineTexture) => ({\n spineTexture: { value: splineTexture },\n pathOffset: { type: \"f\", value: 0 },\n // time of path curve\n pathSegment: { type: \"f\", value: 1 },\n // fractional length of path\n spineOffset: { type: \"f\", value: 161 },\n spineLength: { type: \"f\", value: 400 },\n flow: { type: \"i\", value: 1 }\n});\nfunction modifyShader(material, uniforms, numberOfCurves = 1) {\n if (material.__ok)\n return;\n material.__ok = true;\n material.onBeforeCompile = (shader) => {\n if (shader.__modified)\n return;\n shader.__modified = true;\n Object.assign(shader.uniforms, uniforms);\n const vertexShader = (\n /* glsl */\n `\n\t\tuniform sampler2D spineTexture;\n\t\tuniform float pathOffset;\n\t\tuniform float pathSegment;\n\t\tuniform float spineOffset;\n\t\tuniform float spineLength;\n\t\tuniform int flow;\n\n\t\tfloat textureLayers = ${TEXTURE_HEIGHT * numberOfCurves}.;\n\t\tfloat textureStacks = ${TEXTURE_HEIGHT / 4}.;\n\n\t\t${shader.vertexShader}\n\t\t`.replace(\"#include <beginnormal_vertex>\", \"\").replace(\"#include <defaultnormal_vertex>\", \"\").replace(\"#include <begin_vertex>\", \"\").replace(\n /void\\s*main\\s*\\(\\)\\s*\\{/,\n /* glsl */\n `\n void main() {\n #include <beginnormal_vertex>\n\n vec4 worldPos = modelMatrix * vec4(position, 1.);\n\n bool bend = flow > 0;\n float xWeight = bend ? 0. : 1.;\n\n #ifdef USE_INSTANCING\n float pathOffsetFromInstanceMatrix = instanceMatrix[3][2];\n float spineLengthFromInstanceMatrix = instanceMatrix[3][0];\n float spinePortion = bend ? (worldPos.x + spineOffset) / spineLengthFromInstanceMatrix : 0.;\n float mt = (spinePortion * pathSegment + pathOffset + pathOffsetFromInstanceMatrix)*textureStacks;\n #else\n float spinePortion = bend ? (worldPos.x + spineOffset) / spineLength : 0.;\n float mt = (spinePortion * pathSegment + pathOffset)*textureStacks;\n #endif\n\n mt = mod(mt, textureStacks);\n float rowOffset = floor(mt);\n\n #ifdef USE_INSTANCING\n rowOffset += instanceMatrix[3][1] * ${TEXTURE_HEIGHT}.;\n #endif\n\n vec3 spinePos = texture2D(spineTexture, vec2(mt, (0. + rowOffset + 0.5) / textureLayers)).xyz;\n vec3 a = texture2D(spineTexture, vec2(mt, (1. + rowOffset + 0.5) / textureLayers)).xyz;\n vec3 b = texture2D(spineTexture, vec2(mt, (2. + rowOffset + 0.5) / textureLayers)).xyz;\n vec3 c = texture2D(spineTexture, vec2(mt, (3. + rowOffset + 0.5) / textureLayers)).xyz;\n mat3 basis = mat3(a, b, c);\n\n vec3 transformed = basis\n * vec3(worldPos.x * xWeight, worldPos.y * 1., worldPos.z * 1.)\n + spinePos;\n\n vec3 transformedNormal = normalMatrix * (basis * objectNormal);\n\t\t\t`\n ).replace(\n \"#include <project_vertex>\",\n /* glsl */\n `vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n\t\t\t\tgl_Position = projectionMatrix * mvPosition;`\n )\n );\n shader.vertexShader = vertexShader;\n };\n}\nclass Flow {\n /**\n * @param {Mesh} mesh The mesh to clone and modify to bend around the curve\n * @param {number} numberOfCurves The amount of space that should preallocated for additional curves\n */\n constructor(mesh, numberOfCurves = 1) {\n __publicField(this, \"curveArray\");\n __publicField(this, \"curveLengthArray\");\n __publicField(this, \"object3D\");\n __publicField(this, \"splineTexure\");\n __publicField(this, \"uniforms\");\n const obj3D = mesh.clone();\n const splineTexure = initSplineTexture(numberOfCurves);\n const uniforms = getUniforms(splineTexure);\n obj3D.traverse((child) => {\n if (child instanceof Mesh || child instanceof InstancedMesh) {\n child.material = child.material.clone();\n modifyShader(child.material, uniforms, numberOfCurves);\n }\n });\n this.curveArray = new Array(numberOfCurves);\n this.curveLengthArray = new Array(numberOfCurves);\n this.object3D = obj3D;\n this.splineTexure = splineTexure;\n this.uniforms = uniforms;\n }\n updateCurve(index, curve) {\n if (index >= this.curveArray.length)\n throw Error(\"Index out of range for Flow\");\n const curveLength = curve.getLength();\n this.uniforms.spineLength.value = curveLength;\n this.curveLengthArray[index] = curveLength;\n this.curveArray[index] = curve;\n updateSplineTexture(this.splineTexure, curve, index);\n }\n moveAlongCurve(amount) {\n this.uniforms.pathOffset.value += amount;\n }\n}\nconst matrix = /* @__PURE__ */ new Matrix4();\nclass InstancedFlow extends Flow {\n /**\n *\n * @param {number} count The number of instanced elements\n * @param {number} curveCount The number of curves to preallocate for\n * @param {Geometry} geometry The geometry to use for the instanced mesh\n * @param {Material} material The material to use for the instanced mesh\n */\n constructor(count, curveCount, geometry, material) {\n const mesh = new InstancedMesh(geometry, material, count);\n mesh.instanceMatrix.setUsage(DynamicDrawUsage);\n mesh.frustumCulled = false;\n super(mesh, curveCount);\n __publicField(this, \"offsets\");\n __publicField(this, \"whichCurve\");\n this.offsets = new Array(count).fill(0);\n this.whichCurve = new Array(count).fill(0);\n }\n /**\n * The extra information about which curve and curve position is stored in the translation components of the matrix for the instanced objects\n * This writes that information to the matrix and marks it as needing update.\n *\n * @param {number} index of the instanced element to update\n */\n writeChanges(index) {\n matrix.makeTranslation(this.curveLengthArray[this.whichCurve[index]], this.whichCurve[index], this.offsets[index]);\n this.object3D.setMatrixAt(index, matrix);\n this.object3D.instanceMatrix.needsUpdate = true;\n }\n /**\n * Move an individual element along the curve by a specific amount\n *\n * @param {number} index Which element to update\n * @param {number} offset Move by how much\n */\n moveIndividualAlongCurve(index, offset) {\n this.offsets[index] += offset;\n this.writeChanges(index);\n }\n /**\n * Select which curve to use for an element\n *\n * @param {number} index the index of the instanced element to update\n * @param {number} curveNo the index of the curve it should use\n */\n setCurve(index, curveNo) {\n if (isNaN(curveNo))\n throw Error(\"curve index being set is Not a Number (NaN)\");\n this.whichCurve[index] = curveNo;\n this.writeChanges(index);\n }\n}\nexport {\n Flow,\n InstancedFlow,\n getUniforms,\n initSplineTexture,\n modifyShader,\n updateSplineTexture\n};\n//# sourceMappingURL=CurveModifier.js.map\n","import { BufferGeometry, BufferAttribute, InterleavedBuffer, InterleavedBufferAttribute, TrianglesDrawMode, TriangleFanDrawMode, TriangleStripDrawMode, Vector3, Float32BufferAttribute } from \"three\";\nimport { getWithKey } from \"../types/helpers.js\";\nconst mergeBufferGeometries = (geometries, useGroups) => {\n const isIndexed = geometries[0].index !== null;\n const attributesUsed = new Set(Object.keys(geometries[0].attributes));\n const morphAttributesUsed = new Set(Object.keys(geometries[0].morphAttributes));\n const attributes = {};\n const morphAttributes = {};\n const morphTargetsRelative = geometries[0].morphTargetsRelative;\n const mergedGeometry = new BufferGeometry();\n let offset = 0;\n geometries.forEach((geom, i) => {\n let attributesCount = 0;\n if (isIndexed !== (geom.index !== null)) {\n console.error(\n \"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \" + i + \". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.\"\n );\n return null;\n }\n for (let name in geom.attributes) {\n if (!attributesUsed.has(name)) {\n console.error(\n \"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \" + i + '. All geometries must have compatible attributes; make sure \"' + name + '\" attribute exists among all geometries, or in none of them.'\n );\n return null;\n }\n if (attributes[name] === void 0) {\n attributes[name] = [];\n }\n attributes[name].push(geom.attributes[name]);\n attributesCount++;\n }\n if (attributesCount !== attributesUsed.size) {\n console.error(\n \"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \" + i + \". Make sure all geometries have the same number of attributes.\"\n );\n return null;\n }\n if (morphTargetsRelative !== geom.morphTargetsRelative) {\n console.error(\n \"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \" + i + \". .morphTargetsRelative must be consistent throughout all geometries.\"\n );\n return null;\n }\n for (let name in geom.morphAttributes) {\n if (!morphAttributesUsed.has(name)) {\n console.error(\n \"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \" + i + \". .morphAttributes must be consistent throughout all geometries.\"\n );\n return null;\n }\n if (morphAttributes[name] === void 0)\n morphAttributes[name] = [];\n morphAttributes[name].push(geom.morphAttributes[name]);\n }\n mergedGeometry.userData.mergedUserData = mergedGeometry.userData.mergedUserData || [];\n mergedGeometry.userData.mergedUserData.push(geom.userData);\n if (useGroups) {\n let count;\n if (geom.index) {\n count = geom.index.count;\n } else if (geom.attributes.position !== void 0) {\n count = geom.attributes.position.count;\n } else {\n console.error(\n \"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \" + i + \". The geometry must have either an index or a position attribute\"\n );\n return null;\n }\n mergedGeometry.addGroup(offset, count, i);\n offset += count;\n }\n });\n if (isIndexed) {\n let indexOffset = 0;\n const mergedIndex = [];\n geometries.forEach((geom) => {\n const index = geom.index;\n for (let j = 0; j < index.count; ++j) {\n mergedIndex.push(index.getX(j) + indexOffset);\n }\n indexOffset += geom.attributes.position.count;\n });\n mergedGeometry.setIndex(mergedIndex);\n }\n for (let name in attributes) {\n const mergedAttribute = mergeBufferAttributes(attributes[name]);\n if (!mergedAttribute) {\n console.error(\n \"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the \" + name + \" attribute.\"\n );\n return null;\n }\n mergedGeometry.setAttribute(name, mergedAttribute);\n }\n for (let name in morphAttributes) {\n const numMorphTargets = morphAttributes[name][0].length;\n if (numMorphTargets === 0)\n break;\n mergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {};\n mergedGeometry.morphAttributes[name] = [];\n for (let i = 0; i < numMorphTargets; ++i) {\n const morphAttributesToMerge = [];\n for (let j = 0; j < morphAttributes[name].length; ++j) {\n morphAttributesToMerge.push(morphAttributes[name][j][i]);\n }\n const mergedMorphAttribute = mergeBufferAttributes(morphAttributesToMerge);\n if (!mergedMorphAttribute) {\n console.error(\n \"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the \" + name + \" morphAttribute.\"\n );\n return null;\n }\n mergedGeometry.morphAttributes[name].push(mergedMorphAttribute);\n }\n }\n return mergedGeometry;\n};\nconst mergeBufferAttributes = (attributes) => {\n let TypedArray = void 0;\n let itemSize = void 0;\n let normalized = void 0;\n let arrayLength = 0;\n attributes.forEach((attr) => {\n if (TypedArray === void 0) {\n TypedArray = attr.array.constructor;\n }\n if (TypedArray !== attr.array.constructor) {\n console.error(\n \"THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes.\"\n );\n return null;\n }\n if (itemSize === void 0)\n itemSize = attr.itemSize;\n if (itemSize !== attr.itemSize) {\n console.error(\n \"THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes.\"\n );\n return null;\n }\n if (normalized === void 0)\n normalized = attr.normalized;\n if (normalized !== attr.normalized) {\n console.error(\n \"THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes.\"\n );\n return null;\n }\n arrayLength += attr.array.length;\n });\n if (TypedArray && itemSize) {\n const array = new TypedArray(arrayLength);\n let offset = 0;\n attributes.forEach((attr) => {\n array.set(attr.array, offset);\n offset += attr.array.length;\n });\n return new BufferAttribute(array, itemSize, normalized);\n }\n};\nconst interleaveAttributes = (attributes) => {\n let TypedArray = void 0;\n let arrayLength = 0;\n let stride = 0;\n for (let i = 0, l = attributes.length; i < l; ++i) {\n const attribute = attributes[i];\n if (TypedArray === void 0)\n TypedArray = attribute.array.constructor;\n if (TypedArray !== attribute.array.constructor) {\n console.error(\"AttributeBuffers of different types cannot be interleaved\");\n return null;\n }\n arrayLength += attribute.array.length;\n stride += attribute.itemSize;\n }\n const interleavedBuffer = new InterleavedBuffer(new TypedArray(arrayLength), stride);\n let offset = 0;\n const res = [];\n const getters = [\"getX\", \"getY\", \"getZ\", \"getW\"];\n const setters = [\"setX\", \"setY\", \"setZ\", \"setW\"];\n for (let j = 0, l = attributes.length; j < l; j++) {\n const attribute = attributes[j];\n const itemSize = attribute.itemSize;\n const count = attribute.count;\n const iba = new InterleavedBufferAttribute(interleavedBuffer, itemSize, offset, attribute.normalized);\n res.push(iba);\n offset += itemSize;\n for (let c = 0; c < count; c++) {\n for (let k = 0; k < itemSize; k++) {\n const set = getWithKey(iba, setters[k]);\n const get = getWithKey(attribute, getters[k]);\n set(c, get(c));\n }\n }\n }\n return res;\n};\nfunction estimateBytesUsed(geometry) {\n let mem = 0;\n for (let name in geometry.attributes) {\n const attr = geometry.getAttribute(name);\n mem += attr.count * attr.itemSize * attr.array.BYTES_PER_ELEMENT;\n }\n const indices = geometry.getIndex();\n mem += indices ? indices.count * indices.itemSize * indices.array.BYTES_PER_ELEMENT : 0;\n return mem;\n}\nfunction mergeVertices(geometry, tolerance = 1e-4) {\n tolerance = Math.max(tolerance, Number.EPSILON);\n const hashToIndex = {};\n const indices = geometry.getIndex();\n const positions = geometry.getAttribute(\"position\");\n const vertexCount = indices ? indices.count : positions.count;\n let nextIndex = 0;\n const attributeNames = Object.keys(geometry.attributes);\n const attrArrays = {};\n const morphAttrsArrays = {};\n const newIndices = [];\n const getters = [\"getX\", \"getY\", \"getZ\", \"getW\"];\n for (let i = 0, l = attributeNames.length; i < l; i++) {\n const name = attributeNames[i];\n attrArrays[name] = [];\n const morphAttr = geometry.morphAttributes[name];\n if (morphAttr) {\n morphAttrsArrays[name] = new Array(morphAttr.length).fill(0).map(() => []);\n }\n }\n const decimalShift = Math.log10(1 / tolerance);\n const shiftMultiplier = Math.pow(10, decimalShift);\n for (let i = 0; i < vertexCount; i++) {\n const index = indices ? indices.getX(i) : i;\n let hash = \"\";\n for (let j = 0, l = attributeNames.length; j < l; j++) {\n const name = attributeNames[j];\n const attribute = geometry.getAttribute(name);\n const itemSize = attribute.itemSize;\n for (let k = 0; k < itemSize; k++) {\n hash += `${~~(attribute[getters[k]](index) * shiftMultiplier)},`;\n }\n }\n if (hash in hashToIndex) {\n newIndices.push(hashToIndex[hash]);\n } else {\n for (let j = 0, l = attributeNames.length; j < l; j++) {\n const name = attributeNames[j];\n const attribute = geometry.getAttribute(name);\n const morphAttr = geometry.morphAttributes[name];\n const itemSize = attribute.itemSize;\n const newarray = attrArrays[name];\n const newMorphArrays = morphAttrsArrays[name];\n for (let k = 0; k < itemSize; k++) {\n const getterFunc = getters[k];\n newarray.push(attribute[getterFunc](index));\n if (morphAttr) {\n for (let m = 0, ml = morphAttr.length; m < ml; m++) {\n newMorphArrays[m].push(morphAttr[m][getterFunc](index));\n }\n }\n }\n }\n hashToIndex[hash] = nextIndex;\n newIndices.push(nextIndex);\n nextIndex++;\n }\n }\n const result = geometry.clone();\n for (let i = 0, l = attributeNames.length; i < l; i++) {\n const name = attributeNames[i];\n const oldAttribute = geometry.getAttribute(name);\n const buffer = new oldAttribute.array.constructor(attrArrays[name]);\n const attribute = new BufferAttribute(buffer, oldAttribute.itemSize, oldAttribute.normalized);\n result.setAttribute(name, attribute);\n if (name in morphAttrsArrays) {\n for (let j = 0; j < morphAttrsArrays[name].length; j++) {\n const oldMorphAttribute = geometry.morphAttributes[name][j];\n const buffer2 = new oldMorphAttribute.array.constructor(morphAttrsArrays[name][j]);\n const morphAttribute = new BufferAttribute(buffer2, oldMorphAttribute.itemSize, oldMorphAttribute.normalized);\n result.morphAttributes[name][j] = morphAttribute;\n }\n }\n }\n result.setIndex(newIndices);\n return result;\n}\nfunction toTrianglesDrawMode(geometry, drawMode) {\n if (drawMode === TrianglesDrawMode) {\n console.warn(\"THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.\");\n return geometry;\n }\n if (drawMode === TriangleFanDrawMode || drawMode === TriangleStripDrawMode) {\n let index = geometry.getIndex();\n if (index === null) {\n const indices = [];\n const position = geometry.getAttribute(\"position\");\n if (position !== void 0) {\n for (let i = 0; i < position.count; i++) {\n indices.push(i);\n }\n geometry.setIndex(indices);\n index = geometry.getIndex();\n } else {\n console.error(\n \"THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.\"\n );\n return geometry;\n }\n }\n const numberOfTriangles = index.count - 2;\n const newIndices = [];\n if (index) {\n if (drawMode === TriangleFanDrawMode) {\n for (let i = 1; i <= numberOfTriangles; i++) {\n newIndices.push(index.getX(0));\n newIndices.push(index.getX(i));\n newIndices.push(index.getX(i + 1));\n }\n } else {\n for (let i = 0; i < numberOfTriangles; i++) {\n if (i % 2 === 0) {\n newIndices.push(index.getX(i));\n newIndices.push(index.getX(i + 1));\n newIndices.push(index.getX(i + 2));\n } else {\n newIndices.push(index.getX(i + 2));\n newIndices.push(index.getX(i + 1));\n newIndices.push(index.getX(i));\n }\n }\n }\n }\n if (newIndices.length / 3 !== numberOfTriangles) {\n console.error(\"THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.\");\n }\n const newGeometry = geometry.clone();\n newGeometry.setIndex(newIndices);\n newGeometry.clearGroups();\n return newGeometry;\n } else {\n console.error(\"THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:\", drawMode);\n return geometry;\n }\n}\nfunction computeMorphedAttributes(object) {\n if (object.geometry.isBufferGeometry !== true) {\n console.error(\"THREE.BufferGeometryUtils: Geometry is not of type BufferGeometry.\");\n return null;\n }\n const _vA = new Vector3();\n const _vB = new Vector3();\n const _vC = new Vector3();\n const _tempA = new Vector3();\n const _tempB = new Vector3();\n const _tempC = new Vector3();\n const _morphA = new Vector3();\n const _morphB = new Vector3();\n const _morphC = new Vector3();\n function _calculateMorphedAttributeData(object2, material2, attribute, morphAttribute, morphTargetsRelative2, a2, b2, c2, modifiedAttributeArray) {\n _vA.fromBufferAttribute(attribute, a2);\n _vB.fromBufferAttribute(attribute, b2);\n _vC.fromBufferAttribute(attribute, c2);\n const morphInfluences = object2.morphTargetInfluences;\n if (\n // @ts-ignore\n material2.morphTargets && morphAttribute && morphInfluences\n ) {\n _morphA.set(0, 0, 0);\n _morphB.set(0, 0, 0);\n _morphC.set(0, 0, 0);\n for (let i2 = 0, il2 = morphAttribute.length; i2 < il2; i2++) {\n const influence = morphInfluences[i2];\n const morph = morphAttribute[i2];\n if (influence === 0)\n continue;\n _tempA.fromBufferAttribute(morph, a2);\n _tempB.fromBufferAttribute(morph, b2);\n _tempC.fromBufferAttribute(morph, c2);\n if (morphTargetsRelative2) {\n _morphA.addScaledVector(_tempA, influence);\n _morphB.addScaledVector(_tempB, influence);\n _morphC.addScaledVector(_tempC, influence);\n } else {\n _morphA.addScaledVector(_tempA.sub(_vA), influence);\n _morphB.addScaledVector(_tempB.sub(_vB), influence);\n _morphC.addScaledVector(_tempC.sub(_vC), influence);\n }\n }\n _vA.add(_morphA);\n _vB.add(_morphB);\n _vC.add(_morphC);\n }\n if (object2.isSkinnedMesh) {\n object2.boneTransform(a2, _vA);\n object2.boneTransform(b2, _vB);\n object2.boneTransform(c2, _vC);\n }\n modifiedAttributeArray[a2 * 3 + 0] = _vA.x;\n modifiedAttributeArray[a2 * 3 + 1] = _vA.y;\n modifiedAttributeArray[a2 * 3 + 2] = _vA.z;\n modifiedAttributeArray[b2 * 3 + 0] = _vB.x;\n modifiedAttributeArray[b2 * 3 + 1] = _vB.y;\n modifiedAttributeArray[b2 * 3 + 2] = _vB.z;\n modifiedAttributeArray[c2 * 3 + 0] = _vC.x;\n modifiedAttributeArray[c2 * 3 + 1] = _vC.y;\n modifiedAttributeArray[c2 * 3 + 2] = _vC.z;\n }\n const geometry = object.geometry;\n const material = object.material;\n let a, b, c;\n const index = geometry.index;\n const positionAttribute = geometry.attributes.position;\n const morphPosition = geometry.morphAttributes.position;\n const morphTargetsRelative = geometry.morphTargetsRelative;\n const normalAttribute = geometry.attributes.normal;\n const morphNormal = geometry.morphAttributes.position;\n const groups = geometry.groups;\n const drawRange = geometry.drawRange;\n let i, j, il, jl;\n let group, groupMaterial;\n let start, end;\n const modifiedPosition = new Float32Array(positionAttribute.count * positionAttribute.itemSize);\n const modifiedNormal = new Float32Array(normalAttribute.count * normalAttribute.itemSize);\n if (index !== null) {\n if (Array.isArray(material)) {\n for (i = 0, il = groups.length; i < il; i++) {\n group = groups[i];\n groupMaterial = material[group.materialIndex];\n start = Math.max(group.start, drawRange.start);\n end = Math.min(group.start + group.count, drawRange.start + drawRange.count);\n for (j = start, jl = end; j < jl; j += 3) {\n a = index.getX(j);\n b = index.getX(j + 1);\n c = index.getX(j + 2);\n _calculateMorphedAttributeData(\n object,\n groupMaterial,\n positionAttribute,\n morphPosition,\n morphTargetsRelative,\n a,\n b,\n c,\n modifiedPosition\n );\n _calculateMorphedAttributeData(\n object,\n groupMaterial,\n normalAttribute,\n morphNormal,\n morphTargetsRelative,\n a,\n b,\n c,\n modifiedNormal\n );\n }\n }\n } else {\n start = Math.max(0, drawRange.start);\n end = Math.min(index.count, drawRange.start + drawRange.count);\n for (i = start, il = end; i < il; i += 3) {\n a = index.getX(i);\n b = index.getX(i + 1);\n c = index.getX(i + 2);\n _calculateMorphedAttributeData(\n object,\n material,\n positionAttribute,\n morphPosition,\n morphTargetsRelative,\n a,\n b,\n c,\n modifiedPosition\n );\n _calculateMorphedAttributeData(\n object,\n material,\n normalAttribute,\n morphNormal,\n morphTargetsRelative,\n a,\n b,\n c,\n modifiedNormal\n );\n }\n }\n } else if (positionAttribute !== void 0) {\n if (Array.isArray(material)) {\n for (i = 0, il = groups.length; i < il; i++) {\n group = groups[i];\n groupMaterial = material[group.materialIndex];\n start = Math.max(group.start, drawRange.start);\n end = Math.min(group.start + group.count, drawRange.start + drawRange.count);\n for (j = start, jl = end; j < jl; j += 3) {\n a = j;\n b = j + 1;\n c = j + 2;\n _calculateMorphedAttributeData(\n object,\n groupMaterial,\n positionAttribute,\n morphPosition,\n morphTargetsRelative,\n a,\n b,\n c,\n modifiedPosition\n );\n _calculateMorphedAttributeData(\n object,\n groupMaterial,\n normalAttribute,\n morphNormal,\n morphTargetsRelative,\n a,\n b,\n c,\n modifiedNormal\n );\n }\n }\n } else {\n start = Math.max(0, drawRange.start);\n end = Math.min(positionAttribute.count, drawRange.start + drawRange.count);\n for (i = start, il = end; i < il; i += 3) {\n a = i;\n b = i + 1;\n c = i + 2;\n _calculateMorphedAttributeData(\n object,\n material,\n positionAttribute,\n morphPosition,\n morphTargetsRelative,\n a,\n b,\n c,\n modifiedPosition\n );\n _calculateMorphedAttributeData(\n object,\n material,\n normalAttribute,\n morphNormal,\n morphTargetsRelative,\n a,\n b,\n c,\n modifiedNormal\n );\n }\n }\n }\n const morphedPositionAttribute = new Float32BufferAttribute(modifiedPosition, 3);\n const morphedNormalAttribute = new Float32BufferAttribute(modifiedNormal, 3);\n return {\n positionAttribute,\n normalAttribute,\n morphedPositionAttribute,\n morphedNormalAttribute\n };\n}\nfunction toCreasedNormals(geometry, creaseAngle = Math.PI / 3) {\n const creaseDot = Math.cos(creaseAngle);\n const hashMultiplier = (1 + 1e-10) * 100;\n const verts = [new Vector3(), new Vector3(), new Vector3()];\n const tempVec1 = new Vector3();\n const tempVec2 = new Vector3();\n const tempNorm = new Vector3();\n const tempNorm2 = new Vector3();\n function hashVertex(v) {\n const x = ~~(v.x * hashMultiplier);\n const y = ~~(v.y * hashMultiplier);\n const z = ~~(v.z * hashMultiplier);\n return `${x},${y},${z}`;\n }\n const resultGeometry = geometry.index ? geometry.toNonIndexed() : geometry;\n const posAttr = resultGeometry.attributes.position;\n const vertexMap = {};\n for (let i = 0, l = posAttr.count / 3; i < l; i++) {\n const i3 = 3 * i;\n const a = verts[0].fromBufferAttribute(posAttr, i3 + 0);\n const b = verts[1].fromBufferAttribute(posAttr, i3 + 1);\n const c = verts[2].fromBufferAttribute(posAttr, i3 + 2);\n tempVec1.subVectors(c, b);\n tempVec2.subVectors(a, b);\n const normal = new Vector3().crossVectors(tempVec1, tempVec2).normalize();\n for (let n = 0; n < 3; n++) {\n const vert = verts[n];\n const hash = hashVertex(vert);\n if (!(hash in vertexMap)) {\n vertexMap[hash] = [];\n }\n vertexMap[hash].push(normal);\n }\n }\n const normalArray = new Float32Array(posAttr.count * 3);\n const normAttr = new BufferAttribute(normalArray, 3, false);\n for (let i = 0, l = posAttr.count / 3; i < l; i++) {\n const i3 = 3 * i;\n const a = verts[0].fromBufferAttribute(posAttr, i3 + 0);\n const b = verts[1].fromBufferAttribute(posAttr, i3 + 1);\n const c = verts[2].fromBufferAttribute(posAttr, i3 + 2);\n tempVec1.subVectors(c, b);\n tempVec2.subVectors(a, b);\n tempNorm.crossVectors(tempVec1, tempVec2).normalize();\n for (let n = 0; n < 3; n++) {\n const vert = verts[n];\n const hash = hashVertex(vert);\n const otherNormals = vertexMap[hash];\n tempNorm2.set(0, 0, 0);\n for (let k = 0, lk = otherNormals.length; k < lk; k++) {\n const otherNorm = otherNormals[k];\n if (tempNorm.dot(otherNorm) > creaseDot) {\n tempNorm2.add(otherNorm);\n }\n }\n tempNorm2.normalize();\n normAttr.setXYZ(i3 + n, tempNorm2.x, tempNorm2.y, tempNorm2.z);\n }\n }\n resultGeometry.setAttribute(\"normal\", normAttr);\n return resultGeometry;\n}\nexport {\n computeMorphedAttributes,\n estimateBytesUsed,\n interleaveAttributes,\n mergeBufferAttributes,\n mergeBufferGeometries,\n mergeVertices,\n toCreasedNormals,\n toTrianglesDrawMode\n};\n//# sourceMappingURL=BufferGeometryUtils.js.map\n","// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar ch2 = {};\nvar wk = (function (c, id, msg, transfer, cb) {\n var w = new Worker(ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([c], { type: 'text/javascript' }))));\n w.onerror = function (e) { return cb(e.error, null); };\n w.onmessage = function (e) { return cb(null, e.data); };\n w.postMessage(msg, transfer);\n return w;\n});\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\n// see fleb note\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2), fl = _a[0], revfl = _a[1];\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b[0], revfd = _b[1];\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >>> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >>> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >>> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >>> 8) | ((x & 0x00FF) << 8)) >>> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> (15 - cd[i]);\n }\n }\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p / 8) | 0) + (p & 7 && 1); };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, buf, st) {\n // source length\n var sl = dat.length;\n if (!sl || (st && !st.l && sl < 5))\n return buf || new u8(0);\n // have to estimate size\n var noBuf = !buf || st;\n // no state\n var noSt = !st || st.i;\n if (!st)\n st = {};\n // Assumes roughly 33% compression ratio average\n if (!buf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n st.f = final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n if (t > sl) {\n if (noSt)\n throw 'unexpected EOF';\n break;\n }\n // ensure size\n if (noBuf)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n // code lengths bits\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n // code lengths map\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n // bits read\n pos += r & 15;\n // symbol\n var s = r >>> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++] = s;\n }\n else {\n // copy count\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n // length tree distance tree\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n // max length bits\n lbt = max(lt);\n // max dist bits\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n }\n else\n throw 'invalid block type';\n if (pos > tbts) {\n if (noSt)\n throw 'unexpected EOF';\n break;\n }\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17;\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (;; lpos = pos) {\n // bits read, code\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw 'unexpected EOF';\n break;\n }\n if (!c)\n throw 'invalid length/literal';\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lpos = pos, lm = null;\n break;\n }\n else {\n var add = sym - 254;\n // no extra bits needed if less\n if (sym > 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n // dist\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw 'invalid distance';\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & ((1 << b) - 1), pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw 'unexpected EOF';\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt == buf.length ? buf : slc(buf, 0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a[0], mlb = _a[1];\n var _b = hTree(df, 15), ddt = _b[0], mdb = _b[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >>> 5) & 127), p += clct[i] >>> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = (syms[i] >>> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (syms[i] >>> 23) & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (syms[i] >>> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n // end\n var e = i + 65535;\n if (e < s) {\n // write full block\n pos = wfblk(w, pos, dat.subarray(i, e));\n }\n else {\n // write final block\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n }\n else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new u32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx bitpos\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n // hash value\n // deopt when i > s - 3 - at end, deopt acceptable\n var hv = hsh(i);\n // index mod 32768 previous index mod\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = (imod - pimod) & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = (i - dif + j + 32768) & 32767;\n var pti = prev[ti];\n var cd = (ti - pti + 32768) & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += (imod - pimod + 32768) & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one Uint32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n // this is the easiest way to avoid needing to maintain state\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new Int32Array(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && -306674912) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = -1;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return ~c; }\n };\n};\n// Alder32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | (a >>> 8) << 16 | (b & 255) << 8 | (b >>> 8);\n }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : (12 + opt.mem), pre, post, !st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/ /g, '').split(',');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function') {\n fnStr += ';' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf('[native code]') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return [fnStr, td];\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k] instanceof u8 || v[k] instanceof u16 || v[k] instanceof u32)\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n var _a;\n if (!ch[id]) {\n var fnStr = '', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n _a = wcln(fns[i], fnStr, td_1), fnStr = _a[0], td_1 = _a[1];\n ch[id] = wcln(fns[m], fnStr, td_1);\n }\n var td = mrg({}, ch[id][1]);\n return wk(ch[id][0] + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, u32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, hMap, max, bits, bits16, shft, slc, inflt, inflateSync, pbf, gu8]; };\nvar bDflt = function () { return [u8, u16, u32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zlv]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get u8\nvar gu8 = function (o) { return o && o.size && new u8(o.size); };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) { return strm.push(ev.data[0], ev.data[1]); };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.push = function (d, f) {\n if (t)\n throw 'stream finished';\n if (!strm.ondata)\n throw 'no stream handler';\n w.postMessage([d, t = f], [d.buffer]);\n };\n strm.terminate = function () { w.terminate(); };\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n throw 'invalid gzip data';\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += d[10] | (d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return ((d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16) | (d[l - 1] << 24)) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + ((o.filename && (o.filename.length + 1)) || 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (fl ? (32 - 2 * fl) : 1);\n};\n// zlib valid\nvar zlv = function (d) {\n if ((d[0] & 15) != 8 || (d[0] >>> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n throw 'invalid zlib data';\n if (d[1] & 32)\n throw 'invalid zlib data: preset dictionaries not supported';\n};\nfunction AsyncCmpStrm(opts, cb) {\n if (!cb && typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n// zlib footer: -4 to -0 is Adler32\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (!cb && typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, !f), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (this.d)\n throw 'stream finished';\n if (!this.ondata)\n throw 'no stream handler';\n this.d = final;\n this.p(chunk, final || false);\n };\n return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6);\n }\n return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n return dopt(data, opts || {}, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n /**\n * Creates an inflation stream\n * @param cb The callback to call whenever data is inflated\n */\n function Inflate(cb) {\n this.s = {};\n this.p = new u8(0);\n this.ondata = cb;\n }\n Inflate.prototype.e = function (c) {\n if (this.d)\n throw 'stream finished';\n if (!this.ondata)\n throw 'no stream handler';\n var l = this.p.length;\n var n = new u8(l + c.length);\n n.set(this.p), n.set(c, l), this.p = n;\n };\n Inflate.prototype.c = function (final) {\n this.d = this.s.i = final || false;\n var bts = this.s.b;\n var dt = inflt(this.p, this.o, this.s);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous inflation stream\n * @param cb The callback to call whenever data is deflated\n */\n function AsyncInflate(cb) {\n this.ondata = cb;\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, 0, function () {\n var strm = new Inflate();\n onmessage = astrm(strm);\n }, 7);\n }\n return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gu8(ev.data[1]))); }, 1, cb);\n}\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function inflateSync(data, out) {\n return inflt(data, out);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n this.c.p(c);\n this.l += c.length;\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, !f);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8);\n }\n return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n if (!opts)\n opts = {};\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n /**\n * Creates a GUNZIP stream\n * @param cb The callback to call whenever data is inflated\n */\n function Gunzip(cb) {\n this.v = 1;\n Inflate.call(this, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n var s = this.p.length > 3 ? gzs(this.p) : 4;\n if (s >= this.p.length && !final)\n return;\n this.p = this.p.subarray(s), this.v = 0;\n }\n if (final) {\n if (this.p.length < 8)\n throw 'invalid gzip stream';\n this.p = this.p.subarray(0, -8);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous GUNZIP stream\n * @param cb The callback to call whenever data is deflated\n */\n function AsyncGunzip(cb) {\n this.ondata = cb;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, 0, function () {\n var strm = new Gunzip();\n onmessage = astrm(strm);\n }, 9);\n }\n return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0])); }, 3, cb);\n}\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param out Where to write the data. GZIP already encodes the output size, so providing this doesn't save memory.\n * @returns The decompressed version of the data\n */\nexport function gunzipSync(data, out) {\n return inflt(data.subarray(gzs(data), -8), out || new u8(gzl(data)));\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n this.c.p(c);\n var raw = dopt(c, this.o, this.v && 2, f && 4, !f);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10);\n }\n return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n /**\n * Creates a Zlib decompression stream\n * @param cb The callback to call whenever data is inflated\n */\n function Unzlib(cb) {\n this.v = 1;\n Inflate.call(this, cb);\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 2 && !final)\n return;\n this.p = this.p.subarray(2), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n throw 'invalid zlib stream';\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous Zlib decompression stream\n * @param cb The callback to call whenever data is deflated\n */\n function AsyncUnzlib(cb) {\n this.ondata = cb;\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, 0, function () {\n var strm = new Unzlib();\n onmessage = astrm(strm);\n }, 11);\n }\n return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gu8(ev.data[1]))); }, 5, cb);\n}\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n /**\n * Creates a decompression stream\n * @param cb The callback to call whenever data is decompressed\n */\n function Decompress(cb) {\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n throw 'no stream handler';\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n var _this_1 = this;\n var cb = function () { _this_1.ondata.apply(_this_1, arguments); };\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(cb)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(cb)\n : new this.Z(cb);\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous decompression stream\n * @param cb The callback to call whenever data is decompressed\n */\n function AsyncDecompress(cb) {\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, out) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, out)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, out)\n : unzlibSync(data, out);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k;\n if (val instanceof u8)\n t[n] = [val, o];\n else if (Array.isArray(val))\n t[n] = [val[0], mrg(o, val[1])];\n else\n fltn(val, n + '/', t, o);\n }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n td.decode(et, { stream: true });\n tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n for (var r = '', i = 0;;) {\n var c = d[i++];\n var eb = (c > 127) + (c > 223) + (c > 239);\n if (i + eb > d.length)\n return [r, slc(d, i - 1)];\n if (!eb)\n r += String.fromCharCode(c);\n else if (eb == 3) {\n c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n else if (eb & 1)\n r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n else\n r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is decoded\n */\n function DecodeUTF8(cb) {\n this.ondata = cb;\n if (tds)\n this.t = new TextDecoder();\n else\n this.p = et;\n }\n /**\n * Pushes a chunk to be decoded from UTF-8 binary\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n DecodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n throw 'no callback';\n final = !!final;\n if (this.t) {\n this.ondata(this.t.decode(chunk, { stream: true }), final);\n if (final) {\n if (this.t.decode().length)\n throw 'invalid utf-8 data';\n this.t = null;\n }\n return;\n }\n if (!this.p)\n throw 'stream finished';\n var dat = new u8(this.p.length + chunk.length);\n dat.set(this.p);\n dat.set(chunk, this.p.length);\n var _a = dutf8(dat), ch = _a[0], np = _a[1];\n if (final) {\n if (np.length)\n throw 'invalid utf-8 data';\n this.p = null;\n }\n else\n this.p = np;\n this.ondata(ch, final);\n };\n return DecodeUTF8;\n}());\nexport { DecodeUTF8 };\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is encoded\n */\n function EncodeUTF8(cb) {\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be encoded to UTF-8\n * @param chunk The string data to push\n * @param final Whether this is the last chunk\n */\n EncodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n throw 'no callback';\n if (this.d)\n throw 'stream finished';\n this.ondata(strToU8(chunk), this.d = final || false);\n };\n return EncodeUTF8;\n}());\nexport { EncodeUTF8 };\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n if (latin1) {\n var ar_1 = new u8(str.length);\n for (var i = 0; i < str.length; ++i)\n ar_1[i] = str.charCodeAt(i);\n return ar_1;\n }\n if (te)\n return te.encode(str);\n var l = str.length;\n var ar = new u8(str.length + (str.length >> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n if (latin1) {\n var r = '';\n for (var i = 0; i < dat.length; i += 16384)\n r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n return r;\n }\n else if (td)\n return td.decode(dat);\n else {\n var _a = dutf8(dat), out = _a[0], ext = _a[1];\n if (ext.length)\n throw 'invalid utf-8 data';\n return out;\n }\n}\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);\n var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n ;\n return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];\n};\n// extra field length\nvar exfl = function (ex) {\n var le = 0;\n if (ex) {\n for (var k in ex) {\n var l = ex[k].length;\n if (l > 65535)\n throw 'extra field too long';\n le += l + 4;\n }\n }\n return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n var fl = fn.length, ex = f.extra, col = co && co.length;\n var exl = exfl(ex);\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b++] = 20, d[b++] = f.os;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (f.flag << 1) | (c == null && 8), d[b++] = u && 8;\n d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n throw 'date not in range 1980-2099';\n wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >>> 1)), b += 4;\n if (c != null) {\n wbytes(d, b, f.crc);\n wbytes(d, b + 4, c);\n wbytes(d, b + 8, f.size);\n }\n wbytes(d, b + 12, fl);\n wbytes(d, b + 14, exl), b += 16;\n if (ce != null) {\n wbytes(d, b, col);\n wbytes(d, b + 6, f.attrs);\n wbytes(d, b + 10, ce), b += 14;\n }\n d.set(fn, b);\n b += fl;\n if (exl) {\n for (var k in ex) {\n var exf = ex[k], l = exf.length;\n wbytes(d, b, +k);\n wbytes(d, b + 2, l);\n d.set(exf, b + 4), b += 4 + l;\n }\n }\n if (col)\n d.set(co, b), b += col;\n return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough = /*#__PURE__*/ (function () {\n /**\n * Creates a pass-through stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n */\n function ZipPassThrough(filename) {\n this.filename = filename;\n this.c = crc();\n this.size = 0;\n this.compression = 0;\n }\n /**\n * Processes a chunk and pushes to the output stream. You can override this\n * method in a subclass for custom behavior, but by default this passes\n * the data through. You must call this.ondata(err, chunk, final) at some\n * point in this method.\n * @param chunk The chunk to process\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.process = function (chunk, final) {\n this.ondata(null, chunk, final);\n };\n /**\n * Pushes a chunk to be added. If you are subclassing this with a custom\n * compression algorithm, note that you must push data from the source\n * file only, pre-compression.\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.push = function (chunk, final) {\n if (!this.ondata)\n throw 'no callback - add to ZIP archive before pushing';\n this.c.p(chunk);\n this.size += chunk.length;\n if (final)\n this.crc = this.c.d();\n this.process(chunk, final || false);\n };\n return ZipPassThrough;\n}());\nexport { ZipPassThrough };\n// I don't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function ZipDeflate(filename, opts) {\n var _this_1 = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new Deflate(opts, function (dat, final) {\n _this_1.ondata(null, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n }\n ZipDeflate.prototype.process = function (chunk, final) {\n try {\n this.d.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return ZipDeflate;\n}());\nexport { ZipDeflate };\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function AsyncZipDeflate(filename, opts) {\n var _this_1 = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new AsyncDeflate(opts, function (err, dat, final) {\n _this_1.ondata(err, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n this.terminate = this.d.terminate;\n }\n AsyncZipDeflate.prototype.process = function (chunk, final) {\n this.d.push(chunk, final);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return AsyncZipDeflate;\n}());\nexport { AsyncZipDeflate };\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n /**\n * Creates an empty ZIP archive to which files can be added\n * @param cb The callback to call whenever data for the generated ZIP archive\n * is available\n */\n function Zip(cb) {\n this.ondata = cb;\n this.u = [];\n this.d = 1;\n }\n /**\n * Adds a file to the ZIP archive\n * @param file The file stream to add\n */\n Zip.prototype.add = function (file) {\n var _this_1 = this;\n if (this.d & 2)\n throw 'stream finished';\n var f = strToU8(file.filename), fl = f.length;\n var com = file.comment, o = com && strToU8(com);\n var u = fl != file.filename.length || (o && (com.length != o.length));\n var hl = fl + exfl(file.extra) + 30;\n if (fl > 65535)\n throw 'filename too long';\n var header = new u8(hl);\n wzh(header, 0, file, f, u);\n var chks = [header];\n var pAll = function () {\n for (var _i = 0, chks_1 = chks; _i < chks_1.length; _i++) {\n var chk = chks_1[_i];\n _this_1.ondata(null, chk, false);\n }\n chks = [];\n };\n var tr = this.d;\n this.d = 0;\n var ind = this.u.length;\n var uf = mrg(file, {\n f: f,\n u: u,\n o: o,\n t: function () {\n if (file.terminate)\n file.terminate();\n },\n r: function () {\n pAll();\n if (tr) {\n var nxt = _this_1.u[ind + 1];\n if (nxt)\n nxt.r();\n else\n _this_1.d = 1;\n }\n tr = 1;\n }\n });\n var cl = 0;\n file.ondata = function (err, dat, final) {\n if (err) {\n _this_1.ondata(err, dat, final);\n _this_1.terminate();\n }\n else {\n cl += dat.length;\n chks.push(dat);\n if (final) {\n var dd = new u8(16);\n wbytes(dd, 0, 0x8074B50);\n wbytes(dd, 4, file.crc);\n wbytes(dd, 8, cl);\n wbytes(dd, 12, file.size);\n chks.push(dd);\n uf.c = cl, uf.b = hl + cl + 16, uf.crc = file.crc, uf.size = file.size;\n if (tr)\n uf.r();\n tr = 1;\n }\n else if (tr)\n pAll();\n }\n };\n this.u.push(uf);\n };\n /**\n * Ends the process of adding files and prepares to emit the final chunks.\n * This *must* be called after adding all desired files for the resulting\n * ZIP file to work properly.\n */\n Zip.prototype.end = function () {\n var _this_1 = this;\n if (this.d & 2) {\n if (this.d & 1)\n throw 'stream finishing';\n throw 'stream finished';\n }\n if (this.d)\n this.e();\n else\n this.u.push({\n r: function () {\n if (!(_this_1.d & 1))\n return;\n _this_1.u.splice(-1, 1);\n _this_1.e();\n },\n t: function () { }\n });\n this.d = 3;\n };\n Zip.prototype.e = function () {\n var bt = 0, l = 0, tl = 0;\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n }\n var out = new u8(tl + 22);\n for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n var f = _c[_b];\n wzh(out, bt, f, f.f, f.u, f.c, l, f.o);\n bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n }\n wzf(out, bt, this.u.length, tl, l);\n this.ondata(null, out, true);\n this.d = 2;\n };\n /**\n * A method to terminate any internal workers used by the stream. Subsequent\n * calls to add() will fail.\n */\n Zip.prototype.terminate = function () {\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n f.t();\n }\n this.d = 2;\n };\n return Zip;\n}());\nexport { Zip };\nexport function zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n var r = {};\n fltn(data, '', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n var l = f.c.length;\n wzh(out, tot, f, f.f, f.u, l);\n var badd = 30 + f.f.length + exfl(f.extra);\n var loc = tot + badd;\n out.set(f.c, loc);\n wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n }\n catch (e) {\n return cb(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cb(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), size = file.length;\n c.p(file);\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n var compression = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cb(e, null);\n }\n else {\n var l = d.length;\n files[i] = mrg(p, {\n size: size,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n compression: compression\n });\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n if (!--lft)\n cbf();\n }\n };\n if (s > 65535)\n cbl('filename too long', null);\n if (!compression)\n cbl(null, file);\n else if (size < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n if (!opts)\n opts = {};\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var compression = p.level == 0 ? 0 : 8;\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n if (s > 65535)\n throw 'filename too long';\n var d = compression ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push(mrg(p, {\n size: file.length,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n o: o,\n compression: compression\n }));\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f, f.f, f.u, f.c.length);\n var badd = 30 + f.f.length + exfl(f.extra);\n out.set(f.c, f.o + badd);\n wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n function UnzipPassThrough() {\n }\n UnzipPassThrough.prototype.push = function (data, final) {\n this.ondata(null, data, final);\n };\n UnzipPassThrough.compression = 0;\n return UnzipPassThrough;\n}());\nexport { UnzipPassThrough };\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function UnzipInflate() {\n var _this_1 = this;\n this.i = new Inflate(function (dat, final) {\n _this_1.ondata(null, dat, final);\n });\n }\n UnzipInflate.prototype.push = function (data, final) {\n try {\n this.i.push(data, final);\n }\n catch (e) {\n this.ondata(e, data, final);\n }\n };\n UnzipInflate.compression = 8;\n return UnzipInflate;\n}());\nexport { UnzipInflate };\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function AsyncUnzipInflate(_, sz) {\n var _this_1 = this;\n if (sz < 320000) {\n this.i = new Inflate(function (dat, final) {\n _this_1.ondata(null, dat, final);\n });\n }\n else {\n this.i = new AsyncInflate(function (err, dat, final) {\n _this_1.ondata(err, dat, final);\n });\n this.terminate = this.i.terminate;\n }\n }\n AsyncUnzipInflate.prototype.push = function (data, final) {\n if (this.i.terminate)\n data = slc(data, 0);\n this.i.push(data, final);\n };\n AsyncUnzipInflate.compression = 8;\n return AsyncUnzipInflate;\n}());\nexport { AsyncUnzipInflate };\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n /**\n * Creates a ZIP decompression stream\n * @param cb The callback to call whenever a file in the ZIP archive is found\n */\n function Unzip(cb) {\n this.onfile = cb;\n this.k = [];\n this.o = {\n 0: UnzipPassThrough\n };\n this.p = et;\n }\n /**\n * Pushes a chunk to be unzipped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzip.prototype.push = function (chunk, final) {\n var _this_1 = this;\n if (!this.onfile)\n throw 'no callback';\n if (!this.p)\n throw 'stream finished';\n if (this.c > 0) {\n var len = Math.min(this.c, chunk.length);\n var toAdd = chunk.subarray(0, len);\n this.c -= len;\n if (this.d)\n this.d.push(toAdd, !this.c);\n else\n this.k[0].push(toAdd);\n chunk = chunk.subarray(len);\n if (chunk.length)\n return this.push(chunk, final);\n }\n else {\n var f = 0, i = 0, is = void 0, buf = void 0;\n if (!this.p.length)\n buf = chunk;\n else if (!chunk.length)\n buf = this.p;\n else {\n buf = new u8(this.p.length + chunk.length);\n buf.set(this.p), buf.set(chunk, this.p.length);\n }\n var l = buf.length, oc = this.c, add = oc && this.d;\n var _loop_2 = function () {\n var _a;\n var sig = b4(buf, i);\n if (sig == 0x4034B50) {\n f = 1, is = i;\n this_1.d = null;\n this_1.c = 0;\n var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n if (l > i + 30 + fnl + es) {\n var chks_2 = [];\n this_1.k.unshift(chks_2);\n f = 2;\n var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22);\n var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n if (sc_1 == 4294967295) {\n _a = dd ? [-2] : z64e(buf, i), sc_1 = _a[0], su_1 = _a[1];\n }\n else if (dd)\n sc_1 = -1;\n i += es;\n this_1.c = sc_1;\n var d_1;\n var file_1 = {\n name: fn_1,\n compression: cmp_1,\n start: function () {\n if (!file_1.ondata)\n throw 'no callback';\n if (!sc_1)\n file_1.ondata(null, et, true);\n else {\n var ctr = _this_1.o[cmp_1];\n if (!ctr)\n throw 'unknown compression type ' + cmp_1;\n d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n for (var _i = 0, chks_3 = chks_2; _i < chks_3.length; _i++) {\n var dat = chks_3[_i];\n d_1.push(dat, false);\n }\n if (_this_1.k[0] == chks_2 && _this_1.c)\n _this_1.d = d_1;\n else\n d_1.push(et, true);\n }\n },\n terminate: function () {\n if (d_1 && d_1.terminate)\n d_1.terminate();\n }\n };\n if (sc_1 >= 0)\n file_1.size = sc_1, file_1.originalSize = su_1;\n this_1.onfile(file_1);\n }\n return \"break\";\n }\n else if (oc) {\n if (sig == 0x8074B50) {\n is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n return \"break\";\n }\n else if (sig == 0x2014B50) {\n is = i -= 4, f = 3, this_1.c = 0;\n return \"break\";\n }\n }\n };\n var this_1 = this;\n for (; i < l - 4; ++i) {\n var state_1 = _loop_2();\n if (state_1 === \"break\")\n break;\n }\n this.p = et;\n if (oc < 0) {\n var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n if (add)\n add.push(dat, !!f);\n else\n this.k[+(f == 2)].push(dat);\n }\n if (f & 2)\n return this.push(buf.subarray(i), final);\n this.p = buf.subarray(i);\n }\n if (final) {\n if (this.c)\n throw 'invalid zip file';\n this.p = null;\n }\n };\n /**\n * Registers a decoder with the stream, allowing for files compressed with\n * the compression type provided to be expanded correctly\n * @param decoder The decoder constructor\n */\n Unzip.prototype.register = function (decoder) {\n this.o[decoder.compression] = decoder;\n };\n return Unzip;\n}());\nexport { Unzip };\n/**\n * Asynchronously decompresses a ZIP archive\n * @param data The raw compressed ZIP file\n * @param cb The callback to call with the decompressed files\n * @returns A function that can be used to immediately terminate the unzipping\n */\nexport function unzip(data, cb) {\n if (typeof cb != 'function')\n throw 'no callback';\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cb('invalid zip file', null);\n return;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (!lft)\n cb(null, {});\n var c = lft;\n var o = b4(data, e + 16);\n var z = o == 4294967295;\n if (z) {\n e = b4(data, e - 12);\n if (b4(data, e) != 0x6064B50) {\n cb('invalid zip file', null);\n return;\n }\n c = lft = b4(data, e + 32);\n o = b4(data, e + 48);\n }\n var _loop_3 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cb(e, null);\n }\n else {\n files[fn] = d;\n if (!--lft)\n cb(null, files);\n }\n };\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n if (sc < 320000) {\n try {\n cbl(null, inflateSync(infl, new u8(su)));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl('unknown compression type ' + c_1, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_3(i);\n }\n return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @returns The decompressed files\n */\nexport function unzipSync(data) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n throw 'invalid zip file';\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = o == 4294967295;\n if (z) {\n e = b4(data, e - 12);\n if (b4(data, e) != 0x6064B50)\n throw 'invalid zip file';\n c = b4(data, e + 32);\n o = b4(data, e + 48);\n }\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), new u8(su));\n else\n throw 'unknown compression type ' + c_2;\n }\n return files;\n}\n","import { Mesh, BufferGeometry, BufferAttribute, DynamicDrawUsage, Sphere, Vector3, Color } from \"three\";\nclass MarchingCubes extends Mesh {\n constructor(resolution, material, enableUvs = false, enableColors = false, maxPolyCount = 1e4) {\n const geometry = new BufferGeometry();\n super(geometry, material);\n this.isMarchingCubes = true;\n const scope = this;\n const vlist = new Float32Array(12 * 3);\n const nlist = new Float32Array(12 * 3);\n const clist = new Float32Array(12 * 3);\n this.enableUvs = enableUvs;\n this.enableColors = enableColors;\n this.init = function(resolution2) {\n this.resolution = resolution2;\n this.isolation = 80;\n this.size = resolution2;\n this.size2 = this.size * this.size;\n this.size3 = this.size2 * this.size;\n this.halfsize = this.size / 2;\n this.delta = 2 / this.size;\n this.yd = this.size;\n this.zd = this.size2;\n this.field = new Float32Array(this.size3);\n this.normal_cache = new Float32Array(this.size3 * 3);\n this.palette = new Float32Array(this.size3 * 3);\n this.count = 0;\n const maxVertexCount = maxPolyCount * 3;\n this.positionArray = new Float32Array(maxVertexCount * 3);\n const positionAttribute = new BufferAttribute(this.positionArray, 3);\n positionAttribute.setUsage(DynamicDrawUsage);\n geometry.setAttribute(\"position\", positionAttribute);\n this.normalArray = new Float32Array(maxVertexCount * 3);\n const normalAttribute = new BufferAttribute(this.normalArray, 3);\n normalAttribute.setUsage(DynamicDrawUsage);\n geometry.setAttribute(\"normal\", normalAttribute);\n if (this.enableUvs) {\n this.uvArray = new Float32Array(maxVertexCount * 2);\n const uvAttribute = new BufferAttribute(this.uvArray, 2);\n uvAttribute.setUsage(DynamicDrawUsage);\n geometry.setAttribute(\"uv\", uvAttribute);\n }\n if (this.enableColors) {\n this.colorArray = new Float32Array(maxVertexCount * 3);\n const colorAttribute = new BufferAttribute(this.colorArray, 3);\n colorAttribute.setUsage(DynamicDrawUsage);\n geometry.setAttribute(\"color\", colorAttribute);\n }\n geometry.boundingSphere = new Sphere(new Vector3(), 1);\n };\n function lerp(a, b, t) {\n return a + (b - a) * t;\n }\n function VIntX(q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2) {\n const mu = (isol - valp1) / (valp2 - valp1), nc = scope.normal_cache;\n vlist[offset + 0] = x + mu * scope.delta;\n vlist[offset + 1] = y;\n vlist[offset + 2] = z;\n nlist[offset + 0] = lerp(nc[q + 0], nc[q + 3], mu);\n nlist[offset + 1] = lerp(nc[q + 1], nc[q + 4], mu);\n nlist[offset + 2] = lerp(nc[q + 2], nc[q + 5], mu);\n clist[offset + 0] = lerp(scope.palette[c_offset1 * 3 + 0], scope.palette[c_offset2 * 3 + 0], mu);\n clist[offset + 1] = lerp(scope.palette[c_offset1 * 3 + 1], scope.palette[c_offset2 * 3 + 1], mu);\n clist[offset + 2] = lerp(scope.palette[c_offset1 * 3 + 2], scope.palette[c_offset2 * 3 + 2], mu);\n }\n function VIntY(q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2) {\n const mu = (isol - valp1) / (valp2 - valp1), nc = scope.normal_cache;\n vlist[offset + 0] = x;\n vlist[offset + 1] = y + mu * scope.delta;\n vlist[offset + 2] = z;\n const q2 = q + scope.yd * 3;\n nlist[offset + 0] = lerp(nc[q + 0], nc[q2 + 0], mu);\n nlist[offset + 1] = lerp(nc[q + 1], nc[q2 + 1], mu);\n nlist[offset + 2] = lerp(nc[q + 2], nc[q2 + 2], mu);\n clist[offset + 0] = lerp(scope.palette[c_offset1 * 3 + 0], scope.palette[c_offset2 * 3 + 0], mu);\n clist[offset + 1] = lerp(scope.palette[c_offset1 * 3 + 1], scope.palette[c_offset2 * 3 + 1], mu);\n clist[offset + 2] = lerp(scope.palette[c_offset1 * 3 + 2], scope.palette[c_offset2 * 3 + 2], mu);\n }\n function VIntZ(q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2) {\n const mu = (isol - valp1) / (valp2 - valp1), nc = scope.normal_cache;\n vlist[offset + 0] = x;\n vlist[offset + 1] = y;\n vlist[offset + 2] = z + mu * scope.delta;\n const q2 = q + scope.zd * 3;\n nlist[offset + 0] = lerp(nc[q + 0], nc[q2 + 0], mu);\n nlist[offset + 1] = lerp(nc[q + 1], nc[q2 + 1], mu);\n nlist[offset + 2] = lerp(nc[q + 2], nc[q2 + 2], mu);\n clist[offset + 0] = lerp(scope.palette[c_offset1 * 3 + 0], scope.palette[c_offset2 * 3 + 0], mu);\n clist[offset + 1] = lerp(scope.palette[c_offset1 * 3 + 1], scope.palette[c_offset2 * 3 + 1], mu);\n clist[offset + 2] = lerp(scope.palette[c_offset1 * 3 + 2], scope.palette[c_offset2 * 3 + 2], mu);\n }\n function compNorm(q) {\n const q3 = q * 3;\n if (scope.normal_cache[q3] === 0) {\n scope.normal_cache[q3 + 0] = scope.field[q - 1] - scope.field[q + 1];\n scope.normal_cache[q3 + 1] = scope.field[q - scope.yd] - scope.field[q + scope.yd];\n scope.normal_cache[q3 + 2] = scope.field[q - scope.zd] - scope.field[q + scope.zd];\n }\n }\n function polygonize(fx, fy, fz, q, isol) {\n const q1 = q + 1, qy = q + scope.yd, qz = q + scope.zd, q1y = q1 + scope.yd, q1z = q1 + scope.zd, qyz = q + scope.yd + scope.zd, q1yz = q1 + scope.yd + scope.zd;\n let cubeindex = 0;\n const field0 = scope.field[q], field1 = scope.field[q1], field2 = scope.field[qy], field3 = scope.field[q1y], field4 = scope.field[qz], field5 = scope.field[q1z], field6 = scope.field[qyz], field7 = scope.field[q1yz];\n if (field0 < isol)\n cubeindex |= 1;\n if (field1 < isol)\n cubeindex |= 2;\n if (field2 < isol)\n cubeindex |= 8;\n if (field3 < isol)\n cubeindex |= 4;\n if (field4 < isol)\n cubeindex |= 16;\n if (field5 < isol)\n cubeindex |= 32;\n if (field6 < isol)\n cubeindex |= 128;\n if (field7 < isol)\n cubeindex |= 64;\n const bits = edgeTable[cubeindex];\n if (bits === 0)\n return 0;\n const d = scope.delta, fx2 = fx + d, fy2 = fy + d, fz2 = fz + d;\n if (bits & 1) {\n compNorm(q);\n compNorm(q1);\n VIntX(q * 3, 0, isol, fx, fy, fz, field0, field1, q, q1);\n }\n if (bits & 2) {\n compNorm(q1);\n compNorm(q1y);\n VIntY(q1 * 3, 3, isol, fx2, fy, fz, field1, field3, q1, q1y);\n }\n if (bits & 4) {\n compNorm(qy);\n compNorm(q1y);\n VIntX(qy * 3, 6, isol, fx, fy2, fz, field2, field3, qy, q1y);\n }\n if (bits & 8) {\n compNorm(q);\n compNorm(qy);\n VIntY(q * 3, 9, isol, fx, fy, fz, field0, field2, q, qy);\n }\n if (bits & 16) {\n compNorm(qz);\n compNorm(q1z);\n VIntX(qz * 3, 12, isol, fx, fy, fz2, field4, field5, qz, q1z);\n }\n if (bits & 32) {\n compNorm(q1z);\n compNorm(q1yz);\n VIntY(q1z * 3, 15, isol, fx2, fy, fz2, field5, field7, q1z, q1yz);\n }\n if (bits & 64) {\n compNorm(qyz);\n compNorm(q1yz);\n VIntX(qyz * 3, 18, isol, fx, fy2, fz2, field6, field7, qyz, q1yz);\n }\n if (bits & 128) {\n compNorm(qz);\n compNorm(qyz);\n VIntY(qz * 3, 21, isol, fx, fy, fz2, field4, field6, qz, qyz);\n }\n if (bits & 256) {\n compNorm(q);\n compNorm(qz);\n VIntZ(q * 3, 24, isol, fx, fy, fz, field0, field4, q, qz);\n }\n if (bits & 512) {\n compNorm(q1);\n compNorm(q1z);\n VIntZ(q1 * 3, 27, isol, fx2, fy, fz, field1, field5, q1, q1z);\n }\n if (bits & 1024) {\n compNorm(q1y);\n compNorm(q1yz);\n VIntZ(q1y * 3, 30, isol, fx2, fy2, fz, field3, field7, q1y, q1yz);\n }\n if (bits & 2048) {\n compNorm(qy);\n compNorm(qyz);\n VIntZ(qy * 3, 33, isol, fx, fy2, fz, field2, field6, qy, qyz);\n }\n cubeindex <<= 4;\n let o1, o2, o3, numtris = 0, i = 0;\n while (triTable[cubeindex + i] != -1) {\n o1 = cubeindex + i;\n o2 = o1 + 1;\n o3 = o1 + 2;\n posnormtriv(vlist, nlist, clist, 3 * triTable[o1], 3 * triTable[o2], 3 * triTable[o3]);\n i += 3;\n numtris++;\n }\n return numtris;\n }\n function posnormtriv(pos, norm, colors, o1, o2, o3) {\n const c = scope.count * 3;\n scope.positionArray[c + 0] = pos[o1];\n scope.positionArray[c + 1] = pos[o1 + 1];\n scope.positionArray[c + 2] = pos[o1 + 2];\n scope.positionArray[c + 3] = pos[o2];\n scope.positionArray[c + 4] = pos[o2 + 1];\n scope.positionArray[c + 5] = pos[o2 + 2];\n scope.positionArray[c + 6] = pos[o3];\n scope.positionArray[c + 7] = pos[o3 + 1];\n scope.positionArray[c + 8] = pos[o3 + 2];\n if (scope.material.flatShading === true) {\n const nx = (norm[o1 + 0] + norm[o2 + 0] + norm[o3 + 0]) / 3;\n const ny = (norm[o1 + 1] + norm[o2 + 1] + norm[o3 + 1]) / 3;\n const nz = (norm[o1 + 2] + norm[o2 + 2] + norm[o3 + 2]) / 3;\n scope.normalArray[c + 0] = nx;\n scope.normalArray[c + 1] = ny;\n scope.normalArray[c + 2] = nz;\n scope.normalArray[c + 3] = nx;\n scope.normalArray[c + 4] = ny;\n scope.normalArray[c + 5] = nz;\n scope.normalArray[c + 6] = nx;\n scope.normalArray[c + 7] = ny;\n scope.normalArray[c + 8] = nz;\n } else {\n scope.normalArray[c + 0] = norm[o1 + 0];\n scope.normalArray[c + 1] = norm[o1 + 1];\n scope.normalArray[c + 2] = norm[o1 + 2];\n scope.normalArray[c + 3] = norm[o2 + 0];\n scope.normalArray[c + 4] = norm[o2 + 1];\n scope.normalArray[c + 5] = norm[o2 + 2];\n scope.normalArray[c + 6] = norm[o3 + 0];\n scope.normalArray[c + 7] = norm[o3 + 1];\n scope.normalArray[c + 8] = norm[o3 + 2];\n }\n if (scope.enableUvs) {\n const d = scope.count * 2;\n scope.uvArray[d + 0] = pos[o1 + 0];\n scope.uvArray[d + 1] = pos[o1 + 2];\n scope.uvArray[d + 2] = pos[o2 + 0];\n scope.uvArray[d + 3] = pos[o2 + 2];\n scope.uvArray[d + 4] = pos[o3 + 0];\n scope.uvArray[d + 5] = pos[o3 + 2];\n }\n if (scope.enableColors) {\n scope.colorArray[c + 0] = colors[o1 + 0];\n scope.colorArray[c + 1] = colors[o1 + 1];\n scope.colorArray[c + 2] = colors[o1 + 2];\n scope.colorArray[c + 3] = colors[o2 + 0];\n scope.colorArray[c + 4] = colors[o2 + 1];\n scope.colorArray[c + 5] = colors[o2 + 2];\n scope.colorArray[c + 6] = colors[o3 + 0];\n scope.colorArray[c + 7] = colors[o3 + 1];\n scope.colorArray[c + 8] = colors[o3 + 2];\n }\n scope.count += 3;\n }\n this.addBall = function(ballx, bally, ballz, strength, subtract, colors) {\n const sign = Math.sign(strength);\n strength = Math.abs(strength);\n const userDefineColor = !(colors === void 0 || colors === null);\n let ballColor = new Color(ballx, bally, ballz);\n if (userDefineColor) {\n try {\n ballColor = colors instanceof Color ? colors : Array.isArray(colors) ? new Color(\n Math.min(Math.abs(colors[0]), 1),\n Math.min(Math.abs(colors[1]), 1),\n Math.min(Math.abs(colors[2]), 1)\n ) : new Color(colors);\n } catch (err) {\n ballColor = new Color(ballx, bally, ballz);\n }\n }\n const radius = this.size * Math.sqrt(strength / subtract), zs = ballz * this.size, ys = bally * this.size, xs = ballx * this.size;\n let min_z = Math.floor(zs - radius);\n if (min_z < 1)\n min_z = 1;\n let max_z = Math.floor(zs + radius);\n if (max_z > this.size - 1)\n max_z = this.size - 1;\n let min_y = Math.floor(ys - radius);\n if (min_y < 1)\n min_y = 1;\n let max_y = Math.floor(ys + radius);\n if (max_y > this.size - 1)\n max_y = this.size - 1;\n let min_x = Math.floor(xs - radius);\n if (min_x < 1)\n min_x = 1;\n let max_x = Math.floor(xs + radius);\n if (max_x > this.size - 1)\n max_x = this.size - 1;\n let x, y, z, y_offset, z_offset, fx, fy, fz, fz2, fy2, val;\n for (z = min_z; z < max_z; z++) {\n z_offset = this.size2 * z;\n fz = z / this.size - ballz;\n fz2 = fz * fz;\n for (y = min_y; y < max_y; y++) {\n y_offset = z_offset + this.size * y;\n fy = y / this.size - bally;\n fy2 = fy * fy;\n for (x = min_x; x < max_x; x++) {\n fx = x / this.size - ballx;\n val = strength / (1e-6 + fx * fx + fy2 + fz2) - subtract;\n if (val > 0) {\n this.field[y_offset + x] += val * sign;\n const ratio = Math.sqrt((x - xs) * (x - xs) + (y - ys) * (y - ys) + (z - zs) * (z - zs)) / radius;\n const contrib = 1 - ratio * ratio * ratio * (ratio * (ratio * 6 - 15) + 10);\n this.palette[(y_offset + x) * 3 + 0] += ballColor.r * contrib;\n this.palette[(y_offset + x) * 3 + 1] += ballColor.g * contrib;\n this.palette[(y_offset + x) * 3 + 2] += ballColor.b * contrib;\n }\n }\n }\n }\n };\n this.addPlaneX = function(strength, subtract) {\n const size = this.size, yd = this.yd, zd = this.zd, field = this.field;\n let x, y, z, xx, val, xdiv, cxy, dist = size * Math.sqrt(strength / subtract);\n if (dist > size)\n dist = size;\n for (x = 0; x < dist; x++) {\n xdiv = x / size;\n xx = xdiv * xdiv;\n val = strength / (1e-4 + xx) - subtract;\n if (val > 0) {\n for (y = 0; y < size; y++) {\n cxy = x + y * yd;\n for (z = 0; z < size; z++) {\n field[zd * z + cxy] += val;\n }\n }\n }\n }\n };\n this.addPlaneY = function(strength, subtract) {\n const size = this.size, yd = this.yd, zd = this.zd, field = this.field;\n let x, y, z, yy, val, ydiv, cy, cxy, dist = size * Math.sqrt(strength / subtract);\n if (dist > size)\n dist = size;\n for (y = 0; y < dist; y++) {\n ydiv = y / size;\n yy = ydiv * ydiv;\n val = strength / (1e-4 + yy) - subtract;\n if (val > 0) {\n cy = y * yd;\n for (x = 0; x < size; x++) {\n cxy = cy + x;\n for (z = 0; z < size; z++)\n field[zd * z + cxy] += val;\n }\n }\n }\n };\n this.addPlaneZ = function(strength, subtract) {\n const size = this.size, yd = this.yd, zd = this.zd, field = this.field;\n let x, y, z, zz, val, zdiv, cz, cyz, dist = size * Math.sqrt(strength / subtract);\n if (dist > size)\n dist = size;\n for (z = 0; z < dist; z++) {\n zdiv = z / size;\n zz = zdiv * zdiv;\n val = strength / (1e-4 + zz) - subtract;\n if (val > 0) {\n cz = zd * z;\n for (y = 0; y < size; y++) {\n cyz = cz + y * yd;\n for (x = 0; x < size; x++)\n field[cyz + x] += val;\n }\n }\n }\n };\n this.setCell = function(x, y, z, value) {\n const index = this.size2 * z + this.size * y + x;\n this.field[index] = value;\n };\n this.getCell = function(x, y, z) {\n const index = this.size2 * z + this.size * y + x;\n return this.field[index];\n };\n this.blur = function(intensity = 1) {\n const field = this.field;\n const fieldCopy = field.slice();\n const size = this.size;\n const size2 = this.size2;\n for (let x = 0; x < size; x++) {\n for (let y = 0; y < size; y++) {\n for (let z = 0; z < size; z++) {\n const index = size2 * z + size * y + x;\n let val = fieldCopy[index];\n let count = 1;\n for (let x2 = -1; x2 <= 1; x2 += 2) {\n const x3 = x2 + x;\n if (x3 < 0 || x3 >= size)\n continue;\n for (let y2 = -1; y2 <= 1; y2 += 2) {\n const y3 = y2 + y;\n if (y3 < 0 || y3 >= size)\n continue;\n for (let z2 = -1; z2 <= 1; z2 += 2) {\n const z3 = z2 + z;\n if (z3 < 0 || z3 >= size)\n continue;\n const index2 = size2 * z3 + size * y3 + x3;\n const val2 = fieldCopy[index2];\n count++;\n val += intensity * (val2 - val) / count;\n }\n }\n }\n field[index] = val;\n }\n }\n }\n };\n this.reset = function() {\n for (let i = 0; i < this.size3; i++) {\n this.normal_cache[i * 3] = 0;\n this.field[i] = 0;\n this.palette[i * 3] = this.palette[i * 3 + 1] = this.palette[i * 3 + 2] = 0;\n }\n };\n this.update = function() {\n this.count = 0;\n const smin2 = this.size - 2;\n for (let z = 1; z < smin2; z++) {\n const z_offset = this.size2 * z;\n const fz = (z - this.halfsize) / this.halfsize;\n for (let y = 1; y < smin2; y++) {\n const y_offset = z_offset + this.size * y;\n const fy = (y - this.halfsize) / this.halfsize;\n for (let x = 1; x < smin2; x++) {\n const fx = (x - this.halfsize) / this.halfsize;\n const q = y_offset + x;\n polygonize(fx, fy, fz, q, this.isolation);\n }\n }\n }\n this.geometry.setDrawRange(0, this.count);\n geometry.getAttribute(\"position\").needsUpdate = true;\n geometry.getAttribute(\"normal\").needsUpdate = true;\n if (this.enableUvs)\n geometry.getAttribute(\"uv\").needsUpdate = true;\n if (this.enableColors)\n geometry.getAttribute(\"color\").needsUpdate = true;\n if (this.count / 3 > maxPolyCount)\n console.warn(\n \"THREE.MarchingCubes: Geometry buffers too small for rendering. Please create an instance with a higher poly count.\"\n );\n };\n this.init(resolution);\n }\n}\nconst edgeTable = new Int32Array([\n 0,\n 265,\n 515,\n 778,\n 1030,\n 1295,\n 1541,\n 1804,\n 2060,\n 2309,\n 2575,\n 2822,\n 3082,\n 3331,\n 3593,\n 3840,\n 400,\n 153,\n 915,\n 666,\n 1430,\n 1183,\n 1941,\n 1692,\n 2460,\n 2197,\n 2975,\n 2710,\n 3482,\n 3219,\n 3993,\n 3728,\n 560,\n 825,\n 51,\n 314,\n 1590,\n 1855,\n 1077,\n 1340,\n 2620,\n 2869,\n 2111,\n 2358,\n 3642,\n 3891,\n 3129,\n 3376,\n 928,\n 681,\n 419,\n 170,\n 1958,\n 1711,\n 1445,\n 1196,\n 2988,\n 2725,\n 2479,\n 2214,\n 4010,\n 3747,\n 3497,\n 3232,\n 1120,\n 1385,\n 1635,\n 1898,\n 102,\n 367,\n 613,\n 876,\n 3180,\n 3429,\n 3695,\n 3942,\n 2154,\n 2403,\n 2665,\n 2912,\n 1520,\n 1273,\n 2035,\n 1786,\n 502,\n 255,\n 1013,\n 764,\n 3580,\n 3317,\n 4095,\n 3830,\n 2554,\n 2291,\n 3065,\n 2800,\n 1616,\n 1881,\n 1107,\n 1370,\n 598,\n 863,\n 85,\n 348,\n 3676,\n 3925,\n 3167,\n 3414,\n 2650,\n 2899,\n 2137,\n 2384,\n 1984,\n 1737,\n 1475,\n 1226,\n 966,\n 719,\n 453,\n 204,\n 4044,\n 3781,\n 3535,\n 3270,\n 3018,\n 2755,\n 2505,\n 2240,\n 2240,\n 2505,\n 2755,\n 3018,\n 3270,\n 3535,\n 3781,\n 4044,\n 204,\n 453,\n 719,\n 966,\n 1226,\n 1475,\n 1737,\n 1984,\n 2384,\n 2137,\n 2899,\n 2650,\n 3414,\n 3167,\n 3925,\n 3676,\n 348,\n 85,\n 863,\n 598,\n 1370,\n 1107,\n 1881,\n 1616,\n 2800,\n 3065,\n 2291,\n 2554,\n 3830,\n 4095,\n 3317,\n 3580,\n 764,\n 1013,\n 255,\n 502,\n 1786,\n 2035,\n 1273,\n 1520,\n 2912,\n 2665,\n 2403,\n 2154,\n 3942,\n 3695,\n 3429,\n 3180,\n 876,\n 613,\n 367,\n 102,\n 1898,\n 1635,\n 1385,\n 1120,\n 3232,\n 3497,\n 3747,\n 4010,\n 2214,\n 2479,\n 2725,\n 2988,\n 1196,\n 1445,\n 1711,\n 1958,\n 170,\n 419,\n 681,\n 928,\n 3376,\n 3129,\n 3891,\n 3642,\n 2358,\n 2111,\n 2869,\n 2620,\n 1340,\n 1077,\n 1855,\n 1590,\n 314,\n 51,\n 825,\n 560,\n 3728,\n 3993,\n 3219,\n 3482,\n 2710,\n 2975,\n 2197,\n 2460,\n 1692,\n 1941,\n 1183,\n 1430,\n 666,\n 915,\n 153,\n 400,\n 3840,\n 3593,\n 3331,\n 3082,\n 2822,\n 2575,\n 2309,\n 2060,\n 1804,\n 1541,\n 1295,\n 1030,\n 778,\n 515,\n 265,\n 0\n]);\nconst triTable = new Int32Array([\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 8,\n 3,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 1,\n 9,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 8,\n 3,\n 9,\n 8,\n 1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 2,\n 10,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 8,\n 3,\n 1,\n 2,\n 10,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 2,\n 10,\n 0,\n 2,\n 9,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 2,\n 8,\n 3,\n 2,\n 10,\n 8,\n 10,\n 9,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 11,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 11,\n 2,\n 8,\n 11,\n 0,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 9,\n 0,\n 2,\n 3,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 11,\n 2,\n 1,\n 9,\n 11,\n 9,\n 8,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 10,\n 1,\n 11,\n 10,\n 3,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 10,\n 1,\n 0,\n 8,\n 10,\n 8,\n 11,\n 10,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 9,\n 0,\n 3,\n 11,\n 9,\n 11,\n 10,\n 9,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 8,\n 10,\n 10,\n 8,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 7,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 3,\n 0,\n 7,\n 3,\n 4,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 1,\n 9,\n 8,\n 4,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 1,\n 9,\n 4,\n 7,\n 1,\n 7,\n 3,\n 1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 2,\n 10,\n 8,\n 4,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 4,\n 7,\n 3,\n 0,\n 4,\n 1,\n 2,\n 10,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 2,\n 10,\n 9,\n 0,\n 2,\n 8,\n 4,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 2,\n 10,\n 9,\n 2,\n 9,\n 7,\n 2,\n 7,\n 3,\n 7,\n 9,\n 4,\n -1,\n -1,\n -1,\n -1,\n 8,\n 4,\n 7,\n 3,\n 11,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 11,\n 4,\n 7,\n 11,\n 2,\n 4,\n 2,\n 0,\n 4,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 0,\n 1,\n 8,\n 4,\n 7,\n 2,\n 3,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 7,\n 11,\n 9,\n 4,\n 11,\n 9,\n 11,\n 2,\n 9,\n 2,\n 1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 10,\n 1,\n 3,\n 11,\n 10,\n 7,\n 8,\n 4,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 11,\n 10,\n 1,\n 4,\n 11,\n 1,\n 0,\n 4,\n 7,\n 11,\n 4,\n -1,\n -1,\n -1,\n -1,\n 4,\n 7,\n 8,\n 9,\n 0,\n 11,\n 9,\n 11,\n 10,\n 11,\n 0,\n 3,\n -1,\n -1,\n -1,\n -1,\n 4,\n 7,\n 11,\n 4,\n 11,\n 9,\n 9,\n 11,\n 10,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 5,\n 4,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 5,\n 4,\n 0,\n 8,\n 3,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 5,\n 4,\n 1,\n 5,\n 0,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 8,\n 5,\n 4,\n 8,\n 3,\n 5,\n 3,\n 1,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 2,\n 10,\n 9,\n 5,\n 4,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 0,\n 8,\n 1,\n 2,\n 10,\n 4,\n 9,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 5,\n 2,\n 10,\n 5,\n 4,\n 2,\n 4,\n 0,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 2,\n 10,\n 5,\n 3,\n 2,\n 5,\n 3,\n 5,\n 4,\n 3,\n 4,\n 8,\n -1,\n -1,\n -1,\n -1,\n 9,\n 5,\n 4,\n 2,\n 3,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 11,\n 2,\n 0,\n 8,\n 11,\n 4,\n 9,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 5,\n 4,\n 0,\n 1,\n 5,\n 2,\n 3,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 2,\n 1,\n 5,\n 2,\n 5,\n 8,\n 2,\n 8,\n 11,\n 4,\n 8,\n 5,\n -1,\n -1,\n -1,\n -1,\n 10,\n 3,\n 11,\n 10,\n 1,\n 3,\n 9,\n 5,\n 4,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 9,\n 5,\n 0,\n 8,\n 1,\n 8,\n 10,\n 1,\n 8,\n 11,\n 10,\n -1,\n -1,\n -1,\n -1,\n 5,\n 4,\n 0,\n 5,\n 0,\n 11,\n 5,\n 11,\n 10,\n 11,\n 0,\n 3,\n -1,\n -1,\n -1,\n -1,\n 5,\n 4,\n 8,\n 5,\n 8,\n 10,\n 10,\n 8,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 7,\n 8,\n 5,\n 7,\n 9,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 3,\n 0,\n 9,\n 5,\n 3,\n 5,\n 7,\n 3,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 7,\n 8,\n 0,\n 1,\n 7,\n 1,\n 5,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 5,\n 3,\n 3,\n 5,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 7,\n 8,\n 9,\n 5,\n 7,\n 10,\n 1,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 10,\n 1,\n 2,\n 9,\n 5,\n 0,\n 5,\n 3,\n 0,\n 5,\n 7,\n 3,\n -1,\n -1,\n -1,\n -1,\n 8,\n 0,\n 2,\n 8,\n 2,\n 5,\n 8,\n 5,\n 7,\n 10,\n 5,\n 2,\n -1,\n -1,\n -1,\n -1,\n 2,\n 10,\n 5,\n 2,\n 5,\n 3,\n 3,\n 5,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 7,\n 9,\n 5,\n 7,\n 8,\n 9,\n 3,\n 11,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 5,\n 7,\n 9,\n 7,\n 2,\n 9,\n 2,\n 0,\n 2,\n 7,\n 11,\n -1,\n -1,\n -1,\n -1,\n 2,\n 3,\n 11,\n 0,\n 1,\n 8,\n 1,\n 7,\n 8,\n 1,\n 5,\n 7,\n -1,\n -1,\n -1,\n -1,\n 11,\n 2,\n 1,\n 11,\n 1,\n 7,\n 7,\n 1,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 5,\n 8,\n 8,\n 5,\n 7,\n 10,\n 1,\n 3,\n 10,\n 3,\n 11,\n -1,\n -1,\n -1,\n -1,\n 5,\n 7,\n 0,\n 5,\n 0,\n 9,\n 7,\n 11,\n 0,\n 1,\n 0,\n 10,\n 11,\n 10,\n 0,\n -1,\n 11,\n 10,\n 0,\n 11,\n 0,\n 3,\n 10,\n 5,\n 0,\n 8,\n 0,\n 7,\n 5,\n 7,\n 0,\n -1,\n 11,\n 10,\n 5,\n 7,\n 11,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 10,\n 6,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 8,\n 3,\n 5,\n 10,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 0,\n 1,\n 5,\n 10,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 8,\n 3,\n 1,\n 9,\n 8,\n 5,\n 10,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 6,\n 5,\n 2,\n 6,\n 1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 6,\n 5,\n 1,\n 2,\n 6,\n 3,\n 0,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 6,\n 5,\n 9,\n 0,\n 6,\n 0,\n 2,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 5,\n 9,\n 8,\n 5,\n 8,\n 2,\n 5,\n 2,\n 6,\n 3,\n 2,\n 8,\n -1,\n -1,\n -1,\n -1,\n 2,\n 3,\n 11,\n 10,\n 6,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 11,\n 0,\n 8,\n 11,\n 2,\n 0,\n 10,\n 6,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 1,\n 9,\n 2,\n 3,\n 11,\n 5,\n 10,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 5,\n 10,\n 6,\n 1,\n 9,\n 2,\n 9,\n 11,\n 2,\n 9,\n 8,\n 11,\n -1,\n -1,\n -1,\n -1,\n 6,\n 3,\n 11,\n 6,\n 5,\n 3,\n 5,\n 1,\n 3,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 8,\n 11,\n 0,\n 11,\n 5,\n 0,\n 5,\n 1,\n 5,\n 11,\n 6,\n -1,\n -1,\n -1,\n -1,\n 3,\n 11,\n 6,\n 0,\n 3,\n 6,\n 0,\n 6,\n 5,\n 0,\n 5,\n 9,\n -1,\n -1,\n -1,\n -1,\n 6,\n 5,\n 9,\n 6,\n 9,\n 11,\n 11,\n 9,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 5,\n 10,\n 6,\n 4,\n 7,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 3,\n 0,\n 4,\n 7,\n 3,\n 6,\n 5,\n 10,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 9,\n 0,\n 5,\n 10,\n 6,\n 8,\n 4,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 10,\n 6,\n 5,\n 1,\n 9,\n 7,\n 1,\n 7,\n 3,\n 7,\n 9,\n 4,\n -1,\n -1,\n -1,\n -1,\n 6,\n 1,\n 2,\n 6,\n 5,\n 1,\n 4,\n 7,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 2,\n 5,\n 5,\n 2,\n 6,\n 3,\n 0,\n 4,\n 3,\n 4,\n 7,\n -1,\n -1,\n -1,\n -1,\n 8,\n 4,\n 7,\n 9,\n 0,\n 5,\n 0,\n 6,\n 5,\n 0,\n 2,\n 6,\n -1,\n -1,\n -1,\n -1,\n 7,\n 3,\n 9,\n 7,\n 9,\n 4,\n 3,\n 2,\n 9,\n 5,\n 9,\n 6,\n 2,\n 6,\n 9,\n -1,\n 3,\n 11,\n 2,\n 7,\n 8,\n 4,\n 10,\n 6,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 5,\n 10,\n 6,\n 4,\n 7,\n 2,\n 4,\n 2,\n 0,\n 2,\n 7,\n 11,\n -1,\n -1,\n -1,\n -1,\n 0,\n 1,\n 9,\n 4,\n 7,\n 8,\n 2,\n 3,\n 11,\n 5,\n 10,\n 6,\n -1,\n -1,\n -1,\n -1,\n 9,\n 2,\n 1,\n 9,\n 11,\n 2,\n 9,\n 4,\n 11,\n 7,\n 11,\n 4,\n 5,\n 10,\n 6,\n -1,\n 8,\n 4,\n 7,\n 3,\n 11,\n 5,\n 3,\n 5,\n 1,\n 5,\n 11,\n 6,\n -1,\n -1,\n -1,\n -1,\n 5,\n 1,\n 11,\n 5,\n 11,\n 6,\n 1,\n 0,\n 11,\n 7,\n 11,\n 4,\n 0,\n 4,\n 11,\n -1,\n 0,\n 5,\n 9,\n 0,\n 6,\n 5,\n 0,\n 3,\n 6,\n 11,\n 6,\n 3,\n 8,\n 4,\n 7,\n -1,\n 6,\n 5,\n 9,\n 6,\n 9,\n 11,\n 4,\n 7,\n 9,\n 7,\n 11,\n 9,\n -1,\n -1,\n -1,\n -1,\n 10,\n 4,\n 9,\n 6,\n 4,\n 10,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 10,\n 6,\n 4,\n 9,\n 10,\n 0,\n 8,\n 3,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 10,\n 0,\n 1,\n 10,\n 6,\n 0,\n 6,\n 4,\n 0,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 8,\n 3,\n 1,\n 8,\n 1,\n 6,\n 8,\n 6,\n 4,\n 6,\n 1,\n 10,\n -1,\n -1,\n -1,\n -1,\n 1,\n 4,\n 9,\n 1,\n 2,\n 4,\n 2,\n 6,\n 4,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 0,\n 8,\n 1,\n 2,\n 9,\n 2,\n 4,\n 9,\n 2,\n 6,\n 4,\n -1,\n -1,\n -1,\n -1,\n 0,\n 2,\n 4,\n 4,\n 2,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 8,\n 3,\n 2,\n 8,\n 2,\n 4,\n 4,\n 2,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 10,\n 4,\n 9,\n 10,\n 6,\n 4,\n 11,\n 2,\n 3,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 8,\n 2,\n 2,\n 8,\n 11,\n 4,\n 9,\n 10,\n 4,\n 10,\n 6,\n -1,\n -1,\n -1,\n -1,\n 3,\n 11,\n 2,\n 0,\n 1,\n 6,\n 0,\n 6,\n 4,\n 6,\n 1,\n 10,\n -1,\n -1,\n -1,\n -1,\n 6,\n 4,\n 1,\n 6,\n 1,\n 10,\n 4,\n 8,\n 1,\n 2,\n 1,\n 11,\n 8,\n 11,\n 1,\n -1,\n 9,\n 6,\n 4,\n 9,\n 3,\n 6,\n 9,\n 1,\n 3,\n 11,\n 6,\n 3,\n -1,\n -1,\n -1,\n -1,\n 8,\n 11,\n 1,\n 8,\n 1,\n 0,\n 11,\n 6,\n 1,\n 9,\n 1,\n 4,\n 6,\n 4,\n 1,\n -1,\n 3,\n 11,\n 6,\n 3,\n 6,\n 0,\n 0,\n 6,\n 4,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 6,\n 4,\n 8,\n 11,\n 6,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 7,\n 10,\n 6,\n 7,\n 8,\n 10,\n 8,\n 9,\n 10,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 7,\n 3,\n 0,\n 10,\n 7,\n 0,\n 9,\n 10,\n 6,\n 7,\n 10,\n -1,\n -1,\n -1,\n -1,\n 10,\n 6,\n 7,\n 1,\n 10,\n 7,\n 1,\n 7,\n 8,\n 1,\n 8,\n 0,\n -1,\n -1,\n -1,\n -1,\n 10,\n 6,\n 7,\n 10,\n 7,\n 1,\n 1,\n 7,\n 3,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 2,\n 6,\n 1,\n 6,\n 8,\n 1,\n 8,\n 9,\n 8,\n 6,\n 7,\n -1,\n -1,\n -1,\n -1,\n 2,\n 6,\n 9,\n 2,\n 9,\n 1,\n 6,\n 7,\n 9,\n 0,\n 9,\n 3,\n 7,\n 3,\n 9,\n -1,\n 7,\n 8,\n 0,\n 7,\n 0,\n 6,\n 6,\n 0,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 7,\n 3,\n 2,\n 6,\n 7,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 2,\n 3,\n 11,\n 10,\n 6,\n 8,\n 10,\n 8,\n 9,\n 8,\n 6,\n 7,\n -1,\n -1,\n -1,\n -1,\n 2,\n 0,\n 7,\n 2,\n 7,\n 11,\n 0,\n 9,\n 7,\n 6,\n 7,\n 10,\n 9,\n 10,\n 7,\n -1,\n 1,\n 8,\n 0,\n 1,\n 7,\n 8,\n 1,\n 10,\n 7,\n 6,\n 7,\n 10,\n 2,\n 3,\n 11,\n -1,\n 11,\n 2,\n 1,\n 11,\n 1,\n 7,\n 10,\n 6,\n 1,\n 6,\n 7,\n 1,\n -1,\n -1,\n -1,\n -1,\n 8,\n 9,\n 6,\n 8,\n 6,\n 7,\n 9,\n 1,\n 6,\n 11,\n 6,\n 3,\n 1,\n 3,\n 6,\n -1,\n 0,\n 9,\n 1,\n 11,\n 6,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 7,\n 8,\n 0,\n 7,\n 0,\n 6,\n 3,\n 11,\n 0,\n 11,\n 6,\n 0,\n -1,\n -1,\n -1,\n -1,\n 7,\n 11,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 7,\n 6,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 0,\n 8,\n 11,\n 7,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 1,\n 9,\n 11,\n 7,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 8,\n 1,\n 9,\n 8,\n 3,\n 1,\n 11,\n 7,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 10,\n 1,\n 2,\n 6,\n 11,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 2,\n 10,\n 3,\n 0,\n 8,\n 6,\n 11,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 2,\n 9,\n 0,\n 2,\n 10,\n 9,\n 6,\n 11,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 6,\n 11,\n 7,\n 2,\n 10,\n 3,\n 10,\n 8,\n 3,\n 10,\n 9,\n 8,\n -1,\n -1,\n -1,\n -1,\n 7,\n 2,\n 3,\n 6,\n 2,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 7,\n 0,\n 8,\n 7,\n 6,\n 0,\n 6,\n 2,\n 0,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 2,\n 7,\n 6,\n 2,\n 3,\n 7,\n 0,\n 1,\n 9,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 6,\n 2,\n 1,\n 8,\n 6,\n 1,\n 9,\n 8,\n 8,\n 7,\n 6,\n -1,\n -1,\n -1,\n -1,\n 10,\n 7,\n 6,\n 10,\n 1,\n 7,\n 1,\n 3,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 10,\n 7,\n 6,\n 1,\n 7,\n 10,\n 1,\n 8,\n 7,\n 1,\n 0,\n 8,\n -1,\n -1,\n -1,\n -1,\n 0,\n 3,\n 7,\n 0,\n 7,\n 10,\n 0,\n 10,\n 9,\n 6,\n 10,\n 7,\n -1,\n -1,\n -1,\n -1,\n 7,\n 6,\n 10,\n 7,\n 10,\n 8,\n 8,\n 10,\n 9,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 6,\n 8,\n 4,\n 11,\n 8,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 6,\n 11,\n 3,\n 0,\n 6,\n 0,\n 4,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 8,\n 6,\n 11,\n 8,\n 4,\n 6,\n 9,\n 0,\n 1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 4,\n 6,\n 9,\n 6,\n 3,\n 9,\n 3,\n 1,\n 11,\n 3,\n 6,\n -1,\n -1,\n -1,\n -1,\n 6,\n 8,\n 4,\n 6,\n 11,\n 8,\n 2,\n 10,\n 1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 2,\n 10,\n 3,\n 0,\n 11,\n 0,\n 6,\n 11,\n 0,\n 4,\n 6,\n -1,\n -1,\n -1,\n -1,\n 4,\n 11,\n 8,\n 4,\n 6,\n 11,\n 0,\n 2,\n 9,\n 2,\n 10,\n 9,\n -1,\n -1,\n -1,\n -1,\n 10,\n 9,\n 3,\n 10,\n 3,\n 2,\n 9,\n 4,\n 3,\n 11,\n 3,\n 6,\n 4,\n 6,\n 3,\n -1,\n 8,\n 2,\n 3,\n 8,\n 4,\n 2,\n 4,\n 6,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 4,\n 2,\n 4,\n 6,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 9,\n 0,\n 2,\n 3,\n 4,\n 2,\n 4,\n 6,\n 4,\n 3,\n 8,\n -1,\n -1,\n -1,\n -1,\n 1,\n 9,\n 4,\n 1,\n 4,\n 2,\n 2,\n 4,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 8,\n 1,\n 3,\n 8,\n 6,\n 1,\n 8,\n 4,\n 6,\n 6,\n 10,\n 1,\n -1,\n -1,\n -1,\n -1,\n 10,\n 1,\n 0,\n 10,\n 0,\n 6,\n 6,\n 0,\n 4,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 6,\n 3,\n 4,\n 3,\n 8,\n 6,\n 10,\n 3,\n 0,\n 3,\n 9,\n 10,\n 9,\n 3,\n -1,\n 10,\n 9,\n 4,\n 6,\n 10,\n 4,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 9,\n 5,\n 7,\n 6,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 8,\n 3,\n 4,\n 9,\n 5,\n 11,\n 7,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 5,\n 0,\n 1,\n 5,\n 4,\n 0,\n 7,\n 6,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 11,\n 7,\n 6,\n 8,\n 3,\n 4,\n 3,\n 5,\n 4,\n 3,\n 1,\n 5,\n -1,\n -1,\n -1,\n -1,\n 9,\n 5,\n 4,\n 10,\n 1,\n 2,\n 7,\n 6,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 6,\n 11,\n 7,\n 1,\n 2,\n 10,\n 0,\n 8,\n 3,\n 4,\n 9,\n 5,\n -1,\n -1,\n -1,\n -1,\n 7,\n 6,\n 11,\n 5,\n 4,\n 10,\n 4,\n 2,\n 10,\n 4,\n 0,\n 2,\n -1,\n -1,\n -1,\n -1,\n 3,\n 4,\n 8,\n 3,\n 5,\n 4,\n 3,\n 2,\n 5,\n 10,\n 5,\n 2,\n 11,\n 7,\n 6,\n -1,\n 7,\n 2,\n 3,\n 7,\n 6,\n 2,\n 5,\n 4,\n 9,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 5,\n 4,\n 0,\n 8,\n 6,\n 0,\n 6,\n 2,\n 6,\n 8,\n 7,\n -1,\n -1,\n -1,\n -1,\n 3,\n 6,\n 2,\n 3,\n 7,\n 6,\n 1,\n 5,\n 0,\n 5,\n 4,\n 0,\n -1,\n -1,\n -1,\n -1,\n 6,\n 2,\n 8,\n 6,\n 8,\n 7,\n 2,\n 1,\n 8,\n 4,\n 8,\n 5,\n 1,\n 5,\n 8,\n -1,\n 9,\n 5,\n 4,\n 10,\n 1,\n 6,\n 1,\n 7,\n 6,\n 1,\n 3,\n 7,\n -1,\n -1,\n -1,\n -1,\n 1,\n 6,\n 10,\n 1,\n 7,\n 6,\n 1,\n 0,\n 7,\n 8,\n 7,\n 0,\n 9,\n 5,\n 4,\n -1,\n 4,\n 0,\n 10,\n 4,\n 10,\n 5,\n 0,\n 3,\n 10,\n 6,\n 10,\n 7,\n 3,\n 7,\n 10,\n -1,\n 7,\n 6,\n 10,\n 7,\n 10,\n 8,\n 5,\n 4,\n 10,\n 4,\n 8,\n 10,\n -1,\n -1,\n -1,\n -1,\n 6,\n 9,\n 5,\n 6,\n 11,\n 9,\n 11,\n 8,\n 9,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 6,\n 11,\n 0,\n 6,\n 3,\n 0,\n 5,\n 6,\n 0,\n 9,\n 5,\n -1,\n -1,\n -1,\n -1,\n 0,\n 11,\n 8,\n 0,\n 5,\n 11,\n 0,\n 1,\n 5,\n 5,\n 6,\n 11,\n -1,\n -1,\n -1,\n -1,\n 6,\n 11,\n 3,\n 6,\n 3,\n 5,\n 5,\n 3,\n 1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 2,\n 10,\n 9,\n 5,\n 11,\n 9,\n 11,\n 8,\n 11,\n 5,\n 6,\n -1,\n -1,\n -1,\n -1,\n 0,\n 11,\n 3,\n 0,\n 6,\n 11,\n 0,\n 9,\n 6,\n 5,\n 6,\n 9,\n 1,\n 2,\n 10,\n -1,\n 11,\n 8,\n 5,\n 11,\n 5,\n 6,\n 8,\n 0,\n 5,\n 10,\n 5,\n 2,\n 0,\n 2,\n 5,\n -1,\n 6,\n 11,\n 3,\n 6,\n 3,\n 5,\n 2,\n 10,\n 3,\n 10,\n 5,\n 3,\n -1,\n -1,\n -1,\n -1,\n 5,\n 8,\n 9,\n 5,\n 2,\n 8,\n 5,\n 6,\n 2,\n 3,\n 8,\n 2,\n -1,\n -1,\n -1,\n -1,\n 9,\n 5,\n 6,\n 9,\n 6,\n 0,\n 0,\n 6,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 5,\n 8,\n 1,\n 8,\n 0,\n 5,\n 6,\n 8,\n 3,\n 8,\n 2,\n 6,\n 2,\n 8,\n -1,\n 1,\n 5,\n 6,\n 2,\n 1,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 3,\n 6,\n 1,\n 6,\n 10,\n 3,\n 8,\n 6,\n 5,\n 6,\n 9,\n 8,\n 9,\n 6,\n -1,\n 10,\n 1,\n 0,\n 10,\n 0,\n 6,\n 9,\n 5,\n 0,\n 5,\n 6,\n 0,\n -1,\n -1,\n -1,\n -1,\n 0,\n 3,\n 8,\n 5,\n 6,\n 10,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 10,\n 5,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 11,\n 5,\n 10,\n 7,\n 5,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 11,\n 5,\n 10,\n 11,\n 7,\n 5,\n 8,\n 3,\n 0,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 5,\n 11,\n 7,\n 5,\n 10,\n 11,\n 1,\n 9,\n 0,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 10,\n 7,\n 5,\n 10,\n 11,\n 7,\n 9,\n 8,\n 1,\n 8,\n 3,\n 1,\n -1,\n -1,\n -1,\n -1,\n 11,\n 1,\n 2,\n 11,\n 7,\n 1,\n 7,\n 5,\n 1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 8,\n 3,\n 1,\n 2,\n 7,\n 1,\n 7,\n 5,\n 7,\n 2,\n 11,\n -1,\n -1,\n -1,\n -1,\n 9,\n 7,\n 5,\n 9,\n 2,\n 7,\n 9,\n 0,\n 2,\n 2,\n 11,\n 7,\n -1,\n -1,\n -1,\n -1,\n 7,\n 5,\n 2,\n 7,\n 2,\n 11,\n 5,\n 9,\n 2,\n 3,\n 2,\n 8,\n 9,\n 8,\n 2,\n -1,\n 2,\n 5,\n 10,\n 2,\n 3,\n 5,\n 3,\n 7,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 8,\n 2,\n 0,\n 8,\n 5,\n 2,\n 8,\n 7,\n 5,\n 10,\n 2,\n 5,\n -1,\n -1,\n -1,\n -1,\n 9,\n 0,\n 1,\n 5,\n 10,\n 3,\n 5,\n 3,\n 7,\n 3,\n 10,\n 2,\n -1,\n -1,\n -1,\n -1,\n 9,\n 8,\n 2,\n 9,\n 2,\n 1,\n 8,\n 7,\n 2,\n 10,\n 2,\n 5,\n 7,\n 5,\n 2,\n -1,\n 1,\n 3,\n 5,\n 3,\n 7,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 8,\n 7,\n 0,\n 7,\n 1,\n 1,\n 7,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 0,\n 3,\n 9,\n 3,\n 5,\n 5,\n 3,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 8,\n 7,\n 5,\n 9,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 5,\n 8,\n 4,\n 5,\n 10,\n 8,\n 10,\n 11,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 5,\n 0,\n 4,\n 5,\n 11,\n 0,\n 5,\n 10,\n 11,\n 11,\n 3,\n 0,\n -1,\n -1,\n -1,\n -1,\n 0,\n 1,\n 9,\n 8,\n 4,\n 10,\n 8,\n 10,\n 11,\n 10,\n 4,\n 5,\n -1,\n -1,\n -1,\n -1,\n 10,\n 11,\n 4,\n 10,\n 4,\n 5,\n 11,\n 3,\n 4,\n 9,\n 4,\n 1,\n 3,\n 1,\n 4,\n -1,\n 2,\n 5,\n 1,\n 2,\n 8,\n 5,\n 2,\n 11,\n 8,\n 4,\n 5,\n 8,\n -1,\n -1,\n -1,\n -1,\n 0,\n 4,\n 11,\n 0,\n 11,\n 3,\n 4,\n 5,\n 11,\n 2,\n 11,\n 1,\n 5,\n 1,\n 11,\n -1,\n 0,\n 2,\n 5,\n 0,\n 5,\n 9,\n 2,\n 11,\n 5,\n 4,\n 5,\n 8,\n 11,\n 8,\n 5,\n -1,\n 9,\n 4,\n 5,\n 2,\n 11,\n 3,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 2,\n 5,\n 10,\n 3,\n 5,\n 2,\n 3,\n 4,\n 5,\n 3,\n 8,\n 4,\n -1,\n -1,\n -1,\n -1,\n 5,\n 10,\n 2,\n 5,\n 2,\n 4,\n 4,\n 2,\n 0,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 10,\n 2,\n 3,\n 5,\n 10,\n 3,\n 8,\n 5,\n 4,\n 5,\n 8,\n 0,\n 1,\n 9,\n -1,\n 5,\n 10,\n 2,\n 5,\n 2,\n 4,\n 1,\n 9,\n 2,\n 9,\n 4,\n 2,\n -1,\n -1,\n -1,\n -1,\n 8,\n 4,\n 5,\n 8,\n 5,\n 3,\n 3,\n 5,\n 1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 4,\n 5,\n 1,\n 0,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 8,\n 4,\n 5,\n 8,\n 5,\n 3,\n 9,\n 0,\n 5,\n 0,\n 3,\n 5,\n -1,\n -1,\n -1,\n -1,\n 9,\n 4,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 11,\n 7,\n 4,\n 9,\n 11,\n 9,\n 10,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 8,\n 3,\n 4,\n 9,\n 7,\n 9,\n 11,\n 7,\n 9,\n 10,\n 11,\n -1,\n -1,\n -1,\n -1,\n 1,\n 10,\n 11,\n 1,\n 11,\n 4,\n 1,\n 4,\n 0,\n 7,\n 4,\n 11,\n -1,\n -1,\n -1,\n -1,\n 3,\n 1,\n 4,\n 3,\n 4,\n 8,\n 1,\n 10,\n 4,\n 7,\n 4,\n 11,\n 10,\n 11,\n 4,\n -1,\n 4,\n 11,\n 7,\n 9,\n 11,\n 4,\n 9,\n 2,\n 11,\n 9,\n 1,\n 2,\n -1,\n -1,\n -1,\n -1,\n 9,\n 7,\n 4,\n 9,\n 11,\n 7,\n 9,\n 1,\n 11,\n 2,\n 11,\n 1,\n 0,\n 8,\n 3,\n -1,\n 11,\n 7,\n 4,\n 11,\n 4,\n 2,\n 2,\n 4,\n 0,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 11,\n 7,\n 4,\n 11,\n 4,\n 2,\n 8,\n 3,\n 4,\n 3,\n 2,\n 4,\n -1,\n -1,\n -1,\n -1,\n 2,\n 9,\n 10,\n 2,\n 7,\n 9,\n 2,\n 3,\n 7,\n 7,\n 4,\n 9,\n -1,\n -1,\n -1,\n -1,\n 9,\n 10,\n 7,\n 9,\n 7,\n 4,\n 10,\n 2,\n 7,\n 8,\n 7,\n 0,\n 2,\n 0,\n 7,\n -1,\n 3,\n 7,\n 10,\n 3,\n 10,\n 2,\n 7,\n 4,\n 10,\n 1,\n 10,\n 0,\n 4,\n 0,\n 10,\n -1,\n 1,\n 10,\n 2,\n 8,\n 7,\n 4,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 9,\n 1,\n 4,\n 1,\n 7,\n 7,\n 1,\n 3,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 9,\n 1,\n 4,\n 1,\n 7,\n 0,\n 8,\n 1,\n 8,\n 7,\n 1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 0,\n 3,\n 7,\n 4,\n 3,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 8,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 10,\n 8,\n 10,\n 11,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 0,\n 9,\n 3,\n 9,\n 11,\n 11,\n 9,\n 10,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 1,\n 10,\n 0,\n 10,\n 8,\n 8,\n 10,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 1,\n 10,\n 11,\n 3,\n 10,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 2,\n 11,\n 1,\n 11,\n 9,\n 9,\n 11,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 0,\n 9,\n 3,\n 9,\n 11,\n 1,\n 2,\n 9,\n 2,\n 11,\n 9,\n -1,\n -1,\n -1,\n -1,\n 0,\n 2,\n 11,\n 8,\n 0,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 2,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 2,\n 3,\n 8,\n 2,\n 8,\n 10,\n 10,\n 8,\n 9,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 10,\n 2,\n 0,\n 9,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 2,\n 3,\n 8,\n 2,\n 8,\n 10,\n 0,\n 1,\n 8,\n 1,\n 10,\n 8,\n -1,\n -1,\n -1,\n -1,\n 1,\n 10,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 3,\n 8,\n 9,\n 1,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 9,\n 1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 3,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1\n]);\nexport {\n MarchingCubes,\n edgeTable,\n triTable\n};\n//# sourceMappingURL=MarchingCubes.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nclass SimplexNoise {\n /**\n * You can pass in a random number generator object if you like.\n * It is assumed to have a random() method.\n */\n constructor(r = Math) {\n __publicField(this, \"grad3\", [\n [1, 1, 0],\n [-1, 1, 0],\n [1, -1, 0],\n [-1, -1, 0],\n [1, 0, 1],\n [-1, 0, 1],\n [1, 0, -1],\n [-1, 0, -1],\n [0, 1, 1],\n [0, -1, 1],\n [0, 1, -1],\n [0, -1, -1]\n ]);\n __publicField(this, \"grad4\", [\n [0, 1, 1, 1],\n [0, 1, 1, -1],\n [0, 1, -1, 1],\n [0, 1, -1, -1],\n [0, -1, 1, 1],\n [0, -1, 1, -1],\n [0, -1, -1, 1],\n [0, -1, -1, -1],\n [1, 0, 1, 1],\n [1, 0, 1, -1],\n [1, 0, -1, 1],\n [1, 0, -1, -1],\n [-1, 0, 1, 1],\n [-1, 0, 1, -1],\n [-1, 0, -1, 1],\n [-1, 0, -1, -1],\n [1, 1, 0, 1],\n [1, 1, 0, -1],\n [1, -1, 0, 1],\n [1, -1, 0, -1],\n [-1, 1, 0, 1],\n [-1, 1, 0, -1],\n [-1, -1, 0, 1],\n [-1, -1, 0, -1],\n [1, 1, 1, 0],\n [1, 1, -1, 0],\n [1, -1, 1, 0],\n [1, -1, -1, 0],\n [-1, 1, 1, 0],\n [-1, 1, -1, 0],\n [-1, -1, 1, 0],\n [-1, -1, -1, 0]\n ]);\n __publicField(this, \"p\", []);\n // To remove the need for index wrapping, double the permutation table length\n __publicField(this, \"perm\", []);\n // A lookup table to traverse the simplex around a given point in 4D.\n // Details can be found where this table is used, in the 4D noise method.\n __publicField(this, \"simplex\", [\n [0, 1, 2, 3],\n [0, 1, 3, 2],\n [0, 0, 0, 0],\n [0, 2, 3, 1],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [1, 2, 3, 0],\n [0, 2, 1, 3],\n [0, 0, 0, 0],\n [0, 3, 1, 2],\n [0, 3, 2, 1],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [1, 3, 2, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [1, 2, 0, 3],\n [0, 0, 0, 0],\n [1, 3, 0, 2],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [2, 3, 0, 1],\n [2, 3, 1, 0],\n [1, 0, 2, 3],\n [1, 0, 3, 2],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [2, 0, 3, 1],\n [0, 0, 0, 0],\n [2, 1, 3, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [2, 0, 1, 3],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [3, 0, 1, 2],\n [3, 0, 2, 1],\n [0, 0, 0, 0],\n [3, 1, 2, 0],\n [2, 1, 0, 3],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [3, 1, 0, 2],\n [0, 0, 0, 0],\n [3, 2, 0, 1],\n [3, 2, 1, 0]\n ]);\n __publicField(this, \"dot\", (g, x, y) => {\n return g[0] * x + g[1] * y;\n });\n __publicField(this, \"dot3\", (g, x, y, z) => {\n return g[0] * x + g[1] * y + g[2] * z;\n });\n __publicField(this, \"dot4\", (g, x, y, z, w) => {\n return g[0] * x + g[1] * y + g[2] * z + g[3] * w;\n });\n __publicField(this, \"noise\", (xin, yin) => {\n let n0;\n let n1;\n let n2;\n const F2 = 0.5 * (Math.sqrt(3) - 1);\n const s = (xin + yin) * F2;\n const i = Math.floor(xin + s);\n const j = Math.floor(yin + s);\n const G2 = (3 - Math.sqrt(3)) / 6;\n const t = (i + j) * G2;\n const X0 = i - t;\n const Y0 = j - t;\n const x0 = xin - X0;\n const y0 = yin - Y0;\n let i1 = 0;\n let j1 = 1;\n if (x0 > y0) {\n i1 = 1;\n j1 = 0;\n }\n const x1 = x0 - i1 + G2;\n const y1 = y0 - j1 + G2;\n const x2 = x0 - 1 + 2 * G2;\n const y2 = y0 - 1 + 2 * G2;\n const ii = i & 255;\n const jj = j & 255;\n const gi0 = this.perm[ii + this.perm[jj]] % 12;\n const gi1 = this.perm[ii + i1 + this.perm[jj + j1]] % 12;\n const gi2 = this.perm[ii + 1 + this.perm[jj + 1]] % 12;\n let t0 = 0.5 - x0 * x0 - y0 * y0;\n if (t0 < 0) {\n n0 = 0;\n } else {\n t0 *= t0;\n n0 = t0 * t0 * this.dot(this.grad3[gi0], x0, y0);\n }\n let t1 = 0.5 - x1 * x1 - y1 * y1;\n if (t1 < 0) {\n n1 = 0;\n } else {\n t1 *= t1;\n n1 = t1 * t1 * this.dot(this.grad3[gi1], x1, y1);\n }\n let t2 = 0.5 - x2 * x2 - y2 * y2;\n if (t2 < 0) {\n n2 = 0;\n } else {\n t2 *= t2;\n n2 = t2 * t2 * this.dot(this.grad3[gi2], x2, y2);\n }\n return 70 * (n0 + n1 + n2);\n });\n // 3D simplex noise\n __publicField(this, \"noise3d\", (xin, yin, zin) => {\n let n0;\n let n1;\n let n2;\n let n3;\n const F3 = 1 / 3;\n const s = (xin + yin + zin) * F3;\n const i = Math.floor(xin + s);\n const j = Math.floor(yin + s);\n const k = Math.floor(zin + s);\n const G3 = 1 / 6;\n const t = (i + j + k) * G3;\n const X0 = i - t;\n const Y0 = j - t;\n const Z0 = k - t;\n const x0 = xin - X0;\n const y0 = yin - Y0;\n const z0 = zin - Z0;\n let i1;\n let j1;\n let k1;\n let i2;\n let j2;\n let k2;\n if (x0 >= y0) {\n if (y0 >= z0) {\n i1 = 1;\n j1 = 0;\n k1 = 0;\n i2 = 1;\n j2 = 1;\n k2 = 0;\n } else if (x0 >= z0) {\n i1 = 1;\n j1 = 0;\n k1 = 0;\n i2 = 1;\n j2 = 0;\n k2 = 1;\n } else {\n i1 = 0;\n j1 = 0;\n k1 = 1;\n i2 = 1;\n j2 = 0;\n k2 = 1;\n }\n } else {\n if (y0 < z0) {\n i1 = 0;\n j1 = 0;\n k1 = 1;\n i2 = 0;\n j2 = 1;\n k2 = 1;\n } else if (x0 < z0) {\n i1 = 0;\n j1 = 1;\n k1 = 0;\n i2 = 0;\n j2 = 1;\n k2 = 1;\n } else {\n i1 = 0;\n j1 = 1;\n k1 = 0;\n i2 = 1;\n j2 = 1;\n k2 = 0;\n }\n }\n const x1 = x0 - i1 + G3;\n const y1 = y0 - j1 + G3;\n const z1 = z0 - k1 + G3;\n const x2 = x0 - i2 + 2 * G3;\n const y2 = y0 - j2 + 2 * G3;\n const z2 = z0 - k2 + 2 * G3;\n const x3 = x0 - 1 + 3 * G3;\n const y3 = y0 - 1 + 3 * G3;\n const z3 = z0 - 1 + 3 * G3;\n const ii = i & 255;\n const jj = j & 255;\n const kk = k & 255;\n const gi0 = this.perm[ii + this.perm[jj + this.perm[kk]]] % 12;\n const gi1 = this.perm[ii + i1 + this.perm[jj + j1 + this.perm[kk + k1]]] % 12;\n const gi2 = this.perm[ii + i2 + this.perm[jj + j2 + this.perm[kk + k2]]] % 12;\n const gi3 = this.perm[ii + 1 + this.perm[jj + 1 + this.perm[kk + 1]]] % 12;\n let t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0;\n if (t0 < 0) {\n n0 = 0;\n } else {\n t0 *= t0;\n n0 = t0 * t0 * this.dot3(this.grad3[gi0], x0, y0, z0);\n }\n let t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1;\n if (t1 < 0) {\n n1 = 0;\n } else {\n t1 *= t1;\n n1 = t1 * t1 * this.dot3(this.grad3[gi1], x1, y1, z1);\n }\n let t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2;\n if (t2 < 0) {\n n2 = 0;\n } else {\n t2 *= t2;\n n2 = t2 * t2 * this.dot3(this.grad3[gi2], x2, y2, z2);\n }\n let t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3;\n if (t3 < 0) {\n n3 = 0;\n } else {\n t3 *= t3;\n n3 = t3 * t3 * this.dot3(this.grad3[gi3], x3, y3, z3);\n }\n return 32 * (n0 + n1 + n2 + n3);\n });\n // 4D simplex noise\n __publicField(this, \"noise4d\", (x, y, z, w) => {\n const grad4 = this.grad4;\n const simplex = this.simplex;\n const perm = this.perm;\n const F4 = (Math.sqrt(5) - 1) / 4;\n const G4 = (5 - Math.sqrt(5)) / 20;\n let n0;\n let n1;\n let n2;\n let n3;\n let n4;\n const s = (x + y + z + w) * F4;\n const i = Math.floor(x + s);\n const j = Math.floor(y + s);\n const k = Math.floor(z + s);\n const l = Math.floor(w + s);\n const t = (i + j + k + l) * G4;\n const X0 = i - t;\n const Y0 = j - t;\n const Z0 = k - t;\n const W0 = l - t;\n const x0 = x - X0;\n const y0 = y - Y0;\n const z0 = z - Z0;\n const w0 = w - W0;\n const c1 = x0 > y0 ? 32 : 0;\n const c2 = x0 > z0 ? 16 : 0;\n const c3 = y0 > z0 ? 8 : 0;\n const c4 = x0 > w0 ? 4 : 0;\n const c5 = y0 > w0 ? 2 : 0;\n const c6 = z0 > w0 ? 1 : 0;\n const c = c1 + c2 + c3 + c4 + c5 + c6;\n let i1;\n let j1;\n let k1;\n let l1;\n let i2;\n let j2;\n let k2;\n let l2;\n let i3;\n let j3;\n let k3;\n let l3;\n i1 = simplex[c][0] >= 3 ? 1 : 0;\n j1 = simplex[c][1] >= 3 ? 1 : 0;\n k1 = simplex[c][2] >= 3 ? 1 : 0;\n l1 = simplex[c][3] >= 3 ? 1 : 0;\n i2 = simplex[c][0] >= 2 ? 1 : 0;\n j2 = simplex[c][1] >= 2 ? 1 : 0;\n k2 = simplex[c][2] >= 2 ? 1 : 0;\n l2 = simplex[c][3] >= 2 ? 1 : 0;\n i3 = simplex[c][0] >= 1 ? 1 : 0;\n j3 = simplex[c][1] >= 1 ? 1 : 0;\n k3 = simplex[c][2] >= 1 ? 1 : 0;\n l3 = simplex[c][3] >= 1 ? 1 : 0;\n const x1 = x0 - i1 + G4;\n const y1 = y0 - j1 + G4;\n const z1 = z0 - k1 + G4;\n const w1 = w0 - l1 + G4;\n const x2 = x0 - i2 + 2 * G4;\n const y2 = y0 - j2 + 2 * G4;\n const z2 = z0 - k2 + 2 * G4;\n const w2 = w0 - l2 + 2 * G4;\n const x3 = x0 - i3 + 3 * G4;\n const y3 = y0 - j3 + 3 * G4;\n const z3 = z0 - k3 + 3 * G4;\n const w3 = w0 - l3 + 3 * G4;\n const x4 = x0 - 1 + 4 * G4;\n const y4 = y0 - 1 + 4 * G4;\n const z4 = z0 - 1 + 4 * G4;\n const w4 = w0 - 1 + 4 * G4;\n const ii = i & 255;\n const jj = j & 255;\n const kk = k & 255;\n const ll = l & 255;\n const gi0 = perm[ii + perm[jj + perm[kk + perm[ll]]]] % 32;\n const gi1 = perm[ii + i1 + perm[jj + j1 + perm[kk + k1 + perm[ll + l1]]]] % 32;\n const gi2 = perm[ii + i2 + perm[jj + j2 + perm[kk + k2 + perm[ll + l2]]]] % 32;\n const gi3 = perm[ii + i3 + perm[jj + j3 + perm[kk + k3 + perm[ll + l3]]]] % 32;\n const gi4 = perm[ii + 1 + perm[jj + 1 + perm[kk + 1 + perm[ll + 1]]]] % 32;\n let t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0;\n if (t0 < 0) {\n n0 = 0;\n } else {\n t0 *= t0;\n n0 = t0 * t0 * this.dot4(grad4[gi0], x0, y0, z0, w0);\n }\n let t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1;\n if (t1 < 0) {\n n1 = 0;\n } else {\n t1 *= t1;\n n1 = t1 * t1 * this.dot4(grad4[gi1], x1, y1, z1, w1);\n }\n let t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2;\n if (t2 < 0) {\n n2 = 0;\n } else {\n t2 *= t2;\n n2 = t2 * t2 * this.dot4(grad4[gi2], x2, y2, z2, w2);\n }\n let t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3;\n if (t3 < 0) {\n n3 = 0;\n } else {\n t3 *= t3;\n n3 = t3 * t3 * this.dot4(grad4[gi3], x3, y3, z3, w3);\n }\n let t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4;\n if (t4 < 0) {\n n4 = 0;\n } else {\n t4 *= t4;\n n4 = t4 * t4 * this.dot4(grad4[gi4], x4, y4, z4, w4);\n }\n return 27 * (n0 + n1 + n2 + n3 + n4);\n });\n for (let i = 0; i < 256; i++) {\n this.p[i] = Math.floor(r.random() * 256);\n }\n for (let i = 0; i < 512; i++) {\n this.perm[i] = this.p[i & 255];\n }\n }\n}\nexport {\n SimplexNoise\n};\n//# sourceMappingURL=SimplexNoise.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Vector3, ShaderMaterial, UniformsUtils, BackSide, Mesh, BoxGeometry } from \"three\";\nimport { version } from \"../_polyfill/constants.js\";\nconst Sky = /* @__PURE__ */ (() => {\n const SkyShader = {\n uniforms: {\n turbidity: { value: 2 },\n rayleigh: { value: 1 },\n mieCoefficient: { value: 5e-3 },\n mieDirectionalG: { value: 0.8 },\n sunPosition: { value: new Vector3() },\n up: { value: new Vector3(0, 1, 0) }\n },\n vertexShader: (\n /* glsl */\n `\n uniform vec3 sunPosition;\n uniform float rayleigh;\n uniform float turbidity;\n uniform float mieCoefficient;\n uniform vec3 up;\n\n varying vec3 vWorldPosition;\n varying vec3 vSunDirection;\n varying float vSunfade;\n varying vec3 vBetaR;\n varying vec3 vBetaM;\n varying float vSunE;\n\n // constants for atmospheric scattering\n const float e = 2.71828182845904523536028747135266249775724709369995957;\n const float pi = 3.141592653589793238462643383279502884197169;\n\n // wavelength of used primaries, according to preetham\n const vec3 lambda = vec3( 680E-9, 550E-9, 450E-9 );\n // this pre-calcuation replaces older TotalRayleigh(vec3 lambda) function:\n // (8.0 * pow(pi, 3.0) * pow(pow(n, 2.0) - 1.0, 2.0) * (6.0 + 3.0 * pn)) / (3.0 * N * pow(lambda, vec3(4.0)) * (6.0 - 7.0 * pn))\n const vec3 totalRayleigh = vec3( 5.804542996261093E-6, 1.3562911419845635E-5, 3.0265902468824876E-5 );\n\n // mie stuff\n // K coefficient for the primaries\n const float v = 4.0;\n const vec3 K = vec3( 0.686, 0.678, 0.666 );\n // MieConst = pi * pow( ( 2.0 * pi ) / lambda, vec3( v - 2.0 ) ) * K\n const vec3 MieConst = vec3( 1.8399918514433978E14, 2.7798023919660528E14, 4.0790479543861094E14 );\n\n // earth shadow hack\n // cutoffAngle = pi / 1.95;\n const float cutoffAngle = 1.6110731556870734;\n const float steepness = 1.5;\n const float EE = 1000.0;\n\n float sunIntensity( float zenithAngleCos ) {\n zenithAngleCos = clamp( zenithAngleCos, -1.0, 1.0 );\n return EE * max( 0.0, 1.0 - pow( e, -( ( cutoffAngle - acos( zenithAngleCos ) ) / steepness ) ) );\n }\n\n vec3 totalMie( float T ) {\n float c = ( 0.2 * T ) * 10E-18;\n return 0.434 * c * MieConst;\n }\n\n void main() {\n\n vec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n vWorldPosition = worldPosition.xyz;\n\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n gl_Position.z = gl_Position.w; // set z to camera.far\n\n vSunDirection = normalize( sunPosition );\n\n vSunE = sunIntensity( dot( vSunDirection, up ) );\n\n vSunfade = 1.0 - clamp( 1.0 - exp( ( sunPosition.y / 450000.0 ) ), 0.0, 1.0 );\n\n float rayleighCoefficient = rayleigh - ( 1.0 * ( 1.0 - vSunfade ) );\n\n // extinction (absorbtion + out scattering)\n // rayleigh coefficients\n vBetaR = totalRayleigh * rayleighCoefficient;\n\n // mie coefficients\n vBetaM = totalMie( turbidity ) * mieCoefficient;\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n varying vec3 vWorldPosition;\n varying vec3 vSunDirection;\n varying float vSunfade;\n varying vec3 vBetaR;\n varying vec3 vBetaM;\n varying float vSunE;\n\n uniform float mieDirectionalG;\n uniform vec3 up;\n\n const vec3 cameraPos = vec3( 0.0, 0.0, 0.0 );\n\n // constants for atmospheric scattering\n const float pi = 3.141592653589793238462643383279502884197169;\n\n const float n = 1.0003; // refractive index of air\n const float N = 2.545E25; // number of molecules per unit volume for air at 288.15K and 1013mb (sea level -45 celsius)\n\n // optical length at zenith for molecules\n const float rayleighZenithLength = 8.4E3;\n const float mieZenithLength = 1.25E3;\n // 66 arc seconds -> degrees, and the cosine of that\n const float sunAngularDiameterCos = 0.999956676946448443553574619906976478926848692873900859324;\n\n // 3.0 / ( 16.0 * pi )\n const float THREE_OVER_SIXTEENPI = 0.05968310365946075;\n // 1.0 / ( 4.0 * pi )\n const float ONE_OVER_FOURPI = 0.07957747154594767;\n\n float rayleighPhase( float cosTheta ) {\n return THREE_OVER_SIXTEENPI * ( 1.0 + pow( cosTheta, 2.0 ) );\n }\n\n float hgPhase( float cosTheta, float g ) {\n float g2 = pow( g, 2.0 );\n float inverse = 1.0 / pow( 1.0 - 2.0 * g * cosTheta + g2, 1.5 );\n return ONE_OVER_FOURPI * ( ( 1.0 - g2 ) * inverse );\n }\n\n void main() {\n\n vec3 direction = normalize( vWorldPosition - cameraPos );\n\n // optical length\n // cutoff angle at 90 to avoid singularity in next formula.\n float zenithAngle = acos( max( 0.0, dot( up, direction ) ) );\n float inverse = 1.0 / ( cos( zenithAngle ) + 0.15 * pow( 93.885 - ( ( zenithAngle * 180.0 ) / pi ), -1.253 ) );\n float sR = rayleighZenithLength * inverse;\n float sM = mieZenithLength * inverse;\n\n // combined extinction factor\n vec3 Fex = exp( -( vBetaR * sR + vBetaM * sM ) );\n\n // in scattering\n float cosTheta = dot( direction, vSunDirection );\n\n float rPhase = rayleighPhase( cosTheta * 0.5 + 0.5 );\n vec3 betaRTheta = vBetaR * rPhase;\n\n float mPhase = hgPhase( cosTheta, mieDirectionalG );\n vec3 betaMTheta = vBetaM * mPhase;\n\n vec3 Lin = pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * ( 1.0 - Fex ), vec3( 1.5 ) );\n Lin *= mix( vec3( 1.0 ), pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * Fex, vec3( 1.0 / 2.0 ) ), clamp( pow( 1.0 - dot( up, vSunDirection ), 5.0 ), 0.0, 1.0 ) );\n\n // nightsky\n float theta = acos( direction.y ); // elevation --> y-axis, [-pi/2, pi/2]\n float phi = atan( direction.z, direction.x ); // azimuth --> x-axis [-pi/2, pi/2]\n vec2 uv = vec2( phi, theta ) / vec2( 2.0 * pi, pi ) + vec2( 0.5, 0.0 );\n vec3 L0 = vec3( 0.1 ) * Fex;\n\n // composition + solar disc\n float sundisk = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos + 0.00002, cosTheta );\n L0 += ( vSunE * 19000.0 * Fex ) * sundisk;\n\n vec3 texColor = ( Lin + L0 ) * 0.04 + vec3( 0.0, 0.0003, 0.00075 );\n\n vec3 retColor = pow( texColor, vec3( 1.0 / ( 1.2 + ( 1.2 * vSunfade ) ) ) );\n\n gl_FragColor = vec4( retColor, 1.0 );\n\n #include <tonemapping_fragment>\n #include <${version >= 154 ? \"colorspace_fragment\" : \"encodings_fragment\"}>\n\n }\n `\n )\n };\n const material = new ShaderMaterial({\n name: \"SkyShader\",\n fragmentShader: SkyShader.fragmentShader,\n vertexShader: SkyShader.vertexShader,\n uniforms: UniformsUtils.clone(SkyShader.uniforms),\n side: BackSide,\n depthWrite: false\n });\n class Sky2 extends Mesh {\n constructor() {\n super(new BoxGeometry(1, 1, 1), material);\n }\n }\n __publicField(Sky2, \"SkyShader\", SkyShader);\n __publicField(Sky2, \"material\", material);\n return Sky2;\n})();\nexport {\n Sky\n};\n//# sourceMappingURL=Sky.js.map\n","import { Mesh, IcosahedronGeometry, ShaderMaterial, DoubleSide } from \"three\";\nimport { version } from \"../_polyfill/constants.js\";\nconst isCubeTexture = (def) => def && def.isCubeTexture;\nclass GroundProjectedEnv extends Mesh {\n constructor(texture, options) {\n var _a, _b;\n const isCubeMap = isCubeTexture(texture);\n const w = (_b = isCubeMap ? (_a = texture.image[0]) == null ? void 0 : _a.width : texture.image.width) != null ? _b : 1024;\n const cubeSize = w / 4;\n const _lodMax = Math.floor(Math.log2(cubeSize));\n const _cubeSize = Math.pow(2, _lodMax);\n const width = 3 * Math.max(_cubeSize, 16 * 7);\n const height = 4 * _cubeSize;\n const defines = [\n isCubeMap ? \"#define ENVMAP_TYPE_CUBE\" : \"\",\n `#define CUBEUV_TEXEL_WIDTH ${1 / width}`,\n `#define CUBEUV_TEXEL_HEIGHT ${1 / height}`,\n `#define CUBEUV_MAX_MIP ${_lodMax}.0`\n ];\n const vertexShader = (\n /* glsl */\n `\n varying vec3 vWorldPosition;\n void main() \n {\n vec4 worldPosition = ( modelMatrix * vec4( position, 1.0 ) );\n vWorldPosition = worldPosition.xyz;\n \n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }\n `\n );\n const fragmentShader = defines.join(\"\\n\") + /* glsl */\n `\n #define ENVMAP_TYPE_CUBE_UV\n varying vec3 vWorldPosition;\n uniform float radius;\n uniform float height;\n uniform float angle;\n #ifdef ENVMAP_TYPE_CUBE\n uniform samplerCube map;\n #else\n uniform sampler2D map;\n #endif\n // From: https://www.shadertoy.com/view/4tsBD7\n float diskIntersectWithBackFaceCulling( vec3 ro, vec3 rd, vec3 c, vec3 n, float r ) \n {\n float d = dot ( rd, n );\n \n if( d > 0.0 ) { return 1e6; }\n \n vec3 o = ro - c;\n float t = - dot( n, o ) / d;\n vec3 q = o + rd * t;\n \n return ( dot( q, q ) < r * r ) ? t : 1e6;\n }\n // From: https://www.iquilezles.org/www/articles/intersectors/intersectors.htm\n float sphereIntersect( vec3 ro, vec3 rd, vec3 ce, float ra ) \n {\n vec3 oc = ro - ce;\n float b = dot( oc, rd );\n float c = dot( oc, oc ) - ra * ra;\n float h = b * b - c;\n \n if( h < 0.0 ) { return -1.0; }\n \n h = sqrt( h );\n \n return - b + h;\n }\n vec3 project() \n {\n vec3 p = normalize( vWorldPosition );\n vec3 camPos = cameraPosition;\n camPos.y -= height;\n float intersection = sphereIntersect( camPos, p, vec3( 0.0 ), radius );\n if( intersection > 0.0 ) {\n \n vec3 h = vec3( 0.0, - height, 0.0 );\n float intersection2 = diskIntersectWithBackFaceCulling( camPos, p, h, vec3( 0.0, 1.0, 0.0 ), radius );\n p = ( camPos + min( intersection, intersection2 ) * p ) / radius;\n } else {\n p = vec3( 0.0, 1.0, 0.0 );\n }\n return p;\n }\n #include <common>\n #include <cube_uv_reflection_fragment>\n void main() \n {\n vec3 projectedWorldPosition = project();\n \n #ifdef ENVMAP_TYPE_CUBE\n vec3 outcolor = textureCube( map, projectedWorldPosition ).rgb;\n #else\n vec3 direction = normalize( projectedWorldPosition );\n vec2 uv = equirectUv( direction );\n vec3 outcolor = texture2D( map, uv ).rgb;\n #endif\n gl_FragColor = vec4( outcolor, 1.0 );\n #include <tonemapping_fragment>\n #include <${version >= 154 ? \"colorspace_fragment\" : \"encodings_fragment\"}>\n }\n `;\n const uniforms = {\n map: { value: texture },\n height: { value: (options == null ? void 0 : options.height) || 15 },\n radius: { value: (options == null ? void 0 : options.radius) || 100 }\n };\n const geometry = new IcosahedronGeometry(1, 16);\n const material = new ShaderMaterial({\n uniforms,\n fragmentShader,\n vertexShader,\n side: DoubleSide\n });\n super(geometry, material);\n }\n set radius(radius) {\n this.material.uniforms.radius.value = radius;\n }\n get radius() {\n return this.material.uniforms.radius.value;\n }\n set height(height) {\n this.material.uniforms.height.value = height;\n }\n get height() {\n return this.material.uniforms.height.value;\n }\n}\nexport {\n GroundProjectedEnv\n};\n//# sourceMappingURL=GroundProjectedEnv.js.map\n","import { Vector3, Quaternion, Matrix4, AnimationMixer, VectorKeyframeTrack, QuaternionKeyframeTrack, AnimationClip, SkeletonHelper } from \"three\";\nfunction retarget(target, source, options = {}) {\n const pos = new Vector3(), quat = new Quaternion(), scale = new Vector3(), bindBoneMatrix = new Matrix4(), relativeMatrix = new Matrix4(), globalMatrix = new Matrix4();\n options.preserveMatrix = options.preserveMatrix !== void 0 ? options.preserveMatrix : true;\n options.preservePosition = options.preservePosition !== void 0 ? options.preservePosition : true;\n options.preserveHipPosition = options.preserveHipPosition !== void 0 ? options.preserveHipPosition : false;\n options.useTargetMatrix = options.useTargetMatrix !== void 0 ? options.useTargetMatrix : false;\n options.hip = options.hip !== void 0 ? options.hip : \"hip\";\n options.names = options.names || {};\n const sourceBones = source.isObject3D ? source.skeleton.bones : getBones(source), bones = target.isObject3D ? target.skeleton.bones : getBones(target);\n let bindBones, bone, name, boneTo, bonesPosition;\n if (target.isObject3D) {\n target.skeleton.pose();\n } else {\n options.useTargetMatrix = true;\n options.preserveMatrix = false;\n }\n if (options.preservePosition) {\n bonesPosition = [];\n for (let i = 0; i < bones.length; i++) {\n bonesPosition.push(bones[i].position.clone());\n }\n }\n if (options.preserveMatrix) {\n target.updateMatrixWorld();\n target.matrixWorld.identity();\n for (let i = 0; i < target.children.length; ++i) {\n target.children[i].updateMatrixWorld(true);\n }\n }\n if (options.offsets) {\n bindBones = [];\n for (let i = 0; i < bones.length; ++i) {\n bone = bones[i];\n name = options.names[bone.name] || bone.name;\n if (options.offsets[name]) {\n bone.matrix.multiply(options.offsets[name]);\n bone.matrix.decompose(bone.position, bone.quaternion, bone.scale);\n bone.updateMatrixWorld();\n }\n bindBones.push(bone.matrixWorld.clone());\n }\n }\n for (let i = 0; i < bones.length; ++i) {\n bone = bones[i];\n name = options.names[bone.name] || bone.name;\n boneTo = getBoneByName(name, sourceBones);\n globalMatrix.copy(bone.matrixWorld);\n if (boneTo) {\n boneTo.updateMatrixWorld();\n if (options.useTargetMatrix) {\n relativeMatrix.copy(boneTo.matrixWorld);\n } else {\n relativeMatrix.copy(target.matrixWorld).invert();\n relativeMatrix.multiply(boneTo.matrixWorld);\n }\n scale.setFromMatrixScale(relativeMatrix);\n relativeMatrix.scale(scale.set(1 / scale.x, 1 / scale.y, 1 / scale.z));\n globalMatrix.makeRotationFromQuaternion(quat.setFromRotationMatrix(relativeMatrix));\n if (target.isObject3D) {\n const boneIndex = bones.indexOf(bone), wBindMatrix = bindBones ? bindBones[boneIndex] : bindBoneMatrix.copy(target.skeleton.boneInverses[boneIndex]).invert();\n globalMatrix.multiply(wBindMatrix);\n }\n globalMatrix.copyPosition(relativeMatrix);\n }\n if (bone.parent && bone.parent.isBone) {\n bone.matrix.copy(bone.parent.matrixWorld).invert();\n bone.matrix.multiply(globalMatrix);\n } else {\n bone.matrix.copy(globalMatrix);\n }\n if (options.preserveHipPosition && name === options.hip) {\n bone.matrix.setPosition(pos.set(0, bone.position.y, 0));\n }\n bone.matrix.decompose(bone.position, bone.quaternion, bone.scale);\n bone.updateMatrixWorld();\n }\n if (options.preservePosition) {\n for (let i = 0; i < bones.length; ++i) {\n bone = bones[i];\n name = options.names[bone.name] || bone.name;\n if (name !== options.hip) {\n bone.position.copy(bonesPosition[i]);\n }\n }\n }\n if (options.preserveMatrix) {\n target.updateMatrixWorld(true);\n }\n}\nfunction retargetClip(target, source, clip, options = {}) {\n options.useFirstFramePosition = options.useFirstFramePosition !== void 0 ? options.useFirstFramePosition : false;\n options.fps = options.fps !== void 0 ? options.fps : 30;\n options.names = options.names || [];\n if (!source.isObject3D) {\n source = getHelperFromSkeleton(source);\n }\n const numFrames = Math.round(clip.duration * (options.fps / 1e3) * 1e3), delta = 1 / options.fps, convertedTracks = [], mixer = new AnimationMixer(source), bones = getBones(target.skeleton), boneDatas = [];\n let positionOffset, bone, boneTo, boneData, name;\n mixer.clipAction(clip).play();\n mixer.update(0);\n source.updateMatrixWorld();\n for (let i = 0; i < numFrames; ++i) {\n const time = i * delta;\n retarget(target, source, options);\n for (let j = 0; j < bones.length; ++j) {\n name = options.names[bones[j].name] || bones[j].name;\n boneTo = getBoneByName(name, source.skeleton);\n if (boneTo) {\n bone = bones[j];\n boneData = boneDatas[j] = boneDatas[j] || { bone };\n if (options.hip === name) {\n if (!boneData.pos) {\n boneData.pos = {\n times: new Float32Array(numFrames),\n values: new Float32Array(numFrames * 3)\n };\n }\n if (options.useFirstFramePosition) {\n if (i === 0) {\n positionOffset = bone.position.clone();\n }\n bone.position.sub(positionOffset);\n }\n boneData.pos.times[i] = time;\n bone.position.toArray(boneData.pos.values, i * 3);\n }\n if (!boneData.quat) {\n boneData.quat = {\n times: new Float32Array(numFrames),\n values: new Float32Array(numFrames * 4)\n };\n }\n boneData.quat.times[i] = time;\n bone.quaternion.toArray(boneData.quat.values, i * 4);\n }\n }\n mixer.update(delta);\n source.updateMatrixWorld();\n }\n for (let i = 0; i < boneDatas.length; ++i) {\n boneData = boneDatas[i];\n if (boneData) {\n if (boneData.pos) {\n convertedTracks.push(\n new VectorKeyframeTrack(\n \".bones[\" + boneData.bone.name + \"].position\",\n boneData.pos.times,\n boneData.pos.values\n )\n );\n }\n convertedTracks.push(\n new QuaternionKeyframeTrack(\n \".bones[\" + boneData.bone.name + \"].quaternion\",\n boneData.quat.times,\n boneData.quat.values\n )\n );\n }\n }\n mixer.uncacheAction(clip);\n return new AnimationClip(clip.name, -1, convertedTracks);\n}\nfunction clone(source) {\n const sourceLookup = /* @__PURE__ */ new Map();\n const cloneLookup = /* @__PURE__ */ new Map();\n const clone2 = source.clone();\n parallelTraverse(source, clone2, function(sourceNode, clonedNode) {\n sourceLookup.set(clonedNode, sourceNode);\n cloneLookup.set(sourceNode, clonedNode);\n });\n clone2.traverse(function(node) {\n if (!node.isSkinnedMesh)\n return;\n const clonedMesh = node;\n const sourceMesh = sourceLookup.get(node);\n const sourceBones = sourceMesh.skeleton.bones;\n clonedMesh.skeleton = sourceMesh.skeleton.clone();\n clonedMesh.bindMatrix.copy(sourceMesh.bindMatrix);\n clonedMesh.skeleton.bones = sourceBones.map(function(bone) {\n return cloneLookup.get(bone);\n });\n clonedMesh.bind(clonedMesh.skeleton, clonedMesh.bindMatrix);\n });\n return clone2;\n}\nfunction getBoneByName(name, skeleton) {\n for (let i = 0, bones = getBones(skeleton); i < bones.length; i++) {\n if (name === bones[i].name)\n return bones[i];\n }\n}\nfunction getBones(skeleton) {\n return Array.isArray(skeleton) ? skeleton : skeleton.bones;\n}\nfunction getHelperFromSkeleton(skeleton) {\n const source = new SkeletonHelper(skeleton.bones[0]);\n source.skeleton = skeleton;\n return source;\n}\nfunction parallelTraverse(a, b, callback) {\n callback(a, b);\n for (let i = 0; i < a.children.length; i++) {\n parallelTraverse(a.children[i], b.children[i], callback);\n }\n}\nconst SkeletonUtils = { retarget, retargetClip, clone };\nexport {\n SkeletonUtils\n};\n//# sourceMappingURL=SkeletonUtils.js.map\n","import { Triangle, Vector3 } from \"three\";\nconst _face = /* @__PURE__ */ new Triangle();\nconst _color = /* @__PURE__ */ new Vector3();\nclass MeshSurfaceSampler {\n constructor(mesh) {\n let geometry = mesh.geometry;\n if (geometry.index) {\n console.warn(\"THREE.MeshSurfaceSampler: Converting geometry to non-indexed BufferGeometry.\");\n geometry = geometry.toNonIndexed();\n }\n this.geometry = geometry;\n this.randomFunction = Math.random;\n this.positionAttribute = this.geometry.getAttribute(\"position\");\n this.colorAttribute = this.geometry.getAttribute(\"color\");\n this.weightAttribute = null;\n this.distribution = null;\n }\n setWeightAttribute(name) {\n this.weightAttribute = name ? this.geometry.getAttribute(name) : null;\n return this;\n }\n build() {\n const positionAttribute = this.positionAttribute;\n const weightAttribute = this.weightAttribute;\n const faceWeights = new Float32Array(positionAttribute.count / 3);\n for (let i = 0; i < positionAttribute.count; i += 3) {\n let faceWeight = 1;\n if (weightAttribute) {\n faceWeight = weightAttribute.getX(i) + weightAttribute.getX(i + 1) + weightAttribute.getX(i + 2);\n }\n _face.a.fromBufferAttribute(positionAttribute, i);\n _face.b.fromBufferAttribute(positionAttribute, i + 1);\n _face.c.fromBufferAttribute(positionAttribute, i + 2);\n faceWeight *= _face.getArea();\n faceWeights[i / 3] = faceWeight;\n }\n this.distribution = new Float32Array(positionAttribute.count / 3);\n let cumulativeTotal = 0;\n for (let i = 0; i < faceWeights.length; i++) {\n cumulativeTotal += faceWeights[i];\n this.distribution[i] = cumulativeTotal;\n }\n return this;\n }\n setRandomGenerator(randomFunction) {\n this.randomFunction = randomFunction;\n return this;\n }\n sample(targetPosition, targetNormal, targetColor) {\n const faceIndex = this.sampleFaceIndex();\n return this.sampleFace(faceIndex, targetPosition, targetNormal, targetColor);\n }\n sampleFaceIndex() {\n const cumulativeTotal = this.distribution[this.distribution.length - 1];\n return this.binarySearch(this.randomFunction() * cumulativeTotal);\n }\n binarySearch(x) {\n const dist = this.distribution;\n let start = 0;\n let end = dist.length - 1;\n let index = -1;\n while (start <= end) {\n const mid = Math.ceil((start + end) / 2);\n if (mid === 0 || dist[mid - 1] <= x && dist[mid] > x) {\n index = mid;\n break;\n } else if (x < dist[mid]) {\n end = mid - 1;\n } else {\n start = mid + 1;\n }\n }\n return index;\n }\n sampleFace(faceIndex, targetPosition, targetNormal, targetColor) {\n let u = this.randomFunction();\n let v = this.randomFunction();\n if (u + v > 1) {\n u = 1 - u;\n v = 1 - v;\n }\n _face.a.fromBufferAttribute(this.positionAttribute, faceIndex * 3);\n _face.b.fromBufferAttribute(this.positionAttribute, faceIndex * 3 + 1);\n _face.c.fromBufferAttribute(this.positionAttribute, faceIndex * 3 + 2);\n targetPosition.set(0, 0, 0).addScaledVector(_face.a, u).addScaledVector(_face.b, v).addScaledVector(_face.c, 1 - (u + v));\n if (targetNormal !== void 0) {\n _face.getNormal(targetNormal);\n }\n if (targetColor !== void 0 && this.colorAttribute !== void 0) {\n _face.a.fromBufferAttribute(this.colorAttribute, faceIndex * 3);\n _face.b.fromBufferAttribute(this.colorAttribute, faceIndex * 3 + 1);\n _face.c.fromBufferAttribute(this.colorAttribute, faceIndex * 3 + 2);\n _color.set(0, 0, 0).addScaledVector(_face.a, u).addScaledVector(_face.b, v).addScaledVector(_face.c, 1 - (u + v));\n targetColor.r = _color.x;\n targetColor.g = _color.y;\n targetColor.b = _color.z;\n }\n return this;\n }\n}\nexport {\n MeshSurfaceSampler\n};\n//# sourceMappingURL=MeshSurfaceSampler.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nclass EventDispatcher {\n constructor() {\n // not defined in @types/three\n __publicField(this, \"_listeners\");\n }\n /**\n * Adds a listener to an event type.\n * @param type The type of event to listen to.\n * @param listener The function that gets called when the event is fired.\n */\n addEventListener(type, listener) {\n if (this._listeners === void 0)\n this._listeners = {};\n const listeners = this._listeners;\n if (listeners[type] === void 0) {\n listeners[type] = [];\n }\n if (listeners[type].indexOf(listener) === -1) {\n listeners[type].push(listener);\n }\n }\n /**\n * Checks if listener is added to an event type.\n * @param type The type of event to listen to.\n * @param listener The function that gets called when the event is fired.\n */\n hasEventListener(type, listener) {\n if (this._listeners === void 0)\n return false;\n const listeners = this._listeners;\n return listeners[type] !== void 0 && listeners[type].indexOf(listener) !== -1;\n }\n /**\n * Removes a listener from an event type.\n * @param type The type of the listener that gets removed.\n * @param listener The listener function that gets removed.\n */\n removeEventListener(type, listener) {\n if (this._listeners === void 0)\n return;\n const listeners = this._listeners;\n const listenerArray = listeners[type];\n if (listenerArray !== void 0) {\n const index = listenerArray.indexOf(listener);\n if (index !== -1) {\n listenerArray.splice(index, 1);\n }\n }\n }\n /**\n * Fire an event type.\n * @param event The event that gets fired.\n */\n dispatchEvent(event) {\n if (this._listeners === void 0)\n return;\n const listeners = this._listeners;\n const listenerArray = listeners[event.type];\n if (listenerArray !== void 0) {\n event.target = this;\n const array = listenerArray.slice(0);\n for (let i = 0, l = array.length; i < l; i++) {\n array[i].call(this, event);\n }\n event.target = null;\n }\n }\n}\nexport {\n EventDispatcher\n};\n//# sourceMappingURL=EventDispatcher.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Vector3, Spherical, MathUtils } from \"three\";\nimport { EventDispatcher } from \"./EventDispatcher.js\";\nconst targetPosition = /* @__PURE__ */ new Vector3();\nclass FirstPersonControls extends EventDispatcher {\n constructor(object, domElement) {\n super();\n __publicField(this, \"object\");\n __publicField(this, \"domElement\");\n __publicField(this, \"enabled\", true);\n __publicField(this, \"movementSpeed\", 1);\n __publicField(this, \"lookSpeed\", 5e-3);\n __publicField(this, \"lookVertical\", true);\n __publicField(this, \"autoForward\", false);\n __publicField(this, \"activeLook\", true);\n __publicField(this, \"heightSpeed\", false);\n __publicField(this, \"heightCoef\", 1);\n __publicField(this, \"heightMin\", 0);\n __publicField(this, \"heightMax\", 1);\n __publicField(this, \"constrainVertical\", false);\n __publicField(this, \"verticalMin\", 0);\n __publicField(this, \"verticalMax\", Math.PI);\n __publicField(this, \"mouseDragOn\", false);\n // internals\n __publicField(this, \"autoSpeedFactor\", 0);\n __publicField(this, \"mouseX\", 0);\n __publicField(this, \"mouseY\", 0);\n __publicField(this, \"moveForward\", false);\n __publicField(this, \"moveBackward\", false);\n __publicField(this, \"moveLeft\", false);\n __publicField(this, \"moveRight\", false);\n __publicField(this, \"moveUp\", false);\n __publicField(this, \"moveDown\", false);\n __publicField(this, \"viewHalfX\", 0);\n __publicField(this, \"viewHalfY\", 0);\n __publicField(this, \"lat\", 0);\n __publicField(this, \"lon\", 0);\n __publicField(this, \"lookDirection\", new Vector3());\n __publicField(this, \"spherical\", new Spherical());\n __publicField(this, \"target\", new Vector3());\n __publicField(this, \"connect\", (domElement) => {\n domElement.setAttribute(\"tabindex\", \"-1\");\n domElement.style.touchAction = \"none\";\n domElement.addEventListener(\"contextmenu\", this.contextmenu);\n domElement.addEventListener(\"mousemove\", this.onMouseMove);\n domElement.addEventListener(\"mousedown\", this.onMouseDown);\n domElement.addEventListener(\"mouseup\", this.onMouseUp);\n this.domElement = domElement;\n window.addEventListener(\"keydown\", this.onKeyDown);\n window.addEventListener(\"keyup\", this.onKeyUp);\n this.handleResize();\n });\n __publicField(this, \"dispose\", () => {\n var _a, _b, _c, _d;\n (_a = this.domElement) == null ? void 0 : _a.removeEventListener(\"contextmenu\", this.contextmenu);\n (_b = this.domElement) == null ? void 0 : _b.removeEventListener(\"mousedown\", this.onMouseDown);\n (_c = this.domElement) == null ? void 0 : _c.removeEventListener(\"mousemove\", this.onMouseMove);\n (_d = this.domElement) == null ? void 0 : _d.removeEventListener(\"mouseup\", this.onMouseUp);\n window.removeEventListener(\"keydown\", this.onKeyDown);\n window.removeEventListener(\"keyup\", this.onKeyUp);\n });\n __publicField(this, \"handleResize\", () => {\n if (this.domElement) {\n this.viewHalfX = this.domElement.offsetWidth / 2;\n this.viewHalfY = this.domElement.offsetHeight / 2;\n }\n });\n __publicField(this, \"onMouseDown\", (event) => {\n var _a;\n (_a = this.domElement) == null ? void 0 : _a.focus();\n if (this.activeLook) {\n switch (event.button) {\n case 0:\n this.moveForward = true;\n break;\n case 2:\n this.moveBackward = true;\n break;\n }\n }\n this.mouseDragOn = true;\n });\n __publicField(this, \"onMouseUp\", (event) => {\n if (this.activeLook) {\n switch (event.button) {\n case 0:\n this.moveForward = false;\n break;\n case 2:\n this.moveBackward = false;\n break;\n }\n }\n this.mouseDragOn = false;\n });\n __publicField(this, \"onMouseMove\", (event) => {\n if (this.domElement) {\n this.mouseX = event.pageX - this.domElement.offsetLeft - this.viewHalfX;\n this.mouseY = event.pageY - this.domElement.offsetTop - this.viewHalfY;\n }\n });\n __publicField(this, \"onKeyDown\", (event) => {\n switch (event.code) {\n case \"ArrowUp\":\n case \"KeyW\":\n this.moveForward = true;\n break;\n case \"ArrowLeft\":\n case \"KeyA\":\n this.moveLeft = true;\n break;\n case \"ArrowDown\":\n case \"KeyS\":\n this.moveBackward = true;\n break;\n case \"ArrowRight\":\n case \"KeyD\":\n this.moveRight = true;\n break;\n case \"KeyR\":\n this.moveUp = true;\n break;\n case \"KeyF\":\n this.moveDown = true;\n break;\n }\n });\n __publicField(this, \"onKeyUp\", (event) => {\n switch (event.code) {\n case \"ArrowUp\":\n case \"KeyW\":\n this.moveForward = false;\n break;\n case \"ArrowLeft\":\n case \"KeyA\":\n this.moveLeft = false;\n break;\n case \"ArrowDown\":\n case \"KeyS\":\n this.moveBackward = false;\n break;\n case \"ArrowRight\":\n case \"KeyD\":\n this.moveRight = false;\n break;\n case \"KeyR\":\n this.moveUp = false;\n break;\n case \"KeyF\":\n this.moveDown = false;\n break;\n }\n });\n __publicField(this, \"lookAt\", (x, y, z) => {\n if (x instanceof Vector3) {\n this.target.copy(x);\n } else if (y && z) {\n this.target.set(x, y, z);\n }\n this.object.lookAt(this.target);\n this.setOrientation();\n return this;\n });\n __publicField(this, \"update\", (delta) => {\n if (!this.enabled)\n return;\n if (this.heightSpeed) {\n const y = MathUtils.clamp(this.object.position.y, this.heightMin, this.heightMax);\n const heightDelta = y - this.heightMin;\n this.autoSpeedFactor = delta * (heightDelta * this.heightCoef);\n } else {\n this.autoSpeedFactor = 0;\n }\n const actualMoveSpeed = delta * this.movementSpeed;\n if (this.moveForward || this.autoForward && !this.moveBackward) {\n this.object.translateZ(-(actualMoveSpeed + this.autoSpeedFactor));\n }\n if (this.moveBackward)\n this.object.translateZ(actualMoveSpeed);\n if (this.moveLeft)\n this.object.translateX(-actualMoveSpeed);\n if (this.moveRight)\n this.object.translateX(actualMoveSpeed);\n if (this.moveUp)\n this.object.translateY(actualMoveSpeed);\n if (this.moveDown)\n this.object.translateY(-actualMoveSpeed);\n let actualLookSpeed = delta * this.lookSpeed;\n if (!this.activeLook) {\n actualLookSpeed = 0;\n }\n let verticalLookRatio = 1;\n if (this.constrainVertical) {\n verticalLookRatio = Math.PI / (this.verticalMax - this.verticalMin);\n }\n this.lon -= this.mouseX * actualLookSpeed;\n if (this.lookVertical)\n this.lat -= this.mouseY * actualLookSpeed * verticalLookRatio;\n this.lat = Math.max(-85, Math.min(85, this.lat));\n let phi = MathUtils.degToRad(90 - this.lat);\n const theta = MathUtils.degToRad(this.lon);\n if (this.constrainVertical) {\n phi = MathUtils.mapLinear(phi, 0, Math.PI, this.verticalMin, this.verticalMax);\n }\n const position = this.object.position;\n targetPosition.setFromSphericalCoords(1, phi, theta).add(position);\n this.object.lookAt(targetPosition);\n });\n __publicField(this, \"contextmenu\", (event) => event.preventDefault());\n __publicField(this, \"setOrientation\", () => {\n this.lookDirection.set(0, 0, -1).applyQuaternion(this.object.quaternion);\n this.spherical.setFromVector3(this.lookDirection);\n this.lat = 90 - MathUtils.radToDeg(this.spherical.phi);\n this.lon = MathUtils.radToDeg(this.spherical.theta);\n });\n this.object = object;\n this.domElement = domElement;\n this.setOrientation();\n if (domElement)\n this.connect(domElement);\n }\n}\nexport {\n FirstPersonControls\n};\n//# sourceMappingURL=FirstPersonControls.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Object3D, Raycaster, Vector3, Quaternion, Euler, Matrix4, MeshBasicMaterial, DoubleSide, LineBasicMaterial, CylinderGeometry, BoxGeometry, BufferGeometry, Float32BufferAttribute, Mesh, Line, OctahedronGeometry, PlaneGeometry, TorusGeometry, SphereGeometry, Color } from \"three\";\nclass TransformControls extends Object3D {\n constructor(camera, domElement) {\n super();\n __publicField(this, \"isTransformControls\", true);\n __publicField(this, \"visible\", false);\n __publicField(this, \"domElement\");\n __publicField(this, \"raycaster\", new Raycaster());\n __publicField(this, \"gizmo\");\n __publicField(this, \"plane\");\n __publicField(this, \"tempVector\", new Vector3());\n __publicField(this, \"tempVector2\", new Vector3());\n __publicField(this, \"tempQuaternion\", new Quaternion());\n __publicField(this, \"unit\", {\n X: new Vector3(1, 0, 0),\n Y: new Vector3(0, 1, 0),\n Z: new Vector3(0, 0, 1)\n });\n __publicField(this, \"pointStart\", new Vector3());\n __publicField(this, \"pointEnd\", new Vector3());\n __publicField(this, \"offset\", new Vector3());\n __publicField(this, \"rotationAxis\", new Vector3());\n __publicField(this, \"startNorm\", new Vector3());\n __publicField(this, \"endNorm\", new Vector3());\n __publicField(this, \"rotationAngle\", 0);\n __publicField(this, \"cameraPosition\", new Vector3());\n __publicField(this, \"cameraQuaternion\", new Quaternion());\n __publicField(this, \"cameraScale\", new Vector3());\n __publicField(this, \"parentPosition\", new Vector3());\n __publicField(this, \"parentQuaternion\", new Quaternion());\n __publicField(this, \"parentQuaternionInv\", new Quaternion());\n __publicField(this, \"parentScale\", new Vector3());\n __publicField(this, \"worldPositionStart\", new Vector3());\n __publicField(this, \"worldQuaternionStart\", new Quaternion());\n __publicField(this, \"worldScaleStart\", new Vector3());\n __publicField(this, \"worldPosition\", new Vector3());\n __publicField(this, \"worldQuaternion\", new Quaternion());\n __publicField(this, \"worldQuaternionInv\", new Quaternion());\n __publicField(this, \"worldScale\", new Vector3());\n __publicField(this, \"eye\", new Vector3());\n __publicField(this, \"positionStart\", new Vector3());\n __publicField(this, \"quaternionStart\", new Quaternion());\n __publicField(this, \"scaleStart\", new Vector3());\n __publicField(this, \"camera\");\n __publicField(this, \"object\");\n __publicField(this, \"enabled\", true);\n __publicField(this, \"axis\", null);\n __publicField(this, \"mode\", \"translate\");\n __publicField(this, \"translationSnap\", null);\n __publicField(this, \"rotationSnap\", null);\n __publicField(this, \"scaleSnap\", null);\n __publicField(this, \"space\", \"world\");\n __publicField(this, \"size\", 1);\n __publicField(this, \"dragging\", false);\n __publicField(this, \"showX\", true);\n __publicField(this, \"showY\", true);\n __publicField(this, \"showZ\", true);\n // events\n __publicField(this, \"changeEvent\", { type: \"change\" });\n __publicField(this, \"mouseDownEvent\", { type: \"mouseDown\", mode: this.mode });\n __publicField(this, \"mouseUpEvent\", { type: \"mouseUp\", mode: this.mode });\n __publicField(this, \"objectChangeEvent\", { type: \"objectChange\" });\n __publicField(this, \"intersectObjectWithRay\", (object, raycaster, includeInvisible) => {\n const allIntersections = raycaster.intersectObject(object, true);\n for (let i = 0; i < allIntersections.length; i++) {\n if (allIntersections[i].object.visible || includeInvisible) {\n return allIntersections[i];\n }\n }\n return false;\n });\n // Set current object\n __publicField(this, \"attach\", (object) => {\n this.object = object;\n this.visible = true;\n return this;\n });\n // Detatch from object\n __publicField(this, \"detach\", () => {\n this.object = void 0;\n this.visible = false;\n this.axis = null;\n return this;\n });\n // Reset\n __publicField(this, \"reset\", () => {\n if (!this.enabled)\n return this;\n if (this.dragging) {\n if (this.object !== void 0) {\n this.object.position.copy(this.positionStart);\n this.object.quaternion.copy(this.quaternionStart);\n this.object.scale.copy(this.scaleStart);\n this.dispatchEvent(this.changeEvent);\n this.dispatchEvent(this.objectChangeEvent);\n this.pointStart.copy(this.pointEnd);\n }\n }\n return this;\n });\n __publicField(this, \"updateMatrixWorld\", () => {\n if (this.object !== void 0) {\n this.object.updateMatrixWorld();\n if (this.object.parent === null) {\n console.error(\"TransformControls: The attached 3D object must be a part of the scene graph.\");\n } else {\n this.object.parent.matrixWorld.decompose(this.parentPosition, this.parentQuaternion, this.parentScale);\n }\n this.object.matrixWorld.decompose(this.worldPosition, this.worldQuaternion, this.worldScale);\n this.parentQuaternionInv.copy(this.parentQuaternion).invert();\n this.worldQuaternionInv.copy(this.worldQuaternion).invert();\n }\n this.camera.updateMatrixWorld();\n this.camera.matrixWorld.decompose(this.cameraPosition, this.cameraQuaternion, this.cameraScale);\n this.eye.copy(this.cameraPosition).sub(this.worldPosition).normalize();\n super.updateMatrixWorld();\n });\n __publicField(this, \"pointerHover\", (pointer) => {\n if (this.object === void 0 || this.dragging === true)\n return;\n this.raycaster.setFromCamera(pointer, this.camera);\n const intersect = this.intersectObjectWithRay(this.gizmo.picker[this.mode], this.raycaster);\n if (intersect) {\n this.axis = intersect.object.name;\n } else {\n this.axis = null;\n }\n });\n __publicField(this, \"pointerDown\", (pointer) => {\n if (this.object === void 0 || this.dragging === true || pointer.button !== 0)\n return;\n if (this.axis !== null) {\n this.raycaster.setFromCamera(pointer, this.camera);\n const planeIntersect = this.intersectObjectWithRay(this.plane, this.raycaster, true);\n if (planeIntersect) {\n let space = this.space;\n if (this.mode === \"scale\") {\n space = \"local\";\n } else if (this.axis === \"E\" || this.axis === \"XYZE\" || this.axis === \"XYZ\") {\n space = \"world\";\n }\n if (space === \"local\" && this.mode === \"rotate\") {\n const snap = this.rotationSnap;\n if (this.axis === \"X\" && snap)\n this.object.rotation.x = Math.round(this.object.rotation.x / snap) * snap;\n if (this.axis === \"Y\" && snap)\n this.object.rotation.y = Math.round(this.object.rotation.y / snap) * snap;\n if (this.axis === \"Z\" && snap)\n this.object.rotation.z = Math.round(this.object.rotation.z / snap) * snap;\n }\n this.object.updateMatrixWorld();\n if (this.object.parent) {\n this.object.parent.updateMatrixWorld();\n }\n this.positionStart.copy(this.object.position);\n this.quaternionStart.copy(this.object.quaternion);\n this.scaleStart.copy(this.object.scale);\n this.object.matrixWorld.decompose(this.worldPositionStart, this.worldQuaternionStart, this.worldScaleStart);\n this.pointStart.copy(planeIntersect.point).sub(this.worldPositionStart);\n }\n this.dragging = true;\n this.mouseDownEvent.mode = this.mode;\n this.dispatchEvent(this.mouseDownEvent);\n }\n });\n __publicField(this, \"pointerMove\", (pointer) => {\n const axis = this.axis;\n const mode = this.mode;\n const object = this.object;\n let space = this.space;\n if (mode === \"scale\") {\n space = \"local\";\n } else if (axis === \"E\" || axis === \"XYZE\" || axis === \"XYZ\") {\n space = \"world\";\n }\n if (object === void 0 || axis === null || this.dragging === false || pointer.button !== -1)\n return;\n this.raycaster.setFromCamera(pointer, this.camera);\n const planeIntersect = this.intersectObjectWithRay(this.plane, this.raycaster, true);\n if (!planeIntersect)\n return;\n this.pointEnd.copy(planeIntersect.point).sub(this.worldPositionStart);\n if (mode === \"translate\") {\n this.offset.copy(this.pointEnd).sub(this.pointStart);\n if (space === \"local\" && axis !== \"XYZ\") {\n this.offset.applyQuaternion(this.worldQuaternionInv);\n }\n if (axis.indexOf(\"X\") === -1)\n this.offset.x = 0;\n if (axis.indexOf(\"Y\") === -1)\n this.offset.y = 0;\n if (axis.indexOf(\"Z\") === -1)\n this.offset.z = 0;\n if (space === \"local\" && axis !== \"XYZ\") {\n this.offset.applyQuaternion(this.quaternionStart).divide(this.parentScale);\n } else {\n this.offset.applyQuaternion(this.parentQuaternionInv).divide(this.parentScale);\n }\n object.position.copy(this.offset).add(this.positionStart);\n if (this.translationSnap) {\n if (space === \"local\") {\n object.position.applyQuaternion(this.tempQuaternion.copy(this.quaternionStart).invert());\n if (axis.search(\"X\") !== -1) {\n object.position.x = Math.round(object.position.x / this.translationSnap) * this.translationSnap;\n }\n if (axis.search(\"Y\") !== -1) {\n object.position.y = Math.round(object.position.y / this.translationSnap) * this.translationSnap;\n }\n if (axis.search(\"Z\") !== -1) {\n object.position.z = Math.round(object.position.z / this.translationSnap) * this.translationSnap;\n }\n object.position.applyQuaternion(this.quaternionStart);\n }\n if (space === \"world\") {\n if (object.parent) {\n object.position.add(this.tempVector.setFromMatrixPosition(object.parent.matrixWorld));\n }\n if (axis.search(\"X\") !== -1) {\n object.position.x = Math.round(object.position.x / this.translationSnap) * this.translationSnap;\n }\n if (axis.search(\"Y\") !== -1) {\n object.position.y = Math.round(object.position.y / this.translationSnap) * this.translationSnap;\n }\n if (axis.search(\"Z\") !== -1) {\n object.position.z = Math.round(object.position.z / this.translationSnap) * this.translationSnap;\n }\n if (object.parent) {\n object.position.sub(this.tempVector.setFromMatrixPosition(object.parent.matrixWorld));\n }\n }\n }\n } else if (mode === \"scale\") {\n if (axis.search(\"XYZ\") !== -1) {\n let d = this.pointEnd.length() / this.pointStart.length();\n if (this.pointEnd.dot(this.pointStart) < 0)\n d *= -1;\n this.tempVector2.set(d, d, d);\n } else {\n this.tempVector.copy(this.pointStart);\n this.tempVector2.copy(this.pointEnd);\n this.tempVector.applyQuaternion(this.worldQuaternionInv);\n this.tempVector2.applyQuaternion(this.worldQuaternionInv);\n this.tempVector2.divide(this.tempVector);\n if (axis.search(\"X\") === -1) {\n this.tempVector2.x = 1;\n }\n if (axis.search(\"Y\") === -1) {\n this.tempVector2.y = 1;\n }\n if (axis.search(\"Z\") === -1) {\n this.tempVector2.z = 1;\n }\n }\n object.scale.copy(this.scaleStart).multiply(this.tempVector2);\n if (this.scaleSnap && this.object) {\n if (axis.search(\"X\") !== -1) {\n this.object.scale.x = Math.round(object.scale.x / this.scaleSnap) * this.scaleSnap || this.scaleSnap;\n }\n if (axis.search(\"Y\") !== -1) {\n object.scale.y = Math.round(object.scale.y / this.scaleSnap) * this.scaleSnap || this.scaleSnap;\n }\n if (axis.search(\"Z\") !== -1) {\n object.scale.z = Math.round(object.scale.z / this.scaleSnap) * this.scaleSnap || this.scaleSnap;\n }\n }\n } else if (mode === \"rotate\") {\n this.offset.copy(this.pointEnd).sub(this.pointStart);\n const ROTATION_SPEED = 20 / this.worldPosition.distanceTo(this.tempVector.setFromMatrixPosition(this.camera.matrixWorld));\n if (axis === \"E\") {\n this.rotationAxis.copy(this.eye);\n this.rotationAngle = this.pointEnd.angleTo(this.pointStart);\n this.startNorm.copy(this.pointStart).normalize();\n this.endNorm.copy(this.pointEnd).normalize();\n this.rotationAngle *= this.endNorm.cross(this.startNorm).dot(this.eye) < 0 ? 1 : -1;\n } else if (axis === \"XYZE\") {\n this.rotationAxis.copy(this.offset).cross(this.eye).normalize();\n this.rotationAngle = this.offset.dot(this.tempVector.copy(this.rotationAxis).cross(this.eye)) * ROTATION_SPEED;\n } else if (axis === \"X\" || axis === \"Y\" || axis === \"Z\") {\n this.rotationAxis.copy(this.unit[axis]);\n this.tempVector.copy(this.unit[axis]);\n if (space === \"local\") {\n this.tempVector.applyQuaternion(this.worldQuaternion);\n }\n this.rotationAngle = this.offset.dot(this.tempVector.cross(this.eye).normalize()) * ROTATION_SPEED;\n }\n if (this.rotationSnap) {\n this.rotationAngle = Math.round(this.rotationAngle / this.rotationSnap) * this.rotationSnap;\n }\n if (space === \"local\" && axis !== \"E\" && axis !== \"XYZE\") {\n object.quaternion.copy(this.quaternionStart);\n object.quaternion.multiply(this.tempQuaternion.setFromAxisAngle(this.rotationAxis, this.rotationAngle)).normalize();\n } else {\n this.rotationAxis.applyQuaternion(this.parentQuaternionInv);\n object.quaternion.copy(this.tempQuaternion.setFromAxisAngle(this.rotationAxis, this.rotationAngle));\n object.quaternion.multiply(this.quaternionStart).normalize();\n }\n }\n this.dispatchEvent(this.changeEvent);\n this.dispatchEvent(this.objectChangeEvent);\n });\n __publicField(this, \"pointerUp\", (pointer) => {\n if (pointer.button !== 0)\n return;\n if (this.dragging && this.axis !== null) {\n this.mouseUpEvent.mode = this.mode;\n this.dispatchEvent(this.mouseUpEvent);\n }\n this.dragging = false;\n this.axis = null;\n });\n __publicField(this, \"getPointer\", (event) => {\n var _a;\n if (this.domElement && ((_a = this.domElement.ownerDocument) == null ? void 0 : _a.pointerLockElement)) {\n return {\n x: 0,\n y: 0,\n button: event.button\n };\n } else {\n const pointer = event.changedTouches ? event.changedTouches[0] : event;\n const rect = this.domElement.getBoundingClientRect();\n return {\n x: (pointer.clientX - rect.left) / rect.width * 2 - 1,\n y: -(pointer.clientY - rect.top) / rect.height * 2 + 1,\n button: event.button\n };\n }\n });\n __publicField(this, \"onPointerHover\", (event) => {\n if (!this.enabled)\n return;\n switch (event.pointerType) {\n case \"mouse\":\n case \"pen\":\n this.pointerHover(this.getPointer(event));\n break;\n }\n });\n __publicField(this, \"onPointerDown\", (event) => {\n if (!this.enabled || !this.domElement)\n return;\n this.domElement.style.touchAction = \"none\";\n this.domElement.ownerDocument.addEventListener(\"pointermove\", this.onPointerMove);\n this.pointerHover(this.getPointer(event));\n this.pointerDown(this.getPointer(event));\n });\n __publicField(this, \"onPointerMove\", (event) => {\n if (!this.enabled)\n return;\n this.pointerMove(this.getPointer(event));\n });\n __publicField(this, \"onPointerUp\", (event) => {\n if (!this.enabled || !this.domElement)\n return;\n this.domElement.style.touchAction = \"\";\n this.domElement.ownerDocument.removeEventListener(\"pointermove\", this.onPointerMove);\n this.pointerUp(this.getPointer(event));\n });\n __publicField(this, \"getMode\", () => this.mode);\n __publicField(this, \"setMode\", (mode) => {\n this.mode = mode;\n });\n __publicField(this, \"setTranslationSnap\", (translationSnap) => {\n this.translationSnap = translationSnap;\n });\n __publicField(this, \"setRotationSnap\", (rotationSnap) => {\n this.rotationSnap = rotationSnap;\n });\n __publicField(this, \"setScaleSnap\", (scaleSnap) => {\n this.scaleSnap = scaleSnap;\n });\n __publicField(this, \"setSize\", (size) => {\n this.size = size;\n });\n __publicField(this, \"setSpace\", (space) => {\n this.space = space;\n });\n __publicField(this, \"update\", () => {\n console.warn(\n \"THREE.TransformControls: update function has no more functionality and therefore has been deprecated.\"\n );\n });\n __publicField(this, \"connect\", (domElement) => {\n if (domElement === document) {\n console.error(\n 'THREE.OrbitControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.'\n );\n }\n this.domElement = domElement;\n this.domElement.addEventListener(\"pointerdown\", this.onPointerDown);\n this.domElement.addEventListener(\"pointermove\", this.onPointerHover);\n this.domElement.ownerDocument.addEventListener(\"pointerup\", this.onPointerUp);\n });\n __publicField(this, \"dispose\", () => {\n var _a, _b, _c, _d, _e, _f;\n (_a = this.domElement) == null ? void 0 : _a.removeEventListener(\"pointerdown\", this.onPointerDown);\n (_b = this.domElement) == null ? void 0 : _b.removeEventListener(\"pointermove\", this.onPointerHover);\n (_d = (_c = this.domElement) == null ? void 0 : _c.ownerDocument) == null ? void 0 : _d.removeEventListener(\"pointermove\", this.onPointerMove);\n (_f = (_e = this.domElement) == null ? void 0 : _e.ownerDocument) == null ? void 0 : _f.removeEventListener(\"pointerup\", this.onPointerUp);\n this.traverse((child) => {\n const mesh = child;\n if (mesh.geometry) {\n mesh.geometry.dispose();\n }\n if (mesh.material) {\n mesh.material.dispose();\n }\n });\n });\n this.domElement = domElement;\n this.camera = camera;\n this.gizmo = new TransformControlsGizmo();\n this.add(this.gizmo);\n this.plane = new TransformControlsPlane();\n this.add(this.plane);\n const defineProperty = (propName, defaultValue) => {\n let propValue = defaultValue;\n Object.defineProperty(this, propName, {\n get: function() {\n return propValue !== void 0 ? propValue : defaultValue;\n },\n set: function(value) {\n if (propValue !== value) {\n propValue = value;\n this.plane[propName] = value;\n this.gizmo[propName] = value;\n this.dispatchEvent({ type: propName + \"-changed\", value });\n this.dispatchEvent(this.changeEvent);\n }\n }\n });\n this[propName] = defaultValue;\n this.plane[propName] = defaultValue;\n this.gizmo[propName] = defaultValue;\n };\n defineProperty(\"camera\", this.camera);\n defineProperty(\"object\", this.object);\n defineProperty(\"enabled\", this.enabled);\n defineProperty(\"axis\", this.axis);\n defineProperty(\"mode\", this.mode);\n defineProperty(\"translationSnap\", this.translationSnap);\n defineProperty(\"rotationSnap\", this.rotationSnap);\n defineProperty(\"scaleSnap\", this.scaleSnap);\n defineProperty(\"space\", this.space);\n defineProperty(\"size\", this.size);\n defineProperty(\"dragging\", this.dragging);\n defineProperty(\"showX\", this.showX);\n defineProperty(\"showY\", this.showY);\n defineProperty(\"showZ\", this.showZ);\n defineProperty(\"worldPosition\", this.worldPosition);\n defineProperty(\"worldPositionStart\", this.worldPositionStart);\n defineProperty(\"worldQuaternion\", this.worldQuaternion);\n defineProperty(\"worldQuaternionStart\", this.worldQuaternionStart);\n defineProperty(\"cameraPosition\", this.cameraPosition);\n defineProperty(\"cameraQuaternion\", this.cameraQuaternion);\n defineProperty(\"pointStart\", this.pointStart);\n defineProperty(\"pointEnd\", this.pointEnd);\n defineProperty(\"rotationAxis\", this.rotationAxis);\n defineProperty(\"rotationAngle\", this.rotationAngle);\n defineProperty(\"eye\", this.eye);\n if (domElement !== void 0)\n this.connect(domElement);\n }\n}\nclass TransformControlsGizmo extends Object3D {\n constructor() {\n super();\n __publicField(this, \"isTransformControlsGizmo\", true);\n __publicField(this, \"type\", \"TransformControlsGizmo\");\n __publicField(this, \"tempVector\", new Vector3(0, 0, 0));\n __publicField(this, \"tempEuler\", new Euler());\n __publicField(this, \"alignVector\", new Vector3(0, 1, 0));\n __publicField(this, \"zeroVector\", new Vector3(0, 0, 0));\n __publicField(this, \"lookAtMatrix\", new Matrix4());\n __publicField(this, \"tempQuaternion\", new Quaternion());\n __publicField(this, \"tempQuaternion2\", new Quaternion());\n __publicField(this, \"identityQuaternion\", new Quaternion());\n __publicField(this, \"unitX\", new Vector3(1, 0, 0));\n __publicField(this, \"unitY\", new Vector3(0, 1, 0));\n __publicField(this, \"unitZ\", new Vector3(0, 0, 1));\n __publicField(this, \"gizmo\");\n __publicField(this, \"picker\");\n __publicField(this, \"helper\");\n // these are set from parent class TransformControls\n __publicField(this, \"rotationAxis\", new Vector3());\n __publicField(this, \"cameraPosition\", new Vector3());\n __publicField(this, \"worldPositionStart\", new Vector3());\n __publicField(this, \"worldQuaternionStart\", new Quaternion());\n __publicField(this, \"worldPosition\", new Vector3());\n __publicField(this, \"worldQuaternion\", new Quaternion());\n __publicField(this, \"eye\", new Vector3());\n __publicField(this, \"camera\", null);\n __publicField(this, \"enabled\", true);\n __publicField(this, \"axis\", null);\n __publicField(this, \"mode\", \"translate\");\n __publicField(this, \"space\", \"world\");\n __publicField(this, \"size\", 1);\n __publicField(this, \"dragging\", false);\n __publicField(this, \"showX\", true);\n __publicField(this, \"showY\", true);\n __publicField(this, \"showZ\", true);\n // updateMatrixWorld will update transformations and appearance of individual handles\n __publicField(this, \"updateMatrixWorld\", () => {\n let space = this.space;\n if (this.mode === \"scale\") {\n space = \"local\";\n }\n const quaternion = space === \"local\" ? this.worldQuaternion : this.identityQuaternion;\n this.gizmo[\"translate\"].visible = this.mode === \"translate\";\n this.gizmo[\"rotate\"].visible = this.mode === \"rotate\";\n this.gizmo[\"scale\"].visible = this.mode === \"scale\";\n this.helper[\"translate\"].visible = this.mode === \"translate\";\n this.helper[\"rotate\"].visible = this.mode === \"rotate\";\n this.helper[\"scale\"].visible = this.mode === \"scale\";\n let handles = [];\n handles = handles.concat(this.picker[this.mode].children);\n handles = handles.concat(this.gizmo[this.mode].children);\n handles = handles.concat(this.helper[this.mode].children);\n for (let i = 0; i < handles.length; i++) {\n const handle = handles[i];\n handle.visible = true;\n handle.rotation.set(0, 0, 0);\n handle.position.copy(this.worldPosition);\n let factor;\n if (this.camera.isOrthographicCamera) {\n factor = (this.camera.top - this.camera.bottom) / this.camera.zoom;\n } else {\n factor = this.worldPosition.distanceTo(this.cameraPosition) * Math.min(1.9 * Math.tan(Math.PI * this.camera.fov / 360) / this.camera.zoom, 7);\n }\n handle.scale.set(1, 1, 1).multiplyScalar(factor * this.size / 7);\n if (handle.tag === \"helper\") {\n handle.visible = false;\n if (handle.name === \"AXIS\") {\n handle.position.copy(this.worldPositionStart);\n handle.visible = !!this.axis;\n if (this.axis === \"X\") {\n this.tempQuaternion.setFromEuler(this.tempEuler.set(0, 0, 0));\n handle.quaternion.copy(quaternion).multiply(this.tempQuaternion);\n if (Math.abs(this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye)) > 0.9) {\n handle.visible = false;\n }\n }\n if (this.axis === \"Y\") {\n this.tempQuaternion.setFromEuler(this.tempEuler.set(0, 0, Math.PI / 2));\n handle.quaternion.copy(quaternion).multiply(this.tempQuaternion);\n if (Math.abs(this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye)) > 0.9) {\n handle.visible = false;\n }\n }\n if (this.axis === \"Z\") {\n this.tempQuaternion.setFromEuler(this.tempEuler.set(0, Math.PI / 2, 0));\n handle.quaternion.copy(quaternion).multiply(this.tempQuaternion);\n if (Math.abs(this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye)) > 0.9) {\n handle.visible = false;\n }\n }\n if (this.axis === \"XYZE\") {\n this.tempQuaternion.setFromEuler(this.tempEuler.set(0, Math.PI / 2, 0));\n this.alignVector.copy(this.rotationAxis);\n handle.quaternion.setFromRotationMatrix(\n this.lookAtMatrix.lookAt(this.zeroVector, this.alignVector, this.unitY)\n );\n handle.quaternion.multiply(this.tempQuaternion);\n handle.visible = this.dragging;\n }\n if (this.axis === \"E\") {\n handle.visible = false;\n }\n } else if (handle.name === \"START\") {\n handle.position.copy(this.worldPositionStart);\n handle.visible = this.dragging;\n } else if (handle.name === \"END\") {\n handle.position.copy(this.worldPosition);\n handle.visible = this.dragging;\n } else if (handle.name === \"DELTA\") {\n handle.position.copy(this.worldPositionStart);\n handle.quaternion.copy(this.worldQuaternionStart);\n this.tempVector.set(1e-10, 1e-10, 1e-10).add(this.worldPositionStart).sub(this.worldPosition).multiplyScalar(-1);\n this.tempVector.applyQuaternion(this.worldQuaternionStart.clone().invert());\n handle.scale.copy(this.tempVector);\n handle.visible = this.dragging;\n } else {\n handle.quaternion.copy(quaternion);\n if (this.dragging) {\n handle.position.copy(this.worldPositionStart);\n } else {\n handle.position.copy(this.worldPosition);\n }\n if (this.axis) {\n handle.visible = this.axis.search(handle.name) !== -1;\n }\n }\n continue;\n }\n handle.quaternion.copy(quaternion);\n if (this.mode === \"translate\" || this.mode === \"scale\") {\n const AXIS_HIDE_TRESHOLD = 0.99;\n const PLANE_HIDE_TRESHOLD = 0.2;\n const AXIS_FLIP_TRESHOLD = 0;\n if (handle.name === \"X\" || handle.name === \"XYZX\") {\n if (Math.abs(this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_TRESHOLD) {\n handle.scale.set(1e-10, 1e-10, 1e-10);\n handle.visible = false;\n }\n }\n if (handle.name === \"Y\" || handle.name === \"XYZY\") {\n if (Math.abs(this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_TRESHOLD) {\n handle.scale.set(1e-10, 1e-10, 1e-10);\n handle.visible = false;\n }\n }\n if (handle.name === \"Z\" || handle.name === \"XYZZ\") {\n if (Math.abs(this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_TRESHOLD) {\n handle.scale.set(1e-10, 1e-10, 1e-10);\n handle.visible = false;\n }\n }\n if (handle.name === \"XY\") {\n if (Math.abs(this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_TRESHOLD) {\n handle.scale.set(1e-10, 1e-10, 1e-10);\n handle.visible = false;\n }\n }\n if (handle.name === \"YZ\") {\n if (Math.abs(this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_TRESHOLD) {\n handle.scale.set(1e-10, 1e-10, 1e-10);\n handle.visible = false;\n }\n }\n if (handle.name === \"XZ\") {\n if (Math.abs(this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_TRESHOLD) {\n handle.scale.set(1e-10, 1e-10, 1e-10);\n handle.visible = false;\n }\n }\n if (handle.name.search(\"X\") !== -1) {\n if (this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye) < AXIS_FLIP_TRESHOLD) {\n if (handle.tag === \"fwd\") {\n handle.visible = false;\n } else {\n handle.scale.x *= -1;\n }\n } else if (handle.tag === \"bwd\") {\n handle.visible = false;\n }\n }\n if (handle.name.search(\"Y\") !== -1) {\n if (this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye) < AXIS_FLIP_TRESHOLD) {\n if (handle.tag === \"fwd\") {\n handle.visible = false;\n } else {\n handle.scale.y *= -1;\n }\n } else if (handle.tag === \"bwd\") {\n handle.visible = false;\n }\n }\n if (handle.name.search(\"Z\") !== -1) {\n if (this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye) < AXIS_FLIP_TRESHOLD) {\n if (handle.tag === \"fwd\") {\n handle.visible = false;\n } else {\n handle.scale.z *= -1;\n }\n } else if (handle.tag === \"bwd\") {\n handle.visible = false;\n }\n }\n } else if (this.mode === \"rotate\") {\n this.tempQuaternion2.copy(quaternion);\n this.alignVector.copy(this.eye).applyQuaternion(this.tempQuaternion.copy(quaternion).invert());\n if (handle.name.search(\"E\") !== -1) {\n handle.quaternion.setFromRotationMatrix(this.lookAtMatrix.lookAt(this.eye, this.zeroVector, this.unitY));\n }\n if (handle.name === \"X\") {\n this.tempQuaternion.setFromAxisAngle(this.unitX, Math.atan2(-this.alignVector.y, this.alignVector.z));\n this.tempQuaternion.multiplyQuaternions(this.tempQuaternion2, this.tempQuaternion);\n handle.quaternion.copy(this.tempQuaternion);\n }\n if (handle.name === \"Y\") {\n this.tempQuaternion.setFromAxisAngle(this.unitY, Math.atan2(this.alignVector.x, this.alignVector.z));\n this.tempQuaternion.multiplyQuaternions(this.tempQuaternion2, this.tempQuaternion);\n handle.quaternion.copy(this.tempQuaternion);\n }\n if (handle.name === \"Z\") {\n this.tempQuaternion.setFromAxisAngle(this.unitZ, Math.atan2(this.alignVector.y, this.alignVector.x));\n this.tempQuaternion.multiplyQuaternions(this.tempQuaternion2, this.tempQuaternion);\n handle.quaternion.copy(this.tempQuaternion);\n }\n }\n handle.visible = handle.visible && (handle.name.indexOf(\"X\") === -1 || this.showX);\n handle.visible = handle.visible && (handle.name.indexOf(\"Y\") === -1 || this.showY);\n handle.visible = handle.visible && (handle.name.indexOf(\"Z\") === -1 || this.showZ);\n handle.visible = handle.visible && (handle.name.indexOf(\"E\") === -1 || this.showX && this.showY && this.showZ);\n handle.material.tempOpacity = handle.material.tempOpacity || handle.material.opacity;\n handle.material.tempColor = handle.material.tempColor || handle.material.color.clone();\n handle.material.color.copy(handle.material.tempColor);\n handle.material.opacity = handle.material.tempOpacity;\n if (!this.enabled) {\n handle.material.opacity *= 0.5;\n handle.material.color.lerp(new Color(1, 1, 1), 0.5);\n } else if (this.axis) {\n if (handle.name === this.axis) {\n handle.material.opacity = 1;\n handle.material.color.lerp(new Color(1, 1, 1), 0.5);\n } else if (this.axis.split(\"\").some(function(a) {\n return handle.name === a;\n })) {\n handle.material.opacity = 1;\n handle.material.color.lerp(new Color(1, 1, 1), 0.5);\n } else {\n handle.material.opacity *= 0.25;\n handle.material.color.lerp(new Color(1, 1, 1), 0.5);\n }\n }\n }\n super.updateMatrixWorld();\n });\n const gizmoMaterial = new MeshBasicMaterial({\n depthTest: false,\n depthWrite: false,\n transparent: true,\n side: DoubleSide,\n fog: false,\n toneMapped: false\n });\n const gizmoLineMaterial = new LineBasicMaterial({\n depthTest: false,\n depthWrite: false,\n transparent: true,\n linewidth: 1,\n fog: false,\n toneMapped: false\n });\n const matInvisible = gizmoMaterial.clone();\n matInvisible.opacity = 0.15;\n const matHelper = gizmoMaterial.clone();\n matHelper.opacity = 0.33;\n const matRed = gizmoMaterial.clone();\n matRed.color.set(16711680);\n const matGreen = gizmoMaterial.clone();\n matGreen.color.set(65280);\n const matBlue = gizmoMaterial.clone();\n matBlue.color.set(255);\n const matWhiteTransparent = gizmoMaterial.clone();\n matWhiteTransparent.opacity = 0.25;\n const matYellowTransparent = matWhiteTransparent.clone();\n matYellowTransparent.color.set(16776960);\n const matCyanTransparent = matWhiteTransparent.clone();\n matCyanTransparent.color.set(65535);\n const matMagentaTransparent = matWhiteTransparent.clone();\n matMagentaTransparent.color.set(16711935);\n const matYellow = gizmoMaterial.clone();\n matYellow.color.set(16776960);\n const matLineRed = gizmoLineMaterial.clone();\n matLineRed.color.set(16711680);\n const matLineGreen = gizmoLineMaterial.clone();\n matLineGreen.color.set(65280);\n const matLineBlue = gizmoLineMaterial.clone();\n matLineBlue.color.set(255);\n const matLineCyan = gizmoLineMaterial.clone();\n matLineCyan.color.set(65535);\n const matLineMagenta = gizmoLineMaterial.clone();\n matLineMagenta.color.set(16711935);\n const matLineYellow = gizmoLineMaterial.clone();\n matLineYellow.color.set(16776960);\n const matLineGray = gizmoLineMaterial.clone();\n matLineGray.color.set(7895160);\n const matLineYellowTransparent = matLineYellow.clone();\n matLineYellowTransparent.opacity = 0.25;\n const arrowGeometry = new CylinderGeometry(0, 0.05, 0.2, 12, 1, false);\n const scaleHandleGeometry = new BoxGeometry(0.125, 0.125, 0.125);\n const lineGeometry = new BufferGeometry();\n lineGeometry.setAttribute(\"position\", new Float32BufferAttribute([0, 0, 0, 1, 0, 0], 3));\n const CircleGeometry = (radius, arc) => {\n const geometry = new BufferGeometry();\n const vertices = [];\n for (let i = 0; i <= 64 * arc; ++i) {\n vertices.push(0, Math.cos(i / 32 * Math.PI) * radius, Math.sin(i / 32 * Math.PI) * radius);\n }\n geometry.setAttribute(\"position\", new Float32BufferAttribute(vertices, 3));\n return geometry;\n };\n const TranslateHelperGeometry = () => {\n const geometry = new BufferGeometry();\n geometry.setAttribute(\"position\", new Float32BufferAttribute([0, 0, 0, 1, 1, 1], 3));\n return geometry;\n };\n const gizmoTranslate = {\n X: [\n [new Mesh(arrowGeometry, matRed), [1, 0, 0], [0, 0, -Math.PI / 2], null, \"fwd\"],\n [new Mesh(arrowGeometry, matRed), [1, 0, 0], [0, 0, Math.PI / 2], null, \"bwd\"],\n [new Line(lineGeometry, matLineRed)]\n ],\n Y: [\n [new Mesh(arrowGeometry, matGreen), [0, 1, 0], null, null, \"fwd\"],\n [new Mesh(arrowGeometry, matGreen), [0, 1, 0], [Math.PI, 0, 0], null, \"bwd\"],\n [new Line(lineGeometry, matLineGreen), null, [0, 0, Math.PI / 2]]\n ],\n Z: [\n [new Mesh(arrowGeometry, matBlue), [0, 0, 1], [Math.PI / 2, 0, 0], null, \"fwd\"],\n [new Mesh(arrowGeometry, matBlue), [0, 0, 1], [-Math.PI / 2, 0, 0], null, \"bwd\"],\n [new Line(lineGeometry, matLineBlue), null, [0, -Math.PI / 2, 0]]\n ],\n XYZ: [[new Mesh(new OctahedronGeometry(0.1, 0), matWhiteTransparent.clone()), [0, 0, 0], [0, 0, 0]]],\n XY: [\n [new Mesh(new PlaneGeometry(0.295, 0.295), matYellowTransparent.clone()), [0.15, 0.15, 0]],\n [new Line(lineGeometry, matLineYellow), [0.18, 0.3, 0], null, [0.125, 1, 1]],\n [new Line(lineGeometry, matLineYellow), [0.3, 0.18, 0], [0, 0, Math.PI / 2], [0.125, 1, 1]]\n ],\n YZ: [\n [new Mesh(new PlaneGeometry(0.295, 0.295), matCyanTransparent.clone()), [0, 0.15, 0.15], [0, Math.PI / 2, 0]],\n [new Line(lineGeometry, matLineCyan), [0, 0.18, 0.3], [0, 0, Math.PI / 2], [0.125, 1, 1]],\n [new Line(lineGeometry, matLineCyan), [0, 0.3, 0.18], [0, -Math.PI / 2, 0], [0.125, 1, 1]]\n ],\n XZ: [\n [\n new Mesh(new PlaneGeometry(0.295, 0.295), matMagentaTransparent.clone()),\n [0.15, 0, 0.15],\n [-Math.PI / 2, 0, 0]\n ],\n [new Line(lineGeometry, matLineMagenta), [0.18, 0, 0.3], null, [0.125, 1, 1]],\n [new Line(lineGeometry, matLineMagenta), [0.3, 0, 0.18], [0, -Math.PI / 2, 0], [0.125, 1, 1]]\n ]\n };\n const pickerTranslate = {\n X: [[new Mesh(new CylinderGeometry(0.2, 0, 1, 4, 1, false), matInvisible), [0.6, 0, 0], [0, 0, -Math.PI / 2]]],\n Y: [[new Mesh(new CylinderGeometry(0.2, 0, 1, 4, 1, false), matInvisible), [0, 0.6, 0]]],\n Z: [[new Mesh(new CylinderGeometry(0.2, 0, 1, 4, 1, false), matInvisible), [0, 0, 0.6], [Math.PI / 2, 0, 0]]],\n XYZ: [[new Mesh(new OctahedronGeometry(0.2, 0), matInvisible)]],\n XY: [[new Mesh(new PlaneGeometry(0.4, 0.4), matInvisible), [0.2, 0.2, 0]]],\n YZ: [[new Mesh(new PlaneGeometry(0.4, 0.4), matInvisible), [0, 0.2, 0.2], [0, Math.PI / 2, 0]]],\n XZ: [[new Mesh(new PlaneGeometry(0.4, 0.4), matInvisible), [0.2, 0, 0.2], [-Math.PI / 2, 0, 0]]]\n };\n const helperTranslate = {\n START: [[new Mesh(new OctahedronGeometry(0.01, 2), matHelper), null, null, null, \"helper\"]],\n END: [[new Mesh(new OctahedronGeometry(0.01, 2), matHelper), null, null, null, \"helper\"]],\n DELTA: [[new Line(TranslateHelperGeometry(), matHelper), null, null, null, \"helper\"]],\n X: [[new Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], \"helper\"]],\n Y: [[new Line(lineGeometry, matHelper.clone()), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], \"helper\"]],\n Z: [[new Line(lineGeometry, matHelper.clone()), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], \"helper\"]]\n };\n const gizmoRotate = {\n X: [\n [new Line(CircleGeometry(1, 0.5), matLineRed)],\n [new Mesh(new OctahedronGeometry(0.04, 0), matRed), [0, 0, 0.99], null, [1, 3, 1]]\n ],\n Y: [\n [new Line(CircleGeometry(1, 0.5), matLineGreen), null, [0, 0, -Math.PI / 2]],\n [new Mesh(new OctahedronGeometry(0.04, 0), matGreen), [0, 0, 0.99], null, [3, 1, 1]]\n ],\n Z: [\n [new Line(CircleGeometry(1, 0.5), matLineBlue), null, [0, Math.PI / 2, 0]],\n [new Mesh(new OctahedronGeometry(0.04, 0), matBlue), [0.99, 0, 0], null, [1, 3, 1]]\n ],\n E: [\n [new Line(CircleGeometry(1.25, 1), matLineYellowTransparent), null, [0, Math.PI / 2, 0]],\n [\n new Mesh(new CylinderGeometry(0.03, 0, 0.15, 4, 1, false), matLineYellowTransparent),\n [1.17, 0, 0],\n [0, 0, -Math.PI / 2],\n [1, 1, 1e-3]\n ],\n [\n new Mesh(new CylinderGeometry(0.03, 0, 0.15, 4, 1, false), matLineYellowTransparent),\n [-1.17, 0, 0],\n [0, 0, Math.PI / 2],\n [1, 1, 1e-3]\n ],\n [\n new Mesh(new CylinderGeometry(0.03, 0, 0.15, 4, 1, false), matLineYellowTransparent),\n [0, -1.17, 0],\n [Math.PI, 0, 0],\n [1, 1, 1e-3]\n ],\n [\n new Mesh(new CylinderGeometry(0.03, 0, 0.15, 4, 1, false), matLineYellowTransparent),\n [0, 1.17, 0],\n [0, 0, 0],\n [1, 1, 1e-3]\n ]\n ],\n XYZE: [[new Line(CircleGeometry(1, 1), matLineGray), null, [0, Math.PI / 2, 0]]]\n };\n const helperRotate = {\n AXIS: [[new Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], \"helper\"]]\n };\n const pickerRotate = {\n X: [[new Mesh(new TorusGeometry(1, 0.1, 4, 24), matInvisible), [0, 0, 0], [0, -Math.PI / 2, -Math.PI / 2]]],\n Y: [[new Mesh(new TorusGeometry(1, 0.1, 4, 24), matInvisible), [0, 0, 0], [Math.PI / 2, 0, 0]]],\n Z: [[new Mesh(new TorusGeometry(1, 0.1, 4, 24), matInvisible), [0, 0, 0], [0, 0, -Math.PI / 2]]],\n E: [[new Mesh(new TorusGeometry(1.25, 0.1, 2, 24), matInvisible)]],\n XYZE: [[new Mesh(new SphereGeometry(0.7, 10, 8), matInvisible)]]\n };\n const gizmoScale = {\n X: [\n [new Mesh(scaleHandleGeometry, matRed), [0.8, 0, 0], [0, 0, -Math.PI / 2]],\n [new Line(lineGeometry, matLineRed), null, null, [0.8, 1, 1]]\n ],\n Y: [\n [new Mesh(scaleHandleGeometry, matGreen), [0, 0.8, 0]],\n [new Line(lineGeometry, matLineGreen), null, [0, 0, Math.PI / 2], [0.8, 1, 1]]\n ],\n Z: [\n [new Mesh(scaleHandleGeometry, matBlue), [0, 0, 0.8], [Math.PI / 2, 0, 0]],\n [new Line(lineGeometry, matLineBlue), null, [0, -Math.PI / 2, 0], [0.8, 1, 1]]\n ],\n XY: [\n [new Mesh(scaleHandleGeometry, matYellowTransparent), [0.85, 0.85, 0], null, [2, 2, 0.2]],\n [new Line(lineGeometry, matLineYellow), [0.855, 0.98, 0], null, [0.125, 1, 1]],\n [new Line(lineGeometry, matLineYellow), [0.98, 0.855, 0], [0, 0, Math.PI / 2], [0.125, 1, 1]]\n ],\n YZ: [\n [new Mesh(scaleHandleGeometry, matCyanTransparent), [0, 0.85, 0.85], null, [0.2, 2, 2]],\n [new Line(lineGeometry, matLineCyan), [0, 0.855, 0.98], [0, 0, Math.PI / 2], [0.125, 1, 1]],\n [new Line(lineGeometry, matLineCyan), [0, 0.98, 0.855], [0, -Math.PI / 2, 0], [0.125, 1, 1]]\n ],\n XZ: [\n [new Mesh(scaleHandleGeometry, matMagentaTransparent), [0.85, 0, 0.85], null, [2, 0.2, 2]],\n [new Line(lineGeometry, matLineMagenta), [0.855, 0, 0.98], null, [0.125, 1, 1]],\n [new Line(lineGeometry, matLineMagenta), [0.98, 0, 0.855], [0, -Math.PI / 2, 0], [0.125, 1, 1]]\n ],\n XYZX: [[new Mesh(new BoxGeometry(0.125, 0.125, 0.125), matWhiteTransparent.clone()), [1.1, 0, 0]]],\n XYZY: [[new Mesh(new BoxGeometry(0.125, 0.125, 0.125), matWhiteTransparent.clone()), [0, 1.1, 0]]],\n XYZZ: [[new Mesh(new BoxGeometry(0.125, 0.125, 0.125), matWhiteTransparent.clone()), [0, 0, 1.1]]]\n };\n const pickerScale = {\n X: [[new Mesh(new CylinderGeometry(0.2, 0, 0.8, 4, 1, false), matInvisible), [0.5, 0, 0], [0, 0, -Math.PI / 2]]],\n Y: [[new Mesh(new CylinderGeometry(0.2, 0, 0.8, 4, 1, false), matInvisible), [0, 0.5, 0]]],\n Z: [[new Mesh(new CylinderGeometry(0.2, 0, 0.8, 4, 1, false), matInvisible), [0, 0, 0.5], [Math.PI / 2, 0, 0]]],\n XY: [[new Mesh(scaleHandleGeometry, matInvisible), [0.85, 0.85, 0], null, [3, 3, 0.2]]],\n YZ: [[new Mesh(scaleHandleGeometry, matInvisible), [0, 0.85, 0.85], null, [0.2, 3, 3]]],\n XZ: [[new Mesh(scaleHandleGeometry, matInvisible), [0.85, 0, 0.85], null, [3, 0.2, 3]]],\n XYZX: [[new Mesh(new BoxGeometry(0.2, 0.2, 0.2), matInvisible), [1.1, 0, 0]]],\n XYZY: [[new Mesh(new BoxGeometry(0.2, 0.2, 0.2), matInvisible), [0, 1.1, 0]]],\n XYZZ: [[new Mesh(new BoxGeometry(0.2, 0.2, 0.2), matInvisible), [0, 0, 1.1]]]\n };\n const helperScale = {\n X: [[new Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], \"helper\"]],\n Y: [[new Line(lineGeometry, matHelper.clone()), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], \"helper\"]],\n Z: [[new Line(lineGeometry, matHelper.clone()), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], \"helper\"]]\n };\n const setupGizmo = (gizmoMap) => {\n const gizmo = new Object3D();\n for (let name in gizmoMap) {\n for (let i = gizmoMap[name].length; i--; ) {\n const object = gizmoMap[name][i][0].clone();\n const position = gizmoMap[name][i][1];\n const rotation = gizmoMap[name][i][2];\n const scale = gizmoMap[name][i][3];\n const tag = gizmoMap[name][i][4];\n object.name = name;\n object.tag = tag;\n if (position) {\n object.position.set(position[0], position[1], position[2]);\n }\n if (rotation) {\n object.rotation.set(rotation[0], rotation[1], rotation[2]);\n }\n if (scale) {\n object.scale.set(scale[0], scale[1], scale[2]);\n }\n object.updateMatrix();\n const tempGeometry = object.geometry.clone();\n tempGeometry.applyMatrix4(object.matrix);\n object.geometry = tempGeometry;\n object.renderOrder = Infinity;\n object.position.set(0, 0, 0);\n object.rotation.set(0, 0, 0);\n object.scale.set(1, 1, 1);\n gizmo.add(object);\n }\n }\n return gizmo;\n };\n this.gizmo = {};\n this.picker = {};\n this.helper = {};\n this.add(this.gizmo[\"translate\"] = setupGizmo(gizmoTranslate));\n this.add(this.gizmo[\"rotate\"] = setupGizmo(gizmoRotate));\n this.add(this.gizmo[\"scale\"] = setupGizmo(gizmoScale));\n this.add(this.picker[\"translate\"] = setupGizmo(pickerTranslate));\n this.add(this.picker[\"rotate\"] = setupGizmo(pickerRotate));\n this.add(this.picker[\"scale\"] = setupGizmo(pickerScale));\n this.add(this.helper[\"translate\"] = setupGizmo(helperTranslate));\n this.add(this.helper[\"rotate\"] = setupGizmo(helperRotate));\n this.add(this.helper[\"scale\"] = setupGizmo(helperScale));\n this.picker[\"translate\"].visible = false;\n this.picker[\"rotate\"].visible = false;\n this.picker[\"scale\"].visible = false;\n }\n}\nclass TransformControlsPlane extends Mesh {\n constructor() {\n super(\n new PlaneGeometry(1e5, 1e5, 2, 2),\n new MeshBasicMaterial({\n visible: false,\n wireframe: true,\n side: DoubleSide,\n transparent: true,\n opacity: 0.1,\n toneMapped: false\n })\n );\n __publicField(this, \"isTransformControlsPlane\", true);\n __publicField(this, \"type\", \"TransformControlsPlane\");\n __publicField(this, \"unitX\", new Vector3(1, 0, 0));\n __publicField(this, \"unitY\", new Vector3(0, 1, 0));\n __publicField(this, \"unitZ\", new Vector3(0, 0, 1));\n __publicField(this, \"tempVector\", new Vector3());\n __publicField(this, \"dirVector\", new Vector3());\n __publicField(this, \"alignVector\", new Vector3());\n __publicField(this, \"tempMatrix\", new Matrix4());\n __publicField(this, \"identityQuaternion\", new Quaternion());\n // these are set from parent class TransformControls\n __publicField(this, \"cameraQuaternion\", new Quaternion());\n __publicField(this, \"worldPosition\", new Vector3());\n __publicField(this, \"worldQuaternion\", new Quaternion());\n __publicField(this, \"eye\", new Vector3());\n __publicField(this, \"axis\", null);\n __publicField(this, \"mode\", \"translate\");\n __publicField(this, \"space\", \"world\");\n __publicField(this, \"updateMatrixWorld\", () => {\n let space = this.space;\n this.position.copy(this.worldPosition);\n if (this.mode === \"scale\")\n space = \"local\";\n this.unitX.set(1, 0, 0).applyQuaternion(space === \"local\" ? this.worldQuaternion : this.identityQuaternion);\n this.unitY.set(0, 1, 0).applyQuaternion(space === \"local\" ? this.worldQuaternion : this.identityQuaternion);\n this.unitZ.set(0, 0, 1).applyQuaternion(space === \"local\" ? this.worldQuaternion : this.identityQuaternion);\n this.alignVector.copy(this.unitY);\n switch (this.mode) {\n case \"translate\":\n case \"scale\":\n switch (this.axis) {\n case \"X\":\n this.alignVector.copy(this.eye).cross(this.unitX);\n this.dirVector.copy(this.unitX).cross(this.alignVector);\n break;\n case \"Y\":\n this.alignVector.copy(this.eye).cross(this.unitY);\n this.dirVector.copy(this.unitY).cross(this.alignVector);\n break;\n case \"Z\":\n this.alignVector.copy(this.eye).cross(this.unitZ);\n this.dirVector.copy(this.unitZ).cross(this.alignVector);\n break;\n case \"XY\":\n this.dirVector.copy(this.unitZ);\n break;\n case \"YZ\":\n this.dirVector.copy(this.unitX);\n break;\n case \"XZ\":\n this.alignVector.copy(this.unitZ);\n this.dirVector.copy(this.unitY);\n break;\n case \"XYZ\":\n case \"E\":\n this.dirVector.set(0, 0, 0);\n break;\n }\n break;\n case \"rotate\":\n default:\n this.dirVector.set(0, 0, 0);\n }\n if (this.dirVector.length() === 0) {\n this.quaternion.copy(this.cameraQuaternion);\n } else {\n this.tempMatrix.lookAt(this.tempVector.set(0, 0, 0), this.dirVector, this.alignVector);\n this.quaternion.setFromRotationMatrix(this.tempMatrix);\n }\n super.updateMatrixWorld();\n });\n }\n}\nexport {\n TransformControls,\n TransformControlsGizmo,\n TransformControlsPlane\n};\n//# sourceMappingURL=TransformControls.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Vector3, Euler } from \"three\";\nimport { EventDispatcher } from \"./EventDispatcher.js\";\nconst _euler = /* @__PURE__ */ new Euler(0, 0, 0, \"YXZ\");\nconst _vector = /* @__PURE__ */ new Vector3();\nconst _changeEvent = { type: \"change\" };\nconst _lockEvent = { type: \"lock\" };\nconst _unlockEvent = { type: \"unlock\" };\nconst _MOUSE_SENSITIVITY = 2e-3;\nconst _PI_2 = Math.PI / 2;\nclass PointerLockControls extends EventDispatcher {\n constructor(camera, domElement) {\n super();\n __publicField(this, \"camera\");\n __publicField(this, \"domElement\");\n __publicField(this, \"isLocked\");\n __publicField(this, \"minPolarAngle\");\n __publicField(this, \"maxPolarAngle\");\n __publicField(this, \"pointerSpeed\");\n __publicField(this, \"onMouseMove\", (event) => {\n if (!this.domElement || this.isLocked === false)\n return;\n _euler.setFromQuaternion(this.camera.quaternion);\n _euler.y -= event.movementX * _MOUSE_SENSITIVITY * this.pointerSpeed;\n _euler.x -= event.movementY * _MOUSE_SENSITIVITY * this.pointerSpeed;\n _euler.x = Math.max(_PI_2 - this.maxPolarAngle, Math.min(_PI_2 - this.minPolarAngle, _euler.x));\n this.camera.quaternion.setFromEuler(_euler);\n this.dispatchEvent(_changeEvent);\n });\n __publicField(this, \"onPointerlockChange\", () => {\n if (!this.domElement)\n return;\n if (this.domElement.ownerDocument.pointerLockElement === this.domElement) {\n this.dispatchEvent(_lockEvent);\n this.isLocked = true;\n } else {\n this.dispatchEvent(_unlockEvent);\n this.isLocked = false;\n }\n });\n __publicField(this, \"onPointerlockError\", () => {\n console.error(\"THREE.PointerLockControls: Unable to use Pointer Lock API\");\n });\n __publicField(this, \"connect\", (domElement) => {\n this.domElement = domElement || this.domElement;\n if (!this.domElement)\n return;\n this.domElement.ownerDocument.addEventListener(\"mousemove\", this.onMouseMove);\n this.domElement.ownerDocument.addEventListener(\"pointerlockchange\", this.onPointerlockChange);\n this.domElement.ownerDocument.addEventListener(\"pointerlockerror\", this.onPointerlockError);\n });\n __publicField(this, \"disconnect\", () => {\n if (!this.domElement)\n return;\n this.domElement.ownerDocument.removeEventListener(\"mousemove\", this.onMouseMove);\n this.domElement.ownerDocument.removeEventListener(\"pointerlockchange\", this.onPointerlockChange);\n this.domElement.ownerDocument.removeEventListener(\"pointerlockerror\", this.onPointerlockError);\n });\n __publicField(this, \"dispose\", () => {\n this.disconnect();\n });\n __publicField(this, \"getObject\", () => {\n return this.camera;\n });\n __publicField(this, \"direction\", new Vector3(0, 0, -1));\n __publicField(this, \"getDirection\", (v) => {\n return v.copy(this.direction).applyQuaternion(this.camera.quaternion);\n });\n __publicField(this, \"moveForward\", (distance) => {\n _vector.setFromMatrixColumn(this.camera.matrix, 0);\n _vector.crossVectors(this.camera.up, _vector);\n this.camera.position.addScaledVector(_vector, distance);\n });\n __publicField(this, \"moveRight\", (distance) => {\n _vector.setFromMatrixColumn(this.camera.matrix, 0);\n this.camera.position.addScaledVector(_vector, distance);\n });\n __publicField(this, \"lock\", () => {\n if (this.domElement)\n this.domElement.requestPointerLock();\n });\n __publicField(this, \"unlock\", () => {\n if (this.domElement)\n this.domElement.ownerDocument.exitPointerLock();\n });\n this.camera = camera;\n this.domElement = domElement;\n this.isLocked = false;\n this.minPolarAngle = 0;\n this.maxPolarAngle = Math.PI;\n this.pointerSpeed = 1;\n if (domElement)\n this.connect(domElement);\n }\n}\nexport {\n PointerLockControls\n};\n//# sourceMappingURL=PointerLockControls.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Vector3, Euler, Quaternion, MathUtils } from \"three\";\nimport { EventDispatcher } from \"./EventDispatcher.js\";\nclass DeviceOrientationControls extends EventDispatcher {\n // radians\n constructor(object) {\n super();\n __publicField(this, \"object\");\n __publicField(this, \"changeEvent\", { type: \"change\" });\n __publicField(this, \"EPS\", 1e-6);\n __publicField(this, \"enabled\", true);\n __publicField(this, \"deviceOrientation\", { alpha: 0, beta: 0, gamma: 0 });\n __publicField(this, \"screenOrientation\", 0);\n __publicField(this, \"alphaOffset\", 0);\n __publicField(this, \"onDeviceOrientationChangeEvent\", (event) => {\n this.deviceOrientation = event;\n });\n __publicField(this, \"onScreenOrientationChangeEvent\", () => {\n this.screenOrientation = window.orientation || 0;\n });\n // The angles alpha, beta and gamma form a set of intrinsic Tait-Bryan angles of type Z-X'-Y''\n __publicField(this, \"zee\", new Vector3(0, 0, 1));\n __publicField(this, \"euler\", new Euler());\n __publicField(this, \"q0\", new Quaternion());\n __publicField(this, \"q1\", new Quaternion(-Math.sqrt(0.5), 0, 0, Math.sqrt(0.5)));\n // - PI/2 around the x-axis\n __publicField(this, \"setObjectQuaternion\", (quaternion, alpha, beta, gamma, orient) => {\n this.euler.set(beta, alpha, -gamma, \"YXZ\");\n quaternion.setFromEuler(this.euler);\n quaternion.multiply(this.q1);\n quaternion.multiply(this.q0.setFromAxisAngle(this.zee, -orient));\n });\n __publicField(this, \"connect\", () => {\n this.onScreenOrientationChangeEvent();\n if (window.DeviceOrientationEvent !== void 0 && // @ts-ignore\n typeof window.DeviceOrientationEvent.requestPermission === \"function\") {\n window.DeviceOrientationEvent.requestPermission().then((response) => {\n if (response == \"granted\") {\n window.addEventListener(\"orientationchange\", this.onScreenOrientationChangeEvent);\n window.addEventListener(\"deviceorientation\", this.onDeviceOrientationChangeEvent);\n }\n }).catch((error) => {\n console.error(\"THREE.DeviceOrientationControls: Unable to use DeviceOrientation API:\", error);\n });\n } else {\n window.addEventListener(\"orientationchange\", this.onScreenOrientationChangeEvent);\n window.addEventListener(\"deviceorientation\", this.onDeviceOrientationChangeEvent);\n }\n this.enabled = true;\n });\n __publicField(this, \"disconnect\", () => {\n window.removeEventListener(\"orientationchange\", this.onScreenOrientationChangeEvent);\n window.removeEventListener(\"deviceorientation\", this.onDeviceOrientationChangeEvent);\n this.enabled = false;\n });\n __publicField(this, \"lastQuaternion\", new Quaternion());\n __publicField(this, \"update\", () => {\n if (this.enabled === false)\n return;\n const device = this.deviceOrientation;\n if (device) {\n const alpha = device.alpha ? MathUtils.degToRad(device.alpha) + this.alphaOffset : 0;\n const beta = device.beta ? MathUtils.degToRad(device.beta) : 0;\n const gamma = device.gamma ? MathUtils.degToRad(device.gamma) : 0;\n const orient = this.screenOrientation ? MathUtils.degToRad(this.screenOrientation) : 0;\n this.setObjectQuaternion(this.object.quaternion, alpha, beta, gamma, orient);\n if (8 * (1 - this.lastQuaternion.dot(this.object.quaternion)) > this.EPS) {\n this.lastQuaternion.copy(this.object.quaternion);\n this.dispatchEvent(this.changeEvent);\n }\n }\n });\n __publicField(this, \"dispose\", () => this.disconnect());\n this.object = object;\n this.object.rotation.reorder(\"YXZ\");\n this.connect();\n }\n}\nexport {\n DeviceOrientationControls\n};\n//# sourceMappingURL=DeviceOrientationControls.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { MOUSE, Vector3, Vector2, Quaternion } from \"three\";\nimport { EventDispatcher } from \"./EventDispatcher.js\";\nclass TrackballControls extends EventDispatcher {\n constructor(object, domElement) {\n super();\n __publicField(this, \"enabled\", true);\n __publicField(this, \"screen\", { left: 0, top: 0, width: 0, height: 0 });\n __publicField(this, \"rotateSpeed\", 1);\n __publicField(this, \"zoomSpeed\", 1.2);\n __publicField(this, \"panSpeed\", 0.3);\n __publicField(this, \"noRotate\", false);\n __publicField(this, \"noZoom\", false);\n __publicField(this, \"noPan\", false);\n __publicField(this, \"staticMoving\", false);\n __publicField(this, \"dynamicDampingFactor\", 0.2);\n __publicField(this, \"minDistance\", 0);\n __publicField(this, \"maxDistance\", Infinity);\n __publicField(this, \"keys\", [\n \"KeyA\",\n \"KeyS\",\n \"KeyD\"\n /*D*/\n ]);\n __publicField(this, \"mouseButtons\", {\n LEFT: MOUSE.ROTATE,\n MIDDLE: MOUSE.DOLLY,\n RIGHT: MOUSE.PAN\n });\n __publicField(this, \"object\");\n __publicField(this, \"domElement\");\n __publicField(this, \"cursorZoom\", false);\n __publicField(this, \"target\", new Vector3());\n __publicField(this, \"mousePosition\", new Vector2());\n // internals\n __publicField(this, \"STATE\", {\n NONE: -1,\n ROTATE: 0,\n ZOOM: 1,\n PAN: 2,\n TOUCH_ROTATE: 3,\n TOUCH_ZOOM_PAN: 4\n });\n __publicField(this, \"EPS\", 1e-6);\n __publicField(this, \"lastZoom\", 1);\n __publicField(this, \"lastPosition\", new Vector3());\n __publicField(this, \"cursorVector\", new Vector3());\n __publicField(this, \"targetVector\", new Vector3());\n __publicField(this, \"_state\", this.STATE.NONE);\n __publicField(this, \"_keyState\", this.STATE.NONE);\n __publicField(this, \"_eye\", new Vector3());\n __publicField(this, \"_movePrev\", new Vector2());\n __publicField(this, \"_moveCurr\", new Vector2());\n __publicField(this, \"_lastAxis\", new Vector3());\n __publicField(this, \"_lastAngle\", 0);\n __publicField(this, \"_zoomStart\", new Vector2());\n __publicField(this, \"_zoomEnd\", new Vector2());\n __publicField(this, \"_touchZoomDistanceStart\", 0);\n __publicField(this, \"_touchZoomDistanceEnd\", 0);\n __publicField(this, \"_panStart\", new Vector2());\n __publicField(this, \"_panEnd\", new Vector2());\n __publicField(this, \"target0\");\n __publicField(this, \"position0\");\n __publicField(this, \"up0\");\n __publicField(this, \"zoom0\");\n // events\n __publicField(this, \"changeEvent\", { type: \"change\" });\n __publicField(this, \"startEvent\", { type: \"start\" });\n __publicField(this, \"endEvent\", { type: \"end\" });\n __publicField(this, \"onScreenVector\", new Vector2());\n __publicField(this, \"getMouseOnScreen\", (pageX, pageY) => {\n this.onScreenVector.set(\n (pageX - this.screen.left) / this.screen.width,\n (pageY - this.screen.top) / this.screen.height\n );\n return this.onScreenVector;\n });\n __publicField(this, \"onCircleVector\", new Vector2());\n __publicField(this, \"getMouseOnCircle\", (pageX, pageY) => {\n this.onCircleVector.set(\n (pageX - this.screen.width * 0.5 - this.screen.left) / (this.screen.width * 0.5),\n (this.screen.height + 2 * (this.screen.top - pageY)) / this.screen.width\n // screen.width intentional\n );\n return this.onCircleVector;\n });\n __publicField(this, \"axis\", new Vector3());\n __publicField(this, \"quaternion\", new Quaternion());\n __publicField(this, \"eyeDirection\", new Vector3());\n __publicField(this, \"objectUpDirection\", new Vector3());\n __publicField(this, \"objectSidewaysDirection\", new Vector3());\n __publicField(this, \"moveDirection\", new Vector3());\n __publicField(this, \"angle\", 0);\n __publicField(this, \"rotateCamera\", () => {\n this.moveDirection.set(this._moveCurr.x - this._movePrev.x, this._moveCurr.y - this._movePrev.y, 0);\n this.angle = this.moveDirection.length();\n if (this.angle) {\n this._eye.copy(this.object.position).sub(this.target);\n this.eyeDirection.copy(this._eye).normalize();\n this.objectUpDirection.copy(this.object.up).normalize();\n this.objectSidewaysDirection.crossVectors(this.objectUpDirection, this.eyeDirection).normalize();\n this.objectUpDirection.setLength(this._moveCurr.y - this._movePrev.y);\n this.objectSidewaysDirection.setLength(this._moveCurr.x - this._movePrev.x);\n this.moveDirection.copy(this.objectUpDirection.add(this.objectSidewaysDirection));\n this.axis.crossVectors(this.moveDirection, this._eye).normalize();\n this.angle *= this.rotateSpeed;\n this.quaternion.setFromAxisAngle(this.axis, this.angle);\n this._eye.applyQuaternion(this.quaternion);\n this.object.up.applyQuaternion(this.quaternion);\n this._lastAxis.copy(this.axis);\n this._lastAngle = this.angle;\n } else if (!this.staticMoving && this._lastAngle) {\n this._lastAngle *= Math.sqrt(1 - this.dynamicDampingFactor);\n this._eye.copy(this.object.position).sub(this.target);\n this.quaternion.setFromAxisAngle(this._lastAxis, this._lastAngle);\n this._eye.applyQuaternion(this.quaternion);\n this.object.up.applyQuaternion(this.quaternion);\n }\n this._movePrev.copy(this._moveCurr);\n });\n __publicField(this, \"zoomCamera\", () => {\n let factor;\n if (this._state === this.STATE.TOUCH_ZOOM_PAN) {\n factor = this._touchZoomDistanceStart / this._touchZoomDistanceEnd;\n this._touchZoomDistanceStart = this._touchZoomDistanceEnd;\n if (this.object.isPerspectiveCamera) {\n this._eye.multiplyScalar(factor);\n } else if (this.object.isOrthographicCamera) {\n this.object.zoom /= factor;\n this.object.updateProjectionMatrix();\n } else {\n console.warn(\"THREE.TrackballControls: Unsupported camera type\");\n }\n } else {\n factor = 1 + (this._zoomEnd.y - this._zoomStart.y) * this.zoomSpeed;\n if (Math.abs(factor - 1) > this.EPS && factor > 0) {\n if (this.object.isPerspectiveCamera) {\n if (factor > 1 && this._eye.length() >= this.maxDistance - this.EPS) {\n factor = 1;\n }\n this._eye.multiplyScalar(factor);\n } else if (this.object.isOrthographicCamera) {\n if (factor > 1 && this.object.zoom < this.maxDistance * this.maxDistance) {\n factor = 1;\n }\n this.object.zoom /= factor;\n } else {\n console.warn(\"THREE.TrackballControls: Unsupported camera type\");\n }\n }\n if (this.staticMoving) {\n this._zoomStart.copy(this._zoomEnd);\n } else {\n this._zoomStart.y += (this._zoomEnd.y - this._zoomStart.y) * this.dynamicDampingFactor;\n }\n if (this.cursorZoom) {\n this.targetVector.copy(this.target).project(this.object);\n let worldPos = this.cursorVector.set(this.mousePosition.x, this.mousePosition.y, this.targetVector.z).unproject(this.object);\n this.target.lerpVectors(worldPos, this.target, factor);\n }\n if (this.object.isOrthographicCamera) {\n this.object.updateProjectionMatrix();\n }\n }\n });\n __publicField(this, \"mouseChange\", new Vector2());\n __publicField(this, \"objectUp\", new Vector3());\n __publicField(this, \"pan\", new Vector3());\n __publicField(this, \"panCamera\", () => {\n if (!this.domElement)\n return;\n this.mouseChange.copy(this._panEnd).sub(this._panStart);\n if (this.mouseChange.lengthSq() > this.EPS) {\n if (this.object.isOrthographicCamera) {\n const orthoObject = this.object;\n const scale_x = (orthoObject.right - orthoObject.left) / this.object.zoom;\n const scale_y = (orthoObject.top - orthoObject.bottom) / this.object.zoom;\n this.mouseChange.x *= scale_x;\n this.mouseChange.y *= scale_y;\n } else {\n this.mouseChange.multiplyScalar(this._eye.length() * this.panSpeed);\n }\n this.pan.copy(this._eye).cross(this.object.up).setLength(this.mouseChange.x);\n this.pan.add(this.objectUp.copy(this.object.up).setLength(this.mouseChange.y));\n this.object.position.add(this.pan);\n this.target.add(this.pan);\n if (this.staticMoving) {\n this._panStart.copy(this._panEnd);\n } else {\n this._panStart.add(\n this.mouseChange.subVectors(this._panEnd, this._panStart).multiplyScalar(this.dynamicDampingFactor)\n );\n }\n }\n });\n __publicField(this, \"checkDistances\", () => {\n if (!this.noZoom || !this.noPan) {\n if (this._eye.lengthSq() > this.maxDistance * this.maxDistance) {\n this.object.position.addVectors(this.target, this._eye.setLength(this.maxDistance));\n this._zoomStart.copy(this._zoomEnd);\n }\n if (this._eye.lengthSq() < this.minDistance * this.minDistance) {\n this.object.position.addVectors(this.target, this._eye.setLength(this.minDistance));\n this._zoomStart.copy(this._zoomEnd);\n }\n }\n });\n __publicField(this, \"handleResize\", () => {\n if (!this.domElement)\n return;\n const box = this.domElement.getBoundingClientRect();\n const d = this.domElement.ownerDocument.documentElement;\n this.screen.left = box.left + window.pageXOffset - d.clientLeft;\n this.screen.top = box.top + window.pageYOffset - d.clientTop;\n this.screen.width = box.width;\n this.screen.height = box.height;\n });\n __publicField(this, \"update\", () => {\n this._eye.subVectors(this.object.position, this.target);\n if (!this.noRotate) {\n this.rotateCamera();\n }\n if (!this.noZoom) {\n this.zoomCamera();\n }\n if (!this.noPan) {\n this.panCamera();\n }\n this.object.position.addVectors(this.target, this._eye);\n if (this.object.isPerspectiveCamera) {\n this.checkDistances();\n this.object.lookAt(this.target);\n if (this.lastPosition.distanceToSquared(this.object.position) > this.EPS) {\n this.dispatchEvent(this.changeEvent);\n this.lastPosition.copy(this.object.position);\n }\n } else if (this.object.isOrthographicCamera) {\n this.object.lookAt(this.target);\n if (this.lastPosition.distanceToSquared(this.object.position) > this.EPS || this.lastZoom !== this.object.zoom) {\n this.dispatchEvent(this.changeEvent);\n this.lastPosition.copy(this.object.position);\n this.lastZoom = this.object.zoom;\n }\n } else {\n console.warn(\"THREE.TrackballControls: Unsupported camera type\");\n }\n });\n __publicField(this, \"reset\", () => {\n this._state = this.STATE.NONE;\n this._keyState = this.STATE.NONE;\n this.target.copy(this.target0);\n this.object.position.copy(this.position0);\n this.object.up.copy(this.up0);\n this.object.zoom = this.zoom0;\n this.object.updateProjectionMatrix();\n this._eye.subVectors(this.object.position, this.target);\n this.object.lookAt(this.target);\n this.dispatchEvent(this.changeEvent);\n this.lastPosition.copy(this.object.position);\n this.lastZoom = this.object.zoom;\n });\n __publicField(this, \"keydown\", (event) => {\n if (this.enabled === false)\n return;\n window.removeEventListener(\"keydown\", this.keydown);\n if (this._keyState !== this.STATE.NONE) {\n return;\n } else if (event.code === this.keys[this.STATE.ROTATE] && !this.noRotate) {\n this._keyState = this.STATE.ROTATE;\n } else if (event.code === this.keys[this.STATE.ZOOM] && !this.noZoom) {\n this._keyState = this.STATE.ZOOM;\n } else if (event.code === this.keys[this.STATE.PAN] && !this.noPan) {\n this._keyState = this.STATE.PAN;\n }\n });\n __publicField(this, \"onPointerDown\", (event) => {\n if (this.enabled === false)\n return;\n switch (event.pointerType) {\n case \"mouse\":\n case \"pen\":\n this.onMouseDown(event);\n break;\n }\n });\n __publicField(this, \"onPointerMove\", (event) => {\n if (this.enabled === false)\n return;\n switch (event.pointerType) {\n case \"mouse\":\n case \"pen\":\n this.onMouseMove(event);\n break;\n }\n });\n __publicField(this, \"onPointerUp\", (event) => {\n if (this.enabled === false)\n return;\n switch (event.pointerType) {\n case \"mouse\":\n case \"pen\":\n this.onMouseUp();\n break;\n }\n });\n __publicField(this, \"keyup\", () => {\n if (this.enabled === false)\n return;\n this._keyState = this.STATE.NONE;\n window.addEventListener(\"keydown\", this.keydown);\n });\n __publicField(this, \"onMouseDown\", (event) => {\n if (!this.domElement)\n return;\n if (this._state === this.STATE.NONE) {\n switch (event.button) {\n case this.mouseButtons.LEFT:\n this._state = this.STATE.ROTATE;\n break;\n case this.mouseButtons.MIDDLE:\n this._state = this.STATE.ZOOM;\n break;\n case this.mouseButtons.RIGHT:\n this._state = this.STATE.PAN;\n break;\n }\n }\n const state = this._keyState !== this.STATE.NONE ? this._keyState : this._state;\n if (state === this.STATE.ROTATE && !this.noRotate) {\n this._moveCurr.copy(this.getMouseOnCircle(event.pageX, event.pageY));\n this._movePrev.copy(this._moveCurr);\n } else if (state === this.STATE.ZOOM && !this.noZoom) {\n this._zoomStart.copy(this.getMouseOnScreen(event.pageX, event.pageY));\n this._zoomEnd.copy(this._zoomStart);\n } else if (state === this.STATE.PAN && !this.noPan) {\n this._panStart.copy(this.getMouseOnScreen(event.pageX, event.pageY));\n this._panEnd.copy(this._panStart);\n }\n this.domElement.ownerDocument.addEventListener(\"pointermove\", this.onPointerMove);\n this.domElement.ownerDocument.addEventListener(\"pointerup\", this.onPointerUp);\n this.dispatchEvent(this.startEvent);\n });\n __publicField(this, \"onMouseMove\", (event) => {\n if (this.enabled === false)\n return;\n const state = this._keyState !== this.STATE.NONE ? this._keyState : this._state;\n if (state === this.STATE.ROTATE && !this.noRotate) {\n this._movePrev.copy(this._moveCurr);\n this._moveCurr.copy(this.getMouseOnCircle(event.pageX, event.pageY));\n } else if (state === this.STATE.ZOOM && !this.noZoom) {\n this._zoomEnd.copy(this.getMouseOnScreen(event.pageX, event.pageY));\n } else if (state === this.STATE.PAN && !this.noPan) {\n this._panEnd.copy(this.getMouseOnScreen(event.pageX, event.pageY));\n }\n });\n __publicField(this, \"onMouseUp\", () => {\n if (!this.domElement)\n return;\n if (this.enabled === false)\n return;\n this._state = this.STATE.NONE;\n this.domElement.ownerDocument.removeEventListener(\"pointermove\", this.onPointerMove);\n this.domElement.ownerDocument.removeEventListener(\"pointerup\", this.onPointerUp);\n this.dispatchEvent(this.endEvent);\n });\n __publicField(this, \"mousewheel\", (event) => {\n if (this.enabled === false)\n return;\n if (this.noZoom === true)\n return;\n event.preventDefault();\n switch (event.deltaMode) {\n case 2:\n this._zoomStart.y -= event.deltaY * 0.025;\n break;\n case 1:\n this._zoomStart.y -= event.deltaY * 0.01;\n break;\n default:\n this._zoomStart.y -= event.deltaY * 25e-5;\n break;\n }\n this.mousePosition.x = event.offsetX / this.screen.width * 2 - 1;\n this.mousePosition.y = -(event.offsetY / this.screen.height) * 2 + 1;\n this.dispatchEvent(this.startEvent);\n this.dispatchEvent(this.endEvent);\n });\n __publicField(this, \"touchstart\", (event) => {\n if (this.enabled === false)\n return;\n event.preventDefault();\n switch (event.touches.length) {\n case 1:\n this._state = this.STATE.TOUCH_ROTATE;\n this._moveCurr.copy(this.getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY));\n this._movePrev.copy(this._moveCurr);\n break;\n default:\n this._state = this.STATE.TOUCH_ZOOM_PAN;\n const dx = event.touches[0].pageX - event.touches[1].pageX;\n const dy = event.touches[0].pageY - event.touches[1].pageY;\n this._touchZoomDistanceEnd = this._touchZoomDistanceStart = Math.sqrt(dx * dx + dy * dy);\n const x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\n const y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\n this._panStart.copy(this.getMouseOnScreen(x, y));\n this._panEnd.copy(this._panStart);\n break;\n }\n this.dispatchEvent(this.startEvent);\n });\n __publicField(this, \"touchmove\", (event) => {\n if (this.enabled === false)\n return;\n event.preventDefault();\n switch (event.touches.length) {\n case 1:\n this._movePrev.copy(this._moveCurr);\n this._moveCurr.copy(this.getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY));\n break;\n default:\n const dx = event.touches[0].pageX - event.touches[1].pageX;\n const dy = event.touches[0].pageY - event.touches[1].pageY;\n this._touchZoomDistanceEnd = Math.sqrt(dx * dx + dy * dy);\n const x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\n const y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\n this._panEnd.copy(this.getMouseOnScreen(x, y));\n break;\n }\n });\n __publicField(this, \"touchend\", (event) => {\n if (this.enabled === false)\n return;\n switch (event.touches.length) {\n case 0:\n this._state = this.STATE.NONE;\n break;\n case 1:\n this._state = this.STATE.TOUCH_ROTATE;\n this._moveCurr.copy(this.getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY));\n this._movePrev.copy(this._moveCurr);\n break;\n }\n this.dispatchEvent(this.endEvent);\n });\n __publicField(this, \"contextmenu\", (event) => {\n if (this.enabled === false)\n return;\n event.preventDefault();\n });\n // https://github.com/mrdoob/three.js/issues/20575\n __publicField(this, \"connect\", (domElement) => {\n if (domElement === document) {\n console.error(\n 'THREE.OrbitControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.'\n );\n }\n this.domElement = domElement;\n this.domElement.addEventListener(\"contextmenu\", this.contextmenu);\n this.domElement.addEventListener(\"pointerdown\", this.onPointerDown);\n this.domElement.addEventListener(\"wheel\", this.mousewheel);\n this.domElement.addEventListener(\"touchstart\", this.touchstart);\n this.domElement.addEventListener(\"touchend\", this.touchend);\n this.domElement.addEventListener(\"touchmove\", this.touchmove);\n this.domElement.ownerDocument.addEventListener(\"pointermove\", this.onPointerMove);\n this.domElement.ownerDocument.addEventListener(\"pointerup\", this.onPointerUp);\n window.addEventListener(\"keydown\", this.keydown);\n window.addEventListener(\"keyup\", this.keyup);\n this.handleResize();\n });\n __publicField(this, \"dispose\", () => {\n if (!this.domElement)\n return;\n this.domElement.removeEventListener(\"contextmenu\", this.contextmenu);\n this.domElement.removeEventListener(\"pointerdown\", this.onPointerDown);\n this.domElement.removeEventListener(\"wheel\", this.mousewheel);\n this.domElement.removeEventListener(\"touchstart\", this.touchstart);\n this.domElement.removeEventListener(\"touchend\", this.touchend);\n this.domElement.removeEventListener(\"touchmove\", this.touchmove);\n this.domElement.ownerDocument.removeEventListener(\"pointermove\", this.onPointerMove);\n this.domElement.ownerDocument.removeEventListener(\"pointerup\", this.onPointerUp);\n window.removeEventListener(\"keydown\", this.keydown);\n window.removeEventListener(\"keyup\", this.keyup);\n });\n this.object = object;\n this.target0 = this.target.clone();\n this.position0 = this.object.position.clone();\n this.up0 = this.object.up.clone();\n this.zoom0 = this.object.zoom;\n if (domElement !== void 0)\n this.connect(domElement);\n this.update();\n }\n}\nexport {\n TrackballControls\n};\n//# sourceMappingURL=TrackballControls.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Vector3, MOUSE, TOUCH, Quaternion, PerspectiveCamera, OrthographicCamera, Spherical, Vector2, Ray, Plane } from \"three\";\nimport { EventDispatcher } from \"./EventDispatcher.js\";\nconst _ray = /* @__PURE__ */ new Ray();\nconst _plane = /* @__PURE__ */ new Plane();\nconst TILT_LIMIT = Math.cos(70 * (Math.PI / 180));\nconst moduloWrapAround = (offset, capacity) => (offset % capacity + capacity) % capacity;\nclass OrbitControls extends EventDispatcher {\n constructor(object, domElement) {\n super();\n __publicField(this, \"object\");\n __publicField(this, \"domElement\");\n // Set to false to disable this control\n __publicField(this, \"enabled\", true);\n // \"target\" sets the location of focus, where the object orbits around\n __publicField(this, \"target\", new Vector3());\n // How far you can dolly in and out ( PerspectiveCamera only )\n __publicField(this, \"minDistance\", 0);\n __publicField(this, \"maxDistance\", Infinity);\n // How far you can zoom in and out ( OrthographicCamera only )\n __publicField(this, \"minZoom\", 0);\n __publicField(this, \"maxZoom\", Infinity);\n // How far you can orbit vertically, upper and lower limits.\n // Range is 0 to Math.PI radians.\n __publicField(this, \"minPolarAngle\", 0);\n // radians\n __publicField(this, \"maxPolarAngle\", Math.PI);\n // radians\n // How far you can orbit horizontally, upper and lower limits.\n // If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI )\n __publicField(this, \"minAzimuthAngle\", -Infinity);\n // radians\n __publicField(this, \"maxAzimuthAngle\", Infinity);\n // radians\n // Set to true to enable damping (inertia)\n // If damping is enabled, you must call controls.update() in your animation loop\n __publicField(this, \"enableDamping\", false);\n __publicField(this, \"dampingFactor\", 0.05);\n // This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n // Set to false to disable zooming\n __publicField(this, \"enableZoom\", true);\n __publicField(this, \"zoomSpeed\", 1);\n // Set to false to disable rotating\n __publicField(this, \"enableRotate\", true);\n __publicField(this, \"rotateSpeed\", 1);\n // Set to false to disable panning\n __publicField(this, \"enablePan\", true);\n __publicField(this, \"panSpeed\", 1);\n __publicField(this, \"screenSpacePanning\", true);\n // if false, pan orthogonal to world-space direction camera.up\n __publicField(this, \"keyPanSpeed\", 7);\n // pixels moved per arrow key push\n __publicField(this, \"zoomToCursor\", false);\n // Set to true to automatically rotate around the target\n // If auto-rotate is enabled, you must call controls.update() in your animation loop\n __publicField(this, \"autoRotate\", false);\n __publicField(this, \"autoRotateSpeed\", 2);\n // 30 seconds per orbit when fps is 60\n __publicField(this, \"reverseOrbit\", false);\n // true if you want to reverse the orbit to mouse drag from left to right = orbits left\n __publicField(this, \"reverseHorizontalOrbit\", false);\n // true if you want to reverse the horizontal orbit direction\n __publicField(this, \"reverseVerticalOrbit\", false);\n // true if you want to reverse the vertical orbit direction\n // The four arrow keys\n __publicField(this, \"keys\", { LEFT: \"ArrowLeft\", UP: \"ArrowUp\", RIGHT: \"ArrowRight\", BOTTOM: \"ArrowDown\" });\n // Mouse buttons\n __publicField(this, \"mouseButtons\", {\n LEFT: MOUSE.ROTATE,\n MIDDLE: MOUSE.DOLLY,\n RIGHT: MOUSE.PAN\n });\n // Touch fingers\n __publicField(this, \"touches\", { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN });\n __publicField(this, \"target0\");\n __publicField(this, \"position0\");\n __publicField(this, \"zoom0\");\n // the target DOM element for key events\n __publicField(this, \"_domElementKeyEvents\", null);\n __publicField(this, \"getPolarAngle\");\n __publicField(this, \"getAzimuthalAngle\");\n __publicField(this, \"setPolarAngle\");\n __publicField(this, \"setAzimuthalAngle\");\n __publicField(this, \"getDistance\");\n // Not used in most scenarios, however they can be useful for specific use cases\n __publicField(this, \"getZoomScale\");\n __publicField(this, \"listenToKeyEvents\");\n __publicField(this, \"stopListenToKeyEvents\");\n __publicField(this, \"saveState\");\n __publicField(this, \"reset\");\n __publicField(this, \"update\");\n __publicField(this, \"connect\");\n __publicField(this, \"dispose\");\n // Dolly in programmatically\n __publicField(this, \"dollyIn\");\n // Dolly out programmatically\n __publicField(this, \"dollyOut\");\n // Get the current scale\n __publicField(this, \"getScale\");\n // Set the current scale (these are not used in most scenarios, however they can be useful for specific use cases)\n __publicField(this, \"setScale\");\n this.object = object;\n this.domElement = domElement;\n this.target0 = this.target.clone();\n this.position0 = this.object.position.clone();\n this.zoom0 = this.object.zoom;\n this.getPolarAngle = () => spherical.phi;\n this.getAzimuthalAngle = () => spherical.theta;\n this.setPolarAngle = (value) => {\n let phi = moduloWrapAround(value, 2 * Math.PI);\n let currentPhi = spherical.phi;\n if (currentPhi < 0)\n currentPhi += 2 * Math.PI;\n if (phi < 0)\n phi += 2 * Math.PI;\n let phiDist = Math.abs(phi - currentPhi);\n if (2 * Math.PI - phiDist < phiDist) {\n if (phi < currentPhi) {\n phi += 2 * Math.PI;\n } else {\n currentPhi += 2 * Math.PI;\n }\n }\n sphericalDelta.phi = phi - currentPhi;\n scope.update();\n };\n this.setAzimuthalAngle = (value) => {\n let theta = moduloWrapAround(value, 2 * Math.PI);\n let currentTheta = spherical.theta;\n if (currentTheta < 0)\n currentTheta += 2 * Math.PI;\n if (theta < 0)\n theta += 2 * Math.PI;\n let thetaDist = Math.abs(theta - currentTheta);\n if (2 * Math.PI - thetaDist < thetaDist) {\n if (theta < currentTheta) {\n theta += 2 * Math.PI;\n } else {\n currentTheta += 2 * Math.PI;\n }\n }\n sphericalDelta.theta = theta - currentTheta;\n scope.update();\n };\n this.getDistance = () => scope.object.position.distanceTo(scope.target);\n this.listenToKeyEvents = (domElement2) => {\n domElement2.addEventListener(\"keydown\", onKeyDown);\n this._domElementKeyEvents = domElement2;\n };\n this.stopListenToKeyEvents = () => {\n this._domElementKeyEvents.removeEventListener(\"keydown\", onKeyDown);\n this._domElementKeyEvents = null;\n };\n this.saveState = () => {\n scope.target0.copy(scope.target);\n scope.position0.copy(scope.object.position);\n scope.zoom0 = scope.object.zoom;\n };\n this.reset = () => {\n scope.target.copy(scope.target0);\n scope.object.position.copy(scope.position0);\n scope.object.zoom = scope.zoom0;\n scope.object.updateProjectionMatrix();\n scope.dispatchEvent(changeEvent);\n scope.update();\n state = STATE.NONE;\n };\n this.update = (() => {\n const offset = new Vector3();\n const up = new Vector3(0, 1, 0);\n const quat = new Quaternion().setFromUnitVectors(object.up, up);\n const quatInverse = quat.clone().invert();\n const lastPosition = new Vector3();\n const lastQuaternion = new Quaternion();\n const twoPI = 2 * Math.PI;\n return function update() {\n const position = scope.object.position;\n quat.setFromUnitVectors(object.up, up);\n quatInverse.copy(quat).invert();\n offset.copy(position).sub(scope.target);\n offset.applyQuaternion(quat);\n spherical.setFromVector3(offset);\n if (scope.autoRotate && state === STATE.NONE) {\n rotateLeft(getAutoRotationAngle());\n }\n if (scope.enableDamping) {\n spherical.theta += sphericalDelta.theta * scope.dampingFactor;\n spherical.phi += sphericalDelta.phi * scope.dampingFactor;\n } else {\n spherical.theta += sphericalDelta.theta;\n spherical.phi += sphericalDelta.phi;\n }\n let min = scope.minAzimuthAngle;\n let max = scope.maxAzimuthAngle;\n if (isFinite(min) && isFinite(max)) {\n if (min < -Math.PI)\n min += twoPI;\n else if (min > Math.PI)\n min -= twoPI;\n if (max < -Math.PI)\n max += twoPI;\n else if (max > Math.PI)\n max -= twoPI;\n if (min <= max) {\n spherical.theta = Math.max(min, Math.min(max, spherical.theta));\n } else {\n spherical.theta = spherical.theta > (min + max) / 2 ? Math.max(min, spherical.theta) : Math.min(max, spherical.theta);\n }\n }\n spherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi));\n spherical.makeSafe();\n if (scope.enableDamping === true) {\n scope.target.addScaledVector(panOffset, scope.dampingFactor);\n } else {\n scope.target.add(panOffset);\n }\n if (scope.zoomToCursor && performCursorZoom || scope.object.isOrthographicCamera) {\n spherical.radius = clampDistance(spherical.radius);\n } else {\n spherical.radius = clampDistance(spherical.radius * scale);\n }\n offset.setFromSpherical(spherical);\n offset.applyQuaternion(quatInverse);\n position.copy(scope.target).add(offset);\n if (!scope.object.matrixAutoUpdate)\n scope.object.updateMatrix();\n scope.object.lookAt(scope.target);\n if (scope.enableDamping === true) {\n sphericalDelta.theta *= 1 - scope.dampingFactor;\n sphericalDelta.phi *= 1 - scope.dampingFactor;\n panOffset.multiplyScalar(1 - scope.dampingFactor);\n } else {\n sphericalDelta.set(0, 0, 0);\n panOffset.set(0, 0, 0);\n }\n let zoomChanged = false;\n if (scope.zoomToCursor && performCursorZoom) {\n let newRadius = null;\n if (scope.object instanceof PerspectiveCamera && scope.object.isPerspectiveCamera) {\n const prevRadius = offset.length();\n newRadius = clampDistance(prevRadius * scale);\n const radiusDelta = prevRadius - newRadius;\n scope.object.position.addScaledVector(dollyDirection, radiusDelta);\n scope.object.updateMatrixWorld();\n } else if (scope.object.isOrthographicCamera) {\n const mouseBefore = new Vector3(mouse.x, mouse.y, 0);\n mouseBefore.unproject(scope.object);\n scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / scale));\n scope.object.updateProjectionMatrix();\n zoomChanged = true;\n const mouseAfter = new Vector3(mouse.x, mouse.y, 0);\n mouseAfter.unproject(scope.object);\n scope.object.position.sub(mouseAfter).add(mouseBefore);\n scope.object.updateMatrixWorld();\n newRadius = offset.length();\n } else {\n console.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled.\");\n scope.zoomToCursor = false;\n }\n if (newRadius !== null) {\n if (scope.screenSpacePanning) {\n scope.target.set(0, 0, -1).transformDirection(scope.object.matrix).multiplyScalar(newRadius).add(scope.object.position);\n } else {\n _ray.origin.copy(scope.object.position);\n _ray.direction.set(0, 0, -1).transformDirection(scope.object.matrix);\n if (Math.abs(scope.object.up.dot(_ray.direction)) < TILT_LIMIT) {\n object.lookAt(scope.target);\n } else {\n _plane.setFromNormalAndCoplanarPoint(scope.object.up, scope.target);\n _ray.intersectPlane(_plane, scope.target);\n }\n }\n }\n } else if (scope.object instanceof OrthographicCamera && scope.object.isOrthographicCamera) {\n zoomChanged = scale !== 1;\n if (zoomChanged) {\n scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / scale));\n scope.object.updateProjectionMatrix();\n }\n }\n scale = 1;\n performCursorZoom = false;\n if (zoomChanged || lastPosition.distanceToSquared(scope.object.position) > EPS || 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) {\n scope.dispatchEvent(changeEvent);\n lastPosition.copy(scope.object.position);\n lastQuaternion.copy(scope.object.quaternion);\n zoomChanged = false;\n return true;\n }\n return false;\n };\n })();\n this.connect = (domElement2) => {\n scope.domElement = domElement2;\n scope.domElement.style.touchAction = \"none\";\n scope.domElement.addEventListener(\"contextmenu\", onContextMenu);\n scope.domElement.addEventListener(\"pointerdown\", onPointerDown);\n scope.domElement.addEventListener(\"pointercancel\", onPointerUp);\n scope.domElement.addEventListener(\"wheel\", onMouseWheel);\n };\n this.dispose = () => {\n var _a, _b, _c, _d, _e, _f;\n if (scope.domElement) {\n scope.domElement.style.touchAction = \"auto\";\n }\n (_a = scope.domElement) == null ? void 0 : _a.removeEventListener(\"contextmenu\", onContextMenu);\n (_b = scope.domElement) == null ? void 0 : _b.removeEventListener(\"pointerdown\", onPointerDown);\n (_c = scope.domElement) == null ? void 0 : _c.removeEventListener(\"pointercancel\", onPointerUp);\n (_d = scope.domElement) == null ? void 0 : _d.removeEventListener(\"wheel\", onMouseWheel);\n (_e = scope.domElement) == null ? void 0 : _e.ownerDocument.removeEventListener(\"pointermove\", onPointerMove);\n (_f = scope.domElement) == null ? void 0 : _f.ownerDocument.removeEventListener(\"pointerup\", onPointerUp);\n if (scope._domElementKeyEvents !== null) {\n scope._domElementKeyEvents.removeEventListener(\"keydown\", onKeyDown);\n }\n };\n const scope = this;\n const changeEvent = { type: \"change\" };\n const startEvent = { type: \"start\" };\n const endEvent = { type: \"end\" };\n const STATE = {\n NONE: -1,\n ROTATE: 0,\n DOLLY: 1,\n PAN: 2,\n TOUCH_ROTATE: 3,\n TOUCH_PAN: 4,\n TOUCH_DOLLY_PAN: 5,\n TOUCH_DOLLY_ROTATE: 6\n };\n let state = STATE.NONE;\n const EPS = 1e-6;\n const spherical = new Spherical();\n const sphericalDelta = new Spherical();\n let scale = 1;\n const panOffset = new Vector3();\n const rotateStart = new Vector2();\n const rotateEnd = new Vector2();\n const rotateDelta = new Vector2();\n const panStart = new Vector2();\n const panEnd = new Vector2();\n const panDelta = new Vector2();\n const dollyStart = new Vector2();\n const dollyEnd = new Vector2();\n const dollyDelta = new Vector2();\n const dollyDirection = new Vector3();\n const mouse = new Vector2();\n let performCursorZoom = false;\n const pointers = [];\n const pointerPositions = {};\n function getAutoRotationAngle() {\n return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n }\n function getZoomScale() {\n return Math.pow(0.95, scope.zoomSpeed);\n }\n function rotateLeft(angle) {\n if (scope.reverseOrbit || scope.reverseHorizontalOrbit) {\n sphericalDelta.theta += angle;\n } else {\n sphericalDelta.theta -= angle;\n }\n }\n function rotateUp(angle) {\n if (scope.reverseOrbit || scope.reverseVerticalOrbit) {\n sphericalDelta.phi += angle;\n } else {\n sphericalDelta.phi -= angle;\n }\n }\n const panLeft = (() => {\n const v = new Vector3();\n return function panLeft2(distance, objectMatrix) {\n v.setFromMatrixColumn(objectMatrix, 0);\n v.multiplyScalar(-distance);\n panOffset.add(v);\n };\n })();\n const panUp = (() => {\n const v = new Vector3();\n return function panUp2(distance, objectMatrix) {\n if (scope.screenSpacePanning === true) {\n v.setFromMatrixColumn(objectMatrix, 1);\n } else {\n v.setFromMatrixColumn(objectMatrix, 0);\n v.crossVectors(scope.object.up, v);\n }\n v.multiplyScalar(distance);\n panOffset.add(v);\n };\n })();\n const pan = (() => {\n const offset = new Vector3();\n return function pan2(deltaX, deltaY) {\n const element = scope.domElement;\n if (element && scope.object instanceof PerspectiveCamera && scope.object.isPerspectiveCamera) {\n const position = scope.object.position;\n offset.copy(position).sub(scope.target);\n let targetDistance = offset.length();\n targetDistance *= Math.tan(scope.object.fov / 2 * Math.PI / 180);\n panLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix);\n panUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix);\n } else if (element && scope.object instanceof OrthographicCamera && scope.object.isOrthographicCamera) {\n panLeft(\n deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth,\n scope.object.matrix\n );\n panUp(\n deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight,\n scope.object.matrix\n );\n } else {\n console.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.\");\n scope.enablePan = false;\n }\n };\n })();\n function setScale(newScale) {\n if (scope.object instanceof PerspectiveCamera && scope.object.isPerspectiveCamera || scope.object instanceof OrthographicCamera && scope.object.isOrthographicCamera) {\n scale = newScale;\n } else {\n console.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\");\n scope.enableZoom = false;\n }\n }\n function dollyOut(dollyScale) {\n setScale(scale / dollyScale);\n }\n function dollyIn(dollyScale) {\n setScale(scale * dollyScale);\n }\n function updateMouseParameters(event) {\n if (!scope.zoomToCursor || !scope.domElement) {\n return;\n }\n performCursorZoom = true;\n const rect = scope.domElement.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n const w = rect.width;\n const h = rect.height;\n mouse.x = x / w * 2 - 1;\n mouse.y = -(y / h) * 2 + 1;\n dollyDirection.set(mouse.x, mouse.y, 1).unproject(scope.object).sub(scope.object.position).normalize();\n }\n function clampDistance(dist) {\n return Math.max(scope.minDistance, Math.min(scope.maxDistance, dist));\n }\n function handleMouseDownRotate(event) {\n rotateStart.set(event.clientX, event.clientY);\n }\n function handleMouseDownDolly(event) {\n updateMouseParameters(event);\n dollyStart.set(event.clientX, event.clientY);\n }\n function handleMouseDownPan(event) {\n panStart.set(event.clientX, event.clientY);\n }\n function handleMouseMoveRotate(event) {\n rotateEnd.set(event.clientX, event.clientY);\n rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed);\n const element = scope.domElement;\n if (element) {\n rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight);\n rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight);\n }\n rotateStart.copy(rotateEnd);\n scope.update();\n }\n function handleMouseMoveDolly(event) {\n dollyEnd.set(event.clientX, event.clientY);\n dollyDelta.subVectors(dollyEnd, dollyStart);\n if (dollyDelta.y > 0) {\n dollyOut(getZoomScale());\n } else if (dollyDelta.y < 0) {\n dollyIn(getZoomScale());\n }\n dollyStart.copy(dollyEnd);\n scope.update();\n }\n function handleMouseMovePan(event) {\n panEnd.set(event.clientX, event.clientY);\n panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed);\n pan(panDelta.x, panDelta.y);\n panStart.copy(panEnd);\n scope.update();\n }\n function handleMouseWheel(event) {\n updateMouseParameters(event);\n if (event.deltaY < 0) {\n dollyIn(getZoomScale());\n } else if (event.deltaY > 0) {\n dollyOut(getZoomScale());\n }\n scope.update();\n }\n function handleKeyDown(event) {\n let needsUpdate = false;\n switch (event.code) {\n case scope.keys.UP:\n pan(0, scope.keyPanSpeed);\n needsUpdate = true;\n break;\n case scope.keys.BOTTOM:\n pan(0, -scope.keyPanSpeed);\n needsUpdate = true;\n break;\n case scope.keys.LEFT:\n pan(scope.keyPanSpeed, 0);\n needsUpdate = true;\n break;\n case scope.keys.RIGHT:\n pan(-scope.keyPanSpeed, 0);\n needsUpdate = true;\n break;\n }\n if (needsUpdate) {\n event.preventDefault();\n scope.update();\n }\n }\n function handleTouchStartRotate() {\n if (pointers.length == 1) {\n rotateStart.set(pointers[0].pageX, pointers[0].pageY);\n } else {\n const x = 0.5 * (pointers[0].pageX + pointers[1].pageX);\n const y = 0.5 * (pointers[0].pageY + pointers[1].pageY);\n rotateStart.set(x, y);\n }\n }\n function handleTouchStartPan() {\n if (pointers.length == 1) {\n panStart.set(pointers[0].pageX, pointers[0].pageY);\n } else {\n const x = 0.5 * (pointers[0].pageX + pointers[1].pageX);\n const y = 0.5 * (pointers[0].pageY + pointers[1].pageY);\n panStart.set(x, y);\n }\n }\n function handleTouchStartDolly() {\n const dx = pointers[0].pageX - pointers[1].pageX;\n const dy = pointers[0].pageY - pointers[1].pageY;\n const distance = Math.sqrt(dx * dx + dy * dy);\n dollyStart.set(0, distance);\n }\n function handleTouchStartDollyPan() {\n if (scope.enableZoom)\n handleTouchStartDolly();\n if (scope.enablePan)\n handleTouchStartPan();\n }\n function handleTouchStartDollyRotate() {\n if (scope.enableZoom)\n handleTouchStartDolly();\n if (scope.enableRotate)\n handleTouchStartRotate();\n }\n function handleTouchMoveRotate(event) {\n if (pointers.length == 1) {\n rotateEnd.set(event.pageX, event.pageY);\n } else {\n const position = getSecondPointerPosition(event);\n const x = 0.5 * (event.pageX + position.x);\n const y = 0.5 * (event.pageY + position.y);\n rotateEnd.set(x, y);\n }\n rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed);\n const element = scope.domElement;\n if (element) {\n rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight);\n rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight);\n }\n rotateStart.copy(rotateEnd);\n }\n function handleTouchMovePan(event) {\n if (pointers.length == 1) {\n panEnd.set(event.pageX, event.pageY);\n } else {\n const position = getSecondPointerPosition(event);\n const x = 0.5 * (event.pageX + position.x);\n const y = 0.5 * (event.pageY + position.y);\n panEnd.set(x, y);\n }\n panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed);\n pan(panDelta.x, panDelta.y);\n panStart.copy(panEnd);\n }\n function handleTouchMoveDolly(event) {\n const position = getSecondPointerPosition(event);\n const dx = event.pageX - position.x;\n const dy = event.pageY - position.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n dollyEnd.set(0, distance);\n dollyDelta.set(0, Math.pow(dollyEnd.y / dollyStart.y, scope.zoomSpeed));\n dollyOut(dollyDelta.y);\n dollyStart.copy(dollyEnd);\n }\n function handleTouchMoveDollyPan(event) {\n if (scope.enableZoom)\n handleTouchMoveDolly(event);\n if (scope.enablePan)\n handleTouchMovePan(event);\n }\n function handleTouchMoveDollyRotate(event) {\n if (scope.enableZoom)\n handleTouchMoveDolly(event);\n if (scope.enableRotate)\n handleTouchMoveRotate(event);\n }\n function onPointerDown(event) {\n var _a, _b;\n if (scope.enabled === false)\n return;\n if (pointers.length === 0) {\n (_a = scope.domElement) == null ? void 0 : _a.ownerDocument.addEventListener(\"pointermove\", onPointerMove);\n (_b = scope.domElement) == null ? void 0 : _b.ownerDocument.addEventListener(\"pointerup\", onPointerUp);\n }\n addPointer(event);\n if (event.pointerType === \"touch\") {\n onTouchStart(event);\n } else {\n onMouseDown(event);\n }\n }\n function onPointerMove(event) {\n if (scope.enabled === false)\n return;\n if (event.pointerType === \"touch\") {\n onTouchMove(event);\n } else {\n onMouseMove(event);\n }\n }\n function onPointerUp(event) {\n var _a, _b, _c;\n removePointer(event);\n if (pointers.length === 0) {\n (_a = scope.domElement) == null ? void 0 : _a.releasePointerCapture(event.pointerId);\n (_b = scope.domElement) == null ? void 0 : _b.ownerDocument.removeEventListener(\"pointermove\", onPointerMove);\n (_c = scope.domElement) == null ? void 0 : _c.ownerDocument.removeEventListener(\"pointerup\", onPointerUp);\n }\n scope.dispatchEvent(endEvent);\n state = STATE.NONE;\n }\n function onMouseDown(event) {\n let mouseAction;\n switch (event.button) {\n case 0:\n mouseAction = scope.mouseButtons.LEFT;\n break;\n case 1:\n mouseAction = scope.mouseButtons.MIDDLE;\n break;\n case 2:\n mouseAction = scope.mouseButtons.RIGHT;\n break;\n default:\n mouseAction = -1;\n }\n switch (mouseAction) {\n case MOUSE.DOLLY:\n if (scope.enableZoom === false)\n return;\n handleMouseDownDolly(event);\n state = STATE.DOLLY;\n break;\n case MOUSE.ROTATE:\n if (event.ctrlKey || event.metaKey || event.shiftKey) {\n if (scope.enablePan === false)\n return;\n handleMouseDownPan(event);\n state = STATE.PAN;\n } else {\n if (scope.enableRotate === false)\n return;\n handleMouseDownRotate(event);\n state = STATE.ROTATE;\n }\n break;\n case MOUSE.PAN:\n if (event.ctrlKey || event.metaKey || event.shiftKey) {\n if (scope.enableRotate === false)\n return;\n handleMouseDownRotate(event);\n state = STATE.ROTATE;\n } else {\n if (scope.enablePan === false)\n return;\n handleMouseDownPan(event);\n state = STATE.PAN;\n }\n break;\n default:\n state = STATE.NONE;\n }\n if (state !== STATE.NONE) {\n scope.dispatchEvent(startEvent);\n }\n }\n function onMouseMove(event) {\n if (scope.enabled === false)\n return;\n switch (state) {\n case STATE.ROTATE:\n if (scope.enableRotate === false)\n return;\n handleMouseMoveRotate(event);\n break;\n case STATE.DOLLY:\n if (scope.enableZoom === false)\n return;\n handleMouseMoveDolly(event);\n break;\n case STATE.PAN:\n if (scope.enablePan === false)\n return;\n handleMouseMovePan(event);\n break;\n }\n }\n function onMouseWheel(event) {\n if (scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE && state !== STATE.ROTATE) {\n return;\n }\n event.preventDefault();\n scope.dispatchEvent(startEvent);\n handleMouseWheel(event);\n scope.dispatchEvent(endEvent);\n }\n function onKeyDown(event) {\n if (scope.enabled === false || scope.enablePan === false)\n return;\n handleKeyDown(event);\n }\n function onTouchStart(event) {\n trackPointer(event);\n switch (pointers.length) {\n case 1:\n switch (scope.touches.ONE) {\n case TOUCH.ROTATE:\n if (scope.enableRotate === false)\n return;\n handleTouchStartRotate();\n state = STATE.TOUCH_ROTATE;\n break;\n case TOUCH.PAN:\n if (scope.enablePan === false)\n return;\n handleTouchStartPan();\n state = STATE.TOUCH_PAN;\n break;\n default:\n state = STATE.NONE;\n }\n break;\n case 2:\n switch (scope.touches.TWO) {\n case TOUCH.DOLLY_PAN:\n if (scope.enableZoom === false && scope.enablePan === false)\n return;\n handleTouchStartDollyPan();\n state = STATE.TOUCH_DOLLY_PAN;\n break;\n case TOUCH.DOLLY_ROTATE:\n if (scope.enableZoom === false && scope.enableRotate === false)\n return;\n handleTouchStartDollyRotate();\n state = STATE.TOUCH_DOLLY_ROTATE;\n break;\n default:\n state = STATE.NONE;\n }\n break;\n default:\n state = STATE.NONE;\n }\n if (state !== STATE.NONE) {\n scope.dispatchEvent(startEvent);\n }\n }\n function onTouchMove(event) {\n trackPointer(event);\n switch (state) {\n case STATE.TOUCH_ROTATE:\n if (scope.enableRotate === false)\n return;\n handleTouchMoveRotate(event);\n scope.update();\n break;\n case STATE.TOUCH_PAN:\n if (scope.enablePan === false)\n return;\n handleTouchMovePan(event);\n scope.update();\n break;\n case STATE.TOUCH_DOLLY_PAN:\n if (scope.enableZoom === false && scope.enablePan === false)\n return;\n handleTouchMoveDollyPan(event);\n scope.update();\n break;\n case STATE.TOUCH_DOLLY_ROTATE:\n if (scope.enableZoom === false && scope.enableRotate === false)\n return;\n handleTouchMoveDollyRotate(event);\n scope.update();\n break;\n default:\n state = STATE.NONE;\n }\n }\n function onContextMenu(event) {\n if (scope.enabled === false)\n return;\n event.preventDefault();\n }\n function addPointer(event) {\n pointers.push(event);\n }\n function removePointer(event) {\n delete pointerPositions[event.pointerId];\n for (let i = 0; i < pointers.length; i++) {\n if (pointers[i].pointerId == event.pointerId) {\n pointers.splice(i, 1);\n return;\n }\n }\n }\n function trackPointer(event) {\n let position = pointerPositions[event.pointerId];\n if (position === void 0) {\n position = new Vector2();\n pointerPositions[event.pointerId] = position;\n }\n position.set(event.pageX, event.pageY);\n }\n function getSecondPointerPosition(event) {\n const pointer = event.pointerId === pointers[0].pointerId ? pointers[1] : pointers[0];\n return pointerPositions[pointer.pointerId];\n }\n this.dollyIn = (dollyScale = getZoomScale()) => {\n dollyIn(dollyScale);\n scope.update();\n };\n this.dollyOut = (dollyScale = getZoomScale()) => {\n dollyOut(dollyScale);\n scope.update();\n };\n this.getScale = () => {\n return scale;\n };\n this.setScale = (newScale) => {\n setScale(newScale);\n scope.update();\n };\n this.getZoomScale = () => {\n return getZoomScale();\n };\n if (domElement !== void 0)\n this.connect(domElement);\n this.update();\n }\n}\nclass MapControls extends OrbitControls {\n constructor(object, domElement) {\n super(object, domElement);\n this.screenSpacePanning = false;\n this.mouseButtons.LEFT = MOUSE.PAN;\n this.mouseButtons.RIGHT = MOUSE.ROTATE;\n this.touches.ONE = TOUCH.PAN;\n this.touches.TWO = TOUCH.DOLLY_ROTATE;\n }\n}\nexport {\n MapControls,\n OrbitControls\n};\n//# sourceMappingURL=OrbitControls.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Vector2, Vector3, Matrix4, Quaternion, Group, EllipseCurve, BufferGeometry, PerspectiveCamera, MathUtils, OrthographicCamera, Box3, Sphere, GridHelper, LineBasicMaterial, Line, Raycaster } from \"three\";\nimport { EventDispatcher } from \"./EventDispatcher.js\";\nconst STATE = {\n IDLE: Symbol(),\n ROTATE: Symbol(),\n PAN: Symbol(),\n SCALE: Symbol(),\n FOV: Symbol(),\n FOCUS: Symbol(),\n ZROTATE: Symbol(),\n TOUCH_MULTI: Symbol(),\n ANIMATION_FOCUS: Symbol(),\n ANIMATION_ROTATE: Symbol()\n};\nconst INPUT = {\n NONE: Symbol(),\n ONE_FINGER: Symbol(),\n ONE_FINGER_SWITCHED: Symbol(),\n TWO_FINGER: Symbol(),\n MULT_FINGER: Symbol(),\n CURSOR: Symbol()\n};\nconst _center = {\n x: 0,\n y: 0\n};\nconst _transformation = {\n camera: /* @__PURE__ */ new Matrix4(),\n gizmos: /* @__PURE__ */ new Matrix4()\n};\nconst _changeEvent = { type: \"change\" };\nconst _startEvent = { type: \"start\" };\nconst _endEvent = { type: \"end\" };\nclass ArcballControls extends EventDispatcher {\n constructor(camera, domElement = null, scene = null) {\n super();\n __publicField(this, \"camera\");\n __publicField(this, \"domElement\");\n __publicField(this, \"scene\");\n __publicField(this, \"mouseActions\");\n __publicField(this, \"_mouseOp\");\n __publicField(this, \"_v2_1\");\n __publicField(this, \"_v3_1\");\n __publicField(this, \"_v3_2\");\n __publicField(this, \"_m4_1\");\n __publicField(this, \"_m4_2\");\n __publicField(this, \"_quat\");\n __publicField(this, \"_translationMatrix\");\n __publicField(this, \"_rotationMatrix\");\n __publicField(this, \"_scaleMatrix\");\n __publicField(this, \"_rotationAxis\");\n __publicField(this, \"_cameraMatrixState\");\n __publicField(this, \"_cameraProjectionState\");\n __publicField(this, \"_fovState\");\n __publicField(this, \"_upState\");\n __publicField(this, \"_zoomState\");\n __publicField(this, \"_nearPos\");\n __publicField(this, \"_farPos\");\n __publicField(this, \"_gizmoMatrixState\");\n __publicField(this, \"_up0\");\n __publicField(this, \"_zoom0\");\n __publicField(this, \"_fov0\");\n __publicField(this, \"_initialNear\");\n __publicField(this, \"_nearPos0\");\n __publicField(this, \"_initialFar\");\n __publicField(this, \"_farPos0\");\n __publicField(this, \"_cameraMatrixState0\");\n __publicField(this, \"_gizmoMatrixState0\");\n __publicField(this, \"_button\");\n __publicField(this, \"_touchStart\");\n __publicField(this, \"_touchCurrent\");\n __publicField(this, \"_input\");\n __publicField(this, \"_switchSensibility\");\n __publicField(this, \"_startFingerDistance\");\n __publicField(this, \"_currentFingerDistance\");\n __publicField(this, \"_startFingerRotation\");\n __publicField(this, \"_currentFingerRotation\");\n __publicField(this, \"_devPxRatio\");\n __publicField(this, \"_downValid\");\n __publicField(this, \"_nclicks\");\n __publicField(this, \"_downEvents\");\n __publicField(this, \"_clickStart\");\n __publicField(this, \"_maxDownTime\");\n __publicField(this, \"_maxInterval\");\n __publicField(this, \"_posThreshold\");\n __publicField(this, \"_movementThreshold\");\n __publicField(this, \"_currentCursorPosition\");\n __publicField(this, \"_startCursorPosition\");\n __publicField(this, \"_grid\");\n __publicField(this, \"_gridPosition\");\n __publicField(this, \"_gizmos\");\n __publicField(this, \"_curvePts\");\n __publicField(this, \"_timeStart\");\n __publicField(this, \"_animationId\");\n __publicField(this, \"focusAnimationTime\");\n __publicField(this, \"_timePrev\");\n __publicField(this, \"_timeCurrent\");\n __publicField(this, \"_anglePrev\");\n __publicField(this, \"_angleCurrent\");\n __publicField(this, \"_cursorPosPrev\");\n __publicField(this, \"_cursorPosCurr\");\n __publicField(this, \"_wPrev\");\n __publicField(this, \"_wCurr\");\n __publicField(this, \"adjustNearFar\");\n __publicField(this, \"scaleFactor\");\n __publicField(this, \"dampingFactor\");\n __publicField(this, \"wMax\");\n __publicField(this, \"enableAnimations\");\n __publicField(this, \"enableGrid\");\n __publicField(this, \"cursorZoom\");\n __publicField(this, \"minFov\");\n __publicField(this, \"maxFov\");\n __publicField(this, \"enabled\");\n __publicField(this, \"enablePan\");\n __publicField(this, \"enableRotate\");\n __publicField(this, \"enableZoom\");\n __publicField(this, \"minDistance\");\n __publicField(this, \"maxDistance\");\n __publicField(this, \"minZoom\");\n __publicField(this, \"maxZoom\");\n __publicField(this, \"target\");\n __publicField(this, \"_currentTarget\");\n __publicField(this, \"_tbRadius\");\n __publicField(this, \"_state\");\n //listeners\n __publicField(this, \"onWindowResize\", () => {\n const scale = (this._gizmos.scale.x + this._gizmos.scale.y + this._gizmos.scale.z) / 3;\n if (this.camera) {\n const tbRadius = this.calculateTbRadius(this.camera);\n if (tbRadius !== void 0) {\n this._tbRadius = tbRadius;\n }\n }\n const newRadius = this._tbRadius / scale;\n const curve = new EllipseCurve(0, 0, newRadius, newRadius);\n const points = curve.getPoints(this._curvePts);\n const curveGeometry = new BufferGeometry().setFromPoints(points);\n for (const gizmo in this._gizmos.children) {\n const child = this._gizmos.children[gizmo];\n child.geometry = curveGeometry;\n }\n this.dispatchEvent(_changeEvent);\n });\n __publicField(this, \"onContextMenu\", (event) => {\n if (!this.enabled) {\n return;\n }\n for (let i = 0; i < this.mouseActions.length; i++) {\n if (this.mouseActions[i].mouse == 2) {\n event.preventDefault();\n break;\n }\n }\n });\n __publicField(this, \"onPointerCancel\", () => {\n this._touchStart.splice(0, this._touchStart.length);\n this._touchCurrent.splice(0, this._touchCurrent.length);\n this._input = INPUT.NONE;\n });\n __publicField(this, \"onPointerDown\", (event) => {\n if (event.button == 0 && event.isPrimary) {\n this._downValid = true;\n this._downEvents.push(event);\n } else {\n this._downValid = false;\n }\n if (event.pointerType == \"touch\" && this._input != INPUT.CURSOR) {\n this._touchStart.push(event);\n this._touchCurrent.push(event);\n switch (this._input) {\n case INPUT.NONE:\n this._input = INPUT.ONE_FINGER;\n this.onSinglePanStart(event, \"ROTATE\");\n window.addEventListener(\"pointermove\", this.onPointerMove);\n window.addEventListener(\"pointerup\", this.onPointerUp);\n break;\n case INPUT.ONE_FINGER:\n case INPUT.ONE_FINGER_SWITCHED:\n this._input = INPUT.TWO_FINGER;\n this.onRotateStart();\n this.onPinchStart();\n this.onDoublePanStart();\n break;\n case INPUT.TWO_FINGER:\n this._input = INPUT.MULT_FINGER;\n this.onTriplePanStart();\n break;\n }\n } else if (event.pointerType != \"touch\" && this._input == INPUT.NONE) {\n let modifier = null;\n if (event.ctrlKey || event.metaKey) {\n modifier = \"CTRL\";\n } else if (event.shiftKey) {\n modifier = \"SHIFT\";\n }\n this._mouseOp = this.getOpFromAction(event.button, modifier);\n if (this._mouseOp) {\n window.addEventListener(\"pointermove\", this.onPointerMove);\n window.addEventListener(\"pointerup\", this.onPointerUp);\n this._input = INPUT.CURSOR;\n this._button = event.button;\n this.onSinglePanStart(event, this._mouseOp);\n }\n }\n });\n __publicField(this, \"onPointerMove\", (event) => {\n if (event.pointerType == \"touch\" && this._input != INPUT.CURSOR) {\n switch (this._input) {\n case INPUT.ONE_FINGER:\n this.updateTouchEvent(event);\n this.onSinglePanMove(event, STATE.ROTATE);\n break;\n case INPUT.ONE_FINGER_SWITCHED:\n const movement = this.calculatePointersDistance(this._touchCurrent[0], event) * this._devPxRatio;\n if (movement >= this._switchSensibility) {\n this._input = INPUT.ONE_FINGER;\n this.updateTouchEvent(event);\n this.onSinglePanStart(event, \"ROTATE\");\n break;\n }\n break;\n case INPUT.TWO_FINGER:\n this.updateTouchEvent(event);\n this.onRotateMove();\n this.onPinchMove();\n this.onDoublePanMove();\n break;\n case INPUT.MULT_FINGER:\n this.updateTouchEvent(event);\n this.onTriplePanMove();\n break;\n }\n } else if (event.pointerType != \"touch\" && this._input == INPUT.CURSOR) {\n let modifier = null;\n if (event.ctrlKey || event.metaKey) {\n modifier = \"CTRL\";\n } else if (event.shiftKey) {\n modifier = \"SHIFT\";\n }\n const mouseOpState = this.getOpStateFromAction(this._button, modifier);\n if (mouseOpState) {\n this.onSinglePanMove(event, mouseOpState);\n }\n }\n if (this._downValid) {\n const movement = this.calculatePointersDistance(this._downEvents[this._downEvents.length - 1], event) * this._devPxRatio;\n if (movement > this._movementThreshold) {\n this._downValid = false;\n }\n }\n });\n __publicField(this, \"onPointerUp\", (event) => {\n if (event.pointerType == \"touch\" && this._input != INPUT.CURSOR) {\n const nTouch = this._touchCurrent.length;\n for (let i = 0; i < nTouch; i++) {\n if (this._touchCurrent[i].pointerId == event.pointerId) {\n this._touchCurrent.splice(i, 1);\n this._touchStart.splice(i, 1);\n break;\n }\n }\n switch (this._input) {\n case INPUT.ONE_FINGER:\n case INPUT.ONE_FINGER_SWITCHED:\n window.removeEventListener(\"pointermove\", this.onPointerMove);\n window.removeEventListener(\"pointerup\", this.onPointerUp);\n this._input = INPUT.NONE;\n this.onSinglePanEnd();\n break;\n case INPUT.TWO_FINGER:\n this.onDoublePanEnd();\n this.onPinchEnd();\n this.onRotateEnd();\n this._input = INPUT.ONE_FINGER_SWITCHED;\n break;\n case INPUT.MULT_FINGER:\n if (this._touchCurrent.length == 0) {\n window.removeEventListener(\"pointermove\", this.onPointerMove);\n window.removeEventListener(\"pointerup\", this.onPointerUp);\n this._input = INPUT.NONE;\n this.onTriplePanEnd();\n }\n break;\n }\n } else if (event.pointerType != \"touch\" && this._input == INPUT.CURSOR) {\n window.removeEventListener(\"pointermove\", this.onPointerMove);\n window.removeEventListener(\"pointerup\", this.onPointerUp);\n this._input = INPUT.NONE;\n this.onSinglePanEnd();\n this._button = -1;\n }\n if (event.isPrimary) {\n if (this._downValid) {\n const downTime = event.timeStamp - this._downEvents[this._downEvents.length - 1].timeStamp;\n if (downTime <= this._maxDownTime) {\n if (this._nclicks == 0) {\n this._nclicks = 1;\n this._clickStart = performance.now();\n } else {\n const clickInterval = event.timeStamp - this._clickStart;\n const movement = this.calculatePointersDistance(this._downEvents[1], this._downEvents[0]) * this._devPxRatio;\n if (clickInterval <= this._maxInterval && movement <= this._posThreshold) {\n this._nclicks = 0;\n this._downEvents.splice(0, this._downEvents.length);\n this.onDoubleTap(event);\n } else {\n this._nclicks = 1;\n this._downEvents.shift();\n this._clickStart = performance.now();\n }\n }\n } else {\n this._downValid = false;\n this._nclicks = 0;\n this._downEvents.splice(0, this._downEvents.length);\n }\n } else {\n this._nclicks = 0;\n this._downEvents.splice(0, this._downEvents.length);\n }\n }\n });\n __publicField(this, \"onWheel\", (event) => {\n var _a, _b;\n if (this.enabled && this.enableZoom && this.domElement) {\n let modifier = null;\n if (event.ctrlKey || event.metaKey) {\n modifier = \"CTRL\";\n } else if (event.shiftKey) {\n modifier = \"SHIFT\";\n }\n const mouseOp = this.getOpFromAction(\"WHEEL\", modifier);\n if (mouseOp) {\n event.preventDefault();\n this.dispatchEvent(_startEvent);\n const notchDeltaY = 125;\n let sgn = event.deltaY / notchDeltaY;\n let size = 1;\n if (sgn > 0) {\n size = 1 / this.scaleFactor;\n } else if (sgn < 0) {\n size = this.scaleFactor;\n }\n switch (mouseOp) {\n case \"ZOOM\":\n this.updateTbState(STATE.SCALE, true);\n if (sgn > 0) {\n size = 1 / Math.pow(this.scaleFactor, sgn);\n } else if (sgn < 0) {\n size = Math.pow(this.scaleFactor, -sgn);\n }\n if (this.cursorZoom && this.enablePan) {\n let scalePoint;\n if (this.camera instanceof OrthographicCamera) {\n scalePoint = (_a = this.unprojectOnTbPlane(this.camera, event.clientX, event.clientY, this.domElement)) == null ? void 0 : _a.applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._gizmos.position);\n }\n if (this.camera instanceof PerspectiveCamera) {\n scalePoint = (_b = this.unprojectOnTbPlane(this.camera, event.clientX, event.clientY, this.domElement)) == null ? void 0 : _b.applyQuaternion(this.camera.quaternion).add(this._gizmos.position);\n }\n if (scalePoint !== void 0)\n this.applyTransformMatrix(this.applyScale(size, scalePoint));\n } else {\n this.applyTransformMatrix(this.applyScale(size, this._gizmos.position));\n }\n if (this._grid) {\n this.disposeGrid();\n this.drawGrid();\n }\n this.updateTbState(STATE.IDLE, false);\n this.dispatchEvent(_changeEvent);\n this.dispatchEvent(_endEvent);\n break;\n case \"FOV\":\n if (this.camera instanceof PerspectiveCamera) {\n this.updateTbState(STATE.FOV, true);\n if (event.deltaX != 0) {\n sgn = event.deltaX / notchDeltaY;\n size = 1;\n if (sgn > 0) {\n size = 1 / Math.pow(this.scaleFactor, sgn);\n } else if (sgn < 0) {\n size = Math.pow(this.scaleFactor, -sgn);\n }\n }\n this._v3_1.setFromMatrixPosition(this._cameraMatrixState);\n const x = this._v3_1.distanceTo(this._gizmos.position);\n let xNew = x / size;\n xNew = MathUtils.clamp(xNew, this.minDistance, this.maxDistance);\n const y = x * Math.tan(MathUtils.DEG2RAD * this.camera.fov * 0.5);\n let newFov = MathUtils.RAD2DEG * (Math.atan(y / xNew) * 2);\n if (newFov > this.maxFov) {\n newFov = this.maxFov;\n } else if (newFov < this.minFov) {\n newFov = this.minFov;\n }\n const newDistance = y / Math.tan(MathUtils.DEG2RAD * (newFov / 2));\n size = x / newDistance;\n this.setFov(newFov);\n this.applyTransformMatrix(this.applyScale(size, this._gizmos.position, false));\n }\n if (this._grid) {\n this.disposeGrid();\n this.drawGrid();\n }\n this.updateTbState(STATE.IDLE, false);\n this.dispatchEvent(_changeEvent);\n this.dispatchEvent(_endEvent);\n break;\n }\n }\n }\n });\n __publicField(this, \"onSinglePanStart\", (event, operation) => {\n if (this.enabled && this.domElement) {\n this.dispatchEvent(_startEvent);\n this.setCenter(event.clientX, event.clientY);\n switch (operation) {\n case \"PAN\":\n if (!this.enablePan)\n return;\n if (this._animationId != -1) {\n cancelAnimationFrame(this._animationId);\n this._animationId = -1;\n this._timeStart = -1;\n this.activateGizmos(false);\n this.dispatchEvent(_changeEvent);\n }\n if (this.camera) {\n this.updateTbState(STATE.PAN, true);\n const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement);\n if (rayDir !== void 0) {\n this._startCursorPosition.copy(rayDir);\n }\n if (this.enableGrid) {\n this.drawGrid();\n this.dispatchEvent(_changeEvent);\n }\n }\n break;\n case \"ROTATE\":\n if (!this.enableRotate)\n return;\n if (this._animationId != -1) {\n cancelAnimationFrame(this._animationId);\n this._animationId = -1;\n this._timeStart = -1;\n }\n if (this.camera) {\n this.updateTbState(STATE.ROTATE, true);\n const rayDir = this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius);\n if (rayDir !== void 0) {\n this._startCursorPosition.copy(rayDir);\n }\n this.activateGizmos(true);\n if (this.enableAnimations) {\n this._timePrev = this._timeCurrent = performance.now();\n this._angleCurrent = this._anglePrev = 0;\n this._cursorPosPrev.copy(this._startCursorPosition);\n this._cursorPosCurr.copy(this._cursorPosPrev);\n this._wCurr = 0;\n this._wPrev = this._wCurr;\n }\n }\n this.dispatchEvent(_changeEvent);\n break;\n case \"FOV\":\n if (!this.enableZoom)\n return;\n if (this.camera instanceof PerspectiveCamera) {\n if (this._animationId != -1) {\n cancelAnimationFrame(this._animationId);\n this._animationId = -1;\n this._timeStart = -1;\n this.activateGizmos(false);\n this.dispatchEvent(_changeEvent);\n }\n this.updateTbState(STATE.FOV, true);\n this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);\n this._currentCursorPosition.copy(this._startCursorPosition);\n }\n break;\n case \"ZOOM\":\n if (!this.enableZoom)\n return;\n if (this._animationId != -1) {\n cancelAnimationFrame(this._animationId);\n this._animationId = -1;\n this._timeStart = -1;\n this.activateGizmos(false);\n this.dispatchEvent(_changeEvent);\n }\n this.updateTbState(STATE.SCALE, true);\n this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);\n this._currentCursorPosition.copy(this._startCursorPosition);\n break;\n }\n }\n });\n __publicField(this, \"onSinglePanMove\", (event, opState) => {\n if (this.enabled && this.domElement) {\n const restart = opState != this._state;\n this.setCenter(event.clientX, event.clientY);\n switch (opState) {\n case STATE.PAN:\n if (this.enablePan && this.camera) {\n if (restart) {\n this.dispatchEvent(_endEvent);\n this.dispatchEvent(_startEvent);\n this.updateTbState(opState, true);\n const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement);\n if (rayDir !== void 0) {\n this._startCursorPosition.copy(rayDir);\n }\n if (this.enableGrid) {\n this.drawGrid();\n }\n this.activateGizmos(false);\n } else {\n const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement);\n if (rayDir !== void 0) {\n this._currentCursorPosition.copy(rayDir);\n }\n this.applyTransformMatrix(this.pan(this._startCursorPosition, this._currentCursorPosition));\n }\n }\n break;\n case STATE.ROTATE:\n if (this.enableRotate && this.camera) {\n if (restart) {\n this.dispatchEvent(_endEvent);\n this.dispatchEvent(_startEvent);\n this.updateTbState(opState, true);\n const rayDir = this.unprojectOnTbSurface(\n this.camera,\n _center.x,\n _center.y,\n this.domElement,\n this._tbRadius\n );\n if (rayDir !== void 0) {\n this._startCursorPosition.copy(rayDir);\n }\n if (this.enableGrid) {\n this.disposeGrid();\n }\n this.activateGizmos(true);\n } else {\n const rayDir = this.unprojectOnTbSurface(\n this.camera,\n _center.x,\n _center.y,\n this.domElement,\n this._tbRadius\n );\n if (rayDir !== void 0) {\n this._currentCursorPosition.copy(rayDir);\n }\n const distance = this._startCursorPosition.distanceTo(this._currentCursorPosition);\n const angle = this._startCursorPosition.angleTo(this._currentCursorPosition);\n const amount = Math.max(distance / this._tbRadius, angle);\n this.applyTransformMatrix(\n this.rotate(this.calculateRotationAxis(this._startCursorPosition, this._currentCursorPosition), amount)\n );\n if (this.enableAnimations) {\n this._timePrev = this._timeCurrent;\n this._timeCurrent = performance.now();\n this._anglePrev = this._angleCurrent;\n this._angleCurrent = amount;\n this._cursorPosPrev.copy(this._cursorPosCurr);\n this._cursorPosCurr.copy(this._currentCursorPosition);\n this._wPrev = this._wCurr;\n this._wCurr = this.calculateAngularSpeed(\n this._anglePrev,\n this._angleCurrent,\n this._timePrev,\n this._timeCurrent\n );\n }\n }\n }\n break;\n case STATE.SCALE:\n if (this.enableZoom) {\n if (restart) {\n this.dispatchEvent(_endEvent);\n this.dispatchEvent(_startEvent);\n this.updateTbState(opState, true);\n this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);\n this._currentCursorPosition.copy(this._startCursorPosition);\n if (this.enableGrid) {\n this.disposeGrid();\n }\n this.activateGizmos(false);\n } else {\n const screenNotches = 8;\n this._currentCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);\n const movement = this._currentCursorPosition.y - this._startCursorPosition.y;\n let size = 1;\n if (movement < 0) {\n size = 1 / Math.pow(this.scaleFactor, -movement * screenNotches);\n } else if (movement > 0) {\n size = Math.pow(this.scaleFactor, movement * screenNotches);\n }\n this.applyTransformMatrix(this.applyScale(size, this._gizmos.position));\n }\n }\n break;\n case STATE.FOV:\n if (this.enableZoom && this.camera instanceof PerspectiveCamera) {\n if (restart) {\n this.dispatchEvent(_endEvent);\n this.dispatchEvent(_startEvent);\n this.updateTbState(opState, true);\n this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);\n this._currentCursorPosition.copy(this._startCursorPosition);\n if (this.enableGrid) {\n this.disposeGrid();\n }\n this.activateGizmos(false);\n } else {\n const screenNotches = 8;\n this._currentCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);\n const movement = this._currentCursorPosition.y - this._startCursorPosition.y;\n let size = 1;\n if (movement < 0) {\n size = 1 / Math.pow(this.scaleFactor, -movement * screenNotches);\n } else if (movement > 0) {\n size = Math.pow(this.scaleFactor, movement * screenNotches);\n }\n this._v3_1.setFromMatrixPosition(this._cameraMatrixState);\n const x = this._v3_1.distanceTo(this._gizmos.position);\n let xNew = x / size;\n xNew = MathUtils.clamp(xNew, this.minDistance, this.maxDistance);\n const y = x * Math.tan(MathUtils.DEG2RAD * this._fovState * 0.5);\n let newFov = MathUtils.RAD2DEG * (Math.atan(y / xNew) * 2);\n newFov = MathUtils.clamp(newFov, this.minFov, this.maxFov);\n const newDistance = y / Math.tan(MathUtils.DEG2RAD * (newFov / 2));\n size = x / newDistance;\n this._v3_2.setFromMatrixPosition(this._gizmoMatrixState);\n this.setFov(newFov);\n this.applyTransformMatrix(this.applyScale(size, this._v3_2, false));\n const direction = this._gizmos.position.clone().sub(this.camera.position).normalize().multiplyScalar(newDistance / x);\n this._m4_1.makeTranslation(direction.x, direction.y, direction.z);\n }\n }\n break;\n }\n this.dispatchEvent(_changeEvent);\n }\n });\n __publicField(this, \"onSinglePanEnd\", () => {\n if (this._state == STATE.ROTATE) {\n if (!this.enableRotate) {\n return;\n }\n if (this.enableAnimations) {\n const deltaTime = performance.now() - this._timeCurrent;\n if (deltaTime < 120) {\n const w = Math.abs((this._wPrev + this._wCurr) / 2);\n const self = this;\n this._animationId = window.requestAnimationFrame(function(t) {\n self.updateTbState(STATE.ANIMATION_ROTATE, true);\n const rotationAxis = self.calculateRotationAxis(self._cursorPosPrev, self._cursorPosCurr);\n self.onRotationAnim(t, rotationAxis, Math.min(w, self.wMax));\n });\n } else {\n this.updateTbState(STATE.IDLE, false);\n this.activateGizmos(false);\n this.dispatchEvent(_changeEvent);\n }\n } else {\n this.updateTbState(STATE.IDLE, false);\n this.activateGizmos(false);\n this.dispatchEvent(_changeEvent);\n }\n } else if (this._state == STATE.PAN || this._state == STATE.IDLE) {\n this.updateTbState(STATE.IDLE, false);\n if (this.enableGrid) {\n this.disposeGrid();\n }\n this.activateGizmos(false);\n this.dispatchEvent(_changeEvent);\n }\n this.dispatchEvent(_endEvent);\n });\n __publicField(this, \"onDoubleTap\", (event) => {\n if (this.enabled && this.enablePan && this.scene && this.camera && this.domElement) {\n this.dispatchEvent(_startEvent);\n this.setCenter(event.clientX, event.clientY);\n const hitP = this.unprojectOnObj(this.getCursorNDC(_center.x, _center.y, this.domElement), this.camera);\n if (hitP && this.enableAnimations) {\n const self = this;\n if (this._animationId != -1) {\n window.cancelAnimationFrame(this._animationId);\n }\n this._timeStart = -1;\n this._animationId = window.requestAnimationFrame(function(t) {\n self.updateTbState(STATE.ANIMATION_FOCUS, true);\n self.onFocusAnim(t, hitP, self._cameraMatrixState, self._gizmoMatrixState);\n });\n } else if (hitP && !this.enableAnimations) {\n this.updateTbState(STATE.FOCUS, true);\n this.focus(hitP, this.scaleFactor);\n this.updateTbState(STATE.IDLE, false);\n this.dispatchEvent(_changeEvent);\n }\n }\n this.dispatchEvent(_endEvent);\n });\n __publicField(this, \"onDoublePanStart\", () => {\n if (this.enabled && this.enablePan && this.camera && this.domElement) {\n this.dispatchEvent(_startEvent);\n this.updateTbState(STATE.PAN, true);\n this.setCenter(\n (this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2,\n (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2\n );\n const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement, true);\n if (rayDir !== void 0) {\n this._startCursorPosition.copy(rayDir);\n }\n this._currentCursorPosition.copy(this._startCursorPosition);\n this.activateGizmos(false);\n }\n });\n __publicField(this, \"onDoublePanMove\", () => {\n if (this.enabled && this.enablePan && this.camera && this.domElement) {\n this.setCenter(\n (this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2,\n (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2\n );\n if (this._state != STATE.PAN) {\n this.updateTbState(STATE.PAN, true);\n this._startCursorPosition.copy(this._currentCursorPosition);\n }\n const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement, true);\n if (rayDir !== void 0)\n this._currentCursorPosition.copy(rayDir);\n this.applyTransformMatrix(this.pan(this._startCursorPosition, this._currentCursorPosition, true));\n this.dispatchEvent(_changeEvent);\n }\n });\n __publicField(this, \"onDoublePanEnd\", () => {\n this.updateTbState(STATE.IDLE, false);\n this.dispatchEvent(_endEvent);\n });\n __publicField(this, \"onRotateStart\", () => {\n var _a;\n if (this.enabled && this.enableRotate) {\n this.dispatchEvent(_startEvent);\n this.updateTbState(STATE.ZROTATE, true);\n this._startFingerRotation = this.getAngle(this._touchCurrent[1], this._touchCurrent[0]) + this.getAngle(this._touchStart[1], this._touchStart[0]);\n this._currentFingerRotation = this._startFingerRotation;\n (_a = this.camera) == null ? void 0 : _a.getWorldDirection(this._rotationAxis);\n if (!this.enablePan && !this.enableZoom) {\n this.activateGizmos(true);\n }\n }\n });\n __publicField(this, \"onRotateMove\", () => {\n var _a;\n if (this.enabled && this.enableRotate && this.camera && this.domElement) {\n this.setCenter(\n (this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2,\n (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2\n );\n let rotationPoint;\n if (this._state != STATE.ZROTATE) {\n this.updateTbState(STATE.ZROTATE, true);\n this._startFingerRotation = this._currentFingerRotation;\n }\n this._currentFingerRotation = this.getAngle(this._touchCurrent[1], this._touchCurrent[0]) + this.getAngle(this._touchStart[1], this._touchStart[0]);\n if (!this.enablePan) {\n rotationPoint = new Vector3().setFromMatrixPosition(this._gizmoMatrixState);\n } else if (this.camera) {\n this._v3_2.setFromMatrixPosition(this._gizmoMatrixState);\n rotationPoint = (_a = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement)) == null ? void 0 : _a.applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._v3_2);\n }\n const amount = MathUtils.DEG2RAD * (this._startFingerRotation - this._currentFingerRotation);\n if (rotationPoint !== void 0) {\n this.applyTransformMatrix(this.zRotate(rotationPoint, amount));\n }\n this.dispatchEvent(_changeEvent);\n }\n });\n __publicField(this, \"onRotateEnd\", () => {\n this.updateTbState(STATE.IDLE, false);\n this.activateGizmos(false);\n this.dispatchEvent(_endEvent);\n });\n __publicField(this, \"onPinchStart\", () => {\n if (this.enabled && this.enableZoom) {\n this.dispatchEvent(_startEvent);\n this.updateTbState(STATE.SCALE, true);\n this._startFingerDistance = this.calculatePointersDistance(this._touchCurrent[0], this._touchCurrent[1]);\n this._currentFingerDistance = this._startFingerDistance;\n this.activateGizmos(false);\n }\n });\n __publicField(this, \"onPinchMove\", () => {\n var _a, _b;\n if (this.enabled && this.enableZoom && this.domElement) {\n this.setCenter(\n (this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2,\n (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2\n );\n const minDistance = 12;\n if (this._state != STATE.SCALE) {\n this._startFingerDistance = this._currentFingerDistance;\n this.updateTbState(STATE.SCALE, true);\n }\n this._currentFingerDistance = Math.max(\n this.calculatePointersDistance(this._touchCurrent[0], this._touchCurrent[1]),\n minDistance * this._devPxRatio\n );\n const amount = this._currentFingerDistance / this._startFingerDistance;\n let scalePoint;\n if (!this.enablePan) {\n scalePoint = this._gizmos.position;\n } else {\n if (this.camera instanceof OrthographicCamera) {\n scalePoint = (_a = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement)) == null ? void 0 : _a.applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._gizmos.position);\n } else if (this.camera instanceof PerspectiveCamera) {\n scalePoint = (_b = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement)) == null ? void 0 : _b.applyQuaternion(this.camera.quaternion).add(this._gizmos.position);\n }\n }\n if (scalePoint !== void 0) {\n this.applyTransformMatrix(this.applyScale(amount, scalePoint));\n }\n this.dispatchEvent(_changeEvent);\n }\n });\n __publicField(this, \"onPinchEnd\", () => {\n this.updateTbState(STATE.IDLE, false);\n this.dispatchEvent(_endEvent);\n });\n __publicField(this, \"onTriplePanStart\", () => {\n if (this.enabled && this.enableZoom && this.domElement) {\n this.dispatchEvent(_startEvent);\n this.updateTbState(STATE.SCALE, true);\n let clientX = 0;\n let clientY = 0;\n const nFingers = this._touchCurrent.length;\n for (let i = 0; i < nFingers; i++) {\n clientX += this._touchCurrent[i].clientX;\n clientY += this._touchCurrent[i].clientY;\n }\n this.setCenter(clientX / nFingers, clientY / nFingers);\n this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);\n this._currentCursorPosition.copy(this._startCursorPosition);\n }\n });\n __publicField(this, \"onTriplePanMove\", () => {\n if (this.enabled && this.enableZoom && this.camera && this.domElement) {\n let clientX = 0;\n let clientY = 0;\n const nFingers = this._touchCurrent.length;\n for (let i = 0; i < nFingers; i++) {\n clientX += this._touchCurrent[i].clientX;\n clientY += this._touchCurrent[i].clientY;\n }\n this.setCenter(clientX / nFingers, clientY / nFingers);\n const screenNotches = 8;\n this._currentCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);\n const movement = this._currentCursorPosition.y - this._startCursorPosition.y;\n let size = 1;\n if (movement < 0) {\n size = 1 / Math.pow(this.scaleFactor, -movement * screenNotches);\n } else if (movement > 0) {\n size = Math.pow(this.scaleFactor, movement * screenNotches);\n }\n this._v3_1.setFromMatrixPosition(this._cameraMatrixState);\n const x = this._v3_1.distanceTo(this._gizmos.position);\n let xNew = x / size;\n xNew = MathUtils.clamp(xNew, this.minDistance, this.maxDistance);\n const y = x * Math.tan(MathUtils.DEG2RAD * this._fovState * 0.5);\n let newFov = MathUtils.RAD2DEG * (Math.atan(y / xNew) * 2);\n newFov = MathUtils.clamp(newFov, this.minFov, this.maxFov);\n const newDistance = y / Math.tan(MathUtils.DEG2RAD * (newFov / 2));\n size = x / newDistance;\n this._v3_2.setFromMatrixPosition(this._gizmoMatrixState);\n this.setFov(newFov);\n this.applyTransformMatrix(this.applyScale(size, this._v3_2, false));\n const direction = this._gizmos.position.clone().sub(this.camera.position).normalize().multiplyScalar(newDistance / x);\n this._m4_1.makeTranslation(direction.x, direction.y, direction.z);\n this.dispatchEvent(_changeEvent);\n }\n });\n __publicField(this, \"onTriplePanEnd\", () => {\n this.updateTbState(STATE.IDLE, false);\n this.dispatchEvent(_endEvent);\n });\n /**\n * Set _center's x/y coordinates\n * @param {Number} clientX\n * @param {Number} clientY\n */\n __publicField(this, \"setCenter\", (clientX, clientY) => {\n _center.x = clientX;\n _center.y = clientY;\n });\n /**\n * Set default mouse actions\n */\n __publicField(this, \"initializeMouseActions\", () => {\n this.setMouseAction(\"PAN\", 0, \"CTRL\");\n this.setMouseAction(\"PAN\", 2);\n this.setMouseAction(\"ROTATE\", 0);\n this.setMouseAction(\"ZOOM\", \"WHEEL\");\n this.setMouseAction(\"ZOOM\", 1);\n this.setMouseAction(\"FOV\", \"WHEEL\", \"SHIFT\");\n this.setMouseAction(\"FOV\", 1, \"SHIFT\");\n });\n /**\n * Set a new mouse action by specifying the operation to be performed and a mouse/key combination. In case of conflict, replaces the existing one\n * @param {String} operation The operation to be performed ('PAN', 'ROTATE', 'ZOOM', 'FOV)\n * @param {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches\n * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed\n * @returns {Boolean} True if the mouse action has been successfully added, false otherwise\n */\n __publicField(this, \"setMouseAction\", (operation, mouse, key = null) => {\n const operationInput = [\"PAN\", \"ROTATE\", \"ZOOM\", \"FOV\"];\n const mouseInput = [0, 1, 2, \"WHEEL\"];\n const keyInput = [\"CTRL\", \"SHIFT\", null];\n let state;\n if (!operationInput.includes(operation) || !mouseInput.includes(mouse) || !keyInput.includes(key)) {\n return false;\n }\n if (mouse == \"WHEEL\") {\n if (operation != \"ZOOM\" && operation != \"FOV\") {\n return false;\n }\n }\n switch (operation) {\n case \"PAN\":\n state = STATE.PAN;\n break;\n case \"ROTATE\":\n state = STATE.ROTATE;\n break;\n case \"ZOOM\":\n state = STATE.SCALE;\n break;\n case \"FOV\":\n state = STATE.FOV;\n break;\n }\n const action = {\n operation,\n mouse,\n key,\n state\n };\n for (let i = 0; i < this.mouseActions.length; i++) {\n if (this.mouseActions[i].mouse == action.mouse && this.mouseActions[i].key == action.key) {\n this.mouseActions.splice(i, 1, action);\n return true;\n }\n }\n this.mouseActions.push(action);\n return true;\n });\n /**\n * Return the operation associated to a mouse/keyboard combination\n * @param {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches\n * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed\n * @returns The operation if it has been found, null otherwise\n */\n __publicField(this, \"getOpFromAction\", (mouse, key) => {\n let action;\n for (let i = 0; i < this.mouseActions.length; i++) {\n action = this.mouseActions[i];\n if (action.mouse == mouse && action.key == key) {\n return action.operation;\n }\n }\n if (key) {\n for (let i = 0; i < this.mouseActions.length; i++) {\n action = this.mouseActions[i];\n if (action.mouse == mouse && action.key == null) {\n return action.operation;\n }\n }\n }\n return null;\n });\n /**\n * Get the operation associated to mouse and key combination and returns the corresponding FSA state\n * @param {Number} mouse Mouse button\n * @param {String} key Keyboard modifier\n * @returns The FSA state obtained from the operation associated to mouse/keyboard combination\n */\n __publicField(this, \"getOpStateFromAction\", (mouse, key) => {\n let action;\n for (let i = 0; i < this.mouseActions.length; i++) {\n action = this.mouseActions[i];\n if (action.mouse == mouse && action.key == key) {\n return action.state;\n }\n }\n if (key) {\n for (let i = 0; i < this.mouseActions.length; i++) {\n action = this.mouseActions[i];\n if (action.mouse == mouse && action.key == null) {\n return action.state;\n }\n }\n }\n return null;\n });\n /**\n * Calculate the angle between two pointers\n * @param {PointerEvent} p1\n * @param {PointerEvent} p2\n * @returns {Number} The angle between two pointers in degrees\n */\n __publicField(this, \"getAngle\", (p1, p2) => {\n return Math.atan2(p2.clientY - p1.clientY, p2.clientX - p1.clientX) * 180 / Math.PI;\n });\n /**\n * Update a PointerEvent inside current pointerevents array\n * @param {PointerEvent} event\n */\n __publicField(this, \"updateTouchEvent\", (event) => {\n for (let i = 0; i < this._touchCurrent.length; i++) {\n if (this._touchCurrent[i].pointerId == event.pointerId) {\n this._touchCurrent.splice(i, 1, event);\n break;\n }\n }\n });\n /**\n * Calculate the angular speed\n * @param {Number} p0 Position at t0\n * @param {Number} p1 Position at t1\n * @param {Number} t0 Initial time in milliseconds\n * @param {Number} t1 Ending time in milliseconds\n */\n __publicField(this, \"calculateAngularSpeed\", (p0, p1, t0, t1) => {\n const s = p1 - p0;\n const t = (t1 - t0) / 1e3;\n if (t == 0) {\n return 0;\n }\n return s / t;\n });\n /**\n * Calculate the distance between two pointers\n * @param {PointerEvent} p0 The first pointer\n * @param {PointerEvent} p1 The second pointer\n * @returns {number} The distance between the two pointers\n */\n __publicField(this, \"calculatePointersDistance\", (p0, p1) => {\n return Math.sqrt(Math.pow(p1.clientX - p0.clientX, 2) + Math.pow(p1.clientY - p0.clientY, 2));\n });\n /**\n * Calculate the rotation axis as the vector perpendicular between two vectors\n * @param {Vector3} vec1 The first vector\n * @param {Vector3} vec2 The second vector\n * @returns {Vector3} The normalized rotation axis\n */\n __publicField(this, \"calculateRotationAxis\", (vec1, vec2) => {\n this._rotationMatrix.extractRotation(this._cameraMatrixState);\n this._quat.setFromRotationMatrix(this._rotationMatrix);\n this._rotationAxis.crossVectors(vec1, vec2).applyQuaternion(this._quat);\n return this._rotationAxis.normalize().clone();\n });\n /**\n * Calculate the trackball radius so that gizmo's diamater will be 2/3 of the minimum side of the camera frustum\n * @param {Camera} camera\n * @returns {Number} The trackball radius\n */\n __publicField(this, \"calculateTbRadius\", (camera) => {\n const factor = 0.67;\n const distance = camera.position.distanceTo(this._gizmos.position);\n if (camera instanceof PerspectiveCamera) {\n const halfFovV = MathUtils.DEG2RAD * camera.fov * 0.5;\n const halfFovH = Math.atan(camera.aspect * Math.tan(halfFovV));\n return Math.tan(Math.min(halfFovV, halfFovH)) * distance * factor;\n } else if (camera instanceof OrthographicCamera) {\n return Math.min(camera.top, camera.right) * factor;\n }\n });\n /**\n * Focus operation consist of positioning the point of interest in front of the camera and a slightly zoom in\n * @param {Vector3} point The point of interest\n * @param {Number} size Scale factor\n * @param {Number} amount Amount of operation to be completed (used for focus animations, default is complete full operation)\n */\n __publicField(this, \"focus\", (point, size, amount = 1) => {\n if (this.camera) {\n const focusPoint = point.clone();\n focusPoint.sub(this._gizmos.position).multiplyScalar(amount);\n this._translationMatrix.makeTranslation(focusPoint.x, focusPoint.y, focusPoint.z);\n const gizmoStateTemp = this._gizmoMatrixState.clone();\n this._gizmoMatrixState.premultiply(this._translationMatrix);\n this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);\n const cameraStateTemp = this._cameraMatrixState.clone();\n this._cameraMatrixState.premultiply(this._translationMatrix);\n this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale);\n if (this.enableZoom) {\n this.applyTransformMatrix(this.applyScale(size, this._gizmos.position));\n }\n this._gizmoMatrixState.copy(gizmoStateTemp);\n this._cameraMatrixState.copy(cameraStateTemp);\n }\n });\n /**\n * Draw a grid and add it to the scene\n */\n __publicField(this, \"drawGrid\", () => {\n if (this.scene) {\n const color = 8947848;\n const multiplier = 3;\n let size, divisions, maxLength, tick;\n if (this.camera instanceof OrthographicCamera) {\n const width = this.camera.right - this.camera.left;\n const height = this.camera.bottom - this.camera.top;\n maxLength = Math.max(width, height);\n tick = maxLength / 20;\n size = maxLength / this.camera.zoom * multiplier;\n divisions = size / tick * this.camera.zoom;\n } else if (this.camera instanceof PerspectiveCamera) {\n const distance = this.camera.position.distanceTo(this._gizmos.position);\n const halfFovV = MathUtils.DEG2RAD * this.camera.fov * 0.5;\n const halfFovH = Math.atan(this.camera.aspect * Math.tan(halfFovV));\n maxLength = Math.tan(Math.max(halfFovV, halfFovH)) * distance * 2;\n tick = maxLength / 20;\n size = maxLength * multiplier;\n divisions = size / tick;\n }\n if (this._grid == null && this.camera) {\n this._grid = new GridHelper(size, divisions, color, color);\n this._grid.position.copy(this._gizmos.position);\n this._gridPosition.copy(this._grid.position);\n this._grid.quaternion.copy(this.camera.quaternion);\n this._grid.rotateX(Math.PI * 0.5);\n this.scene.add(this._grid);\n }\n }\n });\n __publicField(this, \"connect\", (domElement) => {\n if (domElement === document) {\n console.error(\n 'THREE.ArcballControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.'\n );\n }\n this.domElement = domElement;\n this.domElement.style.touchAction = \"none\";\n this.domElement.addEventListener(\"contextmenu\", this.onContextMenu);\n this.domElement.addEventListener(\"pointerdown\", this.onPointerDown);\n this.domElement.addEventListener(\"pointercancel\", this.onPointerCancel);\n this.domElement.addEventListener(\"wheel\", this.onWheel);\n });\n /**\n * Remove all listeners, stop animations and clean scene\n */\n __publicField(this, \"dispose\", () => {\n var _a, _b, _c, _d, _e;\n if (this._animationId != -1) {\n window.cancelAnimationFrame(this._animationId);\n }\n (_a = this.domElement) == null ? void 0 : _a.removeEventListener(\"pointerdown\", this.onPointerDown);\n (_b = this.domElement) == null ? void 0 : _b.removeEventListener(\"pointercancel\", this.onPointerCancel);\n (_c = this.domElement) == null ? void 0 : _c.removeEventListener(\"wheel\", this.onWheel);\n (_d = this.domElement) == null ? void 0 : _d.removeEventListener(\"contextmenu\", this.onContextMenu);\n window.removeEventListener(\"pointermove\", this.onPointerMove);\n window.removeEventListener(\"pointerup\", this.onPointerUp);\n window.removeEventListener(\"resize\", this.onWindowResize);\n (_e = this.scene) == null ? void 0 : _e.remove(this._gizmos);\n this.disposeGrid();\n });\n /**\n * remove the grid from the scene\n */\n __publicField(this, \"disposeGrid\", () => {\n if (this._grid && this.scene) {\n this.scene.remove(this._grid);\n this._grid = null;\n }\n });\n /**\n * Compute the easing out cubic function for ease out effect in animation\n * @param {Number} t The absolute progress of the animation in the bound of 0 (beginning of the) and 1 (ending of animation)\n * @returns {Number} Result of easing out cubic at time t\n */\n __publicField(this, \"easeOutCubic\", (t) => {\n return 1 - Math.pow(1 - t, 3);\n });\n /**\n * Make rotation gizmos more or less visible\n * @param {Boolean} isActive If true, make gizmos more visible\n */\n __publicField(this, \"activateGizmos\", (isActive) => {\n for (const gizmo of this._gizmos.children) {\n gizmo.material.setValues({ opacity: isActive ? 1 : 0.6 });\n }\n });\n /**\n * Calculate the cursor position in NDC\n * @param {number} x Cursor horizontal coordinate within the canvas\n * @param {number} y Cursor vertical coordinate within the canvas\n * @param {HTMLElement} canvas The canvas where the renderer draws its output\n * @returns {Vector2} Cursor normalized position inside the canvas\n */\n __publicField(this, \"getCursorNDC\", (cursorX, cursorY, canvas) => {\n const canvasRect = canvas.getBoundingClientRect();\n this._v2_1.setX((cursorX - canvasRect.left) / canvasRect.width * 2 - 1);\n this._v2_1.setY((canvasRect.bottom - cursorY) / canvasRect.height * 2 - 1);\n return this._v2_1.clone();\n });\n /**\n * Calculate the cursor position inside the canvas x/y coordinates with the origin being in the center of the canvas\n * @param {Number} x Cursor horizontal coordinate within the canvas\n * @param {Number} y Cursor vertical coordinate within the canvas\n * @param {HTMLElement} canvas The canvas where the renderer draws its output\n * @returns {Vector2} Cursor position inside the canvas\n */\n __publicField(this, \"getCursorPosition\", (cursorX, cursorY, canvas) => {\n this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas));\n if (this.camera instanceof OrthographicCamera) {\n this._v2_1.x *= (this.camera.right - this.camera.left) * 0.5;\n this._v2_1.y *= (this.camera.top - this.camera.bottom) * 0.5;\n }\n return this._v2_1.clone();\n });\n /**\n * Set the camera to be controlled\n * @param {Camera} camera The virtual camera to be controlled\n */\n __publicField(this, \"setCamera\", (camera) => {\n if (camera) {\n camera.lookAt(this.target);\n camera.updateMatrix();\n if (camera instanceof PerspectiveCamera) {\n this._fov0 = camera.fov;\n this._fovState = camera.fov;\n }\n this._cameraMatrixState0.copy(camera.matrix);\n this._cameraMatrixState.copy(this._cameraMatrixState0);\n this._cameraProjectionState.copy(camera.projectionMatrix);\n this._zoom0 = camera.zoom;\n this._zoomState = this._zoom0;\n this._initialNear = camera.near;\n this._nearPos0 = camera.position.distanceTo(this.target) - camera.near;\n this._nearPos = this._initialNear;\n this._initialFar = camera.far;\n this._farPos0 = camera.position.distanceTo(this.target) - camera.far;\n this._farPos = this._initialFar;\n this._up0.copy(camera.up);\n this._upState.copy(camera.up);\n this.camera = camera;\n this.camera.updateProjectionMatrix();\n const tbRadius = this.calculateTbRadius(camera);\n if (tbRadius !== void 0) {\n this._tbRadius = tbRadius;\n }\n this.makeGizmos(this.target, this._tbRadius);\n }\n });\n /**\n * Creates the rotation gizmos matching trackball center and radius\n * @param {Vector3} tbCenter The trackball center\n * @param {number} tbRadius The trackball radius\n */\n __publicField(this, \"makeGizmos\", (tbCenter, tbRadius) => {\n const curve = new EllipseCurve(0, 0, tbRadius, tbRadius);\n const points = curve.getPoints(this._curvePts);\n const curveGeometry = new BufferGeometry().setFromPoints(points);\n const curveMaterialX = new LineBasicMaterial({ color: 16744576, fog: false, transparent: true, opacity: 0.6 });\n const curveMaterialY = new LineBasicMaterial({ color: 8454016, fog: false, transparent: true, opacity: 0.6 });\n const curveMaterialZ = new LineBasicMaterial({ color: 8421631, fog: false, transparent: true, opacity: 0.6 });\n const gizmoX = new Line(curveGeometry, curveMaterialX);\n const gizmoY = new Line(curveGeometry, curveMaterialY);\n const gizmoZ = new Line(curveGeometry, curveMaterialZ);\n const rotation = Math.PI * 0.5;\n gizmoX.rotation.x = rotation;\n gizmoY.rotation.y = rotation;\n this._gizmoMatrixState0.identity().setPosition(tbCenter);\n this._gizmoMatrixState.copy(this._gizmoMatrixState0);\n if (this.camera && this.camera.zoom != 1) {\n const size = 1 / this.camera.zoom;\n this._scaleMatrix.makeScale(size, size, size);\n this._translationMatrix.makeTranslation(-tbCenter.x, -tbCenter.y, -tbCenter.z);\n this._gizmoMatrixState.premultiply(this._translationMatrix).premultiply(this._scaleMatrix);\n this._translationMatrix.makeTranslation(tbCenter.x, tbCenter.y, tbCenter.z);\n this._gizmoMatrixState.premultiply(this._translationMatrix);\n }\n this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);\n this._gizmos.clear();\n this._gizmos.add(gizmoX);\n this._gizmos.add(gizmoY);\n this._gizmos.add(gizmoZ);\n });\n /**\n * Perform animation for focus operation\n * @param {Number} time Instant in which this function is called as performance.now()\n * @param {Vector3} point Point of interest for focus operation\n * @param {Matrix4} cameraMatrix Camera matrix\n * @param {Matrix4} gizmoMatrix Gizmos matrix\n */\n __publicField(this, \"onFocusAnim\", (time, point, cameraMatrix, gizmoMatrix) => {\n if (this._timeStart == -1) {\n this._timeStart = time;\n }\n if (this._state == STATE.ANIMATION_FOCUS) {\n const deltaTime = time - this._timeStart;\n const animTime = deltaTime / this.focusAnimationTime;\n this._gizmoMatrixState.copy(gizmoMatrix);\n if (animTime >= 1) {\n this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);\n this.focus(point, this.scaleFactor);\n this._timeStart = -1;\n this.updateTbState(STATE.IDLE, false);\n this.activateGizmos(false);\n this.dispatchEvent(_changeEvent);\n } else {\n const amount = this.easeOutCubic(animTime);\n const size = 1 - amount + this.scaleFactor * amount;\n this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);\n this.focus(point, size, amount);\n this.dispatchEvent(_changeEvent);\n const self = this;\n this._animationId = window.requestAnimationFrame(function(t) {\n self.onFocusAnim(t, point, cameraMatrix, gizmoMatrix.clone());\n });\n }\n } else {\n this._animationId = -1;\n this._timeStart = -1;\n }\n });\n /**\n * Perform animation for rotation operation\n * @param {Number} time Instant in which this function is called as performance.now()\n * @param {Vector3} rotationAxis Rotation axis\n * @param {number} w0 Initial angular velocity\n */\n __publicField(this, \"onRotationAnim\", (time, rotationAxis, w0) => {\n if (this._timeStart == -1) {\n this._anglePrev = 0;\n this._angleCurrent = 0;\n this._timeStart = time;\n }\n if (this._state == STATE.ANIMATION_ROTATE) {\n const deltaTime = (time - this._timeStart) / 1e3;\n const w = w0 + -this.dampingFactor * deltaTime;\n if (w > 0) {\n this._angleCurrent = 0.5 * -this.dampingFactor * Math.pow(deltaTime, 2) + w0 * deltaTime + 0;\n this.applyTransformMatrix(this.rotate(rotationAxis, this._angleCurrent));\n this.dispatchEvent(_changeEvent);\n const self = this;\n this._animationId = window.requestAnimationFrame(function(t) {\n self.onRotationAnim(t, rotationAxis, w0);\n });\n } else {\n this._animationId = -1;\n this._timeStart = -1;\n this.updateTbState(STATE.IDLE, false);\n this.activateGizmos(false);\n this.dispatchEvent(_changeEvent);\n }\n } else {\n this._animationId = -1;\n this._timeStart = -1;\n if (this._state != STATE.ROTATE) {\n this.activateGizmos(false);\n this.dispatchEvent(_changeEvent);\n }\n }\n });\n /**\n * Perform pan operation moving camera between two points\n * @param {Vector3} p0 Initial point\n * @param {Vector3} p1 Ending point\n * @param {Boolean} adjust If movement should be adjusted considering camera distance (Perspective only)\n */\n __publicField(this, \"pan\", (p0, p1, adjust = false) => {\n if (this.camera) {\n const movement = p0.clone().sub(p1);\n if (this.camera instanceof OrthographicCamera) {\n movement.multiplyScalar(1 / this.camera.zoom);\n }\n if (this.camera instanceof PerspectiveCamera && adjust) {\n this._v3_1.setFromMatrixPosition(this._cameraMatrixState0);\n this._v3_2.setFromMatrixPosition(this._gizmoMatrixState0);\n const distanceFactor = this._v3_1.distanceTo(this._v3_2) / this.camera.position.distanceTo(this._gizmos.position);\n movement.multiplyScalar(1 / distanceFactor);\n }\n this._v3_1.set(movement.x, movement.y, 0).applyQuaternion(this.camera.quaternion);\n this._m4_1.makeTranslation(this._v3_1.x, this._v3_1.y, this._v3_1.z);\n this.setTransformationMatrices(this._m4_1, this._m4_1);\n }\n return _transformation;\n });\n /**\n * Reset trackball\n */\n __publicField(this, \"reset\", () => {\n if (this.camera) {\n this.camera.zoom = this._zoom0;\n if (this.camera instanceof PerspectiveCamera) {\n this.camera.fov = this._fov0;\n }\n this.camera.near = this._nearPos;\n this.camera.far = this._farPos;\n this._cameraMatrixState.copy(this._cameraMatrixState0);\n this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale);\n this.camera.up.copy(this._up0);\n this.camera.updateMatrix();\n this.camera.updateProjectionMatrix();\n this._gizmoMatrixState.copy(this._gizmoMatrixState0);\n this._gizmoMatrixState0.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);\n this._gizmos.updateMatrix();\n const tbRadius = this.calculateTbRadius(this.camera);\n if (tbRadius !== void 0) {\n this._tbRadius = tbRadius;\n }\n this.makeGizmos(this._gizmos.position, this._tbRadius);\n this.camera.lookAt(this._gizmos.position);\n this.updateTbState(STATE.IDLE, false);\n this.dispatchEvent(_changeEvent);\n }\n });\n /**\n * Rotate the camera around an axis passing by trackball's center\n * @param {Vector3} axis Rotation axis\n * @param {number} angle Angle in radians\n * @returns {Object} Object with 'camera' field containing transformation matrix resulting from the operation to be applied to the camera\n */\n __publicField(this, \"rotate\", (axis, angle) => {\n const point = this._gizmos.position;\n this._translationMatrix.makeTranslation(-point.x, -point.y, -point.z);\n this._rotationMatrix.makeRotationAxis(axis, -angle);\n this._m4_1.makeTranslation(point.x, point.y, point.z);\n this._m4_1.multiply(this._rotationMatrix);\n this._m4_1.multiply(this._translationMatrix);\n this.setTransformationMatrices(this._m4_1);\n return _transformation;\n });\n __publicField(this, \"copyState\", () => {\n if (this.camera) {\n const state = JSON.stringify(\n this.camera instanceof OrthographicCamera ? {\n arcballState: {\n cameraFar: this.camera.far,\n cameraMatrix: this.camera.matrix,\n cameraNear: this.camera.near,\n cameraUp: this.camera.up,\n cameraZoom: this.camera.zoom,\n gizmoMatrix: this._gizmos.matrix\n }\n } : {\n arcballState: {\n cameraFar: this.camera.far,\n cameraFov: this.camera.fov,\n cameraMatrix: this.camera.matrix,\n cameraNear: this.camera.near,\n cameraUp: this.camera.up,\n cameraZoom: this.camera.zoom,\n gizmoMatrix: this._gizmos.matrix\n }\n }\n );\n navigator.clipboard.writeText(state);\n }\n });\n __publicField(this, \"pasteState\", () => {\n const self = this;\n navigator.clipboard.readText().then(function resolved(value) {\n self.setStateFromJSON(value);\n });\n });\n /**\n * Save the current state of the control. This can later be recovered with .reset\n */\n __publicField(this, \"saveState\", () => {\n if (!this.camera)\n return;\n this._cameraMatrixState0.copy(this.camera.matrix);\n this._gizmoMatrixState0.copy(this._gizmos.matrix);\n this._nearPos = this.camera.near;\n this._farPos = this.camera.far;\n this._zoom0 = this.camera.zoom;\n this._up0.copy(this.camera.up);\n if (this.camera instanceof PerspectiveCamera) {\n this._fov0 = this.camera.fov;\n }\n });\n /**\n * Perform uniform scale operation around a given point\n * @param {Number} size Scale factor\n * @param {Vector3} point Point around which scale\n * @param {Boolean} scaleGizmos If gizmos should be scaled (Perspective only)\n * @returns {Object} Object with 'camera' and 'gizmo' fields containing transformation matrices resulting from the operation to be applied to the camera and gizmos\n */\n __publicField(this, \"applyScale\", (size, point, scaleGizmos = true) => {\n if (!this.camera)\n return;\n const scalePoint = point.clone();\n let sizeInverse = 1 / size;\n if (this.camera instanceof OrthographicCamera) {\n this.camera.zoom = this._zoomState;\n this.camera.zoom *= size;\n if (this.camera.zoom > this.maxZoom) {\n this.camera.zoom = this.maxZoom;\n sizeInverse = this._zoomState / this.maxZoom;\n } else if (this.camera.zoom < this.minZoom) {\n this.camera.zoom = this.minZoom;\n sizeInverse = this._zoomState / this.minZoom;\n }\n this.camera.updateProjectionMatrix();\n this._v3_1.setFromMatrixPosition(this._gizmoMatrixState);\n this._scaleMatrix.makeScale(sizeInverse, sizeInverse, sizeInverse);\n this._translationMatrix.makeTranslation(-this._v3_1.x, -this._v3_1.y, -this._v3_1.z);\n this._m4_2.makeTranslation(this._v3_1.x, this._v3_1.y, this._v3_1.z).multiply(this._scaleMatrix);\n this._m4_2.multiply(this._translationMatrix);\n scalePoint.sub(this._v3_1);\n const amount = scalePoint.clone().multiplyScalar(sizeInverse);\n scalePoint.sub(amount);\n this._m4_1.makeTranslation(scalePoint.x, scalePoint.y, scalePoint.z);\n this._m4_2.premultiply(this._m4_1);\n this.setTransformationMatrices(this._m4_1, this._m4_2);\n return _transformation;\n }\n if (this.camera instanceof PerspectiveCamera) {\n this._v3_1.setFromMatrixPosition(this._cameraMatrixState);\n this._v3_2.setFromMatrixPosition(this._gizmoMatrixState);\n let distance = this._v3_1.distanceTo(scalePoint);\n let amount = distance - distance * sizeInverse;\n const newDistance = distance - amount;\n if (newDistance < this.minDistance) {\n sizeInverse = this.minDistance / distance;\n amount = distance - distance * sizeInverse;\n } else if (newDistance > this.maxDistance) {\n sizeInverse = this.maxDistance / distance;\n amount = distance - distance * sizeInverse;\n }\n let direction = scalePoint.clone().sub(this._v3_1).normalize().multiplyScalar(amount);\n this._m4_1.makeTranslation(direction.x, direction.y, direction.z);\n if (scaleGizmos) {\n const pos = this._v3_2;\n distance = pos.distanceTo(scalePoint);\n amount = distance - distance * sizeInverse;\n direction = scalePoint.clone().sub(this._v3_2).normalize().multiplyScalar(amount);\n this._translationMatrix.makeTranslation(pos.x, pos.y, pos.z);\n this._scaleMatrix.makeScale(sizeInverse, sizeInverse, sizeInverse);\n this._m4_2.makeTranslation(direction.x, direction.y, direction.z).multiply(this._translationMatrix);\n this._m4_2.multiply(this._scaleMatrix);\n this._translationMatrix.makeTranslation(-pos.x, -pos.y, -pos.z);\n this._m4_2.multiply(this._translationMatrix);\n this.setTransformationMatrices(this._m4_1, this._m4_2);\n } else {\n this.setTransformationMatrices(this._m4_1);\n }\n return _transformation;\n }\n });\n /**\n * Set camera fov\n * @param {Number} value fov to be setted\n */\n __publicField(this, \"setFov\", (value) => {\n if (this.camera instanceof PerspectiveCamera) {\n this.camera.fov = MathUtils.clamp(value, this.minFov, this.maxFov);\n this.camera.updateProjectionMatrix();\n }\n });\n /**\n * Set the trackball's center point\n * @param {Number} x X coordinate\n * @param {Number} y Y coordinate\n * @param {Number} z Z coordinate\n */\n __publicField(this, \"setTarget\", (x, y, z) => {\n if (this.camera) {\n this.target.set(x, y, z);\n this._gizmos.position.set(x, y, z);\n const tbRadius = this.calculateTbRadius(this.camera);\n if (tbRadius !== void 0) {\n this._tbRadius = tbRadius;\n }\n this.makeGizmos(this.target, this._tbRadius);\n this.camera.lookAt(this.target);\n }\n });\n /**\n * Rotate camera around its direction axis passing by a given point by a given angle\n * @param {Vector3} point The point where the rotation axis is passing trough\n * @param {Number} angle Angle in radians\n * @returns The computed transormation matix\n */\n __publicField(this, \"zRotate\", (point, angle) => {\n this._rotationMatrix.makeRotationAxis(this._rotationAxis, angle);\n this._translationMatrix.makeTranslation(-point.x, -point.y, -point.z);\n this._m4_1.makeTranslation(point.x, point.y, point.z);\n this._m4_1.multiply(this._rotationMatrix);\n this._m4_1.multiply(this._translationMatrix);\n this._v3_1.setFromMatrixPosition(this._gizmoMatrixState).sub(point);\n this._v3_2.copy(this._v3_1).applyAxisAngle(this._rotationAxis, angle);\n this._v3_2.sub(this._v3_1);\n this._m4_2.makeTranslation(this._v3_2.x, this._v3_2.y, this._v3_2.z);\n this.setTransformationMatrices(this._m4_1, this._m4_2);\n return _transformation;\n });\n /**\n * Unproject the cursor on the 3D object surface\n * @param {Vector2} cursor Cursor coordinates in NDC\n * @param {Camera} camera Virtual camera\n * @returns {Vector3} The point of intersection with the model, if exist, null otherwise\n */\n __publicField(this, \"unprojectOnObj\", (cursor, camera) => {\n if (!this.scene)\n return null;\n const raycaster = new Raycaster();\n raycaster.near = camera.near;\n raycaster.far = camera.far;\n raycaster.setFromCamera(cursor, camera);\n const intersect = raycaster.intersectObjects(this.scene.children, true);\n for (let i = 0; i < intersect.length; i++) {\n if (intersect[i].object.uuid != this._gizmos.uuid && intersect[i].face) {\n return intersect[i].point.clone();\n }\n }\n return null;\n });\n /**\n * Unproject the cursor on the trackball surface\n * @param {Camera} camera The virtual camera\n * @param {Number} cursorX Cursor horizontal coordinate on screen\n * @param {Number} cursorY Cursor vertical coordinate on screen\n * @param {HTMLElement} canvas The canvas where the renderer draws its output\n * @param {number} tbRadius The trackball radius\n * @returns {Vector3} The unprojected point on the trackball surface\n */\n __publicField(this, \"unprojectOnTbSurface\", (camera, cursorX, cursorY, canvas, tbRadius) => {\n if (camera instanceof OrthographicCamera) {\n this._v2_1.copy(this.getCursorPosition(cursorX, cursorY, canvas));\n this._v3_1.set(this._v2_1.x, this._v2_1.y, 0);\n const x2 = Math.pow(this._v2_1.x, 2);\n const y2 = Math.pow(this._v2_1.y, 2);\n const r2 = Math.pow(this._tbRadius, 2);\n if (x2 + y2 <= r2 * 0.5) {\n this._v3_1.setZ(Math.sqrt(r2 - (x2 + y2)));\n } else {\n this._v3_1.setZ(r2 * 0.5 / Math.sqrt(x2 + y2));\n }\n return this._v3_1;\n }\n if (camera instanceof PerspectiveCamera) {\n this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas));\n this._v3_1.set(this._v2_1.x, this._v2_1.y, -1);\n this._v3_1.applyMatrix4(camera.projectionMatrixInverse);\n const rayDir = this._v3_1.clone().normalize();\n const cameraGizmoDistance = camera.position.distanceTo(this._gizmos.position);\n const radius2 = Math.pow(tbRadius, 2);\n const h = this._v3_1.z;\n const l = Math.sqrt(Math.pow(this._v3_1.x, 2) + Math.pow(this._v3_1.y, 2));\n if (l == 0) {\n rayDir.set(this._v3_1.x, this._v3_1.y, tbRadius);\n return rayDir;\n }\n const m = h / l;\n const q = cameraGizmoDistance;\n let a = Math.pow(m, 2) + 1;\n let b = 2 * m * q;\n let c = Math.pow(q, 2) - radius2;\n let delta = Math.pow(b, 2) - 4 * a * c;\n if (delta >= 0) {\n this._v2_1.setX((-b - Math.sqrt(delta)) / (2 * a));\n this._v2_1.setY(m * this._v2_1.x + q);\n const angle = MathUtils.RAD2DEG * this._v2_1.angle();\n if (angle >= 45) {\n const rayLength2 = Math.sqrt(Math.pow(this._v2_1.x, 2) + Math.pow(cameraGizmoDistance - this._v2_1.y, 2));\n rayDir.multiplyScalar(rayLength2);\n rayDir.z += cameraGizmoDistance;\n return rayDir;\n }\n }\n a = m;\n b = q;\n c = -radius2 * 0.5;\n delta = Math.pow(b, 2) - 4 * a * c;\n this._v2_1.setX((-b - Math.sqrt(delta)) / (2 * a));\n this._v2_1.setY(m * this._v2_1.x + q);\n const rayLength = Math.sqrt(Math.pow(this._v2_1.x, 2) + Math.pow(cameraGizmoDistance - this._v2_1.y, 2));\n rayDir.multiplyScalar(rayLength);\n rayDir.z += cameraGizmoDistance;\n return rayDir;\n }\n });\n /**\n * Unproject the cursor on the plane passing through the center of the trackball orthogonal to the camera\n * @param {Camera} camera The virtual camera\n * @param {Number} cursorX Cursor horizontal coordinate on screen\n * @param {Number} cursorY Cursor vertical coordinate on screen\n * @param {HTMLElement} canvas The canvas where the renderer draws its output\n * @param {Boolean} initialDistance If initial distance between camera and gizmos should be used for calculations instead of current (Perspective only)\n * @returns {Vector3} The unprojected point on the trackball plane\n */\n __publicField(this, \"unprojectOnTbPlane\", (camera, cursorX, cursorY, canvas, initialDistance = false) => {\n if (camera instanceof OrthographicCamera) {\n this._v2_1.copy(this.getCursorPosition(cursorX, cursorY, canvas));\n this._v3_1.set(this._v2_1.x, this._v2_1.y, 0);\n return this._v3_1.clone();\n }\n if (camera instanceof PerspectiveCamera) {\n this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas));\n this._v3_1.set(this._v2_1.x, this._v2_1.y, -1);\n this._v3_1.applyMatrix4(camera.projectionMatrixInverse);\n const rayDir = this._v3_1.clone().normalize();\n const h = this._v3_1.z;\n const l = Math.sqrt(Math.pow(this._v3_1.x, 2) + Math.pow(this._v3_1.y, 2));\n let cameraGizmoDistance;\n if (initialDistance) {\n cameraGizmoDistance = this._v3_1.setFromMatrixPosition(this._cameraMatrixState0).distanceTo(this._v3_2.setFromMatrixPosition(this._gizmoMatrixState0));\n } else {\n cameraGizmoDistance = camera.position.distanceTo(this._gizmos.position);\n }\n if (l == 0) {\n rayDir.set(0, 0, 0);\n return rayDir;\n }\n const m = h / l;\n const q = cameraGizmoDistance;\n const x = -q / m;\n const rayLength = Math.sqrt(Math.pow(q, 2) + Math.pow(x, 2));\n rayDir.multiplyScalar(rayLength);\n rayDir.z = 0;\n return rayDir;\n }\n });\n /**\n * Update camera and gizmos state\n */\n __publicField(this, \"updateMatrixState\", () => {\n if (!this.camera)\n return;\n this._cameraMatrixState.copy(this.camera.matrix);\n this._gizmoMatrixState.copy(this._gizmos.matrix);\n if (this.camera instanceof OrthographicCamera) {\n this._cameraProjectionState.copy(this.camera.projectionMatrix);\n this.camera.updateProjectionMatrix();\n this._zoomState = this.camera.zoom;\n }\n if (this.camera instanceof PerspectiveCamera) {\n this._fovState = this.camera.fov;\n }\n });\n /**\n * Update the trackball FSA\n * @param {STATE} newState New state of the FSA\n * @param {Boolean} updateMatrices If matriices state should be updated\n */\n __publicField(this, \"updateTbState\", (newState, updateMatrices) => {\n this._state = newState;\n if (updateMatrices) {\n this.updateMatrixState();\n }\n });\n __publicField(this, \"update\", () => {\n const EPS = 1e-6;\n if (!this.target.equals(this._currentTarget) && this.camera) {\n this._gizmos.position.set(this.target.x, this.target.y, this.target.z);\n const tbRadius = this.calculateTbRadius(this.camera);\n if (tbRadius !== void 0) {\n this._tbRadius = tbRadius;\n }\n this.makeGizmos(this.target, this._tbRadius);\n this._currentTarget.copy(this.target);\n }\n if (!this.camera)\n return;\n if (this.camera instanceof OrthographicCamera) {\n if (this.camera.zoom > this.maxZoom || this.camera.zoom < this.minZoom) {\n const newZoom = MathUtils.clamp(this.camera.zoom, this.minZoom, this.maxZoom);\n this.applyTransformMatrix(this.applyScale(newZoom / this.camera.zoom, this._gizmos.position, true));\n }\n }\n if (this.camera instanceof PerspectiveCamera) {\n const distance = this.camera.position.distanceTo(this._gizmos.position);\n if (distance > this.maxDistance + EPS || distance < this.minDistance - EPS) {\n const newDistance = MathUtils.clamp(distance, this.minDistance, this.maxDistance);\n this.applyTransformMatrix(this.applyScale(newDistance / distance, this._gizmos.position));\n this.updateMatrixState();\n }\n if (this.camera.fov < this.minFov || this.camera.fov > this.maxFov) {\n this.camera.fov = MathUtils.clamp(this.camera.fov, this.minFov, this.maxFov);\n this.camera.updateProjectionMatrix();\n }\n const oldRadius = this._tbRadius;\n const tbRadius = this.calculateTbRadius(this.camera);\n if (tbRadius !== void 0) {\n this._tbRadius = tbRadius;\n }\n if (oldRadius < this._tbRadius - EPS || oldRadius > this._tbRadius + EPS) {\n const scale = (this._gizmos.scale.x + this._gizmos.scale.y + this._gizmos.scale.z) / 3;\n const newRadius = this._tbRadius / scale;\n const curve = new EllipseCurve(0, 0, newRadius, newRadius);\n const points = curve.getPoints(this._curvePts);\n const curveGeometry = new BufferGeometry().setFromPoints(points);\n for (const gizmo in this._gizmos.children) {\n const child = this._gizmos.children[gizmo];\n child.geometry = curveGeometry;\n }\n }\n }\n this.camera.lookAt(this._gizmos.position);\n });\n __publicField(this, \"setStateFromJSON\", (json) => {\n const state = JSON.parse(json);\n if (state.arcballState && this.camera) {\n this._cameraMatrixState.fromArray(state.arcballState.cameraMatrix.elements);\n this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale);\n this.camera.up.copy(state.arcballState.cameraUp);\n this.camera.near = state.arcballState.cameraNear;\n this.camera.far = state.arcballState.cameraFar;\n this.camera.zoom = state.arcballState.cameraZoom;\n if (this.camera instanceof PerspectiveCamera) {\n this.camera.fov = state.arcballState.cameraFov;\n }\n this._gizmoMatrixState.fromArray(state.arcballState.gizmoMatrix.elements);\n this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);\n this.camera.updateMatrix();\n this.camera.updateProjectionMatrix();\n this._gizmos.updateMatrix();\n const tbRadius = this.calculateTbRadius(this.camera);\n if (tbRadius !== void 0) {\n this._tbRadius = tbRadius;\n }\n const gizmoTmp = new Matrix4().copy(this._gizmoMatrixState0);\n this.makeGizmos(this._gizmos.position, this._tbRadius);\n this._gizmoMatrixState0.copy(gizmoTmp);\n this.camera.lookAt(this._gizmos.position);\n this.updateTbState(STATE.IDLE, false);\n this.dispatchEvent(_changeEvent);\n }\n });\n this.camera = null;\n this.domElement = domElement;\n this.scene = scene;\n this.mouseActions = [];\n this._mouseOp = null;\n this._v2_1 = new Vector2();\n this._v3_1 = new Vector3();\n this._v3_2 = new Vector3();\n this._m4_1 = new Matrix4();\n this._m4_2 = new Matrix4();\n this._quat = new Quaternion();\n this._translationMatrix = new Matrix4();\n this._rotationMatrix = new Matrix4();\n this._scaleMatrix = new Matrix4();\n this._rotationAxis = new Vector3();\n this._cameraMatrixState = new Matrix4();\n this._cameraProjectionState = new Matrix4();\n this._fovState = 1;\n this._upState = new Vector3();\n this._zoomState = 1;\n this._nearPos = 0;\n this._farPos = 0;\n this._gizmoMatrixState = new Matrix4();\n this._up0 = new Vector3();\n this._zoom0 = 1;\n this._fov0 = 0;\n this._initialNear = 0;\n this._nearPos0 = 0;\n this._initialFar = 0;\n this._farPos0 = 0;\n this._cameraMatrixState0 = new Matrix4();\n this._gizmoMatrixState0 = new Matrix4();\n this._button = -1;\n this._touchStart = [];\n this._touchCurrent = [];\n this._input = INPUT.NONE;\n this._switchSensibility = 32;\n this._startFingerDistance = 0;\n this._currentFingerDistance = 0;\n this._startFingerRotation = 0;\n this._currentFingerRotation = 0;\n this._devPxRatio = 0;\n this._downValid = true;\n this._nclicks = 0;\n this._downEvents = [];\n this._clickStart = 0;\n this._maxDownTime = 250;\n this._maxInterval = 300;\n this._posThreshold = 24;\n this._movementThreshold = 24;\n this._currentCursorPosition = new Vector3();\n this._startCursorPosition = new Vector3();\n this._grid = null;\n this._gridPosition = new Vector3();\n this._gizmos = new Group();\n this._curvePts = 128;\n this._timeStart = -1;\n this._animationId = -1;\n this.focusAnimationTime = 500;\n this._timePrev = 0;\n this._timeCurrent = 0;\n this._anglePrev = 0;\n this._angleCurrent = 0;\n this._cursorPosPrev = new Vector3();\n this._cursorPosCurr = new Vector3();\n this._wPrev = 0;\n this._wCurr = 0;\n this.adjustNearFar = false;\n this.scaleFactor = 1.1;\n this.dampingFactor = 25;\n this.wMax = 20;\n this.enableAnimations = true;\n this.enableGrid = false;\n this.cursorZoom = false;\n this.minFov = 5;\n this.maxFov = 90;\n this.enabled = true;\n this.enablePan = true;\n this.enableRotate = true;\n this.enableZoom = true;\n this.minDistance = 0;\n this.maxDistance = Infinity;\n this.minZoom = 0;\n this.maxZoom = Infinity;\n this.target = new Vector3(0, 0, 0);\n this._currentTarget = new Vector3(0, 0, 0);\n this._tbRadius = 1;\n this._state = STATE.IDLE;\n this.setCamera(camera);\n if (this.scene) {\n this.scene.add(this._gizmos);\n }\n this._devPxRatio = window.devicePixelRatio;\n this.initializeMouseActions();\n if (this.domElement)\n this.connect(this.domElement);\n window.addEventListener(\"resize\", this.onWindowResize);\n }\n /**\n * Apply a transformation matrix, to the camera and gizmos\n * @param {Object} transformation Object containing matrices to apply to camera and gizmos\n */\n applyTransformMatrix(transformation) {\n if ((transformation == null ? void 0 : transformation.camera) && this.camera) {\n this._m4_1.copy(this._cameraMatrixState).premultiply(transformation.camera);\n this._m4_1.decompose(this.camera.position, this.camera.quaternion, this.camera.scale);\n this.camera.updateMatrix();\n if (this._state == STATE.ROTATE || this._state == STATE.ZROTATE || this._state == STATE.ANIMATION_ROTATE) {\n this.camera.up.copy(this._upState).applyQuaternion(this.camera.quaternion);\n }\n }\n if (transformation == null ? void 0 : transformation.gizmos) {\n this._m4_1.copy(this._gizmoMatrixState).premultiply(transformation.gizmos);\n this._m4_1.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);\n this._gizmos.updateMatrix();\n }\n if ((this._state == STATE.SCALE || this._state == STATE.FOCUS || this._state == STATE.ANIMATION_FOCUS) && this.camera) {\n const tbRadius = this.calculateTbRadius(this.camera);\n if (tbRadius !== void 0) {\n this._tbRadius = tbRadius;\n }\n if (this.adjustNearFar) {\n const cameraDistance = this.camera.position.distanceTo(this._gizmos.position);\n const bb = new Box3();\n bb.setFromObject(this._gizmos);\n const sphere = new Sphere();\n bb.getBoundingSphere(sphere);\n const adjustedNearPosition = Math.max(this._nearPos0, sphere.radius + sphere.center.length());\n const regularNearPosition = cameraDistance - this._initialNear;\n const minNearPos = Math.min(adjustedNearPosition, regularNearPosition);\n this.camera.near = cameraDistance - minNearPos;\n const adjustedFarPosition = Math.min(this._farPos0, -sphere.radius + sphere.center.length());\n const regularFarPosition = cameraDistance - this._initialFar;\n const minFarPos = Math.min(adjustedFarPosition, regularFarPosition);\n this.camera.far = cameraDistance - minFarPos;\n this.camera.updateProjectionMatrix();\n } else {\n let update = false;\n if (this.camera.near != this._initialNear) {\n this.camera.near = this._initialNear;\n update = true;\n }\n if (this.camera.far != this._initialFar) {\n this.camera.far = this._initialFar;\n update = true;\n }\n if (update) {\n this.camera.updateProjectionMatrix();\n }\n }\n }\n }\n /**\n * Set gizmos visibility\n * @param {Boolean} value Value of gizmos visibility\n */\n setGizmosVisible(value) {\n this._gizmos.visible = value;\n this.dispatchEvent(_changeEvent);\n }\n /**\n * Set values in transformation object\n * @param {Matrix4} camera Transformation to be applied to the camera\n * @param {Matrix4} gizmos Transformation to be applied to gizmos\n */\n setTransformationMatrices(camera = null, gizmos = null) {\n if (camera) {\n if (_transformation.camera) {\n _transformation.camera.copy(camera);\n } else {\n _transformation.camera = camera.clone();\n }\n } else {\n _transformation.camera = null;\n }\n if (gizmos) {\n if (_transformation.gizmos) {\n _transformation.gizmos.copy(gizmos);\n } else {\n _transformation.gizmos = gizmos.clone();\n }\n } else {\n _transformation.gizmos = null;\n }\n }\n}\nexport {\n ArcballControls\n};\n//# sourceMappingURL=ArcballControls.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Quaternion, Vector3 } from \"three\";\nimport { EventDispatcher } from \"./EventDispatcher.js\";\nfunction contextmenu(event) {\n event.preventDefault();\n}\nclass FlyControls extends EventDispatcher {\n constructor(object, domElement) {\n super();\n __publicField(this, \"object\");\n __publicField(this, \"domElement\", null);\n __publicField(this, \"movementSpeed\", 1);\n __publicField(this, \"rollSpeed\", 5e-3);\n __publicField(this, \"dragToLook\", false);\n __publicField(this, \"autoForward\", false);\n __publicField(this, \"changeEvent\", { type: \"change\" });\n __publicField(this, \"EPS\", 1e-6);\n __publicField(this, \"tmpQuaternion\", new Quaternion());\n __publicField(this, \"mouseStatus\", 0);\n __publicField(this, \"movementSpeedMultiplier\", 1);\n __publicField(this, \"moveState\", {\n up: 0,\n down: 0,\n left: 0,\n right: 0,\n forward: 0,\n back: 0,\n pitchUp: 0,\n pitchDown: 0,\n yawLeft: 0,\n yawRight: 0,\n rollLeft: 0,\n rollRight: 0\n });\n __publicField(this, \"moveVector\", new Vector3(0, 0, 0));\n __publicField(this, \"rotationVector\", new Vector3(0, 0, 0));\n __publicField(this, \"keydown\", (event) => {\n if (event.altKey) {\n return;\n }\n switch (event.code) {\n case \"ShiftLeft\":\n case \"ShiftRight\":\n this.movementSpeedMultiplier = 0.1;\n break;\n case \"KeyW\":\n this.moveState.forward = 1;\n break;\n case \"KeyS\":\n this.moveState.back = 1;\n break;\n case \"KeyA\":\n this.moveState.left = 1;\n break;\n case \"KeyD\":\n this.moveState.right = 1;\n break;\n case \"KeyR\":\n this.moveState.up = 1;\n break;\n case \"KeyF\":\n this.moveState.down = 1;\n break;\n case \"ArrowUp\":\n this.moveState.pitchUp = 1;\n break;\n case \"ArrowDown\":\n this.moveState.pitchDown = 1;\n break;\n case \"ArrowLeft\":\n this.moveState.yawLeft = 1;\n break;\n case \"ArrowRight\":\n this.moveState.yawRight = 1;\n break;\n case \"KeyQ\":\n this.moveState.rollLeft = 1;\n break;\n case \"KeyE\":\n this.moveState.rollRight = 1;\n break;\n }\n this.updateMovementVector();\n this.updateRotationVector();\n });\n __publicField(this, \"keyup\", (event) => {\n switch (event.code) {\n case \"ShiftLeft\":\n case \"ShiftRight\":\n this.movementSpeedMultiplier = 1;\n break;\n case \"KeyW\":\n this.moveState.forward = 0;\n break;\n case \"KeyS\":\n this.moveState.back = 0;\n break;\n case \"KeyA\":\n this.moveState.left = 0;\n break;\n case \"KeyD\":\n this.moveState.right = 0;\n break;\n case \"KeyR\":\n this.moveState.up = 0;\n break;\n case \"KeyF\":\n this.moveState.down = 0;\n break;\n case \"ArrowUp\":\n this.moveState.pitchUp = 0;\n break;\n case \"ArrowDown\":\n this.moveState.pitchDown = 0;\n break;\n case \"ArrowLeft\":\n this.moveState.yawLeft = 0;\n break;\n case \"ArrowRight\":\n this.moveState.yawRight = 0;\n break;\n case \"KeyQ\":\n this.moveState.rollLeft = 0;\n break;\n case \"KeyE\":\n this.moveState.rollRight = 0;\n break;\n }\n this.updateMovementVector();\n this.updateRotationVector();\n });\n __publicField(this, \"pointerdown\", (event) => {\n if (this.dragToLook) {\n this.mouseStatus++;\n } else {\n switch (event.button) {\n case 0:\n this.moveState.forward = 1;\n break;\n case 2:\n this.moveState.back = 1;\n break;\n }\n this.updateMovementVector();\n }\n });\n __publicField(this, \"pointermove\", (event) => {\n if (!this.dragToLook || this.mouseStatus > 0) {\n const container = this.getContainerDimensions();\n const halfWidth = container.size[0] / 2;\n const halfHeight = container.size[1] / 2;\n this.moveState.yawLeft = -(event.pageX - container.offset[0] - halfWidth) / halfWidth;\n this.moveState.pitchDown = (event.pageY - container.offset[1] - halfHeight) / halfHeight;\n this.updateRotationVector();\n }\n });\n __publicField(this, \"pointerup\", (event) => {\n if (this.dragToLook) {\n this.mouseStatus--;\n this.moveState.yawLeft = this.moveState.pitchDown = 0;\n } else {\n switch (event.button) {\n case 0:\n this.moveState.forward = 0;\n break;\n case 2:\n this.moveState.back = 0;\n break;\n }\n this.updateMovementVector();\n }\n this.updateRotationVector();\n });\n __publicField(this, \"lastQuaternion\", new Quaternion());\n __publicField(this, \"lastPosition\", new Vector3());\n __publicField(this, \"update\", (delta) => {\n const moveMult = delta * this.movementSpeed;\n const rotMult = delta * this.rollSpeed;\n this.object.translateX(this.moveVector.x * moveMult);\n this.object.translateY(this.moveVector.y * moveMult);\n this.object.translateZ(this.moveVector.z * moveMult);\n this.tmpQuaternion.set(this.rotationVector.x * rotMult, this.rotationVector.y * rotMult, this.rotationVector.z * rotMult, 1).normalize();\n this.object.quaternion.multiply(this.tmpQuaternion);\n if (this.lastPosition.distanceToSquared(this.object.position) > this.EPS || 8 * (1 - this.lastQuaternion.dot(this.object.quaternion)) > this.EPS) {\n this.dispatchEvent(this.changeEvent);\n this.lastQuaternion.copy(this.object.quaternion);\n this.lastPosition.copy(this.object.position);\n }\n });\n __publicField(this, \"updateMovementVector\", () => {\n const forward = this.moveState.forward || this.autoForward && !this.moveState.back ? 1 : 0;\n this.moveVector.x = -this.moveState.left + this.moveState.right;\n this.moveVector.y = -this.moveState.down + this.moveState.up;\n this.moveVector.z = -forward + this.moveState.back;\n });\n __publicField(this, \"updateRotationVector\", () => {\n this.rotationVector.x = -this.moveState.pitchDown + this.moveState.pitchUp;\n this.rotationVector.y = -this.moveState.yawRight + this.moveState.yawLeft;\n this.rotationVector.z = -this.moveState.rollRight + this.moveState.rollLeft;\n });\n __publicField(this, \"getContainerDimensions\", () => {\n if (this.domElement != document && !(this.domElement instanceof Document)) {\n return {\n size: [this.domElement.offsetWidth, this.domElement.offsetHeight],\n offset: [this.domElement.offsetLeft, this.domElement.offsetTop]\n };\n } else {\n return {\n size: [window.innerWidth, window.innerHeight],\n offset: [0, 0]\n };\n }\n });\n // https://github.com/mrdoob/three.js/issues/20575\n __publicField(this, \"connect\", (domElement) => {\n this.domElement = domElement;\n if (!(domElement instanceof Document)) {\n domElement.setAttribute(\"tabindex\", -1);\n }\n this.domElement.addEventListener(\"contextmenu\", contextmenu);\n this.domElement.addEventListener(\"pointermove\", this.pointermove);\n this.domElement.addEventListener(\"pointerdown\", this.pointerdown);\n this.domElement.addEventListener(\"pointerup\", this.pointerup);\n window.addEventListener(\"keydown\", this.keydown);\n window.addEventListener(\"keyup\", this.keyup);\n });\n __publicField(this, \"dispose\", () => {\n this.domElement.removeEventListener(\"contextmenu\", contextmenu);\n this.domElement.removeEventListener(\"pointermove\", this.pointermove);\n this.domElement.removeEventListener(\"pointerdown\", this.pointerdown);\n this.domElement.removeEventListener(\"pointerup\", this.pointerup);\n window.removeEventListener(\"keydown\", this.keydown);\n window.removeEventListener(\"keyup\", this.keyup);\n });\n this.object = object;\n if (domElement !== void 0)\n this.connect(domElement);\n this.updateMovementVector();\n this.updateRotationVector();\n }\n}\nexport {\n FlyControls\n};\n//# sourceMappingURL=FlyControls.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { OrthographicCamera, PlaneGeometry, Mesh } from \"three\";\nclass Pass {\n constructor() {\n // if set to true, the pass is processed by the composer\n __publicField(this, \"enabled\", true);\n // if set to true, the pass indicates to swap read and write buffer after rendering\n __publicField(this, \"needsSwap\", true);\n // if set to true, the pass clears its buffer before rendering\n __publicField(this, \"clear\", false);\n // if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.\n __publicField(this, \"renderToScreen\", false);\n }\n setSize(width, height) {\n }\n render(renderer, writeBuffer, readBuffer, deltaTime, maskActive) {\n console.error(\"THREE.Pass: .render() must be implemented in derived pass.\");\n }\n dispose() {\n }\n}\nclass FullScreenQuad {\n constructor(material) {\n __publicField(this, \"camera\", new OrthographicCamera(-1, 1, 1, -1, 0, 1));\n __publicField(this, \"geometry\", new PlaneGeometry(2, 2));\n __publicField(this, \"mesh\");\n this.mesh = new Mesh(this.geometry, material);\n }\n get material() {\n return this.mesh.material;\n }\n set material(value) {\n this.mesh.material = value;\n }\n dispose() {\n this.mesh.geometry.dispose();\n }\n render(renderer) {\n renderer.render(this.mesh, this.camera);\n }\n}\nexport {\n FullScreenQuad,\n Pass\n};\n//# sourceMappingURL=Pass.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { ShaderMaterial, UniformsUtils } from \"three\";\nimport { Pass, FullScreenQuad } from \"./Pass.js\";\nclass ShaderPass extends Pass {\n constructor(shader, textureID = \"tDiffuse\") {\n super();\n __publicField(this, \"textureID\");\n __publicField(this, \"uniforms\");\n __publicField(this, \"material\");\n __publicField(this, \"fsQuad\");\n this.textureID = textureID;\n if (shader instanceof ShaderMaterial) {\n this.uniforms = shader.uniforms;\n this.material = shader;\n } else {\n this.uniforms = UniformsUtils.clone(shader.uniforms);\n this.material = new ShaderMaterial({\n defines: Object.assign({}, shader.defines),\n uniforms: this.uniforms,\n vertexShader: shader.vertexShader,\n fragmentShader: shader.fragmentShader\n });\n }\n this.fsQuad = new FullScreenQuad(this.material);\n }\n render(renderer, writeBuffer, readBuffer) {\n if (this.uniforms[this.textureID]) {\n this.uniforms[this.textureID].value = readBuffer.texture;\n }\n this.fsQuad.material = this.material;\n if (this.renderToScreen) {\n renderer.setRenderTarget(null);\n this.fsQuad.render(renderer);\n } else {\n renderer.setRenderTarget(writeBuffer);\n if (this.clear)\n renderer.clear(renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil);\n this.fsQuad.render(renderer);\n }\n }\n dispose() {\n this.fsQuad.dispose();\n this.material.dispose();\n }\n}\nexport {\n ShaderPass\n};\n//# sourceMappingURL=ShaderPass.js.map\n","const CopyShader = {\n uniforms: {\n tDiffuse: { value: null },\n opacity: { value: 1 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform float opacity;\n\n uniform sampler2D tDiffuse;\n\n varying vec2 vUv;\n\n void main() {\n\n \tvec4 texel = texture2D( tDiffuse, vUv );\n \tgl_FragColor = opacity * texel;\n\n }\n `\n )\n};\nexport {\n CopyShader\n};\n//# sourceMappingURL=CopyShader.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Pass } from \"./Pass.js\";\nclass MaskPass extends Pass {\n constructor(scene, camera) {\n super();\n __publicField(this, \"scene\");\n __publicField(this, \"camera\");\n __publicField(this, \"inverse\");\n this.scene = scene;\n this.camera = camera;\n this.clear = true;\n this.needsSwap = false;\n this.inverse = false;\n }\n render(renderer, writeBuffer, readBuffer) {\n const context = renderer.getContext();\n const state = renderer.state;\n state.buffers.color.setMask(false);\n state.buffers.depth.setMask(false);\n state.buffers.color.setLocked(true);\n state.buffers.depth.setLocked(true);\n let writeValue, clearValue;\n if (this.inverse) {\n writeValue = 0;\n clearValue = 1;\n } else {\n writeValue = 1;\n clearValue = 0;\n }\n state.buffers.stencil.setTest(true);\n state.buffers.stencil.setOp(context.REPLACE, context.REPLACE, context.REPLACE);\n state.buffers.stencil.setFunc(context.ALWAYS, writeValue, 4294967295);\n state.buffers.stencil.setClear(clearValue);\n state.buffers.stencil.setLocked(true);\n renderer.setRenderTarget(readBuffer);\n if (this.clear)\n renderer.clear();\n renderer.render(this.scene, this.camera);\n renderer.setRenderTarget(writeBuffer);\n if (this.clear)\n renderer.clear();\n renderer.render(this.scene, this.camera);\n state.buffers.color.setLocked(false);\n state.buffers.depth.setLocked(false);\n state.buffers.stencil.setLocked(false);\n state.buffers.stencil.setFunc(context.EQUAL, 1, 4294967295);\n state.buffers.stencil.setOp(context.KEEP, context.KEEP, context.KEEP);\n state.buffers.stencil.setLocked(true);\n }\n}\nclass ClearMaskPass extends Pass {\n constructor() {\n super();\n this.needsSwap = false;\n }\n render(renderer) {\n renderer.state.buffers.stencil.setLocked(false);\n renderer.state.buffers.stencil.setTest(false);\n }\n}\nexport {\n ClearMaskPass,\n MaskPass\n};\n//# sourceMappingURL=MaskPass.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Vector2, WebGLRenderTarget, NoBlending, Clock, LinearFilter, RGBAFormat } from \"three\";\nimport { CopyShader } from \"../shaders/CopyShader.js\";\nimport { ShaderPass } from \"./ShaderPass.js\";\nimport { MaskPass, ClearMaskPass } from \"./MaskPass.js\";\nclass EffectComposer {\n constructor(renderer, renderTarget) {\n __publicField(this, \"renderer\");\n __publicField(this, \"_pixelRatio\");\n __publicField(this, \"_width\");\n __publicField(this, \"_height\");\n __publicField(this, \"renderTarget1\");\n __publicField(this, \"renderTarget2\");\n __publicField(this, \"writeBuffer\");\n __publicField(this, \"readBuffer\");\n __publicField(this, \"renderToScreen\");\n __publicField(this, \"passes\", []);\n __publicField(this, \"copyPass\");\n __publicField(this, \"clock\");\n this.renderer = renderer;\n if (renderTarget === void 0) {\n const parameters = {\n minFilter: LinearFilter,\n magFilter: LinearFilter,\n format: RGBAFormat\n };\n const size = renderer.getSize(new Vector2());\n this._pixelRatio = renderer.getPixelRatio();\n this._width = size.width;\n this._height = size.height;\n renderTarget = new WebGLRenderTarget(\n this._width * this._pixelRatio,\n this._height * this._pixelRatio,\n parameters\n );\n renderTarget.texture.name = \"EffectComposer.rt1\";\n } else {\n this._pixelRatio = 1;\n this._width = renderTarget.width;\n this._height = renderTarget.height;\n }\n this.renderTarget1 = renderTarget;\n this.renderTarget2 = renderTarget.clone();\n this.renderTarget2.texture.name = \"EffectComposer.rt2\";\n this.writeBuffer = this.renderTarget1;\n this.readBuffer = this.renderTarget2;\n this.renderToScreen = true;\n if (CopyShader === void 0) {\n console.error(\"THREE.EffectComposer relies on CopyShader\");\n }\n if (ShaderPass === void 0) {\n console.error(\"THREE.EffectComposer relies on ShaderPass\");\n }\n this.copyPass = new ShaderPass(CopyShader);\n this.copyPass.material.blending = NoBlending;\n this.clock = new Clock();\n }\n swapBuffers() {\n const tmp = this.readBuffer;\n this.readBuffer = this.writeBuffer;\n this.writeBuffer = tmp;\n }\n addPass(pass) {\n this.passes.push(pass);\n pass.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio);\n }\n insertPass(pass, index) {\n this.passes.splice(index, 0, pass);\n pass.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio);\n }\n removePass(pass) {\n const index = this.passes.indexOf(pass);\n if (index !== -1) {\n this.passes.splice(index, 1);\n }\n }\n isLastEnabledPass(passIndex) {\n for (let i = passIndex + 1; i < this.passes.length; i++) {\n if (this.passes[i].enabled) {\n return false;\n }\n }\n return true;\n }\n render(deltaTime) {\n if (deltaTime === void 0) {\n deltaTime = this.clock.getDelta();\n }\n const currentRenderTarget = this.renderer.getRenderTarget();\n let maskActive = false;\n const il = this.passes.length;\n for (let i = 0; i < il; i++) {\n const pass = this.passes[i];\n if (pass.enabled === false)\n continue;\n pass.renderToScreen = this.renderToScreen && this.isLastEnabledPass(i);\n pass.render(this.renderer, this.writeBuffer, this.readBuffer, deltaTime, maskActive);\n if (pass.needsSwap) {\n if (maskActive) {\n const context = this.renderer.getContext();\n const stencil = this.renderer.state.buffers.stencil;\n stencil.setFunc(context.NOTEQUAL, 1, 4294967295);\n this.copyPass.render(this.renderer, this.writeBuffer, this.readBuffer, deltaTime);\n stencil.setFunc(context.EQUAL, 1, 4294967295);\n }\n this.swapBuffers();\n }\n if (MaskPass !== void 0) {\n if (pass instanceof MaskPass) {\n maskActive = true;\n } else if (pass instanceof ClearMaskPass) {\n maskActive = false;\n }\n }\n }\n this.renderer.setRenderTarget(currentRenderTarget);\n }\n reset(renderTarget) {\n if (renderTarget === void 0) {\n const size = this.renderer.getSize(new Vector2());\n this._pixelRatio = this.renderer.getPixelRatio();\n this._width = size.width;\n this._height = size.height;\n renderTarget = this.renderTarget1.clone();\n renderTarget.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio);\n }\n this.renderTarget1.dispose();\n this.renderTarget2.dispose();\n this.renderTarget1 = renderTarget;\n this.renderTarget2 = renderTarget.clone();\n this.writeBuffer = this.renderTarget1;\n this.readBuffer = this.renderTarget2;\n }\n setSize(width, height) {\n this._width = width;\n this._height = height;\n const effectiveWidth = this._width * this._pixelRatio;\n const effectiveHeight = this._height * this._pixelRatio;\n this.renderTarget1.setSize(effectiveWidth, effectiveHeight);\n this.renderTarget2.setSize(effectiveWidth, effectiveHeight);\n for (let i = 0; i < this.passes.length; i++) {\n this.passes[i].setSize(effectiveWidth, effectiveHeight);\n }\n }\n setPixelRatio(pixelRatio) {\n this._pixelRatio = pixelRatio;\n this.setSize(this._width, this._height);\n }\n dispose() {\n this.renderTarget1.dispose();\n this.renderTarget2.dispose();\n this.copyPass.dispose();\n }\n}\nexport {\n EffectComposer\n};\n//# sourceMappingURL=EffectComposer.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Color } from \"three\";\nimport { Pass } from \"./Pass.js\";\nclass RenderPass extends Pass {\n constructor(scene, camera, overrideMaterial, clearColor, clearAlpha = 0) {\n super();\n __publicField(this, \"scene\");\n __publicField(this, \"camera\");\n __publicField(this, \"overrideMaterial\");\n __publicField(this, \"clearColor\");\n __publicField(this, \"clearAlpha\");\n __publicField(this, \"clearDepth\", false);\n __publicField(this, \"_oldClearColor\", new Color());\n this.scene = scene;\n this.camera = camera;\n this.overrideMaterial = overrideMaterial;\n this.clearColor = clearColor;\n this.clearAlpha = clearAlpha;\n this.clear = true;\n this.needsSwap = false;\n }\n render(renderer, writeBuffer, readBuffer) {\n let oldAutoClear = renderer.autoClear;\n renderer.autoClear = false;\n let oldClearAlpha;\n let oldOverrideMaterial = null;\n if (this.overrideMaterial !== void 0) {\n oldOverrideMaterial = this.scene.overrideMaterial;\n this.scene.overrideMaterial = this.overrideMaterial;\n }\n if (this.clearColor) {\n renderer.getClearColor(this._oldClearColor);\n oldClearAlpha = renderer.getClearAlpha();\n renderer.setClearColor(this.clearColor, this.clearAlpha);\n }\n if (this.clearDepth) {\n renderer.clearDepth();\n }\n renderer.setRenderTarget(this.renderToScreen ? null : readBuffer);\n if (this.clear)\n renderer.clear(renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil);\n renderer.render(this.scene, this.camera);\n if (this.clearColor) {\n renderer.setClearColor(this._oldClearColor, oldClearAlpha);\n }\n if (this.overrideMaterial !== void 0) {\n this.scene.overrideMaterial = oldOverrideMaterial;\n }\n renderer.autoClear = oldAutoClear;\n }\n}\nexport {\n RenderPass\n};\n//# sourceMappingURL=RenderPass.js.map\n","function decodeText(array) {\n if (typeof TextDecoder !== \"undefined\") {\n return new TextDecoder().decode(array);\n }\n let s = \"\";\n for (let i = 0, il = array.length; i < il; i++) {\n s += String.fromCharCode(array[i]);\n }\n try {\n return decodeURIComponent(escape(s));\n } catch (e) {\n return s;\n }\n}\nexport {\n decodeText\n};\n//# sourceMappingURL=LoaderUtils.js.map\n","import { Loader, LoaderUtils, FileLoader, Color, SpotLight, PointLight, DirectionalLight, MeshBasicMaterial, MeshPhysicalMaterial, Vector2, Matrix4, Vector3, Quaternion, InstancedMesh, InstancedBufferAttribute, Object3D, TextureLoader, ImageBitmapLoader, BufferAttribute, InterleavedBuffer, InterleavedBufferAttribute, LinearFilter, LinearMipmapLinearFilter, RepeatWrapping, PointsMaterial, Material, LineBasicMaterial, MeshStandardMaterial, DoubleSide, PropertyBinding, BufferGeometry, SkinnedMesh, Mesh, TriangleStripDrawMode, TriangleFanDrawMode, LineSegments, Line, LineLoop, Points, Group, PerspectiveCamera, MathUtils, OrthographicCamera, Skeleton, AnimationClip, Bone, InterpolateLinear, NearestFilter, NearestMipmapNearestFilter, LinearMipmapNearestFilter, NearestMipmapLinearFilter, ClampToEdgeWrapping, MirroredRepeatWrapping, InterpolateDiscrete, FrontSide, Texture, VectorKeyframeTrack, NumberKeyframeTrack, QuaternionKeyframeTrack, Box3, Sphere, Interpolant } from \"three\";\nimport { toTrianglesDrawMode } from \"../utils/BufferGeometryUtils.js\";\nimport { version } from \"../_polyfill/constants.js\";\nimport { decodeText } from \"../_polyfill/LoaderUtils.js\";\nconst SRGBColorSpace = \"srgb\";\nconst LinearSRGBColorSpace = \"srgb-linear\";\nconst sRGBEncoding = 3001;\nconst LinearEncoding = 3e3;\nclass GLTFLoader extends Loader {\n constructor(manager) {\n super(manager);\n this.dracoLoader = null;\n this.ktx2Loader = null;\n this.meshoptDecoder = null;\n this.pluginCallbacks = [];\n this.register(function(parser) {\n return new GLTFMaterialsClearcoatExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFMaterialsDispersionExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFTextureBasisUExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFTextureWebPExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFTextureAVIFExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFMaterialsSheenExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFMaterialsTransmissionExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFMaterialsVolumeExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFMaterialsIorExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFMaterialsEmissiveStrengthExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFMaterialsSpecularExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFMaterialsIridescenceExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFMaterialsAnisotropyExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFMaterialsBumpExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFLightsExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFMeshoptCompression(parser);\n });\n this.register(function(parser) {\n return new GLTFMeshGpuInstancing(parser);\n });\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n let resourcePath;\n if (this.resourcePath !== \"\") {\n resourcePath = this.resourcePath;\n } else if (this.path !== \"\") {\n const relativeUrl = LoaderUtils.extractUrlBase(url);\n resourcePath = LoaderUtils.resolveURL(relativeUrl, this.path);\n } else {\n resourcePath = LoaderUtils.extractUrlBase(url);\n }\n this.manager.itemStart(url);\n const _onError = function(e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n scope.manager.itemEnd(url);\n };\n const loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setResponseType(\"arraybuffer\");\n loader.setRequestHeader(this.requestHeader);\n loader.setWithCredentials(this.withCredentials);\n loader.load(\n url,\n function(data) {\n try {\n scope.parse(\n data,\n resourcePath,\n function(gltf) {\n onLoad(gltf);\n scope.manager.itemEnd(url);\n },\n _onError\n );\n } catch (e) {\n _onError(e);\n }\n },\n onProgress,\n _onError\n );\n }\n setDRACOLoader(dracoLoader) {\n this.dracoLoader = dracoLoader;\n return this;\n }\n setDDSLoader() {\n throw new Error('THREE.GLTFLoader: \"MSFT_texture_dds\" no longer supported. Please update to \"KHR_texture_basisu\".');\n }\n setKTX2Loader(ktx2Loader) {\n this.ktx2Loader = ktx2Loader;\n return this;\n }\n setMeshoptDecoder(meshoptDecoder) {\n this.meshoptDecoder = meshoptDecoder;\n return this;\n }\n register(callback) {\n if (this.pluginCallbacks.indexOf(callback) === -1) {\n this.pluginCallbacks.push(callback);\n }\n return this;\n }\n unregister(callback) {\n if (this.pluginCallbacks.indexOf(callback) !== -1) {\n this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(callback), 1);\n }\n return this;\n }\n parse(data, path, onLoad, onError) {\n let json;\n const extensions = {};\n const plugins = {};\n if (typeof data === \"string\") {\n json = JSON.parse(data);\n } else if (data instanceof ArrayBuffer) {\n const magic = decodeText(new Uint8Array(data.slice(0, 4)));\n if (magic === BINARY_EXTENSION_HEADER_MAGIC) {\n try {\n extensions[EXTENSIONS.KHR_BINARY_GLTF] = new GLTFBinaryExtension(data);\n } catch (error) {\n if (onError)\n onError(error);\n return;\n }\n json = JSON.parse(extensions[EXTENSIONS.KHR_BINARY_GLTF].content);\n } else {\n json = JSON.parse(decodeText(new Uint8Array(data)));\n }\n } else {\n json = data;\n }\n if (json.asset === void 0 || json.asset.version[0] < 2) {\n if (onError)\n onError(new Error(\"THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.\"));\n return;\n }\n const parser = new GLTFParser(json, {\n path: path || this.resourcePath || \"\",\n crossOrigin: this.crossOrigin,\n requestHeader: this.requestHeader,\n manager: this.manager,\n ktx2Loader: this.ktx2Loader,\n meshoptDecoder: this.meshoptDecoder\n });\n parser.fileLoader.setRequestHeader(this.requestHeader);\n for (let i = 0; i < this.pluginCallbacks.length; i++) {\n const plugin = this.pluginCallbacks[i](parser);\n if (!plugin.name)\n console.error(\"THREE.GLTFLoader: Invalid plugin found: missing name\");\n plugins[plugin.name] = plugin;\n extensions[plugin.name] = true;\n }\n if (json.extensionsUsed) {\n for (let i = 0; i < json.extensionsUsed.length; ++i) {\n const extensionName = json.extensionsUsed[i];\n const extensionsRequired = json.extensionsRequired || [];\n switch (extensionName) {\n case EXTENSIONS.KHR_MATERIALS_UNLIT:\n extensions[extensionName] = new GLTFMaterialsUnlitExtension();\n break;\n case EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:\n extensions[extensionName] = new GLTFDracoMeshCompressionExtension(json, this.dracoLoader);\n break;\n case EXTENSIONS.KHR_TEXTURE_TRANSFORM:\n extensions[extensionName] = new GLTFTextureTransformExtension();\n break;\n case EXTENSIONS.KHR_MESH_QUANTIZATION:\n extensions[extensionName] = new GLTFMeshQuantizationExtension();\n break;\n default:\n if (extensionsRequired.indexOf(extensionName) >= 0 && plugins[extensionName] === void 0) {\n console.warn('THREE.GLTFLoader: Unknown extension \"' + extensionName + '\".');\n }\n }\n }\n }\n parser.setExtensions(extensions);\n parser.setPlugins(plugins);\n parser.parse(onLoad, onError);\n }\n parseAsync(data, path) {\n const scope = this;\n return new Promise(function(resolve, reject) {\n scope.parse(data, path, resolve, reject);\n });\n }\n}\nfunction GLTFRegistry() {\n let objects = {};\n return {\n get: function(key) {\n return objects[key];\n },\n add: function(key, object) {\n objects[key] = object;\n },\n remove: function(key) {\n delete objects[key];\n },\n removeAll: function() {\n objects = {};\n }\n };\n}\nconst EXTENSIONS = {\n KHR_BINARY_GLTF: \"KHR_binary_glTF\",\n KHR_DRACO_MESH_COMPRESSION: \"KHR_draco_mesh_compression\",\n KHR_LIGHTS_PUNCTUAL: \"KHR_lights_punctual\",\n KHR_MATERIALS_CLEARCOAT: \"KHR_materials_clearcoat\",\n KHR_MATERIALS_DISPERSION: \"KHR_materials_dispersion\",\n KHR_MATERIALS_IOR: \"KHR_materials_ior\",\n KHR_MATERIALS_SHEEN: \"KHR_materials_sheen\",\n KHR_MATERIALS_SPECULAR: \"KHR_materials_specular\",\n KHR_MATERIALS_TRANSMISSION: \"KHR_materials_transmission\",\n KHR_MATERIALS_IRIDESCENCE: \"KHR_materials_iridescence\",\n KHR_MATERIALS_ANISOTROPY: \"KHR_materials_anisotropy\",\n KHR_MATERIALS_UNLIT: \"KHR_materials_unlit\",\n KHR_MATERIALS_VOLUME: \"KHR_materials_volume\",\n KHR_TEXTURE_BASISU: \"KHR_texture_basisu\",\n KHR_TEXTURE_TRANSFORM: \"KHR_texture_transform\",\n KHR_MESH_QUANTIZATION: \"KHR_mesh_quantization\",\n KHR_MATERIALS_EMISSIVE_STRENGTH: \"KHR_materials_emissive_strength\",\n EXT_MATERIALS_BUMP: \"EXT_materials_bump\",\n EXT_TEXTURE_WEBP: \"EXT_texture_webp\",\n EXT_TEXTURE_AVIF: \"EXT_texture_avif\",\n EXT_MESHOPT_COMPRESSION: \"EXT_meshopt_compression\",\n EXT_MESH_GPU_INSTANCING: \"EXT_mesh_gpu_instancing\"\n};\nclass GLTFLightsExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;\n this.cache = { refs: {}, uses: {} };\n }\n _markDefs() {\n const parser = this.parser;\n const nodeDefs = this.parser.json.nodes || [];\n for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) {\n const nodeDef = nodeDefs[nodeIndex];\n if (nodeDef.extensions && nodeDef.extensions[this.name] && nodeDef.extensions[this.name].light !== void 0) {\n parser._addNodeRef(this.cache, nodeDef.extensions[this.name].light);\n }\n }\n }\n _loadLight(lightIndex) {\n const parser = this.parser;\n const cacheKey = \"light:\" + lightIndex;\n let dependency = parser.cache.get(cacheKey);\n if (dependency)\n return dependency;\n const json = parser.json;\n const extensions = json.extensions && json.extensions[this.name] || {};\n const lightDefs = extensions.lights || [];\n const lightDef = lightDefs[lightIndex];\n let lightNode;\n const color = new Color(16777215);\n if (lightDef.color !== void 0)\n color.setRGB(lightDef.color[0], lightDef.color[1], lightDef.color[2], LinearSRGBColorSpace);\n const range = lightDef.range !== void 0 ? lightDef.range : 0;\n switch (lightDef.type) {\n case \"directional\":\n lightNode = new DirectionalLight(color);\n lightNode.target.position.set(0, 0, -1);\n lightNode.add(lightNode.target);\n break;\n case \"point\":\n lightNode = new PointLight(color);\n lightNode.distance = range;\n break;\n case \"spot\":\n lightNode = new SpotLight(color);\n lightNode.distance = range;\n lightDef.spot = lightDef.spot || {};\n lightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== void 0 ? lightDef.spot.innerConeAngle : 0;\n lightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== void 0 ? lightDef.spot.outerConeAngle : Math.PI / 4;\n lightNode.angle = lightDef.spot.outerConeAngle;\n lightNode.penumbra = 1 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;\n lightNode.target.position.set(0, 0, -1);\n lightNode.add(lightNode.target);\n break;\n default:\n throw new Error(\"THREE.GLTFLoader: Unexpected light type: \" + lightDef.type);\n }\n lightNode.position.set(0, 0, 0);\n lightNode.decay = 2;\n assignExtrasToUserData(lightNode, lightDef);\n if (lightDef.intensity !== void 0)\n lightNode.intensity = lightDef.intensity;\n lightNode.name = parser.createUniqueName(lightDef.name || \"light_\" + lightIndex);\n dependency = Promise.resolve(lightNode);\n parser.cache.add(cacheKey, dependency);\n return dependency;\n }\n getDependency(type, index) {\n if (type !== \"light\")\n return;\n return this._loadLight(index);\n }\n createNodeAttachment(nodeIndex) {\n const self2 = this;\n const parser = this.parser;\n const json = parser.json;\n const nodeDef = json.nodes[nodeIndex];\n const lightDef = nodeDef.extensions && nodeDef.extensions[this.name] || {};\n const lightIndex = lightDef.light;\n if (lightIndex === void 0)\n return null;\n return this._loadLight(lightIndex).then(function(light) {\n return parser._getNodeRef(self2.cache, lightIndex, light);\n });\n }\n}\nclass GLTFMaterialsUnlitExtension {\n constructor() {\n this.name = EXTENSIONS.KHR_MATERIALS_UNLIT;\n }\n getMaterialType() {\n return MeshBasicMaterial;\n }\n extendParams(materialParams, materialDef, parser) {\n const pending = [];\n materialParams.color = new Color(1, 1, 1);\n materialParams.opacity = 1;\n const metallicRoughness = materialDef.pbrMetallicRoughness;\n if (metallicRoughness) {\n if (Array.isArray(metallicRoughness.baseColorFactor)) {\n const array = metallicRoughness.baseColorFactor;\n materialParams.color.setRGB(array[0], array[1], array[2], LinearSRGBColorSpace);\n materialParams.opacity = array[3];\n }\n if (metallicRoughness.baseColorTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"map\", metallicRoughness.baseColorTexture, SRGBColorSpace));\n }\n }\n return Promise.all(pending);\n }\n}\nclass GLTFMaterialsEmissiveStrengthExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_MATERIALS_EMISSIVE_STRENGTH;\n }\n extendMaterialParams(materialIndex, materialParams) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n return Promise.resolve();\n }\n const emissiveStrength = materialDef.extensions[this.name].emissiveStrength;\n if (emissiveStrength !== void 0) {\n materialParams.emissiveIntensity = emissiveStrength;\n }\n return Promise.resolve();\n }\n}\nclass GLTFMaterialsClearcoatExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT;\n }\n getMaterialType(materialIndex) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name])\n return null;\n return MeshPhysicalMaterial;\n }\n extendMaterialParams(materialIndex, materialParams) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n return Promise.resolve();\n }\n const pending = [];\n const extension = materialDef.extensions[this.name];\n if (extension.clearcoatFactor !== void 0) {\n materialParams.clearcoat = extension.clearcoatFactor;\n }\n if (extension.clearcoatTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"clearcoatMap\", extension.clearcoatTexture));\n }\n if (extension.clearcoatRoughnessFactor !== void 0) {\n materialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor;\n }\n if (extension.clearcoatRoughnessTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"clearcoatRoughnessMap\", extension.clearcoatRoughnessTexture));\n }\n if (extension.clearcoatNormalTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"clearcoatNormalMap\", extension.clearcoatNormalTexture));\n if (extension.clearcoatNormalTexture.scale !== void 0) {\n const scale = extension.clearcoatNormalTexture.scale;\n materialParams.clearcoatNormalScale = new Vector2(scale, scale);\n }\n }\n return Promise.all(pending);\n }\n}\nclass GLTFMaterialsDispersionExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_MATERIALS_DISPERSION;\n }\n getMaterialType(materialIndex) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name])\n return null;\n return MeshPhysicalMaterial;\n }\n extendMaterialParams(materialIndex, materialParams) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n return Promise.resolve();\n }\n const extension = materialDef.extensions[this.name];\n materialParams.dispersion = extension.dispersion !== void 0 ? extension.dispersion : 0;\n return Promise.resolve();\n }\n}\nclass GLTFMaterialsIridescenceExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_MATERIALS_IRIDESCENCE;\n }\n getMaterialType(materialIndex) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name])\n return null;\n return MeshPhysicalMaterial;\n }\n extendMaterialParams(materialIndex, materialParams) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n return Promise.resolve();\n }\n const pending = [];\n const extension = materialDef.extensions[this.name];\n if (extension.iridescenceFactor !== void 0) {\n materialParams.iridescence = extension.iridescenceFactor;\n }\n if (extension.iridescenceTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"iridescenceMap\", extension.iridescenceTexture));\n }\n if (extension.iridescenceIor !== void 0) {\n materialParams.iridescenceIOR = extension.iridescenceIor;\n }\n if (materialParams.iridescenceThicknessRange === void 0) {\n materialParams.iridescenceThicknessRange = [100, 400];\n }\n if (extension.iridescenceThicknessMinimum !== void 0) {\n materialParams.iridescenceThicknessRange[0] = extension.iridescenceThicknessMinimum;\n }\n if (extension.iridescenceThicknessMaximum !== void 0) {\n materialParams.iridescenceThicknessRange[1] = extension.iridescenceThicknessMaximum;\n }\n if (extension.iridescenceThicknessTexture !== void 0) {\n pending.push(\n parser.assignTexture(materialParams, \"iridescenceThicknessMap\", extension.iridescenceThicknessTexture)\n );\n }\n return Promise.all(pending);\n }\n}\nclass GLTFMaterialsSheenExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_MATERIALS_SHEEN;\n }\n getMaterialType(materialIndex) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name])\n return null;\n return MeshPhysicalMaterial;\n }\n extendMaterialParams(materialIndex, materialParams) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n return Promise.resolve();\n }\n const pending = [];\n materialParams.sheenColor = new Color(0, 0, 0);\n materialParams.sheenRoughness = 0;\n materialParams.sheen = 1;\n const extension = materialDef.extensions[this.name];\n if (extension.sheenColorFactor !== void 0) {\n const colorFactor = extension.sheenColorFactor;\n materialParams.sheenColor.setRGB(colorFactor[0], colorFactor[1], colorFactor[2], LinearSRGBColorSpace);\n }\n if (extension.sheenRoughnessFactor !== void 0) {\n materialParams.sheenRoughness = extension.sheenRoughnessFactor;\n }\n if (extension.sheenColorTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"sheenColorMap\", extension.sheenColorTexture, SRGBColorSpace));\n }\n if (extension.sheenRoughnessTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"sheenRoughnessMap\", extension.sheenRoughnessTexture));\n }\n return Promise.all(pending);\n }\n}\nclass GLTFMaterialsTransmissionExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION;\n }\n getMaterialType(materialIndex) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name])\n return null;\n return MeshPhysicalMaterial;\n }\n extendMaterialParams(materialIndex, materialParams) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n return Promise.resolve();\n }\n const pending = [];\n const extension = materialDef.extensions[this.name];\n if (extension.transmissionFactor !== void 0) {\n materialParams.transmission = extension.transmissionFactor;\n }\n if (extension.transmissionTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"transmissionMap\", extension.transmissionTexture));\n }\n return Promise.all(pending);\n }\n}\nclass GLTFMaterialsVolumeExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_MATERIALS_VOLUME;\n }\n getMaterialType(materialIndex) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name])\n return null;\n return MeshPhysicalMaterial;\n }\n extendMaterialParams(materialIndex, materialParams) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n return Promise.resolve();\n }\n const pending = [];\n const extension = materialDef.extensions[this.name];\n materialParams.thickness = extension.thicknessFactor !== void 0 ? extension.thicknessFactor : 0;\n if (extension.thicknessTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"thicknessMap\", extension.thicknessTexture));\n }\n materialParams.attenuationDistance = extension.attenuationDistance || Infinity;\n const colorArray = extension.attenuationColor || [1, 1, 1];\n materialParams.attenuationColor = new Color().setRGB(\n colorArray[0],\n colorArray[1],\n colorArray[2],\n LinearSRGBColorSpace\n );\n return Promise.all(pending);\n }\n}\nclass GLTFMaterialsIorExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_MATERIALS_IOR;\n }\n getMaterialType(materialIndex) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name])\n return null;\n return MeshPhysicalMaterial;\n }\n extendMaterialParams(materialIndex, materialParams) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n return Promise.resolve();\n }\n const extension = materialDef.extensions[this.name];\n materialParams.ior = extension.ior !== void 0 ? extension.ior : 1.5;\n return Promise.resolve();\n }\n}\nclass GLTFMaterialsSpecularExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_MATERIALS_SPECULAR;\n }\n getMaterialType(materialIndex) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name])\n return null;\n return MeshPhysicalMaterial;\n }\n extendMaterialParams(materialIndex, materialParams) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n return Promise.resolve();\n }\n const pending = [];\n const extension = materialDef.extensions[this.name];\n materialParams.specularIntensity = extension.specularFactor !== void 0 ? extension.specularFactor : 1;\n if (extension.specularTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"specularIntensityMap\", extension.specularTexture));\n }\n const colorArray = extension.specularColorFactor || [1, 1, 1];\n materialParams.specularColor = new Color().setRGB(colorArray[0], colorArray[1], colorArray[2], LinearSRGBColorSpace);\n if (extension.specularColorTexture !== void 0) {\n pending.push(\n parser.assignTexture(materialParams, \"specularColorMap\", extension.specularColorTexture, SRGBColorSpace)\n );\n }\n return Promise.all(pending);\n }\n}\nclass GLTFMaterialsBumpExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.EXT_MATERIALS_BUMP;\n }\n getMaterialType(materialIndex) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name])\n return null;\n return MeshPhysicalMaterial;\n }\n extendMaterialParams(materialIndex, materialParams) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n return Promise.resolve();\n }\n const pending = [];\n const extension = materialDef.extensions[this.name];\n materialParams.bumpScale = extension.bumpFactor !== void 0 ? extension.bumpFactor : 1;\n if (extension.bumpTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"bumpMap\", extension.bumpTexture));\n }\n return Promise.all(pending);\n }\n}\nclass GLTFMaterialsAnisotropyExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_MATERIALS_ANISOTROPY;\n }\n getMaterialType(materialIndex) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name])\n return null;\n return MeshPhysicalMaterial;\n }\n extendMaterialParams(materialIndex, materialParams) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n return Promise.resolve();\n }\n const pending = [];\n const extension = materialDef.extensions[this.name];\n if (extension.anisotropyStrength !== void 0) {\n materialParams.anisotropy = extension.anisotropyStrength;\n }\n if (extension.anisotropyRotation !== void 0) {\n materialParams.anisotropyRotation = extension.anisotropyRotation;\n }\n if (extension.anisotropyTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"anisotropyMap\", extension.anisotropyTexture));\n }\n return Promise.all(pending);\n }\n}\nclass GLTFTextureBasisUExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_TEXTURE_BASISU;\n }\n loadTexture(textureIndex) {\n const parser = this.parser;\n const json = parser.json;\n const textureDef = json.textures[textureIndex];\n if (!textureDef.extensions || !textureDef.extensions[this.name]) {\n return null;\n }\n const extension = textureDef.extensions[this.name];\n const loader = parser.options.ktx2Loader;\n if (!loader) {\n if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) {\n throw new Error(\"THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures\");\n } else {\n return null;\n }\n }\n return parser.loadTextureImage(textureIndex, extension.source, loader);\n }\n}\nclass GLTFTextureWebPExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.EXT_TEXTURE_WEBP;\n this.isSupported = null;\n }\n loadTexture(textureIndex) {\n const name = this.name;\n const parser = this.parser;\n const json = parser.json;\n const textureDef = json.textures[textureIndex];\n if (!textureDef.extensions || !textureDef.extensions[name]) {\n return null;\n }\n const extension = textureDef.extensions[name];\n const source = json.images[extension.source];\n let loader = parser.textureLoader;\n if (source.uri) {\n const handler = parser.options.manager.getHandler(source.uri);\n if (handler !== null)\n loader = handler;\n }\n return this.detectSupport().then(function(isSupported) {\n if (isSupported)\n return parser.loadTextureImage(textureIndex, extension.source, loader);\n if (json.extensionsRequired && json.extensionsRequired.indexOf(name) >= 0) {\n throw new Error(\"THREE.GLTFLoader: WebP required by asset but unsupported.\");\n }\n return parser.loadTexture(textureIndex);\n });\n }\n detectSupport() {\n if (!this.isSupported) {\n this.isSupported = new Promise(function(resolve) {\n const image = new Image();\n image.src = \"data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA\";\n image.onload = image.onerror = function() {\n resolve(image.height === 1);\n };\n });\n }\n return this.isSupported;\n }\n}\nclass GLTFTextureAVIFExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.EXT_TEXTURE_AVIF;\n this.isSupported = null;\n }\n loadTexture(textureIndex) {\n const name = this.name;\n const parser = this.parser;\n const json = parser.json;\n const textureDef = json.textures[textureIndex];\n if (!textureDef.extensions || !textureDef.extensions[name]) {\n return null;\n }\n const extension = textureDef.extensions[name];\n const source = json.images[extension.source];\n let loader = parser.textureLoader;\n if (source.uri) {\n const handler = parser.options.manager.getHandler(source.uri);\n if (handler !== null)\n loader = handler;\n }\n return this.detectSupport().then(function(isSupported) {\n if (isSupported)\n return parser.loadTextureImage(textureIndex, extension.source, loader);\n if (json.extensionsRequired && json.extensionsRequired.indexOf(name) >= 0) {\n throw new Error(\"THREE.GLTFLoader: AVIF required by asset but unsupported.\");\n }\n return parser.loadTexture(textureIndex);\n });\n }\n detectSupport() {\n if (!this.isSupported) {\n this.isSupported = new Promise(function(resolve) {\n const image = new Image();\n image.src = \"data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=\";\n image.onload = image.onerror = function() {\n resolve(image.height === 1);\n };\n });\n }\n return this.isSupported;\n }\n}\nclass GLTFMeshoptCompression {\n constructor(parser) {\n this.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION;\n this.parser = parser;\n }\n loadBufferView(index) {\n const json = this.parser.json;\n const bufferView = json.bufferViews[index];\n if (bufferView.extensions && bufferView.extensions[this.name]) {\n const extensionDef = bufferView.extensions[this.name];\n const buffer = this.parser.getDependency(\"buffer\", extensionDef.buffer);\n const decoder = this.parser.options.meshoptDecoder;\n if (!decoder || !decoder.supported) {\n if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) {\n throw new Error(\"THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files\");\n } else {\n return null;\n }\n }\n return buffer.then(function(res) {\n const byteOffset = extensionDef.byteOffset || 0;\n const byteLength = extensionDef.byteLength || 0;\n const count = extensionDef.count;\n const stride = extensionDef.byteStride;\n const source = new Uint8Array(res, byteOffset, byteLength);\n if (decoder.decodeGltfBufferAsync) {\n return decoder.decodeGltfBufferAsync(count, stride, source, extensionDef.mode, extensionDef.filter).then(function(res2) {\n return res2.buffer;\n });\n } else {\n return decoder.ready.then(function() {\n const result = new ArrayBuffer(count * stride);\n decoder.decodeGltfBuffer(\n new Uint8Array(result),\n count,\n stride,\n source,\n extensionDef.mode,\n extensionDef.filter\n );\n return result;\n });\n }\n });\n } else {\n return null;\n }\n }\n}\nclass GLTFMeshGpuInstancing {\n constructor(parser) {\n this.name = EXTENSIONS.EXT_MESH_GPU_INSTANCING;\n this.parser = parser;\n }\n createNodeMesh(nodeIndex) {\n const json = this.parser.json;\n const nodeDef = json.nodes[nodeIndex];\n if (!nodeDef.extensions || !nodeDef.extensions[this.name] || nodeDef.mesh === void 0) {\n return null;\n }\n const meshDef = json.meshes[nodeDef.mesh];\n for (const primitive of meshDef.primitives) {\n if (primitive.mode !== WEBGL_CONSTANTS.TRIANGLES && primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_STRIP && primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_FAN && primitive.mode !== void 0) {\n return null;\n }\n }\n const extensionDef = nodeDef.extensions[this.name];\n const attributesDef = extensionDef.attributes;\n const pending = [];\n const attributes = {};\n for (const key in attributesDef) {\n pending.push(\n this.parser.getDependency(\"accessor\", attributesDef[key]).then((accessor) => {\n attributes[key] = accessor;\n return attributes[key];\n })\n );\n }\n if (pending.length < 1) {\n return null;\n }\n pending.push(this.parser.createNodeMesh(nodeIndex));\n return Promise.all(pending).then((results) => {\n const nodeObject = results.pop();\n const meshes = nodeObject.isGroup ? nodeObject.children : [nodeObject];\n const count = results[0].count;\n const instancedMeshes = [];\n for (const mesh of meshes) {\n const m = new Matrix4();\n const p = new Vector3();\n const q = new Quaternion();\n const s = new Vector3(1, 1, 1);\n const instancedMesh = new InstancedMesh(mesh.geometry, mesh.material, count);\n for (let i = 0; i < count; i++) {\n if (attributes.TRANSLATION) {\n p.fromBufferAttribute(attributes.TRANSLATION, i);\n }\n if (attributes.ROTATION) {\n q.fromBufferAttribute(attributes.ROTATION, i);\n }\n if (attributes.SCALE) {\n s.fromBufferAttribute(attributes.SCALE, i);\n }\n instancedMesh.setMatrixAt(i, m.compose(p, q, s));\n }\n for (const attributeName in attributes) {\n if (attributeName === \"_COLOR_0\") {\n const attr = attributes[attributeName];\n instancedMesh.instanceColor = new InstancedBufferAttribute(attr.array, attr.itemSize, attr.normalized);\n } else if (attributeName !== \"TRANSLATION\" && attributeName !== \"ROTATION\" && attributeName !== \"SCALE\") {\n mesh.geometry.setAttribute(attributeName, attributes[attributeName]);\n }\n }\n Object3D.prototype.copy.call(instancedMesh, mesh);\n this.parser.assignFinalMaterial(instancedMesh);\n instancedMeshes.push(instancedMesh);\n }\n if (nodeObject.isGroup) {\n nodeObject.clear();\n nodeObject.add(...instancedMeshes);\n return nodeObject;\n }\n return instancedMeshes[0];\n });\n }\n}\nconst BINARY_EXTENSION_HEADER_MAGIC = \"glTF\";\nconst BINARY_EXTENSION_HEADER_LENGTH = 12;\nconst BINARY_EXTENSION_CHUNK_TYPES = { JSON: 1313821514, BIN: 5130562 };\nclass GLTFBinaryExtension {\n constructor(data) {\n this.name = EXTENSIONS.KHR_BINARY_GLTF;\n this.content = null;\n this.body = null;\n const headerView = new DataView(data, 0, BINARY_EXTENSION_HEADER_LENGTH);\n this.header = {\n magic: decodeText(new Uint8Array(data.slice(0, 4))),\n version: headerView.getUint32(4, true),\n length: headerView.getUint32(8, true)\n };\n if (this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC) {\n throw new Error(\"THREE.GLTFLoader: Unsupported glTF-Binary header.\");\n } else if (this.header.version < 2) {\n throw new Error(\"THREE.GLTFLoader: Legacy binary file detected.\");\n }\n const chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH;\n const chunkView = new DataView(data, BINARY_EXTENSION_HEADER_LENGTH);\n let chunkIndex = 0;\n while (chunkIndex < chunkContentsLength) {\n const chunkLength = chunkView.getUint32(chunkIndex, true);\n chunkIndex += 4;\n const chunkType = chunkView.getUint32(chunkIndex, true);\n chunkIndex += 4;\n if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON) {\n const contentArray = new Uint8Array(data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength);\n this.content = decodeText(contentArray);\n } else if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN) {\n const byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;\n this.body = data.slice(byteOffset, byteOffset + chunkLength);\n }\n chunkIndex += chunkLength;\n }\n if (this.content === null) {\n throw new Error(\"THREE.GLTFLoader: JSON content not found.\");\n }\n }\n}\nclass GLTFDracoMeshCompressionExtension {\n constructor(json, dracoLoader) {\n if (!dracoLoader) {\n throw new Error(\"THREE.GLTFLoader: No DRACOLoader instance provided.\");\n }\n this.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;\n this.json = json;\n this.dracoLoader = dracoLoader;\n this.dracoLoader.preload();\n }\n decodePrimitive(primitive, parser) {\n const json = this.json;\n const dracoLoader = this.dracoLoader;\n const bufferViewIndex = primitive.extensions[this.name].bufferView;\n const gltfAttributeMap = primitive.extensions[this.name].attributes;\n const threeAttributeMap = {};\n const attributeNormalizedMap = {};\n const attributeTypeMap = {};\n for (const attributeName in gltfAttributeMap) {\n const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase();\n threeAttributeMap[threeAttributeName] = gltfAttributeMap[attributeName];\n }\n for (const attributeName in primitive.attributes) {\n const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase();\n if (gltfAttributeMap[attributeName] !== void 0) {\n const accessorDef = json.accessors[primitive.attributes[attributeName]];\n const componentType = WEBGL_COMPONENT_TYPES[accessorDef.componentType];\n attributeTypeMap[threeAttributeName] = componentType.name;\n attributeNormalizedMap[threeAttributeName] = accessorDef.normalized === true;\n }\n }\n return parser.getDependency(\"bufferView\", bufferViewIndex).then(function(bufferView) {\n return new Promise(function(resolve, reject) {\n dracoLoader.decodeDracoFile(\n bufferView,\n function(geometry) {\n for (const attributeName in geometry.attributes) {\n const attribute = geometry.attributes[attributeName];\n const normalized = attributeNormalizedMap[attributeName];\n if (normalized !== void 0)\n attribute.normalized = normalized;\n }\n resolve(geometry);\n },\n threeAttributeMap,\n attributeTypeMap,\n LinearSRGBColorSpace,\n reject\n );\n });\n });\n }\n}\nclass GLTFTextureTransformExtension {\n constructor() {\n this.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;\n }\n extendTexture(texture, transform) {\n if ((transform.texCoord === void 0 || transform.texCoord === texture.channel) && transform.offset === void 0 && transform.rotation === void 0 && transform.scale === void 0) {\n return texture;\n }\n texture = texture.clone();\n if (transform.texCoord !== void 0) {\n texture.channel = transform.texCoord;\n }\n if (transform.offset !== void 0) {\n texture.offset.fromArray(transform.offset);\n }\n if (transform.rotation !== void 0) {\n texture.rotation = transform.rotation;\n }\n if (transform.scale !== void 0) {\n texture.repeat.fromArray(transform.scale);\n }\n texture.needsUpdate = true;\n return texture;\n }\n}\nclass GLTFMeshQuantizationExtension {\n constructor() {\n this.name = EXTENSIONS.KHR_MESH_QUANTIZATION;\n }\n}\nclass GLTFCubicSplineInterpolant extends Interpolant {\n constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) {\n super(parameterPositions, sampleValues, sampleSize, resultBuffer);\n }\n copySampleValue_(index) {\n const result = this.resultBuffer, values = this.sampleValues, valueSize = this.valueSize, offset = index * valueSize * 3 + valueSize;\n for (let i = 0; i !== valueSize; i++) {\n result[i] = values[offset + i];\n }\n return result;\n }\n interpolate_(i1, t0, t, t1) {\n const result = this.resultBuffer;\n const values = this.sampleValues;\n const stride = this.valueSize;\n const stride2 = stride * 2;\n const stride3 = stride * 3;\n const td = t1 - t0;\n const p = (t - t0) / td;\n const pp = p * p;\n const ppp = pp * p;\n const offset1 = i1 * stride3;\n const offset0 = offset1 - stride3;\n const s2 = -2 * ppp + 3 * pp;\n const s3 = ppp - pp;\n const s0 = 1 - s2;\n const s1 = s3 - pp + p;\n for (let i = 0; i !== stride; i++) {\n const p0 = values[offset0 + i + stride];\n const m0 = values[offset0 + i + stride2] * td;\n const p1 = values[offset1 + i + stride];\n const m1 = values[offset1 + i] * td;\n result[i] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;\n }\n return result;\n }\n}\nconst _q = /* @__PURE__ */ new Quaternion();\nclass GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant {\n interpolate_(i1, t0, t, t1) {\n const result = super.interpolate_(i1, t0, t, t1);\n _q.fromArray(result).normalize().toArray(result);\n return result;\n }\n}\nconst WEBGL_CONSTANTS = {\n FLOAT: 5126,\n //FLOAT_MAT2: 35674,\n FLOAT_MAT3: 35675,\n FLOAT_MAT4: 35676,\n FLOAT_VEC2: 35664,\n FLOAT_VEC3: 35665,\n FLOAT_VEC4: 35666,\n LINEAR: 9729,\n REPEAT: 10497,\n SAMPLER_2D: 35678,\n POINTS: 0,\n LINES: 1,\n LINE_LOOP: 2,\n LINE_STRIP: 3,\n TRIANGLES: 4,\n TRIANGLE_STRIP: 5,\n TRIANGLE_FAN: 6,\n UNSIGNED_BYTE: 5121,\n UNSIGNED_SHORT: 5123\n};\nconst WEBGL_COMPONENT_TYPES = {\n 5120: Int8Array,\n 5121: Uint8Array,\n 5122: Int16Array,\n 5123: Uint16Array,\n 5125: Uint32Array,\n 5126: Float32Array\n};\nconst WEBGL_FILTERS = {\n 9728: NearestFilter,\n 9729: LinearFilter,\n 9984: NearestMipmapNearestFilter,\n 9985: LinearMipmapNearestFilter,\n 9986: NearestMipmapLinearFilter,\n 9987: LinearMipmapLinearFilter\n};\nconst WEBGL_WRAPPINGS = {\n 33071: ClampToEdgeWrapping,\n 33648: MirroredRepeatWrapping,\n 10497: RepeatWrapping\n};\nconst WEBGL_TYPE_SIZES = {\n SCALAR: 1,\n VEC2: 2,\n VEC3: 3,\n VEC4: 4,\n MAT2: 4,\n MAT3: 9,\n MAT4: 16\n};\nconst ATTRIBUTES = {\n POSITION: \"position\",\n NORMAL: \"normal\",\n TANGENT: \"tangent\",\n // uv => uv1, 4 uv channels\n // https://github.com/mrdoob/three.js/pull/25943\n // https://github.com/mrdoob/three.js/pull/25788\n ...version >= 152 ? {\n TEXCOORD_0: \"uv\",\n TEXCOORD_1: \"uv1\",\n TEXCOORD_2: \"uv2\",\n TEXCOORD_3: \"uv3\"\n } : {\n TEXCOORD_0: \"uv\",\n TEXCOORD_1: \"uv2\"\n },\n COLOR_0: \"color\",\n WEIGHTS_0: \"skinWeight\",\n JOINTS_0: \"skinIndex\"\n};\nconst PATH_PROPERTIES = {\n scale: \"scale\",\n translation: \"position\",\n rotation: \"quaternion\",\n weights: \"morphTargetInfluences\"\n};\nconst INTERPOLATION = {\n CUBICSPLINE: void 0,\n // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each\n // keyframe track will be initialized with a default interpolation type, then modified.\n LINEAR: InterpolateLinear,\n STEP: InterpolateDiscrete\n};\nconst ALPHA_MODES = {\n OPAQUE: \"OPAQUE\",\n MASK: \"MASK\",\n BLEND: \"BLEND\"\n};\nfunction createDefaultMaterial(cache) {\n if (cache[\"DefaultMaterial\"] === void 0) {\n cache[\"DefaultMaterial\"] = new MeshStandardMaterial({\n color: 16777215,\n emissive: 0,\n metalness: 1,\n roughness: 1,\n transparent: false,\n depthTest: true,\n side: FrontSide\n });\n }\n return cache[\"DefaultMaterial\"];\n}\nfunction addUnknownExtensionsToUserData(knownExtensions, object, objectDef) {\n for (const name in objectDef.extensions) {\n if (knownExtensions[name] === void 0) {\n object.userData.gltfExtensions = object.userData.gltfExtensions || {};\n object.userData.gltfExtensions[name] = objectDef.extensions[name];\n }\n }\n}\nfunction assignExtrasToUserData(object, gltfDef) {\n if (gltfDef.extras !== void 0) {\n if (typeof gltfDef.extras === \"object\") {\n Object.assign(object.userData, gltfDef.extras);\n } else {\n console.warn(\"THREE.GLTFLoader: Ignoring primitive type .extras, \" + gltfDef.extras);\n }\n }\n}\nfunction addMorphTargets(geometry, targets, parser) {\n let hasMorphPosition = false;\n let hasMorphNormal = false;\n let hasMorphColor = false;\n for (let i = 0, il = targets.length; i < il; i++) {\n const target = targets[i];\n if (target.POSITION !== void 0)\n hasMorphPosition = true;\n if (target.NORMAL !== void 0)\n hasMorphNormal = true;\n if (target.COLOR_0 !== void 0)\n hasMorphColor = true;\n if (hasMorphPosition && hasMorphNormal && hasMorphColor)\n break;\n }\n if (!hasMorphPosition && !hasMorphNormal && !hasMorphColor)\n return Promise.resolve(geometry);\n const pendingPositionAccessors = [];\n const pendingNormalAccessors = [];\n const pendingColorAccessors = [];\n for (let i = 0, il = targets.length; i < il; i++) {\n const target = targets[i];\n if (hasMorphPosition) {\n const pendingAccessor = target.POSITION !== void 0 ? parser.getDependency(\"accessor\", target.POSITION) : geometry.attributes.position;\n pendingPositionAccessors.push(pendingAccessor);\n }\n if (hasMorphNormal) {\n const pendingAccessor = target.NORMAL !== void 0 ? parser.getDependency(\"accessor\", target.NORMAL) : geometry.attributes.normal;\n pendingNormalAccessors.push(pendingAccessor);\n }\n if (hasMorphColor) {\n const pendingAccessor = target.COLOR_0 !== void 0 ? parser.getDependency(\"accessor\", target.COLOR_0) : geometry.attributes.color;\n pendingColorAccessors.push(pendingAccessor);\n }\n }\n return Promise.all([\n Promise.all(pendingPositionAccessors),\n Promise.all(pendingNormalAccessors),\n Promise.all(pendingColorAccessors)\n ]).then(function(accessors) {\n const morphPositions = accessors[0];\n const morphNormals = accessors[1];\n const morphColors = accessors[2];\n if (hasMorphPosition)\n geometry.morphAttributes.position = morphPositions;\n if (hasMorphNormal)\n geometry.morphAttributes.normal = morphNormals;\n if (hasMorphColor)\n geometry.morphAttributes.color = morphColors;\n geometry.morphTargetsRelative = true;\n return geometry;\n });\n}\nfunction updateMorphTargets(mesh, meshDef) {\n mesh.updateMorphTargets();\n if (meshDef.weights !== void 0) {\n for (let i = 0, il = meshDef.weights.length; i < il; i++) {\n mesh.morphTargetInfluences[i] = meshDef.weights[i];\n }\n }\n if (meshDef.extras && Array.isArray(meshDef.extras.targetNames)) {\n const targetNames = meshDef.extras.targetNames;\n if (mesh.morphTargetInfluences.length === targetNames.length) {\n mesh.morphTargetDictionary = {};\n for (let i = 0, il = targetNames.length; i < il; i++) {\n mesh.morphTargetDictionary[targetNames[i]] = i;\n }\n } else {\n console.warn(\"THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.\");\n }\n }\n}\nfunction createPrimitiveKey(primitiveDef) {\n let geometryKey;\n const dracoExtension = primitiveDef.extensions && primitiveDef.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION];\n if (dracoExtension) {\n geometryKey = \"draco:\" + dracoExtension.bufferView + \":\" + dracoExtension.indices + \":\" + createAttributesKey(dracoExtension.attributes);\n } else {\n geometryKey = primitiveDef.indices + \":\" + createAttributesKey(primitiveDef.attributes) + \":\" + primitiveDef.mode;\n }\n if (primitiveDef.targets !== void 0) {\n for (let i = 0, il = primitiveDef.targets.length; i < il; i++) {\n geometryKey += \":\" + createAttributesKey(primitiveDef.targets[i]);\n }\n }\n return geometryKey;\n}\nfunction createAttributesKey(attributes) {\n let attributesKey = \"\";\n const keys = Object.keys(attributes).sort();\n for (let i = 0, il = keys.length; i < il; i++) {\n attributesKey += keys[i] + \":\" + attributes[keys[i]] + \";\";\n }\n return attributesKey;\n}\nfunction getNormalizedComponentScale(constructor) {\n switch (constructor) {\n case Int8Array:\n return 1 / 127;\n case Uint8Array:\n return 1 / 255;\n case Int16Array:\n return 1 / 32767;\n case Uint16Array:\n return 1 / 65535;\n default:\n throw new Error(\"THREE.GLTFLoader: Unsupported normalized accessor component type.\");\n }\n}\nfunction getImageURIMimeType(uri) {\n if (uri.search(/\\.jpe?g($|\\?)/i) > 0 || uri.search(/^data\\:image\\/jpeg/) === 0)\n return \"image/jpeg\";\n if (uri.search(/\\.webp($|\\?)/i) > 0 || uri.search(/^data\\:image\\/webp/) === 0)\n return \"image/webp\";\n return \"image/png\";\n}\nconst _identityMatrix = /* @__PURE__ */ new Matrix4();\nclass GLTFParser {\n constructor(json = {}, options = {}) {\n this.json = json;\n this.extensions = {};\n this.plugins = {};\n this.options = options;\n this.cache = new GLTFRegistry();\n this.associations = /* @__PURE__ */ new Map();\n this.primitiveCache = {};\n this.nodeCache = {};\n this.meshCache = { refs: {}, uses: {} };\n this.cameraCache = { refs: {}, uses: {} };\n this.lightCache = { refs: {}, uses: {} };\n this.sourceCache = {};\n this.textureCache = {};\n this.nodeNamesUsed = {};\n let isSafari = false;\n let isFirefox = false;\n let firefoxVersion = -1;\n if (typeof navigator !== \"undefined\" && typeof navigator.userAgent !== \"undefined\") {\n isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent) === true;\n isFirefox = navigator.userAgent.indexOf(\"Firefox\") > -1;\n firefoxVersion = isFirefox ? navigator.userAgent.match(/Firefox\\/([0-9]+)\\./)[1] : -1;\n }\n if (typeof createImageBitmap === \"undefined\" || isSafari || isFirefox && firefoxVersion < 98) {\n this.textureLoader = new TextureLoader(this.options.manager);\n } else {\n this.textureLoader = new ImageBitmapLoader(this.options.manager);\n }\n this.textureLoader.setCrossOrigin(this.options.crossOrigin);\n this.textureLoader.setRequestHeader(this.options.requestHeader);\n this.fileLoader = new FileLoader(this.options.manager);\n this.fileLoader.setResponseType(\"arraybuffer\");\n if (this.options.crossOrigin === \"use-credentials\") {\n this.fileLoader.setWithCredentials(true);\n }\n }\n setExtensions(extensions) {\n this.extensions = extensions;\n }\n setPlugins(plugins) {\n this.plugins = plugins;\n }\n parse(onLoad, onError) {\n const parser = this;\n const json = this.json;\n const extensions = this.extensions;\n this.cache.removeAll();\n this.nodeCache = {};\n this._invokeAll(function(ext) {\n return ext._markDefs && ext._markDefs();\n });\n Promise.all(\n this._invokeAll(function(ext) {\n return ext.beforeRoot && ext.beforeRoot();\n })\n ).then(function() {\n return Promise.all([\n parser.getDependencies(\"scene\"),\n parser.getDependencies(\"animation\"),\n parser.getDependencies(\"camera\")\n ]);\n }).then(function(dependencies) {\n const result = {\n scene: dependencies[0][json.scene || 0],\n scenes: dependencies[0],\n animations: dependencies[1],\n cameras: dependencies[2],\n asset: json.asset,\n parser,\n userData: {}\n };\n addUnknownExtensionsToUserData(extensions, result, json);\n assignExtrasToUserData(result, json);\n return Promise.all(\n parser._invokeAll(function(ext) {\n return ext.afterRoot && ext.afterRoot(result);\n })\n ).then(function() {\n for (const scene of result.scenes) {\n scene.updateMatrixWorld();\n }\n onLoad(result);\n });\n }).catch(onError);\n }\n /**\n * Marks the special nodes/meshes in json for efficient parse.\n */\n _markDefs() {\n const nodeDefs = this.json.nodes || [];\n const skinDefs = this.json.skins || [];\n const meshDefs = this.json.meshes || [];\n for (let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex++) {\n const joints = skinDefs[skinIndex].joints;\n for (let i = 0, il = joints.length; i < il; i++) {\n nodeDefs[joints[i]].isBone = true;\n }\n }\n for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) {\n const nodeDef = nodeDefs[nodeIndex];\n if (nodeDef.mesh !== void 0) {\n this._addNodeRef(this.meshCache, nodeDef.mesh);\n if (nodeDef.skin !== void 0) {\n meshDefs[nodeDef.mesh].isSkinnedMesh = true;\n }\n }\n if (nodeDef.camera !== void 0) {\n this._addNodeRef(this.cameraCache, nodeDef.camera);\n }\n }\n }\n /**\n * Counts references to shared node / Object3D resources. These resources\n * can be reused, or \"instantiated\", at multiple nodes in the scene\n * hierarchy. Mesh, Camera, and Light instances are instantiated and must\n * be marked. Non-scenegraph resources (like Materials, Geometries, and\n * Textures) can be reused directly and are not marked here.\n *\n * Example: CesiumMilkTruck sample model reuses \"Wheel\" meshes.\n */\n _addNodeRef(cache, index) {\n if (index === void 0)\n return;\n if (cache.refs[index] === void 0) {\n cache.refs[index] = cache.uses[index] = 0;\n }\n cache.refs[index]++;\n }\n /** Returns a reference to a shared resource, cloning it if necessary. */\n _getNodeRef(cache, index, object) {\n if (cache.refs[index] <= 1)\n return object;\n const ref = object.clone();\n const updateMappings = (original, clone) => {\n const mappings = this.associations.get(original);\n if (mappings != null) {\n this.associations.set(clone, mappings);\n }\n for (const [i, child] of original.children.entries()) {\n updateMappings(child, clone.children[i]);\n }\n };\n updateMappings(object, ref);\n ref.name += \"_instance_\" + cache.uses[index]++;\n return ref;\n }\n _invokeOne(func) {\n const extensions = Object.values(this.plugins);\n extensions.push(this);\n for (let i = 0; i < extensions.length; i++) {\n const result = func(extensions[i]);\n if (result)\n return result;\n }\n return null;\n }\n _invokeAll(func) {\n const extensions = Object.values(this.plugins);\n extensions.unshift(this);\n const pending = [];\n for (let i = 0; i < extensions.length; i++) {\n const result = func(extensions[i]);\n if (result)\n pending.push(result);\n }\n return pending;\n }\n /**\n * Requests the specified dependency asynchronously, with caching.\n * @param {string} type\n * @param {number} index\n * @return {Promise<Object3D|Material|THREE.Texture|AnimationClip|ArrayBuffer|Object>}\n */\n getDependency(type, index) {\n const cacheKey = type + \":\" + index;\n let dependency = this.cache.get(cacheKey);\n if (!dependency) {\n switch (type) {\n case \"scene\":\n dependency = this.loadScene(index);\n break;\n case \"node\":\n dependency = this._invokeOne(function(ext) {\n return ext.loadNode && ext.loadNode(index);\n });\n break;\n case \"mesh\":\n dependency = this._invokeOne(function(ext) {\n return ext.loadMesh && ext.loadMesh(index);\n });\n break;\n case \"accessor\":\n dependency = this.loadAccessor(index);\n break;\n case \"bufferView\":\n dependency = this._invokeOne(function(ext) {\n return ext.loadBufferView && ext.loadBufferView(index);\n });\n break;\n case \"buffer\":\n dependency = this.loadBuffer(index);\n break;\n case \"material\":\n dependency = this._invokeOne(function(ext) {\n return ext.loadMaterial && ext.loadMaterial(index);\n });\n break;\n case \"texture\":\n dependency = this._invokeOne(function(ext) {\n return ext.loadTexture && ext.loadTexture(index);\n });\n break;\n case \"skin\":\n dependency = this.loadSkin(index);\n break;\n case \"animation\":\n dependency = this._invokeOne(function(ext) {\n return ext.loadAnimation && ext.loadAnimation(index);\n });\n break;\n case \"camera\":\n dependency = this.loadCamera(index);\n break;\n default:\n dependency = this._invokeOne(function(ext) {\n return ext != this && ext.getDependency && ext.getDependency(type, index);\n });\n if (!dependency) {\n throw new Error(\"Unknown type: \" + type);\n }\n break;\n }\n this.cache.add(cacheKey, dependency);\n }\n return dependency;\n }\n /**\n * Requests all dependencies of the specified type asynchronously, with caching.\n * @param {string} type\n * @return {Promise<Array<Object>>}\n */\n getDependencies(type) {\n let dependencies = this.cache.get(type);\n if (!dependencies) {\n const parser = this;\n const defs = this.json[type + (type === \"mesh\" ? \"es\" : \"s\")] || [];\n dependencies = Promise.all(\n defs.map(function(def, index) {\n return parser.getDependency(type, index);\n })\n );\n this.cache.add(type, dependencies);\n }\n return dependencies;\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n * @param {number} bufferIndex\n * @return {Promise<ArrayBuffer>}\n */\n loadBuffer(bufferIndex) {\n const bufferDef = this.json.buffers[bufferIndex];\n const loader = this.fileLoader;\n if (bufferDef.type && bufferDef.type !== \"arraybuffer\") {\n throw new Error(\"THREE.GLTFLoader: \" + bufferDef.type + \" buffer type is not supported.\");\n }\n if (bufferDef.uri === void 0 && bufferIndex === 0) {\n return Promise.resolve(this.extensions[EXTENSIONS.KHR_BINARY_GLTF].body);\n }\n const options = this.options;\n return new Promise(function(resolve, reject) {\n loader.load(LoaderUtils.resolveURL(bufferDef.uri, options.path), resolve, void 0, function() {\n reject(new Error('THREE.GLTFLoader: Failed to load buffer \"' + bufferDef.uri + '\".'));\n });\n });\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n * @param {number} bufferViewIndex\n * @return {Promise<ArrayBuffer>}\n */\n loadBufferView(bufferViewIndex) {\n const bufferViewDef = this.json.bufferViews[bufferViewIndex];\n return this.getDependency(\"buffer\", bufferViewDef.buffer).then(function(buffer) {\n const byteLength = bufferViewDef.byteLength || 0;\n const byteOffset = bufferViewDef.byteOffset || 0;\n return buffer.slice(byteOffset, byteOffset + byteLength);\n });\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors\n * @param {number} accessorIndex\n * @return {Promise<BufferAttribute|InterleavedBufferAttribute>}\n */\n loadAccessor(accessorIndex) {\n const parser = this;\n const json = this.json;\n const accessorDef = this.json.accessors[accessorIndex];\n if (accessorDef.bufferView === void 0 && accessorDef.sparse === void 0) {\n const itemSize = WEBGL_TYPE_SIZES[accessorDef.type];\n const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType];\n const normalized = accessorDef.normalized === true;\n const array = new TypedArray(accessorDef.count * itemSize);\n return Promise.resolve(new BufferAttribute(array, itemSize, normalized));\n }\n const pendingBufferViews = [];\n if (accessorDef.bufferView !== void 0) {\n pendingBufferViews.push(this.getDependency(\"bufferView\", accessorDef.bufferView));\n } else {\n pendingBufferViews.push(null);\n }\n if (accessorDef.sparse !== void 0) {\n pendingBufferViews.push(this.getDependency(\"bufferView\", accessorDef.sparse.indices.bufferView));\n pendingBufferViews.push(this.getDependency(\"bufferView\", accessorDef.sparse.values.bufferView));\n }\n return Promise.all(pendingBufferViews).then(function(bufferViews) {\n const bufferView = bufferViews[0];\n const itemSize = WEBGL_TYPE_SIZES[accessorDef.type];\n const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType];\n const elementBytes = TypedArray.BYTES_PER_ELEMENT;\n const itemBytes = elementBytes * itemSize;\n const byteOffset = accessorDef.byteOffset || 0;\n const byteStride = accessorDef.bufferView !== void 0 ? json.bufferViews[accessorDef.bufferView].byteStride : void 0;\n const normalized = accessorDef.normalized === true;\n let array, bufferAttribute;\n if (byteStride && byteStride !== itemBytes) {\n const ibSlice = Math.floor(byteOffset / byteStride);\n const ibCacheKey = \"InterleavedBuffer:\" + accessorDef.bufferView + \":\" + accessorDef.componentType + \":\" + ibSlice + \":\" + accessorDef.count;\n let ib = parser.cache.get(ibCacheKey);\n if (!ib) {\n array = new TypedArray(bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes);\n ib = new InterleavedBuffer(array, byteStride / elementBytes);\n parser.cache.add(ibCacheKey, ib);\n }\n bufferAttribute = new InterleavedBufferAttribute(\n ib,\n itemSize,\n byteOffset % byteStride / elementBytes,\n normalized\n );\n } else {\n if (bufferView === null) {\n array = new TypedArray(accessorDef.count * itemSize);\n } else {\n array = new TypedArray(bufferView, byteOffset, accessorDef.count * itemSize);\n }\n bufferAttribute = new BufferAttribute(array, itemSize, normalized);\n }\n if (accessorDef.sparse !== void 0) {\n const itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;\n const TypedArrayIndices = WEBGL_COMPONENT_TYPES[accessorDef.sparse.indices.componentType];\n const byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;\n const byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;\n const sparseIndices = new TypedArrayIndices(\n bufferViews[1],\n byteOffsetIndices,\n accessorDef.sparse.count * itemSizeIndices\n );\n const sparseValues = new TypedArray(bufferViews[2], byteOffsetValues, accessorDef.sparse.count * itemSize);\n if (bufferView !== null) {\n bufferAttribute = new BufferAttribute(\n bufferAttribute.array.slice(),\n bufferAttribute.itemSize,\n bufferAttribute.normalized\n );\n }\n for (let i = 0, il = sparseIndices.length; i < il; i++) {\n const index = sparseIndices[i];\n bufferAttribute.setX(index, sparseValues[i * itemSize]);\n if (itemSize >= 2)\n bufferAttribute.setY(index, sparseValues[i * itemSize + 1]);\n if (itemSize >= 3)\n bufferAttribute.setZ(index, sparseValues[i * itemSize + 2]);\n if (itemSize >= 4)\n bufferAttribute.setW(index, sparseValues[i * itemSize + 3]);\n if (itemSize >= 5)\n throw new Error(\"THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.\");\n }\n }\n return bufferAttribute;\n });\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures\n * @param {number} textureIndex\n * @return {Promise<THREE.Texture|null>}\n */\n loadTexture(textureIndex) {\n const json = this.json;\n const options = this.options;\n const textureDef = json.textures[textureIndex];\n const sourceIndex = textureDef.source;\n const sourceDef = json.images[sourceIndex];\n let loader = this.textureLoader;\n if (sourceDef.uri) {\n const handler = options.manager.getHandler(sourceDef.uri);\n if (handler !== null)\n loader = handler;\n }\n return this.loadTextureImage(textureIndex, sourceIndex, loader);\n }\n loadTextureImage(textureIndex, sourceIndex, loader) {\n const parser = this;\n const json = this.json;\n const textureDef = json.textures[textureIndex];\n const sourceDef = json.images[sourceIndex];\n const cacheKey = (sourceDef.uri || sourceDef.bufferView) + \":\" + textureDef.sampler;\n if (this.textureCache[cacheKey]) {\n return this.textureCache[cacheKey];\n }\n const promise = this.loadImageSource(sourceIndex, loader).then(function(texture) {\n texture.flipY = false;\n texture.name = textureDef.name || sourceDef.name || \"\";\n if (texture.name === \"\" && typeof sourceDef.uri === \"string\" && sourceDef.uri.startsWith(\"data:image/\") === false) {\n texture.name = sourceDef.uri;\n }\n const samplers = json.samplers || {};\n const sampler = samplers[textureDef.sampler] || {};\n texture.magFilter = WEBGL_FILTERS[sampler.magFilter] || LinearFilter;\n texture.minFilter = WEBGL_FILTERS[sampler.minFilter] || LinearMipmapLinearFilter;\n texture.wrapS = WEBGL_WRAPPINGS[sampler.wrapS] || RepeatWrapping;\n texture.wrapT = WEBGL_WRAPPINGS[sampler.wrapT] || RepeatWrapping;\n parser.associations.set(texture, { textures: textureIndex });\n return texture;\n }).catch(function() {\n return null;\n });\n this.textureCache[cacheKey] = promise;\n return promise;\n }\n loadImageSource(sourceIndex, loader) {\n const parser = this;\n const json = this.json;\n const options = this.options;\n if (this.sourceCache[sourceIndex] !== void 0) {\n return this.sourceCache[sourceIndex].then((texture) => texture.clone());\n }\n const sourceDef = json.images[sourceIndex];\n const URL = self.URL || self.webkitURL;\n let sourceURI = sourceDef.uri || \"\";\n let isObjectURL = false;\n if (sourceDef.bufferView !== void 0) {\n sourceURI = parser.getDependency(\"bufferView\", sourceDef.bufferView).then(function(bufferView) {\n isObjectURL = true;\n const blob = new Blob([bufferView], { type: sourceDef.mimeType });\n sourceURI = URL.createObjectURL(blob);\n return sourceURI;\n });\n } else if (sourceDef.uri === void 0) {\n throw new Error(\"THREE.GLTFLoader: Image \" + sourceIndex + \" is missing URI and bufferView\");\n }\n const promise = Promise.resolve(sourceURI).then(function(sourceURI2) {\n return new Promise(function(resolve, reject) {\n let onLoad = resolve;\n if (loader.isImageBitmapLoader === true) {\n onLoad = function(imageBitmap) {\n const texture = new Texture(imageBitmap);\n texture.needsUpdate = true;\n resolve(texture);\n };\n }\n loader.load(LoaderUtils.resolveURL(sourceURI2, options.path), onLoad, void 0, reject);\n });\n }).then(function(texture) {\n if (isObjectURL === true) {\n URL.revokeObjectURL(sourceURI);\n }\n assignExtrasToUserData(texture, sourceDef);\n texture.userData.mimeType = sourceDef.mimeType || getImageURIMimeType(sourceDef.uri);\n return texture;\n }).catch(function(error) {\n console.error(\"THREE.GLTFLoader: Couldn't load texture\", sourceURI);\n throw error;\n });\n this.sourceCache[sourceIndex] = promise;\n return promise;\n }\n /**\n * Asynchronously assigns a texture to the given material parameters.\n * @param {Object} materialParams\n * @param {string} mapName\n * @param {Object} mapDef\n * @return {Promise<Texture>}\n */\n assignTexture(materialParams, mapName, mapDef, colorSpace) {\n const parser = this;\n return this.getDependency(\"texture\", mapDef.index).then(function(texture) {\n if (!texture)\n return null;\n if (mapDef.texCoord !== void 0 && mapDef.texCoord > 0) {\n texture = texture.clone();\n texture.channel = mapDef.texCoord;\n }\n if (parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM]) {\n const transform = mapDef.extensions !== void 0 ? mapDef.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM] : void 0;\n if (transform) {\n const gltfReference = parser.associations.get(texture);\n texture = parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM].extendTexture(texture, transform);\n parser.associations.set(texture, gltfReference);\n }\n }\n if (colorSpace !== void 0) {\n if (typeof colorSpace === \"number\")\n colorSpace = colorSpace === sRGBEncoding ? SRGBColorSpace : LinearSRGBColorSpace;\n if (\"colorSpace\" in texture)\n texture.colorSpace = colorSpace;\n else\n texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding;\n }\n materialParams[mapName] = texture;\n return texture;\n });\n }\n /**\n * Assigns final material to a Mesh, Line, or Points instance. The instance\n * already has a material (generated from the glTF material options alone)\n * but reuse of the same glTF material may require multiple threejs materials\n * to accommodate different primitive types, defines, etc. New materials will\n * be created if necessary, and reused from a cache.\n * @param {Object3D} mesh Mesh, Line, or Points instance.\n */\n assignFinalMaterial(mesh) {\n const geometry = mesh.geometry;\n let material = mesh.material;\n const useDerivativeTangents = geometry.attributes.tangent === void 0;\n const useVertexColors = geometry.attributes.color !== void 0;\n const useFlatShading = geometry.attributes.normal === void 0;\n if (mesh.isPoints) {\n const cacheKey = \"PointsMaterial:\" + material.uuid;\n let pointsMaterial = this.cache.get(cacheKey);\n if (!pointsMaterial) {\n pointsMaterial = new PointsMaterial();\n Material.prototype.copy.call(pointsMaterial, material);\n pointsMaterial.color.copy(material.color);\n pointsMaterial.map = material.map;\n pointsMaterial.sizeAttenuation = false;\n this.cache.add(cacheKey, pointsMaterial);\n }\n material = pointsMaterial;\n } else if (mesh.isLine) {\n const cacheKey = \"LineBasicMaterial:\" + material.uuid;\n let lineMaterial = this.cache.get(cacheKey);\n if (!lineMaterial) {\n lineMaterial = new LineBasicMaterial();\n Material.prototype.copy.call(lineMaterial, material);\n lineMaterial.color.copy(material.color);\n lineMaterial.map = material.map;\n this.cache.add(cacheKey, lineMaterial);\n }\n material = lineMaterial;\n }\n if (useDerivativeTangents || useVertexColors || useFlatShading) {\n let cacheKey = \"ClonedMaterial:\" + material.uuid + \":\";\n if (useDerivativeTangents)\n cacheKey += \"derivative-tangents:\";\n if (useVertexColors)\n cacheKey += \"vertex-colors:\";\n if (useFlatShading)\n cacheKey += \"flat-shading:\";\n let cachedMaterial = this.cache.get(cacheKey);\n if (!cachedMaterial) {\n cachedMaterial = material.clone();\n if (useVertexColors)\n cachedMaterial.vertexColors = true;\n if (useFlatShading)\n cachedMaterial.flatShading = true;\n if (useDerivativeTangents) {\n if (cachedMaterial.normalScale)\n cachedMaterial.normalScale.y *= -1;\n if (cachedMaterial.clearcoatNormalScale)\n cachedMaterial.clearcoatNormalScale.y *= -1;\n }\n this.cache.add(cacheKey, cachedMaterial);\n this.associations.set(cachedMaterial, this.associations.get(material));\n }\n material = cachedMaterial;\n }\n mesh.material = material;\n }\n getMaterialType() {\n return MeshStandardMaterial;\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials\n * @param {number} materialIndex\n * @return {Promise<Material>}\n */\n loadMaterial(materialIndex) {\n const parser = this;\n const json = this.json;\n const extensions = this.extensions;\n const materialDef = json.materials[materialIndex];\n let materialType;\n const materialParams = {};\n const materialExtensions = materialDef.extensions || {};\n const pending = [];\n if (materialExtensions[EXTENSIONS.KHR_MATERIALS_UNLIT]) {\n const kmuExtension = extensions[EXTENSIONS.KHR_MATERIALS_UNLIT];\n materialType = kmuExtension.getMaterialType();\n pending.push(kmuExtension.extendParams(materialParams, materialDef, parser));\n } else {\n const metallicRoughness = materialDef.pbrMetallicRoughness || {};\n materialParams.color = new Color(1, 1, 1);\n materialParams.opacity = 1;\n if (Array.isArray(metallicRoughness.baseColorFactor)) {\n const array = metallicRoughness.baseColorFactor;\n materialParams.color.setRGB(array[0], array[1], array[2], LinearSRGBColorSpace);\n materialParams.opacity = array[3];\n }\n if (metallicRoughness.baseColorTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"map\", metallicRoughness.baseColorTexture, SRGBColorSpace));\n }\n materialParams.metalness = metallicRoughness.metallicFactor !== void 0 ? metallicRoughness.metallicFactor : 1;\n materialParams.roughness = metallicRoughness.roughnessFactor !== void 0 ? metallicRoughness.roughnessFactor : 1;\n if (metallicRoughness.metallicRoughnessTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"metalnessMap\", metallicRoughness.metallicRoughnessTexture));\n pending.push(parser.assignTexture(materialParams, \"roughnessMap\", metallicRoughness.metallicRoughnessTexture));\n }\n materialType = this._invokeOne(function(ext) {\n return ext.getMaterialType && ext.getMaterialType(materialIndex);\n });\n pending.push(\n Promise.all(\n this._invokeAll(function(ext) {\n return ext.extendMaterialParams && ext.extendMaterialParams(materialIndex, materialParams);\n })\n )\n );\n }\n if (materialDef.doubleSided === true) {\n materialParams.side = DoubleSide;\n }\n const alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;\n if (alphaMode === ALPHA_MODES.BLEND) {\n materialParams.transparent = true;\n materialParams.depthWrite = false;\n } else {\n materialParams.transparent = false;\n if (alphaMode === ALPHA_MODES.MASK) {\n materialParams.alphaTest = materialDef.alphaCutoff !== void 0 ? materialDef.alphaCutoff : 0.5;\n }\n }\n if (materialDef.normalTexture !== void 0 && materialType !== MeshBasicMaterial) {\n pending.push(parser.assignTexture(materialParams, \"normalMap\", materialDef.normalTexture));\n materialParams.normalScale = new Vector2(1, 1);\n if (materialDef.normalTexture.scale !== void 0) {\n const scale = materialDef.normalTexture.scale;\n materialParams.normalScale.set(scale, scale);\n }\n }\n if (materialDef.occlusionTexture !== void 0 && materialType !== MeshBasicMaterial) {\n pending.push(parser.assignTexture(materialParams, \"aoMap\", materialDef.occlusionTexture));\n if (materialDef.occlusionTexture.strength !== void 0) {\n materialParams.aoMapIntensity = materialDef.occlusionTexture.strength;\n }\n }\n if (materialDef.emissiveFactor !== void 0 && materialType !== MeshBasicMaterial) {\n const emissiveFactor = materialDef.emissiveFactor;\n materialParams.emissive = new Color().setRGB(\n emissiveFactor[0],\n emissiveFactor[1],\n emissiveFactor[2],\n LinearSRGBColorSpace\n );\n }\n if (materialDef.emissiveTexture !== void 0 && materialType !== MeshBasicMaterial) {\n pending.push(parser.assignTexture(materialParams, \"emissiveMap\", materialDef.emissiveTexture, SRGBColorSpace));\n }\n return Promise.all(pending).then(function() {\n const material = new materialType(materialParams);\n if (materialDef.name)\n material.name = materialDef.name;\n assignExtrasToUserData(material, materialDef);\n parser.associations.set(material, { materials: materialIndex });\n if (materialDef.extensions)\n addUnknownExtensionsToUserData(extensions, material, materialDef);\n return material;\n });\n }\n /** When Object3D instances are targeted by animation, they need unique names. */\n createUniqueName(originalName) {\n const sanitizedName = PropertyBinding.sanitizeNodeName(originalName || \"\");\n if (sanitizedName in this.nodeNamesUsed) {\n return sanitizedName + \"_\" + ++this.nodeNamesUsed[sanitizedName];\n } else {\n this.nodeNamesUsed[sanitizedName] = 0;\n return sanitizedName;\n }\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry\n *\n * Creates BufferGeometries from primitives.\n *\n * @param {Array<GLTF.Primitive>} primitives\n * @return {Promise<Array<BufferGeometry>>}\n */\n loadGeometries(primitives) {\n const parser = this;\n const extensions = this.extensions;\n const cache = this.primitiveCache;\n function createDracoPrimitive(primitive) {\n return extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(primitive, parser).then(function(geometry) {\n return addPrimitiveAttributes(geometry, primitive, parser);\n });\n }\n const pending = [];\n for (let i = 0, il = primitives.length; i < il; i++) {\n const primitive = primitives[i];\n const cacheKey = createPrimitiveKey(primitive);\n const cached = cache[cacheKey];\n if (cached) {\n pending.push(cached.promise);\n } else {\n let geometryPromise;\n if (primitive.extensions && primitive.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION]) {\n geometryPromise = createDracoPrimitive(primitive);\n } else {\n geometryPromise = addPrimitiveAttributes(new BufferGeometry(), primitive, parser);\n }\n cache[cacheKey] = { primitive, promise: geometryPromise };\n pending.push(geometryPromise);\n }\n }\n return Promise.all(pending);\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes\n * @param {number} meshIndex\n * @return {Promise<Group|Mesh|SkinnedMesh>}\n */\n loadMesh(meshIndex) {\n const parser = this;\n const json = this.json;\n const extensions = this.extensions;\n const meshDef = json.meshes[meshIndex];\n const primitives = meshDef.primitives;\n const pending = [];\n for (let i = 0, il = primitives.length; i < il; i++) {\n const material = primitives[i].material === void 0 ? createDefaultMaterial(this.cache) : this.getDependency(\"material\", primitives[i].material);\n pending.push(material);\n }\n pending.push(parser.loadGeometries(primitives));\n return Promise.all(pending).then(function(results) {\n const materials = results.slice(0, results.length - 1);\n const geometries = results[results.length - 1];\n const meshes = [];\n for (let i = 0, il = geometries.length; i < il; i++) {\n const geometry = geometries[i];\n const primitive = primitives[i];\n let mesh;\n const material = materials[i];\n if (primitive.mode === WEBGL_CONSTANTS.TRIANGLES || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN || primitive.mode === void 0) {\n mesh = meshDef.isSkinnedMesh === true ? new SkinnedMesh(geometry, material) : new Mesh(geometry, material);\n if (mesh.isSkinnedMesh === true) {\n mesh.normalizeSkinWeights();\n }\n if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP) {\n mesh.geometry = toTrianglesDrawMode(mesh.geometry, TriangleStripDrawMode);\n } else if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN) {\n mesh.geometry = toTrianglesDrawMode(mesh.geometry, TriangleFanDrawMode);\n }\n } else if (primitive.mode === WEBGL_CONSTANTS.LINES) {\n mesh = new LineSegments(geometry, material);\n } else if (primitive.mode === WEBGL_CONSTANTS.LINE_STRIP) {\n mesh = new Line(geometry, material);\n } else if (primitive.mode === WEBGL_CONSTANTS.LINE_LOOP) {\n mesh = new LineLoop(geometry, material);\n } else if (primitive.mode === WEBGL_CONSTANTS.POINTS) {\n mesh = new Points(geometry, material);\n } else {\n throw new Error(\"THREE.GLTFLoader: Primitive mode unsupported: \" + primitive.mode);\n }\n if (Object.keys(mesh.geometry.morphAttributes).length > 0) {\n updateMorphTargets(mesh, meshDef);\n }\n mesh.name = parser.createUniqueName(meshDef.name || \"mesh_\" + meshIndex);\n assignExtrasToUserData(mesh, meshDef);\n if (primitive.extensions)\n addUnknownExtensionsToUserData(extensions, mesh, primitive);\n parser.assignFinalMaterial(mesh);\n meshes.push(mesh);\n }\n for (let i = 0, il = meshes.length; i < il; i++) {\n parser.associations.set(meshes[i], {\n meshes: meshIndex,\n primitives: i\n });\n }\n if (meshes.length === 1) {\n if (meshDef.extensions)\n addUnknownExtensionsToUserData(extensions, meshes[0], meshDef);\n return meshes[0];\n }\n const group = new Group();\n if (meshDef.extensions)\n addUnknownExtensionsToUserData(extensions, group, meshDef);\n parser.associations.set(group, { meshes: meshIndex });\n for (let i = 0, il = meshes.length; i < il; i++) {\n group.add(meshes[i]);\n }\n return group;\n });\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras\n * @param {number} cameraIndex\n * @return {Promise<THREE.Camera>}\n */\n loadCamera(cameraIndex) {\n let camera;\n const cameraDef = this.json.cameras[cameraIndex];\n const params = cameraDef[cameraDef.type];\n if (!params) {\n console.warn(\"THREE.GLTFLoader: Missing camera parameters.\");\n return;\n }\n if (cameraDef.type === \"perspective\") {\n camera = new PerspectiveCamera(\n MathUtils.radToDeg(params.yfov),\n params.aspectRatio || 1,\n params.znear || 1,\n params.zfar || 2e6\n );\n } else if (cameraDef.type === \"orthographic\") {\n camera = new OrthographicCamera(-params.xmag, params.xmag, params.ymag, -params.ymag, params.znear, params.zfar);\n }\n if (cameraDef.name)\n camera.name = this.createUniqueName(cameraDef.name);\n assignExtrasToUserData(camera, cameraDef);\n return Promise.resolve(camera);\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins\n * @param {number} skinIndex\n * @return {Promise<Skeleton>}\n */\n loadSkin(skinIndex) {\n const skinDef = this.json.skins[skinIndex];\n const pending = [];\n for (let i = 0, il = skinDef.joints.length; i < il; i++) {\n pending.push(this._loadNodeShallow(skinDef.joints[i]));\n }\n if (skinDef.inverseBindMatrices !== void 0) {\n pending.push(this.getDependency(\"accessor\", skinDef.inverseBindMatrices));\n } else {\n pending.push(null);\n }\n return Promise.all(pending).then(function(results) {\n const inverseBindMatrices = results.pop();\n const jointNodes = results;\n const bones = [];\n const boneInverses = [];\n for (let i = 0, il = jointNodes.length; i < il; i++) {\n const jointNode = jointNodes[i];\n if (jointNode) {\n bones.push(jointNode);\n const mat = new Matrix4();\n if (inverseBindMatrices !== null) {\n mat.fromArray(inverseBindMatrices.array, i * 16);\n }\n boneInverses.push(mat);\n } else {\n console.warn('THREE.GLTFLoader: Joint \"%s\" could not be found.', skinDef.joints[i]);\n }\n }\n return new Skeleton(bones, boneInverses);\n });\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations\n * @param {number} animationIndex\n * @return {Promise<AnimationClip>}\n */\n loadAnimation(animationIndex) {\n const json = this.json;\n const parser = this;\n const animationDef = json.animations[animationIndex];\n const animationName = animationDef.name ? animationDef.name : \"animation_\" + animationIndex;\n const pendingNodes = [];\n const pendingInputAccessors = [];\n const pendingOutputAccessors = [];\n const pendingSamplers = [];\n const pendingTargets = [];\n for (let i = 0, il = animationDef.channels.length; i < il; i++) {\n const channel = animationDef.channels[i];\n const sampler = animationDef.samplers[channel.sampler];\n const target = channel.target;\n const name = target.node;\n const input = animationDef.parameters !== void 0 ? animationDef.parameters[sampler.input] : sampler.input;\n const output = animationDef.parameters !== void 0 ? animationDef.parameters[sampler.output] : sampler.output;\n if (target.node === void 0)\n continue;\n pendingNodes.push(this.getDependency(\"node\", name));\n pendingInputAccessors.push(this.getDependency(\"accessor\", input));\n pendingOutputAccessors.push(this.getDependency(\"accessor\", output));\n pendingSamplers.push(sampler);\n pendingTargets.push(target);\n }\n return Promise.all([\n Promise.all(pendingNodes),\n Promise.all(pendingInputAccessors),\n Promise.all(pendingOutputAccessors),\n Promise.all(pendingSamplers),\n Promise.all(pendingTargets)\n ]).then(function(dependencies) {\n const nodes = dependencies[0];\n const inputAccessors = dependencies[1];\n const outputAccessors = dependencies[2];\n const samplers = dependencies[3];\n const targets = dependencies[4];\n const tracks = [];\n for (let i = 0, il = nodes.length; i < il; i++) {\n const node = nodes[i];\n const inputAccessor = inputAccessors[i];\n const outputAccessor = outputAccessors[i];\n const sampler = samplers[i];\n const target = targets[i];\n if (node === void 0)\n continue;\n if (node.updateMatrix) {\n node.updateMatrix();\n }\n const createdTracks = parser._createAnimationTracks(node, inputAccessor, outputAccessor, sampler, target);\n if (createdTracks) {\n for (let k = 0; k < createdTracks.length; k++) {\n tracks.push(createdTracks[k]);\n }\n }\n }\n return new AnimationClip(animationName, void 0, tracks);\n });\n }\n createNodeMesh(nodeIndex) {\n const json = this.json;\n const parser = this;\n const nodeDef = json.nodes[nodeIndex];\n if (nodeDef.mesh === void 0)\n return null;\n return parser.getDependency(\"mesh\", nodeDef.mesh).then(function(mesh) {\n const node = parser._getNodeRef(parser.meshCache, nodeDef.mesh, mesh);\n if (nodeDef.weights !== void 0) {\n node.traverse(function(o) {\n if (!o.isMesh)\n return;\n for (let i = 0, il = nodeDef.weights.length; i < il; i++) {\n o.morphTargetInfluences[i] = nodeDef.weights[i];\n }\n });\n }\n return node;\n });\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy\n * @param {number} nodeIndex\n * @return {Promise<Object3D>}\n */\n loadNode(nodeIndex) {\n const json = this.json;\n const parser = this;\n const nodeDef = json.nodes[nodeIndex];\n const nodePending = parser._loadNodeShallow(nodeIndex);\n const childPending = [];\n const childrenDef = nodeDef.children || [];\n for (let i = 0, il = childrenDef.length; i < il; i++) {\n childPending.push(parser.getDependency(\"node\", childrenDef[i]));\n }\n const skeletonPending = nodeDef.skin === void 0 ? Promise.resolve(null) : parser.getDependency(\"skin\", nodeDef.skin);\n return Promise.all([nodePending, Promise.all(childPending), skeletonPending]).then(function(results) {\n const node = results[0];\n const children = results[1];\n const skeleton = results[2];\n if (skeleton !== null) {\n node.traverse(function(mesh) {\n if (!mesh.isSkinnedMesh)\n return;\n mesh.bind(skeleton, _identityMatrix);\n });\n }\n for (let i = 0, il = children.length; i < il; i++) {\n node.add(children[i]);\n }\n return node;\n });\n }\n // ._loadNodeShallow() parses a single node.\n // skin and child nodes are created and added in .loadNode() (no '_' prefix).\n _loadNodeShallow(nodeIndex) {\n const json = this.json;\n const extensions = this.extensions;\n const parser = this;\n if (this.nodeCache[nodeIndex] !== void 0) {\n return this.nodeCache[nodeIndex];\n }\n const nodeDef = json.nodes[nodeIndex];\n const nodeName = nodeDef.name ? parser.createUniqueName(nodeDef.name) : \"\";\n const pending = [];\n const meshPromise = parser._invokeOne(function(ext) {\n return ext.createNodeMesh && ext.createNodeMesh(nodeIndex);\n });\n if (meshPromise) {\n pending.push(meshPromise);\n }\n if (nodeDef.camera !== void 0) {\n pending.push(\n parser.getDependency(\"camera\", nodeDef.camera).then(function(camera) {\n return parser._getNodeRef(parser.cameraCache, nodeDef.camera, camera);\n })\n );\n }\n parser._invokeAll(function(ext) {\n return ext.createNodeAttachment && ext.createNodeAttachment(nodeIndex);\n }).forEach(function(promise) {\n pending.push(promise);\n });\n this.nodeCache[nodeIndex] = Promise.all(pending).then(function(objects) {\n let node;\n if (nodeDef.isBone === true) {\n node = new Bone();\n } else if (objects.length > 1) {\n node = new Group();\n } else if (objects.length === 1) {\n node = objects[0];\n } else {\n node = new Object3D();\n }\n if (node !== objects[0]) {\n for (let i = 0, il = objects.length; i < il; i++) {\n node.add(objects[i]);\n }\n }\n if (nodeDef.name) {\n node.userData.name = nodeDef.name;\n node.name = nodeName;\n }\n assignExtrasToUserData(node, nodeDef);\n if (nodeDef.extensions)\n addUnknownExtensionsToUserData(extensions, node, nodeDef);\n if (nodeDef.matrix !== void 0) {\n const matrix = new Matrix4();\n matrix.fromArray(nodeDef.matrix);\n node.applyMatrix4(matrix);\n } else {\n if (nodeDef.translation !== void 0) {\n node.position.fromArray(nodeDef.translation);\n }\n if (nodeDef.rotation !== void 0) {\n node.quaternion.fromArray(nodeDef.rotation);\n }\n if (nodeDef.scale !== void 0) {\n node.scale.fromArray(nodeDef.scale);\n }\n }\n if (!parser.associations.has(node)) {\n parser.associations.set(node, {});\n }\n parser.associations.get(node).nodes = nodeIndex;\n return node;\n });\n return this.nodeCache[nodeIndex];\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes\n * @param {number} sceneIndex\n * @return {Promise<Group>}\n */\n loadScene(sceneIndex) {\n const extensions = this.extensions;\n const sceneDef = this.json.scenes[sceneIndex];\n const parser = this;\n const scene = new Group();\n if (sceneDef.name)\n scene.name = parser.createUniqueName(sceneDef.name);\n assignExtrasToUserData(scene, sceneDef);\n if (sceneDef.extensions)\n addUnknownExtensionsToUserData(extensions, scene, sceneDef);\n const nodeIds = sceneDef.nodes || [];\n const pending = [];\n for (let i = 0, il = nodeIds.length; i < il; i++) {\n pending.push(parser.getDependency(\"node\", nodeIds[i]));\n }\n return Promise.all(pending).then(function(nodes) {\n for (let i = 0, il = nodes.length; i < il; i++) {\n scene.add(nodes[i]);\n }\n const reduceAssociations = (node) => {\n const reducedAssociations = /* @__PURE__ */ new Map();\n for (const [key, value] of parser.associations) {\n if (key instanceof Material || key instanceof Texture) {\n reducedAssociations.set(key, value);\n }\n }\n node.traverse((node2) => {\n const mappings = parser.associations.get(node2);\n if (mappings != null) {\n reducedAssociations.set(node2, mappings);\n }\n });\n return reducedAssociations;\n };\n parser.associations = reduceAssociations(scene);\n return scene;\n });\n }\n _createAnimationTracks(node, inputAccessor, outputAccessor, sampler, target) {\n const tracks = [];\n const targetName = node.name ? node.name : node.uuid;\n const targetNames = [];\n if (PATH_PROPERTIES[target.path] === PATH_PROPERTIES.weights) {\n node.traverse(function(object) {\n if (object.morphTargetInfluences) {\n targetNames.push(object.name ? object.name : object.uuid);\n }\n });\n } else {\n targetNames.push(targetName);\n }\n let TypedKeyframeTrack;\n switch (PATH_PROPERTIES[target.path]) {\n case PATH_PROPERTIES.weights:\n TypedKeyframeTrack = NumberKeyframeTrack;\n break;\n case PATH_PROPERTIES.rotation:\n TypedKeyframeTrack = QuaternionKeyframeTrack;\n break;\n case PATH_PROPERTIES.position:\n case PATH_PROPERTIES.scale:\n TypedKeyframeTrack = VectorKeyframeTrack;\n break;\n default:\n switch (outputAccessor.itemSize) {\n case 1:\n TypedKeyframeTrack = NumberKeyframeTrack;\n break;\n case 2:\n case 3:\n default:\n TypedKeyframeTrack = VectorKeyframeTrack;\n break;\n }\n break;\n }\n const interpolation = sampler.interpolation !== void 0 ? INTERPOLATION[sampler.interpolation] : InterpolateLinear;\n const outputArray = this._getArrayFromAccessor(outputAccessor);\n for (let j = 0, jl = targetNames.length; j < jl; j++) {\n const track = new TypedKeyframeTrack(\n targetNames[j] + \".\" + PATH_PROPERTIES[target.path],\n inputAccessor.array,\n outputArray,\n interpolation\n );\n if (sampler.interpolation === \"CUBICSPLINE\") {\n this._createCubicSplineTrackInterpolant(track);\n }\n tracks.push(track);\n }\n return tracks;\n }\n _getArrayFromAccessor(accessor) {\n let outputArray = accessor.array;\n if (accessor.normalized) {\n const scale = getNormalizedComponentScale(outputArray.constructor);\n const scaled = new Float32Array(outputArray.length);\n for (let j = 0, jl = outputArray.length; j < jl; j++) {\n scaled[j] = outputArray[j] * scale;\n }\n outputArray = scaled;\n }\n return outputArray;\n }\n _createCubicSplineTrackInterpolant(track) {\n track.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline(result) {\n const interpolantType = this instanceof QuaternionKeyframeTrack ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;\n return new interpolantType(this.times, this.values, this.getValueSize() / 3, result);\n };\n track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;\n }\n}\nfunction computeBounds(geometry, primitiveDef, parser) {\n const attributes = primitiveDef.attributes;\n const box = new Box3();\n if (attributes.POSITION !== void 0) {\n const accessor = parser.json.accessors[attributes.POSITION];\n const min = accessor.min;\n const max = accessor.max;\n if (min !== void 0 && max !== void 0) {\n box.set(new Vector3(min[0], min[1], min[2]), new Vector3(max[0], max[1], max[2]));\n if (accessor.normalized) {\n const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]);\n box.min.multiplyScalar(boxScale);\n box.max.multiplyScalar(boxScale);\n }\n } else {\n console.warn(\"THREE.GLTFLoader: Missing min/max properties for accessor POSITION.\");\n return;\n }\n } else {\n return;\n }\n const targets = primitiveDef.targets;\n if (targets !== void 0) {\n const maxDisplacement = new Vector3();\n const vector = new Vector3();\n for (let i = 0, il = targets.length; i < il; i++) {\n const target = targets[i];\n if (target.POSITION !== void 0) {\n const accessor = parser.json.accessors[target.POSITION];\n const min = accessor.min;\n const max = accessor.max;\n if (min !== void 0 && max !== void 0) {\n vector.setX(Math.max(Math.abs(min[0]), Math.abs(max[0])));\n vector.setY(Math.max(Math.abs(min[1]), Math.abs(max[1])));\n vector.setZ(Math.max(Math.abs(min[2]), Math.abs(max[2])));\n if (accessor.normalized) {\n const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]);\n vector.multiplyScalar(boxScale);\n }\n maxDisplacement.max(vector);\n } else {\n console.warn(\"THREE.GLTFLoader: Missing min/max properties for accessor POSITION.\");\n }\n }\n }\n box.expandByVector(maxDisplacement);\n }\n geometry.boundingBox = box;\n const sphere = new Sphere();\n box.getCenter(sphere.center);\n sphere.radius = box.min.distanceTo(box.max) / 2;\n geometry.boundingSphere = sphere;\n}\nfunction addPrimitiveAttributes(geometry, primitiveDef, parser) {\n const attributes = primitiveDef.attributes;\n const pending = [];\n function assignAttributeAccessor(accessorIndex, attributeName) {\n return parser.getDependency(\"accessor\", accessorIndex).then(function(accessor) {\n geometry.setAttribute(attributeName, accessor);\n });\n }\n for (const gltfAttributeName in attributes) {\n const threeAttributeName = ATTRIBUTES[gltfAttributeName] || gltfAttributeName.toLowerCase();\n if (threeAttributeName in geometry.attributes)\n continue;\n pending.push(assignAttributeAccessor(attributes[gltfAttributeName], threeAttributeName));\n }\n if (primitiveDef.indices !== void 0 && !geometry.index) {\n const accessor = parser.getDependency(\"accessor\", primitiveDef.indices).then(function(accessor2) {\n geometry.setIndex(accessor2);\n });\n pending.push(accessor);\n }\n assignExtrasToUserData(geometry, primitiveDef);\n computeBounds(geometry, primitiveDef, parser);\n return Promise.all(pending).then(function() {\n return primitiveDef.targets !== void 0 ? addMorphTargets(geometry, primitiveDef.targets, parser) : geometry;\n });\n}\nexport {\n GLTFLoader\n};\n//# sourceMappingURL=GLTFLoader.js.map\n","import { BufferGeometry, Vector3, Matrix4, Float32BufferAttribute } from \"three\";\nclass DecalGeometry extends BufferGeometry {\n constructor(mesh, position, orientation, size) {\n super();\n const vertices = [];\n const normals = [];\n const uvs = [];\n const plane = new Vector3();\n const projectorMatrix = new Matrix4();\n projectorMatrix.makeRotationFromEuler(orientation);\n projectorMatrix.setPosition(position);\n const projectorMatrixInverse = new Matrix4();\n projectorMatrixInverse.copy(projectorMatrix).invert();\n generate();\n this.setAttribute(\"position\", new Float32BufferAttribute(vertices, 3));\n this.setAttribute(\"normal\", new Float32BufferAttribute(normals, 3));\n this.setAttribute(\"uv\", new Float32BufferAttribute(uvs, 2));\n function generate() {\n let i;\n let decalVertices = [];\n const vertex = new Vector3();\n const normal = new Vector3();\n if (mesh.geometry.isGeometry === true) {\n console.error(\"THREE.DecalGeometry no longer supports THREE.Geometry. Use BufferGeometry instead.\");\n return;\n }\n const geometry = mesh.geometry;\n const positionAttribute = geometry.attributes.position;\n const normalAttribute = geometry.attributes.normal;\n if (geometry.index !== null) {\n const index = geometry.index;\n for (i = 0; i < index.count; i++) {\n vertex.fromBufferAttribute(positionAttribute, index.getX(i));\n normal.fromBufferAttribute(normalAttribute, index.getX(i));\n pushDecalVertex(decalVertices, vertex, normal);\n }\n } else {\n for (i = 0; i < positionAttribute.count; i++) {\n vertex.fromBufferAttribute(positionAttribute, i);\n normal.fromBufferAttribute(normalAttribute, i);\n pushDecalVertex(decalVertices, vertex, normal);\n }\n }\n decalVertices = clipGeometry(decalVertices, plane.set(1, 0, 0));\n decalVertices = clipGeometry(decalVertices, plane.set(-1, 0, 0));\n decalVertices = clipGeometry(decalVertices, plane.set(0, 1, 0));\n decalVertices = clipGeometry(decalVertices, plane.set(0, -1, 0));\n decalVertices = clipGeometry(decalVertices, plane.set(0, 0, 1));\n decalVertices = clipGeometry(decalVertices, plane.set(0, 0, -1));\n for (i = 0; i < decalVertices.length; i++) {\n const decalVertex = decalVertices[i];\n uvs.push(0.5 + decalVertex.position.x / size.x, 0.5 + decalVertex.position.y / size.y);\n decalVertex.position.applyMatrix4(projectorMatrix);\n vertices.push(decalVertex.position.x, decalVertex.position.y, decalVertex.position.z);\n normals.push(decalVertex.normal.x, decalVertex.normal.y, decalVertex.normal.z);\n }\n }\n function pushDecalVertex(decalVertices, vertex, normal) {\n vertex.applyMatrix4(mesh.matrixWorld);\n vertex.applyMatrix4(projectorMatrixInverse);\n normal.transformDirection(mesh.matrixWorld);\n decalVertices.push(new DecalVertex(vertex.clone(), normal.clone()));\n }\n function clipGeometry(inVertices, plane2) {\n const outVertices = [];\n const s = 0.5 * Math.abs(size.dot(plane2));\n for (let i = 0; i < inVertices.length; i += 3) {\n let v1Out, v2Out, v3Out, total = 0;\n let nV1, nV2, nV3, nV4;\n const d1 = inVertices[i + 0].position.dot(plane2) - s;\n const d2 = inVertices[i + 1].position.dot(plane2) - s;\n const d3 = inVertices[i + 2].position.dot(plane2) - s;\n v1Out = d1 > 0;\n v2Out = d2 > 0;\n v3Out = d3 > 0;\n total = (v1Out ? 1 : 0) + (v2Out ? 1 : 0) + (v3Out ? 1 : 0);\n switch (total) {\n case 0: {\n outVertices.push(inVertices[i]);\n outVertices.push(inVertices[i + 1]);\n outVertices.push(inVertices[i + 2]);\n break;\n }\n case 1: {\n if (v1Out) {\n nV1 = inVertices[i + 1];\n nV2 = inVertices[i + 2];\n nV3 = clip(inVertices[i], nV1, plane2, s);\n nV4 = clip(inVertices[i], nV2, plane2, s);\n }\n if (v2Out) {\n nV1 = inVertices[i];\n nV2 = inVertices[i + 2];\n nV3 = clip(inVertices[i + 1], nV1, plane2, s);\n nV4 = clip(inVertices[i + 1], nV2, plane2, s);\n outVertices.push(nV3);\n outVertices.push(nV2.clone());\n outVertices.push(nV1.clone());\n outVertices.push(nV2.clone());\n outVertices.push(nV3.clone());\n outVertices.push(nV4);\n break;\n }\n if (v3Out) {\n nV1 = inVertices[i];\n nV2 = inVertices[i + 1];\n nV3 = clip(inVertices[i + 2], nV1, plane2, s);\n nV4 = clip(inVertices[i + 2], nV2, plane2, s);\n }\n outVertices.push(nV1.clone());\n outVertices.push(nV2.clone());\n outVertices.push(nV3);\n outVertices.push(nV4);\n outVertices.push(nV3.clone());\n outVertices.push(nV2.clone());\n break;\n }\n case 2: {\n if (!v1Out) {\n nV1 = inVertices[i].clone();\n nV2 = clip(nV1, inVertices[i + 1], plane2, s);\n nV3 = clip(nV1, inVertices[i + 2], plane2, s);\n outVertices.push(nV1);\n outVertices.push(nV2);\n outVertices.push(nV3);\n }\n if (!v2Out) {\n nV1 = inVertices[i + 1].clone();\n nV2 = clip(nV1, inVertices[i + 2], plane2, s);\n nV3 = clip(nV1, inVertices[i], plane2, s);\n outVertices.push(nV1);\n outVertices.push(nV2);\n outVertices.push(nV3);\n }\n if (!v3Out) {\n nV1 = inVertices[i + 2].clone();\n nV2 = clip(nV1, inVertices[i], plane2, s);\n nV3 = clip(nV1, inVertices[i + 1], plane2, s);\n outVertices.push(nV1);\n outVertices.push(nV2);\n outVertices.push(nV3);\n }\n break;\n }\n }\n }\n return outVertices;\n }\n function clip(v0, v1, p, s) {\n const d0 = v0.position.dot(p) - s;\n const d1 = v1.position.dot(p) - s;\n const s0 = d0 / (d0 - d1);\n const v = new DecalVertex(\n new Vector3(\n v0.position.x + s0 * (v1.position.x - v0.position.x),\n v0.position.y + s0 * (v1.position.y - v0.position.y),\n v0.position.z + s0 * (v1.position.z - v0.position.z)\n ),\n new Vector3(\n v0.normal.x + s0 * (v1.normal.x - v0.normal.x),\n v0.normal.y + s0 * (v1.normal.y - v0.normal.y),\n v0.normal.z + s0 * (v1.normal.z - v0.normal.z)\n )\n );\n return v;\n }\n }\n}\nclass DecalVertex {\n constructor(position, normal) {\n this.position = position;\n this.normal = normal;\n }\n clone() {\n return new this.constructor(this.position.clone(), this.normal.clone());\n }\n}\nexport {\n DecalGeometry,\n DecalVertex\n};\n//# sourceMappingURL=DecalGeometry.js.map\n","import { ExtrudeGeometry } from \"three\";\nclass TextGeometry extends ExtrudeGeometry {\n constructor(text, parameters = {}) {\n const {\n bevelEnabled = false,\n bevelSize = 8,\n bevelThickness = 10,\n font,\n height = 50,\n size = 100,\n lineHeight = 1,\n letterSpacing = 0,\n ...rest\n } = parameters;\n if (font === void 0) {\n super();\n } else {\n const shapes = font.generateShapes(text, size, { lineHeight, letterSpacing });\n super(shapes, { ...rest, bevelEnabled, bevelSize, bevelThickness, depth: height });\n }\n this.type = \"TextGeometry\";\n }\n}\nexport {\n TextGeometry as TextBufferGeometry,\n TextGeometry\n};\n//# sourceMappingURL=TextGeometry.js.map\n","const GammaCorrectionShader = {\n uniforms: {\n tDiffuse: { value: null }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D tDiffuse;\n\n varying vec2 vUv;\n\n void main() {\n\n \tvec4 tex = texture2D( tDiffuse, vUv );\n\n \t#ifdef LinearTosRGB\n \t\tgl_FragColor = LinearTosRGB( tex );\n \t#else\n \t\tgl_FragColor = sRGBTransferOETF( tex );\n \t#endif\n\n }\n `\n )\n};\nexport {\n GammaCorrectionShader\n};\n//# sourceMappingURL=GammaCorrectionShader.js.map\n","const HorizontalBlurShader = {\n uniforms: {\n tDiffuse: { value: null },\n h: { value: 1 / 512 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D tDiffuse;\n uniform float h;\n\n varying vec2 vUv;\n\n void main() {\n\n \tvec4 sum = vec4( 0.0 );\n\n \tsum += texture2D( tDiffuse, vec2( vUv.x - 4.0 * h, vUv.y ) ) * 0.051;\n \tsum += texture2D( tDiffuse, vec2( vUv.x - 3.0 * h, vUv.y ) ) * 0.0918;\n \tsum += texture2D( tDiffuse, vec2( vUv.x - 2.0 * h, vUv.y ) ) * 0.12245;\n \tsum += texture2D( tDiffuse, vec2( vUv.x - 1.0 * h, vUv.y ) ) * 0.1531;\n \tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\n \tsum += texture2D( tDiffuse, vec2( vUv.x + 1.0 * h, vUv.y ) ) * 0.1531;\n \tsum += texture2D( tDiffuse, vec2( vUv.x + 2.0 * h, vUv.y ) ) * 0.12245;\n \tsum += texture2D( tDiffuse, vec2( vUv.x + 3.0 * h, vUv.y ) ) * 0.0918;\n \tsum += texture2D( tDiffuse, vec2( vUv.x + 4.0 * h, vUv.y ) ) * 0.051;\n\n \tgl_FragColor = sum;\n\n }\n `\n )\n};\nexport {\n HorizontalBlurShader\n};\n//# sourceMappingURL=HorizontalBlurShader.js.map\n","const VerticalBlurShader = {\n uniforms: {\n tDiffuse: { value: null },\n v: { value: 1 / 512 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n\n uniform sampler2D tDiffuse;\n uniform float v;\n\n varying vec2 vUv;\n\n void main() {\n\n vec4 sum = vec4( 0.0 );\n\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 4.0 * v ) ) * 0.051;\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 3.0 * v ) ) * 0.0918;\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 2.0 * v ) ) * 0.12245;\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 1.0 * v ) ) * 0.1531;\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 1.0 * v ) ) * 0.1531;\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 2.0 * v ) ) * 0.12245;\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 3.0 * v ) ) * 0.0918;\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 4.0 * v ) ) * 0.051;\n\n gl_FragColor = sum;\n\n }\n `\n )\n};\nexport {\n VerticalBlurShader\n};\n//# sourceMappingURL=VerticalBlurShader.js.map\n","import { Vector3, Frustum } from \"three\";\nconst frustum = /* @__PURE__ */ new Frustum();\nconst center = /* @__PURE__ */ new Vector3();\nconst tmpPoint = /* @__PURE__ */ new Vector3();\nconst vecNear = /* @__PURE__ */ new Vector3();\nconst vecTopLeft = /* @__PURE__ */ new Vector3();\nconst vecTopRight = /* @__PURE__ */ new Vector3();\nconst vecDownRight = /* @__PURE__ */ new Vector3();\nconst vecDownLeft = /* @__PURE__ */ new Vector3();\nconst vecFarTopLeft = /* @__PURE__ */ new Vector3();\nconst vecFarTopRight = /* @__PURE__ */ new Vector3();\nconst vecFarDownRight = /* @__PURE__ */ new Vector3();\nconst vecFarDownLeft = /* @__PURE__ */ new Vector3();\nconst vectemp1 = /* @__PURE__ */ new Vector3();\nconst vectemp2 = /* @__PURE__ */ new Vector3();\nconst vectemp3 = /* @__PURE__ */ new Vector3();\nclass SelectionBox {\n constructor(camera, scene, deep) {\n this.camera = camera;\n this.scene = scene;\n this.startPoint = new Vector3();\n this.endPoint = new Vector3();\n this.collection = [];\n this.deep = deep || Number.MAX_VALUE;\n }\n select(startPoint, endPoint) {\n this.startPoint = startPoint || this.startPoint;\n this.endPoint = endPoint || this.endPoint;\n this.collection = [];\n this.updateFrustum(this.startPoint, this.endPoint);\n this.searchChildInFrustum(frustum, this.scene);\n return this.collection;\n }\n updateFrustum(startPoint, endPoint) {\n startPoint = startPoint || this.startPoint;\n endPoint = endPoint || this.endPoint;\n if (startPoint.x === endPoint.x) {\n endPoint.x += Number.EPSILON;\n }\n if (startPoint.y === endPoint.y) {\n endPoint.y += Number.EPSILON;\n }\n this.camera.updateProjectionMatrix();\n this.camera.updateMatrixWorld();\n if (this.camera.isPerspectiveCamera) {\n tmpPoint.copy(startPoint);\n tmpPoint.x = Math.min(startPoint.x, endPoint.x);\n tmpPoint.y = Math.max(startPoint.y, endPoint.y);\n endPoint.x = Math.max(startPoint.x, endPoint.x);\n endPoint.y = Math.min(startPoint.y, endPoint.y);\n vecNear.setFromMatrixPosition(this.camera.matrixWorld);\n vecTopLeft.copy(tmpPoint);\n vecTopRight.set(endPoint.x, tmpPoint.y, 0);\n vecDownRight.copy(endPoint);\n vecDownLeft.set(tmpPoint.x, endPoint.y, 0);\n vecTopLeft.unproject(this.camera);\n vecTopRight.unproject(this.camera);\n vecDownRight.unproject(this.camera);\n vecDownLeft.unproject(this.camera);\n vectemp1.copy(vecTopLeft).sub(vecNear);\n vectemp2.copy(vecTopRight).sub(vecNear);\n vectemp3.copy(vecDownRight).sub(vecNear);\n vectemp1.normalize();\n vectemp2.normalize();\n vectemp3.normalize();\n vectemp1.multiplyScalar(this.deep);\n vectemp2.multiplyScalar(this.deep);\n vectemp3.multiplyScalar(this.deep);\n vectemp1.add(vecNear);\n vectemp2.add(vecNear);\n vectemp3.add(vecNear);\n var planes = frustum.planes;\n planes[0].setFromCoplanarPoints(vecNear, vecTopLeft, vecTopRight);\n planes[1].setFromCoplanarPoints(vecNear, vecTopRight, vecDownRight);\n planes[2].setFromCoplanarPoints(vecDownRight, vecDownLeft, vecNear);\n planes[3].setFromCoplanarPoints(vecDownLeft, vecTopLeft, vecNear);\n planes[4].setFromCoplanarPoints(vecTopRight, vecDownRight, vecDownLeft);\n planes[5].setFromCoplanarPoints(vectemp3, vectemp2, vectemp1);\n planes[5].normal.multiplyScalar(-1);\n } else if (this.camera.isOrthographicCamera) {\n const left = Math.min(startPoint.x, endPoint.x);\n const top = Math.max(startPoint.y, endPoint.y);\n const right = Math.max(startPoint.x, endPoint.x);\n const down = Math.min(startPoint.y, endPoint.y);\n vecTopLeft.set(left, top, -1);\n vecTopRight.set(right, top, -1);\n vecDownRight.set(right, down, -1);\n vecDownLeft.set(left, down, -1);\n vecFarTopLeft.set(left, top, 1);\n vecFarTopRight.set(right, top, 1);\n vecFarDownRight.set(right, down, 1);\n vecFarDownLeft.set(left, down, 1);\n vecTopLeft.unproject(this.camera);\n vecTopRight.unproject(this.camera);\n vecDownRight.unproject(this.camera);\n vecDownLeft.unproject(this.camera);\n vecFarTopLeft.unproject(this.camera);\n vecFarTopRight.unproject(this.camera);\n vecFarDownRight.unproject(this.camera);\n vecFarDownLeft.unproject(this.camera);\n var planes = frustum.planes;\n planes[0].setFromCoplanarPoints(vecTopLeft, vecFarTopLeft, vecFarTopRight);\n planes[1].setFromCoplanarPoints(vecTopRight, vecFarTopRight, vecFarDownRight);\n planes[2].setFromCoplanarPoints(vecFarDownRight, vecFarDownLeft, vecDownLeft);\n planes[3].setFromCoplanarPoints(vecFarDownLeft, vecFarTopLeft, vecTopLeft);\n planes[4].setFromCoplanarPoints(vecTopRight, vecDownRight, vecDownLeft);\n planes[5].setFromCoplanarPoints(vecFarDownRight, vecFarTopRight, vecFarTopLeft);\n planes[5].normal.multiplyScalar(-1);\n } else {\n console.error(\"THREE.SelectionBox: Unsupported camera type.\");\n }\n }\n searchChildInFrustum(frustum2, object) {\n if (object.isMesh || object.isLine || object.isPoints) {\n if (object.material !== void 0) {\n if (object.geometry.boundingSphere === null)\n object.geometry.computeBoundingSphere();\n center.copy(object.geometry.boundingSphere.center);\n center.applyMatrix4(object.matrixWorld);\n if (frustum2.containsPoint(center)) {\n this.collection.push(object);\n }\n }\n }\n if (object.children.length > 0) {\n for (let x = 0; x < object.children.length; x++) {\n this.searchChildInFrustum(frustum2, object.children[x]);\n }\n }\n }\n}\nexport {\n SelectionBox\n};\n//# sourceMappingURL=SelectionBox.js.map\n","class AsciiEffect {\n constructor(renderer, charSet = \" .:-=+*#%@\", options = {}) {\n const fResolution = options[\"resolution\"] || 0.15;\n const iScale = options[\"scale\"] || 1;\n const bColor = options[\"color\"] || false;\n const bAlpha = options[\"alpha\"] || false;\n const bBlock = options[\"block\"] || false;\n const bInvert = options[\"invert\"] || false;\n const strResolution = options[\"strResolution\"] || \"low\";\n let width, height;\n const domElement = document.createElement(\"div\");\n domElement.style.cursor = \"default\";\n const oAscii = document.createElement(\"table\");\n domElement.appendChild(oAscii);\n let iWidth, iHeight;\n let oImg;\n this.setSize = function(w, h) {\n width = w;\n height = h;\n renderer.setSize(w, h);\n initAsciiSize();\n };\n this.render = function(scene, camera) {\n renderer.render(scene, camera);\n asciifyImage(oAscii);\n };\n this.domElement = domElement;\n function initAsciiSize() {\n iWidth = Math.floor(width * fResolution);\n iHeight = Math.floor(height * fResolution);\n oCanvas.width = iWidth;\n oCanvas.height = iHeight;\n oImg = renderer.domElement;\n if (oImg.style.backgroundColor) {\n oAscii.rows[0].cells[0].style.backgroundColor = oImg.style.backgroundColor;\n oAscii.rows[0].cells[0].style.color = oImg.style.color;\n }\n oAscii.cellSpacing = 0;\n oAscii.cellPadding = 0;\n const oStyle = oAscii.style;\n oStyle.whiteSpace = \"pre\";\n oStyle.margin = \"0px\";\n oStyle.padding = \"0px\";\n oStyle.letterSpacing = fLetterSpacing + \"px\";\n oStyle.fontFamily = strFont;\n oStyle.fontSize = fFontSize + \"px\";\n oStyle.lineHeight = fLineHeight + \"px\";\n oStyle.textAlign = \"left\";\n oStyle.textDecoration = \"none\";\n }\n const aDefaultCharList = \" .,:;i1tfLCG08@\".split(\"\");\n const aDefaultColorCharList = \" CGO08@\".split(\"\");\n const strFont = \"courier new, monospace\";\n const oCanvasImg = renderer.domElement;\n const oCanvas = document.createElement(\"canvas\");\n if (!oCanvas.getContext) {\n return;\n }\n const oCtx = oCanvas.getContext(\"2d\");\n if (!oCtx.getImageData) {\n return;\n }\n let aCharList = bColor ? aDefaultColorCharList : aDefaultCharList;\n if (charSet)\n aCharList = charSet;\n const fFontSize = 2 / fResolution * iScale;\n const fLineHeight = 2 / fResolution * iScale;\n let fLetterSpacing = 0;\n if (strResolution == \"low\") {\n switch (iScale) {\n case 1:\n fLetterSpacing = -1;\n break;\n case 2:\n case 3:\n fLetterSpacing = -2.1;\n break;\n case 4:\n fLetterSpacing = -3.1;\n break;\n case 5:\n fLetterSpacing = -4.15;\n break;\n }\n }\n if (strResolution == \"medium\") {\n switch (iScale) {\n case 1:\n fLetterSpacing = 0;\n break;\n case 2:\n fLetterSpacing = -1;\n break;\n case 3:\n fLetterSpacing = -1.04;\n break;\n case 4:\n case 5:\n fLetterSpacing = -2.1;\n break;\n }\n }\n if (strResolution == \"high\") {\n switch (iScale) {\n case 1:\n case 2:\n fLetterSpacing = 0;\n break;\n case 3:\n case 4:\n case 5:\n fLetterSpacing = -1;\n break;\n }\n }\n function asciifyImage(oAscii2) {\n oCtx.clearRect(0, 0, iWidth, iHeight);\n oCtx.drawImage(oCanvasImg, 0, 0, iWidth, iHeight);\n const oImgData = oCtx.getImageData(0, 0, iWidth, iHeight).data;\n let strChars = \"\";\n for (let y = 0; y < iHeight; y += 2) {\n for (let x = 0; x < iWidth; x++) {\n const iOffset = (y * iWidth + x) * 4;\n const iRed = oImgData[iOffset];\n const iGreen = oImgData[iOffset + 1];\n const iBlue = oImgData[iOffset + 2];\n const iAlpha = oImgData[iOffset + 3];\n let iCharIdx;\n let fBrightness;\n fBrightness = (0.3 * iRed + 0.59 * iGreen + 0.11 * iBlue) / 255;\n if (iAlpha == 0) {\n fBrightness = 1;\n }\n iCharIdx = Math.floor((1 - fBrightness) * (aCharList.length - 1));\n if (bInvert) {\n iCharIdx = aCharList.length - iCharIdx - 1;\n }\n let strThisChar = aCharList[iCharIdx];\n if (strThisChar === void 0 || strThisChar == \" \")\n strThisChar = \" \";\n if (bColor) {\n strChars += \"<span style='color:rgb(\" + iRed + \",\" + iGreen + \",\" + iBlue + \");\" + (bBlock ? \"background-color:rgb(\" + iRed + \",\" + iGreen + \",\" + iBlue + \");\" : \"\") + (bAlpha ? \"opacity:\" + iAlpha / 255 + \";\" : \"\") + \"'>\" + strThisChar + \"</span>\";\n } else {\n strChars += strThisChar;\n }\n }\n strChars += \"<br/>\";\n }\n oAscii2.innerHTML = `<tr><td style=\"display:block;width:${width}px;height:${height}px;overflow:hidden\">${strChars}</td></tr>`;\n }\n }\n}\nexport {\n AsciiEffect\n};\n//# sourceMappingURL=AsciiEffect.js.map\n","import { Vector4, Vector3 } from \"three\";\nfunction findSpan(p, u, U) {\n const n = U.length - p - 1;\n if (u >= U[n]) {\n return n - 1;\n }\n if (u <= U[p]) {\n return p;\n }\n let low = p;\n let high = n;\n let mid = Math.floor((low + high) / 2);\n while (u < U[mid] || u >= U[mid + 1]) {\n if (u < U[mid]) {\n high = mid;\n } else {\n low = mid;\n }\n mid = Math.floor((low + high) / 2);\n }\n return mid;\n}\nfunction calcBasisFunctions(span, u, p, U) {\n const N = [];\n const left = [];\n const right = [];\n N[0] = 1;\n for (let j = 1; j <= p; ++j) {\n left[j] = u - U[span + 1 - j];\n right[j] = U[span + j] - u;\n let saved = 0;\n for (let r = 0; r < j; ++r) {\n const rv = right[r + 1];\n const lv = left[j - r];\n const temp = N[r] / (rv + lv);\n N[r] = saved + rv * temp;\n saved = lv * temp;\n }\n N[j] = saved;\n }\n return N;\n}\nfunction calcBSplinePoint(p, U, P, u) {\n const span = findSpan(p, u, U);\n const N = calcBasisFunctions(span, u, p, U);\n const C = new Vector4(0, 0, 0, 0);\n for (let j = 0; j <= p; ++j) {\n const point = P[span - p + j];\n const Nj = N[j];\n const wNj = point.w * Nj;\n C.x += point.x * wNj;\n C.y += point.y * wNj;\n C.z += point.z * wNj;\n C.w += point.w * Nj;\n }\n return C;\n}\nfunction calcBasisFunctionDerivatives(span, u, p, n, U) {\n const zeroArr = [];\n for (let i = 0; i <= p; ++i)\n zeroArr[i] = 0;\n const ders = [];\n for (let i = 0; i <= n; ++i)\n ders[i] = zeroArr.slice(0);\n const ndu = [];\n for (let i = 0; i <= p; ++i)\n ndu[i] = zeroArr.slice(0);\n ndu[0][0] = 1;\n const left = zeroArr.slice(0);\n const right = zeroArr.slice(0);\n for (let j = 1; j <= p; ++j) {\n left[j] = u - U[span + 1 - j];\n right[j] = U[span + j] - u;\n let saved = 0;\n for (let r2 = 0; r2 < j; ++r2) {\n const rv = right[r2 + 1];\n const lv = left[j - r2];\n ndu[j][r2] = rv + lv;\n const temp = ndu[r2][j - 1] / ndu[j][r2];\n ndu[r2][j] = saved + rv * temp;\n saved = lv * temp;\n }\n ndu[j][j] = saved;\n }\n for (let j = 0; j <= p; ++j) {\n ders[0][j] = ndu[j][p];\n }\n for (let r2 = 0; r2 <= p; ++r2) {\n let s1 = 0;\n let s2 = 1;\n const a = [];\n for (let i = 0; i <= p; ++i) {\n a[i] = zeroArr.slice(0);\n }\n a[0][0] = 1;\n for (let k = 1; k <= n; ++k) {\n let d = 0;\n const rk = r2 - k;\n const pk = p - k;\n if (r2 >= k) {\n a[s2][0] = a[s1][0] / ndu[pk + 1][rk];\n d = a[s2][0] * ndu[rk][pk];\n }\n const j1 = rk >= -1 ? 1 : -rk;\n const j2 = r2 - 1 <= pk ? k - 1 : p - r2;\n for (let j3 = j1; j3 <= j2; ++j3) {\n a[s2][j3] = (a[s1][j3] - a[s1][j3 - 1]) / ndu[pk + 1][rk + j3];\n d += a[s2][j3] * ndu[rk + j3][pk];\n }\n if (r2 <= pk) {\n a[s2][k] = -a[s1][k - 1] / ndu[pk + 1][r2];\n d += a[s2][k] * ndu[r2][pk];\n }\n ders[k][r2] = d;\n const j = s1;\n s1 = s2;\n s2 = j;\n }\n }\n let r = p;\n for (let k = 1; k <= n; ++k) {\n for (let j = 0; j <= p; ++j) {\n ders[k][j] *= r;\n }\n r *= p - k;\n }\n return ders;\n}\nfunction calcBSplineDerivatives(p, U, P, u, nd) {\n const du = nd < p ? nd : p;\n const CK = [];\n const span = findSpan(p, u, U);\n const nders = calcBasisFunctionDerivatives(span, u, p, du, U);\n const Pw = [];\n for (let i = 0; i < P.length; ++i) {\n const point = P[i].clone();\n const w = point.w;\n point.x *= w;\n point.y *= w;\n point.z *= w;\n Pw[i] = point;\n }\n for (let k = 0; k <= du; ++k) {\n const point = Pw[span - p].clone().multiplyScalar(nders[k][0]);\n for (let j = 1; j <= p; ++j) {\n point.add(Pw[span - p + j].clone().multiplyScalar(nders[k][j]));\n }\n CK[k] = point;\n }\n for (let k = du + 1; k <= nd + 1; ++k) {\n CK[k] = new Vector4(0, 0, 0);\n }\n return CK;\n}\nfunction calcKoverI(k, i) {\n let nom = 1;\n for (let j = 2; j <= k; ++j) {\n nom *= j;\n }\n let denom = 1;\n for (let j = 2; j <= i; ++j) {\n denom *= j;\n }\n for (let j = 2; j <= k - i; ++j) {\n denom *= j;\n }\n return nom / denom;\n}\nfunction calcRationalCurveDerivatives(Pders) {\n const nd = Pders.length;\n const Aders = [];\n const wders = [];\n for (let i = 0; i < nd; ++i) {\n const point = Pders[i];\n Aders[i] = new Vector3(point.x, point.y, point.z);\n wders[i] = point.w;\n }\n const CK = [];\n for (let k = 0; k < nd; ++k) {\n const v = Aders[k].clone();\n for (let i = 1; i <= k; ++i) {\n v.sub(CK[k - i].clone().multiplyScalar(calcKoverI(k, i) * wders[i]));\n }\n CK[k] = v.divideScalar(wders[0]);\n }\n return CK;\n}\nfunction calcNURBSDerivatives(p, U, P, u, nd) {\n const Pders = calcBSplineDerivatives(p, U, P, u, nd);\n return calcRationalCurveDerivatives(Pders);\n}\nfunction calcSurfacePoint(p, q, U, V, P, u, v, target) {\n const uspan = findSpan(p, u, U);\n const vspan = findSpan(q, v, V);\n const Nu = calcBasisFunctions(uspan, u, p, U);\n const Nv = calcBasisFunctions(vspan, v, q, V);\n const temp = [];\n for (let l = 0; l <= q; ++l) {\n temp[l] = new Vector4(0, 0, 0, 0);\n for (let k = 0; k <= p; ++k) {\n const point = P[uspan - p + k][vspan - q + l].clone();\n const w = point.w;\n point.x *= w;\n point.y *= w;\n point.z *= w;\n temp[l].add(point.multiplyScalar(Nu[k]));\n }\n }\n const Sw = new Vector4(0, 0, 0, 0);\n for (let l = 0; l <= q; ++l) {\n Sw.add(temp[l].multiplyScalar(Nv[l]));\n }\n Sw.divideScalar(Sw.w);\n target.set(Sw.x, Sw.y, Sw.z);\n}\nexport {\n calcBSplineDerivatives,\n calcBSplinePoint,\n calcBasisFunctionDerivatives,\n calcBasisFunctions,\n calcKoverI,\n calcNURBSDerivatives,\n calcRationalCurveDerivatives,\n calcSurfacePoint,\n findSpan\n};\n//# sourceMappingURL=NURBSUtils.js.map\n","import { Curve, Vector4, Vector3 } from \"three\";\nimport { calcBSplinePoint, calcNURBSDerivatives } from \"./NURBSUtils.js\";\nclass NURBSCurve extends Curve {\n constructor(degree, knots, controlPoints, startKnot, endKnot) {\n super();\n this.degree = degree;\n this.knots = knots;\n this.controlPoints = [];\n this.startKnot = startKnot || 0;\n this.endKnot = endKnot || this.knots.length - 1;\n for (let i = 0; i < controlPoints.length; ++i) {\n const point = controlPoints[i];\n this.controlPoints[i] = new Vector4(point.x, point.y, point.z, point.w);\n }\n }\n getPoint(t, optionalTarget) {\n const point = optionalTarget || new Vector3();\n const u = this.knots[this.startKnot] + t * (this.knots[this.endKnot] - this.knots[this.startKnot]);\n const hpoint = calcBSplinePoint(this.degree, this.knots, this.controlPoints, u);\n if (hpoint.w != 1) {\n hpoint.divideScalar(hpoint.w);\n }\n return point.set(hpoint.x, hpoint.y, hpoint.z);\n }\n getTangent(t, optionalTarget) {\n const tangent = optionalTarget || new Vector3();\n const u = this.knots[0] + t * (this.knots[this.knots.length - 1] - this.knots[0]);\n const ders = calcNURBSDerivatives(this.degree, this.knots, this.controlPoints, u, 1);\n tangent.copy(ders[1]).normalize();\n return tangent;\n }\n}\nexport {\n NURBSCurve\n};\n//# sourceMappingURL=NURBSCurve.js.map\n","import { Loader, LoaderUtils, FileLoader, TextureLoader, RepeatWrapping, ClampToEdgeWrapping, Texture, MeshPhongMaterial, MeshLambertMaterial, Color, EquirectangularReflectionMapping, Matrix4, Group, Bone, PropertyBinding, Object3D, OrthographicCamera, PerspectiveCamera, PointLight, MathUtils, SpotLight, DirectionalLight, SkinnedMesh, Mesh, LineBasicMaterial, Line, Vector3, Skeleton, AmbientLight, BufferGeometry, Float32BufferAttribute, Uint16BufferAttribute, Matrix3, Vector4, AnimationClip, Quaternion, Euler, VectorKeyframeTrack, QuaternionKeyframeTrack, NumberKeyframeTrack } from \"three\";\nimport { unzlibSync } from \"fflate\";\nimport { NURBSCurve } from \"../curves/NURBSCurve.js\";\nimport { decodeText } from \"../_polyfill/LoaderUtils.js\";\nimport { UV1 } from \"../_polyfill/uv1.js\";\nlet fbxTree;\nlet connections;\nlet sceneGraph;\nclass FBXLoader extends Loader {\n constructor(manager) {\n super(manager);\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const path = scope.path === \"\" ? LoaderUtils.extractUrlBase(url) : scope.path;\n const loader = new FileLoader(this.manager);\n loader.setPath(scope.path);\n loader.setResponseType(\"arraybuffer\");\n loader.setRequestHeader(scope.requestHeader);\n loader.setWithCredentials(scope.withCredentials);\n loader.load(\n url,\n function(buffer) {\n try {\n onLoad(scope.parse(buffer, path));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(FBXBuffer, path) {\n if (isFbxFormatBinary(FBXBuffer)) {\n fbxTree = new BinaryParser().parse(FBXBuffer);\n } else {\n const FBXText = convertArrayBufferToString(FBXBuffer);\n if (!isFbxFormatASCII(FBXText)) {\n throw new Error(\"THREE.FBXLoader: Unknown format.\");\n }\n if (getFbxVersion(FBXText) < 7e3) {\n throw new Error(\"THREE.FBXLoader: FBX version not supported, FileVersion: \" + getFbxVersion(FBXText));\n }\n fbxTree = new TextParser().parse(FBXText);\n }\n const textureLoader = new TextureLoader(this.manager).setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin);\n return new FBXTreeParser(textureLoader, this.manager).parse(fbxTree);\n }\n}\nclass FBXTreeParser {\n constructor(textureLoader, manager) {\n this.textureLoader = textureLoader;\n this.manager = manager;\n }\n parse() {\n connections = this.parseConnections();\n const images = this.parseImages();\n const textures = this.parseTextures(images);\n const materials = this.parseMaterials(textures);\n const deformers = this.parseDeformers();\n const geometryMap = new GeometryParser().parse(deformers);\n this.parseScene(deformers, geometryMap, materials);\n return sceneGraph;\n }\n // Parses FBXTree.Connections which holds parent-child connections between objects (e.g. material -> texture, model->geometry )\n // and details the connection type\n parseConnections() {\n const connectionMap = /* @__PURE__ */ new Map();\n if (\"Connections\" in fbxTree) {\n const rawConnections = fbxTree.Connections.connections;\n rawConnections.forEach(function(rawConnection) {\n const fromID = rawConnection[0];\n const toID = rawConnection[1];\n const relationship = rawConnection[2];\n if (!connectionMap.has(fromID)) {\n connectionMap.set(fromID, {\n parents: [],\n children: []\n });\n }\n const parentRelationship = { ID: toID, relationship };\n connectionMap.get(fromID).parents.push(parentRelationship);\n if (!connectionMap.has(toID)) {\n connectionMap.set(toID, {\n parents: [],\n children: []\n });\n }\n const childRelationship = { ID: fromID, relationship };\n connectionMap.get(toID).children.push(childRelationship);\n });\n }\n return connectionMap;\n }\n // Parse FBXTree.Objects.Video for embedded image data\n // These images are connected to textures in FBXTree.Objects.Textures\n // via FBXTree.Connections.\n parseImages() {\n const images = {};\n const blobs = {};\n if (\"Video\" in fbxTree.Objects) {\n const videoNodes = fbxTree.Objects.Video;\n for (const nodeID in videoNodes) {\n const videoNode = videoNodes[nodeID];\n const id = parseInt(nodeID);\n images[id] = videoNode.RelativeFilename || videoNode.Filename;\n if (\"Content\" in videoNode) {\n const arrayBufferContent = videoNode.Content instanceof ArrayBuffer && videoNode.Content.byteLength > 0;\n const base64Content = typeof videoNode.Content === \"string\" && videoNode.Content !== \"\";\n if (arrayBufferContent || base64Content) {\n const image = this.parseImage(videoNodes[nodeID]);\n blobs[videoNode.RelativeFilename || videoNode.Filename] = image;\n }\n }\n }\n }\n for (const id in images) {\n const filename = images[id];\n if (blobs[filename] !== void 0)\n images[id] = blobs[filename];\n else\n images[id] = images[id].split(\"\\\\\").pop();\n }\n return images;\n }\n // Parse embedded image data in FBXTree.Video.Content\n parseImage(videoNode) {\n const content = videoNode.Content;\n const fileName = videoNode.RelativeFilename || videoNode.Filename;\n const extension = fileName.slice(fileName.lastIndexOf(\".\") + 1).toLowerCase();\n let type;\n switch (extension) {\n case \"bmp\":\n type = \"image/bmp\";\n break;\n case \"jpg\":\n case \"jpeg\":\n type = \"image/jpeg\";\n break;\n case \"png\":\n type = \"image/png\";\n break;\n case \"tif\":\n type = \"image/tiff\";\n break;\n case \"tga\":\n if (this.manager.getHandler(\".tga\") === null) {\n console.warn(\"FBXLoader: TGA loader not found, skipping \", fileName);\n }\n type = \"image/tga\";\n break;\n default:\n console.warn('FBXLoader: Image type \"' + extension + '\" is not supported.');\n return;\n }\n if (typeof content === \"string\") {\n return \"data:\" + type + \";base64,\" + content;\n } else {\n const array = new Uint8Array(content);\n return window.URL.createObjectURL(new Blob([array], { type }));\n }\n }\n // Parse nodes in FBXTree.Objects.Texture\n // These contain details such as UV scaling, cropping, rotation etc and are connected\n // to images in FBXTree.Objects.Video\n parseTextures(images) {\n const textureMap = /* @__PURE__ */ new Map();\n if (\"Texture\" in fbxTree.Objects) {\n const textureNodes = fbxTree.Objects.Texture;\n for (const nodeID in textureNodes) {\n const texture = this.parseTexture(textureNodes[nodeID], images);\n textureMap.set(parseInt(nodeID), texture);\n }\n }\n return textureMap;\n }\n // Parse individual node in FBXTree.Objects.Texture\n parseTexture(textureNode, images) {\n const texture = this.loadTexture(textureNode, images);\n texture.ID = textureNode.id;\n texture.name = textureNode.attrName;\n const wrapModeU = textureNode.WrapModeU;\n const wrapModeV = textureNode.WrapModeV;\n const valueU = wrapModeU !== void 0 ? wrapModeU.value : 0;\n const valueV = wrapModeV !== void 0 ? wrapModeV.value : 0;\n texture.wrapS = valueU === 0 ? RepeatWrapping : ClampToEdgeWrapping;\n texture.wrapT = valueV === 0 ? RepeatWrapping : ClampToEdgeWrapping;\n if (\"Scaling\" in textureNode) {\n const values = textureNode.Scaling.value;\n texture.repeat.x = values[0];\n texture.repeat.y = values[1];\n }\n return texture;\n }\n // load a texture specified as a blob or data URI, or via an external URL using TextureLoader\n loadTexture(textureNode, images) {\n let fileName;\n const currentPath = this.textureLoader.path;\n const children = connections.get(textureNode.id).children;\n if (children !== void 0 && children.length > 0 && images[children[0].ID] !== void 0) {\n fileName = images[children[0].ID];\n if (fileName.indexOf(\"blob:\") === 0 || fileName.indexOf(\"data:\") === 0) {\n this.textureLoader.setPath(void 0);\n }\n }\n let texture;\n const extension = textureNode.FileName.slice(-3).toLowerCase();\n if (extension === \"tga\") {\n const loader = this.manager.getHandler(\".tga\");\n if (loader === null) {\n console.warn(\"FBXLoader: TGA loader not found, creating placeholder texture for\", textureNode.RelativeFilename);\n texture = new Texture();\n } else {\n loader.setPath(this.textureLoader.path);\n texture = loader.load(fileName);\n }\n } else if (extension === \"psd\") {\n console.warn(\n \"FBXLoader: PSD textures are not supported, creating placeholder texture for\",\n textureNode.RelativeFilename\n );\n texture = new Texture();\n } else {\n texture = this.textureLoader.load(fileName);\n }\n this.textureLoader.setPath(currentPath);\n return texture;\n }\n // Parse nodes in FBXTree.Objects.Material\n parseMaterials(textureMap) {\n const materialMap = /* @__PURE__ */ new Map();\n if (\"Material\" in fbxTree.Objects) {\n const materialNodes = fbxTree.Objects.Material;\n for (const nodeID in materialNodes) {\n const material = this.parseMaterial(materialNodes[nodeID], textureMap);\n if (material !== null)\n materialMap.set(parseInt(nodeID), material);\n }\n }\n return materialMap;\n }\n // Parse single node in FBXTree.Objects.Material\n // Materials are connected to texture maps in FBXTree.Objects.Textures\n // FBX format currently only supports Lambert and Phong shading models\n parseMaterial(materialNode, textureMap) {\n const ID = materialNode.id;\n const name = materialNode.attrName;\n let type = materialNode.ShadingModel;\n if (typeof type === \"object\") {\n type = type.value;\n }\n if (!connections.has(ID))\n return null;\n const parameters = this.parseParameters(materialNode, textureMap, ID);\n let material;\n switch (type.toLowerCase()) {\n case \"phong\":\n material = new MeshPhongMaterial();\n break;\n case \"lambert\":\n material = new MeshLambertMaterial();\n break;\n default:\n console.warn('THREE.FBXLoader: unknown material type \"%s\". Defaulting to MeshPhongMaterial.', type);\n material = new MeshPhongMaterial();\n break;\n }\n material.setValues(parameters);\n material.name = name;\n return material;\n }\n // Parse FBX material and return parameters suitable for a three.js material\n // Also parse the texture map and return any textures associated with the material\n parseParameters(materialNode, textureMap, ID) {\n const parameters = {};\n if (materialNode.BumpFactor) {\n parameters.bumpScale = materialNode.BumpFactor.value;\n }\n if (materialNode.Diffuse) {\n parameters.color = new Color().fromArray(materialNode.Diffuse.value);\n } else if (materialNode.DiffuseColor && (materialNode.DiffuseColor.type === \"Color\" || materialNode.DiffuseColor.type === \"ColorRGB\")) {\n parameters.color = new Color().fromArray(materialNode.DiffuseColor.value);\n }\n if (materialNode.DisplacementFactor) {\n parameters.displacementScale = materialNode.DisplacementFactor.value;\n }\n if (materialNode.Emissive) {\n parameters.emissive = new Color().fromArray(materialNode.Emissive.value);\n } else if (materialNode.EmissiveColor && (materialNode.EmissiveColor.type === \"Color\" || materialNode.EmissiveColor.type === \"ColorRGB\")) {\n parameters.emissive = new Color().fromArray(materialNode.EmissiveColor.value);\n }\n if (materialNode.EmissiveFactor) {\n parameters.emissiveIntensity = parseFloat(materialNode.EmissiveFactor.value);\n }\n if (materialNode.Opacity) {\n parameters.opacity = parseFloat(materialNode.Opacity.value);\n }\n if (parameters.opacity < 1) {\n parameters.transparent = true;\n }\n if (materialNode.ReflectionFactor) {\n parameters.reflectivity = materialNode.ReflectionFactor.value;\n }\n if (materialNode.Shininess) {\n parameters.shininess = materialNode.Shininess.value;\n }\n if (materialNode.Specular) {\n parameters.specular = new Color().fromArray(materialNode.Specular.value);\n } else if (materialNode.SpecularColor && materialNode.SpecularColor.type === \"Color\") {\n parameters.specular = new Color().fromArray(materialNode.SpecularColor.value);\n }\n const scope = this;\n connections.get(ID).children.forEach(function(child) {\n const type = child.relationship;\n switch (type) {\n case \"Bump\":\n parameters.bumpMap = scope.getTexture(textureMap, child.ID);\n break;\n case \"Maya|TEX_ao_map\":\n parameters.aoMap = scope.getTexture(textureMap, child.ID);\n break;\n case \"DiffuseColor\":\n case \"Maya|TEX_color_map\":\n parameters.map = scope.getTexture(textureMap, child.ID);\n if (parameters.map !== void 0) {\n if (\"colorSpace\" in parameters.map)\n parameters.map.colorSpace = \"srgb\";\n else\n parameters.map.encoding = 3001;\n }\n break;\n case \"DisplacementColor\":\n parameters.displacementMap = scope.getTexture(textureMap, child.ID);\n break;\n case \"EmissiveColor\":\n parameters.emissiveMap = scope.getTexture(textureMap, child.ID);\n if (parameters.emissiveMap !== void 0) {\n if (\"colorSpace\" in parameters.emissiveMap)\n parameters.emissiveMap.colorSpace = \"srgb\";\n else\n parameters.emissiveMap.encoding = 3001;\n }\n break;\n case \"NormalMap\":\n case \"Maya|TEX_normal_map\":\n parameters.normalMap = scope.getTexture(textureMap, child.ID);\n break;\n case \"ReflectionColor\":\n parameters.envMap = scope.getTexture(textureMap, child.ID);\n if (parameters.envMap !== void 0) {\n parameters.envMap.mapping = EquirectangularReflectionMapping;\n if (\"colorSpace\" in parameters.envMap)\n parameters.envMap.colorSpace = \"srgb\";\n else\n parameters.envMap.encoding = 3001;\n }\n break;\n case \"SpecularColor\":\n parameters.specularMap = scope.getTexture(textureMap, child.ID);\n if (parameters.specularMap !== void 0) {\n if (\"colorSpace\" in parameters.specularMap)\n parameters.specularMap.colorSpace = \"srgb\";\n else\n parameters.specularMap.encoding = 3001;\n }\n break;\n case \"TransparentColor\":\n case \"TransparencyFactor\":\n parameters.alphaMap = scope.getTexture(textureMap, child.ID);\n parameters.transparent = true;\n break;\n case \"AmbientColor\":\n case \"ShininessExponent\":\n case \"SpecularFactor\":\n case \"VectorDisplacementColor\":\n default:\n console.warn(\"THREE.FBXLoader: %s map is not supported in three.js, skipping texture.\", type);\n break;\n }\n });\n return parameters;\n }\n // get a texture from the textureMap for use by a material.\n getTexture(textureMap, id) {\n if (\"LayeredTexture\" in fbxTree.Objects && id in fbxTree.Objects.LayeredTexture) {\n console.warn(\"THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer.\");\n id = connections.get(id).children[0].ID;\n }\n return textureMap.get(id);\n }\n // Parse nodes in FBXTree.Objects.Deformer\n // Deformer node can contain skinning or Vertex Cache animation data, however only skinning is supported here\n // Generates map of Skeleton-like objects for use later when generating and binding skeletons.\n parseDeformers() {\n const skeletons = {};\n const morphTargets = {};\n if (\"Deformer\" in fbxTree.Objects) {\n const DeformerNodes = fbxTree.Objects.Deformer;\n for (const nodeID in DeformerNodes) {\n const deformerNode = DeformerNodes[nodeID];\n const relationships = connections.get(parseInt(nodeID));\n if (deformerNode.attrType === \"Skin\") {\n const skeleton = this.parseSkeleton(relationships, DeformerNodes);\n skeleton.ID = nodeID;\n if (relationships.parents.length > 1) {\n console.warn(\"THREE.FBXLoader: skeleton attached to more than one geometry is not supported.\");\n }\n skeleton.geometryID = relationships.parents[0].ID;\n skeletons[nodeID] = skeleton;\n } else if (deformerNode.attrType === \"BlendShape\") {\n const morphTarget = {\n id: nodeID\n };\n morphTarget.rawTargets = this.parseMorphTargets(relationships, DeformerNodes);\n morphTarget.id = nodeID;\n if (relationships.parents.length > 1) {\n console.warn(\"THREE.FBXLoader: morph target attached to more than one geometry is not supported.\");\n }\n morphTargets[nodeID] = morphTarget;\n }\n }\n }\n return {\n skeletons,\n morphTargets\n };\n }\n // Parse single nodes in FBXTree.Objects.Deformer\n // The top level skeleton node has type 'Skin' and sub nodes have type 'Cluster'\n // Each skin node represents a skeleton and each cluster node represents a bone\n parseSkeleton(relationships, deformerNodes) {\n const rawBones = [];\n relationships.children.forEach(function(child) {\n const boneNode = deformerNodes[child.ID];\n if (boneNode.attrType !== \"Cluster\")\n return;\n const rawBone = {\n ID: child.ID,\n indices: [],\n weights: [],\n transformLink: new Matrix4().fromArray(boneNode.TransformLink.a)\n // transform: new Matrix4().fromArray( boneNode.Transform.a ),\n // linkMode: boneNode.Mode,\n };\n if (\"Indexes\" in boneNode) {\n rawBone.indices = boneNode.Indexes.a;\n rawBone.weights = boneNode.Weights.a;\n }\n rawBones.push(rawBone);\n });\n return {\n rawBones,\n bones: []\n };\n }\n // The top level morph deformer node has type \"BlendShape\" and sub nodes have type \"BlendShapeChannel\"\n parseMorphTargets(relationships, deformerNodes) {\n const rawMorphTargets = [];\n for (let i = 0; i < relationships.children.length; i++) {\n const child = relationships.children[i];\n const morphTargetNode = deformerNodes[child.ID];\n const rawMorphTarget = {\n name: morphTargetNode.attrName,\n initialWeight: morphTargetNode.DeformPercent,\n id: morphTargetNode.id,\n fullWeights: morphTargetNode.FullWeights.a\n };\n if (morphTargetNode.attrType !== \"BlendShapeChannel\")\n return;\n rawMorphTarget.geoID = connections.get(parseInt(child.ID)).children.filter(function(child2) {\n return child2.relationship === void 0;\n })[0].ID;\n rawMorphTargets.push(rawMorphTarget);\n }\n return rawMorphTargets;\n }\n // create the main Group() to be returned by the loader\n parseScene(deformers, geometryMap, materialMap) {\n sceneGraph = new Group();\n const modelMap = this.parseModels(deformers.skeletons, geometryMap, materialMap);\n const modelNodes = fbxTree.Objects.Model;\n const scope = this;\n modelMap.forEach(function(model) {\n const modelNode = modelNodes[model.ID];\n scope.setLookAtProperties(model, modelNode);\n const parentConnections = connections.get(model.ID).parents;\n parentConnections.forEach(function(connection) {\n const parent = modelMap.get(connection.ID);\n if (parent !== void 0)\n parent.add(model);\n });\n if (model.parent === null) {\n sceneGraph.add(model);\n }\n });\n this.bindSkeleton(deformers.skeletons, geometryMap, modelMap);\n this.createAmbientLight();\n sceneGraph.traverse(function(node) {\n if (node.userData.transformData) {\n if (node.parent) {\n node.userData.transformData.parentMatrix = node.parent.matrix;\n node.userData.transformData.parentMatrixWorld = node.parent.matrixWorld;\n }\n const transform = generateTransform(node.userData.transformData);\n node.applyMatrix4(transform);\n node.updateWorldMatrix();\n }\n });\n const animations = new AnimationParser().parse();\n if (sceneGraph.children.length === 1 && sceneGraph.children[0].isGroup) {\n sceneGraph.children[0].animations = animations;\n sceneGraph = sceneGraph.children[0];\n }\n sceneGraph.animations = animations;\n }\n // parse nodes in FBXTree.Objects.Model\n parseModels(skeletons, geometryMap, materialMap) {\n const modelMap = /* @__PURE__ */ new Map();\n const modelNodes = fbxTree.Objects.Model;\n for (const nodeID in modelNodes) {\n const id = parseInt(nodeID);\n const node = modelNodes[nodeID];\n const relationships = connections.get(id);\n let model = this.buildSkeleton(relationships, skeletons, id, node.attrName);\n if (!model) {\n switch (node.attrType) {\n case \"Camera\":\n model = this.createCamera(relationships);\n break;\n case \"Light\":\n model = this.createLight(relationships);\n break;\n case \"Mesh\":\n model = this.createMesh(relationships, geometryMap, materialMap);\n break;\n case \"NurbsCurve\":\n model = this.createCurve(relationships, geometryMap);\n break;\n case \"LimbNode\":\n case \"Root\":\n model = new Bone();\n break;\n case \"Null\":\n default:\n model = new Group();\n break;\n }\n model.name = node.attrName ? PropertyBinding.sanitizeNodeName(node.attrName) : \"\";\n model.ID = id;\n }\n this.getTransformData(model, node);\n modelMap.set(id, model);\n }\n return modelMap;\n }\n buildSkeleton(relationships, skeletons, id, name) {\n let bone = null;\n relationships.parents.forEach(function(parent) {\n for (const ID in skeletons) {\n const skeleton = skeletons[ID];\n skeleton.rawBones.forEach(function(rawBone, i) {\n if (rawBone.ID === parent.ID) {\n const subBone = bone;\n bone = new Bone();\n bone.matrixWorld.copy(rawBone.transformLink);\n bone.name = name ? PropertyBinding.sanitizeNodeName(name) : \"\";\n bone.ID = id;\n skeleton.bones[i] = bone;\n if (subBone !== null) {\n bone.add(subBone);\n }\n }\n });\n }\n });\n return bone;\n }\n // create a PerspectiveCamera or OrthographicCamera\n createCamera(relationships) {\n let model;\n let cameraAttribute;\n relationships.children.forEach(function(child) {\n const attr = fbxTree.Objects.NodeAttribute[child.ID];\n if (attr !== void 0) {\n cameraAttribute = attr;\n }\n });\n if (cameraAttribute === void 0) {\n model = new Object3D();\n } else {\n let type = 0;\n if (cameraAttribute.CameraProjectionType !== void 0 && cameraAttribute.CameraProjectionType.value === 1) {\n type = 1;\n }\n let nearClippingPlane = 1;\n if (cameraAttribute.NearPlane !== void 0) {\n nearClippingPlane = cameraAttribute.NearPlane.value / 1e3;\n }\n let farClippingPlane = 1e3;\n if (cameraAttribute.FarPlane !== void 0) {\n farClippingPlane = cameraAttribute.FarPlane.value / 1e3;\n }\n let width = window.innerWidth;\n let height = window.innerHeight;\n if (cameraAttribute.AspectWidth !== void 0 && cameraAttribute.AspectHeight !== void 0) {\n width = cameraAttribute.AspectWidth.value;\n height = cameraAttribute.AspectHeight.value;\n }\n const aspect = width / height;\n let fov = 45;\n if (cameraAttribute.FieldOfView !== void 0) {\n fov = cameraAttribute.FieldOfView.value;\n }\n const focalLength = cameraAttribute.FocalLength ? cameraAttribute.FocalLength.value : null;\n switch (type) {\n case 0:\n model = new PerspectiveCamera(fov, aspect, nearClippingPlane, farClippingPlane);\n if (focalLength !== null)\n model.setFocalLength(focalLength);\n break;\n case 1:\n model = new OrthographicCamera(\n -width / 2,\n width / 2,\n height / 2,\n -height / 2,\n nearClippingPlane,\n farClippingPlane\n );\n break;\n default:\n console.warn(\"THREE.FBXLoader: Unknown camera type \" + type + \".\");\n model = new Object3D();\n break;\n }\n }\n return model;\n }\n // Create a DirectionalLight, PointLight or SpotLight\n createLight(relationships) {\n let model;\n let lightAttribute;\n relationships.children.forEach(function(child) {\n const attr = fbxTree.Objects.NodeAttribute[child.ID];\n if (attr !== void 0) {\n lightAttribute = attr;\n }\n });\n if (lightAttribute === void 0) {\n model = new Object3D();\n } else {\n let type;\n if (lightAttribute.LightType === void 0) {\n type = 0;\n } else {\n type = lightAttribute.LightType.value;\n }\n let color = 16777215;\n if (lightAttribute.Color !== void 0) {\n color = new Color().fromArray(lightAttribute.Color.value);\n }\n let intensity = lightAttribute.Intensity === void 0 ? 1 : lightAttribute.Intensity.value / 100;\n if (lightAttribute.CastLightOnObject !== void 0 && lightAttribute.CastLightOnObject.value === 0) {\n intensity = 0;\n }\n let distance = 0;\n if (lightAttribute.FarAttenuationEnd !== void 0) {\n if (lightAttribute.EnableFarAttenuation !== void 0 && lightAttribute.EnableFarAttenuation.value === 0) {\n distance = 0;\n } else {\n distance = lightAttribute.FarAttenuationEnd.value;\n }\n }\n const decay = 1;\n switch (type) {\n case 0:\n model = new PointLight(color, intensity, distance, decay);\n break;\n case 1:\n model = new DirectionalLight(color, intensity);\n break;\n case 2:\n let angle = Math.PI / 3;\n if (lightAttribute.InnerAngle !== void 0) {\n angle = MathUtils.degToRad(lightAttribute.InnerAngle.value);\n }\n let penumbra = 0;\n if (lightAttribute.OuterAngle !== void 0) {\n penumbra = MathUtils.degToRad(lightAttribute.OuterAngle.value);\n penumbra = Math.max(penumbra, 1);\n }\n model = new SpotLight(color, intensity, distance, angle, penumbra, decay);\n break;\n default:\n console.warn(\n \"THREE.FBXLoader: Unknown light type \" + lightAttribute.LightType.value + \", defaulting to a PointLight.\"\n );\n model = new PointLight(color, intensity);\n break;\n }\n if (lightAttribute.CastShadows !== void 0 && lightAttribute.CastShadows.value === 1) {\n model.castShadow = true;\n }\n }\n return model;\n }\n createMesh(relationships, geometryMap, materialMap) {\n let model;\n let geometry = null;\n let material = null;\n const materials = [];\n relationships.children.forEach(function(child) {\n if (geometryMap.has(child.ID)) {\n geometry = geometryMap.get(child.ID);\n }\n if (materialMap.has(child.ID)) {\n materials.push(materialMap.get(child.ID));\n }\n });\n if (materials.length > 1) {\n material = materials;\n } else if (materials.length > 0) {\n material = materials[0];\n } else {\n material = new MeshPhongMaterial({ color: 13421772 });\n materials.push(material);\n }\n if (\"color\" in geometry.attributes) {\n materials.forEach(function(material2) {\n material2.vertexColors = true;\n });\n }\n if (geometry.FBX_Deformer) {\n model = new SkinnedMesh(geometry, material);\n model.normalizeSkinWeights();\n } else {\n model = new Mesh(geometry, material);\n }\n return model;\n }\n createCurve(relationships, geometryMap) {\n const geometry = relationships.children.reduce(function(geo, child) {\n if (geometryMap.has(child.ID))\n geo = geometryMap.get(child.ID);\n return geo;\n }, null);\n const material = new LineBasicMaterial({ color: 3342591, linewidth: 1 });\n return new Line(geometry, material);\n }\n // parse the model node for transform data\n getTransformData(model, modelNode) {\n const transformData = {};\n if (\"InheritType\" in modelNode)\n transformData.inheritType = parseInt(modelNode.InheritType.value);\n if (\"RotationOrder\" in modelNode)\n transformData.eulerOrder = getEulerOrder(modelNode.RotationOrder.value);\n else\n transformData.eulerOrder = \"ZYX\";\n if (\"Lcl_Translation\" in modelNode)\n transformData.translation = modelNode.Lcl_Translation.value;\n if (\"PreRotation\" in modelNode)\n transformData.preRotation = modelNode.PreRotation.value;\n if (\"Lcl_Rotation\" in modelNode)\n transformData.rotation = modelNode.Lcl_Rotation.value;\n if (\"PostRotation\" in modelNode)\n transformData.postRotation = modelNode.PostRotation.value;\n if (\"Lcl_Scaling\" in modelNode)\n transformData.scale = modelNode.Lcl_Scaling.value;\n if (\"ScalingOffset\" in modelNode)\n transformData.scalingOffset = modelNode.ScalingOffset.value;\n if (\"ScalingPivot\" in modelNode)\n transformData.scalingPivot = modelNode.ScalingPivot.value;\n if (\"RotationOffset\" in modelNode)\n transformData.rotationOffset = modelNode.RotationOffset.value;\n if (\"RotationPivot\" in modelNode)\n transformData.rotationPivot = modelNode.RotationPivot.value;\n model.userData.transformData = transformData;\n }\n setLookAtProperties(model, modelNode) {\n if (\"LookAtProperty\" in modelNode) {\n const children = connections.get(model.ID).children;\n children.forEach(function(child) {\n if (child.relationship === \"LookAtProperty\") {\n const lookAtTarget = fbxTree.Objects.Model[child.ID];\n if (\"Lcl_Translation\" in lookAtTarget) {\n const pos = lookAtTarget.Lcl_Translation.value;\n if (model.target !== void 0) {\n model.target.position.fromArray(pos);\n sceneGraph.add(model.target);\n } else {\n model.lookAt(new Vector3().fromArray(pos));\n }\n }\n }\n });\n }\n }\n bindSkeleton(skeletons, geometryMap, modelMap) {\n const bindMatrices = this.parsePoseNodes();\n for (const ID in skeletons) {\n const skeleton = skeletons[ID];\n const parents = connections.get(parseInt(skeleton.ID)).parents;\n parents.forEach(function(parent) {\n if (geometryMap.has(parent.ID)) {\n const geoID = parent.ID;\n const geoRelationships = connections.get(geoID);\n geoRelationships.parents.forEach(function(geoConnParent) {\n if (modelMap.has(geoConnParent.ID)) {\n const model = modelMap.get(geoConnParent.ID);\n model.bind(new Skeleton(skeleton.bones), bindMatrices[geoConnParent.ID]);\n }\n });\n }\n });\n }\n }\n parsePoseNodes() {\n const bindMatrices = {};\n if (\"Pose\" in fbxTree.Objects) {\n const BindPoseNode = fbxTree.Objects.Pose;\n for (const nodeID in BindPoseNode) {\n if (BindPoseNode[nodeID].attrType === \"BindPose\" && BindPoseNode[nodeID].NbPoseNodes > 0) {\n const poseNodes = BindPoseNode[nodeID].PoseNode;\n if (Array.isArray(poseNodes)) {\n poseNodes.forEach(function(poseNode) {\n bindMatrices[poseNode.Node] = new Matrix4().fromArray(poseNode.Matrix.a);\n });\n } else {\n bindMatrices[poseNodes.Node] = new Matrix4().fromArray(poseNodes.Matrix.a);\n }\n }\n }\n }\n return bindMatrices;\n }\n // Parse ambient color in FBXTree.GlobalSettings - if it's not set to black (default), create an ambient light\n createAmbientLight() {\n if (\"GlobalSettings\" in fbxTree && \"AmbientColor\" in fbxTree.GlobalSettings) {\n const ambientColor = fbxTree.GlobalSettings.AmbientColor.value;\n const r = ambientColor[0];\n const g = ambientColor[1];\n const b = ambientColor[2];\n if (r !== 0 || g !== 0 || b !== 0) {\n const color = new Color(r, g, b);\n sceneGraph.add(new AmbientLight(color, 1));\n }\n }\n }\n}\nclass GeometryParser {\n // Parse nodes in FBXTree.Objects.Geometry\n parse(deformers) {\n const geometryMap = /* @__PURE__ */ new Map();\n if (\"Geometry\" in fbxTree.Objects) {\n const geoNodes = fbxTree.Objects.Geometry;\n for (const nodeID in geoNodes) {\n const relationships = connections.get(parseInt(nodeID));\n const geo = this.parseGeometry(relationships, geoNodes[nodeID], deformers);\n geometryMap.set(parseInt(nodeID), geo);\n }\n }\n return geometryMap;\n }\n // Parse single node in FBXTree.Objects.Geometry\n parseGeometry(relationships, geoNode, deformers) {\n switch (geoNode.attrType) {\n case \"Mesh\":\n return this.parseMeshGeometry(relationships, geoNode, deformers);\n case \"NurbsCurve\":\n return this.parseNurbsGeometry(geoNode);\n }\n }\n // Parse single node mesh geometry in FBXTree.Objects.Geometry\n parseMeshGeometry(relationships, geoNode, deformers) {\n const skeletons = deformers.skeletons;\n const morphTargets = [];\n const modelNodes = relationships.parents.map(function(parent) {\n return fbxTree.Objects.Model[parent.ID];\n });\n if (modelNodes.length === 0)\n return;\n const skeleton = relationships.children.reduce(function(skeleton2, child) {\n if (skeletons[child.ID] !== void 0)\n skeleton2 = skeletons[child.ID];\n return skeleton2;\n }, null);\n relationships.children.forEach(function(child) {\n if (deformers.morphTargets[child.ID] !== void 0) {\n morphTargets.push(deformers.morphTargets[child.ID]);\n }\n });\n const modelNode = modelNodes[0];\n const transformData = {};\n if (\"RotationOrder\" in modelNode)\n transformData.eulerOrder = getEulerOrder(modelNode.RotationOrder.value);\n if (\"InheritType\" in modelNode)\n transformData.inheritType = parseInt(modelNode.InheritType.value);\n if (\"GeometricTranslation\" in modelNode)\n transformData.translation = modelNode.GeometricTranslation.value;\n if (\"GeometricRotation\" in modelNode)\n transformData.rotation = modelNode.GeometricRotation.value;\n if (\"GeometricScaling\" in modelNode)\n transformData.scale = modelNode.GeometricScaling.value;\n const transform = generateTransform(transformData);\n return this.genGeometry(geoNode, skeleton, morphTargets, transform);\n }\n // Generate a BufferGeometry from a node in FBXTree.Objects.Geometry\n genGeometry(geoNode, skeleton, morphTargets, preTransform) {\n const geo = new BufferGeometry();\n if (geoNode.attrName)\n geo.name = geoNode.attrName;\n const geoInfo = this.parseGeoNode(geoNode, skeleton);\n const buffers = this.genBuffers(geoInfo);\n const positionAttribute = new Float32BufferAttribute(buffers.vertex, 3);\n positionAttribute.applyMatrix4(preTransform);\n geo.setAttribute(\"position\", positionAttribute);\n if (buffers.colors.length > 0) {\n geo.setAttribute(\"color\", new Float32BufferAttribute(buffers.colors, 3));\n }\n if (skeleton) {\n geo.setAttribute(\"skinIndex\", new Uint16BufferAttribute(buffers.weightsIndices, 4));\n geo.setAttribute(\"skinWeight\", new Float32BufferAttribute(buffers.vertexWeights, 4));\n geo.FBX_Deformer = skeleton;\n }\n if (buffers.normal.length > 0) {\n const normalMatrix = new Matrix3().getNormalMatrix(preTransform);\n const normalAttribute = new Float32BufferAttribute(buffers.normal, 3);\n normalAttribute.applyNormalMatrix(normalMatrix);\n geo.setAttribute(\"normal\", normalAttribute);\n }\n buffers.uvs.forEach(function(uvBuffer, i) {\n if (UV1 === \"uv2\")\n i++;\n const name = i === 0 ? \"uv\" : `uv${i}`;\n geo.setAttribute(name, new Float32BufferAttribute(buffers.uvs[i], 2));\n });\n if (geoInfo.material && geoInfo.material.mappingType !== \"AllSame\") {\n let prevMaterialIndex = buffers.materialIndex[0];\n let startIndex = 0;\n buffers.materialIndex.forEach(function(currentIndex, i) {\n if (currentIndex !== prevMaterialIndex) {\n geo.addGroup(startIndex, i - startIndex, prevMaterialIndex);\n prevMaterialIndex = currentIndex;\n startIndex = i;\n }\n });\n if (geo.groups.length > 0) {\n const lastGroup = geo.groups[geo.groups.length - 1];\n const lastIndex = lastGroup.start + lastGroup.count;\n if (lastIndex !== buffers.materialIndex.length) {\n geo.addGroup(lastIndex, buffers.materialIndex.length - lastIndex, prevMaterialIndex);\n }\n }\n if (geo.groups.length === 0) {\n geo.addGroup(0, buffers.materialIndex.length, buffers.materialIndex[0]);\n }\n }\n this.addMorphTargets(geo, geoNode, morphTargets, preTransform);\n return geo;\n }\n parseGeoNode(geoNode, skeleton) {\n const geoInfo = {};\n geoInfo.vertexPositions = geoNode.Vertices !== void 0 ? geoNode.Vertices.a : [];\n geoInfo.vertexIndices = geoNode.PolygonVertexIndex !== void 0 ? geoNode.PolygonVertexIndex.a : [];\n if (geoNode.LayerElementColor) {\n geoInfo.color = this.parseVertexColors(geoNode.LayerElementColor[0]);\n }\n if (geoNode.LayerElementMaterial) {\n geoInfo.material = this.parseMaterialIndices(geoNode.LayerElementMaterial[0]);\n }\n if (geoNode.LayerElementNormal) {\n geoInfo.normal = this.parseNormals(geoNode.LayerElementNormal[0]);\n }\n if (geoNode.LayerElementUV) {\n geoInfo.uv = [];\n let i = 0;\n while (geoNode.LayerElementUV[i]) {\n if (geoNode.LayerElementUV[i].UV) {\n geoInfo.uv.push(this.parseUVs(geoNode.LayerElementUV[i]));\n }\n i++;\n }\n }\n geoInfo.weightTable = {};\n if (skeleton !== null) {\n geoInfo.skeleton = skeleton;\n skeleton.rawBones.forEach(function(rawBone, i) {\n rawBone.indices.forEach(function(index, j) {\n if (geoInfo.weightTable[index] === void 0)\n geoInfo.weightTable[index] = [];\n geoInfo.weightTable[index].push({\n id: i,\n weight: rawBone.weights[j]\n });\n });\n });\n }\n return geoInfo;\n }\n genBuffers(geoInfo) {\n const buffers = {\n vertex: [],\n normal: [],\n colors: [],\n uvs: [],\n materialIndex: [],\n vertexWeights: [],\n weightsIndices: []\n };\n let polygonIndex = 0;\n let faceLength = 0;\n let displayedWeightsWarning = false;\n let facePositionIndexes = [];\n let faceNormals = [];\n let faceColors = [];\n let faceUVs = [];\n let faceWeights = [];\n let faceWeightIndices = [];\n const scope = this;\n geoInfo.vertexIndices.forEach(function(vertexIndex, polygonVertexIndex) {\n let materialIndex;\n let endOfFace = false;\n if (vertexIndex < 0) {\n vertexIndex = vertexIndex ^ -1;\n endOfFace = true;\n }\n let weightIndices = [];\n let weights = [];\n facePositionIndexes.push(vertexIndex * 3, vertexIndex * 3 + 1, vertexIndex * 3 + 2);\n if (geoInfo.color) {\n const data = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.color);\n faceColors.push(data[0], data[1], data[2]);\n }\n if (geoInfo.skeleton) {\n if (geoInfo.weightTable[vertexIndex] !== void 0) {\n geoInfo.weightTable[vertexIndex].forEach(function(wt) {\n weights.push(wt.weight);\n weightIndices.push(wt.id);\n });\n }\n if (weights.length > 4) {\n if (!displayedWeightsWarning) {\n console.warn(\n \"THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights.\"\n );\n displayedWeightsWarning = true;\n }\n const wIndex = [0, 0, 0, 0];\n const Weight = [0, 0, 0, 0];\n weights.forEach(function(weight, weightIndex) {\n let currentWeight = weight;\n let currentIndex = weightIndices[weightIndex];\n Weight.forEach(function(comparedWeight, comparedWeightIndex, comparedWeightArray) {\n if (currentWeight > comparedWeight) {\n comparedWeightArray[comparedWeightIndex] = currentWeight;\n currentWeight = comparedWeight;\n const tmp = wIndex[comparedWeightIndex];\n wIndex[comparedWeightIndex] = currentIndex;\n currentIndex = tmp;\n }\n });\n });\n weightIndices = wIndex;\n weights = Weight;\n }\n while (weights.length < 4) {\n weights.push(0);\n weightIndices.push(0);\n }\n for (let i = 0; i < 4; ++i) {\n faceWeights.push(weights[i]);\n faceWeightIndices.push(weightIndices[i]);\n }\n }\n if (geoInfo.normal) {\n const data = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.normal);\n faceNormals.push(data[0], data[1], data[2]);\n }\n if (geoInfo.material && geoInfo.material.mappingType !== \"AllSame\") {\n materialIndex = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.material)[0];\n }\n if (geoInfo.uv) {\n geoInfo.uv.forEach(function(uv, i) {\n const data = getData(polygonVertexIndex, polygonIndex, vertexIndex, uv);\n if (faceUVs[i] === void 0) {\n faceUVs[i] = [];\n }\n faceUVs[i].push(data[0]);\n faceUVs[i].push(data[1]);\n });\n }\n faceLength++;\n if (endOfFace) {\n scope.genFace(\n buffers,\n geoInfo,\n facePositionIndexes,\n materialIndex,\n faceNormals,\n faceColors,\n faceUVs,\n faceWeights,\n faceWeightIndices,\n faceLength\n );\n polygonIndex++;\n faceLength = 0;\n facePositionIndexes = [];\n faceNormals = [];\n faceColors = [];\n faceUVs = [];\n faceWeights = [];\n faceWeightIndices = [];\n }\n });\n return buffers;\n }\n // Generate data for a single face in a geometry. If the face is a quad then split it into 2 tris\n genFace(buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength) {\n for (let i = 2; i < faceLength; i++) {\n buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[0]]);\n buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[1]]);\n buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[2]]);\n buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[(i - 1) * 3]]);\n buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[(i - 1) * 3 + 1]]);\n buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[(i - 1) * 3 + 2]]);\n buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i * 3]]);\n buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i * 3 + 1]]);\n buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i * 3 + 2]]);\n if (geoInfo.skeleton) {\n buffers.vertexWeights.push(faceWeights[0]);\n buffers.vertexWeights.push(faceWeights[1]);\n buffers.vertexWeights.push(faceWeights[2]);\n buffers.vertexWeights.push(faceWeights[3]);\n buffers.vertexWeights.push(faceWeights[(i - 1) * 4]);\n buffers.vertexWeights.push(faceWeights[(i - 1) * 4 + 1]);\n buffers.vertexWeights.push(faceWeights[(i - 1) * 4 + 2]);\n buffers.vertexWeights.push(faceWeights[(i - 1) * 4 + 3]);\n buffers.vertexWeights.push(faceWeights[i * 4]);\n buffers.vertexWeights.push(faceWeights[i * 4 + 1]);\n buffers.vertexWeights.push(faceWeights[i * 4 + 2]);\n buffers.vertexWeights.push(faceWeights[i * 4 + 3]);\n buffers.weightsIndices.push(faceWeightIndices[0]);\n buffers.weightsIndices.push(faceWeightIndices[1]);\n buffers.weightsIndices.push(faceWeightIndices[2]);\n buffers.weightsIndices.push(faceWeightIndices[3]);\n buffers.weightsIndices.push(faceWeightIndices[(i - 1) * 4]);\n buffers.weightsIndices.push(faceWeightIndices[(i - 1) * 4 + 1]);\n buffers.weightsIndices.push(faceWeightIndices[(i - 1) * 4 + 2]);\n buffers.weightsIndices.push(faceWeightIndices[(i - 1) * 4 + 3]);\n buffers.weightsIndices.push(faceWeightIndices[i * 4]);\n buffers.weightsIndices.push(faceWeightIndices[i * 4 + 1]);\n buffers.weightsIndices.push(faceWeightIndices[i * 4 + 2]);\n buffers.weightsIndices.push(faceWeightIndices[i * 4 + 3]);\n }\n if (geoInfo.color) {\n buffers.colors.push(faceColors[0]);\n buffers.colors.push(faceColors[1]);\n buffers.colors.push(faceColors[2]);\n buffers.colors.push(faceColors[(i - 1) * 3]);\n buffers.colors.push(faceColors[(i - 1) * 3 + 1]);\n buffers.colors.push(faceColors[(i - 1) * 3 + 2]);\n buffers.colors.push(faceColors[i * 3]);\n buffers.colors.push(faceColors[i * 3 + 1]);\n buffers.colors.push(faceColors[i * 3 + 2]);\n }\n if (geoInfo.material && geoInfo.material.mappingType !== \"AllSame\") {\n buffers.materialIndex.push(materialIndex);\n buffers.materialIndex.push(materialIndex);\n buffers.materialIndex.push(materialIndex);\n }\n if (geoInfo.normal) {\n buffers.normal.push(faceNormals[0]);\n buffers.normal.push(faceNormals[1]);\n buffers.normal.push(faceNormals[2]);\n buffers.normal.push(faceNormals[(i - 1) * 3]);\n buffers.normal.push(faceNormals[(i - 1) * 3 + 1]);\n buffers.normal.push(faceNormals[(i - 1) * 3 + 2]);\n buffers.normal.push(faceNormals[i * 3]);\n buffers.normal.push(faceNormals[i * 3 + 1]);\n buffers.normal.push(faceNormals[i * 3 + 2]);\n }\n if (geoInfo.uv) {\n geoInfo.uv.forEach(function(uv, j) {\n if (buffers.uvs[j] === void 0)\n buffers.uvs[j] = [];\n buffers.uvs[j].push(faceUVs[j][0]);\n buffers.uvs[j].push(faceUVs[j][1]);\n buffers.uvs[j].push(faceUVs[j][(i - 1) * 2]);\n buffers.uvs[j].push(faceUVs[j][(i - 1) * 2 + 1]);\n buffers.uvs[j].push(faceUVs[j][i * 2]);\n buffers.uvs[j].push(faceUVs[j][i * 2 + 1]);\n });\n }\n }\n }\n addMorphTargets(parentGeo, parentGeoNode, morphTargets, preTransform) {\n if (morphTargets.length === 0)\n return;\n parentGeo.morphTargetsRelative = true;\n parentGeo.morphAttributes.position = [];\n const scope = this;\n morphTargets.forEach(function(morphTarget) {\n morphTarget.rawTargets.forEach(function(rawTarget) {\n const morphGeoNode = fbxTree.Objects.Geometry[rawTarget.geoID];\n if (morphGeoNode !== void 0) {\n scope.genMorphGeometry(parentGeo, parentGeoNode, morphGeoNode, preTransform, rawTarget.name);\n }\n });\n });\n }\n // a morph geometry node is similar to a standard node, and the node is also contained\n // in FBXTree.Objects.Geometry, however it can only have attributes for position, normal\n // and a special attribute Index defining which vertices of the original geometry are affected\n // Normal and position attributes only have data for the vertices that are affected by the morph\n genMorphGeometry(parentGeo, parentGeoNode, morphGeoNode, preTransform, name) {\n const vertexIndices = parentGeoNode.PolygonVertexIndex !== void 0 ? parentGeoNode.PolygonVertexIndex.a : [];\n const morphPositionsSparse = morphGeoNode.Vertices !== void 0 ? morphGeoNode.Vertices.a : [];\n const indices = morphGeoNode.Indexes !== void 0 ? morphGeoNode.Indexes.a : [];\n const length = parentGeo.attributes.position.count * 3;\n const morphPositions = new Float32Array(length);\n for (let i = 0; i < indices.length; i++) {\n const morphIndex = indices[i] * 3;\n morphPositions[morphIndex] = morphPositionsSparse[i * 3];\n morphPositions[morphIndex + 1] = morphPositionsSparse[i * 3 + 1];\n morphPositions[morphIndex + 2] = morphPositionsSparse[i * 3 + 2];\n }\n const morphGeoInfo = {\n vertexIndices,\n vertexPositions: morphPositions\n };\n const morphBuffers = this.genBuffers(morphGeoInfo);\n const positionAttribute = new Float32BufferAttribute(morphBuffers.vertex, 3);\n positionAttribute.name = name || morphGeoNode.attrName;\n positionAttribute.applyMatrix4(preTransform);\n parentGeo.morphAttributes.position.push(positionAttribute);\n }\n // Parse normal from FBXTree.Objects.Geometry.LayerElementNormal if it exists\n parseNormals(NormalNode) {\n const mappingType = NormalNode.MappingInformationType;\n const referenceType = NormalNode.ReferenceInformationType;\n const buffer = NormalNode.Normals.a;\n let indexBuffer = [];\n if (referenceType === \"IndexToDirect\") {\n if (\"NormalIndex\" in NormalNode) {\n indexBuffer = NormalNode.NormalIndex.a;\n } else if (\"NormalsIndex\" in NormalNode) {\n indexBuffer = NormalNode.NormalsIndex.a;\n }\n }\n return {\n dataSize: 3,\n buffer,\n indices: indexBuffer,\n mappingType,\n referenceType\n };\n }\n // Parse UVs from FBXTree.Objects.Geometry.LayerElementUV if it exists\n parseUVs(UVNode) {\n const mappingType = UVNode.MappingInformationType;\n const referenceType = UVNode.ReferenceInformationType;\n const buffer = UVNode.UV.a;\n let indexBuffer = [];\n if (referenceType === \"IndexToDirect\") {\n indexBuffer = UVNode.UVIndex.a;\n }\n return {\n dataSize: 2,\n buffer,\n indices: indexBuffer,\n mappingType,\n referenceType\n };\n }\n // Parse Vertex Colors from FBXTree.Objects.Geometry.LayerElementColor if it exists\n parseVertexColors(ColorNode) {\n const mappingType = ColorNode.MappingInformationType;\n const referenceType = ColorNode.ReferenceInformationType;\n const buffer = ColorNode.Colors.a;\n let indexBuffer = [];\n if (referenceType === \"IndexToDirect\") {\n indexBuffer = ColorNode.ColorIndex.a;\n }\n return {\n dataSize: 4,\n buffer,\n indices: indexBuffer,\n mappingType,\n referenceType\n };\n }\n // Parse mapping and material data in FBXTree.Objects.Geometry.LayerElementMaterial if it exists\n parseMaterialIndices(MaterialNode) {\n const mappingType = MaterialNode.MappingInformationType;\n const referenceType = MaterialNode.ReferenceInformationType;\n if (mappingType === \"NoMappingInformation\") {\n return {\n dataSize: 1,\n buffer: [0],\n indices: [0],\n mappingType: \"AllSame\",\n referenceType\n };\n }\n const materialIndexBuffer = MaterialNode.Materials.a;\n const materialIndices = [];\n for (let i = 0; i < materialIndexBuffer.length; ++i) {\n materialIndices.push(i);\n }\n return {\n dataSize: 1,\n buffer: materialIndexBuffer,\n indices: materialIndices,\n mappingType,\n referenceType\n };\n }\n // Generate a NurbGeometry from a node in FBXTree.Objects.Geometry\n parseNurbsGeometry(geoNode) {\n if (NURBSCurve === void 0) {\n console.error(\n \"THREE.FBXLoader: The loader relies on NURBSCurve for any nurbs present in the model. Nurbs will show up as empty geometry.\"\n );\n return new BufferGeometry();\n }\n const order = parseInt(geoNode.Order);\n if (isNaN(order)) {\n console.error(\"THREE.FBXLoader: Invalid Order %s given for geometry ID: %s\", geoNode.Order, geoNode.id);\n return new BufferGeometry();\n }\n const degree = order - 1;\n const knots = geoNode.KnotVector.a;\n const controlPoints = [];\n const pointsValues = geoNode.Points.a;\n for (let i = 0, l = pointsValues.length; i < l; i += 4) {\n controlPoints.push(new Vector4().fromArray(pointsValues, i));\n }\n let startKnot, endKnot;\n if (geoNode.Form === \"Closed\") {\n controlPoints.push(controlPoints[0]);\n } else if (geoNode.Form === \"Periodic\") {\n startKnot = degree;\n endKnot = knots.length - 1 - startKnot;\n for (let i = 0; i < degree; ++i) {\n controlPoints.push(controlPoints[i]);\n }\n }\n const curve = new NURBSCurve(degree, knots, controlPoints, startKnot, endKnot);\n const points = curve.getPoints(controlPoints.length * 12);\n return new BufferGeometry().setFromPoints(points);\n }\n}\nclass AnimationParser {\n // take raw animation clips and turn them into three.js animation clips\n parse() {\n const animationClips = [];\n const rawClips = this.parseClips();\n if (rawClips !== void 0) {\n for (const key in rawClips) {\n const rawClip = rawClips[key];\n const clip = this.addClip(rawClip);\n animationClips.push(clip);\n }\n }\n return animationClips;\n }\n parseClips() {\n if (fbxTree.Objects.AnimationCurve === void 0)\n return void 0;\n const curveNodesMap = this.parseAnimationCurveNodes();\n this.parseAnimationCurves(curveNodesMap);\n const layersMap = this.parseAnimationLayers(curveNodesMap);\n const rawClips = this.parseAnimStacks(layersMap);\n return rawClips;\n }\n // parse nodes in FBXTree.Objects.AnimationCurveNode\n // each AnimationCurveNode holds data for an animation transform for a model (e.g. left arm rotation )\n // and is referenced by an AnimationLayer\n parseAnimationCurveNodes() {\n const rawCurveNodes = fbxTree.Objects.AnimationCurveNode;\n const curveNodesMap = /* @__PURE__ */ new Map();\n for (const nodeID in rawCurveNodes) {\n const rawCurveNode = rawCurveNodes[nodeID];\n if (rawCurveNode.attrName.match(/S|R|T|DeformPercent/) !== null) {\n const curveNode = {\n id: rawCurveNode.id,\n attr: rawCurveNode.attrName,\n curves: {}\n };\n curveNodesMap.set(curveNode.id, curveNode);\n }\n }\n return curveNodesMap;\n }\n // parse nodes in FBXTree.Objects.AnimationCurve and connect them up to\n // previously parsed AnimationCurveNodes. Each AnimationCurve holds data for a single animated\n // axis ( e.g. times and values of x rotation)\n parseAnimationCurves(curveNodesMap) {\n const rawCurves = fbxTree.Objects.AnimationCurve;\n for (const nodeID in rawCurves) {\n const animationCurve = {\n id: rawCurves[nodeID].id,\n times: rawCurves[nodeID].KeyTime.a.map(convertFBXTimeToSeconds),\n values: rawCurves[nodeID].KeyValueFloat.a\n };\n const relationships = connections.get(animationCurve.id);\n if (relationships !== void 0) {\n const animationCurveID = relationships.parents[0].ID;\n const animationCurveRelationship = relationships.parents[0].relationship;\n if (animationCurveRelationship.match(/X/)) {\n curveNodesMap.get(animationCurveID).curves[\"x\"] = animationCurve;\n } else if (animationCurveRelationship.match(/Y/)) {\n curveNodesMap.get(animationCurveID).curves[\"y\"] = animationCurve;\n } else if (animationCurveRelationship.match(/Z/)) {\n curveNodesMap.get(animationCurveID).curves[\"z\"] = animationCurve;\n } else if (animationCurveRelationship.match(/d|DeformPercent/) && curveNodesMap.has(animationCurveID)) {\n curveNodesMap.get(animationCurveID).curves[\"morph\"] = animationCurve;\n }\n }\n }\n }\n // parse nodes in FBXTree.Objects.AnimationLayer. Each layers holds references\n // to various AnimationCurveNodes and is referenced by an AnimationStack node\n // note: theoretically a stack can have multiple layers, however in practice there always seems to be one per stack\n parseAnimationLayers(curveNodesMap) {\n const rawLayers = fbxTree.Objects.AnimationLayer;\n const layersMap = /* @__PURE__ */ new Map();\n for (const nodeID in rawLayers) {\n const layerCurveNodes = [];\n const connection = connections.get(parseInt(nodeID));\n if (connection !== void 0) {\n const children = connection.children;\n children.forEach(function(child, i) {\n if (curveNodesMap.has(child.ID)) {\n const curveNode = curveNodesMap.get(child.ID);\n if (curveNode.curves.x !== void 0 || curveNode.curves.y !== void 0 || curveNode.curves.z !== void 0) {\n if (layerCurveNodes[i] === void 0) {\n const modelID = connections.get(child.ID).parents.filter(function(parent) {\n return parent.relationship !== void 0;\n })[0].ID;\n if (modelID !== void 0) {\n const rawModel = fbxTree.Objects.Model[modelID.toString()];\n if (rawModel === void 0) {\n console.warn(\"THREE.FBXLoader: Encountered a unused curve.\", child);\n return;\n }\n const node = {\n modelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName(rawModel.attrName) : \"\",\n ID: rawModel.id,\n initialPosition: [0, 0, 0],\n initialRotation: [0, 0, 0],\n initialScale: [1, 1, 1]\n };\n sceneGraph.traverse(function(child2) {\n if (child2.ID === rawModel.id) {\n node.transform = child2.matrix;\n if (child2.userData.transformData)\n node.eulerOrder = child2.userData.transformData.eulerOrder;\n }\n });\n if (!node.transform)\n node.transform = new Matrix4();\n if (\"PreRotation\" in rawModel)\n node.preRotation = rawModel.PreRotation.value;\n if (\"PostRotation\" in rawModel)\n node.postRotation = rawModel.PostRotation.value;\n layerCurveNodes[i] = node;\n }\n }\n if (layerCurveNodes[i])\n layerCurveNodes[i][curveNode.attr] = curveNode;\n } else if (curveNode.curves.morph !== void 0) {\n if (layerCurveNodes[i] === void 0) {\n const deformerID = connections.get(child.ID).parents.filter(function(parent) {\n return parent.relationship !== void 0;\n })[0].ID;\n const morpherID = connections.get(deformerID).parents[0].ID;\n const geoID = connections.get(morpherID).parents[0].ID;\n const modelID = connections.get(geoID).parents[0].ID;\n const rawModel = fbxTree.Objects.Model[modelID];\n const node = {\n modelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName(rawModel.attrName) : \"\",\n morphName: fbxTree.Objects.Deformer[deformerID].attrName\n };\n layerCurveNodes[i] = node;\n }\n layerCurveNodes[i][curveNode.attr] = curveNode;\n }\n }\n });\n layersMap.set(parseInt(nodeID), layerCurveNodes);\n }\n }\n return layersMap;\n }\n // parse nodes in FBXTree.Objects.AnimationStack. These are the top level node in the animation\n // hierarchy. Each Stack node will be used to create a AnimationClip\n parseAnimStacks(layersMap) {\n const rawStacks = fbxTree.Objects.AnimationStack;\n const rawClips = {};\n for (const nodeID in rawStacks) {\n const children = connections.get(parseInt(nodeID)).children;\n if (children.length > 1) {\n console.warn(\n \"THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers.\"\n );\n }\n const layer = layersMap.get(children[0].ID);\n rawClips[nodeID] = {\n name: rawStacks[nodeID].attrName,\n layer\n };\n }\n return rawClips;\n }\n addClip(rawClip) {\n let tracks = [];\n const scope = this;\n rawClip.layer.forEach(function(rawTracks) {\n tracks = tracks.concat(scope.generateTracks(rawTracks));\n });\n return new AnimationClip(rawClip.name, -1, tracks);\n }\n generateTracks(rawTracks) {\n const tracks = [];\n let initialPosition = new Vector3();\n let initialRotation = new Quaternion();\n let initialScale = new Vector3();\n if (rawTracks.transform)\n rawTracks.transform.decompose(initialPosition, initialRotation, initialScale);\n initialPosition = initialPosition.toArray();\n initialRotation = new Euler().setFromQuaternion(initialRotation, rawTracks.eulerOrder).toArray();\n initialScale = initialScale.toArray();\n if (rawTracks.T !== void 0 && Object.keys(rawTracks.T.curves).length > 0) {\n const positionTrack = this.generateVectorTrack(\n rawTracks.modelName,\n rawTracks.T.curves,\n initialPosition,\n \"position\"\n );\n if (positionTrack !== void 0)\n tracks.push(positionTrack);\n }\n if (rawTracks.R !== void 0 && Object.keys(rawTracks.R.curves).length > 0) {\n const rotationTrack = this.generateRotationTrack(\n rawTracks.modelName,\n rawTracks.R.curves,\n initialRotation,\n rawTracks.preRotation,\n rawTracks.postRotation,\n rawTracks.eulerOrder\n );\n if (rotationTrack !== void 0)\n tracks.push(rotationTrack);\n }\n if (rawTracks.S !== void 0 && Object.keys(rawTracks.S.curves).length > 0) {\n const scaleTrack = this.generateVectorTrack(rawTracks.modelName, rawTracks.S.curves, initialScale, \"scale\");\n if (scaleTrack !== void 0)\n tracks.push(scaleTrack);\n }\n if (rawTracks.DeformPercent !== void 0) {\n const morphTrack = this.generateMorphTrack(rawTracks);\n if (morphTrack !== void 0)\n tracks.push(morphTrack);\n }\n return tracks;\n }\n generateVectorTrack(modelName, curves, initialValue, type) {\n const times = this.getTimesForAllAxes(curves);\n const values = this.getKeyframeTrackValues(times, curves, initialValue);\n return new VectorKeyframeTrack(modelName + \".\" + type, times, values);\n }\n generateRotationTrack(modelName, curves, initialValue, preRotation, postRotation, eulerOrder) {\n if (curves.x !== void 0) {\n this.interpolateRotations(curves.x);\n curves.x.values = curves.x.values.map(MathUtils.degToRad);\n }\n if (curves.y !== void 0) {\n this.interpolateRotations(curves.y);\n curves.y.values = curves.y.values.map(MathUtils.degToRad);\n }\n if (curves.z !== void 0) {\n this.interpolateRotations(curves.z);\n curves.z.values = curves.z.values.map(MathUtils.degToRad);\n }\n const times = this.getTimesForAllAxes(curves);\n const values = this.getKeyframeTrackValues(times, curves, initialValue);\n if (preRotation !== void 0) {\n preRotation = preRotation.map(MathUtils.degToRad);\n preRotation.push(eulerOrder);\n preRotation = new Euler().fromArray(preRotation);\n preRotation = new Quaternion().setFromEuler(preRotation);\n }\n if (postRotation !== void 0) {\n postRotation = postRotation.map(MathUtils.degToRad);\n postRotation.push(eulerOrder);\n postRotation = new Euler().fromArray(postRotation);\n postRotation = new Quaternion().setFromEuler(postRotation).invert();\n }\n const quaternion = new Quaternion();\n const euler = new Euler();\n const quaternionValues = [];\n for (let i = 0; i < values.length; i += 3) {\n euler.set(values[i], values[i + 1], values[i + 2], eulerOrder);\n quaternion.setFromEuler(euler);\n if (preRotation !== void 0)\n quaternion.premultiply(preRotation);\n if (postRotation !== void 0)\n quaternion.multiply(postRotation);\n quaternion.toArray(quaternionValues, i / 3 * 4);\n }\n return new QuaternionKeyframeTrack(modelName + \".quaternion\", times, quaternionValues);\n }\n generateMorphTrack(rawTracks) {\n const curves = rawTracks.DeformPercent.curves.morph;\n const values = curves.values.map(function(val) {\n return val / 100;\n });\n const morphNum = sceneGraph.getObjectByName(rawTracks.modelName).morphTargetDictionary[rawTracks.morphName];\n return new NumberKeyframeTrack(\n rawTracks.modelName + \".morphTargetInfluences[\" + morphNum + \"]\",\n curves.times,\n values\n );\n }\n // For all animated objects, times are defined separately for each axis\n // Here we'll combine the times into one sorted array without duplicates\n getTimesForAllAxes(curves) {\n let times = [];\n if (curves.x !== void 0)\n times = times.concat(curves.x.times);\n if (curves.y !== void 0)\n times = times.concat(curves.y.times);\n if (curves.z !== void 0)\n times = times.concat(curves.z.times);\n times = times.sort(function(a, b) {\n return a - b;\n });\n if (times.length > 1) {\n let targetIndex = 1;\n let lastValue = times[0];\n for (let i = 1; i < times.length; i++) {\n const currentValue = times[i];\n if (currentValue !== lastValue) {\n times[targetIndex] = currentValue;\n lastValue = currentValue;\n targetIndex++;\n }\n }\n times = times.slice(0, targetIndex);\n }\n return times;\n }\n getKeyframeTrackValues(times, curves, initialValue) {\n const prevValue = initialValue;\n const values = [];\n let xIndex = -1;\n let yIndex = -1;\n let zIndex = -1;\n times.forEach(function(time) {\n if (curves.x)\n xIndex = curves.x.times.indexOf(time);\n if (curves.y)\n yIndex = curves.y.times.indexOf(time);\n if (curves.z)\n zIndex = curves.z.times.indexOf(time);\n if (xIndex !== -1) {\n const xValue = curves.x.values[xIndex];\n values.push(xValue);\n prevValue[0] = xValue;\n } else {\n values.push(prevValue[0]);\n }\n if (yIndex !== -1) {\n const yValue = curves.y.values[yIndex];\n values.push(yValue);\n prevValue[1] = yValue;\n } else {\n values.push(prevValue[1]);\n }\n if (zIndex !== -1) {\n const zValue = curves.z.values[zIndex];\n values.push(zValue);\n prevValue[2] = zValue;\n } else {\n values.push(prevValue[2]);\n }\n });\n return values;\n }\n // Rotations are defined as Euler angles which can have values of any size\n // These will be converted to quaternions which don't support values greater than\n // PI, so we'll interpolate large rotations\n interpolateRotations(curve) {\n for (let i = 1; i < curve.values.length; i++) {\n const initialValue = curve.values[i - 1];\n const valuesSpan = curve.values[i] - initialValue;\n const absoluteSpan = Math.abs(valuesSpan);\n if (absoluteSpan >= 180) {\n const numSubIntervals = absoluteSpan / 180;\n const step = valuesSpan / numSubIntervals;\n let nextValue = initialValue + step;\n const initialTime = curve.times[i - 1];\n const timeSpan = curve.times[i] - initialTime;\n const interval = timeSpan / numSubIntervals;\n let nextTime = initialTime + interval;\n const interpolatedTimes = [];\n const interpolatedValues = [];\n while (nextTime < curve.times[i]) {\n interpolatedTimes.push(nextTime);\n nextTime += interval;\n interpolatedValues.push(nextValue);\n nextValue += step;\n }\n curve.times = inject(curve.times, i, interpolatedTimes);\n curve.values = inject(curve.values, i, interpolatedValues);\n }\n }\n }\n}\nclass TextParser {\n getPrevNode() {\n return this.nodeStack[this.currentIndent - 2];\n }\n getCurrentNode() {\n return this.nodeStack[this.currentIndent - 1];\n }\n getCurrentProp() {\n return this.currentProp;\n }\n pushStack(node) {\n this.nodeStack.push(node);\n this.currentIndent += 1;\n }\n popStack() {\n this.nodeStack.pop();\n this.currentIndent -= 1;\n }\n setCurrentProp(val, name) {\n this.currentProp = val;\n this.currentPropName = name;\n }\n parse(text) {\n this.currentIndent = 0;\n this.allNodes = new FBXTree();\n this.nodeStack = [];\n this.currentProp = [];\n this.currentPropName = \"\";\n const scope = this;\n const split = text.split(/[\\r\\n]+/);\n split.forEach(function(line, i) {\n const matchComment = line.match(/^[\\s\\t]*;/);\n const matchEmpty = line.match(/^[\\s\\t]*$/);\n if (matchComment || matchEmpty)\n return;\n const matchBeginning = line.match(\"^\\\\t{\" + scope.currentIndent + \"}(\\\\w+):(.*){\", \"\");\n const matchProperty = line.match(\"^\\\\t{\" + scope.currentIndent + \"}(\\\\w+):[\\\\s\\\\t\\\\r\\\\n](.*)\");\n const matchEnd = line.match(\"^\\\\t{\" + (scope.currentIndent - 1) + \"}}\");\n if (matchBeginning) {\n scope.parseNodeBegin(line, matchBeginning);\n } else if (matchProperty) {\n scope.parseNodeProperty(line, matchProperty, split[++i]);\n } else if (matchEnd) {\n scope.popStack();\n } else if (line.match(/^[^\\s\\t}]/)) {\n scope.parseNodePropertyContinued(line);\n }\n });\n return this.allNodes;\n }\n parseNodeBegin(line, property) {\n const nodeName = property[1].trim().replace(/^\"/, \"\").replace(/\"$/, \"\");\n const nodeAttrs = property[2].split(\",\").map(function(attr) {\n return attr.trim().replace(/^\"/, \"\").replace(/\"$/, \"\");\n });\n const node = { name: nodeName };\n const attrs = this.parseNodeAttr(nodeAttrs);\n const currentNode = this.getCurrentNode();\n if (this.currentIndent === 0) {\n this.allNodes.add(nodeName, node);\n } else {\n if (nodeName in currentNode) {\n if (nodeName === \"PoseNode\") {\n currentNode.PoseNode.push(node);\n } else if (currentNode[nodeName].id !== void 0) {\n currentNode[nodeName] = {};\n currentNode[nodeName][currentNode[nodeName].id] = currentNode[nodeName];\n }\n if (attrs.id !== \"\")\n currentNode[nodeName][attrs.id] = node;\n } else if (typeof attrs.id === \"number\") {\n currentNode[nodeName] = {};\n currentNode[nodeName][attrs.id] = node;\n } else if (nodeName !== \"Properties70\") {\n if (nodeName === \"PoseNode\")\n currentNode[nodeName] = [node];\n else\n currentNode[nodeName] = node;\n }\n }\n if (typeof attrs.id === \"number\")\n node.id = attrs.id;\n if (attrs.name !== \"\")\n node.attrName = attrs.name;\n if (attrs.type !== \"\")\n node.attrType = attrs.type;\n this.pushStack(node);\n }\n parseNodeAttr(attrs) {\n let id = attrs[0];\n if (attrs[0] !== \"\") {\n id = parseInt(attrs[0]);\n if (isNaN(id)) {\n id = attrs[0];\n }\n }\n let name = \"\", type = \"\";\n if (attrs.length > 1) {\n name = attrs[1].replace(/^(\\w+)::/, \"\");\n type = attrs[2];\n }\n return { id, name, type };\n }\n parseNodeProperty(line, property, contentLine) {\n let propName = property[1].replace(/^\"/, \"\").replace(/\"$/, \"\").trim();\n let propValue = property[2].replace(/^\"/, \"\").replace(/\"$/, \"\").trim();\n if (propName === \"Content\" && propValue === \",\") {\n propValue = contentLine.replace(/\"/g, \"\").replace(/,$/, \"\").trim();\n }\n const currentNode = this.getCurrentNode();\n const parentName = currentNode.name;\n if (parentName === \"Properties70\") {\n this.parseNodeSpecialProperty(line, propName, propValue);\n return;\n }\n if (propName === \"C\") {\n const connProps = propValue.split(\",\").slice(1);\n const from = parseInt(connProps[0]);\n const to = parseInt(connProps[1]);\n let rest = propValue.split(\",\").slice(3);\n rest = rest.map(function(elem) {\n return elem.trim().replace(/^\"/, \"\");\n });\n propName = \"connections\";\n propValue = [from, to];\n append(propValue, rest);\n if (currentNode[propName] === void 0) {\n currentNode[propName] = [];\n }\n }\n if (propName === \"Node\")\n currentNode.id = propValue;\n if (propName in currentNode && Array.isArray(currentNode[propName])) {\n currentNode[propName].push(propValue);\n } else {\n if (propName !== \"a\")\n currentNode[propName] = propValue;\n else\n currentNode.a = propValue;\n }\n this.setCurrentProp(currentNode, propName);\n if (propName === \"a\" && propValue.slice(-1) !== \",\") {\n currentNode.a = parseNumberArray(propValue);\n }\n }\n parseNodePropertyContinued(line) {\n const currentNode = this.getCurrentNode();\n currentNode.a += line;\n if (line.slice(-1) !== \",\") {\n currentNode.a = parseNumberArray(currentNode.a);\n }\n }\n // parse \"Property70\"\n parseNodeSpecialProperty(line, propName, propValue) {\n const props = propValue.split('\",').map(function(prop) {\n return prop.trim().replace(/^\\\"/, \"\").replace(/\\s/, \"_\");\n });\n const innerPropName = props[0];\n const innerPropType1 = props[1];\n const innerPropType2 = props[2];\n const innerPropFlag = props[3];\n let innerPropValue = props[4];\n switch (innerPropType1) {\n case \"int\":\n case \"enum\":\n case \"bool\":\n case \"ULongLong\":\n case \"double\":\n case \"Number\":\n case \"FieldOfView\":\n innerPropValue = parseFloat(innerPropValue);\n break;\n case \"Color\":\n case \"ColorRGB\":\n case \"Vector3D\":\n case \"Lcl_Translation\":\n case \"Lcl_Rotation\":\n case \"Lcl_Scaling\":\n innerPropValue = parseNumberArray(innerPropValue);\n break;\n }\n this.getPrevNode()[innerPropName] = {\n type: innerPropType1,\n type2: innerPropType2,\n flag: innerPropFlag,\n value: innerPropValue\n };\n this.setCurrentProp(this.getPrevNode(), innerPropName);\n }\n}\nclass BinaryParser {\n parse(buffer) {\n const reader = new BinaryReader(buffer);\n reader.skip(23);\n const version = reader.getUint32();\n if (version < 6400) {\n throw new Error(\"THREE.FBXLoader: FBX version not supported, FileVersion: \" + version);\n }\n const allNodes = new FBXTree();\n while (!this.endOfContent(reader)) {\n const node = this.parseNode(reader, version);\n if (node !== null)\n allNodes.add(node.name, node);\n }\n return allNodes;\n }\n // Check if reader has reached the end of content.\n endOfContent(reader) {\n if (reader.size() % 16 === 0) {\n return (reader.getOffset() + 160 + 16 & ~15) >= reader.size();\n } else {\n return reader.getOffset() + 160 + 16 >= reader.size();\n }\n }\n // recursively parse nodes until the end of the file is reached\n parseNode(reader, version) {\n const node = {};\n const endOffset = version >= 7500 ? reader.getUint64() : reader.getUint32();\n const numProperties = version >= 7500 ? reader.getUint64() : reader.getUint32();\n version >= 7500 ? reader.getUint64() : reader.getUint32();\n const nameLen = reader.getUint8();\n const name = reader.getString(nameLen);\n if (endOffset === 0)\n return null;\n const propertyList = [];\n for (let i = 0; i < numProperties; i++) {\n propertyList.push(this.parseProperty(reader));\n }\n const id = propertyList.length > 0 ? propertyList[0] : \"\";\n const attrName = propertyList.length > 1 ? propertyList[1] : \"\";\n const attrType = propertyList.length > 2 ? propertyList[2] : \"\";\n node.singleProperty = numProperties === 1 && reader.getOffset() === endOffset ? true : false;\n while (endOffset > reader.getOffset()) {\n const subNode = this.parseNode(reader, version);\n if (subNode !== null)\n this.parseSubNode(name, node, subNode);\n }\n node.propertyList = propertyList;\n if (typeof id === \"number\")\n node.id = id;\n if (attrName !== \"\")\n node.attrName = attrName;\n if (attrType !== \"\")\n node.attrType = attrType;\n if (name !== \"\")\n node.name = name;\n return node;\n }\n parseSubNode(name, node, subNode) {\n if (subNode.singleProperty === true) {\n const value = subNode.propertyList[0];\n if (Array.isArray(value)) {\n node[subNode.name] = subNode;\n subNode.a = value;\n } else {\n node[subNode.name] = value;\n }\n } else if (name === \"Connections\" && subNode.name === \"C\") {\n const array = [];\n subNode.propertyList.forEach(function(property, i) {\n if (i !== 0)\n array.push(property);\n });\n if (node.connections === void 0) {\n node.connections = [];\n }\n node.connections.push(array);\n } else if (subNode.name === \"Properties70\") {\n const keys = Object.keys(subNode);\n keys.forEach(function(key) {\n node[key] = subNode[key];\n });\n } else if (name === \"Properties70\" && subNode.name === \"P\") {\n let innerPropName = subNode.propertyList[0];\n let innerPropType1 = subNode.propertyList[1];\n const innerPropType2 = subNode.propertyList[2];\n const innerPropFlag = subNode.propertyList[3];\n let innerPropValue;\n if (innerPropName.indexOf(\"Lcl \") === 0)\n innerPropName = innerPropName.replace(\"Lcl \", \"Lcl_\");\n if (innerPropType1.indexOf(\"Lcl \") === 0)\n innerPropType1 = innerPropType1.replace(\"Lcl \", \"Lcl_\");\n if (innerPropType1 === \"Color\" || innerPropType1 === \"ColorRGB\" || innerPropType1 === \"Vector\" || innerPropType1 === \"Vector3D\" || innerPropType1.indexOf(\"Lcl_\") === 0) {\n innerPropValue = [subNode.propertyList[4], subNode.propertyList[5], subNode.propertyList[6]];\n } else {\n innerPropValue = subNode.propertyList[4];\n }\n node[innerPropName] = {\n type: innerPropType1,\n type2: innerPropType2,\n flag: innerPropFlag,\n value: innerPropValue\n };\n } else if (node[subNode.name] === void 0) {\n if (typeof subNode.id === \"number\") {\n node[subNode.name] = {};\n node[subNode.name][subNode.id] = subNode;\n } else {\n node[subNode.name] = subNode;\n }\n } else {\n if (subNode.name === \"PoseNode\") {\n if (!Array.isArray(node[subNode.name])) {\n node[subNode.name] = [node[subNode.name]];\n }\n node[subNode.name].push(subNode);\n } else if (node[subNode.name][subNode.id] === void 0) {\n node[subNode.name][subNode.id] = subNode;\n }\n }\n }\n parseProperty(reader) {\n const type = reader.getString(1);\n let length;\n switch (type) {\n case \"C\":\n return reader.getBoolean();\n case \"D\":\n return reader.getFloat64();\n case \"F\":\n return reader.getFloat32();\n case \"I\":\n return reader.getInt32();\n case \"L\":\n return reader.getInt64();\n case \"R\":\n length = reader.getUint32();\n return reader.getArrayBuffer(length);\n case \"S\":\n length = reader.getUint32();\n return reader.getString(length);\n case \"Y\":\n return reader.getInt16();\n case \"b\":\n case \"c\":\n case \"d\":\n case \"f\":\n case \"i\":\n case \"l\":\n const arrayLength = reader.getUint32();\n const encoding = reader.getUint32();\n const compressedLength = reader.getUint32();\n if (encoding === 0) {\n switch (type) {\n case \"b\":\n case \"c\":\n return reader.getBooleanArray(arrayLength);\n case \"d\":\n return reader.getFloat64Array(arrayLength);\n case \"f\":\n return reader.getFloat32Array(arrayLength);\n case \"i\":\n return reader.getInt32Array(arrayLength);\n case \"l\":\n return reader.getInt64Array(arrayLength);\n }\n }\n const data = unzlibSync(new Uint8Array(reader.getArrayBuffer(compressedLength)));\n const reader2 = new BinaryReader(data.buffer);\n switch (type) {\n case \"b\":\n case \"c\":\n return reader2.getBooleanArray(arrayLength);\n case \"d\":\n return reader2.getFloat64Array(arrayLength);\n case \"f\":\n return reader2.getFloat32Array(arrayLength);\n case \"i\":\n return reader2.getInt32Array(arrayLength);\n case \"l\":\n return reader2.getInt64Array(arrayLength);\n }\n default:\n throw new Error(\"THREE.FBXLoader: Unknown property type \" + type);\n }\n }\n}\nclass BinaryReader {\n constructor(buffer, littleEndian) {\n this.dv = new DataView(buffer);\n this.offset = 0;\n this.littleEndian = littleEndian !== void 0 ? littleEndian : true;\n }\n getOffset() {\n return this.offset;\n }\n size() {\n return this.dv.buffer.byteLength;\n }\n skip(length) {\n this.offset += length;\n }\n // seems like true/false representation depends on exporter.\n // true: 1 or 'Y'(=0x59), false: 0 or 'T'(=0x54)\n // then sees LSB.\n getBoolean() {\n return (this.getUint8() & 1) === 1;\n }\n getBooleanArray(size) {\n const a = [];\n for (let i = 0; i < size; i++) {\n a.push(this.getBoolean());\n }\n return a;\n }\n getUint8() {\n const value = this.dv.getUint8(this.offset);\n this.offset += 1;\n return value;\n }\n getInt16() {\n const value = this.dv.getInt16(this.offset, this.littleEndian);\n this.offset += 2;\n return value;\n }\n getInt32() {\n const value = this.dv.getInt32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n getInt32Array(size) {\n const a = [];\n for (let i = 0; i < size; i++) {\n a.push(this.getInt32());\n }\n return a;\n }\n getUint32() {\n const value = this.dv.getUint32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n // JavaScript doesn't support 64-bit integer so calculate this here\n // 1 << 32 will return 1 so using multiply operation instead here.\n // There's a possibility that this method returns wrong value if the value\n // is out of the range between Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER.\n // TODO: safely handle 64-bit integer\n getInt64() {\n let low, high;\n if (this.littleEndian) {\n low = this.getUint32();\n high = this.getUint32();\n } else {\n high = this.getUint32();\n low = this.getUint32();\n }\n if (high & 2147483648) {\n high = ~high & 4294967295;\n low = ~low & 4294967295;\n if (low === 4294967295)\n high = high + 1 & 4294967295;\n low = low + 1 & 4294967295;\n return -(high * 4294967296 + low);\n }\n return high * 4294967296 + low;\n }\n getInt64Array(size) {\n const a = [];\n for (let i = 0; i < size; i++) {\n a.push(this.getInt64());\n }\n return a;\n }\n // Note: see getInt64() comment\n getUint64() {\n let low, high;\n if (this.littleEndian) {\n low = this.getUint32();\n high = this.getUint32();\n } else {\n high = this.getUint32();\n low = this.getUint32();\n }\n return high * 4294967296 + low;\n }\n getFloat32() {\n const value = this.dv.getFloat32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n getFloat32Array(size) {\n const a = [];\n for (let i = 0; i < size; i++) {\n a.push(this.getFloat32());\n }\n return a;\n }\n getFloat64() {\n const value = this.dv.getFloat64(this.offset, this.littleEndian);\n this.offset += 8;\n return value;\n }\n getFloat64Array(size) {\n const a = [];\n for (let i = 0; i < size; i++) {\n a.push(this.getFloat64());\n }\n return a;\n }\n getArrayBuffer(size) {\n const value = this.dv.buffer.slice(this.offset, this.offset + size);\n this.offset += size;\n return value;\n }\n getString(size) {\n let a = [];\n for (let i = 0; i < size; i++) {\n a[i] = this.getUint8();\n }\n const nullByte = a.indexOf(0);\n if (nullByte >= 0)\n a = a.slice(0, nullByte);\n return decodeText(new Uint8Array(a));\n }\n}\nclass FBXTree {\n add(key, val) {\n this[key] = val;\n }\n}\nfunction isFbxFormatBinary(buffer) {\n const CORRECT = \"Kaydara FBX Binary \\0\";\n return buffer.byteLength >= CORRECT.length && CORRECT === convertArrayBufferToString(buffer, 0, CORRECT.length);\n}\nfunction isFbxFormatASCII(text) {\n const CORRECT = [\n \"K\",\n \"a\",\n \"y\",\n \"d\",\n \"a\",\n \"r\",\n \"a\",\n \"\\\\\",\n \"F\",\n \"B\",\n \"X\",\n \"\\\\\",\n \"B\",\n \"i\",\n \"n\",\n \"a\",\n \"r\",\n \"y\",\n \"\\\\\",\n \"\\\\\"\n ];\n let cursor = 0;\n function read(offset) {\n const result = text[offset - 1];\n text = text.slice(cursor + offset);\n cursor++;\n return result;\n }\n for (let i = 0; i < CORRECT.length; ++i) {\n const num = read(1);\n if (num === CORRECT[i]) {\n return false;\n }\n }\n return true;\n}\nfunction getFbxVersion(text) {\n const versionRegExp = /FBXVersion: (\\d+)/;\n const match = text.match(versionRegExp);\n if (match) {\n const version = parseInt(match[1]);\n return version;\n }\n throw new Error(\"THREE.FBXLoader: Cannot find the version number for the file given.\");\n}\nfunction convertFBXTimeToSeconds(time) {\n return time / 46186158e3;\n}\nconst dataArray = [];\nfunction getData(polygonVertexIndex, polygonIndex, vertexIndex, infoObject) {\n let index;\n switch (infoObject.mappingType) {\n case \"ByPolygonVertex\":\n index = polygonVertexIndex;\n break;\n case \"ByPolygon\":\n index = polygonIndex;\n break;\n case \"ByVertice\":\n index = vertexIndex;\n break;\n case \"AllSame\":\n index = infoObject.indices[0];\n break;\n default:\n console.warn(\"THREE.FBXLoader: unknown attribute mapping type \" + infoObject.mappingType);\n }\n if (infoObject.referenceType === \"IndexToDirect\")\n index = infoObject.indices[index];\n const from = index * infoObject.dataSize;\n const to = from + infoObject.dataSize;\n return slice(dataArray, infoObject.buffer, from, to);\n}\nconst tempEuler = /* @__PURE__ */ new Euler();\nconst tempVec = /* @__PURE__ */ new Vector3();\nfunction generateTransform(transformData) {\n const lTranslationM = new Matrix4();\n const lPreRotationM = new Matrix4();\n const lRotationM = new Matrix4();\n const lPostRotationM = new Matrix4();\n const lScalingM = new Matrix4();\n const lScalingPivotM = new Matrix4();\n const lScalingOffsetM = new Matrix4();\n const lRotationOffsetM = new Matrix4();\n const lRotationPivotM = new Matrix4();\n const lParentGX = new Matrix4();\n const lParentLX = new Matrix4();\n const lGlobalT = new Matrix4();\n const inheritType = transformData.inheritType ? transformData.inheritType : 0;\n if (transformData.translation)\n lTranslationM.setPosition(tempVec.fromArray(transformData.translation));\n if (transformData.preRotation) {\n const array = transformData.preRotation.map(MathUtils.degToRad);\n array.push(transformData.eulerOrder);\n lPreRotationM.makeRotationFromEuler(tempEuler.fromArray(array));\n }\n if (transformData.rotation) {\n const array = transformData.rotation.map(MathUtils.degToRad);\n array.push(transformData.eulerOrder);\n lRotationM.makeRotationFromEuler(tempEuler.fromArray(array));\n }\n if (transformData.postRotation) {\n const array = transformData.postRotation.map(MathUtils.degToRad);\n array.push(transformData.eulerOrder);\n lPostRotationM.makeRotationFromEuler(tempEuler.fromArray(array));\n lPostRotationM.invert();\n }\n if (transformData.scale)\n lScalingM.scale(tempVec.fromArray(transformData.scale));\n if (transformData.scalingOffset)\n lScalingOffsetM.setPosition(tempVec.fromArray(transformData.scalingOffset));\n if (transformData.scalingPivot)\n lScalingPivotM.setPosition(tempVec.fromArray(transformData.scalingPivot));\n if (transformData.rotationOffset)\n lRotationOffsetM.setPosition(tempVec.fromArray(transformData.rotationOffset));\n if (transformData.rotationPivot)\n lRotationPivotM.setPosition(tempVec.fromArray(transformData.rotationPivot));\n if (transformData.parentMatrixWorld) {\n lParentLX.copy(transformData.parentMatrix);\n lParentGX.copy(transformData.parentMatrixWorld);\n }\n const lLRM = lPreRotationM.clone().multiply(lRotationM).multiply(lPostRotationM);\n const lParentGRM = new Matrix4();\n lParentGRM.extractRotation(lParentGX);\n const lParentTM = new Matrix4();\n lParentTM.copyPosition(lParentGX);\n const lParentGRSM = lParentTM.clone().invert().multiply(lParentGX);\n const lParentGSM = lParentGRM.clone().invert().multiply(lParentGRSM);\n const lLSM = lScalingM;\n const lGlobalRS = new Matrix4();\n if (inheritType === 0) {\n lGlobalRS.copy(lParentGRM).multiply(lLRM).multiply(lParentGSM).multiply(lLSM);\n } else if (inheritType === 1) {\n lGlobalRS.copy(lParentGRM).multiply(lParentGSM).multiply(lLRM).multiply(lLSM);\n } else {\n const lParentLSM = new Matrix4().scale(new Vector3().setFromMatrixScale(lParentLX));\n const lParentLSM_inv = lParentLSM.clone().invert();\n const lParentGSM_noLocal = lParentGSM.clone().multiply(lParentLSM_inv);\n lGlobalRS.copy(lParentGRM).multiply(lLRM).multiply(lParentGSM_noLocal).multiply(lLSM);\n }\n const lRotationPivotM_inv = lRotationPivotM.clone().invert();\n const lScalingPivotM_inv = lScalingPivotM.clone().invert();\n let lTransform = lTranslationM.clone().multiply(lRotationOffsetM).multiply(lRotationPivotM).multiply(lPreRotationM).multiply(lRotationM).multiply(lPostRotationM).multiply(lRotationPivotM_inv).multiply(lScalingOffsetM).multiply(lScalingPivotM).multiply(lScalingM).multiply(lScalingPivotM_inv);\n const lLocalTWithAllPivotAndOffsetInfo = new Matrix4().copyPosition(lTransform);\n const lGlobalTranslation = lParentGX.clone().multiply(lLocalTWithAllPivotAndOffsetInfo);\n lGlobalT.copyPosition(lGlobalTranslation);\n lTransform = lGlobalT.clone().multiply(lGlobalRS);\n lTransform.premultiply(lParentGX.invert());\n return lTransform;\n}\nfunction getEulerOrder(order) {\n order = order || 0;\n const enums = [\n \"ZYX\",\n // -> XYZ extrinsic\n \"YZX\",\n // -> XZY extrinsic\n \"XZY\",\n // -> YZX extrinsic\n \"ZXY\",\n // -> YXZ extrinsic\n \"YXZ\",\n // -> ZXY extrinsic\n \"XYZ\"\n // -> ZYX extrinsic\n //'SphericXYZ', // not possible to support\n ];\n if (order === 6) {\n console.warn(\"THREE.FBXLoader: unsupported Euler Order: Spherical XYZ. Animations and rotations may be incorrect.\");\n return enums[0];\n }\n return enums[order];\n}\nfunction parseNumberArray(value) {\n const array = value.split(\",\").map(function(val) {\n return parseFloat(val);\n });\n return array;\n}\nfunction convertArrayBufferToString(buffer, from, to) {\n if (from === void 0)\n from = 0;\n if (to === void 0)\n to = buffer.byteLength;\n return decodeText(new Uint8Array(buffer, from, to));\n}\nfunction append(a, b) {\n for (let i = 0, j = a.length, l = b.length; i < l; i++, j++) {\n a[j] = b[i];\n }\n}\nfunction slice(a, b, from, to) {\n for (let i = from, j = 0; i < to; i++, j++) {\n a[j] = b[i];\n }\n return a;\n}\nfunction inject(a1, index, a2) {\n return a1.slice(0, index).concat(a2).concat(a1.slice(index));\n}\nexport {\n FBXLoader\n};\n//# sourceMappingURL=FBXLoader.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Loader, FileLoader, ShapePath } from \"three\";\nclass FontLoader extends Loader {\n constructor(manager) {\n super(manager);\n }\n load(url, onLoad, onProgress, onError) {\n const loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setRequestHeader(this.requestHeader);\n loader.setWithCredentials(this.withCredentials);\n loader.load(\n url,\n (response) => {\n if (typeof response !== \"string\")\n throw new Error(\"unsupported data type\");\n const json = JSON.parse(response);\n const font = this.parse(json);\n if (onLoad)\n onLoad(font);\n },\n onProgress,\n onError\n );\n }\n loadAsync(url, onProgress) {\n return super.loadAsync(url, onProgress);\n }\n parse(json) {\n return new Font(json);\n }\n}\nclass Font {\n constructor(data) {\n __publicField(this, \"data\");\n __publicField(this, \"isFont\", true);\n __publicField(this, \"type\", \"Font\");\n this.data = data;\n }\n generateShapes(text, size = 100, _options) {\n const shapes = [];\n const options = { letterSpacing: 0, lineHeight: 1, ..._options };\n const paths = createPaths(text, size, this.data, options);\n for (let p = 0, pl = paths.length; p < pl; p++) {\n Array.prototype.push.apply(shapes, paths[p].toShapes(false));\n }\n return shapes;\n }\n}\nfunction createPaths(text, size, data, options) {\n const chars = Array.from(text);\n const scale = size / data.resolution;\n const line_height = (data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness) * scale;\n const paths = [];\n let offsetX = 0, offsetY = 0;\n for (let i = 0; i < chars.length; i++) {\n const char = chars[i];\n if (char === \"\\n\") {\n offsetX = 0;\n offsetY -= line_height * options.lineHeight;\n } else {\n const ret = createPath(char, scale, offsetX, offsetY, data);\n if (ret) {\n offsetX += ret.offsetX + options.letterSpacing;\n paths.push(ret.path);\n }\n }\n }\n return paths;\n}\nfunction createPath(char, scale, offsetX, offsetY, data) {\n const glyph = data.glyphs[char] || data.glyphs[\"?\"];\n if (!glyph) {\n console.error('THREE.Font: character \"' + char + '\" does not exists in font family ' + data.familyName + \".\");\n return;\n }\n const path = new ShapePath();\n let x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2;\n if (glyph.o) {\n const outline = glyph._cachedOutline || (glyph._cachedOutline = glyph.o.split(\" \"));\n for (let i = 0, l = outline.length; i < l; ) {\n const action = outline[i++];\n switch (action) {\n case \"m\":\n x = parseInt(outline[i++]) * scale + offsetX;\n y = parseInt(outline[i++]) * scale + offsetY;\n path.moveTo(x, y);\n break;\n case \"l\":\n x = parseInt(outline[i++]) * scale + offsetX;\n y = parseInt(outline[i++]) * scale + offsetY;\n path.lineTo(x, y);\n break;\n case \"q\":\n cpx = parseInt(outline[i++]) * scale + offsetX;\n cpy = parseInt(outline[i++]) * scale + offsetY;\n cpx1 = parseInt(outline[i++]) * scale + offsetX;\n cpy1 = parseInt(outline[i++]) * scale + offsetY;\n path.quadraticCurveTo(cpx1, cpy1, cpx, cpy);\n break;\n case \"b\":\n cpx = parseInt(outline[i++]) * scale + offsetX;\n cpy = parseInt(outline[i++]) * scale + offsetY;\n cpx1 = parseInt(outline[i++]) * scale + offsetX;\n cpy1 = parseInt(outline[i++]) * scale + offsetY;\n cpx2 = parseInt(outline[i++]) * scale + offsetX;\n cpy2 = parseInt(outline[i++]) * scale + offsetY;\n path.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, cpx, cpy);\n break;\n }\n }\n }\n return { offsetX: glyph.ha * scale, path };\n}\nexport {\n Font,\n FontLoader\n};\n//# sourceMappingURL=FontLoader.js.map\n","import { Texture, NearestFilter, ClampToEdgeWrapping } from \"three\";\nclass Data3DTexture extends Texture {\n constructor(data = null, width = 1, height = 1, depth = 1) {\n super(null);\n this.isData3DTexture = true;\n this.image = { data, width, height, depth };\n this.magFilter = NearestFilter;\n this.minFilter = NearestFilter;\n this.wrapR = ClampToEdgeWrapping;\n this.generateMipmaps = false;\n this.flipY = false;\n this.unpackAlignment = 1;\n }\n}\nexport {\n Data3DTexture\n};\n//# sourceMappingURL=Data3DTexture.js.map\n","class WorkerPool {\n constructor(pool = 4) {\n this.pool = pool;\n this.queue = [];\n this.workers = [];\n this.workersResolve = [];\n this.workerStatus = 0;\n }\n _initWorker(workerId) {\n if (!this.workers[workerId]) {\n const worker = this.workerCreator();\n worker.addEventListener(\"message\", this._onMessage.bind(this, workerId));\n this.workers[workerId] = worker;\n }\n }\n _getIdleWorker() {\n for (let i = 0; i < this.pool; i++)\n if (!(this.workerStatus & 1 << i))\n return i;\n return -1;\n }\n _onMessage(workerId, msg) {\n const resolve = this.workersResolve[workerId];\n resolve && resolve(msg);\n if (this.queue.length) {\n const { resolve: resolve2, msg: msg2, transfer } = this.queue.shift();\n this.workersResolve[workerId] = resolve2;\n this.workers[workerId].postMessage(msg2, transfer);\n } else {\n this.workerStatus ^= 1 << workerId;\n }\n }\n setWorkerCreator(workerCreator) {\n this.workerCreator = workerCreator;\n }\n setWorkerLimit(pool) {\n this.pool = pool;\n }\n postMessage(msg, transfer) {\n return new Promise((resolve) => {\n const workerId = this._getIdleWorker();\n if (workerId !== -1) {\n this._initWorker(workerId);\n this.workerStatus |= 1 << workerId;\n this.workersResolve[workerId] = resolve;\n this.workers[workerId].postMessage(msg, transfer);\n } else {\n this.queue.push({ resolve, msg, transfer });\n }\n });\n }\n dispose() {\n this.workers.forEach((worker) => worker.terminate());\n this.workersResolve.length = 0;\n this.workers.length = 0;\n this.queue.length = 0;\n this.workerStatus = 0;\n }\n}\nexport {\n WorkerPool\n};\n//# sourceMappingURL=WorkerPool.js.map\n","const KHR_SUPERCOMPRESSION_NONE = 0;\nconst KHR_SUPERCOMPRESSION_ZSTD = 2;\nconst KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT = 0;\nconst KHR_DF_VENDORID_KHRONOS = 0;\nconst KHR_DF_VERSION = 2;\nconst KHR_DF_MODEL_UNSPECIFIED = 0;\nconst KHR_DF_FLAG_ALPHA_STRAIGHT = 0;\nconst KHR_DF_FLAG_ALPHA_PREMULTIPLIED = 1;\nconst KHR_DF_TRANSFER_SRGB = 2;\nconst KHR_DF_PRIMARIES_UNSPECIFIED = 0;\nconst KHR_DF_PRIMARIES_BT709 = 1;\nconst KHR_DF_PRIMARIES_DISPLAYP3 = 10;\nconst KHR_DF_SAMPLE_DATATYPE_SIGNED = 64;\nconst VK_FORMAT_UNDEFINED = 0;\nconst VK_FORMAT_R8_UNORM = 9;\nconst VK_FORMAT_R8_SRGB = 15;\nconst VK_FORMAT_R8G8_UNORM = 16;\nconst VK_FORMAT_R8G8_SRGB = 22;\nconst VK_FORMAT_R8G8B8A8_UNORM = 37;\nconst VK_FORMAT_R8G8B8A8_SRGB = 43;\nconst VK_FORMAT_R16_SFLOAT = 76;\nconst VK_FORMAT_R16G16_SFLOAT = 83;\nconst VK_FORMAT_R16G16B16A16_SFLOAT = 97;\nconst VK_FORMAT_R32_SFLOAT = 100;\nconst VK_FORMAT_R32G32_SFLOAT = 103;\nconst VK_FORMAT_R32G32B32A32_SFLOAT = 109;\nconst VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165;\nconst VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166;\nclass KTX2Container {\n constructor() {\n this.vkFormat = VK_FORMAT_UNDEFINED;\n this.typeSize = 1;\n this.pixelWidth = 0;\n this.pixelHeight = 0;\n this.pixelDepth = 0;\n this.layerCount = 0;\n this.faceCount = 1;\n this.supercompressionScheme = KHR_SUPERCOMPRESSION_NONE;\n this.levels = [];\n this.dataFormatDescriptor = [\n {\n vendorId: KHR_DF_VENDORID_KHRONOS,\n descriptorType: KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT,\n descriptorBlockSize: 0,\n versionNumber: KHR_DF_VERSION,\n colorModel: KHR_DF_MODEL_UNSPECIFIED,\n colorPrimaries: KHR_DF_PRIMARIES_BT709,\n transferFunction: KHR_DF_TRANSFER_SRGB,\n flags: KHR_DF_FLAG_ALPHA_STRAIGHT,\n texelBlockDimension: [0, 0, 0, 0],\n bytesPlane: [0, 0, 0, 0, 0, 0, 0, 0],\n samples: []\n }\n ];\n this.keyValue = {};\n this.globalData = null;\n }\n}\nclass BufferReader {\n constructor(data, byteOffset, byteLength, littleEndian) {\n this._dataView = void 0;\n this._littleEndian = void 0;\n this._offset = void 0;\n this._dataView = new DataView(data.buffer, data.byteOffset + byteOffset, byteLength);\n this._littleEndian = littleEndian;\n this._offset = 0;\n }\n _nextUint8() {\n const value = this._dataView.getUint8(this._offset);\n this._offset += 1;\n return value;\n }\n _nextUint16() {\n const value = this._dataView.getUint16(this._offset, this._littleEndian);\n this._offset += 2;\n return value;\n }\n _nextUint32() {\n const value = this._dataView.getUint32(this._offset, this._littleEndian);\n this._offset += 4;\n return value;\n }\n _nextUint64() {\n const left = this._dataView.getUint32(this._offset, this._littleEndian);\n const right = this._dataView.getUint32(this._offset + 4, this._littleEndian);\n const value = left + 2 ** 32 * right;\n this._offset += 8;\n return value;\n }\n _nextInt32() {\n const value = this._dataView.getInt32(this._offset, this._littleEndian);\n this._offset += 4;\n return value;\n }\n _nextUint8Array(len) {\n const value = new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + this._offset, len);\n this._offset += len;\n return value;\n }\n _skip(bytes) {\n this._offset += bytes;\n return this;\n }\n _scan(maxByteLength, term) {\n if (term === void 0) {\n term = 0;\n }\n const byteOffset = this._offset;\n let byteLength = 0;\n while (this._dataView.getUint8(this._offset) !== term && byteLength < maxByteLength) {\n byteLength++;\n this._offset++;\n }\n if (byteLength < maxByteLength)\n this._offset++;\n return new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + byteOffset, byteLength);\n }\n}\nconst KTX2_ID = [\n // '´', 'K', 'T', 'X', '2', '0', 'ª', '\\r', '\\n', '\\x1A', '\\n'\n 171,\n 75,\n 84,\n 88,\n 32,\n 50,\n 48,\n 187,\n 13,\n 10,\n 26,\n 10\n];\nfunction decodeText(buffer) {\n if (typeof TextDecoder !== \"undefined\") {\n return new TextDecoder().decode(buffer);\n }\n return Buffer.from(buffer).toString(\"utf8\");\n}\nfunction read(data) {\n const id = new Uint8Array(data.buffer, data.byteOffset, KTX2_ID.length);\n if (id[0] !== KTX2_ID[0] || // '´'\n id[1] !== KTX2_ID[1] || // 'K'\n id[2] !== KTX2_ID[2] || // 'T'\n id[3] !== KTX2_ID[3] || // 'X'\n id[4] !== KTX2_ID[4] || // ' '\n id[5] !== KTX2_ID[5] || // '2'\n id[6] !== KTX2_ID[6] || // '0'\n id[7] !== KTX2_ID[7] || // 'ª'\n id[8] !== KTX2_ID[8] || // '\\r'\n id[9] !== KTX2_ID[9] || // '\\n'\n id[10] !== KTX2_ID[10] || // '\\x1A'\n id[11] !== KTX2_ID[11]) {\n throw new Error(\"Missing KTX 2.0 identifier.\");\n }\n const container = new KTX2Container();\n const headerByteLength = 17 * Uint32Array.BYTES_PER_ELEMENT;\n const headerReader = new BufferReader(data, KTX2_ID.length, headerByteLength, true);\n container.vkFormat = headerReader._nextUint32();\n container.typeSize = headerReader._nextUint32();\n container.pixelWidth = headerReader._nextUint32();\n container.pixelHeight = headerReader._nextUint32();\n container.pixelDepth = headerReader._nextUint32();\n container.layerCount = headerReader._nextUint32();\n container.faceCount = headerReader._nextUint32();\n const levelCount = headerReader._nextUint32();\n container.supercompressionScheme = headerReader._nextUint32();\n const dfdByteOffset = headerReader._nextUint32();\n const dfdByteLength = headerReader._nextUint32();\n const kvdByteOffset = headerReader._nextUint32();\n const kvdByteLength = headerReader._nextUint32();\n const sgdByteOffset = headerReader._nextUint64();\n const sgdByteLength = headerReader._nextUint64();\n const levelByteLength = levelCount * 3 * 8;\n const levelReader = new BufferReader(data, KTX2_ID.length + headerByteLength, levelByteLength, true);\n for (let i = 0; i < levelCount; i++) {\n container.levels.push({\n levelData: new Uint8Array(data.buffer, data.byteOffset + levelReader._nextUint64(), levelReader._nextUint64()),\n uncompressedByteLength: levelReader._nextUint64()\n });\n }\n const dfdReader = new BufferReader(data, dfdByteOffset, dfdByteLength, true);\n const dfd = {\n vendorId: dfdReader._skip(\n 4\n /* totalSize */\n )._nextUint16(),\n descriptorType: dfdReader._nextUint16(),\n versionNumber: dfdReader._nextUint16(),\n descriptorBlockSize: dfdReader._nextUint16(),\n colorModel: dfdReader._nextUint8(),\n colorPrimaries: dfdReader._nextUint8(),\n transferFunction: dfdReader._nextUint8(),\n flags: dfdReader._nextUint8(),\n texelBlockDimension: [\n dfdReader._nextUint8(),\n dfdReader._nextUint8(),\n dfdReader._nextUint8(),\n dfdReader._nextUint8()\n ],\n bytesPlane: [\n dfdReader._nextUint8(),\n dfdReader._nextUint8(),\n dfdReader._nextUint8(),\n dfdReader._nextUint8(),\n dfdReader._nextUint8(),\n dfdReader._nextUint8(),\n dfdReader._nextUint8(),\n dfdReader._nextUint8()\n ],\n samples: []\n };\n const sampleStart = 6;\n const sampleWords = 4;\n const numSamples = (dfd.descriptorBlockSize / 4 - sampleStart) / sampleWords;\n for (let i = 0; i < numSamples; i++) {\n const sample = {\n bitOffset: dfdReader._nextUint16(),\n bitLength: dfdReader._nextUint8(),\n channelType: dfdReader._nextUint8(),\n samplePosition: [dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8()],\n sampleLower: -Infinity,\n sampleUpper: Infinity\n };\n if (sample.channelType & KHR_DF_SAMPLE_DATATYPE_SIGNED) {\n sample.sampleLower = dfdReader._nextInt32();\n sample.sampleUpper = dfdReader._nextInt32();\n } else {\n sample.sampleLower = dfdReader._nextUint32();\n sample.sampleUpper = dfdReader._nextUint32();\n }\n dfd.samples[i] = sample;\n }\n container.dataFormatDescriptor.length = 0;\n container.dataFormatDescriptor.push(dfd);\n const kvdReader = new BufferReader(data, kvdByteOffset, kvdByteLength, true);\n while (kvdReader._offset < kvdByteLength) {\n const keyValueByteLength = kvdReader._nextUint32();\n const keyData = kvdReader._scan(keyValueByteLength);\n const key = decodeText(keyData);\n container.keyValue[key] = kvdReader._nextUint8Array(keyValueByteLength - keyData.byteLength - 1);\n if (key.match(/^ktx/i)) {\n const text = decodeText(container.keyValue[key]);\n container.keyValue[key] = text.substring(0, text.lastIndexOf(\"\\0\"));\n }\n const kvPadding = keyValueByteLength % 4 ? 4 - keyValueByteLength % 4 : 0;\n kvdReader._skip(kvPadding);\n }\n if (sgdByteLength <= 0)\n return container;\n const sgdReader = new BufferReader(data, sgdByteOffset, sgdByteLength, true);\n const endpointCount = sgdReader._nextUint16();\n const selectorCount = sgdReader._nextUint16();\n const endpointsByteLength = sgdReader._nextUint32();\n const selectorsByteLength = sgdReader._nextUint32();\n const tablesByteLength = sgdReader._nextUint32();\n const extendedByteLength = sgdReader._nextUint32();\n const imageDescs = [];\n for (let i = 0; i < levelCount; i++) {\n imageDescs.push({\n imageFlags: sgdReader._nextUint32(),\n rgbSliceByteOffset: sgdReader._nextUint32(),\n rgbSliceByteLength: sgdReader._nextUint32(),\n alphaSliceByteOffset: sgdReader._nextUint32(),\n alphaSliceByteLength: sgdReader._nextUint32()\n });\n }\n const endpointsByteOffset = sgdByteOffset + sgdReader._offset;\n const selectorsByteOffset = endpointsByteOffset + endpointsByteLength;\n const tablesByteOffset = selectorsByteOffset + selectorsByteLength;\n const extendedByteOffset = tablesByteOffset + tablesByteLength;\n const endpointsData = new Uint8Array(data.buffer, data.byteOffset + endpointsByteOffset, endpointsByteLength);\n const selectorsData = new Uint8Array(data.buffer, data.byteOffset + selectorsByteOffset, selectorsByteLength);\n const tablesData = new Uint8Array(data.buffer, data.byteOffset + tablesByteOffset, tablesByteLength);\n const extendedData = new Uint8Array(data.buffer, data.byteOffset + extendedByteOffset, extendedByteLength);\n container.globalData = {\n endpointCount,\n selectorCount,\n imageDescs,\n endpointsData,\n selectorsData,\n tablesData,\n extendedData\n };\n return container;\n}\nexport {\n KHR_DF_FLAG_ALPHA_PREMULTIPLIED,\n KHR_DF_FLAG_ALPHA_STRAIGHT,\n KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT,\n KHR_DF_MODEL_UNSPECIFIED,\n KHR_DF_PRIMARIES_BT709,\n KHR_DF_PRIMARIES_DISPLAYP3,\n KHR_DF_PRIMARIES_UNSPECIFIED,\n KHR_DF_SAMPLE_DATATYPE_SIGNED,\n KHR_DF_TRANSFER_SRGB,\n KHR_DF_VENDORID_KHRONOS,\n KHR_DF_VERSION,\n KHR_SUPERCOMPRESSION_NONE,\n KHR_SUPERCOMPRESSION_ZSTD,\n KTX2Container,\n VK_FORMAT_ASTC_6x6_SRGB_BLOCK,\n VK_FORMAT_ASTC_6x6_UNORM_BLOCK,\n VK_FORMAT_R16G16B16A16_SFLOAT,\n VK_FORMAT_R16G16_SFLOAT,\n VK_FORMAT_R16_SFLOAT,\n VK_FORMAT_R32G32B32A32_SFLOAT,\n VK_FORMAT_R32G32_SFLOAT,\n VK_FORMAT_R32_SFLOAT,\n VK_FORMAT_R8G8B8A8_SRGB,\n VK_FORMAT_R8G8B8A8_UNORM,\n VK_FORMAT_R8G8_SRGB,\n VK_FORMAT_R8G8_UNORM,\n VK_FORMAT_R8_SRGB,\n VK_FORMAT_R8_UNORM,\n VK_FORMAT_UNDEFINED,\n read\n};\n//# sourceMappingURL=ktx-parse.js.map\n","let init;\nlet instance;\nlet heap;\nconst IMPORT_OBJECT = {\n env: {\n emscripten_notify_memory_growth: function(index) {\n heap = new Uint8Array(instance.exports.memory.buffer);\n }\n }\n};\nclass ZSTDDecoder {\n init() {\n if (init)\n return init;\n if (typeof fetch !== \"undefined\") {\n init = fetch(\"data:application/wasm;base64,\" + wasm).then((response) => response.arrayBuffer()).then((arrayBuffer) => WebAssembly.instantiate(arrayBuffer, IMPORT_OBJECT)).then(this._init);\n } else {\n init = WebAssembly.instantiate(Buffer.from(wasm, \"base64\"), IMPORT_OBJECT).then(this._init);\n }\n return init;\n }\n _init(result) {\n instance = result.instance;\n IMPORT_OBJECT.env.emscripten_notify_memory_growth(0);\n }\n decode(array, uncompressedSize = 0) {\n if (!instance)\n throw new Error(`ZSTDDecoder: Await .init() before decoding.`);\n const compressedSize = array.byteLength;\n const compressedPtr = instance.exports.malloc(compressedSize);\n heap.set(array, compressedPtr);\n uncompressedSize = uncompressedSize || Number(instance.exports.ZSTD_findDecompressedSize(compressedPtr, compressedSize));\n const uncompressedPtr = instance.exports.malloc(uncompressedSize);\n const actualSize = instance.exports.ZSTD_decompress(\n uncompressedPtr,\n uncompressedSize,\n compressedPtr,\n compressedSize\n );\n const dec = heap.slice(uncompressedPtr, uncompressedPtr + actualSize);\n instance.exports.free(compressedPtr);\n instance.exports.free(uncompressedPtr);\n return dec;\n }\n}\nconst wasm = \"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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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\";\nexport {\n ZSTDDecoder\n};\n//# sourceMappingURL=zstddec.js.map\n","import { CompressedTexture, CubeReflectionMapping } from \"three\";\nclass CompressedCubeTexture extends CompressedTexture {\n constructor(images, format, type) {\n super(void 0, images[0].width, images[0].height, format, type, CubeReflectionMapping);\n this.isCompressedCubeTexture = true;\n this.isCubeTexture = true;\n this.image = images;\n }\n}\nexport {\n CompressedCubeTexture\n};\n//# sourceMappingURL=CompressedCubeTexture.js.map\n","import { CompressedTexture, ClampToEdgeWrapping } from \"three\";\nclass CompressedArrayTexture extends CompressedTexture {\n constructor(mipmaps, width, height, depth, format, type) {\n super(mipmaps, width, height, format, type);\n this.isCompressedArrayTexture = true;\n this.image.depth = depth;\n this.wrapR = ClampToEdgeWrapping;\n }\n}\nexport {\n CompressedArrayTexture\n};\n//# sourceMappingURL=CompressedArrayTexture.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Loader, RGBAFormat, RGBA_ASTC_4x4_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT5_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, FileLoader, UnsignedByteType, CompressedTexture, LinearFilter, LinearMipmapLinearFilter, FloatType, HalfFloatType, DataTexture, RGFormat, RedFormat, RGBA_ASTC_6x6_Format } from \"three\";\nimport { WorkerPool } from \"../utils/WorkerPool.js\";\nimport { KHR_DF_FLAG_ALPHA_PREMULTIPLIED, read, VK_FORMAT_UNDEFINED, KHR_SUPERCOMPRESSION_ZSTD, KHR_SUPERCOMPRESSION_NONE, KHR_DF_PRIMARIES_BT709, KHR_DF_TRANSFER_SRGB, KHR_DF_PRIMARIES_DISPLAYP3, KHR_DF_PRIMARIES_UNSPECIFIED, VK_FORMAT_R32G32B32A32_SFLOAT, VK_FORMAT_R16G16B16A16_SFLOAT, VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_R8G8B8A8_SRGB, VK_FORMAT_R32G32_SFLOAT, VK_FORMAT_R16G16_SFLOAT, VK_FORMAT_R8G8_UNORM, VK_FORMAT_R8G8_SRGB, VK_FORMAT_R32_SFLOAT, VK_FORMAT_R16_SFLOAT, VK_FORMAT_R8_SRGB, VK_FORMAT_R8_UNORM, VK_FORMAT_ASTC_6x6_SRGB_BLOCK, VK_FORMAT_ASTC_6x6_UNORM_BLOCK } from \"../libs/ktx-parse.js\";\nimport { ZSTDDecoder } from \"../libs/zstddec.js\";\nimport { CompressedCubeTexture } from \"../_polyfill/CompressedCubeTexture.js\";\nimport { CompressedArrayTexture } from \"../_polyfill/CompressedArrayTexture.js\";\nimport { Data3DTexture } from \"../_polyfill/Data3DTexture.js\";\nconst LinearEncoding = 3e3;\nconst sRGBEncoding = 3001;\nconst NoColorSpace = \"\";\nconst DisplayP3ColorSpace = \"display-p3\";\nconst LinearDisplayP3ColorSpace = \"display-p3-linear\";\nconst LinearSRGBColorSpace = \"srgb-linear\";\nconst SRGBColorSpace = \"srgb\";\nconst _taskCache = /* @__PURE__ */ new WeakMap();\nlet _activeLoaders = 0;\nlet _zstd;\nconst KTX2Loader = /* @__PURE__ */ (() => {\n const _KTX2Loader = class extends Loader {\n constructor(manager) {\n super(manager);\n this.transcoderPath = \"\";\n this.transcoderBinary = null;\n this.transcoderPending = null;\n this.workerPool = new WorkerPool();\n this.workerSourceURL = \"\";\n this.workerConfig = null;\n if (typeof MSC_TRANSCODER !== \"undefined\") {\n console.warn(\n 'THREE.KTX2Loader: Please update to latest \"basis_transcoder\". \"msc_basis_transcoder\" is no longer supported in three.js r125+.'\n );\n }\n }\n setTranscoderPath(path) {\n this.transcoderPath = path;\n return this;\n }\n setWorkerLimit(num) {\n this.workerPool.setWorkerLimit(num);\n return this;\n }\n detectSupport(renderer) {\n this.workerConfig = {\n astcSupported: renderer.extensions.has(\"WEBGL_compressed_texture_astc\"),\n etc1Supported: renderer.extensions.has(\"WEBGL_compressed_texture_etc1\"),\n etc2Supported: renderer.extensions.has(\"WEBGL_compressed_texture_etc\"),\n dxtSupported: renderer.extensions.has(\"WEBGL_compressed_texture_s3tc\"),\n bptcSupported: renderer.extensions.has(\"EXT_texture_compression_bptc\"),\n pvrtcSupported: renderer.extensions.has(\"WEBGL_compressed_texture_pvrtc\") || renderer.extensions.has(\"WEBKIT_WEBGL_compressed_texture_pvrtc\")\n };\n if (renderer.capabilities.isWebGL2) {\n this.workerConfig.etc1Supported = false;\n }\n return this;\n }\n init() {\n if (!this.transcoderPending) {\n const jsLoader = new FileLoader(this.manager);\n jsLoader.setPath(this.transcoderPath);\n jsLoader.setWithCredentials(this.withCredentials);\n const jsContent = jsLoader.loadAsync(\"basis_transcoder.js\");\n const binaryLoader = new FileLoader(this.manager);\n binaryLoader.setPath(this.transcoderPath);\n binaryLoader.setResponseType(\"arraybuffer\");\n binaryLoader.setWithCredentials(this.withCredentials);\n const binaryContent = binaryLoader.loadAsync(\"basis_transcoder.wasm\");\n this.transcoderPending = Promise.all([jsContent, binaryContent]).then(([jsContent2, binaryContent2]) => {\n const fn = _KTX2Loader.BasisWorker.toString();\n const body = [\n \"/* constants */\",\n \"let _EngineFormat = \" + JSON.stringify(_KTX2Loader.EngineFormat),\n \"let _TranscoderFormat = \" + JSON.stringify(_KTX2Loader.TranscoderFormat),\n \"let _BasisFormat = \" + JSON.stringify(_KTX2Loader.BasisFormat),\n \"/* basis_transcoder.js */\",\n jsContent2,\n \"/* worker */\",\n fn.substring(fn.indexOf(\"{\") + 1, fn.lastIndexOf(\"}\"))\n ].join(\"\\n\");\n this.workerSourceURL = URL.createObjectURL(new Blob([body]));\n this.transcoderBinary = binaryContent2;\n this.workerPool.setWorkerCreator(() => {\n const worker = new Worker(this.workerSourceURL);\n const transcoderBinary = this.transcoderBinary.slice(0);\n worker.postMessage({ type: \"init\", config: this.workerConfig, transcoderBinary }, [transcoderBinary]);\n return worker;\n });\n });\n if (_activeLoaders > 0) {\n console.warn(\n \"THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances.\"\n );\n }\n _activeLoaders++;\n }\n return this.transcoderPending;\n }\n load(url, onLoad, onProgress, onError) {\n if (this.workerConfig === null) {\n throw new Error(\"THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.\");\n }\n const loader = new FileLoader(this.manager);\n loader.setResponseType(\"arraybuffer\");\n loader.setWithCredentials(this.withCredentials);\n loader.load(\n url,\n (buffer) => {\n if (_taskCache.has(buffer)) {\n const cachedTask = _taskCache.get(buffer);\n return cachedTask.promise.then(onLoad).catch(onError);\n }\n this._createTexture(buffer).then((texture) => onLoad ? onLoad(texture) : null).catch(onError);\n },\n onProgress,\n onError\n );\n }\n _createTextureFrom(transcodeResult, container) {\n const { faces, width, height, format, type, error, dfdFlags } = transcodeResult;\n if (type === \"error\")\n return Promise.reject(error);\n let texture;\n if (container.faceCount === 6) {\n texture = new CompressedCubeTexture(faces, format, UnsignedByteType);\n } else {\n const mipmaps = faces[0].mipmaps;\n texture = container.layerCount > 1 ? new CompressedArrayTexture(mipmaps, width, height, container.layerCount, format, UnsignedByteType) : new CompressedTexture(mipmaps, width, height, format, UnsignedByteType);\n }\n texture.minFilter = faces[0].mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter;\n texture.magFilter = LinearFilter;\n texture.generateMipmaps = false;\n texture.needsUpdate = true;\n const colorSpace = parseColorSpace(container);\n if (\"colorSpace\" in texture)\n texture.colorSpace = colorSpace;\n else\n texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding;\n texture.premultiplyAlpha = !!(dfdFlags & KHR_DF_FLAG_ALPHA_PREMULTIPLIED);\n return texture;\n }\n /**\n * @param {ArrayBuffer} buffer\n * @param {object?} config\n * @return {Promise<CompressedTexture|CompressedArrayTexture|DataTexture|Data3DTexture>}\n */\n async _createTexture(buffer, config = {}) {\n const container = read(new Uint8Array(buffer));\n if (container.vkFormat !== VK_FORMAT_UNDEFINED) {\n return createRawTexture(container);\n }\n const taskConfig = config;\n const texturePending = this.init().then(() => {\n return this.workerPool.postMessage({ type: \"transcode\", buffer, taskConfig }, [buffer]);\n }).then((e) => this._createTextureFrom(e.data, container));\n _taskCache.set(buffer, { promise: texturePending });\n return texturePending;\n }\n dispose() {\n this.workerPool.dispose();\n if (this.workerSourceURL)\n URL.revokeObjectURL(this.workerSourceURL);\n _activeLoaders--;\n return this;\n }\n };\n let KTX2Loader2 = _KTX2Loader;\n /* CONSTANTS */\n __publicField(KTX2Loader2, \"BasisFormat\", {\n ETC1S: 0,\n UASTC_4x4: 1\n });\n __publicField(KTX2Loader2, \"TranscoderFormat\", {\n ETC1: 0,\n ETC2: 1,\n BC1: 2,\n BC3: 3,\n BC4: 4,\n BC5: 5,\n BC7_M6_OPAQUE_ONLY: 6,\n BC7_M5: 7,\n PVRTC1_4_RGB: 8,\n PVRTC1_4_RGBA: 9,\n ASTC_4x4: 10,\n ATC_RGB: 11,\n ATC_RGBA_INTERPOLATED_ALPHA: 12,\n RGBA32: 13,\n RGB565: 14,\n BGR565: 15,\n RGBA4444: 16\n });\n __publicField(KTX2Loader2, \"EngineFormat\", {\n RGBAFormat,\n RGBA_ASTC_4x4_Format,\n RGBA_BPTC_Format,\n RGBA_ETC2_EAC_Format,\n RGBA_PVRTC_4BPPV1_Format,\n RGBA_S3TC_DXT5_Format,\n RGB_ETC1_Format,\n RGB_ETC2_Format,\n RGB_PVRTC_4BPPV1_Format,\n RGB_S3TC_DXT1_Format\n });\n /* WEB WORKER */\n __publicField(KTX2Loader2, \"BasisWorker\", function() {\n let config;\n let transcoderPending;\n let BasisModule;\n const EngineFormat = _EngineFormat;\n const TranscoderFormat = _TranscoderFormat;\n const BasisFormat = _BasisFormat;\n self.addEventListener(\"message\", function(e) {\n const message = e.data;\n switch (message.type) {\n case \"init\":\n config = message.config;\n init(message.transcoderBinary);\n break;\n case \"transcode\":\n transcoderPending.then(() => {\n try {\n const { faces, buffers, width, height, hasAlpha, format, dfdFlags } = transcode(message.buffer);\n self.postMessage(\n { type: \"transcode\", id: message.id, faces, width, height, hasAlpha, format, dfdFlags },\n buffers\n );\n } catch (error) {\n console.error(error);\n self.postMessage({ type: \"error\", id: message.id, error: error.message });\n }\n });\n break;\n }\n });\n function init(wasmBinary) {\n transcoderPending = new Promise((resolve) => {\n BasisModule = { wasmBinary, onRuntimeInitialized: resolve };\n BASIS(BasisModule);\n }).then(() => {\n BasisModule.initializeBasis();\n if (BasisModule.KTX2File === void 0) {\n console.warn(\"THREE.KTX2Loader: Please update Basis Universal transcoder.\");\n }\n });\n }\n function transcode(buffer) {\n const ktx2File = new BasisModule.KTX2File(new Uint8Array(buffer));\n function cleanup() {\n ktx2File.close();\n ktx2File.delete();\n }\n if (!ktx2File.isValid()) {\n cleanup();\n throw new Error(\"THREE.KTX2Loader:\tInvalid or unsupported .ktx2 file\");\n }\n const basisFormat = ktx2File.isUASTC() ? BasisFormat.UASTC_4x4 : BasisFormat.ETC1S;\n const width = ktx2File.getWidth();\n const height = ktx2File.getHeight();\n const layerCount = ktx2File.getLayers() || 1;\n const levelCount = ktx2File.getLevels();\n const faceCount = ktx2File.getFaces();\n const hasAlpha = ktx2File.getHasAlpha();\n const dfdFlags = ktx2File.getDFDFlags();\n const { transcoderFormat, engineFormat } = getTranscoderFormat(basisFormat, width, height, hasAlpha);\n if (!width || !height || !levelCount) {\n cleanup();\n throw new Error(\"THREE.KTX2Loader:\tInvalid texture\");\n }\n if (!ktx2File.startTranscoding()) {\n cleanup();\n throw new Error(\"THREE.KTX2Loader: .startTranscoding failed\");\n }\n const faces = [];\n const buffers = [];\n for (let face = 0; face < faceCount; face++) {\n const mipmaps = [];\n for (let mip = 0; mip < levelCount; mip++) {\n const layerMips = [];\n let mipWidth, mipHeight;\n for (let layer = 0; layer < layerCount; layer++) {\n const levelInfo = ktx2File.getImageLevelInfo(mip, layer, face);\n if (face === 0 && mip === 0 && layer === 0 && (levelInfo.origWidth % 4 !== 0 || levelInfo.origHeight % 4 !== 0)) {\n console.warn(\"THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions.\");\n }\n if (levelCount > 1) {\n mipWidth = levelInfo.origWidth;\n mipHeight = levelInfo.origHeight;\n } else {\n mipWidth = levelInfo.width;\n mipHeight = levelInfo.height;\n }\n const dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, transcoderFormat));\n const status = ktx2File.transcodeImage(dst, mip, layer, face, transcoderFormat, 0, -1, -1);\n if (!status) {\n cleanup();\n throw new Error(\"THREE.KTX2Loader: .transcodeImage failed.\");\n }\n layerMips.push(dst);\n }\n const mipData = concat(layerMips);\n mipmaps.push({ data: mipData, width: mipWidth, height: mipHeight });\n buffers.push(mipData.buffer);\n }\n faces.push({ mipmaps, width, height, format: engineFormat });\n }\n cleanup();\n return { faces, buffers, width, height, hasAlpha, format: engineFormat, dfdFlags };\n }\n const FORMAT_OPTIONS = [\n {\n if: \"astcSupported\",\n basisFormat: [BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ASTC_4x4, TranscoderFormat.ASTC_4x4],\n engineFormat: [EngineFormat.RGBA_ASTC_4x4_Format, EngineFormat.RGBA_ASTC_4x4_Format],\n priorityETC1S: Infinity,\n priorityUASTC: 1,\n needsPowerOfTwo: false\n },\n {\n if: \"bptcSupported\",\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.BC7_M5, TranscoderFormat.BC7_M5],\n engineFormat: [EngineFormat.RGBA_BPTC_Format, EngineFormat.RGBA_BPTC_Format],\n priorityETC1S: 3,\n priorityUASTC: 2,\n needsPowerOfTwo: false\n },\n {\n if: \"dxtSupported\",\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.BC1, TranscoderFormat.BC3],\n engineFormat: [EngineFormat.RGB_S3TC_DXT1_Format, EngineFormat.RGBA_S3TC_DXT5_Format],\n priorityETC1S: 4,\n priorityUASTC: 5,\n needsPowerOfTwo: false\n },\n {\n if: \"etc2Supported\",\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ETC1, TranscoderFormat.ETC2],\n engineFormat: [EngineFormat.RGB_ETC2_Format, EngineFormat.RGBA_ETC2_EAC_Format],\n priorityETC1S: 1,\n priorityUASTC: 3,\n needsPowerOfTwo: false\n },\n {\n if: \"etc1Supported\",\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ETC1],\n engineFormat: [EngineFormat.RGB_ETC1_Format],\n priorityETC1S: 2,\n priorityUASTC: 4,\n needsPowerOfTwo: false\n },\n {\n if: \"pvrtcSupported\",\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.PVRTC1_4_RGB, TranscoderFormat.PVRTC1_4_RGBA],\n engineFormat: [EngineFormat.RGB_PVRTC_4BPPV1_Format, EngineFormat.RGBA_PVRTC_4BPPV1_Format],\n priorityETC1S: 5,\n priorityUASTC: 6,\n needsPowerOfTwo: true\n }\n ];\n const ETC1S_OPTIONS = FORMAT_OPTIONS.sort(function(a, b) {\n return a.priorityETC1S - b.priorityETC1S;\n });\n const UASTC_OPTIONS = FORMAT_OPTIONS.sort(function(a, b) {\n return a.priorityUASTC - b.priorityUASTC;\n });\n function getTranscoderFormat(basisFormat, width, height, hasAlpha) {\n let transcoderFormat;\n let engineFormat;\n const options = basisFormat === BasisFormat.ETC1S ? ETC1S_OPTIONS : UASTC_OPTIONS;\n for (let i = 0; i < options.length; i++) {\n const opt = options[i];\n if (!config[opt.if])\n continue;\n if (!opt.basisFormat.includes(basisFormat))\n continue;\n if (hasAlpha && opt.transcoderFormat.length < 2)\n continue;\n if (opt.needsPowerOfTwo && !(isPowerOfTwo(width) && isPowerOfTwo(height)))\n continue;\n transcoderFormat = opt.transcoderFormat[hasAlpha ? 1 : 0];\n engineFormat = opt.engineFormat[hasAlpha ? 1 : 0];\n return { transcoderFormat, engineFormat };\n }\n console.warn(\"THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32.\");\n transcoderFormat = TranscoderFormat.RGBA32;\n engineFormat = EngineFormat.RGBAFormat;\n return { transcoderFormat, engineFormat };\n }\n function isPowerOfTwo(value) {\n if (value <= 2)\n return true;\n return (value & value - 1) === 0 && value !== 0;\n }\n function concat(arrays) {\n if (arrays.length === 1)\n return arrays[0];\n let totalByteLength = 0;\n for (let i = 0; i < arrays.length; i++) {\n const array = arrays[i];\n totalByteLength += array.byteLength;\n }\n const result = new Uint8Array(totalByteLength);\n let byteOffset = 0;\n for (let i = 0; i < arrays.length; i++) {\n const array = arrays[i];\n result.set(array, byteOffset);\n byteOffset += array.byteLength;\n }\n return result;\n }\n });\n return KTX2Loader2;\n})();\nconst UNCOMPRESSED_FORMATS = /* @__PURE__ */ new Set([RGBAFormat, RGFormat, RedFormat]);\nconst FORMAT_MAP = {\n [VK_FORMAT_R32G32B32A32_SFLOAT]: RGBAFormat,\n [VK_FORMAT_R16G16B16A16_SFLOAT]: RGBAFormat,\n [VK_FORMAT_R8G8B8A8_UNORM]: RGBAFormat,\n [VK_FORMAT_R8G8B8A8_SRGB]: RGBAFormat,\n [VK_FORMAT_R32G32_SFLOAT]: RGFormat,\n [VK_FORMAT_R16G16_SFLOAT]: RGFormat,\n [VK_FORMAT_R8G8_UNORM]: RGFormat,\n [VK_FORMAT_R8G8_SRGB]: RGFormat,\n [VK_FORMAT_R32_SFLOAT]: RedFormat,\n [VK_FORMAT_R16_SFLOAT]: RedFormat,\n [VK_FORMAT_R8_SRGB]: RedFormat,\n [VK_FORMAT_R8_UNORM]: RedFormat,\n [VK_FORMAT_ASTC_6x6_SRGB_BLOCK]: RGBA_ASTC_6x6_Format,\n [VK_FORMAT_ASTC_6x6_UNORM_BLOCK]: RGBA_ASTC_6x6_Format\n};\nconst TYPE_MAP = {\n [VK_FORMAT_R32G32B32A32_SFLOAT]: FloatType,\n [VK_FORMAT_R16G16B16A16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8G8B8A8_UNORM]: UnsignedByteType,\n [VK_FORMAT_R8G8B8A8_SRGB]: UnsignedByteType,\n [VK_FORMAT_R32G32_SFLOAT]: FloatType,\n [VK_FORMAT_R16G16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8G8_UNORM]: UnsignedByteType,\n [VK_FORMAT_R8G8_SRGB]: UnsignedByteType,\n [VK_FORMAT_R32_SFLOAT]: FloatType,\n [VK_FORMAT_R16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8_SRGB]: UnsignedByteType,\n [VK_FORMAT_R8_UNORM]: UnsignedByteType,\n [VK_FORMAT_ASTC_6x6_SRGB_BLOCK]: UnsignedByteType,\n [VK_FORMAT_ASTC_6x6_UNORM_BLOCK]: UnsignedByteType\n};\nasync function createRawTexture(container) {\n const { vkFormat } = container;\n if (FORMAT_MAP[vkFormat] === void 0) {\n throw new Error(\"THREE.KTX2Loader: Unsupported vkFormat.\");\n }\n let zstd;\n if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD) {\n if (!_zstd) {\n _zstd = new Promise(async (resolve) => {\n const zstd2 = new ZSTDDecoder();\n await zstd2.init();\n resolve(zstd2);\n });\n }\n zstd = await _zstd;\n }\n const mipmaps = [];\n for (let levelIndex = 0; levelIndex < container.levels.length; levelIndex++) {\n const levelWidth = Math.max(1, container.pixelWidth >> levelIndex);\n const levelHeight = Math.max(1, container.pixelHeight >> levelIndex);\n const levelDepth = container.pixelDepth ? Math.max(1, container.pixelDepth >> levelIndex) : 0;\n const level = container.levels[levelIndex];\n let levelData;\n if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_NONE) {\n levelData = level.levelData;\n } else if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD) {\n levelData = zstd.decode(level.levelData, level.uncompressedByteLength);\n } else {\n throw new Error(\"THREE.KTX2Loader: Unsupported supercompressionScheme.\");\n }\n let data;\n if (TYPE_MAP[vkFormat] === FloatType) {\n data = new Float32Array(\n levelData.buffer,\n levelData.byteOffset,\n levelData.byteLength / Float32Array.BYTES_PER_ELEMENT\n );\n } else if (TYPE_MAP[vkFormat] === HalfFloatType) {\n data = new Uint16Array(\n levelData.buffer,\n levelData.byteOffset,\n levelData.byteLength / Uint16Array.BYTES_PER_ELEMENT\n );\n } else {\n data = levelData;\n }\n mipmaps.push({\n data,\n width: levelWidth,\n height: levelHeight,\n depth: levelDepth\n });\n }\n let texture;\n if (UNCOMPRESSED_FORMATS.has(FORMAT_MAP[vkFormat])) {\n texture = container.pixelDepth === 0 ? new DataTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight) : new Data3DTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight, container.pixelDepth);\n } else {\n if (container.pixelDepth > 0)\n throw new Error(\"THREE.KTX2Loader: Unsupported pixelDepth.\");\n texture = new CompressedTexture(mipmaps, container.pixelWidth, container.pixelHeight);\n }\n texture.mipmaps = mipmaps;\n texture.type = TYPE_MAP[vkFormat];\n texture.format = FORMAT_MAP[vkFormat];\n texture.needsUpdate = true;\n const colorSpace = parseColorSpace(container);\n if (\"colorSpace\" in texture)\n texture.colorSpace = colorSpace;\n else\n texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding;\n return Promise.resolve(texture);\n}\nfunction parseColorSpace(container) {\n const dfd = container.dataFormatDescriptor[0];\n if (dfd.colorPrimaries === KHR_DF_PRIMARIES_BT709) {\n return dfd.transferFunction === KHR_DF_TRANSFER_SRGB ? SRGBColorSpace : LinearSRGBColorSpace;\n } else if (dfd.colorPrimaries === KHR_DF_PRIMARIES_DISPLAYP3) {\n return dfd.transferFunction === KHR_DF_TRANSFER_SRGB ? DisplayP3ColorSpace : LinearDisplayP3ColorSpace;\n } else if (dfd.colorPrimaries === KHR_DF_PRIMARIES_UNSPECIFIED) {\n return NoColorSpace;\n } else {\n console.warn(`THREE.KTX2Loader: Unsupported color primaries, \"${dfd.colorPrimaries}\"`);\n return NoColorSpace;\n }\n}\nexport {\n KTX2Loader\n};\n//# sourceMappingURL=KTX2Loader.js.map\n","import { DataTextureLoader, HalfFloatType, FloatType, DataUtils, LinearFilter } from \"three\";\nclass RGBELoader extends DataTextureLoader {\n constructor(manager) {\n super(manager);\n this.type = HalfFloatType;\n }\n // adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html\n parse(buffer) {\n const rgbe_read_error = 1, rgbe_write_error = 2, rgbe_format_error = 3, rgbe_memory_error = 4, rgbe_error = function(rgbe_error_code, msg) {\n switch (rgbe_error_code) {\n case rgbe_read_error:\n throw new Error(\"THREE.RGBELoader: Read Error: \" + (msg || \"\"));\n case rgbe_write_error:\n throw new Error(\"THREE.RGBELoader: Write Error: \" + (msg || \"\"));\n case rgbe_format_error:\n throw new Error(\"THREE.RGBELoader: Bad File Format: \" + (msg || \"\"));\n default:\n case rgbe_memory_error:\n throw new Error(\"THREE.RGBELoader: Memory Error: \" + (msg || \"\"));\n }\n }, RGBE_VALID_PROGRAMTYPE = 1, RGBE_VALID_FORMAT = 2, RGBE_VALID_DIMENSIONS = 4, NEWLINE = \"\\n\", fgets = function(buffer2, lineLimit, consume) {\n const chunkSize = 128;\n lineLimit = !lineLimit ? 1024 : lineLimit;\n let p = buffer2.pos, i = -1, len = 0, s = \"\", chunk = String.fromCharCode.apply(null, new Uint16Array(buffer2.subarray(p, p + chunkSize)));\n while (0 > (i = chunk.indexOf(NEWLINE)) && len < lineLimit && p < buffer2.byteLength) {\n s += chunk;\n len += chunk.length;\n p += chunkSize;\n chunk += String.fromCharCode.apply(null, new Uint16Array(buffer2.subarray(p, p + chunkSize)));\n }\n if (-1 < i) {\n if (false !== consume)\n buffer2.pos += len + i + 1;\n return s + chunk.slice(0, i);\n }\n return false;\n }, RGBE_ReadHeader = function(buffer2) {\n const magic_token_re = /^#\\?(\\S+)/, gamma_re = /^\\s*GAMMA\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/, exposure_re = /^\\s*EXPOSURE\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/, format_re = /^\\s*FORMAT=(\\S+)\\s*$/, dimensions_re = /^\\s*\\-Y\\s+(\\d+)\\s+\\+X\\s+(\\d+)\\s*$/, header = {\n valid: 0,\n string: \"\",\n comments: \"\",\n programtype: \"RGBE\",\n format: \"\",\n gamma: 1,\n exposure: 1,\n width: 0,\n height: 0\n };\n let line, match;\n if (buffer2.pos >= buffer2.byteLength || !(line = fgets(buffer2))) {\n rgbe_error(rgbe_read_error, \"no header found\");\n }\n if (!(match = line.match(magic_token_re))) {\n rgbe_error(rgbe_format_error, \"bad initial token\");\n }\n header.valid |= RGBE_VALID_PROGRAMTYPE;\n header.programtype = match[1];\n header.string += line + \"\\n\";\n while (true) {\n line = fgets(buffer2);\n if (false === line)\n break;\n header.string += line + \"\\n\";\n if (\"#\" === line.charAt(0)) {\n header.comments += line + \"\\n\";\n continue;\n }\n if (match = line.match(gamma_re)) {\n header.gamma = parseFloat(match[1]);\n }\n if (match = line.match(exposure_re)) {\n header.exposure = parseFloat(match[1]);\n }\n if (match = line.match(format_re)) {\n header.valid |= RGBE_VALID_FORMAT;\n header.format = match[1];\n }\n if (match = line.match(dimensions_re)) {\n header.valid |= RGBE_VALID_DIMENSIONS;\n header.height = parseInt(match[1], 10);\n header.width = parseInt(match[2], 10);\n }\n if (header.valid & RGBE_VALID_FORMAT && header.valid & RGBE_VALID_DIMENSIONS)\n break;\n }\n if (!(header.valid & RGBE_VALID_FORMAT)) {\n rgbe_error(rgbe_format_error, \"missing format specifier\");\n }\n if (!(header.valid & RGBE_VALID_DIMENSIONS)) {\n rgbe_error(rgbe_format_error, \"missing image size specifier\");\n }\n return header;\n }, RGBE_ReadPixels_RLE = function(buffer2, w2, h2) {\n const scanline_width = w2;\n if (\n // run length encoding is not allowed so read flat\n scanline_width < 8 || scanline_width > 32767 || // this file is not run length encoded\n 2 !== buffer2[0] || 2 !== buffer2[1] || buffer2[2] & 128\n ) {\n return new Uint8Array(buffer2);\n }\n if (scanline_width !== (buffer2[2] << 8 | buffer2[3])) {\n rgbe_error(rgbe_format_error, \"wrong scanline width\");\n }\n const data_rgba = new Uint8Array(4 * w2 * h2);\n if (!data_rgba.length) {\n rgbe_error(rgbe_memory_error, \"unable to allocate buffer space\");\n }\n let offset = 0, pos = 0;\n const ptr_end = 4 * scanline_width;\n const rgbeStart = new Uint8Array(4);\n const scanline_buffer = new Uint8Array(ptr_end);\n let num_scanlines = h2;\n while (num_scanlines > 0 && pos < buffer2.byteLength) {\n if (pos + 4 > buffer2.byteLength) {\n rgbe_error(rgbe_read_error);\n }\n rgbeStart[0] = buffer2[pos++];\n rgbeStart[1] = buffer2[pos++];\n rgbeStart[2] = buffer2[pos++];\n rgbeStart[3] = buffer2[pos++];\n if (2 != rgbeStart[0] || 2 != rgbeStart[1] || (rgbeStart[2] << 8 | rgbeStart[3]) != scanline_width) {\n rgbe_error(rgbe_format_error, \"bad rgbe scanline format\");\n }\n let ptr = 0, count;\n while (ptr < ptr_end && pos < buffer2.byteLength) {\n count = buffer2[pos++];\n const isEncodedRun = count > 128;\n if (isEncodedRun)\n count -= 128;\n if (0 === count || ptr + count > ptr_end) {\n rgbe_error(rgbe_format_error, \"bad scanline data\");\n }\n if (isEncodedRun) {\n const byteValue = buffer2[pos++];\n for (let i = 0; i < count; i++) {\n scanline_buffer[ptr++] = byteValue;\n }\n } else {\n scanline_buffer.set(buffer2.subarray(pos, pos + count), ptr);\n ptr += count;\n pos += count;\n }\n }\n const l = scanline_width;\n for (let i = 0; i < l; i++) {\n let off = 0;\n data_rgba[offset] = scanline_buffer[i + off];\n off += scanline_width;\n data_rgba[offset + 1] = scanline_buffer[i + off];\n off += scanline_width;\n data_rgba[offset + 2] = scanline_buffer[i + off];\n off += scanline_width;\n data_rgba[offset + 3] = scanline_buffer[i + off];\n offset += 4;\n }\n num_scanlines--;\n }\n return data_rgba;\n };\n const RGBEByteToRGBFloat = function(sourceArray, sourceOffset, destArray, destOffset) {\n const e = sourceArray[sourceOffset + 3];\n const scale = Math.pow(2, e - 128) / 255;\n destArray[destOffset + 0] = sourceArray[sourceOffset + 0] * scale;\n destArray[destOffset + 1] = sourceArray[sourceOffset + 1] * scale;\n destArray[destOffset + 2] = sourceArray[sourceOffset + 2] * scale;\n destArray[destOffset + 3] = 1;\n };\n const RGBEByteToRGBHalf = function(sourceArray, sourceOffset, destArray, destOffset) {\n const e = sourceArray[sourceOffset + 3];\n const scale = Math.pow(2, e - 128) / 255;\n destArray[destOffset + 0] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 0] * scale, 65504));\n destArray[destOffset + 1] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 1] * scale, 65504));\n destArray[destOffset + 2] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 2] * scale, 65504));\n destArray[destOffset + 3] = DataUtils.toHalfFloat(1);\n };\n const byteArray = new Uint8Array(buffer);\n byteArray.pos = 0;\n const rgbe_header_info = RGBE_ReadHeader(byteArray);\n const w = rgbe_header_info.width, h = rgbe_header_info.height, image_rgba_data = RGBE_ReadPixels_RLE(byteArray.subarray(byteArray.pos), w, h);\n let data, type;\n let numElements;\n switch (this.type) {\n case FloatType:\n numElements = image_rgba_data.length / 4;\n const floatArray = new Float32Array(numElements * 4);\n for (let j = 0; j < numElements; j++) {\n RGBEByteToRGBFloat(image_rgba_data, j * 4, floatArray, j * 4);\n }\n data = floatArray;\n type = FloatType;\n break;\n case HalfFloatType:\n numElements = image_rgba_data.length / 4;\n const halfArray = new Uint16Array(numElements * 4);\n for (let j = 0; j < numElements; j++) {\n RGBEByteToRGBHalf(image_rgba_data, j * 4, halfArray, j * 4);\n }\n data = halfArray;\n type = HalfFloatType;\n break;\n default:\n throw new Error(\"THREE.RGBELoader: Unsupported type: \" + this.type);\n }\n return {\n width: w,\n height: h,\n data,\n header: rgbe_header_info.string,\n gamma: rgbe_header_info.gamma,\n exposure: rgbe_header_info.exposure,\n type\n };\n }\n setDataType(value) {\n this.type = value;\n return this;\n }\n load(url, onLoad, onProgress, onError) {\n function onLoadCallback(texture, texData) {\n switch (texture.type) {\n case FloatType:\n case HalfFloatType:\n if (\"colorSpace\" in texture)\n texture.colorSpace = \"srgb-linear\";\n else\n texture.encoding = 3e3;\n texture.minFilter = LinearFilter;\n texture.magFilter = LinearFilter;\n texture.generateMipmaps = false;\n texture.flipY = true;\n break;\n }\n if (onLoad)\n onLoad(texture, texData);\n }\n return super.load(url, onLoadCallback, onProgress, onError);\n }\n}\nexport {\n RGBELoader\n};\n//# sourceMappingURL=RGBELoader.js.map\n","import { DataTextureLoader, HalfFloatType, FloatType, RGBAFormat, RedFormat, LinearFilter, DataUtils } from \"three\";\nimport { unzlibSync } from \"fflate\";\nimport { version } from \"../_polyfill/constants.js\";\nconst hasColorSpace = version >= 152;\nclass EXRLoader extends DataTextureLoader {\n constructor(manager) {\n super(manager);\n this.type = HalfFloatType;\n }\n parse(buffer) {\n const USHORT_RANGE = 1 << 16;\n const BITMAP_SIZE = USHORT_RANGE >> 3;\n const HUF_ENCBITS = 16;\n const HUF_DECBITS = 14;\n const HUF_ENCSIZE = (1 << HUF_ENCBITS) + 1;\n const HUF_DECSIZE = 1 << HUF_DECBITS;\n const HUF_DECMASK = HUF_DECSIZE - 1;\n const NBITS = 16;\n const A_OFFSET = 1 << NBITS - 1;\n const MOD_MASK = (1 << NBITS) - 1;\n const SHORT_ZEROCODE_RUN = 59;\n const LONG_ZEROCODE_RUN = 63;\n const SHORTEST_LONG_RUN = 2 + LONG_ZEROCODE_RUN - SHORT_ZEROCODE_RUN;\n const ULONG_SIZE = 8;\n const FLOAT32_SIZE = 4;\n const INT32_SIZE = 4;\n const INT16_SIZE = 2;\n const INT8_SIZE = 1;\n const STATIC_HUFFMAN = 0;\n const DEFLATE = 1;\n const UNKNOWN = 0;\n const LOSSY_DCT = 1;\n const RLE = 2;\n const logBase = Math.pow(2.7182818, 2.2);\n function reverseLutFromBitmap(bitmap, lut) {\n var k = 0;\n for (var i = 0; i < USHORT_RANGE; ++i) {\n if (i == 0 || bitmap[i >> 3] & 1 << (i & 7)) {\n lut[k++] = i;\n }\n }\n var n = k - 1;\n while (k < USHORT_RANGE)\n lut[k++] = 0;\n return n;\n }\n function hufClearDecTable(hdec) {\n for (var i = 0; i < HUF_DECSIZE; i++) {\n hdec[i] = {};\n hdec[i].len = 0;\n hdec[i].lit = 0;\n hdec[i].p = null;\n }\n }\n const getBitsReturn = { l: 0, c: 0, lc: 0 };\n function getBits(nBits, c, lc, uInt8Array2, inOffset) {\n while (lc < nBits) {\n c = c << 8 | parseUint8Array(uInt8Array2, inOffset);\n lc += 8;\n }\n lc -= nBits;\n getBitsReturn.l = c >> lc & (1 << nBits) - 1;\n getBitsReturn.c = c;\n getBitsReturn.lc = lc;\n }\n const hufTableBuffer = new Array(59);\n function hufCanonicalCodeTable(hcode) {\n for (var i = 0; i <= 58; ++i)\n hufTableBuffer[i] = 0;\n for (var i = 0; i < HUF_ENCSIZE; ++i)\n hufTableBuffer[hcode[i]] += 1;\n var c = 0;\n for (var i = 58; i > 0; --i) {\n var nc = c + hufTableBuffer[i] >> 1;\n hufTableBuffer[i] = c;\n c = nc;\n }\n for (var i = 0; i < HUF_ENCSIZE; ++i) {\n var l = hcode[i];\n if (l > 0)\n hcode[i] = l | hufTableBuffer[l]++ << 6;\n }\n }\n function hufUnpackEncTable(uInt8Array2, inDataView, inOffset, ni, im, iM, hcode) {\n var p = inOffset;\n var c = 0;\n var lc = 0;\n for (; im <= iM; im++) {\n if (p.value - inOffset.value > ni)\n return false;\n getBits(6, c, lc, uInt8Array2, p);\n var l = getBitsReturn.l;\n c = getBitsReturn.c;\n lc = getBitsReturn.lc;\n hcode[im] = l;\n if (l == LONG_ZEROCODE_RUN) {\n if (p.value - inOffset.value > ni) {\n throw \"Something wrong with hufUnpackEncTable\";\n }\n getBits(8, c, lc, uInt8Array2, p);\n var zerun = getBitsReturn.l + SHORTEST_LONG_RUN;\n c = getBitsReturn.c;\n lc = getBitsReturn.lc;\n if (im + zerun > iM + 1) {\n throw \"Something wrong with hufUnpackEncTable\";\n }\n while (zerun--)\n hcode[im++] = 0;\n im--;\n } else if (l >= SHORT_ZEROCODE_RUN) {\n var zerun = l - SHORT_ZEROCODE_RUN + 2;\n if (im + zerun > iM + 1) {\n throw \"Something wrong with hufUnpackEncTable\";\n }\n while (zerun--)\n hcode[im++] = 0;\n im--;\n }\n }\n hufCanonicalCodeTable(hcode);\n }\n function hufLength(code) {\n return code & 63;\n }\n function hufCode(code) {\n return code >> 6;\n }\n function hufBuildDecTable(hcode, im, iM, hdecod) {\n for (; im <= iM; im++) {\n var c = hufCode(hcode[im]);\n var l = hufLength(hcode[im]);\n if (c >> l) {\n throw \"Invalid table entry\";\n }\n if (l > HUF_DECBITS) {\n var pl = hdecod[c >> l - HUF_DECBITS];\n if (pl.len) {\n throw \"Invalid table entry\";\n }\n pl.lit++;\n if (pl.p) {\n var p = pl.p;\n pl.p = new Array(pl.lit);\n for (var i = 0; i < pl.lit - 1; ++i) {\n pl.p[i] = p[i];\n }\n } else {\n pl.p = new Array(1);\n }\n pl.p[pl.lit - 1] = im;\n } else if (l) {\n var plOffset = 0;\n for (var i = 1 << HUF_DECBITS - l; i > 0; i--) {\n var pl = hdecod[(c << HUF_DECBITS - l) + plOffset];\n if (pl.len || pl.p) {\n throw \"Invalid table entry\";\n }\n pl.len = l;\n pl.lit = im;\n plOffset++;\n }\n }\n }\n return true;\n }\n const getCharReturn = { c: 0, lc: 0 };\n function getChar(c, lc, uInt8Array2, inOffset) {\n c = c << 8 | parseUint8Array(uInt8Array2, inOffset);\n lc += 8;\n getCharReturn.c = c;\n getCharReturn.lc = lc;\n }\n const getCodeReturn = { c: 0, lc: 0 };\n function getCode(po, rlc, c, lc, uInt8Array2, inDataView, inOffset, outBuffer, outBufferOffset, outBufferEndOffset) {\n if (po == rlc) {\n if (lc < 8) {\n getChar(c, lc, uInt8Array2, inOffset);\n c = getCharReturn.c;\n lc = getCharReturn.lc;\n }\n lc -= 8;\n var cs = c >> lc;\n var cs = new Uint8Array([cs])[0];\n if (outBufferOffset.value + cs > outBufferEndOffset) {\n return false;\n }\n var s = outBuffer[outBufferOffset.value - 1];\n while (cs-- > 0) {\n outBuffer[outBufferOffset.value++] = s;\n }\n } else if (outBufferOffset.value < outBufferEndOffset) {\n outBuffer[outBufferOffset.value++] = po;\n } else {\n return false;\n }\n getCodeReturn.c = c;\n getCodeReturn.lc = lc;\n }\n function UInt16(value) {\n return value & 65535;\n }\n function Int16(value) {\n var ref = UInt16(value);\n return ref > 32767 ? ref - 65536 : ref;\n }\n const wdec14Return = { a: 0, b: 0 };\n function wdec14(l, h) {\n var ls = Int16(l);\n var hs = Int16(h);\n var hi = hs;\n var ai = ls + (hi & 1) + (hi >> 1);\n var as = ai;\n var bs = ai - hi;\n wdec14Return.a = as;\n wdec14Return.b = bs;\n }\n function wdec16(l, h) {\n var m = UInt16(l);\n var d = UInt16(h);\n var bb = m - (d >> 1) & MOD_MASK;\n var aa = d + bb - A_OFFSET & MOD_MASK;\n wdec14Return.a = aa;\n wdec14Return.b = bb;\n }\n function wav2Decode(buffer2, j, nx, ox, ny, oy, mx) {\n var w14 = mx < 1 << 14;\n var n = nx > ny ? ny : nx;\n var p = 1;\n var p2;\n while (p <= n)\n p <<= 1;\n p >>= 1;\n p2 = p;\n p >>= 1;\n while (p >= 1) {\n var py = 0;\n var ey = py + oy * (ny - p2);\n var oy1 = oy * p;\n var oy2 = oy * p2;\n var ox1 = ox * p;\n var ox2 = ox * p2;\n var i00, i01, i10, i11;\n for (; py <= ey; py += oy2) {\n var px = py;\n var ex = py + ox * (nx - p2);\n for (; px <= ex; px += ox2) {\n var p01 = px + ox1;\n var p10 = px + oy1;\n var p11 = p10 + ox1;\n if (w14) {\n wdec14(buffer2[px + j], buffer2[p10 + j]);\n i00 = wdec14Return.a;\n i10 = wdec14Return.b;\n wdec14(buffer2[p01 + j], buffer2[p11 + j]);\n i01 = wdec14Return.a;\n i11 = wdec14Return.b;\n wdec14(i00, i01);\n buffer2[px + j] = wdec14Return.a;\n buffer2[p01 + j] = wdec14Return.b;\n wdec14(i10, i11);\n buffer2[p10 + j] = wdec14Return.a;\n buffer2[p11 + j] = wdec14Return.b;\n } else {\n wdec16(buffer2[px + j], buffer2[p10 + j]);\n i00 = wdec14Return.a;\n i10 = wdec14Return.b;\n wdec16(buffer2[p01 + j], buffer2[p11 + j]);\n i01 = wdec14Return.a;\n i11 = wdec14Return.b;\n wdec16(i00, i01);\n buffer2[px + j] = wdec14Return.a;\n buffer2[p01 + j] = wdec14Return.b;\n wdec16(i10, i11);\n buffer2[p10 + j] = wdec14Return.a;\n buffer2[p11 + j] = wdec14Return.b;\n }\n }\n if (nx & p) {\n var p10 = px + oy1;\n if (w14)\n wdec14(buffer2[px + j], buffer2[p10 + j]);\n else\n wdec16(buffer2[px + j], buffer2[p10 + j]);\n i00 = wdec14Return.a;\n buffer2[p10 + j] = wdec14Return.b;\n buffer2[px + j] = i00;\n }\n }\n if (ny & p) {\n var px = py;\n var ex = py + ox * (nx - p2);\n for (; px <= ex; px += ox2) {\n var p01 = px + ox1;\n if (w14)\n wdec14(buffer2[px + j], buffer2[p01 + j]);\n else\n wdec16(buffer2[px + j], buffer2[p01 + j]);\n i00 = wdec14Return.a;\n buffer2[p01 + j] = wdec14Return.b;\n buffer2[px + j] = i00;\n }\n }\n p2 = p;\n p >>= 1;\n }\n return py;\n }\n function hufDecode(encodingTable, decodingTable, uInt8Array2, inDataView, inOffset, ni, rlc, no, outBuffer, outOffset) {\n var c = 0;\n var lc = 0;\n var outBufferEndOffset = no;\n var inOffsetEnd = Math.trunc(inOffset.value + (ni + 7) / 8);\n while (inOffset.value < inOffsetEnd) {\n getChar(c, lc, uInt8Array2, inOffset);\n c = getCharReturn.c;\n lc = getCharReturn.lc;\n while (lc >= HUF_DECBITS) {\n var index = c >> lc - HUF_DECBITS & HUF_DECMASK;\n var pl = decodingTable[index];\n if (pl.len) {\n lc -= pl.len;\n getCode(pl.lit, rlc, c, lc, uInt8Array2, inDataView, inOffset, outBuffer, outOffset, outBufferEndOffset);\n c = getCodeReturn.c;\n lc = getCodeReturn.lc;\n } else {\n if (!pl.p) {\n throw \"hufDecode issues\";\n }\n var j;\n for (j = 0; j < pl.lit; j++) {\n var l = hufLength(encodingTable[pl.p[j]]);\n while (lc < l && inOffset.value < inOffsetEnd) {\n getChar(c, lc, uInt8Array2, inOffset);\n c = getCharReturn.c;\n lc = getCharReturn.lc;\n }\n if (lc >= l) {\n if (hufCode(encodingTable[pl.p[j]]) == (c >> lc - l & (1 << l) - 1)) {\n lc -= l;\n getCode(\n pl.p[j],\n rlc,\n c,\n lc,\n uInt8Array2,\n inDataView,\n inOffset,\n outBuffer,\n outOffset,\n outBufferEndOffset\n );\n c = getCodeReturn.c;\n lc = getCodeReturn.lc;\n break;\n }\n }\n }\n if (j == pl.lit) {\n throw \"hufDecode issues\";\n }\n }\n }\n }\n var i = 8 - ni & 7;\n c >>= i;\n lc -= i;\n while (lc > 0) {\n var pl = decodingTable[c << HUF_DECBITS - lc & HUF_DECMASK];\n if (pl.len) {\n lc -= pl.len;\n getCode(pl.lit, rlc, c, lc, uInt8Array2, inDataView, inOffset, outBuffer, outOffset, outBufferEndOffset);\n c = getCodeReturn.c;\n lc = getCodeReturn.lc;\n } else {\n throw \"hufDecode issues\";\n }\n }\n return true;\n }\n function hufUncompress(uInt8Array2, inDataView, inOffset, nCompressed, outBuffer, nRaw) {\n var outOffset = { value: 0 };\n var initialInOffset = inOffset.value;\n var im = parseUint32(inDataView, inOffset);\n var iM = parseUint32(inDataView, inOffset);\n inOffset.value += 4;\n var nBits = parseUint32(inDataView, inOffset);\n inOffset.value += 4;\n if (im < 0 || im >= HUF_ENCSIZE || iM < 0 || iM >= HUF_ENCSIZE) {\n throw \"Something wrong with HUF_ENCSIZE\";\n }\n var freq = new Array(HUF_ENCSIZE);\n var hdec = new Array(HUF_DECSIZE);\n hufClearDecTable(hdec);\n var ni = nCompressed - (inOffset.value - initialInOffset);\n hufUnpackEncTable(uInt8Array2, inDataView, inOffset, ni, im, iM, freq);\n if (nBits > 8 * (nCompressed - (inOffset.value - initialInOffset))) {\n throw \"Something wrong with hufUncompress\";\n }\n hufBuildDecTable(freq, im, iM, hdec);\n hufDecode(freq, hdec, uInt8Array2, inDataView, inOffset, nBits, iM, nRaw, outBuffer, outOffset);\n }\n function applyLut(lut, data, nData) {\n for (var i = 0; i < nData; ++i) {\n data[i] = lut[data[i]];\n }\n }\n function predictor(source) {\n for (var t = 1; t < source.length; t++) {\n var d = source[t - 1] + source[t] - 128;\n source[t] = d;\n }\n }\n function interleaveScalar(source, out) {\n var t1 = 0;\n var t2 = Math.floor((source.length + 1) / 2);\n var s = 0;\n var stop = source.length - 1;\n while (true) {\n if (s > stop)\n break;\n out[s++] = source[t1++];\n if (s > stop)\n break;\n out[s++] = source[t2++];\n }\n }\n function decodeRunLength(source) {\n var size = source.byteLength;\n var out = new Array();\n var p = 0;\n var reader = new DataView(source);\n while (size > 0) {\n var l = reader.getInt8(p++);\n if (l < 0) {\n var count = -l;\n size -= count + 1;\n for (var i = 0; i < count; i++) {\n out.push(reader.getUint8(p++));\n }\n } else {\n var count = l;\n size -= 2;\n var value = reader.getUint8(p++);\n for (var i = 0; i < count + 1; i++) {\n out.push(value);\n }\n }\n }\n return out;\n }\n function lossyDctDecode(cscSet, rowPtrs, channelData, acBuffer, dcBuffer, outBuffer) {\n var dataView = new DataView(outBuffer.buffer);\n var width = channelData[cscSet.idx[0]].width;\n var height = channelData[cscSet.idx[0]].height;\n var numComp = 3;\n var numFullBlocksX = Math.floor(width / 8);\n var numBlocksX = Math.ceil(width / 8);\n var numBlocksY = Math.ceil(height / 8);\n var leftoverX = width - (numBlocksX - 1) * 8;\n var leftoverY = height - (numBlocksY - 1) * 8;\n var currAcComp = { value: 0 };\n var currDcComp = new Array(numComp);\n var dctData = new Array(numComp);\n var halfZigBlock = new Array(numComp);\n var rowBlock = new Array(numComp);\n var rowOffsets = new Array(numComp);\n for (let comp2 = 0; comp2 < numComp; ++comp2) {\n rowOffsets[comp2] = rowPtrs[cscSet.idx[comp2]];\n currDcComp[comp2] = comp2 < 1 ? 0 : currDcComp[comp2 - 1] + numBlocksX * numBlocksY;\n dctData[comp2] = new Float32Array(64);\n halfZigBlock[comp2] = new Uint16Array(64);\n rowBlock[comp2] = new Uint16Array(numBlocksX * 64);\n }\n for (let blocky = 0; blocky < numBlocksY; ++blocky) {\n var maxY = 8;\n if (blocky == numBlocksY - 1)\n maxY = leftoverY;\n var maxX = 8;\n for (let blockx = 0; blockx < numBlocksX; ++blockx) {\n if (blockx == numBlocksX - 1)\n maxX = leftoverX;\n for (let comp2 = 0; comp2 < numComp; ++comp2) {\n halfZigBlock[comp2].fill(0);\n halfZigBlock[comp2][0] = dcBuffer[currDcComp[comp2]++];\n unRleAC(currAcComp, acBuffer, halfZigBlock[comp2]);\n unZigZag(halfZigBlock[comp2], dctData[comp2]);\n dctInverse(dctData[comp2]);\n }\n {\n csc709Inverse(dctData);\n }\n for (let comp2 = 0; comp2 < numComp; ++comp2) {\n convertToHalf(dctData[comp2], rowBlock[comp2], blockx * 64);\n }\n }\n let offset2 = 0;\n for (let comp2 = 0; comp2 < numComp; ++comp2) {\n const type2 = channelData[cscSet.idx[comp2]].type;\n for (let y2 = 8 * blocky; y2 < 8 * blocky + maxY; ++y2) {\n offset2 = rowOffsets[comp2][y2];\n for (let blockx = 0; blockx < numFullBlocksX; ++blockx) {\n const src = blockx * 64 + (y2 & 7) * 8;\n dataView.setUint16(offset2 + 0 * INT16_SIZE * type2, rowBlock[comp2][src + 0], true);\n dataView.setUint16(offset2 + 1 * INT16_SIZE * type2, rowBlock[comp2][src + 1], true);\n dataView.setUint16(offset2 + 2 * INT16_SIZE * type2, rowBlock[comp2][src + 2], true);\n dataView.setUint16(offset2 + 3 * INT16_SIZE * type2, rowBlock[comp2][src + 3], true);\n dataView.setUint16(offset2 + 4 * INT16_SIZE * type2, rowBlock[comp2][src + 4], true);\n dataView.setUint16(offset2 + 5 * INT16_SIZE * type2, rowBlock[comp2][src + 5], true);\n dataView.setUint16(offset2 + 6 * INT16_SIZE * type2, rowBlock[comp2][src + 6], true);\n dataView.setUint16(offset2 + 7 * INT16_SIZE * type2, rowBlock[comp2][src + 7], true);\n offset2 += 8 * INT16_SIZE * type2;\n }\n }\n if (numFullBlocksX != numBlocksX) {\n for (let y2 = 8 * blocky; y2 < 8 * blocky + maxY; ++y2) {\n const offset3 = rowOffsets[comp2][y2] + 8 * numFullBlocksX * INT16_SIZE * type2;\n const src = numFullBlocksX * 64 + (y2 & 7) * 8;\n for (let x2 = 0; x2 < maxX; ++x2) {\n dataView.setUint16(offset3 + x2 * INT16_SIZE * type2, rowBlock[comp2][src + x2], true);\n }\n }\n }\n }\n }\n var halfRow = new Uint16Array(width);\n var dataView = new DataView(outBuffer.buffer);\n for (var comp = 0; comp < numComp; ++comp) {\n channelData[cscSet.idx[comp]].decoded = true;\n var type = channelData[cscSet.idx[comp]].type;\n if (channelData[comp].type != 2)\n continue;\n for (var y = 0; y < height; ++y) {\n const offset2 = rowOffsets[comp][y];\n for (var x = 0; x < width; ++x) {\n halfRow[x] = dataView.getUint16(offset2 + x * INT16_SIZE * type, true);\n }\n for (var x = 0; x < width; ++x) {\n dataView.setFloat32(offset2 + x * INT16_SIZE * type, decodeFloat16(halfRow[x]), true);\n }\n }\n }\n }\n function unRleAC(currAcComp, acBuffer, halfZigBlock) {\n var acValue;\n var dctComp = 1;\n while (dctComp < 64) {\n acValue = acBuffer[currAcComp.value];\n if (acValue == 65280) {\n dctComp = 64;\n } else if (acValue >> 8 == 255) {\n dctComp += acValue & 255;\n } else {\n halfZigBlock[dctComp] = acValue;\n dctComp++;\n }\n currAcComp.value++;\n }\n }\n function unZigZag(src, dst) {\n dst[0] = decodeFloat16(src[0]);\n dst[1] = decodeFloat16(src[1]);\n dst[2] = decodeFloat16(src[5]);\n dst[3] = decodeFloat16(src[6]);\n dst[4] = decodeFloat16(src[14]);\n dst[5] = decodeFloat16(src[15]);\n dst[6] = decodeFloat16(src[27]);\n dst[7] = decodeFloat16(src[28]);\n dst[8] = decodeFloat16(src[2]);\n dst[9] = decodeFloat16(src[4]);\n dst[10] = decodeFloat16(src[7]);\n dst[11] = decodeFloat16(src[13]);\n dst[12] = decodeFloat16(src[16]);\n dst[13] = decodeFloat16(src[26]);\n dst[14] = decodeFloat16(src[29]);\n dst[15] = decodeFloat16(src[42]);\n dst[16] = decodeFloat16(src[3]);\n dst[17] = decodeFloat16(src[8]);\n dst[18] = decodeFloat16(src[12]);\n dst[19] = decodeFloat16(src[17]);\n dst[20] = decodeFloat16(src[25]);\n dst[21] = decodeFloat16(src[30]);\n dst[22] = decodeFloat16(src[41]);\n dst[23] = decodeFloat16(src[43]);\n dst[24] = decodeFloat16(src[9]);\n dst[25] = decodeFloat16(src[11]);\n dst[26] = decodeFloat16(src[18]);\n dst[27] = decodeFloat16(src[24]);\n dst[28] = decodeFloat16(src[31]);\n dst[29] = decodeFloat16(src[40]);\n dst[30] = decodeFloat16(src[44]);\n dst[31] = decodeFloat16(src[53]);\n dst[32] = decodeFloat16(src[10]);\n dst[33] = decodeFloat16(src[19]);\n dst[34] = decodeFloat16(src[23]);\n dst[35] = decodeFloat16(src[32]);\n dst[36] = decodeFloat16(src[39]);\n dst[37] = decodeFloat16(src[45]);\n dst[38] = decodeFloat16(src[52]);\n dst[39] = decodeFloat16(src[54]);\n dst[40] = decodeFloat16(src[20]);\n dst[41] = decodeFloat16(src[22]);\n dst[42] = decodeFloat16(src[33]);\n dst[43] = decodeFloat16(src[38]);\n dst[44] = decodeFloat16(src[46]);\n dst[45] = decodeFloat16(src[51]);\n dst[46] = decodeFloat16(src[55]);\n dst[47] = decodeFloat16(src[60]);\n dst[48] = decodeFloat16(src[21]);\n dst[49] = decodeFloat16(src[34]);\n dst[50] = decodeFloat16(src[37]);\n dst[51] = decodeFloat16(src[47]);\n dst[52] = decodeFloat16(src[50]);\n dst[53] = decodeFloat16(src[56]);\n dst[54] = decodeFloat16(src[59]);\n dst[55] = decodeFloat16(src[61]);\n dst[56] = decodeFloat16(src[35]);\n dst[57] = decodeFloat16(src[36]);\n dst[58] = decodeFloat16(src[48]);\n dst[59] = decodeFloat16(src[49]);\n dst[60] = decodeFloat16(src[57]);\n dst[61] = decodeFloat16(src[58]);\n dst[62] = decodeFloat16(src[62]);\n dst[63] = decodeFloat16(src[63]);\n }\n function dctInverse(data) {\n const a = 0.5 * Math.cos(3.14159 / 4);\n const b = 0.5 * Math.cos(3.14159 / 16);\n const c = 0.5 * Math.cos(3.14159 / 8);\n const d = 0.5 * Math.cos(3 * 3.14159 / 16);\n const e = 0.5 * Math.cos(5 * 3.14159 / 16);\n const f = 0.5 * Math.cos(3 * 3.14159 / 8);\n const g = 0.5 * Math.cos(7 * 3.14159 / 16);\n var alpha = new Array(4);\n var beta = new Array(4);\n var theta = new Array(4);\n var gamma = new Array(4);\n for (var row = 0; row < 8; ++row) {\n var rowPtr = row * 8;\n alpha[0] = c * data[rowPtr + 2];\n alpha[1] = f * data[rowPtr + 2];\n alpha[2] = c * data[rowPtr + 6];\n alpha[3] = f * data[rowPtr + 6];\n beta[0] = b * data[rowPtr + 1] + d * data[rowPtr + 3] + e * data[rowPtr + 5] + g * data[rowPtr + 7];\n beta[1] = d * data[rowPtr + 1] - g * data[rowPtr + 3] - b * data[rowPtr + 5] - e * data[rowPtr + 7];\n beta[2] = e * data[rowPtr + 1] - b * data[rowPtr + 3] + g * data[rowPtr + 5] + d * data[rowPtr + 7];\n beta[3] = g * data[rowPtr + 1] - e * data[rowPtr + 3] + d * data[rowPtr + 5] - b * data[rowPtr + 7];\n theta[0] = a * (data[rowPtr + 0] + data[rowPtr + 4]);\n theta[3] = a * (data[rowPtr + 0] - data[rowPtr + 4]);\n theta[1] = alpha[0] + alpha[3];\n theta[2] = alpha[1] - alpha[2];\n gamma[0] = theta[0] + theta[1];\n gamma[1] = theta[3] + theta[2];\n gamma[2] = theta[3] - theta[2];\n gamma[3] = theta[0] - theta[1];\n data[rowPtr + 0] = gamma[0] + beta[0];\n data[rowPtr + 1] = gamma[1] + beta[1];\n data[rowPtr + 2] = gamma[2] + beta[2];\n data[rowPtr + 3] = gamma[3] + beta[3];\n data[rowPtr + 4] = gamma[3] - beta[3];\n data[rowPtr + 5] = gamma[2] - beta[2];\n data[rowPtr + 6] = gamma[1] - beta[1];\n data[rowPtr + 7] = gamma[0] - beta[0];\n }\n for (var column = 0; column < 8; ++column) {\n alpha[0] = c * data[16 + column];\n alpha[1] = f * data[16 + column];\n alpha[2] = c * data[48 + column];\n alpha[3] = f * data[48 + column];\n beta[0] = b * data[8 + column] + d * data[24 + column] + e * data[40 + column] + g * data[56 + column];\n beta[1] = d * data[8 + column] - g * data[24 + column] - b * data[40 + column] - e * data[56 + column];\n beta[2] = e * data[8 + column] - b * data[24 + column] + g * data[40 + column] + d * data[56 + column];\n beta[3] = g * data[8 + column] - e * data[24 + column] + d * data[40 + column] - b * data[56 + column];\n theta[0] = a * (data[column] + data[32 + column]);\n theta[3] = a * (data[column] - data[32 + column]);\n theta[1] = alpha[0] + alpha[3];\n theta[2] = alpha[1] - alpha[2];\n gamma[0] = theta[0] + theta[1];\n gamma[1] = theta[3] + theta[2];\n gamma[2] = theta[3] - theta[2];\n gamma[3] = theta[0] - theta[1];\n data[0 + column] = gamma[0] + beta[0];\n data[8 + column] = gamma[1] + beta[1];\n data[16 + column] = gamma[2] + beta[2];\n data[24 + column] = gamma[3] + beta[3];\n data[32 + column] = gamma[3] - beta[3];\n data[40 + column] = gamma[2] - beta[2];\n data[48 + column] = gamma[1] - beta[1];\n data[56 + column] = gamma[0] - beta[0];\n }\n }\n function csc709Inverse(data) {\n for (var i = 0; i < 64; ++i) {\n var y = data[0][i];\n var cb = data[1][i];\n var cr = data[2][i];\n data[0][i] = y + 1.5747 * cr;\n data[1][i] = y - 0.1873 * cb - 0.4682 * cr;\n data[2][i] = y + 1.8556 * cb;\n }\n }\n function convertToHalf(src, dst, idx) {\n for (var i = 0; i < 64; ++i) {\n dst[idx + i] = DataUtils.toHalfFloat(toLinear(src[i]));\n }\n }\n function toLinear(float) {\n if (float <= 1) {\n return Math.sign(float) * Math.pow(Math.abs(float), 2.2);\n } else {\n return Math.sign(float) * Math.pow(logBase, Math.abs(float) - 1);\n }\n }\n function uncompressRAW(info) {\n return new DataView(info.array.buffer, info.offset.value, info.size);\n }\n function uncompressRLE(info) {\n var compressed = info.viewer.buffer.slice(info.offset.value, info.offset.value + info.size);\n var rawBuffer = new Uint8Array(decodeRunLength(compressed));\n var tmpBuffer = new Uint8Array(rawBuffer.length);\n predictor(rawBuffer);\n interleaveScalar(rawBuffer, tmpBuffer);\n return new DataView(tmpBuffer.buffer);\n }\n function uncompressZIP(info) {\n var compressed = info.array.slice(info.offset.value, info.offset.value + info.size);\n var rawBuffer = unzlibSync(compressed);\n var tmpBuffer = new Uint8Array(rawBuffer.length);\n predictor(rawBuffer);\n interleaveScalar(rawBuffer, tmpBuffer);\n return new DataView(tmpBuffer.buffer);\n }\n function uncompressPIZ(info) {\n var inDataView = info.viewer;\n var inOffset = { value: info.offset.value };\n var outBuffer = new Uint16Array(info.width * info.scanlineBlockSize * (info.channels * info.type));\n var bitmap = new Uint8Array(BITMAP_SIZE);\n var outBufferEnd = 0;\n var pizChannelData = new Array(info.channels);\n for (var i = 0; i < info.channels; i++) {\n pizChannelData[i] = {};\n pizChannelData[i][\"start\"] = outBufferEnd;\n pizChannelData[i][\"end\"] = pizChannelData[i][\"start\"];\n pizChannelData[i][\"nx\"] = info.width;\n pizChannelData[i][\"ny\"] = info.lines;\n pizChannelData[i][\"size\"] = info.type;\n outBufferEnd += pizChannelData[i].nx * pizChannelData[i].ny * pizChannelData[i].size;\n }\n var minNonZero = parseUint16(inDataView, inOffset);\n var maxNonZero = parseUint16(inDataView, inOffset);\n if (maxNonZero >= BITMAP_SIZE) {\n throw \"Something is wrong with PIZ_COMPRESSION BITMAP_SIZE\";\n }\n if (minNonZero <= maxNonZero) {\n for (var i = 0; i < maxNonZero - minNonZero + 1; i++) {\n bitmap[i + minNonZero] = parseUint8(inDataView, inOffset);\n }\n }\n var lut = new Uint16Array(USHORT_RANGE);\n var maxValue = reverseLutFromBitmap(bitmap, lut);\n var length = parseUint32(inDataView, inOffset);\n hufUncompress(info.array, inDataView, inOffset, length, outBuffer, outBufferEnd);\n for (var i = 0; i < info.channels; ++i) {\n var cd = pizChannelData[i];\n for (var j = 0; j < pizChannelData[i].size; ++j) {\n wav2Decode(outBuffer, cd.start + j, cd.nx, cd.size, cd.ny, cd.nx * cd.size, maxValue);\n }\n }\n applyLut(lut, outBuffer, outBufferEnd);\n var tmpOffset2 = 0;\n var tmpBuffer = new Uint8Array(outBuffer.buffer.byteLength);\n for (var y = 0; y < info.lines; y++) {\n for (var c = 0; c < info.channels; c++) {\n var cd = pizChannelData[c];\n var n = cd.nx * cd.size;\n var cp = new Uint8Array(outBuffer.buffer, cd.end * INT16_SIZE, n * INT16_SIZE);\n tmpBuffer.set(cp, tmpOffset2);\n tmpOffset2 += n * INT16_SIZE;\n cd.end += n;\n }\n }\n return new DataView(tmpBuffer.buffer);\n }\n function uncompressPXR(info) {\n var compressed = info.array.slice(info.offset.value, info.offset.value + info.size);\n var rawBuffer = unzlibSync(compressed);\n const sz = info.lines * info.channels * info.width;\n const tmpBuffer = info.type == 1 ? new Uint16Array(sz) : new Uint32Array(sz);\n let tmpBufferEnd = 0;\n let writePtr = 0;\n const ptr = new Array(4);\n for (let y = 0; y < info.lines; y++) {\n for (let c = 0; c < info.channels; c++) {\n let pixel = 0;\n switch (info.type) {\n case 1:\n ptr[0] = tmpBufferEnd;\n ptr[1] = ptr[0] + info.width;\n tmpBufferEnd = ptr[1] + info.width;\n for (let j = 0; j < info.width; ++j) {\n const diff = rawBuffer[ptr[0]++] << 8 | rawBuffer[ptr[1]++];\n pixel += diff;\n tmpBuffer[writePtr] = pixel;\n writePtr++;\n }\n break;\n case 2:\n ptr[0] = tmpBufferEnd;\n ptr[1] = ptr[0] + info.width;\n ptr[2] = ptr[1] + info.width;\n tmpBufferEnd = ptr[2] + info.width;\n for (let j = 0; j < info.width; ++j) {\n const diff = rawBuffer[ptr[0]++] << 24 | rawBuffer[ptr[1]++] << 16 | rawBuffer[ptr[2]++] << 8;\n pixel += diff;\n tmpBuffer[writePtr] = pixel;\n writePtr++;\n }\n break;\n }\n }\n }\n return new DataView(tmpBuffer.buffer);\n }\n function uncompressDWA(info) {\n var inDataView = info.viewer;\n var inOffset = { value: info.offset.value };\n var outBuffer = new Uint8Array(info.width * info.lines * (info.channels * info.type * INT16_SIZE));\n var dwaHeader = {\n version: parseInt64(inDataView, inOffset),\n unknownUncompressedSize: parseInt64(inDataView, inOffset),\n unknownCompressedSize: parseInt64(inDataView, inOffset),\n acCompressedSize: parseInt64(inDataView, inOffset),\n dcCompressedSize: parseInt64(inDataView, inOffset),\n rleCompressedSize: parseInt64(inDataView, inOffset),\n rleUncompressedSize: parseInt64(inDataView, inOffset),\n rleRawSize: parseInt64(inDataView, inOffset),\n totalAcUncompressedCount: parseInt64(inDataView, inOffset),\n totalDcUncompressedCount: parseInt64(inDataView, inOffset),\n acCompression: parseInt64(inDataView, inOffset)\n };\n if (dwaHeader.version < 2) {\n throw \"EXRLoader.parse: \" + EXRHeader.compression + \" version \" + dwaHeader.version + \" is unsupported\";\n }\n var channelRules = new Array();\n var ruleSize = parseUint16(inDataView, inOffset) - INT16_SIZE;\n while (ruleSize > 0) {\n var name = parseNullTerminatedString(inDataView.buffer, inOffset);\n var value = parseUint8(inDataView, inOffset);\n var compression = value >> 2 & 3;\n var csc = (value >> 4) - 1;\n var index = new Int8Array([csc])[0];\n var type = parseUint8(inDataView, inOffset);\n channelRules.push({\n name,\n index,\n type,\n compression\n });\n ruleSize -= name.length + 3;\n }\n var channels = EXRHeader.channels;\n var channelData = new Array(info.channels);\n for (var i = 0; i < info.channels; ++i) {\n var cd = channelData[i] = {};\n var channel = channels[i];\n cd.name = channel.name;\n cd.compression = UNKNOWN;\n cd.decoded = false;\n cd.type = channel.pixelType;\n cd.pLinear = channel.pLinear;\n cd.width = info.width;\n cd.height = info.lines;\n }\n var cscSet = {\n idx: new Array(3)\n };\n for (var offset2 = 0; offset2 < info.channels; ++offset2) {\n var cd = channelData[offset2];\n for (var i = 0; i < channelRules.length; ++i) {\n var rule = channelRules[i];\n if (cd.name == rule.name) {\n cd.compression = rule.compression;\n if (rule.index >= 0) {\n cscSet.idx[rule.index] = offset2;\n }\n cd.offset = offset2;\n }\n }\n }\n if (dwaHeader.acCompressedSize > 0) {\n switch (dwaHeader.acCompression) {\n case STATIC_HUFFMAN:\n var acBuffer = new Uint16Array(dwaHeader.totalAcUncompressedCount);\n hufUncompress(\n info.array,\n inDataView,\n inOffset,\n dwaHeader.acCompressedSize,\n acBuffer,\n dwaHeader.totalAcUncompressedCount\n );\n break;\n case DEFLATE:\n var compressed = info.array.slice(inOffset.value, inOffset.value + dwaHeader.totalAcUncompressedCount);\n var data = unzlibSync(compressed);\n var acBuffer = new Uint16Array(data.buffer);\n inOffset.value += dwaHeader.totalAcUncompressedCount;\n break;\n }\n }\n if (dwaHeader.dcCompressedSize > 0) {\n var zlibInfo = {\n array: info.array,\n offset: inOffset,\n size: dwaHeader.dcCompressedSize\n };\n var dcBuffer = new Uint16Array(uncompressZIP(zlibInfo).buffer);\n inOffset.value += dwaHeader.dcCompressedSize;\n }\n if (dwaHeader.rleRawSize > 0) {\n var compressed = info.array.slice(inOffset.value, inOffset.value + dwaHeader.rleCompressedSize);\n var data = unzlibSync(compressed);\n var rleBuffer = decodeRunLength(data.buffer);\n inOffset.value += dwaHeader.rleCompressedSize;\n }\n var outBufferEnd = 0;\n var rowOffsets = new Array(channelData.length);\n for (var i = 0; i < rowOffsets.length; ++i) {\n rowOffsets[i] = new Array();\n }\n for (var y = 0; y < info.lines; ++y) {\n for (var chan = 0; chan < channelData.length; ++chan) {\n rowOffsets[chan].push(outBufferEnd);\n outBufferEnd += channelData[chan].width * info.type * INT16_SIZE;\n }\n }\n lossyDctDecode(cscSet, rowOffsets, channelData, acBuffer, dcBuffer, outBuffer);\n for (var i = 0; i < channelData.length; ++i) {\n var cd = channelData[i];\n if (cd.decoded)\n continue;\n switch (cd.compression) {\n case RLE:\n var row = 0;\n var rleOffset = 0;\n for (var y = 0; y < info.lines; ++y) {\n var rowOffsetBytes = rowOffsets[i][row];\n for (var x = 0; x < cd.width; ++x) {\n for (var byte = 0; byte < INT16_SIZE * cd.type; ++byte) {\n outBuffer[rowOffsetBytes++] = rleBuffer[rleOffset + byte * cd.width * cd.height];\n }\n rleOffset++;\n }\n row++;\n }\n break;\n case LOSSY_DCT:\n default:\n throw \"EXRLoader.parse: unsupported channel compression\";\n }\n }\n return new DataView(outBuffer.buffer);\n }\n function parseNullTerminatedString(buffer2, offset2) {\n var uintBuffer = new Uint8Array(buffer2);\n var endOffset = 0;\n while (uintBuffer[offset2.value + endOffset] != 0) {\n endOffset += 1;\n }\n var stringValue = new TextDecoder().decode(uintBuffer.slice(offset2.value, offset2.value + endOffset));\n offset2.value = offset2.value + endOffset + 1;\n return stringValue;\n }\n function parseFixedLengthString(buffer2, offset2, size) {\n var stringValue = new TextDecoder().decode(new Uint8Array(buffer2).slice(offset2.value, offset2.value + size));\n offset2.value = offset2.value + size;\n return stringValue;\n }\n function parseRational(dataView, offset2) {\n var x = parseInt32(dataView, offset2);\n var y = parseUint32(dataView, offset2);\n return [x, y];\n }\n function parseTimecode(dataView, offset2) {\n var x = parseUint32(dataView, offset2);\n var y = parseUint32(dataView, offset2);\n return [x, y];\n }\n function parseInt32(dataView, offset2) {\n var Int32 = dataView.getInt32(offset2.value, true);\n offset2.value = offset2.value + INT32_SIZE;\n return Int32;\n }\n function parseUint32(dataView, offset2) {\n var Uint32 = dataView.getUint32(offset2.value, true);\n offset2.value = offset2.value + INT32_SIZE;\n return Uint32;\n }\n function parseUint8Array(uInt8Array2, offset2) {\n var Uint8 = uInt8Array2[offset2.value];\n offset2.value = offset2.value + INT8_SIZE;\n return Uint8;\n }\n function parseUint8(dataView, offset2) {\n var Uint8 = dataView.getUint8(offset2.value);\n offset2.value = offset2.value + INT8_SIZE;\n return Uint8;\n }\n const parseInt64 = function(dataView, offset2) {\n let int;\n if (\"getBigInt64\" in DataView.prototype) {\n int = Number(dataView.getBigInt64(offset2.value, true));\n } else {\n int = dataView.getUint32(offset2.value + 4, true) + Number(dataView.getUint32(offset2.value, true) << 32);\n }\n offset2.value += ULONG_SIZE;\n return int;\n };\n function parseFloat32(dataView, offset2) {\n var float = dataView.getFloat32(offset2.value, true);\n offset2.value += FLOAT32_SIZE;\n return float;\n }\n function decodeFloat32(dataView, offset2) {\n return DataUtils.toHalfFloat(parseFloat32(dataView, offset2));\n }\n function decodeFloat16(binary) {\n var exponent = (binary & 31744) >> 10, fraction = binary & 1023;\n return (binary >> 15 ? -1 : 1) * (exponent ? exponent === 31 ? fraction ? NaN : Infinity : Math.pow(2, exponent - 15) * (1 + fraction / 1024) : 6103515625e-14 * (fraction / 1024));\n }\n function parseUint16(dataView, offset2) {\n var Uint16 = dataView.getUint16(offset2.value, true);\n offset2.value += INT16_SIZE;\n return Uint16;\n }\n function parseFloat16(buffer2, offset2) {\n return decodeFloat16(parseUint16(buffer2, offset2));\n }\n function parseChlist(dataView, buffer2, offset2, size) {\n var startOffset = offset2.value;\n var channels = [];\n while (offset2.value < startOffset + size - 1) {\n var name = parseNullTerminatedString(buffer2, offset2);\n var pixelType = parseInt32(dataView, offset2);\n var pLinear = parseUint8(dataView, offset2);\n offset2.value += 3;\n var xSampling = parseInt32(dataView, offset2);\n var ySampling = parseInt32(dataView, offset2);\n channels.push({\n name,\n pixelType,\n pLinear,\n xSampling,\n ySampling\n });\n }\n offset2.value += 1;\n return channels;\n }\n function parseChromaticities(dataView, offset2) {\n var redX = parseFloat32(dataView, offset2);\n var redY = parseFloat32(dataView, offset2);\n var greenX = parseFloat32(dataView, offset2);\n var greenY = parseFloat32(dataView, offset2);\n var blueX = parseFloat32(dataView, offset2);\n var blueY = parseFloat32(dataView, offset2);\n var whiteX = parseFloat32(dataView, offset2);\n var whiteY = parseFloat32(dataView, offset2);\n return {\n redX,\n redY,\n greenX,\n greenY,\n blueX,\n blueY,\n whiteX,\n whiteY\n };\n }\n function parseCompression(dataView, offset2) {\n var compressionCodes = [\n \"NO_COMPRESSION\",\n \"RLE_COMPRESSION\",\n \"ZIPS_COMPRESSION\",\n \"ZIP_COMPRESSION\",\n \"PIZ_COMPRESSION\",\n \"PXR24_COMPRESSION\",\n \"B44_COMPRESSION\",\n \"B44A_COMPRESSION\",\n \"DWAA_COMPRESSION\",\n \"DWAB_COMPRESSION\"\n ];\n var compression = parseUint8(dataView, offset2);\n return compressionCodes[compression];\n }\n function parseBox2i(dataView, offset2) {\n var xMin = parseUint32(dataView, offset2);\n var yMin = parseUint32(dataView, offset2);\n var xMax = parseUint32(dataView, offset2);\n var yMax = parseUint32(dataView, offset2);\n return { xMin, yMin, xMax, yMax };\n }\n function parseLineOrder(dataView, offset2) {\n var lineOrders = [\"INCREASING_Y\"];\n var lineOrder = parseUint8(dataView, offset2);\n return lineOrders[lineOrder];\n }\n function parseV2f(dataView, offset2) {\n var x = parseFloat32(dataView, offset2);\n var y = parseFloat32(dataView, offset2);\n return [x, y];\n }\n function parseV3f(dataView, offset2) {\n var x = parseFloat32(dataView, offset2);\n var y = parseFloat32(dataView, offset2);\n var z = parseFloat32(dataView, offset2);\n return [x, y, z];\n }\n function parseValue(dataView, buffer2, offset2, type, size) {\n if (type === \"string\" || type === \"stringvector\" || type === \"iccProfile\") {\n return parseFixedLengthString(buffer2, offset2, size);\n } else if (type === \"chlist\") {\n return parseChlist(dataView, buffer2, offset2, size);\n } else if (type === \"chromaticities\") {\n return parseChromaticities(dataView, offset2);\n } else if (type === \"compression\") {\n return parseCompression(dataView, offset2);\n } else if (type === \"box2i\") {\n return parseBox2i(dataView, offset2);\n } else if (type === \"lineOrder\") {\n return parseLineOrder(dataView, offset2);\n } else if (type === \"float\") {\n return parseFloat32(dataView, offset2);\n } else if (type === \"v2f\") {\n return parseV2f(dataView, offset2);\n } else if (type === \"v3f\") {\n return parseV3f(dataView, offset2);\n } else if (type === \"int\") {\n return parseInt32(dataView, offset2);\n } else if (type === \"rational\") {\n return parseRational(dataView, offset2);\n } else if (type === \"timecode\") {\n return parseTimecode(dataView, offset2);\n } else if (type === \"preview\") {\n offset2.value += size;\n return \"skipped\";\n } else {\n offset2.value += size;\n return void 0;\n }\n }\n function parseHeader(dataView, buffer2, offset2) {\n const EXRHeader2 = {};\n if (dataView.getUint32(0, true) != 20000630) {\n throw \"THREE.EXRLoader: provided file doesn't appear to be in OpenEXR format.\";\n }\n EXRHeader2.version = dataView.getUint8(4);\n const spec = dataView.getUint8(5);\n EXRHeader2.spec = {\n singleTile: !!(spec & 2),\n longName: !!(spec & 4),\n deepFormat: !!(spec & 8),\n multiPart: !!(spec & 16)\n };\n offset2.value = 8;\n var keepReading = true;\n while (keepReading) {\n var attributeName = parseNullTerminatedString(buffer2, offset2);\n if (attributeName == 0) {\n keepReading = false;\n } else {\n var attributeType = parseNullTerminatedString(buffer2, offset2);\n var attributeSize = parseUint32(dataView, offset2);\n var attributeValue = parseValue(dataView, buffer2, offset2, attributeType, attributeSize);\n if (attributeValue === void 0) {\n console.warn(`EXRLoader.parse: skipped unknown header attribute type '${attributeType}'.`);\n } else {\n EXRHeader2[attributeName] = attributeValue;\n }\n }\n }\n if ((spec & ~4) != 0) {\n console.error(\"EXRHeader:\", EXRHeader2);\n throw \"THREE.EXRLoader: provided file is currently unsupported.\";\n }\n return EXRHeader2;\n }\n function setupDecoder(EXRHeader2, dataView, uInt8Array2, offset2, outputType) {\n const EXRDecoder2 = {\n size: 0,\n viewer: dataView,\n array: uInt8Array2,\n offset: offset2,\n width: EXRHeader2.dataWindow.xMax - EXRHeader2.dataWindow.xMin + 1,\n height: EXRHeader2.dataWindow.yMax - EXRHeader2.dataWindow.yMin + 1,\n channels: EXRHeader2.channels.length,\n bytesPerLine: null,\n lines: null,\n inputSize: null,\n type: EXRHeader2.channels[0].pixelType,\n uncompress: null,\n getter: null,\n format: null,\n [hasColorSpace ? \"colorSpace\" : \"encoding\"]: null\n };\n switch (EXRHeader2.compression) {\n case \"NO_COMPRESSION\":\n EXRDecoder2.lines = 1;\n EXRDecoder2.uncompress = uncompressRAW;\n break;\n case \"RLE_COMPRESSION\":\n EXRDecoder2.lines = 1;\n EXRDecoder2.uncompress = uncompressRLE;\n break;\n case \"ZIPS_COMPRESSION\":\n EXRDecoder2.lines = 1;\n EXRDecoder2.uncompress = uncompressZIP;\n break;\n case \"ZIP_COMPRESSION\":\n EXRDecoder2.lines = 16;\n EXRDecoder2.uncompress = uncompressZIP;\n break;\n case \"PIZ_COMPRESSION\":\n EXRDecoder2.lines = 32;\n EXRDecoder2.uncompress = uncompressPIZ;\n break;\n case \"PXR24_COMPRESSION\":\n EXRDecoder2.lines = 16;\n EXRDecoder2.uncompress = uncompressPXR;\n break;\n case \"DWAA_COMPRESSION\":\n EXRDecoder2.lines = 32;\n EXRDecoder2.uncompress = uncompressDWA;\n break;\n case \"DWAB_COMPRESSION\":\n EXRDecoder2.lines = 256;\n EXRDecoder2.uncompress = uncompressDWA;\n break;\n default:\n throw \"EXRLoader.parse: \" + EXRHeader2.compression + \" is unsupported\";\n }\n EXRDecoder2.scanlineBlockSize = EXRDecoder2.lines;\n if (EXRDecoder2.type == 1) {\n switch (outputType) {\n case FloatType:\n EXRDecoder2.getter = parseFloat16;\n EXRDecoder2.inputSize = INT16_SIZE;\n break;\n case HalfFloatType:\n EXRDecoder2.getter = parseUint16;\n EXRDecoder2.inputSize = INT16_SIZE;\n break;\n }\n } else if (EXRDecoder2.type == 2) {\n switch (outputType) {\n case FloatType:\n EXRDecoder2.getter = parseFloat32;\n EXRDecoder2.inputSize = FLOAT32_SIZE;\n break;\n case HalfFloatType:\n EXRDecoder2.getter = decodeFloat32;\n EXRDecoder2.inputSize = FLOAT32_SIZE;\n }\n } else {\n throw \"EXRLoader.parse: unsupported pixelType \" + EXRDecoder2.type + \" for \" + EXRHeader2.compression + \".\";\n }\n EXRDecoder2.blockCount = (EXRHeader2.dataWindow.yMax + 1) / EXRDecoder2.scanlineBlockSize;\n for (var i = 0; i < EXRDecoder2.blockCount; i++)\n parseInt64(dataView, offset2);\n EXRDecoder2.outputChannels = EXRDecoder2.channels == 3 ? 4 : EXRDecoder2.channels;\n const size = EXRDecoder2.width * EXRDecoder2.height * EXRDecoder2.outputChannels;\n switch (outputType) {\n case FloatType:\n EXRDecoder2.byteArray = new Float32Array(size);\n if (EXRDecoder2.channels < EXRDecoder2.outputChannels)\n EXRDecoder2.byteArray.fill(1, 0, size);\n break;\n case HalfFloatType:\n EXRDecoder2.byteArray = new Uint16Array(size);\n if (EXRDecoder2.channels < EXRDecoder2.outputChannels)\n EXRDecoder2.byteArray.fill(15360, 0, size);\n break;\n default:\n console.error(\"THREE.EXRLoader: unsupported type: \", outputType);\n break;\n }\n EXRDecoder2.bytesPerLine = EXRDecoder2.width * EXRDecoder2.inputSize * EXRDecoder2.channels;\n if (EXRDecoder2.outputChannels == 4)\n EXRDecoder2.format = RGBAFormat;\n else\n EXRDecoder2.format = RedFormat;\n if (hasColorSpace)\n EXRDecoder2.colorSpace = \"srgb-linear\";\n else\n EXRDecoder2.encoding = 3e3;\n return EXRDecoder2;\n }\n const bufferDataView = new DataView(buffer);\n const uInt8Array = new Uint8Array(buffer);\n const offset = { value: 0 };\n const EXRHeader = parseHeader(bufferDataView, buffer, offset);\n const EXRDecoder = setupDecoder(EXRHeader, bufferDataView, uInt8Array, offset, this.type);\n const tmpOffset = { value: 0 };\n const channelOffsets = { R: 0, G: 1, B: 2, A: 3, Y: 0 };\n for (let scanlineBlockIdx = 0; scanlineBlockIdx < EXRDecoder.height / EXRDecoder.scanlineBlockSize; scanlineBlockIdx++) {\n const line = parseUint32(bufferDataView, offset);\n EXRDecoder.size = parseUint32(bufferDataView, offset);\n EXRDecoder.lines = line + EXRDecoder.scanlineBlockSize > EXRDecoder.height ? EXRDecoder.height - line : EXRDecoder.scanlineBlockSize;\n const isCompressed = EXRDecoder.size < EXRDecoder.lines * EXRDecoder.bytesPerLine;\n const viewer = isCompressed ? EXRDecoder.uncompress(EXRDecoder) : uncompressRAW(EXRDecoder);\n offset.value += EXRDecoder.size;\n for (let line_y = 0; line_y < EXRDecoder.scanlineBlockSize; line_y++) {\n const true_y = line_y + scanlineBlockIdx * EXRDecoder.scanlineBlockSize;\n if (true_y >= EXRDecoder.height)\n break;\n for (let channelID = 0; channelID < EXRDecoder.channels; channelID++) {\n const cOff = channelOffsets[EXRHeader.channels[channelID].name];\n for (let x = 0; x < EXRDecoder.width; x++) {\n tmpOffset.value = (line_y * (EXRDecoder.channels * EXRDecoder.width) + channelID * EXRDecoder.width + x) * EXRDecoder.inputSize;\n const outIndex = (EXRDecoder.height - 1 - true_y) * (EXRDecoder.width * EXRDecoder.outputChannels) + x * EXRDecoder.outputChannels + cOff;\n EXRDecoder.byteArray[outIndex] = EXRDecoder.getter(viewer, tmpOffset);\n }\n }\n }\n }\n return {\n header: EXRHeader,\n width: EXRDecoder.width,\n height: EXRDecoder.height,\n data: EXRDecoder.byteArray,\n format: EXRDecoder.format,\n [hasColorSpace ? \"colorSpace\" : \"encoding\"]: EXRDecoder[hasColorSpace ? \"colorSpace\" : \"encoding\"],\n type: this.type\n };\n }\n setDataType(value) {\n this.type = value;\n return this;\n }\n load(url, onLoad, onProgress, onError) {\n function onLoadCallback(texture, texData) {\n if (hasColorSpace)\n texture.colorSpace = texData.colorSpace;\n else\n texture.encoding = texData.encoding;\n texture.minFilter = LinearFilter;\n texture.magFilter = LinearFilter;\n texture.generateMipmaps = false;\n texture.flipY = false;\n if (onLoad)\n onLoad(texture, texData);\n }\n return super.load(url, onLoadCallback, onProgress, onError);\n }\n}\nexport {\n EXRLoader\n};\n//# sourceMappingURL=EXRLoader.js.map\n","import { Loader, FileLoader, Matrix3, Vector2, Vector3, ShapeUtils, Box2, Shape, Path, BufferGeometry, Float32BufferAttribute, ShapePath } from \"three\";\nconst COLOR_SPACE_SVG = \"srgb\";\nconst SVGLoader = /* @__PURE__ */ (() => {\n class SVGLoader2 extends Loader {\n constructor(manager) {\n super(manager);\n this.defaultDPI = 90;\n this.defaultUnit = \"px\";\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const loader = new FileLoader(scope.manager);\n loader.setPath(scope.path);\n loader.setRequestHeader(scope.requestHeader);\n loader.setWithCredentials(scope.withCredentials);\n loader.load(\n url,\n function(text) {\n try {\n onLoad(scope.parse(text));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(text) {\n const scope = this;\n function parseNode(node, style) {\n if (node.nodeType !== 1)\n return;\n const transform = getNodeTransform(node);\n let isDefsNode = false;\n let path = null;\n switch (node.nodeName) {\n case \"svg\":\n style = parseStyle(node, style);\n break;\n case \"style\":\n parseCSSStylesheet(node);\n break;\n case \"g\":\n style = parseStyle(node, style);\n break;\n case \"path\":\n style = parseStyle(node, style);\n if (node.hasAttribute(\"d\"))\n path = parsePathNode(node);\n break;\n case \"rect\":\n style = parseStyle(node, style);\n path = parseRectNode(node);\n break;\n case \"polygon\":\n style = parseStyle(node, style);\n path = parsePolygonNode(node);\n break;\n case \"polyline\":\n style = parseStyle(node, style);\n path = parsePolylineNode(node);\n break;\n case \"circle\":\n style = parseStyle(node, style);\n path = parseCircleNode(node);\n break;\n case \"ellipse\":\n style = parseStyle(node, style);\n path = parseEllipseNode(node);\n break;\n case \"line\":\n style = parseStyle(node, style);\n path = parseLineNode(node);\n break;\n case \"defs\":\n isDefsNode = true;\n break;\n case \"use\":\n style = parseStyle(node, style);\n const href = node.getAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\") || \"\";\n const usedNodeId = href.substring(1);\n const usedNode = node.viewportElement.getElementById(usedNodeId);\n if (usedNode) {\n parseNode(usedNode, style);\n } else {\n console.warn(\"SVGLoader: 'use node' references non-existent node id: \" + usedNodeId);\n }\n break;\n }\n if (path) {\n if (style.fill !== void 0 && style.fill !== \"none\") {\n path.color.setStyle(style.fill, COLOR_SPACE_SVG);\n }\n transformPath(path, currentTransform);\n paths.push(path);\n path.userData = { node, style };\n }\n const childNodes = node.childNodes;\n for (let i = 0; i < childNodes.length; i++) {\n const node2 = childNodes[i];\n if (isDefsNode && node2.nodeName !== \"style\" && node2.nodeName !== \"defs\") {\n continue;\n }\n parseNode(node2, style);\n }\n if (transform) {\n transformStack.pop();\n if (transformStack.length > 0) {\n currentTransform.copy(transformStack[transformStack.length - 1]);\n } else {\n currentTransform.identity();\n }\n }\n }\n function parsePathNode(node) {\n const path = new ShapePath();\n const point = new Vector2();\n const control = new Vector2();\n const firstPoint = new Vector2();\n let isFirstPoint = true;\n let doSetFirstPoint = false;\n const d = node.getAttribute(\"d\");\n if (d === \"\" || d === \"none\")\n return null;\n const commands = d.match(/[a-df-z][^a-df-z]*/gi);\n for (let i = 0, l = commands.length; i < l; i++) {\n const command = commands[i];\n const type = command.charAt(0);\n const data2 = command.slice(1).trim();\n if (isFirstPoint === true) {\n doSetFirstPoint = true;\n isFirstPoint = false;\n }\n let numbers;\n switch (type) {\n case \"M\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 2) {\n point.x = numbers[j + 0];\n point.y = numbers[j + 1];\n control.x = point.x;\n control.y = point.y;\n if (j === 0) {\n path.moveTo(point.x, point.y);\n } else {\n path.lineTo(point.x, point.y);\n }\n if (j === 0)\n firstPoint.copy(point);\n }\n break;\n case \"H\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j++) {\n point.x = numbers[j];\n control.x = point.x;\n control.y = point.y;\n path.lineTo(point.x, point.y);\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"V\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j++) {\n point.y = numbers[j];\n control.x = point.x;\n control.y = point.y;\n path.lineTo(point.x, point.y);\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"L\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 2) {\n point.x = numbers[j + 0];\n point.y = numbers[j + 1];\n control.x = point.x;\n control.y = point.y;\n path.lineTo(point.x, point.y);\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"C\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 6) {\n path.bezierCurveTo(\n numbers[j + 0],\n numbers[j + 1],\n numbers[j + 2],\n numbers[j + 3],\n numbers[j + 4],\n numbers[j + 5]\n );\n control.x = numbers[j + 2];\n control.y = numbers[j + 3];\n point.x = numbers[j + 4];\n point.y = numbers[j + 5];\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"S\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 4) {\n path.bezierCurveTo(\n getReflection(point.x, control.x),\n getReflection(point.y, control.y),\n numbers[j + 0],\n numbers[j + 1],\n numbers[j + 2],\n numbers[j + 3]\n );\n control.x = numbers[j + 0];\n control.y = numbers[j + 1];\n point.x = numbers[j + 2];\n point.y = numbers[j + 3];\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"Q\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 4) {\n path.quadraticCurveTo(numbers[j + 0], numbers[j + 1], numbers[j + 2], numbers[j + 3]);\n control.x = numbers[j + 0];\n control.y = numbers[j + 1];\n point.x = numbers[j + 2];\n point.y = numbers[j + 3];\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"T\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 2) {\n const rx = getReflection(point.x, control.x);\n const ry = getReflection(point.y, control.y);\n path.quadraticCurveTo(rx, ry, numbers[j + 0], numbers[j + 1]);\n control.x = rx;\n control.y = ry;\n point.x = numbers[j + 0];\n point.y = numbers[j + 1];\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"A\":\n numbers = parseFloats(data2, [3, 4], 7);\n for (let j = 0, jl = numbers.length; j < jl; j += 7) {\n if (numbers[j + 5] == point.x && numbers[j + 6] == point.y)\n continue;\n const start = point.clone();\n point.x = numbers[j + 5];\n point.y = numbers[j + 6];\n control.x = point.x;\n control.y = point.y;\n parseArcCommand(\n path,\n numbers[j],\n numbers[j + 1],\n numbers[j + 2],\n numbers[j + 3],\n numbers[j + 4],\n start,\n point\n );\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"m\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 2) {\n point.x += numbers[j + 0];\n point.y += numbers[j + 1];\n control.x = point.x;\n control.y = point.y;\n if (j === 0) {\n path.moveTo(point.x, point.y);\n } else {\n path.lineTo(point.x, point.y);\n }\n if (j === 0)\n firstPoint.copy(point);\n }\n break;\n case \"h\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j++) {\n point.x += numbers[j];\n control.x = point.x;\n control.y = point.y;\n path.lineTo(point.x, point.y);\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"v\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j++) {\n point.y += numbers[j];\n control.x = point.x;\n control.y = point.y;\n path.lineTo(point.x, point.y);\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"l\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 2) {\n point.x += numbers[j + 0];\n point.y += numbers[j + 1];\n control.x = point.x;\n control.y = point.y;\n path.lineTo(point.x, point.y);\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"c\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 6) {\n path.bezierCurveTo(\n point.x + numbers[j + 0],\n point.y + numbers[j + 1],\n point.x + numbers[j + 2],\n point.y + numbers[j + 3],\n point.x + numbers[j + 4],\n point.y + numbers[j + 5]\n );\n control.x = point.x + numbers[j + 2];\n control.y = point.y + numbers[j + 3];\n point.x += numbers[j + 4];\n point.y += numbers[j + 5];\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"s\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 4) {\n path.bezierCurveTo(\n getReflection(point.x, control.x),\n getReflection(point.y, control.y),\n point.x + numbers[j + 0],\n point.y + numbers[j + 1],\n point.x + numbers[j + 2],\n point.y + numbers[j + 3]\n );\n control.x = point.x + numbers[j + 0];\n control.y = point.y + numbers[j + 1];\n point.x += numbers[j + 2];\n point.y += numbers[j + 3];\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"q\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 4) {\n path.quadraticCurveTo(\n point.x + numbers[j + 0],\n point.y + numbers[j + 1],\n point.x + numbers[j + 2],\n point.y + numbers[j + 3]\n );\n control.x = point.x + numbers[j + 0];\n control.y = point.y + numbers[j + 1];\n point.x += numbers[j + 2];\n point.y += numbers[j + 3];\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"t\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 2) {\n const rx = getReflection(point.x, control.x);\n const ry = getReflection(point.y, control.y);\n path.quadraticCurveTo(rx, ry, point.x + numbers[j + 0], point.y + numbers[j + 1]);\n control.x = rx;\n control.y = ry;\n point.x = point.x + numbers[j + 0];\n point.y = point.y + numbers[j + 1];\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"a\":\n numbers = parseFloats(data2, [3, 4], 7);\n for (let j = 0, jl = numbers.length; j < jl; j += 7) {\n if (numbers[j + 5] == 0 && numbers[j + 6] == 0)\n continue;\n const start = point.clone();\n point.x += numbers[j + 5];\n point.y += numbers[j + 6];\n control.x = point.x;\n control.y = point.y;\n parseArcCommand(\n path,\n numbers[j],\n numbers[j + 1],\n numbers[j + 2],\n numbers[j + 3],\n numbers[j + 4],\n start,\n point\n );\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"Z\":\n case \"z\":\n path.currentPath.autoClose = true;\n if (path.currentPath.curves.length > 0) {\n point.copy(firstPoint);\n path.currentPath.currentPoint.copy(point);\n isFirstPoint = true;\n }\n break;\n default:\n console.warn(command);\n }\n doSetFirstPoint = false;\n }\n return path;\n }\n function parseCSSStylesheet(node) {\n if (!node.sheet || !node.sheet.cssRules || !node.sheet.cssRules.length)\n return;\n for (let i = 0; i < node.sheet.cssRules.length; i++) {\n const stylesheet = node.sheet.cssRules[i];\n if (stylesheet.type !== 1)\n continue;\n const selectorList = stylesheet.selectorText.split(/,/gm).filter(Boolean).map((i2) => i2.trim());\n for (let j = 0; j < selectorList.length; j++) {\n const definitions = Object.fromEntries(Object.entries(stylesheet.style).filter(([, v]) => v !== \"\"));\n stylesheets[selectorList[j]] = Object.assign(stylesheets[selectorList[j]] || {}, definitions);\n }\n }\n }\n function parseArcCommand(path, rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, start, end) {\n if (rx == 0 || ry == 0) {\n path.lineTo(end.x, end.y);\n return;\n }\n x_axis_rotation = x_axis_rotation * Math.PI / 180;\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n const dx2 = (start.x - end.x) / 2;\n const dy2 = (start.y - end.y) / 2;\n const x1p = Math.cos(x_axis_rotation) * dx2 + Math.sin(x_axis_rotation) * dy2;\n const y1p = -Math.sin(x_axis_rotation) * dx2 + Math.cos(x_axis_rotation) * dy2;\n let rxs = rx * rx;\n let rys = ry * ry;\n const x1ps = x1p * x1p;\n const y1ps = y1p * y1p;\n const cr = x1ps / rxs + y1ps / rys;\n if (cr > 1) {\n const s = Math.sqrt(cr);\n rx = s * rx;\n ry = s * ry;\n rxs = rx * rx;\n rys = ry * ry;\n }\n const dq = rxs * y1ps + rys * x1ps;\n const pq = (rxs * rys - dq) / dq;\n let q = Math.sqrt(Math.max(0, pq));\n if (large_arc_flag === sweep_flag)\n q = -q;\n const cxp = q * rx * y1p / ry;\n const cyp = -q * ry * x1p / rx;\n const cx = Math.cos(x_axis_rotation) * cxp - Math.sin(x_axis_rotation) * cyp + (start.x + end.x) / 2;\n const cy = Math.sin(x_axis_rotation) * cxp + Math.cos(x_axis_rotation) * cyp + (start.y + end.y) / 2;\n const theta = svgAngle(1, 0, (x1p - cxp) / rx, (y1p - cyp) / ry);\n const delta = svgAngle((x1p - cxp) / rx, (y1p - cyp) / ry, (-x1p - cxp) / rx, (-y1p - cyp) / ry) % (Math.PI * 2);\n path.currentPath.absellipse(cx, cy, rx, ry, theta, theta + delta, sweep_flag === 0, x_axis_rotation);\n }\n function svgAngle(ux, uy, vx, vy) {\n const dot = ux * vx + uy * vy;\n const len = Math.sqrt(ux * ux + uy * uy) * Math.sqrt(vx * vx + vy * vy);\n let ang = Math.acos(Math.max(-1, Math.min(1, dot / len)));\n if (ux * vy - uy * vx < 0)\n ang = -ang;\n return ang;\n }\n function parseRectNode(node) {\n const x = parseFloatWithUnits(node.getAttribute(\"x\") || 0);\n const y = parseFloatWithUnits(node.getAttribute(\"y\") || 0);\n const rx = parseFloatWithUnits(node.getAttribute(\"rx\") || node.getAttribute(\"ry\") || 0);\n const ry = parseFloatWithUnits(node.getAttribute(\"ry\") || node.getAttribute(\"rx\") || 0);\n const w = parseFloatWithUnits(node.getAttribute(\"width\"));\n const h = parseFloatWithUnits(node.getAttribute(\"height\"));\n const bci = 1 - 0.551915024494;\n const path = new ShapePath();\n path.moveTo(x + rx, y);\n path.lineTo(x + w - rx, y);\n if (rx !== 0 || ry !== 0) {\n path.bezierCurveTo(x + w - rx * bci, y, x + w, y + ry * bci, x + w, y + ry);\n }\n path.lineTo(x + w, y + h - ry);\n if (rx !== 0 || ry !== 0) {\n path.bezierCurveTo(x + w, y + h - ry * bci, x + w - rx * bci, y + h, x + w - rx, y + h);\n }\n path.lineTo(x + rx, y + h);\n if (rx !== 0 || ry !== 0) {\n path.bezierCurveTo(x + rx * bci, y + h, x, y + h - ry * bci, x, y + h - ry);\n }\n path.lineTo(x, y + ry);\n if (rx !== 0 || ry !== 0) {\n path.bezierCurveTo(x, y + ry * bci, x + rx * bci, y, x + rx, y);\n }\n return path;\n }\n function parsePolygonNode(node) {\n function iterator(match, a, b) {\n const x = parseFloatWithUnits(a);\n const y = parseFloatWithUnits(b);\n if (index === 0) {\n path.moveTo(x, y);\n } else {\n path.lineTo(x, y);\n }\n index++;\n }\n const regex = /([+-]?\\d*\\.?\\d+(?:e[+-]?\\d+)?)(?:,|\\s)([+-]?\\d*\\.?\\d+(?:e[+-]?\\d+)?)/g;\n const path = new ShapePath();\n let index = 0;\n node.getAttribute(\"points\").replace(regex, iterator);\n path.currentPath.autoClose = true;\n return path;\n }\n function parsePolylineNode(node) {\n function iterator(match, a, b) {\n const x = parseFloatWithUnits(a);\n const y = parseFloatWithUnits(b);\n if (index === 0) {\n path.moveTo(x, y);\n } else {\n path.lineTo(x, y);\n }\n index++;\n }\n const regex = /([+-]?\\d*\\.?\\d+(?:e[+-]?\\d+)?)(?:,|\\s)([+-]?\\d*\\.?\\d+(?:e[+-]?\\d+)?)/g;\n const path = new ShapePath();\n let index = 0;\n node.getAttribute(\"points\").replace(regex, iterator);\n path.currentPath.autoClose = false;\n return path;\n }\n function parseCircleNode(node) {\n const x = parseFloatWithUnits(node.getAttribute(\"cx\") || 0);\n const y = parseFloatWithUnits(node.getAttribute(\"cy\") || 0);\n const r = parseFloatWithUnits(node.getAttribute(\"r\") || 0);\n const subpath = new Path();\n subpath.absarc(x, y, r, 0, Math.PI * 2);\n const path = new ShapePath();\n path.subPaths.push(subpath);\n return path;\n }\n function parseEllipseNode(node) {\n const x = parseFloatWithUnits(node.getAttribute(\"cx\") || 0);\n const y = parseFloatWithUnits(node.getAttribute(\"cy\") || 0);\n const rx = parseFloatWithUnits(node.getAttribute(\"rx\") || 0);\n const ry = parseFloatWithUnits(node.getAttribute(\"ry\") || 0);\n const subpath = new Path();\n subpath.absellipse(x, y, rx, ry, 0, Math.PI * 2);\n const path = new ShapePath();\n path.subPaths.push(subpath);\n return path;\n }\n function parseLineNode(node) {\n const x1 = parseFloatWithUnits(node.getAttribute(\"x1\") || 0);\n const y1 = parseFloatWithUnits(node.getAttribute(\"y1\") || 0);\n const x2 = parseFloatWithUnits(node.getAttribute(\"x2\") || 0);\n const y2 = parseFloatWithUnits(node.getAttribute(\"y2\") || 0);\n const path = new ShapePath();\n path.moveTo(x1, y1);\n path.lineTo(x2, y2);\n path.currentPath.autoClose = false;\n return path;\n }\n function parseStyle(node, style) {\n style = Object.assign({}, style);\n let stylesheetStyles = {};\n if (node.hasAttribute(\"class\")) {\n const classSelectors = node.getAttribute(\"class\").split(/\\s/).filter(Boolean).map((i) => i.trim());\n for (let i = 0; i < classSelectors.length; i++) {\n stylesheetStyles = Object.assign(stylesheetStyles, stylesheets[\".\" + classSelectors[i]]);\n }\n }\n if (node.hasAttribute(\"id\")) {\n stylesheetStyles = Object.assign(stylesheetStyles, stylesheets[\"#\" + node.getAttribute(\"id\")]);\n }\n function addStyle(svgName, jsName, adjustFunction) {\n if (adjustFunction === void 0)\n adjustFunction = function copy(v) {\n if (v.startsWith(\"url\"))\n console.warn(\"SVGLoader: url access in attributes is not implemented.\");\n return v;\n };\n if (node.hasAttribute(svgName))\n style[jsName] = adjustFunction(node.getAttribute(svgName));\n if (stylesheetStyles[svgName])\n style[jsName] = adjustFunction(stylesheetStyles[svgName]);\n if (node.style && node.style[svgName] !== \"\")\n style[jsName] = adjustFunction(node.style[svgName]);\n }\n function clamp(v) {\n return Math.max(0, Math.min(1, parseFloatWithUnits(v)));\n }\n function positive(v) {\n return Math.max(0, parseFloatWithUnits(v));\n }\n addStyle(\"fill\", \"fill\");\n addStyle(\"fill-opacity\", \"fillOpacity\", clamp);\n addStyle(\"fill-rule\", \"fillRule\");\n addStyle(\"opacity\", \"opacity\", clamp);\n addStyle(\"stroke\", \"stroke\");\n addStyle(\"stroke-opacity\", \"strokeOpacity\", clamp);\n addStyle(\"stroke-width\", \"strokeWidth\", positive);\n addStyle(\"stroke-linejoin\", \"strokeLineJoin\");\n addStyle(\"stroke-linecap\", \"strokeLineCap\");\n addStyle(\"stroke-miterlimit\", \"strokeMiterLimit\", positive);\n addStyle(\"visibility\", \"visibility\");\n return style;\n }\n function getReflection(a, b) {\n return a - (b - a);\n }\n function parseFloats(input, flags, stride) {\n if (typeof input !== \"string\") {\n throw new TypeError(\"Invalid input: \" + typeof input);\n }\n const RE = {\n SEPARATOR: /[ \\t\\r\\n\\,.\\-+]/,\n WHITESPACE: /[ \\t\\r\\n]/,\n DIGIT: /[\\d]/,\n SIGN: /[-+]/,\n POINT: /\\./,\n COMMA: /,/,\n EXP: /e/i,\n FLAGS: /[01]/\n };\n const SEP = 0;\n const INT = 1;\n const FLOAT = 2;\n const EXP = 3;\n let state = SEP;\n let seenComma = true;\n let number = \"\", exponent = \"\";\n const result = [];\n function throwSyntaxError(current2, i, partial) {\n const error = new SyntaxError('Unexpected character \"' + current2 + '\" at index ' + i + \".\");\n error.partial = partial;\n throw error;\n }\n function newNumber() {\n if (number !== \"\") {\n if (exponent === \"\")\n result.push(Number(number));\n else\n result.push(Number(number) * Math.pow(10, Number(exponent)));\n }\n number = \"\";\n exponent = \"\";\n }\n let current;\n const length = input.length;\n for (let i = 0; i < length; i++) {\n current = input[i];\n if (Array.isArray(flags) && flags.includes(result.length % stride) && RE.FLAGS.test(current)) {\n state = INT;\n number = current;\n newNumber();\n continue;\n }\n if (state === SEP) {\n if (RE.WHITESPACE.test(current)) {\n continue;\n }\n if (RE.DIGIT.test(current) || RE.SIGN.test(current)) {\n state = INT;\n number = current;\n continue;\n }\n if (RE.POINT.test(current)) {\n state = FLOAT;\n number = current;\n continue;\n }\n if (RE.COMMA.test(current)) {\n if (seenComma) {\n throwSyntaxError(current, i, result);\n }\n seenComma = true;\n }\n }\n if (state === INT) {\n if (RE.DIGIT.test(current)) {\n number += current;\n continue;\n }\n if (RE.POINT.test(current)) {\n number += current;\n state = FLOAT;\n continue;\n }\n if (RE.EXP.test(current)) {\n state = EXP;\n continue;\n }\n if (RE.SIGN.test(current) && number.length === 1 && RE.SIGN.test(number[0])) {\n throwSyntaxError(current, i, result);\n }\n }\n if (state === FLOAT) {\n if (RE.DIGIT.test(current)) {\n number += current;\n continue;\n }\n if (RE.EXP.test(current)) {\n state = EXP;\n continue;\n }\n if (RE.POINT.test(current) && number[number.length - 1] === \".\") {\n throwSyntaxError(current, i, result);\n }\n }\n if (state === EXP) {\n if (RE.DIGIT.test(current)) {\n exponent += current;\n continue;\n }\n if (RE.SIGN.test(current)) {\n if (exponent === \"\") {\n exponent += current;\n continue;\n }\n if (exponent.length === 1 && RE.SIGN.test(exponent)) {\n throwSyntaxError(current, i, result);\n }\n }\n }\n if (RE.WHITESPACE.test(current)) {\n newNumber();\n state = SEP;\n seenComma = false;\n } else if (RE.COMMA.test(current)) {\n newNumber();\n state = SEP;\n seenComma = true;\n } else if (RE.SIGN.test(current)) {\n newNumber();\n state = INT;\n number = current;\n } else if (RE.POINT.test(current)) {\n newNumber();\n state = FLOAT;\n number = current;\n } else {\n throwSyntaxError(current, i, result);\n }\n }\n newNumber();\n return result;\n }\n const units = [\"mm\", \"cm\", \"in\", \"pt\", \"pc\", \"px\"];\n const unitConversion = {\n mm: {\n mm: 1,\n cm: 0.1,\n in: 1 / 25.4,\n pt: 72 / 25.4,\n pc: 6 / 25.4,\n px: -1\n },\n cm: {\n mm: 10,\n cm: 1,\n in: 1 / 2.54,\n pt: 72 / 2.54,\n pc: 6 / 2.54,\n px: -1\n },\n in: {\n mm: 25.4,\n cm: 2.54,\n in: 1,\n pt: 72,\n pc: 6,\n px: -1\n },\n pt: {\n mm: 25.4 / 72,\n cm: 2.54 / 72,\n in: 1 / 72,\n pt: 1,\n pc: 6 / 72,\n px: -1\n },\n pc: {\n mm: 25.4 / 6,\n cm: 2.54 / 6,\n in: 1 / 6,\n pt: 72 / 6,\n pc: 1,\n px: -1\n },\n px: {\n px: 1\n }\n };\n function parseFloatWithUnits(string) {\n let theUnit = \"px\";\n if (typeof string === \"string\" || string instanceof String) {\n for (let i = 0, n = units.length; i < n; i++) {\n const u = units[i];\n if (string.endsWith(u)) {\n theUnit = u;\n string = string.substring(0, string.length - u.length);\n break;\n }\n }\n }\n let scale = void 0;\n if (theUnit === \"px\" && scope.defaultUnit !== \"px\") {\n scale = unitConversion[\"in\"][scope.defaultUnit] / scope.defaultDPI;\n } else {\n scale = unitConversion[theUnit][scope.defaultUnit];\n if (scale < 0) {\n scale = unitConversion[theUnit][\"in\"] * scope.defaultDPI;\n }\n }\n return scale * parseFloat(string);\n }\n function getNodeTransform(node) {\n if (!(node.hasAttribute(\"transform\") || node.nodeName === \"use\" && (node.hasAttribute(\"x\") || node.hasAttribute(\"y\")))) {\n return null;\n }\n const transform = parseNodeTransform(node);\n if (transformStack.length > 0) {\n transform.premultiply(transformStack[transformStack.length - 1]);\n }\n currentTransform.copy(transform);\n transformStack.push(transform);\n return transform;\n }\n function parseNodeTransform(node) {\n const transform = new Matrix3();\n const currentTransform2 = tempTransform0;\n if (node.nodeName === \"use\" && (node.hasAttribute(\"x\") || node.hasAttribute(\"y\"))) {\n const tx = parseFloatWithUnits(node.getAttribute(\"x\"));\n const ty = parseFloatWithUnits(node.getAttribute(\"y\"));\n transform.translate(tx, ty);\n }\n if (node.hasAttribute(\"transform\")) {\n const transformsTexts = node.getAttribute(\"transform\").split(\")\");\n for (let tIndex = transformsTexts.length - 1; tIndex >= 0; tIndex--) {\n const transformText = transformsTexts[tIndex].trim();\n if (transformText === \"\")\n continue;\n const openParPos = transformText.indexOf(\"(\");\n const closeParPos = transformText.length;\n if (openParPos > 0 && openParPos < closeParPos) {\n const transformType = transformText.slice(0, openParPos);\n const array = parseFloats(transformText.slice(openParPos + 1));\n currentTransform2.identity();\n switch (transformType) {\n case \"translate\":\n if (array.length >= 1) {\n const tx = array[0];\n let ty = 0;\n if (array.length >= 2) {\n ty = array[1];\n }\n currentTransform2.translate(tx, ty);\n }\n break;\n case \"rotate\":\n if (array.length >= 1) {\n let angle = 0;\n let cx = 0;\n let cy = 0;\n angle = array[0] * Math.PI / 180;\n if (array.length >= 3) {\n cx = array[1];\n cy = array[2];\n }\n tempTransform1.makeTranslation(-cx, -cy);\n tempTransform2.makeRotation(angle);\n tempTransform3.multiplyMatrices(tempTransform2, tempTransform1);\n tempTransform1.makeTranslation(cx, cy);\n currentTransform2.multiplyMatrices(tempTransform1, tempTransform3);\n }\n break;\n case \"scale\":\n if (array.length >= 1) {\n const scaleX = array[0];\n let scaleY = scaleX;\n if (array.length >= 2) {\n scaleY = array[1];\n }\n currentTransform2.scale(scaleX, scaleY);\n }\n break;\n case \"skewX\":\n if (array.length === 1) {\n currentTransform2.set(1, Math.tan(array[0] * Math.PI / 180), 0, 0, 1, 0, 0, 0, 1);\n }\n break;\n case \"skewY\":\n if (array.length === 1) {\n currentTransform2.set(1, 0, 0, Math.tan(array[0] * Math.PI / 180), 1, 0, 0, 0, 1);\n }\n break;\n case \"matrix\":\n if (array.length === 6) {\n currentTransform2.set(array[0], array[2], array[4], array[1], array[3], array[5], 0, 0, 1);\n }\n break;\n }\n }\n transform.premultiply(currentTransform2);\n }\n }\n return transform;\n }\n function transformPath(path, m) {\n function transfVec2(v2) {\n tempV3.set(v2.x, v2.y, 1).applyMatrix3(m);\n v2.set(tempV3.x, tempV3.y);\n }\n function transfEllipseGeneric(curve) {\n const a = curve.xRadius;\n const b = curve.yRadius;\n const cosTheta = Math.cos(curve.aRotation);\n const sinTheta = Math.sin(curve.aRotation);\n const v1 = new Vector3(a * cosTheta, a * sinTheta, 0);\n const v2 = new Vector3(-b * sinTheta, b * cosTheta, 0);\n const f1 = v1.applyMatrix3(m);\n const f2 = v2.applyMatrix3(m);\n const mF = tempTransform0.set(f1.x, f2.x, 0, f1.y, f2.y, 0, 0, 0, 1);\n const mFInv = tempTransform1.copy(mF).invert();\n const mFInvT = tempTransform2.copy(mFInv).transpose();\n const mQ = mFInvT.multiply(mFInv);\n const mQe = mQ.elements;\n const ed = eigenDecomposition(mQe[0], mQe[1], mQe[4]);\n const rt1sqrt = Math.sqrt(ed.rt1);\n const rt2sqrt = Math.sqrt(ed.rt2);\n curve.xRadius = 1 / rt1sqrt;\n curve.yRadius = 1 / rt2sqrt;\n curve.aRotation = Math.atan2(ed.sn, ed.cs);\n const isFullEllipse = (curve.aEndAngle - curve.aStartAngle) % (2 * Math.PI) < Number.EPSILON;\n if (!isFullEllipse) {\n const mDsqrt = tempTransform1.set(rt1sqrt, 0, 0, 0, rt2sqrt, 0, 0, 0, 1);\n const mRT = tempTransform2.set(ed.cs, ed.sn, 0, -ed.sn, ed.cs, 0, 0, 0, 1);\n const mDRF = mDsqrt.multiply(mRT).multiply(mF);\n const transformAngle = (phi) => {\n const { x: cosR, y: sinR } = new Vector3(Math.cos(phi), Math.sin(phi), 0).applyMatrix3(mDRF);\n return Math.atan2(sinR, cosR);\n };\n curve.aStartAngle = transformAngle(curve.aStartAngle);\n curve.aEndAngle = transformAngle(curve.aEndAngle);\n if (isTransformFlipped(m)) {\n curve.aClockwise = !curve.aClockwise;\n }\n }\n }\n function transfEllipseNoSkew(curve) {\n const sx = getTransformScaleX(m);\n const sy = getTransformScaleY(m);\n curve.xRadius *= sx;\n curve.yRadius *= sy;\n const theta = sx > Number.EPSILON ? Math.atan2(m.elements[1], m.elements[0]) : Math.atan2(-m.elements[3], m.elements[4]);\n curve.aRotation += theta;\n if (isTransformFlipped(m)) {\n curve.aStartAngle *= -1;\n curve.aEndAngle *= -1;\n curve.aClockwise = !curve.aClockwise;\n }\n }\n const subPaths = path.subPaths;\n for (let i = 0, n = subPaths.length; i < n; i++) {\n const subPath = subPaths[i];\n const curves = subPath.curves;\n for (let j = 0; j < curves.length; j++) {\n const curve = curves[j];\n if (curve.isLineCurve) {\n transfVec2(curve.v1);\n transfVec2(curve.v2);\n } else if (curve.isCubicBezierCurve) {\n transfVec2(curve.v0);\n transfVec2(curve.v1);\n transfVec2(curve.v2);\n transfVec2(curve.v3);\n } else if (curve.isQuadraticBezierCurve) {\n transfVec2(curve.v0);\n transfVec2(curve.v1);\n transfVec2(curve.v2);\n } else if (curve.isEllipseCurve) {\n tempV2.set(curve.aX, curve.aY);\n transfVec2(tempV2);\n curve.aX = tempV2.x;\n curve.aY = tempV2.y;\n if (isTransformSkewed(m)) {\n transfEllipseGeneric(curve);\n } else {\n transfEllipseNoSkew(curve);\n }\n }\n }\n }\n }\n function isTransformFlipped(m) {\n const te = m.elements;\n return te[0] * te[4] - te[1] * te[3] < 0;\n }\n function isTransformSkewed(m) {\n const te = m.elements;\n const basisDot = te[0] * te[3] + te[1] * te[4];\n if (basisDot === 0)\n return false;\n const sx = getTransformScaleX(m);\n const sy = getTransformScaleY(m);\n return Math.abs(basisDot / (sx * sy)) > Number.EPSILON;\n }\n function getTransformScaleX(m) {\n const te = m.elements;\n return Math.sqrt(te[0] * te[0] + te[1] * te[1]);\n }\n function getTransformScaleY(m) {\n const te = m.elements;\n return Math.sqrt(te[3] * te[3] + te[4] * te[4]);\n }\n function eigenDecomposition(A, B, C) {\n let rt1, rt2, cs, sn, t;\n const sm = A + C;\n const df = A - C;\n const rt = Math.sqrt(df * df + 4 * B * B);\n if (sm > 0) {\n rt1 = 0.5 * (sm + rt);\n t = 1 / rt1;\n rt2 = A * t * C - B * t * B;\n } else if (sm < 0) {\n rt2 = 0.5 * (sm - rt);\n } else {\n rt1 = 0.5 * rt;\n rt2 = -0.5 * rt;\n }\n if (df > 0) {\n cs = df + rt;\n } else {\n cs = df - rt;\n }\n if (Math.abs(cs) > 2 * Math.abs(B)) {\n t = -2 * B / cs;\n sn = 1 / Math.sqrt(1 + t * t);\n cs = t * sn;\n } else if (Math.abs(B) === 0) {\n cs = 1;\n sn = 0;\n } else {\n t = -0.5 * cs / B;\n cs = 1 / Math.sqrt(1 + t * t);\n sn = t * cs;\n }\n if (df > 0) {\n t = cs;\n cs = -sn;\n sn = t;\n }\n return { rt1, rt2, cs, sn };\n }\n const paths = [];\n const stylesheets = {};\n const transformStack = [];\n const tempTransform0 = new Matrix3();\n const tempTransform1 = new Matrix3();\n const tempTransform2 = new Matrix3();\n const tempTransform3 = new Matrix3();\n const tempV2 = new Vector2();\n const tempV3 = new Vector3();\n const currentTransform = new Matrix3();\n const xml = new DOMParser().parseFromString(text, \"image/svg+xml\");\n parseNode(xml.documentElement, {\n fill: \"#000\",\n fillOpacity: 1,\n strokeOpacity: 1,\n strokeWidth: 1,\n strokeLineJoin: \"miter\",\n strokeLineCap: \"butt\",\n strokeMiterLimit: 4\n });\n const data = { paths, xml: xml.documentElement };\n return data;\n }\n static createShapes(shapePath) {\n const BIGNUMBER = 999999999;\n const IntersectionLocationType = {\n ORIGIN: 0,\n DESTINATION: 1,\n BETWEEN: 2,\n LEFT: 3,\n RIGHT: 4,\n BEHIND: 5,\n BEYOND: 6\n };\n const classifyResult = {\n loc: IntersectionLocationType.ORIGIN,\n t: 0\n };\n function findEdgeIntersection(a0, a1, b0, b1) {\n const x1 = a0.x;\n const x2 = a1.x;\n const x3 = b0.x;\n const x4 = b1.x;\n const y1 = a0.y;\n const y2 = a1.y;\n const y3 = b0.y;\n const y4 = b1.y;\n const nom1 = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3);\n const nom2 = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3);\n const denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);\n const t1 = nom1 / denom;\n const t2 = nom2 / denom;\n if (denom === 0 && nom1 !== 0 || t1 <= 0 || t1 >= 1 || t2 < 0 || t2 > 1) {\n return null;\n } else if (nom1 === 0 && denom === 0) {\n for (let i = 0; i < 2; i++) {\n classifyPoint(i === 0 ? b0 : b1, a0, a1);\n if (classifyResult.loc == IntersectionLocationType.ORIGIN) {\n const point = i === 0 ? b0 : b1;\n return { x: point.x, y: point.y, t: classifyResult.t };\n } else if (classifyResult.loc == IntersectionLocationType.BETWEEN) {\n const x = +(x1 + classifyResult.t * (x2 - x1)).toPrecision(10);\n const y = +(y1 + classifyResult.t * (y2 - y1)).toPrecision(10);\n return { x, y, t: classifyResult.t };\n }\n }\n return null;\n } else {\n for (let i = 0; i < 2; i++) {\n classifyPoint(i === 0 ? b0 : b1, a0, a1);\n if (classifyResult.loc == IntersectionLocationType.ORIGIN) {\n const point = i === 0 ? b0 : b1;\n return { x: point.x, y: point.y, t: classifyResult.t };\n }\n }\n const x = +(x1 + t1 * (x2 - x1)).toPrecision(10);\n const y = +(y1 + t1 * (y2 - y1)).toPrecision(10);\n return { x, y, t: t1 };\n }\n }\n function classifyPoint(p, edgeStart, edgeEnd) {\n const ax = edgeEnd.x - edgeStart.x;\n const ay = edgeEnd.y - edgeStart.y;\n const bx = p.x - edgeStart.x;\n const by = p.y - edgeStart.y;\n const sa = ax * by - bx * ay;\n if (p.x === edgeStart.x && p.y === edgeStart.y) {\n classifyResult.loc = IntersectionLocationType.ORIGIN;\n classifyResult.t = 0;\n return;\n }\n if (p.x === edgeEnd.x && p.y === edgeEnd.y) {\n classifyResult.loc = IntersectionLocationType.DESTINATION;\n classifyResult.t = 1;\n return;\n }\n if (sa < -Number.EPSILON) {\n classifyResult.loc = IntersectionLocationType.LEFT;\n return;\n }\n if (sa > Number.EPSILON) {\n classifyResult.loc = IntersectionLocationType.RIGHT;\n return;\n }\n if (ax * bx < 0 || ay * by < 0) {\n classifyResult.loc = IntersectionLocationType.BEHIND;\n return;\n }\n if (Math.sqrt(ax * ax + ay * ay) < Math.sqrt(bx * bx + by * by)) {\n classifyResult.loc = IntersectionLocationType.BEYOND;\n return;\n }\n let t;\n if (ax !== 0) {\n t = bx / ax;\n } else {\n t = by / ay;\n }\n classifyResult.loc = IntersectionLocationType.BETWEEN;\n classifyResult.t = t;\n }\n function getIntersections(path1, path2) {\n const intersectionsRaw = [];\n const intersections = [];\n for (let index = 1; index < path1.length; index++) {\n const path1EdgeStart = path1[index - 1];\n const path1EdgeEnd = path1[index];\n for (let index2 = 1; index2 < path2.length; index2++) {\n const path2EdgeStart = path2[index2 - 1];\n const path2EdgeEnd = path2[index2];\n const intersection = findEdgeIntersection(path1EdgeStart, path1EdgeEnd, path2EdgeStart, path2EdgeEnd);\n if (intersection !== null && intersectionsRaw.find(\n (i) => i.t <= intersection.t + Number.EPSILON && i.t >= intersection.t - Number.EPSILON\n ) === void 0) {\n intersectionsRaw.push(intersection);\n intersections.push(new Vector2(intersection.x, intersection.y));\n }\n }\n }\n return intersections;\n }\n function getScanlineIntersections(scanline, boundingBox, paths) {\n const center = new Vector2();\n boundingBox.getCenter(center);\n const allIntersections = [];\n paths.forEach((path) => {\n if (path.boundingBox.containsPoint(center)) {\n const intersections = getIntersections(scanline, path.points);\n intersections.forEach((p) => {\n allIntersections.push({ identifier: path.identifier, isCW: path.isCW, point: p });\n });\n }\n });\n allIntersections.sort((i1, i2) => {\n return i1.point.x - i2.point.x;\n });\n return allIntersections;\n }\n function isHoleTo(simplePath, allPaths, scanlineMinX2, scanlineMaxX2, _fillRule) {\n if (_fillRule === null || _fillRule === void 0 || _fillRule === \"\") {\n _fillRule = \"nonzero\";\n }\n const centerBoundingBox = new Vector2();\n simplePath.boundingBox.getCenter(centerBoundingBox);\n const scanline = [\n new Vector2(scanlineMinX2, centerBoundingBox.y),\n new Vector2(scanlineMaxX2, centerBoundingBox.y)\n ];\n const scanlineIntersections = getScanlineIntersections(scanline, simplePath.boundingBox, allPaths);\n scanlineIntersections.sort((i1, i2) => {\n return i1.point.x - i2.point.x;\n });\n const baseIntersections = [];\n const otherIntersections = [];\n scanlineIntersections.forEach((i2) => {\n if (i2.identifier === simplePath.identifier) {\n baseIntersections.push(i2);\n } else {\n otherIntersections.push(i2);\n }\n });\n const firstXOfPath = baseIntersections[0].point.x;\n const stack = [];\n let i = 0;\n while (i < otherIntersections.length && otherIntersections[i].point.x < firstXOfPath) {\n if (stack.length > 0 && stack[stack.length - 1] === otherIntersections[i].identifier) {\n stack.pop();\n } else {\n stack.push(otherIntersections[i].identifier);\n }\n i++;\n }\n stack.push(simplePath.identifier);\n if (_fillRule === \"evenodd\") {\n const isHole = stack.length % 2 === 0 ? true : false;\n const isHoleFor = stack[stack.length - 2];\n return { identifier: simplePath.identifier, isHole, for: isHoleFor };\n } else if (_fillRule === \"nonzero\") {\n let isHole = true;\n let isHoleFor = null;\n let lastCWValue = null;\n for (let i2 = 0; i2 < stack.length; i2++) {\n const identifier = stack[i2];\n if (isHole) {\n lastCWValue = allPaths[identifier].isCW;\n isHole = false;\n isHoleFor = identifier;\n } else if (lastCWValue !== allPaths[identifier].isCW) {\n lastCWValue = allPaths[identifier].isCW;\n isHole = true;\n }\n }\n return { identifier: simplePath.identifier, isHole, for: isHoleFor };\n } else {\n console.warn('fill-rule: \"' + _fillRule + '\" is currently not implemented.');\n }\n }\n let scanlineMinX = BIGNUMBER;\n let scanlineMaxX = -BIGNUMBER;\n let simplePaths = shapePath.subPaths.map((p) => {\n const points = p.getPoints();\n let maxY = -BIGNUMBER;\n let minY = BIGNUMBER;\n let maxX = -BIGNUMBER;\n let minX = BIGNUMBER;\n for (let i = 0; i < points.length; i++) {\n const p2 = points[i];\n if (p2.y > maxY) {\n maxY = p2.y;\n }\n if (p2.y < minY) {\n minY = p2.y;\n }\n if (p2.x > maxX) {\n maxX = p2.x;\n }\n if (p2.x < minX) {\n minX = p2.x;\n }\n }\n if (scanlineMaxX <= maxX) {\n scanlineMaxX = maxX + 1;\n }\n if (scanlineMinX >= minX) {\n scanlineMinX = minX - 1;\n }\n return {\n curves: p.curves,\n points,\n isCW: ShapeUtils.isClockWise(points),\n identifier: -1,\n boundingBox: new Box2(new Vector2(minX, minY), new Vector2(maxX, maxY))\n };\n });\n simplePaths = simplePaths.filter((sp) => sp.points.length > 1);\n for (let identifier = 0; identifier < simplePaths.length; identifier++) {\n simplePaths[identifier].identifier = identifier;\n }\n const isAHole = simplePaths.map(\n (p) => isHoleTo(\n p,\n simplePaths,\n scanlineMinX,\n scanlineMaxX,\n shapePath.userData ? shapePath.userData.style.fillRule : void 0\n )\n );\n const shapesToReturn = [];\n simplePaths.forEach((p) => {\n const amIAHole = isAHole[p.identifier];\n if (!amIAHole.isHole) {\n const shape = new Shape();\n shape.curves = p.curves;\n const holes = isAHole.filter((h) => h.isHole && h.for === p.identifier);\n holes.forEach((h) => {\n const hole = simplePaths[h.identifier];\n const path = new Path();\n path.curves = hole.curves;\n shape.holes.push(path);\n });\n shapesToReturn.push(shape);\n }\n });\n return shapesToReturn;\n }\n static getStrokeStyle(width, color, lineJoin, lineCap, miterLimit) {\n width = width !== void 0 ? width : 1;\n color = color !== void 0 ? color : \"#000\";\n lineJoin = lineJoin !== void 0 ? lineJoin : \"miter\";\n lineCap = lineCap !== void 0 ? lineCap : \"butt\";\n miterLimit = miterLimit !== void 0 ? miterLimit : 4;\n return {\n strokeColor: color,\n strokeWidth: width,\n strokeLineJoin: lineJoin,\n strokeLineCap: lineCap,\n strokeMiterLimit: miterLimit\n };\n }\n static pointsToStroke(points, style, arcDivisions, minDistance) {\n const vertices = [];\n const normals = [];\n const uvs = [];\n if (SVGLoader2.pointsToStrokeWithBuffers(points, style, arcDivisions, minDistance, vertices, normals, uvs) === 0) {\n return null;\n }\n const geometry = new BufferGeometry();\n geometry.setAttribute(\"position\", new Float32BufferAttribute(vertices, 3));\n geometry.setAttribute(\"normal\", new Float32BufferAttribute(normals, 3));\n geometry.setAttribute(\"uv\", new Float32BufferAttribute(uvs, 2));\n return geometry;\n }\n static pointsToStrokeWithBuffers(points, style, arcDivisions, minDistance, vertices, normals, uvs, vertexOffset) {\n const tempV2_1 = new Vector2();\n const tempV2_2 = new Vector2();\n const tempV2_3 = new Vector2();\n const tempV2_4 = new Vector2();\n const tempV2_5 = new Vector2();\n const tempV2_6 = new Vector2();\n const tempV2_7 = new Vector2();\n const lastPointL = new Vector2();\n const lastPointR = new Vector2();\n const point0L = new Vector2();\n const point0R = new Vector2();\n const currentPointL = new Vector2();\n const currentPointR = new Vector2();\n const nextPointL = new Vector2();\n const nextPointR = new Vector2();\n const innerPoint = new Vector2();\n const outerPoint = new Vector2();\n arcDivisions = arcDivisions !== void 0 ? arcDivisions : 12;\n minDistance = minDistance !== void 0 ? minDistance : 1e-3;\n vertexOffset = vertexOffset !== void 0 ? vertexOffset : 0;\n points = removeDuplicatedPoints(points);\n const numPoints = points.length;\n if (numPoints < 2)\n return 0;\n const isClosed = points[0].equals(points[numPoints - 1]);\n let currentPoint;\n let previousPoint = points[0];\n let nextPoint;\n const strokeWidth2 = style.strokeWidth / 2;\n const deltaU = 1 / (numPoints - 1);\n let u0 = 0, u1;\n let innerSideModified;\n let joinIsOnLeftSide;\n let isMiter;\n let initialJoinIsOnLeftSide = false;\n let numVertices = 0;\n let currentCoordinate = vertexOffset * 3;\n let currentCoordinateUV = vertexOffset * 2;\n getNormal(points[0], points[1], tempV2_1).multiplyScalar(strokeWidth2);\n lastPointL.copy(points[0]).sub(tempV2_1);\n lastPointR.copy(points[0]).add(tempV2_1);\n point0L.copy(lastPointL);\n point0R.copy(lastPointR);\n for (let iPoint = 1; iPoint < numPoints; iPoint++) {\n currentPoint = points[iPoint];\n if (iPoint === numPoints - 1) {\n if (isClosed) {\n nextPoint = points[1];\n } else\n nextPoint = void 0;\n } else {\n nextPoint = points[iPoint + 1];\n }\n const normal1 = tempV2_1;\n getNormal(previousPoint, currentPoint, normal1);\n tempV2_3.copy(normal1).multiplyScalar(strokeWidth2);\n currentPointL.copy(currentPoint).sub(tempV2_3);\n currentPointR.copy(currentPoint).add(tempV2_3);\n u1 = u0 + deltaU;\n innerSideModified = false;\n if (nextPoint !== void 0) {\n getNormal(currentPoint, nextPoint, tempV2_2);\n tempV2_3.copy(tempV2_2).multiplyScalar(strokeWidth2);\n nextPointL.copy(currentPoint).sub(tempV2_3);\n nextPointR.copy(currentPoint).add(tempV2_3);\n joinIsOnLeftSide = true;\n tempV2_3.subVectors(nextPoint, previousPoint);\n if (normal1.dot(tempV2_3) < 0) {\n joinIsOnLeftSide = false;\n }\n if (iPoint === 1)\n initialJoinIsOnLeftSide = joinIsOnLeftSide;\n tempV2_3.subVectors(nextPoint, currentPoint);\n tempV2_3.normalize();\n const dot = Math.abs(normal1.dot(tempV2_3));\n if (dot > Number.EPSILON) {\n const miterSide = strokeWidth2 / dot;\n tempV2_3.multiplyScalar(-miterSide);\n tempV2_4.subVectors(currentPoint, previousPoint);\n tempV2_5.copy(tempV2_4).setLength(miterSide).add(tempV2_3);\n innerPoint.copy(tempV2_5).negate();\n const miterLength2 = tempV2_5.length();\n const segmentLengthPrev = tempV2_4.length();\n tempV2_4.divideScalar(segmentLengthPrev);\n tempV2_6.subVectors(nextPoint, currentPoint);\n const segmentLengthNext = tempV2_6.length();\n tempV2_6.divideScalar(segmentLengthNext);\n if (tempV2_4.dot(innerPoint) < segmentLengthPrev && tempV2_6.dot(innerPoint) < segmentLengthNext) {\n innerSideModified = true;\n }\n outerPoint.copy(tempV2_5).add(currentPoint);\n innerPoint.add(currentPoint);\n isMiter = false;\n if (innerSideModified) {\n if (joinIsOnLeftSide) {\n nextPointR.copy(innerPoint);\n currentPointR.copy(innerPoint);\n } else {\n nextPointL.copy(innerPoint);\n currentPointL.copy(innerPoint);\n }\n } else {\n makeSegmentTriangles();\n }\n switch (style.strokeLineJoin) {\n case \"bevel\":\n makeSegmentWithBevelJoin(joinIsOnLeftSide, innerSideModified, u1);\n break;\n case \"round\":\n createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide, innerSideModified);\n if (joinIsOnLeftSide) {\n makeCircularSector(currentPoint, currentPointL, nextPointL, u1, 0);\n } else {\n makeCircularSector(currentPoint, nextPointR, currentPointR, u1, 1);\n }\n break;\n case \"miter\":\n case \"miter-clip\":\n default:\n const miterFraction = strokeWidth2 * style.strokeMiterLimit / miterLength2;\n if (miterFraction < 1) {\n if (style.strokeLineJoin !== \"miter-clip\") {\n makeSegmentWithBevelJoin(joinIsOnLeftSide, innerSideModified, u1);\n break;\n } else {\n createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide, innerSideModified);\n if (joinIsOnLeftSide) {\n tempV2_6.subVectors(outerPoint, currentPointL).multiplyScalar(miterFraction).add(currentPointL);\n tempV2_7.subVectors(outerPoint, nextPointL).multiplyScalar(miterFraction).add(nextPointL);\n addVertex(currentPointL, u1, 0);\n addVertex(tempV2_6, u1, 0);\n addVertex(currentPoint, u1, 0.5);\n addVertex(currentPoint, u1, 0.5);\n addVertex(tempV2_6, u1, 0);\n addVertex(tempV2_7, u1, 0);\n addVertex(currentPoint, u1, 0.5);\n addVertex(tempV2_7, u1, 0);\n addVertex(nextPointL, u1, 0);\n } else {\n tempV2_6.subVectors(outerPoint, currentPointR).multiplyScalar(miterFraction).add(currentPointR);\n tempV2_7.subVectors(outerPoint, nextPointR).multiplyScalar(miterFraction).add(nextPointR);\n addVertex(currentPointR, u1, 1);\n addVertex(tempV2_6, u1, 1);\n addVertex(currentPoint, u1, 0.5);\n addVertex(currentPoint, u1, 0.5);\n addVertex(tempV2_6, u1, 1);\n addVertex(tempV2_7, u1, 1);\n addVertex(currentPoint, u1, 0.5);\n addVertex(tempV2_7, u1, 1);\n addVertex(nextPointR, u1, 1);\n }\n }\n } else {\n if (innerSideModified) {\n if (joinIsOnLeftSide) {\n addVertex(lastPointR, u0, 1);\n addVertex(lastPointL, u0, 0);\n addVertex(outerPoint, u1, 0);\n addVertex(lastPointR, u0, 1);\n addVertex(outerPoint, u1, 0);\n addVertex(innerPoint, u1, 1);\n } else {\n addVertex(lastPointR, u0, 1);\n addVertex(lastPointL, u0, 0);\n addVertex(outerPoint, u1, 1);\n addVertex(lastPointL, u0, 0);\n addVertex(innerPoint, u1, 0);\n addVertex(outerPoint, u1, 1);\n }\n if (joinIsOnLeftSide) {\n nextPointL.copy(outerPoint);\n } else {\n nextPointR.copy(outerPoint);\n }\n } else {\n if (joinIsOnLeftSide) {\n addVertex(currentPointL, u1, 0);\n addVertex(outerPoint, u1, 0);\n addVertex(currentPoint, u1, 0.5);\n addVertex(currentPoint, u1, 0.5);\n addVertex(outerPoint, u1, 0);\n addVertex(nextPointL, u1, 0);\n } else {\n addVertex(currentPointR, u1, 1);\n addVertex(outerPoint, u1, 1);\n addVertex(currentPoint, u1, 0.5);\n addVertex(currentPoint, u1, 0.5);\n addVertex(outerPoint, u1, 1);\n addVertex(nextPointR, u1, 1);\n }\n }\n isMiter = true;\n }\n break;\n }\n } else {\n makeSegmentTriangles();\n }\n } else {\n makeSegmentTriangles();\n }\n if (!isClosed && iPoint === numPoints - 1) {\n addCapGeometry(points[0], point0L, point0R, joinIsOnLeftSide, true, u0);\n }\n u0 = u1;\n previousPoint = currentPoint;\n lastPointL.copy(nextPointL);\n lastPointR.copy(nextPointR);\n }\n if (!isClosed) {\n addCapGeometry(currentPoint, currentPointL, currentPointR, joinIsOnLeftSide, false, u1);\n } else if (innerSideModified && vertices) {\n let lastOuter = outerPoint;\n let lastInner = innerPoint;\n if (initialJoinIsOnLeftSide !== joinIsOnLeftSide) {\n lastOuter = innerPoint;\n lastInner = outerPoint;\n }\n if (joinIsOnLeftSide) {\n if (isMiter || initialJoinIsOnLeftSide) {\n lastInner.toArray(vertices, 0 * 3);\n lastInner.toArray(vertices, 3 * 3);\n if (isMiter) {\n lastOuter.toArray(vertices, 1 * 3);\n }\n }\n } else {\n if (isMiter || !initialJoinIsOnLeftSide) {\n lastInner.toArray(vertices, 1 * 3);\n lastInner.toArray(vertices, 3 * 3);\n if (isMiter) {\n lastOuter.toArray(vertices, 0 * 3);\n }\n }\n }\n }\n return numVertices;\n function getNormal(p1, p2, result) {\n result.subVectors(p2, p1);\n return result.set(-result.y, result.x).normalize();\n }\n function addVertex(position, u, v) {\n if (vertices) {\n vertices[currentCoordinate] = position.x;\n vertices[currentCoordinate + 1] = position.y;\n vertices[currentCoordinate + 2] = 0;\n if (normals) {\n normals[currentCoordinate] = 0;\n normals[currentCoordinate + 1] = 0;\n normals[currentCoordinate + 2] = 1;\n }\n currentCoordinate += 3;\n if (uvs) {\n uvs[currentCoordinateUV] = u;\n uvs[currentCoordinateUV + 1] = v;\n currentCoordinateUV += 2;\n }\n }\n numVertices += 3;\n }\n function makeCircularSector(center, p1, p2, u, v) {\n tempV2_1.copy(p1).sub(center).normalize();\n tempV2_2.copy(p2).sub(center).normalize();\n let angle = Math.PI;\n const dot = tempV2_1.dot(tempV2_2);\n if (Math.abs(dot) < 1)\n angle = Math.abs(Math.acos(dot));\n angle /= arcDivisions;\n tempV2_3.copy(p1);\n for (let i = 0, il = arcDivisions - 1; i < il; i++) {\n tempV2_4.copy(tempV2_3).rotateAround(center, angle);\n addVertex(tempV2_3, u, v);\n addVertex(tempV2_4, u, v);\n addVertex(center, u, 0.5);\n tempV2_3.copy(tempV2_4);\n }\n addVertex(tempV2_4, u, v);\n addVertex(p2, u, v);\n addVertex(center, u, 0.5);\n }\n function makeSegmentTriangles() {\n addVertex(lastPointR, u0, 1);\n addVertex(lastPointL, u0, 0);\n addVertex(currentPointL, u1, 0);\n addVertex(lastPointR, u0, 1);\n addVertex(currentPointL, u1, 0);\n addVertex(currentPointR, u1, 1);\n }\n function makeSegmentWithBevelJoin(joinIsOnLeftSide2, innerSideModified2, u) {\n if (innerSideModified2) {\n if (joinIsOnLeftSide2) {\n addVertex(lastPointR, u0, 1);\n addVertex(lastPointL, u0, 0);\n addVertex(currentPointL, u1, 0);\n addVertex(lastPointR, u0, 1);\n addVertex(currentPointL, u1, 0);\n addVertex(innerPoint, u1, 1);\n addVertex(currentPointL, u, 0);\n addVertex(nextPointL, u, 0);\n addVertex(innerPoint, u, 0.5);\n } else {\n addVertex(lastPointR, u0, 1);\n addVertex(lastPointL, u0, 0);\n addVertex(currentPointR, u1, 1);\n addVertex(lastPointL, u0, 0);\n addVertex(innerPoint, u1, 0);\n addVertex(currentPointR, u1, 1);\n addVertex(currentPointR, u, 1);\n addVertex(innerPoint, u, 0);\n addVertex(nextPointR, u, 1);\n }\n } else {\n if (joinIsOnLeftSide2) {\n addVertex(currentPointL, u, 0);\n addVertex(nextPointL, u, 0);\n addVertex(currentPoint, u, 0.5);\n } else {\n addVertex(currentPointR, u, 1);\n addVertex(nextPointR, u, 0);\n addVertex(currentPoint, u, 0.5);\n }\n }\n }\n function createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide2, innerSideModified2) {\n if (innerSideModified2) {\n if (joinIsOnLeftSide2) {\n addVertex(lastPointR, u0, 1);\n addVertex(lastPointL, u0, 0);\n addVertex(currentPointL, u1, 0);\n addVertex(lastPointR, u0, 1);\n addVertex(currentPointL, u1, 0);\n addVertex(innerPoint, u1, 1);\n addVertex(currentPointL, u0, 0);\n addVertex(currentPoint, u1, 0.5);\n addVertex(innerPoint, u1, 1);\n addVertex(currentPoint, u1, 0.5);\n addVertex(nextPointL, u0, 0);\n addVertex(innerPoint, u1, 1);\n } else {\n addVertex(lastPointR, u0, 1);\n addVertex(lastPointL, u0, 0);\n addVertex(currentPointR, u1, 1);\n addVertex(lastPointL, u0, 0);\n addVertex(innerPoint, u1, 0);\n addVertex(currentPointR, u1, 1);\n addVertex(currentPointR, u0, 1);\n addVertex(innerPoint, u1, 0);\n addVertex(currentPoint, u1, 0.5);\n addVertex(currentPoint, u1, 0.5);\n addVertex(innerPoint, u1, 0);\n addVertex(nextPointR, u0, 1);\n }\n }\n }\n function addCapGeometry(center, p1, p2, joinIsOnLeftSide2, start, u) {\n switch (style.strokeLineCap) {\n case \"round\":\n if (start) {\n makeCircularSector(center, p2, p1, u, 0.5);\n } else {\n makeCircularSector(center, p1, p2, u, 0.5);\n }\n break;\n case \"square\":\n if (start) {\n tempV2_1.subVectors(p1, center);\n tempV2_2.set(tempV2_1.y, -tempV2_1.x);\n tempV2_3.addVectors(tempV2_1, tempV2_2).add(center);\n tempV2_4.subVectors(tempV2_2, tempV2_1).add(center);\n if (joinIsOnLeftSide2) {\n tempV2_3.toArray(vertices, 1 * 3);\n tempV2_4.toArray(vertices, 0 * 3);\n tempV2_4.toArray(vertices, 3 * 3);\n } else {\n tempV2_3.toArray(vertices, 1 * 3);\n uvs[3 * 2 + 1] === 1 ? tempV2_4.toArray(vertices, 3 * 3) : tempV2_3.toArray(vertices, 3 * 3);\n tempV2_4.toArray(vertices, 0 * 3);\n }\n } else {\n tempV2_1.subVectors(p2, center);\n tempV2_2.set(tempV2_1.y, -tempV2_1.x);\n tempV2_3.addVectors(tempV2_1, tempV2_2).add(center);\n tempV2_4.subVectors(tempV2_2, tempV2_1).add(center);\n const vl = vertices.length;\n if (joinIsOnLeftSide2) {\n tempV2_3.toArray(vertices, vl - 1 * 3);\n tempV2_4.toArray(vertices, vl - 2 * 3);\n tempV2_4.toArray(vertices, vl - 4 * 3);\n } else {\n tempV2_4.toArray(vertices, vl - 2 * 3);\n tempV2_3.toArray(vertices, vl - 1 * 3);\n tempV2_4.toArray(vertices, vl - 4 * 3);\n }\n }\n break;\n }\n }\n function removeDuplicatedPoints(points2) {\n let dupPoints = false;\n for (let i = 1, n = points2.length - 1; i < n; i++) {\n if (points2[i].distanceTo(points2[i + 1]) < minDistance) {\n dupPoints = true;\n break;\n }\n }\n if (!dupPoints)\n return points2;\n const newPoints = [];\n newPoints.push(points2[0]);\n for (let i = 1, n = points2.length - 1; i < n; i++) {\n if (points2[i].distanceTo(points2[i + 1]) >= minDistance) {\n newPoints.push(points2[i]);\n }\n }\n newPoints.push(points2[points2.length - 1]);\n return newPoints;\n }\n }\n }\n return SVGLoader2;\n})();\nexport {\n SVGLoader\n};\n//# sourceMappingURL=SVGLoader.js.map\n","import { Loader, FileLoader, BufferGeometry, BufferAttribute } from \"three\";\nconst _taskCache = /* @__PURE__ */ new WeakMap();\nclass DRACOLoader extends Loader {\n constructor(manager) {\n super(manager);\n this.decoderPath = \"\";\n this.decoderConfig = {};\n this.decoderBinary = null;\n this.decoderPending = null;\n this.workerLimit = 4;\n this.workerPool = [];\n this.workerNextTaskID = 1;\n this.workerSourceURL = \"\";\n this.defaultAttributeIDs = {\n position: \"POSITION\",\n normal: \"NORMAL\",\n color: \"COLOR\",\n uv: \"TEX_COORD\"\n };\n this.defaultAttributeTypes = {\n position: \"Float32Array\",\n normal: \"Float32Array\",\n color: \"Float32Array\",\n uv: \"Float32Array\"\n };\n }\n setDecoderPath(path) {\n this.decoderPath = path;\n return this;\n }\n setDecoderConfig(config) {\n this.decoderConfig = config;\n return this;\n }\n setWorkerLimit(workerLimit) {\n this.workerLimit = workerLimit;\n return this;\n }\n load(url, onLoad, onProgress, onError) {\n const loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setResponseType(\"arraybuffer\");\n loader.setRequestHeader(this.requestHeader);\n loader.setWithCredentials(this.withCredentials);\n loader.load(\n url,\n (buffer) => {\n const taskConfig = {\n attributeIDs: this.defaultAttributeIDs,\n attributeTypes: this.defaultAttributeTypes,\n useUniqueIDs: false\n };\n this.decodeGeometry(buffer, taskConfig).then(onLoad).catch(onError);\n },\n onProgress,\n onError\n );\n }\n /** @deprecated Kept for backward-compatibility with previous DRACOLoader versions. */\n decodeDracoFile(buffer, callback, attributeIDs, attributeTypes) {\n const taskConfig = {\n attributeIDs: attributeIDs || this.defaultAttributeIDs,\n attributeTypes: attributeTypes || this.defaultAttributeTypes,\n useUniqueIDs: !!attributeIDs\n };\n this.decodeGeometry(buffer, taskConfig).then(callback);\n }\n decodeGeometry(buffer, taskConfig) {\n for (const attribute in taskConfig.attributeTypes) {\n const type = taskConfig.attributeTypes[attribute];\n if (type.BYTES_PER_ELEMENT !== void 0) {\n taskConfig.attributeTypes[attribute] = type.name;\n }\n }\n const taskKey = JSON.stringify(taskConfig);\n if (_taskCache.has(buffer)) {\n const cachedTask = _taskCache.get(buffer);\n if (cachedTask.key === taskKey) {\n return cachedTask.promise;\n } else if (buffer.byteLength === 0) {\n throw new Error(\n \"THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.\"\n );\n }\n }\n let worker;\n const taskID = this.workerNextTaskID++;\n const taskCost = buffer.byteLength;\n const geometryPending = this._getWorker(taskID, taskCost).then((_worker) => {\n worker = _worker;\n return new Promise((resolve, reject) => {\n worker._callbacks[taskID] = { resolve, reject };\n worker.postMessage({ type: \"decode\", id: taskID, taskConfig, buffer }, [buffer]);\n });\n }).then((message) => this._createGeometry(message.geometry));\n geometryPending.catch(() => true).then(() => {\n if (worker && taskID) {\n this._releaseTask(worker, taskID);\n }\n });\n _taskCache.set(buffer, {\n key: taskKey,\n promise: geometryPending\n });\n return geometryPending;\n }\n _createGeometry(geometryData) {\n const geometry = new BufferGeometry();\n if (geometryData.index) {\n geometry.setIndex(new BufferAttribute(geometryData.index.array, 1));\n }\n for (let i = 0; i < geometryData.attributes.length; i++) {\n const attribute = geometryData.attributes[i];\n const name = attribute.name;\n const array = attribute.array;\n const itemSize = attribute.itemSize;\n geometry.setAttribute(name, new BufferAttribute(array, itemSize));\n }\n return geometry;\n }\n _loadLibrary(url, responseType) {\n const loader = new FileLoader(this.manager);\n loader.setPath(this.decoderPath);\n loader.setResponseType(responseType);\n loader.setWithCredentials(this.withCredentials);\n return new Promise((resolve, reject) => {\n loader.load(url, resolve, void 0, reject);\n });\n }\n preload() {\n this._initDecoder();\n return this;\n }\n _initDecoder() {\n if (this.decoderPending)\n return this.decoderPending;\n const useJS = typeof WebAssembly !== \"object\" || this.decoderConfig.type === \"js\";\n const librariesPending = [];\n if (useJS) {\n librariesPending.push(this._loadLibrary(\"draco_decoder.js\", \"text\"));\n } else {\n librariesPending.push(this._loadLibrary(\"draco_wasm_wrapper.js\", \"text\"));\n librariesPending.push(this._loadLibrary(\"draco_decoder.wasm\", \"arraybuffer\"));\n }\n this.decoderPending = Promise.all(librariesPending).then((libraries) => {\n const jsContent = libraries[0];\n if (!useJS) {\n this.decoderConfig.wasmBinary = libraries[1];\n }\n const fn = DRACOWorker.toString();\n const body = [\n \"/* draco decoder */\",\n jsContent,\n \"\",\n \"/* worker */\",\n fn.substring(fn.indexOf(\"{\") + 1, fn.lastIndexOf(\"}\"))\n ].join(\"\\n\");\n this.workerSourceURL = URL.createObjectURL(new Blob([body]));\n });\n return this.decoderPending;\n }\n _getWorker(taskID, taskCost) {\n return this._initDecoder().then(() => {\n if (this.workerPool.length < this.workerLimit) {\n const worker2 = new Worker(this.workerSourceURL);\n worker2._callbacks = {};\n worker2._taskCosts = {};\n worker2._taskLoad = 0;\n worker2.postMessage({ type: \"init\", decoderConfig: this.decoderConfig });\n worker2.onmessage = function(e) {\n const message = e.data;\n switch (message.type) {\n case \"decode\":\n worker2._callbacks[message.id].resolve(message);\n break;\n case \"error\":\n worker2._callbacks[message.id].reject(message);\n break;\n default:\n console.error('THREE.DRACOLoader: Unexpected message, \"' + message.type + '\"');\n }\n };\n this.workerPool.push(worker2);\n } else {\n this.workerPool.sort(function(a, b) {\n return a._taskLoad > b._taskLoad ? -1 : 1;\n });\n }\n const worker = this.workerPool[this.workerPool.length - 1];\n worker._taskCosts[taskID] = taskCost;\n worker._taskLoad += taskCost;\n return worker;\n });\n }\n _releaseTask(worker, taskID) {\n worker._taskLoad -= worker._taskCosts[taskID];\n delete worker._callbacks[taskID];\n delete worker._taskCosts[taskID];\n }\n debug() {\n console.log(\n \"Task load: \",\n this.workerPool.map((worker) => worker._taskLoad)\n );\n }\n dispose() {\n for (let i = 0; i < this.workerPool.length; ++i) {\n this.workerPool[i].terminate();\n }\n this.workerPool.length = 0;\n return this;\n }\n}\nfunction DRACOWorker() {\n let decoderConfig;\n let decoderPending;\n onmessage = function(e) {\n const message = e.data;\n switch (message.type) {\n case \"init\":\n decoderConfig = message.decoderConfig;\n decoderPending = new Promise(function(resolve) {\n decoderConfig.onModuleLoaded = function(draco) {\n resolve({ draco });\n };\n DracoDecoderModule(decoderConfig);\n });\n break;\n case \"decode\":\n const buffer = message.buffer;\n const taskConfig = message.taskConfig;\n decoderPending.then((module) => {\n const draco = module.draco;\n const decoder = new draco.Decoder();\n const decoderBuffer = new draco.DecoderBuffer();\n decoderBuffer.Init(new Int8Array(buffer), buffer.byteLength);\n try {\n const geometry = decodeGeometry(draco, decoder, decoderBuffer, taskConfig);\n const buffers = geometry.attributes.map((attr) => attr.array.buffer);\n if (geometry.index)\n buffers.push(geometry.index.array.buffer);\n self.postMessage({ type: \"decode\", id: message.id, geometry }, buffers);\n } catch (error) {\n console.error(error);\n self.postMessage({ type: \"error\", id: message.id, error: error.message });\n } finally {\n draco.destroy(decoderBuffer);\n draco.destroy(decoder);\n }\n });\n break;\n }\n };\n function decodeGeometry(draco, decoder, decoderBuffer, taskConfig) {\n const attributeIDs = taskConfig.attributeIDs;\n const attributeTypes = taskConfig.attributeTypes;\n let dracoGeometry;\n let decodingStatus;\n const geometryType = decoder.GetEncodedGeometryType(decoderBuffer);\n if (geometryType === draco.TRIANGULAR_MESH) {\n dracoGeometry = new draco.Mesh();\n decodingStatus = decoder.DecodeBufferToMesh(decoderBuffer, dracoGeometry);\n } else if (geometryType === draco.POINT_CLOUD) {\n dracoGeometry = new draco.PointCloud();\n decodingStatus = decoder.DecodeBufferToPointCloud(decoderBuffer, dracoGeometry);\n } else {\n throw new Error(\"THREE.DRACOLoader: Unexpected geometry type.\");\n }\n if (!decodingStatus.ok() || dracoGeometry.ptr === 0) {\n throw new Error(\"THREE.DRACOLoader: Decoding failed: \" + decodingStatus.error_msg());\n }\n const geometry = { index: null, attributes: [] };\n for (const attributeName in attributeIDs) {\n const attributeType = self[attributeTypes[attributeName]];\n let attribute;\n let attributeID;\n if (taskConfig.useUniqueIDs) {\n attributeID = attributeIDs[attributeName];\n attribute = decoder.GetAttributeByUniqueId(dracoGeometry, attributeID);\n } else {\n attributeID = decoder.GetAttributeId(dracoGeometry, draco[attributeIDs[attributeName]]);\n if (attributeID === -1)\n continue;\n attribute = decoder.GetAttribute(dracoGeometry, attributeID);\n }\n geometry.attributes.push(decodeAttribute(draco, decoder, dracoGeometry, attributeName, attributeType, attribute));\n }\n if (geometryType === draco.TRIANGULAR_MESH) {\n geometry.index = decodeIndex(draco, decoder, dracoGeometry);\n }\n draco.destroy(dracoGeometry);\n return geometry;\n }\n function decodeIndex(draco, decoder, dracoGeometry) {\n const numFaces = dracoGeometry.num_faces();\n const numIndices = numFaces * 3;\n const byteLength = numIndices * 4;\n const ptr = draco._malloc(byteLength);\n decoder.GetTrianglesUInt32Array(dracoGeometry, byteLength, ptr);\n const index = new Uint32Array(draco.HEAPF32.buffer, ptr, numIndices).slice();\n draco._free(ptr);\n return { array: index, itemSize: 1 };\n }\n function decodeAttribute(draco, decoder, dracoGeometry, attributeName, attributeType, attribute) {\n const numComponents = attribute.num_components();\n const numPoints = dracoGeometry.num_points();\n const numValues = numPoints * numComponents;\n const byteLength = numValues * attributeType.BYTES_PER_ELEMENT;\n const dataType = getDracoDataType(draco, attributeType);\n const ptr = draco._malloc(byteLength);\n decoder.GetAttributeDataArrayForAllPoints(dracoGeometry, attribute, dataType, byteLength, ptr);\n const array = new attributeType(draco.HEAPF32.buffer, ptr, numValues).slice();\n draco._free(ptr);\n return {\n name: attributeName,\n array,\n itemSize: numComponents\n };\n }\n function getDracoDataType(draco, attributeType) {\n switch (attributeType) {\n case Float32Array:\n return draco.DT_FLOAT32;\n case Int8Array:\n return draco.DT_INT8;\n case Int16Array:\n return draco.DT_INT16;\n case Int32Array:\n return draco.DT_INT32;\n case Uint8Array:\n return draco.DT_UINT8;\n case Uint16Array:\n return draco.DT_UINT16;\n case Uint32Array:\n return draco.DT_UINT32;\n }\n }\n}\nexport {\n DRACOLoader\n};\n//# sourceMappingURL=DRACOLoader.js.map\n","import { InstancedBufferGeometry, Float32BufferAttribute, InstancedInterleavedBuffer, InterleavedBufferAttribute, WireframeGeometry, Box3, Sphere, Vector3 } from \"three\";\nconst _box = /* @__PURE__ */ new Box3();\nconst _vector = /* @__PURE__ */ new Vector3();\nclass LineSegmentsGeometry extends InstancedBufferGeometry {\n constructor() {\n super();\n this.isLineSegmentsGeometry = true;\n this.type = \"LineSegmentsGeometry\";\n const positions = [-1, 2, 0, 1, 2, 0, -1, 1, 0, 1, 1, 0, -1, 0, 0, 1, 0, 0, -1, -1, 0, 1, -1, 0];\n const uvs = [-1, 2, 1, 2, -1, 1, 1, 1, -1, -1, 1, -1, -1, -2, 1, -2];\n const index = [0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5];\n this.setIndex(index);\n this.setAttribute(\"position\", new Float32BufferAttribute(positions, 3));\n this.setAttribute(\"uv\", new Float32BufferAttribute(uvs, 2));\n }\n applyMatrix4(matrix) {\n const start = this.attributes.instanceStart;\n const end = this.attributes.instanceEnd;\n if (start !== void 0) {\n start.applyMatrix4(matrix);\n end.applyMatrix4(matrix);\n start.needsUpdate = true;\n }\n if (this.boundingBox !== null) {\n this.computeBoundingBox();\n }\n if (this.boundingSphere !== null) {\n this.computeBoundingSphere();\n }\n return this;\n }\n setPositions(array) {\n let lineSegments;\n if (array instanceof Float32Array) {\n lineSegments = array;\n } else if (Array.isArray(array)) {\n lineSegments = new Float32Array(array);\n }\n const instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1);\n this.setAttribute(\"instanceStart\", new InterleavedBufferAttribute(instanceBuffer, 3, 0));\n this.setAttribute(\"instanceEnd\", new InterleavedBufferAttribute(instanceBuffer, 3, 3));\n this.computeBoundingBox();\n this.computeBoundingSphere();\n return this;\n }\n setColors(array, itemSize = 3) {\n let colors;\n if (array instanceof Float32Array) {\n colors = array;\n } else if (Array.isArray(array)) {\n colors = new Float32Array(array);\n }\n const instanceColorBuffer = new InstancedInterleavedBuffer(colors, itemSize * 2, 1);\n this.setAttribute(\"instanceColorStart\", new InterleavedBufferAttribute(instanceColorBuffer, itemSize, 0));\n this.setAttribute(\"instanceColorEnd\", new InterleavedBufferAttribute(instanceColorBuffer, itemSize, itemSize));\n return this;\n }\n fromWireframeGeometry(geometry) {\n this.setPositions(geometry.attributes.position.array);\n return this;\n }\n fromEdgesGeometry(geometry) {\n this.setPositions(geometry.attributes.position.array);\n return this;\n }\n fromMesh(mesh) {\n this.fromWireframeGeometry(new WireframeGeometry(mesh.geometry));\n return this;\n }\n fromLineSegments(lineSegments) {\n const geometry = lineSegments.geometry;\n this.setPositions(geometry.attributes.position.array);\n return this;\n }\n computeBoundingBox() {\n if (this.boundingBox === null) {\n this.boundingBox = new Box3();\n }\n const start = this.attributes.instanceStart;\n const end = this.attributes.instanceEnd;\n if (start !== void 0 && end !== void 0) {\n this.boundingBox.setFromBufferAttribute(start);\n _box.setFromBufferAttribute(end);\n this.boundingBox.union(_box);\n }\n }\n computeBoundingSphere() {\n if (this.boundingSphere === null) {\n this.boundingSphere = new Sphere();\n }\n if (this.boundingBox === null) {\n this.computeBoundingBox();\n }\n const start = this.attributes.instanceStart;\n const end = this.attributes.instanceEnd;\n if (start !== void 0 && end !== void 0) {\n const center = this.boundingSphere.center;\n this.boundingBox.getCenter(center);\n let maxRadiusSq = 0;\n for (let i = 0, il = start.count; i < il; i++) {\n _vector.fromBufferAttribute(start, i);\n maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector));\n _vector.fromBufferAttribute(end, i);\n maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector));\n }\n this.boundingSphere.radius = Math.sqrt(maxRadiusSq);\n if (isNaN(this.boundingSphere.radius)) {\n console.error(\n \"THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.\",\n this\n );\n }\n }\n }\n toJSON() {\n }\n applyMatrix(matrix) {\n console.warn(\"THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4().\");\n return this.applyMatrix4(matrix);\n }\n}\nexport {\n LineSegmentsGeometry\n};\n//# sourceMappingURL=LineSegmentsGeometry.js.map\n","import { LineSegmentsGeometry } from \"./LineSegmentsGeometry.js\";\nclass LineGeometry extends LineSegmentsGeometry {\n constructor() {\n super();\n this.isLineGeometry = true;\n this.type = \"LineGeometry\";\n }\n setPositions(array) {\n const length = array.length - 3;\n const points = new Float32Array(2 * length);\n for (let i = 0; i < length; i += 3) {\n points[2 * i] = array[i];\n points[2 * i + 1] = array[i + 1];\n points[2 * i + 2] = array[i + 2];\n points[2 * i + 3] = array[i + 3];\n points[2 * i + 4] = array[i + 4];\n points[2 * i + 5] = array[i + 5];\n }\n super.setPositions(points);\n return this;\n }\n setColors(array, itemSize = 3) {\n const length = array.length - itemSize;\n const colors = new Float32Array(2 * length);\n if (itemSize === 3) {\n for (let i = 0; i < length; i += itemSize) {\n colors[2 * i] = array[i];\n colors[2 * i + 1] = array[i + 1];\n colors[2 * i + 2] = array[i + 2];\n colors[2 * i + 3] = array[i + 3];\n colors[2 * i + 4] = array[i + 4];\n colors[2 * i + 5] = array[i + 5];\n }\n } else {\n for (let i = 0; i < length; i += itemSize) {\n colors[2 * i] = array[i];\n colors[2 * i + 1] = array[i + 1];\n colors[2 * i + 2] = array[i + 2];\n colors[2 * i + 3] = array[i + 3];\n colors[2 * i + 4] = array[i + 4];\n colors[2 * i + 5] = array[i + 5];\n colors[2 * i + 6] = array[i + 6];\n colors[2 * i + 7] = array[i + 7];\n }\n }\n super.setColors(colors, itemSize);\n return this;\n }\n fromLine(line) {\n const geometry = line.geometry;\n this.setPositions(geometry.attributes.position.array);\n return this;\n }\n}\nexport {\n LineGeometry\n};\n//# sourceMappingURL=LineGeometry.js.map\n","import { ShaderMaterial, UniformsUtils, UniformsLib, Vector2 } from \"three\";\nimport { version } from \"../_polyfill/constants.js\";\nclass LineMaterial extends ShaderMaterial {\n constructor(parameters) {\n super({\n type: \"LineMaterial\",\n uniforms: UniformsUtils.clone(\n UniformsUtils.merge([\n UniformsLib.common,\n UniformsLib.fog,\n {\n worldUnits: { value: 1 },\n linewidth: { value: 1 },\n resolution: { value: new Vector2(1, 1) },\n dashOffset: { value: 0 },\n dashScale: { value: 1 },\n dashSize: { value: 1 },\n gapSize: { value: 1 }\n // todo FIX - maybe change to totalSize\n }\n ])\n ),\n vertexShader: (\n /* glsl */\n `\n\t\t\t\t#include <common>\n\t\t\t\t#include <fog_pars_vertex>\n\t\t\t\t#include <logdepthbuf_pars_vertex>\n\t\t\t\t#include <clipping_planes_pars_vertex>\n\n\t\t\t\tuniform float linewidth;\n\t\t\t\tuniform vec2 resolution;\n\n\t\t\t\tattribute vec3 instanceStart;\n\t\t\t\tattribute vec3 instanceEnd;\n\n\t\t\t\t#ifdef USE_COLOR\n\t\t\t\t\t#ifdef USE_LINE_COLOR_ALPHA\n\t\t\t\t\t\tvarying vec4 vLineColor;\n\t\t\t\t\t\tattribute vec4 instanceColorStart;\n\t\t\t\t\t\tattribute vec4 instanceColorEnd;\n\t\t\t\t\t#else\n\t\t\t\t\t\tvarying vec3 vLineColor;\n\t\t\t\t\t\tattribute vec3 instanceColorStart;\n\t\t\t\t\t\tattribute vec3 instanceColorEnd;\n\t\t\t\t\t#endif\n\t\t\t\t#endif\n\n\t\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\t\tvarying vec4 worldPos;\n\t\t\t\t\tvarying vec3 worldStart;\n\t\t\t\t\tvarying vec3 worldEnd;\n\n\t\t\t\t\t#ifdef USE_DASH\n\n\t\t\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t#else\n\n\t\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\t#endif\n\n\t\t\t\t#ifdef USE_DASH\n\n\t\t\t\t\tuniform float dashScale;\n\t\t\t\t\tattribute float instanceDistanceStart;\n\t\t\t\t\tattribute float instanceDistanceEnd;\n\t\t\t\t\tvarying float vLineDistance;\n\n\t\t\t\t#endif\n\n\t\t\t\tvoid trimSegment( const in vec4 start, inout vec4 end ) {\n\n\t\t\t\t\t// trim end segment so it terminates between the camera plane and the near plane\n\n\t\t\t\t\t// conservative estimate of the near plane\n\t\t\t\t\tfloat a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column\n\t\t\t\t\tfloat b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column\n\t\t\t\t\tfloat nearEstimate = - 0.5 * b / a;\n\n\t\t\t\t\tfloat alpha = ( nearEstimate - start.z ) / ( end.z - start.z );\n\n\t\t\t\t\tend.xyz = mix( start.xyz, end.xyz, alpha );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\t#ifdef USE_COLOR\n\n\t\t\t\t\t\tvLineColor = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#ifdef USE_DASH\n\n\t\t\t\t\t\tvLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;\n\t\t\t\t\t\tvUv = uv;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t\tfloat aspect = resolution.x / resolution.y;\n\n\t\t\t\t\t// camera space\n\t\t\t\t\tvec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );\n\t\t\t\t\tvec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );\n\n\t\t\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\t\t\tworldStart = start.xyz;\n\t\t\t\t\t\tworldEnd = end.xyz;\n\n\t\t\t\t\t#else\n\n\t\t\t\t\t\tvUv = uv;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t\t// special case for perspective projection, and segments that terminate either in, or behind, the camera plane\n\t\t\t\t\t// clearly the gpu firmware has a way of addressing this issue when projecting into ndc space\n\t\t\t\t\t// but we need to perform ndc-space calculations in the shader, so we must address this issue directly\n\t\t\t\t\t// perhaps there is a more elegant solution -- WestLangley\n\n\t\t\t\t\tbool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column\n\n\t\t\t\t\tif ( perspective ) {\n\n\t\t\t\t\t\tif ( start.z < 0.0 && end.z >= 0.0 ) {\n\n\t\t\t\t\t\t\ttrimSegment( start, end );\n\n\t\t\t\t\t\t} else if ( end.z < 0.0 && start.z >= 0.0 ) {\n\n\t\t\t\t\t\t\ttrimSegment( end, start );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// clip space\n\t\t\t\t\tvec4 clipStart = projectionMatrix * start;\n\t\t\t\t\tvec4 clipEnd = projectionMatrix * end;\n\n\t\t\t\t\t// ndc space\n\t\t\t\t\tvec3 ndcStart = clipStart.xyz / clipStart.w;\n\t\t\t\t\tvec3 ndcEnd = clipEnd.xyz / clipEnd.w;\n\n\t\t\t\t\t// direction\n\t\t\t\t\tvec2 dir = ndcEnd.xy - ndcStart.xy;\n\n\t\t\t\t\t// account for clip-space aspect ratio\n\t\t\t\t\tdir.x *= aspect;\n\t\t\t\t\tdir = normalize( dir );\n\n\t\t\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\t\t\t// get the offset direction as perpendicular to the view vector\n\t\t\t\t\t\tvec3 worldDir = normalize( end.xyz - start.xyz );\n\t\t\t\t\t\tvec3 offset;\n\t\t\t\t\t\tif ( position.y < 0.5 ) {\n\n\t\t\t\t\t\t\toffset = normalize( cross( start.xyz, worldDir ) );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\toffset = normalize( cross( end.xyz, worldDir ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// sign flip\n\t\t\t\t\t\tif ( position.x < 0.0 ) offset *= - 1.0;\n\n\t\t\t\t\t\tfloat forwardOffset = dot( worldDir, vec3( 0.0, 0.0, 1.0 ) );\n\n\t\t\t\t\t\t// don't extend the line if we're rendering dashes because we\n\t\t\t\t\t\t// won't be rendering the endcaps\n\t\t\t\t\t\t#ifndef USE_DASH\n\n\t\t\t\t\t\t\t// extend the line bounds to encompass endcaps\n\t\t\t\t\t\t\tstart.xyz += - worldDir * linewidth * 0.5;\n\t\t\t\t\t\t\tend.xyz += worldDir * linewidth * 0.5;\n\n\t\t\t\t\t\t\t// shift the position of the quad so it hugs the forward edge of the line\n\t\t\t\t\t\t\toffset.xy -= dir * forwardOffset;\n\t\t\t\t\t\t\toffset.z += 0.5;\n\n\t\t\t\t\t\t#endif\n\n\t\t\t\t\t\t// endcaps\n\t\t\t\t\t\tif ( position.y > 1.0 || position.y < 0.0 ) {\n\n\t\t\t\t\t\t\toffset.xy += dir * 2.0 * forwardOffset;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// adjust for linewidth\n\t\t\t\t\t\toffset *= linewidth * 0.5;\n\n\t\t\t\t\t\t// set the world position\n\t\t\t\t\t\tworldPos = ( position.y < 0.5 ) ? start : end;\n\t\t\t\t\t\tworldPos.xyz += offset;\n\n\t\t\t\t\t\t// project the worldpos\n\t\t\t\t\t\tvec4 clip = projectionMatrix * worldPos;\n\n\t\t\t\t\t\t// shift the depth of the projected points so the line\n\t\t\t\t\t\t// segments overlap neatly\n\t\t\t\t\t\tvec3 clipPose = ( position.y < 0.5 ) ? ndcStart : ndcEnd;\n\t\t\t\t\t\tclip.z = clipPose.z * clip.w;\n\n\t\t\t\t\t#else\n\n\t\t\t\t\t\tvec2 offset = vec2( dir.y, - dir.x );\n\t\t\t\t\t\t// undo aspect ratio adjustment\n\t\t\t\t\t\tdir.x /= aspect;\n\t\t\t\t\t\toffset.x /= aspect;\n\n\t\t\t\t\t\t// sign flip\n\t\t\t\t\t\tif ( position.x < 0.0 ) offset *= - 1.0;\n\n\t\t\t\t\t\t// endcaps\n\t\t\t\t\t\tif ( position.y < 0.0 ) {\n\n\t\t\t\t\t\t\toffset += - dir;\n\n\t\t\t\t\t\t} else if ( position.y > 1.0 ) {\n\n\t\t\t\t\t\t\toffset += dir;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// adjust for linewidth\n\t\t\t\t\t\toffset *= linewidth;\n\n\t\t\t\t\t\t// adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...\n\t\t\t\t\t\toffset /= resolution.y;\n\n\t\t\t\t\t\t// select end\n\t\t\t\t\t\tvec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd;\n\n\t\t\t\t\t\t// back to clip space\n\t\t\t\t\t\toffset *= clip.w;\n\n\t\t\t\t\t\tclip.xy += offset;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t\tgl_Position = clip;\n\n\t\t\t\t\tvec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation\n\n\t\t\t\t\t#include <logdepthbuf_vertex>\n\t\t\t\t\t#include <clipping_planes_vertex>\n\t\t\t\t\t#include <fog_vertex>\n\n\t\t\t\t}\n\t\t\t`\n ),\n fragmentShader: (\n /* glsl */\n `\n\t\t\t\tuniform vec3 diffuse;\n\t\t\t\tuniform float opacity;\n\t\t\t\tuniform float linewidth;\n\n\t\t\t\t#ifdef USE_DASH\n\n\t\t\t\t\tuniform float dashOffset;\n\t\t\t\t\tuniform float dashSize;\n\t\t\t\t\tuniform float gapSize;\n\n\t\t\t\t#endif\n\n\t\t\t\tvarying float vLineDistance;\n\n\t\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\t\tvarying vec4 worldPos;\n\t\t\t\t\tvarying vec3 worldStart;\n\t\t\t\t\tvarying vec3 worldEnd;\n\n\t\t\t\t\t#ifdef USE_DASH\n\n\t\t\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t#else\n\n\t\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\t#endif\n\n\t\t\t\t#include <common>\n\t\t\t\t#include <fog_pars_fragment>\n\t\t\t\t#include <logdepthbuf_pars_fragment>\n\t\t\t\t#include <clipping_planes_pars_fragment>\n\n\t\t\t\t#ifdef USE_COLOR\n\t\t\t\t\t#ifdef USE_LINE_COLOR_ALPHA\n\t\t\t\t\t\tvarying vec4 vLineColor;\n\t\t\t\t\t#else\n\t\t\t\t\t\tvarying vec3 vLineColor;\n\t\t\t\t\t#endif\n\t\t\t\t#endif\n\n\t\t\t\tvec2 closestLineToLine(vec3 p1, vec3 p2, vec3 p3, vec3 p4) {\n\n\t\t\t\t\tfloat mua;\n\t\t\t\t\tfloat mub;\n\n\t\t\t\t\tvec3 p13 = p1 - p3;\n\t\t\t\t\tvec3 p43 = p4 - p3;\n\n\t\t\t\t\tvec3 p21 = p2 - p1;\n\n\t\t\t\t\tfloat d1343 = dot( p13, p43 );\n\t\t\t\t\tfloat d4321 = dot( p43, p21 );\n\t\t\t\t\tfloat d1321 = dot( p13, p21 );\n\t\t\t\t\tfloat d4343 = dot( p43, p43 );\n\t\t\t\t\tfloat d2121 = dot( p21, p21 );\n\n\t\t\t\t\tfloat denom = d2121 * d4343 - d4321 * d4321;\n\n\t\t\t\t\tfloat numer = d1343 * d4321 - d1321 * d4343;\n\n\t\t\t\t\tmua = numer / denom;\n\t\t\t\t\tmua = clamp( mua, 0.0, 1.0 );\n\t\t\t\t\tmub = ( d1343 + d4321 * ( mua ) ) / d4343;\n\t\t\t\t\tmub = clamp( mub, 0.0, 1.0 );\n\n\t\t\t\t\treturn vec2( mua, mub );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\t#include <clipping_planes_fragment>\n\n\t\t\t\t\t#ifdef USE_DASH\n\n\t\t\t\t\t\tif ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps\n\n\t\t\t\t\t\tif ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX\n\n\t\t\t\t\t#endif\n\n\t\t\t\t\tfloat alpha = opacity;\n\n\t\t\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\t\t\t// Find the closest points on the view ray and the line segment\n\t\t\t\t\t\tvec3 rayEnd = normalize( worldPos.xyz ) * 1e5;\n\t\t\t\t\t\tvec3 lineDir = worldEnd - worldStart;\n\t\t\t\t\t\tvec2 params = closestLineToLine( worldStart, worldEnd, vec3( 0.0, 0.0, 0.0 ), rayEnd );\n\n\t\t\t\t\t\tvec3 p1 = worldStart + lineDir * params.x;\n\t\t\t\t\t\tvec3 p2 = rayEnd * params.y;\n\t\t\t\t\t\tvec3 delta = p1 - p2;\n\t\t\t\t\t\tfloat len = length( delta );\n\t\t\t\t\t\tfloat norm = len / linewidth;\n\n\t\t\t\t\t\t#ifndef USE_DASH\n\n\t\t\t\t\t\t\t#ifdef USE_ALPHA_TO_COVERAGE\n\n\t\t\t\t\t\t\t\tfloat dnorm = fwidth( norm );\n\t\t\t\t\t\t\t\talpha = 1.0 - smoothstep( 0.5 - dnorm, 0.5 + dnorm, norm );\n\n\t\t\t\t\t\t\t#else\n\n\t\t\t\t\t\t\t\tif ( norm > 0.5 ) {\n\n\t\t\t\t\t\t\t\t\tdiscard;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t#endif\n\n\t\t\t\t\t\t#endif\n\n\t\t\t\t\t#else\n\n\t\t\t\t\t\t#ifdef USE_ALPHA_TO_COVERAGE\n\n\t\t\t\t\t\t\t// artifacts appear on some hardware if a derivative is taken within a conditional\n\t\t\t\t\t\t\tfloat a = vUv.x;\n\t\t\t\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\t\t\t\tfloat len2 = a * a + b * b;\n\t\t\t\t\t\t\tfloat dlen = fwidth( len2 );\n\n\t\t\t\t\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\t\t\t\t\talpha = 1.0 - smoothstep( 1.0 - dlen, 1.0 + dlen, len2 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t#else\n\n\t\t\t\t\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\t\t\t\t\tfloat a = vUv.x;\n\t\t\t\t\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\t\t\t\t\tfloat len2 = a * a + b * b;\n\n\t\t\t\t\t\t\t\tif ( len2 > 1.0 ) discard;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t#endif\n\n\t\t\t\t\t#endif\n\n\t\t\t\t\tvec4 diffuseColor = vec4( diffuse, alpha );\n\t\t\t\t\t#ifdef USE_COLOR\n\t\t\t\t\t\t#ifdef USE_LINE_COLOR_ALPHA\n\t\t\t\t\t\t\tdiffuseColor *= vLineColor;\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\tdiffuseColor.rgb *= vLineColor;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#include <logdepthbuf_fragment>\n\n\t\t\t\t\tgl_FragColor = diffuseColor;\n\n\t\t\t\t\t#include <tonemapping_fragment>\n\t\t\t\t\t#include <${version >= 154 ? \"colorspace_fragment\" : \"encodings_fragment\"}>\n\t\t\t\t\t#include <fog_fragment>\n\t\t\t\t\t#include <premultiplied_alpha_fragment>\n\n\t\t\t\t}\n\t\t\t`\n ),\n clipping: true\n // required for clipping support\n });\n this.isLineMaterial = true;\n this.onBeforeCompile = function() {\n if (this.transparent) {\n this.defines.USE_LINE_COLOR_ALPHA = \"1\";\n } else {\n delete this.defines.USE_LINE_COLOR_ALPHA;\n }\n };\n Object.defineProperties(this, {\n color: {\n enumerable: true,\n get: function() {\n return this.uniforms.diffuse.value;\n },\n set: function(value) {\n this.uniforms.diffuse.value = value;\n }\n },\n worldUnits: {\n enumerable: true,\n get: function() {\n return \"WORLD_UNITS\" in this.defines;\n },\n set: function(value) {\n if (value === true) {\n this.defines.WORLD_UNITS = \"\";\n } else {\n delete this.defines.WORLD_UNITS;\n }\n }\n },\n linewidth: {\n enumerable: true,\n get: function() {\n return this.uniforms.linewidth.value;\n },\n set: function(value) {\n this.uniforms.linewidth.value = value;\n }\n },\n dashed: {\n enumerable: true,\n get: function() {\n return Boolean(\"USE_DASH\" in this.defines);\n },\n set(value) {\n if (Boolean(value) !== Boolean(\"USE_DASH\" in this.defines)) {\n this.needsUpdate = true;\n }\n if (value === true) {\n this.defines.USE_DASH = \"\";\n } else {\n delete this.defines.USE_DASH;\n }\n }\n },\n dashScale: {\n enumerable: true,\n get: function() {\n return this.uniforms.dashScale.value;\n },\n set: function(value) {\n this.uniforms.dashScale.value = value;\n }\n },\n dashSize: {\n enumerable: true,\n get: function() {\n return this.uniforms.dashSize.value;\n },\n set: function(value) {\n this.uniforms.dashSize.value = value;\n }\n },\n dashOffset: {\n enumerable: true,\n get: function() {\n return this.uniforms.dashOffset.value;\n },\n set: function(value) {\n this.uniforms.dashOffset.value = value;\n }\n },\n gapSize: {\n enumerable: true,\n get: function() {\n return this.uniforms.gapSize.value;\n },\n set: function(value) {\n this.uniforms.gapSize.value = value;\n }\n },\n opacity: {\n enumerable: true,\n get: function() {\n return this.uniforms.opacity.value;\n },\n set: function(value) {\n this.uniforms.opacity.value = value;\n }\n },\n resolution: {\n enumerable: true,\n get: function() {\n return this.uniforms.resolution.value;\n },\n set: function(value) {\n this.uniforms.resolution.value.copy(value);\n }\n },\n alphaToCoverage: {\n enumerable: true,\n get: function() {\n return Boolean(\"USE_ALPHA_TO_COVERAGE\" in this.defines);\n },\n set: function(value) {\n if (Boolean(value) !== Boolean(\"USE_ALPHA_TO_COVERAGE\" in this.defines)) {\n this.needsUpdate = true;\n }\n if (value === true) {\n this.defines.USE_ALPHA_TO_COVERAGE = \"\";\n this.extensions.derivatives = true;\n } else {\n delete this.defines.USE_ALPHA_TO_COVERAGE;\n this.extensions.derivatives = false;\n }\n }\n }\n });\n this.setValues(parameters);\n }\n}\nexport {\n LineMaterial\n};\n//# sourceMappingURL=LineMaterial.js.map\n","import { Mesh, InstancedInterleavedBuffer, InterleavedBufferAttribute, Vector4, Vector3, Box3, Sphere, MathUtils, Matrix4, Line3 } from \"three\";\nimport { LineSegmentsGeometry } from \"./LineSegmentsGeometry.js\";\nimport { LineMaterial } from \"./LineMaterial.js\";\nimport { UV1 } from \"../_polyfill/uv1.js\";\nconst _viewport = /* @__PURE__ */ new Vector4();\nconst _start = /* @__PURE__ */ new Vector3();\nconst _end = /* @__PURE__ */ new Vector3();\nconst _start4 = /* @__PURE__ */ new Vector4();\nconst _end4 = /* @__PURE__ */ new Vector4();\nconst _ssOrigin = /* @__PURE__ */ new Vector4();\nconst _ssOrigin3 = /* @__PURE__ */ new Vector3();\nconst _mvMatrix = /* @__PURE__ */ new Matrix4();\nconst _line = /* @__PURE__ */ new Line3();\nconst _closestPoint = /* @__PURE__ */ new Vector3();\nconst _box = /* @__PURE__ */ new Box3();\nconst _sphere = /* @__PURE__ */ new Sphere();\nconst _clipToWorldVector = /* @__PURE__ */ new Vector4();\nlet _ray, _lineWidth;\nfunction getWorldSpaceHalfWidth(camera, distance, resolution) {\n _clipToWorldVector.set(0, 0, -distance, 1).applyMatrix4(camera.projectionMatrix);\n _clipToWorldVector.multiplyScalar(1 / _clipToWorldVector.w);\n _clipToWorldVector.x = _lineWidth / resolution.width;\n _clipToWorldVector.y = _lineWidth / resolution.height;\n _clipToWorldVector.applyMatrix4(camera.projectionMatrixInverse);\n _clipToWorldVector.multiplyScalar(1 / _clipToWorldVector.w);\n return Math.abs(Math.max(_clipToWorldVector.x, _clipToWorldVector.y));\n}\nfunction raycastWorldUnits(lineSegments, intersects) {\n const matrixWorld = lineSegments.matrixWorld;\n const geometry = lineSegments.geometry;\n const instanceStart = geometry.attributes.instanceStart;\n const instanceEnd = geometry.attributes.instanceEnd;\n const segmentCount = Math.min(geometry.instanceCount, instanceStart.count);\n for (let i = 0, l = segmentCount; i < l; i++) {\n _line.start.fromBufferAttribute(instanceStart, i);\n _line.end.fromBufferAttribute(instanceEnd, i);\n _line.applyMatrix4(matrixWorld);\n const pointOnLine = new Vector3();\n const point = new Vector3();\n _ray.distanceSqToSegment(_line.start, _line.end, point, pointOnLine);\n const isInside = point.distanceTo(pointOnLine) < _lineWidth * 0.5;\n if (isInside) {\n intersects.push({\n point,\n pointOnLine,\n distance: _ray.origin.distanceTo(point),\n object: lineSegments,\n face: null,\n faceIndex: i,\n uv: null,\n [UV1]: null\n });\n }\n }\n}\nfunction raycastScreenSpace(lineSegments, camera, intersects) {\n const projectionMatrix = camera.projectionMatrix;\n const material = lineSegments.material;\n const resolution = material.resolution;\n const matrixWorld = lineSegments.matrixWorld;\n const geometry = lineSegments.geometry;\n const instanceStart = geometry.attributes.instanceStart;\n const instanceEnd = geometry.attributes.instanceEnd;\n const segmentCount = Math.min(geometry.instanceCount, instanceStart.count);\n const near = -camera.near;\n _ray.at(1, _ssOrigin);\n _ssOrigin.w = 1;\n _ssOrigin.applyMatrix4(camera.matrixWorldInverse);\n _ssOrigin.applyMatrix4(projectionMatrix);\n _ssOrigin.multiplyScalar(1 / _ssOrigin.w);\n _ssOrigin.x *= resolution.x / 2;\n _ssOrigin.y *= resolution.y / 2;\n _ssOrigin.z = 0;\n _ssOrigin3.copy(_ssOrigin);\n _mvMatrix.multiplyMatrices(camera.matrixWorldInverse, matrixWorld);\n for (let i = 0, l = segmentCount; i < l; i++) {\n _start4.fromBufferAttribute(instanceStart, i);\n _end4.fromBufferAttribute(instanceEnd, i);\n _start4.w = 1;\n _end4.w = 1;\n _start4.applyMatrix4(_mvMatrix);\n _end4.applyMatrix4(_mvMatrix);\n const isBehindCameraNear = _start4.z > near && _end4.z > near;\n if (isBehindCameraNear) {\n continue;\n }\n if (_start4.z > near) {\n const deltaDist = _start4.z - _end4.z;\n const t = (_start4.z - near) / deltaDist;\n _start4.lerp(_end4, t);\n } else if (_end4.z > near) {\n const deltaDist = _end4.z - _start4.z;\n const t = (_end4.z - near) / deltaDist;\n _end4.lerp(_start4, t);\n }\n _start4.applyMatrix4(projectionMatrix);\n _end4.applyMatrix4(projectionMatrix);\n _start4.multiplyScalar(1 / _start4.w);\n _end4.multiplyScalar(1 / _end4.w);\n _start4.x *= resolution.x / 2;\n _start4.y *= resolution.y / 2;\n _end4.x *= resolution.x / 2;\n _end4.y *= resolution.y / 2;\n _line.start.copy(_start4);\n _line.start.z = 0;\n _line.end.copy(_end4);\n _line.end.z = 0;\n const param = _line.closestPointToPointParameter(_ssOrigin3, true);\n _line.at(param, _closestPoint);\n const zPos = MathUtils.lerp(_start4.z, _end4.z, param);\n const isInClipSpace = zPos >= -1 && zPos <= 1;\n const isInside = _ssOrigin3.distanceTo(_closestPoint) < _lineWidth * 0.5;\n if (isInClipSpace && isInside) {\n _line.start.fromBufferAttribute(instanceStart, i);\n _line.end.fromBufferAttribute(instanceEnd, i);\n _line.start.applyMatrix4(matrixWorld);\n _line.end.applyMatrix4(matrixWorld);\n const pointOnLine = new Vector3();\n const point = new Vector3();\n _ray.distanceSqToSegment(_line.start, _line.end, point, pointOnLine);\n intersects.push({\n point,\n pointOnLine,\n distance: _ray.origin.distanceTo(point),\n object: lineSegments,\n face: null,\n faceIndex: i,\n uv: null,\n [UV1]: null\n });\n }\n }\n}\nclass LineSegments2 extends Mesh {\n constructor(geometry = new LineSegmentsGeometry(), material = new LineMaterial({ color: Math.random() * 16777215 })) {\n super(geometry, material);\n this.isLineSegments2 = true;\n this.type = \"LineSegments2\";\n }\n // for backwards-compatibility, but could be a method of LineSegmentsGeometry...\n computeLineDistances() {\n const geometry = this.geometry;\n const instanceStart = geometry.attributes.instanceStart;\n const instanceEnd = geometry.attributes.instanceEnd;\n const lineDistances = new Float32Array(2 * instanceStart.count);\n for (let i = 0, j = 0, l = instanceStart.count; i < l; i++, j += 2) {\n _start.fromBufferAttribute(instanceStart, i);\n _end.fromBufferAttribute(instanceEnd, i);\n lineDistances[j] = j === 0 ? 0 : lineDistances[j - 1];\n lineDistances[j + 1] = lineDistances[j] + _start.distanceTo(_end);\n }\n const instanceDistanceBuffer = new InstancedInterleavedBuffer(lineDistances, 2, 1);\n geometry.setAttribute(\"instanceDistanceStart\", new InterleavedBufferAttribute(instanceDistanceBuffer, 1, 0));\n geometry.setAttribute(\"instanceDistanceEnd\", new InterleavedBufferAttribute(instanceDistanceBuffer, 1, 1));\n return this;\n }\n raycast(raycaster, intersects) {\n const worldUnits = this.material.worldUnits;\n const camera = raycaster.camera;\n if (camera === null && !worldUnits) {\n console.error(\n 'LineSegments2: \"Raycaster.camera\" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false.'\n );\n }\n const threshold = raycaster.params.Line2 !== void 0 ? raycaster.params.Line2.threshold || 0 : 0;\n _ray = raycaster.ray;\n const matrixWorld = this.matrixWorld;\n const geometry = this.geometry;\n const material = this.material;\n _lineWidth = material.linewidth + threshold;\n if (geometry.boundingSphere === null) {\n geometry.computeBoundingSphere();\n }\n _sphere.copy(geometry.boundingSphere).applyMatrix4(matrixWorld);\n let sphereMargin;\n if (worldUnits) {\n sphereMargin = _lineWidth * 0.5;\n } else {\n const distanceToSphere = Math.max(camera.near, _sphere.distanceToPoint(_ray.origin));\n sphereMargin = getWorldSpaceHalfWidth(camera, distanceToSphere, material.resolution);\n }\n _sphere.radius += sphereMargin;\n if (_ray.intersectsSphere(_sphere) === false) {\n return;\n }\n if (geometry.boundingBox === null) {\n geometry.computeBoundingBox();\n }\n _box.copy(geometry.boundingBox).applyMatrix4(matrixWorld);\n let boxMargin;\n if (worldUnits) {\n boxMargin = _lineWidth * 0.5;\n } else {\n const distanceToBox = Math.max(camera.near, _box.distanceToPoint(_ray.origin));\n boxMargin = getWorldSpaceHalfWidth(camera, distanceToBox, material.resolution);\n }\n _box.expandByScalar(boxMargin);\n if (_ray.intersectsBox(_box) === false) {\n return;\n }\n if (worldUnits) {\n raycastWorldUnits(this, intersects);\n } else {\n raycastScreenSpace(this, camera, intersects);\n }\n }\n onBeforeRender(renderer) {\n const uniforms = this.material.uniforms;\n if (uniforms && uniforms.resolution) {\n renderer.getViewport(_viewport);\n this.material.uniforms.resolution.value.set(_viewport.z, _viewport.w);\n }\n }\n}\nexport {\n LineSegments2\n};\n//# sourceMappingURL=LineSegments2.js.map\n","import { LineSegments2 } from \"./LineSegments2.js\";\nimport { LineGeometry } from \"./LineGeometry.js\";\nimport { LineMaterial } from \"./LineMaterial.js\";\nclass Line2 extends LineSegments2 {\n constructor(geometry = new LineGeometry(), material = new LineMaterial({ color: Math.random() * 16777215 })) {\n super(geometry, material);\n this.isLine2 = true;\n this.type = \"Line2\";\n }\n}\nexport {\n Line2\n};\n//# sourceMappingURL=Line2.js.map\n","let generated;\nconst MeshoptDecoder = () => {\n if (generated)\n return generated;\n const wasm_base = \"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\";\n const wasm_simd = \"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\";\n const detector = new Uint8Array([\n 0,\n 97,\n 115,\n 109,\n 1,\n 0,\n 0,\n 0,\n 1,\n 4,\n 1,\n 96,\n 0,\n 0,\n 3,\n 3,\n 2,\n 0,\n 0,\n 5,\n 3,\n 1,\n 0,\n 1,\n 12,\n 1,\n 0,\n 10,\n 22,\n 2,\n 12,\n 0,\n 65,\n 0,\n 65,\n 0,\n 65,\n 0,\n 252,\n 10,\n 0,\n 0,\n 11,\n 7,\n 0,\n 65,\n 0,\n 253,\n 15,\n 26,\n 11\n ]);\n const wasmpack = new Uint8Array([\n 32,\n 0,\n 65,\n 253,\n 3,\n 1,\n 2,\n 34,\n 4,\n 106,\n 6,\n 5,\n 11,\n 8,\n 7,\n 20,\n 13,\n 33,\n 12,\n 16,\n 128,\n 9,\n 116,\n 64,\n 19,\n 113,\n 127,\n 15,\n 10,\n 21,\n 22,\n 14,\n 255,\n 66,\n 24,\n 54,\n 136,\n 107,\n 18,\n 23,\n 192,\n 26,\n 114,\n 118,\n 132,\n 17,\n 77,\n 101,\n 130,\n 144,\n 27,\n 87,\n 131,\n 44,\n 45,\n 74,\n 156,\n 154,\n 70,\n 167\n ]);\n if (typeof WebAssembly !== \"object\") {\n return {\n supported: false\n };\n }\n let wasm = wasm_base;\n if (WebAssembly.validate(detector)) {\n wasm = wasm_simd;\n }\n let instance;\n const promise = WebAssembly.instantiate(unpack(wasm), {}).then((result) => {\n instance = result.instance;\n instance.exports.__wasm_call_ctors();\n });\n function unpack(data) {\n const result = new Uint8Array(data.length);\n for (let i = 0; i < data.length; ++i) {\n const ch = data.charCodeAt(i);\n result[i] = ch > 96 ? ch - 71 : ch > 64 ? ch - 65 : ch > 47 ? ch + 4 : ch > 46 ? 63 : 62;\n }\n let write = 0;\n for (let i = 0; i < data.length; ++i) {\n result[write++] = result[i] < 60 ? wasmpack[result[i]] : (result[i] - 60) * 64 + result[++i];\n }\n return result.buffer.slice(0, write);\n }\n function decode(fun, target, count, size, source, filter) {\n const sbrk = instance.exports.sbrk;\n const count4 = count + 3 & ~3;\n const tp = sbrk(count4 * size);\n const sp = sbrk(source.length);\n const heap = new Uint8Array(instance.exports.memory.buffer);\n heap.set(source, sp);\n const res = fun(tp, count, size, sp, source.length);\n if (res === 0 && filter) {\n filter(tp, count4, size);\n }\n target.set(heap.subarray(tp, tp + count * size));\n sbrk(tp - sbrk(0));\n if (res !== 0) {\n throw new Error(`Malformed buffer data: ${res}`);\n }\n }\n const filters = {\n // legacy index-based enums for glTF\n 0: \"\",\n 1: \"meshopt_decodeFilterOct\",\n 2: \"meshopt_decodeFilterQuat\",\n 3: \"meshopt_decodeFilterExp\",\n // string-based enums for glTF\n NONE: \"\",\n OCTAHEDRAL: \"meshopt_decodeFilterOct\",\n QUATERNION: \"meshopt_decodeFilterQuat\",\n EXPONENTIAL: \"meshopt_decodeFilterExp\"\n };\n const decoders = {\n // legacy index-based enums for glTF\n 0: \"meshopt_decodeVertexBuffer\",\n 1: \"meshopt_decodeIndexBuffer\",\n 2: \"meshopt_decodeIndexSequence\",\n // string-based enums for glTF\n ATTRIBUTES: \"meshopt_decodeVertexBuffer\",\n TRIANGLES: \"meshopt_decodeIndexBuffer\",\n INDICES: \"meshopt_decodeIndexSequence\"\n };\n generated = {\n ready: promise,\n supported: true,\n decodeVertexBuffer(target, count, size, source, filter) {\n decode(\n instance.exports.meshopt_decodeVertexBuffer,\n target,\n count,\n size,\n source,\n instance.exports[filters[filter]]\n );\n },\n decodeIndexBuffer(target, count, size, source) {\n decode(instance.exports.meshopt_decodeIndexBuffer, target, count, size, source);\n },\n decodeIndexSequence(target, count, size, source) {\n decode(instance.exports.meshopt_decodeIndexSequence, target, count, size, source);\n },\n decodeGltfBuffer(target, count, size, source, mode, filter) {\n decode(\n instance.exports[decoders[mode]],\n target,\n count,\n size,\n source,\n instance.exports[filters[filter]]\n );\n }\n };\n return generated;\n};\nexport {\n MeshoptDecoder\n};\n//# sourceMappingURL=MeshoptDecoder.js.map\n","const isIterable = (obj) => Symbol.iterator in obj;\nconst hasIterableEntries = (value) => (\n // HACK: avoid checking entries type\n \"entries\" in value\n);\nconst compareEntries = (valueA, valueB) => {\n const mapA = valueA instanceof Map ? valueA : new Map(valueA.entries());\n const mapB = valueB instanceof Map ? valueB : new Map(valueB.entries());\n if (mapA.size !== mapB.size) {\n return false;\n }\n for (const [key, value] of mapA) {\n if (!mapB.has(key) || !Object.is(value, mapB.get(key))) {\n return false;\n }\n }\n return true;\n};\nconst compareIterables = (valueA, valueB) => {\n const iteratorA = valueA[Symbol.iterator]();\n const iteratorB = valueB[Symbol.iterator]();\n let nextA = iteratorA.next();\n let nextB = iteratorB.next();\n while (!nextA.done && !nextB.done) {\n if (!Object.is(nextA.value, nextB.value)) {\n return false;\n }\n nextA = iteratorA.next();\n nextB = iteratorB.next();\n }\n return !!nextA.done && !!nextB.done;\n};\nfunction shallow(valueA, valueB) {\n if (Object.is(valueA, valueB)) {\n return true;\n }\n if (typeof valueA !== \"object\" || valueA === null || typeof valueB !== \"object\" || valueB === null) {\n return false;\n }\n if (Object.getPrototypeOf(valueA) !== Object.getPrototypeOf(valueB)) {\n return false;\n }\n if (isIterable(valueA) && isIterable(valueB)) {\n if (hasIterableEntries(valueA) && hasIterableEntries(valueB)) {\n return compareEntries(valueA, valueB);\n }\n return compareIterables(valueA, valueB);\n }\n return compareEntries(\n { entries: () => Object.entries(valueA) },\n { entries: () => Object.entries(valueB) }\n );\n}\n\nexport { shallow };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { SelectionBox } from 'three-stdlib';\nimport { useThree } from '@react-three/fiber';\nimport { shallow } from 'zustand/shallow';\n\nconst context = /* @__PURE__ */React.createContext([]);\nfunction Select({\n box,\n multiple,\n children,\n onChange,\n onChangePointerUp,\n border = '1px solid #55aaff',\n backgroundColor = 'rgba(75, 160, 255, 0.1)',\n filter: customFilter = item => item,\n ...props\n}) {\n const [downed, down] = React.useState(false);\n const {\n setEvents,\n camera,\n raycaster,\n gl,\n controls,\n size,\n get\n } = useThree();\n const [hovered, hover] = React.useState(false);\n const [active, dispatch] = React.useReducer(\n // @ts-expect-error\n (state, {\n object,\n shift\n }) => {\n if (object === undefined) return [];else if (Array.isArray(object)) return object;else if (!shift) return state[0] === object ? [] : [object];\n // @ts-expect-error\n else if (state.includes(object)) return state.filter(o => o !== object);else return [object, ...state];\n }, []);\n React.useEffect(() => {\n if (downed) onChange == null || onChange(active);else onChangePointerUp == null || onChangePointerUp(active);\n }, [active, downed]);\n const onClick = React.useCallback(e => {\n e.stopPropagation();\n dispatch({\n object: customFilter([e.object])[0],\n shift: multiple && e.shiftKey\n });\n }, []);\n const onPointerMissed = React.useCallback(e => !hovered && dispatch({}), [hovered]);\n const ref = React.useRef(null);\n React.useEffect(() => {\n if (!box || !multiple) return;\n const selBox = new SelectionBox(camera, ref.current);\n const element = document.createElement('div');\n element.style.pointerEvents = 'none';\n element.style.border = border;\n element.style.backgroundColor = backgroundColor;\n element.style.position = 'fixed';\n const startPoint = new THREE.Vector2();\n const pointTopLeft = new THREE.Vector2();\n const pointBottomRight = new THREE.Vector2();\n const oldRaycasterEnabled = get().events.enabled;\n const oldControlsEnabled = controls == null ? void 0 : controls.enabled;\n let isDown = false;\n function prepareRay(event, vec) {\n const {\n offsetX,\n offsetY\n } = event;\n const {\n width,\n height\n } = size;\n vec.set(offsetX / width * 2 - 1, -(offsetY / height) * 2 + 1);\n }\n function onSelectStart(event) {\n var _gl$domElement$parent;\n if (controls) controls.enabled = false;\n setEvents({\n enabled: false\n });\n down(isDown = true);\n (_gl$domElement$parent = gl.domElement.parentElement) == null || _gl$domElement$parent.appendChild(element);\n element.style.left = `${event.clientX}px`;\n element.style.top = `${event.clientY}px`;\n element.style.width = '0px';\n element.style.height = '0px';\n startPoint.x = event.clientX;\n startPoint.y = event.clientY;\n }\n function onSelectMove(event) {\n pointBottomRight.x = Math.max(startPoint.x, event.clientX);\n pointBottomRight.y = Math.max(startPoint.y, event.clientY);\n pointTopLeft.x = Math.min(startPoint.x, event.clientX);\n pointTopLeft.y = Math.min(startPoint.y, event.clientY);\n element.style.left = `${pointTopLeft.x}px`;\n element.style.top = `${pointTopLeft.y}px`;\n element.style.width = `${pointBottomRight.x - pointTopLeft.x}px`;\n element.style.height = `${pointBottomRight.y - pointTopLeft.y}px`;\n }\n function onSelectOver() {\n if (isDown) {\n var _element$parentElemen;\n if (controls) controls.enabled = oldControlsEnabled;\n setEvents({\n enabled: oldRaycasterEnabled\n });\n down(isDown = false);\n (_element$parentElemen = element.parentElement) == null || _element$parentElemen.removeChild(element);\n }\n }\n function pointerDown(event) {\n if (event.shiftKey) {\n onSelectStart(event);\n prepareRay(event, selBox.startPoint);\n }\n }\n let previous = [];\n function pointerMove(event) {\n if (isDown) {\n onSelectMove(event);\n prepareRay(event, selBox.endPoint);\n const allSelected = selBox.select().sort(o => o.uuid).filter(o => o.isMesh);\n if (!shallow(allSelected, previous)) {\n previous = allSelected;\n dispatch({\n object: customFilter(allSelected)\n });\n }\n }\n }\n function pointerUp(event) {\n if (isDown) onSelectOver();\n }\n document.addEventListener('pointerdown', pointerDown, {\n passive: true\n });\n document.addEventListener('pointermove', pointerMove, {\n passive: true,\n capture: true\n });\n document.addEventListener('pointerup', pointerUp, {\n passive: true\n });\n return () => {\n document.removeEventListener('pointerdown', pointerDown);\n document.removeEventListener('pointermove', pointerMove, true);\n document.removeEventListener('pointerup', pointerUp);\n };\n }, [size.width, size.height, raycaster, camera, controls, gl]);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref,\n onClick: onClick,\n onPointerOver: () => hover(true),\n onPointerOut: () => hover(false),\n onPointerMissed: onPointerMissed\n }, props), /*#__PURE__*/React.createElement(context.Provider, {\n value: active\n }, children));\n}\n\n// The return type is explicitly declared here because otherwise TypeScript will emit `THREE.Object3D<THREE.Event>[]`.\n// The meaning of the generic parameter for `Object3D` was changed in r156, so it should not be included so that it\n// works with all versions of @types/three.\nfunction useSelect() {\n return React.useContext(context);\n}\n\nexport { Select, useSelect };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { Quaternion } from 'three';\nimport { useFrame } from '@react-three/fiber';\n\n/**\n * Wraps children in a billboarded group. Sample usage:\n *\n * ```js\n * <Billboard>\n * <Text>hi</Text>\n * </Billboard>\n * ```\n */\nconst Billboard = /* @__PURE__ */React.forwardRef(function Billboard({\n children,\n follow = true,\n lockX = false,\n lockY = false,\n lockZ = false,\n ...props\n}, fref) {\n const inner = React.useRef(null);\n const localRef = React.useRef(null);\n const q = new Quaternion();\n useFrame(({\n camera\n }) => {\n if (!follow || !localRef.current) return;\n\n // save previous rotation in case we're locking an axis\n const prevRotation = inner.current.rotation.clone();\n\n // always face the camera\n localRef.current.updateMatrix();\n localRef.current.updateWorldMatrix(false, false);\n localRef.current.getWorldQuaternion(q);\n camera.getWorldQuaternion(inner.current.quaternion).premultiply(q.invert());\n\n // readjust any axis that is locked\n if (lockX) inner.current.rotation.x = prevRotation.x;\n if (lockY) inner.current.rotation.y = prevRotation.y;\n if (lockZ) inner.current.rotation.z = prevRotation.z;\n });\n React.useImperativeHandle(fref, () => localRef.current, []);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: localRef\n }, props), /*#__PURE__*/React.createElement(\"group\", {\n ref: inner\n }, children));\n});\n\nexport { Billboard };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useFrame } from '@react-three/fiber';\n\nconst ScreenSpace = /* @__PURE__ */React.forwardRef(({\n children,\n depth = -1,\n ...rest\n}, ref) => {\n const localRef = React.useRef(null);\n React.useImperativeHandle(ref, () => localRef.current, []);\n useFrame(({\n camera\n }) => {\n localRef.current.quaternion.copy(camera.quaternion);\n localRef.current.position.copy(camera.position);\n });\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: localRef\n }, rest), /*#__PURE__*/React.createElement(\"group\", {\n \"position-z\": -depth\n }, children));\n});\n\nexport { ScreenSpace };\n","import * as THREE from 'three';\n\nconst tV0 = /* @__PURE__ */new THREE.Vector3();\nconst tV1 = /* @__PURE__ */new THREE.Vector3();\nconst tV2 = /* @__PURE__ */new THREE.Vector3();\nconst getPoint2 = (point3, camera, size) => {\n const widthHalf = size.width / 2;\n const heightHalf = size.height / 2;\n camera.updateMatrixWorld(false);\n const vector = point3.project(camera);\n vector.x = vector.x * widthHalf + widthHalf;\n vector.y = -(vector.y * heightHalf) + heightHalf;\n return vector;\n};\nconst getPoint3 = (point2, camera, size, zValue = 1) => {\n const vector = tV0.set(point2.x / size.width * 2 - 1, -(point2.y / size.height) * 2 + 1, zValue);\n vector.unproject(camera);\n return vector;\n};\nconst calculateScaleFactor = (point3, radiusPx, camera, size) => {\n const point2 = getPoint2(tV2.copy(point3), camera, size);\n let scale = 0;\n for (let i = 0; i < 2; ++i) {\n const point2off = tV1.copy(point2).setComponent(i, point2.getComponent(i) + radiusPx);\n const point3off = getPoint3(point2off, camera, size, point2off.z);\n scale = Math.max(scale, point3.distanceTo(point3off));\n }\n return scale;\n};\n\nexport { calculateScaleFactor };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useFrame } from '@react-three/fiber';\nimport * as React from 'react';\nimport { forwardRef, useRef } from 'react';\nimport { Vector3 } from 'three';\nimport { calculateScaleFactor } from './calculateScaleFactor.js';\n\nconst worldPos = /* @__PURE__ */new Vector3();\n/**\n * Wraps children in an `Object3D` and attempts to scale from\n * world units to screen units * scale factor.\n *\n * For example, this will render a box of roughly 1x1 pixel size,\n * independently of how far the camera is.\n *\n * ```jsx\n * <ScreenSizer>\n * <Box />\n * </ScreenSizer>\n * ```\n */\nconst ScreenSizer = /* @__PURE__ */forwardRef(({\n scale = 1,\n ...props\n}, ref) => {\n const container = useRef(null);\n React.useImperativeHandle(ref, () => container.current, []);\n useFrame(state => {\n const obj = container.current;\n if (!obj) return;\n const sf = calculateScaleFactor(obj.getWorldPosition(worldPos), scale, state.camera, state.size);\n obj.scale.setScalar(sf * scale);\n });\n return /*#__PURE__*/React.createElement(\"object3D\", _extends({\n ref: container\n }, props));\n});\n\nexport { ScreenSizer };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { Vector3, Vector4, Vector2, Color } from 'three';\nimport { useThree } from '@react-three/fiber';\nimport { LineSegments2, Line2, LineMaterial, LineSegmentsGeometry, LineGeometry } from 'three-stdlib';\n\nconst Line = /* @__PURE__ */React.forwardRef(function Line({\n points,\n color = 0xffffff,\n vertexColors,\n linewidth,\n lineWidth,\n segments,\n dashed,\n ...rest\n}, ref) {\n var _vertexColors$, _ref;\n const size = useThree(state => state.size);\n const line2 = React.useMemo(() => segments ? new LineSegments2() : new Line2(), [segments]);\n const [lineMaterial] = React.useState(() => new LineMaterial());\n const itemSize = (vertexColors == null || (_vertexColors$ = vertexColors[0]) == null ? void 0 : _vertexColors$.length) === 4 ? 4 : 3;\n const lineGeom = React.useMemo(() => {\n const geom = segments ? new LineSegmentsGeometry() : new LineGeometry();\n const pValues = points.map(p => {\n const isArray = Array.isArray(p);\n return p instanceof Vector3 || p instanceof Vector4 ? [p.x, p.y, p.z] : p instanceof Vector2 ? [p.x, p.y, 0] : isArray && p.length === 3 ? [p[0], p[1], p[2]] : isArray && p.length === 2 ? [p[0], p[1], 0] : p;\n });\n geom.setPositions(pValues.flat());\n if (vertexColors) {\n // using vertexColors requires the color value to be white see #1813\n color = 0xffffff;\n const cValues = vertexColors.map(c => c instanceof Color ? c.toArray() : c);\n geom.setColors(cValues.flat(), itemSize);\n }\n return geom;\n }, [points, segments, vertexColors, itemSize]);\n React.useLayoutEffect(() => {\n line2.computeLineDistances();\n }, [points, line2]);\n React.useLayoutEffect(() => {\n if (dashed) {\n lineMaterial.defines.USE_DASH = '';\n } else {\n // Setting lineMaterial.defines.USE_DASH to undefined is apparently not sufficient.\n delete lineMaterial.defines.USE_DASH;\n }\n lineMaterial.needsUpdate = true;\n }, [dashed, lineMaterial]);\n React.useEffect(() => {\n return () => {\n lineGeom.dispose();\n lineMaterial.dispose();\n };\n }, [lineGeom]);\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n object: line2,\n ref: ref\n }, rest), /*#__PURE__*/React.createElement(\"primitive\", {\n object: lineGeom,\n attach: \"geometry\"\n }), /*#__PURE__*/React.createElement(\"primitive\", _extends({\n object: lineMaterial,\n attach: \"material\",\n color: color,\n vertexColors: Boolean(vertexColors),\n resolution: [size.width, size.height],\n linewidth: (_ref = linewidth !== null && linewidth !== void 0 ? linewidth : lineWidth) !== null && _ref !== void 0 ? _ref : 1,\n dashed: dashed,\n transparent: itemSize === 4\n }, rest)));\n});\n\nexport { Line };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { QuadraticBezierCurve3, Vector3 } from 'three';\nimport { Line } from './Line.js';\n\nconst v = /* @__PURE__ */new Vector3();\nconst QuadraticBezierLine = /* @__PURE__ */React.forwardRef(function QuadraticBezierLine({\n start = [0, 0, 0],\n end = [0, 0, 0],\n mid,\n segments = 20,\n ...rest\n}, forwardref) {\n const ref = React.useRef(null);\n React.useImperativeHandle(forwardref, () => ref.current);\n const [curve] = React.useState(() => new QuadraticBezierCurve3(undefined, undefined, undefined));\n const getPoints = React.useCallback((start, end, mid, segments = 20) => {\n if (start instanceof Vector3) curve.v0.copy(start);else curve.v0.set(...start);\n if (end instanceof Vector3) curve.v2.copy(end);else curve.v2.set(...end);\n if (mid instanceof Vector3) {\n curve.v1.copy(mid);\n } else if (Array.isArray(mid)) {\n curve.v1.set(...mid);\n } else {\n curve.v1.copy(curve.v0.clone().add(curve.v2.clone().sub(curve.v0)).add(v.set(0, curve.v0.y - curve.v2.y, 0)));\n }\n return curve.getPoints(segments);\n }, []);\n React.useLayoutEffect(() => {\n ref.current.setPoints = (start, end, mid) => {\n const points = getPoints(start, end, mid);\n if (ref.current.geometry) ref.current.geometry.setPositions(points.map(p => p.toArray()).flat());\n };\n }, []);\n const points = React.useMemo(() => getPoints(start, end, mid, segments), [start, end, mid, segments]);\n return /*#__PURE__*/React.createElement(Line, _extends({\n ref: ref,\n points: points\n }, rest));\n});\n\nexport { QuadraticBezierLine };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { Vector3, CubicBezierCurve3 } from 'three';\nimport { Line } from './Line.js';\n\nconst CubicBezierLine = /* @__PURE__ */React.forwardRef(function CubicBezierLine({\n start,\n end,\n midA,\n midB,\n segments = 20,\n ...rest\n}, ref) {\n const points = React.useMemo(() => {\n const startV = start instanceof Vector3 ? start : new Vector3(...start);\n const endV = end instanceof Vector3 ? end : new Vector3(...end);\n const midAV = midA instanceof Vector3 ? midA : new Vector3(...midA);\n const midBV = midB instanceof Vector3 ? midB : new Vector3(...midB);\n const interpolatedV = new CubicBezierCurve3(startV, midAV, midBV, endV).getPoints(segments);\n return interpolatedV;\n }, [start, end, midA, midB, segments]);\n return /*#__PURE__*/React.createElement(Line, _extends({\n ref: ref,\n points: points\n }, rest));\n});\n\nexport { CubicBezierLine };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { Vector3, CatmullRomCurve3, Color } from 'three';\nimport { Line } from './Line.js';\n\nconst CatmullRomLine = /* @__PURE__ */React.forwardRef(function CatmullRomLine({\n points,\n closed = false,\n curveType = 'centripetal',\n tension = 0.5,\n segments = 20,\n vertexColors,\n ...rest\n}, ref) {\n const curve = React.useMemo(() => {\n const mappedPoints = points.map(pt => pt instanceof Vector3 ? pt : new Vector3(...pt));\n return new CatmullRomCurve3(mappedPoints, closed, curveType, tension);\n }, [points, closed, curveType, tension]);\n const segmentedPoints = React.useMemo(() => curve.getPoints(segments), [curve, segments]);\n const interpolatedVertexColors = React.useMemo(() => {\n if (!vertexColors || vertexColors.length < 2) return undefined;\n if (vertexColors.length === segments + 1) return vertexColors;\n const mappedColors = vertexColors.map(color => color instanceof Color ? color : new Color(...color));\n if (closed) mappedColors.push(mappedColors[0].clone());\n const iColors = [mappedColors[0]];\n const divisions = segments / (mappedColors.length - 1);\n for (let i = 1; i < segments; i++) {\n const alpha = i % divisions / divisions;\n const colorIndex = Math.floor(i / divisions);\n iColors.push(mappedColors[colorIndex].clone().lerp(mappedColors[colorIndex + 1], alpha));\n }\n iColors.push(mappedColors[mappedColors.length - 1]);\n return iColors;\n }, [vertexColors, segments]);\n return /*#__PURE__*/React.createElement(Line, _extends({\n ref: ref,\n points: segmentedPoints,\n vertexColors: interpolatedVertexColors\n }, rest));\n});\n\nexport { CatmullRomLine };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { AudioListener, AudioLoader } from 'three';\nimport { useThree, useLoader } from '@react-three/fiber';\n\nconst PositionalAudio = /* @__PURE__ */React.forwardRef(({\n url,\n distance = 1,\n loop = true,\n autoplay,\n ...props\n}, ref) => {\n const sound = React.useRef(null);\n React.useImperativeHandle(ref, () => sound.current, []);\n const camera = useThree(({\n camera\n }) => camera);\n const [listener] = React.useState(() => new AudioListener());\n const buffer = useLoader(AudioLoader, url);\n React.useEffect(() => {\n const _sound = sound.current;\n if (_sound) {\n _sound.setBuffer(buffer);\n _sound.setRefDistance(distance);\n _sound.setLoop(loop);\n if (autoplay && !_sound.isPlaying) _sound.play();\n }\n }, [buffer, camera, distance, loop]);\n React.useEffect(() => {\n const _sound = sound.current;\n camera.add(listener);\n return () => {\n camera.remove(listener);\n if (_sound) {\n if (_sound.isPlaying) _sound.stop();\n if (_sound.source && _sound.source._connected) _sound.disconnect();\n }\n };\n }, []);\n return /*#__PURE__*/React.createElement(\"positionalAudio\", _extends({\n ref: sound,\n args: [listener]\n }, props));\n});\n\nexport { PositionalAudio };\n","/**\n * Main content for the worker that handles the loading and execution of\n * modules within it.\n */\nfunction workerBootstrap() {\n var modules = Object.create(null);\n\n // Handle messages for registering a module\n function registerModule(ref, callback) {\n var id = ref.id;\n var name = ref.name;\n var dependencies = ref.dependencies; if ( dependencies === void 0 ) dependencies = [];\n var init = ref.init; if ( init === void 0 ) init = function(){};\n var getTransferables = ref.getTransferables; if ( getTransferables === void 0 ) getTransferables = null;\n\n // Only register once\n if (modules[id]) { return }\n\n try {\n // If any dependencies are modules, ensure they're registered and grab their value\n dependencies = dependencies.map(function (dep) {\n if (dep && dep.isWorkerModule) {\n registerModule(dep, function (depResult) {\n if (depResult instanceof Error) { throw depResult }\n });\n dep = modules[dep.id].value;\n }\n return dep\n });\n\n // Rehydrate functions\n init = rehydrate((\"<\" + name + \">.init\"), init);\n if (getTransferables) {\n getTransferables = rehydrate((\"<\" + name + \">.getTransferables\"), getTransferables);\n }\n\n // Initialize the module and store its value\n var value = null;\n if (typeof init === 'function') {\n value = init.apply(void 0, dependencies);\n } else {\n console.error('worker module init function failed to rehydrate');\n }\n modules[id] = {\n id: id,\n value: value,\n getTransferables: getTransferables\n };\n callback(value);\n } catch(err) {\n if (!(err && err.noLog)) {\n console.error(err);\n }\n callback(err);\n }\n }\n\n // Handle messages for calling a registered module's result function\n function callModule(ref, callback) {\n var ref$1;\n\n var id = ref.id;\n var args = ref.args;\n if (!modules[id] || typeof modules[id].value !== 'function') {\n callback(new Error((\"Worker module \" + id + \": not found or its 'init' did not return a function\")));\n }\n try {\n var result = (ref$1 = modules[id]).value.apply(ref$1, args);\n if (result && typeof result.then === 'function') {\n result.then(handleResult, function (rej) { return callback(rej instanceof Error ? rej : new Error('' + rej)); });\n } else {\n handleResult(result);\n }\n } catch(err) {\n callback(err);\n }\n function handleResult(result) {\n try {\n var tx = modules[id].getTransferables && modules[id].getTransferables(result);\n if (!tx || !Array.isArray(tx) || !tx.length) {\n tx = undefined; //postMessage is very picky about not passing null or empty transferables\n }\n callback(result, tx);\n } catch(err) {\n console.error(err);\n callback(err);\n }\n }\n }\n\n function rehydrate(name, str) {\n var result = void 0;\n self.troikaDefine = function (r) { return result = r; };\n var url = URL.createObjectURL(\n new Blob(\n [(\"/** \" + (name.replace(/\\*/g, '')) + \" **/\\n\\ntroikaDefine(\\n\" + str + \"\\n)\")],\n {type: 'application/javascript'}\n )\n );\n try {\n importScripts(url);\n } catch(err) {\n console.error(err);\n }\n URL.revokeObjectURL(url);\n delete self.troikaDefine;\n return result\n }\n\n // Handler for all messages within the worker\n self.addEventListener('message', function (e) {\n var ref = e.data;\n var messageId = ref.messageId;\n var action = ref.action;\n var data = ref.data;\n try {\n // Module registration\n if (action === 'registerModule') {\n registerModule(data, function (result) {\n if (result instanceof Error) {\n postMessage({\n messageId: messageId,\n success: false,\n error: result.message\n });\n } else {\n postMessage({\n messageId: messageId,\n success: true,\n result: {isCallable: typeof result === 'function'}\n });\n }\n });\n }\n // Invocation\n if (action === 'callModule') {\n callModule(data, function (result, transferables) {\n if (result instanceof Error) {\n postMessage({\n messageId: messageId,\n success: false,\n error: result.message\n });\n } else {\n postMessage({\n messageId: messageId,\n success: true,\n result: result\n }, transferables || undefined);\n }\n });\n }\n } catch(err) {\n postMessage({\n messageId: messageId,\n success: false,\n error: err.stack\n });\n }\n });\n}\n\n/**\n * Fallback for `defineWorkerModule` that behaves identically but runs in the main\n * thread, for when the execution environment doesn't support web workers or they\n * are disallowed due to e.g. CSP security restrictions.\n */\nfunction defineMainThreadModule(options) {\n var moduleFunc = function() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n return moduleFunc._getInitResult().then(function (initResult) {\n if (typeof initResult === 'function') {\n return initResult.apply(void 0, args)\n } else {\n throw new Error('Worker module function was called but `init` did not return a callable function')\n }\n })\n };\n moduleFunc._getInitResult = function() {\n // We can ignore getTransferables in main thread. TODO workerId?\n var dependencies = options.dependencies;\n var init = options.init;\n\n // Resolve dependencies\n dependencies = Array.isArray(dependencies) ? dependencies.map(function (dep) {\n if (dep) {\n // If it's a worker module, use its main thread impl\n dep = dep.onMainThread || dep;\n // If it's a main thread worker module, use its init return value\n if (dep._getInitResult) {\n dep = dep._getInitResult();\n }\n }\n return dep\n }) : [];\n\n // Invoke init with the resolved dependencies\n var initPromise = Promise.all(dependencies).then(function (deps) {\n return init.apply(null, deps)\n });\n\n // Cache the resolved promise for subsequent calls\n moduleFunc._getInitResult = function () { return initPromise; };\n\n return initPromise\n };\n return moduleFunc\n}\n\nvar supportsWorkers = function () {\n var supported = false;\n\n // Only attempt worker initialization in browsers; elsewhere it would just be\n // noise e.g. loading into a Node environment for SSR.\n if (typeof window !== 'undefined' && typeof window.document !== 'undefined') {\n try {\n // TODO additional checks for things like importScripts within the worker?\n // Would need to be an async check.\n var worker = new Worker(\n URL.createObjectURL(new Blob([''], { type: 'application/javascript' }))\n );\n worker.terminate();\n supported = true;\n } catch (err) {\n if (typeof process !== 'undefined' && process.env.NODE_ENV === 'test') ; else {\n console.log(\n (\"Troika createWorkerModule: web workers not allowed; falling back to main thread execution. Cause: [\" + (err.message) + \"]\")\n );\n }\n }\n }\n\n // Cached result\n supportsWorkers = function () { return supported; };\n return supported\n};\n\nvar _workerModuleId = 0;\nvar _messageId = 0;\nvar _allowInitAsString = false;\nvar workers = Object.create(null);\nvar registeredModules = Object.create(null); //workerId -> Set<unregisterFn>\nvar openRequests = Object.create(null);\n\n\n/**\n * Define a module of code that will be executed with a web worker. This provides a simple\n * interface for moving chunks of logic off the main thread, and managing their dependencies\n * among one another.\n *\n * @param {object} options\n * @param {function} options.init\n * @param {array} [options.dependencies]\n * @param {function} [options.getTransferables]\n * @param {string} [options.name]\n * @param {string} [options.workerId]\n * @return {function(...[*]): {then}}\n */\nfunction defineWorkerModule(options) {\n if ((!options || typeof options.init !== 'function') && !_allowInitAsString) {\n throw new Error('requires `options.init` function')\n }\n var dependencies = options.dependencies;\n var init = options.init;\n var getTransferables = options.getTransferables;\n var workerId = options.workerId;\n\n var onMainThread = defineMainThreadModule(options);\n\n if (workerId == null) {\n workerId = '#default';\n }\n var id = \"workerModule\" + (++_workerModuleId);\n var name = options.name || id;\n var registrationPromise = null;\n\n dependencies = dependencies && dependencies.map(function (dep) {\n // Wrap raw functions as worker modules with no dependencies\n if (typeof dep === 'function' && !dep.workerModuleData) {\n _allowInitAsString = true;\n dep = defineWorkerModule({\n workerId: workerId,\n name: (\"<\" + name + \"> function dependency: \" + (dep.name)),\n init: (\"function(){return (\\n\" + (stringifyFunction(dep)) + \"\\n)}\")\n });\n _allowInitAsString = false;\n }\n // Grab postable data for worker modules\n if (dep && dep.workerModuleData) {\n dep = dep.workerModuleData;\n }\n return dep\n });\n\n function moduleFunc() {\n var args = [], len = arguments.length;\n while ( len-- ) args[ len ] = arguments[ len ];\n\n if (!supportsWorkers()) {\n return onMainThread.apply(void 0, args)\n }\n\n // Register this module if needed\n if (!registrationPromise) {\n registrationPromise = callWorker(workerId,'registerModule', moduleFunc.workerModuleData);\n var unregister = function () {\n registrationPromise = null;\n registeredModules[workerId].delete(unregister);\n }\n ;(registeredModules[workerId] || (registeredModules[workerId] = new Set())).add(unregister);\n }\n\n // Invoke the module, returning a promise\n return registrationPromise.then(function (ref) {\n var isCallable = ref.isCallable;\n\n if (isCallable) {\n return callWorker(workerId,'callModule', {id: id, args: args})\n } else {\n throw new Error('Worker module function was called but `init` did not return a callable function')\n }\n })\n }\n moduleFunc.workerModuleData = {\n isWorkerModule: true,\n id: id,\n name: name,\n dependencies: dependencies,\n init: stringifyFunction(init),\n getTransferables: getTransferables && stringifyFunction(getTransferables)\n };\n\n moduleFunc.onMainThread = onMainThread;\n\n return moduleFunc\n}\n\n/**\n * Terminate an active Worker by a workerId that was passed to defineWorkerModule.\n * This only terminates the Worker itself; the worker module will remain available\n * and if you call it again its Worker will be respawned.\n * @param {string} workerId\n */\nfunction terminateWorker(workerId) {\n // Unregister all modules that were registered in that worker\n if (registeredModules[workerId]) {\n registeredModules[workerId].forEach(function (unregister) {\n unregister();\n });\n }\n // Terminate the Worker object\n if (workers[workerId]) {\n workers[workerId].terminate();\n delete workers[workerId];\n }\n}\n\n/**\n * Stringifies a function into a form that can be deserialized in the worker\n * @param fn\n */\nfunction stringifyFunction(fn) {\n var str = fn.toString();\n // If it was defined in object method/property format, it needs to be modified\n if (!/^function/.test(str) && /^\\w+\\s*\\(/.test(str)) {\n str = 'function ' + str;\n }\n return str\n}\n\n\nfunction getWorker(workerId) {\n var worker = workers[workerId];\n if (!worker) {\n // Bootstrap the worker's content\n var bootstrap = stringifyFunction(workerBootstrap);\n\n // Create the worker from the bootstrap function content\n worker = workers[workerId] = new Worker(\n URL.createObjectURL(\n new Blob(\n [(\"/** Worker Module Bootstrap: \" + (workerId.replace(/\\*/g, '')) + \" **/\\n\\n;(\" + bootstrap + \")()\")],\n {type: 'application/javascript'}\n )\n )\n );\n\n // Single handler for response messages from the worker\n worker.onmessage = function (e) {\n var response = e.data;\n var msgId = response.messageId;\n var callback = openRequests[msgId];\n if (!callback) {\n throw new Error('WorkerModule response with empty or unknown messageId')\n }\n delete openRequests[msgId];\n callback(response);\n };\n }\n return worker\n}\n\n// Issue a call to the worker with a callback to handle the response\nfunction callWorker(workerId, action, data) {\n return new Promise(function (resolve, reject) {\n var messageId = ++_messageId;\n openRequests[messageId] = function (response) {\n if (response.success) {\n resolve(response.result);\n } else {\n reject(new Error((\"Error in worker \" + action + \" call: \" + (response.error))));\n }\n };\n getWorker(workerId).postMessage({\n messageId: messageId,\n action: action,\n data: data\n });\n })\n}\n\nexport { defineWorkerModule, stringifyFunction, terminateWorker };\n","function SDFGenerator() {\nvar exports = (function (exports) {\n\n /**\n * Find the point on a quadratic bezier curve at t where t is in the range [0, 1]\n */\n function pointOnQuadraticBezier (x0, y0, x1, y1, x2, y2, t, pointOut) {\n var t2 = 1 - t;\n pointOut.x = t2 * t2 * x0 + 2 * t2 * t * x1 + t * t * x2;\n pointOut.y = t2 * t2 * y0 + 2 * t2 * t * y1 + t * t * y2;\n }\n\n /**\n * Find the point on a cubic bezier curve at t where t is in the range [0, 1]\n */\n function pointOnCubicBezier (x0, y0, x1, y1, x2, y2, x3, y3, t, pointOut) {\n var t2 = 1 - t;\n pointOut.x = t2 * t2 * t2 * x0 + 3 * t2 * t2 * t * x1 + 3 * t2 * t * t * x2 + t * t * t * x3;\n pointOut.y = t2 * t2 * t2 * y0 + 3 * t2 * t2 * t * y1 + 3 * t2 * t * t * y2 + t * t * t * y3;\n }\n\n /**\n * Parse a path string into its constituent line/curve commands, invoking a callback for each.\n * @param {string} pathString - An SVG-like path string to parse; should only contain commands: M/L/Q/C/Z\n * @param {function(\n * command: 'L'|'Q'|'C',\n * startX: number,\n * startY: number,\n * endX: number,\n * endY: number,\n * ctrl1X?: number,\n * ctrl1Y?: number,\n * ctrl2X?: number,\n * ctrl2Y?: number\n * )} commandCallback - A callback function that will be called once for each parsed path command, passing the\n * command identifier (only L/Q/C commands) and its numeric arguments.\n */\n function forEachPathCommand(pathString, commandCallback) {\n var segmentRE = /([MLQCZ])([^MLQCZ]*)/g;\n var match, firstX, firstY, prevX, prevY;\n while ((match = segmentRE.exec(pathString))) {\n var args = match[2]\n .replace(/^\\s*|\\s*$/g, '')\n .split(/[,\\s]+/)\n .map(function (v) { return parseFloat(v); });\n switch (match[1]) {\n case 'M':\n prevX = firstX = args[0];\n prevY = firstY = args[1];\n break\n case 'L':\n if (args[0] !== prevX || args[1] !== prevY) { // yup, some fonts have zero-length line commands\n commandCallback('L', prevX, prevY, (prevX = args[0]), (prevY = args[1]));\n }\n break\n case 'Q': {\n commandCallback('Q', prevX, prevY, (prevX = args[2]), (prevY = args[3]), args[0], args[1]);\n break\n }\n case 'C': {\n commandCallback('C', prevX, prevY, (prevX = args[4]), (prevY = args[5]), args[0], args[1], args[2], args[3]);\n break\n }\n case 'Z':\n if (prevX !== firstX || prevY !== firstY) {\n commandCallback('L', prevX, prevY, firstX, firstY);\n }\n break\n }\n }\n }\n\n /**\n * Convert a path string to a series of straight line segments\n * @param {string} pathString - An SVG-like path string to parse; should only contain commands: M/L/Q/C/Z\n * @param {function(x1:number, y1:number, x2:number, y2:number)} segmentCallback - A callback\n * function that will be called once for every line segment\n * @param {number} [curvePoints] - How many straight line segments to use when approximating a\n * bezier curve in the path. Defaults to 16.\n */\n function pathToLineSegments (pathString, segmentCallback, curvePoints) {\n if ( curvePoints === void 0 ) curvePoints = 16;\n\n var tempPoint = { x: 0, y: 0 };\n forEachPathCommand(pathString, function (command, startX, startY, endX, endY, ctrl1X, ctrl1Y, ctrl2X, ctrl2Y) {\n switch (command) {\n case 'L':\n segmentCallback(startX, startY, endX, endY);\n break\n case 'Q': {\n var prevCurveX = startX;\n var prevCurveY = startY;\n for (var i = 1; i < curvePoints; i++) {\n pointOnQuadraticBezier(\n startX, startY,\n ctrl1X, ctrl1Y,\n endX, endY,\n i / (curvePoints - 1),\n tempPoint\n );\n segmentCallback(prevCurveX, prevCurveY, tempPoint.x, tempPoint.y);\n prevCurveX = tempPoint.x;\n prevCurveY = tempPoint.y;\n }\n break\n }\n case 'C': {\n var prevCurveX$1 = startX;\n var prevCurveY$1 = startY;\n for (var i$1 = 1; i$1 < curvePoints; i$1++) {\n pointOnCubicBezier(\n startX, startY,\n ctrl1X, ctrl1Y,\n ctrl2X, ctrl2Y,\n endX, endY,\n i$1 / (curvePoints - 1),\n tempPoint\n );\n segmentCallback(prevCurveX$1, prevCurveY$1, tempPoint.x, tempPoint.y);\n prevCurveX$1 = tempPoint.x;\n prevCurveY$1 = tempPoint.y;\n }\n break\n }\n }\n });\n }\n\n var viewportQuadVertex = \"precision highp float;attribute vec2 aUV;varying vec2 vUV;void main(){vUV=aUV;gl_Position=vec4(mix(vec2(-1.0),vec2(1.0),aUV),0.0,1.0);}\";\n\n var copyTexFragment = \"precision highp float;uniform sampler2D tex;varying vec2 vUV;void main(){gl_FragColor=texture2D(tex,vUV);}\";\n\n var cache = new WeakMap();\n\n var glContextParams = {\n premultipliedAlpha: false,\n preserveDrawingBuffer: true,\n antialias: false,\n depth: false,\n };\n\n /**\n * This is a little helper library for WebGL. It assists with state management for a GL context.\n * It's pretty tightly wrapped to the needs of this package, not very general-purpose.\n *\n * @param { WebGLRenderingContext | HTMLCanvasElement | OffscreenCanvas } glOrCanvas - the GL context to wrap\n * @param { ({gl, getExtension, withProgram, withTexture, withTextureFramebuffer, handleContextLoss}) => void } callback\n */\n function withWebGLContext (glOrCanvas, callback) {\n var gl = glOrCanvas.getContext ? glOrCanvas.getContext('webgl', glContextParams) : glOrCanvas;\n var wrapper = cache.get(gl);\n if (!wrapper) {\n var isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext;\n var extensions = {};\n var programs = {};\n var textures = {};\n var textureUnit = -1;\n var framebufferStack = [];\n\n gl.canvas.addEventListener('webglcontextlost', function (e) {\n handleContextLoss();\n e.preventDefault();\n }, false);\n\n function getExtension (name) {\n var ext = extensions[name];\n if (!ext) {\n ext = extensions[name] = gl.getExtension(name);\n if (!ext) {\n throw new Error((name + \" not supported\"))\n }\n }\n return ext\n }\n\n function compileShader (src, type) {\n var shader = gl.createShader(type);\n gl.shaderSource(shader, src);\n gl.compileShader(shader);\n // const status = gl.getShaderParameter(shader, gl.COMPILE_STATUS)\n // if (!status && !gl.isContextLost()) {\n // throw new Error(gl.getShaderInfoLog(shader).trim())\n // }\n return shader\n }\n\n function withProgram (name, vert, frag, func) {\n if (!programs[name]) {\n var attributes = {};\n var uniforms = {};\n var program = gl.createProgram();\n gl.attachShader(program, compileShader(vert, gl.VERTEX_SHADER));\n gl.attachShader(program, compileShader(frag, gl.FRAGMENT_SHADER));\n gl.linkProgram(program);\n\n programs[name] = {\n program: program,\n transaction: function transaction (func) {\n gl.useProgram(program);\n func({\n setUniform: function setUniform (type, name) {\n var values = [], len = arguments.length - 2;\n while ( len-- > 0 ) values[ len ] = arguments[ len + 2 ];\n\n var uniformLoc = uniforms[name] || (uniforms[name] = gl.getUniformLocation(program, name));\n gl[(\"uniform\" + type)].apply(gl, [ uniformLoc ].concat( values ));\n },\n\n setAttribute: function setAttribute (name, size, usage, instancingDivisor, data) {\n var attr = attributes[name];\n if (!attr) {\n attr = attributes[name] = {\n buf: gl.createBuffer(), // TODO should we destroy our buffers?\n loc: gl.getAttribLocation(program, name),\n data: null\n };\n }\n gl.bindBuffer(gl.ARRAY_BUFFER, attr.buf);\n gl.vertexAttribPointer(attr.loc, size, gl.FLOAT, false, 0, 0);\n gl.enableVertexAttribArray(attr.loc);\n if (isWebGL2) {\n gl.vertexAttribDivisor(attr.loc, instancingDivisor);\n } else {\n getExtension('ANGLE_instanced_arrays').vertexAttribDivisorANGLE(attr.loc, instancingDivisor);\n }\n if (data !== attr.data) {\n gl.bufferData(gl.ARRAY_BUFFER, data, usage);\n attr.data = data;\n }\n }\n });\n }\n };\n }\n\n programs[name].transaction(func);\n }\n\n function withTexture (name, func) {\n textureUnit++;\n try {\n gl.activeTexture(gl.TEXTURE0 + textureUnit);\n var texture = textures[name];\n if (!texture) {\n texture = textures[name] = gl.createTexture();\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);\n gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);\n }\n gl.bindTexture(gl.TEXTURE_2D, texture);\n func(texture, textureUnit);\n } finally {\n textureUnit--;\n }\n }\n\n function withTextureFramebuffer (texture, textureUnit, func) {\n var framebuffer = gl.createFramebuffer();\n framebufferStack.push(framebuffer);\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\n gl.activeTexture(gl.TEXTURE0 + textureUnit);\n gl.bindTexture(gl.TEXTURE_2D, texture);\n gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);\n try {\n func(framebuffer);\n } finally {\n gl.deleteFramebuffer(framebuffer);\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebufferStack[--framebufferStack.length - 1] || null);\n }\n }\n\n function handleContextLoss () {\n extensions = {};\n programs = {};\n textures = {};\n textureUnit = -1;\n framebufferStack.length = 0;\n }\n\n cache.set(gl, wrapper = {\n gl: gl,\n isWebGL2: isWebGL2,\n getExtension: getExtension,\n withProgram: withProgram,\n withTexture: withTexture,\n withTextureFramebuffer: withTextureFramebuffer,\n handleContextLoss: handleContextLoss,\n });\n }\n callback(wrapper);\n }\n\n\n function renderImageData(glOrCanvas, imageData, x, y, width, height, channels, framebuffer) {\n if ( channels === void 0 ) channels = 15;\n if ( framebuffer === void 0 ) framebuffer = null;\n\n withWebGLContext(glOrCanvas, function (ref) {\n var gl = ref.gl;\n var withProgram = ref.withProgram;\n var withTexture = ref.withTexture;\n\n withTexture('copy', function (tex, texUnit) {\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, imageData);\n withProgram('copy', viewportQuadVertex, copyTexFragment, function (ref) {\n var setUniform = ref.setUniform;\n var setAttribute = ref.setAttribute;\n\n setAttribute('aUV', 2, gl.STATIC_DRAW, 0, new Float32Array([0, 0, 2, 0, 0, 2]));\n setUniform('1i', 'image', texUnit);\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer || null);\n gl.disable(gl.BLEND);\n gl.colorMask(channels & 8, channels & 4, channels & 2, channels & 1);\n gl.viewport(x, y, width, height);\n gl.scissor(x, y, width, height);\n gl.drawArrays(gl.TRIANGLES, 0, 3);\n });\n });\n });\n }\n\n /**\n * Resizing a canvas clears its contents; this utility copies the previous contents over.\n * @param canvas\n * @param newWidth\n * @param newHeight\n */\n function resizeWebGLCanvasWithoutClearing(canvas, newWidth, newHeight) {\n var width = canvas.width;\n var height = canvas.height;\n withWebGLContext(canvas, function (ref) {\n var gl = ref.gl;\n\n var data = new Uint8Array(width * height * 4);\n gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, data);\n canvas.width = newWidth;\n canvas.height = newHeight;\n renderImageData(gl, data, 0, 0, width, height);\n });\n }\n\n var webglUtils = /*#__PURE__*/Object.freeze({\n __proto__: null,\n withWebGLContext: withWebGLContext,\n renderImageData: renderImageData,\n resizeWebGLCanvasWithoutClearing: resizeWebGLCanvasWithoutClearing\n });\n\n function generate$2 (sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent) {\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n\n var textureData = new Uint8Array(sdfWidth * sdfHeight);\n\n var viewBoxWidth = viewBox[2] - viewBox[0];\n var viewBoxHeight = viewBox[3] - viewBox[1];\n\n // Decompose all paths into straight line segments and add them to an index\n var segments = [];\n pathToLineSegments(path, function (x1, y1, x2, y2) {\n segments.push({\n x1: x1, y1: y1, x2: x2, y2: y2,\n minX: Math.min(x1, x2),\n minY: Math.min(y1, y2),\n maxX: Math.max(x1, x2),\n maxY: Math.max(y1, y2)\n });\n });\n\n // Sort segments by maxX, this will let us short-circuit some loops below\n segments.sort(function (a, b) { return a.maxX - b.maxX; });\n\n // For each target SDF texel, find the distance from its center to its nearest line segment,\n // map that distance to an alpha value, and write that alpha to the texel\n for (var sdfX = 0; sdfX < sdfWidth; sdfX++) {\n for (var sdfY = 0; sdfY < sdfHeight; sdfY++) {\n var signedDist = findNearestSignedDistance(\n viewBox[0] + viewBoxWidth * (sdfX + 0.5) / sdfWidth,\n viewBox[1] + viewBoxHeight * (sdfY + 0.5) / sdfHeight\n );\n\n // Use an exponential scale to ensure the texels very near the glyph path have adequate\n // precision, while allowing the distance field to cover the entire texture, given that\n // there are only 8 bits available. Formula visualized: https://www.desmos.com/calculator/uiaq5aqiam\n var alpha = Math.pow((1 - Math.abs(signedDist) / maxDistance), sdfExponent) / 2;\n if (signedDist < 0) {\n alpha = 1 - alpha;\n }\n\n alpha = Math.max(0, Math.min(255, Math.round(alpha * 255))); //clamp\n textureData[sdfY * sdfWidth + sdfX] = alpha;\n }\n }\n\n return textureData\n\n /**\n * For a given x/y, search the index for the closest line segment and return\n * its signed distance. Negative = inside, positive = outside, zero = on edge\n * @param x\n * @param y\n * @returns {number}\n */\n function findNearestSignedDistance (x, y) {\n var closestDistSq = Infinity;\n var closestDist = Infinity;\n\n for (var i = segments.length; i--;) {\n var seg = segments[i];\n if (seg.maxX + closestDist <= x) { break } //sorting by maxX means no more can be closer, so we can short-circuit\n if (x + closestDist > seg.minX && y - closestDist < seg.maxY && y + closestDist > seg.minY) {\n var distSq = absSquareDistanceToLineSegment(x, y, seg.x1, seg.y1, seg.x2, seg.y2);\n if (distSq < closestDistSq) {\n closestDistSq = distSq;\n closestDist = Math.sqrt(closestDistSq);\n }\n }\n }\n\n // Flip to negative distance if inside the poly\n if (isPointInPoly(x, y)) {\n closestDist = -closestDist;\n }\n return closestDist\n }\n\n /**\n * Determine whether the given point lies inside or outside the glyph. Uses a simple\n * winding-number ray casting algorithm using a ray pointing east from the point.\n */\n function isPointInPoly (x, y) {\n var winding = 0;\n for (var i = segments.length; i--;) {\n var seg = segments[i];\n if (seg.maxX <= x) { break } //sorting by maxX means no more can cross, so we can short-circuit\n var intersects = ((seg.y1 > y) !== (seg.y2 > y)) && (x < (seg.x2 - seg.x1) * (y - seg.y1) / (seg.y2 - seg.y1) + seg.x1);\n if (intersects) {\n winding += seg.y1 < seg.y2 ? 1 : -1;\n }\n }\n return winding !== 0\n }\n }\n\n function generateIntoCanvas$2(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, canvas, x, y, channel) {\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n if ( x === void 0 ) x = 0;\n if ( y === void 0 ) y = 0;\n if ( channel === void 0 ) channel = 0;\n\n generateIntoFramebuffer$1(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, canvas, null, x, y, channel);\n }\n\n function generateIntoFramebuffer$1 (sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, glOrCanvas, framebuffer, x, y, channel) {\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n if ( x === void 0 ) x = 0;\n if ( y === void 0 ) y = 0;\n if ( channel === void 0 ) channel = 0;\n\n var data = generate$2(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent);\n // Expand single-channel data to rbga\n var rgbaData = new Uint8Array(data.length * 4);\n for (var i = 0; i < data.length; i++) {\n rgbaData[i * 4 + channel] = data[i];\n }\n renderImageData(glOrCanvas, rgbaData, x, y, sdfWidth, sdfHeight, 1 << (3 - channel), framebuffer);\n }\n\n /**\n * Find the absolute distance from a point to a line segment at closest approach\n */\n function absSquareDistanceToLineSegment (x, y, lineX0, lineY0, lineX1, lineY1) {\n var ldx = lineX1 - lineX0;\n var ldy = lineY1 - lineY0;\n var lengthSq = ldx * ldx + ldy * ldy;\n var t = lengthSq ? Math.max(0, Math.min(1, ((x - lineX0) * ldx + (y - lineY0) * ldy) / lengthSq)) : 0;\n var dx = x - (lineX0 + t * ldx);\n var dy = y - (lineY0 + t * ldy);\n return dx * dx + dy * dy\n }\n\n var javascript = /*#__PURE__*/Object.freeze({\n __proto__: null,\n generate: generate$2,\n generateIntoCanvas: generateIntoCanvas$2,\n generateIntoFramebuffer: generateIntoFramebuffer$1\n });\n\n var mainVertex = \"precision highp float;uniform vec4 uGlyphBounds;attribute vec2 aUV;attribute vec4 aLineSegment;varying vec4 vLineSegment;varying vec2 vGlyphXY;void main(){vLineSegment=aLineSegment;vGlyphXY=mix(uGlyphBounds.xy,uGlyphBounds.zw,aUV);gl_Position=vec4(mix(vec2(-1.0),vec2(1.0),aUV),0.0,1.0);}\";\n\n var mainFragment = \"precision highp float;uniform vec4 uGlyphBounds;uniform float uMaxDistance;uniform float uExponent;varying vec4 vLineSegment;varying vec2 vGlyphXY;float absDistToSegment(vec2 point,vec2 lineA,vec2 lineB){vec2 lineDir=lineB-lineA;float lenSq=dot(lineDir,lineDir);float t=lenSq==0.0 ? 0.0 : clamp(dot(point-lineA,lineDir)/lenSq,0.0,1.0);vec2 linePt=lineA+t*lineDir;return distance(point,linePt);}void main(){vec4 seg=vLineSegment;vec2 p=vGlyphXY;float dist=absDistToSegment(p,seg.xy,seg.zw);float val=pow(1.0-clamp(dist/uMaxDistance,0.0,1.0),uExponent)*0.5;bool crossing=(seg.y>p.y!=seg.w>p.y)&&(p.x<(seg.z-seg.x)*(p.y-seg.y)/(seg.w-seg.y)+seg.x);bool crossingUp=crossing&&vLineSegment.y<vLineSegment.w;gl_FragColor=vec4(crossingUp ? 1.0/255.0 : 0.0,crossing&&!crossingUp ? 1.0/255.0 : 0.0,0.0,val);}\";\n\n var postFragment = \"precision highp float;uniform sampler2D tex;varying vec2 vUV;void main(){vec4 color=texture2D(tex,vUV);bool inside=color.r!=color.g;float val=inside ? 1.0-color.a : color.a;gl_FragColor=vec4(val);}\";\n\n // Single triangle covering viewport\n var viewportUVs = new Float32Array([0, 0, 2, 0, 0, 2]);\n\n var implicitContext = null;\n var isTestingSupport = false;\n var NULL_OBJECT = {};\n var supportByCanvas = new WeakMap(); // canvas -> bool\n\n function validateSupport (glOrCanvas) {\n if (!isTestingSupport && !isSupported(glOrCanvas)) {\n throw new Error('WebGL generation not supported')\n }\n }\n\n function generate$1 (sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, glOrCanvas) {\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n if ( glOrCanvas === void 0 ) glOrCanvas = null;\n\n if (!glOrCanvas) {\n glOrCanvas = implicitContext;\n if (!glOrCanvas) {\n var canvas = typeof OffscreenCanvas === 'function'\n ? new OffscreenCanvas(1, 1)\n : typeof document !== 'undefined'\n ? document.createElement('canvas')\n : null;\n if (!canvas) {\n throw new Error('OffscreenCanvas or DOM canvas not supported')\n }\n glOrCanvas = implicitContext = canvas.getContext('webgl', { depth: false });\n }\n }\n\n validateSupport(glOrCanvas);\n\n var rgbaData = new Uint8Array(sdfWidth * sdfHeight * 4); //not Uint8ClampedArray, cuz Safari\n\n // Render into a background texture framebuffer\n withWebGLContext(glOrCanvas, function (ref) {\n var gl = ref.gl;\n var withTexture = ref.withTexture;\n var withTextureFramebuffer = ref.withTextureFramebuffer;\n\n withTexture('readable', function (texture, textureUnit) {\n gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, sdfWidth, sdfHeight, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);\n\n withTextureFramebuffer(texture, textureUnit, function (framebuffer) {\n generateIntoFramebuffer(\n sdfWidth,\n sdfHeight,\n path,\n viewBox,\n maxDistance,\n sdfExponent,\n gl,\n framebuffer,\n 0,\n 0,\n 0 // red channel\n );\n gl.readPixels(0, 0, sdfWidth, sdfHeight, gl.RGBA, gl.UNSIGNED_BYTE, rgbaData);\n });\n });\n });\n\n // Throw away all but the red channel\n var data = new Uint8Array(sdfWidth * sdfHeight);\n for (var i = 0, j = 0; i < rgbaData.length; i += 4) {\n data[j++] = rgbaData[i];\n }\n\n return data\n }\n\n function generateIntoCanvas$1(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, canvas, x, y, channel) {\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n if ( x === void 0 ) x = 0;\n if ( y === void 0 ) y = 0;\n if ( channel === void 0 ) channel = 0;\n\n generateIntoFramebuffer(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, canvas, null, x, y, channel);\n }\n\n function generateIntoFramebuffer (sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, glOrCanvas, framebuffer, x, y, channel) {\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n if ( x === void 0 ) x = 0;\n if ( y === void 0 ) y = 0;\n if ( channel === void 0 ) channel = 0;\n\n // Verify support\n validateSupport(glOrCanvas);\n\n // Compute path segments\n var lineSegmentCoords = [];\n pathToLineSegments(path, function (x1, y1, x2, y2) {\n lineSegmentCoords.push(x1, y1, x2, y2);\n });\n lineSegmentCoords = new Float32Array(lineSegmentCoords);\n\n withWebGLContext(glOrCanvas, function (ref) {\n var gl = ref.gl;\n var isWebGL2 = ref.isWebGL2;\n var getExtension = ref.getExtension;\n var withProgram = ref.withProgram;\n var withTexture = ref.withTexture;\n var withTextureFramebuffer = ref.withTextureFramebuffer;\n var handleContextLoss = ref.handleContextLoss;\n\n withTexture('rawDistances', function (intermediateTexture, intermediateTextureUnit) {\n if (sdfWidth !== intermediateTexture._lastWidth || sdfHeight !== intermediateTexture._lastHeight) {\n gl.texImage2D(\n gl.TEXTURE_2D, 0, gl.RGBA,\n intermediateTexture._lastWidth = sdfWidth,\n intermediateTexture._lastHeight = sdfHeight,\n 0, gl.RGBA, gl.UNSIGNED_BYTE, null\n );\n }\n\n // Unsigned distance pass\n withProgram('main', mainVertex, mainFragment, function (ref) {\n var setAttribute = ref.setAttribute;\n var setUniform = ref.setUniform;\n\n // Init extensions\n var instancingExtension = !isWebGL2 && getExtension('ANGLE_instanced_arrays');\n var blendMinMaxExtension = !isWebGL2 && getExtension('EXT_blend_minmax');\n\n // Init/update attributes\n setAttribute('aUV', 2, gl.STATIC_DRAW, 0, viewportUVs);\n setAttribute('aLineSegment', 4, gl.DYNAMIC_DRAW, 1, lineSegmentCoords);\n\n // Init/update uniforms\n setUniform.apply(void 0, [ '4f', 'uGlyphBounds' ].concat( viewBox ));\n setUniform('1f', 'uMaxDistance', maxDistance);\n setUniform('1f', 'uExponent', sdfExponent);\n\n // Render initial unsigned distance / winding number info to a texture\n withTextureFramebuffer(intermediateTexture, intermediateTextureUnit, function (framebuffer) {\n gl.enable(gl.BLEND);\n gl.colorMask(true, true, true, true);\n gl.viewport(0, 0, sdfWidth, sdfHeight);\n gl.scissor(0, 0, sdfWidth, sdfHeight);\n gl.blendFunc(gl.ONE, gl.ONE);\n // Red+Green channels are incremented (FUNC_ADD) for segment-ray crossings to give a \"winding number\".\n // Alpha holds the closest (MAX) unsigned distance.\n gl.blendEquationSeparate(gl.FUNC_ADD, isWebGL2 ? gl.MAX : blendMinMaxExtension.MAX_EXT);\n gl.clear(gl.COLOR_BUFFER_BIT);\n if (isWebGL2) {\n gl.drawArraysInstanced(gl.TRIANGLES, 0, 3, lineSegmentCoords.length / 4);\n } else {\n instancingExtension.drawArraysInstancedANGLE(gl.TRIANGLES, 0, 3, lineSegmentCoords.length / 4);\n }\n // Debug\n // const debug = new Uint8Array(sdfWidth * sdfHeight * 4)\n // gl.readPixels(0, 0, sdfWidth, sdfHeight, gl.RGBA, gl.UNSIGNED_BYTE, debug)\n // console.log('intermediate texture data: ', debug)\n });\n });\n\n // Use the data stored in the texture to apply inside/outside and write to the output framebuffer rect+channel.\n withProgram('post', viewportQuadVertex, postFragment, function (program) {\n program.setAttribute('aUV', 2, gl.STATIC_DRAW, 0, viewportUVs);\n program.setUniform('1i', 'tex', intermediateTextureUnit);\n gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);\n gl.disable(gl.BLEND);\n gl.colorMask(channel === 0, channel === 1, channel === 2, channel === 3);\n gl.viewport(x, y, sdfWidth, sdfHeight);\n gl.scissor(x, y, sdfWidth, sdfHeight);\n gl.drawArrays(gl.TRIANGLES, 0, 3);\n });\n });\n\n // Handle context loss occurring during any of the above calls\n if (gl.isContextLost()) {\n handleContextLoss();\n throw new Error('webgl context lost')\n }\n });\n }\n\n function isSupported (glOrCanvas) {\n var key = (!glOrCanvas || glOrCanvas === implicitContext) ? NULL_OBJECT : (glOrCanvas.canvas || glOrCanvas);\n var supported = supportByCanvas.get(key);\n if (supported === undefined) {\n isTestingSupport = true;\n var failReason = null;\n try {\n // Since we can't detect all failure modes up front, let's just do a trial run of a\n // simple path and compare what we get back to the correct expected result. This will\n // also serve to prime the shader compilation.\n var expectedResult = [\n 97, 106, 97, 61,\n 99, 137, 118, 80,\n 80, 118, 137, 99,\n 61, 97, 106, 97\n ];\n var testResult = generate$1(\n 4,\n 4,\n 'M8,8L16,8L24,24L16,24Z',\n [0, 0, 32, 32],\n 24,\n 1,\n glOrCanvas\n );\n supported = testResult && expectedResult.length === testResult.length &&\n testResult.every(function (val, i) { return val === expectedResult[i]; });\n if (!supported) {\n failReason = 'bad trial run results';\n console.info(expectedResult, testResult);\n }\n } catch (err) {\n // TODO if it threw due to webgl context loss, should we maybe leave isSupported as null and try again later?\n supported = false;\n failReason = err.message;\n }\n if (failReason) {\n console.warn('WebGL SDF generation not supported:', failReason);\n }\n isTestingSupport = false;\n supportByCanvas.set(key, supported);\n }\n return supported\n }\n\n var webgl = /*#__PURE__*/Object.freeze({\n __proto__: null,\n generate: generate$1,\n generateIntoCanvas: generateIntoCanvas$1,\n generateIntoFramebuffer: generateIntoFramebuffer,\n isSupported: isSupported\n });\n\n /**\n * Generate an SDF texture image for a 2D path.\n *\n * @param {number} sdfWidth - width of the SDF output image in pixels.\n * @param {number} sdfHeight - height of the SDF output image in pixels.\n * @param {string} path - an SVG-like path string describing the glyph; should only contain commands: M/L/Q/C/Z.\n * @param {number[]} viewBox - [minX, minY, maxX, maxY] in font units aligning with the texture's edges.\n * @param {number} maxDistance - the maximum distance from the glyph path in font units that will be encoded; defaults\n * to half the maximum viewBox dimension.\n * @param {number} [sdfExponent] - specifies an exponent for encoding the SDF's distance values; higher exponents\n * will give greater precision nearer the glyph's path.\n * @return {Uint8Array}\n */\n function generate(\n sdfWidth,\n sdfHeight,\n path,\n viewBox,\n maxDistance,\n sdfExponent\n ) {\n if ( maxDistance === void 0 ) maxDistance = Math.max(viewBox[2] - viewBox[0], viewBox[3] - viewBox[1]) / 2;\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n\n try {\n return generate$1.apply(webgl, arguments)\n } catch(e) {\n console.info('WebGL SDF generation failed, falling back to JS', e);\n return generate$2.apply(javascript, arguments)\n }\n }\n\n /**\n * Generate an SDF texture image for a 2D path, inserting the result into a WebGL `canvas` at a given x/y position\n * and color channel. This is generally much faster than calling `generate` because it does not require reading pixels\n * back from the GPU->CPU -- the `canvas` can be used directly as a WebGL texture image, so it all stays on the GPU.\n *\n * @param {number} sdfWidth - width of the SDF output image in pixels.\n * @param {number} sdfHeight - height of the SDF output image in pixels.\n * @param {string} path - an SVG-like path string describing the glyph; should only contain commands: M/L/Q/C/Z.\n * @param {number[]} viewBox - [minX, minY, maxX, maxY] in font units aligning with the texture's edges.\n * @param {number} maxDistance - the maximum distance from the glyph path in font units that will be encoded; defaults\n * to half the maximum viewBox dimension.\n * @param {number} [sdfExponent] - specifies an exponent for encoding the SDF's distance values; higher exponents\n * will give greater precision nearer the glyph's path.\n * @param {HTMLCanvasElement|OffscreenCanvas} canvas - a WebGL-enabled canvas into which the SDF will be rendered.\n * Only the relevant rect/channel will be modified, the rest will be preserved. To avoid unpredictable results\n * due to shared GL context state, this canvas should be dedicated to use by this library alone.\n * @param {number} x - the x position at which to render the SDF.\n * @param {number} y - the y position at which to render the SDF.\n * @param {number} channel - the color channel index (0-4) into which the SDF will be rendered.\n * @return {Uint8Array}\n */\n function generateIntoCanvas(\n sdfWidth,\n sdfHeight,\n path,\n viewBox,\n maxDistance,\n sdfExponent,\n canvas,\n x,\n y,\n channel\n ) {\n if ( maxDistance === void 0 ) maxDistance = Math.max(viewBox[2] - viewBox[0], viewBox[3] - viewBox[1]) / 2;\n if ( sdfExponent === void 0 ) sdfExponent = 1;\n if ( x === void 0 ) x = 0;\n if ( y === void 0 ) y = 0;\n if ( channel === void 0 ) channel = 0;\n\n try {\n return generateIntoCanvas$1.apply(webgl, arguments)\n } catch(e) {\n console.info('WebGL SDF generation failed, falling back to JS', e);\n return generateIntoCanvas$2.apply(javascript, arguments)\n }\n }\n\n exports.forEachPathCommand = forEachPathCommand;\n exports.generate = generate;\n exports.generateIntoCanvas = generateIntoCanvas;\n exports.javascript = javascript;\n exports.pathToLineSegments = pathToLineSegments;\n exports.webgl = webgl;\n exports.webglUtils = webglUtils;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n return exports;\n\n}({}));\nreturn exports\n}\n\nexport { SDFGenerator as default };\n","function bidiFactory() {\nvar bidi = (function (exports) {\n\n // Bidi character types data, auto generated\n var DATA = {\n \"R\": \"13k,1a,2,3,3,2+1j,ch+16,a+1,5+2,2+n,5,a,4,6+16,4+3,h+1b,4mo,179q,2+9,2+11,2i9+7y,2+68,4,3+4,5+13,4+3,2+4k,3+29,8+cf,1t+7z,w+17,3+3m,1t+3z,16o1+5r,8+30,8+mc,29+1r,29+4v,75+73\",\n \"EN\": \"1c+9,3d+1,6,187+9,513,4+5,7+9,sf+j,175h+9,qw+q,161f+1d,4xt+a,25i+9\",\n \"ES\": \"17,2,6dp+1,f+1,av,16vr,mx+1,4o,2\",\n \"ET\": \"z+2,3h+3,b+1,ym,3e+1,2o,p4+1,8,6u,7c,g6,1wc,1n9+4,30+1b,2n,6d,qhx+1,h0m,a+1,49+2,63+1,4+1,6bb+3,12jj\",\n \"AN\": \"16o+5,2j+9,2+1,35,ed,1ff2+9,87+u\",\n \"CS\": \"18,2+1,b,2u,12k,55v,l,17v0,2,3,53,2+1,b\",\n \"B\": \"a,3,f+2,2v,690\",\n \"S\": \"9,2,k\",\n \"WS\": \"c,k,4f4,1vk+a,u,1j,335\",\n \"ON\": \"x+1,4+4,h+5,r+5,r+3,z,5+3,2+1,2+1,5,2+2,3+4,o,w,ci+1,8+d,3+d,6+8,2+g,39+1,9,6+1,2,33,b8,3+1,3c+1,7+1,5r,b,7h+3,sa+5,2,3i+6,jg+3,ur+9,2v,ij+1,9g+9,7+a,8m,4+1,49+x,14u,2+2,c+2,e+2,e+2,e+1,i+n,e+e,2+p,u+2,e+2,36+1,2+3,2+1,b,2+2,6+5,2,2,2,h+1,5+4,6+3,3+f,16+2,5+3l,3+81,1y+p,2+40,q+a,m+13,2r+ch,2+9e,75+hf,3+v,2+2w,6e+5,f+6,75+2a,1a+p,2+2g,d+5x,r+b,6+3,4+o,g,6+1,6+2,2k+1,4,2j,5h+z,1m+1,1e+f,t+2,1f+e,d+3,4o+3,2s+1,w,535+1r,h3l+1i,93+2,2s,b+1,3l+x,2v,4g+3,21+3,kz+1,g5v+1,5a,j+9,n+v,2,3,2+8,2+1,3+2,2,3,46+1,4+4,h+5,r+5,r+a,3h+2,4+6,b+4,78,1r+24,4+c,4,1hb,ey+6,103+j,16j+c,1ux+7,5+g,fsh,jdq+1t,4,57+2e,p1,1m,1m,1m,1m,4kt+1,7j+17,5+2r,d+e,3+e,2+e,2+10,m+4,w,1n+5,1q,4z+5,4b+rb,9+c,4+c,4+37,d+2g,8+b,l+b,5+1j,9+9,7+13,9+t,3+1,27+3c,2+29,2+3q,d+d,3+4,4+2,6+6,a+o,8+6,a+2,e+6,16+42,2+1i\",\n \"BN\": \"0+8,6+d,2s+5,2+p,e,4m9,1kt+2,2b+5,5+5,17q9+v,7k,6p+8,6+1,119d+3,440+7,96s+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+75,6p+2rz,1ben+1,1ekf+1,1ekf+1\",\n \"NSM\": \"lc+33,7o+6,7c+18,2,2+1,2+1,2,21+a,1d+k,h,2u+6,3+5,3+1,2+3,10,v+q,2k+a,1n+8,a,p+3,2+8,2+2,2+4,18+2,3c+e,2+v,1k,2,5+7,5,4+6,b+1,u,1n,5+3,9,l+1,r,3+1,1m,5+1,5+1,3+2,4,v+1,4,c+1,1m,5+4,2+1,5,l+1,n+5,2,1n,3,2+3,9,8+1,c+1,v,1q,d,1f,4,1m+2,6+2,2+3,8+1,c+1,u,1n,g+1,l+1,t+1,1m+1,5+3,9,l+1,u,21,8+2,2,2j,3+6,d+7,2r,3+8,c+5,23+1,s,2,2,1k+d,2+4,2+1,6+a,2+z,a,2v+3,2+5,2+1,3+1,q+1,5+2,h+3,e,3+1,7,g,jk+2,qb+2,u+2,u+1,v+1,1t+1,2+6,9,3+a,a,1a+2,3c+1,z,3b+2,5+1,a,7+2,64+1,3,1n,2+6,2,2,3+7,7+9,3,1d+g,1s+3,1d,2+4,2,6,15+8,d+1,x+3,3+1,2+2,1l,2+1,4,2+2,1n+7,3+1,49+2,2+c,2+6,5,7,4+1,5j+1l,2+4,k1+w,2db+2,3y,2p+v,ff+3,30+1,n9x+3,2+9,x+1,29+1,7l,4,5,q+1,6,48+1,r+h,e,13+7,q+a,1b+2,1d,3+3,3+1,14,1w+5,3+1,3+1,d,9,1c,1g,2+2,3+1,6+1,2,17+1,9,6n,3,5,fn5,ki+f,h+f,r2,6b,46+4,1af+2,2+1,6+3,15+2,5,4m+1,fy+3,as+1,4a+a,4x,1j+e,1l+2,1e+3,3+1,1y+2,11+4,2+7,1r,d+1,1h+8,b+3,3,2o+2,3,2+1,7,4h,4+7,m+1,1m+1,4,12+6,4+4,5g+7,3+2,2,o,2d+5,2,5+1,2+1,6n+3,7+1,2+1,s+1,2e+7,3,2+1,2z,2,3+5,2,2u+2,3+3,2+4,78+8,2+1,75+1,2,5,41+3,3+1,5,x+5,3+1,15+5,3+3,9,a+5,3+2,1b+c,2+1,bb+6,2+5,2d+l,3+6,2+1,2+1,3f+5,4,2+1,2+6,2,21+1,4,2,9o+1,f0c+4,1o+6,t5,1s+3,2a,f5l+1,43t+2,i+7,3+6,v+3,45+2,1j0+1i,5+1d,9,f,n+4,2+e,11t+6,2+g,3+6,2+1,2+4,7a+6,c6+3,15t+6,32+6,gzhy+6n\",\n \"AL\": \"16w,3,2,e+1b,z+2,2+2s,g+1,8+1,b+m,2+t,s+2i,c+e,4h+f,1d+1e,1bwe+dp,3+3z,x+c,2+1,35+3y,2rm+z,5+7,b+5,dt+l,c+u,17nl+27,1t+27,4x+6n,3+d\",\n \"LRO\": \"6ct\",\n \"RLO\": \"6cu\",\n \"LRE\": \"6cq\",\n \"RLE\": \"6cr\",\n \"PDF\": \"6cs\",\n \"LRI\": \"6ee\",\n \"RLI\": \"6ef\",\n \"FSI\": \"6eg\",\n \"PDI\": \"6eh\"\n };\n\n var TYPES = {};\n var TYPES_TO_NAMES = {};\n TYPES.L = 1; //L is the default\n TYPES_TO_NAMES[1] = 'L';\n Object.keys(DATA).forEach(function (type, i) {\n TYPES[type] = 1 << (i + 1);\n TYPES_TO_NAMES[TYPES[type]] = type;\n });\n Object.freeze(TYPES);\n\n var ISOLATE_INIT_TYPES = TYPES.LRI | TYPES.RLI | TYPES.FSI;\n var STRONG_TYPES = TYPES.L | TYPES.R | TYPES.AL;\n var NEUTRAL_ISOLATE_TYPES = TYPES.B | TYPES.S | TYPES.WS | TYPES.ON | TYPES.FSI | TYPES.LRI | TYPES.RLI | TYPES.PDI;\n var BN_LIKE_TYPES = TYPES.BN | TYPES.RLE | TYPES.LRE | TYPES.RLO | TYPES.LRO | TYPES.PDF;\n var TRAILING_TYPES = TYPES.S | TYPES.WS | TYPES.B | ISOLATE_INIT_TYPES | TYPES.PDI | BN_LIKE_TYPES;\n\n var map = null;\n\n function parseData () {\n if (!map) {\n //const start = performance.now()\n map = new Map();\n var loop = function ( type ) {\n if (DATA.hasOwnProperty(type)) {\n var lastCode = 0;\n DATA[type].split(',').forEach(function (range) {\n var ref = range.split('+');\n var skip = ref[0];\n var step = ref[1];\n skip = parseInt(skip, 36);\n step = step ? parseInt(step, 36) : 0;\n map.set(lastCode += skip, TYPES[type]);\n for (var i = 0; i < step; i++) {\n map.set(++lastCode, TYPES[type]);\n }\n });\n }\n };\n\n for (var type in DATA) loop( type );\n //console.log(`char types parsed in ${performance.now() - start}ms`)\n }\n }\n\n /**\n * @param {string} char\n * @return {number}\n */\n function getBidiCharType (char) {\n parseData();\n return map.get(char.codePointAt(0)) || TYPES.L\n }\n\n function getBidiCharTypeName(char) {\n return TYPES_TO_NAMES[getBidiCharType(char)]\n }\n\n // Bidi bracket pairs data, auto generated\n var data$1 = {\n \"pairs\": \"14>1,1e>2,u>2,2wt>1,1>1,1ge>1,1wp>1,1j>1,f>1,hm>1,1>1,u>1,u6>1,1>1,+5,28>1,w>1,1>1,+3,b8>1,1>1,+3,1>3,-1>-1,3>1,1>1,+2,1s>1,1>1,x>1,th>1,1>1,+2,db>1,1>1,+3,3>1,1>1,+2,14qm>1,1>1,+1,4q>1,1e>2,u>2,2>1,+1\",\n \"canonical\": \"6f1>-6dx,6dy>-6dx,6ec>-6ed,6ee>-6ed,6ww>2jj,-2ji>2jj,14r4>-1e7l,1e7m>-1e7l,1e7m>-1e5c,1e5d>-1e5b,1e5c>-14qx,14qy>-14qx,14vn>-1ecg,1ech>-1ecg,1edu>-1ecg,1eci>-1ecg,1eda>-1ecg,1eci>-1ecg,1eci>-168q,168r>-168q,168s>-14ye,14yf>-14ye\"\n };\n\n /**\n * Parses an string that holds encoded codepoint mappings, e.g. for bracket pairs or\n * mirroring characters, as encoded by scripts/generateBidiData.js. Returns an object\n * holding the `map`, and optionally a `reverseMap` if `includeReverse:true`.\n * @param {string} encodedString\n * @param {boolean} includeReverse - true if you want reverseMap in the output\n * @return {{map: Map<number, number>, reverseMap?: Map<number, number>}}\n */\n function parseCharacterMap (encodedString, includeReverse) {\n var radix = 36;\n var lastCode = 0;\n var map = new Map();\n var reverseMap = includeReverse && new Map();\n var prevPair;\n encodedString.split(',').forEach(function visit(entry) {\n if (entry.indexOf('+') !== -1) {\n for (var i = +entry; i--;) {\n visit(prevPair);\n }\n } else {\n prevPair = entry;\n var ref = entry.split('>');\n var a = ref[0];\n var b = ref[1];\n a = String.fromCodePoint(lastCode += parseInt(a, radix));\n b = String.fromCodePoint(lastCode += parseInt(b, radix));\n map.set(a, b);\n includeReverse && reverseMap.set(b, a);\n }\n });\n return { map: map, reverseMap: reverseMap }\n }\n\n var openToClose, closeToOpen, canonical;\n\n function parse$1 () {\n if (!openToClose) {\n //const start = performance.now()\n var ref = parseCharacterMap(data$1.pairs, true);\n var map = ref.map;\n var reverseMap = ref.reverseMap;\n openToClose = map;\n closeToOpen = reverseMap;\n canonical = parseCharacterMap(data$1.canonical, false).map;\n //console.log(`brackets parsed in ${performance.now() - start}ms`)\n }\n }\n\n function openingToClosingBracket (char) {\n parse$1();\n return openToClose.get(char) || null\n }\n\n function closingToOpeningBracket (char) {\n parse$1();\n return closeToOpen.get(char) || null\n }\n\n function getCanonicalBracket (char) {\n parse$1();\n return canonical.get(char) || null\n }\n\n // Local type aliases\n var TYPE_L = TYPES.L;\n var TYPE_R = TYPES.R;\n var TYPE_EN = TYPES.EN;\n var TYPE_ES = TYPES.ES;\n var TYPE_ET = TYPES.ET;\n var TYPE_AN = TYPES.AN;\n var TYPE_CS = TYPES.CS;\n var TYPE_B = TYPES.B;\n var TYPE_S = TYPES.S;\n var TYPE_ON = TYPES.ON;\n var TYPE_BN = TYPES.BN;\n var TYPE_NSM = TYPES.NSM;\n var TYPE_AL = TYPES.AL;\n var TYPE_LRO = TYPES.LRO;\n var TYPE_RLO = TYPES.RLO;\n var TYPE_LRE = TYPES.LRE;\n var TYPE_RLE = TYPES.RLE;\n var TYPE_PDF = TYPES.PDF;\n var TYPE_LRI = TYPES.LRI;\n var TYPE_RLI = TYPES.RLI;\n var TYPE_FSI = TYPES.FSI;\n var TYPE_PDI = TYPES.PDI;\n\n /**\n * @typedef {object} GetEmbeddingLevelsResult\n * @property {{start, end, level}[]} paragraphs\n * @property {Uint8Array} levels\n */\n\n /**\n * This function applies the Bidirectional Algorithm to a string, returning the resolved embedding levels\n * in a single Uint8Array plus a list of objects holding each paragraph's start and end indices and resolved\n * base embedding level.\n *\n * @param {string} string - The input string\n * @param {\"ltr\"|\"rtl\"|\"auto\"} [baseDirection] - Use \"ltr\" or \"rtl\" to force a base paragraph direction,\n * otherwise a direction will be chosen automatically from each paragraph's contents.\n * @return {GetEmbeddingLevelsResult}\n */\n function getEmbeddingLevels (string, baseDirection) {\n var MAX_DEPTH = 125;\n\n // Start by mapping all characters to their unicode type, as a bitmask integer\n var charTypes = new Uint32Array(string.length);\n for (var i = 0; i < string.length; i++) {\n charTypes[i] = getBidiCharType(string[i]);\n }\n\n var charTypeCounts = new Map(); //will be cleared at start of each paragraph\n function changeCharType(i, type) {\n var oldType = charTypes[i];\n charTypes[i] = type;\n charTypeCounts.set(oldType, charTypeCounts.get(oldType) - 1);\n if (oldType & NEUTRAL_ISOLATE_TYPES) {\n charTypeCounts.set(NEUTRAL_ISOLATE_TYPES, charTypeCounts.get(NEUTRAL_ISOLATE_TYPES) - 1);\n }\n charTypeCounts.set(type, (charTypeCounts.get(type) || 0) + 1);\n if (type & NEUTRAL_ISOLATE_TYPES) {\n charTypeCounts.set(NEUTRAL_ISOLATE_TYPES, (charTypeCounts.get(NEUTRAL_ISOLATE_TYPES) || 0) + 1);\n }\n }\n\n var embedLevels = new Uint8Array(string.length);\n var isolationPairs = new Map(); //init->pdi and pdi->init\n\n // === 3.3.1 The Paragraph Level ===\n // 3.3.1 P1: Split the text into paragraphs\n var paragraphs = []; // [{start, end, level}, ...]\n var paragraph = null;\n for (var i$1 = 0; i$1 < string.length; i$1++) {\n if (!paragraph) {\n paragraphs.push(paragraph = {\n start: i$1,\n end: string.length - 1,\n // 3.3.1 P2-P3: Determine the paragraph level\n level: baseDirection === 'rtl' ? 1 : baseDirection === 'ltr' ? 0 : determineAutoEmbedLevel(i$1, false)\n });\n }\n if (charTypes[i$1] & TYPE_B) {\n paragraph.end = i$1;\n paragraph = null;\n }\n }\n\n var FORMATTING_TYPES = TYPE_RLE | TYPE_LRE | TYPE_RLO | TYPE_LRO | ISOLATE_INIT_TYPES | TYPE_PDI | TYPE_PDF | TYPE_B;\n var nextEven = function (n) { return n + ((n & 1) ? 1 : 2); };\n var nextOdd = function (n) { return n + ((n & 1) ? 2 : 1); };\n\n // Everything from here on will operate per paragraph.\n for (var paraIdx = 0; paraIdx < paragraphs.length; paraIdx++) {\n paragraph = paragraphs[paraIdx];\n var statusStack = [{\n _level: paragraph.level,\n _override: 0, //0=neutral, 1=L, 2=R\n _isolate: 0 //bool\n }];\n var stackTop = (void 0);\n var overflowIsolateCount = 0;\n var overflowEmbeddingCount = 0;\n var validIsolateCount = 0;\n charTypeCounts.clear();\n\n // === 3.3.2 Explicit Levels and Directions ===\n for (var i$2 = paragraph.start; i$2 <= paragraph.end; i$2++) {\n var charType = charTypes[i$2];\n stackTop = statusStack[statusStack.length - 1];\n\n // Set initial counts\n charTypeCounts.set(charType, (charTypeCounts.get(charType) || 0) + 1);\n if (charType & NEUTRAL_ISOLATE_TYPES) {\n charTypeCounts.set(NEUTRAL_ISOLATE_TYPES, (charTypeCounts.get(NEUTRAL_ISOLATE_TYPES) || 0) + 1);\n }\n\n // Explicit Embeddings: 3.3.2 X2 - X3\n if (charType & FORMATTING_TYPES) { //prefilter all formatters\n if (charType & (TYPE_RLE | TYPE_LRE)) {\n embedLevels[i$2] = stackTop._level; // 5.2\n var level = (charType === TYPE_RLE ? nextOdd : nextEven)(stackTop._level);\n if (level <= MAX_DEPTH && !overflowIsolateCount && !overflowEmbeddingCount) {\n statusStack.push({\n _level: level,\n _override: 0,\n _isolate: 0\n });\n } else if (!overflowIsolateCount) {\n overflowEmbeddingCount++;\n }\n }\n\n // Explicit Overrides: 3.3.2 X4 - X5\n else if (charType & (TYPE_RLO | TYPE_LRO)) {\n embedLevels[i$2] = stackTop._level; // 5.2\n var level$1 = (charType === TYPE_RLO ? nextOdd : nextEven)(stackTop._level);\n if (level$1 <= MAX_DEPTH && !overflowIsolateCount && !overflowEmbeddingCount) {\n statusStack.push({\n _level: level$1,\n _override: (charType & TYPE_RLO) ? TYPE_R : TYPE_L,\n _isolate: 0\n });\n } else if (!overflowIsolateCount) {\n overflowEmbeddingCount++;\n }\n }\n\n // Isolates: 3.3.2 X5a - X5c\n else if (charType & ISOLATE_INIT_TYPES) {\n // X5c - FSI becomes either RLI or LRI\n if (charType & TYPE_FSI) {\n charType = determineAutoEmbedLevel(i$2 + 1, true) === 1 ? TYPE_RLI : TYPE_LRI;\n }\n\n embedLevels[i$2] = stackTop._level;\n if (stackTop._override) {\n changeCharType(i$2, stackTop._override);\n }\n var level$2 = (charType === TYPE_RLI ? nextOdd : nextEven)(stackTop._level);\n if (level$2 <= MAX_DEPTH && overflowIsolateCount === 0 && overflowEmbeddingCount === 0) {\n validIsolateCount++;\n statusStack.push({\n _level: level$2,\n _override: 0,\n _isolate: 1,\n _isolInitIndex: i$2\n });\n } else {\n overflowIsolateCount++;\n }\n }\n\n // Terminating Isolates: 3.3.2 X6a\n else if (charType & TYPE_PDI) {\n if (overflowIsolateCount > 0) {\n overflowIsolateCount--;\n } else if (validIsolateCount > 0) {\n overflowEmbeddingCount = 0;\n while (!statusStack[statusStack.length - 1]._isolate) {\n statusStack.pop();\n }\n // Add to isolation pairs bidirectional mapping:\n var isolInitIndex = statusStack[statusStack.length - 1]._isolInitIndex;\n if (isolInitIndex != null) {\n isolationPairs.set(isolInitIndex, i$2);\n isolationPairs.set(i$2, isolInitIndex);\n }\n statusStack.pop();\n validIsolateCount--;\n }\n stackTop = statusStack[statusStack.length - 1];\n embedLevels[i$2] = stackTop._level;\n if (stackTop._override) {\n changeCharType(i$2, stackTop._override);\n }\n }\n\n\n // Terminating Embeddings and Overrides: 3.3.2 X7\n else if (charType & TYPE_PDF) {\n if (overflowIsolateCount === 0) {\n if (overflowEmbeddingCount > 0) {\n overflowEmbeddingCount--;\n } else if (!stackTop._isolate && statusStack.length > 1) {\n statusStack.pop();\n stackTop = statusStack[statusStack.length - 1];\n }\n }\n embedLevels[i$2] = stackTop._level; // 5.2\n }\n\n // End of Paragraph: 3.3.2 X8\n else if (charType & TYPE_B) {\n embedLevels[i$2] = paragraph.level;\n }\n }\n\n // Non-formatting characters: 3.3.2 X6\n else {\n embedLevels[i$2] = stackTop._level;\n // NOTE: This exclusion of BN seems to go against what section 5.2 says, but is required for test passage\n if (stackTop._override && charType !== TYPE_BN) {\n changeCharType(i$2, stackTop._override);\n }\n }\n }\n\n // === 3.3.3 Preparations for Implicit Processing ===\n\n // Remove all RLE, LRE, RLO, LRO, PDF, and BN characters: 3.3.3 X9\n // Note: Due to section 5.2, we won't remove them, but we'll use the BN_LIKE_TYPES bitset to\n // easily ignore them all from here on out.\n\n // 3.3.3 X10\n // Compute the set of isolating run sequences as specified by BD13\n var levelRuns = [];\n var currentRun = null;\n for (var i$3 = paragraph.start; i$3 <= paragraph.end; i$3++) {\n var charType$1 = charTypes[i$3];\n if (!(charType$1 & BN_LIKE_TYPES)) {\n var lvl = embedLevels[i$3];\n var isIsolInit = charType$1 & ISOLATE_INIT_TYPES;\n var isPDI = charType$1 === TYPE_PDI;\n if (currentRun && lvl === currentRun._level) {\n currentRun._end = i$3;\n currentRun._endsWithIsolInit = isIsolInit;\n } else {\n levelRuns.push(currentRun = {\n _start: i$3,\n _end: i$3,\n _level: lvl,\n _startsWithPDI: isPDI,\n _endsWithIsolInit: isIsolInit\n });\n }\n }\n }\n var isolatingRunSeqs = []; // [{seqIndices: [], sosType: L|R, eosType: L|R}]\n for (var runIdx = 0; runIdx < levelRuns.length; runIdx++) {\n var run = levelRuns[runIdx];\n if (!run._startsWithPDI || (run._startsWithPDI && !isolationPairs.has(run._start))) {\n var seqRuns = [currentRun = run];\n for (var pdiIndex = (void 0); currentRun && currentRun._endsWithIsolInit && (pdiIndex = isolationPairs.get(currentRun._end)) != null;) {\n for (var i$4 = runIdx + 1; i$4 < levelRuns.length; i$4++) {\n if (levelRuns[i$4]._start === pdiIndex) {\n seqRuns.push(currentRun = levelRuns[i$4]);\n break\n }\n }\n }\n // build flat list of indices across all runs:\n var seqIndices = [];\n for (var i$5 = 0; i$5 < seqRuns.length; i$5++) {\n var run$1 = seqRuns[i$5];\n for (var j = run$1._start; j <= run$1._end; j++) {\n seqIndices.push(j);\n }\n }\n // determine the sos/eos types:\n var firstLevel = embedLevels[seqIndices[0]];\n var prevLevel = paragraph.level;\n for (var i$6 = seqIndices[0] - 1; i$6 >= 0; i$6--) {\n if (!(charTypes[i$6] & BN_LIKE_TYPES)) { //5.2\n prevLevel = embedLevels[i$6];\n break\n }\n }\n var lastIndex = seqIndices[seqIndices.length - 1];\n var lastLevel = embedLevels[lastIndex];\n var nextLevel = paragraph.level;\n if (!(charTypes[lastIndex] & ISOLATE_INIT_TYPES)) {\n for (var i$7 = lastIndex + 1; i$7 <= paragraph.end; i$7++) {\n if (!(charTypes[i$7] & BN_LIKE_TYPES)) { //5.2\n nextLevel = embedLevels[i$7];\n break\n }\n }\n }\n isolatingRunSeqs.push({\n _seqIndices: seqIndices,\n _sosType: Math.max(prevLevel, firstLevel) % 2 ? TYPE_R : TYPE_L,\n _eosType: Math.max(nextLevel, lastLevel) % 2 ? TYPE_R : TYPE_L\n });\n }\n }\n\n // The next steps are done per isolating run sequence\n for (var seqIdx = 0; seqIdx < isolatingRunSeqs.length; seqIdx++) {\n var ref = isolatingRunSeqs[seqIdx];\n var seqIndices$1 = ref._seqIndices;\n var sosType = ref._sosType;\n var eosType = ref._eosType;\n /**\n * All the level runs in an isolating run sequence have the same embedding level.\n * \n * DO NOT change any `embedLevels[i]` within the current scope.\n */\n var embedDirection = ((embedLevels[seqIndices$1[0]]) & 1) ? TYPE_R : TYPE_L;\n\n // === 3.3.4 Resolving Weak Types ===\n\n // W1 + 5.2. Search backward from each NSM to the first character in the isolating run sequence whose\n // bidirectional type is not BN, and set the NSM to ON if it is an isolate initiator or PDI, and to its\n // type otherwise. If the NSM is the first non-BN character, change the NSM to the type of sos.\n if (charTypeCounts.get(TYPE_NSM)) {\n for (var si = 0; si < seqIndices$1.length; si++) {\n var i$8 = seqIndices$1[si];\n if (charTypes[i$8] & TYPE_NSM) {\n var prevType = sosType;\n for (var sj = si - 1; sj >= 0; sj--) {\n if (!(charTypes[seqIndices$1[sj]] & BN_LIKE_TYPES)) { //5.2 scan back to first non-BN\n prevType = charTypes[seqIndices$1[sj]];\n break\n }\n }\n changeCharType(i$8, (prevType & (ISOLATE_INIT_TYPES | TYPE_PDI)) ? TYPE_ON : prevType);\n }\n }\n }\n\n // W2. Search backward from each instance of a European number until the first strong type (R, L, AL, or sos)\n // is found. If an AL is found, change the type of the European number to Arabic number.\n if (charTypeCounts.get(TYPE_EN)) {\n for (var si$1 = 0; si$1 < seqIndices$1.length; si$1++) {\n var i$9 = seqIndices$1[si$1];\n if (charTypes[i$9] & TYPE_EN) {\n for (var sj$1 = si$1 - 1; sj$1 >= -1; sj$1--) {\n var prevCharType = sj$1 === -1 ? sosType : charTypes[seqIndices$1[sj$1]];\n if (prevCharType & STRONG_TYPES) {\n if (prevCharType === TYPE_AL) {\n changeCharType(i$9, TYPE_AN);\n }\n break\n }\n }\n }\n }\n }\n\n // W3. Change all ALs to R\n if (charTypeCounts.get(TYPE_AL)) {\n for (var si$2 = 0; si$2 < seqIndices$1.length; si$2++) {\n var i$10 = seqIndices$1[si$2];\n if (charTypes[i$10] & TYPE_AL) {\n changeCharType(i$10, TYPE_R);\n }\n }\n }\n\n // W4. A single European separator between two European numbers changes to a European number. A single common\n // separator between two numbers of the same type changes to that type.\n if (charTypeCounts.get(TYPE_ES) || charTypeCounts.get(TYPE_CS)) {\n for (var si$3 = 1; si$3 < seqIndices$1.length - 1; si$3++) {\n var i$11 = seqIndices$1[si$3];\n if (charTypes[i$11] & (TYPE_ES | TYPE_CS)) {\n var prevType$1 = 0, nextType = 0;\n for (var sj$2 = si$3 - 1; sj$2 >= 0; sj$2--) {\n prevType$1 = charTypes[seqIndices$1[sj$2]];\n if (!(prevType$1 & BN_LIKE_TYPES)) { //5.2\n break\n }\n }\n for (var sj$3 = si$3 + 1; sj$3 < seqIndices$1.length; sj$3++) {\n nextType = charTypes[seqIndices$1[sj$3]];\n if (!(nextType & BN_LIKE_TYPES)) { //5.2\n break\n }\n }\n if (prevType$1 === nextType && (charTypes[i$11] === TYPE_ES ? prevType$1 === TYPE_EN : (prevType$1 & (TYPE_EN | TYPE_AN)))) {\n changeCharType(i$11, prevType$1);\n }\n }\n }\n }\n\n // W5. A sequence of European terminators adjacent to European numbers changes to all European numbers.\n if (charTypeCounts.get(TYPE_EN)) {\n for (var si$4 = 0; si$4 < seqIndices$1.length; si$4++) {\n var i$12 = seqIndices$1[si$4];\n if (charTypes[i$12] & TYPE_EN) {\n for (var sj$4 = si$4 - 1; sj$4 >= 0 && (charTypes[seqIndices$1[sj$4]] & (TYPE_ET | BN_LIKE_TYPES)); sj$4--) {\n changeCharType(seqIndices$1[sj$4], TYPE_EN);\n }\n for (si$4++; si$4 < seqIndices$1.length && (charTypes[seqIndices$1[si$4]] & (TYPE_ET | BN_LIKE_TYPES | TYPE_EN)); si$4++) {\n if (charTypes[seqIndices$1[si$4]] !== TYPE_EN) {\n changeCharType(seqIndices$1[si$4], TYPE_EN);\n }\n }\n }\n }\n }\n\n // W6. Otherwise, separators and terminators change to Other Neutral.\n if (charTypeCounts.get(TYPE_ET) || charTypeCounts.get(TYPE_ES) || charTypeCounts.get(TYPE_CS)) {\n for (var si$5 = 0; si$5 < seqIndices$1.length; si$5++) {\n var i$13 = seqIndices$1[si$5];\n if (charTypes[i$13] & (TYPE_ET | TYPE_ES | TYPE_CS)) {\n changeCharType(i$13, TYPE_ON);\n // 5.2 transform adjacent BNs too:\n for (var sj$5 = si$5 - 1; sj$5 >= 0 && (charTypes[seqIndices$1[sj$5]] & BN_LIKE_TYPES); sj$5--) {\n changeCharType(seqIndices$1[sj$5], TYPE_ON);\n }\n for (var sj$6 = si$5 + 1; sj$6 < seqIndices$1.length && (charTypes[seqIndices$1[sj$6]] & BN_LIKE_TYPES); sj$6++) {\n changeCharType(seqIndices$1[sj$6], TYPE_ON);\n }\n }\n }\n }\n\n // W7. Search backward from each instance of a European number until the first strong type (R, L, or sos)\n // is found. If an L is found, then change the type of the European number to L.\n // NOTE: implemented in single forward pass for efficiency\n if (charTypeCounts.get(TYPE_EN)) {\n for (var si$6 = 0, prevStrongType = sosType; si$6 < seqIndices$1.length; si$6++) {\n var i$14 = seqIndices$1[si$6];\n var type = charTypes[i$14];\n if (type & TYPE_EN) {\n if (prevStrongType === TYPE_L) {\n changeCharType(i$14, TYPE_L);\n }\n } else if (type & STRONG_TYPES) {\n prevStrongType = type;\n }\n }\n }\n\n // === 3.3.5 Resolving Neutral and Isolate Formatting Types ===\n\n if (charTypeCounts.get(NEUTRAL_ISOLATE_TYPES)) {\n // N0. Process bracket pairs in an isolating run sequence sequentially in the logical order of the text\n // positions of the opening paired brackets using the logic given below. Within this scope, bidirectional\n // types EN and AN are treated as R.\n var R_TYPES_FOR_N_STEPS = (TYPE_R | TYPE_EN | TYPE_AN);\n var STRONG_TYPES_FOR_N_STEPS = R_TYPES_FOR_N_STEPS | TYPE_L;\n\n // * Identify the bracket pairs in the current isolating run sequence according to BD16.\n var bracketPairs = [];\n {\n var openerStack = [];\n for (var si$7 = 0; si$7 < seqIndices$1.length; si$7++) {\n // NOTE: for any potential bracket character we also test that it still carries a NI\n // type, as that may have been changed earlier. This doesn't seem to be explicitly\n // called out in the spec, but is required for passage of certain tests.\n if (charTypes[seqIndices$1[si$7]] & NEUTRAL_ISOLATE_TYPES) {\n var char = string[seqIndices$1[si$7]];\n var oppositeBracket = (void 0);\n // Opening bracket\n if (openingToClosingBracket(char) !== null) {\n if (openerStack.length < 63) {\n openerStack.push({ char: char, seqIndex: si$7 });\n } else {\n break\n }\n }\n // Closing bracket\n else if ((oppositeBracket = closingToOpeningBracket(char)) !== null) {\n for (var stackIdx = openerStack.length - 1; stackIdx >= 0; stackIdx--) {\n var stackChar = openerStack[stackIdx].char;\n if (stackChar === oppositeBracket ||\n stackChar === closingToOpeningBracket(getCanonicalBracket(char)) ||\n openingToClosingBracket(getCanonicalBracket(stackChar)) === char\n ) {\n bracketPairs.push([openerStack[stackIdx].seqIndex, si$7]);\n openerStack.length = stackIdx; //pop the matching bracket and all following\n break\n }\n }\n }\n }\n }\n bracketPairs.sort(function (a, b) { return a[0] - b[0]; });\n }\n // * For each bracket-pair element in the list of pairs of text positions\n for (var pairIdx = 0; pairIdx < bracketPairs.length; pairIdx++) {\n var ref$1 = bracketPairs[pairIdx];\n var openSeqIdx = ref$1[0];\n var closeSeqIdx = ref$1[1];\n // a. Inspect the bidirectional types of the characters enclosed within the bracket pair.\n // b. If any strong type (either L or R) matching the embedding direction is found, set the type for both\n // brackets in the pair to match the embedding direction.\n var foundStrongType = false;\n var useStrongType = 0;\n for (var si$8 = openSeqIdx + 1; si$8 < closeSeqIdx; si$8++) {\n var i$15 = seqIndices$1[si$8];\n if (charTypes[i$15] & STRONG_TYPES_FOR_N_STEPS) {\n foundStrongType = true;\n var lr = (charTypes[i$15] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;\n if (lr === embedDirection) {\n useStrongType = lr;\n break\n }\n }\n }\n // c. Otherwise, if there is a strong type it must be opposite the embedding direction. Therefore, test\n // for an established context with a preceding strong type by checking backwards before the opening paired\n // bracket until the first strong type (L, R, or sos) is found.\n // 1. If the preceding strong type is also opposite the embedding direction, context is established, so\n // set the type for both brackets in the pair to that direction.\n // 2. Otherwise set the type for both brackets in the pair to the embedding direction.\n if (foundStrongType && !useStrongType) {\n useStrongType = sosType;\n for (var si$9 = openSeqIdx - 1; si$9 >= 0; si$9--) {\n var i$16 = seqIndices$1[si$9];\n if (charTypes[i$16] & STRONG_TYPES_FOR_N_STEPS) {\n var lr$1 = (charTypes[i$16] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;\n if (lr$1 !== embedDirection) {\n useStrongType = lr$1;\n } else {\n useStrongType = embedDirection;\n }\n break\n }\n }\n }\n if (useStrongType) {\n charTypes[seqIndices$1[openSeqIdx]] = charTypes[seqIndices$1[closeSeqIdx]] = useStrongType;\n // * Any number of characters that had original bidirectional character type NSM prior to the application\n // of W1 that immediately follow a paired bracket which changed to L or R under N0 should change to match\n // the type of their preceding bracket.\n if (useStrongType !== embedDirection) {\n for (var si$10 = openSeqIdx + 1; si$10 < seqIndices$1.length; si$10++) {\n if (!(charTypes[seqIndices$1[si$10]] & BN_LIKE_TYPES)) {\n if (getBidiCharType(string[seqIndices$1[si$10]]) & TYPE_NSM) {\n charTypes[seqIndices$1[si$10]] = useStrongType;\n }\n break\n }\n }\n }\n if (useStrongType !== embedDirection) {\n for (var si$11 = closeSeqIdx + 1; si$11 < seqIndices$1.length; si$11++) {\n if (!(charTypes[seqIndices$1[si$11]] & BN_LIKE_TYPES)) {\n if (getBidiCharType(string[seqIndices$1[si$11]]) & TYPE_NSM) {\n charTypes[seqIndices$1[si$11]] = useStrongType;\n }\n break\n }\n }\n }\n }\n }\n\n // N1. A sequence of NIs takes the direction of the surrounding strong text if the text on both sides has the\n // same direction.\n // N2. Any remaining NIs take the embedding direction.\n for (var si$12 = 0; si$12 < seqIndices$1.length; si$12++) {\n if (charTypes[seqIndices$1[si$12]] & NEUTRAL_ISOLATE_TYPES) {\n var niRunStart = si$12, niRunEnd = si$12;\n var prevType$2 = sosType; //si === 0 ? sosType : (charTypes[seqIndices[si - 1]] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L\n for (var si2 = si$12 - 1; si2 >= 0; si2--) {\n if (charTypes[seqIndices$1[si2]] & BN_LIKE_TYPES) {\n niRunStart = si2; //5.2 treat BNs adjacent to NIs as NIs\n } else {\n prevType$2 = (charTypes[seqIndices$1[si2]] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;\n break\n }\n }\n var nextType$1 = eosType;\n for (var si2$1 = si$12 + 1; si2$1 < seqIndices$1.length; si2$1++) {\n if (charTypes[seqIndices$1[si2$1]] & (NEUTRAL_ISOLATE_TYPES | BN_LIKE_TYPES)) {\n niRunEnd = si2$1;\n } else {\n nextType$1 = (charTypes[seqIndices$1[si2$1]] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;\n break\n }\n }\n for (var sj$7 = niRunStart; sj$7 <= niRunEnd; sj$7++) {\n charTypes[seqIndices$1[sj$7]] = prevType$2 === nextType$1 ? prevType$2 : embedDirection;\n }\n si$12 = niRunEnd;\n }\n }\n }\n }\n\n // === 3.3.6 Resolving Implicit Levels ===\n\n for (var i$17 = paragraph.start; i$17 <= paragraph.end; i$17++) {\n var level$3 = embedLevels[i$17];\n var type$1 = charTypes[i$17];\n // I2. For all characters with an odd (right-to-left) embedding level, those of type L, EN or AN go up one level.\n if (level$3 & 1) {\n if (type$1 & (TYPE_L | TYPE_EN | TYPE_AN)) {\n embedLevels[i$17]++;\n }\n }\n // I1. For all characters with an even (left-to-right) embedding level, those of type R go up one level\n // and those of type AN or EN go up two levels.\n else {\n if (type$1 & TYPE_R) {\n embedLevels[i$17]++;\n } else if (type$1 & (TYPE_AN | TYPE_EN)) {\n embedLevels[i$17] += 2;\n }\n }\n\n // 5.2: Resolve any LRE, RLE, LRO, RLO, PDF, or BN to the level of the preceding character if there is one,\n // and otherwise to the base level.\n if (type$1 & BN_LIKE_TYPES) {\n embedLevels[i$17] = i$17 === 0 ? paragraph.level : embedLevels[i$17 - 1];\n }\n\n // 3.4 L1.1-4: Reset the embedding level of segment/paragraph separators, and any sequence of whitespace or\n // isolate formatting characters preceding them or the end of the paragraph, to the paragraph level.\n // NOTE: this will also need to be applied to each individual line ending after line wrapping occurs.\n if (i$17 === paragraph.end || getBidiCharType(string[i$17]) & (TYPE_S | TYPE_B)) {\n for (var j$1 = i$17; j$1 >= 0 && (getBidiCharType(string[j$1]) & TRAILING_TYPES); j$1--) {\n embedLevels[j$1] = paragraph.level;\n }\n }\n }\n }\n\n // DONE! The resolved levels can then be used, after line wrapping, to flip runs of characters\n // according to section 3.4 Reordering Resolved Levels\n return {\n levels: embedLevels,\n paragraphs: paragraphs\n }\n\n function determineAutoEmbedLevel (start, isFSI) {\n // 3.3.1 P2 - P3\n for (var i = start; i < string.length; i++) {\n var charType = charTypes[i];\n if (charType & (TYPE_R | TYPE_AL)) {\n return 1\n }\n if ((charType & (TYPE_B | TYPE_L)) || (isFSI && charType === TYPE_PDI)) {\n return 0\n }\n if (charType & ISOLATE_INIT_TYPES) {\n var pdi = indexOfMatchingPDI(i);\n i = pdi === -1 ? string.length : pdi;\n }\n }\n return 0\n }\n\n function indexOfMatchingPDI (isolateStart) {\n // 3.1.2 BD9\n var isolationLevel = 1;\n for (var i = isolateStart + 1; i < string.length; i++) {\n var charType = charTypes[i];\n if (charType & TYPE_B) {\n break\n }\n if (charType & TYPE_PDI) {\n if (--isolationLevel === 0) {\n return i\n }\n } else if (charType & ISOLATE_INIT_TYPES) {\n isolationLevel++;\n }\n }\n return -1\n }\n }\n\n // Bidi mirrored chars data, auto generated\n var data = \"14>1,j>2,t>2,u>2,1a>g,2v3>1,1>1,1ge>1,1wd>1,b>1,1j>1,f>1,ai>3,-2>3,+1,8>1k0,-1jq>1y7,-1y6>1hf,-1he>1h6,-1h5>1ha,-1h8>1qi,-1pu>1,6>3u,-3s>7,6>1,1>1,f>1,1>1,+2,3>1,1>1,+13,4>1,1>1,6>1eo,-1ee>1,3>1mg,-1me>1mk,-1mj>1mi,-1mg>1mi,-1md>1,1>1,+2,1>10k,-103>1,1>1,4>1,5>1,1>1,+10,3>1,1>8,-7>8,+1,-6>7,+1,a>1,1>1,u>1,u6>1,1>1,+5,26>1,1>1,2>1,2>2,8>1,7>1,4>1,1>1,+5,b8>1,1>1,+3,1>3,-2>1,2>1,1>1,+2,c>1,3>1,1>1,+2,h>1,3>1,a>1,1>1,2>1,3>1,1>1,d>1,f>1,3>1,1a>1,1>1,6>1,7>1,13>1,k>1,1>1,+19,4>1,1>1,+2,2>1,1>1,+18,m>1,a>1,1>1,lk>1,1>1,4>1,2>1,f>1,3>1,1>1,+3,db>1,1>1,+3,3>1,1>1,+2,14qm>1,1>1,+1,6>1,4j>1,j>2,t>2,u>2,2>1,+1\";\n\n var mirrorMap;\n\n function parse () {\n if (!mirrorMap) {\n //const start = performance.now()\n var ref = parseCharacterMap(data, true);\n var map = ref.map;\n var reverseMap = ref.reverseMap;\n // Combine both maps into one\n reverseMap.forEach(function (value, key) {\n map.set(key, value);\n });\n mirrorMap = map;\n //console.log(`mirrored chars parsed in ${performance.now() - start}ms`)\n }\n }\n\n function getMirroredCharacter (char) {\n parse();\n return mirrorMap.get(char) || null\n }\n\n /**\n * Given a string and its resolved embedding levels, build a map of indices to replacement chars\n * for any characters in right-to-left segments that have defined mirrored characters.\n * @param string\n * @param embeddingLevels\n * @param [start]\n * @param [end]\n * @return {Map<number, string>}\n */\n function getMirroredCharactersMap(string, embeddingLevels, start, end) {\n var strLen = string.length;\n start = Math.max(0, start == null ? 0 : +start);\n end = Math.min(strLen - 1, end == null ? strLen - 1 : +end);\n\n var map = new Map();\n for (var i = start; i <= end; i++) {\n if (embeddingLevels[i] & 1) { //only odd (rtl) levels\n var mirror = getMirroredCharacter(string[i]);\n if (mirror !== null) {\n map.set(i, mirror);\n }\n }\n }\n return map\n }\n\n /**\n * Given a start and end denoting a single line within a string, and a set of precalculated\n * bidi embedding levels, produce a list of segments whose ordering should be flipped, in sequence.\n * @param {string} string - the full input string\n * @param {GetEmbeddingLevelsResult} embeddingLevelsResult - the result object from getEmbeddingLevels\n * @param {number} [start] - first character in a subset of the full string\n * @param {number} [end] - last character in a subset of the full string\n * @return {number[][]} - the list of start/end segments that should be flipped, in order.\n */\n function getReorderSegments(string, embeddingLevelsResult, start, end) {\n var strLen = string.length;\n start = Math.max(0, start == null ? 0 : +start);\n end = Math.min(strLen - 1, end == null ? strLen - 1 : +end);\n\n var segments = [];\n embeddingLevelsResult.paragraphs.forEach(function (paragraph) {\n var lineStart = Math.max(start, paragraph.start);\n var lineEnd = Math.min(end, paragraph.end);\n if (lineStart < lineEnd) {\n // Local slice for mutation\n var lineLevels = embeddingLevelsResult.levels.slice(lineStart, lineEnd + 1);\n\n // 3.4 L1.4: Reset any sequence of whitespace characters and/or isolate formatting characters at the\n // end of the line to the paragraph level.\n for (var i = lineEnd; i >= lineStart && (getBidiCharType(string[i]) & TRAILING_TYPES); i--) {\n lineLevels[i] = paragraph.level;\n }\n\n // L2. From the highest level found in the text to the lowest odd level on each line, including intermediate levels\n // not actually present in the text, reverse any contiguous sequence of characters that are at that level or higher.\n var maxLevel = paragraph.level;\n var minOddLevel = Infinity;\n for (var i$1 = 0; i$1 < lineLevels.length; i$1++) {\n var level = lineLevels[i$1];\n if (level > maxLevel) { maxLevel = level; }\n if (level < minOddLevel) { minOddLevel = level | 1; }\n }\n for (var lvl = maxLevel; lvl >= minOddLevel; lvl--) {\n for (var i$2 = 0; i$2 < lineLevels.length; i$2++) {\n if (lineLevels[i$2] >= lvl) {\n var segStart = i$2;\n while (i$2 + 1 < lineLevels.length && lineLevels[i$2 + 1] >= lvl) {\n i$2++;\n }\n if (i$2 > segStart) {\n segments.push([segStart + lineStart, i$2 + lineStart]);\n }\n }\n }\n }\n }\n });\n return segments\n }\n\n /**\n * @param {string} string\n * @param {GetEmbeddingLevelsResult} embedLevelsResult\n * @param {number} [start]\n * @param {number} [end]\n * @return {string} the new string with bidi segments reordered\n */\n function getReorderedString(string, embedLevelsResult, start, end) {\n var indices = getReorderedIndices(string, embedLevelsResult, start, end);\n var chars = [].concat( string );\n indices.forEach(function (charIndex, i) {\n chars[i] = (\n (embedLevelsResult.levels[charIndex] & 1) ? getMirroredCharacter(string[charIndex]) : null\n ) || string[charIndex];\n });\n return chars.join('')\n }\n\n /**\n * @param {string} string\n * @param {GetEmbeddingLevelsResult} embedLevelsResult\n * @param {number} [start]\n * @param {number} [end]\n * @return {number[]} an array with character indices in their new bidi order\n */\n function getReorderedIndices(string, embedLevelsResult, start, end) {\n var segments = getReorderSegments(string, embedLevelsResult, start, end);\n // Fill an array with indices\n var indices = [];\n for (var i = 0; i < string.length; i++) {\n indices[i] = i;\n }\n // Reverse each segment in order\n segments.forEach(function (ref) {\n var start = ref[0];\n var end = ref[1];\n\n var slice = indices.slice(start, end + 1);\n for (var i = slice.length; i--;) {\n indices[end - i] = slice[i];\n }\n });\n return indices\n }\n\n exports.closingToOpeningBracket = closingToOpeningBracket;\n exports.getBidiCharType = getBidiCharType;\n exports.getBidiCharTypeName = getBidiCharTypeName;\n exports.getCanonicalBracket = getCanonicalBracket;\n exports.getEmbeddingLevels = getEmbeddingLevels;\n exports.getMirroredCharacter = getMirroredCharacter;\n exports.getMirroredCharactersMap = getMirroredCharactersMap;\n exports.getReorderSegments = getReorderSegments;\n exports.getReorderedIndices = getReorderedIndices;\n exports.getReorderedString = getReorderedString;\n exports.openingToClosingBracket = openingToClosingBracket;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n return exports;\n\n}({}));\nreturn bidi}\n\nexport default bidiFactory;\n","import { ShaderChunk, UniformsUtils, MeshDepthMaterial, RGBADepthPacking, MeshDistanceMaterial, ShaderLib, Matrix4, Vector3, Mesh, CylinderGeometry, Vector2, MeshStandardMaterial, DoubleSide } from 'three';\n\n/**\n * Regular expression for matching the `void main() {` opener line in GLSL.\n * @type {RegExp}\n */\nconst voidMainRegExp = /\\bvoid\\s+main\\s*\\(\\s*\\)\\s*{/g;\n\n/**\n * Recursively expands all `#include <xyz>` statements within string of shader code.\n * Copied from three's WebGLProgram#parseIncludes for external use.\n *\n * @param {string} source - The GLSL source code to evaluate\n * @return {string} The GLSL code with all includes expanded\n */\nfunction expandShaderIncludes( source ) {\n const pattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;\n function replace(match, include) {\n let chunk = ShaderChunk[include];\n return chunk ? expandShaderIncludes(chunk) : match\n }\n return source.replace( pattern, replace )\n}\n\n/*\n * This is a direct copy of MathUtils.generateUUID from Three.js, to preserve compatibility with three\n * versions before 0.113.0 as it was changed from Math to MathUtils in that version.\n * https://github.com/mrdoob/three.js/blob/dd8b5aa3b270c17096b90945cd2d6d1b13aaec53/src/math/MathUtils.js#L16\n */\n\nconst _lut = [];\n\nfor (let i = 0; i < 256; i++) {\n _lut[i] = (i < 16 ? '0' : '') + (i).toString(16);\n}\n\nfunction generateUUID() {\n\n // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136\n\n const d0 = Math.random() * 0xffffffff | 0;\n const d1 = Math.random() * 0xffffffff | 0;\n const d2 = Math.random() * 0xffffffff | 0;\n const d3 = Math.random() * 0xffffffff | 0;\n const uuid = _lut[d0 & 0xff] + _lut[d0 >> 8 & 0xff] + _lut[d0 >> 16 & 0xff] + _lut[d0 >> 24 & 0xff] + '-' +\n _lut[d1 & 0xff] + _lut[d1 >> 8 & 0xff] + '-' + _lut[d1 >> 16 & 0x0f | 0x40] + _lut[d1 >> 24 & 0xff] + '-' +\n _lut[d2 & 0x3f | 0x80] + _lut[d2 >> 8 & 0xff] + '-' + _lut[d2 >> 16 & 0xff] + _lut[d2 >> 24 & 0xff] +\n _lut[d3 & 0xff] + _lut[d3 >> 8 & 0xff] + _lut[d3 >> 16 & 0xff] + _lut[d3 >> 24 & 0xff];\n\n // .toUpperCase() here flattens concatenated strings to save heap memory space.\n return uuid.toUpperCase()\n\n}\n\n// Local assign polyfill to avoid importing troika-core\nconst assign = Object.assign || function(/*target, ...sources*/) {\n let target = arguments[0];\n for (let i = 1, len = arguments.length; i < len; i++) {\n let source = arguments[i];\n if (source) {\n for (let prop in source) {\n if (Object.prototype.hasOwnProperty.call(source, prop)) {\n target[prop] = source[prop];\n }\n }\n }\n }\n return target\n};\n\n\nconst epoch = Date.now();\nconst CONSTRUCTOR_CACHE = new WeakMap();\nconst SHADER_UPGRADE_CACHE = new Map();\n\n// Material ids must be integers, but we can't access the increment from Three's `Material` module,\n// so let's choose a sufficiently large starting value that should theoretically never collide.\nlet materialInstanceId = 1e10;\n\n/**\n * A utility for creating a custom shader material derived from another material's\n * shaders. This allows you to inject custom shader logic and transforms into the\n * builtin ThreeJS materials without having to recreate them from scratch.\n *\n * @param {THREE.Material} baseMaterial - the original material to derive from\n *\n * @param {Object} options - How the base material should be modified.\n * @param {Object=} options.defines - Custom `defines` for the material\n * @param {Object=} options.extensions - Custom `extensions` for the material, e.g. `{derivatives: true}`\n * @param {Object=} options.uniforms - Custom `uniforms` for use in the modified shader. These can\n * be accessed and manipulated via the resulting material's `uniforms` property, just like\n * in a ShaderMaterial. You do not need to repeat the base material's own uniforms here.\n * @param {String=} options.timeUniform - If specified, a uniform of this name will be injected into\n * both shaders, and it will automatically be updated on each render frame with a number of\n * elapsed milliseconds. The \"zero\" epoch time is not significant so don't rely on this as a\n * true calendar time.\n * @param {String=} options.vertexDefs - Custom GLSL code to inject into the vertex shader's top-level\n * definitions, above the `void main()` function.\n * @param {String=} options.vertexMainIntro - Custom GLSL code to inject at the top of the vertex\n * shader's `void main` function.\n * @param {String=} options.vertexMainOutro - Custom GLSL code to inject at the end of the vertex\n * shader's `void main` function.\n * @param {String=} options.vertexTransform - Custom GLSL code to manipulate the `position`, `normal`,\n * and/or `uv` vertex attributes. This code will be wrapped within a standalone function with\n * those attributes exposed by their normal names as read/write values.\n * @param {String=} options.fragmentDefs - Custom GLSL code to inject into the fragment shader's top-level\n * definitions, above the `void main()` function.\n * @param {String=} options.fragmentMainIntro - Custom GLSL code to inject at the top of the fragment\n * shader's `void main` function.\n * @param {String=} options.fragmentMainOutro - Custom GLSL code to inject at the end of the fragment\n * shader's `void main` function. You can manipulate `gl_FragColor` here but keep in mind it goes\n * after any of ThreeJS's color postprocessing shader chunks (tonemapping, fog, etc.), so if you\n * want those to apply to your changes use `fragmentColorTransform` instead.\n * @param {String=} options.fragmentColorTransform - Custom GLSL code to manipulate the `gl_FragColor`\n * output value. Will be injected near the end of the `void main` function, but before any\n * of ThreeJS's color postprocessing shader chunks (tonemapping, fog, etc.), and before the\n * `fragmentMainOutro`.\n * @param {function({fragmentShader: string, vertexShader:string}):\n * {fragmentShader: string, vertexShader:string}} options.customRewriter - A function\n * for performing custom rewrites of the full shader code. Useful if you need to do something\n * special that's not covered by the other builtin options. This function will be executed before\n * any other transforms are applied.\n * @param {boolean=} options.chained - Set to `true` to prototype-chain the derived material to the base\n * material, rather than the default behavior of copying it. This allows the derived material to\n * automatically pick up changes made to the base material and its properties. This can be useful\n * where the derived material is hidden from the user as an implementation detail, allowing them\n * to work with the original material like normal. But it can result in unexpected behavior if not\n * handled carefully.\n *\n * @return {THREE.Material}\n *\n * The returned material will also have two new methods, `getDepthMaterial()` and `getDistanceMaterial()`,\n * which can be called to get a variant of the derived material for use in shadow casting. If the\n * target mesh is expected to cast shadows, then you can assign these to the mesh's `customDepthMaterial`\n * (for directional and spot lights) and/or `customDistanceMaterial` (for point lights) properties to\n * allow the cast shadow to honor your derived shader's vertex transforms and discarded fragments. These\n * will also set a custom `#define IS_DEPTH_MATERIAL` or `#define IS_DISTANCE_MATERIAL` that you can look\n * for in your derived shaders with `#ifdef` to customize their behavior for the depth or distance\n * scenarios, e.g. skipping antialiasing or expensive shader logic.\n */\nfunction createDerivedMaterial(baseMaterial, options) {\n // Generate a key that is unique to the content of these `options`. We'll use this\n // throughout for caching and for generating the upgraded shader code. This increases\n // the likelihood that the resulting shaders will line up across multiple calls so\n // their GL programs can be shared and cached.\n const optionsKey = getKeyForOptions(options);\n\n // First check to see if we've already derived from this baseMaterial using this\n // unique set of options, and if so reuse the constructor to avoid some allocations.\n let ctorsByDerivation = CONSTRUCTOR_CACHE.get(baseMaterial);\n if (!ctorsByDerivation) {\n CONSTRUCTOR_CACHE.set(baseMaterial, (ctorsByDerivation = Object.create(null)));\n }\n if (ctorsByDerivation[optionsKey]) {\n return new ctorsByDerivation[optionsKey]()\n }\n\n const privateBeforeCompileProp = `_onBeforeCompile${optionsKey}`;\n\n // Private onBeforeCompile handler that injects the modified shaders and uniforms when\n // the renderer switches to this material's program\n const onBeforeCompile = function (shaderInfo, renderer) {\n baseMaterial.onBeforeCompile.call(this, shaderInfo, renderer);\n\n // Upgrade the shaders, caching the result by incoming source code\n const cacheKey = this.customProgramCacheKey() + '|' + shaderInfo.vertexShader + '|' + shaderInfo.fragmentShader;\n let upgradedShaders = SHADER_UPGRADE_CACHE[cacheKey];\n if (!upgradedShaders) {\n const upgraded = upgradeShaders(this, shaderInfo, options, optionsKey);\n upgradedShaders = SHADER_UPGRADE_CACHE[cacheKey] = upgraded;\n }\n\n // Inject upgraded shaders and uniforms into the program\n shaderInfo.vertexShader = upgradedShaders.vertexShader;\n shaderInfo.fragmentShader = upgradedShaders.fragmentShader;\n assign(shaderInfo.uniforms, this.uniforms);\n\n // Inject auto-updating time uniform if requested\n if (options.timeUniform) {\n shaderInfo.uniforms[options.timeUniform] = {\n get value() {return Date.now() - epoch}\n };\n }\n\n // Users can still add their own handlers on top of ours\n if (this[privateBeforeCompileProp]) {\n this[privateBeforeCompileProp](shaderInfo);\n }\n };\n\n const DerivedMaterial = function DerivedMaterial() {\n return derive(options.chained ? baseMaterial : baseMaterial.clone())\n };\n\n const derive = function(base) {\n // Prototype chain to the base material\n const derived = Object.create(base, descriptor);\n\n // Store the baseMaterial for reference; this is always the original even when cloning\n Object.defineProperty(derived, 'baseMaterial', { value: baseMaterial });\n\n // Needs its own ids\n Object.defineProperty(derived, 'id', { value: materialInstanceId++ });\n derived.uuid = generateUUID();\n\n // Merge uniforms, defines, and extensions\n derived.uniforms = assign({}, base.uniforms, options.uniforms);\n derived.defines = assign({}, base.defines, options.defines);\n derived.defines[`TROIKA_DERIVED_MATERIAL_${optionsKey}`] = ''; //force a program change from the base material\n derived.extensions = assign({}, base.extensions, options.extensions);\n\n // Don't inherit EventDispatcher listeners\n derived._listeners = undefined;\n\n return derived\n };\n\n const descriptor = {\n constructor: {value: DerivedMaterial},\n isDerivedMaterial: {value: true},\n\n type: {\n get: () => baseMaterial.type,\n set: (value) => {baseMaterial.type = value;}\n },\n\n isDerivedFrom: {\n writable: true,\n configurable: true,\n value: function (testMaterial) {\n const base = this.baseMaterial;\n return testMaterial === base || (base.isDerivedMaterial && base.isDerivedFrom(testMaterial)) || false\n }\n },\n\n customProgramCacheKey: {\n writable: true,\n configurable: true,\n value: function () {\n return baseMaterial.customProgramCacheKey() + '|' + optionsKey\n }\n },\n\n onBeforeCompile: {\n get() {\n return onBeforeCompile\n },\n set(fn) {\n this[privateBeforeCompileProp] = fn;\n }\n },\n\n copy: {\n writable: true,\n configurable: true,\n value: function (source) {\n baseMaterial.copy.call(this, source);\n if (!baseMaterial.isShaderMaterial && !baseMaterial.isDerivedMaterial) {\n assign(this.extensions, source.extensions);\n assign(this.defines, source.defines);\n assign(this.uniforms, UniformsUtils.clone(source.uniforms));\n }\n return this\n }\n },\n\n clone: {\n writable: true,\n configurable: true,\n value: function () {\n const newBase = new baseMaterial.constructor();\n return derive(newBase).copy(this)\n }\n },\n\n /**\n * Utility to get a MeshDepthMaterial that will honor this derived material's vertex\n * transformations and discarded fragments.\n */\n getDepthMaterial: {\n writable: true,\n configurable: true,\n value: function() {\n let depthMaterial = this._depthMaterial;\n if (!depthMaterial) {\n depthMaterial = this._depthMaterial = createDerivedMaterial(\n baseMaterial.isDerivedMaterial\n ? baseMaterial.getDepthMaterial()\n : new MeshDepthMaterial({ depthPacking: RGBADepthPacking }),\n options\n );\n depthMaterial.defines.IS_DEPTH_MATERIAL = '';\n depthMaterial.uniforms = this.uniforms; //automatically recieve same uniform values\n }\n return depthMaterial\n }\n },\n\n /**\n * Utility to get a MeshDistanceMaterial that will honor this derived material's vertex\n * transformations and discarded fragments.\n */\n getDistanceMaterial: {\n writable: true,\n configurable: true,\n value: function() {\n let distanceMaterial = this._distanceMaterial;\n if (!distanceMaterial) {\n distanceMaterial = this._distanceMaterial = createDerivedMaterial(\n baseMaterial.isDerivedMaterial\n ? baseMaterial.getDistanceMaterial()\n : new MeshDistanceMaterial(),\n options\n );\n distanceMaterial.defines.IS_DISTANCE_MATERIAL = '';\n distanceMaterial.uniforms = this.uniforms; //automatically recieve same uniform values\n }\n return distanceMaterial\n }\n },\n\n dispose: {\n writable: true,\n configurable: true,\n value() {\n const {_depthMaterial, _distanceMaterial} = this;\n if (_depthMaterial) _depthMaterial.dispose();\n if (_distanceMaterial) _distanceMaterial.dispose();\n baseMaterial.dispose.call(this);\n }\n }\n };\n\n ctorsByDerivation[optionsKey] = DerivedMaterial;\n return new DerivedMaterial()\n}\n\n\nfunction upgradeShaders(material, {vertexShader, fragmentShader}, options, key) {\n let {\n vertexDefs,\n vertexMainIntro,\n vertexMainOutro,\n vertexTransform,\n fragmentDefs,\n fragmentMainIntro,\n fragmentMainOutro,\n fragmentColorTransform,\n customRewriter,\n timeUniform\n } = options;\n\n vertexDefs = vertexDefs || '';\n vertexMainIntro = vertexMainIntro || '';\n vertexMainOutro = vertexMainOutro || '';\n fragmentDefs = fragmentDefs || '';\n fragmentMainIntro = fragmentMainIntro || '';\n fragmentMainOutro = fragmentMainOutro || '';\n\n // Expand includes if needed\n if (vertexTransform || customRewriter) {\n vertexShader = expandShaderIncludes(vertexShader);\n }\n if (fragmentColorTransform || customRewriter) {\n // We need to be able to find postprocessing chunks after include expansion in order to\n // put them after the fragmentColorTransform, so mark them with comments first. Even if\n // this particular derivation doesn't have a fragmentColorTransform, other derivations may,\n // so we still mark them.\n fragmentShader = fragmentShader.replace(\n /^[ \\t]*#include <((?:tonemapping|encodings|colorspace|fog|premultiplied_alpha|dithering)_fragment)>/gm,\n '\\n//!BEGIN_POST_CHUNK $1\\n$&\\n//!END_POST_CHUNK\\n'\n );\n fragmentShader = expandShaderIncludes(fragmentShader);\n }\n\n // Apply custom rewriter function\n if (customRewriter) {\n let res = customRewriter({vertexShader, fragmentShader});\n vertexShader = res.vertexShader;\n fragmentShader = res.fragmentShader;\n }\n\n // The fragmentColorTransform needs to go before any postprocessing chunks, so extract\n // those and re-insert them into the outro in the correct place:\n if (fragmentColorTransform) {\n let postChunks = [];\n fragmentShader = fragmentShader.replace(\n /^\\/\\/!BEGIN_POST_CHUNK[^]+?^\\/\\/!END_POST_CHUNK/gm, // [^]+? = non-greedy match of any chars including newlines\n match => {\n postChunks.push(match);\n return ''\n }\n );\n fragmentMainOutro = `${fragmentColorTransform}\\n${postChunks.join('\\n')}\\n${fragmentMainOutro}`;\n }\n\n // Inject auto-updating time uniform if requested\n if (timeUniform) {\n const code = `\\nuniform float ${timeUniform};\\n`;\n vertexDefs = code + vertexDefs;\n fragmentDefs = code + fragmentDefs;\n }\n\n // Inject a function for the vertexTransform and rename all usages of position/normal/uv\n if (vertexTransform) {\n // Hoist these defs to the very top so they work in other function defs\n vertexShader = `vec3 troika_position_${key};\nvec3 troika_normal_${key};\nvec2 troika_uv_${key};\n${vertexShader}\n`;\n vertexDefs = `${vertexDefs}\nvoid troikaVertexTransform${key}(inout vec3 position, inout vec3 normal, inout vec2 uv) {\n ${vertexTransform}\n}\n`;\n vertexMainIntro = `\ntroika_position_${key} = vec3(position);\ntroika_normal_${key} = vec3(normal);\ntroika_uv_${key} = vec2(uv);\ntroikaVertexTransform${key}(troika_position_${key}, troika_normal_${key}, troika_uv_${key});\n${vertexMainIntro}\n`;\n vertexShader = vertexShader.replace(/\\b(position|normal|uv)\\b/g, (match, match1, index, fullStr) => {\n return /\\battribute\\s+vec[23]\\s+$/.test(fullStr.substr(0, index)) ? match1 : `troika_${match1}_${key}`\n });\n\n // Three r152 introduced the MAP_UV token, replace it too if it's pointing to the main 'uv'\n // Perhaps the other textures too going forward?\n if (!(material.map && material.map.channel > 0)) {\n vertexShader = vertexShader.replace(/\\bMAP_UV\\b/g, `troika_uv_${key}`);\n }\n }\n\n // Inject defs and intro/outro snippets\n vertexShader = injectIntoShaderCode(vertexShader, key, vertexDefs, vertexMainIntro, vertexMainOutro);\n fragmentShader = injectIntoShaderCode(fragmentShader, key, fragmentDefs, fragmentMainIntro, fragmentMainOutro);\n\n return {\n vertexShader,\n fragmentShader\n }\n}\n\nfunction injectIntoShaderCode(shaderCode, id, defs, intro, outro) {\n if (intro || outro || defs) {\n shaderCode = shaderCode.replace(voidMainRegExp, `\n${defs}\nvoid troikaOrigMain${id}() {`\n );\n shaderCode += `\nvoid main() {\n ${intro}\n troikaOrigMain${id}();\n ${outro}\n}`;\n }\n return shaderCode\n}\n\n\nfunction optionsJsonReplacer(key, value) {\n return key === 'uniforms' ? undefined : typeof value === 'function' ? value.toString() : value\n}\n\nlet _idCtr = 0;\nconst optionsHashesToIds = new Map();\nfunction getKeyForOptions(options) {\n const optionsHash = JSON.stringify(options, optionsJsonReplacer);\n let id = optionsHashesToIds.get(optionsHash);\n if (id == null) {\n optionsHashesToIds.set(optionsHash, (id = ++_idCtr));\n }\n return id\n}\n\n// Copied from threejs WebGLPrograms.js so we can resolve builtin materials to their shaders\n// TODO how can we keep this from getting stale?\nconst MATERIAL_TYPES_TO_SHADERS = {\n MeshDepthMaterial: 'depth',\n MeshDistanceMaterial: 'distanceRGBA',\n MeshNormalMaterial: 'normal',\n MeshBasicMaterial: 'basic',\n MeshLambertMaterial: 'lambert',\n MeshPhongMaterial: 'phong',\n MeshToonMaterial: 'toon',\n MeshStandardMaterial: 'physical',\n MeshPhysicalMaterial: 'physical',\n MeshMatcapMaterial: 'matcap',\n LineBasicMaterial: 'basic',\n LineDashedMaterial: 'dashed',\n PointsMaterial: 'points',\n ShadowMaterial: 'shadow',\n SpriteMaterial: 'sprite'\n};\n\n/**\n * Given a Three.js `Material` instance, find the shaders/uniforms that will be\n * used to render that material.\n *\n * @param material - the Material instance\n * @return {object} - the material's shader info: `{uniforms:{}, fragmentShader:'', vertexShader:''}`\n */\nfunction getShadersForMaterial(material) {\n let builtinType = MATERIAL_TYPES_TO_SHADERS[material.type];\n return builtinType ? ShaderLib[builtinType] : material //TODO fallback for unknown type?\n}\n\n/**\n * Find all uniforms and their types within a shader code string.\n *\n * @param {string} shader - The shader code to parse\n * @return {object} mapping of uniform names to their glsl type\n */\nfunction getShaderUniformTypes(shader) {\n let uniformRE = /\\buniform\\s+(int|float|vec[234]|mat[34])\\s+([A-Za-z_][\\w]*)/g;\n let uniforms = Object.create(null);\n let match;\n while ((match = uniformRE.exec(shader)) !== null) {\n uniforms[match[2]] = match[1];\n }\n return uniforms\n}\n\n/**\n * Helper for smoothing out the `m.getInverse(x)` --> `m.copy(x).invert()` conversion\n * that happened in ThreeJS r123.\n * @param {Matrix4} srcMatrix\n * @param {Matrix4} [tgtMatrix]\n */\nfunction invertMatrix4(srcMatrix, tgtMatrix = new Matrix4()) {\n if (typeof tgtMatrix.invert === 'function') {\n tgtMatrix.copy(srcMatrix).invert();\n } else {\n tgtMatrix.getInverse(srcMatrix);\n }\n return tgtMatrix\n}\n\n/*\nInput geometry is a cylinder with r=1, height in y dimension from 0 to 1,\ndivided into a reasonable number of height segments.\n*/\n\nconst vertexDefs = `\nuniform vec3 pointA;\nuniform vec3 controlA;\nuniform vec3 controlB;\nuniform vec3 pointB;\nuniform float radius;\nvarying float bezierT;\n\nvec3 cubicBezier(vec3 p1, vec3 c1, vec3 c2, vec3 p2, float t) {\n float t2 = 1.0 - t;\n float b0 = t2 * t2 * t2;\n float b1 = 3.0 * t * t2 * t2;\n float b2 = 3.0 * t * t * t2;\n float b3 = t * t * t;\n return b0 * p1 + b1 * c1 + b2 * c2 + b3 * p2;\n}\n\nvec3 cubicBezierDerivative(vec3 p1, vec3 c1, vec3 c2, vec3 p2, float t) {\n float t2 = 1.0 - t;\n return -3.0 * p1 * t2 * t2 +\n c1 * (3.0 * t2 * t2 - 6.0 * t2 * t) +\n c2 * (6.0 * t2 * t - 3.0 * t * t) +\n 3.0 * p2 * t * t;\n}\n`;\n\nconst vertexTransform = `\nfloat t = position.y;\nbezierT = t;\nvec3 bezierCenterPos = cubicBezier(pointA, controlA, controlB, pointB, t);\nvec3 bezierDir = normalize(cubicBezierDerivative(pointA, controlA, controlB, pointB, t));\n\n// Make \"sideways\" always perpendicular to the camera ray; this ensures that any twists\n// in the cylinder occur where you won't see them: \nvec3 viewDirection = normalMatrix * vec3(0.0, 0.0, 1.0);\nif (bezierDir == viewDirection) {\n bezierDir = normalize(cubicBezierDerivative(pointA, controlA, controlB, pointB, t == 1.0 ? t - 0.0001 : t + 0.0001));\n}\nvec3 sideways = normalize(cross(bezierDir, viewDirection));\nvec3 upish = normalize(cross(sideways, bezierDir));\n\n// Build a matrix for transforming this disc in the cylinder:\nmat4 discTx;\ndiscTx[0].xyz = sideways * radius;\ndiscTx[1].xyz = bezierDir * radius;\ndiscTx[2].xyz = upish * radius;\ndiscTx[3].xyz = bezierCenterPos;\ndiscTx[3][3] = 1.0;\n\n// Apply transform, ignoring original y\nposition = (discTx * vec4(position.x, 0.0, position.z, 1.0)).xyz;\nnormal = normalize(mat3(discTx) * normal);\n`;\n\nconst fragmentDefs = `\nuniform vec3 dashing;\nvarying float bezierT;\n`;\n\nconst fragmentMainIntro = `\nif (dashing.x + dashing.y > 0.0) {\n float dashFrac = mod(bezierT - dashing.z, dashing.x + dashing.y);\n if (dashFrac > dashing.x) {\n discard;\n }\n}\n`;\n\n// Debugging: separate color for each of the 6 sides:\n// const fragmentColorTransform = `\n// float sideNum = floor(vUV.x * 6.0);\n// vec3 mixColor = sideNum < 1.0 ? vec3(1.0, 0.0, 0.0) :\n// sideNum < 2.0 ? vec3(0.0, 1.0, 1.0) :\n// sideNum < 3.0 ? vec3(1.0, 1.0, 0.0) :\n// sideNum < 4.0 ? vec3(0.0, 0.0, 1.0) :\n// sideNum < 5.0 ? vec3(0.0, 1.0, 0.0) :\n// vec3(1.0, 0.0, 1.0);\n// gl_FragColor.xyz = mix(gl_FragColor.xyz, mixColor, 0.5);\n// `\n\n\n\nfunction createBezierMeshMaterial(baseMaterial) {\n return createDerivedMaterial(\n baseMaterial,\n {\n chained: true,\n uniforms: {\n pointA: {value: new Vector3()},\n controlA: {value: new Vector3()},\n controlB: {value: new Vector3()},\n pointB: {value: new Vector3()},\n radius: {value: 0.01},\n dashing: {value: new Vector3()} //on, off, offset\n },\n vertexDefs,\n vertexTransform,\n fragmentDefs,\n fragmentMainIntro\n }\n )\n}\n\nlet geometry = null;\n\nconst defaultBaseMaterial = /*#__PURE__*/new MeshStandardMaterial({color: 0xffffff, side: DoubleSide});\n\n\n/**\n * A ThreeJS `Mesh` that bends a tube shape along a 3D cubic bezier path. The bending is done\n * by deforming a straight cylindrical geometry in the vertex shader based on a set of four\n * control point uniforms. It patches the necessary GLSL into the mesh's assigned `material`\n * automatically.\n *\n * The cubiz bezier path is determined by its four `Vector3` properties:\n * - `pointA`\n * - `controlA`\n * - `controlB`\n * - `pointB`\n *\n * The tube's radius is controlled by its `radius` property, which defaults to `0.01`.\n *\n * You can also give the tube a dashed appearance with two properties:\n *\n * - `dashArray` - an array of two numbers, defining the length of \"on\" and \"off\" parts of\n * the dash. Each is a 0-1 ratio of the entire path's length. (Actually this is the `t` length\n * used as input to the cubic bezier function, not its visible length.)\n * - `dashOffset` - offset of where the dash starts. You can animate this to make the dashes move.\n *\n * Note that the dashes will appear like a hollow tube, not solid. This will be more apparent on\n * thicker tubes.\n *\n * TODO: proper geometry bounding sphere and raycasting\n * TODO: allow control of the geometry's segment counts\n */\nclass BezierMesh extends Mesh {\n static getGeometry() {\n return geometry || (geometry =\n new CylinderGeometry(1, 1, 1, 6, 64).translate(0, 0.5, 0)\n )\n }\n\n constructor() {\n super(\n BezierMesh.getGeometry(),\n defaultBaseMaterial\n );\n\n this.pointA = new Vector3();\n this.controlA = new Vector3();\n this.controlB = new Vector3();\n this.pointB = new Vector3();\n this.radius = 0.01;\n this.dashArray = new Vector2();\n this.dashOffset = 0;\n\n // TODO - disabling frustum culling until I figure out how to customize the\n // geometry's bounding sphere that gets used\n this.frustumCulled = false;\n }\n\n // Handler for automatically wrapping the base material with our upgrades. We do the wrapping\n // lazily on _read_ rather than write to avoid unnecessary wrapping on transient values.\n get material() {\n let derivedMaterial = this._derivedMaterial;\n const baseMaterial = this._baseMaterial || this._defaultMaterial || (this._defaultMaterial = defaultBaseMaterial.clone());\n if (!derivedMaterial || derivedMaterial.baseMaterial !== baseMaterial) {\n derivedMaterial = this._derivedMaterial = createBezierMeshMaterial(baseMaterial);\n // dispose the derived material when its base material is disposed:\n baseMaterial.addEventListener('dispose', function onDispose() {\n baseMaterial.removeEventListener('dispose', onDispose);\n derivedMaterial.dispose();\n });\n }\n return derivedMaterial\n }\n set material(baseMaterial) {\n this._baseMaterial = baseMaterial;\n }\n\n // Create and update material for shadows upon request:\n get customDepthMaterial() {\n return this.material.getDepthMaterial()\n }\n set customDepthMaterial(m) {\n // future: let the user override with their own?\n }\n get customDistanceMaterial() {\n return this.material.getDistanceMaterial()\n }\n set customDistanceMaterial(m) {\n // future: let the user override with their own?\n }\n\n onBeforeRender() {\n const {uniforms} = this.material;\n const {pointA, controlA, controlB, pointB, radius, dashArray, dashOffset} = this;\n uniforms.pointA.value.copy(pointA);\n uniforms.controlA.value.copy(controlA);\n uniforms.controlB.value.copy(controlB);\n uniforms.pointB.value.copy(pointB);\n uniforms.radius.value = radius;\n uniforms.dashing.value.set(dashArray.x, dashArray.y, dashOffset || 0);\n }\n\n raycast(/*raycaster, intersects*/) {\n // TODO - just fail for now\n }\n}\n\nexport { BezierMesh, createDerivedMaterial, expandShaderIncludes, getShaderUniformTypes, getShadersForMaterial, invertMatrix4, voidMainRegExp };\n","import { Texture, LinearFilter, Color, InstancedBufferGeometry, Sphere, Box3, InstancedBufferAttribute, PlaneGeometry, Vector2, Vector4, Matrix3, Mesh, MeshBasicMaterial, DoubleSide, Matrix4, Vector3, DataTexture, RGBAFormat, FloatType, DynamicDrawUsage } from 'three';\nimport { defineWorkerModule, terminateWorker } from 'troika-worker-utils';\nimport createSDFGenerator from 'webgl-sdf-generator';\nimport bidiFactory from 'bidi-js';\nimport { createDerivedMaterial, voidMainRegExp } from 'troika-three-utils';\n\n/*!\nCustom build of Typr.ts (https://github.com/fredli74/Typr.ts) for use in Troika text rendering.\nOriginal MIT license applies: https://github.com/fredli74/Typr.ts/blob/master/LICENSE\n*/\nfunction typrFactory(){return \"undefined\"==typeof window&&(self.window=self),function(r){var e={parse:function(r){var t=e._bin,a=new Uint8Array(r);if(\"ttcf\"==t.readASCII(a,0,4)){var n=4;t.readUshort(a,n),n+=2,t.readUshort(a,n),n+=2;var o=t.readUint(a,n);n+=4;for(var s=[],i=0;i<o;i++){var h=t.readUint(a,n);n+=4,s.push(e._readFont(a,h));}return s}return [e._readFont(a,0)]},_readFont:function(r,t){var a=e._bin,n=t;a.readFixed(r,t),t+=4;var o=a.readUshort(r,t);t+=2,a.readUshort(r,t),t+=2,a.readUshort(r,t),t+=2,a.readUshort(r,t),t+=2;for(var s=[\"cmap\",\"head\",\"hhea\",\"maxp\",\"hmtx\",\"name\",\"OS/2\",\"post\",\"loca\",\"glyf\",\"kern\",\"CFF \",\"GDEF\",\"GPOS\",\"GSUB\",\"SVG \"],i={_data:r,_offset:n},h={},d=0;d<o;d++){var f=a.readASCII(r,t,4);t+=4,a.readUint(r,t),t+=4;var u=a.readUint(r,t);t+=4;var l=a.readUint(r,t);t+=4,h[f]={offset:u,length:l};}for(d=0;d<s.length;d++){var v=s[d];h[v]&&(i[v.trim()]=e[v.trim()].parse(r,h[v].offset,h[v].length,i));}return i},_tabOffset:function(r,t,a){for(var n=e._bin,o=n.readUshort(r,a+4),s=a+12,i=0;i<o;i++){var h=n.readASCII(r,s,4);s+=4,n.readUint(r,s),s+=4;var d=n.readUint(r,s);if(s+=4,n.readUint(r,s),s+=4,h==t)return d}return 0}};e._bin={readFixed:function(r,e){return (r[e]<<8|r[e+1])+(r[e+2]<<8|r[e+3])/65540},readF2dot14:function(r,t){return e._bin.readShort(r,t)/16384},readInt:function(r,t){return e._bin._view(r).getInt32(t)},readInt8:function(r,t){return e._bin._view(r).getInt8(t)},readShort:function(r,t){return e._bin._view(r).getInt16(t)},readUshort:function(r,t){return e._bin._view(r).getUint16(t)},readUshorts:function(r,t,a){for(var n=[],o=0;o<a;o++)n.push(e._bin.readUshort(r,t+2*o));return n},readUint:function(r,t){return e._bin._view(r).getUint32(t)},readUint64:function(r,t){return 4294967296*e._bin.readUint(r,t)+e._bin.readUint(r,t+4)},readASCII:function(r,e,t){for(var a=\"\",n=0;n<t;n++)a+=String.fromCharCode(r[e+n]);return a},readUnicode:function(r,e,t){for(var a=\"\",n=0;n<t;n++){var o=r[e++]<<8|r[e++];a+=String.fromCharCode(o);}return a},_tdec:\"undefined\"!=typeof window&&window.TextDecoder?new window.TextDecoder:null,readUTF8:function(r,t,a){var n=e._bin._tdec;return n&&0==t&&a==r.length?n.decode(r):e._bin.readASCII(r,t,a)},readBytes:function(r,e,t){for(var a=[],n=0;n<t;n++)a.push(r[e+n]);return a},readASCIIArray:function(r,e,t){for(var a=[],n=0;n<t;n++)a.push(String.fromCharCode(r[e+n]));return a},_view:function(r){return r._dataView||(r._dataView=r.buffer?new DataView(r.buffer,r.byteOffset,r.byteLength):new DataView(new Uint8Array(r).buffer))}},e._lctf={},e._lctf.parse=function(r,t,a,n,o){var s=e._bin,i={},h=t;s.readFixed(r,t),t+=4;var d=s.readUshort(r,t);t+=2;var f=s.readUshort(r,t);t+=2;var u=s.readUshort(r,t);return t+=2,i.scriptList=e._lctf.readScriptList(r,h+d),i.featureList=e._lctf.readFeatureList(r,h+f),i.lookupList=e._lctf.readLookupList(r,h+u,o),i},e._lctf.readLookupList=function(r,t,a){var n=e._bin,o=t,s=[],i=n.readUshort(r,t);t+=2;for(var h=0;h<i;h++){var d=n.readUshort(r,t);t+=2;var f=e._lctf.readLookupTable(r,o+d,a);s.push(f);}return s},e._lctf.readLookupTable=function(r,t,a){var n=e._bin,o=t,s={tabs:[]};s.ltype=n.readUshort(r,t),t+=2,s.flag=n.readUshort(r,t),t+=2;var i=n.readUshort(r,t);t+=2;for(var h=s.ltype,d=0;d<i;d++){var f=n.readUshort(r,t);t+=2;var u=a(r,h,o+f,s);s.tabs.push(u);}return s},e._lctf.numOfOnes=function(r){for(var e=0,t=0;t<32;t++)0!=(r>>>t&1)&&e++;return e},e._lctf.readClassDef=function(r,t){var a=e._bin,n=[],o=a.readUshort(r,t);if(t+=2,1==o){var s=a.readUshort(r,t);t+=2;var i=a.readUshort(r,t);t+=2;for(var h=0;h<i;h++)n.push(s+h),n.push(s+h),n.push(a.readUshort(r,t)),t+=2;}if(2==o){var d=a.readUshort(r,t);t+=2;for(h=0;h<d;h++)n.push(a.readUshort(r,t)),t+=2,n.push(a.readUshort(r,t)),t+=2,n.push(a.readUshort(r,t)),t+=2;}return n},e._lctf.getInterval=function(r,e){for(var t=0;t<r.length;t+=3){var a=r[t],n=r[t+1];if(r[t+2],a<=e&&e<=n)return t}return -1},e._lctf.readCoverage=function(r,t){var a=e._bin,n={};n.fmt=a.readUshort(r,t),t+=2;var o=a.readUshort(r,t);return t+=2,1==n.fmt&&(n.tab=a.readUshorts(r,t,o)),2==n.fmt&&(n.tab=a.readUshorts(r,t,3*o)),n},e._lctf.coverageIndex=function(r,t){var a=r.tab;if(1==r.fmt)return a.indexOf(t);if(2==r.fmt){var n=e._lctf.getInterval(a,t);if(-1!=n)return a[n+2]+(t-a[n])}return -1},e._lctf.readFeatureList=function(r,t){var a=e._bin,n=t,o=[],s=a.readUshort(r,t);t+=2;for(var i=0;i<s;i++){var h=a.readASCII(r,t,4);t+=4;var d=a.readUshort(r,t);t+=2;var f=e._lctf.readFeatureTable(r,n+d);f.tag=h.trim(),o.push(f);}return o},e._lctf.readFeatureTable=function(r,t){var a=e._bin,n=t,o={},s=a.readUshort(r,t);t+=2,s>0&&(o.featureParams=n+s);var i=a.readUshort(r,t);t+=2,o.tab=[];for(var h=0;h<i;h++)o.tab.push(a.readUshort(r,t+2*h));return o},e._lctf.readScriptList=function(r,t){var a=e._bin,n=t,o={},s=a.readUshort(r,t);t+=2;for(var i=0;i<s;i++){var h=a.readASCII(r,t,4);t+=4;var d=a.readUshort(r,t);t+=2,o[h.trim()]=e._lctf.readScriptTable(r,n+d);}return o},e._lctf.readScriptTable=function(r,t){var a=e._bin,n=t,o={},s=a.readUshort(r,t);t+=2,s>0&&(o.default=e._lctf.readLangSysTable(r,n+s));var i=a.readUshort(r,t);t+=2;for(var h=0;h<i;h++){var d=a.readASCII(r,t,4);t+=4;var f=a.readUshort(r,t);t+=2,o[d.trim()]=e._lctf.readLangSysTable(r,n+f);}return o},e._lctf.readLangSysTable=function(r,t){var a=e._bin,n={};a.readUshort(r,t),t+=2,n.reqFeature=a.readUshort(r,t),t+=2;var o=a.readUshort(r,t);return t+=2,n.features=a.readUshorts(r,t,o),n},e.CFF={},e.CFF.parse=function(r,t,a){var n=e._bin;(r=new Uint8Array(r.buffer,t,a))[t=0],r[++t],r[++t],r[++t],t++;var o=[];t=e.CFF.readIndex(r,t,o);for(var s=[],i=0;i<o.length-1;i++)s.push(n.readASCII(r,t+o[i],o[i+1]-o[i]));t+=o[o.length-1];var h=[];t=e.CFF.readIndex(r,t,h);var d=[];for(i=0;i<h.length-1;i++)d.push(e.CFF.readDict(r,t+h[i],t+h[i+1]));t+=h[h.length-1];var f=d[0],u=[];t=e.CFF.readIndex(r,t,u);var l=[];for(i=0;i<u.length-1;i++)l.push(n.readASCII(r,t+u[i],u[i+1]-u[i]));if(t+=u[u.length-1],e.CFF.readSubrs(r,t,f),f.CharStrings){t=f.CharStrings;u=[];t=e.CFF.readIndex(r,t,u);var v=[];for(i=0;i<u.length-1;i++)v.push(n.readBytes(r,t+u[i],u[i+1]-u[i]));f.CharStrings=v;}if(f.ROS){t=f.FDArray;var c=[];t=e.CFF.readIndex(r,t,c),f.FDArray=[];for(i=0;i<c.length-1;i++){var p=e.CFF.readDict(r,t+c[i],t+c[i+1]);e.CFF._readFDict(r,p,l),f.FDArray.push(p);}t+=c[c.length-1],t=f.FDSelect,f.FDSelect=[];var U=r[t];if(t++,3!=U)throw U;var g=n.readUshort(r,t);t+=2;for(i=0;i<g+1;i++)f.FDSelect.push(n.readUshort(r,t),r[t+2]),t+=3;}return f.Encoding&&(f.Encoding=e.CFF.readEncoding(r,f.Encoding,f.CharStrings.length)),f.charset&&(f.charset=e.CFF.readCharset(r,f.charset,f.CharStrings.length)),e.CFF._readFDict(r,f,l),f},e.CFF._readFDict=function(r,t,a){var n;for(var o in t.Private&&(n=t.Private[1],t.Private=e.CFF.readDict(r,n,n+t.Private[0]),t.Private.Subrs&&e.CFF.readSubrs(r,n+t.Private.Subrs,t.Private)),t)-1!=[\"FamilyName\",\"FontName\",\"FullName\",\"Notice\",\"version\",\"Copyright\"].indexOf(o)&&(t[o]=a[t[o]-426+35]);},e.CFF.readSubrs=function(r,t,a){var n=e._bin,o=[];t=e.CFF.readIndex(r,t,o);var s,i=o.length;s=i<1240?107:i<33900?1131:32768,a.Bias=s,a.Subrs=[];for(var h=0;h<o.length-1;h++)a.Subrs.push(n.readBytes(r,t+o[h],o[h+1]-o[h]));},e.CFF.tableSE=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,0,111,112,113,114,0,115,116,117,118,119,120,121,122,0,123,0,124,125,126,127,128,129,130,131,0,132,133,0,134,135,136,137,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,138,0,139,0,0,0,0,140,141,142,143,0,0,0,0,0,144,0,0,0,145,0,0,146,147,148,149,0,0,0,0],e.CFF.glyphByUnicode=function(r,e){for(var t=0;t<r.charset.length;t++)if(r.charset[t]==e)return t;return -1},e.CFF.glyphBySE=function(r,t){return t<0||t>255?-1:e.CFF.glyphByUnicode(r,e.CFF.tableSE[t])},e.CFF.readEncoding=function(r,t,a){e._bin;var n=[\".notdef\"],o=r[t];if(t++,0!=o)throw \"error: unknown encoding format: \"+o;var s=r[t];t++;for(var i=0;i<s;i++)n.push(r[t+i]);return n},e.CFF.readCharset=function(r,t,a){var n=e._bin,o=[\".notdef\"],s=r[t];if(t++,0==s)for(var i=0;i<a;i++){var h=n.readUshort(r,t);t+=2,o.push(h);}else {if(1!=s&&2!=s)throw \"error: format: \"+s;for(;o.length<a;){h=n.readUshort(r,t);t+=2;var d=0;1==s?(d=r[t],t++):(d=n.readUshort(r,t),t+=2);for(i=0;i<=d;i++)o.push(h),h++;}}return o},e.CFF.readIndex=function(r,t,a){var n=e._bin,o=n.readUshort(r,t)+1,s=r[t+=2];if(t++,1==s)for(var i=0;i<o;i++)a.push(r[t+i]);else if(2==s)for(i=0;i<o;i++)a.push(n.readUshort(r,t+2*i));else if(3==s)for(i=0;i<o;i++)a.push(16777215&n.readUint(r,t+3*i-1));else if(1!=o)throw \"unsupported offset size: \"+s+\", count: \"+o;return (t+=o*s)-1},e.CFF.getCharString=function(r,t,a){var n=e._bin,o=r[t],s=r[t+1];r[t+2],r[t+3],r[t+4];var i=1,h=null,d=null;o<=20&&(h=o,i=1),12==o&&(h=100*o+s,i=2),21<=o&&o<=27&&(h=o,i=1),28==o&&(d=n.readShort(r,t+1),i=3),29<=o&&o<=31&&(h=o,i=1),32<=o&&o<=246&&(d=o-139,i=1),247<=o&&o<=250&&(d=256*(o-247)+s+108,i=2),251<=o&&o<=254&&(d=256*-(o-251)-s-108,i=2),255==o&&(d=n.readInt(r,t+1)/65535,i=5),a.val=null!=d?d:\"o\"+h,a.size=i;},e.CFF.readCharString=function(r,t,a){for(var n=t+a,o=e._bin,s=[];t<n;){var i=r[t],h=r[t+1];r[t+2],r[t+3],r[t+4];var d=1,f=null,u=null;i<=20&&(f=i,d=1),12==i&&(f=100*i+h,d=2),19!=i&&20!=i||(f=i,d=2),21<=i&&i<=27&&(f=i,d=1),28==i&&(u=o.readShort(r,t+1),d=3),29<=i&&i<=31&&(f=i,d=1),32<=i&&i<=246&&(u=i-139,d=1),247<=i&&i<=250&&(u=256*(i-247)+h+108,d=2),251<=i&&i<=254&&(u=256*-(i-251)-h-108,d=2),255==i&&(u=o.readInt(r,t+1)/65535,d=5),s.push(null!=u?u:\"o\"+f),t+=d;}return s},e.CFF.readDict=function(r,t,a){for(var n=e._bin,o={},s=[];t<a;){var i=r[t],h=r[t+1];r[t+2],r[t+3],r[t+4];var d=1,f=null,u=null;if(28==i&&(u=n.readShort(r,t+1),d=3),29==i&&(u=n.readInt(r,t+1),d=5),32<=i&&i<=246&&(u=i-139,d=1),247<=i&&i<=250&&(u=256*(i-247)+h+108,d=2),251<=i&&i<=254&&(u=256*-(i-251)-h-108,d=2),255==i)throw u=n.readInt(r,t+1)/65535,d=5,\"unknown number\";if(30==i){var l=[];for(d=1;;){var v=r[t+d];d++;var c=v>>4,p=15&v;if(15!=c&&l.push(c),15!=p&&l.push(p),15==p)break}for(var U=\"\",g=[0,1,2,3,4,5,6,7,8,9,\".\",\"e\",\"e-\",\"reserved\",\"-\",\"endOfNumber\"],S=0;S<l.length;S++)U+=g[l[S]];u=parseFloat(U);}if(i<=21)if(f=[\"version\",\"Notice\",\"FullName\",\"FamilyName\",\"Weight\",\"FontBBox\",\"BlueValues\",\"OtherBlues\",\"FamilyBlues\",\"FamilyOtherBlues\",\"StdHW\",\"StdVW\",\"escape\",\"UniqueID\",\"XUID\",\"charset\",\"Encoding\",\"CharStrings\",\"Private\",\"Subrs\",\"defaultWidthX\",\"nominalWidthX\"][i],d=1,12==i)f=[\"Copyright\",\"isFixedPitch\",\"ItalicAngle\",\"UnderlinePosition\",\"UnderlineThickness\",\"PaintType\",\"CharstringType\",\"FontMatrix\",\"StrokeWidth\",\"BlueScale\",\"BlueShift\",\"BlueFuzz\",\"StemSnapH\",\"StemSnapV\",\"ForceBold\",0,0,\"LanguageGroup\",\"ExpansionFactor\",\"initialRandomSeed\",\"SyntheticBase\",\"PostScript\",\"BaseFontName\",\"BaseFontBlend\",0,0,0,0,0,0,\"ROS\",\"CIDFontVersion\",\"CIDFontRevision\",\"CIDFontType\",\"CIDCount\",\"UIDBase\",\"FDArray\",\"FDSelect\",\"FontName\"][h],d=2;null!=f?(o[f]=1==s.length?s[0]:s,s=[]):s.push(u),t+=d;}return o},e.cmap={},e.cmap.parse=function(r,t,a){r=new Uint8Array(r.buffer,t,a),t=0;var n=e._bin,o={};n.readUshort(r,t),t+=2;var s=n.readUshort(r,t);t+=2;var i=[];o.tables=[];for(var h=0;h<s;h++){var d=n.readUshort(r,t);t+=2;var f=n.readUshort(r,t);t+=2;var u=n.readUint(r,t);t+=4;var l=\"p\"+d+\"e\"+f,v=i.indexOf(u);if(-1==v){var c;v=o.tables.length,i.push(u);var p=n.readUshort(r,u);0==p?c=e.cmap.parse0(r,u):4==p?c=e.cmap.parse4(r,u):6==p?c=e.cmap.parse6(r,u):12==p?c=e.cmap.parse12(r,u):console.debug(\"unknown format: \"+p,d,f,u),o.tables.push(c);}if(null!=o[l])throw \"multiple tables for one platform+encoding\";o[l]=v;}return o},e.cmap.parse0=function(r,t){var a=e._bin,n={};n.format=a.readUshort(r,t),t+=2;var o=a.readUshort(r,t);t+=2,a.readUshort(r,t),t+=2,n.map=[];for(var s=0;s<o-6;s++)n.map.push(r[t+s]);return n},e.cmap.parse4=function(r,t){var a=e._bin,n=t,o={};o.format=a.readUshort(r,t),t+=2;var s=a.readUshort(r,t);t+=2,a.readUshort(r,t),t+=2;var i=a.readUshort(r,t);t+=2;var h=i/2;o.searchRange=a.readUshort(r,t),t+=2,o.entrySelector=a.readUshort(r,t),t+=2,o.rangeShift=a.readUshort(r,t),t+=2,o.endCount=a.readUshorts(r,t,h),t+=2*h,t+=2,o.startCount=a.readUshorts(r,t,h),t+=2*h,o.idDelta=[];for(var d=0;d<h;d++)o.idDelta.push(a.readShort(r,t)),t+=2;for(o.idRangeOffset=a.readUshorts(r,t,h),t+=2*h,o.glyphIdArray=[];t<n+s;)o.glyphIdArray.push(a.readUshort(r,t)),t+=2;return o},e.cmap.parse6=function(r,t){var a=e._bin,n={};n.format=a.readUshort(r,t),t+=2,a.readUshort(r,t),t+=2,a.readUshort(r,t),t+=2,n.firstCode=a.readUshort(r,t),t+=2;var o=a.readUshort(r,t);t+=2,n.glyphIdArray=[];for(var s=0;s<o;s++)n.glyphIdArray.push(a.readUshort(r,t)),t+=2;return n},e.cmap.parse12=function(r,t){var a=e._bin,n={};n.format=a.readUshort(r,t),t+=2,t+=2,a.readUint(r,t),t+=4,a.readUint(r,t),t+=4;var o=a.readUint(r,t);t+=4,n.groups=[];for(var s=0;s<o;s++){var i=t+12*s,h=a.readUint(r,i+0),d=a.readUint(r,i+4),f=a.readUint(r,i+8);n.groups.push([h,d,f]);}return n},e.glyf={},e.glyf.parse=function(r,e,t,a){for(var n=[],o=0;o<a.maxp.numGlyphs;o++)n.push(null);return n},e.glyf._parseGlyf=function(r,t){var a=e._bin,n=r._data,o=e._tabOffset(n,\"glyf\",r._offset)+r.loca[t];if(r.loca[t]==r.loca[t+1])return null;var s={};if(s.noc=a.readShort(n,o),o+=2,s.xMin=a.readShort(n,o),o+=2,s.yMin=a.readShort(n,o),o+=2,s.xMax=a.readShort(n,o),o+=2,s.yMax=a.readShort(n,o),o+=2,s.xMin>=s.xMax||s.yMin>=s.yMax)return null;if(s.noc>0){s.endPts=[];for(var i=0;i<s.noc;i++)s.endPts.push(a.readUshort(n,o)),o+=2;var h=a.readUshort(n,o);if(o+=2,n.length-o<h)return null;s.instructions=a.readBytes(n,o,h),o+=h;var d=s.endPts[s.noc-1]+1;s.flags=[];for(i=0;i<d;i++){var f=n[o];if(o++,s.flags.push(f),0!=(8&f)){var u=n[o];o++;for(var l=0;l<u;l++)s.flags.push(f),i++;}}s.xs=[];for(i=0;i<d;i++){var v=0!=(2&s.flags[i]),c=0!=(16&s.flags[i]);v?(s.xs.push(c?n[o]:-n[o]),o++):c?s.xs.push(0):(s.xs.push(a.readShort(n,o)),o+=2);}s.ys=[];for(i=0;i<d;i++){v=0!=(4&s.flags[i]),c=0!=(32&s.flags[i]);v?(s.ys.push(c?n[o]:-n[o]),o++):c?s.ys.push(0):(s.ys.push(a.readShort(n,o)),o+=2);}var p=0,U=0;for(i=0;i<d;i++)p+=s.xs[i],U+=s.ys[i],s.xs[i]=p,s.ys[i]=U;}else {var g;s.parts=[];do{g=a.readUshort(n,o),o+=2;var S={m:{a:1,b:0,c:0,d:1,tx:0,ty:0},p1:-1,p2:-1};if(s.parts.push(S),S.glyphIndex=a.readUshort(n,o),o+=2,1&g){var m=a.readShort(n,o);o+=2;var b=a.readShort(n,o);o+=2;}else {m=a.readInt8(n,o);o++;b=a.readInt8(n,o);o++;}2&g?(S.m.tx=m,S.m.ty=b):(S.p1=m,S.p2=b),8&g?(S.m.a=S.m.d=a.readF2dot14(n,o),o+=2):64&g?(S.m.a=a.readF2dot14(n,o),o+=2,S.m.d=a.readF2dot14(n,o),o+=2):128&g&&(S.m.a=a.readF2dot14(n,o),o+=2,S.m.b=a.readF2dot14(n,o),o+=2,S.m.c=a.readF2dot14(n,o),o+=2,S.m.d=a.readF2dot14(n,o),o+=2);}while(32&g);if(256&g){var y=a.readUshort(n,o);o+=2,s.instr=[];for(i=0;i<y;i++)s.instr.push(n[o]),o++;}}return s},e.GDEF={},e.GDEF.parse=function(r,t,a,n){var o=t;t+=4;var s=e._bin.readUshort(r,t);return {glyphClassDef:0===s?null:e._lctf.readClassDef(r,o+s)}},e.GPOS={},e.GPOS.parse=function(r,t,a,n){return e._lctf.parse(r,t,a,n,e.GPOS.subt)},e.GPOS.subt=function(r,t,a,n){var o=e._bin,s=a,i={};if(i.fmt=o.readUshort(r,a),a+=2,1==t||2==t||3==t||7==t||8==t&&i.fmt<=2){var h=o.readUshort(r,a);a+=2,i.coverage=e._lctf.readCoverage(r,h+s);}if(1==t&&1==i.fmt){var d=o.readUshort(r,a);a+=2,0!=d&&(i.pos=e.GPOS.readValueRecord(r,a,d));}else if(2==t&&i.fmt>=1&&i.fmt<=2){d=o.readUshort(r,a);a+=2;var f=o.readUshort(r,a);a+=2;var u=e._lctf.numOfOnes(d),l=e._lctf.numOfOnes(f);if(1==i.fmt){i.pairsets=[];var v=o.readUshort(r,a);a+=2;for(var c=0;c<v;c++){var p=s+o.readUshort(r,a);a+=2;var U=o.readUshort(r,p);p+=2;for(var g=[],S=0;S<U;S++){var m=o.readUshort(r,p);p+=2,0!=d&&(P=e.GPOS.readValueRecord(r,p,d),p+=2*u),0!=f&&(x=e.GPOS.readValueRecord(r,p,f),p+=2*l),g.push({gid2:m,val1:P,val2:x});}i.pairsets.push(g);}}if(2==i.fmt){var b=o.readUshort(r,a);a+=2;var y=o.readUshort(r,a);a+=2;var F=o.readUshort(r,a);a+=2;var C=o.readUshort(r,a);a+=2,i.classDef1=e._lctf.readClassDef(r,s+b),i.classDef2=e._lctf.readClassDef(r,s+y),i.matrix=[];for(c=0;c<F;c++){var _=[];for(S=0;S<C;S++){var P=null,x=null;0!=d&&(P=e.GPOS.readValueRecord(r,a,d),a+=2*u),0!=f&&(x=e.GPOS.readValueRecord(r,a,f),a+=2*l),_.push({val1:P,val2:x});}i.matrix.push(_);}}}else if(4==t&&1==i.fmt)i.markCoverage=e._lctf.readCoverage(r,o.readUshort(r,a)+s),i.baseCoverage=e._lctf.readCoverage(r,o.readUshort(r,a+2)+s),i.markClassCount=o.readUshort(r,a+4),i.markArray=e.GPOS.readMarkArray(r,o.readUshort(r,a+6)+s),i.baseArray=e.GPOS.readBaseArray(r,o.readUshort(r,a+8)+s,i.markClassCount);else if(6==t&&1==i.fmt)i.mark1Coverage=e._lctf.readCoverage(r,o.readUshort(r,a)+s),i.mark2Coverage=e._lctf.readCoverage(r,o.readUshort(r,a+2)+s),i.markClassCount=o.readUshort(r,a+4),i.mark1Array=e.GPOS.readMarkArray(r,o.readUshort(r,a+6)+s),i.mark2Array=e.GPOS.readBaseArray(r,o.readUshort(r,a+8)+s,i.markClassCount);else {if(9==t&&1==i.fmt){var I=o.readUshort(r,a);a+=2;var w=o.readUint(r,a);if(a+=4,9==n.ltype)n.ltype=I;else if(n.ltype!=I)throw \"invalid extension substitution\";return e.GPOS.subt(r,n.ltype,s+w)}console.debug(\"unsupported GPOS table LookupType\",t,\"format\",i.fmt);}return i},e.GPOS.readValueRecord=function(r,t,a){var n=e._bin,o=[];return o.push(1&a?n.readShort(r,t):0),t+=1&a?2:0,o.push(2&a?n.readShort(r,t):0),t+=2&a?2:0,o.push(4&a?n.readShort(r,t):0),t+=4&a?2:0,o.push(8&a?n.readShort(r,t):0),t+=8&a?2:0,o},e.GPOS.readBaseArray=function(r,t,a){var n=e._bin,o=[],s=t,i=n.readUshort(r,t);t+=2;for(var h=0;h<i;h++){for(var d=[],f=0;f<a;f++)d.push(e.GPOS.readAnchorRecord(r,s+n.readUshort(r,t))),t+=2;o.push(d);}return o},e.GPOS.readMarkArray=function(r,t){var a=e._bin,n=[],o=t,s=a.readUshort(r,t);t+=2;for(var i=0;i<s;i++){var h=e.GPOS.readAnchorRecord(r,a.readUshort(r,t+2)+o);h.markClass=a.readUshort(r,t),n.push(h),t+=4;}return n},e.GPOS.readAnchorRecord=function(r,t){var a=e._bin,n={};return n.fmt=a.readUshort(r,t),n.x=a.readShort(r,t+2),n.y=a.readShort(r,t+4),n},e.GSUB={},e.GSUB.parse=function(r,t,a,n){return e._lctf.parse(r,t,a,n,e.GSUB.subt)},e.GSUB.subt=function(r,t,a,n){var o=e._bin,s=a,i={};if(i.fmt=o.readUshort(r,a),a+=2,1!=t&&2!=t&&4!=t&&5!=t&&6!=t)return null;if(1==t||2==t||4==t||5==t&&i.fmt<=2||6==t&&i.fmt<=2){var h=o.readUshort(r,a);a+=2,i.coverage=e._lctf.readCoverage(r,s+h);}if(1==t&&i.fmt>=1&&i.fmt<=2){if(1==i.fmt)i.delta=o.readShort(r,a),a+=2;else if(2==i.fmt){var d=o.readUshort(r,a);a+=2,i.newg=o.readUshorts(r,a,d),a+=2*i.newg.length;}}else if(2==t&&1==i.fmt){d=o.readUshort(r,a);a+=2,i.seqs=[];for(var f=0;f<d;f++){var u=o.readUshort(r,a)+s;a+=2;var l=o.readUshort(r,u);i.seqs.push(o.readUshorts(r,u+2,l));}}else if(4==t){i.vals=[];d=o.readUshort(r,a);a+=2;for(f=0;f<d;f++){var v=o.readUshort(r,a);a+=2,i.vals.push(e.GSUB.readLigatureSet(r,s+v));}}else if(5==t&&2==i.fmt){if(2==i.fmt){var c=o.readUshort(r,a);a+=2,i.cDef=e._lctf.readClassDef(r,s+c),i.scset=[];var p=o.readUshort(r,a);a+=2;for(f=0;f<p;f++){var U=o.readUshort(r,a);a+=2,i.scset.push(0==U?null:e.GSUB.readSubClassSet(r,s+U));}}}else if(6==t&&3==i.fmt){if(3==i.fmt){for(f=0;f<3;f++){d=o.readUshort(r,a);a+=2;for(var g=[],S=0;S<d;S++)g.push(e._lctf.readCoverage(r,s+o.readUshort(r,a+2*S)));a+=2*d,0==f&&(i.backCvg=g),1==f&&(i.inptCvg=g),2==f&&(i.ahedCvg=g);}d=o.readUshort(r,a);a+=2,i.lookupRec=e.GSUB.readSubstLookupRecords(r,a,d);}}else {if(7==t&&1==i.fmt){var m=o.readUshort(r,a);a+=2;var b=o.readUint(r,a);if(a+=4,9==n.ltype)n.ltype=m;else if(n.ltype!=m)throw \"invalid extension substitution\";return e.GSUB.subt(r,n.ltype,s+b)}console.debug(\"unsupported GSUB table LookupType\",t,\"format\",i.fmt);}return i},e.GSUB.readSubClassSet=function(r,t){var a=e._bin.readUshort,n=t,o=[],s=a(r,t);t+=2;for(var i=0;i<s;i++){var h=a(r,t);t+=2,o.push(e.GSUB.readSubClassRule(r,n+h));}return o},e.GSUB.readSubClassRule=function(r,t){var a=e._bin.readUshort,n={},o=a(r,t),s=a(r,t+=2);t+=2,n.input=[];for(var i=0;i<o-1;i++)n.input.push(a(r,t)),t+=2;return n.substLookupRecords=e.GSUB.readSubstLookupRecords(r,t,s),n},e.GSUB.readSubstLookupRecords=function(r,t,a){for(var n=e._bin.readUshort,o=[],s=0;s<a;s++)o.push(n(r,t),n(r,t+2)),t+=4;return o},e.GSUB.readChainSubClassSet=function(r,t){var a=e._bin,n=t,o=[],s=a.readUshort(r,t);t+=2;for(var i=0;i<s;i++){var h=a.readUshort(r,t);t+=2,o.push(e.GSUB.readChainSubClassRule(r,n+h));}return o},e.GSUB.readChainSubClassRule=function(r,t){for(var a=e._bin,n={},o=[\"backtrack\",\"input\",\"lookahead\"],s=0;s<o.length;s++){var i=a.readUshort(r,t);t+=2,1==s&&i--,n[o[s]]=a.readUshorts(r,t,i),t+=2*n[o[s]].length;}i=a.readUshort(r,t);return t+=2,n.subst=a.readUshorts(r,t,2*i),t+=2*n.subst.length,n},e.GSUB.readLigatureSet=function(r,t){var a=e._bin,n=t,o=[],s=a.readUshort(r,t);t+=2;for(var i=0;i<s;i++){var h=a.readUshort(r,t);t+=2,o.push(e.GSUB.readLigature(r,n+h));}return o},e.GSUB.readLigature=function(r,t){var a=e._bin,n={chain:[]};n.nglyph=a.readUshort(r,t),t+=2;var o=a.readUshort(r,t);t+=2;for(var s=0;s<o-1;s++)n.chain.push(a.readUshort(r,t)),t+=2;return n},e.head={},e.head.parse=function(r,t,a){var n=e._bin,o={};return n.readFixed(r,t),t+=4,o.fontRevision=n.readFixed(r,t),t+=4,n.readUint(r,t),t+=4,n.readUint(r,t),t+=4,o.flags=n.readUshort(r,t),t+=2,o.unitsPerEm=n.readUshort(r,t),t+=2,o.created=n.readUint64(r,t),t+=8,o.modified=n.readUint64(r,t),t+=8,o.xMin=n.readShort(r,t),t+=2,o.yMin=n.readShort(r,t),t+=2,o.xMax=n.readShort(r,t),t+=2,o.yMax=n.readShort(r,t),t+=2,o.macStyle=n.readUshort(r,t),t+=2,o.lowestRecPPEM=n.readUshort(r,t),t+=2,o.fontDirectionHint=n.readShort(r,t),t+=2,o.indexToLocFormat=n.readShort(r,t),t+=2,o.glyphDataFormat=n.readShort(r,t),t+=2,o},e.hhea={},e.hhea.parse=function(r,t,a){var n=e._bin,o={};return n.readFixed(r,t),t+=4,o.ascender=n.readShort(r,t),t+=2,o.descender=n.readShort(r,t),t+=2,o.lineGap=n.readShort(r,t),t+=2,o.advanceWidthMax=n.readUshort(r,t),t+=2,o.minLeftSideBearing=n.readShort(r,t),t+=2,o.minRightSideBearing=n.readShort(r,t),t+=2,o.xMaxExtent=n.readShort(r,t),t+=2,o.caretSlopeRise=n.readShort(r,t),t+=2,o.caretSlopeRun=n.readShort(r,t),t+=2,o.caretOffset=n.readShort(r,t),t+=2,t+=8,o.metricDataFormat=n.readShort(r,t),t+=2,o.numberOfHMetrics=n.readUshort(r,t),t+=2,o},e.hmtx={},e.hmtx.parse=function(r,t,a,n){for(var o=e._bin,s={aWidth:[],lsBearing:[]},i=0,h=0,d=0;d<n.maxp.numGlyphs;d++)d<n.hhea.numberOfHMetrics&&(i=o.readUshort(r,t),t+=2,h=o.readShort(r,t),t+=2),s.aWidth.push(i),s.lsBearing.push(h);return s},e.kern={},e.kern.parse=function(r,t,a,n){var o=e._bin,s=o.readUshort(r,t);if(t+=2,1==s)return e.kern.parseV1(r,t-2,a,n);var i=o.readUshort(r,t);t+=2;for(var h={glyph1:[],rval:[]},d=0;d<i;d++){t+=2;a=o.readUshort(r,t);t+=2;var f=o.readUshort(r,t);t+=2;var u=f>>>8;if(0!=(u&=15))throw \"unknown kern table format: \"+u;t=e.kern.readFormat0(r,t,h);}return h},e.kern.parseV1=function(r,t,a,n){var o=e._bin;o.readFixed(r,t),t+=4;var s=o.readUint(r,t);t+=4;for(var i={glyph1:[],rval:[]},h=0;h<s;h++){o.readUint(r,t),t+=4;var d=o.readUshort(r,t);t+=2,o.readUshort(r,t),t+=2;var f=d>>>8;if(0!=(f&=15))throw \"unknown kern table format: \"+f;t=e.kern.readFormat0(r,t,i);}return i},e.kern.readFormat0=function(r,t,a){var n=e._bin,o=-1,s=n.readUshort(r,t);t+=2,n.readUshort(r,t),t+=2,n.readUshort(r,t),t+=2,n.readUshort(r,t),t+=2;for(var i=0;i<s;i++){var h=n.readUshort(r,t);t+=2;var d=n.readUshort(r,t);t+=2;var f=n.readShort(r,t);t+=2,h!=o&&(a.glyph1.push(h),a.rval.push({glyph2:[],vals:[]}));var u=a.rval[a.rval.length-1];u.glyph2.push(d),u.vals.push(f),o=h;}return t},e.loca={},e.loca.parse=function(r,t,a,n){var o=e._bin,s=[],i=n.head.indexToLocFormat,h=n.maxp.numGlyphs+1;if(0==i)for(var d=0;d<h;d++)s.push(o.readUshort(r,t+(d<<1))<<1);if(1==i)for(d=0;d<h;d++)s.push(o.readUint(r,t+(d<<2)));return s},e.maxp={},e.maxp.parse=function(r,t,a){var n=e._bin,o={},s=n.readUint(r,t);return t+=4,o.numGlyphs=n.readUshort(r,t),t+=2,65536==s&&(o.maxPoints=n.readUshort(r,t),t+=2,o.maxContours=n.readUshort(r,t),t+=2,o.maxCompositePoints=n.readUshort(r,t),t+=2,o.maxCompositeContours=n.readUshort(r,t),t+=2,o.maxZones=n.readUshort(r,t),t+=2,o.maxTwilightPoints=n.readUshort(r,t),t+=2,o.maxStorage=n.readUshort(r,t),t+=2,o.maxFunctionDefs=n.readUshort(r,t),t+=2,o.maxInstructionDefs=n.readUshort(r,t),t+=2,o.maxStackElements=n.readUshort(r,t),t+=2,o.maxSizeOfInstructions=n.readUshort(r,t),t+=2,o.maxComponentElements=n.readUshort(r,t),t+=2,o.maxComponentDepth=n.readUshort(r,t),t+=2),o},e.name={},e.name.parse=function(r,t,a){var n=e._bin,o={};n.readUshort(r,t),t+=2;var s=n.readUshort(r,t);t+=2,n.readUshort(r,t);for(var i,h=[\"copyright\",\"fontFamily\",\"fontSubfamily\",\"ID\",\"fullName\",\"version\",\"postScriptName\",\"trademark\",\"manufacturer\",\"designer\",\"description\",\"urlVendor\",\"urlDesigner\",\"licence\",\"licenceURL\",\"---\",\"typoFamilyName\",\"typoSubfamilyName\",\"compatibleFull\",\"sampleText\",\"postScriptCID\",\"wwsFamilyName\",\"wwsSubfamilyName\",\"lightPalette\",\"darkPalette\"],d=t+=2,f=0;f<s;f++){var u=n.readUshort(r,t);t+=2;var l=n.readUshort(r,t);t+=2;var v=n.readUshort(r,t);t+=2;var c=n.readUshort(r,t);t+=2;var p=n.readUshort(r,t);t+=2;var U=n.readUshort(r,t);t+=2;var g,S=h[c],m=d+12*s+U;if(0==u)g=n.readUnicode(r,m,p/2);else if(3==u&&0==l)g=n.readUnicode(r,m,p/2);else if(0==l)g=n.readASCII(r,m,p);else if(1==l)g=n.readUnicode(r,m,p/2);else if(3==l)g=n.readUnicode(r,m,p/2);else {if(1!=u)throw \"unknown encoding \"+l+\", platformID: \"+u;g=n.readASCII(r,m,p),console.debug(\"reading unknown MAC encoding \"+l+\" as ASCII\");}var b=\"p\"+u+\",\"+v.toString(16);null==o[b]&&(o[b]={}),o[b][void 0!==S?S:c]=g,o[b]._lang=v;}for(var y in o)if(null!=o[y].postScriptName&&1033==o[y]._lang)return o[y];for(var y in o)if(null!=o[y].postScriptName&&0==o[y]._lang)return o[y];for(var y in o)if(null!=o[y].postScriptName&&3084==o[y]._lang)return o[y];for(var y in o)if(null!=o[y].postScriptName)return o[y];for(var y in o){i=y;break}return console.debug(\"returning name table with languageID \"+o[i]._lang),o[i]},e[\"OS/2\"]={},e[\"OS/2\"].parse=function(r,t,a){var n=e._bin.readUshort(r,t);t+=2;var o={};if(0==n)e[\"OS/2\"].version0(r,t,o);else if(1==n)e[\"OS/2\"].version1(r,t,o);else if(2==n||3==n||4==n)e[\"OS/2\"].version2(r,t,o);else {if(5!=n)throw \"unknown OS/2 table version: \"+n;e[\"OS/2\"].version5(r,t,o);}return o},e[\"OS/2\"].version0=function(r,t,a){var n=e._bin;return a.xAvgCharWidth=n.readShort(r,t),t+=2,a.usWeightClass=n.readUshort(r,t),t+=2,a.usWidthClass=n.readUshort(r,t),t+=2,a.fsType=n.readUshort(r,t),t+=2,a.ySubscriptXSize=n.readShort(r,t),t+=2,a.ySubscriptYSize=n.readShort(r,t),t+=2,a.ySubscriptXOffset=n.readShort(r,t),t+=2,a.ySubscriptYOffset=n.readShort(r,t),t+=2,a.ySuperscriptXSize=n.readShort(r,t),t+=2,a.ySuperscriptYSize=n.readShort(r,t),t+=2,a.ySuperscriptXOffset=n.readShort(r,t),t+=2,a.ySuperscriptYOffset=n.readShort(r,t),t+=2,a.yStrikeoutSize=n.readShort(r,t),t+=2,a.yStrikeoutPosition=n.readShort(r,t),t+=2,a.sFamilyClass=n.readShort(r,t),t+=2,a.panose=n.readBytes(r,t,10),t+=10,a.ulUnicodeRange1=n.readUint(r,t),t+=4,a.ulUnicodeRange2=n.readUint(r,t),t+=4,a.ulUnicodeRange3=n.readUint(r,t),t+=4,a.ulUnicodeRange4=n.readUint(r,t),t+=4,a.achVendID=[n.readInt8(r,t),n.readInt8(r,t+1),n.readInt8(r,t+2),n.readInt8(r,t+3)],t+=4,a.fsSelection=n.readUshort(r,t),t+=2,a.usFirstCharIndex=n.readUshort(r,t),t+=2,a.usLastCharIndex=n.readUshort(r,t),t+=2,a.sTypoAscender=n.readShort(r,t),t+=2,a.sTypoDescender=n.readShort(r,t),t+=2,a.sTypoLineGap=n.readShort(r,t),t+=2,a.usWinAscent=n.readUshort(r,t),t+=2,a.usWinDescent=n.readUshort(r,t),t+=2},e[\"OS/2\"].version1=function(r,t,a){var n=e._bin;return t=e[\"OS/2\"].version0(r,t,a),a.ulCodePageRange1=n.readUint(r,t),t+=4,a.ulCodePageRange2=n.readUint(r,t),t+=4},e[\"OS/2\"].version2=function(r,t,a){var n=e._bin;return t=e[\"OS/2\"].version1(r,t,a),a.sxHeight=n.readShort(r,t),t+=2,a.sCapHeight=n.readShort(r,t),t+=2,a.usDefault=n.readUshort(r,t),t+=2,a.usBreak=n.readUshort(r,t),t+=2,a.usMaxContext=n.readUshort(r,t),t+=2},e[\"OS/2\"].version5=function(r,t,a){var n=e._bin;return t=e[\"OS/2\"].version2(r,t,a),a.usLowerOpticalPointSize=n.readUshort(r,t),t+=2,a.usUpperOpticalPointSize=n.readUshort(r,t),t+=2},e.post={},e.post.parse=function(r,t,a){var n=e._bin,o={};return o.version=n.readFixed(r,t),t+=4,o.italicAngle=n.readFixed(r,t),t+=4,o.underlinePosition=n.readShort(r,t),t+=2,o.underlineThickness=n.readShort(r,t),t+=2,o},null==e&&(e={}),null==e.U&&(e.U={}),e.U.codeToGlyph=function(r,e){var t=r.cmap,a=-1;if(null!=t.p0e4?a=t.p0e4:null!=t.p3e1?a=t.p3e1:null!=t.p1e0?a=t.p1e0:null!=t.p0e3&&(a=t.p0e3),-1==a)throw \"no familiar platform and encoding!\";var n=t.tables[a];if(0==n.format)return e>=n.map.length?0:n.map[e];if(4==n.format){for(var o=-1,s=0;s<n.endCount.length;s++)if(e<=n.endCount[s]){o=s;break}if(-1==o)return 0;if(n.startCount[o]>e)return 0;return 65535&(0!=n.idRangeOffset[o]?n.glyphIdArray[e-n.startCount[o]+(n.idRangeOffset[o]>>1)-(n.idRangeOffset.length-o)]:e+n.idDelta[o])}if(12==n.format){if(e>n.groups[n.groups.length-1][1])return 0;for(s=0;s<n.groups.length;s++){var i=n.groups[s];if(i[0]<=e&&e<=i[1])return i[2]+(e-i[0])}return 0}throw \"unknown cmap table format \"+n.format},e.U.glyphToPath=function(r,t){var a={cmds:[],crds:[]};if(r.SVG&&r.SVG.entries[t]){var n=r.SVG.entries[t];return null==n?a:(\"string\"==typeof n&&(n=e.SVG.toPath(n),r.SVG.entries[t]=n),n)}if(r.CFF){var o={x:0,y:0,stack:[],nStems:0,haveWidth:!1,width:r.CFF.Private?r.CFF.Private.defaultWidthX:0,open:!1},s=r.CFF,i=r.CFF.Private;if(s.ROS){for(var h=0;s.FDSelect[h+2]<=t;)h+=2;i=s.FDArray[s.FDSelect[h+1]].Private;}e.U._drawCFF(r.CFF.CharStrings[t],o,s,i,a);}else r.glyf&&e.U._drawGlyf(t,r,a);return a},e.U._drawGlyf=function(r,t,a){var n=t.glyf[r];null==n&&(n=t.glyf[r]=e.glyf._parseGlyf(t,r)),null!=n&&(n.noc>-1?e.U._simpleGlyph(n,a):e.U._compoGlyph(n,t,a));},e.U._simpleGlyph=function(r,t){for(var a=0;a<r.noc;a++){for(var n=0==a?0:r.endPts[a-1]+1,o=r.endPts[a],s=n;s<=o;s++){var i=s==n?o:s-1,h=s==o?n:s+1,d=1&r.flags[s],f=1&r.flags[i],u=1&r.flags[h],l=r.xs[s],v=r.ys[s];if(s==n)if(d){if(!f){e.U.P.moveTo(t,l,v);continue}e.U.P.moveTo(t,r.xs[i],r.ys[i]);}else f?e.U.P.moveTo(t,r.xs[i],r.ys[i]):e.U.P.moveTo(t,(r.xs[i]+l)/2,(r.ys[i]+v)/2);d?f&&e.U.P.lineTo(t,l,v):u?e.U.P.qcurveTo(t,l,v,r.xs[h],r.ys[h]):e.U.P.qcurveTo(t,l,v,(l+r.xs[h])/2,(v+r.ys[h])/2);}e.U.P.closePath(t);}},e.U._compoGlyph=function(r,t,a){for(var n=0;n<r.parts.length;n++){var o={cmds:[],crds:[]},s=r.parts[n];e.U._drawGlyf(s.glyphIndex,t,o);for(var i=s.m,h=0;h<o.crds.length;h+=2){var d=o.crds[h],f=o.crds[h+1];a.crds.push(d*i.a+f*i.b+i.tx),a.crds.push(d*i.c+f*i.d+i.ty);}for(h=0;h<o.cmds.length;h++)a.cmds.push(o.cmds[h]);}},e.U._getGlyphClass=function(r,t){var a=e._lctf.getInterval(t,r);return -1==a?0:t[a+2]},e.U._applySubs=function(r,t,a,n){for(var o=r.length-t-1,s=0;s<a.tabs.length;s++)if(null!=a.tabs[s]){var i,h=a.tabs[s];if(!h.coverage||-1!=(i=e._lctf.coverageIndex(h.coverage,r[t])))if(1==a.ltype)r[t],1==h.fmt?r[t]=r[t]+h.delta:r[t]=h.newg[i];else if(4==a.ltype)for(var d=h.vals[i],f=0;f<d.length;f++){var u=d[f],l=u.chain.length;if(!(l>o)){for(var v=!0,c=0,p=0;p<l;p++){for(;-1==r[t+c+(1+p)];)c++;u.chain[p]!=r[t+c+(1+p)]&&(v=!1);}if(v){r[t]=u.nglyph;for(p=0;p<l+c;p++)r[t+p+1]=-1;break}}}else if(5==a.ltype&&2==h.fmt)for(var U=e._lctf.getInterval(h.cDef,r[t]),g=h.cDef[U+2],S=h.scset[g],m=0;m<S.length;m++){var b=S[m],y=b.input;if(!(y.length>o)){for(v=!0,p=0;p<y.length;p++){var F=e._lctf.getInterval(h.cDef,r[t+1+p]);if(-1==U&&h.cDef[F+2]!=y[p]){v=!1;break}}if(v){var C=b.substLookupRecords;for(f=0;f<C.length;f+=2)C[f],C[f+1];}}}else if(6==a.ltype&&3==h.fmt){if(!e.U._glsCovered(r,h.backCvg,t-h.backCvg.length))continue;if(!e.U._glsCovered(r,h.inptCvg,t))continue;if(!e.U._glsCovered(r,h.ahedCvg,t+h.inptCvg.length))continue;var _=h.lookupRec;for(m=0;m<_.length;m+=2){U=_[m];var P=n[_[m+1]];e.U._applySubs(r,t+U,P,n);}}}},e.U._glsCovered=function(r,t,a){for(var n=0;n<t.length;n++){if(-1==e._lctf.coverageIndex(t[n],r[a+n]))return !1}return !0},e.U.glyphsToPath=function(r,t,a){for(var n={cmds:[],crds:[]},o=0,s=0;s<t.length;s++){var i=t[s];if(-1!=i){for(var h=s<t.length-1&&-1!=t[s+1]?t[s+1]:0,d=e.U.glyphToPath(r,i),f=0;f<d.crds.length;f+=2)n.crds.push(d.crds[f]+o),n.crds.push(d.crds[f+1]);a&&n.cmds.push(a);for(f=0;f<d.cmds.length;f++)n.cmds.push(d.cmds[f]);a&&n.cmds.push(\"X\"),o+=r.hmtx.aWidth[i],s<t.length-1&&(o+=e.U.getPairAdjustment(r,i,h));}}return n},e.U.P={},e.U.P.moveTo=function(r,e,t){r.cmds.push(\"M\"),r.crds.push(e,t);},e.U.P.lineTo=function(r,e,t){r.cmds.push(\"L\"),r.crds.push(e,t);},e.U.P.curveTo=function(r,e,t,a,n,o,s){r.cmds.push(\"C\"),r.crds.push(e,t,a,n,o,s);},e.U.P.qcurveTo=function(r,e,t,a,n){r.cmds.push(\"Q\"),r.crds.push(e,t,a,n);},e.U.P.closePath=function(r){r.cmds.push(\"Z\");},e.U._drawCFF=function(r,t,a,n,o){for(var s=t.stack,i=t.nStems,h=t.haveWidth,d=t.width,f=t.open,u=0,l=t.x,v=t.y,c=0,p=0,U=0,g=0,S=0,m=0,b=0,y=0,F=0,C=0,_={val:0,size:0};u<r.length;){e.CFF.getCharString(r,u,_);var P=_.val;if(u+=_.size,\"o1\"==P||\"o18\"==P)s.length%2!=0&&!h&&(d=s.shift()+n.nominalWidthX),i+=s.length>>1,s.length=0,h=!0;else if(\"o3\"==P||\"o23\"==P){s.length%2!=0&&!h&&(d=s.shift()+n.nominalWidthX),i+=s.length>>1,s.length=0,h=!0;}else if(\"o4\"==P)s.length>1&&!h&&(d=s.shift()+n.nominalWidthX,h=!0),f&&e.U.P.closePath(o),v+=s.pop(),e.U.P.moveTo(o,l,v),f=!0;else if(\"o5\"==P)for(;s.length>0;)l+=s.shift(),v+=s.shift(),e.U.P.lineTo(o,l,v);else if(\"o6\"==P||\"o7\"==P)for(var x=s.length,I=\"o6\"==P,w=0;w<x;w++){var k=s.shift();I?l+=k:v+=k,I=!I,e.U.P.lineTo(o,l,v);}else if(\"o8\"==P||\"o24\"==P){x=s.length;for(var G=0;G+6<=x;)c=l+s.shift(),p=v+s.shift(),U=c+s.shift(),g=p+s.shift(),l=U+s.shift(),v=g+s.shift(),e.U.P.curveTo(o,c,p,U,g,l,v),G+=6;\"o24\"==P&&(l+=s.shift(),v+=s.shift(),e.U.P.lineTo(o,l,v));}else {if(\"o11\"==P)break;if(\"o1234\"==P||\"o1235\"==P||\"o1236\"==P||\"o1237\"==P)\"o1234\"==P&&(p=v,U=(c=l+s.shift())+s.shift(),C=g=p+s.shift(),m=g,y=v,l=(b=(S=(F=U+s.shift())+s.shift())+s.shift())+s.shift(),e.U.P.curveTo(o,c,p,U,g,F,C),e.U.P.curveTo(o,S,m,b,y,l,v)),\"o1235\"==P&&(c=l+s.shift(),p=v+s.shift(),U=c+s.shift(),g=p+s.shift(),F=U+s.shift(),C=g+s.shift(),S=F+s.shift(),m=C+s.shift(),b=S+s.shift(),y=m+s.shift(),l=b+s.shift(),v=y+s.shift(),s.shift(),e.U.P.curveTo(o,c,p,U,g,F,C),e.U.P.curveTo(o,S,m,b,y,l,v)),\"o1236\"==P&&(c=l+s.shift(),p=v+s.shift(),U=c+s.shift(),C=g=p+s.shift(),m=g,b=(S=(F=U+s.shift())+s.shift())+s.shift(),y=m+s.shift(),l=b+s.shift(),e.U.P.curveTo(o,c,p,U,g,F,C),e.U.P.curveTo(o,S,m,b,y,l,v)),\"o1237\"==P&&(c=l+s.shift(),p=v+s.shift(),U=c+s.shift(),g=p+s.shift(),F=U+s.shift(),C=g+s.shift(),S=F+s.shift(),m=C+s.shift(),b=S+s.shift(),y=m+s.shift(),Math.abs(b-l)>Math.abs(y-v)?l=b+s.shift():v=y+s.shift(),e.U.P.curveTo(o,c,p,U,g,F,C),e.U.P.curveTo(o,S,m,b,y,l,v));else if(\"o14\"==P){if(s.length>0&&!h&&(d=s.shift()+a.nominalWidthX,h=!0),4==s.length){var O=s.shift(),T=s.shift(),D=s.shift(),B=s.shift(),A=e.CFF.glyphBySE(a,D),R=e.CFF.glyphBySE(a,B);e.U._drawCFF(a.CharStrings[A],t,a,n,o),t.x=O,t.y=T,e.U._drawCFF(a.CharStrings[R],t,a,n,o);}f&&(e.U.P.closePath(o),f=!1);}else if(\"o19\"==P||\"o20\"==P){s.length%2!=0&&!h&&(d=s.shift()+n.nominalWidthX),i+=s.length>>1,s.length=0,h=!0,u+=i+7>>3;}else if(\"o21\"==P)s.length>2&&!h&&(d=s.shift()+n.nominalWidthX,h=!0),v+=s.pop(),l+=s.pop(),f&&e.U.P.closePath(o),e.U.P.moveTo(o,l,v),f=!0;else if(\"o22\"==P)s.length>1&&!h&&(d=s.shift()+n.nominalWidthX,h=!0),l+=s.pop(),f&&e.U.P.closePath(o),e.U.P.moveTo(o,l,v),f=!0;else if(\"o25\"==P){for(;s.length>6;)l+=s.shift(),v+=s.shift(),e.U.P.lineTo(o,l,v);c=l+s.shift(),p=v+s.shift(),U=c+s.shift(),g=p+s.shift(),l=U+s.shift(),v=g+s.shift(),e.U.P.curveTo(o,c,p,U,g,l,v);}else if(\"o26\"==P)for(s.length%2&&(l+=s.shift());s.length>0;)c=l,p=v+s.shift(),l=U=c+s.shift(),v=(g=p+s.shift())+s.shift(),e.U.P.curveTo(o,c,p,U,g,l,v);else if(\"o27\"==P)for(s.length%2&&(v+=s.shift());s.length>0;)p=v,U=(c=l+s.shift())+s.shift(),g=p+s.shift(),l=U+s.shift(),v=g,e.U.P.curveTo(o,c,p,U,g,l,v);else if(\"o10\"==P||\"o29\"==P){var L=\"o10\"==P?n:a;if(0==s.length)console.debug(\"error: empty stack\");else {var W=s.pop(),M=L.Subrs[W+L.Bias];t.x=l,t.y=v,t.nStems=i,t.haveWidth=h,t.width=d,t.open=f,e.U._drawCFF(M,t,a,n,o),l=t.x,v=t.y,i=t.nStems,h=t.haveWidth,d=t.width,f=t.open;}}else if(\"o30\"==P||\"o31\"==P){var V=s.length,E=(G=0,\"o31\"==P);for(G+=V-(x=-3&V);G<x;)E?(p=v,U=(c=l+s.shift())+s.shift(),v=(g=p+s.shift())+s.shift(),x-G==5?(l=U+s.shift(),G++):l=U,E=!1):(c=l,p=v+s.shift(),U=c+s.shift(),g=p+s.shift(),l=U+s.shift(),x-G==5?(v=g+s.shift(),G++):v=g,E=!0),e.U.P.curveTo(o,c,p,U,g,l,v),G+=4;}else {if(\"o\"==(P+\"\").charAt(0))throw console.debug(\"Unknown operation: \"+P,r),P;s.push(P);}}}t.x=l,t.y=v,t.nStems=i,t.haveWidth=h,t.width=d,t.open=f;};var t=e,a={Typr:t};return r.Typr=t,r.default=a,Object.defineProperty(r,\"__esModule\",{value:!0}),r}({}).Typr}\n\n/*!\nCustom bundle of woff2otf (https://github.com/arty-name/woff2otf) with fflate\n(https://github.com/101arrowz/fflate) for use in Troika text rendering. \nOriginal licenses apply: \n- fflate: https://github.com/101arrowz/fflate/blob/master/LICENSE (MIT)\n- woff2otf.js: https://github.com/arty-name/woff2otf/blob/master/woff2otf.js (Apache2)\n*/\nfunction woff2otfFactory(){return function(r){var e=Uint8Array,n=Uint16Array,t=Uint32Array,a=new e([0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0,0,0,0]),i=new e([0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13,0,0]),o=new e([16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]),f=function(r,e){for(var a=new n(31),i=0;i<31;++i)a[i]=e+=1<<r[i-1];var o=new t(a[30]);for(i=1;i<30;++i)for(var f=a[i];f<a[i+1];++f)o[f]=f-a[i]<<5|i;return [a,o]},u=f(a,2),v=u[0],s=u[1];v[28]=258,s[258]=28;for(var l=f(i,0)[0],c=new n(32768),g=0;g<32768;++g){var h=(43690&g)>>>1|(21845&g)<<1;h=(61680&(h=(52428&h)>>>2|(13107&h)<<2))>>>4|(3855&h)<<4,c[g]=((65280&h)>>>8|(255&h)<<8)>>>1;}var w=function(r,e,t){for(var a=r.length,i=0,o=new n(e);i<a;++i)++o[r[i]-1];var f,u=new n(e);for(i=0;i<e;++i)u[i]=u[i-1]+o[i-1]<<1;if(t){f=new n(1<<e);var v=15-e;for(i=0;i<a;++i)if(r[i])for(var s=i<<4|r[i],l=e-r[i],g=u[r[i]-1]++<<l,h=g|(1<<l)-1;g<=h;++g)f[c[g]>>>v]=s;}else for(f=new n(a),i=0;i<a;++i)r[i]&&(f[i]=c[u[r[i]-1]++]>>>15-r[i]);return f},d=new e(288);for(g=0;g<144;++g)d[g]=8;for(g=144;g<256;++g)d[g]=9;for(g=256;g<280;++g)d[g]=7;for(g=280;g<288;++g)d[g]=8;var m=new e(32);for(g=0;g<32;++g)m[g]=5;var b=w(d,9,1),p=w(m,5,1),y=function(r){for(var e=r[0],n=1;n<r.length;++n)r[n]>e&&(e=r[n]);return e},L=function(r,e,n){var t=e/8|0;return (r[t]|r[t+1]<<8)>>(7&e)&n},U=function(r,e){var n=e/8|0;return (r[n]|r[n+1]<<8|r[n+2]<<16)>>(7&e)},k=[\"unexpected EOF\",\"invalid block type\",\"invalid length/literal\",\"invalid distance\",\"stream finished\",\"no stream handler\",,\"no callback\",\"invalid UTF-8 data\",\"extra field too long\",\"date not in range 1980-2099\",\"filename too long\",\"stream finishing\",\"invalid zip data\"],T=function(r,e,n){var t=new Error(e||k[r]);if(t.code=r,Error.captureStackTrace&&Error.captureStackTrace(t,T),!n)throw t;return t},O=function(r,f,u){var s=r.length;if(!s||u&&!u.l&&s<5)return f||new e(0);var c=!f||u,g=!u||u.i;u||(u={}),f||(f=new e(3*s));var h,d=function(r){var n=f.length;if(r>n){var t=new e(Math.max(2*n,r));t.set(f),f=t;}},m=u.f||0,k=u.p||0,O=u.b||0,A=u.l,x=u.d,E=u.m,D=u.n,M=8*s;do{if(!A){u.f=m=L(r,k,1);var S=L(r,k+1,3);if(k+=3,!S){var V=r[(I=((h=k)/8|0)+(7&h&&1)+4)-4]|r[I-3]<<8,_=I+V;if(_>s){g&&T(0);break}c&&d(O+V),f.set(r.subarray(I,_),O),u.b=O+=V,u.p=k=8*_;continue}if(1==S)A=b,x=p,E=9,D=5;else if(2==S){var j=L(r,k,31)+257,z=L(r,k+10,15)+4,C=j+L(r,k+5,31)+1;k+=14;for(var F=new e(C),P=new e(19),q=0;q<z;++q)P[o[q]]=L(r,k+3*q,7);k+=3*z;var B=y(P),G=(1<<B)-1,H=w(P,B,1);for(q=0;q<C;){var I,J=H[L(r,k,G)];if(k+=15&J,(I=J>>>4)<16)F[q++]=I;else {var K=0,N=0;for(16==I?(N=3+L(r,k,3),k+=2,K=F[q-1]):17==I?(N=3+L(r,k,7),k+=3):18==I&&(N=11+L(r,k,127),k+=7);N--;)F[q++]=K;}}var Q=F.subarray(0,j),R=F.subarray(j);E=y(Q),D=y(R),A=w(Q,E,1),x=w(R,D,1);}else T(1);if(k>M){g&&T(0);break}}c&&d(O+131072);for(var W=(1<<E)-1,X=(1<<D)-1,Y=k;;Y=k){var Z=(K=A[U(r,k)&W])>>>4;if((k+=15&K)>M){g&&T(0);break}if(K||T(2),Z<256)f[O++]=Z;else {if(256==Z){Y=k,A=null;break}var $=Z-254;if(Z>264){var rr=a[q=Z-257];$=L(r,k,(1<<rr)-1)+v[q],k+=rr;}var er=x[U(r,k)&X],nr=er>>>4;er||T(3),k+=15&er;R=l[nr];if(nr>3){rr=i[nr];R+=U(r,k)&(1<<rr)-1,k+=rr;}if(k>M){g&&T(0);break}c&&d(O+131072);for(var tr=O+$;O<tr;O+=4)f[O]=f[O-R],f[O+1]=f[O+1-R],f[O+2]=f[O+2-R],f[O+3]=f[O+3-R];O=tr;}}u.l=A,u.p=Y,u.b=O,A&&(m=1,u.m=E,u.d=x,u.n=D);}while(!m);return O==f.length?f:function(r,a,i){(null==a||a<0)&&(a=0),(null==i||i>r.length)&&(i=r.length);var o=new(r instanceof n?n:r instanceof t?t:e)(i-a);return o.set(r.subarray(a,i)),o}(f,0,O)},A=new e(0);var x=\"undefined\"!=typeof TextDecoder&&new TextDecoder;try{x.decode(A,{stream:!0}),1;}catch(r){}return r.convert_streams=function(r){var e=new DataView(r),n=0;function t(){var r=e.getUint16(n);return n+=2,r}function a(){var r=e.getUint32(n);return n+=4,r}function i(r){m.setUint16(b,r),b+=2;}function o(r){m.setUint32(b,r),b+=4;}for(var f={signature:a(),flavor:a(),length:a(),numTables:t(),reserved:t(),totalSfntSize:a(),majorVersion:t(),minorVersion:t(),metaOffset:a(),metaLength:a(),metaOrigLength:a(),privOffset:a(),privLength:a()},u=0;Math.pow(2,u)<=f.numTables;)u++;u--;for(var v=16*Math.pow(2,u),s=16*f.numTables-v,l=12,c=[],g=0;g<f.numTables;g++)c.push({tag:a(),offset:a(),compLength:a(),origLength:a(),origChecksum:a()}),l+=16;var h,w=new Uint8Array(12+16*c.length+c.reduce((function(r,e){return r+e.origLength+4}),0)),d=w.buffer,m=new DataView(d),b=0;return o(f.flavor),i(f.numTables),i(v),i(u),i(s),c.forEach((function(r){o(r.tag),o(r.origChecksum),o(l),o(r.origLength),r.outOffset=l,(l+=r.origLength)%4!=0&&(l+=4-l%4);})),c.forEach((function(e){var n,t=r.slice(e.offset,e.offset+e.compLength);if(e.compLength!=e.origLength){var a=new Uint8Array(e.origLength);n=new Uint8Array(t,2),O(n,a);}else a=new Uint8Array(t);w.set(a,e.outOffset);var i=0;(l=e.outOffset+e.origLength)%4!=0&&(i=4-l%4),w.set(new Uint8Array(i).buffer,e.outOffset+e.origLength),h=l+i;})),d.slice(0,h)},Object.defineProperty(r,\"__esModule\",{value:!0}),r}({}).convert_streams}\n\n/**\n * A factory wrapper parsing a font file using Typr.\n * Also adds support for WOFF files (not WOFF2).\n */\n\n/**\n * @typedef ParsedFont\n * @property {number} ascender\n * @property {number} descender\n * @property {number} xHeight\n * @property {(number) => boolean} supportsCodePoint\n * @property {(text:string, fontSize:number, letterSpacing:number, callback) => number} forEachGlyph\n * @property {number} lineGap\n * @property {number} capHeight\n * @property {number} unitsPerEm\n */\n\n/**\n * @typedef {(buffer: ArrayBuffer) => ParsedFont} FontParser\n */\n\n/**\n * @returns {FontParser}\n */\nfunction parserFactory(Typr, woff2otf) {\n const cmdArgLengths = {\n M: 2,\n L: 2,\n Q: 4,\n C: 6,\n Z: 0\n };\n\n // {joinType: \"skip+step,...\"}\n const joiningTypeRawData = {\"C\":\"18g,ca,368,1kz\",\"D\":\"17k,6,2,2+4,5+c,2+6,2+1,10+1,9+f,j+11,2+1,a,2,2+1,15+2,3,j+2,6+3,2+8,2,2,2+1,w+a,4+e,3+3,2,3+2,3+5,23+w,2f+4,3,2+9,2,b,2+3,3,1k+9,6+1,3+1,2+2,2+d,30g,p+y,1,1+1g,f+x,2,sd2+1d,jf3+4,f+3,2+4,2+2,b+3,42,2,4+2,2+1,2,3,t+1,9f+w,2,el+2,2+g,d+2,2l,2+1,5,3+1,2+1,2,3,6,16wm+1v\",\"R\":\"17m+3,2,2,6+3,m,15+2,2+2,h+h,13,3+8,2,2,3+1,2,p+1,x,5+4,5,a,2,2,3,u,c+2,g+1,5,2+1,4+1,5j,6+1,2,b,2+2,f,2+1,1s+2,2,3+1,7,1ez0,2,2+1,4+4,b,4,3,b,42,2+2,4,3,2+1,2,o+3,ae,ep,x,2o+2,3+1,3,5+1,6\",\"L\":\"x9u,jff,a,fd,jv\",\"T\":\"4t,gj+33,7o+4,1+1,7c+18,2,2+1,2+1,2,21+a,2,1b+k,h,2u+6,3+5,3+1,2+3,y,2,v+q,2k+a,1n+8,a,p+3,2+8,2+2,2+4,18+2,3c+e,2+v,1k,2,5+7,5,4+6,b+1,u,1n,5+3,9,l+1,r,3+1,1m,5+1,5+1,3+2,4,v+1,4,c+1,1m,5+4,2+1,5,l+1,n+5,2,1n,3,2+3,9,8+1,c+1,v,1q,d,1f,4,1m+2,6+2,2+3,8+1,c+1,u,1n,3,7,6+1,l+1,t+1,1m+1,5+3,9,l+1,u,21,8+2,2,2j,3+6,d+7,2r,3+8,c+5,23+1,s,2,2,1k+d,2+4,2+1,6+a,2+z,a,2v+3,2+5,2+1,3+1,q+1,5+2,h+3,e,3+1,7,g,jk+2,qb+2,u+2,u+1,v+1,1t+1,2+6,9,3+a,a,1a+2,3c+1,z,3b+2,5+1,a,7+2,64+1,3,1n,2+6,2,2,3+7,7+9,3,1d+d,1,1+1,1s+3,1d,2+4,2,6,15+8,d+1,x+3,3+1,2+2,1l,2+1,4,2+2,1n+7,3+1,49+2,2+c,2+6,5,7,4+1,5j+1l,2+4,ek,3+1,r+4,1e+4,6+5,2p+c,1+3,1,1+2,1+b,2db+2,3y,2p+v,ff+3,30+1,n9x,1+2,2+9,x+1,29+1,7l,4,5,q+1,6,48+1,r+h,e,13+7,q+a,1b+2,1d,3+3,3+1,14,1w+5,3+1,3+1,d,9,1c,1g,2+2,3+1,6+1,2,17+1,9,6n,3,5,fn5,ki+f,h+f,5s,6y+2,ea,6b,46+4,1af+2,2+1,6+3,15+2,5,4m+1,fy+3,as+1,4a+a,4x,1j+e,1l+2,1e+3,3+1,1y+2,11+4,2+7,1r,d+1,1h+8,b+3,3,2o+2,3,2+1,7,4h,4+7,m+1,1m+1,4,12+6,4+4,5g+7,3+2,2,o,2d+5,2,5+1,2+1,6n+3,7+1,2+1,s+1,2e+7,3,2+1,2z,2,3+5,2,2u+2,3+3,2+4,78+8,2+1,75+1,2,5,41+3,3+1,5,x+9,15+5,3+3,9,a+5,3+2,1b+c,2+1,bb+6,2+5,2,2b+l,3+6,2+1,2+1,3f+5,4,2+1,2+6,2,21+1,4,2,9o+1,470+8,at4+4,1o+6,t5,1s+3,2a,f5l+1,2+3,43o+2,a+7,1+7,3+6,v+3,45+2,1j0+1i,5+1d,9,f,n+4,2+e,11t+6,2+g,3+6,2+1,2+4,7a+6,c6+3,15t+6,32+6,1,gzau,v+2n,3l+6n\"};\n\n const JT_LEFT = 1, //indicates that a character joins with the subsequent character, but does not join with the preceding character.\n JT_RIGHT = 2, //indicates that a character joins with the preceding character, but does not join with the subsequent character.\n JT_DUAL = 4, //indicates that a character joins with the preceding character and joins with the subsequent character.\n JT_TRANSPARENT = 8, //indicates that the character does not join with adjacent characters and that the character must be skipped over when the shaping engine is evaluating the joining positions in a sequence of characters. When a JT_TRANSPARENT character is encountered in a sequence, the JOINING_TYPE of the preceding character passes through. Diacritical marks are frequently assigned this value.\n JT_JOIN_CAUSING = 16, //indicates that the character forces the use of joining forms with the preceding and subsequent characters. Kashidas and the Zero Width Joiner (U+200D) are both JOIN_CAUSING characters.\n JT_NON_JOINING = 32; //indicates that a character does not join with the preceding or with the subsequent character.,\n\n let joiningTypeMap;\n function getCharJoiningType(ch) {\n if (!joiningTypeMap) {\n const m = {\n R: JT_RIGHT,\n L: JT_LEFT,\n D: JT_DUAL,\n C: JT_JOIN_CAUSING,\n U: JT_NON_JOINING,\n T: JT_TRANSPARENT\n };\n joiningTypeMap = new Map();\n for (let type in joiningTypeRawData) {\n let lastCode = 0;\n joiningTypeRawData[type].split(',').forEach(range => {\n let [skip, step] = range.split('+');\n skip = parseInt(skip,36);\n step = step ? parseInt(step, 36) : 0;\n joiningTypeMap.set(lastCode += skip, m[type]);\n for (let i = step; i--;) {\n joiningTypeMap.set(++lastCode, m[type]);\n }\n });\n }\n }\n return joiningTypeMap.get(ch) || JT_NON_JOINING\n }\n\n const ISOL = 1, INIT = 2, FINA = 3, MEDI = 4;\n const formsToFeatures = [null, 'isol', 'init', 'fina', 'medi'];\n\n function detectJoiningForms(str) {\n // This implements the algorithm described here:\n // https://github.com/n8willis/opentype-shaping-documents/blob/master/opentype-shaping-arabic-general.md\n const joiningForms = new Uint8Array(str.length);\n let prevJoiningType = JT_NON_JOINING;\n let prevForm = ISOL;\n let prevIndex = -1;\n for (let i = 0; i < str.length; i++) {\n const code = str.codePointAt(i);\n let joiningType = getCharJoiningType(code) | 0;\n let form = ISOL;\n if (joiningType & JT_TRANSPARENT) {\n continue\n }\n if (prevJoiningType & (JT_LEFT | JT_DUAL | JT_JOIN_CAUSING)) {\n if (joiningType & (JT_RIGHT | JT_DUAL | JT_JOIN_CAUSING)) {\n form = FINA;\n // isol->init, fina->medi\n if (prevForm === ISOL || prevForm === FINA) {\n joiningForms[prevIndex]++;\n }\n }\n else if (joiningType & (JT_LEFT | JT_NON_JOINING)) {\n // medi->fina, init->isol\n if (prevForm === INIT || prevForm === MEDI) {\n joiningForms[prevIndex]--;\n }\n }\n }\n else if (prevJoiningType & (JT_RIGHT | JT_NON_JOINING)) {\n // medi->fina, init->isol\n if (prevForm === INIT || prevForm === MEDI) {\n joiningForms[prevIndex]--;\n }\n }\n prevForm = joiningForms[i] = form;\n prevJoiningType = joiningType;\n prevIndex = i;\n if (code > 0xffff) i++;\n }\n // console.log(str.split('').map(ch => ch.codePointAt(0).toString(16)))\n // console.log(str.split('').map(ch => getCharJoiningType(ch.codePointAt(0))))\n // console.log(Array.from(joiningForms).map(f => formsToFeatures[f] || 'none'))\n return joiningForms\n }\n\n function stringToGlyphs (font, str) {\n const glyphIds = [];\n for (let i = 0; i < str.length; i++) {\n const cc = str.codePointAt(i);\n if (cc > 0xffff) i++;\n glyphIds.push(Typr.U.codeToGlyph(font, cc));\n }\n\n const gsub = font['GSUB'];\n if (gsub) {\n const {lookupList, featureList} = gsub;\n let joiningForms;\n const supportedFeatures = /^(rlig|liga|mset|isol|init|fina|medi|half|pres|blws|ccmp)$/;\n const usedLookups = [];\n featureList.forEach(feature => {\n if (supportedFeatures.test(feature.tag)) {\n for (let ti = 0; ti < feature.tab.length; ti++) {\n if (usedLookups[feature.tab[ti]]) continue\n usedLookups[feature.tab[ti]] = true;\n const tab = lookupList[feature.tab[ti]];\n const isJoiningFeature = /^(isol|init|fina|medi)$/.test(feature.tag);\n if (isJoiningFeature && !joiningForms) { //lazy\n joiningForms = detectJoiningForms(str);\n }\n for (let ci = 0; ci < glyphIds.length; ci++) {\n if (!joiningForms || !isJoiningFeature || formsToFeatures[joiningForms[ci]] === feature.tag) {\n Typr.U._applySubs(glyphIds, ci, tab, lookupList);\n }\n }\n }\n }\n });\n }\n\n return glyphIds\n }\n\n // Calculate advances and x/y offsets for each glyph, e.g. kerning and mark\n // attachments. This is a more complete version of Typr.U.getPairAdjustment\n // and should become an upstream replacement eventually.\n function calcGlyphPositions(font, glyphIds) {\n const positions = new Int16Array(glyphIds.length * 3); // [offsetX, offsetY, advanceX, ...]\n let glyphIndex = 0;\n for (; glyphIndex < glyphIds.length; glyphIndex++) {\n const glyphId = glyphIds[glyphIndex];\n if (glyphId === -1) continue;\n\n positions[glyphIndex * 3 + 2] = font.hmtx.aWidth[glyphId]; // populate advanceX in...advance.\n\n const gpos = font.GPOS;\n if (gpos) {\n const llist = gpos.lookupList;\n for (let i = 0; i < llist.length; i++) {\n const lookup = llist[i];\n for (let j = 0; j < lookup.tabs.length; j++) {\n const tab = lookup.tabs[j];\n // Single char placement\n if (lookup.ltype === 1) {\n const ind = Typr._lctf.coverageIndex(tab.coverage, glyphId);\n if (ind !== -1 && tab.pos) {\n applyValueRecord(tab.pos, glyphIndex);\n break\n }\n }\n // Pairs (kerning)\n else if (lookup.ltype === 2) {\n let adj = null;\n let prevGlyphIndex = getPrevGlyphIndex();\n if (prevGlyphIndex !== -1) {\n const coverageIndex = Typr._lctf.coverageIndex(tab.coverage, glyphIds[prevGlyphIndex]);\n if (coverageIndex !== -1) {\n if (tab.fmt === 1) {\n const right = tab.pairsets[coverageIndex];\n for (let k = 0; k < right.length; k++) {\n if (right[k].gid2 === glyphId) adj = right[k];\n }\n } else if (tab.fmt === 2) {\n const c1 = Typr.U._getGlyphClass(glyphIds[prevGlyphIndex], tab.classDef1);\n const c2 = Typr.U._getGlyphClass(glyphId, tab.classDef2);\n adj = tab.matrix[c1][c2];\n }\n if (adj) {\n if (adj.val1) applyValueRecord(adj.val1, prevGlyphIndex);\n if (adj.val2) applyValueRecord(adj.val2, glyphIndex);\n break\n }\n }\n }\n }\n // Mark to base\n else if (lookup.ltype === 4) {\n const markArrIndex = Typr._lctf.coverageIndex(tab.markCoverage, glyphId);\n if (markArrIndex !== -1) {\n const baseGlyphIndex = getPrevGlyphIndex(isBaseGlyph);\n const baseArrIndex = baseGlyphIndex === -1 ? -1 : Typr._lctf.coverageIndex(tab.baseCoverage, glyphIds[baseGlyphIndex]);\n if (baseArrIndex !== -1) {\n const markRecord = tab.markArray[markArrIndex];\n const baseAnchor = tab.baseArray[baseArrIndex][markRecord.markClass];\n positions[glyphIndex * 3] = baseAnchor.x - markRecord.x + positions[baseGlyphIndex * 3] - positions[baseGlyphIndex * 3 + 2];\n positions[glyphIndex * 3 + 1] = baseAnchor.y - markRecord.y + positions[baseGlyphIndex * 3 + 1];\n break;\n }\n }\n }\n // Mark to mark\n else if (lookup.ltype === 6) {\n const mark1ArrIndex = Typr._lctf.coverageIndex(tab.mark1Coverage, glyphId);\n if (mark1ArrIndex !== -1) {\n const prevGlyphIndex = getPrevGlyphIndex();\n if (prevGlyphIndex !== -1) {\n const prevGlyphId = glyphIds[prevGlyphIndex];\n if (getGlyphClass(font, prevGlyphId) === 3) { // only check mark glyphs\n const mark2ArrIndex = Typr._lctf.coverageIndex(tab.mark2Coverage, prevGlyphId);\n if (mark2ArrIndex !== -1) {\n const mark1Record = tab.mark1Array[mark1ArrIndex];\n const mark2Anchor = tab.mark2Array[mark2ArrIndex][mark1Record.markClass];\n positions[glyphIndex * 3] = mark2Anchor.x - mark1Record.x + positions[prevGlyphIndex * 3] - positions[prevGlyphIndex * 3 + 2];\n positions[glyphIndex * 3 + 1] = mark2Anchor.y - mark1Record.y + positions[prevGlyphIndex * 3 + 1];\n break;\n }\n }\n }\n }\n }\n }\n }\n }\n // Check kern table if no GPOS\n else if (font.kern && !font.cff) {\n const prevGlyphIndex = getPrevGlyphIndex();\n if (prevGlyphIndex !== -1) {\n const ind1 = font.kern.glyph1.indexOf(glyphIds[prevGlyphIndex]);\n if (ind1 !== -1) {\n const ind2 = font.kern.rval[ind1].glyph2.indexOf(glyphId);\n if (ind2 !== -1) {\n positions[prevGlyphIndex * 3 + 2] += font.kern.rval[ind1].vals[ind2];\n }\n }\n }\n }\n }\n\n return positions;\n\n function getPrevGlyphIndex(filter) {\n for (let i = glyphIndex - 1; i >=0; i--) {\n if (glyphIds[i] !== -1 && (!filter || filter(glyphIds[i]))) {\n return i\n }\n }\n return -1;\n }\n\n function isBaseGlyph(glyphId) {\n return getGlyphClass(font, glyphId) === 1;\n }\n\n function applyValueRecord(source, gi) {\n for (let i = 0; i < 3; i++) {\n positions[gi * 3 + i] += source[i] || 0;\n }\n }\n }\n\n function getGlyphClass(font, glyphId) {\n const classDef = font.GDEF && font.GDEF.glyphClassDef;\n return classDef ? Typr.U._getGlyphClass(glyphId, classDef) : 0;\n }\n\n function firstNum(...args) {\n for (let i = 0; i < args.length; i++) {\n if (typeof args[i] === 'number') {\n return args[i]\n }\n }\n }\n\n /**\n * @returns ParsedFont\n */\n function wrapFontObj(typrFont) {\n const glyphMap = Object.create(null);\n\n const os2 = typrFont['OS/2'];\n const hhea = typrFont.hhea;\n const unitsPerEm = typrFont.head.unitsPerEm;\n const ascender = firstNum(os2 && os2.sTypoAscender, hhea && hhea.ascender, unitsPerEm);\n\n /** @type ParsedFont */\n const fontObj = {\n unitsPerEm,\n ascender,\n descender: firstNum(os2 && os2.sTypoDescender, hhea && hhea.descender, 0),\n capHeight: firstNum(os2 && os2.sCapHeight, ascender),\n xHeight: firstNum(os2 && os2.sxHeight, ascender),\n lineGap: firstNum(os2 && os2.sTypoLineGap, hhea && hhea.lineGap),\n supportsCodePoint(code) {\n return Typr.U.codeToGlyph(typrFont, code) > 0\n },\n forEachGlyph(text, fontSize, letterSpacing, callback) {\n let penX = 0;\n const fontScale = 1 / fontObj.unitsPerEm * fontSize;\n\n const glyphIds = stringToGlyphs(typrFont, text);\n let charIndex = 0;\n const positions = calcGlyphPositions(typrFont, glyphIds);\n\n glyphIds.forEach((glyphId, i) => {\n // Typr returns a glyph index per string codepoint, with -1s in place of those that\n // were omitted due to ligature substitution. So we can track original index in the\n // string via simple increment, and skip everything else when seeing a -1.\n if (glyphId !== -1) {\n let glyphObj = glyphMap[glyphId];\n if (!glyphObj) {\n const {cmds, crds} = Typr.U.glyphToPath(typrFont, glyphId);\n\n // Build path string\n let path = '';\n let crdsIdx = 0;\n for (let i = 0, len = cmds.length; i < len; i++) {\n const numArgs = cmdArgLengths[cmds[i]];\n path += cmds[i];\n for (let j = 1; j <= numArgs; j++) {\n path += (j > 1 ? ',' : '') + crds[crdsIdx++];\n }\n }\n\n // Find extents - Glyf gives this in metadata but not CFF, and Typr doesn't\n // normalize the two, so it's simplest just to iterate ourselves.\n let xMin, yMin, xMax, yMax;\n if (crds.length) {\n xMin = yMin = Infinity;\n xMax = yMax = -Infinity;\n for (let i = 0, len = crds.length; i < len; i += 2) {\n let x = crds[i];\n let y = crds[i + 1];\n if (x < xMin) xMin = x;\n if (y < yMin) yMin = y;\n if (x > xMax) xMax = x;\n if (y > yMax) yMax = y;\n }\n } else {\n xMin = xMax = yMin = yMax = 0;\n }\n\n glyphObj = glyphMap[glyphId] = {\n index: glyphId,\n advanceWidth: typrFont.hmtx.aWidth[glyphId],\n xMin,\n yMin,\n xMax,\n yMax,\n path,\n };\n }\n\n callback.call(\n null,\n glyphObj,\n penX + positions[i * 3] * fontScale,\n positions[i * 3 + 1] * fontScale,\n charIndex\n );\n\n penX += positions[i * 3 + 2] * fontScale;\n if (letterSpacing) {\n penX += letterSpacing * fontSize;\n }\n }\n charIndex += (text.codePointAt(charIndex) > 0xffff ? 2 : 1);\n });\n\n return penX\n }\n };\n\n return fontObj\n }\n\n /**\n * @type FontParser\n */\n return function parse(buffer) {\n // Look to see if we have a WOFF file and convert it if so:\n const peek = new Uint8Array(buffer, 0, 4);\n const tag = Typr._bin.readASCII(peek, 0, 4);\n if (tag === 'wOFF') {\n buffer = woff2otf(buffer);\n } else if (tag === 'wOF2') {\n throw new Error('woff2 fonts not supported')\n }\n return wrapFontObj(Typr.parse(buffer)[0])\n }\n}\n\n\nconst workerModule = /*#__PURE__*/defineWorkerModule({\n name: 'Typr Font Parser',\n dependencies: [typrFactory, woff2otfFactory, parserFactory],\n init(typrFactory, woff2otfFactory, parserFactory) {\n const Typr = typrFactory();\n const woff2otf = woff2otfFactory();\n return parserFactory(Typr, woff2otf)\n }\n});\n\n/*!\nCustom bundle of @unicode-font-resolver/client v1.0.2 (https://github.com/lojjic/unicode-font-resolver)\nfor use in Troika text rendering. \nOriginal MIT license applies\n*/\nfunction unicodeFontResolverClientFactory(){return function(t){var n=function(){this.buckets=new Map;};n.prototype.add=function(t){var n=t>>5;this.buckets.set(n,(this.buckets.get(n)||0)|1<<(31&t));},n.prototype.has=function(t){var n=this.buckets.get(t>>5);return void 0!==n&&0!=(n&1<<(31&t))},n.prototype.serialize=function(){var t=[];return this.buckets.forEach((function(n,r){t.push((+r).toString(36)+\":\"+n.toString(36));})),t.join(\",\")},n.prototype.deserialize=function(t){var n=this;this.buckets.clear(),t.split(\",\").forEach((function(t){var r=t.split(\":\");n.buckets.set(parseInt(r[0],36),parseInt(r[1],36));}));};var r=Math.pow(2,8),e=r-1,o=~e;function a(t){var n=function(t){return t&o}(t).toString(16),e=function(t){return (t&o)+r-1}(t).toString(16);return \"codepoint-index/plane\"+(t>>16)+\"/\"+n+\"-\"+e+\".json\"}function i(t,n){var r=t&e,o=n.codePointAt(r/6|0);return 0!=((o=(o||48)-48)&1<<r%6)}function u(t,n){var r;(r=t,r.replace(/U\\+/gi,\"\").replace(/^,+|,+$/g,\"\").split(/,+/).map((function(t){return t.split(\"-\").map((function(t){return parseInt(t.trim(),16)}))}))).forEach((function(t){var r=t[0],e=t[1];void 0===e&&(e=r),n(r,e);}));}function c(t,n){u(t,(function(t,r){for(var e=t;e<=r;e++)n(e);}));}var s={},f={},l=new WeakMap,v=\"https://cdn.jsdelivr.net/gh/lojjic/unicode-font-resolver@v1.0.1/packages/data\";function d(t){var r=l.get(t);return r||(r=new n,c(t.ranges,(function(t){return r.add(t)})),l.set(t,r)),r}var h,p=new Map;function g(t,n,r){return t[n]?n:t[r]?r:function(t){for(var n in t)return n}(t)}function w(t,n){var r=n;if(!t.includes(r)){r=1/0;for(var e=0;e<t.length;e++)Math.abs(t[e]-n)<Math.abs(r-n)&&(r=t[e]);}return r}function k(t){return h||(h=new Set,c(\"9-D,20,85,A0,1680,2000-200A,2028-202F,205F,3000\",(function(t){h.add(t);}))),h.has(t)}return t.CodePointSet=n,t.clearCache=function(){s={},f={};},t.getFontsForString=function(t,n){void 0===n&&(n={});var r,e=n.lang;void 0===e&&(e=/\\p{Script=Hangul}/u.test(r=t)?\"ko\":/\\p{Script=Hiragana}|\\p{Script=Katakana}/u.test(r)?\"ja\":\"en\");var o=n.category;void 0===o&&(o=\"sans-serif\");var u=n.style;void 0===u&&(u=\"normal\");var c=n.weight;void 0===c&&(c=400);var l=(n.dataUrl||v).replace(/\\/$/g,\"\"),h=new Map,y=new Uint8Array(t.length),b={},m={},A=new Array(t.length),S=new Map,j=!1;function M(t){var n=p.get(t);return n||(n=fetch(l+\"/\"+t).then((function(t){if(!t.ok)throw new Error(t.statusText);return t.json().then((function(t){if(!Array.isArray(t)||1!==t[0])throw new Error(\"Incorrect schema version; need 1, got \"+t[0]);return t[1]}))})).catch((function(n){if(l!==v)return j||(console.error('unicode-font-resolver: Failed loading from dataUrl \"'+l+'\", trying default CDN. '+n.message),j=!0),l=v,p.delete(t),M(t);throw n})),p.set(t,n)),n}for(var P=function(n){var r=t.codePointAt(n),e=a(r);A[n]=e,s[e]||S.has(e)||S.set(e,M(e).then((function(t){s[e]=t;}))),r>65535&&(n++,E=n);},E=0;E<t.length;E++)P(E);return Promise.all(S.values()).then((function(){S.clear();for(var n=function(n){var o=t.codePointAt(n),a=null,u=s[A[n]],c=void 0;for(var l in u){var v=m[l];if(void 0===v&&(v=m[l]=new RegExp(l).test(e||\"en\")),v){for(var d in c=l,u[l])if(i(o,u[l][d])){a=d;break}break}}if(!a)t:for(var h in u)if(h!==c)for(var p in u[h])if(i(o,u[h][p])){a=p;break t}a||(console.debug(\"No font coverage for U+\"+o.toString(16)),a=\"latin\"),A[n]=a,f[a]||S.has(a)||S.set(a,M(\"font-meta/\"+a+\".json\").then((function(t){f[a]=t;}))),o>65535&&(n++,r=n);},r=0;r<t.length;r++)n(r);return Promise.all(S.values())})).then((function(){for(var n,r=null,e=0;e<t.length;e++){var a=t.codePointAt(e);if(r&&(k(a)||d(r).has(a)))y[e]=y[e-1];else {r=f[A[e]];var i=b[r.id];if(!i){var s=r.typeforms,v=g(s,o,\"sans-serif\"),p=g(s[v],u,\"normal\"),m=w(null===(n=s[v])||void 0===n?void 0:n[p],c);i=b[r.id]=l+\"/font-files/\"+r.id+\"/\"+v+\".\"+p+\".\"+m+\".woff\";}var S=h.get(i);null==S&&(S=h.size,h.set(i,S)),y[e]=S;}a>65535&&(e++,y[e]=y[e-1]);}return {fontUrls:Array.from(h.keys()),chars:y}}))},Object.defineProperty(t,\"__esModule\",{value:!0}),t}({})}\n\n/**\n * @typedef {string | {src:string, label?:string, unicodeRange?:string, lang?:string}} UserFont\n */\n\n/**\n * @typedef {ClientOptions} FontResolverOptions\n * @property {Array<UserFont>|UserFont} [fonts]\n * @property {'normal'|'italic'} [style]\n * @property {'normal'|'bold'|number} [style]\n * @property {string} [unicodeFontsURL]\n */\n\n/**\n * @typedef {Object} FontResolverResult\n * @property {Uint8Array} chars\n * @property {Array<ParsedFont & {src:string}>} fonts\n */\n\n/**\n * @typedef {function} FontResolver\n * @param {string} text\n * @param {(FontResolverResult) => void} callback\n * @param {FontResolverOptions} [options]\n */\n\n/**\n * Factory for the FontResolver function.\n * @param {FontParser} fontParser\n * @param {{getFontsForString: function, CodePointSet: function}} unicodeFontResolverClient\n * @return {FontResolver}\n */\nfunction createFontResolver(fontParser, unicodeFontResolverClient) {\n /**\n * @type {Record<string, ParsedFont>}\n */\n const parsedFonts = Object.create(null);\n\n /**\n * @type {Record<string, Array<(ParsedFont) => void>>}\n */\n const loadingFonts = Object.create(null);\n\n /**\n * Load a given font url\n */\n function doLoadFont(url, callback) {\n const onError = err => {\n console.error(`Failure loading font ${url}`, err);\n };\n try {\n const request = new XMLHttpRequest();\n request.open('get', url, true);\n request.responseType = 'arraybuffer';\n request.onload = function () {\n if (request.status >= 400) {\n onError(new Error(request.statusText));\n }\n else if (request.status > 0) {\n try {\n const fontObj = fontParser(request.response);\n fontObj.src = url;\n callback(fontObj);\n } catch (e) {\n onError(e);\n }\n }\n };\n request.onerror = onError;\n request.send();\n } catch(err) {\n onError(err);\n }\n }\n\n\n /**\n * Load a given font url if needed, invoking a callback when it's loaded. If already\n * loaded, the callback will be called synchronously.\n * @param {string} fontUrl\n * @param {(font: ParsedFont) => void} callback\n */\n function loadFont(fontUrl, callback) {\n let font = parsedFonts[fontUrl];\n if (font) {\n callback(font);\n } else if (loadingFonts[fontUrl]) {\n loadingFonts[fontUrl].push(callback);\n } else {\n loadingFonts[fontUrl] = [callback];\n doLoadFont(fontUrl, fontObj => {\n fontObj.src = fontUrl;\n parsedFonts[fontUrl] = fontObj;\n loadingFonts[fontUrl].forEach(cb => cb(fontObj));\n delete loadingFonts[fontUrl];\n });\n }\n }\n\n /**\n * For a given string of text, determine which fonts are required to fully render it and\n * ensure those fonts are loaded.\n */\n return function (text, callback, {\n lang,\n fonts: userFonts = [],\n style = 'normal',\n weight = 'normal',\n unicodeFontsURL\n } = {}) {\n const charResolutions = new Uint8Array(text.length);\n const fontResolutions = [];\n if (!text.length) {\n allDone();\n }\n\n const fontIndices = new Map();\n const fallbackRanges = []; // [[start, end], ...]\n\n if (style !== 'italic') style = 'normal';\n if (typeof weight !== 'number') {\n weight = weight === 'bold' ? 700 : 400;\n }\n\n if (userFonts && !Array.isArray(userFonts)) {\n userFonts = [userFonts];\n }\n userFonts = userFonts.slice()\n // filter by language\n .filter(def => !def.lang || def.lang.test(lang))\n // switch order for easier iteration\n .reverse();\n if (userFonts.length) {\n const UNKNOWN = 0;\n const RESOLVED = 1;\n const NEEDS_FALLBACK = 2;\n let prevCharResult = UNKNOWN\n\n ;(function resolveUserFonts (startIndex = 0) {\n for (let i = startIndex, iLen = text.length; i < iLen; i++) {\n const codePoint = text.codePointAt(i);\n // Carry previous character's result forward if:\n // - it resolved to a font that also covers this character\n // - this character is whitespace\n if (\n (prevCharResult === RESOLVED && fontResolutions[charResolutions[i - 1]].supportsCodePoint(codePoint)) ||\n (i > 0 && /\\s/.test(text[i]))\n ) {\n charResolutions[i] = charResolutions[i - 1];\n if (prevCharResult === NEEDS_FALLBACK) {\n fallbackRanges[fallbackRanges.length - 1][1] = i;\n }\n } else {\n for (let j = charResolutions[i], jLen = userFonts.length; j <= jLen; j++) {\n if (j === jLen) {\n // none of the user fonts matched; needs fallback\n const range = prevCharResult === NEEDS_FALLBACK ?\n fallbackRanges[fallbackRanges.length - 1] :\n (fallbackRanges[fallbackRanges.length] = [i, i]);\n range[1] = i;\n prevCharResult = NEEDS_FALLBACK;\n } else {\n charResolutions[i] = j;\n const { src, unicodeRange } = userFonts[j];\n // filter by optional explicit unicode ranges\n if (!unicodeRange || isCodeInRanges(codePoint, unicodeRange)) {\n const fontObj = parsedFonts[src];\n // font not yet loaded, load it and resume\n if (!fontObj) {\n loadFont(src, () => {\n resolveUserFonts(i);\n });\n return;\n }\n // if the font actually contains a glyph for this char, lock it in\n if (fontObj.supportsCodePoint(codePoint)) {\n let fontIndex = fontIndices.get(fontObj);\n if (typeof fontIndex !== 'number') {\n fontIndex = fontResolutions.length;\n fontResolutions.push(fontObj);\n fontIndices.set(fontObj, fontIndex);\n }\n charResolutions[i] = fontIndex;\n prevCharResult = RESOLVED;\n break;\n }\n }\n }\n }\n }\n\n if (codePoint > 0xffff && i + 1 < iLen) {\n charResolutions[i + 1] = charResolutions[i];\n i++;\n if (prevCharResult === NEEDS_FALLBACK) {\n fallbackRanges[fallbackRanges.length - 1][1] = i;\n }\n }\n }\n resolveFallbacks();\n })();\n } else {\n fallbackRanges.push([0, text.length - 1]);\n resolveFallbacks();\n }\n\n function resolveFallbacks() {\n if (fallbackRanges.length) {\n // Combine all fallback substrings into a single string for querying\n const fallbackString = fallbackRanges.map(range => text.substring(range[0], range[1] + 1)).join('\\n');\n unicodeFontResolverClient.getFontsForString(fallbackString, {\n lang: lang || undefined,\n style,\n weight,\n dataUrl: unicodeFontsURL\n }).then(({fontUrls, chars}) => {\n // Extract results and put them back in the main array\n const fontIndexOffset = fontResolutions.length;\n let charIdx = 0;\n fallbackRanges.forEach(range => {\n for (let i = 0, endIdx = range[1] - range[0]; i <= endIdx; i++) {\n charResolutions[range[0] + i] = chars[charIdx++] + fontIndexOffset;\n }\n charIdx++; //skip segment separator\n });\n\n // Load and parse the fallback fonts - avoiding Promise here to prevent polyfills in the worker\n let loadedCount = 0;\n fontUrls.forEach((url, i) => {\n loadFont(url, fontObj => {\n fontResolutions[i + fontIndexOffset] = fontObj;\n if (++loadedCount === fontUrls.length) {\n allDone();\n }\n });\n });\n });\n } else {\n allDone();\n }\n }\n\n function allDone() {\n callback({\n chars: charResolutions,\n fonts: fontResolutions\n });\n }\n\n function isCodeInRanges(code, ranges) {\n // todo optimize search - CodePointSet from unicode-font-resolver?\n for (let k = 0; k < ranges.length; k++) {\n const [start, end = start] = ranges[k];\n if (start <= code && code <= end) {\n return true\n }\n }\n return false\n }\n }\n}\n\nconst fontResolverWorkerModule = /*#__PURE__*/defineWorkerModule({\n name: 'FontResolver',\n dependencies: [\n createFontResolver,\n workerModule,\n unicodeFontResolverClientFactory,\n ],\n init(createFontResolver, fontParser, unicodeFontResolverClientFactory) {\n return createFontResolver(fontParser, unicodeFontResolverClientFactory());\n }\n});\n\n/**\n * @typedef {number|'left'|'center'|'right'} AnchorXValue\n */\n/**\n * @typedef {number|'top'|'top-baseline'|'top-cap'|'top-ex'|'middle'|'bottom-baseline'|'bottom'} AnchorYValue\n */\n\n/**\n * @typedef {object} TypesetParams\n * @property {string} text\n * @property {UserFont|UserFont[]} [font]\n * @property {string} [lang]\n * @property {number} [sdfGlyphSize=64]\n * @property {number} [fontSize=1]\n * @property {number|'normal'|'bold'} [fontWeight='normal']\n * @property {'normal'|'italic'} [fontStyle='normal']\n * @property {number} [letterSpacing=0]\n * @property {'normal'|number} [lineHeight='normal']\n * @property {number} [maxWidth]\n * @property {'ltr'|'rtl'} [direction='ltr']\n * @property {string} [textAlign='left']\n * @property {number} [textIndent=0]\n * @property {'normal'|'nowrap'} [whiteSpace='normal']\n * @property {'normal'|'break-word'} [overflowWrap='normal']\n * @property {AnchorXValue} [anchorX=0]\n * @property {AnchorYValue} [anchorY=0]\n * @property {boolean} [metricsOnly=false]\n * @property {string} [unicodeFontsURL]\n * @property {FontResolverResult} [preResolvedFonts]\n * @property {boolean} [includeCaretPositions=false]\n * @property {number} [chunkedBoundsSize=8192]\n * @property {{[rangeStartIndex]: number}} [colorRanges]\n */\n\n/**\n * @typedef {object} TypesetResult\n * @property {Uint16Array} glyphIds id for each glyph, specific to that glyph's font\n * @property {Uint8Array} glyphFontIndices index into fontData for each glyph\n * @property {Float32Array} glyphPositions x,y of each glyph's origin in layout\n * @property {{[font]: {[glyphId]: {path: string, pathBounds: number[]}}}} glyphData data about each glyph appearing in the text\n * @property {TypesetFontData[]} fontData data about each font used in the text\n * @property {Float32Array} [caretPositions] startX,endX,bottomY caret positions for each char\n * @property {Uint8Array} [glyphColors] color for each glyph, if color ranges supplied\n * chunkedBounds, //total rects per (n=chunkedBoundsSize) consecutive glyphs\n * fontSize, //calculated em height\n * topBaseline: anchorYOffset + lines[0].baseline, //y coordinate of the top line's baseline\n * blockBounds: [ //bounds for the whole block of text, including vertical padding for lineHeight\n * anchorXOffset,\n * anchorYOffset - totalHeight,\n * anchorXOffset + maxLineWidth,\n * anchorYOffset\n * ],\n * visibleBounds, //total bounds of visible text paths, may be larger or smaller than blockBounds\n * timings\n */\n\n/**\n * @typedef {object} TypesetFontData\n * @property src\n * @property unitsPerEm\n * @property ascender\n * @property descender\n * @property lineHeight\n * @property capHeight\n * @property xHeight\n */\n\n/**\n * @typedef {function} TypesetterTypesetFunction - compute fonts and layout for some text.\n * @param {TypesetParams} params\n * @param {(TypesetResult) => void} callback - function called when typesetting is complete.\n * If the params included `preResolvedFonts`, this will be called synchronously.\n */\n\n/**\n * @typedef {function} TypesetterMeasureFunction - compute width/height for some text.\n * @param {TypesetParams} params\n * @param {(width:number, height:number) => void} callback - function called when measurement is complete.\n * If the params included `preResolvedFonts`, this will be called synchronously.\n */\n\n\n/**\n * Factory function that creates a self-contained environment for processing text typesetting requests.\n *\n * It is important that this function has no closure dependencies, so that it can be easily injected\n * into the source for a Worker without requiring a build step or complex dependency loading. All its\n * dependencies must be passed in at initialization.\n *\n * @param {FontResolver} resolveFonts - function to resolve a string to parsed fonts\n * @param {object} bidi - the bidi.js implementation object\n * @return {{typeset: TypesetterTypesetFunction, measure: TypesetterMeasureFunction}}\n */\nfunction createTypesetter(resolveFonts, bidi) {\n const INF = Infinity;\n\n // Set of Unicode Default_Ignorable_Code_Point characters, these will not produce visible glyphs\n // eslint-disable-next-line no-misleading-character-class\n const DEFAULT_IGNORABLE_CHARS = /[\\u00AD\\u034F\\u061C\\u115F-\\u1160\\u17B4-\\u17B5\\u180B-\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u3164\\uFE00-\\uFE0F\\uFEFF\\uFFA0\\uFFF0-\\uFFF8]/;\n\n // This regex (instead of /\\s/) allows us to select all whitespace EXCEPT for non-breaking white spaces\n const lineBreakingWhiteSpace = `[^\\\\S\\\\u00A0]`;\n\n // Incomplete set of characters that allow line breaking after them\n // In the future we may consider a full Unicode line breaking algorithm impl: https://www.unicode.org/reports/tr14\n const BREAK_AFTER_CHARS = new RegExp(`${lineBreakingWhiteSpace}|[\\\\-\\\\u007C\\\\u00AD\\\\u2010\\\\u2012-\\\\u2014\\\\u2027\\\\u2056\\\\u2E17\\\\u2E40]`);\n\n /**\n * Load and parse all the necessary fonts to render a given string of text, then group\n * them into consecutive runs of characters sharing a font.\n */\n function calculateFontRuns({text, lang, fonts, style, weight, preResolvedFonts, unicodeFontsURL}, onDone) {\n const onResolved = ({chars, fonts: parsedFonts}) => {\n let curRun, prevVal;\n const runs = [];\n for (let i = 0; i < chars.length; i++) {\n if (chars[i] !== prevVal) {\n prevVal = chars[i];\n runs.push(curRun = { start: i, end: i, fontObj: parsedFonts[chars[i]]});\n } else {\n curRun.end = i;\n }\n }\n onDone(runs);\n };\n if (preResolvedFonts) {\n onResolved(preResolvedFonts);\n } else {\n resolveFonts(\n text,\n onResolved,\n { lang, fonts, style, weight, unicodeFontsURL }\n );\n }\n }\n\n /**\n * Main entry point.\n * Process a text string with given font and formatting parameters, and return all info\n * necessary to render all its glyphs.\n * @type TypesetterTypesetFunction\n */\n function typeset(\n {\n text='',\n font,\n lang,\n sdfGlyphSize=64,\n fontSize=400,\n fontWeight=1,\n fontStyle='normal',\n letterSpacing=0,\n lineHeight='normal',\n maxWidth=INF,\n direction,\n textAlign='left',\n textIndent=0,\n whiteSpace='normal',\n overflowWrap='normal',\n anchorX = 0,\n anchorY = 0,\n metricsOnly=false,\n unicodeFontsURL,\n preResolvedFonts=null,\n includeCaretPositions=false,\n chunkedBoundsSize=8192,\n colorRanges=null\n },\n callback\n ) {\n const mainStart = now();\n const timings = {fontLoad: 0, typesetting: 0};\n\n // Ensure newlines are normalized\n if (text.indexOf('\\r') > -1) {\n console.info('Typesetter: got text with \\\\r chars; normalizing to \\\\n');\n text = text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');\n }\n\n // Ensure we've got numbers not strings\n fontSize = +fontSize;\n letterSpacing = +letterSpacing;\n maxWidth = +maxWidth;\n lineHeight = lineHeight || 'normal';\n textIndent = +textIndent;\n\n calculateFontRuns({\n text,\n lang,\n style: fontStyle,\n weight: fontWeight,\n fonts: typeof font === 'string' ? [{src: font}] : font,\n unicodeFontsURL,\n preResolvedFonts\n }, runs => {\n timings.fontLoad = now() - mainStart;\n const hasMaxWidth = isFinite(maxWidth);\n let glyphIds = null;\n let glyphFontIndices = null;\n let glyphPositions = null;\n let glyphData = null;\n let glyphColors = null;\n let caretPositions = null;\n let visibleBounds = null;\n let chunkedBounds = null;\n let maxLineWidth = 0;\n let renderableGlyphCount = 0;\n let canWrap = whiteSpace !== 'nowrap';\n const metricsByFont = new Map(); // fontObj -> metrics\n const typesetStart = now();\n\n // Distribute glyphs into lines based on wrapping\n let lineXOffset = textIndent;\n let prevRunEndX = 0;\n let currentLine = new TextLine();\n const lines = [currentLine];\n runs.forEach(run => {\n const { fontObj } = run;\n const { ascender, descender, unitsPerEm, lineGap, capHeight, xHeight } = fontObj;\n\n // Calculate metrics for each font used\n let fontData = metricsByFont.get(fontObj);\n if (!fontData) {\n // Find conversion between native font units and fontSize units\n const fontSizeMult = fontSize / unitsPerEm;\n\n // Determine appropriate value for 'normal' line height based on the font's actual metrics\n // This does not guarantee individual glyphs won't exceed the line height, e.g. Roboto; should we use yMin/Max instead?\n const calcLineHeight = lineHeight === 'normal' ?\n (ascender - descender + lineGap) * fontSizeMult : lineHeight * fontSize;\n\n // Determine line height and leading adjustments\n const halfLeading = (calcLineHeight - (ascender - descender) * fontSizeMult) / 2;\n const caretHeight = Math.min(calcLineHeight, (ascender - descender) * fontSizeMult);\n const caretTop = (ascender + descender) / 2 * fontSizeMult + caretHeight / 2;\n fontData = {\n index: metricsByFont.size,\n src: fontObj.src,\n fontObj,\n fontSizeMult,\n unitsPerEm,\n ascender: ascender * fontSizeMult,\n descender: descender * fontSizeMult,\n capHeight: capHeight * fontSizeMult,\n xHeight: xHeight * fontSizeMult,\n lineHeight: calcLineHeight,\n baseline: -halfLeading - ascender * fontSizeMult, // baseline offset from top of line height\n // cap: -halfLeading - capHeight * fontSizeMult, // cap from top of line height\n // ex: -halfLeading - xHeight * fontSizeMult, // ex from top of line height\n caretTop,\n caretBottom: caretTop - caretHeight\n };\n metricsByFont.set(fontObj, fontData);\n }\n const { fontSizeMult } = fontData;\n\n const runText = text.slice(run.start, run.end + 1);\n let prevGlyphX, prevGlyphObj;\n fontObj.forEachGlyph(runText, fontSize, letterSpacing, (glyphObj, glyphX, glyphY, charIndex) => {\n glyphX += prevRunEndX;\n charIndex += run.start;\n prevGlyphX = glyphX;\n prevGlyphObj = glyphObj;\n const char = text.charAt(charIndex);\n const glyphWidth = glyphObj.advanceWidth * fontSizeMult;\n const curLineCount = currentLine.count;\n let nextLine;\n\n // Calc isWhitespace and isEmpty once per glyphObj\n if (!('isEmpty' in glyphObj)) {\n glyphObj.isWhitespace = !!char && new RegExp(lineBreakingWhiteSpace).test(char);\n glyphObj.canBreakAfter = !!char && BREAK_AFTER_CHARS.test(char);\n glyphObj.isEmpty = glyphObj.xMin === glyphObj.xMax || glyphObj.yMin === glyphObj.yMax || DEFAULT_IGNORABLE_CHARS.test(char);\n }\n if (!glyphObj.isWhitespace && !glyphObj.isEmpty) {\n renderableGlyphCount++;\n }\n\n // If a non-whitespace character overflows the max width, we need to soft-wrap\n if (canWrap && hasMaxWidth && !glyphObj.isWhitespace && glyphX + glyphWidth + lineXOffset > maxWidth && curLineCount) {\n // If it's the first char after a whitespace, start a new line\n if (currentLine.glyphAt(curLineCount - 1).glyphObj.canBreakAfter) {\n nextLine = new TextLine();\n lineXOffset = -glyphX;\n } else {\n // Back up looking for a whitespace character to wrap at\n for (let i = curLineCount; i--;) {\n // If we got the start of the line there's no soft break point; make hard break if overflowWrap='break-word'\n if (i === 0 && overflowWrap === 'break-word') {\n nextLine = new TextLine();\n lineXOffset = -glyphX;\n break\n }\n // Found a soft break point; move all chars since it to a new line\n else if (currentLine.glyphAt(i).glyphObj.canBreakAfter) {\n nextLine = currentLine.splitAt(i + 1);\n const adjustX = nextLine.glyphAt(0).x;\n lineXOffset -= adjustX;\n for (let j = nextLine.count; j--;) {\n nextLine.glyphAt(j).x -= adjustX;\n }\n break\n }\n }\n }\n if (nextLine) {\n currentLine.isSoftWrapped = true;\n currentLine = nextLine;\n lines.push(currentLine);\n maxLineWidth = maxWidth; //after soft wrapping use maxWidth as calculated width\n }\n }\n\n let fly = currentLine.glyphAt(currentLine.count);\n fly.glyphObj = glyphObj;\n fly.x = glyphX + lineXOffset;\n fly.y = glyphY;\n fly.width = glyphWidth;\n fly.charIndex = charIndex;\n fly.fontData = fontData;\n\n // Handle hard line breaks\n if (char === '\\n') {\n currentLine = new TextLine();\n lines.push(currentLine);\n lineXOffset = -(glyphX + glyphWidth + (letterSpacing * fontSize)) + textIndent;\n }\n });\n // At the end of a run we must capture the x position as the starting point for the next run\n prevRunEndX = prevGlyphX + prevGlyphObj.advanceWidth * fontSizeMult + letterSpacing * fontSize;\n });\n\n // Calculate width/height/baseline of each line (excluding trailing whitespace) and maximum block width\n let totalHeight = 0;\n lines.forEach(line => {\n let isTrailingWhitespace = true;\n for (let i = line.count; i--;) {\n const glyphInfo = line.glyphAt(i);\n // omit trailing whitespace from width calculation\n if (isTrailingWhitespace && !glyphInfo.glyphObj.isWhitespace) {\n line.width = glyphInfo.x + glyphInfo.width;\n if (line.width > maxLineWidth) {\n maxLineWidth = line.width;\n }\n isTrailingWhitespace = false;\n }\n // use the tallest line height, lowest baseline, and highest cap/ex\n let {lineHeight, capHeight, xHeight, baseline} = glyphInfo.fontData;\n if (lineHeight > line.lineHeight) line.lineHeight = lineHeight;\n const baselineDiff = baseline - line.baseline;\n if (baselineDiff < 0) { //shift all metrics down\n line.baseline += baselineDiff;\n line.cap += baselineDiff;\n line.ex += baselineDiff;\n }\n // compare cap/ex based on new lowest baseline\n line.cap = Math.max(line.cap, line.baseline + capHeight);\n line.ex = Math.max(line.ex, line.baseline + xHeight);\n }\n line.baseline -= totalHeight;\n line.cap -= totalHeight;\n line.ex -= totalHeight;\n totalHeight += line.lineHeight;\n });\n\n // Find overall position adjustments for anchoring\n let anchorXOffset = 0;\n let anchorYOffset = 0;\n if (anchorX) {\n if (typeof anchorX === 'number') {\n anchorXOffset = -anchorX;\n }\n else if (typeof anchorX === 'string') {\n anchorXOffset = -maxLineWidth * (\n anchorX === 'left' ? 0 :\n anchorX === 'center' ? 0.5 :\n anchorX === 'right' ? 1 :\n parsePercent(anchorX)\n );\n }\n }\n if (anchorY) {\n if (typeof anchorY === 'number') {\n anchorYOffset = -anchorY;\n }\n else if (typeof anchorY === 'string') {\n anchorYOffset = anchorY === 'top' ? 0 :\n anchorY === 'top-baseline' ? -lines[0].baseline :\n anchorY === 'top-cap' ? -lines[0].cap :\n anchorY === 'top-ex' ? -lines[0].ex :\n anchorY === 'middle' ? totalHeight / 2 :\n anchorY === 'bottom' ? totalHeight :\n anchorY === 'bottom-baseline' ? -lines[lines.length - 1].baseline :\n parsePercent(anchorY) * totalHeight;\n }\n }\n\n if (!metricsOnly) {\n // Resolve bidi levels\n const bidiLevelsResult = bidi.getEmbeddingLevels(text, direction);\n\n // Process each line, applying alignment offsets, adding each glyph to the atlas, and\n // collecting all renderable glyphs into a single collection.\n glyphIds = new Uint16Array(renderableGlyphCount);\n glyphFontIndices = new Uint8Array(renderableGlyphCount);\n glyphPositions = new Float32Array(renderableGlyphCount * 2);\n glyphData = {};\n visibleBounds = [INF, INF, -INF, -INF];\n chunkedBounds = [];\n if (includeCaretPositions) {\n caretPositions = new Float32Array(text.length * 4);\n }\n if (colorRanges) {\n glyphColors = new Uint8Array(renderableGlyphCount * 3);\n }\n let renderableGlyphIndex = 0;\n let prevCharIndex = -1;\n let colorCharIndex = -1;\n let chunk;\n let currentColor;\n lines.forEach((line, lineIndex) => {\n let {count:lineGlyphCount, width:lineWidth} = line;\n\n // Ignore empty lines\n if (lineGlyphCount > 0) {\n // Count trailing whitespaces, we want to ignore these for certain things\n let trailingWhitespaceCount = 0;\n for (let i = lineGlyphCount; i-- && line.glyphAt(i).glyphObj.isWhitespace;) {\n trailingWhitespaceCount++;\n }\n\n // Apply horizontal alignment adjustments\n let lineXOffset = 0;\n let justifyAdjust = 0;\n if (textAlign === 'center') {\n lineXOffset = (maxLineWidth - lineWidth) / 2;\n } else if (textAlign === 'right') {\n lineXOffset = maxLineWidth - lineWidth;\n } else if (textAlign === 'justify' && line.isSoftWrapped) {\n // count non-trailing whitespace characters, and we'll adjust the offsets per character in the next loop\n let whitespaceCount = 0;\n for (let i = lineGlyphCount - trailingWhitespaceCount; i--;) {\n if (line.glyphAt(i).glyphObj.isWhitespace) {\n whitespaceCount++;\n }\n }\n justifyAdjust = (maxLineWidth - lineWidth) / whitespaceCount;\n }\n if (justifyAdjust || lineXOffset) {\n let justifyOffset = 0;\n for (let i = 0; i < lineGlyphCount; i++) {\n let glyphInfo = line.glyphAt(i);\n const glyphObj = glyphInfo.glyphObj;\n glyphInfo.x += lineXOffset + justifyOffset;\n // Expand non-trailing whitespaces for justify alignment\n if (justifyAdjust !== 0 && glyphObj.isWhitespace && i < lineGlyphCount - trailingWhitespaceCount) {\n justifyOffset += justifyAdjust;\n glyphInfo.width += justifyAdjust;\n }\n }\n }\n\n // Perform bidi range flipping\n const flips = bidi.getReorderSegments(\n text, bidiLevelsResult, line.glyphAt(0).charIndex, line.glyphAt(line.count - 1).charIndex\n );\n for (let fi = 0; fi < flips.length; fi++) {\n const [start, end] = flips[fi];\n // Map start/end string indices to indices in the line\n let left = Infinity, right = -Infinity;\n for (let i = 0; i < lineGlyphCount; i++) {\n if (line.glyphAt(i).charIndex >= start) { // gte to handle removed characters\n let startInLine = i, endInLine = i;\n for (; endInLine < lineGlyphCount; endInLine++) {\n let info = line.glyphAt(endInLine);\n if (info.charIndex > end) {\n break\n }\n if (endInLine < lineGlyphCount - trailingWhitespaceCount) { //don't include trailing ws in flip width\n left = Math.min(left, info.x);\n right = Math.max(right, info.x + info.width);\n }\n }\n for (let j = startInLine; j < endInLine; j++) {\n const glyphInfo = line.glyphAt(j);\n glyphInfo.x = right - (glyphInfo.x + glyphInfo.width - left);\n }\n break\n }\n }\n }\n\n // Assemble final data arrays\n let glyphObj;\n const setGlyphObj = g => glyphObj = g;\n for (let i = 0; i < lineGlyphCount; i++) {\n const glyphInfo = line.glyphAt(i);\n glyphObj = glyphInfo.glyphObj;\n const glyphId = glyphObj.index;\n\n // Replace mirrored characters in rtl\n const rtl = bidiLevelsResult.levels[glyphInfo.charIndex] & 1; //odd level means rtl\n if (rtl) {\n const mirrored = bidi.getMirroredCharacter(text[glyphInfo.charIndex]);\n if (mirrored) {\n glyphInfo.fontData.fontObj.forEachGlyph(mirrored, 0, 0, setGlyphObj);\n }\n }\n\n // Add caret positions\n if (includeCaretPositions) {\n const {charIndex, fontData} = glyphInfo;\n const caretLeft = glyphInfo.x + anchorXOffset;\n const caretRight = glyphInfo.x + glyphInfo.width + anchorXOffset;\n caretPositions[charIndex * 4] = rtl ? caretRight : caretLeft; //start edge x\n caretPositions[charIndex * 4 + 1] = rtl ? caretLeft : caretRight; //end edge x\n caretPositions[charIndex * 4 + 2] = line.baseline + fontData.caretBottom + anchorYOffset; //common bottom y\n caretPositions[charIndex * 4 + 3] = line.baseline + fontData.caretTop + anchorYOffset; //common top y\n\n // If we skipped any chars from the previous glyph (due to ligature subs), fill in caret\n // positions for those missing char indices; currently this uses a best-guess by dividing\n // the ligature's width evenly. In the future we may try to use the font's LigatureCaretList\n // table to get better interior caret positions.\n const ligCount = charIndex - prevCharIndex;\n if (ligCount > 1) {\n fillLigatureCaretPositions(caretPositions, prevCharIndex, ligCount);\n }\n prevCharIndex = charIndex;\n }\n\n // Track current color range\n if (colorRanges) {\n const {charIndex} = glyphInfo;\n while(charIndex > colorCharIndex) {\n colorCharIndex++;\n if (colorRanges.hasOwnProperty(colorCharIndex)) {\n currentColor = colorRanges[colorCharIndex];\n }\n }\n }\n\n // Get atlas data for renderable glyphs\n if (!glyphObj.isWhitespace && !glyphObj.isEmpty) {\n const idx = renderableGlyphIndex++;\n const {fontSizeMult, src: fontSrc, index: fontIndex} = glyphInfo.fontData;\n\n // Add this glyph's path data\n const fontGlyphData = glyphData[fontSrc] || (glyphData[fontSrc] = {});\n if (!fontGlyphData[glyphId]) {\n fontGlyphData[glyphId] = {\n path: glyphObj.path,\n pathBounds: [glyphObj.xMin, glyphObj.yMin, glyphObj.xMax, glyphObj.yMax]\n };\n }\n\n // Determine final glyph position and add to glyphPositions array\n const glyphX = glyphInfo.x + anchorXOffset;\n const glyphY = glyphInfo.y + line.baseline + anchorYOffset;\n glyphPositions[idx * 2] = glyphX;\n glyphPositions[idx * 2 + 1] = glyphY;\n\n // Track total visible bounds\n const visX0 = glyphX + glyphObj.xMin * fontSizeMult;\n const visY0 = glyphY + glyphObj.yMin * fontSizeMult;\n const visX1 = glyphX + glyphObj.xMax * fontSizeMult;\n const visY1 = glyphY + glyphObj.yMax * fontSizeMult;\n if (visX0 < visibleBounds[0]) visibleBounds[0] = visX0;\n if (visY0 < visibleBounds[1]) visibleBounds[1] = visY0;\n if (visX1 > visibleBounds[2]) visibleBounds[2] = visX1;\n if (visY1 > visibleBounds[3]) visibleBounds[3] = visY1;\n\n // Track bounding rects for each chunk of N glyphs\n if (idx % chunkedBoundsSize === 0) {\n chunk = {start: idx, end: idx, rect: [INF, INF, -INF, -INF]};\n chunkedBounds.push(chunk);\n }\n chunk.end++;\n const chunkRect = chunk.rect;\n if (visX0 < chunkRect[0]) chunkRect[0] = visX0;\n if (visY0 < chunkRect[1]) chunkRect[1] = visY0;\n if (visX1 > chunkRect[2]) chunkRect[2] = visX1;\n if (visY1 > chunkRect[3]) chunkRect[3] = visY1;\n\n // Add to glyph ids and font indices arrays\n glyphIds[idx] = glyphId;\n glyphFontIndices[idx] = fontIndex;\n\n // Add colors\n if (colorRanges) {\n const start = idx * 3;\n glyphColors[start] = currentColor >> 16 & 255;\n glyphColors[start + 1] = currentColor >> 8 & 255;\n glyphColors[start + 2] = currentColor & 255;\n }\n }\n }\n }\n });\n\n // Fill in remaining caret positions in case the final character was a ligature\n if (caretPositions) {\n const ligCount = text.length - prevCharIndex;\n if (ligCount > 1) {\n fillLigatureCaretPositions(caretPositions, prevCharIndex, ligCount);\n }\n }\n }\n\n // Assemble final data about each font used\n const fontData = [];\n metricsByFont.forEach(({index, src, unitsPerEm, ascender, descender, lineHeight, capHeight, xHeight}) => {\n fontData[index] = {src, unitsPerEm, ascender, descender, lineHeight, capHeight, xHeight};\n });\n\n // Timing stats\n timings.typesetting = now() - typesetStart;\n\n callback({\n glyphIds, //id for each glyph, specific to that glyph's font\n glyphFontIndices, //index into fontData for each glyph\n glyphPositions, //x,y of each glyph's origin in layout\n glyphData, //dict holding data about each glyph appearing in the text\n fontData, //data about each font used in the text\n caretPositions, //startX,endX,bottomY caret positions for each char\n // caretHeight, //height of cursor from bottom to top - todo per glyph?\n glyphColors, //color for each glyph, if color ranges supplied\n chunkedBounds, //total rects per (n=chunkedBoundsSize) consecutive glyphs\n fontSize, //calculated em height\n topBaseline: anchorYOffset + lines[0].baseline, //y coordinate of the top line's baseline\n blockBounds: [ //bounds for the whole block of text, including vertical padding for lineHeight\n anchorXOffset,\n anchorYOffset - totalHeight,\n anchorXOffset + maxLineWidth,\n anchorYOffset\n ],\n visibleBounds, //total bounds of visible text paths, may be larger or smaller than blockBounds\n timings\n });\n });\n }\n\n\n /**\n * For a given text string and font parameters, determine the resulting block dimensions\n * after wrapping for the given maxWidth.\n * @param args\n * @param callback\n */\n function measure(args, callback) {\n typeset({...args, metricsOnly: true}, (result) => {\n const [x0, y0, x1, y1] = result.blockBounds;\n callback({\n width: x1 - x0,\n height: y1 - y0\n });\n });\n }\n\n function parsePercent(str) {\n let match = str.match(/^([\\d.]+)%$/);\n let pct = match ? parseFloat(match[1]) : NaN;\n return isNaN(pct) ? 0 : pct / 100\n }\n\n function fillLigatureCaretPositions(caretPositions, ligStartIndex, ligCount) {\n const ligStartX = caretPositions[ligStartIndex * 4];\n const ligEndX = caretPositions[ligStartIndex * 4 + 1];\n const ligBottom = caretPositions[ligStartIndex * 4 + 2];\n const ligTop = caretPositions[ligStartIndex * 4 + 3];\n const guessedAdvanceX = (ligEndX - ligStartX) / ligCount;\n for (let i = 0; i < ligCount; i++) {\n const startIndex = (ligStartIndex + i) * 4;\n caretPositions[startIndex] = ligStartX + guessedAdvanceX * i;\n caretPositions[startIndex + 1] = ligStartX + guessedAdvanceX * (i + 1);\n caretPositions[startIndex + 2] = ligBottom;\n caretPositions[startIndex + 3] = ligTop;\n }\n }\n\n function now() {\n return (self.performance || Date).now()\n }\n\n // Array-backed structure for a single line's glyphs data\n function TextLine() {\n this.data = [];\n }\n const textLineProps = ['glyphObj', 'x', 'y', 'width', 'charIndex', 'fontData'];\n TextLine.prototype = {\n width: 0,\n lineHeight: 0,\n baseline: 0,\n cap: 0,\n ex: 0,\n isSoftWrapped: false,\n get count() {\n return Math.ceil(this.data.length / textLineProps.length)\n },\n glyphAt(i) {\n let fly = TextLine.flyweight;\n fly.data = this.data;\n fly.index = i;\n return fly\n },\n splitAt(i) {\n let newLine = new TextLine();\n newLine.data = this.data.splice(i * textLineProps.length);\n return newLine\n }\n };\n TextLine.flyweight = textLineProps.reduce((obj, prop, i, all) => {\n Object.defineProperty(obj, prop, {\n get() {\n return this.data[this.index * textLineProps.length + i]\n },\n set(val) {\n this.data[this.index * textLineProps.length + i] = val;\n }\n });\n return obj\n }, {data: null, index: 0});\n\n\n return {\n typeset,\n measure,\n }\n}\n\nconst now = () => (self.performance || Date).now();\n\nconst mainThreadGenerator = /*#__PURE__*/ createSDFGenerator();\n\nlet warned;\n\n/**\n * Generate an SDF texture image for a single glyph path, placing the result into a webgl canvas at a\n * given location and channel. Utilizes the webgl-sdf-generator external package for GPU-accelerated SDF\n * generation when supported.\n */\nfunction generateSDF(width, height, path, viewBox, distance, exponent, canvas, x, y, channel, useWebGL = true) {\n // Allow opt-out\n if (!useWebGL) {\n return generateSDF_JS_Worker(width, height, path, viewBox, distance, exponent, canvas, x, y, channel)\n }\n\n // Attempt GPU-accelerated generation first\n return generateSDF_GL(width, height, path, viewBox, distance, exponent, canvas, x, y, channel).then(\n null,\n err => {\n // WebGL failed either due to a hard error or unexpected results; fall back to JS in workers\n if (!warned) {\n console.warn(`WebGL SDF generation failed, falling back to JS`, err);\n warned = true;\n }\n return generateSDF_JS_Worker(width, height, path, viewBox, distance, exponent, canvas, x, y, channel)\n }\n )\n}\n\nconst queue = [];\nconst chunkTimeBudget = 5; // ms\nlet timer = 0;\n\nfunction nextChunk() {\n const start = now();\n while (queue.length && now() - start < chunkTimeBudget) {\n queue.shift()();\n }\n timer = queue.length ? setTimeout(nextChunk, 0) : 0;\n}\n\n/**\n * WebGL-based implementation executed on the main thread. Requests are executed in time-bounded\n * macrotask chunks to allow render frames to execute in between.\n */\nconst generateSDF_GL = (...args) => {\n return new Promise((resolve, reject) => {\n queue.push(() => {\n const start = now();\n try {\n mainThreadGenerator.webgl.generateIntoCanvas(...args);\n resolve({ timing: now() - start });\n } catch (err) {\n reject(err);\n }\n });\n if (!timer) {\n timer = setTimeout(nextChunk, 0);\n }\n })\n};\n\nconst threadCount = 4; // how many workers to spawn\nconst idleTimeout = 2000; // workers will be terminated after being idle this many milliseconds\nconst threads = {};\nlet callNum = 0;\n\n/**\n * Fallback JS-based implementation, fanned out to a number of worker threads for parallelism\n */\nfunction generateSDF_JS_Worker(width, height, path, viewBox, distance, exponent, canvas, x, y, channel) {\n const workerId = 'TroikaTextSDFGenerator_JS_' + ((callNum++) % threadCount);\n let thread = threads[workerId];\n if (!thread) {\n thread = threads[workerId] = {\n workerModule: defineWorkerModule({\n name: workerId,\n workerId,\n dependencies: [\n createSDFGenerator,\n now\n ],\n init(_createSDFGenerator, now) {\n const generate = _createSDFGenerator().javascript.generate;\n return function (...args) {\n const start = now();\n const textureData = generate(...args);\n return {\n textureData,\n timing: now() - start\n }\n }\n },\n getTransferables(result) {\n return [result.textureData.buffer]\n }\n }),\n requests: 0,\n idleTimer: null\n };\n }\n\n thread.requests++;\n clearTimeout(thread.idleTimer);\n return thread.workerModule(width, height, path, viewBox, distance, exponent)\n .then(({ textureData, timing }) => {\n // copy result data into the canvas\n const start = now();\n // expand single-channel data into rgba\n const imageData = new Uint8Array(textureData.length * 4);\n for (let i = 0; i < textureData.length; i++) {\n imageData[i * 4 + channel] = textureData[i];\n }\n mainThreadGenerator.webglUtils.renderImageData(canvas, imageData, x, y, width, height, 1 << (3 - channel));\n timing += now() - start;\n\n // clean up workers after a while\n if (--thread.requests === 0) {\n thread.idleTimer = setTimeout(() => { terminateWorker(workerId); }, idleTimeout);\n }\n return { timing }\n })\n}\n\nfunction warmUpSDFCanvas(canvas) {\n if (!canvas._warm) {\n mainThreadGenerator.webgl.isSupported(canvas);\n canvas._warm = true;\n }\n}\n\nconst resizeWebGLCanvasWithoutClearing = mainThreadGenerator.webglUtils.resizeWebGLCanvasWithoutClearing;\n\nconst CONFIG = {\n defaultFontURL: null,\n unicodeFontsURL: null,\n sdfGlyphSize: 64,\n sdfMargin: 1 / 16,\n sdfExponent: 9,\n textureWidth: 2048,\n useWorker: true,\n};\nconst tempColor = /*#__PURE__*/new Color();\nlet hasRequested = false;\n\nfunction now$1() {\n return (self.performance || Date).now()\n}\n\n/**\n * Customizes the text builder configuration. This must be called prior to the first font processing\n * request, and applies to all fonts.\n *\n * @param {String} config.defaultFontURL - The URL of the default font to use for text processing\n * requests, in case none is specified or the specifiede font fails to load or parse.\n * Defaults to \"Roboto Regular\" from Google Fonts.\n * @param {String} config.unicodeFontsURL - A custom location for the fallback unicode-font-resolver\n * data and font files, if you don't want to use the default CDN. See\n * https://github.com/lojjic/unicode-font-resolver for details. It can also be\n * configured per text instance, but this lets you do it once globally.\n * @param {Number} config.sdfGlyphSize - The default size of each glyph's SDF (signed distance field)\n * texture used for rendering. Must be a power-of-two number, and applies to all fonts,\n * but note that this can also be overridden per call to `getTextRenderInfo()`.\n * Larger sizes can improve the quality of glyph rendering by increasing the sharpness\n * of corners and preventing loss of very thin lines, at the expense of memory. Defaults\n * to 64 which is generally a good balance of size and quality.\n * @param {Number} config.sdfExponent - The exponent used when encoding the SDF values. A higher exponent\n * shifts the encoded 8-bit values to achieve higher precision/accuracy at texels nearer\n * the glyph's path, with lower precision further away. Defaults to 9.\n * @param {Number} config.sdfMargin - How much space to reserve in the SDF as margin outside the glyph's\n * path, as a percentage of the SDF width. A larger margin increases the quality of\n * extruded glyph outlines, but decreases the precision available for the glyph itself.\n * Defaults to 1/16th of the glyph size.\n * @param {Number} config.textureWidth - The width of the SDF texture; must be a power of 2. Defaults to\n * 2048 which is a safe maximum texture dimension according to the stats at\n * https://webglstats.com/webgl/parameter/MAX_TEXTURE_SIZE and should allow for a\n * reasonably large number of glyphs (default glyph size of 64^2 and safe texture size of\n * 2048^2, times 4 channels, allows for 4096 glyphs.) This can be increased if you need to\n * increase the glyph size and/or have an extraordinary number of glyphs.\n * @param {Boolean} config.useWorker - Whether to run typesetting in a web worker. Defaults to true.\n */\nfunction configureTextBuilder(config) {\n if (hasRequested) {\n console.warn('configureTextBuilder called after first font request; will be ignored.');\n } else {\n assign(CONFIG, config);\n }\n}\n\n/**\n * Repository for all font SDF atlas textures and their glyph mappings. There is a separate atlas for\n * each sdfGlyphSize. Each atlas has a single Texture that holds all glyphs for all fonts.\n *\n * {\n * [sdfGlyphSize]: {\n * glyphCount: number,\n * sdfGlyphSize: number,\n * sdfTexture: Texture,\n * sdfCanvas: HTMLCanvasElement,\n * contextLost: boolean,\n * glyphsByFont: Map<fontURL, Map<glyphID, {path, atlasIndex, sdfViewBox}>>\n * }\n * }\n */\nconst atlases = Object.create(null);\n\n/**\n * @typedef {object} TroikaTextRenderInfo - Format of the result from `getTextRenderInfo`.\n * @property {TypesetParams} parameters - The normalized input arguments to the render call.\n * @property {Texture} sdfTexture - The SDF atlas texture.\n * @property {number} sdfGlyphSize - The size of each glyph's SDF; see `configureTextBuilder`.\n * @property {number} sdfExponent - The exponent used in encoding the SDF's values; see `configureTextBuilder`.\n * @property {Float32Array} glyphBounds - List of [minX, minY, maxX, maxY] quad bounds for each glyph.\n * @property {Float32Array} glyphAtlasIndices - List holding each glyph's index in the SDF atlas.\n * @property {Uint8Array} [glyphColors] - List holding each glyph's [r, g, b] color, if `colorRanges` was supplied.\n * @property {Float32Array} [caretPositions] - A list of caret positions for all characters in the string; each is\n * four elements: the starting X, the ending X, the bottom Y, and the top Y for the caret.\n * @property {number} [caretHeight] - An appropriate height for all selection carets.\n * @property {number} ascender - The font's ascender metric.\n * @property {number} descender - The font's descender metric.\n * @property {number} capHeight - The font's cap height metric, based on the height of Latin capital letters.\n * @property {number} xHeight - The font's x height metric, based on the height of Latin lowercase letters.\n * @property {number} lineHeight - The final computed lineHeight measurement.\n * @property {number} topBaseline - The y position of the top line's baseline.\n * @property {Array<number>} blockBounds - The total [minX, minY, maxX, maxY] rect of the whole text block;\n * this can include extra vertical space beyond the visible glyphs due to lineHeight, and is\n * equivalent to the dimensions of a block-level text element in CSS.\n * @property {Array<number>} visibleBounds - The total [minX, minY, maxX, maxY] rect of the whole text block;\n * unlike `blockBounds` this is tightly wrapped to the visible glyph paths.\n * @property {Array<object>} chunkedBounds - List of bounding rects for each consecutive set of N glyphs,\n * in the format `{start:N, end:N, rect:[minX, minY, maxX, maxY]}`.\n * @property {object} timings - Timing info for various parts of the rendering logic including SDF\n * generation, typesetting, etc.\n * @frozen\n */\n\n/**\n * @callback getTextRenderInfo~callback\n * @param {TroikaTextRenderInfo} textRenderInfo\n */\n\n/**\n * Main entry point for requesting the data needed to render a text string with given font parameters.\n * This is an asynchronous call, performing most of the logic in a web worker thread.\n * @param {TypesetParams} args\n * @param {getTextRenderInfo~callback} callback\n */\nfunction getTextRenderInfo(args, callback) {\n hasRequested = true;\n args = assign({}, args);\n const totalStart = now$1();\n\n // Convert relative URL to absolute so it can be resolved in the worker, and add fallbacks.\n // In the future we'll allow args.font to be a list with unicode ranges too.\n const { defaultFontURL } = CONFIG;\n const fonts = [];\n if (defaultFontURL) {\n fonts.push({label: 'default', src: toAbsoluteURL(defaultFontURL)});\n }\n if (args.font) {\n fonts.push({label: 'user', src: toAbsoluteURL(args.font)});\n }\n args.font = fonts;\n\n // Normalize text to a string\n args.text = '' + args.text;\n\n args.sdfGlyphSize = args.sdfGlyphSize || CONFIG.sdfGlyphSize;\n args.unicodeFontsURL = args.unicodeFontsURL || CONFIG.unicodeFontsURL;\n\n // Normalize colors\n if (args.colorRanges != null) {\n let colors = {};\n for (let key in args.colorRanges) {\n if (args.colorRanges.hasOwnProperty(key)) {\n let val = args.colorRanges[key];\n if (typeof val !== 'number') {\n val = tempColor.set(val).getHex();\n }\n colors[key] = val;\n }\n }\n args.colorRanges = colors;\n }\n\n Object.freeze(args);\n\n // Init the atlas if needed\n const {textureWidth, sdfExponent} = CONFIG;\n const {sdfGlyphSize} = args;\n const glyphsPerRow = (textureWidth / sdfGlyphSize * 4);\n let atlas = atlases[sdfGlyphSize];\n if (!atlas) {\n const canvas = document.createElement('canvas');\n canvas.width = textureWidth;\n canvas.height = sdfGlyphSize * 256 / glyphsPerRow; // start tall enough to fit 256 glyphs\n atlas = atlases[sdfGlyphSize] = {\n glyphCount: 0,\n sdfGlyphSize,\n sdfCanvas: canvas,\n sdfTexture: new Texture(\n canvas,\n undefined,\n undefined,\n undefined,\n LinearFilter,\n LinearFilter\n ),\n contextLost: false,\n glyphsByFont: new Map()\n };\n atlas.sdfTexture.generateMipmaps = false;\n initContextLossHandling(atlas);\n }\n\n const {sdfTexture, sdfCanvas} = atlas;\n\n // Issue request to the typesetting engine in the worker\n const typeset = CONFIG.useWorker ? typesetInWorker : typesetOnMainThread;\n typeset(args).then(result => {\n const {glyphIds, glyphFontIndices, fontData, glyphPositions, fontSize, timings} = result;\n const neededSDFs = [];\n const glyphBounds = new Float32Array(glyphIds.length * 4);\n let boundsIdx = 0;\n let positionsIdx = 0;\n const quadsStart = now$1();\n\n const fontGlyphMaps = fontData.map(font => {\n let map = atlas.glyphsByFont.get(font.src);\n if (!map) {\n atlas.glyphsByFont.set(font.src, map = new Map());\n }\n return map\n });\n\n glyphIds.forEach((glyphId, i) => {\n const fontIndex = glyphFontIndices[i];\n const {src: fontSrc, unitsPerEm} = fontData[fontIndex];\n let glyphInfo = fontGlyphMaps[fontIndex].get(glyphId);\n\n // If this is a glyphId not seen before, add it to the atlas\n if (!glyphInfo) {\n const {path, pathBounds} = result.glyphData[fontSrc][glyphId];\n\n // Margin around path edges in SDF, based on a percentage of the glyph's max dimension.\n // Note we add an extra 0.5 px over the configured value because the outer 0.5 doesn't contain\n // useful interpolated values and will be ignored anyway.\n const fontUnitsMargin = Math.max(pathBounds[2] - pathBounds[0], pathBounds[3] - pathBounds[1])\n / sdfGlyphSize * (CONFIG.sdfMargin * sdfGlyphSize + 0.5);\n\n const atlasIndex = atlas.glyphCount++;\n const sdfViewBox = [\n pathBounds[0] - fontUnitsMargin,\n pathBounds[1] - fontUnitsMargin,\n pathBounds[2] + fontUnitsMargin,\n pathBounds[3] + fontUnitsMargin,\n ];\n fontGlyphMaps[fontIndex].set(glyphId, (glyphInfo = { path, atlasIndex, sdfViewBox }));\n\n // Collect those that need SDF generation\n neededSDFs.push(glyphInfo);\n }\n\n // Calculate bounds for renderable quads\n // TODO can we get this back off the main thread?\n const {sdfViewBox} = glyphInfo;\n const posX = glyphPositions[positionsIdx++];\n const posY = glyphPositions[positionsIdx++];\n const fontSizeMult = fontSize / unitsPerEm;\n glyphBounds[boundsIdx++] = posX + sdfViewBox[0] * fontSizeMult;\n glyphBounds[boundsIdx++] = posY + sdfViewBox[1] * fontSizeMult;\n glyphBounds[boundsIdx++] = posX + sdfViewBox[2] * fontSizeMult;\n glyphBounds[boundsIdx++] = posY + sdfViewBox[3] * fontSizeMult;\n\n // Convert glyphId to SDF index for the shader\n glyphIds[i] = glyphInfo.atlasIndex;\n });\n timings.quads = (timings.quads || 0) + (now$1() - quadsStart);\n\n const sdfStart = now$1();\n timings.sdf = {};\n\n // Grow the texture height by power of 2 if needed\n const currentHeight = sdfCanvas.height;\n const neededRows = Math.ceil(atlas.glyphCount / glyphsPerRow);\n const neededHeight = Math.pow(2, Math.ceil(Math.log2(neededRows * sdfGlyphSize)));\n if (neededHeight > currentHeight) {\n // Since resizing the canvas clears its render buffer, it needs special handling to copy the old contents over\n console.info(`Increasing SDF texture size ${currentHeight}->${neededHeight}`);\n resizeWebGLCanvasWithoutClearing(sdfCanvas, textureWidth, neededHeight);\n // As of Three r136 textures cannot be resized once they're allocated on the GPU, we must dispose to reallocate it\n sdfTexture.dispose();\n }\n\n Promise.all(neededSDFs.map(glyphInfo =>\n generateGlyphSDF(glyphInfo, atlas, args.gpuAccelerateSDF).then(({timing}) => {\n timings.sdf[glyphInfo.atlasIndex] = timing;\n })\n )).then(() => {\n if (neededSDFs.length && !atlas.contextLost) {\n safariPre15Workaround(atlas);\n sdfTexture.needsUpdate = true;\n }\n timings.sdfTotal = now$1() - sdfStart;\n timings.total = now$1() - totalStart;\n // console.log(`SDF - ${timings.sdfTotal}, Total - ${timings.total - timings.fontLoad}`)\n\n // Invoke callback with the text layout arrays and updated texture\n callback(Object.freeze({\n parameters: args,\n sdfTexture,\n sdfGlyphSize,\n sdfExponent,\n glyphBounds,\n glyphAtlasIndices: glyphIds,\n glyphColors: result.glyphColors,\n caretPositions: result.caretPositions,\n chunkedBounds: result.chunkedBounds,\n ascender: result.ascender,\n descender: result.descender,\n lineHeight: result.lineHeight,\n capHeight: result.capHeight,\n xHeight: result.xHeight,\n topBaseline: result.topBaseline,\n blockBounds: result.blockBounds,\n visibleBounds: result.visibleBounds,\n timings: result.timings,\n }));\n });\n });\n\n // While the typesetting request is being handled, go ahead and make sure the atlas canvas context is\n // \"warmed up\"; the first request will be the longest due to shader program compilation so this gets\n // a head start on that process before SDFs actually start getting processed.\n Promise.resolve().then(() => {\n if (!atlas.contextLost) {\n warmUpSDFCanvas(sdfCanvas);\n }\n });\n}\n\nfunction generateGlyphSDF({path, atlasIndex, sdfViewBox}, {sdfGlyphSize, sdfCanvas, contextLost}, useGPU) {\n if (contextLost) {\n // If the context is lost there's nothing we can do, just quit silently and let it\n // get regenerated when the context is restored\n return Promise.resolve({timing: -1})\n }\n const {textureWidth, sdfExponent} = CONFIG;\n const maxDist = Math.max(sdfViewBox[2] - sdfViewBox[0], sdfViewBox[3] - sdfViewBox[1]);\n const squareIndex = Math.floor(atlasIndex / 4);\n const x = squareIndex % (textureWidth / sdfGlyphSize) * sdfGlyphSize;\n const y = Math.floor(squareIndex / (textureWidth / sdfGlyphSize)) * sdfGlyphSize;\n const channel = atlasIndex % 4;\n return generateSDF(sdfGlyphSize, sdfGlyphSize, path, sdfViewBox, maxDist, sdfExponent, sdfCanvas, x, y, channel, useGPU)\n}\n\nfunction initContextLossHandling(atlas) {\n const canvas = atlas.sdfCanvas;\n\n /*\n // Begin context loss simulation\n if (!window.WebGLDebugUtils) {\n let script = document.getElementById('WebGLDebugUtilsScript')\n if (!script) {\n script = document.createElement('script')\n script.id = 'WebGLDebugUtils'\n document.head.appendChild(script)\n script.src = 'https://cdn.jsdelivr.net/gh/KhronosGroup/WebGLDeveloperTools@b42e702/src/debug/webgl-debug.js'\n }\n script.addEventListener('load', () => {\n initContextLossHandling(atlas)\n })\n return\n }\n window.WebGLDebugUtils.makeLostContextSimulatingCanvas(canvas)\n canvas.loseContextInNCalls(500)\n canvas.addEventListener('webglcontextrestored', (event) => {\n canvas.loseContextInNCalls(5000)\n })\n // End context loss simulation\n */\n\n canvas.addEventListener('webglcontextlost', (event) => {\n console.log('Context Lost', event);\n event.preventDefault();\n atlas.contextLost = true;\n });\n canvas.addEventListener('webglcontextrestored', (event) => {\n console.log('Context Restored', event);\n atlas.contextLost = false;\n // Regenerate all glyphs into the restored canvas:\n const promises = [];\n atlas.glyphsByFont.forEach(glyphMap => {\n glyphMap.forEach(glyph => {\n promises.push(generateGlyphSDF(glyph, atlas, true));\n });\n });\n Promise.all(promises).then(() => {\n safariPre15Workaround(atlas);\n atlas.sdfTexture.needsUpdate = true;\n });\n });\n}\n\n/**\n * Preload a given font and optionally pre-generate glyph SDFs for one or more character sequences.\n * This can be useful to avoid long pauses when first showing text in a scene, by preloading the\n * needed fonts and glyphs up front along with other assets.\n *\n * @param {object} options\n * @param {string} options.font - URL of the font file to preload. If not given, the default font will\n * be loaded.\n * @param {string|string[]} options.characters - One or more character sequences for which to pre-\n * generate glyph SDFs. Note that this will honor ligature substitution, so you may need\n * to specify ligature sequences in addition to their individual characters to get all\n * possible glyphs, e.g. `[\"t\", \"h\", \"th\"]` to get the \"t\" and \"h\" glyphs plus the \"th\" ligature.\n * @param {number} options.sdfGlyphSize - The size at which to prerender the SDF textures for the\n * specified `characters`.\n * @param {function} callback - A function that will be called when the preloading is complete.\n */\nfunction preloadFont({font, characters, sdfGlyphSize}, callback) {\n let text = Array.isArray(characters) ? characters.join('\\n') : '' + characters;\n getTextRenderInfo({ font, sdfGlyphSize, text }, callback);\n}\n\n\n// Local assign impl so we don't have to import troika-core\nfunction assign(toObj, fromObj) {\n for (let key in fromObj) {\n if (fromObj.hasOwnProperty(key)) {\n toObj[key] = fromObj[key];\n }\n }\n return toObj\n}\n\n// Utility for making URLs absolute\nlet linkEl;\nfunction toAbsoluteURL(path) {\n if (!linkEl) {\n linkEl = typeof document === 'undefined' ? {} : document.createElement('a');\n }\n linkEl.href = path;\n return linkEl.href\n}\n\n/**\n * Safari < v15 seems unable to use the SDF webgl canvas as a texture. This applies a workaround\n * where it reads the pixels out of that canvas and uploads them as a data texture instead, at\n * a slight performance cost.\n */\nfunction safariPre15Workaround(atlas) {\n // Use createImageBitmap support as a proxy for Safari<15, all other mainstream browsers\n // have supported it for a long while so any false positives should be minimal.\n if (typeof createImageBitmap !== 'function') {\n console.info('Safari<15: applying SDF canvas workaround');\n const {sdfCanvas, sdfTexture} = atlas;\n const {width, height} = sdfCanvas;\n const gl = atlas.sdfCanvas.getContext('webgl');\n let pixels = sdfTexture.image.data;\n if (!pixels || pixels.length !== width * height * 4) {\n pixels = new Uint8Array(width * height * 4);\n sdfTexture.image = {width, height, data: pixels};\n sdfTexture.flipY = false;\n sdfTexture.isDataTexture = true;\n }\n gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);\n }\n}\n\nconst typesetterWorkerModule = /*#__PURE__*/defineWorkerModule({\n name: 'Typesetter',\n dependencies: [\n createTypesetter,\n fontResolverWorkerModule,\n bidiFactory,\n ],\n init(createTypesetter, fontResolver, bidiFactory) {\n return createTypesetter(fontResolver, bidiFactory())\n }\n});\n\nconst typesetInWorker = /*#__PURE__*/defineWorkerModule({\n name: 'Typesetter',\n dependencies: [\n typesetterWorkerModule,\n ],\n init(typesetter) {\n return function(args) {\n return new Promise(resolve => {\n typesetter.typeset(args, resolve);\n })\n }\n },\n getTransferables(result) {\n // Mark array buffers as transferable to avoid cloning during postMessage\n const transferables = [];\n for (let p in result) {\n if (result[p] && result[p].buffer) {\n transferables.push(result[p].buffer);\n }\n }\n return transferables\n }\n});\n\nconst typesetOnMainThread = typesetInWorker.onMainThread;\n\nfunction dumpSDFTextures() {\n Object.keys(atlases).forEach(size => {\n const canvas = atlases[size].sdfCanvas;\n const {width, height} = canvas;\n console.log(\"%c.\", `\n background: url(${canvas.toDataURL()});\n background-size: ${width}px ${height}px;\n color: transparent;\n font-size: 0;\n line-height: ${height}px;\n padding-left: ${width}px;\n `);\n });\n}\n\nconst templateGeometries = {};\n\nfunction getTemplateGeometry(detail) {\n let geom = templateGeometries[detail];\n if (!geom) {\n geom = templateGeometries[detail] = new PlaneGeometry(1, 1, detail, detail).translate(0.5, 0.5, 0);\n }\n return geom\n}\n\nconst glyphBoundsAttrName = 'aTroikaGlyphBounds';\nconst glyphIndexAttrName = 'aTroikaGlyphIndex';\nconst glyphColorAttrName = 'aTroikaGlyphColor';\n\n/**\n@class GlyphsGeometry\n\nA specialized Geometry for rendering a set of text glyphs. Uses InstancedBufferGeometry to\nrender the glyphs using GPU instancing of a single quad, rather than constructing a whole\ngeometry with vertices, for much smaller attribute arraybuffers according to this math:\n\n Where N = number of glyphs...\n\n Instanced:\n - position: 4 * 3\n - index: 2 * 3\n - normal: 4 * 3\n - uv: 4 * 2\n - glyph x/y bounds: N * 4\n - glyph indices: N * 1\n = 5N + 38\n\n Non-instanced:\n - position: N * 4 * 3\n - index: N * 2 * 3\n - normal: N * 4 * 3\n - uv: N * 4 * 2\n - glyph indices: N * 1\n = 39N\n\nA downside of this is the rare-but-possible lack of the instanced arrays extension,\nwhich we could potentially work around with a fallback non-instanced implementation.\n\n*/\nclass GlyphsGeometry extends InstancedBufferGeometry {\n constructor() {\n super();\n\n this.detail = 1;\n this.curveRadius = 0;\n\n // Define groups for rendering text outline as a separate pass; these will only\n // be used when the `material` getter returns an array, i.e. outlineWidth > 0.\n this.groups = [\n {start: 0, count: Infinity, materialIndex: 0},\n {start: 0, count: Infinity, materialIndex: 1}\n ];\n\n // Preallocate empty bounding objects\n this.boundingSphere = new Sphere();\n this.boundingBox = new Box3();\n }\n\n computeBoundingSphere () {\n // No-op; we'll sync the boundingSphere proactively when needed.\n }\n\n computeBoundingBox() {\n // No-op; we'll sync the boundingBox proactively when needed.\n }\n\n set detail(detail) {\n if (detail !== this._detail) {\n this._detail = detail;\n if (typeof detail !== 'number' || detail < 1) {\n detail = 1;\n }\n let tpl = getTemplateGeometry(detail)\n ;['position', 'normal', 'uv'].forEach(attr => {\n this.attributes[attr] = tpl.attributes[attr].clone();\n });\n this.setIndex(tpl.getIndex().clone());\n }\n }\n get detail() {\n return this._detail\n }\n\n set curveRadius(r) {\n if (r !== this._curveRadius) {\n this._curveRadius = r;\n this._updateBounds();\n }\n }\n get curveRadius() {\n return this._curveRadius\n }\n\n /**\n * Update the geometry for a new set of glyphs.\n * @param {Float32Array} glyphBounds - An array holding the planar bounds for all glyphs\n * to be rendered, 4 entries for each glyph: x1,x2,y1,y1\n * @param {Float32Array} glyphAtlasIndices - An array holding the index of each glyph within\n * the SDF atlas texture.\n * @param {Array} blockBounds - An array holding the [minX, minY, maxX, maxY] across all glyphs\n * @param {Array} [chunkedBounds] - An array of objects describing bounds for each chunk of N\n * consecutive glyphs: `{start:N, end:N, rect:[minX, minY, maxX, maxY]}`. This can be\n * used with `applyClipRect` to choose an optimized `instanceCount`.\n * @param {Uint8Array} [glyphColors] - An array holding r,g,b values for each glyph.\n */\n updateGlyphs(glyphBounds, glyphAtlasIndices, blockBounds, chunkedBounds, glyphColors) {\n // Update the instance attributes\n this.updateAttributeData(glyphBoundsAttrName, glyphBounds, 4);\n this.updateAttributeData(glyphIndexAttrName, glyphAtlasIndices, 1);\n this.updateAttributeData(glyphColorAttrName, glyphColors, 3);\n this._blockBounds = blockBounds;\n this._chunkedBounds = chunkedBounds;\n this.instanceCount = glyphAtlasIndices.length;\n this._updateBounds();\n }\n\n _updateBounds() {\n const bounds = this._blockBounds;\n if (bounds) {\n const { curveRadius, boundingBox: bbox } = this;\n if (curveRadius) {\n const { PI, floor, min, max, sin, cos } = Math;\n const halfPi = PI / 2;\n const twoPi = PI * 2;\n const absR = Math.abs(curveRadius);\n const leftAngle = bounds[0] / absR;\n const rightAngle = bounds[2] / absR;\n const minX = floor((leftAngle + halfPi) / twoPi) !== floor((rightAngle + halfPi) / twoPi)\n ? -absR : min(sin(leftAngle) * absR, sin(rightAngle) * absR);\n const maxX = floor((leftAngle - halfPi) / twoPi) !== floor((rightAngle - halfPi) / twoPi)\n ? absR : max(sin(leftAngle) * absR, sin(rightAngle) * absR);\n const maxZ = floor((leftAngle + PI) / twoPi) !== floor((rightAngle + PI) / twoPi)\n ? absR * 2 : max(absR - cos(leftAngle) * absR, absR - cos(rightAngle) * absR);\n bbox.min.set(minX, bounds[1], curveRadius < 0 ? -maxZ : 0);\n bbox.max.set(maxX, bounds[3], curveRadius < 0 ? 0 : maxZ);\n } else {\n bbox.min.set(bounds[0], bounds[1], 0);\n bbox.max.set(bounds[2], bounds[3], 0);\n }\n bbox.getBoundingSphere(this.boundingSphere);\n }\n }\n\n /**\n * Given a clipping rect, and the chunkedBounds from the last updateGlyphs call, choose the lowest\n * `instanceCount` that will show all glyphs within the clipped view. This is an optimization\n * for long blocks of text that are clipped, to skip vertex shader evaluation for glyphs that would\n * be clipped anyway.\n *\n * Note that since `drawElementsInstanced[ANGLE]` only accepts an instance count and not a starting\n * offset, this optimization becomes less effective as the clipRect moves closer to the end of the\n * text block. We could fix that by switching from instancing to a full geometry with a drawRange,\n * but at the expense of much larger attribute buffers (see classdoc above.)\n *\n * @param {Vector4} clipRect\n */\n applyClipRect(clipRect) {\n let count = this.getAttribute(glyphIndexAttrName).count;\n let chunks = this._chunkedBounds;\n if (chunks) {\n for (let i = chunks.length; i--;) {\n count = chunks[i].end;\n let rect = chunks[i].rect;\n // note: both rects are l-b-r-t\n if (rect[1] < clipRect.w && rect[3] > clipRect.y && rect[0] < clipRect.z && rect[2] > clipRect.x) {\n break\n }\n }\n }\n this.instanceCount = count;\n }\n\n /**\n * Utility for updating instance attributes with automatic resizing\n */\n updateAttributeData(attrName, newArray, itemSize) {\n const attr = this.getAttribute(attrName);\n if (newArray) {\n // If length isn't changing, just update the attribute's array data\n if (attr && attr.array.length === newArray.length) {\n attr.array.set(newArray);\n attr.needsUpdate = true;\n } else {\n this.setAttribute(attrName, new InstancedBufferAttribute(newArray, itemSize));\n // If the new attribute has a different size, we also have to (as of r117) manually clear the\n // internal cached max instance count. See https://github.com/mrdoob/three.js/issues/19706\n // It's unclear if this is a threejs bug or a truly unsupported scenario; discussion in\n // that ticket is ambiguous as to whether replacing a BufferAttribute with one of a\n // different size is supported, but https://github.com/mrdoob/three.js/pull/17418 strongly\n // implies it should be supported. It's possible we need to\n delete this._maxInstanceCount; //for r117+, could be fragile\n this.dispose(); //for r118+, more robust feeling, but more heavy-handed than I'd like\n }\n } else if (attr) {\n this.deleteAttribute(attrName);\n }\n }\n}\n\n// language=GLSL\nconst VERTEX_DEFS = `\nuniform vec2 uTroikaSDFTextureSize;\nuniform float uTroikaSDFGlyphSize;\nuniform vec4 uTroikaTotalBounds;\nuniform vec4 uTroikaClipRect;\nuniform mat3 uTroikaOrient;\nuniform bool uTroikaUseGlyphColors;\nuniform float uTroikaEdgeOffset;\nuniform float uTroikaBlurRadius;\nuniform vec2 uTroikaPositionOffset;\nuniform float uTroikaCurveRadius;\nattribute vec4 aTroikaGlyphBounds;\nattribute float aTroikaGlyphIndex;\nattribute vec3 aTroikaGlyphColor;\nvarying vec2 vTroikaGlyphUV;\nvarying vec4 vTroikaTextureUVBounds;\nvarying float vTroikaTextureChannel;\nvarying vec3 vTroikaGlyphColor;\nvarying vec2 vTroikaGlyphDimensions;\n`;\n\n// language=GLSL prefix=\"void main() {\" suffix=\"}\"\nconst VERTEX_TRANSFORM = `\nvec4 bounds = aTroikaGlyphBounds;\nbounds.xz += uTroikaPositionOffset.x;\nbounds.yw -= uTroikaPositionOffset.y;\n\nvec4 outlineBounds = vec4(\n bounds.xy - uTroikaEdgeOffset - uTroikaBlurRadius,\n bounds.zw + uTroikaEdgeOffset + uTroikaBlurRadius\n);\nvec4 clippedBounds = vec4(\n clamp(outlineBounds.xy, uTroikaClipRect.xy, uTroikaClipRect.zw),\n clamp(outlineBounds.zw, uTroikaClipRect.xy, uTroikaClipRect.zw)\n);\n\nvec2 clippedXY = (mix(clippedBounds.xy, clippedBounds.zw, position.xy) - bounds.xy) / (bounds.zw - bounds.xy);\n\nposition.xy = mix(bounds.xy, bounds.zw, clippedXY);\n\nuv = (position.xy - uTroikaTotalBounds.xy) / (uTroikaTotalBounds.zw - uTroikaTotalBounds.xy);\n\nfloat rad = uTroikaCurveRadius;\nif (rad != 0.0) {\n float angle = position.x / rad;\n position.xz = vec2(sin(angle) * rad, rad - cos(angle) * rad);\n normal.xz = vec2(sin(angle), cos(angle));\n}\n \nposition = uTroikaOrient * position;\nnormal = uTroikaOrient * normal;\n\nvTroikaGlyphUV = clippedXY.xy;\nvTroikaGlyphDimensions = vec2(bounds[2] - bounds[0], bounds[3] - bounds[1]);\n\n${''/* NOTE: it seems important to calculate the glyph's bounding texture UVs here in the\n vertex shader, rather than in the fragment shader, as the latter gives strange artifacts\n on some glyphs (those in the leftmost texture column) on some systems. The exact reason\n isn't understood but doing this here, then mix()-ing in the fragment shader, seems to work. */}\nfloat txCols = uTroikaSDFTextureSize.x / uTroikaSDFGlyphSize;\nvec2 txUvPerSquare = uTroikaSDFGlyphSize / uTroikaSDFTextureSize;\nvec2 txStartUV = txUvPerSquare * vec2(\n mod(floor(aTroikaGlyphIndex / 4.0), txCols),\n floor(floor(aTroikaGlyphIndex / 4.0) / txCols)\n);\nvTroikaTextureUVBounds = vec4(txStartUV, vec2(txStartUV) + txUvPerSquare);\nvTroikaTextureChannel = mod(aTroikaGlyphIndex, 4.0);\n`;\n\n// language=GLSL\nconst FRAGMENT_DEFS = `\nuniform sampler2D uTroikaSDFTexture;\nuniform vec2 uTroikaSDFTextureSize;\nuniform float uTroikaSDFGlyphSize;\nuniform float uTroikaSDFExponent;\nuniform float uTroikaEdgeOffset;\nuniform float uTroikaFillOpacity;\nuniform float uTroikaBlurRadius;\nuniform vec3 uTroikaStrokeColor;\nuniform float uTroikaStrokeWidth;\nuniform float uTroikaStrokeOpacity;\nuniform bool uTroikaSDFDebug;\nvarying vec2 vTroikaGlyphUV;\nvarying vec4 vTroikaTextureUVBounds;\nvarying float vTroikaTextureChannel;\nvarying vec2 vTroikaGlyphDimensions;\n\nfloat troikaSdfValueToSignedDistance(float alpha) {\n // Inverse of exponential encoding in webgl-sdf-generator\n ${''/* TODO - there's some slight inaccuracy here when dealing with interpolated alpha values; those\n are linearly interpolated where the encoding is exponential. Look into improving this by rounding\n to nearest 2 whole texels, decoding those exponential values, and linearly interpolating the result.\n */}\n float maxDimension = max(vTroikaGlyphDimensions.x, vTroikaGlyphDimensions.y);\n float absDist = (1.0 - pow(2.0 * (alpha > 0.5 ? 1.0 - alpha : alpha), 1.0 / uTroikaSDFExponent)) * maxDimension;\n float signedDist = absDist * (alpha > 0.5 ? -1.0 : 1.0);\n return signedDist;\n}\n\nfloat troikaGlyphUvToSdfValue(vec2 glyphUV) {\n vec2 textureUV = mix(vTroikaTextureUVBounds.xy, vTroikaTextureUVBounds.zw, glyphUV);\n vec4 rgba = texture2D(uTroikaSDFTexture, textureUV);\n float ch = floor(vTroikaTextureChannel + 0.5); //NOTE: can't use round() in WebGL1\n return ch == 0.0 ? rgba.r : ch == 1.0 ? rgba.g : ch == 2.0 ? rgba.b : rgba.a;\n}\n\nfloat troikaGlyphUvToDistance(vec2 uv) {\n return troikaSdfValueToSignedDistance(troikaGlyphUvToSdfValue(uv));\n}\n\nfloat troikaGetAADist() {\n ${''/*\n When the standard derivatives extension is available, we choose an antialiasing alpha threshold based\n on the potential change in the SDF's alpha from this fragment to its neighbor. This strategy maximizes \n readability and edge crispness at all sizes and screen resolutions.\n */}\n #if defined(GL_OES_standard_derivatives) || __VERSION__ >= 300\n return length(fwidth(vTroikaGlyphUV * vTroikaGlyphDimensions)) * 0.5;\n #else\n return vTroikaGlyphDimensions.x / 64.0;\n #endif\n}\n\nfloat troikaGetFragDistValue() {\n vec2 clampedGlyphUV = clamp(vTroikaGlyphUV, 0.5 / uTroikaSDFGlyphSize, 1.0 - 0.5 / uTroikaSDFGlyphSize);\n float distance = troikaGlyphUvToDistance(clampedGlyphUV);\n \n // Extrapolate distance when outside bounds:\n distance += clampedGlyphUV == vTroikaGlyphUV ? 0.0 : \n length((vTroikaGlyphUV - clampedGlyphUV) * vTroikaGlyphDimensions);\n\n ${''/* \n // TODO more refined extrapolated distance by adjusting for angle of gradient at edge...\n // This has potential but currently gives very jagged extensions, maybe due to precision issues?\n float uvStep = 1.0 / uTroikaSDFGlyphSize;\n vec2 neighbor1UV = clampedGlyphUV + (\n vTroikaGlyphUV.x != clampedGlyphUV.x ? vec2(0.0, uvStep * sign(0.5 - vTroikaGlyphUV.y)) :\n vTroikaGlyphUV.y != clampedGlyphUV.y ? vec2(uvStep * sign(0.5 - vTroikaGlyphUV.x), 0.0) :\n vec2(0.0)\n );\n vec2 neighbor2UV = clampedGlyphUV + (\n vTroikaGlyphUV.x != clampedGlyphUV.x ? vec2(0.0, uvStep * -sign(0.5 - vTroikaGlyphUV.y)) :\n vTroikaGlyphUV.y != clampedGlyphUV.y ? vec2(uvStep * -sign(0.5 - vTroikaGlyphUV.x), 0.0) :\n vec2(0.0)\n );\n float neighbor1Distance = troikaGlyphUvToDistance(neighbor1UV);\n float neighbor2Distance = troikaGlyphUvToDistance(neighbor2UV);\n float distToUnclamped = length((vTroikaGlyphUV - clampedGlyphUV) * vTroikaGlyphDimensions);\n float distToNeighbor = length((clampedGlyphUV - neighbor1UV) * vTroikaGlyphDimensions);\n float gradientAngle1 = min(asin(abs(neighbor1Distance - distance) / distToNeighbor), PI / 2.0);\n float gradientAngle2 = min(asin(abs(neighbor2Distance - distance) / distToNeighbor), PI / 2.0);\n distance += (cos(gradientAngle1) + cos(gradientAngle2)) / 2.0 * distToUnclamped;\n */}\n\n return distance;\n}\n\nfloat troikaGetEdgeAlpha(float distance, float distanceOffset, float aaDist) {\n #if defined(IS_DEPTH_MATERIAL) || defined(IS_DISTANCE_MATERIAL)\n float alpha = step(-distanceOffset, -distance);\n #else\n\n float alpha = smoothstep(\n distanceOffset + aaDist,\n distanceOffset - aaDist,\n distance\n );\n #endif\n\n return alpha;\n}\n`;\n\n// language=GLSL prefix=\"void main() {\" suffix=\"}\"\nconst FRAGMENT_TRANSFORM = `\nfloat aaDist = troikaGetAADist();\nfloat fragDistance = troikaGetFragDistValue();\nfloat edgeAlpha = uTroikaSDFDebug ?\n troikaGlyphUvToSdfValue(vTroikaGlyphUV) :\n troikaGetEdgeAlpha(fragDistance, uTroikaEdgeOffset, max(aaDist, uTroikaBlurRadius));\n\n#if !defined(IS_DEPTH_MATERIAL) && !defined(IS_DISTANCE_MATERIAL)\nvec4 fillRGBA = gl_FragColor;\nfillRGBA.a *= uTroikaFillOpacity;\nvec4 strokeRGBA = uTroikaStrokeWidth == 0.0 ? fillRGBA : vec4(uTroikaStrokeColor, uTroikaStrokeOpacity);\nif (fillRGBA.a == 0.0) fillRGBA.rgb = strokeRGBA.rgb;\ngl_FragColor = mix(fillRGBA, strokeRGBA, smoothstep(\n -uTroikaStrokeWidth - aaDist,\n -uTroikaStrokeWidth + aaDist,\n fragDistance\n));\ngl_FragColor.a *= edgeAlpha;\n#endif\n\nif (edgeAlpha == 0.0) {\n discard;\n}\n`;\n\n\n/**\n * Create a material for rendering text, derived from a baseMaterial\n */\nfunction createTextDerivedMaterial(baseMaterial) {\n const textMaterial = createDerivedMaterial(baseMaterial, {\n chained: true,\n extensions: {\n derivatives: true\n },\n uniforms: {\n uTroikaSDFTexture: {value: null},\n uTroikaSDFTextureSize: {value: new Vector2()},\n uTroikaSDFGlyphSize: {value: 0},\n uTroikaSDFExponent: {value: 0},\n uTroikaTotalBounds: {value: new Vector4(0,0,0,0)},\n uTroikaClipRect: {value: new Vector4(0,0,0,0)},\n uTroikaEdgeOffset: {value: 0},\n uTroikaFillOpacity: {value: 1},\n uTroikaPositionOffset: {value: new Vector2()},\n uTroikaCurveRadius: {value: 0},\n uTroikaBlurRadius: {value: 0},\n uTroikaStrokeWidth: {value: 0},\n uTroikaStrokeColor: {value: new Color()},\n uTroikaStrokeOpacity: {value: 1},\n uTroikaOrient: {value: new Matrix3()},\n uTroikaUseGlyphColors: {value: true},\n uTroikaSDFDebug: {value: false}\n },\n vertexDefs: VERTEX_DEFS,\n vertexTransform: VERTEX_TRANSFORM,\n fragmentDefs: FRAGMENT_DEFS,\n fragmentColorTransform: FRAGMENT_TRANSFORM,\n customRewriter({vertexShader, fragmentShader}) {\n let uDiffuseRE = /\\buniform\\s+vec3\\s+diffuse\\b/;\n if (uDiffuseRE.test(fragmentShader)) {\n // Replace all instances of `diffuse` with our varying\n fragmentShader = fragmentShader\n .replace(uDiffuseRE, 'varying vec3 vTroikaGlyphColor')\n .replace(/\\bdiffuse\\b/g, 'vTroikaGlyphColor');\n // Make sure the vertex shader declares the uniform so we can grab it as a fallback\n if (!uDiffuseRE.test(vertexShader)) {\n vertexShader = vertexShader.replace(\n voidMainRegExp,\n 'uniform vec3 diffuse;\\n$&\\nvTroikaGlyphColor = uTroikaUseGlyphColors ? aTroikaGlyphColor / 255.0 : diffuse;\\n'\n );\n }\n }\n return { vertexShader, fragmentShader }\n }\n });\n\n // Force transparency - TODO is this reasonable?\n textMaterial.transparent = true;\n\n // Force single draw call when double-sided\n textMaterial.forceSinglePass = true;\n\n Object.defineProperties(textMaterial, {\n isTroikaTextMaterial: {value: true},\n\n // WebGLShadowMap reverses the side of the shadow material by default, which fails\n // for planes, so here we force the `shadowSide` to always match the main side.\n shadowSide: {\n get() {\n return this.side\n },\n set() {\n //no-op\n }\n }\n });\n\n return textMaterial\n}\n\nconst defaultMaterial = /*#__PURE__*/ new MeshBasicMaterial({\n color: 0xffffff,\n side: DoubleSide,\n transparent: true\n});\nconst defaultStrokeColor = 0x808080;\n\nconst tempMat4 = /*#__PURE__*/ new Matrix4();\nconst tempVec3a = /*#__PURE__*/ new Vector3();\nconst tempVec3b = /*#__PURE__*/ new Vector3();\nconst tempArray = [];\nconst origin = /*#__PURE__*/ new Vector3();\nconst defaultOrient = '+x+y';\n\nfunction first(o) {\n return Array.isArray(o) ? o[0] : o\n}\n\nlet getFlatRaycastMesh = () => {\n const mesh = new Mesh(\n new PlaneGeometry(1, 1),\n defaultMaterial\n );\n getFlatRaycastMesh = () => mesh;\n return mesh\n};\nlet getCurvedRaycastMesh = () => {\n const mesh = new Mesh(\n new PlaneGeometry(1, 1, 32, 1),\n defaultMaterial\n );\n getCurvedRaycastMesh = () => mesh;\n return mesh\n};\n\nconst syncStartEvent = { type: 'syncstart' };\nconst syncCompleteEvent = { type: 'synccomplete' };\n\nconst SYNCABLE_PROPS = [\n 'font',\n 'fontSize',\n 'fontStyle',\n 'fontWeight',\n 'lang',\n 'letterSpacing',\n 'lineHeight',\n 'maxWidth',\n 'overflowWrap',\n 'text',\n 'direction',\n 'textAlign',\n 'textIndent',\n 'whiteSpace',\n 'anchorX',\n 'anchorY',\n 'colorRanges',\n 'sdfGlyphSize'\n];\n\nconst COPYABLE_PROPS = SYNCABLE_PROPS.concat(\n 'material',\n 'color',\n 'depthOffset',\n 'clipRect',\n 'curveRadius',\n 'orientation',\n 'glyphGeometryDetail'\n);\n\n/**\n * @class Text\n *\n * A ThreeJS Mesh that renders a string of text on a plane in 3D space using signed distance\n * fields (SDF).\n */\nclass Text extends Mesh {\n constructor() {\n const geometry = new GlyphsGeometry();\n super(geometry, null);\n\n // === Text layout properties: === //\n\n /**\n * @member {string} text\n * The string of text to be rendered.\n */\n this.text = '';\n\n /**\n * @member {number|string} anchorX\n * Defines the horizontal position in the text block that should line up with the local origin.\n * Can be specified as a numeric x position in local units, a string percentage of the total\n * text block width e.g. `'25%'`, or one of the following keyword strings: 'left', 'center',\n * or 'right'.\n */\n this.anchorX = 0;\n\n /**\n * @member {number|string} anchorY\n * Defines the vertical position in the text block that should line up with the local origin.\n * Can be specified as a numeric y position in local units (note: down is negative y), a string\n * percentage of the total text block height e.g. `'25%'`, or one of the following keyword strings:\n * 'top', 'top-baseline', 'top-cap', 'top-ex', 'middle', 'bottom-baseline', or 'bottom'.\n */\n this.anchorY = 0;\n\n /**\n * @member {number} curveRadius\n * Defines a cylindrical radius along which the text's plane will be curved. Positive numbers put\n * the cylinder's centerline (oriented vertically) that distance in front of the text, for a concave\n * curvature, while negative numbers put it behind the text for a convex curvature. The centerline\n * will be aligned with the text's local origin; you can use `anchorX` to offset it.\n *\n * Since each glyph is by default rendered with a simple quad, each glyph remains a flat plane\n * internally. You can use `glyphGeometryDetail` to add more vertices for curvature inside glyphs.\n */\n this.curveRadius = 0;\n\n /**\n * @member {string} direction\n * Sets the base direction for the text. The default value of \"auto\" will choose a direction based\n * on the text's content according to the bidi spec. A value of \"ltr\" or \"rtl\" will force the direction.\n */\n this.direction = 'auto';\n\n /**\n * @member {string|null} font\n * URL of a custom font to be used. Font files can be in .ttf, .otf, or .woff (not .woff2) formats.\n * Defaults to Noto Sans.\n */\n this.font = null; //will use default from TextBuilder\n\n this.unicodeFontsURL = null; //defaults to CDN\n\n /**\n * @member {number} fontSize\n * The size at which to render the font in local units; corresponds to the em-box height\n * of the chosen `font`.\n */\n this.fontSize = 0.1;\n\n /**\n * @member {number|'normal'|'bold'}\n * The weight of the font. Currently only used for fallback Noto fonts.\n */\n this.fontWeight = 'normal';\n\n /**\n * @member {'normal'|'italic'}\n * The style of the font. Currently only used for fallback Noto fonts.\n */\n this.fontStyle = 'normal';\n\n /**\n * @member {string|null} lang\n * The language code of this text; can be used for explicitly selecting certain CJK fonts.\n */\n this.lang = null;\n\n /**\n * @member {number} letterSpacing\n * Sets a uniform adjustment to spacing between letters after kerning is applied. Positive\n * numbers increase spacing and negative numbers decrease it.\n */\n this.letterSpacing = 0;\n\n /**\n * @member {number|string} lineHeight\n * Sets the height of each line of text, as a multiple of the `fontSize`. Defaults to 'normal'\n * which chooses a reasonable height based on the chosen font's ascender/descender metrics.\n */\n this.lineHeight = 'normal';\n\n /**\n * @member {number} maxWidth\n * The maximum width of the text block, above which text may start wrapping according to the\n * `whiteSpace` and `overflowWrap` properties.\n */\n this.maxWidth = Infinity;\n\n /**\n * @member {string} overflowWrap\n * Defines how text wraps if the `whiteSpace` property is `normal`. Can be either `'normal'`\n * to break at whitespace characters, or `'break-word'` to allow breaking within words.\n * Defaults to `'normal'`.\n */\n this.overflowWrap = 'normal';\n\n /**\n * @member {string} textAlign\n * The horizontal alignment of each line of text within the overall text bounding box.\n */\n this.textAlign = 'left';\n\n /**\n * @member {number} textIndent\n * Indentation for the first character of a line; see CSS `text-indent`.\n */\n this.textIndent = 0;\n\n /**\n * @member {string} whiteSpace\n * Defines whether text should wrap when a line reaches the `maxWidth`. Can\n * be either `'normal'` (the default), to allow wrapping according to the `overflowWrap` property,\n * or `'nowrap'` to prevent wrapping. Note that `'normal'` here honors newline characters to\n * manually break lines, making it behave more like `'pre-wrap'` does in CSS.\n */\n this.whiteSpace = 'normal';\n\n\n // === Presentation properties: === //\n\n /**\n * @member {THREE.Material} material\n * Defines a _base_ material to be used when rendering the text. This material will be\n * automatically replaced with a material derived from it, that adds shader code to\n * decrease the alpha for each fragment (pixel) outside the text glyphs, with antialiasing.\n * By default it will derive from a simple white MeshBasicMaterial, but you can use any\n * of the other mesh materials to gain other features like lighting, texture maps, etc.\n *\n * Also see the `color` shortcut property.\n */\n this.material = null;\n\n /**\n * @member {string|number|THREE.Color} color\n * This is a shortcut for setting the `color` of the text's material. You can use this\n * if you don't want to specify a whole custom `material`. Also, if you do use a custom\n * `material`, this color will only be used for this particuar Text instance, even if\n * that same material instance is shared across multiple Text objects.\n */\n this.color = null;\n\n /**\n * @member {object|null} colorRanges\n * WARNING: This API is experimental and may change.\n * This allows more fine-grained control of colors for individual or ranges of characters,\n * taking precedence over the material's `color`. Its format is an Object whose keys each\n * define a starting character index for a range, and whose values are the color for each\n * range. The color value can be a numeric hex color value, a `THREE.Color` object, or\n * any of the strings accepted by `THREE.Color`.\n */\n this.colorRanges = null;\n\n /**\n * @member {number|string} outlineWidth\n * WARNING: This API is experimental and may change.\n * The width of an outline/halo to be drawn around each text glyph using the `outlineColor` and `outlineOpacity`.\n * Can be specified as either an absolute number in local units, or as a percentage string e.g.\n * `\"12%\"` which is treated as a percentage of the `fontSize`. Defaults to `0`, which means\n * no outline will be drawn unless an `outlineOffsetX/Y` or `outlineBlur` is set.\n */\n this.outlineWidth = 0;\n\n /**\n * @member {string|number|THREE.Color} outlineColor\n * WARNING: This API is experimental and may change.\n * The color of the text outline, if `outlineWidth`/`outlineBlur`/`outlineOffsetX/Y` are set.\n * Defaults to black.\n */\n this.outlineColor = 0x000000;\n\n /**\n * @member {number} outlineOpacity\n * WARNING: This API is experimental and may change.\n * The opacity of the outline, if `outlineWidth`/`outlineBlur`/`outlineOffsetX/Y` are set.\n * Defaults to `1`.\n */\n this.outlineOpacity = 1;\n\n /**\n * @member {number|string} outlineBlur\n * WARNING: This API is experimental and may change.\n * A blur radius applied to the outer edge of the text's outline. If the `outlineWidth` is\n * zero, the blur will be applied at the glyph edge, like CSS's `text-shadow` blur radius.\n * Can be specified as either an absolute number in local units, or as a percentage string e.g.\n * `\"12%\"` which is treated as a percentage of the `fontSize`. Defaults to `0`.\n */\n this.outlineBlur = 0;\n\n /**\n * @member {number|string} outlineOffsetX\n * WARNING: This API is experimental and may change.\n * A horizontal offset for the text outline.\n * Can be specified as either an absolute number in local units, or as a percentage string e.g. `\"12%\"`\n * which is treated as a percentage of the `fontSize`. Defaults to `0`.\n */\n this.outlineOffsetX = 0;\n\n /**\n * @member {number|string} outlineOffsetY\n * WARNING: This API is experimental and may change.\n * A vertical offset for the text outline.\n * Can be specified as either an absolute number in local units, or as a percentage string e.g. `\"12%\"`\n * which is treated as a percentage of the `fontSize`. Defaults to `0`.\n */\n this.outlineOffsetY = 0;\n\n /**\n * @member {number|string} strokeWidth\n * WARNING: This API is experimental and may change.\n * The width of an inner stroke drawn inside each text glyph using the `strokeColor` and `strokeOpacity`.\n * Can be specified as either an absolute number in local units, or as a percentage string e.g. `\"12%\"`\n * which is treated as a percentage of the `fontSize`. Defaults to `0`.\n */\n this.strokeWidth = 0;\n\n /**\n * @member {string|number|THREE.Color} strokeColor\n * WARNING: This API is experimental and may change.\n * The color of the text stroke, if `strokeWidth` is greater than zero. Defaults to gray.\n */\n this.strokeColor = defaultStrokeColor;\n\n /**\n * @member {number} strokeOpacity\n * WARNING: This API is experimental and may change.\n * The opacity of the stroke, if `strokeWidth` is greater than zero. Defaults to `1`.\n */\n this.strokeOpacity = 1;\n\n /**\n * @member {number} fillOpacity\n * WARNING: This API is experimental and may change.\n * The opacity of the glyph's fill from 0 to 1. This behaves like the material's `opacity` but allows\n * giving the fill a different opacity than the `strokeOpacity`. A fillOpacity of `0` makes the\n * interior of the glyph invisible, leaving just the `strokeWidth`. Defaults to `1`.\n */\n this.fillOpacity = 1;\n\n /**\n * @member {number} depthOffset\n * This is a shortcut for setting the material's `polygonOffset` and related properties,\n * which can be useful in preventing z-fighting when this text is laid on top of another\n * plane in the scene. Positive numbers are further from the camera, negatives closer.\n */\n this.depthOffset = 0;\n\n /**\n * @member {Array<number>} clipRect\n * If specified, defines a `[minX, minY, maxX, maxY]` of a rectangle outside of which all\n * pixels will be discarded. This can be used for example to clip overflowing text when\n * `whiteSpace='nowrap'`.\n */\n this.clipRect = null;\n\n /**\n * @member {string} orientation\n * Defines the axis plane on which the text should be laid out when the mesh has no extra\n * rotation transform. It is specified as a string with two axes: the horizontal axis with\n * positive pointing right, and the vertical axis with positive pointing up. By default this\n * is '+x+y', meaning the text sits on the xy plane with the text's top toward positive y\n * and facing positive z. A value of '+x-z' would place it on the xz plane with the text's\n * top toward negative z and facing positive y.\n */\n this.orientation = defaultOrient;\n\n /**\n * @member {number} glyphGeometryDetail\n * Controls number of vertical/horizontal segments that make up each glyph's rectangular\n * plane. Defaults to 1. This can be increased to provide more geometrical detail for custom\n * vertex shader effects, for example.\n */\n this.glyphGeometryDetail = 1;\n\n /**\n * @member {number|null} sdfGlyphSize\n * The size of each glyph's SDF (signed distance field) used for rendering. This must be a\n * power-of-two number. Defaults to 64 which is generally a good balance of size and quality\n * for most fonts. Larger sizes can improve the quality of glyph rendering by increasing\n * the sharpness of corners and preventing loss of very thin lines, at the expense of\n * increased memory footprint and longer SDF generation time.\n */\n this.sdfGlyphSize = null;\n\n /**\n * @member {boolean} gpuAccelerateSDF\n * When `true`, the SDF generation process will be GPU-accelerated with WebGL when possible,\n * making it much faster especially for complex glyphs, and falling back to a JavaScript version\n * executed in web workers when support isn't available. It should automatically detect support,\n * but it's still somewhat experimental, so you can set it to `false` to force it to use the JS\n * version if you encounter issues with it.\n */\n this.gpuAccelerateSDF = true;\n\n this.debugSDF = false;\n }\n\n /**\n * Updates the text rendering according to the current text-related configuration properties.\n * This is an async process, so you can pass in a callback function to be executed when it\n * finishes.\n * @param {function} [callback]\n */\n sync(callback) {\n if (this._needsSync) {\n this._needsSync = false;\n\n // If there's another sync still in progress, queue\n if (this._isSyncing) {\n (this._queuedSyncs || (this._queuedSyncs = [])).push(callback);\n } else {\n this._isSyncing = true;\n this.dispatchEvent(syncStartEvent);\n\n getTextRenderInfo({\n text: this.text,\n font: this.font,\n lang: this.lang,\n fontSize: this.fontSize || 0.1,\n fontWeight: this.fontWeight || 'normal',\n fontStyle: this.fontStyle || 'normal',\n letterSpacing: this.letterSpacing || 0,\n lineHeight: this.lineHeight || 'normal',\n maxWidth: this.maxWidth,\n direction: this.direction || 'auto',\n textAlign: this.textAlign,\n textIndent: this.textIndent,\n whiteSpace: this.whiteSpace,\n overflowWrap: this.overflowWrap,\n anchorX: this.anchorX,\n anchorY: this.anchorY,\n colorRanges: this.colorRanges,\n includeCaretPositions: true, //TODO parameterize\n sdfGlyphSize: this.sdfGlyphSize,\n gpuAccelerateSDF: this.gpuAccelerateSDF,\n unicodeFontsURL: this.unicodeFontsURL,\n }, textRenderInfo => {\n this._isSyncing = false;\n\n // Save result for later use in onBeforeRender\n this._textRenderInfo = textRenderInfo;\n\n // Update the geometry attributes\n this.geometry.updateGlyphs(\n textRenderInfo.glyphBounds,\n textRenderInfo.glyphAtlasIndices,\n textRenderInfo.blockBounds,\n textRenderInfo.chunkedBounds,\n textRenderInfo.glyphColors\n );\n\n // If we had extra sync requests queued up, kick it off\n const queued = this._queuedSyncs;\n if (queued) {\n this._queuedSyncs = null;\n this._needsSync = true;\n this.sync(() => {\n queued.forEach(fn => fn && fn());\n });\n }\n\n this.dispatchEvent(syncCompleteEvent);\n if (callback) {\n callback();\n }\n });\n }\n }\n }\n\n /**\n * Initiate a sync if needed - note it won't complete until next frame at the\n * earliest so if possible it's a good idea to call sync() manually as soon as\n * all the properties have been set.\n * @override\n */\n onBeforeRender(renderer, scene, camera, geometry, material, group) {\n this.sync();\n\n // This may not always be a text material, e.g. if there's a scene.overrideMaterial present\n if (material.isTroikaTextMaterial) {\n this._prepareForRender(material);\n }\n }\n\n /**\n * Shortcut to dispose the geometry specific to this instance.\n * Note: we don't also dispose the derived material here because if anything else is\n * sharing the same base material it will result in a pause next frame as the program\n * is recompiled. Instead users can dispose the base material manually, like normal,\n * and we'll also dispose the derived material at that time.\n */\n dispose() {\n this.geometry.dispose();\n }\n\n /**\n * @property {TroikaTextRenderInfo|null} textRenderInfo\n * @readonly\n * The current processed rendering data for this TextMesh, returned by the TextBuilder after\n * a `sync()` call. This will be `null` initially, and may be stale for a short period until\n * the asynchrous `sync()` process completes.\n */\n get textRenderInfo() {\n return this._textRenderInfo || null\n }\n\n /**\n * Create the text derived material from the base material. Can be overridden to use a custom\n * derived material.\n */\n createDerivedMaterial(baseMaterial) {\n return createTextDerivedMaterial(baseMaterial)\n }\n\n // Handler for automatically wrapping the base material with our upgrades. We do the wrapping\n // lazily on _read_ rather than write to avoid unnecessary wrapping on transient values.\n get material() {\n let derivedMaterial = this._derivedMaterial;\n const baseMaterial = this._baseMaterial || this._defaultMaterial || (this._defaultMaterial = defaultMaterial.clone());\n if (!derivedMaterial || !derivedMaterial.isDerivedFrom(baseMaterial)) {\n derivedMaterial = this._derivedMaterial = this.createDerivedMaterial(baseMaterial);\n // dispose the derived material when its base material is disposed:\n baseMaterial.addEventListener('dispose', function onDispose() {\n baseMaterial.removeEventListener('dispose', onDispose);\n derivedMaterial.dispose();\n });\n }\n // If text outline is configured, render it as a preliminary draw using Three's multi-material\n // feature (see GlyphsGeometry which sets up `groups` for this purpose) Doing it with multi\n // materials ensures the layers are always rendered consecutively in a consistent order.\n // Each layer will trigger onBeforeRender with the appropriate material.\n if (this.hasOutline()) {\n let outlineMaterial = derivedMaterial._outlineMtl;\n if (!outlineMaterial) {\n outlineMaterial = derivedMaterial._outlineMtl = Object.create(derivedMaterial, {\n id: {value: derivedMaterial.id + 0.1}\n });\n outlineMaterial.isTextOutlineMaterial = true;\n outlineMaterial.depthWrite = false;\n outlineMaterial.map = null; //???\n derivedMaterial.addEventListener('dispose', function onDispose() {\n derivedMaterial.removeEventListener('dispose', onDispose);\n outlineMaterial.dispose();\n });\n }\n return [\n outlineMaterial,\n derivedMaterial\n ]\n } else {\n return derivedMaterial\n }\n }\n set material(baseMaterial) {\n if (baseMaterial && baseMaterial.isTroikaTextMaterial) { //prevent double-derivation\n this._derivedMaterial = baseMaterial;\n this._baseMaterial = baseMaterial.baseMaterial;\n } else {\n this._baseMaterial = baseMaterial;\n }\n }\n\n hasOutline() {\n return !!(this.outlineWidth || this.outlineBlur || this.outlineOffsetX || this.outlineOffsetY)\n }\n\n get glyphGeometryDetail() {\n return this.geometry.detail\n }\n set glyphGeometryDetail(detail) {\n this.geometry.detail = detail;\n }\n\n get curveRadius() {\n return this.geometry.curveRadius\n }\n set curveRadius(r) {\n this.geometry.curveRadius = r;\n }\n\n // Create and update material for shadows upon request:\n get customDepthMaterial() {\n return first(this.material).getDepthMaterial()\n }\n set customDepthMaterial(m) {\n // future: let the user override with their own?\n }\n get customDistanceMaterial() {\n return first(this.material).getDistanceMaterial()\n }\n set customDistanceMaterial(m) {\n // future: let the user override with their own?\n }\n\n _prepareForRender(material) {\n const isOutline = material.isTextOutlineMaterial;\n const uniforms = material.uniforms;\n const textInfo = this.textRenderInfo;\n if (textInfo) {\n const {sdfTexture, blockBounds} = textInfo;\n uniforms.uTroikaSDFTexture.value = sdfTexture;\n uniforms.uTroikaSDFTextureSize.value.set(sdfTexture.image.width, sdfTexture.image.height);\n uniforms.uTroikaSDFGlyphSize.value = textInfo.sdfGlyphSize;\n uniforms.uTroikaSDFExponent.value = textInfo.sdfExponent;\n uniforms.uTroikaTotalBounds.value.fromArray(blockBounds);\n uniforms.uTroikaUseGlyphColors.value = !isOutline && !!textInfo.glyphColors;\n\n let distanceOffset = 0;\n let blurRadius = 0;\n let strokeWidth = 0;\n let fillOpacity;\n let strokeOpacity;\n let strokeColor;\n let offsetX = 0;\n let offsetY = 0;\n\n if (isOutline) {\n let {outlineWidth, outlineOffsetX, outlineOffsetY, outlineBlur, outlineOpacity} = this;\n distanceOffset = this._parsePercent(outlineWidth) || 0;\n blurRadius = Math.max(0, this._parsePercent(outlineBlur) || 0);\n fillOpacity = outlineOpacity;\n offsetX = this._parsePercent(outlineOffsetX) || 0;\n offsetY = this._parsePercent(outlineOffsetY) || 0;\n } else {\n strokeWidth = Math.max(0, this._parsePercent(this.strokeWidth) || 0);\n if (strokeWidth) {\n strokeColor = this.strokeColor;\n uniforms.uTroikaStrokeColor.value.set(strokeColor == null ? defaultStrokeColor : strokeColor);\n strokeOpacity = this.strokeOpacity;\n if (strokeOpacity == null) strokeOpacity = 1;\n }\n fillOpacity = this.fillOpacity;\n }\n\n uniforms.uTroikaEdgeOffset.value = distanceOffset;\n uniforms.uTroikaPositionOffset.value.set(offsetX, offsetY);\n uniforms.uTroikaBlurRadius.value = blurRadius;\n uniforms.uTroikaStrokeWidth.value = strokeWidth;\n uniforms.uTroikaStrokeOpacity.value = strokeOpacity;\n uniforms.uTroikaFillOpacity.value = fillOpacity == null ? 1 : fillOpacity;\n uniforms.uTroikaCurveRadius.value = this.curveRadius || 0;\n\n let clipRect = this.clipRect;\n if (clipRect && Array.isArray(clipRect) && clipRect.length === 4) {\n uniforms.uTroikaClipRect.value.fromArray(clipRect);\n } else {\n // no clipping - choose a finite rect that shouldn't ever be reached by overflowing glyphs or outlines\n const pad = (this.fontSize || 0.1) * 100;\n uniforms.uTroikaClipRect.value.set(\n blockBounds[0] - pad,\n blockBounds[1] - pad,\n blockBounds[2] + pad,\n blockBounds[3] + pad\n );\n }\n this.geometry.applyClipRect(uniforms.uTroikaClipRect.value);\n }\n uniforms.uTroikaSDFDebug.value = !!this.debugSDF;\n material.polygonOffset = !!this.depthOffset;\n material.polygonOffsetFactor = material.polygonOffsetUnits = this.depthOffset || 0;\n\n // Shortcut for setting material color via `color` prop on the mesh; this is\n // applied only to the derived material to avoid mutating a shared base material.\n const color = isOutline ? (this.outlineColor || 0) : this.color;\n\n if (color == null) {\n delete material.color; //inherit from base\n } else {\n const colorObj = material.hasOwnProperty('color') ? material.color : (material.color = new Color());\n if (color !== colorObj._input || typeof color === 'object') {\n colorObj.set(colorObj._input = color);\n }\n }\n\n // base orientation\n let orient = this.orientation || defaultOrient;\n if (orient !== material._orientation) {\n let rotMat = uniforms.uTroikaOrient.value;\n orient = orient.replace(/[^-+xyz]/g, '');\n let match = orient !== defaultOrient && orient.match(/^([-+])([xyz])([-+])([xyz])$/);\n if (match) {\n let [, hSign, hAxis, vSign, vAxis] = match;\n tempVec3a.set(0, 0, 0)[hAxis] = hSign === '-' ? 1 : -1;\n tempVec3b.set(0, 0, 0)[vAxis] = vSign === '-' ? -1 : 1;\n tempMat4.lookAt(origin, tempVec3a.cross(tempVec3b), tempVec3b);\n rotMat.setFromMatrix4(tempMat4);\n } else {\n rotMat.identity();\n }\n material._orientation = orient;\n }\n }\n\n _parsePercent(value) {\n if (typeof value === 'string') {\n let match = value.match(/^(-?[\\d.]+)%$/);\n let pct = match ? parseFloat(match[1]) : NaN;\n value = (isNaN(pct) ? 0 : pct / 100) * this.fontSize;\n }\n return value\n }\n\n /**\n * Translate a point in local space to an x/y in the text plane.\n */\n localPositionToTextCoords(position, target = new Vector2()) {\n target.copy(position); //simple non-curved case is 1:1\n const r = this.curveRadius;\n if (r) { //flatten the curve\n target.x = Math.atan2(position.x, Math.abs(r) - Math.abs(position.z)) * Math.abs(r);\n }\n return target\n }\n\n /**\n * Translate a point in world space to an x/y in the text plane.\n */\n worldPositionToTextCoords(position, target = new Vector2()) {\n tempVec3a.copy(position);\n return this.localPositionToTextCoords(this.worldToLocal(tempVec3a), target)\n }\n\n /**\n * @override Custom raycasting to test against the whole text block's max rectangular bounds\n * TODO is there any reason to make this more granular, like within individual line or glyph rects?\n */\n raycast(raycaster, intersects) {\n const {textRenderInfo, curveRadius} = this;\n if (textRenderInfo) {\n const bounds = textRenderInfo.blockBounds;\n const raycastMesh = curveRadius ? getCurvedRaycastMesh() : getFlatRaycastMesh();\n const geom = raycastMesh.geometry;\n const {position, uv} = geom.attributes;\n for (let i = 0; i < uv.count; i++) {\n let x = bounds[0] + (uv.getX(i) * (bounds[2] - bounds[0]));\n const y = bounds[1] + (uv.getY(i) * (bounds[3] - bounds[1]));\n let z = 0;\n if (curveRadius) {\n z = curveRadius - Math.cos(x / curveRadius) * curveRadius;\n x = Math.sin(x / curveRadius) * curveRadius;\n }\n position.setXYZ(i, x, y, z);\n }\n geom.boundingSphere = this.geometry.boundingSphere;\n geom.boundingBox = this.geometry.boundingBox;\n raycastMesh.matrixWorld = this.matrixWorld;\n raycastMesh.material.side = this.material.side;\n tempArray.length = 0;\n raycastMesh.raycast(raycaster, tempArray);\n for (let i = 0; i < tempArray.length; i++) {\n tempArray[i].object = this;\n intersects.push(tempArray[i]);\n }\n }\n }\n\n copy(source) {\n // Prevent copying the geometry reference so we don't end up sharing attributes between instances\n const geom = this.geometry;\n super.copy(source);\n this.geometry = geom;\n\n COPYABLE_PROPS.forEach(prop => {\n this[prop] = source[prop];\n });\n return this\n }\n\n clone() {\n return new this.constructor().copy(this)\n }\n}\n\n\n// Create setters for properties that affect text layout:\nSYNCABLE_PROPS.forEach(prop => {\n const privateKey = '_private_' + prop;\n Object.defineProperty(Text.prototype, prop, {\n get() {\n return this[privateKey]\n },\n set(value) {\n if (value !== this[privateKey]) {\n this[privateKey] = value;\n this._needsSync = true;\n }\n }\n });\n});\n\nconst syncStartEvent$1 = { type: \"syncstart\" };\nconst syncCompleteEvent$1 = { type: \"synccomplete\" };\nconst memberIndexAttrName = \"aTroikaTextBatchMemberIndex\";\n\n\n/*\nData texture packing strategy:\n\n# Common:\n0-15: matrix\n16-19: uTroikaTotalBounds\n20-23: uTroikaClipRect\n24: diffuse (color/outlineColor)\n25: uTroikaFillOpacity (fillOpacity/outlineOpacity)\n26: uTroikaCurveRadius\n27: <blank>\n\n# Main:\n28: uTroikaStrokeWidth\n29: uTroikaStrokeColor\n30: uTroikaStrokeOpacity\n\n# Outline:\n28-29: uTroikaPositionOffset\n30: uTroikaEdgeOffset\n31: uTroikaBlurRadius\n*/\nconst floatsPerMember = 32;\n\nconst tempBox3 = new Box3();\nconst tempColor$1 = new Color();\n\n/**\n * @experimental\n *\n * A specialized `Text` implementation that accepts any number of `Text` children\n * and automatically batches them together to render in a single draw call.\n *\n * The `material` of each child `Text` will be ignored, and the `material` of the\n * `BatchedText` will be used for all of them instead.\n *\n * NOTE: This only works in WebGL2 or where the OES_texture_float extension is available.\n */\nclass BatchedText extends Text {\n constructor () {\n super();\n\n /**\n * @typedef {Object} PackingInfo\n * @property {number} index - the packing order index when last packed, or -1\n * @property {boolean} dirty - whether it has synced since last pack\n */\n\n /**\n * @type {Map<Text, PackingInfo>}\n */\n this._members = new Map();\n this._dataTextures = {};\n\n this._onMemberSynced = (e) => {\n this._members.get(e.target).dirty = true;\n };\n }\n\n /**\n * @override\n * Batch any Text objects added as children\n */\n add (...objects) {\n for (let i = 0; i < objects.length; i++) {\n if (objects[i] instanceof Text) {\n this.addText(objects[i]);\n } else {\n super.add(objects[i]);\n }\n }\n return this;\n }\n\n /**\n * @override\n */\n remove (...objects) {\n for (let i = 0; i < objects.length; i++) {\n if (objects[i] instanceof Text) {\n this.removeText(objects[i]);\n } else {\n super.remove(objects[i]);\n }\n }\n return this;\n }\n\n /**\n * @param {Text} text\n */\n addText (text) {\n if (!this._members.has(text)) {\n this._members.set(text, {\n index: -1,\n glyphCount: -1,\n dirty: true\n });\n text.addEventListener(\"synccomplete\", this._onMemberSynced);\n }\n }\n\n /**\n * @param {Text} text\n */\n removeText (text) {\n this._needsRepack = true;\n text.removeEventListener(\"synccomplete\", this._onMemberSynced);\n this._members.delete(text);\n }\n\n /**\n * Use the custom derivation with extra batching logic\n */\n createDerivedMaterial (baseMaterial) {\n return createBatchedTextMaterial(baseMaterial);\n }\n\n updateMatrixWorld (force) {\n super.updateMatrixWorld(force);\n this.updateBounds();\n }\n\n /**\n * Update the batched geometry bounds to hold all members\n */\n updateBounds () {\n // Update member local matrices and the overall bounds\n const bbox = this.geometry.boundingBox.makeEmpty();\n this._members.forEach((_, text) => {\n if (text.matrixAutoUpdate) text.updateMatrix(); // ignore world matrix\n tempBox3.copy(text.geometry.boundingBox).applyMatrix4(text.matrix);\n bbox.union(tempBox3);\n });\n bbox.getBoundingSphere(this.geometry.boundingSphere);\n }\n\n /** @override */\n hasOutline() {\n // Iterator.some() not supported in Safari\n for (let member of this._members.keys()) {\n if (member.hasOutline()) return true;\n }\n return false;\n }\n\n /**\n * @override\n * Copy member matrices and uniform values into the data texture\n */\n _prepareForRender (material) {\n const isOutline = material.isTextOutlineMaterial;\n material.uniforms.uTroikaIsOutline.value = isOutline;\n\n // Resize the texture to fit in powers of 2\n let texture = this._dataTextures[isOutline ? 'outline' : 'main'];\n const dataLength = Math.pow(2, Math.ceil(Math.log2(this._members.size * floatsPerMember)));\n if (!texture || dataLength !== texture.image.data.length) {\n // console.log(`resizing: ${dataLength}`);\n if (texture) texture.dispose();\n const width = Math.min(dataLength / 4, 1024);\n texture = this._dataTextures[isOutline ? 'outline' : 'main'] = new DataTexture(\n new Float32Array(dataLength),\n width,\n dataLength / 4 / width,\n RGBAFormat,\n FloatType\n );\n }\n\n const texData = texture.image.data;\n const setTexData = (index, value) => {\n if (value !== texData[index]) {\n texData[index] = value;\n texture.needsUpdate = true;\n }\n };\n this._members.forEach(({ index, dirty }, text) => {\n if (index > -1) {\n const startIndex = index * floatsPerMember;\n\n // Matrix\n const matrix = text.matrix.elements;\n for (let i = 0; i < 16; i++) {\n setTexData(startIndex + i, matrix[i]);\n }\n\n // Let the member populate the uniforms, since that does all the appropriate\n // logic and handling of defaults, and we'll just grab the results from there\n text._prepareForRender(material);\n const {\n uTroikaTotalBounds,\n uTroikaClipRect,\n uTroikaPositionOffset,\n uTroikaEdgeOffset,\n uTroikaBlurRadius,\n uTroikaStrokeWidth,\n uTroikaStrokeColor,\n uTroikaStrokeOpacity,\n uTroikaFillOpacity,\n uTroikaCurveRadius,\n } = material.uniforms;\n\n // Total bounds for uv\n for (let i = 0; i < 4; i++) {\n setTexData(startIndex + 16 + i, uTroikaTotalBounds.value.getComponent(i));\n }\n\n // Clip rect\n for (let i = 0; i < 4; i++) {\n setTexData(startIndex + 20 + i, uTroikaClipRect.value.getComponent(i));\n }\n\n // Color\n let color = isOutline ? (text.outlineColor || 0) : text.color;\n if (color == null) color = this.color;\n if (color == null) color = this.material.color;\n if (color == null) color = 0xffffff;\n setTexData(startIndex + 24, tempColor$1.set(color).getHex());\n\n // Fill opacity / outline opacity\n setTexData(startIndex + 25, uTroikaFillOpacity.value);\n\n // Curve radius\n setTexData(startIndex + 26, uTroikaCurveRadius.value);\n\n if (isOutline) {\n // Outline properties\n setTexData(startIndex + 28, uTroikaPositionOffset.value.x);\n setTexData(startIndex + 29, uTroikaPositionOffset.value.y);\n setTexData(startIndex + 30, uTroikaEdgeOffset.value);\n setTexData(startIndex + 31, uTroikaBlurRadius.value);\n } else {\n // Stroke properties\n setTexData(startIndex + 28, uTroikaStrokeWidth.value);\n setTexData(startIndex + 29, tempColor$1.set(uTroikaStrokeColor.value).getHex());\n setTexData(startIndex + 30, uTroikaStrokeOpacity.value);\n }\n }\n });\n material.setMatrixTexture(texture);\n\n // For the non-member-specific uniforms:\n super._prepareForRender(material);\n }\n\n sync (callback) {\n // TODO: skip members updating their geometries, just use textRenderInfo directly\n\n // Trigger sync on all members that need it\n let syncPromises = this._needsRepack ? [] : null;\n this._needsRepack = false;\n this._members.forEach((packingInfo, text) => {\n if (packingInfo.dirty || text._needsSync) {\n packingInfo.dirty = false;\n (syncPromises || (syncPromises = [])).push(new Promise(resolve => {\n if (text._needsSync) {\n text.sync(resolve);\n } else {\n resolve();\n }\n }));\n }\n });\n\n // If any needed syncing, wait for them and then repack the batched geometry\n if (syncPromises) {\n this.dispatchEvent(syncStartEvent$1);\n\n Promise.all(syncPromises).then(() => {\n const { geometry } = this;\n const batchedAttributes = geometry.attributes;\n let memberIndexes = batchedAttributes[memberIndexAttrName] && batchedAttributes[memberIndexAttrName].array || new Uint16Array(0);\n let batchedGlyphIndexes = batchedAttributes[glyphIndexAttrName] && batchedAttributes[glyphIndexAttrName].array || new Float32Array(0);\n let batchedGlyphBounds = batchedAttributes[glyphBoundsAttrName] && batchedAttributes[glyphBoundsAttrName].array || new Float32Array(0);\n\n // Initial pass to collect total glyph count and resize the arrays if needed\n let totalGlyphCount = 0;\n this._members.forEach((packingInfo, { textRenderInfo }) => {\n if (textRenderInfo) {\n totalGlyphCount += textRenderInfo.glyphAtlasIndices.length;\n this._textRenderInfo = textRenderInfo; // TODO - need this, but be smarter\n }\n });\n if (totalGlyphCount !== memberIndexes.length) {\n memberIndexes = cloneAndResize(memberIndexes, totalGlyphCount);\n batchedGlyphIndexes = cloneAndResize(batchedGlyphIndexes, totalGlyphCount);\n batchedGlyphBounds = cloneAndResize(batchedGlyphBounds, totalGlyphCount * 4);\n }\n\n // Populate batch arrays\n let memberIndex = 0;\n let glyphIndex = 0;\n this._members.forEach((packingInfo, { textRenderInfo }) => {\n if (textRenderInfo) {\n const glyphCount = textRenderInfo.glyphAtlasIndices.length;\n memberIndexes.fill(memberIndex, glyphIndex, glyphIndex + glyphCount);\n\n // TODO can skip these for members that are not dirty or shifting overall position:\n batchedGlyphIndexes.set(textRenderInfo.glyphAtlasIndices, glyphIndex, glyphIndex + glyphCount);\n batchedGlyphBounds.set(textRenderInfo.glyphBounds, glyphIndex * 4, (glyphIndex + glyphCount) * 4);\n\n glyphIndex += glyphCount;\n packingInfo.index = memberIndex++;\n }\n });\n\n // Update the geometry attributes\n geometry.updateAttributeData(memberIndexAttrName, memberIndexes, 1);\n geometry.getAttribute(memberIndexAttrName).setUsage(DynamicDrawUsage);\n geometry.updateAttributeData(glyphIndexAttrName, batchedGlyphIndexes, 1);\n geometry.updateAttributeData(glyphBoundsAttrName, batchedGlyphBounds, 4);\n\n this.updateBounds();\n\n this.dispatchEvent(syncCompleteEvent$1);\n if (callback) {\n callback();\n }\n });\n }\n }\n\n copy (source) {\n if (source instanceof BatchedText) {\n super.copy(source);\n this._members.forEach((_, text) => this.removeText(text));\n source._members.forEach((_, text) => this.addText(text));\n }\n return this;\n }\n\n dispose () {\n super.dispose();\n Object.values(this._dataTextures).forEach(tex => tex.dispose());\n }\n}\n\nfunction cloneAndResize (source, newLength) {\n const copy = new source.constructor(newLength);\n copy.set(source.subarray(0, newLength));\n return copy;\n}\n\nfunction createBatchedTextMaterial (baseMaterial) {\n const texUniformName = \"uTroikaMatricesTexture\";\n const texSizeUniformName = \"uTroikaMatricesTextureSize\";\n\n // Due to how vertexTransform gets injected, the matrix transforms must happen\n // in the base material of TextDerivedMaterial, but other transforms to its\n // shader must come after, so we sandwich it between two derivations.\n\n // Transform the vertex position\n let batchMaterial = createDerivedMaterial(baseMaterial, {\n chained: true,\n uniforms: {\n [texSizeUniformName]: { value: new Vector2() },\n [texUniformName]: { value: null }\n },\n // language=GLSL\n vertexDefs: `\n uniform highp sampler2D ${texUniformName};\n uniform vec2 ${texSizeUniformName};\n attribute float ${memberIndexAttrName};\n\n vec4 troikaBatchTexel(float offset) {\n offset += ${memberIndexAttrName} * ${floatsPerMember.toFixed(1)} / 4.0;\n float w = ${texSizeUniformName}.x;\n vec2 uv = (vec2(mod(offset, w), floor(offset / w)) + 0.5) / ${texSizeUniformName};\n return texture2D(${texUniformName}, uv);\n }\n `,\n // language=GLSL prefix=\"void main() {\" suffix=\"}\"\n vertexTransform: `\n mat4 matrix = mat4(\n troikaBatchTexel(0.0),\n troikaBatchTexel(1.0),\n troikaBatchTexel(2.0),\n troikaBatchTexel(3.0)\n );\n position.xyz = (matrix * vec4(position, 1.0)).xyz;\n `,\n });\n\n // Add the text shaders\n batchMaterial = createTextDerivedMaterial(batchMaterial);\n\n // Now make other changes to the derived text shader code\n batchMaterial = createDerivedMaterial(batchMaterial, {\n chained: true,\n uniforms: {\n uTroikaIsOutline: {value: false},\n },\n customRewriter(shaders) {\n // Convert some text shader uniforms to varyings\n const varyingUniforms = [\n 'uTroikaTotalBounds',\n 'uTroikaClipRect',\n 'uTroikaPositionOffset',\n 'uTroikaEdgeOffset',\n 'uTroikaBlurRadius',\n 'uTroikaStrokeWidth',\n 'uTroikaStrokeColor',\n 'uTroikaStrokeOpacity',\n 'uTroikaFillOpacity',\n 'uTroikaCurveRadius',\n 'diffuse'\n ];\n varyingUniforms.forEach(uniformName => {\n shaders = uniformToVarying(shaders, uniformName);\n });\n return shaders\n },\n // language=GLSL\n vertexDefs: `\n uniform bool uTroikaIsOutline;\n vec3 troikaFloatToColor(float v) {\n return mod(floor(vec3(v / 65536.0, v / 256.0, v)), 256.0) / 256.0;\n }\n `,\n // language=GLSL prefix=\"void main() {\" suffix=\"}\"\n vertexTransform: `\n uTroikaTotalBounds = troikaBatchTexel(4.0);\n uTroikaClipRect = troikaBatchTexel(5.0);\n \n vec4 data = troikaBatchTexel(6.0);\n diffuse = troikaFloatToColor(data.x);\n uTroikaFillOpacity = data.y;\n uTroikaCurveRadius = data.z;\n \n data = troikaBatchTexel(7.0);\n if (uTroikaIsOutline) {\n if (data == vec4(0.0)) { // degenerate if zero outline\n position = vec3(0.0);\n } else {\n uTroikaPositionOffset = data.xy;\n uTroikaEdgeOffset = data.z;\n uTroikaBlurRadius = data.w;\n }\n } else {\n uTroikaStrokeWidth = data.x;\n uTroikaStrokeColor = troikaFloatToColor(data.y);\n uTroikaStrokeOpacity = data.z;\n }\n `,\n });\n\n batchMaterial.setMatrixTexture = (texture) => {\n batchMaterial.uniforms[texUniformName].value = texture;\n batchMaterial.uniforms[texSizeUniformName].value.set(texture.image.width, texture.image.height);\n };\n return batchMaterial;\n}\n\n/**\n * Turn a uniform into a varying/writeable value.\n * - If the uniform was used in the fragment shader, it will become a varying in both shaders.\n * - If the uniform was only used in the vertex shader, it will become a writeable var.\n */\nfunction uniformToVarying({vertexShader, fragmentShader}, uniformName, varyingName = uniformName) {\n const uniformRE = new RegExp(`uniform\\\\s+(bool|float|vec[234]|mat[34])\\\\s+${uniformName}\\\\b`);\n\n let type;\n let hadFragmentUniform = false;\n fragmentShader = fragmentShader.replace(uniformRE, ($0, $1) => {\n hadFragmentUniform = true;\n return `varying ${type = $1} ${varyingName}`\n });\n\n let hadVertexUniform = false;\n vertexShader = vertexShader.replace(uniformRE, (_, $1) => {\n hadVertexUniform = true;\n return `${hadFragmentUniform ? 'varying' : ''} ${type = $1} ${varyingName}`\n });\n if (!hadVertexUniform) {\n vertexShader = `${hadFragmentUniform ? 'varying' : ''} ${type} ${varyingName};\\n${vertexShader}`;\n }\n return {vertexShader, fragmentShader}\n}\n\n//=== Utility functions for dealing with carets and selection ranges ===//\n\n/**\n * @typedef {object} TextCaret\n * @property {number} x - x position of the caret\n * @property {number} y - y position of the caret's bottom\n * @property {number} height - height of the caret\n * @property {number} charIndex - the index in the original input string of this caret's target\n * character; the caret will be for the position _before_ that character.\n */\n\n/**\n * Given a local x/y coordinate in the text block plane, find the nearest caret position.\n * @param {TroikaTextRenderInfo} textRenderInfo - a result object from TextBuilder#getTextRenderInfo\n * @param {number} x\n * @param {number} y\n * @return {TextCaret | null}\n */\nfunction getCaretAtPoint(textRenderInfo, x, y) {\n let closestCaret = null;\n const rows = groupCaretsByRow(textRenderInfo);\n\n // Find nearest row by y first\n let closestRow = null;\n rows.forEach(row => {\n if (!closestRow || Math.abs(y - (row.top + row.bottom) / 2) < Math.abs(y - (closestRow.top + closestRow.bottom) / 2)) {\n closestRow = row;\n }\n });\n\n // Then find closest caret by x within that row\n closestRow.carets.forEach(caret => {\n if (!closestCaret || Math.abs(x - caret.x) < Math.abs(x - closestCaret.x)) {\n closestCaret = caret;\n }\n });\n return closestCaret\n}\n\n\nconst _rectsCache = new WeakMap();\n\n/**\n * Given start and end character indexes, return a list of rectangles covering all the\n * characters within that selection.\n * @param {TroikaTextRenderInfo} textRenderInfo\n * @param {number} start - index of the first char in the selection\n * @param {number} end - index of the first char after the selection\n * @return {Array<{left, top, right, bottom}> | null}\n */\nfunction getSelectionRects(textRenderInfo, start, end) {\n let rects;\n if (textRenderInfo) {\n // Check cache - textRenderInfo is frozen so it's safe to cache based on it\n let prevResult = _rectsCache.get(textRenderInfo);\n if (prevResult && prevResult.start === start && prevResult.end === end) {\n return prevResult.rects\n }\n\n const {caretPositions} = textRenderInfo;\n\n // Normalize\n if (end < start) {\n const s = start;\n start = end;\n end = s;\n }\n start = Math.max(start, 0);\n end = Math.min(end, caretPositions.length + 1);\n\n // Build list of rects, expanding the current rect for all characters in a run and starting\n // a new rect whenever reaching a new line or a new bidi direction\n rects = [];\n let currentRect = null;\n for (let i = start; i < end; i++) {\n const x1 = caretPositions[i * 4];\n const x2 = caretPositions[i * 4 + 1];\n const left = Math.min(x1, x2);\n const right = Math.max(x1, x2);\n const bottom = caretPositions[i * 4 + 2];\n const top = caretPositions[i * 4 + 3];\n if (!currentRect || bottom !== currentRect.bottom || top !== currentRect.top || left > currentRect.right || right < currentRect.left) {\n currentRect = {\n left: Infinity,\n right: -Infinity,\n bottom,\n top,\n };\n rects.push(currentRect);\n }\n currentRect.left = Math.min(left, currentRect.left);\n currentRect.right = Math.max(right, currentRect.right);\n }\n\n // Merge any overlapping rects, e.g. those formed by adjacent bidi runs\n rects.sort((a, b) => b.bottom - a.bottom || a.left - b.left);\n for (let i = rects.length - 1; i-- > 0;) {\n const rectA = rects[i];\n const rectB = rects[i + 1];\n if (rectA.bottom === rectB.bottom && rectA.top === rectB.top && rectA.left <= rectB.right && rectA.right >= rectB.left) {\n rectB.left = Math.min(rectB.left, rectA.left);\n rectB.right = Math.max(rectB.right, rectA.right);\n rects.splice(i, 1);\n }\n }\n\n _rectsCache.set(textRenderInfo, {start, end, rects});\n }\n return rects\n}\n\nconst _caretsByRowCache = new WeakMap();\n\n/**\n * Group a set of carets by row of text, caching the result. A single row of text may contain carets of\n * differing positions/heights if it has multiple fonts, and they may overlap slightly across rows, so this\n * uses an assumption of \"at least overlapping by half\" to put them in the same row.\n * @return Array<{bottom: number, top: number, carets: TextCaret[]}>\n */\nfunction groupCaretsByRow(textRenderInfo) {\n // textRenderInfo is frozen so it's safe to cache based on it\n let rows = _caretsByRowCache.get(textRenderInfo);\n if (!rows) {\n rows = [];\n const {caretPositions} = textRenderInfo;\n let curRow;\n\n const visitCaret = (x, bottom, top, charIndex) => {\n // new row if not overlapping by at least half\n if (!curRow || (top < (curRow.top + curRow.bottom) / 2)) {\n rows.push(curRow = {bottom, top, carets: []});\n }\n // expand vertical limits if necessary\n if (top > curRow.top) curRow.top = top;\n if (bottom < curRow.bottom) curRow.bottom = bottom;\n curRow.carets.push({\n x,\n y: bottom,\n height: top - bottom,\n charIndex,\n });\n };\n\n let i = 0;\n for (; i < caretPositions.length; i += 4) {\n visitCaret(caretPositions[i], caretPositions[i + 2], caretPositions[i + 3], i / 4);\n }\n // Add one more caret after the final char\n visitCaret(caretPositions[i - 3], caretPositions[i - 2], caretPositions[i - 1], i / 4);\n }\n _caretsByRowCache.set(textRenderInfo, rows);\n return rows\n}\n\nexport { BatchedText, GlyphsGeometry, Text, configureTextBuilder, createTextDerivedMaterial, dumpSDFTextures, fontResolverWorkerModule, getCaretAtPoint, getSelectionRects, getTextRenderInfo, preloadFont, typesetterWorkerModule };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { Text as Text$1, preloadFont } from 'troika-three-text';\nimport { useThree } from '@react-three/fiber';\nimport { suspend } from 'suspend-react';\n\nconst Text = /* @__PURE__ */React.forwardRef(({\n sdfGlyphSize = 64,\n anchorX = 'center',\n anchorY = 'middle',\n font,\n fontSize = 1,\n children,\n characters,\n onSync,\n ...props\n}, ref) => {\n const invalidate = useThree(({\n invalidate\n }) => invalidate);\n const [troikaMesh] = React.useState(() => new Text$1());\n const [nodes, text] = React.useMemo(() => {\n const n = [];\n let t = '';\n React.Children.forEach(children, child => {\n if (typeof child === 'string' || typeof child === 'number') {\n t += child;\n } else {\n n.push(child);\n }\n });\n return [n, t];\n }, [children]);\n suspend(() => new Promise(res => preloadFont({\n font,\n characters\n }, res)), ['troika-text', font, characters]);\n React.useLayoutEffect(() => void troikaMesh.sync(() => {\n invalidate();\n if (onSync) onSync(troikaMesh);\n }));\n React.useEffect(() => {\n return () => troikaMesh.dispose();\n }, [troikaMesh]);\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n object: troikaMesh,\n ref: ref,\n font: font,\n text: text,\n anchorX: anchorX,\n anchorY: anchorY,\n fontSize: fontSize,\n sdfGlyphSize: sdfGlyphSize\n }, props), nodes);\n});\n\nexport { Text };\n","import { FontLoader } from 'three-stdlib';\nimport { suspend, preload, clear } from 'suspend-react';\n\nlet fontLoader = null;\nasync function loadFontData(font) {\n return typeof font === 'string' ? await (await fetch(font)).json() : font;\n}\nfunction parseFontData(fontData) {\n if (!fontLoader) {\n fontLoader = new FontLoader();\n }\n return fontLoader.parse(fontData);\n}\nasync function loader(font) {\n const data = await loadFontData(font);\n return parseFontData(data);\n}\nfunction useFont(font) {\n return suspend(loader, [font]);\n}\nuseFont.preload = font => preload(loader, [font]);\nuseFont.clear = font => clear([font]);\n\nexport { useFont };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useMemo } from 'react';\nimport { extend } from '@react-three/fiber';\nimport { TextGeometry, mergeVertices } from 'three-stdlib';\nimport { useFont } from './useFont.js';\n\nconst types = ['string', 'number'];\nconst getTextFromChildren = children => {\n let label = '';\n const rest = [];\n React.Children.forEach(children, child => {\n if (types.includes(typeof child)) label += child + '';else rest.push(child);\n });\n return [label, ...rest];\n};\nconst Text3D = /* @__PURE__ */React.forwardRef(({\n font: _font,\n letterSpacing = 0,\n lineHeight = 1,\n size = 1,\n height = 0.2,\n bevelThickness = 0.1,\n bevelSize = 0.01,\n bevelEnabled = false,\n bevelOffset = 0,\n bevelSegments = 4,\n curveSegments = 8,\n smooth,\n children,\n ...props\n}, fref) => {\n React.useMemo(() => extend({\n RenamedTextGeometry: TextGeometry\n }), []);\n const ref = React.useRef(null);\n const font = useFont(_font);\n const opts = useMemo(() => {\n return {\n font,\n size,\n height,\n bevelThickness,\n bevelSize,\n bevelEnabled,\n bevelSegments,\n bevelOffset,\n curveSegments,\n letterSpacing,\n lineHeight\n };\n }, [font, size, height, bevelThickness, bevelSize, bevelEnabled, bevelSegments, bevelOffset, curveSegments, letterSpacing, lineHeight]);\n\n /**\n * We need the `children` in the deps because we\n * need to be able to do `<Text3d>{state}</Text3d>`.\n */\n const [label, ...rest] = useMemo(() => getTextFromChildren(children), [children]);\n const args = React.useMemo(() => [label, opts], [label, opts]);\n React.useLayoutEffect(() => {\n if (smooth) {\n ref.current.geometry = mergeVertices(ref.current.geometry, smooth);\n ref.current.geometry.computeVertexNormals();\n }\n }, [args, smooth]);\n React.useImperativeHandle(fref, () => ref.current, []);\n return /*#__PURE__*/React.createElement(\"mesh\", _extends({}, props, {\n ref: ref\n }), /*#__PURE__*/React.createElement(\"renamedTextGeometry\", {\n args: args\n }), rest);\n});\n\nexport { Text3D };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { WebGLRenderTarget, HalfFloatType, RGBAFormat, UnsignedByteType } from 'three';\nimport { extend, useThree, useFrame } from '@react-three/fiber';\nimport { EffectComposer, RenderPass, ShaderPass, GammaCorrectionShader } from 'three-stdlib';\n\nconst isWebGL2Available = () => {\n try {\n var canvas = document.createElement('canvas');\n return !!(window.WebGL2RenderingContext && canvas.getContext('webgl2'));\n } catch (e) {\n return false;\n }\n};\nconst Effects = /* @__PURE__ */React.forwardRef(({\n children,\n multisamping = 8,\n renderIndex = 1,\n disableRender,\n disableGamma,\n disableRenderPass,\n depthBuffer = true,\n stencilBuffer = false,\n anisotropy = 1,\n colorSpace,\n type,\n ...props\n}, ref) => {\n React.useMemo(() => extend({\n EffectComposer,\n RenderPass,\n ShaderPass\n }), []);\n const composer = React.useRef(null);\n React.useImperativeHandle(ref, () => composer.current, []);\n const {\n scene,\n camera,\n gl,\n size,\n viewport\n } = useThree();\n const [target] = React.useState(() => {\n const t = new WebGLRenderTarget(size.width, size.height, {\n type: type || HalfFloatType,\n format: RGBAFormat,\n depthBuffer,\n stencilBuffer,\n anisotropy\n });\n\n // sRGB textures must be RGBA8 since r137 https://github.com/mrdoob/three.js/pull/23129\n if (type === UnsignedByteType && colorSpace != null) {\n t.texture.colorSpace = colorSpace;\n }\n t.samples = multisamping;\n return t;\n });\n React.useEffect(() => {\n var _composer$current, _composer$current2;\n (_composer$current = composer.current) == null || _composer$current.setSize(size.width, size.height);\n (_composer$current2 = composer.current) == null || _composer$current2.setPixelRatio(viewport.dpr);\n }, [gl, size, viewport.dpr]);\n useFrame(() => {\n var _composer$current3;\n if (!disableRender) (_composer$current3 = composer.current) == null || _composer$current3.render();\n }, renderIndex);\n const passes = [];\n if (!disableRenderPass) passes.push(/*#__PURE__*/React.createElement(\"renderPass\", {\n key: \"renderpass\",\n attach: `passes-${passes.length}`,\n args: [scene, camera]\n }));\n if (!disableGamma) passes.push(/*#__PURE__*/React.createElement(\"shaderPass\", {\n attach: `passes-${passes.length}`,\n key: \"gammapass\",\n args: [GammaCorrectionShader]\n }));\n React.Children.forEach(children, el => {\n el && passes.push(/*#__PURE__*/React.cloneElement(el, {\n key: passes.length,\n attach: `passes-${passes.length}`\n }));\n });\n return /*#__PURE__*/React.createElement(\"effectComposer\", _extends({\n ref: composer,\n args: [gl, target]\n }, props), passes);\n});\n\nexport { Effects, isWebGL2Available };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useThree } from '@react-three/fiber';\nimport * as THREE from 'three';\n\nlet GradientType = /*#__PURE__*/function (GradientType) {\n GradientType[\"Linear\"] = \"linear\";\n GradientType[\"Radial\"] = \"radial\";\n return GradientType;\n}({});\nfunction GradientTexture({\n stops,\n colors,\n size = 1024,\n width = 16,\n type = GradientType.Linear,\n innerCircleRadius = 0,\n outerCircleRadius = 'auto',\n ...props\n}) {\n const gl = useThree(state => state.gl);\n const canvas = React.useMemo(() => {\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n canvas.width = width;\n canvas.height = size;\n let gradient;\n if (type === GradientType.Linear) {\n gradient = context.createLinearGradient(0, 0, 0, size);\n } else {\n const canvasCenterX = canvas.width / 2;\n const canvasCenterY = canvas.height / 2;\n const radius = outerCircleRadius !== 'auto' ? Math.abs(Number(outerCircleRadius)) : Math.sqrt(canvasCenterX ** 2 + canvasCenterY ** 2);\n gradient = context.createRadialGradient(canvasCenterX, canvasCenterY, Math.abs(innerCircleRadius), canvasCenterX, canvasCenterY, radius);\n }\n const tempColor = new THREE.Color(); // reuse instance for performance\n let i = stops.length;\n while (i--) {\n gradient.addColorStop(stops[i], tempColor.set(colors[i]).getStyle());\n }\n context.save();\n context.fillStyle = gradient;\n context.fillRect(0, 0, width, size);\n context.restore();\n return canvas;\n }, [stops]);\n return /*#__PURE__*/React.createElement(\"canvasTexture\", _extends({\n colorSpace: gl.outputColorSpace,\n args: [canvas],\n attach: \"map\"\n }, props));\n}\n\nexport { GradientTexture, GradientType };\n","import * as THREE from 'three';\n\nfunction shaderMaterial(uniforms, vertexShader, fragmentShader, onInit) {\n var _Class;\n return _Class = class extends THREE.ShaderMaterial {\n constructor(parameters) {\n super({\n vertexShader,\n fragmentShader,\n ...parameters\n });\n for (const key in uniforms) {\n this.uniforms[key] = new THREE.Uniform(uniforms[key]);\n Object.defineProperty(this, key, {\n get() {\n return this.uniforms[key].value;\n },\n set(value) {\n this.uniforms[key].value = value;\n }\n });\n }\n this.uniforms = THREE.UniformsUtils.clone(this.uniforms);\n onInit == null || onInit(this);\n }\n }, _Class.key = THREE.MathUtils.generateUUID(), _Class;\n}\n\nexport { shaderMaterial };\n","import * as React from 'react';\nimport { useLayoutEffect, useEffect, useMemo } from 'react';\nimport { TextureLoader, Texture as Texture$1 } from 'three';\nimport { useThree, useLoader } from '@react-three/fiber';\n\nconst IsObject = url => url === Object(url) && !Array.isArray(url) && typeof url !== 'function';\nfunction useTexture(input, onLoad) {\n const gl = useThree(state => state.gl);\n const textures = useLoader(TextureLoader, IsObject(input) ? Object.values(input) : input);\n useLayoutEffect(() => {\n onLoad == null || onLoad(textures);\n }, [onLoad]);\n\n // https://github.com/mrdoob/three.js/issues/22696\n // Upload the texture to the GPU immediately instead of waiting for the first render\n // NOTE: only available for WebGLRenderer\n useEffect(() => {\n if ('initTexture' in gl) {\n let textureArray = [];\n if (Array.isArray(textures)) {\n textureArray = textures;\n } else if (textures instanceof Texture$1) {\n textureArray = [textures];\n } else if (IsObject(textures)) {\n textureArray = Object.values(textures);\n }\n textureArray.forEach(texture => {\n if (texture instanceof Texture$1) {\n gl.initTexture(texture);\n }\n });\n }\n }, [gl, textures]);\n const mappedTextures = useMemo(() => {\n if (IsObject(input)) {\n const keyed = {};\n let i = 0;\n for (const key in input) keyed[key] = textures[i++];\n return keyed;\n } else {\n return textures;\n }\n }, [input, textures]);\n return mappedTextures;\n}\nuseTexture.preload = url => useLoader.preload(TextureLoader, url);\nuseTexture.clear = input => useLoader.clear(TextureLoader, input);\n\n//\n\nconst Texture = ({\n children,\n input,\n onLoad\n}) => {\n const ret = useTexture(input, onLoad);\n return /*#__PURE__*/React.createElement(React.Fragment, null, children == null ? void 0 : children(ret));\n};\n\nexport { IsObject, Texture, useTexture };\n","import { REVISION } from 'three';\n\nconst getVersion = () => parseInt(REVISION.replace(/\\D+/g, ''));\nconst version = /* @__PURE__ */getVersion();\n\nexport { version };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { extend, useThree } from '@react-three/fiber';\nimport { shaderMaterial } from './shaderMaterial.js';\nimport { useTexture } from './Texture.js';\nimport { version } from '../helpers/constants.js';\n\n// {texture: THREE.Texture} XOR {url: string}\n\nconst ImageMaterialImpl = /* @__PURE__ */shaderMaterial({\n color: /* @__PURE__ */new THREE.Color('white'),\n scale: /* @__PURE__ */new THREE.Vector2(1, 1),\n imageBounds: /* @__PURE__ */new THREE.Vector2(1, 1),\n resolution: 1024,\n map: null,\n zoom: 1,\n radius: 0,\n grayscale: 0,\n opacity: 1\n}, /* glsl */`\n varying vec2 vUv;\n varying vec2 vPos;\n void main() {\n gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);\n vUv = uv;\n vPos = position.xy;\n }\n`, /* glsl */`\n // mostly from https://gist.github.com/statico/df64c5d167362ecf7b34fca0b1459a44\n varying vec2 vUv;\n varying vec2 vPos;\n uniform vec2 scale;\n uniform vec2 imageBounds;\n uniform float resolution;\n uniform vec3 color;\n uniform sampler2D map;\n uniform float radius;\n uniform float zoom;\n uniform float grayscale;\n uniform float opacity;\n const vec3 luma = vec3(.299, 0.587, 0.114);\n vec4 toGrayscale(vec4 color, float intensity) {\n return vec4(mix(color.rgb, vec3(dot(color.rgb, luma)), intensity), color.a);\n }\n vec2 aspect(vec2 size) {\n return size / min(size.x, size.y);\n }\n \n const float PI = 3.14159265;\n \n // from https://iquilezles.org/articles/distfunctions\n float udRoundBox( vec2 p, vec2 b, float r ) {\n return length(max(abs(p)-b+r,0.0))-r;\n }\n\n void main() {\n vec2 s = aspect(scale);\n vec2 i = aspect(imageBounds);\n float rs = s.x / s.y;\n float ri = i.x / i.y;\n vec2 new = rs < ri ? vec2(i.x * s.y / i.y, s.y) : vec2(s.x, i.y * s.x / i.x);\n vec2 offset = (rs < ri ? vec2((new.x - s.x) / 2.0, 0.0) : vec2(0.0, (new.y - s.y) / 2.0)) / new;\n vec2 uv = vUv * s / new + offset;\n vec2 zUv = (uv - vec2(0.5, 0.5)) / zoom + vec2(0.5, 0.5);\n\n vec2 res = vec2(scale * resolution);\n vec2 halfRes = 0.5 * res;\n float b = udRoundBox(vUv.xy * res - halfRes, halfRes, resolution * radius); \n\t vec3 a = mix(vec3(1.0,0.0,0.0), vec3(0.0,0.0,0.0), smoothstep(0.0, 1.0, b));\n gl_FragColor = toGrayscale(texture2D(map, zUv) * vec4(color, opacity * a), grayscale);\n \n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }\n`);\nconst ImageBase = /* @__PURE__ */React.forwardRef(({\n children,\n color,\n segments = 1,\n scale = 1,\n zoom = 1,\n grayscale = 0,\n opacity = 1,\n radius = 0,\n texture,\n toneMapped,\n transparent,\n side,\n ...props\n}, fref) => {\n extend({\n ImageMaterial: ImageMaterialImpl\n });\n const ref = React.useRef(null);\n const size = useThree(state => state.size);\n const planeBounds = Array.isArray(scale) ? [scale[0], scale[1]] : [scale, scale];\n const imageBounds = [texture.image.width, texture.image.height];\n const resolution = Math.max(size.width, size.height);\n React.useImperativeHandle(fref, () => ref.current, []);\n React.useLayoutEffect(() => {\n // Support arbitrary plane geometries (for instance with rounded corners)\n // @ts-ignore\n if (ref.current.geometry.parameters) {\n // @ts-ignore\n ref.current.material.scale.set(\n // @ts-ignore\n planeBounds[0] * ref.current.geometry.parameters.width,\n // @ts-ignore\n planeBounds[1] * ref.current.geometry.parameters.height);\n }\n }, [planeBounds[0], planeBounds[1]]);\n return /*#__PURE__*/React.createElement(\"mesh\", _extends({\n ref: ref,\n scale: Array.isArray(scale) ? [...scale, 1] : scale\n }, props), /*#__PURE__*/React.createElement(\"planeGeometry\", {\n args: [1, 1, segments, segments]\n }), /*#__PURE__*/React.createElement(\"imageMaterial\", {\n color: color,\n map: texture,\n zoom: zoom,\n grayscale: grayscale,\n opacity: opacity,\n scale: planeBounds,\n imageBounds: imageBounds,\n resolution: resolution,\n radius: radius,\n toneMapped: toneMapped,\n transparent: transparent,\n side: side,\n key: ImageMaterialImpl.key\n }), children);\n});\nconst ImageWithUrl = /* @__PURE__ */React.forwardRef(({\n url,\n ...props\n}, ref) => {\n const texture = useTexture(url);\n return /*#__PURE__*/React.createElement(ImageBase, _extends({}, props, {\n texture: texture,\n ref: ref\n }));\n});\nconst ImageWithTexture = /* @__PURE__ */React.forwardRef(({\n url: _url,\n ...props\n}, ref) => {\n return /*#__PURE__*/React.createElement(ImageBase, _extends({}, props, {\n ref: ref\n }));\n});\nconst Image = /* @__PURE__ */React.forwardRef((props, ref) => {\n if (props.url) return /*#__PURE__*/React.createElement(ImageWithUrl, _extends({}, props, {\n ref: ref\n }));else if (props.texture) return /*#__PURE__*/React.createElement(ImageWithTexture, _extends({}, props, {\n ref: ref\n }));else throw new Error('<Image /> requires a url or texture');\n});\n\nexport { Image };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { Line } from './Line.js';\n\nconst Edges = /* @__PURE__ */React.forwardRef(({\n threshold = 15,\n geometry: explicitGeometry,\n ...props\n}, fref) => {\n const ref = React.useRef(null);\n React.useImperativeHandle(fref, () => ref.current, []);\n const tmpPoints = React.useMemo(() => [0, 0, 0, 1, 0, 0], []);\n const memoizedGeometry = React.useRef(null);\n const memoizedThreshold = React.useRef(null);\n React.useLayoutEffect(() => {\n const parent = ref.current.parent;\n const geometry = explicitGeometry !== null && explicitGeometry !== void 0 ? explicitGeometry : parent == null ? void 0 : parent.geometry;\n if (!geometry) return;\n const cached = memoizedGeometry.current === geometry && memoizedThreshold.current === threshold;\n if (cached) return;\n memoizedGeometry.current = geometry;\n memoizedThreshold.current = threshold;\n const points = new THREE.EdgesGeometry(geometry, threshold).attributes.position.array;\n ref.current.geometry.setPositions(points);\n ref.current.geometry.attributes.instanceStart.needsUpdate = true;\n ref.current.geometry.attributes.instanceEnd.needsUpdate = true;\n ref.current.computeLineDistances();\n });\n return /*#__PURE__*/React.createElement(Line, _extends({\n segments: true,\n points: tmpPoints,\n ref: ref,\n raycast: () => null\n }, props));\n});\n\nexport { Edges };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { shaderMaterial } from './shaderMaterial.js';\nimport { useThree, extend, applyProps } from '@react-three/fiber';\nimport { toCreasedNormals } from 'three-stdlib';\nimport { version } from '../helpers/constants.js';\n\nconst OutlinesMaterial = /* @__PURE__ */shaderMaterial({\n screenspace: false,\n color: /* @__PURE__ */new THREE.Color('black'),\n opacity: 1,\n thickness: 0.05,\n size: /* @__PURE__ */new THREE.Vector2()\n}, `#include <common>\n #include <morphtarget_pars_vertex>\n #include <skinning_pars_vertex>\n #include <clipping_planes_pars_vertex>\n uniform float thickness;\n uniform bool screenspace;\n uniform vec2 size;\n void main() {\n #if defined (USE_SKINNING)\n\t #include <beginnormal_vertex>\n #include <morphnormal_vertex>\n #include <skinbase_vertex>\n #include <skinnormal_vertex>\n #include <defaultnormal_vertex>\n #endif\n #include <begin_vertex>\n\t #include <morphtarget_vertex>\n\t #include <skinning_vertex>\n #include <project_vertex>\n #include <clipping_planes_vertex>\n vec4 tNormal = vec4(normal, 0.0);\n vec4 tPosition = vec4(transformed, 1.0);\n #ifdef USE_INSTANCING\n tNormal = instanceMatrix * tNormal;\n tPosition = instanceMatrix * tPosition;\n #endif\n if (screenspace) {\n vec3 newPosition = tPosition.xyz + tNormal.xyz * thickness;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(newPosition, 1.0); \n } else {\n vec4 clipPosition = projectionMatrix * modelViewMatrix * tPosition;\n vec4 clipNormal = projectionMatrix * modelViewMatrix * tNormal;\n vec2 offset = normalize(clipNormal.xy) * thickness / size * clipPosition.w * 2.0;\n clipPosition.xy += offset;\n gl_Position = clipPosition;\n }\n }`, `uniform vec3 color;\n uniform float opacity;\n #include <clipping_planes_pars_fragment>\n void main(){\n #include <clipping_planes_fragment>\n gl_FragColor = vec4(color, opacity);\n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }`);\nfunction Outlines({\n color = 'black',\n opacity = 1,\n transparent = false,\n screenspace = false,\n toneMapped = true,\n polygonOffset = false,\n polygonOffsetFactor = 0,\n renderOrder = 0,\n thickness = 0.05,\n angle = Math.PI,\n clippingPlanes,\n ...props\n}) {\n const ref = React.useRef(null);\n const [material] = React.useState(() => new OutlinesMaterial({\n side: THREE.BackSide\n }));\n const {\n gl\n } = useThree();\n const contextSize = gl.getDrawingBufferSize(new THREE.Vector2());\n React.useMemo(() => extend({\n OutlinesMaterial\n }), []);\n const oldAngle = React.useRef(0);\n const oldGeometry = React.useRef(null);\n React.useLayoutEffect(() => {\n const group = ref.current;\n if (!group) return;\n const parent = group.parent;\n if (parent && parent.geometry) {\n if (oldAngle.current !== angle || oldGeometry.current !== parent.geometry) {\n var _group$children;\n oldAngle.current = angle;\n oldGeometry.current = parent.geometry;\n\n // Remove old mesh\n let mesh = (_group$children = group.children) == null ? void 0 : _group$children[0];\n if (mesh) {\n if (angle) mesh.geometry.dispose();\n group.remove(mesh);\n }\n if (parent.skeleton) {\n mesh = new THREE.SkinnedMesh();\n mesh.material = material;\n mesh.bind(parent.skeleton, parent.bindMatrix);\n group.add(mesh);\n } else if (parent.isInstancedMesh) {\n mesh = new THREE.InstancedMesh(parent.geometry, material, parent.count);\n mesh.instanceMatrix = parent.instanceMatrix;\n group.add(mesh);\n } else {\n mesh = new THREE.Mesh();\n mesh.material = material;\n group.add(mesh);\n }\n mesh.geometry = angle ? toCreasedNormals(parent.geometry, angle) : parent.geometry;\n mesh.morphTargetInfluences = parent.morphTargetInfluences;\n mesh.morphTargetDictionary = parent.morphTargetDictionary;\n }\n }\n });\n React.useLayoutEffect(() => {\n const group = ref.current;\n if (!group) return;\n const mesh = group.children[0];\n if (mesh) {\n mesh.renderOrder = renderOrder;\n const parent = group.parent;\n applyProps(mesh, {\n morphTargetInfluences: parent.morphTargetInfluences,\n morphTargetDictionary: parent.morphTargetDictionary\n });\n applyProps(mesh.material, {\n transparent,\n thickness,\n color,\n opacity,\n size: contextSize,\n screenspace,\n toneMapped,\n polygonOffset,\n polygonOffsetFactor,\n clippingPlanes,\n clipping: clippingPlanes && clippingPlanes.length > 0\n });\n }\n });\n React.useEffect(() => {\n return () => {\n // Dispose everything on unmount\n const group = ref.current;\n if (!group) return;\n const mesh = group.children[0];\n if (mesh) {\n if (angle) mesh.geometry.dispose();\n group.remove(mesh);\n }\n };\n }, []);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref\n }, props));\n}\n\nexport { Outlines };\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport * as THREE from \"three\";\nfunction memcpy(src, srcOffset, dst, dstOffset, length) {\n let i;\n src = src.subarray || src.slice ? src : src.buffer;\n dst = dst.subarray || dst.slice ? dst : dst.buffer;\n src = srcOffset ? src.subarray ? src.subarray(srcOffset, length && srcOffset + length) : src.slice(srcOffset, length && srcOffset + length) : src;\n if (dst.set) {\n dst.set(src, dstOffset);\n } else {\n for (i = 0; i < src.length; i++)\n dst[i + dstOffset] = src[i];\n }\n return dst;\n}\nfunction convertPoints(points) {\n if (points instanceof Float32Array)\n return points;\n if (points instanceof THREE.BufferGeometry)\n return points.getAttribute(\"position\").array;\n return points.map((p) => {\n const isArray = Array.isArray(p);\n return p instanceof THREE.Vector3 ? [p.x, p.y, p.z] : p instanceof THREE.Vector2 ? [p.x, p.y, 0] : isArray && p.length === 3 ? [p[0], p[1], p[2]] : isArray && p.length === 2 ? [p[0], p[1], 0] : p;\n }).flat();\n}\nclass MeshLineGeometry extends THREE.BufferGeometry {\n constructor() {\n super();\n __publicField(this, \"type\", \"MeshLine\");\n __publicField(this, \"isMeshLine\", true);\n __publicField(this, \"positions\", []);\n __publicField(this, \"previous\", []);\n __publicField(this, \"next\", []);\n __publicField(this, \"side\", []);\n __publicField(this, \"width\", []);\n __publicField(this, \"indices_array\", []);\n __publicField(this, \"uvs\", []);\n __publicField(this, \"counters\", []);\n __publicField(this, \"widthCallback\", null);\n __publicField(this, \"_attributes\");\n __publicField(this, \"_points\", []);\n __publicField(this, \"points\");\n __publicField(this, \"matrixWorld\", new THREE.Matrix4());\n Object.defineProperties(this, {\n points: {\n enumerable: true,\n get() {\n return this._points;\n },\n set(value) {\n this.setPoints(value, this.widthCallback);\n }\n }\n });\n }\n setMatrixWorld(matrixWorld) {\n this.matrixWorld = matrixWorld;\n }\n setPoints(points, wcb) {\n points = convertPoints(points);\n this._points = points;\n this.widthCallback = wcb != null ? wcb : null;\n this.positions = [];\n this.counters = [];\n if (points.length && points[0] instanceof THREE.Vector3) {\n for (let j = 0; j < points.length; j++) {\n const p = points[j];\n const c = j / (points.length - 1);\n this.positions.push(p.x, p.y, p.z);\n this.positions.push(p.x, p.y, p.z);\n this.counters.push(c);\n this.counters.push(c);\n }\n } else {\n for (let j = 0; j < points.length; j += 3) {\n const c = j / (points.length - 1);\n this.positions.push(points[j], points[j + 1], points[j + 2]);\n this.positions.push(points[j], points[j + 1], points[j + 2]);\n this.counters.push(c);\n this.counters.push(c);\n }\n }\n this.process();\n }\n compareV3(a, b) {\n const aa = a * 6;\n const ab = b * 6;\n return this.positions[aa] === this.positions[ab] && this.positions[aa + 1] === this.positions[ab + 1] && this.positions[aa + 2] === this.positions[ab + 2];\n }\n copyV3(a) {\n const aa = a * 6;\n return [this.positions[aa], this.positions[aa + 1], this.positions[aa + 2]];\n }\n process() {\n const l = this.positions.length / 6;\n this.previous = [];\n this.next = [];\n this.side = [];\n this.width = [];\n this.indices_array = [];\n this.uvs = [];\n let w;\n let v;\n if (this.compareV3(0, l - 1)) {\n v = this.copyV3(l - 2);\n } else {\n v = this.copyV3(0);\n }\n this.previous.push(v[0], v[1], v[2]);\n this.previous.push(v[0], v[1], v[2]);\n for (let j = 0; j < l; j++) {\n this.side.push(1);\n this.side.push(-1);\n if (this.widthCallback)\n w = this.widthCallback(j / (l - 1));\n else\n w = 1;\n this.width.push(w);\n this.width.push(w);\n this.uvs.push(j / (l - 1), 0);\n this.uvs.push(j / (l - 1), 1);\n if (j < l - 1) {\n v = this.copyV3(j);\n this.previous.push(v[0], v[1], v[2]);\n this.previous.push(v[0], v[1], v[2]);\n const n = j * 2;\n this.indices_array.push(n, n + 1, n + 2);\n this.indices_array.push(n + 2, n + 1, n + 3);\n }\n if (j > 0) {\n v = this.copyV3(j);\n this.next.push(v[0], v[1], v[2]);\n this.next.push(v[0], v[1], v[2]);\n }\n }\n if (this.compareV3(l - 1, 0)) {\n v = this.copyV3(1);\n } else {\n v = this.copyV3(l - 1);\n }\n this.next.push(v[0], v[1], v[2]);\n this.next.push(v[0], v[1], v[2]);\n if (!this._attributes || this._attributes.position.count !== this.counters.length) {\n this._attributes = {\n position: new THREE.BufferAttribute(new Float32Array(this.positions), 3),\n previous: new THREE.BufferAttribute(new Float32Array(this.previous), 3),\n next: new THREE.BufferAttribute(new Float32Array(this.next), 3),\n side: new THREE.BufferAttribute(new Float32Array(this.side), 1),\n width: new THREE.BufferAttribute(new Float32Array(this.width), 1),\n uv: new THREE.BufferAttribute(new Float32Array(this.uvs), 2),\n index: new THREE.BufferAttribute(new Uint16Array(this.indices_array), 1),\n counters: new THREE.BufferAttribute(new Float32Array(this.counters), 1)\n };\n } else {\n this._attributes.position.copyArray(new Float32Array(this.positions));\n this._attributes.position.needsUpdate = true;\n this._attributes.previous.copyArray(new Float32Array(this.previous));\n this._attributes.previous.needsUpdate = true;\n this._attributes.next.copyArray(new Float32Array(this.next));\n this._attributes.next.needsUpdate = true;\n this._attributes.side.copyArray(new Float32Array(this.side));\n this._attributes.side.needsUpdate = true;\n this._attributes.width.copyArray(new Float32Array(this.width));\n this._attributes.width.needsUpdate = true;\n this._attributes.uv.copyArray(new Float32Array(this.uvs));\n this._attributes.uv.needsUpdate = true;\n this._attributes.index.copyArray(new Uint16Array(this.indices_array));\n this._attributes.index.needsUpdate = true;\n }\n this.setAttribute(\"position\", this._attributes.position);\n this.setAttribute(\"previous\", this._attributes.previous);\n this.setAttribute(\"next\", this._attributes.next);\n this.setAttribute(\"side\", this._attributes.side);\n this.setAttribute(\"width\", this._attributes.width);\n this.setAttribute(\"uv\", this._attributes.uv);\n this.setAttribute(\"counters\", this._attributes.counters);\n this.setAttribute(\"position\", this._attributes.position);\n this.setAttribute(\"previous\", this._attributes.previous);\n this.setAttribute(\"next\", this._attributes.next);\n this.setAttribute(\"side\", this._attributes.side);\n this.setAttribute(\"width\", this._attributes.width);\n this.setAttribute(\"uv\", this._attributes.uv);\n this.setAttribute(\"counters\", this._attributes.counters);\n this.setIndex(this._attributes.index);\n this.computeBoundingSphere();\n this.computeBoundingBox();\n }\n advance({ x, y, z }) {\n const positions = this._attributes.position.array;\n const previous = this._attributes.previous.array;\n const next = this._attributes.next.array;\n const l = positions.length;\n memcpy(positions, 0, previous, 0, l);\n memcpy(positions, 6, positions, 0, l - 6);\n positions[l - 6] = x;\n positions[l - 5] = y;\n positions[l - 4] = z;\n positions[l - 3] = x;\n positions[l - 2] = y;\n positions[l - 1] = z;\n memcpy(positions, 6, next, 0, l - 6);\n next[l - 6] = x;\n next[l - 5] = y;\n next[l - 4] = z;\n next[l - 3] = x;\n next[l - 2] = y;\n next[l - 1] = z;\n this._attributes.position.needsUpdate = true;\n this._attributes.previous.needsUpdate = true;\n this._attributes.next.needsUpdate = true;\n }\n}\nconst vertexShader = `\n #include <common>\n #include <logdepthbuf_pars_vertex>\n #include <fog_pars_vertex>\n #include <clipping_planes_pars_vertex>\n\n attribute vec3 previous;\n attribute vec3 next;\n attribute float side;\n attribute float width;\n attribute float counters;\n \n uniform vec2 resolution;\n uniform float lineWidth;\n uniform vec3 color;\n uniform float opacity;\n uniform float sizeAttenuation;\n \n varying vec2 vUV;\n varying vec4 vColor;\n varying float vCounters;\n \n vec2 fix(vec4 i, float aspect) {\n vec2 res = i.xy / i.w;\n res.x *= aspect;\n return res;\n }\n \n void main() {\n float aspect = resolution.x / resolution.y;\n vColor = vec4(color, opacity);\n vUV = uv;\n vCounters = counters;\n \n mat4 m = projectionMatrix * modelViewMatrix;\n vec4 finalPosition = m * vec4(position, 1.0) * aspect;\n vec4 prevPos = m * vec4(previous, 1.0);\n vec4 nextPos = m * vec4(next, 1.0);\n \n vec2 currentP = fix(finalPosition, aspect);\n vec2 prevP = fix(prevPos, aspect);\n vec2 nextP = fix(nextPos, aspect);\n \n float w = lineWidth * width;\n \n vec2 dir;\n if (nextP == currentP) dir = normalize(currentP - prevP);\n else if (prevP == currentP) dir = normalize(nextP - currentP);\n else {\n vec2 dir1 = normalize(currentP - prevP);\n vec2 dir2 = normalize(nextP - currentP);\n dir = normalize(dir1 + dir2);\n \n vec2 perp = vec2(-dir1.y, dir1.x);\n vec2 miter = vec2(-dir.y, dir.x);\n //w = clamp(w / dot(miter, perp), 0., 4. * lineWidth * width);\n }\n \n //vec2 normal = (cross(vec3(dir, 0.), vec3(0., 0., 1.))).xy;\n vec4 normal = vec4(-dir.y, dir.x, 0., 1.);\n normal.xy *= .5 * w;\n //normal *= projectionMatrix;\n if (sizeAttenuation == 0.) {\n normal.xy *= finalPosition.w;\n normal.xy /= (vec4(resolution, 0., 1.) * projectionMatrix).xy * aspect;\n }\n \n finalPosition.xy += normal.xy * side;\n gl_Position = finalPosition;\n #include <logdepthbuf_vertex>\n #include <fog_vertex>\n vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);\n #include <clipping_planes_vertex>\n #include <fog_vertex>\n }\n`;\nconst version = /* @__PURE__ */ (() => parseInt(THREE.REVISION.replace(/\\D+/g, \"\")))();\nconst colorspace_fragment = version >= 154 ? \"colorspace_fragment\" : \"encodings_fragment\";\nconst fragmentShader = `\n #include <fog_pars_fragment>\n #include <logdepthbuf_pars_fragment>\n #include <clipping_planes_pars_fragment>\n \n uniform sampler2D map;\n uniform sampler2D alphaMap;\n uniform float useGradient;\n uniform float useMap;\n uniform float useAlphaMap;\n uniform float useDash;\n uniform float dashArray;\n uniform float dashOffset;\n uniform float dashRatio;\n uniform float visibility;\n uniform float alphaTest;\n uniform vec2 repeat;\n uniform vec3 gradient[2];\n \n varying vec2 vUV;\n varying vec4 vColor;\n varying float vCounters;\n \n void main() {\n #include <logdepthbuf_fragment>\n vec4 diffuseColor = vColor;\n if (useGradient == 1.) diffuseColor = vec4(mix(gradient[0], gradient[1], vCounters), 1.0);\n if (useMap == 1.) diffuseColor *= texture2D(map, vUV * repeat);\n if (useAlphaMap == 1.) diffuseColor.a *= texture2D(alphaMap, vUV * repeat).a;\n if (diffuseColor.a < alphaTest) discard;\n if (useDash == 1.) diffuseColor.a *= ceil(mod(vCounters + dashOffset, dashArray) - (dashArray * dashRatio));\n diffuseColor.a *= step(vCounters, visibility);\n #include <clipping_planes_fragment>\n gl_FragColor = diffuseColor; \n #include <fog_fragment>\n #include <tonemapping_fragment>\n #include <${colorspace_fragment}>\n }\n`;\nclass MeshLineMaterial extends THREE.ShaderMaterial {\n constructor(parameters) {\n super({\n uniforms: {\n ...THREE.UniformsLib.fog,\n lineWidth: { value: 1 },\n map: { value: null },\n useMap: { value: 0 },\n alphaMap: { value: null },\n useAlphaMap: { value: 0 },\n color: { value: new THREE.Color(16777215) },\n gradient: { value: [new THREE.Color(16711680), new THREE.Color(65280)] },\n opacity: { value: 1 },\n resolution: { value: new THREE.Vector2(1, 1) },\n sizeAttenuation: { value: 1 },\n dashArray: { value: 0 },\n dashOffset: { value: 0 },\n dashRatio: { value: 0.5 },\n useDash: { value: 0 },\n useGradient: { value: 0 },\n visibility: { value: 1 },\n alphaTest: { value: 0 },\n repeat: { value: new THREE.Vector2(1, 1) }\n },\n vertexShader,\n fragmentShader\n });\n __publicField(this, \"lineWidth\");\n __publicField(this, \"map\");\n __publicField(this, \"useMap\");\n __publicField(this, \"alphaMap\");\n __publicField(this, \"useAlphaMap\");\n __publicField(this, \"color\");\n __publicField(this, \"gradient\");\n __publicField(this, \"resolution\");\n __publicField(this, \"sizeAttenuation\");\n __publicField(this, \"dashArray\");\n __publicField(this, \"dashOffset\");\n __publicField(this, \"dashRatio\");\n __publicField(this, \"useDash\");\n __publicField(this, \"useGradient\");\n __publicField(this, \"visibility\");\n __publicField(this, \"repeat\");\n this.type = \"MeshLineMaterial\";\n Object.defineProperties(this, {\n lineWidth: {\n enumerable: true,\n get() {\n return this.uniforms.lineWidth.value;\n },\n set(value) {\n this.uniforms.lineWidth.value = value;\n }\n },\n map: {\n enumerable: true,\n get() {\n return this.uniforms.map.value;\n },\n set(value) {\n this.uniforms.map.value = value;\n }\n },\n useMap: {\n enumerable: true,\n get() {\n return this.uniforms.useMap.value;\n },\n set(value) {\n this.uniforms.useMap.value = value;\n }\n },\n alphaMap: {\n enumerable: true,\n get() {\n return this.uniforms.alphaMap.value;\n },\n set(value) {\n this.uniforms.alphaMap.value = value;\n }\n },\n useAlphaMap: {\n enumerable: true,\n get() {\n return this.uniforms.useAlphaMap.value;\n },\n set(value) {\n this.uniforms.useAlphaMap.value = value;\n }\n },\n color: {\n enumerable: true,\n get() {\n return this.uniforms.color.value;\n },\n set(value) {\n this.uniforms.color.value = value;\n }\n },\n gradient: {\n enumerable: true,\n get() {\n return this.uniforms.gradient.value;\n },\n set(value) {\n this.uniforms.gradient.value = value;\n }\n },\n opacity: {\n enumerable: true,\n get() {\n return this.uniforms.opacity.value;\n },\n set(value) {\n this.uniforms.opacity.value = value;\n }\n },\n resolution: {\n enumerable: true,\n get() {\n return this.uniforms.resolution.value;\n },\n set(value) {\n this.uniforms.resolution.value.copy(value);\n }\n },\n sizeAttenuation: {\n enumerable: true,\n get() {\n return this.uniforms.sizeAttenuation.value;\n },\n set(value) {\n this.uniforms.sizeAttenuation.value = value;\n }\n },\n dashArray: {\n enumerable: true,\n get() {\n return this.uniforms.dashArray.value;\n },\n set(value) {\n this.uniforms.dashArray.value = value;\n this.useDash = value !== 0 ? 1 : 0;\n }\n },\n dashOffset: {\n enumerable: true,\n get() {\n return this.uniforms.dashOffset.value;\n },\n set(value) {\n this.uniforms.dashOffset.value = value;\n }\n },\n dashRatio: {\n enumerable: true,\n get() {\n return this.uniforms.dashRatio.value;\n },\n set(value) {\n this.uniforms.dashRatio.value = value;\n }\n },\n useDash: {\n enumerable: true,\n get() {\n return this.uniforms.useDash.value;\n },\n set(value) {\n this.uniforms.useDash.value = value;\n }\n },\n useGradient: {\n enumerable: true,\n get() {\n return this.uniforms.useGradient.value;\n },\n set(value) {\n this.uniforms.useGradient.value = value;\n }\n },\n visibility: {\n enumerable: true,\n get() {\n return this.uniforms.visibility.value;\n },\n set(value) {\n this.uniforms.visibility.value = value;\n }\n },\n alphaTest: {\n enumerable: true,\n get() {\n return this.uniforms.alphaTest.value;\n },\n set(value) {\n this.uniforms.alphaTest.value = value;\n }\n },\n repeat: {\n enumerable: true,\n get() {\n return this.uniforms.repeat.value;\n },\n set(value) {\n this.uniforms.repeat.value.copy(value);\n }\n }\n });\n this.setValues(parameters);\n }\n copy(source) {\n super.copy(source);\n this.lineWidth = source.lineWidth;\n this.map = source.map;\n this.useMap = source.useMap;\n this.alphaMap = source.alphaMap;\n this.useAlphaMap = source.useAlphaMap;\n this.color.copy(source.color);\n this.gradient = source.gradient;\n this.opacity = source.opacity;\n this.resolution.copy(source.resolution);\n this.sizeAttenuation = source.sizeAttenuation;\n this.dashArray = source.dashArray;\n this.dashOffset = source.dashOffset;\n this.dashRatio = source.dashRatio;\n this.useDash = source.useDash;\n this.useGradient = source.useGradient;\n this.visibility = source.visibility;\n this.alphaTest = source.alphaTest;\n this.repeat.copy(source.repeat);\n return this;\n }\n}\nfunction raycast(raycaster, intersects) {\n const inverseMatrix = new THREE.Matrix4();\n const ray = new THREE.Ray();\n const sphere = new THREE.Sphere();\n const interRay = new THREE.Vector3();\n const geometry = this.geometry;\n sphere.copy(geometry.boundingSphere);\n sphere.applyMatrix4(this.matrixWorld);\n if (!raycaster.ray.intersectSphere(sphere, interRay))\n return;\n inverseMatrix.copy(this.matrixWorld).invert();\n ray.copy(raycaster.ray).applyMatrix4(inverseMatrix);\n const vStart = new THREE.Vector3();\n const vEnd = new THREE.Vector3();\n const interSegment = new THREE.Vector3();\n const step = this instanceof THREE.LineSegments ? 2 : 1;\n const index = geometry.index;\n const attributes = geometry.attributes;\n if (index !== null) {\n const indices = index.array;\n const positions = attributes.position.array;\n const widths = attributes.width.array;\n for (let i = 0, l = indices.length - 1; i < l; i += step) {\n const a = indices[i];\n const b = indices[i + 1];\n vStart.fromArray(positions, a * 3);\n vEnd.fromArray(positions, b * 3);\n const width = widths[Math.floor(i / 3)] != void 0 ? widths[Math.floor(i / 3)] : 1;\n const precision = raycaster.params.Line.threshold + this.material.lineWidth * width / 2;\n const precisionSq = precision * precision;\n const distSq = ray.distanceSqToSegment(vStart, vEnd, interRay, interSegment);\n if (distSq > precisionSq)\n continue;\n interRay.applyMatrix4(this.matrixWorld);\n const distance = raycaster.ray.origin.distanceTo(interRay);\n if (distance < raycaster.near || distance > raycaster.far)\n continue;\n intersects.push({\n distance,\n point: interSegment.clone().applyMatrix4(this.matrixWorld),\n index: i,\n face: null,\n faceIndex: void 0,\n object: this\n });\n i = l;\n }\n }\n}\nexport {\n MeshLineGeometry,\n MeshLineMaterial,\n raycast\n};\n","import { useFrame, useThree, createPortal } from '@react-three/fiber';\nimport * as React from 'react';\nimport { Vector3, Object3D, Vector2 } from 'three';\nimport { MeshLineGeometry, MeshLineMaterial } from 'meshline';\n\nconst defaults = {\n width: 0.2,\n length: 1,\n decay: 1,\n local: false,\n stride: 0,\n interval: 1\n};\nconst shiftLeft = (collection, steps = 1) => {\n collection.set(collection.subarray(steps));\n collection.fill(-Infinity, -steps);\n return collection;\n};\nfunction useTrail(target, settings) {\n const {\n length,\n local,\n decay,\n interval,\n stride\n } = {\n ...defaults,\n ...settings\n };\n const points = React.useRef(null);\n const [worldPosition] = React.useState(() => new Vector3());\n React.useLayoutEffect(() => {\n if (target) {\n points.current = Float32Array.from({\n length: length * 10 * 3\n }, (_, i) => target.position.getComponent(i % 3));\n }\n }, [length, target]);\n const prevPosition = React.useRef(new Vector3());\n const frameCount = React.useRef(0);\n useFrame(() => {\n if (!target) return;\n if (!points.current) return;\n if (frameCount.current === 0) {\n let newPosition;\n if (local) {\n newPosition = target.position;\n } else {\n target.getWorldPosition(worldPosition);\n newPosition = worldPosition;\n }\n const steps = 1 * decay;\n for (let i = 0; i < steps; i++) {\n if (newPosition.distanceTo(prevPosition.current) < stride) continue;\n shiftLeft(points.current, 3);\n points.current.set(newPosition.toArray(), points.current.length - 3);\n }\n prevPosition.current.copy(newPosition);\n }\n frameCount.current++;\n frameCount.current = frameCount.current % interval;\n });\n return points;\n}\nconst Trail = /* @__PURE__ */React.forwardRef((props, forwardRef) => {\n const {\n children\n } = props;\n const {\n width,\n length,\n decay,\n local,\n stride,\n interval\n } = {\n ...defaults,\n ...props\n };\n const {\n color = 'hotpink',\n attenuation,\n target\n } = props;\n const size = useThree(s => s.size);\n const scene = useThree(s => s.scene);\n const ref = React.useRef(null);\n const [anchor, setAnchor] = React.useState(null);\n const points = useTrail(anchor, {\n length,\n decay,\n local,\n stride,\n interval\n });\n React.useEffect(() => {\n const t = (target == null ? void 0 : target.current) || ref.current.children.find(o => {\n return o instanceof Object3D;\n });\n if (t) {\n setAnchor(t);\n }\n }, [points, target]);\n const geo = React.useMemo(() => new MeshLineGeometry(), []);\n const mat = React.useMemo(() => {\n var _matOverride, _matOverride2;\n const m = new MeshLineMaterial({\n lineWidth: 0.1 * width,\n color: color,\n sizeAttenuation: 1,\n resolution: new Vector2(size.width, size.height)\n });\n\n // Get and apply first <meshLineMaterial /> from children\n let matOverride;\n if (children) {\n if (Array.isArray(children)) {\n matOverride = children.find(child => {\n const c = child;\n return typeof c.type === 'string' && c.type === 'meshLineMaterial';\n });\n } else {\n const c = children;\n if (typeof c.type === 'string' && c.type === 'meshLineMaterial') {\n matOverride = c;\n }\n }\n }\n if (typeof ((_matOverride = matOverride) == null ? void 0 : _matOverride.props) === 'object' && ((_matOverride2 = matOverride) == null ? void 0 : _matOverride2.props) !== null) {\n m.setValues(matOverride.props);\n }\n return m;\n }, [width, color, size, children]);\n React.useEffect(() => {\n mat.uniforms.resolution.value.set(size.width, size.height);\n }, [size]);\n useFrame(() => {\n if (!points.current) return;\n geo.setPoints(points.current, attenuation);\n });\n return /*#__PURE__*/React.createElement(\"group\", null, createPortal(/*#__PURE__*/React.createElement(\"mesh\", {\n ref: forwardRef,\n geometry: geo,\n material: mat\n }), scene), /*#__PURE__*/React.createElement(\"group\", {\n ref: ref\n }, children));\n});\n\nexport { Trail, useTrail };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { MeshSurfaceSampler } from 'three-stdlib';\nimport { InstancedBufferAttribute, Vector3, Color, Object3D } from 'three';\n\nfunction useSurfaceSampler(mesh, count = 16, transform, weight, instanceMesh) {\n const [buffer, setBuffer] = React.useState(() => {\n const arr = Array.from({\n length: count\n }, () => [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]).flat();\n return new InstancedBufferAttribute(Float32Array.from(arr), 16);\n });\n React.useLayoutEffect(() => {\n if (typeof mesh.current === 'undefined') return;\n const sampler = new MeshSurfaceSampler(mesh.current);\n if (weight) {\n sampler.setWeightAttribute(weight);\n }\n sampler.build();\n const position = new Vector3();\n const normal = new Vector3();\n const color = new Color();\n const dummy = new Object3D();\n mesh.current.updateMatrixWorld(true);\n for (let i = 0; i < count; i++) {\n sampler.sample(position, normal, color);\n if (typeof transform === 'function') {\n transform({\n dummy,\n sampledMesh: mesh.current,\n position,\n normal,\n color\n }, i);\n } else {\n dummy.position.copy(position);\n }\n dummy.updateMatrix();\n if (instanceMesh != null && instanceMesh.current) {\n instanceMesh.current.setMatrixAt(i, dummy.matrix);\n }\n dummy.matrix.toArray(buffer.array, i * 16);\n }\n if (instanceMesh != null && instanceMesh.current) {\n instanceMesh.current.instanceMatrix.needsUpdate = true;\n }\n buffer.needsUpdate = true;\n setBuffer(new InstancedBufferAttribute(buffer.array, buffer.itemSize).copy(buffer));\n }, [mesh, instanceMesh, weight, count, transform]);\n return buffer;\n}\nfunction Sampler({\n children,\n weight,\n transform,\n instances,\n mesh,\n count = 16,\n ...props\n}) {\n const group = React.useRef(null);\n const instancedRef = React.useRef(null);\n const meshToSampleRef = React.useRef(null);\n React.useLayoutEffect(() => {\n var _instances$current, _mesh$current;\n instancedRef.current = (_instances$current = instances == null ? void 0 : instances.current) !== null && _instances$current !== void 0 ? _instances$current : group.current.children.find(c => c.hasOwnProperty('instanceMatrix'));\n meshToSampleRef.current = (_mesh$current = mesh == null ? void 0 : mesh.current) !== null && _mesh$current !== void 0 ? _mesh$current : group.current.children.find(c => c.type === 'Mesh');\n }, [children, mesh == null ? void 0 : mesh.current, instances == null ? void 0 : instances.current]);\n useSurfaceSampler(meshToSampleRef, count, transform, weight, instancedRef);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: group\n }, props), children);\n}\n\nexport { Sampler, useSurfaceSampler };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { BufferAttribute } from 'three';\n\n/**\n * Used exclusively as a child of a BufferGeometry.\n * Computes the BufferAttribute by calling the `compute` function\n * and attaches the attribute to the geometry.\n */\nconst ComputedAttribute = ({\n compute,\n name,\n ...props\n}) => {\n const [bufferAttribute] = React.useState(() => new BufferAttribute(new Float32Array(0), 1));\n const primitive = React.useRef(null);\n React.useLayoutEffect(() => {\n if (primitive.current) {\n var _ref;\n // @ts-expect-error brittle\n const parent = (_ref = primitive.current.parent) !== null && _ref !== void 0 ? _ref : primitive.current.__r3f.parent.object;\n const attr = compute(parent);\n primitive.current.copy(attr);\n }\n }, [compute]);\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n ref: primitive,\n object: bufferAttribute,\n attach: `attributes-${name}`\n }, props));\n};\n\nexport { ComputedAttribute };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { SkeletonUtils } from 'three-stdlib';\n\nfunction createSpread(child, {\n keys = ['near', 'far', 'color', 'distance', 'decay', 'penumbra', 'angle', 'intensity', 'skeleton', 'visible', 'castShadow', 'receiveShadow', 'morphTargetDictionary', 'morphTargetInfluences', 'name', 'geometry', 'material', 'position', 'rotation', 'scale', 'up', 'userData', 'bindMode', 'bindMatrix', 'bindMatrixInverse', 'skeleton'],\n deep,\n inject,\n castShadow,\n receiveShadow\n}) {\n let spread = {};\n for (const key of keys) {\n spread[key] = child[key];\n }\n if (deep) {\n if (spread.geometry && deep !== 'materialsOnly') spread.geometry = spread.geometry.clone();\n if (spread.material && deep !== 'geometriesOnly') spread.material = spread.material.clone();\n }\n if (inject) {\n if (typeof inject === 'function') spread = {\n ...spread,\n children: inject(child)\n };else if (/*#__PURE__*/React.isValidElement(inject)) spread = {\n ...spread,\n children: inject\n };else spread = {\n ...spread,\n ...inject\n };\n }\n if (child instanceof THREE.Mesh) {\n if (castShadow) spread.castShadow = true;\n if (receiveShadow) spread.receiveShadow = true;\n }\n return spread;\n}\nconst Clone = /* @__PURE__ */React.forwardRef(({\n isChild = false,\n object,\n children,\n deep,\n castShadow,\n receiveShadow,\n inject,\n keys,\n ...props\n}, forwardRef) => {\n const config = {\n keys,\n deep,\n inject,\n castShadow,\n receiveShadow\n };\n object = React.useMemo(() => {\n if (isChild === false && !Array.isArray(object)) {\n let isSkinned = false;\n object.traverse(object => {\n if (object.isSkinnedMesh) isSkinned = true;\n });\n if (isSkinned) return SkeletonUtils.clone(object);\n }\n return object;\n }, [object, isChild]);\n\n // Deal with arrayed clones\n if (Array.isArray(object)) {\n return /*#__PURE__*/React.createElement(\"group\", _extends({}, props, {\n ref: forwardRef\n }), object.map(o => /*#__PURE__*/React.createElement(Clone, _extends({\n key: o.uuid,\n object: o\n }, config))), children);\n }\n\n // Singleton clones\n const {\n children: injectChildren,\n ...spread\n } = createSpread(object, config);\n const Element = object.type[0].toLowerCase() + object.type.slice(1);\n return /*#__PURE__*/React.createElement(Element, _extends({}, spread, props, {\n ref: forwardRef\n }), object.children.map(child => {\n if (child.type === 'Bone') return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n key: child.uuid,\n object: child\n }, config));\n return /*#__PURE__*/React.createElement(Clone, _extends({\n key: child.uuid,\n object: child\n }, config, {\n isChild: true\n }));\n }), children, injectChildren);\n});\n\nexport { Clone };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { MarchingCubes as MarchingCubes$1 } from 'three-stdlib';\nimport { useFrame } from '@react-three/fiber';\n\nconst globalContext = /* @__PURE__ */React.createContext(null);\nconst MarchingCubes = /* @__PURE__ */React.forwardRef(({\n resolution = 28,\n maxPolyCount = 10000,\n enableUvs = false,\n enableColors = false,\n children,\n ...props\n}, ref) => {\n const marchingCubesRef = React.useRef(null);\n React.useImperativeHandle(ref, () => marchingCubesRef.current, []);\n const marchingCubes = React.useMemo(() => new MarchingCubes$1(resolution, null, enableUvs, enableColors, maxPolyCount), [resolution, maxPolyCount, enableUvs, enableColors]);\n const api = React.useMemo(() => ({\n getParent: () => marchingCubesRef\n }), []);\n useFrame(() => {\n marchingCubes.update();\n marchingCubes.reset();\n }, -1); // To make sure the reset runs before the balls or planes are added\n\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"primitive\", _extends({\n object: marchingCubes,\n ref: marchingCubesRef\n }, props), /*#__PURE__*/React.createElement(globalContext.Provider, {\n value: api\n }, children)));\n});\nconst MarchingCube = /* @__PURE__ */React.forwardRef(({\n strength = 0.5,\n subtract = 12,\n color,\n ...props\n}, ref) => {\n const {\n getParent\n } = React.useContext(globalContext);\n const parentRef = React.useMemo(() => getParent(), [getParent]);\n const cubeRef = React.useRef(null);\n React.useImperativeHandle(ref, () => cubeRef.current, []);\n const vec = new THREE.Vector3();\n useFrame(state => {\n if (!parentRef.current || !cubeRef.current) return;\n cubeRef.current.getWorldPosition(vec);\n parentRef.current.addBall(0.5 + vec.x * 0.5, 0.5 + vec.y * 0.5, 0.5 + vec.z * 0.5, strength, subtract, color);\n });\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: cubeRef\n }, props));\n});\nconst MarchingPlane = /* @__PURE__ */React.forwardRef(({\n planeType: _planeType = 'x',\n strength = 0.5,\n subtract = 12,\n ...props\n}, ref) => {\n const {\n getParent\n } = React.useContext(globalContext);\n const parentRef = React.useMemo(() => getParent(), [getParent]);\n const wallRef = React.useRef(null);\n React.useImperativeHandle(ref, () => wallRef.current, []);\n const planeType = React.useMemo(() => _planeType === 'x' ? 'addPlaneX' : _planeType === 'y' ? 'addPlaneY' : 'addPlaneZ', [_planeType]);\n useFrame(() => {\n if (!parentRef.current || !wallRef.current) return;\n parentRef.current[planeType](strength, subtract);\n });\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: wallRef\n }, props));\n});\n\nexport { MarchingCube, MarchingCubes, MarchingPlane };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { applyProps } from '@react-three/fiber';\nimport { DecalGeometry } from 'three-stdlib';\n\nfunction isArray(vec) {\n return Array.isArray(vec);\n}\nfunction vecToArray(vec = [0, 0, 0]) {\n if (isArray(vec)) {\n return vec;\n } else if (vec instanceof THREE.Vector3 || vec instanceof THREE.Euler) {\n return [vec.x, vec.y, vec.z];\n } else {\n return [vec, vec, vec];\n }\n}\nconst Decal = /* @__PURE__ */React.forwardRef(function Decal({\n debug,\n depthTest = false,\n polygonOffsetFactor = -10,\n map,\n mesh,\n children,\n position,\n rotation,\n scale,\n ...props\n}, forwardRef) {\n const ref = React.useRef(null);\n React.useImperativeHandle(forwardRef, () => ref.current);\n const helper = React.useRef(null);\n const state = React.useRef({\n position: new THREE.Vector3(),\n rotation: new THREE.Euler(),\n scale: new THREE.Vector3(1, 1, 1)\n });\n React.useLayoutEffect(() => {\n const parent = (mesh == null ? void 0 : mesh.current) || ref.current.parent;\n const target = ref.current;\n if (!(parent instanceof THREE.Mesh)) {\n throw new Error('Decal must have a Mesh as parent or specify its \"mesh\" prop');\n }\n if (parent) {\n applyProps(state.current, {\n position,\n scale\n });\n\n // Zero out the parents matrix world for this operation\n const matrixWorld = parent.matrixWorld.clone();\n parent.matrixWorld.identity();\n if (!rotation || typeof rotation === 'number') {\n const o = new THREE.Object3D();\n o.position.copy(state.current.position);\n\n // Thanks https://x.com/N8Programs !\n const vertices = parent.geometry.attributes.position.array;\n if (parent.geometry.attributes.normal === undefined) parent.geometry.computeVertexNormals();\n const normal = parent.geometry.attributes.normal.array;\n let distance = Infinity;\n let closestNormal = new THREE.Vector3();\n const ox = o.position.x;\n const oy = o.position.y;\n const oz = o.position.z;\n const vLength = vertices.length;\n let chosenIdx = -1;\n for (let i = 0; i < vLength; i += 3) {\n const x = vertices[i];\n const y = vertices[i + 1];\n const z = vertices[i + 2];\n const xDiff = x - ox;\n const yDiff = y - oy;\n const zDiff = z - oz;\n const distSquared = xDiff * xDiff + yDiff * yDiff + zDiff * zDiff;\n if (distSquared < distance) {\n distance = distSquared;\n chosenIdx = i;\n }\n }\n closestNormal.fromArray(normal, chosenIdx);\n\n // Get vector tangent to normal\n o.lookAt(o.position.clone().add(closestNormal));\n o.rotateZ(Math.PI);\n o.rotateY(Math.PI);\n if (typeof rotation === 'number') o.rotateZ(rotation);\n applyProps(state.current, {\n rotation: o.rotation\n });\n } else {\n applyProps(state.current, {\n rotation\n });\n }\n if (helper.current) {\n applyProps(helper.current, state.current);\n }\n target.geometry = new DecalGeometry(parent, state.current.position, state.current.rotation, state.current.scale);\n // Reset parents matix-world\n parent.matrixWorld = matrixWorld;\n return () => {\n target.geometry.dispose();\n };\n }\n }, [mesh, ...vecToArray(position), ...vecToArray(scale), ...vecToArray(rotation)]);\n React.useLayoutEffect(() => {\n if (helper.current) {\n // Prevent the helpers from blocking rays\n helper.current.traverse(child => child.raycast = () => null);\n }\n }, [debug]);\n return /*#__PURE__*/React.createElement(\"mesh\", _extends({\n ref: ref,\n \"material-transparent\": true,\n \"material-polygonOffset\": true,\n \"material-polygonOffsetFactor\": polygonOffsetFactor,\n \"material-depthTest\": depthTest,\n \"material-map\": map\n }, props), children, debug && /*#__PURE__*/React.createElement(\"mesh\", {\n ref: helper\n }, /*#__PURE__*/React.createElement(\"boxGeometry\", null), /*#__PURE__*/React.createElement(\"meshNormalMaterial\", {\n wireframe: true\n }), /*#__PURE__*/React.createElement(\"axesHelper\", null)));\n});\n\nexport { Decal };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useLoader } from '@react-three/fiber';\nimport * as React from 'react';\nimport { forwardRef, useMemo, useEffect, Fragment } from 'react';\nimport { DoubleSide } from 'three';\nimport { SVGLoader } from 'three-stdlib';\n\nconst Svg = /* @__PURE__ */forwardRef(function R3FSvg({\n src,\n skipFill,\n skipStrokes,\n fillMaterial,\n strokeMaterial,\n fillMeshProps,\n strokeMeshProps,\n ...props\n}, ref) {\n const svg = useLoader(SVGLoader, !src.startsWith('<svg') ? src : `data:image/svg+xml;utf8,${src}`);\n const strokeGeometries = useMemo(() => skipStrokes ? [] : svg.paths.map(path => {\n var _path$userData;\n return ((_path$userData = path.userData) == null ? void 0 : _path$userData.style.stroke) === undefined || path.userData.style.stroke === 'none' ? null : path.subPaths.map(subPath => SVGLoader.pointsToStroke(subPath.getPoints(), path.userData.style));\n }), [svg, skipStrokes]);\n useEffect(() => {\n return () => strokeGeometries.forEach(group => group && group.map(g => g.dispose()));\n }, [strokeGeometries]);\n let renderOrder = 0;\n return /*#__PURE__*/React.createElement(\"object3D\", _extends({\n ref: ref\n }, props), /*#__PURE__*/React.createElement(\"object3D\", {\n scale: [1, -1, 1]\n }, svg.paths.map((path, p) => {\n var _path$userData2, _path$userData3;\n return /*#__PURE__*/React.createElement(Fragment, {\n key: p\n }, !skipFill && ((_path$userData2 = path.userData) == null ? void 0 : _path$userData2.style.fill) !== undefined && path.userData.style.fill !== 'none' && SVGLoader.createShapes(path).map((shape, s) => /*#__PURE__*/React.createElement(\"mesh\", _extends({\n key: s\n }, fillMeshProps, {\n renderOrder: renderOrder++\n }), /*#__PURE__*/React.createElement(\"shapeGeometry\", {\n args: [shape]\n }), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", _extends({\n color: path.userData.style.fill,\n opacity: path.userData.style.fillOpacity,\n transparent: true,\n side: DoubleSide,\n depthWrite: false\n }, fillMaterial)))), !skipStrokes && ((_path$userData3 = path.userData) == null ? void 0 : _path$userData3.style.stroke) !== undefined && path.userData.style.stroke !== 'none' && path.subPaths.map((_subPath, s) => /*#__PURE__*/React.createElement(\"mesh\", _extends({\n key: s,\n geometry: strokeGeometries[p][s]\n }, strokeMeshProps, {\n renderOrder: renderOrder++\n }), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", _extends({\n color: path.userData.style.stroke,\n opacity: path.userData.style.strokeOpacity,\n transparent: true,\n side: DoubleSide,\n depthWrite: false\n }, strokeMaterial)))));\n })));\n});\n\nexport { Svg };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { GLTFLoader, DRACOLoader, MeshoptDecoder } from 'three-stdlib';\nimport { useLoader } from '@react-three/fiber';\nimport { Clone } from './Clone.js';\n\nlet dracoLoader = null;\nlet decoderPath = 'https://www.gstatic.com/draco/versioned/decoders/1.5.5/';\nfunction extensions(useDraco = true, useMeshopt = true, extendLoader) {\n return loader => {\n if (extendLoader) {\n extendLoader(loader);\n }\n if (useDraco) {\n if (!dracoLoader) {\n dracoLoader = new DRACOLoader();\n }\n dracoLoader.setDecoderPath(typeof useDraco === 'string' ? useDraco : decoderPath);\n loader.setDRACOLoader(dracoLoader);\n }\n if (useMeshopt) {\n loader.setMeshoptDecoder(typeof MeshoptDecoder === 'function' ? MeshoptDecoder() : MeshoptDecoder);\n }\n };\n}\nconst useGLTF = (path, useDraco, useMeshopt, extendLoader) => useLoader(GLTFLoader, path, extensions(useDraco, useMeshopt, extendLoader));\nuseGLTF.preload = (path, useDraco, useMeshopt, extendLoader) => useLoader.preload(GLTFLoader, path, extensions(useDraco, useMeshopt, extendLoader));\nuseGLTF.clear = path => useLoader.clear(GLTFLoader, path);\nuseGLTF.setDecoderPath = path => {\n decoderPath = path;\n};\n\n//\n\nconst Gltf = /* @__PURE__ */React.forwardRef(({\n src,\n useDraco,\n useMeshOpt,\n extendLoader,\n ...props\n}, ref) => {\n const {\n scene\n } = useGLTF(src, useDraco, useMeshOpt, extendLoader);\n return /*#__PURE__*/React.createElement(Clone, _extends({\n ref: ref\n }, props, {\n object: scene\n }));\n});\n\nexport { Gltf, useGLTF };\n","import * as React from 'react';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { AsciiEffect } from 'three-stdlib';\n\nfunction AsciiRenderer({\n renderIndex = 1,\n bgColor = 'black',\n fgColor = 'white',\n characters = ' .:-+*=%@#',\n invert = true,\n color = false,\n resolution = 0.15\n}) {\n // Reactive state\n const {\n size,\n gl,\n scene,\n camera\n } = useThree();\n\n // Create effect\n const effect = React.useMemo(() => {\n const effect = new AsciiEffect(gl, characters, {\n invert,\n color,\n resolution\n });\n effect.domElement.style.position = 'absolute';\n effect.domElement.style.top = '0px';\n effect.domElement.style.left = '0px';\n effect.domElement.style.pointerEvents = 'none';\n return effect;\n }, [characters, invert, color, resolution]);\n\n // Styling\n React.useLayoutEffect(() => {\n effect.domElement.style.color = fgColor;\n effect.domElement.style.backgroundColor = bgColor;\n }, [fgColor, bgColor]);\n\n // Append on mount, remove on unmount\n React.useEffect(() => {\n gl.domElement.style.opacity = '0';\n gl.domElement.parentNode.appendChild(effect.domElement);\n return () => {\n gl.domElement.style.opacity = '1';\n gl.domElement.parentNode.removeChild(effect.domElement);\n };\n }, [effect]);\n\n // Set size\n React.useEffect(() => {\n effect.setSize(size.width, size.height);\n }, [effect, size]);\n\n // Take over render-loop (that is what the index is for)\n useFrame(state => {\n effect.render(scene, camera);\n }, renderIndex);\n\n // return something to not break type signatures\n return /*#__PURE__*/React.createElement(React.Fragment, null);\n}\n\nexport { AsciiRenderer };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { extend, useThree, useLoader, useFrame } from '@react-three/fiber';\nimport { shaderMaterial } from './shaderMaterial.js';\nimport { version } from '../helpers/constants.js';\n\nconst SplatMaterial = /* @__PURE__ */shaderMaterial({\n alphaTest: 0,\n viewport: /* @__PURE__ */new THREE.Vector2(1980, 1080),\n focal: 1000.0,\n centerAndScaleTexture: null,\n covAndColorTexture: null\n}, /*glsl*/`\n precision highp sampler2D;\n precision highp usampler2D;\n out vec4 vColor;\n out vec3 vPosition;\n uniform vec2 resolution;\n uniform vec2 viewport;\n uniform float focal;\n attribute uint splatIndex;\n uniform sampler2D centerAndScaleTexture;\n uniform usampler2D covAndColorTexture; \n\n vec2 unpackInt16(in uint value) {\n int v = int(value);\n int v0 = v >> 16;\n int v1 = (v & 0xFFFF);\n if((v & 0x8000) != 0)\n v1 |= 0xFFFF0000;\n return vec2(float(v1), float(v0));\n }\n\n void main () {\n ivec2 texSize = textureSize(centerAndScaleTexture, 0);\n ivec2 texPos = ivec2(splatIndex%uint(texSize.x), splatIndex/uint(texSize.x));\n vec4 centerAndScaleData = texelFetch(centerAndScaleTexture, texPos, 0);\n vec4 center = vec4(centerAndScaleData.xyz, 1);\n vec4 camspace = modelViewMatrix * center;\n vec4 pos2d = projectionMatrix * camspace;\n\n float bounds = 1.2 * pos2d.w;\n if (pos2d.z < -pos2d.w || pos2d.x < -bounds || pos2d.x > bounds\n || pos2d.y < -bounds || pos2d.y > bounds) {\n gl_Position = vec4(0.0, 0.0, 2.0, 1.0);\n return;\n }\n\n uvec4 covAndColorData = texelFetch(covAndColorTexture, texPos, 0);\n vec2 cov3D_M11_M12 = unpackInt16(covAndColorData.x) * centerAndScaleData.w;\n vec2 cov3D_M13_M22 = unpackInt16(covAndColorData.y) * centerAndScaleData.w;\n vec2 cov3D_M23_M33 = unpackInt16(covAndColorData.z) * centerAndScaleData.w;\n mat3 Vrk = mat3(\n cov3D_M11_M12.x, cov3D_M11_M12.y, cov3D_M13_M22.x,\n cov3D_M11_M12.y, cov3D_M13_M22.y, cov3D_M23_M33.x,\n cov3D_M13_M22.x, cov3D_M23_M33.x, cov3D_M23_M33.y\n );\n\n mat3 J = mat3(\n focal / camspace.z, 0., -(focal * camspace.x) / (camspace.z * camspace.z),\n 0., focal / camspace.z, -(focal * camspace.y) / (camspace.z * camspace.z),\n 0., 0., 0.\n );\n\n mat3 W = transpose(mat3(modelViewMatrix));\n mat3 T = W * J;\n mat3 cov = transpose(T) * Vrk * T;\n vec2 vCenter = vec2(pos2d) / pos2d.w;\n float diagonal1 = cov[0][0] + 0.3;\n float offDiagonal = cov[0][1];\n float diagonal2 = cov[1][1] + 0.3;\n float mid = 0.5 * (diagonal1 + diagonal2);\n float radius = length(vec2((diagonal1 - diagonal2) / 2.0, offDiagonal));\n float lambda1 = mid + radius;\n float lambda2 = max(mid - radius, 0.1);\n vec2 diagonalVector = normalize(vec2(offDiagonal, lambda1 - diagonal1));\n vec2 v1 = min(sqrt(2.0 * lambda1), 1024.0) * diagonalVector;\n vec2 v2 = min(sqrt(2.0 * lambda2), 1024.0) * vec2(diagonalVector.y, -diagonalVector.x);\n uint colorUint = covAndColorData.w;\n vColor = vec4(\n float(colorUint & uint(0xFF)) / 255.0,\n float((colorUint >> uint(8)) & uint(0xFF)) / 255.0,\n float((colorUint >> uint(16)) & uint(0xFF)) / 255.0,\n float(colorUint >> uint(24)) / 255.0\n );\n vPosition = position;\n\n gl_Position = vec4(\n vCenter \n + position.x * v2 / viewport * 2.0 \n + position.y * v1 / viewport * 2.0, pos2d.z / pos2d.w, 1.0);\n }\n `, /*glsl*/`\n #include <alphatest_pars_fragment>\n #include <alphahash_pars_fragment>\n in vec4 vColor;\n in vec3 vPosition;\n void main () {\n float A = -dot(vPosition.xy, vPosition.xy);\n if (A < -4.0) discard;\n float B = exp(A) * vColor.a;\n vec4 diffuseColor = vec4(vColor.rgb, B);\n #include <alphatest_fragment>\n #include <alphahash_fragment>\n gl_FragColor = diffuseColor;\n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }\n `);\nfunction createWorker(self) {\n let matrices = null;\n let offset = 0;\n function sortSplats(view, hashed = false) {\n const vertexCount = matrices.length / 16;\n const threshold = -0.0001;\n let maxDepth = -Infinity;\n let minDepth = Infinity;\n const depthList = new Float32Array(vertexCount);\n const sizeList = new Int32Array(depthList.buffer);\n const validIndexList = new Int32Array(vertexCount);\n let validCount = 0;\n for (let i = 0; i < vertexCount; i++) {\n // Sign of depth is reversed\n const depth = view[0] * matrices[i * 16 + 12] + view[1] * matrices[i * 16 + 13] + view[2] * matrices[i * 16 + 14] + view[3];\n // Skip behind of camera and small, transparent splat\n if (hashed || depth < 0 && matrices[i * 16 + 15] > threshold * depth) {\n depthList[validCount] = depth;\n validIndexList[validCount] = i;\n validCount++;\n if (depth > maxDepth) maxDepth = depth;\n if (depth < minDepth) minDepth = depth;\n }\n }\n\n // This is a 16 bit single-pass counting sort\n const depthInv = (256 * 256 - 1) / (maxDepth - minDepth);\n const counts0 = new Uint32Array(256 * 256);\n for (let i = 0; i < validCount; i++) {\n sizeList[i] = (depthList[i] - minDepth) * depthInv | 0;\n counts0[sizeList[i]]++;\n }\n const starts0 = new Uint32Array(256 * 256);\n for (let i = 1; i < 256 * 256; i++) starts0[i] = starts0[i - 1] + counts0[i - 1];\n const depthIndex = new Uint32Array(validCount);\n for (let i = 0; i < validCount; i++) depthIndex[starts0[sizeList[i]]++] = validIndexList[i];\n return depthIndex;\n }\n self.onmessage = e => {\n if (e.data.method == 'push') {\n if (offset === 0) matrices = new Float32Array(e.data.length);\n const new_matrices = new Float32Array(e.data.matrices);\n matrices.set(new_matrices, offset);\n offset += new_matrices.length;\n } else if (e.data.method == 'sort') {\n if (matrices !== null) {\n const indices = sortSplats(new Float32Array(e.data.view), e.data.hashed);\n // @ts-ignore\n self.postMessage({\n indices,\n key: e.data.key\n }, [indices.buffer]);\n }\n }\n };\n}\nclass SplatLoader extends THREE.Loader {\n constructor(...args) {\n super(...args);\n // WebGLRenderer, needs to be filled out!\n this.gl = null;\n // Default chunk size for lazy loading\n this.chunkSize = 25000;\n }\n load(url, onLoad, onProgress, onError) {\n const shared = {\n gl: this.gl,\n url: this.manager.resolveURL(url),\n worker: new Worker(URL.createObjectURL(new Blob(['(', createWorker.toString(), ')(self)'], {\n type: 'application/javascript'\n }))),\n manager: this.manager,\n update: (target, camera, hashed) => update(camera, shared, target, hashed),\n connect: target => connect(shared, target),\n loading: false,\n loaded: false,\n loadedVertexCount: 0,\n chunkSize: this.chunkSize,\n totalDownloadBytes: 0,\n numVertices: 0,\n rowLength: 3 * 4 + 3 * 4 + 4 + 4,\n maxVertexes: 0,\n bufferTextureWidth: 0,\n bufferTextureHeight: 0,\n stream: null,\n centerAndScaleData: null,\n covAndColorData: null,\n covAndColorTexture: null,\n centerAndScaleTexture: null,\n onProgress\n };\n load(shared).then(onLoad).catch(e => {\n onError == null || onError(e);\n shared.manager.itemError(shared.url);\n });\n }\n}\nasync function load(shared) {\n shared.manager.itemStart(shared.url);\n const data = await fetch(shared.url);\n if (data.body === null) throw 'Failed to fetch file';\n let _totalDownloadBytes = data.headers.get('Content-Length');\n const totalDownloadBytes = _totalDownloadBytes ? parseInt(_totalDownloadBytes) : undefined;\n if (totalDownloadBytes == undefined) throw 'Failed to get content length';\n shared.stream = data.body.getReader();\n shared.totalDownloadBytes = totalDownloadBytes;\n shared.numVertices = Math.floor(shared.totalDownloadBytes / shared.rowLength);\n const context = shared.gl.getContext();\n let maxTextureSize = context.getParameter(context.MAX_TEXTURE_SIZE);\n shared.maxVertexes = maxTextureSize * maxTextureSize;\n if (shared.numVertices > shared.maxVertexes) shared.numVertices = shared.maxVertexes;\n shared.bufferTextureWidth = maxTextureSize;\n shared.bufferTextureHeight = Math.floor((shared.numVertices - 1) / maxTextureSize) + 1;\n shared.centerAndScaleData = new Float32Array(shared.bufferTextureWidth * shared.bufferTextureHeight * 4);\n shared.covAndColorData = new Uint32Array(shared.bufferTextureWidth * shared.bufferTextureHeight * 4);\n shared.centerAndScaleTexture = new THREE.DataTexture(shared.centerAndScaleData, shared.bufferTextureWidth, shared.bufferTextureHeight, THREE.RGBAFormat, THREE.FloatType);\n shared.centerAndScaleTexture.needsUpdate = true;\n shared.covAndColorTexture = new THREE.DataTexture(shared.covAndColorData, shared.bufferTextureWidth, shared.bufferTextureHeight, THREE.RGBAIntegerFormat, THREE.UnsignedIntType);\n shared.covAndColorTexture.internalFormat = 'RGBA32UI';\n shared.covAndColorTexture.needsUpdate = true;\n return shared;\n}\nasync function lazyLoad(shared) {\n shared.loading = true;\n let bytesDownloaded = 0;\n let bytesProcessed = 0;\n const chunks = [];\n let lastReportedProgress = 0;\n const lengthComputable = shared.totalDownloadBytes !== 0;\n while (true) {\n try {\n const {\n value,\n done\n } = await shared.stream.read();\n if (done) break;\n bytesDownloaded += value.length;\n if (shared.totalDownloadBytes != undefined) {\n const percent = bytesDownloaded / shared.totalDownloadBytes * 100;\n if (shared.onProgress && percent - lastReportedProgress > 1) {\n const event = new ProgressEvent('progress', {\n lengthComputable,\n loaded: bytesDownloaded,\n total: shared.totalDownloadBytes\n });\n shared.onProgress(event);\n lastReportedProgress = percent;\n }\n }\n chunks.push(value);\n const bytesRemains = bytesDownloaded - bytesProcessed;\n if (shared.totalDownloadBytes != undefined && bytesRemains > shared.rowLength * shared.chunkSize) {\n let vertexCount = Math.floor(bytesRemains / shared.rowLength);\n const concatenatedChunksbuffer = new Uint8Array(bytesRemains);\n let offset = 0;\n for (const chunk of chunks) {\n concatenatedChunksbuffer.set(chunk, offset);\n offset += chunk.length;\n }\n chunks.length = 0;\n if (bytesRemains > vertexCount * shared.rowLength) {\n const extra_data = new Uint8Array(bytesRemains - vertexCount * shared.rowLength);\n extra_data.set(concatenatedChunksbuffer.subarray(bytesRemains - extra_data.length, bytesRemains), 0);\n chunks.push(extra_data);\n }\n const buffer = new Uint8Array(vertexCount * shared.rowLength);\n buffer.set(concatenatedChunksbuffer.subarray(0, buffer.byteLength), 0);\n const matrices = pushDataBuffer(shared, buffer.buffer, vertexCount);\n shared.worker.postMessage({\n method: 'push',\n src: shared.url,\n length: shared.numVertices * 16,\n matrices: matrices.buffer\n }, [matrices.buffer]);\n bytesProcessed += vertexCount * shared.rowLength;\n if (shared.onProgress) {\n const event = new ProgressEvent('progress', {\n lengthComputable,\n loaded: shared.totalDownloadBytes,\n total: shared.totalDownloadBytes\n });\n shared.onProgress(event);\n }\n }\n } catch (error) {\n console.error(error);\n break;\n }\n }\n if (bytesDownloaded - bytesProcessed > 0) {\n // Concatenate the chunks into a single Uint8Array\n let concatenatedChunks = new Uint8Array(chunks.reduce((acc, chunk) => acc + chunk.length, 0));\n let offset = 0;\n for (const chunk of chunks) {\n concatenatedChunks.set(chunk, offset);\n offset += chunk.length;\n }\n let numVertices = Math.floor(concatenatedChunks.byteLength / shared.rowLength);\n const matrices = pushDataBuffer(shared, concatenatedChunks.buffer, numVertices);\n shared.worker.postMessage({\n method: 'push',\n src: shared.url,\n length: numVertices * 16,\n matrices: matrices.buffer\n }, [matrices.buffer]);\n }\n shared.loaded = true;\n shared.manager.itemEnd(shared.url);\n}\nfunction update(camera, shared, target, hashed) {\n camera.updateMatrixWorld();\n shared.gl.getCurrentViewport(target.viewport);\n // @ts-ignore\n target.material.viewport.x = target.viewport.z;\n // @ts-ignore\n target.material.viewport.y = target.viewport.w;\n target.material.focal = target.viewport.w / 2.0 * Math.abs(camera.projectionMatrix.elements[5]);\n if (target.ready) {\n if (hashed && target.sorted) return;\n target.ready = false;\n const view = new Float32Array([target.modelViewMatrix.elements[2], -target.modelViewMatrix.elements[6], target.modelViewMatrix.elements[10], target.modelViewMatrix.elements[14]]);\n shared.worker.postMessage({\n method: 'sort',\n src: shared.url,\n key: target.uuid,\n view: view.buffer,\n hashed\n }, [view.buffer]);\n if (hashed && shared.loaded) target.sorted = true;\n }\n}\nfunction connect(shared, target) {\n if (!shared.loading) lazyLoad(shared);\n target.ready = false;\n target.pm = new THREE.Matrix4();\n target.vm1 = new THREE.Matrix4();\n target.vm2 = new THREE.Matrix4();\n target.viewport = new THREE.Vector4();\n let splatIndexArray = new Uint32Array(shared.bufferTextureWidth * shared.bufferTextureHeight);\n const splatIndexes = new THREE.InstancedBufferAttribute(splatIndexArray, 1, false);\n splatIndexes.setUsage(THREE.DynamicDrawUsage);\n const geometry = target.geometry = new THREE.InstancedBufferGeometry();\n const positionsArray = new Float32Array(6 * 3);\n const positions = new THREE.BufferAttribute(positionsArray, 3);\n geometry.setAttribute('position', positions);\n positions.setXYZ(2, -2.0, 2.0, 0.0);\n positions.setXYZ(1, 2.0, 2.0, 0.0);\n positions.setXYZ(0, -2.0, -2.0, 0.0);\n positions.setXYZ(5, -2.0, -2.0, 0.0);\n positions.setXYZ(4, 2.0, 2.0, 0.0);\n positions.setXYZ(3, 2.0, -2.0, 0.0);\n positions.needsUpdate = true;\n geometry.setAttribute('splatIndex', splatIndexes);\n geometry.instanceCount = 1;\n function listener(e) {\n if (target && e.data.key === target.uuid) {\n let indexes = new Uint32Array(e.data.indices);\n // @ts-ignore\n geometry.attributes.splatIndex.set(indexes);\n geometry.attributes.splatIndex.needsUpdate = true;\n geometry.instanceCount = indexes.length;\n target.ready = true;\n }\n }\n shared.worker.addEventListener('message', listener);\n async function wait() {\n while (true) {\n const centerAndScaleTextureProperties = shared.gl.properties.get(shared.centerAndScaleTexture);\n const covAndColorTextureProperties = shared.gl.properties.get(shared.covAndColorTexture);\n if (centerAndScaleTextureProperties != null && centerAndScaleTextureProperties.__webglTexture && covAndColorTextureProperties != null && covAndColorTextureProperties.__webglTexture && shared.loadedVertexCount > 0) break;\n await new Promise(resolve => setTimeout(resolve, 10));\n }\n target.ready = true;\n }\n wait();\n return () => shared.worker.removeEventListener('message', listener);\n}\nfunction pushDataBuffer(shared, buffer, vertexCount) {\n const context = shared.gl.getContext();\n if (shared.loadedVertexCount + vertexCount > shared.maxVertexes) vertexCount = shared.maxVertexes - shared.loadedVertexCount;\n if (vertexCount <= 0) throw 'Failed to parse file';\n const u_buffer = new Uint8Array(buffer);\n const f_buffer = new Float32Array(buffer);\n const matrices = new Float32Array(vertexCount * 16);\n const covAndColorData_uint8 = new Uint8Array(shared.covAndColorData.buffer);\n const covAndColorData_int16 = new Int16Array(shared.covAndColorData.buffer);\n for (let i = 0; i < vertexCount; i++) {\n const quat = new THREE.Quaternion(-(u_buffer[32 * i + 28 + 1] - 128) / 128.0, (u_buffer[32 * i + 28 + 2] - 128) / 128.0, (u_buffer[32 * i + 28 + 3] - 128) / 128.0, -(u_buffer[32 * i + 28 + 0] - 128) / 128.0);\n quat.invert();\n const center = new THREE.Vector3(f_buffer[8 * i + 0], f_buffer[8 * i + 1], -f_buffer[8 * i + 2]);\n const scale = new THREE.Vector3(f_buffer[8 * i + 3 + 0], f_buffer[8 * i + 3 + 1], f_buffer[8 * i + 3 + 2]);\n const mtx = new THREE.Matrix4();\n mtx.makeRotationFromQuaternion(quat);\n mtx.transpose();\n mtx.scale(scale);\n const mtx_t = mtx.clone();\n mtx.transpose();\n mtx.premultiply(mtx_t);\n mtx.setPosition(center);\n const cov_indexes = [0, 1, 2, 5, 6, 10];\n let max_value = 0.0;\n for (let j = 0; j < cov_indexes.length; j++) if (Math.abs(mtx.elements[cov_indexes[j]]) > max_value) max_value = Math.abs(mtx.elements[cov_indexes[j]]);\n let destOffset = shared.loadedVertexCount * 4 + i * 4;\n shared.centerAndScaleData[destOffset + 0] = center.x;\n shared.centerAndScaleData[destOffset + 1] = -center.y;\n shared.centerAndScaleData[destOffset + 2] = center.z;\n shared.centerAndScaleData[destOffset + 3] = max_value / 32767.0;\n destOffset = shared.loadedVertexCount * 8 + i * 4 * 2;\n for (let j = 0; j < cov_indexes.length; j++) covAndColorData_int16[destOffset + j] = mtx.elements[cov_indexes[j]] * 32767.0 / max_value;\n\n // RGBA\n destOffset = shared.loadedVertexCount * 16 + (i * 4 + 3) * 4;\n const col = new THREE.Color(u_buffer[32 * i + 24 + 0] / 255, u_buffer[32 * i + 24 + 1] / 255, u_buffer[32 * i + 24 + 2] / 255);\n col.convertSRGBToLinear();\n covAndColorData_uint8[destOffset + 0] = col.r * 255;\n covAndColorData_uint8[destOffset + 1] = col.g * 255;\n covAndColorData_uint8[destOffset + 2] = col.b * 255;\n covAndColorData_uint8[destOffset + 3] = u_buffer[32 * i + 24 + 3];\n\n // Store scale and transparent to remove splat in sorting process\n mtx.elements[15] = Math.max(scale.x, scale.y, scale.z) * u_buffer[32 * i + 24 + 3] / 255.0;\n for (let j = 0; j < 16; j++) matrices[i * 16 + j] = mtx.elements[j];\n }\n while (vertexCount > 0) {\n let width = 0;\n let height = 0;\n const xoffset = shared.loadedVertexCount % shared.bufferTextureWidth;\n const yoffset = Math.floor(shared.loadedVertexCount / shared.bufferTextureWidth);\n if (shared.loadedVertexCount % shared.bufferTextureWidth != 0) {\n width = Math.min(shared.bufferTextureWidth, xoffset + vertexCount) - xoffset;\n height = 1;\n } else if (Math.floor(vertexCount / shared.bufferTextureWidth) > 0) {\n width = shared.bufferTextureWidth;\n height = Math.floor(vertexCount / shared.bufferTextureWidth);\n } else {\n width = vertexCount % shared.bufferTextureWidth;\n height = 1;\n }\n const centerAndScaleTextureProperties = shared.gl.properties.get(shared.centerAndScaleTexture);\n context.bindTexture(context.TEXTURE_2D, centerAndScaleTextureProperties.__webglTexture);\n context.texSubImage2D(context.TEXTURE_2D, 0, xoffset, yoffset, width, height, context.RGBA, context.FLOAT, shared.centerAndScaleData, shared.loadedVertexCount * 4);\n const covAndColorTextureProperties = shared.gl.properties.get(shared.covAndColorTexture);\n context.bindTexture(context.TEXTURE_2D, covAndColorTextureProperties.__webglTexture);\n context.texSubImage2D(context.TEXTURE_2D, 0, xoffset, yoffset, width, height,\n // @ts-ignore\n context.RGBA_INTEGER, context.UNSIGNED_INT, shared.covAndColorData, shared.loadedVertexCount * 4);\n shared.gl.resetState();\n shared.loadedVertexCount += width * height;\n vertexCount -= width * height;\n }\n return matrices;\n}\nfunction Splat({\n src,\n toneMapped = false,\n alphaTest = 0,\n alphaHash = false,\n chunkSize = 25000,\n ...props\n}) {\n extend({\n SplatMaterial\n });\n const ref = React.useRef(null);\n const gl = useThree(state => state.gl);\n const camera = useThree(state => state.camera);\n\n // Shared state, globally memoized, the same url re-uses the same daza\n const shared = useLoader(SplatLoader, src, loader => {\n loader.gl = gl;\n loader.chunkSize = chunkSize;\n });\n\n // Listen to worker results, apply them to the target mesh\n React.useLayoutEffect(() => shared.connect(ref.current), [src]);\n // Update the worker\n useFrame(() => shared.update(ref.current, camera, alphaHash));\n return /*#__PURE__*/React.createElement(\"mesh\", _extends({\n ref: ref,\n frustumCulled: false\n }, props), /*#__PURE__*/React.createElement(\"splatMaterial\", {\n key: `${src}/${alphaTest}/${alphaHash}${SplatMaterial.key}`,\n transparent: !alphaHash,\n depthTest: true,\n alphaTest: alphaHash ? 0 : alphaTest,\n centerAndScaleTexture: shared.centerAndScaleTexture,\n covAndColorTexture: shared.covAndColorTexture,\n depthWrite: alphaHash ? true : alphaTest > 0,\n blending: alphaHash ? THREE.NormalBlending : THREE.CustomBlending,\n blendSrcAlpha: THREE.OneFactor,\n alphaHash: !!alphaHash,\n toneMapped: toneMapped\n }));\n}\n\nexport { Splat };\n","import * as React from 'react';\nimport { forwardRef, useImperativeHandle } from 'react';\nimport * as THREE from 'three';\nimport { useThree } from '@react-three/fiber';\n\n// 👇 uncomment when TS version supports function overloads\n// export function useFBO(settings?: FBOSettings)\nfunction useFBO(/** Width in pixels, or settings (will render fullscreen by default) */\nwidth, /** Height in pixels */\nheight, /**Settings */\nsettings) {\n const size = useThree(state => state.size);\n const viewport = useThree(state => state.viewport);\n const _width = typeof width === 'number' ? width : size.width * viewport.dpr;\n const _height = typeof height === 'number' ? height : size.height * viewport.dpr;\n const _settings = (typeof width === 'number' ? settings : width) || {};\n const {\n samples = 0,\n depth,\n ...targetSettings\n } = _settings;\n const depthBuffer = depth !== null && depth !== void 0 ? depth : _settings.depthBuffer; // backwards compatibility for deprecated `depth` prop\n\n const target = React.useMemo(() => {\n const target = new THREE.WebGLRenderTarget(_width, _height, {\n minFilter: THREE.LinearFilter,\n magFilter: THREE.LinearFilter,\n type: THREE.HalfFloatType,\n ...targetSettings\n });\n if (depthBuffer) {\n target.depthTexture = new THREE.DepthTexture(_width, _height, THREE.FloatType);\n }\n target.samples = samples;\n return target;\n }, []);\n React.useLayoutEffect(() => {\n target.setSize(_width, _height);\n if (samples) target.samples = samples;\n }, [samples, target, _width, _height]);\n React.useEffect(() => {\n return () => target.dispose();\n }, []);\n return target;\n}\n\n//\n// Fbo component\n//\n\nconst Fbo = /* @__PURE__ */forwardRef(({\n children,\n width,\n height,\n ...settings\n}, fref) => {\n const target = useFBO(width, height, settings);\n useImperativeHandle(fref, () => target, [target]); // expose target through ref\n\n return /*#__PURE__*/React.createElement(React.Fragment, null, children == null ? void 0 : children(target));\n});\n\nexport { Fbo, useFBO };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { useFBO } from './Fbo.js';\n\nconst isFunction = node => typeof node === 'function';\nconst OrthographicCamera = /* @__PURE__ */React.forwardRef(({\n envMap,\n resolution = 256,\n frames = Infinity,\n children,\n makeDefault,\n ...props\n}, ref) => {\n const set = useThree(({\n set\n }) => set);\n const camera = useThree(({\n camera\n }) => camera);\n const size = useThree(({\n size\n }) => size);\n const cameraRef = React.useRef(null);\n React.useImperativeHandle(ref, () => cameraRef.current, []);\n const groupRef = React.useRef(null);\n const fbo = useFBO(resolution);\n React.useLayoutEffect(() => {\n if (!props.manual) {\n cameraRef.current.updateProjectionMatrix();\n }\n }, [size, props]);\n React.useLayoutEffect(() => {\n cameraRef.current.updateProjectionMatrix();\n });\n React.useLayoutEffect(() => {\n if (makeDefault) {\n const oldCam = camera;\n set(() => ({\n camera: cameraRef.current\n }));\n return () => set(() => ({\n camera: oldCam\n }));\n }\n // The camera should not be part of the dependency list because this components camera is a stable reference\n // that must exchange the default, and clean up after itself on unmount.\n }, [cameraRef, makeDefault, set]);\n let count = 0;\n let oldEnvMap = null;\n const functional = isFunction(children);\n useFrame(state => {\n if (functional && (frames === Infinity || count < frames)) {\n groupRef.current.visible = false;\n state.gl.setRenderTarget(fbo);\n oldEnvMap = state.scene.background;\n if (envMap) state.scene.background = envMap;\n state.gl.render(state.scene, cameraRef.current);\n state.scene.background = oldEnvMap;\n state.gl.setRenderTarget(null);\n groupRef.current.visible = true;\n count++;\n }\n });\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"orthographicCamera\", _extends({\n left: size.width / -2,\n right: size.width / 2,\n top: size.height / 2,\n bottom: size.height / -2,\n ref: cameraRef\n }, props), !functional && children), /*#__PURE__*/React.createElement(\"group\", {\n ref: groupRef\n }, functional && children(fbo.texture)));\n});\n\nexport { OrthographicCamera };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { useFBO } from './Fbo.js';\n\nconst isFunction = node => typeof node === 'function';\nconst PerspectiveCamera = /* @__PURE__ */React.forwardRef(({\n envMap,\n resolution = 256,\n frames = Infinity,\n makeDefault,\n children,\n ...props\n}, ref) => {\n const set = useThree(({\n set\n }) => set);\n const camera = useThree(({\n camera\n }) => camera);\n const size = useThree(({\n size\n }) => size);\n const cameraRef = React.useRef(null);\n React.useImperativeHandle(ref, () => cameraRef.current, []);\n const groupRef = React.useRef(null);\n const fbo = useFBO(resolution);\n React.useLayoutEffect(() => {\n if (!props.manual) {\n cameraRef.current.aspect = size.width / size.height;\n }\n }, [size, props]);\n React.useLayoutEffect(() => {\n cameraRef.current.updateProjectionMatrix();\n });\n let count = 0;\n let oldEnvMap = null;\n const functional = isFunction(children);\n useFrame(state => {\n if (functional && (frames === Infinity || count < frames)) {\n groupRef.current.visible = false;\n state.gl.setRenderTarget(fbo);\n oldEnvMap = state.scene.background;\n if (envMap) state.scene.background = envMap;\n state.gl.render(state.scene, cameraRef.current);\n state.scene.background = oldEnvMap;\n state.gl.setRenderTarget(null);\n groupRef.current.visible = true;\n count++;\n }\n });\n React.useLayoutEffect(() => {\n if (makeDefault) {\n const oldCam = camera;\n set(() => ({\n camera: cameraRef.current\n }));\n return () => set(() => ({\n camera: oldCam\n }));\n }\n // The camera should not be part of the dependency list because this components camera is a stable reference\n // that must exchange the default, and clean up after itself on unmount.\n }, [cameraRef, makeDefault, set]);\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"perspectiveCamera\", _extends({\n ref: cameraRef\n }, props), !functional && children), /*#__PURE__*/React.createElement(\"group\", {\n ref: groupRef\n }, functional && children(fbo.texture)));\n});\n\nexport { PerspectiveCamera };\n","import * as THREE from 'three';\nimport { WebGLCubeRenderTarget, HalfFloatType } from 'three';\nimport * as React from 'react';\nimport { useMemo, useEffect } from 'react';\nimport { useThree, useFrame } from '@react-three/fiber';\n\nfunction useCubeCamera({\n resolution = 256,\n near = 0.1,\n far = 1000,\n envMap,\n fog\n} = {}) {\n const gl = useThree(({\n gl\n }) => gl);\n const scene = useThree(({\n scene\n }) => scene);\n const fbo = useMemo(() => {\n const fbo = new WebGLCubeRenderTarget(resolution);\n fbo.texture.type = HalfFloatType;\n return fbo;\n }, [resolution]);\n useEffect(() => {\n return () => {\n fbo.dispose();\n };\n }, [fbo]);\n const camera = useMemo(() => new THREE.CubeCamera(near, far, fbo), [near, far, fbo]);\n let originalFog;\n let originalBackground;\n const update = React.useCallback(() => {\n originalFog = scene.fog;\n originalBackground = scene.background;\n scene.background = envMap || originalBackground;\n scene.fog = fog || originalFog;\n camera.update(gl, scene);\n scene.fog = originalFog;\n scene.background = originalBackground;\n }, [gl, scene, camera]);\n return {\n fbo,\n camera,\n update\n };\n}\nfunction CubeCamera({\n children,\n frames = Infinity,\n resolution,\n near,\n far,\n envMap,\n fog,\n ...props\n}) {\n const ref = React.useRef(null);\n const {\n fbo,\n camera,\n update\n } = useCubeCamera({\n resolution,\n near,\n far,\n envMap,\n fog\n });\n let count = 0;\n useFrame(() => {\n if (ref.current && (frames === Infinity || count < frames)) {\n ref.current.visible = false;\n update();\n ref.current.visible = true;\n count++;\n }\n });\n return /*#__PURE__*/React.createElement(\"group\", props, /*#__PURE__*/React.createElement(\"primitive\", {\n object: camera\n }), /*#__PURE__*/React.createElement(\"group\", {\n ref: ref\n }, children == null ? void 0 : children(fbo.texture)));\n}\n\nexport { CubeCamera, useCubeCamera };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport * as React from 'react';\nimport { DeviceOrientationControls as DeviceOrientationControls$1 } from 'three-stdlib';\n\nconst DeviceOrientationControls = /* @__PURE__ */React.forwardRef((props, ref) => {\n const {\n camera,\n onChange,\n makeDefault,\n ...rest\n } = props;\n const defaultCamera = useThree(state => state.camera);\n const invalidate = useThree(state => state.invalidate);\n const get = useThree(state => state.get);\n const set = useThree(state => state.set);\n const explCamera = camera || defaultCamera;\n const controls = React.useMemo(() => new DeviceOrientationControls$1(explCamera), [explCamera]);\n React.useEffect(() => {\n const callback = e => {\n invalidate();\n if (onChange) onChange(e);\n };\n controls == null || controls.addEventListener == null || controls.addEventListener('change', callback);\n return () => controls == null || controls.removeEventListener == null ? void 0 : controls.removeEventListener('change', callback);\n }, [onChange, controls, invalidate]);\n useFrame(() => controls == null ? void 0 : controls.update(), -1);\n React.useEffect(() => {\n const current = controls;\n current == null || current.connect();\n return () => current == null ? void 0 : current.dispose();\n }, [controls]);\n React.useEffect(() => {\n if (makeDefault) {\n const old = get().controls;\n // @ts-ignore https://github.com/three-types/three-ts-types/pull/1398\n set({\n controls\n });\n return () => set({\n controls: old\n });\n }\n }, [makeDefault, controls]);\n return controls ? /*#__PURE__*/React.createElement(\"primitive\", _extends({\n ref: ref,\n object: controls\n }, rest)) : null;\n});\n\nexport { DeviceOrientationControls };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport * as React from 'react';\nimport { FlyControls as FlyControls$1 } from 'three-stdlib';\n\nconst FlyControls = /* @__PURE__ */React.forwardRef(({\n domElement,\n ...props\n}, fref) => {\n const {\n onChange,\n makeDefault,\n ...rest\n } = props;\n const invalidate = useThree(state => state.invalidate);\n const camera = useThree(state => state.camera);\n const gl = useThree(state => state.gl);\n const events = useThree(state => state.events);\n const get = useThree(state => state.get);\n const set = useThree(state => state.set);\n const explDomElement = domElement || events.connected || gl.domElement;\n const controls = React.useMemo(() => new FlyControls$1(camera), [camera]);\n React.useEffect(() => {\n controls.connect(explDomElement);\n return () => void controls.dispose();\n }, [explDomElement, controls, invalidate]);\n React.useEffect(() => {\n const callback = e => {\n invalidate();\n if (onChange) onChange(e);\n };\n controls.addEventListener == null || controls.addEventListener('change', callback);\n return () => controls.removeEventListener == null ? void 0 : controls.removeEventListener('change', callback);\n }, [onChange, invalidate]);\n React.useEffect(() => {\n if (makeDefault) {\n const old = get().controls;\n // @ts-ignore https://github.com/three-types/three-ts-types/pull/1398\n set({\n controls\n });\n return () => set({\n controls: old\n });\n }\n }, [makeDefault, controls]);\n useFrame((_, delta) => controls.update(delta));\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n ref: fref,\n object: controls,\n args: [camera, explDomElement]\n }, rest));\n});\n\nexport { FlyControls };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport * as React from 'react';\nimport { MapControls as MapControls$1 } from 'three-stdlib';\n\nconst MapControls = /* @__PURE__ */React.forwardRef((props = {\n enableDamping: true\n}, ref) => {\n const {\n domElement,\n camera,\n makeDefault,\n onChange,\n onStart,\n onEnd,\n ...rest\n } = props;\n const invalidate = useThree(state => state.invalidate);\n const defaultCamera = useThree(state => state.camera);\n const gl = useThree(state => state.gl);\n const events = useThree(state => state.events);\n const set = useThree(state => state.set);\n const get = useThree(state => state.get);\n const explDomElement = domElement || events.connected || gl.domElement;\n const explCamera = camera || defaultCamera;\n const controls = React.useMemo(() => new MapControls$1(explCamera), [explCamera]);\n React.useEffect(() => {\n controls.connect(explDomElement);\n const callback = e => {\n invalidate();\n if (onChange) onChange(e);\n };\n controls.addEventListener('change', callback);\n if (onStart) controls.addEventListener('start', onStart);\n if (onEnd) controls.addEventListener('end', onEnd);\n return () => {\n controls.dispose();\n controls.removeEventListener('change', callback);\n if (onStart) controls.removeEventListener('start', onStart);\n if (onEnd) controls.removeEventListener('end', onEnd);\n };\n }, [onChange, onStart, onEnd, controls, invalidate, explDomElement]);\n React.useEffect(() => {\n if (makeDefault) {\n const old = get().controls;\n // @ts-ignore https://github.com/three-types/three-ts-types/pull/1398\n set({\n controls\n });\n return () => set({\n controls: old\n });\n }\n }, [makeDefault, controls]);\n useFrame(() => controls.update(), -1);\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n ref: ref,\n object: controls,\n enableDamping: true\n }, rest));\n});\n\nexport { MapControls };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport * as React from 'react';\nimport { OrbitControls as OrbitControls$1 } from 'three-stdlib';\n\nconst OrbitControls = /* @__PURE__ */React.forwardRef(({\n makeDefault,\n camera,\n regress,\n domElement,\n enableDamping = true,\n keyEvents = false,\n onChange,\n onStart,\n onEnd,\n ...restProps\n}, ref) => {\n const invalidate = useThree(state => state.invalidate);\n const defaultCamera = useThree(state => state.camera);\n const gl = useThree(state => state.gl);\n const events = useThree(state => state.events);\n const setEvents = useThree(state => state.setEvents);\n const set = useThree(state => state.set);\n const get = useThree(state => state.get);\n const performance = useThree(state => state.performance);\n const explCamera = camera || defaultCamera;\n const explDomElement = domElement || events.connected || gl.domElement;\n const controls = React.useMemo(() => new OrbitControls$1(explCamera), [explCamera]);\n useFrame(() => {\n if (controls.enabled) controls.update();\n }, -1);\n React.useEffect(() => {\n if (keyEvents) {\n controls.connect(keyEvents === true ? explDomElement : keyEvents);\n }\n controls.connect(explDomElement);\n return () => void controls.dispose();\n }, [keyEvents, explDomElement, regress, controls, invalidate]);\n React.useEffect(() => {\n const callback = e => {\n invalidate();\n if (regress) performance.regress();\n if (onChange) onChange(e);\n };\n const onStartCb = e => {\n if (onStart) onStart(e);\n };\n const onEndCb = e => {\n if (onEnd) onEnd(e);\n };\n controls.addEventListener('change', callback);\n controls.addEventListener('start', onStartCb);\n controls.addEventListener('end', onEndCb);\n return () => {\n controls.removeEventListener('start', onStartCb);\n controls.removeEventListener('end', onEndCb);\n controls.removeEventListener('change', callback);\n };\n }, [onChange, onStart, onEnd, controls, invalidate, setEvents]);\n React.useEffect(() => {\n if (makeDefault) {\n const old = get().controls;\n // @ts-ignore https://github.com/three-types/three-ts-types/pull/1398\n set({\n controls\n });\n return () => set({\n controls: old\n });\n }\n }, [makeDefault, controls]);\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n ref: ref,\n object: controls,\n enableDamping: enableDamping\n }, restProps));\n});\n\nexport { OrbitControls };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport * as React from 'react';\nimport { TrackballControls as TrackballControls$1 } from 'three-stdlib';\n\nconst TrackballControls = /* @__PURE__ */React.forwardRef(({\n makeDefault,\n camera,\n domElement,\n regress,\n onChange,\n onStart,\n onEnd,\n ...restProps\n}, ref) => {\n const {\n invalidate,\n camera: defaultCamera,\n gl,\n events,\n set,\n get,\n performance,\n viewport\n } = useThree();\n const explCamera = camera || defaultCamera;\n const explDomElement = domElement || events.connected || gl.domElement;\n const controls = React.useMemo(() => new TrackballControls$1(explCamera), [explCamera]);\n useFrame(() => {\n if (controls.enabled) controls.update();\n }, -1);\n React.useEffect(() => {\n controls.connect(explDomElement);\n return () => void controls.dispose();\n }, [explDomElement, regress, controls, invalidate]);\n React.useEffect(() => {\n const callback = e => {\n invalidate();\n if (regress) performance.regress();\n if (onChange) onChange(e);\n };\n controls.addEventListener('change', callback);\n if (onStart) controls.addEventListener('start', onStart);\n if (onEnd) controls.addEventListener('end', onEnd);\n return () => {\n if (onStart) controls.removeEventListener('start', onStart);\n if (onEnd) controls.removeEventListener('end', onEnd);\n controls.removeEventListener('change', callback);\n };\n }, [onChange, onStart, onEnd, controls, invalidate]);\n React.useEffect(() => {\n controls.handleResize();\n }, [viewport]);\n React.useEffect(() => {\n if (makeDefault) {\n const old = get().controls;\n // @ts-ignore https://github.com/three-types/three-ts-types/pull/1398\n set({\n controls\n });\n return () => set({\n controls: old\n });\n }\n }, [makeDefault, controls]);\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n ref: ref,\n object: controls\n }, restProps));\n});\n\nexport { TrackballControls };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport * as React from 'react';\nimport { forwardRef, useMemo, useEffect } from 'react';\nimport { ArcballControls as ArcballControls$1 } from 'three-stdlib';\n\nconst ArcballControls = /* @__PURE__ */forwardRef(({\n camera,\n makeDefault,\n regress,\n domElement,\n onChange,\n onStart,\n onEnd,\n ...restProps\n}, ref) => {\n const invalidate = useThree(state => state.invalidate);\n const defaultCamera = useThree(state => state.camera);\n const gl = useThree(state => state.gl);\n const events = useThree(state => state.events);\n const set = useThree(state => state.set);\n const get = useThree(state => state.get);\n const performance = useThree(state => state.performance);\n const explCamera = camera || defaultCamera;\n const explDomElement = domElement || events.connected || gl.domElement;\n const controls = useMemo(() => new ArcballControls$1(explCamera), [explCamera]);\n useFrame(() => {\n if (controls.enabled) controls.update();\n }, -1);\n useEffect(() => {\n controls.connect(explDomElement);\n return () => void controls.dispose();\n }, [explDomElement, regress, controls, invalidate]);\n useEffect(() => {\n const callback = e => {\n invalidate();\n if (regress) performance.regress();\n if (onChange) onChange(e);\n };\n controls.addEventListener('change', callback);\n if (onStart) controls.addEventListener('start', onStart);\n if (onEnd) controls.addEventListener('end', onEnd);\n return () => {\n controls.removeEventListener('change', callback);\n if (onStart) controls.removeEventListener('start', onStart);\n if (onEnd) controls.removeEventListener('end', onEnd);\n };\n }, [onChange, onStart, onEnd]);\n useEffect(() => {\n if (makeDefault) {\n const old = get().controls;\n // @ts-ignore https://github.com/three-types/three-ts-types/pull/1398\n set({\n controls\n });\n return () => set({\n controls: old\n });\n }\n }, [makeDefault, controls]);\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n ref: ref,\n object: controls\n }, restProps));\n});\n\nexport { ArcballControls };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useThree } from '@react-three/fiber';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { TransformControls as TransformControls$1 } from 'three-stdlib';\n\nconst TransformControls = /* @__PURE__ */React.forwardRef(({\n children,\n domElement,\n onChange,\n onMouseDown,\n onMouseUp,\n onObjectChange,\n object,\n makeDefault,\n camera,\n // Transform\n enabled,\n axis,\n mode,\n translationSnap,\n rotationSnap,\n scaleSnap,\n space,\n size,\n showX,\n showY,\n showZ,\n ...props\n}, ref) => {\n const defaultControls = useThree(state => state.controls);\n const gl = useThree(state => state.gl);\n const events = useThree(state => state.events);\n const defaultCamera = useThree(state => state.camera);\n const invalidate = useThree(state => state.invalidate);\n const get = useThree(state => state.get);\n const set = useThree(state => state.set);\n const explCamera = camera || defaultCamera;\n const explDomElement = domElement || events.connected || gl.domElement;\n const controls = React.useMemo(() => new TransformControls$1(explCamera, explDomElement), [explCamera, explDomElement]);\n const group = React.useRef(null);\n React.useLayoutEffect(() => {\n if (object) {\n controls.attach(object instanceof THREE.Object3D ? object : object.current);\n } else if (group.current instanceof THREE.Object3D) {\n controls.attach(group.current);\n }\n return () => void controls.detach();\n }, [object, children, controls]);\n React.useEffect(() => {\n if (defaultControls) {\n const callback = event => defaultControls.enabled = !event.value;\n controls.addEventListener('dragging-changed', callback);\n return () => controls.removeEventListener('dragging-changed', callback);\n }\n }, [controls, defaultControls]);\n const onChangeRef = React.useRef(undefined);\n const onMouseDownRef = React.useRef(undefined);\n const onMouseUpRef = React.useRef(undefined);\n const onObjectChangeRef = React.useRef(undefined);\n React.useLayoutEffect(() => void (onChangeRef.current = onChange), [onChange]);\n React.useLayoutEffect(() => void (onMouseDownRef.current = onMouseDown), [onMouseDown]);\n React.useLayoutEffect(() => void (onMouseUpRef.current = onMouseUp), [onMouseUp]);\n React.useLayoutEffect(() => void (onObjectChangeRef.current = onObjectChange), [onObjectChange]);\n React.useEffect(() => {\n const onChange = e => {\n invalidate();\n onChangeRef.current == null || onChangeRef.current(e);\n };\n const onMouseDown = e => onMouseDownRef.current == null ? void 0 : onMouseDownRef.current(e);\n const onMouseUp = e => onMouseUpRef.current == null ? void 0 : onMouseUpRef.current(e);\n const onObjectChange = e => onObjectChangeRef.current == null ? void 0 : onObjectChangeRef.current(e);\n controls.addEventListener('change', onChange);\n controls.addEventListener('mouseDown', onMouseDown);\n controls.addEventListener('mouseUp', onMouseUp);\n controls.addEventListener('objectChange', onObjectChange);\n return () => {\n controls.removeEventListener('change', onChange);\n controls.removeEventListener('mouseDown', onMouseDown);\n controls.removeEventListener('mouseUp', onMouseUp);\n controls.removeEventListener('objectChange', onObjectChange);\n };\n }, [invalidate, controls]);\n React.useEffect(() => {\n if (makeDefault) {\n const old = get().controls;\n set({\n controls\n });\n return () => set({\n controls: old\n });\n }\n }, [makeDefault, controls]);\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"primitive\", {\n ref: ref,\n object: controls,\n enabled: enabled,\n axis: axis,\n mode: mode,\n translationSnap: translationSnap,\n rotationSnap: rotationSnap,\n scaleSnap: scaleSnap,\n space: space,\n size: size,\n showX: showX,\n showY: showY,\n showZ: showZ\n }), /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: group\n }, props), children));\n});\n\nexport { TransformControls };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useThree } from '@react-three/fiber';\nimport * as React from 'react';\nimport { PointerLockControls as PointerLockControls$1 } from 'three-stdlib';\n\nconst PointerLockControls = /* @__PURE__ */React.forwardRef(({\n domElement,\n selector,\n onChange,\n onLock,\n onUnlock,\n enabled = true,\n makeDefault,\n ...props\n}, ref) => {\n const {\n camera,\n ...rest\n } = props;\n const setEvents = useThree(state => state.setEvents);\n const gl = useThree(state => state.gl);\n const defaultCamera = useThree(state => state.camera);\n const invalidate = useThree(state => state.invalidate);\n const events = useThree(state => state.events);\n const get = useThree(state => state.get);\n const set = useThree(state => state.set);\n const explCamera = camera || defaultCamera;\n const explDomElement = domElement || events.connected || gl.domElement;\n const controls = React.useMemo(() => new PointerLockControls$1(explCamera), [explCamera]);\n React.useEffect(() => {\n if (enabled) {\n controls.connect(explDomElement);\n // Force events to be centered while PLC is active\n const oldComputeOffsets = get().events.compute;\n setEvents({\n compute(event, state) {\n const offsetX = state.size.width / 2;\n const offsetY = state.size.height / 2;\n state.pointer.set(offsetX / state.size.width * 2 - 1, -(offsetY / state.size.height) * 2 + 1);\n state.raycaster.setFromCamera(state.pointer, state.camera);\n }\n });\n return () => {\n controls.disconnect();\n setEvents({\n compute: oldComputeOffsets\n });\n };\n }\n }, [enabled, controls]);\n React.useEffect(() => {\n const callback = e => {\n invalidate();\n if (onChange) onChange(e);\n };\n controls.addEventListener('change', callback);\n if (onLock) controls.addEventListener('lock', onLock);\n if (onUnlock) controls.addEventListener('unlock', onUnlock);\n\n // Enforce previous interaction\n const handler = () => controls.lock();\n const elements = selector ? Array.from(document.querySelectorAll(selector)) : [document];\n elements.forEach(element => element && element.addEventListener('click', handler));\n return () => {\n controls.removeEventListener('change', callback);\n if (onLock) controls.removeEventListener('lock', onLock);\n if (onUnlock) controls.removeEventListener('unlock', onUnlock);\n elements.forEach(element => element ? element.removeEventListener('click', handler) : undefined);\n };\n }, [onChange, onLock, onUnlock, selector, controls, invalidate]);\n React.useEffect(() => {\n if (makeDefault) {\n const old = get().controls;\n // @ts-ignore https://github.com/three-types/three-ts-types/pull/1398\n set({\n controls\n });\n return () => set({\n controls: old\n });\n }\n }, [makeDefault, controls]);\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n ref: ref,\n object: controls\n }, rest));\n});\n\nexport { PointerLockControls };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { FirstPersonControls as FirstPersonControls$1 } from 'three-stdlib';\n\nconst FirstPersonControls = /* @__PURE__ */React.forwardRef(({\n domElement,\n makeDefault,\n ...props\n}, ref) => {\n const camera = useThree(state => state.camera);\n const gl = useThree(state => state.gl);\n const events = useThree(state => state.events);\n const get = useThree(state => state.get);\n const set = useThree(state => state.set);\n const explDomElement = domElement || events.connected || gl.domElement;\n const [controls] = React.useState(() => new FirstPersonControls$1(camera, explDomElement));\n React.useEffect(() => {\n if (makeDefault) {\n const old = get().controls;\n set({\n controls\n });\n return () => set({\n controls: old\n });\n }\n }, [makeDefault, controls]);\n useFrame((_, delta) => {\n controls.update(delta);\n }, -1);\n return controls ? /*#__PURE__*/React.createElement(\"primitive\", _extends({\n ref: ref,\n object: controls\n }, props)) : null;\n});\n\nexport { FirstPersonControls };\n","/*!\n * camera-controls\n * https://github.com/yomotsu/camera-controls\n * (c) 2017 @yomotsu\n * Released under the MIT License.\n */\n// see https://developer.mozilla.org/en-US/docs/Web/API/MouseEvent/buttons#value\nconst MOUSE_BUTTON = {\n LEFT: 1,\n RIGHT: 2,\n MIDDLE: 4,\n};\nconst ACTION = Object.freeze({\n NONE: 0b0,\n ROTATE: 0b1,\n TRUCK: 0b10,\n SCREEN_PAN: 0b100,\n OFFSET: 0b1000,\n DOLLY: 0b10000,\n ZOOM: 0b100000,\n TOUCH_ROTATE: 0b1000000,\n TOUCH_TRUCK: 0b10000000,\n TOUCH_SCREEN_PAN: 0b100000000,\n TOUCH_OFFSET: 0b1000000000,\n TOUCH_DOLLY: 0b10000000000,\n TOUCH_ZOOM: 0b100000000000,\n TOUCH_DOLLY_TRUCK: 0b1000000000000,\n TOUCH_DOLLY_SCREEN_PAN: 0b10000000000000,\n TOUCH_DOLLY_OFFSET: 0b100000000000000,\n TOUCH_DOLLY_ROTATE: 0b1000000000000000,\n TOUCH_ZOOM_TRUCK: 0b10000000000000000,\n TOUCH_ZOOM_OFFSET: 0b100000000000000000,\n TOUCH_ZOOM_SCREEN_PAN: 0b1000000000000000000,\n TOUCH_ZOOM_ROTATE: 0b10000000000000000000,\n});\nconst DOLLY_DIRECTION = {\n NONE: 0,\n IN: 1,\n OUT: -1,\n};\nfunction isPerspectiveCamera(camera) {\n return camera.isPerspectiveCamera;\n}\nfunction isOrthographicCamera(camera) {\n return camera.isOrthographicCamera;\n}\n\nconst PI_2 = Math.PI * 2;\nconst PI_HALF = Math.PI / 2;\n\nconst EPSILON = 1e-5;\nconst DEG2RAD = Math.PI / 180;\nfunction clamp(value, min, max) {\n return Math.max(min, Math.min(max, value));\n}\nfunction approxZero(number, error = EPSILON) {\n return Math.abs(number) < error;\n}\nfunction approxEquals(a, b, error = EPSILON) {\n return approxZero(a - b, error);\n}\nfunction roundToStep(value, step) {\n return Math.round(value / step) * step;\n}\nfunction infinityToMaxNumber(value) {\n if (isFinite(value))\n return value;\n if (value < 0)\n return -Number.MAX_VALUE;\n return Number.MAX_VALUE;\n}\nfunction maxNumberToInfinity(value) {\n if (Math.abs(value) < Number.MAX_VALUE)\n return value;\n return value * Infinity;\n}\n// https://docs.unity3d.com/ScriptReference/Mathf.SmoothDamp.html\n// https://github.com/Unity-Technologies/UnityCsReference/blob/a2bdfe9b3c4cd4476f44bf52f848063bfaf7b6b9/Runtime/Export/Math/Mathf.cs#L308\nfunction smoothDamp(current, target, currentVelocityRef, smoothTime, maxSpeed = Infinity, deltaTime) {\n // Based on Game Programming Gems 4 Chapter 1.10\n smoothTime = Math.max(0.0001, smoothTime);\n const omega = 2 / smoothTime;\n const x = omega * deltaTime;\n const exp = 1 / (1 + x + 0.48 * x * x + 0.235 * x * x * x);\n let change = current - target;\n const originalTo = target;\n // Clamp maximum speed\n const maxChange = maxSpeed * smoothTime;\n change = clamp(change, -maxChange, maxChange);\n target = current - change;\n const temp = (currentVelocityRef.value + omega * change) * deltaTime;\n currentVelocityRef.value = (currentVelocityRef.value - omega * temp) * exp;\n let output = target + (change + temp) * exp;\n // Prevent overshooting\n if (originalTo - current > 0.0 === output > originalTo) {\n output = originalTo;\n currentVelocityRef.value = (output - originalTo) / deltaTime;\n }\n return output;\n}\n// https://docs.unity3d.com/ScriptReference/Vector3.SmoothDamp.html\n// https://github.com/Unity-Technologies/UnityCsReference/blob/a2bdfe9b3c4cd4476f44bf52f848063bfaf7b6b9/Runtime/Export/Math/Vector3.cs#L97\nfunction smoothDampVec3(current, target, currentVelocityRef, smoothTime, maxSpeed = Infinity, deltaTime, out) {\n // Based on Game Programming Gems 4 Chapter 1.10\n smoothTime = Math.max(0.0001, smoothTime);\n const omega = 2 / smoothTime;\n const x = omega * deltaTime;\n const exp = 1 / (1 + x + 0.48 * x * x + 0.235 * x * x * x);\n let targetX = target.x;\n let targetY = target.y;\n let targetZ = target.z;\n let changeX = current.x - targetX;\n let changeY = current.y - targetY;\n let changeZ = current.z - targetZ;\n const originalToX = targetX;\n const originalToY = targetY;\n const originalToZ = targetZ;\n // Clamp maximum speed\n const maxChange = maxSpeed * smoothTime;\n const maxChangeSq = maxChange * maxChange;\n const magnitudeSq = changeX * changeX + changeY * changeY + changeZ * changeZ;\n if (magnitudeSq > maxChangeSq) {\n const magnitude = Math.sqrt(magnitudeSq);\n changeX = changeX / magnitude * maxChange;\n changeY = changeY / magnitude * maxChange;\n changeZ = changeZ / magnitude * maxChange;\n }\n targetX = current.x - changeX;\n targetY = current.y - changeY;\n targetZ = current.z - changeZ;\n const tempX = (currentVelocityRef.x + omega * changeX) * deltaTime;\n const tempY = (currentVelocityRef.y + omega * changeY) * deltaTime;\n const tempZ = (currentVelocityRef.z + omega * changeZ) * deltaTime;\n currentVelocityRef.x = (currentVelocityRef.x - omega * tempX) * exp;\n currentVelocityRef.y = (currentVelocityRef.y - omega * tempY) * exp;\n currentVelocityRef.z = (currentVelocityRef.z - omega * tempZ) * exp;\n out.x = targetX + (changeX + tempX) * exp;\n out.y = targetY + (changeY + tempY) * exp;\n out.z = targetZ + (changeZ + tempZ) * exp;\n // Prevent overshooting\n const origMinusCurrentX = originalToX - current.x;\n const origMinusCurrentY = originalToY - current.y;\n const origMinusCurrentZ = originalToZ - current.z;\n const outMinusOrigX = out.x - originalToX;\n const outMinusOrigY = out.y - originalToY;\n const outMinusOrigZ = out.z - originalToZ;\n if (origMinusCurrentX * outMinusOrigX + origMinusCurrentY * outMinusOrigY + origMinusCurrentZ * outMinusOrigZ > 0) {\n out.x = originalToX;\n out.y = originalToY;\n out.z = originalToZ;\n currentVelocityRef.x = (out.x - originalToX) / deltaTime;\n currentVelocityRef.y = (out.y - originalToY) / deltaTime;\n currentVelocityRef.z = (out.z - originalToZ) / deltaTime;\n }\n return out;\n}\n\nfunction extractClientCoordFromEvent(pointers, out) {\n out.set(0, 0);\n pointers.forEach((pointer) => {\n out.x += pointer.clientX;\n out.y += pointer.clientY;\n });\n out.x /= pointers.length;\n out.y /= pointers.length;\n}\n\nfunction notSupportedInOrthographicCamera(camera, message) {\n if (isOrthographicCamera(camera)) {\n console.warn(`${message} is not supported in OrthographicCamera`);\n return true;\n }\n return false;\n}\n\nclass EventDispatcher {\n _listeners = {};\n /**\n * Adds the specified event listener.\n * @param type event name\n * @param listener handler function\n * @category Methods\n */\n addEventListener(type, listener) {\n const listeners = this._listeners;\n if (listeners[type] === undefined)\n listeners[type] = [];\n if (listeners[type].indexOf(listener) === -1)\n listeners[type].push(listener);\n }\n /**\n * Presence of the specified event listener.\n * @param type event name\n * @param listener handler function\n * @category Methods\n */\n hasEventListener(type, listener) {\n const listeners = this._listeners;\n return listeners[type] !== undefined && listeners[type].indexOf(listener) !== -1;\n }\n /**\n * Removes the specified event listener\n * @param type event name\n * @param listener handler function\n * @category Methods\n */\n removeEventListener(type, listener) {\n const listeners = this._listeners;\n const listenerArray = listeners[type];\n if (listenerArray !== undefined) {\n const index = listenerArray.indexOf(listener);\n if (index !== -1)\n listenerArray.splice(index, 1);\n }\n }\n /**\n * Removes all event listeners\n * @param type event name\n * @category Methods\n */\n removeAllEventListeners(type) {\n if (!type) {\n this._listeners = {};\n return;\n }\n if (Array.isArray(this._listeners[type]))\n this._listeners[type].length = 0;\n }\n /**\n * Fire an event type.\n * @param event DispatcherEvent\n * @category Methods\n */\n dispatchEvent(event) {\n const listeners = this._listeners;\n const listenerArray = listeners[event.type];\n if (listenerArray !== undefined) {\n event.target = this;\n const array = listenerArray.slice(0);\n for (let i = 0, l = array.length; i < l; i++) {\n array[i].call(this, event);\n }\n }\n }\n}\n\nconst VERSION = '3.1.2'; // will be replaced with `version` in package.json during the build process.\nconst TOUCH_DOLLY_FACTOR = 1 / 8;\nconst isMac = /Mac/.test(globalThis?.navigator?.platform);\nlet THREE;\nlet _ORIGIN;\nlet _AXIS_Y;\nlet _AXIS_Z;\nlet _v2;\nlet _v3A;\nlet _v3B;\nlet _v3C;\nlet _cameraDirection;\nlet _xColumn;\nlet _yColumn;\nlet _zColumn;\nlet _deltaTarget;\nlet _deltaOffset;\nlet _sphericalA;\nlet _sphericalB;\nlet _box3A;\nlet _box3B;\nlet _sphere;\nlet _quaternionA;\nlet _quaternionB;\nlet _rotationMatrix;\nlet _raycaster;\nclass CameraControls extends EventDispatcher {\n /**\n * Injects THREE as the dependency. You can then proceed to use CameraControls.\n *\n * e.g\n * ```javascript\n * CameraControls.install( { THREE: THREE } );\n * ```\n *\n * Note: If you do not wish to use enter three.js to reduce file size(tree-shaking for example), make a subset to install.\n *\n * ```js\n * import {\n * \tVector2,\n * \tVector3,\n * \tVector4,\n * \tQuaternion,\n * \tMatrix4,\n * \tSpherical,\n * \tBox3,\n * \tSphere,\n * \tRaycaster,\n * \tMathUtils,\n * } from 'three';\n *\n * const subsetOfTHREE = {\n * \tVector2 : Vector2,\n * \tVector3 : Vector3,\n * \tVector4 : Vector4,\n * \tQuaternion: Quaternion,\n * \tMatrix4 : Matrix4,\n * \tSpherical : Spherical,\n * \tBox3 : Box3,\n * \tSphere : Sphere,\n * \tRaycaster : Raycaster,\n * };\n\n * CameraControls.install( { THREE: subsetOfTHREE } );\n * ```\n * @category Statics\n */\n static install(libs) {\n THREE = libs.THREE;\n _ORIGIN = Object.freeze(new THREE.Vector3(0, 0, 0));\n _AXIS_Y = Object.freeze(new THREE.Vector3(0, 1, 0));\n _AXIS_Z = Object.freeze(new THREE.Vector3(0, 0, 1));\n _v2 = new THREE.Vector2();\n _v3A = new THREE.Vector3();\n _v3B = new THREE.Vector3();\n _v3C = new THREE.Vector3();\n _cameraDirection = new THREE.Vector3();\n _xColumn = new THREE.Vector3();\n _yColumn = new THREE.Vector3();\n _zColumn = new THREE.Vector3();\n _deltaTarget = new THREE.Vector3();\n _deltaOffset = new THREE.Vector3();\n _sphericalA = new THREE.Spherical();\n _sphericalB = new THREE.Spherical();\n _box3A = new THREE.Box3();\n _box3B = new THREE.Box3();\n _sphere = new THREE.Sphere();\n _quaternionA = new THREE.Quaternion();\n _quaternionB = new THREE.Quaternion();\n _rotationMatrix = new THREE.Matrix4();\n _raycaster = new THREE.Raycaster();\n }\n /**\n * list all ACTIONs\n * @category Statics\n */\n static get ACTION() {\n return ACTION;\n }\n /**\n * Minimum vertical angle in radians.\n * The angle has to be between `0` and `.maxPolarAngle` inclusive.\n * The default value is `0`.\n *\n * e.g.\n * ```\n * cameraControls.maxPolarAngle = 0;\n * ```\n * @category Properties\n */\n minPolarAngle = 0; // radians\n /**\n * Maximum vertical angle in radians.\n * The angle has to be between `.maxPolarAngle` and `Math.PI` inclusive.\n * The default value is `Math.PI`.\n *\n * e.g.\n * ```\n * cameraControls.maxPolarAngle = Math.PI;\n * ```\n * @category Properties\n */\n maxPolarAngle = Math.PI; // radians\n /**\n * Minimum horizontal angle in radians.\n * The angle has to be less than `.maxAzimuthAngle`.\n * The default value is `- Infinity`.\n *\n * e.g.\n * ```\n * cameraControls.minAzimuthAngle = - Infinity;\n * ```\n * @category Properties\n */\n minAzimuthAngle = -Infinity; // radians\n /**\n * Maximum horizontal angle in radians.\n * The angle has to be greater than `.minAzimuthAngle`.\n * The default value is `Infinity`.\n *\n * e.g.\n * ```\n * cameraControls.maxAzimuthAngle = Infinity;\n * ```\n * @category Properties\n */\n maxAzimuthAngle = Infinity; // radians\n // How far you can dolly in and out ( PerspectiveCamera only )\n /**\n * Minimum distance for dolly. The value must be higher than `0`. Default is `Number.EPSILON`.\n * PerspectiveCamera only.\n * @category Properties\n */\n minDistance = Number.EPSILON;\n /**\n * Maximum distance for dolly. The value must be higher than `minDistance`. Default is `Infinity`.\n * PerspectiveCamera only.\n * @category Properties\n */\n maxDistance = Infinity;\n /**\n * `true` to enable Infinity Dolly for wheel and pinch. Use this with `minDistance` and `maxDistance`\n * If the Dolly distance is less (or over) than the `minDistance` (or `maxDistance`), `infinityDolly` will keep the distance and pushes the target position instead.\n * @category Properties\n */\n infinityDolly = false;\n /**\n * Minimum camera zoom.\n * @category Properties\n */\n minZoom = 0.01;\n /**\n * Maximum camera zoom.\n * @category Properties\n */\n maxZoom = Infinity;\n /**\n * Approximate time in seconds to reach the target. A smaller value will reach the target faster.\n * @category Properties\n */\n smoothTime = 0.25;\n /**\n * the smoothTime while dragging\n * @category Properties\n */\n draggingSmoothTime = 0.125;\n /**\n * Max transition speed in unit-per-seconds\n * @category Properties\n */\n maxSpeed = Infinity;\n /**\n * Speed of azimuth (horizontal) rotation.\n * @category Properties\n */\n azimuthRotateSpeed = 1.0;\n /**\n * Speed of polar (vertical) rotation.\n * @category Properties\n */\n polarRotateSpeed = 1.0;\n /**\n * Speed of mouse-wheel dollying.\n * @category Properties\n */\n dollySpeed = 1.0;\n /**\n * `true` to invert direction when dollying or zooming via drag\n * @category Properties\n */\n dollyDragInverted = false;\n /**\n * Speed of drag for truck and pedestal.\n * @category Properties\n */\n truckSpeed = 2.0;\n /**\n * `true` to enable Dolly-in to the mouse cursor coords.\n * @category Properties\n */\n dollyToCursor = false;\n /**\n * @category Properties\n */\n dragToOffset = false;\n /**\n * Friction ratio of the boundary.\n * @category Properties\n */\n boundaryFriction = 0.0;\n /**\n * Controls how soon the `rest` event fires as the camera slows.\n * @category Properties\n */\n restThreshold = 0.01;\n /**\n * An array of Meshes to collide with camera.\n * Be aware colliderMeshes may decrease performance. The collision test uses 4 raycasters from the camera since the near plane has 4 corners.\n * @category Properties\n */\n colliderMeshes = [];\n // button configs\n /**\n * User's mouse input config.\n *\n * | button to assign | behavior |\n * | --------------------- | -------- |\n * | `mouseButtons.left` | `CameraControls.ACTION.ROTATE`* \\| `CameraControls.ACTION.TRUCK` \\| `CameraControls.ACTION.OFFSET` \\| `CameraControls.ACTION.DOLLY` \\| `CameraControls.ACTION.ZOOM` \\| `CameraControls.ACTION.NONE` |\n * | `mouseButtons.right` | `CameraControls.ACTION.ROTATE` \\| `CameraControls.ACTION.TRUCK`* \\| `CameraControls.ACTION.OFFSET` \\| `CameraControls.ACTION.DOLLY` \\| `CameraControls.ACTION.ZOOM` \\| `CameraControls.ACTION.NONE` |\n * | `mouseButtons.wheel` ¹ | `CameraControls.ACTION.ROTATE` \\| `CameraControls.ACTION.TRUCK` \\| `CameraControls.ACTION.OFFSET` \\| `CameraControls.ACTION.DOLLY` \\| `CameraControls.ACTION.ZOOM` \\| `CameraControls.ACTION.NONE` |\n * | `mouseButtons.middle` ² | `CameraControls.ACTION.ROTATE` \\| `CameraControls.ACTION.TRUCK` \\| `CameraControls.ACTION.OFFSET` \\| `CameraControls.ACTION.DOLLY`* \\| `CameraControls.ACTION.ZOOM` \\| `CameraControls.ACTION.NONE` |\n *\n * 1. Mouse wheel event for scroll \"up/down\" on mac \"up/down/left/right\"\n * 2. Mouse click on wheel event \"button\"\n * - \\* is the default.\n * - The default of `mouseButtons.wheel` is:\n * - `DOLLY` for Perspective camera.\n * - `ZOOM` for Orthographic camera, and can't set `DOLLY`.\n * @category Properties\n */\n mouseButtons;\n /**\n * User's touch input config.\n *\n * | fingers to assign | behavior |\n * | --------------------- | -------- |\n * | `touches.one` | `CameraControls.ACTION.TOUCH_ROTATE`* \\| `CameraControls.ACTION.TOUCH_TRUCK` \\| `CameraControls.ACTION.TOUCH_OFFSET` \\| `CameraControls.ACTION.DOLLY` | `CameraControls.ACTION.ZOOM` | `CameraControls.ACTION.NONE` |\n * | `touches.two` | `ACTION.TOUCH_DOLLY_TRUCK` \\| `ACTION.TOUCH_DOLLY_OFFSET` \\| `ACTION.TOUCH_DOLLY_ROTATE` \\| `ACTION.TOUCH_ZOOM_TRUCK` \\| `ACTION.TOUCH_ZOOM_OFFSET` \\| `ACTION.TOUCH_ZOOM_ROTATE` \\| `ACTION.TOUCH_DOLLY` \\| `ACTION.TOUCH_ZOOM` \\| `CameraControls.ACTION.TOUCH_ROTATE` \\| `CameraControls.ACTION.TOUCH_TRUCK` \\| `CameraControls.ACTION.TOUCH_OFFSET` \\| `CameraControls.ACTION.NONE` |\n * | `touches.three` | `ACTION.TOUCH_DOLLY_TRUCK` \\| `ACTION.TOUCH_DOLLY_OFFSET` \\| `ACTION.TOUCH_DOLLY_ROTATE` \\| `ACTION.TOUCH_ZOOM_TRUCK` \\| `ACTION.TOUCH_ZOOM_OFFSET` \\| `ACTION.TOUCH_ZOOM_ROTATE` \\| `CameraControls.ACTION.TOUCH_ROTATE` \\| `CameraControls.ACTION.TOUCH_TRUCK` \\| `CameraControls.ACTION.TOUCH_OFFSET` \\| `CameraControls.ACTION.NONE` |\n *\n * - \\* is the default.\n * - The default of `touches.two` and `touches.three` is:\n * - `TOUCH_DOLLY_TRUCK` for Perspective camera.\n * - `TOUCH_ZOOM_TRUCK` for Orthographic camera, and can't set `TOUCH_DOLLY_TRUCK` and `TOUCH_DOLLY`.\n * @category Properties\n */\n touches;\n /**\n * Force cancel user dragging.\n * @category Methods\n */\n // cancel will be overwritten in the constructor.\n cancel = () => { };\n /**\n * Still an experimental feature.\n * This could change at any time.\n * @category Methods\n */\n lockPointer;\n /**\n * Still an experimental feature.\n * This could change at any time.\n * @category Methods\n */\n unlockPointer;\n _enabled = true;\n _camera;\n _yAxisUpSpace;\n _yAxisUpSpaceInverse;\n _state = ACTION.NONE;\n _domElement;\n _viewport = null;\n // the location of focus, where the object orbits around\n _target;\n _targetEnd;\n _focalOffset;\n _focalOffsetEnd;\n // rotation and dolly distance\n _spherical;\n _sphericalEnd;\n _lastDistance;\n _zoom;\n _zoomEnd;\n _lastZoom;\n // reset\n _cameraUp0;\n _target0;\n _position0;\n _zoom0;\n _focalOffset0;\n _dollyControlCoord;\n _changedDolly = 0;\n _changedZoom = 0;\n // collisionTest uses nearPlane. ( PerspectiveCamera only )\n _nearPlaneCorners;\n _hasRested = true;\n _boundary;\n _boundaryEnclosesCamera = false;\n _needsUpdate = true;\n _updatedLastTime = false;\n _elementRect = new DOMRect();\n _isDragging = false;\n _dragNeedsUpdate = true;\n _activePointers = [];\n _lockedPointer = null;\n _interactiveArea = new DOMRect(0, 0, 1, 1);\n // Use draggingSmoothTime over smoothTime while true.\n // set automatically true on user-dragging start.\n // set automatically false on programmable methods call.\n _isUserControllingRotate = false;\n _isUserControllingDolly = false;\n _isUserControllingTruck = false;\n _isUserControllingOffset = false;\n _isUserControllingZoom = false;\n _lastDollyDirection = DOLLY_DIRECTION.NONE;\n // velocities for smoothDamp\n _thetaVelocity = { value: 0 };\n _phiVelocity = { value: 0 };\n _radiusVelocity = { value: 0 };\n _targetVelocity = new THREE.Vector3();\n _focalOffsetVelocity = new THREE.Vector3();\n _zoomVelocity = { value: 0 };\n /**\n * @deprecated Use `cameraControls.mouseButtons.left = CameraControls.ACTION.SCREEN_PAN` instead.\n */\n set verticalDragToForward(_) {\n console.warn('camera-controls: `verticalDragToForward` was removed. Use `mouseButtons.left = CameraControls.ACTION.SCREEN_PAN` instead.');\n }\n /**\n * Creates a `CameraControls` instance.\n *\n * Note:\n * You **must install** three.js before using camera-controls. see [#install](#install)\n * Not doing so will lead to runtime errors (`undefined` references to THREE).\n *\n * e.g.\n * ```\n * CameraControls.install( { THREE } );\n * const cameraControls = new CameraControls( camera, domElement );\n * ```\n *\n * @param camera A `THREE.PerspectiveCamera` or `THREE.OrthographicCamera` to be controlled.\n * @param domElement A `HTMLElement` for the draggable area, usually `renderer.domElement`.\n * @category Constructor\n */\n constructor(camera, domElement) {\n super();\n // Check if the user has installed THREE\n if (typeof THREE === 'undefined') {\n console.error('camera-controls: `THREE` is undefined. You must first run `CameraControls.install( { THREE: THREE } )`. Check the docs for further information.');\n }\n this._camera = camera;\n this._yAxisUpSpace = new THREE.Quaternion().setFromUnitVectors(this._camera.up, _AXIS_Y);\n this._yAxisUpSpaceInverse = this._yAxisUpSpace.clone().invert();\n this._state = ACTION.NONE;\n // the location\n this._target = new THREE.Vector3();\n this._targetEnd = this._target.clone();\n this._focalOffset = new THREE.Vector3();\n this._focalOffsetEnd = this._focalOffset.clone();\n // rotation\n this._spherical = new THREE.Spherical().setFromVector3(_v3A.copy(this._camera.position).applyQuaternion(this._yAxisUpSpace));\n this._sphericalEnd = this._spherical.clone();\n this._lastDistance = this._spherical.radius;\n this._zoom = this._camera.zoom;\n this._zoomEnd = this._zoom;\n this._lastZoom = this._zoom;\n // collisionTest uses nearPlane.s\n this._nearPlaneCorners = [\n new THREE.Vector3(),\n new THREE.Vector3(),\n new THREE.Vector3(),\n new THREE.Vector3(),\n ];\n this._updateNearPlaneCorners();\n // Target cannot move outside of this box\n this._boundary = new THREE.Box3(new THREE.Vector3(-Infinity, -Infinity, -Infinity), new THREE.Vector3(Infinity, Infinity, Infinity));\n // reset\n this._cameraUp0 = this._camera.up.clone();\n this._target0 = this._target.clone();\n this._position0 = this._camera.position.clone();\n this._zoom0 = this._zoom;\n this._focalOffset0 = this._focalOffset.clone();\n this._dollyControlCoord = new THREE.Vector2();\n // configs\n this.mouseButtons = {\n left: ACTION.ROTATE,\n middle: ACTION.DOLLY,\n right: ACTION.TRUCK,\n wheel: isPerspectiveCamera(this._camera) ? ACTION.DOLLY :\n isOrthographicCamera(this._camera) ? ACTION.ZOOM :\n ACTION.NONE,\n };\n this.touches = {\n one: ACTION.TOUCH_ROTATE,\n two: isPerspectiveCamera(this._camera) ? ACTION.TOUCH_DOLLY_TRUCK :\n isOrthographicCamera(this._camera) ? ACTION.TOUCH_ZOOM_TRUCK :\n ACTION.NONE,\n three: ACTION.TOUCH_TRUCK,\n };\n const dragStartPosition = new THREE.Vector2();\n const lastDragPosition = new THREE.Vector2();\n const dollyStart = new THREE.Vector2();\n const onPointerDown = (event) => {\n if (!this._enabled || !this._domElement)\n return;\n if (this._interactiveArea.left !== 0 ||\n this._interactiveArea.top !== 0 ||\n this._interactiveArea.width !== 1 ||\n this._interactiveArea.height !== 1) {\n const elRect = this._domElement.getBoundingClientRect();\n const left = event.clientX / elRect.width;\n const top = event.clientY / elRect.height;\n // check if the interactiveArea contains the drag start position.\n if (left < this._interactiveArea.left ||\n left > this._interactiveArea.right ||\n top < this._interactiveArea.top ||\n top > this._interactiveArea.bottom)\n return;\n }\n // Don't call `event.preventDefault()` on the pointerdown event\n // to keep receiving pointermove evens outside dragging iframe\n // https://taye.me/blog/tips/2015/11/16/mouse-drag-outside-iframe/\n const mouseButton = event.pointerType !== 'mouse' ? null :\n (event.buttons & MOUSE_BUTTON.LEFT) === MOUSE_BUTTON.LEFT ? MOUSE_BUTTON.LEFT :\n (event.buttons & MOUSE_BUTTON.MIDDLE) === MOUSE_BUTTON.MIDDLE ? MOUSE_BUTTON.MIDDLE :\n (event.buttons & MOUSE_BUTTON.RIGHT) === MOUSE_BUTTON.RIGHT ? MOUSE_BUTTON.RIGHT :\n null;\n if (mouseButton !== null) {\n const zombiePointer = this._findPointerByMouseButton(mouseButton);\n zombiePointer && this._disposePointer(zombiePointer);\n }\n if ((event.buttons & MOUSE_BUTTON.LEFT) === MOUSE_BUTTON.LEFT && this._lockedPointer)\n return;\n const pointer = {\n pointerId: event.pointerId,\n clientX: event.clientX,\n clientY: event.clientY,\n deltaX: 0,\n deltaY: 0,\n mouseButton,\n };\n this._activePointers.push(pointer);\n // eslint-disable-next-line no-undef\n this._domElement.ownerDocument.removeEventListener('pointermove', onPointerMove, { passive: false });\n this._domElement.ownerDocument.removeEventListener('pointerup', onPointerUp);\n this._domElement.ownerDocument.addEventListener('pointermove', onPointerMove, { passive: false });\n this._domElement.ownerDocument.addEventListener('pointerup', onPointerUp);\n this._isDragging = true;\n startDragging(event);\n };\n const onPointerMove = (event) => {\n if (event.cancelable)\n event.preventDefault();\n const pointerId = event.pointerId;\n const pointer = this._lockedPointer || this._findPointerById(pointerId);\n if (!pointer)\n return;\n pointer.clientX = event.clientX;\n pointer.clientY = event.clientY;\n pointer.deltaX = event.movementX;\n pointer.deltaY = event.movementY;\n this._state = 0;\n if (event.pointerType === 'touch') {\n switch (this._activePointers.length) {\n case 1:\n this._state = this.touches.one;\n break;\n case 2:\n this._state = this.touches.two;\n break;\n case 3:\n this._state = this.touches.three;\n break;\n }\n }\n else {\n if ((!this._isDragging && this._lockedPointer) ||\n this._isDragging && (event.buttons & MOUSE_BUTTON.LEFT) === MOUSE_BUTTON.LEFT) {\n this._state = this._state | this.mouseButtons.left;\n }\n if (this._isDragging && (event.buttons & MOUSE_BUTTON.MIDDLE) === MOUSE_BUTTON.MIDDLE) {\n this._state = this._state | this.mouseButtons.middle;\n }\n if (this._isDragging && (event.buttons & MOUSE_BUTTON.RIGHT) === MOUSE_BUTTON.RIGHT) {\n this._state = this._state | this.mouseButtons.right;\n }\n }\n dragging();\n };\n const onPointerUp = (event) => {\n const pointer = this._findPointerById(event.pointerId);\n if (pointer && pointer === this._lockedPointer)\n return;\n pointer && this._disposePointer(pointer);\n if (event.pointerType === 'touch') {\n switch (this._activePointers.length) {\n case 0:\n this._state = ACTION.NONE;\n break;\n case 1:\n this._state = this.touches.one;\n break;\n case 2:\n this._state = this.touches.two;\n break;\n case 3:\n this._state = this.touches.three;\n break;\n }\n }\n else {\n this._state = ACTION.NONE;\n }\n endDragging();\n };\n let lastScrollTimeStamp = -1;\n const onMouseWheel = (event) => {\n if (!this._domElement)\n return;\n if (!this._enabled || this.mouseButtons.wheel === ACTION.NONE)\n return;\n if (this._interactiveArea.left !== 0 ||\n this._interactiveArea.top !== 0 ||\n this._interactiveArea.width !== 1 ||\n this._interactiveArea.height !== 1) {\n const elRect = this._domElement.getBoundingClientRect();\n const left = event.clientX / elRect.width;\n const top = event.clientY / elRect.height;\n // check if the interactiveArea contains the drag start position.\n if (left < this._interactiveArea.left ||\n left > this._interactiveArea.right ||\n top < this._interactiveArea.top ||\n top > this._interactiveArea.bottom)\n return;\n }\n event.preventDefault();\n if (this.dollyToCursor ||\n this.mouseButtons.wheel === ACTION.ROTATE ||\n this.mouseButtons.wheel === ACTION.TRUCK) {\n const now = performance.now();\n // only need to fire this at scroll start.\n if (lastScrollTimeStamp - now < 1000)\n this._getClientRect(this._elementRect);\n lastScrollTimeStamp = now;\n }\n // Ref: https://github.com/cedricpinson/osgjs/blob/00e5a7e9d9206c06fdde0436e1d62ab7cb5ce853/sources/osgViewer/input/source/InputSourceMouse.js#L89-L103\n const deltaYFactor = isMac ? -1 : -3;\n // Checks event.ctrlKey to detect multi-touch gestures on a trackpad.\n const delta = (event.deltaMode === 1 && !event.ctrlKey) ? event.deltaY / deltaYFactor : event.deltaY / (deltaYFactor * 10);\n const x = this.dollyToCursor ? (event.clientX - this._elementRect.x) / this._elementRect.width * 2 - 1 : 0;\n const y = this.dollyToCursor ? (event.clientY - this._elementRect.y) / this._elementRect.height * -2 + 1 : 0;\n // event.ctrlKey is set to true on macOS trackpad pinch gesture. In this case, always zoom.\n const controlMode = event.ctrlKey ? ACTION.ZOOM : this.mouseButtons.wheel;\n switch (controlMode) {\n case ACTION.ROTATE: {\n this._rotateInternal(event.deltaX, event.deltaY);\n this._isUserControllingRotate = true;\n break;\n }\n case ACTION.TRUCK: {\n this._truckInternal(event.deltaX, event.deltaY, false, false);\n this._isUserControllingTruck = true;\n break;\n }\n case ACTION.SCREEN_PAN: {\n this._truckInternal(event.deltaX, event.deltaY, false, true);\n this._isUserControllingTruck = true;\n break;\n }\n case ACTION.OFFSET: {\n this._truckInternal(event.deltaX, event.deltaY, true, false);\n this._isUserControllingOffset = true;\n break;\n }\n case ACTION.DOLLY: {\n this._dollyInternal(-delta, x, y);\n this._isUserControllingDolly = true;\n break;\n }\n case ACTION.ZOOM: {\n this._zoomInternal(-delta, x, y);\n this._isUserControllingZoom = true;\n break;\n }\n }\n this.dispatchEvent({ type: 'control' });\n };\n const onContextMenu = (event) => {\n if (!this._domElement || !this._enabled)\n return;\n // contextmenu event is fired right after pointerdown\n // remove attached handlers and active pointer, if interrupted by contextmenu.\n if (this.mouseButtons.right === CameraControls.ACTION.NONE) {\n const pointerId = event instanceof PointerEvent ? event.pointerId : 0;\n const pointer = this._findPointerById(pointerId);\n pointer && this._disposePointer(pointer);\n // eslint-disable-next-line no-undef\n this._domElement.ownerDocument.removeEventListener('pointermove', onPointerMove, { passive: false });\n this._domElement.ownerDocument.removeEventListener('pointerup', onPointerUp);\n return;\n }\n event.preventDefault();\n };\n const startDragging = (event) => {\n if (!this._enabled)\n return;\n extractClientCoordFromEvent(this._activePointers, _v2);\n this._getClientRect(this._elementRect);\n dragStartPosition.copy(_v2);\n lastDragPosition.copy(_v2);\n const isMultiTouch = this._activePointers.length >= 2;\n if (isMultiTouch) {\n // 2 finger pinch\n const dx = _v2.x - this._activePointers[1].clientX;\n const dy = _v2.y - this._activePointers[1].clientY;\n const distance = Math.sqrt(dx * dx + dy * dy);\n dollyStart.set(0, distance);\n // center coords of 2 finger truck\n const x = (this._activePointers[0].clientX + this._activePointers[1].clientX) * 0.5;\n const y = (this._activePointers[0].clientY + this._activePointers[1].clientY) * 0.5;\n lastDragPosition.set(x, y);\n }\n this._state = 0;\n if (!event) {\n if (this._lockedPointer)\n this._state = this._state | this.mouseButtons.left;\n }\n else if ('pointerType' in event && event.pointerType === 'touch') {\n switch (this._activePointers.length) {\n case 1:\n this._state = this.touches.one;\n break;\n case 2:\n this._state = this.touches.two;\n break;\n case 3:\n this._state = this.touches.three;\n break;\n }\n }\n else {\n if (!this._lockedPointer && (event.buttons & MOUSE_BUTTON.LEFT) === MOUSE_BUTTON.LEFT) {\n this._state = this._state | this.mouseButtons.left;\n }\n if ((event.buttons & MOUSE_BUTTON.MIDDLE) === MOUSE_BUTTON.MIDDLE) {\n this._state = this._state | this.mouseButtons.middle;\n }\n if ((event.buttons & MOUSE_BUTTON.RIGHT) === MOUSE_BUTTON.RIGHT) {\n this._state = this._state | this.mouseButtons.right;\n }\n }\n // stop current movement on drag start\n // - rotate\n if ((this._state & ACTION.ROTATE) === ACTION.ROTATE ||\n (this._state & ACTION.TOUCH_ROTATE) === ACTION.TOUCH_ROTATE ||\n (this._state & ACTION.TOUCH_DOLLY_ROTATE) === ACTION.TOUCH_DOLLY_ROTATE ||\n (this._state & ACTION.TOUCH_ZOOM_ROTATE) === ACTION.TOUCH_ZOOM_ROTATE) {\n this._sphericalEnd.theta = this._spherical.theta;\n this._sphericalEnd.phi = this._spherical.phi;\n this._thetaVelocity.value = 0;\n this._phiVelocity.value = 0;\n }\n // - truck and screen-pan\n if ((this._state & ACTION.TRUCK) === ACTION.TRUCK ||\n (this._state & ACTION.SCREEN_PAN) === ACTION.SCREEN_PAN ||\n (this._state & ACTION.TOUCH_TRUCK) === ACTION.TOUCH_TRUCK ||\n (this._state & ACTION.TOUCH_SCREEN_PAN) === ACTION.TOUCH_SCREEN_PAN ||\n (this._state & ACTION.TOUCH_DOLLY_TRUCK) === ACTION.TOUCH_DOLLY_TRUCK ||\n (this._state & ACTION.TOUCH_DOLLY_SCREEN_PAN) === ACTION.TOUCH_DOLLY_SCREEN_PAN ||\n (this._state & ACTION.TOUCH_ZOOM_TRUCK) === ACTION.TOUCH_ZOOM_TRUCK ||\n (this._state & ACTION.TOUCH_ZOOM_SCREEN_PAN) === ACTION.TOUCH_DOLLY_SCREEN_PAN) {\n this._targetEnd.copy(this._target);\n this._targetVelocity.set(0, 0, 0);\n }\n // - dolly\n if ((this._state & ACTION.DOLLY) === ACTION.DOLLY ||\n (this._state & ACTION.TOUCH_DOLLY) === ACTION.TOUCH_DOLLY ||\n (this._state & ACTION.TOUCH_DOLLY_TRUCK) === ACTION.TOUCH_DOLLY_TRUCK ||\n (this._state & ACTION.TOUCH_DOLLY_SCREEN_PAN) === ACTION.TOUCH_DOLLY_SCREEN_PAN ||\n (this._state & ACTION.TOUCH_DOLLY_OFFSET) === ACTION.TOUCH_DOLLY_OFFSET ||\n (this._state & ACTION.TOUCH_DOLLY_ROTATE) === ACTION.TOUCH_DOLLY_ROTATE) {\n this._sphericalEnd.radius = this._spherical.radius;\n this._radiusVelocity.value = 0;\n }\n // - zoom\n if ((this._state & ACTION.ZOOM) === ACTION.ZOOM ||\n (this._state & ACTION.TOUCH_ZOOM) === ACTION.TOUCH_ZOOM ||\n (this._state & ACTION.TOUCH_ZOOM_TRUCK) === ACTION.TOUCH_ZOOM_TRUCK ||\n (this._state & ACTION.TOUCH_ZOOM_SCREEN_PAN) === ACTION.TOUCH_ZOOM_SCREEN_PAN ||\n (this._state & ACTION.TOUCH_ZOOM_OFFSET) === ACTION.TOUCH_ZOOM_OFFSET ||\n (this._state & ACTION.TOUCH_ZOOM_ROTATE) === ACTION.TOUCH_ZOOM_ROTATE) {\n this._zoomEnd = this._zoom;\n this._zoomVelocity.value = 0;\n }\n // - offset\n if ((this._state & ACTION.OFFSET) === ACTION.OFFSET ||\n (this._state & ACTION.TOUCH_OFFSET) === ACTION.TOUCH_OFFSET ||\n (this._state & ACTION.TOUCH_DOLLY_OFFSET) === ACTION.TOUCH_DOLLY_OFFSET ||\n (this._state & ACTION.TOUCH_ZOOM_OFFSET) === ACTION.TOUCH_ZOOM_OFFSET) {\n this._focalOffsetEnd.copy(this._focalOffset);\n this._focalOffsetVelocity.set(0, 0, 0);\n }\n this.dispatchEvent({ type: 'controlstart' });\n };\n const dragging = () => {\n if (!this._enabled || !this._dragNeedsUpdate)\n return;\n this._dragNeedsUpdate = false;\n extractClientCoordFromEvent(this._activePointers, _v2);\n // When pointer lock is enabled clientX, clientY, screenX, and screenY remain 0.\n // If pointer lock is enabled, use the Delta directory, and assume active-pointer is not multiple.\n const isPointerLockActive = this._domElement && this._domElement.ownerDocument.pointerLockElement === this._domElement;\n const lockedPointer = isPointerLockActive ? this._lockedPointer || this._activePointers[0] : null;\n const deltaX = lockedPointer ? -lockedPointer.deltaX : lastDragPosition.x - _v2.x;\n const deltaY = lockedPointer ? -lockedPointer.deltaY : lastDragPosition.y - _v2.y;\n lastDragPosition.copy(_v2);\n // rotate\n if ((this._state & ACTION.ROTATE) === ACTION.ROTATE ||\n (this._state & ACTION.TOUCH_ROTATE) === ACTION.TOUCH_ROTATE ||\n (this._state & ACTION.TOUCH_DOLLY_ROTATE) === ACTION.TOUCH_DOLLY_ROTATE ||\n (this._state & ACTION.TOUCH_ZOOM_ROTATE) === ACTION.TOUCH_ZOOM_ROTATE) {\n this._rotateInternal(deltaX, deltaY);\n this._isUserControllingRotate = true;\n }\n // mouse dolly or zoom\n if ((this._state & ACTION.DOLLY) === ACTION.DOLLY ||\n (this._state & ACTION.ZOOM) === ACTION.ZOOM) {\n const dollyX = this.dollyToCursor ? (dragStartPosition.x - this._elementRect.x) / this._elementRect.width * 2 - 1 : 0;\n const dollyY = this.dollyToCursor ? (dragStartPosition.y - this._elementRect.y) / this._elementRect.height * -2 + 1 : 0;\n const dollyDirection = this.dollyDragInverted ? -1 : 1;\n if ((this._state & ACTION.DOLLY) === ACTION.DOLLY) {\n this._dollyInternal(dollyDirection * deltaY * TOUCH_DOLLY_FACTOR, dollyX, dollyY);\n this._isUserControllingDolly = true;\n }\n else {\n this._zoomInternal(dollyDirection * deltaY * TOUCH_DOLLY_FACTOR, dollyX, dollyY);\n this._isUserControllingZoom = true;\n }\n }\n // touch dolly or zoom\n if ((this._state & ACTION.TOUCH_DOLLY) === ACTION.TOUCH_DOLLY ||\n (this._state & ACTION.TOUCH_ZOOM) === ACTION.TOUCH_ZOOM ||\n (this._state & ACTION.TOUCH_DOLLY_TRUCK) === ACTION.TOUCH_DOLLY_TRUCK ||\n (this._state & ACTION.TOUCH_ZOOM_TRUCK) === ACTION.TOUCH_ZOOM_TRUCK ||\n (this._state & ACTION.TOUCH_DOLLY_SCREEN_PAN) === ACTION.TOUCH_DOLLY_SCREEN_PAN ||\n (this._state & ACTION.TOUCH_ZOOM_SCREEN_PAN) === ACTION.TOUCH_ZOOM_SCREEN_PAN ||\n (this._state & ACTION.TOUCH_DOLLY_OFFSET) === ACTION.TOUCH_DOLLY_OFFSET ||\n (this._state & ACTION.TOUCH_ZOOM_OFFSET) === ACTION.TOUCH_ZOOM_OFFSET ||\n (this._state & ACTION.TOUCH_DOLLY_ROTATE) === ACTION.TOUCH_DOLLY_ROTATE ||\n (this._state & ACTION.TOUCH_ZOOM_ROTATE) === ACTION.TOUCH_ZOOM_ROTATE) {\n const dx = _v2.x - this._activePointers[1].clientX;\n const dy = _v2.y - this._activePointers[1].clientY;\n const distance = Math.sqrt(dx * dx + dy * dy);\n const dollyDelta = dollyStart.y - distance;\n dollyStart.set(0, distance);\n const dollyX = this.dollyToCursor ? (lastDragPosition.x - this._elementRect.x) / this._elementRect.width * 2 - 1 : 0;\n const dollyY = this.dollyToCursor ? (lastDragPosition.y - this._elementRect.y) / this._elementRect.height * -2 + 1 : 0;\n if ((this._state & ACTION.TOUCH_DOLLY) === ACTION.TOUCH_DOLLY ||\n (this._state & ACTION.TOUCH_DOLLY_ROTATE) === ACTION.TOUCH_DOLLY_ROTATE ||\n (this._state & ACTION.TOUCH_DOLLY_TRUCK) === ACTION.TOUCH_DOLLY_TRUCK ||\n (this._state & ACTION.TOUCH_DOLLY_SCREEN_PAN) === ACTION.TOUCH_DOLLY_SCREEN_PAN ||\n (this._state & ACTION.TOUCH_DOLLY_OFFSET) === ACTION.TOUCH_DOLLY_OFFSET) {\n this._dollyInternal(dollyDelta * TOUCH_DOLLY_FACTOR, dollyX, dollyY);\n this._isUserControllingDolly = true;\n }\n else {\n this._zoomInternal(dollyDelta * TOUCH_DOLLY_FACTOR, dollyX, dollyY);\n this._isUserControllingZoom = true;\n }\n }\n // truck\n if ((this._state & ACTION.TRUCK) === ACTION.TRUCK ||\n (this._state & ACTION.TOUCH_TRUCK) === ACTION.TOUCH_TRUCK ||\n (this._state & ACTION.TOUCH_DOLLY_TRUCK) === ACTION.TOUCH_DOLLY_TRUCK ||\n (this._state & ACTION.TOUCH_ZOOM_TRUCK) === ACTION.TOUCH_ZOOM_TRUCK) {\n this._truckInternal(deltaX, deltaY, false, false);\n this._isUserControllingTruck = true;\n }\n // screen-pan\n if ((this._state & ACTION.SCREEN_PAN) === ACTION.SCREEN_PAN ||\n (this._state & ACTION.TOUCH_SCREEN_PAN) === ACTION.TOUCH_SCREEN_PAN ||\n (this._state & ACTION.TOUCH_DOLLY_SCREEN_PAN) === ACTION.TOUCH_DOLLY_SCREEN_PAN ||\n (this._state & ACTION.TOUCH_ZOOM_SCREEN_PAN) === ACTION.TOUCH_ZOOM_SCREEN_PAN) {\n this._truckInternal(deltaX, deltaY, false, true);\n this._isUserControllingTruck = true;\n }\n // offset\n if ((this._state & ACTION.OFFSET) === ACTION.OFFSET ||\n (this._state & ACTION.TOUCH_OFFSET) === ACTION.TOUCH_OFFSET ||\n (this._state & ACTION.TOUCH_DOLLY_OFFSET) === ACTION.TOUCH_DOLLY_OFFSET ||\n (this._state & ACTION.TOUCH_ZOOM_OFFSET) === ACTION.TOUCH_ZOOM_OFFSET) {\n this._truckInternal(deltaX, deltaY, true, false);\n this._isUserControllingOffset = true;\n }\n this.dispatchEvent({ type: 'control' });\n };\n const endDragging = () => {\n extractClientCoordFromEvent(this._activePointers, _v2);\n lastDragPosition.copy(_v2);\n this._dragNeedsUpdate = false;\n if (this._activePointers.length === 0 ||\n (this._activePointers.length === 1 && this._activePointers[0] === this._lockedPointer)) {\n this._isDragging = false;\n }\n if (this._activePointers.length === 0 && this._domElement) {\n // eslint-disable-next-line no-undef\n this._domElement.ownerDocument.removeEventListener('pointermove', onPointerMove, { passive: false });\n this._domElement.ownerDocument.removeEventListener('pointerup', onPointerUp);\n this.dispatchEvent({ type: 'controlend' });\n }\n };\n this.lockPointer = () => {\n if (!this._enabled || !this._domElement)\n return;\n this.cancel();\n // Element.requestPointerLock is allowed to happen without any pointer active - create a faux one for compatibility with controls\n this._lockedPointer = {\n pointerId: -1,\n clientX: 0,\n clientY: 0,\n deltaX: 0,\n deltaY: 0,\n mouseButton: null,\n };\n this._activePointers.push(this._lockedPointer);\n // eslint-disable-next-line no-undef\n this._domElement.ownerDocument.removeEventListener('pointermove', onPointerMove, { passive: false });\n this._domElement.ownerDocument.removeEventListener('pointerup', onPointerUp);\n this._domElement.requestPointerLock();\n this._domElement.ownerDocument.addEventListener('pointerlockchange', onPointerLockChange);\n this._domElement.ownerDocument.addEventListener('pointerlockerror', onPointerLockError);\n this._domElement.ownerDocument.addEventListener('pointermove', onPointerMove, { passive: false });\n this._domElement.ownerDocument.addEventListener('pointerup', onPointerUp);\n startDragging();\n };\n this.unlockPointer = () => {\n if (this._lockedPointer !== null) {\n this._disposePointer(this._lockedPointer);\n this._lockedPointer = null;\n }\n this._domElement?.ownerDocument.exitPointerLock();\n this._domElement?.ownerDocument.removeEventListener('pointerlockchange', onPointerLockChange);\n this._domElement?.ownerDocument.removeEventListener('pointerlockerror', onPointerLockError);\n this.cancel();\n };\n const onPointerLockChange = () => {\n const isPointerLockActive = this._domElement && this._domElement.ownerDocument.pointerLockElement === this._domElement;\n if (!isPointerLockActive)\n this.unlockPointer();\n };\n const onPointerLockError = () => {\n this.unlockPointer();\n };\n this._addAllEventListeners = (domElement) => {\n this._domElement = domElement;\n this._domElement.style.touchAction = 'none';\n this._domElement.style.userSelect = 'none';\n this._domElement.style.webkitUserSelect = 'none';\n this._domElement.addEventListener('pointerdown', onPointerDown);\n this._domElement.addEventListener('pointercancel', onPointerUp);\n this._domElement.addEventListener('wheel', onMouseWheel, { passive: false });\n this._domElement.addEventListener('contextmenu', onContextMenu);\n };\n this._removeAllEventListeners = () => {\n if (!this._domElement)\n return;\n this._domElement.style.touchAction = '';\n this._domElement.style.userSelect = '';\n this._domElement.style.webkitUserSelect = '';\n this._domElement.removeEventListener('pointerdown', onPointerDown);\n this._domElement.removeEventListener('pointercancel', onPointerUp);\n // https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/removeEventListener#matching_event_listeners_for_removal\n // > it's probably wise to use the same values used for the call to `addEventListener()` when calling `removeEventListener()`\n // see https://github.com/microsoft/TypeScript/issues/32912#issuecomment-522142969\n // eslint-disable-next-line no-undef\n this._domElement.removeEventListener('wheel', onMouseWheel, { passive: false });\n this._domElement.removeEventListener('contextmenu', onContextMenu);\n // eslint-disable-next-line no-undef\n this._domElement.ownerDocument.removeEventListener('pointermove', onPointerMove, { passive: false });\n this._domElement.ownerDocument.removeEventListener('pointerup', onPointerUp);\n this._domElement.ownerDocument.removeEventListener('pointerlockchange', onPointerLockChange);\n this._domElement.ownerDocument.removeEventListener('pointerlockerror', onPointerLockError);\n };\n this.cancel = () => {\n if (this._state === ACTION.NONE)\n return;\n this._state = ACTION.NONE;\n this._activePointers.length = 0;\n endDragging();\n };\n if (domElement)\n this.connect(domElement);\n this.update(0);\n }\n /**\n * The camera to be controlled\n * @category Properties\n */\n get camera() {\n return this._camera;\n }\n set camera(camera) {\n this._camera = camera;\n this.updateCameraUp();\n this._camera.updateProjectionMatrix();\n this._updateNearPlaneCorners();\n this._needsUpdate = true;\n }\n /**\n * Whether or not the controls are enabled.\n * `false` to disable user dragging/touch-move, but all methods works.\n * @category Properties\n */\n get enabled() {\n return this._enabled;\n }\n set enabled(enabled) {\n this._enabled = enabled;\n if (!this._domElement)\n return;\n if (enabled) {\n this._domElement.style.touchAction = 'none';\n this._domElement.style.userSelect = 'none';\n this._domElement.style.webkitUserSelect = 'none';\n }\n else {\n this.cancel();\n this._domElement.style.touchAction = '';\n this._domElement.style.userSelect = '';\n this._domElement.style.webkitUserSelect = '';\n }\n }\n /**\n * Returns `true` if the controls are active updating.\n * readonly value.\n * @category Properties\n */\n get active() {\n return !this._hasRested;\n }\n /**\n * Getter for the current `ACTION`.\n * readonly value.\n * @category Properties\n */\n get currentAction() {\n return this._state;\n }\n /**\n * get/set Current distance.\n * @category Properties\n */\n get distance() {\n return this._spherical.radius;\n }\n set distance(distance) {\n if (this._spherical.radius === distance &&\n this._sphericalEnd.radius === distance)\n return;\n this._spherical.radius = distance;\n this._sphericalEnd.radius = distance;\n this._needsUpdate = true;\n }\n // horizontal angle\n /**\n * get/set the azimuth angle (horizontal) in radians.\n * Every 360 degrees turn is added to `.azimuthAngle` value, which is accumulative.\n * @category Properties\n */\n get azimuthAngle() {\n return this._spherical.theta;\n }\n set azimuthAngle(azimuthAngle) {\n if (this._spherical.theta === azimuthAngle &&\n this._sphericalEnd.theta === azimuthAngle)\n return;\n this._spherical.theta = azimuthAngle;\n this._sphericalEnd.theta = azimuthAngle;\n this._needsUpdate = true;\n }\n // vertical angle\n /**\n * get/set the polar angle (vertical) in radians.\n * @category Properties\n */\n get polarAngle() {\n return this._spherical.phi;\n }\n set polarAngle(polarAngle) {\n if (this._spherical.phi === polarAngle &&\n this._sphericalEnd.phi === polarAngle)\n return;\n this._spherical.phi = polarAngle;\n this._sphericalEnd.phi = polarAngle;\n this._needsUpdate = true;\n }\n /**\n * Whether camera position should be enclosed in the boundary or not.\n * @category Properties\n */\n get boundaryEnclosesCamera() {\n return this._boundaryEnclosesCamera;\n }\n set boundaryEnclosesCamera(boundaryEnclosesCamera) {\n this._boundaryEnclosesCamera = boundaryEnclosesCamera;\n this._needsUpdate = true;\n }\n /**\n * Set drag-start, touches and wheel enable area in the domElement.\n * each values are between `0` and `1` inclusive, where `0` is left/top and `1` is right/bottom of the screen.\n * e.g. `{ x: 0, y: 0, width: 1, height: 1 }` for entire area.\n * @category Properties\n */\n set interactiveArea(interactiveArea) {\n this._interactiveArea.width = clamp(interactiveArea.width, 0, 1);\n this._interactiveArea.height = clamp(interactiveArea.height, 0, 1);\n this._interactiveArea.x = clamp(interactiveArea.x, 0, 1 - this._interactiveArea.width);\n this._interactiveArea.y = clamp(interactiveArea.y, 0, 1 - this._interactiveArea.height);\n }\n /**\n * Adds the specified event listener.\n * Applicable event types (which is `K`) are:\n * | Event name | Timing |\n * | ------------------- | ------ |\n * | `'controlstart'` | When the user starts to control the camera via mouse / touches. ¹ |\n * | `'control'` | When the user controls the camera (dragging). |\n * | `'controlend'` | When the user ends to control the camera. ¹ |\n * | `'transitionstart'` | When any kind of transition starts, either user control or using a method with `enableTransition = true` |\n * | `'update'` | When the camera position is updated. |\n * | `'wake'` | When the camera starts moving. |\n * | `'rest'` | When the camera movement is below `.restThreshold` ². |\n * | `'sleep'` | When the camera end moving. |\n *\n * 1. `mouseButtons.wheel` (Mouse wheel control) does not emit `'controlstart'` and `'controlend'`. `mouseButtons.wheel` uses scroll-event internally, and scroll-event happens intermittently. That means \"start\" and \"end\" cannot be detected.\n * 2. Due to damping, `sleep` will usually fire a few seconds after the camera _appears_ to have stopped moving. If you want to do something (e.g. enable UI, perform another transition) at the point when the camera has stopped, you probably want the `rest` event. This can be fine tuned using the `.restThreshold` parameter. See the [Rest and Sleep Example](https://yomotsu.github.io/camera-controls/examples/rest-and-sleep.html).\n *\n * e.g.\n * ```\n * cameraControl.addEventListener( 'controlstart', myCallbackFunction );\n * ```\n * @param type event name\n * @param listener handler function\n * @category Methods\n */\n addEventListener(type, listener) {\n super.addEventListener(type, listener);\n }\n /**\n * Removes the specified event listener\n * e.g.\n * ```\n * cameraControl.addEventListener( 'controlstart', myCallbackFunction );\n * ```\n * @param type event name\n * @param listener handler function\n * @category Methods\n */\n removeEventListener(type, listener) {\n super.removeEventListener(type, listener);\n }\n /**\n * Rotate azimuthal angle(horizontal) and polar angle(vertical).\n * Every value is added to the current value.\n * @param azimuthAngle Azimuth rotate angle. In radian.\n * @param polarAngle Polar rotate angle. In radian.\n * @param enableTransition Whether to move smoothly or immediately\n * @category Methods\n */\n rotate(azimuthAngle, polarAngle, enableTransition = false) {\n return this.rotateTo(this._sphericalEnd.theta + azimuthAngle, this._sphericalEnd.phi + polarAngle, enableTransition);\n }\n /**\n * Rotate azimuthal angle(horizontal) to the given angle and keep the same polar angle(vertical) target.\n *\n * e.g.\n * ```\n * cameraControls.rotateAzimuthTo( 30 * THREE.MathUtils.DEG2RAD, true );\n * ```\n * @param azimuthAngle Azimuth rotate angle. In radian.\n * @param enableTransition Whether to move smoothly or immediately\n * @category Methods\n */\n rotateAzimuthTo(azimuthAngle, enableTransition = false) {\n return this.rotateTo(azimuthAngle, this._sphericalEnd.phi, enableTransition);\n }\n /**\n * Rotate polar angle(vertical) to the given angle and keep the same azimuthal angle(horizontal) target.\n *\n * e.g.\n * ```\n * cameraControls.rotatePolarTo( 30 * THREE.MathUtils.DEG2RAD, true );\n * ```\n * @param polarAngle Polar rotate angle. In radian.\n * @param enableTransition Whether to move smoothly or immediately\n * @category Methods\n */\n rotatePolarTo(polarAngle, enableTransition = false) {\n return this.rotateTo(this._sphericalEnd.theta, polarAngle, enableTransition);\n }\n /**\n * Rotate azimuthal angle(horizontal) and polar angle(vertical) to the given angle.\n * Camera view will rotate over the orbit pivot absolutely:\n *\n * azimuthAngle\n * ```\n * 0º\n * \\\n * 90º -----+----- -90º\n * \\\n * 180º\n * ```\n * | direction | angle |\n * | --------- | ---------------------- |\n * | front | 0º |\n * | left | 90º (`Math.PI / 2`) |\n * | right | -90º (`- Math.PI / 2`) |\n * | back | 180º (`Math.PI`) |\n *\n * polarAngle\n * ```\n * 180º\n * |\n * 90º\n * |\n * 0º\n * ```\n * | direction | angle |\n * | -------------------- | ---------------------- |\n * | top/sky | 180º (`Math.PI`) |\n * | horizontal from view | 90º (`Math.PI / 2`) |\n * | bottom/floor | 0º |\n *\n * @param azimuthAngle Azimuth rotate angle to. In radian.\n * @param polarAngle Polar rotate angle to. In radian.\n * @param enableTransition Whether to move smoothly or immediately\n * @category Methods\n */\n rotateTo(azimuthAngle, polarAngle, enableTransition = false) {\n this._isUserControllingRotate = false;\n const theta = clamp(azimuthAngle, this.minAzimuthAngle, this.maxAzimuthAngle);\n const phi = clamp(polarAngle, this.minPolarAngle, this.maxPolarAngle);\n this._sphericalEnd.theta = theta;\n this._sphericalEnd.phi = phi;\n this._sphericalEnd.makeSafe();\n this._needsUpdate = true;\n if (!enableTransition) {\n this._spherical.theta = this._sphericalEnd.theta;\n this._spherical.phi = this._sphericalEnd.phi;\n }\n const resolveImmediately = !enableTransition ||\n approxEquals(this._spherical.theta, this._sphericalEnd.theta, this.restThreshold) &&\n approxEquals(this._spherical.phi, this._sphericalEnd.phi, this.restThreshold);\n return this._createOnRestPromise(resolveImmediately);\n }\n /**\n * Dolly in/out camera position.\n * @param distance Distance of dollyIn. Negative number for dollyOut.\n * @param enableTransition Whether to move smoothly or immediately.\n * @category Methods\n */\n dolly(distance, enableTransition = false) {\n return this.dollyTo(this._sphericalEnd.radius - distance, enableTransition);\n }\n /**\n * Dolly in/out camera position to given distance.\n * @param distance Distance of dolly.\n * @param enableTransition Whether to move smoothly or immediately.\n * @category Methods\n */\n dollyTo(distance, enableTransition = false) {\n this._isUserControllingDolly = false;\n this._lastDollyDirection = DOLLY_DIRECTION.NONE;\n this._changedDolly = 0;\n return this._dollyToNoClamp(clamp(distance, this.minDistance, this.maxDistance), enableTransition);\n }\n _dollyToNoClamp(distance, enableTransition = false) {\n const lastRadius = this._sphericalEnd.radius;\n const hasCollider = this.colliderMeshes.length >= 1;\n if (hasCollider) {\n const maxDistanceByCollisionTest = this._collisionTest();\n const isCollided = approxEquals(maxDistanceByCollisionTest, this._spherical.radius);\n const isDollyIn = lastRadius > distance;\n if (!isDollyIn && isCollided)\n return Promise.resolve();\n this._sphericalEnd.radius = Math.min(distance, maxDistanceByCollisionTest);\n }\n else {\n this._sphericalEnd.radius = distance;\n }\n this._needsUpdate = true;\n if (!enableTransition) {\n this._spherical.radius = this._sphericalEnd.radius;\n }\n const resolveImmediately = !enableTransition || approxEquals(this._spherical.radius, this._sphericalEnd.radius, this.restThreshold);\n return this._createOnRestPromise(resolveImmediately);\n }\n /**\n * Dolly in, but does not change the distance between the target and the camera, and moves the target position instead.\n * Specify a negative value for dolly out.\n * @param distance Distance of dolly.\n * @param enableTransition Whether to move smoothly or immediately.\n * @category Methods\n */\n dollyInFixed(distance, enableTransition = false) {\n this._targetEnd.add(this._getCameraDirection(_cameraDirection).multiplyScalar(distance));\n if (!enableTransition) {\n this._target.copy(this._targetEnd);\n }\n const resolveImmediately = !enableTransition ||\n approxEquals(this._target.x, this._targetEnd.x, this.restThreshold) &&\n approxEquals(this._target.y, this._targetEnd.y, this.restThreshold) &&\n approxEquals(this._target.z, this._targetEnd.z, this.restThreshold);\n return this._createOnRestPromise(resolveImmediately);\n }\n /**\n * Zoom in/out camera. The value is added to camera zoom.\n * Limits set with `.minZoom` and `.maxZoom`\n * @param zoomStep zoom scale\n * @param enableTransition Whether to move smoothly or immediately\n * @category Methods\n */\n zoom(zoomStep, enableTransition = false) {\n return this.zoomTo(this._zoomEnd + zoomStep, enableTransition);\n }\n /**\n * Zoom in/out camera to given scale. The value overwrites camera zoom.\n * Limits set with .minZoom and .maxZoom\n * @param zoom\n * @param enableTransition\n * @category Methods\n */\n zoomTo(zoom, enableTransition = false) {\n this._isUserControllingZoom = false;\n this._zoomEnd = clamp(zoom, this.minZoom, this.maxZoom);\n this._needsUpdate = true;\n if (!enableTransition) {\n this._zoom = this._zoomEnd;\n }\n const resolveImmediately = !enableTransition || approxEquals(this._zoom, this._zoomEnd, this.restThreshold);\n this._changedZoom = 0;\n return this._createOnRestPromise(resolveImmediately);\n }\n /**\n * @deprecated `pan()` has been renamed to `truck()`\n * @category Methods\n */\n pan(x, y, enableTransition = false) {\n console.warn('`pan` has been renamed to `truck`');\n return this.truck(x, y, enableTransition);\n }\n /**\n * Truck and pedestal camera using current azimuthal angle\n * @param x Horizontal translate amount\n * @param y Vertical translate amount\n * @param enableTransition Whether to move smoothly or immediately\n * @category Methods\n */\n truck(x, y, enableTransition = false) {\n this._camera.updateMatrix();\n _xColumn.setFromMatrixColumn(this._camera.matrix, 0);\n _yColumn.setFromMatrixColumn(this._camera.matrix, 1);\n _xColumn.multiplyScalar(x);\n _yColumn.multiplyScalar(-y);\n const offset = _v3A.copy(_xColumn).add(_yColumn);\n const to = _v3B.copy(this._targetEnd).add(offset);\n return this.moveTo(to.x, to.y, to.z, enableTransition);\n }\n /**\n * Move forward / backward.\n * @param distance Amount to move forward / backward. Negative value to move backward\n * @param enableTransition Whether to move smoothly or immediately\n * @category Methods\n */\n forward(distance, enableTransition = false) {\n _v3A.setFromMatrixColumn(this._camera.matrix, 0);\n _v3A.crossVectors(this._camera.up, _v3A);\n _v3A.multiplyScalar(distance);\n const to = _v3B.copy(this._targetEnd).add(_v3A);\n return this.moveTo(to.x, to.y, to.z, enableTransition);\n }\n /**\n * Move up / down.\n * @param height Amount to move up / down. Negative value to move down\n * @param enableTransition Whether to move smoothly or immediately\n * @category Methods\n */\n elevate(height, enableTransition = false) {\n _v3A.copy(this._camera.up).multiplyScalar(height);\n return this.moveTo(this._targetEnd.x + _v3A.x, this._targetEnd.y + _v3A.y, this._targetEnd.z + _v3A.z, enableTransition);\n }\n /**\n * Move target position to given point.\n * @param x x coord to move center position\n * @param y y coord to move center position\n * @param z z coord to move center position\n * @param enableTransition Whether to move smoothly or immediately\n * @category Methods\n */\n moveTo(x, y, z, enableTransition = false) {\n this._isUserControllingTruck = false;\n const offset = _v3A.set(x, y, z).sub(this._targetEnd);\n this._encloseToBoundary(this._targetEnd, offset, this.boundaryFriction);\n this._needsUpdate = true;\n if (!enableTransition) {\n this._target.copy(this._targetEnd);\n }\n const resolveImmediately = !enableTransition ||\n approxEquals(this._target.x, this._targetEnd.x, this.restThreshold) &&\n approxEquals(this._target.y, this._targetEnd.y, this.restThreshold) &&\n approxEquals(this._target.z, this._targetEnd.z, this.restThreshold);\n return this._createOnRestPromise(resolveImmediately);\n }\n /**\n * Look in the given point direction.\n * @param x point x.\n * @param y point y.\n * @param z point z.\n * @param enableTransition Whether to move smoothly or immediately.\n * @returns Transition end promise\n * @category Methods\n */\n lookInDirectionOf(x, y, z, enableTransition = false) {\n const point = _v3A.set(x, y, z);\n const direction = point.sub(this._targetEnd).normalize();\n const position = direction.multiplyScalar(-this._sphericalEnd.radius).add(this._targetEnd);\n return this.setPosition(position.x, position.y, position.z, enableTransition);\n }\n /**\n * Fit the viewport to the box or the bounding box of the object, using the nearest axis. paddings are in unit.\n * set `cover: true` to fill enter screen.\n * e.g.\n * ```\n * cameraControls.fitToBox( myMesh );\n * ```\n * @param box3OrObject Axis aligned bounding box to fit the view.\n * @param enableTransition Whether to move smoothly or immediately.\n * @param options | `<object>` { cover: boolean, paddingTop: number, paddingLeft: number, paddingBottom: number, paddingRight: number }\n * @returns Transition end promise\n * @category Methods\n */\n fitToBox(box3OrObject, enableTransition, { cover = false, paddingLeft = 0, paddingRight = 0, paddingBottom = 0, paddingTop = 0 } = {}) {\n const promises = [];\n const aabb = box3OrObject.isBox3\n ? _box3A.copy(box3OrObject)\n : _box3A.setFromObject(box3OrObject);\n if (aabb.isEmpty()) {\n console.warn('camera-controls: fitTo() cannot be used with an empty box. Aborting');\n Promise.resolve();\n }\n // round to closest axis ( forward | backward | right | left | top | bottom )\n const theta = roundToStep(this._sphericalEnd.theta, PI_HALF);\n const phi = roundToStep(this._sphericalEnd.phi, PI_HALF);\n promises.push(this.rotateTo(theta, phi, enableTransition));\n const normal = _v3A.setFromSpherical(this._sphericalEnd).normalize();\n const rotation = _quaternionA.setFromUnitVectors(normal, _AXIS_Z);\n const viewFromPolar = approxEquals(Math.abs(normal.y), 1);\n if (viewFromPolar) {\n rotation.multiply(_quaternionB.setFromAxisAngle(_AXIS_Y, theta));\n }\n rotation.multiply(this._yAxisUpSpaceInverse);\n // make oriented bounding box\n const bb = _box3B.makeEmpty();\n // left bottom back corner\n _v3B.copy(aabb.min).applyQuaternion(rotation);\n bb.expandByPoint(_v3B);\n // right bottom back corner\n _v3B.copy(aabb.min).setX(aabb.max.x).applyQuaternion(rotation);\n bb.expandByPoint(_v3B);\n // left top back corner\n _v3B.copy(aabb.min).setY(aabb.max.y).applyQuaternion(rotation);\n bb.expandByPoint(_v3B);\n // right top back corner\n _v3B.copy(aabb.max).setZ(aabb.min.z).applyQuaternion(rotation);\n bb.expandByPoint(_v3B);\n // left bottom front corner\n _v3B.copy(aabb.min).setZ(aabb.max.z).applyQuaternion(rotation);\n bb.expandByPoint(_v3B);\n // right bottom front corner\n _v3B.copy(aabb.max).setY(aabb.min.y).applyQuaternion(rotation);\n bb.expandByPoint(_v3B);\n // left top front corner\n _v3B.copy(aabb.max).setX(aabb.min.x).applyQuaternion(rotation);\n bb.expandByPoint(_v3B);\n // right top front corner\n _v3B.copy(aabb.max).applyQuaternion(rotation);\n bb.expandByPoint(_v3B);\n // add padding\n bb.min.x -= paddingLeft;\n bb.min.y -= paddingBottom;\n bb.max.x += paddingRight;\n bb.max.y += paddingTop;\n rotation.setFromUnitVectors(_AXIS_Z, normal);\n if (viewFromPolar) {\n rotation.premultiply(_quaternionB.invert());\n }\n rotation.premultiply(this._yAxisUpSpace);\n const bbSize = bb.getSize(_v3A);\n const center = bb.getCenter(_v3B).applyQuaternion(rotation);\n if (isPerspectiveCamera(this._camera)) {\n const distance = this.getDistanceToFitBox(bbSize.x, bbSize.y, bbSize.z, cover);\n promises.push(this.moveTo(center.x, center.y, center.z, enableTransition));\n promises.push(this.dollyTo(distance, enableTransition));\n promises.push(this.setFocalOffset(0, 0, 0, enableTransition));\n }\n else if (isOrthographicCamera(this._camera)) {\n const camera = this._camera;\n const width = camera.right - camera.left;\n const height = camera.top - camera.bottom;\n const zoom = cover ? Math.max(width / bbSize.x, height / bbSize.y) : Math.min(width / bbSize.x, height / bbSize.y);\n promises.push(this.moveTo(center.x, center.y, center.z, enableTransition));\n promises.push(this.zoomTo(zoom, enableTransition));\n promises.push(this.setFocalOffset(0, 0, 0, enableTransition));\n }\n return Promise.all(promises);\n }\n /**\n * Fit the viewport to the sphere or the bounding sphere of the object.\n * @param sphereOrMesh\n * @param enableTransition\n * @category Methods\n */\n fitToSphere(sphereOrMesh, enableTransition) {\n const promises = [];\n const isObject3D = 'isObject3D' in sphereOrMesh;\n const boundingSphere = isObject3D ?\n CameraControls.createBoundingSphere(sphereOrMesh, _sphere) :\n _sphere.copy(sphereOrMesh);\n promises.push(this.moveTo(boundingSphere.center.x, boundingSphere.center.y, boundingSphere.center.z, enableTransition));\n if (isPerspectiveCamera(this._camera)) {\n const distanceToFit = this.getDistanceToFitSphere(boundingSphere.radius);\n promises.push(this.dollyTo(distanceToFit, enableTransition));\n }\n else if (isOrthographicCamera(this._camera)) {\n const width = this._camera.right - this._camera.left;\n const height = this._camera.top - this._camera.bottom;\n const diameter = 2 * boundingSphere.radius;\n const zoom = Math.min(width / diameter, height / diameter);\n promises.push(this.zoomTo(zoom, enableTransition));\n }\n promises.push(this.setFocalOffset(0, 0, 0, enableTransition));\n return Promise.all(promises);\n }\n /**\n * Look at the `target` from the `position`.\n * @param positionX\n * @param positionY\n * @param positionZ\n * @param targetX\n * @param targetY\n * @param targetZ\n * @param enableTransition\n * @category Methods\n */\n setLookAt(positionX, positionY, positionZ, targetX, targetY, targetZ, enableTransition = false) {\n this._isUserControllingRotate = false;\n this._isUserControllingDolly = false;\n this._isUserControllingTruck = false;\n this._lastDollyDirection = DOLLY_DIRECTION.NONE;\n this._changedDolly = 0;\n const target = _v3B.set(targetX, targetY, targetZ);\n const position = _v3A.set(positionX, positionY, positionZ);\n this._targetEnd.copy(target);\n this._sphericalEnd.setFromVector3(position.sub(target).applyQuaternion(this._yAxisUpSpace));\n this._needsUpdate = true;\n if (!enableTransition) {\n this._target.copy(this._targetEnd);\n this._spherical.copy(this._sphericalEnd);\n }\n const resolveImmediately = !enableTransition ||\n approxEquals(this._target.x, this._targetEnd.x, this.restThreshold) &&\n approxEquals(this._target.y, this._targetEnd.y, this.restThreshold) &&\n approxEquals(this._target.z, this._targetEnd.z, this.restThreshold) &&\n approxEquals(this._spherical.theta, this._sphericalEnd.theta, this.restThreshold) &&\n approxEquals(this._spherical.phi, this._sphericalEnd.phi, this.restThreshold) &&\n approxEquals(this._spherical.radius, this._sphericalEnd.radius, this.restThreshold);\n return this._createOnRestPromise(resolveImmediately);\n }\n /**\n * Interpolates between two states.\n * @param stateA\n * @param stateB\n * @param t\n * @param enableTransition\n * @category Methods\n */\n lerp(stateA, stateB, t, enableTransition = false) {\n this._isUserControllingRotate = false;\n this._isUserControllingDolly = false;\n this._isUserControllingTruck = false;\n this._lastDollyDirection = DOLLY_DIRECTION.NONE;\n this._changedDolly = 0;\n const targetA = _v3A.set(...stateA.target);\n if ('spherical' in stateA) {\n _sphericalA.set(...stateA.spherical);\n }\n else {\n const positionA = _v3B.set(...stateA.position);\n _sphericalA.setFromVector3(positionA.sub(targetA).applyQuaternion(this._yAxisUpSpace));\n }\n const targetB = _v3C.set(...stateB.target);\n if ('spherical' in stateB) {\n _sphericalB.set(...stateB.spherical);\n }\n else {\n const positionB = _v3B.set(...stateB.position);\n _sphericalB.setFromVector3(positionB.sub(targetB).applyQuaternion(this._yAxisUpSpace));\n }\n this._targetEnd.copy(targetA.lerp(targetB, t)); // tricky\n const deltaTheta = _sphericalB.theta - _sphericalA.theta;\n const deltaPhi = _sphericalB.phi - _sphericalA.phi;\n const deltaRadius = _sphericalB.radius - _sphericalA.radius;\n this._sphericalEnd.set(_sphericalA.radius + deltaRadius * t, _sphericalA.phi + deltaPhi * t, _sphericalA.theta + deltaTheta * t);\n this._needsUpdate = true;\n if (!enableTransition) {\n this._target.copy(this._targetEnd);\n this._spherical.copy(this._sphericalEnd);\n }\n const resolveImmediately = !enableTransition ||\n approxEquals(this._target.x, this._targetEnd.x, this.restThreshold) &&\n approxEquals(this._target.y, this._targetEnd.y, this.restThreshold) &&\n approxEquals(this._target.z, this._targetEnd.z, this.restThreshold) &&\n approxEquals(this._spherical.theta, this._sphericalEnd.theta, this.restThreshold) &&\n approxEquals(this._spherical.phi, this._sphericalEnd.phi, this.restThreshold) &&\n approxEquals(this._spherical.radius, this._sphericalEnd.radius, this.restThreshold);\n return this._createOnRestPromise(resolveImmediately);\n }\n /**\n * Similar to setLookAt, but it interpolates between two states.\n * @param positionAX\n * @param positionAY\n * @param positionAZ\n * @param targetAX\n * @param targetAY\n * @param targetAZ\n * @param positionBX\n * @param positionBY\n * @param positionBZ\n * @param targetBX\n * @param targetBY\n * @param targetBZ\n * @param t\n * @param enableTransition\n * @category Methods\n */\n lerpLookAt(positionAX, positionAY, positionAZ, targetAX, targetAY, targetAZ, positionBX, positionBY, positionBZ, targetBX, targetBY, targetBZ, t, enableTransition = false) {\n return this.lerp({\n position: [positionAX, positionAY, positionAZ],\n target: [targetAX, targetAY, targetAZ],\n }, {\n position: [positionBX, positionBY, positionBZ],\n target: [targetBX, targetBY, targetBZ],\n }, t, enableTransition);\n }\n /**\n * Set angle and distance by given position.\n * An alias of `setLookAt()`, without target change. Thus keep gazing at the current target\n * @param positionX\n * @param positionY\n * @param positionZ\n * @param enableTransition\n * @category Methods\n */\n setPosition(positionX, positionY, positionZ, enableTransition = false) {\n return this.setLookAt(positionX, positionY, positionZ, this._targetEnd.x, this._targetEnd.y, this._targetEnd.z, enableTransition);\n }\n /**\n * Set the target position where gaze at.\n * An alias of `setLookAt()`, without position change. Thus keep the same position.\n * @param targetX\n * @param targetY\n * @param targetZ\n * @param enableTransition\n * @category Methods\n */\n setTarget(targetX, targetY, targetZ, enableTransition = false) {\n const pos = this.getPosition(_v3A);\n const promise = this.setLookAt(pos.x, pos.y, pos.z, targetX, targetY, targetZ, enableTransition);\n // see https://github.com/yomotsu/camera-controls/issues/335\n this._sphericalEnd.phi = clamp(this._sphericalEnd.phi, this.minPolarAngle, this.maxPolarAngle);\n return promise;\n }\n /**\n * Set focal offset using the screen parallel coordinates. z doesn't affect in Orthographic as with Dolly.\n * @param x\n * @param y\n * @param z\n * @param enableTransition\n * @category Methods\n */\n setFocalOffset(x, y, z, enableTransition = false) {\n this._isUserControllingOffset = false;\n this._focalOffsetEnd.set(x, y, z);\n this._needsUpdate = true;\n if (!enableTransition)\n this._focalOffset.copy(this._focalOffsetEnd);\n const resolveImmediately = !enableTransition ||\n approxEquals(this._focalOffset.x, this._focalOffsetEnd.x, this.restThreshold) &&\n approxEquals(this._focalOffset.y, this._focalOffsetEnd.y, this.restThreshold) &&\n approxEquals(this._focalOffset.z, this._focalOffsetEnd.z, this.restThreshold);\n return this._createOnRestPromise(resolveImmediately);\n }\n /**\n * Set orbit point without moving the camera.\n * SHOULD NOT RUN DURING ANIMATIONS. `setOrbitPoint()` will immediately fix the positions.\n * @param targetX\n * @param targetY\n * @param targetZ\n * @category Methods\n */\n setOrbitPoint(targetX, targetY, targetZ) {\n this._camera.updateMatrixWorld();\n _xColumn.setFromMatrixColumn(this._camera.matrixWorldInverse, 0);\n _yColumn.setFromMatrixColumn(this._camera.matrixWorldInverse, 1);\n _zColumn.setFromMatrixColumn(this._camera.matrixWorldInverse, 2);\n const position = _v3A.set(targetX, targetY, targetZ);\n const distance = position.distanceTo(this._camera.position);\n const cameraToPoint = position.sub(this._camera.position);\n _xColumn.multiplyScalar(cameraToPoint.x);\n _yColumn.multiplyScalar(cameraToPoint.y);\n _zColumn.multiplyScalar(cameraToPoint.z);\n _v3A.copy(_xColumn).add(_yColumn).add(_zColumn);\n _v3A.z = _v3A.z + distance;\n this.dollyTo(distance, false);\n this.setFocalOffset(-_v3A.x, _v3A.y, -_v3A.z, false);\n this.moveTo(targetX, targetY, targetZ, false);\n }\n /**\n * Set the boundary box that encloses the target of the camera. box3 is in THREE.Box3\n * @param box3\n * @category Methods\n */\n setBoundary(box3) {\n if (!box3) {\n this._boundary.min.set(-Infinity, -Infinity, -Infinity);\n this._boundary.max.set(Infinity, Infinity, Infinity);\n this._needsUpdate = true;\n return;\n }\n this._boundary.copy(box3);\n this._boundary.clampPoint(this._targetEnd, this._targetEnd);\n this._needsUpdate = true;\n }\n /**\n * Set (or unset) the current viewport.\n * Set this when you want to use renderer viewport and .dollyToCursor feature at the same time.\n * @param viewportOrX\n * @param y\n * @param width\n * @param height\n * @category Methods\n */\n setViewport(viewportOrX, y, width, height) {\n if (viewportOrX === null) { // null\n this._viewport = null;\n return;\n }\n this._viewport = this._viewport || new THREE.Vector4();\n if (typeof viewportOrX === 'number') { // number\n this._viewport.set(viewportOrX, y, width, height);\n }\n else { // Vector4\n this._viewport.copy(viewportOrX);\n }\n }\n /**\n * Calculate the distance to fit the box.\n * @param width box width\n * @param height box height\n * @param depth box depth\n * @returns distance\n * @category Methods\n */\n getDistanceToFitBox(width, height, depth, cover = false) {\n if (notSupportedInOrthographicCamera(this._camera, 'getDistanceToFitBox'))\n return this._spherical.radius;\n const boundingRectAspect = width / height;\n const fov = this._camera.getEffectiveFOV() * DEG2RAD;\n const aspect = this._camera.aspect;\n const heightToFit = (cover ? boundingRectAspect > aspect : boundingRectAspect < aspect) ? height : width / aspect;\n return heightToFit * 0.5 / Math.tan(fov * 0.5) + depth * 0.5;\n }\n /**\n * Calculate the distance to fit the sphere.\n * @param radius sphere radius\n * @returns distance\n * @category Methods\n */\n getDistanceToFitSphere(radius) {\n if (notSupportedInOrthographicCamera(this._camera, 'getDistanceToFitSphere'))\n return this._spherical.radius;\n // https://stackoverflow.com/a/44849975\n const vFOV = this._camera.getEffectiveFOV() * DEG2RAD;\n const hFOV = Math.atan(Math.tan(vFOV * 0.5) * this._camera.aspect) * 2;\n const fov = 1 < this._camera.aspect ? vFOV : hFOV;\n return radius / (Math.sin(fov * 0.5));\n }\n /**\n * Returns the orbit center position, where the camera looking at.\n * @param out The receiving Vector3 instance to copy the result\n * @param receiveEndValue Whether receive the transition end coords or current. default is `true`\n * @category Methods\n */\n getTarget(out, receiveEndValue = true) {\n const _out = !!out && out.isVector3 ? out : new THREE.Vector3();\n return _out.copy(receiveEndValue ? this._targetEnd : this._target);\n }\n /**\n * Returns the camera position.\n * @param out The receiving Vector3 instance to copy the result\n * @param receiveEndValue Whether receive the transition end coords or current. default is `true`\n * @category Methods\n */\n getPosition(out, receiveEndValue = true) {\n const _out = !!out && out.isVector3 ? out : new THREE.Vector3();\n return _out.setFromSpherical(receiveEndValue ? this._sphericalEnd : this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(receiveEndValue ? this._targetEnd : this._target);\n }\n /**\n * Returns the spherical coordinates of the orbit.\n * @param out The receiving Spherical instance to copy the result\n * @param receiveEndValue Whether receive the transition end coords or current. default is `true`\n * @category Methods\n */\n getSpherical(out, receiveEndValue = true) {\n const _out = out || new THREE.Spherical();\n return _out.copy(receiveEndValue ? this._sphericalEnd : this._spherical);\n }\n /**\n * Returns the focal offset, which is how much the camera appears to be translated in screen parallel coordinates.\n * @param out The receiving Vector3 instance to copy the result\n * @param receiveEndValue Whether receive the transition end coords or current. default is `true`\n * @category Methods\n */\n getFocalOffset(out, receiveEndValue = true) {\n const _out = !!out && out.isVector3 ? out : new THREE.Vector3();\n return _out.copy(receiveEndValue ? this._focalOffsetEnd : this._focalOffset);\n }\n /**\n * Normalize camera azimuth angle (horizontal rotation) between -180 and 180 degrees.\n * @returns This CameraControls instance.\n * @category Methods\n */\n normalizeRotations() {\n this._sphericalEnd.theta = ((this._sphericalEnd.theta % PI_2) + PI_2) % PI_2;\n if (this._sphericalEnd.theta > Math.PI)\n this._sphericalEnd.theta -= PI_2;\n this._spherical.theta += PI_2 * Math.round((this._sphericalEnd.theta - this._spherical.theta) / PI_2);\n return this;\n }\n /**\n * stop all transitions.\n */\n stop() {\n this._focalOffset.copy(this._focalOffsetEnd);\n this._target.copy(this._targetEnd);\n this._spherical.copy(this._sphericalEnd);\n this._zoom = this._zoomEnd;\n }\n /**\n * Reset all rotation and position to defaults.\n * @param enableTransition\n * @category Methods\n */\n reset(enableTransition = false) {\n if (!approxEquals(this._camera.up.x, this._cameraUp0.x) ||\n !approxEquals(this._camera.up.y, this._cameraUp0.y) ||\n !approxEquals(this._camera.up.z, this._cameraUp0.z)) {\n this._camera.up.copy(this._cameraUp0);\n const position = this.getPosition(_v3A);\n this.updateCameraUp();\n this.setPosition(position.x, position.y, position.z);\n }\n const promises = [\n this.setLookAt(this._position0.x, this._position0.y, this._position0.z, this._target0.x, this._target0.y, this._target0.z, enableTransition),\n this.setFocalOffset(this._focalOffset0.x, this._focalOffset0.y, this._focalOffset0.z, enableTransition),\n this.zoomTo(this._zoom0, enableTransition),\n ];\n return Promise.all(promises);\n }\n /**\n * Set current camera position as the default position.\n * @category Methods\n */\n saveState() {\n this._cameraUp0.copy(this._camera.up);\n this.getTarget(this._target0);\n this.getPosition(this._position0);\n this._zoom0 = this._zoom;\n this._focalOffset0.copy(this._focalOffset);\n }\n /**\n * Sync camera-up direction.\n * When camera-up vector is changed, `.updateCameraUp()` must be called.\n * @category Methods\n */\n updateCameraUp() {\n this._yAxisUpSpace.setFromUnitVectors(this._camera.up, _AXIS_Y);\n this._yAxisUpSpaceInverse.copy(this._yAxisUpSpace).invert();\n }\n /**\n * Apply current camera-up direction to the camera.\n * The orbit system will be re-initialized with the current position.\n * @category Methods\n */\n applyCameraUp() {\n const cameraDirection = _v3A.subVectors(this._target, this._camera.position).normalize();\n // So first find the vector off to the side, orthogonal to both this.object.up and\n // the \"view\" vector.\n const side = _v3B.crossVectors(cameraDirection, this._camera.up);\n // Then find the vector orthogonal to both this \"side\" vector and the \"view\" vector.\n // This vector will be the new \"up\" vector.\n this._camera.up.crossVectors(side, cameraDirection).normalize();\n this._camera.updateMatrixWorld();\n const position = this.getPosition(_v3A);\n this.updateCameraUp();\n this.setPosition(position.x, position.y, position.z);\n }\n /**\n * Update camera position and directions.\n * This should be called in your tick loop every time, and returns true if re-rendering is needed.\n * @param delta\n * @returns updated\n * @category Methods\n */\n update(delta) {\n const deltaTheta = this._sphericalEnd.theta - this._spherical.theta;\n const deltaPhi = this._sphericalEnd.phi - this._spherical.phi;\n const deltaRadius = this._sphericalEnd.radius - this._spherical.radius;\n const deltaTarget = _deltaTarget.subVectors(this._targetEnd, this._target);\n const deltaOffset = _deltaOffset.subVectors(this._focalOffsetEnd, this._focalOffset);\n const deltaZoom = this._zoomEnd - this._zoom;\n // update theta\n if (approxZero(deltaTheta)) {\n this._thetaVelocity.value = 0;\n this._spherical.theta = this._sphericalEnd.theta;\n }\n else {\n const smoothTime = this._isUserControllingRotate ? this.draggingSmoothTime : this.smoothTime;\n this._spherical.theta = smoothDamp(this._spherical.theta, this._sphericalEnd.theta, this._thetaVelocity, smoothTime, Infinity, delta);\n this._needsUpdate = true;\n }\n // update phi\n if (approxZero(deltaPhi)) {\n this._phiVelocity.value = 0;\n this._spherical.phi = this._sphericalEnd.phi;\n }\n else {\n const smoothTime = this._isUserControllingRotate ? this.draggingSmoothTime : this.smoothTime;\n this._spherical.phi = smoothDamp(this._spherical.phi, this._sphericalEnd.phi, this._phiVelocity, smoothTime, Infinity, delta);\n this._needsUpdate = true;\n }\n // update distance\n if (approxZero(deltaRadius)) {\n this._radiusVelocity.value = 0;\n this._spherical.radius = this._sphericalEnd.radius;\n }\n else {\n const smoothTime = this._isUserControllingDolly ? this.draggingSmoothTime : this.smoothTime;\n this._spherical.radius = smoothDamp(this._spherical.radius, this._sphericalEnd.radius, this._radiusVelocity, smoothTime, this.maxSpeed, delta);\n this._needsUpdate = true;\n }\n // update target position\n if (approxZero(deltaTarget.x) && approxZero(deltaTarget.y) && approxZero(deltaTarget.z)) {\n this._targetVelocity.set(0, 0, 0);\n this._target.copy(this._targetEnd);\n }\n else {\n const smoothTime = this._isUserControllingTruck ? this.draggingSmoothTime : this.smoothTime;\n smoothDampVec3(this._target, this._targetEnd, this._targetVelocity, smoothTime, this.maxSpeed, delta, this._target);\n this._needsUpdate = true;\n }\n // update focalOffset\n if (approxZero(deltaOffset.x) && approxZero(deltaOffset.y) && approxZero(deltaOffset.z)) {\n this._focalOffsetVelocity.set(0, 0, 0);\n this._focalOffset.copy(this._focalOffsetEnd);\n }\n else {\n const smoothTime = this._isUserControllingOffset ? this.draggingSmoothTime : this.smoothTime;\n smoothDampVec3(this._focalOffset, this._focalOffsetEnd, this._focalOffsetVelocity, smoothTime, this.maxSpeed, delta, this._focalOffset);\n this._needsUpdate = true;\n }\n // update zoom\n if (approxZero(deltaZoom)) {\n this._zoomVelocity.value = 0;\n this._zoom = this._zoomEnd;\n }\n else {\n const smoothTime = this._isUserControllingZoom ? this.draggingSmoothTime : this.smoothTime;\n this._zoom = smoothDamp(this._zoom, this._zoomEnd, this._zoomVelocity, smoothTime, Infinity, delta);\n }\n if (this.dollyToCursor) {\n if (isPerspectiveCamera(this._camera) && this._changedDolly !== 0) {\n const dollyControlAmount = this._spherical.radius - this._lastDistance;\n const camera = this._camera;\n const cameraDirection = this._getCameraDirection(_cameraDirection);\n const planeX = _v3A.copy(cameraDirection).cross(camera.up).normalize();\n if (planeX.lengthSq() === 0)\n planeX.x = 1.0;\n const planeY = _v3B.crossVectors(planeX, cameraDirection);\n const worldToScreen = this._sphericalEnd.radius * Math.tan(camera.getEffectiveFOV() * DEG2RAD * 0.5);\n const prevRadius = this._sphericalEnd.radius - dollyControlAmount;\n const lerpRatio = (prevRadius - this._sphericalEnd.radius) / this._sphericalEnd.radius;\n const cursor = _v3C.copy(this._targetEnd)\n .add(planeX.multiplyScalar(this._dollyControlCoord.x * worldToScreen * camera.aspect))\n .add(planeY.multiplyScalar(this._dollyControlCoord.y * worldToScreen));\n const newTargetEnd = _v3A.copy(this._targetEnd).lerp(cursor, lerpRatio);\n const isMin = this._lastDollyDirection === DOLLY_DIRECTION.IN && this._spherical.radius <= this.minDistance;\n const isMax = this._lastDollyDirection === DOLLY_DIRECTION.OUT && this.maxDistance <= this._spherical.radius;\n if (this.infinityDolly && (isMin || isMax)) {\n this._sphericalEnd.radius -= dollyControlAmount;\n this._spherical.radius -= dollyControlAmount;\n const dollyAmount = _v3B.copy(cameraDirection).multiplyScalar(-dollyControlAmount);\n newTargetEnd.add(dollyAmount);\n }\n // target position may be moved beyond boundary.\n this._boundary.clampPoint(newTargetEnd, newTargetEnd);\n const targetEndDiff = _v3B.subVectors(newTargetEnd, this._targetEnd);\n this._targetEnd.copy(newTargetEnd);\n this._target.add(targetEndDiff);\n this._changedDolly -= dollyControlAmount;\n if (approxZero(this._changedDolly))\n this._changedDolly = 0;\n }\n else if (isOrthographicCamera(this._camera) && this._changedZoom !== 0) {\n const dollyControlAmount = this._zoom - this._lastZoom;\n const camera = this._camera;\n const worldCursorPosition = _v3A.set(this._dollyControlCoord.x, this._dollyControlCoord.y, (camera.near + camera.far) / (camera.near - camera.far)).unproject(camera);\n const quaternion = _v3B.set(0, 0, -1).applyQuaternion(camera.quaternion);\n const cursor = _v3C.copy(worldCursorPosition).add(quaternion.multiplyScalar(-worldCursorPosition.dot(camera.up)));\n const prevZoom = this._zoom - dollyControlAmount;\n const lerpRatio = -(prevZoom - this._zoom) / this._zoom;\n // find the \"distance\" (aka plane constant in three.js) of Plane\n // from a given position (this._targetEnd) and normal vector (cameraDirection)\n // https://www.maplesoft.com/support/help/maple/view.aspx?path=MathApps%2FEquationOfAPlaneNormal#bkmrk0\n const cameraDirection = this._getCameraDirection(_cameraDirection);\n const prevPlaneConstant = this._targetEnd.dot(cameraDirection);\n const newTargetEnd = _v3A.copy(this._targetEnd).lerp(cursor, lerpRatio);\n const newPlaneConstant = newTargetEnd.dot(cameraDirection);\n // Pull back the camera depth that has moved, to be the camera stationary as zoom\n const pullBack = cameraDirection.multiplyScalar(newPlaneConstant - prevPlaneConstant);\n newTargetEnd.sub(pullBack);\n // target position may be moved beyond boundary.\n this._boundary.clampPoint(newTargetEnd, newTargetEnd);\n const targetEndDiff = _v3B.subVectors(newTargetEnd, this._targetEnd);\n this._targetEnd.copy(newTargetEnd);\n this._target.add(targetEndDiff);\n // this._target.copy( this._targetEnd );\n this._changedZoom -= dollyControlAmount;\n if (approxZero(this._changedZoom))\n this._changedZoom = 0;\n }\n }\n if (this._camera.zoom !== this._zoom) {\n this._camera.zoom = this._zoom;\n this._camera.updateProjectionMatrix();\n this._updateNearPlaneCorners();\n this._needsUpdate = true;\n }\n this._dragNeedsUpdate = true;\n // collision detection\n const maxDistance = this._collisionTest();\n this._spherical.radius = Math.min(this._spherical.radius, maxDistance);\n // decompose spherical to the camera position\n this._spherical.makeSafe();\n this._camera.position.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse).add(this._target);\n this._camera.lookAt(this._target);\n // set offset after the orbit movement\n const affectOffset = !approxZero(this._focalOffset.x) ||\n !approxZero(this._focalOffset.y) ||\n !approxZero(this._focalOffset.z);\n if (affectOffset) {\n this._camera.matrix.compose(this._camera.position, this._camera.quaternion, this._camera.scale);\n _xColumn.setFromMatrixColumn(this._camera.matrix, 0);\n _yColumn.setFromMatrixColumn(this._camera.matrix, 1);\n _zColumn.setFromMatrixColumn(this._camera.matrix, 2);\n _xColumn.multiplyScalar(this._focalOffset.x);\n _yColumn.multiplyScalar(-this._focalOffset.y);\n _zColumn.multiplyScalar(this._focalOffset.z); // notice: z-offset will not affect in Orthographic.\n _v3A.copy(_xColumn).add(_yColumn).add(_zColumn);\n this._camera.position.add(_v3A);\n this._camera.updateMatrixWorld();\n }\n if (this._boundaryEnclosesCamera) {\n this._encloseToBoundary(this._camera.position.copy(this._target), _v3A.setFromSpherical(this._spherical).applyQuaternion(this._yAxisUpSpaceInverse), 1.0);\n }\n const updated = this._needsUpdate;\n if (updated && !this._updatedLastTime) {\n this._hasRested = false;\n this.dispatchEvent({ type: 'wake' });\n this.dispatchEvent({ type: 'update' });\n }\n else if (updated) {\n this.dispatchEvent({ type: 'update' });\n if (approxZero(deltaTheta, this.restThreshold) &&\n approxZero(deltaPhi, this.restThreshold) &&\n approxZero(deltaRadius, this.restThreshold) &&\n approxZero(deltaTarget.x, this.restThreshold) &&\n approxZero(deltaTarget.y, this.restThreshold) &&\n approxZero(deltaTarget.z, this.restThreshold) &&\n approxZero(deltaOffset.x, this.restThreshold) &&\n approxZero(deltaOffset.y, this.restThreshold) &&\n approxZero(deltaOffset.z, this.restThreshold) &&\n approxZero(deltaZoom, this.restThreshold) &&\n !this._hasRested) {\n this._hasRested = true;\n this.dispatchEvent({ type: 'rest' });\n }\n }\n else if (!updated && this._updatedLastTime) {\n this.dispatchEvent({ type: 'sleep' });\n }\n this._lastDistance = this._spherical.radius;\n this._lastZoom = this._zoom;\n this._updatedLastTime = updated;\n this._needsUpdate = false;\n return updated;\n }\n /**\n * Get all state in JSON string\n * @category Methods\n */\n toJSON() {\n return JSON.stringify({\n enabled: this._enabled,\n minDistance: this.minDistance,\n maxDistance: infinityToMaxNumber(this.maxDistance),\n minZoom: this.minZoom,\n maxZoom: infinityToMaxNumber(this.maxZoom),\n minPolarAngle: this.minPolarAngle,\n maxPolarAngle: infinityToMaxNumber(this.maxPolarAngle),\n minAzimuthAngle: infinityToMaxNumber(this.minAzimuthAngle),\n maxAzimuthAngle: infinityToMaxNumber(this.maxAzimuthAngle),\n smoothTime: this.smoothTime,\n draggingSmoothTime: this.draggingSmoothTime,\n dollySpeed: this.dollySpeed,\n truckSpeed: this.truckSpeed,\n dollyToCursor: this.dollyToCursor,\n target: this._targetEnd.toArray(),\n position: _v3A.setFromSpherical(this._sphericalEnd).add(this._targetEnd).toArray(),\n zoom: this._zoomEnd,\n focalOffset: this._focalOffsetEnd.toArray(),\n target0: this._target0.toArray(),\n position0: this._position0.toArray(),\n zoom0: this._zoom0,\n focalOffset0: this._focalOffset0.toArray(),\n });\n }\n /**\n * Reproduce the control state with JSON. enableTransition is where anim or not in a boolean.\n * @param json\n * @param enableTransition\n * @category Methods\n */\n fromJSON(json, enableTransition = false) {\n const obj = JSON.parse(json);\n this.enabled = obj.enabled;\n this.minDistance = obj.minDistance;\n this.maxDistance = maxNumberToInfinity(obj.maxDistance);\n this.minZoom = obj.minZoom;\n this.maxZoom = maxNumberToInfinity(obj.maxZoom);\n this.minPolarAngle = obj.minPolarAngle;\n this.maxPolarAngle = maxNumberToInfinity(obj.maxPolarAngle);\n this.minAzimuthAngle = maxNumberToInfinity(obj.minAzimuthAngle);\n this.maxAzimuthAngle = maxNumberToInfinity(obj.maxAzimuthAngle);\n this.smoothTime = obj.smoothTime;\n this.draggingSmoothTime = obj.draggingSmoothTime;\n this.dollySpeed = obj.dollySpeed;\n this.truckSpeed = obj.truckSpeed;\n this.dollyToCursor = obj.dollyToCursor;\n this._target0.fromArray(obj.target0);\n this._position0.fromArray(obj.position0);\n this._zoom0 = obj.zoom0;\n this._focalOffset0.fromArray(obj.focalOffset0);\n this.moveTo(obj.target[0], obj.target[1], obj.target[2], enableTransition);\n _sphericalA.setFromVector3(_v3A.fromArray(obj.position).sub(this._targetEnd).applyQuaternion(this._yAxisUpSpace));\n this.rotateTo(_sphericalA.theta, _sphericalA.phi, enableTransition);\n this.dollyTo(_sphericalA.radius, enableTransition);\n this.zoomTo(obj.zoom, enableTransition);\n this.setFocalOffset(obj.focalOffset[0], obj.focalOffset[1], obj.focalOffset[2], enableTransition);\n this._needsUpdate = true;\n }\n /**\n * Attach all internal event handlers to enable drag control.\n * @category Methods\n */\n connect(domElement) {\n if (this._domElement) {\n console.warn('camera-controls is already connected.');\n return;\n }\n domElement.setAttribute('data-camera-controls-version', VERSION);\n this._addAllEventListeners(domElement);\n this._getClientRect(this._elementRect);\n }\n /**\n * Detach all internal event handlers to disable drag control.\n */\n disconnect() {\n this.cancel();\n this._removeAllEventListeners();\n if (this._domElement) {\n this._domElement.removeAttribute('data-camera-controls-version');\n this._domElement = undefined;\n }\n }\n /**\n * Dispose the cameraControls instance itself, remove all eventListeners.\n * @category Methods\n */\n dispose() {\n // remove all user event listeners\n this.removeAllEventListeners();\n // remove all internal event listeners\n this.disconnect();\n }\n // it's okay to expose public though\n _getTargetDirection(out) {\n // divide by distance to normalize, lighter than `Vector3.prototype.normalize()`\n return out.setFromSpherical(this._spherical).divideScalar(this._spherical.radius).applyQuaternion(this._yAxisUpSpaceInverse);\n }\n // it's okay to expose public though\n _getCameraDirection(out) {\n return this._getTargetDirection(out).negate();\n }\n _findPointerById(pointerId) {\n return this._activePointers.find((activePointer) => activePointer.pointerId === pointerId);\n }\n _findPointerByMouseButton(mouseButton) {\n return this._activePointers.find((activePointer) => activePointer.mouseButton === mouseButton);\n }\n _disposePointer(pointer) {\n this._activePointers.splice(this._activePointers.indexOf(pointer), 1);\n }\n _encloseToBoundary(position, offset, friction) {\n const offsetLength2 = offset.lengthSq();\n if (offsetLength2 === 0.0) { // sanity check\n return position;\n }\n // See: https://twitter.com/FMS_Cat/status/1106508958640988161\n const newTarget = _v3B.copy(offset).add(position); // target\n const clampedTarget = this._boundary.clampPoint(newTarget, _v3C); // clamped target\n const deltaClampedTarget = clampedTarget.sub(newTarget); // newTarget -> clampedTarget\n const deltaClampedTargetLength2 = deltaClampedTarget.lengthSq(); // squared length of deltaClampedTarget\n if (deltaClampedTargetLength2 === 0.0) { // when the position doesn't have to be clamped\n return position.add(offset);\n }\n else if (deltaClampedTargetLength2 === offsetLength2) { // when the position is completely stuck\n return position;\n }\n else if (friction === 0.0) {\n return position.add(offset).add(deltaClampedTarget);\n }\n else {\n const offsetFactor = 1.0 + friction * deltaClampedTargetLength2 / offset.dot(deltaClampedTarget);\n return position\n .add(_v3B.copy(offset).multiplyScalar(offsetFactor))\n .add(deltaClampedTarget.multiplyScalar(1.0 - friction));\n }\n }\n _updateNearPlaneCorners() {\n if (isPerspectiveCamera(this._camera)) {\n const camera = this._camera;\n const near = camera.near;\n const fov = camera.getEffectiveFOV() * DEG2RAD;\n const heightHalf = Math.tan(fov * 0.5) * near; // near plain half height\n const widthHalf = heightHalf * camera.aspect; // near plain half width\n this._nearPlaneCorners[0].set(-widthHalf, -heightHalf, 0);\n this._nearPlaneCorners[1].set(widthHalf, -heightHalf, 0);\n this._nearPlaneCorners[2].set(widthHalf, heightHalf, 0);\n this._nearPlaneCorners[3].set(-widthHalf, heightHalf, 0);\n }\n else if (isOrthographicCamera(this._camera)) {\n const camera = this._camera;\n const zoomInv = 1 / camera.zoom;\n const left = camera.left * zoomInv;\n const right = camera.right * zoomInv;\n const top = camera.top * zoomInv;\n const bottom = camera.bottom * zoomInv;\n this._nearPlaneCorners[0].set(left, top, 0);\n this._nearPlaneCorners[1].set(right, top, 0);\n this._nearPlaneCorners[2].set(right, bottom, 0);\n this._nearPlaneCorners[3].set(left, bottom, 0);\n }\n }\n _truckInternal = (deltaX, deltaY, dragToOffset, screenSpacePanning) => {\n let truckX;\n let pedestalY;\n if (isPerspectiveCamera(this._camera)) {\n const offset = _v3A.copy(this._camera.position).sub(this._target);\n // half of the fov is center to top of screen\n const fov = this._camera.getEffectiveFOV() * DEG2RAD;\n const targetDistance = offset.length() * Math.tan(fov * 0.5);\n truckX = (this.truckSpeed * deltaX * targetDistance / this._elementRect.height);\n pedestalY = (this.truckSpeed * deltaY * targetDistance / this._elementRect.height);\n }\n else if (isOrthographicCamera(this._camera)) {\n const camera = this._camera;\n truckX = this.truckSpeed * deltaX * (camera.right - camera.left) / camera.zoom / this._elementRect.width;\n pedestalY = this.truckSpeed * deltaY * (camera.top - camera.bottom) / camera.zoom / this._elementRect.height;\n }\n else {\n return;\n }\n if (screenSpacePanning) {\n dragToOffset ?\n this.setFocalOffset(this._focalOffsetEnd.x + truckX, this._focalOffsetEnd.y, this._focalOffsetEnd.z, true) :\n this.truck(truckX, 0, true);\n this.forward(-pedestalY, true);\n }\n else {\n dragToOffset ?\n this.setFocalOffset(this._focalOffsetEnd.x + truckX, this._focalOffsetEnd.y + pedestalY, this._focalOffsetEnd.z, true) :\n this.truck(truckX, pedestalY, true);\n }\n };\n _rotateInternal = (deltaX, deltaY) => {\n const theta = PI_2 * this.azimuthRotateSpeed * deltaX / this._elementRect.height; // divide by *height* to refer the resolution\n const phi = PI_2 * this.polarRotateSpeed * deltaY / this._elementRect.height;\n this.rotate(theta, phi, true);\n };\n _dollyInternal = (delta, x, y) => {\n const dollyScale = Math.pow(0.95, -delta * this.dollySpeed);\n const lastDistance = this._sphericalEnd.radius;\n const distance = this._sphericalEnd.radius * dollyScale;\n const clampedDistance = clamp(distance, this.minDistance, this.maxDistance);\n const overflowedDistance = clampedDistance - distance;\n if (this.infinityDolly && this.dollyToCursor) {\n this._dollyToNoClamp(distance, true);\n }\n else if (this.infinityDolly && !this.dollyToCursor) {\n this.dollyInFixed(overflowedDistance, true);\n this._dollyToNoClamp(clampedDistance, true);\n }\n else {\n this._dollyToNoClamp(clampedDistance, true);\n }\n if (this.dollyToCursor) {\n this._changedDolly += (this.infinityDolly ? distance : clampedDistance) - lastDistance;\n this._dollyControlCoord.set(x, y);\n }\n this._lastDollyDirection = Math.sign(-delta);\n };\n _zoomInternal = (delta, x, y) => {\n const zoomScale = Math.pow(0.95, delta * this.dollySpeed);\n const lastZoom = this._zoom;\n const zoom = this._zoom * zoomScale;\n // for both PerspectiveCamera and OrthographicCamera\n this.zoomTo(zoom, true);\n if (this.dollyToCursor) {\n this._changedZoom += zoom - lastZoom;\n this._dollyControlCoord.set(x, y);\n }\n };\n // lateUpdate\n _collisionTest() {\n let distance = Infinity;\n const hasCollider = this.colliderMeshes.length >= 1;\n if (!hasCollider)\n return distance;\n if (notSupportedInOrthographicCamera(this._camera, '_collisionTest'))\n return distance;\n const rayDirection = this._getTargetDirection(_cameraDirection);\n _rotationMatrix.lookAt(_ORIGIN, rayDirection, this._camera.up);\n for (let i = 0; i < 4; i++) {\n const nearPlaneCorner = _v3B.copy(this._nearPlaneCorners[i]);\n nearPlaneCorner.applyMatrix4(_rotationMatrix);\n const origin = _v3C.addVectors(this._target, nearPlaneCorner);\n _raycaster.set(origin, rayDirection);\n _raycaster.far = this._spherical.radius + 1;\n const intersects = _raycaster.intersectObjects(this.colliderMeshes);\n if (intersects.length !== 0 && intersects[0].distance < distance) {\n distance = intersects[0].distance;\n }\n }\n return distance;\n }\n /**\n * Get its client rect and package into given `DOMRect` .\n */\n _getClientRect(target) {\n if (!this._domElement)\n return;\n const rect = this._domElement.getBoundingClientRect();\n target.x = rect.left;\n target.y = rect.top;\n if (this._viewport) {\n target.x += this._viewport.x;\n target.y += rect.height - this._viewport.w - this._viewport.y;\n target.width = this._viewport.z;\n target.height = this._viewport.w;\n }\n else {\n target.width = rect.width;\n target.height = rect.height;\n }\n return target;\n }\n _createOnRestPromise(resolveImmediately) {\n if (resolveImmediately)\n return Promise.resolve();\n this._hasRested = false;\n this.dispatchEvent({ type: 'transitionstart' });\n return new Promise((resolve) => {\n const onResolve = () => {\n this.removeEventListener('rest', onResolve);\n resolve();\n };\n this.addEventListener('rest', onResolve);\n });\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n _addAllEventListeners(_domElement) { }\n _removeAllEventListeners() { }\n /**\n * backward compatible\n * @deprecated use smoothTime (in seconds) instead\n * @category Properties\n */\n get dampingFactor() {\n console.warn('.dampingFactor has been deprecated. use smoothTime (in seconds) instead.');\n return 0;\n }\n /**\n * backward compatible\n * @deprecated use smoothTime (in seconds) instead\n * @category Properties\n */\n set dampingFactor(_) {\n console.warn('.dampingFactor has been deprecated. use smoothTime (in seconds) instead.');\n }\n /**\n * backward compatible\n * @deprecated use draggingSmoothTime (in seconds) instead\n * @category Properties\n */\n get draggingDampingFactor() {\n console.warn('.draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.');\n return 0;\n }\n /**\n * backward compatible\n * @deprecated use draggingSmoothTime (in seconds) instead\n * @category Properties\n */\n set draggingDampingFactor(_) {\n console.warn('.draggingDampingFactor has been deprecated. use draggingSmoothTime (in seconds) instead.');\n }\n static createBoundingSphere(object3d, out = new THREE.Sphere()) {\n const boundingSphere = out;\n const center = boundingSphere.center;\n _box3A.makeEmpty();\n // find the center\n object3d.traverseVisible((object) => {\n if (!object.isMesh)\n return;\n _box3A.expandByObject(object);\n });\n _box3A.getCenter(center);\n // find the radius\n let maxRadiusSq = 0;\n object3d.traverseVisible((object) => {\n if (!object.isMesh)\n return;\n const mesh = object;\n if (!mesh.geometry)\n return;\n const geometry = mesh.geometry.clone();\n geometry.applyMatrix4(mesh.matrixWorld);\n const bufferGeometry = geometry;\n const position = bufferGeometry.attributes.position;\n for (let i = 0, l = position.count; i < l; i++) {\n _v3A.fromBufferAttribute(position, i);\n maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_v3A));\n }\n });\n boundingSphere.radius = Math.sqrt(maxRadiusSq);\n return boundingSphere;\n }\n}\n\nexport { EventDispatcher, CameraControls as default };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { Box3, MathUtils, Matrix4, Quaternion, Raycaster, Sphere, Spherical, Vector2, Vector3, Vector4 } from 'three';\nimport * as React from 'react';\nimport { forwardRef, useMemo, useEffect } from 'react';\nimport { extend, useThree, useFrame } from '@react-three/fiber';\nimport CameraControlsImpl from 'camera-controls';\nexport { default as CameraControlsImpl } from 'camera-controls';\n\nconst CameraControls = /* @__PURE__ */forwardRef((props, ref) => {\n const {\n impl: SubclassImpl,\n camera,\n domElement,\n makeDefault,\n onControlStart,\n onControl,\n onControlEnd,\n onTransitionStart,\n onUpdate,\n onWake,\n onRest,\n onSleep,\n onStart,\n onEnd,\n onChange,\n regress,\n ...restProps\n } = props;\n const Impl = SubclassImpl !== null && SubclassImpl !== void 0 ? SubclassImpl : CameraControlsImpl;\n\n // useMemo is used here instead of useEffect, otherwise the useMemo below runs first and throws\n useMemo(() => {\n // to allow for tree shaking, we only import the subset of THREE that is used by camera-controls\n // see https://github.com/yomotsu/camera-controls#important\n const subsetOfTHREE = {\n Box3,\n MathUtils: {\n clamp: MathUtils.clamp\n },\n Matrix4,\n Quaternion,\n Raycaster,\n Sphere,\n Spherical,\n Vector2,\n Vector3,\n Vector4\n };\n Impl.install({\n THREE: subsetOfTHREE\n });\n extend({\n CameraControlsImpl: Impl\n });\n }, [Impl]);\n const defaultCamera = useThree(state => state.camera);\n const gl = useThree(state => state.gl);\n const invalidate = useThree(state => state.invalidate);\n const events = useThree(state => state.events);\n const setEvents = useThree(state => state.setEvents);\n const set = useThree(state => state.set);\n const get = useThree(state => state.get);\n const performance = useThree(state => state.performance);\n const explCamera = camera || defaultCamera;\n const explDomElement = domElement || events.connected || gl.domElement;\n const controls = useMemo(() => new Impl(explCamera), [Impl, explCamera]);\n useFrame((state, delta) => {\n controls.update(delta);\n }, -1);\n useEffect(() => {\n controls.connect(explDomElement);\n return () => void controls.disconnect();\n }, [explDomElement, controls]);\n useEffect(() => {\n function invalidateAndRegress() {\n invalidate();\n if (regress) performance.regress();\n }\n const handleControlStart = e => {\n invalidateAndRegress();\n onControlStart == null || onControlStart(e);\n onStart == null || onStart(e); // backwards compatibility\n };\n const handleControl = e => {\n invalidateAndRegress();\n onControl == null || onControl(e);\n onChange == null || onChange(e); // backwards compatibility\n };\n const handleControlEnd = e => {\n onControlEnd == null || onControlEnd(e);\n onEnd == null || onEnd(e); // backwards compatibility\n };\n const handleTransitionStart = e => {\n invalidateAndRegress();\n onTransitionStart == null || onTransitionStart(e);\n onChange == null || onChange(e); // backwards compatibility\n };\n const handleUpdate = e => {\n invalidateAndRegress();\n onUpdate == null || onUpdate(e);\n onChange == null || onChange(e); // backwards compatibility\n };\n const handleWake = e => {\n invalidateAndRegress();\n onWake == null || onWake(e);\n onChange == null || onChange(e); // backwards compatibility\n };\n const handleRest = e => {\n onRest == null || onRest(e);\n };\n const handleSleep = e => {\n onSleep == null || onSleep(e);\n };\n controls.addEventListener('controlstart', handleControlStart);\n controls.addEventListener('control', handleControl);\n controls.addEventListener('controlend', handleControlEnd);\n controls.addEventListener('transitionstart', handleTransitionStart);\n controls.addEventListener('update', handleUpdate);\n controls.addEventListener('wake', handleWake);\n controls.addEventListener('rest', handleRest);\n controls.addEventListener('sleep', handleSleep);\n return () => {\n controls.removeEventListener('controlstart', handleControlStart);\n controls.removeEventListener('control', handleControl);\n controls.removeEventListener('controlend', handleControlEnd);\n controls.removeEventListener('transitionstart', handleTransitionStart);\n controls.removeEventListener('update', handleUpdate);\n controls.removeEventListener('wake', handleWake);\n controls.removeEventListener('rest', handleRest);\n controls.removeEventListener('sleep', handleSleep);\n };\n }, [controls, invalidate, setEvents, regress, performance, onControlStart, onControl, onControlEnd, onTransitionStart, onUpdate, onWake, onRest, onSleep, onChange, onStart, onEnd]);\n useEffect(() => {\n if (makeDefault) {\n const old = get().controls;\n set({\n controls: controls\n });\n return () => set({\n controls: old\n });\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [makeDefault, controls]);\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n ref: ref,\n object: controls\n }, restProps));\n});\n\nexport { CameraControls };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { useThree, useInstanceHandle, useFrame } from '@react-three/fiber';\nimport { misc, easing } from 'maath';\n\nconst isObject3DRef = ref => (ref == null ? void 0 : ref.current) instanceof THREE.Object3D;\nconst MotionContext = /* @__PURE__ */React.createContext(null);\nfunction useMotion() {\n const context = React.useContext(MotionContext);\n if (!context) throw new Error('useMotion hook must be used in a MotionPathControls component.');\n return context;\n}\nfunction Debug({\n points = 50,\n color = 'black'\n}) {\n const {\n path\n } = useMotion();\n const [dots, setDots] = React.useState([]);\n const material = React.useMemo(() => new THREE.MeshBasicMaterial({\n color: color\n }), [color]);\n const geometry = React.useMemo(() => new THREE.SphereGeometry(0.025, 16, 16), []);\n const last = React.useRef([]);\n React.useEffect(() => {\n if (path.curves !== last.current) {\n setDots(path.getPoints(points));\n last.current = path.curves;\n }\n });\n return dots.map((item, index) => /*#__PURE__*/React.createElement(\"mesh\", {\n key: index,\n material: material,\n geometry: geometry,\n position: [item.x, item.y, item.z]\n }));\n}\nconst MotionPathControls = /* @__PURE__ */React.forwardRef(({\n children,\n curves = [],\n debug = false,\n debugColor = 'black',\n object,\n focus,\n loop = true,\n offset = undefined,\n smooth = false,\n eps = 0.00001,\n damping = 0.1,\n focusDamping = 0.1,\n maxSpeed = Infinity,\n ...props\n}, fref) => {\n const {\n camera\n } = useThree();\n const ref = React.useRef(null);\n const pos = React.useRef(offset !== null && offset !== void 0 ? offset : 0);\n const path = React.useMemo(() => new THREE.CurvePath(), []);\n const state = React.useMemo(() => ({\n focus,\n object: (object == null ? void 0 : object.current) instanceof THREE.Object3D ? object : {\n current: camera\n },\n path,\n current: pos.current,\n offset: pos.current,\n point: new THREE.Vector3(),\n tangent: new THREE.Vector3(),\n next: new THREE.Vector3()\n }), [focus, object]);\n const instanceRef = useInstanceHandle(ref);\n React.useLayoutEffect(() => {\n const instance = instanceRef.current;\n path.curves = [];\n const _curves = curves.length > 0 ? curves : instance.children.map(instance => instance.object);\n for (let i = 0; i < _curves.length; i++) path.add(_curves[i]);\n\n // Smoothen curve\n if (smooth) {\n const points = path.getPoints(typeof smooth === 'number' ? smooth : 1);\n const catmull = new THREE.CatmullRomCurve3(points);\n path.curves = [catmull];\n }\n path.updateArcLengths();\n });\n React.useImperativeHandle(fref, () => Object.assign(ref.current, {\n motion: state\n }), [state]);\n React.useLayoutEffect(() => {\n // When offset changes, normalise pos to avoid overshoot spinning\n pos.current = misc.repeat(pos.current, 1);\n }, [offset]);\n const vec = React.useMemo(() => new THREE.Vector3(), []);\n useFrame((_state, delta) => {\n const lastOffset = state.offset;\n easing.damp(pos, 'current', offset !== undefined ? offset : state.current, damping, delta, maxSpeed, undefined, eps);\n state.offset = loop ? misc.repeat(pos.current, 1) : misc.clamp(pos.current, 0, 1);\n if (path.getCurveLengths().length > 0) {\n path.getPointAt(state.offset, state.point);\n path.getTangentAt(state.offset, state.tangent).normalize();\n path.getPointAt(misc.repeat(pos.current - (lastOffset - state.offset), 1), state.next);\n const target = (object == null ? void 0 : object.current) instanceof THREE.Object3D ? object.current : camera;\n target.position.copy(state.point);\n if (focus) {\n easing.dampLookAt(target, isObject3DRef(focus) ? focus.current.getWorldPosition(vec) : focus, focusDamping, delta, maxSpeed, undefined, eps);\n }\n }\n });\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref\n }, props), /*#__PURE__*/React.createElement(MotionContext.Provider, {\n value: state\n }, children, debug && /*#__PURE__*/React.createElement(Debug, {\n color: debugColor\n })));\n});\n\nexport { MotionPathControls, useMotion };\n","import * as THREE from 'three';\nimport * as React from 'react';\nimport { useThree, createPortal, useFrame } from '@react-three/fiber';\n\nfunction RenderHud({\n defaultScene,\n defaultCamera,\n renderPriority = 1\n}) {\n const {\n gl,\n scene,\n camera\n } = useThree();\n let oldCLear;\n useFrame(() => {\n oldCLear = gl.autoClear;\n if (renderPriority === 1) {\n // Clear scene and render the default scene\n gl.autoClear = true;\n gl.render(defaultScene, defaultCamera);\n }\n // Disable cleaning and render the portal with its own camera\n gl.autoClear = false;\n gl.clearDepth();\n gl.render(scene, camera);\n // Restore default\n gl.autoClear = oldCLear;\n }, renderPriority);\n // Without an element that receives pointer events state.pointer will always be 0/0\n return /*#__PURE__*/React.createElement(\"group\", {\n onPointerOver: () => null\n });\n}\nfunction Hud({\n children,\n renderPriority = 1\n}) {\n const {\n scene: defaultScene,\n camera: defaultCamera\n } = useThree();\n const [hudScene] = React.useState(() => new THREE.Scene());\n return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal(/*#__PURE__*/React.createElement(React.Fragment, null, children, /*#__PURE__*/React.createElement(RenderHud, {\n defaultScene: defaultScene,\n defaultCamera: defaultCamera,\n renderPriority: renderPriority\n })), hudScene, {\n events: {\n priority: renderPriority + 1\n }\n }));\n}\n\nexport { Hud };\n","import * as React from 'react';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { Vector3, Object3D, Matrix4, Quaternion } from 'three';\nimport { OrthographicCamera } from './OrthographicCamera.js';\nimport { Hud } from './Hud.js';\n\nconst Context = /* @__PURE__ */React.createContext({});\nconst useGizmoContext = () => {\n return React.useContext(Context);\n};\nconst turnRate = 2 * Math.PI; // turn rate in angles per second\nconst dummy = /* @__PURE__ */new Object3D();\nconst matrix = /* @__PURE__ */new Matrix4();\nconst [q1, q2] = [/* @__PURE__ */new Quaternion(), /* @__PURE__ */new Quaternion()];\nconst target = /* @__PURE__ */new Vector3();\nconst targetPosition = /* @__PURE__ */new Vector3();\nconst isOrbitControls = controls => {\n return 'minPolarAngle' in controls;\n};\nconst isCameraControls = controls => {\n return 'getTarget' in controls;\n};\nconst GizmoHelper = ({\n alignment = 'bottom-right',\n margin = [80, 80],\n renderPriority = 1,\n onUpdate,\n onTarget,\n children\n}) => {\n const size = useThree(state => state.size);\n const mainCamera = useThree(state => state.camera);\n // @ts-ignore\n const defaultControls = useThree(state => state.controls);\n const invalidate = useThree(state => state.invalidate);\n const gizmoRef = React.useRef(null);\n const virtualCam = React.useRef(null);\n const animating = React.useRef(false);\n const radius = React.useRef(0);\n const focusPoint = React.useRef(new Vector3(0, 0, 0));\n const defaultUp = React.useRef(new Vector3(0, 0, 0));\n React.useEffect(() => {\n defaultUp.current.copy(mainCamera.up);\n dummy.up.copy(mainCamera.up);\n }, [mainCamera]);\n const tweenCamera = React.useCallback(direction => {\n animating.current = true;\n if (defaultControls || onTarget) {\n focusPoint.current = (onTarget == null ? void 0 : onTarget()) || (isCameraControls(defaultControls) ? defaultControls.getTarget(focusPoint.current) : defaultControls == null ? void 0 : defaultControls.target);\n }\n radius.current = mainCamera.position.distanceTo(target);\n\n // Rotate from current camera orientation\n q1.copy(mainCamera.quaternion);\n\n // To new current camera orientation\n targetPosition.copy(direction).multiplyScalar(radius.current).add(target);\n dummy.lookAt(targetPosition);\n q2.copy(dummy.quaternion);\n invalidate();\n }, [defaultControls, mainCamera, onTarget, invalidate]);\n useFrame((_, delta) => {\n if (virtualCam.current && gizmoRef.current) {\n var _gizmoRef$current;\n // Animate step\n if (animating.current) {\n if (q1.angleTo(q2) < 0.01) {\n animating.current = false;\n // Orbit controls uses UP vector as the orbit axes,\n // so we need to reset it after the animation is done\n // moving it around for the controls to work correctly\n if (isOrbitControls(defaultControls)) {\n mainCamera.up.copy(defaultUp.current);\n }\n } else {\n const step = delta * turnRate;\n // animate position by doing a slerp and then scaling the position on the unit sphere\n q1.rotateTowards(q2, step);\n // animate orientation\n mainCamera.position.set(0, 0, 1).applyQuaternion(q1).multiplyScalar(radius.current).add(focusPoint.current);\n mainCamera.up.set(0, 1, 0).applyQuaternion(q1).normalize();\n mainCamera.quaternion.copy(q1);\n if (isCameraControls(defaultControls)) defaultControls.setPosition(mainCamera.position.x, mainCamera.position.y, mainCamera.position.z);\n if (onUpdate) onUpdate();else if (defaultControls) defaultControls.update(delta);\n invalidate();\n }\n }\n\n // Sync Gizmo with main camera orientation\n matrix.copy(mainCamera.matrix).invert();\n (_gizmoRef$current = gizmoRef.current) == null || _gizmoRef$current.quaternion.setFromRotationMatrix(matrix);\n }\n });\n const gizmoHelperContext = React.useMemo(() => ({\n tweenCamera\n }), [tweenCamera]);\n\n // Position gizmo component within scene\n const [marginX, marginY] = margin;\n const x = alignment.endsWith('-center') ? 0 : alignment.endsWith('-left') ? -size.width / 2 + marginX : size.width / 2 - marginX;\n const y = alignment.startsWith('center-') ? 0 : alignment.startsWith('top-') ? size.height / 2 - marginY : -size.height / 2 + marginY;\n return /*#__PURE__*/React.createElement(Hud, {\n renderPriority: renderPriority\n }, /*#__PURE__*/React.createElement(Context.Provider, {\n value: gizmoHelperContext\n }, /*#__PURE__*/React.createElement(OrthographicCamera, {\n makeDefault: true,\n ref: virtualCam,\n position: [0, 0, 200]\n }), /*#__PURE__*/React.createElement(\"group\", {\n ref: gizmoRef,\n position: [x, y, 0]\n }, children)));\n};\n\nexport { GizmoHelper, useGizmoContext };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useThree } from '@react-three/fiber';\nimport { useGizmoContext } from './GizmoHelper.js';\nimport { Vector3, CanvasTexture } from 'three';\n\nconst colors = {\n bg: '#f0f0f0',\n hover: '#999',\n text: 'black',\n stroke: 'black'\n};\nconst defaultFaces = ['Right', 'Left', 'Top', 'Bottom', 'Front', 'Back'];\nconst makePositionVector = xyz => new Vector3(...xyz).multiplyScalar(0.38);\nconst corners = /* @__PURE__ */[[1, 1, 1], [1, 1, -1], [1, -1, 1], [1, -1, -1], [-1, 1, 1], [-1, 1, -1], [-1, -1, 1], [-1, -1, -1]].map(makePositionVector);\nconst cornerDimensions = [0.25, 0.25, 0.25];\nconst edges = /* @__PURE__ */[[1, 1, 0], [1, 0, 1], [1, 0, -1], [1, -1, 0], [0, 1, 1], [0, 1, -1], [0, -1, 1], [0, -1, -1], [-1, 1, 0], [-1, 0, 1], [-1, 0, -1], [-1, -1, 0]].map(makePositionVector);\nconst edgeDimensions = /* @__PURE__ */edges.map(edge => edge.toArray().map(axis => axis == 0 ? 0.5 : 0.25));\nconst FaceMaterial = ({\n hover,\n index,\n font = '20px Inter var, Arial, sans-serif',\n faces = defaultFaces,\n color = colors.bg,\n hoverColor = colors.hover,\n textColor = colors.text,\n strokeColor = colors.stroke,\n opacity = 1\n}) => {\n const gl = useThree(state => state.gl);\n const texture = React.useMemo(() => {\n const canvas = document.createElement('canvas');\n canvas.width = 128;\n canvas.height = 128;\n const context = canvas.getContext('2d');\n context.fillStyle = color;\n context.fillRect(0, 0, canvas.width, canvas.height);\n context.strokeStyle = strokeColor;\n context.strokeRect(0, 0, canvas.width, canvas.height);\n context.font = font;\n context.textAlign = 'center';\n context.fillStyle = textColor;\n context.fillText(faces[index].toUpperCase(), 64, 76);\n return new CanvasTexture(canvas);\n }, [index, faces, font, color, textColor, strokeColor]);\n return /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n map: texture,\n \"map-anisotropy\": gl.capabilities.getMaxAnisotropy() || 1,\n attach: `material-${index}`,\n color: hover ? hoverColor : 'white',\n transparent: true,\n opacity: opacity\n });\n};\nconst FaceCube = props => {\n const {\n tweenCamera\n } = useGizmoContext();\n const [hover, setHover] = React.useState(null);\n const handlePointerOut = e => {\n e.stopPropagation();\n setHover(null);\n };\n const handleClick = e => {\n e.stopPropagation();\n tweenCamera(e.face.normal);\n };\n const handlePointerMove = e => {\n e.stopPropagation();\n setHover(Math.floor(e.faceIndex / 2));\n };\n return /*#__PURE__*/React.createElement(\"mesh\", {\n onPointerOut: handlePointerOut,\n onPointerMove: handlePointerMove,\n onClick: props.onClick || handleClick\n }, [...Array(6)].map((_, index) => /*#__PURE__*/React.createElement(FaceMaterial, _extends({\n key: index,\n index: index,\n hover: hover === index\n }, props))), /*#__PURE__*/React.createElement(\"boxGeometry\", null));\n};\nconst EdgeCube = ({\n onClick,\n dimensions,\n position,\n hoverColor = colors.hover\n}) => {\n const {\n tweenCamera\n } = useGizmoContext();\n const [hover, setHover] = React.useState(false);\n const handlePointerOut = e => {\n e.stopPropagation();\n setHover(false);\n };\n const handlePointerOver = e => {\n e.stopPropagation();\n setHover(true);\n };\n const handleClick = e => {\n e.stopPropagation();\n tweenCamera(position);\n };\n return /*#__PURE__*/React.createElement(\"mesh\", {\n scale: 1.01,\n position: position,\n onPointerOver: handlePointerOver,\n onPointerOut: handlePointerOut,\n onClick: onClick || handleClick\n }, /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n color: hover ? hoverColor : 'white',\n transparent: true,\n opacity: 0.6,\n visible: hover\n }), /*#__PURE__*/React.createElement(\"boxGeometry\", {\n args: dimensions\n }));\n};\nconst GizmoViewcube = props => {\n return /*#__PURE__*/React.createElement(\"group\", {\n scale: [60, 60, 60]\n }, /*#__PURE__*/React.createElement(FaceCube, props), edges.map((edge, index) => /*#__PURE__*/React.createElement(EdgeCube, _extends({\n key: index,\n position: edge,\n dimensions: edgeDimensions[index]\n }, props))), corners.map((corner, index) => /*#__PURE__*/React.createElement(EdgeCube, _extends({\n key: index,\n position: corner,\n dimensions: cornerDimensions\n }, props))));\n};\n\nexport { GizmoViewcube };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useThree } from '@react-three/fiber';\nimport { CanvasTexture } from 'three';\nimport { useGizmoContext } from './GizmoHelper.js';\n\nfunction Axis({\n scale = [0.8, 0.05, 0.05],\n color,\n rotation\n}) {\n return /*#__PURE__*/React.createElement(\"group\", {\n rotation: rotation\n }, /*#__PURE__*/React.createElement(\"mesh\", {\n position: [0.4, 0, 0]\n }, /*#__PURE__*/React.createElement(\"boxGeometry\", {\n args: scale\n }), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n color: color,\n toneMapped: false\n })));\n}\nfunction AxisHead({\n onClick,\n font,\n disabled,\n arcStyle,\n label,\n labelColor,\n axisHeadScale = 1,\n ...props\n}) {\n const gl = useThree(state => state.gl);\n const texture = React.useMemo(() => {\n const canvas = document.createElement('canvas');\n canvas.width = 64;\n canvas.height = 64;\n const context = canvas.getContext('2d');\n context.beginPath();\n context.arc(32, 32, 16, 0, 2 * Math.PI);\n context.closePath();\n context.fillStyle = arcStyle;\n context.fill();\n if (label) {\n context.font = font;\n context.textAlign = 'center';\n context.fillStyle = labelColor;\n context.fillText(label, 32, 41);\n }\n return new CanvasTexture(canvas);\n }, [arcStyle, label, labelColor, font]);\n const [active, setActive] = React.useState(false);\n const scale = (label ? 1 : 0.75) * (active ? 1.2 : 1) * axisHeadScale;\n const handlePointerOver = e => {\n e.stopPropagation();\n setActive(true);\n };\n const handlePointerOut = e => {\n e.stopPropagation();\n setActive(false);\n };\n return /*#__PURE__*/React.createElement(\"sprite\", _extends({\n scale: scale,\n onPointerOver: !disabled ? handlePointerOver : undefined,\n onPointerOut: !disabled ? onClick || handlePointerOut : undefined\n }, props), /*#__PURE__*/React.createElement(\"spriteMaterial\", {\n map: texture,\n \"map-anisotropy\": gl.capabilities.getMaxAnisotropy() || 1,\n alphaTest: 0.3,\n opacity: label ? 1 : 0.75,\n toneMapped: false\n }));\n}\nconst GizmoViewport = ({\n hideNegativeAxes,\n hideAxisHeads,\n disabled,\n font = '18px Inter var, Arial, sans-serif',\n axisColors = ['#ff2060', '#20df80', '#2080ff'],\n axisHeadScale = 1,\n axisScale,\n labels = ['X', 'Y', 'Z'],\n labelColor = '#000',\n onClick,\n ...props\n}) => {\n const [colorX, colorY, colorZ] = axisColors;\n const {\n tweenCamera\n } = useGizmoContext();\n const axisHeadProps = {\n font,\n disabled,\n labelColor,\n onClick,\n axisHeadScale,\n onPointerDown: !disabled ? e => {\n tweenCamera(e.object.position);\n e.stopPropagation();\n } : undefined\n };\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n scale: 40\n }, props), /*#__PURE__*/React.createElement(Axis, {\n color: colorX,\n rotation: [0, 0, 0],\n scale: axisScale\n }), /*#__PURE__*/React.createElement(Axis, {\n color: colorY,\n rotation: [0, 0, Math.PI / 2],\n scale: axisScale\n }), /*#__PURE__*/React.createElement(Axis, {\n color: colorZ,\n rotation: [0, -Math.PI / 2, 0],\n scale: axisScale\n }), !hideAxisHeads && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(AxisHead, _extends({\n arcStyle: colorX,\n position: [1, 0, 0],\n label: labels[0]\n }, axisHeadProps)), /*#__PURE__*/React.createElement(AxisHead, _extends({\n arcStyle: colorY,\n position: [0, 1, 0],\n label: labels[1]\n }, axisHeadProps)), /*#__PURE__*/React.createElement(AxisHead, _extends({\n arcStyle: colorZ,\n position: [0, 0, 1],\n label: labels[2]\n }, axisHeadProps)), !hideNegativeAxes && /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(AxisHead, _extends({\n arcStyle: colorX,\n position: [-1, 0, 0]\n }, axisHeadProps)), /*#__PURE__*/React.createElement(AxisHead, _extends({\n arcStyle: colorY,\n position: [0, -1, 0]\n }, axisHeadProps)), /*#__PURE__*/React.createElement(AxisHead, _extends({\n arcStyle: colorZ,\n position: [0, 0, -1]\n }, axisHeadProps)))));\n};\n\nexport { GizmoViewport };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { extend, useFrame } from '@react-three/fiber';\nimport { shaderMaterial } from './shaderMaterial.js';\nimport { version } from '../helpers/constants.js';\n\nconst GridMaterial = /* @__PURE__ */shaderMaterial({\n cellSize: 0.5,\n sectionSize: 1,\n fadeDistance: 100,\n fadeStrength: 1,\n fadeFrom: 1,\n cellThickness: 0.5,\n sectionThickness: 1,\n cellColor: /* @__PURE__ */new THREE.Color(),\n sectionColor: /* @__PURE__ */new THREE.Color(),\n infiniteGrid: false,\n followCamera: false,\n worldCamProjPosition: /* @__PURE__ */new THREE.Vector3(),\n worldPlanePosition: /* @__PURE__ */new THREE.Vector3()\n}, /* glsl */`\n varying vec3 localPosition;\n varying vec4 worldPosition;\n\n uniform vec3 worldCamProjPosition;\n uniform vec3 worldPlanePosition;\n uniform float fadeDistance;\n uniform bool infiniteGrid;\n uniform bool followCamera;\n\n void main() {\n localPosition = position.xzy;\n if (infiniteGrid) localPosition *= 1.0 + fadeDistance;\n \n worldPosition = modelMatrix * vec4(localPosition, 1.0);\n if (followCamera) {\n worldPosition.xyz += (worldCamProjPosition - worldPlanePosition);\n localPosition = (inverse(modelMatrix) * worldPosition).xyz;\n }\n\n gl_Position = projectionMatrix * viewMatrix * worldPosition;\n }\n `, /* glsl */`\n varying vec3 localPosition;\n varying vec4 worldPosition;\n\n uniform vec3 worldCamProjPosition;\n uniform float cellSize;\n uniform float sectionSize;\n uniform vec3 cellColor;\n uniform vec3 sectionColor;\n uniform float fadeDistance;\n uniform float fadeStrength;\n uniform float fadeFrom;\n uniform float cellThickness;\n uniform float sectionThickness;\n\n float getGrid(float size, float thickness) {\n vec2 r = localPosition.xz / size;\n vec2 grid = abs(fract(r - 0.5) - 0.5) / fwidth(r);\n float line = min(grid.x, grid.y) + 1.0 - thickness;\n return 1.0 - min(line, 1.0);\n }\n\n void main() {\n float g1 = getGrid(cellSize, cellThickness);\n float g2 = getGrid(sectionSize, sectionThickness);\n\n vec3 from = worldCamProjPosition*vec3(fadeFrom);\n float dist = distance(from, worldPosition.xyz);\n float d = 1.0 - min(dist / fadeDistance, 1.0);\n vec3 color = mix(cellColor, sectionColor, min(1.0, sectionThickness * g2));\n\n gl_FragColor = vec4(color, (g1 + g2) * pow(d, fadeStrength));\n gl_FragColor.a = mix(0.75 * gl_FragColor.a, gl_FragColor.a, g2);\n if (gl_FragColor.a <= 0.0) discard;\n\n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }\n `);\nconst Grid = /* @__PURE__ */React.forwardRef(({\n args,\n cellColor = '#000000',\n sectionColor = '#2080ff',\n cellSize = 0.5,\n sectionSize = 1,\n followCamera = false,\n infiniteGrid = false,\n fadeDistance = 100,\n fadeStrength = 1,\n fadeFrom = 1,\n cellThickness = 0.5,\n sectionThickness = 1,\n side = THREE.BackSide,\n ...props\n}, fRef) => {\n extend({\n GridMaterial\n });\n const ref = React.useRef(null);\n React.useImperativeHandle(fRef, () => ref.current, []);\n const plane = new THREE.Plane();\n const upVector = new THREE.Vector3(0, 1, 0);\n const zeroVector = new THREE.Vector3(0, 0, 0);\n useFrame(state => {\n plane.setFromNormalAndCoplanarPoint(upVector, zeroVector).applyMatrix4(ref.current.matrixWorld);\n const gridMaterial = ref.current.material;\n const worldCamProjPosition = gridMaterial.uniforms.worldCamProjPosition;\n const worldPlanePosition = gridMaterial.uniforms.worldPlanePosition;\n plane.projectPoint(state.camera.position, worldCamProjPosition.value);\n worldPlanePosition.value.set(0, 0, 0).applyMatrix4(ref.current.matrixWorld);\n });\n const uniforms1 = {\n cellSize,\n sectionSize,\n cellColor,\n sectionColor,\n cellThickness,\n sectionThickness\n };\n const uniforms2 = {\n fadeDistance,\n fadeStrength,\n fadeFrom,\n infiniteGrid,\n followCamera\n };\n return /*#__PURE__*/React.createElement(\"mesh\", _extends({\n ref: ref,\n frustumCulled: false\n }, props), /*#__PURE__*/React.createElement(\"gridMaterial\", _extends({\n transparent: true,\n \"extensions-derivatives\": true,\n side: side\n }, uniforms1, uniforms2)), /*#__PURE__*/React.createElement(\"planeGeometry\", {\n args: args\n }));\n});\n\nexport { Grid };\n","import * as React from 'react';\nimport { CubeTextureLoader } from 'three';\nimport { useLoader } from '@react-three/fiber';\n\nfunction useCubeTexture(files, {\n path\n}) {\n const [cubeTexture] = useLoader(CubeTextureLoader, [files], loader => loader.setPath(path));\n return cubeTexture;\n}\nuseCubeTexture.preload = (files, {\n path\n}) => useLoader.preload(CubeTextureLoader, [files], loader => loader.setPath(path));\nfunction CubeTexture({\n children,\n files,\n ...options\n}) {\n const texture = useCubeTexture(files, {\n ...options\n });\n return /*#__PURE__*/React.createElement(React.Fragment, null, children == null ? void 0 : children(texture));\n}\n\nexport { CubeTexture, useCubeTexture };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { FBXLoader } from 'three-stdlib';\nimport { useLoader } from '@react-three/fiber';\nimport { Clone } from './Clone.js';\n\nfunction useFBX(path) {\n return useLoader(FBXLoader, path);\n}\nuseFBX.preload = path => useLoader.preload(FBXLoader, path);\nuseFBX.clear = input => useLoader.clear(FBXLoader, input);\nfunction Fbx({\n path,\n ...props\n}) {\n const fbx = useFBX(path);\n const object = fbx.children[0];\n return /*#__PURE__*/React.createElement(Clone, _extends({}, props, {\n object: object\n }));\n}\n\nexport { Fbx, useFBX };\n","import * as React from 'react';\nimport { useEffect } from 'react';\nimport { useThree, useLoader } from '@react-three/fiber';\nimport { KTX2Loader } from 'three-stdlib';\nimport { IsObject } from './Texture.js';\n\nconst cdn = 'https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master';\nfunction useKTX2(input, basisPath = `${cdn}/basis/`) {\n const gl = useThree(state => state.gl);\n const textures = useLoader(KTX2Loader, IsObject(input) ? Object.values(input) : input, loader => {\n loader.detectSupport(gl);\n loader.setTranscoderPath(basisPath);\n });\n\n // https://github.com/mrdoob/three.js/issues/22696\n // Upload the texture to the GPU immediately instead of waiting for the first render\n useEffect(() => {\n const array = Array.isArray(textures) ? textures : [textures];\n array.forEach(gl.initTexture);\n }, [gl, textures]);\n if (IsObject(input)) {\n const keys = Object.keys(input);\n const keyed = {};\n keys.forEach(key => Object.assign(keyed, {\n [key]: textures[keys.indexOf(key)]\n }));\n return keyed;\n } else {\n return textures;\n }\n}\nuseKTX2.preload = (url, basisPath = `${cdn}/basis/`) => useLoader.preload(KTX2Loader, url, loader => {\n loader.setTranscoderPath(basisPath);\n});\nuseKTX2.clear = input => useLoader.clear(KTX2Loader, input);\n\n//\n\nconst Ktx2 = ({\n children,\n input,\n basisPath\n}) => {\n const texture = useKTX2(input, basisPath);\n return /*#__PURE__*/React.createElement(React.Fragment, null, children == null ? void 0 : children(texture));\n};\n\nexport { Ktx2, useKTX2 };\n","// https://caniuse.com/mdn-javascript_builtins_number_isfinite\nconst isFiniteNumber = Number.isFinite || function (value) {\n return typeof value === 'number' && isFinite(value);\n};\n\n// https://caniuse.com/mdn-javascript_builtins_number_issafeinteger\nconst isSafeInteger = Number.isSafeInteger || function (value) {\n return typeof value === 'number' && Math.abs(value) <= MAX_SAFE_INTEGER;\n};\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER || 9007199254740991;\n\nlet ErrorTypes = /*#__PURE__*/function (ErrorTypes) {\n // Identifier for a network error (loading error / timeout ...)\n ErrorTypes[\"NETWORK_ERROR\"] = \"networkError\";\n // Identifier for a media Error (video/parsing/mediasource error)\n ErrorTypes[\"MEDIA_ERROR\"] = \"mediaError\";\n // EME (encrypted media extensions) errors\n ErrorTypes[\"KEY_SYSTEM_ERROR\"] = \"keySystemError\";\n // Identifier for a mux Error (demuxing/remuxing)\n ErrorTypes[\"MUX_ERROR\"] = \"muxError\";\n // Identifier for all other errors\n ErrorTypes[\"OTHER_ERROR\"] = \"otherError\";\n return ErrorTypes;\n}({});\nlet ErrorDetails = /*#__PURE__*/function (ErrorDetails) {\n ErrorDetails[\"KEY_SYSTEM_NO_KEYS\"] = \"keySystemNoKeys\";\n ErrorDetails[\"KEY_SYSTEM_NO_ACCESS\"] = \"keySystemNoAccess\";\n ErrorDetails[\"KEY_SYSTEM_NO_SESSION\"] = \"keySystemNoSession\";\n ErrorDetails[\"KEY_SYSTEM_NO_CONFIGURED_LICENSE\"] = \"keySystemNoConfiguredLicense\";\n ErrorDetails[\"KEY_SYSTEM_LICENSE_REQUEST_FAILED\"] = \"keySystemLicenseRequestFailed\";\n ErrorDetails[\"KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED\"] = \"keySystemServerCertificateRequestFailed\";\n ErrorDetails[\"KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED\"] = \"keySystemServerCertificateUpdateFailed\";\n ErrorDetails[\"KEY_SYSTEM_SESSION_UPDATE_FAILED\"] = \"keySystemSessionUpdateFailed\";\n ErrorDetails[\"KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED\"] = \"keySystemStatusOutputRestricted\";\n ErrorDetails[\"KEY_SYSTEM_STATUS_INTERNAL_ERROR\"] = \"keySystemStatusInternalError\";\n ErrorDetails[\"KEY_SYSTEM_DESTROY_MEDIA_KEYS_ERROR\"] = \"keySystemDestroyMediaKeysError\";\n ErrorDetails[\"KEY_SYSTEM_DESTROY_CLOSE_SESSION_ERROR\"] = \"keySystemDestroyCloseSessionError\";\n ErrorDetails[\"KEY_SYSTEM_DESTROY_REMOVE_SESSION_ERROR\"] = \"keySystemDestroyRemoveSessionError\";\n // Identifier for a manifest load error - data: { url : faulty URL, response : { code: error code, text: error text }}\n ErrorDetails[\"MANIFEST_LOAD_ERROR\"] = \"manifestLoadError\";\n // Identifier for a manifest load timeout - data: { url : faulty URL, response : { code: error code, text: error text }}\n ErrorDetails[\"MANIFEST_LOAD_TIMEOUT\"] = \"manifestLoadTimeOut\";\n // Identifier for a manifest parsing error - data: { url : faulty URL, reason : error reason}\n ErrorDetails[\"MANIFEST_PARSING_ERROR\"] = \"manifestParsingError\";\n // Identifier for a manifest with only incompatible codecs error - data: { url : faulty URL, reason : error reason}\n ErrorDetails[\"MANIFEST_INCOMPATIBLE_CODECS_ERROR\"] = \"manifestIncompatibleCodecsError\";\n // Identifier for a level which contains no fragments - data: { url: faulty URL, reason: \"no fragments found in level\", level: index of the bad level }\n ErrorDetails[\"LEVEL_EMPTY_ERROR\"] = \"levelEmptyError\";\n // Identifier for a level load error - data: { url : faulty URL, response : { code: error code, text: error text }}\n ErrorDetails[\"LEVEL_LOAD_ERROR\"] = \"levelLoadError\";\n // Identifier for a level load timeout - data: { url : faulty URL, response : { code: error code, text: error text }}\n ErrorDetails[\"LEVEL_LOAD_TIMEOUT\"] = \"levelLoadTimeOut\";\n // Identifier for a level parse error - data: { url : faulty URL, error: Error, reason: error message }\n ErrorDetails[\"LEVEL_PARSING_ERROR\"] = \"levelParsingError\";\n // Identifier for a level switch error - data: { level : faulty level Id, event : error description}\n ErrorDetails[\"LEVEL_SWITCH_ERROR\"] = \"levelSwitchError\";\n // Identifier for an audio track load error - data: { url : faulty URL, response : { code: error code, text: error text }}\n ErrorDetails[\"AUDIO_TRACK_LOAD_ERROR\"] = \"audioTrackLoadError\";\n // Identifier for an audio track load timeout - data: { url : faulty URL, response : { code: error code, text: error text }}\n ErrorDetails[\"AUDIO_TRACK_LOAD_TIMEOUT\"] = \"audioTrackLoadTimeOut\";\n // Identifier for a subtitle track load error - data: { url : faulty URL, response : { code: error code, text: error text }}\n ErrorDetails[\"SUBTITLE_LOAD_ERROR\"] = \"subtitleTrackLoadError\";\n // Identifier for a subtitle track load timeout - data: { url : faulty URL, response : { code: error code, text: error text }}\n ErrorDetails[\"SUBTITLE_TRACK_LOAD_TIMEOUT\"] = \"subtitleTrackLoadTimeOut\";\n // Identifier for fragment load error - data: { frag : fragment object, response : { code: error code, text: error text }}\n ErrorDetails[\"FRAG_LOAD_ERROR\"] = \"fragLoadError\";\n // Identifier for fragment load timeout error - data: { frag : fragment object}\n ErrorDetails[\"FRAG_LOAD_TIMEOUT\"] = \"fragLoadTimeOut\";\n // Identifier for a fragment decryption error event - data: {id : demuxer Id,frag: fragment object, reason : parsing error description }\n ErrorDetails[\"FRAG_DECRYPT_ERROR\"] = \"fragDecryptError\";\n // Identifier for a fragment parsing error event - data: { id : demuxer Id, reason : parsing error description }\n // will be renamed DEMUX_PARSING_ERROR and switched to MUX_ERROR in the next major release\n ErrorDetails[\"FRAG_PARSING_ERROR\"] = \"fragParsingError\";\n // Identifier for a fragment or part load skipped because of a GAP tag or attribute\n ErrorDetails[\"FRAG_GAP\"] = \"fragGap\";\n // Identifier for a remux alloc error event - data: { id : demuxer Id, frag : fragment object, bytes : nb of bytes on which allocation failed , reason : error text }\n ErrorDetails[\"REMUX_ALLOC_ERROR\"] = \"remuxAllocError\";\n // Identifier for decrypt key load error - data: { frag : fragment object, response : { code: error code, text: error text }}\n ErrorDetails[\"KEY_LOAD_ERROR\"] = \"keyLoadError\";\n // Identifier for decrypt key load timeout error - data: { frag : fragment object}\n ErrorDetails[\"KEY_LOAD_TIMEOUT\"] = \"keyLoadTimeOut\";\n // Triggered when an exception occurs while adding a sourceBuffer to MediaSource - data : { error : exception , mimeType : mimeType }\n ErrorDetails[\"BUFFER_ADD_CODEC_ERROR\"] = \"bufferAddCodecError\";\n // Triggered when source buffer(s) could not be created using level (manifest CODECS attribute), parsed media, or best guess codec(s) - data: { reason : error reason }\n ErrorDetails[\"BUFFER_INCOMPATIBLE_CODECS_ERROR\"] = \"bufferIncompatibleCodecsError\";\n // Identifier for a buffer append error - data: append error description\n ErrorDetails[\"BUFFER_APPEND_ERROR\"] = \"bufferAppendError\";\n // Identifier for a buffer appending error event - data: appending error description\n ErrorDetails[\"BUFFER_APPENDING_ERROR\"] = \"bufferAppendingError\";\n // Identifier for a buffer stalled error event\n ErrorDetails[\"BUFFER_STALLED_ERROR\"] = \"bufferStalledError\";\n // Identifier for a buffer full event\n ErrorDetails[\"BUFFER_FULL_ERROR\"] = \"bufferFullError\";\n // Identifier for a buffer seek over hole event\n ErrorDetails[\"BUFFER_SEEK_OVER_HOLE\"] = \"bufferSeekOverHole\";\n // Identifier for a buffer nudge on stall (playback is stuck although currentTime is in a buffered area)\n ErrorDetails[\"BUFFER_NUDGE_ON_STALL\"] = \"bufferNudgeOnStall\";\n // Identifier for a Interstitial Asset List load error - data: { url: faulty URL, response: { code: error code, text: error text } }\n ErrorDetails[\"ASSET_LIST_LOAD_ERROR\"] = \"assetListLoadError\";\n // Identifier for a Interstitial Asset List load timeout - data: { url: faulty URL, response: { code: error code, text: error text } }\n ErrorDetails[\"ASSET_LIST_LOAD_TIMEOUT\"] = \"assetListLoadTimeout\";\n // Identifier for a Interstitial Asset List parsing error - data: { url : faulty URL, reason : error reason, response : { code: error code, text: error text }}\n ErrorDetails[\"ASSET_LIST_PARSING_ERROR\"] = \"assetListParsingError\";\n // Identifier for a Interstitial Asset List parsing error - data: { url : faulty URL, reason : error reason, response : { code: error code, text: error text }}\n ErrorDetails[\"INTERSTITIAL_ASSET_ITEM_ERROR\"] = \"interstitialAssetItemError\";\n // Identifier for an internal exception happening inside hls.js while handling an event\n ErrorDetails[\"INTERNAL_EXCEPTION\"] = \"internalException\";\n // Identifier for an internal call to abort a loader\n ErrorDetails[\"INTERNAL_ABORTED\"] = \"aborted\";\n // Triggered when attachMedia fails\n ErrorDetails[\"ATTACH_MEDIA_ERROR\"] = \"attachMediaError\";\n // Uncategorized error\n ErrorDetails[\"UNKNOWN\"] = \"unknown\";\n return ErrorDetails;\n}({});\n\nlet Events = /*#__PURE__*/function (Events) {\n // Fired before MediaSource is attaching to media element\n Events[\"MEDIA_ATTACHING\"] = \"hlsMediaAttaching\";\n // Fired when MediaSource has been successfully attached to media element\n Events[\"MEDIA_ATTACHED\"] = \"hlsMediaAttached\";\n // Fired before detaching MediaSource from media element\n Events[\"MEDIA_DETACHING\"] = \"hlsMediaDetaching\";\n // Fired when MediaSource has been detached from media element\n Events[\"MEDIA_DETACHED\"] = \"hlsMediaDetached\";\n // Fired when HTMLMediaElement dispatches \"ended\" event, or stalls at end of VOD program\n Events[\"MEDIA_ENDED\"] = \"hlsMediaEnded\";\n // Fired after playback stall is resolved with playing, seeked, or ended event following BUFFER_STALLED_ERROR\n Events[\"STALL_RESOLVED\"] = \"hlsStallResolved\";\n // Fired when the buffer is going to be reset\n Events[\"BUFFER_RESET\"] = \"hlsBufferReset\";\n // Fired when we know about the codecs that we need buffers for to push into - data: {tracks : { container, codec, levelCodec, initSegment, metadata }}\n Events[\"BUFFER_CODECS\"] = \"hlsBufferCodecs\";\n // fired when sourcebuffers have been created - data: { tracks : tracks }\n Events[\"BUFFER_CREATED\"] = \"hlsBufferCreated\";\n // fired when we append a segment to the buffer - data: { segment: segment object }\n Events[\"BUFFER_APPENDING\"] = \"hlsBufferAppending\";\n // fired when we are done with appending a media segment to the buffer - data : { parent : segment parent that triggered BUFFER_APPENDING, pending : nb of segments waiting for appending for this segment parent}\n Events[\"BUFFER_APPENDED\"] = \"hlsBufferAppended\";\n // fired when the stream is finished and we want to notify the media buffer that there will be no more data - data: { }\n Events[\"BUFFER_EOS\"] = \"hlsBufferEos\";\n // fired when all buffers are full to the end of the program, after calling MediaSource.endOfStream() (unless restricted)\n Events[\"BUFFERED_TO_END\"] = \"hlsBufferedToEnd\";\n // fired when the media buffer should be flushed - data { startOffset, endOffset }\n Events[\"BUFFER_FLUSHING\"] = \"hlsBufferFlushing\";\n // fired when the media buffer has been flushed - data: { }\n Events[\"BUFFER_FLUSHED\"] = \"hlsBufferFlushed\";\n // fired to signal that a manifest loading starts - data: { url : manifestURL}\n Events[\"MANIFEST_LOADING\"] = \"hlsManifestLoading\";\n // fired after manifest has been loaded - data: { levels : [available quality levels], audioTracks : [ available audio tracks ], url : manifestURL, stats : LoaderStats }\n Events[\"MANIFEST_LOADED\"] = \"hlsManifestLoaded\";\n // fired after manifest has been parsed - data: { levels : [available quality levels], firstLevel : index of first quality level appearing in Manifest}\n Events[\"MANIFEST_PARSED\"] = \"hlsManifestParsed\";\n // fired when a level switch is requested - data: { level : id of new level }\n Events[\"LEVEL_SWITCHING\"] = \"hlsLevelSwitching\";\n // fired when a level switch is effective - data: { level : id of new level }\n Events[\"LEVEL_SWITCHED\"] = \"hlsLevelSwitched\";\n // fired when a level playlist loading starts - data: { url : level URL, level : id of level being loaded}\n Events[\"LEVEL_LOADING\"] = \"hlsLevelLoading\";\n // fired when a level playlist loading finishes - data: { details : levelDetails object, level : id of loaded level, stats : LoaderStats }\n Events[\"LEVEL_LOADED\"] = \"hlsLevelLoaded\";\n // fired when a level's details have been updated based on previous details, after it has been loaded - data: { details : levelDetails object, level : id of updated level }\n Events[\"LEVEL_UPDATED\"] = \"hlsLevelUpdated\";\n // fired when a level's PTS information has been updated after parsing a fragment - data: { details : levelDetails object, level : id of updated level, drift: PTS drift observed when parsing last fragment }\n Events[\"LEVEL_PTS_UPDATED\"] = \"hlsLevelPtsUpdated\";\n // fired to notify that levels have changed after removing a level - data: { levels : [available quality levels] }\n Events[\"LEVELS_UPDATED\"] = \"hlsLevelsUpdated\";\n // fired to notify that audio track lists has been updated - data: { audioTracks : audioTracks }\n Events[\"AUDIO_TRACKS_UPDATED\"] = \"hlsAudioTracksUpdated\";\n // fired when an audio track switching is requested - data: { id : audio track id }\n Events[\"AUDIO_TRACK_SWITCHING\"] = \"hlsAudioTrackSwitching\";\n // fired when an audio track switch actually occurs - data: { id : audio track id }\n Events[\"AUDIO_TRACK_SWITCHED\"] = \"hlsAudioTrackSwitched\";\n // fired when an audio track loading starts - data: { url : audio track URL, id : audio track id }\n Events[\"AUDIO_TRACK_LOADING\"] = \"hlsAudioTrackLoading\";\n // fired when an audio track loading finishes - data: { details : levelDetails object, id : audio track id, stats : LoaderStats }\n Events[\"AUDIO_TRACK_LOADED\"] = \"hlsAudioTrackLoaded\";\n // fired when an audio tracks's details have been updated based on previous details, after it has been loaded - data: { details : levelDetails object, id : track id }\n Events[\"AUDIO_TRACK_UPDATED\"] = \"hlsAudioTrackUpdated\";\n // fired to notify that subtitle track lists has been updated - data: { subtitleTracks : subtitleTracks }\n Events[\"SUBTITLE_TRACKS_UPDATED\"] = \"hlsSubtitleTracksUpdated\";\n // fired to notify that subtitle tracks were cleared as a result of stopping the media\n Events[\"SUBTITLE_TRACKS_CLEARED\"] = \"hlsSubtitleTracksCleared\";\n // fired when an subtitle track switch occurs - data: { id : subtitle track id }\n Events[\"SUBTITLE_TRACK_SWITCH\"] = \"hlsSubtitleTrackSwitch\";\n // fired when a subtitle track loading starts - data: { url : subtitle track URL, id : subtitle track id }\n Events[\"SUBTITLE_TRACK_LOADING\"] = \"hlsSubtitleTrackLoading\";\n // fired when a subtitle track loading finishes - data: { details : levelDetails object, id : subtitle track id, stats : LoaderStats }\n Events[\"SUBTITLE_TRACK_LOADED\"] = \"hlsSubtitleTrackLoaded\";\n // fired when a subtitle racks's details have been updated based on previous details, after it has been loaded - data: { details : levelDetails object, id : track id }\n Events[\"SUBTITLE_TRACK_UPDATED\"] = \"hlsSubtitleTrackUpdated\";\n // fired when a subtitle fragment has been processed - data: { success : boolean, frag : the processed frag }\n Events[\"SUBTITLE_FRAG_PROCESSED\"] = \"hlsSubtitleFragProcessed\";\n // fired when a set of VTTCues to be managed externally has been parsed - data: { type: string, track: string, cues: [ VTTCue ] }\n Events[\"CUES_PARSED\"] = \"hlsCuesParsed\";\n // fired when a text track to be managed externally is found - data: { tracks: [ { label: string, kind: string, default: boolean } ] }\n Events[\"NON_NATIVE_TEXT_TRACKS_FOUND\"] = \"hlsNonNativeTextTracksFound\";\n // fired when the first timestamp is found - data: { id : demuxer id, initPTS: initPTS, timescale: timescale, frag : fragment object }\n Events[\"INIT_PTS_FOUND\"] = \"hlsInitPtsFound\";\n // fired when a fragment loading starts - data: { frag : fragment object }\n Events[\"FRAG_LOADING\"] = \"hlsFragLoading\";\n // fired when a fragment loading is progressing - data: { frag : fragment object, { trequest, tfirst, loaded } }\n // FRAG_LOAD_PROGRESS = 'hlsFragLoadProgress',\n // Identifier for fragment load aborting for emergency switch down - data: { frag : fragment object }\n Events[\"FRAG_LOAD_EMERGENCY_ABORTED\"] = \"hlsFragLoadEmergencyAborted\";\n // fired when a fragment loading is completed - data: { frag : fragment object, payload : fragment payload, stats : LoaderStats }\n Events[\"FRAG_LOADED\"] = \"hlsFragLoaded\";\n // fired when a fragment has finished decrypting - data: { id : demuxer id, frag: fragment object, payload : fragment payload, stats : { tstart, tdecrypt } }\n Events[\"FRAG_DECRYPTED\"] = \"hlsFragDecrypted\";\n // fired when Init Segment has been extracted from fragment - data: { id : demuxer id, frag: fragment object, moov : moov MP4 box, codecs : codecs found while parsing fragment }\n Events[\"FRAG_PARSING_INIT_SEGMENT\"] = \"hlsFragParsingInitSegment\";\n // fired when parsing sei text is completed - data: { id : demuxer id, frag: fragment object, samples : [ sei samples pes ] }\n Events[\"FRAG_PARSING_USERDATA\"] = \"hlsFragParsingUserdata\";\n // fired when parsing id3 is completed - data: { id : demuxer id, frag: fragment object, samples : [ id3 samples pes ] }\n Events[\"FRAG_PARSING_METADATA\"] = \"hlsFragParsingMetadata\";\n // fired when data have been extracted from fragment - data: { id : demuxer id, frag: fragment object, data1 : moof MP4 box or TS fragments, data2 : mdat MP4 box or null}\n // FRAG_PARSING_DATA = 'hlsFragParsingData',\n // fired when fragment parsing is completed - data: { id : demuxer id, frag: fragment object }\n Events[\"FRAG_PARSED\"] = \"hlsFragParsed\";\n // fired when fragment remuxed MP4 boxes have all been appended into SourceBuffer - data: { id : demuxer id, frag : fragment object, stats : LoaderStats }\n Events[\"FRAG_BUFFERED\"] = \"hlsFragBuffered\";\n // fired when fragment matching with current media position is changing - data : { id : demuxer id, frag : fragment object }\n Events[\"FRAG_CHANGED\"] = \"hlsFragChanged\";\n // Identifier for a FPS drop event - data: { currentDropped, currentDecoded, totalDroppedFrames }\n Events[\"FPS_DROP\"] = \"hlsFpsDrop\";\n // triggered when FPS drop triggers auto level capping - data: { level, droppedLevel }\n Events[\"FPS_DROP_LEVEL_CAPPING\"] = \"hlsFpsDropLevelCapping\";\n // triggered when maxAutoLevel changes - data { autoLevelCapping, levels, maxAutoLevel, minAutoLevel, maxHdcpLevel }\n Events[\"MAX_AUTO_LEVEL_UPDATED\"] = \"hlsMaxAutoLevelUpdated\";\n // Identifier for an error event - data: { type : error type, details : error details, fatal : if true, hls.js cannot/will not try to recover, if false, hls.js will try to recover,other error specific data }\n Events[\"ERROR\"] = \"hlsError\";\n // fired when hls.js instance starts destroying. Different from MEDIA_DETACHED as one could want to detach and reattach a media to the instance of hls.js to handle mid-rolls for example - data: { }\n Events[\"DESTROYING\"] = \"hlsDestroying\";\n // fired when a decrypt key loading starts - data: { frag : fragment object }\n Events[\"KEY_LOADING\"] = \"hlsKeyLoading\";\n // fired when a decrypt key loading is completed - data: { frag : fragment object, keyInfo : KeyLoaderInfo }\n Events[\"KEY_LOADED\"] = \"hlsKeyLoaded\";\n // deprecated; please use BACK_BUFFER_REACHED - data : { bufferEnd: number }\n Events[\"LIVE_BACK_BUFFER_REACHED\"] = \"hlsLiveBackBufferReached\";\n // fired when the back buffer is reached as defined by the backBufferLength config option - data : { bufferEnd: number }\n Events[\"BACK_BUFFER_REACHED\"] = \"hlsBackBufferReached\";\n // fired after steering manifest has been loaded - data: { steeringManifest: SteeringManifest object, url: steering manifest URL }\n Events[\"STEERING_MANIFEST_LOADED\"] = \"hlsSteeringManifestLoaded\";\n // fired when asset list has begun loading\n Events[\"ASSET_LIST_LOADING\"] = \"hlsAssetListLoading\";\n // fired when a valid asset list is loaded\n Events[\"ASSET_LIST_LOADED\"] = \"hlsAssetListLoaded\";\n // fired when the list of Interstitial Events and Interstitial Schedule is updated\n Events[\"INTERSTITIALS_UPDATED\"] = \"hlsInterstitialsUpdated\";\n // fired when the buffer reaches an Interstitial Schedule boundary (both Primary segments and Interstitial Assets)\n Events[\"INTERSTITIALS_BUFFERED_TO_BOUNDARY\"] = \"hlsInterstitialsBufferedToBoundary\";\n // fired when a player instance for an Interstitial Asset has been created\n Events[\"INTERSTITIAL_ASSET_PLAYER_CREATED\"] = \"hlsInterstitialAssetPlayerCreated\";\n // Interstitial playback started\n Events[\"INTERSTITIAL_STARTED\"] = \"hlsInterstitialStarted\";\n // InterstitialAsset playback started\n Events[\"INTERSTITIAL_ASSET_STARTED\"] = \"hlsInterstitialAssetStarted\";\n // InterstitialAsset playback ended\n Events[\"INTERSTITIAL_ASSET_ENDED\"] = \"hlsInterstitialAssetEnded\";\n // InterstitialAsset playback errored\n Events[\"INTERSTITIAL_ASSET_ERROR\"] = \"hlsInterstitialAssetError\";\n // Interstitial playback ended\n Events[\"INTERSTITIAL_ENDED\"] = \"hlsInterstitialEnded\";\n // Interstitial schedule resumed primary playback\n Events[\"INTERSTITIALS_PRIMARY_RESUMED\"] = \"hlsInterstitialsPrimaryResumed\";\n // Interstitial players dispatch this event when playout limit is reached\n Events[\"PLAYOUT_LIMIT_REACHED\"] = \"hlsPlayoutLimitReached\";\n // Event DateRange cue \"enter\" event dispatched\n Events[\"EVENT_CUE_ENTER\"] = \"hlsEventCueEnter\";\n return Events;\n}({});\n\n/**\n * Defines each Event type and payload by Event name. Used in {@link hls.js#HlsEventEmitter} to strongly type the event listener API.\n */\n\nvar PlaylistContextType = {\n MANIFEST: \"manifest\",\n LEVEL: \"level\",\n AUDIO_TRACK: \"audioTrack\",\n SUBTITLE_TRACK: \"subtitleTrack\"\n};\nvar PlaylistLevelType = {\n MAIN: \"main\",\n AUDIO: \"audio\",\n SUBTITLE: \"subtitle\"\n};\n\n/*\n * compute an Exponential Weighted moving average\n * - https://en.wikipedia.org/wiki/Moving_average#Exponential_moving_average\n * - heavily inspired from shaka-player\n */\n\nclass EWMA {\n // About half of the estimated value will be from the last |halfLife| samples by weight.\n constructor(halfLife, estimate = 0, weight = 0) {\n this.halfLife = void 0;\n this.alpha_ = void 0;\n this.estimate_ = void 0;\n this.totalWeight_ = void 0;\n this.halfLife = halfLife;\n // Larger values of alpha expire historical data more slowly.\n this.alpha_ = halfLife ? Math.exp(Math.log(0.5) / halfLife) : 0;\n this.estimate_ = estimate;\n this.totalWeight_ = weight;\n }\n sample(weight, value) {\n const adjAlpha = Math.pow(this.alpha_, weight);\n this.estimate_ = value * (1 - adjAlpha) + adjAlpha * this.estimate_;\n this.totalWeight_ += weight;\n }\n getTotalWeight() {\n return this.totalWeight_;\n }\n getEstimate() {\n if (this.alpha_) {\n const zeroFactor = 1 - Math.pow(this.alpha_, this.totalWeight_);\n if (zeroFactor) {\n return this.estimate_ / zeroFactor;\n }\n }\n return this.estimate_;\n }\n}\n\n/*\n * EWMA Bandwidth Estimator\n * - heavily inspired from shaka-player\n * Tracks bandwidth samples and estimates available bandwidth.\n * Based on the minimum of two exponentially-weighted moving averages with\n * different half-lives.\n */\n\nclass EwmaBandWidthEstimator {\n constructor(slow, fast, defaultEstimate, defaultTTFB = 100) {\n this.defaultEstimate_ = void 0;\n this.minWeight_ = void 0;\n this.minDelayMs_ = void 0;\n this.slow_ = void 0;\n this.fast_ = void 0;\n this.defaultTTFB_ = void 0;\n this.ttfb_ = void 0;\n this.defaultEstimate_ = defaultEstimate;\n this.minWeight_ = 0.001;\n this.minDelayMs_ = 50;\n this.slow_ = new EWMA(slow);\n this.fast_ = new EWMA(fast);\n this.defaultTTFB_ = defaultTTFB;\n this.ttfb_ = new EWMA(slow);\n }\n update(slow, fast) {\n const {\n slow_,\n fast_,\n ttfb_\n } = this;\n if (slow_.halfLife !== slow) {\n this.slow_ = new EWMA(slow, slow_.getEstimate(), slow_.getTotalWeight());\n }\n if (fast_.halfLife !== fast) {\n this.fast_ = new EWMA(fast, fast_.getEstimate(), fast_.getTotalWeight());\n }\n if (ttfb_.halfLife !== slow) {\n this.ttfb_ = new EWMA(slow, ttfb_.getEstimate(), ttfb_.getTotalWeight());\n }\n }\n sample(durationMs, numBytes) {\n durationMs = Math.max(durationMs, this.minDelayMs_);\n const numBits = 8 * numBytes;\n // weight is duration in seconds\n const durationS = durationMs / 1000;\n // value is bandwidth in bits/s\n const bandwidthInBps = numBits / durationS;\n this.fast_.sample(durationS, bandwidthInBps);\n this.slow_.sample(durationS, bandwidthInBps);\n }\n sampleTTFB(ttfb) {\n // weight is frequency curve applied to TTFB in seconds\n // (longer times have less weight with expected input under 1 second)\n const seconds = ttfb / 1000;\n const weight = Math.sqrt(2) * Math.exp(-Math.pow(seconds, 2) / 2);\n this.ttfb_.sample(weight, Math.max(ttfb, 5));\n }\n canEstimate() {\n return this.fast_.getTotalWeight() >= this.minWeight_;\n }\n getEstimate() {\n if (this.canEstimate()) {\n // console.log('slow estimate:'+ Math.round(this.slow_.getEstimate()));\n // console.log('fast estimate:'+ Math.round(this.fast_.getEstimate()));\n // Take the minimum of these two estimates. This should have the effect of\n // adapting down quickly, but up more slowly.\n return Math.min(this.fast_.getEstimate(), this.slow_.getEstimate());\n } else {\n return this.defaultEstimate_;\n }\n }\n getEstimateTTFB() {\n if (this.ttfb_.getTotalWeight() >= this.minWeight_) {\n return this.ttfb_.getEstimate();\n } else {\n return this.defaultTTFB_;\n }\n }\n get defaultEstimate() {\n return this.defaultEstimate_;\n }\n destroy() {}\n}\n\nfunction _defineProperty(e, r, t) {\n return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, {\n value: t,\n enumerable: true,\n configurable: true,\n writable: true\n }) : e[r] = t, e;\n}\nfunction _extends() {\n return _extends = Object.assign ? Object.assign.bind() : function (n) {\n for (var e = 1; e < arguments.length; e++) {\n var t = arguments[e];\n for (var r in t) ({}).hasOwnProperty.call(t, r) && (n[r] = t[r]);\n }\n return n;\n }, _extends.apply(null, arguments);\n}\nfunction ownKeys(e, r) {\n var t = Object.keys(e);\n if (Object.getOwnPropertySymbols) {\n var o = Object.getOwnPropertySymbols(e);\n r && (o = o.filter(function (r) {\n return Object.getOwnPropertyDescriptor(e, r).enumerable;\n })), t.push.apply(t, o);\n }\n return t;\n}\nfunction _objectSpread2(e) {\n for (var r = 1; r < arguments.length; r++) {\n var t = null != arguments[r] ? arguments[r] : {};\n r % 2 ? ownKeys(Object(t), true).forEach(function (r) {\n _defineProperty(e, r, t[r]);\n }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) {\n Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r));\n });\n }\n return e;\n}\nfunction _toPrimitive(t, r) {\n if (\"object\" != typeof t || !t) return t;\n var e = t[Symbol.toPrimitive];\n if (void 0 !== e) {\n var i = e.call(t, r);\n if (\"object\" != typeof i) return i;\n throw new TypeError(\"@@toPrimitive must return a primitive value.\");\n }\n return (\"string\" === r ? String : Number)(t);\n}\nfunction _toPropertyKey(t) {\n var i = _toPrimitive(t, \"string\");\n return \"symbol\" == typeof i ? i : i + \"\";\n}\n\nclass Logger {\n constructor(label, logger) {\n this.trace = void 0;\n this.debug = void 0;\n this.log = void 0;\n this.warn = void 0;\n this.info = void 0;\n this.error = void 0;\n const lb = `[${label}]:`;\n this.trace = noop;\n this.debug = logger.debug.bind(null, lb);\n this.log = logger.log.bind(null, lb);\n this.warn = logger.warn.bind(null, lb);\n this.info = logger.info.bind(null, lb);\n this.error = logger.error.bind(null, lb);\n }\n}\nconst noop = function noop() {};\nconst fakeLogger = {\n trace: noop,\n debug: noop,\n log: noop,\n warn: noop,\n info: noop,\n error: noop\n};\nfunction createLogger() {\n return _extends({}, fakeLogger);\n}\n\n// let lastCallTime;\n// function formatMsgWithTimeInfo(type, msg) {\n// const now = Date.now();\n// const diff = lastCallTime ? '+' + (now - lastCallTime) : '0';\n// lastCallTime = now;\n// msg = (new Date(now)).toISOString() + ' | [' + type + '] > ' + msg + ' ( ' + diff + ' ms )';\n// return msg;\n// }\n\nfunction consolePrintFn(type, id) {\n const func = self.console[type];\n return func ? func.bind(self.console, `${id ? '[' + id + '] ' : ''}[${type}] >`) : noop;\n}\nfunction getLoggerFn(key, debugConfig, id) {\n return debugConfig[key] ? debugConfig[key].bind(debugConfig) : consolePrintFn(key, id);\n}\nconst exportedLogger = createLogger();\nfunction enableLogs(debugConfig, context, id) {\n // check that console is available\n const newLogger = createLogger();\n if (typeof console === 'object' && debugConfig === true || typeof debugConfig === 'object') {\n const keys = [\n // Remove out from list here to hard-disable a log-level\n // 'trace',\n 'debug', 'log', 'info', 'warn', 'error'];\n keys.forEach(key => {\n newLogger[key] = getLoggerFn(key, debugConfig, id);\n });\n // Some browsers don't allow to use bind on console object anyway\n // fallback to default if needed\n try {\n newLogger.log(`Debug logs enabled for \"${context}\" in hls.js version ${\"1.6.16\"}`);\n } catch (e) {\n /* log fn threw an exception. All logger methods are no-ops. */\n return createLogger();\n }\n // global exported logger uses the same functions as new logger without `id`\n keys.forEach(key => {\n exportedLogger[key] = getLoggerFn(key, debugConfig);\n });\n } else {\n // Reset global exported logger\n _extends(exportedLogger, newLogger);\n }\n return newLogger;\n}\nconst logger = exportedLogger;\n\nfunction getMediaSource(preferManagedMediaSource = true) {\n if (typeof self === 'undefined') return undefined;\n const mms = (preferManagedMediaSource || !self.MediaSource) && self.ManagedMediaSource;\n return mms || self.MediaSource || self.WebKitMediaSource;\n}\nfunction isManagedMediaSource(source) {\n return typeof self !== 'undefined' && source === self.ManagedMediaSource;\n}\nfunction isCompatibleTrackChange(currentTracks, requiredTracks) {\n const trackNames = Object.keys(currentTracks);\n const requiredTrackNames = Object.keys(requiredTracks);\n const trackCount = trackNames.length;\n const requiredTrackCount = requiredTrackNames.length;\n return !trackCount || !requiredTrackCount || trackCount === requiredTrackCount && !trackNames.some(name => requiredTrackNames.indexOf(name) === -1);\n}\n\n// http://stackoverflow.com/questions/8936984/uint8array-to-string-in-javascript/22373197\n// http://www.onicos.com/staff/iz/amuse/javascript/expert/utf.txt\n/* utf.js - UTF-8 <=> UTF-16 convertion\n *\n * Copyright (C) 1999 Masanao Izumo <iz@onicos.co.jp>\n * Version: 1.0\n * LastModified: Dec 25 1999\n * This library is free. You can redistribute it and/or modify it.\n */\n/**\n * Converts a UTF-8 array to a string.\n *\n * @param array - The UTF-8 array to convert\n *\n * @returns The string\n *\n * @group Utils\n *\n * @beta\n */\nfunction utf8ArrayToStr(array, exitOnNull = false) {\n if (typeof TextDecoder !== 'undefined') {\n const decoder = new TextDecoder('utf-8');\n const decoded = decoder.decode(array);\n if (exitOnNull) {\n // grab up to the first null\n const idx = decoded.indexOf('\\0');\n return idx !== -1 ? decoded.substring(0, idx) : decoded;\n }\n // remove any null characters\n return decoded.replace(/\\0/g, '');\n }\n const len = array.length;\n let c;\n let char2;\n let char3;\n let out = '';\n let i = 0;\n while (i < len) {\n c = array[i++];\n if (c === 0x00 && exitOnNull) {\n return out;\n } else if (c === 0x00 || c === 0x03) {\n // If the character is 3 (END_OF_TEXT) or 0 (NULL) then skip it\n continue;\n }\n switch (c >> 4) {\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n case 6:\n case 7:\n // 0xxxxxxx\n out += String.fromCharCode(c);\n break;\n case 12:\n case 13:\n // 110x xxxx 10xx xxxx\n char2 = array[i++];\n out += String.fromCharCode((c & 0x1f) << 6 | char2 & 0x3f);\n break;\n case 14:\n // 1110 xxxx 10xx xxxx 10xx xxxx\n char2 = array[i++];\n char3 = array[i++];\n out += String.fromCharCode((c & 0x0f) << 12 | (char2 & 0x3f) << 6 | (char3 & 0x3f) << 0);\n break;\n }\n }\n return out;\n}\n\n/**\n * hex dump helper class\n */\n\nfunction arrayToHex(array) {\n let str = '';\n for (let i = 0; i < array.length; i++) {\n let h = array[i].toString(16);\n if (h.length < 2) {\n h = '0' + h;\n }\n str += h;\n }\n return str;\n}\nfunction hexToArrayBuffer(str) {\n return Uint8Array.from(str.replace(/^0x/, '').replace(/([\\da-fA-F]{2}) ?/g, '0x$1 ').replace(/ +$/, '').split(' ')).buffer;\n}\n\nfunction getDefaultExportFromCjs (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nvar urlToolkit = {exports: {}};\n\nvar hasRequiredUrlToolkit;\n\nfunction requireUrlToolkit () {\n\tif (hasRequiredUrlToolkit) return urlToolkit.exports;\n\thasRequiredUrlToolkit = 1;\n\t(function (module, exports) {\n\t\t// see https://tools.ietf.org/html/rfc1808\n\n\t\t(function (root) {\n\t\t var URL_REGEX =\n\t\t /^(?=((?:[a-zA-Z0-9+\\-.]+:)?))\\1(?=((?:\\/\\/[^\\/?#]*)?))\\2(?=((?:(?:[^?#\\/]*\\/)*[^;?#\\/]*)?))\\3((?:;[^?#]*)?)(\\?[^#]*)?(#[^]*)?$/;\n\t\t var FIRST_SEGMENT_REGEX = /^(?=([^\\/?#]*))\\1([^]*)$/;\n\t\t var SLASH_DOT_REGEX = /(?:\\/|^)\\.(?=\\/)/g;\n\t\t var SLASH_DOT_DOT_REGEX = /(?:\\/|^)\\.\\.\\/(?!\\.\\.\\/)[^\\/]*(?=\\/)/g;\n\n\t\t var URLToolkit = {\n\t\t // If opts.alwaysNormalize is true then the path will always be normalized even when it starts with / or //\n\t\t // E.g\n\t\t // With opts.alwaysNormalize = false (default, spec compliant)\n\t\t // http://a.com/b/cd + /e/f/../g => http://a.com/e/f/../g\n\t\t // With opts.alwaysNormalize = true (not spec compliant)\n\t\t // http://a.com/b/cd + /e/f/../g => http://a.com/e/g\n\t\t buildAbsoluteURL: function (baseURL, relativeURL, opts) {\n\t\t opts = opts || {};\n\t\t // remove any remaining space and CRLF\n\t\t baseURL = baseURL.trim();\n\t\t relativeURL = relativeURL.trim();\n\t\t if (!relativeURL) {\n\t\t // 2a) If the embedded URL is entirely empty, it inherits the\n\t\t // entire base URL (i.e., is set equal to the base URL)\n\t\t // and we are done.\n\t\t if (!opts.alwaysNormalize) {\n\t\t return baseURL;\n\t\t }\n\t\t var basePartsForNormalise = URLToolkit.parseURL(baseURL);\n\t\t if (!basePartsForNormalise) {\n\t\t throw new Error('Error trying to parse base URL.');\n\t\t }\n\t\t basePartsForNormalise.path = URLToolkit.normalizePath(\n\t\t basePartsForNormalise.path\n\t\t );\n\t\t return URLToolkit.buildURLFromParts(basePartsForNormalise);\n\t\t }\n\t\t var relativeParts = URLToolkit.parseURL(relativeURL);\n\t\t if (!relativeParts) {\n\t\t throw new Error('Error trying to parse relative URL.');\n\t\t }\n\t\t if (relativeParts.scheme) {\n\t\t // 2b) If the embedded URL starts with a scheme name, it is\n\t\t // interpreted as an absolute URL and we are done.\n\t\t if (!opts.alwaysNormalize) {\n\t\t return relativeURL;\n\t\t }\n\t\t relativeParts.path = URLToolkit.normalizePath(relativeParts.path);\n\t\t return URLToolkit.buildURLFromParts(relativeParts);\n\t\t }\n\t\t var baseParts = URLToolkit.parseURL(baseURL);\n\t\t if (!baseParts) {\n\t\t throw new Error('Error trying to parse base URL.');\n\t\t }\n\t\t if (!baseParts.netLoc && baseParts.path && baseParts.path[0] !== '/') {\n\t\t // If netLoc missing and path doesn't start with '/', assume everthing before the first '/' is the netLoc\n\t\t // This causes 'example.com/a' to be handled as '//example.com/a' instead of '/example.com/a'\n\t\t var pathParts = FIRST_SEGMENT_REGEX.exec(baseParts.path);\n\t\t baseParts.netLoc = pathParts[1];\n\t\t baseParts.path = pathParts[2];\n\t\t }\n\t\t if (baseParts.netLoc && !baseParts.path) {\n\t\t baseParts.path = '/';\n\t\t }\n\t\t var builtParts = {\n\t\t // 2c) Otherwise, the embedded URL inherits the scheme of\n\t\t // the base URL.\n\t\t scheme: baseParts.scheme,\n\t\t netLoc: relativeParts.netLoc,\n\t\t path: null,\n\t\t params: relativeParts.params,\n\t\t query: relativeParts.query,\n\t\t fragment: relativeParts.fragment,\n\t\t };\n\t\t if (!relativeParts.netLoc) {\n\t\t // 3) If the embedded URL's <net_loc> is non-empty, we skip to\n\t\t // Step 7. Otherwise, the embedded URL inherits the <net_loc>\n\t\t // (if any) of the base URL.\n\t\t builtParts.netLoc = baseParts.netLoc;\n\t\t // 4) If the embedded URL path is preceded by a slash \"/\", the\n\t\t // path is not relative and we skip to Step 7.\n\t\t if (relativeParts.path[0] !== '/') {\n\t\t if (!relativeParts.path) {\n\t\t // 5) If the embedded URL path is empty (and not preceded by a\n\t\t // slash), then the embedded URL inherits the base URL path\n\t\t builtParts.path = baseParts.path;\n\t\t // 5a) if the embedded URL's <params> is non-empty, we skip to\n\t\t // step 7; otherwise, it inherits the <params> of the base\n\t\t // URL (if any) and\n\t\t if (!relativeParts.params) {\n\t\t builtParts.params = baseParts.params;\n\t\t // 5b) if the embedded URL's <query> is non-empty, we skip to\n\t\t // step 7; otherwise, it inherits the <query> of the base\n\t\t // URL (if any) and we skip to step 7.\n\t\t if (!relativeParts.query) {\n\t\t builtParts.query = baseParts.query;\n\t\t }\n\t\t }\n\t\t } else {\n\t\t // 6) The last segment of the base URL's path (anything\n\t\t // following the rightmost slash \"/\", or the entire path if no\n\t\t // slash is present) is removed and the embedded URL's path is\n\t\t // appended in its place.\n\t\t var baseURLPath = baseParts.path;\n\t\t var newPath =\n\t\t baseURLPath.substring(0, baseURLPath.lastIndexOf('/') + 1) +\n\t\t relativeParts.path;\n\t\t builtParts.path = URLToolkit.normalizePath(newPath);\n\t\t }\n\t\t }\n\t\t }\n\t\t if (builtParts.path === null) {\n\t\t builtParts.path = opts.alwaysNormalize\n\t\t ? URLToolkit.normalizePath(relativeParts.path)\n\t\t : relativeParts.path;\n\t\t }\n\t\t return URLToolkit.buildURLFromParts(builtParts);\n\t\t },\n\t\t parseURL: function (url) {\n\t\t var parts = URL_REGEX.exec(url);\n\t\t if (!parts) {\n\t\t return null;\n\t\t }\n\t\t return {\n\t\t scheme: parts[1] || '',\n\t\t netLoc: parts[2] || '',\n\t\t path: parts[3] || '',\n\t\t params: parts[4] || '',\n\t\t query: parts[5] || '',\n\t\t fragment: parts[6] || '',\n\t\t };\n\t\t },\n\t\t normalizePath: function (path) {\n\t\t // The following operations are\n\t\t // then applied, in order, to the new path:\n\t\t // 6a) All occurrences of \"./\", where \".\" is a complete path\n\t\t // segment, are removed.\n\t\t // 6b) If the path ends with \".\" as a complete path segment,\n\t\t // that \".\" is removed.\n\t\t path = path.split('').reverse().join('').replace(SLASH_DOT_REGEX, '');\n\t\t // 6c) All occurrences of \"<segment>/../\", where <segment> is a\n\t\t // complete path segment not equal to \"..\", are removed.\n\t\t // Removal of these path segments is performed iteratively,\n\t\t // removing the leftmost matching pattern on each iteration,\n\t\t // until no matching pattern remains.\n\t\t // 6d) If the path ends with \"<segment>/..\", where <segment> is a\n\t\t // complete path segment not equal to \"..\", that\n\t\t // \"<segment>/..\" is removed.\n\t\t while (\n\t\t path.length !== (path = path.replace(SLASH_DOT_DOT_REGEX, '')).length\n\t\t ) {}\n\t\t return path.split('').reverse().join('');\n\t\t },\n\t\t buildURLFromParts: function (parts) {\n\t\t return (\n\t\t parts.scheme +\n\t\t parts.netLoc +\n\t\t parts.path +\n\t\t parts.params +\n\t\t parts.query +\n\t\t parts.fragment\n\t\t );\n\t\t },\n\t\t };\n\n\t\t module.exports = URLToolkit;\n\t\t})(); \n\t} (urlToolkit));\n\treturn urlToolkit.exports;\n}\n\nvar urlToolkitExports = requireUrlToolkit();\n\nclass LoadStats {\n constructor() {\n this.aborted = false;\n this.loaded = 0;\n this.retry = 0;\n this.total = 0;\n this.chunkCount = 0;\n this.bwEstimate = 0;\n this.loading = {\n start: 0,\n first: 0,\n end: 0\n };\n this.parsing = {\n start: 0,\n end: 0\n };\n this.buffering = {\n start: 0,\n first: 0,\n end: 0\n };\n }\n}\n\nvar ElementaryStreamTypes = {\n AUDIO: \"audio\",\n VIDEO: \"video\",\n AUDIOVIDEO: \"audiovideo\"\n};\nclass BaseSegment {\n constructor(base) {\n this._byteRange = null;\n this._url = null;\n this._stats = null;\n this._streams = null;\n // baseurl is the URL to the playlist\n this.base = void 0;\n // relurl is the portion of the URL that comes from inside the playlist.\n this.relurl = void 0;\n if (typeof base === 'string') {\n base = {\n url: base\n };\n }\n this.base = base;\n makeEnumerable(this, 'stats');\n }\n\n // setByteRange converts a EXT-X-BYTERANGE attribute into a two element array\n setByteRange(value, previous) {\n const params = value.split('@', 2);\n let start;\n if (params.length === 1) {\n start = (previous == null ? void 0 : previous.byteRangeEndOffset) || 0;\n } else {\n start = parseInt(params[1]);\n }\n this._byteRange = [start, parseInt(params[0]) + start];\n }\n get baseurl() {\n return this.base.url;\n }\n get byteRange() {\n if (this._byteRange === null) {\n return [];\n }\n return this._byteRange;\n }\n get byteRangeStartOffset() {\n return this.byteRange[0];\n }\n get byteRangeEndOffset() {\n return this.byteRange[1];\n }\n get elementaryStreams() {\n if (this._streams === null) {\n this._streams = {\n [ElementaryStreamTypes.AUDIO]: null,\n [ElementaryStreamTypes.VIDEO]: null,\n [ElementaryStreamTypes.AUDIOVIDEO]: null\n };\n }\n return this._streams;\n }\n set elementaryStreams(value) {\n this._streams = value;\n }\n get hasStats() {\n return this._stats !== null;\n }\n get hasStreams() {\n return this._streams !== null;\n }\n get stats() {\n if (this._stats === null) {\n this._stats = new LoadStats();\n }\n return this._stats;\n }\n set stats(value) {\n this._stats = value;\n }\n get url() {\n if (!this._url && this.baseurl && this.relurl) {\n this._url = urlToolkitExports.buildAbsoluteURL(this.baseurl, this.relurl, {\n alwaysNormalize: true\n });\n }\n return this._url || '';\n }\n set url(value) {\n this._url = value;\n }\n clearElementaryStreamInfo() {\n const {\n elementaryStreams\n } = this;\n elementaryStreams[ElementaryStreamTypes.AUDIO] = null;\n elementaryStreams[ElementaryStreamTypes.VIDEO] = null;\n elementaryStreams[ElementaryStreamTypes.AUDIOVIDEO] = null;\n }\n}\nfunction isMediaFragment(frag) {\n return frag.sn !== 'initSegment';\n}\n\n/**\n * Object representing parsed data from an HLS Segment. Found in {@link hls.js#LevelDetails.fragments}.\n */\nclass Fragment extends BaseSegment {\n constructor(type, base) {\n super(base);\n this._decryptdata = null;\n this._programDateTime = null;\n this._ref = null;\n // Approximate bit rate of the fragment expressed in bits per second (bps) as indicated by the last EXT-X-BITRATE (kbps) tag\n this._bitrate = void 0;\n this.rawProgramDateTime = null;\n this.tagList = [];\n // EXTINF has to be present for a m3u8 to be considered valid\n this.duration = 0;\n // sn notates the sequence number for a segment, and if set to a string can be 'initSegment'\n this.sn = 0;\n // levelkeys are the EXT-X-KEY tags that apply to this segment for decryption\n // core difference from the private field _decryptdata is the lack of the initialized IV\n // _decryptdata will set the IV for this segment based on the segment number in the fragment\n this.levelkeys = void 0;\n // A string representing the fragment type\n this.type = void 0;\n // A reference to the loader. Set while the fragment is loading, and removed afterwards. Used to abort fragment loading\n this.loader = null;\n // A reference to the key loader. Set while the key is loading, and removed afterwards. Used to abort key loading\n this.keyLoader = null;\n // The level/track index to which the fragment belongs\n this.level = -1;\n // The continuity counter of the fragment\n this.cc = 0;\n // The starting Presentation Time Stamp (PTS) of the fragment. Set after transmux complete.\n this.startPTS = void 0;\n // The ending Presentation Time Stamp (PTS) of the fragment. Set after transmux complete.\n this.endPTS = void 0;\n // The starting Decode Time Stamp (DTS) of the fragment. Set after transmux complete.\n this.startDTS = void 0;\n // The ending Decode Time Stamp (DTS) of the fragment. Set after transmux complete.\n this.endDTS = void 0;\n // The start time of the fragment, as listed in the manifest. Updated after transmux complete.\n this.start = 0;\n // The offset time (seconds) of the fragment from the start of the Playlist\n this.playlistOffset = 0;\n // Set by `updateFragPTSDTS` in level-helper\n this.deltaPTS = void 0;\n // The maximum starting Presentation Time Stamp (audio/video PTS) of the fragment. Set after transmux complete.\n this.maxStartPTS = void 0;\n // The minimum ending Presentation Time Stamp (audio/video PTS) of the fragment. Set after transmux complete.\n this.minEndPTS = void 0;\n // Init Segment bytes (unset for media segments)\n this.data = void 0;\n // A flag indicating whether the segment was downloaded in order to test bitrate, and was not buffered\n this.bitrateTest = false;\n // #EXTINF segment title\n this.title = null;\n // The Media Initialization Section for this segment\n this.initSegment = null;\n // Fragment is the last fragment in the media playlist\n this.endList = void 0;\n // Fragment is marked by an EXT-X-GAP tag indicating that it does not contain media data and should not be loaded\n this.gap = void 0;\n // Deprecated\n this.urlId = 0;\n this.type = type;\n }\n get byteLength() {\n if (this.hasStats) {\n const total = this.stats.total;\n if (total) {\n return total;\n }\n }\n if (this.byteRange.length) {\n const start = this.byteRange[0];\n const end = this.byteRange[1];\n if (isFiniteNumber(start) && isFiniteNumber(end)) {\n return end - start;\n }\n }\n return null;\n }\n get bitrate() {\n if (this.byteLength) {\n return this.byteLength * 8 / this.duration;\n }\n if (this._bitrate) {\n return this._bitrate;\n }\n return null;\n }\n set bitrate(value) {\n this._bitrate = value;\n }\n get decryptdata() {\n var _this$_decryptdata;\n const {\n levelkeys\n } = this;\n if (!levelkeys || levelkeys.NONE) {\n return null;\n }\n if (levelkeys.identity) {\n if (!this._decryptdata) {\n this._decryptdata = levelkeys.identity.getDecryptData(this.sn);\n }\n } else if (!((_this$_decryptdata = this._decryptdata) != null && _this$_decryptdata.keyId)) {\n const keyFormats = Object.keys(levelkeys);\n if (keyFormats.length === 1) {\n const levelKey = this._decryptdata = levelkeys[keyFormats[0]] || null;\n if (levelKey) {\n this._decryptdata = levelKey.getDecryptData(this.sn, levelkeys);\n }\n }\n }\n return this._decryptdata;\n }\n get end() {\n return this.start + this.duration;\n }\n get endProgramDateTime() {\n if (this.programDateTime === null) {\n return null;\n }\n const duration = !isFiniteNumber(this.duration) ? 0 : this.duration;\n return this.programDateTime + duration * 1000;\n }\n get encrypted() {\n var _this$_decryptdata2;\n // At the m3u8-parser level we need to add support for manifest signalled keyformats\n // when we want the fragment to start reporting that it is encrypted.\n // Currently, keyFormat will only be set for identity keys\n if ((_this$_decryptdata2 = this._decryptdata) != null && _this$_decryptdata2.encrypted) {\n return true;\n } else if (this.levelkeys) {\n var _this$levelkeys$keyFo;\n const keyFormats = Object.keys(this.levelkeys);\n const len = keyFormats.length;\n if (len > 1 || len === 1 && (_this$levelkeys$keyFo = this.levelkeys[keyFormats[0]]) != null && _this$levelkeys$keyFo.encrypted) {\n return true;\n }\n }\n return false;\n }\n get programDateTime() {\n if (this._programDateTime === null && this.rawProgramDateTime) {\n this.programDateTime = Date.parse(this.rawProgramDateTime);\n }\n return this._programDateTime;\n }\n set programDateTime(value) {\n if (!isFiniteNumber(value)) {\n this._programDateTime = this.rawProgramDateTime = null;\n return;\n }\n this._programDateTime = value;\n }\n get ref() {\n if (!isMediaFragment(this)) {\n return null;\n }\n if (!this._ref) {\n this._ref = {\n base: this.base,\n start: this.start,\n duration: this.duration,\n sn: this.sn,\n programDateTime: this.programDateTime\n };\n }\n return this._ref;\n }\n addStart(value) {\n this.setStart(this.start + value);\n }\n setStart(value) {\n this.start = value;\n if (this._ref) {\n this._ref.start = value;\n }\n }\n setDuration(value) {\n this.duration = value;\n if (this._ref) {\n this._ref.duration = value;\n }\n }\n setKeyFormat(keyFormat) {\n const levelkeys = this.levelkeys;\n if (levelkeys) {\n var _this$_decryptdata3;\n const key = levelkeys[keyFormat];\n if (key && !((_this$_decryptdata3 = this._decryptdata) != null && _this$_decryptdata3.keyId)) {\n this._decryptdata = key.getDecryptData(this.sn, levelkeys);\n }\n }\n }\n abortRequests() {\n var _this$loader, _this$keyLoader;\n (_this$loader = this.loader) == null || _this$loader.abort();\n (_this$keyLoader = this.keyLoader) == null || _this$keyLoader.abort();\n }\n setElementaryStreamInfo(type, startPTS, endPTS, startDTS, endDTS, partial = false) {\n const {\n elementaryStreams\n } = this;\n const info = elementaryStreams[type];\n if (!info) {\n elementaryStreams[type] = {\n startPTS,\n endPTS,\n startDTS,\n endDTS,\n partial\n };\n return;\n }\n info.startPTS = Math.min(info.startPTS, startPTS);\n info.endPTS = Math.max(info.endPTS, endPTS);\n info.startDTS = Math.min(info.startDTS, startDTS);\n info.endDTS = Math.max(info.endDTS, endDTS);\n }\n}\n\n/**\n * Object representing parsed data from an HLS Partial Segment. Found in {@link hls.js#LevelDetails.partList}.\n */\nclass Part extends BaseSegment {\n constructor(partAttrs, frag, base, index, previous) {\n super(base);\n this.fragOffset = 0;\n this.duration = 0;\n this.gap = false;\n this.independent = false;\n this.relurl = void 0;\n this.fragment = void 0;\n this.index = void 0;\n this.duration = partAttrs.decimalFloatingPoint('DURATION');\n this.gap = partAttrs.bool('GAP');\n this.independent = partAttrs.bool('INDEPENDENT');\n this.relurl = partAttrs.enumeratedString('URI');\n this.fragment = frag;\n this.index = index;\n const byteRange = partAttrs.enumeratedString('BYTERANGE');\n if (byteRange) {\n this.setByteRange(byteRange, previous);\n }\n if (previous) {\n this.fragOffset = previous.fragOffset + previous.duration;\n }\n }\n get start() {\n return this.fragment.start + this.fragOffset;\n }\n get end() {\n return this.start + this.duration;\n }\n get loaded() {\n const {\n elementaryStreams\n } = this;\n return !!(elementaryStreams.audio || elementaryStreams.video || elementaryStreams.audiovideo);\n }\n}\nfunction getOwnPropertyDescriptorFromPrototypeChain(object, property) {\n const prototype = Object.getPrototypeOf(object);\n if (prototype) {\n const propertyDescriptor = Object.getOwnPropertyDescriptor(prototype, property);\n if (propertyDescriptor) {\n return propertyDescriptor;\n }\n return getOwnPropertyDescriptorFromPrototypeChain(prototype, property);\n }\n}\nfunction makeEnumerable(object, property) {\n const d = getOwnPropertyDescriptorFromPrototypeChain(object, property);\n if (d) {\n d.enumerable = true;\n Object.defineProperty(object, property, d);\n }\n}\n\nconst UINT32_MAX$1 = Math.pow(2, 32) - 1;\nconst push = [].push;\n\n// We are using fixed track IDs for driving the MP4 remuxer\n// instead of following the TS PIDs.\n// There is no reason not to do this and some browsers/SourceBuffer-demuxers\n// may not like if there are TrackID \"switches\"\n// See https://github.com/video-dev/hls.js/issues/1331\n// Here we are mapping our internal track types to constant MP4 track IDs\n// With MSE currently one can only have one track of each, and we are muxing\n// whatever video/audio rendition in them.\nconst RemuxerTrackIdConfig = {\n video: 1,\n audio: 2,\n id3: 3,\n text: 4\n};\nfunction bin2str(data) {\n return String.fromCharCode.apply(null, data);\n}\nfunction readUint16(buffer, offset) {\n const val = buffer[offset] << 8 | buffer[offset + 1];\n return val < 0 ? 65536 + val : val;\n}\nfunction readUint32(buffer, offset) {\n const val = readSint32(buffer, offset);\n return val < 0 ? 4294967296 + val : val;\n}\nfunction readUint64(buffer, offset) {\n let result = readUint32(buffer, offset);\n result *= Math.pow(2, 32);\n result += readUint32(buffer, offset + 4);\n return result;\n}\nfunction readSint32(buffer, offset) {\n return buffer[offset] << 24 | buffer[offset + 1] << 16 | buffer[offset + 2] << 8 | buffer[offset + 3];\n}\n\n// Find \"moof\" box\nfunction hasMoofData(data) {\n const end = data.byteLength;\n for (let i = 0; i < end;) {\n const size = readUint32(data, i);\n if (size > 8 && data[i + 4] === 0x6d && data[i + 5] === 0x6f && data[i + 6] === 0x6f && data[i + 7] === 0x66) {\n return true;\n }\n i = size > 1 ? i + size : end;\n }\n return false;\n}\n\n// Find the data for a box specified by its path\nfunction findBox(data, path) {\n const results = [];\n if (!path.length) {\n // short-circuit the search for empty paths\n return results;\n }\n const end = data.byteLength;\n for (let i = 0; i < end;) {\n const size = readUint32(data, i);\n const type = bin2str(data.subarray(i + 4, i + 8));\n const endbox = size > 1 ? i + size : end;\n if (type === path[0]) {\n if (path.length === 1) {\n // this is the end of the path and we've found the box we were\n // looking for\n results.push(data.subarray(i + 8, endbox));\n } else {\n // recursively search for the next box along the path\n const subresults = findBox(data.subarray(i + 8, endbox), path.slice(1));\n if (subresults.length) {\n push.apply(results, subresults);\n }\n }\n }\n i = endbox;\n }\n\n // we've finished searching all of data\n return results;\n}\nfunction parseSegmentIndex(sidx) {\n const references = [];\n const version = sidx[0];\n\n // set initial offset, we skip the reference ID (not needed)\n let index = 8;\n const timescale = readUint32(sidx, index);\n index += 4;\n let earliestPresentationTime = 0;\n let firstOffset = 0;\n if (version === 0) {\n earliestPresentationTime = readUint32(sidx, index);\n firstOffset = readUint32(sidx, index + 4);\n index += 8;\n } else {\n earliestPresentationTime = readUint64(sidx, index);\n firstOffset = readUint64(sidx, index + 8);\n index += 16;\n }\n\n // skip reserved\n index += 2;\n let startByte = sidx.length + firstOffset;\n const referencesCount = readUint16(sidx, index);\n index += 2;\n for (let i = 0; i < referencesCount; i++) {\n let referenceIndex = index;\n const referenceInfo = readUint32(sidx, referenceIndex);\n referenceIndex += 4;\n const referenceSize = referenceInfo & 0x7fffffff;\n const referenceType = (referenceInfo & 0x80000000) >>> 31;\n if (referenceType === 1) {\n logger.warn('SIDX has hierarchical references (not supported)');\n return null;\n }\n const subsegmentDuration = readUint32(sidx, referenceIndex);\n referenceIndex += 4;\n references.push({\n referenceSize,\n subsegmentDuration,\n // unscaled\n info: {\n duration: subsegmentDuration / timescale,\n start: startByte,\n end: startByte + referenceSize - 1\n }\n });\n startByte += referenceSize;\n\n // Skipping 1 bit for |startsWithSap|, 3 bits for |sapType|, and 28 bits\n // for |sapDelta|.\n referenceIndex += 4;\n\n // skip to next ref\n index = referenceIndex;\n }\n return {\n earliestPresentationTime,\n timescale,\n version,\n referencesCount,\n references\n };\n}\n\n/**\n * Parses an MP4 initialization segment and extracts stream type and\n * timescale values for any declared tracks. Timescale values indicate the\n * number of clock ticks per second to assume for time-based values\n * elsewhere in the MP4.\n *\n * To determine the start time of an MP4, you need two pieces of\n * information: the timescale unit and the earliest base media decode\n * time. Multiple timescales can be specified within an MP4 but the\n * base media decode time is always expressed in the timescale from\n * the media header box for the track:\n * ```\n * moov > trak > mdia > mdhd.timescale\n * moov > trak > mdia > hdlr\n * ```\n * @param initSegment the bytes of the init segment\n * @returns a hash of track type to timescale values or null if\n * the init segment is malformed.\n */\n\nfunction parseInitSegment(initSegment) {\n const result = [];\n const traks = findBox(initSegment, ['moov', 'trak']);\n for (let i = 0; i < traks.length; i++) {\n const trak = traks[i];\n const tkhd = findBox(trak, ['tkhd'])[0];\n if (tkhd) {\n let version = tkhd[0];\n const trackId = readUint32(tkhd, version === 0 ? 12 : 20);\n const mdhd = findBox(trak, ['mdia', 'mdhd'])[0];\n if (mdhd) {\n version = mdhd[0];\n const timescale = readUint32(mdhd, version === 0 ? 12 : 20);\n const hdlr = findBox(trak, ['mdia', 'hdlr'])[0];\n if (hdlr) {\n const hdlrType = bin2str(hdlr.subarray(8, 12));\n const type = {\n soun: ElementaryStreamTypes.AUDIO,\n vide: ElementaryStreamTypes.VIDEO\n }[hdlrType];\n // Parse codec details\n const stsdBox = findBox(trak, ['mdia', 'minf', 'stbl', 'stsd'])[0];\n const stsd = parseStsd(stsdBox);\n if (type) {\n // Add 'audio', 'video', and 'audiovideo' track records that will map to SourceBuffers\n result[trackId] = {\n timescale,\n type,\n stsd\n };\n result[type] = _objectSpread2({\n timescale,\n id: trackId\n }, stsd);\n } else {\n // Add 'meta' and other track records\n result[trackId] = {\n timescale,\n type: hdlrType,\n stsd\n };\n }\n }\n }\n }\n }\n const trex = findBox(initSegment, ['moov', 'mvex', 'trex']);\n trex.forEach(trex => {\n const trackId = readUint32(trex, 4);\n const track = result[trackId];\n if (track) {\n track.default = {\n duration: readUint32(trex, 12),\n flags: readUint32(trex, 20)\n };\n }\n });\n return result;\n}\nfunction parseStsd(stsd) {\n const sampleEntries = stsd.subarray(8);\n const sampleEntriesEnd = sampleEntries.subarray(8 + 78);\n const fourCC = bin2str(sampleEntries.subarray(4, 8));\n let codec = fourCC;\n let supplemental;\n const encrypted = fourCC === 'enca' || fourCC === 'encv';\n if (encrypted) {\n const encBox = findBox(sampleEntries, [fourCC])[0];\n const encBoxChildren = encBox.subarray(fourCC === 'enca' ? 28 : 78);\n const sinfs = findBox(encBoxChildren, ['sinf']);\n sinfs.forEach(sinf => {\n const schm = findBox(sinf, ['schm'])[0];\n if (schm) {\n const scheme = bin2str(schm.subarray(4, 8));\n if (scheme === 'cbcs' || scheme === 'cenc') {\n const frma = findBox(sinf, ['frma'])[0];\n if (frma) {\n // for encrypted content codec fourCC will be in frma\n codec = bin2str(frma);\n }\n }\n }\n });\n }\n const codecFourCC = codec;\n switch (codec) {\n case 'avc1':\n case 'avc2':\n case 'avc3':\n case 'avc4':\n {\n // extract profile + compatibility + level out of avcC box\n const avcCBox = findBox(sampleEntriesEnd, ['avcC'])[0];\n if (avcCBox && avcCBox.length > 3) {\n codec += '.' + toHex(avcCBox[1]) + toHex(avcCBox[2]) + toHex(avcCBox[3]);\n supplemental = parseSupplementalDoViCodec(codecFourCC === 'avc1' ? 'dva1' : 'dvav', sampleEntriesEnd);\n }\n break;\n }\n case 'mp4a':\n {\n const codecBox = findBox(sampleEntries, [fourCC])[0];\n const esdsBox = findBox(codecBox.subarray(28), ['esds'])[0];\n if (esdsBox && esdsBox.length > 7) {\n let i = 4;\n // ES Descriptor tag\n if (esdsBox[i++] !== 0x03) {\n break;\n }\n i = skipBERInteger(esdsBox, i);\n i += 2; // skip es_id;\n const flags = esdsBox[i++];\n if (flags & 0x80) {\n i += 2; // skip dependency es_id\n }\n if (flags & 0x40) {\n i += esdsBox[i++]; // skip URL\n }\n // Decoder config descriptor\n if (esdsBox[i++] !== 0x04) {\n break;\n }\n i = skipBERInteger(esdsBox, i);\n const objectType = esdsBox[i++];\n if (objectType === 0x40) {\n codec += '.' + toHex(objectType);\n } else {\n break;\n }\n i += 12;\n // Decoder specific info\n if (esdsBox[i++] !== 0x05) {\n break;\n }\n i = skipBERInteger(esdsBox, i);\n const firstByte = esdsBox[i++];\n let audioObjectType = (firstByte & 0xf8) >> 3;\n if (audioObjectType === 31) {\n audioObjectType += 1 + ((firstByte & 0x7) << 3) + ((esdsBox[i] & 0xe0) >> 5);\n }\n codec += '.' + audioObjectType;\n }\n break;\n }\n case 'hvc1':\n case 'hev1':\n {\n const hvcCBox = findBox(sampleEntriesEnd, ['hvcC'])[0];\n if (hvcCBox && hvcCBox.length > 12) {\n const profileByte = hvcCBox[1];\n const profileSpace = ['', 'A', 'B', 'C'][profileByte >> 6];\n const generalProfileIdc = profileByte & 0x1f;\n const profileCompat = readUint32(hvcCBox, 2);\n const tierFlag = (profileByte & 0x20) >> 5 ? 'H' : 'L';\n const levelIDC = hvcCBox[12];\n const constraintIndicator = hvcCBox.subarray(6, 12);\n codec += '.' + profileSpace + generalProfileIdc;\n codec += '.' + reverse32BitInt(profileCompat).toString(16).toUpperCase();\n codec += '.' + tierFlag + levelIDC;\n let constraintString = '';\n for (let i = constraintIndicator.length; i--;) {\n const byte = constraintIndicator[i];\n if (byte || constraintString) {\n const encodedByte = byte.toString(16).toUpperCase();\n constraintString = '.' + encodedByte + constraintString;\n }\n }\n codec += constraintString;\n }\n supplemental = parseSupplementalDoViCodec(codecFourCC == 'hev1' ? 'dvhe' : 'dvh1', sampleEntriesEnd);\n break;\n }\n case 'dvh1':\n case 'dvhe':\n case 'dvav':\n case 'dva1':\n case 'dav1':\n {\n codec = parseSupplementalDoViCodec(codec, sampleEntriesEnd) || codec;\n break;\n }\n case 'vp09':\n {\n const vpcCBox = findBox(sampleEntriesEnd, ['vpcC'])[0];\n if (vpcCBox && vpcCBox.length > 6) {\n const profile = vpcCBox[4];\n const level = vpcCBox[5];\n const bitDepth = vpcCBox[6] >> 4 & 0x0f;\n codec += '.' + addLeadingZero(profile) + '.' + addLeadingZero(level) + '.' + addLeadingZero(bitDepth);\n }\n break;\n }\n case 'av01':\n {\n const av1CBox = findBox(sampleEntriesEnd, ['av1C'])[0];\n if (av1CBox && av1CBox.length > 2) {\n const profile = av1CBox[1] >>> 5;\n const level = av1CBox[1] & 0x1f;\n const tierFlag = av1CBox[2] >>> 7 ? 'H' : 'M';\n const highBitDepth = (av1CBox[2] & 0x40) >> 6;\n const twelveBit = (av1CBox[2] & 0x20) >> 5;\n const bitDepth = profile === 2 && highBitDepth ? twelveBit ? 12 : 10 : highBitDepth ? 10 : 8;\n const monochrome = (av1CBox[2] & 0x10) >> 4;\n const chromaSubsamplingX = (av1CBox[2] & 0x08) >> 3;\n const chromaSubsamplingY = (av1CBox[2] & 0x04) >> 2;\n const chromaSamplePosition = av1CBox[2] & 0x03;\n // TODO: parse color_description_present_flag\n // default it to BT.709/limited range for now\n // more info https://aomediacodec.github.io/av1-isobmff/#av1codecconfigurationbox-syntax\n const colorPrimaries = 1;\n const transferCharacteristics = 1;\n const matrixCoefficients = 1;\n const videoFullRangeFlag = 0;\n codec += '.' + profile + '.' + addLeadingZero(level) + tierFlag + '.' + addLeadingZero(bitDepth) + '.' + monochrome + '.' + chromaSubsamplingX + chromaSubsamplingY + chromaSamplePosition + '.' + addLeadingZero(colorPrimaries) + '.' + addLeadingZero(transferCharacteristics) + '.' + addLeadingZero(matrixCoefficients) + '.' + videoFullRangeFlag;\n supplemental = parseSupplementalDoViCodec('dav1', sampleEntriesEnd);\n }\n break;\n }\n }\n return {\n codec,\n encrypted,\n supplemental\n };\n}\nfunction parseSupplementalDoViCodec(fourCC, sampleEntriesEnd) {\n const dvvCResult = findBox(sampleEntriesEnd, ['dvvC']); // used by DoVi Profile 8 to 10\n const dvXCBox = dvvCResult.length ? dvvCResult[0] : findBox(sampleEntriesEnd, ['dvcC'])[0]; // used by DoVi Profiles up to 7 and 20\n if (dvXCBox) {\n const doViProfile = dvXCBox[2] >> 1 & 0x7f;\n const doViLevel = dvXCBox[2] << 5 & 0x20 | dvXCBox[3] >> 3 & 0x1f;\n return fourCC + '.' + addLeadingZero(doViProfile) + '.' + addLeadingZero(doViLevel);\n }\n}\nfunction reverse32BitInt(val) {\n let result = 0;\n for (let i = 0; i < 32; i++) {\n result |= (val >> i & 1) << 32 - 1 - i;\n }\n return result >>> 0;\n}\nfunction skipBERInteger(bytes, i) {\n const limit = i + 5;\n while (bytes[i++] & 0x80 && i < limit) {\n /* do nothing */\n }\n return i;\n}\nfunction toHex(x) {\n return ('0' + x.toString(16).toUpperCase()).slice(-2);\n}\nfunction addLeadingZero(num) {\n return (num < 10 ? '0' : '') + num;\n}\nfunction patchEncyptionData(initSegment, decryptdata) {\n if (!initSegment || !decryptdata) {\n return;\n }\n const keyId = decryptdata.keyId;\n if (keyId && decryptdata.isCommonEncryption) {\n applyToTencBoxes(initSegment, (tenc, isAudio) => {\n // Look for default key id (keyID offset is always 8 within the tenc box):\n const tencKeyId = tenc.subarray(8, 24);\n if (!tencKeyId.some(b => b !== 0)) {\n logger.log(`[eme] Patching keyId in 'enc${isAudio ? 'a' : 'v'}>sinf>>tenc' box: ${arrayToHex(tencKeyId)} -> ${arrayToHex(keyId)}`);\n tenc.set(keyId, 8);\n }\n });\n }\n}\nfunction parseKeyIdsFromTenc(initSegment) {\n const keyIds = [];\n applyToTencBoxes(initSegment, tenc => keyIds.push(tenc.subarray(8, 24)));\n return keyIds;\n}\nfunction applyToTencBoxes(initSegment, predicate) {\n const traks = findBox(initSegment, ['moov', 'trak']);\n traks.forEach(trak => {\n const stsd = findBox(trak, ['mdia', 'minf', 'stbl', 'stsd'])[0];\n if (!stsd) return;\n const sampleEntries = stsd.subarray(8);\n let encBoxes = findBox(sampleEntries, ['enca']);\n const isAudio = encBoxes.length > 0;\n if (!isAudio) {\n encBoxes = findBox(sampleEntries, ['encv']);\n }\n encBoxes.forEach(enc => {\n const encBoxChildren = isAudio ? enc.subarray(28) : enc.subarray(78);\n const sinfBoxes = findBox(encBoxChildren, ['sinf']);\n sinfBoxes.forEach(sinf => {\n const tenc = parseSinf(sinf);\n if (tenc) {\n predicate(tenc, isAudio);\n }\n });\n });\n });\n}\nfunction parseSinf(sinf) {\n const schm = findBox(sinf, ['schm'])[0];\n if (schm) {\n const scheme = bin2str(schm.subarray(4, 8));\n if (scheme === 'cbcs' || scheme === 'cenc') {\n const tenc = findBox(sinf, ['schi', 'tenc'])[0];\n if (tenc) {\n return tenc;\n }\n }\n }\n}\n\n/*\n For Reference:\n aligned(8) class TrackFragmentHeaderBox\n extends FullBox(‘tfhd’, 0, tf_flags){\n unsigned int(32) track_ID;\n // all the following are optional fields\n unsigned int(64) base_data_offset;\n unsigned int(32) sample_description_index;\n unsigned int(32) default_sample_duration;\n unsigned int(32) default_sample_size;\n unsigned int(32) default_sample_flags\n }\n */\n\nfunction getSampleData(data, initData, logger) {\n const tracks = {};\n const trafs = findBox(data, ['moof', 'traf']);\n for (let i = 0; i < trafs.length; i++) {\n const traf = trafs[i];\n // There is only one tfhd & trun per traf\n // This is true for CMAF style content, and we should perhaps check the ftyp\n // and only look for a single trun then, but for ISOBMFF we should check\n // for multiple track runs.\n const tfhd = findBox(traf, ['tfhd'])[0];\n // get the track id from the tfhd\n const id = readUint32(tfhd, 4);\n const track = initData[id];\n if (!track) {\n continue;\n }\n tracks[id] || (tracks[id] = {\n start: NaN,\n duration: 0,\n sampleCount: 0,\n timescale: track.timescale,\n type: track.type\n });\n const trackTimes = tracks[id];\n // get start DTS\n const tfdt = findBox(traf, ['tfdt'])[0];\n if (tfdt) {\n const version = tfdt[0];\n let baseTime = readUint32(tfdt, 4);\n if (version === 1) {\n // If value is too large, assume signed 64-bit. Negative track fragment decode times are invalid, but they exist in the wild.\n // This prevents large values from being used for initPTS, which can cause playlist sync issues.\n // https://github.com/video-dev/hls.js/issues/5303\n if (baseTime === UINT32_MAX$1) {\n logger.warn(`[mp4-demuxer]: Ignoring assumed invalid signed 64-bit track fragment decode time`);\n } else {\n baseTime *= UINT32_MAX$1 + 1;\n baseTime += readUint32(tfdt, 8);\n }\n }\n if (isFiniteNumber(baseTime) && (!isFiniteNumber(trackTimes.start) || baseTime < trackTimes.start)) {\n trackTimes.start = baseTime;\n }\n }\n const trackDefault = track.default;\n const tfhdFlags = readUint32(tfhd, 0) | (trackDefault == null ? void 0 : trackDefault.flags);\n let defaultSampleDuration = (trackDefault == null ? void 0 : trackDefault.duration) || 0;\n if (tfhdFlags & 0x000008) {\n // 0x000008 indicates the presence of the default_sample_duration field\n if (tfhdFlags & 0x000002) {\n // 0x000002 indicates the presence of the sample_description_index field, which precedes default_sample_duration\n // If present, the default_sample_duration exists at byte offset 12\n defaultSampleDuration = readUint32(tfhd, 12);\n } else {\n // Otherwise, the duration is at byte offset 8\n defaultSampleDuration = readUint32(tfhd, 8);\n }\n }\n const truns = findBox(traf, ['trun']);\n let sampleDTS = trackTimes.start || 0;\n let rawDuration = 0;\n let sampleDuration = defaultSampleDuration;\n for (let j = 0; j < truns.length; j++) {\n const trun = truns[j];\n const sampleCount = readUint32(trun, 4);\n const sampleIndex = trackTimes.sampleCount;\n trackTimes.sampleCount += sampleCount;\n // Get duration from samples\n const dataOffsetPresent = trun[3] & 0x01;\n const firstSampleFlagsPresent = trun[3] & 0x04;\n const sampleDurationPresent = trun[2] & 0x01;\n const sampleSizePresent = trun[2] & 0x02;\n const sampleFlagsPresent = trun[2] & 0x04;\n const sampleCompositionTimeOffsetPresent = trun[2] & 0x08;\n let offset = 8;\n let remaining = sampleCount;\n if (dataOffsetPresent) {\n offset += 4;\n }\n if (firstSampleFlagsPresent && sampleCount) {\n const isNonSyncSample = trun[offset + 1] & 0x01;\n if (!isNonSyncSample && trackTimes.keyFrameIndex === undefined) {\n trackTimes.keyFrameIndex = sampleIndex;\n }\n offset += 4;\n if (sampleDurationPresent) {\n sampleDuration = readUint32(trun, offset);\n offset += 4;\n } else {\n sampleDuration = defaultSampleDuration;\n }\n if (sampleSizePresent) {\n offset += 4;\n }\n if (sampleCompositionTimeOffsetPresent) {\n offset += 4;\n }\n sampleDTS += sampleDuration;\n rawDuration += sampleDuration;\n remaining--;\n }\n while (remaining--) {\n if (sampleDurationPresent) {\n sampleDuration = readUint32(trun, offset);\n offset += 4;\n } else {\n sampleDuration = defaultSampleDuration;\n }\n if (sampleSizePresent) {\n offset += 4;\n }\n if (sampleFlagsPresent) {\n const isNonSyncSample = trun[offset + 1] & 0x01;\n if (!isNonSyncSample) {\n if (trackTimes.keyFrameIndex === undefined) {\n trackTimes.keyFrameIndex = trackTimes.sampleCount - (remaining + 1);\n trackTimes.keyFrameStart = sampleDTS;\n }\n }\n offset += 4;\n }\n if (sampleCompositionTimeOffsetPresent) {\n offset += 4;\n }\n sampleDTS += sampleDuration;\n rawDuration += sampleDuration;\n }\n if (!rawDuration && defaultSampleDuration) {\n rawDuration += defaultSampleDuration * sampleCount;\n }\n }\n trackTimes.duration += rawDuration;\n }\n if (!Object.keys(tracks).some(trackId => tracks[trackId].duration)) {\n // If duration samples are not available in the traf use sidx subsegment_duration\n let sidxMinStart = Infinity;\n let sidxMaxEnd = 0;\n const sidxs = findBox(data, ['sidx']);\n for (let i = 0; i < sidxs.length; i++) {\n const sidx = parseSegmentIndex(sidxs[i]);\n if (sidx != null && sidx.references) {\n sidxMinStart = Math.min(sidxMinStart, sidx.earliestPresentationTime / sidx.timescale);\n const subSegmentDuration = sidx.references.reduce((dur, ref) => dur + ref.info.duration || 0, 0);\n sidxMaxEnd = Math.max(sidxMaxEnd, subSegmentDuration + sidx.earliestPresentationTime / sidx.timescale);\n }\n }\n if (sidxMaxEnd && isFiniteNumber(sidxMaxEnd)) {\n Object.keys(tracks).forEach(trackId => {\n if (!tracks[trackId].duration) {\n tracks[trackId].duration = sidxMaxEnd * tracks[trackId].timescale - tracks[trackId].start;\n }\n });\n }\n }\n return tracks;\n}\n\n// TODO: Check if the last moof+mdat pair is part of the valid range\nfunction segmentValidRange(data) {\n const segmentedRange = {\n valid: null,\n remainder: null\n };\n const moofs = findBox(data, ['moof']);\n if (moofs.length < 2) {\n segmentedRange.remainder = data;\n return segmentedRange;\n }\n const last = moofs[moofs.length - 1];\n // Offset by 8 bytes; findBox offsets the start by as much\n segmentedRange.valid = data.slice(0, last.byteOffset - 8);\n segmentedRange.remainder = data.slice(last.byteOffset - 8);\n return segmentedRange;\n}\nfunction appendUint8Array(data1, data2) {\n const temp = new Uint8Array(data1.length + data2.length);\n temp.set(data1);\n temp.set(data2, data1.length);\n return temp;\n}\nfunction parseSamples(timeOffset, track) {\n const seiSamples = [];\n const videoData = track.samples;\n const timescale = track.timescale;\n const trackId = track.id;\n let isHEVCFlavor = false;\n const moofs = findBox(videoData, ['moof']);\n moofs.map(moof => {\n const moofOffset = moof.byteOffset - 8;\n const trafs = findBox(moof, ['traf']);\n trafs.map(traf => {\n // get the base media decode time from the tfdt\n const baseTime = findBox(traf, ['tfdt']).map(tfdt => {\n const version = tfdt[0];\n let result = readUint32(tfdt, 4);\n if (version === 1) {\n result *= Math.pow(2, 32);\n result += readUint32(tfdt, 8);\n }\n return result / timescale;\n })[0];\n if (baseTime !== undefined) {\n timeOffset = baseTime;\n }\n return findBox(traf, ['tfhd']).map(tfhd => {\n const id = readUint32(tfhd, 4);\n const tfhdFlags = readUint32(tfhd, 0) & 0xffffff;\n const baseDataOffsetPresent = (tfhdFlags & 0x000001) !== 0;\n const sampleDescriptionIndexPresent = (tfhdFlags & 0x000002) !== 0;\n const defaultSampleDurationPresent = (tfhdFlags & 0x000008) !== 0;\n let defaultSampleDuration = 0;\n const defaultSampleSizePresent = (tfhdFlags & 0x000010) !== 0;\n let defaultSampleSize = 0;\n const defaultSampleFlagsPresent = (tfhdFlags & 0x000020) !== 0;\n let tfhdOffset = 8;\n if (id === trackId) {\n if (baseDataOffsetPresent) {\n tfhdOffset += 8;\n }\n if (sampleDescriptionIndexPresent) {\n tfhdOffset += 4;\n }\n if (defaultSampleDurationPresent) {\n defaultSampleDuration = readUint32(tfhd, tfhdOffset);\n tfhdOffset += 4;\n }\n if (defaultSampleSizePresent) {\n defaultSampleSize = readUint32(tfhd, tfhdOffset);\n tfhdOffset += 4;\n }\n if (defaultSampleFlagsPresent) {\n tfhdOffset += 4;\n }\n if (track.type === 'video') {\n isHEVCFlavor = isHEVC(track.codec);\n }\n findBox(traf, ['trun']).map(trun => {\n const version = trun[0];\n const flags = readUint32(trun, 0) & 0xffffff;\n const dataOffsetPresent = (flags & 0x000001) !== 0;\n let dataOffset = 0;\n const firstSampleFlagsPresent = (flags & 0x000004) !== 0;\n const sampleDurationPresent = (flags & 0x000100) !== 0;\n let sampleDuration = 0;\n const sampleSizePresent = (flags & 0x000200) !== 0;\n let sampleSize = 0;\n const sampleFlagsPresent = (flags & 0x000400) !== 0;\n const sampleCompositionOffsetsPresent = (flags & 0x000800) !== 0;\n let compositionOffset = 0;\n const sampleCount = readUint32(trun, 4);\n let trunOffset = 8; // past version, flags, and sample count\n\n if (dataOffsetPresent) {\n dataOffset = readUint32(trun, trunOffset);\n trunOffset += 4;\n }\n if (firstSampleFlagsPresent) {\n trunOffset += 4;\n }\n let sampleOffset = dataOffset + moofOffset;\n for (let ix = 0; ix < sampleCount; ix++) {\n if (sampleDurationPresent) {\n sampleDuration = readUint32(trun, trunOffset);\n trunOffset += 4;\n } else {\n sampleDuration = defaultSampleDuration;\n }\n if (sampleSizePresent) {\n sampleSize = readUint32(trun, trunOffset);\n trunOffset += 4;\n } else {\n sampleSize = defaultSampleSize;\n }\n if (sampleFlagsPresent) {\n trunOffset += 4;\n }\n if (sampleCompositionOffsetsPresent) {\n if (version === 0) {\n compositionOffset = readUint32(trun, trunOffset);\n } else {\n compositionOffset = readSint32(trun, trunOffset);\n }\n trunOffset += 4;\n }\n if (track.type === ElementaryStreamTypes.VIDEO) {\n let naluTotalSize = 0;\n while (naluTotalSize < sampleSize) {\n const naluSize = readUint32(videoData, sampleOffset);\n sampleOffset += 4;\n if (isSEIMessage(isHEVCFlavor, videoData[sampleOffset])) {\n const data = videoData.subarray(sampleOffset, sampleOffset + naluSize);\n parseSEIMessageFromNALu(data, isHEVCFlavor ? 2 : 1, timeOffset + compositionOffset / timescale, seiSamples);\n }\n sampleOffset += naluSize;\n naluTotalSize += naluSize + 4;\n }\n }\n timeOffset += sampleDuration / timescale;\n }\n });\n }\n });\n });\n });\n return seiSamples;\n}\nfunction isHEVC(codec) {\n if (!codec) {\n return false;\n }\n const baseCodec = codec.substring(0, 4);\n return baseCodec === 'hvc1' || baseCodec === 'hev1' ||\n // Dolby Vision\n baseCodec === 'dvh1' || baseCodec === 'dvhe';\n}\nfunction isSEIMessage(isHEVCFlavor, naluHeader) {\n if (isHEVCFlavor) {\n const naluType = naluHeader >> 1 & 0x3f;\n return naluType === 39 || naluType === 40;\n } else {\n const naluType = naluHeader & 0x1f;\n return naluType === 6;\n }\n}\nfunction parseSEIMessageFromNALu(unescapedData, headerSize, pts, samples) {\n const data = discardEPB(unescapedData);\n let seiPtr = 0;\n // skip nal header\n seiPtr += headerSize;\n let payloadType = 0;\n let payloadSize = 0;\n let b = 0;\n while (seiPtr < data.length) {\n payloadType = 0;\n do {\n if (seiPtr >= data.length) {\n break;\n }\n b = data[seiPtr++];\n payloadType += b;\n } while (b === 0xff);\n\n // Parse payload size.\n payloadSize = 0;\n do {\n if (seiPtr >= data.length) {\n break;\n }\n b = data[seiPtr++];\n payloadSize += b;\n } while (b === 0xff);\n const leftOver = data.length - seiPtr;\n // Create a variable to process the payload\n let payPtr = seiPtr;\n\n // Increment the seiPtr to the end of the payload\n if (payloadSize < leftOver) {\n seiPtr += payloadSize;\n } else if (payloadSize > leftOver) {\n // Some type of corruption has happened?\n logger.error(`Malformed SEI payload. ${payloadSize} is too small, only ${leftOver} bytes left to parse.`);\n // We might be able to parse some data, but let's be safe and ignore it.\n break;\n }\n if (payloadType === 4) {\n const countryCode = data[payPtr++];\n if (countryCode === 181) {\n const providerCode = readUint16(data, payPtr);\n payPtr += 2;\n if (providerCode === 49) {\n const userStructure = readUint32(data, payPtr);\n payPtr += 4;\n if (userStructure === 0x47413934) {\n const userDataType = data[payPtr++];\n\n // Raw CEA-608 bytes wrapped in CEA-708 packet\n if (userDataType === 3) {\n const firstByte = data[payPtr++];\n const totalCCs = 0x1f & firstByte;\n const enabled = 0x40 & firstByte;\n const totalBytes = enabled ? 2 + totalCCs * 3 : 0;\n const byteArray = new Uint8Array(totalBytes);\n if (enabled) {\n byteArray[0] = firstByte;\n for (let i = 1; i < totalBytes; i++) {\n byteArray[i] = data[payPtr++];\n }\n }\n samples.push({\n type: userDataType,\n payloadType,\n pts,\n bytes: byteArray\n });\n }\n }\n }\n }\n } else if (payloadType === 5) {\n if (payloadSize > 16) {\n const uuidStrArray = [];\n for (let i = 0; i < 16; i++) {\n const _b = data[payPtr++].toString(16);\n uuidStrArray.push(_b.length == 1 ? '0' + _b : _b);\n if (i === 3 || i === 5 || i === 7 || i === 9) {\n uuidStrArray.push('-');\n }\n }\n const length = payloadSize - 16;\n const userDataBytes = new Uint8Array(length);\n for (let i = 0; i < length; i++) {\n userDataBytes[i] = data[payPtr++];\n }\n samples.push({\n payloadType,\n pts,\n uuid: uuidStrArray.join(''),\n userData: utf8ArrayToStr(userDataBytes),\n userDataBytes\n });\n }\n }\n }\n}\n\n/**\n * remove Emulation Prevention bytes from a RBSP\n */\nfunction discardEPB(data) {\n const length = data.byteLength;\n const EPBPositions = [];\n let i = 1;\n\n // Find all `Emulation Prevention Bytes`\n while (i < length - 2) {\n if (data[i] === 0 && data[i + 1] === 0 && data[i + 2] === 0x03) {\n EPBPositions.push(i + 2);\n i += 2;\n } else {\n i++;\n }\n }\n\n // If no Emulation Prevention Bytes were found just return the original\n // array\n if (EPBPositions.length === 0) {\n return data;\n }\n\n // Create a new array to hold the NAL unit data\n const newLength = length - EPBPositions.length;\n const newData = new Uint8Array(newLength);\n let sourceIndex = 0;\n for (i = 0; i < newLength; sourceIndex++, i++) {\n if (sourceIndex === EPBPositions[0]) {\n // Skip this byte\n sourceIndex++;\n // Remove this position index\n EPBPositions.shift();\n }\n newData[i] = data[sourceIndex];\n }\n return newData;\n}\nfunction parseEmsg(data) {\n const version = data[0];\n let schemeIdUri = '';\n let value = '';\n let timeScale = 0;\n let presentationTimeDelta = 0;\n let presentationTime = 0;\n let eventDuration = 0;\n let id = 0;\n let offset = 0;\n if (version === 0) {\n while (bin2str(data.subarray(offset, offset + 1)) !== '\\0') {\n schemeIdUri += bin2str(data.subarray(offset, offset + 1));\n offset += 1;\n }\n schemeIdUri += bin2str(data.subarray(offset, offset + 1));\n offset += 1;\n while (bin2str(data.subarray(offset, offset + 1)) !== '\\0') {\n value += bin2str(data.subarray(offset, offset + 1));\n offset += 1;\n }\n value += bin2str(data.subarray(offset, offset + 1));\n offset += 1;\n timeScale = readUint32(data, 12);\n presentationTimeDelta = readUint32(data, 16);\n eventDuration = readUint32(data, 20);\n id = readUint32(data, 24);\n offset = 28;\n } else if (version === 1) {\n offset += 4;\n timeScale = readUint32(data, offset);\n offset += 4;\n const leftPresentationTime = readUint32(data, offset);\n offset += 4;\n const rightPresentationTime = readUint32(data, offset);\n offset += 4;\n presentationTime = 2 ** 32 * leftPresentationTime + rightPresentationTime;\n if (!isSafeInteger(presentationTime)) {\n presentationTime = Number.MAX_SAFE_INTEGER;\n logger.warn('Presentation time exceeds safe integer limit and wrapped to max safe integer in parsing emsg box');\n }\n eventDuration = readUint32(data, offset);\n offset += 4;\n id = readUint32(data, offset);\n offset += 4;\n while (bin2str(data.subarray(offset, offset + 1)) !== '\\0') {\n schemeIdUri += bin2str(data.subarray(offset, offset + 1));\n offset += 1;\n }\n schemeIdUri += bin2str(data.subarray(offset, offset + 1));\n offset += 1;\n while (bin2str(data.subarray(offset, offset + 1)) !== '\\0') {\n value += bin2str(data.subarray(offset, offset + 1));\n offset += 1;\n }\n value += bin2str(data.subarray(offset, offset + 1));\n offset += 1;\n }\n const payload = data.subarray(offset, data.byteLength);\n return {\n schemeIdUri,\n value,\n timeScale,\n presentationTime,\n presentationTimeDelta,\n eventDuration,\n id,\n payload\n };\n}\nfunction mp4Box(type, ...payload) {\n const len = payload.length;\n let size = 8;\n let i = len;\n while (i--) {\n size += payload[i].byteLength;\n }\n const result = new Uint8Array(size);\n result[0] = size >> 24 & 0xff;\n result[1] = size >> 16 & 0xff;\n result[2] = size >> 8 & 0xff;\n result[3] = size & 0xff;\n result.set(type, 4);\n for (i = 0, size = 8; i < len; i++) {\n result.set(payload[i], size);\n size += payload[i].byteLength;\n }\n return result;\n}\nfunction mp4pssh(systemId, keyids, data) {\n if (systemId.byteLength !== 16) {\n throw new RangeError('Invalid system id');\n }\n let version;\n let kids;\n {\n version = 0;\n kids = new Uint8Array();\n }\n let kidCount;\n if (version > 0) {\n kidCount = new Uint8Array(4);\n if (keyids.length > 0) {\n new DataView(kidCount.buffer).setUint32(0, keyids.length, false);\n }\n } else {\n kidCount = new Uint8Array();\n }\n const dataSize = new Uint8Array(4);\n if (data.byteLength > 0) {\n new DataView(dataSize.buffer).setUint32(0, data.byteLength, false);\n }\n return mp4Box([112, 115, 115, 104], new Uint8Array([version, 0x00, 0x00, 0x00 // Flags\n ]), systemId,\n // 16 bytes\n kidCount, kids, dataSize, data);\n}\nfunction parseMultiPssh(initData) {\n const results = [];\n if (initData instanceof ArrayBuffer) {\n const length = initData.byteLength;\n let offset = 0;\n while (offset + 32 < length) {\n const view = new DataView(initData, offset);\n const pssh = parsePssh(view);\n results.push(pssh);\n offset += pssh.size;\n }\n }\n return results;\n}\nfunction parsePssh(view) {\n const size = view.getUint32(0);\n const offset = view.byteOffset;\n const length = view.byteLength;\n if (length < size) {\n return {\n offset,\n size: length\n };\n }\n const type = view.getUint32(4);\n if (type !== 0x70737368) {\n return {\n offset,\n size\n };\n }\n const version = view.getUint32(8) >>> 24;\n if (version !== 0 && version !== 1) {\n return {\n offset,\n size\n };\n }\n const buffer = view.buffer;\n const systemId = arrayToHex(new Uint8Array(buffer, offset + 12, 16));\n let kids = null;\n let data = null;\n let dataSizeOffset = 0;\n if (version === 0) {\n dataSizeOffset = 28;\n } else {\n const kidCounts = view.getUint32(28);\n if (!kidCounts || length < 32 + kidCounts * 16) {\n return {\n offset,\n size\n };\n }\n kids = [];\n for (let i = 0; i < kidCounts; i++) {\n kids.push(new Uint8Array(buffer, offset + 32 + i * 16, 16));\n }\n dataSizeOffset = 32 + kidCounts * 16;\n }\n if (!dataSizeOffset) {\n return {\n offset,\n size\n };\n }\n const dataSizeOrKidCount = view.getUint32(dataSizeOffset);\n if (size - 32 < dataSizeOrKidCount) {\n return {\n offset,\n size\n };\n }\n data = new Uint8Array(buffer, offset + dataSizeOffset + 4, dataSizeOrKidCount);\n return {\n version,\n systemId,\n kids,\n data,\n offset,\n size\n };\n}\n\nconst userAgentHevcSupportIsInaccurate = () => {\n return /\\(Windows.+Firefox\\//i.test(navigator.userAgent);\n};\n\n// from http://mp4ra.org/codecs.html\n// values indicate codec selection preference (lower is higher priority)\nconst sampleEntryCodesISO = {\n audio: {\n a3ds: 1,\n 'ac-3': 0.95,\n 'ac-4': 1,\n alac: 0.9,\n alaw: 1,\n dra1: 1,\n 'dts+': 1,\n 'dts-': 1,\n dtsc: 1,\n dtse: 1,\n dtsh: 1,\n 'ec-3': 0.9,\n enca: 1,\n fLaC: 0.9,\n // MP4-RA listed codec entry for FLAC\n flac: 0.9,\n // legacy browser codec name for FLAC\n FLAC: 0.9,\n // some manifests may list \"FLAC\" with Apple's tools\n g719: 1,\n g726: 1,\n m4ae: 1,\n mha1: 1,\n mha2: 1,\n mhm1: 1,\n mhm2: 1,\n mlpa: 1,\n mp4a: 1,\n 'raw ': 1,\n Opus: 1,\n opus: 1,\n // browsers expect this to be lowercase despite MP4RA says 'Opus'\n samr: 1,\n sawb: 1,\n sawp: 1,\n sevc: 1,\n sqcp: 1,\n ssmv: 1,\n twos: 1,\n ulaw: 1\n },\n video: {\n avc1: 1,\n avc2: 1,\n avc3: 1,\n avc4: 1,\n avcp: 1,\n av01: 0.8,\n dav1: 0.8,\n drac: 1,\n dva1: 1,\n dvav: 1,\n dvh1: 0.7,\n dvhe: 0.7,\n encv: 1,\n hev1: 0.75,\n hvc1: 0.75,\n mjp2: 1,\n mp4v: 1,\n mvc1: 1,\n mvc2: 1,\n mvc3: 1,\n mvc4: 1,\n resv: 1,\n rv60: 1,\n s263: 1,\n svc1: 1,\n svc2: 1,\n 'vc-1': 1,\n vp08: 1,\n vp09: 0.9\n },\n text: {\n stpp: 1,\n wvtt: 1\n }\n};\nfunction isCodecType(codec, type) {\n const typeCodes = sampleEntryCodesISO[type];\n return !!typeCodes && !!typeCodes[codec.slice(0, 4)];\n}\nfunction areCodecsMediaSourceSupported(codecs, type, preferManagedMediaSource = true) {\n return !codecs.split(',').some(codec => !isCodecMediaSourceSupported(codec, type, preferManagedMediaSource));\n}\nfunction isCodecMediaSourceSupported(codec, type, preferManagedMediaSource = true) {\n var _MediaSource$isTypeSu;\n const MediaSource = getMediaSource(preferManagedMediaSource);\n return (_MediaSource$isTypeSu = MediaSource == null ? void 0 : MediaSource.isTypeSupported(mimeTypeForCodec(codec, type))) != null ? _MediaSource$isTypeSu : false;\n}\nfunction mimeTypeForCodec(codec, type) {\n return `${type}/mp4;codecs=${codec}`;\n}\nfunction videoCodecPreferenceValue(videoCodec) {\n if (videoCodec) {\n const fourCC = videoCodec.substring(0, 4);\n return sampleEntryCodesISO.video[fourCC];\n }\n return 2;\n}\nfunction codecsSetSelectionPreferenceValue(codecSet) {\n const limitedHevcSupport = userAgentHevcSupportIsInaccurate();\n return codecSet.split(',').reduce((num, fourCC) => {\n const lowerPriority = limitedHevcSupport && isHEVC(fourCC);\n const preferenceValue = lowerPriority ? 9 : sampleEntryCodesISO.video[fourCC];\n if (preferenceValue) {\n return (preferenceValue * 2 + num) / (num ? 3 : 2);\n }\n return (sampleEntryCodesISO.audio[fourCC] + num) / (num ? 2 : 1);\n }, 0);\n}\nconst CODEC_COMPATIBLE_NAMES = {};\nfunction getCodecCompatibleNameLower(lowerCaseCodec, preferManagedMediaSource = true) {\n if (CODEC_COMPATIBLE_NAMES[lowerCaseCodec]) {\n return CODEC_COMPATIBLE_NAMES[lowerCaseCodec];\n }\n const codecsToCheck = {\n // Idealy fLaC and Opus would be first (spec-compliant) but\n // some browsers will report that fLaC is supported then fail.\n // see: https://bugs.chromium.org/p/chromium/issues/detail?id=1422728\n flac: ['flac', 'fLaC', 'FLAC'],\n opus: ['opus', 'Opus'],\n // Replace audio codec info if browser does not support mp4a.40.34,\n // and demuxer can fallback to 'audio/mpeg' or 'audio/mp4;codecs=\"mp3\"'\n 'mp4a.40.34': ['mp3']\n }[lowerCaseCodec];\n for (let i = 0; i < codecsToCheck.length; i++) {\n var _getMediaSource;\n if (isCodecMediaSourceSupported(codecsToCheck[i], 'audio', preferManagedMediaSource)) {\n CODEC_COMPATIBLE_NAMES[lowerCaseCodec] = codecsToCheck[i];\n return codecsToCheck[i];\n } else if (codecsToCheck[i] === 'mp3' && (_getMediaSource = getMediaSource(preferManagedMediaSource)) != null && _getMediaSource.isTypeSupported('audio/mpeg')) {\n return '';\n }\n }\n return lowerCaseCodec;\n}\nconst AUDIO_CODEC_REGEXP = /flac|opus|mp4a\\.40\\.34/i;\nfunction getCodecCompatibleName(codec, preferManagedMediaSource = true) {\n return codec.replace(AUDIO_CODEC_REGEXP, m => getCodecCompatibleNameLower(m.toLowerCase(), preferManagedMediaSource));\n}\nfunction replaceVideoCodec(originalCodecs, newVideoCodec) {\n const codecs = [];\n if (originalCodecs) {\n const allCodecs = originalCodecs.split(',');\n for (let i = 0; i < allCodecs.length; i++) {\n if (!isCodecType(allCodecs[i], 'video')) {\n codecs.push(allCodecs[i]);\n }\n }\n }\n if (newVideoCodec) {\n codecs.push(newVideoCodec);\n }\n return codecs.join(',');\n}\nfunction pickMostCompleteCodecName(parsedCodec, levelCodec) {\n // Parsing of mp4a codecs strings in mp4-tools from media is incomplete as of d8c6c7a\n // so use level codec is parsed codec is unavailable or incomplete\n if (parsedCodec && (parsedCodec.length > 4 || ['ac-3', 'ec-3', 'alac', 'fLaC', 'Opus'].indexOf(parsedCodec) !== -1)) {\n if (isCodecSupportedAsType(parsedCodec, 'audio') || isCodecSupportedAsType(parsedCodec, 'video')) {\n return parsedCodec;\n }\n }\n if (levelCodec) {\n const levelCodecs = levelCodec.split(',');\n if (levelCodecs.length > 1) {\n if (parsedCodec) {\n for (let i = levelCodecs.length; i--;) {\n if (levelCodecs[i].substring(0, 4) === parsedCodec.substring(0, 4)) {\n return levelCodecs[i];\n }\n }\n }\n return levelCodecs[0];\n }\n }\n return levelCodec || parsedCodec;\n}\nfunction isCodecSupportedAsType(codec, type) {\n return isCodecType(codec, type) && isCodecMediaSourceSupported(codec, type);\n}\nfunction convertAVC1ToAVCOTI(videoCodecs) {\n // Convert avc1 codec string from RFC-4281 to RFC-6381 for MediaSource.isTypeSupported\n // Examples: avc1.66.30 to avc1.42001e and avc1.77.30,avc1.66.30 to avc1.4d001e,avc1.42001e.\n const codecs = videoCodecs.split(',');\n for (let i = 0; i < codecs.length; i++) {\n const avcdata = codecs[i].split('.');\n // only convert codec strings starting with avc1 (Examples: avc1.64001f,dvh1.05.07)\n if (avcdata.length > 2 && avcdata[0] === 'avc1') {\n codecs[i] = `avc1.${parseInt(avcdata[1]).toString(16)}${('000' + parseInt(avcdata[2]).toString(16)).slice(-4)}`;\n }\n }\n return codecs.join(',');\n}\nfunction fillInMissingAV01Params(videoCodec) {\n // Used to fill in incomplete AV1 playlist CODECS strings for mediaCapabilities.decodingInfo queries\n if (videoCodec.startsWith('av01.')) {\n const av1params = videoCodec.split('.');\n const placeholders = ['0', '111', '01', '01', '01', '0'];\n for (let i = av1params.length; i > 4 && i < 10; i++) {\n av1params[i] = placeholders[i - 4];\n }\n return av1params.join('.');\n }\n return videoCodec;\n}\nfunction getM2TSSupportedAudioTypes(preferManagedMediaSource) {\n const MediaSource = getMediaSource(preferManagedMediaSource) || {\n isTypeSupported: () => false\n };\n return {\n mpeg: MediaSource.isTypeSupported('audio/mpeg'),\n mp3: MediaSource.isTypeSupported('audio/mp4; codecs=\"mp3\"'),\n ac3: MediaSource.isTypeSupported('audio/mp4; codecs=\"ac-3\"') \n };\n}\nfunction getCodecsForMimeType(mimeType) {\n return mimeType.replace(/^.+codecs=[\"']?([^\"']+).*$/, '$1');\n}\n\n// @ts-ignore\nconst supportedResult = {\n supported: true,\n powerEfficient: true,\n smooth: true\n // keySystemAccess: null,\n};\n\n// @ts-ignore\nconst unsupportedResult = {\n supported: false,\n smooth: false,\n powerEfficient: false\n // keySystemAccess: null,\n};\nconst SUPPORTED_INFO_DEFAULT = {\n supported: true,\n configurations: [],\n decodingInfoResults: [supportedResult]\n};\nfunction getUnsupportedResult(error, configurations) {\n return {\n supported: false,\n configurations,\n decodingInfoResults: [unsupportedResult],\n error\n };\n}\nfunction requiresMediaCapabilitiesDecodingInfo(level, audioTracksByGroup, currentVideoRange, currentFrameRate, currentBw, audioPreference) {\n // Only test support when configuration is exceeds minimum options\n const videoCodecs = level.videoCodec;\n const audioGroups = level.audioCodec ? level.audioGroups : null;\n const audioCodecPreference = audioPreference == null ? void 0 : audioPreference.audioCodec;\n const channelsPreference = audioPreference == null ? void 0 : audioPreference.channels;\n const maxChannels = channelsPreference ? parseInt(channelsPreference) : audioCodecPreference ? Infinity : 2;\n let audioChannels = null;\n if (audioGroups != null && audioGroups.length) {\n try {\n if (audioGroups.length === 1 && audioGroups[0]) {\n audioChannels = audioTracksByGroup.groups[audioGroups[0]].channels;\n } else {\n audioChannels = audioGroups.reduce((acc, groupId) => {\n if (groupId) {\n const audioTrackGroup = audioTracksByGroup.groups[groupId];\n if (!audioTrackGroup) {\n throw new Error(`Audio track group ${groupId} not found`);\n }\n // Sum all channel key values\n Object.keys(audioTrackGroup.channels).forEach(key => {\n acc[key] = (acc[key] || 0) + audioTrackGroup.channels[key];\n });\n }\n return acc;\n }, {\n 2: 0\n });\n }\n } catch (error) {\n return true;\n }\n }\n return videoCodecs !== undefined && (\n // Force media capabilities check for HEVC to avoid failure on Windows\n videoCodecs.split(',').some(videoCodec => isHEVC(videoCodec)) || level.width > 1920 && level.height > 1088 || level.height > 1920 && level.width > 1088 || level.frameRate > Math.max(currentFrameRate, 30) || level.videoRange !== 'SDR' && level.videoRange !== currentVideoRange || level.bitrate > Math.max(currentBw, 8e6)) || !!audioChannels && isFiniteNumber(maxChannels) && Object.keys(audioChannels).some(channels => parseInt(channels) > maxChannels);\n}\nfunction getMediaDecodingInfoPromise(level, audioTracksByGroup, mediaCapabilities, cache = {}) {\n const videoCodecs = level.videoCodec;\n if (!videoCodecs && !level.audioCodec || !mediaCapabilities) {\n return Promise.resolve(SUPPORTED_INFO_DEFAULT);\n }\n const configurations = [];\n const videoDecodeList = makeVideoConfigurations(level);\n const videoCount = videoDecodeList.length;\n const audioDecodeList = makeAudioConfigurations(level, audioTracksByGroup, videoCount > 0);\n const audioCount = audioDecodeList.length;\n for (let i = videoCount || 1 * audioCount || 1; i--;) {\n const configuration = {\n type: 'media-source'\n };\n if (videoCount) {\n configuration.video = videoDecodeList[i % videoCount];\n }\n if (audioCount) {\n configuration.audio = audioDecodeList[i % audioCount];\n const audioBitrate = configuration.audio.bitrate;\n if (configuration.video && audioBitrate) {\n configuration.video.bitrate -= audioBitrate;\n }\n }\n configurations.push(configuration);\n }\n if (videoCodecs) {\n // Override Windows Firefox HEVC MediaCapabilities result (https://github.com/video-dev/hls.js/issues/7046)\n const ua = navigator.userAgent;\n if (videoCodecs.split(',').some(videoCodec => isHEVC(videoCodec)) && userAgentHevcSupportIsInaccurate()) {\n return Promise.resolve(getUnsupportedResult(new Error(`Overriding Windows Firefox HEVC MediaCapabilities result based on user-agent string: (${ua})`), configurations));\n }\n }\n return Promise.all(configurations.map(configuration => {\n // Cache MediaCapabilities promises\n const decodingInfoKey = getMediaDecodingInfoKey(configuration);\n return cache[decodingInfoKey] || (cache[decodingInfoKey] = mediaCapabilities.decodingInfo(configuration));\n })).then(decodingInfoResults => ({\n supported: !decodingInfoResults.some(info => !info.supported),\n configurations,\n decodingInfoResults\n })).catch(error => ({\n supported: false,\n configurations,\n decodingInfoResults: [],\n error\n }));\n}\nfunction makeVideoConfigurations(level) {\n var _level$videoCodec;\n const videoCodecs = (_level$videoCodec = level.videoCodec) == null ? void 0 : _level$videoCodec.split(',');\n const bitrate = getVariantDecodingBitrate(level);\n const width = level.width || 640;\n const height = level.height || 480;\n // Assume a framerate of 30fps since MediaCapabilities will not accept Level default of 0.\n const framerate = level.frameRate || 30;\n const videoRange = level.videoRange.toLowerCase();\n return videoCodecs ? videoCodecs.map(videoCodec => {\n const videoConfiguration = {\n contentType: mimeTypeForCodec(fillInMissingAV01Params(videoCodec), 'video'),\n width,\n height,\n bitrate,\n framerate\n };\n if (videoRange !== 'sdr') {\n videoConfiguration.transferFunction = videoRange;\n }\n return videoConfiguration;\n }) : [];\n}\nfunction makeAudioConfigurations(level, audioTracksByGroup, hasVideo) {\n var _level$audioCodec;\n const audioCodecs = (_level$audioCodec = level.audioCodec) == null ? void 0 : _level$audioCodec.split(',');\n const combinedBitrate = getVariantDecodingBitrate(level);\n if (audioCodecs && level.audioGroups) {\n return level.audioGroups.reduce((configurations, audioGroupId) => {\n var _audioTracksByGroup$g;\n const tracks = audioGroupId ? (_audioTracksByGroup$g = audioTracksByGroup.groups[audioGroupId]) == null ? void 0 : _audioTracksByGroup$g.tracks : null;\n if (tracks) {\n return tracks.reduce((configs, audioTrack) => {\n if (audioTrack.groupId === audioGroupId) {\n const channelsNumber = parseFloat(audioTrack.channels || '');\n audioCodecs.forEach(audioCodec => {\n const audioConfiguration = {\n contentType: mimeTypeForCodec(audioCodec, 'audio'),\n bitrate: hasVideo ? estimatedAudioBitrate(audioCodec, combinedBitrate) : combinedBitrate\n };\n if (channelsNumber) {\n audioConfiguration.channels = '' + channelsNumber;\n }\n configs.push(audioConfiguration);\n });\n }\n return configs;\n }, configurations);\n }\n return configurations;\n }, []);\n }\n return [];\n}\nfunction estimatedAudioBitrate(audioCodec, levelBitrate) {\n if (levelBitrate <= 1) {\n return 1;\n }\n let audioBitrate = 128000;\n if (audioCodec === 'ec-3') {\n audioBitrate = 768000;\n } else if (audioCodec === 'ac-3') {\n audioBitrate = 640000;\n }\n return Math.min(levelBitrate / 2, audioBitrate); // Don't exceed some % of level bitrate\n}\nfunction getVariantDecodingBitrate(level) {\n return Math.ceil(Math.max(level.bitrate * 0.9, level.averageBitrate) / 1000) * 1000 || 1;\n}\nfunction getMediaDecodingInfoKey(config) {\n let key = '';\n const {\n audio,\n video\n } = config;\n if (video) {\n const codec = getCodecsForMimeType(video.contentType);\n key += `${codec}_r${video.height}x${video.width}f${Math.ceil(video.framerate)}${video.transferFunction || 'sd'}_${Math.ceil(video.bitrate / 1e5)}`;\n }\n if (audio) {\n const codec = getCodecsForMimeType(audio.contentType);\n key += `${video ? '_' : ''}${codec}_c${audio.channels}`;\n }\n return key;\n}\n\nconst HdcpLevels = ['NONE', 'TYPE-0', 'TYPE-1', null];\nfunction isHdcpLevel(value) {\n return HdcpLevels.indexOf(value) > -1;\n}\nconst VideoRangeValues = ['SDR', 'PQ', 'HLG'];\nfunction isVideoRange(value) {\n return !!value && VideoRangeValues.indexOf(value) > -1;\n}\nvar HlsSkip = {\n No: \"\",\n Yes: \"YES\",\n v2: \"v2\"\n};\nfunction getSkipValue(details) {\n const {\n canSkipUntil,\n canSkipDateRanges,\n age\n } = details;\n // A Client SHOULD NOT request a Playlist Delta Update unless it already\n // has a version of the Playlist that is no older than one-half of the Skip Boundary.\n // @see: https://datatracker.ietf.org/doc/html/draft-pantos-hls-rfc8216bis#section-6.3.7\n const playlistRecentEnough = age < canSkipUntil / 2;\n if (canSkipUntil && playlistRecentEnough) {\n if (canSkipDateRanges) {\n return HlsSkip.v2;\n }\n return HlsSkip.Yes;\n }\n return HlsSkip.No;\n}\nclass HlsUrlParameters {\n constructor(msn, part, skip) {\n this.msn = void 0;\n this.part = void 0;\n this.skip = void 0;\n this.msn = msn;\n this.part = part;\n this.skip = skip;\n }\n addDirectives(uri) {\n const url = new self.URL(uri);\n if (this.msn !== undefined) {\n url.searchParams.set('_HLS_msn', this.msn.toString());\n }\n if (this.part !== undefined) {\n url.searchParams.set('_HLS_part', this.part.toString());\n }\n if (this.skip) {\n url.searchParams.set('_HLS_skip', this.skip);\n }\n return url.href;\n }\n}\nclass Level {\n constructor(data) {\n this._attrs = void 0;\n this.audioCodec = void 0;\n this.bitrate = void 0;\n this.codecSet = void 0;\n this.url = void 0;\n this.frameRate = void 0;\n this.height = void 0;\n this.id = void 0;\n this.name = void 0;\n this.supplemental = void 0;\n this.videoCodec = void 0;\n this.width = void 0;\n this.details = void 0;\n this.fragmentError = 0;\n this.loadError = 0;\n this.loaded = void 0;\n this.realBitrate = 0;\n this.supportedPromise = void 0;\n this.supportedResult = void 0;\n this._avgBitrate = 0;\n this._audioGroups = void 0;\n this._subtitleGroups = void 0;\n // Deprecated (retained for backwards compatibility)\n this._urlId = 0;\n this.url = [data.url];\n this._attrs = [data.attrs];\n this.bitrate = data.bitrate;\n if (data.details) {\n this.details = data.details;\n }\n this.id = data.id || 0;\n this.name = data.name;\n this.width = data.width || 0;\n this.height = data.height || 0;\n this.frameRate = data.attrs.optionalFloat('FRAME-RATE', 0);\n this._avgBitrate = data.attrs.decimalInteger('AVERAGE-BANDWIDTH');\n this.audioCodec = data.audioCodec;\n this.videoCodec = data.videoCodec;\n this.codecSet = [data.videoCodec, data.audioCodec].filter(c => !!c).map(s => s.substring(0, 4)).join(',');\n if ('supplemental' in data) {\n var _data$supplemental;\n this.supplemental = data.supplemental;\n const supplementalVideo = (_data$supplemental = data.supplemental) == null ? void 0 : _data$supplemental.videoCodec;\n if (supplementalVideo && supplementalVideo !== data.videoCodec) {\n this.codecSet += `,${supplementalVideo.substring(0, 4)}`;\n }\n }\n this.addGroupId('audio', data.attrs.AUDIO);\n this.addGroupId('text', data.attrs.SUBTITLES);\n }\n get maxBitrate() {\n return Math.max(this.realBitrate, this.bitrate);\n }\n get averageBitrate() {\n return this._avgBitrate || this.realBitrate || this.bitrate;\n }\n get attrs() {\n return this._attrs[0];\n }\n get codecs() {\n return this.attrs.CODECS || '';\n }\n get pathwayId() {\n return this.attrs['PATHWAY-ID'] || '.';\n }\n get videoRange() {\n return this.attrs['VIDEO-RANGE'] || 'SDR';\n }\n get score() {\n return this.attrs.optionalFloat('SCORE', 0);\n }\n get uri() {\n return this.url[0] || '';\n }\n hasAudioGroup(groupId) {\n return hasGroup(this._audioGroups, groupId);\n }\n hasSubtitleGroup(groupId) {\n return hasGroup(this._subtitleGroups, groupId);\n }\n get audioGroups() {\n return this._audioGroups;\n }\n get subtitleGroups() {\n return this._subtitleGroups;\n }\n addGroupId(type, groupId) {\n if (!groupId) {\n return;\n }\n if (type === 'audio') {\n let audioGroups = this._audioGroups;\n if (!audioGroups) {\n audioGroups = this._audioGroups = [];\n }\n if (audioGroups.indexOf(groupId) === -1) {\n audioGroups.push(groupId);\n }\n } else if (type === 'text') {\n let subtitleGroups = this._subtitleGroups;\n if (!subtitleGroups) {\n subtitleGroups = this._subtitleGroups = [];\n }\n if (subtitleGroups.indexOf(groupId) === -1) {\n subtitleGroups.push(groupId);\n }\n }\n }\n\n // Deprecated methods (retained for backwards compatibility)\n get urlId() {\n return 0;\n }\n set urlId(value) {}\n get audioGroupIds() {\n return this.audioGroups ? [this.audioGroupId] : undefined;\n }\n get textGroupIds() {\n return this.subtitleGroups ? [this.textGroupId] : undefined;\n }\n get audioGroupId() {\n var _this$audioGroups;\n return (_this$audioGroups = this.audioGroups) == null ? void 0 : _this$audioGroups[0];\n }\n get textGroupId() {\n var _this$subtitleGroups;\n return (_this$subtitleGroups = this.subtitleGroups) == null ? void 0 : _this$subtitleGroups[0];\n }\n addFallback() {}\n}\nfunction hasGroup(groups, groupId) {\n if (!groupId || !groups) {\n return false;\n }\n return groups.indexOf(groupId) !== -1;\n}\n\n/**\n * @returns Whether we can detect and validate HDR capability within the window context\n */\nfunction isHdrSupported() {\n if (typeof matchMedia === 'function') {\n const mediaQueryList = matchMedia('(dynamic-range: high)');\n const badQuery = matchMedia('bad query');\n if (mediaQueryList.media !== badQuery.media) {\n return mediaQueryList.matches === true;\n }\n }\n return false;\n}\n\n/**\n * Sanitizes inputs to return the active video selection options for HDR/SDR.\n * When both inputs are null:\n *\n * `{ preferHDR: false, allowedVideoRanges: [] }`\n *\n * When `currentVideoRange` non-null, maintain the active range:\n *\n * `{ preferHDR: currentVideoRange !== 'SDR', allowedVideoRanges: [currentVideoRange] }`\n *\n * When VideoSelectionOption non-null:\n *\n * - Allow all video ranges if `allowedVideoRanges` unspecified.\n * - If `preferHDR` is non-null use the value to filter `allowedVideoRanges`.\n * - Else check window for HDR support and set `preferHDR` to the result.\n *\n * @param currentVideoRange\n * @param videoPreference\n */\nfunction getVideoSelectionOptions(currentVideoRange, videoPreference) {\n let preferHDR = false;\n let allowedVideoRanges = [];\n if (currentVideoRange) {\n preferHDR = currentVideoRange !== 'SDR';\n allowedVideoRanges = [currentVideoRange];\n }\n if (videoPreference) {\n allowedVideoRanges = videoPreference.allowedVideoRanges || VideoRangeValues.slice(0);\n const allowAutoPreferHDR = allowedVideoRanges.join('') !== 'SDR' && !videoPreference.videoCodec;\n preferHDR = videoPreference.preferHDR !== undefined ? videoPreference.preferHDR : allowAutoPreferHDR && isHdrSupported();\n if (!preferHDR) {\n allowedVideoRanges = ['SDR'];\n }\n }\n return {\n preferHDR,\n allowedVideoRanges\n };\n}\n\nconst omitCircularRefsReplacer = replacer => {\n const known = new WeakSet();\n return (_, value) => {\n if (replacer) {\n value = replacer(_, value);\n }\n if (typeof value === 'object' && value !== null) {\n if (known.has(value)) {\n return;\n }\n known.add(value);\n }\n return value;\n };\n};\nconst stringify = (object, replacer) => JSON.stringify(object, omitCircularRefsReplacer(replacer));\n\nfunction getStartCodecTier(codecTiers, currentVideoRange, currentBw, audioPreference, videoPreference) {\n const codecSets = Object.keys(codecTiers);\n const channelsPreference = audioPreference == null ? void 0 : audioPreference.channels;\n const audioCodecPreference = audioPreference == null ? void 0 : audioPreference.audioCodec;\n const videoCodecPreference = videoPreference == null ? void 0 : videoPreference.videoCodec;\n const preferStereo = channelsPreference && parseInt(channelsPreference) === 2;\n // Use first level set to determine stereo, and minimum resolution and framerate\n let hasStereo = false;\n let hasCurrentVideoRange = false;\n let minHeight = Infinity;\n let minFramerate = Infinity;\n let minBitrate = Infinity;\n let minIndex = Infinity;\n let selectedScore = 0;\n let videoRanges = [];\n const {\n preferHDR,\n allowedVideoRanges\n } = getVideoSelectionOptions(currentVideoRange, videoPreference);\n for (let i = codecSets.length; i--;) {\n const tier = codecTiers[codecSets[i]];\n hasStereo || (hasStereo = tier.channels[2] > 0);\n minHeight = Math.min(minHeight, tier.minHeight);\n minFramerate = Math.min(minFramerate, tier.minFramerate);\n minBitrate = Math.min(minBitrate, tier.minBitrate);\n const matchingVideoRanges = allowedVideoRanges.filter(range => tier.videoRanges[range] > 0);\n if (matchingVideoRanges.length > 0) {\n hasCurrentVideoRange = true;\n }\n }\n minHeight = isFiniteNumber(minHeight) ? minHeight : 0;\n minFramerate = isFiniteNumber(minFramerate) ? minFramerate : 0;\n const maxHeight = Math.max(1080, minHeight);\n const maxFramerate = Math.max(30, minFramerate);\n minBitrate = isFiniteNumber(minBitrate) ? minBitrate : currentBw;\n currentBw = Math.max(minBitrate, currentBw);\n // If there are no variants with matching preference, set currentVideoRange to undefined\n if (!hasCurrentVideoRange) {\n currentVideoRange = undefined;\n }\n const hasMultipleSets = codecSets.length > 1;\n const codecSet = codecSets.reduce((selected, candidate) => {\n // Remove candiates which do not meet bitrate, default audio, stereo or channels preference, 1080p or lower, 30fps or lower, or SDR/HDR selection if present\n const candidateTier = codecTiers[candidate];\n if (candidate === selected) {\n return selected;\n }\n videoRanges = hasCurrentVideoRange ? allowedVideoRanges.filter(range => candidateTier.videoRanges[range] > 0) : [];\n if (hasMultipleSets) {\n if (candidateTier.minBitrate > currentBw) {\n logStartCodecCandidateIgnored(candidate, `min bitrate of ${candidateTier.minBitrate} > current estimate of ${currentBw}`);\n return selected;\n }\n if (!candidateTier.hasDefaultAudio) {\n logStartCodecCandidateIgnored(candidate, `no renditions with default or auto-select sound found`);\n return selected;\n }\n if (audioCodecPreference && candidate.indexOf(audioCodecPreference.substring(0, 4)) % 5 !== 0) {\n logStartCodecCandidateIgnored(candidate, `audio codec preference \"${audioCodecPreference}\" not found`);\n return selected;\n }\n if (channelsPreference && !preferStereo) {\n if (!candidateTier.channels[channelsPreference]) {\n logStartCodecCandidateIgnored(candidate, `no renditions with ${channelsPreference} channel sound found (channels options: ${Object.keys(candidateTier.channels)})`);\n return selected;\n }\n } else if ((!audioCodecPreference || preferStereo) && hasStereo && candidateTier.channels['2'] === 0) {\n logStartCodecCandidateIgnored(candidate, `no renditions with stereo sound found`);\n return selected;\n }\n if (candidateTier.minHeight > maxHeight) {\n logStartCodecCandidateIgnored(candidate, `min resolution of ${candidateTier.minHeight} > maximum of ${maxHeight}`);\n return selected;\n }\n if (candidateTier.minFramerate > maxFramerate) {\n logStartCodecCandidateIgnored(candidate, `min framerate of ${candidateTier.minFramerate} > maximum of ${maxFramerate}`);\n return selected;\n }\n if (!videoRanges.some(range => candidateTier.videoRanges[range] > 0)) {\n logStartCodecCandidateIgnored(candidate, `no variants with VIDEO-RANGE of ${stringify(videoRanges)} found`);\n return selected;\n }\n if (videoCodecPreference && candidate.indexOf(videoCodecPreference.substring(0, 4)) % 5 !== 0) {\n logStartCodecCandidateIgnored(candidate, `video codec preference \"${videoCodecPreference}\" not found`);\n return selected;\n }\n if (candidateTier.maxScore < selectedScore) {\n logStartCodecCandidateIgnored(candidate, `max score of ${candidateTier.maxScore} < selected max of ${selectedScore}`);\n return selected;\n }\n }\n // Remove candiates with less preferred codecs or more errors\n if (selected && (codecsSetSelectionPreferenceValue(candidate) >= codecsSetSelectionPreferenceValue(selected) || candidateTier.fragmentError > codecTiers[selected].fragmentError)) {\n return selected;\n }\n minIndex = candidateTier.minIndex;\n selectedScore = candidateTier.maxScore;\n return candidate;\n }, undefined);\n return {\n codecSet,\n videoRanges,\n preferHDR,\n minFramerate,\n minBitrate,\n minIndex\n };\n}\nfunction logStartCodecCandidateIgnored(codeSet, reason) {\n logger.log(`[abr] start candidates with \"${codeSet}\" ignored because ${reason}`);\n}\nfunction getAudioTracksByGroup(allAudioTracks) {\n return allAudioTracks.reduce((audioTracksByGroup, track) => {\n let trackGroup = audioTracksByGroup.groups[track.groupId];\n if (!trackGroup) {\n trackGroup = audioTracksByGroup.groups[track.groupId] = {\n tracks: [],\n channels: {\n 2: 0\n },\n hasDefault: false,\n hasAutoSelect: false\n };\n }\n trackGroup.tracks.push(track);\n const channelsKey = track.channels || '2';\n trackGroup.channels[channelsKey] = (trackGroup.channels[channelsKey] || 0) + 1;\n trackGroup.hasDefault = trackGroup.hasDefault || track.default;\n trackGroup.hasAutoSelect = trackGroup.hasAutoSelect || track.autoselect;\n if (trackGroup.hasDefault) {\n audioTracksByGroup.hasDefaultAudio = true;\n }\n if (trackGroup.hasAutoSelect) {\n audioTracksByGroup.hasAutoSelectAudio = true;\n }\n return audioTracksByGroup;\n }, {\n hasDefaultAudio: false,\n hasAutoSelectAudio: false,\n groups: {}\n });\n}\nfunction getCodecTiers(levels, audioTracksByGroup, minAutoLevel, maxAutoLevel) {\n return levels.slice(minAutoLevel, maxAutoLevel + 1).reduce((tiers, level, index) => {\n if (!level.codecSet) {\n return tiers;\n }\n const audioGroups = level.audioGroups;\n let tier = tiers[level.codecSet];\n if (!tier) {\n tiers[level.codecSet] = tier = {\n minBitrate: Infinity,\n minHeight: Infinity,\n minFramerate: Infinity,\n minIndex: index,\n maxScore: 0,\n videoRanges: {\n SDR: 0\n },\n channels: {\n '2': 0\n },\n hasDefaultAudio: !audioGroups,\n fragmentError: 0\n };\n }\n tier.minBitrate = Math.min(tier.minBitrate, level.bitrate);\n const lesserWidthOrHeight = Math.min(level.height, level.width);\n tier.minHeight = Math.min(tier.minHeight, lesserWidthOrHeight);\n tier.minFramerate = Math.min(tier.minFramerate, level.frameRate);\n tier.minIndex = Math.min(tier.minIndex, index);\n tier.maxScore = Math.max(tier.maxScore, level.score);\n tier.fragmentError += level.fragmentError;\n tier.videoRanges[level.videoRange] = (tier.videoRanges[level.videoRange] || 0) + 1;\n if (audioGroups) {\n audioGroups.forEach(audioGroupId => {\n if (!audioGroupId) {\n return;\n }\n const audioGroup = audioTracksByGroup.groups[audioGroupId];\n if (!audioGroup) {\n return;\n }\n // Default audio is any group with DEFAULT=YES, or if missing then any group with AUTOSELECT=YES, or all variants\n tier.hasDefaultAudio = tier.hasDefaultAudio || audioTracksByGroup.hasDefaultAudio ? audioGroup.hasDefault : audioGroup.hasAutoSelect || !audioTracksByGroup.hasDefaultAudio && !audioTracksByGroup.hasAutoSelectAudio;\n Object.keys(audioGroup.channels).forEach(channels => {\n tier.channels[channels] = (tier.channels[channels] || 0) + audioGroup.channels[channels];\n });\n });\n }\n return tiers;\n }, {});\n}\nfunction getBasicSelectionOption(option) {\n if (!option) {\n return option;\n }\n const {\n lang,\n assocLang,\n characteristics,\n channels,\n audioCodec\n } = option;\n return {\n lang,\n assocLang,\n characteristics,\n channels,\n audioCodec\n };\n}\nfunction findMatchingOption(option, tracks, matchPredicate) {\n if ('attrs' in option) {\n const index = tracks.indexOf(option);\n if (index !== -1) {\n return index;\n }\n }\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n if (matchesOption(option, track, matchPredicate)) {\n return i;\n }\n }\n return -1;\n}\nfunction matchesOption(option, track, matchPredicate) {\n const {\n groupId,\n name,\n lang,\n assocLang,\n default: isDefault\n } = option;\n const forced = option.forced;\n return (groupId === undefined || track.groupId === groupId) && (name === undefined || track.name === name) && (lang === undefined || languagesMatch(lang, track.lang)) && (lang === undefined || track.assocLang === assocLang) && (isDefault === undefined || track.default === isDefault) && (forced === undefined || track.forced === forced) && (!('characteristics' in option) || characteristicsMatch(option.characteristics || '', track.characteristics)) && (matchPredicate === undefined || matchPredicate(option, track));\n}\nfunction languagesMatch(languageA, languageB = '--') {\n if (languageA.length === languageB.length) {\n return languageA === languageB;\n }\n return languageA.startsWith(languageB) || languageB.startsWith(languageA);\n}\nfunction characteristicsMatch(characteristicsA, characteristicsB = '') {\n const arrA = characteristicsA.split(',');\n const arrB = characteristicsB.split(',');\n // Expects each item to be unique:\n return arrA.length === arrB.length && !arrA.some(el => arrB.indexOf(el) === -1);\n}\nfunction audioMatchPredicate(option, track) {\n const {\n audioCodec,\n channels\n } = option;\n return (audioCodec === undefined || (track.audioCodec || '').substring(0, 4) === audioCodec.substring(0, 4)) && (channels === undefined || channels === (track.channels || '2'));\n}\nfunction findClosestLevelWithAudioGroup(option, levels, allAudioTracks, searchIndex, matchPredicate) {\n const currentLevel = levels[searchIndex];\n // Are there variants with same URI as current level?\n // If so, find a match that does not require any level URI change\n const variants = levels.reduce((variantMap, level, index) => {\n const uri = level.uri;\n const renditions = variantMap[uri] || (variantMap[uri] = []);\n renditions.push(index);\n return variantMap;\n }, {});\n const renditions = variants[currentLevel.uri];\n if (renditions.length > 1) {\n searchIndex = Math.max.apply(Math, renditions);\n }\n // Find best match\n const currentVideoRange = currentLevel.videoRange;\n const currentFrameRate = currentLevel.frameRate;\n const currentVideoCodec = currentLevel.codecSet.substring(0, 4);\n const matchingVideo = searchDownAndUpList(levels, searchIndex, level => {\n if (level.videoRange !== currentVideoRange || level.frameRate !== currentFrameRate || level.codecSet.substring(0, 4) !== currentVideoCodec) {\n return false;\n }\n const audioGroups = level.audioGroups;\n const tracks = allAudioTracks.filter(track => !audioGroups || audioGroups.indexOf(track.groupId) !== -1);\n return findMatchingOption(option, tracks, matchPredicate) > -1;\n });\n if (matchingVideo > -1) {\n return matchingVideo;\n }\n return searchDownAndUpList(levels, searchIndex, level => {\n const audioGroups = level.audioGroups;\n const tracks = allAudioTracks.filter(track => !audioGroups || audioGroups.indexOf(track.groupId) !== -1);\n return findMatchingOption(option, tracks, matchPredicate) > -1;\n });\n}\nfunction searchDownAndUpList(arr, searchIndex, predicate) {\n for (let i = searchIndex; i > -1; i--) {\n if (predicate(arr[i])) {\n return i;\n }\n }\n for (let i = searchIndex + 1; i < arr.length; i++) {\n if (predicate(arr[i])) {\n return i;\n }\n }\n return -1;\n}\nfunction useAlternateAudio(audioTrackUrl, hls) {\n var _hls$loadLevelObj;\n return !!audioTrackUrl && audioTrackUrl !== ((_hls$loadLevelObj = hls.loadLevelObj) == null ? void 0 : _hls$loadLevelObj.uri);\n}\n\nclass AbrController extends Logger {\n constructor(_hls) {\n super('abr', _hls.logger);\n this.hls = void 0;\n this.lastLevelLoadSec = 0;\n this.lastLoadedFragLevel = -1;\n this.firstSelection = -1;\n this._nextAutoLevel = -1;\n this.nextAutoLevelKey = '';\n this.audioTracksByGroup = null;\n this.codecTiers = null;\n this.timer = -1;\n this.fragCurrent = null;\n this.partCurrent = null;\n this.bitrateTestDelay = 0;\n this.rebufferNotice = -1;\n this.supportedCache = {};\n this.bwEstimator = void 0;\n /*\n This method monitors the download rate of the current fragment, and will downswitch if that fragment will not load\n quickly enough to prevent underbuffering\n */\n this._abandonRulesCheck = levelLoaded => {\n var _ref;\n const {\n fragCurrent: frag,\n partCurrent: part,\n hls\n } = this;\n const {\n autoLevelEnabled,\n media\n } = hls;\n if (!frag || !media) {\n return;\n }\n const now = performance.now();\n const stats = part ? part.stats : frag.stats;\n const duration = part ? part.duration : frag.duration;\n const timeLoading = now - stats.loading.start;\n const minAutoLevel = hls.minAutoLevel;\n const loadingFragForLevel = frag.level;\n const currentAutoLevel = this._nextAutoLevel;\n // If frag loading is aborted, complete, or from lowest level, stop timer and return\n if (stats.aborted || stats.loaded && stats.loaded === stats.total || loadingFragForLevel <= minAutoLevel) {\n this.clearTimer();\n // reset forced auto level value so that next level will be selected\n this._nextAutoLevel = -1;\n return;\n }\n\n // This check only runs if we're in ABR mode\n if (!autoLevelEnabled) {\n return;\n }\n\n // Must be loading/loaded a new level or be in a playing state\n const fragBlockingSwitch = currentAutoLevel > -1 && currentAutoLevel !== loadingFragForLevel;\n const levelChange = !!levelLoaded || fragBlockingSwitch;\n if (!levelChange && (media.paused || !media.playbackRate || !media.readyState)) {\n return;\n }\n const bufferInfo = hls.mainForwardBufferInfo;\n if (!levelChange && bufferInfo === null) {\n return;\n }\n const ttfbEstimate = this.bwEstimator.getEstimateTTFB();\n const playbackRate = Math.abs(media.playbackRate);\n // To maintain stable adaptive playback, only begin monitoring frag loading after half or more of its playback duration has passed\n if (timeLoading <= Math.max(ttfbEstimate, 1000 * (duration / (playbackRate * 2)))) {\n return;\n }\n\n // bufferStarvationDelay is an estimate of the amount time (in seconds) it will take to exhaust the buffer\n const bufferStarvationDelay = bufferInfo ? bufferInfo.len / playbackRate : 0;\n const ttfb = stats.loading.first ? stats.loading.first - stats.loading.start : -1;\n const loadedFirstByte = stats.loaded && ttfb > -1;\n const bwEstimate = this.getBwEstimate();\n const levels = hls.levels;\n const level = levels[loadingFragForLevel];\n const expectedLen = Math.max(stats.loaded, Math.round(duration * (frag.bitrate || level.averageBitrate) / 8));\n let timeStreaming = loadedFirstByte ? timeLoading - ttfb : timeLoading;\n if (timeStreaming < 1 && loadedFirstByte) {\n timeStreaming = Math.min(timeLoading, stats.loaded * 8 / bwEstimate);\n }\n const loadRate = loadedFirstByte ? stats.loaded * 1000 / timeStreaming : 0;\n // fragLoadDelay is an estimate of the time (in seconds) it will take to buffer the remainder of the fragment\n const ttfbSeconds = ttfbEstimate / 1000;\n const fragLoadedDelay = loadRate ? (expectedLen - stats.loaded) / loadRate : expectedLen * 8 / bwEstimate + ttfbSeconds;\n // Only downswitch if the time to finish loading the current fragment is greater than the amount of buffer left\n if (fragLoadedDelay <= bufferStarvationDelay) {\n return;\n }\n const bwe = loadRate ? loadRate * 8 : bwEstimate;\n const live = ((_ref = (levelLoaded == null ? void 0 : levelLoaded.details) || this.hls.latestLevelDetails) == null ? void 0 : _ref.live) === true;\n const abrBandWidthUpFactor = this.hls.config.abrBandWidthUpFactor;\n let fragLevelNextLoadedDelay = Number.POSITIVE_INFINITY;\n let nextLoadLevel;\n // Iterate through lower level and try to find the largest one that avoids rebuffering\n for (nextLoadLevel = loadingFragForLevel - 1; nextLoadLevel > minAutoLevel; nextLoadLevel--) {\n // compute time to load next fragment at lower level\n // 8 = bits per byte (bps/Bps)\n const levelNextBitrate = levels[nextLoadLevel].maxBitrate;\n const requiresLevelLoad = !levels[nextLoadLevel].details || live;\n fragLevelNextLoadedDelay = this.getTimeToLoadFrag(ttfbSeconds, bwe, duration * levelNextBitrate, requiresLevelLoad);\n if (fragLevelNextLoadedDelay < Math.min(bufferStarvationDelay, duration + ttfbSeconds)) {\n break;\n }\n }\n // Only emergency switch down if it takes less time to load a new fragment at lowest level instead of continuing\n // to load the current one\n if (fragLevelNextLoadedDelay >= fragLoadedDelay) {\n return;\n }\n\n // if estimated load time of new segment is completely unreasonable, ignore and do not emergency switch down\n if (fragLevelNextLoadedDelay > duration * 10) {\n return;\n }\n if (loadedFirstByte) {\n // If there has been loading progress, sample bandwidth using loading time offset by minimum TTFB time\n this.bwEstimator.sample(timeLoading - Math.min(ttfbEstimate, ttfb), stats.loaded);\n } else {\n // If there has been no loading progress, sample TTFB\n this.bwEstimator.sampleTTFB(timeLoading);\n }\n const nextLoadLevelBitrate = levels[nextLoadLevel].maxBitrate;\n if (this.getBwEstimate() * abrBandWidthUpFactor > nextLoadLevelBitrate) {\n this.resetEstimator(nextLoadLevelBitrate);\n }\n const bestSwitchLevel = this.findBestLevel(nextLoadLevelBitrate, minAutoLevel, nextLoadLevel, 0, bufferStarvationDelay, 1, 1);\n if (bestSwitchLevel > -1) {\n nextLoadLevel = bestSwitchLevel;\n }\n this.warn(`Fragment ${frag.sn}${part ? ' part ' + part.index : ''} of level ${loadingFragForLevel} is loading too slowly;\n Fragment duration: ${frag.duration.toFixed(3)}\n Time to underbuffer: ${bufferStarvationDelay.toFixed(3)} s\n Estimated load time for current fragment: ${fragLoadedDelay.toFixed(3)} s\n Estimated load time for down switch fragment: ${fragLevelNextLoadedDelay.toFixed(3)} s\n TTFB estimate: ${ttfb | 0} ms\n Current BW estimate: ${isFiniteNumber(bwEstimate) ? bwEstimate | 0 : 'Unknown'} bps\n New BW estimate: ${this.getBwEstimate() | 0} bps\n Switching to level ${nextLoadLevel} @ ${nextLoadLevelBitrate | 0} bps`);\n hls.nextLoadLevel = hls.nextAutoLevel = nextLoadLevel;\n this.clearTimer();\n const abortAndSwitch = () => {\n // Are nextLoadLevel details available or is stream-controller still in \"WAITING_LEVEL\" state?\n this.clearTimer();\n if (this.fragCurrent === frag && this.hls.loadLevel === nextLoadLevel && nextLoadLevel > 0) {\n const bufferStarvationDelay = this.getStarvationDelay();\n this.warn(`Aborting inflight request ${nextLoadLevel > 0 ? 'and switching down' : ''}\n Fragment duration: ${frag.duration.toFixed(3)} s\n Time to underbuffer: ${bufferStarvationDelay.toFixed(3)} s`);\n frag.abortRequests();\n this.fragCurrent = this.partCurrent = null;\n if (nextLoadLevel > minAutoLevel) {\n let lowestSwitchLevel = this.findBestLevel(this.hls.levels[minAutoLevel].bitrate, minAutoLevel, nextLoadLevel, 0, bufferStarvationDelay, 1, 1);\n if (lowestSwitchLevel === -1) {\n lowestSwitchLevel = minAutoLevel;\n }\n this.hls.nextLoadLevel = this.hls.nextAutoLevel = lowestSwitchLevel;\n this.resetEstimator(this.hls.levels[lowestSwitchLevel].bitrate);\n }\n }\n };\n if (fragBlockingSwitch || fragLoadedDelay > fragLevelNextLoadedDelay * 2) {\n abortAndSwitch();\n } else {\n this.timer = self.setInterval(abortAndSwitch, fragLevelNextLoadedDelay * 1000);\n }\n hls.trigger(Events.FRAG_LOAD_EMERGENCY_ABORTED, {\n frag,\n part,\n stats\n });\n };\n this.hls = _hls;\n this.bwEstimator = this.initEstimator();\n this.registerListeners();\n }\n resetEstimator(abrEwmaDefaultEstimate) {\n if (abrEwmaDefaultEstimate) {\n this.log(`setting initial bwe to ${abrEwmaDefaultEstimate}`);\n this.hls.config.abrEwmaDefaultEstimate = abrEwmaDefaultEstimate;\n }\n this.firstSelection = -1;\n this.bwEstimator = this.initEstimator();\n }\n initEstimator() {\n const config = this.hls.config;\n return new EwmaBandWidthEstimator(config.abrEwmaSlowVoD, config.abrEwmaFastVoD, config.abrEwmaDefaultEstimate);\n }\n registerListeners() {\n const {\n hls\n } = this;\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.FRAG_LOADING, this.onFragLoading, this);\n hls.on(Events.FRAG_LOADED, this.onFragLoaded, this);\n hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n hls.on(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n hls.on(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n hls.on(Events.MAX_AUTO_LEVEL_UPDATED, this.onMaxAutoLevelUpdated, this);\n hls.on(Events.ERROR, this.onError, this);\n }\n unregisterListeners() {\n const {\n hls\n } = this;\n if (!hls) {\n return;\n }\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.FRAG_LOADING, this.onFragLoading, this);\n hls.off(Events.FRAG_LOADED, this.onFragLoaded, this);\n hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n hls.off(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n hls.off(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n hls.off(Events.MAX_AUTO_LEVEL_UPDATED, this.onMaxAutoLevelUpdated, this);\n hls.off(Events.ERROR, this.onError, this);\n }\n destroy() {\n this.unregisterListeners();\n this.clearTimer();\n // @ts-ignore\n this.hls = this._abandonRulesCheck = this.supportedCache = null;\n this.fragCurrent = this.partCurrent = null;\n }\n onManifestLoading(event, data) {\n this.lastLoadedFragLevel = -1;\n this.firstSelection = -1;\n this.lastLevelLoadSec = 0;\n this.supportedCache = {};\n this.fragCurrent = this.partCurrent = null;\n this.onLevelsUpdated();\n this.clearTimer();\n }\n onLevelsUpdated() {\n if (this.lastLoadedFragLevel > -1 && this.fragCurrent) {\n this.lastLoadedFragLevel = this.fragCurrent.level;\n }\n this._nextAutoLevel = -1;\n this.onMaxAutoLevelUpdated();\n this.codecTiers = null;\n this.audioTracksByGroup = null;\n }\n onMaxAutoLevelUpdated() {\n this.firstSelection = -1;\n this.nextAutoLevelKey = '';\n }\n onFragLoading(event, data) {\n const frag = data.frag;\n if (this.ignoreFragment(frag)) {\n return;\n }\n if (!frag.bitrateTest) {\n var _data$part;\n this.fragCurrent = frag;\n this.partCurrent = (_data$part = data.part) != null ? _data$part : null;\n }\n this.clearTimer();\n this.timer = self.setInterval(this._abandonRulesCheck, 100);\n }\n onLevelSwitching(event, data) {\n this.clearTimer();\n }\n onError(event, data) {\n if (data.fatal) {\n return;\n }\n switch (data.details) {\n case ErrorDetails.BUFFER_ADD_CODEC_ERROR:\n case ErrorDetails.BUFFER_APPEND_ERROR:\n // Reset last loaded level so that a new selection can be made after calling recoverMediaError\n this.lastLoadedFragLevel = -1;\n this.firstSelection = -1;\n break;\n case ErrorDetails.FRAG_LOAD_TIMEOUT:\n {\n const frag = data.frag;\n const {\n fragCurrent,\n partCurrent: part\n } = this;\n if (frag && fragCurrent && frag.sn === fragCurrent.sn && frag.level === fragCurrent.level) {\n const now = performance.now();\n const stats = part ? part.stats : frag.stats;\n const timeLoading = now - stats.loading.start;\n const ttfb = stats.loading.first ? stats.loading.first - stats.loading.start : -1;\n const loadedFirstByte = stats.loaded && ttfb > -1;\n if (loadedFirstByte) {\n const ttfbEstimate = this.bwEstimator.getEstimateTTFB();\n this.bwEstimator.sample(timeLoading - Math.min(ttfbEstimate, ttfb), stats.loaded);\n } else {\n this.bwEstimator.sampleTTFB(timeLoading);\n }\n }\n break;\n }\n }\n }\n getTimeToLoadFrag(timeToFirstByteSec, bandwidth, fragSizeBits, isSwitch) {\n const fragLoadSec = timeToFirstByteSec + fragSizeBits / bandwidth;\n const playlistLoadSec = isSwitch ? timeToFirstByteSec + this.lastLevelLoadSec : 0;\n return fragLoadSec + playlistLoadSec;\n }\n onLevelLoaded(event, data) {\n const config = this.hls.config;\n const {\n loading\n } = data.stats;\n const timeLoadingMs = loading.end - loading.first;\n if (isFiniteNumber(timeLoadingMs)) {\n this.lastLevelLoadSec = timeLoadingMs / 1000;\n }\n if (data.details.live) {\n this.bwEstimator.update(config.abrEwmaSlowLive, config.abrEwmaFastLive);\n } else {\n this.bwEstimator.update(config.abrEwmaSlowVoD, config.abrEwmaFastVoD);\n }\n if (this.timer > -1) {\n this._abandonRulesCheck(data.levelInfo);\n }\n }\n onFragLoaded(event, {\n frag,\n part\n }) {\n const stats = part ? part.stats : frag.stats;\n if (frag.type === PlaylistLevelType.MAIN) {\n this.bwEstimator.sampleTTFB(stats.loading.first - stats.loading.start);\n }\n if (this.ignoreFragment(frag)) {\n return;\n }\n // stop monitoring bw once frag loaded\n this.clearTimer();\n // reset forced auto level value so that next level will be selected\n if (frag.level === this._nextAutoLevel) {\n this._nextAutoLevel = -1;\n }\n this.firstSelection = -1;\n\n // compute level average bitrate\n if (this.hls.config.abrMaxWithRealBitrate) {\n const duration = part ? part.duration : frag.duration;\n const level = this.hls.levels[frag.level];\n const loadedBytes = (level.loaded ? level.loaded.bytes : 0) + stats.loaded;\n const loadedDuration = (level.loaded ? level.loaded.duration : 0) + duration;\n level.loaded = {\n bytes: loadedBytes,\n duration: loadedDuration\n };\n level.realBitrate = Math.round(8 * loadedBytes / loadedDuration);\n }\n if (frag.bitrateTest) {\n const fragBufferedData = {\n stats,\n frag,\n part,\n id: frag.type\n };\n this.onFragBuffered(Events.FRAG_BUFFERED, fragBufferedData);\n frag.bitrateTest = false;\n } else {\n // store level id after successful fragment load for playback\n this.lastLoadedFragLevel = frag.level;\n }\n }\n onFragBuffered(event, data) {\n const {\n frag,\n part\n } = data;\n const stats = part != null && part.stats.loaded ? part.stats : frag.stats;\n if (stats.aborted) {\n return;\n }\n if (this.ignoreFragment(frag)) {\n return;\n }\n // Use the difference between parsing and request instead of buffering and request to compute fragLoadingProcessing;\n // rationale is that buffer appending only happens once media is attached. This can happen when config.startFragPrefetch\n // is used. If we used buffering in that case, our BW estimate sample will be very large.\n const processingMs = stats.parsing.end - stats.loading.start - Math.min(stats.loading.first - stats.loading.start, this.bwEstimator.getEstimateTTFB());\n this.bwEstimator.sample(processingMs, stats.loaded);\n stats.bwEstimate = this.getBwEstimate();\n if (frag.bitrateTest) {\n this.bitrateTestDelay = processingMs / 1000;\n } else {\n this.bitrateTestDelay = 0;\n }\n }\n ignoreFragment(frag) {\n // Only count non-alt-audio frags which were actually buffered in our BW calculations\n return frag.type !== PlaylistLevelType.MAIN || frag.sn === 'initSegment';\n }\n clearTimer() {\n if (this.timer > -1) {\n self.clearInterval(this.timer);\n this.timer = -1;\n }\n }\n get firstAutoLevel() {\n const {\n maxAutoLevel,\n minAutoLevel\n } = this.hls;\n const bwEstimate = this.getBwEstimate();\n const maxStartDelay = this.hls.config.maxStarvationDelay;\n const abrAutoLevel = this.findBestLevel(bwEstimate, minAutoLevel, maxAutoLevel, 0, maxStartDelay, 1, 1);\n if (abrAutoLevel > -1) {\n return abrAutoLevel;\n }\n const firstLevel = this.hls.firstLevel;\n const clamped = Math.min(Math.max(firstLevel, minAutoLevel), maxAutoLevel);\n this.warn(`Could not find best starting auto level. Defaulting to first in playlist ${firstLevel} clamped to ${clamped}`);\n return clamped;\n }\n get forcedAutoLevel() {\n if (this.nextAutoLevelKey) {\n return -1;\n }\n return this._nextAutoLevel;\n }\n\n // return next auto level\n get nextAutoLevel() {\n const forcedAutoLevel = this.forcedAutoLevel;\n const bwEstimator = this.bwEstimator;\n const useEstimate = bwEstimator.canEstimate();\n const loadedFirstFrag = this.lastLoadedFragLevel > -1;\n // in case next auto level has been forced, and bw not available or not reliable, return forced value\n if (forcedAutoLevel !== -1 && (!useEstimate || !loadedFirstFrag || this.nextAutoLevelKey === this.getAutoLevelKey())) {\n return forcedAutoLevel;\n }\n\n // compute next level using ABR logic\n const nextABRAutoLevel = useEstimate && loadedFirstFrag ? this.getNextABRAutoLevel() : this.firstAutoLevel;\n\n // use forced auto level while it hasn't errored more than ABR selection\n if (forcedAutoLevel !== -1) {\n const levels = this.hls.levels;\n if (levels.length > Math.max(forcedAutoLevel, nextABRAutoLevel) && levels[forcedAutoLevel].loadError <= levels[nextABRAutoLevel].loadError) {\n return forcedAutoLevel;\n }\n }\n\n // save result until state has changed\n this._nextAutoLevel = nextABRAutoLevel;\n this.nextAutoLevelKey = this.getAutoLevelKey();\n return nextABRAutoLevel;\n }\n getAutoLevelKey() {\n return `${this.getBwEstimate()}_${this.getStarvationDelay().toFixed(2)}`;\n }\n getNextABRAutoLevel() {\n const {\n fragCurrent,\n partCurrent,\n hls\n } = this;\n if (hls.levels.length <= 1) {\n return hls.loadLevel;\n }\n const {\n maxAutoLevel,\n config,\n minAutoLevel\n } = hls;\n const currentFragDuration = partCurrent ? partCurrent.duration : fragCurrent ? fragCurrent.duration : 0;\n const avgbw = this.getBwEstimate();\n // bufferStarvationDelay is the wall-clock time left until the playback buffer is exhausted.\n const bufferStarvationDelay = this.getStarvationDelay();\n let bwFactor = config.abrBandWidthFactor;\n let bwUpFactor = config.abrBandWidthUpFactor;\n\n // First, look to see if we can find a level matching with our avg bandwidth AND that could also guarantee no rebuffering at all\n if (bufferStarvationDelay) {\n const _bestLevel = this.findBestLevel(avgbw, minAutoLevel, maxAutoLevel, bufferStarvationDelay, 0, bwFactor, bwUpFactor);\n if (_bestLevel >= 0) {\n this.rebufferNotice = -1;\n return _bestLevel;\n }\n }\n // not possible to get rid of rebuffering... try to find level that will guarantee less than maxStarvationDelay of rebuffering\n let maxStarvationDelay = currentFragDuration ? Math.min(currentFragDuration, config.maxStarvationDelay) : config.maxStarvationDelay;\n if (!bufferStarvationDelay) {\n // in case buffer is empty, let's check if previous fragment was loaded to perform a bitrate test\n const bitrateTestDelay = this.bitrateTestDelay;\n if (bitrateTestDelay) {\n // if it is the case, then we need to adjust our max starvation delay using maxLoadingDelay config value\n // max video loading delay used in automatic start level selection :\n // in that mode ABR controller will ensure that video loading time (ie the time to fetch the first fragment at lowest quality level +\n // the time to fetch the fragment at the appropriate quality level is less than ```maxLoadingDelay``` )\n // cap maxLoadingDelay and ensure it is not bigger 'than bitrate test' frag duration\n const maxLoadingDelay = currentFragDuration ? Math.min(currentFragDuration, config.maxLoadingDelay) : config.maxLoadingDelay;\n maxStarvationDelay = maxLoadingDelay - bitrateTestDelay;\n this.info(`bitrate test took ${Math.round(1000 * bitrateTestDelay)}ms, set first fragment max fetchDuration to ${Math.round(1000 * maxStarvationDelay)} ms`);\n // don't use conservative factor on bitrate test\n bwFactor = bwUpFactor = 1;\n }\n }\n const bestLevel = this.findBestLevel(avgbw, minAutoLevel, maxAutoLevel, bufferStarvationDelay, maxStarvationDelay, bwFactor, bwUpFactor);\n if (this.rebufferNotice !== bestLevel) {\n this.rebufferNotice = bestLevel;\n this.info(`${bufferStarvationDelay ? 'rebuffering expected' : 'buffer is empty'}, optimal quality level ${bestLevel}`);\n }\n if (bestLevel > -1) {\n return bestLevel;\n }\n // If no matching level found, see if min auto level would be a better option\n const minLevel = hls.levels[minAutoLevel];\n const autoLevel = hls.loadLevelObj;\n if (autoLevel && (minLevel == null ? void 0 : minLevel.bitrate) < autoLevel.bitrate) {\n return minAutoLevel;\n }\n // or if bitrate is not lower, continue to use loadLevel\n return hls.loadLevel;\n }\n getStarvationDelay() {\n const hls = this.hls;\n const media = hls.media;\n if (!media) {\n return Infinity;\n }\n // playbackRate is the absolute value of the playback rate; if media.playbackRate is 0, we use 1 to load as\n // if we're playing back at the normal rate.\n const playbackRate = media && media.playbackRate !== 0 ? Math.abs(media.playbackRate) : 1.0;\n const bufferInfo = hls.mainForwardBufferInfo;\n return (bufferInfo ? bufferInfo.len : 0) / playbackRate;\n }\n getBwEstimate() {\n return this.bwEstimator.canEstimate() ? this.bwEstimator.getEstimate() : this.hls.config.abrEwmaDefaultEstimate;\n }\n findBestLevel(currentBw, minAutoLevel, maxAutoLevel, bufferStarvationDelay, maxStarvationDelay, bwFactor, bwUpFactor) {\n var _this$hls$latestLevel;\n const maxFetchDuration = bufferStarvationDelay + maxStarvationDelay;\n const lastLoadedFragLevel = this.lastLoadedFragLevel;\n const selectionBaseLevel = lastLoadedFragLevel === -1 ? this.hls.firstLevel : lastLoadedFragLevel;\n const {\n fragCurrent,\n partCurrent\n } = this;\n const {\n levels,\n allAudioTracks,\n loadLevel,\n config\n } = this.hls;\n if (levels.length === 1) {\n return 0;\n }\n const level = levels[selectionBaseLevel];\n const live = !!((_this$hls$latestLevel = this.hls.latestLevelDetails) != null && _this$hls$latestLevel.live);\n const firstSelection = loadLevel === -1 || lastLoadedFragLevel === -1;\n let currentCodecSet;\n let currentVideoRange = 'SDR';\n let currentFrameRate = (level == null ? void 0 : level.frameRate) || 0;\n const {\n audioPreference,\n videoPreference\n } = config;\n const audioTracksByGroup = this.audioTracksByGroup || (this.audioTracksByGroup = getAudioTracksByGroup(allAudioTracks));\n let minStartIndex = -1;\n if (firstSelection) {\n if (this.firstSelection !== -1) {\n return this.firstSelection;\n }\n const codecTiers = this.codecTiers || (this.codecTiers = getCodecTiers(levels, audioTracksByGroup, minAutoLevel, maxAutoLevel));\n const startTier = getStartCodecTier(codecTiers, currentVideoRange, currentBw, audioPreference, videoPreference);\n const {\n codecSet,\n videoRanges,\n minFramerate,\n minBitrate,\n minIndex,\n preferHDR\n } = startTier;\n minStartIndex = minIndex;\n currentCodecSet = codecSet;\n currentVideoRange = preferHDR ? videoRanges[videoRanges.length - 1] : videoRanges[0];\n currentFrameRate = minFramerate;\n currentBw = Math.max(currentBw, minBitrate);\n this.log(`picked start tier ${stringify(startTier)}`);\n } else {\n currentCodecSet = level == null ? void 0 : level.codecSet;\n currentVideoRange = level == null ? void 0 : level.videoRange;\n }\n const currentFragDuration = partCurrent ? partCurrent.duration : fragCurrent ? fragCurrent.duration : 0;\n const ttfbEstimateSec = this.bwEstimator.getEstimateTTFB() / 1000;\n const levelsSkipped = [];\n for (let i = maxAutoLevel; i >= minAutoLevel; i--) {\n var _levelInfo$supportedR;\n const levelInfo = levels[i];\n const upSwitch = i > selectionBaseLevel;\n if (!levelInfo) {\n continue;\n }\n if (config.useMediaCapabilities && !levelInfo.supportedResult && !levelInfo.supportedPromise) {\n const mediaCapabilities = navigator.mediaCapabilities;\n if (typeof (mediaCapabilities == null ? void 0 : mediaCapabilities.decodingInfo) === 'function' && requiresMediaCapabilitiesDecodingInfo(levelInfo, audioTracksByGroup, currentVideoRange, currentFrameRate, currentBw, audioPreference)) {\n levelInfo.supportedPromise = getMediaDecodingInfoPromise(levelInfo, audioTracksByGroup, mediaCapabilities, this.supportedCache);\n levelInfo.supportedPromise.then(decodingInfo => {\n if (!this.hls) {\n return;\n }\n levelInfo.supportedResult = decodingInfo;\n const levels = this.hls.levels;\n const index = levels.indexOf(levelInfo);\n if (decodingInfo.error) {\n this.warn(`MediaCapabilities decodingInfo error: \"${decodingInfo.error}\" for level ${index} ${stringify(decodingInfo)}`);\n } else if (!decodingInfo.supported) {\n this.warn(`Unsupported MediaCapabilities decodingInfo result for level ${index} ${stringify(decodingInfo)}`);\n if (index > -1 && levels.length > 1) {\n this.log(`Removing unsupported level ${index}`);\n this.hls.removeLevel(index);\n if (this.hls.loadLevel === -1) {\n this.hls.nextLoadLevel = 0;\n }\n }\n } else if (decodingInfo.decodingInfoResults.some(info => info.smooth === false || info.powerEfficient === false)) {\n this.log(`MediaCapabilities decodingInfo for level ${index} not smooth or powerEfficient: ${stringify(decodingInfo)}`);\n }\n }).catch(error => {\n this.warn(`Error handling MediaCapabilities decodingInfo: ${error}`);\n });\n } else {\n levelInfo.supportedResult = SUPPORTED_INFO_DEFAULT;\n }\n }\n\n // skip candidates which change codec-family or video-range,\n // and which decrease or increase frame-rate for up and down-switch respectfully\n if (currentCodecSet && levelInfo.codecSet !== currentCodecSet || currentVideoRange && levelInfo.videoRange !== currentVideoRange || upSwitch && currentFrameRate > levelInfo.frameRate || !upSwitch && currentFrameRate > 0 && currentFrameRate < levelInfo.frameRate || (_levelInfo$supportedR = levelInfo.supportedResult) != null && (_levelInfo$supportedR = _levelInfo$supportedR.decodingInfoResults) != null && _levelInfo$supportedR.some(info => info.smooth === false)) {\n if (!firstSelection || i !== minStartIndex) {\n levelsSkipped.push(i);\n continue;\n }\n }\n const levelDetails = levelInfo.details;\n const avgDuration = (partCurrent ? levelDetails == null ? void 0 : levelDetails.partTarget : levelDetails == null ? void 0 : levelDetails.averagetargetduration) || currentFragDuration;\n let adjustedbw;\n // follow algorithm captured from stagefright :\n // https://android.googlesource.com/platform/frameworks/av/+/master/media/libstagefright/httplive/LiveSession.cpp\n // Pick the highest bandwidth stream below or equal to estimated bandwidth.\n // consider only 80% of the available bandwidth, but if we are switching up,\n // be even more conservative (70%) to avoid overestimating and immediately\n // switching back.\n if (!upSwitch) {\n adjustedbw = bwFactor * currentBw;\n } else {\n adjustedbw = bwUpFactor * currentBw;\n }\n\n // Use average bitrate when starvation delay (buffer length) is gt or eq two segment durations and rebuffering is not expected (maxStarvationDelay > 0)\n const bitrate = currentFragDuration && bufferStarvationDelay >= currentFragDuration * 2 && maxStarvationDelay === 0 ? levelInfo.averageBitrate : levelInfo.maxBitrate;\n const fetchDuration = this.getTimeToLoadFrag(ttfbEstimateSec, adjustedbw, bitrate * avgDuration, levelDetails === undefined);\n const canSwitchWithinTolerance =\n // if adjusted bw is greater than level bitrate AND\n adjustedbw >= bitrate && (\n // no level change, or new level has no error history\n i === lastLoadedFragLevel || levelInfo.loadError === 0 && levelInfo.fragmentError === 0) && (\n // fragment fetchDuration unknown OR live stream OR fragment fetchDuration less than max allowed fetch duration, then this level matches\n // we don't account for max Fetch Duration for live streams, this is to avoid switching down when near the edge of live sliding window ...\n // special case to support startLevel = -1 (bitrateTest) on live streams : in that case we should not exit loop so that findBestLevel will return -1\n fetchDuration <= ttfbEstimateSec || !isFiniteNumber(fetchDuration) || live && !this.bitrateTestDelay || fetchDuration < maxFetchDuration);\n if (canSwitchWithinTolerance) {\n const forcedAutoLevel = this.forcedAutoLevel;\n if (i !== loadLevel && (forcedAutoLevel === -1 || forcedAutoLevel !== loadLevel)) {\n if (levelsSkipped.length) {\n this.trace(`Skipped level(s) ${levelsSkipped.join(',')} of ${maxAutoLevel} max with CODECS and VIDEO-RANGE:\"${levels[levelsSkipped[0]].codecs}\" ${levels[levelsSkipped[0]].videoRange}; not compatible with \"${currentCodecSet}\" ${currentVideoRange}`);\n }\n this.info(`switch candidate:${selectionBaseLevel}->${i} adjustedbw(${Math.round(adjustedbw)})-bitrate=${Math.round(adjustedbw - bitrate)} ttfb:${ttfbEstimateSec.toFixed(1)} avgDuration:${avgDuration.toFixed(1)} maxFetchDuration:${maxFetchDuration.toFixed(1)} fetchDuration:${fetchDuration.toFixed(1)} firstSelection:${firstSelection} codecSet:${levelInfo.codecSet} videoRange:${levelInfo.videoRange} hls.loadLevel:${loadLevel}`);\n }\n if (firstSelection) {\n this.firstSelection = i;\n }\n // as we are looping from highest to lowest, this will return the best achievable quality level\n return i;\n }\n }\n // not enough time budget even with quality level 0 ... rebuffering might happen\n return -1;\n }\n set nextAutoLevel(nextLevel) {\n const value = this.deriveNextAutoLevel(nextLevel);\n if (this._nextAutoLevel !== value) {\n this.nextAutoLevelKey = '';\n this._nextAutoLevel = value;\n }\n }\n deriveNextAutoLevel(nextLevel) {\n const {\n maxAutoLevel,\n minAutoLevel\n } = this.hls;\n return Math.min(Math.max(nextLevel, minAutoLevel), maxAutoLevel);\n }\n}\n\nconst BinarySearch = {\n /**\n * Searches for an item in an array which matches a certain condition.\n * This requires the condition to only match one item in the array,\n * and for the array to be ordered.\n *\n * @param list The array to search.\n * @param comparisonFn\n * Called and provided a candidate item as the first argument.\n * Should return:\n * > -1 if the item should be located at a lower index than the provided item.\n * > 1 if the item should be located at a higher index than the provided item.\n * > 0 if the item is the item you're looking for.\n *\n * @returns the object if found, otherwise returns null\n */\n search: function (list, comparisonFn) {\n let minIndex = 0;\n let maxIndex = list.length - 1;\n let currentIndex = null;\n let currentElement = null;\n while (minIndex <= maxIndex) {\n currentIndex = (minIndex + maxIndex) / 2 | 0;\n currentElement = list[currentIndex];\n const comparisonResult = comparisonFn(currentElement);\n if (comparisonResult > 0) {\n minIndex = currentIndex + 1;\n } else if (comparisonResult < 0) {\n maxIndex = currentIndex - 1;\n } else {\n return currentElement;\n }\n }\n return null;\n }\n};\n\n/**\n * Returns first fragment whose endPdt value exceeds the given PDT, or null.\n * @param fragments - The array of candidate fragments\n * @param PDTValue - The PDT value which must be exceeded\n * @param maxFragLookUpTolerance - The amount of time that a fragment's start/end can be within in order to be considered contiguous\n */\nfunction findFragmentByPDT(fragments, PDTValue, maxFragLookUpTolerance) {\n if (PDTValue === null || !Array.isArray(fragments) || !fragments.length || !isFiniteNumber(PDTValue)) {\n return null;\n }\n\n // if less than start\n const startPDT = fragments[0].programDateTime;\n if (PDTValue < (startPDT || 0)) {\n return null;\n }\n const endPDT = fragments[fragments.length - 1].endProgramDateTime;\n if (PDTValue >= (endPDT || 0)) {\n return null;\n }\n for (let seg = 0; seg < fragments.length; ++seg) {\n const frag = fragments[seg];\n if (pdtWithinToleranceTest(PDTValue, maxFragLookUpTolerance, frag)) {\n return frag;\n }\n }\n return null;\n}\n\n/**\n * Finds a fragment based on the SN of the previous fragment; or based on the needs of the current buffer.\n * This method compensates for small buffer gaps by applying a tolerance to the start of any candidate fragment, thus\n * breaking any traps which would cause the same fragment to be continuously selected within a small range.\n * @param fragPrevious - The last frag successfully appended\n * @param fragments - The array of candidate fragments\n * @param bufferEnd - The end of the contiguous buffered range the playhead is currently within\n * @param maxFragLookUpTolerance - The amount of time that a fragment's start/end can be within in order to be considered contiguous\n * @returns a matching fragment or null\n */\nfunction findFragmentByPTS(fragPrevious, fragments, bufferEnd = 0, maxFragLookUpTolerance = 0, nextFragLookupTolerance = 0.005) {\n let fragNext = null;\n if (fragPrevious) {\n fragNext = fragments[1 + fragPrevious.sn - fragments[0].sn] || null;\n // check for buffer-end rounding error\n const bufferEdgeError = fragPrevious.endDTS - bufferEnd;\n if (bufferEdgeError > 0 && bufferEdgeError < 0.0000015) {\n bufferEnd += 0.0000015;\n }\n if (fragNext && fragPrevious.level !== fragNext.level && fragNext.end <= fragPrevious.end) {\n fragNext = fragments[2 + fragPrevious.sn - fragments[0].sn] || null;\n }\n } else if (bufferEnd === 0 && fragments[0].start === 0) {\n fragNext = fragments[0];\n }\n // Prefer the next fragment if it's within tolerance\n if (fragNext && ((!fragPrevious || fragPrevious.level === fragNext.level) && fragmentWithinToleranceTest(bufferEnd, maxFragLookUpTolerance, fragNext) === 0 || fragmentWithinFastStartSwitch(fragNext, fragPrevious, Math.min(nextFragLookupTolerance, maxFragLookUpTolerance)))) {\n return fragNext;\n }\n // We might be seeking past the tolerance so find the best match\n const foundFragment = BinarySearch.search(fragments, fragmentWithinToleranceTest.bind(null, bufferEnd, maxFragLookUpTolerance));\n if (foundFragment && (foundFragment !== fragPrevious || !fragNext)) {\n return foundFragment;\n }\n // If no match was found return the next fragment after fragPrevious, or null\n return fragNext;\n}\nfunction fragmentWithinFastStartSwitch(fragNext, fragPrevious, nextFragLookupTolerance) {\n if (fragPrevious && fragPrevious.start === 0 && fragPrevious.level < fragNext.level && (fragPrevious.endPTS || 0) > 0) {\n const firstDuration = fragPrevious.tagList.reduce((duration, tag) => {\n if (tag[0] === 'INF') {\n duration += parseFloat(tag[1]);\n }\n return duration;\n }, nextFragLookupTolerance);\n return fragNext.start <= firstDuration;\n }\n return false;\n}\n\n/**\n * The test function used by the findFragmentBySn's BinarySearch to look for the best match to the current buffer conditions.\n * @param candidate - The fragment to test\n * @param bufferEnd - The end of the current buffered range the playhead is currently within\n * @param maxFragLookUpTolerance - The amount of time that a fragment's start can be within in order to be considered contiguous\n * @returns 0 if it matches, 1 if too low, -1 if too high\n */\nfunction fragmentWithinToleranceTest(bufferEnd = 0, maxFragLookUpTolerance = 0, candidate) {\n // eagerly accept an accurate match (no tolerance)\n if (candidate.start <= bufferEnd && candidate.start + candidate.duration > bufferEnd) {\n return 0;\n }\n // offset should be within fragment boundary - config.maxFragLookUpTolerance\n // this is to cope with situations like\n // bufferEnd = 9.991\n // frag[Ø] : [0,10]\n // frag[1] : [10,20]\n // bufferEnd is within frag[0] range ... although what we are expecting is to return frag[1] here\n // frag start frag start+duration\n // |-----------------------------|\n // <---> <--->\n // ...--------><-----------------------------><---------....\n // previous frag matching fragment next frag\n // return -1 return 0 return 1\n // logger.log(`level/sn/start/end/bufEnd:${level}/${candidate.sn}/${candidate.start}/${(candidate.start+candidate.duration)}/${bufferEnd}`);\n // Set the lookup tolerance to be small enough to detect the current segment - ensures we don't skip over very small segments\n const candidateLookupTolerance = Math.min(maxFragLookUpTolerance, candidate.duration + (candidate.deltaPTS ? candidate.deltaPTS : 0));\n if (candidate.start + candidate.duration - candidateLookupTolerance <= bufferEnd) {\n return 1;\n } else if (candidate.start - candidateLookupTolerance > bufferEnd && candidate.start) {\n // if maxFragLookUpTolerance will have negative value then don't return -1 for first element\n return -1;\n }\n return 0;\n}\n\n/**\n * The test function used by the findFragmentByPdt's BinarySearch to look for the best match to the current buffer conditions.\n * This function tests the candidate's program date time values, as represented in Unix time\n * @param candidate - The fragment to test\n * @param pdtBufferEnd - The Unix time representing the end of the current buffered range\n * @param maxFragLookUpTolerance - The amount of time that a fragment's start can be within in order to be considered contiguous\n * @returns true if contiguous, false otherwise\n */\nfunction pdtWithinToleranceTest(pdtBufferEnd, maxFragLookUpTolerance, candidate) {\n const candidateLookupTolerance = Math.min(maxFragLookUpTolerance, candidate.duration + (candidate.deltaPTS ? candidate.deltaPTS : 0)) * 1000;\n\n // endProgramDateTime can be null, default to zero\n const endProgramDateTime = candidate.endProgramDateTime || 0;\n return endProgramDateTime - candidateLookupTolerance > pdtBufferEnd;\n}\nfunction findNearestWithCC(details, cc, pos) {\n if (details) {\n if (details.startCC <= cc && details.endCC >= cc) {\n let fragments = details.fragments;\n const {\n fragmentHint\n } = details;\n if (fragmentHint) {\n fragments = fragments.concat(fragmentHint);\n }\n let closest;\n BinarySearch.search(fragments, candidate => {\n if (candidate.cc < cc) {\n return 1;\n }\n if (candidate.cc > cc) {\n return -1;\n }\n closest = candidate;\n if (candidate.end <= pos) {\n return 1;\n }\n if (candidate.start > pos) {\n return -1;\n }\n return 0;\n });\n return closest || null;\n }\n }\n return null;\n}\n\nfunction isTimeoutError(error) {\n switch (error.details) {\n case ErrorDetails.FRAG_LOAD_TIMEOUT:\n case ErrorDetails.KEY_LOAD_TIMEOUT:\n case ErrorDetails.LEVEL_LOAD_TIMEOUT:\n case ErrorDetails.MANIFEST_LOAD_TIMEOUT:\n return true;\n }\n return false;\n}\nfunction isKeyError(error) {\n return error.details.startsWith('key');\n}\nfunction isUnusableKeyError(error) {\n return isKeyError(error) && !!error.frag && !error.frag.decryptdata;\n}\nfunction getRetryConfig(loadPolicy, error) {\n const isTimeout = isTimeoutError(error);\n return loadPolicy.default[`${isTimeout ? 'timeout' : 'error'}Retry`];\n}\nfunction getRetryDelay(retryConfig, retryCount) {\n // exponential backoff capped to max retry delay\n const backoffFactor = retryConfig.backoff === 'linear' ? 1 : Math.pow(2, retryCount);\n return Math.min(backoffFactor * retryConfig.retryDelayMs, retryConfig.maxRetryDelayMs);\n}\nfunction getLoaderConfigWithoutReties(loderConfig) {\n return _objectSpread2(_objectSpread2({}, loderConfig), {\n errorRetry: null,\n timeoutRetry: null\n });\n}\nfunction shouldRetry(retryConfig, retryCount, isTimeout, loaderResponse) {\n if (!retryConfig) {\n return false;\n }\n const httpStatus = loaderResponse == null ? void 0 : loaderResponse.code;\n const retry = retryCount < retryConfig.maxNumRetry && (retryForHttpStatus(httpStatus) || !!isTimeout);\n return retryConfig.shouldRetry ? retryConfig.shouldRetry(retryConfig, retryCount, isTimeout, loaderResponse, retry) : retry;\n}\nfunction retryForHttpStatus(httpStatus) {\n // Do not retry on status 4xx, status 0 (CORS error), or undefined (decrypt/gap/parse error)\n return offlineHttpStatus(httpStatus) || !!httpStatus && (httpStatus < 400 || httpStatus > 499);\n}\nfunction offlineHttpStatus(httpStatus) {\n return httpStatus === 0 && navigator.onLine === false;\n}\n\nvar NetworkErrorAction = {\n DoNothing: 0,\n SendEndCallback: 1,\n SendAlternateToPenaltyBox: 2,\n RemoveAlternatePermanently: 3,\n InsertDiscontinuity: 4,\n RetryRequest: 5\n};\nvar ErrorActionFlags = {\n None: 0,\n MoveAllAlternatesMatchingHost: 1,\n MoveAllAlternatesMatchingHDCP: 2,\n MoveAllAlternatesMatchingKey: 4,\n SwitchToSDR: 8\n};\nclass ErrorController extends Logger {\n constructor(hls) {\n super('error-controller', hls.logger);\n this.hls = void 0;\n this.playlistError = 0;\n this.hls = hls;\n this.registerListeners();\n }\n registerListeners() {\n const hls = this.hls;\n hls.on(Events.ERROR, this.onError, this);\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n }\n unregisterListeners() {\n const hls = this.hls;\n if (!hls) {\n return;\n }\n hls.off(Events.ERROR, this.onError, this);\n hls.off(Events.ERROR, this.onErrorOut, this);\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n }\n destroy() {\n this.unregisterListeners();\n // @ts-ignore\n this.hls = null;\n }\n startLoad(startPosition) {}\n stopLoad() {\n this.playlistError = 0;\n }\n getVariantLevelIndex(frag) {\n if ((frag == null ? void 0 : frag.type) === PlaylistLevelType.MAIN) {\n return frag.level;\n }\n return this.getVariantIndex();\n }\n getVariantIndex() {\n var _hls$loadLevelObj;\n const hls = this.hls;\n const currentLevel = hls.currentLevel;\n if ((_hls$loadLevelObj = hls.loadLevelObj) != null && _hls$loadLevelObj.details || currentLevel === -1) {\n return hls.loadLevel;\n }\n return currentLevel;\n }\n variantHasKey(level, keyInError) {\n if (level) {\n var _level$details;\n if ((_level$details = level.details) != null && _level$details.hasKey(keyInError)) {\n return true;\n }\n const audioGroupsIds = level.audioGroups;\n if (audioGroupsIds) {\n const audioTracks = this.hls.allAudioTracks.filter(track => audioGroupsIds.indexOf(track.groupId) >= 0);\n return audioTracks.some(track => {\n var _track$details;\n return (_track$details = track.details) == null ? void 0 : _track$details.hasKey(keyInError);\n });\n }\n }\n return false;\n }\n onManifestLoading() {\n this.playlistError = 0;\n }\n onLevelUpdated() {\n this.playlistError = 0;\n }\n onError(event, data) {\n var _data$frag;\n if (data.fatal) {\n return;\n }\n const hls = this.hls;\n const context = data.context;\n switch (data.details) {\n case ErrorDetails.FRAG_LOAD_ERROR:\n case ErrorDetails.FRAG_LOAD_TIMEOUT:\n case ErrorDetails.KEY_LOAD_ERROR:\n case ErrorDetails.KEY_LOAD_TIMEOUT:\n data.errorAction = this.getFragRetryOrSwitchAction(data);\n return;\n case ErrorDetails.FRAG_PARSING_ERROR:\n // ignore empty segment errors marked as gap\n if ((_data$frag = data.frag) != null && _data$frag.gap) {\n data.errorAction = createDoNothingErrorAction();\n return;\n }\n // falls through\n case ErrorDetails.FRAG_GAP:\n case ErrorDetails.FRAG_DECRYPT_ERROR:\n {\n // Switch level if possible, otherwise allow retry count to reach max error retries\n data.errorAction = this.getFragRetryOrSwitchAction(data);\n data.errorAction.action = NetworkErrorAction.SendAlternateToPenaltyBox;\n return;\n }\n case ErrorDetails.LEVEL_EMPTY_ERROR:\n case ErrorDetails.LEVEL_PARSING_ERROR:\n {\n var _data$context;\n // Only retry when empty and live\n const levelIndex = data.parent === PlaylistLevelType.MAIN ? data.level : hls.loadLevel;\n if (data.details === ErrorDetails.LEVEL_EMPTY_ERROR && !!((_data$context = data.context) != null && (_data$context = _data$context.levelDetails) != null && _data$context.live)) {\n data.errorAction = this.getPlaylistRetryOrSwitchAction(data, levelIndex);\n } else {\n // Escalate to fatal if not retrying or switching\n data.levelRetry = false;\n data.errorAction = this.getLevelSwitchAction(data, levelIndex);\n }\n }\n return;\n case ErrorDetails.LEVEL_LOAD_ERROR:\n case ErrorDetails.LEVEL_LOAD_TIMEOUT:\n if (typeof (context == null ? void 0 : context.level) === 'number') {\n data.errorAction = this.getPlaylistRetryOrSwitchAction(data, context.level);\n }\n return;\n case ErrorDetails.AUDIO_TRACK_LOAD_ERROR:\n case ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT:\n case ErrorDetails.SUBTITLE_LOAD_ERROR:\n case ErrorDetails.SUBTITLE_TRACK_LOAD_TIMEOUT:\n if (context) {\n const level = hls.loadLevelObj;\n if (level && (context.type === PlaylistContextType.AUDIO_TRACK && level.hasAudioGroup(context.groupId) || context.type === PlaylistContextType.SUBTITLE_TRACK && level.hasSubtitleGroup(context.groupId))) {\n // Perform Pathway switch or Redundant failover if possible for fastest recovery\n // otherwise allow playlist retry count to reach max error retries\n data.errorAction = this.getPlaylistRetryOrSwitchAction(data, hls.loadLevel);\n data.errorAction.action = NetworkErrorAction.SendAlternateToPenaltyBox;\n data.errorAction.flags = ErrorActionFlags.MoveAllAlternatesMatchingHost;\n return;\n }\n }\n return;\n case ErrorDetails.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED:\n {\n data.errorAction = {\n action: NetworkErrorAction.SendAlternateToPenaltyBox,\n flags: ErrorActionFlags.MoveAllAlternatesMatchingHDCP\n };\n }\n return;\n case ErrorDetails.KEY_SYSTEM_SESSION_UPDATE_FAILED:\n case ErrorDetails.KEY_SYSTEM_STATUS_INTERNAL_ERROR:\n case ErrorDetails.KEY_SYSTEM_NO_SESSION:\n {\n data.errorAction = {\n action: NetworkErrorAction.SendAlternateToPenaltyBox,\n flags: ErrorActionFlags.MoveAllAlternatesMatchingKey\n };\n }\n return;\n case ErrorDetails.BUFFER_ADD_CODEC_ERROR:\n case ErrorDetails.REMUX_ALLOC_ERROR:\n case ErrorDetails.BUFFER_APPEND_ERROR:\n // Buffer-controller can set errorAction when append errors can be ignored or resolved locally\n if (!data.errorAction) {\n var _data$level;\n data.errorAction = this.getLevelSwitchAction(data, (_data$level = data.level) != null ? _data$level : hls.loadLevel);\n }\n return;\n case ErrorDetails.INTERNAL_EXCEPTION:\n case ErrorDetails.BUFFER_APPENDING_ERROR:\n case ErrorDetails.BUFFER_FULL_ERROR:\n case ErrorDetails.LEVEL_SWITCH_ERROR:\n case ErrorDetails.BUFFER_STALLED_ERROR:\n case ErrorDetails.BUFFER_SEEK_OVER_HOLE:\n case ErrorDetails.BUFFER_NUDGE_ON_STALL:\n data.errorAction = createDoNothingErrorAction();\n return;\n }\n if (data.type === ErrorTypes.KEY_SYSTEM_ERROR) {\n // Do not retry level. Should be fatal if ErrorDetails.KEY_SYSTEM_<ERROR> not handled with early return above.\n data.levelRetry = false;\n data.errorAction = createDoNothingErrorAction();\n }\n }\n getPlaylistRetryOrSwitchAction(data, levelIndex) {\n const hls = this.hls;\n const retryConfig = getRetryConfig(hls.config.playlistLoadPolicy, data);\n const retryCount = this.playlistError++;\n const retry = shouldRetry(retryConfig, retryCount, isTimeoutError(data), data.response);\n if (retry) {\n return {\n action: NetworkErrorAction.RetryRequest,\n flags: ErrorActionFlags.None,\n retryConfig,\n retryCount\n };\n }\n const errorAction = this.getLevelSwitchAction(data, levelIndex);\n if (retryConfig) {\n errorAction.retryConfig = retryConfig;\n errorAction.retryCount = retryCount;\n }\n return errorAction;\n }\n getFragRetryOrSwitchAction(data) {\n const hls = this.hls;\n // Share fragment error count accross media options (main, audio, subs)\n // This allows for level based rendition switching when media option assets fail\n const variantLevelIndex = this.getVariantLevelIndex(data.frag);\n const level = hls.levels[variantLevelIndex];\n const {\n fragLoadPolicy,\n keyLoadPolicy\n } = hls.config;\n const retryConfig = getRetryConfig(isKeyError(data) ? keyLoadPolicy : fragLoadPolicy, data);\n const fragmentErrors = hls.levels.reduce((acc, level) => acc + level.fragmentError, 0);\n // Switch levels when out of retried or level index out of bounds\n if (level) {\n if (data.details !== ErrorDetails.FRAG_GAP) {\n level.fragmentError++;\n }\n if (!isUnusableKeyError(data)) {\n const retry = shouldRetry(retryConfig, fragmentErrors, isTimeoutError(data), data.response);\n if (retry) {\n return {\n action: NetworkErrorAction.RetryRequest,\n flags: ErrorActionFlags.None,\n retryConfig,\n retryCount: fragmentErrors\n };\n }\n }\n }\n // Reach max retry count, or Missing level reference\n // Switch to valid index\n const errorAction = this.getLevelSwitchAction(data, variantLevelIndex);\n // Add retry details to allow skipping of FRAG_PARSING_ERROR\n if (retryConfig) {\n errorAction.retryConfig = retryConfig;\n errorAction.retryCount = fragmentErrors;\n }\n return errorAction;\n }\n getLevelSwitchAction(data, levelIndex) {\n const hls = this.hls;\n if (levelIndex === null || levelIndex === undefined) {\n levelIndex = hls.loadLevel;\n }\n const level = this.hls.levels[levelIndex];\n if (level) {\n var _data$frag2, _data$context2;\n const errorDetails = data.details;\n level.loadError++;\n if (errorDetails === ErrorDetails.BUFFER_APPEND_ERROR) {\n level.fragmentError++;\n }\n // Search for next level to retry\n let nextLevel = -1;\n const {\n levels,\n loadLevel,\n minAutoLevel,\n maxAutoLevel\n } = hls;\n if (!hls.autoLevelEnabled && !hls.config.preserveManualLevelOnError) {\n hls.loadLevel = -1;\n }\n const fragErrorType = (_data$frag2 = data.frag) == null ? void 0 : _data$frag2.type;\n // Find alternate audio codec if available on audio codec error\n const isAudioCodecError = fragErrorType === PlaylistLevelType.AUDIO && errorDetails === ErrorDetails.FRAG_PARSING_ERROR || data.sourceBufferName === 'audio' && (errorDetails === ErrorDetails.BUFFER_ADD_CODEC_ERROR || errorDetails === ErrorDetails.BUFFER_APPEND_ERROR);\n const findAudioCodecAlternate = isAudioCodecError && levels.some(({\n audioCodec\n }) => level.audioCodec !== audioCodec);\n // Find alternate video codec if available on video codec error\n const isVideoCodecError = data.sourceBufferName === 'video' && (errorDetails === ErrorDetails.BUFFER_ADD_CODEC_ERROR || errorDetails === ErrorDetails.BUFFER_APPEND_ERROR);\n const findVideoCodecAlternate = isVideoCodecError && levels.some(({\n codecSet,\n audioCodec\n }) => level.codecSet !== codecSet && level.audioCodec === audioCodec);\n const {\n type: playlistErrorType,\n groupId: playlistErrorGroupId\n } = (_data$context2 = data.context) != null ? _data$context2 : {};\n for (let i = levels.length; i--;) {\n const candidate = (i + loadLevel) % levels.length;\n if (candidate !== loadLevel && candidate >= minAutoLevel && candidate <= maxAutoLevel && levels[candidate].loadError === 0) {\n var _level$audioGroups, _level$subtitleGroups;\n const levelCandidate = levels[candidate];\n // Skip level switch if GAP tag is found in next level at same position\n if (errorDetails === ErrorDetails.FRAG_GAP && fragErrorType === PlaylistLevelType.MAIN && data.frag) {\n const levelDetails = levels[candidate].details;\n if (levelDetails) {\n const fragCandidate = findFragmentByPTS(data.frag, levelDetails.fragments, data.frag.start);\n if (fragCandidate != null && fragCandidate.gap) {\n continue;\n }\n }\n } else if (playlistErrorType === PlaylistContextType.AUDIO_TRACK && levelCandidate.hasAudioGroup(playlistErrorGroupId) || playlistErrorType === PlaylistContextType.SUBTITLE_TRACK && levelCandidate.hasSubtitleGroup(playlistErrorGroupId)) {\n // For audio/subs playlist errors find another group ID or fallthrough to redundant fail-over\n continue;\n } else if (fragErrorType === PlaylistLevelType.AUDIO && (_level$audioGroups = level.audioGroups) != null && _level$audioGroups.some(groupId => levelCandidate.hasAudioGroup(groupId)) || fragErrorType === PlaylistLevelType.SUBTITLE && (_level$subtitleGroups = level.subtitleGroups) != null && _level$subtitleGroups.some(groupId => levelCandidate.hasSubtitleGroup(groupId)) || findAudioCodecAlternate && level.audioCodec === levelCandidate.audioCodec || findVideoCodecAlternate && level.codecSet === levelCandidate.codecSet || !findAudioCodecAlternate && level.codecSet !== levelCandidate.codecSet) {\n // For video/audio/subs frag errors find another group ID or fallthrough to redundant fail-over\n continue;\n }\n nextLevel = candidate;\n break;\n }\n }\n if (nextLevel > -1 && hls.loadLevel !== nextLevel) {\n data.levelRetry = true;\n this.playlistError = 0;\n return {\n action: NetworkErrorAction.SendAlternateToPenaltyBox,\n flags: ErrorActionFlags.None,\n nextAutoLevel: nextLevel\n };\n }\n }\n // No levels to switch / Manual level selection / Level not found\n // Resolve with Pathway switch, Redundant fail-over, or stay on lowest Level\n return {\n action: NetworkErrorAction.SendAlternateToPenaltyBox,\n flags: ErrorActionFlags.MoveAllAlternatesMatchingHost\n };\n }\n onErrorOut(event, data) {\n var _data$errorAction;\n switch ((_data$errorAction = data.errorAction) == null ? void 0 : _data$errorAction.action) {\n case NetworkErrorAction.DoNothing:\n break;\n case NetworkErrorAction.SendAlternateToPenaltyBox:\n this.sendAlternateToPenaltyBox(data);\n if (!data.errorAction.resolved && data.details !== ErrorDetails.FRAG_GAP) {\n data.fatal = true;\n } else if (/MediaSource readyState: ended/.test(data.error.message)) {\n this.warn(`MediaSource ended after \"${data.sourceBufferName}\" sourceBuffer append error. Attempting to recover from media error.`);\n this.hls.recoverMediaError();\n }\n break;\n case NetworkErrorAction.RetryRequest:\n // handled by stream and playlist/level controllers\n break;\n }\n if (data.fatal) {\n this.hls.stopLoad();\n return;\n }\n }\n sendAlternateToPenaltyBox(data) {\n const hls = this.hls;\n const errorAction = data.errorAction;\n if (!errorAction) {\n return;\n }\n const {\n flags\n } = errorAction;\n const nextAutoLevel = errorAction.nextAutoLevel;\n switch (flags) {\n case ErrorActionFlags.None:\n this.switchLevel(data, nextAutoLevel);\n break;\n case ErrorActionFlags.MoveAllAlternatesMatchingHDCP:\n {\n const levelIndex = this.getVariantLevelIndex(data.frag);\n const level = hls.levels[levelIndex];\n const restrictedHdcpLevel = level == null ? void 0 : level.attrs['HDCP-LEVEL'];\n errorAction.hdcpLevel = restrictedHdcpLevel;\n if (restrictedHdcpLevel === 'NONE') {\n this.warn(`HDCP policy resticted output with HDCP-LEVEL=NONE`);\n } else if (restrictedHdcpLevel) {\n hls.maxHdcpLevel = HdcpLevels[HdcpLevels.indexOf(restrictedHdcpLevel) - 1];\n errorAction.resolved = true;\n this.warn(`Restricting playback to HDCP-LEVEL of \"${hls.maxHdcpLevel}\" or lower`);\n break;\n }\n // Fallthrough when no HDCP-LEVEL attribute is found\n }\n // eslint-disable-next-line no-fallthrough\n case ErrorActionFlags.MoveAllAlternatesMatchingKey:\n {\n const levelKey = data.decryptdata;\n if (levelKey) {\n // Penalize all levels with key\n const levels = this.hls.levels;\n const levelCountWithError = levels.length;\n for (let i = levelCountWithError; i--;) {\n if (this.variantHasKey(levels[i], levelKey)) {\n var _levels$i$audioGroups, _data$frag3;\n this.log(`Banned key found in level ${i} (${levels[i].bitrate}bps) or audio group \"${(_levels$i$audioGroups = levels[i].audioGroups) == null ? void 0 : _levels$i$audioGroups.join(',')}\" (${(_data$frag3 = data.frag) == null ? void 0 : _data$frag3.type} fragment) ${arrayToHex(levelKey.keyId || [])}`);\n levels[i].fragmentError++;\n levels[i].loadError++;\n this.log(`Removing level ${i} with key error (${data.error})`);\n this.hls.removeLevel(i);\n }\n }\n const frag = data.frag;\n if (this.hls.levels.length < levelCountWithError) {\n errorAction.resolved = true;\n } else if (frag && frag.type !== PlaylistLevelType.MAIN) {\n // Ignore key error for audio track with unmatched key (main session error)\n const fragLevelKey = frag.decryptdata;\n if (fragLevelKey && !levelKey.matches(fragLevelKey)) {\n errorAction.resolved = true;\n }\n }\n }\n break;\n }\n }\n // If not resolved by previous actions try to switch to next level\n if (!errorAction.resolved) {\n this.switchLevel(data, nextAutoLevel);\n }\n }\n switchLevel(data, levelIndex) {\n if (levelIndex !== undefined && data.errorAction) {\n this.warn(`switching to level ${levelIndex} after ${data.details}`);\n this.hls.nextAutoLevel = levelIndex;\n data.errorAction.resolved = true;\n // Stream controller is responsible for this but won't switch on false start\n this.hls.nextLoadLevel = this.hls.nextAutoLevel;\n if (data.details === ErrorDetails.BUFFER_ADD_CODEC_ERROR && data.mimeType && data.sourceBufferName !== 'audiovideo') {\n const codec = getCodecsForMimeType(data.mimeType);\n const levels = this.hls.levels;\n for (let i = levels.length; i--;) {\n if (levels[i][`${data.sourceBufferName}Codec`] === codec) {\n this.log(`Removing level ${i} for ${data.details} (\"${codec}\" not supported)`);\n this.hls.removeLevel(i);\n }\n }\n }\n }\n }\n}\nfunction createDoNothingErrorAction(resolved) {\n const errorAction = {\n action: NetworkErrorAction.DoNothing,\n flags: ErrorActionFlags.None\n };\n if (resolved) {\n errorAction.resolved = true;\n }\n return errorAction;\n}\n\nvar FragmentState = {\n NOT_LOADED: \"NOT_LOADED\",\n APPENDING: \"APPENDING\",\n PARTIAL: \"PARTIAL\",\n OK: \"OK\"\n};\nclass FragmentTracker {\n constructor(hls) {\n this.activePartLists = Object.create(null);\n this.endListFragments = Object.create(null);\n this.fragments = Object.create(null);\n this.timeRanges = Object.create(null);\n this.bufferPadding = 0.2;\n this.hls = void 0;\n this.hasGaps = false;\n this.hls = hls;\n this._registerListeners();\n }\n _registerListeners() {\n const {\n hls\n } = this;\n if (hls) {\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.BUFFER_APPENDED, this.onBufferAppended, this);\n hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n hls.on(Events.FRAG_LOADED, this.onFragLoaded, this);\n }\n }\n _unregisterListeners() {\n const {\n hls\n } = this;\n if (hls) {\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.BUFFER_APPENDED, this.onBufferAppended, this);\n hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n hls.off(Events.FRAG_LOADED, this.onFragLoaded, this);\n }\n }\n destroy() {\n this._unregisterListeners();\n // @ts-ignore\n this.hls =\n // @ts-ignore\n this.fragments =\n // @ts-ignore\n this.activePartLists =\n // @ts-ignore\n this.endListFragments = this.timeRanges = null;\n }\n\n /**\n * Return a Fragment or Part with an appended range that matches the position and levelType\n * Otherwise, return null\n */\n getAppendedFrag(position, levelType) {\n const activeParts = this.activePartLists[levelType];\n if (activeParts) {\n for (let i = activeParts.length; i--;) {\n const activePart = activeParts[i];\n if (!activePart) {\n break;\n }\n if (activePart.start <= position && position <= activePart.end && activePart.loaded) {\n return activePart;\n }\n }\n }\n return this.getBufferedFrag(position, levelType);\n }\n\n /**\n * Return a buffered Fragment that matches the position and levelType.\n * A buffered Fragment is one whose loading, parsing and appending is done (completed or \"partial\" meaning aborted).\n * If not found any Fragment, return null\n */\n getBufferedFrag(position, levelType) {\n return this.getFragAtPos(position, levelType, true);\n }\n getFragAtPos(position, levelType, buffered) {\n const {\n fragments\n } = this;\n const keys = Object.keys(fragments);\n for (let i = keys.length; i--;) {\n const fragmentEntity = fragments[keys[i]];\n if ((fragmentEntity == null ? void 0 : fragmentEntity.body.type) === levelType && (!buffered || fragmentEntity.buffered)) {\n const frag = fragmentEntity.body;\n if (frag.start <= position && position <= frag.end) {\n return frag;\n }\n }\n }\n return null;\n }\n\n /**\n * Partial fragments effected by coded frame eviction will be removed\n * The browser will unload parts of the buffer to free up memory for new buffer data\n * Fragments will need to be reloaded when the buffer is freed up, removing partial fragments will allow them to reload(since there might be parts that are still playable)\n */\n detectEvictedFragments(elementaryStream, timeRange, playlistType, appendedPart, removeAppending) {\n if (this.timeRanges) {\n this.timeRanges[elementaryStream] = timeRange;\n }\n // Check if any flagged fragments have been unloaded\n // excluding anything newer than appendedPartSn\n const appendedPartSn = (appendedPart == null ? void 0 : appendedPart.fragment.sn) || -1;\n Object.keys(this.fragments).forEach(key => {\n const fragmentEntity = this.fragments[key];\n if (!fragmentEntity) {\n return;\n }\n if (appendedPartSn >= fragmentEntity.body.sn) {\n return;\n }\n if (!fragmentEntity.buffered && (!fragmentEntity.loaded || removeAppending)) {\n if (fragmentEntity.body.type === playlistType) {\n this.removeFragment(fragmentEntity.body);\n }\n return;\n }\n const esData = fragmentEntity.range[elementaryStream];\n if (!esData) {\n return;\n }\n if (esData.time.length === 0) {\n this.removeFragment(fragmentEntity.body);\n return;\n }\n esData.time.some(time => {\n const isNotBuffered = !this.isTimeBuffered(time.startPTS, time.endPTS, timeRange);\n if (isNotBuffered) {\n // Unregister partial fragment as it needs to load again to be reused\n this.removeFragment(fragmentEntity.body);\n }\n return isNotBuffered;\n });\n });\n }\n\n /**\n * Checks if the fragment passed in is loaded in the buffer properly\n * Partially loaded fragments will be registered as a partial fragment\n */\n detectPartialFragments(data) {\n const timeRanges = this.timeRanges;\n if (!timeRanges || data.frag.sn === 'initSegment') {\n return;\n }\n const frag = data.frag;\n const fragKey = getFragmentKey(frag);\n const fragmentEntity = this.fragments[fragKey];\n if (!fragmentEntity || fragmentEntity.buffered && frag.gap) {\n return;\n }\n const isFragHint = !frag.relurl;\n Object.keys(timeRanges).forEach(elementaryStream => {\n const streamInfo = frag.elementaryStreams[elementaryStream];\n if (!streamInfo) {\n return;\n }\n const timeRange = timeRanges[elementaryStream];\n const partial = isFragHint || streamInfo.partial === true;\n fragmentEntity.range[elementaryStream] = this.getBufferedTimes(frag, data.part, partial, timeRange);\n });\n fragmentEntity.loaded = null;\n if (Object.keys(fragmentEntity.range).length) {\n this.bufferedEnd(fragmentEntity, frag);\n if (!isPartial(fragmentEntity)) {\n // Remove older fragment parts from lookup after frag is tracked as buffered\n this.removeParts(frag.sn - 1, frag.type);\n }\n } else {\n // remove fragment if nothing was appended\n this.removeFragment(fragmentEntity.body);\n }\n }\n bufferedEnd(fragmentEntity, frag) {\n fragmentEntity.buffered = true;\n const endList = fragmentEntity.body.endList = frag.endList || fragmentEntity.body.endList;\n if (endList) {\n this.endListFragments[fragmentEntity.body.type] = fragmentEntity;\n }\n }\n removeParts(snToKeep, levelType) {\n const activeParts = this.activePartLists[levelType];\n if (!activeParts) {\n return;\n }\n this.activePartLists[levelType] = filterParts(activeParts, part => part.fragment.sn >= snToKeep);\n }\n fragBuffered(frag, force) {\n const fragKey = getFragmentKey(frag);\n let fragmentEntity = this.fragments[fragKey];\n if (!fragmentEntity && force) {\n fragmentEntity = this.fragments[fragKey] = {\n body: frag,\n appendedPTS: null,\n loaded: null,\n buffered: false,\n range: Object.create(null)\n };\n if (frag.gap) {\n this.hasGaps = true;\n }\n }\n if (fragmentEntity) {\n fragmentEntity.loaded = null;\n this.bufferedEnd(fragmentEntity, frag);\n }\n }\n getBufferedTimes(fragment, part, partial, timeRange) {\n const buffered = {\n time: [],\n partial\n };\n const startPTS = fragment.start;\n const endPTS = fragment.end;\n const minEndPTS = fragment.minEndPTS || endPTS;\n const maxStartPTS = fragment.maxStartPTS || startPTS;\n for (let i = 0; i < timeRange.length; i++) {\n const startTime = timeRange.start(i) - this.bufferPadding;\n const endTime = timeRange.end(i) + this.bufferPadding;\n if (maxStartPTS >= startTime && minEndPTS <= endTime) {\n // Fragment is entirely contained in buffer\n // No need to check the other timeRange times since it's completely playable\n buffered.time.push({\n startPTS: Math.max(startPTS, timeRange.start(i)),\n endPTS: Math.min(endPTS, timeRange.end(i))\n });\n break;\n } else if (startPTS < endTime && endPTS > startTime) {\n const start = Math.max(startPTS, timeRange.start(i));\n const end = Math.min(endPTS, timeRange.end(i));\n if (end > start) {\n buffered.partial = true;\n // Check for intersection with buffer\n // Get playable sections of the fragment\n buffered.time.push({\n startPTS: start,\n endPTS: end\n });\n }\n } else if (endPTS <= startTime) {\n // No need to check the rest of the timeRange as it is in order\n break;\n }\n }\n return buffered;\n }\n\n /**\n * Gets the partial fragment for a certain time\n */\n getPartialFragment(time) {\n let bestFragment = null;\n let timePadding;\n let startTime;\n let endTime;\n let bestOverlap = 0;\n const {\n bufferPadding,\n fragments\n } = this;\n Object.keys(fragments).forEach(key => {\n const fragmentEntity = fragments[key];\n if (!fragmentEntity) {\n return;\n }\n if (isPartial(fragmentEntity)) {\n startTime = fragmentEntity.body.start - bufferPadding;\n endTime = fragmentEntity.body.end + bufferPadding;\n if (time >= startTime && time <= endTime) {\n // Use the fragment that has the most padding from start and end time\n timePadding = Math.min(time - startTime, endTime - time);\n if (bestOverlap <= timePadding) {\n bestFragment = fragmentEntity.body;\n bestOverlap = timePadding;\n }\n }\n }\n });\n return bestFragment;\n }\n isEndListAppended(type) {\n const lastFragmentEntity = this.endListFragments[type];\n return lastFragmentEntity !== undefined && (lastFragmentEntity.buffered || isPartial(lastFragmentEntity));\n }\n getState(fragment) {\n const fragKey = getFragmentKey(fragment);\n const fragmentEntity = this.fragments[fragKey];\n if (fragmentEntity) {\n if (!fragmentEntity.buffered) {\n return FragmentState.APPENDING;\n } else if (isPartial(fragmentEntity)) {\n return FragmentState.PARTIAL;\n } else {\n return FragmentState.OK;\n }\n }\n return FragmentState.NOT_LOADED;\n }\n isTimeBuffered(startPTS, endPTS, timeRange) {\n let startTime;\n let endTime;\n for (let i = 0; i < timeRange.length; i++) {\n startTime = timeRange.start(i) - this.bufferPadding;\n endTime = timeRange.end(i) + this.bufferPadding;\n if (startPTS >= startTime && endPTS <= endTime) {\n return true;\n }\n if (endPTS <= startTime) {\n // No need to check the rest of the timeRange as it is in order\n return false;\n }\n }\n return false;\n }\n onManifestLoading() {\n this.removeAllFragments();\n }\n onFragLoaded(event, data) {\n // don't track initsegment (for which sn is not a number)\n // don't track frags used for bitrateTest, they're irrelevant.\n if (data.frag.sn === 'initSegment' || data.frag.bitrateTest) {\n return;\n }\n const frag = data.frag;\n // Fragment entity `loaded` FragLoadedData is null when loading parts\n const loaded = data.part ? null : data;\n const fragKey = getFragmentKey(frag);\n this.fragments[fragKey] = {\n body: frag,\n appendedPTS: null,\n loaded,\n buffered: false,\n range: Object.create(null)\n };\n }\n onBufferAppended(event, data) {\n const {\n frag,\n part,\n timeRanges,\n type\n } = data;\n if (frag.sn === 'initSegment') {\n return;\n }\n const playlistType = frag.type;\n if (part) {\n let activeParts = this.activePartLists[playlistType];\n if (!activeParts) {\n this.activePartLists[playlistType] = activeParts = [];\n }\n activeParts.push(part);\n }\n // Store the latest timeRanges loaded in the buffer\n this.timeRanges = timeRanges;\n const timeRange = timeRanges[type];\n this.detectEvictedFragments(type, timeRange, playlistType, part);\n }\n onFragBuffered(event, data) {\n this.detectPartialFragments(data);\n }\n hasFragment(fragment) {\n const fragKey = getFragmentKey(fragment);\n return !!this.fragments[fragKey];\n }\n hasFragments(type) {\n const {\n fragments\n } = this;\n const keys = Object.keys(fragments);\n if (!type) {\n return keys.length > 0;\n }\n for (let i = keys.length; i--;) {\n const fragmentEntity = fragments[keys[i]];\n if ((fragmentEntity == null ? void 0 : fragmentEntity.body.type) === type) {\n return true;\n }\n }\n return false;\n }\n hasParts(type) {\n var _this$activePartLists;\n return !!((_this$activePartLists = this.activePartLists[type]) != null && _this$activePartLists.length);\n }\n removeFragmentsInRange(start, end, playlistType, withGapOnly, unbufferedOnly) {\n if (withGapOnly && !this.hasGaps) {\n return;\n }\n Object.keys(this.fragments).forEach(key => {\n const fragmentEntity = this.fragments[key];\n if (!fragmentEntity) {\n return;\n }\n const frag = fragmentEntity.body;\n if (frag.type !== playlistType || withGapOnly && !frag.gap) {\n return;\n }\n if (frag.start < end && frag.end > start && (fragmentEntity.buffered || unbufferedOnly)) {\n this.removeFragment(frag);\n }\n });\n }\n removeFragment(fragment) {\n const fragKey = getFragmentKey(fragment);\n fragment.clearElementaryStreamInfo();\n const activeParts = this.activePartLists[fragment.type];\n if (activeParts) {\n const snToRemove = fragment.sn;\n this.activePartLists[fragment.type] = filterParts(activeParts, part => part.fragment.sn !== snToRemove);\n }\n delete this.fragments[fragKey];\n if (fragment.endList) {\n delete this.endListFragments[fragment.type];\n }\n }\n removeAllFragments() {\n var _this$hls;\n this.fragments = Object.create(null);\n this.endListFragments = Object.create(null);\n this.activePartLists = Object.create(null);\n this.hasGaps = false;\n const partlist = (_this$hls = this.hls) == null || (_this$hls = _this$hls.latestLevelDetails) == null ? void 0 : _this$hls.partList;\n if (partlist) {\n partlist.forEach(part => part.clearElementaryStreamInfo());\n }\n }\n}\nfunction isPartial(fragmentEntity) {\n var _fragmentEntity$range, _fragmentEntity$range2, _fragmentEntity$range3;\n return fragmentEntity.buffered && !!(fragmentEntity.body.gap || (_fragmentEntity$range = fragmentEntity.range.video) != null && _fragmentEntity$range.partial || (_fragmentEntity$range2 = fragmentEntity.range.audio) != null && _fragmentEntity$range2.partial || (_fragmentEntity$range3 = fragmentEntity.range.audiovideo) != null && _fragmentEntity$range3.partial);\n}\nfunction getFragmentKey(fragment) {\n return `${fragment.type}_${fragment.level}_${fragment.sn}`;\n}\nfunction filterParts(partList, predicate) {\n return partList.filter(part => {\n const keep = predicate(part);\n if (!keep) {\n part.clearElementaryStreamInfo();\n }\n return keep;\n });\n}\n\nvar DecrypterAesMode = {\n cbc: 0,\n ctr: 1\n};\n\nclass AESCrypto {\n constructor(subtle, iv, aesMode) {\n this.subtle = void 0;\n this.aesIV = void 0;\n this.aesMode = void 0;\n this.subtle = subtle;\n this.aesIV = iv;\n this.aesMode = aesMode;\n }\n decrypt(data, key) {\n switch (this.aesMode) {\n case DecrypterAesMode.cbc:\n return this.subtle.decrypt({\n name: 'AES-CBC',\n iv: this.aesIV\n }, key, data);\n case DecrypterAesMode.ctr:\n return this.subtle.decrypt({\n name: 'AES-CTR',\n counter: this.aesIV,\n length: 64\n },\n //64 : NIST SP800-38A standard suggests that the counter should occupy half of the counter block\n key, data);\n default:\n throw new Error(`[AESCrypto] invalid aes mode ${this.aesMode}`);\n }\n }\n}\n\n// PKCS7\nfunction removePadding(array) {\n const outputBytes = array.byteLength;\n const paddingBytes = outputBytes && new DataView(array.buffer).getUint8(outputBytes - 1);\n if (paddingBytes) {\n return array.slice(0, outputBytes - paddingBytes);\n }\n return array;\n}\nclass AESDecryptor {\n constructor() {\n this.rcon = [0x0, 0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n this.subMix = [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)];\n this.invSubMix = [new Uint32Array(256), new Uint32Array(256), new Uint32Array(256), new Uint32Array(256)];\n this.sBox = new Uint32Array(256);\n this.invSBox = new Uint32Array(256);\n this.key = new Uint32Array(0);\n this.ksRows = 0;\n this.keySize = 0;\n this.keySchedule = void 0;\n this.invKeySchedule = void 0;\n this.initTable();\n }\n\n // Using view.getUint32() also swaps the byte order.\n uint8ArrayToUint32Array_(arrayBuffer) {\n const view = new DataView(arrayBuffer);\n const newArray = new Uint32Array(4);\n for (let i = 0; i < 4; i++) {\n newArray[i] = view.getUint32(i * 4);\n }\n return newArray;\n }\n initTable() {\n const sBox = this.sBox;\n const invSBox = this.invSBox;\n const subMix = this.subMix;\n const subMix0 = subMix[0];\n const subMix1 = subMix[1];\n const subMix2 = subMix[2];\n const subMix3 = subMix[3];\n const invSubMix = this.invSubMix;\n const invSubMix0 = invSubMix[0];\n const invSubMix1 = invSubMix[1];\n const invSubMix2 = invSubMix[2];\n const invSubMix3 = invSubMix[3];\n const d = new Uint32Array(256);\n let x = 0;\n let xi = 0;\n let i = 0;\n for (i = 0; i < 256; i++) {\n if (i < 128) {\n d[i] = i << 1;\n } else {\n d[i] = i << 1 ^ 0x11b;\n }\n }\n for (i = 0; i < 256; i++) {\n let sx = xi ^ xi << 1 ^ xi << 2 ^ xi << 3 ^ xi << 4;\n sx = sx >>> 8 ^ sx & 0xff ^ 0x63;\n sBox[x] = sx;\n invSBox[sx] = x;\n\n // Compute multiplication\n const x2 = d[x];\n const x4 = d[x2];\n const x8 = d[x4];\n\n // Compute sub/invSub bytes, mix columns tables\n let t = d[sx] * 0x101 ^ sx * 0x1010100;\n subMix0[x] = t << 24 | t >>> 8;\n subMix1[x] = t << 16 | t >>> 16;\n subMix2[x] = t << 8 | t >>> 24;\n subMix3[x] = t;\n\n // Compute inv sub bytes, inv mix columns tables\n t = x8 * 0x1010101 ^ x4 * 0x10001 ^ x2 * 0x101 ^ x * 0x1010100;\n invSubMix0[sx] = t << 24 | t >>> 8;\n invSubMix1[sx] = t << 16 | t >>> 16;\n invSubMix2[sx] = t << 8 | t >>> 24;\n invSubMix3[sx] = t;\n\n // Compute next counter\n if (!x) {\n x = xi = 1;\n } else {\n x = x2 ^ d[d[d[x8 ^ x2]]];\n xi ^= d[d[xi]];\n }\n }\n }\n expandKey(keyBuffer) {\n // convert keyBuffer to Uint32Array\n const key = this.uint8ArrayToUint32Array_(keyBuffer);\n let sameKey = true;\n let offset = 0;\n while (offset < key.length && sameKey) {\n sameKey = key[offset] === this.key[offset];\n offset++;\n }\n if (sameKey) {\n return;\n }\n this.key = key;\n const keySize = this.keySize = key.length;\n if (keySize !== 4 && keySize !== 6 && keySize !== 8) {\n throw new Error('Invalid aes key size=' + keySize);\n }\n const ksRows = this.ksRows = (keySize + 6 + 1) * 4;\n let ksRow;\n let invKsRow;\n const keySchedule = this.keySchedule = new Uint32Array(ksRows);\n const invKeySchedule = this.invKeySchedule = new Uint32Array(ksRows);\n const sbox = this.sBox;\n const rcon = this.rcon;\n const invSubMix = this.invSubMix;\n const invSubMix0 = invSubMix[0];\n const invSubMix1 = invSubMix[1];\n const invSubMix2 = invSubMix[2];\n const invSubMix3 = invSubMix[3];\n let prev;\n let t;\n for (ksRow = 0; ksRow < ksRows; ksRow++) {\n if (ksRow < keySize) {\n prev = keySchedule[ksRow] = key[ksRow];\n continue;\n }\n t = prev;\n if (ksRow % keySize === 0) {\n // Rot word\n t = t << 8 | t >>> 24;\n\n // Sub word\n t = sbox[t >>> 24] << 24 | sbox[t >>> 16 & 0xff] << 16 | sbox[t >>> 8 & 0xff] << 8 | sbox[t & 0xff];\n\n // Mix Rcon\n t ^= rcon[ksRow / keySize | 0] << 24;\n } else if (keySize > 6 && ksRow % keySize === 4) {\n // Sub word\n t = sbox[t >>> 24] << 24 | sbox[t >>> 16 & 0xff] << 16 | sbox[t >>> 8 & 0xff] << 8 | sbox[t & 0xff];\n }\n keySchedule[ksRow] = prev = (keySchedule[ksRow - keySize] ^ t) >>> 0;\n }\n for (invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n ksRow = ksRows - invKsRow;\n if (invKsRow & 3) {\n t = keySchedule[ksRow];\n } else {\n t = keySchedule[ksRow - 4];\n }\n if (invKsRow < 4 || ksRow <= 4) {\n invKeySchedule[invKsRow] = t;\n } else {\n invKeySchedule[invKsRow] = invSubMix0[sbox[t >>> 24]] ^ invSubMix1[sbox[t >>> 16 & 0xff]] ^ invSubMix2[sbox[t >>> 8 & 0xff]] ^ invSubMix3[sbox[t & 0xff]];\n }\n invKeySchedule[invKsRow] = invKeySchedule[invKsRow] >>> 0;\n }\n }\n\n // Adding this as a method greatly improves performance.\n networkToHostOrderSwap(word) {\n return word << 24 | (word & 0xff00) << 8 | (word & 0xff0000) >> 8 | word >>> 24;\n }\n decrypt(inputArrayBuffer, offset, aesIV) {\n const nRounds = this.keySize + 6;\n const invKeySchedule = this.invKeySchedule;\n const invSBOX = this.invSBox;\n const invSubMix = this.invSubMix;\n const invSubMix0 = invSubMix[0];\n const invSubMix1 = invSubMix[1];\n const invSubMix2 = invSubMix[2];\n const invSubMix3 = invSubMix[3];\n const initVector = this.uint8ArrayToUint32Array_(aesIV);\n let initVector0 = initVector[0];\n let initVector1 = initVector[1];\n let initVector2 = initVector[2];\n let initVector3 = initVector[3];\n const inputInt32 = new Int32Array(inputArrayBuffer);\n const outputInt32 = new Int32Array(inputInt32.length);\n let t0, t1, t2, t3;\n let s0, s1, s2, s3;\n let inputWords0, inputWords1, inputWords2, inputWords3;\n let ksRow, i;\n const swapWord = this.networkToHostOrderSwap;\n while (offset < inputInt32.length) {\n inputWords0 = swapWord(inputInt32[offset]);\n inputWords1 = swapWord(inputInt32[offset + 1]);\n inputWords2 = swapWord(inputInt32[offset + 2]);\n inputWords3 = swapWord(inputInt32[offset + 3]);\n s0 = inputWords0 ^ invKeySchedule[0];\n s1 = inputWords3 ^ invKeySchedule[1];\n s2 = inputWords2 ^ invKeySchedule[2];\n s3 = inputWords1 ^ invKeySchedule[3];\n ksRow = 4;\n\n // Iterate through the rounds of decryption\n for (i = 1; i < nRounds; i++) {\n t0 = invSubMix0[s0 >>> 24] ^ invSubMix1[s1 >> 16 & 0xff] ^ invSubMix2[s2 >> 8 & 0xff] ^ invSubMix3[s3 & 0xff] ^ invKeySchedule[ksRow];\n t1 = invSubMix0[s1 >>> 24] ^ invSubMix1[s2 >> 16 & 0xff] ^ invSubMix2[s3 >> 8 & 0xff] ^ invSubMix3[s0 & 0xff] ^ invKeySchedule[ksRow + 1];\n t2 = invSubMix0[s2 >>> 24] ^ invSubMix1[s3 >> 16 & 0xff] ^ invSubMix2[s0 >> 8 & 0xff] ^ invSubMix3[s1 & 0xff] ^ invKeySchedule[ksRow + 2];\n t3 = invSubMix0[s3 >>> 24] ^ invSubMix1[s0 >> 16 & 0xff] ^ invSubMix2[s1 >> 8 & 0xff] ^ invSubMix3[s2 & 0xff] ^ invKeySchedule[ksRow + 3];\n // Update state\n s0 = t0;\n s1 = t1;\n s2 = t2;\n s3 = t3;\n ksRow = ksRow + 4;\n }\n\n // Shift rows, sub bytes, add round key\n t0 = invSBOX[s0 >>> 24] << 24 ^ invSBOX[s1 >> 16 & 0xff] << 16 ^ invSBOX[s2 >> 8 & 0xff] << 8 ^ invSBOX[s3 & 0xff] ^ invKeySchedule[ksRow];\n t1 = invSBOX[s1 >>> 24] << 24 ^ invSBOX[s2 >> 16 & 0xff] << 16 ^ invSBOX[s3 >> 8 & 0xff] << 8 ^ invSBOX[s0 & 0xff] ^ invKeySchedule[ksRow + 1];\n t2 = invSBOX[s2 >>> 24] << 24 ^ invSBOX[s3 >> 16 & 0xff] << 16 ^ invSBOX[s0 >> 8 & 0xff] << 8 ^ invSBOX[s1 & 0xff] ^ invKeySchedule[ksRow + 2];\n t3 = invSBOX[s3 >>> 24] << 24 ^ invSBOX[s0 >> 16 & 0xff] << 16 ^ invSBOX[s1 >> 8 & 0xff] << 8 ^ invSBOX[s2 & 0xff] ^ invKeySchedule[ksRow + 3];\n\n // Write\n outputInt32[offset] = swapWord(t0 ^ initVector0);\n outputInt32[offset + 1] = swapWord(t3 ^ initVector1);\n outputInt32[offset + 2] = swapWord(t2 ^ initVector2);\n outputInt32[offset + 3] = swapWord(t1 ^ initVector3);\n\n // reset initVector to last 4 unsigned int\n initVector0 = inputWords0;\n initVector1 = inputWords1;\n initVector2 = inputWords2;\n initVector3 = inputWords3;\n offset = offset + 4;\n }\n return outputInt32.buffer;\n }\n}\n\nclass FastAESKey {\n constructor(subtle, key, aesMode) {\n this.subtle = void 0;\n this.key = void 0;\n this.aesMode = void 0;\n this.subtle = subtle;\n this.key = key;\n this.aesMode = aesMode;\n }\n expandKey() {\n const subtleAlgoName = getSubtleAlgoName(this.aesMode);\n return this.subtle.importKey('raw', this.key, {\n name: subtleAlgoName\n }, false, ['encrypt', 'decrypt']);\n }\n}\nfunction getSubtleAlgoName(aesMode) {\n switch (aesMode) {\n case DecrypterAesMode.cbc:\n return 'AES-CBC';\n case DecrypterAesMode.ctr:\n return 'AES-CTR';\n default:\n throw new Error(`[FastAESKey] invalid aes mode ${aesMode}`);\n }\n}\n\nconst CHUNK_SIZE = 16; // 16 bytes, 128 bits\n\nclass Decrypter {\n constructor(config, {\n removePKCS7Padding = true\n } = {}) {\n this.logEnabled = true;\n this.removePKCS7Padding = void 0;\n this.subtle = null;\n this.softwareDecrypter = null;\n this.key = null;\n this.fastAesKey = null;\n this.remainderData = null;\n this.currentIV = null;\n this.currentResult = null;\n this.useSoftware = void 0;\n this.enableSoftwareAES = void 0;\n this.enableSoftwareAES = config.enableSoftwareAES;\n this.removePKCS7Padding = removePKCS7Padding;\n // built in decryptor expects PKCS7 padding\n if (removePKCS7Padding) {\n try {\n const browserCrypto = self.crypto;\n if (browserCrypto) {\n this.subtle = browserCrypto.subtle || browserCrypto.webkitSubtle;\n }\n } catch (e) {\n /* no-op */\n }\n }\n this.useSoftware = !this.subtle;\n }\n destroy() {\n this.subtle = null;\n this.softwareDecrypter = null;\n this.key = null;\n this.fastAesKey = null;\n this.remainderData = null;\n this.currentIV = null;\n this.currentResult = null;\n }\n isSync() {\n return this.useSoftware;\n }\n flush() {\n const {\n currentResult,\n remainderData\n } = this;\n if (!currentResult || remainderData) {\n this.reset();\n return null;\n }\n const data = new Uint8Array(currentResult);\n this.reset();\n if (this.removePKCS7Padding) {\n return removePadding(data);\n }\n return data;\n }\n reset() {\n this.currentResult = null;\n this.currentIV = null;\n this.remainderData = null;\n if (this.softwareDecrypter) {\n this.softwareDecrypter = null;\n }\n }\n decrypt(data, key, iv, aesMode) {\n if (this.useSoftware) {\n return new Promise((resolve, reject) => {\n const dataView = ArrayBuffer.isView(data) ? data : new Uint8Array(data);\n this.softwareDecrypt(dataView, key, iv, aesMode);\n const decryptResult = this.flush();\n if (decryptResult) {\n resolve(decryptResult.buffer);\n } else {\n reject(new Error('[softwareDecrypt] Failed to decrypt data'));\n }\n });\n }\n return this.webCryptoDecrypt(new Uint8Array(data), key, iv, aesMode);\n }\n\n // Software decryption is progressive. Progressive decryption may not return a result on each call. Any cached\n // data is handled in the flush() call\n softwareDecrypt(data, key, iv, aesMode) {\n const {\n currentIV,\n currentResult,\n remainderData\n } = this;\n if (aesMode !== DecrypterAesMode.cbc || key.byteLength !== 16) {\n logger.warn('SoftwareDecrypt: can only handle AES-128-CBC');\n return null;\n }\n this.logOnce('JS AES decrypt');\n // The output is staggered during progressive parsing - the current result is cached, and emitted on the next call\n // This is done in order to strip PKCS7 padding, which is found at the end of each segment. We only know we've reached\n // the end on flush(), but by that time we have already received all bytes for the segment.\n // Progressive decryption does not work with WebCrypto\n\n if (remainderData) {\n data = appendUint8Array(remainderData, data);\n this.remainderData = null;\n }\n\n // Byte length must be a multiple of 16 (AES-128 = 128 bit blocks = 16 bytes)\n const currentChunk = this.getValidChunk(data);\n if (!currentChunk.length) {\n return null;\n }\n if (currentIV) {\n iv = currentIV;\n }\n let softwareDecrypter = this.softwareDecrypter;\n if (!softwareDecrypter) {\n softwareDecrypter = this.softwareDecrypter = new AESDecryptor();\n }\n softwareDecrypter.expandKey(key);\n const result = currentResult;\n this.currentResult = softwareDecrypter.decrypt(currentChunk.buffer, 0, iv);\n this.currentIV = currentChunk.slice(-16).buffer;\n if (!result) {\n return null;\n }\n return result;\n }\n webCryptoDecrypt(data, key, iv, aesMode) {\n if (this.key !== key || !this.fastAesKey) {\n if (!this.subtle) {\n return Promise.resolve(this.onWebCryptoError(data, key, iv, aesMode));\n }\n this.key = key;\n this.fastAesKey = new FastAESKey(this.subtle, key, aesMode);\n }\n return this.fastAesKey.expandKey().then(aesKey => {\n // decrypt using web crypto\n if (!this.subtle) {\n return Promise.reject(new Error('web crypto not initialized'));\n }\n this.logOnce('WebCrypto AES decrypt');\n const crypto = new AESCrypto(this.subtle, new Uint8Array(iv), aesMode);\n return crypto.decrypt(data.buffer, aesKey);\n }).catch(err => {\n logger.warn(`[decrypter]: WebCrypto Error, disable WebCrypto API, ${err.name}: ${err.message}`);\n return this.onWebCryptoError(data, key, iv, aesMode);\n });\n }\n onWebCryptoError(data, key, iv, aesMode) {\n const enableSoftwareAES = this.enableSoftwareAES;\n if (enableSoftwareAES) {\n this.useSoftware = true;\n this.logEnabled = true;\n this.softwareDecrypt(data, key, iv, aesMode);\n const decryptResult = this.flush();\n if (decryptResult) {\n return decryptResult.buffer;\n }\n }\n throw new Error('WebCrypto' + (enableSoftwareAES ? ' and softwareDecrypt' : '') + ': failed to decrypt data');\n }\n getValidChunk(data) {\n let currentChunk = data;\n const splitPoint = data.length - data.length % CHUNK_SIZE;\n if (splitPoint !== data.length) {\n currentChunk = data.slice(0, splitPoint);\n this.remainderData = data.slice(splitPoint);\n }\n return currentChunk;\n }\n logOnce(msg) {\n if (!this.logEnabled) {\n return;\n }\n logger.log(`[decrypter]: ${msg}`);\n this.logEnabled = false;\n }\n}\n\nconst MIN_CHUNK_SIZE = Math.pow(2, 17); // 128kb\n\nclass FragmentLoader {\n constructor(config) {\n this.config = void 0;\n this.loader = null;\n this.partLoadTimeout = -1;\n this.config = config;\n }\n destroy() {\n if (this.loader) {\n this.loader.destroy();\n this.loader = null;\n }\n }\n abort() {\n if (this.loader) {\n // Abort the loader for current fragment. Only one may load at any given time\n this.loader.abort();\n }\n }\n load(frag, onProgress) {\n const url = frag.url;\n if (!url) {\n return Promise.reject(new LoadError({\n type: ErrorTypes.NETWORK_ERROR,\n details: ErrorDetails.FRAG_LOAD_ERROR,\n fatal: false,\n frag,\n error: new Error(`Fragment does not have a ${url ? 'part list' : 'url'}`),\n networkDetails: null\n }));\n }\n this.abort();\n const config = this.config;\n const FragmentILoader = config.fLoader;\n const DefaultILoader = config.loader;\n return new Promise((resolve, reject) => {\n if (this.loader) {\n this.loader.destroy();\n }\n if (frag.gap) {\n if (frag.tagList.some(tags => tags[0] === 'GAP')) {\n reject(createGapLoadError(frag));\n return;\n } else {\n // Reset temporary treatment as GAP tag\n frag.gap = false;\n }\n }\n const loader = this.loader = FragmentILoader ? new FragmentILoader(config) : new DefaultILoader(config);\n const loaderContext = createLoaderContext(frag);\n frag.loader = loader;\n const loadPolicy = getLoaderConfigWithoutReties(config.fragLoadPolicy.default);\n const loaderConfig = {\n loadPolicy,\n timeout: loadPolicy.maxLoadTimeMs,\n maxRetry: 0,\n retryDelay: 0,\n maxRetryDelay: 0,\n highWaterMark: frag.sn === 'initSegment' ? Infinity : MIN_CHUNK_SIZE\n };\n // Assign frag stats to the loader's stats reference\n frag.stats = loader.stats;\n const callbacks = {\n onSuccess: (response, stats, context, networkDetails) => {\n this.resetLoader(frag, loader);\n let payload = response.data;\n if (context.resetIV && frag.decryptdata) {\n frag.decryptdata.iv = new Uint8Array(payload.slice(0, 16));\n payload = payload.slice(16);\n }\n resolve({\n frag,\n part: null,\n payload,\n networkDetails\n });\n },\n onError: (response, context, networkDetails, stats) => {\n this.resetLoader(frag, loader);\n reject(new LoadError({\n type: ErrorTypes.NETWORK_ERROR,\n details: ErrorDetails.FRAG_LOAD_ERROR,\n fatal: false,\n frag,\n response: _objectSpread2({\n url,\n data: undefined\n }, response),\n error: new Error(`HTTP Error ${response.code} ${response.text}`),\n networkDetails,\n stats\n }));\n },\n onAbort: (stats, context, networkDetails) => {\n this.resetLoader(frag, loader);\n reject(new LoadError({\n type: ErrorTypes.NETWORK_ERROR,\n details: ErrorDetails.INTERNAL_ABORTED,\n fatal: false,\n frag,\n error: new Error('Aborted'),\n networkDetails,\n stats\n }));\n },\n onTimeout: (stats, context, networkDetails) => {\n this.resetLoader(frag, loader);\n reject(new LoadError({\n type: ErrorTypes.NETWORK_ERROR,\n details: ErrorDetails.FRAG_LOAD_TIMEOUT,\n fatal: false,\n frag,\n error: new Error(`Timeout after ${loaderConfig.timeout}ms`),\n networkDetails,\n stats\n }));\n }\n };\n if (onProgress) {\n callbacks.onProgress = (stats, context, data, networkDetails) => onProgress({\n frag,\n part: null,\n payload: data,\n networkDetails\n });\n }\n loader.load(loaderContext, loaderConfig, callbacks);\n });\n }\n loadPart(frag, part, onProgress) {\n this.abort();\n const config = this.config;\n const FragmentILoader = config.fLoader;\n const DefaultILoader = config.loader;\n return new Promise((resolve, reject) => {\n if (this.loader) {\n this.loader.destroy();\n }\n if (frag.gap || part.gap) {\n reject(createGapLoadError(frag, part));\n return;\n }\n const loader = this.loader = FragmentILoader ? new FragmentILoader(config) : new DefaultILoader(config);\n const loaderContext = createLoaderContext(frag, part);\n frag.loader = loader;\n // Should we define another load policy for parts?\n const loadPolicy = getLoaderConfigWithoutReties(config.fragLoadPolicy.default);\n const loaderConfig = {\n loadPolicy,\n timeout: loadPolicy.maxLoadTimeMs,\n maxRetry: 0,\n retryDelay: 0,\n maxRetryDelay: 0,\n highWaterMark: MIN_CHUNK_SIZE\n };\n // Assign part stats to the loader's stats reference\n part.stats = loader.stats;\n loader.load(loaderContext, loaderConfig, {\n onSuccess: (response, stats, context, networkDetails) => {\n this.resetLoader(frag, loader);\n this.updateStatsFromPart(frag, part);\n const partLoadedData = {\n frag,\n part,\n payload: response.data,\n networkDetails\n };\n onProgress(partLoadedData);\n resolve(partLoadedData);\n },\n onError: (response, context, networkDetails, stats) => {\n this.resetLoader(frag, loader);\n reject(new LoadError({\n type: ErrorTypes.NETWORK_ERROR,\n details: ErrorDetails.FRAG_LOAD_ERROR,\n fatal: false,\n frag,\n part,\n response: _objectSpread2({\n url: loaderContext.url,\n data: undefined\n }, response),\n error: new Error(`HTTP Error ${response.code} ${response.text}`),\n networkDetails,\n stats\n }));\n },\n onAbort: (stats, context, networkDetails) => {\n frag.stats.aborted = part.stats.aborted;\n this.resetLoader(frag, loader);\n reject(new LoadError({\n type: ErrorTypes.NETWORK_ERROR,\n details: ErrorDetails.INTERNAL_ABORTED,\n fatal: false,\n frag,\n part,\n error: new Error('Aborted'),\n networkDetails,\n stats\n }));\n },\n onTimeout: (stats, context, networkDetails) => {\n this.resetLoader(frag, loader);\n reject(new LoadError({\n type: ErrorTypes.NETWORK_ERROR,\n details: ErrorDetails.FRAG_LOAD_TIMEOUT,\n fatal: false,\n frag,\n part,\n error: new Error(`Timeout after ${loaderConfig.timeout}ms`),\n networkDetails,\n stats\n }));\n }\n });\n });\n }\n updateStatsFromPart(frag, part) {\n const fragStats = frag.stats;\n const partStats = part.stats;\n const partTotal = partStats.total;\n fragStats.loaded += partStats.loaded;\n if (partTotal) {\n const estTotalParts = Math.round(frag.duration / part.duration);\n const estLoadedParts = Math.min(Math.round(fragStats.loaded / partTotal), estTotalParts);\n const estRemainingParts = estTotalParts - estLoadedParts;\n const estRemainingBytes = estRemainingParts * Math.round(fragStats.loaded / estLoadedParts);\n fragStats.total = fragStats.loaded + estRemainingBytes;\n } else {\n fragStats.total = Math.max(fragStats.loaded, fragStats.total);\n }\n const fragLoading = fragStats.loading;\n const partLoading = partStats.loading;\n if (fragLoading.start) {\n // add to fragment loader latency\n fragLoading.first += partLoading.first - partLoading.start;\n } else {\n fragLoading.start = partLoading.start;\n fragLoading.first = partLoading.first;\n }\n fragLoading.end = partLoading.end;\n }\n resetLoader(frag, loader) {\n frag.loader = null;\n if (this.loader === loader) {\n self.clearTimeout(this.partLoadTimeout);\n this.loader = null;\n }\n loader.destroy();\n }\n}\nfunction createLoaderContext(frag, part = null) {\n const segment = part || frag;\n const loaderContext = {\n frag,\n part,\n responseType: 'arraybuffer',\n url: segment.url,\n headers: {},\n rangeStart: 0,\n rangeEnd: 0\n };\n const start = segment.byteRangeStartOffset;\n const end = segment.byteRangeEndOffset;\n if (isFiniteNumber(start) && isFiniteNumber(end)) {\n var _frag$decryptdata;\n let byteRangeStart = start;\n let byteRangeEnd = end;\n if (frag.sn === 'initSegment' && isMethodFullSegmentAesCbc((_frag$decryptdata = frag.decryptdata) == null ? void 0 : _frag$decryptdata.method)) {\n // MAP segment encrypted with method 'AES-128' or 'AES-256' (cbc), when served with HTTP Range,\n // has the unencrypted size specified in the range.\n // Ref: https://tools.ietf.org/html/draft-pantos-hls-rfc8216bis-08#section-6.3.6\n const fragmentLen = end - start;\n if (fragmentLen % 16) {\n byteRangeEnd = end + (16 - fragmentLen % 16);\n }\n if (start !== 0) {\n loaderContext.resetIV = true;\n byteRangeStart = start - 16;\n }\n }\n loaderContext.rangeStart = byteRangeStart;\n loaderContext.rangeEnd = byteRangeEnd;\n }\n return loaderContext;\n}\nfunction createGapLoadError(frag, part) {\n const error = new Error(`GAP ${frag.gap ? 'tag' : 'attribute'} found`);\n const errorData = {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.FRAG_GAP,\n fatal: false,\n frag,\n error,\n networkDetails: null\n };\n if (part) {\n errorData.part = part;\n }\n (part ? part : frag).stats.aborted = true;\n return new LoadError(errorData);\n}\nfunction isMethodFullSegmentAesCbc(method) {\n return method === 'AES-128' || method === 'AES-256';\n}\nclass LoadError extends Error {\n constructor(data) {\n super(data.error.message);\n this.data = void 0;\n this.data = data;\n }\n}\n\n/**\n * @ignore\n * Sub-class specialization of EventHandler base class.\n *\n * TaskLoop allows to schedule a task function being called (optionnaly repeatedly) on the main loop,\n * scheduled asynchroneously, avoiding recursive calls in the same tick.\n *\n * The task itself is implemented in `doTick`. It can be requested and called for single execution\n * using the `tick` method.\n *\n * It will be assured that the task execution method (`tick`) only gets called once per main loop \"tick\",\n * no matter how often it gets requested for execution. Execution in further ticks will be scheduled accordingly.\n *\n * If further execution requests have already been scheduled on the next tick, it can be checked with `hasNextTick`,\n * and cancelled with `clearNextTick`.\n *\n * The task can be scheduled as an interval repeatedly with a period as parameter (see `setInterval`, `clearInterval`).\n *\n * Sub-classes need to implement the `doTick` method which will effectively have the task execution routine.\n *\n * Further explanations:\n *\n * The baseclass has a `tick` method that will schedule the doTick call. It may be called synchroneously\n * only for a stack-depth of one. On re-entrant calls, sub-sequent calls are scheduled for next main loop ticks.\n *\n * When the task execution (`tick` method) is called in re-entrant way this is detected and\n * we are limiting the task execution per call stack to exactly one, but scheduling/post-poning further\n * task processing on the next main loop iteration (also known as \"next tick\" in the Node/JS runtime lingo).\n */\nclass TaskLoop extends Logger {\n constructor(label, logger) {\n super(label, logger);\n this._boundTick = void 0;\n this._tickTimer = null;\n this._tickInterval = null;\n this._tickCallCount = 0;\n this._boundTick = this.tick.bind(this);\n }\n destroy() {\n this.onHandlerDestroying();\n this.onHandlerDestroyed();\n }\n onHandlerDestroying() {\n // clear all timers before unregistering from event bus\n this.clearNextTick();\n this.clearInterval();\n }\n onHandlerDestroyed() {}\n hasInterval() {\n return !!this._tickInterval;\n }\n hasNextTick() {\n return !!this._tickTimer;\n }\n\n /**\n * @param millis - Interval time (ms)\n * @eturns True when interval has been scheduled, false when already scheduled (no effect)\n */\n setInterval(millis) {\n if (!this._tickInterval) {\n this._tickCallCount = 0;\n this._tickInterval = self.setInterval(this._boundTick, millis);\n return true;\n }\n return false;\n }\n\n /**\n * @returns True when interval was cleared, false when none was set (no effect)\n */\n clearInterval() {\n if (this._tickInterval) {\n self.clearInterval(this._tickInterval);\n this._tickInterval = null;\n return true;\n }\n return false;\n }\n\n /**\n * @returns True when timeout was cleared, false when none was set (no effect)\n */\n clearNextTick() {\n if (this._tickTimer) {\n self.clearTimeout(this._tickTimer);\n this._tickTimer = null;\n return true;\n }\n return false;\n }\n\n /**\n * Will call the subclass doTick implementation in this main loop tick\n * or in the next one (via setTimeout(,0)) in case it has already been called\n * in this tick (in case this is a re-entrant call).\n */\n tick() {\n this._tickCallCount++;\n if (this._tickCallCount === 1) {\n this.doTick();\n // re-entrant call to tick from previous doTick call stack\n // -> schedule a call on the next main loop iteration to process this task processing request\n if (this._tickCallCount > 1) {\n // make sure only one timer exists at any time at max\n this.tickImmediate();\n }\n this._tickCallCount = 0;\n }\n }\n tickImmediate() {\n this.clearNextTick();\n this._tickTimer = self.setTimeout(this._boundTick, 0);\n }\n\n /**\n * For subclass to implement task logic\n * @abstract\n */\n doTick() {}\n}\n\nclass ChunkMetadata {\n constructor(level, sn, id, size = 0, part = -1, partial = false) {\n this.level = void 0;\n this.sn = void 0;\n this.part = void 0;\n this.id = void 0;\n this.size = void 0;\n this.partial = void 0;\n this.transmuxing = getNewPerformanceTiming();\n this.buffering = {\n audio: getNewPerformanceTiming(),\n video: getNewPerformanceTiming(),\n audiovideo: getNewPerformanceTiming()\n };\n this.level = level;\n this.sn = sn;\n this.id = id;\n this.size = size;\n this.part = part;\n this.partial = partial;\n }\n}\nfunction getNewPerformanceTiming() {\n return {\n start: 0,\n executeStart: 0,\n executeEnd: 0,\n end: 0\n };\n}\n\n/**\n * Provides methods dealing with buffer length retrieval for example.\n *\n * In general, a helper around HTML5 MediaElement TimeRanges gathered from `buffered` property.\n *\n * Also @see https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/buffered\n */\n\nconst noopBuffered = {\n length: 0,\n start: () => 0,\n end: () => 0\n};\nclass BufferHelper {\n /**\n * Return true if `media`'s buffered include `position`\n */\n static isBuffered(media, position) {\n if (media) {\n const buffered = BufferHelper.getBuffered(media);\n for (let i = buffered.length; i--;) {\n if (position >= buffered.start(i) && position <= buffered.end(i)) {\n return true;\n }\n }\n }\n return false;\n }\n static bufferedRanges(media) {\n if (media) {\n const timeRanges = BufferHelper.getBuffered(media);\n return BufferHelper.timeRangesToArray(timeRanges);\n }\n return [];\n }\n static timeRangesToArray(timeRanges) {\n const buffered = [];\n for (let i = 0; i < timeRanges.length; i++) {\n buffered.push({\n start: timeRanges.start(i),\n end: timeRanges.end(i)\n });\n }\n return buffered;\n }\n static bufferInfo(media, pos, maxHoleDuration) {\n if (media) {\n const buffered = BufferHelper.bufferedRanges(media);\n if (buffered.length) {\n return BufferHelper.bufferedInfo(buffered, pos, maxHoleDuration);\n }\n }\n return {\n len: 0,\n start: pos,\n end: pos,\n bufferedIndex: -1\n };\n }\n static bufferedInfo(buffered, pos, maxHoleDuration) {\n pos = Math.max(0, pos);\n // sort on buffer.start/smaller end (IE does not always return sorted buffered range)\n if (buffered.length > 1) {\n buffered.sort((a, b) => a.start - b.start || b.end - a.end);\n }\n let bufferedIndex = -1;\n let buffered2 = [];\n if (maxHoleDuration) {\n // there might be some small holes between buffer time range\n // consider that holes smaller than maxHoleDuration are irrelevant and build another\n // buffer time range representations that discards those holes\n for (let i = 0; i < buffered.length; i++) {\n if (pos >= buffered[i].start && pos <= buffered[i].end) {\n bufferedIndex = i;\n }\n const buf2len = buffered2.length;\n if (buf2len) {\n const buf2end = buffered2[buf2len - 1].end;\n // if small hole (value between 0 or maxHoleDuration ) or overlapping (negative)\n if (buffered[i].start - buf2end < maxHoleDuration) {\n // merge overlapping time ranges\n // update lastRange.end only if smaller than item.end\n // e.g. [ 1, 15] with [ 2,8] => [ 1,15] (no need to modify lastRange.end)\n // whereas [ 1, 8] with [ 2,15] => [ 1,15] ( lastRange should switch from [1,8] to [1,15])\n if (buffered[i].end > buf2end) {\n buffered2[buf2len - 1].end = buffered[i].end;\n }\n } else {\n // big hole\n buffered2.push(buffered[i]);\n }\n } else {\n // first value\n buffered2.push(buffered[i]);\n }\n }\n } else {\n buffered2 = buffered;\n }\n let bufferLen = 0;\n let nextStart;\n\n // bufferStart and bufferEnd are buffer boundaries around current playback position (pos)\n let bufferStart = pos;\n let bufferEnd = pos;\n for (let i = 0; i < buffered2.length; i++) {\n const start = buffered2[i].start;\n const end = buffered2[i].end;\n // logger.log('buf start/end:' + buffered.start(i) + '/' + buffered.end(i));\n if (bufferedIndex === -1 && pos >= start && pos <= end) {\n bufferedIndex = i;\n }\n if (pos + maxHoleDuration >= start && pos < end) {\n // play position is inside this buffer TimeRange, retrieve end of buffer position and buffer length\n bufferStart = start;\n bufferEnd = end;\n bufferLen = bufferEnd - pos;\n } else if (pos + maxHoleDuration < start) {\n nextStart = start;\n break;\n }\n }\n return {\n len: bufferLen,\n start: bufferStart || 0,\n end: bufferEnd || 0,\n nextStart,\n buffered,\n bufferedIndex\n };\n }\n\n /**\n * Safe method to get buffered property.\n * SourceBuffer.buffered may throw if SourceBuffer is removed from it's MediaSource\n */\n static getBuffered(media) {\n try {\n return media.buffered || noopBuffered;\n } catch (e) {\n logger.log('failed to get media.buffered', e);\n return noopBuffered;\n }\n }\n}\n\nconst VARIABLE_REPLACEMENT_REGEX = /\\{\\$([a-zA-Z0-9-_]+)\\}/g;\nfunction hasVariableReferences(str) {\n return VARIABLE_REPLACEMENT_REGEX.test(str);\n}\nfunction substituteVariables(parsed, value) {\n if (parsed.variableList !== null || parsed.hasVariableRefs) {\n const variableList = parsed.variableList;\n return value.replace(VARIABLE_REPLACEMENT_REGEX, variableReference => {\n const variableName = variableReference.substring(2, variableReference.length - 1);\n const variableValue = variableList == null ? void 0 : variableList[variableName];\n if (variableValue === undefined) {\n parsed.playlistParsingError || (parsed.playlistParsingError = new Error(`Missing preceding EXT-X-DEFINE tag for Variable Reference: \"${variableName}\"`));\n return variableReference;\n }\n return variableValue;\n });\n }\n return value;\n}\nfunction addVariableDefinition(parsed, attr, parentUrl) {\n let variableList = parsed.variableList;\n if (!variableList) {\n parsed.variableList = variableList = {};\n }\n let NAME;\n let VALUE;\n if ('QUERYPARAM' in attr) {\n NAME = attr.QUERYPARAM;\n try {\n const searchParams = new self.URL(parentUrl).searchParams;\n if (searchParams.has(NAME)) {\n VALUE = searchParams.get(NAME);\n } else {\n throw new Error(`\"${NAME}\" does not match any query parameter in URI: \"${parentUrl}\"`);\n }\n } catch (error) {\n parsed.playlistParsingError || (parsed.playlistParsingError = new Error(`EXT-X-DEFINE QUERYPARAM: ${error.message}`));\n }\n } else {\n NAME = attr.NAME;\n VALUE = attr.VALUE;\n }\n if (NAME in variableList) {\n parsed.playlistParsingError || (parsed.playlistParsingError = new Error(`EXT-X-DEFINE duplicate Variable Name declarations: \"${NAME}\"`));\n } else {\n variableList[NAME] = VALUE || '';\n }\n}\nfunction importVariableDefinition(parsed, attr, sourceVariableList) {\n const IMPORT = attr.IMPORT;\n if (sourceVariableList && IMPORT in sourceVariableList) {\n let variableList = parsed.variableList;\n if (!variableList) {\n parsed.variableList = variableList = {};\n }\n variableList[IMPORT] = sourceVariableList[IMPORT];\n } else {\n parsed.playlistParsingError || (parsed.playlistParsingError = new Error(`EXT-X-DEFINE IMPORT attribute not found in Multivariant Playlist: \"${IMPORT}\"`));\n }\n}\n\nconst DECIMAL_RESOLUTION_REGEX = /^(\\d+)x(\\d+)$/;\nconst ATTR_LIST_REGEX = /(.+?)=(\".*?\"|.*?)(?:,|$)/g;\n\n// adapted from https://github.com/kanongil/node-m3u8parse/blob/master/attrlist.js\nclass AttrList {\n constructor(attrs, parsed) {\n if (typeof attrs === 'string') {\n attrs = AttrList.parseAttrList(attrs, parsed);\n }\n _extends(this, attrs);\n }\n get clientAttrs() {\n return Object.keys(this).filter(attr => attr.substring(0, 2) === 'X-');\n }\n decimalInteger(attrName) {\n const intValue = parseInt(this[attrName], 10);\n if (intValue > Number.MAX_SAFE_INTEGER) {\n return Infinity;\n }\n return intValue;\n }\n hexadecimalInteger(attrName) {\n if (this[attrName]) {\n let stringValue = (this[attrName] || '0x').slice(2);\n stringValue = (stringValue.length & 1 ? '0' : '') + stringValue;\n const value = new Uint8Array(stringValue.length / 2);\n for (let i = 0; i < stringValue.length / 2; i++) {\n value[i] = parseInt(stringValue.slice(i * 2, i * 2 + 2), 16);\n }\n return value;\n }\n return null;\n }\n hexadecimalIntegerAsNumber(attrName) {\n const intValue = parseInt(this[attrName], 16);\n if (intValue > Number.MAX_SAFE_INTEGER) {\n return Infinity;\n }\n return intValue;\n }\n decimalFloatingPoint(attrName) {\n return parseFloat(this[attrName]);\n }\n optionalFloat(attrName, defaultValue) {\n const value = this[attrName];\n return value ? parseFloat(value) : defaultValue;\n }\n enumeratedString(attrName) {\n return this[attrName];\n }\n enumeratedStringList(attrName, dict) {\n const attrValue = this[attrName];\n return (attrValue ? attrValue.split(/[ ,]+/) : []).reduce((result, identifier) => {\n result[identifier.toLowerCase()] = true;\n return result;\n }, dict);\n }\n bool(attrName) {\n return this[attrName] === 'YES';\n }\n decimalResolution(attrName) {\n const res = DECIMAL_RESOLUTION_REGEX.exec(this[attrName]);\n if (res === null) {\n return undefined;\n }\n return {\n width: parseInt(res[1], 10),\n height: parseInt(res[2], 10)\n };\n }\n static parseAttrList(input, parsed) {\n let match;\n const attrs = {};\n const quote = '\"';\n ATTR_LIST_REGEX.lastIndex = 0;\n while ((match = ATTR_LIST_REGEX.exec(input)) !== null) {\n const name = match[1].trim();\n let value = match[2];\n const quotedString = value.indexOf(quote) === 0 && value.lastIndexOf(quote) === value.length - 1;\n let hexadecimalSequence = false;\n if (quotedString) {\n value = value.slice(1, -1);\n } else {\n switch (name) {\n case 'IV':\n case 'SCTE35-CMD':\n case 'SCTE35-IN':\n case 'SCTE35-OUT':\n hexadecimalSequence = true;\n }\n }\n if (parsed && (quotedString || hexadecimalSequence)) {\n {\n value = substituteVariables(parsed, value);\n }\n } else if (!hexadecimalSequence && !quotedString) {\n switch (name) {\n case 'CLOSED-CAPTIONS':\n if (value === 'NONE') {\n break;\n }\n // falls through\n case 'ALLOWED-CPC':\n case 'CLASS':\n case 'ASSOC-LANGUAGE':\n case 'AUDIO':\n case 'BYTERANGE':\n case 'CHANNELS':\n case 'CHARACTERISTICS':\n case 'CODECS':\n case 'DATA-ID':\n case 'END-DATE':\n case 'GROUP-ID':\n case 'ID':\n case 'IMPORT':\n case 'INSTREAM-ID':\n case 'KEYFORMAT':\n case 'KEYFORMATVERSIONS':\n case 'LANGUAGE':\n case 'NAME':\n case 'PATHWAY-ID':\n case 'QUERYPARAM':\n case 'RECENTLY-REMOVED-DATERANGES':\n case 'SERVER-URI':\n case 'STABLE-RENDITION-ID':\n case 'STABLE-VARIANT-ID':\n case 'START-DATE':\n case 'SUBTITLES':\n case 'SUPPLEMENTAL-CODECS':\n case 'URI':\n case 'VALUE':\n case 'VIDEO':\n case 'X-ASSET-LIST':\n case 'X-ASSET-URI':\n // Since we are not checking tag:attribute combination, just warn rather than ignoring attribute\n logger.warn(`${input}: attribute ${name} is missing quotes`);\n // continue;\n }\n }\n attrs[name] = value;\n }\n return attrs;\n }\n}\n\n// Avoid exporting const enum so that these values can be inlined\n\nconst CLASS_INTERSTITIAL = 'com.apple.hls.interstitial';\nfunction isDateRangeCueAttribute(attrName) {\n return attrName !== \"ID\" && attrName !== \"CLASS\" && attrName !== \"CUE\" && attrName !== \"START-DATE\" && attrName !== \"DURATION\" && attrName !== \"END-DATE\" && attrName !== \"END-ON-NEXT\";\n}\nfunction isSCTE35Attribute(attrName) {\n return attrName === \"SCTE35-OUT\" || attrName === \"SCTE35-IN\" || attrName === \"SCTE35-CMD\";\n}\nclass DateRange {\n constructor(dateRangeAttr, dateRangeWithSameId, tagCount = 0) {\n var _dateRangeWithSameId$;\n this.attr = void 0;\n this.tagAnchor = void 0;\n this.tagOrder = void 0;\n this._startDate = void 0;\n this._endDate = void 0;\n this._dateAtEnd = void 0;\n this._cue = void 0;\n this._badValueForSameId = void 0;\n this.tagAnchor = (dateRangeWithSameId == null ? void 0 : dateRangeWithSameId.tagAnchor) || null;\n this.tagOrder = (_dateRangeWithSameId$ = dateRangeWithSameId == null ? void 0 : dateRangeWithSameId.tagOrder) != null ? _dateRangeWithSameId$ : tagCount;\n if (dateRangeWithSameId) {\n const previousAttr = dateRangeWithSameId.attr;\n for (const key in previousAttr) {\n if (Object.prototype.hasOwnProperty.call(dateRangeAttr, key) && dateRangeAttr[key] !== previousAttr[key]) {\n logger.warn(`DATERANGE tag attribute: \"${key}\" does not match for tags with ID: \"${dateRangeAttr.ID}\"`);\n this._badValueForSameId = key;\n break;\n }\n }\n // Merge DateRange tags with the same ID\n dateRangeAttr = _extends(new AttrList({}), previousAttr, dateRangeAttr);\n }\n this.attr = dateRangeAttr;\n if (dateRangeWithSameId) {\n this._startDate = dateRangeWithSameId._startDate;\n this._cue = dateRangeWithSameId._cue;\n this._endDate = dateRangeWithSameId._endDate;\n this._dateAtEnd = dateRangeWithSameId._dateAtEnd;\n } else {\n this._startDate = new Date(dateRangeAttr[\"START-DATE\"]);\n }\n if (\"END-DATE\" in this.attr) {\n const endDate = (dateRangeWithSameId == null ? void 0 : dateRangeWithSameId.endDate) || new Date(this.attr[\"END-DATE\"]);\n if (isFiniteNumber(endDate.getTime())) {\n this._endDate = endDate;\n }\n }\n }\n get id() {\n return this.attr.ID;\n }\n get class() {\n return this.attr.CLASS;\n }\n get cue() {\n const _cue = this._cue;\n if (_cue === undefined) {\n return this._cue = this.attr.enumeratedStringList(this.attr.CUE ? 'CUE' : 'X-CUE', {\n pre: false,\n post: false,\n once: false\n });\n }\n return _cue;\n }\n get startTime() {\n const {\n tagAnchor\n } = this;\n // eslint-disable-next-line @typescript-eslint/prefer-optional-chain\n if (tagAnchor === null || tagAnchor.programDateTime === null) {\n logger.warn(`Expected tagAnchor Fragment with PDT set for DateRange \"${this.id}\": ${tagAnchor}`);\n return NaN;\n }\n return tagAnchor.start + (this.startDate.getTime() - tagAnchor.programDateTime) / 1000;\n }\n get startDate() {\n return this._startDate;\n }\n get endDate() {\n const dateAtEnd = this._endDate || this._dateAtEnd;\n if (dateAtEnd) {\n return dateAtEnd;\n }\n const duration = this.duration;\n if (duration !== null) {\n return this._dateAtEnd = new Date(this._startDate.getTime() + duration * 1000);\n }\n return null;\n }\n get duration() {\n if (\"DURATION\" in this.attr) {\n const duration = this.attr.decimalFloatingPoint(\"DURATION\");\n if (isFiniteNumber(duration)) {\n return duration;\n }\n } else if (this._endDate) {\n return (this._endDate.getTime() - this._startDate.getTime()) / 1000;\n }\n return null;\n }\n get plannedDuration() {\n if (\"PLANNED-DURATION\" in this.attr) {\n return this.attr.decimalFloatingPoint(\"PLANNED-DURATION\");\n }\n return null;\n }\n get endOnNext() {\n return this.attr.bool(\"END-ON-NEXT\");\n }\n get isInterstitial() {\n return this.class === CLASS_INTERSTITIAL;\n }\n get isValid() {\n return !!this.id && !this._badValueForSameId && isFiniteNumber(this.startDate.getTime()) && (this.duration === null || this.duration >= 0) && (!this.endOnNext || !!this.class) && (!this.attr.CUE || !this.cue.pre && !this.cue.post || this.cue.pre !== this.cue.post) && (!this.isInterstitial || 'X-ASSET-URI' in this.attr || 'X-ASSET-LIST' in this.attr);\n }\n}\n\nconst DEFAULT_TARGET_DURATION = 10;\n\n/**\n * Object representing parsed data from an HLS Media Playlist. Found in {@link hls.js#Level.details}.\n */\nclass LevelDetails {\n constructor(baseUrl) {\n this.PTSKnown = false;\n this.alignedSliding = false;\n this.averagetargetduration = void 0;\n this.endCC = 0;\n this.endSN = 0;\n this.fragments = void 0;\n this.fragmentHint = void 0;\n this.partList = null;\n this.dateRanges = void 0;\n this.dateRangeTagCount = 0;\n this.live = true;\n this.requestScheduled = -1;\n this.ageHeader = 0;\n this.advancedDateTime = void 0;\n this.updated = true;\n this.advanced = true;\n this.misses = 0;\n this.startCC = 0;\n this.startSN = 0;\n this.startTimeOffset = null;\n this.targetduration = 0;\n this.totalduration = 0;\n this.type = null;\n this.url = void 0;\n this.m3u8 = '';\n this.version = null;\n this.canBlockReload = false;\n this.canSkipUntil = 0;\n this.canSkipDateRanges = false;\n this.skippedSegments = 0;\n this.recentlyRemovedDateranges = void 0;\n this.partHoldBack = 0;\n this.holdBack = 0;\n this.partTarget = 0;\n this.preloadHint = void 0;\n this.renditionReports = void 0;\n this.tuneInGoal = 0;\n this.deltaUpdateFailed = void 0;\n this.driftStartTime = 0;\n this.driftEndTime = 0;\n this.driftStart = 0;\n this.driftEnd = 0;\n this.encryptedFragments = void 0;\n this.playlistParsingError = null;\n this.variableList = null;\n this.hasVariableRefs = false;\n this.appliedTimelineOffset = void 0;\n this.fragments = [];\n this.encryptedFragments = [];\n this.dateRanges = {};\n this.url = baseUrl;\n }\n reloaded(previous) {\n if (!previous) {\n this.advanced = true;\n this.updated = true;\n return;\n }\n const partSnDiff = this.lastPartSn - previous.lastPartSn;\n const partIndexDiff = this.lastPartIndex - previous.lastPartIndex;\n this.updated = this.endSN !== previous.endSN || !!partIndexDiff || !!partSnDiff || !this.live;\n this.advanced = this.endSN > previous.endSN || partSnDiff > 0 || partSnDiff === 0 && partIndexDiff > 0;\n if (this.updated || this.advanced) {\n this.misses = Math.floor(previous.misses * 0.6);\n } else {\n this.misses = previous.misses + 1;\n }\n }\n hasKey(levelKey) {\n return this.encryptedFragments.some(frag => {\n let decryptdata = frag.decryptdata;\n if (!decryptdata) {\n frag.setKeyFormat(levelKey.keyFormat);\n decryptdata = frag.decryptdata;\n }\n return !!decryptdata && levelKey.matches(decryptdata);\n });\n }\n get hasProgramDateTime() {\n if (this.fragments.length) {\n return isFiniteNumber(this.fragments[this.fragments.length - 1].programDateTime);\n }\n return false;\n }\n get levelTargetDuration() {\n return this.averagetargetduration || this.targetduration || DEFAULT_TARGET_DURATION;\n }\n get drift() {\n const runTime = this.driftEndTime - this.driftStartTime;\n if (runTime > 0) {\n const runDuration = this.driftEnd - this.driftStart;\n return runDuration * 1000 / runTime;\n }\n return 1;\n }\n get edge() {\n return this.partEnd || this.fragmentEnd;\n }\n get partEnd() {\n var _this$partList;\n if ((_this$partList = this.partList) != null && _this$partList.length) {\n return this.partList[this.partList.length - 1].end;\n }\n return this.fragmentEnd;\n }\n get fragmentEnd() {\n if (this.fragments.length) {\n return this.fragments[this.fragments.length - 1].end;\n }\n return 0;\n }\n get fragmentStart() {\n if (this.fragments.length) {\n return this.fragments[0].start;\n }\n return 0;\n }\n get age() {\n if (this.advancedDateTime) {\n return Math.max(Date.now() - this.advancedDateTime, 0) / 1000;\n }\n return 0;\n }\n get lastPartIndex() {\n var _this$partList2;\n if ((_this$partList2 = this.partList) != null && _this$partList2.length) {\n return this.partList[this.partList.length - 1].index;\n }\n return -1;\n }\n get maxPartIndex() {\n const partList = this.partList;\n if (partList) {\n const lastIndex = this.lastPartIndex;\n if (lastIndex !== -1) {\n for (let i = partList.length; i--;) {\n if (partList[i].index > lastIndex) {\n return partList[i].index;\n }\n }\n return lastIndex;\n }\n }\n return 0;\n }\n get lastPartSn() {\n var _this$partList3;\n if ((_this$partList3 = this.partList) != null && _this$partList3.length) {\n return this.partList[this.partList.length - 1].fragment.sn;\n }\n return this.endSN;\n }\n get expired() {\n if (this.live && this.age && this.misses < 3) {\n const playlistWindowDuration = this.partEnd - this.fragmentStart;\n return this.age > Math.max(playlistWindowDuration, this.totalduration) + this.levelTargetDuration;\n }\n return false;\n }\n}\n\nfunction arrayValuesMatch(a, b) {\n if (a.length === b.length) {\n return !a.some((value, i) => value !== b[i]);\n }\n return false;\n}\nfunction optionalArrayValuesMatch(a, b) {\n if (!a && !b) {\n return true;\n }\n if (!a || !b) {\n return false;\n }\n return arrayValuesMatch(a, b);\n}\n\nfunction isFullSegmentEncryption(method) {\n return method === 'AES-128' || method === 'AES-256' || method === 'AES-256-CTR';\n}\nfunction getAesModeFromFullSegmentMethod(method) {\n switch (method) {\n case 'AES-128':\n case 'AES-256':\n return DecrypterAesMode.cbc;\n case 'AES-256-CTR':\n return DecrypterAesMode.ctr;\n default:\n throw new Error(`invalid full segment method ${method}`);\n }\n}\n\nfunction base64Decode(base64encodedStr) {\n return Uint8Array.from(atob(base64encodedStr), c => c.charCodeAt(0));\n}\n\n// breaking up those two types in order to clarify what is happening in the decoding path.\n\n// http://stackoverflow.com/questions/8936984/uint8array-to-string-in-javascript/22373197\n// http://www.onicos.com/staff/iz/amuse/javascript/expert/utf.txt\n/* utf.js - UTF-8 <=> UTF-16 convertion\n *\n * Copyright (C) 1999 Masanao Izumo <iz@onicos.co.jp>\n * Version: 1.0\n * LastModified: Dec 25 1999\n * This library is free. You can redistribute it and/or modify it.\n */\n\nfunction strToUtf8array(str) {\n return Uint8Array.from(unescape(encodeURIComponent(str)), c => c.charCodeAt(0));\n}\n\nfunction getKeyIdBytes(str) {\n const keyIdbytes = strToUtf8array(str).subarray(0, 16);\n const paddedkeyIdbytes = new Uint8Array(16);\n paddedkeyIdbytes.set(keyIdbytes, 16 - keyIdbytes.length);\n return paddedkeyIdbytes;\n}\nfunction changeEndianness(keyId) {\n const swap = function swap(array, from, to) {\n const cur = array[from];\n array[from] = array[to];\n array[to] = cur;\n };\n swap(keyId, 0, 3);\n swap(keyId, 1, 2);\n swap(keyId, 4, 5);\n swap(keyId, 6, 7);\n}\nfunction convertDataUriToArrayBytes(uri) {\n // data:[<media type][;attribute=value][;base64],<data>\n const colonsplit = uri.split(':');\n let keydata = null;\n if (colonsplit[0] === 'data' && colonsplit.length === 2) {\n const semicolonsplit = colonsplit[1].split(';');\n const commasplit = semicolonsplit[semicolonsplit.length - 1].split(',');\n if (commasplit.length === 2) {\n const isbase64 = commasplit[0] === 'base64';\n const data = commasplit[1];\n if (isbase64) {\n semicolonsplit.splice(-1, 1); // remove from processing\n keydata = base64Decode(data);\n } else {\n keydata = getKeyIdBytes(data);\n }\n }\n }\n return keydata;\n}\n\n/** returns `undefined` is `self` is missing, e.g. in node */\nconst optionalSelf = typeof self !== 'undefined' ? self : undefined;\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Navigator/requestMediaKeySystemAccess\n */\nvar KeySystems = {\n CLEARKEY: \"org.w3.clearkey\",\n FAIRPLAY: \"com.apple.fps\",\n PLAYREADY: \"com.microsoft.playready\",\n WIDEVINE: \"com.widevine.alpha\"\n};\n\n// Playlist #EXT-X-KEY KEYFORMAT values\nvar KeySystemFormats = {\n CLEARKEY: \"org.w3.clearkey\",\n FAIRPLAY: \"com.apple.streamingkeydelivery\",\n PLAYREADY: \"com.microsoft.playready\",\n WIDEVINE: \"urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed\"\n};\nfunction keySystemFormatToKeySystemDomain(format) {\n switch (format) {\n case KeySystemFormats.FAIRPLAY:\n return KeySystems.FAIRPLAY;\n case KeySystemFormats.PLAYREADY:\n return KeySystems.PLAYREADY;\n case KeySystemFormats.WIDEVINE:\n return KeySystems.WIDEVINE;\n case KeySystemFormats.CLEARKEY:\n return KeySystems.CLEARKEY;\n }\n}\nfunction keySystemDomainToKeySystemFormat(keySystem) {\n switch (keySystem) {\n case KeySystems.FAIRPLAY:\n return KeySystemFormats.FAIRPLAY;\n case KeySystems.PLAYREADY:\n return KeySystemFormats.PLAYREADY;\n case KeySystems.WIDEVINE:\n return KeySystemFormats.WIDEVINE;\n case KeySystems.CLEARKEY:\n return KeySystemFormats.CLEARKEY;\n }\n}\nfunction getKeySystemsForConfig(config) {\n const {\n drmSystems,\n widevineLicenseUrl\n } = config;\n const keySystemsToAttempt = drmSystems ? [KeySystems.FAIRPLAY, KeySystems.WIDEVINE, KeySystems.PLAYREADY, KeySystems.CLEARKEY].filter(keySystem => !!drmSystems[keySystem]) : [];\n if (!keySystemsToAttempt[KeySystems.WIDEVINE] && widevineLicenseUrl) {\n keySystemsToAttempt.push(KeySystems.WIDEVINE);\n }\n return keySystemsToAttempt;\n}\nconst requestMediaKeySystemAccess = function (_optionalSelf$navigat) {\n if (optionalSelf != null && (_optionalSelf$navigat = optionalSelf.navigator) != null && _optionalSelf$navigat.requestMediaKeySystemAccess) {\n return self.navigator.requestMediaKeySystemAccess.bind(self.navigator);\n } else {\n return null;\n }\n}();\n\n/**\n * @see https://developer.mozilla.org/en-US/docs/Web/API/MediaKeySystemConfiguration\n */\nfunction getSupportedMediaKeySystemConfigurations(keySystem, audioCodecs, videoCodecs, drmSystemOptions) {\n let initDataTypes;\n switch (keySystem) {\n case KeySystems.FAIRPLAY:\n initDataTypes = ['cenc', 'sinf'];\n break;\n case KeySystems.WIDEVINE:\n case KeySystems.PLAYREADY:\n initDataTypes = ['cenc'];\n break;\n case KeySystems.CLEARKEY:\n initDataTypes = ['cenc', 'keyids'];\n break;\n default:\n throw new Error(`Unknown key-system: ${keySystem}`);\n }\n return createMediaKeySystemConfigurations(initDataTypes, audioCodecs, videoCodecs, drmSystemOptions);\n}\nfunction createMediaKeySystemConfigurations(initDataTypes, audioCodecs, videoCodecs, drmSystemOptions) {\n const baseConfig = {\n initDataTypes: initDataTypes,\n persistentState: drmSystemOptions.persistentState || 'optional',\n distinctiveIdentifier: drmSystemOptions.distinctiveIdentifier || 'optional',\n sessionTypes: drmSystemOptions.sessionTypes || [drmSystemOptions.sessionType || 'temporary'],\n audioCapabilities: audioCodecs.map(codec => ({\n contentType: `audio/mp4; codecs=${codec}`,\n robustness: drmSystemOptions.audioRobustness || '',\n encryptionScheme: drmSystemOptions.audioEncryptionScheme || null\n })),\n videoCapabilities: videoCodecs.map(codec => ({\n contentType: `video/mp4; codecs=${codec}`,\n robustness: drmSystemOptions.videoRobustness || '',\n encryptionScheme: drmSystemOptions.videoEncryptionScheme || null\n }))\n };\n return [baseConfig];\n}\nfunction isPersistentSessionType(drmSystemOptions) {\n var _drmSystemOptions$ses;\n return !!drmSystemOptions && (drmSystemOptions.sessionType === 'persistent-license' || !!((_drmSystemOptions$ses = drmSystemOptions.sessionTypes) != null && _drmSystemOptions$ses.some(type => type === 'persistent-license')));\n}\nfunction parsePlayReadyWRM(keyBytes) {\n const keyBytesUtf16 = new Uint16Array(keyBytes.buffer, keyBytes.byteOffset, keyBytes.byteLength / 2);\n const keyByteStr = String.fromCharCode.apply(null, Array.from(keyBytesUtf16));\n\n // Parse Playready WRMHeader XML\n const xmlKeyBytes = keyByteStr.substring(keyByteStr.indexOf('<'), keyByteStr.length);\n const parser = new DOMParser();\n const xmlDoc = parser.parseFromString(xmlKeyBytes, 'text/xml');\n const keyData = xmlDoc.getElementsByTagName('KID')[0];\n if (keyData) {\n const keyId = keyData.childNodes[0] ? keyData.childNodes[0].nodeValue : keyData.getAttribute('VALUE');\n if (keyId) {\n const keyIdArray = base64Decode(keyId).subarray(0, 16);\n // KID value in PRO is a base64-encoded little endian GUID interpretation of UUID\n // KID value in ‘tenc’ is a big endian UUID GUID interpretation of UUID\n changeEndianness(keyIdArray);\n return keyIdArray;\n }\n }\n return null;\n}\n\nlet keyUriToKeyIdMap = {};\nclass LevelKey {\n static clearKeyUriToKeyIdMap() {\n keyUriToKeyIdMap = {};\n }\n static setKeyIdForUri(uri, keyId) {\n keyUriToKeyIdMap[uri] = keyId;\n }\n static addKeyIdForUri(uri) {\n const val = Object.keys(keyUriToKeyIdMap).length % Number.MAX_SAFE_INTEGER;\n const keyId = new Uint8Array(16);\n const dv = new DataView(keyId.buffer, 12, 4); // Just set the last 4 bytes\n dv.setUint32(0, val);\n keyUriToKeyIdMap[uri] = keyId;\n return keyId;\n }\n constructor(method, uri, format, formatversions = [1], iv = null, keyId) {\n this.uri = void 0;\n this.method = void 0;\n this.keyFormat = void 0;\n this.keyFormatVersions = void 0;\n this.encrypted = void 0;\n this.isCommonEncryption = void 0;\n this.iv = null;\n this.key = null;\n this.keyId = null;\n this.pssh = null;\n this.method = method;\n this.uri = uri;\n this.keyFormat = format;\n this.keyFormatVersions = formatversions;\n this.iv = iv;\n this.encrypted = method ? method !== 'NONE' : false;\n this.isCommonEncryption = this.encrypted && !isFullSegmentEncryption(method);\n if (keyId != null && keyId.startsWith('0x')) {\n this.keyId = new Uint8Array(hexToArrayBuffer(keyId));\n }\n }\n matches(key) {\n return key.uri === this.uri && key.method === this.method && key.encrypted === this.encrypted && key.keyFormat === this.keyFormat && arrayValuesMatch(key.keyFormatVersions, this.keyFormatVersions) && optionalArrayValuesMatch(key.iv, this.iv) && optionalArrayValuesMatch(key.keyId, this.keyId);\n }\n isSupported() {\n // If it's Segment encryption or No encryption, just select that key system\n if (this.method) {\n if (isFullSegmentEncryption(this.method) || this.method === 'NONE') {\n return true;\n }\n if (this.keyFormat === 'identity') {\n // Maintain support for clear SAMPLE-AES with MPEG-3 TS\n return this.method === 'SAMPLE-AES';\n } else {\n switch (this.keyFormat) {\n case KeySystemFormats.FAIRPLAY:\n case KeySystemFormats.WIDEVINE:\n case KeySystemFormats.PLAYREADY:\n case KeySystemFormats.CLEARKEY:\n return ['SAMPLE-AES', 'SAMPLE-AES-CENC', 'SAMPLE-AES-CTR'].indexOf(this.method) !== -1;\n }\n }\n }\n return false;\n }\n getDecryptData(sn, levelKeys) {\n if (!this.encrypted || !this.uri) {\n return null;\n }\n if (isFullSegmentEncryption(this.method)) {\n let iv = this.iv;\n if (!iv) {\n if (typeof sn !== 'number') {\n // We are fetching decryption data for a initialization segment\n // If the segment was encrypted with AES-128/256\n // It must have an IV defined. We cannot substitute the Segment Number in.\n logger.warn(`missing IV for initialization segment with method=\"${this.method}\" - compliance issue`);\n\n // Explicitly set sn to resulting value from implicit conversions 'initSegment' values for IV generation.\n sn = 0;\n }\n iv = createInitializationVector(sn);\n }\n const decryptdata = new LevelKey(this.method, this.uri, 'identity', this.keyFormatVersions, iv);\n return decryptdata;\n }\n if (this.keyId) {\n // Handle case where key id is changed in KEY_LOADING event handler #7542#issuecomment-3305203929\n const assignedKeyId = keyUriToKeyIdMap[this.uri];\n if (assignedKeyId && !arrayValuesMatch(this.keyId, assignedKeyId)) {\n LevelKey.setKeyIdForUri(this.uri, this.keyId);\n }\n if (this.pssh) {\n return this;\n }\n }\n\n // Key bytes are signalled the KEYID attribute, typically only found on WideVine KEY tags\n // Initialize keyId if possible\n const keyBytes = convertDataUriToArrayBytes(this.uri);\n if (keyBytes) {\n switch (this.keyFormat) {\n case KeySystemFormats.WIDEVINE:\n // Setting `pssh` on this LevelKey/DecryptData allows HLS.js to generate a session using\n // the playlist-key before the \"encrypted\" event. (Comment out to only use \"encrypted\" path.)\n this.pssh = keyBytes;\n // In case of Widevine, if KEYID is not in the playlist, assume only two fields in the pssh KEY tag URI.\n if (!this.keyId) {\n const results = parseMultiPssh(keyBytes.buffer);\n if (results.length) {\n var _psshData$kids;\n const psshData = results[0];\n this.keyId = (_psshData$kids = psshData.kids) != null && _psshData$kids.length ? psshData.kids[0] : null;\n }\n }\n if (!this.keyId) {\n this.keyId = getKeyIdFromPlayReadyKey(levelKeys);\n }\n break;\n case KeySystemFormats.PLAYREADY:\n {\n const PlayReadyKeySystemUUID = new Uint8Array([0x9a, 0x04, 0xf0, 0x79, 0x98, 0x40, 0x42, 0x86, 0xab, 0x92, 0xe6, 0x5b, 0xe0, 0x88, 0x5f, 0x95]);\n\n // Setting `pssh` on this LevelKey/DecryptData allows HLS.js to generate a session using\n // the playlist-key before the \"encrypted\" event. (Comment out to only use \"encrypted\" path.)\n this.pssh = mp4pssh(PlayReadyKeySystemUUID, null, keyBytes);\n this.keyId = parsePlayReadyWRM(keyBytes);\n break;\n }\n default:\n {\n let keydata = keyBytes.subarray(0, 16);\n if (keydata.length !== 16) {\n const padded = new Uint8Array(16);\n padded.set(keydata, 16 - keydata.length);\n keydata = padded;\n }\n this.keyId = keydata;\n break;\n }\n }\n }\n\n // Default behavior: get keyId from other KEY tag or URI lookup\n if (!this.keyId || this.keyId.byteLength !== 16) {\n let keyId;\n keyId = getKeyIdFromWidevineKey(levelKeys);\n if (!keyId) {\n keyId = getKeyIdFromPlayReadyKey(levelKeys);\n if (!keyId) {\n keyId = keyUriToKeyIdMap[this.uri];\n }\n }\n if (keyId) {\n this.keyId = keyId;\n LevelKey.setKeyIdForUri(this.uri, keyId);\n }\n }\n return this;\n }\n}\nfunction getKeyIdFromWidevineKey(levelKeys) {\n const widevineKey = levelKeys == null ? void 0 : levelKeys[KeySystemFormats.WIDEVINE];\n if (widevineKey) {\n return widevineKey.keyId;\n }\n return null;\n}\nfunction getKeyIdFromPlayReadyKey(levelKeys) {\n const playReadyKey = levelKeys == null ? void 0 : levelKeys[KeySystemFormats.PLAYREADY];\n if (playReadyKey) {\n const playReadyKeyBytes = convertDataUriToArrayBytes(playReadyKey.uri);\n if (playReadyKeyBytes) {\n return parsePlayReadyWRM(playReadyKeyBytes);\n }\n }\n return null;\n}\nfunction createInitializationVector(segmentNumber) {\n const uint8View = new Uint8Array(16);\n for (let i = 12; i < 16; i++) {\n uint8View[i] = segmentNumber >> 8 * (15 - i) & 0xff;\n }\n return uint8View;\n}\n\nconst MASTER_PLAYLIST_REGEX = /#EXT-X-STREAM-INF:([^\\r\\n]*)(?:[\\r\\n](?:#[^\\r\\n]*)?)*([^\\r\\n]+)|#EXT-X-(SESSION-DATA|SESSION-KEY|DEFINE|CONTENT-STEERING|START):([^\\r\\n]*)[\\r\\n]+/g;\nconst MASTER_PLAYLIST_MEDIA_REGEX = /#EXT-X-MEDIA:(.*)/g;\nconst IS_MEDIA_PLAYLIST = /^#EXT(?:INF|-X-TARGETDURATION):/m; // Handle empty Media Playlist (first EXTINF not signaled, but TARGETDURATION present)\n\nconst LEVEL_PLAYLIST_REGEX_FAST = new RegExp([/#EXTINF:\\s*(\\d*(?:\\.\\d+)?)(?:,(.*)\\s+)?/.source,\n// duration (#EXTINF:<duration>,<title>), group 1 => duration, group 2 => title\n/(?!#) *(\\S[^\\r\\n]*)/.source,\n// segment URI, group 3 => the URI (note newline is not eaten)\n/#.*/.source // All other non-segment oriented tags will match with all groups empty\n].join('|'), 'g');\nconst LEVEL_PLAYLIST_REGEX_SLOW = new RegExp([/#EXT-X-(PROGRAM-DATE-TIME|BYTERANGE|DATERANGE|DEFINE|KEY|MAP|PART|PART-INF|PLAYLIST-TYPE|PRELOAD-HINT|RENDITION-REPORT|SERVER-CONTROL|SKIP|START):(.+)/.source, /#EXT-X-(BITRATE|DISCONTINUITY-SEQUENCE|MEDIA-SEQUENCE|TARGETDURATION|VERSION): *(\\d+)/.source, /#EXT-X-(DISCONTINUITY|ENDLIST|GAP|INDEPENDENT-SEGMENTS)/.source, /(#)([^:]*):(.*)/.source, /(#)(.*)(?:.*)\\r?\\n?/.source].join('|'));\nclass M3U8Parser {\n static findGroup(groups, mediaGroupId) {\n for (let i = 0; i < groups.length; i++) {\n const group = groups[i];\n if (group.id === mediaGroupId) {\n return group;\n }\n }\n }\n static resolve(url, baseUrl) {\n return urlToolkitExports.buildAbsoluteURL(baseUrl, url, {\n alwaysNormalize: true\n });\n }\n static isMediaPlaylist(str) {\n return IS_MEDIA_PLAYLIST.test(str);\n }\n static parseMasterPlaylist(string, baseurl) {\n const hasVariableRefs = hasVariableReferences(string) ;\n const parsed = {\n contentSteering: null,\n levels: [],\n playlistParsingError: null,\n sessionData: null,\n sessionKeys: null,\n startTimeOffset: null,\n variableList: null,\n hasVariableRefs\n };\n const levelsWithKnownCodecs = [];\n MASTER_PLAYLIST_REGEX.lastIndex = 0;\n if (!string.startsWith('#EXTM3U')) {\n parsed.playlistParsingError = new Error('no EXTM3U delimiter');\n return parsed;\n }\n let result;\n while ((result = MASTER_PLAYLIST_REGEX.exec(string)) != null) {\n if (result[1]) {\n var _level$unknownCodecs;\n // '#EXT-X-STREAM-INF' is found, parse level tag in group 1\n const attrs = new AttrList(result[1], parsed);\n const uri = substituteVariables(parsed, result[2]) ;\n const level = {\n attrs,\n bitrate: attrs.decimalInteger('BANDWIDTH') || attrs.decimalInteger('AVERAGE-BANDWIDTH'),\n name: attrs.NAME,\n url: M3U8Parser.resolve(uri, baseurl)\n };\n const resolution = attrs.decimalResolution('RESOLUTION');\n if (resolution) {\n level.width = resolution.width;\n level.height = resolution.height;\n }\n setCodecs(attrs.CODECS, level);\n const supplementalCodecs = attrs['SUPPLEMENTAL-CODECS'];\n if (supplementalCodecs) {\n level.supplemental = {};\n setCodecs(supplementalCodecs, level.supplemental);\n }\n if (!((_level$unknownCodecs = level.unknownCodecs) != null && _level$unknownCodecs.length)) {\n levelsWithKnownCodecs.push(level);\n }\n parsed.levels.push(level);\n } else if (result[3]) {\n const tag = result[3];\n const attributes = result[4];\n switch (tag) {\n case 'SESSION-DATA':\n {\n // #EXT-X-SESSION-DATA\n const sessionAttrs = new AttrList(attributes, parsed);\n const dataId = sessionAttrs['DATA-ID'];\n if (dataId) {\n if (parsed.sessionData === null) {\n parsed.sessionData = {};\n }\n parsed.sessionData[dataId] = sessionAttrs;\n }\n break;\n }\n case 'SESSION-KEY':\n {\n // #EXT-X-SESSION-KEY\n const sessionKey = parseKey(attributes, baseurl, parsed);\n if (sessionKey.encrypted && sessionKey.isSupported()) {\n if (parsed.sessionKeys === null) {\n parsed.sessionKeys = [];\n }\n parsed.sessionKeys.push(sessionKey);\n } else {\n logger.warn(`[Keys] Ignoring invalid EXT-X-SESSION-KEY tag: \"${attributes}\"`);\n }\n break;\n }\n case 'DEFINE':\n {\n // #EXT-X-DEFINE\n {\n const variableAttributes = new AttrList(attributes, parsed);\n addVariableDefinition(parsed, variableAttributes, baseurl);\n }\n break;\n }\n case 'CONTENT-STEERING':\n {\n // #EXT-X-CONTENT-STEERING\n const contentSteeringAttributes = new AttrList(attributes, parsed);\n parsed.contentSteering = {\n uri: M3U8Parser.resolve(contentSteeringAttributes['SERVER-URI'], baseurl),\n pathwayId: contentSteeringAttributes['PATHWAY-ID'] || '.'\n };\n break;\n }\n case 'START':\n {\n // #EXT-X-START\n parsed.startTimeOffset = parseStartTimeOffset(attributes);\n break;\n }\n }\n }\n }\n // Filter out levels with unknown codecs if it does not remove all levels\n const stripUnknownCodecLevels = levelsWithKnownCodecs.length > 0 && levelsWithKnownCodecs.length < parsed.levels.length;\n parsed.levels = stripUnknownCodecLevels ? levelsWithKnownCodecs : parsed.levels;\n if (parsed.levels.length === 0) {\n parsed.playlistParsingError = new Error('no levels found in manifest');\n }\n return parsed;\n }\n static parseMasterPlaylistMedia(string, baseurl, parsed) {\n let result;\n const results = {};\n const levels = parsed.levels;\n const groupsByType = {\n AUDIO: levels.map(level => ({\n id: level.attrs.AUDIO,\n audioCodec: level.audioCodec\n })),\n SUBTITLES: levels.map(level => ({\n id: level.attrs.SUBTITLES,\n textCodec: level.textCodec\n })),\n 'CLOSED-CAPTIONS': []\n };\n let id = 0;\n MASTER_PLAYLIST_MEDIA_REGEX.lastIndex = 0;\n while ((result = MASTER_PLAYLIST_MEDIA_REGEX.exec(string)) !== null) {\n const attrs = new AttrList(result[1], parsed);\n const type = attrs.TYPE;\n if (type) {\n const groups = groupsByType[type];\n const medias = results[type] || [];\n results[type] = medias;\n const lang = attrs.LANGUAGE;\n const assocLang = attrs['ASSOC-LANGUAGE'];\n const channels = attrs.CHANNELS;\n const characteristics = attrs.CHARACTERISTICS;\n const instreamId = attrs['INSTREAM-ID'];\n const media = {\n attrs,\n bitrate: 0,\n id: id++,\n groupId: attrs['GROUP-ID'] || '',\n name: attrs.NAME || lang || '',\n type,\n default: attrs.bool('DEFAULT'),\n autoselect: attrs.bool('AUTOSELECT'),\n forced: attrs.bool('FORCED'),\n lang,\n url: attrs.URI ? M3U8Parser.resolve(attrs.URI, baseurl) : ''\n };\n if (assocLang) {\n media.assocLang = assocLang;\n }\n if (channels) {\n media.channels = channels;\n }\n if (characteristics) {\n media.characteristics = characteristics;\n }\n if (instreamId) {\n media.instreamId = instreamId;\n }\n if (groups != null && groups.length) {\n // If there are audio or text groups signalled in the manifest, let's look for a matching codec string for this track\n // If we don't find the track signalled, lets use the first audio groups codec we have\n // Acting as a best guess\n const groupCodec = M3U8Parser.findGroup(groups, media.groupId) || groups[0];\n assignCodec(media, groupCodec, 'audioCodec');\n assignCodec(media, groupCodec, 'textCodec');\n }\n medias.push(media);\n }\n }\n return results;\n }\n static parseLevelPlaylist(string, baseurl, id, type, levelUrlId, multivariantVariableList) {\n var _LEVEL_PLAYLIST_REGEX;\n const base = {\n url: baseurl\n };\n const level = new LevelDetails(baseurl);\n const fragments = level.fragments;\n const programDateTimes = [];\n // The most recent init segment seen (applies to all subsequent segments)\n let currentInitSegment = null;\n let currentSN = 0;\n let currentPart = 0;\n let totalduration = 0;\n let discontinuityCounter = 0;\n let currentBitrate = 0;\n let prevFrag = null;\n let frag = new Fragment(type, base);\n let result;\n let i;\n let levelkeys;\n let firstPdtIndex = -1;\n let createNextFrag = false;\n let nextByteRange = null;\n let serverControlAttrs;\n LEVEL_PLAYLIST_REGEX_FAST.lastIndex = 0;\n level.m3u8 = string;\n level.hasVariableRefs = hasVariableReferences(string) ;\n if (((_LEVEL_PLAYLIST_REGEX = LEVEL_PLAYLIST_REGEX_FAST.exec(string)) == null ? void 0 : _LEVEL_PLAYLIST_REGEX[0]) !== '#EXTM3U') {\n level.playlistParsingError = new Error('Missing format identifier #EXTM3U');\n return level;\n }\n while ((result = LEVEL_PLAYLIST_REGEX_FAST.exec(string)) !== null) {\n if (createNextFrag) {\n createNextFrag = false;\n frag = new Fragment(type, base);\n // setup the next fragment for part loading\n frag.playlistOffset = totalduration;\n frag.setStart(totalduration);\n frag.sn = currentSN;\n frag.cc = discontinuityCounter;\n if (currentBitrate) {\n frag.bitrate = currentBitrate;\n }\n frag.level = id;\n if (currentInitSegment) {\n frag.initSegment = currentInitSegment;\n if (currentInitSegment.rawProgramDateTime) {\n frag.rawProgramDateTime = currentInitSegment.rawProgramDateTime;\n currentInitSegment.rawProgramDateTime = null;\n }\n if (nextByteRange) {\n frag.setByteRange(nextByteRange);\n nextByteRange = null;\n }\n }\n }\n const duration = result[1];\n if (duration) {\n // INF\n frag.duration = parseFloat(duration);\n // avoid sliced strings https://github.com/video-dev/hls.js/issues/939\n const title = (' ' + result[2]).slice(1);\n frag.title = title || null;\n frag.tagList.push(title ? ['INF', duration, title] : ['INF', duration]);\n } else if (result[3]) {\n // url\n if (isFiniteNumber(frag.duration)) {\n frag.playlistOffset = totalduration;\n frag.setStart(totalduration);\n if (levelkeys) {\n setFragLevelKeys(frag, levelkeys, level);\n }\n frag.sn = currentSN;\n frag.level = id;\n frag.cc = discontinuityCounter;\n fragments.push(frag);\n // avoid sliced strings https://github.com/video-dev/hls.js/issues/939\n const uri = (' ' + result[3]).slice(1);\n frag.relurl = substituteVariables(level, uri) ;\n assignProgramDateTime(frag, prevFrag, programDateTimes);\n prevFrag = frag;\n totalduration += frag.duration;\n currentSN++;\n currentPart = 0;\n createNextFrag = true;\n }\n } else {\n result = result[0].match(LEVEL_PLAYLIST_REGEX_SLOW);\n if (!result) {\n logger.warn('No matches on slow regex match for level playlist!');\n continue;\n }\n for (i = 1; i < result.length; i++) {\n if (result[i] !== undefined) {\n break;\n }\n }\n\n // avoid sliced strings https://github.com/video-dev/hls.js/issues/939\n const tag = (' ' + result[i]).slice(1);\n const value1 = (' ' + result[i + 1]).slice(1);\n const value2 = result[i + 2] ? (' ' + result[i + 2]).slice(1) : null;\n switch (tag) {\n case 'BYTERANGE':\n if (prevFrag) {\n frag.setByteRange(value1, prevFrag);\n } else {\n frag.setByteRange(value1);\n }\n break;\n case 'PROGRAM-DATE-TIME':\n // avoid sliced strings https://github.com/video-dev/hls.js/issues/939\n frag.rawProgramDateTime = value1;\n frag.tagList.push(['PROGRAM-DATE-TIME', value1]);\n if (firstPdtIndex === -1) {\n firstPdtIndex = fragments.length;\n }\n break;\n case 'PLAYLIST-TYPE':\n if (level.type) {\n assignMultipleMediaPlaylistTagOccuranceError(level, tag, result);\n }\n level.type = value1.toUpperCase();\n break;\n case 'MEDIA-SEQUENCE':\n if (level.startSN !== 0) {\n assignMultipleMediaPlaylistTagOccuranceError(level, tag, result);\n } else if (fragments.length > 0) {\n assignMustAppearBeforeSegmentsError(level, tag, result);\n }\n currentSN = level.startSN = parseInt(value1);\n break;\n case 'SKIP':\n {\n if (level.skippedSegments) {\n assignMultipleMediaPlaylistTagOccuranceError(level, tag, result);\n }\n const skipAttrs = new AttrList(value1, level);\n const skippedSegments = skipAttrs.decimalInteger('SKIPPED-SEGMENTS');\n if (isFiniteNumber(skippedSegments)) {\n level.skippedSegments += skippedSegments;\n // This will result in fragments[] containing undefined values, which we will fill in with `mergeDetails`\n for (let _i = skippedSegments; _i--;) {\n fragments.push(null);\n }\n currentSN += skippedSegments;\n }\n const recentlyRemovedDateranges = skipAttrs.enumeratedString('RECENTLY-REMOVED-DATERANGES');\n if (recentlyRemovedDateranges) {\n level.recentlyRemovedDateranges = (level.recentlyRemovedDateranges || []).concat(recentlyRemovedDateranges.split('\\t'));\n }\n break;\n }\n case 'TARGETDURATION':\n if (level.targetduration !== 0) {\n assignMultipleMediaPlaylistTagOccuranceError(level, tag, result);\n }\n level.targetduration = Math.max(parseInt(value1), 1);\n break;\n case 'VERSION':\n if (level.version !== null) {\n assignMultipleMediaPlaylistTagOccuranceError(level, tag, result);\n }\n level.version = parseInt(value1);\n break;\n case 'INDEPENDENT-SEGMENTS':\n break;\n case 'ENDLIST':\n if (!level.live) {\n assignMultipleMediaPlaylistTagOccuranceError(level, tag, result);\n }\n level.live = false;\n break;\n case '#':\n if (value1 || value2) {\n frag.tagList.push(value2 ? [value1, value2] : [value1]);\n }\n break;\n case 'DISCONTINUITY':\n discontinuityCounter++;\n frag.tagList.push(['DIS']);\n break;\n case 'GAP':\n frag.gap = true;\n frag.tagList.push([tag]);\n break;\n case 'BITRATE':\n frag.tagList.push([tag, value1]);\n currentBitrate = parseInt(value1) * 1000;\n if (isFiniteNumber(currentBitrate)) {\n frag.bitrate = currentBitrate;\n } else {\n currentBitrate = 0;\n }\n break;\n case 'DATERANGE':\n {\n const dateRangeAttr = new AttrList(value1, level);\n const dateRange = new DateRange(dateRangeAttr, level.dateRanges[dateRangeAttr.ID], level.dateRangeTagCount);\n level.dateRangeTagCount++;\n if (dateRange.isValid || level.skippedSegments) {\n level.dateRanges[dateRange.id] = dateRange;\n } else {\n logger.warn(`Ignoring invalid DATERANGE tag: \"${value1}\"`);\n }\n // Add to fragment tag list for backwards compatibility (< v1.2.0)\n frag.tagList.push(['EXT-X-DATERANGE', value1]);\n break;\n }\n case 'DEFINE':\n {\n {\n const variableAttributes = new AttrList(value1, level);\n if ('IMPORT' in variableAttributes) {\n importVariableDefinition(level, variableAttributes, multivariantVariableList);\n } else {\n addVariableDefinition(level, variableAttributes, baseurl);\n }\n }\n break;\n }\n case 'DISCONTINUITY-SEQUENCE':\n if (level.startCC !== 0) {\n assignMultipleMediaPlaylistTagOccuranceError(level, tag, result);\n } else if (fragments.length > 0) {\n assignMustAppearBeforeSegmentsError(level, tag, result);\n }\n level.startCC = discontinuityCounter = parseInt(value1);\n break;\n case 'KEY':\n {\n const levelKey = parseKey(value1, baseurl, level);\n if (levelKey.isSupported()) {\n if (levelKey.method === 'NONE') {\n levelkeys = undefined;\n break;\n }\n if (!levelkeys) {\n levelkeys = {};\n }\n const currentKey = levelkeys[levelKey.keyFormat];\n // Ignore duplicate playlist KEY tags\n if (!(currentKey != null && currentKey.matches(levelKey))) {\n if (currentKey) {\n levelkeys = _extends({}, levelkeys);\n }\n levelkeys[levelKey.keyFormat] = levelKey;\n }\n } else {\n logger.warn(`[Keys] Ignoring unsupported EXT-X-KEY tag: \"${value1}\"${'' }`);\n }\n break;\n }\n case 'START':\n level.startTimeOffset = parseStartTimeOffset(value1);\n break;\n case 'MAP':\n {\n const mapAttrs = new AttrList(value1, level);\n if (frag.duration) {\n // Initial segment tag is after segment duration tag.\n // #EXTINF: 6.0\n // #EXT-X-MAP:URI=\"init.mp4\n const init = new Fragment(type, base);\n setInitSegment(init, mapAttrs, id, levelkeys);\n currentInitSegment = init;\n frag.initSegment = currentInitSegment;\n if (currentInitSegment.rawProgramDateTime && !frag.rawProgramDateTime) {\n frag.rawProgramDateTime = currentInitSegment.rawProgramDateTime;\n }\n } else {\n // Initial segment tag is before segment duration tag\n // Handle case where EXT-X-MAP is declared after EXT-X-BYTERANGE\n const end = frag.byteRangeEndOffset;\n if (end) {\n const start = frag.byteRangeStartOffset;\n nextByteRange = `${end - start}@${start}`;\n } else {\n nextByteRange = null;\n }\n setInitSegment(frag, mapAttrs, id, levelkeys);\n currentInitSegment = frag;\n createNextFrag = true;\n }\n currentInitSegment.cc = discontinuityCounter;\n break;\n }\n case 'SERVER-CONTROL':\n {\n if (serverControlAttrs) {\n assignMultipleMediaPlaylistTagOccuranceError(level, tag, result);\n }\n serverControlAttrs = new AttrList(value1);\n level.canBlockReload = serverControlAttrs.bool('CAN-BLOCK-RELOAD');\n level.canSkipUntil = serverControlAttrs.optionalFloat('CAN-SKIP-UNTIL', 0);\n level.canSkipDateRanges = level.canSkipUntil > 0 && serverControlAttrs.bool('CAN-SKIP-DATERANGES');\n level.partHoldBack = serverControlAttrs.optionalFloat('PART-HOLD-BACK', 0);\n level.holdBack = serverControlAttrs.optionalFloat('HOLD-BACK', 0);\n break;\n }\n case 'PART-INF':\n {\n if (level.partTarget) {\n assignMultipleMediaPlaylistTagOccuranceError(level, tag, result);\n }\n const partInfAttrs = new AttrList(value1);\n level.partTarget = partInfAttrs.decimalFloatingPoint('PART-TARGET');\n break;\n }\n case 'PART':\n {\n let partList = level.partList;\n if (!partList) {\n partList = level.partList = [];\n }\n const previousFragmentPart = currentPart > 0 ? partList[partList.length - 1] : undefined;\n const index = currentPart++;\n const partAttrs = new AttrList(value1, level);\n const part = new Part(partAttrs, frag, base, index, previousFragmentPart);\n partList.push(part);\n frag.duration += part.duration;\n break;\n }\n case 'PRELOAD-HINT':\n {\n const preloadHintAttrs = new AttrList(value1, level);\n level.preloadHint = preloadHintAttrs;\n break;\n }\n case 'RENDITION-REPORT':\n {\n const renditionReportAttrs = new AttrList(value1, level);\n level.renditionReports = level.renditionReports || [];\n level.renditionReports.push(renditionReportAttrs);\n break;\n }\n default:\n logger.warn(`line parsed but not handled: ${result}`);\n break;\n }\n }\n }\n if (prevFrag && !prevFrag.relurl) {\n fragments.pop();\n totalduration -= prevFrag.duration;\n if (level.partList) {\n level.fragmentHint = prevFrag;\n }\n } else if (level.partList) {\n assignProgramDateTime(frag, prevFrag, programDateTimes);\n frag.cc = discontinuityCounter;\n level.fragmentHint = frag;\n if (levelkeys) {\n setFragLevelKeys(frag, levelkeys, level);\n }\n }\n if (!level.targetduration) {\n level.playlistParsingError = new Error(`Missing Target Duration`);\n }\n const fragmentLength = fragments.length;\n const firstFragment = fragments[0];\n const lastFragment = fragments[fragmentLength - 1];\n totalduration += level.skippedSegments * level.targetduration;\n if (totalduration > 0 && fragmentLength && lastFragment) {\n level.averagetargetduration = totalduration / fragmentLength;\n const lastSn = lastFragment.sn;\n level.endSN = lastSn !== 'initSegment' ? lastSn : 0;\n if (!level.live) {\n lastFragment.endList = true;\n }\n /**\n * Backfill any missing PDT values\n * \"If the first EXT-X-PROGRAM-DATE-TIME tag in a Playlist appears after\n * one or more Media Segment URIs, the client SHOULD extrapolate\n * backward from that tag (using EXTINF durations and/or media\n * timestamps) to associate dates with those segments.\"\n * We have already extrapolated forward, but all fragments up to the first instance of PDT do not have their PDTs\n * computed.\n */\n if (firstPdtIndex > 0) {\n backfillProgramDateTimes(fragments, firstPdtIndex);\n if (firstFragment) {\n programDateTimes.unshift(firstFragment);\n }\n }\n }\n if (level.fragmentHint) {\n totalduration += level.fragmentHint.duration;\n }\n level.totalduration = totalduration;\n if (programDateTimes.length && level.dateRangeTagCount && firstFragment) {\n mapDateRanges(programDateTimes, level);\n }\n level.endCC = discontinuityCounter;\n return level;\n }\n}\nfunction mapDateRanges(programDateTimes, details) {\n // Make sure DateRanges are mapped to a ProgramDateTime tag that applies a date to a segment that overlaps with its start date\n let programDateTimeCount = programDateTimes.length;\n if (!programDateTimeCount) {\n if (details.hasProgramDateTime) {\n const lastFragment = details.fragments[details.fragments.length - 1];\n programDateTimes.push(lastFragment);\n programDateTimeCount++;\n } else {\n // no segments with EXT-X-PROGRAM-DATE-TIME references in playlist history\n return;\n }\n }\n const lastProgramDateTime = programDateTimes[programDateTimeCount - 1];\n const playlistEnd = details.live ? Infinity : details.totalduration;\n const dateRangeIds = Object.keys(details.dateRanges);\n for (let i = dateRangeIds.length; i--;) {\n const dateRange = details.dateRanges[dateRangeIds[i]];\n const startDateTime = dateRange.startDate.getTime();\n dateRange.tagAnchor = lastProgramDateTime.ref;\n for (let j = programDateTimeCount; j--;) {\n var _programDateTimes$j;\n if (((_programDateTimes$j = programDateTimes[j]) == null ? void 0 : _programDateTimes$j.sn) < details.startSN) {\n break;\n }\n const fragIndex = findFragmentWithStartDate(details, startDateTime, programDateTimes, j, playlistEnd);\n if (fragIndex !== -1) {\n dateRange.tagAnchor = details.fragments[fragIndex].ref;\n break;\n }\n }\n }\n}\nfunction findFragmentWithStartDate(details, startDateTime, programDateTimes, index, endTime) {\n const pdtFragment = programDateTimes[index];\n if (pdtFragment) {\n // find matching range between PDT tags\n const pdtStart = pdtFragment.programDateTime;\n if (startDateTime >= pdtStart || index === 0) {\n var _programDateTimes;\n const durationBetweenPdt = (((_programDateTimes = programDateTimes[index + 1]) == null ? void 0 : _programDateTimes.start) || endTime) - pdtFragment.start;\n if (startDateTime <= pdtStart + durationBetweenPdt * 1000) {\n // map to fragment with date-time range\n const startIndex = programDateTimes[index].sn - details.startSN;\n if (startIndex < 0) {\n return -1;\n }\n const fragments = details.fragments;\n if (fragments.length > programDateTimes.length) {\n const endSegment = programDateTimes[index + 1] || fragments[fragments.length - 1];\n const endIndex = endSegment.sn - details.startSN;\n for (let i = endIndex; i > startIndex; i--) {\n const fragStartDateTime = fragments[i].programDateTime;\n if (startDateTime >= fragStartDateTime && startDateTime < fragStartDateTime + fragments[i].duration * 1000) {\n return i;\n }\n }\n }\n return startIndex;\n }\n }\n }\n return -1;\n}\nfunction parseKey(keyTagAttributes, baseurl, parsed) {\n var _keyAttrs$METHOD, _keyAttrs$KEYFORMAT;\n // https://tools.ietf.org/html/rfc8216#section-4.3.2.4\n const keyAttrs = new AttrList(keyTagAttributes, parsed);\n const decryptmethod = (_keyAttrs$METHOD = keyAttrs.METHOD) != null ? _keyAttrs$METHOD : '';\n const decrypturi = keyAttrs.URI;\n const decryptiv = keyAttrs.hexadecimalInteger('IV');\n const decryptkeyformatversions = keyAttrs.KEYFORMATVERSIONS;\n // From RFC: This attribute is OPTIONAL; its absence indicates an implicit value of \"identity\".\n const decryptkeyformat = (_keyAttrs$KEYFORMAT = keyAttrs.KEYFORMAT) != null ? _keyAttrs$KEYFORMAT : 'identity';\n if (decrypturi && keyAttrs.IV && !decryptiv) {\n logger.error(`Invalid IV: ${keyAttrs.IV}`);\n }\n // If decrypturi is a URI with a scheme, then baseurl will be ignored\n // No uri is allowed when METHOD is NONE\n const resolvedUri = decrypturi ? M3U8Parser.resolve(decrypturi, baseurl) : '';\n const keyFormatVersions = (decryptkeyformatversions ? decryptkeyformatversions : '1').split('/').map(Number).filter(Number.isFinite);\n return new LevelKey(decryptmethod, resolvedUri, decryptkeyformat, keyFormatVersions, decryptiv, keyAttrs.KEYID);\n}\nfunction parseStartTimeOffset(startAttributes) {\n const startAttrs = new AttrList(startAttributes);\n const startTimeOffset = startAttrs.decimalFloatingPoint('TIME-OFFSET');\n if (isFiniteNumber(startTimeOffset)) {\n return startTimeOffset;\n }\n return null;\n}\nfunction setCodecs(codecsAttributeValue, level) {\n let codecs = (codecsAttributeValue || '').split(/[ ,]+/).filter(c => c);\n ['video', 'audio', 'text'].forEach(type => {\n const filtered = codecs.filter(codec => isCodecType(codec, type));\n if (filtered.length) {\n // Comma separated list of all codecs for type\n level[`${type}Codec`] = filtered.map(c => c.split('/')[0]).join(',');\n // Remove known codecs so that only unknownCodecs are left after iterating through each type\n codecs = codecs.filter(codec => filtered.indexOf(codec) === -1);\n }\n });\n level.unknownCodecs = codecs;\n}\nfunction assignCodec(media, groupItem, codecProperty) {\n const codecValue = groupItem[codecProperty];\n if (codecValue) {\n media[codecProperty] = codecValue;\n }\n}\nfunction backfillProgramDateTimes(fragments, firstPdtIndex) {\n let fragPrev = fragments[firstPdtIndex];\n for (let i = firstPdtIndex; i--;) {\n const frag = fragments[i];\n // Exit on delta-playlist skipped segments\n if (!frag) {\n return;\n }\n frag.programDateTime = fragPrev.programDateTime - frag.duration * 1000;\n fragPrev = frag;\n }\n}\nfunction assignProgramDateTime(frag, prevFrag, programDateTimes) {\n if (frag.rawProgramDateTime) {\n programDateTimes.push(frag);\n } else if (prevFrag != null && prevFrag.programDateTime) {\n frag.programDateTime = prevFrag.endProgramDateTime;\n }\n}\nfunction setInitSegment(frag, mapAttrs, id, levelkeys) {\n frag.relurl = mapAttrs.URI;\n if (mapAttrs.BYTERANGE) {\n frag.setByteRange(mapAttrs.BYTERANGE);\n }\n frag.level = id;\n frag.sn = 'initSegment';\n if (levelkeys) {\n frag.levelkeys = levelkeys;\n }\n frag.initSegment = null;\n}\nfunction setFragLevelKeys(frag, levelkeys, level) {\n frag.levelkeys = levelkeys;\n const {\n encryptedFragments\n } = level;\n if ((!encryptedFragments.length || encryptedFragments[encryptedFragments.length - 1].levelkeys !== levelkeys) && Object.keys(levelkeys).some(format => levelkeys[format].isCommonEncryption)) {\n encryptedFragments.push(frag);\n }\n}\nfunction assignMultipleMediaPlaylistTagOccuranceError(level, tag, result) {\n level.playlistParsingError = new Error(`#EXT-X-${tag} must not appear more than once (${result[0]})`);\n}\nfunction assignMustAppearBeforeSegmentsError(level, tag, result) {\n level.playlistParsingError = new Error(`#EXT-X-${tag} must appear before the first Media Segment (${result[0]})`);\n}\n\nfunction updateFromToPTS(fragFrom, fragTo) {\n const fragToPTS = fragTo.startPTS;\n // if we know startPTS[toIdx]\n if (isFiniteNumber(fragToPTS)) {\n // update fragment duration.\n // it helps to fix drifts between playlist reported duration and fragment real duration\n let duration = 0;\n let frag;\n if (fragTo.sn > fragFrom.sn) {\n duration = fragToPTS - fragFrom.start;\n frag = fragFrom;\n } else {\n duration = fragFrom.start - fragToPTS;\n frag = fragTo;\n }\n if (frag.duration !== duration) {\n frag.setDuration(duration);\n }\n // we dont know startPTS[toIdx]\n } else if (fragTo.sn > fragFrom.sn) {\n const contiguous = fragFrom.cc === fragTo.cc;\n // TODO: With part-loading end/durations we need to confirm the whole fragment is loaded before using (or setting) minEndPTS\n if (contiguous && fragFrom.minEndPTS) {\n fragTo.setStart(fragFrom.start + (fragFrom.minEndPTS - fragFrom.start));\n } else {\n fragTo.setStart(fragFrom.start + fragFrom.duration);\n }\n } else {\n fragTo.setStart(Math.max(fragFrom.start - fragTo.duration, 0));\n }\n}\nfunction updateFragPTSDTS(details, frag, startPTS, endPTS, startDTS, endDTS, logger) {\n const parsedMediaDuration = endPTS - startPTS;\n if (parsedMediaDuration <= 0) {\n logger.warn('Fragment should have a positive duration', frag);\n endPTS = startPTS + frag.duration;\n endDTS = startDTS + frag.duration;\n }\n let maxStartPTS = startPTS;\n let minEndPTS = endPTS;\n const fragStartPts = frag.startPTS;\n const fragEndPts = frag.endPTS;\n if (isFiniteNumber(fragStartPts)) {\n // delta PTS between audio and video\n const deltaPTS = Math.abs(fragStartPts - startPTS);\n if (details && deltaPTS > details.totalduration) {\n logger.warn(`media timestamps and playlist times differ by ${deltaPTS}s for level ${frag.level} ${details.url}`);\n } else if (!isFiniteNumber(frag.deltaPTS)) {\n frag.deltaPTS = deltaPTS;\n } else {\n frag.deltaPTS = Math.max(deltaPTS, frag.deltaPTS);\n }\n maxStartPTS = Math.max(startPTS, fragStartPts);\n startPTS = Math.min(startPTS, fragStartPts);\n startDTS = frag.startDTS !== undefined ? Math.min(startDTS, frag.startDTS) : startDTS;\n minEndPTS = Math.min(endPTS, fragEndPts);\n endPTS = Math.max(endPTS, fragEndPts);\n endDTS = frag.endDTS !== undefined ? Math.max(endDTS, frag.endDTS) : endDTS;\n }\n const drift = startPTS - frag.start;\n if (frag.start !== 0) {\n frag.setStart(startPTS);\n }\n frag.setDuration(endPTS - frag.start);\n frag.startPTS = startPTS;\n frag.maxStartPTS = maxStartPTS;\n frag.startDTS = startDTS;\n frag.endPTS = endPTS;\n frag.minEndPTS = minEndPTS;\n frag.endDTS = endDTS;\n const sn = frag.sn;\n // exit if sn out of range\n if (!details || sn < details.startSN || sn > details.endSN) {\n return 0;\n }\n let i;\n const fragIdx = sn - details.startSN;\n const fragments = details.fragments;\n // update frag reference in fragments array\n // rationale is that fragments array might not contain this frag object.\n // this will happen if playlist has been refreshed between frag loading and call to updateFragPTSDTS()\n // if we don't update frag, we won't be able to propagate PTS info on the playlist\n // resulting in invalid sliding computation\n fragments[fragIdx] = frag;\n // adjust fragment PTS/duration from seqnum-1 to frag 0\n for (i = fragIdx; i > 0; i--) {\n updateFromToPTS(fragments[i], fragments[i - 1]);\n }\n\n // adjust fragment PTS/duration from seqnum to last frag\n for (i = fragIdx; i < fragments.length - 1; i++) {\n updateFromToPTS(fragments[i], fragments[i + 1]);\n }\n if (details.fragmentHint) {\n updateFromToPTS(fragments[fragments.length - 1], details.fragmentHint);\n }\n details.PTSKnown = details.alignedSliding = true;\n return drift;\n}\nfunction mergeDetails(oldDetails, newDetails, logger) {\n if (oldDetails === newDetails) {\n return;\n }\n // Track the last initSegment processed. Initialize it to the last one on the timeline.\n let currentInitSegment = null;\n const oldFragments = oldDetails.fragments;\n for (let i = oldFragments.length - 1; i >= 0; i--) {\n const oldInit = oldFragments[i].initSegment;\n if (oldInit) {\n currentInitSegment = oldInit;\n break;\n }\n }\n if (oldDetails.fragmentHint) {\n // prevent PTS and duration from being adjusted on the next hint\n delete oldDetails.fragmentHint.endPTS;\n }\n // check if old/new playlists have fragments in common\n // loop through overlapping SN and update startPTS, cc, and duration if any found\n let PTSFrag;\n mapFragmentIntersection(oldDetails, newDetails, (oldFrag, newFrag, newFragIndex, newFragments) => {\n if ((!newDetails.startCC || newDetails.skippedSegments) && newFrag.cc !== oldFrag.cc) {\n const ccOffset = oldFrag.cc - newFrag.cc;\n for (let i = newFragIndex; i < newFragments.length; i++) {\n newFragments[i].cc += ccOffset;\n }\n newDetails.endCC = newFragments[newFragments.length - 1].cc;\n }\n if (isFiniteNumber(oldFrag.startPTS) && isFiniteNumber(oldFrag.endPTS)) {\n newFrag.setStart(newFrag.startPTS = oldFrag.startPTS);\n newFrag.startDTS = oldFrag.startDTS;\n newFrag.maxStartPTS = oldFrag.maxStartPTS;\n newFrag.endPTS = oldFrag.endPTS;\n newFrag.endDTS = oldFrag.endDTS;\n newFrag.minEndPTS = oldFrag.minEndPTS;\n newFrag.setDuration(oldFrag.endPTS - oldFrag.startPTS);\n if (newFrag.duration) {\n PTSFrag = newFrag;\n }\n\n // PTS is known when any segment has startPTS and endPTS\n newDetails.PTSKnown = newDetails.alignedSliding = true;\n }\n if (oldFrag.hasStreams) {\n newFrag.elementaryStreams = oldFrag.elementaryStreams;\n }\n newFrag.loader = oldFrag.loader;\n if (oldFrag.hasStats) {\n newFrag.stats = oldFrag.stats;\n }\n if (oldFrag.initSegment) {\n newFrag.initSegment = oldFrag.initSegment;\n currentInitSegment = oldFrag.initSegment;\n }\n });\n const newFragments = newDetails.fragments;\n const fragmentsToCheck = newDetails.fragmentHint ? newFragments.concat(newDetails.fragmentHint) : newFragments;\n if (currentInitSegment) {\n fragmentsToCheck.forEach(frag => {\n var _currentInitSegment;\n if (frag && (!frag.initSegment || frag.initSegment.relurl === ((_currentInitSegment = currentInitSegment) == null ? void 0 : _currentInitSegment.relurl))) {\n frag.initSegment = currentInitSegment;\n }\n });\n }\n if (newDetails.skippedSegments) {\n newDetails.deltaUpdateFailed = newFragments.some(frag => !frag);\n if (newDetails.deltaUpdateFailed) {\n logger.warn('[level-helper] Previous playlist missing segments skipped in delta playlist');\n for (let i = newDetails.skippedSegments; i--;) {\n newFragments.shift();\n }\n newDetails.startSN = newFragments[0].sn;\n } else {\n if (newDetails.canSkipDateRanges) {\n newDetails.dateRanges = mergeDateRanges(oldDetails.dateRanges, newDetails, logger);\n }\n const programDateTimes = oldDetails.fragments.filter(frag => frag.rawProgramDateTime);\n if (oldDetails.hasProgramDateTime && !newDetails.hasProgramDateTime) {\n for (let i = 1; i < fragmentsToCheck.length; i++) {\n if (fragmentsToCheck[i].programDateTime === null) {\n assignProgramDateTime(fragmentsToCheck[i], fragmentsToCheck[i - 1], programDateTimes);\n }\n }\n }\n mapDateRanges(programDateTimes, newDetails);\n }\n newDetails.endCC = newFragments[newFragments.length - 1].cc;\n }\n if (!newDetails.startCC) {\n var _fragPriorToNewStart$;\n const fragPriorToNewStart = getFragmentWithSN(oldDetails, newDetails.startSN - 1);\n newDetails.startCC = (_fragPriorToNewStart$ = fragPriorToNewStart == null ? void 0 : fragPriorToNewStart.cc) != null ? _fragPriorToNewStart$ : newFragments[0].cc;\n }\n\n // Merge parts\n mapPartIntersection(oldDetails.partList, newDetails.partList, (oldPart, newPart) => {\n newPart.elementaryStreams = oldPart.elementaryStreams;\n newPart.stats = oldPart.stats;\n });\n\n // if at least one fragment contains PTS info, recompute PTS information for all fragments\n if (PTSFrag) {\n updateFragPTSDTS(newDetails, PTSFrag, PTSFrag.startPTS, PTSFrag.endPTS, PTSFrag.startDTS, PTSFrag.endDTS, logger);\n } else {\n // ensure that delta is within oldFragments range\n // also adjust sliding in case delta is 0 (we could have old=[50-60] and new=old=[50-61])\n // in that case we also need to adjust start offset of all fragments\n adjustSliding(oldDetails, newDetails);\n }\n if (newFragments.length) {\n newDetails.totalduration = newDetails.edge - newFragments[0].start;\n }\n newDetails.driftStartTime = oldDetails.driftStartTime;\n newDetails.driftStart = oldDetails.driftStart;\n const advancedDateTime = newDetails.advancedDateTime;\n if (newDetails.advanced && advancedDateTime) {\n const edge = newDetails.edge;\n if (!newDetails.driftStart) {\n newDetails.driftStartTime = advancedDateTime;\n newDetails.driftStart = edge;\n }\n newDetails.driftEndTime = advancedDateTime;\n newDetails.driftEnd = edge;\n } else {\n newDetails.driftEndTime = oldDetails.driftEndTime;\n newDetails.driftEnd = oldDetails.driftEnd;\n newDetails.advancedDateTime = oldDetails.advancedDateTime;\n }\n if (newDetails.requestScheduled === -1) {\n newDetails.requestScheduled = oldDetails.requestScheduled;\n }\n}\nfunction mergeDateRanges(oldDateRanges, newDetails, logger) {\n const {\n dateRanges: deltaDateRanges,\n recentlyRemovedDateranges\n } = newDetails;\n const dateRanges = _extends({}, oldDateRanges);\n if (recentlyRemovedDateranges) {\n recentlyRemovedDateranges.forEach(id => {\n delete dateRanges[id];\n });\n }\n const mergeIds = Object.keys(dateRanges);\n const mergeCount = mergeIds.length;\n if (!mergeCount) {\n return deltaDateRanges;\n }\n Object.keys(deltaDateRanges).forEach(id => {\n const mergedDateRange = dateRanges[id];\n const dateRange = new DateRange(deltaDateRanges[id].attr, mergedDateRange);\n if (dateRange.isValid) {\n dateRanges[id] = dateRange;\n if (!mergedDateRange) {\n dateRange.tagOrder += mergeCount;\n }\n } else {\n logger.warn(`Ignoring invalid Playlist Delta Update DATERANGE tag: \"${stringify(deltaDateRanges[id].attr)}\"`);\n }\n });\n return dateRanges;\n}\nfunction mapPartIntersection(oldParts, newParts, intersectionFn) {\n if (oldParts && newParts) {\n let delta = 0;\n for (let i = 0, len = oldParts.length; i <= len; i++) {\n const oldPart = oldParts[i];\n const newPart = newParts[i + delta];\n if (oldPart && newPart && oldPart.index === newPart.index && oldPart.fragment.sn === newPart.fragment.sn) {\n intersectionFn(oldPart, newPart);\n } else {\n delta--;\n }\n }\n }\n}\nfunction mapFragmentIntersection(oldDetails, newDetails, intersectionFn) {\n const skippedSegments = newDetails.skippedSegments;\n const start = Math.max(oldDetails.startSN, newDetails.startSN) - newDetails.startSN;\n const end = (oldDetails.fragmentHint ? 1 : 0) + (skippedSegments ? newDetails.endSN : Math.min(oldDetails.endSN, newDetails.endSN)) - newDetails.startSN;\n const delta = newDetails.startSN - oldDetails.startSN;\n const newFrags = newDetails.fragmentHint ? newDetails.fragments.concat(newDetails.fragmentHint) : newDetails.fragments;\n const oldFrags = oldDetails.fragmentHint ? oldDetails.fragments.concat(oldDetails.fragmentHint) : oldDetails.fragments;\n for (let i = start; i <= end; i++) {\n const oldFrag = oldFrags[delta + i];\n let newFrag = newFrags[i];\n if (skippedSegments && !newFrag && oldFrag) {\n // Fill in skipped segments in delta playlist\n newFrag = newDetails.fragments[i] = oldFrag;\n }\n if (oldFrag && newFrag) {\n intersectionFn(oldFrag, newFrag, i, newFrags);\n const uriBefore = oldFrag.relurl;\n const uriAfter = newFrag.relurl;\n if (uriBefore && notEqualAfterStrippingQueries(uriBefore, uriAfter)) {\n newDetails.playlistParsingError = getSequenceError(`media sequence mismatch ${newFrag.sn}:`, oldDetails, newDetails, oldFrag, newFrag);\n return;\n } else if (oldFrag.cc !== newFrag.cc) {\n newDetails.playlistParsingError = getSequenceError(`discontinuity sequence mismatch (${oldFrag.cc}!=${newFrag.cc})`, oldDetails, newDetails, oldFrag, newFrag);\n return;\n }\n }\n }\n}\nfunction getSequenceError(message, oldDetails, newDetails, oldFrag, newFrag) {\n return new Error(`${message} ${newFrag.url}\nPlaylist starting @${oldDetails.startSN}\n${oldDetails.m3u8}\n\nPlaylist starting @${newDetails.startSN}\n${newDetails.m3u8}`);\n}\nfunction adjustSliding(oldDetails, newDetails, matchingStableVariantOrRendition = true) {\n const delta = newDetails.startSN + newDetails.skippedSegments - oldDetails.startSN;\n const oldFragments = oldDetails.fragments;\n const advancedOrStable = delta >= 0;\n let sliding = 0;\n if (advancedOrStable && delta < oldFragments.length) {\n sliding = oldFragments[delta].start;\n } else if (advancedOrStable && newDetails.startSN === oldDetails.endSN + 1) {\n sliding = oldDetails.fragmentEnd;\n } else if (advancedOrStable && matchingStableVariantOrRendition) {\n // align with expected position (updated playlist start sequence is past end sequence of last update)\n sliding = oldDetails.fragmentStart + delta * newDetails.levelTargetDuration;\n } else if (!newDetails.skippedSegments && newDetails.fragmentStart === 0) {\n // align new start with old (playlist switch has a sequence with no overlap and should not be used for alignment)\n sliding = oldDetails.fragmentStart;\n } else {\n // new details already has a sliding offset or has skipped segments\n return;\n }\n addSliding(newDetails, sliding);\n}\nfunction addSliding(details, sliding) {\n if (sliding) {\n const fragments = details.fragments;\n for (let i = details.skippedSegments; i < fragments.length; i++) {\n fragments[i].addStart(sliding);\n }\n if (details.fragmentHint) {\n details.fragmentHint.addStart(sliding);\n }\n }\n}\nfunction computeReloadInterval(newDetails, distanceToLiveEdgeMs = Infinity) {\n let reloadInterval = 1000 * newDetails.targetduration;\n if (newDetails.updated) {\n // Use last segment duration when shorter than target duration and near live edge\n const fragments = newDetails.fragments;\n const liveEdgeMaxTargetDurations = 4;\n if (fragments.length && reloadInterval * liveEdgeMaxTargetDurations > distanceToLiveEdgeMs) {\n const lastSegmentDuration = fragments[fragments.length - 1].duration * 1000;\n if (lastSegmentDuration < reloadInterval) {\n reloadInterval = lastSegmentDuration;\n }\n }\n } else {\n // estimate = 'miss half average';\n // follow HLS Spec, If the client reloads a Playlist file and finds that it has not\n // changed then it MUST wait for a period of one-half the target\n // duration before retrying.\n reloadInterval /= 2;\n }\n return Math.round(reloadInterval);\n}\nfunction getFragmentWithSN(details, sn, fragCurrent) {\n if (!details) {\n return null;\n }\n let fragment = details.fragments[sn - details.startSN];\n if (fragment) {\n return fragment;\n }\n fragment = details.fragmentHint;\n if (fragment && fragment.sn === sn) {\n return fragment;\n }\n if (sn < details.startSN && fragCurrent && fragCurrent.sn === sn) {\n return fragCurrent;\n }\n return null;\n}\nfunction getPartWith(details, sn, partIndex) {\n if (!details) {\n return null;\n }\n return findPart(details.partList, sn, partIndex);\n}\nfunction findPart(partList, sn, partIndex) {\n if (partList) {\n for (let i = partList.length; i--;) {\n const part = partList[i];\n if (part.index === partIndex && part.fragment.sn === sn) {\n return part;\n }\n }\n }\n return null;\n}\nfunction reassignFragmentLevelIndexes(levels) {\n levels.forEach((level, index) => {\n var _level$details;\n (_level$details = level.details) == null || _level$details.fragments.forEach(fragment => {\n fragment.level = index;\n if (fragment.initSegment) {\n fragment.initSegment.level = index;\n }\n });\n });\n}\nfunction notEqualAfterStrippingQueries(uriBefore, uriAfter) {\n if (uriBefore !== uriAfter && uriAfter) {\n return stripQuery(uriBefore) !== stripQuery(uriAfter);\n }\n return false;\n}\nfunction stripQuery(uri) {\n return uri.replace(/\\?[^?]*$/, '');\n}\n\nfunction findFirstFragWithCC(fragments, cc) {\n for (let i = 0, len = fragments.length; i < len; i++) {\n var _fragments$i;\n if (((_fragments$i = fragments[i]) == null ? void 0 : _fragments$i.cc) === cc) {\n return fragments[i];\n }\n }\n return null;\n}\nfunction shouldAlignOnDiscontinuities(refDetails, details) {\n if (refDetails) {\n if (details.startCC < refDetails.endCC && details.endCC > refDetails.startCC) {\n return true;\n }\n }\n return false;\n}\nfunction adjustFragmentStart(frag, sliding) {\n const start = frag.start + sliding;\n frag.startPTS = start;\n frag.setStart(start);\n frag.endPTS = start + frag.duration;\n}\nfunction adjustSlidingStart(sliding, details) {\n // Update segments\n const fragments = details.fragments;\n for (let i = 0, len = fragments.length; i < len; i++) {\n adjustFragmentStart(fragments[i], sliding);\n }\n // Update LL-HLS parts at the end of the playlist\n if (details.fragmentHint) {\n adjustFragmentStart(details.fragmentHint, sliding);\n }\n details.alignedSliding = true;\n}\n\n/**\n * Using the parameters of the last level, this function computes PTS' of the new fragments so that they form a\n * contiguous stream with the last fragments.\n * The PTS of a fragment lets Hls.js know where it fits into a stream - by knowing every PTS, we know which fragment to\n * download at any given time. PTS is normally computed when the fragment is demuxed, so taking this step saves us time\n * and an extra download.\n * @param lastLevel\n * @param details\n */\nfunction alignStream(switchDetails, details) {\n if (!switchDetails) {\n return;\n }\n alignDiscontinuities(details, switchDetails);\n if (!details.alignedSliding) {\n // If the PTS wasn't figured out via discontinuity sequence that means there was no CC increase within the level.\n // Aligning via Program Date Time should therefore be reliable, since PDT should be the same within the same\n // discontinuity sequence.\n alignMediaPlaylistByPDT(details, switchDetails);\n }\n if (!details.alignedSliding && !details.skippedSegments) {\n // Try to align on sn so that we pick a better start fragment.\n // Do not perform this on playlists with delta updates as this is only to align levels on switch\n // and adjustSliding only adjusts fragments after skippedSegments.\n adjustSliding(switchDetails, details, false);\n }\n}\n\n/**\n * Ajust the start of fragments in `details` by the difference in time between fragments of the latest\n * shared discontinuity sequence change.\n * @param lastLevel - The details of the last loaded level\n * @param details - The details of the new level\n */\nfunction alignDiscontinuities(details, refDetails) {\n if (!shouldAlignOnDiscontinuities(refDetails, details)) {\n return;\n }\n const targetCC = Math.min(refDetails.endCC, details.endCC);\n const refFrag = findFirstFragWithCC(refDetails.fragments, targetCC);\n const frag = findFirstFragWithCC(details.fragments, targetCC);\n if (!refFrag || !frag) {\n return;\n }\n logger.log(`Aligning playlist at start of dicontinuity sequence ${targetCC}`);\n const delta = refFrag.start - frag.start;\n adjustSlidingStart(delta, details);\n}\n\n/**\n * Ensures appropriate time-alignment between renditions based on PDT.\n * This function assumes the timelines represented in `refDetails` are accurate, including the PDTs\n * for the last discontinuity sequence number shared by both playlists when present,\n * and uses the \"wallclock\"/PDT timeline as a cross-reference to `details`, adjusting the presentation\n * times/timelines of `details` accordingly.\n * Given the asynchronous nature of fetches and initial loads of live `main` and audio/subtitle tracks,\n * the primary purpose of this function is to ensure the \"local timelines\" of audio/subtitle tracks\n * are aligned to the main/video timeline, using PDT as the cross-reference/\"anchor\" that should\n * be consistent across playlists, per the HLS spec.\n * @param details - The details of the rendition you'd like to time-align (e.g. an audio rendition).\n * @param refDetails - The details of the reference rendition with start and PDT times for alignment.\n */\nfunction alignMediaPlaylistByPDT(details, refDetails) {\n if (!details.hasProgramDateTime || !refDetails.hasProgramDateTime) {\n return;\n }\n const fragments = details.fragments;\n const refFragments = refDetails.fragments;\n if (!fragments.length || !refFragments.length) {\n return;\n }\n\n // Calculate a delta to apply to all fragments according to the delta in PDT times and start times\n // of a fragment in the reference details, and a fragment in the target details of the same discontinuity.\n // If a fragment of the same discontinuity was not found use the middle fragment of both.\n let refFrag;\n let frag;\n const targetCC = Math.min(refDetails.endCC, details.endCC);\n if (refDetails.startCC < targetCC && details.startCC < targetCC) {\n refFrag = findFirstFragWithCC(refFragments, targetCC);\n frag = findFirstFragWithCC(fragments, targetCC);\n }\n if (!refFrag || !frag) {\n refFrag = refFragments[Math.floor(refFragments.length / 2)];\n frag = findFirstFragWithCC(fragments, refFrag.cc) || fragments[Math.floor(fragments.length / 2)];\n }\n const refPDT = refFrag.programDateTime;\n const targetPDT = frag.programDateTime;\n if (!refPDT || !targetPDT) {\n return;\n }\n const delta = (targetPDT - refPDT) / 1000 - (frag.start - refFrag.start);\n adjustSlidingStart(delta, details);\n}\n\nfunction addEventListener(el, type, listener) {\n removeEventListener(el, type, listener);\n el.addEventListener(type, listener);\n}\nfunction removeEventListener(el, type, listener) {\n el.removeEventListener(type, listener);\n}\n\n/**\n * TimeRanges to string helper\n */\n\nconst TimeRanges = {\n toString: function (r) {\n let log = '';\n const len = r.length;\n for (let i = 0; i < len; i++) {\n log += `[${r.start(i).toFixed(3)}-${r.end(i).toFixed(3)}]`;\n }\n return log;\n }\n};\n\nconst State = {\n STOPPED: 'STOPPED',\n IDLE: 'IDLE',\n KEY_LOADING: 'KEY_LOADING',\n FRAG_LOADING: 'FRAG_LOADING',\n FRAG_LOADING_WAITING_RETRY: 'FRAG_LOADING_WAITING_RETRY',\n WAITING_TRACK: 'WAITING_TRACK',\n PARSING: 'PARSING',\n PARSED: 'PARSED',\n ENDED: 'ENDED',\n ERROR: 'ERROR',\n WAITING_INIT_PTS: 'WAITING_INIT_PTS',\n WAITING_LEVEL: 'WAITING_LEVEL'\n};\nclass BaseStreamController extends TaskLoop {\n constructor(hls, fragmentTracker, keyLoader, logPrefix, playlistType) {\n super(logPrefix, hls.logger);\n this.hls = void 0;\n this.fragPrevious = null;\n this.fragCurrent = null;\n this.fragmentTracker = void 0;\n this.transmuxer = null;\n this._state = State.STOPPED;\n this.playlistType = void 0;\n this.media = null;\n this.mediaBuffer = null;\n this.config = void 0;\n this.bitrateTest = false;\n this.lastCurrentTime = 0;\n this.nextLoadPosition = 0;\n this.startPosition = 0;\n this.startTimeOffset = null;\n this.retryDate = 0;\n this.levels = null;\n this.fragmentLoader = void 0;\n this.keyLoader = void 0;\n this.levelLastLoaded = null;\n this.startFragRequested = false;\n this.decrypter = void 0;\n this.initPTS = [];\n this.buffering = true;\n this.loadingParts = false;\n this.loopSn = void 0;\n this.onMediaSeeking = () => {\n const {\n config,\n fragCurrent,\n media,\n mediaBuffer,\n state\n } = this;\n const currentTime = media ? media.currentTime : 0;\n const bufferInfo = BufferHelper.bufferInfo(mediaBuffer ? mediaBuffer : media, currentTime, config.maxBufferHole);\n const noFowardBuffer = !bufferInfo.len;\n this.log(`Media seeking to ${isFiniteNumber(currentTime) ? currentTime.toFixed(3) : currentTime}, state: ${state}, ${noFowardBuffer ? 'out of' : 'in'} buffer`);\n if (this.state === State.ENDED) {\n this.resetLoadingState();\n } else if (fragCurrent) {\n // Seeking while frag load is in progress\n const tolerance = config.maxFragLookUpTolerance;\n const fragStartOffset = fragCurrent.start - tolerance;\n const fragEndOffset = fragCurrent.start + fragCurrent.duration + tolerance;\n // if seeking out of buffered range or into new one\n if (noFowardBuffer || fragEndOffset < bufferInfo.start || fragStartOffset > bufferInfo.end) {\n const pastFragment = currentTime > fragEndOffset;\n // if the seek position is outside the current fragment range\n if (currentTime < fragStartOffset || pastFragment) {\n if (pastFragment && fragCurrent.loader) {\n this.log(`Cancelling fragment load for seek (sn: ${fragCurrent.sn})`);\n fragCurrent.abortRequests();\n this.resetLoadingState();\n }\n this.fragPrevious = null;\n }\n }\n }\n if (media) {\n // Remove gap fragments\n this.fragmentTracker.removeFragmentsInRange(currentTime, Infinity, this.playlistType, true);\n\n // Don't set lastCurrentTime with backward seeks (allows for frag selection with strict tolerances)\n const lastCurrentTime = this.lastCurrentTime;\n if (currentTime > lastCurrentTime) {\n this.lastCurrentTime = currentTime;\n }\n if (!this.loadingParts) {\n const bufferEnd = Math.max(bufferInfo.end, currentTime);\n const shouldLoadParts = this.shouldLoadParts(this.getLevelDetails(), bufferEnd);\n if (shouldLoadParts) {\n this.log(`LL-Part loading ON after seeking to ${currentTime.toFixed(2)} with buffer @${bufferEnd.toFixed(2)}`);\n this.loadingParts = shouldLoadParts;\n }\n }\n }\n\n // in case seeking occurs although no media buffered, adjust startPosition and nextLoadPosition to seek target\n if (!this.hls.hasEnoughToStart) {\n this.log(`Setting ${noFowardBuffer ? 'startPosition' : 'nextLoadPosition'} to ${currentTime} for seek without enough to start`);\n this.nextLoadPosition = currentTime;\n if (noFowardBuffer) {\n this.startPosition = currentTime;\n }\n }\n if (noFowardBuffer && this.state === State.IDLE) {\n // Async tick to speed up processing\n this.tickImmediate();\n }\n };\n this.onMediaEnded = () => {\n // reset startPosition and lastCurrentTime to restart playback @ stream beginning\n this.log(`setting startPosition to 0 because media ended`);\n this.startPosition = this.lastCurrentTime = 0;\n };\n this.playlistType = playlistType;\n this.hls = hls;\n this.fragmentLoader = new FragmentLoader(hls.config);\n this.keyLoader = keyLoader;\n this.fragmentTracker = fragmentTracker;\n this.config = hls.config;\n this.decrypter = new Decrypter(hls.config);\n }\n registerListeners() {\n const {\n hls\n } = this;\n hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n hls.on(Events.ERROR, this.onError, this);\n }\n unregisterListeners() {\n const {\n hls\n } = this;\n hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n hls.off(Events.ERROR, this.onError, this);\n }\n doTick() {\n this.onTickEnd();\n }\n onTickEnd() {}\n startLoad(startPosition) {}\n stopLoad() {\n if (this.state === State.STOPPED) {\n return;\n }\n this.fragmentLoader.abort();\n this.keyLoader.abort(this.playlistType);\n const frag = this.fragCurrent;\n if (frag != null && frag.loader) {\n frag.abortRequests();\n this.fragmentTracker.removeFragment(frag);\n }\n this.resetTransmuxer();\n this.fragCurrent = null;\n this.fragPrevious = null;\n this.clearInterval();\n this.clearNextTick();\n this.state = State.STOPPED;\n }\n get startPositionValue() {\n const {\n nextLoadPosition,\n startPosition\n } = this;\n if (startPosition === -1 && nextLoadPosition) {\n return nextLoadPosition;\n }\n return startPosition;\n }\n get bufferingEnabled() {\n return this.buffering;\n }\n pauseBuffering() {\n this.buffering = false;\n }\n resumeBuffering() {\n this.buffering = true;\n }\n get inFlightFrag() {\n return {\n frag: this.fragCurrent,\n state: this.state\n };\n }\n _streamEnded(bufferInfo, levelDetails) {\n // Stream is never \"ended\" when playlist is live or media is detached\n if (levelDetails.live || !this.media) {\n return false;\n }\n // Stream is not \"ended\" when nothing is buffered past the start\n const bufferEnd = bufferInfo.end || 0;\n const timelineStart = this.config.timelineOffset || 0;\n if (bufferEnd <= timelineStart) {\n return false;\n }\n // Stream is not \"ended\" when there is a second buffered range starting before the end of the playlist\n const bufferedRanges = bufferInfo.buffered;\n if (this.config.maxBufferHole && bufferedRanges && bufferedRanges.length > 1) {\n // make sure bufferInfo accounts for any gaps\n bufferInfo = BufferHelper.bufferedInfo(bufferedRanges, bufferInfo.start, 0);\n }\n const nextStart = bufferInfo.nextStart;\n const hasSecondBufferedRange = nextStart && nextStart > timelineStart && nextStart < levelDetails.edge;\n if (hasSecondBufferedRange) {\n return false;\n }\n // Playhead is in unbuffered region. Marking EoS now could result in Safari failing to dispatch \"ended\" event following seek on start.\n if (this.media.currentTime < bufferInfo.start) {\n return false;\n }\n const partList = levelDetails.partList;\n // Since the last part isn't guaranteed to correspond to the last playlist segment for Low-Latency HLS,\n // check instead if the last part is buffered.\n if (partList != null && partList.length) {\n const lastPart = partList[partList.length - 1];\n\n // Checking the midpoint of the part for potential margin of error and related issues.\n // NOTE: Technically I believe parts could yield content that is < the computed duration (including potential a duration of 0)\n // and still be spec-compliant, so there may still be edge cases here. Likewise, there could be issues in end of stream\n // part mismatches for independent audio and video playlists/segments.\n const lastPartBuffered = BufferHelper.isBuffered(this.media, lastPart.start + lastPart.duration / 2);\n return lastPartBuffered;\n }\n const playlistType = levelDetails.fragments[levelDetails.fragments.length - 1].type;\n return this.fragmentTracker.isEndListAppended(playlistType);\n }\n getLevelDetails() {\n if (this.levels && this.levelLastLoaded !== null) {\n return this.levelLastLoaded.details;\n }\n }\n get timelineOffset() {\n const configuredTimelineOffset = this.config.timelineOffset;\n if (configuredTimelineOffset) {\n var _this$getLevelDetails;\n return ((_this$getLevelDetails = this.getLevelDetails()) == null ? void 0 : _this$getLevelDetails.appliedTimelineOffset) || configuredTimelineOffset;\n }\n return 0;\n }\n onMediaAttached(event, data) {\n const media = this.media = this.mediaBuffer = data.media;\n addEventListener(media, 'seeking', this.onMediaSeeking);\n addEventListener(media, 'ended', this.onMediaEnded);\n const config = this.config;\n if (this.levels && config.autoStartLoad && this.state === State.STOPPED) {\n this.startLoad(config.startPosition);\n }\n }\n onMediaDetaching(event, data) {\n const transferringMedia = !!data.transferMedia;\n const media = this.media;\n if (media === null) {\n return;\n }\n if (media.ended) {\n this.log('MSE detaching and video ended, reset startPosition');\n this.startPosition = this.lastCurrentTime = 0;\n }\n\n // remove video listeners\n removeEventListener(media, 'seeking', this.onMediaSeeking);\n removeEventListener(media, 'ended', this.onMediaEnded);\n if (this.keyLoader && !transferringMedia) {\n this.keyLoader.detach();\n }\n this.media = this.mediaBuffer = null;\n this.loopSn = undefined;\n if (transferringMedia) {\n this.resetLoadingState();\n this.resetTransmuxer();\n return;\n }\n this.loadingParts = false;\n this.fragmentTracker.removeAllFragments();\n this.stopLoad();\n }\n onManifestLoading() {\n this.initPTS = [];\n this.levels = this.levelLastLoaded = this.fragCurrent = null;\n this.lastCurrentTime = this.startPosition = 0;\n this.startFragRequested = false;\n }\n onError(event, data) {}\n onManifestLoaded(event, data) {\n this.startTimeOffset = data.startTimeOffset;\n }\n onHandlerDestroying() {\n this.stopLoad();\n if (this.transmuxer) {\n this.transmuxer.destroy();\n this.transmuxer = null;\n }\n super.onHandlerDestroying();\n // @ts-ignore\n this.hls = this.onMediaSeeking = this.onMediaEnded = null;\n }\n onHandlerDestroyed() {\n this.state = State.STOPPED;\n if (this.fragmentLoader) {\n this.fragmentLoader.destroy();\n }\n if (this.keyLoader) {\n this.keyLoader.destroy();\n }\n if (this.decrypter) {\n this.decrypter.destroy();\n }\n this.hls = this.log = this.warn = this.decrypter = this.keyLoader = this.fragmentLoader = this.fragmentTracker = null;\n super.onHandlerDestroyed();\n }\n loadFragment(frag, level, targetBufferTime) {\n this.startFragRequested = true;\n this._loadFragForPlayback(frag, level, targetBufferTime);\n }\n _loadFragForPlayback(fragment, level, targetBufferTime) {\n const progressCallback = data => {\n const frag = data.frag;\n if (this.fragContextChanged(frag)) {\n this.warn(`${frag.type} sn: ${frag.sn}${data.part ? ' part: ' + data.part.index : ''} of ${this.fragInfo(frag, false, data.part)}) was dropped during download.`);\n this.fragmentTracker.removeFragment(frag);\n return;\n }\n frag.stats.chunkCount++;\n this._handleFragmentLoadProgress(data);\n };\n this._doFragLoad(fragment, level, targetBufferTime, progressCallback).then(data => {\n if (!data) {\n // if we're here we probably needed to backtrack or are waiting for more parts\n return;\n }\n const state = this.state;\n const frag = data.frag;\n if (this.fragContextChanged(frag)) {\n if (state === State.FRAG_LOADING || !this.fragCurrent && state === State.PARSING) {\n this.fragmentTracker.removeFragment(frag);\n this.state = State.IDLE;\n }\n return;\n }\n if ('payload' in data) {\n this.log(`Loaded ${frag.type} sn: ${frag.sn} of ${this.playlistLabel()} ${frag.level}`);\n this.hls.trigger(Events.FRAG_LOADED, data);\n }\n\n // Pass through the whole payload; controllers not implementing progressive loading receive data from this callback\n this._handleFragmentLoadComplete(data);\n }).catch(reason => {\n if (this.state === State.STOPPED || this.state === State.ERROR) {\n return;\n }\n this.warn(`Frag error: ${(reason == null ? void 0 : reason.message) || reason}`);\n this.resetFragmentLoading(fragment);\n });\n }\n clearTrackerIfNeeded(frag) {\n var _this$mediaBuffer;\n const {\n fragmentTracker\n } = this;\n const fragState = fragmentTracker.getState(frag);\n if (fragState === FragmentState.APPENDING) {\n // Lower the max buffer length and try again\n const playlistType = frag.type;\n const bufferedInfo = this.getFwdBufferInfo(this.mediaBuffer, playlistType);\n const minForwardBufferLength = Math.max(frag.duration, bufferedInfo ? bufferedInfo.len : this.config.maxBufferLength);\n // If backtracking, always remove from the tracker without reducing max buffer length\n const backtrackFragment = this.backtrackFragment;\n const backtracked = backtrackFragment ? frag.sn - backtrackFragment.sn : 0;\n if (backtracked === 1 || this.reduceMaxBufferLength(minForwardBufferLength, frag.duration)) {\n fragmentTracker.removeFragment(frag);\n }\n } else if (((_this$mediaBuffer = this.mediaBuffer) == null ? void 0 : _this$mediaBuffer.buffered.length) === 0) {\n // Stop gap for bad tracker / buffer flush behavior\n fragmentTracker.removeAllFragments();\n } else if (fragmentTracker.hasParts(frag.type)) {\n // In low latency mode, remove fragments for which only some parts were buffered\n fragmentTracker.detectPartialFragments({\n frag,\n part: null,\n stats: frag.stats,\n id: frag.type\n });\n if (fragmentTracker.getState(frag) === FragmentState.PARTIAL) {\n fragmentTracker.removeFragment(frag);\n }\n }\n }\n checkLiveUpdate(details) {\n if (details.updated && !details.live) {\n // Live stream ended, update fragment tracker\n const lastFragment = details.fragments[details.fragments.length - 1];\n this.fragmentTracker.detectPartialFragments({\n frag: lastFragment,\n part: null,\n stats: lastFragment.stats,\n id: lastFragment.type\n });\n }\n if (!details.fragments[0]) {\n details.deltaUpdateFailed = true;\n }\n }\n waitForLive(levelInfo) {\n const details = levelInfo.details;\n return (details == null ? void 0 : details.live) && details.type !== 'EVENT' && (this.levelLastLoaded !== levelInfo || details.expired);\n }\n flushMainBuffer(startOffset, endOffset, type = null) {\n if (!(startOffset - endOffset)) {\n return;\n }\n // When alternate audio is playing, the audio-stream-controller is responsible for the audio buffer. Otherwise,\n // passing a null type flushes both buffers\n const flushScope = {\n startOffset,\n endOffset,\n type\n };\n this.hls.trigger(Events.BUFFER_FLUSHING, flushScope);\n }\n _loadInitSegment(fragment, level) {\n this._doFragLoad(fragment, level).then(data => {\n const frag = data == null ? void 0 : data.frag;\n if (!frag || this.fragContextChanged(frag) || !this.levels) {\n throw new Error('init load aborted');\n }\n return data;\n }).then(data => {\n const {\n hls\n } = this;\n const {\n frag,\n payload\n } = data;\n const decryptData = frag.decryptdata;\n\n // check to see if the payload needs to be decrypted\n if (payload && payload.byteLength > 0 && decryptData != null && decryptData.key && decryptData.iv && isFullSegmentEncryption(decryptData.method)) {\n const startTime = self.performance.now();\n // decrypt init segment data\n return this.decrypter.decrypt(new Uint8Array(payload), decryptData.key.buffer, decryptData.iv.buffer, getAesModeFromFullSegmentMethod(decryptData.method)).catch(err => {\n hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.FRAG_DECRYPT_ERROR,\n fatal: false,\n error: err,\n reason: err.message,\n frag\n });\n throw err;\n }).then(decryptedData => {\n const endTime = self.performance.now();\n hls.trigger(Events.FRAG_DECRYPTED, {\n frag,\n payload: decryptedData,\n stats: {\n tstart: startTime,\n tdecrypt: endTime\n }\n });\n data.payload = decryptedData;\n return this.completeInitSegmentLoad(data);\n });\n }\n return this.completeInitSegmentLoad(data);\n }).catch(reason => {\n if (this.state === State.STOPPED || this.state === State.ERROR) {\n return;\n }\n this.warn(reason);\n this.resetFragmentLoading(fragment);\n });\n }\n completeInitSegmentLoad(data) {\n const {\n levels\n } = this;\n if (!levels) {\n throw new Error('init load aborted, missing levels');\n }\n const stats = data.frag.stats;\n if (this.state !== State.STOPPED) {\n this.state = State.IDLE;\n }\n data.frag.data = new Uint8Array(data.payload);\n stats.parsing.start = stats.buffering.start = self.performance.now();\n stats.parsing.end = stats.buffering.end = self.performance.now();\n this.tick();\n }\n unhandledEncryptionError(initSegment, frag) {\n var _tracks$audio, _tracks$video;\n const tracks = initSegment.tracks;\n if (tracks && !frag.encrypted && ((_tracks$audio = tracks.audio) != null && _tracks$audio.encrypted || (_tracks$video = tracks.video) != null && _tracks$video.encrypted) && (!this.config.emeEnabled || !this.keyLoader.emeController)) {\n const media = this.media;\n const error = new Error(`Encrypted track with no key in ${this.fragInfo(frag)} (media ${media ? 'attached mediaKeys: ' + media.mediaKeys : 'detached'})` );\n this.warn(error.message);\n // Ignore if media is detached or mediaKeys are set\n if (!media || media.mediaKeys) {\n return false;\n }\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.KEY_SYSTEM_ERROR,\n details: ErrorDetails.KEY_SYSTEM_NO_KEYS,\n fatal: false,\n error,\n frag\n });\n this.resetTransmuxer();\n return true;\n }\n return false;\n }\n fragContextChanged(frag) {\n const {\n fragCurrent\n } = this;\n return !frag || !fragCurrent || frag.sn !== fragCurrent.sn || frag.level !== fragCurrent.level;\n }\n fragBufferedComplete(frag, part) {\n const media = this.mediaBuffer ? this.mediaBuffer : this.media;\n this.log(`Buffered ${frag.type} sn: ${frag.sn}${part ? ' part: ' + part.index : ''} of ${this.fragInfo(frag, false, part)} > buffer:${media ? TimeRanges.toString(BufferHelper.getBuffered(media)) : '(detached)'})`);\n if (isMediaFragment(frag)) {\n var _this$levels;\n if (frag.type !== PlaylistLevelType.SUBTITLE) {\n const el = frag.elementaryStreams;\n if (!Object.keys(el).some(type => !!el[type])) {\n // empty segment\n this.state = State.IDLE;\n return;\n }\n }\n const level = (_this$levels = this.levels) == null ? void 0 : _this$levels[frag.level];\n if (level != null && level.fragmentError) {\n this.log(`Resetting level fragment error count of ${level.fragmentError} on frag buffered`);\n level.fragmentError = 0;\n }\n }\n this.state = State.IDLE;\n }\n _handleFragmentLoadComplete(fragLoadedEndData) {\n const {\n transmuxer\n } = this;\n if (!transmuxer) {\n return;\n }\n const {\n frag,\n part,\n partsLoaded\n } = fragLoadedEndData;\n // If we did not load parts, or loaded all parts, we have complete (not partial) fragment data\n const complete = !partsLoaded || partsLoaded.length === 0 || partsLoaded.some(fragLoaded => !fragLoaded);\n const chunkMeta = new ChunkMetadata(frag.level, frag.sn, frag.stats.chunkCount + 1, 0, part ? part.index : -1, !complete);\n transmuxer.flush(chunkMeta);\n }\n _handleFragmentLoadProgress(frag) {}\n _doFragLoad(frag, level, targetBufferTime = null, progressCallback) {\n var _frag$decryptdata;\n this.fragCurrent = frag;\n const details = level.details;\n if (!this.levels || !details) {\n throw new Error(`frag load aborted, missing level${details ? '' : ' detail'}s`);\n }\n let keyLoadingPromise = null;\n if (frag.encrypted && !((_frag$decryptdata = frag.decryptdata) != null && _frag$decryptdata.key)) {\n this.log(`Loading key for ${frag.sn} of [${details.startSN}-${details.endSN}], ${this.playlistLabel()} ${frag.level}`);\n this.state = State.KEY_LOADING;\n this.fragCurrent = frag;\n keyLoadingPromise = this.keyLoader.load(frag).then(keyLoadedData => {\n if (!this.fragContextChanged(keyLoadedData.frag)) {\n this.hls.trigger(Events.KEY_LOADED, keyLoadedData);\n if (this.state === State.KEY_LOADING) {\n this.state = State.IDLE;\n }\n return keyLoadedData;\n }\n });\n this.hls.trigger(Events.KEY_LOADING, {\n frag\n });\n if (this.fragCurrent === null) {\n this.log(`context changed in KEY_LOADING`);\n return Promise.resolve(null);\n }\n } else if (!frag.encrypted) {\n keyLoadingPromise = this.keyLoader.loadClear(frag, details.encryptedFragments, this.startFragRequested);\n if (keyLoadingPromise) {\n this.log(`[eme] blocking frag load until media-keys acquired`);\n }\n }\n const fragPrevious = this.fragPrevious;\n if (isMediaFragment(frag) && (!fragPrevious || frag.sn !== fragPrevious.sn)) {\n const shouldLoadParts = this.shouldLoadParts(level.details, frag.end);\n if (shouldLoadParts !== this.loadingParts) {\n this.log(`LL-Part loading ${shouldLoadParts ? 'ON' : 'OFF'} loading sn ${fragPrevious == null ? void 0 : fragPrevious.sn}->${frag.sn}`);\n this.loadingParts = shouldLoadParts;\n }\n }\n targetBufferTime = Math.max(frag.start, targetBufferTime || 0);\n if (this.loadingParts && isMediaFragment(frag)) {\n const partList = details.partList;\n if (partList && progressCallback) {\n if (targetBufferTime > details.fragmentEnd && details.fragmentHint) {\n frag = details.fragmentHint;\n }\n const partIndex = this.getNextPart(partList, frag, targetBufferTime);\n if (partIndex > -1) {\n const part = partList[partIndex];\n frag = this.fragCurrent = part.fragment;\n this.log(`Loading ${frag.type} sn: ${frag.sn} part: ${part.index} (${partIndex}/${partList.length - 1}) of ${this.fragInfo(frag, false, part)}) cc: ${frag.cc} [${details.startSN}-${details.endSN}], target: ${parseFloat(targetBufferTime.toFixed(3))}`);\n this.nextLoadPosition = part.start + part.duration;\n this.state = State.FRAG_LOADING;\n let _result;\n if (keyLoadingPromise) {\n _result = keyLoadingPromise.then(keyLoadedData => {\n if (!keyLoadedData || this.fragContextChanged(keyLoadedData.frag)) {\n return null;\n }\n return this.doFragPartsLoad(frag, part, level, progressCallback);\n }).catch(error => this.handleFragLoadError(error));\n } else {\n _result = this.doFragPartsLoad(frag, part, level, progressCallback).catch(error => this.handleFragLoadError(error));\n }\n this.hls.trigger(Events.FRAG_LOADING, {\n frag,\n part,\n targetBufferTime\n });\n if (this.fragCurrent === null) {\n return Promise.reject(new Error(`frag load aborted, context changed in FRAG_LOADING parts`));\n }\n return _result;\n } else if (!frag.url || this.loadedEndOfParts(partList, targetBufferTime)) {\n // Fragment hint has no parts\n return Promise.resolve(null);\n }\n }\n }\n if (isMediaFragment(frag) && this.loadingParts) {\n var _details$partList;\n this.log(`LL-Part loading OFF after next part miss @${targetBufferTime.toFixed(2)} Check buffer at sn: ${frag.sn} loaded parts: ${(_details$partList = details.partList) == null ? void 0 : _details$partList.filter(p => p.loaded).map(p => `[${p.start}-${p.end}]`)}`);\n this.loadingParts = false;\n } else if (!frag.url) {\n // Selected fragment hint for part but not loading parts\n return Promise.resolve(null);\n }\n this.log(`Loading ${frag.type} sn: ${frag.sn} of ${this.fragInfo(frag, false)}) cc: ${frag.cc} ${'[' + details.startSN + '-' + details.endSN + ']'}, target: ${parseFloat(targetBufferTime.toFixed(3))}`);\n // Don't update nextLoadPosition for fragments which are not buffered\n if (isFiniteNumber(frag.sn) && !this.bitrateTest) {\n this.nextLoadPosition = frag.start + frag.duration;\n }\n this.state = State.FRAG_LOADING;\n\n // Load key before streaming fragment data\n const dataOnProgress = this.config.progressive && frag.type !== PlaylistLevelType.SUBTITLE;\n let result;\n if (dataOnProgress && keyLoadingPromise) {\n result = keyLoadingPromise.then(keyLoadedData => {\n if (!keyLoadedData || this.fragContextChanged(keyLoadedData.frag)) {\n return null;\n }\n return this.fragmentLoader.load(frag, progressCallback);\n }).catch(error => this.handleFragLoadError(error));\n } else {\n // load unencrypted fragment data with progress event,\n // or handle fragment result after key and fragment are finished loading\n result = Promise.all([this.fragmentLoader.load(frag, dataOnProgress ? progressCallback : undefined), keyLoadingPromise]).then(([fragLoadedData]) => {\n if (!dataOnProgress && progressCallback) {\n progressCallback(fragLoadedData);\n }\n return fragLoadedData;\n }).catch(error => this.handleFragLoadError(error));\n }\n this.hls.trigger(Events.FRAG_LOADING, {\n frag,\n targetBufferTime\n });\n if (this.fragCurrent === null) {\n return Promise.reject(new Error(`frag load aborted, context changed in FRAG_LOADING`));\n }\n return result;\n }\n doFragPartsLoad(frag, fromPart, level, progressCallback) {\n return new Promise((resolve, reject) => {\n var _level$details;\n const partsLoaded = [];\n const initialPartList = (_level$details = level.details) == null ? void 0 : _level$details.partList;\n const loadPart = part => {\n this.fragmentLoader.loadPart(frag, part, progressCallback).then(partLoadedData => {\n partsLoaded[part.index] = partLoadedData;\n const loadedPart = partLoadedData.part;\n this.hls.trigger(Events.FRAG_LOADED, partLoadedData);\n const nextPart = getPartWith(level.details, frag.sn, part.index + 1) || findPart(initialPartList, frag.sn, part.index + 1);\n if (nextPart) {\n loadPart(nextPart);\n } else {\n return resolve({\n frag,\n part: loadedPart,\n partsLoaded\n });\n }\n }).catch(reject);\n };\n loadPart(fromPart);\n });\n }\n handleFragLoadError(error) {\n if ('data' in error) {\n const data = error.data;\n if (data.frag && data.details === ErrorDetails.INTERNAL_ABORTED) {\n this.handleFragLoadAborted(data.frag, data.part);\n } else if (data.frag && data.type === ErrorTypes.KEY_SYSTEM_ERROR) {\n data.frag.abortRequests();\n this.resetStartWhenNotLoaded();\n this.resetFragmentLoading(data.frag);\n } else {\n this.hls.trigger(Events.ERROR, data);\n }\n } else {\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.INTERNAL_EXCEPTION,\n err: error,\n error,\n fatal: true\n });\n }\n return null;\n }\n _handleTransmuxerFlush(chunkMeta) {\n const context = this.getCurrentContext(chunkMeta);\n if (!context || this.state !== State.PARSING) {\n if (!this.fragCurrent && this.state !== State.STOPPED && this.state !== State.ERROR) {\n this.state = State.IDLE;\n }\n return;\n }\n const {\n frag,\n part,\n level\n } = context;\n const now = self.performance.now();\n frag.stats.parsing.end = now;\n if (part) {\n part.stats.parsing.end = now;\n }\n // See if part loading should be disabled/enabled based on buffer and playback position.\n const levelDetails = this.getLevelDetails();\n const loadingPartsAtEdge = levelDetails && frag.sn > levelDetails.endSN;\n const shouldLoadParts = loadingPartsAtEdge || this.shouldLoadParts(levelDetails, frag.end);\n if (shouldLoadParts !== this.loadingParts) {\n this.log(`LL-Part loading ${shouldLoadParts ? 'ON' : 'OFF'} after parsing segment ending @${frag.end.toFixed(2)}`);\n this.loadingParts = shouldLoadParts;\n }\n this.updateLevelTiming(frag, part, level, chunkMeta.partial);\n }\n shouldLoadParts(details, bufferEnd) {\n if (this.config.lowLatencyMode) {\n if (!details) {\n return this.loadingParts;\n }\n if (details.partList) {\n var _details$fragmentHint;\n // Buffer must be ahead of first part + duration of parts after last segment\n // and playback must be at or past segment adjacent to part list\n const firstPart = details.partList[0];\n // Loading of VTT subtitle parts is not implemented in subtitle-stream-controller (#7460)\n if (firstPart.fragment.type === PlaylistLevelType.SUBTITLE) {\n return false;\n }\n const safePartStart = firstPart.end + (((_details$fragmentHint = details.fragmentHint) == null ? void 0 : _details$fragmentHint.duration) || 0);\n if (bufferEnd >= safePartStart) {\n var _this$media;\n const playhead = this.hls.hasEnoughToStart ? ((_this$media = this.media) == null ? void 0 : _this$media.currentTime) || this.lastCurrentTime : this.getLoadPosition();\n if (playhead > firstPart.start - firstPart.fragment.duration) {\n return true;\n }\n }\n }\n }\n return false;\n }\n getCurrentContext(chunkMeta) {\n const {\n levels,\n fragCurrent\n } = this;\n const {\n level: levelIndex,\n sn,\n part: partIndex\n } = chunkMeta;\n if (!(levels != null && levels[levelIndex])) {\n this.warn(`Levels object was unset while buffering fragment ${sn} of ${this.playlistLabel()} ${levelIndex}. The current chunk will not be buffered.`);\n return null;\n }\n const level = levels[levelIndex];\n const levelDetails = level.details;\n const part = partIndex > -1 ? getPartWith(levelDetails, sn, partIndex) : null;\n const frag = part ? part.fragment : getFragmentWithSN(levelDetails, sn, fragCurrent);\n if (!frag) {\n return null;\n }\n if (fragCurrent && fragCurrent !== frag) {\n frag.stats = fragCurrent.stats;\n }\n return {\n frag,\n part,\n level\n };\n }\n bufferFragmentData(data, frag, part, chunkMeta, noBacktracking) {\n if (this.state !== State.PARSING) {\n return;\n }\n const {\n data1,\n data2\n } = data;\n let buffer = data1;\n if (data2) {\n // Combine the moof + mdat so that we buffer with a single append\n buffer = appendUint8Array(data1, data2);\n }\n if (!buffer.length) {\n return;\n }\n const offsetTimestamp = this.initPTS[frag.cc];\n const offset = offsetTimestamp ? -offsetTimestamp.baseTime / offsetTimestamp.timescale : undefined;\n const segment = {\n type: data.type,\n frag,\n part,\n chunkMeta,\n offset,\n parent: frag.type,\n data: buffer\n };\n this.hls.trigger(Events.BUFFER_APPENDING, segment);\n if (data.dropped && data.independent && !part) {\n if (noBacktracking) {\n return;\n }\n // Clear buffer so that we reload previous segments sequentially if required\n this.flushBufferGap(frag);\n }\n }\n flushBufferGap(frag) {\n const media = this.media;\n if (!media) {\n return;\n }\n // If currentTime is not buffered, clear the back buffer so that we can backtrack as much as needed\n if (!BufferHelper.isBuffered(media, media.currentTime)) {\n this.flushMainBuffer(0, frag.start);\n return;\n }\n // Remove back-buffer without interrupting playback to allow back tracking\n const currentTime = media.currentTime;\n const bufferInfo = BufferHelper.bufferInfo(media, currentTime, 0);\n const fragDuration = frag.duration;\n const segmentFraction = Math.min(this.config.maxFragLookUpTolerance * 2, fragDuration * 0.25);\n const start = Math.max(Math.min(frag.start - segmentFraction, bufferInfo.end - segmentFraction), currentTime + segmentFraction);\n if (frag.start - start > segmentFraction) {\n this.flushMainBuffer(start, frag.start);\n }\n }\n getFwdBufferInfo(bufferable, type) {\n var _this$media2;\n const pos = this.getLoadPosition();\n if (!isFiniteNumber(pos)) {\n return null;\n }\n const backwardSeek = this.lastCurrentTime > pos;\n const maxBufferHole = backwardSeek || (_this$media2 = this.media) != null && _this$media2.paused ? 0 : this.config.maxBufferHole;\n return this.getFwdBufferInfoAtPos(bufferable, pos, type, maxBufferHole);\n }\n getFwdBufferInfoAtPos(bufferable, pos, type, maxBufferHole) {\n const bufferInfo = BufferHelper.bufferInfo(bufferable, pos, maxBufferHole);\n // Workaround flaw in getting forward buffer when maxBufferHole is smaller than gap at current pos\n if (bufferInfo.len === 0 && bufferInfo.nextStart !== undefined) {\n const bufferedFragAtPos = this.fragmentTracker.getBufferedFrag(pos, type);\n if (bufferedFragAtPos && (bufferInfo.nextStart <= bufferedFragAtPos.end || bufferedFragAtPos.gap)) {\n const gapDuration = Math.max(Math.min(bufferInfo.nextStart, bufferedFragAtPos.end) - pos, maxBufferHole);\n return BufferHelper.bufferInfo(bufferable, pos, gapDuration);\n }\n }\n return bufferInfo;\n }\n getMaxBufferLength(levelBitrate) {\n const {\n config\n } = this;\n let maxBufLen;\n if (levelBitrate) {\n maxBufLen = Math.max(8 * config.maxBufferSize / levelBitrate, config.maxBufferLength);\n } else {\n maxBufLen = config.maxBufferLength;\n }\n return Math.min(maxBufLen, config.maxMaxBufferLength);\n }\n exceedsMaxBuffer(bufferInfo, maxBufLen, selected) {\n const nextStart = bufferInfo.nextStart;\n if (nextStart && selected.start > nextStart) {\n const bufferedRanges = bufferInfo.buffered;\n if (bufferedRanges) {\n let fullBufferLength = bufferInfo.len;\n const bufferedIndex = bufferInfo.bufferedIndex;\n for (let i = bufferedRanges.length - 1; i > bufferedIndex; i--) {\n if (bufferedRanges[i].start < selected.start) {\n fullBufferLength += bufferedRanges[i].end - bufferedRanges[i].start;\n }\n }\n return fullBufferLength >= maxBufLen;\n }\n }\n return false;\n }\n reduceMaxBufferLength(threshold, fragDuration) {\n const config = this.config;\n const minLength = Math.max(Math.min(threshold - fragDuration, config.maxBufferLength), fragDuration);\n const reducedLength = Math.max(threshold - fragDuration * 3, config.maxMaxBufferLength / 2, minLength);\n if (reducedLength >= minLength) {\n // reduce max buffer length as it might be too high. we do this to avoid loop flushing ...\n config.maxMaxBufferLength = reducedLength;\n this.warn(`Reduce max buffer length to ${reducedLength}s`);\n return true;\n }\n return false;\n }\n getAppendedFrag(position, playlistType = PlaylistLevelType.MAIN) {\n const fragOrPart = this.fragmentTracker ? this.fragmentTracker.getAppendedFrag(position, playlistType) : null;\n if (fragOrPart && 'fragment' in fragOrPart) {\n return fragOrPart.fragment;\n }\n return fragOrPart;\n }\n getNextFragment(pos, levelDetails) {\n const fragments = levelDetails.fragments;\n const fragLen = fragments.length;\n if (!fragLen) {\n return null;\n }\n\n // find fragment index, contiguous with end of buffer position\n const {\n config\n } = this;\n const playlistStart = levelDetails.fragmentStart;\n const canLoadParts = config.lowLatencyMode && !!levelDetails.partList;\n let frag = null;\n if (levelDetails.live) {\n const initialLiveManifestSize = config.initialLiveManifestSize;\n if (fragLen < initialLiveManifestSize) {\n this.warn(`Not enough fragments to start playback (have: ${fragLen}, need: ${initialLiveManifestSize})`);\n return null;\n }\n // The real fragment start times for a live stream are only known after the PTS range for that level is known.\n // In order to discover the range, we load the best matching fragment for that level and demux it.\n // Do not load using live logic if the starting frag is requested - we want to use getFragmentAtPosition() so that\n // we get the fragment matching that start time\n if (!levelDetails.PTSKnown && !this.startFragRequested && this.startPosition === -1 || pos < playlistStart) {\n var _frag;\n if (canLoadParts && !this.loadingParts) {\n this.log(`LL-Part loading ON for initial live fragment`);\n this.loadingParts = true;\n }\n frag = this.getInitialLiveFragment(levelDetails);\n const configValue = this.config.startPosition;\n const mainStart = this.hls.startPosition;\n const liveSyncPosition = this.hls.liveSyncPosition;\n const fragStart = ((_frag = frag) == null ? void 0 : _frag.start) || 0;\n let startPosition;\n let reason;\n if (mainStart !== -1 && mainStart >= playlistStart) {\n startPosition = mainStart;\n reason = mainStart === configValue ? 'config' : 'next load start';\n } else if (liveSyncPosition !== null) {\n startPosition = liveSyncPosition;\n reason = 'live edge';\n } else {\n startPosition = pos;\n reason = 'buffer pos';\n }\n if (startPosition < fragStart) {\n startPosition = fragStart;\n reason = 'live frag start';\n }\n if (startPosition < playlistStart) {\n startPosition = playlistStart;\n reason = 'playlist start';\n }\n if (this.startPosition != startPosition || this.nextLoadPosition != startPosition) {\n this.log(`Setting startPosition to ${startPosition.toFixed(3)} ${mainStart === -1 ? '' : `(from ${configValue}) `}based on ${reason}. live edge: ${liveSyncPosition} live frag start: ${fragStart.toFixed(3)} playlist start: ${playlistStart.toFixed(3)} buffer pos: ${pos}`);\n this.startPosition = this.nextLoadPosition = startPosition;\n }\n }\n } else if (pos <= playlistStart) {\n // VoD playlist: if loadPosition before start of playlist, load first fragment\n frag = fragments[0];\n }\n\n // If we haven't run into any special cases already, just load the fragment most closely matching the requested position\n if (!frag) {\n const end = this.loadingParts ? levelDetails.partEnd : levelDetails.fragmentEnd;\n frag = this.getFragmentAtPosition(pos, end, levelDetails);\n }\n let programFrag = this.filterReplacedPrimary(frag, levelDetails);\n if (!programFrag && frag) {\n const curSNIdx = frag.sn - levelDetails.startSN;\n programFrag = this.filterReplacedPrimary(fragments[curSNIdx + 1] || null, levelDetails);\n }\n return this.mapToInitFragWhenRequired(programFrag);\n }\n isLoopLoading(frag, targetBufferTime) {\n if (this.nextLoadPosition <= targetBufferTime) {\n return false;\n }\n const trackerState = this.fragmentTracker.getState(frag);\n return trackerState === FragmentState.OK || trackerState === FragmentState.PARTIAL && !!frag.gap;\n }\n getNextFragmentLoopLoading(frag, levelDetails, bufferInfo, playlistType, maxBufLen) {\n let nextFragment = null;\n if (frag.gap) {\n nextFragment = this.getNextFragment(this.nextLoadPosition, levelDetails);\n if (nextFragment && !nextFragment.gap && bufferInfo.nextStart) {\n // Media buffered after GAP tags should not make the next buffer timerange exceed forward buffer length\n const nextbufferInfo = this.getFwdBufferInfoAtPos(this.mediaBuffer ? this.mediaBuffer : this.media, bufferInfo.nextStart, playlistType, 0);\n if (nextbufferInfo !== null && bufferInfo.len + nextbufferInfo.len >= maxBufLen) {\n // Returning here might result in not finding an audio and video candiate to skip to\n const sn = nextFragment.sn;\n if (this.loopSn !== sn) {\n this.log(`buffer full after gaps in \"${playlistType}\" playlist starting at sn: ${sn}`);\n this.loopSn = sn;\n }\n return null;\n }\n }\n }\n this.loopSn = undefined;\n return nextFragment;\n }\n get primaryPrefetch() {\n if (interstitialsEnabled(this.config)) {\n var _this$hls$interstitia;\n const playingInterstitial = (_this$hls$interstitia = this.hls.interstitialsManager) == null || (_this$hls$interstitia = _this$hls$interstitia.playingItem) == null ? void 0 : _this$hls$interstitia.event;\n if (playingInterstitial) {\n return true;\n }\n }\n return false;\n }\n filterReplacedPrimary(frag, details) {\n if (!frag) {\n return frag;\n }\n if (interstitialsEnabled(this.config) && frag.type !== PlaylistLevelType.SUBTITLE) {\n // Do not load fragments outside the buffering schedule segment\n const interstitials = this.hls.interstitialsManager;\n const bufferingItem = interstitials == null ? void 0 : interstitials.bufferingItem;\n if (bufferingItem) {\n const bufferingInterstitial = bufferingItem.event;\n if (bufferingInterstitial) {\n // Do not stream fragments while buffering Interstitial Events (except for overlap at the start)\n if (bufferingInterstitial.appendInPlace || Math.abs(frag.start - bufferingItem.start) > 1 || bufferingItem.start === 0) {\n return null;\n }\n } else {\n // Limit fragment loading to media in schedule item\n if (frag.end <= bufferingItem.start && (details == null ? void 0 : details.live) === false) {\n // fragment ends by schedule item start\n // this.fragmentTracker.fragBuffered(frag, true);\n return null;\n }\n if (frag.start > bufferingItem.end && bufferingItem.nextEvent) {\n // fragment is past schedule item end\n // allow some overflow when not appending in place to prevent stalls\n if (bufferingItem.nextEvent.appendInPlace || frag.start - bufferingItem.end > 1) {\n return null;\n }\n }\n }\n }\n // Skip loading of fragments that overlap completely with appendInPlace interstitials\n const playerQueue = interstitials == null ? void 0 : interstitials.playerQueue;\n if (playerQueue) {\n for (let i = playerQueue.length; i--;) {\n const interstitial = playerQueue[i].interstitial;\n if (interstitial.appendInPlace && frag.start >= interstitial.startTime && frag.end <= interstitial.resumeTime) {\n return null;\n }\n }\n }\n }\n return frag;\n }\n mapToInitFragWhenRequired(frag) {\n // If an initSegment is present, it must be buffered first\n if (frag != null && frag.initSegment && !frag.initSegment.data && !this.bitrateTest) {\n return frag.initSegment;\n }\n return frag;\n }\n getNextPart(partList, frag, targetBufferTime) {\n let nextPart = -1;\n let contiguous = false;\n let independentAttrOmitted = true;\n for (let i = 0, len = partList.length; i < len; i++) {\n const part = partList[i];\n independentAttrOmitted = independentAttrOmitted && !part.independent;\n if (nextPart > -1 && targetBufferTime < part.start) {\n break;\n }\n const loaded = part.loaded;\n if (loaded) {\n nextPart = -1;\n } else if (contiguous || (part.independent || independentAttrOmitted) && part.fragment === frag) {\n if (part.fragment !== frag) {\n this.warn(`Need buffer at ${targetBufferTime} but next unloaded part starts at ${part.start}`);\n }\n nextPart = i;\n }\n contiguous = loaded;\n }\n return nextPart;\n }\n loadedEndOfParts(partList, targetBufferTime) {\n let part;\n for (let i = partList.length; i--;) {\n part = partList[i];\n if (!part.loaded) {\n return false;\n }\n if (targetBufferTime > part.start) {\n return true;\n }\n }\n return false;\n }\n\n /*\n This method is used find the best matching first fragment for a live playlist. This fragment is used to calculate the\n \"sliding\" of the playlist, which is its offset from the start of playback. After sliding we can compute the real\n start and end times for each fragment in the playlist (after which this method will not need to be called).\n */\n getInitialLiveFragment(levelDetails) {\n const fragments = levelDetails.fragments;\n const fragPrevious = this.fragPrevious;\n let frag = null;\n if (fragPrevious) {\n if (levelDetails.hasProgramDateTime) {\n // Prefer using PDT, because it can be accurate enough to choose the correct fragment without knowing the level sliding\n frag = findFragmentByPDT(fragments, fragPrevious.endProgramDateTime, this.config.maxFragLookUpTolerance);\n if (frag) {\n this.log(`Live playlist, switching playlist, load frag with same PDT: ${fragPrevious.programDateTime}`);\n }\n }\n if (!frag) {\n // SN does not need to be accurate between renditions, but depending on the packaging it may be so.\n const targetSN = fragPrevious.sn + 1;\n if (targetSN >= levelDetails.startSN && targetSN <= levelDetails.endSN) {\n const fragNext = fragments[targetSN - levelDetails.startSN];\n // Ensure that we're staying within the continuity range, since PTS resets upon a new range\n if (fragPrevious.cc === fragNext.cc) {\n frag = fragNext;\n this.log(`Live playlist, switching playlist, load frag with next SN: ${frag.sn}`);\n }\n }\n // It's important to stay within the continuity range if available; otherwise the fragments in the playlist\n // will have the wrong start times\n if (!frag) {\n frag = findNearestWithCC(levelDetails, fragPrevious.cc, fragPrevious.end);\n if (frag) {\n this.log(`Live playlist, switching playlist, load frag with same CC: ${frag.sn}`);\n }\n }\n }\n } else {\n // Find a new start fragment when fragPrevious is null\n const liveStart = this.hls.liveSyncPosition;\n if (liveStart !== null) {\n frag = this.getFragmentAtPosition(liveStart, this.bitrateTest ? levelDetails.fragmentEnd : levelDetails.edge, levelDetails);\n }\n }\n return frag;\n }\n\n /*\n This method finds the best matching fragment given the provided position.\n */\n getFragmentAtPosition(bufferEnd, end, levelDetails) {\n const {\n config\n } = this;\n let {\n fragPrevious\n } = this;\n let {\n fragments,\n endSN\n } = levelDetails;\n const {\n fragmentHint\n } = levelDetails;\n const {\n maxFragLookUpTolerance\n } = config;\n const partList = levelDetails.partList;\n const loadingParts = !!(this.loadingParts && partList != null && partList.length && fragmentHint);\n if (loadingParts && !this.bitrateTest && partList[partList.length - 1].fragment.sn === fragmentHint.sn) {\n // Include incomplete fragment with parts at end\n fragments = fragments.concat(fragmentHint);\n endSN = fragmentHint.sn;\n }\n let frag;\n if (bufferEnd < end) {\n var _this$media3;\n const backwardSeek = bufferEnd < this.lastCurrentTime;\n const lookupTolerance = backwardSeek || bufferEnd > end - maxFragLookUpTolerance || (_this$media3 = this.media) != null && _this$media3.paused || !this.startFragRequested ? 0 : maxFragLookUpTolerance;\n // Remove the tolerance if it would put the bufferEnd past the actual end of stream\n // Uses buffer and sequence number to calculate switch segment (required if using EXT-X-DISCONTINUITY-SEQUENCE)\n frag = findFragmentByPTS(fragPrevious, fragments, bufferEnd, lookupTolerance);\n } else {\n // reach end of playlist\n frag = fragments[fragments.length - 1];\n }\n if (frag) {\n const curSNIdx = frag.sn - levelDetails.startSN;\n // Move fragPrevious forward to support forcing the next fragment to load\n // when the buffer catches up to a previously buffered range.\n const fragState = this.fragmentTracker.getState(frag);\n if (fragState === FragmentState.OK || fragState === FragmentState.PARTIAL && frag.gap) {\n fragPrevious = frag;\n }\n if (fragPrevious && frag.sn === fragPrevious.sn && (!loadingParts || partList[0].fragment.sn > frag.sn || !levelDetails.live)) {\n // Force the next fragment to load if the previous one was already selected. This can occasionally happen with\n // non-uniform fragment durations\n const sameLevel = frag.level === fragPrevious.level;\n if (sameLevel) {\n const nextFrag = fragments[curSNIdx + 1];\n if (frag.sn < endSN && this.fragmentTracker.getState(nextFrag) !== FragmentState.OK) {\n frag = nextFrag;\n } else {\n frag = null;\n }\n }\n }\n }\n return frag;\n }\n alignPlaylists(details, previousDetails, switchDetails) {\n // TODO: If not for `shouldAlignOnDiscontinuities` requiring fragPrevious.cc,\n // this could all go in level-helper mergeDetails()\n const length = details.fragments.length;\n if (!length) {\n this.warn(`No fragments in live playlist`);\n return 0;\n }\n const slidingStart = details.fragmentStart;\n const firstLevelLoad = !previousDetails;\n const aligned = details.alignedSliding && isFiniteNumber(slidingStart);\n if (firstLevelLoad || !aligned && !slidingStart) {\n alignStream(switchDetails, details);\n const alignedSlidingStart = details.fragmentStart;\n this.log(`Live playlist sliding: ${alignedSlidingStart.toFixed(2)} start-sn: ${previousDetails ? previousDetails.startSN : 'na'}->${details.startSN} fragments: ${length}`);\n return alignedSlidingStart;\n }\n return slidingStart;\n }\n waitForCdnTuneIn(details) {\n // Wait for Low-Latency CDN Tune-in to get an updated playlist\n const advancePartLimit = 3;\n return details.live && details.canBlockReload && details.partTarget && details.tuneInGoal > Math.max(details.partHoldBack, details.partTarget * advancePartLimit);\n }\n setStartPosition(details, sliding) {\n // compute start position if set to -1. use it straight away if value is defined\n let startPosition = this.startPosition;\n if (startPosition < sliding) {\n startPosition = -1;\n }\n const timelineOffset = this.timelineOffset;\n if (startPosition === -1) {\n // Use Playlist EXT-X-START:TIME-OFFSET when set\n // Prioritize Multivariant Playlist offset so that main, audio, and subtitle stream-controller start times match\n const offsetInMultivariantPlaylist = this.startTimeOffset !== null;\n const startTimeOffset = offsetInMultivariantPlaylist ? this.startTimeOffset : details.startTimeOffset;\n if (startTimeOffset !== null && isFiniteNumber(startTimeOffset)) {\n startPosition = sliding + startTimeOffset;\n if (startTimeOffset < 0) {\n startPosition += details.edge;\n }\n startPosition = Math.min(Math.max(sliding, startPosition), sliding + details.totalduration);\n this.log(`Setting startPosition to ${startPosition} for start time offset ${startTimeOffset} found in ${offsetInMultivariantPlaylist ? 'multivariant' : 'media'} playlist`);\n this.startPosition = startPosition;\n } else if (details.live) {\n // Leave this.startPosition at -1, so that we can use `getInitialLiveFragment` logic when startPosition has\n // not been specified via the config or an as an argument to startLoad (#3736).\n startPosition = this.hls.liveSyncPosition || sliding;\n this.log(`Setting startPosition to -1 to start at live edge ${startPosition}`);\n this.startPosition = -1;\n } else {\n this.log(`setting startPosition to 0 by default`);\n this.startPosition = startPosition = 0;\n }\n this.lastCurrentTime = startPosition + timelineOffset;\n }\n this.nextLoadPosition = startPosition + timelineOffset;\n }\n getLoadPosition() {\n var _this$hls;\n const {\n media\n } = this;\n // if we have not yet loaded any fragment, start loading from start position\n let pos = 0;\n if ((_this$hls = this.hls) != null && _this$hls.hasEnoughToStart && media) {\n pos = media.currentTime;\n } else if (this.nextLoadPosition >= 0) {\n pos = this.nextLoadPosition;\n }\n return pos;\n }\n handleFragLoadAborted(frag, part) {\n if (this.transmuxer && frag.type === this.playlistType && isMediaFragment(frag) && frag.stats.aborted) {\n this.log(`Fragment ${frag.sn}${part ? ' part ' + part.index : ''} of ${this.playlistLabel()} ${frag.level} was aborted`);\n this.resetFragmentLoading(frag);\n }\n }\n resetFragmentLoading(frag) {\n if (!this.fragCurrent || !this.fragContextChanged(frag) && this.state !== State.FRAG_LOADING_WAITING_RETRY) {\n this.state = State.IDLE;\n }\n }\n onFragmentOrKeyLoadError(filterType, data) {\n var _this$hls$latestLevel;\n if (data.chunkMeta && !data.frag) {\n const context = this.getCurrentContext(data.chunkMeta);\n if (context) {\n data.frag = context.frag;\n }\n }\n const frag = data.frag;\n // Handle frag error related to caller's filterType\n if (!frag || frag.type !== filterType || !this.levels) {\n return;\n }\n if (this.fragContextChanged(frag)) {\n var _this$fragCurrent;\n this.warn(`Frag load error must match current frag to retry ${frag.url} > ${(_this$fragCurrent = this.fragCurrent) == null ? void 0 : _this$fragCurrent.url}`);\n return;\n }\n const gapTagEncountered = data.details === ErrorDetails.FRAG_GAP;\n if (gapTagEncountered) {\n this.fragmentTracker.fragBuffered(frag, true);\n }\n // keep retrying until the limit will be reached\n const errorAction = data.errorAction;\n if (!errorAction) {\n this.state = State.ERROR;\n return;\n }\n const {\n action,\n flags,\n retryCount = 0,\n retryConfig\n } = errorAction;\n const couldRetry = !!retryConfig;\n const retry = couldRetry && action === NetworkErrorAction.RetryRequest;\n const noAlternate = couldRetry && !errorAction.resolved && flags === ErrorActionFlags.MoveAllAlternatesMatchingHost;\n const live = (_this$hls$latestLevel = this.hls.latestLevelDetails) == null ? void 0 : _this$hls$latestLevel.live;\n if (!retry && noAlternate && isMediaFragment(frag) && !frag.endList && live && !isUnusableKeyError(data)) {\n this.resetFragmentErrors(filterType);\n this.treatAsGap(frag);\n errorAction.resolved = true;\n } else if ((retry || noAlternate) && retryCount < retryConfig.maxNumRetry) {\n var _data$response;\n const offlineStatus = offlineHttpStatus((_data$response = data.response) == null ? void 0 : _data$response.code);\n const delay = getRetryDelay(retryConfig, retryCount);\n this.resetStartWhenNotLoaded();\n this.retryDate = self.performance.now() + delay;\n this.state = State.FRAG_LOADING_WAITING_RETRY;\n errorAction.resolved = true;\n if (offlineStatus) {\n this.log(`Waiting for connection (offline)`);\n this.retryDate = Infinity;\n data.reason = 'offline';\n return;\n }\n this.warn(`Fragment ${frag.sn} of ${filterType} ${frag.level} errored with ${data.details}, retrying loading ${retryCount + 1}/${retryConfig.maxNumRetry} in ${delay}ms`);\n } else if (retryConfig) {\n this.resetFragmentErrors(filterType);\n if (retryCount < retryConfig.maxNumRetry) {\n // Network retry is skipped when level switch is preferred\n if (!gapTagEncountered && action !== NetworkErrorAction.RemoveAlternatePermanently) {\n errorAction.resolved = true;\n }\n } else {\n this.warn(`${data.details} reached or exceeded max retry (${retryCount})`);\n return;\n }\n } else if (action === NetworkErrorAction.SendAlternateToPenaltyBox) {\n this.state = State.WAITING_LEVEL;\n } else {\n this.state = State.ERROR;\n }\n // Perform next async tick sooner to speed up error action resolution\n this.tickImmediate();\n }\n checkRetryDate() {\n const now = self.performance.now();\n const retryDate = this.retryDate;\n // if current time is gt than retryDate, or if media seeking let's switch to IDLE state to retry loading\n const waitingForConnection = retryDate === Infinity;\n if (!retryDate || now >= retryDate || waitingForConnection && !offlineHttpStatus(0)) {\n if (waitingForConnection) {\n this.log(`Connection restored (online)`);\n }\n this.resetStartWhenNotLoaded();\n this.state = State.IDLE;\n }\n }\n reduceLengthAndFlushBuffer(data) {\n // if in appending state\n if (this.state === State.PARSING || this.state === State.PARSED) {\n const frag = data.frag;\n const playlistType = data.parent;\n const bufferedInfo = this.getFwdBufferInfo(this.mediaBuffer, playlistType);\n // 0.5 : tolerance needed as some browsers stalls playback before reaching buffered end\n // reduce max buf len if current position is buffered\n const buffered = bufferedInfo && bufferedInfo.len > 0.5;\n if (buffered) {\n this.reduceMaxBufferLength(bufferedInfo.len, (frag == null ? void 0 : frag.duration) || 10);\n }\n const flushBuffer = !buffered;\n if (flushBuffer) {\n // current position is not buffered, but browser is still complaining about buffer full error\n // this happens on IE/Edge, refer to https://github.com/video-dev/hls.js/pull/708\n // in that case flush the whole audio buffer to recover\n this.warn(`Buffer full error while media.currentTime (${this.getLoadPosition()}) is not buffered, flush ${playlistType} buffer`);\n }\n if (frag) {\n this.fragmentTracker.removeFragment(frag);\n this.nextLoadPosition = frag.start;\n }\n this.resetLoadingState();\n return flushBuffer;\n }\n return false;\n }\n resetFragmentErrors(filterType) {\n if (filterType === PlaylistLevelType.AUDIO) {\n // Reset current fragment since audio track audio is essential and may not have a fail-over track\n this.fragCurrent = null;\n }\n // Fragment errors that result in a level switch or redundant fail-over\n // should reset the stream controller state to idle\n if (!this.hls.hasEnoughToStart) {\n this.startFragRequested = false;\n }\n if (this.state !== State.STOPPED) {\n this.state = State.IDLE;\n }\n }\n afterBufferFlushed(media, bufferType, playlistType) {\n if (!media) {\n return;\n }\n // After successful buffer flushing, filter flushed fragments from bufferedFrags use mediaBuffered instead of media\n // (so that we will check against video.buffered ranges in case of alt audio track)\n const bufferedTimeRanges = BufferHelper.getBuffered(media);\n this.fragmentTracker.detectEvictedFragments(bufferType, bufferedTimeRanges, playlistType);\n if (this.state === State.ENDED) {\n this.resetLoadingState();\n }\n }\n resetLoadingState() {\n this.log('Reset loading state');\n this.fragCurrent = null;\n this.fragPrevious = null;\n if (this.state !== State.STOPPED) {\n this.state = State.IDLE;\n }\n }\n resetStartWhenNotLoaded() {\n // if loadedmetadata is not set, it means that first frag request failed\n // in that case, reset startFragRequested flag\n if (!this.hls.hasEnoughToStart) {\n this.startFragRequested = false;\n const level = this.levelLastLoaded;\n const details = level ? level.details : null;\n if (details != null && details.live) {\n // Update the start position and return to IDLE to recover live start\n this.log(`resetting startPosition for live start`);\n this.startPosition = -1;\n this.setStartPosition(details, details.fragmentStart);\n this.resetLoadingState();\n } else {\n this.nextLoadPosition = this.startPosition;\n }\n }\n }\n resetWhenMissingContext(chunkMeta) {\n this.log(`Loading context changed while buffering sn ${chunkMeta.sn} of ${this.playlistLabel()} ${chunkMeta.level === -1 ? '<removed>' : chunkMeta.level}. This chunk will not be buffered.`);\n this.removeUnbufferedFrags();\n this.resetStartWhenNotLoaded();\n this.resetLoadingState();\n }\n removeUnbufferedFrags(start = 0) {\n this.fragmentTracker.removeFragmentsInRange(start, Infinity, this.playlistType, false, true);\n }\n updateLevelTiming(frag, part, level, partial) {\n const details = level.details;\n if (!details) {\n this.warn('level.details undefined');\n return;\n }\n const parsed = Object.keys(frag.elementaryStreams).reduce((result, type) => {\n const info = frag.elementaryStreams[type];\n if (info) {\n const parsedDuration = info.endPTS - info.startPTS;\n if (parsedDuration <= 0) {\n // Destroy the transmuxer after it's next time offset failed to advance because duration was <= 0.\n // The new transmuxer will be configured with a time offset matching the next fragment start,\n // preventing the timeline from shifting.\n this.warn(`Could not parse fragment ${frag.sn} ${type} duration reliably (${parsedDuration})`);\n return result || false;\n }\n const drift = partial ? 0 : updateFragPTSDTS(details, frag, info.startPTS, info.endPTS, info.startDTS, info.endDTS, this);\n this.hls.trigger(Events.LEVEL_PTS_UPDATED, {\n details,\n level,\n drift,\n type,\n frag,\n start: info.startPTS,\n end: info.endPTS\n });\n return true;\n }\n return result;\n }, false);\n if (!parsed) {\n var _this$transmuxer;\n const mediaNotFound = ((_this$transmuxer = this.transmuxer) == null ? void 0 : _this$transmuxer.error) === null;\n if (level.fragmentError === 0 || mediaNotFound && (level.fragmentError < 2 || frag.endList)) {\n // Mark and track the odd (or last) empty segment as a gap to avoid reloading\n this.treatAsGap(frag, level);\n }\n if (mediaNotFound) {\n const error = new Error(`Found no media in fragment ${frag.sn} of ${this.playlistLabel()} ${frag.level} resetting transmuxer to fallback to playlist timing`);\n this.warn(error.message);\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.FRAG_PARSING_ERROR,\n fatal: false,\n error,\n frag,\n reason: `Found no media in msn ${frag.sn} of ${this.playlistLabel()} \"${level.url}\"`\n });\n if (!this.hls) {\n return;\n }\n this.resetTransmuxer();\n }\n // For this error fallthrough. Marking parsed will allow advancing to next fragment.\n }\n this.state = State.PARSED;\n this.log(`Parsed ${frag.type} sn: ${frag.sn}${part ? ' part: ' + part.index : ''} of ${this.fragInfo(frag, false, part)})`);\n this.hls.trigger(Events.FRAG_PARSED, {\n frag,\n part\n });\n }\n playlistLabel() {\n return this.playlistType === PlaylistLevelType.MAIN ? 'level' : 'track';\n }\n fragInfo(frag, pts = true, part) {\n var _ref, _ref2;\n return `${this.playlistLabel()} ${frag.level} (${part ? 'part' : 'frag'}:[${((_ref = pts && !part ? frag.startPTS : (part || frag).start) != null ? _ref : NaN).toFixed(3)}-${((_ref2 = pts && !part ? frag.endPTS : (part || frag).end) != null ? _ref2 : NaN).toFixed(3)}]${part && frag.type === 'main' ? 'INDEPENDENT=' + (part.independent ? 'YES' : 'NO') : ''}`;\n }\n treatAsGap(frag, level) {\n if (level) {\n level.fragmentError++;\n }\n frag.gap = true;\n this.fragmentTracker.removeFragment(frag);\n this.fragmentTracker.fragBuffered(frag, true);\n }\n resetTransmuxer() {\n var _this$transmuxer2;\n (_this$transmuxer2 = this.transmuxer) == null || _this$transmuxer2.reset();\n }\n recoverWorkerError(data) {\n if (data.event === 'demuxerWorker') {\n this.fragmentTracker.removeAllFragments();\n if (this.transmuxer) {\n this.transmuxer.destroy();\n this.transmuxer = null;\n }\n this.resetStartWhenNotLoaded();\n this.resetLoadingState();\n }\n }\n set state(nextState) {\n const previousState = this._state;\n if (previousState !== nextState) {\n this._state = nextState;\n this.log(`${previousState}->${nextState}`);\n }\n }\n get state() {\n return this._state;\n }\n}\nfunction interstitialsEnabled(config) {\n return !!config.interstitialsController && config.enableInterstitialPlayback !== false;\n}\n\nclass ChunkCache {\n constructor() {\n this.chunks = [];\n this.dataLength = 0;\n }\n push(chunk) {\n this.chunks.push(chunk);\n this.dataLength += chunk.length;\n }\n flush() {\n const {\n chunks,\n dataLength\n } = this;\n let result;\n if (!chunks.length) {\n return new Uint8Array(0);\n } else if (chunks.length === 1) {\n result = chunks[0];\n } else {\n result = concatUint8Arrays(chunks, dataLength);\n }\n this.reset();\n return result;\n }\n reset() {\n this.chunks.length = 0;\n this.dataLength = 0;\n }\n}\nfunction concatUint8Arrays(chunks, dataLength) {\n const result = new Uint8Array(dataLength);\n let offset = 0;\n for (let i = 0; i < chunks.length; i++) {\n const chunk = chunks[i];\n result.set(chunk, offset);\n offset += chunk.length;\n }\n return result;\n}\n\nvar eventemitter3 = {exports: {}};\n\nvar hasRequiredEventemitter3;\n\nfunction requireEventemitter3 () {\n\tif (hasRequiredEventemitter3) return eventemitter3.exports;\n\thasRequiredEventemitter3 = 1;\n\t(function (module) {\n\n\t\tvar has = Object.prototype.hasOwnProperty\n\t\t , prefix = '~';\n\n\t\t/**\n\t\t * Constructor to create a storage for our `EE` objects.\n\t\t * An `Events` instance is a plain object whose properties are event names.\n\t\t *\n\t\t * @constructor\n\t\t * @private\n\t\t */\n\t\tfunction Events() {}\n\n\t\t//\n\t\t// We try to not inherit from `Object.prototype`. In some engines creating an\n\t\t// instance in this way is faster than calling `Object.create(null)` directly.\n\t\t// If `Object.create(null)` is not supported we prefix the event names with a\n\t\t// character to make sure that the built-in object properties are not\n\t\t// overridden or used as an attack vector.\n\t\t//\n\t\tif (Object.create) {\n\t\t Events.prototype = Object.create(null);\n\n\t\t //\n\t\t // This hack is needed because the `__proto__` property is still inherited in\n\t\t // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n\t\t //\n\t\t if (!new Events().__proto__) prefix = false;\n\t\t}\n\n\t\t/**\n\t\t * Representation of a single event listener.\n\t\t *\n\t\t * @param {Function} fn The listener function.\n\t\t * @param {*} context The context to invoke the listener with.\n\t\t * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n\t\t * @constructor\n\t\t * @private\n\t\t */\n\t\tfunction EE(fn, context, once) {\n\t\t this.fn = fn;\n\t\t this.context = context;\n\t\t this.once = once || false;\n\t\t}\n\n\t\t/**\n\t\t * Add a listener for a given event.\n\t\t *\n\t\t * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n\t\t * @param {(String|Symbol)} event The event name.\n\t\t * @param {Function} fn The listener function.\n\t\t * @param {*} context The context to invoke the listener with.\n\t\t * @param {Boolean} once Specify if the listener is a one-time listener.\n\t\t * @returns {EventEmitter}\n\t\t * @private\n\t\t */\n\t\tfunction addListener(emitter, event, fn, context, once) {\n\t\t if (typeof fn !== 'function') {\n\t\t throw new TypeError('The listener must be a function');\n\t\t }\n\n\t\t var listener = new EE(fn, context || emitter, once)\n\t\t , evt = prefix ? prefix + event : event;\n\n\t\t if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n\t\t else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n\t\t else emitter._events[evt] = [emitter._events[evt], listener];\n\n\t\t return emitter;\n\t\t}\n\n\t\t/**\n\t\t * Clear event by name.\n\t\t *\n\t\t * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n\t\t * @param {(String|Symbol)} evt The Event name.\n\t\t * @private\n\t\t */\n\t\tfunction clearEvent(emitter, evt) {\n\t\t if (--emitter._eventsCount === 0) emitter._events = new Events();\n\t\t else delete emitter._events[evt];\n\t\t}\n\n\t\t/**\n\t\t * Minimal `EventEmitter` interface that is molded against the Node.js\n\t\t * `EventEmitter` interface.\n\t\t *\n\t\t * @constructor\n\t\t * @public\n\t\t */\n\t\tfunction EventEmitter() {\n\t\t this._events = new Events();\n\t\t this._eventsCount = 0;\n\t\t}\n\n\t\t/**\n\t\t * Return an array listing the events for which the emitter has registered\n\t\t * listeners.\n\t\t *\n\t\t * @returns {Array}\n\t\t * @public\n\t\t */\n\t\tEventEmitter.prototype.eventNames = function eventNames() {\n\t\t var names = []\n\t\t , events\n\t\t , name;\n\n\t\t if (this._eventsCount === 0) return names;\n\n\t\t for (name in (events = this._events)) {\n\t\t if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n\t\t }\n\n\t\t if (Object.getOwnPropertySymbols) {\n\t\t return names.concat(Object.getOwnPropertySymbols(events));\n\t\t }\n\n\t\t return names;\n\t\t};\n\n\t\t/**\n\t\t * Return the listeners registered for a given event.\n\t\t *\n\t\t * @param {(String|Symbol)} event The event name.\n\t\t * @returns {Array} The registered listeners.\n\t\t * @public\n\t\t */\n\t\tEventEmitter.prototype.listeners = function listeners(event) {\n\t\t var evt = prefix ? prefix + event : event\n\t\t , handlers = this._events[evt];\n\n\t\t if (!handlers) return [];\n\t\t if (handlers.fn) return [handlers.fn];\n\n\t\t for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n\t\t ee[i] = handlers[i].fn;\n\t\t }\n\n\t\t return ee;\n\t\t};\n\n\t\t/**\n\t\t * Return the number of listeners listening to a given event.\n\t\t *\n\t\t * @param {(String|Symbol)} event The event name.\n\t\t * @returns {Number} The number of listeners.\n\t\t * @public\n\t\t */\n\t\tEventEmitter.prototype.listenerCount = function listenerCount(event) {\n\t\t var evt = prefix ? prefix + event : event\n\t\t , listeners = this._events[evt];\n\n\t\t if (!listeners) return 0;\n\t\t if (listeners.fn) return 1;\n\t\t return listeners.length;\n\t\t};\n\n\t\t/**\n\t\t * Calls each of the listeners registered for a given event.\n\t\t *\n\t\t * @param {(String|Symbol)} event The event name.\n\t\t * @returns {Boolean} `true` if the event had listeners, else `false`.\n\t\t * @public\n\t\t */\n\t\tEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n\t\t var evt = prefix ? prefix + event : event;\n\n\t\t if (!this._events[evt]) return false;\n\n\t\t var listeners = this._events[evt]\n\t\t , len = arguments.length\n\t\t , args\n\t\t , i;\n\n\t\t if (listeners.fn) {\n\t\t if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n\t\t switch (len) {\n\t\t case 1: return listeners.fn.call(listeners.context), true;\n\t\t case 2: return listeners.fn.call(listeners.context, a1), true;\n\t\t case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n\t\t case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n\t\t case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n\t\t case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n\t\t }\n\n\t\t for (i = 1, args = new Array(len -1); i < len; i++) {\n\t\t args[i - 1] = arguments[i];\n\t\t }\n\n\t\t listeners.fn.apply(listeners.context, args);\n\t\t } else {\n\t\t var length = listeners.length\n\t\t , j;\n\n\t\t for (i = 0; i < length; i++) {\n\t\t if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n\t\t switch (len) {\n\t\t case 1: listeners[i].fn.call(listeners[i].context); break;\n\t\t case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n\t\t case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n\t\t case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n\t\t default:\n\t\t if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n\t\t args[j - 1] = arguments[j];\n\t\t }\n\n\t\t listeners[i].fn.apply(listeners[i].context, args);\n\t\t }\n\t\t }\n\t\t }\n\n\t\t return true;\n\t\t};\n\n\t\t/**\n\t\t * Add a listener for a given event.\n\t\t *\n\t\t * @param {(String|Symbol)} event The event name.\n\t\t * @param {Function} fn The listener function.\n\t\t * @param {*} [context=this] The context to invoke the listener with.\n\t\t * @returns {EventEmitter} `this`.\n\t\t * @public\n\t\t */\n\t\tEventEmitter.prototype.on = function on(event, fn, context) {\n\t\t return addListener(this, event, fn, context, false);\n\t\t};\n\n\t\t/**\n\t\t * Add a one-time listener for a given event.\n\t\t *\n\t\t * @param {(String|Symbol)} event The event name.\n\t\t * @param {Function} fn The listener function.\n\t\t * @param {*} [context=this] The context to invoke the listener with.\n\t\t * @returns {EventEmitter} `this`.\n\t\t * @public\n\t\t */\n\t\tEventEmitter.prototype.once = function once(event, fn, context) {\n\t\t return addListener(this, event, fn, context, true);\n\t\t};\n\n\t\t/**\n\t\t * Remove the listeners of a given event.\n\t\t *\n\t\t * @param {(String|Symbol)} event The event name.\n\t\t * @param {Function} fn Only remove the listeners that match this function.\n\t\t * @param {*} context Only remove the listeners that have this context.\n\t\t * @param {Boolean} once Only remove one-time listeners.\n\t\t * @returns {EventEmitter} `this`.\n\t\t * @public\n\t\t */\n\t\tEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n\t\t var evt = prefix ? prefix + event : event;\n\n\t\t if (!this._events[evt]) return this;\n\t\t if (!fn) {\n\t\t clearEvent(this, evt);\n\t\t return this;\n\t\t }\n\n\t\t var listeners = this._events[evt];\n\n\t\t if (listeners.fn) {\n\t\t if (\n\t\t listeners.fn === fn &&\n\t\t (!once || listeners.once) &&\n\t\t (!context || listeners.context === context)\n\t\t ) {\n\t\t clearEvent(this, evt);\n\t\t }\n\t\t } else {\n\t\t for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n\t\t if (\n\t\t listeners[i].fn !== fn ||\n\t\t (once && !listeners[i].once) ||\n\t\t (context && listeners[i].context !== context)\n\t\t ) {\n\t\t events.push(listeners[i]);\n\t\t }\n\t\t }\n\n\t\t //\n\t\t // Reset the array, or remove it completely if we have no more listeners.\n\t\t //\n\t\t if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n\t\t else clearEvent(this, evt);\n\t\t }\n\n\t\t return this;\n\t\t};\n\n\t\t/**\n\t\t * Remove all listeners, or those of the specified event.\n\t\t *\n\t\t * @param {(String|Symbol)} [event] The event name.\n\t\t * @returns {EventEmitter} `this`.\n\t\t * @public\n\t\t */\n\t\tEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n\t\t var evt;\n\n\t\t if (event) {\n\t\t evt = prefix ? prefix + event : event;\n\t\t if (this._events[evt]) clearEvent(this, evt);\n\t\t } else {\n\t\t this._events = new Events();\n\t\t this._eventsCount = 0;\n\t\t }\n\n\t\t return this;\n\t\t};\n\n\t\t//\n\t\t// Alias methods names because people roll like that.\n\t\t//\n\t\tEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\n\t\tEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n\t\t//\n\t\t// Expose the prefix.\n\t\t//\n\t\tEventEmitter.prefixed = prefix;\n\n\t\t//\n\t\t// Allow `EventEmitter` to be imported as module namespace.\n\t\t//\n\t\tEventEmitter.EventEmitter = EventEmitter;\n\n\t\t//\n\t\t// Expose the module.\n\t\t//\n\t\t{\n\t\t module.exports = EventEmitter;\n\t\t} \n\t} (eventemitter3));\n\treturn eventemitter3.exports;\n}\n\nvar eventemitter3Exports = requireEventemitter3();\nvar EventEmitter = /*@__PURE__*/getDefaultExportFromCjs(eventemitter3Exports);\n\nconst version = \"1.6.16\";\n\n// ensure the worker ends up in the bundle\n// If the worker should not be included this gets aliased to empty.js\nconst workerStore = {};\nfunction hasUMDWorker() {\n return typeof __HLS_WORKER_BUNDLE__ === 'function';\n}\nfunction injectWorker() {\n const workerContext = workerStore[version];\n if (workerContext) {\n workerContext.clientCount++;\n return workerContext;\n }\n const blob = new self.Blob([`var exports={};var module={exports:exports};function define(f){f()};define.amd=true;(${__HLS_WORKER_BUNDLE__.toString()})(true);`], {\n type: 'text/javascript'\n });\n const objectURL = self.URL.createObjectURL(blob);\n const worker = new self.Worker(objectURL);\n const result = {\n worker,\n objectURL,\n clientCount: 1\n };\n workerStore[version] = result;\n return result;\n}\nfunction loadWorker(path) {\n const workerContext = workerStore[path];\n if (workerContext) {\n workerContext.clientCount++;\n return workerContext;\n }\n const scriptURL = new self.URL(path, self.location.href).href;\n const worker = new self.Worker(scriptURL);\n const result = {\n worker,\n scriptURL,\n clientCount: 1\n };\n workerStore[path] = result;\n return result;\n}\nfunction removeWorkerFromStore(path) {\n const workerContext = workerStore[path || version];\n if (workerContext) {\n const clientCount = workerContext.clientCount--;\n if (clientCount === 1) {\n const {\n worker,\n objectURL\n } = workerContext;\n delete workerStore[path || version];\n if (objectURL) {\n // revoke the Object URL that was used to create transmuxer worker, so as not to leak it\n self.URL.revokeObjectURL(objectURL);\n }\n worker.terminate();\n }\n }\n}\n\n/**\n * Returns true if an ID3 footer can be found at offset in data\n *\n * @param data - The data to search in\n * @param offset - The offset at which to start searching\n *\n * @returns `true` if an ID3 footer is found\n *\n * @internal\n *\n * @group ID3\n */\nfunction isId3Footer(data, offset) {\n /*\n * The footer is a copy of the header, but with a different identifier\n */\n if (offset + 10 <= data.length) {\n // look for '3DI' identifier\n if (data[offset] === 0x33 && data[offset + 1] === 0x44 && data[offset + 2] === 0x49) {\n // check version is within range\n if (data[offset + 3] < 0xff && data[offset + 4] < 0xff) {\n // check size is within range\n if (data[offset + 6] < 0x80 && data[offset + 7] < 0x80 && data[offset + 8] < 0x80 && data[offset + 9] < 0x80) {\n return true;\n }\n }\n }\n }\n return false;\n}\n\n/**\n * Returns true if an ID3 header can be found at offset in data\n *\n * @param data - The data to search in\n * @param offset - The offset at which to start searching\n *\n * @returns `true` if an ID3 header is found\n *\n * @internal\n *\n * @group ID3\n */\nfunction isId3Header(data, offset) {\n /*\n * http://id3.org/id3v2.3.0\n * [0] = 'I'\n * [1] = 'D'\n * [2] = '3'\n * [3,4] = {Version}\n * [5] = {Flags}\n * [6-9] = {ID3 Size}\n *\n * An ID3v2 tag can be detected with the following pattern:\n * $49 44 33 yy yy xx zz zz zz zz\n * Where yy is less than $FF, xx is the 'flags' byte and zz is less than $80\n */\n if (offset + 10 <= data.length) {\n // look for 'ID3' identifier\n if (data[offset] === 0x49 && data[offset + 1] === 0x44 && data[offset + 2] === 0x33) {\n // check version is within range\n if (data[offset + 3] < 0xff && data[offset + 4] < 0xff) {\n // check size is within range\n if (data[offset + 6] < 0x80 && data[offset + 7] < 0x80 && data[offset + 8] < 0x80 && data[offset + 9] < 0x80) {\n return true;\n }\n }\n }\n }\n return false;\n}\n\n/**\n * Read ID3 size\n *\n * @param data - The data to read from\n * @param offset - The offset at which to start reading\n *\n * @returns The size\n *\n * @internal\n *\n * @group ID3\n */\nfunction readId3Size(data, offset) {\n let size = 0;\n size = (data[offset] & 0x7f) << 21;\n size |= (data[offset + 1] & 0x7f) << 14;\n size |= (data[offset + 2] & 0x7f) << 7;\n size |= data[offset + 3] & 0x7f;\n return size;\n}\n\n/**\n * Returns any adjacent ID3 tags found in data starting at offset, as one block of data\n *\n * @param data - The data to search in\n * @param offset - The offset at which to start searching\n *\n * @returns The block of data containing any ID3 tags found\n * or `undefined` if no header is found at the starting offset\n *\n * @internal\n *\n * @group ID3\n */\nfunction getId3Data(data, offset) {\n const front = offset;\n let length = 0;\n while (isId3Header(data, offset)) {\n // ID3 header is 10 bytes\n length += 10;\n const size = readId3Size(data, offset + 6);\n length += size;\n if (isId3Footer(data, offset + 10)) {\n // ID3 footer is 10 bytes\n length += 10;\n }\n offset += length;\n }\n if (length > 0) {\n return data.subarray(front, front + length);\n }\n return undefined;\n}\n\nfunction getAudioConfig(observer, data, offset, manifestCodec) {\n const adtsSamplingRates = [96000, 88200, 64000, 48000, 44100, 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350];\n const byte2 = data[offset + 2];\n const adtsSamplingIndex = byte2 >> 2 & 0xf;\n if (adtsSamplingIndex > 12) {\n const error = new Error(`invalid ADTS sampling index:${adtsSamplingIndex}`);\n observer.emit(Events.ERROR, Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.FRAG_PARSING_ERROR,\n fatal: true,\n error,\n reason: error.message\n });\n return;\n }\n // MPEG-4 Audio Object Type (profile_ObjectType+1)\n const adtsObjectType = (byte2 >> 6 & 0x3) + 1;\n const channelCount = data[offset + 3] >> 6 & 0x3 | (byte2 & 1) << 2;\n const codec = 'mp4a.40.' + adtsObjectType;\n /* refer to http://wiki.multimedia.cx/index.php?title=MPEG-4_Audio#Audio_Specific_Config\n ISO/IEC 14496-3 - Table 1.13 — Syntax of AudioSpecificConfig()\n Audio Profile / Audio Object Type\n 0: Null\n 1: AAC Main\n 2: AAC LC (Low Complexity)\n 3: AAC SSR (Scalable Sample Rate)\n 4: AAC LTP (Long Term Prediction)\n 5: SBR (Spectral Band Replication)\n 6: AAC Scalable\n sampling freq\n 0: 96000 Hz\n 1: 88200 Hz\n 2: 64000 Hz\n 3: 48000 Hz\n 4: 44100 Hz\n 5: 32000 Hz\n 6: 24000 Hz\n 7: 22050 Hz\n 8: 16000 Hz\n 9: 12000 Hz\n 10: 11025 Hz\n 11: 8000 Hz\n 12: 7350 Hz\n 13: Reserved\n 14: Reserved\n 15: frequency is written explictly\n Channel Configurations\n These are the channel configurations:\n 0: Defined in AOT Specifc Config\n 1: 1 channel: front-center\n 2: 2 channels: front-left, front-right\n */\n // audioObjectType = profile => profile, the MPEG-4 Audio Object Type minus 1\n const samplerate = adtsSamplingRates[adtsSamplingIndex];\n let aacSampleIndex = adtsSamplingIndex;\n if (adtsObjectType === 5 || adtsObjectType === 29) {\n // HE-AAC uses SBR (Spectral Band Replication) , high frequencies are constructed from low frequencies\n // there is a factor 2 between frame sample rate and output sample rate\n // multiply frequency by 2 (see table above, equivalent to substract 3)\n aacSampleIndex -= 3;\n }\n const config = [adtsObjectType << 3 | (aacSampleIndex & 0x0e) >> 1, (aacSampleIndex & 0x01) << 7 | channelCount << 3];\n logger.log(`manifest codec:${manifestCodec}, parsed codec:${codec}, channels:${channelCount}, rate:${samplerate} (ADTS object type:${adtsObjectType} sampling index:${adtsSamplingIndex})`);\n return {\n config,\n samplerate,\n channelCount,\n codec,\n parsedCodec: codec,\n manifestCodec\n };\n}\nfunction isHeaderPattern$1(data, offset) {\n return data[offset] === 0xff && (data[offset + 1] & 0xf6) === 0xf0;\n}\nfunction getHeaderLength(data, offset) {\n return data[offset + 1] & 0x01 ? 7 : 9;\n}\nfunction getFullFrameLength(data, offset) {\n return (data[offset + 3] & 0x03) << 11 | data[offset + 4] << 3 | (data[offset + 5] & 0xe0) >>> 5;\n}\nfunction canGetFrameLength(data, offset) {\n return offset + 5 < data.length;\n}\nfunction isHeader$1(data, offset) {\n // Look for ADTS header | 1111 1111 | 1111 X00X | where X can be either 0 or 1\n // Layer bits (position 14 and 15) in header should be always 0 for ADTS\n // More info https://wiki.multimedia.cx/index.php?title=ADTS\n return offset + 1 < data.length && isHeaderPattern$1(data, offset);\n}\nfunction canParse$1(data, offset) {\n return canGetFrameLength(data, offset) && isHeaderPattern$1(data, offset) && getFullFrameLength(data, offset) <= data.length - offset;\n}\nfunction probe$1(data, offset) {\n // same as isHeader but we also check that ADTS frame follows last ADTS frame\n // or end of data is reached\n if (isHeader$1(data, offset)) {\n // ADTS header Length\n const headerLength = getHeaderLength(data, offset);\n if (offset + headerLength >= data.length) {\n return false;\n }\n // ADTS frame Length\n const frameLength = getFullFrameLength(data, offset);\n if (frameLength <= headerLength) {\n return false;\n }\n const newOffset = offset + frameLength;\n return newOffset === data.length || isHeader$1(data, newOffset);\n }\n return false;\n}\nfunction initTrackConfig(track, observer, data, offset, audioCodec) {\n if (!track.samplerate) {\n const config = getAudioConfig(observer, data, offset, audioCodec);\n if (!config) {\n return;\n }\n _extends(track, config);\n }\n}\nfunction getFrameDuration(samplerate) {\n return 1024 * 90000 / samplerate;\n}\nfunction parseFrameHeader(data, offset) {\n // The protection skip bit tells us if we have 2 bytes of CRC data at the end of the ADTS header\n const headerLength = getHeaderLength(data, offset);\n if (offset + headerLength <= data.length) {\n // retrieve frame size\n const frameLength = getFullFrameLength(data, offset) - headerLength;\n if (frameLength > 0) {\n // logger.log(`AAC frame, offset/length/total/pts:${offset+headerLength}/${frameLength}/${data.byteLength}`);\n return {\n headerLength,\n frameLength\n };\n }\n }\n}\nfunction appendFrame$2(track, data, offset, pts, frameIndex) {\n const frameDuration = getFrameDuration(track.samplerate);\n const stamp = pts + frameIndex * frameDuration;\n const header = parseFrameHeader(data, offset);\n let unit;\n if (header) {\n const {\n frameLength,\n headerLength\n } = header;\n const _length = headerLength + frameLength;\n const missing = Math.max(0, offset + _length - data.length);\n // logger.log(`AAC frame ${frameIndex}, pts:${stamp} length@offset/total: ${frameLength}@${offset+headerLength}/${data.byteLength} missing: ${missing}`);\n if (missing) {\n unit = new Uint8Array(_length - headerLength);\n unit.set(data.subarray(offset + headerLength, data.length), 0);\n } else {\n unit = data.subarray(offset + headerLength, offset + _length);\n }\n const _sample = {\n unit,\n pts: stamp\n };\n if (!missing) {\n track.samples.push(_sample);\n }\n return {\n sample: _sample,\n length: _length,\n missing\n };\n }\n // overflow incomplete header\n const length = data.length - offset;\n unit = new Uint8Array(length);\n unit.set(data.subarray(offset, data.length), 0);\n const sample = {\n unit,\n pts: stamp\n };\n return {\n sample,\n length,\n missing: -1\n };\n}\n\n/**\n * Checks if the given data contains an ID3 tag.\n *\n * @param data - The data to check\n * @param offset - The offset at which to start checking\n *\n * @returns `true` if an ID3 tag is found\n *\n * @group ID3\n *\n * @beta\n */\nfunction canParseId3(data, offset) {\n return isId3Header(data, offset) && readId3Size(data, offset + 6) + 10 <= data.length - offset;\n}\n\nfunction toArrayBuffer(view) {\n if (view instanceof ArrayBuffer) {\n return view;\n } else {\n if (view.byteOffset == 0 && view.byteLength == view.buffer.byteLength) {\n // This is a TypedArray over the whole buffer.\n return view.buffer;\n }\n // This is a 'view' on the buffer. Create a new buffer that only contains\n // the data. Note that since this isn't an ArrayBuffer, the 'new' call\n // will allocate a new buffer to hold the copy.\n return new Uint8Array(view).buffer;\n }\n}\n\nfunction toUint8(data, offset = 0, length = Infinity) {\n return view(data, offset, length, Uint8Array);\n}\nfunction view(data, offset, length, Type) {\n const buffer = unsafeGetArrayBuffer(data);\n let bytesPerElement = 1;\n if ('BYTES_PER_ELEMENT' in Type) {\n bytesPerElement = Type.BYTES_PER_ELEMENT;\n }\n // Absolute end of the |data| view within |buffer|.\n const dataOffset = isArrayBufferView(data) ? data.byteOffset : 0;\n const dataEnd = (dataOffset + data.byteLength) / bytesPerElement;\n // Absolute start of the result within |buffer|.\n const rawStart = (dataOffset + offset) / bytesPerElement;\n const start = Math.floor(Math.max(0, Math.min(rawStart, dataEnd)));\n // Absolute end of the result within |buffer|.\n const end = Math.floor(Math.min(start + Math.max(length, 0), dataEnd));\n return new Type(buffer, start, end - start);\n}\nfunction unsafeGetArrayBuffer(view) {\n if (view instanceof ArrayBuffer) {\n return view;\n } else {\n return view.buffer;\n }\n}\nfunction isArrayBufferView(obj) {\n return obj && obj.buffer instanceof ArrayBuffer && obj.byteLength !== undefined && obj.byteOffset !== undefined;\n}\n\nfunction decodeId3ImageFrame(frame) {\n const metadataFrame = {\n key: frame.type,\n description: '',\n data: '',\n mimeType: null,\n pictureType: null\n };\n const utf8Encoding = 0x03;\n if (frame.size < 2) {\n return undefined;\n }\n if (frame.data[0] !== utf8Encoding) {\n console.log('Ignore frame with unrecognized character ' + 'encoding');\n return undefined;\n }\n const mimeTypeEndIndex = frame.data.subarray(1).indexOf(0);\n if (mimeTypeEndIndex === -1) {\n return undefined;\n }\n const mimeType = utf8ArrayToStr(toUint8(frame.data, 1, mimeTypeEndIndex));\n const pictureType = frame.data[2 + mimeTypeEndIndex];\n const descriptionEndIndex = frame.data.subarray(3 + mimeTypeEndIndex).indexOf(0);\n if (descriptionEndIndex === -1) {\n return undefined;\n }\n const description = utf8ArrayToStr(toUint8(frame.data, 3 + mimeTypeEndIndex, descriptionEndIndex));\n let data;\n if (mimeType === '-->') {\n data = utf8ArrayToStr(toUint8(frame.data, 4 + mimeTypeEndIndex + descriptionEndIndex));\n } else {\n data = toArrayBuffer(frame.data.subarray(4 + mimeTypeEndIndex + descriptionEndIndex));\n }\n metadataFrame.mimeType = mimeType;\n metadataFrame.pictureType = pictureType;\n metadataFrame.description = description;\n metadataFrame.data = data;\n return metadataFrame;\n}\n\n/**\n * Decode an ID3 PRIV frame.\n *\n * @param frame - the ID3 PRIV frame\n *\n * @returns The decoded ID3 PRIV frame\n *\n * @internal\n *\n * @group ID3\n */\nfunction decodeId3PrivFrame(frame) {\n /*\n Format: <text string>\\0<binary data>\n */\n if (frame.size < 2) {\n return undefined;\n }\n const owner = utf8ArrayToStr(frame.data, true);\n const privateData = new Uint8Array(frame.data.subarray(owner.length + 1));\n return {\n key: frame.type,\n info: owner,\n data: privateData.buffer\n };\n}\n\n/**\n * Decodes an ID3 text frame\n *\n * @param frame - the ID3 text frame\n *\n * @returns The decoded ID3 text frame\n *\n * @internal\n *\n * @group ID3\n */\nfunction decodeId3TextFrame(frame) {\n if (frame.size < 2) {\n return undefined;\n }\n if (frame.type === 'TXXX') {\n /*\n Format:\n [0] = {Text Encoding}\n [1-?] = {Description}\\0{Value}\n */\n let index = 1;\n const description = utf8ArrayToStr(frame.data.subarray(index), true);\n index += description.length + 1;\n const value = utf8ArrayToStr(frame.data.subarray(index));\n return {\n key: frame.type,\n info: description,\n data: value\n };\n }\n /*\n Format:\n [0] = {Text Encoding}\n [1-?] = {Value}\n */\n const text = utf8ArrayToStr(frame.data.subarray(1));\n return {\n key: frame.type,\n info: '',\n data: text\n };\n}\n\n/**\n * Decode a URL frame\n *\n * @param frame - the ID3 URL frame\n *\n * @returns The decoded ID3 URL frame\n *\n * @internal\n *\n * @group ID3\n */\nfunction decodeId3UrlFrame(frame) {\n if (frame.type === 'WXXX') {\n /*\n Format:\n [0] = {Text Encoding}\n [1-?] = {Description}\\0{URL}\n */\n if (frame.size < 2) {\n return undefined;\n }\n let index = 1;\n const description = utf8ArrayToStr(frame.data.subarray(index), true);\n index += description.length + 1;\n const value = utf8ArrayToStr(frame.data.subarray(index));\n return {\n key: frame.type,\n info: description,\n data: value\n };\n }\n /*\n Format:\n [0-?] = {URL}\n */\n const url = utf8ArrayToStr(frame.data);\n return {\n key: frame.type,\n info: '',\n data: url\n };\n}\n\n/**\n * Decode an ID3 frame.\n *\n * @param frame - the ID3 frame\n *\n * @returns The decoded ID3 frame\n *\n * @internal\n *\n * @group ID3\n */\nfunction decodeId3Frame(frame) {\n if (frame.type === 'PRIV') {\n return decodeId3PrivFrame(frame);\n } else if (frame.type[0] === 'W') {\n return decodeId3UrlFrame(frame);\n } else if (frame.type === 'APIC') {\n return decodeId3ImageFrame(frame);\n }\n return decodeId3TextFrame(frame);\n}\n\n/**\n * Returns the data of an ID3 frame.\n *\n * @param data - The data to read from\n *\n * @returns The data of the ID3 frame\n *\n * @internal\n *\n * @group ID3\n */\nfunction getId3FrameData(data) {\n /*\n Frame ID $xx xx xx xx (four characters)\n Size $xx xx xx xx\n Flags $xx xx\n */\n const type = String.fromCharCode(data[0], data[1], data[2], data[3]);\n const size = readId3Size(data, 4);\n // skip frame id, size, and flags\n const offset = 10;\n return {\n type,\n size,\n data: data.subarray(offset, offset + size)\n };\n}\n\nconst HEADER_FOOTER_SIZE = 10;\nconst FRAME_SIZE = 10;\n/**\n * Returns an array of ID3 frames found in all the ID3 tags in the id3Data\n *\n * @param id3Data - The ID3 data containing one or more ID3 tags\n *\n * @returns Array of ID3 frame objects\n *\n * @group ID3\n *\n * @beta\n */\nfunction getId3Frames(id3Data) {\n let offset = 0;\n const frames = [];\n while (isId3Header(id3Data, offset)) {\n const size = readId3Size(id3Data, offset + 6);\n if (id3Data[offset + 5] >> 6 & 1) {\n // skip extended header\n offset += HEADER_FOOTER_SIZE;\n }\n // skip past ID3 header\n offset += HEADER_FOOTER_SIZE;\n const end = offset + size;\n // loop through frames in the ID3 tag\n while (offset + FRAME_SIZE < end) {\n const frameData = getId3FrameData(id3Data.subarray(offset));\n const frame = decodeId3Frame(frameData);\n if (frame) {\n frames.push(frame);\n }\n // skip frame header and frame data\n offset += frameData.size + HEADER_FOOTER_SIZE;\n }\n if (isId3Footer(id3Data, offset)) {\n offset += HEADER_FOOTER_SIZE;\n }\n }\n return frames;\n}\n\n/**\n * Returns true if the ID3 frame is an Elementary Stream timestamp frame\n *\n * @param frame - the ID3 frame\n *\n * @returns `true` if the ID3 frame is an Elementary Stream timestamp frame\n *\n * @internal\n *\n * @group ID3\n */\nfunction isId3TimestampFrame(frame) {\n return frame && frame.key === 'PRIV' && frame.info === 'com.apple.streaming.transportStreamTimestamp';\n}\n\n/**\n * Read a 33 bit timestamp from an ID3 frame.\n *\n * @param timeStampFrame - the ID3 frame\n *\n * @returns The timestamp\n *\n * @internal\n *\n * @group ID3\n */\nfunction readId3Timestamp(timeStampFrame) {\n if (timeStampFrame.data.byteLength === 8) {\n const data = new Uint8Array(timeStampFrame.data);\n // timestamp is 33 bit expressed as a big-endian eight-octet number,\n // with the upper 31 bits set to zero.\n const pts33Bit = data[3] & 0x1;\n let timestamp = (data[4] << 23) + (data[5] << 15) + (data[6] << 7) + data[7];\n timestamp /= 45;\n if (pts33Bit) {\n timestamp += 47721858.84;\n } // 2^32 / 90\n return Math.round(timestamp);\n }\n return undefined;\n}\n\n/**\n * Searches for the Elementary Stream timestamp found in the ID3 data chunk\n *\n * @param data - Block of data containing one or more ID3 tags\n *\n * @returns The timestamp\n *\n * @group ID3\n *\n * @beta\n */\nfunction getId3Timestamp(data) {\n const frames = getId3Frames(data);\n for (let i = 0; i < frames.length; i++) {\n const frame = frames[i];\n if (isId3TimestampFrame(frame)) {\n return readId3Timestamp(frame);\n }\n }\n return undefined;\n}\n\nlet MetadataSchema = /*#__PURE__*/function (MetadataSchema) {\n MetadataSchema[\"audioId3\"] = \"org.id3\";\n MetadataSchema[\"dateRange\"] = \"com.apple.quicktime.HLS\";\n MetadataSchema[\"emsg\"] = \"https://aomedia.org/emsg/ID3\";\n MetadataSchema[\"misbklv\"] = \"urn:misb:KLV:bin:1910.1\";\n return MetadataSchema;\n}({});\n\nfunction dummyTrack(type = '', inputTimeScale = 90000) {\n return {\n type,\n id: -1,\n pid: -1,\n inputTimeScale,\n sequenceNumber: -1,\n samples: [],\n dropped: 0\n };\n}\n\nclass BaseAudioDemuxer {\n constructor() {\n this._audioTrack = void 0;\n this._id3Track = void 0;\n this.frameIndex = 0;\n this.cachedData = null;\n this.basePTS = null;\n this.initPTS = null;\n this.lastPTS = null;\n }\n resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n this._id3Track = {\n type: 'id3',\n id: 3,\n pid: -1,\n inputTimeScale: 90000,\n sequenceNumber: 0,\n samples: [],\n dropped: 0\n };\n }\n resetTimeStamp(deaultTimestamp) {\n this.initPTS = deaultTimestamp;\n this.resetContiguity();\n }\n resetContiguity() {\n this.basePTS = null;\n this.lastPTS = null;\n this.frameIndex = 0;\n }\n canParse(data, offset) {\n return false;\n }\n appendFrame(track, data, offset) {}\n\n // feed incoming data to the front of the parsing pipeline\n demux(data, timeOffset) {\n if (this.cachedData) {\n data = appendUint8Array(this.cachedData, data);\n this.cachedData = null;\n }\n let id3Data = getId3Data(data, 0);\n let offset = id3Data ? id3Data.length : 0;\n let lastDataIndex;\n const track = this._audioTrack;\n const id3Track = this._id3Track;\n const timestamp = id3Data ? getId3Timestamp(id3Data) : undefined;\n const length = data.length;\n if (this.basePTS === null || this.frameIndex === 0 && isFiniteNumber(timestamp)) {\n this.basePTS = initPTSFn(timestamp, timeOffset, this.initPTS);\n this.lastPTS = this.basePTS;\n }\n if (this.lastPTS === null) {\n this.lastPTS = this.basePTS;\n }\n\n // more expressive than alternative: id3Data?.length\n if (id3Data && id3Data.length > 0) {\n id3Track.samples.push({\n pts: this.lastPTS,\n dts: this.lastPTS,\n data: id3Data,\n type: MetadataSchema.audioId3,\n duration: Number.POSITIVE_INFINITY\n });\n }\n while (offset < length) {\n if (this.canParse(data, offset)) {\n const frame = this.appendFrame(track, data, offset);\n if (frame) {\n this.frameIndex++;\n this.lastPTS = frame.sample.pts;\n offset += frame.length;\n lastDataIndex = offset;\n } else {\n offset = length;\n }\n } else if (canParseId3(data, offset)) {\n // after a canParse, a call to getId3Data *should* always returns some data\n id3Data = getId3Data(data, offset);\n id3Track.samples.push({\n pts: this.lastPTS,\n dts: this.lastPTS,\n data: id3Data,\n type: MetadataSchema.audioId3,\n duration: Number.POSITIVE_INFINITY\n });\n offset += id3Data.length;\n lastDataIndex = offset;\n } else {\n offset++;\n }\n if (offset === length && lastDataIndex !== length) {\n const partialData = data.slice(lastDataIndex);\n if (this.cachedData) {\n this.cachedData = appendUint8Array(this.cachedData, partialData);\n } else {\n this.cachedData = partialData;\n }\n }\n }\n return {\n audioTrack: track,\n videoTrack: dummyTrack(),\n id3Track,\n textTrack: dummyTrack()\n };\n }\n demuxSampleAes(data, keyData, timeOffset) {\n return Promise.reject(new Error(`[${this}] This demuxer does not support Sample-AES decryption`));\n }\n flush(timeOffset) {\n // Parse cache in case of remaining frames.\n const cachedData = this.cachedData;\n if (cachedData) {\n this.cachedData = null;\n this.demux(cachedData, 0);\n }\n return {\n audioTrack: this._audioTrack,\n videoTrack: dummyTrack(),\n id3Track: this._id3Track,\n textTrack: dummyTrack()\n };\n }\n destroy() {\n this.cachedData = null;\n // @ts-ignore\n this._audioTrack = this._id3Track = undefined;\n }\n}\n\n/**\n * Initialize PTS\n * <p>\n * use timestamp unless it is undefined, NaN or Infinity\n * </p>\n */\nconst initPTSFn = (timestamp, timeOffset, initPTS) => {\n if (isFiniteNumber(timestamp)) {\n return timestamp * 90;\n }\n const init90kHz = initPTS ? initPTS.baseTime * 90000 / initPTS.timescale : 0;\n return timeOffset * 90000 + init90kHz;\n};\n\n/**\n * MPEG parser helper\n */\n\nlet chromeVersion$1 = null;\nconst BitratesMap = [32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352, 384, 416, 448, 32, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 384, 32, 40, 48, 56, 64, 80, 96, 112, 128, 160, 192, 224, 256, 320, 32, 48, 56, 64, 80, 96, 112, 128, 144, 160, 176, 192, 224, 256, 8, 16, 24, 32, 40, 48, 56, 64, 80, 96, 112, 128, 144, 160];\nconst SamplingRateMap = [44100, 48000, 32000, 22050, 24000, 16000, 11025, 12000, 8000];\nconst SamplesCoefficients = [\n// MPEG 2.5\n[0,\n// Reserved\n72,\n// Layer3\n144,\n// Layer2\n12 // Layer1\n],\n// Reserved\n[0,\n// Reserved\n0,\n// Layer3\n0,\n// Layer2\n0 // Layer1\n],\n// MPEG 2\n[0,\n// Reserved\n72,\n// Layer3\n144,\n// Layer2\n12 // Layer1\n],\n// MPEG 1\n[0,\n// Reserved\n144,\n// Layer3\n144,\n// Layer2\n12 // Layer1\n]];\nconst BytesInSlot = [0,\n// Reserved\n1,\n// Layer3\n1,\n// Layer2\n4 // Layer1\n];\nfunction appendFrame$1(track, data, offset, pts, frameIndex) {\n // Using http://www.datavoyage.com/mpgscript/mpeghdr.htm as a reference\n if (offset + 24 > data.length) {\n return;\n }\n const header = parseHeader(data, offset);\n if (header && offset + header.frameLength <= data.length) {\n const frameDuration = header.samplesPerFrame * 90000 / header.sampleRate;\n const stamp = pts + frameIndex * frameDuration;\n const sample = {\n unit: data.subarray(offset, offset + header.frameLength),\n pts: stamp,\n dts: stamp\n };\n track.config = [];\n track.channelCount = header.channelCount;\n track.samplerate = header.sampleRate;\n track.samples.push(sample);\n return {\n sample,\n length: header.frameLength,\n missing: 0\n };\n }\n}\nfunction parseHeader(data, offset) {\n const mpegVersion = data[offset + 1] >> 3 & 3;\n const mpegLayer = data[offset + 1] >> 1 & 3;\n const bitRateIndex = data[offset + 2] >> 4 & 15;\n const sampleRateIndex = data[offset + 2] >> 2 & 3;\n if (mpegVersion !== 1 && bitRateIndex !== 0 && bitRateIndex !== 15 && sampleRateIndex !== 3) {\n const paddingBit = data[offset + 2] >> 1 & 1;\n const channelMode = data[offset + 3] >> 6;\n const columnInBitrates = mpegVersion === 3 ? 3 - mpegLayer : mpegLayer === 3 ? 3 : 4;\n const bitRate = BitratesMap[columnInBitrates * 14 + bitRateIndex - 1] * 1000;\n const columnInSampleRates = mpegVersion === 3 ? 0 : mpegVersion === 2 ? 1 : 2;\n const sampleRate = SamplingRateMap[columnInSampleRates * 3 + sampleRateIndex];\n const channelCount = channelMode === 3 ? 1 : 2; // If bits of channel mode are `11` then it is a single channel (Mono)\n const sampleCoefficient = SamplesCoefficients[mpegVersion][mpegLayer];\n const bytesInSlot = BytesInSlot[mpegLayer];\n const samplesPerFrame = sampleCoefficient * 8 * bytesInSlot;\n const frameLength = Math.floor(sampleCoefficient * bitRate / sampleRate + paddingBit) * bytesInSlot;\n if (chromeVersion$1 === null) {\n const userAgent = navigator.userAgent || '';\n const result = userAgent.match(/Chrome\\/(\\d+)/i);\n chromeVersion$1 = result ? parseInt(result[1]) : 0;\n }\n const needChromeFix = !!chromeVersion$1 && chromeVersion$1 <= 87;\n if (needChromeFix && mpegLayer === 2 && bitRate >= 224000 && channelMode === 0) {\n // Work around bug in Chromium by setting channelMode to dual-channel (01) instead of stereo (00)\n data[offset + 3] = data[offset + 3] | 0x80;\n }\n return {\n sampleRate,\n channelCount,\n frameLength,\n samplesPerFrame\n };\n }\n}\nfunction isHeaderPattern(data, offset) {\n return data[offset] === 0xff && (data[offset + 1] & 0xe0) === 0xe0 && (data[offset + 1] & 0x06) !== 0x00;\n}\nfunction isHeader(data, offset) {\n // Look for MPEG header | 1111 1111 | 111X XYZX | where X can be either 0 or 1 and Y or Z should be 1\n // Layer bits (position 14 and 15) in header should be always different from 0 (Layer I or Layer II or Layer III)\n // More info http://www.mp3-tech.org/programmer/frame_header.html\n return offset + 1 < data.length && isHeaderPattern(data, offset);\n}\nfunction canParse(data, offset) {\n const headerSize = 4;\n return isHeaderPattern(data, offset) && headerSize <= data.length - offset;\n}\nfunction probe(data, offset) {\n // same as isHeader but we also check that MPEG frame follows last MPEG frame\n // or end of data is reached\n if (offset + 1 < data.length && isHeaderPattern(data, offset)) {\n // MPEG header Length\n const headerLength = 4;\n // MPEG frame Length\n const header = parseHeader(data, offset);\n let frameLength = headerLength;\n if (header != null && header.frameLength) {\n frameLength = header.frameLength;\n }\n const newOffset = offset + frameLength;\n return newOffset === data.length || isHeader(data, newOffset);\n }\n return false;\n}\n\n/**\n * AAC demuxer\n */\nclass AACDemuxer extends BaseAudioDemuxer {\n constructor(observer, config) {\n super();\n this.observer = void 0;\n this.config = void 0;\n this.observer = observer;\n this.config = config;\n }\n resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n super.resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration);\n this._audioTrack = {\n container: 'audio/adts',\n type: 'audio',\n id: 2,\n pid: -1,\n sequenceNumber: 0,\n segmentCodec: 'aac',\n samples: [],\n manifestCodec: audioCodec,\n duration: trackDuration,\n inputTimeScale: 90000,\n dropped: 0\n };\n }\n\n // Source for probe info - https://wiki.multimedia.cx/index.php?title=ADTS\n static probe(data, logger) {\n if (!data) {\n return false;\n }\n\n // Check for the ADTS sync word\n // Look for ADTS header | 1111 1111 | 1111 X00X | where X can be either 0 or 1\n // Layer bits (position 14 and 15) in header should be always 0 for ADTS\n // More info https://wiki.multimedia.cx/index.php?title=ADTS\n const id3Data = getId3Data(data, 0);\n let offset = (id3Data == null ? void 0 : id3Data.length) || 0;\n if (probe(data, offset)) {\n return false;\n }\n for (let length = data.length; offset < length; offset++) {\n if (probe$1(data, offset)) {\n logger.log('ADTS sync word found !');\n return true;\n }\n }\n return false;\n }\n canParse(data, offset) {\n return canParse$1(data, offset);\n }\n appendFrame(track, data, offset) {\n initTrackConfig(track, this.observer, data, offset, track.manifestCodec);\n const frame = appendFrame$2(track, data, offset, this.basePTS, this.frameIndex);\n if (frame && frame.missing === 0) {\n return frame;\n }\n }\n}\n\nconst getAudioBSID = (data, offset) => {\n // check the bsid to confirm ac-3 | ec-3\n let bsid = 0;\n let numBits = 5;\n offset += numBits;\n const temp = new Uint32Array(1); // unsigned 32 bit for temporary storage\n const mask = new Uint32Array(1); // unsigned 32 bit mask value\n const byte = new Uint8Array(1); // unsigned 8 bit for temporary storage\n while (numBits > 0) {\n byte[0] = data[offset];\n // read remaining bits, upto 8 bits at a time\n const bits = Math.min(numBits, 8);\n const shift = 8 - bits;\n mask[0] = 0xff000000 >>> 24 + shift << shift;\n temp[0] = (byte[0] & mask[0]) >> shift;\n bsid = !bsid ? temp[0] : bsid << bits | temp[0];\n offset += 1;\n numBits -= bits;\n }\n return bsid;\n};\n\nclass AC3Demuxer extends BaseAudioDemuxer {\n constructor(observer) {\n super();\n this.observer = void 0;\n this.observer = observer;\n }\n resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n super.resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration);\n this._audioTrack = {\n container: 'audio/ac-3',\n type: 'audio',\n id: 2,\n pid: -1,\n sequenceNumber: 0,\n segmentCodec: 'ac3',\n samples: [],\n manifestCodec: audioCodec,\n duration: trackDuration,\n inputTimeScale: 90000,\n dropped: 0\n };\n }\n canParse(data, offset) {\n return offset + 64 < data.length;\n }\n appendFrame(track, data, offset) {\n const frameLength = appendFrame(track, data, offset, this.basePTS, this.frameIndex);\n if (frameLength !== -1) {\n const sample = track.samples[track.samples.length - 1];\n return {\n sample,\n length: frameLength,\n missing: 0\n };\n }\n }\n static probe(data) {\n if (!data) {\n return false;\n }\n const id3Data = getId3Data(data, 0);\n if (!id3Data) {\n return false;\n }\n\n // look for the ac-3 sync bytes\n const offset = id3Data.length;\n if (data[offset] === 0x0b && data[offset + 1] === 0x77 && getId3Timestamp(id3Data) !== undefined &&\n // check the bsid to confirm ac-3\n getAudioBSID(data, offset) < 16) {\n return true;\n }\n return false;\n }\n}\nfunction appendFrame(track, data, start, pts, frameIndex) {\n if (start + 8 > data.length) {\n return -1; // not enough bytes left\n }\n if (data[start] !== 0x0b || data[start + 1] !== 0x77) {\n return -1; // invalid magic\n }\n\n // get sample rate\n const samplingRateCode = data[start + 4] >> 6;\n if (samplingRateCode >= 3) {\n return -1; // invalid sampling rate\n }\n const samplingRateMap = [48000, 44100, 32000];\n const sampleRate = samplingRateMap[samplingRateCode];\n\n // get frame size\n const frameSizeCode = data[start + 4] & 0x3f;\n const frameSizeMap = [64, 69, 96, 64, 70, 96, 80, 87, 120, 80, 88, 120, 96, 104, 144, 96, 105, 144, 112, 121, 168, 112, 122, 168, 128, 139, 192, 128, 140, 192, 160, 174, 240, 160, 175, 240, 192, 208, 288, 192, 209, 288, 224, 243, 336, 224, 244, 336, 256, 278, 384, 256, 279, 384, 320, 348, 480, 320, 349, 480, 384, 417, 576, 384, 418, 576, 448, 487, 672, 448, 488, 672, 512, 557, 768, 512, 558, 768, 640, 696, 960, 640, 697, 960, 768, 835, 1152, 768, 836, 1152, 896, 975, 1344, 896, 976, 1344, 1024, 1114, 1536, 1024, 1115, 1536, 1152, 1253, 1728, 1152, 1254, 1728, 1280, 1393, 1920, 1280, 1394, 1920];\n const frameLength = frameSizeMap[frameSizeCode * 3 + samplingRateCode] * 2;\n if (start + frameLength > data.length) {\n return -1;\n }\n\n // get channel count\n const channelMode = data[start + 6] >> 5;\n let skipCount = 0;\n if (channelMode === 2) {\n skipCount += 2;\n } else {\n if (channelMode & 1 && channelMode !== 1) {\n skipCount += 2;\n }\n if (channelMode & 4) {\n skipCount += 2;\n }\n }\n const lfeon = (data[start + 6] << 8 | data[start + 7]) >> 12 - skipCount & 1;\n const channelsMap = [2, 1, 2, 3, 3, 4, 4, 5];\n const channelCount = channelsMap[channelMode] + lfeon;\n\n // build dac3 box\n const bsid = data[start + 5] >> 3;\n const bsmod = data[start + 5] & 7;\n const config = new Uint8Array([samplingRateCode << 6 | bsid << 1 | bsmod >> 2, (bsmod & 3) << 6 | channelMode << 3 | lfeon << 2 | frameSizeCode >> 4, frameSizeCode << 4 & 0xe0]);\n const frameDuration = 1536 / sampleRate * 90000;\n const stamp = pts + frameIndex * frameDuration;\n const unit = data.subarray(start, start + frameLength);\n track.config = config;\n track.channelCount = channelCount;\n track.samplerate = sampleRate;\n track.samples.push({\n unit,\n pts: stamp\n });\n return frameLength;\n}\n\n/**\n * MP3 demuxer\n */\nclass MP3Demuxer extends BaseAudioDemuxer {\n resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n super.resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration);\n this._audioTrack = {\n container: 'audio/mpeg',\n type: 'audio',\n id: 2,\n pid: -1,\n sequenceNumber: 0,\n segmentCodec: 'mp3',\n samples: [],\n manifestCodec: audioCodec,\n duration: trackDuration,\n inputTimeScale: 90000,\n dropped: 0\n };\n }\n static probe(data) {\n if (!data) {\n return false;\n }\n\n // check if data contains ID3 timestamp and MPEG sync word\n // Look for MPEG header | 1111 1111 | 111X XYZX | where X can be either 0 or 1 and Y or Z should be 1\n // Layer bits (position 14 and 15) in header should be always different from 0 (Layer I or Layer II or Layer III)\n // More info http://www.mp3-tech.org/programmer/frame_header.html\n const id3Data = getId3Data(data, 0);\n let offset = (id3Data == null ? void 0 : id3Data.length) || 0;\n\n // Check for ac-3|ec-3 sync bytes and return false if present\n if (id3Data && data[offset] === 0x0b && data[offset + 1] === 0x77 && getId3Timestamp(id3Data) !== undefined &&\n // check the bsid to confirm ac-3 or ec-3 (not mp3)\n getAudioBSID(data, offset) <= 16) {\n return false;\n }\n for (let length = data.length; offset < length; offset++) {\n if (probe(data, offset)) {\n logger.log('MPEG Audio sync word found !');\n return true;\n }\n }\n return false;\n }\n canParse(data, offset) {\n return canParse(data, offset);\n }\n appendFrame(track, data, offset) {\n if (this.basePTS === null) {\n return;\n }\n return appendFrame$1(track, data, offset, this.basePTS, this.frameIndex);\n }\n}\n\nconst emsgSchemePattern = /\\/emsg[-/]ID3/i;\nclass MP4Demuxer {\n constructor(observer, config) {\n this.remainderData = null;\n this.timeOffset = 0;\n this.config = void 0;\n this.videoTrack = void 0;\n this.audioTrack = void 0;\n this.id3Track = void 0;\n this.txtTrack = void 0;\n this.config = config;\n }\n resetTimeStamp() {}\n resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n const videoTrack = this.videoTrack = dummyTrack('video', 1);\n const audioTrack = this.audioTrack = dummyTrack('audio', 1);\n const captionTrack = this.txtTrack = dummyTrack('text', 1);\n this.id3Track = dummyTrack('id3', 1);\n this.timeOffset = 0;\n if (!(initSegment != null && initSegment.byteLength)) {\n return;\n }\n const initData = parseInitSegment(initSegment);\n if (initData.video) {\n const {\n id,\n timescale,\n codec,\n supplemental\n } = initData.video;\n videoTrack.id = id;\n videoTrack.timescale = captionTrack.timescale = timescale;\n videoTrack.codec = codec;\n videoTrack.supplemental = supplemental;\n }\n if (initData.audio) {\n const {\n id,\n timescale,\n codec\n } = initData.audio;\n audioTrack.id = id;\n audioTrack.timescale = timescale;\n audioTrack.codec = codec;\n }\n captionTrack.id = RemuxerTrackIdConfig.text;\n videoTrack.sampleDuration = 0;\n videoTrack.duration = audioTrack.duration = trackDuration;\n }\n resetContiguity() {\n this.remainderData = null;\n }\n static probe(data) {\n return hasMoofData(data);\n }\n demux(data, timeOffset) {\n this.timeOffset = timeOffset;\n // Load all data into the avc track. The CMAF remuxer will look for the data in the samples object; the rest of the fields do not matter\n let videoSamples = data;\n const videoTrack = this.videoTrack;\n const textTrack = this.txtTrack;\n if (this.config.progressive) {\n // Split the bytestream into two ranges: one encompassing all data up until the start of the last moof, and everything else.\n // This is done to guarantee that we're sending valid data to MSE - when demuxing progressively, we have no guarantee\n // that the fetch loader gives us flush moof+mdat pairs. If we push jagged data to MSE, it will throw an exception.\n if (this.remainderData) {\n videoSamples = appendUint8Array(this.remainderData, data);\n }\n const segmentedData = segmentValidRange(videoSamples);\n this.remainderData = segmentedData.remainder;\n videoTrack.samples = segmentedData.valid || new Uint8Array();\n } else {\n videoTrack.samples = videoSamples;\n }\n const id3Track = this.extractID3Track(videoTrack, timeOffset);\n textTrack.samples = parseSamples(timeOffset, videoTrack);\n return {\n videoTrack,\n audioTrack: this.audioTrack,\n id3Track,\n textTrack: this.txtTrack\n };\n }\n flush() {\n const timeOffset = this.timeOffset;\n const videoTrack = this.videoTrack;\n const textTrack = this.txtTrack;\n videoTrack.samples = this.remainderData || new Uint8Array();\n this.remainderData = null;\n const id3Track = this.extractID3Track(videoTrack, this.timeOffset);\n textTrack.samples = parseSamples(timeOffset, videoTrack);\n return {\n videoTrack,\n audioTrack: dummyTrack(),\n id3Track,\n textTrack: dummyTrack()\n };\n }\n extractID3Track(videoTrack, timeOffset) {\n const id3Track = this.id3Track;\n if (videoTrack.samples.length) {\n const emsgs = findBox(videoTrack.samples, ['emsg']);\n if (emsgs) {\n emsgs.forEach(data => {\n const emsgInfo = parseEmsg(data);\n if (emsgSchemePattern.test(emsgInfo.schemeIdUri)) {\n const pts = getEmsgStartTime(emsgInfo, timeOffset);\n let duration = emsgInfo.eventDuration === 0xffffffff ? Number.POSITIVE_INFINITY : emsgInfo.eventDuration / emsgInfo.timeScale;\n // Safari takes anything <= 0.001 seconds and maps it to Infinity\n if (duration <= 0.001) {\n duration = Number.POSITIVE_INFINITY;\n }\n const payload = emsgInfo.payload;\n id3Track.samples.push({\n data: payload,\n len: payload.byteLength,\n dts: pts,\n pts: pts,\n type: MetadataSchema.emsg,\n duration: duration\n });\n } else if (this.config.enableEmsgKLVMetadata && emsgInfo.schemeIdUri.startsWith('urn:misb:KLV:bin:1910.1')) {\n const pts = getEmsgStartTime(emsgInfo, timeOffset);\n id3Track.samples.push({\n data: emsgInfo.payload,\n len: emsgInfo.payload.byteLength,\n dts: pts,\n pts: pts,\n type: MetadataSchema.misbklv,\n duration: Number.POSITIVE_INFINITY\n });\n }\n });\n }\n }\n return id3Track;\n }\n demuxSampleAes(data, keyData, timeOffset) {\n return Promise.reject(new Error('The MP4 demuxer does not support SAMPLE-AES decryption'));\n }\n destroy() {\n // @ts-ignore\n this.config = null;\n this.remainderData = null;\n this.videoTrack = this.audioTrack = this.id3Track = this.txtTrack = undefined;\n }\n}\nfunction getEmsgStartTime(emsgInfo, timeOffset) {\n return isFiniteNumber(emsgInfo.presentationTime) ? emsgInfo.presentationTime / emsgInfo.timeScale : timeOffset + emsgInfo.presentationTimeDelta / emsgInfo.timeScale;\n}\n\n/**\n * SAMPLE-AES decrypter\n */\n\nclass SampleAesDecrypter {\n constructor(observer, config, keyData) {\n this.keyData = void 0;\n this.decrypter = void 0;\n this.keyData = keyData;\n this.decrypter = new Decrypter(config, {\n removePKCS7Padding: false\n });\n }\n decryptBuffer(encryptedData) {\n return this.decrypter.decrypt(encryptedData, this.keyData.key.buffer, this.keyData.iv.buffer, DecrypterAesMode.cbc);\n }\n\n // AAC - encrypt all full 16 bytes blocks starting from offset 16\n decryptAacSample(samples, sampleIndex, callback) {\n const curUnit = samples[sampleIndex].unit;\n if (curUnit.length <= 16) {\n // No encrypted portion in this sample (first 16 bytes is not\n // encrypted, see https://developer.apple.com/library/archive/documentation/AudioVideo/Conceptual/HLS_Sample_Encryption/Encryption/Encryption.html),\n return;\n }\n const encryptedData = curUnit.subarray(16, curUnit.length - curUnit.length % 16);\n const encryptedBuffer = encryptedData.buffer.slice(encryptedData.byteOffset, encryptedData.byteOffset + encryptedData.length);\n this.decryptBuffer(encryptedBuffer).then(decryptedBuffer => {\n const decryptedData = new Uint8Array(decryptedBuffer);\n curUnit.set(decryptedData, 16);\n if (!this.decrypter.isSync()) {\n this.decryptAacSamples(samples, sampleIndex + 1, callback);\n }\n }).catch(callback);\n }\n decryptAacSamples(samples, sampleIndex, callback) {\n for (;; sampleIndex++) {\n if (sampleIndex >= samples.length) {\n callback();\n return;\n }\n if (samples[sampleIndex].unit.length < 32) {\n continue;\n }\n this.decryptAacSample(samples, sampleIndex, callback);\n if (!this.decrypter.isSync()) {\n return;\n }\n }\n }\n\n // AVC - encrypt one 16 bytes block out of ten, starting from offset 32\n getAvcEncryptedData(decodedData) {\n const encryptedDataLen = Math.floor((decodedData.length - 48) / 160) * 16 + 16;\n const encryptedData = new Int8Array(encryptedDataLen);\n let outputPos = 0;\n for (let inputPos = 32; inputPos < decodedData.length - 16; inputPos += 160, outputPos += 16) {\n encryptedData.set(decodedData.subarray(inputPos, inputPos + 16), outputPos);\n }\n return encryptedData;\n }\n getAvcDecryptedUnit(decodedData, decryptedData) {\n const uint8DecryptedData = new Uint8Array(decryptedData);\n let inputPos = 0;\n for (let outputPos = 32; outputPos < decodedData.length - 16; outputPos += 160, inputPos += 16) {\n decodedData.set(uint8DecryptedData.subarray(inputPos, inputPos + 16), outputPos);\n }\n return decodedData;\n }\n decryptAvcSample(samples, sampleIndex, unitIndex, callback, curUnit) {\n const decodedData = discardEPB(curUnit.data);\n const encryptedData = this.getAvcEncryptedData(decodedData);\n this.decryptBuffer(encryptedData.buffer).then(decryptedBuffer => {\n curUnit.data = this.getAvcDecryptedUnit(decodedData, decryptedBuffer);\n if (!this.decrypter.isSync()) {\n this.decryptAvcSamples(samples, sampleIndex, unitIndex + 1, callback);\n }\n }).catch(callback);\n }\n decryptAvcSamples(samples, sampleIndex, unitIndex, callback) {\n if (samples instanceof Uint8Array) {\n throw new Error('Cannot decrypt samples of type Uint8Array');\n }\n for (;; sampleIndex++, unitIndex = 0) {\n if (sampleIndex >= samples.length) {\n callback();\n return;\n }\n const curUnits = samples[sampleIndex].units;\n for (;; unitIndex++) {\n if (unitIndex >= curUnits.length) {\n break;\n }\n const curUnit = curUnits[unitIndex];\n if (curUnit.data.length <= 48 || curUnit.type !== 1 && curUnit.type !== 5) {\n continue;\n }\n this.decryptAvcSample(samples, sampleIndex, unitIndex, callback, curUnit);\n if (!this.decrypter.isSync()) {\n return;\n }\n }\n }\n }\n}\n\nclass BaseVideoParser {\n constructor() {\n this.VideoSample = null;\n }\n createVideoSample(key, pts, dts) {\n return {\n key,\n frame: false,\n pts,\n dts,\n units: [],\n length: 0\n };\n }\n getLastNalUnit(samples) {\n var _VideoSample;\n let VideoSample = this.VideoSample;\n let lastUnit;\n // try to fallback to previous sample if current one is empty\n if (!VideoSample || VideoSample.units.length === 0) {\n VideoSample = samples[samples.length - 1];\n }\n if ((_VideoSample = VideoSample) != null && _VideoSample.units) {\n const units = VideoSample.units;\n lastUnit = units[units.length - 1];\n }\n return lastUnit;\n }\n pushAccessUnit(VideoSample, videoTrack) {\n if (VideoSample.units.length && VideoSample.frame) {\n // if sample does not have PTS/DTS, patch with last sample PTS/DTS\n if (VideoSample.pts === undefined) {\n const samples = videoTrack.samples;\n const nbSamples = samples.length;\n if (nbSamples) {\n const lastSample = samples[nbSamples - 1];\n VideoSample.pts = lastSample.pts;\n VideoSample.dts = lastSample.dts;\n } else {\n // dropping samples, no timestamp found\n videoTrack.dropped++;\n return;\n }\n }\n videoTrack.samples.push(VideoSample);\n }\n }\n parseNALu(track, array, endOfSegment) {\n const len = array.byteLength;\n let state = track.naluState || 0;\n const lastState = state;\n const units = [];\n let i = 0;\n let value;\n let overflow;\n let unitType;\n let lastUnitStart = -1;\n let lastUnitType = 0;\n // logger.log('PES:' + Hex.hexDump(array));\n\n if (state === -1) {\n // special use case where we found 3 or 4-byte start codes exactly at the end of previous PES packet\n lastUnitStart = 0;\n // NALu type is value read from offset 0\n lastUnitType = this.getNALuType(array, 0);\n state = 0;\n i = 1;\n }\n while (i < len) {\n value = array[i++];\n // optimization. state 0 and 1 are the predominant case. let's handle them outside of the switch/case\n if (!state) {\n state = value ? 0 : 1;\n continue;\n }\n if (state === 1) {\n state = value ? 0 : 2;\n continue;\n }\n // here we have state either equal to 2 or 3\n if (!value) {\n state = 3;\n } else if (value === 1) {\n overflow = i - state - 1;\n if (lastUnitStart >= 0) {\n const unit = {\n data: array.subarray(lastUnitStart, overflow),\n type: lastUnitType\n };\n // logger.log('pushing NALU, type/size:' + unit.type + '/' + unit.data.byteLength);\n units.push(unit);\n } else {\n // lastUnitStart is undefined => this is the first start code found in this PES packet\n // first check if start code delimiter is overlapping between 2 PES packets,\n // ie it started in last packet (lastState not zero)\n // and ended at the beginning of this PES packet (i <= 4 - lastState)\n const lastUnit = this.getLastNalUnit(track.samples);\n if (lastUnit) {\n if (lastState && i <= 4 - lastState) {\n // start delimiter overlapping between PES packets\n // strip start delimiter bytes from the end of last NAL unit\n // check if lastUnit had a state different from zero\n if (lastUnit.state) {\n // strip last bytes\n lastUnit.data = lastUnit.data.subarray(0, lastUnit.data.byteLength - lastState);\n }\n }\n // If NAL units are not starting right at the beginning of the PES packet, push preceding data into previous NAL unit.\n\n if (overflow > 0) {\n // logger.log('first NALU found with overflow:' + overflow);\n lastUnit.data = appendUint8Array(lastUnit.data, array.subarray(0, overflow));\n lastUnit.state = 0;\n }\n }\n }\n // check if we can read unit type\n if (i < len) {\n unitType = this.getNALuType(array, i);\n // logger.log('find NALU @ offset:' + i + ',type:' + unitType);\n lastUnitStart = i;\n lastUnitType = unitType;\n state = 0;\n } else {\n // not enough byte to read unit type. let's read it on next PES parsing\n state = -1;\n }\n } else {\n state = 0;\n }\n }\n if (lastUnitStart >= 0 && state >= 0) {\n const unit = {\n data: array.subarray(lastUnitStart, len),\n type: lastUnitType,\n state: state\n };\n units.push(unit);\n // logger.log('pushing NALU, type/size/state:' + unit.type + '/' + unit.data.byteLength + '/' + state);\n }\n // no NALu found\n if (units.length === 0) {\n // append pes.data to previous NAL unit\n const lastUnit = this.getLastNalUnit(track.samples);\n if (lastUnit) {\n lastUnit.data = appendUint8Array(lastUnit.data, array);\n }\n }\n track.naluState = state;\n return units;\n }\n}\n\n/**\n * Parser for exponential Golomb codes, a variable-bitwidth number encoding scheme used by h264.\n */\n\nclass ExpGolomb {\n constructor(data) {\n this.data = void 0;\n this.bytesAvailable = void 0;\n this.word = void 0;\n this.bitsAvailable = void 0;\n this.data = data;\n // the number of bytes left to examine in this.data\n this.bytesAvailable = data.byteLength;\n // the current word being examined\n this.word = 0; // :uint\n // the number of bits left to examine in the current word\n this.bitsAvailable = 0; // :uint\n }\n\n // ():void\n loadWord() {\n const data = this.data;\n const bytesAvailable = this.bytesAvailable;\n const position = data.byteLength - bytesAvailable;\n const workingBytes = new Uint8Array(4);\n const availableBytes = Math.min(4, bytesAvailable);\n if (availableBytes === 0) {\n throw new Error('no bytes available');\n }\n workingBytes.set(data.subarray(position, position + availableBytes));\n this.word = new DataView(workingBytes.buffer).getUint32(0);\n // track the amount of this.data that has been processed\n this.bitsAvailable = availableBytes * 8;\n this.bytesAvailable -= availableBytes;\n }\n\n // (count:int):void\n skipBits(count) {\n let skipBytes; // :int\n count = Math.min(count, this.bytesAvailable * 8 + this.bitsAvailable);\n if (this.bitsAvailable > count) {\n this.word <<= count;\n this.bitsAvailable -= count;\n } else {\n count -= this.bitsAvailable;\n skipBytes = count >> 3;\n count -= skipBytes << 3;\n this.bytesAvailable -= skipBytes;\n this.loadWord();\n this.word <<= count;\n this.bitsAvailable -= count;\n }\n }\n\n // (size:int):uint\n readBits(size) {\n let bits = Math.min(this.bitsAvailable, size); // :uint\n const valu = this.word >>> 32 - bits; // :uint\n if (size > 32) {\n logger.error('Cannot read more than 32 bits at a time');\n }\n this.bitsAvailable -= bits;\n if (this.bitsAvailable > 0) {\n this.word <<= bits;\n } else if (this.bytesAvailable > 0) {\n this.loadWord();\n } else {\n throw new Error('no bits available');\n }\n bits = size - bits;\n if (bits > 0 && this.bitsAvailable) {\n return valu << bits | this.readBits(bits);\n } else {\n return valu;\n }\n }\n\n // ():uint\n skipLZ() {\n let leadingZeroCount; // :uint\n for (leadingZeroCount = 0; leadingZeroCount < this.bitsAvailable; ++leadingZeroCount) {\n if ((this.word & 0x80000000 >>> leadingZeroCount) !== 0) {\n // the first bit of working word is 1\n this.word <<= leadingZeroCount;\n this.bitsAvailable -= leadingZeroCount;\n return leadingZeroCount;\n }\n }\n // we exhausted word and still have not found a 1\n this.loadWord();\n return leadingZeroCount + this.skipLZ();\n }\n\n // ():void\n skipUEG() {\n this.skipBits(1 + this.skipLZ());\n }\n\n // ():void\n skipEG() {\n this.skipBits(1 + this.skipLZ());\n }\n\n // ():uint\n readUEG() {\n const clz = this.skipLZ(); // :uint\n return this.readBits(clz + 1) - 1;\n }\n\n // ():int\n readEG() {\n const valu = this.readUEG(); // :int\n if (0x01 & valu) {\n // the number is odd if the low order bit is set\n return 1 + valu >>> 1; // add 1 to make it even, and divide by 2\n } else {\n return -1 * (valu >>> 1); // divide by two then make it negative\n }\n }\n\n // Some convenience functions\n // :Boolean\n readBoolean() {\n return this.readBits(1) === 1;\n }\n\n // ():int\n readUByte() {\n return this.readBits(8);\n }\n\n // ():int\n readUShort() {\n return this.readBits(16);\n }\n\n // ():int\n readUInt() {\n return this.readBits(32);\n }\n}\n\nclass AvcVideoParser extends BaseVideoParser {\n parsePES(track, textTrack, pes, endOfSegment) {\n const units = this.parseNALu(track, pes.data, endOfSegment);\n let VideoSample = this.VideoSample;\n let push;\n let spsfound = false;\n // free pes.data to save up some memory\n pes.data = null;\n\n // if new NAL units found and last sample still there, let's push ...\n // this helps parsing streams with missing AUD (only do this if AUD never found)\n if (VideoSample && units.length && !track.audFound) {\n this.pushAccessUnit(VideoSample, track);\n VideoSample = this.VideoSample = this.createVideoSample(false, pes.pts, pes.dts);\n }\n units.forEach(unit => {\n var _VideoSample2, _VideoSample3;\n switch (unit.type) {\n // NDR\n case 1:\n {\n let iskey = false;\n push = true;\n const data = unit.data;\n // only check slice type to detect KF in case SPS found in same packet (any keyframe is preceded by SPS ...)\n if (spsfound && data.length > 4) {\n // retrieve slice type by parsing beginning of NAL unit (follow H264 spec, slice_header definition) to detect keyframe embedded in NDR\n const sliceType = this.readSliceType(data);\n // 2 : I slice, 4 : SI slice, 7 : I slice, 9: SI slice\n // SI slice : A slice that is coded using intra prediction only and using quantisation of the prediction samples.\n // An SI slice can be coded such that its decoded samples can be constructed identically to an SP slice.\n // I slice: A slice that is not an SI slice that is decoded using intra prediction only.\n // if (sliceType === 2 || sliceType === 7) {\n if (sliceType === 2 || sliceType === 4 || sliceType === 7 || sliceType === 9) {\n iskey = true;\n }\n }\n if (iskey) {\n var _VideoSample;\n // if we have non-keyframe data already, that cannot belong to the same frame as a keyframe, so force a push\n if ((_VideoSample = VideoSample) != null && _VideoSample.frame && !VideoSample.key) {\n this.pushAccessUnit(VideoSample, track);\n VideoSample = this.VideoSample = null;\n }\n }\n if (!VideoSample) {\n VideoSample = this.VideoSample = this.createVideoSample(true, pes.pts, pes.dts);\n }\n VideoSample.frame = true;\n VideoSample.key = iskey;\n break;\n // IDR\n }\n case 5:\n push = true;\n // handle PES not starting with AUD\n // if we have frame data already, that cannot belong to the same frame, so force a push\n if ((_VideoSample2 = VideoSample) != null && _VideoSample2.frame && !VideoSample.key) {\n this.pushAccessUnit(VideoSample, track);\n VideoSample = this.VideoSample = null;\n }\n if (!VideoSample) {\n VideoSample = this.VideoSample = this.createVideoSample(true, pes.pts, pes.dts);\n }\n VideoSample.key = true;\n VideoSample.frame = true;\n break;\n // SEI\n case 6:\n {\n push = true;\n parseSEIMessageFromNALu(unit.data, 1, pes.pts, textTrack.samples);\n break;\n // SPS\n }\n case 7:\n {\n var _track$pixelRatio, _track$pixelRatio2;\n push = true;\n spsfound = true;\n const sps = unit.data;\n const config = this.readSPS(sps);\n if (!track.sps || track.width !== config.width || track.height !== config.height || ((_track$pixelRatio = track.pixelRatio) == null ? void 0 : _track$pixelRatio[0]) !== config.pixelRatio[0] || ((_track$pixelRatio2 = track.pixelRatio) == null ? void 0 : _track$pixelRatio2[1]) !== config.pixelRatio[1]) {\n track.width = config.width;\n track.height = config.height;\n track.pixelRatio = config.pixelRatio;\n track.sps = [sps];\n const codecarray = sps.subarray(1, 4);\n let codecstring = 'avc1.';\n for (let i = 0; i < 3; i++) {\n let h = codecarray[i].toString(16);\n if (h.length < 2) {\n h = '0' + h;\n }\n codecstring += h;\n }\n track.codec = codecstring;\n }\n break;\n }\n // PPS\n case 8:\n push = true;\n track.pps = [unit.data];\n break;\n // AUD\n case 9:\n push = true;\n track.audFound = true;\n if ((_VideoSample3 = VideoSample) != null && _VideoSample3.frame) {\n this.pushAccessUnit(VideoSample, track);\n VideoSample = null;\n }\n if (!VideoSample) {\n VideoSample = this.VideoSample = this.createVideoSample(false, pes.pts, pes.dts);\n }\n break;\n // Filler Data\n case 12:\n push = true;\n break;\n default:\n push = false;\n break;\n }\n if (VideoSample && push) {\n const units = VideoSample.units;\n units.push(unit);\n }\n });\n // if last PES packet, push samples\n if (endOfSegment && VideoSample) {\n this.pushAccessUnit(VideoSample, track);\n this.VideoSample = null;\n }\n }\n getNALuType(data, offset) {\n return data[offset] & 0x1f;\n }\n readSliceType(data) {\n const eg = new ExpGolomb(data);\n // skip NALu type\n eg.readUByte();\n // discard first_mb_in_slice\n eg.readUEG();\n // return slice_type\n return eg.readUEG();\n }\n\n /**\n * The scaling list is optionally transmitted as part of a sequence parameter\n * set and is not relevant to transmuxing.\n * @param count the number of entries in this scaling list\n * @see Recommendation ITU-T H.264, Section 7.3.2.1.1.1\n */\n skipScalingList(count, reader) {\n let lastScale = 8;\n let nextScale = 8;\n let deltaScale;\n for (let j = 0; j < count; j++) {\n if (nextScale !== 0) {\n deltaScale = reader.readEG();\n nextScale = (lastScale + deltaScale + 256) % 256;\n }\n lastScale = nextScale === 0 ? lastScale : nextScale;\n }\n }\n\n /**\n * Read a sequence parameter set and return some interesting video\n * properties. A sequence parameter set is the H264 metadata that\n * describes the properties of upcoming video frames.\n * @returns an object with configuration parsed from the\n * sequence parameter set, including the dimensions of the\n * associated video frames.\n */\n readSPS(sps) {\n const eg = new ExpGolomb(sps);\n let frameCropLeftOffset = 0;\n let frameCropRightOffset = 0;\n let frameCropTopOffset = 0;\n let frameCropBottomOffset = 0;\n let numRefFramesInPicOrderCntCycle;\n let scalingListCount;\n let i;\n const readUByte = eg.readUByte.bind(eg);\n const readBits = eg.readBits.bind(eg);\n const readUEG = eg.readUEG.bind(eg);\n const readBoolean = eg.readBoolean.bind(eg);\n const skipBits = eg.skipBits.bind(eg);\n const skipEG = eg.skipEG.bind(eg);\n const skipUEG = eg.skipUEG.bind(eg);\n const skipScalingList = this.skipScalingList.bind(this);\n readUByte();\n const profileIdc = readUByte(); // profile_idc\n readBits(5); // profileCompat constraint_set[0-4]_flag, u(5)\n skipBits(3); // reserved_zero_3bits u(3),\n readUByte(); // level_idc u(8)\n skipUEG(); // seq_parameter_set_id\n // some profiles have more optional data we don't need\n if (profileIdc === 100 || profileIdc === 110 || profileIdc === 122 || profileIdc === 244 || profileIdc === 44 || profileIdc === 83 || profileIdc === 86 || profileIdc === 118 || profileIdc === 128) {\n const chromaFormatIdc = readUEG();\n if (chromaFormatIdc === 3) {\n skipBits(1);\n } // separate_colour_plane_flag\n\n skipUEG(); // bit_depth_luma_minus8\n skipUEG(); // bit_depth_chroma_minus8\n skipBits(1); // qpprime_y_zero_transform_bypass_flag\n if (readBoolean()) {\n // seq_scaling_matrix_present_flag\n scalingListCount = chromaFormatIdc !== 3 ? 8 : 12;\n for (i = 0; i < scalingListCount; i++) {\n if (readBoolean()) {\n // seq_scaling_list_present_flag[ i ]\n if (i < 6) {\n skipScalingList(16, eg);\n } else {\n skipScalingList(64, eg);\n }\n }\n }\n }\n }\n skipUEG(); // log2_max_frame_num_minus4\n const picOrderCntType = readUEG();\n if (picOrderCntType === 0) {\n readUEG(); // log2_max_pic_order_cnt_lsb_minus4\n } else if (picOrderCntType === 1) {\n skipBits(1); // delta_pic_order_always_zero_flag\n skipEG(); // offset_for_non_ref_pic\n skipEG(); // offset_for_top_to_bottom_field\n numRefFramesInPicOrderCntCycle = readUEG();\n for (i = 0; i < numRefFramesInPicOrderCntCycle; i++) {\n skipEG();\n } // offset_for_ref_frame[ i ]\n }\n skipUEG(); // max_num_ref_frames\n skipBits(1); // gaps_in_frame_num_value_allowed_flag\n const picWidthInMbsMinus1 = readUEG();\n const picHeightInMapUnitsMinus1 = readUEG();\n const frameMbsOnlyFlag = readBits(1);\n if (frameMbsOnlyFlag === 0) {\n skipBits(1);\n } // mb_adaptive_frame_field_flag\n\n skipBits(1); // direct_8x8_inference_flag\n if (readBoolean()) {\n // frame_cropping_flag\n frameCropLeftOffset = readUEG();\n frameCropRightOffset = readUEG();\n frameCropTopOffset = readUEG();\n frameCropBottomOffset = readUEG();\n }\n let pixelRatio = [1, 1];\n if (readBoolean()) {\n // vui_parameters_present_flag\n if (readBoolean()) {\n // aspect_ratio_info_present_flag\n const aspectRatioIdc = readUByte();\n switch (aspectRatioIdc) {\n case 1:\n pixelRatio = [1, 1];\n break;\n case 2:\n pixelRatio = [12, 11];\n break;\n case 3:\n pixelRatio = [10, 11];\n break;\n case 4:\n pixelRatio = [16, 11];\n break;\n case 5:\n pixelRatio = [40, 33];\n break;\n case 6:\n pixelRatio = [24, 11];\n break;\n case 7:\n pixelRatio = [20, 11];\n break;\n case 8:\n pixelRatio = [32, 11];\n break;\n case 9:\n pixelRatio = [80, 33];\n break;\n case 10:\n pixelRatio = [18, 11];\n break;\n case 11:\n pixelRatio = [15, 11];\n break;\n case 12:\n pixelRatio = [64, 33];\n break;\n case 13:\n pixelRatio = [160, 99];\n break;\n case 14:\n pixelRatio = [4, 3];\n break;\n case 15:\n pixelRatio = [3, 2];\n break;\n case 16:\n pixelRatio = [2, 1];\n break;\n case 255:\n {\n pixelRatio = [readUByte() << 8 | readUByte(), readUByte() << 8 | readUByte()];\n break;\n }\n }\n }\n }\n return {\n width: Math.ceil((picWidthInMbsMinus1 + 1) * 16 - frameCropLeftOffset * 2 - frameCropRightOffset * 2),\n height: (2 - frameMbsOnlyFlag) * (picHeightInMapUnitsMinus1 + 1) * 16 - (frameMbsOnlyFlag ? 2 : 4) * (frameCropTopOffset + frameCropBottomOffset),\n pixelRatio: pixelRatio\n };\n }\n}\n\nclass HevcVideoParser extends BaseVideoParser {\n constructor(...args) {\n super(...args);\n this.initVPS = null;\n }\n parsePES(track, textTrack, pes, endOfSegment) {\n const units = this.parseNALu(track, pes.data, endOfSegment);\n let VideoSample = this.VideoSample;\n let push;\n let spsfound = false;\n // free pes.data to save up some memory\n pes.data = null;\n\n // if new NAL units found and last sample still there, let's push ...\n // this helps parsing streams with missing AUD (only do this if AUD never found)\n if (VideoSample && units.length && !track.audFound) {\n this.pushAccessUnit(VideoSample, track);\n VideoSample = this.VideoSample = this.createVideoSample(false, pes.pts, pes.dts);\n }\n units.forEach(unit => {\n var _VideoSample2, _VideoSample3;\n switch (unit.type) {\n // NON-IDR, NON RANDOM ACCESS SLICE\n case 0:\n case 1:\n case 2:\n case 3:\n case 4:\n case 5:\n case 6:\n case 7:\n case 8:\n case 9:\n if (!VideoSample) {\n VideoSample = this.VideoSample = this.createVideoSample(false, pes.pts, pes.dts);\n }\n VideoSample.frame = true;\n push = true;\n break;\n\n // CRA, BLA (random access picture)\n case 16:\n case 17:\n case 18:\n case 21:\n push = true;\n if (spsfound) {\n var _VideoSample;\n // handle PES not starting with AUD\n // if we have frame data already, that cannot belong to the same frame, so force a push\n if ((_VideoSample = VideoSample) != null && _VideoSample.frame && !VideoSample.key) {\n this.pushAccessUnit(VideoSample, track);\n VideoSample = this.VideoSample = null;\n }\n }\n if (!VideoSample) {\n VideoSample = this.VideoSample = this.createVideoSample(true, pes.pts, pes.dts);\n }\n VideoSample.key = true;\n VideoSample.frame = true;\n break;\n\n // IDR\n case 19:\n case 20:\n push = true;\n // handle PES not starting with AUD\n // if we have frame data already, that cannot belong to the same frame, so force a push\n if ((_VideoSample2 = VideoSample) != null && _VideoSample2.frame && !VideoSample.key) {\n this.pushAccessUnit(VideoSample, track);\n VideoSample = this.VideoSample = null;\n }\n if (!VideoSample) {\n VideoSample = this.VideoSample = this.createVideoSample(true, pes.pts, pes.dts);\n }\n VideoSample.key = true;\n VideoSample.frame = true;\n break;\n\n // SEI\n case 39:\n push = true;\n parseSEIMessageFromNALu(unit.data, 2,\n // NALu header size\n pes.pts, textTrack.samples);\n break;\n\n // VPS\n case 32:\n push = true;\n if (!track.vps) {\n if (typeof track.params !== 'object') {\n track.params = {};\n }\n track.params = _extends(track.params, this.readVPS(unit.data));\n this.initVPS = unit.data;\n }\n track.vps = [unit.data];\n break;\n\n // SPS\n case 33:\n push = true;\n spsfound = true;\n if (track.vps !== undefined && track.vps[0] !== this.initVPS && track.sps !== undefined && !this.matchSPS(track.sps[0], unit.data)) {\n this.initVPS = track.vps[0];\n track.sps = track.pps = undefined;\n }\n if (!track.sps) {\n const config = this.readSPS(unit.data);\n track.width = config.width;\n track.height = config.height;\n track.pixelRatio = config.pixelRatio;\n track.codec = config.codecString;\n track.sps = [];\n if (typeof track.params !== 'object') {\n track.params = {};\n }\n for (const prop in config.params) {\n track.params[prop] = config.params[prop];\n }\n }\n this.pushParameterSet(track.sps, unit.data, track.vps);\n if (!VideoSample) {\n VideoSample = this.VideoSample = this.createVideoSample(true, pes.pts, pes.dts);\n }\n VideoSample.key = true;\n break;\n\n // PPS\n case 34:\n push = true;\n if (typeof track.params === 'object') {\n if (!track.pps) {\n track.pps = [];\n const config = this.readPPS(unit.data);\n for (const prop in config) {\n track.params[prop] = config[prop];\n }\n }\n this.pushParameterSet(track.pps, unit.data, track.vps);\n }\n break;\n\n // ACCESS UNIT DELIMITER\n case 35:\n push = true;\n track.audFound = true;\n if ((_VideoSample3 = VideoSample) != null && _VideoSample3.frame) {\n this.pushAccessUnit(VideoSample, track);\n VideoSample = null;\n }\n if (!VideoSample) {\n VideoSample = this.VideoSample = this.createVideoSample(false, pes.pts, pes.dts);\n }\n break;\n default:\n push = false;\n break;\n }\n if (VideoSample && push) {\n const units = VideoSample.units;\n units.push(unit);\n }\n });\n // if last PES packet, push samples\n if (endOfSegment && VideoSample) {\n this.pushAccessUnit(VideoSample, track);\n this.VideoSample = null;\n }\n }\n pushParameterSet(parameterSets, data, vps) {\n if (vps && vps[0] === this.initVPS || !vps && !parameterSets.length) {\n parameterSets.push(data);\n }\n }\n getNALuType(data, offset) {\n return (data[offset] & 0x7e) >>> 1;\n }\n ebsp2rbsp(arr) {\n const dst = new Uint8Array(arr.byteLength);\n let dstIdx = 0;\n for (let i = 0; i < arr.byteLength; i++) {\n if (i >= 2) {\n // Unescape: Skip 0x03 after 00 00\n if (arr[i] === 0x03 && arr[i - 1] === 0x00 && arr[i - 2] === 0x00) {\n continue;\n }\n }\n dst[dstIdx] = arr[i];\n dstIdx++;\n }\n return new Uint8Array(dst.buffer, 0, dstIdx);\n }\n pushAccessUnit(VideoSample, videoTrack) {\n super.pushAccessUnit(VideoSample, videoTrack);\n if (this.initVPS) {\n this.initVPS = null; // null initVPS to prevent possible track's sps/pps growth until next VPS\n }\n }\n readVPS(vps) {\n const eg = new ExpGolomb(vps);\n // remove header\n eg.readUByte();\n eg.readUByte();\n eg.readBits(4); // video_parameter_set_id\n eg.skipBits(2);\n eg.readBits(6); // max_layers_minus1\n const max_sub_layers_minus1 = eg.readBits(3);\n const temporal_id_nesting_flag = eg.readBoolean();\n // ...vui fps can be here, but empty fps value is not critical for metadata\n\n return {\n numTemporalLayers: max_sub_layers_minus1 + 1,\n temporalIdNested: temporal_id_nesting_flag\n };\n }\n readSPS(sps) {\n const eg = new ExpGolomb(this.ebsp2rbsp(sps));\n eg.readUByte();\n eg.readUByte();\n eg.readBits(4); //video_parameter_set_id\n const max_sub_layers_minus1 = eg.readBits(3);\n eg.readBoolean(); // temporal_id_nesting_flag\n\n // profile_tier_level\n const general_profile_space = eg.readBits(2);\n const general_tier_flag = eg.readBoolean();\n const general_profile_idc = eg.readBits(5);\n const general_profile_compatibility_flags_1 = eg.readUByte();\n const general_profile_compatibility_flags_2 = eg.readUByte();\n const general_profile_compatibility_flags_3 = eg.readUByte();\n const general_profile_compatibility_flags_4 = eg.readUByte();\n const general_constraint_indicator_flags_1 = eg.readUByte();\n const general_constraint_indicator_flags_2 = eg.readUByte();\n const general_constraint_indicator_flags_3 = eg.readUByte();\n const general_constraint_indicator_flags_4 = eg.readUByte();\n const general_constraint_indicator_flags_5 = eg.readUByte();\n const general_constraint_indicator_flags_6 = eg.readUByte();\n const general_level_idc = eg.readUByte();\n const sub_layer_profile_present_flags = [];\n const sub_layer_level_present_flags = [];\n for (let i = 0; i < max_sub_layers_minus1; i++) {\n sub_layer_profile_present_flags.push(eg.readBoolean());\n sub_layer_level_present_flags.push(eg.readBoolean());\n }\n if (max_sub_layers_minus1 > 0) {\n for (let i = max_sub_layers_minus1; i < 8; i++) {\n eg.readBits(2);\n }\n }\n for (let i = 0; i < max_sub_layers_minus1; i++) {\n if (sub_layer_profile_present_flags[i]) {\n eg.readUByte(); // sub_layer_profile_space, sub_layer_tier_flag, sub_layer_profile_idc\n eg.readUByte();\n eg.readUByte();\n eg.readUByte();\n eg.readUByte(); // sub_layer_profile_compatibility_flag\n eg.readUByte();\n eg.readUByte();\n eg.readUByte();\n eg.readUByte();\n eg.readUByte();\n eg.readUByte();\n }\n if (sub_layer_level_present_flags[i]) {\n eg.readUByte();\n }\n }\n eg.readUEG(); // seq_parameter_set_id\n const chroma_format_idc = eg.readUEG();\n if (chroma_format_idc == 3) {\n eg.skipBits(1); //separate_colour_plane_flag\n }\n const pic_width_in_luma_samples = eg.readUEG();\n const pic_height_in_luma_samples = eg.readUEG();\n const conformance_window_flag = eg.readBoolean();\n let pic_left_offset = 0,\n pic_right_offset = 0,\n pic_top_offset = 0,\n pic_bottom_offset = 0;\n if (conformance_window_flag) {\n pic_left_offset += eg.readUEG();\n pic_right_offset += eg.readUEG();\n pic_top_offset += eg.readUEG();\n pic_bottom_offset += eg.readUEG();\n }\n const bit_depth_luma_minus8 = eg.readUEG();\n const bit_depth_chroma_minus8 = eg.readUEG();\n const log2_max_pic_order_cnt_lsb_minus4 = eg.readUEG();\n const sub_layer_ordering_info_present_flag = eg.readBoolean();\n for (let i = sub_layer_ordering_info_present_flag ? 0 : max_sub_layers_minus1; i <= max_sub_layers_minus1; i++) {\n eg.skipUEG(); // max_dec_pic_buffering_minus1[i]\n eg.skipUEG(); // max_num_reorder_pics[i]\n eg.skipUEG(); // max_latency_increase_plus1[i]\n }\n eg.skipUEG(); // log2_min_luma_coding_block_size_minus3\n eg.skipUEG(); // log2_diff_max_min_luma_coding_block_size\n eg.skipUEG(); // log2_min_transform_block_size_minus2\n eg.skipUEG(); // log2_diff_max_min_transform_block_size\n eg.skipUEG(); // max_transform_hierarchy_depth_inter\n eg.skipUEG(); // max_transform_hierarchy_depth_intra\n const scaling_list_enabled_flag = eg.readBoolean();\n if (scaling_list_enabled_flag) {\n const sps_scaling_list_data_present_flag = eg.readBoolean();\n if (sps_scaling_list_data_present_flag) {\n for (let sizeId = 0; sizeId < 4; sizeId++) {\n for (let matrixId = 0; matrixId < (sizeId === 3 ? 2 : 6); matrixId++) {\n const scaling_list_pred_mode_flag = eg.readBoolean();\n if (!scaling_list_pred_mode_flag) {\n eg.readUEG(); // scaling_list_pred_matrix_id_delta\n } else {\n const coefNum = Math.min(64, 1 << 4 + (sizeId << 1));\n if (sizeId > 1) {\n eg.readEG();\n }\n for (let i = 0; i < coefNum; i++) {\n eg.readEG();\n }\n }\n }\n }\n }\n }\n eg.readBoolean(); // amp_enabled_flag\n eg.readBoolean(); // sample_adaptive_offset_enabled_flag\n const pcm_enabled_flag = eg.readBoolean();\n if (pcm_enabled_flag) {\n eg.readUByte();\n eg.skipUEG();\n eg.skipUEG();\n eg.readBoolean();\n }\n const num_short_term_ref_pic_sets = eg.readUEG();\n let num_delta_pocs = 0;\n for (let i = 0; i < num_short_term_ref_pic_sets; i++) {\n let inter_ref_pic_set_prediction_flag = false;\n if (i !== 0) {\n inter_ref_pic_set_prediction_flag = eg.readBoolean();\n }\n if (inter_ref_pic_set_prediction_flag) {\n if (i === num_short_term_ref_pic_sets) {\n eg.readUEG();\n }\n eg.readBoolean();\n eg.readUEG();\n let next_num_delta_pocs = 0;\n for (let j = 0; j <= num_delta_pocs; j++) {\n const used_by_curr_pic_flag = eg.readBoolean();\n let use_delta_flag = false;\n if (!used_by_curr_pic_flag) {\n use_delta_flag = eg.readBoolean();\n }\n if (used_by_curr_pic_flag || use_delta_flag) {\n next_num_delta_pocs++;\n }\n }\n num_delta_pocs = next_num_delta_pocs;\n } else {\n const num_negative_pics = eg.readUEG();\n const num_positive_pics = eg.readUEG();\n num_delta_pocs = num_negative_pics + num_positive_pics;\n for (let j = 0; j < num_negative_pics; j++) {\n eg.readUEG();\n eg.readBoolean();\n }\n for (let j = 0; j < num_positive_pics; j++) {\n eg.readUEG();\n eg.readBoolean();\n }\n }\n }\n const long_term_ref_pics_present_flag = eg.readBoolean();\n if (long_term_ref_pics_present_flag) {\n const num_long_term_ref_pics_sps = eg.readUEG();\n for (let i = 0; i < num_long_term_ref_pics_sps; i++) {\n for (let j = 0; j < log2_max_pic_order_cnt_lsb_minus4 + 4; j++) {\n eg.readBits(1);\n }\n eg.readBits(1);\n }\n }\n let min_spatial_segmentation_idc = 0;\n let sar_width = 1,\n sar_height = 1;\n let fps_fixed = true,\n fps_den = 1,\n fps_num = 0;\n eg.readBoolean(); // sps_temporal_mvp_enabled_flag\n eg.readBoolean(); // strong_intra_smoothing_enabled_flag\n let default_display_window_flag = false;\n const vui_parameters_present_flag = eg.readBoolean();\n if (vui_parameters_present_flag) {\n const aspect_ratio_info_present_flag = eg.readBoolean();\n if (aspect_ratio_info_present_flag) {\n const aspect_ratio_idc = eg.readUByte();\n const sar_width_table = [1, 12, 10, 16, 40, 24, 20, 32, 80, 18, 15, 64, 160, 4, 3, 2];\n const sar_height_table = [1, 11, 11, 11, 33, 11, 11, 11, 33, 11, 11, 33, 99, 3, 2, 1];\n if (aspect_ratio_idc > 0 && aspect_ratio_idc < 16) {\n sar_width = sar_width_table[aspect_ratio_idc - 1];\n sar_height = sar_height_table[aspect_ratio_idc - 1];\n } else if (aspect_ratio_idc === 255) {\n sar_width = eg.readBits(16);\n sar_height = eg.readBits(16);\n }\n }\n const overscan_info_present_flag = eg.readBoolean();\n if (overscan_info_present_flag) {\n eg.readBoolean();\n }\n const video_signal_type_present_flag = eg.readBoolean();\n if (video_signal_type_present_flag) {\n eg.readBits(3);\n eg.readBoolean();\n const colour_description_present_flag = eg.readBoolean();\n if (colour_description_present_flag) {\n eg.readUByte();\n eg.readUByte();\n eg.readUByte();\n }\n }\n const chroma_loc_info_present_flag = eg.readBoolean();\n if (chroma_loc_info_present_flag) {\n eg.readUEG();\n eg.readUEG();\n }\n eg.readBoolean(); // neutral_chroma_indication_flag\n eg.readBoolean(); // field_seq_flag\n eg.readBoolean(); // frame_field_info_present_flag\n default_display_window_flag = eg.readBoolean();\n if (default_display_window_flag) {\n eg.skipUEG();\n eg.skipUEG();\n eg.skipUEG();\n eg.skipUEG();\n }\n const vui_timing_info_present_flag = eg.readBoolean();\n if (vui_timing_info_present_flag) {\n fps_den = eg.readBits(32);\n fps_num = eg.readBits(32);\n const vui_poc_proportional_to_timing_flag = eg.readBoolean();\n if (vui_poc_proportional_to_timing_flag) {\n eg.readUEG();\n }\n const vui_hrd_parameters_present_flag = eg.readBoolean();\n if (vui_hrd_parameters_present_flag) {\n //const commonInfPresentFlag = true;\n //if (commonInfPresentFlag) {\n const nal_hrd_parameters_present_flag = eg.readBoolean();\n const vcl_hrd_parameters_present_flag = eg.readBoolean();\n let sub_pic_hrd_params_present_flag = false;\n if (nal_hrd_parameters_present_flag || vcl_hrd_parameters_present_flag) {\n sub_pic_hrd_params_present_flag = eg.readBoolean();\n if (sub_pic_hrd_params_present_flag) {\n eg.readUByte();\n eg.readBits(5);\n eg.readBoolean();\n eg.readBits(5);\n }\n eg.readBits(4); // bit_rate_scale\n eg.readBits(4); // cpb_size_scale\n if (sub_pic_hrd_params_present_flag) {\n eg.readBits(4);\n }\n eg.readBits(5);\n eg.readBits(5);\n eg.readBits(5);\n }\n //}\n for (let i = 0; i <= max_sub_layers_minus1; i++) {\n fps_fixed = eg.readBoolean(); // fixed_pic_rate_general_flag\n const fixed_pic_rate_within_cvs_flag = fps_fixed || eg.readBoolean();\n let low_delay_hrd_flag = false;\n if (fixed_pic_rate_within_cvs_flag) {\n eg.readEG();\n } else {\n low_delay_hrd_flag = eg.readBoolean();\n }\n const cpb_cnt = low_delay_hrd_flag ? 1 : eg.readUEG() + 1;\n if (nal_hrd_parameters_present_flag) {\n for (let j = 0; j < cpb_cnt; j++) {\n eg.readUEG();\n eg.readUEG();\n if (sub_pic_hrd_params_present_flag) {\n eg.readUEG();\n eg.readUEG();\n }\n eg.skipBits(1);\n }\n }\n if (vcl_hrd_parameters_present_flag) {\n for (let j = 0; j < cpb_cnt; j++) {\n eg.readUEG();\n eg.readUEG();\n if (sub_pic_hrd_params_present_flag) {\n eg.readUEG();\n eg.readUEG();\n }\n eg.skipBits(1);\n }\n }\n }\n }\n }\n const bitstream_restriction_flag = eg.readBoolean();\n if (bitstream_restriction_flag) {\n eg.readBoolean(); // tiles_fixed_structure_flag\n eg.readBoolean(); // motion_vectors_over_pic_boundaries_flag\n eg.readBoolean(); // restricted_ref_pic_lists_flag\n min_spatial_segmentation_idc = eg.readUEG();\n }\n }\n let width = pic_width_in_luma_samples,\n height = pic_height_in_luma_samples;\n if (conformance_window_flag) {\n let chroma_scale_w = 1,\n chroma_scale_h = 1;\n if (chroma_format_idc === 1) {\n // YUV 420\n chroma_scale_w = chroma_scale_h = 2;\n } else if (chroma_format_idc == 2) {\n // YUV 422\n chroma_scale_w = 2;\n }\n width = pic_width_in_luma_samples - chroma_scale_w * pic_right_offset - chroma_scale_w * pic_left_offset;\n height = pic_height_in_luma_samples - chroma_scale_h * pic_bottom_offset - chroma_scale_h * pic_top_offset;\n }\n const profile_space_string = general_profile_space ? ['A', 'B', 'C'][general_profile_space] : '';\n const profile_compatibility_buf = general_profile_compatibility_flags_1 << 24 | general_profile_compatibility_flags_2 << 16 | general_profile_compatibility_flags_3 << 8 | general_profile_compatibility_flags_4;\n let profile_compatibility_rev = 0;\n for (let i = 0; i < 32; i++) {\n profile_compatibility_rev = (profile_compatibility_rev | (profile_compatibility_buf >> i & 1) << 31 - i) >>> 0; // reverse bit position (and cast as UInt32)\n }\n let profile_compatibility_flags_string = profile_compatibility_rev.toString(16);\n if (general_profile_idc === 1 && profile_compatibility_flags_string === '2') {\n profile_compatibility_flags_string = '6';\n }\n const tier_flag_string = general_tier_flag ? 'H' : 'L';\n return {\n codecString: `hvc1.${profile_space_string}${general_profile_idc}.${profile_compatibility_flags_string}.${tier_flag_string}${general_level_idc}.B0`,\n params: {\n general_tier_flag,\n general_profile_idc,\n general_profile_space,\n general_profile_compatibility_flags: [general_profile_compatibility_flags_1, general_profile_compatibility_flags_2, general_profile_compatibility_flags_3, general_profile_compatibility_flags_4],\n general_constraint_indicator_flags: [general_constraint_indicator_flags_1, general_constraint_indicator_flags_2, general_constraint_indicator_flags_3, general_constraint_indicator_flags_4, general_constraint_indicator_flags_5, general_constraint_indicator_flags_6],\n general_level_idc,\n bit_depth: bit_depth_luma_minus8 + 8,\n bit_depth_luma_minus8,\n bit_depth_chroma_minus8,\n min_spatial_segmentation_idc,\n chroma_format_idc: chroma_format_idc,\n frame_rate: {\n fixed: fps_fixed,\n fps: fps_num / fps_den\n }\n },\n width,\n height,\n pixelRatio: [sar_width, sar_height]\n };\n }\n readPPS(pps) {\n const eg = new ExpGolomb(this.ebsp2rbsp(pps));\n eg.readUByte();\n eg.readUByte();\n eg.skipUEG(); // pic_parameter_set_id\n eg.skipUEG(); // seq_parameter_set_id\n eg.skipBits(2); // dependent_slice_segments_enabled_flag, output_flag_present_flag\n eg.skipBits(3); // num_extra_slice_header_bits\n eg.skipBits(2); // sign_data_hiding_enabled_flag, cabac_init_present_flag\n eg.skipUEG();\n eg.skipUEG();\n eg.skipEG(); // init_qp_minus26\n eg.skipBits(2); // constrained_intra_pred_flag, transform_skip_enabled_flag\n const cu_qp_delta_enabled_flag = eg.readBoolean();\n if (cu_qp_delta_enabled_flag) {\n eg.skipUEG();\n }\n eg.skipEG(); // cb_qp_offset\n eg.skipEG(); // cr_qp_offset\n eg.skipBits(4); // pps_slice_chroma_qp_offsets_present_flag, weighted_pred_flag, weighted_bipred_flag, transquant_bypass_enabled_flag\n const tiles_enabled_flag = eg.readBoolean();\n const entropy_coding_sync_enabled_flag = eg.readBoolean();\n let parallelismType = 1; // slice-based parallel decoding\n if (entropy_coding_sync_enabled_flag && tiles_enabled_flag) {\n parallelismType = 0; // mixed-type parallel decoding\n } else if (entropy_coding_sync_enabled_flag) {\n parallelismType = 3; // wavefront-based parallel decoding\n } else if (tiles_enabled_flag) {\n parallelismType = 2; // tile-based parallel decoding\n }\n return {\n parallelismType\n };\n }\n matchSPS(sps1, sps2) {\n // compare without headers and VPS related params\n return String.fromCharCode.apply(null, sps1).substr(3) === String.fromCharCode.apply(null, sps2).substr(3);\n }\n}\n\nconst PACKET_LENGTH = 188;\nclass TSDemuxer {\n constructor(observer, config, typeSupported, logger) {\n this.logger = void 0;\n this.observer = void 0;\n this.config = void 0;\n this.typeSupported = void 0;\n this.sampleAes = null;\n this.pmtParsed = false;\n this.audioCodec = void 0;\n this.videoCodec = void 0;\n this._pmtId = -1;\n this._videoTrack = void 0;\n this._audioTrack = void 0;\n this._id3Track = void 0;\n this._txtTrack = void 0;\n this.aacOverFlow = null;\n this.remainderData = null;\n this.videoParser = void 0;\n this.observer = observer;\n this.config = config;\n this.typeSupported = typeSupported;\n this.logger = logger;\n this.videoParser = null;\n }\n static probe(data, logger) {\n const syncOffset = TSDemuxer.syncOffset(data);\n if (syncOffset > 0) {\n logger.warn(`MPEG2-TS detected but first sync word found @ offset ${syncOffset}`);\n }\n return syncOffset !== -1;\n }\n static syncOffset(data) {\n const length = data.length;\n let scanwindow = Math.min(PACKET_LENGTH * 5, length - PACKET_LENGTH) + 1;\n let i = 0;\n while (i < scanwindow) {\n // a TS init segment should contain at least 2 TS packets: PAT and PMT, each starting with 0x47\n let foundPat = false;\n let packetStart = -1;\n let tsPackets = 0;\n for (let j = i; j < length; j += PACKET_LENGTH) {\n if (data[j] === 0x47 && (length - j === PACKET_LENGTH || data[j + PACKET_LENGTH] === 0x47)) {\n tsPackets++;\n if (packetStart === -1) {\n packetStart = j;\n // First sync word found at offset, increase scan length (#5251)\n if (packetStart !== 0) {\n scanwindow = Math.min(packetStart + PACKET_LENGTH * 99, data.length - PACKET_LENGTH) + 1;\n }\n }\n if (!foundPat) {\n foundPat = parsePID(data, j) === 0;\n }\n // Sync word found at 0 with 3 packets, or found at offset least 2 packets up to scanwindow (#5501)\n if (foundPat && tsPackets > 1 && (packetStart === 0 && tsPackets > 2 || j + PACKET_LENGTH > scanwindow)) {\n return packetStart;\n }\n } else if (tsPackets) {\n // Exit if sync word found, but does not contain contiguous packets\n return -1;\n } else {\n break;\n }\n }\n i++;\n }\n return -1;\n }\n\n /**\n * Creates a track model internal to demuxer used to drive remuxing input\n */\n static createTrack(type, duration) {\n return {\n container: type === 'video' || type === 'audio' ? 'video/mp2t' : undefined,\n type,\n id: RemuxerTrackIdConfig[type],\n pid: -1,\n inputTimeScale: 90000,\n sequenceNumber: 0,\n samples: [],\n dropped: 0,\n duration: type === 'audio' ? duration : undefined\n };\n }\n\n /**\n * Initializes a new init segment on the demuxer/remuxer interface. Needed for discontinuities/track-switches (or at stream start)\n * Resets all internal track instances of the demuxer.\n */\n resetInitSegment(initSegment, audioCodec, videoCodec, trackDuration) {\n this.pmtParsed = false;\n this._pmtId = -1;\n this._videoTrack = TSDemuxer.createTrack('video');\n this._videoTrack.duration = trackDuration;\n this._audioTrack = TSDemuxer.createTrack('audio', trackDuration);\n this._id3Track = TSDemuxer.createTrack('id3');\n this._txtTrack = TSDemuxer.createTrack('text');\n this._audioTrack.segmentCodec = 'aac';\n\n // flush any partial content\n this.videoParser = null;\n this.aacOverFlow = null;\n this.remainderData = null;\n this.audioCodec = audioCodec;\n this.videoCodec = videoCodec;\n }\n resetTimeStamp() {}\n resetContiguity() {\n const {\n _audioTrack,\n _videoTrack,\n _id3Track\n } = this;\n if (_audioTrack) {\n _audioTrack.pesData = null;\n }\n if (_videoTrack) {\n _videoTrack.pesData = null;\n }\n if (_id3Track) {\n _id3Track.pesData = null;\n }\n this.aacOverFlow = null;\n this.remainderData = null;\n }\n demux(data, timeOffset, isSampleAes = false, flush = false) {\n if (!isSampleAes) {\n this.sampleAes = null;\n }\n let pes;\n const videoTrack = this._videoTrack;\n const audioTrack = this._audioTrack;\n const id3Track = this._id3Track;\n const textTrack = this._txtTrack;\n let videoPid = videoTrack.pid;\n let videoData = videoTrack.pesData;\n let audioPid = audioTrack.pid;\n let id3Pid = id3Track.pid;\n let audioData = audioTrack.pesData;\n let id3Data = id3Track.pesData;\n let unknownPID = null;\n let pmtParsed = this.pmtParsed;\n let pmtId = this._pmtId;\n let len = data.length;\n if (this.remainderData) {\n data = appendUint8Array(this.remainderData, data);\n len = data.length;\n this.remainderData = null;\n }\n if (len < PACKET_LENGTH && !flush) {\n this.remainderData = data;\n return {\n audioTrack,\n videoTrack,\n id3Track,\n textTrack\n };\n }\n const syncOffset = Math.max(0, TSDemuxer.syncOffset(data));\n len -= (len - syncOffset) % PACKET_LENGTH;\n if (len < data.byteLength && !flush) {\n this.remainderData = new Uint8Array(data.buffer, len, data.buffer.byteLength - len);\n }\n\n // loop through TS packets\n let tsPacketErrors = 0;\n for (let start = syncOffset; start < len; start += PACKET_LENGTH) {\n if (data[start] === 0x47) {\n const stt = !!(data[start + 1] & 0x40);\n const pid = parsePID(data, start);\n const atf = (data[start + 3] & 0x30) >> 4;\n\n // if an adaption field is present, its length is specified by the fifth byte of the TS packet header.\n let offset;\n if (atf > 1) {\n offset = start + 5 + data[start + 4];\n // continue if there is only adaptation field\n if (offset === start + PACKET_LENGTH) {\n continue;\n }\n } else {\n offset = start + 4;\n }\n switch (pid) {\n case videoPid:\n if (stt) {\n if (videoData && (pes = parsePES(videoData, this.logger))) {\n this.readyVideoParser(videoTrack.segmentCodec);\n if (this.videoParser !== null) {\n this.videoParser.parsePES(videoTrack, textTrack, pes, false);\n }\n }\n videoData = {\n data: [],\n size: 0\n };\n }\n if (videoData) {\n videoData.data.push(data.subarray(offset, start + PACKET_LENGTH));\n videoData.size += start + PACKET_LENGTH - offset;\n }\n break;\n case audioPid:\n if (stt) {\n if (audioData && (pes = parsePES(audioData, this.logger))) {\n switch (audioTrack.segmentCodec) {\n case 'aac':\n this.parseAACPES(audioTrack, pes);\n break;\n case 'mp3':\n this.parseMPEGPES(audioTrack, pes);\n break;\n case 'ac3':\n {\n this.parseAC3PES(audioTrack, pes);\n }\n break;\n }\n }\n audioData = {\n data: [],\n size: 0\n };\n }\n if (audioData) {\n audioData.data.push(data.subarray(offset, start + PACKET_LENGTH));\n audioData.size += start + PACKET_LENGTH - offset;\n }\n break;\n case id3Pid:\n if (stt) {\n if (id3Data && (pes = parsePES(id3Data, this.logger))) {\n this.parseID3PES(id3Track, pes);\n }\n id3Data = {\n data: [],\n size: 0\n };\n }\n if (id3Data) {\n id3Data.data.push(data.subarray(offset, start + PACKET_LENGTH));\n id3Data.size += start + PACKET_LENGTH - offset;\n }\n break;\n case 0:\n if (stt) {\n offset += data[offset] + 1;\n }\n pmtId = this._pmtId = parsePAT(data, offset);\n // this.logger.log('PMT PID:' + this._pmtId);\n break;\n case pmtId:\n {\n if (stt) {\n offset += data[offset] + 1;\n }\n const parsedPIDs = parsePMT(data, offset, this.typeSupported, isSampleAes, this.observer, this.logger);\n\n // only update track id if track PID found while parsing PMT\n // this is to avoid resetting the PID to -1 in case\n // track PID transiently disappears from the stream\n // this could happen in case of transient missing audio samples for example\n // NOTE this is only the PID of the track as found in TS,\n // but we are not using this for MP4 track IDs.\n videoPid = parsedPIDs.videoPid;\n if (videoPid > 0) {\n videoTrack.pid = videoPid;\n videoTrack.segmentCodec = parsedPIDs.segmentVideoCodec;\n }\n audioPid = parsedPIDs.audioPid;\n if (audioPid > 0) {\n audioTrack.pid = audioPid;\n audioTrack.segmentCodec = parsedPIDs.segmentAudioCodec;\n }\n id3Pid = parsedPIDs.id3Pid;\n if (id3Pid > 0) {\n id3Track.pid = id3Pid;\n }\n if (unknownPID !== null && !pmtParsed) {\n this.logger.warn(`MPEG-TS PMT found at ${start} after unknown PID '${unknownPID}'. Backtracking to sync byte @${syncOffset} to parse all TS packets.`);\n unknownPID = null;\n // we set it to -188, the += 188 in the for loop will reset start to 0\n start = syncOffset - 188;\n }\n pmtParsed = this.pmtParsed = true;\n break;\n }\n case 0x11:\n case 0x1fff:\n break;\n default:\n unknownPID = pid;\n break;\n }\n } else {\n tsPacketErrors++;\n }\n }\n if (tsPacketErrors > 0) {\n emitParsingError(this.observer, new Error(`Found ${tsPacketErrors} TS packet/s that do not start with 0x47`), undefined, this.logger);\n }\n videoTrack.pesData = videoData;\n audioTrack.pesData = audioData;\n id3Track.pesData = id3Data;\n const demuxResult = {\n audioTrack,\n videoTrack,\n id3Track,\n textTrack\n };\n if (flush) {\n this.extractRemainingSamples(demuxResult);\n }\n return demuxResult;\n }\n flush() {\n const {\n remainderData\n } = this;\n this.remainderData = null;\n let result;\n if (remainderData) {\n result = this.demux(remainderData, -1, false, true);\n } else {\n result = {\n videoTrack: this._videoTrack,\n audioTrack: this._audioTrack,\n id3Track: this._id3Track,\n textTrack: this._txtTrack\n };\n }\n this.extractRemainingSamples(result);\n if (this.sampleAes) {\n return this.decrypt(result, this.sampleAes);\n }\n return result;\n }\n extractRemainingSamples(demuxResult) {\n const {\n audioTrack,\n videoTrack,\n id3Track,\n textTrack\n } = demuxResult;\n const videoData = videoTrack.pesData;\n const audioData = audioTrack.pesData;\n const id3Data = id3Track.pesData;\n // try to parse last PES packets\n let pes;\n if (videoData && (pes = parsePES(videoData, this.logger))) {\n this.readyVideoParser(videoTrack.segmentCodec);\n if (this.videoParser !== null) {\n this.videoParser.parsePES(videoTrack, textTrack, pes, true);\n videoTrack.pesData = null;\n }\n } else {\n // either avcData null or PES truncated, keep it for next frag parsing\n videoTrack.pesData = videoData;\n }\n if (audioData && (pes = parsePES(audioData, this.logger))) {\n switch (audioTrack.segmentCodec) {\n case 'aac':\n this.parseAACPES(audioTrack, pes);\n break;\n case 'mp3':\n this.parseMPEGPES(audioTrack, pes);\n break;\n case 'ac3':\n {\n this.parseAC3PES(audioTrack, pes);\n }\n break;\n }\n audioTrack.pesData = null;\n } else {\n if (audioData != null && audioData.size) {\n this.logger.log('last AAC PES packet truncated,might overlap between fragments');\n }\n\n // either audioData null or PES truncated, keep it for next frag parsing\n audioTrack.pesData = audioData;\n }\n if (id3Data && (pes = parsePES(id3Data, this.logger))) {\n this.parseID3PES(id3Track, pes);\n id3Track.pesData = null;\n } else {\n // either id3Data null or PES truncated, keep it for next frag parsing\n id3Track.pesData = id3Data;\n }\n }\n demuxSampleAes(data, keyData, timeOffset) {\n const demuxResult = this.demux(data, timeOffset, true, !this.config.progressive);\n const sampleAes = this.sampleAes = new SampleAesDecrypter(this.observer, this.config, keyData);\n return this.decrypt(demuxResult, sampleAes);\n }\n readyVideoParser(codec) {\n if (this.videoParser === null) {\n if (codec === 'avc') {\n this.videoParser = new AvcVideoParser();\n } else if (codec === 'hevc') {\n this.videoParser = new HevcVideoParser();\n }\n }\n }\n decrypt(demuxResult, sampleAes) {\n return new Promise(resolve => {\n const {\n audioTrack,\n videoTrack\n } = demuxResult;\n if (audioTrack.samples && audioTrack.segmentCodec === 'aac') {\n sampleAes.decryptAacSamples(audioTrack.samples, 0, () => {\n if (videoTrack.samples) {\n sampleAes.decryptAvcSamples(videoTrack.samples, 0, 0, () => {\n resolve(demuxResult);\n });\n } else {\n resolve(demuxResult);\n }\n });\n } else if (videoTrack.samples) {\n sampleAes.decryptAvcSamples(videoTrack.samples, 0, 0, () => {\n resolve(demuxResult);\n });\n }\n });\n }\n destroy() {\n if (this.observer) {\n this.observer.removeAllListeners();\n }\n // @ts-ignore\n this.config = this.logger = this.observer = null;\n this.aacOverFlow = this.videoParser = this.remainderData = this.sampleAes = null;\n this._videoTrack = this._audioTrack = this._id3Track = this._txtTrack = undefined;\n }\n parseAACPES(track, pes) {\n let startOffset = 0;\n const aacOverFlow = this.aacOverFlow;\n let data = pes.data;\n if (aacOverFlow) {\n this.aacOverFlow = null;\n const frameMissingBytes = aacOverFlow.missing;\n const sampleLength = aacOverFlow.sample.unit.byteLength;\n // logger.log(`AAC: append overflowing ${sampleLength} bytes to beginning of new PES`);\n if (frameMissingBytes === -1) {\n data = appendUint8Array(aacOverFlow.sample.unit, data);\n } else {\n const frameOverflowBytes = sampleLength - frameMissingBytes;\n aacOverFlow.sample.unit.set(data.subarray(0, frameMissingBytes), frameOverflowBytes);\n track.samples.push(aacOverFlow.sample);\n startOffset = aacOverFlow.missing;\n }\n }\n // look for ADTS header (0xFFFx)\n let offset;\n let len;\n for (offset = startOffset, len = data.length; offset < len - 1; offset++) {\n if (isHeader$1(data, offset)) {\n break;\n }\n }\n // if ADTS header does not start straight from the beginning of the PES payload, raise an error\n if (offset !== startOffset) {\n let reason;\n const recoverable = offset < len - 1;\n if (recoverable) {\n reason = `AAC PES did not start with ADTS header,offset:${offset}`;\n } else {\n reason = 'No ADTS header found in AAC PES';\n }\n emitParsingError(this.observer, new Error(reason), recoverable, this.logger);\n if (!recoverable) {\n return;\n }\n }\n initTrackConfig(track, this.observer, data, offset, this.audioCodec);\n let pts;\n if (pes.pts !== undefined) {\n pts = pes.pts;\n } else if (aacOverFlow) {\n // if last AAC frame is overflowing, we should ensure timestamps are contiguous:\n // first sample PTS should be equal to last sample PTS + frameDuration\n const frameDuration = getFrameDuration(track.samplerate);\n pts = aacOverFlow.sample.pts + frameDuration;\n } else {\n this.logger.warn('[tsdemuxer]: AAC PES unknown PTS');\n return;\n }\n\n // scan for aac samples\n let frameIndex = 0;\n let frame;\n while (offset < len) {\n frame = appendFrame$2(track, data, offset, pts, frameIndex);\n offset += frame.length;\n if (!frame.missing) {\n frameIndex++;\n for (; offset < len - 1; offset++) {\n if (isHeader$1(data, offset)) {\n break;\n }\n }\n } else {\n this.aacOverFlow = frame;\n break;\n }\n }\n }\n parseMPEGPES(track, pes) {\n const data = pes.data;\n const length = data.length;\n let frameIndex = 0;\n let offset = 0;\n const pts = pes.pts;\n if (pts === undefined) {\n this.logger.warn('[tsdemuxer]: MPEG PES unknown PTS');\n return;\n }\n while (offset < length) {\n if (isHeader(data, offset)) {\n const frame = appendFrame$1(track, data, offset, pts, frameIndex);\n if (frame) {\n offset += frame.length;\n frameIndex++;\n } else {\n // logger.log('Unable to parse Mpeg audio frame');\n break;\n }\n } else {\n // nothing found, keep looking\n offset++;\n }\n }\n }\n parseAC3PES(track, pes) {\n {\n const data = pes.data;\n const pts = pes.pts;\n if (pts === undefined) {\n this.logger.warn('[tsdemuxer]: AC3 PES unknown PTS');\n return;\n }\n const length = data.length;\n let frameIndex = 0;\n let offset = 0;\n let parsed;\n while (offset < length && (parsed = appendFrame(track, data, offset, pts, frameIndex++)) > 0) {\n offset += parsed;\n }\n }\n }\n parseID3PES(id3Track, pes) {\n if (pes.pts === undefined) {\n this.logger.warn('[tsdemuxer]: ID3 PES unknown PTS');\n return;\n }\n const id3Sample = _extends({}, pes, {\n type: this._videoTrack ? MetadataSchema.emsg : MetadataSchema.audioId3,\n duration: Number.POSITIVE_INFINITY\n });\n id3Track.samples.push(id3Sample);\n }\n}\nfunction parsePID(data, offset) {\n // pid is a 13-bit field starting at the last bit of TS[1]\n return ((data[offset + 1] & 0x1f) << 8) + data[offset + 2];\n}\nfunction parsePAT(data, offset) {\n // skip the PSI header and parse the first PMT entry\n return (data[offset + 10] & 0x1f) << 8 | data[offset + 11];\n}\nfunction parsePMT(data, offset, typeSupported, isSampleAes, observer, logger) {\n const result = {\n audioPid: -1,\n videoPid: -1,\n id3Pid: -1,\n segmentVideoCodec: 'avc',\n segmentAudioCodec: 'aac'\n };\n const sectionLength = (data[offset + 1] & 0x0f) << 8 | data[offset + 2];\n const tableEnd = offset + 3 + sectionLength - 4;\n // to determine where the table is, we have to figure out how\n // long the program info descriptors are\n const programInfoLength = (data[offset + 10] & 0x0f) << 8 | data[offset + 11];\n // advance the offset to the first entry in the mapping table\n offset += 12 + programInfoLength;\n while (offset < tableEnd) {\n const pid = parsePID(data, offset);\n const esInfoLength = (data[offset + 3] & 0x0f) << 8 | data[offset + 4];\n switch (data[offset]) {\n case 0xcf:\n // SAMPLE-AES AAC\n if (!isSampleAes) {\n logEncryptedSamplesFoundInUnencryptedStream('ADTS AAC', logger);\n break;\n }\n /* falls through */\n case 0x0f:\n // ISO/IEC 13818-7 ADTS AAC (MPEG-2 lower bit-rate audio)\n // logger.log('AAC PID:' + pid);\n if (result.audioPid === -1) {\n result.audioPid = pid;\n }\n break;\n\n // Packetized metadata (ID3)\n case 0x15:\n // logger.log('ID3 PID:' + pid);\n if (result.id3Pid === -1) {\n result.id3Pid = pid;\n }\n break;\n case 0xdb:\n // SAMPLE-AES AVC\n if (!isSampleAes) {\n logEncryptedSamplesFoundInUnencryptedStream('H.264', logger);\n break;\n }\n /* falls through */\n case 0x1b:\n // ITU-T Rec. H.264 and ISO/IEC 14496-10 (lower bit-rate video)\n // logger.log('AVC PID:' + pid);\n if (result.videoPid === -1) {\n result.videoPid = pid;\n }\n break;\n\n // ISO/IEC 11172-3 (MPEG-1 audio)\n // or ISO/IEC 13818-3 (MPEG-2 halved sample rate audio)\n case 0x03:\n case 0x04:\n // logger.log('MPEG PID:' + pid);\n if (!typeSupported.mpeg && !typeSupported.mp3) {\n logger.log('MPEG audio found, not supported in this browser');\n } else if (result.audioPid === -1) {\n result.audioPid = pid;\n result.segmentAudioCodec = 'mp3';\n }\n break;\n case 0xc1:\n // SAMPLE-AES AC3\n if (!isSampleAes) {\n logEncryptedSamplesFoundInUnencryptedStream('AC-3', logger);\n break;\n }\n /* falls through */\n case 0x81:\n {\n if (!typeSupported.ac3) {\n logger.log('AC-3 audio found, not supported in this browser');\n } else if (result.audioPid === -1) {\n result.audioPid = pid;\n result.segmentAudioCodec = 'ac3';\n }\n }\n break;\n case 0x06:\n // stream_type 6 can mean a lot of different things in case of DVB.\n // We need to look at the descriptors. Right now, we're only interested\n // in AC-3 audio, so we do the descriptor parsing only when we don't have\n // an audio PID yet.\n if (result.audioPid === -1 && esInfoLength > 0) {\n let parsePos = offset + 5;\n let remaining = esInfoLength;\n while (remaining > 2) {\n const descriptorId = data[parsePos];\n switch (descriptorId) {\n case 0x6a:\n // DVB Descriptor for AC-3\n {\n if (typeSupported.ac3 !== true) {\n logger.log('AC-3 audio found, not supported in this browser for now');\n } else {\n result.audioPid = pid;\n result.segmentAudioCodec = 'ac3';\n }\n }\n break;\n }\n const descriptorLen = data[parsePos + 1] + 2;\n parsePos += descriptorLen;\n remaining -= descriptorLen;\n }\n }\n break;\n case 0xc2: // SAMPLE-AES EC3\n /* falls through */\n case 0x87:\n emitParsingError(observer, new Error('Unsupported EC-3 in M2TS found'), undefined, logger);\n return result;\n case 0x24:\n // ITU-T Rec. H.265 and ISO/IEC 23008-2 (HEVC)\n {\n if (result.videoPid === -1) {\n result.videoPid = pid;\n result.segmentVideoCodec = 'hevc';\n logger.log('HEVC in M2TS found');\n }\n }\n break;\n }\n // move to the next table entry\n // skip past the elementary stream descriptors, if present\n offset += esInfoLength + 5;\n }\n return result;\n}\nfunction emitParsingError(observer, error, levelRetry, logger) {\n logger.warn(`parsing error: ${error.message}`);\n observer.emit(Events.ERROR, Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.FRAG_PARSING_ERROR,\n fatal: false,\n levelRetry,\n error,\n reason: error.message\n });\n}\nfunction logEncryptedSamplesFoundInUnencryptedStream(type, logger) {\n logger.log(`${type} with AES-128-CBC encryption found in unencrypted stream`);\n}\nfunction parsePES(stream, logger) {\n let i = 0;\n let frag;\n let pesLen;\n let pesHdrLen;\n let pesPts;\n let pesDts;\n const data = stream.data;\n // safety check\n if (!stream || stream.size === 0) {\n return null;\n }\n\n // we might need up to 19 bytes to read PES header\n // if first chunk of data is less than 19 bytes, let's merge it with following ones until we get 19 bytes\n // usually only one merge is needed (and this is rare ...)\n while (data[0].length < 19 && data.length > 1) {\n data[0] = appendUint8Array(data[0], data[1]);\n data.splice(1, 1);\n }\n // retrieve PTS/DTS from first fragment\n frag = data[0];\n const pesPrefix = (frag[0] << 16) + (frag[1] << 8) + frag[2];\n if (pesPrefix === 1) {\n pesLen = (frag[4] << 8) + frag[5];\n // if PES parsed length is not zero and greater than total received length, stop parsing. PES might be truncated\n // minus 6 : PES header size\n if (pesLen && pesLen > stream.size - 6) {\n return null;\n }\n const pesFlags = frag[7];\n if (pesFlags & 0xc0) {\n /* PES header described here : http://dvd.sourceforge.net/dvdinfo/pes-hdr.html\n as PTS / DTS is 33 bit we cannot use bitwise operator in JS,\n as Bitwise operators treat their operands as a sequence of 32 bits */\n pesPts = (frag[9] & 0x0e) * 536870912 +\n // 1 << 29\n (frag[10] & 0xff) * 4194304 +\n // 1 << 22\n (frag[11] & 0xfe) * 16384 +\n // 1 << 14\n (frag[12] & 0xff) * 128 +\n // 1 << 7\n (frag[13] & 0xfe) / 2;\n if (pesFlags & 0x40) {\n pesDts = (frag[14] & 0x0e) * 536870912 +\n // 1 << 29\n (frag[15] & 0xff) * 4194304 +\n // 1 << 22\n (frag[16] & 0xfe) * 16384 +\n // 1 << 14\n (frag[17] & 0xff) * 128 +\n // 1 << 7\n (frag[18] & 0xfe) / 2;\n if (pesPts - pesDts > 60 * 90000) {\n logger.warn(`${Math.round((pesPts - pesDts) / 90000)}s delta between PTS and DTS, align them`);\n pesPts = pesDts;\n }\n } else {\n pesDts = pesPts;\n }\n }\n pesHdrLen = frag[8];\n // 9 bytes : 6 bytes for PES header + 3 bytes for PES extension\n let payloadStartOffset = pesHdrLen + 9;\n if (stream.size <= payloadStartOffset) {\n return null;\n }\n stream.size -= payloadStartOffset;\n // reassemble PES packet\n const pesData = new Uint8Array(stream.size);\n for (let j = 0, dataLen = data.length; j < dataLen; j++) {\n frag = data[j];\n let len = frag.byteLength;\n if (payloadStartOffset) {\n if (payloadStartOffset > len) {\n // trim full frag if PES header bigger than frag\n payloadStartOffset -= len;\n continue;\n } else {\n // trim partial frag if PES header smaller than frag\n frag = frag.subarray(payloadStartOffset);\n len -= payloadStartOffset;\n payloadStartOffset = 0;\n }\n }\n pesData.set(frag, i);\n i += len;\n }\n if (pesLen) {\n // payload size : remove PES header + PES extension\n pesLen -= pesHdrLen + 3;\n }\n return {\n data: pesData,\n pts: pesPts,\n dts: pesDts,\n len: pesLen\n };\n }\n return null;\n}\n\n/**\n * AAC helper\n */\n\nclass AAC {\n static getSilentFrame(codec, channelCount) {\n switch (codec) {\n case 'mp4a.40.2':\n if (channelCount === 1) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x23, 0x80]);\n } else if (channelCount === 2) {\n return new Uint8Array([0x21, 0x00, 0x49, 0x90, 0x02, 0x19, 0x00, 0x23, 0x80]);\n } else if (channelCount === 3) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x8e]);\n } else if (channelCount === 4) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x80, 0x2c, 0x80, 0x08, 0x02, 0x38]);\n } else if (channelCount === 5) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x82, 0x30, 0x04, 0x99, 0x00, 0x21, 0x90, 0x02, 0x38]);\n } else if (channelCount === 6) {\n return new Uint8Array([0x00, 0xc8, 0x00, 0x80, 0x20, 0x84, 0x01, 0x26, 0x40, 0x08, 0x64, 0x00, 0x82, 0x30, 0x04, 0x99, 0x00, 0x21, 0x90, 0x02, 0x00, 0xb2, 0x00, 0x20, 0x08, 0xe0]);\n }\n break;\n // handle HE-AAC below (mp4a.40.5 / mp4a.40.29)\n default:\n if (channelCount === 1) {\n // ffmpeg -y -f lavfi -i \"aevalsrc=0:d=0.05\" -c:a libfdk_aac -profile:a aac_he -b:a 4k output.aac && hexdump -v -e '16/1 \"0x%x,\" \"\\n\"' -v output.aac\n return new Uint8Array([0x1, 0x40, 0x22, 0x80, 0xa3, 0x4e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0, 0x0, 0x1c, 0x6, 0xf1, 0xc1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5e]);\n } else if (channelCount === 2) {\n // ffmpeg -y -f lavfi -i \"aevalsrc=0|0:d=0.05\" -c:a libfdk_aac -profile:a aac_he_v2 -b:a 4k output.aac && hexdump -v -e '16/1 \"0x%x,\" \"\\n\"' -v output.aac\n return new Uint8Array([0x1, 0x40, 0x22, 0x80, 0xa3, 0x5e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0, 0x0, 0x0, 0x95, 0x0, 0x6, 0xf1, 0xa1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5e]);\n } else if (channelCount === 3) {\n // ffmpeg -y -f lavfi -i \"aevalsrc=0|0|0:d=0.05\" -c:a libfdk_aac -profile:a aac_he_v2 -b:a 4k output.aac && hexdump -v -e '16/1 \"0x%x,\" \"\\n\"' -v output.aac\n return new Uint8Array([0x1, 0x40, 0x22, 0x80, 0xa3, 0x5e, 0xe6, 0x80, 0xba, 0x8, 0x0, 0x0, 0x0, 0x0, 0x95, 0x0, 0x6, 0xf1, 0xa1, 0xa, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5a, 0x5e]);\n }\n break;\n }\n return undefined;\n }\n}\n\n/**\n * Generate MP4 Box\n */\n\nconst UINT32_MAX = Math.pow(2, 32) - 1;\nclass MP4 {\n static init() {\n MP4.types = {\n avc1: [],\n // codingname\n avcC: [],\n hvc1: [],\n hvcC: [],\n btrt: [],\n dinf: [],\n dref: [],\n esds: [],\n ftyp: [],\n hdlr: [],\n mdat: [],\n mdhd: [],\n mdia: [],\n mfhd: [],\n minf: [],\n moof: [],\n moov: [],\n mp4a: [],\n '.mp3': [],\n dac3: [],\n 'ac-3': [],\n mvex: [],\n mvhd: [],\n pasp: [],\n sdtp: [],\n stbl: [],\n stco: [],\n stsc: [],\n stsd: [],\n stsz: [],\n stts: [],\n tfdt: [],\n tfhd: [],\n traf: [],\n trak: [],\n trun: [],\n trex: [],\n tkhd: [],\n vmhd: [],\n smhd: []\n };\n let i;\n for (i in MP4.types) {\n if (MP4.types.hasOwnProperty(i)) {\n MP4.types[i] = [i.charCodeAt(0), i.charCodeAt(1), i.charCodeAt(2), i.charCodeAt(3)];\n }\n }\n const videoHdlr = new Uint8Array([0x00,\n // version 0\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x00,\n // pre_defined\n 0x76, 0x69, 0x64, 0x65,\n // handler_type: 'vide'\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x56, 0x69, 0x64, 0x65, 0x6f, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'VideoHandler'\n ]);\n const audioHdlr = new Uint8Array([0x00,\n // version 0\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x00,\n // pre_defined\n 0x73, 0x6f, 0x75, 0x6e,\n // handler_type: 'soun'\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x53, 0x6f, 0x75, 0x6e, 0x64, 0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x72, 0x00 // name: 'SoundHandler'\n ]);\n MP4.HDLR_TYPES = {\n video: videoHdlr,\n audio: audioHdlr\n };\n const dref = new Uint8Array([0x00,\n // version 0\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x01,\n // entry_count\n 0x00, 0x00, 0x00, 0x0c,\n // entry_size\n 0x75, 0x72, 0x6c, 0x20,\n // 'url' type\n 0x00,\n // version 0\n 0x00, 0x00, 0x01 // entry_flags\n ]);\n const stco = new Uint8Array([0x00,\n // version\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x00 // entry_count\n ]);\n MP4.STTS = MP4.STSC = MP4.STCO = stco;\n MP4.STSZ = new Uint8Array([0x00,\n // version\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x00,\n // sample_size\n 0x00, 0x00, 0x00, 0x00 // sample_count\n ]);\n MP4.VMHD = new Uint8Array([0x00,\n // version\n 0x00, 0x00, 0x01,\n // flags\n 0x00, 0x00,\n // graphicsmode\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 // opcolor\n ]);\n MP4.SMHD = new Uint8Array([0x00,\n // version\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00,\n // balance\n 0x00, 0x00 // reserved\n ]);\n MP4.STSD = new Uint8Array([0x00,\n // version 0\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x01]); // entry_count\n\n const majorBrand = new Uint8Array([105, 115, 111, 109]); // isom\n const avc1Brand = new Uint8Array([97, 118, 99, 49]); // avc1\n const minorVersion = new Uint8Array([0, 0, 0, 1]);\n MP4.FTYP = MP4.box(MP4.types.ftyp, majorBrand, minorVersion, majorBrand, avc1Brand);\n MP4.DINF = MP4.box(MP4.types.dinf, MP4.box(MP4.types.dref, dref));\n }\n static box(type, ...payload) {\n let size = 8;\n let i = payload.length;\n const len = i;\n // calculate the total size we need to allocate\n while (i--) {\n size += payload[i].byteLength;\n }\n const result = new Uint8Array(size);\n result[0] = size >> 24 & 0xff;\n result[1] = size >> 16 & 0xff;\n result[2] = size >> 8 & 0xff;\n result[3] = size & 0xff;\n result.set(type, 4);\n // copy the payload into the result\n for (i = 0, size = 8; i < len; i++) {\n // copy payload[i] array @ offset size\n result.set(payload[i], size);\n size += payload[i].byteLength;\n }\n return result;\n }\n static hdlr(type) {\n return MP4.box(MP4.types.hdlr, MP4.HDLR_TYPES[type]);\n }\n static mdat(data) {\n return MP4.box(MP4.types.mdat, data);\n }\n static mdhd(timescale, duration) {\n duration *= timescale;\n const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1));\n const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1));\n return MP4.box(MP4.types.mdhd, new Uint8Array([0x01,\n // version 1\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,\n // creation_time\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,\n // modification_time\n timescale >> 24 & 0xff, timescale >> 16 & 0xff, timescale >> 8 & 0xff, timescale & 0xff,\n // timescale\n upperWordDuration >> 24, upperWordDuration >> 16 & 0xff, upperWordDuration >> 8 & 0xff, upperWordDuration & 0xff, lowerWordDuration >> 24, lowerWordDuration >> 16 & 0xff, lowerWordDuration >> 8 & 0xff, lowerWordDuration & 0xff, 0x55, 0xc4,\n // 'und' language (undetermined)\n 0x00, 0x00]));\n }\n static mdia(track) {\n return MP4.box(MP4.types.mdia, MP4.mdhd(track.timescale || 0, track.duration || 0), MP4.hdlr(track.type), MP4.minf(track));\n }\n static mfhd(sequenceNumber) {\n return MP4.box(MP4.types.mfhd, new Uint8Array([0x00, 0x00, 0x00, 0x00,\n // flags\n sequenceNumber >> 24, sequenceNumber >> 16 & 0xff, sequenceNumber >> 8 & 0xff, sequenceNumber & 0xff // sequence_number\n ]));\n }\n static minf(track) {\n if (track.type === 'audio') {\n return MP4.box(MP4.types.minf, MP4.box(MP4.types.smhd, MP4.SMHD), MP4.DINF, MP4.stbl(track));\n } else {\n return MP4.box(MP4.types.minf, MP4.box(MP4.types.vmhd, MP4.VMHD), MP4.DINF, MP4.stbl(track));\n }\n }\n static moof(sn, baseMediaDecodeTime, track) {\n return MP4.box(MP4.types.moof, MP4.mfhd(sn), MP4.traf(track, baseMediaDecodeTime));\n }\n static moov(tracks) {\n let i = tracks.length;\n const boxes = [];\n while (i--) {\n boxes[i] = MP4.trak(tracks[i]);\n }\n return MP4.box.apply(null, [MP4.types.moov, MP4.mvhd(tracks[0].timescale || 0, tracks[0].duration || 0)].concat(boxes).concat(MP4.mvex(tracks)));\n }\n static mvex(tracks) {\n let i = tracks.length;\n const boxes = [];\n while (i--) {\n boxes[i] = MP4.trex(tracks[i]);\n }\n return MP4.box.apply(null, [MP4.types.mvex, ...boxes]);\n }\n static mvhd(timescale, duration) {\n duration *= timescale;\n const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1));\n const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1));\n const bytes = new Uint8Array([0x01,\n // version 1\n 0x00, 0x00, 0x00,\n // flags\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,\n // creation_time\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,\n // modification_time\n timescale >> 24 & 0xff, timescale >> 16 & 0xff, timescale >> 8 & 0xff, timescale & 0xff,\n // timescale\n upperWordDuration >> 24, upperWordDuration >> 16 & 0xff, upperWordDuration >> 8 & 0xff, upperWordDuration & 0xff, lowerWordDuration >> 24, lowerWordDuration >> 16 & 0xff, lowerWordDuration >> 8 & 0xff, lowerWordDuration & 0xff, 0x00, 0x01, 0x00, 0x00,\n // 1.0 rate\n 0x01, 0x00,\n // 1.0 volume\n 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,\n // transformation: unity matrix\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // pre_defined\n 0xff, 0xff, 0xff, 0xff // next_track_ID\n ]);\n return MP4.box(MP4.types.mvhd, bytes);\n }\n static sdtp(track) {\n const samples = track.samples || [];\n const bytes = new Uint8Array(4 + samples.length);\n let i;\n let flags;\n // leave the full box header (4 bytes) all zero\n // write the sample table\n for (i = 0; i < samples.length; i++) {\n flags = samples[i].flags;\n bytes[i + 4] = flags.dependsOn << 4 | flags.isDependedOn << 2 | flags.hasRedundancy;\n }\n return MP4.box(MP4.types.sdtp, bytes);\n }\n static stbl(track) {\n return MP4.box(MP4.types.stbl, MP4.stsd(track), MP4.box(MP4.types.stts, MP4.STTS), MP4.box(MP4.types.stsc, MP4.STSC), MP4.box(MP4.types.stsz, MP4.STSZ), MP4.box(MP4.types.stco, MP4.STCO));\n }\n static avc1(track) {\n let sps = [];\n let pps = [];\n let i;\n let data;\n let len;\n // assemble the SPSs\n\n for (i = 0; i < track.sps.length; i++) {\n data = track.sps[i];\n len = data.byteLength;\n sps.push(len >>> 8 & 0xff);\n sps.push(len & 0xff);\n\n // SPS\n sps = sps.concat(Array.prototype.slice.call(data));\n }\n\n // assemble the PPSs\n for (i = 0; i < track.pps.length; i++) {\n data = track.pps[i];\n len = data.byteLength;\n pps.push(len >>> 8 & 0xff);\n pps.push(len & 0xff);\n pps = pps.concat(Array.prototype.slice.call(data));\n }\n const avcc = MP4.box(MP4.types.avcC, new Uint8Array([0x01,\n // version\n sps[3],\n // profile\n sps[4],\n // profile compat\n sps[5],\n // level\n 0xfc | 3,\n // lengthSizeMinusOne, hard-coded to 4 bytes\n 0xe0 | track.sps.length // 3bit reserved (111) + numOfSequenceParameterSets\n ].concat(sps).concat([track.pps.length // numOfPictureParameterSets\n ]).concat(pps))); // \"PPS\"\n const width = track.width;\n const height = track.height;\n const hSpacing = track.pixelRatio[0];\n const vSpacing = track.pixelRatio[1];\n return MP4.box(MP4.types.avc1, new Uint8Array([0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x01,\n // data_reference_index\n 0x00, 0x00,\n // pre_defined\n 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // pre_defined\n width >> 8 & 0xff, width & 0xff,\n // width\n height >> 8 & 0xff, height & 0xff,\n // height\n 0x00, 0x48, 0x00, 0x00,\n // horizresolution\n 0x00, 0x48, 0x00, 0x00,\n // vertresolution\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x01,\n // frame_count\n 0x12, 0x64, 0x61, 0x69, 0x6c,\n // dailymotion/hls.js\n 0x79, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x68, 0x6c, 0x73, 0x2e, 0x6a, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // compressorname\n 0x00, 0x18,\n // depth = 24\n 0x11, 0x11]),\n // pre_defined = -1\n avcc, MP4.box(MP4.types.btrt, new Uint8Array([0x00, 0x1c, 0x9c, 0x80,\n // bufferSizeDB\n 0x00, 0x2d, 0xc6, 0xc0,\n // maxBitrate\n 0x00, 0x2d, 0xc6, 0xc0])),\n // avgBitrate\n MP4.box(MP4.types.pasp, new Uint8Array([hSpacing >> 24,\n // hSpacing\n hSpacing >> 16 & 0xff, hSpacing >> 8 & 0xff, hSpacing & 0xff, vSpacing >> 24,\n // vSpacing\n vSpacing >> 16 & 0xff, vSpacing >> 8 & 0xff, vSpacing & 0xff])));\n }\n static esds(track) {\n const config = track.config;\n return new Uint8Array([0x00,\n // version 0\n 0x00, 0x00, 0x00,\n // flags\n\n 0x03,\n // descriptor_type\n 0x19,\n // length\n\n 0x00, 0x01,\n // es_id\n\n 0x00,\n // stream_priority\n\n 0x04,\n // descriptor_type\n 0x11,\n // length\n 0x40,\n // codec : mpeg4_audio\n 0x15,\n // stream_type\n 0x00, 0x00, 0x00,\n // buffer_size\n 0x00, 0x00, 0x00, 0x00,\n // maxBitrate\n 0x00, 0x00, 0x00, 0x00,\n // avgBitrate\n\n 0x05,\n // descriptor_type\n 0x02,\n // length\n ...config, 0x06, 0x01, 0x02 // GASpecificConfig)); // length + audio config descriptor\n ]);\n }\n static audioStsd(track) {\n const samplerate = track.samplerate || 0;\n return new Uint8Array([0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x01,\n // data_reference_index\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, track.channelCount || 0,\n // channelcount\n 0x00, 0x10,\n // sampleSize:16bits\n 0x00, 0x00, 0x00, 0x00,\n // reserved2\n samplerate >> 8 & 0xff, samplerate & 0xff,\n //\n 0x00, 0x00]);\n }\n static mp4a(track) {\n return MP4.box(MP4.types.mp4a, MP4.audioStsd(track), MP4.box(MP4.types.esds, MP4.esds(track)));\n }\n static mp3(track) {\n return MP4.box(MP4.types['.mp3'], MP4.audioStsd(track));\n }\n static ac3(track) {\n return MP4.box(MP4.types['ac-3'], MP4.audioStsd(track), MP4.box(MP4.types.dac3, track.config));\n }\n static stsd(track) {\n const {\n segmentCodec\n } = track;\n if (track.type === 'audio') {\n if (segmentCodec === 'aac') {\n return MP4.box(MP4.types.stsd, MP4.STSD, MP4.mp4a(track));\n }\n if (segmentCodec === 'ac3' && track.config) {\n return MP4.box(MP4.types.stsd, MP4.STSD, MP4.ac3(track));\n }\n if (segmentCodec === 'mp3' && track.codec === 'mp3') {\n return MP4.box(MP4.types.stsd, MP4.STSD, MP4.mp3(track));\n }\n } else {\n if (track.pps && track.sps) {\n if (segmentCodec === 'avc') {\n return MP4.box(MP4.types.stsd, MP4.STSD, MP4.avc1(track));\n }\n if (segmentCodec === 'hevc' && track.vps) {\n return MP4.box(MP4.types.stsd, MP4.STSD, MP4.hvc1(track));\n }\n } else {\n throw new Error(`video track missing pps or sps`);\n }\n }\n throw new Error(`unsupported ${track.type} segment codec (${segmentCodec}/${track.codec})`);\n }\n static tkhd(track) {\n const id = track.id;\n const duration = (track.duration || 0) * (track.timescale || 0);\n const width = track.width || 0;\n const height = track.height || 0;\n const upperWordDuration = Math.floor(duration / (UINT32_MAX + 1));\n const lowerWordDuration = Math.floor(duration % (UINT32_MAX + 1));\n return MP4.box(MP4.types.tkhd, new Uint8Array([0x01,\n // version 1\n 0x00, 0x00, 0x07,\n // flags\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02,\n // creation_time\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03,\n // modification_time\n id >> 24 & 0xff, id >> 16 & 0xff, id >> 8 & 0xff, id & 0xff,\n // track_ID\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n upperWordDuration >> 24, upperWordDuration >> 16 & 0xff, upperWordDuration >> 8 & 0xff, upperWordDuration & 0xff, lowerWordDuration >> 24, lowerWordDuration >> 16 & 0xff, lowerWordDuration >> 8 & 0xff, lowerWordDuration & 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00,\n // layer\n 0x00, 0x00,\n // alternate_group\n 0x00, 0x00,\n // non-audio track volume\n 0x00, 0x00,\n // reserved\n 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,\n // transformation: unity matrix\n width >> 8 & 0xff, width & 0xff, 0x00, 0x00,\n // width\n height >> 8 & 0xff, height & 0xff, 0x00, 0x00 // height\n ]));\n }\n static traf(track, baseMediaDecodeTime) {\n const sampleDependencyTable = MP4.sdtp(track);\n const id = track.id;\n const upperWordBaseMediaDecodeTime = Math.floor(baseMediaDecodeTime / (UINT32_MAX + 1));\n const lowerWordBaseMediaDecodeTime = Math.floor(baseMediaDecodeTime % (UINT32_MAX + 1));\n return MP4.box(MP4.types.traf, MP4.box(MP4.types.tfhd, new Uint8Array([0x00,\n // version 0\n 0x00, 0x00, 0x00,\n // flags\n id >> 24, id >> 16 & 0xff, id >> 8 & 0xff, id & 0xff // track_ID\n ])), MP4.box(MP4.types.tfdt, new Uint8Array([0x01,\n // version 1\n 0x00, 0x00, 0x00,\n // flags\n upperWordBaseMediaDecodeTime >> 24, upperWordBaseMediaDecodeTime >> 16 & 0xff, upperWordBaseMediaDecodeTime >> 8 & 0xff, upperWordBaseMediaDecodeTime & 0xff, lowerWordBaseMediaDecodeTime >> 24, lowerWordBaseMediaDecodeTime >> 16 & 0xff, lowerWordBaseMediaDecodeTime >> 8 & 0xff, lowerWordBaseMediaDecodeTime & 0xff])), MP4.trun(track, sampleDependencyTable.length + 16 +\n // tfhd\n 20 +\n // tfdt\n 8 +\n // traf header\n 16 +\n // mfhd\n 8 +\n // moof header\n 8),\n // mdat header\n sampleDependencyTable);\n }\n\n /**\n * Generate a track box.\n * @param track a track definition\n */\n static trak(track) {\n track.duration = track.duration || 0xffffffff;\n return MP4.box(MP4.types.trak, MP4.tkhd(track), MP4.mdia(track));\n }\n static trex(track) {\n const id = track.id;\n return MP4.box(MP4.types.trex, new Uint8Array([0x00,\n // version 0\n 0x00, 0x00, 0x00,\n // flags\n id >> 24, id >> 16 & 0xff, id >> 8 & 0xff, id & 0xff,\n // track_ID\n 0x00, 0x00, 0x00, 0x01,\n // default_sample_description_index\n 0x00, 0x00, 0x00, 0x00,\n // default_sample_duration\n 0x00, 0x00, 0x00, 0x00,\n // default_sample_size\n 0x00, 0x01, 0x00, 0x01 // default_sample_flags\n ]));\n }\n static trun(track, offset) {\n const samples = track.samples || [];\n const len = samples.length;\n const arraylen = 12 + 16 * len;\n const array = new Uint8Array(arraylen);\n let i;\n let sample;\n let duration;\n let size;\n let flags;\n let cts;\n offset += 8 + arraylen;\n array.set([track.type === 'video' ? 0x01 : 0x00,\n // version 1 for video with signed-int sample_composition_time_offset\n 0x00, 0x0f, 0x01,\n // flags\n len >>> 24 & 0xff, len >>> 16 & 0xff, len >>> 8 & 0xff, len & 0xff,\n // sample_count\n offset >>> 24 & 0xff, offset >>> 16 & 0xff, offset >>> 8 & 0xff, offset & 0xff // data_offset\n ], 0);\n for (i = 0; i < len; i++) {\n sample = samples[i];\n duration = sample.duration;\n size = sample.size;\n flags = sample.flags;\n cts = sample.cts;\n array.set([duration >>> 24 & 0xff, duration >>> 16 & 0xff, duration >>> 8 & 0xff, duration & 0xff,\n // sample_duration\n size >>> 24 & 0xff, size >>> 16 & 0xff, size >>> 8 & 0xff, size & 0xff,\n // sample_size\n flags.isLeading << 2 | flags.dependsOn, flags.isDependedOn << 6 | flags.hasRedundancy << 4 | flags.paddingValue << 1 | flags.isNonSync, flags.degradPrio & 0xf0 << 8, flags.degradPrio & 0x0f,\n // sample_flags\n cts >>> 24 & 0xff, cts >>> 16 & 0xff, cts >>> 8 & 0xff, cts & 0xff // sample_composition_time_offset\n ], 12 + 16 * i);\n }\n return MP4.box(MP4.types.trun, array);\n }\n static initSegment(tracks) {\n if (!MP4.types) {\n MP4.init();\n }\n const movie = MP4.moov(tracks);\n const result = appendUint8Array(MP4.FTYP, movie);\n return result;\n }\n static hvc1(track) {\n const ps = track.params;\n const units = [track.vps, track.sps, track.pps];\n const NALuLengthSize = 4;\n const config = new Uint8Array([0x01, ps.general_profile_space << 6 | (ps.general_tier_flag ? 32 : 0) | ps.general_profile_idc, ps.general_profile_compatibility_flags[0], ps.general_profile_compatibility_flags[1], ps.general_profile_compatibility_flags[2], ps.general_profile_compatibility_flags[3], ps.general_constraint_indicator_flags[0], ps.general_constraint_indicator_flags[1], ps.general_constraint_indicator_flags[2], ps.general_constraint_indicator_flags[3], ps.general_constraint_indicator_flags[4], ps.general_constraint_indicator_flags[5], ps.general_level_idc, 240 | ps.min_spatial_segmentation_idc >> 8, 255 & ps.min_spatial_segmentation_idc, 252 | ps.parallelismType, 252 | ps.chroma_format_idc, 248 | ps.bit_depth_luma_minus8, 248 | ps.bit_depth_chroma_minus8, 0x00, parseInt(ps.frame_rate.fps), NALuLengthSize - 1 | ps.temporal_id_nested << 2 | ps.num_temporal_layers << 3 | (ps.frame_rate.fixed ? 64 : 0), units.length]);\n\n // compute hvcC size in bytes\n let length = config.length;\n for (let i = 0; i < units.length; i += 1) {\n length += 3;\n for (let j = 0; j < units[i].length; j += 1) {\n length += 2 + units[i][j].length;\n }\n }\n const hvcC = new Uint8Array(length);\n hvcC.set(config, 0);\n length = config.length;\n // append parameter set units: one vps, one or more sps and pps\n const iMax = units.length - 1;\n for (let i = 0; i < units.length; i += 1) {\n hvcC.set(new Uint8Array([32 + i | (i === iMax ? 128 : 0), 0x00, units[i].length]), length);\n length += 3;\n for (let j = 0; j < units[i].length; j += 1) {\n hvcC.set(new Uint8Array([units[i][j].length >> 8, units[i][j].length & 255]), length);\n length += 2;\n hvcC.set(units[i][j], length);\n length += units[i][j].length;\n }\n }\n const hvcc = MP4.box(MP4.types.hvcC, hvcC);\n const width = track.width;\n const height = track.height;\n const hSpacing = track.pixelRatio[0];\n const vSpacing = track.pixelRatio[1];\n return MP4.box(MP4.types.hvc1, new Uint8Array([0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x01,\n // data_reference_index\n 0x00, 0x00,\n // pre_defined\n 0x00, 0x00,\n // reserved\n 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // pre_defined\n width >> 8 & 0xff, width & 0xff,\n // width\n height >> 8 & 0xff, height & 0xff,\n // height\n 0x00, 0x48, 0x00, 0x00,\n // horizresolution\n 0x00, 0x48, 0x00, 0x00,\n // vertresolution\n 0x00, 0x00, 0x00, 0x00,\n // reserved\n 0x00, 0x01,\n // frame_count\n 0x12, 0x64, 0x61, 0x69, 0x6c,\n // dailymotion/hls.js\n 0x79, 0x6d, 0x6f, 0x74, 0x69, 0x6f, 0x6e, 0x2f, 0x68, 0x6c, 0x73, 0x2e, 0x6a, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,\n // compressorname\n 0x00, 0x18,\n // depth = 24\n 0x11, 0x11]),\n // pre_defined = -1\n hvcc, MP4.box(MP4.types.btrt, new Uint8Array([0x00, 0x1c, 0x9c, 0x80,\n // bufferSizeDB\n 0x00, 0x2d, 0xc6, 0xc0,\n // maxBitrate\n 0x00, 0x2d, 0xc6, 0xc0])),\n // avgBitrate\n MP4.box(MP4.types.pasp, new Uint8Array([hSpacing >> 24,\n // hSpacing\n hSpacing >> 16 & 0xff, hSpacing >> 8 & 0xff, hSpacing & 0xff, vSpacing >> 24,\n // vSpacing\n vSpacing >> 16 & 0xff, vSpacing >> 8 & 0xff, vSpacing & 0xff])));\n }\n}\nMP4.types = void 0;\nMP4.HDLR_TYPES = void 0;\nMP4.STTS = void 0;\nMP4.STSC = void 0;\nMP4.STCO = void 0;\nMP4.STSZ = void 0;\nMP4.VMHD = void 0;\nMP4.SMHD = void 0;\nMP4.STSD = void 0;\nMP4.FTYP = void 0;\nMP4.DINF = void 0;\n\nconst MPEG_TS_CLOCK_FREQ_HZ = 90000;\nfunction toTimescaleFromBase(baseTime, destScale, srcBase = 1, round = false) {\n const result = baseTime * destScale * srcBase; // equivalent to `(value * scale) / (1 / base)`\n return round ? Math.round(result) : result;\n}\nfunction toTimescaleFromScale(baseTime, destScale, srcScale = 1, round = false) {\n return toTimescaleFromBase(baseTime, destScale, 1 / srcScale, round);\n}\nfunction toMsFromMpegTsClock(baseTime, round = false) {\n return toTimescaleFromBase(baseTime, 1000, 1 / MPEG_TS_CLOCK_FREQ_HZ, round);\n}\nfunction toMpegTsClockFromTimescale(baseTime, srcScale = 1) {\n return toTimescaleFromBase(baseTime, MPEG_TS_CLOCK_FREQ_HZ, 1 / srcScale);\n}\nfunction timestampToString(timestamp) {\n const {\n baseTime,\n timescale,\n trackId\n } = timestamp;\n return `${baseTime / timescale} (${baseTime}/${timescale}) trackId: ${trackId}`;\n}\n\nconst MAX_SILENT_FRAME_DURATION = 10 * 1000; // 10 seconds\nconst AAC_SAMPLES_PER_FRAME = 1024;\nconst MPEG_AUDIO_SAMPLE_PER_FRAME = 1152;\nconst AC3_SAMPLES_PER_FRAME = 1536;\nlet chromeVersion = null;\nlet safariWebkitVersion = null;\nfunction createMp4Sample(isKeyframe, duration, size, cts) {\n return {\n duration,\n size,\n cts,\n flags: {\n isLeading: 0,\n isDependedOn: 0,\n hasRedundancy: 0,\n degradPrio: 0,\n dependsOn: isKeyframe ? 2 : 1,\n isNonSync: isKeyframe ? 0 : 1\n }\n };\n}\nclass MP4Remuxer extends Logger {\n constructor(observer, config, typeSupported, logger) {\n super('mp4-remuxer', logger);\n this.observer = void 0;\n this.config = void 0;\n this.typeSupported = void 0;\n this.ISGenerated = false;\n this._initPTS = null;\n this._initDTS = null;\n this.nextVideoTs = null;\n this.nextAudioTs = null;\n this.videoSampleDuration = null;\n this.isAudioContiguous = false;\n this.isVideoContiguous = false;\n this.videoTrackConfig = void 0;\n this.observer = observer;\n this.config = config;\n this.typeSupported = typeSupported;\n this.ISGenerated = false;\n if (chromeVersion === null) {\n const userAgent = navigator.userAgent || '';\n const result = userAgent.match(/Chrome\\/(\\d+)/i);\n chromeVersion = result ? parseInt(result[1]) : 0;\n }\n if (safariWebkitVersion === null) {\n const result = navigator.userAgent.match(/Safari\\/(\\d+)/i);\n safariWebkitVersion = result ? parseInt(result[1]) : 0;\n }\n }\n destroy() {\n // @ts-ignore\n this.config = this.videoTrackConfig = this._initPTS = this._initDTS = null;\n }\n resetTimeStamp(defaultTimeStamp) {\n const initPTS = this._initPTS;\n if (!initPTS || !defaultTimeStamp || defaultTimeStamp.trackId !== initPTS.trackId || defaultTimeStamp.baseTime !== initPTS.baseTime || defaultTimeStamp.timescale !== initPTS.timescale) {\n this.log(`Reset initPTS: ${initPTS ? timestampToString(initPTS) : initPTS} > ${defaultTimeStamp ? timestampToString(defaultTimeStamp) : defaultTimeStamp}`);\n }\n this._initPTS = this._initDTS = defaultTimeStamp;\n }\n resetNextTimestamp() {\n this.log('reset next timestamp');\n this.isVideoContiguous = false;\n this.isAudioContiguous = false;\n }\n resetInitSegment() {\n this.log('ISGenerated flag reset');\n this.ISGenerated = false;\n this.videoTrackConfig = undefined;\n }\n getVideoStartPts(videoSamples) {\n // Get the minimum PTS value relative to the first sample's PTS, normalized for 33-bit wrapping\n let rolloverDetected = false;\n const firstPts = videoSamples[0].pts;\n const startPTS = videoSamples.reduce((minPTS, sample) => {\n let pts = sample.pts;\n let delta = pts - minPTS;\n if (delta < -4294967296) {\n // 2^32, see PTSNormalize for reasoning, but we're hitting a rollover here, and we don't want that to impact the timeOffset calculation\n rolloverDetected = true;\n pts = normalizePts(pts, firstPts);\n delta = pts - minPTS;\n }\n if (delta > 0) {\n return minPTS;\n }\n return pts;\n }, firstPts);\n if (rolloverDetected) {\n this.debug('PTS rollover detected');\n }\n return startPTS;\n }\n remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, accurateTimeOffset, flush, playlistType) {\n let video;\n let audio;\n let initSegment;\n let text;\n let id3;\n let independent;\n let audioTimeOffset = timeOffset;\n let videoTimeOffset = timeOffset;\n\n // If we're remuxing audio and video progressively, wait until we've received enough samples for each track before proceeding.\n // This is done to synchronize the audio and video streams. We know if the current segment will have samples if the \"pid\"\n // parameter is greater than -1. The pid is set when the PMT is parsed, which contains the tracks list.\n // However, if the initSegment has already been generated, or we've reached the end of a segment (flush),\n // then we can remux one track without waiting for the other.\n const hasAudio = audioTrack.pid > -1;\n const hasVideo = videoTrack.pid > -1;\n const length = videoTrack.samples.length;\n const enoughAudioSamples = audioTrack.samples.length > 0;\n const enoughVideoSamples = flush && length > 0 || length > 1;\n const canRemuxAvc = (!hasAudio || enoughAudioSamples) && (!hasVideo || enoughVideoSamples) || this.ISGenerated || flush;\n if (canRemuxAvc) {\n if (this.ISGenerated) {\n var _videoTrack$pixelRati, _config$pixelRatio, _videoTrack$pixelRati2, _config$pixelRatio2;\n const config = this.videoTrackConfig;\n if (config && (videoTrack.width !== config.width || videoTrack.height !== config.height || ((_videoTrack$pixelRati = videoTrack.pixelRatio) == null ? void 0 : _videoTrack$pixelRati[0]) !== ((_config$pixelRatio = config.pixelRatio) == null ? void 0 : _config$pixelRatio[0]) || ((_videoTrack$pixelRati2 = videoTrack.pixelRatio) == null ? void 0 : _videoTrack$pixelRati2[1]) !== ((_config$pixelRatio2 = config.pixelRatio) == null ? void 0 : _config$pixelRatio2[1])) || !config && enoughVideoSamples || this.nextAudioTs === null && enoughAudioSamples) {\n this.resetInitSegment();\n }\n }\n if (!this.ISGenerated) {\n initSegment = this.generateIS(audioTrack, videoTrack, timeOffset, accurateTimeOffset);\n }\n const isVideoContiguous = this.isVideoContiguous;\n let firstKeyFrameIndex = -1;\n let firstKeyFramePTS;\n if (enoughVideoSamples) {\n firstKeyFrameIndex = findKeyframeIndex(videoTrack.samples);\n if (!isVideoContiguous && this.config.forceKeyFrameOnDiscontinuity) {\n independent = true;\n if (firstKeyFrameIndex > 0) {\n this.warn(`Dropped ${firstKeyFrameIndex} out of ${length} video samples due to a missing keyframe`);\n const startPTS = this.getVideoStartPts(videoTrack.samples);\n videoTrack.samples = videoTrack.samples.slice(firstKeyFrameIndex);\n videoTrack.dropped += firstKeyFrameIndex;\n videoTimeOffset += (videoTrack.samples[0].pts - startPTS) / videoTrack.inputTimeScale;\n firstKeyFramePTS = videoTimeOffset;\n } else if (firstKeyFrameIndex === -1) {\n this.warn(`No keyframe found out of ${length} video samples`);\n independent = false;\n }\n }\n }\n if (this.ISGenerated) {\n if (enoughAudioSamples && enoughVideoSamples) {\n // timeOffset is expected to be the offset of the first timestamp of this fragment (first DTS)\n // if first audio DTS is not aligned with first video DTS then we need to take that into account\n // when providing timeOffset to remuxAudio / remuxVideo. if we don't do that, there might be a permanent / small\n // drift between audio and video streams\n const startPTS = this.getVideoStartPts(videoTrack.samples);\n const tsDelta = normalizePts(audioTrack.samples[0].pts, startPTS) - startPTS;\n const audiovideoTimestampDelta = tsDelta / videoTrack.inputTimeScale;\n audioTimeOffset += Math.max(0, audiovideoTimestampDelta);\n videoTimeOffset += Math.max(0, -audiovideoTimestampDelta);\n }\n\n // Purposefully remuxing audio before video, so that remuxVideo can use nextAudioPts, which is calculated in remuxAudio.\n if (enoughAudioSamples) {\n // if initSegment was generated without audio samples, regenerate it again\n if (!audioTrack.samplerate) {\n this.warn('regenerate InitSegment as audio detected');\n initSegment = this.generateIS(audioTrack, videoTrack, timeOffset, accurateTimeOffset);\n }\n audio = this.remuxAudio(audioTrack, audioTimeOffset, this.isAudioContiguous, accurateTimeOffset, hasVideo || enoughVideoSamples || playlistType === PlaylistLevelType.AUDIO ? videoTimeOffset : undefined);\n if (enoughVideoSamples) {\n const audioTrackLength = audio ? audio.endPTS - audio.startPTS : 0;\n // if initSegment was generated without video samples, regenerate it again\n if (!videoTrack.inputTimeScale) {\n this.warn('regenerate InitSegment as video detected');\n initSegment = this.generateIS(audioTrack, videoTrack, timeOffset, accurateTimeOffset);\n }\n video = this.remuxVideo(videoTrack, videoTimeOffset, isVideoContiguous, audioTrackLength);\n }\n } else if (enoughVideoSamples) {\n video = this.remuxVideo(videoTrack, videoTimeOffset, isVideoContiguous, 0);\n }\n if (video) {\n video.firstKeyFrame = firstKeyFrameIndex;\n video.independent = firstKeyFrameIndex !== -1;\n video.firstKeyFramePTS = firstKeyFramePTS;\n }\n }\n }\n\n // Allow ID3 and text to remux, even if more audio/video samples are required\n if (this.ISGenerated && this._initPTS && this._initDTS) {\n if (id3Track.samples.length) {\n id3 = flushTextTrackMetadataCueSamples(id3Track, timeOffset, this._initPTS, this._initDTS);\n }\n if (textTrack.samples.length) {\n text = flushTextTrackUserdataCueSamples(textTrack, timeOffset, this._initPTS);\n }\n }\n return {\n audio,\n video,\n initSegment,\n independent,\n text,\n id3\n };\n }\n computeInitPts(basetime, timescale, presentationTime, type) {\n const offset = Math.round(presentationTime * timescale);\n let timestamp = normalizePts(basetime, offset);\n if (timestamp < offset + timescale) {\n this.log(`Adjusting PTS for rollover in timeline near ${(offset - timestamp) / timescale} ${type}`);\n while (timestamp < offset + timescale) {\n timestamp += 8589934592;\n }\n }\n return timestamp - offset;\n }\n generateIS(audioTrack, videoTrack, timeOffset, accurateTimeOffset) {\n const audioSamples = audioTrack.samples;\n const videoSamples = videoTrack.samples;\n const typeSupported = this.typeSupported;\n const tracks = {};\n const _initPTS = this._initPTS;\n let computePTSDTS = !_initPTS || accurateTimeOffset;\n let container = 'audio/mp4';\n let initPTS;\n let initDTS;\n let timescale;\n let trackId = -1;\n if (computePTSDTS) {\n initPTS = initDTS = Infinity;\n }\n if (audioTrack.config && audioSamples.length) {\n // let's use audio sampling rate as MP4 time scale.\n // rationale is that there is a integer nb of audio frames per audio sample (1024 for AAC)\n // using audio sampling rate here helps having an integer MP4 frame duration\n // this avoids potential rounding issue and AV sync issue\n audioTrack.timescale = audioTrack.samplerate;\n switch (audioTrack.segmentCodec) {\n case 'mp3':\n if (typeSupported.mpeg) {\n // Chrome and Safari\n container = 'audio/mpeg';\n audioTrack.codec = '';\n } else if (typeSupported.mp3) {\n // Firefox\n audioTrack.codec = 'mp3';\n }\n break;\n case 'ac3':\n audioTrack.codec = 'ac-3';\n break;\n }\n tracks.audio = {\n id: 'audio',\n container: container,\n codec: audioTrack.codec,\n initSegment: audioTrack.segmentCodec === 'mp3' && typeSupported.mpeg ? new Uint8Array(0) : MP4.initSegment([audioTrack]),\n metadata: {\n channelCount: audioTrack.channelCount\n }\n };\n if (computePTSDTS) {\n trackId = audioTrack.id;\n timescale = audioTrack.inputTimeScale;\n if (!_initPTS || timescale !== _initPTS.timescale) {\n // remember first PTS of this demuxing context. for audio, PTS = DTS\n initPTS = initDTS = this.computeInitPts(audioSamples[0].pts, timescale, timeOffset, 'audio');\n } else {\n computePTSDTS = false;\n }\n }\n }\n if (videoTrack.sps && videoTrack.pps && videoSamples.length) {\n // let's use input time scale as MP4 video timescale\n // we use input time scale straight away to avoid rounding issues on frame duration / cts computation\n videoTrack.timescale = videoTrack.inputTimeScale;\n tracks.video = {\n id: 'main',\n container: 'video/mp4',\n codec: videoTrack.codec,\n initSegment: MP4.initSegment([videoTrack]),\n metadata: {\n width: videoTrack.width,\n height: videoTrack.height\n }\n };\n if (computePTSDTS) {\n trackId = videoTrack.id;\n timescale = videoTrack.inputTimeScale;\n if (!_initPTS || timescale !== _initPTS.timescale) {\n const basePTS = this.getVideoStartPts(videoSamples);\n const baseDTS = normalizePts(videoSamples[0].dts, basePTS);\n const videoInitDTS = this.computeInitPts(baseDTS, timescale, timeOffset, 'video');\n const videoInitPTS = this.computeInitPts(basePTS, timescale, timeOffset, 'video');\n initDTS = Math.min(initDTS, videoInitDTS);\n initPTS = Math.min(initPTS, videoInitPTS);\n } else {\n computePTSDTS = false;\n }\n }\n this.videoTrackConfig = {\n width: videoTrack.width,\n height: videoTrack.height,\n pixelRatio: videoTrack.pixelRatio\n };\n }\n if (Object.keys(tracks).length) {\n this.ISGenerated = true;\n if (computePTSDTS) {\n if (_initPTS) {\n this.warn(`Timestamps at playlist time: ${accurateTimeOffset ? '' : '~'}${timeOffset} ${initPTS / timescale} != initPTS: ${_initPTS.baseTime / _initPTS.timescale} (${_initPTS.baseTime}/${_initPTS.timescale}) trackId: ${_initPTS.trackId}`);\n }\n this.log(`Found initPTS at playlist time: ${timeOffset} offset: ${initPTS / timescale} (${initPTS}/${timescale}) trackId: ${trackId}`);\n this._initPTS = {\n baseTime: initPTS,\n timescale: timescale,\n trackId: trackId\n };\n this._initDTS = {\n baseTime: initDTS,\n timescale: timescale,\n trackId: trackId\n };\n } else {\n initPTS = timescale = undefined;\n }\n return {\n tracks,\n initPTS,\n timescale,\n trackId\n };\n }\n }\n remuxVideo(track, timeOffset, contiguous, audioTrackLength) {\n const timeScale = track.inputTimeScale;\n const inputSamples = track.samples;\n const outputSamples = [];\n const nbSamples = inputSamples.length;\n const initPTS = this._initPTS;\n const initTime = initPTS.baseTime * timeScale / initPTS.timescale;\n let nextVideoTs = this.nextVideoTs;\n let offset = 8;\n let mp4SampleDuration = this.videoSampleDuration;\n let firstDTS;\n let lastDTS;\n let minPTS = Number.POSITIVE_INFINITY;\n let maxPTS = Number.NEGATIVE_INFINITY;\n let sortSamples = false;\n\n // if parsed fragment is contiguous with last one, let's use last DTS value as reference\n if (!contiguous || nextVideoTs === null) {\n const pts = initTime + timeOffset * timeScale;\n const cts = inputSamples[0].pts - normalizePts(inputSamples[0].dts, inputSamples[0].pts);\n if (chromeVersion && nextVideoTs !== null && Math.abs(pts - cts - (nextVideoTs + initTime)) < 15000) {\n // treat as contigous to adjust samples that would otherwise produce video buffer gaps in Chrome\n contiguous = true;\n } else {\n // if not contiguous, let's use target timeOffset\n nextVideoTs = pts - cts - initTime;\n }\n }\n\n // PTS is coded on 33bits, and can loop from -2^32 to 2^32\n // PTSNormalize will make PTS/DTS value monotonic, we use last known DTS value as reference value\n const nextVideoPts = nextVideoTs + initTime;\n for (let i = 0; i < nbSamples; i++) {\n const sample = inputSamples[i];\n sample.pts = normalizePts(sample.pts, nextVideoPts);\n sample.dts = normalizePts(sample.dts, nextVideoPts);\n if (sample.dts < inputSamples[i > 0 ? i - 1 : i].dts) {\n sortSamples = true;\n }\n }\n\n // sort video samples by DTS then PTS then demux id order\n if (sortSamples) {\n inputSamples.sort(function (a, b) {\n const deltadts = a.dts - b.dts;\n const deltapts = a.pts - b.pts;\n return deltadts || deltapts;\n });\n }\n\n // Get first/last DTS\n firstDTS = inputSamples[0].dts;\n lastDTS = inputSamples[inputSamples.length - 1].dts;\n\n // Sample duration (as expected by trun MP4 boxes), should be the delta between sample DTS\n // set this constant duration as being the avg delta between consecutive DTS.\n const inputDuration = lastDTS - firstDTS;\n const averageSampleDuration = inputDuration ? Math.round(inputDuration / (nbSamples - 1)) : mp4SampleDuration || track.inputTimeScale / 30;\n\n // if fragment are contiguous, detect hole/overlapping between fragments\n if (contiguous) {\n // check timestamp continuity across consecutive fragments (this is to remove inter-fragment gap/hole)\n const delta = firstDTS - nextVideoPts;\n const foundHole = delta > averageSampleDuration;\n const foundOverlap = delta < -1;\n if (foundHole || foundOverlap) {\n if (foundHole) {\n this.warn(`${(track.segmentCodec || '').toUpperCase()}: ${toMsFromMpegTsClock(delta, true)} ms (${delta}dts) hole between fragments detected at ${timeOffset.toFixed(3)}`);\n } else {\n this.warn(`${(track.segmentCodec || '').toUpperCase()}: ${toMsFromMpegTsClock(-delta, true)} ms (${delta}dts) overlapping between fragments detected at ${timeOffset.toFixed(3)}`);\n }\n if (!foundOverlap || nextVideoPts >= inputSamples[0].pts || chromeVersion) {\n firstDTS = nextVideoPts;\n const firstPTS = inputSamples[0].pts - delta;\n if (foundHole) {\n inputSamples[0].dts = firstDTS;\n inputSamples[0].pts = firstPTS;\n } else {\n let isPTSOrderRetained = true;\n for (let i = 0; i < inputSamples.length; i++) {\n if (inputSamples[i].dts > firstPTS && isPTSOrderRetained) {\n break;\n }\n const prevPTS = inputSamples[i].pts;\n inputSamples[i].dts -= delta;\n inputSamples[i].pts -= delta;\n\n // check to see if this sample's PTS order has changed\n // relative to the next one\n if (i < inputSamples.length - 1) {\n const nextSamplePTS = inputSamples[i + 1].pts;\n const currentSamplePTS = inputSamples[i].pts;\n const currentOrder = nextSamplePTS <= currentSamplePTS;\n const prevOrder = nextSamplePTS <= prevPTS;\n isPTSOrderRetained = currentOrder == prevOrder;\n }\n }\n }\n this.log(`Video: Initial PTS/DTS adjusted: ${toMsFromMpegTsClock(firstPTS, true)}/${toMsFromMpegTsClock(firstDTS, true)}, delta: ${toMsFromMpegTsClock(delta, true)} ms`);\n }\n }\n }\n firstDTS = Math.max(0, firstDTS);\n let nbNalu = 0;\n let naluLen = 0;\n let dtsStep = firstDTS;\n for (let i = 0; i < nbSamples; i++) {\n // compute total/avc sample length and nb of NAL units\n const sample = inputSamples[i];\n const units = sample.units;\n const nbUnits = units.length;\n let sampleLen = 0;\n for (let j = 0; j < nbUnits; j++) {\n sampleLen += units[j].data.length;\n }\n naluLen += sampleLen;\n nbNalu += nbUnits;\n sample.length = sampleLen;\n\n // ensure sample monotonic DTS\n if (sample.dts < dtsStep) {\n sample.dts = dtsStep;\n dtsStep += averageSampleDuration / 4 | 0 || 1;\n } else {\n dtsStep = sample.dts;\n }\n minPTS = Math.min(sample.pts, minPTS);\n maxPTS = Math.max(sample.pts, maxPTS);\n }\n lastDTS = inputSamples[nbSamples - 1].dts;\n\n /* concatenate the video data and construct the mdat in place\n (need 8 more bytes to fill length and mpdat type) */\n const mdatSize = naluLen + 4 * nbNalu + 8;\n let mdat;\n try {\n mdat = new Uint8Array(mdatSize);\n } catch (err) {\n this.observer.emit(Events.ERROR, Events.ERROR, {\n type: ErrorTypes.MUX_ERROR,\n details: ErrorDetails.REMUX_ALLOC_ERROR,\n fatal: false,\n error: err,\n bytes: mdatSize,\n reason: `fail allocating video mdat ${mdatSize}`\n });\n return;\n }\n const view = new DataView(mdat.buffer);\n view.setUint32(0, mdatSize);\n mdat.set(MP4.types.mdat, 4);\n let stretchedLastFrame = false;\n let minDtsDelta = Number.POSITIVE_INFINITY;\n let minPtsDelta = Number.POSITIVE_INFINITY;\n let maxDtsDelta = Number.NEGATIVE_INFINITY;\n let maxPtsDelta = Number.NEGATIVE_INFINITY;\n for (let i = 0; i < nbSamples; i++) {\n const VideoSample = inputSamples[i];\n const VideoSampleUnits = VideoSample.units;\n let mp4SampleLength = 0;\n // convert NALU bitstream to MP4 format (prepend NALU with size field)\n for (let j = 0, nbUnits = VideoSampleUnits.length; j < nbUnits; j++) {\n const unit = VideoSampleUnits[j];\n const unitData = unit.data;\n const unitDataLen = unit.data.byteLength;\n view.setUint32(offset, unitDataLen);\n offset += 4;\n mdat.set(unitData, offset);\n offset += unitDataLen;\n mp4SampleLength += 4 + unitDataLen;\n }\n\n // expected sample duration is the Decoding Timestamp diff of consecutive samples\n let ptsDelta;\n if (i < nbSamples - 1) {\n mp4SampleDuration = inputSamples[i + 1].dts - VideoSample.dts;\n ptsDelta = inputSamples[i + 1].pts - VideoSample.pts;\n } else {\n const config = this.config;\n const lastFrameDuration = i > 0 ? VideoSample.dts - inputSamples[i - 1].dts : averageSampleDuration;\n ptsDelta = i > 0 ? VideoSample.pts - inputSamples[i - 1].pts : averageSampleDuration;\n if (config.stretchShortVideoTrack && this.nextAudioTs !== null) {\n // In some cases, a segment's audio track duration may exceed the video track duration.\n // Since we've already remuxed audio, and we know how long the audio track is, we look to\n // see if the delta to the next segment is longer than maxBufferHole.\n // If so, playback would potentially get stuck, so we artificially inflate\n // the duration of the last frame to minimize any potential gap between segments.\n const gapTolerance = Math.floor(config.maxBufferHole * timeScale);\n const deltaToFrameEnd = (audioTrackLength ? minPTS + audioTrackLength * timeScale : this.nextAudioTs + initTime) - VideoSample.pts;\n if (deltaToFrameEnd > gapTolerance) {\n // We subtract lastFrameDuration from deltaToFrameEnd to try to prevent any video\n // frame overlap. maxBufferHole should be >> lastFrameDuration anyway.\n mp4SampleDuration = deltaToFrameEnd - lastFrameDuration;\n if (mp4SampleDuration < 0) {\n mp4SampleDuration = lastFrameDuration;\n } else {\n stretchedLastFrame = true;\n }\n this.log(`It is approximately ${deltaToFrameEnd / 90} ms to the next segment; using duration ${mp4SampleDuration / 90} ms for the last video frame.`);\n } else {\n mp4SampleDuration = lastFrameDuration;\n }\n } else {\n mp4SampleDuration = lastFrameDuration;\n }\n }\n const compositionTimeOffset = Math.round(VideoSample.pts - VideoSample.dts);\n minDtsDelta = Math.min(minDtsDelta, mp4SampleDuration);\n maxDtsDelta = Math.max(maxDtsDelta, mp4SampleDuration);\n minPtsDelta = Math.min(minPtsDelta, ptsDelta);\n maxPtsDelta = Math.max(maxPtsDelta, ptsDelta);\n outputSamples.push(createMp4Sample(VideoSample.key, mp4SampleDuration, mp4SampleLength, compositionTimeOffset));\n }\n if (outputSamples.length) {\n if (chromeVersion) {\n if (chromeVersion < 70) {\n // Chrome workaround, mark first sample as being a Random Access Point (keyframe) to avoid sourcebuffer append issue\n // https://code.google.com/p/chromium/issues/detail?id=229412\n const flags = outputSamples[0].flags;\n flags.dependsOn = 2;\n flags.isNonSync = 0;\n }\n } else if (safariWebkitVersion) {\n // Fix for \"CNN special report, with CC\" in test-streams (Safari browser only)\n // Ignore DTS when frame durations are irregular. Safari MSE does not handle this leading to gaps.\n if (maxPtsDelta - minPtsDelta < maxDtsDelta - minDtsDelta && averageSampleDuration / maxDtsDelta < 0.025 && outputSamples[0].cts === 0) {\n this.warn('Found irregular gaps in sample duration. Using PTS instead of DTS to determine MP4 sample duration.');\n let dts = firstDTS;\n for (let i = 0, len = outputSamples.length; i < len; i++) {\n const nextDts = dts + outputSamples[i].duration;\n const pts = dts + outputSamples[i].cts;\n if (i < len - 1) {\n const nextPts = nextDts + outputSamples[i + 1].cts;\n outputSamples[i].duration = nextPts - pts;\n } else {\n outputSamples[i].duration = i ? outputSamples[i - 1].duration : averageSampleDuration;\n }\n outputSamples[i].cts = 0;\n dts = nextDts;\n }\n }\n }\n }\n // next AVC/HEVC sample DTS should be equal to last sample DTS + last sample duration (in PES timescale)\n mp4SampleDuration = stretchedLastFrame || !mp4SampleDuration ? averageSampleDuration : mp4SampleDuration;\n const endDTS = lastDTS + mp4SampleDuration;\n this.nextVideoTs = nextVideoTs = endDTS - initTime;\n this.videoSampleDuration = mp4SampleDuration;\n this.isVideoContiguous = true;\n const moof = MP4.moof(track.sequenceNumber++, firstDTS, _extends(track, {\n samples: outputSamples\n }));\n const type = 'video';\n const data = {\n data1: moof,\n data2: mdat,\n startPTS: (minPTS - initTime) / timeScale,\n endPTS: (maxPTS + mp4SampleDuration - initTime) / timeScale,\n startDTS: (firstDTS - initTime) / timeScale,\n endDTS: nextVideoTs / timeScale,\n type,\n hasAudio: false,\n hasVideo: true,\n nb: outputSamples.length,\n dropped: track.dropped\n };\n track.samples = [];\n track.dropped = 0;\n return data;\n }\n getSamplesPerFrame(track) {\n switch (track.segmentCodec) {\n case 'mp3':\n return MPEG_AUDIO_SAMPLE_PER_FRAME;\n case 'ac3':\n return AC3_SAMPLES_PER_FRAME;\n default:\n return AAC_SAMPLES_PER_FRAME;\n }\n }\n remuxAudio(track, timeOffset, contiguous, accurateTimeOffset, videoTimeOffset) {\n const inputTimeScale = track.inputTimeScale;\n const mp4timeScale = track.samplerate ? track.samplerate : inputTimeScale;\n const scaleFactor = inputTimeScale / mp4timeScale;\n const mp4SampleDuration = this.getSamplesPerFrame(track);\n const inputSampleDuration = mp4SampleDuration * scaleFactor;\n const initPTS = this._initPTS;\n const rawMPEG = track.segmentCodec === 'mp3' && this.typeSupported.mpeg;\n const outputSamples = [];\n const alignedWithVideo = videoTimeOffset !== undefined;\n let inputSamples = track.samples;\n let offset = rawMPEG ? 0 : 8;\n let nextAudioTs = this.nextAudioTs || -1;\n\n // window.audioSamples ? window.audioSamples.push(inputSamples.map(s => s.pts)) : (window.audioSamples = [inputSamples.map(s => s.pts)]);\n\n // for audio samples, also consider consecutive fragments as being contiguous (even if a level switch occurs),\n // for sake of clarity:\n // consecutive fragments are frags with\n // - less than 100ms gaps between new time offset (if accurate) and next expected PTS OR\n // - less than 20 audio frames distance\n // contiguous fragments are consecutive fragments from same quality level (same level, new SN = old SN + 1)\n // this helps ensuring audio continuity\n // and this also avoids audio glitches/cut when switching quality, or reporting wrong duration on first audio frame\n const initTime = initPTS.baseTime * inputTimeScale / initPTS.timescale;\n const timeOffsetMpegTS = initTime + timeOffset * inputTimeScale;\n this.isAudioContiguous = contiguous = contiguous || inputSamples.length && nextAudioTs > 0 && (accurateTimeOffset && Math.abs(timeOffsetMpegTS - (nextAudioTs + initTime)) < 9000 || Math.abs(normalizePts(inputSamples[0].pts, timeOffsetMpegTS) - (nextAudioTs + initTime)) < 20 * inputSampleDuration);\n\n // compute normalized PTS\n inputSamples.forEach(function (sample) {\n sample.pts = normalizePts(sample.pts, timeOffsetMpegTS);\n });\n if (!contiguous || nextAudioTs < 0) {\n const sampleCount = inputSamples.length;\n // filter out sample with negative PTS that are not playable anyway\n // if we don't remove these negative samples, they will shift all audio samples forward.\n // leading to audio overlap between current / next fragment\n inputSamples = inputSamples.filter(sample => sample.pts >= 0);\n if (sampleCount !== inputSamples.length) {\n this.warn(`Removed ${inputSamples.length - sampleCount} of ${sampleCount} samples (initPTS ${initTime} / ${inputTimeScale})`);\n }\n\n // in case all samples have negative PTS, and have been filtered out, return now\n if (!inputSamples.length) {\n return;\n }\n if (videoTimeOffset === 0) {\n // Set the start to match video so that start gaps larger than inputSampleDuration are filled with silence\n nextAudioTs = 0;\n } else if (accurateTimeOffset && !alignedWithVideo) {\n // When not seeking, not live, and LevelDetails.PTSKnown, use fragment start as predicted next audio PTS\n nextAudioTs = Math.max(0, timeOffsetMpegTS - initTime);\n } else {\n // if frags are not contiguous and if we cant trust time offset, let's use first sample PTS as next audio PTS\n nextAudioTs = inputSamples[0].pts - initTime;\n }\n }\n\n // If the audio track is missing samples, the frames seem to get \"left-shifted\" within the\n // resulting mp4 segment, causing sync issues and leaving gaps at the end of the audio segment.\n // In an effort to prevent this from happening, we inject frames here where there are gaps.\n // When possible, we inject a silent frame; when that's not possible, we duplicate the last\n // frame.\n\n if (track.segmentCodec === 'aac') {\n const maxAudioFramesDrift = this.config.maxAudioFramesDrift;\n for (let i = 0, nextPts = nextAudioTs + initTime; i < inputSamples.length; i++) {\n // First, let's see how far off this frame is from where we expect it to be\n const sample = inputSamples[i];\n const pts = sample.pts;\n const delta = pts - nextPts;\n const duration = Math.abs(1000 * delta / inputTimeScale);\n\n // When remuxing with video, if we're overlapping by more than a duration, drop this sample to stay in sync\n if (delta <= -maxAudioFramesDrift * inputSampleDuration && alignedWithVideo) {\n if (i === 0) {\n this.warn(`Audio frame @ ${(pts / inputTimeScale).toFixed(3)}s overlaps marker by ${Math.round(1000 * delta / inputTimeScale)} ms.`);\n this.nextAudioTs = nextAudioTs = pts - initTime;\n nextPts = pts;\n }\n } // eslint-disable-line brace-style\n\n // Insert missing frames if:\n // 1: We're more than maxAudioFramesDrift frame away\n // 2: Not more than MAX_SILENT_FRAME_DURATION away\n // 3: currentTime (aka nextPtsNorm) is not 0\n // 4: remuxing with video (videoTimeOffset !== undefined)\n else if (delta >= maxAudioFramesDrift * inputSampleDuration && duration < MAX_SILENT_FRAME_DURATION && alignedWithVideo) {\n let missing = Math.round(delta / inputSampleDuration);\n // Adjust nextPts so that silent samples are aligned with media pts. This will prevent media samples from\n // later being shifted if nextPts is based on timeOffset and delta is not a multiple of inputSampleDuration.\n nextPts = pts - missing * inputSampleDuration;\n while (nextPts < 0 && missing && inputSampleDuration) {\n missing--;\n nextPts += inputSampleDuration;\n }\n if (i === 0) {\n this.nextAudioTs = nextAudioTs = nextPts - initTime;\n }\n this.warn(`Injecting ${missing} audio frames @ ${((nextPts - initTime) / inputTimeScale).toFixed(3)}s due to ${Math.round(1000 * delta / inputTimeScale)} ms gap.`);\n for (let j = 0; j < missing; j++) {\n let fillFrame = AAC.getSilentFrame(track.parsedCodec || track.manifestCodec || track.codec, track.channelCount);\n if (!fillFrame) {\n this.log('Unable to get silent frame for given audio codec; duplicating last frame instead.');\n fillFrame = sample.unit.subarray();\n }\n inputSamples.splice(i, 0, {\n unit: fillFrame,\n pts: nextPts\n });\n nextPts += inputSampleDuration;\n i++;\n }\n }\n sample.pts = nextPts;\n nextPts += inputSampleDuration;\n }\n }\n let firstPTS = null;\n let lastPTS = null;\n let mdat;\n let mdatSize = 0;\n let sampleLength = inputSamples.length;\n while (sampleLength--) {\n mdatSize += inputSamples[sampleLength].unit.byteLength;\n }\n for (let j = 0, _nbSamples = inputSamples.length; j < _nbSamples; j++) {\n const audioSample = inputSamples[j];\n const unit = audioSample.unit;\n let pts = audioSample.pts;\n if (lastPTS !== null) {\n // If we have more than one sample, set the duration of the sample to the \"real\" duration; the PTS diff with\n // the previous sample\n const prevSample = outputSamples[j - 1];\n prevSample.duration = Math.round((pts - lastPTS) / scaleFactor);\n } else {\n if (contiguous && track.segmentCodec === 'aac') {\n // set PTS/DTS to expected PTS/DTS\n pts = nextAudioTs + initTime;\n }\n // remember first PTS of our audioSamples\n firstPTS = pts;\n if (mdatSize > 0) {\n /* concatenate the audio data and construct the mdat in place\n (need 8 more bytes to fill length and mdat type) */\n mdatSize += offset;\n try {\n mdat = new Uint8Array(mdatSize);\n } catch (err) {\n this.observer.emit(Events.ERROR, Events.ERROR, {\n type: ErrorTypes.MUX_ERROR,\n details: ErrorDetails.REMUX_ALLOC_ERROR,\n fatal: false,\n error: err,\n bytes: mdatSize,\n reason: `fail allocating audio mdat ${mdatSize}`\n });\n return;\n }\n if (!rawMPEG) {\n const view = new DataView(mdat.buffer);\n view.setUint32(0, mdatSize);\n mdat.set(MP4.types.mdat, 4);\n }\n } else {\n // no audio samples\n return;\n }\n }\n mdat.set(unit, offset);\n const unitLen = unit.byteLength;\n offset += unitLen;\n // Default the sample's duration to the computed mp4SampleDuration, which will either be 1024 for AAC or 1152 for MPEG\n // In the case that we have 1 sample, this will be the duration. If we have more than one sample, the duration\n // becomes the PTS diff with the previous sample\n outputSamples.push(createMp4Sample(true, mp4SampleDuration, unitLen, 0));\n lastPTS = pts;\n }\n\n // We could end up with no audio samples if all input samples were overlapping with the previously remuxed ones\n const nbSamples = outputSamples.length;\n if (!nbSamples) {\n return;\n }\n\n // The next audio sample PTS should be equal to last sample PTS + duration\n const lastSample = outputSamples[outputSamples.length - 1];\n nextAudioTs = lastPTS - initTime;\n this.nextAudioTs = nextAudioTs + scaleFactor * lastSample.duration;\n\n // Set the track samples from inputSamples to outputSamples before remuxing\n const moof = rawMPEG ? new Uint8Array(0) : MP4.moof(track.sequenceNumber++, firstPTS / scaleFactor, _extends({}, track, {\n samples: outputSamples\n }));\n\n // Clear the track samples. This also clears the samples array in the demuxer, since the reference is shared\n track.samples = [];\n const start = (firstPTS - initTime) / inputTimeScale;\n const end = this.nextAudioTs / inputTimeScale;\n const type = 'audio';\n const audioData = {\n data1: moof,\n data2: mdat,\n startPTS: start,\n endPTS: end,\n startDTS: start,\n endDTS: end,\n type,\n hasAudio: true,\n hasVideo: false,\n nb: nbSamples\n };\n this.isAudioContiguous = true;\n return audioData;\n }\n}\nfunction normalizePts(value, reference) {\n let offset;\n if (reference === null) {\n return value;\n }\n if (reference < value) {\n // - 2^33\n offset = -8589934592;\n } else {\n // + 2^33\n offset = 8589934592;\n }\n /* PTS is 33bit (from 0 to 2^33 -1)\n if diff between value and reference is bigger than half of the amplitude (2^32) then it means that\n PTS looping occured. fill the gap */\n while (Math.abs(value - reference) > 4294967296) {\n value += offset;\n }\n return value;\n}\nfunction findKeyframeIndex(samples) {\n for (let i = 0; i < samples.length; i++) {\n if (samples[i].key) {\n return i;\n }\n }\n return -1;\n}\nfunction flushTextTrackMetadataCueSamples(track, timeOffset, initPTS, initDTS) {\n const length = track.samples.length;\n if (!length) {\n return;\n }\n const inputTimeScale = track.inputTimeScale;\n for (let index = 0; index < length; index++) {\n const sample = track.samples[index];\n // setting id3 pts, dts to relative time\n // using this._initPTS and this._initDTS to calculate relative time\n sample.pts = normalizePts(sample.pts - initPTS.baseTime * inputTimeScale / initPTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;\n sample.dts = normalizePts(sample.dts - initDTS.baseTime * inputTimeScale / initDTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;\n }\n const samples = track.samples;\n track.samples = [];\n return {\n samples\n };\n}\nfunction flushTextTrackUserdataCueSamples(track, timeOffset, initPTS) {\n const length = track.samples.length;\n if (!length) {\n return;\n }\n const inputTimeScale = track.inputTimeScale;\n for (let index = 0; index < length; index++) {\n const sample = track.samples[index];\n // setting text pts, dts to relative time\n // using this._initPTS and this._initDTS to calculate relative time\n sample.pts = normalizePts(sample.pts - initPTS.baseTime * inputTimeScale / initPTS.timescale, timeOffset * inputTimeScale) / inputTimeScale;\n }\n track.samples.sort((a, b) => a.pts - b.pts);\n const samples = track.samples;\n track.samples = [];\n return {\n samples\n };\n}\n\nclass PassThroughRemuxer extends Logger {\n constructor(observer, config, typeSupported, logger) {\n super('passthrough-remuxer', logger);\n this.emitInitSegment = false;\n this.audioCodec = void 0;\n this.videoCodec = void 0;\n this.initData = void 0;\n this.initPTS = null;\n this.initTracks = void 0;\n this.lastEndTime = null;\n this.isVideoContiguous = false;\n }\n destroy() {}\n resetTimeStamp(defaultInitPTS) {\n this.lastEndTime = null;\n const initPTS = this.initPTS;\n if (initPTS && defaultInitPTS) {\n if (initPTS.baseTime === defaultInitPTS.baseTime && initPTS.timescale === defaultInitPTS.timescale) {\n return;\n }\n }\n this.initPTS = defaultInitPTS;\n }\n resetNextTimestamp() {\n this.isVideoContiguous = false;\n this.lastEndTime = null;\n }\n resetInitSegment(initSegment, audioCodec, videoCodec, decryptdata) {\n this.audioCodec = audioCodec;\n this.videoCodec = videoCodec;\n this.generateInitSegment(initSegment, decryptdata);\n this.emitInitSegment = true;\n }\n generateInitSegment(initSegment, decryptdata) {\n let {\n audioCodec,\n videoCodec\n } = this;\n if (!(initSegment != null && initSegment.byteLength)) {\n this.initTracks = undefined;\n this.initData = undefined;\n return;\n }\n const {\n audio,\n video\n } = this.initData = parseInitSegment(initSegment);\n if (decryptdata) {\n patchEncyptionData(initSegment, decryptdata);\n } else {\n const eitherTrack = audio || video;\n if (eitherTrack != null && eitherTrack.encrypted) {\n this.warn(`Init segment with encrypted track with has no key (\"${eitherTrack.codec}\")!`);\n }\n }\n\n // Get codec from initSegment\n if (audio) {\n audioCodec = getParsedTrackCodec(audio, ElementaryStreamTypes.AUDIO, this);\n }\n if (video) {\n videoCodec = getParsedTrackCodec(video, ElementaryStreamTypes.VIDEO, this);\n }\n const tracks = {};\n if (audio && video) {\n tracks.audiovideo = {\n container: 'video/mp4',\n codec: audioCodec + ',' + videoCodec,\n supplemental: video.supplemental,\n encrypted: video.encrypted,\n initSegment,\n id: 'main'\n };\n } else if (audio) {\n tracks.audio = {\n container: 'audio/mp4',\n codec: audioCodec,\n encrypted: audio.encrypted,\n initSegment,\n id: 'audio'\n };\n } else if (video) {\n tracks.video = {\n container: 'video/mp4',\n codec: videoCodec,\n supplemental: video.supplemental,\n encrypted: video.encrypted,\n initSegment,\n id: 'main'\n };\n } else {\n this.warn('initSegment does not contain moov or trak boxes.');\n }\n this.initTracks = tracks;\n }\n remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, accurateTimeOffset) {\n var _initData, _initData2;\n let {\n initPTS,\n lastEndTime\n } = this;\n const result = {\n audio: undefined,\n video: undefined,\n text: textTrack,\n id3: id3Track,\n initSegment: undefined\n };\n\n // If we haven't yet set a lastEndDTS, or it was reset, set it to the provided timeOffset. We want to use the\n // lastEndDTS over timeOffset whenever possible; during progressive playback, the media source will not update\n // the media duration (which is what timeOffset is provided as) before we need to process the next chunk.\n if (!isFiniteNumber(lastEndTime)) {\n lastEndTime = this.lastEndTime = timeOffset || 0;\n }\n\n // The binary segment data is added to the videoTrack in the mp4demuxer. We don't check to see if the data is only\n // audio or video (or both); adding it to video was an arbitrary choice.\n const data = videoTrack.samples;\n if (!data.length) {\n return result;\n }\n const initSegment = {\n initPTS: undefined,\n timescale: undefined,\n trackId: undefined\n };\n let initData = this.initData;\n if (!((_initData = initData) != null && _initData.length)) {\n this.generateInitSegment(data);\n initData = this.initData;\n }\n if (!((_initData2 = initData) != null && _initData2.length)) {\n // We can't remux if the initSegment could not be generated\n this.warn('Failed to generate initSegment.');\n return result;\n }\n if (this.emitInitSegment) {\n initSegment.tracks = this.initTracks;\n this.emitInitSegment = false;\n }\n const trackSampleData = getSampleData(data, initData, this);\n const audioSampleTimestamps = initData.audio ? trackSampleData[initData.audio.id] : null;\n const videoSampleTimestamps = initData.video ? trackSampleData[initData.video.id] : null;\n const videoStartTime = toStartEndOrDefault(videoSampleTimestamps, Infinity);\n const audioStartTime = toStartEndOrDefault(audioSampleTimestamps, Infinity);\n const videoEndTime = toStartEndOrDefault(videoSampleTimestamps, 0, true);\n const audioEndTime = toStartEndOrDefault(audioSampleTimestamps, 0, true);\n let decodeTime = timeOffset;\n let duration = 0;\n const syncOnAudio = audioSampleTimestamps && (!videoSampleTimestamps || !initPTS && audioStartTime < videoStartTime || initPTS && initPTS.trackId === initData.audio.id);\n const baseOffsetSamples = syncOnAudio ? audioSampleTimestamps : videoSampleTimestamps;\n if (baseOffsetSamples) {\n const timescale = baseOffsetSamples.timescale;\n const baseTime = baseOffsetSamples.start - timeOffset * timescale;\n const trackId = syncOnAudio ? initData.audio.id : initData.video.id;\n decodeTime = baseOffsetSamples.start / timescale;\n duration = syncOnAudio ? audioEndTime - audioStartTime : videoEndTime - videoStartTime;\n if ((accurateTimeOffset || !initPTS) && (isInvalidInitPts(initPTS, decodeTime, timeOffset, duration) || timescale !== initPTS.timescale)) {\n if (initPTS) {\n this.warn(`Timestamps at playlist time: ${accurateTimeOffset ? '' : '~'}${timeOffset} ${baseTime / timescale} != initPTS: ${initPTS.baseTime / initPTS.timescale} (${initPTS.baseTime}/${initPTS.timescale}) trackId: ${initPTS.trackId}`);\n }\n this.log(`Found initPTS at playlist time: ${timeOffset} offset: ${decodeTime - timeOffset} (${baseTime}/${timescale}) trackId: ${trackId}`);\n initPTS = null;\n initSegment.initPTS = baseTime;\n initSegment.timescale = timescale;\n initSegment.trackId = trackId;\n }\n } else {\n this.warn(`No audio or video samples found for initPTS at playlist time: ${timeOffset}`);\n }\n if (!initPTS) {\n if (!initSegment.timescale || initSegment.trackId === undefined || initSegment.initPTS === undefined) {\n this.warn('Could not set initPTS');\n initSegment.initPTS = decodeTime;\n initSegment.timescale = 1;\n initSegment.trackId = -1;\n }\n this.initPTS = initPTS = {\n baseTime: initSegment.initPTS,\n timescale: initSegment.timescale,\n trackId: initSegment.trackId\n };\n } else {\n initSegment.initPTS = initPTS.baseTime;\n initSegment.timescale = initPTS.timescale;\n initSegment.trackId = initPTS.trackId;\n }\n const startTime = decodeTime - initPTS.baseTime / initPTS.timescale;\n const endTime = startTime + duration;\n if (duration > 0) {\n this.lastEndTime = endTime;\n } else {\n this.warn('Duration parsed from mp4 should be greater than zero');\n this.resetNextTimestamp();\n }\n const hasAudio = !!initData.audio;\n const hasVideo = !!initData.video;\n let type = '';\n if (hasAudio) {\n type += 'audio';\n }\n if (hasVideo) {\n type += 'video';\n }\n const encrypted = (initData.audio ? initData.audio.encrypted : false) || (initData.video ? initData.video.encrypted : false);\n const track = {\n data1: data,\n startPTS: startTime,\n startDTS: startTime,\n endPTS: endTime,\n endDTS: endTime,\n type,\n hasAudio,\n hasVideo,\n nb: 1,\n dropped: 0,\n encrypted\n };\n result.audio = hasAudio && !hasVideo ? track : undefined;\n result.video = hasVideo ? track : undefined;\n const videoSampleCount = videoSampleTimestamps == null ? void 0 : videoSampleTimestamps.sampleCount;\n if (videoSampleCount) {\n const firstKeyFrame = videoSampleTimestamps.keyFrameIndex;\n const independent = firstKeyFrame !== -1;\n track.nb = videoSampleCount;\n track.dropped = firstKeyFrame === 0 || this.isVideoContiguous ? 0 : independent ? firstKeyFrame : videoSampleCount;\n track.independent = independent;\n track.firstKeyFrame = firstKeyFrame;\n if (independent && videoSampleTimestamps.keyFrameStart) {\n track.firstKeyFramePTS = (videoSampleTimestamps.keyFrameStart - initPTS.baseTime) / initPTS.timescale;\n }\n if (!this.isVideoContiguous) {\n result.independent = independent;\n }\n this.isVideoContiguous || (this.isVideoContiguous = independent);\n if (track.dropped) {\n this.warn(`fmp4 does not start with IDR: firstIDR ${firstKeyFrame}/${videoSampleCount} dropped: ${track.dropped} start: ${track.firstKeyFramePTS || 'NA'}`);\n }\n }\n result.initSegment = initSegment;\n result.id3 = flushTextTrackMetadataCueSamples(id3Track, timeOffset, initPTS, initPTS);\n if (textTrack.samples.length) {\n result.text = flushTextTrackUserdataCueSamples(textTrack, timeOffset, initPTS);\n }\n return result;\n }\n}\nfunction toStartEndOrDefault(trackTimes, defaultValue, end = false) {\n return (trackTimes == null ? void 0 : trackTimes.start) !== undefined ? (trackTimes.start + (end ? trackTimes.duration : 0)) / trackTimes.timescale : defaultValue;\n}\nfunction isInvalidInitPts(initPTS, startDTS, timeOffset, duration) {\n if (initPTS === null) {\n return true;\n }\n // InitPTS is invalid when distance from program would be more than segment duration or a minimum of one second\n const minDuration = Math.max(duration, 1);\n const startTime = startDTS - initPTS.baseTime / initPTS.timescale;\n return Math.abs(startTime - timeOffset) > minDuration;\n}\nfunction getParsedTrackCodec(track, type, logger) {\n const parsedCodec = track.codec;\n if (parsedCodec && parsedCodec.length > 4) {\n return parsedCodec;\n }\n if (type === ElementaryStreamTypes.AUDIO) {\n if (parsedCodec === 'ec-3' || parsedCodec === 'ac-3' || parsedCodec === 'alac') {\n return parsedCodec;\n }\n if (parsedCodec === 'fLaC' || parsedCodec === 'Opus') {\n // Opting not to get `preferManagedMediaSource` from player config for isSupported() check for simplicity\n const preferManagedMediaSource = false;\n return getCodecCompatibleName(parsedCodec, preferManagedMediaSource);\n }\n logger.warn(`Unhandled audio codec \"${parsedCodec}\" in mp4 MAP`);\n return parsedCodec || 'mp4a';\n }\n // Provide defaults based on codec type\n // This allows for some playback of some fmp4 playlists without CODECS defined in manifest\n logger.warn(`Unhandled video codec \"${parsedCodec}\" in mp4 MAP`);\n return parsedCodec || 'avc1';\n}\n\nlet now;\n// performance.now() not available on WebWorker, at least on Safari Desktop\ntry {\n now = self.performance.now.bind(self.performance);\n} catch (err) {\n now = Date.now;\n}\nconst muxConfig = [{\n demux: MP4Demuxer,\n remux: PassThroughRemuxer\n}, {\n demux: TSDemuxer,\n remux: MP4Remuxer\n}, {\n demux: AACDemuxer,\n remux: MP4Remuxer\n}, {\n demux: MP3Demuxer,\n remux: MP4Remuxer\n}];\n{\n muxConfig.splice(2, 0, {\n demux: AC3Demuxer,\n remux: MP4Remuxer\n });\n}\nclass Transmuxer {\n constructor(observer, typeSupported, config, vendor, id, logger) {\n this.asyncResult = false;\n this.logger = void 0;\n this.observer = void 0;\n this.typeSupported = void 0;\n this.config = void 0;\n this.id = void 0;\n this.demuxer = void 0;\n this.remuxer = void 0;\n this.decrypter = void 0;\n this.probe = void 0;\n this.decryptionPromise = null;\n this.transmuxConfig = void 0;\n this.currentTransmuxState = void 0;\n this.observer = observer;\n this.typeSupported = typeSupported;\n this.config = config;\n this.id = id;\n this.logger = logger;\n }\n configure(transmuxConfig) {\n this.transmuxConfig = transmuxConfig;\n if (this.decrypter) {\n this.decrypter.reset();\n }\n }\n push(data, decryptdata, chunkMeta, state) {\n const stats = chunkMeta.transmuxing;\n stats.executeStart = now();\n let uintData = new Uint8Array(data);\n const {\n currentTransmuxState,\n transmuxConfig\n } = this;\n if (state) {\n this.currentTransmuxState = state;\n }\n const {\n contiguous,\n discontinuity,\n trackSwitch,\n accurateTimeOffset,\n timeOffset,\n initSegmentChange\n } = state || currentTransmuxState;\n const {\n audioCodec,\n videoCodec,\n defaultInitPts,\n duration,\n initSegmentData\n } = transmuxConfig;\n const keyData = getEncryptionType(uintData, decryptdata);\n if (keyData && isFullSegmentEncryption(keyData.method)) {\n const decrypter = this.getDecrypter();\n const aesMode = getAesModeFromFullSegmentMethod(keyData.method);\n\n // Software decryption is synchronous; webCrypto is not\n if (decrypter.isSync()) {\n // Software decryption is progressive. Progressive decryption may not return a result on each call. Any cached\n // data is handled in the flush() call\n let decryptedData = decrypter.softwareDecrypt(uintData, keyData.key.buffer, keyData.iv.buffer, aesMode);\n // For Low-Latency HLS Parts, decrypt in place, since part parsing is expected on push progress\n const loadingParts = chunkMeta.part > -1;\n if (loadingParts) {\n const _data = decrypter.flush();\n decryptedData = _data ? _data.buffer : _data;\n }\n if (!decryptedData) {\n stats.executeEnd = now();\n return emptyResult(chunkMeta);\n }\n uintData = new Uint8Array(decryptedData);\n } else {\n this.asyncResult = true;\n this.decryptionPromise = decrypter.webCryptoDecrypt(uintData, keyData.key.buffer, keyData.iv.buffer, aesMode).then(decryptedData => {\n // Calling push here is important; if flush() is called while this is still resolving, this ensures that\n // the decrypted data has been transmuxed\n const result = this.push(decryptedData, null, chunkMeta);\n this.decryptionPromise = null;\n return result;\n });\n return this.decryptionPromise;\n }\n }\n const resetMuxers = this.needsProbing(discontinuity, trackSwitch);\n if (resetMuxers) {\n const error = this.configureTransmuxer(uintData);\n if (error) {\n this.logger.warn(`[transmuxer] ${error.message}`);\n this.observer.emit(Events.ERROR, Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.FRAG_PARSING_ERROR,\n fatal: false,\n error,\n reason: error.message\n });\n stats.executeEnd = now();\n return emptyResult(chunkMeta);\n }\n }\n if (discontinuity || trackSwitch || initSegmentChange || resetMuxers) {\n this.resetInitSegment(initSegmentData, audioCodec, videoCodec, duration, decryptdata);\n }\n if (discontinuity || initSegmentChange || resetMuxers) {\n this.resetInitialTimestamp(defaultInitPts);\n }\n if (!contiguous) {\n this.resetContiguity();\n }\n const result = this.transmux(uintData, keyData, timeOffset, accurateTimeOffset, chunkMeta);\n this.asyncResult = isPromise(result);\n const currentState = this.currentTransmuxState;\n currentState.contiguous = true;\n currentState.discontinuity = false;\n currentState.trackSwitch = false;\n stats.executeEnd = now();\n return result;\n }\n\n // Due to data caching, flush calls can produce more than one TransmuxerResult (hence the Array type)\n flush(chunkMeta) {\n const stats = chunkMeta.transmuxing;\n stats.executeStart = now();\n const {\n decrypter,\n currentTransmuxState,\n decryptionPromise\n } = this;\n if (decryptionPromise) {\n this.asyncResult = true;\n // Upon resolution, the decryption promise calls push() and returns its TransmuxerResult up the stack. Therefore\n // only flushing is required for async decryption\n return decryptionPromise.then(() => {\n return this.flush(chunkMeta);\n });\n }\n const transmuxResults = [];\n const {\n timeOffset\n } = currentTransmuxState;\n if (decrypter) {\n // The decrypter may have data cached, which needs to be demuxed. In this case we'll have two TransmuxResults\n // This happens in the case that we receive only 1 push call for a segment (either for non-progressive downloads,\n // or for progressive downloads with small segments)\n const decryptedData = decrypter.flush();\n if (decryptedData) {\n // Push always returns a TransmuxerResult if decryptdata is null\n transmuxResults.push(this.push(decryptedData.buffer, null, chunkMeta));\n }\n }\n const {\n demuxer,\n remuxer\n } = this;\n if (!demuxer || !remuxer) {\n // If probing failed, then Hls.js has been given content its not able to handle\n stats.executeEnd = now();\n const emptyResults = [emptyResult(chunkMeta)];\n if (this.asyncResult) {\n return Promise.resolve(emptyResults);\n }\n return emptyResults;\n }\n const demuxResultOrPromise = demuxer.flush(timeOffset);\n if (isPromise(demuxResultOrPromise)) {\n this.asyncResult = true;\n // Decrypt final SAMPLE-AES samples\n return demuxResultOrPromise.then(demuxResult => {\n this.flushRemux(transmuxResults, demuxResult, chunkMeta);\n return transmuxResults;\n });\n }\n this.flushRemux(transmuxResults, demuxResultOrPromise, chunkMeta);\n if (this.asyncResult) {\n return Promise.resolve(transmuxResults);\n }\n return transmuxResults;\n }\n flushRemux(transmuxResults, demuxResult, chunkMeta) {\n const {\n audioTrack,\n videoTrack,\n id3Track,\n textTrack\n } = demuxResult;\n const {\n accurateTimeOffset,\n timeOffset\n } = this.currentTransmuxState;\n this.logger.log(`[transmuxer.ts]: Flushed ${this.id} sn: ${chunkMeta.sn}${chunkMeta.part > -1 ? ' part: ' + chunkMeta.part : ''} of ${this.id === PlaylistLevelType.MAIN ? 'level' : 'track'} ${chunkMeta.level}`);\n const remuxResult = this.remuxer.remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, accurateTimeOffset, true, this.id);\n transmuxResults.push({\n remuxResult,\n chunkMeta\n });\n chunkMeta.transmuxing.executeEnd = now();\n }\n resetInitialTimestamp(defaultInitPts) {\n const {\n demuxer,\n remuxer\n } = this;\n if (!demuxer || !remuxer) {\n return;\n }\n demuxer.resetTimeStamp(defaultInitPts);\n remuxer.resetTimeStamp(defaultInitPts);\n }\n resetContiguity() {\n const {\n demuxer,\n remuxer\n } = this;\n if (!demuxer || !remuxer) {\n return;\n }\n demuxer.resetContiguity();\n remuxer.resetNextTimestamp();\n }\n resetInitSegment(initSegmentData, audioCodec, videoCodec, trackDuration, decryptdata) {\n const {\n demuxer,\n remuxer\n } = this;\n if (!demuxer || !remuxer) {\n return;\n }\n demuxer.resetInitSegment(initSegmentData, audioCodec, videoCodec, trackDuration);\n remuxer.resetInitSegment(initSegmentData, audioCodec, videoCodec, decryptdata);\n }\n destroy() {\n if (this.demuxer) {\n this.demuxer.destroy();\n this.demuxer = undefined;\n }\n if (this.remuxer) {\n this.remuxer.destroy();\n this.remuxer = undefined;\n }\n }\n transmux(data, keyData, timeOffset, accurateTimeOffset, chunkMeta) {\n let result;\n if (keyData && keyData.method === 'SAMPLE-AES') {\n result = this.transmuxSampleAes(data, keyData, timeOffset, accurateTimeOffset, chunkMeta);\n } else {\n result = this.transmuxUnencrypted(data, timeOffset, accurateTimeOffset, chunkMeta);\n }\n return result;\n }\n transmuxUnencrypted(data, timeOffset, accurateTimeOffset, chunkMeta) {\n const {\n audioTrack,\n videoTrack,\n id3Track,\n textTrack\n } = this.demuxer.demux(data, timeOffset, false, !this.config.progressive);\n const remuxResult = this.remuxer.remux(audioTrack, videoTrack, id3Track, textTrack, timeOffset, accurateTimeOffset, false, this.id);\n return {\n remuxResult,\n chunkMeta\n };\n }\n transmuxSampleAes(data, decryptData, timeOffset, accurateTimeOffset, chunkMeta) {\n return this.demuxer.demuxSampleAes(data, decryptData, timeOffset).then(demuxResult => {\n const remuxResult = this.remuxer.remux(demuxResult.audioTrack, demuxResult.videoTrack, demuxResult.id3Track, demuxResult.textTrack, timeOffset, accurateTimeOffset, false, this.id);\n return {\n remuxResult,\n chunkMeta\n };\n });\n }\n configureTransmuxer(data) {\n const {\n config,\n observer,\n typeSupported\n } = this;\n // probe for content type\n let mux;\n for (let i = 0, len = muxConfig.length; i < len; i++) {\n var _muxConfig$i$demux;\n if ((_muxConfig$i$demux = muxConfig[i].demux) != null && _muxConfig$i$demux.probe(data, this.logger)) {\n mux = muxConfig[i];\n break;\n }\n }\n if (!mux) {\n return new Error('Failed to find demuxer by probing fragment data');\n }\n // so let's check that current remuxer and demuxer are still valid\n const demuxer = this.demuxer;\n const remuxer = this.remuxer;\n const Remuxer = mux.remux;\n const Demuxer = mux.demux;\n if (!remuxer || !(remuxer instanceof Remuxer)) {\n this.remuxer = new Remuxer(observer, config, typeSupported, this.logger);\n }\n if (!demuxer || !(demuxer instanceof Demuxer)) {\n this.demuxer = new Demuxer(observer, config, typeSupported, this.logger);\n this.probe = Demuxer.probe;\n }\n }\n needsProbing(discontinuity, trackSwitch) {\n // in case of continuity change, or track switch\n // we might switch from content type (AAC container to TS container, or TS to fmp4 for example)\n return !this.demuxer || !this.remuxer || discontinuity || trackSwitch;\n }\n getDecrypter() {\n let decrypter = this.decrypter;\n if (!decrypter) {\n decrypter = this.decrypter = new Decrypter(this.config);\n }\n return decrypter;\n }\n}\nfunction getEncryptionType(data, decryptData) {\n let encryptionType = null;\n if (data.byteLength > 0 && (decryptData == null ? void 0 : decryptData.key) != null && decryptData.iv !== null && decryptData.method != null) {\n encryptionType = decryptData;\n }\n return encryptionType;\n}\nconst emptyResult = chunkMeta => ({\n remuxResult: {},\n chunkMeta\n});\nfunction isPromise(p) {\n return 'then' in p && p.then instanceof Function;\n}\nclass TransmuxConfig {\n constructor(audioCodec, videoCodec, initSegmentData, duration, defaultInitPts) {\n this.audioCodec = void 0;\n this.videoCodec = void 0;\n this.initSegmentData = void 0;\n this.duration = void 0;\n this.defaultInitPts = void 0;\n this.audioCodec = audioCodec;\n this.videoCodec = videoCodec;\n this.initSegmentData = initSegmentData;\n this.duration = duration;\n this.defaultInitPts = defaultInitPts || null;\n }\n}\nclass TransmuxState {\n constructor(discontinuity, contiguous, accurateTimeOffset, trackSwitch, timeOffset, initSegmentChange) {\n this.discontinuity = void 0;\n this.contiguous = void 0;\n this.accurateTimeOffset = void 0;\n this.trackSwitch = void 0;\n this.timeOffset = void 0;\n this.initSegmentChange = void 0;\n this.discontinuity = discontinuity;\n this.contiguous = contiguous;\n this.accurateTimeOffset = accurateTimeOffset;\n this.trackSwitch = trackSwitch;\n this.timeOffset = timeOffset;\n this.initSegmentChange = initSegmentChange;\n }\n}\n\nlet transmuxerInstanceCount = 0;\nclass TransmuxerInterface {\n constructor(_hls, id, onTransmuxComplete, onFlush) {\n this.error = null;\n this.hls = void 0;\n this.id = void 0;\n this.instanceNo = transmuxerInstanceCount++;\n this.observer = void 0;\n this.frag = null;\n this.part = null;\n this.useWorker = void 0;\n this.workerContext = null;\n this.transmuxer = null;\n this.onTransmuxComplete = void 0;\n this.onFlush = void 0;\n this.onWorkerMessage = event => {\n const data = event.data;\n const hls = this.hls;\n if (!hls || !(data != null && data.event) || data.instanceNo !== this.instanceNo) {\n return;\n }\n switch (data.event) {\n case 'init':\n {\n var _this$workerContext;\n const objectURL = (_this$workerContext = this.workerContext) == null ? void 0 : _this$workerContext.objectURL;\n if (objectURL) {\n // revoke the Object URL that was used to create transmuxer worker, so as not to leak it\n self.URL.revokeObjectURL(objectURL);\n }\n break;\n }\n case 'transmuxComplete':\n {\n this.handleTransmuxComplete(data.data);\n break;\n }\n case 'flush':\n {\n this.onFlush(data.data);\n break;\n }\n\n // pass logs from the worker thread to the main logger\n case 'workerLog':\n {\n if (hls.logger[data.data.logType]) {\n hls.logger[data.data.logType](data.data.message);\n }\n break;\n }\n default:\n {\n data.data = data.data || {};\n data.data.frag = this.frag;\n data.data.part = this.part;\n data.data.id = this.id;\n hls.trigger(data.event, data.data);\n break;\n }\n }\n };\n this.onWorkerError = event => {\n if (!this.hls) {\n return;\n }\n const error = new Error(`${event.message} (${event.filename}:${event.lineno})`);\n this.hls.config.enableWorker = false;\n this.hls.logger.warn(`Error in \"${this.id}\" Web Worker, fallback to inline`);\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.INTERNAL_EXCEPTION,\n fatal: false,\n event: 'demuxerWorker',\n error\n });\n };\n const config = _hls.config;\n this.hls = _hls;\n this.id = id;\n this.useWorker = !!config.enableWorker;\n this.onTransmuxComplete = onTransmuxComplete;\n this.onFlush = onFlush;\n const forwardMessage = (ev, data) => {\n data = data || {};\n data.frag = this.frag || undefined;\n if (ev === Events.ERROR) {\n data = data;\n data.parent = this.id;\n data.part = this.part;\n this.error = data.error;\n }\n this.hls.trigger(ev, data);\n };\n\n // forward events to main thread\n this.observer = new EventEmitter();\n this.observer.on(Events.FRAG_DECRYPTED, forwardMessage);\n this.observer.on(Events.ERROR, forwardMessage);\n const m2tsTypeSupported = getM2TSSupportedAudioTypes(config.preferManagedMediaSource);\n if (this.useWorker && typeof Worker !== 'undefined') {\n const logger = this.hls.logger;\n const canCreateWorker = config.workerPath || hasUMDWorker();\n if (canCreateWorker) {\n try {\n if (config.workerPath) {\n logger.log(`loading Web Worker ${config.workerPath} for \"${id}\"`);\n this.workerContext = loadWorker(config.workerPath);\n } else {\n logger.log(`injecting Web Worker for \"${id}\"`);\n this.workerContext = injectWorker();\n }\n const {\n worker\n } = this.workerContext;\n worker.addEventListener('message', this.onWorkerMessage);\n worker.addEventListener('error', this.onWorkerError);\n worker.postMessage({\n instanceNo: this.instanceNo,\n cmd: 'init',\n typeSupported: m2tsTypeSupported,\n id,\n config: stringify(config)\n });\n } catch (err) {\n logger.warn(`Error setting up \"${id}\" Web Worker, fallback to inline`, err);\n this.terminateWorker();\n this.error = null;\n this.transmuxer = new Transmuxer(this.observer, m2tsTypeSupported, config, '', id, _hls.logger);\n }\n return;\n }\n }\n this.transmuxer = new Transmuxer(this.observer, m2tsTypeSupported, config, '', id, _hls.logger);\n }\n reset() {\n this.frag = null;\n this.part = null;\n if (this.workerContext) {\n const instanceNo = this.instanceNo;\n this.instanceNo = transmuxerInstanceCount++;\n const config = this.hls.config;\n const m2tsTypeSupported = getM2TSSupportedAudioTypes(config.preferManagedMediaSource);\n this.workerContext.worker.postMessage({\n instanceNo: this.instanceNo,\n cmd: 'reset',\n resetNo: instanceNo,\n typeSupported: m2tsTypeSupported,\n id: this.id,\n config: stringify(config)\n });\n }\n }\n terminateWorker() {\n if (this.workerContext) {\n const {\n worker\n } = this.workerContext;\n this.workerContext = null;\n worker.removeEventListener('message', this.onWorkerMessage);\n worker.removeEventListener('error', this.onWorkerError);\n removeWorkerFromStore(this.hls.config.workerPath);\n }\n }\n destroy() {\n if (this.workerContext) {\n this.terminateWorker();\n // @ts-ignore\n this.onWorkerMessage = this.onWorkerError = null;\n } else {\n const transmuxer = this.transmuxer;\n if (transmuxer) {\n transmuxer.destroy();\n this.transmuxer = null;\n }\n }\n const observer = this.observer;\n if (observer) {\n observer.removeAllListeners();\n }\n this.frag = null;\n this.part = null;\n // @ts-ignore\n this.observer = null;\n // @ts-ignore\n this.hls = null;\n }\n push(data, initSegmentData, audioCodec, videoCodec, frag, part, duration, accurateTimeOffset, chunkMeta, defaultInitPTS) {\n var _frag$initSegment, _lastFrag$initSegment;\n chunkMeta.transmuxing.start = self.performance.now();\n const {\n instanceNo,\n transmuxer\n } = this;\n const timeOffset = part ? part.start : frag.start;\n // TODO: push \"clear-lead\" decrypt data for unencrypted fragments in streams with encrypted ones\n const decryptdata = frag.decryptdata;\n const lastFrag = this.frag;\n const discontinuity = !(lastFrag && frag.cc === lastFrag.cc);\n const trackSwitch = !(lastFrag && chunkMeta.level === lastFrag.level);\n const snDiff = lastFrag ? chunkMeta.sn - lastFrag.sn : -1;\n const partDiff = this.part ? chunkMeta.part - this.part.index : -1;\n const progressive = snDiff === 0 && chunkMeta.id > 1 && chunkMeta.id === (lastFrag == null ? void 0 : lastFrag.stats.chunkCount);\n const contiguous = !trackSwitch && (snDiff === 1 || snDiff === 0 && (partDiff === 1 || progressive && partDiff <= 0));\n const now = self.performance.now();\n if (trackSwitch || snDiff || frag.stats.parsing.start === 0) {\n frag.stats.parsing.start = now;\n }\n if (part && (partDiff || !contiguous)) {\n part.stats.parsing.start = now;\n }\n const initSegmentChange = !(lastFrag && ((_frag$initSegment = frag.initSegment) == null ? void 0 : _frag$initSegment.url) === ((_lastFrag$initSegment = lastFrag.initSegment) == null ? void 0 : _lastFrag$initSegment.url));\n const state = new TransmuxState(discontinuity, contiguous, accurateTimeOffset, trackSwitch, timeOffset, initSegmentChange);\n if (!contiguous || discontinuity || initSegmentChange) {\n this.hls.logger.log(`[transmuxer-interface]: Starting new transmux session for ${frag.type} sn: ${chunkMeta.sn}${chunkMeta.part > -1 ? ' part: ' + chunkMeta.part : ''} ${this.id === PlaylistLevelType.MAIN ? 'level' : 'track'}: ${chunkMeta.level} id: ${chunkMeta.id}\n discontinuity: ${discontinuity}\n trackSwitch: ${trackSwitch}\n contiguous: ${contiguous}\n accurateTimeOffset: ${accurateTimeOffset}\n timeOffset: ${timeOffset}\n initSegmentChange: ${initSegmentChange}`);\n const config = new TransmuxConfig(audioCodec, videoCodec, initSegmentData, duration, defaultInitPTS);\n this.configureTransmuxer(config);\n }\n this.frag = frag;\n this.part = part;\n\n // Frags with sn of 'initSegment' are not transmuxed\n if (this.workerContext) {\n // post fragment payload as transferable objects for ArrayBuffer (no copy)\n this.workerContext.worker.postMessage({\n instanceNo,\n cmd: 'demux',\n data,\n decryptdata,\n chunkMeta,\n state\n }, data instanceof ArrayBuffer ? [data] : []);\n } else if (transmuxer) {\n const transmuxResult = transmuxer.push(data, decryptdata, chunkMeta, state);\n if (isPromise(transmuxResult)) {\n transmuxResult.then(data => {\n this.handleTransmuxComplete(data);\n }).catch(error => {\n this.transmuxerError(error, chunkMeta, 'transmuxer-interface push error');\n });\n } else {\n this.handleTransmuxComplete(transmuxResult);\n }\n }\n }\n flush(chunkMeta) {\n chunkMeta.transmuxing.start = self.performance.now();\n const {\n instanceNo,\n transmuxer\n } = this;\n if (this.workerContext) {\n this.workerContext.worker.postMessage({\n instanceNo,\n cmd: 'flush',\n chunkMeta\n });\n } else if (transmuxer) {\n const transmuxResult = transmuxer.flush(chunkMeta);\n if (isPromise(transmuxResult)) {\n transmuxResult.then(data => {\n this.handleFlushResult(data, chunkMeta);\n }).catch(error => {\n this.transmuxerError(error, chunkMeta, 'transmuxer-interface flush error');\n });\n } else {\n this.handleFlushResult(transmuxResult, chunkMeta);\n }\n }\n }\n transmuxerError(error, chunkMeta, reason) {\n if (!this.hls) {\n return;\n }\n this.error = error;\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.FRAG_PARSING_ERROR,\n chunkMeta,\n frag: this.frag || undefined,\n part: this.part || undefined,\n fatal: false,\n error,\n err: error,\n reason\n });\n }\n handleFlushResult(results, chunkMeta) {\n results.forEach(result => {\n this.handleTransmuxComplete(result);\n });\n this.onFlush(chunkMeta);\n }\n configureTransmuxer(config) {\n const {\n instanceNo,\n transmuxer\n } = this;\n if (this.workerContext) {\n this.workerContext.worker.postMessage({\n instanceNo,\n cmd: 'configure',\n config\n });\n } else if (transmuxer) {\n transmuxer.configure(config);\n }\n }\n handleTransmuxComplete(result) {\n result.chunkMeta.transmuxing.end = self.performance.now();\n this.onTransmuxComplete(result);\n }\n}\n\nconst TICK_INTERVAL$3 = 100; // how often to tick in ms\n\nclass AudioStreamController extends BaseStreamController {\n constructor(hls, fragmentTracker, keyLoader) {\n super(hls, fragmentTracker, keyLoader, 'audio-stream-controller', PlaylistLevelType.AUDIO);\n this.mainAnchor = null;\n this.mainFragLoading = null;\n this.audioOnly = false;\n this.bufferedTrack = null;\n this.switchingTrack = null;\n this.trackId = -1;\n this.waitingData = null;\n this.mainDetails = null;\n this.flushing = false;\n this.bufferFlushed = false;\n this.cachedTrackLoadedData = null;\n this.registerListeners();\n }\n onHandlerDestroying() {\n this.unregisterListeners();\n super.onHandlerDestroying();\n this.resetItem();\n }\n resetItem() {\n this.mainDetails = this.mainAnchor = this.mainFragLoading = this.bufferedTrack = this.switchingTrack = this.waitingData = this.cachedTrackLoadedData = null;\n }\n registerListeners() {\n super.registerListeners();\n const {\n hls\n } = this;\n hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n hls.on(Events.AUDIO_TRACKS_UPDATED, this.onAudioTracksUpdated, this);\n hls.on(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n hls.on(Events.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this);\n hls.on(Events.BUFFER_RESET, this.onBufferReset, this);\n hls.on(Events.BUFFER_CREATED, this.onBufferCreated, this);\n hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n hls.on(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n hls.on(Events.INIT_PTS_FOUND, this.onInitPtsFound, this);\n hls.on(Events.FRAG_LOADING, this.onFragLoading, this);\n hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n }\n unregisterListeners() {\n const {\n hls\n } = this;\n if (!hls) {\n return;\n }\n super.unregisterListeners();\n hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n hls.off(Events.AUDIO_TRACKS_UPDATED, this.onAudioTracksUpdated, this);\n hls.off(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n hls.off(Events.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this);\n hls.off(Events.BUFFER_RESET, this.onBufferReset, this);\n hls.off(Events.BUFFER_CREATED, this.onBufferCreated, this);\n hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n hls.off(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n hls.off(Events.INIT_PTS_FOUND, this.onInitPtsFound, this);\n hls.off(Events.FRAG_LOADING, this.onFragLoading, this);\n hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n }\n\n // INIT_PTS_FOUND is triggered when the video track parsed in the stream-controller has a new PTS value\n onInitPtsFound(event, {\n frag,\n id,\n initPTS,\n timescale,\n trackId\n }) {\n // Always update the new INIT PTS\n // Can change due level switch\n if (id === PlaylistLevelType.MAIN) {\n const cc = frag.cc;\n const inFlightFrag = this.fragCurrent;\n this.initPTS[cc] = {\n baseTime: initPTS,\n timescale,\n trackId\n };\n this.log(`InitPTS for cc: ${cc} found from main: ${initPTS / timescale} (${initPTS}/${timescale}) trackId: ${trackId}`);\n this.mainAnchor = frag;\n // If we are waiting, tick immediately to unblock audio fragment transmuxing\n if (this.state === State.WAITING_INIT_PTS) {\n const waitingData = this.waitingData;\n if (!waitingData && !this.loadingParts || waitingData && waitingData.frag.cc !== cc) {\n this.syncWithAnchor(frag, waitingData == null ? void 0 : waitingData.frag);\n }\n } else if (!this.hls.hasEnoughToStart && inFlightFrag && inFlightFrag.cc !== cc) {\n inFlightFrag.abortRequests();\n this.syncWithAnchor(frag, inFlightFrag);\n } else if (this.state === State.IDLE) {\n this.tick();\n }\n }\n }\n getLoadPosition() {\n if (!this.startFragRequested && this.nextLoadPosition >= 0) {\n return this.nextLoadPosition;\n }\n return super.getLoadPosition();\n }\n syncWithAnchor(mainAnchor, waitingToAppend) {\n var _this$mainFragLoading;\n // Drop waiting fragment if videoTrackCC has changed since waitingFragment was set and initPTS was not found\n const mainFragLoading = ((_this$mainFragLoading = this.mainFragLoading) == null ? void 0 : _this$mainFragLoading.frag) || null;\n if (waitingToAppend) {\n if ((mainFragLoading == null ? void 0 : mainFragLoading.cc) === waitingToAppend.cc) {\n // Wait for loading frag to complete and INIT_PTS_FOUND\n return;\n }\n }\n const targetDiscontinuity = (mainFragLoading || mainAnchor).cc;\n const trackDetails = this.getLevelDetails();\n const pos = this.getLoadPosition();\n const syncFrag = findNearestWithCC(trackDetails, targetDiscontinuity, pos);\n // Only stop waiting for audioFrag.cc if an audio segment of the same discontinuity domain (cc) is found\n if (syncFrag) {\n this.log(`Syncing with main frag at ${syncFrag.start} cc ${syncFrag.cc}`);\n this.startFragRequested = false;\n this.nextLoadPosition = syncFrag.start;\n this.resetLoadingState();\n if (this.state === State.IDLE) {\n this.doTickIdle();\n }\n }\n }\n startLoad(startPosition, skipSeekToStartPosition) {\n if (!this.levels) {\n this.startPosition = startPosition;\n this.state = State.STOPPED;\n return;\n }\n const lastCurrentTime = this.lastCurrentTime;\n this.stopLoad();\n this.setInterval(TICK_INTERVAL$3);\n if (lastCurrentTime > 0 && startPosition === -1) {\n this.log(`Override startPosition with lastCurrentTime @${lastCurrentTime.toFixed(3)}`);\n startPosition = lastCurrentTime;\n this.state = State.IDLE;\n } else {\n this.state = State.WAITING_TRACK;\n }\n this.nextLoadPosition = this.lastCurrentTime = startPosition + this.timelineOffset;\n this.startPosition = skipSeekToStartPosition ? -1 : startPosition;\n this.tick();\n }\n doTick() {\n switch (this.state) {\n case State.IDLE:\n this.doTickIdle();\n break;\n case State.WAITING_TRACK:\n {\n const {\n levels,\n trackId\n } = this;\n const currenTrack = levels == null ? void 0 : levels[trackId];\n const details = currenTrack == null ? void 0 : currenTrack.details;\n if (details && !this.waitForLive(currenTrack)) {\n if (this.waitForCdnTuneIn(details)) {\n break;\n }\n this.state = State.WAITING_INIT_PTS;\n }\n break;\n }\n case State.FRAG_LOADING_WAITING_RETRY:\n {\n this.checkRetryDate();\n break;\n }\n case State.WAITING_INIT_PTS:\n {\n // Ensure we don't get stuck in the WAITING_INIT_PTS state if the waiting frag CC doesn't match any initPTS\n const waitingData = this.waitingData;\n if (waitingData) {\n const {\n frag,\n part,\n cache,\n complete\n } = waitingData;\n const mainAnchor = this.mainAnchor;\n if (this.initPTS[frag.cc] !== undefined) {\n this.waitingData = null;\n this.state = State.FRAG_LOADING;\n const payload = cache.flush().buffer;\n const data = {\n frag,\n part,\n payload,\n networkDetails: null\n };\n this._handleFragmentLoadProgress(data);\n if (complete) {\n super._handleFragmentLoadComplete(data);\n }\n } else if (mainAnchor && mainAnchor.cc !== waitingData.frag.cc) {\n this.syncWithAnchor(mainAnchor, waitingData.frag);\n }\n } else {\n this.state = State.IDLE;\n }\n }\n }\n this.onTickEnd();\n }\n resetLoadingState() {\n const waitingData = this.waitingData;\n if (waitingData) {\n this.fragmentTracker.removeFragment(waitingData.frag);\n this.waitingData = null;\n }\n super.resetLoadingState();\n }\n onTickEnd() {\n const {\n media\n } = this;\n if (!(media != null && media.readyState)) {\n // Exit early if we don't have media or if the media hasn't buffered anything yet (readyState 0)\n return;\n }\n this.lastCurrentTime = media.currentTime;\n }\n doTickIdle() {\n var _this$mainFragLoading2;\n const {\n hls,\n levels,\n media,\n trackId\n } = this;\n const config = hls.config;\n\n // 1. if buffering is suspended\n // 2. if video not attached AND\n // start fragment already requested OR start frag prefetch not enabled\n // 3. if tracks or track not loaded and selected\n // then exit loop\n // => if media not attached but start frag prefetch is enabled and start frag not requested yet, we will not exit loop\n if (!this.buffering || !media && !this.primaryPrefetch && (this.startFragRequested || !config.startFragPrefetch) || !(levels != null && levels[trackId])) {\n return;\n }\n const levelInfo = levels[trackId];\n const trackDetails = levelInfo.details;\n if (!trackDetails || this.waitForLive(levelInfo) || this.waitForCdnTuneIn(trackDetails)) {\n this.state = State.WAITING_TRACK;\n this.startFragRequested = false;\n return;\n }\n const bufferable = this.mediaBuffer ? this.mediaBuffer : this.media;\n if (this.bufferFlushed && bufferable) {\n this.bufferFlushed = false;\n this.afterBufferFlushed(bufferable, ElementaryStreamTypes.AUDIO, PlaylistLevelType.AUDIO);\n }\n const bufferInfo = this.getFwdBufferInfo(bufferable, PlaylistLevelType.AUDIO);\n if (bufferInfo === null) {\n return;\n }\n if (!this.switchingTrack && this._streamEnded(bufferInfo, trackDetails)) {\n hls.trigger(Events.BUFFER_EOS, {\n type: 'audio'\n });\n this.state = State.ENDED;\n return;\n }\n const bufferLen = bufferInfo.len;\n const maxBufLen = hls.maxBufferLength;\n const fragments = trackDetails.fragments;\n const start = fragments[0].start;\n const loadPosition = this.getLoadPosition();\n const targetBufferTime = this.flushing ? loadPosition : bufferInfo.end;\n if (this.switchingTrack && media) {\n const pos = loadPosition;\n // if currentTime (pos) is less than alt audio playlist start time, it means that alt audio is ahead of currentTime\n if (trackDetails.PTSKnown && pos < start) {\n // if everything is buffered from pos to start or if audio buffer upfront, let's seek to start\n if (bufferInfo.end > start || bufferInfo.nextStart) {\n this.log('Alt audio track ahead of main track, seek to start of alt audio track');\n media.currentTime = start + 0.05;\n }\n }\n }\n\n // if buffer length is less than maxBufLen, or near the end, find a fragment to load\n if (bufferLen >= maxBufLen && !this.switchingTrack && targetBufferTime < fragments[fragments.length - 1].start) {\n return;\n }\n let frag = this.getNextFragment(targetBufferTime, trackDetails);\n // Avoid loop loading by using nextLoadPosition set for backtracking and skipping consecutive GAP tags\n if (frag && this.isLoopLoading(frag, targetBufferTime)) {\n frag = this.getNextFragmentLoopLoading(frag, trackDetails, bufferInfo, PlaylistLevelType.MAIN, maxBufLen);\n }\n if (!frag) {\n this.bufferFlushed = true;\n return;\n }\n if (this.exceedsMaxBuffer(bufferInfo, maxBufLen, frag)) {\n return;\n }\n\n // Request audio segments up to one fragment ahead of main stream-controller\n let mainFragLoading = ((_this$mainFragLoading2 = this.mainFragLoading) == null ? void 0 : _this$mainFragLoading2.frag) || null;\n if (!this.audioOnly && this.startFragRequested && mainFragLoading && isMediaFragment(frag) && !frag.endList && (!trackDetails.live || !this.loadingParts && targetBufferTime < this.hls.liveSyncPosition)) {\n if (this.fragmentTracker.getState(mainFragLoading) === FragmentState.OK) {\n this.mainFragLoading = mainFragLoading = null;\n }\n if (mainFragLoading && isMediaFragment(mainFragLoading)) {\n if (frag.start > mainFragLoading.end) {\n // Get buffered frag at target position from tracker (loaded out of sequence)\n const mainFragAtPos = this.fragmentTracker.getFragAtPos(targetBufferTime, PlaylistLevelType.MAIN);\n if (mainFragAtPos && mainFragAtPos.end > mainFragLoading.end) {\n mainFragLoading = mainFragAtPos;\n this.mainFragLoading = {\n frag: mainFragAtPos,\n targetBufferTime: null\n };\n }\n }\n const atBufferSyncLimit = frag.start > mainFragLoading.end;\n if (atBufferSyncLimit) {\n return;\n }\n }\n }\n this.loadFragment(frag, levelInfo, targetBufferTime);\n }\n onMediaDetaching(event, data) {\n this.bufferFlushed = this.flushing = false;\n super.onMediaDetaching(event, data);\n }\n onAudioTracksUpdated(event, {\n audioTracks\n }) {\n // Reset tranxmuxer is essential for large context switches (Content Steering)\n this.resetTransmuxer();\n this.levels = audioTracks.map(mediaPlaylist => new Level(mediaPlaylist));\n }\n onAudioTrackSwitching(event, data) {\n // if any URL found on new audio track, it is an alternate audio track\n const altAudio = !!data.url;\n this.trackId = data.id;\n const {\n fragCurrent\n } = this;\n if (fragCurrent) {\n fragCurrent.abortRequests();\n this.removeUnbufferedFrags(fragCurrent.start);\n }\n this.resetLoadingState();\n\n // should we switch tracks ?\n if (altAudio) {\n this.switchingTrack = data;\n // main audio track are handled by stream-controller, just do something if switching to alt audio track\n this.flushAudioIfNeeded(data);\n if (this.state !== State.STOPPED) {\n // switching to audio track, start timer if not already started\n this.setInterval(TICK_INTERVAL$3);\n this.state = State.IDLE;\n this.tick();\n }\n } else {\n // destroy useless transmuxer when switching audio to main\n this.resetTransmuxer();\n this.switchingTrack = null;\n this.bufferedTrack = data;\n this.clearInterval();\n }\n }\n onManifestLoading() {\n super.onManifestLoading();\n this.bufferFlushed = this.flushing = this.audioOnly = false;\n this.resetItem();\n this.trackId = -1;\n }\n onLevelLoaded(event, data) {\n this.mainDetails = data.details;\n const cachedTrackLoadedData = this.cachedTrackLoadedData;\n if (cachedTrackLoadedData) {\n this.cachedTrackLoadedData = null;\n this.onAudioTrackLoaded(Events.AUDIO_TRACK_LOADED, cachedTrackLoadedData);\n }\n }\n onAudioTrackLoaded(event, data) {\n var _trackLevel$details;\n const {\n levels\n } = this;\n const {\n details: newDetails,\n id: trackId,\n groupId,\n track\n } = data;\n if (!levels) {\n this.warn(`Audio tracks reset while loading track ${trackId} \"${track.name}\" of \"${groupId}\"`);\n return;\n }\n const mainDetails = this.mainDetails;\n if (!mainDetails || newDetails.endCC > mainDetails.endCC || mainDetails.expired) {\n this.cachedTrackLoadedData = data;\n if (this.state !== State.STOPPED) {\n this.state = State.WAITING_TRACK;\n }\n return;\n }\n this.cachedTrackLoadedData = null;\n this.log(`Audio track ${trackId} \"${track.name}\" of \"${groupId}\" loaded [${newDetails.startSN},${newDetails.endSN}]${newDetails.lastPartSn ? `[part-${newDetails.lastPartSn}-${newDetails.lastPartIndex}]` : ''},duration:${newDetails.totalduration}`);\n const trackLevel = levels[trackId];\n let sliding = 0;\n if (newDetails.live || (_trackLevel$details = trackLevel.details) != null && _trackLevel$details.live) {\n this.checkLiveUpdate(newDetails);\n if (newDetails.deltaUpdateFailed) {\n return;\n }\n if (trackLevel.details) {\n var _this$levelLastLoaded;\n sliding = this.alignPlaylists(newDetails, trackLevel.details, (_this$levelLastLoaded = this.levelLastLoaded) == null ? void 0 : _this$levelLastLoaded.details);\n }\n if (!newDetails.alignedSliding) {\n // Align audio rendition with the \"main\" playlist on discontinuity change\n // or program-date-time (PDT)\n alignDiscontinuities(newDetails, mainDetails);\n if (!newDetails.alignedSliding) {\n alignMediaPlaylistByPDT(newDetails, mainDetails);\n }\n sliding = newDetails.fragmentStart;\n }\n }\n trackLevel.details = newDetails;\n this.levelLastLoaded = trackLevel;\n\n // compute start position if we are aligned with the main playlist\n if (!this.startFragRequested) {\n this.setStartPosition(mainDetails, sliding);\n }\n this.hls.trigger(Events.AUDIO_TRACK_UPDATED, {\n details: newDetails,\n id: trackId,\n groupId: data.groupId\n });\n\n // only switch back to IDLE state if we were waiting for track to start downloading a new fragment\n if (this.state === State.WAITING_TRACK && !this.waitForCdnTuneIn(newDetails)) {\n this.state = State.IDLE;\n }\n\n // trigger handler right now\n this.tick();\n }\n _handleFragmentLoadProgress(data) {\n var _frag$initSegment;\n const frag = data.frag;\n const {\n part,\n payload\n } = data;\n const {\n config,\n trackId,\n levels\n } = this;\n if (!levels) {\n this.warn(`Audio tracks were reset while fragment load was in progress. Fragment ${frag.sn} of level ${frag.level} will not be buffered`);\n return;\n }\n const track = levels[trackId];\n if (!track) {\n this.warn('Audio track is undefined on fragment load progress');\n return;\n }\n const details = track.details;\n if (!details) {\n this.warn('Audio track details undefined on fragment load progress');\n this.removeUnbufferedFrags(frag.start);\n return;\n }\n const audioCodec = config.defaultAudioCodec || track.audioCodec || 'mp4a.40.2';\n let transmuxer = this.transmuxer;\n if (!transmuxer) {\n transmuxer = this.transmuxer = new TransmuxerInterface(this.hls, PlaylistLevelType.AUDIO, this._handleTransmuxComplete.bind(this), this._handleTransmuxerFlush.bind(this));\n }\n\n // Check if we have video initPTS\n // If not we need to wait for it\n const initPTS = this.initPTS[frag.cc];\n const initSegmentData = (_frag$initSegment = frag.initSegment) == null ? void 0 : _frag$initSegment.data;\n if (initPTS !== undefined) {\n // this.log(`Transmuxing ${sn} of [${details.startSN} ,${details.endSN}],track ${trackId}`);\n // time Offset is accurate if level PTS is known, or if playlist is not sliding (not live)\n const accurateTimeOffset = false; // details.PTSKnown || !details.live;\n const partIndex = part ? part.index : -1;\n const partial = partIndex !== -1;\n const chunkMeta = new ChunkMetadata(frag.level, frag.sn, frag.stats.chunkCount, payload.byteLength, partIndex, partial);\n transmuxer.push(payload, initSegmentData, audioCodec, '', frag, part, details.totalduration, accurateTimeOffset, chunkMeta, initPTS);\n } else {\n this.log(`Unknown video PTS for cc ${frag.cc}, waiting for video PTS before demuxing audio frag ${frag.sn} of [${details.startSN} ,${details.endSN}],track ${trackId}`);\n const {\n cache\n } = this.waitingData = this.waitingData || {\n frag,\n part,\n cache: new ChunkCache(),\n complete: false\n };\n cache.push(new Uint8Array(payload));\n if (this.state !== State.STOPPED) {\n this.state = State.WAITING_INIT_PTS;\n }\n }\n }\n _handleFragmentLoadComplete(fragLoadedData) {\n if (this.waitingData) {\n this.waitingData.complete = true;\n return;\n }\n super._handleFragmentLoadComplete(fragLoadedData);\n }\n onBufferReset(/* event: Events.BUFFER_RESET */\n ) {\n // reset reference to sourcebuffers\n this.mediaBuffer = null;\n }\n onBufferCreated(event, data) {\n this.bufferFlushed = this.flushing = false;\n const audioTrack = data.tracks.audio;\n if (audioTrack) {\n this.mediaBuffer = audioTrack.buffer || null;\n }\n }\n onFragLoading(event, data) {\n if (!this.audioOnly && data.frag.type === PlaylistLevelType.MAIN && isMediaFragment(data.frag)) {\n this.mainFragLoading = data;\n if (this.state === State.IDLE) {\n this.tick();\n }\n }\n }\n onFragBuffered(event, data) {\n const {\n frag,\n part\n } = data;\n if (frag.type !== PlaylistLevelType.AUDIO) {\n if (!this.audioOnly && frag.type === PlaylistLevelType.MAIN && !frag.elementaryStreams.video && !frag.elementaryStreams.audiovideo) {\n this.audioOnly = true;\n this.mainFragLoading = null;\n }\n return;\n }\n if (this.fragContextChanged(frag)) {\n // If a level switch was requested while a fragment was buffering, it will emit the FRAG_BUFFERED event upon completion\n // Avoid setting state back to IDLE or concluding the audio switch; otherwise, the switched-to track will not buffer\n this.warn(`Fragment ${frag.sn}${part ? ' p: ' + part.index : ''} of level ${frag.level} finished buffering, but was aborted. state: ${this.state}, audioSwitch: ${this.switchingTrack ? this.switchingTrack.name : 'false'}`);\n return;\n }\n if (isMediaFragment(frag)) {\n this.fragPrevious = frag;\n const track = this.switchingTrack;\n if (track) {\n this.bufferedTrack = track;\n this.switchingTrack = null;\n this.hls.trigger(Events.AUDIO_TRACK_SWITCHED, _objectSpread2({}, track));\n }\n }\n this.fragBufferedComplete(frag, part);\n if (this.media) {\n this.tick();\n }\n }\n onError(event, data) {\n var _data$context;\n if (data.fatal) {\n this.state = State.ERROR;\n return;\n }\n switch (data.details) {\n case ErrorDetails.FRAG_GAP:\n case ErrorDetails.FRAG_PARSING_ERROR:\n case ErrorDetails.FRAG_DECRYPT_ERROR:\n case ErrorDetails.FRAG_LOAD_ERROR:\n case ErrorDetails.FRAG_LOAD_TIMEOUT:\n case ErrorDetails.KEY_LOAD_ERROR:\n case ErrorDetails.KEY_LOAD_TIMEOUT:\n this.onFragmentOrKeyLoadError(PlaylistLevelType.AUDIO, data);\n break;\n case ErrorDetails.AUDIO_TRACK_LOAD_ERROR:\n case ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT:\n case ErrorDetails.LEVEL_PARSING_ERROR:\n // in case of non fatal error while loading track, if not retrying to load track, switch back to IDLE\n if (!data.levelRetry && this.state === State.WAITING_TRACK && ((_data$context = data.context) == null ? void 0 : _data$context.type) === PlaylistContextType.AUDIO_TRACK) {\n this.state = State.IDLE;\n }\n break;\n case ErrorDetails.BUFFER_ADD_CODEC_ERROR:\n case ErrorDetails.BUFFER_APPEND_ERROR:\n if (data.parent !== 'audio') {\n return;\n }\n if (!this.reduceLengthAndFlushBuffer(data)) {\n this.resetLoadingState();\n }\n break;\n case ErrorDetails.BUFFER_FULL_ERROR:\n if (data.parent !== 'audio') {\n return;\n }\n if (this.reduceLengthAndFlushBuffer(data)) {\n this.bufferedTrack = null;\n super.flushMainBuffer(0, Number.POSITIVE_INFINITY, 'audio');\n }\n break;\n case ErrorDetails.INTERNAL_EXCEPTION:\n this.recoverWorkerError(data);\n break;\n }\n }\n onBufferFlushing(event, {\n type\n }) {\n if (type !== ElementaryStreamTypes.VIDEO) {\n this.flushing = true;\n }\n }\n onBufferFlushed(event, {\n type\n }) {\n if (type !== ElementaryStreamTypes.VIDEO) {\n this.flushing = false;\n this.bufferFlushed = true;\n if (this.state === State.ENDED) {\n this.state = State.IDLE;\n }\n const mediaBuffer = this.mediaBuffer || this.media;\n if (mediaBuffer) {\n this.afterBufferFlushed(mediaBuffer, type, PlaylistLevelType.AUDIO);\n this.tick();\n }\n }\n }\n _handleTransmuxComplete(transmuxResult) {\n var _id3$samples;\n const id = 'audio';\n const {\n hls\n } = this;\n const {\n remuxResult,\n chunkMeta\n } = transmuxResult;\n const context = this.getCurrentContext(chunkMeta);\n if (!context) {\n this.resetWhenMissingContext(chunkMeta);\n return;\n }\n const {\n frag,\n part,\n level\n } = context;\n const {\n details\n } = level;\n const {\n audio,\n text,\n id3,\n initSegment\n } = remuxResult;\n\n // Check if the current fragment has been aborted. We check this by first seeing if we're still playing the current level.\n // If we are, subsequently check if the currently loading fragment (fragCurrent) has changed.\n if (this.fragContextChanged(frag) || !details) {\n this.fragmentTracker.removeFragment(frag);\n return;\n }\n this.state = State.PARSING;\n if (this.switchingTrack && audio) {\n this.completeAudioSwitch(this.switchingTrack);\n }\n if (initSegment != null && initSegment.tracks) {\n const mapFragment = frag.initSegment || frag;\n if (this.unhandledEncryptionError(initSegment, frag)) {\n return;\n }\n this._bufferInitSegment(level, initSegment.tracks, mapFragment, chunkMeta);\n hls.trigger(Events.FRAG_PARSING_INIT_SEGMENT, {\n frag: mapFragment,\n id,\n tracks: initSegment.tracks\n });\n // Only flush audio from old audio tracks when PTS is known on new audio track\n }\n if (audio) {\n const {\n startPTS,\n endPTS,\n startDTS,\n endDTS\n } = audio;\n if (part) {\n part.elementaryStreams[ElementaryStreamTypes.AUDIO] = {\n startPTS,\n endPTS,\n startDTS,\n endDTS\n };\n }\n frag.setElementaryStreamInfo(ElementaryStreamTypes.AUDIO, startPTS, endPTS, startDTS, endDTS);\n this.bufferFragmentData(audio, frag, part, chunkMeta);\n }\n if (id3 != null && (_id3$samples = id3.samples) != null && _id3$samples.length) {\n const emittedID3 = _extends({\n id,\n frag,\n details\n }, id3);\n hls.trigger(Events.FRAG_PARSING_METADATA, emittedID3);\n }\n if (text) {\n const emittedText = _extends({\n id,\n frag,\n details\n }, text);\n hls.trigger(Events.FRAG_PARSING_USERDATA, emittedText);\n }\n }\n _bufferInitSegment(currentLevel, tracks, frag, chunkMeta) {\n if (this.state !== State.PARSING) {\n return;\n }\n // delete any video track found on audio transmuxer\n if (tracks.video) {\n delete tracks.video;\n }\n if (tracks.audiovideo) {\n delete tracks.audiovideo;\n }\n\n // include levelCodec in audio and video tracks\n if (!tracks.audio) {\n return;\n }\n const track = tracks.audio;\n track.id = PlaylistLevelType.AUDIO;\n const variantAudioCodecs = currentLevel.audioCodec;\n this.log(`Init audio buffer, container:${track.container}, codecs[level/parsed]=[${variantAudioCodecs}/${track.codec}]`);\n // SourceBuffer will use track.levelCodec if defined\n if (variantAudioCodecs && variantAudioCodecs.split(',').length === 1) {\n track.levelCodec = variantAudioCodecs;\n }\n this.hls.trigger(Events.BUFFER_CODECS, tracks);\n const initSegment = track.initSegment;\n if (initSegment != null && initSegment.byteLength) {\n const segment = {\n type: 'audio',\n frag,\n part: null,\n chunkMeta,\n parent: frag.type,\n data: initSegment\n };\n this.hls.trigger(Events.BUFFER_APPENDING, segment);\n }\n // trigger handler right now\n this.tickImmediate();\n }\n loadFragment(frag, track, targetBufferTime) {\n // only load if fragment is not loaded or if in audio switch\n const fragState = this.fragmentTracker.getState(frag);\n\n // we force a frag loading in audio switch as fragment tracker might not have evicted previous frags in case of quick audio switch\n if (this.switchingTrack || fragState === FragmentState.NOT_LOADED || fragState === FragmentState.PARTIAL) {\n var _track$details;\n if (!isMediaFragment(frag)) {\n this._loadInitSegment(frag, track);\n } else if ((_track$details = track.details) != null && _track$details.live && !this.initPTS[frag.cc]) {\n this.log(`Waiting for video PTS in continuity counter ${frag.cc} of live stream before loading audio fragment ${frag.sn} of level ${this.trackId}`);\n this.state = State.WAITING_INIT_PTS;\n const mainDetails = this.mainDetails;\n if (mainDetails && mainDetails.fragmentStart !== track.details.fragmentStart) {\n alignMediaPlaylistByPDT(track.details, mainDetails);\n }\n } else {\n super.loadFragment(frag, track, targetBufferTime);\n }\n } else {\n this.clearTrackerIfNeeded(frag);\n }\n }\n flushAudioIfNeeded(switchingTrack) {\n if (this.media && this.bufferedTrack) {\n const {\n name,\n lang,\n assocLang,\n characteristics,\n audioCodec,\n channels\n } = this.bufferedTrack;\n if (!matchesOption({\n name,\n lang,\n assocLang,\n characteristics,\n audioCodec,\n channels\n }, switchingTrack, audioMatchPredicate)) {\n if (useAlternateAudio(switchingTrack.url, this.hls)) {\n this.log('Switching audio track : flushing all audio');\n super.flushMainBuffer(0, Number.POSITIVE_INFINITY, 'audio');\n this.bufferedTrack = null;\n } else {\n // Main is being buffered. Set bufferedTrack so that it is flushed when switching back to alt-audio\n this.bufferedTrack = switchingTrack;\n }\n }\n }\n }\n completeAudioSwitch(switchingTrack) {\n const {\n hls\n } = this;\n this.flushAudioIfNeeded(switchingTrack);\n this.bufferedTrack = switchingTrack;\n this.switchingTrack = null;\n hls.trigger(Events.AUDIO_TRACK_SWITCHED, _objectSpread2({}, switchingTrack));\n }\n}\n\nclass BasePlaylistController extends Logger {\n constructor(hls, logPrefix) {\n super(logPrefix, hls.logger);\n this.hls = void 0;\n this.canLoad = false;\n this.timer = -1;\n this.hls = hls;\n }\n destroy() {\n this.clearTimer();\n // @ts-ignore\n this.hls = this.log = this.warn = null;\n }\n clearTimer() {\n if (this.timer !== -1) {\n self.clearTimeout(this.timer);\n this.timer = -1;\n }\n }\n startLoad() {\n this.canLoad = true;\n this.loadPlaylist();\n }\n stopLoad() {\n this.canLoad = false;\n this.clearTimer();\n }\n switchParams(playlistUri, previous, current) {\n const renditionReports = previous == null ? void 0 : previous.renditionReports;\n if (renditionReports) {\n let foundIndex = -1;\n for (let i = 0; i < renditionReports.length; i++) {\n const attr = renditionReports[i];\n let uri;\n try {\n uri = new self.URL(attr.URI, previous.url).href;\n } catch (error) {\n this.warn(`Could not construct new URL for Rendition Report: ${error}`);\n uri = attr.URI || '';\n }\n // Use exact match. Otherwise, the last partial match, if any, will be used\n // (Playlist URI includes a query string that the Rendition Report does not)\n if (uri === playlistUri) {\n foundIndex = i;\n break;\n } else if (uri === playlistUri.substring(0, uri.length)) {\n foundIndex = i;\n }\n }\n if (foundIndex !== -1) {\n const attr = renditionReports[foundIndex];\n const msn = parseInt(attr['LAST-MSN']) || previous.lastPartSn;\n let part = parseInt(attr['LAST-PART']) || previous.lastPartIndex;\n if (this.hls.config.lowLatencyMode) {\n const currentGoal = Math.min(previous.age - previous.partTarget, previous.targetduration);\n if (part >= 0 && currentGoal > previous.partTarget) {\n part += 1;\n }\n }\n const skip = current && getSkipValue(current);\n return new HlsUrlParameters(msn, part >= 0 ? part : undefined, skip);\n }\n }\n }\n loadPlaylist(hlsUrlParameters) {\n // Loading is handled by the subclasses\n this.clearTimer();\n }\n loadingPlaylist(playlist, hlsUrlParameters) {\n // Loading is handled by the subclasses\n this.clearTimer();\n }\n shouldLoadPlaylist(playlist) {\n return this.canLoad && !!playlist && !!playlist.url && (!playlist.details || playlist.details.live);\n }\n getUrlWithDirectives(uri, hlsUrlParameters) {\n if (hlsUrlParameters) {\n try {\n return hlsUrlParameters.addDirectives(uri);\n } catch (error) {\n this.warn(`Could not construct new URL with HLS Delivery Directives: ${error}`);\n }\n }\n return uri;\n }\n playlistLoaded(index, data, previousDetails) {\n const {\n details,\n stats\n } = data;\n\n // Set last updated date-time\n const now = self.performance.now();\n const elapsed = stats.loading.first ? Math.max(0, now - stats.loading.first) : 0;\n details.advancedDateTime = Date.now() - elapsed;\n\n // shift fragment starts with timelineOffset\n const timelineOffset = this.hls.config.timelineOffset;\n if (timelineOffset !== details.appliedTimelineOffset) {\n const offset = Math.max(timelineOffset || 0, 0);\n details.appliedTimelineOffset = offset;\n details.fragments.forEach(frag => {\n frag.setStart(frag.playlistOffset + offset);\n });\n }\n\n // if current playlist is a live playlist, arm a timer to reload it\n if (details.live || previousDetails != null && previousDetails.live) {\n const levelOrTrack = 'levelInfo' in data ? data.levelInfo : data.track;\n details.reloaded(previousDetails);\n // Merge live playlists to adjust fragment starts and fill in delta playlist skipped segments\n if (previousDetails && details.fragments.length > 0) {\n mergeDetails(previousDetails, details, this);\n const error = details.playlistParsingError;\n if (error) {\n this.warn(error);\n const hls = this.hls;\n if (!hls.config.ignorePlaylistParsingErrors) {\n var _details$fragments$;\n const {\n networkDetails\n } = data;\n hls.trigger(Events.ERROR, {\n type: ErrorTypes.NETWORK_ERROR,\n details: ErrorDetails.LEVEL_PARSING_ERROR,\n fatal: false,\n url: details.url,\n error,\n reason: error.message,\n level: data.level || undefined,\n parent: (_details$fragments$ = details.fragments[0]) == null ? void 0 : _details$fragments$.type,\n networkDetails,\n stats\n });\n return;\n }\n details.playlistParsingError = null;\n }\n }\n if (details.requestScheduled === -1) {\n details.requestScheduled = stats.loading.start;\n }\n const bufferInfo = this.hls.mainForwardBufferInfo;\n const position = bufferInfo ? bufferInfo.end - bufferInfo.len : 0;\n const distanceToLiveEdgeMs = (details.edge - position) * 1000;\n const reloadInterval = computeReloadInterval(details, distanceToLiveEdgeMs);\n if (details.requestScheduled + reloadInterval < now) {\n details.requestScheduled = now;\n } else {\n details.requestScheduled += reloadInterval;\n }\n this.log(`live playlist ${index} ${details.advanced ? 'REFRESHED ' + details.lastPartSn + '-' + details.lastPartIndex : details.updated ? 'UPDATED' : 'MISSED'}`);\n if (!this.canLoad || !details.live) {\n return;\n }\n let deliveryDirectives;\n let msn = undefined;\n let part = undefined;\n if (details.canBlockReload && details.endSN && details.advanced) {\n // Load level with LL-HLS delivery directives\n const lowLatencyMode = this.hls.config.lowLatencyMode;\n const lastPartSn = details.lastPartSn;\n const endSn = details.endSN;\n const lastPartIndex = details.lastPartIndex;\n const hasParts = lastPartIndex !== -1;\n const atLastPartOfSegment = lastPartSn === endSn;\n if (hasParts) {\n // When low latency mode is disabled, request the last part of the next segment\n if (atLastPartOfSegment) {\n msn = endSn + 1;\n part = lowLatencyMode ? 0 : lastPartIndex;\n } else {\n msn = lastPartSn;\n part = lowLatencyMode ? lastPartIndex + 1 : details.maxPartIndex;\n }\n } else {\n msn = endSn + 1;\n }\n // Low-Latency CDN Tune-in: \"age\" header and time since load indicates we're behind by more than one part\n // Update directives to obtain the Playlist that has the estimated additional duration of media\n const lastAdvanced = details.age;\n const cdnAge = lastAdvanced + details.ageHeader;\n let currentGoal = Math.min(cdnAge - details.partTarget, details.targetduration * 1.5);\n if (currentGoal > 0) {\n if (cdnAge > details.targetduration * 3) {\n // Omit segment and part directives when the last response was more than 3 target durations ago,\n this.log(`Playlist last advanced ${lastAdvanced.toFixed(2)}s ago. Omitting segment and part directives.`);\n msn = undefined;\n part = undefined;\n } else if (previousDetails != null && previousDetails.tuneInGoal && cdnAge - details.partTarget > previousDetails.tuneInGoal) {\n // If we attempted to get the next or latest playlist update, but currentGoal increased,\n // then we either can't catchup, or the \"age\" header cannot be trusted.\n this.warn(`CDN Tune-in goal increased from: ${previousDetails.tuneInGoal} to: ${currentGoal} with playlist age: ${details.age}`);\n currentGoal = 0;\n } else {\n const segments = Math.floor(currentGoal / details.targetduration);\n msn += segments;\n if (part !== undefined) {\n const parts = Math.round(currentGoal % details.targetduration / details.partTarget);\n part += parts;\n }\n this.log(`CDN Tune-in age: ${details.ageHeader}s last advanced ${lastAdvanced.toFixed(2)}s goal: ${currentGoal} skip sn ${segments} to part ${part}`);\n }\n details.tuneInGoal = currentGoal;\n }\n deliveryDirectives = this.getDeliveryDirectives(details, data.deliveryDirectives, msn, part);\n if (lowLatencyMode || !atLastPartOfSegment) {\n details.requestScheduled = now;\n this.loadingPlaylist(levelOrTrack, deliveryDirectives);\n return;\n }\n } else if (details.canBlockReload || details.canSkipUntil) {\n deliveryDirectives = this.getDeliveryDirectives(details, data.deliveryDirectives, msn, part);\n }\n if (deliveryDirectives && msn !== undefined && details.canBlockReload) {\n details.requestScheduled = stats.loading.first + Math.max(reloadInterval - elapsed * 2, reloadInterval / 2);\n }\n this.scheduleLoading(levelOrTrack, deliveryDirectives, details);\n } else {\n this.clearTimer();\n }\n }\n scheduleLoading(levelOrTrack, deliveryDirectives, updatedDetails) {\n const details = updatedDetails || levelOrTrack.details;\n if (!details) {\n this.loadingPlaylist(levelOrTrack, deliveryDirectives);\n return;\n }\n const now = self.performance.now();\n const requestScheduled = details.requestScheduled;\n if (now >= requestScheduled) {\n this.loadingPlaylist(levelOrTrack, deliveryDirectives);\n return;\n }\n const estimatedTimeUntilUpdate = requestScheduled - now;\n this.log(`reload live playlist ${levelOrTrack.name || levelOrTrack.bitrate + 'bps'} in ${Math.round(estimatedTimeUntilUpdate)} ms`);\n this.clearTimer();\n this.timer = self.setTimeout(() => this.loadingPlaylist(levelOrTrack, deliveryDirectives), estimatedTimeUntilUpdate);\n }\n getDeliveryDirectives(details, previousDeliveryDirectives, msn, part) {\n let skip = getSkipValue(details);\n if (previousDeliveryDirectives != null && previousDeliveryDirectives.skip && details.deltaUpdateFailed) {\n msn = previousDeliveryDirectives.msn;\n part = previousDeliveryDirectives.part;\n skip = HlsSkip.No;\n }\n return new HlsUrlParameters(msn, part, skip);\n }\n checkRetry(errorEvent) {\n const errorDetails = errorEvent.details;\n const isTimeout = isTimeoutError(errorEvent);\n const errorAction = errorEvent.errorAction;\n const {\n action,\n retryCount = 0,\n retryConfig\n } = errorAction || {};\n const retry = !!errorAction && !!retryConfig && (action === NetworkErrorAction.RetryRequest || !errorAction.resolved && action === NetworkErrorAction.SendAlternateToPenaltyBox);\n if (retry) {\n var _errorEvent$context;\n if (retryCount >= retryConfig.maxNumRetry) {\n return false;\n }\n if (isTimeout && (_errorEvent$context = errorEvent.context) != null && _errorEvent$context.deliveryDirectives) {\n // The LL-HLS request already timed out so retry immediately\n this.warn(`Retrying playlist loading ${retryCount + 1}/${retryConfig.maxNumRetry} after \"${errorDetails}\" without delivery-directives`);\n this.loadPlaylist();\n } else {\n const delay = getRetryDelay(retryConfig, retryCount);\n // Schedule level/track reload\n this.clearTimer();\n this.timer = self.setTimeout(() => this.loadPlaylist(), delay);\n this.warn(`Retrying playlist loading ${retryCount + 1}/${retryConfig.maxNumRetry} after \"${errorDetails}\" in ${delay}ms`);\n }\n // `levelRetry = true` used to inform other controllers that a retry is happening\n errorEvent.levelRetry = true;\n errorAction.resolved = true;\n }\n return retry;\n }\n}\n\nfunction subtitleOptionsIdentical(trackList1, trackList2) {\n if (trackList1.length !== trackList2.length) {\n return false;\n }\n for (let i = 0; i < trackList1.length; i++) {\n if (!mediaAttributesIdentical(trackList1[i].attrs, trackList2[i].attrs)) {\n return false;\n }\n }\n return true;\n}\nfunction mediaAttributesIdentical(attrs1, attrs2, customAttributes) {\n // Media options with the same rendition ID must be bit identical\n const stableRenditionId = attrs1['STABLE-RENDITION-ID'];\n if (stableRenditionId && !customAttributes) {\n return stableRenditionId === attrs2['STABLE-RENDITION-ID'];\n }\n // When rendition ID is not present, compare attributes\n return !(customAttributes || ['LANGUAGE', 'NAME', 'CHARACTERISTICS', 'AUTOSELECT', 'DEFAULT', 'FORCED', 'ASSOC-LANGUAGE']).some(subtitleAttribute => attrs1[subtitleAttribute] !== attrs2[subtitleAttribute]);\n}\nfunction subtitleTrackMatchesTextTrack(subtitleTrack, textTrack) {\n return textTrack.label.toLowerCase() === subtitleTrack.name.toLowerCase() && (!textTrack.language || textTrack.language.toLowerCase() === (subtitleTrack.lang || '').toLowerCase());\n}\n\nclass AudioTrackController extends BasePlaylistController {\n constructor(hls) {\n super(hls, 'audio-track-controller');\n this.tracks = [];\n this.groupIds = null;\n this.tracksInGroup = [];\n this.trackId = -1;\n this.currentTrack = null;\n this.selectDefaultTrack = true;\n this.registerListeners();\n }\n registerListeners() {\n const {\n hls\n } = this;\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.on(Events.LEVEL_LOADING, this.onLevelLoading, this);\n hls.on(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n hls.on(Events.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this);\n hls.on(Events.ERROR, this.onError, this);\n }\n unregisterListeners() {\n const {\n hls\n } = this;\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.off(Events.LEVEL_LOADING, this.onLevelLoading, this);\n hls.off(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n hls.off(Events.AUDIO_TRACK_LOADED, this.onAudioTrackLoaded, this);\n hls.off(Events.ERROR, this.onError, this);\n }\n destroy() {\n this.unregisterListeners();\n this.tracks.length = 0;\n this.tracksInGroup.length = 0;\n this.currentTrack = null;\n super.destroy();\n }\n onManifestLoading() {\n this.tracks = [];\n this.tracksInGroup = [];\n this.groupIds = null;\n this.currentTrack = null;\n this.trackId = -1;\n this.selectDefaultTrack = true;\n }\n onManifestParsed(event, data) {\n this.tracks = data.audioTracks || [];\n }\n onAudioTrackLoaded(event, data) {\n const {\n id,\n groupId,\n details\n } = data;\n const trackInActiveGroup = this.tracksInGroup[id];\n if (!trackInActiveGroup || trackInActiveGroup.groupId !== groupId) {\n this.warn(`Audio track with id:${id} and group:${groupId} not found in active group ${trackInActiveGroup == null ? void 0 : trackInActiveGroup.groupId}`);\n return;\n }\n const curDetails = trackInActiveGroup.details;\n trackInActiveGroup.details = data.details;\n this.log(`Audio track ${id} \"${trackInActiveGroup.name}\" lang:${trackInActiveGroup.lang} group:${groupId} loaded [${details.startSN}-${details.endSN}]`);\n if (id === this.trackId) {\n this.playlistLoaded(id, data, curDetails);\n }\n }\n onLevelLoading(event, data) {\n this.switchLevel(data.level);\n }\n onLevelSwitching(event, data) {\n this.switchLevel(data.level);\n }\n switchLevel(levelIndex) {\n const levelInfo = this.hls.levels[levelIndex];\n if (!levelInfo) {\n return;\n }\n const audioGroups = levelInfo.audioGroups || null;\n const currentGroups = this.groupIds;\n let currentTrack = this.currentTrack;\n if (!audioGroups || (currentGroups == null ? void 0 : currentGroups.length) !== (audioGroups == null ? void 0 : audioGroups.length) || audioGroups != null && audioGroups.some(groupId => (currentGroups == null ? void 0 : currentGroups.indexOf(groupId)) === -1)) {\n this.groupIds = audioGroups;\n this.trackId = -1;\n this.currentTrack = null;\n const audioTracks = this.tracks.filter(track => !audioGroups || audioGroups.indexOf(track.groupId) !== -1);\n if (audioTracks.length) {\n // Disable selectDefaultTrack if there are no default tracks\n if (this.selectDefaultTrack && !audioTracks.some(track => track.default)) {\n this.selectDefaultTrack = false;\n }\n // track.id should match hls.audioTracks index\n audioTracks.forEach((track, i) => {\n track.id = i;\n });\n } else if (!currentTrack && !this.tracksInGroup.length) {\n // Do not dispatch AUDIO_TRACKS_UPDATED when there were and are no tracks\n return;\n }\n this.tracksInGroup = audioTracks;\n\n // Find preferred track\n const audioPreference = this.hls.config.audioPreference;\n if (!currentTrack && audioPreference) {\n const groupIndex = findMatchingOption(audioPreference, audioTracks, audioMatchPredicate);\n if (groupIndex > -1) {\n currentTrack = audioTracks[groupIndex];\n } else {\n const allIndex = findMatchingOption(audioPreference, this.tracks);\n currentTrack = this.tracks[allIndex];\n }\n }\n\n // Select initial track\n let trackId = this.findTrackId(currentTrack);\n if (trackId === -1 && currentTrack) {\n trackId = this.findTrackId(null);\n }\n\n // Dispatch events and load track if needed\n const audioTracksUpdated = {\n audioTracks\n };\n this.log(`Updating audio tracks, ${audioTracks.length} track(s) found in group(s): ${audioGroups == null ? void 0 : audioGroups.join(',')}`);\n this.hls.trigger(Events.AUDIO_TRACKS_UPDATED, audioTracksUpdated);\n const selectedTrackId = this.trackId;\n if (trackId !== -1 && selectedTrackId === -1) {\n this.setAudioTrack(trackId);\n } else if (audioTracks.length && selectedTrackId === -1) {\n var _this$groupIds;\n const error = new Error(`No audio track selected for current audio group-ID(s): ${(_this$groupIds = this.groupIds) == null ? void 0 : _this$groupIds.join(',')} track count: ${audioTracks.length}`);\n this.warn(error.message);\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.AUDIO_TRACK_LOAD_ERROR,\n fatal: true,\n error\n });\n }\n }\n }\n onError(event, data) {\n if (data.fatal || !data.context) {\n return;\n }\n if (data.context.type === PlaylistContextType.AUDIO_TRACK && data.context.id === this.trackId && (!this.groupIds || this.groupIds.indexOf(data.context.groupId) !== -1)) {\n this.checkRetry(data);\n }\n }\n get allAudioTracks() {\n return this.tracks;\n }\n get audioTracks() {\n return this.tracksInGroup;\n }\n get audioTrack() {\n return this.trackId;\n }\n set audioTrack(newId) {\n // If audio track is selected from API then don't choose from the manifest default track\n this.selectDefaultTrack = false;\n this.setAudioTrack(newId);\n }\n setAudioOption(audioOption) {\n const hls = this.hls;\n hls.config.audioPreference = audioOption;\n if (audioOption) {\n const allAudioTracks = this.allAudioTracks;\n this.selectDefaultTrack = false;\n if (allAudioTracks.length) {\n // First see if current option matches (no switch op)\n const currentTrack = this.currentTrack;\n if (currentTrack && matchesOption(audioOption, currentTrack, audioMatchPredicate)) {\n return currentTrack;\n }\n // Find option in available tracks (tracksInGroup)\n const groupIndex = findMatchingOption(audioOption, this.tracksInGroup, audioMatchPredicate);\n if (groupIndex > -1) {\n const track = this.tracksInGroup[groupIndex];\n this.setAudioTrack(groupIndex);\n return track;\n } else if (currentTrack) {\n // Find option in nearest level audio group\n let searchIndex = hls.loadLevel;\n if (searchIndex === -1) {\n searchIndex = hls.firstAutoLevel;\n }\n const switchIndex = findClosestLevelWithAudioGroup(audioOption, hls.levels, allAudioTracks, searchIndex, audioMatchPredicate);\n if (switchIndex === -1) {\n // could not find matching variant\n return null;\n }\n // and switch level to acheive the audio group switch\n hls.nextLoadLevel = switchIndex;\n }\n if (audioOption.channels || audioOption.audioCodec) {\n // Could not find a match with codec / channels predicate\n // Find a match without channels or codec\n const withoutCodecAndChannelsMatch = findMatchingOption(audioOption, allAudioTracks);\n if (withoutCodecAndChannelsMatch > -1) {\n return allAudioTracks[withoutCodecAndChannelsMatch];\n }\n }\n }\n }\n return null;\n }\n setAudioTrack(newId) {\n const tracks = this.tracksInGroup;\n\n // check if level idx is valid\n if (newId < 0 || newId >= tracks.length) {\n this.warn(`Invalid audio track id: ${newId}`);\n return;\n }\n this.selectDefaultTrack = false;\n const lastTrack = this.currentTrack;\n const track = tracks[newId];\n const trackLoaded = track.details && !track.details.live;\n if (newId === this.trackId && track === lastTrack && trackLoaded) {\n return;\n }\n this.log(`Switching to audio-track ${newId} \"${track.name}\" lang:${track.lang} group:${track.groupId} channels:${track.channels}`);\n this.trackId = newId;\n this.currentTrack = track;\n this.hls.trigger(Events.AUDIO_TRACK_SWITCHING, _objectSpread2({}, track));\n // Do not reload track unless live\n if (trackLoaded) {\n return;\n }\n const hlsUrlParameters = this.switchParams(track.url, lastTrack == null ? void 0 : lastTrack.details, track.details);\n this.loadPlaylist(hlsUrlParameters);\n }\n findTrackId(currentTrack) {\n const audioTracks = this.tracksInGroup;\n for (let i = 0; i < audioTracks.length; i++) {\n const track = audioTracks[i];\n if (this.selectDefaultTrack && !track.default) {\n continue;\n }\n if (!currentTrack || matchesOption(currentTrack, track, audioMatchPredicate)) {\n return i;\n }\n }\n if (currentTrack) {\n const {\n name,\n lang,\n assocLang,\n characteristics,\n audioCodec,\n channels\n } = currentTrack;\n for (let i = 0; i < audioTracks.length; i++) {\n const track = audioTracks[i];\n if (matchesOption({\n name,\n lang,\n assocLang,\n characteristics,\n audioCodec,\n channels\n }, track, audioMatchPredicate)) {\n return i;\n }\n }\n for (let i = 0; i < audioTracks.length; i++) {\n const track = audioTracks[i];\n if (mediaAttributesIdentical(currentTrack.attrs, track.attrs, ['LANGUAGE', 'ASSOC-LANGUAGE', 'CHARACTERISTICS'])) {\n return i;\n }\n }\n for (let i = 0; i < audioTracks.length; i++) {\n const track = audioTracks[i];\n if (mediaAttributesIdentical(currentTrack.attrs, track.attrs, ['LANGUAGE'])) {\n return i;\n }\n }\n }\n return -1;\n }\n loadPlaylist(hlsUrlParameters) {\n super.loadPlaylist();\n const audioTrack = this.currentTrack;\n if (!this.shouldLoadPlaylist(audioTrack)) {\n return;\n }\n // Do not load audio rendition with URI matching main variant URI\n if (useAlternateAudio(audioTrack.url, this.hls)) {\n this.scheduleLoading(audioTrack, hlsUrlParameters);\n }\n }\n loadingPlaylist(audioTrack, hlsUrlParameters) {\n super.loadingPlaylist(audioTrack, hlsUrlParameters);\n const id = audioTrack.id;\n const groupId = audioTrack.groupId;\n const url = this.getUrlWithDirectives(audioTrack.url, hlsUrlParameters);\n const details = audioTrack.details;\n const age = details == null ? void 0 : details.age;\n this.log(`Loading audio-track ${id} \"${audioTrack.name}\" lang:${audioTrack.lang} group:${groupId}${(hlsUrlParameters == null ? void 0 : hlsUrlParameters.msn) !== undefined ? ' at sn ' + hlsUrlParameters.msn + ' part ' + hlsUrlParameters.part : ''}${age && details.live ? ' age ' + age.toFixed(1) + (details.type ? ' ' + details.type || '' : '') : ''} ${url}`);\n this.hls.trigger(Events.AUDIO_TRACK_LOADING, {\n url,\n id,\n groupId,\n deliveryDirectives: hlsUrlParameters || null,\n track: audioTrack\n });\n }\n}\n\nclass BufferOperationQueue {\n constructor(sourceBufferReference) {\n this.tracks = void 0;\n this.queues = {\n video: [],\n audio: [],\n audiovideo: []\n };\n this.tracks = sourceBufferReference;\n }\n destroy() {\n this.tracks = this.queues = null;\n }\n append(operation, type, pending) {\n if (this.queues === null || this.tracks === null) {\n return;\n }\n const queue = this.queues[type];\n queue.push(operation);\n if (queue.length === 1 && !pending) {\n this.executeNext(type);\n }\n }\n appendBlocker(type) {\n return new Promise(resolve => {\n const operation = {\n label: 'async-blocker',\n execute: resolve,\n onStart: () => {},\n onComplete: () => {},\n onError: () => {}\n };\n this.append(operation, type);\n });\n }\n prependBlocker(type) {\n return new Promise(resolve => {\n if (this.queues) {\n const operation = {\n label: 'async-blocker-prepend',\n execute: resolve,\n onStart: () => {},\n onComplete: () => {},\n onError: () => {}\n };\n this.queues[type].unshift(operation);\n }\n });\n }\n removeBlockers() {\n if (this.queues === null) {\n return;\n }\n [this.queues.video, this.queues.audio, this.queues.audiovideo].forEach(queue => {\n var _queue$;\n const label = (_queue$ = queue[0]) == null ? void 0 : _queue$.label;\n if (label === 'async-blocker' || label === 'async-blocker-prepend') {\n queue[0].execute();\n queue.splice(0, 1);\n }\n });\n }\n unblockAudio(op) {\n if (this.queues === null) {\n return;\n }\n const queue = this.queues.audio;\n if (queue[0] === op) {\n this.shiftAndExecuteNext('audio');\n }\n }\n executeNext(type) {\n if (this.queues === null || this.tracks === null) {\n return;\n }\n const queue = this.queues[type];\n if (queue.length) {\n const operation = queue[0];\n try {\n // Operations are expected to result in an 'updateend' event being fired. If not, the queue will lock. Operations\n // which do not end with this event must call _onSBUpdateEnd manually\n operation.execute();\n } catch (error) {\n var _this$tracks$type;\n operation.onError(error);\n if (this.queues === null || this.tracks === null) {\n return;\n }\n\n // Only shift the current operation off, otherwise the updateend handler will do this for us\n const sb = (_this$tracks$type = this.tracks[type]) == null ? void 0 : _this$tracks$type.buffer;\n if (!(sb != null && sb.updating)) {\n this.shiftAndExecuteNext(type);\n }\n }\n }\n }\n shiftAndExecuteNext(type) {\n if (this.queues === null) {\n return;\n }\n this.queues[type].shift();\n this.executeNext(type);\n }\n current(type) {\n var _this$queues;\n return ((_this$queues = this.queues) == null ? void 0 : _this$queues[type][0]) || null;\n }\n toString() {\n const {\n queues,\n tracks\n } = this;\n if (queues === null || tracks === null) {\n return `<destroyed>`;\n }\n return `\n${this.list('video')}\n${this.list('audio')}\n${this.list('audiovideo')}}`;\n }\n list(type) {\n var _this$queues2, _this$tracks;\n return (_this$queues2 = this.queues) != null && _this$queues2[type] || (_this$tracks = this.tracks) != null && _this$tracks[type] ? `${type}: (${this.listSbInfo(type)}) ${this.listOps(type)}` : '';\n }\n listSbInfo(type) {\n var _this$tracks2;\n const track = (_this$tracks2 = this.tracks) == null ? void 0 : _this$tracks2[type];\n const sb = track == null ? void 0 : track.buffer;\n if (!sb) {\n return 'none';\n }\n return `SourceBuffer${sb.updating ? ' updating' : ''}${track.ended ? ' ended' : ''}${track.ending ? ' ending' : ''}`;\n }\n listOps(type) {\n var _this$queues3;\n return ((_this$queues3 = this.queues) == null ? void 0 : _this$queues3[type].map(op => op.label).join(', ')) || '';\n }\n}\n\nconst VIDEO_CODEC_PROFILE_REPLACE = /(avc[1234]|hvc1|hev1|dvh[1e]|vp09|av01)(?:\\.[^.,]+)+/;\nconst TRACK_REMOVED_ERROR_NAME = 'HlsJsTrackRemovedError';\nclass HlsJsTrackRemovedError extends Error {\n constructor(message) {\n super(message);\n this.name = TRACK_REMOVED_ERROR_NAME;\n }\n}\nclass BufferController extends Logger {\n constructor(hls, fragmentTracker) {\n super('buffer-controller', hls.logger);\n this.hls = void 0;\n this.fragmentTracker = void 0;\n // The level details used to determine duration, target-duration and live\n this.details = null;\n // cache the self generated object url to detect hijack of video tag\n this._objectUrl = null;\n // A queue of buffer operations which require the SourceBuffer to not be updating upon execution\n this.operationQueue = null;\n // The total number track codecs expected before any sourceBuffers are created (2: audio and video or 1: audiovideo | audio | video)\n this.bufferCodecEventsTotal = 0;\n // A reference to the attached media element\n this.media = null;\n // A reference to the active media source\n this.mediaSource = null;\n // Last MP3 audio chunk appended\n this.lastMpegAudioChunk = null;\n // Audio fragment blocked from appending until corresponding video appends or context changes\n this.blockedAudioAppend = null;\n // Keep track of video append position for unblocking audio\n this.lastVideoAppendEnd = 0;\n // Whether or not to use ManagedMediaSource API and append source element to media element.\n this.appendSource = void 0;\n // Transferred MediaSource information used to detmerine if duration end endstream may be appended\n this.transferData = void 0;\n // Directives used to override default MediaSource handling\n this.overrides = void 0;\n // Error counters\n this.appendErrors = {\n audio: 0,\n video: 0,\n audiovideo: 0\n };\n // Record of required or created buffers by type. SourceBuffer is stored in Track.buffer once created.\n this.tracks = {};\n // Array of SourceBuffer type and SourceBuffer (or null). One entry per TrackSet in this.tracks.\n this.sourceBuffers = [[null, null], [null, null]];\n this._onEndStreaming = event => {\n var _this$mediaSource;\n if (!this.hls) {\n return;\n }\n if (((_this$mediaSource = this.mediaSource) == null ? void 0 : _this$mediaSource.readyState) !== 'open') {\n return;\n }\n this.hls.pauseBuffering();\n };\n this._onStartStreaming = event => {\n if (!this.hls) {\n return;\n }\n this.hls.resumeBuffering();\n };\n // Keep as arrow functions so that we can directly reference these functions directly as event listeners\n this._onMediaSourceOpen = e => {\n const {\n media,\n mediaSource\n } = this;\n if (e) {\n this.log('Media source opened');\n }\n if (!media || !mediaSource) {\n return;\n }\n // once received, don't listen anymore to sourceopen event\n mediaSource.removeEventListener('sourceopen', this._onMediaSourceOpen);\n media.removeEventListener('emptied', this._onMediaEmptied);\n this.updateDuration();\n this.hls.trigger(Events.MEDIA_ATTACHED, {\n media,\n mediaSource: mediaSource\n });\n if (this.mediaSource !== null) {\n this.checkPendingTracks();\n }\n };\n this._onMediaSourceClose = () => {\n this.log('Media source closed');\n };\n this._onMediaSourceEnded = () => {\n this.log('Media source ended');\n };\n this._onMediaEmptied = () => {\n const {\n mediaSrc,\n _objectUrl\n } = this;\n if (mediaSrc !== _objectUrl) {\n this.error(`Media element src was set while attaching MediaSource (${_objectUrl} > ${mediaSrc})`);\n }\n };\n this.hls = hls;\n this.fragmentTracker = fragmentTracker;\n this.appendSource = isManagedMediaSource(getMediaSource(hls.config.preferManagedMediaSource));\n this.initTracks();\n this.registerListeners();\n }\n hasSourceTypes() {\n return Object.keys(this.tracks).length > 0;\n }\n destroy() {\n this.unregisterListeners();\n this.details = null;\n this.lastMpegAudioChunk = this.blockedAudioAppend = null;\n this.transferData = this.overrides = undefined;\n if (this.operationQueue) {\n this.operationQueue.destroy();\n this.operationQueue = null;\n }\n // @ts-ignore\n this.hls = this.fragmentTracker = null;\n // @ts-ignore\n this._onMediaSourceOpen = this._onMediaSourceClose = null;\n // @ts-ignore\n this._onMediaSourceEnded = null;\n // @ts-ignore\n this._onStartStreaming = this._onEndStreaming = null;\n }\n registerListeners() {\n const {\n hls\n } = this;\n hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.on(Events.BUFFER_RESET, this.onBufferReset, this);\n hls.on(Events.BUFFER_APPENDING, this.onBufferAppending, this);\n hls.on(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n hls.on(Events.BUFFER_EOS, this.onBufferEos, this);\n hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n hls.on(Events.FRAG_PARSED, this.onFragParsed, this);\n hls.on(Events.FRAG_CHANGED, this.onFragChanged, this);\n hls.on(Events.ERROR, this.onError, this);\n }\n unregisterListeners() {\n const {\n hls\n } = this;\n hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.off(Events.BUFFER_RESET, this.onBufferReset, this);\n hls.off(Events.BUFFER_APPENDING, this.onBufferAppending, this);\n hls.off(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n hls.off(Events.BUFFER_EOS, this.onBufferEos, this);\n hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n hls.off(Events.FRAG_PARSED, this.onFragParsed, this);\n hls.off(Events.FRAG_CHANGED, this.onFragChanged, this);\n hls.off(Events.ERROR, this.onError, this);\n }\n transferMedia() {\n const {\n media,\n mediaSource\n } = this;\n if (!media) {\n return null;\n }\n const tracks = {};\n if (this.operationQueue) {\n const updating = this.isUpdating();\n if (!updating) {\n this.operationQueue.removeBlockers();\n }\n const queued = this.isQueued();\n if (updating || queued) {\n this.warn(`Transfering MediaSource with${queued ? ' operations in queue' : ''}${updating ? ' updating SourceBuffer(s)' : ''} ${this.operationQueue}`);\n }\n this.operationQueue.destroy();\n }\n const transferData = this.transferData;\n if (!this.sourceBufferCount && transferData && transferData.mediaSource === mediaSource) {\n _extends(tracks, transferData.tracks);\n } else {\n this.sourceBuffers.forEach(tuple => {\n const [type] = tuple;\n if (type) {\n tracks[type] = _extends({}, this.tracks[type]);\n this.removeBuffer(type);\n }\n tuple[0] = tuple[1] = null;\n });\n }\n return {\n media,\n mediaSource,\n tracks\n };\n }\n initTracks() {\n const tracks = {};\n this.sourceBuffers = [[null, null], [null, null]];\n this.tracks = tracks;\n this.resetQueue();\n this.resetAppendErrors();\n this.lastMpegAudioChunk = this.blockedAudioAppend = null;\n this.lastVideoAppendEnd = 0;\n }\n onManifestLoading() {\n this.bufferCodecEventsTotal = 0;\n this.details = null;\n }\n onManifestParsed(event, data) {\n var _this$transferData;\n // in case of alt audio 2 BUFFER_CODECS events will be triggered, one per stream controller\n // sourcebuffers will be created all at once when the expected nb of tracks will be reached\n // in case alt audio is not used, only one BUFFER_CODEC event will be fired from main stream controller\n // it will contain the expected nb of source buffers, no need to compute it\n let codecEvents = 2;\n if (data.audio && !data.video || !data.altAudio) {\n codecEvents = 1;\n }\n this.bufferCodecEventsTotal = codecEvents;\n this.log(`${codecEvents} bufferCodec event(s) expected.`);\n if ((_this$transferData = this.transferData) != null && _this$transferData.mediaSource && this.sourceBufferCount && codecEvents) {\n this.bufferCreated();\n }\n }\n onMediaAttaching(event, data) {\n const media = this.media = data.media;\n this.transferData = this.overrides = undefined;\n const MediaSource = getMediaSource(this.appendSource);\n if (MediaSource) {\n const transferringMedia = !!data.mediaSource;\n if (transferringMedia || data.overrides) {\n this.transferData = data;\n this.overrides = data.overrides;\n }\n const ms = this.mediaSource = data.mediaSource || new MediaSource();\n this.assignMediaSource(ms);\n if (transferringMedia) {\n this._objectUrl = media.src;\n this.attachTransferred();\n } else {\n // cache the locally generated object url\n const objectUrl = this._objectUrl = self.URL.createObjectURL(ms);\n // link video and media Source\n if (this.appendSource) {\n try {\n media.removeAttribute('src');\n // ManagedMediaSource will not open without disableRemotePlayback set to false or source alternatives\n const MMS = self.ManagedMediaSource;\n media.disableRemotePlayback = media.disableRemotePlayback || MMS && ms instanceof MMS;\n removeSourceChildren(media);\n addSource(media, objectUrl);\n media.load();\n } catch (error) {\n media.src = objectUrl;\n }\n } else {\n media.src = objectUrl;\n }\n }\n media.addEventListener('emptied', this._onMediaEmptied);\n }\n }\n assignMediaSource(ms) {\n var _this$transferData2, _ms$constructor;\n this.log(`${((_this$transferData2 = this.transferData) == null ? void 0 : _this$transferData2.mediaSource) === ms ? 'transferred' : 'created'} media source: ${(_ms$constructor = ms.constructor) == null ? void 0 : _ms$constructor.name}`);\n // MediaSource listeners are arrow functions with a lexical scope, and do not need to be bound\n ms.addEventListener('sourceopen', this._onMediaSourceOpen);\n ms.addEventListener('sourceended', this._onMediaSourceEnded);\n ms.addEventListener('sourceclose', this._onMediaSourceClose);\n if (this.appendSource) {\n ms.addEventListener('startstreaming', this._onStartStreaming);\n ms.addEventListener('endstreaming', this._onEndStreaming);\n }\n }\n attachTransferred() {\n const media = this.media;\n const data = this.transferData;\n if (!data || !media) {\n return;\n }\n const requiredTracks = this.tracks;\n const transferredTracks = data.tracks;\n const trackNames = transferredTracks ? Object.keys(transferredTracks) : null;\n const trackCount = trackNames ? trackNames.length : 0;\n const mediaSourceOpenCallback = () => {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n Promise.resolve().then(() => {\n if (this.media && this.mediaSourceOpenOrEnded) {\n this._onMediaSourceOpen();\n }\n });\n };\n if (transferredTracks && trackNames && trackCount) {\n if (!this.tracksReady) {\n // Wait for CODECS event(s)\n this.hls.config.startFragPrefetch = true;\n this.log(`attachTransferred: waiting for SourceBuffer track info`);\n return;\n }\n this.log(`attachTransferred: (bufferCodecEventsTotal ${this.bufferCodecEventsTotal})\nrequired tracks: ${stringify(requiredTracks, (key, value) => key === 'initSegment' ? undefined : value)};\ntransfer tracks: ${stringify(transferredTracks, (key, value) => key === 'initSegment' ? undefined : value)}}`);\n if (!isCompatibleTrackChange(transferredTracks, requiredTracks)) {\n // destroy attaching media source\n data.mediaSource = null;\n data.tracks = undefined;\n const currentTime = media.currentTime;\n const details = this.details;\n const startTime = Math.max(currentTime, (details == null ? void 0 : details.fragments[0].start) || 0);\n if (startTime - currentTime > 1) {\n this.log(`attachTransferred: waiting for playback to reach new tracks start time ${currentTime} -> ${startTime}`);\n return;\n }\n this.warn(`attachTransferred: resetting MediaSource for incompatible tracks (\"${Object.keys(transferredTracks)}\"->\"${Object.keys(requiredTracks)}\") start time: ${startTime} currentTime: ${currentTime}`);\n this.onMediaDetaching(Events.MEDIA_DETACHING, {});\n this.onMediaAttaching(Events.MEDIA_ATTACHING, data);\n media.currentTime = startTime;\n return;\n }\n this.transferData = undefined;\n trackNames.forEach(trackName => {\n const type = trackName;\n const track = transferredTracks[type];\n if (track) {\n const sb = track.buffer;\n if (sb) {\n // Purge fragment tracker of ejected segments for existing buffer\n const fragmentTracker = this.fragmentTracker;\n const playlistType = track.id;\n if (fragmentTracker.hasFragments(playlistType) || fragmentTracker.hasParts(playlistType)) {\n const bufferedTimeRanges = BufferHelper.getBuffered(sb);\n fragmentTracker.detectEvictedFragments(type, bufferedTimeRanges, playlistType, null, true);\n }\n // Transfer SourceBuffer\n const sbIndex = sourceBufferNameToIndex(type);\n const sbTuple = [type, sb];\n this.sourceBuffers[sbIndex] = sbTuple;\n if (sb.updating && this.operationQueue) {\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.operationQueue.prependBlocker(type);\n }\n this.trackSourceBuffer(type, track);\n }\n }\n });\n mediaSourceOpenCallback();\n this.bufferCreated();\n } else {\n this.log(`attachTransferred: MediaSource w/o SourceBuffers`);\n mediaSourceOpenCallback();\n }\n }\n get mediaSourceOpenOrEnded() {\n var _this$mediaSource2;\n const readyState = (_this$mediaSource2 = this.mediaSource) == null ? void 0 : _this$mediaSource2.readyState;\n return readyState === 'open' || readyState === 'ended';\n }\n onMediaDetaching(event, data) {\n const transferringMedia = !!data.transferMedia;\n this.transferData = this.overrides = undefined;\n const {\n media,\n mediaSource,\n _objectUrl\n } = this;\n if (mediaSource) {\n this.log(`media source ${transferringMedia ? 'transferring' : 'detaching'}`);\n if (transferringMedia) {\n // Detach SourceBuffers without removing from MediaSource\n // and leave `tracks` (required SourceBuffers configuration)\n this.sourceBuffers.forEach(([type]) => {\n if (type) {\n this.removeBuffer(type);\n }\n });\n this.resetQueue();\n } else {\n if (this.mediaSourceOpenOrEnded) {\n const open = mediaSource.readyState === 'open';\n try {\n const sourceBuffers = mediaSource.sourceBuffers;\n for (let i = sourceBuffers.length; i--;) {\n if (open) {\n sourceBuffers[i].abort();\n }\n mediaSource.removeSourceBuffer(sourceBuffers[i]);\n }\n if (open) {\n // endOfStream could trigger exception if any sourcebuffer is in updating state\n // we don't really care about checking sourcebuffer state here,\n // as we are anyway detaching the MediaSource\n // let's just avoid this exception to propagate\n mediaSource.endOfStream();\n }\n } catch (err) {\n this.warn(`onMediaDetaching: ${err.message} while calling endOfStream`);\n }\n }\n // Clean up the SourceBuffers by invoking onBufferReset\n if (this.sourceBufferCount) {\n this.onBufferReset();\n }\n }\n mediaSource.removeEventListener('sourceopen', this._onMediaSourceOpen);\n mediaSource.removeEventListener('sourceended', this._onMediaSourceEnded);\n mediaSource.removeEventListener('sourceclose', this._onMediaSourceClose);\n if (this.appendSource) {\n mediaSource.removeEventListener('startstreaming', this._onStartStreaming);\n mediaSource.removeEventListener('endstreaming', this._onEndStreaming);\n }\n this.mediaSource = null;\n this._objectUrl = null;\n }\n\n // Detach properly the MediaSource from the HTMLMediaElement as\n // suggested in https://github.com/w3c/media-source/issues/53.\n if (media) {\n media.removeEventListener('emptied', this._onMediaEmptied);\n if (!transferringMedia) {\n if (_objectUrl) {\n self.URL.revokeObjectURL(_objectUrl);\n }\n\n // clean up video tag src only if it's our own url. some external libraries might\n // hijack the video tag and change its 'src' without destroying the Hls instance first\n if (this.mediaSrc === _objectUrl) {\n media.removeAttribute('src');\n if (this.appendSource) {\n removeSourceChildren(media);\n }\n media.load();\n } else {\n this.warn('media|source.src was changed by a third party - skip cleanup');\n }\n }\n this.media = null;\n }\n this.hls.trigger(Events.MEDIA_DETACHED, data);\n }\n onBufferReset() {\n this.sourceBuffers.forEach(([type]) => {\n if (type) {\n this.resetBuffer(type);\n }\n });\n this.initTracks();\n }\n resetBuffer(type) {\n var _this$tracks$type;\n const sb = (_this$tracks$type = this.tracks[type]) == null ? void 0 : _this$tracks$type.buffer;\n this.removeBuffer(type);\n if (sb) {\n try {\n var _this$mediaSource3;\n if ((_this$mediaSource3 = this.mediaSource) != null && _this$mediaSource3.sourceBuffers.length) {\n this.mediaSource.removeSourceBuffer(sb);\n }\n } catch (err) {\n this.warn(`onBufferReset ${type}`, err);\n }\n }\n delete this.tracks[type];\n }\n removeBuffer(type) {\n this.removeBufferListeners(type);\n this.sourceBuffers[sourceBufferNameToIndex(type)] = [null, null];\n const track = this.tracks[type];\n if (track) {\n track.buffer = undefined;\n }\n }\n resetQueue() {\n if (this.operationQueue) {\n this.operationQueue.destroy();\n }\n this.operationQueue = new BufferOperationQueue(this.tracks);\n }\n onBufferCodecs(event, data) {\n var _data$audio;\n const tracks = this.tracks;\n const trackNames = Object.keys(data);\n this.log(`BUFFER_CODECS: \"${trackNames}\" (current SB count ${this.sourceBufferCount})`);\n const unmuxedToMuxed = 'audiovideo' in data && (tracks.audio || tracks.video) || tracks.audiovideo && ('audio' in data || 'video' in data);\n const muxedToUnmuxed = !unmuxedToMuxed && this.sourceBufferCount && this.media && trackNames.some(sbName => !tracks[sbName]);\n if (unmuxedToMuxed || muxedToUnmuxed) {\n this.warn(`Unsupported transition between \"${Object.keys(tracks)}\" and \"${trackNames}\" SourceBuffers`);\n // Do not add incompatible track ('audiovideo' <-> 'video'/'audio').\n // Allow following onBufferAppending handle to trigger BUFFER_APPEND_ERROR.\n // This will either be resolved by level switch or could be handled with recoverMediaError().\n return;\n }\n trackNames.forEach(trackName => {\n var _this$transferData3, _trackCodec;\n const parsedTrack = data[trackName];\n const {\n id,\n codec,\n levelCodec,\n container,\n metadata,\n supplemental\n } = parsedTrack;\n let track = tracks[trackName];\n const transferredTrack = (_this$transferData3 = this.transferData) == null || (_this$transferData3 = _this$transferData3.tracks) == null ? void 0 : _this$transferData3[trackName];\n const sbTrack = transferredTrack != null && transferredTrack.buffer ? transferredTrack : track;\n const sbCodec = (sbTrack == null ? void 0 : sbTrack.pendingCodec) || (sbTrack == null ? void 0 : sbTrack.codec);\n const trackLevelCodec = sbTrack == null ? void 0 : sbTrack.levelCodec;\n if (!track) {\n track = tracks[trackName] = {\n buffer: undefined,\n listeners: [],\n codec,\n supplemental,\n container,\n levelCodec,\n metadata,\n id\n };\n }\n // check if SourceBuffer codec needs to change\n const currentCodecFull = pickMostCompleteCodecName(sbCodec, trackLevelCodec);\n const currentCodec = currentCodecFull == null ? void 0 : currentCodecFull.replace(VIDEO_CODEC_PROFILE_REPLACE, '$1');\n let trackCodec = pickMostCompleteCodecName(codec, levelCodec);\n const nextCodec = (_trackCodec = trackCodec) == null ? void 0 : _trackCodec.replace(VIDEO_CODEC_PROFILE_REPLACE, '$1');\n if (trackCodec && currentCodecFull && currentCodec !== nextCodec) {\n if (trackName.slice(0, 5) === 'audio') {\n trackCodec = getCodecCompatibleName(trackCodec, this.appendSource);\n }\n this.log(`switching codec ${sbCodec} to ${trackCodec}`);\n if (trackCodec !== (track.pendingCodec || track.codec)) {\n track.pendingCodec = trackCodec;\n }\n track.container = container;\n this.appendChangeType(trackName, container, trackCodec);\n }\n });\n if (this.tracksReady || this.sourceBufferCount) {\n data.tracks = this.sourceBufferTracks;\n }\n\n // if sourcebuffers already created, do nothing ...\n if (this.sourceBufferCount) {\n return;\n }\n if (this.bufferCodecEventsTotal > 1 && !this.tracks.video && !data.video && ((_data$audio = data.audio) == null ? void 0 : _data$audio.id) === 'main') {\n // MVP is missing CODECS and only audio was found in main segment (#7524)\n this.log(`Main audio-only`);\n this.bufferCodecEventsTotal = 1;\n }\n if (this.mediaSourceOpenOrEnded) {\n this.checkPendingTracks();\n }\n }\n get sourceBufferTracks() {\n return Object.keys(this.tracks).reduce((baseTracks, type) => {\n const track = this.tracks[type];\n baseTracks[type] = {\n id: track.id,\n container: track.container,\n codec: track.codec,\n levelCodec: track.levelCodec\n };\n return baseTracks;\n }, {});\n }\n appendChangeType(type, container, codec) {\n const mimeType = `${container};codecs=${codec}`;\n const operation = {\n label: `change-type=${mimeType}`,\n execute: () => {\n const track = this.tracks[type];\n if (track) {\n const sb = track.buffer;\n if (sb != null && sb.changeType) {\n this.log(`changing ${type} sourceBuffer type to ${mimeType}`);\n sb.changeType(mimeType);\n track.codec = codec;\n track.container = container;\n }\n }\n this.shiftAndExecuteNext(type);\n },\n onStart: () => {},\n onComplete: () => {},\n onError: error => {\n this.warn(`Failed to change ${type} SourceBuffer type`, error);\n }\n };\n this.append(operation, type, this.isPending(this.tracks[type]));\n }\n blockAudio(partOrFrag) {\n var _this$fragmentTracker;\n const pStart = partOrFrag.start;\n const pTime = pStart + partOrFrag.duration * 0.05;\n const atGap = ((_this$fragmentTracker = this.fragmentTracker.getAppendedFrag(pStart, PlaylistLevelType.MAIN)) == null ? void 0 : _this$fragmentTracker.gap) === true;\n if (atGap) {\n return;\n }\n const op = {\n label: 'block-audio',\n execute: () => {\n var _this$fragmentTracker2;\n const videoTrack = this.tracks.video;\n if (this.lastVideoAppendEnd > pTime || videoTrack != null && videoTrack.buffer && BufferHelper.isBuffered(videoTrack.buffer, pTime) || ((_this$fragmentTracker2 = this.fragmentTracker.getAppendedFrag(pTime, PlaylistLevelType.MAIN)) == null ? void 0 : _this$fragmentTracker2.gap) === true) {\n this.blockedAudioAppend = null;\n this.shiftAndExecuteNext('audio');\n }\n },\n onStart: () => {},\n onComplete: () => {},\n onError: error => {\n this.warn('Error executing block-audio operation', error);\n }\n };\n this.blockedAudioAppend = {\n op,\n frag: partOrFrag\n };\n this.append(op, 'audio', true);\n }\n unblockAudio() {\n const {\n blockedAudioAppend,\n operationQueue\n } = this;\n if (blockedAudioAppend && operationQueue) {\n this.blockedAudioAppend = null;\n operationQueue.unblockAudio(blockedAudioAppend.op);\n }\n }\n onBufferAppending(event, eventData) {\n const {\n tracks\n } = this;\n const {\n data,\n type,\n parent,\n frag,\n part,\n chunkMeta,\n offset\n } = eventData;\n const chunkStats = chunkMeta.buffering[type];\n const {\n sn,\n cc\n } = frag;\n const bufferAppendingStart = self.performance.now();\n chunkStats.start = bufferAppendingStart;\n const fragBuffering = frag.stats.buffering;\n const partBuffering = part ? part.stats.buffering : null;\n if (fragBuffering.start === 0) {\n fragBuffering.start = bufferAppendingStart;\n }\n if (partBuffering && partBuffering.start === 0) {\n partBuffering.start = bufferAppendingStart;\n }\n\n // TODO: Only update timestampOffset when audio/mpeg fragment or part is not contiguous with previously appended\n // Adjusting `SourceBuffer.timestampOffset` (desired point in the timeline where the next frames should be appended)\n // in Chrome browser when we detect MPEG audio container and time delta between level PTS and `SourceBuffer.timestampOffset`\n // is greater than 100ms (this is enough to handle seek for VOD or level change for LIVE videos).\n // More info here: https://github.com/video-dev/hls.js/issues/332#issuecomment-257986486\n const audioTrack = tracks.audio;\n let checkTimestampOffset = false;\n if (type === 'audio' && (audioTrack == null ? void 0 : audioTrack.container) === 'audio/mpeg') {\n checkTimestampOffset = !this.lastMpegAudioChunk || chunkMeta.id === 1 || this.lastMpegAudioChunk.sn !== chunkMeta.sn;\n this.lastMpegAudioChunk = chunkMeta;\n }\n\n // Block audio append until overlapping video append\n const videoTrack = tracks.video;\n const videoSb = videoTrack == null ? void 0 : videoTrack.buffer;\n if (videoSb && sn !== 'initSegment') {\n const partOrFrag = part || frag;\n const blockedAudioAppend = this.blockedAudioAppend;\n if (type === 'audio' && parent !== 'main' && !this.blockedAudioAppend && !(videoTrack.ending || videoTrack.ended)) {\n const pStart = partOrFrag.start;\n const pTime = pStart + partOrFrag.duration * 0.05;\n const vbuffered = videoSb.buffered;\n const vappending = this.currentOp('video');\n if (!vbuffered.length && !vappending) {\n // wait for video before appending audio\n this.blockAudio(partOrFrag);\n } else if (!vappending && !BufferHelper.isBuffered(videoSb, pTime) && this.lastVideoAppendEnd < pTime) {\n // audio is ahead of video\n this.blockAudio(partOrFrag);\n }\n } else if (type === 'video') {\n const videoAppendEnd = partOrFrag.end;\n if (blockedAudioAppend) {\n const audioStart = blockedAudioAppend.frag.start;\n if (videoAppendEnd > audioStart || videoAppendEnd < this.lastVideoAppendEnd || BufferHelper.isBuffered(videoSb, audioStart)) {\n this.unblockAudio();\n }\n }\n this.lastVideoAppendEnd = videoAppendEnd;\n }\n }\n const fragStart = (part || frag).start;\n const operation = {\n label: `append-${type}`,\n execute: () => {\n var _this$tracks$type2;\n chunkStats.executeStart = self.performance.now();\n const sb = (_this$tracks$type2 = this.tracks[type]) == null ? void 0 : _this$tracks$type2.buffer;\n if (sb) {\n if (checkTimestampOffset) {\n this.updateTimestampOffset(sb, fragStart, 0.1, type, sn, cc);\n } else if (offset !== undefined && isFiniteNumber(offset)) {\n this.updateTimestampOffset(sb, offset, 0.000001, type, sn, cc);\n }\n }\n this.appendExecutor(data, type);\n },\n onStart: () => {\n // logger.debug(`[buffer-controller]: ${type} SourceBuffer updatestart`);\n },\n onComplete: () => {\n // logger.debug(`[buffer-controller]: ${type} SourceBuffer updateend`);\n const end = self.performance.now();\n chunkStats.executeEnd = chunkStats.end = end;\n if (fragBuffering.first === 0) {\n fragBuffering.first = end;\n }\n if (partBuffering && partBuffering.first === 0) {\n partBuffering.first = end;\n }\n const timeRanges = {};\n this.sourceBuffers.forEach(([type, sb]) => {\n if (type) {\n timeRanges[type] = BufferHelper.getBuffered(sb);\n }\n });\n this.appendErrors[type] = 0;\n if (type === 'audio' || type === 'video') {\n this.appendErrors.audiovideo = 0;\n } else {\n this.appendErrors.audio = 0;\n this.appendErrors.video = 0;\n }\n this.hls.trigger(Events.BUFFER_APPENDED, {\n type,\n frag,\n part,\n chunkMeta,\n parent: frag.type,\n timeRanges\n });\n },\n onError: error => {\n var _this$media;\n // in case any error occured while appending, put back segment in segments table\n const event = {\n type: ErrorTypes.MEDIA_ERROR,\n parent: frag.type,\n details: ErrorDetails.BUFFER_APPEND_ERROR,\n sourceBufferName: type,\n frag,\n part,\n chunkMeta,\n error,\n err: error,\n fatal: false\n };\n const mediaError = (_this$media = this.media) == null ? void 0 : _this$media.error;\n if (error.code === DOMException.QUOTA_EXCEEDED_ERR || error.name == 'QuotaExceededError' || `quota` in error) {\n // QuotaExceededError: http://www.w3.org/TR/html5/infrastructure.html#quotaexceedederror\n // let's stop appending any segments, and report BUFFER_FULL_ERROR error\n event.details = ErrorDetails.BUFFER_FULL_ERROR;\n } else if (error.code === DOMException.INVALID_STATE_ERR && this.mediaSourceOpenOrEnded && !mediaError) {\n // Allow retry for \"Failed to execute 'appendBuffer' on 'SourceBuffer': This SourceBuffer is still processing\" errors\n event.errorAction = createDoNothingErrorAction(true);\n } else if (error.name === TRACK_REMOVED_ERROR_NAME && this.sourceBufferCount === 0) {\n // Do nothing if sourceBuffers were removed (media is detached and append was not aborted)\n event.errorAction = createDoNothingErrorAction(true);\n } else {\n const appendErrorCount = ++this.appendErrors[type];\n /* with UHD content, we could get loop of quota exceeded error until\n browser is able to evict some data from sourcebuffer. Retrying can help recover.\n */\n this.warn(`Failed ${appendErrorCount}/${this.hls.config.appendErrorMaxRetry} times to append segment in \"${type}\" sourceBuffer (${mediaError ? mediaError : 'no media error'})`);\n if (appendErrorCount >= this.hls.config.appendErrorMaxRetry || !!mediaError) {\n event.fatal = true;\n }\n }\n this.hls.trigger(Events.ERROR, event);\n }\n };\n this.log(`queuing \"${type}\" append sn: ${sn}${part ? ' p: ' + part.index : ''} of ${frag.type === PlaylistLevelType.MAIN ? 'level' : 'track'} ${frag.level} cc: ${cc}`);\n this.append(operation, type, this.isPending(this.tracks[type]));\n }\n getFlushOp(type, start, end) {\n this.log(`queuing \"${type}\" remove ${start}-${end}`);\n return {\n label: 'remove',\n execute: () => {\n this.removeExecutor(type, start, end);\n },\n onStart: () => {\n // logger.debug(`[buffer-controller]: Started flushing ${data.startOffset} -> ${data.endOffset} for ${type} Source Buffer`);\n },\n onComplete: () => {\n // logger.debug(`[buffer-controller]: Finished flushing ${data.startOffset} -> ${data.endOffset} for ${type} Source Buffer`);\n this.hls.trigger(Events.BUFFER_FLUSHED, {\n type\n });\n },\n onError: error => {\n this.warn(`Failed to remove ${start}-${end} from \"${type}\" SourceBuffer`, error);\n }\n };\n }\n onBufferFlushing(event, data) {\n const {\n type,\n startOffset,\n endOffset\n } = data;\n if (type) {\n this.append(this.getFlushOp(type, startOffset, endOffset), type);\n } else {\n this.sourceBuffers.forEach(([type]) => {\n if (type) {\n this.append(this.getFlushOp(type, startOffset, endOffset), type);\n }\n });\n }\n }\n onFragParsed(event, data) {\n const {\n frag,\n part\n } = data;\n const buffersAppendedTo = [];\n const elementaryStreams = part ? part.elementaryStreams : frag.elementaryStreams;\n if (elementaryStreams[ElementaryStreamTypes.AUDIOVIDEO]) {\n buffersAppendedTo.push('audiovideo');\n } else {\n if (elementaryStreams[ElementaryStreamTypes.AUDIO]) {\n buffersAppendedTo.push('audio');\n }\n if (elementaryStreams[ElementaryStreamTypes.VIDEO]) {\n buffersAppendedTo.push('video');\n }\n }\n const onUnblocked = () => {\n const now = self.performance.now();\n frag.stats.buffering.end = now;\n if (part) {\n part.stats.buffering.end = now;\n }\n const stats = part ? part.stats : frag.stats;\n this.hls.trigger(Events.FRAG_BUFFERED, {\n frag,\n part,\n stats,\n id: frag.type\n });\n };\n if (buffersAppendedTo.length === 0) {\n this.warn(`Fragments must have at least one ElementaryStreamType set. type: ${frag.type} level: ${frag.level} sn: ${frag.sn}`);\n }\n this.blockBuffers(onUnblocked, buffersAppendedTo).catch(error => {\n this.warn(`Fragment buffered callback ${error}`);\n this.stepOperationQueue(this.sourceBufferTypes);\n });\n }\n onFragChanged(event, data) {\n this.trimBuffers();\n }\n get bufferedToEnd() {\n return this.sourceBufferCount > 0 && !this.sourceBuffers.some(([type]) => {\n if (type) {\n const track = this.tracks[type];\n if (track) {\n return !track.ended || track.ending;\n }\n }\n return false;\n });\n }\n\n // on BUFFER_EOS mark matching sourcebuffer(s) as \"ending\" and \"ended\" and queue endOfStream after remaining operations(s)\n // an undefined data.type will mark all buffers as EOS.\n onBufferEos(event, data) {\n var _this$overrides;\n this.sourceBuffers.forEach(([type]) => {\n if (type) {\n const track = this.tracks[type];\n if (!data.type || data.type === type) {\n track.ending = true;\n if (!track.ended) {\n track.ended = true;\n this.log(`${type} buffer reached EOS`);\n }\n }\n }\n });\n const allowEndOfStream = ((_this$overrides = this.overrides) == null ? void 0 : _this$overrides.endOfStream) !== false;\n const allTracksEnding = this.sourceBufferCount > 0 && !this.sourceBuffers.some(([type]) => {\n var _this$tracks$type3;\n return type && !((_this$tracks$type3 = this.tracks[type]) != null && _this$tracks$type3.ended);\n });\n if (allTracksEnding) {\n if (allowEndOfStream) {\n this.log(`Queueing EOS`);\n this.blockUntilOpen(() => {\n this.tracksEnded();\n const {\n mediaSource\n } = this;\n if (!mediaSource || mediaSource.readyState !== 'open') {\n if (mediaSource) {\n this.log(`Could not call mediaSource.endOfStream(). mediaSource.readyState: ${mediaSource.readyState}`);\n }\n return;\n }\n this.log(`Calling mediaSource.endOfStream()`);\n // Allow this to throw and be caught by the enqueueing function\n mediaSource.endOfStream();\n this.hls.trigger(Events.BUFFERED_TO_END, undefined);\n });\n } else {\n this.tracksEnded();\n this.hls.trigger(Events.BUFFERED_TO_END, undefined);\n }\n } else if (data.type === 'video') {\n // Make sure pending audio appends are unblocked when video reaches end\n this.unblockAudio();\n }\n }\n tracksEnded() {\n this.sourceBuffers.forEach(([type]) => {\n if (type !== null) {\n const track = this.tracks[type];\n if (track) {\n track.ending = false;\n }\n }\n });\n }\n onLevelUpdated(event, {\n details\n }) {\n if (!details.fragments.length) {\n return;\n }\n this.details = details;\n this.updateDuration();\n }\n updateDuration() {\n this.blockUntilOpen(() => {\n const durationAndRange = this.getDurationAndRange();\n if (!durationAndRange) {\n return;\n }\n this.updateMediaSource(durationAndRange);\n });\n }\n onError(event, data) {\n if (data.details === ErrorDetails.BUFFER_APPEND_ERROR && data.frag) {\n var _data$errorAction;\n const nextAutoLevel = (_data$errorAction = data.errorAction) == null ? void 0 : _data$errorAction.nextAutoLevel;\n if (isFiniteNumber(nextAutoLevel) && nextAutoLevel !== data.frag.level) {\n this.resetAppendErrors();\n }\n }\n }\n resetAppendErrors() {\n this.appendErrors = {\n audio: 0,\n video: 0,\n audiovideo: 0\n };\n }\n trimBuffers() {\n const {\n hls,\n details,\n media\n } = this;\n if (!media || details === null) {\n return;\n }\n if (!this.sourceBufferCount) {\n return;\n }\n const config = hls.config;\n const currentTime = media.currentTime;\n const targetDuration = details.levelTargetDuration;\n\n // Support for deprecated liveBackBufferLength\n const backBufferLength = details.live && config.liveBackBufferLength !== null ? config.liveBackBufferLength : config.backBufferLength;\n if (isFiniteNumber(backBufferLength) && backBufferLength >= 0) {\n const maxBackBufferLength = Math.max(backBufferLength, targetDuration);\n const targetBackBufferPosition = Math.floor(currentTime / targetDuration) * targetDuration - maxBackBufferLength;\n this.flushBackBuffer(currentTime, targetDuration, targetBackBufferPosition);\n }\n const frontBufferFlushThreshold = config.frontBufferFlushThreshold;\n if (isFiniteNumber(frontBufferFlushThreshold) && frontBufferFlushThreshold > 0) {\n const frontBufferLength = Math.max(config.maxBufferLength, frontBufferFlushThreshold);\n const maxFrontBufferLength = Math.max(frontBufferLength, targetDuration);\n const targetFrontBufferPosition = Math.floor(currentTime / targetDuration) * targetDuration + maxFrontBufferLength;\n this.flushFrontBuffer(currentTime, targetDuration, targetFrontBufferPosition);\n }\n }\n flushBackBuffer(currentTime, targetDuration, targetBackBufferPosition) {\n this.sourceBuffers.forEach(([type, sb]) => {\n if (sb) {\n const buffered = BufferHelper.getBuffered(sb);\n // when target buffer start exceeds actual buffer start\n if (buffered.length > 0 && targetBackBufferPosition > buffered.start(0)) {\n var _this$details;\n this.hls.trigger(Events.BACK_BUFFER_REACHED, {\n bufferEnd: targetBackBufferPosition\n });\n\n // Support for deprecated event:\n const track = this.tracks[type];\n if ((_this$details = this.details) != null && _this$details.live) {\n this.hls.trigger(Events.LIVE_BACK_BUFFER_REACHED, {\n bufferEnd: targetBackBufferPosition\n });\n } else if (track != null && track.ended) {\n this.log(`Cannot flush ${type} back buffer while SourceBuffer is in ended state`);\n return;\n }\n this.hls.trigger(Events.BUFFER_FLUSHING, {\n startOffset: 0,\n endOffset: targetBackBufferPosition,\n type\n });\n }\n }\n });\n }\n flushFrontBuffer(currentTime, targetDuration, targetFrontBufferPosition) {\n this.sourceBuffers.forEach(([type, sb]) => {\n if (sb) {\n const buffered = BufferHelper.getBuffered(sb);\n const numBufferedRanges = buffered.length;\n // The buffer is either empty or contiguous\n if (numBufferedRanges < 2) {\n return;\n }\n const bufferStart = buffered.start(numBufferedRanges - 1);\n const bufferEnd = buffered.end(numBufferedRanges - 1);\n // No flush if we can tolerate the current buffer length or the current buffer range we would flush is contiguous with current position\n if (targetFrontBufferPosition > bufferStart || currentTime >= bufferStart && currentTime <= bufferEnd) {\n return;\n }\n this.hls.trigger(Events.BUFFER_FLUSHING, {\n startOffset: bufferStart,\n endOffset: Infinity,\n type\n });\n }\n });\n }\n\n /**\n * Update Media Source duration to current level duration or override to Infinity if configuration parameter\n * 'liveDurationInfinity` is set to `true`\n * More details: https://github.com/video-dev/hls.js/issues/355\n */\n getDurationAndRange() {\n var _this$overrides2;\n const {\n details,\n mediaSource\n } = this;\n if (!details || !this.media || (mediaSource == null ? void 0 : mediaSource.readyState) !== 'open') {\n return null;\n }\n const playlistEnd = details.edge;\n if (details.live && this.hls.config.liveDurationInfinity) {\n const len = details.fragments.length;\n if (len && !!mediaSource.setLiveSeekableRange) {\n const start = Math.max(0, details.fragmentStart);\n const end = Math.max(start, playlistEnd);\n return {\n duration: Infinity,\n start,\n end\n };\n }\n return {\n duration: Infinity\n };\n }\n const overrideDuration = (_this$overrides2 = this.overrides) == null ? void 0 : _this$overrides2.duration;\n if (overrideDuration) {\n if (!isFiniteNumber(overrideDuration)) {\n return null;\n }\n return {\n duration: overrideDuration\n };\n }\n const mediaDuration = this.media.duration;\n const msDuration = isFiniteNumber(mediaSource.duration) ? mediaSource.duration : 0;\n if (playlistEnd > msDuration && playlistEnd > mediaDuration || !isFiniteNumber(mediaDuration)) {\n return {\n duration: playlistEnd\n };\n }\n return null;\n }\n updateMediaSource({\n duration,\n start,\n end\n }) {\n const mediaSource = this.mediaSource;\n if (!this.media || !mediaSource || mediaSource.readyState !== 'open') {\n return;\n }\n if (mediaSource.duration !== duration) {\n if (isFiniteNumber(duration)) {\n this.log(`Updating MediaSource duration to ${duration.toFixed(3)}`);\n }\n mediaSource.duration = duration;\n }\n if (start !== undefined && end !== undefined) {\n this.log(`MediaSource duration is set to ${mediaSource.duration}. Setting seekable range to ${start}-${end}.`);\n mediaSource.setLiveSeekableRange(start, end);\n }\n }\n get tracksReady() {\n const pendingTrackCount = this.pendingTrackCount;\n return pendingTrackCount > 0 && (pendingTrackCount >= this.bufferCodecEventsTotal || this.isPending(this.tracks.audiovideo));\n }\n checkPendingTracks() {\n const {\n bufferCodecEventsTotal,\n pendingTrackCount,\n tracks\n } = this;\n this.log(`checkPendingTracks (pending: ${pendingTrackCount} codec events expected: ${bufferCodecEventsTotal}) ${stringify(tracks)}`);\n // Check if we've received all of the expected bufferCodec events. When none remain, create all the sourceBuffers at once.\n // This is important because the MSE spec allows implementations to throw QuotaExceededErrors if creating new sourceBuffers after\n // data has been appended to existing ones.\n // 2 tracks is the max (one for audio, one for video). If we've reach this max go ahead and create the buffers.\n if (this.tracksReady) {\n var _this$transferData4;\n const transferredTracks = (_this$transferData4 = this.transferData) == null ? void 0 : _this$transferData4.tracks;\n if (transferredTracks && Object.keys(transferredTracks).length) {\n this.attachTransferred();\n } else {\n // ok, let's create them now !\n this.createSourceBuffers();\n }\n }\n }\n bufferCreated() {\n if (this.sourceBufferCount) {\n const tracks = {};\n this.sourceBuffers.forEach(([type, buffer]) => {\n if (type) {\n const track = this.tracks[type];\n tracks[type] = {\n buffer,\n container: track.container,\n codec: track.codec,\n supplemental: track.supplemental,\n levelCodec: track.levelCodec,\n id: track.id,\n metadata: track.metadata\n };\n }\n });\n this.hls.trigger(Events.BUFFER_CREATED, {\n tracks\n });\n this.log(`SourceBuffers created. Running queue: ${this.operationQueue}`);\n this.sourceBuffers.forEach(([type]) => {\n this.executeNext(type);\n });\n } else {\n const error = new Error('could not create source buffer for media codec(s)');\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.BUFFER_INCOMPATIBLE_CODECS_ERROR,\n fatal: true,\n error,\n reason: error.message\n });\n }\n }\n createSourceBuffers() {\n const {\n tracks,\n sourceBuffers,\n mediaSource\n } = this;\n if (!mediaSource) {\n throw new Error('createSourceBuffers called when mediaSource was null');\n }\n for (const trackName in tracks) {\n const type = trackName;\n const track = tracks[type];\n if (this.isPending(track)) {\n const codec = this.getTrackCodec(track, type);\n const mimeType = `${track.container};codecs=${codec}`;\n track.codec = codec;\n this.log(`creating sourceBuffer(${mimeType})${this.currentOp(type) ? ' Queued' : ''} ${stringify(track)}`);\n try {\n const sb = mediaSource.addSourceBuffer(mimeType);\n const sbIndex = sourceBufferNameToIndex(type);\n const sbTuple = [type, sb];\n sourceBuffers[sbIndex] = sbTuple;\n track.buffer = sb;\n } catch (error) {\n var _this$operationQueue;\n this.error(`error while trying to add sourceBuffer: ${error.message}`);\n // remove init segment from queue and delete track info\n this.shiftAndExecuteNext(type);\n (_this$operationQueue = this.operationQueue) == null || _this$operationQueue.removeBlockers();\n delete this.tracks[type];\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.BUFFER_ADD_CODEC_ERROR,\n fatal: false,\n error,\n sourceBufferName: type,\n mimeType: mimeType,\n parent: track.id\n });\n return;\n }\n this.trackSourceBuffer(type, track);\n }\n }\n this.bufferCreated();\n }\n getTrackCodec(track, trackName) {\n // Use supplemental video codec when supported when adding SourceBuffer (#5558)\n const supplementalCodec = track.supplemental;\n let trackCodec = track.codec;\n if (supplementalCodec && (trackName === 'video' || trackName === 'audiovideo') && areCodecsMediaSourceSupported(supplementalCodec, 'video')) {\n trackCodec = replaceVideoCodec(trackCodec, supplementalCodec);\n }\n const codec = pickMostCompleteCodecName(trackCodec, track.levelCodec);\n if (codec) {\n if (trackName.slice(0, 5) === 'audio') {\n return getCodecCompatibleName(codec, this.appendSource);\n }\n return codec;\n }\n return '';\n }\n trackSourceBuffer(type, track) {\n const buffer = track.buffer;\n if (!buffer) {\n return;\n }\n const codec = this.getTrackCodec(track, type);\n this.tracks[type] = {\n buffer,\n codec,\n container: track.container,\n levelCodec: track.levelCodec,\n supplemental: track.supplemental,\n metadata: track.metadata,\n id: track.id,\n listeners: []\n };\n this.removeBufferListeners(type);\n this.addBufferListener(type, 'updatestart', this.onSBUpdateStart);\n this.addBufferListener(type, 'updateend', this.onSBUpdateEnd);\n this.addBufferListener(type, 'error', this.onSBUpdateError);\n // ManagedSourceBuffer bufferedchange event\n if (this.appendSource) {\n this.addBufferListener(type, 'bufferedchange', (type, event) => {\n // If media was ejected check for a change. Added ranges are redundant with changes on 'updateend' event.\n const removedRanges = event.removedRanges;\n if (removedRanges != null && removedRanges.length) {\n this.hls.trigger(Events.BUFFER_FLUSHED, {\n type: type\n });\n }\n });\n }\n }\n get mediaSrc() {\n var _this$media2, _this$media2$querySel;\n const media = ((_this$media2 = this.media) == null || (_this$media2$querySel = _this$media2.querySelector) == null ? void 0 : _this$media2$querySel.call(_this$media2, 'source')) || this.media;\n return media == null ? void 0 : media.src;\n }\n onSBUpdateStart(type) {\n const operation = this.currentOp(type);\n if (!operation) {\n return;\n }\n operation.onStart();\n }\n onSBUpdateEnd(type) {\n var _this$mediaSource4;\n if (((_this$mediaSource4 = this.mediaSource) == null ? void 0 : _this$mediaSource4.readyState) === 'closed') {\n this.resetBuffer(type);\n return;\n }\n const operation = this.currentOp(type);\n if (!operation) {\n return;\n }\n operation.onComplete();\n this.shiftAndExecuteNext(type);\n }\n onSBUpdateError(type, event) {\n var _this$mediaSource5;\n const error = new Error(`${type} SourceBuffer error. MediaSource readyState: ${(_this$mediaSource5 = this.mediaSource) == null ? void 0 : _this$mediaSource5.readyState}`);\n this.error(`${error}`, event);\n // according to http://www.w3.org/TR/media-source/#sourcebuffer-append-error\n // SourceBuffer errors are not necessarily fatal; if so, the HTMLMediaElement will fire an error event\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.BUFFER_APPENDING_ERROR,\n sourceBufferName: type,\n error,\n fatal: false\n });\n // updateend is always fired after error, so we'll allow that to shift the current operation off of the queue\n const operation = this.currentOp(type);\n if (operation) {\n operation.onError(error);\n }\n }\n updateTimestampOffset(sb, timestampOffset, tolerance, type, sn, cc) {\n const delta = timestampOffset - sb.timestampOffset;\n if (Math.abs(delta) >= tolerance) {\n this.log(`Updating ${type} SourceBuffer timestampOffset to ${timestampOffset} (sn: ${sn} cc: ${cc})`);\n sb.timestampOffset = timestampOffset;\n }\n }\n\n // This method must result in an updateend event; if remove is not called, onSBUpdateEnd must be called manually\n removeExecutor(type, startOffset, endOffset) {\n const {\n media,\n mediaSource\n } = this;\n const track = this.tracks[type];\n const sb = track == null ? void 0 : track.buffer;\n if (!media || !mediaSource || !sb) {\n this.warn(`Attempting to remove from the ${type} SourceBuffer, but it does not exist`);\n this.shiftAndExecuteNext(type);\n return;\n }\n const mediaDuration = isFiniteNumber(media.duration) ? media.duration : Infinity;\n const msDuration = isFiniteNumber(mediaSource.duration) ? mediaSource.duration : Infinity;\n const removeStart = Math.max(0, startOffset);\n const removeEnd = Math.min(endOffset, mediaDuration, msDuration);\n if (removeEnd > removeStart && (!track.ending || track.ended)) {\n track.ended = false;\n this.log(`Removing [${removeStart},${removeEnd}] from the ${type} SourceBuffer`);\n sb.remove(removeStart, removeEnd);\n } else {\n // Cycle the queue\n this.shiftAndExecuteNext(type);\n }\n }\n\n // This method must result in an updateend event; if append is not called, onSBUpdateEnd must be called manually\n appendExecutor(data, type) {\n const track = this.tracks[type];\n const sb = track == null ? void 0 : track.buffer;\n if (!sb) {\n throw new HlsJsTrackRemovedError(`Attempting to append to the ${type} SourceBuffer, but it does not exist`);\n }\n track.ending = false;\n track.ended = false;\n sb.appendBuffer(data);\n }\n blockUntilOpen(callback) {\n if (this.isUpdating() || this.isQueued()) {\n this.blockBuffers(callback).catch(error => {\n this.warn(`SourceBuffer blocked callback ${error}`);\n this.stepOperationQueue(this.sourceBufferTypes);\n });\n } else {\n try {\n callback();\n } catch (error) {\n this.warn(`Callback run without blocking ${this.operationQueue} ${error}`);\n }\n }\n }\n isUpdating() {\n return this.sourceBuffers.some(([type, sb]) => type && sb.updating);\n }\n isQueued() {\n return this.sourceBuffers.some(([type]) => type && !!this.currentOp(type));\n }\n isPending(track) {\n return !!track && !track.buffer;\n }\n\n // Enqueues an operation to each SourceBuffer queue which, upon execution, resolves a promise. When all promises\n // resolve, the onUnblocked function is executed. Functions calling this method do not need to unblock the queue\n // upon completion, since we already do it here\n blockBuffers(onUnblocked, bufferNames = this.sourceBufferTypes) {\n if (!bufferNames.length) {\n this.log('Blocking operation requested, but no SourceBuffers exist');\n return Promise.resolve().then(onUnblocked);\n }\n const {\n operationQueue\n } = this;\n\n // logger.debug(`[buffer-controller]: Blocking ${buffers} SourceBuffer`);\n const blockingOperations = bufferNames.map(type => this.appendBlocker(type));\n const audioBlocked = bufferNames.length > 1 && !!this.blockedAudioAppend;\n if (audioBlocked) {\n this.unblockAudio();\n }\n return Promise.all(blockingOperations).then(result => {\n if (operationQueue !== this.operationQueue) {\n return;\n }\n // logger.debug(`[buffer-controller]: Blocking operation resolved; unblocking ${buffers} SourceBuffer`);\n onUnblocked();\n this.stepOperationQueue(this.sourceBufferTypes);\n });\n }\n stepOperationQueue(bufferNames) {\n bufferNames.forEach(type => {\n var _this$tracks$type4;\n const sb = (_this$tracks$type4 = this.tracks[type]) == null ? void 0 : _this$tracks$type4.buffer;\n // Only cycle the queue if the SB is not updating. There's a bug in Chrome which sets the SB updating flag to\n // true when changing the MediaSource duration (https://bugs.chromium.org/p/chromium/issues/detail?id=959359&can=2&q=mediasource%20duration)\n // While this is a workaround, it's probably useful to have around\n if (!sb || sb.updating) {\n return;\n }\n this.shiftAndExecuteNext(type);\n });\n }\n append(operation, type, pending) {\n if (this.operationQueue) {\n this.operationQueue.append(operation, type, pending);\n }\n }\n appendBlocker(type) {\n if (this.operationQueue) {\n return this.operationQueue.appendBlocker(type);\n }\n }\n currentOp(type) {\n if (this.operationQueue) {\n return this.operationQueue.current(type);\n }\n return null;\n }\n executeNext(type) {\n if (type && this.operationQueue) {\n this.operationQueue.executeNext(type);\n }\n }\n shiftAndExecuteNext(type) {\n if (this.operationQueue) {\n this.operationQueue.shiftAndExecuteNext(type);\n }\n }\n get pendingTrackCount() {\n return Object.keys(this.tracks).reduce((acc, type) => acc + (this.isPending(this.tracks[type]) ? 1 : 0), 0);\n }\n get sourceBufferCount() {\n return this.sourceBuffers.reduce((acc, [type]) => acc + (type ? 1 : 0), 0);\n }\n get sourceBufferTypes() {\n return this.sourceBuffers.map(([type]) => type).filter(type => !!type);\n }\n addBufferListener(type, event, fn) {\n const track = this.tracks[type];\n if (!track) {\n return;\n }\n const buffer = track.buffer;\n if (!buffer) {\n return;\n }\n const listener = fn.bind(this, type);\n track.listeners.push({\n event,\n listener\n });\n buffer.addEventListener(event, listener);\n }\n removeBufferListeners(type) {\n const track = this.tracks[type];\n if (!track) {\n return;\n }\n const buffer = track.buffer;\n if (!buffer) {\n return;\n }\n track.listeners.forEach(l => {\n buffer.removeEventListener(l.event, l.listener);\n });\n track.listeners.length = 0;\n }\n}\nfunction removeSourceChildren(node) {\n const sourceChildren = node.querySelectorAll('source');\n [].slice.call(sourceChildren).forEach(source => {\n node.removeChild(source);\n });\n}\nfunction addSource(media, url) {\n const source = self.document.createElement('source');\n source.type = 'video/mp4';\n source.src = url;\n media.appendChild(source);\n}\nfunction sourceBufferNameToIndex(type) {\n return type === 'audio' ? 1 : 0;\n}\n\nclass CapLevelController {\n constructor(hls) {\n this.hls = void 0;\n this.autoLevelCapping = void 0;\n this.firstLevel = void 0;\n this.media = void 0;\n this.restrictedLevels = void 0;\n this.timer = void 0;\n this.clientRect = void 0;\n this.streamController = void 0;\n this.hls = hls;\n this.autoLevelCapping = Number.POSITIVE_INFINITY;\n this.firstLevel = -1;\n this.media = null;\n this.restrictedLevels = [];\n this.timer = undefined;\n this.clientRect = null;\n this.registerListeners();\n }\n setStreamController(streamController) {\n this.streamController = streamController;\n }\n destroy() {\n if (this.hls) {\n this.unregisterListener();\n }\n if (this.timer) {\n this.stopCapping();\n }\n this.media = null;\n this.clientRect = null;\n // @ts-ignore\n this.hls = this.streamController = null;\n }\n registerListeners() {\n const {\n hls\n } = this;\n hls.on(Events.FPS_DROP_LEVEL_CAPPING, this.onFpsDropLevelCapping, this);\n hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.on(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n hls.on(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n }\n unregisterListener() {\n const {\n hls\n } = this;\n hls.off(Events.FPS_DROP_LEVEL_CAPPING, this.onFpsDropLevelCapping, this);\n hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.off(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n hls.off(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n }\n onFpsDropLevelCapping(event, data) {\n // Don't add a restricted level more than once\n const level = this.hls.levels[data.droppedLevel];\n if (this.isLevelAllowed(level)) {\n this.restrictedLevels.push({\n bitrate: level.bitrate,\n height: level.height,\n width: level.width\n });\n }\n }\n onMediaAttaching(event, data) {\n this.media = data.media instanceof HTMLVideoElement ? data.media : null;\n this.clientRect = null;\n if (this.timer && this.hls.levels.length) {\n this.detectPlayerSize();\n }\n }\n onManifestParsed(event, data) {\n const hls = this.hls;\n this.restrictedLevels = [];\n this.firstLevel = data.firstLevel;\n if (hls.config.capLevelToPlayerSize && data.video) {\n // Start capping immediately if the manifest has signaled video codecs\n this.startCapping();\n }\n }\n onLevelsUpdated(event, data) {\n if (this.timer && isFiniteNumber(this.autoLevelCapping)) {\n this.detectPlayerSize();\n }\n }\n\n // Only activate capping when playing a video stream; otherwise, multi-bitrate audio-only streams will be restricted\n // to the first level\n onBufferCodecs(event, data) {\n const hls = this.hls;\n if (hls.config.capLevelToPlayerSize && data.video) {\n // If the manifest did not signal a video codec capping has been deferred until we're certain video is present\n this.startCapping();\n }\n }\n onMediaDetaching() {\n this.stopCapping();\n this.media = null;\n }\n detectPlayerSize() {\n if (this.media) {\n if (this.mediaHeight <= 0 || this.mediaWidth <= 0) {\n this.clientRect = null;\n return;\n }\n const levels = this.hls.levels;\n if (levels.length) {\n const hls = this.hls;\n const maxLevel = this.getMaxLevel(levels.length - 1);\n if (maxLevel !== this.autoLevelCapping) {\n hls.logger.log(`Setting autoLevelCapping to ${maxLevel}: ${levels[maxLevel].height}p@${levels[maxLevel].bitrate} for media ${this.mediaWidth}x${this.mediaHeight}`);\n }\n hls.autoLevelCapping = maxLevel;\n if (hls.autoLevelEnabled && hls.autoLevelCapping > this.autoLevelCapping && this.streamController) {\n // if auto level capping has a higher value for the previous one, flush the buffer using nextLevelSwitch\n // usually happen when the user go to the fullscreen mode.\n this.streamController.nextLevelSwitch();\n }\n this.autoLevelCapping = hls.autoLevelCapping;\n }\n }\n }\n\n /*\n * returns level should be the one with the dimensions equal or greater than the media (player) dimensions (so the video will be downscaled)\n */\n getMaxLevel(capLevelIndex) {\n const levels = this.hls.levels;\n if (!levels.length) {\n return -1;\n }\n const validLevels = levels.filter((level, index) => this.isLevelAllowed(level) && index <= capLevelIndex);\n this.clientRect = null;\n return CapLevelController.getMaxLevelByMediaSize(validLevels, this.mediaWidth, this.mediaHeight);\n }\n startCapping() {\n if (this.timer) {\n // Don't reset capping if started twice; this can happen if the manifest signals a video codec\n return;\n }\n this.autoLevelCapping = Number.POSITIVE_INFINITY;\n self.clearInterval(this.timer);\n this.timer = self.setInterval(this.detectPlayerSize.bind(this), 1000);\n this.detectPlayerSize();\n }\n stopCapping() {\n this.restrictedLevels = [];\n this.firstLevel = -1;\n this.autoLevelCapping = Number.POSITIVE_INFINITY;\n if (this.timer) {\n self.clearInterval(this.timer);\n this.timer = undefined;\n }\n }\n getDimensions() {\n if (this.clientRect) {\n return this.clientRect;\n }\n const media = this.media;\n const boundsRect = {\n width: 0,\n height: 0\n };\n if (media) {\n const clientRect = media.getBoundingClientRect();\n boundsRect.width = clientRect.width;\n boundsRect.height = clientRect.height;\n if (!boundsRect.width && !boundsRect.height) {\n // When the media element has no width or height (equivalent to not being in the DOM),\n // then use its width and height attributes (media.width, media.height)\n boundsRect.width = clientRect.right - clientRect.left || media.width || 0;\n boundsRect.height = clientRect.bottom - clientRect.top || media.height || 0;\n }\n }\n this.clientRect = boundsRect;\n return boundsRect;\n }\n get mediaWidth() {\n return this.getDimensions().width * this.contentScaleFactor;\n }\n get mediaHeight() {\n return this.getDimensions().height * this.contentScaleFactor;\n }\n get contentScaleFactor() {\n let pixelRatio = 1;\n if (!this.hls.config.ignoreDevicePixelRatio) {\n try {\n pixelRatio = self.devicePixelRatio;\n } catch (e) {\n /* no-op */\n }\n }\n return Math.min(pixelRatio, this.hls.config.maxDevicePixelRatio);\n }\n isLevelAllowed(level) {\n const restrictedLevels = this.restrictedLevels;\n return !restrictedLevels.some(restrictedLevel => {\n return level.bitrate === restrictedLevel.bitrate && level.width === restrictedLevel.width && level.height === restrictedLevel.height;\n });\n }\n static getMaxLevelByMediaSize(levels, width, height) {\n if (!(levels != null && levels.length)) {\n return -1;\n }\n\n // Levels can have the same dimensions but differing bandwidths - since levels are ordered, we can look to the next\n // to determine whether we've chosen the greatest bandwidth for the media's dimensions\n const atGreatestBandwidth = (curLevel, nextLevel) => {\n if (!nextLevel) {\n return true;\n }\n return curLevel.width !== nextLevel.width || curLevel.height !== nextLevel.height;\n };\n\n // If we run through the loop without breaking, the media's dimensions are greater than every level, so default to\n // the max level\n let maxLevelIndex = levels.length - 1;\n // Prevent changes in aspect-ratio from causing capping to toggle back and forth\n const squareSize = Math.max(width, height);\n for (let i = 0; i < levels.length; i += 1) {\n const level = levels[i];\n if ((level.width >= squareSize || level.height >= squareSize) && atGreatestBandwidth(level, levels[i + 1])) {\n maxLevelIndex = i;\n break;\n }\n }\n return maxLevelIndex;\n }\n}\n\n/**\n * Common Media Object Type\n *\n * @internal\n */\nconst CmObjectType = {\n /**\n * text file, such as a manifest or playlist\n */\n MANIFEST: 'm',\n /**\n * audio only\n */\n AUDIO: 'a',\n /**\n * video only\n */\n VIDEO: 'v',\n /**\n * muxed audio and video\n */\n MUXED: 'av',\n /**\n * init segment\n */\n INIT: 'i',\n /**\n * caption or subtitle\n */\n CAPTION: 'c',\n /**\n * ISOBMFF timed text track\n */\n TIMED_TEXT: 'tt',\n /**\n * cryptographic key, license or certificate.\n */\n KEY: 'k',\n /**\n * other\n */\n OTHER: 'o'\n};\n\n/**\n * Common Media Client Data Object Type\n *\n * @group CMCD\n *\n * @beta\n *\n * @enum\n */\nconst CmcdObjectType = CmObjectType;\n\n/**\n * Common Media Streaming Format\n *\n * @internal\n */\nconst CmStreamingFormat = {\n /**\n * HTTP Live Streaming (HLS)\n */\n HLS: 'h'};\n\n/**\n * Common Media Client Data Streaming Format\n *\n * @group CMCD\n *\n * @enum\n *\n * @beta\n */\nconst CmcdStreamingFormat = CmStreamingFormat;\n\n/**\n * Structured Field Item\n *\n * @group Structured Field\n *\n * @beta\n */\nclass SfItem {\n constructor(value, params) {\n if (Array.isArray(value)) {\n value = value.map(v => v instanceof SfItem ? v : new SfItem(v));\n }\n this.value = value;\n this.params = params;\n }\n}\n\nconst DICT = 'Dict';\n\nfunction format(value) {\n if (Array.isArray(value)) {\n return JSON.stringify(value);\n }\n if (value instanceof Map) {\n return 'Map{}';\n }\n if (value instanceof Set) {\n return 'Set{}';\n }\n if (typeof value === 'object') {\n return JSON.stringify(value);\n }\n return String(value);\n}\nfunction throwError(action, src, type, cause) {\n return new Error(`failed to ${action} \"${format(src)}\" as ${type}`, {\n cause\n });\n}\n\nfunction serializeError(src, type, cause) {\n return throwError('serialize', src, type, cause);\n}\n\n/**\n * A class to represent structured field tokens when `Symbol` is not available.\n *\n * @group Structured Field\n *\n * @beta\n */\nclass SfToken {\n constructor(description) {\n this.description = description;\n }\n}\n\nconst BARE_ITEM = 'Bare Item';\n\nconst BOOLEAN = 'Boolean';\n\n// 4.1.9. Serializing a Boolean\n//\n// Given a Boolean as input_boolean, return an ASCII string suitable for\n// use in a HTTP field value.\n//\n// 1. If input_boolean is not a boolean, fail serialization.\n//\n// 2. Let output be an empty string.\n//\n// 3. Append \"?\" to output.\n//\n// 4. If input_boolean is true, append \"1\" to output.\n//\n// 5. If input_boolean is false, append \"0\" to output.\n//\n// 6. Return output.\nfunction serializeBoolean(value) {\n if (typeof value !== 'boolean') {\n throw serializeError(value, BOOLEAN);\n }\n return value ? '?1' : '?0';\n}\n\n/**\n * Encodes binary data to base64\n *\n * @param binary - The binary data to encode\n * @returns The base64 encoded string\n *\n * @group Utils\n *\n * @beta\n */\nfunction encodeBase64(binary) {\n return btoa(String.fromCharCode(...binary));\n}\n\nconst BYTES = 'Byte Sequence';\n\n// 4.1.8. Serializing a Byte Sequence\n//\n// Given a Byte Sequence as input_bytes, return an ASCII string suitable\n// for use in a HTTP field value.\n//\n// 1. If input_bytes is not a sequence of bytes, fail serialization.\n//\n// 2. Let output be an empty string.\n//\n// 3. Append \":\" to output.\n//\n// 4. Append the result of base64-encoding input_bytes as per\n// [RFC4648], Section 4, taking account of the requirements below.\n//\n// 5. Append \":\" to output.\n//\n// 6. Return output.\n//\n// The encoded data is required to be padded with \"=\", as per [RFC4648],\n// Section 3.2.\n//\n// Likewise, encoded data SHOULD have pad bits set to zero, as per\n// [RFC4648], Section 3.5, unless it is not possible to do so due to\n// implementation constraints.\nfunction serializeByteSequence(value) {\n if (ArrayBuffer.isView(value) === false) {\n throw serializeError(value, BYTES);\n }\n return `:${encodeBase64(value)}:`;\n}\n\nconst INTEGER = 'Integer';\n\nfunction isInvalidInt(value) {\n return value < -999999999999999 || 999999999999999 < value;\n}\n\n// 4.1.4. Serializing an Integer\n//\n// Given an Integer as input_integer, return an ASCII string suitable\n// for use in a HTTP field value.\n//\n// 1. If input_integer is not an integer in the range of\n// -999,999,999,999,999 to 999,999,999,999,999 inclusive, fail\n// serialization.\n//\n// 2. Let output be an empty string.\n//\n// 3. If input_integer is less than (but not equal to) 0, append \"-\" to\n// output.\n//\n// 4. Append input_integer's numeric value represented in base 10 using\n// only decimal digits to output.\n//\n// 5. Return output.\nfunction serializeInteger(value) {\n if (isInvalidInt(value)) {\n throw serializeError(value, INTEGER);\n }\n return value.toString();\n}\n\n// 4.1.10. Serializing a Date\n//\n// Given a Date as input_integer, return an ASCII string suitable for\n// use in an HTTP field value.\n// 1. Let output be \"@\".\n// 2. Append to output the result of running Serializing an Integer\n// with input_date (Section 4.1.4).\n// 3. Return output.\nfunction serializeDate(value) {\n return `@${serializeInteger(value.getTime() / 1000)}`;\n}\n\n/**\n * This implements the rounding procedure described in step 2 of the \"Serializing a Decimal\" specification.\n * This rounding style is known as \"even rounding\", \"banker's rounding\", or \"commercial rounding\".\n *\n * @param value - The value to round\n * @param precision - The number of decimal places to round to\n * @returns The rounded value\n *\n * @group Utils\n *\n * @beta\n */\nfunction roundToEven(value, precision) {\n if (value < 0) {\n return -roundToEven(-value, precision);\n }\n const decimalShift = Math.pow(10, precision);\n const isEquidistant = Math.abs(value * decimalShift % 1 - 0.5) < Number.EPSILON;\n if (isEquidistant) {\n // If the tail of the decimal place is 'equidistant' we round to the nearest even value\n const flooredValue = Math.floor(value * decimalShift);\n return (flooredValue % 2 === 0 ? flooredValue : flooredValue + 1) / decimalShift;\n } else {\n // Otherwise, proceed as normal\n return Math.round(value * decimalShift) / decimalShift;\n }\n}\n\nconst DECIMAL = 'Decimal';\n\n// 4.1.5. Serializing a Decimal\n//\n// Given a decimal number as input_decimal, return an ASCII string\n// suitable for use in a HTTP field value.\n//\n// 1. If input_decimal is not a decimal number, fail serialization.\n//\n// 2. If input_decimal has more than three significant digits to the\n// right of the decimal point, round it to three decimal places,\n// rounding the final digit to the nearest value, or to the even\n// value if it is equidistant.\n//\n// 3. If input_decimal has more than 12 significant digits to the left\n// of the decimal point after rounding, fail serialization.\n//\n// 4. Let output be an empty string.\n//\n// 5. If input_decimal is less than (but not equal to) 0, append \"-\"\n// to output.\n//\n// 6. Append input_decimal's integer component represented in base 10\n// (using only decimal digits) to output; if it is zero, append\n// \"0\".\n//\n// 7. Append \".\" to output.\n//\n// 8. If input_decimal's fractional component is zero, append \"0\" to\n// output.\n//\n// 9. Otherwise, append the significant digits of input_decimal's\n// fractional component represented in base 10 (using only decimal\n// digits) to output.\n//\n// 10. Return output.\nfunction serializeDecimal(value) {\n const roundedValue = roundToEven(value, 3); // round to 3 decimal places\n if (Math.floor(Math.abs(roundedValue)).toString().length > 12) {\n throw serializeError(value, DECIMAL);\n }\n const stringValue = roundedValue.toString();\n return stringValue.includes('.') ? stringValue : `${stringValue}.0`;\n}\n\nconst STRING = 'String';\n\nconst STRING_REGEX = /[\\x00-\\x1f\\x7f]+/;\n\n// 4.1.6. Serializing a String\n//\n// Given a String as input_string, return an ASCII string suitable for\n// use in a HTTP field value.\n//\n// 1. Convert input_string into a sequence of ASCII characters; if\n// conversion fails, fail serialization.\n//\n// 2. If input_string contains characters in the range %x00-1f or %x7f\n// (i.e., not in VCHAR or SP), fail serialization.\n//\n// 3. Let output be the string DQUOTE.\n//\n// 4. For each character char in input_string:\n//\n// 1. If char is \"\\\" or DQUOTE:\n//\n// 1. Append \"\\\" to output.\n//\n// 2. Append char to output.\n//\n// 5. Append DQUOTE to output.\n//\n// 6. Return output.\nfunction serializeString(value) {\n if (STRING_REGEX.test(value)) {\n throw serializeError(value, STRING);\n }\n return `\"${value.replace(/\\\\/g, `\\\\\\\\`).replace(/\"/g, `\\\\\"`)}\"`;\n}\n\n/**\n * Converts a symbol to a string.\n *\n * @param symbol - The symbol to convert.\n *\n * @returns The string representation of the symbol.\n *\n * @internal\n */\nfunction symbolToStr(symbol) {\n return symbol.description || symbol.toString().slice(7, -1);\n}\n\nconst TOKEN = 'Token';\n\nfunction serializeToken(token) {\n const value = symbolToStr(token);\n if (/^([a-zA-Z*])([!#$%&'*+\\-.^_`|~\\w:/]*)$/.test(value) === false) {\n throw serializeError(value, TOKEN);\n }\n return value;\n}\n\n// 4.1.3.1. Serializing a Bare Item\n//\n// Given an Item as input_item, return an ASCII string suitable for use\n// in a HTTP field value.\n//\n// 1. If input_item is an Integer, return the result of running\n// Serializing an Integer (Section 4.1.4) with input_item.\n//\n// 2. If input_item is a Decimal, return the result of running\n// Serializing a Decimal (Section 4.1.5) with input_item.\n//\n// 3. If input_item is a String, return the result of running\n// Serializing a String (Section 4.1.6) with input_item.\n//\n// 4. If input_item is a Token, return the result of running\n// Serializing a Token (Section 4.1.7) with input_item.\n//\n// 5. If input_item is a Boolean, return the result of running\n// Serializing a Boolean (Section 4.1.9) with input_item.\n//\n// 6. If input_item is a Byte Sequence, return the result of running\n// Serializing a Byte Sequence (Section 4.1.8) with input_item.\n//\n// 7. If input_item is a Date, return the result of running Serializing\n// a Date (Section 4.1.10) with input_item.\n//\n// 8. Otherwise, fail serialization.\nfunction serializeBareItem(value) {\n switch (typeof value) {\n case 'number':\n if (!isFiniteNumber(value)) {\n throw serializeError(value, BARE_ITEM);\n }\n if (Number.isInteger(value)) {\n return serializeInteger(value);\n }\n return serializeDecimal(value);\n case 'string':\n return serializeString(value);\n case 'symbol':\n return serializeToken(value);\n case 'boolean':\n return serializeBoolean(value);\n case 'object':\n if (value instanceof Date) {\n return serializeDate(value);\n }\n if (value instanceof Uint8Array) {\n return serializeByteSequence(value);\n }\n if (value instanceof SfToken) {\n return serializeToken(value);\n }\n default:\n // fail\n throw serializeError(value, BARE_ITEM);\n }\n}\n\nconst KEY = 'Key';\n\n// 4.1.1.3. Serializing a Key\n//\n// Given a key as input_key, return an ASCII string suitable for use in\n// a HTTP field value.\n//\n// 1. Convert input_key into a sequence of ASCII characters; if\n// conversion fails, fail serialization.\n//\n// 2. If input_key contains characters not in lcalpha, DIGIT, \"_\", \"-\",\n// \".\", or \"*\" fail serialization.\n//\n// 3. If the first character of input_key is not lcalpha or \"*\", fail\n// serialization.\n//\n// 4. Let output be an empty string.\n//\n// 5. Append input_key to output.\n//\n// 6. Return output.\nfunction serializeKey(value) {\n if (/^[a-z*][a-z0-9\\-_.*]*$/.test(value) === false) {\n throw serializeError(value, KEY);\n }\n return value;\n}\n\n// 4.1.1.2. Serializing Parameters\n//\n// Given an ordered Dictionary as input_parameters (each member having a\n// param_name and a param_value), return an ASCII string suitable for\n// use in a HTTP field value.\n//\n// 1. Let output be an empty string.\n//\n// 2. For each param_name with a value of param_value in\n// input_parameters:\n//\n// 1. Append \";\" to output.\n//\n// 2. Append the result of running Serializing a Key\n// (Section 4.1.1.3) with param_name to output.\n//\n// 3. If param_value is not Boolean true:\n//\n// 1. Append \"=\" to output.\n//\n// 2. Append the result of running Serializing a bare Item\n// (Section 4.1.3.1) with param_value to output.\n//\n// 3. Return output.\nfunction serializeParams(params) {\n if (params == null) {\n return '';\n }\n return Object.entries(params).map(([key, value]) => {\n if (value === true) {\n return `;${serializeKey(key)}`; // omit true\n }\n return `;${serializeKey(key)}=${serializeBareItem(value)}`;\n }).join('');\n}\n\n// 4.1.3. Serializing an Item\n//\n// Given an Item as bare_item and Parameters as item_parameters, return\n// an ASCII string suitable for use in a HTTP field value.\n//\n// 1. Let output be an empty string.\n//\n// 2. Append the result of running Serializing a Bare Item\n// Section 4.1.3.1 with bare_item to output.\n//\n// 3. Append the result of running Serializing Parameters\n// Section 4.1.1.2 with item_parameters to output.\n//\n// 4. Return output.\nfunction serializeItem(value) {\n if (value instanceof SfItem) {\n return `${serializeBareItem(value.value)}${serializeParams(value.params)}`;\n } else {\n return serializeBareItem(value);\n }\n}\n\n// 4.1.1.1. Serializing an Inner List\n//\n// Given an array of (member_value, parameters) tuples as inner_list,\n// and parameters as list_parameters, return an ASCII string suitable\n// for use in a HTTP field value.\n//\n// 1. Let output be the string \"(\".\n//\n// 2. For each (member_value, parameters) of inner_list:\n//\n// 1. Append the result of running Serializing an Item\n// (Section 4.1.3) with (member_value, parameters) to output.\n//\n// 2. If more values remain in inner_list, append a single SP to\n// output.\n//\n// 3. Append \")\" to output.\n//\n// 4. Append the result of running Serializing Parameters\n// (Section 4.1.1.2) with list_parameters to output.\n//\n// 5. Return output.\nfunction serializeInnerList(value) {\n return `(${value.value.map(serializeItem).join(' ')})${serializeParams(value.params)}`;\n}\n\n// 4.1.2. Serializing a Dictionary\n//\n// Given an ordered Dictionary as input_dictionary (each member having a\n// member_name and a tuple value of (member_value, parameters)), return\n// an ASCII string suitable for use in a HTTP field value.\n//\n// 1. Let output be an empty string.\n//\n// 2. For each member_name with a value of (member_value, parameters)\n// in input_dictionary:\n//\n// 1. Append the result of running Serializing a Key\n// (Section 4.1.1.3) with member's member_name to output.\n//\n// 2. If member_value is Boolean true:\n//\n// 1. Append the result of running Serializing Parameters\n// (Section 4.1.1.2) with parameters to output.\n//\n// 3. Otherwise:\n//\n// 1. Append \"=\" to output.\n//\n// 2. If member_value is an array, append the result of running\n// Serializing an Inner List (Section 4.1.1.1) with\n// (member_value, parameters) to output.\n//\n// 3. Otherwise, append the result of running Serializing an\n// Item (Section 4.1.3) with (member_value, parameters) to\n// output.\n//\n// 4. If more members remain in input_dictionary:\n//\n// 1. Append \",\" to output.\n//\n// 2. Append a single SP to output.\n//\n// 3. Return output.\nfunction serializeDict(dict, options = {\n whitespace: true\n}) {\n if (typeof dict !== 'object' || dict == null) {\n throw serializeError(dict, DICT);\n }\n const entries = dict instanceof Map ? dict.entries() : Object.entries(dict);\n const optionalWhiteSpace = (options === null || options === void 0 ? void 0 : options.whitespace) ? ' ' : '';\n return Array.from(entries).map(([key, item]) => {\n if (item instanceof SfItem === false) {\n item = new SfItem(item);\n }\n let output = serializeKey(key);\n if (item.value === true) {\n output += serializeParams(item.params);\n } else {\n output += '=';\n if (Array.isArray(item.value)) {\n output += serializeInnerList(item);\n } else {\n output += serializeItem(item);\n }\n }\n return output;\n }).join(`,${optionalWhiteSpace}`);\n}\n\n/**\n * Encode an object into a structured field dictionary\n *\n * @param value - The structured field dictionary to encode\n * @param options - Encoding options\n *\n * @returns The structured field string\n *\n * @group Structured Field\n *\n * @beta\n */\nfunction encodeSfDict(value, options) {\n return serializeDict(value, options);\n}\n\n/**\n * CMCD object header name.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_OBJECT = 'CMCD-Object';\n\n/**\n * CMCD request header name.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_REQUEST = 'CMCD-Request';\n\n/**\n * CMCD session header name.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_SESSION = 'CMCD-Session';\n\n/**\n * CMCD status header name.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_STATUS = 'CMCD-Status';\n\n/**\n * The map of CMCD keys to their appropriate header shard.\n *\n * @group CMCD\n *\n * @internal\n */\nconst CMCD_HEADER_MAP = {\n // Object\n br: CMCD_OBJECT,\n ab: CMCD_OBJECT,\n d: CMCD_OBJECT,\n ot: CMCD_OBJECT,\n tb: CMCD_OBJECT,\n tpb: CMCD_OBJECT,\n lb: CMCD_OBJECT,\n tab: CMCD_OBJECT,\n lab: CMCD_OBJECT,\n url: CMCD_OBJECT,\n // Request\n pb: CMCD_REQUEST,\n bl: CMCD_REQUEST,\n tbl: CMCD_REQUEST,\n dl: CMCD_REQUEST,\n ltc: CMCD_REQUEST,\n mtp: CMCD_REQUEST,\n nor: CMCD_REQUEST,\n nrr: CMCD_REQUEST,\n rc: CMCD_REQUEST,\n sn: CMCD_REQUEST,\n sta: CMCD_REQUEST,\n su: CMCD_REQUEST,\n ttfb: CMCD_REQUEST,\n ttfbb: CMCD_REQUEST,\n ttlb: CMCD_REQUEST,\n cmsdd: CMCD_REQUEST,\n cmsds: CMCD_REQUEST,\n smrt: CMCD_REQUEST,\n df: CMCD_REQUEST,\n cs: CMCD_REQUEST,\n // TODO: Which header to put the `ts` field is not defined yet.\n ts: CMCD_REQUEST,\n // Session\n cid: CMCD_SESSION,\n pr: CMCD_SESSION,\n sf: CMCD_SESSION,\n sid: CMCD_SESSION,\n st: CMCD_SESSION,\n v: CMCD_SESSION,\n msd: CMCD_SESSION,\n // Status\n bs: CMCD_STATUS,\n bsd: CMCD_STATUS,\n cdn: CMCD_STATUS,\n rtp: CMCD_STATUS,\n bg: CMCD_STATUS,\n pt: CMCD_STATUS,\n ec: CMCD_STATUS,\n e: CMCD_STATUS\n};\n\n/**\n * CMCD header fields.\n *\n * @group CMCD\n *\n * @enum\n *\n * @beta\n */\nconst CmcdHeaderField = {\n /**\n * keys whose values vary with each request.\n */\n REQUEST: CMCD_REQUEST};\n\nfunction createHeaderMap(headerMap) {\n return Object.keys(headerMap).reduce((acc, field) => {\n var _a;\n (_a = headerMap[field]) === null || _a === void 0 ? void 0 : _a.forEach(key => acc[key] = field);\n return acc;\n }, {});\n}\n/**\n * Group a CMCD data object into header shards\n *\n * @param cmcd - The CMCD data object to convert.\n * @param customHeaderMap - A map of CMCD header fields to custom CMCD keys.\n *\n * @returns The CMCD header shards.\n *\n * @group CMCD\n *\n * @beta\n */\nfunction groupCmcdHeaders(cmcd, customHeaderMap) {\n const result = {};\n if (!cmcd) {\n return result;\n }\n const keys = Object.keys(cmcd);\n const custom = customHeaderMap ? createHeaderMap(customHeaderMap) : {};\n return keys.reduce((acc, key) => {\n var _a;\n const field = CMCD_HEADER_MAP[key] || custom[key] || CmcdHeaderField.REQUEST;\n const data = (_a = acc[field]) !== null && _a !== void 0 ? _a : acc[field] = {};\n data[key] = cmcd[key];\n return acc;\n }, result);\n}\n\n/**\n * Checks if the given key is a token field.\n *\n * @param key - The key to check.\n *\n * @returns `true` if the key is a token field.\n *\n * @internal\n */\nfunction isTokenField(key) {\n return ['ot', 'sf', 'st', 'e', 'sta'].includes(key);\n}\n\n/**\n * Checks if the given value is valid\n *\n * @param value - The value to check.\n *\n * @returns `true` if the key is a value is valid.\n *\n * @internal\n */\nfunction isValid(value) {\n if (typeof value === 'number') {\n return isFiniteNumber(value);\n }\n return value != null && value !== '' && value !== false;\n}\n\n/**\n * CMCD event mode variable name.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_EVENT_MODE = 'event';\n\n/**\n * Constructs a relative path from a URL.\n *\n * @param url - The destination URL\n * @param base - The base URL\n * @returns The relative path\n *\n * @group Utils\n *\n * @beta\n */\nfunction urlToRelativePath(url, base) {\n const to = new URL(url);\n const from = new URL(base);\n if (to.origin !== from.origin) {\n return url;\n }\n const toPath = to.pathname.split('/').slice(1);\n const fromPath = from.pathname.split('/').slice(1, -1);\n // remove common parents\n while (toPath[0] === fromPath[0]) {\n toPath.shift();\n fromPath.shift();\n }\n // add back paths\n while (fromPath.length) {\n fromPath.shift();\n toPath.unshift('..');\n }\n const relativePath = toPath.join('/');\n // preserve query parameters and hash of the destination url\n return relativePath + to.search + to.hash;\n}\n\nconst toRounded = value => Math.round(value);\nconst toUrlSafe = (value, options) => {\n if (Array.isArray(value)) {\n return value.map(item => toUrlSafe(item, options));\n }\n if (value instanceof SfItem && typeof value.value === 'string') {\n return new SfItem(toUrlSafe(value.value, options), value.params);\n } else {\n if (options.baseUrl) {\n value = urlToRelativePath(value, options.baseUrl);\n }\n return options.version === 1 ? encodeURIComponent(value) : value;\n }\n};\nconst toHundred = value => toRounded(value / 100) * 100;\nconst nor = (value, options) => {\n let norValue = value;\n if (options.version >= 2) {\n if (value instanceof SfItem && typeof value.value === 'string') {\n norValue = new SfItem([value]);\n } else if (typeof value === 'string') {\n norValue = [value];\n }\n }\n return toUrlSafe(norValue, options);\n};\n/**\n * The default formatters for CMCD values.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_FORMATTER_MAP = {\n /**\n * Bitrate (kbps) rounded integer\n */\n br: toRounded,\n /**\n * Duration (milliseconds) rounded integer\n */\n d: toRounded,\n /**\n * Buffer Length (milliseconds) rounded nearest 100ms\n */\n bl: toHundred,\n /**\n * Deadline (milliseconds) rounded nearest 100ms\n */\n dl: toHundred,\n /**\n * Measured Throughput (kbps) rounded nearest 100kbps\n */\n mtp: toHundred,\n /**\n * Next Object Request URL encoded\n */\n nor,\n /**\n * Requested maximum throughput (kbps) rounded nearest 100kbps\n */\n rtp: toHundred,\n /**\n * Top Bitrate (kbps) rounded integer\n */\n tb: toRounded\n};\n\n/**\n * CMCD request mode variable name.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_REQUEST_MODE = 'request';\n\n/**\n * CMCD response mode variable name.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_RESPONSE_MODE = 'response';\n\n/**\n * Defines the common keys for CMCD (Common Media Client Data) version 2.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_COMMON_KEYS = ['ab', 'bg', 'bl', 'br', 'bs', 'bsd', 'cdn', 'cid', 'cs', 'df', 'ec', 'lab', 'lb', 'ltc', 'msd', 'mtp', 'pb', 'pr', 'pt', 'sf', 'sid', 'sn', 'st', 'sta', 'tab', 'tb', 'tbl', 'tpb', 'ts', 'v'];\n\n/**\n * Defines the event-specific keys for CMCD (Common Media Client Data) version 2.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_EVENT_KEYS = ['e'];\n\nconst CUSTOM_KEY_REGEX = /^[a-zA-Z0-9-.]+-[a-zA-Z0-9-.]+$/;\n/**\n * Check if a key is a custom key.\n *\n * @param key - The key to check.\n *\n * @returns `true` if the key is a custom key, `false` otherwise.\n *\n * @group CMCD\n *\n * @beta\n */\nfunction isCmcdCustomKey(key) {\n return CUSTOM_KEY_REGEX.test(key);\n}\n\n/**\n * Check if a key is a valid CMCD event key.\n *\n * @param key - The key to check.\n *\n * @returns `true` if the key is a valid CMCD event key, `false` otherwise.\n *\n * @group CMCD\n *\n * @beta\n *\n * @example\n * {@includeCode ../../test/cmcd/isCmcdEventKey.test.ts#example}\n */\nfunction isCmcdEventKey(key) {\n return CMCD_COMMON_KEYS.includes(key) || CMCD_EVENT_KEYS.includes(key) || isCmcdCustomKey(key);\n}\n\n/**\n * Defines the request-specific keys for CMCD (Common Media Client Data) version 2.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_REQUEST_KEYS = ['d', 'dl', 'nor', 'ot', 'rtp', 'su'];\n\n/**\n * Check if a key is a valid CMCD request key.\n *\n * @param key - The key to check.\n *\n * @returns `true` if the key is a valid CMCD request key, `false` otherwise.\n *\n * @group CMCD\n *\n * @beta\n *\n * @example\n * {@includeCode ../../test/cmcd/isCmcdRequestKey.test.ts#example}\n */\nfunction isCmcdRequestKey(key) {\n return CMCD_COMMON_KEYS.includes(key) || CMCD_REQUEST_KEYS.includes(key) || isCmcdCustomKey(key);\n}\n\n/**\n * CMCD v2 - Response-only and timing keys.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_RESPONSE_KEYS = ['cmsdd', 'cmsds', 'rc', 'smrt', 'ttfb', 'ttfbb', 'ttlb', 'url'];\n\n/**\n * Check if a key is a valid CMCD response key.\n *\n * @param key - The key to check.\n *\n * @returns `true` if the key is a valid CMCD request key, `false` otherwise.\n *\n * @group CMCD\n *\n * @beta\n *\n * @example\n * {@includeCode ../../test/cmcd/isCmcdResponseKey.test.ts#example}\n */\nfunction isCmcdResponseKey(key) {\n return CMCD_COMMON_KEYS.includes(key) || CMCD_REQUEST_KEYS.includes(key) || CMCD_RESPONSE_KEYS.includes(key) || isCmcdCustomKey(key);\n}\n\n/**\n * Defines the keys for CMCD (Common Media Client Data) version 1.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_V1_KEYS = ['bl', 'br', 'bs', 'cid', 'd', 'dl', 'mtp', 'nor', 'nrr', 'ot', 'pr', 'rtp', 'sf', 'sid', 'st', 'su', 'tb', 'v'];\n\n/**\n * Filter function for CMCD v1 keys.\n *\n * @param key - The CMCD key to filter.\n *\n * @returns `true` if the key should be included, `false` otherwise.\n *\n * @group CMCD\n *\n * @beta\n *\n * @example\n * {@includeCode ../../test/cmcd/isCmcdV1Key.test.ts#example}\n */\nfunction isCmcdV1Key(key) {\n return CMCD_V1_KEYS.includes(key) || isCmcdCustomKey(key);\n}\n\nconst filterMap = {\n [CMCD_RESPONSE_MODE]: isCmcdResponseKey,\n [CMCD_EVENT_MODE]: isCmcdEventKey,\n [CMCD_REQUEST_MODE]: isCmcdRequestKey\n};\n/**\n * Convert a generic object to CMCD data.\n *\n * @param obj - The CMCD object to process.\n * @param options - Options for encoding.\n *\n * @group CMCD\n *\n * @beta\n */\nfunction prepareCmcdData(obj, options = {}) {\n const results = {};\n if (obj == null || typeof obj !== 'object') {\n return results;\n }\n const version = options.version || obj['v'] || 1;\n const reportingMode = options.reportingMode || CMCD_REQUEST_MODE;\n const keyFilter = version === 1 ? isCmcdV1Key : filterMap[reportingMode];\n // Filter keys based on the version, reporting mode and options\n let keys = Object.keys(obj).filter(keyFilter);\n const filter = options.filter;\n if (typeof filter === 'function') {\n keys = keys.filter(filter);\n }\n // Ensure all required keys are present before sorting\n const needsTimestamp = reportingMode === CMCD_RESPONSE_MODE || reportingMode === CMCD_EVENT_MODE;\n if (needsTimestamp && !keys.includes('ts')) {\n keys.push('ts');\n }\n if (version > 1 && !keys.includes('v')) {\n keys.push('v');\n }\n const formatters = _extends({}, CMCD_FORMATTER_MAP, options.formatters);\n const formatterOptions = {\n version,\n reportingMode,\n baseUrl: options.baseUrl\n };\n keys.sort().forEach(key => {\n let value = obj[key];\n const formatter = formatters[key];\n if (typeof formatter === 'function') {\n value = formatter(value, formatterOptions);\n }\n // Version should only be reported if not equal to 1.\n if (key === 'v') {\n if (version === 1) {\n return;\n } else {\n value = version;\n }\n }\n // Playback rate should only be sent if not equal to 1.\n if (key == 'pr' && value === 1) {\n return;\n }\n // Ensure a timestamp is set for response and event modes\n if (needsTimestamp && key === 'ts' && !isFiniteNumber(value)) {\n value = Date.now();\n }\n // ignore invalid values\n if (!isValid(value)) {\n return;\n }\n if (isTokenField(key) && typeof value === 'string') {\n value = new SfToken(value);\n }\n results[key] = value;\n });\n return results;\n}\n\n/**\n * Convert a CMCD data object to request headers\n *\n * @param cmcd - The CMCD data object to convert.\n * @param options - Options for encoding the CMCD object.\n *\n * @returns The CMCD header shards.\n *\n * @group CMCD\n *\n * @beta\n *\n * @example\n * {@includeCode ../../test/cmcd/toCmcdHeaders.test.ts#example}\n */\nfunction toCmcdHeaders(cmcd, options = {}) {\n const result = {};\n if (!cmcd) {\n return result;\n }\n const data = prepareCmcdData(cmcd, options);\n const shards = groupCmcdHeaders(data, options === null || options === void 0 ? void 0 : options.customHeaderMap);\n return Object.entries(shards).reduce((acc, [field, value]) => {\n const shard = encodeSfDict(value, {\n whitespace: false\n });\n if (shard) {\n acc[field] = shard;\n }\n return acc;\n }, result);\n}\n\n/**\n * Append CMCD query args to a header object.\n *\n * @param headers - The headers to append to.\n * @param cmcd - The CMCD object to append.\n * @param options - Encode options.\n *\n * @returns The headers with the CMCD header shards appended.\n *\n * @group CMCD\n *\n * @beta\n *\n * @example\n * {@includeCode ../../test/cmcd/appendCmcdHeaders.test.ts#example}\n */\nfunction appendCmcdHeaders(headers, cmcd, options) {\n return _extends(headers, toCmcdHeaders(cmcd, options));\n}\n\n/**\n * CMCD parameter name.\n *\n * @group CMCD\n *\n * @beta\n */\nconst CMCD_PARAM = 'CMCD';\n\n/**\n * Encode a CMCD object to a string.\n *\n * @param cmcd - The CMCD object to encode.\n * @param options - Options for encoding.\n *\n * @returns The encoded CMCD string.\n *\n * @group CMCD\n *\n * @beta\n *\n * @example\n * {@includeCode ../../test/cmcd/encodeCmcd.test.ts#example}\n */\nfunction encodeCmcd(cmcd, options = {}) {\n if (!cmcd) {\n return '';\n }\n return encodeSfDict(prepareCmcdData(cmcd, options), {\n whitespace: false\n });\n}\n\n/**\n * Convert a CMCD data object to a URL encoded string.\n *\n * @param cmcd - The CMCD object to convert.\n * @param options - Options for encoding the CMCD object.\n *\n * @returns The URL encoded CMCD data.\n *\n * @group CMCD\n *\n * @beta\n */\nfunction toCmcdUrl(cmcd, options = {}) {\n if (!cmcd) {\n return '';\n }\n const params = encodeCmcd(cmcd, options);\n return encodeURIComponent(params);\n}\n\n/**\n * Convert a CMCD data object to a query arg.\n *\n * @param cmcd - The CMCD object to convert.\n * @param options - Options for encoding the CMCD object.\n *\n * @returns The CMCD query arg.\n *\n * @group CMCD\n *\n * @beta\n *\n * @example\n * {@includeCode ../../test/cmcd/toCmcdQuery.test.ts#example}\n */\nfunction toCmcdQuery(cmcd, options = {}) {\n if (!cmcd) {\n return '';\n }\n const value = toCmcdUrl(cmcd, options);\n return `${CMCD_PARAM}=${value}`;\n}\n\nconst REGEX = /CMCD=[^&#]+/;\n/**\n * Append CMCD query args to a URL.\n *\n * @param url - The URL to append to.\n * @param cmcd - The CMCD object to append.\n * @param options - Options for encoding the CMCD object.\n *\n * @returns The URL with the CMCD query args appended.\n *\n * @group CMCD\n *\n * @beta\n *\n * @example\n * {@includeCode ../../test/cmcd/appendCmcdQuery.test.ts#example}\n */\nfunction appendCmcdQuery(url, cmcd, options) {\n // TODO: Replace with URLSearchParams once we drop Safari < 10.1 & Chrome < 49 support.\n // https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams\n const query = toCmcdQuery(cmcd, options);\n if (!query) {\n return url;\n }\n if (REGEX.test(url)) {\n return url.replace(REGEX, query);\n }\n const separator = url.includes('?') ? '&' : '?';\n return `${url}${separator}${query}`;\n}\n\n/**\n * Controller to deal with Common Media Client Data (CMCD)\n * @see https://cdn.cta.tech/cta/media/media/resources/standards/pdfs/cta-5004-final.pdf\n */\nclass CMCDController {\n constructor(hls) {\n this.hls = void 0;\n this.config = void 0;\n this.media = void 0;\n this.sid = void 0;\n this.cid = void 0;\n this.useHeaders = false;\n this.includeKeys = void 0;\n this.initialized = false;\n this.starved = false;\n this.buffering = true;\n this.audioBuffer = void 0;\n this.videoBuffer = void 0;\n this.onWaiting = () => {\n if (this.initialized) {\n this.starved = true;\n }\n this.buffering = true;\n };\n this.onPlaying = () => {\n if (!this.initialized) {\n this.initialized = true;\n }\n this.buffering = false;\n };\n /**\n * Apply CMCD data to a manifest request.\n */\n this.applyPlaylistData = context => {\n try {\n this.apply(context, {\n ot: CmcdObjectType.MANIFEST,\n su: !this.initialized\n });\n } catch (error) {\n this.hls.logger.warn('Could not generate manifest CMCD data.', error);\n }\n };\n /**\n * Apply CMCD data to a segment request\n */\n this.applyFragmentData = context => {\n try {\n const {\n frag,\n part\n } = context;\n const level = this.hls.levels[frag.level];\n const ot = this.getObjectType(frag);\n const data = {\n d: (part || frag).duration * 1000,\n ot\n };\n if (ot === CmcdObjectType.VIDEO || ot === CmcdObjectType.AUDIO || ot == CmcdObjectType.MUXED) {\n data.br = level.bitrate / 1000;\n data.tb = this.getTopBandwidth(ot) / 1000;\n data.bl = this.getBufferLength(ot);\n }\n const next = part ? this.getNextPart(part) : this.getNextFrag(frag);\n if (next != null && next.url && next.url !== frag.url) {\n data.nor = next.url;\n }\n this.apply(context, data);\n } catch (error) {\n this.hls.logger.warn('Could not generate segment CMCD data.', error);\n }\n };\n this.hls = hls;\n const config = this.config = hls.config;\n const {\n cmcd\n } = config;\n if (cmcd != null) {\n config.pLoader = this.createPlaylistLoader();\n config.fLoader = this.createFragmentLoader();\n this.sid = cmcd.sessionId || hls.sessionId;\n this.cid = cmcd.contentId;\n this.useHeaders = cmcd.useHeaders === true;\n this.includeKeys = cmcd.includeKeys;\n this.registerListeners();\n }\n }\n registerListeners() {\n const hls = this.hls;\n hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.on(Events.MEDIA_DETACHED, this.onMediaDetached, this);\n hls.on(Events.BUFFER_CREATED, this.onBufferCreated, this);\n }\n unregisterListeners() {\n const hls = this.hls;\n hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.off(Events.MEDIA_DETACHED, this.onMediaDetached, this);\n hls.off(Events.BUFFER_CREATED, this.onBufferCreated, this);\n }\n destroy() {\n this.unregisterListeners();\n this.onMediaDetached();\n\n // @ts-ignore\n this.hls = this.config = this.audioBuffer = this.videoBuffer = null;\n // @ts-ignore\n this.onWaiting = this.onPlaying = this.media = null;\n }\n onMediaAttached(event, data) {\n this.media = data.media;\n this.media.addEventListener('waiting', this.onWaiting);\n this.media.addEventListener('playing', this.onPlaying);\n }\n onMediaDetached() {\n if (!this.media) {\n return;\n }\n this.media.removeEventListener('waiting', this.onWaiting);\n this.media.removeEventListener('playing', this.onPlaying);\n\n // @ts-ignore\n this.media = null;\n }\n onBufferCreated(event, data) {\n var _data$tracks$audio, _data$tracks$video;\n this.audioBuffer = (_data$tracks$audio = data.tracks.audio) == null ? void 0 : _data$tracks$audio.buffer;\n this.videoBuffer = (_data$tracks$video = data.tracks.video) == null ? void 0 : _data$tracks$video.buffer;\n }\n /**\n * Create baseline CMCD data\n */\n createData() {\n var _this$media;\n return {\n v: 1,\n sf: CmcdStreamingFormat.HLS,\n sid: this.sid,\n cid: this.cid,\n pr: (_this$media = this.media) == null ? void 0 : _this$media.playbackRate,\n mtp: this.hls.bandwidthEstimate / 1000\n };\n }\n\n /**\n * Apply CMCD data to a request.\n */\n apply(context, data = {}) {\n // apply baseline data\n _extends(data, this.createData());\n const isVideo = data.ot === CmcdObjectType.INIT || data.ot === CmcdObjectType.VIDEO || data.ot === CmcdObjectType.MUXED;\n if (this.starved && isVideo) {\n data.bs = true;\n data.su = true;\n this.starved = false;\n }\n if (data.su == null) {\n data.su = this.buffering;\n }\n\n // TODO: Implement rtp, nrr, dl\n\n const {\n includeKeys\n } = this;\n if (includeKeys) {\n data = Object.keys(data).reduce((acc, key) => {\n includeKeys.includes(key) && (acc[key] = data[key]);\n return acc;\n }, {});\n }\n const options = {\n baseUrl: context.url\n };\n if (this.useHeaders) {\n if (!context.headers) {\n context.headers = {};\n }\n appendCmcdHeaders(context.headers, data, options);\n } else {\n context.url = appendCmcdQuery(context.url, data, options);\n }\n }\n getNextFrag(fragment) {\n var _this$hls$levels$frag;\n const levelDetails = (_this$hls$levels$frag = this.hls.levels[fragment.level]) == null ? void 0 : _this$hls$levels$frag.details;\n if (levelDetails) {\n const index = fragment.sn - levelDetails.startSN;\n return levelDetails.fragments[index + 1];\n }\n return undefined;\n }\n getNextPart(part) {\n var _this$hls$levels$frag2;\n const {\n index,\n fragment\n } = part;\n const partList = (_this$hls$levels$frag2 = this.hls.levels[fragment.level]) == null || (_this$hls$levels$frag2 = _this$hls$levels$frag2.details) == null ? void 0 : _this$hls$levels$frag2.partList;\n if (partList) {\n const {\n sn\n } = fragment;\n for (let i = partList.length - 1; i >= 0; i--) {\n const p = partList[i];\n if (p.index === index && p.fragment.sn === sn) {\n return partList[i + 1];\n }\n }\n }\n return undefined;\n }\n\n /**\n * The CMCD object type.\n */\n getObjectType(fragment) {\n const {\n type\n } = fragment;\n if (type === 'subtitle') {\n return CmcdObjectType.TIMED_TEXT;\n }\n if (fragment.sn === 'initSegment') {\n return CmcdObjectType.INIT;\n }\n if (type === 'audio') {\n return CmcdObjectType.AUDIO;\n }\n if (type === 'main') {\n if (!this.hls.audioTracks.length) {\n return CmcdObjectType.MUXED;\n }\n return CmcdObjectType.VIDEO;\n }\n return undefined;\n }\n\n /**\n * Get the highest bitrate.\n */\n getTopBandwidth(type) {\n let bitrate = 0;\n let levels;\n const hls = this.hls;\n if (type === CmcdObjectType.AUDIO) {\n levels = hls.audioTracks;\n } else {\n const max = hls.maxAutoLevel;\n const len = max > -1 ? max + 1 : hls.levels.length;\n levels = hls.levels.slice(0, len);\n }\n levels.forEach(level => {\n if (level.bitrate > bitrate) {\n bitrate = level.bitrate;\n }\n });\n return bitrate > 0 ? bitrate : NaN;\n }\n\n /**\n * Get the buffer length for a media type in milliseconds\n */\n getBufferLength(type) {\n const media = this.media;\n const buffer = type === CmcdObjectType.AUDIO ? this.audioBuffer : this.videoBuffer;\n if (!buffer || !media) {\n return NaN;\n }\n const info = BufferHelper.bufferInfo(buffer, media.currentTime, this.config.maxBufferHole);\n return info.len * 1000;\n }\n\n /**\n * Create a playlist loader\n */\n createPlaylistLoader() {\n const {\n pLoader\n } = this.config;\n const apply = this.applyPlaylistData;\n const Ctor = pLoader || this.config.loader;\n return class CmcdPlaylistLoader {\n constructor(config) {\n this.loader = void 0;\n this.loader = new Ctor(config);\n }\n get stats() {\n return this.loader.stats;\n }\n get context() {\n return this.loader.context;\n }\n destroy() {\n this.loader.destroy();\n }\n abort() {\n this.loader.abort();\n }\n load(context, config, callbacks) {\n apply(context);\n this.loader.load(context, config, callbacks);\n }\n };\n }\n\n /**\n * Create a playlist loader\n */\n createFragmentLoader() {\n const {\n fLoader\n } = this.config;\n const apply = this.applyFragmentData;\n const Ctor = fLoader || this.config.loader;\n return class CmcdFragmentLoader {\n constructor(config) {\n this.loader = void 0;\n this.loader = new Ctor(config);\n }\n get stats() {\n return this.loader.stats;\n }\n get context() {\n return this.loader.context;\n }\n destroy() {\n this.loader.destroy();\n }\n abort() {\n this.loader.abort();\n }\n load(context, config, callbacks) {\n apply(context);\n this.loader.load(context, config, callbacks);\n }\n };\n }\n}\n\nconst PATHWAY_PENALTY_DURATION_MS = 300000;\nclass ContentSteeringController extends Logger {\n constructor(hls) {\n super('content-steering', hls.logger);\n this.hls = void 0;\n this.loader = null;\n this.uri = null;\n this.pathwayId = '.';\n this._pathwayPriority = null;\n this.timeToLoad = 300;\n this.reloadTimer = -1;\n this.updated = 0;\n this.started = false;\n this.enabled = true;\n this.levels = null;\n this.audioTracks = null;\n this.subtitleTracks = null;\n this.penalizedPathways = {};\n this.hls = hls;\n this.registerListeners();\n }\n registerListeners() {\n const hls = this.hls;\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.on(Events.ERROR, this.onError, this);\n }\n unregisterListeners() {\n const hls = this.hls;\n if (!hls) {\n return;\n }\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.off(Events.ERROR, this.onError, this);\n }\n pathways() {\n return (this.levels || []).reduce((pathways, level) => {\n if (pathways.indexOf(level.pathwayId) === -1) {\n pathways.push(level.pathwayId);\n }\n return pathways;\n }, []);\n }\n get pathwayPriority() {\n return this._pathwayPriority;\n }\n set pathwayPriority(pathwayPriority) {\n this.updatePathwayPriority(pathwayPriority);\n }\n startLoad() {\n this.started = true;\n this.clearTimeout();\n if (this.enabled && this.uri) {\n if (this.updated) {\n const ttl = this.timeToLoad * 1000 - (performance.now() - this.updated);\n if (ttl > 0) {\n this.scheduleRefresh(this.uri, ttl);\n return;\n }\n }\n this.loadSteeringManifest(this.uri);\n }\n }\n stopLoad() {\n this.started = false;\n if (this.loader) {\n this.loader.destroy();\n this.loader = null;\n }\n this.clearTimeout();\n }\n clearTimeout() {\n if (this.reloadTimer !== -1) {\n self.clearTimeout(this.reloadTimer);\n this.reloadTimer = -1;\n }\n }\n destroy() {\n this.unregisterListeners();\n this.stopLoad();\n // @ts-ignore\n this.hls = null;\n this.levels = this.audioTracks = this.subtitleTracks = null;\n }\n removeLevel(levelToRemove) {\n const levels = this.levels;\n if (levels) {\n this.levels = levels.filter(level => level !== levelToRemove);\n }\n }\n onManifestLoading() {\n this.stopLoad();\n this.enabled = true;\n this.timeToLoad = 300;\n this.updated = 0;\n this.uri = null;\n this.pathwayId = '.';\n this.levels = this.audioTracks = this.subtitleTracks = null;\n }\n onManifestLoaded(event, data) {\n const {\n contentSteering\n } = data;\n if (contentSteering === null) {\n return;\n }\n this.pathwayId = contentSteering.pathwayId;\n this.uri = contentSteering.uri;\n if (this.started) {\n this.startLoad();\n }\n }\n onManifestParsed(event, data) {\n this.audioTracks = data.audioTracks;\n this.subtitleTracks = data.subtitleTracks;\n }\n onError(event, data) {\n const {\n errorAction\n } = data;\n if ((errorAction == null ? void 0 : errorAction.action) === NetworkErrorAction.SendAlternateToPenaltyBox && errorAction.flags === ErrorActionFlags.MoveAllAlternatesMatchingHost) {\n const levels = this.levels;\n let pathwayPriority = this._pathwayPriority;\n let errorPathway = this.pathwayId;\n if (data.context) {\n const {\n groupId,\n pathwayId,\n type\n } = data.context;\n if (groupId && levels) {\n errorPathway = this.getPathwayForGroupId(groupId, type, errorPathway);\n } else if (pathwayId) {\n errorPathway = pathwayId;\n }\n }\n if (!(errorPathway in this.penalizedPathways)) {\n this.penalizedPathways[errorPathway] = performance.now();\n }\n if (!pathwayPriority && levels) {\n // If PATHWAY-PRIORITY was not provided, list pathways for error handling\n pathwayPriority = this.pathways();\n }\n if (pathwayPriority && pathwayPriority.length > 1) {\n this.updatePathwayPriority(pathwayPriority);\n errorAction.resolved = this.pathwayId !== errorPathway;\n }\n if (data.details === ErrorDetails.BUFFER_APPEND_ERROR && !data.fatal) {\n // Error will become fatal in buffer-controller when reaching `appendErrorMaxRetry`\n // Stream-controllers are expected to reduce buffer length even if this is not deemed a QuotaExceededError\n errorAction.resolved = true;\n } else if (!errorAction.resolved) {\n this.warn(`Could not resolve ${data.details} (\"${data.error.message}\") with content-steering for Pathway: ${errorPathway} levels: ${levels ? levels.length : levels} priorities: ${stringify(pathwayPriority)} penalized: ${stringify(this.penalizedPathways)}`);\n }\n }\n }\n filterParsedLevels(levels) {\n // Filter levels to only include those that are in the initial pathway\n this.levels = levels;\n let pathwayLevels = this.getLevelsForPathway(this.pathwayId);\n if (pathwayLevels.length === 0) {\n const pathwayId = levels[0].pathwayId;\n this.log(`No levels found in Pathway ${this.pathwayId}. Setting initial Pathway to \"${pathwayId}\"`);\n pathwayLevels = this.getLevelsForPathway(pathwayId);\n this.pathwayId = pathwayId;\n }\n if (pathwayLevels.length !== levels.length) {\n this.log(`Found ${pathwayLevels.length}/${levels.length} levels in Pathway \"${this.pathwayId}\"`);\n }\n return pathwayLevels;\n }\n getLevelsForPathway(pathwayId) {\n if (this.levels === null) {\n return [];\n }\n return this.levels.filter(level => pathwayId === level.pathwayId);\n }\n updatePathwayPriority(pathwayPriority) {\n this._pathwayPriority = pathwayPriority;\n let levels;\n\n // Evaluate if we should remove the pathway from the penalized list\n const penalizedPathways = this.penalizedPathways;\n const now = performance.now();\n Object.keys(penalizedPathways).forEach(pathwayId => {\n if (now - penalizedPathways[pathwayId] > PATHWAY_PENALTY_DURATION_MS) {\n delete penalizedPathways[pathwayId];\n }\n });\n for (let i = 0; i < pathwayPriority.length; i++) {\n const pathwayId = pathwayPriority[i];\n if (pathwayId in penalizedPathways) {\n continue;\n }\n if (pathwayId === this.pathwayId) {\n return;\n }\n const selectedIndex = this.hls.nextLoadLevel;\n const selectedLevel = this.hls.levels[selectedIndex];\n levels = this.getLevelsForPathway(pathwayId);\n if (levels.length > 0) {\n this.log(`Setting Pathway to \"${pathwayId}\"`);\n this.pathwayId = pathwayId;\n reassignFragmentLevelIndexes(levels);\n this.hls.trigger(Events.LEVELS_UPDATED, {\n levels\n });\n // Set LevelController's level to trigger LEVEL_SWITCHING which loads playlist if needed\n const levelAfterChange = this.hls.levels[selectedIndex];\n if (selectedLevel && levelAfterChange && this.levels) {\n if (levelAfterChange.attrs['STABLE-VARIANT-ID'] !== selectedLevel.attrs['STABLE-VARIANT-ID'] && levelAfterChange.bitrate !== selectedLevel.bitrate) {\n this.log(`Unstable Pathways change from bitrate ${selectedLevel.bitrate} to ${levelAfterChange.bitrate}`);\n }\n this.hls.nextLoadLevel = selectedIndex;\n }\n break;\n }\n }\n }\n getPathwayForGroupId(groupId, type, defaultPathway) {\n const levels = this.getLevelsForPathway(defaultPathway).concat(this.levels || []);\n for (let i = 0; i < levels.length; i++) {\n if (type === PlaylistContextType.AUDIO_TRACK && levels[i].hasAudioGroup(groupId) || type === PlaylistContextType.SUBTITLE_TRACK && levels[i].hasSubtitleGroup(groupId)) {\n return levels[i].pathwayId;\n }\n }\n return defaultPathway;\n }\n clonePathways(pathwayClones) {\n const levels = this.levels;\n if (!levels) {\n return;\n }\n const audioGroupCloneMap = {};\n const subtitleGroupCloneMap = {};\n pathwayClones.forEach(pathwayClone => {\n const {\n ID: cloneId,\n 'BASE-ID': baseId,\n 'URI-REPLACEMENT': uriReplacement\n } = pathwayClone;\n if (levels.some(level => level.pathwayId === cloneId)) {\n return;\n }\n const clonedVariants = this.getLevelsForPathway(baseId).map(baseLevel => {\n const attributes = new AttrList(baseLevel.attrs);\n attributes['PATHWAY-ID'] = cloneId;\n const clonedAudioGroupId = attributes.AUDIO && `${attributes.AUDIO}_clone_${cloneId}`;\n const clonedSubtitleGroupId = attributes.SUBTITLES && `${attributes.SUBTITLES}_clone_${cloneId}`;\n if (clonedAudioGroupId) {\n audioGroupCloneMap[attributes.AUDIO] = clonedAudioGroupId;\n attributes.AUDIO = clonedAudioGroupId;\n }\n if (clonedSubtitleGroupId) {\n subtitleGroupCloneMap[attributes.SUBTITLES] = clonedSubtitleGroupId;\n attributes.SUBTITLES = clonedSubtitleGroupId;\n }\n const url = performUriReplacement(baseLevel.uri, attributes['STABLE-VARIANT-ID'], 'PER-VARIANT-URIS', uriReplacement);\n const clonedLevel = new Level({\n attrs: attributes,\n audioCodec: baseLevel.audioCodec,\n bitrate: baseLevel.bitrate,\n height: baseLevel.height,\n name: baseLevel.name,\n url,\n videoCodec: baseLevel.videoCodec,\n width: baseLevel.width\n });\n if (baseLevel.audioGroups) {\n for (let i = 1; i < baseLevel.audioGroups.length; i++) {\n clonedLevel.addGroupId('audio', `${baseLevel.audioGroups[i]}_clone_${cloneId}`);\n }\n }\n if (baseLevel.subtitleGroups) {\n for (let i = 1; i < baseLevel.subtitleGroups.length; i++) {\n clonedLevel.addGroupId('text', `${baseLevel.subtitleGroups[i]}_clone_${cloneId}`);\n }\n }\n return clonedLevel;\n });\n levels.push(...clonedVariants);\n cloneRenditionGroups(this.audioTracks, audioGroupCloneMap, uriReplacement, cloneId);\n cloneRenditionGroups(this.subtitleTracks, subtitleGroupCloneMap, uriReplacement, cloneId);\n });\n }\n loadSteeringManifest(uri) {\n const config = this.hls.config;\n const Loader = config.loader;\n if (this.loader) {\n this.loader.destroy();\n }\n this.loader = new Loader(config);\n let url;\n try {\n url = new self.URL(uri);\n } catch (error) {\n this.enabled = false;\n this.log(`Failed to parse Steering Manifest URI: ${uri}`);\n return;\n }\n if (url.protocol !== 'data:') {\n const throughput = (this.hls.bandwidthEstimate || config.abrEwmaDefaultEstimate) | 0;\n url.searchParams.set('_HLS_pathway', this.pathwayId);\n url.searchParams.set('_HLS_throughput', '' + throughput);\n }\n const context = {\n responseType: 'json',\n url: url.href\n };\n const loadPolicy = config.steeringManifestLoadPolicy.default;\n const legacyRetryCompatibility = loadPolicy.errorRetry || loadPolicy.timeoutRetry || {};\n const loaderConfig = {\n loadPolicy,\n timeout: loadPolicy.maxLoadTimeMs,\n maxRetry: legacyRetryCompatibility.maxNumRetry || 0,\n retryDelay: legacyRetryCompatibility.retryDelayMs || 0,\n maxRetryDelay: legacyRetryCompatibility.maxRetryDelayMs || 0\n };\n const callbacks = {\n onSuccess: (response, stats, context, networkDetails) => {\n this.log(`Loaded steering manifest: \"${url}\"`);\n const steeringData = response.data;\n if ((steeringData == null ? void 0 : steeringData.VERSION) !== 1) {\n this.log(`Steering VERSION ${steeringData.VERSION} not supported!`);\n return;\n }\n this.updated = performance.now();\n this.timeToLoad = steeringData.TTL;\n const {\n 'RELOAD-URI': reloadUri,\n 'PATHWAY-CLONES': pathwayClones,\n 'PATHWAY-PRIORITY': pathwayPriority\n } = steeringData;\n if (reloadUri) {\n try {\n this.uri = new self.URL(reloadUri, url).href;\n } catch (error) {\n this.enabled = false;\n this.log(`Failed to parse Steering Manifest RELOAD-URI: ${reloadUri}`);\n return;\n }\n }\n this.scheduleRefresh(this.uri || context.url);\n if (pathwayClones) {\n this.clonePathways(pathwayClones);\n }\n const loadedSteeringData = {\n steeringManifest: steeringData,\n url: url.toString()\n };\n this.hls.trigger(Events.STEERING_MANIFEST_LOADED, loadedSteeringData);\n if (pathwayPriority) {\n this.updatePathwayPriority(pathwayPriority);\n }\n },\n onError: (error, context, networkDetails, stats) => {\n this.log(`Error loading steering manifest: ${error.code} ${error.text} (${context.url})`);\n this.stopLoad();\n if (error.code === 410) {\n this.enabled = false;\n this.log(`Steering manifest ${context.url} no longer available`);\n return;\n }\n let ttl = this.timeToLoad * 1000;\n if (error.code === 429) {\n const loader = this.loader;\n if (typeof (loader == null ? void 0 : loader.getResponseHeader) === 'function') {\n const retryAfter = loader.getResponseHeader('Retry-After');\n if (retryAfter) {\n ttl = parseFloat(retryAfter) * 1000;\n }\n }\n this.log(`Steering manifest ${context.url} rate limited`);\n return;\n }\n this.scheduleRefresh(this.uri || context.url, ttl);\n },\n onTimeout: (stats, context, networkDetails) => {\n this.log(`Timeout loading steering manifest (${context.url})`);\n this.scheduleRefresh(this.uri || context.url);\n }\n };\n this.log(`Requesting steering manifest: ${url}`);\n this.loader.load(context, loaderConfig, callbacks);\n }\n scheduleRefresh(uri, ttlMs = this.timeToLoad * 1000) {\n this.clearTimeout();\n this.reloadTimer = self.setTimeout(() => {\n var _this$hls;\n const media = (_this$hls = this.hls) == null ? void 0 : _this$hls.media;\n if (media && !media.ended) {\n this.loadSteeringManifest(uri);\n return;\n }\n this.scheduleRefresh(uri, this.timeToLoad * 1000);\n }, ttlMs);\n }\n}\nfunction cloneRenditionGroups(tracks, groupCloneMap, uriReplacement, cloneId) {\n if (!tracks) {\n return;\n }\n Object.keys(groupCloneMap).forEach(audioGroupId => {\n const clonedTracks = tracks.filter(track => track.groupId === audioGroupId).map(track => {\n const clonedTrack = _extends({}, track);\n clonedTrack.details = undefined;\n clonedTrack.attrs = new AttrList(clonedTrack.attrs);\n clonedTrack.url = clonedTrack.attrs.URI = performUriReplacement(track.url, track.attrs['STABLE-RENDITION-ID'], 'PER-RENDITION-URIS', uriReplacement);\n clonedTrack.groupId = clonedTrack.attrs['GROUP-ID'] = groupCloneMap[audioGroupId];\n clonedTrack.attrs['PATHWAY-ID'] = cloneId;\n return clonedTrack;\n });\n tracks.push(...clonedTracks);\n });\n}\nfunction performUriReplacement(uri, stableId, perOptionKey, uriReplacement) {\n const {\n HOST: host,\n PARAMS: params,\n [perOptionKey]: perOptionUris\n } = uriReplacement;\n let perVariantUri;\n if (stableId) {\n perVariantUri = perOptionUris == null ? void 0 : perOptionUris[stableId];\n if (perVariantUri) {\n uri = perVariantUri;\n }\n }\n const url = new self.URL(uri);\n if (host && !perVariantUri) {\n url.host = host;\n }\n if (params) {\n Object.keys(params).sort().forEach(key => {\n if (key) {\n url.searchParams.set(key, params[key]);\n }\n });\n }\n return url.href;\n}\n\n/**\n * Controller to deal with encrypted media extensions (EME)\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Encrypted_Media_Extensions_API\n *\n * @class\n * @constructor\n */\nclass EMEController extends Logger {\n constructor(hls) {\n super('eme', hls.logger);\n this.hls = void 0;\n this.config = void 0;\n this.media = null;\n this.mediaResolved = void 0;\n this.keyFormatPromise = null;\n this.keySystemAccessPromises = {};\n this._requestLicenseFailureCount = 0;\n this.mediaKeySessions = [];\n this.keyIdToKeySessionPromise = {};\n this.mediaKeys = null;\n this.setMediaKeysQueue = EMEController.CDMCleanupPromise ? [EMEController.CDMCleanupPromise] : [];\n this.bannedKeyIds = {};\n this.onMediaEncrypted = event => {\n const {\n initDataType,\n initData\n } = event;\n const logMessage = `\"${event.type}\" event: init data type: \"${initDataType}\"`;\n this.debug(logMessage);\n\n // Ignore event when initData is null\n if (initData === null) {\n return;\n }\n if (!this.keyFormatPromise) {\n let keySystems = Object.keys(this.keySystemAccessPromises);\n if (!keySystems.length) {\n keySystems = getKeySystemsForConfig(this.config);\n }\n const keyFormats = keySystems.map(keySystemDomainToKeySystemFormat).filter(k => !!k);\n this.keyFormatPromise = this.getKeyFormatPromise(keyFormats);\n }\n this.keyFormatPromise.then(keySystemFormat => {\n const keySystem = keySystemFormatToKeySystemDomain(keySystemFormat);\n if (initDataType !== 'sinf' || keySystem !== KeySystems.FAIRPLAY) {\n this.log(`Ignoring \"${event.type}\" event with init data type: \"${initDataType}\" for selected key-system ${keySystem}`);\n return;\n }\n\n // Match sinf keyId to playlist skd://keyId=\n let keyId;\n try {\n const json = bin2str(new Uint8Array(initData));\n const sinf = base64Decode(JSON.parse(json).sinf);\n const tenc = parseSinf(sinf);\n if (!tenc) {\n throw new Error(`'schm' box missing or not cbcs/cenc with schi > tenc`);\n }\n keyId = new Uint8Array(tenc.subarray(8, 24));\n } catch (error) {\n this.warn(`${logMessage} Failed to parse sinf: ${error}`);\n return;\n }\n const keyIdHex = arrayToHex(keyId);\n const {\n keyIdToKeySessionPromise,\n mediaKeySessions\n } = this;\n let keySessionContextPromise = keyIdToKeySessionPromise[keyIdHex];\n for (let i = 0; i < mediaKeySessions.length; i++) {\n // Match playlist key\n const keyContext = mediaKeySessions[i];\n const decryptdata = keyContext.decryptdata;\n if (!decryptdata.keyId) {\n continue;\n }\n const oldKeyIdHex = arrayToHex(decryptdata.keyId);\n if (arrayValuesMatch(keyId, decryptdata.keyId) || decryptdata.uri.replace(/-/g, '').indexOf(keyIdHex) !== -1) {\n keySessionContextPromise = keyIdToKeySessionPromise[oldKeyIdHex];\n if (!keySessionContextPromise) {\n continue;\n }\n if (decryptdata.pssh) {\n break;\n }\n delete keyIdToKeySessionPromise[oldKeyIdHex];\n decryptdata.pssh = new Uint8Array(initData);\n decryptdata.keyId = keyId;\n keySessionContextPromise = keyIdToKeySessionPromise[keyIdHex] = keySessionContextPromise.then(() => {\n return this.generateRequestWithPreferredKeySession(keyContext, initDataType, initData, 'encrypted-event-key-match');\n });\n keySessionContextPromise.catch(error => this.handleError(error));\n break;\n }\n }\n if (!keySessionContextPromise) {\n this.handleError(new Error(`Key ID ${keyIdHex} not encountered in playlist. Key-system sessions ${mediaKeySessions.length}.`));\n }\n }).catch(error => this.handleError(error));\n };\n this.onWaitingForKey = event => {\n this.log(`\"${event.type}\" event`);\n };\n this.hls = hls;\n this.config = hls.config;\n this.registerListeners();\n }\n destroy() {\n this.onDestroying();\n this.onMediaDetached();\n // Remove any references that could be held in config options or callbacks\n const config = this.config;\n config.requestMediaKeySystemAccessFunc = null;\n config.licenseXhrSetup = config.licenseResponseCallback = undefined;\n config.drmSystems = config.drmSystemOptions = {};\n // @ts-ignore\n this.hls = this.config = this.keyIdToKeySessionPromise = null;\n // @ts-ignore\n this.onMediaEncrypted = this.onWaitingForKey = null;\n }\n registerListeners() {\n this.hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n this.hls.on(Events.MEDIA_DETACHED, this.onMediaDetached, this);\n this.hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n this.hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n this.hls.on(Events.DESTROYING, this.onDestroying, this);\n }\n unregisterListeners() {\n this.hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n this.hls.off(Events.MEDIA_DETACHED, this.onMediaDetached, this);\n this.hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n this.hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n this.hls.off(Events.DESTROYING, this.onDestroying, this);\n }\n getLicenseServerUrl(keySystem) {\n const {\n drmSystems,\n widevineLicenseUrl\n } = this.config;\n const keySystemConfiguration = drmSystems == null ? void 0 : drmSystems[keySystem];\n if (keySystemConfiguration) {\n return keySystemConfiguration.licenseUrl;\n }\n\n // For backward compatibility\n if (keySystem === KeySystems.WIDEVINE && widevineLicenseUrl) {\n return widevineLicenseUrl;\n }\n }\n getLicenseServerUrlOrThrow(keySystem) {\n const url = this.getLicenseServerUrl(keySystem);\n if (url === undefined) {\n throw new Error(`no license server URL configured for key-system \"${keySystem}\"`);\n }\n return url;\n }\n getServerCertificateUrl(keySystem) {\n const {\n drmSystems\n } = this.config;\n const keySystemConfiguration = drmSystems == null ? void 0 : drmSystems[keySystem];\n if (keySystemConfiguration) {\n return keySystemConfiguration.serverCertificateUrl;\n } else {\n this.log(`No Server Certificate in config.drmSystems[\"${keySystem}\"]`);\n }\n }\n attemptKeySystemAccess(keySystemsToAttempt) {\n const levels = this.hls.levels;\n const uniqueCodec = (value, i, a) => !!value && a.indexOf(value) === i;\n const audioCodecs = levels.map(level => level.audioCodec).filter(uniqueCodec);\n const videoCodecs = levels.map(level => level.videoCodec).filter(uniqueCodec);\n if (audioCodecs.length + videoCodecs.length === 0) {\n videoCodecs.push('avc1.42e01e');\n }\n return new Promise((resolve, reject) => {\n const attempt = keySystems => {\n const keySystem = keySystems.shift();\n this.getMediaKeysPromise(keySystem, audioCodecs, videoCodecs).then(mediaKeys => resolve({\n keySystem,\n mediaKeys\n })).catch(error => {\n if (keySystems.length) {\n attempt(keySystems);\n } else if (error instanceof EMEKeyError) {\n reject(error);\n } else {\n reject(new EMEKeyError({\n type: ErrorTypes.KEY_SYSTEM_ERROR,\n details: ErrorDetails.KEY_SYSTEM_NO_ACCESS,\n error,\n fatal: true\n }, error.message));\n }\n });\n };\n attempt(keySystemsToAttempt);\n });\n }\n requestMediaKeySystemAccess(keySystem, supportedConfigurations) {\n const {\n requestMediaKeySystemAccessFunc\n } = this.config;\n if (!(typeof requestMediaKeySystemAccessFunc === 'function')) {\n let errMessage = `Configured requestMediaKeySystemAccess is not a function ${requestMediaKeySystemAccessFunc}`;\n if (requestMediaKeySystemAccess === null && self.location.protocol === 'http:') {\n errMessage = `navigator.requestMediaKeySystemAccess is not available over insecure protocol ${location.protocol}`;\n }\n return Promise.reject(new Error(errMessage));\n }\n return requestMediaKeySystemAccessFunc(keySystem, supportedConfigurations);\n }\n getMediaKeysPromise(keySystem, audioCodecs, videoCodecs) {\n var _keySystemAccessPromi;\n // This can throw, but is caught in event handler callpath\n const mediaKeySystemConfigs = getSupportedMediaKeySystemConfigurations(keySystem, audioCodecs, videoCodecs, this.config.drmSystemOptions || {});\n let keySystemAccessPromises = this.keySystemAccessPromises[keySystem];\n let keySystemAccess = (_keySystemAccessPromi = keySystemAccessPromises) == null ? void 0 : _keySystemAccessPromi.keySystemAccess;\n if (!keySystemAccess) {\n this.log(`Requesting encrypted media \"${keySystem}\" key-system access with config: ${stringify(mediaKeySystemConfigs)}`);\n keySystemAccess = this.requestMediaKeySystemAccess(keySystem, mediaKeySystemConfigs);\n const keySystemAccessPromisesNew = keySystemAccessPromises = this.keySystemAccessPromises[keySystem] = {\n keySystemAccess\n };\n keySystemAccess.catch(error => {\n this.log(`Failed to obtain access to key-system \"${keySystem}\": ${error}`);\n });\n return keySystemAccess.then(mediaKeySystemAccess => {\n this.log(`Access for key-system \"${mediaKeySystemAccess.keySystem}\" obtained`);\n const certificateRequest = this.fetchServerCertificate(keySystem);\n this.log(`Create media-keys for \"${keySystem}\"`);\n const mediaKeys = keySystemAccessPromisesNew.mediaKeys = mediaKeySystemAccess.createMediaKeys().then(mediaKeys => {\n this.log(`Media-keys created for \"${keySystem}\"`);\n keySystemAccessPromisesNew.hasMediaKeys = true;\n return certificateRequest.then(certificate => {\n if (certificate) {\n return this.setMediaKeysServerCertificate(mediaKeys, keySystem, certificate);\n }\n return mediaKeys;\n });\n });\n mediaKeys.catch(error => {\n this.error(`Failed to create media-keys for \"${keySystem}\"}: ${error}`);\n });\n return mediaKeys;\n });\n }\n return keySystemAccess.then(() => keySystemAccessPromises.mediaKeys);\n }\n createMediaKeySessionContext({\n decryptdata,\n keySystem,\n mediaKeys\n }) {\n this.log(`Creating key-system session \"${keySystem}\" keyId: ${arrayToHex(decryptdata.keyId || [])} keyUri: ${decryptdata.uri}`);\n const mediaKeysSession = mediaKeys.createSession();\n const mediaKeySessionContext = {\n decryptdata,\n keySystem,\n mediaKeys,\n mediaKeysSession,\n keyStatus: 'status-pending'\n };\n this.mediaKeySessions.push(mediaKeySessionContext);\n return mediaKeySessionContext;\n }\n renewKeySession(mediaKeySessionContext) {\n const decryptdata = mediaKeySessionContext.decryptdata;\n if (decryptdata.pssh) {\n const keySessionContext = this.createMediaKeySessionContext(mediaKeySessionContext);\n const keyId = getKeyIdString(decryptdata);\n const scheme = 'cenc';\n this.keyIdToKeySessionPromise[keyId] = this.generateRequestWithPreferredKeySession(keySessionContext, scheme, decryptdata.pssh.buffer, 'expired');\n } else {\n this.warn(`Could not renew expired session. Missing pssh initData.`);\n }\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n this.removeSession(mediaKeySessionContext);\n }\n updateKeySession(mediaKeySessionContext, data) {\n const keySession = mediaKeySessionContext.mediaKeysSession;\n this.log(`Updating key-session \"${keySession.sessionId}\" for keyId ${arrayToHex(mediaKeySessionContext.decryptdata.keyId || [])}\n } (data length: ${data.byteLength})`);\n return keySession.update(data);\n }\n getSelectedKeySystemFormats() {\n return Object.keys(this.keySystemAccessPromises).map(keySystem => ({\n keySystem,\n hasMediaKeys: this.keySystemAccessPromises[keySystem].hasMediaKeys\n })).filter(({\n hasMediaKeys\n }) => !!hasMediaKeys).map(({\n keySystem\n }) => keySystemDomainToKeySystemFormat(keySystem)).filter(keySystem => !!keySystem);\n }\n getKeySystemAccess(keySystemsToAttempt) {\n return this.getKeySystemSelectionPromise(keySystemsToAttempt).then(({\n keySystem,\n mediaKeys\n }) => {\n return this.attemptSetMediaKeys(keySystem, mediaKeys);\n });\n }\n selectKeySystem(keySystemsToAttempt) {\n return new Promise((resolve, reject) => {\n this.getKeySystemSelectionPromise(keySystemsToAttempt).then(({\n keySystem\n }) => {\n const keySystemFormat = keySystemDomainToKeySystemFormat(keySystem);\n if (keySystemFormat) {\n resolve(keySystemFormat);\n } else {\n reject(new Error(`Unable to find format for key-system \"${keySystem}\"`));\n }\n }).catch(reject);\n });\n }\n selectKeySystemFormat(frag) {\n const keyFormats = Object.keys(frag.levelkeys || {});\n if (!this.keyFormatPromise) {\n this.log(`Selecting key-system from fragment (sn: ${frag.sn} ${frag.type}: ${frag.level}) key formats ${keyFormats.join(', ')}`);\n this.keyFormatPromise = this.getKeyFormatPromise(keyFormats);\n }\n return this.keyFormatPromise;\n }\n getKeyFormatPromise(keyFormats) {\n const keySystemsInConfig = getKeySystemsForConfig(this.config);\n const keySystemsToAttempt = keyFormats.map(keySystemFormatToKeySystemDomain).filter(value => !!value && keySystemsInConfig.indexOf(value) !== -1);\n return this.selectKeySystem(keySystemsToAttempt);\n }\n getKeyStatus(decryptdata) {\n const {\n mediaKeySessions\n } = this;\n for (let i = 0; i < mediaKeySessions.length; i++) {\n const status = getKeyStatus(decryptdata, mediaKeySessions[i]);\n if (status) {\n return status;\n }\n }\n return undefined;\n }\n loadKey(data) {\n const decryptdata = data.keyInfo.decryptdata;\n const keyId = getKeyIdString(decryptdata);\n const badStatus = this.bannedKeyIds[keyId];\n if (badStatus || this.getKeyStatus(decryptdata) === 'internal-error') {\n const error = getKeyStatusError(badStatus || 'internal-error', decryptdata);\n this.handleError(error, data.frag);\n return Promise.reject(error);\n }\n const keyDetails = `(keyId: ${keyId} format: \"${decryptdata.keyFormat}\" method: ${decryptdata.method} uri: ${decryptdata.uri})`;\n this.log(`Starting session for key ${keyDetails}`);\n const keyContextPromise = this.keyIdToKeySessionPromise[keyId];\n if (!keyContextPromise) {\n const keySessionContextPromise = this.getKeySystemForKeyPromise(decryptdata).then(({\n keySystem,\n mediaKeys\n }) => {\n this.throwIfDestroyed();\n this.log(`Handle encrypted media sn: ${data.frag.sn} ${data.frag.type}: ${data.frag.level} using key ${keyDetails}`);\n return this.attemptSetMediaKeys(keySystem, mediaKeys).then(() => {\n this.throwIfDestroyed();\n return this.createMediaKeySessionContext({\n keySystem,\n mediaKeys,\n decryptdata\n });\n });\n }).then(keySessionContext => {\n const scheme = 'cenc';\n const initData = decryptdata.pssh ? decryptdata.pssh.buffer : null;\n return this.generateRequestWithPreferredKeySession(keySessionContext, scheme, initData, 'playlist-key');\n });\n keySessionContextPromise.catch(error => this.handleError(error, data.frag));\n this.keyIdToKeySessionPromise[keyId] = keySessionContextPromise;\n return keySessionContextPromise;\n }\n\n // Re-emit error for playlist key loading\n keyContextPromise.catch(error => {\n if (error instanceof EMEKeyError) {\n const errorData = _objectSpread2({}, error.data);\n if (this.getKeyStatus(decryptdata) === 'internal-error') {\n errorData.decryptdata = decryptdata;\n }\n const clonedError = new EMEKeyError(errorData, error.message);\n this.handleError(clonedError, data.frag);\n }\n });\n return keyContextPromise;\n }\n throwIfDestroyed(message = 'Invalid state') {\n if (!this.hls) {\n throw new Error('invalid state');\n }\n }\n handleError(error, frag) {\n if (!this.hls) {\n return;\n }\n if (error instanceof EMEKeyError) {\n if (frag) {\n error.data.frag = frag;\n }\n const levelKey = error.data.decryptdata;\n this.error(`${error.message}${levelKey ? ` (${arrayToHex(levelKey.keyId || [])})` : ''}`);\n this.hls.trigger(Events.ERROR, error.data);\n } else {\n this.error(error.message);\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.KEY_SYSTEM_ERROR,\n details: ErrorDetails.KEY_SYSTEM_NO_KEYS,\n error,\n fatal: true\n });\n }\n }\n getKeySystemForKeyPromise(decryptdata) {\n const keyId = getKeyIdString(decryptdata);\n const mediaKeySessionContext = this.keyIdToKeySessionPromise[keyId];\n if (!mediaKeySessionContext) {\n const keySystem = keySystemFormatToKeySystemDomain(decryptdata.keyFormat);\n const keySystemsToAttempt = keySystem ? [keySystem] : getKeySystemsForConfig(this.config);\n return this.attemptKeySystemAccess(keySystemsToAttempt);\n }\n return mediaKeySessionContext;\n }\n getKeySystemSelectionPromise(keySystemsToAttempt) {\n if (!keySystemsToAttempt.length) {\n keySystemsToAttempt = getKeySystemsForConfig(this.config);\n }\n if (keySystemsToAttempt.length === 0) {\n throw new EMEKeyError({\n type: ErrorTypes.KEY_SYSTEM_ERROR,\n details: ErrorDetails.KEY_SYSTEM_NO_CONFIGURED_LICENSE,\n fatal: true\n }, `Missing key-system license configuration options ${stringify({\n drmSystems: this.config.drmSystems\n })}`);\n }\n return this.attemptKeySystemAccess(keySystemsToAttempt);\n }\n attemptSetMediaKeys(keySystem, mediaKeys) {\n this.mediaResolved = undefined;\n if (this.mediaKeys === mediaKeys) {\n return Promise.resolve();\n }\n const queue = this.setMediaKeysQueue.slice();\n this.log(`Setting media-keys for \"${keySystem}\"`);\n // Only one setMediaKeys() can run at one time, and multiple setMediaKeys() operations\n // can be queued for execution for multiple key sessions.\n const setMediaKeysPromise = Promise.all(queue).then(() => {\n if (!this.media) {\n return new Promise((resolve, reject) => {\n this.mediaResolved = () => {\n this.mediaResolved = undefined;\n if (!this.media) {\n return reject(new Error('Attempted to set mediaKeys without media element attached'));\n }\n this.mediaKeys = mediaKeys;\n this.media.setMediaKeys(mediaKeys).then(resolve).catch(reject);\n };\n });\n }\n return this.media.setMediaKeys(mediaKeys);\n });\n this.mediaKeys = mediaKeys;\n this.setMediaKeysQueue.push(setMediaKeysPromise);\n return setMediaKeysPromise.then(() => {\n this.log(`Media-keys set for \"${keySystem}\"`);\n queue.push(setMediaKeysPromise);\n this.setMediaKeysQueue = this.setMediaKeysQueue.filter(p => queue.indexOf(p) === -1);\n });\n }\n generateRequestWithPreferredKeySession(context, initDataType, initData, reason) {\n var _this$config$drmSyste;\n const generateRequestFilter = (_this$config$drmSyste = this.config.drmSystems) == null || (_this$config$drmSyste = _this$config$drmSyste[context.keySystem]) == null ? void 0 : _this$config$drmSyste.generateRequest;\n if (generateRequestFilter) {\n try {\n const mappedInitData = generateRequestFilter.call(this.hls, initDataType, initData, context);\n if (!mappedInitData) {\n throw new Error('Invalid response from configured generateRequest filter');\n }\n initDataType = mappedInitData.initDataType;\n initData = mappedInitData.initData ? mappedInitData.initData : null;\n context.decryptdata.pssh = initData ? new Uint8Array(initData) : null;\n } catch (error) {\n this.warn(error.message);\n if (this.hls && this.hls.config.debug) {\n throw error;\n }\n }\n }\n if (initData === null) {\n this.log(`Skipping key-session request for \"${reason}\" (no initData)`);\n return Promise.resolve(context);\n }\n const keyId = getKeyIdString(context.decryptdata);\n const keyUri = context.decryptdata.uri;\n this.log(`Generating key-session request for \"${reason}\" keyId: ${keyId} URI: ${keyUri} (init data type: ${initDataType} length: ${initData.byteLength})`);\n const licenseStatus = new EventEmitter();\n const onmessage = context._onmessage = event => {\n const keySession = context.mediaKeysSession;\n if (!keySession) {\n licenseStatus.emit('error', new Error('invalid state'));\n return;\n }\n const {\n messageType,\n message\n } = event;\n this.log(`\"${messageType}\" message event for session \"${keySession.sessionId}\" message size: ${message.byteLength}`);\n if (messageType === 'license-request' || messageType === 'license-renewal') {\n this.renewLicense(context, message).catch(error => {\n if (licenseStatus.eventNames().length) {\n licenseStatus.emit('error', error);\n } else {\n this.handleError(error);\n }\n });\n } else if (messageType === 'license-release') {\n if (context.keySystem === KeySystems.FAIRPLAY) {\n this.updateKeySession(context, strToUtf8array('acknowledged')).then(() => this.removeSession(context)).catch(error => this.handleError(error));\n }\n } else {\n this.warn(`unhandled media key message type \"${messageType}\"`);\n }\n };\n const handleKeyStatus = (keyStatus, context) => {\n context.keyStatus = keyStatus;\n let keyError;\n if (keyStatus.startsWith('usable')) {\n licenseStatus.emit('resolved');\n } else if (keyStatus === 'internal-error' || keyStatus === 'output-restricted' || keyStatus === 'output-downscaled') {\n keyError = getKeyStatusError(keyStatus, context.decryptdata);\n } else if (keyStatus === 'expired') {\n keyError = new Error(`key expired (keyId: ${keyId})`);\n } else if (keyStatus === 'released') {\n keyError = new Error(`key released`);\n } else if (keyStatus === 'status-pending') ; else {\n this.warn(`unhandled key status change \"${keyStatus}\" (keyId: ${keyId})`);\n }\n if (keyError) {\n if (licenseStatus.eventNames().length) {\n licenseStatus.emit('error', keyError);\n } else {\n this.handleError(keyError);\n }\n }\n };\n const onkeystatuseschange = context._onkeystatuseschange = event => {\n const keySession = context.mediaKeysSession;\n if (!keySession) {\n licenseStatus.emit('error', new Error('invalid state'));\n return;\n }\n const keyStatuses = this.getKeyStatuses(context);\n const keyIds = Object.keys(keyStatuses);\n\n // exit if all keys are status-pending\n if (!keyIds.some(id => keyStatuses[id] !== 'status-pending')) {\n return;\n }\n\n // renew when a key status for a levelKey comes back expired\n if (keyStatuses[keyId] === 'expired') {\n // renew when a key status comes back expired\n this.log(`Expired key ${stringify(keyStatuses)} in key-session \"${context.mediaKeysSession.sessionId}\"`);\n this.renewKeySession(context);\n return;\n }\n let keyStatus = keyStatuses[keyId];\n if (keyStatus) {\n // handle status of current key\n handleKeyStatus(keyStatus, context);\n } else {\n var _context$keyStatusTim;\n // Timeout key-status\n const timeout = 1000;\n context.keyStatusTimeouts || (context.keyStatusTimeouts = {});\n (_context$keyStatusTim = context.keyStatusTimeouts)[keyId] || (_context$keyStatusTim[keyId] = self.setTimeout(() => {\n if (!context.mediaKeysSession || !this.mediaKeys) {\n return;\n }\n\n // Find key status in another session if missing (PlayReady #7519 no key-status \"single-key\" setup with shared key)\n const sessionKeyStatus = this.getKeyStatus(context.decryptdata);\n if (sessionKeyStatus && sessionKeyStatus !== 'status-pending') {\n this.log(`No status for keyId ${keyId} in key-session \"${context.mediaKeysSession.sessionId}\". Using session key-status ${sessionKeyStatus} from other session.`);\n return handleKeyStatus(sessionKeyStatus, context);\n }\n\n // Timeout key with internal-error\n this.log(`key status for ${keyId} in key-session \"${context.mediaKeysSession.sessionId}\" timed out after ${timeout}ms`);\n keyStatus = 'internal-error';\n handleKeyStatus(keyStatus, context);\n }, timeout));\n this.log(`No status for keyId ${keyId} (${stringify(keyStatuses)}).`);\n }\n };\n addEventListener(context.mediaKeysSession, 'message', onmessage);\n addEventListener(context.mediaKeysSession, 'keystatuseschange', onkeystatuseschange);\n const keyUsablePromise = new Promise((resolve, reject) => {\n licenseStatus.on('error', reject);\n licenseStatus.on('resolved', resolve);\n });\n return context.mediaKeysSession.generateRequest(initDataType, initData).then(() => {\n this.log(`Request generated for key-session \"${context.mediaKeysSession.sessionId}\" keyId: ${keyId} URI: ${keyUri}`);\n }).catch(error => {\n throw new EMEKeyError({\n type: ErrorTypes.KEY_SYSTEM_ERROR,\n details: ErrorDetails.KEY_SYSTEM_NO_SESSION,\n error,\n decryptdata: context.decryptdata,\n fatal: false\n }, `Error generating key-session request: ${error}`);\n }).then(() => keyUsablePromise).catch(error => {\n licenseStatus.removeAllListeners();\n return this.removeSession(context).then(() => {\n throw error;\n });\n }).then(() => {\n licenseStatus.removeAllListeners();\n return context;\n });\n }\n getKeyStatuses(mediaKeySessionContext) {\n const keyStatuses = {};\n mediaKeySessionContext.mediaKeysSession.keyStatuses.forEach((status, keyId) => {\n // keyStatuses.forEach is not standard API so the callback value looks weird on xboxone\n // xboxone callback(keyId, status) so we need to exchange them\n if (typeof keyId === 'string' && typeof status === 'object') {\n const temp = keyId;\n keyId = status;\n status = temp;\n }\n const keyIdArray = 'buffer' in keyId ? new Uint8Array(keyId.buffer, keyId.byteOffset, keyId.byteLength) : new Uint8Array(keyId);\n if (mediaKeySessionContext.keySystem === KeySystems.PLAYREADY && keyIdArray.length === 16) {\n // On some devices, the key ID has already been converted for endianness.\n // In such cases, this key ID is the one we need to cache.\n const originKeyIdWithStatusChange = arrayToHex(keyIdArray);\n // Cache the original key IDs to ensure compatibility across all cases.\n keyStatuses[originKeyIdWithStatusChange] = status;\n changeEndianness(keyIdArray);\n }\n const keyIdWithStatusChange = arrayToHex(keyIdArray);\n // Add to banned keys to prevent playlist usage and license requests\n if (status === 'internal-error') {\n this.bannedKeyIds[keyIdWithStatusChange] = status;\n }\n this.log(`key status change \"${status}\" for keyStatuses keyId: ${keyIdWithStatusChange} key-session \"${mediaKeySessionContext.mediaKeysSession.sessionId}\"`);\n keyStatuses[keyIdWithStatusChange] = status;\n });\n return keyStatuses;\n }\n fetchServerCertificate(keySystem) {\n const config = this.config;\n const Loader = config.loader;\n const certLoader = new Loader(config);\n const url = this.getServerCertificateUrl(keySystem);\n if (!url) {\n return Promise.resolve();\n }\n this.log(`Fetching server certificate for \"${keySystem}\"`);\n return new Promise((resolve, reject) => {\n const loaderContext = {\n responseType: 'arraybuffer',\n url\n };\n const loadPolicy = config.certLoadPolicy.default;\n const loaderConfig = {\n loadPolicy,\n timeout: loadPolicy.maxLoadTimeMs,\n maxRetry: 0,\n retryDelay: 0,\n maxRetryDelay: 0\n };\n const loaderCallbacks = {\n onSuccess: (response, stats, context, networkDetails) => {\n resolve(response.data);\n },\n onError: (response, contex, networkDetails, stats) => {\n reject(new EMEKeyError({\n type: ErrorTypes.KEY_SYSTEM_ERROR,\n details: ErrorDetails.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED,\n fatal: true,\n networkDetails,\n response: _objectSpread2({\n url: loaderContext.url,\n data: undefined\n }, response)\n }, `\"${keySystem}\" certificate request failed (${url}). Status: ${response.code} (${response.text})`));\n },\n onTimeout: (stats, context, networkDetails) => {\n reject(new EMEKeyError({\n type: ErrorTypes.KEY_SYSTEM_ERROR,\n details: ErrorDetails.KEY_SYSTEM_SERVER_CERTIFICATE_REQUEST_FAILED,\n fatal: true,\n networkDetails,\n response: {\n url: loaderContext.url,\n data: undefined\n }\n }, `\"${keySystem}\" certificate request timed out (${url})`));\n },\n onAbort: (stats, context, networkDetails) => {\n reject(new Error('aborted'));\n }\n };\n certLoader.load(loaderContext, loaderConfig, loaderCallbacks);\n });\n }\n setMediaKeysServerCertificate(mediaKeys, keySystem, cert) {\n return new Promise((resolve, reject) => {\n mediaKeys.setServerCertificate(cert).then(success => {\n this.log(`setServerCertificate ${success ? 'success' : 'not supported by CDM'} (${cert.byteLength}) on \"${keySystem}\"`);\n resolve(mediaKeys);\n }).catch(error => {\n reject(new EMEKeyError({\n type: ErrorTypes.KEY_SYSTEM_ERROR,\n details: ErrorDetails.KEY_SYSTEM_SERVER_CERTIFICATE_UPDATE_FAILED,\n error,\n fatal: true\n }, error.message));\n });\n });\n }\n renewLicense(context, keyMessage) {\n return this.requestLicense(context, new Uint8Array(keyMessage)).then(data => {\n return this.updateKeySession(context, new Uint8Array(data)).catch(error => {\n throw new EMEKeyError({\n type: ErrorTypes.KEY_SYSTEM_ERROR,\n details: ErrorDetails.KEY_SYSTEM_SESSION_UPDATE_FAILED,\n decryptdata: context.decryptdata,\n error,\n fatal: false\n }, error.message);\n });\n });\n }\n unpackPlayReadyKeyMessage(xhr, licenseChallenge) {\n // On Edge, the raw license message is UTF-16-encoded XML. We need\n // to unpack the Challenge element (base64-encoded string containing the\n // actual license request) and any HttpHeader elements (sent as request\n // headers).\n // For PlayReady CDMs, we need to dig the Challenge out of the XML.\n const xmlString = String.fromCharCode.apply(null, new Uint16Array(licenseChallenge.buffer));\n if (!xmlString.includes('PlayReadyKeyMessage')) {\n // This does not appear to be a wrapped message as on Edge. Some\n // clients do not need this unwrapping, so we will assume this is one of\n // them. Note that \"xml\" at this point probably looks like random\n // garbage, since we interpreted UTF-8 as UTF-16.\n xhr.setRequestHeader('Content-Type', 'text/xml; charset=utf-8');\n return licenseChallenge;\n }\n const keyMessageXml = new DOMParser().parseFromString(xmlString, 'application/xml');\n // Set request headers.\n const headers = keyMessageXml.querySelectorAll('HttpHeader');\n if (headers.length > 0) {\n let header;\n for (let i = 0, len = headers.length; i < len; i++) {\n var _header$querySelector, _header$querySelector2;\n header = headers[i];\n const name = (_header$querySelector = header.querySelector('name')) == null ? void 0 : _header$querySelector.textContent;\n const value = (_header$querySelector2 = header.querySelector('value')) == null ? void 0 : _header$querySelector2.textContent;\n if (name && value) {\n xhr.setRequestHeader(name, value);\n }\n }\n }\n const challengeElement = keyMessageXml.querySelector('Challenge');\n const challengeText = challengeElement == null ? void 0 : challengeElement.textContent;\n if (!challengeText) {\n throw new Error(`Cannot find <Challenge> in key message`);\n }\n return strToUtf8array(atob(challengeText));\n }\n setupLicenseXHR(xhr, url, keysListItem, licenseChallenge) {\n const licenseXhrSetup = this.config.licenseXhrSetup;\n if (!licenseXhrSetup) {\n xhr.open('POST', url, true);\n return Promise.resolve({\n xhr,\n licenseChallenge\n });\n }\n return Promise.resolve().then(() => {\n if (!keysListItem.decryptdata) {\n throw new Error('Key removed');\n }\n return licenseXhrSetup.call(this.hls, xhr, url, keysListItem, licenseChallenge);\n }).catch(error => {\n if (!keysListItem.decryptdata) {\n // Key session removed. Cancel license request.\n throw error;\n }\n // let's try to open before running setup\n xhr.open('POST', url, true);\n return licenseXhrSetup.call(this.hls, xhr, url, keysListItem, licenseChallenge);\n }).then(licenseXhrSetupResult => {\n // if licenseXhrSetup did not yet call open, let's do it now\n if (!xhr.readyState) {\n xhr.open('POST', url, true);\n }\n const finalLicenseChallenge = licenseXhrSetupResult ? licenseXhrSetupResult : licenseChallenge;\n return {\n xhr,\n licenseChallenge: finalLicenseChallenge\n };\n });\n }\n requestLicense(keySessionContext, licenseChallenge) {\n const keyLoadPolicy = this.config.keyLoadPolicy.default;\n return new Promise((resolve, reject) => {\n const url = this.getLicenseServerUrlOrThrow(keySessionContext.keySystem);\n this.log(`Sending license request to URL: ${url}`);\n const xhr = new XMLHttpRequest();\n xhr.responseType = 'arraybuffer';\n xhr.onreadystatechange = () => {\n if (!this.hls || !keySessionContext.mediaKeysSession) {\n return reject(new Error('invalid state'));\n }\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n this._requestLicenseFailureCount = 0;\n let data = xhr.response;\n this.log(`License received ${data instanceof ArrayBuffer ? data.byteLength : data}`);\n const licenseResponseCallback = this.config.licenseResponseCallback;\n if (licenseResponseCallback) {\n try {\n data = licenseResponseCallback.call(this.hls, xhr, url, keySessionContext);\n } catch (error) {\n this.error(error);\n }\n }\n resolve(data);\n } else {\n const retryConfig = keyLoadPolicy.errorRetry;\n const maxNumRetry = retryConfig ? retryConfig.maxNumRetry : 0;\n this._requestLicenseFailureCount++;\n if (this._requestLicenseFailureCount > maxNumRetry || xhr.status >= 400 && xhr.status < 500) {\n reject(new EMEKeyError({\n type: ErrorTypes.KEY_SYSTEM_ERROR,\n details: ErrorDetails.KEY_SYSTEM_LICENSE_REQUEST_FAILED,\n decryptdata: keySessionContext.decryptdata,\n fatal: true,\n networkDetails: xhr,\n response: {\n url,\n data: undefined,\n code: xhr.status,\n text: xhr.statusText\n }\n }, `License Request XHR failed (${url}). Status: ${xhr.status} (${xhr.statusText})`));\n } else {\n const attemptsLeft = maxNumRetry - this._requestLicenseFailureCount + 1;\n this.warn(`Retrying license request, ${attemptsLeft} attempts left`);\n this.requestLicense(keySessionContext, licenseChallenge).then(resolve, reject);\n }\n }\n }\n };\n if (keySessionContext.licenseXhr && keySessionContext.licenseXhr.readyState !== XMLHttpRequest.DONE) {\n keySessionContext.licenseXhr.abort();\n }\n keySessionContext.licenseXhr = xhr;\n this.setupLicenseXHR(xhr, url, keySessionContext, licenseChallenge).then(({\n xhr,\n licenseChallenge\n }) => {\n if (keySessionContext.keySystem == KeySystems.PLAYREADY) {\n licenseChallenge = this.unpackPlayReadyKeyMessage(xhr, licenseChallenge);\n }\n xhr.send(licenseChallenge);\n }).catch(reject);\n });\n }\n onDestroying() {\n this.unregisterListeners();\n this._clear();\n }\n onMediaAttached(event, data) {\n if (!this.config.emeEnabled) {\n return;\n }\n const media = data.media;\n\n // keep reference of media\n this.media = media;\n addEventListener(media, 'encrypted', this.onMediaEncrypted);\n addEventListener(media, 'waitingforkey', this.onWaitingForKey);\n const mediaResolved = this.mediaResolved;\n if (mediaResolved) {\n mediaResolved();\n } else {\n this.mediaKeys = media.mediaKeys;\n }\n }\n onMediaDetached() {\n const media = this.media;\n if (media) {\n removeEventListener(media, 'encrypted', this.onMediaEncrypted);\n removeEventListener(media, 'waitingforkey', this.onWaitingForKey);\n this.media = null;\n this.mediaKeys = null;\n }\n }\n _clear() {\n var _media$setMediaKeys;\n this._requestLicenseFailureCount = 0;\n this.keyIdToKeySessionPromise = {};\n this.bannedKeyIds = {};\n const mediaResolved = this.mediaResolved;\n if (mediaResolved) {\n mediaResolved();\n }\n if (!this.mediaKeys && !this.mediaKeySessions.length) {\n return;\n }\n const media = this.media;\n const mediaKeysList = this.mediaKeySessions.slice();\n this.mediaKeySessions = [];\n this.mediaKeys = null;\n LevelKey.clearKeyUriToKeyIdMap();\n\n // Close all sessions and remove media keys from the video element.\n const keySessionCount = mediaKeysList.length;\n EMEController.CDMCleanupPromise = Promise.all(mediaKeysList.map(mediaKeySessionContext => this.removeSession(mediaKeySessionContext)).concat((media == null || (_media$setMediaKeys = media.setMediaKeys(null)) == null ? void 0 : _media$setMediaKeys.catch(error => {\n this.log(`Could not clear media keys: ${error}`);\n if (!this.hls) return;\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.KEY_SYSTEM_DESTROY_MEDIA_KEYS_ERROR,\n fatal: false,\n error: new Error(`Could not clear media keys: ${error}`)\n });\n })) || Promise.resolve())).catch(error => {\n this.log(`Could not close sessions and clear media keys: ${error}`);\n if (!this.hls) return;\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.KEY_SYSTEM_DESTROY_CLOSE_SESSION_ERROR,\n fatal: false,\n error: new Error(`Could not close sessions and clear media keys: ${error}`)\n });\n }).then(() => {\n if (keySessionCount) {\n this.log('finished closing key sessions and clearing media keys');\n }\n });\n }\n onManifestLoading() {\n this._clear();\n }\n onManifestLoaded(event, {\n sessionKeys\n }) {\n if (!sessionKeys || !this.config.emeEnabled) {\n return;\n }\n if (!this.keyFormatPromise) {\n const keyFormats = sessionKeys.reduce((formats, sessionKey) => {\n if (formats.indexOf(sessionKey.keyFormat) === -1) {\n formats.push(sessionKey.keyFormat);\n }\n return formats;\n }, []);\n this.log(`Selecting key-system from session-keys ${keyFormats.join(', ')}`);\n this.keyFormatPromise = this.getKeyFormatPromise(keyFormats);\n }\n }\n removeSession(mediaKeySessionContext) {\n const {\n mediaKeysSession,\n licenseXhr,\n decryptdata\n } = mediaKeySessionContext;\n if (mediaKeysSession) {\n this.log(`Remove licenses and keys and close session \"${mediaKeysSession.sessionId}\" keyId: ${arrayToHex((decryptdata == null ? void 0 : decryptdata.keyId) || [])}`);\n if (mediaKeySessionContext._onmessage) {\n mediaKeysSession.removeEventListener('message', mediaKeySessionContext._onmessage);\n mediaKeySessionContext._onmessage = undefined;\n }\n if (mediaKeySessionContext._onkeystatuseschange) {\n mediaKeysSession.removeEventListener('keystatuseschange', mediaKeySessionContext._onkeystatuseschange);\n mediaKeySessionContext._onkeystatuseschange = undefined;\n }\n if (licenseXhr && licenseXhr.readyState !== XMLHttpRequest.DONE) {\n licenseXhr.abort();\n }\n mediaKeySessionContext.mediaKeysSession = mediaKeySessionContext.decryptdata = mediaKeySessionContext.licenseXhr = undefined;\n const index = this.mediaKeySessions.indexOf(mediaKeySessionContext);\n if (index > -1) {\n this.mediaKeySessions.splice(index, 1);\n }\n const {\n keyStatusTimeouts\n } = mediaKeySessionContext;\n if (keyStatusTimeouts) {\n Object.keys(keyStatusTimeouts).forEach(keyId => self.clearTimeout(keyStatusTimeouts[keyId]));\n }\n const {\n drmSystemOptions\n } = this.config;\n const removePromise = isPersistentSessionType(drmSystemOptions) ? new Promise((resolve, reject) => {\n self.setTimeout(() => reject(new Error(`MediaKeySession.remove() timeout`)), 8000);\n mediaKeysSession.remove().then(resolve).catch(reject);\n }) : Promise.resolve();\n return removePromise.catch(error => {\n this.log(`Could not remove session: ${error}`);\n if (!this.hls) return;\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.KEY_SYSTEM_DESTROY_REMOVE_SESSION_ERROR,\n fatal: false,\n error: new Error(`Could not remove session: ${error}`)\n });\n }).then(() => {\n return mediaKeysSession.close();\n }).catch(error => {\n this.log(`Could not close session: ${error}`);\n if (!this.hls) return;\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.KEY_SYSTEM_DESTROY_CLOSE_SESSION_ERROR,\n fatal: false,\n error: new Error(`Could not close session: ${error}`)\n });\n });\n }\n return Promise.resolve();\n }\n}\nEMEController.CDMCleanupPromise = void 0;\nfunction getKeyIdString(decryptdata) {\n if (!decryptdata) {\n throw new Error('Could not read keyId of undefined decryptdata');\n }\n if (decryptdata.keyId === null) {\n throw new Error('keyId is null');\n }\n return arrayToHex(decryptdata.keyId);\n}\nfunction getKeyStatus(decryptdata, keyContext) {\n if (decryptdata.keyId && keyContext.mediaKeysSession.keyStatuses.has(decryptdata.keyId)) {\n return keyContext.mediaKeysSession.keyStatuses.get(decryptdata.keyId);\n }\n if (decryptdata.matches(keyContext.decryptdata)) {\n return keyContext.keyStatus;\n }\n return undefined;\n}\nclass EMEKeyError extends Error {\n constructor(data, message) {\n super(message);\n this.data = void 0;\n data.error || (data.error = new Error(message));\n this.data = data;\n data.err = data.error;\n }\n}\nfunction getKeyStatusError(keyStatus, decryptdata) {\n const outputRestricted = keyStatus === 'output-restricted';\n const details = outputRestricted ? ErrorDetails.KEY_SYSTEM_STATUS_OUTPUT_RESTRICTED : ErrorDetails.KEY_SYSTEM_STATUS_INTERNAL_ERROR;\n return new EMEKeyError({\n type: ErrorTypes.KEY_SYSTEM_ERROR,\n details,\n fatal: false,\n decryptdata\n }, outputRestricted ? 'HDCP level output restricted' : `key status changed to \"${keyStatus}\"`);\n}\n\nclass FPSController {\n constructor(hls) {\n this.hls = void 0;\n this.isVideoPlaybackQualityAvailable = false;\n this.timer = void 0;\n this.media = null;\n this.lastTime = void 0;\n this.lastDroppedFrames = 0;\n this.lastDecodedFrames = 0;\n // stream controller must be provided as a dependency!\n this.streamController = void 0;\n this.hls = hls;\n this.registerListeners();\n }\n setStreamController(streamController) {\n this.streamController = streamController;\n }\n registerListeners() {\n this.hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n this.hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n }\n unregisterListeners() {\n this.hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n this.hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n }\n destroy() {\n if (this.timer) {\n clearInterval(this.timer);\n }\n this.unregisterListeners();\n this.isVideoPlaybackQualityAvailable = false;\n this.media = null;\n }\n onMediaAttaching(event, data) {\n const config = this.hls.config;\n if (config.capLevelOnFPSDrop) {\n const media = data.media instanceof self.HTMLVideoElement ? data.media : null;\n this.media = media;\n if (media && typeof media.getVideoPlaybackQuality === 'function') {\n this.isVideoPlaybackQualityAvailable = true;\n }\n self.clearInterval(this.timer);\n this.timer = self.setInterval(this.checkFPSInterval.bind(this), config.fpsDroppedMonitoringPeriod);\n }\n }\n onMediaDetaching() {\n this.media = null;\n }\n checkFPS(video, decodedFrames, droppedFrames) {\n const currentTime = performance.now();\n if (decodedFrames) {\n if (this.lastTime) {\n const currentPeriod = currentTime - this.lastTime;\n const currentDropped = droppedFrames - this.lastDroppedFrames;\n const currentDecoded = decodedFrames - this.lastDecodedFrames;\n const droppedFPS = 1000 * currentDropped / currentPeriod;\n const hls = this.hls;\n hls.trigger(Events.FPS_DROP, {\n currentDropped: currentDropped,\n currentDecoded: currentDecoded,\n totalDroppedFrames: droppedFrames\n });\n if (droppedFPS > 0) {\n // hls.logger.log('checkFPS : droppedFPS/decodedFPS:' + droppedFPS/(1000 * currentDecoded / currentPeriod));\n if (currentDropped > hls.config.fpsDroppedMonitoringThreshold * currentDecoded) {\n let currentLevel = hls.currentLevel;\n hls.logger.warn('drop FPS ratio greater than max allowed value for currentLevel: ' + currentLevel);\n if (currentLevel > 0 && (hls.autoLevelCapping === -1 || hls.autoLevelCapping >= currentLevel)) {\n currentLevel = currentLevel - 1;\n hls.trigger(Events.FPS_DROP_LEVEL_CAPPING, {\n level: currentLevel,\n droppedLevel: hls.currentLevel\n });\n hls.autoLevelCapping = currentLevel;\n this.streamController.nextLevelSwitch();\n }\n }\n }\n }\n this.lastTime = currentTime;\n this.lastDroppedFrames = droppedFrames;\n this.lastDecodedFrames = decodedFrames;\n }\n }\n checkFPSInterval() {\n const video = this.media;\n if (video) {\n if (this.isVideoPlaybackQualityAvailable) {\n const videoPlaybackQuality = video.getVideoPlaybackQuality();\n this.checkFPS(video, videoPlaybackQuality.totalVideoFrames, videoPlaybackQuality.droppedVideoFrames);\n } else {\n // HTMLVideoElement doesn't include the webkit types\n this.checkFPS(video, video.webkitDecodedFrameCount, video.webkitDroppedFrameCount);\n }\n }\n }\n}\n\nfunction sendAddTrackEvent(track, videoEl) {\n let event;\n try {\n event = new Event('addtrack');\n } catch (err) {\n // for IE11\n event = document.createEvent('Event');\n event.initEvent('addtrack', false, false);\n }\n event.track = track;\n videoEl.dispatchEvent(event);\n}\nfunction addCueToTrack(track, cue) {\n // Sometimes there are cue overlaps on segmented vtts so the same\n // cue can appear more than once in different vtt files.\n // This avoid showing duplicated cues with same timecode and text.\n const mode = track.mode;\n if (mode === 'disabled') {\n track.mode = 'hidden';\n }\n if (track.cues && !track.cues.getCueById(cue.id)) {\n try {\n track.addCue(cue);\n if (!track.cues.getCueById(cue.id)) {\n throw new Error(`addCue is failed for: ${cue}`);\n }\n } catch (err) {\n logger.debug(`[texttrack-utils]: ${err}`);\n try {\n const textTrackCue = new self.TextTrackCue(cue.startTime, cue.endTime, cue.text);\n textTrackCue.id = cue.id;\n track.addCue(textTrackCue);\n } catch (err2) {\n logger.debug(`[texttrack-utils]: Legacy TextTrackCue fallback failed: ${err2}`);\n }\n }\n }\n if (mode === 'disabled') {\n track.mode = mode;\n }\n}\nfunction clearCurrentCues(track, enterHandler) {\n // When track.mode is disabled, track.cues will be null.\n // To guarantee the removal of cues, we need to temporarily\n // change the mode to hidden\n const mode = track.mode;\n if (mode === 'disabled') {\n track.mode = 'hidden';\n }\n if (track.cues) {\n for (let i = track.cues.length; i--;) {\n if (enterHandler) {\n track.cues[i].removeEventListener('enter', enterHandler);\n }\n track.removeCue(track.cues[i]);\n }\n }\n if (mode === 'disabled') {\n track.mode = mode;\n }\n}\nfunction removeCuesInRange(track, start, end, predicate) {\n const mode = track.mode;\n if (mode === 'disabled') {\n track.mode = 'hidden';\n }\n if (track.cues && track.cues.length > 0) {\n const cues = getCuesInRange(track.cues, start, end);\n for (let i = 0; i < cues.length; i++) {\n if (!predicate || predicate(cues[i])) {\n track.removeCue(cues[i]);\n }\n }\n }\n if (mode === 'disabled') {\n track.mode = mode;\n }\n}\n\n// Find first cue starting at or after given time.\n// Modified version of binary search O(log(n)).\nfunction getFirstCueIndexFromTime(cues, time) {\n // If first cue starts at or after time, start there\n if (time <= cues[0].startTime) {\n return 0;\n }\n // If the last cue ends before time there is no overlap\n const len = cues.length - 1;\n if (time > cues[len].endTime) {\n return -1;\n }\n let left = 0;\n let right = len;\n let mid;\n while (left <= right) {\n mid = Math.floor((right + left) / 2);\n if (time < cues[mid].startTime) {\n right = mid - 1;\n } else if (time > cues[mid].startTime && left < len) {\n left = mid + 1;\n } else {\n // If it's not lower or higher, it must be equal.\n return mid;\n }\n }\n // At this point, left and right have swapped.\n // No direct match was found, left or right element must be the closest. Check which one has the smallest diff.\n return cues[left].startTime - time < time - cues[right].startTime ? left : right;\n}\nfunction getCuesInRange(cues, start, end) {\n const cuesFound = [];\n const firstCueInRange = getFirstCueIndexFromTime(cues, start);\n if (firstCueInRange > -1) {\n for (let i = firstCueInRange, len = cues.length; i < len; i++) {\n const cue = cues[i];\n if (cue.startTime >= start && cue.endTime <= end) {\n cuesFound.push(cue);\n } else if (cue.startTime > end) {\n return cuesFound;\n }\n }\n }\n return cuesFound;\n}\nfunction filterSubtitleTracks(textTrackList) {\n const tracks = [];\n for (let i = 0; i < textTrackList.length; i++) {\n const track = textTrackList[i];\n // Edge adds a track without a label; we don't want to use it\n if ((track.kind === 'subtitles' || track.kind === 'captions') && track.label) {\n tracks.push(textTrackList[i]);\n }\n }\n return tracks;\n}\n\nclass SubtitleTrackController extends BasePlaylistController {\n constructor(hls) {\n super(hls, 'subtitle-track-controller');\n this.media = null;\n this.tracks = [];\n this.groupIds = null;\n this.tracksInGroup = [];\n this.trackId = -1;\n this.currentTrack = null;\n this.selectDefaultTrack = true;\n this.queuedDefaultTrack = -1;\n this.useTextTrackPolling = false;\n this.subtitlePollingInterval = -1;\n this._subtitleDisplay = true;\n this.asyncPollTrackChange = () => this.pollTrackChange(0);\n this.onTextTracksChanged = () => {\n if (!this.useTextTrackPolling) {\n self.clearInterval(this.subtitlePollingInterval);\n }\n // Media is undefined when switching streams via loadSource()\n if (!this.media || !this.hls.config.renderTextTracksNatively) {\n return;\n }\n let textTrack = null;\n const tracks = filterSubtitleTracks(this.media.textTracks);\n for (let i = 0; i < tracks.length; i++) {\n if (tracks[i].mode === 'hidden') {\n // Do not break in case there is a following track with showing.\n textTrack = tracks[i];\n } else if (tracks[i].mode === 'showing') {\n textTrack = tracks[i];\n break;\n }\n }\n\n // Find internal track index for TextTrack\n const trackId = this.findTrackForTextTrack(textTrack);\n if (this.subtitleTrack !== trackId) {\n this.setSubtitleTrack(trackId);\n }\n };\n this.registerListeners();\n }\n destroy() {\n this.unregisterListeners();\n this.tracks.length = 0;\n this.tracksInGroup.length = 0;\n this.currentTrack = null;\n // @ts-ignore\n this.onTextTracksChanged = this.asyncPollTrackChange = null;\n super.destroy();\n }\n get subtitleDisplay() {\n return this._subtitleDisplay;\n }\n set subtitleDisplay(value) {\n this._subtitleDisplay = value;\n if (this.trackId > -1) {\n this.toggleTrackModes();\n }\n }\n registerListeners() {\n const {\n hls\n } = this;\n hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.on(Events.LEVEL_LOADING, this.onLevelLoading, this);\n hls.on(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n hls.on(Events.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this);\n hls.on(Events.ERROR, this.onError, this);\n }\n unregisterListeners() {\n const {\n hls\n } = this;\n hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.off(Events.LEVEL_LOADING, this.onLevelLoading, this);\n hls.off(Events.LEVEL_SWITCHING, this.onLevelSwitching, this);\n hls.off(Events.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this);\n hls.off(Events.ERROR, this.onError, this);\n }\n\n // Listen for subtitle track change, then extract the current track ID.\n onMediaAttached(event, data) {\n this.media = data.media;\n if (!this.media) {\n return;\n }\n if (this.queuedDefaultTrack > -1) {\n this.subtitleTrack = this.queuedDefaultTrack;\n this.queuedDefaultTrack = -1;\n }\n this.useTextTrackPolling = !(this.media.textTracks && 'onchange' in this.media.textTracks);\n if (this.useTextTrackPolling) {\n this.pollTrackChange(500);\n } else {\n this.media.textTracks.addEventListener('change', this.asyncPollTrackChange);\n }\n }\n pollTrackChange(timeout) {\n self.clearInterval(this.subtitlePollingInterval);\n this.subtitlePollingInterval = self.setInterval(this.onTextTracksChanged, timeout);\n }\n onMediaDetaching(event, data) {\n const media = this.media;\n if (!media) {\n return;\n }\n const transferringMedia = !!data.transferMedia;\n self.clearInterval(this.subtitlePollingInterval);\n if (!this.useTextTrackPolling) {\n media.textTracks.removeEventListener('change', this.asyncPollTrackChange);\n }\n if (this.trackId > -1) {\n this.queuedDefaultTrack = this.trackId;\n }\n\n // Disable all subtitle tracks before detachment so when reattached only tracks in that content are enabled.\n this.subtitleTrack = -1;\n this.media = null;\n if (transferringMedia) {\n return;\n }\n const textTracks = filterSubtitleTracks(media.textTracks);\n // Clear loaded cues on media detachment from tracks\n textTracks.forEach(track => {\n clearCurrentCues(track);\n });\n }\n onManifestLoading() {\n this.tracks = [];\n this.groupIds = null;\n this.tracksInGroup = [];\n this.trackId = -1;\n this.currentTrack = null;\n this.selectDefaultTrack = true;\n }\n\n // Fired whenever a new manifest is loaded.\n onManifestParsed(event, data) {\n this.tracks = data.subtitleTracks;\n }\n onSubtitleTrackLoaded(event, data) {\n const {\n id,\n groupId,\n details\n } = data;\n const trackInActiveGroup = this.tracksInGroup[id];\n if (!trackInActiveGroup || trackInActiveGroup.groupId !== groupId) {\n this.warn(`Subtitle track with id:${id} and group:${groupId} not found in active group ${trackInActiveGroup == null ? void 0 : trackInActiveGroup.groupId}`);\n return;\n }\n const curDetails = trackInActiveGroup.details;\n trackInActiveGroup.details = data.details;\n this.log(`Subtitle track ${id} \"${trackInActiveGroup.name}\" lang:${trackInActiveGroup.lang} group:${groupId} loaded [${details.startSN}-${details.endSN}]`);\n if (id === this.trackId) {\n this.playlistLoaded(id, data, curDetails);\n }\n }\n onLevelLoading(event, data) {\n this.switchLevel(data.level);\n }\n onLevelSwitching(event, data) {\n this.switchLevel(data.level);\n }\n switchLevel(levelIndex) {\n const levelInfo = this.hls.levels[levelIndex];\n if (!levelInfo) {\n return;\n }\n const subtitleGroups = levelInfo.subtitleGroups || null;\n const currentGroups = this.groupIds;\n let currentTrack = this.currentTrack;\n if (!subtitleGroups || (currentGroups == null ? void 0 : currentGroups.length) !== (subtitleGroups == null ? void 0 : subtitleGroups.length) || subtitleGroups != null && subtitleGroups.some(groupId => (currentGroups == null ? void 0 : currentGroups.indexOf(groupId)) === -1)) {\n this.groupIds = subtitleGroups;\n this.trackId = -1;\n this.currentTrack = null;\n const subtitleTracks = this.tracks.filter(track => !subtitleGroups || subtitleGroups.indexOf(track.groupId) !== -1);\n if (subtitleTracks.length) {\n // Disable selectDefaultTrack if there are no default tracks\n if (this.selectDefaultTrack && !subtitleTracks.some(track => track.default)) {\n this.selectDefaultTrack = false;\n }\n // track.id should match hls.audioTracks index\n subtitleTracks.forEach((track, i) => {\n track.id = i;\n });\n } else if (!currentTrack && !this.tracksInGroup.length) {\n // Do not dispatch SUBTITLE_TRACKS_UPDATED when there were and are no tracks\n return;\n }\n this.tracksInGroup = subtitleTracks;\n\n // Find preferred track\n const subtitlePreference = this.hls.config.subtitlePreference;\n if (!currentTrack && subtitlePreference) {\n this.selectDefaultTrack = false;\n const groupIndex = findMatchingOption(subtitlePreference, subtitleTracks);\n if (groupIndex > -1) {\n currentTrack = subtitleTracks[groupIndex];\n } else {\n const allIndex = findMatchingOption(subtitlePreference, this.tracks);\n currentTrack = this.tracks[allIndex];\n }\n }\n\n // Select initial track\n let trackId = this.findTrackId(currentTrack);\n if (trackId === -1 && currentTrack) {\n trackId = this.findTrackId(null);\n }\n\n // Dispatch events and load track if needed\n const subtitleTracksUpdated = {\n subtitleTracks\n };\n this.log(`Updating subtitle tracks, ${subtitleTracks.length} track(s) found in \"${subtitleGroups == null ? void 0 : subtitleGroups.join(',')}\" group-id`);\n this.hls.trigger(Events.SUBTITLE_TRACKS_UPDATED, subtitleTracksUpdated);\n if (trackId !== -1 && this.trackId === -1) {\n this.setSubtitleTrack(trackId);\n }\n }\n }\n findTrackId(currentTrack) {\n const tracks = this.tracksInGroup;\n const selectDefault = this.selectDefaultTrack;\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n if (selectDefault && !track.default || !selectDefault && !currentTrack) {\n continue;\n }\n if (!currentTrack || matchesOption(track, currentTrack)) {\n return i;\n }\n }\n if (currentTrack) {\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n if (mediaAttributesIdentical(currentTrack.attrs, track.attrs, ['LANGUAGE', 'ASSOC-LANGUAGE', 'CHARACTERISTICS'])) {\n return i;\n }\n }\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n if (mediaAttributesIdentical(currentTrack.attrs, track.attrs, ['LANGUAGE'])) {\n return i;\n }\n }\n }\n return -1;\n }\n findTrackForTextTrack(textTrack) {\n if (textTrack) {\n const tracks = this.tracksInGroup;\n for (let i = 0; i < tracks.length; i++) {\n const track = tracks[i];\n if (subtitleTrackMatchesTextTrack(track, textTrack)) {\n return i;\n }\n }\n }\n return -1;\n }\n onError(event, data) {\n if (data.fatal || !data.context) {\n return;\n }\n if (data.context.type === PlaylistContextType.SUBTITLE_TRACK && data.context.id === this.trackId && (!this.groupIds || this.groupIds.indexOf(data.context.groupId) !== -1)) {\n this.checkRetry(data);\n }\n }\n get allSubtitleTracks() {\n return this.tracks;\n }\n\n /** get alternate subtitle tracks list from playlist **/\n get subtitleTracks() {\n return this.tracksInGroup;\n }\n\n /** get/set index of the selected subtitle track (based on index in subtitle track lists) **/\n get subtitleTrack() {\n return this.trackId;\n }\n set subtitleTrack(newId) {\n this.selectDefaultTrack = false;\n this.setSubtitleTrack(newId);\n }\n setSubtitleOption(subtitleOption) {\n this.hls.config.subtitlePreference = subtitleOption;\n if (subtitleOption) {\n if (subtitleOption.id === -1) {\n this.setSubtitleTrack(-1);\n return null;\n }\n const allSubtitleTracks = this.allSubtitleTracks;\n this.selectDefaultTrack = false;\n if (allSubtitleTracks.length) {\n // First see if current option matches (no switch op)\n const currentTrack = this.currentTrack;\n if (currentTrack && matchesOption(subtitleOption, currentTrack)) {\n return currentTrack;\n }\n // Find option in current group\n const groupIndex = findMatchingOption(subtitleOption, this.tracksInGroup);\n if (groupIndex > -1) {\n const track = this.tracksInGroup[groupIndex];\n this.setSubtitleTrack(groupIndex);\n return track;\n } else if (currentTrack) {\n // If this is not the initial selection return null\n // option should have matched one in active group\n return null;\n } else {\n // Find the option in all tracks for initial selection\n const allIndex = findMatchingOption(subtitleOption, allSubtitleTracks);\n if (allIndex > -1) {\n return allSubtitleTracks[allIndex];\n }\n }\n }\n }\n return null;\n }\n loadPlaylist(hlsUrlParameters) {\n super.loadPlaylist();\n if (this.shouldLoadPlaylist(this.currentTrack)) {\n this.scheduleLoading(this.currentTrack, hlsUrlParameters);\n }\n }\n loadingPlaylist(currentTrack, hlsUrlParameters) {\n super.loadingPlaylist(currentTrack, hlsUrlParameters);\n const id = currentTrack.id;\n const groupId = currentTrack.groupId;\n const url = this.getUrlWithDirectives(currentTrack.url, hlsUrlParameters);\n const details = currentTrack.details;\n const age = details == null ? void 0 : details.age;\n this.log(`Loading subtitle ${id} \"${currentTrack.name}\" lang:${currentTrack.lang} group:${groupId}${(hlsUrlParameters == null ? void 0 : hlsUrlParameters.msn) !== undefined ? ' at sn ' + hlsUrlParameters.msn + ' part ' + hlsUrlParameters.part : ''}${age && details.live ? ' age ' + age.toFixed(1) + (details.type ? ' ' + details.type || '' : '') : ''} ${url}`);\n this.hls.trigger(Events.SUBTITLE_TRACK_LOADING, {\n url,\n id,\n groupId,\n deliveryDirectives: hlsUrlParameters || null,\n track: currentTrack\n });\n }\n\n /**\n * Disables the old subtitleTrack and sets current mode on the next subtitleTrack.\n * This operates on the DOM textTracks.\n * A value of -1 will disable all subtitle tracks.\n */\n toggleTrackModes() {\n const {\n media\n } = this;\n if (!media) {\n return;\n }\n const textTracks = filterSubtitleTracks(media.textTracks);\n const currentTrack = this.currentTrack;\n let nextTrack;\n if (currentTrack) {\n nextTrack = textTracks.filter(textTrack => subtitleTrackMatchesTextTrack(currentTrack, textTrack))[0];\n if (!nextTrack) {\n this.warn(`Unable to find subtitle TextTrack with name \"${currentTrack.name}\" and language \"${currentTrack.lang}\"`);\n }\n }\n [].slice.call(textTracks).forEach(track => {\n if (track.mode !== 'disabled' && track !== nextTrack) {\n track.mode = 'disabled';\n }\n });\n if (nextTrack) {\n const mode = this.subtitleDisplay ? 'showing' : 'hidden';\n if (nextTrack.mode !== mode) {\n nextTrack.mode = mode;\n }\n }\n }\n\n /**\n * This method is responsible for validating the subtitle index and periodically reloading if live.\n * Dispatches the SUBTITLE_TRACK_SWITCH event, which instructs the subtitle-stream-controller to load the selected track.\n */\n setSubtitleTrack(newId) {\n const tracks = this.tracksInGroup;\n\n // setting this.subtitleTrack will trigger internal logic\n // if media has not been attached yet, it will fail\n // we keep a reference to the default track id\n // and we'll set subtitleTrack when onMediaAttached is triggered\n if (!this.media) {\n this.queuedDefaultTrack = newId;\n return;\n }\n\n // exit if track id as already set or invalid\n if (newId < -1 || newId >= tracks.length || !isFiniteNumber(newId)) {\n this.warn(`Invalid subtitle track id: ${newId}`);\n return;\n }\n this.selectDefaultTrack = false;\n const lastTrack = this.currentTrack;\n const track = tracks[newId] || null;\n this.trackId = newId;\n this.currentTrack = track;\n this.toggleTrackModes();\n if (!track) {\n // switch to -1\n this.hls.trigger(Events.SUBTITLE_TRACK_SWITCH, {\n id: newId\n });\n return;\n }\n const trackLoaded = !!track.details && !track.details.live;\n if (newId === this.trackId && track === lastTrack && trackLoaded) {\n return;\n }\n this.log(`Switching to subtitle-track ${newId}` + (track ? ` \"${track.name}\" lang:${track.lang} group:${track.groupId}` : ''));\n const {\n id,\n groupId = '',\n name,\n type,\n url\n } = track;\n this.hls.trigger(Events.SUBTITLE_TRACK_SWITCH, {\n id,\n groupId,\n name,\n type,\n url\n });\n const hlsUrlParameters = this.switchParams(track.url, lastTrack == null ? void 0 : lastTrack.details, track.details);\n this.loadPlaylist(hlsUrlParameters);\n }\n}\n\n/**\n * Generate a random v4 UUID\n *\n * @returns A random v4 UUID\n *\n * @group Utils\n *\n * @beta\n */\nfunction uuid() {\n try {\n return crypto.randomUUID();\n } catch (error) {\n try {\n const url = URL.createObjectURL(new Blob());\n const uuid = url.toString();\n URL.revokeObjectURL(url);\n return uuid.slice(uuid.lastIndexOf('/') + 1);\n } catch (error) {\n let dt = new Date().getTime();\n const uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, c => {\n const r = (dt + Math.random() * 16) % 16 | 0;\n dt = Math.floor(dt / 16);\n return (c == 'x' ? r : r & 0x3 | 0x8).toString(16);\n });\n return uuid;\n }\n }\n}\n\n// From https://github.com/darkskyapp/string-hash\nfunction hash(text) {\n let hash = 5381;\n let i = text.length;\n while (i) {\n hash = hash * 33 ^ text.charCodeAt(--i);\n }\n return (hash >>> 0).toString();\n}\n\nconst ALIGNED_END_THRESHOLD_SECONDS = 0.025;\nlet TimelineOccupancy = /*#__PURE__*/function (TimelineOccupancy) {\n TimelineOccupancy[TimelineOccupancy[\"Point\"] = 0] = \"Point\";\n TimelineOccupancy[TimelineOccupancy[\"Range\"] = 1] = \"Range\";\n return TimelineOccupancy;\n}({});\nfunction generateAssetIdentifier(interstitial, uri, assetListIndex) {\n return `${interstitial.identifier}-${assetListIndex + 1}-${hash(uri)}`;\n}\nclass InterstitialEvent {\n constructor(dateRange, base) {\n this.base = void 0;\n this._duration = null;\n this._timelineStart = null;\n this.appendInPlaceDisabled = void 0;\n this.appendInPlaceStarted = void 0;\n this.dateRange = void 0;\n this.hasPlayed = false;\n this.cumulativeDuration = 0;\n this.resumeOffset = NaN;\n this.playoutLimit = NaN;\n this.restrictions = {\n skip: false,\n jump: false\n };\n this.snapOptions = {\n out: false,\n in: false\n };\n this.assetList = [];\n this.assetListLoader = void 0;\n this.assetListResponse = null;\n this.resumeAnchor = void 0;\n this.error = void 0;\n this.resetOnResume = void 0;\n this.base = base;\n this.dateRange = dateRange;\n this.setDateRange(dateRange);\n }\n setDateRange(dateRange) {\n this.dateRange = dateRange;\n this.resumeOffset = dateRange.attr.optionalFloat('X-RESUME-OFFSET', this.resumeOffset);\n this.playoutLimit = dateRange.attr.optionalFloat('X-PLAYOUT-LIMIT', this.playoutLimit);\n this.restrictions = dateRange.attr.enumeratedStringList('X-RESTRICT', this.restrictions);\n this.snapOptions = dateRange.attr.enumeratedStringList('X-SNAP', this.snapOptions);\n }\n reset() {\n var _this$assetListLoader;\n this.appendInPlaceStarted = false;\n (_this$assetListLoader = this.assetListLoader) == null || _this$assetListLoader.destroy();\n this.assetListLoader = undefined;\n if (!this.supplementsPrimary) {\n this.assetListResponse = null;\n this.assetList = [];\n this._duration = null;\n }\n // `error?` is reset when seeking back over interstitial `startOffset`\n // using `schedule.resetErrorsInRange(start, end)`.\n }\n isAssetPastPlayoutLimit(assetIndex) {\n var _this$assetList$asset;\n if (assetIndex > 0 && assetIndex >= this.assetList.length) {\n return true;\n }\n const playoutLimit = this.playoutLimit;\n if (assetIndex <= 0 || isNaN(playoutLimit)) {\n return false;\n }\n if (playoutLimit === 0) {\n return true;\n }\n const assetOffset = ((_this$assetList$asset = this.assetList[assetIndex]) == null ? void 0 : _this$assetList$asset.startOffset) || 0;\n return assetOffset > playoutLimit;\n }\n findAssetIndex(asset) {\n const index = this.assetList.indexOf(asset);\n return index;\n }\n get identifier() {\n return this.dateRange.id;\n }\n get startDate() {\n return this.dateRange.startDate;\n }\n get startTime() {\n // Primary media timeline start time\n const startTime = this.dateRange.startTime;\n if (this.snapOptions.out) {\n const frag = this.dateRange.tagAnchor;\n if (frag) {\n return getSnapToFragmentTime(startTime, frag);\n }\n }\n return startTime;\n }\n get startOffset() {\n return this.cue.pre ? 0 : this.startTime;\n }\n get startIsAligned() {\n if (this.startTime === 0 || this.snapOptions.out) {\n return true;\n }\n const frag = this.dateRange.tagAnchor;\n if (frag) {\n const startTime = this.dateRange.startTime;\n const snappedStart = getSnapToFragmentTime(startTime, frag);\n return startTime - snappedStart < 0.1;\n }\n return false;\n }\n get resumptionOffset() {\n const resumeOffset = this.resumeOffset;\n const offset = isFiniteNumber(resumeOffset) ? resumeOffset : this.duration;\n return this.cumulativeDuration + offset;\n }\n get resumeTime() {\n // Primary media timeline resumption time\n const resumeTime = this.startOffset + this.resumptionOffset;\n if (this.snapOptions.in) {\n const frag = this.resumeAnchor;\n if (frag) {\n return getSnapToFragmentTime(resumeTime, frag);\n }\n }\n return resumeTime;\n }\n get appendInPlace() {\n if (this.appendInPlaceStarted) {\n return true;\n }\n if (this.appendInPlaceDisabled) {\n return false;\n }\n if (!this.cue.once && !this.cue.pre &&\n // preroll starts at startPosition before startPosition is known (live)\n this.startIsAligned && (isNaN(this.playoutLimit) && isNaN(this.resumeOffset) || this.resumeOffset && this.duration && Math.abs(this.resumeOffset - this.duration) < ALIGNED_END_THRESHOLD_SECONDS)) {\n return true;\n }\n return false;\n }\n set appendInPlace(value) {\n if (this.appendInPlaceStarted) {\n this.resetOnResume = !value;\n return;\n }\n this.appendInPlaceDisabled = !value;\n }\n\n // Extended timeline start time\n get timelineStart() {\n if (this._timelineStart !== null) {\n return this._timelineStart;\n }\n return this.startTime;\n }\n set timelineStart(value) {\n this._timelineStart = value;\n }\n get duration() {\n const playoutLimit = this.playoutLimit;\n let duration;\n if (this._duration !== null) {\n duration = this._duration;\n } else if (this.dateRange.duration) {\n duration = this.dateRange.duration;\n } else {\n duration = this.dateRange.plannedDuration || 0;\n }\n if (!isNaN(playoutLimit) && playoutLimit < duration) {\n duration = playoutLimit;\n }\n return duration;\n }\n set duration(value) {\n this._duration = value;\n }\n get cue() {\n return this.dateRange.cue;\n }\n get timelineOccupancy() {\n if (this.dateRange.attr['X-TIMELINE-OCCUPIES'] === 'RANGE') {\n return TimelineOccupancy.Range;\n }\n return TimelineOccupancy.Point;\n }\n get supplementsPrimary() {\n return this.dateRange.attr['X-TIMELINE-STYLE'] === 'PRIMARY';\n }\n get contentMayVary() {\n return this.dateRange.attr['X-CONTENT-MAY-VARY'] !== 'NO';\n }\n get assetUrl() {\n return this.dateRange.attr['X-ASSET-URI'];\n }\n get assetListUrl() {\n return this.dateRange.attr['X-ASSET-LIST'];\n }\n get baseUrl() {\n return this.base.url;\n }\n get assetListLoaded() {\n return this.assetList.length > 0 || this.assetListResponse !== null;\n }\n toString() {\n return eventToString(this);\n }\n}\nfunction getSnapToFragmentTime(time, frag) {\n return time - frag.start < frag.duration / 2 && !(Math.abs(time - (frag.start + frag.duration)) < ALIGNED_END_THRESHOLD_SECONDS) ? frag.start : frag.start + frag.duration;\n}\nfunction getInterstitialUrl(uri, sessionId, baseUrl) {\n const url = new self.URL(uri, baseUrl);\n if (url.protocol !== 'data:') {\n url.searchParams.set('_HLS_primary_id', sessionId);\n }\n return url;\n}\nfunction getNextAssetIndex(interstitial, assetListIndex) {\n while ((_interstitial$assetLi = interstitial.assetList[++assetListIndex]) != null && _interstitial$assetLi.error) {\n var _interstitial$assetLi;\n } /* no-op */\n return assetListIndex;\n}\nfunction eventToString(interstitial) {\n return `[\"${interstitial.identifier}\" ${interstitial.cue.pre ? '<pre>' : interstitial.cue.post ? '<post>' : ''}${interstitial.timelineStart.toFixed(2)}-${interstitial.resumeTime.toFixed(2)}]`;\n}\nfunction eventAssetToString(asset) {\n const start = asset.timelineStart;\n const duration = asset.duration || 0;\n return `[\"${asset.identifier}\" ${start.toFixed(2)}-${(start + duration).toFixed(2)}]`;\n}\n\nclass HlsAssetPlayer {\n constructor(HlsPlayerClass, userConfig, interstitial, assetItem) {\n this.hls = void 0;\n this.interstitial = void 0;\n this.assetItem = void 0;\n this.tracks = null;\n this.hasDetails = false;\n this.mediaAttached = null;\n this._currentTime = void 0;\n this._bufferedEosTime = void 0;\n this.checkPlayout = () => {\n if (this.reachedPlayout(this.currentTime) && this.hls) {\n this.hls.trigger(Events.PLAYOUT_LIMIT_REACHED, {});\n }\n };\n const hls = this.hls = new HlsPlayerClass(userConfig);\n this.interstitial = interstitial;\n this.assetItem = assetItem;\n const detailsLoaded = () => {\n this.hasDetails = true;\n };\n hls.once(Events.LEVEL_LOADED, detailsLoaded);\n hls.once(Events.AUDIO_TRACK_LOADED, detailsLoaded);\n hls.once(Events.SUBTITLE_TRACK_LOADED, detailsLoaded);\n hls.on(Events.MEDIA_ATTACHING, (name, {\n media\n }) => {\n this.removeMediaListeners();\n this.mediaAttached = media;\n const event = this.interstitial;\n if (event.playoutLimit) {\n media.addEventListener('timeupdate', this.checkPlayout);\n if (this.appendInPlace) {\n hls.on(Events.BUFFER_APPENDED, () => {\n const bufferedEnd = this.bufferedEnd;\n if (this.reachedPlayout(bufferedEnd)) {\n this._bufferedEosTime = bufferedEnd;\n hls.trigger(Events.BUFFERED_TO_END, undefined);\n }\n });\n }\n }\n });\n }\n get appendInPlace() {\n return this.interstitial.appendInPlace;\n }\n loadSource() {\n const hls = this.hls;\n if (!hls) {\n return;\n }\n if (!hls.url) {\n let uri = this.assetItem.uri;\n try {\n uri = getInterstitialUrl(uri, hls.config.primarySessionId || '').href;\n } catch (error) {\n // Ignore error parsing ASSET_URI or adding _HLS_primary_id to it. The\n // issue should surface as an INTERSTITIAL_ASSET_ERROR loading the asset.\n }\n hls.loadSource(uri);\n } else if (hls.levels.length && !hls.started) {\n hls.startLoad(-1, true);\n }\n }\n bufferedInPlaceToEnd(media) {\n var _this$hls;\n if (!this.appendInPlace) {\n return false;\n }\n if ((_this$hls = this.hls) != null && _this$hls.bufferedToEnd) {\n return true;\n }\n if (!media) {\n return false;\n }\n const duration = Math.min(this._bufferedEosTime || Infinity, this.duration);\n const start = this.timelineOffset;\n const bufferInfo = BufferHelper.bufferInfo(media, start, 0);\n const bufferedEnd = this.getAssetTime(bufferInfo.end);\n return bufferedEnd >= duration - 0.02;\n }\n reachedPlayout(time) {\n const interstitial = this.interstitial;\n const playoutLimit = interstitial.playoutLimit;\n return this.startOffset + time >= playoutLimit;\n }\n get destroyed() {\n var _this$hls2;\n return !((_this$hls2 = this.hls) != null && _this$hls2.userConfig);\n }\n get assetId() {\n return this.assetItem.identifier;\n }\n get interstitialId() {\n return this.assetItem.parentIdentifier;\n }\n get media() {\n var _this$hls3;\n return ((_this$hls3 = this.hls) == null ? void 0 : _this$hls3.media) || null;\n }\n get bufferedEnd() {\n const media = this.media || this.mediaAttached;\n if (!media) {\n if (this._bufferedEosTime) {\n return this._bufferedEosTime;\n }\n return this.currentTime;\n }\n const bufferInfo = BufferHelper.bufferInfo(media, media.currentTime, 0.001);\n return this.getAssetTime(bufferInfo.end);\n }\n get currentTime() {\n const media = this.media || this.mediaAttached;\n if (!media) {\n return this._currentTime || 0;\n }\n return this.getAssetTime(media.currentTime);\n }\n get duration() {\n const duration = this.assetItem.duration;\n if (!duration) {\n return 0;\n }\n const playoutLimit = this.interstitial.playoutLimit;\n if (playoutLimit) {\n const assetPlayout = playoutLimit - this.startOffset;\n if (assetPlayout > 0 && assetPlayout < duration) {\n return assetPlayout;\n }\n }\n return duration;\n }\n get remaining() {\n const duration = this.duration;\n if (!duration) {\n return 0;\n }\n return Math.max(0, duration - this.currentTime);\n }\n get startOffset() {\n return this.assetItem.startOffset;\n }\n get timelineOffset() {\n var _this$hls4;\n return ((_this$hls4 = this.hls) == null ? void 0 : _this$hls4.config.timelineOffset) || 0;\n }\n set timelineOffset(value) {\n const timelineOffset = this.timelineOffset;\n if (value !== timelineOffset) {\n const diff = value - timelineOffset;\n if (Math.abs(diff) > 1 / 90000 && this.hls) {\n if (this.hasDetails) {\n throw new Error(`Cannot set timelineOffset after playlists are loaded`);\n }\n this.hls.config.timelineOffset = value;\n }\n }\n }\n getAssetTime(time) {\n const timelineOffset = this.timelineOffset;\n const duration = this.duration;\n return Math.min(Math.max(0, time - timelineOffset), duration);\n }\n removeMediaListeners() {\n const media = this.mediaAttached;\n if (media) {\n this._currentTime = media.currentTime;\n this.bufferSnapShot();\n media.removeEventListener('timeupdate', this.checkPlayout);\n }\n }\n bufferSnapShot() {\n if (this.mediaAttached) {\n var _this$hls5;\n if ((_this$hls5 = this.hls) != null && _this$hls5.bufferedToEnd) {\n this._bufferedEosTime = this.bufferedEnd;\n }\n }\n }\n destroy() {\n this.removeMediaListeners();\n if (this.hls) {\n this.hls.destroy();\n }\n this.hls = null;\n // @ts-ignore\n this.tracks = this.mediaAttached = this.checkPlayout = null;\n }\n attachMedia(data) {\n var _this$hls6;\n this.loadSource();\n (_this$hls6 = this.hls) == null || _this$hls6.attachMedia(data);\n }\n detachMedia() {\n var _this$hls7;\n this.removeMediaListeners();\n this.mediaAttached = null;\n (_this$hls7 = this.hls) == null || _this$hls7.detachMedia();\n }\n resumeBuffering() {\n var _this$hls8;\n (_this$hls8 = this.hls) == null || _this$hls8.resumeBuffering();\n }\n pauseBuffering() {\n var _this$hls9;\n (_this$hls9 = this.hls) == null || _this$hls9.pauseBuffering();\n }\n transferMedia() {\n var _this$hls0;\n this.bufferSnapShot();\n return ((_this$hls0 = this.hls) == null ? void 0 : _this$hls0.transferMedia()) || null;\n }\n resetDetails() {\n const hls = this.hls;\n if (hls && this.hasDetails) {\n hls.stopLoad();\n const deleteDetails = obj => delete obj.details;\n hls.levels.forEach(deleteDetails);\n hls.allAudioTracks.forEach(deleteDetails);\n hls.allSubtitleTracks.forEach(deleteDetails);\n this.hasDetails = false;\n }\n }\n on(event, listener, context) {\n var _this$hls1;\n (_this$hls1 = this.hls) == null || _this$hls1.on(event, listener);\n }\n once(event, listener, context) {\n var _this$hls10;\n (_this$hls10 = this.hls) == null || _this$hls10.once(event, listener);\n }\n off(event, listener, context) {\n var _this$hls11;\n (_this$hls11 = this.hls) == null || _this$hls11.off(event, listener);\n }\n toString() {\n var _this$hls12;\n return `HlsAssetPlayer: ${eventAssetToString(this.assetItem)} ${(_this$hls12 = this.hls) == null ? void 0 : _this$hls12.sessionId} ${this.appendInPlace ? 'append-in-place' : ''}`;\n }\n}\n\nconst ABUTTING_THRESHOLD_SECONDS = 0.033;\nclass InterstitialsSchedule extends Logger {\n constructor(onScheduleUpdate, logger) {\n super('interstitials-sched', logger);\n this.onScheduleUpdate = void 0;\n this.eventMap = {};\n this.events = null;\n this.items = null;\n this.durations = {\n primary: 0,\n playout: 0,\n integrated: 0\n };\n this.onScheduleUpdate = onScheduleUpdate;\n }\n destroy() {\n this.reset();\n // @ts-ignore\n this.onScheduleUpdate = null;\n }\n reset() {\n this.eventMap = {};\n this.setDurations(0, 0, 0);\n if (this.events) {\n this.events.forEach(interstitial => interstitial.reset());\n }\n this.events = this.items = null;\n }\n resetErrorsInRange(start, end) {\n if (this.events) {\n return this.events.reduce((count, interstitial) => {\n if (start <= interstitial.startOffset && end > interstitial.startOffset) {\n delete interstitial.error;\n return count + 1;\n }\n return count;\n }, 0);\n }\n return 0;\n }\n get duration() {\n const items = this.items;\n return items ? items[items.length - 1].end : 0;\n }\n get length() {\n return this.items ? this.items.length : 0;\n }\n getEvent(identifier) {\n return identifier ? this.eventMap[identifier] || null : null;\n }\n hasEvent(identifier) {\n return identifier in this.eventMap;\n }\n findItemIndex(item, time) {\n if (item.event) {\n // Find Event Item\n return this.findEventIndex(item.event.identifier);\n }\n // Find Primary Item\n let index = -1;\n if (item.nextEvent) {\n index = this.findEventIndex(item.nextEvent.identifier) - 1;\n } else if (item.previousEvent) {\n index = this.findEventIndex(item.previousEvent.identifier) + 1;\n }\n const items = this.items;\n if (items) {\n if (!items[index]) {\n if (time === undefined) {\n time = item.start;\n }\n index = this.findItemIndexAtTime(time);\n }\n // Only return index of a Primary Item\n while (index >= 0 && (_items$index = items[index]) != null && _items$index.event) {\n var _items$index;\n // If index found is an interstitial it is not a valid result as it should have been matched up top\n // decrement until result is negative (not found) or a primary segment\n index--;\n }\n }\n return index;\n }\n findItemIndexAtTime(timelinePos, timelineType) {\n const items = this.items;\n if (items) {\n for (let i = 0; i < items.length; i++) {\n let timeRange = items[i];\n if (timelineType && timelineType !== 'primary') {\n timeRange = timeRange[timelineType];\n }\n if (timelinePos === timeRange.start || timelinePos > timeRange.start && timelinePos < timeRange.end) {\n return i;\n }\n }\n }\n return -1;\n }\n findJumpRestrictedIndex(startIndex, endIndex) {\n const items = this.items;\n if (items) {\n for (let i = startIndex; i <= endIndex; i++) {\n if (!items[i]) {\n break;\n }\n const event = items[i].event;\n if (event != null && event.restrictions.jump && !event.appendInPlace) {\n return i;\n }\n }\n }\n return -1;\n }\n findEventIndex(identifier) {\n const items = this.items;\n if (items) {\n for (let i = items.length; i--;) {\n var _items$i$event;\n if (((_items$i$event = items[i].event) == null ? void 0 : _items$i$event.identifier) === identifier) {\n return i;\n }\n }\n }\n return -1;\n }\n findAssetIndex(event, timelinePos) {\n const assetList = event.assetList;\n const length = assetList.length;\n if (length > 1) {\n for (let i = 0; i < length; i++) {\n const asset = assetList[i];\n if (!asset.error) {\n const timelineStart = asset.timelineStart;\n if (timelinePos === timelineStart || timelinePos > timelineStart && (timelinePos < timelineStart + (asset.duration || 0) || i === length - 1)) {\n return i;\n }\n }\n }\n }\n return 0;\n }\n get assetIdAtEnd() {\n var _this$items;\n const interstitialAtEnd = (_this$items = this.items) == null || (_this$items = _this$items[this.length - 1]) == null ? void 0 : _this$items.event;\n if (interstitialAtEnd) {\n const assetList = interstitialAtEnd.assetList;\n const assetAtEnd = assetList[assetList.length - 1];\n if (assetAtEnd) {\n return assetAtEnd.identifier;\n }\n }\n return null;\n }\n parseInterstitialDateRanges(mediaSelection, enableAppendInPlace) {\n const details = mediaSelection.main.details;\n const {\n dateRanges\n } = details;\n const previousInterstitialEvents = this.events;\n const interstitialEvents = this.parseDateRanges(dateRanges, {\n url: details.url\n }, enableAppendInPlace);\n const ids = Object.keys(dateRanges);\n const removedInterstitials = previousInterstitialEvents ? previousInterstitialEvents.filter(event => !ids.includes(event.identifier)) : [];\n if (interstitialEvents.length) {\n // pre-rolls, post-rolls, and events with the same start time are played in playlist tag order\n // all other events are ordered by start time\n interstitialEvents.sort((a, b) => {\n const aPre = a.cue.pre;\n const aPost = a.cue.post;\n const bPre = b.cue.pre;\n const bPost = b.cue.post;\n if (aPre && !bPre) {\n return -1;\n }\n if (bPre && !aPre) {\n return 1;\n }\n if (aPost && !bPost) {\n return 1;\n }\n if (bPost && !aPost) {\n return -1;\n }\n if (!aPre && !bPre && !aPost && !bPost) {\n const startA = a.startTime;\n const startB = b.startTime;\n if (startA !== startB) {\n return startA - startB;\n }\n }\n return a.dateRange.tagOrder - b.dateRange.tagOrder;\n });\n }\n this.events = interstitialEvents;\n\n // Clear removed DateRanges from buffered list (kills playback of active Interstitials)\n removedInterstitials.forEach(interstitial => {\n this.removeEvent(interstitial);\n });\n this.updateSchedule(mediaSelection, removedInterstitials);\n }\n updateSchedule(mediaSelection, removedInterstitials = [], forceUpdate = false) {\n const events = this.events || [];\n if (events.length || removedInterstitials.length || this.length < 2) {\n const currentItems = this.items;\n const updatedItems = this.parseSchedule(events, mediaSelection);\n const updated = forceUpdate || removedInterstitials.length || (currentItems == null ? void 0 : currentItems.length) !== updatedItems.length || updatedItems.some((item, i) => {\n return Math.abs(item.playout.start - currentItems[i].playout.start) > 0.005 || Math.abs(item.playout.end - currentItems[i].playout.end) > 0.005;\n });\n if (updated) {\n this.items = updatedItems;\n // call interstitials-controller onScheduleUpdated()\n this.onScheduleUpdate(removedInterstitials, currentItems);\n }\n }\n }\n parseDateRanges(dateRanges, baseData, enableAppendInPlace) {\n const interstitialEvents = [];\n const ids = Object.keys(dateRanges);\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n const dateRange = dateRanges[id];\n if (dateRange.isInterstitial) {\n let interstitial = this.eventMap[id];\n if (interstitial) {\n // Update InterstitialEvent already parsed and mapped\n // This retains already loaded duration and loaded asset list info\n interstitial.setDateRange(dateRange);\n } else {\n interstitial = new InterstitialEvent(dateRange, baseData);\n this.eventMap[id] = interstitial;\n if (enableAppendInPlace === false) {\n interstitial.appendInPlace = enableAppendInPlace;\n }\n }\n interstitialEvents.push(interstitial);\n }\n }\n return interstitialEvents;\n }\n parseSchedule(interstitialEvents, mediaSelection) {\n const schedule = [];\n const details = mediaSelection.main.details;\n const primaryDuration = details.live ? Infinity : details.edge;\n let playoutDuration = 0;\n\n // Filter events that have errored from the schedule (Primary fallback)\n interstitialEvents = interstitialEvents.filter(event => !event.error && !(event.cue.once && event.hasPlayed));\n if (interstitialEvents.length) {\n // Update Schedule\n this.resolveOffsets(interstitialEvents, mediaSelection);\n\n // Populate Schedule with Interstitial Event and Primary Segment Items\n let primaryPosition = 0;\n let integratedTime = 0;\n interstitialEvents.forEach((interstitial, i) => {\n const preroll = interstitial.cue.pre;\n const postroll = interstitial.cue.post;\n const previousEvent = interstitialEvents[i - 1] || null;\n const appendInPlace = interstitial.appendInPlace;\n const eventStart = postroll ? primaryDuration : interstitial.startOffset;\n const interstitialDuration = interstitial.duration;\n const timelineDuration = interstitial.timelineOccupancy === TimelineOccupancy.Range ? interstitialDuration : 0;\n const resumptionOffset = interstitial.resumptionOffset;\n const inSameStartTimeSequence = (previousEvent == null ? void 0 : previousEvent.startTime) === eventStart;\n const start = eventStart + interstitial.cumulativeDuration;\n let end = appendInPlace ? start + interstitialDuration : eventStart + resumptionOffset;\n if (preroll || !postroll && eventStart <= 0) {\n // preroll or in-progress midroll\n const integratedStart = integratedTime;\n integratedTime += timelineDuration;\n interstitial.timelineStart = start;\n const playoutStart = playoutDuration;\n playoutDuration += interstitialDuration;\n schedule.push({\n event: interstitial,\n start,\n end,\n playout: {\n start: playoutStart,\n end: playoutDuration\n },\n integrated: {\n start: integratedStart,\n end: integratedTime\n }\n });\n } else if (eventStart <= primaryDuration) {\n if (!inSameStartTimeSequence) {\n const segmentDuration = eventStart - primaryPosition;\n // Do not schedule a primary segment if interstitials are abutting by less than ABUTTING_THRESHOLD_SECONDS\n if (segmentDuration > ABUTTING_THRESHOLD_SECONDS) {\n // primary segment\n const timelineStart = primaryPosition;\n const _integratedStart = integratedTime;\n integratedTime += segmentDuration;\n const _playoutStart = playoutDuration;\n playoutDuration += segmentDuration;\n const primarySegment = {\n previousEvent: interstitialEvents[i - 1] || null,\n nextEvent: interstitial,\n start: timelineStart,\n end: timelineStart + segmentDuration,\n playout: {\n start: _playoutStart,\n end: playoutDuration\n },\n integrated: {\n start: _integratedStart,\n end: integratedTime\n }\n };\n schedule.push(primarySegment);\n } else if (segmentDuration > 0 && previousEvent) {\n // Add previous event `resumeTime` (based on duration or resumeOffset) so that it ends aligned with this one\n previousEvent.cumulativeDuration += segmentDuration;\n schedule[schedule.length - 1].end = eventStart;\n }\n }\n // midroll / postroll\n if (postroll) {\n end = start;\n }\n interstitial.timelineStart = start;\n const integratedStart = integratedTime;\n integratedTime += timelineDuration;\n const playoutStart = playoutDuration;\n playoutDuration += interstitialDuration;\n schedule.push({\n event: interstitial,\n start,\n end,\n playout: {\n start: playoutStart,\n end: playoutDuration\n },\n integrated: {\n start: integratedStart,\n end: integratedTime\n }\n });\n } else {\n // Interstitial starts after end of primary VOD - not included in schedule\n return;\n }\n const resumeTime = interstitial.resumeTime;\n if (postroll || resumeTime > primaryDuration) {\n primaryPosition = primaryDuration;\n } else {\n primaryPosition = resumeTime;\n }\n });\n if (primaryPosition < primaryDuration) {\n var _schedule;\n // last primary segment\n const timelineStart = primaryPosition;\n const integratedStart = integratedTime;\n const segmentDuration = primaryDuration - primaryPosition;\n integratedTime += segmentDuration;\n const playoutStart = playoutDuration;\n playoutDuration += segmentDuration;\n schedule.push({\n previousEvent: ((_schedule = schedule[schedule.length - 1]) == null ? void 0 : _schedule.event) || null,\n nextEvent: null,\n start: primaryPosition,\n end: timelineStart + segmentDuration,\n playout: {\n start: playoutStart,\n end: playoutDuration\n },\n integrated: {\n start: integratedStart,\n end: integratedTime\n }\n });\n }\n this.setDurations(primaryDuration, playoutDuration, integratedTime);\n } else {\n // no interstials - schedule is one primary segment\n const start = 0;\n schedule.push({\n previousEvent: null,\n nextEvent: null,\n start,\n end: primaryDuration,\n playout: {\n start,\n end: primaryDuration\n },\n integrated: {\n start,\n end: primaryDuration\n }\n });\n this.setDurations(primaryDuration, primaryDuration, primaryDuration);\n }\n return schedule;\n }\n setDurations(primary, playout, integrated) {\n this.durations = {\n primary,\n playout,\n integrated\n };\n }\n resolveOffsets(interstitialEvents, mediaSelection) {\n const details = mediaSelection.main.details;\n const primaryDuration = details.live ? Infinity : details.edge;\n\n // First resolve cumulative resumption offsets for Interstitials that start at the same DateTime\n let cumulativeDuration = 0;\n let lastScheduledStart = -1;\n interstitialEvents.forEach((interstitial, i) => {\n const preroll = interstitial.cue.pre;\n const postroll = interstitial.cue.post;\n const eventStart = preroll ? 0 : postroll ? primaryDuration : interstitial.startTime;\n this.updateAssetDurations(interstitial);\n\n // X-RESUME-OFFSET values of interstitials scheduled at the same time are cumulative\n const inSameStartTimeSequence = lastScheduledStart === eventStart;\n if (inSameStartTimeSequence) {\n interstitial.cumulativeDuration = cumulativeDuration;\n } else {\n cumulativeDuration = 0;\n lastScheduledStart = eventStart;\n }\n if (!postroll && interstitial.snapOptions.in) {\n // FIXME: Include audio playlist in snapping\n interstitial.resumeAnchor = findFragmentByPTS(null, details.fragments, interstitial.startOffset + interstitial.resumptionOffset, 0, 0) || undefined;\n }\n // Check if primary fragments align with resumption offset and disable appendInPlace if they do not\n if (interstitial.appendInPlace && !interstitial.appendInPlaceStarted) {\n const alignedSegmentStart = this.primaryCanResumeInPlaceAt(interstitial, mediaSelection);\n if (!alignedSegmentStart) {\n interstitial.appendInPlace = false;\n }\n }\n if (!interstitial.appendInPlace && i + 1 < interstitialEvents.length) {\n // abutting Interstitials must use the same MediaSource strategy, this applies to all whether or not they are back to back:\n const timeBetween = interstitialEvents[i + 1].startTime - interstitialEvents[i].resumeTime;\n if (timeBetween < ABUTTING_THRESHOLD_SECONDS) {\n interstitialEvents[i + 1].appendInPlace = false;\n if (interstitialEvents[i + 1].appendInPlace) {\n this.warn(`Could not change append strategy for abutting event ${interstitial}`);\n }\n }\n }\n // Update cumulativeDuration for next abutting interstitial with the same start date\n const resumeOffset = isFiniteNumber(interstitial.resumeOffset) ? interstitial.resumeOffset : interstitial.duration;\n cumulativeDuration += resumeOffset;\n });\n }\n primaryCanResumeInPlaceAt(interstitial, mediaSelection) {\n const resumeTime = interstitial.resumeTime;\n const resumesInPlaceAt = interstitial.startTime + interstitial.resumptionOffset;\n if (Math.abs(resumeTime - resumesInPlaceAt) > ALIGNED_END_THRESHOLD_SECONDS) {\n this.log(`\"${interstitial.identifier}\" resumption ${resumeTime} not aligned with estimated timeline end ${resumesInPlaceAt}`);\n return false;\n }\n const playlists = Object.keys(mediaSelection);\n return !playlists.some(playlistType => {\n const details = mediaSelection[playlistType].details;\n const playlistEnd = details.edge;\n if (resumeTime >= playlistEnd) {\n // Live playback - resumption segments are not yet available\n this.log(`\"${interstitial.identifier}\" resumption ${resumeTime} past ${playlistType} playlist end ${playlistEnd}`);\n // Assume alignment is possible (or reset can take place)\n return false;\n }\n const startFragment = findFragmentByPTS(null, details.fragments, resumeTime);\n if (!startFragment) {\n this.log(`\"${interstitial.identifier}\" resumption ${resumeTime} does not align with any fragments in ${playlistType} playlist (${details.fragStart}-${details.fragmentEnd})`);\n return true;\n }\n const allowance = playlistType === 'audio' ? 0.175 : 0;\n const alignedWithSegment = Math.abs(startFragment.start - resumeTime) < ALIGNED_END_THRESHOLD_SECONDS + allowance || Math.abs(startFragment.end - resumeTime) < ALIGNED_END_THRESHOLD_SECONDS + allowance;\n if (!alignedWithSegment) {\n this.log(`\"${interstitial.identifier}\" resumption ${resumeTime} not aligned with ${playlistType} fragment bounds (${startFragment.start}-${startFragment.end} sn: ${startFragment.sn} cc: ${startFragment.cc})`);\n return true;\n }\n return false;\n });\n }\n updateAssetDurations(interstitial) {\n if (!interstitial.assetListLoaded) {\n return;\n }\n const eventStart = interstitial.timelineStart;\n let sumDuration = 0;\n let hasUnknownDuration = false;\n let hasErrors = false;\n for (let i = 0; i < interstitial.assetList.length; i++) {\n const asset = interstitial.assetList[i];\n const timelineStart = eventStart + sumDuration;\n asset.startOffset = sumDuration;\n asset.timelineStart = timelineStart;\n hasUnknownDuration || (hasUnknownDuration = asset.duration === null);\n hasErrors || (hasErrors = !!asset.error);\n const duration = asset.error ? 0 : asset.duration || 0;\n sumDuration += duration;\n }\n // Use the sum of known durations when it is greater than the stated duration\n if (hasUnknownDuration && !hasErrors) {\n interstitial.duration = Math.max(sumDuration, interstitial.duration);\n } else {\n interstitial.duration = sumDuration;\n }\n }\n removeEvent(interstitial) {\n interstitial.reset();\n delete this.eventMap[interstitial.identifier];\n }\n}\nfunction segmentToString(segment) {\n return `[${segment.event ? '\"' + segment.event.identifier + '\"' : 'primary'}: ${segment.start.toFixed(2)}-${segment.end.toFixed(2)}]`;\n}\n\nclass AssetListLoader {\n constructor(hls) {\n this.hls = void 0;\n this.hls = hls;\n }\n destroy() {\n // @ts-ignore\n this.hls = null;\n }\n loadAssetList(interstitial, hlsStartOffset) {\n const assetListUrl = interstitial.assetListUrl;\n let url;\n try {\n url = getInterstitialUrl(assetListUrl, this.hls.sessionId, interstitial.baseUrl);\n } catch (error) {\n const errorData = this.assignAssetListError(interstitial, ErrorDetails.ASSET_LIST_LOAD_ERROR, error, assetListUrl);\n this.hls.trigger(Events.ERROR, errorData);\n return;\n }\n if (hlsStartOffset && url.protocol !== 'data:') {\n url.searchParams.set('_HLS_start_offset', '' + hlsStartOffset);\n }\n const config = this.hls.config;\n const Loader = config.loader;\n const loader = new Loader(config);\n const context = {\n responseType: 'json',\n url: url.href\n };\n const loadPolicy = config.interstitialAssetListLoadPolicy.default;\n const loaderConfig = {\n loadPolicy,\n timeout: loadPolicy.maxLoadTimeMs,\n maxRetry: 0,\n retryDelay: 0,\n maxRetryDelay: 0\n };\n const callbacks = {\n onSuccess: (response, stats, context, networkDetails) => {\n const assetListResponse = response.data;\n const assets = assetListResponse == null ? void 0 : assetListResponse.ASSETS;\n if (!Array.isArray(assets)) {\n const errorData = this.assignAssetListError(interstitial, ErrorDetails.ASSET_LIST_PARSING_ERROR, new Error(`Invalid interstitial asset list`), context.url, stats, networkDetails);\n this.hls.trigger(Events.ERROR, errorData);\n return;\n }\n interstitial.assetListResponse = assetListResponse;\n this.hls.trigger(Events.ASSET_LIST_LOADED, {\n event: interstitial,\n assetListResponse,\n networkDetails\n });\n },\n onError: (error, context, networkDetails, stats) => {\n const errorData = this.assignAssetListError(interstitial, ErrorDetails.ASSET_LIST_LOAD_ERROR, new Error(`Error loading X-ASSET-LIST: HTTP status ${error.code} ${error.text} (${context.url})`), context.url, stats, networkDetails);\n this.hls.trigger(Events.ERROR, errorData);\n },\n onTimeout: (stats, context, networkDetails) => {\n const errorData = this.assignAssetListError(interstitial, ErrorDetails.ASSET_LIST_LOAD_TIMEOUT, new Error(`Timeout loading X-ASSET-LIST (${context.url})`), context.url, stats, networkDetails);\n this.hls.trigger(Events.ERROR, errorData);\n }\n };\n loader.load(context, loaderConfig, callbacks);\n this.hls.trigger(Events.ASSET_LIST_LOADING, {\n event: interstitial\n });\n return loader;\n }\n assignAssetListError(interstitial, details, error, url, stats, networkDetails) {\n interstitial.error = error;\n return {\n type: ErrorTypes.NETWORK_ERROR,\n details,\n fatal: false,\n interstitial,\n url,\n error,\n networkDetails,\n stats\n };\n }\n}\n\nfunction playWithCatch(media) {\n var _media$play;\n media == null || (_media$play = media.play()) == null || _media$play.catch(() => {\n /* no-op */\n });\n}\nfunction timelineMessage(label, time) {\n return `[${label}] Advancing timeline position to ${time}`;\n}\nclass InterstitialsController extends Logger {\n constructor(hls, HlsPlayerClass) {\n super('interstitials', hls.logger);\n this.HlsPlayerClass = void 0;\n this.hls = void 0;\n this.assetListLoader = void 0;\n // Last updated LevelDetails\n this.mediaSelection = null;\n this.altSelection = null;\n // Media and MediaSource/SourceBuffers\n this.media = null;\n this.detachedData = null;\n this.requiredTracks = null;\n // Public Interface for Interstitial playback state and control\n this.manager = null;\n // Interstitial Asset Players\n this.playerQueue = [];\n // Timeline position tracking\n this.bufferedPos = -1;\n this.timelinePos = -1;\n // Schedule\n this.schedule = void 0;\n // Schedule playback and buffering state\n this.playingItem = null;\n this.bufferingItem = null;\n this.waitingItem = null;\n this.endedItem = null;\n this.playingAsset = null;\n this.endedAsset = null;\n this.bufferingAsset = null;\n this.shouldPlay = false;\n this.onPlay = () => {\n this.shouldPlay = true;\n };\n this.onPause = () => {\n this.shouldPlay = false;\n };\n this.onSeeking = () => {\n const currentTime = this.currentTime;\n if (currentTime === undefined || this.playbackDisabled || !this.schedule) {\n return;\n }\n const diff = currentTime - this.timelinePos;\n const roundingError = Math.abs(diff) < 1 / 705600000; // one flick\n if (roundingError) {\n return;\n }\n const backwardSeek = diff <= -0.01;\n if (this.timelinePos === -1 && !this.effectivePlayingItem) {\n this.checkStart();\n }\n this.timelinePos = currentTime;\n this.bufferedPos = currentTime;\n\n // Check if seeking out of an item\n const playingItem = this.playingItem;\n if (!playingItem) {\n this.checkBuffer();\n return;\n }\n if (backwardSeek) {\n const resetCount = this.schedule.resetErrorsInRange(currentTime, currentTime - diff);\n if (resetCount) {\n this.updateSchedule(true);\n }\n }\n this.checkBuffer();\n if (backwardSeek && currentTime < playingItem.start || currentTime >= playingItem.end) {\n var _this$media;\n const playingIndex = this.findItemIndex(playingItem);\n let scheduleIndex = this.schedule.findItemIndexAtTime(currentTime);\n if (scheduleIndex === -1) {\n scheduleIndex = playingIndex + (backwardSeek ? -1 : 1);\n this.log(`seeked ${backwardSeek ? 'back ' : ''}to position not covered by schedule ${currentTime} (resolving from ${playingIndex} to ${scheduleIndex})`);\n }\n if (!this.isInterstitial(playingItem) && (_this$media = this.media) != null && _this$media.paused) {\n this.shouldPlay = false;\n }\n if (!backwardSeek) {\n // check if an Interstitial between the current item and target item has an X-RESTRICT JUMP restriction\n if (scheduleIndex > playingIndex) {\n const jumpIndex = this.schedule.findJumpRestrictedIndex(playingIndex + 1, scheduleIndex);\n if (jumpIndex > playingIndex) {\n this.setSchedulePosition(jumpIndex);\n return;\n }\n }\n }\n this.setSchedulePosition(scheduleIndex);\n return;\n }\n // Check if seeking out of an asset (assumes same item following above check)\n const playingAsset = this.playingAsset;\n if (!playingAsset) {\n // restart Interstitial at end\n if (this.playingLastItem && this.isInterstitial(playingItem)) {\n const restartAsset = playingItem.event.assetList[0];\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (restartAsset) {\n this.endedItem = this.playingItem;\n this.playingItem = null;\n this.setScheduleToAssetAtTime(currentTime, restartAsset);\n }\n }\n return;\n }\n const start = playingAsset.timelineStart;\n const duration = playingAsset.duration || 0;\n if (backwardSeek && currentTime < start || currentTime >= start + duration) {\n var _playingItem$event;\n if ((_playingItem$event = playingItem.event) != null && _playingItem$event.appendInPlace) {\n // Return SourceBuffer(s) to primary player and flush\n this.clearAssetPlayers(playingItem.event, playingItem);\n this.flushFrontBuffer(currentTime);\n }\n this.setScheduleToAssetAtTime(currentTime, playingAsset);\n }\n };\n this.onTimeupdate = () => {\n const currentTime = this.currentTime;\n if (currentTime === undefined || this.playbackDisabled) {\n return;\n }\n if (this.timelinePos === -1 && !this.effectivePlayingItem) {\n this.checkStart();\n }\n\n // Only allow timeupdate to advance primary position, seeking is used for jumping back\n // this prevents primaryPos from being reset to 0 after re-attach\n if (currentTime > this.timelinePos) {\n this.timelinePos = currentTime;\n if (currentTime > this.bufferedPos) {\n this.checkBuffer();\n }\n } else {\n return;\n }\n\n // Check if playback has entered the next item\n const playingItem = this.playingItem;\n if (!playingItem || this.playingLastItem) {\n return;\n }\n if (currentTime >= playingItem.end) {\n this.timelinePos = playingItem.end;\n const playingIndex = this.findItemIndex(playingItem);\n this.setSchedulePosition(playingIndex + 1);\n }\n // Check if playback has entered the next asset\n const playingAsset = this.playingAsset;\n if (!playingAsset) {\n return;\n }\n const end = playingAsset.timelineStart + (playingAsset.duration || 0);\n if (currentTime >= end) {\n this.setScheduleToAssetAtTime(currentTime, playingAsset);\n }\n };\n // Schedule update callback\n this.onScheduleUpdate = (removedInterstitials, previousItems) => {\n const schedule = this.schedule;\n if (!schedule) {\n return;\n }\n const playingItem = this.playingItem;\n const interstitialEvents = schedule.events || [];\n const scheduleItems = schedule.items || [];\n const durations = schedule.durations;\n const removedIds = removedInterstitials.map(interstitial => interstitial.identifier);\n const interstitialsUpdated = !!(interstitialEvents.length || removedIds.length);\n if (interstitialsUpdated || previousItems) {\n this.log(`INTERSTITIALS_UPDATED (${interstitialEvents.length}): ${interstitialEvents}\nSchedule: ${scheduleItems.map(seg => segmentToString(seg))} pos: ${this.timelinePos}`);\n }\n if (removedIds.length) {\n this.log(`Removed events ${removedIds}`);\n }\n\n // Update schedule item references\n // Do not replace Interstitial playingItem without a match - used for INTERSTITIAL_ASSET_ENDED and INTERSTITIAL_ENDED\n let updatedPlayingItem = null;\n let updatedBufferingItem = null;\n if (playingItem) {\n updatedPlayingItem = this.updateItem(playingItem, this.timelinePos);\n if (this.itemsMatch(playingItem, updatedPlayingItem)) {\n this.playingItem = updatedPlayingItem;\n } else {\n this.waitingItem = this.endedItem = null;\n }\n }\n // Clear waitingItem if it has been removed from the schedule\n this.waitingItem = this.updateItem(this.waitingItem);\n this.endedItem = this.updateItem(this.endedItem);\n // Do not replace Interstitial bufferingItem without a match - used for transfering media element or source\n const bufferingItem = this.bufferingItem;\n if (bufferingItem) {\n updatedBufferingItem = this.updateItem(bufferingItem, this.bufferedPos);\n if (this.itemsMatch(bufferingItem, updatedBufferingItem)) {\n this.bufferingItem = updatedBufferingItem;\n } else if (bufferingItem.event) {\n // Interstitial removed from schedule (Live -> VOD or other scenario where Start Date is outside the range of VOD Playlist)\n this.bufferingItem = this.playingItem;\n this.clearInterstitial(bufferingItem.event, null);\n }\n }\n removedInterstitials.forEach(interstitial => {\n interstitial.assetList.forEach(asset => {\n this.clearAssetPlayer(asset.identifier, null);\n });\n });\n this.playerQueue.forEach(player => {\n if (player.interstitial.appendInPlace) {\n const timelineStart = player.assetItem.timelineStart;\n const diff = player.timelineOffset - timelineStart;\n if (diff) {\n try {\n player.timelineOffset = timelineStart;\n } catch (e) {\n if (Math.abs(diff) > ALIGNED_END_THRESHOLD_SECONDS) {\n this.warn(`${e} (\"${player.assetId}\" ${player.timelineOffset}->${timelineStart})`);\n }\n }\n }\n }\n });\n if (interstitialsUpdated || previousItems) {\n this.hls.trigger(Events.INTERSTITIALS_UPDATED, {\n events: interstitialEvents.slice(0),\n schedule: scheduleItems.slice(0),\n durations,\n removedIds\n });\n if (this.isInterstitial(playingItem) && removedIds.includes(playingItem.event.identifier)) {\n this.warn(`Interstitial \"${playingItem.event.identifier}\" removed while playing`);\n this.primaryFallback(playingItem.event);\n return;\n }\n if (playingItem) {\n this.trimInPlace(updatedPlayingItem, playingItem);\n }\n if (bufferingItem && updatedBufferingItem !== updatedPlayingItem) {\n this.trimInPlace(updatedBufferingItem, bufferingItem);\n }\n\n // Check if buffered to new Interstitial event boundary\n // (Live update publishes Interstitial with new segment)\n this.checkBuffer();\n }\n };\n this.hls = hls;\n this.HlsPlayerClass = HlsPlayerClass;\n this.assetListLoader = new AssetListLoader(hls);\n this.schedule = new InterstitialsSchedule(this.onScheduleUpdate, hls.logger);\n this.registerListeners();\n }\n registerListeners() {\n const hls = this.hls;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (hls) {\n hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n hls.on(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n hls.on(Events.AUDIO_TRACK_UPDATED, this.onAudioTrackUpdated, this);\n hls.on(Events.SUBTITLE_TRACK_SWITCH, this.onSubtitleTrackSwitch, this);\n hls.on(Events.SUBTITLE_TRACK_UPDATED, this.onSubtitleTrackUpdated, this);\n hls.on(Events.EVENT_CUE_ENTER, this.onInterstitialCueEnter, this);\n hls.on(Events.ASSET_LIST_LOADED, this.onAssetListLoaded, this);\n hls.on(Events.BUFFER_APPENDED, this.onBufferAppended, this);\n hls.on(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n hls.on(Events.BUFFERED_TO_END, this.onBufferedToEnd, this);\n hls.on(Events.MEDIA_ENDED, this.onMediaEnded, this);\n hls.on(Events.ERROR, this.onError, this);\n hls.on(Events.DESTROYING, this.onDestroying, this);\n }\n }\n unregisterListeners() {\n const hls = this.hls;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (hls) {\n hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n hls.off(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n hls.off(Events.AUDIO_TRACK_UPDATED, this.onAudioTrackUpdated, this);\n hls.off(Events.SUBTITLE_TRACK_SWITCH, this.onSubtitleTrackSwitch, this);\n hls.off(Events.SUBTITLE_TRACK_UPDATED, this.onSubtitleTrackUpdated, this);\n hls.off(Events.EVENT_CUE_ENTER, this.onInterstitialCueEnter, this);\n hls.off(Events.ASSET_LIST_LOADED, this.onAssetListLoaded, this);\n hls.off(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n hls.off(Events.BUFFER_APPENDED, this.onBufferAppended, this);\n hls.off(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n hls.off(Events.BUFFERED_TO_END, this.onBufferedToEnd, this);\n hls.off(Events.MEDIA_ENDED, this.onMediaEnded, this);\n hls.off(Events.ERROR, this.onError, this);\n hls.off(Events.DESTROYING, this.onDestroying, this);\n }\n }\n startLoad() {\n // TODO: startLoad - check for waitingItem and retry by resetting schedule\n this.resumeBuffering();\n }\n stopLoad() {\n // TODO: stopLoad - stop all scheule.events[].assetListLoader?.abort() then delete the loaders\n this.pauseBuffering();\n }\n resumeBuffering() {\n var _this$getBufferingPla;\n (_this$getBufferingPla = this.getBufferingPlayer()) == null || _this$getBufferingPla.resumeBuffering();\n }\n pauseBuffering() {\n var _this$getBufferingPla2;\n (_this$getBufferingPla2 = this.getBufferingPlayer()) == null || _this$getBufferingPla2.pauseBuffering();\n }\n destroy() {\n this.unregisterListeners();\n this.stopLoad();\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (this.assetListLoader) {\n this.assetListLoader.destroy();\n }\n this.emptyPlayerQueue();\n this.clearScheduleState();\n if (this.schedule) {\n this.schedule.destroy();\n }\n this.media = this.detachedData = this.mediaSelection = this.requiredTracks = this.altSelection = this.schedule = this.manager = null;\n // @ts-ignore\n this.hls = this.HlsPlayerClass = this.log = null;\n // @ts-ignore\n this.assetListLoader = null;\n // @ts-ignore\n this.onPlay = this.onPause = this.onSeeking = this.onTimeupdate = null;\n // @ts-ignore\n this.onScheduleUpdate = null;\n }\n onDestroying() {\n const media = this.primaryMedia || this.media;\n if (media) {\n this.removeMediaListeners(media);\n }\n }\n removeMediaListeners(media) {\n removeEventListener(media, 'play', this.onPlay);\n removeEventListener(media, 'pause', this.onPause);\n removeEventListener(media, 'seeking', this.onSeeking);\n removeEventListener(media, 'timeupdate', this.onTimeupdate);\n }\n onMediaAttaching(event, data) {\n const media = this.media = data.media;\n addEventListener(media, 'seeking', this.onSeeking);\n addEventListener(media, 'timeupdate', this.onTimeupdate);\n addEventListener(media, 'play', this.onPlay);\n addEventListener(media, 'pause', this.onPause);\n }\n onMediaAttached(event, data) {\n const playingItem = this.effectivePlayingItem;\n const detachedMedia = this.detachedData;\n this.detachedData = null;\n if (playingItem === null) {\n this.checkStart();\n } else if (!detachedMedia) {\n // Resume schedule after detached externally\n this.clearScheduleState();\n const playingIndex = this.findItemIndex(playingItem);\n this.setSchedulePosition(playingIndex);\n }\n }\n clearScheduleState() {\n this.log(`clear schedule state`);\n this.playingItem = this.bufferingItem = this.waitingItem = this.endedItem = this.playingAsset = this.endedAsset = this.bufferingAsset = null;\n }\n onMediaDetaching(event, data) {\n const transferringMedia = !!data.transferMedia;\n const media = this.media;\n this.media = null;\n if (transferringMedia) {\n return;\n }\n if (media) {\n this.removeMediaListeners(media);\n }\n // If detachMedia is called while in an Interstitial, detach the asset player as well and reset the schedule position\n if (this.detachedData) {\n const player = this.getBufferingPlayer();\n if (player) {\n this.log(`Removing schedule state for detachedData and ${player}`);\n this.playingAsset = this.endedAsset = this.bufferingAsset = this.bufferingItem = this.waitingItem = this.detachedData = null;\n player.detachMedia();\n }\n this.shouldPlay = false;\n }\n }\n get interstitialsManager() {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (!this.hls) {\n return null;\n }\n if (this.manager) {\n return this.manager;\n }\n const c = this;\n const effectiveBufferingItem = () => c.bufferingItem || c.waitingItem;\n const getAssetPlayer = asset => asset ? c.getAssetPlayer(asset.identifier) : asset;\n const getMappedTime = (item, timelineType, asset, controllerField, assetPlayerField) => {\n if (item) {\n let time = item[timelineType].start;\n const interstitial = item.event;\n if (interstitial) {\n if (timelineType === 'playout' || interstitial.timelineOccupancy !== TimelineOccupancy.Point) {\n const assetPlayer = getAssetPlayer(asset);\n if ((assetPlayer == null ? void 0 : assetPlayer.interstitial) === interstitial) {\n time += assetPlayer.assetItem.startOffset + assetPlayer[assetPlayerField];\n }\n }\n } else {\n const value = controllerField === 'bufferedPos' ? getBufferedEnd() : c[controllerField];\n time += value - item.start;\n }\n return time;\n }\n return 0;\n };\n const findMappedTime = (primaryTime, timelineType) => {\n var _c$schedule;\n if (primaryTime !== 0 && timelineType !== 'primary' && (_c$schedule = c.schedule) != null && _c$schedule.length) {\n var _c$schedule$items;\n const index = c.schedule.findItemIndexAtTime(primaryTime);\n const item = (_c$schedule$items = c.schedule.items) == null ? void 0 : _c$schedule$items[index];\n if (item) {\n const diff = item[timelineType].start - item.start;\n return primaryTime + diff;\n }\n }\n return primaryTime;\n };\n const getBufferedEnd = () => {\n const value = c.bufferedPos;\n if (value === Number.MAX_VALUE) {\n return getMappedDuration('primary');\n }\n return Math.max(value, 0);\n };\n const getMappedDuration = timelineType => {\n var _c$primaryDetails, _c$schedule2;\n if ((_c$primaryDetails = c.primaryDetails) != null && _c$primaryDetails.live) {\n // return end of last event item or playlist\n return c.primaryDetails.edge;\n }\n return ((_c$schedule2 = c.schedule) == null ? void 0 : _c$schedule2.durations[timelineType]) || 0;\n };\n const seekTo = (time, timelineType) => {\n var _item$event, _c$schedule$items2;\n const item = c.effectivePlayingItem;\n if (item != null && (_item$event = item.event) != null && _item$event.restrictions.skip || !c.schedule) {\n return;\n }\n c.log(`seek to ${time} \"${timelineType}\"`);\n const playingItem = c.effectivePlayingItem;\n const targetIndex = c.schedule.findItemIndexAtTime(time, timelineType);\n const targetItem = (_c$schedule$items2 = c.schedule.items) == null ? void 0 : _c$schedule$items2[targetIndex];\n const bufferingPlayer = c.getBufferingPlayer();\n const bufferingInterstitial = bufferingPlayer == null ? void 0 : bufferingPlayer.interstitial;\n const appendInPlace = bufferingInterstitial == null ? void 0 : bufferingInterstitial.appendInPlace;\n const seekInItem = playingItem && c.itemsMatch(playingItem, targetItem);\n if (playingItem && (appendInPlace || seekInItem)) {\n // seek in asset player or primary media (appendInPlace)\n const assetPlayer = getAssetPlayer(c.playingAsset);\n const media = (assetPlayer == null ? void 0 : assetPlayer.media) || c.primaryMedia;\n if (media) {\n const currentTime = timelineType === 'primary' ? media.currentTime : getMappedTime(playingItem, timelineType, c.playingAsset, 'timelinePos', 'currentTime');\n const diff = time - currentTime;\n const seekToTime = (appendInPlace ? currentTime : media.currentTime) + diff;\n if (seekToTime >= 0 && (!assetPlayer || appendInPlace || seekToTime <= assetPlayer.duration)) {\n media.currentTime = seekToTime;\n return;\n }\n }\n }\n // seek out of item or asset\n if (targetItem) {\n let seekToTime = time;\n if (timelineType !== 'primary') {\n const primarySegmentStart = targetItem[timelineType].start;\n const diff = time - primarySegmentStart;\n seekToTime = targetItem.start + diff;\n }\n const targetIsPrimary = !c.isInterstitial(targetItem);\n if ((!c.isInterstitial(playingItem) || playingItem.event.appendInPlace) && (targetIsPrimary || targetItem.event.appendInPlace)) {\n const media = c.media || (appendInPlace ? bufferingPlayer == null ? void 0 : bufferingPlayer.media : null);\n if (media) {\n media.currentTime = seekToTime;\n }\n } else if (playingItem) {\n // check if an Interstitial between the current item and target item has an X-RESTRICT JUMP restriction\n const playingIndex = c.findItemIndex(playingItem);\n if (targetIndex > playingIndex) {\n const jumpIndex = c.schedule.findJumpRestrictedIndex(playingIndex + 1, targetIndex);\n if (jumpIndex > playingIndex) {\n c.setSchedulePosition(jumpIndex);\n return;\n }\n }\n let assetIndex = 0;\n if (targetIsPrimary) {\n c.timelinePos = seekToTime;\n c.checkBuffer();\n } else {\n const assetList = targetItem.event.assetList;\n const eventTime = time - (targetItem[timelineType] || targetItem).start;\n for (let i = assetList.length; i--;) {\n const asset = assetList[i];\n if (asset.duration && eventTime >= asset.startOffset && eventTime < asset.startOffset + asset.duration) {\n assetIndex = i;\n break;\n }\n }\n }\n c.setSchedulePosition(targetIndex, assetIndex);\n }\n }\n };\n const getActiveInterstitial = () => {\n const playingItem = c.effectivePlayingItem;\n if (c.isInterstitial(playingItem)) {\n return playingItem;\n }\n const bufferingItem = effectiveBufferingItem();\n if (c.isInterstitial(bufferingItem)) {\n return bufferingItem;\n }\n return null;\n };\n const interstitialPlayer = {\n get bufferedEnd() {\n const interstitialItem = effectiveBufferingItem();\n const bufferingItem = c.bufferingItem;\n if (bufferingItem && bufferingItem === interstitialItem) {\n var _c$bufferingAsset;\n return getMappedTime(bufferingItem, 'playout', c.bufferingAsset, 'bufferedPos', 'bufferedEnd') - bufferingItem.playout.start || ((_c$bufferingAsset = c.bufferingAsset) == null ? void 0 : _c$bufferingAsset.startOffset) || 0;\n }\n return 0;\n },\n get currentTime() {\n const interstitialItem = getActiveInterstitial();\n const playingItem = c.effectivePlayingItem;\n if (playingItem && playingItem === interstitialItem) {\n return getMappedTime(playingItem, 'playout', c.effectivePlayingAsset, 'timelinePos', 'currentTime') - playingItem.playout.start;\n }\n return 0;\n },\n set currentTime(time) {\n const interstitialItem = getActiveInterstitial();\n const playingItem = c.effectivePlayingItem;\n if (playingItem && playingItem === interstitialItem) {\n seekTo(time + playingItem.playout.start, 'playout');\n }\n },\n get duration() {\n const interstitialItem = getActiveInterstitial();\n if (interstitialItem) {\n return interstitialItem.playout.end - interstitialItem.playout.start;\n }\n return 0;\n },\n get assetPlayers() {\n var _getActiveInterstitia;\n const assetList = (_getActiveInterstitia = getActiveInterstitial()) == null ? void 0 : _getActiveInterstitia.event.assetList;\n if (assetList) {\n return assetList.map(asset => c.getAssetPlayer(asset.identifier));\n }\n return [];\n },\n get playingIndex() {\n var _getActiveInterstitia2;\n const interstitial = (_getActiveInterstitia2 = getActiveInterstitial()) == null ? void 0 : _getActiveInterstitia2.event;\n if (interstitial && c.effectivePlayingAsset) {\n return interstitial.findAssetIndex(c.effectivePlayingAsset);\n }\n return -1;\n },\n get scheduleItem() {\n return getActiveInterstitial();\n }\n };\n return this.manager = {\n get events() {\n var _c$schedule3;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return ((_c$schedule3 = c.schedule) == null || (_c$schedule3 = _c$schedule3.events) == null ? void 0 : _c$schedule3.slice(0)) || [];\n },\n get schedule() {\n var _c$schedule4;\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n return ((_c$schedule4 = c.schedule) == null || (_c$schedule4 = _c$schedule4.items) == null ? void 0 : _c$schedule4.slice(0)) || [];\n },\n get interstitialPlayer() {\n if (getActiveInterstitial()) {\n return interstitialPlayer;\n }\n return null;\n },\n get playerQueue() {\n return c.playerQueue.slice(0);\n },\n get bufferingAsset() {\n return c.bufferingAsset;\n },\n get bufferingItem() {\n return effectiveBufferingItem();\n },\n get bufferingIndex() {\n const item = effectiveBufferingItem();\n return c.findItemIndex(item);\n },\n get playingAsset() {\n return c.effectivePlayingAsset;\n },\n get playingItem() {\n return c.effectivePlayingItem;\n },\n get playingIndex() {\n const item = c.effectivePlayingItem;\n return c.findItemIndex(item);\n },\n primary: {\n get bufferedEnd() {\n return getBufferedEnd();\n },\n get currentTime() {\n const timelinePos = c.timelinePos;\n return timelinePos > 0 ? timelinePos : 0;\n },\n set currentTime(time) {\n seekTo(time, 'primary');\n },\n get duration() {\n return getMappedDuration('primary');\n },\n get seekableStart() {\n var _c$primaryDetails2;\n return ((_c$primaryDetails2 = c.primaryDetails) == null ? void 0 : _c$primaryDetails2.fragmentStart) || 0;\n }\n },\n integrated: {\n get bufferedEnd() {\n return getMappedTime(effectiveBufferingItem(), 'integrated', c.bufferingAsset, 'bufferedPos', 'bufferedEnd');\n },\n get currentTime() {\n return getMappedTime(c.effectivePlayingItem, 'integrated', c.effectivePlayingAsset, 'timelinePos', 'currentTime');\n },\n set currentTime(time) {\n seekTo(time, 'integrated');\n },\n get duration() {\n return getMappedDuration('integrated');\n },\n get seekableStart() {\n var _c$primaryDetails3;\n return findMappedTime(((_c$primaryDetails3 = c.primaryDetails) == null ? void 0 : _c$primaryDetails3.fragmentStart) || 0, 'integrated');\n }\n },\n skip: () => {\n const item = c.effectivePlayingItem;\n const event = item == null ? void 0 : item.event;\n if (event && !event.restrictions.skip) {\n const index = c.findItemIndex(item);\n if (event.appendInPlace) {\n const time = item.playout.start + item.event.duration;\n seekTo(time + 0.001, 'playout');\n } else {\n c.advanceAfterAssetEnded(event, index, Infinity);\n }\n }\n }\n };\n }\n\n // Schedule getters\n get effectivePlayingItem() {\n return this.waitingItem || this.playingItem || this.endedItem;\n }\n get effectivePlayingAsset() {\n return this.playingAsset || this.endedAsset;\n }\n get playingLastItem() {\n var _this$schedule;\n const playingItem = this.playingItem;\n const items = (_this$schedule = this.schedule) == null ? void 0 : _this$schedule.items;\n if (!this.playbackStarted || !playingItem || !items) {\n return false;\n }\n return this.findItemIndex(playingItem) === items.length - 1;\n }\n get playbackStarted() {\n return this.effectivePlayingItem !== null;\n }\n\n // Media getters and event callbacks\n get currentTime() {\n var _this$bufferingItem, _media;\n if (this.mediaSelection === null) {\n // Do not advance before schedule is known\n return undefined;\n }\n // Ignore currentTime when detached for Interstitial playback with source reset\n const queuedForPlayback = this.waitingItem || this.playingItem;\n if (this.isInterstitial(queuedForPlayback) && !queuedForPlayback.event.appendInPlace) {\n return undefined;\n }\n let media = this.media;\n if (!media && (_this$bufferingItem = this.bufferingItem) != null && (_this$bufferingItem = _this$bufferingItem.event) != null && _this$bufferingItem.appendInPlace) {\n // Observe detached media currentTime when appending in place\n media = this.primaryMedia;\n }\n const currentTime = (_media = media) == null ? void 0 : _media.currentTime;\n if (currentTime === undefined || !isFiniteNumber(currentTime)) {\n return undefined;\n }\n return currentTime;\n }\n get primaryMedia() {\n var _this$detachedData;\n return this.media || ((_this$detachedData = this.detachedData) == null ? void 0 : _this$detachedData.media) || null;\n }\n isInterstitial(item) {\n return !!(item != null && item.event);\n }\n retreiveMediaSource(assetId, toSegment) {\n const player = this.getAssetPlayer(assetId);\n if (player) {\n this.transferMediaFromPlayer(player, toSegment);\n }\n }\n transferMediaFromPlayer(player, toSegment) {\n const appendInPlace = player.interstitial.appendInPlace;\n const playerMedia = player.media;\n if (appendInPlace && playerMedia === this.primaryMedia) {\n this.bufferingAsset = null;\n if (!toSegment || this.isInterstitial(toSegment) && !toSegment.event.appendInPlace) {\n // MediaSource cannot be transfered back to an Interstitial that requires a source reset\n // no-op when toSegment is undefined\n if (toSegment && playerMedia) {\n this.detachedData = {\n media: playerMedia\n };\n return;\n }\n }\n const attachMediaSourceData = player.transferMedia();\n this.log(`transfer MediaSource from ${player} ${stringify(attachMediaSourceData)}`);\n this.detachedData = attachMediaSourceData;\n } else if (toSegment && playerMedia) {\n this.shouldPlay || (this.shouldPlay = !playerMedia.paused);\n }\n }\n transferMediaTo(player, media) {\n var _this$detachedData2, _attachMediaSourceDat;\n if (player.media === media) {\n return;\n }\n let attachMediaSourceData = null;\n const primaryPlayer = this.hls;\n const isAssetPlayer = player !== primaryPlayer;\n const appendInPlace = isAssetPlayer && player.interstitial.appendInPlace;\n const detachedMediaSource = (_this$detachedData2 = this.detachedData) == null ? void 0 : _this$detachedData2.mediaSource;\n let logFromSource;\n if (primaryPlayer.media) {\n if (appendInPlace) {\n attachMediaSourceData = primaryPlayer.transferMedia();\n this.detachedData = attachMediaSourceData;\n }\n logFromSource = `Primary`;\n } else if (detachedMediaSource) {\n const bufferingPlayer = this.getBufferingPlayer();\n if (bufferingPlayer) {\n attachMediaSourceData = bufferingPlayer.transferMedia();\n logFromSource = `${bufferingPlayer}`;\n } else {\n logFromSource = `detached MediaSource`;\n }\n } else {\n logFromSource = `detached media`;\n }\n if (!attachMediaSourceData) {\n if (detachedMediaSource) {\n attachMediaSourceData = this.detachedData;\n this.log(`using detachedData: MediaSource ${stringify(attachMediaSourceData)}`);\n } else if (!this.detachedData || primaryPlayer.media === media) {\n // Keep interstitial media transition consistent\n const playerQueue = this.playerQueue;\n if (playerQueue.length > 1) {\n playerQueue.forEach(queuedPlayer => {\n if (isAssetPlayer && queuedPlayer.interstitial.appendInPlace !== appendInPlace) {\n const interstitial = queuedPlayer.interstitial;\n this.clearInterstitial(queuedPlayer.interstitial, null);\n interstitial.appendInPlace = false; // setter may be a no-op;\n // `appendInPlace` getter may still return `true` after insterstitial streaming has begun in that mode.\n if (interstitial.appendInPlace) {\n this.warn(`Could not change append strategy for queued assets ${interstitial}`);\n }\n }\n });\n }\n this.hls.detachMedia();\n this.detachedData = {\n media\n };\n }\n }\n const transferring = attachMediaSourceData && 'mediaSource' in attachMediaSourceData && ((_attachMediaSourceDat = attachMediaSourceData.mediaSource) == null ? void 0 : _attachMediaSourceDat.readyState) !== 'closed';\n const dataToAttach = transferring && attachMediaSourceData ? attachMediaSourceData : media;\n this.log(`${transferring ? 'transfering MediaSource' : 'attaching media'} to ${isAssetPlayer ? player : 'Primary'} from ${logFromSource} (media.currentTime: ${media.currentTime})`);\n const schedule = this.schedule;\n if (dataToAttach === attachMediaSourceData && schedule) {\n const isAssetAtEndOfSchedule = isAssetPlayer && player.assetId === schedule.assetIdAtEnd;\n // Prevent asset players from marking EoS on transferred MediaSource\n dataToAttach.overrides = {\n duration: schedule.duration,\n endOfStream: !isAssetPlayer || isAssetAtEndOfSchedule,\n cueRemoval: !isAssetPlayer\n };\n }\n player.attachMedia(dataToAttach);\n }\n onInterstitialCueEnter() {\n this.onTimeupdate();\n }\n // Scheduling methods\n checkStart() {\n const schedule = this.schedule;\n const interstitialEvents = schedule == null ? void 0 : schedule.events;\n if (!interstitialEvents || this.playbackDisabled || !this.media) {\n return;\n }\n // Check buffered to pre-roll\n if (this.bufferedPos === -1) {\n this.bufferedPos = 0;\n }\n // Start stepping through schedule when playback begins for the first time and we have a pre-roll\n const timelinePos = this.timelinePos;\n const effectivePlayingItem = this.effectivePlayingItem;\n if (timelinePos === -1) {\n const startPosition = this.hls.startPosition;\n this.timelinePos = startPosition;\n if (interstitialEvents.length === 0) {\n this.setSchedulePosition(0);\n } else if (interstitialEvents[0].cue.pre) {\n this.log(timelineMessage('checkStart (preroll)', startPosition));\n const index = schedule.findEventIndex(interstitialEvents[0].identifier);\n this.setSchedulePosition(index);\n } else if (startPosition >= 0 || !this.primaryLive) {\n this.log(timelineMessage('checkStart', startPosition));\n const start = this.timelinePos = startPosition > 0 ? startPosition : 0;\n const index = schedule.findItemIndexAtTime(start);\n this.setSchedulePosition(index);\n } else if (this.hls.liveSyncPosition === 0) {\n this.setSchedulePosition(0);\n } else {\n this.log('[checkStart] waiting for live start');\n }\n } else if (effectivePlayingItem && !this.playingItem) {\n this.log(timelineMessage('checkStart (playing item)', effectivePlayingItem.start));\n const index = schedule.findItemIndex(effectivePlayingItem);\n this.setSchedulePosition(index);\n }\n }\n advanceAssetBuffering(item, assetItem) {\n const interstitial = item.event;\n const assetListIndex = interstitial.findAssetIndex(assetItem);\n const nextAssetIndex = getNextAssetIndex(interstitial, assetListIndex);\n if (!interstitial.isAssetPastPlayoutLimit(nextAssetIndex)) {\n this.bufferedToEvent(item, nextAssetIndex);\n } else if (this.schedule) {\n var _this$schedule$items;\n const nextItem = (_this$schedule$items = this.schedule.items) == null ? void 0 : _this$schedule$items[this.findItemIndex(item) + 1];\n if (nextItem) {\n this.bufferedToItem(nextItem);\n }\n }\n }\n advanceAfterAssetEnded(interstitial, index, assetListIndex) {\n const nextAssetIndex = getNextAssetIndex(interstitial, assetListIndex);\n if (!interstitial.isAssetPastPlayoutLimit(nextAssetIndex)) {\n // Advance to next asset list item\n if (interstitial.appendInPlace) {\n const assetItem = interstitial.assetList[nextAssetIndex];\n if (assetItem) {\n this.advanceInPlace(assetItem.timelineStart);\n }\n }\n this.setSchedulePosition(index, nextAssetIndex);\n } else if (this.schedule) {\n // Advance to next schedule segment\n // check if we've reached the end of the program\n const scheduleItems = this.schedule.items;\n if (scheduleItems) {\n const nextIndex = index + 1;\n const scheduleLength = scheduleItems.length;\n if (nextIndex >= scheduleLength) {\n this.setSchedulePosition(-1);\n return;\n }\n const resumptionTime = interstitial.resumeTime;\n if (this.timelinePos < resumptionTime) {\n this.log(timelineMessage('advanceAfterAssetEnded', resumptionTime));\n this.timelinePos = resumptionTime;\n if (interstitial.appendInPlace) {\n this.advanceInPlace(resumptionTime);\n }\n this.checkBuffer(this.bufferedPos < resumptionTime);\n }\n this.setSchedulePosition(nextIndex);\n }\n }\n }\n setScheduleToAssetAtTime(time, playingAsset) {\n const schedule = this.schedule;\n if (!schedule) {\n return;\n }\n const parentIdentifier = playingAsset.parentIdentifier;\n const interstitial = schedule.getEvent(parentIdentifier);\n if (interstitial) {\n const itemIndex = schedule.findEventIndex(parentIdentifier);\n const assetListIndex = schedule.findAssetIndex(interstitial, time);\n this.advanceAfterAssetEnded(interstitial, itemIndex, assetListIndex - 1);\n }\n }\n setSchedulePosition(index, assetListIndex) {\n var _this$schedule2;\n const scheduleItems = (_this$schedule2 = this.schedule) == null ? void 0 : _this$schedule2.items;\n if (!scheduleItems || this.playbackDisabled) {\n return;\n }\n const scheduledItem = index >= 0 ? scheduleItems[index] : null;\n this.log(`setSchedulePosition ${index}, ${assetListIndex} (${scheduledItem ? segmentToString(scheduledItem) : scheduledItem}) pos: ${this.timelinePos}`);\n // Cleanup current item / asset\n const currentItem = this.waitingItem || this.playingItem;\n const playingLastItem = this.playingLastItem;\n if (this.isInterstitial(currentItem)) {\n const interstitial = currentItem.event;\n const playingAsset = this.playingAsset;\n const assetId = playingAsset == null ? void 0 : playingAsset.identifier;\n const player = assetId ? this.getAssetPlayer(assetId) : null;\n if (player && assetId && (!this.eventItemsMatch(currentItem, scheduledItem) || assetListIndex !== undefined && assetId !== interstitial.assetList[assetListIndex].identifier)) {\n var _this$detachedData3;\n const playingAssetListIndex = interstitial.findAssetIndex(playingAsset);\n this.log(`INTERSTITIAL_ASSET_ENDED ${playingAssetListIndex + 1}/${interstitial.assetList.length} ${eventAssetToString(playingAsset)}`);\n this.endedAsset = playingAsset;\n this.playingAsset = null;\n this.hls.trigger(Events.INTERSTITIAL_ASSET_ENDED, {\n asset: playingAsset,\n assetListIndex: playingAssetListIndex,\n event: interstitial,\n schedule: scheduleItems.slice(0),\n scheduleIndex: index,\n player\n });\n if (currentItem !== this.playingItem) {\n // Schedule change occured on INTERSTITIAL_ASSET_ENDED\n if (this.itemsMatch(currentItem, this.playingItem) &&\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n !this.playingAsset // INTERSTITIAL_ASSET_ENDED side-effect\n ) {\n this.advanceAfterAssetEnded(interstitial, this.findItemIndex(this.playingItem), playingAssetListIndex);\n }\n // Navigation occured on INTERSTITIAL_ASSET_ENDED\n return;\n }\n this.retreiveMediaSource(assetId, scheduledItem);\n if (player.media && !((_this$detachedData3 = this.detachedData) != null && _this$detachedData3.mediaSource)) {\n player.detachMedia();\n }\n }\n if (!this.eventItemsMatch(currentItem, scheduledItem)) {\n this.endedItem = currentItem;\n this.playingItem = null;\n this.log(`INTERSTITIAL_ENDED ${interstitial} ${segmentToString(currentItem)}`);\n interstitial.hasPlayed = true;\n this.hls.trigger(Events.INTERSTITIAL_ENDED, {\n event: interstitial,\n schedule: scheduleItems.slice(0),\n scheduleIndex: index\n });\n // Exiting an Interstitial\n if (interstitial.cue.once) {\n var _this$schedule3;\n // Remove interstitial with CUE attribute value of ONCE after it has played\n this.updateSchedule();\n const updatedScheduleItems = (_this$schedule3 = this.schedule) == null ? void 0 : _this$schedule3.items;\n if (scheduledItem && updatedScheduleItems) {\n const updatedIndex = this.findItemIndex(scheduledItem);\n this.advanceSchedule(updatedIndex, updatedScheduleItems, assetListIndex, currentItem, playingLastItem);\n }\n return;\n }\n }\n }\n this.advanceSchedule(index, scheduleItems, assetListIndex, currentItem, playingLastItem);\n }\n advanceSchedule(index, scheduleItems, assetListIndex, currentItem, playedLastItem) {\n const schedule = this.schedule;\n if (!schedule) {\n return;\n }\n const scheduledItem = scheduleItems[index] || null;\n const media = this.primaryMedia;\n // Cleanup out of range Interstitials\n const playerQueue = this.playerQueue;\n if (playerQueue.length) {\n playerQueue.forEach(player => {\n const interstitial = player.interstitial;\n const queuedIndex = schedule.findEventIndex(interstitial.identifier);\n if (queuedIndex < index || queuedIndex > index + 1) {\n this.clearInterstitial(interstitial, scheduledItem);\n }\n });\n }\n // Setup scheduled item\n if (this.isInterstitial(scheduledItem)) {\n this.timelinePos = Math.min(Math.max(this.timelinePos, scheduledItem.start), scheduledItem.end);\n // Handle Interstitial\n const interstitial = scheduledItem.event;\n // find asset index\n if (assetListIndex === undefined) {\n assetListIndex = schedule.findAssetIndex(interstitial, this.timelinePos);\n const assetIndexCandidate = getNextAssetIndex(interstitial, assetListIndex - 1);\n if (interstitial.isAssetPastPlayoutLimit(assetIndexCandidate) || interstitial.appendInPlace && this.timelinePos === scheduledItem.end) {\n this.advanceAfterAssetEnded(interstitial, index, assetListIndex);\n return;\n }\n assetListIndex = assetIndexCandidate;\n }\n // Ensure Interstitial is enqueued\n const waitingItem = this.waitingItem;\n if (!this.assetsBuffered(scheduledItem, media)) {\n this.setBufferingItem(scheduledItem);\n }\n let player = this.preloadAssets(interstitial, assetListIndex);\n if (!this.eventItemsMatch(scheduledItem, waitingItem || currentItem)) {\n this.waitingItem = scheduledItem;\n this.log(`INTERSTITIAL_STARTED ${segmentToString(scheduledItem)} ${interstitial.appendInPlace ? 'append in place' : ''}`);\n this.hls.trigger(Events.INTERSTITIAL_STARTED, {\n event: interstitial,\n schedule: scheduleItems.slice(0),\n scheduleIndex: index\n });\n }\n if (!interstitial.assetListLoaded) {\n // Waiting at end of primary content segment\n // Expect setSchedulePosition to be called again once ASSET-LIST is loaded\n this.log(`Waiting for ASSET-LIST to complete loading ${interstitial}`);\n return;\n }\n if (interstitial.assetListLoader) {\n interstitial.assetListLoader.destroy();\n interstitial.assetListLoader = undefined;\n }\n if (!media) {\n this.log(`Waiting for attachMedia to start Interstitial ${interstitial}`);\n return;\n }\n // Update schedule and asset list position now that it can start\n this.waitingItem = this.endedItem = null;\n this.playingItem = scheduledItem;\n\n // If asset-list is empty or missing asset index, advance to next item\n const assetItem = interstitial.assetList[assetListIndex];\n if (!assetItem) {\n this.advanceAfterAssetEnded(interstitial, index, assetListIndex || 0);\n return;\n }\n\n // Start Interstitial Playback\n if (!player) {\n player = this.getAssetPlayer(assetItem.identifier);\n }\n if (player === null || player.destroyed) {\n const assetListLength = interstitial.assetList.length;\n this.warn(`asset ${assetListIndex + 1}/${assetListLength} player destroyed ${interstitial}`);\n player = this.createAssetPlayer(interstitial, assetItem, assetListIndex);\n player.loadSource();\n }\n if (!this.eventItemsMatch(scheduledItem, this.bufferingItem)) {\n if (interstitial.appendInPlace && this.isAssetBuffered(assetItem)) {\n return;\n }\n }\n this.startAssetPlayer(player, assetListIndex, scheduleItems, index, media);\n if (this.shouldPlay) {\n playWithCatch(player.media);\n }\n } else if (scheduledItem) {\n this.resumePrimary(scheduledItem, index, currentItem);\n if (this.shouldPlay) {\n playWithCatch(this.hls.media);\n }\n } else if (playedLastItem && this.isInterstitial(currentItem)) {\n // Maintain playingItem state at end of schedule (setSchedulePosition(-1) called to end program)\n // this allows onSeeking handler to update schedule position\n this.endedItem = null;\n this.playingItem = currentItem;\n if (!currentItem.event.appendInPlace) {\n // Media must be re-attached to resume primary schedule if not sharing source\n this.attachPrimary(schedule.durations.primary, null);\n }\n }\n }\n get playbackDisabled() {\n return this.hls.config.enableInterstitialPlayback === false;\n }\n get primaryDetails() {\n var _this$mediaSelection;\n return (_this$mediaSelection = this.mediaSelection) == null ? void 0 : _this$mediaSelection.main.details;\n }\n get primaryLive() {\n var _this$primaryDetails;\n return !!((_this$primaryDetails = this.primaryDetails) != null && _this$primaryDetails.live);\n }\n resumePrimary(scheduledItem, index, fromItem) {\n var _this$detachedData4, _this$schedule4;\n this.playingItem = scheduledItem;\n this.playingAsset = this.endedAsset = null;\n this.waitingItem = this.endedItem = null;\n this.bufferedToItem(scheduledItem);\n this.log(`resuming ${segmentToString(scheduledItem)}`);\n if (!((_this$detachedData4 = this.detachedData) != null && _this$detachedData4.mediaSource)) {\n let timelinePos = this.timelinePos;\n if (timelinePos < scheduledItem.start || timelinePos >= scheduledItem.end) {\n timelinePos = this.getPrimaryResumption(scheduledItem, index);\n this.log(timelineMessage('resumePrimary', timelinePos));\n this.timelinePos = timelinePos;\n }\n this.attachPrimary(timelinePos, scheduledItem);\n }\n if (!fromItem) {\n return;\n }\n const scheduleItems = (_this$schedule4 = this.schedule) == null ? void 0 : _this$schedule4.items;\n if (!scheduleItems) {\n return;\n }\n this.log(`INTERSTITIALS_PRIMARY_RESUMED ${segmentToString(scheduledItem)}`);\n this.hls.trigger(Events.INTERSTITIALS_PRIMARY_RESUMED, {\n schedule: scheduleItems.slice(0),\n scheduleIndex: index\n });\n this.checkBuffer();\n }\n getPrimaryResumption(scheduledItem, index) {\n const itemStart = scheduledItem.start;\n if (this.primaryLive) {\n const details = this.primaryDetails;\n if (index === 0) {\n return this.hls.startPosition;\n } else if (details && (itemStart < details.fragmentStart || itemStart > details.edge)) {\n return this.hls.liveSyncPosition || -1;\n }\n }\n return itemStart;\n }\n isAssetBuffered(asset) {\n const player = this.getAssetPlayer(asset.identifier);\n if (player != null && player.hls) {\n return player.hls.bufferedToEnd;\n }\n const bufferInfo = BufferHelper.bufferInfo(this.primaryMedia, this.timelinePos, 0);\n return bufferInfo.end + 1 >= asset.timelineStart + (asset.duration || 0);\n }\n attachPrimary(timelinePos, item, skipSeekToStartPosition) {\n if (item) {\n this.setBufferingItem(item);\n } else {\n this.bufferingItem = this.playingItem;\n }\n this.bufferingAsset = null;\n const media = this.primaryMedia;\n if (!media) {\n return;\n }\n const hls = this.hls;\n if (hls.media) {\n this.checkBuffer();\n } else {\n this.transferMediaTo(hls, media);\n if (skipSeekToStartPosition) {\n this.startLoadingPrimaryAt(timelinePos, skipSeekToStartPosition);\n }\n }\n if (!skipSeekToStartPosition) {\n // Set primary position to resume time\n this.log(timelineMessage('attachPrimary', timelinePos));\n this.timelinePos = timelinePos;\n this.startLoadingPrimaryAt(timelinePos, skipSeekToStartPosition);\n }\n }\n startLoadingPrimaryAt(timelinePos, skipSeekToStartPosition) {\n var _hls$mainForwardBuffe;\n const hls = this.hls;\n if (!hls.loadingEnabled || !hls.media || Math.abs((((_hls$mainForwardBuffe = hls.mainForwardBufferInfo) == null ? void 0 : _hls$mainForwardBuffe.start) || hls.media.currentTime) - timelinePos) > 0.5) {\n hls.startLoad(timelinePos, skipSeekToStartPosition);\n } else if (!hls.bufferingEnabled) {\n hls.resumeBuffering();\n }\n }\n\n // HLS.js event callbacks\n onManifestLoading() {\n var _this$schedule5;\n this.stopLoad();\n (_this$schedule5 = this.schedule) == null || _this$schedule5.reset();\n this.emptyPlayerQueue();\n this.clearScheduleState();\n this.shouldPlay = false;\n this.bufferedPos = this.timelinePos = -1;\n this.mediaSelection = this.altSelection = this.manager = this.requiredTracks = null;\n // BUFFER_CODECS listener added here for buffer-controller to handle it first where it adds tracks\n this.hls.off(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n this.hls.on(Events.BUFFER_CODECS, this.onBufferCodecs, this);\n }\n onLevelUpdated(event, data) {\n if (data.level === -1 || !this.schedule) {\n // level was removed\n return;\n }\n const main = this.hls.levels[data.level];\n if (!main.details) {\n return;\n }\n const currentSelection = _objectSpread2(_objectSpread2({}, this.mediaSelection || this.altSelection), {}, {\n main\n });\n this.mediaSelection = currentSelection;\n this.schedule.parseInterstitialDateRanges(currentSelection, this.hls.config.interstitialAppendInPlace);\n if (!this.effectivePlayingItem && this.schedule.items) {\n this.checkStart();\n }\n }\n onAudioTrackUpdated(event, data) {\n const audio = this.hls.audioTracks[data.id];\n const previousSelection = this.mediaSelection;\n if (!previousSelection) {\n this.altSelection = _objectSpread2(_objectSpread2({}, this.altSelection), {}, {\n audio\n });\n return;\n }\n const currentSelection = _objectSpread2(_objectSpread2({}, previousSelection), {}, {\n audio\n });\n this.mediaSelection = currentSelection;\n }\n onSubtitleTrackUpdated(event, data) {\n const subtitles = this.hls.subtitleTracks[data.id];\n const previousSelection = this.mediaSelection;\n if (!previousSelection) {\n this.altSelection = _objectSpread2(_objectSpread2({}, this.altSelection), {}, {\n subtitles\n });\n return;\n }\n const currentSelection = _objectSpread2(_objectSpread2({}, previousSelection), {}, {\n subtitles\n });\n this.mediaSelection = currentSelection;\n }\n onAudioTrackSwitching(event, data) {\n const audioOption = getBasicSelectionOption(data);\n this.playerQueue.forEach(({\n hls\n }) => hls && (hls.setAudioOption(data) || hls.setAudioOption(audioOption)));\n }\n onSubtitleTrackSwitch(event, data) {\n const subtitleOption = getBasicSelectionOption(data);\n this.playerQueue.forEach(({\n hls\n }) => hls && (hls.setSubtitleOption(data) || data.id !== -1 && hls.setSubtitleOption(subtitleOption)));\n }\n onBufferCodecs(event, data) {\n const requiredTracks = data.tracks;\n if (requiredTracks) {\n this.requiredTracks = requiredTracks;\n }\n }\n onBufferAppended(event, data) {\n this.checkBuffer();\n }\n onBufferFlushed(event, data) {\n const playingItem = this.playingItem;\n if (playingItem && !this.itemsMatch(playingItem, this.bufferingItem) && !this.isInterstitial(playingItem)) {\n const timelinePos = this.timelinePos;\n this.bufferedPos = timelinePos;\n this.checkBuffer();\n }\n }\n onBufferedToEnd(event) {\n if (!this.schedule) {\n return;\n }\n // Buffered to post-roll\n const interstitialEvents = this.schedule.events;\n if (this.bufferedPos < Number.MAX_VALUE && interstitialEvents) {\n for (let i = 0; i < interstitialEvents.length; i++) {\n const interstitial = interstitialEvents[i];\n if (interstitial.cue.post) {\n var _this$schedule$items2;\n const scheduleIndex = this.schedule.findEventIndex(interstitial.identifier);\n const item = (_this$schedule$items2 = this.schedule.items) == null ? void 0 : _this$schedule$items2[scheduleIndex];\n if (this.isInterstitial(item) && this.eventItemsMatch(item, this.bufferingItem)) {\n this.bufferedToItem(item, 0);\n }\n break;\n }\n }\n this.bufferedPos = Number.MAX_VALUE;\n }\n }\n onMediaEnded(event) {\n const playingItem = this.playingItem;\n if (!this.playingLastItem && playingItem) {\n const playingIndex = this.findItemIndex(playingItem);\n this.setSchedulePosition(playingIndex + 1);\n } else {\n this.shouldPlay = false;\n }\n }\n updateItem(previousItem, time) {\n var _this$schedule6;\n // find item in this.schedule.items;\n const items = (_this$schedule6 = this.schedule) == null ? void 0 : _this$schedule6.items;\n if (previousItem && items) {\n const index = this.findItemIndex(previousItem, time);\n return items[index] || null;\n }\n return null;\n }\n trimInPlace(updatedItem, itemBeforeUpdate) {\n if (this.isInterstitial(updatedItem) && updatedItem.event.appendInPlace && itemBeforeUpdate.end - updatedItem.end > 0.25) {\n updatedItem.event.assetList.forEach((asset, index) => {\n if (updatedItem.event.isAssetPastPlayoutLimit(index)) {\n this.clearAssetPlayer(asset.identifier, null);\n }\n });\n const flushStart = updatedItem.end + 0.25;\n const bufferInfo = BufferHelper.bufferInfo(this.primaryMedia, flushStart, 0);\n if (bufferInfo.end > flushStart || (bufferInfo.nextStart || 0) > flushStart) {\n this.log(`trim buffered interstitial ${segmentToString(updatedItem)} (was ${segmentToString(itemBeforeUpdate)})`);\n const skipSeekToStartPosition = true;\n this.attachPrimary(flushStart, null, skipSeekToStartPosition);\n this.flushFrontBuffer(flushStart);\n }\n }\n }\n itemsMatch(a, b) {\n return !!b && (a === b || a.event && b.event && this.eventItemsMatch(a, b) || !a.event && !b.event && this.findItemIndex(a) === this.findItemIndex(b));\n }\n eventItemsMatch(a, b) {\n var _b$event;\n return !!b && (a === b || a.event.identifier === ((_b$event = b.event) == null ? void 0 : _b$event.identifier));\n }\n findItemIndex(item, time) {\n return item && this.schedule ? this.schedule.findItemIndex(item, time) : -1;\n }\n updateSchedule(forceUpdate = false) {\n var _this$schedule7;\n const mediaSelection = this.mediaSelection;\n if (!mediaSelection) {\n return;\n }\n (_this$schedule7 = this.schedule) == null || _this$schedule7.updateSchedule(mediaSelection, [], forceUpdate);\n }\n\n // Schedule buffer control\n checkBuffer(starved) {\n var _this$schedule8;\n const items = (_this$schedule8 = this.schedule) == null ? void 0 : _this$schedule8.items;\n if (!items) {\n return;\n }\n // Find when combined forward buffer change reaches next schedule segment\n const bufferInfo = BufferHelper.bufferInfo(this.primaryMedia, this.timelinePos, 0);\n if (starved) {\n this.bufferedPos = this.timelinePos;\n }\n starved || (starved = bufferInfo.len < 1);\n this.updateBufferedPos(bufferInfo.end, items, starved);\n }\n updateBufferedPos(bufferEnd, items, bufferIsEmpty) {\n const schedule = this.schedule;\n const bufferingItem = this.bufferingItem;\n if (this.bufferedPos > bufferEnd || !schedule) {\n return;\n }\n if (items.length === 1 && this.itemsMatch(items[0], bufferingItem)) {\n this.bufferedPos = bufferEnd;\n return;\n }\n const playingItem = this.playingItem;\n const playingIndex = this.findItemIndex(playingItem);\n let bufferEndIndex = schedule.findItemIndexAtTime(bufferEnd);\n if (this.bufferedPos < bufferEnd) {\n var _nextItemToBuffer$eve;\n const bufferingIndex = this.findItemIndex(bufferingItem);\n const nextToBufferIndex = Math.min(bufferingIndex + 1, items.length - 1);\n const nextItemToBuffer = items[nextToBufferIndex];\n if (bufferEndIndex === -1 && bufferingItem && bufferEnd >= bufferingItem.end || (_nextItemToBuffer$eve = nextItemToBuffer.event) != null && _nextItemToBuffer$eve.appendInPlace && bufferEnd + 0.01 >= nextItemToBuffer.start) {\n bufferEndIndex = nextToBufferIndex;\n }\n if (this.isInterstitial(bufferingItem)) {\n const interstitial = bufferingItem.event;\n if (nextToBufferIndex - playingIndex > 1 && interstitial.appendInPlace === false) {\n // do not advance buffering item past Interstitial that requires source reset\n return;\n }\n if (interstitial.assetList.length === 0 && interstitial.assetListLoader) {\n // do not advance buffering item past Interstitial loading asset-list\n return;\n }\n }\n this.bufferedPos = bufferEnd;\n if (bufferEndIndex > bufferingIndex && bufferEndIndex > playingIndex) {\n this.bufferedToItem(nextItemToBuffer);\n } else {\n // allow more time than distance from edge for assets to load\n const details = this.primaryDetails;\n if (this.primaryLive && details && bufferEnd > details.edge - details.targetduration && nextItemToBuffer.start < details.edge + this.hls.config.interstitialLiveLookAhead && this.isInterstitial(nextItemToBuffer)) {\n this.preloadAssets(nextItemToBuffer.event, 0);\n }\n }\n } else if (bufferIsEmpty && playingItem && !this.itemsMatch(playingItem, bufferingItem)) {\n if (bufferEndIndex === playingIndex) {\n this.bufferedToItem(playingItem);\n } else if (bufferEndIndex === playingIndex + 1) {\n this.bufferedToItem(items[bufferEndIndex]);\n }\n }\n }\n assetsBuffered(item, media) {\n const assetList = item.event.assetList;\n if (assetList.length === 0) {\n return false;\n }\n return !item.event.assetList.some(asset => {\n const player = this.getAssetPlayer(asset.identifier);\n return !(player != null && player.bufferedInPlaceToEnd(media));\n });\n }\n setBufferingItem(item) {\n const bufferingLast = this.bufferingItem;\n const schedule = this.schedule;\n if (!this.itemsMatch(item, bufferingLast) && schedule) {\n const {\n items,\n events\n } = schedule;\n if (!items || !events) {\n return bufferingLast;\n }\n const isInterstitial = this.isInterstitial(item);\n const bufferingPlayer = this.getBufferingPlayer();\n this.bufferingItem = item;\n this.bufferedPos = Math.max(item.start, Math.min(item.end, this.timelinePos));\n const timeRemaining = bufferingPlayer ? bufferingPlayer.remaining : bufferingLast ? bufferingLast.end - this.timelinePos : 0;\n this.log(`INTERSTITIALS_BUFFERED_TO_BOUNDARY ${segmentToString(item)}` + (bufferingLast ? ` (${timeRemaining.toFixed(2)} remaining)` : ''));\n if (!this.playbackDisabled) {\n if (isInterstitial) {\n const bufferIndex = schedule.findAssetIndex(item.event, this.bufferedPos);\n // primary fragment loading will exit early in base-stream-controller while `bufferingItem` is set to an Interstitial block\n item.event.assetList.forEach((asset, i) => {\n const player = this.getAssetPlayer(asset.identifier);\n if (player) {\n if (i === bufferIndex) {\n player.loadSource();\n }\n player.resumeBuffering();\n }\n });\n } else {\n this.hls.resumeBuffering();\n this.playerQueue.forEach(player => player.pauseBuffering());\n }\n }\n this.hls.trigger(Events.INTERSTITIALS_BUFFERED_TO_BOUNDARY, {\n events: events.slice(0),\n schedule: items.slice(0),\n bufferingIndex: this.findItemIndex(item),\n playingIndex: this.findItemIndex(this.playingItem)\n });\n } else if (this.bufferingItem !== item) {\n this.bufferingItem = item;\n }\n return bufferingLast;\n }\n bufferedToItem(item, assetListIndex = 0) {\n const bufferingLast = this.setBufferingItem(item);\n if (this.playbackDisabled) {\n return;\n }\n if (this.isInterstitial(item)) {\n // Ensure asset list is loaded\n this.bufferedToEvent(item, assetListIndex);\n } else if (bufferingLast !== null) {\n // If primary player is detached, it is also stopped, restart loading at primary position\n this.bufferingAsset = null;\n const detachedData = this.detachedData;\n if (detachedData) {\n if (detachedData.mediaSource) {\n const skipSeekToStartPosition = true;\n this.attachPrimary(item.start, item, skipSeekToStartPosition);\n } else {\n this.preloadPrimary(item);\n }\n } else {\n // If not detached seek to resumption point\n this.preloadPrimary(item);\n }\n }\n }\n preloadPrimary(item) {\n const index = this.findItemIndex(item);\n const timelinePos = this.getPrimaryResumption(item, index);\n this.startLoadingPrimaryAt(timelinePos);\n }\n bufferedToEvent(item, assetListIndex) {\n const interstitial = item.event;\n const neverLoaded = interstitial.assetList.length === 0 && !interstitial.assetListLoader;\n const playOnce = interstitial.cue.once;\n if (neverLoaded || !playOnce) {\n // Buffered to Interstitial boundary\n const player = this.preloadAssets(interstitial, assetListIndex);\n if (player != null && player.interstitial.appendInPlace) {\n const media = this.primaryMedia;\n if (media) {\n this.bufferAssetPlayer(player, media);\n }\n }\n }\n }\n preloadAssets(interstitial, assetListIndex) {\n const uri = interstitial.assetUrl;\n const assetListLength = interstitial.assetList.length;\n const neverLoaded = assetListLength === 0 && !interstitial.assetListLoader;\n const playOnce = interstitial.cue.once;\n if (neverLoaded) {\n const timelineStart = interstitial.timelineStart;\n if (interstitial.appendInPlace) {\n var _playingItem$nextEven;\n const playingItem = this.playingItem;\n if (!this.isInterstitial(playingItem) && (playingItem == null || (_playingItem$nextEven = playingItem.nextEvent) == null ? void 0 : _playingItem$nextEven.identifier) === interstitial.identifier) {\n this.flushFrontBuffer(timelineStart + 0.25);\n }\n }\n let hlsStartOffset;\n let liveStartPosition = 0;\n if (!this.playingItem && this.primaryLive) {\n liveStartPosition = this.hls.startPosition;\n if (liveStartPosition === -1) {\n liveStartPosition = this.hls.liveSyncPosition || 0;\n }\n }\n if (liveStartPosition && !(interstitial.cue.pre || interstitial.cue.post)) {\n const startOffset = liveStartPosition - timelineStart;\n if (startOffset > 0) {\n hlsStartOffset = Math.round(startOffset * 1000) / 1000;\n }\n }\n this.log(`Load interstitial asset ${assetListIndex + 1}/${uri ? 1 : assetListLength} ${interstitial}${hlsStartOffset ? ` live-start: ${liveStartPosition} start-offset: ${hlsStartOffset}` : ''}`);\n if (uri) {\n return this.createAsset(interstitial, 0, 0, timelineStart, interstitial.duration, uri);\n }\n const assetListLoader = this.assetListLoader.loadAssetList(interstitial, hlsStartOffset);\n if (assetListLoader) {\n interstitial.assetListLoader = assetListLoader;\n }\n } else if (!playOnce && assetListLength) {\n // Re-buffered to Interstitial boundary, re-create asset player(s)\n for (let i = assetListIndex; i < assetListLength; i++) {\n const _asset = interstitial.assetList[i];\n const playerIndex = this.getAssetPlayerQueueIndex(_asset.identifier);\n if ((playerIndex === -1 || this.playerQueue[playerIndex].destroyed) && !_asset.error) {\n this.createAssetPlayer(interstitial, _asset, i);\n }\n }\n const asset = interstitial.assetList[assetListIndex];\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (asset) {\n const player = this.getAssetPlayer(asset.identifier);\n if (player) {\n player.loadSource();\n }\n return player;\n }\n }\n return null;\n }\n flushFrontBuffer(startOffset) {\n // Force queued flushing of all buffers\n const requiredTracks = this.requiredTracks;\n if (!requiredTracks) {\n return;\n }\n this.log(`Removing front buffer starting at ${startOffset}`);\n const sourceBufferNames = Object.keys(requiredTracks);\n sourceBufferNames.forEach(type => {\n this.hls.trigger(Events.BUFFER_FLUSHING, {\n startOffset,\n endOffset: Infinity,\n type\n });\n });\n }\n\n // Interstitial Asset Player control\n getAssetPlayerQueueIndex(assetId) {\n const playerQueue = this.playerQueue;\n for (let i = 0; i < playerQueue.length; i++) {\n if (assetId === playerQueue[i].assetId) {\n return i;\n }\n }\n return -1;\n }\n getAssetPlayer(assetId) {\n const index = this.getAssetPlayerQueueIndex(assetId);\n return this.playerQueue[index] || null;\n }\n getBufferingPlayer() {\n const {\n playerQueue,\n primaryMedia\n } = this;\n if (primaryMedia) {\n for (let i = 0; i < playerQueue.length; i++) {\n if (playerQueue[i].media === primaryMedia) {\n return playerQueue[i];\n }\n }\n }\n return null;\n }\n createAsset(interstitial, assetListIndex, startOffset, timelineStart, duration, uri) {\n const assetItem = {\n parentIdentifier: interstitial.identifier,\n identifier: generateAssetIdentifier(interstitial, uri, assetListIndex),\n duration,\n startOffset,\n timelineStart,\n uri\n };\n return this.createAssetPlayer(interstitial, assetItem, assetListIndex);\n }\n createAssetPlayer(interstitial, assetItem, assetListIndex) {\n const primary = this.hls;\n const userConfig = primary.userConfig;\n let videoPreference = userConfig.videoPreference;\n const currentLevel = primary.loadLevelObj || primary.levels[primary.currentLevel];\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (videoPreference || currentLevel) {\n videoPreference = _extends({}, videoPreference);\n if (currentLevel.videoCodec) {\n videoPreference.videoCodec = currentLevel.videoCodec;\n }\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (currentLevel.videoRange) {\n videoPreference.allowedVideoRanges = [currentLevel.videoRange];\n }\n }\n const selectedAudio = primary.audioTracks[primary.audioTrack];\n const selectedSubtitle = primary.subtitleTracks[primary.subtitleTrack];\n let startPosition = 0;\n if (this.primaryLive || interstitial.appendInPlace) {\n const timePastStart = this.timelinePos - assetItem.timelineStart;\n if (timePastStart > 1) {\n const duration = assetItem.duration;\n if (duration && timePastStart < duration) {\n startPosition = timePastStart;\n }\n }\n }\n const assetId = assetItem.identifier;\n const playerConfig = _objectSpread2(_objectSpread2({}, userConfig), {}, {\n maxMaxBufferLength: Math.min(180, primary.config.maxMaxBufferLength),\n autoStartLoad: true,\n startFragPrefetch: true,\n primarySessionId: primary.sessionId,\n assetPlayerId: assetId,\n abrEwmaDefaultEstimate: primary.bandwidthEstimate,\n interstitialsController: undefined,\n startPosition,\n liveDurationInfinity: false,\n testBandwidth: false,\n videoPreference,\n audioPreference: selectedAudio || userConfig.audioPreference,\n subtitlePreference: selectedSubtitle || userConfig.subtitlePreference\n });\n // TODO: limit maxMaxBufferLength in asset players to prevent QEE\n if (interstitial.appendInPlace) {\n interstitial.appendInPlaceStarted = true;\n if (assetItem.timelineStart) {\n playerConfig.timelineOffset = assetItem.timelineStart;\n }\n }\n const cmcd = playerConfig.cmcd;\n if (cmcd != null && cmcd.sessionId && cmcd.contentId) {\n playerConfig.cmcd = _extends({}, cmcd, {\n contentId: hash(assetItem.uri)\n });\n }\n if (this.getAssetPlayer(assetId)) {\n this.warn(`Duplicate date range identifier ${interstitial} and asset ${assetId}`);\n }\n const player = new HlsAssetPlayer(this.HlsPlayerClass, playerConfig, interstitial, assetItem);\n this.playerQueue.push(player);\n interstitial.assetList[assetListIndex] = assetItem;\n // Listen for LevelDetails and PTS change to update duration\n let initialDuration = true;\n const updateAssetPlayerDetails = details => {\n if (details.live) {\n var _this$schedule9;\n const error = new Error(`Interstitials MUST be VOD assets ${interstitial}`);\n const errorData = {\n fatal: true,\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.INTERSTITIAL_ASSET_ITEM_ERROR,\n error\n };\n const scheduleIndex = ((_this$schedule9 = this.schedule) == null ? void 0 : _this$schedule9.findEventIndex(interstitial.identifier)) || -1;\n this.handleAssetItemError(errorData, interstitial, scheduleIndex, assetListIndex, error.message);\n return;\n }\n // Get time at end of last fragment\n const duration = details.edge - details.fragmentStart;\n const currentAssetDuration = assetItem.duration;\n if (initialDuration || currentAssetDuration === null || duration > currentAssetDuration) {\n initialDuration = false;\n this.log(`Interstitial asset \"${assetId}\" duration change ${currentAssetDuration} > ${duration}`);\n assetItem.duration = duration;\n // Update schedule with new event and asset duration\n this.updateSchedule();\n }\n };\n player.on(Events.LEVEL_UPDATED, (event, {\n details\n }) => updateAssetPlayerDetails(details));\n player.on(Events.LEVEL_PTS_UPDATED, (event, {\n details\n }) => updateAssetPlayerDetails(details));\n player.on(Events.EVENT_CUE_ENTER, () => this.onInterstitialCueEnter());\n const onBufferCodecs = (event, data) => {\n const inQueuPlayer = this.getAssetPlayer(assetId);\n if (inQueuPlayer && data.tracks) {\n inQueuPlayer.off(Events.BUFFER_CODECS, onBufferCodecs);\n inQueuPlayer.tracks = data.tracks;\n const media = this.primaryMedia;\n if (this.bufferingAsset === inQueuPlayer.assetItem && media && !inQueuPlayer.media) {\n this.bufferAssetPlayer(inQueuPlayer, media);\n }\n }\n };\n player.on(Events.BUFFER_CODECS, onBufferCodecs);\n const bufferedToEnd = () => {\n var _this$schedule$items3;\n const inQueuPlayer = this.getAssetPlayer(assetId);\n this.log(`buffered to end of asset ${inQueuPlayer}`);\n if (!inQueuPlayer || !this.schedule) {\n return;\n }\n // Preload at end of asset\n const scheduleIndex = this.schedule.findEventIndex(interstitial.identifier);\n const item = (_this$schedule$items3 = this.schedule.items) == null ? void 0 : _this$schedule$items3[scheduleIndex];\n if (this.isInterstitial(item)) {\n this.advanceAssetBuffering(item, assetItem);\n }\n };\n player.on(Events.BUFFERED_TO_END, bufferedToEnd);\n const endedWithAssetIndex = assetIndex => {\n return () => {\n const inQueuPlayer = this.getAssetPlayer(assetId);\n if (!inQueuPlayer || !this.schedule) {\n return;\n }\n this.shouldPlay = true;\n const scheduleIndex = this.schedule.findEventIndex(interstitial.identifier);\n this.advanceAfterAssetEnded(interstitial, scheduleIndex, assetIndex);\n };\n };\n player.once(Events.MEDIA_ENDED, endedWithAssetIndex(assetListIndex));\n player.once(Events.PLAYOUT_LIMIT_REACHED, endedWithAssetIndex(Infinity));\n player.on(Events.ERROR, (event, data) => {\n if (!this.schedule) {\n return;\n }\n const inQueuPlayer = this.getAssetPlayer(assetId);\n if (data.details === ErrorDetails.BUFFER_STALLED_ERROR) {\n if (inQueuPlayer != null && inQueuPlayer.appendInPlace) {\n this.handleInPlaceStall(interstitial);\n return;\n }\n this.onTimeupdate();\n this.checkBuffer(true);\n return;\n }\n this.handleAssetItemError(data, interstitial, this.schedule.findEventIndex(interstitial.identifier), assetListIndex, `Asset player error ${data.error} ${interstitial}`);\n });\n player.on(Events.DESTROYING, () => {\n const inQueuPlayer = this.getAssetPlayer(assetId);\n if (!inQueuPlayer || !this.schedule) {\n return;\n }\n const error = new Error(`Asset player destroyed unexpectedly ${assetId}`);\n const errorData = {\n fatal: true,\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.INTERSTITIAL_ASSET_ITEM_ERROR,\n error\n };\n this.handleAssetItemError(errorData, interstitial, this.schedule.findEventIndex(interstitial.identifier), assetListIndex, error.message);\n });\n this.log(`INTERSTITIAL_ASSET_PLAYER_CREATED ${eventAssetToString(assetItem)}`);\n this.hls.trigger(Events.INTERSTITIAL_ASSET_PLAYER_CREATED, {\n asset: assetItem,\n assetListIndex,\n event: interstitial,\n player\n });\n return player;\n }\n clearInterstitial(interstitial, toSegment) {\n this.clearAssetPlayers(interstitial, toSegment);\n // Remove asset list and resolved duration\n interstitial.reset();\n }\n clearAssetPlayers(interstitial, toSegment) {\n interstitial.assetList.forEach(asset => {\n this.clearAssetPlayer(asset.identifier, toSegment);\n });\n }\n resetAssetPlayer(assetId) {\n // Reset asset player so that it's timeline can be adjusted without reloading the MVP\n const playerIndex = this.getAssetPlayerQueueIndex(assetId);\n if (playerIndex !== -1) {\n this.log(`reset asset player \"${assetId}\" after error`);\n const player = this.playerQueue[playerIndex];\n this.transferMediaFromPlayer(player, null);\n player.resetDetails();\n }\n }\n clearAssetPlayer(assetId, toSegment) {\n const playerIndex = this.getAssetPlayerQueueIndex(assetId);\n if (playerIndex !== -1) {\n const player = this.playerQueue[playerIndex];\n this.log(`clear ${player} toSegment: ${toSegment ? segmentToString(toSegment) : toSegment}`);\n this.transferMediaFromPlayer(player, toSegment);\n this.playerQueue.splice(playerIndex, 1);\n player.destroy();\n }\n }\n emptyPlayerQueue() {\n let player;\n while (player = this.playerQueue.pop()) {\n player.destroy();\n }\n this.playerQueue = [];\n }\n startAssetPlayer(player, assetListIndex, scheduleItems, scheduleIndex, media) {\n const {\n interstitial,\n assetItem,\n assetId\n } = player;\n const assetListLength = interstitial.assetList.length;\n const playingAsset = this.playingAsset;\n this.endedAsset = null;\n this.playingAsset = assetItem;\n if (!playingAsset || playingAsset.identifier !== assetId) {\n if (playingAsset) {\n // Exiting another Interstitial asset\n this.clearAssetPlayer(playingAsset.identifier, scheduleItems[scheduleIndex]);\n delete playingAsset.error;\n }\n this.log(`INTERSTITIAL_ASSET_STARTED ${assetListIndex + 1}/${assetListLength} ${eventAssetToString(assetItem)}`);\n this.hls.trigger(Events.INTERSTITIAL_ASSET_STARTED, {\n asset: assetItem,\n assetListIndex,\n event: interstitial,\n schedule: scheduleItems.slice(0),\n scheduleIndex,\n player\n });\n }\n\n // detach media and attach to interstitial player if it does not have another element attached\n this.bufferAssetPlayer(player, media);\n }\n bufferAssetPlayer(player, media) {\n var _this$schedule$items4, _this$detachedData5;\n if (!this.schedule) {\n return;\n }\n const {\n interstitial,\n assetItem\n } = player;\n const scheduleIndex = this.schedule.findEventIndex(interstitial.identifier);\n const item = (_this$schedule$items4 = this.schedule.items) == null ? void 0 : _this$schedule$items4[scheduleIndex];\n if (!item) {\n return;\n }\n player.loadSource();\n this.setBufferingItem(item);\n this.bufferingAsset = assetItem;\n const bufferingPlayer = this.getBufferingPlayer();\n if (bufferingPlayer === player) {\n return;\n }\n const appendInPlaceNext = interstitial.appendInPlace;\n if (appendInPlaceNext && (bufferingPlayer == null ? void 0 : bufferingPlayer.interstitial.appendInPlace) === false) {\n // Media is detached and not available to append in place\n return;\n }\n const activeTracks = (bufferingPlayer == null ? void 0 : bufferingPlayer.tracks) || ((_this$detachedData5 = this.detachedData) == null ? void 0 : _this$detachedData5.tracks) || this.requiredTracks;\n if (appendInPlaceNext && assetItem !== this.playingAsset) {\n // Do not buffer another item if tracks are unknown or incompatible\n if (!player.tracks) {\n this.log(`Waiting for track info before buffering ${player}`);\n return;\n }\n if (activeTracks && !isCompatibleTrackChange(activeTracks, player.tracks)) {\n const error = new Error(`Asset ${eventAssetToString(assetItem)} SourceBuffer tracks ('${Object.keys(player.tracks)}') are not compatible with primary content tracks ('${Object.keys(activeTracks)}')`);\n const errorData = {\n fatal: true,\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.INTERSTITIAL_ASSET_ITEM_ERROR,\n error\n };\n const assetListIndex = interstitial.findAssetIndex(assetItem);\n this.handleAssetItemError(errorData, interstitial, scheduleIndex, assetListIndex, error.message);\n return;\n }\n }\n this.transferMediaTo(player, media);\n }\n handleInPlaceStall(interstitial) {\n const schedule = this.schedule;\n const media = this.primaryMedia;\n if (!schedule || !media) {\n return;\n }\n const currentTime = media.currentTime;\n const foundAssetIndex = schedule.findAssetIndex(interstitial, currentTime);\n const stallingAsset = interstitial.assetList[foundAssetIndex];\n if (stallingAsset) {\n const player = this.getAssetPlayer(stallingAsset.identifier);\n if (player) {\n const assetCurrentTime = player.currentTime || currentTime - stallingAsset.timelineStart;\n const distanceFromEnd = player.duration - assetCurrentTime;\n this.warn(`Stalled at ${assetCurrentTime} of ${assetCurrentTime + distanceFromEnd} in ${player} ${interstitial} (media.currentTime: ${currentTime})`);\n if (assetCurrentTime && (distanceFromEnd / media.playbackRate < 0.5 || player.bufferedInPlaceToEnd(media)) && player.hls) {\n const scheduleIndex = schedule.findEventIndex(interstitial.identifier);\n this.advanceAfterAssetEnded(interstitial, scheduleIndex, foundAssetIndex);\n }\n }\n }\n }\n advanceInPlace(time) {\n const media = this.primaryMedia;\n if (media && media.currentTime < time) {\n media.currentTime = time;\n }\n }\n handleAssetItemError(data, interstitial, scheduleIndex, assetListIndex, errorMessage) {\n if (data.details === ErrorDetails.BUFFER_STALLED_ERROR) {\n return;\n }\n const assetItem = interstitial.assetList[assetListIndex] || null;\n this.warn(`INTERSTITIAL_ASSET_ERROR ${assetItem ? eventAssetToString(assetItem) : assetItem} ${data.error}`);\n if (!this.schedule) {\n return;\n }\n const assetId = (assetItem == null ? void 0 : assetItem.identifier) || '';\n const playerIndex = this.getAssetPlayerQueueIndex(assetId);\n const player = this.playerQueue[playerIndex] || null;\n const items = this.schedule.items;\n const interstitialAssetError = _extends({}, data, {\n fatal: false,\n errorAction: createDoNothingErrorAction(true),\n asset: assetItem,\n assetListIndex,\n event: interstitial,\n schedule: items,\n scheduleIndex,\n player\n });\n this.hls.trigger(Events.INTERSTITIAL_ASSET_ERROR, interstitialAssetError);\n if (!data.fatal) {\n return;\n }\n const playingAsset = this.playingAsset;\n const bufferingAsset = this.bufferingAsset;\n const error = new Error(errorMessage);\n if (assetItem) {\n this.clearAssetPlayer(assetId, null);\n assetItem.error = error;\n }\n\n // If all assets in interstitial fail, mark the interstitial with an error\n if (!interstitial.assetList.some(asset => !asset.error)) {\n interstitial.error = error;\n } else {\n // Reset level details and reload/parse media playlists to align with updated schedule\n for (let i = assetListIndex; i < interstitial.assetList.length; i++) {\n this.resetAssetPlayer(interstitial.assetList[i].identifier);\n }\n }\n this.updateSchedule(true);\n if (interstitial.error) {\n this.primaryFallback(interstitial);\n } else if (playingAsset && playingAsset.identifier === assetId) {\n this.advanceAfterAssetEnded(interstitial, scheduleIndex, assetListIndex);\n } else if (bufferingAsset && bufferingAsset.identifier === assetId && this.isInterstitial(this.bufferingItem)) {\n this.advanceAssetBuffering(this.bufferingItem, bufferingAsset);\n }\n }\n primaryFallback(interstitial) {\n // Fallback to Primary by on current or future events by updating schedule to skip errored interstitials/assets\n const flushStart = interstitial.timelineStart;\n const playingItem = this.effectivePlayingItem;\n let timelinePos = this.timelinePos;\n // Update schedule now that interstitial/assets are flagged with `error` for fallback\n if (playingItem) {\n this.log(`Fallback to primary from event \"${interstitial.identifier}\" start: ${flushStart} pos: ${timelinePos} playing: ${segmentToString(playingItem)} error: ${interstitial.error}`);\n if (timelinePos === -1) {\n timelinePos = this.hls.startPosition;\n }\n const newPlayingItem = this.updateItem(playingItem, timelinePos);\n if (this.itemsMatch(playingItem, newPlayingItem)) {\n this.clearInterstitial(interstitial, null);\n }\n if (interstitial.appendInPlace) {\n this.attachPrimary(flushStart, null);\n this.flushFrontBuffer(flushStart);\n }\n } else if (timelinePos === -1) {\n this.checkStart();\n return;\n }\n if (!this.schedule) {\n return;\n }\n const scheduleIndex = this.schedule.findItemIndexAtTime(timelinePos);\n this.setSchedulePosition(scheduleIndex);\n }\n\n // Asset List loading\n onAssetListLoaded(event, data) {\n var _this$schedule0, _this$bufferingItem2;\n const interstitial = data.event;\n const interstitialId = interstitial.identifier;\n const assets = data.assetListResponse.ASSETS;\n if (!((_this$schedule0 = this.schedule) != null && _this$schedule0.hasEvent(interstitialId))) {\n // Interstitial with id was removed\n return;\n }\n const eventStart = interstitial.timelineStart;\n const previousDuration = interstitial.duration;\n let sumDuration = 0;\n assets.forEach((asset, assetListIndex) => {\n const duration = parseFloat(asset.DURATION);\n this.createAsset(interstitial, assetListIndex, sumDuration, eventStart + sumDuration, duration, asset.URI);\n sumDuration += duration;\n });\n interstitial.duration = sumDuration;\n this.log(`Loaded asset-list with duration: ${sumDuration} (was: ${previousDuration}) ${interstitial}`);\n const waitingItem = this.waitingItem;\n const waitingForItem = (waitingItem == null ? void 0 : waitingItem.event.identifier) === interstitialId;\n\n // Update schedule now that asset.DURATION(s) are parsed\n this.updateSchedule();\n const bufferingEvent = (_this$bufferingItem2 = this.bufferingItem) == null ? void 0 : _this$bufferingItem2.event;\n\n // If buffer reached Interstitial, start buffering first asset\n if (waitingForItem) {\n var _this$schedule$items5;\n // Advance schedule when waiting for asset list data to play\n const scheduleIndex = this.schedule.findEventIndex(interstitialId);\n const item = (_this$schedule$items5 = this.schedule.items) == null ? void 0 : _this$schedule$items5[scheduleIndex];\n if (item) {\n if (!this.playingItem && this.timelinePos > item.end) {\n // Abandon if new duration is reduced enough to land playback in primary start\n const index = this.schedule.findItemIndexAtTime(this.timelinePos);\n if (index !== scheduleIndex) {\n interstitial.error = new Error(`Interstitial ${assets.length ? 'no longer within playback range' : 'asset-list is empty'} ${this.timelinePos} ${interstitial}`);\n this.log(interstitial.error.message);\n this.updateSchedule(true);\n this.primaryFallback(interstitial);\n return;\n }\n }\n this.setBufferingItem(item);\n }\n this.setSchedulePosition(scheduleIndex);\n } else if ((bufferingEvent == null ? void 0 : bufferingEvent.identifier) === interstitialId) {\n const assetItem = interstitial.assetList[0];\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\n if (assetItem) {\n const player = this.getAssetPlayer(assetItem.identifier);\n if (bufferingEvent.appendInPlace) {\n // If buffering (but not playback) has reached this item transfer media-source\n const media = this.primaryMedia;\n if (player && media) {\n this.bufferAssetPlayer(player, media);\n }\n } else if (player) {\n player.loadSource();\n }\n }\n }\n }\n onError(event, data) {\n if (!this.schedule) {\n return;\n }\n switch (data.details) {\n case ErrorDetails.ASSET_LIST_PARSING_ERROR:\n case ErrorDetails.ASSET_LIST_LOAD_ERROR:\n case ErrorDetails.ASSET_LIST_LOAD_TIMEOUT:\n {\n const interstitial = data.interstitial;\n if (interstitial) {\n this.updateSchedule(true);\n this.primaryFallback(interstitial);\n }\n break;\n }\n case ErrorDetails.BUFFER_STALLED_ERROR:\n {\n const stallingItem = this.endedItem || this.waitingItem || this.playingItem;\n if (this.isInterstitial(stallingItem) && stallingItem.event.appendInPlace) {\n this.handleInPlaceStall(stallingItem.event);\n return;\n }\n this.log(`Primary player stall @${this.timelinePos} bufferedPos: ${this.bufferedPos}`);\n this.onTimeupdate();\n this.checkBuffer(true);\n break;\n }\n }\n }\n}\n\nconst TICK_INTERVAL$2 = 500; // how often to tick in ms\n\nclass SubtitleStreamController extends BaseStreamController {\n constructor(hls, fragmentTracker, keyLoader) {\n super(hls, fragmentTracker, keyLoader, 'subtitle-stream-controller', PlaylistLevelType.SUBTITLE);\n this.currentTrackId = -1;\n this.tracksBuffered = [];\n this.mainDetails = null;\n this.registerListeners();\n }\n onHandlerDestroying() {\n this.unregisterListeners();\n super.onHandlerDestroying();\n this.mainDetails = null;\n }\n registerListeners() {\n super.registerListeners();\n const {\n hls\n } = this;\n hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n hls.on(Events.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this);\n hls.on(Events.SUBTITLE_TRACK_SWITCH, this.onSubtitleTrackSwitch, this);\n hls.on(Events.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this);\n hls.on(Events.SUBTITLE_FRAG_PROCESSED, this.onSubtitleFragProcessed, this);\n hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n }\n unregisterListeners() {\n super.unregisterListeners();\n const {\n hls\n } = this;\n hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n hls.off(Events.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this);\n hls.off(Events.SUBTITLE_TRACK_SWITCH, this.onSubtitleTrackSwitch, this);\n hls.off(Events.SUBTITLE_TRACK_LOADED, this.onSubtitleTrackLoaded, this);\n hls.off(Events.SUBTITLE_FRAG_PROCESSED, this.onSubtitleFragProcessed, this);\n hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n }\n startLoad(startPosition, skipSeekToStartPosition) {\n this.stopLoad();\n this.state = State.IDLE;\n this.setInterval(TICK_INTERVAL$2);\n this.nextLoadPosition = this.lastCurrentTime = startPosition + this.timelineOffset;\n this.startPosition = skipSeekToStartPosition ? -1 : startPosition;\n this.tick();\n }\n onManifestLoading() {\n super.onManifestLoading();\n this.mainDetails = null;\n }\n onMediaDetaching(event, data) {\n this.tracksBuffered = [];\n super.onMediaDetaching(event, data);\n }\n onLevelLoaded(event, data) {\n this.mainDetails = data.details;\n }\n onSubtitleFragProcessed(event, data) {\n const {\n frag,\n success\n } = data;\n if (!this.fragContextChanged(frag)) {\n if (isMediaFragment(frag)) {\n this.fragPrevious = frag;\n }\n this.state = State.IDLE;\n }\n if (!success) {\n return;\n }\n const buffered = this.tracksBuffered[this.currentTrackId];\n if (!buffered) {\n return;\n }\n\n // Create/update a buffered array matching the interface used by BufferHelper.bufferedInfo\n // so we can re-use the logic used to detect how much has been buffered\n let timeRange;\n const fragStart = frag.start;\n for (let i = 0; i < buffered.length; i++) {\n if (fragStart >= buffered[i].start && fragStart <= buffered[i].end) {\n timeRange = buffered[i];\n break;\n }\n }\n const fragEnd = frag.start + frag.duration;\n if (timeRange) {\n timeRange.end = fragEnd;\n } else {\n timeRange = {\n start: fragStart,\n end: fragEnd\n };\n buffered.push(timeRange);\n }\n this.fragmentTracker.fragBuffered(frag);\n this.fragBufferedComplete(frag, null);\n if (this.media) {\n this.tick();\n }\n }\n onBufferFlushing(event, data) {\n const {\n startOffset,\n endOffset\n } = data;\n if (startOffset === 0 && endOffset !== Number.POSITIVE_INFINITY) {\n const endOffsetSubtitles = endOffset - 1;\n if (endOffsetSubtitles <= 0) {\n return;\n }\n data.endOffsetSubtitles = Math.max(0, endOffsetSubtitles);\n this.tracksBuffered.forEach(buffered => {\n for (let i = 0; i < buffered.length;) {\n if (buffered[i].end <= endOffsetSubtitles) {\n buffered.shift();\n continue;\n } else if (buffered[i].start < endOffsetSubtitles) {\n buffered[i].start = endOffsetSubtitles;\n } else {\n break;\n }\n i++;\n }\n });\n this.fragmentTracker.removeFragmentsInRange(startOffset, endOffsetSubtitles, PlaylistLevelType.SUBTITLE);\n }\n }\n\n // If something goes wrong, proceed to next frag, if we were processing one.\n onError(event, data) {\n const frag = data.frag;\n if ((frag == null ? void 0 : frag.type) === PlaylistLevelType.SUBTITLE) {\n if (data.details === ErrorDetails.FRAG_GAP) {\n this.fragmentTracker.fragBuffered(frag, true);\n }\n if (this.fragCurrent) {\n this.fragCurrent.abortRequests();\n }\n if (this.state !== State.STOPPED) {\n this.state = State.IDLE;\n }\n }\n }\n\n // Got all new subtitle levels.\n onSubtitleTracksUpdated(event, {\n subtitleTracks\n }) {\n if (this.levels && subtitleOptionsIdentical(this.levels, subtitleTracks)) {\n this.levels = subtitleTracks.map(mediaPlaylist => new Level(mediaPlaylist));\n return;\n }\n this.tracksBuffered = [];\n this.levels = subtitleTracks.map(mediaPlaylist => {\n const level = new Level(mediaPlaylist);\n this.tracksBuffered[level.id] = [];\n return level;\n });\n this.fragmentTracker.removeFragmentsInRange(0, Number.POSITIVE_INFINITY, PlaylistLevelType.SUBTITLE);\n this.fragPrevious = null;\n this.mediaBuffer = null;\n }\n onSubtitleTrackSwitch(event, data) {\n var _this$levels;\n this.currentTrackId = data.id;\n if (!((_this$levels = this.levels) != null && _this$levels.length) || this.currentTrackId === -1) {\n this.clearInterval();\n return;\n }\n\n // Check if track has the necessary details to load fragments\n const currentTrack = this.levels[this.currentTrackId];\n if (currentTrack != null && currentTrack.details) {\n this.mediaBuffer = this.mediaBufferTimeRanges;\n } else {\n this.mediaBuffer = null;\n }\n if (currentTrack && this.state !== State.STOPPED) {\n this.setInterval(TICK_INTERVAL$2);\n }\n }\n\n // Got a new set of subtitle fragments.\n onSubtitleTrackLoaded(event, data) {\n var _track$details;\n const {\n currentTrackId,\n levels\n } = this;\n const {\n details: newDetails,\n id: trackId\n } = data;\n if (!levels) {\n this.warn(`Subtitle tracks were reset while loading level ${trackId}`);\n return;\n }\n const track = levels[trackId];\n if (trackId >= levels.length || !track) {\n return;\n }\n this.log(`Subtitle track ${trackId} loaded [${newDetails.startSN},${newDetails.endSN}]${newDetails.lastPartSn ? `[part-${newDetails.lastPartSn}-${newDetails.lastPartIndex}]` : ''},duration:${newDetails.totalduration}`);\n this.mediaBuffer = this.mediaBufferTimeRanges;\n let sliding = 0;\n if (newDetails.live || (_track$details = track.details) != null && _track$details.live) {\n if (newDetails.deltaUpdateFailed) {\n return;\n }\n const mainDetails = this.mainDetails;\n if (!mainDetails) {\n this.startFragRequested = false;\n return;\n }\n const mainSlidingStartFragment = mainDetails.fragments[0];\n if (!track.details) {\n if (newDetails.hasProgramDateTime && mainDetails.hasProgramDateTime) {\n alignMediaPlaylistByPDT(newDetails, mainDetails);\n sliding = newDetails.fragmentStart;\n } else if (mainSlidingStartFragment) {\n // line up live playlist with main so that fragments in range are loaded\n sliding = mainSlidingStartFragment.start;\n addSliding(newDetails, sliding);\n }\n } else {\n var _this$levelLastLoaded;\n sliding = this.alignPlaylists(newDetails, track.details, (_this$levelLastLoaded = this.levelLastLoaded) == null ? void 0 : _this$levelLastLoaded.details);\n if (sliding === 0 && mainSlidingStartFragment) {\n // realign with main when there is no overlap with last refresh\n sliding = mainSlidingStartFragment.start;\n addSliding(newDetails, sliding);\n }\n }\n // compute start position if we are aligned with the main playlist\n if (mainDetails && !this.startFragRequested) {\n this.setStartPosition(mainDetails, sliding);\n }\n }\n track.details = newDetails;\n this.levelLastLoaded = track;\n if (trackId !== currentTrackId) {\n return;\n }\n this.hls.trigger(Events.SUBTITLE_TRACK_UPDATED, {\n details: newDetails,\n id: trackId,\n groupId: data.groupId\n });\n\n // trigger handler right now\n this.tick();\n\n // If playlist is misaligned because of bad PDT or drift, delete details to resync with main on reload\n if (newDetails.live && !this.fragCurrent && this.media && this.state === State.IDLE) {\n const foundFrag = findFragmentByPTS(null, newDetails.fragments, this.media.currentTime, 0);\n if (!foundFrag) {\n this.warn('Subtitle playlist not aligned with playback');\n track.details = undefined;\n }\n }\n }\n _handleFragmentLoadComplete(fragLoadedData) {\n const {\n frag,\n payload\n } = fragLoadedData;\n const decryptData = frag.decryptdata;\n const hls = this.hls;\n if (this.fragContextChanged(frag)) {\n return;\n }\n // check to see if the payload needs to be decrypted\n if (payload && payload.byteLength > 0 && decryptData != null && decryptData.key && decryptData.iv && isFullSegmentEncryption(decryptData.method)) {\n const startTime = performance.now();\n // decrypt the subtitles\n this.decrypter.decrypt(new Uint8Array(payload), decryptData.key.buffer, decryptData.iv.buffer, getAesModeFromFullSegmentMethod(decryptData.method)).catch(err => {\n hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.FRAG_DECRYPT_ERROR,\n fatal: false,\n error: err,\n reason: err.message,\n frag\n });\n throw err;\n }).then(decryptedData => {\n const endTime = performance.now();\n hls.trigger(Events.FRAG_DECRYPTED, {\n frag,\n payload: decryptedData,\n stats: {\n tstart: startTime,\n tdecrypt: endTime\n }\n });\n }).catch(err => {\n this.warn(`${err.name}: ${err.message}`);\n this.state = State.IDLE;\n });\n }\n }\n doTick() {\n if (!this.media) {\n this.state = State.IDLE;\n return;\n }\n if (this.state === State.IDLE) {\n const {\n currentTrackId,\n levels\n } = this;\n const track = levels == null ? void 0 : levels[currentTrackId];\n if (!track || !levels.length || !track.details) {\n return;\n }\n if (this.waitForLive(track)) {\n return;\n }\n const {\n config\n } = this;\n const currentTime = this.getLoadPosition();\n const bufferedInfo = BufferHelper.bufferedInfo(this.tracksBuffered[this.currentTrackId] || [], currentTime, config.maxBufferHole);\n const {\n end: targetBufferTime,\n len: bufferLen\n } = bufferedInfo;\n const trackDetails = track.details;\n const maxBufLen = this.hls.maxBufferLength + trackDetails.levelTargetDuration;\n if (bufferLen > maxBufLen) {\n return;\n }\n const fragments = trackDetails.fragments;\n const fragLen = fragments.length;\n const end = trackDetails.edge;\n let foundFrag = null;\n const fragPrevious = this.fragPrevious;\n if (targetBufferTime < end) {\n const tolerance = config.maxFragLookUpTolerance;\n const lookupTolerance = targetBufferTime > end - tolerance ? 0 : tolerance;\n foundFrag = findFragmentByPTS(fragPrevious, fragments, Math.max(fragments[0].start, targetBufferTime), lookupTolerance);\n if (!foundFrag && fragPrevious && fragPrevious.start < fragments[0].start) {\n foundFrag = fragments[0];\n }\n } else {\n foundFrag = fragments[fragLen - 1];\n }\n foundFrag = this.filterReplacedPrimary(foundFrag, track.details);\n if (!foundFrag) {\n return;\n }\n // Load earlier fragment in same discontinuity to make up for misaligned playlists and cues that extend beyond end of segment\n const curSNIdx = foundFrag.sn - trackDetails.startSN;\n const prevFrag = fragments[curSNIdx - 1];\n if (prevFrag && prevFrag.cc === foundFrag.cc && this.fragmentTracker.getState(prevFrag) === FragmentState.NOT_LOADED) {\n foundFrag = prevFrag;\n }\n if (this.fragmentTracker.getState(foundFrag) === FragmentState.NOT_LOADED) {\n // only load if fragment is not loaded\n const fragToLoad = this.mapToInitFragWhenRequired(foundFrag);\n if (fragToLoad) {\n this.loadFragment(fragToLoad, track, targetBufferTime);\n }\n }\n }\n }\n loadFragment(frag, level, targetBufferTime) {\n if (!isMediaFragment(frag)) {\n this._loadInitSegment(frag, level);\n } else {\n super.loadFragment(frag, level, targetBufferTime);\n }\n }\n get mediaBufferTimeRanges() {\n return new BufferableInstance(this.tracksBuffered[this.currentTrackId] || []);\n }\n}\nclass BufferableInstance {\n constructor(timeranges) {\n this.buffered = void 0;\n const getRange = (name, index, length) => {\n index = index >>> 0;\n if (index > length - 1) {\n throw new DOMException(`Failed to execute '${name}' on 'TimeRanges': The index provided (${index}) is greater than the maximum bound (${length})`);\n }\n return timeranges[index][name];\n };\n this.buffered = {\n get length() {\n return timeranges.length;\n },\n end(index) {\n return getRange('end', index, timeranges.length);\n },\n start(index) {\n return getRange('start', index, timeranges.length);\n }\n };\n }\n}\n\n/**\n *\n * This code was ported from the dash.js project at:\n * https://github.com/Dash-Industry-Forum/dash.js/blob/development/externals/cea608-parser.js\n * https://github.com/Dash-Industry-Forum/dash.js/commit/8269b26a761e0853bb21d78780ed945144ecdd4d#diff-71bc295a2d6b6b7093a1d3290d53a4b2\n *\n * The original copyright appears below:\n *\n * The copyright in this software is being made available under the BSD License,\n * included below. This software may be subject to other third party and contributor\n * rights, including patent rights, and no such rights are granted under this license.\n *\n * Copyright (c) 2015-2016, DASH Industry Forum.\n * All rights reserved.\n *\n * Redistribution and use in source and binary forms, with or without modification,\n * are permitted provided that the following conditions are met:\n * 1. Redistributions of source code must retain the above copyright notice, this\n * list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above copyright notice,\n * this list of conditions and the following disclaimer in the documentation and/or\n * other materials provided with the distribution.\n * 2. Neither the name of Dash Industry Forum nor the names of its\n * contributors may be used to endorse or promote products derived from this software\n * without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS AS IS AND ANY\n * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED\n * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.\n * IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,\n * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT\n * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,\n * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)\n * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE\n * POSSIBILITY OF SUCH DAMAGE.\n */\n/**\n * Exceptions from regular ASCII. CodePoints are mapped to UTF-16 codes\n */\n\nconst specialCea608CharsCodes = {\n 0x2a: 0xe1,\n // lowercase a, acute accent\n 0x5c: 0xe9,\n // lowercase e, acute accent\n 0x5e: 0xed,\n // lowercase i, acute accent\n 0x5f: 0xf3,\n // lowercase o, acute accent\n 0x60: 0xfa,\n // lowercase u, acute accent\n 0x7b: 0xe7,\n // lowercase c with cedilla\n 0x7c: 0xf7,\n // division symbol\n 0x7d: 0xd1,\n // uppercase N tilde\n 0x7e: 0xf1,\n // lowercase n tilde\n 0x7f: 0x2588,\n // Full block\n // THIS BLOCK INCLUDES THE 16 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS\n // THAT COME FROM HI BYTE=0x11 AND LOW BETWEEN 0x30 AND 0x3F\n // THIS MEANS THAT \\x50 MUST BE ADDED TO THE VALUES\n 0x80: 0xae,\n // Registered symbol (R)\n 0x81: 0xb0,\n // degree sign\n 0x82: 0xbd,\n // 1/2 symbol\n 0x83: 0xbf,\n // Inverted (open) question mark\n 0x84: 0x2122,\n // Trademark symbol (TM)\n 0x85: 0xa2,\n // Cents symbol\n 0x86: 0xa3,\n // Pounds sterling\n 0x87: 0x266a,\n // Music 8'th note\n 0x88: 0xe0,\n // lowercase a, grave accent\n 0x89: 0x20,\n // transparent space (regular)\n 0x8a: 0xe8,\n // lowercase e, grave accent\n 0x8b: 0xe2,\n // lowercase a, circumflex accent\n 0x8c: 0xea,\n // lowercase e, circumflex accent\n 0x8d: 0xee,\n // lowercase i, circumflex accent\n 0x8e: 0xf4,\n // lowercase o, circumflex accent\n 0x8f: 0xfb,\n // lowercase u, circumflex accent\n // THIS BLOCK INCLUDES THE 32 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS\n // THAT COME FROM HI BYTE=0x12 AND LOW BETWEEN 0x20 AND 0x3F\n 0x90: 0xc1,\n // capital letter A with acute\n 0x91: 0xc9,\n // capital letter E with acute\n 0x92: 0xd3,\n // capital letter O with acute\n 0x93: 0xda,\n // capital letter U with acute\n 0x94: 0xdc,\n // capital letter U with diaresis\n 0x95: 0xfc,\n // lowercase letter U with diaeresis\n 0x96: 0x2018,\n // opening single quote\n 0x97: 0xa1,\n // inverted exclamation mark\n 0x98: 0x2a,\n // asterisk\n 0x99: 0x2019,\n // closing single quote\n 0x9a: 0x2501,\n // box drawings heavy horizontal\n 0x9b: 0xa9,\n // copyright sign\n 0x9c: 0x2120,\n // Service mark\n 0x9d: 0x2022,\n // (round) bullet\n 0x9e: 0x201c,\n // Left double quotation mark\n 0x9f: 0x201d,\n // Right double quotation mark\n 0xa0: 0xc0,\n // uppercase A, grave accent\n 0xa1: 0xc2,\n // uppercase A, circumflex\n 0xa2: 0xc7,\n // uppercase C with cedilla\n 0xa3: 0xc8,\n // uppercase E, grave accent\n 0xa4: 0xca,\n // uppercase E, circumflex\n 0xa5: 0xcb,\n // capital letter E with diaresis\n 0xa6: 0xeb,\n // lowercase letter e with diaresis\n 0xa7: 0xce,\n // uppercase I, circumflex\n 0xa8: 0xcf,\n // uppercase I, with diaresis\n 0xa9: 0xef,\n // lowercase i, with diaresis\n 0xaa: 0xd4,\n // uppercase O, circumflex\n 0xab: 0xd9,\n // uppercase U, grave accent\n 0xac: 0xf9,\n // lowercase u, grave accent\n 0xad: 0xdb,\n // uppercase U, circumflex\n 0xae: 0xab,\n // left-pointing double angle quotation mark\n 0xaf: 0xbb,\n // right-pointing double angle quotation mark\n // THIS BLOCK INCLUDES THE 32 EXTENDED (TWO-BYTE) LINE 21 CHARACTERS\n // THAT COME FROM HI BYTE=0x13 AND LOW BETWEEN 0x20 AND 0x3F\n 0xb0: 0xc3,\n // Uppercase A, tilde\n 0xb1: 0xe3,\n // Lowercase a, tilde\n 0xb2: 0xcd,\n // Uppercase I, acute accent\n 0xb3: 0xcc,\n // Uppercase I, grave accent\n 0xb4: 0xec,\n // Lowercase i, grave accent\n 0xb5: 0xd2,\n // Uppercase O, grave accent\n 0xb6: 0xf2,\n // Lowercase o, grave accent\n 0xb7: 0xd5,\n // Uppercase O, tilde\n 0xb8: 0xf5,\n // Lowercase o, tilde\n 0xb9: 0x7b,\n // Open curly brace\n 0xba: 0x7d,\n // Closing curly brace\n 0xbb: 0x5c,\n // Backslash\n 0xbc: 0x5e,\n // Caret\n 0xbd: 0x5f,\n // Underscore\n 0xbe: 0x7c,\n // Pipe (vertical line)\n 0xbf: 0x223c,\n // Tilde operator\n 0xc0: 0xc4,\n // Uppercase A, umlaut\n 0xc1: 0xe4,\n // Lowercase A, umlaut\n 0xc2: 0xd6,\n // Uppercase O, umlaut\n 0xc3: 0xf6,\n // Lowercase o, umlaut\n 0xc4: 0xdf,\n // Esszett (sharp S)\n 0xc5: 0xa5,\n // Yen symbol\n 0xc6: 0xa4,\n // Generic currency sign\n 0xc7: 0x2503,\n // Box drawings heavy vertical\n 0xc8: 0xc5,\n // Uppercase A, ring\n 0xc9: 0xe5,\n // Lowercase A, ring\n 0xca: 0xd8,\n // Uppercase O, stroke\n 0xcb: 0xf8,\n // Lowercase o, strok\n 0xcc: 0x250f,\n // Box drawings heavy down and right\n 0xcd: 0x2513,\n // Box drawings heavy down and left\n 0xce: 0x2517,\n // Box drawings heavy up and right\n 0xcf: 0x251b // Box drawings heavy up and left\n};\n\n/**\n * Utils\n */\nconst getCharForByte = byte => String.fromCharCode(specialCea608CharsCodes[byte] || byte);\nconst NR_ROWS = 15;\nconst NR_COLS = 100;\n// Tables to look up row from PAC data\nconst rowsLowCh1 = {\n 0x11: 1,\n 0x12: 3,\n 0x15: 5,\n 0x16: 7,\n 0x17: 9,\n 0x10: 11,\n 0x13: 12,\n 0x14: 14\n};\nconst rowsHighCh1 = {\n 0x11: 2,\n 0x12: 4,\n 0x15: 6,\n 0x16: 8,\n 0x17: 10,\n 0x13: 13,\n 0x14: 15\n};\nconst rowsLowCh2 = {\n 0x19: 1,\n 0x1a: 3,\n 0x1d: 5,\n 0x1e: 7,\n 0x1f: 9,\n 0x18: 11,\n 0x1b: 12,\n 0x1c: 14\n};\nconst rowsHighCh2 = {\n 0x19: 2,\n 0x1a: 4,\n 0x1d: 6,\n 0x1e: 8,\n 0x1f: 10,\n 0x1b: 13,\n 0x1c: 15\n};\nconst backgroundColors = ['white', 'green', 'blue', 'cyan', 'red', 'yellow', 'magenta', 'black', 'transparent'];\nclass CaptionsLogger {\n constructor() {\n this.time = null;\n this.verboseLevel = 0;\n }\n log(severity, msg) {\n if (this.verboseLevel >= severity) {\n const m = typeof msg === 'function' ? msg() : msg;\n logger.log(`${this.time} [${severity}] ${m}`);\n }\n }\n}\nconst numArrayToHexArray = function numArrayToHexArray(numArray) {\n const hexArray = [];\n for (let j = 0; j < numArray.length; j++) {\n hexArray.push(numArray[j].toString(16));\n }\n return hexArray;\n};\nclass PenState {\n constructor() {\n this.foreground = 'white';\n this.underline = false;\n this.italics = false;\n this.background = 'black';\n this.flash = false;\n }\n reset() {\n this.foreground = 'white';\n this.underline = false;\n this.italics = false;\n this.background = 'black';\n this.flash = false;\n }\n setStyles(styles) {\n const attribs = ['foreground', 'underline', 'italics', 'background', 'flash'];\n for (let i = 0; i < attribs.length; i++) {\n const style = attribs[i];\n if (styles.hasOwnProperty(style)) {\n this[style] = styles[style];\n }\n }\n }\n isDefault() {\n return this.foreground === 'white' && !this.underline && !this.italics && this.background === 'black' && !this.flash;\n }\n equals(other) {\n return this.foreground === other.foreground && this.underline === other.underline && this.italics === other.italics && this.background === other.background && this.flash === other.flash;\n }\n copy(newPenState) {\n this.foreground = newPenState.foreground;\n this.underline = newPenState.underline;\n this.italics = newPenState.italics;\n this.background = newPenState.background;\n this.flash = newPenState.flash;\n }\n toString() {\n return 'color=' + this.foreground + ', underline=' + this.underline + ', italics=' + this.italics + ', background=' + this.background + ', flash=' + this.flash;\n }\n}\n\n/**\n * Unicode character with styling and background.\n * @constructor\n */\nclass StyledUnicodeChar {\n constructor() {\n this.uchar = ' ';\n this.penState = new PenState();\n }\n reset() {\n this.uchar = ' ';\n this.penState.reset();\n }\n setChar(uchar, newPenState) {\n this.uchar = uchar;\n this.penState.copy(newPenState);\n }\n setPenState(newPenState) {\n this.penState.copy(newPenState);\n }\n equals(other) {\n return this.uchar === other.uchar && this.penState.equals(other.penState);\n }\n copy(newChar) {\n this.uchar = newChar.uchar;\n this.penState.copy(newChar.penState);\n }\n isEmpty() {\n return this.uchar === ' ' && this.penState.isDefault();\n }\n}\n\n/**\n * CEA-608 row consisting of NR_COLS instances of StyledUnicodeChar.\n * @constructor\n */\nclass Row {\n constructor(logger) {\n this.chars = [];\n this.pos = 0;\n this.currPenState = new PenState();\n this.cueStartTime = null;\n this.logger = void 0;\n for (let i = 0; i < NR_COLS; i++) {\n this.chars.push(new StyledUnicodeChar());\n }\n this.logger = logger;\n }\n equals(other) {\n for (let i = 0; i < NR_COLS; i++) {\n if (!this.chars[i].equals(other.chars[i])) {\n return false;\n }\n }\n return true;\n }\n copy(other) {\n for (let i = 0; i < NR_COLS; i++) {\n this.chars[i].copy(other.chars[i]);\n }\n }\n isEmpty() {\n let empty = true;\n for (let i = 0; i < NR_COLS; i++) {\n if (!this.chars[i].isEmpty()) {\n empty = false;\n break;\n }\n }\n return empty;\n }\n\n /**\n * Set the cursor to a valid column.\n */\n setCursor(absPos) {\n if (this.pos !== absPos) {\n this.pos = absPos;\n }\n if (this.pos < 0) {\n this.logger.log(3, 'Negative cursor position ' + this.pos);\n this.pos = 0;\n } else if (this.pos > NR_COLS) {\n this.logger.log(3, 'Too large cursor position ' + this.pos);\n this.pos = NR_COLS;\n }\n }\n\n /**\n * Move the cursor relative to current position.\n */\n moveCursor(relPos) {\n const newPos = this.pos + relPos;\n if (relPos > 1) {\n for (let i = this.pos + 1; i < newPos + 1; i++) {\n this.chars[i].setPenState(this.currPenState);\n }\n }\n this.setCursor(newPos);\n }\n\n /**\n * Backspace, move one step back and clear character.\n */\n backSpace() {\n this.moveCursor(-1);\n this.chars[this.pos].setChar(' ', this.currPenState);\n }\n insertChar(byte) {\n if (byte >= 0x90) {\n // Extended char\n this.backSpace();\n }\n const char = getCharForByte(byte);\n if (this.pos >= NR_COLS) {\n this.logger.log(0, () => 'Cannot insert ' + byte.toString(16) + ' (' + char + ') at position ' + this.pos + '. Skipping it!');\n return;\n }\n this.chars[this.pos].setChar(char, this.currPenState);\n this.moveCursor(1);\n }\n clearFromPos(startPos) {\n let i;\n for (i = startPos; i < NR_COLS; i++) {\n this.chars[i].reset();\n }\n }\n clear() {\n this.clearFromPos(0);\n this.pos = 0;\n this.currPenState.reset();\n }\n clearToEndOfRow() {\n this.clearFromPos(this.pos);\n }\n getTextString() {\n const chars = [];\n let empty = true;\n for (let i = 0; i < NR_COLS; i++) {\n const char = this.chars[i].uchar;\n if (char !== ' ') {\n empty = false;\n }\n chars.push(char);\n }\n if (empty) {\n return '';\n } else {\n return chars.join('');\n }\n }\n setPenStyles(styles) {\n this.currPenState.setStyles(styles);\n const currChar = this.chars[this.pos];\n currChar.setPenState(this.currPenState);\n }\n}\n\n/**\n * Keep a CEA-608 screen of 32x15 styled characters\n * @constructor\n */\nclass CaptionScreen {\n constructor(logger) {\n this.rows = [];\n this.currRow = NR_ROWS - 1;\n this.nrRollUpRows = null;\n this.lastOutputScreen = null;\n this.logger = void 0;\n for (let i = 0; i < NR_ROWS; i++) {\n this.rows.push(new Row(logger));\n }\n this.logger = logger;\n }\n reset() {\n for (let i = 0; i < NR_ROWS; i++) {\n this.rows[i].clear();\n }\n this.currRow = NR_ROWS - 1;\n }\n equals(other) {\n let equal = true;\n for (let i = 0; i < NR_ROWS; i++) {\n if (!this.rows[i].equals(other.rows[i])) {\n equal = false;\n break;\n }\n }\n return equal;\n }\n copy(other) {\n for (let i = 0; i < NR_ROWS; i++) {\n this.rows[i].copy(other.rows[i]);\n }\n }\n isEmpty() {\n let empty = true;\n for (let i = 0; i < NR_ROWS; i++) {\n if (!this.rows[i].isEmpty()) {\n empty = false;\n break;\n }\n }\n return empty;\n }\n backSpace() {\n const row = this.rows[this.currRow];\n row.backSpace();\n }\n clearToEndOfRow() {\n const row = this.rows[this.currRow];\n row.clearToEndOfRow();\n }\n\n /**\n * Insert a character (without styling) in the current row.\n */\n insertChar(char) {\n const row = this.rows[this.currRow];\n row.insertChar(char);\n }\n setPen(styles) {\n const row = this.rows[this.currRow];\n row.setPenStyles(styles);\n }\n moveCursor(relPos) {\n const row = this.rows[this.currRow];\n row.moveCursor(relPos);\n }\n setCursor(absPos) {\n this.logger.log(2, 'setCursor: ' + absPos);\n const row = this.rows[this.currRow];\n row.setCursor(absPos);\n }\n setPAC(pacData) {\n this.logger.log(2, () => 'pacData = ' + stringify(pacData));\n let newRow = pacData.row - 1;\n if (this.nrRollUpRows && newRow < this.nrRollUpRows - 1) {\n newRow = this.nrRollUpRows - 1;\n }\n\n // Make sure this only affects Roll-up Captions by checking this.nrRollUpRows\n if (this.nrRollUpRows && this.currRow !== newRow) {\n // clear all rows first\n for (let i = 0; i < NR_ROWS; i++) {\n this.rows[i].clear();\n }\n\n // Copy this.nrRollUpRows rows from lastOutputScreen and place it in the newRow location\n // topRowIndex - the start of rows to copy (inclusive index)\n const topRowIndex = this.currRow + 1 - this.nrRollUpRows;\n // We only copy if the last position was already shown.\n // We use the cueStartTime value to check this.\n const lastOutputScreen = this.lastOutputScreen;\n if (lastOutputScreen) {\n const prevLineTime = lastOutputScreen.rows[topRowIndex].cueStartTime;\n const time = this.logger.time;\n if (prevLineTime !== null && time !== null && prevLineTime < time) {\n for (let i = 0; i < this.nrRollUpRows; i++) {\n this.rows[newRow - this.nrRollUpRows + i + 1].copy(lastOutputScreen.rows[topRowIndex + i]);\n }\n }\n }\n }\n this.currRow = newRow;\n const row = this.rows[this.currRow];\n if (pacData.indent !== null) {\n const indent = pacData.indent;\n const prevPos = Math.max(indent - 1, 0);\n row.setCursor(pacData.indent);\n pacData.color = row.chars[prevPos].penState.foreground;\n }\n const styles = {\n foreground: pacData.color,\n underline: pacData.underline,\n italics: pacData.italics,\n background: 'black',\n flash: false\n };\n this.setPen(styles);\n }\n\n /**\n * Set background/extra foreground, but first do back_space, and then insert space (backwards compatibility).\n */\n setBkgData(bkgData) {\n this.logger.log(2, () => 'bkgData = ' + stringify(bkgData));\n this.backSpace();\n this.setPen(bkgData);\n this.insertChar(0x20); // Space\n }\n setRollUpRows(nrRows) {\n this.nrRollUpRows = nrRows;\n }\n rollUp() {\n if (this.nrRollUpRows === null) {\n this.logger.log(3, 'roll_up but nrRollUpRows not set yet');\n return; // Not properly setup\n }\n this.logger.log(1, () => this.getDisplayText());\n const topRowIndex = this.currRow + 1 - this.nrRollUpRows;\n const topRow = this.rows.splice(topRowIndex, 1)[0];\n topRow.clear();\n this.rows.splice(this.currRow, 0, topRow);\n this.logger.log(2, 'Rolling up');\n // this.logger.log(VerboseLevel.TEXT, this.get_display_text())\n }\n\n /**\n * Get all non-empty rows with as unicode text.\n */\n getDisplayText(asOneRow) {\n asOneRow = asOneRow || false;\n const displayText = [];\n let text = '';\n let rowNr = -1;\n for (let i = 0; i < NR_ROWS; i++) {\n const rowText = this.rows[i].getTextString();\n if (rowText) {\n rowNr = i + 1;\n if (asOneRow) {\n displayText.push('Row ' + rowNr + \": '\" + rowText + \"'\");\n } else {\n displayText.push(rowText.trim());\n }\n }\n }\n if (displayText.length > 0) {\n if (asOneRow) {\n text = '[' + displayText.join(' | ') + ']';\n } else {\n text = displayText.join('\\n');\n }\n }\n return text;\n }\n getTextAndFormat() {\n return this.rows;\n }\n}\n\n// var modes = ['MODE_ROLL-UP', 'MODE_POP-ON', 'MODE_PAINT-ON', 'MODE_TEXT'];\n\nclass Cea608Channel {\n constructor(channelNumber, outputFilter, logger) {\n this.chNr = void 0;\n this.outputFilter = void 0;\n this.mode = void 0;\n this.verbose = void 0;\n this.displayedMemory = void 0;\n this.nonDisplayedMemory = void 0;\n this.lastOutputScreen = void 0;\n this.currRollUpRow = void 0;\n this.writeScreen = void 0;\n this.cueStartTime = void 0;\n this.logger = void 0;\n this.chNr = channelNumber;\n this.outputFilter = outputFilter;\n this.mode = null;\n this.verbose = 0;\n this.displayedMemory = new CaptionScreen(logger);\n this.nonDisplayedMemory = new CaptionScreen(logger);\n this.lastOutputScreen = new CaptionScreen(logger);\n this.currRollUpRow = this.displayedMemory.rows[NR_ROWS - 1];\n this.writeScreen = this.displayedMemory;\n this.mode = null;\n this.cueStartTime = null; // Keeps track of where a cue started.\n this.logger = logger;\n }\n reset() {\n this.mode = null;\n this.displayedMemory.reset();\n this.nonDisplayedMemory.reset();\n this.lastOutputScreen.reset();\n this.outputFilter.reset();\n this.currRollUpRow = this.displayedMemory.rows[NR_ROWS - 1];\n this.writeScreen = this.displayedMemory;\n this.mode = null;\n this.cueStartTime = null;\n }\n getHandler() {\n return this.outputFilter;\n }\n setHandler(newHandler) {\n this.outputFilter = newHandler;\n }\n setPAC(pacData) {\n this.writeScreen.setPAC(pacData);\n }\n setBkgData(bkgData) {\n this.writeScreen.setBkgData(bkgData);\n }\n setMode(newMode) {\n if (newMode === this.mode) {\n return;\n }\n this.mode = newMode;\n this.logger.log(2, () => 'MODE=' + newMode);\n if (this.mode === 'MODE_POP-ON') {\n this.writeScreen = this.nonDisplayedMemory;\n } else {\n this.writeScreen = this.displayedMemory;\n this.writeScreen.reset();\n }\n if (this.mode !== 'MODE_ROLL-UP') {\n this.displayedMemory.nrRollUpRows = null;\n this.nonDisplayedMemory.nrRollUpRows = null;\n }\n this.mode = newMode;\n }\n insertChars(chars) {\n for (let i = 0; i < chars.length; i++) {\n this.writeScreen.insertChar(chars[i]);\n }\n const screen = this.writeScreen === this.displayedMemory ? 'DISP' : 'NON_DISP';\n this.logger.log(2, () => screen + ': ' + this.writeScreen.getDisplayText(true));\n if (this.mode === 'MODE_PAINT-ON' || this.mode === 'MODE_ROLL-UP') {\n this.logger.log(1, () => 'DISPLAYED: ' + this.displayedMemory.getDisplayText(true));\n this.outputDataUpdate();\n }\n }\n ccRCL() {\n // Resume Caption Loading (switch mode to Pop On)\n this.logger.log(2, 'RCL - Resume Caption Loading');\n this.setMode('MODE_POP-ON');\n }\n ccBS() {\n // BackSpace\n this.logger.log(2, 'BS - BackSpace');\n if (this.mode === 'MODE_TEXT') {\n return;\n }\n this.writeScreen.backSpace();\n if (this.writeScreen === this.displayedMemory) {\n this.outputDataUpdate();\n }\n }\n ccAOF() {\n // Reserved (formerly Alarm Off)\n }\n ccAON() {\n // Reserved (formerly Alarm On)\n }\n ccDER() {\n // Delete to End of Row\n this.logger.log(2, 'DER- Delete to End of Row');\n this.writeScreen.clearToEndOfRow();\n this.outputDataUpdate();\n }\n ccRU(nrRows) {\n // Roll-Up Captions-2,3,or 4 Rows\n this.logger.log(2, 'RU(' + nrRows + ') - Roll Up');\n this.writeScreen = this.displayedMemory;\n this.setMode('MODE_ROLL-UP');\n this.writeScreen.setRollUpRows(nrRows);\n }\n ccFON() {\n // Flash On\n this.logger.log(2, 'FON - Flash On');\n this.writeScreen.setPen({\n flash: true\n });\n }\n ccRDC() {\n // Resume Direct Captioning (switch mode to PaintOn)\n this.logger.log(2, 'RDC - Resume Direct Captioning');\n this.setMode('MODE_PAINT-ON');\n }\n ccTR() {\n // Text Restart in text mode (not supported, however)\n this.logger.log(2, 'TR');\n this.setMode('MODE_TEXT');\n }\n ccRTD() {\n // Resume Text Display in Text mode (not supported, however)\n this.logger.log(2, 'RTD');\n this.setMode('MODE_TEXT');\n }\n ccEDM() {\n // Erase Displayed Memory\n this.logger.log(2, 'EDM - Erase Displayed Memory');\n this.displayedMemory.reset();\n this.outputDataUpdate(true);\n }\n ccCR() {\n // Carriage Return\n this.logger.log(2, 'CR - Carriage Return');\n this.writeScreen.rollUp();\n this.outputDataUpdate(true);\n }\n ccENM() {\n // Erase Non-Displayed Memory\n this.logger.log(2, 'ENM - Erase Non-displayed Memory');\n this.nonDisplayedMemory.reset();\n }\n ccEOC() {\n // End of Caption (Flip Memories)\n this.logger.log(2, 'EOC - End Of Caption');\n if (this.mode === 'MODE_POP-ON') {\n const tmp = this.displayedMemory;\n this.displayedMemory = this.nonDisplayedMemory;\n this.nonDisplayedMemory = tmp;\n this.writeScreen = this.nonDisplayedMemory;\n this.logger.log(1, () => 'DISP: ' + this.displayedMemory.getDisplayText());\n }\n this.outputDataUpdate(true);\n }\n ccTO(nrCols) {\n // Tab Offset 1,2, or 3 columns\n this.logger.log(2, 'TO(' + nrCols + ') - Tab Offset');\n this.writeScreen.moveCursor(nrCols);\n }\n ccMIDROW(secondByte) {\n // Parse MIDROW command\n const styles = {\n flash: false\n };\n styles.underline = secondByte % 2 === 1;\n styles.italics = secondByte >= 0x2e;\n if (!styles.italics) {\n const colorIndex = Math.floor(secondByte / 2) - 0x10;\n const colors = ['white', 'green', 'blue', 'cyan', 'red', 'yellow', 'magenta'];\n styles.foreground = colors[colorIndex];\n } else {\n styles.foreground = 'white';\n }\n this.logger.log(2, 'MIDROW: ' + stringify(styles));\n this.writeScreen.setPen(styles);\n }\n outputDataUpdate(dispatch = false) {\n const time = this.logger.time;\n if (time === null) {\n return;\n }\n if (this.outputFilter) {\n if (this.cueStartTime === null && !this.displayedMemory.isEmpty()) {\n // Start of a new cue\n this.cueStartTime = time;\n } else {\n if (!this.displayedMemory.equals(this.lastOutputScreen)) {\n this.outputFilter.newCue(this.cueStartTime, time, this.lastOutputScreen);\n if (dispatch && this.outputFilter.dispatchCue) {\n this.outputFilter.dispatchCue();\n }\n this.cueStartTime = this.displayedMemory.isEmpty() ? null : time;\n }\n }\n this.lastOutputScreen.copy(this.displayedMemory);\n }\n }\n cueSplitAtTime(t) {\n if (this.outputFilter) {\n if (!this.displayedMemory.isEmpty()) {\n if (this.outputFilter.newCue) {\n this.outputFilter.newCue(this.cueStartTime, t, this.displayedMemory);\n }\n this.cueStartTime = t;\n }\n }\n }\n}\n\n// Will be 1 or 2 when parsing captions\n\nclass Cea608Parser {\n constructor(field, out1, out2) {\n this.channels = void 0;\n this.currentChannel = 0;\n this.cmdHistory = createCmdHistory();\n this.logger = void 0;\n const logger = this.logger = new CaptionsLogger();\n this.channels = [null, new Cea608Channel(field, out1, logger), new Cea608Channel(field + 1, out2, logger)];\n }\n getHandler(channel) {\n return this.channels[channel].getHandler();\n }\n setHandler(channel, newHandler) {\n this.channels[channel].setHandler(newHandler);\n }\n\n /**\n * Add data for time t in forms of list of bytes (unsigned ints). The bytes are treated as pairs.\n */\n addData(time, byteList) {\n this.logger.time = time;\n for (let i = 0; i < byteList.length; i += 2) {\n const a = byteList[i] & 0x7f;\n const b = byteList[i + 1] & 0x7f;\n let cmdFound = false;\n let charsFound = null;\n if (a === 0 && b === 0) {\n continue;\n } else {\n this.logger.log(3, () => '[' + numArrayToHexArray([byteList[i], byteList[i + 1]]) + '] -> (' + numArrayToHexArray([a, b]) + ')');\n }\n const cmdHistory = this.cmdHistory;\n const isControlCode = a >= 0x10 && a <= 0x1f;\n if (isControlCode) {\n // Skip redundant control codes\n if (hasCmdRepeated(a, b, cmdHistory)) {\n setLastCmd(null, null, cmdHistory);\n this.logger.log(3, () => 'Repeated command (' + numArrayToHexArray([a, b]) + ') is dropped');\n continue;\n }\n setLastCmd(a, b, this.cmdHistory);\n cmdFound = this.parseCmd(a, b);\n if (!cmdFound) {\n cmdFound = this.parseMidrow(a, b);\n }\n if (!cmdFound) {\n cmdFound = this.parsePAC(a, b);\n }\n if (!cmdFound) {\n cmdFound = this.parseBackgroundAttributes(a, b);\n }\n } else {\n setLastCmd(null, null, cmdHistory);\n }\n if (!cmdFound) {\n charsFound = this.parseChars(a, b);\n if (charsFound) {\n const currChNr = this.currentChannel;\n if (currChNr && currChNr > 0) {\n const channel = this.channels[currChNr];\n channel.insertChars(charsFound);\n } else {\n this.logger.log(2, 'No channel found yet. TEXT-MODE?');\n }\n }\n }\n if (!cmdFound && !charsFound) {\n this.logger.log(2, () => \"Couldn't parse cleaned data \" + numArrayToHexArray([a, b]) + ' orig: ' + numArrayToHexArray([byteList[i], byteList[i + 1]]));\n }\n }\n }\n\n /**\n * Parse Command.\n * @returns True if a command was found\n */\n parseCmd(a, b) {\n const cond1 = (a === 0x14 || a === 0x1c || a === 0x15 || a === 0x1d) && b >= 0x20 && b <= 0x2f;\n const cond2 = (a === 0x17 || a === 0x1f) && b >= 0x21 && b <= 0x23;\n if (!(cond1 || cond2)) {\n return false;\n }\n const chNr = a === 0x14 || a === 0x15 || a === 0x17 ? 1 : 2;\n const channel = this.channels[chNr];\n if (a === 0x14 || a === 0x15 || a === 0x1c || a === 0x1d) {\n if (b === 0x20) {\n channel.ccRCL();\n } else if (b === 0x21) {\n channel.ccBS();\n } else if (b === 0x22) {\n channel.ccAOF();\n } else if (b === 0x23) {\n channel.ccAON();\n } else if (b === 0x24) {\n channel.ccDER();\n } else if (b === 0x25) {\n channel.ccRU(2);\n } else if (b === 0x26) {\n channel.ccRU(3);\n } else if (b === 0x27) {\n channel.ccRU(4);\n } else if (b === 0x28) {\n channel.ccFON();\n } else if (b === 0x29) {\n channel.ccRDC();\n } else if (b === 0x2a) {\n channel.ccTR();\n } else if (b === 0x2b) {\n channel.ccRTD();\n } else if (b === 0x2c) {\n channel.ccEDM();\n } else if (b === 0x2d) {\n channel.ccCR();\n } else if (b === 0x2e) {\n channel.ccENM();\n } else if (b === 0x2f) {\n channel.ccEOC();\n }\n } else {\n // a == 0x17 || a == 0x1F\n channel.ccTO(b - 0x20);\n }\n this.currentChannel = chNr;\n return true;\n }\n\n /**\n * Parse midrow styling command\n */\n parseMidrow(a, b) {\n let chNr = 0;\n if ((a === 0x11 || a === 0x19) && b >= 0x20 && b <= 0x2f) {\n if (a === 0x11) {\n chNr = 1;\n } else {\n chNr = 2;\n }\n if (chNr !== this.currentChannel) {\n this.logger.log(0, 'Mismatch channel in midrow parsing');\n return false;\n }\n const channel = this.channels[chNr];\n if (!channel) {\n return false;\n }\n channel.ccMIDROW(b);\n this.logger.log(3, () => 'MIDROW (' + numArrayToHexArray([a, b]) + ')');\n return true;\n }\n return false;\n }\n\n /**\n * Parse Preable Access Codes (Table 53).\n * @returns {Boolean} Tells if PAC found\n */\n parsePAC(a, b) {\n let row;\n const case1 = (a >= 0x11 && a <= 0x17 || a >= 0x19 && a <= 0x1f) && b >= 0x40 && b <= 0x7f;\n const case2 = (a === 0x10 || a === 0x18) && b >= 0x40 && b <= 0x5f;\n if (!(case1 || case2)) {\n return false;\n }\n const chNr = a <= 0x17 ? 1 : 2;\n if (b >= 0x40 && b <= 0x5f) {\n row = chNr === 1 ? rowsLowCh1[a] : rowsLowCh2[a];\n } else {\n // 0x60 <= b <= 0x7F\n row = chNr === 1 ? rowsHighCh1[a] : rowsHighCh2[a];\n }\n const channel = this.channels[chNr];\n if (!channel) {\n return false;\n }\n channel.setPAC(this.interpretPAC(row, b));\n this.currentChannel = chNr;\n return true;\n }\n\n /**\n * Interpret the second byte of the pac, and return the information.\n * @returns pacData with style parameters\n */\n interpretPAC(row, byte) {\n let pacIndex;\n const pacData = {\n color: null,\n italics: false,\n indent: null,\n underline: false,\n row: row\n };\n if (byte > 0x5f) {\n pacIndex = byte - 0x60;\n } else {\n pacIndex = byte - 0x40;\n }\n pacData.underline = (pacIndex & 1) === 1;\n if (pacIndex <= 0xd) {\n pacData.color = ['white', 'green', 'blue', 'cyan', 'red', 'yellow', 'magenta', 'white'][Math.floor(pacIndex / 2)];\n } else if (pacIndex <= 0xf) {\n pacData.italics = true;\n pacData.color = 'white';\n } else {\n pacData.indent = Math.floor((pacIndex - 0x10) / 2) * 4;\n }\n return pacData; // Note that row has zero offset. The spec uses 1.\n }\n\n /**\n * Parse characters.\n * @returns An array with 1 to 2 codes corresponding to chars, if found. null otherwise.\n */\n parseChars(a, b) {\n let channelNr;\n let charCodes = null;\n let charCode1 = null;\n if (a >= 0x19) {\n channelNr = 2;\n charCode1 = a - 8;\n } else {\n channelNr = 1;\n charCode1 = a;\n }\n if (charCode1 >= 0x11 && charCode1 <= 0x13) {\n // Special character\n let oneCode;\n if (charCode1 === 0x11) {\n oneCode = b + 0x50;\n } else if (charCode1 === 0x12) {\n oneCode = b + 0x70;\n } else {\n oneCode = b + 0x90;\n }\n this.logger.log(2, () => \"Special char '\" + getCharForByte(oneCode) + \"' in channel \" + channelNr);\n charCodes = [oneCode];\n } else if (a >= 0x20 && a <= 0x7f) {\n charCodes = b === 0 ? [a] : [a, b];\n }\n if (charCodes) {\n this.logger.log(3, () => 'Char codes = ' + numArrayToHexArray(charCodes).join(','));\n }\n return charCodes;\n }\n\n /**\n * Parse extended background attributes as well as new foreground color black.\n * @returns True if background attributes are found\n */\n parseBackgroundAttributes(a, b) {\n const case1 = (a === 0x10 || a === 0x18) && b >= 0x20 && b <= 0x2f;\n const case2 = (a === 0x17 || a === 0x1f) && b >= 0x2d && b <= 0x2f;\n if (!(case1 || case2)) {\n return false;\n }\n let index;\n const bkgData = {};\n if (a === 0x10 || a === 0x18) {\n index = Math.floor((b - 0x20) / 2);\n bkgData.background = backgroundColors[index];\n if (b % 2 === 1) {\n bkgData.background = bkgData.background + '_semi';\n }\n } else if (b === 0x2d) {\n bkgData.background = 'transparent';\n } else {\n bkgData.foreground = 'black';\n if (b === 0x2f) {\n bkgData.underline = true;\n }\n }\n const chNr = a <= 0x17 ? 1 : 2;\n const channel = this.channels[chNr];\n channel.setBkgData(bkgData);\n return true;\n }\n\n /**\n * Reset state of parser and its channels.\n */\n reset() {\n for (let i = 0; i < Object.keys(this.channels).length; i++) {\n const channel = this.channels[i];\n if (channel) {\n channel.reset();\n }\n }\n setLastCmd(null, null, this.cmdHistory);\n }\n\n /**\n * Trigger the generation of a cue, and the start of a new one if displayScreens are not empty.\n */\n cueSplitAtTime(t) {\n for (let i = 0; i < this.channels.length; i++) {\n const channel = this.channels[i];\n if (channel) {\n channel.cueSplitAtTime(t);\n }\n }\n }\n}\nfunction setLastCmd(a, b, cmdHistory) {\n cmdHistory.a = a;\n cmdHistory.b = b;\n}\nfunction hasCmdRepeated(a, b, cmdHistory) {\n return cmdHistory.a === a && cmdHistory.b === b;\n}\nfunction createCmdHistory() {\n return {\n a: null,\n b: null\n };\n}\n\n/**\n * Copyright 2013 vtt.js Contributors\n *\n * Licensed under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an 'AS IS' BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nvar VTTCue = (function () {\n if (optionalSelf != null && optionalSelf.VTTCue) {\n return self.VTTCue;\n }\n const AllowedDirections = ['', 'lr', 'rl'];\n const AllowedAlignments = ['start', 'middle', 'end', 'left', 'right'];\n function isAllowedValue(allowed, value) {\n if (typeof value !== 'string') {\n return false;\n }\n // necessary for assuring the generic conforms to the Array interface\n if (!Array.isArray(allowed)) {\n return false;\n }\n // reset the type so that the next narrowing works well\n const lcValue = value.toLowerCase();\n // use the allow list to narrow the type to a specific subset of strings\n if (~allowed.indexOf(lcValue)) {\n return lcValue;\n }\n return false;\n }\n function findDirectionSetting(value) {\n return isAllowedValue(AllowedDirections, value);\n }\n function findAlignSetting(value) {\n return isAllowedValue(AllowedAlignments, value);\n }\n function extend(obj, ...rest) {\n let i = 1;\n for (; i < arguments.length; i++) {\n const cobj = arguments[i];\n for (const p in cobj) {\n obj[p] = cobj[p];\n }\n }\n return obj;\n }\n function VTTCue(startTime, endTime, text) {\n const cue = this;\n const baseObj = {\n enumerable: true\n };\n /**\n * Shim implementation specific properties. These properties are not in\n * the spec.\n */\n\n // Lets us know when the VTTCue's data has changed in such a way that we need\n // to recompute its display state. This lets us compute its display state\n // lazily.\n cue.hasBeenReset = false;\n\n /**\n * VTTCue and TextTrackCue properties\n * http://dev.w3.org/html5/webvtt/#vttcue-interface\n */\n\n let _id = '';\n let _pauseOnExit = false;\n let _startTime = startTime;\n let _endTime = endTime;\n let _text = text;\n let _region = null;\n let _vertical = '';\n let _snapToLines = true;\n let _line = 'auto';\n let _lineAlign = 'start';\n let _position = 50;\n let _positionAlign = 'middle';\n let _size = 50;\n let _align = 'middle';\n Object.defineProperty(cue, 'id', extend({}, baseObj, {\n get: function () {\n return _id;\n },\n set: function (value) {\n _id = '' + value;\n }\n }));\n Object.defineProperty(cue, 'pauseOnExit', extend({}, baseObj, {\n get: function () {\n return _pauseOnExit;\n },\n set: function (value) {\n _pauseOnExit = !!value;\n }\n }));\n Object.defineProperty(cue, 'startTime', extend({}, baseObj, {\n get: function () {\n return _startTime;\n },\n set: function (value) {\n if (typeof value !== 'number') {\n throw new TypeError('Start time must be set to a number.');\n }\n _startTime = value;\n this.hasBeenReset = true;\n }\n }));\n Object.defineProperty(cue, 'endTime', extend({}, baseObj, {\n get: function () {\n return _endTime;\n },\n set: function (value) {\n if (typeof value !== 'number') {\n throw new TypeError('End time must be set to a number.');\n }\n _endTime = value;\n this.hasBeenReset = true;\n }\n }));\n Object.defineProperty(cue, 'text', extend({}, baseObj, {\n get: function () {\n return _text;\n },\n set: function (value) {\n _text = '' + value;\n this.hasBeenReset = true;\n }\n }));\n\n // todo: implement VTTRegion polyfill?\n Object.defineProperty(cue, 'region', extend({}, baseObj, {\n get: function () {\n return _region;\n },\n set: function (value) {\n _region = value;\n this.hasBeenReset = true;\n }\n }));\n Object.defineProperty(cue, 'vertical', extend({}, baseObj, {\n get: function () {\n return _vertical;\n },\n set: function (value) {\n const setting = findDirectionSetting(value);\n // Have to check for false because the setting an be an empty string.\n if (setting === false) {\n throw new SyntaxError('An invalid or illegal string was specified.');\n }\n _vertical = setting;\n this.hasBeenReset = true;\n }\n }));\n Object.defineProperty(cue, 'snapToLines', extend({}, baseObj, {\n get: function () {\n return _snapToLines;\n },\n set: function (value) {\n _snapToLines = !!value;\n this.hasBeenReset = true;\n }\n }));\n Object.defineProperty(cue, 'line', extend({}, baseObj, {\n get: function () {\n return _line;\n },\n set: function (value) {\n if (typeof value !== 'number' && value !== 'auto') {\n throw new SyntaxError('An invalid number or illegal string was specified.');\n }\n _line = value;\n this.hasBeenReset = true;\n }\n }));\n Object.defineProperty(cue, 'lineAlign', extend({}, baseObj, {\n get: function () {\n return _lineAlign;\n },\n set: function (value) {\n const setting = findAlignSetting(value);\n if (!setting) {\n throw new SyntaxError('An invalid or illegal string was specified.');\n }\n _lineAlign = setting;\n this.hasBeenReset = true;\n }\n }));\n Object.defineProperty(cue, 'position', extend({}, baseObj, {\n get: function () {\n return _position;\n },\n set: function (value) {\n if (value < 0 || value > 100) {\n throw new Error('Position must be between 0 and 100.');\n }\n _position = value;\n this.hasBeenReset = true;\n }\n }));\n Object.defineProperty(cue, 'positionAlign', extend({}, baseObj, {\n get: function () {\n return _positionAlign;\n },\n set: function (value) {\n const setting = findAlignSetting(value);\n if (!setting) {\n throw new SyntaxError('An invalid or illegal string was specified.');\n }\n _positionAlign = setting;\n this.hasBeenReset = true;\n }\n }));\n Object.defineProperty(cue, 'size', extend({}, baseObj, {\n get: function () {\n return _size;\n },\n set: function (value) {\n if (value < 0 || value > 100) {\n throw new Error('Size must be between 0 and 100.');\n }\n _size = value;\n this.hasBeenReset = true;\n }\n }));\n Object.defineProperty(cue, 'align', extend({}, baseObj, {\n get: function () {\n return _align;\n },\n set: function (value) {\n const setting = findAlignSetting(value);\n if (!setting) {\n throw new SyntaxError('An invalid or illegal string was specified.');\n }\n _align = setting;\n this.hasBeenReset = true;\n }\n }));\n\n /**\n * Other <track> spec defined properties\n */\n\n // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#text-track-cue-display-state\n cue.displayState = undefined;\n }\n\n /**\n * VTTCue methods\n */\n\n VTTCue.prototype.getCueAsHTML = function () {\n // Assume WebVTT.convertCueToDOMTree is on the global.\n const WebVTT = self.WebVTT;\n return WebVTT.convertCueToDOMTree(self, this.text);\n };\n // this is a polyfill hack\n return VTTCue;\n})();\n\n/*\n * Source: https://github.com/mozilla/vtt.js/blob/master/dist/vtt.js\n */\n\nclass StringDecoder {\n decode(data, options) {\n if (!data) {\n return '';\n }\n if (typeof data !== 'string') {\n throw new Error('Error - expected string data.');\n }\n return decodeURIComponent(encodeURIComponent(data));\n }\n}\n\n// Try to parse input as a time stamp.\nfunction parseTimeStamp(input) {\n function computeSeconds(h, m, s, f) {\n return (h | 0) * 3600 + (m | 0) * 60 + (s | 0) + parseFloat(f || 0);\n }\n const m = input.match(/^(?:(\\d+):)?(\\d{2}):(\\d{2})(\\.\\d+)?/);\n if (!m) {\n return null;\n }\n if (parseFloat(m[2]) > 59) {\n // Timestamp takes the form of [hours]:[minutes].[milliseconds]\n // First position is hours as it's over 59.\n return computeSeconds(m[2], m[3], 0, m[4]);\n }\n // Timestamp takes the form of [hours (optional)]:[minutes]:[seconds].[milliseconds]\n return computeSeconds(m[1], m[2], m[3], m[4]);\n}\n\n// A settings object holds key/value pairs and will ignore anything but the first\n// assignment to a specific key.\nclass Settings {\n constructor() {\n this.values = Object.create(null);\n }\n // Only accept the first assignment to any key.\n set(k, v) {\n if (!this.get(k) && v !== '') {\n this.values[k] = v;\n }\n }\n // Return the value for a key, or a default value.\n // If 'defaultKey' is passed then 'dflt' is assumed to be an object with\n // a number of possible default values as properties where 'defaultKey' is\n // the key of the property that will be chosen; otherwise it's assumed to be\n // a single value.\n get(k, dflt, defaultKey) {\n if (defaultKey) {\n return this.has(k) ? this.values[k] : dflt[defaultKey];\n }\n return this.has(k) ? this.values[k] : dflt;\n }\n // Check whether we have a value for a key.\n has(k) {\n return k in this.values;\n }\n // Accept a setting if its one of the given alternatives.\n alt(k, v, a) {\n for (let n = 0; n < a.length; ++n) {\n if (v === a[n]) {\n this.set(k, v);\n break;\n }\n }\n }\n // Accept a setting if its a valid (signed) integer.\n integer(k, v) {\n if (/^-?\\d+$/.test(v)) {\n // integer\n this.set(k, parseInt(v, 10));\n }\n }\n // Accept a setting if its a valid percentage.\n percent(k, v) {\n if (/^([\\d]{1,3})(\\.[\\d]*)?%$/.test(v)) {\n const percent = parseFloat(v);\n if (percent >= 0 && percent <= 100) {\n this.set(k, percent);\n return true;\n }\n }\n return false;\n }\n}\n\n// Helper function to parse input into groups separated by 'groupDelim', and\n// interpret each group as a key/value pair separated by 'keyValueDelim'.\nfunction parseOptions(input, callback, keyValueDelim, groupDelim) {\n const groups = groupDelim ? input.split(groupDelim) : [input];\n for (const i in groups) {\n if (typeof groups[i] !== 'string') {\n continue;\n }\n const kv = groups[i].split(keyValueDelim);\n if (kv.length !== 2) {\n continue;\n }\n const k = kv[0];\n const v = kv[1];\n callback(k, v);\n }\n}\nconst defaults = new VTTCue(0, 0, '');\n// 'middle' was changed to 'center' in the spec: https://github.com/w3c/webvtt/pull/244\n// Safari doesn't yet support this change, but FF and Chrome do.\nconst center = defaults.align === 'middle' ? 'middle' : 'center';\nfunction parseCue(input, cue, regionList) {\n // Remember the original input if we need to throw an error.\n const oInput = input;\n // 4.1 WebVTT timestamp\n function consumeTimeStamp() {\n const ts = parseTimeStamp(input);\n if (ts === null) {\n throw new Error('Malformed timestamp: ' + oInput);\n }\n\n // Remove time stamp from input.\n input = input.replace(/^[^\\sa-zA-Z-]+/, '');\n return ts;\n }\n\n // 4.4.2 WebVTT cue settings\n function consumeCueSettings(input, cue) {\n const settings = new Settings();\n parseOptions(input, function (k, v) {\n let vals;\n switch (k) {\n case 'region':\n // Find the last region we parsed with the same region id.\n for (let i = regionList.length - 1; i >= 0; i--) {\n if (regionList[i].id === v) {\n settings.set(k, regionList[i].region);\n break;\n }\n }\n break;\n case 'vertical':\n settings.alt(k, v, ['rl', 'lr']);\n break;\n case 'line':\n vals = v.split(',');\n settings.integer(k, vals[0]);\n if (settings.percent(k, vals[0])) {\n settings.set('snapToLines', false);\n }\n settings.alt(k, vals[0], ['auto']);\n if (vals.length === 2) {\n settings.alt('lineAlign', vals[1], ['start', center, 'end']);\n }\n break;\n case 'position':\n vals = v.split(',');\n settings.percent(k, vals[0]);\n if (vals.length === 2) {\n settings.alt('positionAlign', vals[1], ['start', center, 'end', 'line-left', 'line-right', 'auto']);\n }\n break;\n case 'size':\n settings.percent(k, v);\n break;\n case 'align':\n settings.alt(k, v, ['start', center, 'end', 'left', 'right']);\n break;\n }\n }, /:/, /\\s/);\n\n // Apply default values for any missing fields.\n cue.region = settings.get('region', null);\n cue.vertical = settings.get('vertical', '');\n let line = settings.get('line', 'auto');\n if (line === 'auto' && defaults.line === -1) {\n // set numeric line number for Safari\n line = -1;\n }\n cue.line = line;\n cue.lineAlign = settings.get('lineAlign', 'start');\n cue.snapToLines = settings.get('snapToLines', true);\n cue.size = settings.get('size', 100);\n cue.align = settings.get('align', center);\n let position = settings.get('position', 'auto');\n if (position === 'auto' && defaults.position === 50) {\n // set numeric position for Safari\n position = cue.align === 'start' || cue.align === 'left' ? 0 : cue.align === 'end' || cue.align === 'right' ? 100 : 50;\n }\n cue.position = position;\n }\n function skipWhitespace() {\n input = input.replace(/^\\s+/, '');\n }\n\n // 4.1 WebVTT cue timings.\n skipWhitespace();\n cue.startTime = consumeTimeStamp(); // (1) collect cue start time\n skipWhitespace();\n if (input.slice(0, 3) !== '-->') {\n // (3) next characters must match '-->'\n throw new Error(\"Malformed time stamp (time stamps must be separated by '-->'): \" + oInput);\n }\n input = input.slice(3);\n skipWhitespace();\n cue.endTime = consumeTimeStamp(); // (5) collect cue end time\n\n // 4.1 WebVTT cue settings list.\n skipWhitespace();\n consumeCueSettings(input, cue);\n}\nfunction fixLineBreaks(input) {\n return input.replace(/<br(?: \\/)?>/gi, '\\n');\n}\nclass VTTParser {\n constructor() {\n this.state = 'INITIAL';\n this.buffer = '';\n this.decoder = new StringDecoder();\n this.regionList = [];\n this.cue = null;\n this.oncue = void 0;\n this.onparsingerror = void 0;\n this.onflush = void 0;\n }\n parse(data) {\n const _this = this;\n\n // If there is no data then we won't decode it, but will just try to parse\n // whatever is in buffer already. This may occur in circumstances, for\n // example when flush() is called.\n if (data) {\n // Try to decode the data that we received.\n _this.buffer += _this.decoder.decode(data, {\n stream: true\n });\n }\n function collectNextLine() {\n let buffer = _this.buffer;\n let pos = 0;\n buffer = fixLineBreaks(buffer);\n while (pos < buffer.length && buffer[pos] !== '\\r' && buffer[pos] !== '\\n') {\n ++pos;\n }\n const line = buffer.slice(0, pos);\n // Advance the buffer early in case we fail below.\n if (buffer[pos] === '\\r') {\n ++pos;\n }\n if (buffer[pos] === '\\n') {\n ++pos;\n }\n _this.buffer = buffer.slice(pos);\n return line;\n }\n\n // 3.2 WebVTT metadata header syntax\n function parseHeader(input) {\n parseOptions(input, function (k, v) {\n // switch (k) {\n // case 'region':\n // 3.3 WebVTT region metadata header syntax\n // console.log('parse region', v);\n // parseRegion(v);\n // break;\n // }\n }, /:/);\n }\n\n // 5.1 WebVTT file parsing.\n try {\n let line = '';\n if (_this.state === 'INITIAL') {\n // We can't start parsing until we have the first line.\n if (!/\\r\\n|\\n/.test(_this.buffer)) {\n return this;\n }\n line = collectNextLine();\n // strip of UTF-8 BOM if any\n // https://en.wikipedia.org/wiki/Byte_order_mark#UTF-8\n const m = line.match(/^()?WEBVTT([ \\t].*)?$/);\n if (!(m != null && m[0])) {\n throw new Error('Malformed WebVTT signature.');\n }\n _this.state = 'HEADER';\n }\n let alreadyCollectedLine = false;\n while (_this.buffer) {\n // We can't parse a line until we have the full line.\n if (!/\\r\\n|\\n/.test(_this.buffer)) {\n return this;\n }\n if (!alreadyCollectedLine) {\n line = collectNextLine();\n } else {\n alreadyCollectedLine = false;\n }\n switch (_this.state) {\n case 'HEADER':\n // 13-18 - Allow a header (metadata) under the WEBVTT line.\n if (/:/.test(line)) {\n parseHeader(line);\n } else if (!line) {\n // An empty line terminates the header and starts the body (cues).\n _this.state = 'ID';\n }\n continue;\n case 'NOTE':\n // Ignore NOTE blocks.\n if (!line) {\n _this.state = 'ID';\n }\n continue;\n case 'ID':\n // Check for the start of NOTE blocks.\n if (/^NOTE($|[ \\t])/.test(line)) {\n _this.state = 'NOTE';\n break;\n }\n // 19-29 - Allow any number of line terminators, then initialize new cue values.\n if (!line) {\n continue;\n }\n _this.cue = new VTTCue(0, 0, '');\n _this.state = 'CUE';\n // 30-39 - Check if self line contains an optional identifier or timing data.\n if (line.indexOf('-->') === -1) {\n _this.cue.id = line;\n continue;\n }\n // Process line as start of a cue.\n /* falls through */\n case 'CUE':\n // 40 - Collect cue timings and settings.\n if (!_this.cue) {\n _this.state = 'BADCUE';\n continue;\n }\n try {\n parseCue(line, _this.cue, _this.regionList);\n } catch (e) {\n // In case of an error ignore rest of the cue.\n _this.cue = null;\n _this.state = 'BADCUE';\n continue;\n }\n _this.state = 'CUETEXT';\n continue;\n case 'CUETEXT':\n {\n const hasSubstring = line.indexOf('-->') !== -1;\n // 34 - If we have an empty line then report the cue.\n // 35 - If we have the special substring '-->' then report the cue,\n // but do not collect the line as we need to process the current\n // one as a new cue.\n if (!line || hasSubstring && (alreadyCollectedLine = true)) {\n // We are done parsing self cue.\n if (_this.oncue && _this.cue) {\n _this.oncue(_this.cue);\n }\n _this.cue = null;\n _this.state = 'ID';\n continue;\n }\n if (_this.cue === null) {\n continue;\n }\n if (_this.cue.text) {\n _this.cue.text += '\\n';\n }\n _this.cue.text += line;\n }\n continue;\n case 'BADCUE':\n // 54-62 - Collect and discard the remaining cue.\n if (!line) {\n _this.state = 'ID';\n }\n }\n }\n } catch (e) {\n // If we are currently parsing a cue, report what we have.\n if (_this.state === 'CUETEXT' && _this.cue && _this.oncue) {\n _this.oncue(_this.cue);\n }\n _this.cue = null;\n // Enter BADWEBVTT state if header was not parsed correctly otherwise\n // another exception occurred so enter BADCUE state.\n _this.state = _this.state === 'INITIAL' ? 'BADWEBVTT' : 'BADCUE';\n }\n return this;\n }\n flush() {\n const _this = this;\n try {\n // Finish decoding the stream.\n // _this.buffer += _this.decoder.decode();\n // Synthesize the end of the current cue or region.\n if (_this.cue || _this.state === 'HEADER') {\n _this.buffer += '\\n\\n';\n _this.parse();\n }\n // If we've flushed, parsed, and we're still on the INITIAL state then\n // that means we don't have enough of the stream to parse the first\n // line.\n if (_this.state === 'INITIAL' || _this.state === 'BADWEBVTT') {\n throw new Error('Malformed WebVTT signature.');\n }\n } catch (e) {\n if (_this.onparsingerror) {\n _this.onparsingerror(e);\n }\n }\n if (_this.onflush) {\n _this.onflush();\n }\n return this;\n }\n}\n\nconst LINEBREAKS = /\\r\\n|\\n\\r|\\n|\\r/g;\n\n// String.prototype.startsWith is not supported in IE11\nconst startsWith = function startsWith(inputString, searchString, position = 0) {\n return inputString.slice(position, position + searchString.length) === searchString;\n};\nconst cueString2millis = function cueString2millis(timeString) {\n let ts = parseInt(timeString.slice(-3));\n const secs = parseInt(timeString.slice(-6, -4));\n const mins = parseInt(timeString.slice(-9, -7));\n const hours = timeString.length > 9 ? parseInt(timeString.substring(0, timeString.indexOf(':'))) : 0;\n if (!isFiniteNumber(ts) || !isFiniteNumber(secs) || !isFiniteNumber(mins) || !isFiniteNumber(hours)) {\n throw Error(`Malformed X-TIMESTAMP-MAP: Local:${timeString}`);\n }\n ts += 1000 * secs;\n ts += 60 * 1000 * mins;\n ts += 60 * 60 * 1000 * hours;\n return ts;\n};\n\n// Create a unique hash id for a cue based on start/end times and text.\n// This helps timeline-controller to avoid showing repeated captions.\nfunction generateCueId(startTime, endTime, text) {\n return hash(startTime.toString()) + hash(endTime.toString()) + hash(text);\n}\nconst calculateOffset = function calculateOffset(vttCCs, cc, presentationTime) {\n let currCC = vttCCs[cc];\n let prevCC = vttCCs[currCC.prevCC];\n\n // This is the first discontinuity or cues have been processed since the last discontinuity\n // Offset = current discontinuity time\n if (!prevCC || !prevCC.new && currCC.new) {\n vttCCs.ccOffset = vttCCs.presentationOffset = currCC.start;\n currCC.new = false;\n return;\n }\n\n // There have been discontinuities since cues were last parsed.\n // Offset = time elapsed\n while ((_prevCC = prevCC) != null && _prevCC.new) {\n var _prevCC;\n vttCCs.ccOffset += currCC.start - prevCC.start;\n currCC.new = false;\n currCC = prevCC;\n prevCC = vttCCs[currCC.prevCC];\n }\n vttCCs.presentationOffset = presentationTime;\n};\nfunction parseWebVTT(vttByteArray, initPTS, vttCCs, cc, timeOffset, callBack, errorCallBack) {\n const parser = new VTTParser();\n // Convert byteArray into string, replacing any somewhat exotic linefeeds with \"\\n\", then split on that character.\n // Uint8Array.prototype.reduce is not implemented in IE11\n const vttLines = utf8ArrayToStr(new Uint8Array(vttByteArray)).trim().replace(LINEBREAKS, '\\n').split('\\n');\n const cues = [];\n const init90kHz = initPTS ? toMpegTsClockFromTimescale(initPTS.baseTime, initPTS.timescale) : 0;\n let cueTime = '00:00.000';\n let timestampMapMPEGTS = 0;\n let timestampMapLOCAL = 0;\n let parsingError;\n let inHeader = true;\n parser.oncue = function (cue) {\n // Adjust cue timing; clamp cues to start no earlier than - and drop cues that don't end after - 0 on timeline.\n const currCC = vttCCs[cc];\n let cueOffset = vttCCs.ccOffset;\n\n // Calculate subtitle PTS offset\n const webVttMpegTsMapOffset = (timestampMapMPEGTS - init90kHz) / 90000;\n\n // Update offsets for new discontinuities\n if (currCC != null && currCC.new) {\n if (timestampMapLOCAL !== undefined) {\n // When local time is provided, offset = discontinuity start time - local time\n cueOffset = vttCCs.ccOffset = currCC.start;\n } else {\n calculateOffset(vttCCs, cc, webVttMpegTsMapOffset);\n }\n }\n if (webVttMpegTsMapOffset) {\n if (!initPTS) {\n parsingError = new Error('Missing initPTS for VTT MPEGTS');\n return;\n }\n // If we have MPEGTS, offset = presentation time + discontinuity offset\n cueOffset = webVttMpegTsMapOffset - vttCCs.presentationOffset;\n }\n const duration = cue.endTime - cue.startTime;\n const startTime = normalizePts((cue.startTime + cueOffset - timestampMapLOCAL) * 90000, timeOffset * 90000) / 90000;\n cue.startTime = Math.max(startTime, 0);\n cue.endTime = Math.max(startTime + duration, 0);\n\n //trim trailing webvtt block whitespaces\n const text = cue.text.trim();\n\n // Fix encoding of special characters\n cue.text = decodeURIComponent(encodeURIComponent(text));\n\n // If the cue was not assigned an id from the VTT file (line above the content), create one.\n if (!cue.id) {\n cue.id = generateCueId(cue.startTime, cue.endTime, text);\n }\n if (cue.endTime > 0) {\n cues.push(cue);\n }\n };\n parser.onparsingerror = function (error) {\n parsingError = error;\n };\n parser.onflush = function () {\n if (parsingError) {\n errorCallBack(parsingError);\n return;\n }\n callBack(cues);\n };\n\n // Go through contents line by line.\n vttLines.forEach(line => {\n if (inHeader) {\n // Look for X-TIMESTAMP-MAP in header.\n if (startsWith(line, 'X-TIMESTAMP-MAP=')) {\n // Once found, no more are allowed anyway, so stop searching.\n inHeader = false;\n // Extract LOCAL and MPEGTS.\n line.slice(16).split(',').forEach(timestamp => {\n if (startsWith(timestamp, 'LOCAL:')) {\n cueTime = timestamp.slice(6);\n } else if (startsWith(timestamp, 'MPEGTS:')) {\n timestampMapMPEGTS = parseInt(timestamp.slice(7));\n }\n });\n try {\n // Convert cue time to seconds\n timestampMapLOCAL = cueString2millis(cueTime) / 1000;\n } catch (error) {\n parsingError = error;\n }\n // Return without parsing X-TIMESTAMP-MAP line.\n return;\n } else if (line === '') {\n inHeader = false;\n }\n }\n // Parse line by default.\n parser.parse(line + '\\n');\n });\n parser.flush();\n}\n\nconst IMSC1_CODEC = 'stpp.ttml.im1t';\n\n// Time format: h:m:s:frames(.subframes)\nconst HMSF_REGEX = /^(\\d{2,}):(\\d{2}):(\\d{2}):(\\d{2})\\.?(\\d+)?$/;\n\n// Time format: hours, minutes, seconds, milliseconds, frames, ticks\nconst TIME_UNIT_REGEX = /^(\\d*(?:\\.\\d*)?)(h|m|s|ms|f|t)$/;\nconst textAlignToLineAlign = {\n left: 'start',\n center: 'center',\n right: 'end',\n start: 'start',\n end: 'end'\n};\nfunction parseIMSC1(payload, initPTS, callBack, errorCallBack) {\n const results = findBox(new Uint8Array(payload), ['mdat']);\n if (results.length === 0) {\n errorCallBack(new Error('Could not parse IMSC1 mdat'));\n return;\n }\n const ttmlList = results.map(mdat => utf8ArrayToStr(mdat));\n const syncTime = toTimescaleFromScale(initPTS.baseTime, 1, initPTS.timescale);\n try {\n ttmlList.forEach(ttml => callBack(parseTTML(ttml, syncTime)));\n } catch (error) {\n errorCallBack(error);\n }\n}\nfunction parseTTML(ttml, syncTime) {\n const parser = new DOMParser();\n const xmlDoc = parser.parseFromString(ttml, 'text/xml');\n const tt = xmlDoc.getElementsByTagName('tt')[0];\n if (!tt) {\n throw new Error('Invalid ttml');\n }\n const defaultRateInfo = {\n frameRate: 30,\n subFrameRate: 1,\n frameRateMultiplier: 0,\n tickRate: 0\n };\n const rateInfo = Object.keys(defaultRateInfo).reduce((result, key) => {\n result[key] = tt.getAttribute(`ttp:${key}`) || defaultRateInfo[key];\n return result;\n }, {});\n const trim = tt.getAttribute('xml:space') !== 'preserve';\n const styleElements = collectionToDictionary(getElementCollection(tt, 'styling', 'style'));\n const regionElements = collectionToDictionary(getElementCollection(tt, 'layout', 'region'));\n const cueElements = getElementCollection(tt, 'body', '[begin]');\n return [].map.call(cueElements, cueElement => {\n const cueText = getTextContent(cueElement, trim);\n if (!cueText || !cueElement.hasAttribute('begin')) {\n return null;\n }\n const startTime = parseTtmlTime(cueElement.getAttribute('begin'), rateInfo);\n const duration = parseTtmlTime(cueElement.getAttribute('dur'), rateInfo);\n let endTime = parseTtmlTime(cueElement.getAttribute('end'), rateInfo);\n if (startTime === null) {\n throw timestampParsingError(cueElement);\n }\n if (endTime === null) {\n if (duration === null) {\n throw timestampParsingError(cueElement);\n }\n endTime = startTime + duration;\n }\n const cue = new VTTCue(startTime - syncTime, endTime - syncTime, cueText);\n cue.id = generateCueId(cue.startTime, cue.endTime, cue.text);\n const region = regionElements[cueElement.getAttribute('region')];\n const style = styleElements[cueElement.getAttribute('style')];\n\n // Apply styles to cue\n const styles = getTtmlStyles(region, style, styleElements);\n const {\n textAlign\n } = styles;\n if (textAlign) {\n // cue.positionAlign not settable in FF~2016\n const lineAlign = textAlignToLineAlign[textAlign];\n if (lineAlign) {\n cue.lineAlign = lineAlign;\n }\n cue.align = textAlign;\n }\n _extends(cue, styles);\n return cue;\n }).filter(cue => cue !== null);\n}\nfunction getElementCollection(fromElement, parentName, childName) {\n const parent = fromElement.getElementsByTagName(parentName)[0];\n if (parent) {\n return [].slice.call(parent.querySelectorAll(childName));\n }\n return [];\n}\nfunction collectionToDictionary(elementsWithId) {\n return elementsWithId.reduce((dict, element) => {\n const id = element.getAttribute('xml:id');\n if (id) {\n dict[id] = element;\n }\n return dict;\n }, {});\n}\nfunction getTextContent(element, trim) {\n return [].slice.call(element.childNodes).reduce((str, node, i) => {\n var _node$childNodes;\n if (node.nodeName === 'br' && i) {\n return str + '\\n';\n }\n if ((_node$childNodes = node.childNodes) != null && _node$childNodes.length) {\n return getTextContent(node, trim);\n } else if (trim) {\n return str + node.textContent.trim().replace(/\\s+/g, ' ');\n }\n return str + node.textContent;\n }, '');\n}\nfunction getTtmlStyles(region, style, styleElements) {\n const ttsNs = 'http://www.w3.org/ns/ttml#styling';\n let regionStyle = null;\n const styleAttributes = ['displayAlign', 'textAlign', 'color', 'backgroundColor', 'fontSize', 'fontFamily'\n // 'fontWeight',\n // 'lineHeight',\n // 'wrapOption',\n // 'fontStyle',\n // 'direction',\n // 'writingMode'\n ];\n const regionStyleName = region != null && region.hasAttribute('style') ? region.getAttribute('style') : null;\n if (regionStyleName && styleElements.hasOwnProperty(regionStyleName)) {\n regionStyle = styleElements[regionStyleName];\n }\n return styleAttributes.reduce((styles, name) => {\n const value = getAttributeNS(style, ttsNs, name) || getAttributeNS(region, ttsNs, name) || getAttributeNS(regionStyle, ttsNs, name);\n if (value) {\n styles[name] = value;\n }\n return styles;\n }, {});\n}\nfunction getAttributeNS(element, ns, name) {\n if (!element) {\n return null;\n }\n return element.hasAttributeNS(ns, name) ? element.getAttributeNS(ns, name) : null;\n}\nfunction timestampParsingError(node) {\n return new Error(`Could not parse ttml timestamp ${node}`);\n}\nfunction parseTtmlTime(timeAttributeValue, rateInfo) {\n if (!timeAttributeValue) {\n return null;\n }\n let seconds = parseTimeStamp(timeAttributeValue);\n if (seconds === null) {\n if (HMSF_REGEX.test(timeAttributeValue)) {\n seconds = parseHoursMinutesSecondsFrames(timeAttributeValue, rateInfo);\n } else if (TIME_UNIT_REGEX.test(timeAttributeValue)) {\n seconds = parseTimeUnits(timeAttributeValue, rateInfo);\n }\n }\n return seconds;\n}\nfunction parseHoursMinutesSecondsFrames(timeAttributeValue, rateInfo) {\n const m = HMSF_REGEX.exec(timeAttributeValue);\n const frames = (m[4] | 0) + (m[5] | 0) / rateInfo.subFrameRate;\n return (m[1] | 0) * 3600 + (m[2] | 0) * 60 + (m[3] | 0) + frames / rateInfo.frameRate;\n}\nfunction parseTimeUnits(timeAttributeValue, rateInfo) {\n const m = TIME_UNIT_REGEX.exec(timeAttributeValue);\n const value = Number(m[1]);\n const unit = m[2];\n switch (unit) {\n case 'h':\n return value * 3600;\n case 'm':\n return value * 60;\n case 'ms':\n return value * 1000;\n case 'f':\n return value / rateInfo.frameRate;\n case 't':\n return value / rateInfo.tickRate;\n }\n return value;\n}\n\nclass OutputFilter {\n constructor(timelineController, trackName) {\n this.timelineController = void 0;\n this.cueRanges = [];\n this.trackName = void 0;\n this.startTime = null;\n this.endTime = null;\n this.screen = null;\n this.timelineController = timelineController;\n this.trackName = trackName;\n }\n dispatchCue() {\n if (this.startTime === null) {\n return;\n }\n this.timelineController.addCues(this.trackName, this.startTime, this.endTime, this.screen, this.cueRanges);\n this.startTime = null;\n }\n newCue(startTime, endTime, screen) {\n if (this.startTime === null || this.startTime > startTime) {\n this.startTime = startTime;\n }\n this.endTime = endTime;\n this.screen = screen;\n this.timelineController.createCaptionsTrack(this.trackName);\n }\n reset() {\n this.cueRanges = [];\n this.startTime = null;\n }\n}\n\nclass TimelineController {\n constructor(hls) {\n this.hls = void 0;\n this.media = null;\n this.config = void 0;\n this.enabled = true;\n this.Cues = void 0;\n this.textTracks = [];\n this.tracks = [];\n this.initPTS = [];\n this.unparsedVttFrags = [];\n this.captionsTracks = {};\n this.nonNativeCaptionsTracks = {};\n this.cea608Parser1 = void 0;\n this.cea608Parser2 = void 0;\n this.lastCc = -1;\n // Last video (CEA-608) fragment CC\n this.lastSn = -1;\n // Last video (CEA-608) fragment MSN\n this.lastPartIndex = -1;\n // Last video (CEA-608) fragment Part Index\n this.prevCC = -1;\n // Last subtitle fragment CC\n this.vttCCs = newVTTCCs();\n this.captionsProperties = void 0;\n this.hls = hls;\n this.config = hls.config;\n this.Cues = hls.config.cueHandler;\n this.captionsProperties = {\n textTrack1: {\n label: this.config.captionsTextTrack1Label,\n languageCode: this.config.captionsTextTrack1LanguageCode\n },\n textTrack2: {\n label: this.config.captionsTextTrack2Label,\n languageCode: this.config.captionsTextTrack2LanguageCode\n },\n textTrack3: {\n label: this.config.captionsTextTrack3Label,\n languageCode: this.config.captionsTextTrack3LanguageCode\n },\n textTrack4: {\n label: this.config.captionsTextTrack4Label,\n languageCode: this.config.captionsTextTrack4LanguageCode\n }\n };\n hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n hls.on(Events.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this);\n hls.on(Events.FRAG_LOADING, this.onFragLoading, this);\n hls.on(Events.FRAG_LOADED, this.onFragLoaded, this);\n hls.on(Events.FRAG_PARSING_USERDATA, this.onFragParsingUserdata, this);\n hls.on(Events.FRAG_DECRYPTED, this.onFragDecrypted, this);\n hls.on(Events.INIT_PTS_FOUND, this.onInitPtsFound, this);\n hls.on(Events.SUBTITLE_TRACKS_CLEARED, this.onSubtitleTracksCleared, this);\n hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n }\n destroy() {\n const {\n hls\n } = this;\n hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n hls.off(Events.SUBTITLE_TRACKS_UPDATED, this.onSubtitleTracksUpdated, this);\n hls.off(Events.FRAG_LOADING, this.onFragLoading, this);\n hls.off(Events.FRAG_LOADED, this.onFragLoaded, this);\n hls.off(Events.FRAG_PARSING_USERDATA, this.onFragParsingUserdata, this);\n hls.off(Events.FRAG_DECRYPTED, this.onFragDecrypted, this);\n hls.off(Events.INIT_PTS_FOUND, this.onInitPtsFound, this);\n hls.off(Events.SUBTITLE_TRACKS_CLEARED, this.onSubtitleTracksCleared, this);\n hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n // @ts-ignore\n this.hls = this.config = this.media = null;\n this.cea608Parser1 = this.cea608Parser2 = undefined;\n }\n initCea608Parsers() {\n const channel1 = new OutputFilter(this, 'textTrack1');\n const channel2 = new OutputFilter(this, 'textTrack2');\n const channel3 = new OutputFilter(this, 'textTrack3');\n const channel4 = new OutputFilter(this, 'textTrack4');\n this.cea608Parser1 = new Cea608Parser(1, channel1, channel2);\n this.cea608Parser2 = new Cea608Parser(3, channel3, channel4);\n }\n addCues(trackName, startTime, endTime, screen, cueRanges) {\n // skip cues which overlap more than 50% with previously parsed time ranges\n let merged = false;\n for (let i = cueRanges.length; i--;) {\n const cueRange = cueRanges[i];\n const overlap = intersection(cueRange[0], cueRange[1], startTime, endTime);\n if (overlap >= 0) {\n cueRange[0] = Math.min(cueRange[0], startTime);\n cueRange[1] = Math.max(cueRange[1], endTime);\n merged = true;\n if (overlap / (endTime - startTime) > 0.5) {\n return;\n }\n }\n }\n if (!merged) {\n cueRanges.push([startTime, endTime]);\n }\n if (this.config.renderTextTracksNatively) {\n const track = this.captionsTracks[trackName];\n this.Cues.newCue(track, startTime, endTime, screen);\n } else {\n const cues = this.Cues.newCue(null, startTime, endTime, screen);\n this.hls.trigger(Events.CUES_PARSED, {\n type: 'captions',\n cues,\n track: trackName\n });\n }\n }\n\n // Triggered when an initial PTS is found; used for synchronisation of WebVTT.\n onInitPtsFound(event, {\n frag,\n id,\n initPTS,\n timescale,\n trackId\n }) {\n const {\n unparsedVttFrags\n } = this;\n if (id === PlaylistLevelType.MAIN) {\n this.initPTS[frag.cc] = {\n baseTime: initPTS,\n timescale,\n trackId\n };\n }\n\n // Due to asynchronous processing, initial PTS may arrive later than the first VTT fragments are loaded.\n // Parse any unparsed fragments upon receiving the initial PTS.\n if (unparsedVttFrags.length) {\n this.unparsedVttFrags = [];\n unparsedVttFrags.forEach(data => {\n if (this.initPTS[data.frag.cc]) {\n this.onFragLoaded(Events.FRAG_LOADED, data);\n } else {\n this.hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n success: false,\n frag: data.frag,\n error: new Error('Subtitle discontinuity domain does not match main')\n });\n }\n });\n }\n }\n getExistingTrack(label, language) {\n const {\n media\n } = this;\n if (media) {\n for (let i = 0; i < media.textTracks.length; i++) {\n const textTrack = media.textTracks[i];\n if (canReuseVttTextTrack(textTrack, {\n name: label,\n lang: language,\n characteristics: 'transcribes-spoken-dialog,describes-music-and-sound'})) {\n return textTrack;\n }\n }\n }\n return null;\n }\n createCaptionsTrack(trackName) {\n if (this.config.renderTextTracksNatively) {\n this.createNativeTrack(trackName);\n } else {\n this.createNonNativeTrack(trackName);\n }\n }\n createNativeTrack(trackName) {\n if (this.captionsTracks[trackName]) {\n return;\n }\n const {\n captionsProperties,\n captionsTracks,\n media\n } = this;\n const {\n label,\n languageCode\n } = captionsProperties[trackName];\n // Enable reuse of existing text track.\n const existingTrack = this.getExistingTrack(label, languageCode);\n if (!existingTrack) {\n const textTrack = this.createTextTrack('captions', label, languageCode);\n if (textTrack) {\n // Set a special property on the track so we know it's managed by Hls.js\n textTrack[trackName] = true;\n captionsTracks[trackName] = textTrack;\n }\n } else {\n captionsTracks[trackName] = existingTrack;\n clearCurrentCues(captionsTracks[trackName]);\n sendAddTrackEvent(captionsTracks[trackName], media);\n }\n }\n createNonNativeTrack(trackName) {\n if (this.nonNativeCaptionsTracks[trackName]) {\n return;\n }\n // Create a list of a single track for the provider to consume\n const trackProperties = this.captionsProperties[trackName];\n if (!trackProperties) {\n return;\n }\n const label = trackProperties.label;\n const track = {\n _id: trackName,\n label,\n kind: 'captions',\n default: trackProperties.media ? !!trackProperties.media.default : false,\n closedCaptions: trackProperties.media\n };\n this.nonNativeCaptionsTracks[trackName] = track;\n this.hls.trigger(Events.NON_NATIVE_TEXT_TRACKS_FOUND, {\n tracks: [track]\n });\n }\n createTextTrack(kind, label, lang) {\n const media = this.media;\n if (!media) {\n return;\n }\n return media.addTextTrack(kind, label, lang);\n }\n onMediaAttaching(event, data) {\n this.media = data.media;\n if (!data.mediaSource) {\n this._cleanTracks();\n }\n }\n onMediaDetaching(event, data) {\n const transferringMedia = !!data.transferMedia;\n this.media = null;\n if (transferringMedia) {\n return;\n }\n const {\n captionsTracks\n } = this;\n Object.keys(captionsTracks).forEach(trackName => {\n clearCurrentCues(captionsTracks[trackName]);\n delete captionsTracks[trackName];\n });\n this.nonNativeCaptionsTracks = {};\n }\n onManifestLoading() {\n // Detect discontinuity in video fragment (CEA-608) parsing\n this.lastCc = -1;\n this.lastSn = -1;\n this.lastPartIndex = -1;\n // Detect discontinuity in subtitle manifests\n this.prevCC = -1;\n this.vttCCs = newVTTCCs();\n // Reset tracks\n this._cleanTracks();\n this.tracks = [];\n this.captionsTracks = {};\n this.nonNativeCaptionsTracks = {};\n this.textTracks = [];\n this.unparsedVttFrags = [];\n this.initPTS = [];\n if (this.cea608Parser1 && this.cea608Parser2) {\n this.cea608Parser1.reset();\n this.cea608Parser2.reset();\n }\n }\n _cleanTracks() {\n // clear outdated subtitles\n const {\n media\n } = this;\n if (!media) {\n return;\n }\n const textTracks = media.textTracks;\n if (textTracks) {\n for (let i = 0; i < textTracks.length; i++) {\n clearCurrentCues(textTracks[i]);\n }\n }\n }\n onSubtitleTracksUpdated(event, data) {\n const tracks = data.subtitleTracks || [];\n const hasIMSC1 = tracks.some(track => track.textCodec === IMSC1_CODEC);\n if (this.config.enableWebVTT || hasIMSC1 && this.config.enableIMSC1) {\n const listIsIdentical = subtitleOptionsIdentical(this.tracks, tracks);\n if (listIsIdentical) {\n this.tracks = tracks;\n return;\n }\n this.textTracks = [];\n this.tracks = tracks;\n if (this.config.renderTextTracksNatively) {\n const media = this.media;\n const inUseTracks = media ? filterSubtitleTracks(media.textTracks) : null;\n this.tracks.forEach((track, index) => {\n // Reuse tracks with the same label and lang, but do not reuse 608/708 tracks\n let textTrack;\n if (inUseTracks) {\n let inUseTrack = null;\n for (let i = 0; i < inUseTracks.length; i++) {\n if (inUseTracks[i] && canReuseVttTextTrack(inUseTracks[i], track)) {\n inUseTrack = inUseTracks[i];\n inUseTracks[i] = null;\n break;\n }\n }\n if (inUseTrack) {\n textTrack = inUseTrack;\n }\n }\n if (textTrack) {\n clearCurrentCues(textTrack);\n } else {\n const textTrackKind = captionsOrSubtitlesFromCharacteristics(track);\n textTrack = this.createTextTrack(textTrackKind, track.name, track.lang);\n if (textTrack) {\n textTrack.mode = 'disabled';\n }\n }\n if (textTrack) {\n this.textTracks.push(textTrack);\n }\n });\n // Warn when video element has captions or subtitle TextTracks carried over from another source\n if (inUseTracks != null && inUseTracks.length) {\n const unusedTextTracks = inUseTracks.filter(t => t !== null).map(t => t.label);\n if (unusedTextTracks.length) {\n this.hls.logger.warn(`Media element contains unused subtitle tracks: ${unusedTextTracks.join(', ')}. Replace media element for each source to clear TextTracks and captions menu.`);\n }\n }\n } else if (this.tracks.length) {\n // Create a list of tracks for the provider to consume\n const tracksList = this.tracks.map(track => {\n return {\n label: track.name,\n kind: track.type.toLowerCase(),\n default: track.default,\n subtitleTrack: track\n };\n });\n this.hls.trigger(Events.NON_NATIVE_TEXT_TRACKS_FOUND, {\n tracks: tracksList\n });\n }\n }\n }\n onManifestLoaded(event, data) {\n if (this.config.enableCEA708Captions && data.captions) {\n data.captions.forEach(captionsTrack => {\n const instreamIdMatch = /(?:CC|SERVICE)([1-4])/.exec(captionsTrack.instreamId);\n if (!instreamIdMatch) {\n return;\n }\n const trackName = `textTrack${instreamIdMatch[1]}`;\n const trackProperties = this.captionsProperties[trackName];\n if (!trackProperties) {\n return;\n }\n trackProperties.label = captionsTrack.name;\n if (captionsTrack.lang) {\n // optional attribute\n trackProperties.languageCode = captionsTrack.lang;\n }\n trackProperties.media = captionsTrack;\n });\n }\n }\n closedCaptionsForLevel(frag) {\n const level = this.hls.levels[frag.level];\n return level == null ? void 0 : level.attrs['CLOSED-CAPTIONS'];\n }\n onFragLoading(event, data) {\n // if this frag isn't contiguous, clear the parser so cues with bad start/end times aren't added to the textTrack\n if (this.enabled && data.frag.type === PlaylistLevelType.MAIN) {\n var _data$part$index, _data$part;\n const {\n cea608Parser1,\n cea608Parser2,\n lastSn\n } = this;\n const {\n cc,\n sn\n } = data.frag;\n const partIndex = (_data$part$index = (_data$part = data.part) == null ? void 0 : _data$part.index) != null ? _data$part$index : -1;\n if (cea608Parser1 && cea608Parser2) {\n if (sn !== lastSn + 1 || sn === lastSn && partIndex !== this.lastPartIndex + 1 || cc !== this.lastCc) {\n cea608Parser1.reset();\n cea608Parser2.reset();\n }\n }\n this.lastCc = cc;\n this.lastSn = sn;\n this.lastPartIndex = partIndex;\n }\n }\n onFragLoaded(event, data) {\n const {\n frag,\n payload\n } = data;\n if (frag.type === PlaylistLevelType.SUBTITLE) {\n // If fragment is subtitle type, parse as WebVTT.\n if (payload.byteLength) {\n const decryptData = frag.decryptdata;\n // fragment after decryption has a stats object\n const decrypted = 'stats' in data;\n // If the subtitles are not encrypted, parse VTTs now. Otherwise, we need to wait.\n if (decryptData == null || !decryptData.encrypted || decrypted) {\n const trackPlaylistMedia = this.tracks[frag.level];\n const vttCCs = this.vttCCs;\n if (!vttCCs[frag.cc]) {\n vttCCs[frag.cc] = {\n start: frag.start,\n prevCC: this.prevCC,\n new: true\n };\n this.prevCC = frag.cc;\n }\n if (trackPlaylistMedia && trackPlaylistMedia.textCodec === IMSC1_CODEC) {\n this._parseIMSC1(frag, payload);\n } else {\n this._parseVTTs(data);\n }\n }\n } else {\n // In case there is no payload, finish unsuccessfully.\n this.hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n success: false,\n frag,\n error: new Error('Empty subtitle payload')\n });\n }\n }\n }\n _parseIMSC1(frag, payload) {\n const hls = this.hls;\n parseIMSC1(payload, this.initPTS[frag.cc], cues => {\n this._appendCues(cues, frag.level);\n hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n success: true,\n frag: frag\n });\n }, error => {\n hls.logger.log(`Failed to parse IMSC1: ${error}`);\n hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n success: false,\n frag: frag,\n error\n });\n });\n }\n _parseVTTs(data) {\n var _frag$initSegment;\n const {\n frag,\n payload\n } = data;\n // We need an initial synchronisation PTS. Store fragments as long as none has arrived\n const {\n initPTS,\n unparsedVttFrags\n } = this;\n const maxAvCC = initPTS.length - 1;\n if (!initPTS[frag.cc] && maxAvCC === -1) {\n unparsedVttFrags.push(data);\n return;\n }\n const hls = this.hls;\n // Parse the WebVTT file contents.\n const payloadWebVTT = (_frag$initSegment = frag.initSegment) != null && _frag$initSegment.data ? appendUint8Array(frag.initSegment.data, new Uint8Array(payload)).buffer : payload;\n parseWebVTT(payloadWebVTT, this.initPTS[frag.cc], this.vttCCs, frag.cc, frag.start, cues => {\n this._appendCues(cues, frag.level);\n hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n success: true,\n frag: frag\n });\n }, error => {\n const missingInitPTS = error.message === 'Missing initPTS for VTT MPEGTS';\n if (missingInitPTS) {\n unparsedVttFrags.push(data);\n } else {\n this._fallbackToIMSC1(frag, payload);\n }\n // Something went wrong while parsing. Trigger event with success false.\n hls.logger.log(`Failed to parse VTT cue: ${error}`);\n if (missingInitPTS && maxAvCC > frag.cc) {\n return;\n }\n hls.trigger(Events.SUBTITLE_FRAG_PROCESSED, {\n success: false,\n frag: frag,\n error\n });\n });\n }\n _fallbackToIMSC1(frag, payload) {\n // If textCodec is unknown, try parsing as IMSC1. Set textCodec based on the result\n const trackPlaylistMedia = this.tracks[frag.level];\n if (!trackPlaylistMedia.textCodec) {\n parseIMSC1(payload, this.initPTS[frag.cc], () => {\n trackPlaylistMedia.textCodec = IMSC1_CODEC;\n this._parseIMSC1(frag, payload);\n }, () => {\n trackPlaylistMedia.textCodec = 'wvtt';\n });\n }\n }\n _appendCues(cues, fragLevel) {\n const hls = this.hls;\n if (this.config.renderTextTracksNatively) {\n const textTrack = this.textTracks[fragLevel];\n // WebVTTParser.parse is an async method and if the currently selected text track mode is set to \"disabled\"\n // before parsing is done then don't try to access currentTrack.cues.getCueById as cues will be null\n // and trying to access getCueById method of cues will throw an exception\n // Because we check if the mode is disabled, we can force check `cues` below. They can't be null.\n if (!textTrack || textTrack.mode === 'disabled') {\n return;\n }\n cues.forEach(cue => addCueToTrack(textTrack, cue));\n } else {\n const currentTrack = this.tracks[fragLevel];\n if (!currentTrack) {\n return;\n }\n const track = currentTrack.default ? 'default' : 'subtitles' + fragLevel;\n hls.trigger(Events.CUES_PARSED, {\n type: 'subtitles',\n cues,\n track\n });\n }\n }\n onFragDecrypted(event, data) {\n const {\n frag\n } = data;\n if (frag.type === PlaylistLevelType.SUBTITLE) {\n this.onFragLoaded(Events.FRAG_LOADED, data);\n }\n }\n onSubtitleTracksCleared() {\n this.tracks = [];\n this.captionsTracks = {};\n }\n onFragParsingUserdata(event, data) {\n if (!this.enabled || !this.config.enableCEA708Captions) {\n return;\n }\n const {\n frag,\n samples\n } = data;\n if (frag.type === PlaylistLevelType.MAIN && this.closedCaptionsForLevel(frag) === 'NONE') {\n return;\n }\n // If the event contains captions (found in the bytes property), push all bytes into the parser immediately\n // It will create the proper timestamps based on the PTS value\n for (let i = 0; i < samples.length; i++) {\n const ccBytes = samples[i].bytes;\n if (ccBytes) {\n if (!this.cea608Parser1) {\n this.initCea608Parsers();\n }\n const ccdatas = this.extractCea608Data(ccBytes);\n this.cea608Parser1.addData(samples[i].pts, ccdatas[0]);\n this.cea608Parser2.addData(samples[i].pts, ccdatas[1]);\n }\n }\n }\n onBufferFlushing(event, {\n startOffset,\n endOffset,\n endOffsetSubtitles,\n type\n }) {\n const {\n media\n } = this;\n if (!media || media.currentTime < endOffset) {\n return;\n }\n // Clear 608 caption cues from the captions TextTracks when the video back buffer is flushed\n // Forward cues are never removed because we can loose streamed 608 content from recent fragments\n if (!type || type === 'video') {\n const {\n captionsTracks\n } = this;\n Object.keys(captionsTracks).forEach(trackName => removeCuesInRange(captionsTracks[trackName], startOffset, endOffset));\n }\n if (this.config.renderTextTracksNatively) {\n // Clear VTT/IMSC1 subtitle cues from the subtitle TextTracks when the back buffer is flushed\n if (startOffset === 0 && endOffsetSubtitles !== undefined) {\n const {\n textTracks\n } = this;\n Object.keys(textTracks).forEach(trackName => removeCuesInRange(textTracks[trackName], startOffset, endOffsetSubtitles));\n }\n }\n }\n extractCea608Data(byteArray) {\n const actualCCBytes = [[], []];\n const count = byteArray[0] & 0x1f;\n let position = 2;\n for (let j = 0; j < count; j++) {\n const tmpByte = byteArray[position++];\n const ccbyte1 = 0x7f & byteArray[position++];\n const ccbyte2 = 0x7f & byteArray[position++];\n if (ccbyte1 === 0 && ccbyte2 === 0) {\n continue;\n }\n const ccValid = (0x04 & tmpByte) !== 0; // Support all four channels\n if (ccValid) {\n const ccType = 0x03 & tmpByte;\n if (0x00 /* CEA608 field1*/ === ccType || 0x01 /* CEA608 field2*/ === ccType) {\n // Exclude CEA708 CC data.\n actualCCBytes[ccType].push(ccbyte1);\n actualCCBytes[ccType].push(ccbyte2);\n }\n }\n }\n return actualCCBytes;\n }\n}\nfunction captionsOrSubtitlesFromCharacteristics(track) {\n if (track.characteristics) {\n if (/transcribes-spoken-dialog/gi.test(track.characteristics) && /describes-music-and-sound/gi.test(track.characteristics)) {\n return 'captions';\n }\n }\n return 'subtitles';\n}\nfunction canReuseVttTextTrack(inUseTrack, manifestTrack) {\n return !!inUseTrack && inUseTrack.kind === captionsOrSubtitlesFromCharacteristics(manifestTrack) && subtitleTrackMatchesTextTrack(manifestTrack, inUseTrack);\n}\nfunction intersection(x1, x2, y1, y2) {\n return Math.min(x2, y2) - Math.max(x1, y1);\n}\nfunction newVTTCCs() {\n return {\n ccOffset: 0,\n presentationOffset: 0,\n 0: {\n start: 0,\n prevCC: -1,\n new: true\n }\n };\n}\n\nconst WHITESPACE_CHAR = /\\s/;\nconst Cues = {\n newCue(track, startTime, endTime, captionScreen) {\n const result = [];\n let row;\n // the type data states this is VTTCue, but it can potentially be a TextTrackCue on old browsers\n let cue;\n let indenting;\n let indent;\n let text;\n const Cue = self.VTTCue || self.TextTrackCue;\n for (let r = 0; r < captionScreen.rows.length; r++) {\n row = captionScreen.rows[r];\n indenting = true;\n indent = 0;\n text = '';\n if (!row.isEmpty()) {\n var _track$cues;\n for (let c = 0; c < row.chars.length; c++) {\n if (WHITESPACE_CHAR.test(row.chars[c].uchar) && indenting) {\n indent++;\n } else {\n text += row.chars[c].uchar;\n indenting = false;\n }\n }\n // To be used for cleaning-up orphaned roll-up captions\n row.cueStartTime = startTime;\n\n // Give a slight bump to the endTime if it's equal to startTime to avoid a SyntaxError in IE\n if (startTime === endTime) {\n endTime += 0.0001;\n }\n if (indent >= 16) {\n indent--;\n } else {\n indent++;\n }\n const cueText = fixLineBreaks(text.trim());\n const id = generateCueId(startTime, endTime, cueText);\n\n // If this cue already exists in the track do not push it\n if (!(track != null && (_track$cues = track.cues) != null && _track$cues.getCueById(id))) {\n cue = new Cue(startTime, endTime, cueText);\n cue.id = id;\n cue.line = r + 1;\n cue.align = 'left';\n // Clamp the position between 10 and 80 percent (CEA-608 PAC indent code)\n // https://dvcs.w3.org/hg/text-tracks/raw-file/default/608toVTT/608toVTT.html#positioning-in-cea-608\n // Firefox throws an exception and captions break with out of bounds 0-100 values\n cue.position = 10 + Math.min(80, Math.floor(indent * 8 / 32) * 10);\n result.push(cue);\n }\n }\n }\n if (track && result.length) {\n // Sort bottom cues in reverse order so that they render in line order when overlapping in Chrome\n result.sort((cueA, cueB) => {\n if (cueA.line === 'auto' || cueB.line === 'auto') {\n return 0;\n }\n if (cueA.line > 8 && cueB.line > 8) {\n return cueB.line - cueA.line;\n }\n return cueA.line - cueB.line;\n });\n result.forEach(cue => addCueToTrack(track, cue));\n }\n return result;\n }\n};\n\nfunction fetchSupported() {\n if (\n // @ts-ignore\n self.fetch && self.AbortController && self.ReadableStream && self.Request) {\n try {\n new self.ReadableStream({}); // eslint-disable-line no-new\n return true;\n } catch (e) {\n /* noop */\n }\n }\n return false;\n}\nconst BYTERANGE = /(\\d+)-(\\d+)\\/(\\d+)/;\nclass FetchLoader {\n constructor(config) {\n this.fetchSetup = void 0;\n this.requestTimeout = void 0;\n this.request = null;\n this.response = null;\n this.controller = void 0;\n this.context = null;\n this.config = null;\n this.callbacks = null;\n this.stats = void 0;\n this.loader = null;\n this.fetchSetup = config.fetchSetup || getRequest;\n this.controller = new self.AbortController();\n this.stats = new LoadStats();\n }\n destroy() {\n this.loader = this.callbacks = this.context = this.config = this.request = null;\n this.abortInternal();\n this.response = null;\n // @ts-ignore\n this.fetchSetup = this.controller = this.stats = null;\n }\n abortInternal() {\n if (this.controller && !this.stats.loading.end) {\n this.stats.aborted = true;\n this.controller.abort();\n }\n }\n abort() {\n var _this$callbacks;\n this.abortInternal();\n if ((_this$callbacks = this.callbacks) != null && _this$callbacks.onAbort) {\n this.callbacks.onAbort(this.stats, this.context, this.response);\n }\n }\n load(context, config, callbacks) {\n const stats = this.stats;\n if (stats.loading.start) {\n throw new Error('Loader can only be used once.');\n }\n stats.loading.start = self.performance.now();\n const initParams = getRequestParameters(context, this.controller.signal);\n const isArrayBuffer = context.responseType === 'arraybuffer';\n const LENGTH = isArrayBuffer ? 'byteLength' : 'length';\n const {\n maxTimeToFirstByteMs,\n maxLoadTimeMs\n } = config.loadPolicy;\n this.context = context;\n this.config = config;\n this.callbacks = callbacks;\n this.request = this.fetchSetup(context, initParams);\n self.clearTimeout(this.requestTimeout);\n config.timeout = maxTimeToFirstByteMs && isFiniteNumber(maxTimeToFirstByteMs) ? maxTimeToFirstByteMs : maxLoadTimeMs;\n this.requestTimeout = self.setTimeout(() => {\n if (this.callbacks) {\n this.abortInternal();\n this.callbacks.onTimeout(stats, context, this.response);\n }\n }, config.timeout);\n const fetchPromise = isPromise(this.request) ? this.request.then(self.fetch) : self.fetch(this.request);\n fetchPromise.then(response => {\n var _this$callbacks2;\n this.response = this.loader = response;\n const first = Math.max(self.performance.now(), stats.loading.start);\n self.clearTimeout(this.requestTimeout);\n config.timeout = maxLoadTimeMs;\n this.requestTimeout = self.setTimeout(() => {\n if (this.callbacks) {\n this.abortInternal();\n this.callbacks.onTimeout(stats, context, this.response);\n }\n }, maxLoadTimeMs - (first - stats.loading.start));\n if (!response.ok) {\n const {\n status,\n statusText\n } = response;\n throw new FetchError(statusText || 'fetch, bad network response', status, response);\n }\n stats.loading.first = first;\n stats.total = getContentLength(response.headers) || stats.total;\n const onProgress = (_this$callbacks2 = this.callbacks) == null ? void 0 : _this$callbacks2.onProgress;\n if (onProgress && isFiniteNumber(config.highWaterMark)) {\n return this.loadProgressively(response, stats, context, config.highWaterMark, onProgress);\n }\n if (isArrayBuffer) {\n return response.arrayBuffer();\n }\n if (context.responseType === 'json') {\n return response.json();\n }\n return response.text();\n }).then(responseData => {\n var _this$callbacks3, _this$callbacks4;\n const response = this.response;\n if (!response) {\n throw new Error('loader destroyed');\n }\n self.clearTimeout(this.requestTimeout);\n stats.loading.end = Math.max(self.performance.now(), stats.loading.first);\n const total = responseData[LENGTH];\n if (total) {\n stats.loaded = stats.total = total;\n }\n const loaderResponse = {\n url: response.url,\n data: responseData,\n code: response.status\n };\n const onProgress = (_this$callbacks3 = this.callbacks) == null ? void 0 : _this$callbacks3.onProgress;\n if (onProgress && !isFiniteNumber(config.highWaterMark)) {\n onProgress(stats, context, responseData, response);\n }\n (_this$callbacks4 = this.callbacks) == null || _this$callbacks4.onSuccess(loaderResponse, stats, context, response);\n }).catch(error => {\n var _this$callbacks5;\n self.clearTimeout(this.requestTimeout);\n if (stats.aborted) {\n return;\n }\n // CORS errors result in an undefined code. Set it to 0 here to align with XHR's behavior\n // when destroying, 'error' itself can be undefined\n const code = !error ? 0 : error.code || 0;\n const text = !error ? null : error.message;\n (_this$callbacks5 = this.callbacks) == null || _this$callbacks5.onError({\n code,\n text\n }, context, error ? error.details : null, stats);\n });\n }\n getCacheAge() {\n let result = null;\n if (this.response) {\n const ageHeader = this.response.headers.get('age');\n result = ageHeader ? parseFloat(ageHeader) : null;\n }\n return result;\n }\n getResponseHeader(name) {\n return this.response ? this.response.headers.get(name) : null;\n }\n loadProgressively(response, stats, context, highWaterMark = 0, onProgress) {\n const chunkCache = new ChunkCache();\n const reader = response.body.getReader();\n const pump = () => {\n return reader.read().then(data => {\n if (data.done) {\n if (chunkCache.dataLength) {\n onProgress(stats, context, chunkCache.flush().buffer, response);\n }\n return Promise.resolve(new ArrayBuffer(0));\n }\n const chunk = data.value;\n const len = chunk.length;\n stats.loaded += len;\n if (len < highWaterMark || chunkCache.dataLength) {\n // The current chunk is too small to to be emitted or the cache already has data\n // Push it to the cache\n chunkCache.push(chunk);\n if (chunkCache.dataLength >= highWaterMark) {\n // flush in order to join the typed arrays\n onProgress(stats, context, chunkCache.flush().buffer, response);\n }\n } else {\n // If there's nothing cached already, and the chache is large enough\n // just emit the progress event\n onProgress(stats, context, chunk.buffer, response);\n }\n return pump();\n }).catch(() => {\n /* aborted */\n return Promise.reject();\n });\n };\n return pump();\n }\n}\nfunction getRequestParameters(context, signal) {\n const initParams = {\n method: 'GET',\n mode: 'cors',\n credentials: 'same-origin',\n signal,\n headers: new self.Headers(_extends({}, context.headers))\n };\n if (context.rangeEnd) {\n initParams.headers.set('Range', 'bytes=' + context.rangeStart + '-' + String(context.rangeEnd - 1));\n }\n return initParams;\n}\nfunction getByteRangeLength(byteRangeHeader) {\n const result = BYTERANGE.exec(byteRangeHeader);\n if (result) {\n return parseInt(result[2]) - parseInt(result[1]) + 1;\n }\n}\nfunction getContentLength(headers) {\n const contentRange = headers.get('Content-Range');\n if (contentRange) {\n const byteRangeLength = getByteRangeLength(contentRange);\n if (isFiniteNumber(byteRangeLength)) {\n return byteRangeLength;\n }\n }\n const contentLength = headers.get('Content-Length');\n if (contentLength) {\n return parseInt(contentLength);\n }\n}\nfunction getRequest(context, initParams) {\n return new self.Request(context.url, initParams);\n}\nclass FetchError extends Error {\n constructor(message, code, details) {\n super(message);\n this.code = void 0;\n this.details = void 0;\n this.code = code;\n this.details = details;\n }\n}\n\nconst AGE_HEADER_LINE_REGEX = /^age:\\s*[\\d.]+\\s*$/im;\nclass XhrLoader {\n constructor(config) {\n this.xhrSetup = void 0;\n this.requestTimeout = void 0;\n this.retryTimeout = void 0;\n this.retryDelay = void 0;\n this.config = null;\n this.callbacks = null;\n this.context = null;\n this.loader = null;\n this.stats = void 0;\n this.xhrSetup = config ? config.xhrSetup || null : null;\n this.stats = new LoadStats();\n this.retryDelay = 0;\n }\n destroy() {\n this.callbacks = null;\n this.abortInternal();\n this.loader = null;\n this.config = null;\n this.context = null;\n this.xhrSetup = null;\n }\n abortInternal() {\n const loader = this.loader;\n self.clearTimeout(this.requestTimeout);\n self.clearTimeout(this.retryTimeout);\n if (loader) {\n loader.onreadystatechange = null;\n loader.onprogress = null;\n if (loader.readyState !== 4) {\n this.stats.aborted = true;\n loader.abort();\n }\n }\n }\n abort() {\n var _this$callbacks;\n this.abortInternal();\n if ((_this$callbacks = this.callbacks) != null && _this$callbacks.onAbort) {\n this.callbacks.onAbort(this.stats, this.context, this.loader);\n }\n }\n load(context, config, callbacks) {\n if (this.stats.loading.start) {\n throw new Error('Loader can only be used once.');\n }\n this.stats.loading.start = self.performance.now();\n this.context = context;\n this.config = config;\n this.callbacks = callbacks;\n this.loadInternal();\n }\n loadInternal() {\n const {\n config,\n context\n } = this;\n if (!config || !context) {\n return;\n }\n const xhr = this.loader = new self.XMLHttpRequest();\n const stats = this.stats;\n stats.loading.first = 0;\n stats.loaded = 0;\n stats.aborted = false;\n const xhrSetup = this.xhrSetup;\n if (xhrSetup) {\n Promise.resolve().then(() => {\n if (this.loader !== xhr || this.stats.aborted) return;\n return xhrSetup(xhr, context.url);\n }).catch(error => {\n if (this.loader !== xhr || this.stats.aborted) return;\n xhr.open('GET', context.url, true);\n return xhrSetup(xhr, context.url);\n }).then(() => {\n if (this.loader !== xhr || this.stats.aborted) return;\n this.openAndSendXhr(xhr, context, config);\n }).catch(error => {\n var _this$callbacks2;\n // IE11 throws an exception on xhr.open if attempting to access an HTTP resource over HTTPS\n (_this$callbacks2 = this.callbacks) == null || _this$callbacks2.onError({\n code: xhr.status,\n text: error.message\n }, context, xhr, stats);\n return;\n });\n } else {\n this.openAndSendXhr(xhr, context, config);\n }\n }\n openAndSendXhr(xhr, context, config) {\n if (!xhr.readyState) {\n xhr.open('GET', context.url, true);\n }\n const headers = context.headers;\n const {\n maxTimeToFirstByteMs,\n maxLoadTimeMs\n } = config.loadPolicy;\n if (headers) {\n for (const header in headers) {\n xhr.setRequestHeader(header, headers[header]);\n }\n }\n if (context.rangeEnd) {\n xhr.setRequestHeader('Range', 'bytes=' + context.rangeStart + '-' + (context.rangeEnd - 1));\n }\n xhr.onreadystatechange = this.readystatechange.bind(this);\n xhr.onprogress = this.loadprogress.bind(this);\n xhr.responseType = context.responseType;\n // setup timeout before we perform request\n self.clearTimeout(this.requestTimeout);\n config.timeout = maxTimeToFirstByteMs && isFiniteNumber(maxTimeToFirstByteMs) ? maxTimeToFirstByteMs : maxLoadTimeMs;\n this.requestTimeout = self.setTimeout(this.loadtimeout.bind(this), config.timeout);\n xhr.send();\n }\n readystatechange() {\n const {\n context,\n loader: xhr,\n stats\n } = this;\n if (!context || !xhr) {\n return;\n }\n const readyState = xhr.readyState;\n const config = this.config;\n\n // don't proceed if xhr has been aborted\n if (stats.aborted) {\n return;\n }\n\n // >= HEADERS_RECEIVED\n if (readyState >= 2) {\n if (stats.loading.first === 0) {\n stats.loading.first = Math.max(self.performance.now(), stats.loading.start);\n // readyState >= 2 AND readyState !==4 (readyState = HEADERS_RECEIVED || LOADING) rearm timeout as xhr not finished yet\n if (config.timeout !== config.loadPolicy.maxLoadTimeMs) {\n self.clearTimeout(this.requestTimeout);\n config.timeout = config.loadPolicy.maxLoadTimeMs;\n this.requestTimeout = self.setTimeout(this.loadtimeout.bind(this), config.loadPolicy.maxLoadTimeMs - (stats.loading.first - stats.loading.start));\n }\n }\n if (readyState === 4) {\n self.clearTimeout(this.requestTimeout);\n xhr.onreadystatechange = null;\n xhr.onprogress = null;\n const status = xhr.status;\n // http status between 200 to 299 are all successful\n const useResponseText = xhr.responseType === 'text' ? xhr.responseText : null;\n if (status >= 200 && status < 300) {\n const data = useResponseText != null ? useResponseText : xhr.response;\n if (data != null) {\n var _this$callbacks3, _this$callbacks4;\n stats.loading.end = Math.max(self.performance.now(), stats.loading.first);\n const len = xhr.responseType === 'arraybuffer' ? data.byteLength : data.length;\n stats.loaded = stats.total = len;\n stats.bwEstimate = stats.total * 8000 / (stats.loading.end - stats.loading.first);\n const onProgress = (_this$callbacks3 = this.callbacks) == null ? void 0 : _this$callbacks3.onProgress;\n if (onProgress) {\n onProgress(stats, context, data, xhr);\n }\n const _response = {\n url: xhr.responseURL,\n data: data,\n code: status\n };\n (_this$callbacks4 = this.callbacks) == null || _this$callbacks4.onSuccess(_response, stats, context, xhr);\n return;\n }\n }\n\n // Handle bad status or nullish response\n const retryConfig = config.loadPolicy.errorRetry;\n const retryCount = stats.retry;\n // if max nb of retries reached or if http status between 400 and 499 (such error cannot be recovered, retrying is useless), return error\n const response = {\n url: context.url,\n data: undefined,\n code: status\n };\n if (shouldRetry(retryConfig, retryCount, false, response)) {\n this.retry(retryConfig);\n } else {\n var _this$callbacks5;\n logger.error(`${status} while loading ${context.url}`);\n (_this$callbacks5 = this.callbacks) == null || _this$callbacks5.onError({\n code: status,\n text: xhr.statusText\n }, context, xhr, stats);\n }\n }\n }\n }\n loadtimeout() {\n if (!this.config) return;\n const retryConfig = this.config.loadPolicy.timeoutRetry;\n const retryCount = this.stats.retry;\n if (shouldRetry(retryConfig, retryCount, true)) {\n this.retry(retryConfig);\n } else {\n var _this$context;\n logger.warn(`timeout while loading ${(_this$context = this.context) == null ? void 0 : _this$context.url}`);\n const callbacks = this.callbacks;\n if (callbacks) {\n this.abortInternal();\n callbacks.onTimeout(this.stats, this.context, this.loader);\n }\n }\n }\n retry(retryConfig) {\n const {\n context,\n stats\n } = this;\n this.retryDelay = getRetryDelay(retryConfig, stats.retry);\n stats.retry++;\n logger.warn(`${status ? 'HTTP Status ' + status : 'Timeout'} while loading ${context == null ? void 0 : context.url}, retrying ${stats.retry}/${retryConfig.maxNumRetry} in ${this.retryDelay}ms`);\n // abort and reset internal state\n this.abortInternal();\n this.loader = null;\n // schedule retry\n self.clearTimeout(this.retryTimeout);\n this.retryTimeout = self.setTimeout(this.loadInternal.bind(this), this.retryDelay);\n }\n loadprogress(event) {\n const stats = this.stats;\n stats.loaded = event.loaded;\n if (event.lengthComputable) {\n stats.total = event.total;\n }\n }\n getCacheAge() {\n let result = null;\n if (this.loader && AGE_HEADER_LINE_REGEX.test(this.loader.getAllResponseHeaders())) {\n const ageHeader = this.loader.getResponseHeader('age');\n result = ageHeader ? parseFloat(ageHeader) : null;\n }\n return result;\n }\n getResponseHeader(name) {\n if (this.loader && new RegExp(`^${name}:\\\\s*[\\\\d.]+\\\\s*$`, 'im').test(this.loader.getAllResponseHeaders())) {\n return this.loader.getResponseHeader(name);\n }\n return null;\n }\n}\n\n/**\n * @deprecated use fragLoadPolicy.default\n */\n\n/**\n * @deprecated use manifestLoadPolicy.default and playlistLoadPolicy.default\n */\n\nconst defaultLoadPolicy = {\n maxTimeToFirstByteMs: 8000,\n maxLoadTimeMs: 20000,\n timeoutRetry: null,\n errorRetry: null\n};\n\n/**\n * @ignore\n * If possible, keep hlsDefaultConfig shallow\n * It is cloned whenever a new Hls instance is created, by keeping the config\n * shallow the properties are cloned, and we don't end up manipulating the default\n */\nconst hlsDefaultConfig = _objectSpread2(_objectSpread2({\n autoStartLoad: true,\n // used by stream-controller\n startPosition: -1,\n // used by stream-controller\n defaultAudioCodec: undefined,\n // used by stream-controller\n debug: false,\n // used by logger\n capLevelOnFPSDrop: false,\n // used by fps-controller\n capLevelToPlayerSize: false,\n // used by cap-level-controller\n ignoreDevicePixelRatio: false,\n // used by cap-level-controller\n maxDevicePixelRatio: Number.POSITIVE_INFINITY,\n // used by cap-level-controller\n preferManagedMediaSource: true,\n initialLiveManifestSize: 1,\n // used by stream-controller\n maxBufferLength: 30,\n // used by stream-controller\n backBufferLength: Infinity,\n // used by buffer-controller\n frontBufferFlushThreshold: Infinity,\n startOnSegmentBoundary: false,\n // used by stream-controller\n maxBufferSize: 60 * 1000 * 1000,\n // used by stream-controller\n maxFragLookUpTolerance: 0.25,\n // used by stream-controller\n maxBufferHole: 0.1,\n // used by stream-controller and gap-controller\n detectStallWithCurrentTimeMs: 1250,\n // used by gap-controller\n highBufferWatchdogPeriod: 2,\n // used by gap-controller\n nudgeOffset: 0.1,\n // used by gap-controller\n nudgeMaxRetry: 3,\n // used by gap-controller\n nudgeOnVideoHole: true,\n // used by gap-controller\n liveSyncMode: 'edge',\n // used by stream-controller\n liveSyncDurationCount: 3,\n // used by latency-controller\n liveSyncOnStallIncrease: 1,\n // used by latency-controller\n liveMaxLatencyDurationCount: Infinity,\n // used by latency-controller\n liveSyncDuration: undefined,\n // used by latency-controller\n liveMaxLatencyDuration: undefined,\n // used by latency-controller\n maxLiveSyncPlaybackRate: 1,\n // used by latency-controller\n liveDurationInfinity: false,\n // used by buffer-controller\n /**\n * @deprecated use backBufferLength\n */\n liveBackBufferLength: null,\n // used by buffer-controller\n maxMaxBufferLength: 600,\n // used by stream-controller\n enableWorker: true,\n // used by transmuxer\n workerPath: null,\n // used by transmuxer\n enableSoftwareAES: true,\n // used by decrypter\n startLevel: undefined,\n // used by level-controller\n startFragPrefetch: false,\n // used by stream-controller\n fpsDroppedMonitoringPeriod: 5000,\n // used by fps-controller\n fpsDroppedMonitoringThreshold: 0.2,\n // used by fps-controller\n appendErrorMaxRetry: 3,\n // used by buffer-controller\n ignorePlaylistParsingErrors: false,\n loader: XhrLoader,\n // loader: FetchLoader,\n fLoader: undefined,\n // used by fragment-loader\n pLoader: undefined,\n // used by playlist-loader\n xhrSetup: undefined,\n // used by xhr-loader\n licenseXhrSetup: undefined,\n // used by eme-controller\n licenseResponseCallback: undefined,\n // used by eme-controller\n abrController: AbrController,\n bufferController: BufferController,\n capLevelController: CapLevelController,\n errorController: ErrorController,\n fpsController: FPSController,\n stretchShortVideoTrack: false,\n // used by mp4-remuxer\n maxAudioFramesDrift: 1,\n // used by mp4-remuxer\n forceKeyFrameOnDiscontinuity: true,\n // used by ts-demuxer\n abrEwmaFastLive: 3,\n // used by abr-controller\n abrEwmaSlowLive: 9,\n // used by abr-controller\n abrEwmaFastVoD: 3,\n // used by abr-controller\n abrEwmaSlowVoD: 9,\n // used by abr-controller\n abrEwmaDefaultEstimate: 5e5,\n // 500 kbps // used by abr-controller\n abrEwmaDefaultEstimateMax: 5e6,\n // 5 mbps\n abrBandWidthFactor: 0.95,\n // used by abr-controller\n abrBandWidthUpFactor: 0.7,\n // used by abr-controller\n abrMaxWithRealBitrate: false,\n // used by abr-controller\n maxStarvationDelay: 4,\n // used by abr-controller\n maxLoadingDelay: 4,\n // used by abr-controller\n minAutoBitrate: 0,\n // used by hls\n emeEnabled: false,\n // used by eme-controller\n widevineLicenseUrl: undefined,\n // used by eme-controller\n drmSystems: {},\n // used by eme-controller\n drmSystemOptions: {},\n // used by eme-controller\n requestMediaKeySystemAccessFunc: requestMediaKeySystemAccess ,\n // used by eme-controller\n requireKeySystemAccessOnStart: false,\n // used by eme-controller\n testBandwidth: true,\n progressive: false,\n lowLatencyMode: true,\n cmcd: undefined,\n enableDateRangeMetadataCues: true,\n enableEmsgMetadataCues: true,\n enableEmsgKLVMetadata: false,\n enableID3MetadataCues: true,\n enableInterstitialPlayback: true,\n interstitialAppendInPlace: true,\n interstitialLiveLookAhead: 10,\n useMediaCapabilities: true,\n preserveManualLevelOnError: false,\n certLoadPolicy: {\n default: defaultLoadPolicy\n },\n keyLoadPolicy: {\n default: {\n maxTimeToFirstByteMs: 8000,\n maxLoadTimeMs: 20000,\n timeoutRetry: {\n maxNumRetry: 1,\n retryDelayMs: 1000,\n maxRetryDelayMs: 20000,\n backoff: 'linear'\n },\n errorRetry: {\n maxNumRetry: 8,\n retryDelayMs: 1000,\n maxRetryDelayMs: 20000,\n backoff: 'linear'\n }\n }\n },\n manifestLoadPolicy: {\n default: {\n maxTimeToFirstByteMs: Infinity,\n maxLoadTimeMs: 20000,\n timeoutRetry: {\n maxNumRetry: 2,\n retryDelayMs: 0,\n maxRetryDelayMs: 0\n },\n errorRetry: {\n maxNumRetry: 1,\n retryDelayMs: 1000,\n maxRetryDelayMs: 8000\n }\n }\n },\n playlistLoadPolicy: {\n default: {\n maxTimeToFirstByteMs: 10000,\n maxLoadTimeMs: 20000,\n timeoutRetry: {\n maxNumRetry: 2,\n retryDelayMs: 0,\n maxRetryDelayMs: 0\n },\n errorRetry: {\n maxNumRetry: 2,\n retryDelayMs: 1000,\n maxRetryDelayMs: 8000\n }\n }\n },\n fragLoadPolicy: {\n default: {\n maxTimeToFirstByteMs: 10000,\n maxLoadTimeMs: 120000,\n timeoutRetry: {\n maxNumRetry: 4,\n retryDelayMs: 0,\n maxRetryDelayMs: 0\n },\n errorRetry: {\n maxNumRetry: 6,\n retryDelayMs: 1000,\n maxRetryDelayMs: 8000\n }\n }\n },\n steeringManifestLoadPolicy: {\n default: {\n maxTimeToFirstByteMs: 10000,\n maxLoadTimeMs: 20000,\n timeoutRetry: {\n maxNumRetry: 2,\n retryDelayMs: 0,\n maxRetryDelayMs: 0\n },\n errorRetry: {\n maxNumRetry: 1,\n retryDelayMs: 1000,\n maxRetryDelayMs: 8000\n }\n } \n },\n interstitialAssetListLoadPolicy: {\n default: {\n maxTimeToFirstByteMs: 10000,\n maxLoadTimeMs: 30000,\n timeoutRetry: {\n maxNumRetry: 0,\n retryDelayMs: 0,\n maxRetryDelayMs: 0\n },\n errorRetry: {\n maxNumRetry: 0,\n retryDelayMs: 1000,\n maxRetryDelayMs: 8000\n }\n } \n },\n // These default settings are deprecated in favor of the above policies\n // and are maintained for backwards compatibility\n manifestLoadingTimeOut: 10000,\n manifestLoadingMaxRetry: 1,\n manifestLoadingRetryDelay: 1000,\n manifestLoadingMaxRetryTimeout: 64000,\n levelLoadingTimeOut: 10000,\n levelLoadingMaxRetry: 4,\n levelLoadingRetryDelay: 1000,\n levelLoadingMaxRetryTimeout: 64000,\n fragLoadingTimeOut: 20000,\n fragLoadingMaxRetry: 6,\n fragLoadingRetryDelay: 1000,\n fragLoadingMaxRetryTimeout: 64000\n}, timelineConfig()), {}, {\n subtitleStreamController: SubtitleStreamController ,\n subtitleTrackController: SubtitleTrackController ,\n timelineController: TimelineController ,\n audioStreamController: AudioStreamController ,\n audioTrackController: AudioTrackController ,\n emeController: EMEController ,\n cmcdController: CMCDController ,\n contentSteeringController: ContentSteeringController ,\n interstitialsController: InterstitialsController \n});\nfunction timelineConfig() {\n return {\n cueHandler: Cues,\n // used by timeline-controller\n enableWebVTT: true,\n // used by timeline-controller\n enableIMSC1: true,\n // used by timeline-controller\n enableCEA708Captions: true,\n // used by timeline-controller\n captionsTextTrack1Label: 'English',\n // used by timeline-controller\n captionsTextTrack1LanguageCode: 'en',\n // used by timeline-controller\n captionsTextTrack2Label: 'Spanish',\n // used by timeline-controller\n captionsTextTrack2LanguageCode: 'es',\n // used by timeline-controller\n captionsTextTrack3Label: 'Unknown CC',\n // used by timeline-controller\n captionsTextTrack3LanguageCode: '',\n // used by timeline-controller\n captionsTextTrack4Label: 'Unknown CC',\n // used by timeline-controller\n captionsTextTrack4LanguageCode: '',\n // used by timeline-controller\n renderTextTracksNatively: true\n };\n}\n\n/**\n * @ignore\n */\nfunction mergeConfig(defaultConfig, userConfig, logger) {\n if ((userConfig.liveSyncDurationCount || userConfig.liveMaxLatencyDurationCount) && (userConfig.liveSyncDuration || userConfig.liveMaxLatencyDuration)) {\n throw new Error(\"Illegal hls.js config: don't mix up liveSyncDurationCount/liveMaxLatencyDurationCount and liveSyncDuration/liveMaxLatencyDuration\");\n }\n if (userConfig.liveMaxLatencyDurationCount !== undefined && (userConfig.liveSyncDurationCount === undefined || userConfig.liveMaxLatencyDurationCount <= userConfig.liveSyncDurationCount)) {\n throw new Error('Illegal hls.js config: \"liveMaxLatencyDurationCount\" must be greater than \"liveSyncDurationCount\"');\n }\n if (userConfig.liveMaxLatencyDuration !== undefined && (userConfig.liveSyncDuration === undefined || userConfig.liveMaxLatencyDuration <= userConfig.liveSyncDuration)) {\n throw new Error('Illegal hls.js config: \"liveMaxLatencyDuration\" must be greater than \"liveSyncDuration\"');\n }\n const defaultsCopy = deepCpy(defaultConfig);\n\n // Backwards compatibility with deprecated config values\n const deprecatedSettingTypes = ['manifest', 'level', 'frag'];\n const deprecatedSettings = ['TimeOut', 'MaxRetry', 'RetryDelay', 'MaxRetryTimeout'];\n deprecatedSettingTypes.forEach(type => {\n const policyName = `${type === 'level' ? 'playlist' : type}LoadPolicy`;\n const policyNotSet = userConfig[policyName] === undefined;\n const report = [];\n deprecatedSettings.forEach(setting => {\n const deprecatedSetting = `${type}Loading${setting}`;\n const value = userConfig[deprecatedSetting];\n if (value !== undefined && policyNotSet) {\n report.push(deprecatedSetting);\n const settings = defaultsCopy[policyName].default;\n userConfig[policyName] = {\n default: settings\n };\n switch (setting) {\n case 'TimeOut':\n settings.maxLoadTimeMs = value;\n settings.maxTimeToFirstByteMs = value;\n break;\n case 'MaxRetry':\n settings.errorRetry.maxNumRetry = value;\n settings.timeoutRetry.maxNumRetry = value;\n break;\n case 'RetryDelay':\n settings.errorRetry.retryDelayMs = value;\n settings.timeoutRetry.retryDelayMs = value;\n break;\n case 'MaxRetryTimeout':\n settings.errorRetry.maxRetryDelayMs = value;\n settings.timeoutRetry.maxRetryDelayMs = value;\n break;\n }\n }\n });\n if (report.length) {\n logger.warn(`hls.js config: \"${report.join('\", \"')}\" setting(s) are deprecated, use \"${policyName}\": ${stringify(userConfig[policyName])}`);\n }\n });\n return _objectSpread2(_objectSpread2({}, defaultsCopy), userConfig);\n}\nfunction deepCpy(obj) {\n if (obj && typeof obj === 'object') {\n if (Array.isArray(obj)) {\n return obj.map(deepCpy);\n }\n return Object.keys(obj).reduce((result, key) => {\n result[key] = deepCpy(obj[key]);\n return result;\n }, {});\n }\n return obj;\n}\n\n/**\n * @ignore\n */\nfunction enableStreamingMode(config, logger) {\n const currentLoader = config.loader;\n if (currentLoader !== FetchLoader && currentLoader !== XhrLoader) {\n // If a developer has configured their own loader, respect that choice\n logger.log('[config]: Custom loader detected, cannot enable progressive streaming');\n config.progressive = false;\n } else {\n const canStreamProgressively = fetchSupported();\n if (canStreamProgressively) {\n config.loader = FetchLoader;\n config.progressive = true;\n config.enableSoftwareAES = true;\n logger.log('[config]: Progressive streaming enabled, using FetchLoader');\n }\n }\n}\n\nconst MAX_START_GAP_JUMP = 2.0;\nconst SKIP_BUFFER_HOLE_STEP_SECONDS = 0.1;\nconst SKIP_BUFFER_RANGE_START = 0.05;\nconst TICK_INTERVAL$1 = 100;\nclass GapController extends TaskLoop {\n constructor(hls, fragmentTracker) {\n super('gap-controller', hls.logger);\n this.hls = void 0;\n this.fragmentTracker = void 0;\n this.media = null;\n this.mediaSource = void 0;\n this.nudgeRetry = 0;\n this.stallReported = false;\n this.stalled = null;\n this.moved = false;\n this.seeking = false;\n this.buffered = {};\n this.lastCurrentTime = 0;\n this.ended = 0;\n this.waiting = 0;\n this.onMediaPlaying = () => {\n this.ended = 0;\n this.waiting = 0;\n };\n this.onMediaWaiting = () => {\n var _this$media;\n if ((_this$media = this.media) != null && _this$media.seeking) {\n return;\n }\n this.waiting = self.performance.now();\n this.tick();\n };\n this.onMediaEnded = () => {\n if (this.hls) {\n var _this$media2;\n // ended is set when triggering MEDIA_ENDED so that we do not trigger it again on stall or on tick with media.ended\n this.ended = ((_this$media2 = this.media) == null ? void 0 : _this$media2.currentTime) || 1;\n this.hls.trigger(Events.MEDIA_ENDED, {\n stalled: false\n });\n }\n };\n this.hls = hls;\n this.fragmentTracker = fragmentTracker;\n this.registerListeners();\n }\n registerListeners() {\n const {\n hls\n } = this;\n if (hls) {\n hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.on(Events.BUFFER_APPENDED, this.onBufferAppended, this);\n }\n }\n unregisterListeners() {\n const {\n hls\n } = this;\n if (hls) {\n hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.off(Events.BUFFER_APPENDED, this.onBufferAppended, this);\n }\n }\n destroy() {\n super.destroy();\n this.unregisterListeners();\n this.media = this.hls = this.fragmentTracker = null;\n this.mediaSource = undefined;\n }\n onMediaAttached(event, data) {\n this.setInterval(TICK_INTERVAL$1);\n this.mediaSource = data.mediaSource;\n const media = this.media = data.media;\n addEventListener(media, 'playing', this.onMediaPlaying);\n addEventListener(media, 'waiting', this.onMediaWaiting);\n addEventListener(media, 'ended', this.onMediaEnded);\n }\n onMediaDetaching(event, data) {\n this.clearInterval();\n const {\n media\n } = this;\n if (media) {\n removeEventListener(media, 'playing', this.onMediaPlaying);\n removeEventListener(media, 'waiting', this.onMediaWaiting);\n removeEventListener(media, 'ended', this.onMediaEnded);\n this.media = null;\n }\n this.mediaSource = undefined;\n }\n onBufferAppended(event, data) {\n this.buffered = data.timeRanges;\n }\n get hasBuffered() {\n return Object.keys(this.buffered).length > 0;\n }\n tick() {\n var _this$media3;\n if (!((_this$media3 = this.media) != null && _this$media3.readyState) || !this.hasBuffered) {\n return;\n }\n const currentTime = this.media.currentTime;\n this.poll(currentTime, this.lastCurrentTime);\n this.lastCurrentTime = currentTime;\n }\n\n /**\n * Checks if the playhead is stuck within a gap, and if so, attempts to free it.\n * A gap is an unbuffered range between two buffered ranges (or the start and the first buffered range).\n *\n * @param lastCurrentTime - Previously read playhead position\n */\n poll(currentTime, lastCurrentTime) {\n var _this$hls, _this$hls2;\n const config = (_this$hls = this.hls) == null ? void 0 : _this$hls.config;\n if (!config) {\n return;\n }\n const media = this.media;\n if (!media) {\n return;\n }\n const {\n seeking\n } = media;\n const seeked = this.seeking && !seeking;\n const beginSeek = !this.seeking && seeking;\n const pausedEndedOrHalted = media.paused && !seeking || media.ended || media.playbackRate === 0;\n this.seeking = seeking;\n\n // The playhead is moving, no-op\n if (currentTime !== lastCurrentTime) {\n if (lastCurrentTime) {\n this.ended = 0;\n }\n this.moved = true;\n if (!seeking) {\n this.nudgeRetry = 0;\n // When crossing between buffered video time ranges, but not audio, flush pipeline with seek (Chrome)\n if (config.nudgeOnVideoHole && !pausedEndedOrHalted && currentTime > lastCurrentTime) {\n this.nudgeOnVideoHole(currentTime, lastCurrentTime);\n }\n }\n if (this.waiting === 0) {\n this.stallResolved(currentTime);\n }\n return;\n }\n\n // Clear stalled state when beginning or finishing seeking so that we don't report stalls coming out of a seek\n if (beginSeek || seeked) {\n if (seeked) {\n this.stallResolved(currentTime);\n }\n return;\n }\n\n // The playhead should not be moving\n if (pausedEndedOrHalted) {\n this.nudgeRetry = 0;\n this.stallResolved(currentTime);\n // Fire MEDIA_ENDED to workaround event not being dispatched by browser\n if (!this.ended && media.ended && this.hls) {\n this.ended = currentTime || 1;\n this.hls.trigger(Events.MEDIA_ENDED, {\n stalled: false\n });\n }\n return;\n }\n if (!BufferHelper.getBuffered(media).length) {\n this.nudgeRetry = 0;\n return;\n }\n\n // Resolve stalls at buffer holes using the main buffer, whose ranges are the intersections of the A/V sourcebuffers\n const bufferInfo = BufferHelper.bufferInfo(media, currentTime, 0);\n const nextStart = bufferInfo.nextStart || 0;\n const fragmentTracker = this.fragmentTracker;\n if (seeking && fragmentTracker && this.hls) {\n // Is there a fragment loading/parsing/appending before currentTime?\n const inFlightDependency = getInFlightDependency(this.hls.inFlightFragments, currentTime);\n\n // Waiting for seeking in a buffered range to complete\n const hasEnoughBuffer = bufferInfo.len > MAX_START_GAP_JUMP;\n // Next buffered range is too far ahead to jump to while still seeking\n const noBufferHole = !nextStart || inFlightDependency || nextStart - currentTime > MAX_START_GAP_JUMP && !fragmentTracker.getPartialFragment(currentTime);\n if (hasEnoughBuffer || noBufferHole) {\n return;\n }\n // Reset moved state when seeking to a point in or before a gap/hole\n this.moved = false;\n }\n\n // Skip start gaps if we haven't played, but the last poll detected the start of a stall\n // The addition poll gives the browser a chance to jump the gap for us\n const levelDetails = (_this$hls2 = this.hls) == null ? void 0 : _this$hls2.latestLevelDetails;\n if (!this.moved && this.stalled !== null && fragmentTracker) {\n // There is no playable buffer (seeked, waiting for buffer)\n const isBuffered = bufferInfo.len > 0;\n if (!isBuffered && !nextStart) {\n return;\n }\n // Jump start gaps within jump threshold\n const startJump = Math.max(nextStart, bufferInfo.start || 0) - currentTime;\n\n // When joining a live stream with audio tracks, account for live playlist window sliding by allowing\n // a larger jump over start gaps caused by the audio-stream-controller buffering a start fragment\n // that begins over 1 target duration after the video start position.\n const isLive = !!(levelDetails != null && levelDetails.live);\n const maxStartGapJump = isLive ? levelDetails.targetduration * 2 : MAX_START_GAP_JUMP;\n const appended = appendedFragAtPosition(currentTime, fragmentTracker);\n if (startJump > 0 && (startJump <= maxStartGapJump || appended)) {\n if (!media.paused) {\n this._trySkipBufferHole(appended);\n }\n return;\n }\n }\n\n // Start tracking stall time\n const detectStallWithCurrentTimeMs = config.detectStallWithCurrentTimeMs;\n const tnow = self.performance.now();\n const tWaiting = this.waiting;\n let stalled = this.stalled;\n if (stalled === null) {\n // Use time of recent \"waiting\" event\n if (tWaiting > 0 && tnow - tWaiting < detectStallWithCurrentTimeMs) {\n stalled = this.stalled = tWaiting;\n } else {\n this.stalled = tnow;\n return;\n }\n }\n const stalledDuration = tnow - stalled;\n if (!seeking && (stalledDuration >= detectStallWithCurrentTimeMs || tWaiting) && this.hls) {\n var _this$mediaSource;\n // Dispatch MEDIA_ENDED when media.ended/ended event is not signalled at end of stream\n if (((_this$mediaSource = this.mediaSource) == null ? void 0 : _this$mediaSource.readyState) === 'ended' && !(levelDetails != null && levelDetails.live) && Math.abs(currentTime - ((levelDetails == null ? void 0 : levelDetails.edge) || 0)) < 1) {\n if (this.ended) {\n return;\n }\n this.ended = currentTime || 1;\n this.hls.trigger(Events.MEDIA_ENDED, {\n stalled: true\n });\n return;\n }\n // Report stalling after trying to fix\n this._reportStall(bufferInfo);\n if (!this.media || !this.hls) {\n return;\n }\n }\n const bufferedWithHoles = BufferHelper.bufferInfo(media, currentTime, config.maxBufferHole);\n this._tryFixBufferStall(bufferedWithHoles, stalledDuration, currentTime);\n }\n stallResolved(currentTime) {\n const stalled = this.stalled;\n if (stalled && this.hls) {\n this.stalled = null;\n // The playhead is now moving, but was previously stalled\n if (this.stallReported) {\n const stalledDuration = self.performance.now() - stalled;\n this.log(`playback not stuck anymore @${currentTime}, after ${Math.round(stalledDuration)}ms`);\n this.stallReported = false;\n this.waiting = 0;\n this.hls.trigger(Events.STALL_RESOLVED, {});\n }\n }\n }\n nudgeOnVideoHole(currentTime, lastCurrentTime) {\n var _this$buffered$audio;\n // Chrome will play one second past a hole in video buffered time ranges without rendering any video from the subsequent range and then stall as long as audio is buffered:\n // https://github.com/video-dev/hls.js/issues/5631\n // https://issues.chromium.org/issues/40280613#comment10\n // Detect the potential for this situation and proactively seek to flush the video pipeline once the playhead passes the start of the video hole.\n // When there are audio and video buffers and currentTime is past the end of the first video buffered range...\n const videoSourceBuffered = this.buffered.video;\n if (this.hls && this.media && this.fragmentTracker && (_this$buffered$audio = this.buffered.audio) != null && _this$buffered$audio.length && videoSourceBuffered && videoSourceBuffered.length > 1 && currentTime > videoSourceBuffered.end(0)) {\n // and audio is buffered at the playhead\n const audioBufferInfo = BufferHelper.bufferedInfo(BufferHelper.timeRangesToArray(this.buffered.audio), currentTime, 0);\n if (audioBufferInfo.len > 1 && lastCurrentTime >= audioBufferInfo.start) {\n const videoTimes = BufferHelper.timeRangesToArray(videoSourceBuffered);\n const lastBufferedIndex = BufferHelper.bufferedInfo(videoTimes, lastCurrentTime, 0).bufferedIndex;\n // nudge when crossing into another video buffered range (hole).\n if (lastBufferedIndex > -1 && lastBufferedIndex < videoTimes.length - 1) {\n const bufferedIndex = BufferHelper.bufferedInfo(videoTimes, currentTime, 0).bufferedIndex;\n const holeStart = videoTimes[lastBufferedIndex].end;\n const holeEnd = videoTimes[lastBufferedIndex + 1].start;\n if ((bufferedIndex === -1 || bufferedIndex > lastBufferedIndex) && holeEnd - holeStart < 1 &&\n // `maxBufferHole` may be too small and setting it to 0 should not disable this feature\n currentTime - holeStart < 2) {\n const error = new Error(`nudging playhead to flush pipeline after video hole. currentTime: ${currentTime} hole: ${holeStart} -> ${holeEnd} buffered index: ${bufferedIndex}`);\n this.warn(error.message);\n // Magic number to flush the pipeline without interuption to audio playback:\n this.media.currentTime += 0.000001;\n let frag = appendedFragAtPosition(currentTime, this.fragmentTracker);\n if (frag && 'fragment' in frag) {\n frag = frag.fragment;\n } else if (!frag) {\n frag = undefined;\n }\n const bufferInfo = BufferHelper.bufferInfo(this.media, currentTime, 0);\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.BUFFER_SEEK_OVER_HOLE,\n fatal: false,\n error,\n reason: error.message,\n frag,\n buffer: bufferInfo.len,\n bufferInfo\n });\n }\n }\n }\n }\n }\n\n /**\n * Detects and attempts to fix known buffer stalling issues.\n * @param bufferInfo - The properties of the current buffer.\n * @param stalledDurationMs - The amount of time Hls.js has been stalling for.\n * @private\n */\n _tryFixBufferStall(bufferInfo, stalledDurationMs, currentTime) {\n var _this$hls3, _this$hls4;\n const {\n fragmentTracker,\n media\n } = this;\n const config = (_this$hls3 = this.hls) == null ? void 0 : _this$hls3.config;\n if (!media || !fragmentTracker || !config) {\n return;\n }\n const levelDetails = (_this$hls4 = this.hls) == null ? void 0 : _this$hls4.latestLevelDetails;\n const appended = appendedFragAtPosition(currentTime, fragmentTracker);\n if (appended || levelDetails != null && levelDetails.live && currentTime < levelDetails.fragmentStart) {\n // Try to skip over the buffer hole caused by a partial fragment\n // This method isn't limited by the size of the gap between buffered ranges\n const targetTime = this._trySkipBufferHole(appended);\n // we return here in this case, meaning\n // the branch below only executes when we haven't seeked to a new position\n if (targetTime || !this.media) {\n return;\n }\n }\n\n // if we haven't had to skip over a buffer hole of a partial fragment\n // we may just have to \"nudge\" the playlist as the browser decoding/rendering engine\n // needs to cross some sort of threshold covering all source-buffers content\n // to start playing properly.\n const bufferedRanges = bufferInfo.buffered;\n const adjacentTraversal = this.adjacentTraversal(bufferInfo, currentTime);\n if ((bufferedRanges && bufferedRanges.length > 1 && bufferInfo.len > config.maxBufferHole || bufferInfo.nextStart && (bufferInfo.nextStart - currentTime < config.maxBufferHole || adjacentTraversal)) && (stalledDurationMs > config.highBufferWatchdogPeriod * 1000 || this.waiting)) {\n this.warn('Trying to nudge playhead over buffer-hole');\n // Try to nudge currentTime over a buffer hole if we've been stalling for the configured amount of seconds\n // We only try to jump the hole if it's under the configured size\n this._tryNudgeBuffer(bufferInfo);\n }\n }\n adjacentTraversal(bufferInfo, currentTime) {\n const fragmentTracker = this.fragmentTracker;\n const nextStart = bufferInfo.nextStart;\n if (fragmentTracker && nextStart) {\n const current = fragmentTracker.getFragAtPos(currentTime, PlaylistLevelType.MAIN);\n const next = fragmentTracker.getFragAtPos(nextStart, PlaylistLevelType.MAIN);\n if (current && next) {\n return next.sn - current.sn < 2;\n }\n }\n return false;\n }\n\n /**\n * Triggers a BUFFER_STALLED_ERROR event, but only once per stall period.\n * @param bufferLen - The playhead distance from the end of the current buffer segment.\n * @private\n */\n _reportStall(bufferInfo) {\n const {\n hls,\n media,\n stallReported,\n stalled\n } = this;\n if (!stallReported && stalled !== null && media && hls) {\n // Report stalled error once\n this.stallReported = true;\n const error = new Error(`Playback stalling at @${media.currentTime} due to low buffer (${stringify(bufferInfo)})`);\n this.warn(error.message);\n hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.BUFFER_STALLED_ERROR,\n fatal: false,\n error,\n buffer: bufferInfo.len,\n bufferInfo,\n stalled: {\n start: stalled\n }\n });\n }\n }\n\n /**\n * Attempts to fix buffer stalls by jumping over known gaps caused by partial fragments\n * @param appended - The fragment or part found at the current time (where playback is stalling).\n * @private\n */\n _trySkipBufferHole(appended) {\n var _this$hls5;\n const {\n fragmentTracker,\n media\n } = this;\n const config = (_this$hls5 = this.hls) == null ? void 0 : _this$hls5.config;\n if (!media || !fragmentTracker || !config) {\n return 0;\n }\n\n // Check if currentTime is between unbuffered regions of partial fragments\n const currentTime = media.currentTime;\n const bufferInfo = BufferHelper.bufferInfo(media, currentTime, 0);\n const startTime = currentTime < bufferInfo.start ? bufferInfo.start : bufferInfo.nextStart;\n if (startTime && this.hls) {\n const bufferStarved = bufferInfo.len <= config.maxBufferHole;\n const waiting = bufferInfo.len > 0 && bufferInfo.len < 1 && media.readyState < 3;\n const gapLength = startTime - currentTime;\n if (gapLength > 0 && (bufferStarved || waiting)) {\n // Only allow large gaps to be skipped if it is a start gap, or all fragments in skip range are partial\n if (gapLength > config.maxBufferHole) {\n let startGap = false;\n if (currentTime === 0) {\n const startFrag = fragmentTracker.getAppendedFrag(0, PlaylistLevelType.MAIN);\n if (startFrag && startTime < startFrag.end) {\n startGap = true;\n }\n }\n if (!startGap && appended) {\n var _this$hls$loadLevelOb;\n // Do not seek when selected variant playlist is unloaded\n if (!((_this$hls$loadLevelOb = this.hls.loadLevelObj) != null && _this$hls$loadLevelOb.details)) {\n return 0;\n }\n // Do not seek when required fragments are inflight or appending\n const inFlightDependency = getInFlightDependency(this.hls.inFlightFragments, startTime);\n if (inFlightDependency) {\n return 0;\n }\n // Do not seek if we can't walk tracked fragments to end of gap\n let moreToLoad = false;\n let pos = appended.end;\n while (pos < startTime) {\n const provisioned = appendedFragAtPosition(pos, fragmentTracker);\n if (provisioned) {\n pos += provisioned.duration;\n } else {\n moreToLoad = true;\n break;\n }\n }\n if (moreToLoad) {\n return 0;\n }\n }\n }\n const targetTime = Math.max(startTime + SKIP_BUFFER_RANGE_START, currentTime + SKIP_BUFFER_HOLE_STEP_SECONDS);\n this.warn(`skipping hole, adjusting currentTime from ${currentTime} to ${targetTime}`);\n this.moved = true;\n media.currentTime = targetTime;\n if (!(appended != null && appended.gap)) {\n const error = new Error(`fragment loaded with buffer holes, seeking from ${currentTime} to ${targetTime}`);\n const errorData = {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.BUFFER_SEEK_OVER_HOLE,\n fatal: false,\n error,\n reason: error.message,\n buffer: bufferInfo.len,\n bufferInfo\n };\n if (appended) {\n if ('fragment' in appended) {\n errorData.part = appended;\n } else {\n errorData.frag = appended;\n }\n }\n this.hls.trigger(Events.ERROR, errorData);\n }\n return targetTime;\n }\n }\n return 0;\n }\n\n /**\n * Attempts to fix buffer stalls by advancing the mediaElement's current time by a small amount.\n * @private\n */\n _tryNudgeBuffer(bufferInfo) {\n const {\n hls,\n media,\n nudgeRetry\n } = this;\n const config = hls == null ? void 0 : hls.config;\n if (!media || !config) {\n return 0;\n }\n const currentTime = media.currentTime;\n this.nudgeRetry++;\n if (nudgeRetry < config.nudgeMaxRetry) {\n const targetTime = currentTime + (nudgeRetry + 1) * config.nudgeOffset;\n // playback stalled in buffered area ... let's nudge currentTime to try to overcome this\n const error = new Error(`Nudging 'currentTime' from ${currentTime} to ${targetTime}`);\n this.warn(error.message);\n media.currentTime = targetTime;\n hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.BUFFER_NUDGE_ON_STALL,\n error,\n fatal: false,\n buffer: bufferInfo.len,\n bufferInfo\n });\n } else {\n const error = new Error(`Playhead still not moving while enough data buffered @${currentTime} after ${config.nudgeMaxRetry} nudges`);\n this.error(error.message);\n hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.BUFFER_STALLED_ERROR,\n error,\n fatal: true,\n buffer: bufferInfo.len,\n bufferInfo\n });\n }\n }\n}\nfunction getInFlightDependency(inFlightFragments, currentTime) {\n const main = inFlight(inFlightFragments.main);\n if (main && main.start <= currentTime) {\n return main;\n }\n const audio = inFlight(inFlightFragments.audio);\n if (audio && audio.start <= currentTime) {\n return audio;\n }\n return null;\n}\nfunction inFlight(inFlightData) {\n if (!inFlightData) {\n return null;\n }\n switch (inFlightData.state) {\n case State.IDLE:\n case State.STOPPED:\n case State.ENDED:\n case State.ERROR:\n return null;\n }\n return inFlightData.frag;\n}\nfunction appendedFragAtPosition(pos, fragmentTracker) {\n return fragmentTracker.getAppendedFrag(pos, PlaylistLevelType.MAIN) || fragmentTracker.getPartialFragment(pos);\n}\n\nconst MIN_CUE_DURATION = 0.25;\nfunction getCueClass() {\n if (typeof self === 'undefined') return undefined;\n return self.VTTCue || self.TextTrackCue;\n}\nfunction createCueWithDataFields(Cue, startTime, endTime, data, type) {\n let cue = new Cue(startTime, endTime, '');\n try {\n cue.value = data;\n if (type) {\n cue.type = type;\n }\n } catch (e) {\n cue = new Cue(startTime, endTime, stringify(type ? _objectSpread2({\n type\n }, data) : data));\n }\n return cue;\n}\n\n// VTTCue latest draft allows an infinite duration, fallback\n// to MAX_VALUE if necessary\nconst MAX_CUE_ENDTIME = (() => {\n const Cue = getCueClass();\n try {\n Cue && new Cue(0, Number.POSITIVE_INFINITY, '');\n } catch (e) {\n return Number.MAX_VALUE;\n }\n return Number.POSITIVE_INFINITY;\n})();\nclass ID3TrackController {\n constructor(hls) {\n this.hls = void 0;\n this.id3Track = null;\n this.media = null;\n this.dateRangeCuesAppended = {};\n this.removeCues = true;\n this.assetCue = void 0;\n this.onEventCueEnter = () => {\n if (!this.hls) {\n return;\n }\n this.hls.trigger(Events.EVENT_CUE_ENTER, {});\n };\n this.hls = hls;\n this._registerListeners();\n }\n destroy() {\n this._unregisterListeners();\n this.id3Track = null;\n this.media = null;\n this.dateRangeCuesAppended = {};\n // @ts-ignore\n this.hls = this.onEventCueEnter = null;\n }\n _registerListeners() {\n const {\n hls\n } = this;\n if (hls) {\n hls.on(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.FRAG_PARSING_METADATA, this.onFragParsingMetadata, this);\n hls.on(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n hls.on(Events.LEVEL_PTS_UPDATED, this.onLevelPtsUpdated, this);\n }\n }\n _unregisterListeners() {\n const {\n hls\n } = this;\n if (hls) {\n hls.off(Events.MEDIA_ATTACHING, this.onMediaAttaching, this);\n hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.FRAG_PARSING_METADATA, this.onFragParsingMetadata, this);\n hls.off(Events.BUFFER_FLUSHING, this.onBufferFlushing, this);\n hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n hls.off(Events.LEVEL_PTS_UPDATED, this.onLevelPtsUpdated, this);\n }\n }\n // Add ID3 metatadata text track.\n onMediaAttaching(event, data) {\n var _data$overrides;\n this.media = data.media;\n if (((_data$overrides = data.overrides) == null ? void 0 : _data$overrides.cueRemoval) === false) {\n this.removeCues = false;\n }\n }\n onMediaAttached() {\n var _this$hls;\n const details = (_this$hls = this.hls) == null ? void 0 : _this$hls.latestLevelDetails;\n if (details) {\n this.updateDateRangeCues(details);\n }\n }\n onMediaDetaching(event, data) {\n this.media = null;\n const transferringMedia = !!data.transferMedia;\n if (transferringMedia) {\n return;\n }\n if (this.id3Track) {\n if (this.removeCues) {\n clearCurrentCues(this.id3Track, this.onEventCueEnter);\n }\n this.id3Track = null;\n }\n this.dateRangeCuesAppended = {};\n }\n onManifestLoading() {\n this.dateRangeCuesAppended = {};\n }\n createTrack(media) {\n const track = this.getID3Track(media.textTracks);\n track.mode = 'hidden';\n return track;\n }\n getID3Track(textTracks) {\n if (!this.media) {\n return;\n }\n for (let i = 0; i < textTracks.length; i++) {\n const textTrack = textTracks[i];\n if (textTrack.kind === 'metadata' && textTrack.label === 'id3') {\n // send 'addtrack' when reusing the textTrack for metadata,\n // same as what we do for captions\n sendAddTrackEvent(textTrack, this.media);\n return textTrack;\n }\n }\n return this.media.addTextTrack('metadata', 'id3');\n }\n onFragParsingMetadata(event, data) {\n if (!this.media || !this.hls) {\n return;\n }\n const {\n enableEmsgMetadataCues,\n enableID3MetadataCues\n } = this.hls.config;\n if (!enableEmsgMetadataCues && !enableID3MetadataCues) {\n return;\n }\n const {\n samples\n } = data;\n\n // create track dynamically\n if (!this.id3Track) {\n this.id3Track = this.createTrack(this.media);\n }\n const Cue = getCueClass();\n if (!Cue) {\n return;\n }\n for (let i = 0; i < samples.length; i++) {\n const type = samples[i].type;\n if (type === MetadataSchema.emsg && !enableEmsgMetadataCues || !enableID3MetadataCues) {\n continue;\n }\n const frames = getId3Frames(samples[i].data);\n const startTime = samples[i].pts;\n let endTime = startTime + samples[i].duration;\n if (endTime > MAX_CUE_ENDTIME) {\n endTime = MAX_CUE_ENDTIME;\n }\n const timeDiff = endTime - startTime;\n if (timeDiff <= 0) {\n endTime = startTime + MIN_CUE_DURATION;\n }\n for (let j = 0; j < frames.length; j++) {\n const frame = frames[j];\n // Safari doesn't put the timestamp frame in the TextTrack\n if (!isId3TimestampFrame(frame)) {\n // add a bounds to any unbounded cues\n this.updateId3CueEnds(startTime, type);\n const cue = createCueWithDataFields(Cue, startTime, endTime, frame, type);\n if (cue) {\n this.id3Track.addCue(cue);\n }\n }\n }\n }\n }\n updateId3CueEnds(startTime, type) {\n var _this$id3Track;\n const cues = (_this$id3Track = this.id3Track) == null ? void 0 : _this$id3Track.cues;\n if (cues) {\n for (let i = cues.length; i--;) {\n const cue = cues[i];\n if (cue.type === type && cue.startTime < startTime && cue.endTime === MAX_CUE_ENDTIME) {\n cue.endTime = startTime;\n }\n }\n }\n }\n onBufferFlushing(event, {\n startOffset,\n endOffset,\n type\n }) {\n const {\n id3Track,\n hls\n } = this;\n if (!hls) {\n return;\n }\n const {\n config: {\n enableEmsgMetadataCues,\n enableID3MetadataCues\n }\n } = hls;\n if (id3Track && (enableEmsgMetadataCues || enableID3MetadataCues)) {\n let predicate;\n if (type === 'audio') {\n predicate = cue => cue.type === MetadataSchema.audioId3 && enableID3MetadataCues;\n } else if (type === 'video') {\n predicate = cue => cue.type === MetadataSchema.emsg && enableEmsgMetadataCues;\n } else {\n predicate = cue => cue.type === MetadataSchema.audioId3 && enableID3MetadataCues || cue.type === MetadataSchema.emsg && enableEmsgMetadataCues;\n }\n removeCuesInRange(id3Track, startOffset, endOffset, predicate);\n }\n }\n onLevelUpdated(event, {\n details\n }) {\n this.updateDateRangeCues(details, true);\n }\n onLevelPtsUpdated(event, data) {\n if (Math.abs(data.drift) > 0.01) {\n this.updateDateRangeCues(data.details);\n }\n }\n updateDateRangeCues(details, removeOldCues) {\n if (!this.hls || !this.media) {\n return;\n }\n const {\n assetPlayerId,\n timelineOffset,\n enableDateRangeMetadataCues,\n interstitialsController\n } = this.hls.config;\n if (!enableDateRangeMetadataCues) {\n return;\n }\n const Cue = getCueClass();\n if (assetPlayerId && timelineOffset && !interstitialsController) {\n const {\n fragmentStart,\n fragmentEnd\n } = details;\n let cue = this.assetCue;\n if (cue) {\n cue.startTime = fragmentStart;\n cue.endTime = fragmentEnd;\n } else if (Cue) {\n cue = this.assetCue = createCueWithDataFields(Cue, fragmentStart, fragmentEnd, {\n assetPlayerId: this.hls.config.assetPlayerId\n }, 'hlsjs.interstitial.asset');\n if (cue) {\n cue.id = assetPlayerId;\n this.id3Track || (this.id3Track = this.createTrack(this.media));\n this.id3Track.addCue(cue);\n cue.addEventListener('enter', this.onEventCueEnter);\n }\n }\n }\n if (!details.hasProgramDateTime) {\n return;\n }\n const {\n id3Track\n } = this;\n const {\n dateRanges\n } = details;\n const ids = Object.keys(dateRanges);\n let dateRangeCuesAppended = this.dateRangeCuesAppended;\n // Remove cues from track not found in details.dateRanges\n if (id3Track && removeOldCues) {\n var _id3Track$cues;\n if ((_id3Track$cues = id3Track.cues) != null && _id3Track$cues.length) {\n const idsToRemove = Object.keys(dateRangeCuesAppended).filter(id => !ids.includes(id));\n for (let i = idsToRemove.length; i--;) {\n var _dateRangeCuesAppende;\n const id = idsToRemove[i];\n const cues = (_dateRangeCuesAppende = dateRangeCuesAppended[id]) == null ? void 0 : _dateRangeCuesAppende.cues;\n delete dateRangeCuesAppended[id];\n if (cues) {\n Object.keys(cues).forEach(key => {\n const cue = cues[key];\n if (cue) {\n cue.removeEventListener('enter', this.onEventCueEnter);\n try {\n id3Track.removeCue(cue);\n } catch (e) {\n /* no-op */\n }\n }\n });\n }\n }\n } else {\n dateRangeCuesAppended = this.dateRangeCuesAppended = {};\n }\n }\n // Exit if the playlist does not have Date Ranges or does not have Program Date Time\n const lastFragment = details.fragments[details.fragments.length - 1];\n if (ids.length === 0 || !isFiniteNumber(lastFragment == null ? void 0 : lastFragment.programDateTime)) {\n return;\n }\n this.id3Track || (this.id3Track = this.createTrack(this.media));\n for (let i = 0; i < ids.length; i++) {\n const id = ids[i];\n const dateRange = dateRanges[id];\n const startTime = dateRange.startTime;\n\n // Process DateRanges to determine end-time (known DURATION, END-DATE, or END-ON-NEXT)\n const appendedDateRangeCues = dateRangeCuesAppended[id];\n const cues = (appendedDateRangeCues == null ? void 0 : appendedDateRangeCues.cues) || {};\n let durationKnown = (appendedDateRangeCues == null ? void 0 : appendedDateRangeCues.durationKnown) || false;\n let endTime = MAX_CUE_ENDTIME;\n const {\n duration,\n endDate\n } = dateRange;\n if (endDate && duration !== null) {\n endTime = startTime + duration;\n durationKnown = true;\n } else if (dateRange.endOnNext && !durationKnown) {\n const nextDateRangeWithSameClass = ids.reduce((candidateDateRange, id) => {\n if (id !== dateRange.id) {\n const otherDateRange = dateRanges[id];\n if (otherDateRange.class === dateRange.class && otherDateRange.startDate > dateRange.startDate && (!candidateDateRange || dateRange.startDate < candidateDateRange.startDate)) {\n return otherDateRange;\n }\n }\n return candidateDateRange;\n }, null);\n if (nextDateRangeWithSameClass) {\n endTime = nextDateRangeWithSameClass.startTime;\n durationKnown = true;\n }\n }\n\n // Create TextTrack Cues for each MetadataGroup Item (select DateRange attribute)\n // This is to emulate Safari HLS playback handling of DateRange tags\n const attributes = Object.keys(dateRange.attr);\n for (let j = 0; j < attributes.length; j++) {\n const key = attributes[j];\n if (!isDateRangeCueAttribute(key)) {\n continue;\n }\n const cue = cues[key];\n if (cue) {\n if (durationKnown && !(appendedDateRangeCues != null && appendedDateRangeCues.durationKnown)) {\n cue.endTime = endTime;\n } else if (Math.abs(cue.startTime - startTime) > 0.01) {\n cue.startTime = startTime;\n cue.endTime = endTime;\n }\n } else if (Cue) {\n let data = dateRange.attr[key];\n if (isSCTE35Attribute(key)) {\n data = hexToArrayBuffer(data);\n }\n const payload = {\n key,\n data\n };\n const _cue = createCueWithDataFields(Cue, startTime, endTime, payload, MetadataSchema.dateRange);\n if (_cue) {\n _cue.id = id;\n this.id3Track.addCue(_cue);\n cues[key] = _cue;\n if (interstitialsController) {\n if (key === 'X-ASSET-LIST' || key === 'X-ASSET-URL') {\n _cue.addEventListener('enter', this.onEventCueEnter);\n }\n }\n }\n }\n }\n\n // Keep track of processed DateRanges by ID for updating cues with new DateRange tag attributes\n dateRangeCuesAppended[id] = {\n cues,\n dateRange,\n durationKnown\n };\n }\n }\n}\n\nclass LatencyController {\n constructor(hls) {\n this.hls = void 0;\n this.config = void 0;\n this.media = null;\n this.currentTime = 0;\n this.stallCount = 0;\n this._latency = null;\n this._targetLatencyUpdated = false;\n this.onTimeupdate = () => {\n const {\n media\n } = this;\n const levelDetails = this.levelDetails;\n if (!media || !levelDetails) {\n return;\n }\n this.currentTime = media.currentTime;\n const latency = this.computeLatency();\n if (latency === null) {\n return;\n }\n this._latency = latency;\n\n // Adapt playbackRate to meet target latency in low-latency mode\n const {\n lowLatencyMode,\n maxLiveSyncPlaybackRate\n } = this.config;\n if (!lowLatencyMode || maxLiveSyncPlaybackRate === 1 || !levelDetails.live) {\n return;\n }\n const targetLatency = this.targetLatency;\n if (targetLatency === null) {\n return;\n }\n const distanceFromTarget = latency - targetLatency;\n // Only adjust playbackRate when within one target duration of targetLatency\n // and more than one second from under-buffering.\n // Playback further than one target duration from target can be considered DVR playback.\n const liveMinLatencyDuration = Math.min(this.maxLatency, targetLatency + levelDetails.targetduration);\n const inLiveRange = distanceFromTarget < liveMinLatencyDuration;\n if (inLiveRange && distanceFromTarget > 0.05 && this.forwardBufferLength > 1) {\n const max = Math.min(2, Math.max(1.0, maxLiveSyncPlaybackRate));\n const rate = Math.round(2 / (1 + Math.exp(-0.75 * distanceFromTarget - this.edgeStalled)) * 20) / 20;\n const playbackRate = Math.min(max, Math.max(1, rate));\n this.changeMediaPlaybackRate(media, playbackRate);\n } else if (media.playbackRate !== 1 && media.playbackRate !== 0) {\n this.changeMediaPlaybackRate(media, 1);\n }\n };\n this.hls = hls;\n this.config = hls.config;\n this.registerListeners();\n }\n get levelDetails() {\n var _this$hls;\n return ((_this$hls = this.hls) == null ? void 0 : _this$hls.latestLevelDetails) || null;\n }\n get latency() {\n return this._latency || 0;\n }\n get maxLatency() {\n const {\n config\n } = this;\n if (config.liveMaxLatencyDuration !== undefined) {\n return config.liveMaxLatencyDuration;\n }\n const levelDetails = this.levelDetails;\n return levelDetails ? config.liveMaxLatencyDurationCount * levelDetails.targetduration : 0;\n }\n get targetLatency() {\n const levelDetails = this.levelDetails;\n if (levelDetails === null || this.hls === null) {\n return null;\n }\n const {\n holdBack,\n partHoldBack,\n targetduration\n } = levelDetails;\n const {\n liveSyncDuration,\n liveSyncDurationCount,\n lowLatencyMode\n } = this.config;\n const userConfig = this.hls.userConfig;\n let targetLatency = lowLatencyMode ? partHoldBack || holdBack : holdBack;\n if (this._targetLatencyUpdated || userConfig.liveSyncDuration || userConfig.liveSyncDurationCount || targetLatency === 0) {\n targetLatency = liveSyncDuration !== undefined ? liveSyncDuration : liveSyncDurationCount * targetduration;\n }\n const maxLiveSyncOnStallIncrease = targetduration;\n return targetLatency + Math.min(this.stallCount * this.config.liveSyncOnStallIncrease, maxLiveSyncOnStallIncrease);\n }\n set targetLatency(latency) {\n this.stallCount = 0;\n this.config.liveSyncDuration = latency;\n this._targetLatencyUpdated = true;\n }\n get liveSyncPosition() {\n const liveEdge = this.estimateLiveEdge();\n const targetLatency = this.targetLatency;\n if (liveEdge === null || targetLatency === null) {\n return null;\n }\n const levelDetails = this.levelDetails;\n if (levelDetails === null) {\n return null;\n }\n const edge = levelDetails.edge;\n const syncPosition = liveEdge - targetLatency - this.edgeStalled;\n const min = edge - levelDetails.totalduration;\n const max = edge - (this.config.lowLatencyMode && levelDetails.partTarget || levelDetails.targetduration);\n return Math.min(Math.max(min, syncPosition), max);\n }\n get drift() {\n const levelDetails = this.levelDetails;\n if (levelDetails === null) {\n return 1;\n }\n return levelDetails.drift;\n }\n get edgeStalled() {\n const levelDetails = this.levelDetails;\n if (levelDetails === null) {\n return 0;\n }\n const maxLevelUpdateAge = (this.config.lowLatencyMode && levelDetails.partTarget || levelDetails.targetduration) * 3;\n return Math.max(levelDetails.age - maxLevelUpdateAge, 0);\n }\n get forwardBufferLength() {\n const {\n media\n } = this;\n const levelDetails = this.levelDetails;\n if (!media || !levelDetails) {\n return 0;\n }\n const bufferedRanges = media.buffered.length;\n return (bufferedRanges ? media.buffered.end(bufferedRanges - 1) : levelDetails.edge) - this.currentTime;\n }\n destroy() {\n this.unregisterListeners();\n this.onMediaDetaching();\n this.hls = null;\n }\n registerListeners() {\n const {\n hls\n } = this;\n if (!hls) {\n return;\n }\n hls.on(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.on(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n hls.on(Events.ERROR, this.onError, this);\n }\n unregisterListeners() {\n const {\n hls\n } = this;\n if (!hls) {\n return;\n }\n hls.off(Events.MEDIA_ATTACHED, this.onMediaAttached, this);\n hls.off(Events.MEDIA_DETACHING, this.onMediaDetaching, this);\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.LEVEL_UPDATED, this.onLevelUpdated, this);\n hls.off(Events.ERROR, this.onError, this);\n }\n onMediaAttached(event, data) {\n this.media = data.media;\n this.media.addEventListener('timeupdate', this.onTimeupdate);\n }\n onMediaDetaching() {\n if (this.media) {\n this.media.removeEventListener('timeupdate', this.onTimeupdate);\n this.media = null;\n }\n }\n onManifestLoading() {\n this._latency = null;\n this.stallCount = 0;\n }\n onLevelUpdated(event, {\n details\n }) {\n if (details.advanced) {\n this.onTimeupdate();\n }\n if (!details.live && this.media) {\n this.media.removeEventListener('timeupdate', this.onTimeupdate);\n }\n }\n onError(event, data) {\n var _this$levelDetails;\n if (data.details !== ErrorDetails.BUFFER_STALLED_ERROR) {\n return;\n }\n this.stallCount++;\n if (this.hls && (_this$levelDetails = this.levelDetails) != null && _this$levelDetails.live) {\n this.hls.logger.warn('[latency-controller]: Stall detected, adjusting target latency');\n }\n }\n changeMediaPlaybackRate(media, playbackRate) {\n var _this$hls2, _this$targetLatency;\n if (media.playbackRate === playbackRate) {\n return;\n }\n (_this$hls2 = this.hls) == null || _this$hls2.logger.debug(`[latency-controller]: latency=${this.latency.toFixed(3)}, targetLatency=${(_this$targetLatency = this.targetLatency) == null ? void 0 : _this$targetLatency.toFixed(3)}, forwardBufferLength=${this.forwardBufferLength.toFixed(3)}: adjusting playback rate from ${media.playbackRate} to ${playbackRate}`);\n media.playbackRate = playbackRate;\n }\n estimateLiveEdge() {\n const levelDetails = this.levelDetails;\n if (levelDetails === null) {\n return null;\n }\n return levelDetails.edge + levelDetails.age;\n }\n computeLatency() {\n const liveEdge = this.estimateLiveEdge();\n if (liveEdge === null) {\n return null;\n }\n return liveEdge - this.currentTime;\n }\n}\n\nclass LevelController extends BasePlaylistController {\n constructor(hls, contentSteeringController) {\n super(hls, 'level-controller');\n this._levels = [];\n this._firstLevel = -1;\n this._maxAutoLevel = -1;\n this._startLevel = void 0;\n this.currentLevel = null;\n this.currentLevelIndex = -1;\n this.manualLevelIndex = -1;\n this.steering = void 0;\n this.onParsedComplete = void 0;\n this.steering = contentSteeringController;\n this._registerListeners();\n }\n _registerListeners() {\n const {\n hls\n } = this;\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n hls.on(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n hls.on(Events.ERROR, this.onError, this);\n }\n _unregisterListeners() {\n const {\n hls\n } = this;\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.MANIFEST_LOADED, this.onManifestLoaded, this);\n hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n hls.off(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n hls.off(Events.ERROR, this.onError, this);\n }\n destroy() {\n this._unregisterListeners();\n this.steering = null;\n this.resetLevels();\n super.destroy();\n }\n stopLoad() {\n const levels = this._levels;\n\n // clean up live level details to force reload them, and reset load errors\n levels.forEach(level => {\n level.loadError = 0;\n level.fragmentError = 0;\n });\n super.stopLoad();\n }\n resetLevels() {\n this._startLevel = undefined;\n this.manualLevelIndex = -1;\n this.currentLevelIndex = -1;\n this.currentLevel = null;\n this._levels = [];\n this._maxAutoLevel = -1;\n }\n onManifestLoading(event, data) {\n this.resetLevels();\n }\n onManifestLoaded(event, data) {\n const preferManagedMediaSource = this.hls.config.preferManagedMediaSource;\n const levels = [];\n const redundantSet = {};\n const generatePathwaySet = {};\n let resolutionFound = false;\n let videoCodecFound = false;\n let audioCodecFound = false;\n data.levels.forEach(levelParsed => {\n const attributes = levelParsed.attrs;\n let {\n audioCodec,\n videoCodec\n } = levelParsed;\n if (audioCodec) {\n // Returns empty and set to undefined for 'mp4a.40.34' with fallback to 'audio/mpeg' SourceBuffer\n levelParsed.audioCodec = audioCodec = getCodecCompatibleName(audioCodec, preferManagedMediaSource) || undefined;\n }\n if (videoCodec) {\n videoCodec = levelParsed.videoCodec = convertAVC1ToAVCOTI(videoCodec);\n }\n\n // only keep levels with supported audio/video codecs\n const {\n width,\n height,\n unknownCodecs\n } = levelParsed;\n const unknownUnsupportedCodecCount = (unknownCodecs == null ? void 0 : unknownCodecs.length) || 0;\n resolutionFound || (resolutionFound = !!(width && height));\n videoCodecFound || (videoCodecFound = !!videoCodec);\n audioCodecFound || (audioCodecFound = !!audioCodec);\n if (unknownUnsupportedCodecCount || audioCodec && !this.isAudioSupported(audioCodec) || videoCodec && !this.isVideoSupported(videoCodec)) {\n this.log(`Some or all CODECS not supported \"${attributes.CODECS}\"`);\n return;\n }\n const {\n CODECS,\n 'FRAME-RATE': FRAMERATE,\n 'HDCP-LEVEL': HDCP,\n 'PATHWAY-ID': PATHWAY,\n RESOLUTION,\n 'VIDEO-RANGE': VIDEO_RANGE\n } = attributes;\n const contentSteeringPrefix = `${PATHWAY || '.'}-`;\n const levelKey = `${contentSteeringPrefix}${levelParsed.bitrate}-${RESOLUTION}-${FRAMERATE}-${CODECS}-${VIDEO_RANGE}-${HDCP}`;\n if (!redundantSet[levelKey]) {\n const level = this.createLevel(levelParsed);\n redundantSet[levelKey] = level;\n generatePathwaySet[levelKey] = 1;\n levels.push(level);\n } else if (redundantSet[levelKey].uri !== levelParsed.url && !levelParsed.attrs['PATHWAY-ID']) {\n // Assign Pathway IDs to Redundant Streams (default Pathways is \".\". Redundant Streams \"..\", \"...\", and so on.)\n // Content Steering controller to handles Pathway fallback on error\n const pathwayCount = generatePathwaySet[levelKey] += 1;\n levelParsed.attrs['PATHWAY-ID'] = new Array(pathwayCount + 1).join('.');\n const level = this.createLevel(levelParsed);\n redundantSet[levelKey] = level;\n levels.push(level);\n } else {\n redundantSet[levelKey].addGroupId('audio', attributes.AUDIO);\n redundantSet[levelKey].addGroupId('text', attributes.SUBTITLES);\n }\n });\n this.filterAndSortMediaOptions(levels, data, resolutionFound, videoCodecFound, audioCodecFound);\n }\n createLevel(levelParsed) {\n const level = new Level(levelParsed);\n const supplemental = levelParsed.supplemental;\n if (supplemental != null && supplemental.videoCodec && !this.isVideoSupported(supplemental.videoCodec)) {\n const error = new Error(`SUPPLEMENTAL-CODECS not supported \"${supplemental.videoCodec}\"`);\n this.log(error.message);\n level.supportedResult = getUnsupportedResult(error, []);\n }\n return level;\n }\n isAudioSupported(codec) {\n return areCodecsMediaSourceSupported(codec, 'audio', this.hls.config.preferManagedMediaSource);\n }\n isVideoSupported(codec) {\n return areCodecsMediaSourceSupported(codec, 'video', this.hls.config.preferManagedMediaSource);\n }\n filterAndSortMediaOptions(filteredLevels, data, resolutionFound, videoCodecFound, audioCodecFound) {\n var _data$stats;\n let audioTracks = [];\n let subtitleTracks = [];\n let levels = filteredLevels;\n const statsParsing = ((_data$stats = data.stats) == null ? void 0 : _data$stats.parsing) || {};\n\n // remove audio-only and invalid video-range levels if we also have levels with video codecs or RESOLUTION signalled\n if ((resolutionFound || videoCodecFound) && audioCodecFound) {\n levels = levels.filter(({\n videoCodec,\n videoRange,\n width,\n height\n }) => (!!videoCodec || !!(width && height)) && isVideoRange(videoRange));\n }\n if (levels.length === 0) {\n // Dispatch error after MANIFEST_LOADED is done propagating\n // eslint-disable-next-line @typescript-eslint/no-floating-promises\n Promise.resolve().then(() => {\n if (this.hls) {\n let message = 'no level with compatible codecs found in manifest';\n let reason = message;\n if (data.levels.length) {\n reason = `one or more CODECS in variant not supported: ${stringify(data.levels.map(level => level.attrs.CODECS).filter((value, index, array) => array.indexOf(value) === index))}`;\n this.warn(reason);\n message += ` (${reason})`;\n }\n const error = new Error(message);\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.MEDIA_ERROR,\n details: ErrorDetails.MANIFEST_INCOMPATIBLE_CODECS_ERROR,\n fatal: true,\n url: data.url,\n error,\n reason\n });\n }\n });\n statsParsing.end = performance.now();\n return;\n }\n if (data.audioTracks) {\n audioTracks = data.audioTracks.filter(track => !track.audioCodec || this.isAudioSupported(track.audioCodec));\n // Assign ids after filtering as array indices by group-id\n assignTrackIdsByGroup(audioTracks);\n }\n if (data.subtitles) {\n subtitleTracks = data.subtitles;\n assignTrackIdsByGroup(subtitleTracks);\n }\n // start bitrate is the first bitrate of the manifest\n const unsortedLevels = levels.slice(0);\n // sort levels from lowest to highest\n levels.sort((a, b) => {\n if (a.attrs['HDCP-LEVEL'] !== b.attrs['HDCP-LEVEL']) {\n return (a.attrs['HDCP-LEVEL'] || '') > (b.attrs['HDCP-LEVEL'] || '') ? 1 : -1;\n }\n // sort on height before bitrate for cap-level-controller\n if (resolutionFound && a.height !== b.height) {\n return a.height - b.height;\n }\n if (a.frameRate !== b.frameRate) {\n return a.frameRate - b.frameRate;\n }\n if (a.videoRange !== b.videoRange) {\n return VideoRangeValues.indexOf(a.videoRange) - VideoRangeValues.indexOf(b.videoRange);\n }\n if (a.videoCodec !== b.videoCodec) {\n const valueA = videoCodecPreferenceValue(a.videoCodec);\n const valueB = videoCodecPreferenceValue(b.videoCodec);\n if (valueA !== valueB) {\n return valueB - valueA;\n }\n }\n if (a.uri === b.uri && a.codecSet !== b.codecSet) {\n const valueA = codecsSetSelectionPreferenceValue(a.codecSet);\n const valueB = codecsSetSelectionPreferenceValue(b.codecSet);\n if (valueA !== valueB) {\n return valueB - valueA;\n }\n }\n if (a.averageBitrate !== b.averageBitrate) {\n return a.averageBitrate - b.averageBitrate;\n }\n return 0;\n });\n let firstLevelInPlaylist = unsortedLevels[0];\n if (this.steering) {\n levels = this.steering.filterParsedLevels(levels);\n if (levels.length !== unsortedLevels.length) {\n for (let i = 0; i < unsortedLevels.length; i++) {\n if (unsortedLevels[i].pathwayId === levels[0].pathwayId) {\n firstLevelInPlaylist = unsortedLevels[i];\n break;\n }\n }\n }\n }\n this._levels = levels;\n\n // find index of first level in sorted levels\n for (let i = 0; i < levels.length; i++) {\n if (levels[i] === firstLevelInPlaylist) {\n var _this$hls$userConfig;\n this._firstLevel = i;\n const firstLevelBitrate = firstLevelInPlaylist.bitrate;\n const bandwidthEstimate = this.hls.bandwidthEstimate;\n this.log(`manifest loaded, ${levels.length} level(s) found, first bitrate: ${firstLevelBitrate}`);\n // Update default bwe to first variant bitrate as long it has not been configured or set\n if (((_this$hls$userConfig = this.hls.userConfig) == null ? void 0 : _this$hls$userConfig.abrEwmaDefaultEstimate) === undefined) {\n const startingBwEstimate = Math.min(firstLevelBitrate, this.hls.config.abrEwmaDefaultEstimateMax);\n if (startingBwEstimate > bandwidthEstimate && bandwidthEstimate === this.hls.abrEwmaDefaultEstimate) {\n this.hls.bandwidthEstimate = startingBwEstimate;\n }\n }\n break;\n }\n }\n\n // Audio is only alternate if manifest include a URI along with the audio group tag,\n // and this is not an audio-only stream where levels contain audio-only\n const audioOnly = audioCodecFound && !videoCodecFound;\n const config = this.hls.config;\n const altAudioEnabled = !!(config.audioStreamController && config.audioTrackController);\n const edata = {\n levels,\n audioTracks,\n subtitleTracks,\n sessionData: data.sessionData,\n sessionKeys: data.sessionKeys,\n firstLevel: this._firstLevel,\n stats: data.stats,\n audio: audioCodecFound,\n video: videoCodecFound,\n altAudio: altAudioEnabled && !audioOnly && audioTracks.some(t => !!t.url)\n };\n statsParsing.end = performance.now();\n this.hls.trigger(Events.MANIFEST_PARSED, edata);\n }\n get levels() {\n if (this._levels.length === 0) {\n return null;\n }\n return this._levels;\n }\n get loadLevelObj() {\n return this.currentLevel;\n }\n get level() {\n return this.currentLevelIndex;\n }\n set level(newLevel) {\n const levels = this._levels;\n if (levels.length === 0) {\n return;\n }\n // check if level idx is valid\n if (newLevel < 0 || newLevel >= levels.length) {\n // invalid level id given, trigger error\n const error = new Error('invalid level idx');\n const fatal = newLevel < 0;\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.LEVEL_SWITCH_ERROR,\n level: newLevel,\n fatal,\n error,\n reason: error.message\n });\n if (fatal) {\n return;\n }\n newLevel = Math.min(newLevel, levels.length - 1);\n }\n const lastLevelIndex = this.currentLevelIndex;\n const lastLevel = this.currentLevel;\n const lastPathwayId = lastLevel ? lastLevel.attrs['PATHWAY-ID'] : undefined;\n const level = levels[newLevel];\n const pathwayId = level.attrs['PATHWAY-ID'];\n this.currentLevelIndex = newLevel;\n this.currentLevel = level;\n if (lastLevelIndex === newLevel && lastLevel && lastPathwayId === pathwayId) {\n return;\n }\n this.log(`Switching to level ${newLevel} (${level.height ? level.height + 'p ' : ''}${level.videoRange ? level.videoRange + ' ' : ''}${level.codecSet ? level.codecSet + ' ' : ''}@${level.bitrate})${pathwayId ? ' with Pathway ' + pathwayId : ''} from level ${lastLevelIndex}${lastPathwayId ? ' with Pathway ' + lastPathwayId : ''}`);\n const levelSwitchingData = {\n level: newLevel,\n attrs: level.attrs,\n details: level.details,\n bitrate: level.bitrate,\n averageBitrate: level.averageBitrate,\n maxBitrate: level.maxBitrate,\n realBitrate: level.realBitrate,\n width: level.width,\n height: level.height,\n codecSet: level.codecSet,\n audioCodec: level.audioCodec,\n videoCodec: level.videoCodec,\n audioGroups: level.audioGroups,\n subtitleGroups: level.subtitleGroups,\n loaded: level.loaded,\n loadError: level.loadError,\n fragmentError: level.fragmentError,\n name: level.name,\n id: level.id,\n uri: level.uri,\n url: level.url,\n urlId: 0,\n audioGroupIds: level.audioGroupIds,\n textGroupIds: level.textGroupIds\n };\n this.hls.trigger(Events.LEVEL_SWITCHING, levelSwitchingData);\n // check if we need to load playlist for this level\n const levelDetails = level.details;\n if (!levelDetails || levelDetails.live) {\n // level not retrieved yet, or live playlist we need to (re)load it\n const hlsUrlParameters = this.switchParams(level.uri, lastLevel == null ? void 0 : lastLevel.details, levelDetails);\n this.loadPlaylist(hlsUrlParameters);\n }\n }\n get manualLevel() {\n return this.manualLevelIndex;\n }\n set manualLevel(newLevel) {\n this.manualLevelIndex = newLevel;\n if (this._startLevel === undefined) {\n this._startLevel = newLevel;\n }\n if (newLevel !== -1) {\n this.level = newLevel;\n }\n }\n get firstLevel() {\n return this._firstLevel;\n }\n set firstLevel(newLevel) {\n this._firstLevel = newLevel;\n }\n get startLevel() {\n // Setting hls.startLevel (this._startLevel) overrides config.startLevel\n if (this._startLevel === undefined) {\n const configStartLevel = this.hls.config.startLevel;\n if (configStartLevel !== undefined) {\n return configStartLevel;\n }\n return this.hls.firstAutoLevel;\n }\n return this._startLevel;\n }\n set startLevel(newLevel) {\n this._startLevel = newLevel;\n }\n get pathways() {\n if (this.steering) {\n return this.steering.pathways();\n }\n return [];\n }\n get pathwayPriority() {\n if (this.steering) {\n return this.steering.pathwayPriority;\n }\n return null;\n }\n set pathwayPriority(pathwayPriority) {\n if (this.steering) {\n const pathwaysList = this.steering.pathways();\n const filteredPathwayPriority = pathwayPriority.filter(pathwayId => {\n return pathwaysList.indexOf(pathwayId) !== -1;\n });\n if (pathwayPriority.length < 1) {\n this.warn(`pathwayPriority ${pathwayPriority} should contain at least one pathway from list: ${pathwaysList}`);\n return;\n }\n this.steering.pathwayPriority = filteredPathwayPriority;\n }\n }\n onError(event, data) {\n if (data.fatal || !data.context) {\n return;\n }\n if (data.context.type === PlaylistContextType.LEVEL && data.context.level === this.level) {\n this.checkRetry(data);\n }\n }\n\n // reset errors on the successful load of a fragment\n onFragBuffered(event, {\n frag\n }) {\n if (frag !== undefined && frag.type === PlaylistLevelType.MAIN) {\n const el = frag.elementaryStreams;\n if (!Object.keys(el).some(type => !!el[type])) {\n return;\n }\n const level = this._levels[frag.level];\n if (level != null && level.loadError) {\n this.log(`Resetting level error count of ${level.loadError} on frag buffered`);\n level.loadError = 0;\n }\n }\n }\n onLevelLoaded(event, data) {\n var _data$deliveryDirecti2;\n const {\n level,\n details\n } = data;\n const curLevel = data.levelInfo;\n if (!curLevel) {\n var _data$deliveryDirecti;\n this.warn(`Invalid level index ${level}`);\n if ((_data$deliveryDirecti = data.deliveryDirectives) != null && _data$deliveryDirecti.skip) {\n details.deltaUpdateFailed = true;\n }\n return;\n }\n\n // only process level loaded events matching with expected level or prior to switch when media playlist is loaded directly\n if (curLevel === this.currentLevel || data.withoutMultiVariant) {\n // reset level load error counter on successful level loaded only if there is no issues with fragments\n if (curLevel.fragmentError === 0) {\n curLevel.loadError = 0;\n }\n // Ignore matching details populated by loading a Media Playlist directly\n let previousDetails = curLevel.details;\n if (previousDetails === data.details && previousDetails.advanced) {\n previousDetails = undefined;\n }\n this.playlistLoaded(level, data, previousDetails);\n } else if ((_data$deliveryDirecti2 = data.deliveryDirectives) != null && _data$deliveryDirecti2.skip) {\n // received a delta playlist update that cannot be merged\n details.deltaUpdateFailed = true;\n }\n }\n loadPlaylist(hlsUrlParameters) {\n super.loadPlaylist();\n if (this.shouldLoadPlaylist(this.currentLevel)) {\n this.scheduleLoading(this.currentLevel, hlsUrlParameters);\n }\n }\n loadingPlaylist(currentLevel, hlsUrlParameters) {\n super.loadingPlaylist(currentLevel, hlsUrlParameters);\n const url = this.getUrlWithDirectives(currentLevel.uri, hlsUrlParameters);\n const currentLevelIndex = this.currentLevelIndex;\n const pathwayId = currentLevel.attrs['PATHWAY-ID'];\n const details = currentLevel.details;\n const age = details == null ? void 0 : details.age;\n this.log(`Loading level index ${currentLevelIndex}${(hlsUrlParameters == null ? void 0 : hlsUrlParameters.msn) !== undefined ? ' at sn ' + hlsUrlParameters.msn + ' part ' + hlsUrlParameters.part : ''}${pathwayId ? ' Pathway ' + pathwayId : ''}${age && details.live ? ' age ' + age.toFixed(1) + (details.type ? ' ' + details.type || '' : '') : ''} ${url}`);\n this.hls.trigger(Events.LEVEL_LOADING, {\n url,\n level: currentLevelIndex,\n levelInfo: currentLevel,\n pathwayId: currentLevel.attrs['PATHWAY-ID'],\n id: 0,\n // Deprecated Level urlId\n deliveryDirectives: hlsUrlParameters || null\n });\n }\n get nextLoadLevel() {\n if (this.manualLevelIndex !== -1) {\n return this.manualLevelIndex;\n } else {\n return this.hls.nextAutoLevel;\n }\n }\n set nextLoadLevel(nextLevel) {\n this.level = nextLevel;\n if (this.manualLevelIndex === -1) {\n this.hls.nextAutoLevel = nextLevel;\n }\n }\n removeLevel(levelIndex) {\n var _this$currentLevel;\n if (this._levels.length === 1) {\n return;\n }\n const levels = this._levels.filter((level, index) => {\n if (index !== levelIndex) {\n return true;\n }\n if (this.steering) {\n this.steering.removeLevel(level);\n }\n if (level === this.currentLevel) {\n this.currentLevel = null;\n this.currentLevelIndex = -1;\n if (level.details) {\n level.details.fragments.forEach(f => f.level = -1);\n }\n }\n return false;\n });\n reassignFragmentLevelIndexes(levels);\n this._levels = levels;\n if (this.currentLevelIndex > -1 && (_this$currentLevel = this.currentLevel) != null && _this$currentLevel.details) {\n this.currentLevelIndex = this.currentLevel.details.fragments[0].level;\n }\n if (this.manualLevelIndex > -1) {\n this.manualLevelIndex = this.currentLevelIndex;\n }\n const maxLevel = levels.length - 1;\n this._firstLevel = Math.min(this._firstLevel, maxLevel);\n if (this._startLevel) {\n this._startLevel = Math.min(this._startLevel, maxLevel);\n }\n this.hls.trigger(Events.LEVELS_UPDATED, {\n levels\n });\n }\n onLevelsUpdated(event, {\n levels\n }) {\n this._levels = levels;\n }\n checkMaxAutoUpdated() {\n const {\n autoLevelCapping,\n maxAutoLevel,\n maxHdcpLevel\n } = this.hls;\n if (this._maxAutoLevel !== maxAutoLevel) {\n this._maxAutoLevel = maxAutoLevel;\n this.hls.trigger(Events.MAX_AUTO_LEVEL_UPDATED, {\n autoLevelCapping,\n levels: this.levels,\n maxAutoLevel,\n minAutoLevel: this.hls.minAutoLevel,\n maxHdcpLevel\n });\n }\n }\n}\nfunction assignTrackIdsByGroup(tracks) {\n const groups = {};\n tracks.forEach(track => {\n const groupId = track.groupId || '';\n track.id = groups[groupId] = groups[groupId] || 0;\n groups[groupId]++;\n });\n}\n\nfunction getSourceBuffer() {\n return self.SourceBuffer || self.WebKitSourceBuffer;\n}\nfunction isMSESupported() {\n const mediaSource = getMediaSource();\n if (!mediaSource) {\n return false;\n }\n\n // if SourceBuffer is exposed ensure its API is valid\n // Older browsers do not expose SourceBuffer globally so checking SourceBuffer.prototype is impossible\n const sourceBuffer = getSourceBuffer();\n return !sourceBuffer || sourceBuffer.prototype && typeof sourceBuffer.prototype.appendBuffer === 'function' && typeof sourceBuffer.prototype.remove === 'function';\n}\nfunction isSupported() {\n if (!isMSESupported()) {\n return false;\n }\n const mediaSource = getMediaSource();\n return typeof (mediaSource == null ? void 0 : mediaSource.isTypeSupported) === 'function' && (['avc1.42E01E,mp4a.40.2', 'av01.0.01M.08', 'vp09.00.50.08'].some(codecsForVideoContainer => mediaSource.isTypeSupported(mimeTypeForCodec(codecsForVideoContainer, 'video'))) || ['mp4a.40.2', 'fLaC'].some(codecForAudioContainer => mediaSource.isTypeSupported(mimeTypeForCodec(codecForAudioContainer, 'audio'))));\n}\nfunction changeTypeSupported() {\n var _sourceBuffer$prototy;\n const sourceBuffer = getSourceBuffer();\n return typeof (sourceBuffer == null || (_sourceBuffer$prototy = sourceBuffer.prototype) == null ? void 0 : _sourceBuffer$prototy.changeType) === 'function';\n}\n\nconst TICK_INTERVAL = 100; // how often to tick in ms\n\nclass StreamController extends BaseStreamController {\n constructor(hls, fragmentTracker, keyLoader) {\n super(hls, fragmentTracker, keyLoader, 'stream-controller', PlaylistLevelType.MAIN);\n this.audioCodecSwap = false;\n this.level = -1;\n this._forceStartLoad = false;\n this._hasEnoughToStart = false;\n this.altAudio = 0;\n this.audioOnly = false;\n this.fragPlaying = null;\n this.fragLastKbps = 0;\n this.couldBacktrack = false;\n this.backtrackFragment = null;\n this.audioCodecSwitch = false;\n this.videoBuffer = null;\n this.onMediaPlaying = () => {\n // tick to speed up FRAG_CHANGED triggering\n this.tick();\n };\n this.onMediaSeeked = () => {\n const media = this.media;\n const currentTime = media ? media.currentTime : null;\n if (currentTime === null || !isFiniteNumber(currentTime)) {\n return;\n }\n this.log(`Media seeked to ${currentTime.toFixed(3)}`);\n\n // If seeked was issued before buffer was appended do not tick immediately\n if (!this.getBufferedFrag(currentTime)) {\n return;\n }\n const bufferInfo = this.getFwdBufferInfoAtPos(media, currentTime, PlaylistLevelType.MAIN, 0);\n if (bufferInfo === null || bufferInfo.len === 0) {\n this.warn(`Main forward buffer length at ${currentTime} on \"seeked\" event ${bufferInfo ? bufferInfo.len : 'empty'})`);\n return;\n }\n\n // tick to speed up FRAG_CHANGED triggering\n this.tick();\n };\n this.registerListeners();\n }\n registerListeners() {\n super.registerListeners();\n const {\n hls\n } = this;\n hls.on(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.on(Events.LEVEL_LOADING, this.onLevelLoading, this);\n hls.on(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n hls.on(Events.FRAG_LOAD_EMERGENCY_ABORTED, this.onFragLoadEmergencyAborted, this);\n hls.on(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n hls.on(Events.AUDIO_TRACK_SWITCHED, this.onAudioTrackSwitched, this);\n hls.on(Events.BUFFER_CREATED, this.onBufferCreated, this);\n hls.on(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n hls.on(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n hls.on(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n }\n unregisterListeners() {\n super.unregisterListeners();\n const {\n hls\n } = this;\n hls.off(Events.MANIFEST_PARSED, this.onManifestParsed, this);\n hls.off(Events.LEVEL_LOADED, this.onLevelLoaded, this);\n hls.off(Events.FRAG_LOAD_EMERGENCY_ABORTED, this.onFragLoadEmergencyAborted, this);\n hls.off(Events.AUDIO_TRACK_SWITCHING, this.onAudioTrackSwitching, this);\n hls.off(Events.AUDIO_TRACK_SWITCHED, this.onAudioTrackSwitched, this);\n hls.off(Events.BUFFER_CREATED, this.onBufferCreated, this);\n hls.off(Events.BUFFER_FLUSHED, this.onBufferFlushed, this);\n hls.off(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n hls.off(Events.FRAG_BUFFERED, this.onFragBuffered, this);\n }\n onHandlerDestroying() {\n // @ts-ignore\n this.onMediaPlaying = this.onMediaSeeked = null;\n this.unregisterListeners();\n super.onHandlerDestroying();\n }\n startLoad(startPosition, skipSeekToStartPosition) {\n if (this.levels) {\n const {\n lastCurrentTime,\n hls\n } = this;\n this.stopLoad();\n this.setInterval(TICK_INTERVAL);\n this.level = -1;\n if (!this.startFragRequested) {\n // determine load level\n let startLevel = hls.startLevel;\n if (startLevel === -1) {\n if (hls.config.testBandwidth && this.levels.length > 1) {\n // -1 : guess start Level by doing a bitrate test by loading first fragment of lowest quality level\n startLevel = 0;\n this.bitrateTest = true;\n } else {\n startLevel = hls.firstAutoLevel;\n }\n }\n // set new level to playlist loader : this will trigger start level load\n // hls.nextLoadLevel remains until it is set to a new value or until a new frag is successfully loaded\n hls.nextLoadLevel = startLevel;\n this.level = hls.loadLevel;\n this._hasEnoughToStart = !!skipSeekToStartPosition;\n }\n // if startPosition undefined but lastCurrentTime set, set startPosition to last currentTime\n if (lastCurrentTime > 0 && startPosition === -1 && !skipSeekToStartPosition) {\n this.log(`Override startPosition with lastCurrentTime @${lastCurrentTime.toFixed(3)}`);\n startPosition = lastCurrentTime;\n }\n this.state = State.IDLE;\n this.nextLoadPosition = this.lastCurrentTime = startPosition + this.timelineOffset;\n this.startPosition = skipSeekToStartPosition ? -1 : startPosition;\n this.tick();\n } else {\n this._forceStartLoad = true;\n this.state = State.STOPPED;\n }\n }\n stopLoad() {\n this._forceStartLoad = false;\n super.stopLoad();\n }\n doTick() {\n switch (this.state) {\n case State.WAITING_LEVEL:\n {\n const {\n levels,\n level\n } = this;\n const currentLevel = levels == null ? void 0 : levels[level];\n const details = currentLevel == null ? void 0 : currentLevel.details;\n if (details && (!details.live || this.levelLastLoaded === currentLevel && !this.waitForLive(currentLevel))) {\n if (this.waitForCdnTuneIn(details)) {\n break;\n }\n this.state = State.IDLE;\n break;\n } else if (this.hls.nextLoadLevel !== this.level) {\n this.state = State.IDLE;\n break;\n }\n break;\n }\n case State.FRAG_LOADING_WAITING_RETRY:\n this.checkRetryDate();\n break;\n }\n if (this.state === State.IDLE) {\n this.doTickIdle();\n }\n this.onTickEnd();\n }\n onTickEnd() {\n var _this$media;\n super.onTickEnd();\n if ((_this$media = this.media) != null && _this$media.readyState && this.media.seeking === false) {\n this.lastCurrentTime = this.media.currentTime;\n }\n this.checkFragmentChanged();\n }\n doTickIdle() {\n const {\n hls,\n levelLastLoaded,\n levels,\n media\n } = this;\n\n // if start level not parsed yet OR\n // if video not attached AND start fragment already requested OR start frag prefetch not enabled\n // exit loop, as we either need more info (level not parsed) or we need media to be attached to load new fragment\n if (levelLastLoaded === null || !media && !this.primaryPrefetch && (this.startFragRequested || !hls.config.startFragPrefetch)) {\n return;\n }\n\n // If the \"main\" level is audio-only but we are loading an alternate track in the same group, do not load anything\n if (this.altAudio && this.audioOnly) {\n return;\n }\n const level = this.buffering ? hls.nextLoadLevel : hls.loadLevel;\n if (!(levels != null && levels[level])) {\n return;\n }\n const levelInfo = levels[level];\n\n // if buffer length is less than maxBufLen try to load a new fragment\n\n const bufferInfo = this.getMainFwdBufferInfo();\n if (bufferInfo === null) {\n return;\n }\n const lastDetails = this.getLevelDetails();\n if (lastDetails && this._streamEnded(bufferInfo, lastDetails)) {\n const data = {};\n if (this.altAudio === 2) {\n data.type = 'video';\n }\n this.hls.trigger(Events.BUFFER_EOS, data);\n this.state = State.ENDED;\n return;\n }\n if (!this.buffering) {\n return;\n }\n\n // set next load level : this will trigger a playlist load if needed\n if (hls.loadLevel !== level && hls.manualLevel === -1) {\n this.log(`Adapting to level ${level} from level ${this.level}`);\n }\n this.level = hls.nextLoadLevel = level;\n const levelDetails = levelInfo.details;\n // if level info not retrieved yet, switch state and wait for level retrieval\n // if live playlist, ensure that new playlist has been refreshed to avoid loading/try to load\n // a useless and outdated fragment (that might even introduce load error if it is already out of the live playlist)\n if (!levelDetails || this.state === State.WAITING_LEVEL || this.waitForLive(levelInfo)) {\n this.level = level;\n this.state = State.WAITING_LEVEL;\n this.startFragRequested = false;\n return;\n }\n const bufferLen = bufferInfo.len;\n\n // compute max Buffer Length that we could get from this load level, based on level bitrate. don't buffer more than 60 MB and more than 30s\n const maxBufLen = this.getMaxBufferLength(levelInfo.maxBitrate);\n\n // Stay idle if we are still with buffer margins\n if (bufferLen >= maxBufLen) {\n return;\n }\n if (this.backtrackFragment && this.backtrackFragment.start > bufferInfo.end) {\n this.backtrackFragment = null;\n }\n const targetBufferTime = this.backtrackFragment ? this.backtrackFragment.start : bufferInfo.end;\n let frag = this.getNextFragment(targetBufferTime, levelDetails);\n // Avoid backtracking by loading an earlier segment in streams with segments that do not start with a key frame (flagged by `couldBacktrack`)\n if (this.couldBacktrack && !this.fragPrevious && frag && isMediaFragment(frag) && this.fragmentTracker.getState(frag) !== FragmentState.OK) {\n var _this$backtrackFragme;\n const backtrackSn = ((_this$backtrackFragme = this.backtrackFragment) != null ? _this$backtrackFragme : frag).sn;\n const fragIdx = backtrackSn - levelDetails.startSN;\n const backtrackFrag = levelDetails.fragments[fragIdx - 1];\n if (backtrackFrag && frag.cc === backtrackFrag.cc) {\n frag = backtrackFrag;\n this.fragmentTracker.removeFragment(backtrackFrag);\n }\n } else if (this.backtrackFragment && bufferInfo.len) {\n this.backtrackFragment = null;\n }\n // Avoid loop loading by using nextLoadPosition set for backtracking and skipping consecutive GAP tags\n if (frag && this.isLoopLoading(frag, targetBufferTime)) {\n const gapStart = frag.gap;\n if (!gapStart) {\n // Cleanup the fragment tracker before trying to find the next unbuffered fragment\n const type = this.audioOnly && !this.altAudio ? ElementaryStreamTypes.AUDIO : ElementaryStreamTypes.VIDEO;\n const mediaBuffer = (type === ElementaryStreamTypes.VIDEO ? this.videoBuffer : this.mediaBuffer) || this.media;\n if (mediaBuffer) {\n this.afterBufferFlushed(mediaBuffer, type, PlaylistLevelType.MAIN);\n }\n }\n frag = this.getNextFragmentLoopLoading(frag, levelDetails, bufferInfo, PlaylistLevelType.MAIN, maxBufLen);\n }\n if (!frag) {\n return;\n }\n if (this.exceedsMaxBuffer(bufferInfo, maxBufLen, frag)) {\n return;\n }\n if (frag.initSegment && !frag.initSegment.data && !this.bitrateTest) {\n frag = frag.initSegment;\n }\n this.loadFragment(frag, levelInfo, targetBufferTime);\n }\n loadFragment(frag, level, targetBufferTime) {\n // Check if fragment is not loaded\n const fragState = this.fragmentTracker.getState(frag);\n if (fragState === FragmentState.NOT_LOADED || fragState === FragmentState.PARTIAL) {\n if (!isMediaFragment(frag)) {\n this._loadInitSegment(frag, level);\n } else if (this.bitrateTest) {\n this.log(`Fragment ${frag.sn} of level ${frag.level} is being downloaded to test bitrate and will not be buffered`);\n this._loadBitrateTestFrag(frag, level);\n } else {\n super.loadFragment(frag, level, targetBufferTime);\n }\n } else {\n this.clearTrackerIfNeeded(frag);\n }\n }\n getBufferedFrag(position) {\n return this.fragmentTracker.getBufferedFrag(position, PlaylistLevelType.MAIN);\n }\n followingBufferedFrag(frag) {\n if (frag) {\n // try to get range of next fragment (500ms after this range)\n return this.getBufferedFrag(frag.end + 0.5);\n }\n return null;\n }\n\n /*\n on immediate level switch :\n - pause playback if playing\n - cancel any pending load request\n - and trigger a buffer flush\n */\n immediateLevelSwitch() {\n this.abortCurrentFrag();\n this.flushMainBuffer(0, Number.POSITIVE_INFINITY);\n if (this.altAudio !== 0) {\n var _this$getLevelDetails;\n // If behind the live window, remove audio too to keep buffered media aligned\n const liveWindowStart = ((_this$getLevelDetails = this.getLevelDetails()) == null ? void 0 : _this$getLevelDetails.fragmentStart) || 0;\n if (liveWindowStart > this.lastCurrentTime) {\n super.flushMainBuffer(0, Number.POSITIVE_INFINITY, 'audio');\n }\n }\n }\n\n /**\n * try to switch ASAP without breaking video playback:\n * in order to ensure smooth but quick level switching,\n * we need to find the next flushable buffer range\n * we should take into account new segment fetch time\n */\n nextLevelSwitch() {\n const {\n levels,\n media\n } = this;\n // ensure that media is defined and that metadata are available (to retrieve currentTime)\n if (media != null && media.readyState) {\n let fetchdelay;\n const fragPlayingCurrent = this.getAppendedFrag(media.currentTime);\n if (fragPlayingCurrent && fragPlayingCurrent.start > 1) {\n // flush buffer preceding current fragment (flush until current fragment start offset)\n // minus 1s to avoid video freezing, that could happen if we flush keyframe of current video ...\n this.flushMainBuffer(0, fragPlayingCurrent.start - 1);\n }\n const levelDetails = this.getLevelDetails();\n if (levelDetails != null && levelDetails.live) {\n const bufferInfo = this.getMainFwdBufferInfo();\n // Do not flush in live stream with low buffer\n if (!bufferInfo || bufferInfo.len < levelDetails.targetduration * 2) {\n return;\n }\n }\n if (!media.paused && levels) {\n // add a safety delay of 1s\n const nextLevelId = this.hls.nextLoadLevel;\n const nextLevel = levels[nextLevelId];\n const fragLastKbps = this.fragLastKbps;\n if (fragLastKbps && this.fragCurrent) {\n fetchdelay = this.fragCurrent.duration * nextLevel.maxBitrate / (1000 * fragLastKbps) + 1;\n } else {\n fetchdelay = 0;\n }\n } else {\n fetchdelay = 0;\n }\n // this.log('fetchdelay:'+fetchdelay);\n // find buffer range that will be reached once new fragment will be fetched\n const bufferedFrag = this.getBufferedFrag(media.currentTime + fetchdelay);\n if (bufferedFrag) {\n // we can flush buffer range following this one without stalling playback\n const nextBufferedFrag = this.followingBufferedFrag(bufferedFrag);\n if (nextBufferedFrag) {\n // if we are here, we can also cancel any loading/demuxing in progress, as they are useless\n this.abortCurrentFrag();\n // start flush position is in next buffered frag. Leave some padding for non-independent segments and smoother playback.\n const maxStart = nextBufferedFrag.maxStartPTS ? nextBufferedFrag.maxStartPTS : nextBufferedFrag.start;\n const fragDuration = nextBufferedFrag.duration;\n const startPts = Math.max(bufferedFrag.end, maxStart + Math.min(Math.max(fragDuration - this.config.maxFragLookUpTolerance, fragDuration * (this.couldBacktrack ? 0.5 : 0.125)), fragDuration * (this.couldBacktrack ? 0.75 : 0.25)));\n this.flushMainBuffer(startPts, Number.POSITIVE_INFINITY);\n }\n }\n }\n }\n abortCurrentFrag() {\n const fragCurrent = this.fragCurrent;\n this.fragCurrent = null;\n this.backtrackFragment = null;\n if (fragCurrent) {\n fragCurrent.abortRequests();\n this.fragmentTracker.removeFragment(fragCurrent);\n }\n switch (this.state) {\n case State.KEY_LOADING:\n case State.FRAG_LOADING:\n case State.FRAG_LOADING_WAITING_RETRY:\n case State.PARSING:\n case State.PARSED:\n this.state = State.IDLE;\n break;\n }\n this.nextLoadPosition = this.getLoadPosition();\n }\n flushMainBuffer(startOffset, endOffset) {\n super.flushMainBuffer(startOffset, endOffset, this.altAudio === 2 ? 'video' : null);\n }\n onMediaAttached(event, data) {\n super.onMediaAttached(event, data);\n const media = data.media;\n addEventListener(media, 'playing', this.onMediaPlaying);\n addEventListener(media, 'seeked', this.onMediaSeeked);\n }\n onMediaDetaching(event, data) {\n const {\n media\n } = this;\n if (media) {\n removeEventListener(media, 'playing', this.onMediaPlaying);\n removeEventListener(media, 'seeked', this.onMediaSeeked);\n }\n this.videoBuffer = null;\n this.fragPlaying = null;\n super.onMediaDetaching(event, data);\n const transferringMedia = !!data.transferMedia;\n if (transferringMedia) {\n return;\n }\n this._hasEnoughToStart = false;\n }\n onManifestLoading() {\n super.onManifestLoading();\n // reset buffer on manifest loading\n this.log('Trigger BUFFER_RESET');\n this.hls.trigger(Events.BUFFER_RESET, undefined);\n this.couldBacktrack = false;\n this.fragLastKbps = 0;\n this.fragPlaying = this.backtrackFragment = null;\n this.altAudio = 0;\n this.audioOnly = false;\n }\n onManifestParsed(event, data) {\n // detect if we have different kind of audio codecs used amongst playlists\n let aac = false;\n let heaac = false;\n for (let i = 0; i < data.levels.length; i++) {\n const codec = data.levels[i].audioCodec;\n if (codec) {\n aac = aac || codec.indexOf('mp4a.40.2') !== -1;\n heaac = heaac || codec.indexOf('mp4a.40.5') !== -1;\n }\n }\n this.audioCodecSwitch = aac && heaac && !changeTypeSupported();\n if (this.audioCodecSwitch) {\n this.log('Both AAC/HE-AAC audio found in levels; declaring level codec as HE-AAC');\n }\n this.levels = data.levels;\n this.startFragRequested = false;\n }\n onLevelLoading(event, data) {\n const {\n levels\n } = this;\n if (!levels || this.state !== State.IDLE) {\n return;\n }\n const level = data.levelInfo;\n if (!level.details || level.details.live && (this.levelLastLoaded !== level || level.details.expired) || this.waitForCdnTuneIn(level.details)) {\n this.state = State.WAITING_LEVEL;\n }\n }\n onLevelLoaded(event, data) {\n var _curLevel$details;\n const {\n levels,\n startFragRequested\n } = this;\n const newLevelId = data.level;\n const newDetails = data.details;\n const duration = newDetails.totalduration;\n if (!levels) {\n this.warn(`Levels were reset while loading level ${newLevelId}`);\n return;\n }\n this.log(`Level ${newLevelId} loaded [${newDetails.startSN},${newDetails.endSN}]${newDetails.lastPartSn ? `[part-${newDetails.lastPartSn}-${newDetails.lastPartIndex}]` : ''}, cc [${newDetails.startCC}, ${newDetails.endCC}] duration:${duration}`);\n const curLevel = data.levelInfo;\n const fragCurrent = this.fragCurrent;\n if (fragCurrent && (this.state === State.FRAG_LOADING || this.state === State.FRAG_LOADING_WAITING_RETRY)) {\n if (fragCurrent.level !== data.level && fragCurrent.loader) {\n this.abortCurrentFrag();\n }\n }\n let sliding = 0;\n if (newDetails.live || (_curLevel$details = curLevel.details) != null && _curLevel$details.live) {\n var _this$levelLastLoaded;\n this.checkLiveUpdate(newDetails);\n if (newDetails.deltaUpdateFailed) {\n return;\n }\n sliding = this.alignPlaylists(newDetails, curLevel.details, (_this$levelLastLoaded = this.levelLastLoaded) == null ? void 0 : _this$levelLastLoaded.details);\n }\n // override level info\n curLevel.details = newDetails;\n this.levelLastLoaded = curLevel;\n if (!startFragRequested) {\n this.setStartPosition(newDetails, sliding);\n }\n this.hls.trigger(Events.LEVEL_UPDATED, {\n details: newDetails,\n level: newLevelId\n });\n\n // only switch back to IDLE state if we were waiting for level to start downloading a new fragment\n if (this.state === State.WAITING_LEVEL) {\n if (this.waitForCdnTuneIn(newDetails)) {\n // Wait for Low-Latency CDN Tune-in\n return;\n }\n this.state = State.IDLE;\n }\n if (startFragRequested && newDetails.live) {\n this.synchronizeToLiveEdge(newDetails);\n }\n\n // trigger handler right now\n this.tick();\n }\n synchronizeToLiveEdge(levelDetails) {\n const {\n config,\n media\n } = this;\n if (!media) {\n return;\n }\n const liveSyncPosition = this.hls.liveSyncPosition;\n const currentTime = this.getLoadPosition();\n const start = levelDetails.fragmentStart;\n const end = levelDetails.edge;\n const withinSlidingWindow = currentTime >= start - config.maxFragLookUpTolerance && currentTime <= end;\n // Continue if we can seek forward to sync position or if current time is outside of sliding window\n if (liveSyncPosition !== null && media.duration > liveSyncPosition && (currentTime < liveSyncPosition || !withinSlidingWindow)) {\n // Continue if buffer is starving or if current time is behind max latency\n const maxLatency = config.liveMaxLatencyDuration !== undefined ? config.liveMaxLatencyDuration : config.liveMaxLatencyDurationCount * levelDetails.targetduration;\n if (!withinSlidingWindow && media.readyState < 4 || currentTime < end - maxLatency) {\n if (!this._hasEnoughToStart) {\n this.nextLoadPosition = liveSyncPosition;\n }\n // Only seek if ready and there is not a significant forward buffer available for playback\n if (media.readyState) {\n this.warn(`Playback: ${currentTime.toFixed(3)} is located too far from the end of live sliding playlist: ${end}, reset currentTime to : ${liveSyncPosition.toFixed(3)}`);\n if (this.config.liveSyncMode === 'buffered') {\n var _bufferInfo$buffered;\n const bufferInfo = BufferHelper.bufferInfo(media, liveSyncPosition, 0);\n if (!((_bufferInfo$buffered = bufferInfo.buffered) != null && _bufferInfo$buffered.length)) {\n media.currentTime = liveSyncPosition;\n return;\n }\n const isLiveSyncInBuffer = bufferInfo.start <= currentTime;\n if (isLiveSyncInBuffer) {\n media.currentTime = liveSyncPosition;\n return;\n }\n const {\n nextStart\n } = BufferHelper.bufferedInfo(bufferInfo.buffered, currentTime, 0);\n if (nextStart) {\n media.currentTime = nextStart;\n }\n } else {\n media.currentTime = liveSyncPosition;\n }\n }\n }\n }\n }\n _handleFragmentLoadProgress(data) {\n var _frag$initSegment;\n const frag = data.frag;\n const {\n part,\n payload\n } = data;\n const {\n levels\n } = this;\n if (!levels) {\n this.warn(`Levels were reset while fragment load was in progress. Fragment ${frag.sn} of level ${frag.level} will not be buffered`);\n return;\n }\n const currentLevel = levels[frag.level];\n if (!currentLevel) {\n this.warn(`Level ${frag.level} not found on progress`);\n return;\n }\n const details = currentLevel.details;\n if (!details) {\n this.warn(`Dropping fragment ${frag.sn} of level ${frag.level} after level details were reset`);\n this.fragmentTracker.removeFragment(frag);\n return;\n }\n const videoCodec = currentLevel.videoCodec;\n\n // time Offset is accurate if level PTS is known, or if playlist is not sliding (not live)\n const accurateTimeOffset = details.PTSKnown || !details.live;\n const initSegmentData = (_frag$initSegment = frag.initSegment) == null ? void 0 : _frag$initSegment.data;\n const audioCodec = this._getAudioCodec(currentLevel);\n\n // transmux the MPEG-TS data to ISO-BMFF segments\n // this.log(`Transmuxing ${frag.sn} of [${details.startSN} ,${details.endSN}],level ${frag.level}, cc ${frag.cc}`);\n const transmuxer = this.transmuxer = this.transmuxer || new TransmuxerInterface(this.hls, PlaylistLevelType.MAIN, this._handleTransmuxComplete.bind(this), this._handleTransmuxerFlush.bind(this));\n const partIndex = part ? part.index : -1;\n const partial = partIndex !== -1;\n const chunkMeta = new ChunkMetadata(frag.level, frag.sn, frag.stats.chunkCount, payload.byteLength, partIndex, partial);\n const initPTS = this.initPTS[frag.cc];\n transmuxer.push(payload, initSegmentData, audioCodec, videoCodec, frag, part, details.totalduration, accurateTimeOffset, chunkMeta, initPTS);\n }\n onAudioTrackSwitching(event, data) {\n const hls = this.hls;\n // if any URL found on new audio track, it is an alternate audio track\n const fromAltAudio = this.altAudio !== 0;\n const altAudio = useAlternateAudio(data.url, hls);\n // if we switch on main audio, ensure that main fragment scheduling is synced with media.buffered\n // don't do anything if we switch to alt audio: audio stream controller is handling it.\n // we will just have to change buffer scheduling on audioTrackSwitched\n if (!altAudio) {\n if (this.mediaBuffer !== this.media) {\n this.log('Switching on main audio, use media.buffered to schedule main fragment loading');\n this.mediaBuffer = this.media;\n const fragCurrent = this.fragCurrent;\n // we need to refill audio buffer from main: cancel any frag loading to speed up audio switch\n if (fragCurrent) {\n this.log('Switching to main audio track, cancel main fragment load');\n fragCurrent.abortRequests();\n this.fragmentTracker.removeFragment(fragCurrent);\n }\n // destroy transmuxer to force init segment generation (following audio switch)\n this.resetTransmuxer();\n // switch to IDLE state to load new fragment\n this.resetLoadingState();\n } else if (this.audioOnly) {\n // Reset audio transmuxer so when switching back to main audio we're not still appending where we left off\n this.resetTransmuxer();\n }\n // If switching from alt to main audio, flush all audio and trigger track switched\n if (fromAltAudio) {\n this.altAudio = 0;\n this.fragmentTracker.removeAllFragments();\n hls.once(Events.BUFFER_FLUSHED, () => {\n if (!this.hls) {\n return;\n }\n this.hls.trigger(Events.AUDIO_TRACK_SWITCHED, data);\n });\n hls.trigger(Events.BUFFER_FLUSHING, {\n startOffset: 0,\n endOffset: Number.POSITIVE_INFINITY,\n type: null\n });\n return;\n }\n hls.trigger(Events.AUDIO_TRACK_SWITCHED, data);\n } else {\n this.altAudio = 1;\n }\n }\n onAudioTrackSwitched(event, data) {\n const altAudio = useAlternateAudio(data.url, this.hls);\n if (altAudio) {\n const videoBuffer = this.videoBuffer;\n // if we switched on alternate audio, ensure that main fragment scheduling is synced with video sourcebuffer buffered\n if (videoBuffer && this.mediaBuffer !== videoBuffer) {\n this.log('Switching on alternate audio, use video.buffered to schedule main fragment loading');\n this.mediaBuffer = videoBuffer;\n }\n }\n this.altAudio = altAudio ? 2 : 0;\n this.tick();\n }\n onBufferCreated(event, data) {\n const tracks = data.tracks;\n let mediaTrack;\n let name;\n let alternate = false;\n for (const type in tracks) {\n const track = tracks[type];\n if (track.id === 'main') {\n name = type;\n mediaTrack = track;\n // keep video source buffer reference\n if (type === 'video') {\n const videoTrack = tracks[type];\n if (videoTrack) {\n this.videoBuffer = videoTrack.buffer;\n }\n }\n } else {\n alternate = true;\n }\n }\n if (alternate && mediaTrack) {\n this.log(`Alternate track found, use ${name}.buffered to schedule main fragment loading`);\n this.mediaBuffer = mediaTrack.buffer;\n } else {\n this.mediaBuffer = this.media;\n }\n }\n onFragBuffered(event, data) {\n const {\n frag,\n part\n } = data;\n const bufferedMainFragment = frag.type === PlaylistLevelType.MAIN;\n if (bufferedMainFragment) {\n if (this.fragContextChanged(frag)) {\n // If a level switch was requested while a fragment was buffering, it will emit the FRAG_BUFFERED event upon completion\n // Avoid setting state back to IDLE, since that will interfere with a level switch\n this.warn(`Fragment ${frag.sn}${part ? ' p: ' + part.index : ''} of level ${frag.level} finished buffering, but was aborted. state: ${this.state}`);\n if (this.state === State.PARSED) {\n this.state = State.IDLE;\n }\n return;\n }\n const stats = part ? part.stats : frag.stats;\n this.fragLastKbps = Math.round(8 * stats.total / (stats.buffering.end - stats.loading.first));\n if (isMediaFragment(frag)) {\n this.fragPrevious = frag;\n }\n this.fragBufferedComplete(frag, part);\n }\n const media = this.media;\n if (!media) {\n return;\n }\n if (!this._hasEnoughToStart && BufferHelper.getBuffered(media).length) {\n this._hasEnoughToStart = true;\n this.seekToStartPos();\n }\n if (bufferedMainFragment) {\n this.tick();\n }\n }\n get hasEnoughToStart() {\n return this._hasEnoughToStart;\n }\n onError(event, data) {\n var _data$context;\n if (data.fatal) {\n this.state = State.ERROR;\n return;\n }\n switch (data.details) {\n case ErrorDetails.FRAG_GAP:\n case ErrorDetails.FRAG_PARSING_ERROR:\n case ErrorDetails.FRAG_DECRYPT_ERROR:\n case ErrorDetails.FRAG_LOAD_ERROR:\n case ErrorDetails.FRAG_LOAD_TIMEOUT:\n case ErrorDetails.KEY_LOAD_ERROR:\n case ErrorDetails.KEY_LOAD_TIMEOUT:\n this.onFragmentOrKeyLoadError(PlaylistLevelType.MAIN, data);\n break;\n case ErrorDetails.LEVEL_LOAD_ERROR:\n case ErrorDetails.LEVEL_LOAD_TIMEOUT:\n case ErrorDetails.LEVEL_PARSING_ERROR:\n // in case of non fatal error while loading level, if level controller is not retrying to load level, switch back to IDLE\n if (!data.levelRetry && this.state === State.WAITING_LEVEL && ((_data$context = data.context) == null ? void 0 : _data$context.type) === PlaylistContextType.LEVEL) {\n this.state = State.IDLE;\n }\n break;\n case ErrorDetails.BUFFER_ADD_CODEC_ERROR:\n case ErrorDetails.BUFFER_APPEND_ERROR:\n if (data.parent !== 'main') {\n return;\n }\n if (this.reduceLengthAndFlushBuffer(data)) {\n this.resetLoadingState();\n }\n break;\n case ErrorDetails.BUFFER_FULL_ERROR:\n if (data.parent !== 'main') {\n return;\n }\n if (this.reduceLengthAndFlushBuffer(data)) {\n const isAssetPlayer = !this.config.interstitialsController && this.config.assetPlayerId;\n if (isAssetPlayer) {\n // Use currentTime in buffer estimate to prevent loading more until playback advances\n this._hasEnoughToStart = true;\n } else {\n this.flushMainBuffer(0, Number.POSITIVE_INFINITY);\n }\n }\n break;\n case ErrorDetails.INTERNAL_EXCEPTION:\n this.recoverWorkerError(data);\n break;\n }\n }\n onFragLoadEmergencyAborted() {\n this.state = State.IDLE;\n // if loadedmetadata is not set, it means that we are emergency switch down on first frag\n // in that case, reset startFragRequested flag\n if (!this._hasEnoughToStart) {\n this.startFragRequested = false;\n this.nextLoadPosition = this.lastCurrentTime;\n }\n this.tickImmediate();\n }\n onBufferFlushed(event, {\n type\n }) {\n if (type !== ElementaryStreamTypes.AUDIO || !this.altAudio) {\n const mediaBuffer = (type === ElementaryStreamTypes.VIDEO ? this.videoBuffer : this.mediaBuffer) || this.media;\n if (mediaBuffer) {\n this.afterBufferFlushed(mediaBuffer, type, PlaylistLevelType.MAIN);\n this.tick();\n }\n }\n }\n onLevelsUpdated(event, data) {\n if (this.level > -1 && this.fragCurrent) {\n this.level = this.fragCurrent.level;\n if (this.level === -1) {\n this.resetWhenMissingContext(this.fragCurrent);\n }\n }\n this.levels = data.levels;\n }\n swapAudioCodec() {\n this.audioCodecSwap = !this.audioCodecSwap;\n }\n\n /**\n * Seeks to the set startPosition if not equal to the mediaElement's current time.\n */\n seekToStartPos() {\n const {\n media\n } = this;\n if (!media) {\n return;\n }\n const currentTime = media.currentTime;\n let startPosition = this.startPosition;\n // only adjust currentTime if different from startPosition or if startPosition not buffered\n // at that stage, there should be only one buffered range, as we reach that code after first fragment has been buffered\n if (startPosition >= 0 && currentTime < startPosition) {\n if (media.seeking) {\n this.log(`could not seek to ${startPosition}, already seeking at ${currentTime}`);\n return;\n }\n\n // Offset start position by timeline offset\n const timelineOffset = this.timelineOffset;\n if (timelineOffset && startPosition) {\n startPosition += timelineOffset;\n }\n const details = this.getLevelDetails();\n const buffered = BufferHelper.getBuffered(media);\n const bufferStart = buffered.length ? buffered.start(0) : 0;\n const delta = bufferStart - startPosition;\n const skipTolerance = Math.max(this.config.maxBufferHole, this.config.maxFragLookUpTolerance);\n if (this.config.startOnSegmentBoundary || delta > 0 && (delta < skipTolerance || this.loadingParts && delta < 2 * ((details == null ? void 0 : details.partTarget) || 0))) {\n this.log(`adjusting start position by ${delta} to match buffer start`);\n startPosition += delta;\n this.startPosition = startPosition;\n }\n if (currentTime < startPosition) {\n this.log(`seek to target start position ${startPosition} from current time ${currentTime} buffer start ${bufferStart}`);\n media.currentTime = startPosition;\n }\n }\n }\n _getAudioCodec(currentLevel) {\n let audioCodec = this.config.defaultAudioCodec || currentLevel.audioCodec;\n if (this.audioCodecSwap && audioCodec) {\n this.log('Swapping audio codec');\n if (audioCodec.indexOf('mp4a.40.5') !== -1) {\n audioCodec = 'mp4a.40.2';\n } else {\n audioCodec = 'mp4a.40.5';\n }\n }\n return audioCodec;\n }\n _loadBitrateTestFrag(fragment, level) {\n fragment.bitrateTest = true;\n this._doFragLoad(fragment, level).then(data => {\n const {\n hls\n } = this;\n const frag = data == null ? void 0 : data.frag;\n if (!frag || this.fragContextChanged(frag)) {\n return;\n }\n level.fragmentError = 0;\n this.state = State.IDLE;\n this.startFragRequested = false;\n this.bitrateTest = false;\n const stats = frag.stats;\n // Bitrate tests fragments are neither parsed nor buffered\n stats.parsing.start = stats.parsing.end = stats.buffering.start = stats.buffering.end = self.performance.now();\n hls.trigger(Events.FRAG_LOADED, data);\n frag.bitrateTest = false;\n }).catch(reason => {\n if (this.state === State.STOPPED || this.state === State.ERROR) {\n return;\n }\n this.warn(reason);\n this.resetFragmentLoading(fragment);\n });\n }\n _handleTransmuxComplete(transmuxResult) {\n const id = this.playlistType;\n const {\n hls\n } = this;\n const {\n remuxResult,\n chunkMeta\n } = transmuxResult;\n const context = this.getCurrentContext(chunkMeta);\n if (!context) {\n this.resetWhenMissingContext(chunkMeta);\n return;\n }\n const {\n frag,\n part,\n level\n } = context;\n const {\n video,\n text,\n id3,\n initSegment\n } = remuxResult;\n const {\n details\n } = level;\n // The audio-stream-controller handles audio buffering if Hls.js is playing an alternate audio track\n const audio = this.altAudio ? undefined : remuxResult.audio;\n\n // Check if the current fragment has been aborted. We check this by first seeing if we're still playing the current level.\n // If we are, subsequently check if the currently loading fragment (fragCurrent) has changed.\n if (this.fragContextChanged(frag)) {\n this.fragmentTracker.removeFragment(frag);\n return;\n }\n this.state = State.PARSING;\n if (initSegment) {\n const tracks = initSegment.tracks;\n if (tracks) {\n const mapFragment = frag.initSegment || frag;\n if (this.unhandledEncryptionError(initSegment, frag)) {\n return;\n }\n this._bufferInitSegment(level, tracks, mapFragment, chunkMeta);\n hls.trigger(Events.FRAG_PARSING_INIT_SEGMENT, {\n frag: mapFragment,\n id,\n tracks\n });\n }\n const baseTime = initSegment.initPTS;\n const timescale = initSegment.timescale;\n const initPTS = this.initPTS[frag.cc];\n if (isFiniteNumber(baseTime) && (!initPTS || initPTS.baseTime !== baseTime || initPTS.timescale !== timescale)) {\n const trackId = initSegment.trackId;\n this.initPTS[frag.cc] = {\n baseTime,\n timescale,\n trackId\n };\n hls.trigger(Events.INIT_PTS_FOUND, {\n frag,\n id,\n initPTS: baseTime,\n timescale,\n trackId\n });\n }\n }\n\n // Avoid buffering if backtracking this fragment\n if (video && details) {\n if (audio && video.type === 'audiovideo') {\n this.logMuxedErr(frag);\n }\n const prevFrag = details.fragments[frag.sn - 1 - details.startSN];\n const isFirstFragment = frag.sn === details.startSN;\n const isFirstInDiscontinuity = !prevFrag || frag.cc > prevFrag.cc;\n if (remuxResult.independent !== false) {\n const {\n startPTS,\n endPTS,\n startDTS,\n endDTS\n } = video;\n if (part) {\n part.elementaryStreams[video.type] = {\n startPTS,\n endPTS,\n startDTS,\n endDTS\n };\n } else {\n if (video.firstKeyFrame && video.independent && chunkMeta.id === 1 && !isFirstInDiscontinuity) {\n this.couldBacktrack = true;\n }\n if (video.dropped && video.independent) {\n // Backtrack if dropped frames create a gap after currentTime\n\n const bufferInfo = this.getMainFwdBufferInfo();\n const targetBufferTime = (bufferInfo ? bufferInfo.end : this.getLoadPosition()) + this.config.maxBufferHole;\n const startTime = video.firstKeyFramePTS ? video.firstKeyFramePTS : startPTS;\n if (!isFirstFragment && targetBufferTime < startTime - this.config.maxBufferHole && !isFirstInDiscontinuity) {\n this.backtrack(frag);\n return;\n } else if (isFirstInDiscontinuity) {\n // Mark segment with a gap to avoid loop loading\n frag.gap = true;\n }\n // Set video stream start to fragment start so that truncated samples do not distort the timeline, and mark it partial\n frag.setElementaryStreamInfo(video.type, frag.start, endPTS, frag.start, endDTS, true);\n } else if (isFirstFragment && startPTS - (details.appliedTimelineOffset || 0) > MAX_START_GAP_JUMP) {\n // Mark segment with a gap to skip large start gap\n frag.gap = true;\n }\n }\n frag.setElementaryStreamInfo(video.type, startPTS, endPTS, startDTS, endDTS);\n if (this.backtrackFragment) {\n this.backtrackFragment = frag;\n }\n this.bufferFragmentData(video, frag, part, chunkMeta, isFirstFragment || isFirstInDiscontinuity);\n } else if (isFirstFragment || isFirstInDiscontinuity) {\n // Mark segment with a gap to avoid loop loading\n frag.gap = true;\n } else {\n this.backtrack(frag);\n return;\n }\n }\n if (audio) {\n const {\n startPTS,\n endPTS,\n startDTS,\n endDTS\n } = audio;\n if (part) {\n part.elementaryStreams[ElementaryStreamTypes.AUDIO] = {\n startPTS,\n endPTS,\n startDTS,\n endDTS\n };\n }\n frag.setElementaryStreamInfo(ElementaryStreamTypes.AUDIO, startPTS, endPTS, startDTS, endDTS);\n this.bufferFragmentData(audio, frag, part, chunkMeta);\n }\n if (details && id3 != null && id3.samples.length) {\n const emittedID3 = {\n id,\n frag,\n details,\n samples: id3.samples\n };\n hls.trigger(Events.FRAG_PARSING_METADATA, emittedID3);\n }\n if (details && text) {\n const emittedText = {\n id,\n frag,\n details,\n samples: text.samples\n };\n hls.trigger(Events.FRAG_PARSING_USERDATA, emittedText);\n }\n }\n logMuxedErr(frag) {\n this.warn(`${isMediaFragment(frag) ? 'Media' : 'Init'} segment with muxed audiovideo where only video expected: ${frag.url}`);\n }\n _bufferInitSegment(currentLevel, tracks, frag, chunkMeta) {\n if (this.state !== State.PARSING) {\n return;\n }\n this.audioOnly = !!tracks.audio && !tracks.video;\n\n // if audio track is expected to come from audio stream controller, discard any coming from main\n if (this.altAudio && !this.audioOnly) {\n delete tracks.audio;\n if (tracks.audiovideo) {\n this.logMuxedErr(frag);\n }\n }\n // include levelCodec in audio and video tracks\n const {\n audio,\n video,\n audiovideo\n } = tracks;\n if (audio) {\n const levelCodec = currentLevel.audioCodec;\n let audioCodec = pickMostCompleteCodecName(audio.codec, levelCodec);\n // Add level and profile to make up for remuxer not being able to parse full codec\n // (logger warning \"Unhandled audio codec...\")\n if (audioCodec === 'mp4a') {\n audioCodec = 'mp4a.40.5';\n }\n // Handle `audioCodecSwitch`\n const ua = navigator.userAgent.toLowerCase();\n if (this.audioCodecSwitch) {\n if (audioCodec) {\n if (audioCodec.indexOf('mp4a.40.5') !== -1) {\n audioCodec = 'mp4a.40.2';\n } else {\n audioCodec = 'mp4a.40.5';\n }\n }\n // In the case that AAC and HE-AAC audio codecs are signalled in manifest,\n // force HE-AAC, as it seems that most browsers prefers it.\n // don't force HE-AAC if mono stream, or in Firefox\n const audioMetadata = audio.metadata;\n if (audioMetadata && 'channelCount' in audioMetadata && (audioMetadata.channelCount || 1) !== 1 && ua.indexOf('firefox') === -1) {\n audioCodec = 'mp4a.40.5';\n }\n }\n // HE-AAC is broken on Android, always signal audio codec as AAC even if variant manifest states otherwise\n if (audioCodec && audioCodec.indexOf('mp4a.40.5') !== -1 && ua.indexOf('android') !== -1 && audio.container !== 'audio/mpeg') {\n // Exclude mpeg audio\n audioCodec = 'mp4a.40.2';\n this.log(`Android: force audio codec to ${audioCodec}`);\n }\n if (levelCodec && levelCodec !== audioCodec) {\n this.log(`Swapping manifest audio codec \"${levelCodec}\" for \"${audioCodec}\"`);\n }\n audio.levelCodec = audioCodec;\n audio.id = PlaylistLevelType.MAIN;\n this.log(`Init audio buffer, container:${audio.container}, codecs[selected/level/parsed]=[${audioCodec || ''}/${levelCodec || ''}/${audio.codec}]`);\n delete tracks.audiovideo;\n }\n if (video) {\n video.levelCodec = currentLevel.videoCodec;\n video.id = PlaylistLevelType.MAIN;\n const parsedVideoCodec = video.codec;\n if ((parsedVideoCodec == null ? void 0 : parsedVideoCodec.length) === 4) {\n // Make up for passthrough-remuxer not being able to parse full codec\n // (logger warning \"Unhandled video codec...\")\n switch (parsedVideoCodec) {\n case 'hvc1':\n case 'hev1':\n video.codec = 'hvc1.1.6.L120.90';\n break;\n case 'av01':\n video.codec = 'av01.0.04M.08';\n break;\n case 'avc1':\n video.codec = 'avc1.42e01e';\n break;\n }\n }\n this.log(`Init video buffer, container:${video.container}, codecs[level/parsed]=[${currentLevel.videoCodec || ''}/${parsedVideoCodec}]${video.codec !== parsedVideoCodec ? ' parsed-corrected=' + video.codec : ''}${video.supplemental ? ' supplemental=' + video.supplemental : ''}`);\n delete tracks.audiovideo;\n }\n if (audiovideo) {\n this.log(`Init audiovideo buffer, container:${audiovideo.container}, codecs[level/parsed]=[${currentLevel.codecs}/${audiovideo.codec}]`);\n delete tracks.video;\n delete tracks.audio;\n }\n const trackTypes = Object.keys(tracks);\n if (trackTypes.length) {\n this.hls.trigger(Events.BUFFER_CODECS, tracks);\n if (!this.hls) {\n // Exit after fatal tracks error\n return;\n }\n // loop through tracks that are going to be provided to bufferController\n trackTypes.forEach(trackName => {\n const track = tracks[trackName];\n const initSegment = track.initSegment;\n if (initSegment != null && initSegment.byteLength) {\n this.hls.trigger(Events.BUFFER_APPENDING, {\n type: trackName,\n data: initSegment,\n frag,\n part: null,\n chunkMeta,\n parent: frag.type\n });\n }\n });\n }\n // trigger handler right now\n this.tickImmediate();\n }\n getMainFwdBufferInfo() {\n // Observe video SourceBuffer (this.mediaBuffer) only when alt-audio is used, otherwise observe combined media buffer\n const bufferOutput = this.mediaBuffer && this.altAudio === 2 ? this.mediaBuffer : this.media;\n return this.getFwdBufferInfo(bufferOutput, PlaylistLevelType.MAIN);\n }\n get maxBufferLength() {\n const {\n levels,\n level\n } = this;\n const levelInfo = levels == null ? void 0 : levels[level];\n if (!levelInfo) {\n return this.config.maxBufferLength;\n }\n return this.getMaxBufferLength(levelInfo.maxBitrate);\n }\n backtrack(frag) {\n this.couldBacktrack = true;\n // Causes findFragments to backtrack through fragments to find the keyframe\n this.backtrackFragment = frag;\n this.resetTransmuxer();\n this.flushBufferGap(frag);\n this.fragmentTracker.removeFragment(frag);\n this.fragPrevious = null;\n this.nextLoadPosition = frag.start;\n this.state = State.IDLE;\n }\n checkFragmentChanged() {\n const video = this.media;\n let fragPlayingCurrent = null;\n if (video && video.readyState > 1 && video.seeking === false) {\n const currentTime = video.currentTime;\n /* if video element is in seeked state, currentTime can only increase.\n (assuming that playback rate is positive ...)\n As sometimes currentTime jumps back to zero after a\n media decode error, check this, to avoid seeking back to\n wrong position after a media decode error\n */\n\n if (BufferHelper.isBuffered(video, currentTime)) {\n fragPlayingCurrent = this.getAppendedFrag(currentTime);\n } else if (BufferHelper.isBuffered(video, currentTime + 0.1)) {\n /* ensure that FRAG_CHANGED event is triggered at startup,\n when first video frame is displayed and playback is paused.\n add a tolerance of 100ms, in case current position is not buffered,\n check if current pos+100ms is buffered and use that buffer range\n for FRAG_CHANGED event reporting */\n fragPlayingCurrent = this.getAppendedFrag(currentTime + 0.1);\n }\n if (fragPlayingCurrent) {\n this.backtrackFragment = null;\n const fragPlaying = this.fragPlaying;\n const fragCurrentLevel = fragPlayingCurrent.level;\n if (!fragPlaying || fragPlayingCurrent.sn !== fragPlaying.sn || fragPlaying.level !== fragCurrentLevel) {\n this.fragPlaying = fragPlayingCurrent;\n this.hls.trigger(Events.FRAG_CHANGED, {\n frag: fragPlayingCurrent\n });\n if (!fragPlaying || fragPlaying.level !== fragCurrentLevel) {\n this.hls.trigger(Events.LEVEL_SWITCHED, {\n level: fragCurrentLevel\n });\n }\n }\n }\n }\n }\n get nextLevel() {\n const frag = this.nextBufferedFrag;\n if (frag) {\n return frag.level;\n }\n return -1;\n }\n get currentFrag() {\n var _this$media2;\n if (this.fragPlaying) {\n return this.fragPlaying;\n }\n const currentTime = ((_this$media2 = this.media) == null ? void 0 : _this$media2.currentTime) || this.lastCurrentTime;\n if (isFiniteNumber(currentTime)) {\n return this.getAppendedFrag(currentTime);\n }\n return null;\n }\n get currentProgramDateTime() {\n var _this$media3;\n const currentTime = ((_this$media3 = this.media) == null ? void 0 : _this$media3.currentTime) || this.lastCurrentTime;\n if (isFiniteNumber(currentTime)) {\n const details = this.getLevelDetails();\n const frag = this.currentFrag || (details ? findFragmentByPTS(null, details.fragments, currentTime) : null);\n if (frag) {\n const programDateTime = frag.programDateTime;\n if (programDateTime !== null) {\n const epocMs = programDateTime + (currentTime - frag.start) * 1000;\n return new Date(epocMs);\n }\n }\n }\n return null;\n }\n get currentLevel() {\n const frag = this.currentFrag;\n if (frag) {\n return frag.level;\n }\n return -1;\n }\n get nextBufferedFrag() {\n const frag = this.currentFrag;\n if (frag) {\n return this.followingBufferedFrag(frag);\n }\n return null;\n }\n get forceStartLoad() {\n return this._forceStartLoad;\n }\n}\n\nclass KeyLoader extends Logger {\n constructor(config, logger) {\n super('key-loader', logger);\n this.config = void 0;\n this.keyIdToKeyInfo = {};\n this.emeController = null;\n this.config = config;\n }\n abort(type) {\n for (const id in this.keyIdToKeyInfo) {\n const loader = this.keyIdToKeyInfo[id].loader;\n if (loader) {\n var _loader$context;\n if (type && type !== ((_loader$context = loader.context) == null ? void 0 : _loader$context.frag.type)) {\n return;\n }\n loader.abort();\n }\n }\n }\n detach() {\n for (const id in this.keyIdToKeyInfo) {\n const keyInfo = this.keyIdToKeyInfo[id];\n // Remove cached EME keys on detach\n if (keyInfo.mediaKeySessionContext || keyInfo.decryptdata.isCommonEncryption) {\n delete this.keyIdToKeyInfo[id];\n }\n }\n }\n destroy() {\n this.detach();\n for (const id in this.keyIdToKeyInfo) {\n const loader = this.keyIdToKeyInfo[id].loader;\n if (loader) {\n loader.destroy();\n }\n }\n this.keyIdToKeyInfo = {};\n }\n createKeyLoadError(frag, details = ErrorDetails.KEY_LOAD_ERROR, error, networkDetails, response) {\n return new LoadError({\n type: ErrorTypes.NETWORK_ERROR,\n details,\n fatal: false,\n frag,\n response,\n error,\n networkDetails\n });\n }\n loadClear(loadingFrag, encryptedFragments, startFragRequested) {\n if (this.emeController && this.config.emeEnabled && !this.emeController.getSelectedKeySystemFormats().length) {\n // Access key-system with nearest key on start (loading frag is unencrypted)\n if (encryptedFragments.length) {\n for (let i = 0, l = encryptedFragments.length; i < l; i++) {\n const frag = encryptedFragments[i];\n // Loading at or before segment with EXT-X-KEY, or first frag loading and last EXT-X-KEY\n if (loadingFrag.cc <= frag.cc && (!isMediaFragment(loadingFrag) || !isMediaFragment(frag) || loadingFrag.sn < frag.sn) || !startFragRequested && i == l - 1) {\n return this.emeController.selectKeySystemFormat(frag).then(keySystemFormat => {\n if (!this.emeController) {\n return;\n }\n frag.setKeyFormat(keySystemFormat);\n const keySystem = keySystemFormatToKeySystemDomain(keySystemFormat);\n if (keySystem) {\n return this.emeController.getKeySystemAccess([keySystem]);\n }\n });\n }\n }\n }\n if (this.config.requireKeySystemAccessOnStart) {\n const keySystemsInConfig = getKeySystemsForConfig(this.config);\n if (keySystemsInConfig.length) {\n return this.emeController.getKeySystemAccess(keySystemsInConfig);\n }\n }\n }\n return null;\n }\n load(frag) {\n if (!frag.decryptdata && frag.encrypted && this.emeController && this.config.emeEnabled) {\n // Multiple keys, but none selected, resolve in eme-controller\n return this.emeController.selectKeySystemFormat(frag).then(keySystemFormat => {\n return this.loadInternal(frag, keySystemFormat);\n });\n }\n return this.loadInternal(frag);\n }\n loadInternal(frag, keySystemFormat) {\n var _keyInfo, _keyInfo2;\n if (keySystemFormat) {\n frag.setKeyFormat(keySystemFormat);\n }\n const decryptdata = frag.decryptdata;\n if (!decryptdata) {\n const error = new Error(keySystemFormat ? `Expected frag.decryptdata to be defined after setting format ${keySystemFormat}` : `Missing decryption data on fragment in onKeyLoading (emeEnabled with controller: ${this.emeController && this.config.emeEnabled})`);\n return Promise.reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_ERROR, error));\n }\n const uri = decryptdata.uri;\n if (!uri) {\n return Promise.reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_ERROR, new Error(`Invalid key URI: \"${uri}\"`)));\n }\n const id = getKeyId(decryptdata);\n let keyInfo = this.keyIdToKeyInfo[id];\n if ((_keyInfo = keyInfo) != null && _keyInfo.decryptdata.key) {\n decryptdata.key = keyInfo.decryptdata.key;\n return Promise.resolve({\n frag,\n keyInfo\n });\n }\n // Return key load promise once it has a mediakey session with an usable key status\n if (this.emeController && (_keyInfo2 = keyInfo) != null && _keyInfo2.keyLoadPromise) {\n const keyStatus = this.emeController.getKeyStatus(keyInfo.decryptdata);\n switch (keyStatus) {\n case 'usable':\n case 'usable-in-future':\n return keyInfo.keyLoadPromise.then(keyLoadedData => {\n // Return the correct fragment with updated decryptdata key and loaded keyInfo\n const {\n keyInfo\n } = keyLoadedData;\n decryptdata.key = keyInfo.decryptdata.key;\n return {\n frag,\n keyInfo\n };\n });\n }\n // If we have a key session and status and it is not pending or usable, continue\n // This will go back to the eme-controller for expired keys to get a new keyLoadPromise\n }\n\n // Load the key or return the loading promise\n this.log(`${this.keyIdToKeyInfo[id] ? 'Rel' : 'L'}oading${decryptdata.keyId ? ' keyId: ' + arrayToHex(decryptdata.keyId) : ''} URI: ${decryptdata.uri} from ${frag.type} ${frag.level}`);\n keyInfo = this.keyIdToKeyInfo[id] = {\n decryptdata,\n keyLoadPromise: null,\n loader: null,\n mediaKeySessionContext: null\n };\n switch (decryptdata.method) {\n case 'SAMPLE-AES':\n case 'SAMPLE-AES-CENC':\n case 'SAMPLE-AES-CTR':\n if (decryptdata.keyFormat === 'identity') {\n // loadKeyHTTP handles http(s) and data URLs\n return this.loadKeyHTTP(keyInfo, frag);\n }\n return this.loadKeyEME(keyInfo, frag);\n case 'AES-128':\n case 'AES-256':\n case 'AES-256-CTR':\n return this.loadKeyHTTP(keyInfo, frag);\n default:\n return Promise.reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_ERROR, new Error(`Key supplied with unsupported METHOD: \"${decryptdata.method}\"`)));\n }\n }\n loadKeyEME(keyInfo, frag) {\n const keyLoadedData = {\n frag,\n keyInfo\n };\n if (this.emeController && this.config.emeEnabled) {\n var _frag$initSegment;\n if (!keyInfo.decryptdata.keyId && (_frag$initSegment = frag.initSegment) != null && _frag$initSegment.data) {\n const keyIds = parseKeyIdsFromTenc(frag.initSegment.data);\n if (keyIds.length) {\n let keyId = keyIds[0];\n if (keyId.some(b => b !== 0)) {\n this.log(`Using keyId found in init segment ${arrayToHex(keyId)}`);\n LevelKey.setKeyIdForUri(keyInfo.decryptdata.uri, keyId);\n } else {\n keyId = LevelKey.addKeyIdForUri(keyInfo.decryptdata.uri);\n this.log(`Generating keyId to patch media ${arrayToHex(keyId)}`);\n }\n keyInfo.decryptdata.keyId = keyId;\n }\n }\n if (!keyInfo.decryptdata.keyId && !isMediaFragment(frag)) {\n // Resolve so that unencrypted init segment is loaded\n // key id is extracted from tenc box when processing key for next segment above\n return Promise.resolve(keyLoadedData);\n }\n const keySessionContextPromise = this.emeController.loadKey(keyLoadedData);\n return (keyInfo.keyLoadPromise = keySessionContextPromise.then(keySessionContext => {\n keyInfo.mediaKeySessionContext = keySessionContext;\n return keyLoadedData;\n })).catch(error => {\n // Remove promise for license renewal or retry\n keyInfo.keyLoadPromise = null;\n if ('data' in error) {\n error.data.frag = frag;\n }\n throw error;\n });\n }\n return Promise.resolve(keyLoadedData);\n }\n loadKeyHTTP(keyInfo, frag) {\n const config = this.config;\n const Loader = config.loader;\n const keyLoader = new Loader(config);\n frag.keyLoader = keyInfo.loader = keyLoader;\n return keyInfo.keyLoadPromise = new Promise((resolve, reject) => {\n const loaderContext = {\n keyInfo,\n frag,\n responseType: 'arraybuffer',\n url: keyInfo.decryptdata.uri\n };\n\n // maxRetry is 0 so that instead of retrying the same key on the same variant multiple times,\n // key-loader will trigger an error and rely on stream-controller to handle retry logic.\n // this will also align retry logic with fragment-loader\n const loadPolicy = config.keyLoadPolicy.default;\n const loaderConfig = {\n loadPolicy,\n timeout: loadPolicy.maxLoadTimeMs,\n maxRetry: 0,\n retryDelay: 0,\n maxRetryDelay: 0\n };\n const loaderCallbacks = {\n onSuccess: (response, stats, context, networkDetails) => {\n const {\n frag,\n keyInfo\n } = context;\n const id = getKeyId(keyInfo.decryptdata);\n if (!frag.decryptdata || keyInfo !== this.keyIdToKeyInfo[id]) {\n return reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_ERROR, new Error('after key load, decryptdata unset or changed'), networkDetails));\n }\n keyInfo.decryptdata.key = frag.decryptdata.key = new Uint8Array(response.data);\n\n // detach fragment key loader on load success\n frag.keyLoader = null;\n keyInfo.loader = null;\n resolve({\n frag,\n keyInfo\n });\n },\n onError: (response, context, networkDetails, stats) => {\n this.resetLoader(context);\n reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_ERROR, new Error(`HTTP Error ${response.code} loading key ${response.text}`), networkDetails, _objectSpread2({\n url: loaderContext.url,\n data: undefined\n }, response)));\n },\n onTimeout: (stats, context, networkDetails) => {\n this.resetLoader(context);\n reject(this.createKeyLoadError(frag, ErrorDetails.KEY_LOAD_TIMEOUT, new Error('key loading timed out'), networkDetails));\n },\n onAbort: (stats, context, networkDetails) => {\n this.resetLoader(context);\n reject(this.createKeyLoadError(frag, ErrorDetails.INTERNAL_ABORTED, new Error('key loading aborted'), networkDetails));\n }\n };\n keyLoader.load(loaderContext, loaderConfig, loaderCallbacks);\n });\n }\n resetLoader(context) {\n const {\n frag,\n keyInfo,\n url: uri\n } = context;\n const loader = keyInfo.loader;\n if (frag.keyLoader === loader) {\n frag.keyLoader = null;\n keyInfo.loader = null;\n }\n const id = getKeyId(keyInfo.decryptdata) || uri;\n delete this.keyIdToKeyInfo[id];\n if (loader) {\n loader.destroy();\n }\n }\n}\nfunction getKeyId(decryptdata) {\n if (decryptdata.keyFormat !== KeySystemFormats.FAIRPLAY) {\n const keyId = decryptdata.keyId;\n if (keyId) {\n return arrayToHex(keyId);\n }\n }\n return decryptdata.uri;\n}\n\nfunction mapContextToLevelType(context) {\n const {\n type\n } = context;\n switch (type) {\n case PlaylistContextType.AUDIO_TRACK:\n return PlaylistLevelType.AUDIO;\n case PlaylistContextType.SUBTITLE_TRACK:\n return PlaylistLevelType.SUBTITLE;\n default:\n return PlaylistLevelType.MAIN;\n }\n}\nfunction getResponseUrl(response, context) {\n let url = response.url;\n // responseURL not supported on some browsers (it is used to detect URL redirection)\n // data-uri mode also not supported (but no need to detect redirection)\n if (url === undefined || url.indexOf('data:') === 0) {\n // fallback to initial URL\n url = context.url;\n }\n return url;\n}\nclass PlaylistLoader {\n constructor(hls) {\n this.hls = void 0;\n this.loaders = Object.create(null);\n this.variableList = null;\n this.onManifestLoaded = this.checkAutostartLoad;\n this.hls = hls;\n this.registerListeners();\n }\n startLoad(startPosition) {}\n stopLoad() {\n this.destroyInternalLoaders();\n }\n registerListeners() {\n const {\n hls\n } = this;\n hls.on(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.on(Events.LEVEL_LOADING, this.onLevelLoading, this);\n hls.on(Events.AUDIO_TRACK_LOADING, this.onAudioTrackLoading, this);\n hls.on(Events.SUBTITLE_TRACK_LOADING, this.onSubtitleTrackLoading, this);\n hls.on(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n }\n unregisterListeners() {\n const {\n hls\n } = this;\n hls.off(Events.MANIFEST_LOADING, this.onManifestLoading, this);\n hls.off(Events.LEVEL_LOADING, this.onLevelLoading, this);\n hls.off(Events.AUDIO_TRACK_LOADING, this.onAudioTrackLoading, this);\n hls.off(Events.SUBTITLE_TRACK_LOADING, this.onSubtitleTrackLoading, this);\n hls.off(Events.LEVELS_UPDATED, this.onLevelsUpdated, this);\n }\n\n /**\n * Returns defaults or configured loader-type overloads (pLoader and loader config params)\n */\n createInternalLoader(context) {\n const config = this.hls.config;\n const PLoader = config.pLoader;\n const Loader = config.loader;\n const InternalLoader = PLoader || Loader;\n const loader = new InternalLoader(config);\n this.loaders[context.type] = loader;\n return loader;\n }\n getInternalLoader(context) {\n return this.loaders[context.type];\n }\n resetInternalLoader(contextType) {\n if (this.loaders[contextType]) {\n delete this.loaders[contextType];\n }\n }\n\n /**\n * Call `destroy` on all internal loader instances mapped (one per context type)\n */\n destroyInternalLoaders() {\n for (const contextType in this.loaders) {\n const loader = this.loaders[contextType];\n if (loader) {\n loader.destroy();\n }\n this.resetInternalLoader(contextType);\n }\n }\n destroy() {\n this.variableList = null;\n this.unregisterListeners();\n this.destroyInternalLoaders();\n }\n onManifestLoading(event, data) {\n const {\n url\n } = data;\n this.variableList = null;\n this.load({\n id: null,\n level: 0,\n responseType: 'text',\n type: PlaylistContextType.MANIFEST,\n url,\n deliveryDirectives: null,\n levelOrTrack: null\n });\n }\n onLevelLoading(event, data) {\n const {\n id,\n level,\n pathwayId,\n url,\n deliveryDirectives,\n levelInfo\n } = data;\n this.load({\n id,\n level,\n pathwayId,\n responseType: 'text',\n type: PlaylistContextType.LEVEL,\n url,\n deliveryDirectives,\n levelOrTrack: levelInfo\n });\n }\n onAudioTrackLoading(event, data) {\n const {\n id,\n groupId,\n url,\n deliveryDirectives,\n track\n } = data;\n this.load({\n id,\n groupId,\n level: null,\n responseType: 'text',\n type: PlaylistContextType.AUDIO_TRACK,\n url,\n deliveryDirectives,\n levelOrTrack: track\n });\n }\n onSubtitleTrackLoading(event, data) {\n const {\n id,\n groupId,\n url,\n deliveryDirectives,\n track\n } = data;\n this.load({\n id,\n groupId,\n level: null,\n responseType: 'text',\n type: PlaylistContextType.SUBTITLE_TRACK,\n url,\n deliveryDirectives,\n levelOrTrack: track\n });\n }\n onLevelsUpdated(event, data) {\n // abort and delete loader of removed levels\n const loader = this.loaders[PlaylistContextType.LEVEL];\n if (loader) {\n const context = loader.context;\n if (context && !data.levels.some(lvl => lvl === context.levelOrTrack)) {\n loader.abort();\n delete this.loaders[PlaylistContextType.LEVEL];\n }\n }\n }\n load(context) {\n var _context$deliveryDire;\n const config = this.hls.config;\n\n // logger.debug(`[playlist-loader]: Loading playlist of type ${context.type}, level: ${context.level}, id: ${context.id}`);\n\n // Check if a loader for this context already exists\n let loader = this.getInternalLoader(context);\n if (loader) {\n const logger = this.hls.logger;\n const loaderContext = loader.context;\n if (loaderContext && loaderContext.levelOrTrack === context.levelOrTrack && (loaderContext.url === context.url || loaderContext.deliveryDirectives && !context.deliveryDirectives)) {\n // same URL can't overlap, or wait for blocking request\n if (loaderContext.url === context.url) {\n logger.log(`[playlist-loader]: ignore ${context.url} ongoing request`);\n } else {\n logger.log(`[playlist-loader]: ignore ${context.url} in favor of ${loaderContext.url}`);\n }\n return;\n }\n logger.log(`[playlist-loader]: aborting previous loader for type: ${context.type}`);\n loader.abort();\n }\n\n // apply different configs for retries depending on\n // context (manifest, level, audio/subs playlist)\n let loadPolicy;\n if (context.type === PlaylistContextType.MANIFEST) {\n loadPolicy = config.manifestLoadPolicy.default;\n } else {\n loadPolicy = _extends({}, config.playlistLoadPolicy.default, {\n timeoutRetry: null,\n errorRetry: null\n });\n }\n loader = this.createInternalLoader(context);\n\n // Override level/track timeout for LL-HLS requests\n // (the default of 10000ms is counter productive to blocking playlist reload requests)\n if (isFiniteNumber((_context$deliveryDire = context.deliveryDirectives) == null ? void 0 : _context$deliveryDire.part)) {\n let levelDetails;\n if (context.type === PlaylistContextType.LEVEL && context.level !== null) {\n levelDetails = this.hls.levels[context.level].details;\n } else if (context.type === PlaylistContextType.AUDIO_TRACK && context.id !== null) {\n levelDetails = this.hls.audioTracks[context.id].details;\n } else if (context.type === PlaylistContextType.SUBTITLE_TRACK && context.id !== null) {\n levelDetails = this.hls.subtitleTracks[context.id].details;\n }\n if (levelDetails) {\n const partTarget = levelDetails.partTarget;\n const targetDuration = levelDetails.targetduration;\n if (partTarget && targetDuration) {\n const maxLowLatencyPlaylistRefresh = Math.max(partTarget * 3, targetDuration * 0.8) * 1000;\n loadPolicy = _extends({}, loadPolicy, {\n maxTimeToFirstByteMs: Math.min(maxLowLatencyPlaylistRefresh, loadPolicy.maxTimeToFirstByteMs),\n maxLoadTimeMs: Math.min(maxLowLatencyPlaylistRefresh, loadPolicy.maxTimeToFirstByteMs)\n });\n }\n }\n }\n const legacyRetryCompatibility = loadPolicy.errorRetry || loadPolicy.timeoutRetry || {};\n const loaderConfig = {\n loadPolicy,\n timeout: loadPolicy.maxLoadTimeMs,\n maxRetry: legacyRetryCompatibility.maxNumRetry || 0,\n retryDelay: legacyRetryCompatibility.retryDelayMs || 0,\n maxRetryDelay: legacyRetryCompatibility.maxRetryDelayMs || 0\n };\n const loaderCallbacks = {\n onSuccess: (response, stats, context, networkDetails) => {\n const loader = this.getInternalLoader(context);\n this.resetInternalLoader(context.type);\n const string = response.data;\n stats.parsing.start = performance.now();\n if (M3U8Parser.isMediaPlaylist(string) || context.type !== PlaylistContextType.MANIFEST) {\n this.handleTrackOrLevelPlaylist(response, stats, context, networkDetails || null, loader);\n } else {\n this.handleMasterPlaylist(response, stats, context, networkDetails);\n }\n },\n onError: (response, context, networkDetails, stats) => {\n this.handleNetworkError(context, networkDetails, false, response, stats);\n },\n onTimeout: (stats, context, networkDetails) => {\n this.handleNetworkError(context, networkDetails, true, undefined, stats);\n }\n };\n\n // logger.debug(`[playlist-loader]: Calling internal loader delegate for URL: ${context.url}`);\n\n loader.load(context, loaderConfig, loaderCallbacks);\n }\n checkAutostartLoad() {\n if (!this.hls) {\n return;\n }\n const {\n config: {\n autoStartLoad,\n startPosition\n },\n forceStartLoad\n } = this.hls;\n if (autoStartLoad || forceStartLoad) {\n this.hls.logger.log(`${autoStartLoad ? 'auto' : 'force'} startLoad with configured startPosition ${startPosition}`);\n this.hls.startLoad(startPosition);\n }\n }\n handleMasterPlaylist(response, stats, context, networkDetails) {\n const hls = this.hls;\n const string = response.data;\n const url = getResponseUrl(response, context);\n const parsedResult = M3U8Parser.parseMasterPlaylist(string, url);\n if (parsedResult.playlistParsingError) {\n stats.parsing.end = performance.now();\n this.handleManifestParsingError(response, context, parsedResult.playlistParsingError, networkDetails, stats);\n return;\n }\n const {\n contentSteering,\n levels,\n sessionData,\n sessionKeys,\n startTimeOffset,\n variableList\n } = parsedResult;\n this.variableList = variableList;\n\n // Treat unknown codec as audio or video codec based on passing `isTypeSupported` check\n // (allows for playback of any supported codec even if not indexed in utils/codecs)\n levels.forEach(levelParsed => {\n const {\n unknownCodecs\n } = levelParsed;\n if (unknownCodecs) {\n const {\n preferManagedMediaSource\n } = this.hls.config;\n let {\n audioCodec,\n videoCodec\n } = levelParsed;\n for (let i = unknownCodecs.length; i--;) {\n const unknownCodec = unknownCodecs[i];\n if (areCodecsMediaSourceSupported(unknownCodec, 'audio', preferManagedMediaSource)) {\n levelParsed.audioCodec = audioCodec = audioCodec ? `${audioCodec},${unknownCodec}` : unknownCodec;\n sampleEntryCodesISO.audio[audioCodec.substring(0, 4)] = 2;\n unknownCodecs.splice(i, 1);\n } else if (areCodecsMediaSourceSupported(unknownCodec, 'video', preferManagedMediaSource)) {\n levelParsed.videoCodec = videoCodec = videoCodec ? `${videoCodec},${unknownCodec}` : unknownCodec;\n sampleEntryCodesISO.video[videoCodec.substring(0, 4)] = 2;\n unknownCodecs.splice(i, 1);\n }\n }\n }\n });\n const {\n AUDIO: audioTracks = [],\n SUBTITLES: subtitles,\n 'CLOSED-CAPTIONS': captions\n } = M3U8Parser.parseMasterPlaylistMedia(string, url, parsedResult);\n if (audioTracks.length) {\n // check if we have found an audio track embedded in main playlist (audio track without URI attribute)\n const embeddedAudioFound = audioTracks.some(audioTrack => !audioTrack.url);\n\n // if no embedded audio track defined, but audio codec signaled in quality level,\n // we need to signal this main audio track this could happen with playlists with\n // alt audio rendition in which quality levels (main)\n // contains both audio+video. but with mixed audio track not signaled\n if (!embeddedAudioFound && levels[0].audioCodec && !levels[0].attrs.AUDIO) {\n this.hls.logger.log('[playlist-loader]: audio codec signaled in quality level, but no embedded audio track signaled, create one');\n audioTracks.unshift({\n type: 'main',\n name: 'main',\n groupId: 'main',\n default: false,\n autoselect: false,\n forced: false,\n id: -1,\n attrs: new AttrList({}),\n bitrate: 0,\n url: ''\n });\n }\n }\n hls.trigger(Events.MANIFEST_LOADED, {\n levels,\n audioTracks,\n subtitles,\n captions,\n contentSteering,\n url,\n stats,\n networkDetails,\n sessionData,\n sessionKeys,\n startTimeOffset,\n variableList\n });\n }\n handleTrackOrLevelPlaylist(response, stats, context, networkDetails, loader) {\n const hls = this.hls;\n const {\n id,\n level,\n type\n } = context;\n const url = getResponseUrl(response, context);\n const levelId = isFiniteNumber(level) ? level : isFiniteNumber(id) ? id : 0;\n const levelType = mapContextToLevelType(context);\n const levelDetails = M3U8Parser.parseLevelPlaylist(response.data, url, levelId, levelType, 0, this.variableList);\n\n // We have done our first request (Manifest-type) and receive\n // not a master playlist but a chunk-list (track/level)\n // We fire the manifest-loaded event anyway with the parsed level-details\n // by creating a single-level structure for it.\n if (type === PlaylistContextType.MANIFEST) {\n const singleLevel = {\n attrs: new AttrList({}),\n bitrate: 0,\n details: levelDetails,\n name: '',\n url\n };\n levelDetails.requestScheduled = stats.loading.start + computeReloadInterval(levelDetails, 0);\n hls.trigger(Events.MANIFEST_LOADED, {\n levels: [singleLevel],\n audioTracks: [],\n url,\n stats,\n networkDetails,\n sessionData: null,\n sessionKeys: null,\n contentSteering: null,\n startTimeOffset: null,\n variableList: null\n });\n }\n\n // save parsing time\n stats.parsing.end = performance.now();\n\n // extend the context with the new levelDetails property\n context.levelDetails = levelDetails;\n this.handlePlaylistLoaded(levelDetails, response, stats, context, networkDetails, loader);\n }\n handleManifestParsingError(response, context, error, networkDetails, stats) {\n this.hls.trigger(Events.ERROR, {\n type: ErrorTypes.NETWORK_ERROR,\n details: ErrorDetails.MANIFEST_PARSING_ERROR,\n fatal: context.type === PlaylistContextType.MANIFEST,\n url: response.url,\n err: error,\n error,\n reason: error.message,\n response,\n context,\n networkDetails,\n stats\n });\n }\n handleNetworkError(context, networkDetails, timeout = false, response, stats) {\n let message = `A network ${timeout ? 'timeout' : 'error' + (response ? ' (status ' + response.code + ')' : '')} occurred while loading ${context.type}`;\n if (context.type === PlaylistContextType.LEVEL) {\n message += `: ${context.level} id: ${context.id}`;\n } else if (context.type === PlaylistContextType.AUDIO_TRACK || context.type === PlaylistContextType.SUBTITLE_TRACK) {\n message += ` id: ${context.id} group-id: \"${context.groupId}\"`;\n }\n const error = new Error(message);\n this.hls.logger.warn(`[playlist-loader]: ${message}`);\n let details = ErrorDetails.UNKNOWN;\n let fatal = false;\n const loader = this.getInternalLoader(context);\n switch (context.type) {\n case PlaylistContextType.MANIFEST:\n details = timeout ? ErrorDetails.MANIFEST_LOAD_TIMEOUT : ErrorDetails.MANIFEST_LOAD_ERROR;\n fatal = true;\n break;\n case PlaylistContextType.LEVEL:\n details = timeout ? ErrorDetails.LEVEL_LOAD_TIMEOUT : ErrorDetails.LEVEL_LOAD_ERROR;\n fatal = false;\n break;\n case PlaylistContextType.AUDIO_TRACK:\n details = timeout ? ErrorDetails.AUDIO_TRACK_LOAD_TIMEOUT : ErrorDetails.AUDIO_TRACK_LOAD_ERROR;\n fatal = false;\n break;\n case PlaylistContextType.SUBTITLE_TRACK:\n details = timeout ? ErrorDetails.SUBTITLE_TRACK_LOAD_TIMEOUT : ErrorDetails.SUBTITLE_LOAD_ERROR;\n fatal = false;\n break;\n }\n if (loader) {\n this.resetInternalLoader(context.type);\n }\n const errorData = {\n type: ErrorTypes.NETWORK_ERROR,\n details,\n fatal,\n url: context.url,\n loader,\n context,\n error,\n networkDetails,\n stats\n };\n if (response) {\n const url = (networkDetails == null ? void 0 : networkDetails.url) || context.url;\n errorData.response = _objectSpread2({\n url,\n data: undefined\n }, response);\n }\n this.hls.trigger(Events.ERROR, errorData);\n }\n handlePlaylistLoaded(levelDetails, response, stats, context, networkDetails, loader) {\n const hls = this.hls;\n const {\n type,\n level,\n levelOrTrack,\n id,\n groupId,\n deliveryDirectives\n } = context;\n const url = getResponseUrl(response, context);\n const parent = mapContextToLevelType(context);\n let levelIndex = typeof context.level === 'number' && parent === PlaylistLevelType.MAIN ? level : undefined;\n const error = levelDetails.playlistParsingError;\n if (error) {\n this.hls.logger.warn(`${error} ${levelDetails.url}`);\n if (!hls.config.ignorePlaylistParsingErrors) {\n hls.trigger(Events.ERROR, {\n type: ErrorTypes.NETWORK_ERROR,\n details: ErrorDetails.LEVEL_PARSING_ERROR,\n fatal: false,\n url,\n error,\n reason: error.message,\n response,\n context,\n level: levelIndex,\n parent,\n networkDetails,\n stats\n });\n return;\n }\n levelDetails.playlistParsingError = null;\n }\n if (!levelDetails.fragments.length) {\n const _error = levelDetails.playlistParsingError = new Error('No Segments found in Playlist');\n hls.trigger(Events.ERROR, {\n type: ErrorTypes.NETWORK_ERROR,\n details: ErrorDetails.LEVEL_EMPTY_ERROR,\n fatal: false,\n url,\n error: _error,\n reason: _error.message,\n response,\n context,\n level: levelIndex,\n parent,\n networkDetails,\n stats\n });\n return;\n }\n if (levelDetails.live && loader) {\n if (loader.getCacheAge) {\n levelDetails.ageHeader = loader.getCacheAge() || 0;\n }\n if (!loader.getCacheAge || isNaN(levelDetails.ageHeader)) {\n levelDetails.ageHeader = 0;\n }\n }\n switch (type) {\n case PlaylistContextType.MANIFEST:\n case PlaylistContextType.LEVEL:\n if (levelIndex) {\n if (!levelOrTrack) {\n // fall-through to hls.levels[0]\n levelIndex = 0;\n } else {\n if (levelOrTrack !== hls.levels[levelIndex]) {\n // correct levelIndex when lower levels were removed from hls.levels\n const updatedIndex = hls.levels.indexOf(levelOrTrack);\n if (updatedIndex > -1) {\n levelIndex = updatedIndex;\n }\n }\n }\n }\n hls.trigger(Events.LEVEL_LOADED, {\n details: levelDetails,\n levelInfo: levelOrTrack || hls.levels[0],\n level: levelIndex || 0,\n id: id || 0,\n stats,\n networkDetails,\n deliveryDirectives,\n withoutMultiVariant: type === PlaylistContextType.MANIFEST\n });\n break;\n case PlaylistContextType.AUDIO_TRACK:\n hls.trigger(Events.AUDIO_TRACK_LOADED, {\n details: levelDetails,\n track: levelOrTrack,\n id: id || 0,\n groupId: groupId || '',\n stats,\n networkDetails,\n deliveryDirectives\n });\n break;\n case PlaylistContextType.SUBTITLE_TRACK:\n hls.trigger(Events.SUBTITLE_TRACK_LOADED, {\n details: levelDetails,\n track: levelOrTrack,\n id: id || 0,\n groupId: groupId || '',\n stats,\n networkDetails,\n deliveryDirectives\n });\n break;\n }\n }\n}\n\n/**\n * The `Hls` class is the core of the HLS.js library used to instantiate player instances.\n * @public\n */\nclass Hls {\n /**\n * Get the video-dev/hls.js package version.\n */\n static get version() {\n return version;\n }\n\n /**\n * Check if the required MediaSource Extensions are available.\n */\n static isMSESupported() {\n return isMSESupported();\n }\n\n /**\n * Check if MediaSource Extensions are available and isTypeSupported checks pass for any baseline codecs.\n */\n static isSupported() {\n return isSupported();\n }\n\n /**\n * Get the MediaSource global used for MSE playback (ManagedMediaSource, MediaSource, or WebKitMediaSource).\n */\n static getMediaSource() {\n return getMediaSource();\n }\n static get Events() {\n return Events;\n }\n static get MetadataSchema() {\n return MetadataSchema;\n }\n static get ErrorTypes() {\n return ErrorTypes;\n }\n static get ErrorDetails() {\n return ErrorDetails;\n }\n\n /**\n * Get the default configuration applied to new instances.\n */\n static get DefaultConfig() {\n if (!Hls.defaultConfig) {\n return hlsDefaultConfig;\n }\n return Hls.defaultConfig;\n }\n\n /**\n * Replace the default configuration applied to new instances.\n */\n static set DefaultConfig(defaultConfig) {\n Hls.defaultConfig = defaultConfig;\n }\n\n /**\n * Creates an instance of an HLS client that can attach to exactly one `HTMLMediaElement`.\n * @param userConfig - Configuration options applied over `Hls.DefaultConfig`\n */\n constructor(userConfig = {}) {\n /**\n * The runtime configuration used by the player. At instantiation this is combination of `hls.userConfig` merged over `Hls.DefaultConfig`.\n */\n this.config = void 0;\n /**\n * The configuration object provided on player instantiation.\n */\n this.userConfig = void 0;\n /**\n * The logger functions used by this player instance, configured on player instantiation.\n */\n this.logger = void 0;\n this.coreComponents = void 0;\n this.networkControllers = void 0;\n this._emitter = new EventEmitter();\n this._autoLevelCapping = -1;\n this._maxHdcpLevel = null;\n this.abrController = void 0;\n this.bufferController = void 0;\n this.capLevelController = void 0;\n this.latencyController = void 0;\n this.levelController = void 0;\n this.streamController = void 0;\n this.audioStreamController = void 0;\n this.subtititleStreamController = void 0;\n this.audioTrackController = void 0;\n this.subtitleTrackController = void 0;\n this.interstitialsController = void 0;\n this.gapController = void 0;\n this.emeController = void 0;\n this.cmcdController = void 0;\n this._media = null;\n this._url = null;\n this._sessionId = void 0;\n this.triggeringException = void 0;\n this.started = false;\n const logger = this.logger = enableLogs(userConfig.debug || false, 'Hls instance', userConfig.assetPlayerId);\n const config = this.config = mergeConfig(Hls.DefaultConfig, userConfig, logger);\n this.userConfig = userConfig;\n if (config.progressive) {\n enableStreamingMode(config, logger);\n }\n\n // core controllers and network loaders\n const {\n abrController: _AbrController,\n bufferController: _BufferController,\n capLevelController: _CapLevelController,\n errorController: _ErrorController,\n fpsController: _FpsController\n } = config;\n const errorController = new _ErrorController(this);\n const abrController = this.abrController = new _AbrController(this);\n // FragmentTracker must be defined before StreamController because the order of event handling is important\n const fragmentTracker = new FragmentTracker(this);\n const _InterstitialsController = config.interstitialsController;\n const interstitialsController = _InterstitialsController ? this.interstitialsController = new _InterstitialsController(this, Hls) : null;\n const bufferController = this.bufferController = new _BufferController(this, fragmentTracker);\n const capLevelController = this.capLevelController = new _CapLevelController(this);\n const fpsController = new _FpsController(this);\n const playListLoader = new PlaylistLoader(this);\n const _ContentSteeringController = config.contentSteeringController;\n // Instantiate ConentSteeringController before LevelController to receive Multivariant Playlist events first\n const contentSteering = _ContentSteeringController ? new _ContentSteeringController(this) : null;\n const levelController = this.levelController = new LevelController(this, contentSteering);\n const id3TrackController = new ID3TrackController(this);\n const keyLoader = new KeyLoader(this.config, this.logger);\n const streamController = this.streamController = new StreamController(this, fragmentTracker, keyLoader);\n const gapController = this.gapController = new GapController(this, fragmentTracker);\n\n // Cap level controller uses streamController to flush the buffer\n capLevelController.setStreamController(streamController);\n // fpsController uses streamController to switch when frames are being dropped\n fpsController.setStreamController(streamController);\n const networkControllers = [playListLoader, levelController, streamController];\n if (interstitialsController) {\n networkControllers.splice(1, 0, interstitialsController);\n }\n if (contentSteering) {\n networkControllers.splice(1, 0, contentSteering);\n }\n this.networkControllers = networkControllers;\n const coreComponents = [abrController, bufferController, gapController, capLevelController, fpsController, id3TrackController, fragmentTracker];\n this.audioTrackController = this.createController(config.audioTrackController, networkControllers);\n const AudioStreamControllerClass = config.audioStreamController;\n if (AudioStreamControllerClass) {\n networkControllers.push(this.audioStreamController = new AudioStreamControllerClass(this, fragmentTracker, keyLoader));\n }\n // Instantiate subtitleTrackController before SubtitleStreamController to receive level events first\n this.subtitleTrackController = this.createController(config.subtitleTrackController, networkControllers);\n const SubtitleStreamControllerClass = config.subtitleStreamController;\n if (SubtitleStreamControllerClass) {\n networkControllers.push(this.subtititleStreamController = new SubtitleStreamControllerClass(this, fragmentTracker, keyLoader));\n }\n this.createController(config.timelineController, coreComponents);\n keyLoader.emeController = this.emeController = this.createController(config.emeController, coreComponents);\n this.cmcdController = this.createController(config.cmcdController, coreComponents);\n this.latencyController = this.createController(LatencyController, coreComponents);\n this.coreComponents = coreComponents;\n\n // Error controller handles errors before and after all other controllers\n // This listener will be invoked after all other controllers error listeners\n networkControllers.push(errorController);\n const onErrorOut = errorController.onErrorOut;\n if (typeof onErrorOut === 'function') {\n this.on(Events.ERROR, onErrorOut, errorController);\n }\n // Autostart load handler\n this.on(Events.MANIFEST_LOADED, playListLoader.onManifestLoaded, playListLoader);\n }\n createController(ControllerClass, components) {\n if (ControllerClass) {\n const controllerInstance = new ControllerClass(this);\n if (components) {\n components.push(controllerInstance);\n }\n return controllerInstance;\n }\n return null;\n }\n\n // Delegate the EventEmitter through the public API of Hls.js\n on(event, listener, context = this) {\n this._emitter.on(event, listener, context);\n }\n once(event, listener, context = this) {\n this._emitter.once(event, listener, context);\n }\n removeAllListeners(event) {\n this._emitter.removeAllListeners(event);\n }\n off(event, listener, context = this, once) {\n this._emitter.off(event, listener, context, once);\n }\n listeners(event) {\n return this._emitter.listeners(event);\n }\n emit(event, name, eventObject) {\n return this._emitter.emit(event, name, eventObject);\n }\n trigger(event, eventObject) {\n if (this.config.debug) {\n return this.emit(event, event, eventObject);\n } else {\n try {\n return this.emit(event, event, eventObject);\n } catch (error) {\n this.logger.error('An internal error happened while handling event ' + event + '. Error message: \"' + error.message + '\". Here is a stacktrace:', error);\n // Prevent recursion in error event handlers that throw #5497\n if (!this.triggeringException) {\n this.triggeringException = true;\n const fatal = event === Events.ERROR;\n this.trigger(Events.ERROR, {\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.INTERNAL_EXCEPTION,\n fatal,\n event,\n error\n });\n this.triggeringException = false;\n }\n }\n }\n return false;\n }\n listenerCount(event) {\n return this._emitter.listenerCount(event);\n }\n\n /**\n * Dispose of the instance\n */\n destroy() {\n this.logger.log('destroy');\n this.trigger(Events.DESTROYING, undefined);\n this.detachMedia();\n this.removeAllListeners();\n this._autoLevelCapping = -1;\n this._url = null;\n this.networkControllers.forEach(component => component.destroy());\n this.networkControllers.length = 0;\n this.coreComponents.forEach(component => component.destroy());\n this.coreComponents.length = 0;\n // Remove any references that could be held in config options or callbacks\n const config = this.config;\n config.xhrSetup = config.fetchSetup = undefined;\n // @ts-ignore\n this.userConfig = null;\n }\n\n /**\n * Attaches Hls.js to a media element\n */\n attachMedia(data) {\n if (!data || 'media' in data && !data.media) {\n const error = new Error(`attachMedia failed: invalid argument (${data})`);\n this.trigger(Events.ERROR, {\n type: ErrorTypes.OTHER_ERROR,\n details: ErrorDetails.ATTACH_MEDIA_ERROR,\n fatal: true,\n error\n });\n return;\n }\n this.logger.log(`attachMedia`);\n if (this._media) {\n this.logger.warn(`media must be detached before attaching`);\n this.detachMedia();\n }\n const attachMediaSource = 'media' in data;\n const media = attachMediaSource ? data.media : data;\n const attachingData = attachMediaSource ? data : {\n media\n };\n this._media = media;\n this.trigger(Events.MEDIA_ATTACHING, attachingData);\n }\n\n /**\n * Detach Hls.js from the media\n */\n detachMedia() {\n this.logger.log('detachMedia');\n this.trigger(Events.MEDIA_DETACHING, {});\n this._media = null;\n }\n\n /**\n * Detach HTMLMediaElement, MediaSource, and SourceBuffers without reset, for attaching to another instance\n */\n transferMedia() {\n this._media = null;\n const transferMedia = this.bufferController.transferMedia();\n this.trigger(Events.MEDIA_DETACHING, {\n transferMedia\n });\n return transferMedia;\n }\n\n /**\n * Set the source URL. Can be relative or absolute.\n */\n loadSource(url) {\n this.stopLoad();\n const media = this.media;\n const loadedSource = this._url;\n const loadingSource = this._url = urlToolkitExports.buildAbsoluteURL(self.location.href, url, {\n alwaysNormalize: true\n });\n this._autoLevelCapping = -1;\n this._maxHdcpLevel = null;\n this.logger.log(`loadSource:${loadingSource}`);\n if (media && loadedSource && (loadedSource !== loadingSource || this.bufferController.hasSourceTypes())) {\n // Remove and re-create MediaSource\n this.detachMedia();\n this.attachMedia(media);\n }\n // when attaching to a source URL, trigger a playlist load\n this.trigger(Events.MANIFEST_LOADING, {\n url: url\n });\n }\n\n /**\n * Gets the currently loaded URL\n */\n get url() {\n return this._url;\n }\n\n /**\n * Whether or not enough has been buffered to seek to start position or use `media.currentTime` to determine next load position\n */\n get hasEnoughToStart() {\n return this.streamController.hasEnoughToStart;\n }\n\n /**\n * Get the startPosition set on startLoad(position) or on autostart with config.startPosition\n */\n get startPosition() {\n return this.streamController.startPositionValue;\n }\n\n /**\n * Start loading data from the stream source.\n * Depending on default config, client starts loading automatically when a source is set.\n *\n * @param startPosition - Set the start position to stream from.\n * Defaults to -1 (None: starts from earliest point)\n */\n startLoad(startPosition = -1, skipSeekToStartPosition) {\n this.logger.log(`startLoad(${startPosition + (skipSeekToStartPosition ? ', <skip seek to start>' : '')})`);\n this.started = true;\n this.resumeBuffering();\n for (let i = 0; i < this.networkControllers.length; i++) {\n this.networkControllers[i].startLoad(startPosition, skipSeekToStartPosition);\n if (!this.started || !this.networkControllers) {\n break;\n }\n }\n }\n\n /**\n * Stop loading of any stream data.\n */\n stopLoad() {\n this.logger.log('stopLoad');\n this.started = false;\n for (let i = 0; i < this.networkControllers.length; i++) {\n this.networkControllers[i].stopLoad();\n if (this.started || !this.networkControllers) {\n break;\n }\n }\n }\n\n /**\n * Returns whether loading, toggled with `startLoad()` and `stopLoad()`, is active or not`.\n */\n get loadingEnabled() {\n return this.started;\n }\n\n /**\n * Returns state of fragment loading toggled by calling `pauseBuffering()` and `resumeBuffering()`.\n */\n get bufferingEnabled() {\n return this.streamController.bufferingEnabled;\n }\n\n /**\n * Resumes stream controller segment loading after `pauseBuffering` has been called.\n */\n resumeBuffering() {\n if (!this.bufferingEnabled) {\n this.logger.log(`resume buffering`);\n this.networkControllers.forEach(controller => {\n if (controller.resumeBuffering) {\n controller.resumeBuffering();\n }\n });\n }\n }\n\n /**\n * Prevents stream controller from loading new segments until `resumeBuffering` is called.\n * This allows for media buffering to be paused without interupting playlist loading.\n */\n pauseBuffering() {\n if (this.bufferingEnabled) {\n this.logger.log(`pause buffering`);\n this.networkControllers.forEach(controller => {\n if (controller.pauseBuffering) {\n controller.pauseBuffering();\n }\n });\n }\n }\n get inFlightFragments() {\n const inFlightData = {\n [PlaylistLevelType.MAIN]: this.streamController.inFlightFrag\n };\n if (this.audioStreamController) {\n inFlightData[PlaylistLevelType.AUDIO] = this.audioStreamController.inFlightFrag;\n }\n if (this.subtititleStreamController) {\n inFlightData[PlaylistLevelType.SUBTITLE] = this.subtititleStreamController.inFlightFrag;\n }\n return inFlightData;\n }\n\n /**\n * Swap through possible audio codecs in the stream (for example to switch from stereo to 5.1)\n */\n swapAudioCodec() {\n this.logger.log('swapAudioCodec');\n this.streamController.swapAudioCodec();\n }\n\n /**\n * When the media-element fails, this allows to detach and then re-attach it\n * as one call (convenience method).\n *\n * Automatic recovery of media-errors by this process is configurable.\n */\n recoverMediaError() {\n this.logger.log('recoverMediaError');\n const media = this._media;\n const time = media == null ? void 0 : media.currentTime;\n this.detachMedia();\n if (media) {\n this.attachMedia(media);\n if (time) {\n this.startLoad(time);\n }\n }\n }\n removeLevel(levelIndex) {\n this.levelController.removeLevel(levelIndex);\n }\n\n /**\n * @returns a UUID for this player instance\n */\n get sessionId() {\n let _sessionId = this._sessionId;\n if (!_sessionId) {\n _sessionId = this._sessionId = uuid();\n }\n return _sessionId;\n }\n\n /**\n * @returns an array of levels (variants) sorted by HDCP-LEVEL, RESOLUTION (height), FRAME-RATE, CODECS, VIDEO-RANGE, and BANDWIDTH\n */\n get levels() {\n const levels = this.levelController.levels;\n return levels ? levels : [];\n }\n\n /**\n * @returns LevelDetails of last loaded level (variant) or `null` prior to loading a media playlist.\n */\n get latestLevelDetails() {\n return this.streamController.getLevelDetails() || null;\n }\n\n /**\n * @returns Level object of selected level (variant) or `null` prior to selecting a level or once the level is removed.\n */\n get loadLevelObj() {\n return this.levelController.loadLevelObj;\n }\n\n /**\n * Index of quality level (variant) currently played\n */\n get currentLevel() {\n return this.streamController.currentLevel;\n }\n\n /**\n * Set quality level index immediately. This will flush the current buffer to replace the quality asap. That means playback will interrupt at least shortly to re-buffer and re-sync eventually. Set to -1 for automatic level selection.\n */\n set currentLevel(newLevel) {\n this.logger.log(`set currentLevel:${newLevel}`);\n this.levelController.manualLevel = newLevel;\n this.streamController.immediateLevelSwitch();\n }\n\n /**\n * Index of next quality level loaded as scheduled by stream controller.\n */\n get nextLevel() {\n return this.streamController.nextLevel;\n }\n\n /**\n * Set quality level index for next loaded data.\n * This will switch the video quality asap, without interrupting playback.\n * May abort current loading of data, and flush parts of buffer (outside currently played fragment region).\n * @param newLevel - Pass -1 for automatic level selection\n */\n set nextLevel(newLevel) {\n this.logger.log(`set nextLevel:${newLevel}`);\n this.levelController.manualLevel = newLevel;\n this.streamController.nextLevelSwitch();\n }\n\n /**\n * Return the quality level of the currently or last (of none is loaded currently) segment\n */\n get loadLevel() {\n return this.levelController.level;\n }\n\n /**\n * Set quality level index for next loaded data in a conservative way.\n * This will switch the quality without flushing, but interrupt current loading.\n * Thus the moment when the quality switch will appear in effect will only be after the already existing buffer.\n * @param newLevel - Pass -1 for automatic level selection\n */\n set loadLevel(newLevel) {\n this.logger.log(`set loadLevel:${newLevel}`);\n this.levelController.manualLevel = newLevel;\n }\n\n /**\n * get next quality level loaded\n */\n get nextLoadLevel() {\n return this.levelController.nextLoadLevel;\n }\n\n /**\n * Set quality level of next loaded segment in a fully \"non-destructive\" way.\n * Same as `loadLevel` but will wait for next switch (until current loading is done).\n */\n set nextLoadLevel(level) {\n this.levelController.nextLoadLevel = level;\n }\n\n /**\n * Return \"first level\": like a default level, if not set,\n * falls back to index of first level referenced in manifest\n */\n get firstLevel() {\n return Math.max(this.levelController.firstLevel, this.minAutoLevel);\n }\n\n /**\n * Sets \"first-level\", see getter.\n */\n set firstLevel(newLevel) {\n this.logger.log(`set firstLevel:${newLevel}`);\n this.levelController.firstLevel = newLevel;\n }\n\n /**\n * Return the desired start level for the first fragment that will be loaded.\n * The default value of -1 indicates automatic start level selection.\n * Setting hls.nextAutoLevel without setting a startLevel will result in\n * the nextAutoLevel value being used for one fragment load.\n */\n get startLevel() {\n const startLevel = this.levelController.startLevel;\n if (startLevel === -1 && this.abrController.forcedAutoLevel > -1) {\n return this.abrController.forcedAutoLevel;\n }\n return startLevel;\n }\n\n /**\n * set start level (level of first fragment that will be played back)\n * if not overrided by user, first level appearing in manifest will be used as start level\n * if -1 : automatic start level selection, playback will start from level matching download bandwidth\n * (determined from download of first segment)\n */\n set startLevel(newLevel) {\n this.logger.log(`set startLevel:${newLevel}`);\n // if not in automatic start level detection, ensure startLevel is greater than minAutoLevel\n if (newLevel !== -1) {\n newLevel = Math.max(newLevel, this.minAutoLevel);\n }\n this.levelController.startLevel = newLevel;\n }\n\n /**\n * Whether level capping is enabled.\n * Default value is set via `config.capLevelToPlayerSize`.\n */\n get capLevelToPlayerSize() {\n return this.config.capLevelToPlayerSize;\n }\n\n /**\n * Enables or disables level capping. If disabled after previously enabled, `nextLevelSwitch` will be immediately called.\n */\n set capLevelToPlayerSize(shouldStartCapping) {\n const newCapLevelToPlayerSize = !!shouldStartCapping;\n if (newCapLevelToPlayerSize !== this.config.capLevelToPlayerSize) {\n if (newCapLevelToPlayerSize) {\n this.capLevelController.startCapping(); // If capping occurs, nextLevelSwitch will happen based on size.\n } else {\n this.capLevelController.stopCapping();\n this.autoLevelCapping = -1;\n this.streamController.nextLevelSwitch(); // Now we're uncapped, get the next level asap.\n }\n this.config.capLevelToPlayerSize = newCapLevelToPlayerSize;\n }\n }\n\n /**\n * Capping/max level value that should be used by automatic level selection algorithm (`ABRController`)\n */\n get autoLevelCapping() {\n return this._autoLevelCapping;\n }\n\n /**\n * Returns the current bandwidth estimate in bits per second, when available. Otherwise, `NaN` is returned.\n */\n get bandwidthEstimate() {\n const {\n bwEstimator\n } = this.abrController;\n if (!bwEstimator) {\n return NaN;\n }\n return bwEstimator.getEstimate();\n }\n set bandwidthEstimate(abrEwmaDefaultEstimate) {\n this.abrController.resetEstimator(abrEwmaDefaultEstimate);\n }\n get abrEwmaDefaultEstimate() {\n const {\n bwEstimator\n } = this.abrController;\n if (!bwEstimator) {\n return NaN;\n }\n return bwEstimator.defaultEstimate;\n }\n\n /**\n * get time to first byte estimate\n * @type {number}\n */\n get ttfbEstimate() {\n const {\n bwEstimator\n } = this.abrController;\n if (!bwEstimator) {\n return NaN;\n }\n return bwEstimator.getEstimateTTFB();\n }\n\n /**\n * Capping/max level value that should be used by automatic level selection algorithm (`ABRController`)\n */\n set autoLevelCapping(newLevel) {\n if (this._autoLevelCapping !== newLevel) {\n this.logger.log(`set autoLevelCapping:${newLevel}`);\n this._autoLevelCapping = newLevel;\n this.levelController.checkMaxAutoUpdated();\n }\n }\n get maxHdcpLevel() {\n return this._maxHdcpLevel;\n }\n set maxHdcpLevel(value) {\n if (isHdcpLevel(value) && this._maxHdcpLevel !== value) {\n this._maxHdcpLevel = value;\n this.levelController.checkMaxAutoUpdated();\n }\n }\n\n /**\n * True when automatic level selection enabled\n */\n get autoLevelEnabled() {\n return this.levelController.manualLevel === -1;\n }\n\n /**\n * Level set manually (if any)\n */\n get manualLevel() {\n return this.levelController.manualLevel;\n }\n\n /**\n * min level selectable in auto mode according to config.minAutoBitrate\n */\n get minAutoLevel() {\n const {\n levels,\n config: {\n minAutoBitrate\n }\n } = this;\n if (!levels) return 0;\n const len = levels.length;\n for (let i = 0; i < len; i++) {\n if (levels[i].maxBitrate >= minAutoBitrate) {\n return i;\n }\n }\n return 0;\n }\n\n /**\n * max level selectable in auto mode according to autoLevelCapping\n */\n get maxAutoLevel() {\n const {\n levels,\n autoLevelCapping,\n maxHdcpLevel\n } = this;\n let maxAutoLevel;\n if (autoLevelCapping === -1 && levels != null && levels.length) {\n maxAutoLevel = levels.length - 1;\n } else {\n maxAutoLevel = autoLevelCapping;\n }\n if (maxHdcpLevel) {\n for (let i = maxAutoLevel; i--;) {\n const hdcpLevel = levels[i].attrs['HDCP-LEVEL'];\n if (hdcpLevel && hdcpLevel <= maxHdcpLevel) {\n return i;\n }\n }\n }\n return maxAutoLevel;\n }\n get firstAutoLevel() {\n return this.abrController.firstAutoLevel;\n }\n\n /**\n * next automatically selected quality level\n */\n get nextAutoLevel() {\n return this.abrController.nextAutoLevel;\n }\n\n /**\n * this setter is used to force next auto level.\n * this is useful to force a switch down in auto mode:\n * in case of load error on level N, hls.js can set nextAutoLevel to N-1 for example)\n * forced value is valid for one fragment. upon successful frag loading at forced level,\n * this value will be resetted to -1 by ABR controller.\n */\n set nextAutoLevel(nextLevel) {\n this.abrController.nextAutoLevel = nextLevel;\n }\n\n /**\n * get the datetime value relative to media.currentTime for the active level Program Date Time if present\n */\n get playingDate() {\n return this.streamController.currentProgramDateTime;\n }\n get mainForwardBufferInfo() {\n return this.streamController.getMainFwdBufferInfo();\n }\n get maxBufferLength() {\n return this.streamController.maxBufferLength;\n }\n\n /**\n * Find and select the best matching audio track, making a level switch when a Group change is necessary.\n * Updates `hls.config.audioPreference`. Returns the selected track, or null when no matching track is found.\n */\n setAudioOption(audioOption) {\n var _this$audioTrackContr;\n return ((_this$audioTrackContr = this.audioTrackController) == null ? void 0 : _this$audioTrackContr.setAudioOption(audioOption)) || null;\n }\n /**\n * Find and select the best matching subtitle track, making a level switch when a Group change is necessary.\n * Updates `hls.config.subtitlePreference`. Returns the selected track, or null when no matching track is found.\n */\n setSubtitleOption(subtitleOption) {\n var _this$subtitleTrackCo;\n return ((_this$subtitleTrackCo = this.subtitleTrackController) == null ? void 0 : _this$subtitleTrackCo.setSubtitleOption(subtitleOption)) || null;\n }\n\n /**\n * Get the complete list of audio tracks across all media groups\n */\n get allAudioTracks() {\n const audioTrackController = this.audioTrackController;\n return audioTrackController ? audioTrackController.allAudioTracks : [];\n }\n\n /**\n * Get the list of selectable audio tracks\n */\n get audioTracks() {\n const audioTrackController = this.audioTrackController;\n return audioTrackController ? audioTrackController.audioTracks : [];\n }\n\n /**\n * index of the selected audio track (index in audio track lists)\n */\n get audioTrack() {\n const audioTrackController = this.audioTrackController;\n return audioTrackController ? audioTrackController.audioTrack : -1;\n }\n\n /**\n * selects an audio track, based on its index in audio track lists\n */\n set audioTrack(audioTrackId) {\n const audioTrackController = this.audioTrackController;\n if (audioTrackController) {\n audioTrackController.audioTrack = audioTrackId;\n }\n }\n\n /**\n * get the complete list of subtitle tracks across all media groups\n */\n get allSubtitleTracks() {\n const subtitleTrackController = this.subtitleTrackController;\n return subtitleTrackController ? subtitleTrackController.allSubtitleTracks : [];\n }\n\n /**\n * get alternate subtitle tracks list from playlist\n */\n get subtitleTracks() {\n const subtitleTrackController = this.subtitleTrackController;\n return subtitleTrackController ? subtitleTrackController.subtitleTracks : [];\n }\n\n /**\n * index of the selected subtitle track (index in subtitle track lists)\n */\n get subtitleTrack() {\n const subtitleTrackController = this.subtitleTrackController;\n return subtitleTrackController ? subtitleTrackController.subtitleTrack : -1;\n }\n get media() {\n return this._media;\n }\n\n /**\n * select an subtitle track, based on its index in subtitle track lists\n */\n set subtitleTrack(subtitleTrackId) {\n const subtitleTrackController = this.subtitleTrackController;\n if (subtitleTrackController) {\n subtitleTrackController.subtitleTrack = subtitleTrackId;\n }\n }\n\n /**\n * Whether subtitle display is enabled or not\n */\n get subtitleDisplay() {\n const subtitleTrackController = this.subtitleTrackController;\n return subtitleTrackController ? subtitleTrackController.subtitleDisplay : false;\n }\n\n /**\n * Enable/disable subtitle display rendering\n */\n set subtitleDisplay(value) {\n const subtitleTrackController = this.subtitleTrackController;\n if (subtitleTrackController) {\n subtitleTrackController.subtitleDisplay = value;\n }\n }\n\n /**\n * get mode for Low-Latency HLS loading\n */\n get lowLatencyMode() {\n return this.config.lowLatencyMode;\n }\n\n /**\n * Enable/disable Low-Latency HLS part playlist and segment loading, and start live streams at playlist PART-HOLD-BACK rather than HOLD-BACK.\n */\n set lowLatencyMode(mode) {\n this.config.lowLatencyMode = mode;\n }\n\n /**\n * Position (in seconds) of live sync point (ie edge of live position minus safety delay defined by ```hls.config.liveSyncDuration```)\n * @returns null prior to loading live Playlist\n */\n get liveSyncPosition() {\n return this.latencyController.liveSyncPosition;\n }\n\n /**\n * Estimated position (in seconds) of live edge (ie edge of live playlist plus time sync playlist advanced)\n * @returns 0 before first playlist is loaded\n */\n get latency() {\n return this.latencyController.latency;\n }\n\n /**\n * maximum distance from the edge before the player seeks forward to ```hls.liveSyncPosition```\n * configured using ```liveMaxLatencyDurationCount``` (multiple of target duration) or ```liveMaxLatencyDuration```\n * @returns 0 before first playlist is loaded\n */\n get maxLatency() {\n return this.latencyController.maxLatency;\n }\n\n /**\n * target distance from the edge as calculated by the latency controller\n */\n get targetLatency() {\n return this.latencyController.targetLatency;\n }\n set targetLatency(latency) {\n this.latencyController.targetLatency = latency;\n }\n\n /**\n * the rate at which the edge of the current live playlist is advancing or 1 if there is none\n */\n get drift() {\n return this.latencyController.drift;\n }\n\n /**\n * set to true when startLoad is called before MANIFEST_PARSED event\n */\n get forceStartLoad() {\n return this.streamController.forceStartLoad;\n }\n\n /**\n * ContentSteering pathways getter\n */\n get pathways() {\n return this.levelController.pathways;\n }\n\n /**\n * ContentSteering pathwayPriority getter/setter\n */\n get pathwayPriority() {\n return this.levelController.pathwayPriority;\n }\n set pathwayPriority(pathwayPriority) {\n this.levelController.pathwayPriority = pathwayPriority;\n }\n\n /**\n * returns true when all SourceBuffers are buffered to the end\n */\n get bufferedToEnd() {\n var _this$bufferControlle;\n return !!((_this$bufferControlle = this.bufferController) != null && _this$bufferControlle.bufferedToEnd);\n }\n\n /**\n * returns Interstitials Program Manager\n */\n get interstitialsManager() {\n var _this$interstitialsCo;\n return ((_this$interstitialsCo = this.interstitialsController) == null ? void 0 : _this$interstitialsCo.interstitialsManager) || null;\n }\n\n /**\n * returns mediaCapabilities.decodingInfo for a variant/rendition\n */\n getMediaDecodingInfo(level, audioTracks = this.allAudioTracks) {\n const audioTracksByGroup = getAudioTracksByGroup(audioTracks);\n return getMediaDecodingInfoPromise(level, audioTracksByGroup, navigator.mediaCapabilities);\n }\n}\nHls.defaultConfig = void 0;\n\nexport { AbrController, AttrList, AudioStreamController, AudioTrackController, BasePlaylistController, BaseSegment, BaseStreamController, BufferController, CMCDController, CapLevelController, ChunkMetadata, ContentSteeringController, Cues, DateRange, EMEController, ErrorActionFlags, ErrorController, ErrorDetails, ErrorTypes, Events, FPSController, FetchLoader, Fragment, Hls, HlsSkip, HlsUrlParameters, KeySystemFormats, KeySystems, Level, LevelDetails, LevelKey, LoadStats, M3U8Parser, MetadataSchema, NetworkErrorAction, Part, PlaylistLevelType, SubtitleStreamController, SubtitleTrackController, TimelineController, XhrLoader, Hls as default, fetchSupported, getMediaSource, isMSESupported, isSupported, requestMediaKeySystemAccess };\n//# sourceMappingURL=hls.mjs.map\n","import * as React from 'react';\nimport { useRef, useEffect, forwardRef, useImperativeHandle } from 'react';\nimport * as THREE from 'three';\nimport { useThree } from '@react-three/fiber';\nimport { suspend } from 'suspend-react';\nimport { Events } from 'hls.js';\n\n/* eslint react-hooks/exhaustive-deps: 1 */\nconst IS_BROWSER = /* @__PURE__ */((_window$document, _window$navigator) => typeof window !== 'undefined' && typeof ((_window$document = window.document) == null ? void 0 : _window$document.createElement) === 'function' && typeof ((_window$navigator = window.navigator) == null ? void 0 : _window$navigator.userAgent) === 'string')();\nlet _HLSModule = null;\nasync function getHls(...args) {\n var _HLSModule2;\n (_HLSModule2 = _HLSModule) !== null && _HLSModule2 !== void 0 ? _HLSModule2 : _HLSModule = await import('hls.js'); // singleton\n const Ctor = _HLSModule.default;\n if (Ctor.isSupported()) {\n return new Ctor(...args);\n }\n return null;\n}\nfunction useVideoTexture(srcOrSrcObject, {\n unsuspend = 'loadedmetadata',\n start = true,\n hls: hlsConfig = {},\n crossOrigin = 'anonymous',\n muted = true,\n loop = true,\n playsInline = true,\n onVideoFrame,\n ...videoProps\n} = {}) {\n const gl = useThree(state => state.gl);\n const hlsRef = useRef(null);\n const texture = suspend(() => new Promise(async res => {\n let src = undefined;\n let srcObject = undefined;\n if (typeof srcOrSrcObject === 'string') {\n src = srcOrSrcObject;\n } else {\n srcObject = srcOrSrcObject;\n }\n const video = Object.assign(document.createElement('video'), {\n src,\n srcObject,\n crossOrigin,\n loop,\n muted,\n playsInline,\n ...videoProps\n });\n\n // hlsjs extension\n if (src && IS_BROWSER && src.endsWith('.m3u8')) {\n const hls = hlsRef.current = await getHls(hlsConfig);\n if (hls) {\n hls.on(Events.MEDIA_ATTACHED, () => void hls.loadSource(src));\n hls.attachMedia(video);\n }\n }\n const texture = new THREE.VideoTexture(video);\n texture.colorSpace = gl.outputColorSpace;\n video.addEventListener(unsuspend, () => res(texture));\n }), [srcOrSrcObject]);\n const video = texture.source.data;\n useVideoFrame(video, onVideoFrame);\n useEffect(() => {\n start && texture.image.play();\n return () => {\n if (hlsRef.current) {\n hlsRef.current.destroy();\n hlsRef.current = null;\n }\n };\n }, [texture, start]);\n return texture;\n}\n\n//\n// VideoTexture\n//\n\nconst VideoTexture = /* @__PURE__ */forwardRef(({\n children,\n src,\n ...config\n}, fref) => {\n const texture = useVideoTexture(src, config);\n useEffect(() => {\n return () => void texture.dispose();\n }, [texture]);\n useImperativeHandle(fref, () => texture, [texture]); // expose texture through ref\n\n return /*#__PURE__*/React.createElement(React.Fragment, null, children == null ? void 0 : children(texture));\n});\n\n// rVFC hook\n\nconst useVideoFrame = (video, f) => {\n useEffect(() => {\n if (!f) return;\n if (!video.requestVideoFrameCallback) return;\n let handle;\n const callback = (...args) => {\n f(...args);\n handle = video.requestVideoFrameCallback(callback);\n };\n video.requestVideoFrameCallback(callback);\n return () => video.cancelVideoFrameCallback(handle);\n }, [video, f]);\n};\n\nexport { VideoTexture, useVideoTexture };\n","import * as THREE from 'three';\nimport { TextureLoader } from 'three';\nimport { useThree, useLoader } from '@react-three/fiber';\nimport * as React from 'react';\nimport { useState } from 'react';\n\n/* eslint react-hooks/exhaustive-deps: 1 */\n// utils\nconst getFirstFrame = (frames, frameName) => {\n if (Array.isArray(frames)) {\n return frames[0];\n } else {\n const k = frameName !== null && frameName !== void 0 ? frameName : Object.keys(frames)[0];\n return frames[k][0];\n }\n};\nconst checkIfFrameIsEmpty = frameData => {\n for (let i = 3; i < frameData.length; i += 4) {\n if (frameData[i] !== 0) {\n return false;\n }\n }\n return true;\n};\nfunction useSpriteLoader(/** The URL of the sprite sheet. */\ninput, /** The JSON data of the sprite sheet. */\njson, /** The names of the animations in the sprite sheet. */\nanimationNames, /** The number of frames in the sprite sheet. */\nnumberOfFrames, /** A callback that is called when the sprite sheet is loaded. */\nonLoad, /** The settings to use when creating the 2D context. */\ncanvasRenderingContext2DSettings) {\n const viewportRef = React.useRef(useThree(state => state.viewport));\n const spriteDataRef = React.useRef(null);\n const totalFrames = React.useRef(0);\n const aspectFactor = 0.1;\n const inputRef = React.useRef(input);\n const jsonRef = React.useRef(json);\n const animationFramesRef = React.useRef(animationNames);\n const [spriteData, setSpriteData] = useState(null);\n const [spriteTexture, setSpriteTexture] = React.useState(new THREE.Texture());\n const textureLoader = React.useMemo(() => new THREE.TextureLoader(), []);\n const [spriteObj, setSpriteObj] = useState(null);\n const calculateAspectRatio = React.useCallback((width, height, factor) => {\n const adaptedHeight = height * (viewportRef.current.aspect > width / height ? viewportRef.current.width / width : viewportRef.current.height / height);\n const adaptedWidth = width * (viewportRef.current.aspect > width / height ? viewportRef.current.width / width : viewportRef.current.height / height);\n const scaleX = adaptedWidth * factor;\n const scaleY = adaptedHeight * factor;\n const currentMaxScale = 1;\n // Calculate the maximum scale based on the aspect ratio and max scale limit\n let finalMaxScaleW = Math.min(currentMaxScale, scaleX);\n let finalMaxScaleH = Math.min(currentMaxScale, scaleY);\n\n // Ensure that scaleX and scaleY do not exceed the max scale while maintaining aspect ratio\n if (scaleX > currentMaxScale) {\n finalMaxScaleW = currentMaxScale;\n finalMaxScaleH = scaleY / scaleX * currentMaxScale;\n }\n return new THREE.Vector3(finalMaxScaleW, finalMaxScaleH, 1);\n }, []);\n const getRowsAndColumns = React.useCallback((texture, totalFrames) => {\n if (texture.image) {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d', canvasRenderingContext2DSettings);\n if (!ctx) {\n throw new Error('Failed to get 2d context');\n }\n canvas.width = texture.image.width;\n canvas.height = texture.image.height;\n ctx.drawImage(texture.image, 0, 0);\n const width = texture.image.width;\n const height = texture.image.height;\n\n // Calculate rows and columns based on the number of frames and image dimensions\n const cols = Math.round(Math.sqrt(totalFrames * (width / height)));\n const rows = Math.round(totalFrames / cols);\n const frameWidth = width / cols;\n const frameHeight = height / rows;\n const emptyFrames = [];\n for (let row = 0; row < rows; row++) {\n for (let col = 0; col < cols; col++) {\n const frameIndex = row * cols + col;\n if (frameIndex >= totalFrames) {\n emptyFrames.push({\n row,\n col\n });\n continue;\n }\n const frameData = ctx.getImageData(col * frameWidth, row * frameHeight, frameWidth, frameHeight).data;\n const isEmpty = checkIfFrameIsEmpty(frameData);\n if (isEmpty) {\n emptyFrames.push({\n row,\n col\n });\n }\n }\n }\n return {\n rows,\n columns: cols,\n frameWidth,\n frameHeight,\n emptyFrames\n };\n } else {\n return {\n rows: 0,\n columns: 0,\n frameWidth: 0,\n frameHeight: 0,\n emptyFrames: []\n };\n }\n }, [canvasRenderingContext2DSettings]);\n\n // calculate scale ratio for the frames\n const calculateScaleRatio = React.useCallback(frames => {\n // Helper function to calculate scale ratio for an array of frames\n const processFrameArray = frameArray => {\n // Find the largest frame\n let largestFrame = null;\n for (const frame of frameArray) {\n const {\n w,\n h\n } = frame.frame;\n const area = w * h;\n if (!largestFrame || area > largestFrame.area) {\n largestFrame = {\n w,\n h,\n area\n };\n }\n }\n\n // Set scaleRatio property on each frame\n const frameArr = frameArray.map(frame => {\n const {\n w,\n h\n } = frame.frame;\n const area = w * h;\n const scaleRatio = largestFrame ? area === largestFrame.area ? 1 : Math.sqrt(area / largestFrame.area) : 1;\n return {\n ...frame,\n scaleRatio\n };\n });\n return frameArr;\n };\n\n // Handle both array and record cases\n if (Array.isArray(frames)) {\n return processFrameArray(frames);\n } else {\n const result = {};\n for (const key in frames) {\n result[key] = processFrameArray(frames[key]);\n }\n return result;\n }\n }, []);\n\n // for frame based JSON Hash sprite data\n const parseFrames = React.useCallback(() => {\n const sprites = {};\n const data = spriteDataRef.current;\n const delimiters = animationFramesRef.current;\n if (data) {\n if (delimiters && Array.isArray(data['frames'])) {\n for (let i = 0; i < delimiters.length; i++) {\n // we convert each named animation group into an array\n sprites[delimiters[i]] = [];\n for (const value of data['frames']) {\n const frameData = value['frame'];\n const sourceWidth = value['sourceSize']['w'];\n const sourceHeight = value['sourceSize']['h'];\n if (typeof value['filename'] === 'string' && value['filename'].toLowerCase().indexOf(delimiters[i].toLowerCase()) !== -1) {\n sprites[delimiters[i]].push({\n ...value,\n frame: frameData,\n sourceSize: {\n w: sourceWidth,\n h: sourceHeight\n }\n });\n }\n }\n }\n for (const frame in sprites) {\n const scaleRatioData = calculateScaleRatio(sprites[frame]);\n if (Array.isArray(scaleRatioData)) {\n sprites[frame] = scaleRatioData;\n }\n }\n return sprites;\n } else if (delimiters && typeof data['frames'] === 'object') {\n for (let i = 0; i < delimiters.length; i++) {\n // we convert each named animation group into an array\n sprites[delimiters[i]] = [];\n for (const innerKey in data['frames']) {\n const value = data['frames'][innerKey];\n const frameData = value['frame'];\n const sourceWidth = value['sourceSize']['w'];\n const sourceHeight = value['sourceSize']['h'];\n if (typeof innerKey === 'string' && innerKey.toLowerCase().indexOf(delimiters[i].toLowerCase()) !== -1) {\n sprites[delimiters[i]].push({\n ...value,\n frame: frameData,\n sourceSize: {\n w: sourceWidth,\n h: sourceHeight\n }\n });\n }\n }\n }\n for (const frame in sprites) {\n const scaleRatioData = calculateScaleRatio(sprites[frame]);\n if (Array.isArray(scaleRatioData)) {\n sprites[frame] = scaleRatioData;\n }\n }\n return sprites;\n } else {\n let spritesArr = [];\n if (data != null && data.frames) {\n if (Array.isArray(data.frames)) {\n spritesArr = data.frames.map(frame => ({\n ...frame,\n x: frame.frame.x,\n y: frame.frame.y,\n w: frame.frame.w,\n h: frame.frame.h\n }));\n } else {\n spritesArr = Object.values(data.frames).flat().map(frame => ({\n ...frame,\n x: frame.frame.x,\n y: frame.frame.y,\n w: frame.frame.w,\n h: frame.frame.h\n }));\n }\n }\n return calculateScaleRatio(spritesArr);\n }\n }\n return [];\n }, [calculateScaleRatio, spriteDataRef]);\n const parseSpriteData = React.useCallback((json, _spriteTexture) => {\n let aspect = new THREE.Vector3(1, 1, 1);\n // sprite only case\n if (json === null) {\n if (_spriteTexture && numberOfFrames) {\n //get size from texture\n const width = _spriteTexture.image.width;\n const height = _spriteTexture.image.height;\n totalFrames.current = numberOfFrames;\n const {\n rows,\n columns,\n frameWidth,\n frameHeight,\n emptyFrames\n } = getRowsAndColumns(_spriteTexture, numberOfFrames);\n const nonJsonFrames = {\n frames: [],\n meta: {\n version: '1.0',\n size: {\n w: width,\n h: height\n },\n rows,\n columns,\n frameWidth,\n frameHeight,\n scale: '1'\n }\n };\n for (let row = 0; row < rows; row++) {\n for (let col = 0; col < columns; col++) {\n const isExcluded = (emptyFrames !== null && emptyFrames !== void 0 ? emptyFrames : []).some(coord => coord.row === row && coord.col === col);\n if (isExcluded) {\n continue;\n }\n if (Array.isArray(nonJsonFrames.frames)) {\n nonJsonFrames.frames.push({\n frame: {\n x: col * frameWidth,\n y: row * frameHeight,\n w: frameWidth,\n h: frameHeight\n },\n scaleRatio: 1,\n rotated: false,\n trimmed: false,\n spriteSourceSize: {\n x: 0,\n y: 0,\n w: frameWidth,\n h: frameHeight\n },\n sourceSize: {\n w: frameWidth,\n h: frameHeight\n }\n });\n }\n }\n }\n aspect = calculateAspectRatio(frameWidth, frameHeight, aspectFactor);\n spriteDataRef.current = nonJsonFrames;\n }\n\n //scale ratio for standalone sprite\n if (spriteDataRef.current && spriteDataRef.current.frames) {\n spriteDataRef.current.frames = calculateScaleRatio(spriteDataRef.current.frames);\n }\n } else if (_spriteTexture) {\n spriteDataRef.current = json;\n spriteDataRef.current.frames = parseFrames();\n totalFrames.current = Array.isArray(json.frames) ? json.frames.length : Object.keys(json.frames).length;\n const {\n w,\n h\n } = getFirstFrame(json.frames).sourceSize;\n aspect = calculateAspectRatio(w, h, aspectFactor);\n }\n setSpriteData(spriteDataRef.current);\n if ('encoding' in _spriteTexture) {\n _spriteTexture.encoding = 3001; // sRGBEncoding\n } else if ('colorSpace' in _spriteTexture) {\n //@ts-ignore\n _spriteTexture.colorSpace = THREE.SRGBColorSpace;\n }\n setSpriteTexture(_spriteTexture);\n setSpriteObj({\n spriteTexture: _spriteTexture,\n spriteData: spriteDataRef.current,\n aspect: aspect\n });\n }, [getRowsAndColumns, numberOfFrames, parseFrames, calculateAspectRatio, calculateScaleRatio]);\n\n /**\r\n *\r\n */\n const loadJsonAndTextureAndExecuteCallback = React.useCallback((jsonUrl, textureUrl, callback) => {\n const jsonPromise = fetch(jsonUrl).then(response => response.json());\n const texturePromise = new Promise(resolve => {\n textureLoader.load(textureUrl, resolve);\n });\n Promise.all([jsonPromise, texturePromise]).then(response => {\n callback(response[0], response[1]);\n });\n }, [textureLoader]);\n const loadStandaloneSprite = React.useCallback(textureUrl => {\n if (!textureUrl && !inputRef.current) {\n throw new Error('Either textureUrl or input must be provided');\n }\n const validUrl = textureUrl !== null && textureUrl !== void 0 ? textureUrl : inputRef.current;\n if (!validUrl) {\n throw new Error('A valid texture URL must be provided');\n }\n textureLoader.load(validUrl, texture => parseSpriteData(null, texture));\n }, [textureLoader, parseSpriteData]);\n const loadJsonAndTexture = React.useCallback((textureUrl, jsonUrl) => {\n if (jsonUrl && textureUrl) {\n loadJsonAndTextureAndExecuteCallback(jsonUrl, textureUrl, parseSpriteData);\n } else {\n loadStandaloneSprite(textureUrl);\n }\n }, [loadJsonAndTextureAndExecuteCallback, loadStandaloneSprite, parseSpriteData]);\n React.useLayoutEffect(() => {\n if (jsonRef.current && inputRef.current) {\n loadJsonAndTextureAndExecuteCallback(jsonRef.current, inputRef.current, parseSpriteData);\n } else if (inputRef.current) {\n // only load the texture, this is an image sprite only\n loadStandaloneSprite();\n }\n const _inputRef = inputRef.current;\n return () => {\n if (_inputRef) {\n useLoader.clear(TextureLoader, _inputRef);\n }\n };\n }, [loadJsonAndTextureAndExecuteCallback, loadStandaloneSprite, parseSpriteData]);\n React.useLayoutEffect(() => {\n onLoad == null || onLoad(spriteTexture, spriteData !== null && spriteData !== void 0 ? spriteData : null);\n }, [spriteTexture, spriteData, onLoad]);\n return {\n spriteObj,\n loadJsonAndTexture\n };\n}\nuseSpriteLoader.preload = url => useLoader.preload(TextureLoader, url);\nuseSpriteLoader.clear = input => useLoader.clear(TextureLoader, input);\n\nexport { checkIfFrameIsEmpty, getFirstFrame, useSpriteLoader };\n","import * as React from 'react';\nimport { useThree, useFrame } from '@react-three/fiber';\n\nfunction useHelper(object3D, helperConstructor, ...args) {\n const helper = React.useRef(null);\n const scene = useThree(state => state.scene);\n React.useLayoutEffect(() => {\n let currentHelper = undefined;\n if (object3D && object3D != null && object3D.current && helperConstructor) {\n helper.current = currentHelper = new helperConstructor(object3D.current, ...args);\n }\n if (currentHelper) {\n // Prevent the helpers from blocking rays\n currentHelper.traverse(child => child.raycast = () => null);\n scene.add(currentHelper);\n return () => {\n helper.current = undefined;\n scene.remove(currentHelper);\n currentHelper.dispose == null || currentHelper.dispose();\n };\n }\n }, [scene, helperConstructor, object3D, ...args]);\n useFrame(() => {\n var _helper$current;\n return void ((_helper$current = helper.current) == null || _helper$current.update == null ? void 0 : _helper$current.update());\n });\n return helper;\n}\n\n//\n\nconst Helper = ({\n type: helperConstructor,\n args = []\n}) => {\n const thisRef = React.useRef(null);\n const parentRef = React.useRef(null);\n React.useLayoutEffect(() => {\n parentRef.current = thisRef.current.parent;\n });\n useHelper(parentRef, helperConstructor, ...args);\n return /*#__PURE__*/React.createElement(\"object3D\", {\n ref: thisRef\n });\n};\n\nexport { Helper, useHelper };\n","// stats.js - http://github.com/mrdoob/stats.js\n(function(f,e){\"object\"===typeof exports&&\"undefined\"!==typeof module?module.exports=e():\"function\"===typeof define&&define.amd?define(e):f.Stats=e()})(this,function(){var f=function(){function e(a){c.appendChild(a.dom);return a}function u(a){for(var d=0;d<c.children.length;d++)c.children[d].style.display=d===a?\"block\":\"none\";l=a}var l=0,c=document.createElement(\"div\");c.style.cssText=\"position:fixed;top:0;left:0;cursor:pointer;opacity:0.9;z-index:10000\";c.addEventListener(\"click\",function(a){a.preventDefault();\nu(++l%c.children.length)},!1);var k=(performance||Date).now(),g=k,a=0,r=e(new f.Panel(\"FPS\",\"#0ff\",\"#002\")),h=e(new f.Panel(\"MS\",\"#0f0\",\"#020\"));if(self.performance&&self.performance.memory)var t=e(new f.Panel(\"MB\",\"#f08\",\"#201\"));u(0);return{REVISION:16,dom:c,addPanel:e,showPanel:u,begin:function(){k=(performance||Date).now()},end:function(){a++;var c=(performance||Date).now();h.update(c-k,200);if(c>g+1E3&&(r.update(1E3*a/(c-g),100),g=c,a=0,t)){var d=performance.memory;t.update(d.usedJSHeapSize/\n1048576,d.jsHeapSizeLimit/1048576)}return c},update:function(){k=this.end()},domElement:c,setMode:u}};f.Panel=function(e,f,l){var c=Infinity,k=0,g=Math.round,a=g(window.devicePixelRatio||1),r=80*a,h=48*a,t=3*a,v=2*a,d=3*a,m=15*a,n=74*a,p=30*a,q=document.createElement(\"canvas\");q.width=r;q.height=h;q.style.cssText=\"width:80px;height:48px\";var b=q.getContext(\"2d\");b.font=\"bold \"+9*a+\"px Helvetica,Arial,sans-serif\";b.textBaseline=\"top\";b.fillStyle=l;b.fillRect(0,0,r,h);b.fillStyle=f;b.fillText(e,t,v);\nb.fillRect(d,m,n,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d,m,n,p);return{dom:q,update:function(h,w){c=Math.min(c,h);k=Math.max(k,h);b.fillStyle=l;b.globalAlpha=1;b.fillRect(0,0,r,m);b.fillStyle=f;b.fillText(g(h)+\" \"+e+\" (\"+g(c)+\"-\"+g(k)+\")\",t,v);b.drawImage(q,d+a,m,n-a,p,d,m,n-a,p);b.fillRect(d+n-a,m,a,p);b.fillStyle=l;b.globalAlpha=.9;b.fillRect(d+n-a,m,a,g((1-h/w)*p))}}};return f});\n","import * as React from 'react';\n\nfunction call(ref, value) {\n if (typeof ref === 'function') ref(value);else if (ref != null) ref.current = value;\n}\nfunction useEffectfulState(fn, deps = [], cb) {\n const [state, set] = React.useState();\n React.useLayoutEffect(() => {\n const value = fn();\n set(value);\n call(cb, value);\n return () => call(cb, null);\n }, deps);\n return state;\n}\n\nexport { useEffectfulState };\n","import * as React from 'react';\nimport { addEffect, addAfterEffect } from '@react-three/fiber';\nimport StatsImpl from 'stats.js';\nimport { useEffectfulState } from '../helpers/useEffectfulState.js';\n\nfunction Stats({\n showPanel = 0,\n className,\n parent\n}) {\n const stats = useEffectfulState(() => new StatsImpl(), []);\n React.useEffect(() => {\n if (stats) {\n const node = parent && parent.current || document.body;\n stats.showPanel(showPanel);\n node == null || node.appendChild(stats.dom);\n const classNames = (className !== null && className !== void 0 ? className : '').split(' ').filter(cls => cls);\n if (classNames.length) stats.dom.classList.add(...classNames);\n const begin = addEffect(() => stats.begin());\n const end = addAfterEffect(() => stats.end());\n return () => {\n if (classNames.length) stats.dom.classList.remove(...classNames);\n node == null || node.removeChild(stats.dom);\n begin();\n end();\n };\n }\n }, [parent, stats, className, showPanel]);\n return null;\n}\n\nexport { Stats };\n","class Panel {\n constructor(name, fg, bg) {\n this.name = name;\n this.fg = fg;\n this.bg = bg;\n this.gradient = null;\n this.PR = Math.round(window.devicePixelRatio || 1);\n this.WIDTH = 90 * this.PR;\n this.HEIGHT = 48 * this.PR;\n this.TEXT_X = 3 * this.PR;\n this.TEXT_Y = 2 * this.PR;\n this.GRAPH_X = 3 * this.PR;\n this.GRAPH_Y = 15 * this.PR;\n this.GRAPH_WIDTH = 84 * this.PR;\n this.GRAPH_HEIGHT = 30 * this.PR;\n this.canvas = document.createElement(\"canvas\");\n this.canvas.width = this.WIDTH;\n this.canvas.height = this.HEIGHT;\n this.canvas.style.width = \"90px\";\n this.canvas.style.height = \"48px\";\n this.canvas.style.position = \"absolute\";\n this.canvas.style.cssText = \"width:90px;height:48px\";\n this.context = this.canvas.getContext(\"2d\");\n this.initializeCanvas();\n }\n createGradient() {\n if (!this.context)\n throw new Error(\"No context\");\n const gradient = this.context.createLinearGradient(\n 0,\n this.GRAPH_Y,\n 0,\n this.GRAPH_Y + this.GRAPH_HEIGHT\n );\n let startColor;\n const endColor = this.fg;\n switch (this.fg.toLowerCase()) {\n case \"#0ff\":\n startColor = \"#006666\";\n break;\n case \"#0f0\":\n startColor = \"#006600\";\n break;\n case \"#ff0\":\n startColor = \"#666600\";\n break;\n case \"#e1e1e1\":\n startColor = \"#666666\";\n break;\n default:\n startColor = this.bg;\n break;\n }\n gradient.addColorStop(0, startColor);\n gradient.addColorStop(1, endColor);\n return gradient;\n }\n initializeCanvas() {\n if (!this.context)\n return;\n this.context.font = \"bold \" + 9 * this.PR + \"px Helvetica,Arial,sans-serif\";\n this.context.textBaseline = \"top\";\n this.gradient = this.createGradient();\n this.context.fillStyle = this.bg;\n this.context.fillRect(0, 0, this.WIDTH, this.HEIGHT);\n this.context.fillStyle = this.fg;\n this.context.fillText(this.name, this.TEXT_X, this.TEXT_Y);\n this.context.fillStyle = this.fg;\n this.context.fillRect(this.GRAPH_X, this.GRAPH_Y, this.GRAPH_WIDTH, this.GRAPH_HEIGHT);\n this.context.fillStyle = this.bg;\n this.context.globalAlpha = 0.9;\n this.context.fillRect(this.GRAPH_X, this.GRAPH_Y, this.GRAPH_WIDTH, this.GRAPH_HEIGHT);\n }\n update(value, valueGraph, maxValue, maxGraph, decimals = 0) {\n if (!this.context || !this.gradient)\n return;\n const min = Math.min(Infinity, value);\n const max = Math.max(maxValue, value);\n maxGraph = Math.max(maxGraph, valueGraph);\n this.context.globalAlpha = 1;\n this.context.fillStyle = this.bg;\n this.context.fillRect(0, 0, this.WIDTH, this.GRAPH_Y);\n this.context.fillStyle = this.fg;\n this.context.fillText(\n `${value.toFixed(decimals)} ${this.name} (${min.toFixed(decimals)}-${parseFloat(\n max.toFixed(decimals)\n )})`,\n this.TEXT_X,\n this.TEXT_Y\n );\n this.context.drawImage(\n this.canvas,\n this.GRAPH_X + this.PR,\n this.GRAPH_Y,\n this.GRAPH_WIDTH - this.PR,\n this.GRAPH_HEIGHT,\n this.GRAPH_X,\n this.GRAPH_Y,\n this.GRAPH_WIDTH - this.PR,\n this.GRAPH_HEIGHT\n );\n const columnHeight = this.GRAPH_HEIGHT - (1 - valueGraph / maxGraph) * this.GRAPH_HEIGHT;\n if (columnHeight > 0) {\n this.context.globalAlpha = 1;\n this.context.fillStyle = this.gradient;\n this.context.fillRect(\n this.GRAPH_X + this.GRAPH_WIDTH - this.PR,\n this.GRAPH_Y + this.GRAPH_HEIGHT - columnHeight,\n this.PR,\n columnHeight\n );\n }\n }\n}\nexport {\n Panel\n};\n//# sourceMappingURL=panel.js.map\n","import { Panel } from \"./panel.js\";\nconst _Stats = class _Stats2 {\n constructor({\n trackGPU = false,\n logsPerSecond = 30,\n samplesLog = 60,\n samplesGraph = 10,\n precision = 2,\n minimal = false,\n horizontal = true,\n mode = 0\n } = {}) {\n this.gl = null;\n this.ext = null;\n this.activeQuery = null;\n this.gpuQueries = [];\n this.threeRendererPatched = false;\n this.frames = 0;\n this.renderCount = 0;\n this.isRunningCPUProfiling = false;\n this.totalCpuDuration = 0;\n this.totalGpuDuration = 0;\n this.totalGpuDurationCompute = 0;\n this.totalFps = 0;\n this.gpuPanel = null;\n this.gpuPanelCompute = null;\n this.averageFps = { logs: [], graph: [] };\n this.averageCpu = { logs: [], graph: [] };\n this.averageGpu = { logs: [], graph: [] };\n this.averageGpuCompute = { logs: [], graph: [] };\n this.handleClick = (event) => {\n event.preventDefault();\n this.showPanel(++this.mode % this.dom.children.length);\n };\n this.handleResize = () => {\n this.resizePanel(this.fpsPanel, 0);\n this.resizePanel(this.msPanel, 1);\n if (this.gpuPanel)\n this.resizePanel(this.gpuPanel, 2);\n if (this.gpuPanelCompute)\n this.resizePanel(this.gpuPanelCompute, 3);\n };\n this.mode = mode;\n this.horizontal = horizontal;\n this.minimal = minimal;\n this.trackGPU = trackGPU;\n this.samplesLog = samplesLog;\n this.samplesGraph = samplesGraph;\n this.precision = precision;\n this.logsPerSecond = logsPerSecond;\n this.dom = document.createElement(\"div\");\n this.initializeDOM();\n this.beginTime = performance.now();\n this.prevTime = this.beginTime;\n this.prevCpuTime = this.beginTime;\n this.fpsPanel = this.addPanel(new _Stats2.Panel(\"FPS\", \"#0ff\", \"#002\"), 0);\n this.msPanel = this.addPanel(new _Stats2.Panel(\"CPU\", \"#0f0\", \"#020\"), 1);\n this.setupEventListeners();\n }\n initializeDOM() {\n this.dom.style.cssText = `\n position: fixed;\n top: 0;\n left: 0;\n opacity: 0.9;\n z-index: 10000;\n ${this.minimal ? \"cursor: pointer;\" : \"\"}\n `;\n }\n setupEventListeners() {\n if (this.minimal) {\n this.dom.addEventListener(\"click\", this.handleClick);\n this.showPanel(this.mode);\n } else {\n window.addEventListener(\"resize\", this.handleResize);\n }\n }\n async init(canvasOrGL) {\n if (!canvasOrGL) {\n console.error('Stats: The \"canvas\" parameter is undefined.');\n return;\n }\n if (this.handleThreeRenderer(canvasOrGL))\n return;\n if (await this.handleWebGPURenderer(canvasOrGL))\n return;\n if (!this.initializeWebGL(canvasOrGL))\n return;\n }\n handleThreeRenderer(renderer) {\n if (renderer.isWebGLRenderer && !this.threeRendererPatched) {\n this.patchThreeRenderer(renderer);\n this.gl = renderer.getContext();\n if (this.trackGPU) {\n this.initializeGPUTracking();\n }\n return true;\n }\n return false;\n }\n async handleWebGPURenderer(renderer) {\n if (renderer.isWebGPURenderer) {\n if (this.trackGPU) {\n renderer.backend.trackTimestamp = true;\n if (await renderer.hasFeatureAsync(\"timestamp-query\")) {\n this.initializeWebGPUPanels();\n }\n }\n this.info = renderer.info;\n return true;\n }\n return false;\n }\n initializeWebGPUPanels() {\n this.gpuPanel = this.addPanel(new _Stats2.Panel(\"GPU\", \"#ff0\", \"#220\"), 2);\n this.gpuPanelCompute = this.addPanel(\n new _Stats2.Panel(\"CPT\", \"#e1e1e1\", \"#212121\"),\n 3\n );\n }\n initializeWebGL(canvasOrGL) {\n if (canvasOrGL instanceof WebGL2RenderingContext) {\n this.gl = canvasOrGL;\n } else if (canvasOrGL instanceof HTMLCanvasElement || canvasOrGL instanceof OffscreenCanvas) {\n this.gl = canvasOrGL.getContext(\"webgl2\");\n if (!this.gl) {\n console.error(\"Stats: Unable to obtain WebGL2 context.\");\n return false;\n }\n } else {\n console.error(\n \"Stats: Invalid input type. Expected WebGL2RenderingContext, HTMLCanvasElement, or OffscreenCanvas.\"\n );\n return false;\n }\n return true;\n }\n initializeGPUTracking() {\n if (this.gl) {\n this.ext = this.gl.getExtension(\"EXT_disjoint_timer_query_webgl2\");\n if (this.ext) {\n this.gpuPanel = this.addPanel(new _Stats2.Panel(\"GPU\", \"#ff0\", \"#220\"), 2);\n }\n }\n }\n begin() {\n if (!this.isRunningCPUProfiling) {\n this.beginProfiling(\"cpu-started\");\n }\n if (!this.gl || !this.ext)\n return;\n if (this.activeQuery) {\n this.gl.endQuery(this.ext.TIME_ELAPSED_EXT);\n }\n this.activeQuery = this.gl.createQuery();\n if (this.activeQuery) {\n this.gl.beginQuery(this.ext.TIME_ELAPSED_EXT, this.activeQuery);\n }\n }\n end() {\n this.renderCount++;\n if (this.gl && this.ext && this.activeQuery) {\n this.gl.endQuery(this.ext.TIME_ELAPSED_EXT);\n this.gpuQueries.push({ query: this.activeQuery });\n this.activeQuery = null;\n }\n }\n update() {\n if (!this.info) {\n this.processGpuQueries();\n } else {\n this.processWebGPUTimestamps();\n }\n this.endProfiling(\"cpu-started\", \"cpu-finished\", \"cpu-duration\");\n this.updateAverages();\n this.resetCounters();\n }\n processWebGPUTimestamps() {\n this.totalGpuDuration = this.info.render.timestamp;\n this.totalGpuDurationCompute = this.info.compute.timestamp;\n this.addToAverage(this.totalGpuDurationCompute, this.averageGpuCompute);\n }\n updateAverages() {\n this.addToAverage(this.totalCpuDuration, this.averageCpu);\n this.addToAverage(this.totalGpuDuration, this.averageGpu);\n }\n resetCounters() {\n this.renderCount = 0;\n if (this.totalCpuDuration === 0) {\n this.beginProfiling(\"cpu-started\");\n }\n this.totalCpuDuration = 0;\n this.totalFps = 0;\n this.beginTime = this.endInternal();\n }\n resizePanel(panel, offset) {\n panel.canvas.style.position = \"absolute\";\n if (this.minimal) {\n panel.canvas.style.display = \"none\";\n } else {\n panel.canvas.style.display = \"block\";\n if (this.horizontal) {\n panel.canvas.style.top = \"0px\";\n panel.canvas.style.left = offset * panel.WIDTH / panel.PR + \"px\";\n } else {\n panel.canvas.style.left = \"0px\";\n panel.canvas.style.top = offset * panel.HEIGHT / panel.PR + \"px\";\n }\n }\n }\n addPanel(panel, offset) {\n if (panel.canvas) {\n this.dom.appendChild(panel.canvas);\n this.resizePanel(panel, offset);\n }\n return panel;\n }\n showPanel(id) {\n for (let i = 0; i < this.dom.children.length; i++) {\n const child = this.dom.children[i];\n child.style.display = i === id ? \"block\" : \"none\";\n }\n this.mode = id;\n }\n processGpuQueries() {\n if (!this.gl || !this.ext)\n return;\n this.totalGpuDuration = 0;\n this.gpuQueries.forEach((queryInfo, index) => {\n if (this.gl) {\n const available = this.gl.getQueryParameter(queryInfo.query, this.gl.QUERY_RESULT_AVAILABLE);\n const disjoint = this.gl.getParameter(this.ext.GPU_DISJOINT_EXT);\n if (available && !disjoint) {\n const elapsed = this.gl.getQueryParameter(queryInfo.query, this.gl.QUERY_RESULT);\n const duration = elapsed * 1e-6;\n this.totalGpuDuration += duration;\n this.gl.deleteQuery(queryInfo.query);\n this.gpuQueries.splice(index, 1);\n }\n }\n });\n }\n endInternal() {\n this.frames++;\n const time = (performance || Date).now();\n const elapsed = time - this.prevTime;\n if (time >= this.prevCpuTime + 1e3 / this.logsPerSecond) {\n const fps = Math.round(this.frames * 1e3 / elapsed);\n this.addToAverage(fps, this.averageFps);\n this.updatePanel(this.fpsPanel, this.averageFps, 0);\n this.updatePanel(this.msPanel, this.averageCpu, this.precision);\n this.updatePanel(this.gpuPanel, this.averageGpu, this.precision);\n if (this.gpuPanelCompute) {\n this.updatePanel(this.gpuPanelCompute, this.averageGpuCompute);\n }\n this.frames = 0;\n this.prevCpuTime = time;\n this.prevTime = time;\n }\n return time;\n }\n addToAverage(value, averageArray) {\n averageArray.logs.push(value);\n if (averageArray.logs.length > this.samplesLog) {\n averageArray.logs.shift();\n }\n averageArray.graph.push(value);\n if (averageArray.graph.length > this.samplesGraph) {\n averageArray.graph.shift();\n }\n }\n beginProfiling(marker) {\n if (window.performance) {\n window.performance.mark(marker);\n this.isRunningCPUProfiling = true;\n }\n }\n endProfiling(startMarker, endMarker, measureName) {\n if (window.performance && endMarker && this.isRunningCPUProfiling) {\n window.performance.mark(endMarker);\n const cpuMeasure = performance.measure(measureName, startMarker, endMarker);\n this.totalCpuDuration += cpuMeasure.duration;\n this.isRunningCPUProfiling = false;\n }\n }\n updatePanel(panel, averageArray, precision = 2) {\n if (averageArray.logs.length > 0) {\n let sumLog = 0;\n let max = 0.01;\n for (let i = 0; i < averageArray.logs.length; i++) {\n sumLog += averageArray.logs[i];\n if (averageArray.logs[i] > max) {\n max = averageArray.logs[i];\n }\n }\n let sumGraph = 0;\n let maxGraph = 0.01;\n for (let i = 0; i < averageArray.graph.length; i++) {\n sumGraph += averageArray.graph[i];\n if (averageArray.graph[i] > maxGraph) {\n maxGraph = averageArray.graph[i];\n }\n }\n if (panel) {\n panel.update(sumLog / Math.min(averageArray.logs.length, this.samplesLog), sumGraph / Math.min(averageArray.graph.length, this.samplesGraph), max, maxGraph, precision);\n }\n }\n }\n get domElement() {\n return this.dom;\n }\n patchThreeRenderer(renderer) {\n const originalRenderMethod = renderer.render;\n const statsInstance = this;\n renderer.render = function(scene, camera) {\n statsInstance.begin();\n originalRenderMethod.call(this, scene, camera);\n statsInstance.end();\n };\n this.threeRendererPatched = true;\n }\n};\n_Stats.Panel = Panel;\nlet Stats = _Stats;\nexport {\n Stats as default\n};\n//# sourceMappingURL=main.js.map\n","import { useThree, addAfterEffect } from '@react-three/fiber';\nimport * as React from 'react';\nimport Stats from 'stats-gl';\n\nconst StatsGl = /* @__PURE__ */React.forwardRef(function StatsGl({\n className,\n parent,\n id,\n clearStatsGlStyle,\n ...props\n}, fref) {\n const gl = useThree(state => state.gl);\n const stats = React.useMemo(() => {\n const stats = new Stats({\n ...props\n });\n stats.init(gl);\n return stats;\n }, [gl]);\n React.useImperativeHandle(fref, () => stats.domElement, [stats]);\n React.useEffect(() => {\n if (stats) {\n const node = parent && parent.current || document.body;\n node == null || node.appendChild(stats.domElement);\n stats.domElement.querySelectorAll('canvas').forEach(canvas => {\n canvas.style.removeProperty('position');\n });\n if (id) stats.domElement.id = id;\n if (clearStatsGlStyle) stats.domElement.removeAttribute('style');\n stats.domElement.removeAttribute('style');\n const classNames = (className !== null && className !== void 0 ? className : '').split(' ').filter(cls => cls);\n if (classNames.length) stats.domElement.classList.add(...classNames);\n const end = addAfterEffect(() => stats.update());\n return () => {\n if (classNames.length) stats.domElement.classList.remove(...classNames);\n node == null || node.removeChild(stats.domElement);\n end();\n };\n }\n }, [parent, stats, className, id, clearStatsGlStyle]);\n return null;\n});\n\nexport { StatsGl };\n","import { DepthTexture, DepthFormat, UnsignedShortType } from 'three';\nimport * as React from 'react';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { useFBO } from './Fbo.js';\n\nfunction useDepthBuffer({\n size = 256,\n frames = Infinity\n} = {}) {\n const dpr = useThree(state => state.viewport.dpr);\n const {\n width,\n height\n } = useThree(state => state.size);\n const w = size || width * dpr;\n const h = size || height * dpr;\n const depthConfig = React.useMemo(() => {\n const depthTexture = new DepthTexture(w, h);\n depthTexture.format = DepthFormat;\n depthTexture.type = UnsignedShortType;\n return {\n depthTexture\n };\n }, [w, h]);\n let count = 0;\n const depthFBO = useFBO(w, h, depthConfig);\n useFrame(state => {\n if (frames === Infinity || count < frames) {\n state.gl.setRenderTarget(depthFBO);\n state.gl.render(state.scene, state.camera);\n state.gl.setRenderTarget(null);\n count++;\n }\n });\n return depthFBO.depthTexture;\n}\n\nexport { useDepthBuffer };\n","import { useThree } from '@react-three/fiber';\n\nfunction useAspect(width, height, factor = 1) {\n const v = useThree(state => state.viewport);\n const adaptedHeight = height * (v.aspect > width / height ? v.width / width : v.height / height);\n const adaptedWidth = width * (v.aspect > width / height ? v.width / width : v.height / height);\n return [adaptedWidth * factor, adaptedHeight * factor, 1];\n}\n\nexport { useAspect };\n","import * as React from 'react';\nimport { Raycaster, Camera } from 'three';\nimport { useThree, applyProps } from '@react-three/fiber';\n\nfunction useCamera(camera, props) {\n const pointer = useThree(state => state.pointer);\n const [raycast] = React.useState(() => {\n const raycaster = new Raycaster();\n if (props) applyProps(raycaster, props);\n return function (_, intersects) {\n raycaster.setFromCamera(pointer, camera instanceof Camera ? camera : camera.current);\n const rc = this.constructor.prototype.raycast.bind(this);\n if (rc) rc(raycaster, intersects);\n };\n });\n return raycast;\n}\n\nexport { useCamera };\n","function e(e,t,r,n){return new(r||(r=Promise))((function(o,a){function i(e){try{d(n.next(e))}catch(e){a(e)}}function c(e){try{d(n.throw(e))}catch(e){a(e)}}function d(e){var t;e.done?o(e.value):(t=e.value,t instanceof r?t:new r((function(e){e(t)}))).then(i,c)}d((n=n.apply(e,t||[])).next())}))}\"function\"==typeof SuppressedError&&SuppressedError;const t=[\"geforce 320m\",\"geforce 8600\",\"geforce 8600m gt\",\"geforce 8800 gs\",\"geforce 8800 gt\",\"geforce 9400\",\"geforce 9400m g\",\"geforce 9400m\",\"geforce 9600m gt\",\"geforce 9600m\",\"geforce fx go5200\",\"geforce gt 120\",\"geforce gt 130\",\"geforce gt 330m\",\"geforce gtx 285\",\"google swiftshader\",\"intel g41\",\"intel g45\",\"intel gma 4500mhd\",\"intel gma x3100\",\"intel hd 3000\",\"intel q45\",\"legacy\",\"mali-2\",\"mali-3\",\"mali-4\",\"quadro fx 1500\",\"quadro fx 4\",\"quadro fx 5\",\"radeon hd 2400\",\"radeon hd 2600\",\"radeon hd 4670\",\"radeon hd 4850\",\"radeon hd 4870\",\"radeon hd 5670\",\"radeon hd 5750\",\"radeon hd 6290\",\"radeon hd 6300\",\"radeon hd 6310\",\"radeon hd 6320\",\"radeon hd 6490m\",\"radeon hd 6630m\",\"radeon hd 6750m\",\"radeon hd 6770m\",\"radeon hd 6970m\",\"sgx 543\",\"sgx543\"];function r(e){return e=e.toLowerCase().replace(/.*angle ?\\((.+)\\)(?: on vulkan [0-9.]+)?$/i,\"$1\").replace(/\\s(\\d{1,2}gb|direct3d.+$)|\\(r\\)| \\([^)]+\\)$/g,\"\").replace(/(?:vulkan|opengl) \\d+\\.\\d+(?:\\.\\d+)?(?: \\((.*)\\))?/,\"$1\")}const n=\"undefined\"==typeof window,o=(()=>{if(n)return;const{userAgent:e,platform:t,maxTouchPoints:r}=window.navigator,o=/(iphone|ipod|ipad)/i.test(e),a=\"iPad\"===t||\"MacIntel\"===t&&r>0&&!window.MSStream;return{isIpad:a,isMobile:/android/i.test(e)||o||a,isSafari12:/Version\\/12.+Safari/.test(e),isFirefox:/Firefox/.test(e)}})();function a(e,t,r){if(!r)return[t];const n=function(e){const t=\"\\n precision highp float;\\n attribute vec3 aPosition;\\n varying float vvv;\\n void main() {\\n vvv = 0.31622776601683794;\\n gl_Position = vec4(aPosition, 1.0);\\n }\\n \",r=\"\\n precision highp float;\\n varying float vvv;\\n void main() {\\n vec4 enc = vec4(1.0, 255.0, 65025.0, 16581375.0) * vvv;\\n enc = fract(enc);\\n enc -= enc.yzww * vec4(1.0 / 255.0, 1.0 / 255.0, 1.0 / 255.0, 0.0);\\n gl_FragColor = enc;\\n }\\n \",n=e.createShader(35633),o=e.createShader(35632),a=e.createProgram();if(!(o&&n&&a))return;e.shaderSource(n,t),e.shaderSource(o,r),e.compileShader(n),e.compileShader(o),e.attachShader(a,n),e.attachShader(a,o),e.linkProgram(a),e.detachShader(a,n),e.detachShader(a,o),e.deleteShader(n),e.deleteShader(o),e.useProgram(a);const i=e.createBuffer();e.bindBuffer(34962,i),e.bufferData(34962,new Float32Array([-1,-1,0,3,-1,0,-1,3,0]),35044);const c=e.getAttribLocation(a,\"aPosition\");e.vertexAttribPointer(c,3,5126,!1,0,0),e.enableVertexAttribArray(c),e.clearColor(1,1,1,1),e.clear(16384),e.viewport(0,0,1,1),e.drawArrays(4,0,3);const d=new Uint8Array(4);return e.readPixels(0,0,1,1,6408,5121,d),e.deleteProgram(a),e.deleteBuffer(i),d.join(\"\")}(e),a=\"801621810\",i=\"8016218135\",c=\"80162181161\",d=(null==o?void 0:o.isIpad)?[[\"a7\",c,12],[\"a8\",i,15],[\"a8x\",i,15],[\"a9\",i,15],[\"a9x\",i,15],[\"a10\",i,15],[\"a10x\",i,15],[\"a12\",a,15],[\"a12x\",a,15],[\"a12z\",a,15],[\"a14\",a,15],[\"a15\",a,15],[\"m1\",a,15],[\"m2\",a,15]]:[[\"a7\",c,12],[\"a8\",i,12],[\"a9\",i,15],[\"a10\",i,15],[\"a11\",a,15],[\"a12\",a,15],[\"a13\",a,15],[\"a14\",a,15],[\"a15\",a,15],[\"a16\",a,15],[\"a17\",a,15]];let l;\"80162181255\"===n?l=d.filter((([,,e])=>e>=14)):(l=d.filter((([,e])=>e===n)),l.length||(l=d));return l.map((([e])=>`apple ${e} gpu`))}class i extends Error{constructor(e){super(e),Object.setPrototypeOf(this,new.target.prototype)}}const c=[],d=[];function l(e,t){if(e===t)return 0;const r=e;e.length>t.length&&(e=t,t=r);let n=e.length,o=t.length;for(;n>0&&e.charCodeAt(~-n)===t.charCodeAt(~-o);)n--,o--;let a,i=0;for(;i<n&&e.charCodeAt(i)===t.charCodeAt(i);)i++;if(n-=i,o-=i,0===n)return o;let l,s,f=0,u=0,g=0;for(;u<n;)d[u]=e.charCodeAt(i+u),c[u]=++u;for(;g<o;)for(a=t.charCodeAt(i+g),l=g++,f=g,u=0;u<n;u++)s=a===d[u]?l:l+1,l=c[u],f=c[u]=l>f?s>f?f+1:s:s>l?l+1:s;return f}function s(e){return null!=e}const f=({mobileTiers:c=[0,15,30,60],desktopTiers:d=[0,15,30,60],override:f={},glContext:u,failIfMajorPerformanceCaveat:g=!1,benchmarksURL:h=\"https://unpkg.com/detect-gpu@5.0.70/dist/benchmarks\"}={})=>e(void 0,void 0,void 0,(function*(){const p={};if(n)return{tier:0,type:\"SSR\"};const{isIpad:m=!!(null==o?void 0:o.isIpad),isMobile:v=!!(null==o?void 0:o.isMobile),screenSize:w=window.screen,loadBenchmarks:x=(t=>e(void 0,void 0,void 0,(function*(){const e=yield fetch(`${h}/${t}`).then((e=>e.json()));if(parseInt(e.shift().split(\".\")[0],10)<4)throw new i(\"Detect GPU benchmark data is out of date. Please update to version 4x\");return e})))}=f;let{renderer:A}=f;const P=(e,t,r,n,o)=>({device:o,fps:n,gpu:r,isMobile:v,tier:e,type:t});let S,b=\"\";if(A)A=r(A),S=[A];else{const e=u||function(e,t=!1){const r={alpha:!1,antialias:!1,depth:!1,failIfMajorPerformanceCaveat:t,powerPreference:\"high-performance\",stencil:!1};e&&delete r.powerPreference;const n=window.document.createElement(\"canvas\"),o=n.getContext(\"webgl\",r)||n.getContext(\"experimental-webgl\",r);return null!=o?o:void 0}(null==o?void 0:o.isSafari12,g);if(!e)return P(0,\"WEBGL_UNSUPPORTED\");const t=(null==o?void 0:o.isFirefox)?null:e.getExtension(\"WEBGL_debug_renderer_info\");if(A=t?e.getParameter(t.UNMASKED_RENDERER_WEBGL):e.getParameter(e.RENDERER),!A)return P(1,\"FALLBACK\");b=A,A=r(A),S=function(e,t,r){return\"apple gpu\"===t?a(e,t,r):[t]}(e,A,v)}const E=(yield Promise.all(S.map((function(t){var r;return e(this,void 0,void 0,(function*(){const e=(e=>{const t=v?[\"adreno\",\"apple\",\"mali-t\",\"mali\",\"nvidia\",\"powervr\",\"samsung\"]:[\"intel\",\"apple\",\"amd\",\"radeon\",\"nvidia\",\"geforce\",\"adreno\"];for(const r of t)if(e.includes(r))return r})(t);if(!e)return;const n=`${v?\"m\":\"d\"}-${e}${m?\"-ipad\":\"\"}.json`,o=p[n]=null!==(r=p[n])&&void 0!==r?r:x(n);let a;try{a=yield o}catch(e){if(e instanceof i)throw e;return}const c=function(e){var t;const r=(e=e.replace(/\\([^)]+\\)/,\"\")).match(/\\d+/)||e.match(/(\\W|^)([A-Za-z]{1,3})(\\W|$)/g);return null!==(t=null==r?void 0:r.join(\"\").replace(/\\W|amd/g,\"\"))&&void 0!==t?t:\"\"}(t);let d=a.filter((([,e])=>e===c));d.length||(d=a.filter((([e])=>e.includes(t))));const s=d.length;if(0===s)return;const f=t.split(/[.,()\\[\\]/\\s]/g).sort().filter(((e,t,r)=>0===t||e!==r[t-1])).join(\" \");let u,[g,,,,h]=s>1?d.map((e=>[e,l(f,e[2])])).sort((([,e],[,t])=>e-t))[0][0]:d[0],A=Number.MAX_VALUE;const{devicePixelRatio:P}=window,S=w.width*P*w.height*P;for(const e of h){const[t,r]=e,n=t*r,o=Math.abs(S-n);o<A&&(A=o,u=e)}if(!u)return;const[,,b,E]=u;return[A,b,g,E]}))})))).filter(s).sort((([e=Number.MAX_VALUE,t],[r=Number.MAX_VALUE,n])=>e===r?t-n:e-r));if(!E.length){const e=t.find((e=>A.includes(e)));return e?P(0,\"BLOCKLISTED\",e):P(1,\"FALLBACK\",`${A} (${b})`)}const[,y,C,L]=E[0];if(-1===y)return P(0,\"BLOCKLISTED\",C,y,L);const M=v?c:d;let $=0;for(let e=0;e<M.length;e++)y>=M[e]&&($=e);return P($,\"BENCHMARK\",C,y,L)}));export{f as getGPUTier};\n//# sourceMappingURL=detect-gpu.esm.js.map\n","import * as React from 'react';\nimport { getGPUTier } from 'detect-gpu';\nimport { suspend } from 'suspend-react';\n\nconst useDetectGPU = props => suspend(() => getGPUTier(props), ['useDetectGPU']);\nfunction DetectGPU({\n children,\n ...options\n}) {\n const result = useDetectGPU(options);\n return /*#__PURE__*/React.createElement(React.Fragment, null, children == null ? void 0 : children(result));\n}\n\nexport { DetectGPU, useDetectGPU };\n","// Split strategy constants\nexport const CENTER = 0;\nexport const AVERAGE = 1;\nexport const SAH = 2;\n\n// Traversal constants\nexport const NOT_INTERSECTED = 0;\nexport const INTERSECTED = 1;\nexport const CONTAINED = 2;\n\n// SAH cost constants\n// TODO: hone these costs more. The relative difference between them should be the\n// difference in measured time to perform a triangle intersection vs traversing\n// bounds.\nexport const TRIANGLE_INTERSECT_COST = 1.25;\nexport const TRAVERSAL_COST = 1;\n\n\n// Build constants\nexport const BYTES_PER_NODE = 6 * 4 + 4 + 4;\nexport const IS_LEAFNODE_FLAG = 0xFFFF;\n\n// EPSILON for computing floating point error during build\n// https://en.wikipedia.org/wiki/Machine_epsilon#Values_for_standard_hardware_floating_point_arithmetics\nexport const FLOAT32_EPSILON = Math.pow( 2, - 24 );\n\nexport const SKIP_GENERATION = Symbol( 'SKIP_GENERATION' );\n","import { BufferAttribute } from 'three';\n\nexport function getVertexCount( geo ) {\n\n\treturn geo.index ? geo.index.count : geo.attributes.position.count;\n\n}\n\nexport function getTriCount( geo ) {\n\n\treturn getVertexCount( geo ) / 3;\n\n}\n\nexport function getIndexArray( vertexCount, BufferConstructor = ArrayBuffer ) {\n\n\tif ( vertexCount > 65535 ) {\n\n\t\treturn new Uint32Array( new BufferConstructor( 4 * vertexCount ) );\n\n\t} else {\n\n\t\treturn new Uint16Array( new BufferConstructor( 2 * vertexCount ) );\n\n\t}\n\n}\n\n// ensures that an index is present on the geometry\nexport function ensureIndex( geo, options ) {\n\n\tif ( ! geo.index ) {\n\n\t\tconst vertexCount = geo.attributes.position.count;\n\t\tconst BufferConstructor = options.useSharedArrayBuffer ? SharedArrayBuffer : ArrayBuffer;\n\t\tconst index = getIndexArray( vertexCount, BufferConstructor );\n\t\tgeo.setIndex( new BufferAttribute( index, 1 ) );\n\n\t\tfor ( let i = 0; i < vertexCount; i ++ ) {\n\n\t\t\tindex[ i ] = i;\n\n\t\t}\n\n\t}\n\n}\n\n// Computes the set of { offset, count } ranges which need independent BVH roots. Each\n// region in the geometry index that belongs to a different set of material groups requires\n// a separate BVH root, so that triangles indices belonging to one group never get swapped\n// with triangle indices belongs to another group. For example, if the groups were like this:\n//\n// [-------------------------------------------------------------]\n// |__________________|\n// g0 = [0, 20] |______________________||_____________________|\n// g1 = [16, 40] g2 = [41, 60]\n//\n// we would need four BVH roots: [0, 15], [16, 20], [21, 40], [41, 60].\nexport function getFullGeometryRange( geo, range ) {\n\n\tconst triCount = getTriCount( geo );\n\tconst drawRange = range ? range : geo.drawRange;\n\tconst start = drawRange.start / 3;\n\tconst end = ( drawRange.start + drawRange.count ) / 3;\n\n\tconst offset = Math.max( 0, start );\n\tconst count = Math.min( triCount, end ) - offset;\n\treturn [ {\n\t\toffset: Math.floor( offset ),\n\t\tcount: Math.floor( count ),\n\t} ];\n\n}\n\nexport function getRootIndexRanges( geo, range ) {\n\n\tif ( ! geo.groups || ! geo.groups.length ) {\n\n\t\treturn getFullGeometryRange( geo, range );\n\n\t}\n\n\tconst ranges = [];\n\tconst rangeBoundaries = new Set();\n\n\tconst drawRange = range ? range : geo.drawRange;\n\tconst drawRangeStart = drawRange.start / 3;\n\tconst drawRangeEnd = ( drawRange.start + drawRange.count ) / 3;\n\tfor ( const group of geo.groups ) {\n\n\t\tconst groupStart = group.start / 3;\n\t\tconst groupEnd = ( group.start + group.count ) / 3;\n\t\trangeBoundaries.add( Math.max( drawRangeStart, groupStart ) );\n\t\trangeBoundaries.add( Math.min( drawRangeEnd, groupEnd ) );\n\n\t}\n\n\n\t// note that if you don't pass in a comparator, it sorts them lexicographically as strings :-(\n\tconst sortedBoundaries = Array.from( rangeBoundaries.values() ).sort( ( a, b ) => a - b );\n\tfor ( let i = 0; i < sortedBoundaries.length - 1; i ++ ) {\n\n\t\tconst start = sortedBoundaries[ i ];\n\t\tconst end = sortedBoundaries[ i + 1 ];\n\n\t\tranges.push( {\n\t\t\toffset: Math.floor( start ),\n\t\t\tcount: Math.floor( end - start ),\n\t\t} );\n\n\t}\n\n\treturn ranges;\n\n}\n\nexport function hasGroupGaps( geometry, range ) {\n\n\tconst vertexCount = getTriCount( geometry );\n\tconst groups = getRootIndexRanges( geometry, range )\n\t\t.sort( ( a, b ) => a.offset - b.offset );\n\n\tconst finalGroup = groups[ groups.length - 1 ];\n\tfinalGroup.count = Math.min( vertexCount - finalGroup.offset, finalGroup.count );\n\n\tlet total = 0;\n\tgroups.forEach( ( { count } ) => total += count );\n\treturn vertexCount !== total;\n\n}\n","import { FLOAT32_EPSILON } from '../Constants.js';\nimport { getTriCount } from './geometryUtils.js';\n\n// computes the union of the bounds of all of the given triangles and puts the resulting box in \"target\".\n// A bounding box is computed for the centroids of the triangles, as well, and placed in \"centroidTarget\".\n// These are computed together to avoid redundant accesses to bounds array.\nexport function getBounds( triangleBounds, offset, count, target, centroidTarget ) {\n\n\tlet minx = Infinity;\n\tlet miny = Infinity;\n\tlet minz = Infinity;\n\tlet maxx = - Infinity;\n\tlet maxy = - Infinity;\n\tlet maxz = - Infinity;\n\n\tlet cminx = Infinity;\n\tlet cminy = Infinity;\n\tlet cminz = Infinity;\n\tlet cmaxx = - Infinity;\n\tlet cmaxy = - Infinity;\n\tlet cmaxz = - Infinity;\n\n\tfor ( let i = offset * 6, end = ( offset + count ) * 6; i < end; i += 6 ) {\n\n\t\tconst cx = triangleBounds[ i + 0 ];\n\t\tconst hx = triangleBounds[ i + 1 ];\n\t\tconst lx = cx - hx;\n\t\tconst rx = cx + hx;\n\t\tif ( lx < minx ) minx = lx;\n\t\tif ( rx > maxx ) maxx = rx;\n\t\tif ( cx < cminx ) cminx = cx;\n\t\tif ( cx > cmaxx ) cmaxx = cx;\n\n\t\tconst cy = triangleBounds[ i + 2 ];\n\t\tconst hy = triangleBounds[ i + 3 ];\n\t\tconst ly = cy - hy;\n\t\tconst ry = cy + hy;\n\t\tif ( ly < miny ) miny = ly;\n\t\tif ( ry > maxy ) maxy = ry;\n\t\tif ( cy < cminy ) cminy = cy;\n\t\tif ( cy > cmaxy ) cmaxy = cy;\n\n\t\tconst cz = triangleBounds[ i + 4 ];\n\t\tconst hz = triangleBounds[ i + 5 ];\n\t\tconst lz = cz - hz;\n\t\tconst rz = cz + hz;\n\t\tif ( lz < minz ) minz = lz;\n\t\tif ( rz > maxz ) maxz = rz;\n\t\tif ( cz < cminz ) cminz = cz;\n\t\tif ( cz > cmaxz ) cmaxz = cz;\n\n\t}\n\n\ttarget[ 0 ] = minx;\n\ttarget[ 1 ] = miny;\n\ttarget[ 2 ] = minz;\n\n\ttarget[ 3 ] = maxx;\n\ttarget[ 4 ] = maxy;\n\ttarget[ 5 ] = maxz;\n\n\tcentroidTarget[ 0 ] = cminx;\n\tcentroidTarget[ 1 ] = cminy;\n\tcentroidTarget[ 2 ] = cminz;\n\n\tcentroidTarget[ 3 ] = cmaxx;\n\tcentroidTarget[ 4 ] = cmaxy;\n\tcentroidTarget[ 5 ] = cmaxz;\n\n}\n\n// precomputes the bounding box for each triangle; required for quickly calculating tree splits.\n// result is an array of size tris.length * 6 where triangle i maps to a\n// [x_center, x_delta, y_center, y_delta, z_center, z_delta] tuple starting at index i * 6,\n// representing the center and half-extent in each dimension of triangle i\nexport function computeTriangleBounds( geo, target = null, offset = null, count = null ) {\n\n\tconst posAttr = geo.attributes.position;\n\tconst index = geo.index ? geo.index.array : null;\n\tconst triCount = getTriCount( geo );\n\tconst normalized = posAttr.normalized;\n\tlet triangleBounds;\n\tif ( target === null ) {\n\n\t\ttriangleBounds = new Float32Array( triCount * 6 );\n\t\toffset = 0;\n\t\tcount = triCount;\n\n\t} else {\n\n\t\ttriangleBounds = target;\n\t\toffset = offset || 0;\n\t\tcount = count || triCount;\n\n\t}\n\n\t// used for non-normalized positions\n\tconst posArr = posAttr.array;\n\n\t// support for an interleaved position buffer\n\tconst bufferOffset = posAttr.offset || 0;\n\tlet stride = 3;\n\tif ( posAttr.isInterleavedBufferAttribute ) {\n\n\t\tstride = posAttr.data.stride;\n\n\t}\n\n\t// used for normalized positions\n\tconst getters = [ 'getX', 'getY', 'getZ' ];\n\n\tfor ( let tri = offset; tri < offset + count; tri ++ ) {\n\n\t\tconst tri3 = tri * 3;\n\t\tconst tri6 = tri * 6;\n\n\t\tlet ai = tri3 + 0;\n\t\tlet bi = tri3 + 1;\n\t\tlet ci = tri3 + 2;\n\n\t\tif ( index ) {\n\n\t\t\tai = index[ ai ];\n\t\t\tbi = index[ bi ];\n\t\t\tci = index[ ci ];\n\n\t\t}\n\n\t\t// we add the stride and offset here since we access the array directly\n\t\t// below for the sake of performance\n\t\tif ( ! normalized ) {\n\n\t\t\tai = ai * stride + bufferOffset;\n\t\t\tbi = bi * stride + bufferOffset;\n\t\t\tci = ci * stride + bufferOffset;\n\n\t\t}\n\n\t\tfor ( let el = 0; el < 3; el ++ ) {\n\n\t\t\tlet a, b, c;\n\n\t\t\tif ( normalized ) {\n\n\t\t\t\ta = posAttr[ getters[ el ] ]( ai );\n\t\t\t\tb = posAttr[ getters[ el ] ]( bi );\n\t\t\t\tc = posAttr[ getters[ el ] ]( ci );\n\n\t\t\t} else {\n\n\t\t\t\ta = posArr[ ai + el ];\n\t\t\t\tb = posArr[ bi + el ];\n\t\t\t\tc = posArr[ ci + el ];\n\n\t\t\t}\n\n\t\t\tlet min = a;\n\t\t\tif ( b < min ) min = b;\n\t\t\tif ( c < min ) min = c;\n\n\t\t\tlet max = a;\n\t\t\tif ( b > max ) max = b;\n\t\t\tif ( c > max ) max = c;\n\n\t\t\t// Increase the bounds size by float32 epsilon to avoid precision errors when\n\t\t\t// converting to 32 bit float. Scale the epsilon by the size of the numbers being\n\t\t\t// worked with.\n\t\t\tconst halfExtents = ( max - min ) / 2;\n\t\t\tconst el2 = el * 2;\n\t\t\ttriangleBounds[ tri6 + el2 + 0 ] = min + halfExtents;\n\t\t\ttriangleBounds[ tri6 + el2 + 1 ] = halfExtents + ( Math.abs( min ) + halfExtents ) * FLOAT32_EPSILON;\n\n\t\t}\n\n\t}\n\n\treturn triangleBounds;\n\n}\n","export function arrayToBox( nodeIndex32, array, target ) {\n\n\ttarget.min.x = array[ nodeIndex32 ];\n\ttarget.min.y = array[ nodeIndex32 + 1 ];\n\ttarget.min.z = array[ nodeIndex32 + 2 ];\n\n\ttarget.max.x = array[ nodeIndex32 + 3 ];\n\ttarget.max.y = array[ nodeIndex32 + 4 ];\n\ttarget.max.z = array[ nodeIndex32 + 5 ];\n\n\treturn target;\n\n}\n\nexport function makeEmptyBounds( target ) {\n\n\ttarget[ 0 ] = target[ 1 ] = target[ 2 ] = Infinity;\n\ttarget[ 3 ] = target[ 4 ] = target[ 5 ] = - Infinity;\n\n}\n\nexport function getLongestEdgeIndex( bounds ) {\n\n\tlet splitDimIdx = - 1;\n\tlet splitDist = - Infinity;\n\n\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\tconst dist = bounds[ i + 3 ] - bounds[ i ];\n\t\tif ( dist > splitDist ) {\n\n\t\t\tsplitDist = dist;\n\t\t\tsplitDimIdx = i;\n\n\t\t}\n\n\t}\n\n\treturn splitDimIdx;\n\n}\n\n// copies bounds a into bounds b\nexport function copyBounds( source, target ) {\n\n\ttarget.set( source );\n\n}\n\n// sets bounds target to the union of bounds a and b\nexport function unionBounds( a, b, target ) {\n\n\tlet aVal, bVal;\n\tfor ( let d = 0; d < 3; d ++ ) {\n\n\t\tconst d3 = d + 3;\n\n\t\t// set the minimum values\n\t\taVal = a[ d ];\n\t\tbVal = b[ d ];\n\t\ttarget[ d ] = aVal < bVal ? aVal : bVal;\n\n\t\t// set the max values\n\t\taVal = a[ d3 ];\n\t\tbVal = b[ d3 ];\n\t\ttarget[ d3 ] = aVal > bVal ? aVal : bVal;\n\n\t}\n\n}\n\n// expands the given bounds by the provided triangle bounds\nexport function expandByTriangleBounds( startIndex, triangleBounds, bounds ) {\n\n\tfor ( let d = 0; d < 3; d ++ ) {\n\n\t\tconst tCenter = triangleBounds[ startIndex + 2 * d ];\n\t\tconst tHalf = triangleBounds[ startIndex + 2 * d + 1 ];\n\n\t\tconst tMin = tCenter - tHalf;\n\t\tconst tMax = tCenter + tHalf;\n\n\t\tif ( tMin < bounds[ d ] ) {\n\n\t\t\tbounds[ d ] = tMin;\n\n\t\t}\n\n\t\tif ( tMax > bounds[ d + 3 ] ) {\n\n\t\t\tbounds[ d + 3 ] = tMax;\n\n\t\t}\n\n\t}\n\n}\n\n// compute bounds surface area\nexport function computeSurfaceArea( bounds ) {\n\n\tconst d0 = bounds[ 3 ] - bounds[ 0 ];\n\tconst d1 = bounds[ 4 ] - bounds[ 1 ];\n\tconst d2 = bounds[ 5 ] - bounds[ 2 ];\n\n\treturn 2 * ( d0 * d1 + d1 * d2 + d2 * d0 );\n\n}\n","import { getLongestEdgeIndex, computeSurfaceArea, copyBounds, unionBounds, expandByTriangleBounds } from '../../utils/ArrayBoxUtilities.js';\nimport { CENTER, AVERAGE, SAH, TRIANGLE_INTERSECT_COST, TRAVERSAL_COST } from '../Constants.js';\n\nconst BIN_COUNT = 32;\nconst binsSort = ( a, b ) => a.candidate - b.candidate;\nconst sahBins = new Array( BIN_COUNT ).fill().map( () => {\n\n\treturn {\n\n\t\tcount: 0,\n\t\tbounds: new Float32Array( 6 ),\n\t\trightCacheBounds: new Float32Array( 6 ),\n\t\tleftCacheBounds: new Float32Array( 6 ),\n\t\tcandidate: 0,\n\n\t};\n\n} );\nconst leftBounds = new Float32Array( 6 );\n\nexport function getOptimalSplit( nodeBoundingData, centroidBoundingData, triangleBounds, offset, count, strategy ) {\n\n\tlet axis = - 1;\n\tlet pos = 0;\n\n\t// Center\n\tif ( strategy === CENTER ) {\n\n\t\taxis = getLongestEdgeIndex( centroidBoundingData );\n\t\tif ( axis !== - 1 ) {\n\n\t\t\tpos = ( centroidBoundingData[ axis ] + centroidBoundingData[ axis + 3 ] ) / 2;\n\n\t\t}\n\n\t} else if ( strategy === AVERAGE ) {\n\n\t\taxis = getLongestEdgeIndex( nodeBoundingData );\n\t\tif ( axis !== - 1 ) {\n\n\t\t\tpos = getAverage( triangleBounds, offset, count, axis );\n\n\t\t}\n\n\t} else if ( strategy === SAH ) {\n\n\t\tconst rootSurfaceArea = computeSurfaceArea( nodeBoundingData );\n\t\tlet bestCost = TRIANGLE_INTERSECT_COST * count;\n\n\t\t// iterate over all axes\n\t\tconst cStart = offset * 6;\n\t\tconst cEnd = ( offset + count ) * 6;\n\t\tfor ( let a = 0; a < 3; a ++ ) {\n\n\t\t\tconst axisLeft = centroidBoundingData[ a ];\n\t\t\tconst axisRight = centroidBoundingData[ a + 3 ];\n\t\t\tconst axisLength = axisRight - axisLeft;\n\t\t\tconst binWidth = axisLength / BIN_COUNT;\n\n\t\t\t// If we have fewer triangles than we're planning to split then just check all\n\t\t\t// the triangle positions because it will be faster.\n\t\t\tif ( count < BIN_COUNT / 4 ) {\n\n\t\t\t\t// initialize the bin candidates\n\t\t\t\tconst truncatedBins = [ ...sahBins ];\n\t\t\t\ttruncatedBins.length = count;\n\n\t\t\t\t// set the candidates\n\t\t\t\tlet b = 0;\n\t\t\t\tfor ( let c = cStart; c < cEnd; c += 6, b ++ ) {\n\n\t\t\t\t\tconst bin = truncatedBins[ b ];\n\t\t\t\t\tbin.candidate = triangleBounds[ c + 2 * a ];\n\t\t\t\t\tbin.count = 0;\n\n\t\t\t\t\tconst {\n\t\t\t\t\t\tbounds,\n\t\t\t\t\t\tleftCacheBounds,\n\t\t\t\t\t\trightCacheBounds,\n\t\t\t\t\t} = bin;\n\t\t\t\t\tfor ( let d = 0; d < 3; d ++ ) {\n\n\t\t\t\t\t\trightCacheBounds[ d ] = Infinity;\n\t\t\t\t\t\trightCacheBounds[ d + 3 ] = - Infinity;\n\n\t\t\t\t\t\tleftCacheBounds[ d ] = Infinity;\n\t\t\t\t\t\tleftCacheBounds[ d + 3 ] = - Infinity;\n\n\t\t\t\t\t\tbounds[ d ] = Infinity;\n\t\t\t\t\t\tbounds[ d + 3 ] = - Infinity;\n\n\t\t\t\t\t}\n\n\t\t\t\t\texpandByTriangleBounds( c, triangleBounds, bounds );\n\n\t\t\t\t}\n\n\t\t\t\ttruncatedBins.sort( binsSort );\n\n\t\t\t\t// remove redundant splits\n\t\t\t\tlet splitCount = count;\n\t\t\t\tfor ( let bi = 0; bi < splitCount; bi ++ ) {\n\n\t\t\t\t\tconst bin = truncatedBins[ bi ];\n\t\t\t\t\twhile ( bi + 1 < splitCount && truncatedBins[ bi + 1 ].candidate === bin.candidate ) {\n\n\t\t\t\t\t\ttruncatedBins.splice( bi + 1, 1 );\n\t\t\t\t\t\tsplitCount --;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// find the appropriate bin for each triangle and expand the bounds.\n\t\t\t\tfor ( let c = cStart; c < cEnd; c += 6 ) {\n\n\t\t\t\t\tconst center = triangleBounds[ c + 2 * a ];\n\t\t\t\t\tfor ( let bi = 0; bi < splitCount; bi ++ ) {\n\n\t\t\t\t\t\tconst bin = truncatedBins[ bi ];\n\t\t\t\t\t\tif ( center >= bin.candidate ) {\n\n\t\t\t\t\t\t\texpandByTriangleBounds( c, triangleBounds, bin.rightCacheBounds );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\texpandByTriangleBounds( c, triangleBounds, bin.leftCacheBounds );\n\t\t\t\t\t\t\tbin.count ++;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// expand all the bounds\n\t\t\t\tfor ( let bi = 0; bi < splitCount; bi ++ ) {\n\n\t\t\t\t\tconst bin = truncatedBins[ bi ];\n\t\t\t\t\tconst leftCount = bin.count;\n\t\t\t\t\tconst rightCount = count - bin.count;\n\n\t\t\t\t\t// check the cost of this split\n\t\t\t\t\tconst leftBounds = bin.leftCacheBounds;\n\t\t\t\t\tconst rightBounds = bin.rightCacheBounds;\n\n\t\t\t\t\tlet leftProb = 0;\n\t\t\t\t\tif ( leftCount !== 0 ) {\n\n\t\t\t\t\t\tleftProb = computeSurfaceArea( leftBounds ) / rootSurfaceArea;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tlet rightProb = 0;\n\t\t\t\t\tif ( rightCount !== 0 ) {\n\n\t\t\t\t\t\trightProb = computeSurfaceArea( rightBounds ) / rootSurfaceArea;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cost = TRAVERSAL_COST + TRIANGLE_INTERSECT_COST * (\n\t\t\t\t\t\tleftProb * leftCount + rightProb * rightCount\n\t\t\t\t\t);\n\n\t\t\t\t\tif ( cost < bestCost ) {\n\n\t\t\t\t\t\taxis = a;\n\t\t\t\t\t\tbestCost = cost;\n\t\t\t\t\t\tpos = bin.candidate;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\t// reset the bins\n\t\t\t\tfor ( let i = 0; i < BIN_COUNT; i ++ ) {\n\n\t\t\t\t\tconst bin = sahBins[ i ];\n\t\t\t\t\tbin.count = 0;\n\t\t\t\t\tbin.candidate = axisLeft + binWidth + i * binWidth;\n\n\t\t\t\t\tconst bounds = bin.bounds;\n\t\t\t\t\tfor ( let d = 0; d < 3; d ++ ) {\n\n\t\t\t\t\t\tbounds[ d ] = Infinity;\n\t\t\t\t\t\tbounds[ d + 3 ] = - Infinity;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\t// iterate over all center positions\n\t\t\t\tfor ( let c = cStart; c < cEnd; c += 6 ) {\n\n\t\t\t\t\tconst triCenter = triangleBounds[ c + 2 * a ];\n\t\t\t\t\tconst relativeCenter = triCenter - axisLeft;\n\n\t\t\t\t\t// in the partition function if the centroid lies on the split plane then it is\n\t\t\t\t\t// considered to be on the right side of the split\n\t\t\t\t\tlet binIndex = ~ ~ ( relativeCenter / binWidth );\n\t\t\t\t\tif ( binIndex >= BIN_COUNT ) binIndex = BIN_COUNT - 1;\n\n\t\t\t\t\tconst bin = sahBins[ binIndex ];\n\t\t\t\t\tbin.count ++;\n\n\t\t\t\t\texpandByTriangleBounds( c, triangleBounds, bin.bounds );\n\n\t\t\t\t}\n\n\t\t\t\t// cache the unioned bounds from right to left so we don't have to regenerate them each time\n\t\t\t\tconst lastBin = sahBins[ BIN_COUNT - 1 ];\n\t\t\t\tcopyBounds( lastBin.bounds, lastBin.rightCacheBounds );\n\t\t\t\tfor ( let i = BIN_COUNT - 2; i >= 0; i -- ) {\n\n\t\t\t\t\tconst bin = sahBins[ i ];\n\t\t\t\t\tconst nextBin = sahBins[ i + 1 ];\n\t\t\t\t\tunionBounds( bin.bounds, nextBin.rightCacheBounds, bin.rightCacheBounds );\n\n\t\t\t\t}\n\n\t\t\t\tlet leftCount = 0;\n\t\t\t\tfor ( let i = 0; i < BIN_COUNT - 1; i ++ ) {\n\n\t\t\t\t\tconst bin = sahBins[ i ];\n\t\t\t\t\tconst binCount = bin.count;\n\t\t\t\t\tconst bounds = bin.bounds;\n\n\t\t\t\t\tconst nextBin = sahBins[ i + 1 ];\n\t\t\t\t\tconst rightBounds = nextBin.rightCacheBounds;\n\n\t\t\t\t\t// don't do anything with the bounds if the new bounds have no triangles\n\t\t\t\t\tif ( binCount !== 0 ) {\n\n\t\t\t\t\t\tif ( leftCount === 0 ) {\n\n\t\t\t\t\t\t\tcopyBounds( bounds, leftBounds );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\tunionBounds( bounds, leftBounds, leftBounds );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\tleftCount += binCount;\n\n\t\t\t\t\t// check the cost of this split\n\t\t\t\t\tlet leftProb = 0;\n\t\t\t\t\tlet rightProb = 0;\n\n\t\t\t\t\tif ( leftCount !== 0 ) {\n\n\t\t\t\t\t\tleftProb = computeSurfaceArea( leftBounds ) / rootSurfaceArea;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst rightCount = count - leftCount;\n\t\t\t\t\tif ( rightCount !== 0 ) {\n\n\t\t\t\t\t\trightProb = computeSurfaceArea( rightBounds ) / rootSurfaceArea;\n\n\t\t\t\t\t}\n\n\t\t\t\t\tconst cost = TRAVERSAL_COST + TRIANGLE_INTERSECT_COST * (\n\t\t\t\t\t\tleftProb * leftCount + rightProb * rightCount\n\t\t\t\t\t);\n\n\t\t\t\t\tif ( cost < bestCost ) {\n\n\t\t\t\t\t\taxis = a;\n\t\t\t\t\t\tbestCost = cost;\n\t\t\t\t\t\tpos = bin.candidate;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\tconsole.warn( `MeshBVH: Invalid build strategy value ${ strategy } used.` );\n\n\t}\n\n\treturn { axis, pos };\n\n}\n\n// returns the average coordinate on the specified axis of the all the provided triangles\nfunction getAverage( triangleBounds, offset, count, axis ) {\n\n\tlet avg = 0;\n\tfor ( let i = offset, end = offset + count; i < end; i ++ ) {\n\n\t\tavg += triangleBounds[ i * 6 + axis * 2 ];\n\n\t}\n\n\treturn avg / count;\n\n}\n","export class MeshBVHNode {\n\n\tconstructor() {\n\n\t\t// internal nodes have boundingData, left, right, and splitAxis\n\t\t// leaf nodes have offset and count (referring to primitives in the mesh geometry)\n\n\t\tthis.boundingData = new Float32Array( 6 );\n\n\t}\n\n}\n","/********************************************************/\n/* This file is generated from \"sortUtils.template.js\". */\n/********************************************************/\n// reorders `tris` such that for `count` elements after `offset`, elements on the left side of the split\n// will be on the left and elements on the right side of the split will be on the right. returns the index\n// of the first element on the right side, or offset + count if there are no elements on the right side.\nfunction partition( indirectBuffer, index, triangleBounds, offset, count, split ) {\n\n\tlet left = offset;\n\tlet right = offset + count - 1;\n\tconst pos = split.pos;\n\tconst axisOffset = split.axis * 2;\n\n\t// hoare partitioning, see e.g. https://en.wikipedia.org/wiki/Quicksort#Hoare_partition_scheme\n\twhile ( true ) {\n\n\t\twhile ( left <= right && triangleBounds[ left * 6 + axisOffset ] < pos ) {\n\n\t\t\tleft ++;\n\n\t\t}\n\n\t\t// if a triangle center lies on the partition plane it is considered to be on the right side\n\t\twhile ( left <= right && triangleBounds[ right * 6 + axisOffset ] >= pos ) {\n\n\t\t\tright --;\n\n\t\t}\n\n\t\tif ( left < right ) {\n\n\t\t\t// we need to swap all of the information associated with the triangles at index\n\t\t\t// left and right; that's the verts in the geometry index, the bounds,\n\t\t\t// and perhaps the SAH planes\n\n\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\tlet t0 = index[ left * 3 + i ];\n\t\t\t\tindex[ left * 3 + i ] = index[ right * 3 + i ];\n\t\t\t\tindex[ right * 3 + i ] = t0;\n\n\t\t\t}\n\n\n\t\t\t// swap bounds\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tlet tb = triangleBounds[ left * 6 + i ];\n\t\t\t\ttriangleBounds[ left * 6 + i ] = triangleBounds[ right * 6 + i ];\n\t\t\t\ttriangleBounds[ right * 6 + i ] = tb;\n\n\t\t\t}\n\n\t\t\tleft ++;\n\t\t\tright --;\n\n\t\t} else {\n\n\t\t\treturn left;\n\n\t\t}\n\n\t}\n\n}\n\nexport { partition };\n","/********************************************************/\n/* This file is generated from \"sortUtils.template.js\". */\n/********************************************************/\n// reorders `tris` such that for `count` elements after `offset`, elements on the left side of the split\n// will be on the left and elements on the right side of the split will be on the right. returns the index\n// of the first element on the right side, or offset + count if there are no elements on the right side.\nfunction partition_indirect( indirectBuffer, index, triangleBounds, offset, count, split ) {\n\n\tlet left = offset;\n\tlet right = offset + count - 1;\n\tconst pos = split.pos;\n\tconst axisOffset = split.axis * 2;\n\n\t// hoare partitioning, see e.g. https://en.wikipedia.org/wiki/Quicksort#Hoare_partition_scheme\n\twhile ( true ) {\n\n\t\twhile ( left <= right && triangleBounds[ left * 6 + axisOffset ] < pos ) {\n\n\t\t\tleft ++;\n\n\t\t}\n\n\t\t// if a triangle center lies on the partition plane it is considered to be on the right side\n\t\twhile ( left <= right && triangleBounds[ right * 6 + axisOffset ] >= pos ) {\n\n\t\t\tright --;\n\n\t\t}\n\n\t\tif ( left < right ) {\n\n\t\t\t// we need to swap all of the information associated with the triangles at index\n\t\t\t// left and right; that's the verts in the geometry index, the bounds,\n\t\t\t// and perhaps the SAH planes\n\t\t\tlet t = indirectBuffer[ left ];\n\t\t\tindirectBuffer[ left ] = indirectBuffer[ right ];\n\t\t\tindirectBuffer[ right ] = t;\n\n\n\t\t\t// swap bounds\n\t\t\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\t\t\tlet tb = triangleBounds[ left * 6 + i ];\n\t\t\t\ttriangleBounds[ left * 6 + i ] = triangleBounds[ right * 6 + i ];\n\t\t\t\ttriangleBounds[ right * 6 + i ] = tb;\n\n\t\t\t}\n\n\t\t\tleft ++;\n\t\t\tright --;\n\n\t\t} else {\n\n\t\t\treturn left;\n\n\t\t}\n\n\t}\n\n}\n\nexport { partition_indirect };\n","export function IS_LEAF( n16, uint16Array ) {\n\n\treturn uint16Array[ n16 + 15 ] === 0xFFFF;\n\n}\n\nexport function OFFSET( n32, uint32Array ) {\n\n\treturn uint32Array[ n32 + 6 ];\n\n}\n\nexport function COUNT( n16, uint16Array ) {\n\n\treturn uint16Array[ n16 + 14 ];\n\n}\n\nexport function LEFT_NODE( n32 ) {\n\n\treturn n32 + 8;\n\n}\n\nexport function RIGHT_NODE( n32, uint32Array ) {\n\n\treturn uint32Array[ n32 + 6 ];\n\n}\n\nexport function SPLIT_AXIS( n32, uint32Array ) {\n\n\treturn uint32Array[ n32 + 7 ];\n\n}\n\nexport function BOUNDING_DATA_INDEX( n32 ) {\n\n\treturn n32;\n\n}\n","import { BYTES_PER_NODE, IS_LEAFNODE_FLAG } from '../Constants.js';\nimport { IS_LEAF } from '../utils/nodeBufferUtils.js';\n\nlet float32Array, uint32Array, uint16Array, uint8Array;\nconst MAX_POINTER = Math.pow( 2, 32 );\n\nexport function countNodes( node ) {\n\n\tif ( 'count' in node ) {\n\n\t\treturn 1;\n\n\t} else {\n\n\t\treturn 1 + countNodes( node.left ) + countNodes( node.right );\n\n\t}\n\n}\n\nexport function populateBuffer( byteOffset, node, buffer ) {\n\n\tfloat32Array = new Float32Array( buffer );\n\tuint32Array = new Uint32Array( buffer );\n\tuint16Array = new Uint16Array( buffer );\n\tuint8Array = new Uint8Array( buffer );\n\n\treturn _populateBuffer( byteOffset, node );\n\n}\n\n// pack structure\n// boundingData \t\t\t\t: 6 float32\n// right / offset \t\t\t\t: 1 uint32\n// splitAxis / isLeaf + count \t: 1 uint32 / 2 uint16\nfunction _populateBuffer( byteOffset, node ) {\n\n\tconst stride4Offset = byteOffset / 4;\n\tconst stride2Offset = byteOffset / 2;\n\tconst isLeaf = 'count' in node;\n\tconst boundingData = node.boundingData;\n\tfor ( let i = 0; i < 6; i ++ ) {\n\n\t\tfloat32Array[ stride4Offset + i ] = boundingData[ i ];\n\n\t}\n\n\tif ( isLeaf ) {\n\n\t\tif ( node.buffer ) {\n\n\t\t\tconst buffer = node.buffer;\n\t\t\tuint8Array.set( new Uint8Array( buffer ), byteOffset );\n\n\t\t\tfor ( let offset = byteOffset, l = byteOffset + buffer.byteLength; offset < l; offset += BYTES_PER_NODE ) {\n\n\t\t\t\tconst offset2 = offset / 2;\n\t\t\t\tif ( ! IS_LEAF( offset2, uint16Array ) ) {\n\n\t\t\t\t\tuint32Array[ ( offset / 4 ) + 6 ] += stride4Offset;\n\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn byteOffset + buffer.byteLength;\n\n\t\t} else {\n\n\t\t\tconst offset = node.offset;\n\t\t\tconst count = node.count;\n\t\t\tuint32Array[ stride4Offset + 6 ] = offset;\n\t\t\tuint16Array[ stride2Offset + 14 ] = count;\n\t\t\tuint16Array[ stride2Offset + 15 ] = IS_LEAFNODE_FLAG;\n\t\t\treturn byteOffset + BYTES_PER_NODE;\n\n\t\t}\n\n\t} else {\n\n\t\tconst left = node.left;\n\t\tconst right = node.right;\n\t\tconst splitAxis = node.splitAxis;\n\n\t\tlet nextUnusedPointer;\n\t\tnextUnusedPointer = _populateBuffer( byteOffset + BYTES_PER_NODE, left );\n\n\t\tif ( ( nextUnusedPointer / 4 ) > MAX_POINTER ) {\n\n\t\t\tthrow new Error( 'MeshBVH: Cannot store child pointer greater than 32 bits.' );\n\n\t\t}\n\n\t\tuint32Array[ stride4Offset + 6 ] = nextUnusedPointer / 4;\n\t\tnextUnusedPointer = _populateBuffer( nextUnusedPointer, right );\n\n\t\tuint32Array[ stride4Offset + 7 ] = splitAxis;\n\t\treturn nextUnusedPointer;\n\n\t}\n\n}\n","import { ensureIndex, getFullGeometryRange, getRootIndexRanges, getTriCount, hasGroupGaps, } from './geometryUtils.js';\nimport { getBounds, computeTriangleBounds } from './computeBoundsUtils.js';\nimport { getOptimalSplit } from './splitUtils.js';\nimport { MeshBVHNode } from '../MeshBVHNode.js';\nimport { BYTES_PER_NODE } from '../Constants.js';\n\nimport { partition } from './sortUtils.generated.js';\nimport { partition_indirect } from './sortUtils_indirect.generated.js';\nimport { countNodes, populateBuffer } from './buildUtils.js';\n\nexport function generateIndirectBuffer( geometry, useSharedArrayBuffer ) {\n\n\tconst triCount = ( geometry.index ? geometry.index.count : geometry.attributes.position.count ) / 3;\n\tconst useUint32 = triCount > 2 ** 16;\n\tconst byteCount = useUint32 ? 4 : 2;\n\n\tconst buffer = useSharedArrayBuffer ? new SharedArrayBuffer( triCount * byteCount ) : new ArrayBuffer( triCount * byteCount );\n\tconst indirectBuffer = useUint32 ? new Uint32Array( buffer ) : new Uint16Array( buffer );\n\tfor ( let i = 0, l = indirectBuffer.length; i < l; i ++ ) {\n\n\t\tindirectBuffer[ i ] = i;\n\n\t}\n\n\treturn indirectBuffer;\n\n}\n\nexport function buildTree( bvh, triangleBounds, offset, count, options ) {\n\n\t// epxand variables\n\tconst {\n\t\tmaxDepth,\n\t\tverbose,\n\t\tmaxLeafTris,\n\t\tstrategy,\n\t\tonProgress,\n\t\tindirect,\n\t} = options;\n\tconst indirectBuffer = bvh._indirectBuffer;\n\tconst geometry = bvh.geometry;\n\tconst indexArray = geometry.index ? geometry.index.array : null;\n\tconst partionFunc = indirect ? partition_indirect : partition;\n\n\t// generate intermediate variables\n\tconst totalTriangles = getTriCount( geometry );\n\tconst cacheCentroidBoundingData = new Float32Array( 6 );\n\tlet reachedMaxDepth = false;\n\n\tconst root = new MeshBVHNode();\n\tgetBounds( triangleBounds, offset, count, root.boundingData, cacheCentroidBoundingData );\n\tsplitNode( root, offset, count, cacheCentroidBoundingData );\n\treturn root;\n\n\tfunction triggerProgress( trianglesProcessed ) {\n\n\t\tif ( onProgress ) {\n\n\t\t\tonProgress( trianglesProcessed / totalTriangles );\n\n\t\t}\n\n\t}\n\n\t// either recursively splits the given node, creating left and right subtrees for it, or makes it a leaf node,\n\t// recording the offset and count of its triangles and writing them into the reordered geometry index.\n\tfunction splitNode( node, offset, count, centroidBoundingData = null, depth = 0 ) {\n\n\t\tif ( ! reachedMaxDepth && depth >= maxDepth ) {\n\n\t\t\treachedMaxDepth = true;\n\t\t\tif ( verbose ) {\n\n\t\t\t\tconsole.warn( `MeshBVH: Max depth of ${ maxDepth } reached when generating BVH. Consider increasing maxDepth.` );\n\t\t\t\tconsole.warn( geometry );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// early out if we've met our capacity\n\t\tif ( count <= maxLeafTris || depth >= maxDepth ) {\n\n\t\t\ttriggerProgress( offset + count );\n\t\t\tnode.offset = offset;\n\t\t\tnode.count = count;\n\t\t\treturn node;\n\n\t\t}\n\n\t\t// Find where to split the volume\n\t\tconst split = getOptimalSplit( node.boundingData, centroidBoundingData, triangleBounds, offset, count, strategy );\n\t\tif ( split.axis === - 1 ) {\n\n\t\t\ttriggerProgress( offset + count );\n\t\t\tnode.offset = offset;\n\t\t\tnode.count = count;\n\t\t\treturn node;\n\n\t\t}\n\n\t\tconst splitOffset = partionFunc( indirectBuffer, indexArray, triangleBounds, offset, count, split );\n\n\t\t// create the two new child nodes\n\t\tif ( splitOffset === offset || splitOffset === offset + count ) {\n\n\t\t\ttriggerProgress( offset + count );\n\t\t\tnode.offset = offset;\n\t\t\tnode.count = count;\n\n\t\t} else {\n\n\t\t\tnode.splitAxis = split.axis;\n\n\t\t\t// create the left child and compute its bounding box\n\t\t\tconst left = new MeshBVHNode();\n\t\t\tconst lstart = offset;\n\t\t\tconst lcount = splitOffset - offset;\n\t\t\tnode.left = left;\n\n\t\t\tgetBounds( triangleBounds, lstart, lcount, left.boundingData, cacheCentroidBoundingData );\n\t\t\tsplitNode( left, lstart, lcount, cacheCentroidBoundingData, depth + 1 );\n\n\t\t\t// repeat for right\n\t\t\tconst right = new MeshBVHNode();\n\t\t\tconst rstart = splitOffset;\n\t\t\tconst rcount = count - lcount;\n\t\t\tnode.right = right;\n\n\t\t\tgetBounds( triangleBounds, rstart, rcount, right.boundingData, cacheCentroidBoundingData );\n\t\t\tsplitNode( right, rstart, rcount, cacheCentroidBoundingData, depth + 1 );\n\n\t\t}\n\n\t\treturn node;\n\n\t}\n\n}\n\nexport function buildPackedTree( bvh, options ) {\n\n\tconst geometry = bvh.geometry;\n\tif ( options.indirect ) {\n\n\t\tbvh._indirectBuffer = generateIndirectBuffer( geometry, options.useSharedArrayBuffer );\n\n\t\tif ( hasGroupGaps( geometry, options.range ) && ! options.verbose ) {\n\n\t\t\tconsole.warn(\n\t\t\t\t'MeshBVH: Provided geometry contains groups or a range that do not fully span the vertex contents while using the \"indirect\" option. ' +\n\t\t\t\t'BVH may incorrectly report intersections on unrendered portions of the geometry.'\n\t\t\t);\n\n\t\t}\n\n\t}\n\n\tif ( ! bvh._indirectBuffer ) {\n\n\t\tensureIndex( geometry, options );\n\n\t}\n\n\tconst BufferConstructor = options.useSharedArrayBuffer ? SharedArrayBuffer : ArrayBuffer;\n\n\tconst triangleBounds = computeTriangleBounds( geometry );\n\tconst geometryRanges = options.indirect ? getFullGeometryRange( geometry, options.range ) : getRootIndexRanges( geometry, options.range );\n\tbvh._roots = geometryRanges.map( range => {\n\n\t\tconst root = buildTree( bvh, triangleBounds, range.offset, range.count, options );\n\t\tconst nodeCount = countNodes( root );\n\t\tconst buffer = new BufferConstructor( BYTES_PER_NODE * nodeCount );\n\t\tpopulateBuffer( 0, root, buffer );\n\t\treturn buffer;\n\n\t} );\n\n}\n","import { Vector3 } from 'three';\n\nexport class SeparatingAxisBounds {\n\n\tconstructor() {\n\n\t\tthis.min = Infinity;\n\t\tthis.max = - Infinity;\n\n\t}\n\n\tsetFromPointsField( points, field ) {\n\n\t\tlet min = Infinity;\n\t\tlet max = - Infinity;\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst p = points[ i ];\n\t\t\tconst val = p[ field ];\n\t\t\tmin = val < min ? val : min;\n\t\t\tmax = val > max ? val : max;\n\n\t\t}\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tsetFromPoints( axis, points ) {\n\n\t\tlet min = Infinity;\n\t\tlet max = - Infinity;\n\t\tfor ( let i = 0, l = points.length; i < l; i ++ ) {\n\n\t\t\tconst p = points[ i ];\n\t\t\tconst val = axis.dot( p );\n\t\t\tmin = val < min ? val : min;\n\t\t\tmax = val > max ? val : max;\n\n\t\t}\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t}\n\n\tisSeparated( other ) {\n\n\t\treturn this.min > other.max || other.min > this.max;\n\n\t}\n\n}\n\nSeparatingAxisBounds.prototype.setFromBox = ( function () {\n\n\tconst p = new Vector3();\n\treturn function setFromBox( axis, box ) {\n\n\t\tconst boxMin = box.min;\n\t\tconst boxMax = box.max;\n\t\tlet min = Infinity;\n\t\tlet max = - Infinity;\n\t\tfor ( let x = 0; x <= 1; x ++ ) {\n\n\t\t\tfor ( let y = 0; y <= 1; y ++ ) {\n\n\t\t\t\tfor ( let z = 0; z <= 1; z ++ ) {\n\n\t\t\t\t\tp.x = boxMin.x * x + boxMax.x * ( 1 - x );\n\t\t\t\t\tp.y = boxMin.y * y + boxMax.y * ( 1 - y );\n\t\t\t\t\tp.z = boxMin.z * z + boxMax.z * ( 1 - z );\n\n\t\t\t\t\tconst val = axis.dot( p );\n\t\t\t\t\tmin = Math.min( val, min );\n\t\t\t\t\tmax = Math.max( val, max );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.min = min;\n\t\tthis.max = max;\n\n\t};\n\n} )();\n\nexport const areIntersecting = ( function () {\n\n\tconst cacheSatBounds = new SeparatingAxisBounds();\n\treturn function areIntersecting( shape1, shape2 ) {\n\n\t\tconst points1 = shape1.points;\n\t\tconst satAxes1 = shape1.satAxes;\n\t\tconst satBounds1 = shape1.satBounds;\n\n\t\tconst points2 = shape2.points;\n\t\tconst satAxes2 = shape2.satAxes;\n\t\tconst satBounds2 = shape2.satBounds;\n\n\t\t// check axes of the first shape\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst sb = satBounds1[ i ];\n\t\t\tconst sa = satAxes1[ i ];\n\t\t\tcacheSatBounds.setFromPoints( sa, points2 );\n\t\t\tif ( sb.isSeparated( cacheSatBounds ) ) return false;\n\n\t\t}\n\n\t\t// check axes of the second shape\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst sb = satBounds2[ i ];\n\t\t\tconst sa = satAxes2[ i ];\n\t\t\tcacheSatBounds.setFromPoints( sa, points1 );\n\t\t\tif ( sb.isSeparated( cacheSatBounds ) ) return false;\n\n\t\t}\n\n\t};\n\n} )();\n","import { Vector3, Vector2, Plane, Line3 } from 'three';\n\nexport const closestPointLineToLine = ( function () {\n\n\t// https://github.com/juj/MathGeoLib/blob/master/src/Geometry/Line.cpp#L56\n\tconst dir1 = new Vector3();\n\tconst dir2 = new Vector3();\n\tconst v02 = new Vector3();\n\treturn function closestPointLineToLine( l1, l2, result ) {\n\n\t\tconst v0 = l1.start;\n\t\tconst v10 = dir1;\n\t\tconst v2 = l2.start;\n\t\tconst v32 = dir2;\n\n\t\tv02.subVectors( v0, v2 );\n\t\tdir1.subVectors( l1.end, l1.start );\n\t\tdir2.subVectors( l2.end, l2.start );\n\n\t\t// float d0232 = v02.Dot(v32);\n\t\tconst d0232 = v02.dot( v32 );\n\n\t\t// float d3210 = v32.Dot(v10);\n\t\tconst d3210 = v32.dot( v10 );\n\n\t\t// float d3232 = v32.Dot(v32);\n\t\tconst d3232 = v32.dot( v32 );\n\n\t\t// float d0210 = v02.Dot(v10);\n\t\tconst d0210 = v02.dot( v10 );\n\n\t\t// float d1010 = v10.Dot(v10);\n\t\tconst d1010 = v10.dot( v10 );\n\n\t\t// float denom = d1010*d3232 - d3210*d3210;\n\t\tconst denom = d1010 * d3232 - d3210 * d3210;\n\n\t\tlet d, d2;\n\t\tif ( denom !== 0 ) {\n\n\t\t\td = ( d0232 * d3210 - d0210 * d3232 ) / denom;\n\n\t\t} else {\n\n\t\t\td = 0;\n\n\t\t}\n\n\t\td2 = ( d0232 + d * d3210 ) / d3232;\n\n\t\tresult.x = d;\n\t\tresult.y = d2;\n\n\t};\n\n} )();\n\nexport const closestPointsSegmentToSegment = ( function () {\n\n\t// https://github.com/juj/MathGeoLib/blob/master/src/Geometry/LineSegment.cpp#L187\n\tconst paramResult = new Vector2();\n\tconst temp1 = new Vector3();\n\tconst temp2 = new Vector3();\n\treturn function closestPointsSegmentToSegment( l1, l2, target1, target2 ) {\n\n\t\tclosestPointLineToLine( l1, l2, paramResult );\n\n\t\tlet d = paramResult.x;\n\t\tlet d2 = paramResult.y;\n\t\tif ( d >= 0 && d <= 1 && d2 >= 0 && d2 <= 1 ) {\n\n\t\t\tl1.at( d, target1 );\n\t\t\tl2.at( d2, target2 );\n\n\t\t\treturn;\n\n\t\t} else if ( d >= 0 && d <= 1 ) {\n\n\t\t\t// Only d2 is out of bounds.\n\t\t\tif ( d2 < 0 ) {\n\n\t\t\t\tl2.at( 0, target2 );\n\n\t\t\t} else {\n\n\t\t\t\tl2.at( 1, target2 );\n\n\t\t\t}\n\n\t\t\tl1.closestPointToPoint( target2, true, target1 );\n\t\t\treturn;\n\n\t\t} else if ( d2 >= 0 && d2 <= 1 ) {\n\n\t\t\t// Only d is out of bounds.\n\t\t\tif ( d < 0 ) {\n\n\t\t\t\tl1.at( 0, target1 );\n\n\t\t\t} else {\n\n\t\t\t\tl1.at( 1, target1 );\n\n\t\t\t}\n\n\t\t\tl2.closestPointToPoint( target1, true, target2 );\n\t\t\treturn;\n\n\t\t} else {\n\n\t\t\t// Both u and u2 are out of bounds.\n\t\t\tlet p;\n\t\t\tif ( d < 0 ) {\n\n\t\t\t\tp = l1.start;\n\n\t\t\t} else {\n\n\t\t\t\tp = l1.end;\n\n\t\t\t}\n\n\t\t\tlet p2;\n\t\t\tif ( d2 < 0 ) {\n\n\t\t\t\tp2 = l2.start;\n\n\t\t\t} else {\n\n\t\t\t\tp2 = l2.end;\n\n\t\t\t}\n\n\t\t\tconst closestPoint = temp1;\n\t\t\tconst closestPoint2 = temp2;\n\t\t\tl1.closestPointToPoint( p2, true, temp1 );\n\t\t\tl2.closestPointToPoint( p, true, temp2 );\n\n\t\t\tif ( closestPoint.distanceToSquared( p2 ) <= closestPoint2.distanceToSquared( p ) ) {\n\n\t\t\t\ttarget1.copy( closestPoint );\n\t\t\t\ttarget2.copy( p2 );\n\t\t\t\treturn;\n\n\t\t\t} else {\n\n\t\t\t\ttarget1.copy( p );\n\t\t\t\ttarget2.copy( closestPoint2 );\n\t\t\t\treturn;\n\n\t\t\t}\n\n\t\t}\n\n\t};\n\n} )();\n\n\nexport const sphereIntersectTriangle = ( function () {\n\n\t// https://stackoverflow.com/questions/34043955/detect-collision-between-sphere-and-triangle-in-three-js\n\tconst closestPointTemp = new Vector3();\n\tconst projectedPointTemp = new Vector3();\n\tconst planeTemp = new Plane();\n\tconst lineTemp = new Line3();\n\treturn function sphereIntersectTriangle( sphere, triangle ) {\n\n\t\tconst { radius, center } = sphere;\n\t\tconst { a, b, c } = triangle;\n\n\t\t// phase 1\n\t\tlineTemp.start = a;\n\t\tlineTemp.end = b;\n\t\tconst closestPoint1 = lineTemp.closestPointToPoint( center, true, closestPointTemp );\n\t\tif ( closestPoint1.distanceTo( center ) <= radius ) return true;\n\n\t\tlineTemp.start = a;\n\t\tlineTemp.end = c;\n\t\tconst closestPoint2 = lineTemp.closestPointToPoint( center, true, closestPointTemp );\n\t\tif ( closestPoint2.distanceTo( center ) <= radius ) return true;\n\n\t\tlineTemp.start = b;\n\t\tlineTemp.end = c;\n\t\tconst closestPoint3 = lineTemp.closestPointToPoint( center, true, closestPointTemp );\n\t\tif ( closestPoint3.distanceTo( center ) <= radius ) return true;\n\n\t\t// phase 2\n\t\tconst plane = triangle.getPlane( planeTemp );\n\t\tconst dp = Math.abs( plane.distanceToPoint( center ) );\n\t\tif ( dp <= radius ) {\n\n\t\t\tconst pp = plane.projectPoint( center, projectedPointTemp );\n\t\t\tconst cp = triangle.containsPoint( pp );\n\t\t\tif ( cp ) return true;\n\n\t\t}\n\n\t\treturn false;\n\n\t};\n\n} )();\n","import { Triangle, Vector3, Line3, Sphere, Plane } from 'three';\nimport { SeparatingAxisBounds } from './SeparatingAxisBounds.js';\nimport { closestPointsSegmentToSegment, sphereIntersectTriangle } from './MathUtilities.js';\n\nconst ZERO_EPSILON = 1e-15;\nfunction isNearZero( value ) {\n\n\treturn Math.abs( value ) < ZERO_EPSILON;\n\n}\n\nexport class ExtendedTriangle extends Triangle {\n\n\tconstructor( ...args ) {\n\n\t\tsuper( ...args );\n\n\t\tthis.isExtendedTriangle = true;\n\t\tthis.satAxes = new Array( 4 ).fill().map( () => new Vector3() );\n\t\tthis.satBounds = new Array( 4 ).fill().map( () => new SeparatingAxisBounds() );\n\t\tthis.points = [ this.a, this.b, this.c ];\n\t\tthis.sphere = new Sphere();\n\t\tthis.plane = new Plane();\n\t\tthis.needsUpdate = true;\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn sphereIntersectTriangle( sphere, this );\n\n\t}\n\n\tupdate() {\n\n\t\tconst a = this.a;\n\t\tconst b = this.b;\n\t\tconst c = this.c;\n\t\tconst points = this.points;\n\n\t\tconst satAxes = this.satAxes;\n\t\tconst satBounds = this.satBounds;\n\n\t\tconst axis0 = satAxes[ 0 ];\n\t\tconst sab0 = satBounds[ 0 ];\n\t\tthis.getNormal( axis0 );\n\t\tsab0.setFromPoints( axis0, points );\n\n\t\tconst axis1 = satAxes[ 1 ];\n\t\tconst sab1 = satBounds[ 1 ];\n\t\taxis1.subVectors( a, b );\n\t\tsab1.setFromPoints( axis1, points );\n\n\t\tconst axis2 = satAxes[ 2 ];\n\t\tconst sab2 = satBounds[ 2 ];\n\t\taxis2.subVectors( b, c );\n\t\tsab2.setFromPoints( axis2, points );\n\n\t\tconst axis3 = satAxes[ 3 ];\n\t\tconst sab3 = satBounds[ 3 ];\n\t\taxis3.subVectors( c, a );\n\t\tsab3.setFromPoints( axis3, points );\n\n\t\tthis.sphere.setFromPoints( this.points );\n\t\tthis.plane.setFromNormalAndCoplanarPoint( axis0, a );\n\t\tthis.needsUpdate = false;\n\n\t}\n\n}\n\nExtendedTriangle.prototype.closestPointToSegment = ( function () {\n\n\tconst point1 = new Vector3();\n\tconst point2 = new Vector3();\n\tconst edge = new Line3();\n\n\treturn function distanceToSegment( segment, target1 = null, target2 = null ) {\n\n\t\tconst { start, end } = segment;\n\t\tconst points = this.points;\n\t\tlet distSq;\n\t\tlet closestDistanceSq = Infinity;\n\n\t\t// check the triangle edges\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst nexti = ( i + 1 ) % 3;\n\t\t\tedge.start.copy( points[ i ] );\n\t\t\tedge.end.copy( points[ nexti ] );\n\n\t\t\tclosestPointsSegmentToSegment( edge, segment, point1, point2 );\n\n\t\t\tdistSq = point1.distanceToSquared( point2 );\n\t\t\tif ( distSq < closestDistanceSq ) {\n\n\t\t\t\tclosestDistanceSq = distSq;\n\t\t\t\tif ( target1 ) target1.copy( point1 );\n\t\t\t\tif ( target2 ) target2.copy( point2 );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// check end points\n\t\tthis.closestPointToPoint( start, point1 );\n\t\tdistSq = start.distanceToSquared( point1 );\n\t\tif ( distSq < closestDistanceSq ) {\n\n\t\t\tclosestDistanceSq = distSq;\n\t\t\tif ( target1 ) target1.copy( point1 );\n\t\t\tif ( target2 ) target2.copy( start );\n\n\t\t}\n\n\t\tthis.closestPointToPoint( end, point1 );\n\t\tdistSq = end.distanceToSquared( point1 );\n\t\tif ( distSq < closestDistanceSq ) {\n\n\t\t\tclosestDistanceSq = distSq;\n\t\t\tif ( target1 ) target1.copy( point1 );\n\t\t\tif ( target2 ) target2.copy( end );\n\n\t\t}\n\n\t\treturn Math.sqrt( closestDistanceSq );\n\n\t};\n\n} )();\n\nExtendedTriangle.prototype.intersectsTriangle = ( function () {\n\n\tconst saTri2 = new ExtendedTriangle();\n\tconst arr1 = new Array( 3 );\n\tconst arr2 = new Array( 3 );\n\tconst cachedSatBounds = new SeparatingAxisBounds();\n\tconst cachedSatBounds2 = new SeparatingAxisBounds();\n\tconst cachedAxis = new Vector3();\n\tconst dir = new Vector3();\n\tconst dir1 = new Vector3();\n\tconst dir2 = new Vector3();\n\tconst tempDir = new Vector3();\n\tconst edge = new Line3();\n\tconst edge1 = new Line3();\n\tconst edge2 = new Line3();\n\tconst tempPoint = new Vector3();\n\n\tfunction triIntersectPlane( tri, plane, targetEdge ) {\n\n\t\t// find the edge that intersects the other triangle plane\n\t\tconst points = tri.points;\n\t\tlet count = 0;\n\t\tlet startPointIntersection = - 1;\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst { start, end } = edge;\n\t\t\tstart.copy( points[ i ] );\n\t\t\tend.copy( points[ ( i + 1 ) % 3 ] );\n\t\t\tedge.delta( dir );\n\n\t\t\tconst startIntersects = isNearZero( plane.distanceToPoint( start ) );\n\t\t\tif ( isNearZero( plane.normal.dot( dir ) ) && startIntersects ) {\n\n\t\t\t\t// if the edge lies on the plane then take the line\n\t\t\t\ttargetEdge.copy( edge );\n\t\t\t\tcount = 2;\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\t// check if the start point is near the plane because \"intersectLine\" is not robust to that case\n\t\t\tconst doesIntersect = plane.intersectLine( edge, tempPoint );\n\t\t\tif ( ! doesIntersect && startIntersects ) {\n\n\t\t\t\ttempPoint.copy( start );\n\n\t\t\t}\n\n\t\t\t// ignore the end point\n\t\t\tif ( ( doesIntersect || startIntersects ) && ! isNearZero( tempPoint.distanceTo( end ) ) ) {\n\n\t\t\t\tif ( count <= 1 ) {\n\n\t\t\t\t\t// assign to the start or end point and save which index was snapped to\n\t\t\t\t\t// the start point if necessary\n\t\t\t\t\tconst point = count === 1 ? targetEdge.start : targetEdge.end;\n\t\t\t\t\tpoint.copy( tempPoint );\n\t\t\t\t\tif ( startIntersects ) {\n\n\t\t\t\t\t\tstartPointIntersection = count;\n\n\t\t\t\t\t}\n\n\t\t\t\t} else if ( count >= 2 ) {\n\n\t\t\t\t\t// if we're here that means that there must have been one point that had\n\t\t\t\t\t// snapped to the start point so replace it here\n\t\t\t\t\tconst point = startPointIntersection === 1 ? targetEdge.start : targetEdge.end;\n\t\t\t\t\tpoint.copy( tempPoint );\n\t\t\t\t\tcount = 2;\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t\tcount ++;\n\t\t\t\tif ( count === 2 && startPointIntersection === - 1 ) {\n\n\t\t\t\t\tbreak;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn count;\n\n\t}\n\n\t// TODO: If the triangles are coplanar and intersecting the target is nonsensical. It should at least\n\t// be a line contained by both triangles if not a different special case somehow represented in the return result.\n\treturn function intersectsTriangle( other, target = null, suppressLog = false ) {\n\n\t\tif ( this.needsUpdate ) {\n\n\t\t\tthis.update();\n\n\t\t}\n\n\t\tif ( ! other.isExtendedTriangle ) {\n\n\t\t\tsaTri2.copy( other );\n\t\t\tsaTri2.update();\n\t\t\tother = saTri2;\n\n\t\t} else if ( other.needsUpdate ) {\n\n\t\t\tother.update();\n\n\t\t}\n\n\t\tconst plane1 = this.plane;\n\t\tconst plane2 = other.plane;\n\n\t\tif ( Math.abs( plane1.normal.dot( plane2.normal ) ) > 1.0 - 1e-10 ) {\n\n\t\t\t// perform separating axis intersection test only for coplanar triangles\n\t\t\tconst satBounds1 = this.satBounds;\n\t\t\tconst satAxes1 = this.satAxes;\n\t\t\tarr2[ 0 ] = other.a;\n\t\t\tarr2[ 1 ] = other.b;\n\t\t\tarr2[ 2 ] = other.c;\n\t\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\t\tconst sb = satBounds1[ i ];\n\t\t\t\tconst sa = satAxes1[ i ];\n\t\t\t\tcachedSatBounds.setFromPoints( sa, arr2 );\n\t\t\t\tif ( sb.isSeparated( cachedSatBounds ) ) return false;\n\n\t\t\t}\n\n\t\t\tconst satBounds2 = other.satBounds;\n\t\t\tconst satAxes2 = other.satAxes;\n\t\t\tarr1[ 0 ] = this.a;\n\t\t\tarr1[ 1 ] = this.b;\n\t\t\tarr1[ 2 ] = this.c;\n\t\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\t\tconst sb = satBounds2[ i ];\n\t\t\t\tconst sa = satAxes2[ i ];\n\t\t\t\tcachedSatBounds.setFromPoints( sa, arr1 );\n\t\t\t\tif ( sb.isSeparated( cachedSatBounds ) ) return false;\n\n\t\t\t}\n\n\t\t\t// check crossed axes\n\t\t\tfor ( let i = 0; i < 4; i ++ ) {\n\n\t\t\t\tconst sa1 = satAxes1[ i ];\n\t\t\t\tfor ( let i2 = 0; i2 < 4; i2 ++ ) {\n\n\t\t\t\t\tconst sa2 = satAxes2[ i2 ];\n\t\t\t\t\tcachedAxis.crossVectors( sa1, sa2 );\n\t\t\t\t\tcachedSatBounds.setFromPoints( cachedAxis, arr1 );\n\t\t\t\t\tcachedSatBounds2.setFromPoints( cachedAxis, arr2 );\n\t\t\t\t\tif ( cachedSatBounds.isSeparated( cachedSatBounds2 ) ) return false;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( target ) {\n\n\t\t\t\t// TODO find two points that intersect on the edges and make that the result\n\t\t\t\tif ( ! suppressLog ) {\n\n\t\t\t\t\tconsole.warn( 'ExtendedTriangle.intersectsTriangle: Triangles are coplanar which does not support an output edge. Setting edge to 0, 0, 0.' );\n\n\t\t\t\t}\n\n\t\t\t\ttarget.start.set( 0, 0, 0 );\n\t\t\t\ttarget.end.set( 0, 0, 0 );\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t} else {\n\n\t\t\t// find the edge that intersects the other triangle plane\n\t\t\tconst count1 = triIntersectPlane( this, plane2, edge1 );\n\t\t\tif ( count1 === 1 && other.containsPoint( edge1.end ) ) {\n\n\t\t\t\tif ( target ) {\n\n\t\t\t\t\ttarget.start.copy( edge1.end );\n\t\t\t\t\ttarget.end.copy( edge1.end );\n\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\n\t\t\t} else if ( count1 !== 2 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// find the other triangles edge that intersects this plane\n\t\t\tconst count2 = triIntersectPlane( other, plane1, edge2 );\n\t\t\tif ( count2 === 1 && this.containsPoint( edge2.end ) ) {\n\n\t\t\t\tif ( target ) {\n\n\t\t\t\t\ttarget.start.copy( edge2.end );\n\t\t\t\t\ttarget.end.copy( edge2.end );\n\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\n\t\t\t} else if ( count2 !== 2 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// find swap the second edge so both lines are running the same direction\n\t\t\tedge1.delta( dir1 );\n\t\t\tedge2.delta( dir2 );\n\n\t\t\tif ( dir1.dot( dir2 ) < 0 ) {\n\n\t\t\t\tlet tmp = edge2.start;\n\t\t\t\tedge2.start = edge2.end;\n\t\t\t\tedge2.end = tmp;\n\n\t\t\t}\n\n\t\t\t// check if the edges are overlapping\n\t\t\tconst s1 = edge1.start.dot( dir1 );\n\t\t\tconst e1 = edge1.end.dot( dir1 );\n\t\t\tconst s2 = edge2.start.dot( dir1 );\n\t\t\tconst e2 = edge2.end.dot( dir1 );\n\t\t\tconst separated1 = e1 < s2;\n\t\t\tconst separated2 = s1 < e2;\n\n\t\t\tif ( s1 !== e2 && s2 !== e1 && separated1 === separated2 ) {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t\t// assign the target output\n\t\t\tif ( target ) {\n\n\t\t\t\ttempDir.subVectors( edge1.start, edge2.start );\n\t\t\t\tif ( tempDir.dot( dir1 ) > 0 ) {\n\n\t\t\t\t\ttarget.start.copy( edge1.start );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttarget.start.copy( edge2.start );\n\n\t\t\t\t}\n\n\t\t\t\ttempDir.subVectors( edge1.end, edge2.end );\n\t\t\t\tif ( tempDir.dot( dir1 ) < 0 ) {\n\n\t\t\t\t\ttarget.end.copy( edge1.end );\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttarget.end.copy( edge2.end );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn true;\n\n\t\t}\n\n\t};\n\n} )();\n\n\nExtendedTriangle.prototype.distanceToPoint = ( function () {\n\n\tconst target = new Vector3();\n\treturn function distanceToPoint( point ) {\n\n\t\tthis.closestPointToPoint( point, target );\n\t\treturn point.distanceTo( target );\n\n\t};\n\n} )();\n\n\nExtendedTriangle.prototype.distanceToTriangle = ( function () {\n\n\tconst point = new Vector3();\n\tconst point2 = new Vector3();\n\tconst cornerFields = [ 'a', 'b', 'c' ];\n\tconst line1 = new Line3();\n\tconst line2 = new Line3();\n\n\treturn function distanceToTriangle( other, target1 = null, target2 = null ) {\n\n\t\tconst lineTarget = target1 || target2 ? line1 : null;\n\t\tif ( this.intersectsTriangle( other, lineTarget ) ) {\n\n\t\t\tif ( target1 || target2 ) {\n\n\t\t\t\tif ( target1 ) lineTarget.getCenter( target1 );\n\t\t\t\tif ( target2 ) lineTarget.getCenter( target2 );\n\n\t\t\t}\n\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tlet closestDistanceSq = Infinity;\n\n\t\t// check all point distances\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tlet dist;\n\t\t\tconst field = cornerFields[ i ];\n\t\t\tconst otherVec = other[ field ];\n\t\t\tthis.closestPointToPoint( otherVec, point );\n\n\t\t\tdist = otherVec.distanceToSquared( point );\n\n\t\t\tif ( dist < closestDistanceSq ) {\n\n\t\t\t\tclosestDistanceSq = dist;\n\t\t\t\tif ( target1 ) target1.copy( point );\n\t\t\t\tif ( target2 ) target2.copy( otherVec );\n\n\t\t\t}\n\n\n\t\t\tconst thisVec = this[ field ];\n\t\t\tother.closestPointToPoint( thisVec, point );\n\n\t\t\tdist = thisVec.distanceToSquared( point );\n\n\t\t\tif ( dist < closestDistanceSq ) {\n\n\t\t\t\tclosestDistanceSq = dist;\n\t\t\t\tif ( target1 ) target1.copy( thisVec );\n\t\t\t\tif ( target2 ) target2.copy( point );\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst f11 = cornerFields[ i ];\n\t\t\tconst f12 = cornerFields[ ( i + 1 ) % 3 ];\n\t\t\tline1.set( this[ f11 ], this[ f12 ] );\n\t\t\tfor ( let i2 = 0; i2 < 3; i2 ++ ) {\n\n\t\t\t\tconst f21 = cornerFields[ i2 ];\n\t\t\t\tconst f22 = cornerFields[ ( i2 + 1 ) % 3 ];\n\t\t\t\tline2.set( other[ f21 ], other[ f22 ] );\n\n\t\t\t\tclosestPointsSegmentToSegment( line1, line2, point, point2 );\n\n\t\t\t\tconst dist = point.distanceToSquared( point2 );\n\t\t\t\tif ( dist < closestDistanceSq ) {\n\n\t\t\t\t\tclosestDistanceSq = dist;\n\t\t\t\t\tif ( target1 ) target1.copy( point );\n\t\t\t\t\tif ( target2 ) target2.copy( point2 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Math.sqrt( closestDistanceSq );\n\n\t};\n\n} )();\n","import { Vector3, Matrix4, Line3 } from 'three';\nimport { SeparatingAxisBounds } from './SeparatingAxisBounds.js';\nimport { ExtendedTriangle } from './ExtendedTriangle.js';\nimport { closestPointsSegmentToSegment } from './MathUtilities.js';\n\nexport class OrientedBox {\n\n\tconstructor( min, max, matrix ) {\n\n\t\tthis.isOrientedBox = true;\n\t\tthis.min = new Vector3();\n\t\tthis.max = new Vector3();\n\t\tthis.matrix = new Matrix4();\n\t\tthis.invMatrix = new Matrix4();\n\t\tthis.points = new Array( 8 ).fill().map( () => new Vector3() );\n\t\tthis.satAxes = new Array( 3 ).fill().map( () => new Vector3() );\n\t\tthis.satBounds = new Array( 3 ).fill().map( () => new SeparatingAxisBounds() );\n\t\tthis.alignedSatBounds = new Array( 3 ).fill().map( () => new SeparatingAxisBounds() );\n\t\tthis.needsUpdate = false;\n\n\t\tif ( min ) this.min.copy( min );\n\t\tif ( max ) this.max.copy( max );\n\t\tif ( matrix ) this.matrix.copy( matrix );\n\n\t}\n\n\tset( min, max, matrix ) {\n\n\t\tthis.min.copy( min );\n\t\tthis.max.copy( max );\n\t\tthis.matrix.copy( matrix );\n\t\tthis.needsUpdate = true;\n\n\t}\n\n\tcopy( other ) {\n\n\t\tthis.min.copy( other.min );\n\t\tthis.max.copy( other.max );\n\t\tthis.matrix.copy( other.matrix );\n\t\tthis.needsUpdate = true;\n\n\t}\n\n}\n\nOrientedBox.prototype.update = ( function () {\n\n\treturn function update() {\n\n\t\tconst matrix = this.matrix;\n\t\tconst min = this.min;\n\t\tconst max = this.max;\n\n\t\tconst points = this.points;\n\t\tfor ( let x = 0; x <= 1; x ++ ) {\n\n\t\t\tfor ( let y = 0; y <= 1; y ++ ) {\n\n\t\t\t\tfor ( let z = 0; z <= 1; z ++ ) {\n\n\t\t\t\t\tconst i = ( ( 1 << 0 ) * x ) | ( ( 1 << 1 ) * y ) | ( ( 1 << 2 ) * z );\n\t\t\t\t\tconst v = points[ i ];\n\t\t\t\t\tv.x = x ? max.x : min.x;\n\t\t\t\t\tv.y = y ? max.y : min.y;\n\t\t\t\t\tv.z = z ? max.z : min.z;\n\n\t\t\t\t\tv.applyMatrix4( matrix );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst satBounds = this.satBounds;\n\t\tconst satAxes = this.satAxes;\n\t\tconst minVec = points[ 0 ];\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst axis = satAxes[ i ];\n\t\t\tconst sb = satBounds[ i ];\n\t\t\tconst index = 1 << i;\n\t\t\tconst pi = points[ index ];\n\n\t\t\taxis.subVectors( minVec, pi );\n\t\t\tsb.setFromPoints( axis, points );\n\n\t\t}\n\n\t\tconst alignedSatBounds = this.alignedSatBounds;\n\t\talignedSatBounds[ 0 ].setFromPointsField( points, 'x' );\n\t\talignedSatBounds[ 1 ].setFromPointsField( points, 'y' );\n\t\talignedSatBounds[ 2 ].setFromPointsField( points, 'z' );\n\n\t\tthis.invMatrix.copy( this.matrix ).invert();\n\t\tthis.needsUpdate = false;\n\n\t};\n\n} )();\n\nOrientedBox.prototype.intersectsBox = ( function () {\n\n\tconst aabbBounds = new SeparatingAxisBounds();\n\treturn function intersectsBox( box ) {\n\n\t\t// TODO: should this be doing SAT against the AABB?\n\t\tif ( this.needsUpdate ) {\n\n\t\t\tthis.update();\n\n\t\t}\n\n\t\tconst min = box.min;\n\t\tconst max = box.max;\n\t\tconst satBounds = this.satBounds;\n\t\tconst satAxes = this.satAxes;\n\t\tconst alignedSatBounds = this.alignedSatBounds;\n\n\t\taabbBounds.min = min.x;\n\t\taabbBounds.max = max.x;\n\t\tif ( alignedSatBounds[ 0 ].isSeparated( aabbBounds ) ) return false;\n\n\t\taabbBounds.min = min.y;\n\t\taabbBounds.max = max.y;\n\t\tif ( alignedSatBounds[ 1 ].isSeparated( aabbBounds ) ) return false;\n\n\t\taabbBounds.min = min.z;\n\t\taabbBounds.max = max.z;\n\t\tif ( alignedSatBounds[ 2 ].isSeparated( aabbBounds ) ) return false;\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst axis = satAxes[ i ];\n\t\t\tconst sb = satBounds[ i ];\n\t\t\taabbBounds.setFromBox( axis, box );\n\t\t\tif ( sb.isSeparated( aabbBounds ) ) return false;\n\n\t\t}\n\n\t\treturn true;\n\n\t};\n\n} )();\n\nOrientedBox.prototype.intersectsTriangle = ( function () {\n\n\tconst saTri = new ExtendedTriangle();\n\tconst pointsArr = new Array( 3 );\n\tconst cachedSatBounds = new SeparatingAxisBounds();\n\tconst cachedSatBounds2 = new SeparatingAxisBounds();\n\tconst cachedAxis = new Vector3();\n\treturn function intersectsTriangle( triangle ) {\n\n\t\tif ( this.needsUpdate ) {\n\n\t\t\tthis.update();\n\n\t\t}\n\n\t\tif ( ! triangle.isExtendedTriangle ) {\n\n\t\t\tsaTri.copy( triangle );\n\t\t\tsaTri.update();\n\t\t\ttriangle = saTri;\n\n\t\t} else if ( triangle.needsUpdate ) {\n\n\t\t\ttriangle.update();\n\n\t\t}\n\n\t\tconst satBounds = this.satBounds;\n\t\tconst satAxes = this.satAxes;\n\n\t\tpointsArr[ 0 ] = triangle.a;\n\t\tpointsArr[ 1 ] = triangle.b;\n\t\tpointsArr[ 2 ] = triangle.c;\n\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst sb = satBounds[ i ];\n\t\t\tconst sa = satAxes[ i ];\n\t\t\tcachedSatBounds.setFromPoints( sa, pointsArr );\n\t\t\tif ( sb.isSeparated( cachedSatBounds ) ) return false;\n\n\t\t}\n\n\t\tconst triSatBounds = triangle.satBounds;\n\t\tconst triSatAxes = triangle.satAxes;\n\t\tconst points = this.points;\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst sb = triSatBounds[ i ];\n\t\t\tconst sa = triSatAxes[ i ];\n\t\t\tcachedSatBounds.setFromPoints( sa, points );\n\t\t\tif ( sb.isSeparated( cachedSatBounds ) ) return false;\n\n\t\t}\n\n\t\t// check crossed axes\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tconst sa1 = satAxes[ i ];\n\t\t\tfor ( let i2 = 0; i2 < 4; i2 ++ ) {\n\n\t\t\t\tconst sa2 = triSatAxes[ i2 ];\n\t\t\t\tcachedAxis.crossVectors( sa1, sa2 );\n\t\t\t\tcachedSatBounds.setFromPoints( cachedAxis, pointsArr );\n\t\t\t\tcachedSatBounds2.setFromPoints( cachedAxis, points );\n\t\t\t\tif ( cachedSatBounds.isSeparated( cachedSatBounds2 ) ) return false;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn true;\n\n\t};\n\n} )();\n\nOrientedBox.prototype.closestPointToPoint = ( function () {\n\n\treturn function closestPointToPoint( point, target1 ) {\n\n\t\tif ( this.needsUpdate ) {\n\n\t\t\tthis.update();\n\n\t\t}\n\n\t\ttarget1\n\t\t\t.copy( point )\n\t\t\t.applyMatrix4( this.invMatrix )\n\t\t\t.clamp( this.min, this.max )\n\t\t\t.applyMatrix4( this.matrix );\n\n\t\treturn target1;\n\n\t};\n\n} )();\n\nOrientedBox.prototype.distanceToPoint = ( function () {\n\n\tconst target = new Vector3();\n\treturn function distanceToPoint( point ) {\n\n\t\tthis.closestPointToPoint( point, target );\n\t\treturn point.distanceTo( target );\n\n\t};\n\n} )();\n\nOrientedBox.prototype.distanceToBox = ( function () {\n\n\tconst xyzFields = [ 'x', 'y', 'z' ];\n\tconst segments1 = new Array( 12 ).fill().map( () => new Line3() );\n\tconst segments2 = new Array( 12 ).fill().map( () => new Line3() );\n\n\tconst point1 = new Vector3();\n\tconst point2 = new Vector3();\n\n\t// early out if we find a value below threshold\n\treturn function distanceToBox( box, threshold = 0, target1 = null, target2 = null ) {\n\n\t\tif ( this.needsUpdate ) {\n\n\t\t\tthis.update();\n\n\t\t}\n\n\t\tif ( this.intersectsBox( box ) ) {\n\n\t\t\tif ( target1 || target2 ) {\n\n\t\t\t\tbox.getCenter( point2 );\n\t\t\t\tthis.closestPointToPoint( point2, point1 );\n\t\t\t\tbox.closestPointToPoint( point1, point2 );\n\n\t\t\t\tif ( target1 ) target1.copy( point1 );\n\t\t\t\tif ( target2 ) target2.copy( point2 );\n\n\t\t\t}\n\n\t\t\treturn 0;\n\n\t\t}\n\n\t\tconst threshold2 = threshold * threshold;\n\t\tconst min = box.min;\n\t\tconst max = box.max;\n\t\tconst points = this.points;\n\n\n\t\t// iterate over every edge and compare distances\n\t\tlet closestDistanceSq = Infinity;\n\n\t\t// check over all these points\n\t\tfor ( let i = 0; i < 8; i ++ ) {\n\n\t\t\tconst p = points[ i ];\n\t\t\tpoint2.copy( p ).clamp( min, max );\n\n\t\t\tconst dist = p.distanceToSquared( point2 );\n\t\t\tif ( dist < closestDistanceSq ) {\n\n\t\t\t\tclosestDistanceSq = dist;\n\t\t\t\tif ( target1 ) target1.copy( p );\n\t\t\t\tif ( target2 ) target2.copy( point2 );\n\n\t\t\t\tif ( dist < threshold2 ) return Math.sqrt( dist );\n\n\t\t\t}\n\n\t\t}\n\n\t\t// generate and check all line segment distances\n\t\tlet count = 0;\n\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\tfor ( let i1 = 0; i1 <= 1; i1 ++ ) {\n\n\t\t\t\tfor ( let i2 = 0; i2 <= 1; i2 ++ ) {\n\n\t\t\t\t\tconst nextIndex = ( i + 1 ) % 3;\n\t\t\t\t\tconst nextIndex2 = ( i + 2 ) % 3;\n\n\t\t\t\t\t// get obb line segments\n\t\t\t\t\tconst index = i1 << nextIndex | i2 << nextIndex2;\n\t\t\t\t\tconst index2 = 1 << i | i1 << nextIndex | i2 << nextIndex2;\n\t\t\t\t\tconst p1 = points[ index ];\n\t\t\t\t\tconst p2 = points[ index2 ];\n\t\t\t\t\tconst line1 = segments1[ count ];\n\t\t\t\t\tline1.set( p1, p2 );\n\n\n\t\t\t\t\t// get aabb line segments\n\t\t\t\t\tconst f1 = xyzFields[ i ];\n\t\t\t\t\tconst f2 = xyzFields[ nextIndex ];\n\t\t\t\t\tconst f3 = xyzFields[ nextIndex2 ];\n\t\t\t\t\tconst line2 = segments2[ count ];\n\t\t\t\t\tconst start = line2.start;\n\t\t\t\t\tconst end = line2.end;\n\n\t\t\t\t\tstart[ f1 ] = min[ f1 ];\n\t\t\t\t\tstart[ f2 ] = i1 ? min[ f2 ] : max[ f2 ];\n\t\t\t\t\tstart[ f3 ] = i2 ? min[ f3 ] : max[ f2 ];\n\n\t\t\t\t\tend[ f1 ] = max[ f1 ];\n\t\t\t\t\tend[ f2 ] = i1 ? min[ f2 ] : max[ f2 ];\n\t\t\t\t\tend[ f3 ] = i2 ? min[ f3 ] : max[ f2 ];\n\n\t\t\t\t\tcount ++;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\t// check all the other boxes point\n\t\tfor ( let x = 0; x <= 1; x ++ ) {\n\n\t\t\tfor ( let y = 0; y <= 1; y ++ ) {\n\n\t\t\t\tfor ( let z = 0; z <= 1; z ++ ) {\n\n\t\t\t\t\tpoint2.x = x ? max.x : min.x;\n\t\t\t\t\tpoint2.y = y ? max.y : min.y;\n\t\t\t\t\tpoint2.z = z ? max.z : min.z;\n\n\t\t\t\t\tthis.closestPointToPoint( point2, point1 );\n\t\t\t\t\tconst dist = point2.distanceToSquared( point1 );\n\t\t\t\t\tif ( dist < closestDistanceSq ) {\n\n\t\t\t\t\t\tclosestDistanceSq = dist;\n\t\t\t\t\t\tif ( target1 ) target1.copy( point1 );\n\t\t\t\t\t\tif ( target2 ) target2.copy( point2 );\n\n\t\t\t\t\t\tif ( dist < threshold2 ) return Math.sqrt( dist );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\tfor ( let i = 0; i < 12; i ++ ) {\n\n\t\t\tconst l1 = segments1[ i ];\n\t\t\tfor ( let i2 = 0; i2 < 12; i2 ++ ) {\n\n\t\t\t\tconst l2 = segments2[ i2 ];\n\t\t\t\tclosestPointsSegmentToSegment( l1, l2, point1, point2 );\n\t\t\t\tconst dist = point1.distanceToSquared( point2 );\n\t\t\t\tif ( dist < closestDistanceSq ) {\n\n\t\t\t\t\tclosestDistanceSq = dist;\n\t\t\t\t\tif ( target1 ) target1.copy( point1 );\n\t\t\t\t\tif ( target2 ) target2.copy( point2 );\n\n\t\t\t\t\tif ( dist < threshold2 ) return Math.sqrt( dist );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn Math.sqrt( closestDistanceSq );\n\n\t};\n\n} )();\n","export class PrimitivePool {\n\n\tconstructor( getNewPrimitive ) {\n\n\t\tthis._getNewPrimitive = getNewPrimitive;\n\t\tthis._primitives = [];\n\n\t}\n\n\tgetPrimitive() {\n\n\t\tconst primitives = this._primitives;\n\t\tif ( primitives.length === 0 ) {\n\n\t\t\treturn this._getNewPrimitive();\n\n\t\t} else {\n\n\t\t\treturn primitives.pop();\n\n\t\t}\n\n\t}\n\n\treleasePrimitive( primitive ) {\n\n\t\tthis._primitives.push( primitive );\n\n\t}\n\n}\n","import { ExtendedTriangle } from '../math/ExtendedTriangle.js';\nimport { PrimitivePool } from './PrimitivePool.js';\n\nclass ExtendedTrianglePoolBase extends PrimitivePool {\n\n\tconstructor() {\n\n\t\tsuper( () => new ExtendedTriangle() );\n\n\t}\n\n}\n\nexport const ExtendedTrianglePool = /* @__PURE__ */ new ExtendedTrianglePoolBase();\n","class _BufferStack {\n\n\tconstructor() {\n\n\t\tthis.float32Array = null;\n\t\tthis.uint16Array = null;\n\t\tthis.uint32Array = null;\n\n\t\tconst stack = [];\n\t\tlet prevBuffer = null;\n\t\tthis.setBuffer = buffer => {\n\n\t\t\tif ( prevBuffer ) {\n\n\t\t\t\tstack.push( prevBuffer );\n\n\t\t\t}\n\n\t\t\tprevBuffer = buffer;\n\t\t\tthis.float32Array = new Float32Array( buffer );\n\t\t\tthis.uint16Array = new Uint16Array( buffer );\n\t\t\tthis.uint32Array = new Uint32Array( buffer );\n\n\t\t};\n\n\t\tthis.clearBuffer = () => {\n\n\t\t\tprevBuffer = null;\n\t\t\tthis.float32Array = null;\n\t\t\tthis.uint16Array = null;\n\t\t\tthis.uint32Array = null;\n\n\t\t\tif ( stack.length !== 0 ) {\n\n\t\t\t\tthis.setBuffer( stack.pop() );\n\n\t\t\t}\n\n\t\t};\n\n\t}\n\n}\n\nexport const BufferStack = new _BufferStack();\n","import { Box3 } from 'three';\nimport { CONTAINED } from '../Constants.js';\nimport { arrayToBox } from '../../utils/ArrayBoxUtilities.js';\nimport { PrimitivePool } from '../../utils/PrimitivePool.js';\nimport { COUNT, OFFSET, LEFT_NODE, RIGHT_NODE, IS_LEAF, BOUNDING_DATA_INDEX } from '../utils/nodeBufferUtils.js';\nimport { BufferStack } from '../utils/BufferStack.js';\n\nlet _box1, _box2;\nconst boxStack = [];\nconst boxPool = /* @__PURE__ */ new PrimitivePool( () => new Box3() );\n\nexport function shapecast( bvh, root, intersectsBounds, intersectsRange, boundsTraverseOrder, byteOffset ) {\n\n\t// setup\n\t_box1 = boxPool.getPrimitive();\n\t_box2 = boxPool.getPrimitive();\n\tboxStack.push( _box1, _box2 );\n\tBufferStack.setBuffer( bvh._roots[ root ] );\n\n\tconst result = shapecastTraverse( 0, bvh.geometry, intersectsBounds, intersectsRange, boundsTraverseOrder, byteOffset );\n\n\t// cleanup\n\tBufferStack.clearBuffer();\n\tboxPool.releasePrimitive( _box1 );\n\tboxPool.releasePrimitive( _box2 );\n\tboxStack.pop();\n\tboxStack.pop();\n\n\tconst length = boxStack.length;\n\tif ( length > 0 ) {\n\n\t\t_box2 = boxStack[ length - 1 ];\n\t\t_box1 = boxStack[ length - 2 ];\n\n\t}\n\n\treturn result;\n\n}\n\nfunction shapecastTraverse(\n\tnodeIndex32,\n\tgeometry,\n\tintersectsBoundsFunc,\n\tintersectsRangeFunc,\n\tnodeScoreFunc = null,\n\tnodeIndexByteOffset = 0, // offset for unique node identifier\n\tdepth = 0\n) {\n\n\tconst { float32Array, uint16Array, uint32Array } = BufferStack;\n\tlet nodeIndex16 = nodeIndex32 * 2;\n\n\tconst isLeaf = IS_LEAF( nodeIndex16, uint16Array );\n\tif ( isLeaf ) {\n\n\t\tconst offset = OFFSET( nodeIndex32, uint32Array );\n\t\tconst count = COUNT( nodeIndex16, uint16Array );\n\t\tarrayToBox( BOUNDING_DATA_INDEX( nodeIndex32 ), float32Array, _box1 );\n\t\treturn intersectsRangeFunc( offset, count, false, depth, nodeIndexByteOffset + nodeIndex32, _box1 );\n\n\t} else {\n\n\t\tconst left = LEFT_NODE( nodeIndex32 );\n\t\tconst right = RIGHT_NODE( nodeIndex32, uint32Array );\n\t\tlet c1 = left;\n\t\tlet c2 = right;\n\n\t\tlet score1, score2;\n\t\tlet box1, box2;\n\t\tif ( nodeScoreFunc ) {\n\n\t\t\tbox1 = _box1;\n\t\t\tbox2 = _box2;\n\n\t\t\t// bounding data is not offset\n\t\t\tarrayToBox( BOUNDING_DATA_INDEX( c1 ), float32Array, box1 );\n\t\t\tarrayToBox( BOUNDING_DATA_INDEX( c2 ), float32Array, box2 );\n\n\t\t\tscore1 = nodeScoreFunc( box1 );\n\t\t\tscore2 = nodeScoreFunc( box2 );\n\n\t\t\tif ( score2 < score1 ) {\n\n\t\t\t\tc1 = right;\n\t\t\t\tc2 = left;\n\n\t\t\t\tconst temp = score1;\n\t\t\t\tscore1 = score2;\n\t\t\t\tscore2 = temp;\n\n\t\t\t\tbox1 = box2;\n\t\t\t\t// box2 is always set before use below\n\n\t\t\t}\n\n\t\t}\n\n\t\t// Check box 1 intersection\n\t\tif ( ! box1 ) {\n\n\t\t\tbox1 = _box1;\n\t\t\tarrayToBox( BOUNDING_DATA_INDEX( c1 ), float32Array, box1 );\n\n\t\t}\n\n\t\tconst isC1Leaf = IS_LEAF( c1 * 2, uint16Array );\n\t\tconst c1Intersection = intersectsBoundsFunc( box1, isC1Leaf, score1, depth + 1, nodeIndexByteOffset + c1 );\n\n\t\tlet c1StopTraversal;\n\t\tif ( c1Intersection === CONTAINED ) {\n\n\t\t\tconst offset = getLeftOffset( c1 );\n\t\t\tconst end = getRightEndOffset( c1 );\n\t\t\tconst count = end - offset;\n\n\t\t\tc1StopTraversal = intersectsRangeFunc( offset, count, true, depth + 1, nodeIndexByteOffset + c1, box1 );\n\n\t\t} else {\n\n\t\t\tc1StopTraversal =\n\t\t\t\tc1Intersection &&\n\t\t\t\tshapecastTraverse(\n\t\t\t\t\tc1,\n\t\t\t\t\tgeometry,\n\t\t\t\t\tintersectsBoundsFunc,\n\t\t\t\t\tintersectsRangeFunc,\n\t\t\t\t\tnodeScoreFunc,\n\t\t\t\t\tnodeIndexByteOffset,\n\t\t\t\t\tdepth + 1\n\t\t\t\t);\n\n\t\t}\n\n\t\tif ( c1StopTraversal ) return true;\n\n\t\t// Check box 2 intersection\n\t\t// cached box2 will have been overwritten by previous traversal\n\t\tbox2 = _box2;\n\t\tarrayToBox( BOUNDING_DATA_INDEX( c2 ), float32Array, box2 );\n\n\t\tconst isC2Leaf = IS_LEAF( c2 * 2, uint16Array );\n\t\tconst c2Intersection = intersectsBoundsFunc( box2, isC2Leaf, score2, depth + 1, nodeIndexByteOffset + c2 );\n\n\t\tlet c2StopTraversal;\n\t\tif ( c2Intersection === CONTAINED ) {\n\n\t\t\tconst offset = getLeftOffset( c2 );\n\t\t\tconst end = getRightEndOffset( c2 );\n\t\t\tconst count = end - offset;\n\n\t\t\tc2StopTraversal = intersectsRangeFunc( offset, count, true, depth + 1, nodeIndexByteOffset + c2, box2 );\n\n\t\t} else {\n\n\t\t\tc2StopTraversal =\n\t\t\t\tc2Intersection &&\n\t\t\t\tshapecastTraverse(\n\t\t\t\t\tc2,\n\t\t\t\t\tgeometry,\n\t\t\t\t\tintersectsBoundsFunc,\n\t\t\t\t\tintersectsRangeFunc,\n\t\t\t\t\tnodeScoreFunc,\n\t\t\t\t\tnodeIndexByteOffset,\n\t\t\t\t\tdepth + 1\n\t\t\t\t);\n\n\t\t}\n\n\t\tif ( c2StopTraversal ) return true;\n\n\t\treturn false;\n\n\t\t// Define these inside the function so it has access to the local variables needed\n\t\t// when converting to the buffer equivalents\n\t\tfunction getLeftOffset( nodeIndex32 ) {\n\n\t\t\tconst { uint16Array, uint32Array } = BufferStack;\n\t\t\tlet nodeIndex16 = nodeIndex32 * 2;\n\n\t\t\t// traverse until we find a leaf\n\t\t\twhile ( ! IS_LEAF( nodeIndex16, uint16Array ) ) {\n\n\t\t\t\tnodeIndex32 = LEFT_NODE( nodeIndex32 );\n\t\t\t\tnodeIndex16 = nodeIndex32 * 2;\n\n\t\t\t}\n\n\t\t\treturn OFFSET( nodeIndex32, uint32Array );\n\n\t\t}\n\n\t\tfunction getRightEndOffset( nodeIndex32 ) {\n\n\t\t\tconst { uint16Array, uint32Array } = BufferStack;\n\t\t\tlet nodeIndex16 = nodeIndex32 * 2;\n\n\t\t\t// traverse until we find a leaf\n\t\t\twhile ( ! IS_LEAF( nodeIndex16, uint16Array ) ) {\n\n\t\t\t\t// adjust offset to point to the right node\n\t\t\t\tnodeIndex32 = RIGHT_NODE( nodeIndex32, uint32Array );\n\t\t\t\tnodeIndex16 = nodeIndex32 * 2;\n\n\t\t\t}\n\n\t\t\t// return the end offset of the triangle range\n\t\t\treturn OFFSET( nodeIndex32, uint32Array ) + COUNT( nodeIndex16, uint16Array );\n\n\t\t}\n\n\t}\n\n}\n","import { Vector3 } from 'three';\n\nconst temp = /* @__PURE__ */ new Vector3();\nconst temp1 = /* @__PURE__ */ new Vector3();\n\nexport function closestPointToPoint(\n\tbvh,\n\tpoint,\n\ttarget = { },\n\tminThreshold = 0,\n\tmaxThreshold = Infinity,\n) {\n\n\t// early out if under minThreshold\n\t// skip checking if over maxThreshold\n\t// set minThreshold = maxThreshold to quickly check if a point is within a threshold\n\t// returns Infinity if no value found\n\tconst minThresholdSq = minThreshold * minThreshold;\n\tconst maxThresholdSq = maxThreshold * maxThreshold;\n\tlet closestDistanceSq = Infinity;\n\tlet closestDistanceTriIndex = null;\n\tbvh.shapecast(\n\n\t\t{\n\n\t\t\tboundsTraverseOrder: box => {\n\n\t\t\t\ttemp.copy( point ).clamp( box.min, box.max );\n\t\t\t\treturn temp.distanceToSquared( point );\n\n\t\t\t},\n\n\t\t\tintersectsBounds: ( box, isLeaf, score ) => {\n\n\t\t\t\treturn score < closestDistanceSq && score < maxThresholdSq;\n\n\t\t\t},\n\n\t\t\tintersectsTriangle: ( tri, triIndex ) => {\n\n\t\t\t\ttri.closestPointToPoint( point, temp );\n\t\t\t\tconst distSq = point.distanceToSquared( temp );\n\t\t\t\tif ( distSq < closestDistanceSq ) {\n\n\t\t\t\t\ttemp1.copy( temp );\n\t\t\t\t\tclosestDistanceSq = distSq;\n\t\t\t\t\tclosestDistanceTriIndex = triIndex;\n\n\t\t\t\t}\n\n\t\t\t\tif ( distSq < minThresholdSq ) {\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t} else {\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t}\n\n\t);\n\n\tif ( closestDistanceSq === Infinity ) return null;\n\n\tconst closestDistance = Math.sqrt( closestDistanceSq );\n\n\tif ( ! target.point ) target.point = temp1.clone();\n\telse target.point.copy( temp1 );\n\ttarget.distance = closestDistance,\n\ttarget.faceIndex = closestDistanceTriIndex;\n\n\treturn target;\n\n}\n","import { Vector3, Vector2, Triangle, DoubleSide, BackSide, REVISION } from 'three';\n\nconst IS_GT_REVISION_169 = parseInt( REVISION ) >= 169;\n\n// Ripped and modified From THREE.js Mesh raycast\n// https://github.com/mrdoob/three.js/blob/0aa87c999fe61e216c1133fba7a95772b503eddf/src/objects/Mesh.js#L115\nconst _vA = /* @__PURE__ */ new Vector3();\nconst _vB = /* @__PURE__ */ new Vector3();\nconst _vC = /* @__PURE__ */ new Vector3();\n\nconst _uvA = /* @__PURE__ */ new Vector2();\nconst _uvB = /* @__PURE__ */ new Vector2();\nconst _uvC = /* @__PURE__ */ new Vector2();\n\nconst _normalA = /* @__PURE__ */ new Vector3();\nconst _normalB = /* @__PURE__ */ new Vector3();\nconst _normalC = /* @__PURE__ */ new Vector3();\n\nconst _intersectionPoint = /* @__PURE__ */ new Vector3();\nfunction checkIntersection( ray, pA, pB, pC, point, side, near, far ) {\n\n\tlet intersect;\n\tif ( side === BackSide ) {\n\n\t\tintersect = ray.intersectTriangle( pC, pB, pA, true, point );\n\n\t} else {\n\n\t\tintersect = ray.intersectTriangle( pA, pB, pC, side !== DoubleSide, point );\n\n\t}\n\n\tif ( intersect === null ) return null;\n\n\tconst distance = ray.origin.distanceTo( point );\n\n\tif ( distance < near || distance > far ) return null;\n\n\treturn {\n\n\t\tdistance: distance,\n\t\tpoint: point.clone(),\n\n\t};\n\n}\n\nfunction checkBufferGeometryIntersection( ray, position, normal, uv, uv1, a, b, c, side, near, far ) {\n\n\t_vA.fromBufferAttribute( position, a );\n\t_vB.fromBufferAttribute( position, b );\n\t_vC.fromBufferAttribute( position, c );\n\n\tconst intersection = checkIntersection( ray, _vA, _vB, _vC, _intersectionPoint, side, near, far );\n\n\tif ( intersection ) {\n\n\t\tconst barycoord = new Vector3();\n\t\tTriangle.getBarycoord( _intersectionPoint, _vA, _vB, _vC, barycoord );\n\n\t\tif ( uv ) {\n\n\t\t\t_uvA.fromBufferAttribute( uv, a );\n\t\t\t_uvB.fromBufferAttribute( uv, b );\n\t\t\t_uvC.fromBufferAttribute( uv, c );\n\n\t\t\tintersection.uv = Triangle.getInterpolation( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t}\n\n\t\tif ( uv1 ) {\n\n\t\t\t_uvA.fromBufferAttribute( uv1, a );\n\t\t\t_uvB.fromBufferAttribute( uv1, b );\n\t\t\t_uvC.fromBufferAttribute( uv1, c );\n\n\t\t\tintersection.uv1 = Triangle.getInterpolation( _intersectionPoint, _vA, _vB, _vC, _uvA, _uvB, _uvC, new Vector2() );\n\n\t\t}\n\n\t\tif ( normal ) {\n\n\t\t\t_normalA.fromBufferAttribute( normal, a );\n\t\t\t_normalB.fromBufferAttribute( normal, b );\n\t\t\t_normalC.fromBufferAttribute( normal, c );\n\n\t\t\tintersection.normal = Triangle.getInterpolation( _intersectionPoint, _vA, _vB, _vC, _normalA, _normalB, _normalC, new Vector3() );\n\t\t\tif ( intersection.normal.dot( ray.direction ) > 0 ) {\n\n\t\t\t\tintersection.normal.multiplyScalar( - 1 );\n\n\t\t\t}\n\n\t\t}\n\n\t\tconst face = {\n\t\t\ta: a,\n\t\t\tb: b,\n\t\t\tc: c,\n\t\t\tnormal: new Vector3(),\n\t\t\tmaterialIndex: 0\n\t\t};\n\n\t\tTriangle.getNormal( _vA, _vB, _vC, face.normal );\n\n\t\tintersection.face = face;\n\t\tintersection.faceIndex = a;\n\n\t\tif ( IS_GT_REVISION_169 ) {\n\n\t\t\tintersection.barycoord = barycoord;\n\n\t\t}\n\n\t}\n\n\treturn intersection;\n\n}\n\n// https://github.com/mrdoob/three.js/blob/0aa87c999fe61e216c1133fba7a95772b503eddf/src/objects/Mesh.js#L258\nfunction intersectTri( geo, side, ray, tri, intersections, near, far ) {\n\n\tconst triOffset = tri * 3;\n\tlet a = triOffset + 0;\n\tlet b = triOffset + 1;\n\tlet c = triOffset + 2;\n\n\tconst index = geo.index;\n\tif ( geo.index ) {\n\n\t\ta = index.getX( a );\n\t\tb = index.getX( b );\n\t\tc = index.getX( c );\n\n\t}\n\n\tconst { position, normal, uv, uv1 } = geo.attributes;\n\tconst intersection = checkBufferGeometryIntersection( ray, position, normal, uv, uv1, a, b, c, side, near, far );\n\n\tif ( intersection ) {\n\n\t\tintersection.faceIndex = tri;\n\t\tif ( intersections ) intersections.push( intersection );\n\t\treturn intersection;\n\n\t}\n\n\treturn null;\n\n}\n\nexport { intersectTri };\n","\nimport { Vector2, Vector3, Triangle } from 'three';\n\n// sets the vertices of triangle `tri` with the 3 vertices after i\nexport function setTriangle( tri, i, index, pos ) {\n\n\tconst ta = tri.a;\n\tconst tb = tri.b;\n\tconst tc = tri.c;\n\n\tlet i0 = i;\n\tlet i1 = i + 1;\n\tlet i2 = i + 2;\n\tif ( index ) {\n\n\t\ti0 = index.getX( i0 );\n\t\ti1 = index.getX( i1 );\n\t\ti2 = index.getX( i2 );\n\n\t}\n\n\tta.x = pos.getX( i0 );\n\tta.y = pos.getY( i0 );\n\tta.z = pos.getZ( i0 );\n\n\ttb.x = pos.getX( i1 );\n\ttb.y = pos.getY( i1 );\n\ttb.z = pos.getZ( i1 );\n\n\ttc.x = pos.getX( i2 );\n\ttc.y = pos.getY( i2 );\n\ttc.z = pos.getZ( i2 );\n\n}\n\nconst tempV1 = /* @__PURE__ */ new Vector3();\nconst tempV2 = /* @__PURE__ */ new Vector3();\nconst tempV3 = /* @__PURE__ */ new Vector3();\nconst tempUV1 = /* @__PURE__ */ new Vector2();\nconst tempUV2 = /* @__PURE__ */ new Vector2();\nconst tempUV3 = /* @__PURE__ */ new Vector2();\n\nexport function getTriangleHitPointInfo( point, geometry, triangleIndex, target ) {\n\n\tconst indices = geometry.getIndex().array;\n\tconst positions = geometry.getAttribute( 'position' );\n\tconst uvs = geometry.getAttribute( 'uv' );\n\n\tconst a = indices[ triangleIndex * 3 ];\n\tconst b = indices[ triangleIndex * 3 + 1 ];\n\tconst c = indices[ triangleIndex * 3 + 2 ];\n\n\ttempV1.fromBufferAttribute( positions, a );\n\ttempV2.fromBufferAttribute( positions, b );\n\ttempV3.fromBufferAttribute( positions, c );\n\n\t// find the associated material index\n\tlet materialIndex = 0;\n\tconst groups = geometry.groups;\n\tconst firstVertexIndex = triangleIndex * 3;\n\tfor ( let i = 0, l = groups.length; i < l; i ++ ) {\n\n\t\tconst group = groups[ i ];\n\t\tconst { start, count } = group;\n\t\tif ( firstVertexIndex >= start && firstVertexIndex < start + count ) {\n\n\t\t\tmaterialIndex = group.materialIndex;\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\t// extract barycoord\n\tconst barycoord = target && target.barycoord ? target.barycoord : new Vector3();\n\tTriangle.getBarycoord( point, tempV1, tempV2, tempV3, barycoord );\n\n\t// extract uvs\n\tlet uv = null;\n\tif ( uvs ) {\n\n\t\ttempUV1.fromBufferAttribute( uvs, a );\n\t\ttempUV2.fromBufferAttribute( uvs, b );\n\t\ttempUV3.fromBufferAttribute( uvs, c );\n\n\t\tif ( target && target.uv ) uv = target.uv;\n\t\telse uv = new Vector2();\n\n\t\tTriangle.getInterpolation( point, tempV1, tempV2, tempV3, tempUV1, tempUV2, tempUV3, uv );\n\n\t}\n\n\t// adjust the provided target or create a new one\n\tif ( target ) {\n\n\t\tif ( ! target.face ) target.face = { };\n\t\ttarget.face.a = a;\n\t\ttarget.face.b = b;\n\t\ttarget.face.c = c;\n\t\ttarget.face.materialIndex = materialIndex;\n\t\tif ( ! target.face.normal ) target.face.normal = new Vector3();\n\t\tTriangle.getNormal( tempV1, tempV2, tempV3, target.face.normal );\n\n\t\tif ( uv ) target.uv = uv;\n\t\ttarget.barycoord = barycoord;\n\n\t\treturn target;\n\n\t} else {\n\n\t\treturn {\n\t\t\tface: {\n\t\t\t\ta: a,\n\t\t\t\tb: b,\n\t\t\t\tc: c,\n\t\t\t\tmaterialIndex: materialIndex,\n\t\t\t\tnormal: Triangle.getNormal( tempV1, tempV2, tempV3, new Vector3() )\n\t\t\t},\n\t\t\tuv: uv,\n\t\t\tbarycoord: barycoord,\n\t\t};\n\n\t}\n\n}\n","import { intersectTri } from '../../utils/ThreeRayIntersectUtilities.js';\nimport { setTriangle } from '../../utils/TriangleUtilities.js';\n\n/*************************************************************/\n/* This file is generated from \"iterationUtils.template.js\". */\n/*************************************************************/\n/* eslint-disable indent */\n\nfunction intersectTris( bvh, side, ray, offset, count, intersections, near, far ) {\n\n\tconst { geometry, _indirectBuffer } = bvh;\n\tfor ( let i = offset, end = offset + count; i < end; i ++ ) {\n\n\n\t\tintersectTri( geometry, side, ray, i, intersections, near, far );\n\n\n\t}\n\n}\n\nfunction intersectClosestTri( bvh, side, ray, offset, count, near, far ) {\n\n\tconst { geometry, _indirectBuffer } = bvh;\n\tlet dist = Infinity;\n\tlet res = null;\n\tfor ( let i = offset, end = offset + count; i < end; i ++ ) {\n\n\t\tlet intersection;\n\n\t\tintersection = intersectTri( geometry, side, ray, i, null, near, far );\n\n\n\t\tif ( intersection && intersection.distance < dist ) {\n\n\t\t\tres = intersection;\n\t\t\tdist = intersection.distance;\n\n\t\t}\n\n\t}\n\n\treturn res;\n\n}\n\nfunction iterateOverTriangles(\n\toffset,\n\tcount,\n\tbvh,\n\tintersectsTriangleFunc,\n\tcontained,\n\tdepth,\n\ttriangle\n) {\n\n\tconst { geometry } = bvh;\n\tconst { index } = geometry;\n\tconst pos = geometry.attributes.position;\n\tfor ( let i = offset, l = count + offset; i < l; i ++ ) {\n\n\t\tlet tri;\n\n\t\ttri = i;\n\n\t\tsetTriangle( triangle, tri * 3, index, pos );\n\t\ttriangle.needsUpdate = true;\n\n\t\tif ( intersectsTriangleFunc( triangle, tri, contained, depth ) ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t}\n\n\treturn false;\n\n}\n\nexport { intersectClosestTri, intersectTris, iterateOverTriangles };\n","import { IS_LEAFNODE_FLAG } from '../Constants.js';\n\n/****************************************************/\n/* This file is generated from \"refit.template.js\". */\n/****************************************************/\n\nfunction refit( bvh, nodeIndices = null ) {\n\n\tif ( nodeIndices && Array.isArray( nodeIndices ) ) {\n\n\t\tnodeIndices = new Set( nodeIndices );\n\n\t}\n\n\tconst geometry = bvh.geometry;\n\tconst indexArr = geometry.index ? geometry.index.array : null;\n\tconst posAttr = geometry.attributes.position;\n\n\tlet buffer, uint32Array, uint16Array, float32Array;\n\tlet byteOffset = 0;\n\tconst roots = bvh._roots;\n\tfor ( let i = 0, l = roots.length; i < l; i ++ ) {\n\n\t\tbuffer = roots[ i ];\n\t\tuint32Array = new Uint32Array( buffer );\n\t\tuint16Array = new Uint16Array( buffer );\n\t\tfloat32Array = new Float32Array( buffer );\n\n\t\t_traverse( 0, byteOffset );\n\t\tbyteOffset += buffer.byteLength;\n\n\t}\n\n\tfunction _traverse( node32Index, byteOffset, force = false ) {\n\n\t\tconst node16Index = node32Index * 2;\n\t\tconst isLeaf = uint16Array[ node16Index + 15 ] === IS_LEAFNODE_FLAG;\n\t\tif ( isLeaf ) {\n\n\t\t\tconst offset = uint32Array[ node32Index + 6 ];\n\t\t\tconst count = uint16Array[ node16Index + 14 ];\n\n\t\t\tlet minx = Infinity;\n\t\t\tlet miny = Infinity;\n\t\t\tlet minz = Infinity;\n\t\t\tlet maxx = - Infinity;\n\t\t\tlet maxy = - Infinity;\n\t\t\tlet maxz = - Infinity;\n\n\n\t\t\tfor ( let i = 3 * offset, l = 3 * ( offset + count ); i < l; i ++ ) {\n\n\t\t\t\tlet index = indexArr[ i ];\n\t\t\t\tconst x = posAttr.getX( index );\n\t\t\t\tconst y = posAttr.getY( index );\n\t\t\t\tconst z = posAttr.getZ( index );\n\n\t\t\t\tif ( x < minx ) minx = x;\n\t\t\t\tif ( x > maxx ) maxx = x;\n\n\t\t\t\tif ( y < miny ) miny = y;\n\t\t\t\tif ( y > maxy ) maxy = y;\n\n\t\t\t\tif ( z < minz ) minz = z;\n\t\t\t\tif ( z > maxz ) maxz = z;\n\n\t\t\t}\n\n\n\t\t\tif (\n\t\t\t\tfloat32Array[ node32Index + 0 ] !== minx ||\n\t\t\t\tfloat32Array[ node32Index + 1 ] !== miny ||\n\t\t\t\tfloat32Array[ node32Index + 2 ] !== minz ||\n\n\t\t\t\tfloat32Array[ node32Index + 3 ] !== maxx ||\n\t\t\t\tfloat32Array[ node32Index + 4 ] !== maxy ||\n\t\t\t\tfloat32Array[ node32Index + 5 ] !== maxz\n\t\t\t) {\n\n\t\t\t\tfloat32Array[ node32Index + 0 ] = minx;\n\t\t\t\tfloat32Array[ node32Index + 1 ] = miny;\n\t\t\t\tfloat32Array[ node32Index + 2 ] = minz;\n\n\t\t\t\tfloat32Array[ node32Index + 3 ] = maxx;\n\t\t\t\tfloat32Array[ node32Index + 4 ] = maxy;\n\t\t\t\tfloat32Array[ node32Index + 5 ] = maxz;\n\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst left = node32Index + 8;\n\t\t\tconst right = uint32Array[ node32Index + 6 ];\n\n\t\t\t// the identifying node indices provided by the shapecast function include offsets of all\n\t\t\t// root buffers to guarantee they're unique between roots so offset left and right indices here.\n\t\t\tconst offsetLeft = left + byteOffset;\n\t\t\tconst offsetRight = right + byteOffset;\n\t\t\tlet forceChildren = force;\n\t\t\tlet includesLeft = false;\n\t\t\tlet includesRight = false;\n\n\t\t\tif ( nodeIndices ) {\n\n\t\t\t\t// if we see that neither the left or right child are included in the set that need to be updated\n\t\t\t\t// then we assume that all children need to be updated.\n\t\t\t\tif ( ! forceChildren ) {\n\n\t\t\t\t\tincludesLeft = nodeIndices.has( offsetLeft );\n\t\t\t\t\tincludesRight = nodeIndices.has( offsetRight );\n\t\t\t\t\tforceChildren = ! includesLeft && ! includesRight;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tincludesLeft = true;\n\t\t\t\tincludesRight = true;\n\n\t\t\t}\n\n\t\t\tconst traverseLeft = forceChildren || includesLeft;\n\t\t\tconst traverseRight = forceChildren || includesRight;\n\n\t\t\tlet leftChange = false;\n\t\t\tif ( traverseLeft ) {\n\n\t\t\t\tleftChange = _traverse( left, byteOffset, forceChildren );\n\n\t\t\t}\n\n\t\t\tlet rightChange = false;\n\t\t\tif ( traverseRight ) {\n\n\t\t\t\trightChange = _traverse( right, byteOffset, forceChildren );\n\n\t\t\t}\n\n\t\t\tconst didChange = leftChange || rightChange;\n\t\t\tif ( didChange ) {\n\n\t\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\tconst lefti = left + i;\n\t\t\t\t\tconst righti = right + i;\n\t\t\t\t\tconst minLeftValue = float32Array[ lefti ];\n\t\t\t\t\tconst maxLeftValue = float32Array[ lefti + 3 ];\n\t\t\t\t\tconst minRightValue = float32Array[ righti ];\n\t\t\t\t\tconst maxRightValue = float32Array[ righti + 3 ];\n\n\t\t\t\t\tfloat32Array[ node32Index + i ] = minLeftValue < minRightValue ? minLeftValue : minRightValue;\n\t\t\t\t\tfloat32Array[ node32Index + i + 3 ] = maxLeftValue > maxRightValue ? maxLeftValue : maxRightValue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn didChange;\n\n\t\t}\n\n\t}\n\n}\n\nexport { refit };\n","/**\n * This function performs intersection tests similar to Ray.intersectBox in three.js,\n * with the difference that the box values are read from an array to improve performance.\n */\nexport function intersectRay( nodeIndex32, array, ray, near, far ) {\n\n\tlet tmin, tmax, tymin, tymax, tzmin, tzmax;\n\n\tconst invdirx = 1 / ray.direction.x,\n\t\tinvdiry = 1 / ray.direction.y,\n\t\tinvdirz = 1 / ray.direction.z;\n\n\tconst ox = ray.origin.x;\n\tconst oy = ray.origin.y;\n\tconst oz = ray.origin.z;\n\n\tlet minx = array[ nodeIndex32 ];\n\tlet maxx = array[ nodeIndex32 + 3 ];\n\n\tlet miny = array[ nodeIndex32 + 1 ];\n\tlet maxy = array[ nodeIndex32 + 3 + 1 ];\n\n\tlet minz = array[ nodeIndex32 + 2 ];\n\tlet maxz = array[ nodeIndex32 + 3 + 2 ];\n\n\tif ( invdirx >= 0 ) {\n\n\t\ttmin = ( minx - ox ) * invdirx;\n\t\ttmax = ( maxx - ox ) * invdirx;\n\n\t} else {\n\n\t\ttmin = ( maxx - ox ) * invdirx;\n\t\ttmax = ( minx - ox ) * invdirx;\n\n\t}\n\n\tif ( invdiry >= 0 ) {\n\n\t\ttymin = ( miny - oy ) * invdiry;\n\t\ttymax = ( maxy - oy ) * invdiry;\n\n\t} else {\n\n\t\ttymin = ( maxy - oy ) * invdiry;\n\t\ttymax = ( miny - oy ) * invdiry;\n\n\t}\n\n\tif ( ( tmin > tymax ) || ( tymin > tmax ) ) return false;\n\n\tif ( tymin > tmin || isNaN( tmin ) ) tmin = tymin;\n\n\tif ( tymax < tmax || isNaN( tmax ) ) tmax = tymax;\n\n\tif ( invdirz >= 0 ) {\n\n\t\ttzmin = ( minz - oz ) * invdirz;\n\t\ttzmax = ( maxz - oz ) * invdirz;\n\n\t} else {\n\n\t\ttzmin = ( maxz - oz ) * invdirz;\n\t\ttzmax = ( minz - oz ) * invdirz;\n\n\t}\n\n\tif ( ( tmin > tzmax ) || ( tzmin > tmax ) ) return false;\n\n\tif ( tzmin > tmin || tmin !== tmin ) tmin = tzmin;\n\n\tif ( tzmax < tmax || tmax !== tmax ) tmax = tzmax;\n\n\t//return point closest to the ray (positive side)\n\n\treturn tmin <= far && tmax >= near;\n\n}\n","import { intersectTri } from '../../utils/ThreeRayIntersectUtilities.js';\nimport { setTriangle } from '../../utils/TriangleUtilities.js';\n\n/*************************************************************/\n/* This file is generated from \"iterationUtils.template.js\". */\n/*************************************************************/\n/* eslint-disable indent */\n\nfunction intersectTris_indirect( bvh, side, ray, offset, count, intersections, near, far ) {\n\n\tconst { geometry, _indirectBuffer } = bvh;\n\tfor ( let i = offset, end = offset + count; i < end; i ++ ) {\n\n\t\tlet vi = _indirectBuffer ? _indirectBuffer[ i ] : i;\n\t\tintersectTri( geometry, side, ray, vi, intersections, near, far );\n\n\n\t}\n\n}\n\nfunction intersectClosestTri_indirect( bvh, side, ray, offset, count, near, far ) {\n\n\tconst { geometry, _indirectBuffer } = bvh;\n\tlet dist = Infinity;\n\tlet res = null;\n\tfor ( let i = offset, end = offset + count; i < end; i ++ ) {\n\n\t\tlet intersection;\n\t\tintersection = intersectTri( geometry, side, ray, _indirectBuffer ? _indirectBuffer[ i ] : i, null, near, far );\n\n\n\t\tif ( intersection && intersection.distance < dist ) {\n\n\t\t\tres = intersection;\n\t\t\tdist = intersection.distance;\n\n\t\t}\n\n\t}\n\n\treturn res;\n\n}\n\nfunction iterateOverTriangles_indirect(\n\toffset,\n\tcount,\n\tbvh,\n\tintersectsTriangleFunc,\n\tcontained,\n\tdepth,\n\ttriangle\n) {\n\n\tconst { geometry } = bvh;\n\tconst { index } = geometry;\n\tconst pos = geometry.attributes.position;\n\tfor ( let i = offset, l = count + offset; i < l; i ++ ) {\n\n\t\tlet tri;\n\t\ttri = bvh.resolveTriangleIndex( i );\n\n\t\tsetTriangle( triangle, tri * 3, index, pos );\n\t\ttriangle.needsUpdate = true;\n\n\t\tif ( intersectsTriangleFunc( triangle, tri, contained, depth ) ) {\n\n\t\t\treturn true;\n\n\t\t}\n\n\t}\n\n\treturn false;\n\n}\n\nexport { intersectClosestTri_indirect, intersectTris_indirect, iterateOverTriangles_indirect };\n","import { intersectRay } from '../utils/intersectUtils.js';\nimport { IS_LEAF, OFFSET, COUNT, LEFT_NODE, RIGHT_NODE } from '../utils/nodeBufferUtils.js';\nimport { BufferStack } from '../utils/BufferStack.js';\nimport { intersectTris } from '../utils/iterationUtils.generated.js';\nimport '../utils/iterationUtils_indirect.generated.js';\n\n/******************************************************/\n/* This file is generated from \"raycast.template.js\". */\n/******************************************************/\n\nfunction raycast( bvh, root, side, ray, intersects, near, far ) {\n\n\tBufferStack.setBuffer( bvh._roots[ root ] );\n\t_raycast( 0, bvh, side, ray, intersects, near, far );\n\tBufferStack.clearBuffer();\n\n}\n\nfunction _raycast( nodeIndex32, bvh, side, ray, intersects, near, far ) {\n\n\tconst { float32Array, uint16Array, uint32Array } = BufferStack;\n\tconst nodeIndex16 = nodeIndex32 * 2;\n\tconst isLeaf = IS_LEAF( nodeIndex16, uint16Array );\n\tif ( isLeaf ) {\n\n\t\tconst offset = OFFSET( nodeIndex32, uint32Array );\n\t\tconst count = COUNT( nodeIndex16, uint16Array );\n\n\n\t\tintersectTris( bvh, side, ray, offset, count, intersects, near, far );\n\n\n\t} else {\n\n\t\tconst leftIndex = LEFT_NODE( nodeIndex32 );\n\t\tif ( intersectRay( leftIndex, float32Array, ray, near, far ) ) {\n\n\t\t\t_raycast( leftIndex, bvh, side, ray, intersects, near, far );\n\n\t\t}\n\n\t\tconst rightIndex = RIGHT_NODE( nodeIndex32, uint32Array );\n\t\tif ( intersectRay( rightIndex, float32Array, ray, near, far ) ) {\n\n\t\t\t_raycast( rightIndex, bvh, side, ray, intersects, near, far );\n\n\t\t}\n\n\t}\n\n}\n\nexport { raycast };\n","import { IS_LEAF, OFFSET, COUNT, SPLIT_AXIS, LEFT_NODE, RIGHT_NODE } from '../utils/nodeBufferUtils.js';\nimport { BufferStack } from '../utils/BufferStack.js';\nimport { intersectRay } from '../utils/intersectUtils.js';\nimport { intersectClosestTri } from '../utils/iterationUtils.generated.js';\nimport '../utils/iterationUtils_indirect.generated.js';\n\n/***********************************************************/\n/* This file is generated from \"raycastFirst.template.js\". */\n/***********************************************************/\n\nconst _xyzFields = [ 'x', 'y', 'z' ];\n\nfunction raycastFirst( bvh, root, side, ray, near, far ) {\n\n\tBufferStack.setBuffer( bvh._roots[ root ] );\n\tconst result = _raycastFirst( 0, bvh, side, ray, near, far );\n\tBufferStack.clearBuffer();\n\n\treturn result;\n\n}\n\nfunction _raycastFirst( nodeIndex32, bvh, side, ray, near, far ) {\n\n\tconst { float32Array, uint16Array, uint32Array } = BufferStack;\n\tlet nodeIndex16 = nodeIndex32 * 2;\n\n\tconst isLeaf = IS_LEAF( nodeIndex16, uint16Array );\n\tif ( isLeaf ) {\n\n\t\tconst offset = OFFSET( nodeIndex32, uint32Array );\n\t\tconst count = COUNT( nodeIndex16, uint16Array );\n\n\n\t\t// eslint-disable-next-line no-unreachable\n\t\treturn intersectClosestTri( bvh, side, ray, offset, count, near, far );\n\n\n\t} else {\n\n\t\t// consider the position of the split plane with respect to the oncoming ray; whichever direction\n\t\t// the ray is coming from, look for an intersection among that side of the tree first\n\t\tconst splitAxis = SPLIT_AXIS( nodeIndex32, uint32Array );\n\t\tconst xyzAxis = _xyzFields[ splitAxis ];\n\t\tconst rayDir = ray.direction[ xyzAxis ];\n\t\tconst leftToRight = rayDir >= 0;\n\n\t\t// c1 is the child to check first\n\t\tlet c1, c2;\n\t\tif ( leftToRight ) {\n\n\t\t\tc1 = LEFT_NODE( nodeIndex32 );\n\t\t\tc2 = RIGHT_NODE( nodeIndex32, uint32Array );\n\n\t\t} else {\n\n\t\t\tc1 = RIGHT_NODE( nodeIndex32, uint32Array );\n\t\t\tc2 = LEFT_NODE( nodeIndex32 );\n\n\t\t}\n\n\t\tconst c1Intersection = intersectRay( c1, float32Array, ray, near, far );\n\t\tconst c1Result = c1Intersection ? _raycastFirst( c1, bvh, side, ray, near, far ) : null;\n\n\t\t// if we got an intersection in the first node and it's closer than the second node's bounding\n\t\t// box, we don't need to consider the second node because it couldn't possibly be a better result\n\t\tif ( c1Result ) {\n\n\t\t\t// check if the point is within the second bounds\n\t\t\t// \"point\" is in the local frame of the bvh\n\t\t\tconst point = c1Result.point[ xyzAxis ];\n\t\t\tconst isOutside = leftToRight ?\n\t\t\t\tpoint <= float32Array[ c2 + splitAxis ] : // min bounding data\n\t\t\t\tpoint >= float32Array[ c2 + splitAxis + 3 ]; // max bounding data\n\n\t\t\tif ( isOutside ) {\n\n\t\t\t\treturn c1Result;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// either there was no intersection in the first node, or there could still be a closer\n\t\t// intersection in the second, so check the second node and then take the better of the two\n\t\tconst c2Intersection = intersectRay( c2, float32Array, ray, near, far );\n\t\tconst c2Result = c2Intersection ? _raycastFirst( c2, bvh, side, ray, near, far ) : null;\n\n\t\tif ( c1Result && c2Result ) {\n\n\t\t\treturn c1Result.distance <= c2Result.distance ? c1Result : c2Result;\n\n\t\t} else {\n\n\t\t\treturn c1Result || c2Result || null;\n\n\t\t}\n\n\t}\n\n}\n\nexport { raycastFirst };\n","import { Box3, Matrix4 } from 'three';\nimport { OrientedBox } from '../../math/OrientedBox.js';\nimport { ExtendedTriangle } from '../../math/ExtendedTriangle.js';\nimport { setTriangle } from '../../utils/TriangleUtilities.js';\nimport { arrayToBox } from '../../utils/ArrayBoxUtilities.js';\nimport { IS_LEAF, OFFSET, COUNT, BOUNDING_DATA_INDEX } from '../utils/nodeBufferUtils.js';\nimport { BufferStack } from '../utils/BufferStack.js';\n\n/*****************************************************************/\n/* This file is generated from \"intersectsGeometry.template.js\". */\n/*****************************************************************/\n/* eslint-disable indent */\n\nconst boundingBox = /* @__PURE__ */ new Box3();\nconst triangle = /* @__PURE__ */ new ExtendedTriangle();\nconst triangle2 = /* @__PURE__ */ new ExtendedTriangle();\nconst invertedMat = /* @__PURE__ */ new Matrix4();\n\nconst obb = /* @__PURE__ */ new OrientedBox();\nconst obb2 = /* @__PURE__ */ new OrientedBox();\n\nfunction intersectsGeometry( bvh, root, otherGeometry, geometryToBvh ) {\n\n\tBufferStack.setBuffer( bvh._roots[ root ] );\n\tconst result = _intersectsGeometry( 0, bvh, otherGeometry, geometryToBvh );\n\tBufferStack.clearBuffer();\n\n\treturn result;\n\n}\n\nfunction _intersectsGeometry( nodeIndex32, bvh, otherGeometry, geometryToBvh, cachedObb = null ) {\n\n\tconst { float32Array, uint16Array, uint32Array } = BufferStack;\n\tlet nodeIndex16 = nodeIndex32 * 2;\n\n\tif ( cachedObb === null ) {\n\n\t\tif ( ! otherGeometry.boundingBox ) {\n\n\t\t\totherGeometry.computeBoundingBox();\n\n\t\t}\n\n\t\tobb.set( otherGeometry.boundingBox.min, otherGeometry.boundingBox.max, geometryToBvh );\n\t\tcachedObb = obb;\n\n\t}\n\n\tconst isLeaf = IS_LEAF( nodeIndex16, uint16Array );\n\tif ( isLeaf ) {\n\n\t\tconst thisGeometry = bvh.geometry;\n\t\tconst thisIndex = thisGeometry.index;\n\t\tconst thisPos = thisGeometry.attributes.position;\n\n\t\tconst index = otherGeometry.index;\n\t\tconst pos = otherGeometry.attributes.position;\n\n\t\tconst offset = OFFSET( nodeIndex32, uint32Array );\n\t\tconst count = COUNT( nodeIndex16, uint16Array );\n\n\t\t// get the inverse of the geometry matrix so we can transform our triangles into the\n\t\t// geometry space we're trying to test. We assume there are fewer triangles being checked\n\t\t// here.\n\t\tinvertedMat.copy( geometryToBvh ).invert();\n\n\t\tif ( otherGeometry.boundsTree ) {\n\n\t\t\t// if there's a bounds tree\n\t\t\tarrayToBox( BOUNDING_DATA_INDEX( nodeIndex32 ), float32Array, obb2 );\n\t\t\tobb2.matrix.copy( invertedMat );\n\t\t\tobb2.needsUpdate = true;\n\n\t\t\t// TODO: use a triangle iteration function here\n\t\t\tconst res = otherGeometry.boundsTree.shapecast( {\n\n\t\t\t\tintersectsBounds: box => obb2.intersectsBox( box ),\n\n\t\t\t\tintersectsTriangle: tri => {\n\n\t\t\t\t\ttri.a.applyMatrix4( geometryToBvh );\n\t\t\t\t\ttri.b.applyMatrix4( geometryToBvh );\n\t\t\t\t\ttri.c.applyMatrix4( geometryToBvh );\n\t\t\t\t\ttri.needsUpdate = true;\n\n\n\t\t\t\t\tfor ( let i = offset * 3, l = ( count + offset ) * 3; i < l; i += 3 ) {\n\n\t\t\t\t\t\t// this triangle needs to be transformed into the current BVH coordinate frame\n\t\t\t\t\t\tsetTriangle( triangle2, i, thisIndex, thisPos );\n\t\t\t\t\t\ttriangle2.needsUpdate = true;\n\t\t\t\t\t\tif ( tri.intersectsTriangle( triangle2 ) ) {\n\n\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\treturn res;\n\n\t\t} else {\n\n\t\t\t// if we're just dealing with raw geometry\n\n\t\t\tfor ( let i = offset * 3, l = ( count + offset ) * 3; i < l; i += 3 ) {\n\n\t\t\t\t// this triangle needs to be transformed into the current BVH coordinate frame\n\t\t\t\tsetTriangle( triangle, i, thisIndex, thisPos );\n\n\n\t\t\t\ttriangle.a.applyMatrix4( invertedMat );\n\t\t\t\ttriangle.b.applyMatrix4( invertedMat );\n\t\t\t\ttriangle.c.applyMatrix4( invertedMat );\n\t\t\t\ttriangle.needsUpdate = true;\n\n\t\t\t\tfor ( let i2 = 0, l2 = index.count; i2 < l2; i2 += 3 ) {\n\n\t\t\t\t\tsetTriangle( triangle2, i2, index, pos );\n\t\t\t\t\ttriangle2.needsUpdate = true;\n\n\t\t\t\t\tif ( triangle.intersectsTriangle( triangle2 ) ) {\n\n\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\n\t\t\t}\n\n\n\t\t}\n\n\t} else {\n\n\t\tconst left = nodeIndex32 + 8;\n\t\tconst right = uint32Array[ nodeIndex32 + 6 ];\n\n\t\tarrayToBox( BOUNDING_DATA_INDEX( left ), float32Array, boundingBox );\n\t\tconst leftIntersection =\n\t\t\tcachedObb.intersectsBox( boundingBox ) &&\n\t\t\t_intersectsGeometry( left, bvh, otherGeometry, geometryToBvh, cachedObb );\n\n\t\tif ( leftIntersection ) return true;\n\n\t\tarrayToBox( BOUNDING_DATA_INDEX( right ), float32Array, boundingBox );\n\t\tconst rightIntersection =\n\t\t\tcachedObb.intersectsBox( boundingBox ) &&\n\t\t\t_intersectsGeometry( right, bvh, otherGeometry, geometryToBvh, cachedObb );\n\n\t\tif ( rightIntersection ) return true;\n\n\t\treturn false;\n\n\t}\n\n}\n\nexport { intersectsGeometry };\n","import { Matrix4, Vector3 } from 'three';\nimport { OrientedBox } from '../../math/OrientedBox.js';\nimport { setTriangle } from '../../utils/TriangleUtilities.js';\nimport { getTriCount } from '../build/geometryUtils.js';\nimport { ExtendedTrianglePool } from '../../utils/ExtendedTrianglePool.js';\n\n/*********************************************************************/\n/* This file is generated from \"closestPointToGeometry.template.js\". */\n/*********************************************************************/\n\nconst tempMatrix = /* @__PURE__ */ new Matrix4();\nconst obb = /* @__PURE__ */ new OrientedBox();\nconst obb2 = /* @__PURE__ */ new OrientedBox();\nconst temp1 = /* @__PURE__ */ new Vector3();\nconst temp2 = /* @__PURE__ */ new Vector3();\nconst temp3 = /* @__PURE__ */ new Vector3();\nconst temp4 = /* @__PURE__ */ new Vector3();\n\nfunction closestPointToGeometry(\n\tbvh,\n\totherGeometry,\n\tgeometryToBvh,\n\ttarget1 = { },\n\ttarget2 = { },\n\tminThreshold = 0,\n\tmaxThreshold = Infinity,\n) {\n\n\tif ( ! otherGeometry.boundingBox ) {\n\n\t\totherGeometry.computeBoundingBox();\n\n\t}\n\n\tobb.set( otherGeometry.boundingBox.min, otherGeometry.boundingBox.max, geometryToBvh );\n\tobb.needsUpdate = true;\n\n\tconst geometry = bvh.geometry;\n\tconst pos = geometry.attributes.position;\n\tconst index = geometry.index;\n\tconst otherPos = otherGeometry.attributes.position;\n\tconst otherIndex = otherGeometry.index;\n\tconst triangle = ExtendedTrianglePool.getPrimitive();\n\tconst triangle2 = ExtendedTrianglePool.getPrimitive();\n\n\tlet tempTarget1 = temp1;\n\tlet tempTargetDest1 = temp2;\n\tlet tempTarget2 = null;\n\tlet tempTargetDest2 = null;\n\n\tif ( target2 ) {\n\n\t\ttempTarget2 = temp3;\n\t\ttempTargetDest2 = temp4;\n\n\t}\n\n\tlet closestDistance = Infinity;\n\tlet closestDistanceTriIndex = null;\n\tlet closestDistanceOtherTriIndex = null;\n\ttempMatrix.copy( geometryToBvh ).invert();\n\tobb2.matrix.copy( tempMatrix );\n\tbvh.shapecast(\n\t\t{\n\n\t\t\tboundsTraverseOrder: box => {\n\n\t\t\t\treturn obb.distanceToBox( box );\n\n\t\t\t},\n\n\t\t\tintersectsBounds: ( box, isLeaf, score ) => {\n\n\t\t\t\tif ( score < closestDistance && score < maxThreshold ) {\n\n\t\t\t\t\t// if we know the triangles of this bounds will be intersected next then\n\t\t\t\t\t// save the bounds to use during triangle checks.\n\t\t\t\t\tif ( isLeaf ) {\n\n\t\t\t\t\t\tobb2.min.copy( box.min );\n\t\t\t\t\t\tobb2.max.copy( box.max );\n\t\t\t\t\t\tobb2.needsUpdate = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t},\n\n\t\t\tintersectsRange: ( offset, count ) => {\n\n\t\t\t\tif ( otherGeometry.boundsTree ) {\n\n\t\t\t\t\t// if the other geometry has a bvh then use the accelerated path where we use shapecast to find\n\t\t\t\t\t// the closest bounds in the other geometry to check.\n\t\t\t\t\tconst otherBvh = otherGeometry.boundsTree;\n\t\t\t\t\treturn otherBvh.shapecast( {\n\t\t\t\t\t\tboundsTraverseOrder: box => {\n\n\t\t\t\t\t\t\treturn obb2.distanceToBox( box );\n\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tintersectsBounds: ( box, isLeaf, score ) => {\n\n\t\t\t\t\t\t\treturn score < closestDistance && score < maxThreshold;\n\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tintersectsRange: ( otherOffset, otherCount ) => {\n\n\t\t\t\t\t\t\tfor ( let i2 = otherOffset, l2 = otherOffset + otherCount; i2 < l2; i2 ++ ) {\n\n\n\t\t\t\t\t\t\t\tsetTriangle( triangle2, 3 * i2, otherIndex, otherPos );\n\n\t\t\t\t\t\t\t\ttriangle2.a.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\t\t\ttriangle2.b.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\t\t\ttriangle2.c.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\t\t\ttriangle2.needsUpdate = true;\n\n\t\t\t\t\t\t\t\tfor ( let i = offset, l = offset + count; i < l; i ++ ) {\n\n\n\t\t\t\t\t\t\t\t\tsetTriangle( triangle, 3 * i, index, pos );\n\n\t\t\t\t\t\t\t\t\ttriangle.needsUpdate = true;\n\n\t\t\t\t\t\t\t\t\tconst dist = triangle.distanceToTriangle( triangle2, tempTarget1, tempTarget2 );\n\t\t\t\t\t\t\t\t\tif ( dist < closestDistance ) {\n\n\t\t\t\t\t\t\t\t\t\ttempTargetDest1.copy( tempTarget1 );\n\n\t\t\t\t\t\t\t\t\t\tif ( tempTargetDest2 ) {\n\n\t\t\t\t\t\t\t\t\t\t\ttempTargetDest2.copy( tempTarget2 );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tclosestDistance = dist;\n\t\t\t\t\t\t\t\t\t\tclosestDistanceTriIndex = i;\n\t\t\t\t\t\t\t\t\t\tclosestDistanceOtherTriIndex = i2;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// stop traversal if we find a point that's under the given threshold\n\t\t\t\t\t\t\t\t\tif ( dist < minThreshold ) {\n\n\t\t\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t},\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// If no bounds tree then we'll just check every triangle.\n\t\t\t\t\tconst triCount = getTriCount( otherGeometry );\n\t\t\t\t\tfor ( let i2 = 0, l2 = triCount; i2 < l2; i2 ++ ) {\n\n\t\t\t\t\t\tsetTriangle( triangle2, 3 * i2, otherIndex, otherPos );\n\t\t\t\t\t\ttriangle2.a.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\ttriangle2.b.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\ttriangle2.c.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\ttriangle2.needsUpdate = true;\n\n\t\t\t\t\t\tfor ( let i = offset, l = offset + count; i < l; i ++ ) {\n\n\n\t\t\t\t\t\t\tsetTriangle( triangle, 3 * i, index, pos );\n\n\t\t\t\t\t\t\ttriangle.needsUpdate = true;\n\n\t\t\t\t\t\t\tconst dist = triangle.distanceToTriangle( triangle2, tempTarget1, tempTarget2 );\n\t\t\t\t\t\t\tif ( dist < closestDistance ) {\n\n\t\t\t\t\t\t\t\ttempTargetDest1.copy( tempTarget1 );\n\n\t\t\t\t\t\t\t\tif ( tempTargetDest2 ) {\n\n\t\t\t\t\t\t\t\t\ttempTargetDest2.copy( tempTarget2 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tclosestDistance = dist;\n\t\t\t\t\t\t\t\tclosestDistanceTriIndex = i;\n\t\t\t\t\t\t\t\tclosestDistanceOtherTriIndex = i2;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// stop traversal if we find a point that's under the given threshold\n\t\t\t\t\t\t\tif ( dist < minThreshold ) {\n\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t}\n\n\t);\n\n\tExtendedTrianglePool.releasePrimitive( triangle );\n\tExtendedTrianglePool.releasePrimitive( triangle2 );\n\n\tif ( closestDistance === Infinity ) {\n\n\t\treturn null;\n\n\t}\n\n\tif ( ! target1.point ) {\n\n\t\ttarget1.point = tempTargetDest1.clone();\n\n\t} else {\n\n\t\ttarget1.point.copy( tempTargetDest1 );\n\n\t}\n\n\ttarget1.distance = closestDistance,\n\ttarget1.faceIndex = closestDistanceTriIndex;\n\n\tif ( target2 ) {\n\n\t\tif ( ! target2.point ) target2.point = tempTargetDest2.clone();\n\t\telse target2.point.copy( tempTargetDest2 );\n\t\ttarget2.point.applyMatrix4( tempMatrix );\n\t\ttempTargetDest1.applyMatrix4( tempMatrix );\n\t\ttarget2.distance = tempTargetDest1.sub( target2.point ).length();\n\t\ttarget2.faceIndex = closestDistanceOtherTriIndex;\n\n\t}\n\n\treturn target1;\n\n}\n\nexport { closestPointToGeometry };\n","import { IS_LEAFNODE_FLAG } from '../Constants.js';\n\n/****************************************************/\n/* This file is generated from \"refit.template.js\". */\n/****************************************************/\n\nfunction refit_indirect( bvh, nodeIndices = null ) {\n\n\tif ( nodeIndices && Array.isArray( nodeIndices ) ) {\n\n\t\tnodeIndices = new Set( nodeIndices );\n\n\t}\n\n\tconst geometry = bvh.geometry;\n\tconst indexArr = geometry.index ? geometry.index.array : null;\n\tconst posAttr = geometry.attributes.position;\n\n\tlet buffer, uint32Array, uint16Array, float32Array;\n\tlet byteOffset = 0;\n\tconst roots = bvh._roots;\n\tfor ( let i = 0, l = roots.length; i < l; i ++ ) {\n\n\t\tbuffer = roots[ i ];\n\t\tuint32Array = new Uint32Array( buffer );\n\t\tuint16Array = new Uint16Array( buffer );\n\t\tfloat32Array = new Float32Array( buffer );\n\n\t\t_traverse( 0, byteOffset );\n\t\tbyteOffset += buffer.byteLength;\n\n\t}\n\n\tfunction _traverse( node32Index, byteOffset, force = false ) {\n\n\t\tconst node16Index = node32Index * 2;\n\t\tconst isLeaf = uint16Array[ node16Index + 15 ] === IS_LEAFNODE_FLAG;\n\t\tif ( isLeaf ) {\n\n\t\t\tconst offset = uint32Array[ node32Index + 6 ];\n\t\t\tconst count = uint16Array[ node16Index + 14 ];\n\n\t\t\tlet minx = Infinity;\n\t\t\tlet miny = Infinity;\n\t\t\tlet minz = Infinity;\n\t\t\tlet maxx = - Infinity;\n\t\t\tlet maxy = - Infinity;\n\t\t\tlet maxz = - Infinity;\n\n\t\t\tfor ( let i = offset, l = offset + count; i < l; i ++ ) {\n\n\t\t\t\tconst t = 3 * bvh.resolveTriangleIndex( i );\n\t\t\t\tfor ( let j = 0; j < 3; j ++ ) {\n\n\t\t\t\t\tlet index = t + j;\n\t\t\t\t\tindex = indexArr ? indexArr[ index ] : index;\n\n\t\t\t\t\tconst x = posAttr.getX( index );\n\t\t\t\t\tconst y = posAttr.getY( index );\n\t\t\t\t\tconst z = posAttr.getZ( index );\n\n\t\t\t\t\tif ( x < minx ) minx = x;\n\t\t\t\t\tif ( x > maxx ) maxx = x;\n\n\t\t\t\t\tif ( y < miny ) miny = y;\n\t\t\t\t\tif ( y > maxy ) maxy = y;\n\n\t\t\t\t\tif ( z < minz ) minz = z;\n\t\t\t\t\tif ( z > maxz ) maxz = z;\n\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t\tif (\n\t\t\t\tfloat32Array[ node32Index + 0 ] !== minx ||\n\t\t\t\tfloat32Array[ node32Index + 1 ] !== miny ||\n\t\t\t\tfloat32Array[ node32Index + 2 ] !== minz ||\n\n\t\t\t\tfloat32Array[ node32Index + 3 ] !== maxx ||\n\t\t\t\tfloat32Array[ node32Index + 4 ] !== maxy ||\n\t\t\t\tfloat32Array[ node32Index + 5 ] !== maxz\n\t\t\t) {\n\n\t\t\t\tfloat32Array[ node32Index + 0 ] = minx;\n\t\t\t\tfloat32Array[ node32Index + 1 ] = miny;\n\t\t\t\tfloat32Array[ node32Index + 2 ] = minz;\n\n\t\t\t\tfloat32Array[ node32Index + 3 ] = maxx;\n\t\t\t\tfloat32Array[ node32Index + 4 ] = maxy;\n\t\t\t\tfloat32Array[ node32Index + 5 ] = maxz;\n\n\t\t\t\treturn true;\n\n\t\t\t} else {\n\n\t\t\t\treturn false;\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst left = node32Index + 8;\n\t\t\tconst right = uint32Array[ node32Index + 6 ];\n\n\t\t\t// the identifying node indices provided by the shapecast function include offsets of all\n\t\t\t// root buffers to guarantee they're unique between roots so offset left and right indices here.\n\t\t\tconst offsetLeft = left + byteOffset;\n\t\t\tconst offsetRight = right + byteOffset;\n\t\t\tlet forceChildren = force;\n\t\t\tlet includesLeft = false;\n\t\t\tlet includesRight = false;\n\n\t\t\tif ( nodeIndices ) {\n\n\t\t\t\t// if we see that neither the left or right child are included in the set that need to be updated\n\t\t\t\t// then we assume that all children need to be updated.\n\t\t\t\tif ( ! forceChildren ) {\n\n\t\t\t\t\tincludesLeft = nodeIndices.has( offsetLeft );\n\t\t\t\t\tincludesRight = nodeIndices.has( offsetRight );\n\t\t\t\t\tforceChildren = ! includesLeft && ! includesRight;\n\n\t\t\t\t}\n\n\t\t\t} else {\n\n\t\t\t\tincludesLeft = true;\n\t\t\t\tincludesRight = true;\n\n\t\t\t}\n\n\t\t\tconst traverseLeft = forceChildren || includesLeft;\n\t\t\tconst traverseRight = forceChildren || includesRight;\n\n\t\t\tlet leftChange = false;\n\t\t\tif ( traverseLeft ) {\n\n\t\t\t\tleftChange = _traverse( left, byteOffset, forceChildren );\n\n\t\t\t}\n\n\t\t\tlet rightChange = false;\n\t\t\tif ( traverseRight ) {\n\n\t\t\t\trightChange = _traverse( right, byteOffset, forceChildren );\n\n\t\t\t}\n\n\t\t\tconst didChange = leftChange || rightChange;\n\t\t\tif ( didChange ) {\n\n\t\t\t\tfor ( let i = 0; i < 3; i ++ ) {\n\n\t\t\t\t\tconst lefti = left + i;\n\t\t\t\t\tconst righti = right + i;\n\t\t\t\t\tconst minLeftValue = float32Array[ lefti ];\n\t\t\t\t\tconst maxLeftValue = float32Array[ lefti + 3 ];\n\t\t\t\t\tconst minRightValue = float32Array[ righti ];\n\t\t\t\t\tconst maxRightValue = float32Array[ righti + 3 ];\n\n\t\t\t\t\tfloat32Array[ node32Index + i ] = minLeftValue < minRightValue ? minLeftValue : minRightValue;\n\t\t\t\t\tfloat32Array[ node32Index + i + 3 ] = maxLeftValue > maxRightValue ? maxLeftValue : maxRightValue;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\treturn didChange;\n\n\t\t}\n\n\t}\n\n}\n\nexport { refit_indirect };\n","import { intersectRay } from '../utils/intersectUtils.js';\nimport { IS_LEAF, OFFSET, COUNT, LEFT_NODE, RIGHT_NODE } from '../utils/nodeBufferUtils.js';\nimport { BufferStack } from '../utils/BufferStack.js';\nimport '../utils/iterationUtils.generated.js';\nimport { intersectTris_indirect } from '../utils/iterationUtils_indirect.generated.js';\n\n/******************************************************/\n/* This file is generated from \"raycast.template.js\". */\n/******************************************************/\n\nfunction raycast_indirect( bvh, root, side, ray, intersects, near, far ) {\n\n\tBufferStack.setBuffer( bvh._roots[ root ] );\n\t_raycast( 0, bvh, side, ray, intersects, near, far );\n\tBufferStack.clearBuffer();\n\n}\n\nfunction _raycast( nodeIndex32, bvh, side, ray, intersects, near, far ) {\n\n\tconst { float32Array, uint16Array, uint32Array } = BufferStack;\n\tconst nodeIndex16 = nodeIndex32 * 2;\n\tconst isLeaf = IS_LEAF( nodeIndex16, uint16Array );\n\tif ( isLeaf ) {\n\n\t\tconst offset = OFFSET( nodeIndex32, uint32Array );\n\t\tconst count = COUNT( nodeIndex16, uint16Array );\n\n\t\tintersectTris_indirect( bvh, side, ray, offset, count, intersects, near, far );\n\n\n\t} else {\n\n\t\tconst leftIndex = LEFT_NODE( nodeIndex32 );\n\t\tif ( intersectRay( leftIndex, float32Array, ray, near, far ) ) {\n\n\t\t\t_raycast( leftIndex, bvh, side, ray, intersects, near, far );\n\n\t\t}\n\n\t\tconst rightIndex = RIGHT_NODE( nodeIndex32, uint32Array );\n\t\tif ( intersectRay( rightIndex, float32Array, ray, near, far ) ) {\n\n\t\t\t_raycast( rightIndex, bvh, side, ray, intersects, near, far );\n\n\t\t}\n\n\t}\n\n}\n\nexport { raycast_indirect };\n","import { IS_LEAF, OFFSET, COUNT, SPLIT_AXIS, LEFT_NODE, RIGHT_NODE } from '../utils/nodeBufferUtils.js';\nimport { BufferStack } from '../utils/BufferStack.js';\nimport { intersectRay } from '../utils/intersectUtils.js';\nimport '../utils/iterationUtils.generated.js';\nimport { intersectClosestTri_indirect } from '../utils/iterationUtils_indirect.generated.js';\n\n/***********************************************************/\n/* This file is generated from \"raycastFirst.template.js\". */\n/***********************************************************/\n\nconst _xyzFields = [ 'x', 'y', 'z' ];\n\nfunction raycastFirst_indirect( bvh, root, side, ray, near, far ) {\n\n\tBufferStack.setBuffer( bvh._roots[ root ] );\n\tconst result = _raycastFirst( 0, bvh, side, ray, near, far );\n\tBufferStack.clearBuffer();\n\n\treturn result;\n\n}\n\nfunction _raycastFirst( nodeIndex32, bvh, side, ray, near, far ) {\n\n\tconst { float32Array, uint16Array, uint32Array } = BufferStack;\n\tlet nodeIndex16 = nodeIndex32 * 2;\n\n\tconst isLeaf = IS_LEAF( nodeIndex16, uint16Array );\n\tif ( isLeaf ) {\n\n\t\tconst offset = OFFSET( nodeIndex32, uint32Array );\n\t\tconst count = COUNT( nodeIndex16, uint16Array );\n\n\t\treturn intersectClosestTri_indirect( bvh, side, ray, offset, count, near, far );\n\n\n\t} else {\n\n\t\t// consider the position of the split plane with respect to the oncoming ray; whichever direction\n\t\t// the ray is coming from, look for an intersection among that side of the tree first\n\t\tconst splitAxis = SPLIT_AXIS( nodeIndex32, uint32Array );\n\t\tconst xyzAxis = _xyzFields[ splitAxis ];\n\t\tconst rayDir = ray.direction[ xyzAxis ];\n\t\tconst leftToRight = rayDir >= 0;\n\n\t\t// c1 is the child to check first\n\t\tlet c1, c2;\n\t\tif ( leftToRight ) {\n\n\t\t\tc1 = LEFT_NODE( nodeIndex32 );\n\t\t\tc2 = RIGHT_NODE( nodeIndex32, uint32Array );\n\n\t\t} else {\n\n\t\t\tc1 = RIGHT_NODE( nodeIndex32, uint32Array );\n\t\t\tc2 = LEFT_NODE( nodeIndex32 );\n\n\t\t}\n\n\t\tconst c1Intersection = intersectRay( c1, float32Array, ray, near, far );\n\t\tconst c1Result = c1Intersection ? _raycastFirst( c1, bvh, side, ray, near, far ) : null;\n\n\t\t// if we got an intersection in the first node and it's closer than the second node's bounding\n\t\t// box, we don't need to consider the second node because it couldn't possibly be a better result\n\t\tif ( c1Result ) {\n\n\t\t\t// check if the point is within the second bounds\n\t\t\t// \"point\" is in the local frame of the bvh\n\t\t\tconst point = c1Result.point[ xyzAxis ];\n\t\t\tconst isOutside = leftToRight ?\n\t\t\t\tpoint <= float32Array[ c2 + splitAxis ] : // min bounding data\n\t\t\t\tpoint >= float32Array[ c2 + splitAxis + 3 ]; // max bounding data\n\n\t\t\tif ( isOutside ) {\n\n\t\t\t\treturn c1Result;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// either there was no intersection in the first node, or there could still be a closer\n\t\t// intersection in the second, so check the second node and then take the better of the two\n\t\tconst c2Intersection = intersectRay( c2, float32Array, ray, near, far );\n\t\tconst c2Result = c2Intersection ? _raycastFirst( c2, bvh, side, ray, near, far ) : null;\n\n\t\tif ( c1Result && c2Result ) {\n\n\t\t\treturn c1Result.distance <= c2Result.distance ? c1Result : c2Result;\n\n\t\t} else {\n\n\t\t\treturn c1Result || c2Result || null;\n\n\t\t}\n\n\t}\n\n}\n\nexport { raycastFirst_indirect };\n","import { Box3, Matrix4 } from 'three';\nimport { OrientedBox } from '../../math/OrientedBox.js';\nimport { ExtendedTriangle } from '../../math/ExtendedTriangle.js';\nimport { setTriangle } from '../../utils/TriangleUtilities.js';\nimport { arrayToBox } from '../../utils/ArrayBoxUtilities.js';\nimport { IS_LEAF, OFFSET, COUNT, BOUNDING_DATA_INDEX } from '../utils/nodeBufferUtils.js';\nimport { BufferStack } from '../utils/BufferStack.js';\n\n/*****************************************************************/\n/* This file is generated from \"intersectsGeometry.template.js\". */\n/*****************************************************************/\n/* eslint-disable indent */\n\nconst boundingBox = /* @__PURE__ */ new Box3();\nconst triangle = /* @__PURE__ */ new ExtendedTriangle();\nconst triangle2 = /* @__PURE__ */ new ExtendedTriangle();\nconst invertedMat = /* @__PURE__ */ new Matrix4();\n\nconst obb = /* @__PURE__ */ new OrientedBox();\nconst obb2 = /* @__PURE__ */ new OrientedBox();\n\nfunction intersectsGeometry_indirect( bvh, root, otherGeometry, geometryToBvh ) {\n\n\tBufferStack.setBuffer( bvh._roots[ root ] );\n\tconst result = _intersectsGeometry( 0, bvh, otherGeometry, geometryToBvh );\n\tBufferStack.clearBuffer();\n\n\treturn result;\n\n}\n\nfunction _intersectsGeometry( nodeIndex32, bvh, otherGeometry, geometryToBvh, cachedObb = null ) {\n\n\tconst { float32Array, uint16Array, uint32Array } = BufferStack;\n\tlet nodeIndex16 = nodeIndex32 * 2;\n\n\tif ( cachedObb === null ) {\n\n\t\tif ( ! otherGeometry.boundingBox ) {\n\n\t\t\totherGeometry.computeBoundingBox();\n\n\t\t}\n\n\t\tobb.set( otherGeometry.boundingBox.min, otherGeometry.boundingBox.max, geometryToBvh );\n\t\tcachedObb = obb;\n\n\t}\n\n\tconst isLeaf = IS_LEAF( nodeIndex16, uint16Array );\n\tif ( isLeaf ) {\n\n\t\tconst thisGeometry = bvh.geometry;\n\t\tconst thisIndex = thisGeometry.index;\n\t\tconst thisPos = thisGeometry.attributes.position;\n\n\t\tconst index = otherGeometry.index;\n\t\tconst pos = otherGeometry.attributes.position;\n\n\t\tconst offset = OFFSET( nodeIndex32, uint32Array );\n\t\tconst count = COUNT( nodeIndex16, uint16Array );\n\n\t\t// get the inverse of the geometry matrix so we can transform our triangles into the\n\t\t// geometry space we're trying to test. We assume there are fewer triangles being checked\n\t\t// here.\n\t\tinvertedMat.copy( geometryToBvh ).invert();\n\n\t\tif ( otherGeometry.boundsTree ) {\n\n\t\t\t// if there's a bounds tree\n\t\t\tarrayToBox( BOUNDING_DATA_INDEX( nodeIndex32 ), float32Array, obb2 );\n\t\t\tobb2.matrix.copy( invertedMat );\n\t\t\tobb2.needsUpdate = true;\n\n\t\t\t// TODO: use a triangle iteration function here\n\t\t\tconst res = otherGeometry.boundsTree.shapecast( {\n\n\t\t\t\tintersectsBounds: box => obb2.intersectsBox( box ),\n\n\t\t\t\tintersectsTriangle: tri => {\n\n\t\t\t\t\ttri.a.applyMatrix4( geometryToBvh );\n\t\t\t\t\ttri.b.applyMatrix4( geometryToBvh );\n\t\t\t\t\ttri.c.applyMatrix4( geometryToBvh );\n\t\t\t\t\ttri.needsUpdate = true;\n\n\t\t\t\t\tfor ( let i = offset, l = count + offset; i < l; i ++ ) {\n\n\t\t\t\t\t\t// this triangle needs to be transformed into the current BVH coordinate frame\n\t\t\t\t\t\tsetTriangle( triangle2, 3 * bvh.resolveTriangleIndex( i ), thisIndex, thisPos );\n\t\t\t\t\t\ttriangle2.needsUpdate = true;\n\t\t\t\t\t\tif ( tri.intersectsTriangle( triangle2 ) ) {\n\n\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\n\t\t\t\t\treturn false;\n\n\t\t\t\t}\n\n\t\t\t} );\n\n\t\t\treturn res;\n\n\t\t} else {\n\n\t\t\t// if we're just dealing with raw geometry\n\t\t\tfor ( let i = offset, l = count + offset; i < l; i ++ ) {\n\n\t\t\t\t// this triangle needs to be transformed into the current BVH coordinate frame\n\t\t\t\tconst ti = bvh.resolveTriangleIndex( i );\n\t\t\t\tsetTriangle( triangle, 3 * ti, thisIndex, thisPos );\n\n\n\t\t\t\ttriangle.a.applyMatrix4( invertedMat );\n\t\t\t\ttriangle.b.applyMatrix4( invertedMat );\n\t\t\t\ttriangle.c.applyMatrix4( invertedMat );\n\t\t\t\ttriangle.needsUpdate = true;\n\n\t\t\t\tfor ( let i2 = 0, l2 = index.count; i2 < l2; i2 += 3 ) {\n\n\t\t\t\t\tsetTriangle( triangle2, i2, index, pos );\n\t\t\t\t\ttriangle2.needsUpdate = true;\n\n\t\t\t\t\tif ( triangle.intersectsTriangle( triangle2 ) ) {\n\n\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t}\n\n\n\t\t}\n\n\t} else {\n\n\t\tconst left = nodeIndex32 + 8;\n\t\tconst right = uint32Array[ nodeIndex32 + 6 ];\n\n\t\tarrayToBox( BOUNDING_DATA_INDEX( left ), float32Array, boundingBox );\n\t\tconst leftIntersection =\n\t\t\tcachedObb.intersectsBox( boundingBox ) &&\n\t\t\t_intersectsGeometry( left, bvh, otherGeometry, geometryToBvh, cachedObb );\n\n\t\tif ( leftIntersection ) return true;\n\n\t\tarrayToBox( BOUNDING_DATA_INDEX( right ), float32Array, boundingBox );\n\t\tconst rightIntersection =\n\t\t\tcachedObb.intersectsBox( boundingBox ) &&\n\t\t\t_intersectsGeometry( right, bvh, otherGeometry, geometryToBvh, cachedObb );\n\n\t\tif ( rightIntersection ) return true;\n\n\t\treturn false;\n\n\t}\n\n}\n\nexport { intersectsGeometry_indirect };\n","import { Matrix4, Vector3 } from 'three';\nimport { OrientedBox } from '../../math/OrientedBox.js';\nimport { setTriangle } from '../../utils/TriangleUtilities.js';\nimport { getTriCount } from '../build/geometryUtils.js';\nimport { ExtendedTrianglePool } from '../../utils/ExtendedTrianglePool.js';\n\n/*********************************************************************/\n/* This file is generated from \"closestPointToGeometry.template.js\". */\n/*********************************************************************/\n\nconst tempMatrix = /* @__PURE__ */ new Matrix4();\nconst obb = /* @__PURE__ */ new OrientedBox();\nconst obb2 = /* @__PURE__ */ new OrientedBox();\nconst temp1 = /* @__PURE__ */ new Vector3();\nconst temp2 = /* @__PURE__ */ new Vector3();\nconst temp3 = /* @__PURE__ */ new Vector3();\nconst temp4 = /* @__PURE__ */ new Vector3();\n\nfunction closestPointToGeometry_indirect(\n\tbvh,\n\totherGeometry,\n\tgeometryToBvh,\n\ttarget1 = { },\n\ttarget2 = { },\n\tminThreshold = 0,\n\tmaxThreshold = Infinity,\n) {\n\n\tif ( ! otherGeometry.boundingBox ) {\n\n\t\totherGeometry.computeBoundingBox();\n\n\t}\n\n\tobb.set( otherGeometry.boundingBox.min, otherGeometry.boundingBox.max, geometryToBvh );\n\tobb.needsUpdate = true;\n\n\tconst geometry = bvh.geometry;\n\tconst pos = geometry.attributes.position;\n\tconst index = geometry.index;\n\tconst otherPos = otherGeometry.attributes.position;\n\tconst otherIndex = otherGeometry.index;\n\tconst triangle = ExtendedTrianglePool.getPrimitive();\n\tconst triangle2 = ExtendedTrianglePool.getPrimitive();\n\n\tlet tempTarget1 = temp1;\n\tlet tempTargetDest1 = temp2;\n\tlet tempTarget2 = null;\n\tlet tempTargetDest2 = null;\n\n\tif ( target2 ) {\n\n\t\ttempTarget2 = temp3;\n\t\ttempTargetDest2 = temp4;\n\n\t}\n\n\tlet closestDistance = Infinity;\n\tlet closestDistanceTriIndex = null;\n\tlet closestDistanceOtherTriIndex = null;\n\ttempMatrix.copy( geometryToBvh ).invert();\n\tobb2.matrix.copy( tempMatrix );\n\tbvh.shapecast(\n\t\t{\n\n\t\t\tboundsTraverseOrder: box => {\n\n\t\t\t\treturn obb.distanceToBox( box );\n\n\t\t\t},\n\n\t\t\tintersectsBounds: ( box, isLeaf, score ) => {\n\n\t\t\t\tif ( score < closestDistance && score < maxThreshold ) {\n\n\t\t\t\t\t// if we know the triangles of this bounds will be intersected next then\n\t\t\t\t\t// save the bounds to use during triangle checks.\n\t\t\t\t\tif ( isLeaf ) {\n\n\t\t\t\t\t\tobb2.min.copy( box.min );\n\t\t\t\t\t\tobb2.max.copy( box.max );\n\t\t\t\t\t\tobb2.needsUpdate = true;\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t},\n\n\t\t\tintersectsRange: ( offset, count ) => {\n\n\t\t\t\tif ( otherGeometry.boundsTree ) {\n\n\t\t\t\t\t// if the other geometry has a bvh then use the accelerated path where we use shapecast to find\n\t\t\t\t\t// the closest bounds in the other geometry to check.\n\t\t\t\t\tconst otherBvh = otherGeometry.boundsTree;\n\t\t\t\t\treturn otherBvh.shapecast( {\n\t\t\t\t\t\tboundsTraverseOrder: box => {\n\n\t\t\t\t\t\t\treturn obb2.distanceToBox( box );\n\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tintersectsBounds: ( box, isLeaf, score ) => {\n\n\t\t\t\t\t\t\treturn score < closestDistance && score < maxThreshold;\n\n\t\t\t\t\t\t},\n\n\t\t\t\t\t\tintersectsRange: ( otherOffset, otherCount ) => {\n\n\t\t\t\t\t\t\tfor ( let i2 = otherOffset, l2 = otherOffset + otherCount; i2 < l2; i2 ++ ) {\n\n\t\t\t\t\t\t\t\tconst ti2 = otherBvh.resolveTriangleIndex( i2 );\n\t\t\t\t\t\t\t\tsetTriangle( triangle2, 3 * ti2, otherIndex, otherPos );\n\n\t\t\t\t\t\t\t\ttriangle2.a.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\t\t\ttriangle2.b.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\t\t\ttriangle2.c.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\t\t\ttriangle2.needsUpdate = true;\n\n\t\t\t\t\t\t\t\tfor ( let i = offset, l = offset + count; i < l; i ++ ) {\n\n\t\t\t\t\t\t\t\t\tconst ti = bvh.resolveTriangleIndex( i );\n\t\t\t\t\t\t\t\t\tsetTriangle( triangle, 3 * ti, index, pos );\n\n\t\t\t\t\t\t\t\t\ttriangle.needsUpdate = true;\n\n\t\t\t\t\t\t\t\t\tconst dist = triangle.distanceToTriangle( triangle2, tempTarget1, tempTarget2 );\n\t\t\t\t\t\t\t\t\tif ( dist < closestDistance ) {\n\n\t\t\t\t\t\t\t\t\t\ttempTargetDest1.copy( tempTarget1 );\n\n\t\t\t\t\t\t\t\t\t\tif ( tempTargetDest2 ) {\n\n\t\t\t\t\t\t\t\t\t\t\ttempTargetDest2.copy( tempTarget2 );\n\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tclosestDistance = dist;\n\t\t\t\t\t\t\t\t\t\tclosestDistanceTriIndex = i;\n\t\t\t\t\t\t\t\t\t\tclosestDistanceOtherTriIndex = i2;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// stop traversal if we find a point that's under the given threshold\n\t\t\t\t\t\t\t\t\tif ( dist < minThreshold ) {\n\n\t\t\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t},\n\t\t\t\t\t} );\n\n\t\t\t\t} else {\n\n\t\t\t\t\t// If no bounds tree then we'll just check every triangle.\n\t\t\t\t\tconst triCount = getTriCount( otherGeometry );\n\t\t\t\t\tfor ( let i2 = 0, l2 = triCount; i2 < l2; i2 ++ ) {\n\n\t\t\t\t\t\tsetTriangle( triangle2, 3 * i2, otherIndex, otherPos );\n\t\t\t\t\t\ttriangle2.a.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\ttriangle2.b.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\ttriangle2.c.applyMatrix4( geometryToBvh );\n\t\t\t\t\t\ttriangle2.needsUpdate = true;\n\n\t\t\t\t\t\tfor ( let i = offset, l = offset + count; i < l; i ++ ) {\n\n\t\t\t\t\t\t\tconst ti = bvh.resolveTriangleIndex( i );\n\t\t\t\t\t\t\tsetTriangle( triangle, 3 * ti, index, pos );\n\n\t\t\t\t\t\t\ttriangle.needsUpdate = true;\n\n\t\t\t\t\t\t\tconst dist = triangle.distanceToTriangle( triangle2, tempTarget1, tempTarget2 );\n\t\t\t\t\t\t\tif ( dist < closestDistance ) {\n\n\t\t\t\t\t\t\t\ttempTargetDest1.copy( tempTarget1 );\n\n\t\t\t\t\t\t\t\tif ( tempTargetDest2 ) {\n\n\t\t\t\t\t\t\t\t\ttempTargetDest2.copy( tempTarget2 );\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\tclosestDistance = dist;\n\t\t\t\t\t\t\t\tclosestDistanceTriIndex = i;\n\t\t\t\t\t\t\t\tclosestDistanceOtherTriIndex = i2;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// stop traversal if we find a point that's under the given threshold\n\t\t\t\t\t\t\tif ( dist < minThreshold ) {\n\n\t\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t},\n\n\t\t}\n\n\t);\n\n\tExtendedTrianglePool.releasePrimitive( triangle );\n\tExtendedTrianglePool.releasePrimitive( triangle2 );\n\n\tif ( closestDistance === Infinity ) {\n\n\t\treturn null;\n\n\t}\n\n\tif ( ! target1.point ) {\n\n\t\ttarget1.point = tempTargetDest1.clone();\n\n\t} else {\n\n\t\ttarget1.point.copy( tempTargetDest1 );\n\n\t}\n\n\ttarget1.distance = closestDistance,\n\ttarget1.faceIndex = closestDistanceTriIndex;\n\n\tif ( target2 ) {\n\n\t\tif ( ! target2.point ) target2.point = tempTargetDest2.clone();\n\t\telse target2.point.copy( tempTargetDest2 );\n\t\ttarget2.point.applyMatrix4( tempMatrix );\n\t\ttempTargetDest1.applyMatrix4( tempMatrix );\n\t\ttarget2.distance = tempTargetDest1.sub( target2.point ).length();\n\t\ttarget2.faceIndex = closestDistanceOtherTriIndex;\n\n\t}\n\n\treturn target1;\n\n}\n\nexport { closestPointToGeometry_indirect };\n","export function isSharedArrayBufferSupported() {\n\n\treturn typeof SharedArrayBuffer !== 'undefined';\n\n}\n\nexport function convertToBufferType( array, BufferConstructor ) {\n\n\tif ( array === null ) {\n\n\t\treturn array;\n\n\t} else if ( array.buffer ) {\n\n\t\tconst buffer = array.buffer;\n\t\tif ( buffer.constructor === BufferConstructor ) {\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tconst ArrayConstructor = array.constructor;\n\t\tconst result = new ArrayConstructor( new BufferConstructor( buffer.byteLength ) );\n\t\tresult.set( array );\n\t\treturn result;\n\n\t} else {\n\n\t\tif ( array.constructor === BufferConstructor ) {\n\n\t\t\treturn array;\n\n\t\t}\n\n\t\tconst result = new BufferConstructor( array.byteLength );\n\t\tnew Uint8Array( result ).set( new Uint8Array( array ) );\n\t\treturn result;\n\n\t}\n\n}\n","import { Box3, Matrix4 } from 'three';\nimport { BufferStack } from '../utils/BufferStack.js';\nimport { BOUNDING_DATA_INDEX, COUNT, IS_LEAF, LEFT_NODE, OFFSET, RIGHT_NODE } from '../utils/nodeBufferUtils.js';\nimport { arrayToBox } from '../../utils/ArrayBoxUtilities.js';\nimport { PrimitivePool } from '../../utils/PrimitivePool.js';\n\nconst _bufferStack1 = new BufferStack.constructor();\nconst _bufferStack2 = new BufferStack.constructor();\nconst _boxPool = new PrimitivePool( () => new Box3() );\nconst _leftBox1 = new Box3();\nconst _rightBox1 = new Box3();\n\nconst _leftBox2 = new Box3();\nconst _rightBox2 = new Box3();\n\nlet _active = false;\n\nexport function bvhcast( bvh, otherBvh, matrixToLocal, intersectsRanges ) {\n\n\tif ( _active ) {\n\n\t\tthrow new Error( 'MeshBVH: Recursive calls to bvhcast not supported.' );\n\n\t}\n\n\t_active = true;\n\n\tconst roots = bvh._roots;\n\tconst otherRoots = otherBvh._roots;\n\tlet result;\n\tlet offset1 = 0;\n\tlet offset2 = 0;\n\tconst invMat = new Matrix4().copy( matrixToLocal ).invert();\n\n\t// iterate over the first set of roots\n\tfor ( let i = 0, il = roots.length; i < il; i ++ ) {\n\n\t\t_bufferStack1.setBuffer( roots[ i ] );\n\t\toffset2 = 0;\n\n\t\t// prep the initial root box\n\t\tconst localBox = _boxPool.getPrimitive();\n\t\tarrayToBox( BOUNDING_DATA_INDEX( 0 ), _bufferStack1.float32Array, localBox );\n\t\tlocalBox.applyMatrix4( invMat );\n\n\t\t// iterate over the second set of roots\n\t\tfor ( let j = 0, jl = otherRoots.length; j < jl; j ++ ) {\n\n\t\t\t_bufferStack2.setBuffer( otherRoots[ j ] );\n\n\t\t\tresult = _traverse(\n\t\t\t\t0, 0, matrixToLocal, invMat, intersectsRanges,\n\t\t\t\toffset1, offset2, 0, 0,\n\t\t\t\tlocalBox,\n\t\t\t);\n\n\t\t\t_bufferStack2.clearBuffer();\n\t\t\toffset2 += otherRoots[ j ].length;\n\n\t\t\tif ( result ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// release stack info\n\t\t_boxPool.releasePrimitive( localBox );\n\t\t_bufferStack1.clearBuffer();\n\t\toffset1 += roots[ i ].length;\n\n\t\tif ( result ) {\n\n\t\t\tbreak;\n\n\t\t}\n\n\t}\n\n\t_active = false;\n\treturn result;\n\n}\n\nfunction _traverse(\n\tnode1Index32,\n\tnode2Index32,\n\tmatrix2to1,\n\tmatrix1to2,\n\tintersectsRangesFunc,\n\n\t// offsets for ids\n\tnode1IndexByteOffset = 0,\n\tnode2IndexByteOffset = 0,\n\n\t// tree depth\n\tdepth1 = 0,\n\tdepth2 = 0,\n\n\tcurrBox = null,\n\treversed = false,\n\n) {\n\n\t// get the buffer stacks associated with the current indices\n\tlet bufferStack1, bufferStack2;\n\tif ( reversed ) {\n\n\t\tbufferStack1 = _bufferStack2;\n\t\tbufferStack2 = _bufferStack1;\n\n\t} else {\n\n\t\tbufferStack1 = _bufferStack1;\n\t\tbufferStack2 = _bufferStack2;\n\n\t}\n\n\t// get the local instances of the typed buffers\n\tconst\n\t\tfloat32Array1 = bufferStack1.float32Array,\n\t\tuint32Array1 = bufferStack1.uint32Array,\n\t\tuint16Array1 = bufferStack1.uint16Array,\n\t\tfloat32Array2 = bufferStack2.float32Array,\n\t\tuint32Array2 = bufferStack2.uint32Array,\n\t\tuint16Array2 = bufferStack2.uint16Array;\n\n\tconst node1Index16 = node1Index32 * 2;\n\tconst node2Index16 = node2Index32 * 2;\n\tconst isLeaf1 = IS_LEAF( node1Index16, uint16Array1 );\n\tconst isLeaf2 = IS_LEAF( node2Index16, uint16Array2 );\n\tlet result = false;\n\tif ( isLeaf2 && isLeaf1 ) {\n\n\t\t// if both bounds are leaf nodes then fire the callback if the boxes intersect\n\t\tif ( reversed ) {\n\n\t\t\tresult = intersectsRangesFunc(\n\t\t\t\tOFFSET( node2Index32, uint32Array2 ), COUNT( node2Index32 * 2, uint16Array2 ),\n\t\t\t\tOFFSET( node1Index32, uint32Array1 ), COUNT( node1Index32 * 2, uint16Array1 ),\n\t\t\t\tdepth2, node2IndexByteOffset + node2Index32,\n\t\t\t\tdepth1, node1IndexByteOffset + node1Index32,\n\t\t\t);\n\n\t\t} else {\n\n\t\t\tresult = intersectsRangesFunc(\n\t\t\t\tOFFSET( node1Index32, uint32Array1 ), COUNT( node1Index32 * 2, uint16Array1 ),\n\t\t\t\tOFFSET( node2Index32, uint32Array2 ), COUNT( node2Index32 * 2, uint16Array2 ),\n\t\t\t\tdepth1, node1IndexByteOffset + node1Index32,\n\t\t\t\tdepth2, node2IndexByteOffset + node2Index32,\n\t\t\t);\n\n\t\t}\n\n\t} else if ( isLeaf2 ) {\n\n\t\t// SWAP\n\t\t// If we've traversed to the leaf node on the other bvh then we need to swap over\n\t\t// to traverse down the first one\n\n\t\t// get the new box to use\n\t\tconst newBox = _boxPool.getPrimitive();\n\t\tarrayToBox( BOUNDING_DATA_INDEX( node2Index32 ), float32Array2, newBox );\n\t\tnewBox.applyMatrix4( matrix2to1 );\n\n\t\t// get the child bounds to check before traversal\n\t\tconst cl1 = LEFT_NODE( node1Index32 );\n\t\tconst cr1 = RIGHT_NODE( node1Index32, uint32Array1 );\n\t\tarrayToBox( BOUNDING_DATA_INDEX( cl1 ), float32Array1, _leftBox1 );\n\t\tarrayToBox( BOUNDING_DATA_INDEX( cr1 ), float32Array1, _rightBox1 );\n\n\t\t// precompute the intersections otherwise the global boxes will be modified during traversal\n\t\tconst intersectCl1 = newBox.intersectsBox( _leftBox1 );\n\t\tconst intersectCr1 = newBox.intersectsBox( _rightBox1 );\n\t\tresult = (\n\t\t\tintersectCl1 && _traverse(\n\t\t\t\tnode2Index32, cl1, matrix1to2, matrix2to1, intersectsRangesFunc,\n\t\t\t\tnode2IndexByteOffset, node1IndexByteOffset, depth2, depth1 + 1,\n\t\t\t\tnewBox, ! reversed,\n\t\t\t)\n\t\t) || (\n\t\t\tintersectCr1 && _traverse(\n\t\t\t\tnode2Index32, cr1, matrix1to2, matrix2to1, intersectsRangesFunc,\n\t\t\t\tnode2IndexByteOffset, node1IndexByteOffset, depth2, depth1 + 1,\n\t\t\t\tnewBox, ! reversed,\n\t\t\t)\n\t\t);\n\n\t\t_boxPool.releasePrimitive( newBox );\n\n\t} else {\n\n\t\t// if neither are leaves then we should swap if one of the children does not\n\t\t// intersect with the current bounds\n\n\t\t// get the child bounds to check\n\t\tconst cl2 = LEFT_NODE( node2Index32 );\n\t\tconst cr2 = RIGHT_NODE( node2Index32, uint32Array2 );\n\t\tarrayToBox( BOUNDING_DATA_INDEX( cl2 ), float32Array2, _leftBox2 );\n\t\tarrayToBox( BOUNDING_DATA_INDEX( cr2 ), float32Array2, _rightBox2 );\n\n\t\tconst leftIntersects = currBox.intersectsBox( _leftBox2 );\n\t\tconst rightIntersects = currBox.intersectsBox( _rightBox2 );\n\t\tif ( leftIntersects && rightIntersects ) {\n\n\t\t\t// continue to traverse both children if they both intersect\n\t\t\tresult = _traverse(\n\t\t\t\tnode1Index32, cl2, matrix2to1, matrix1to2, intersectsRangesFunc,\n\t\t\t\tnode1IndexByteOffset, node2IndexByteOffset, depth1, depth2 + 1,\n\t\t\t\tcurrBox, reversed,\n\t\t\t) || _traverse(\n\t\t\t\tnode1Index32, cr2, matrix2to1, matrix1to2, intersectsRangesFunc,\n\t\t\t\tnode1IndexByteOffset, node2IndexByteOffset, depth1, depth2 + 1,\n\t\t\t\tcurrBox, reversed,\n\t\t\t);\n\n\t\t} else if ( leftIntersects ) {\n\n\t\t\tif ( isLeaf1 ) {\n\n\t\t\t\t// if the current box is a leaf then just continue\n\t\t\t\tresult = _traverse(\n\t\t\t\t\tnode1Index32, cl2, matrix2to1, matrix1to2, intersectsRangesFunc,\n\t\t\t\t\tnode1IndexByteOffset, node2IndexByteOffset, depth1, depth2 + 1,\n\t\t\t\t\tcurrBox, reversed,\n\t\t\t\t);\n\n\t\t\t} else {\n\n\t\t\t\t// SWAP\n\t\t\t\t// if only one box intersects then we have to swap to the other bvh to continue\n\t\t\t\tconst newBox = _boxPool.getPrimitive();\n\t\t\t\tnewBox.copy( _leftBox2 ).applyMatrix4( matrix2to1 );\n\n\t\t\t\tconst cl1 = LEFT_NODE( node1Index32 );\n\t\t\t\tconst cr1 = RIGHT_NODE( node1Index32, uint32Array1 );\n\t\t\t\tarrayToBox( BOUNDING_DATA_INDEX( cl1 ), float32Array1, _leftBox1 );\n\t\t\t\tarrayToBox( BOUNDING_DATA_INDEX( cr1 ), float32Array1, _rightBox1 );\n\n\t\t\t\t// precompute the intersections otherwise the global boxes will be modified during traversal\n\t\t\t\tconst intersectCl1 = newBox.intersectsBox( _leftBox1 );\n\t\t\t\tconst intersectCr1 = newBox.intersectsBox( _rightBox1 );\n\t\t\t\tresult = (\n\t\t\t\t\tintersectCl1 && _traverse(\n\t\t\t\t\t\tcl2, cl1, matrix1to2, matrix2to1, intersectsRangesFunc,\n\t\t\t\t\t\tnode2IndexByteOffset, node1IndexByteOffset, depth2, depth1 + 1,\n\t\t\t\t\t\tnewBox, ! reversed,\n\t\t\t\t\t)\n\t\t\t\t) || (\n\t\t\t\t\tintersectCr1 && _traverse(\n\t\t\t\t\t\tcl2, cr1, matrix1to2, matrix2to1, intersectsRangesFunc,\n\t\t\t\t\t\tnode2IndexByteOffset, node1IndexByteOffset, depth2, depth1 + 1,\n\t\t\t\t\t\tnewBox, ! reversed,\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t\t_boxPool.releasePrimitive( newBox );\n\n\t\t\t}\n\n\t\t} else if ( rightIntersects ) {\n\n\t\t\tif ( isLeaf1 ) {\n\n\t\t\t\t// if the current box is a leaf then just continue\n\t\t\t\tresult = _traverse(\n\t\t\t\t\tnode1Index32, cr2, matrix2to1, matrix1to2, intersectsRangesFunc,\n\t\t\t\t\tnode1IndexByteOffset, node2IndexByteOffset, depth1, depth2 + 1,\n\t\t\t\t\tcurrBox, reversed,\n\t\t\t\t);\n\n\t\t\t} else {\n\n\t\t\t\t// SWAP\n\t\t\t\t// if only one box intersects then we have to swap to the other bvh to continue\n\t\t\t\tconst newBox = _boxPool.getPrimitive();\n\t\t\t\tnewBox.copy( _rightBox2 ).applyMatrix4( matrix2to1 );\n\n\t\t\t\tconst cl1 = LEFT_NODE( node1Index32 );\n\t\t\t\tconst cr1 = RIGHT_NODE( node1Index32, uint32Array1 );\n\t\t\t\tarrayToBox( BOUNDING_DATA_INDEX( cl1 ), float32Array1, _leftBox1 );\n\t\t\t\tarrayToBox( BOUNDING_DATA_INDEX( cr1 ), float32Array1, _rightBox1 );\n\n\t\t\t\t// precompute the intersections otherwise the global boxes will be modified during traversal\n\t\t\t\tconst intersectCl1 = newBox.intersectsBox( _leftBox1 );\n\t\t\t\tconst intersectCr1 = newBox.intersectsBox( _rightBox1 );\n\t\t\t\tresult = (\n\t\t\t\t\tintersectCl1 && _traverse(\n\t\t\t\t\t\tcr2, cl1, matrix1to2, matrix2to1, intersectsRangesFunc,\n\t\t\t\t\t\tnode2IndexByteOffset, node1IndexByteOffset, depth2, depth1 + 1,\n\t\t\t\t\t\tnewBox, ! reversed,\n\t\t\t\t\t)\n\t\t\t\t) || (\n\t\t\t\t\tintersectCr1 && _traverse(\n\t\t\t\t\t\tcr2, cr1, matrix1to2, matrix2to1, intersectsRangesFunc,\n\t\t\t\t\t\tnode2IndexByteOffset, node1IndexByteOffset, depth2, depth1 + 1,\n\t\t\t\t\t\tnewBox, ! reversed,\n\t\t\t\t\t)\n\t\t\t\t);\n\n\t\t\t\t_boxPool.releasePrimitive( newBox );\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\treturn result;\n\n}\n\n","import { BufferAttribute, Box3, FrontSide } from 'three';\nimport { CENTER, BYTES_PER_NODE, IS_LEAFNODE_FLAG, SKIP_GENERATION } from './Constants.js';\nimport { buildPackedTree } from './build/buildTree.js';\nimport { OrientedBox } from '../math/OrientedBox.js';\nimport { arrayToBox } from '../utils/ArrayBoxUtilities.js';\nimport { ExtendedTrianglePool } from '../utils/ExtendedTrianglePool.js';\nimport { shapecast } from './cast/shapecast.js';\nimport { closestPointToPoint } from './cast/closestPointToPoint.js';\n\nimport { iterateOverTriangles } from './utils/iterationUtils.generated.js';\nimport { refit } from './cast/refit.generated.js';\nimport { raycast } from './cast/raycast.generated.js';\nimport { raycastFirst } from './cast/raycastFirst.generated.js';\nimport { intersectsGeometry } from './cast/intersectsGeometry.generated.js';\nimport { closestPointToGeometry } from './cast/closestPointToGeometry.generated.js';\n\nimport { iterateOverTriangles_indirect } from './utils/iterationUtils_indirect.generated.js';\nimport { refit_indirect } from './cast/refit_indirect.generated.js';\nimport { raycast_indirect } from './cast/raycast_indirect.generated.js';\nimport { raycastFirst_indirect } from './cast/raycastFirst_indirect.generated.js';\nimport { intersectsGeometry_indirect } from './cast/intersectsGeometry_indirect.generated.js';\nimport { closestPointToGeometry_indirect } from './cast/closestPointToGeometry_indirect.generated.js';\nimport { isSharedArrayBufferSupported } from '../utils/BufferUtils.js';\nimport { setTriangle } from '../utils/TriangleUtilities.js';\nimport { bvhcast } from './cast/bvhcast.js';\n\nconst obb = /* @__PURE__ */ new OrientedBox();\nconst tempBox = /* @__PURE__ */ new Box3();\nexport const DEFAULT_OPTIONS = {\n\tstrategy: CENTER,\n\tmaxDepth: 40,\n\tmaxLeafTris: 10,\n\tuseSharedArrayBuffer: false,\n\tsetBoundingBox: true,\n\tonProgress: null,\n\tindirect: false,\n\tverbose: true,\n\trange: null\n};\n\nexport class MeshBVH {\n\n\tstatic serialize( bvh, options = {} ) {\n\n\t\toptions = {\n\t\t\tcloneBuffers: true,\n\t\t\t...options,\n\t\t};\n\n\t\tconst geometry = bvh.geometry;\n\t\tconst rootData = bvh._roots;\n\t\tconst indirectBuffer = bvh._indirectBuffer;\n\t\tconst indexAttribute = geometry.getIndex();\n\t\tlet result;\n\t\tif ( options.cloneBuffers ) {\n\n\t\t\tresult = {\n\t\t\t\troots: rootData.map( root => root.slice() ),\n\t\t\t\tindex: indexAttribute ? indexAttribute.array.slice() : null,\n\t\t\t\tindirectBuffer: indirectBuffer ? indirectBuffer.slice() : null,\n\t\t\t};\n\n\t\t} else {\n\n\t\t\tresult = {\n\t\t\t\troots: rootData,\n\t\t\t\tindex: indexAttribute ? indexAttribute.array : null,\n\t\t\t\tindirectBuffer: indirectBuffer,\n\t\t\t};\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tstatic deserialize( data, geometry, options = {} ) {\n\n\t\toptions = {\n\t\t\tsetIndex: true,\n\t\t\tindirect: Boolean( data.indirectBuffer ),\n\t\t\t...options,\n\t\t};\n\n\t\tconst { index, roots, indirectBuffer } = data;\n\t\tconst bvh = new MeshBVH( geometry, { ...options, [ SKIP_GENERATION ]: true } );\n\t\tbvh._roots = roots;\n\t\tbvh._indirectBuffer = indirectBuffer || null;\n\n\t\tif ( options.setIndex ) {\n\n\t\t\tconst indexAttribute = geometry.getIndex();\n\t\t\tif ( indexAttribute === null ) {\n\n\t\t\t\tconst newIndex = new BufferAttribute( data.index, 1, false );\n\t\t\t\tgeometry.setIndex( newIndex );\n\n\t\t\t} else if ( indexAttribute.array !== index ) {\n\n\t\t\t\tindexAttribute.array.set( index );\n\t\t\t\tindexAttribute.needsUpdate = true;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn bvh;\n\n\t}\n\n\tget indirect() {\n\n\t\treturn ! ! this._indirectBuffer;\n\n\t}\n\n\tconstructor( geometry, options = {} ) {\n\n\t\tif ( ! geometry.isBufferGeometry ) {\n\n\t\t\tthrow new Error( 'MeshBVH: Only BufferGeometries are supported.' );\n\n\t\t} else if ( geometry.index && geometry.index.isInterleavedBufferAttribute ) {\n\n\t\t\tthrow new Error( 'MeshBVH: InterleavedBufferAttribute is not supported for the index attribute.' );\n\n\t\t}\n\n\t\t// default options\n\t\toptions = Object.assign( {\n\n\t\t\t...DEFAULT_OPTIONS,\n\n\t\t\t// undocumented options\n\n\t\t\t// Whether to skip generating the tree. Used for deserialization.\n\t\t\t[ SKIP_GENERATION ]: false,\n\n\t\t}, options );\n\n\t\tif ( options.useSharedArrayBuffer && ! isSharedArrayBufferSupported() ) {\n\n\t\t\tthrow new Error( 'MeshBVH: SharedArrayBuffer is not available.' );\n\n\t\t}\n\n\t\t// retain references to the geometry so we can use them it without having to\n\t\t// take a geometry reference in every function.\n\t\tthis.geometry = geometry;\n\t\tthis._roots = null;\n\t\tthis._indirectBuffer = null;\n\t\tif ( ! options[ SKIP_GENERATION ] ) {\n\n\t\t\tbuildPackedTree( this, options );\n\n\t\t\tif ( ! geometry.boundingBox && options.setBoundingBox ) {\n\n\t\t\t\tgeometry.boundingBox = this.getBoundingBox( new Box3() );\n\n\t\t\t}\n\n\t\t}\n\n\t\tthis.resolveTriangleIndex = options.indirect ? i => this._indirectBuffer[ i ] : i => i;\n\n\t}\n\n\trefit( nodeIndices = null ) {\n\n\t\tconst refitFunc = this.indirect ? refit_indirect : refit;\n\t\treturn refitFunc( this, nodeIndices );\n\n\t}\n\n\ttraverse( callback, rootIndex = 0 ) {\n\n\t\tconst buffer = this._roots[ rootIndex ];\n\t\tconst uint32Array = new Uint32Array( buffer );\n\t\tconst uint16Array = new Uint16Array( buffer );\n\t\t_traverse( 0 );\n\n\t\tfunction _traverse( node32Index, depth = 0 ) {\n\n\t\t\tconst node16Index = node32Index * 2;\n\t\t\tconst isLeaf = uint16Array[ node16Index + 15 ] === IS_LEAFNODE_FLAG;\n\t\t\tif ( isLeaf ) {\n\n\t\t\t\tconst offset = uint32Array[ node32Index + 6 ];\n\t\t\t\tconst count = uint16Array[ node16Index + 14 ];\n\t\t\t\tcallback( depth, isLeaf, new Float32Array( buffer, node32Index * 4, 6 ), offset, count );\n\n\t\t\t} else {\n\n\t\t\t\t// TODO: use node functions here\n\t\t\t\tconst left = node32Index + BYTES_PER_NODE / 4;\n\t\t\t\tconst right = uint32Array[ node32Index + 6 ];\n\t\t\t\tconst splitAxis = uint32Array[ node32Index + 7 ];\n\t\t\t\tconst stopTraversal = callback( depth, isLeaf, new Float32Array( buffer, node32Index * 4, 6 ), splitAxis );\n\n\t\t\t\tif ( ! stopTraversal ) {\n\n\t\t\t\t\t_traverse( left, depth + 1 );\n\t\t\t\t\t_traverse( right, depth + 1 );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t}\n\n\t/* Core Cast Functions */\n\traycast( ray, materialOrSide = FrontSide, near = 0, far = Infinity ) {\n\n\t\tconst roots = this._roots;\n\t\tconst geometry = this.geometry;\n\t\tconst intersects = [];\n\t\tconst isMaterial = materialOrSide.isMaterial;\n\t\tconst isArrayMaterial = Array.isArray( materialOrSide );\n\n\t\tconst groups = geometry.groups;\n\t\tconst side = isMaterial ? materialOrSide.side : materialOrSide;\n\t\tconst raycastFunc = this.indirect ? raycast_indirect : raycast;\n\t\tfor ( let i = 0, l = roots.length; i < l; i ++ ) {\n\n\t\t\tconst materialSide = isArrayMaterial ? materialOrSide[ groups[ i ].materialIndex ].side : side;\n\t\t\tconst startCount = intersects.length;\n\n\t\t\traycastFunc( this, i, materialSide, ray, intersects, near, far );\n\n\t\t\tif ( isArrayMaterial ) {\n\n\t\t\t\tconst materialIndex = groups[ i ].materialIndex;\n\t\t\t\tfor ( let j = startCount, jl = intersects.length; j < jl; j ++ ) {\n\n\t\t\t\t\tintersects[ j ].face.materialIndex = materialIndex;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn intersects;\n\n\t}\n\n\traycastFirst( ray, materialOrSide = FrontSide, near = 0, far = Infinity ) {\n\n\t\tconst roots = this._roots;\n\t\tconst geometry = this.geometry;\n\t\tconst isMaterial = materialOrSide.isMaterial;\n\t\tconst isArrayMaterial = Array.isArray( materialOrSide );\n\n\t\tlet closestResult = null;\n\n\t\tconst groups = geometry.groups;\n\t\tconst side = isMaterial ? materialOrSide.side : materialOrSide;\n\t\tconst raycastFirstFunc = this.indirect ? raycastFirst_indirect : raycastFirst;\n\t\tfor ( let i = 0, l = roots.length; i < l; i ++ ) {\n\n\t\t\tconst materialSide = isArrayMaterial ? materialOrSide[ groups[ i ].materialIndex ].side : side;\n\t\t\tconst result = raycastFirstFunc( this, i, materialSide, ray, near, far );\n\t\t\tif ( result != null && ( closestResult == null || result.distance < closestResult.distance ) ) {\n\n\t\t\t\tclosestResult = result;\n\t\t\t\tif ( isArrayMaterial ) {\n\n\t\t\t\t\tresult.face.materialIndex = groups[ i ].materialIndex;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn closestResult;\n\n\t}\n\n\tintersectsGeometry( otherGeometry, geomToMesh ) {\n\n\t\tlet result = false;\n\t\tconst roots = this._roots;\n\t\tconst intersectsGeometryFunc = this.indirect ? intersectsGeometry_indirect : intersectsGeometry;\n\t\tfor ( let i = 0, l = roots.length; i < l; i ++ ) {\n\n\t\t\tresult = intersectsGeometryFunc( this, i, otherGeometry, geomToMesh );\n\n\t\t\tif ( result ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn result;\n\n\t}\n\n\tshapecast( callbacks ) {\n\n\t\tconst triangle = ExtendedTrianglePool.getPrimitive();\n\t\tconst iterateFunc = this.indirect ? iterateOverTriangles_indirect : iterateOverTriangles;\n\t\tlet {\n\t\t\tboundsTraverseOrder,\n\t\t\tintersectsBounds,\n\t\t\tintersectsRange,\n\t\t\tintersectsTriangle,\n\t\t} = callbacks;\n\n\t\t// wrap the intersectsRange function\n\t\tif ( intersectsRange && intersectsTriangle ) {\n\n\t\t\tconst originalIntersectsRange = intersectsRange;\n\t\t\tintersectsRange = ( offset, count, contained, depth, nodeIndex ) => {\n\n\t\t\t\tif ( ! originalIntersectsRange( offset, count, contained, depth, nodeIndex ) ) {\n\n\t\t\t\t\treturn iterateFunc( offset, count, this, intersectsTriangle, contained, depth, triangle );\n\n\t\t\t\t}\n\n\t\t\t\treturn true;\n\n\t\t\t};\n\n\t\t} else if ( ! intersectsRange ) {\n\n\t\t\tif ( intersectsTriangle ) {\n\n\t\t\t\tintersectsRange = ( offset, count, contained, depth ) => {\n\n\t\t\t\t\treturn iterateFunc( offset, count, this, intersectsTriangle, contained, depth, triangle );\n\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tintersectsRange = ( offset, count, contained ) => {\n\n\t\t\t\t\treturn contained;\n\n\t\t\t\t};\n\n\t\t\t}\n\n\t\t}\n\n\t\t// run shapecast\n\t\tlet result = false;\n\t\tlet byteOffset = 0;\n\t\tconst roots = this._roots;\n\t\tfor ( let i = 0, l = roots.length; i < l; i ++ ) {\n\n\t\t\tconst root = roots[ i ];\n\t\t\tresult = shapecast( this, i, intersectsBounds, intersectsRange, boundsTraverseOrder, byteOffset );\n\n\t\t\tif ( result ) {\n\n\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t\tbyteOffset += root.byteLength;\n\n\t\t}\n\n\t\tExtendedTrianglePool.releasePrimitive( triangle );\n\n\t\treturn result;\n\n\t}\n\n\tbvhcast( otherBvh, matrixToLocal, callbacks ) {\n\n\t\tlet {\n\t\t\tintersectsRanges,\n\t\t\tintersectsTriangles,\n\t\t} = callbacks;\n\n\t\tconst triangle1 = ExtendedTrianglePool.getPrimitive();\n\t\tconst indexAttr1 = this.geometry.index;\n\t\tconst positionAttr1 = this.geometry.attributes.position;\n\t\tconst assignTriangle1 = this.indirect ?\n\t\t\ti1 => {\n\n\n\t\t\t\tconst ti = this.resolveTriangleIndex( i1 );\n\t\t\t\tsetTriangle( triangle1, ti * 3, indexAttr1, positionAttr1 );\n\n\t\t\t} :\n\t\t\ti1 => {\n\n\t\t\t\tsetTriangle( triangle1, i1 * 3, indexAttr1, positionAttr1 );\n\n\t\t\t};\n\n\t\tconst triangle2 = ExtendedTrianglePool.getPrimitive();\n\t\tconst indexAttr2 = otherBvh.geometry.index;\n\t\tconst positionAttr2 = otherBvh.geometry.attributes.position;\n\t\tconst assignTriangle2 = otherBvh.indirect ?\n\t\t\ti2 => {\n\n\t\t\t\tconst ti2 = otherBvh.resolveTriangleIndex( i2 );\n\t\t\t\tsetTriangle( triangle2, ti2 * 3, indexAttr2, positionAttr2 );\n\n\t\t\t} :\n\t\t\ti2 => {\n\n\t\t\t\tsetTriangle( triangle2, i2 * 3, indexAttr2, positionAttr2 );\n\n\t\t\t};\n\n\t\t// generate triangle callback if needed\n\t\tif ( intersectsTriangles ) {\n\n\t\t\tconst iterateOverDoubleTriangles = ( offset1, count1, offset2, count2, depth1, index1, depth2, index2 ) => {\n\n\t\t\t\tfor ( let i2 = offset2, l2 = offset2 + count2; i2 < l2; i2 ++ ) {\n\n\t\t\t\t\tassignTriangle2( i2 );\n\n\t\t\t\t\ttriangle2.a.applyMatrix4( matrixToLocal );\n\t\t\t\t\ttriangle2.b.applyMatrix4( matrixToLocal );\n\t\t\t\t\ttriangle2.c.applyMatrix4( matrixToLocal );\n\t\t\t\t\ttriangle2.needsUpdate = true;\n\n\t\t\t\t\tfor ( let i1 = offset1, l1 = offset1 + count1; i1 < l1; i1 ++ ) {\n\n\t\t\t\t\t\tassignTriangle1( i1 );\n\n\t\t\t\t\t\ttriangle1.needsUpdate = true;\n\n\t\t\t\t\t\tif ( intersectsTriangles( triangle1, triangle2, i1, i2, depth1, index1, depth2, index2 ) ) {\n\n\t\t\t\t\t\t\treturn true;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\n\t\t\t};\n\n\t\t\tif ( intersectsRanges ) {\n\n\t\t\t\tconst originalIntersectsRanges = intersectsRanges;\n\t\t\t\tintersectsRanges = function ( offset1, count1, offset2, count2, depth1, index1, depth2, index2 ) {\n\n\t\t\t\t\tif ( ! originalIntersectsRanges( offset1, count1, offset2, count2, depth1, index1, depth2, index2 ) ) {\n\n\t\t\t\t\t\treturn iterateOverDoubleTriangles( offset1, count1, offset2, count2, depth1, index1, depth2, index2 );\n\n\t\t\t\t\t}\n\n\t\t\t\t\treturn true;\n\n\t\t\t\t};\n\n\t\t\t} else {\n\n\t\t\t\tintersectsRanges = iterateOverDoubleTriangles;\n\n\t\t\t}\n\n\t\t}\n\n\t\treturn bvhcast( this, otherBvh, matrixToLocal, intersectsRanges );\n\n\t}\n\n\n\t/* Derived Cast Functions */\n\tintersectsBox( box, boxToMesh ) {\n\n\t\tobb.set( box.min, box.max, boxToMesh );\n\t\tobb.needsUpdate = true;\n\n\t\treturn this.shapecast(\n\t\t\t{\n\t\t\t\tintersectsBounds: box => obb.intersectsBox( box ),\n\t\t\t\tintersectsTriangle: tri => obb.intersectsTriangle( tri )\n\t\t\t}\n\t\t);\n\n\t}\n\n\tintersectsSphere( sphere ) {\n\n\t\treturn this.shapecast(\n\t\t\t{\n\t\t\t\tintersectsBounds: box => sphere.intersectsBox( box ),\n\t\t\t\tintersectsTriangle: tri => tri.intersectsSphere( sphere )\n\t\t\t}\n\t\t);\n\n\t}\n\n\tclosestPointToGeometry( otherGeometry, geometryToBvh, target1 = { }, target2 = { }, minThreshold = 0, maxThreshold = Infinity ) {\n\n\t\tconst closestPointToGeometryFunc = this.indirect ? closestPointToGeometry_indirect : closestPointToGeometry;\n\t\treturn closestPointToGeometryFunc(\n\t\t\tthis,\n\t\t\totherGeometry,\n\t\t\tgeometryToBvh,\n\t\t\ttarget1,\n\t\t\ttarget2,\n\t\t\tminThreshold,\n\t\t\tmaxThreshold,\n\t\t);\n\n\t}\n\n\tclosestPointToPoint( point, target = { }, minThreshold = 0, maxThreshold = Infinity ) {\n\n\t\treturn closestPointToPoint(\n\t\t\tthis,\n\t\t\tpoint,\n\t\t\ttarget,\n\t\t\tminThreshold,\n\t\t\tmaxThreshold,\n\t\t);\n\n\t}\n\n\tgetBoundingBox( target ) {\n\n\t\ttarget.makeEmpty();\n\n\t\tconst roots = this._roots;\n\t\troots.forEach( buffer => {\n\n\t\t\tarrayToBox( 0, new Float32Array( buffer ), tempBox );\n\t\t\ttarget.union( tempBox );\n\n\t\t} );\n\n\t\treturn target;\n\n\t}\n\n}\n","// converts the given BVH raycast intersection to align with the three.js raycast\n// structure (include object, world space distance and point).\nexport function convertRaycastIntersect( hit, object, raycaster ) {\n\n\tif ( hit === null ) {\n\n\t\treturn null;\n\n\t}\n\n\thit.point.applyMatrix4( object.matrixWorld );\n\thit.distance = hit.point.distanceTo( raycaster.ray.origin );\n\thit.object = object;\n\n\treturn hit;\n\n}\n","import { Ray, Matrix4, Mesh, Vector3, Sphere, BatchedMesh, REVISION } from 'three';\nimport { convertRaycastIntersect } from './GeometryRayIntersectUtilities.js';\nimport { MeshBVH } from '../core/MeshBVH.js';\n\nconst IS_REVISION_166 = parseInt( REVISION ) >= 166;\nconst ray = /* @__PURE__ */ new Ray();\nconst direction = /* @__PURE__ */ new Vector3();\nconst tmpInverseMatrix = /* @__PURE__ */ new Matrix4();\nconst origMeshRaycastFunc = Mesh.prototype.raycast;\nconst origBatchedRaycastFunc = BatchedMesh.prototype.raycast;\nconst _worldScale = /* @__PURE__ */ new Vector3();\nconst _mesh = /* @__PURE__ */ new Mesh();\nconst _batchIntersects = [];\n\nexport function acceleratedRaycast( raycaster, intersects ) {\n\n\tif ( this.isBatchedMesh ) {\n\n\t\tacceleratedBatchedMeshRaycast.call( this, raycaster, intersects );\n\n\t} else {\n\n\t\tacceleratedMeshRaycast.call( this, raycaster, intersects );\n\n\t}\n\n}\n\nfunction acceleratedBatchedMeshRaycast( raycaster, intersects ) {\n\n\tif ( this.boundsTrees ) {\n\n\t\t// TODO: remove use of geometry info, instance info when r170 is minimum version\n\t\tconst boundsTrees = this.boundsTrees;\n\t\tconst drawInfo = this._drawInfo || this._instanceInfo;\n\t\tconst drawRanges = this._drawRanges || this._geometryInfo;\n\t\tconst matrixWorld = this.matrixWorld;\n\n\t\t_mesh.material = this.material;\n\t\t_mesh.geometry = this.geometry;\n\n\t\tconst oldBoundsTree = _mesh.geometry.boundsTree;\n\t\tconst oldDrawRange = _mesh.geometry.drawRange;\n\n\t\tif ( _mesh.geometry.boundingSphere === null ) {\n\n\t\t\t_mesh.geometry.boundingSphere = new Sphere();\n\n\t\t}\n\n\t\t// TODO: provide new method to get instances count instead of 'drawInfo.length'\n\t\tfor ( let i = 0, l = drawInfo.length; i < l; i ++ ) {\n\n\t\t\tif ( ! this.getVisibleAt( i ) ) {\n\n\t\t\t\tcontinue;\n\n\t\t\t}\n\n\t\t\t// TODO: use getGeometryIndex\n\t\t\tconst geometryId = drawInfo[ i ].geometryIndex;\n\n\t\t\t_mesh.geometry.boundsTree = boundsTrees[ geometryId ];\n\n\t\t\tthis.getMatrixAt( i, _mesh.matrixWorld ).premultiply( matrixWorld );\n\n\t\t\tif ( ! _mesh.geometry.boundsTree ) {\n\n\t\t\t\tthis.getBoundingBoxAt( geometryId, _mesh.geometry.boundingBox );\n\t\t\t\tthis.getBoundingSphereAt( geometryId, _mesh.geometry.boundingSphere );\n\n\t\t\t\tconst drawRange = drawRanges[ geometryId ];\n\t\t\t\t_mesh.geometry.setDrawRange( drawRange.start, drawRange.count );\n\n\t\t\t}\n\n\t\t\t_mesh.raycast( raycaster, _batchIntersects );\n\n\t\t\tfor ( let j = 0, l = _batchIntersects.length; j < l; j ++ ) {\n\n\t\t\t\tconst intersect = _batchIntersects[ j ];\n\t\t\t\tintersect.object = this;\n\t\t\t\tintersect.batchId = i;\n\t\t\t\tintersects.push( intersect );\n\n\t\t\t}\n\n\t\t\t_batchIntersects.length = 0;\n\n\t\t}\n\n\t\t_mesh.geometry.boundsTree = oldBoundsTree;\n\t\t_mesh.geometry.drawRange = oldDrawRange;\n\t\t_mesh.material = null;\n\t\t_mesh.geometry = null;\n\n\t} else {\n\n\t\torigBatchedRaycastFunc.call( this, raycaster, intersects );\n\n\t}\n\n}\n\nfunction acceleratedMeshRaycast( raycaster, intersects ) {\n\n\tif ( this.geometry.boundsTree ) {\n\n\t\tif ( this.material === undefined ) return;\n\n\t\ttmpInverseMatrix.copy( this.matrixWorld ).invert();\n\t\tray.copy( raycaster.ray ).applyMatrix4( tmpInverseMatrix );\n\n\t\t_worldScale.setFromMatrixScale( this.matrixWorld );\n\t\tdirection.copy( ray.direction ).multiply( _worldScale );\n\n\t\tconst scaleFactor = direction.length();\n\t\tconst near = raycaster.near / scaleFactor;\n\t\tconst far = raycaster.far / scaleFactor;\n\n\t\tconst bvh = this.geometry.boundsTree;\n\t\tif ( raycaster.firstHitOnly === true ) {\n\n\t\t\tconst hit = convertRaycastIntersect( bvh.raycastFirst( ray, this.material, near, far ), this, raycaster );\n\t\t\tif ( hit ) {\n\n\t\t\t\tintersects.push( hit );\n\n\t\t\t}\n\n\t\t} else {\n\n\t\t\tconst hits = bvh.raycast( ray, this.material, near, far );\n\t\t\tfor ( let i = 0, l = hits.length; i < l; i ++ ) {\n\n\t\t\t\tconst hit = convertRaycastIntersect( hits[ i ], this, raycaster );\n\t\t\t\tif ( hit ) {\n\n\t\t\t\t\tintersects.push( hit );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t}\n\n\t} else {\n\n\t\torigMeshRaycastFunc.call( this, raycaster, intersects );\n\n\t}\n\n}\n\nexport function computeBoundsTree( options = {} ) {\n\n\tthis.boundsTree = new MeshBVH( this, options );\n\treturn this.boundsTree;\n\n}\n\nexport function disposeBoundsTree() {\n\n\tthis.boundsTree = null;\n\n}\n\nexport function computeBatchedBoundsTree( index = - 1, options = {} ) {\n\n\tif ( ! IS_REVISION_166 ) {\n\n\t\tthrow new Error( 'BatchedMesh: Three r166+ is required to compute bounds trees.' );\n\n\t}\n\n\tif ( options.indirect ) {\n\n\t\tconsole.warn( '\"Indirect\" is set to false because it is not supported for BatchedMesh.' );\n\n\t}\n\n\toptions = {\n\t\t...options,\n\t\tindirect: false,\n\t\trange: null\n\t};\n\n\tconst drawRanges = this._drawRanges || this._geometryInfo;\n\tconst geometryCount = this._geometryCount;\n\tif ( ! this.boundsTrees ) {\n\n\t\tthis.boundsTrees = new Array( geometryCount ).fill( null );\n\n\t}\n\n\tconst boundsTrees = this.boundsTrees;\n\twhile ( boundsTrees.length < geometryCount ) {\n\n\t\tboundsTrees.push( null );\n\n\t}\n\n\tif ( index < 0 ) {\n\n\t\tfor ( let i = 0; i < geometryCount; i ++ ) {\n\n\t\t\toptions.range = drawRanges[ i ];\n\t\t\tboundsTrees[ i ] = new MeshBVH( this.geometry, options );\n\n\t\t}\n\n\t\treturn boundsTrees;\n\n\t} else {\n\n\t\tif ( index < drawRanges.length ) {\n\n\t\t\toptions.range = drawRanges[ index ];\n\t\t\tboundsTrees[ index ] = new MeshBVH( this.geometry, options );\n\n\t\t}\n\n\t\treturn boundsTrees[ index ] || null;\n\n\t}\n\n}\n\nexport function disposeBatchedBoundsTree( index = - 1 ) {\n\n\tif ( index < 0 ) {\n\n\t\tthis.boundsTrees.fill( null );\n\n\t} else {\n\n\t\tif ( index < this.boundsTree.length ) {\n\n\t\t\tthis.boundsTrees[ index ] = null;\n\n\t\t}\n\n\t}\n\n}\n","import {\n\tDataTexture,\n\tFloatType,\n\tIntType,\n\tUnsignedIntType,\n\tByteType,\n\tUnsignedByteType,\n\tShortType,\n\tUnsignedShortType,\n\n\tRedFormat,\n\tRGFormat,\n\tRGBAFormat,\n\n\tRedIntegerFormat,\n\tRGIntegerFormat,\n\tRGBAIntegerFormat,\n\n\tNearestFilter,\n} from 'three';\n\nfunction countToStringFormat( count ) {\n\n\tswitch ( count ) {\n\n\t\tcase 1: return 'R';\n\t\tcase 2: return 'RG';\n\t\tcase 3: return 'RGBA';\n\t\tcase 4: return 'RGBA';\n\n\t}\n\n\tthrow new Error();\n\n}\n\nfunction countToFormat( count ) {\n\n\tswitch ( count ) {\n\n\t\tcase 1: return RedFormat;\n\t\tcase 2: return RGFormat;\n\t\tcase 3: return RGBAFormat;\n\t\tcase 4: return RGBAFormat;\n\n\t}\n\n}\n\nfunction countToIntFormat( count ) {\n\n\tswitch ( count ) {\n\n\t\tcase 1: return RedIntegerFormat;\n\t\tcase 2: return RGIntegerFormat;\n\t\tcase 3: return RGBAIntegerFormat;\n\t\tcase 4: return RGBAIntegerFormat;\n\n\t}\n\n}\n\nexport class VertexAttributeTexture extends DataTexture {\n\n\tconstructor() {\n\n\t\tsuper();\n\t\tthis.minFilter = NearestFilter;\n\t\tthis.magFilter = NearestFilter;\n\t\tthis.generateMipmaps = false;\n\t\tthis.overrideItemSize = null;\n\t\tthis._forcedType = null;\n\n\t}\n\n\tupdateFrom( attr ) {\n\n\t\tconst overrideItemSize = this.overrideItemSize;\n\t\tconst originalItemSize = attr.itemSize;\n\t\tconst originalCount = attr.count;\n\t\tif ( overrideItemSize !== null ) {\n\n\t\t\tif ( ( originalItemSize * originalCount ) % overrideItemSize !== 0.0 ) {\n\n\t\t\t\tthrow new Error( 'VertexAttributeTexture: overrideItemSize must divide evenly into buffer length.' );\n\n\t\t\t}\n\n\t\t\tattr.itemSize = overrideItemSize;\n\t\t\tattr.count = originalCount * originalItemSize / overrideItemSize;\n\n\t\t}\n\n\t\tconst itemSize = attr.itemSize;\n\t\tconst count = attr.count;\n\t\tconst normalized = attr.normalized;\n\t\tconst originalBufferCons = attr.array.constructor;\n\t\tconst byteCount = originalBufferCons.BYTES_PER_ELEMENT;\n\t\tlet targetType = this._forcedType;\n\t\tlet finalStride = itemSize;\n\n\t\t// derive the type of texture this should be in the shader\n\t\tif ( targetType === null ) {\n\n\t\t\tswitch ( originalBufferCons ) {\n\n\t\t\t\tcase Float32Array:\n\t\t\t\t\ttargetType = FloatType;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase Uint8Array:\n\t\t\t\tcase Uint16Array:\n\t\t\t\tcase Uint32Array:\n\t\t\t\t\ttargetType = UnsignedIntType;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase Int8Array:\n\t\t\t\tcase Int16Array:\n\t\t\t\tcase Int32Array:\n\t\t\t\t\ttargetType = IntType;\n\t\t\t\t\tbreak;\n\n\t\t\t}\n\n\t\t}\n\n\t\t// get the target format to store the texture as\n\t\tlet type, format, normalizeValue, targetBufferCons;\n\t\tlet internalFormat = countToStringFormat( itemSize );\n\t\tswitch ( targetType ) {\n\n\t\t\tcase FloatType:\n\t\t\t\tnormalizeValue = 1.0;\n\t\t\t\tformat = countToFormat( itemSize );\n\n\t\t\t\tif ( normalized && byteCount === 1 ) {\n\n\t\t\t\t\ttargetBufferCons = originalBufferCons;\n\t\t\t\t\tinternalFormat += '8';\n\n\t\t\t\t\tif ( originalBufferCons === Uint8Array ) {\n\n\t\t\t\t\t\ttype = UnsignedByteType;\n\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\ttype = ByteType;\n\t\t\t\t\t\tinternalFormat += '_SNORM';\n\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttargetBufferCons = Float32Array;\n\t\t\t\t\tinternalFormat += '32F';\n\t\t\t\t\ttype = FloatType;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase IntType:\n\t\t\t\tinternalFormat += byteCount * 8 + 'I';\n\t\t\t\tnormalizeValue = normalized ? Math.pow( 2, originalBufferCons.BYTES_PER_ELEMENT * 8 - 1 ) : 1.0;\n\t\t\t\tformat = countToIntFormat( itemSize );\n\n\t\t\t\tif ( byteCount === 1 ) {\n\n\t\t\t\t\ttargetBufferCons = Int8Array;\n\t\t\t\t\ttype = ByteType;\n\n\t\t\t\t} else if ( byteCount === 2 ) {\n\n\t\t\t\t\ttargetBufferCons = Int16Array;\n\t\t\t\t\ttype = ShortType;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttargetBufferCons = Int32Array;\n\t\t\t\t\ttype = IntType;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t\tcase UnsignedIntType:\n\t\t\t\tinternalFormat += byteCount * 8 + 'UI';\n\t\t\t\tnormalizeValue = normalized ? Math.pow( 2, originalBufferCons.BYTES_PER_ELEMENT * 8 - 1 ) : 1.0;\n\t\t\t\tformat = countToIntFormat( itemSize );\n\n\t\t\t\tif ( byteCount === 1 ) {\n\n\t\t\t\t\ttargetBufferCons = Uint8Array;\n\t\t\t\t\ttype = UnsignedByteType;\n\n\t\t\t\t} else if ( byteCount === 2 ) {\n\n\t\t\t\t\ttargetBufferCons = Uint16Array;\n\t\t\t\t\ttype = UnsignedShortType;\n\n\t\t\t\t} else {\n\n\t\t\t\t\ttargetBufferCons = Uint32Array;\n\t\t\t\t\ttype = UnsignedIntType;\n\n\t\t\t\t}\n\n\t\t\t\tbreak;\n\n\t\t}\n\n\t\t// there will be a mismatch between format length and final length because\n\t\t// RGBFormat and RGBIntegerFormat was removed\n\t\tif ( finalStride === 3 && ( format === RGBAFormat || format === RGBAIntegerFormat ) ) {\n\n\t\t\tfinalStride = 4;\n\n\t\t}\n\n\t\t// copy the data over to the new texture array\n\t\tconst dimension = Math.ceil( Math.sqrt( count ) ) || 1;\n\t\tconst length = finalStride * dimension * dimension;\n\t\tconst dataArray = new targetBufferCons( length );\n\n\t\t// temporarily set the normalized state to false since we have custom normalization logic\n\t\tconst originalNormalized = attr.normalized;\n\t\tattr.normalized = false;\n\t\tfor ( let i = 0; i < count; i ++ ) {\n\n\t\t\tconst ii = finalStride * i;\n\t\t\tdataArray[ ii ] = attr.getX( i ) / normalizeValue;\n\n\t\t\tif ( itemSize >= 2 ) {\n\n\t\t\t\tdataArray[ ii + 1 ] = attr.getY( i ) / normalizeValue;\n\n\t\t\t}\n\n\t\t\tif ( itemSize >= 3 ) {\n\n\t\t\t\tdataArray[ ii + 2 ] = attr.getZ( i ) / normalizeValue;\n\n\t\t\t\tif ( finalStride === 4 ) {\n\n\t\t\t\t\tdataArray[ ii + 3 ] = 1.0;\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tif ( itemSize >= 4 ) {\n\n\t\t\t\tdataArray[ ii + 3 ] = attr.getW( i ) / normalizeValue;\n\n\t\t\t}\n\n\t\t}\n\n\t\tattr.normalized = originalNormalized;\n\n\t\tthis.internalFormat = internalFormat;\n\t\tthis.format = format;\n\t\tthis.type = type;\n\t\tthis.image.width = dimension;\n\t\tthis.image.height = dimension;\n\t\tthis.image.data = dataArray;\n\t\tthis.needsUpdate = true;\n\t\tthis.dispose();\n\n\t\tattr.itemSize = originalItemSize;\n\t\tattr.count = originalCount;\n\n\t}\n\n}\n\nexport class UIntVertexAttributeTexture extends VertexAttributeTexture {\n\n\tconstructor() {\n\n\t\tsuper();\n\t\tthis._forcedType = UnsignedIntType;\n\n\t}\n\n}\n\nexport class IntVertexAttributeTexture extends VertexAttributeTexture {\n\n\tconstructor() {\n\n\t\tsuper();\n\t\tthis._forcedType = IntType;\n\n\t}\n\n\n}\n\nexport class FloatVertexAttributeTexture extends VertexAttributeTexture {\n\n\tconstructor() {\n\n\t\tsuper();\n\t\tthis._forcedType = FloatType;\n\n\t}\n\n}\n","import {\n\tDataTexture,\n\tFloatType,\n\tUnsignedIntType,\n\tRGBAFormat,\n\tRGIntegerFormat,\n\tNearestFilter,\n\tBufferAttribute,\n} from 'three';\nimport {\n\tFloatVertexAttributeTexture,\n\tUIntVertexAttributeTexture,\n} from './VertexAttributeTexture.js';\nimport { BYTES_PER_NODE } from '../core/Constants.js';\nimport {\n\tBOUNDING_DATA_INDEX,\n\tCOUNT,\n\tIS_LEAF,\n\tRIGHT_NODE,\n\tOFFSET,\n\tSPLIT_AXIS,\n} from '../core/utils/nodeBufferUtils.js';\nimport { getIndexArray, getVertexCount } from '../core/build/geometryUtils.js';\n\nexport class MeshBVHUniformStruct {\n\n\tconstructor() {\n\n\t\tthis.index = new UIntVertexAttributeTexture();\n\t\tthis.position = new FloatVertexAttributeTexture();\n\t\tthis.bvhBounds = new DataTexture();\n\t\tthis.bvhContents = new DataTexture();\n\t\tthis._cachedIndexAttr = null;\n\n\t\tthis.index.overrideItemSize = 3;\n\n\t}\n\n\tupdateFrom( bvh ) {\n\n\t\tconst { geometry } = bvh;\n\t\tbvhToTextures( bvh, this.bvhBounds, this.bvhContents );\n\n\t\tthis.position.updateFrom( geometry.attributes.position );\n\n\t\t// dereference a new index attribute if we're using indirect storage\n\t\tif ( bvh.indirect ) {\n\n\t\t\tconst indirectBuffer = bvh._indirectBuffer;\n\t\t\tif (\n\t\t\t\tthis._cachedIndexAttr === null ||\n\t\t\t\tthis._cachedIndexAttr.count !== indirectBuffer.length\n\t\t\t) {\n\n\t\t\t\tif ( geometry.index ) {\n\n\t\t\t\t\tthis._cachedIndexAttr = geometry.index.clone();\n\n\t\t\t\t} else {\n\n\t\t\t\t\tconst array = getIndexArray( getVertexCount( geometry ) );\n\t\t\t\t\tthis._cachedIndexAttr = new BufferAttribute( array, 1, false );\n\n\t\t\t\t}\n\n\t\t\t}\n\n\t\t\tdereferenceIndex( geometry, indirectBuffer, this._cachedIndexAttr );\n\t\t\tthis.index.updateFrom( this._cachedIndexAttr );\n\n\t\t} else {\n\n\t\t\tthis.index.updateFrom( geometry.index );\n\n\t\t}\n\n\t}\n\n\tdispose() {\n\n\t\tconst { index, position, bvhBounds, bvhContents } = this;\n\n\t\tif ( index ) index.dispose();\n\t\tif ( position ) position.dispose();\n\t\tif ( bvhBounds ) bvhBounds.dispose();\n\t\tif ( bvhContents ) bvhContents.dispose();\n\n\t}\n\n}\n\nfunction dereferenceIndex( geometry, indirectBuffer, target ) {\n\n\tconst unpacked = target.array;\n\tconst indexArray = geometry.index ? geometry.index.array : null;\n\tfor ( let i = 0, l = indirectBuffer.length; i < l; i ++ ) {\n\n\t\tconst i3 = 3 * i;\n\t\tconst v3 = 3 * indirectBuffer[ i ];\n\t\tfor ( let c = 0; c < 3; c ++ ) {\n\n\t\t\tunpacked[ i3 + c ] = indexArray ? indexArray[ v3 + c ] : v3 + c;\n\n\t\t}\n\n\t}\n\n}\n\nfunction bvhToTextures( bvh, boundsTexture, contentsTexture ) {\n\n\tconst roots = bvh._roots;\n\n\tif ( roots.length !== 1 ) {\n\n\t\tthrow new Error( 'MeshBVHUniformStruct: Multi-root BVHs not supported.' );\n\n\t}\n\n\tconst root = roots[ 0 ];\n\tconst uint16Array = new Uint16Array( root );\n\tconst uint32Array = new Uint32Array( root );\n\tconst float32Array = new Float32Array( root );\n\n\t// Both bounds need two elements per node so compute the height so it's twice as long as\n\t// the width so we can expand the row by two and still have a square texture\n\tconst nodeCount = root.byteLength / BYTES_PER_NODE;\n\tconst boundsDimension = 2 * Math.ceil( Math.sqrt( nodeCount / 2 ) );\n\tconst boundsArray = new Float32Array( 4 * boundsDimension * boundsDimension );\n\n\tconst contentsDimension = Math.ceil( Math.sqrt( nodeCount ) );\n\tconst contentsArray = new Uint32Array( 2 * contentsDimension * contentsDimension );\n\n\tfor ( let i = 0; i < nodeCount; i ++ ) {\n\n\t\tconst nodeIndex32 = i * BYTES_PER_NODE / 4;\n\t\tconst nodeIndex16 = nodeIndex32 * 2;\n\t\tconst boundsIndex = BOUNDING_DATA_INDEX( nodeIndex32 );\n\t\tfor ( let b = 0; b < 3; b ++ ) {\n\n\t\t\tboundsArray[ 8 * i + 0 + b ] = float32Array[ boundsIndex + 0 + b ];\n\t\t\tboundsArray[ 8 * i + 4 + b ] = float32Array[ boundsIndex + 3 + b ];\n\n\t\t}\n\n\t\tif ( IS_LEAF( nodeIndex16, uint16Array ) ) {\n\n\t\t\tconst count = COUNT( nodeIndex16, uint16Array );\n\t\t\tconst offset = OFFSET( nodeIndex32, uint32Array );\n\n\t\t\tconst mergedLeafCount = 0xffff0000 | count;\n\t\t\tcontentsArray[ i * 2 + 0 ] = mergedLeafCount;\n\t\t\tcontentsArray[ i * 2 + 1 ] = offset;\n\n\t\t} else {\n\n\t\t\tconst rightIndex = 4 * RIGHT_NODE( nodeIndex32, uint32Array ) / BYTES_PER_NODE;\n\t\t\tconst splitAxis = SPLIT_AXIS( nodeIndex32, uint32Array );\n\n\t\t\tcontentsArray[ i * 2 + 0 ] = splitAxis;\n\t\t\tcontentsArray[ i * 2 + 1 ] = rightIndex;\n\n\t\t}\n\n\t}\n\n\tboundsTexture.image.data = boundsArray;\n\tboundsTexture.image.width = boundsDimension;\n\tboundsTexture.image.height = boundsDimension;\n\tboundsTexture.format = RGBAFormat;\n\tboundsTexture.type = FloatType;\n\tboundsTexture.internalFormat = 'RGBA32F';\n\tboundsTexture.minFilter = NearestFilter;\n\tboundsTexture.magFilter = NearestFilter;\n\tboundsTexture.generateMipmaps = false;\n\tboundsTexture.needsUpdate = true;\n\tboundsTexture.dispose();\n\n\tcontentsTexture.image.data = contentsArray;\n\tcontentsTexture.image.width = contentsDimension;\n\tcontentsTexture.image.height = contentsDimension;\n\tcontentsTexture.format = RGIntegerFormat;\n\tcontentsTexture.type = UnsignedIntType;\n\tcontentsTexture.internalFormat = 'RG32UI';\n\tcontentsTexture.minFilter = NearestFilter;\n\tcontentsTexture.magFilter = NearestFilter;\n\tcontentsTexture.generateMipmaps = false;\n\tcontentsTexture.needsUpdate = true;\n\tcontentsTexture.dispose();\n\n}\n","export const common_functions = /* glsl */`\n\n// A stack of uint32 indices can can store the indices for\n// a perfectly balanced tree with a depth up to 31. Lower stack\n// depth gets higher performance.\n//\n// However not all trees are balanced. Best value to set this to\n// is the trees max depth.\n#ifndef BVH_STACK_DEPTH\n#define BVH_STACK_DEPTH 60\n#endif\n\n#ifndef INFINITY\n#define INFINITY 1e20\n#endif\n\n// Utilities\nuvec4 uTexelFetch1D( usampler2D tex, uint index ) {\n\n\tuint width = uint( textureSize( tex, 0 ).x );\n\tuvec2 uv;\n\tuv.x = index % width;\n\tuv.y = index / width;\n\n\treturn texelFetch( tex, ivec2( uv ), 0 );\n\n}\n\nivec4 iTexelFetch1D( isampler2D tex, uint index ) {\n\n\tuint width = uint( textureSize( tex, 0 ).x );\n\tuvec2 uv;\n\tuv.x = index % width;\n\tuv.y = index / width;\n\n\treturn texelFetch( tex, ivec2( uv ), 0 );\n\n}\n\nvec4 texelFetch1D( sampler2D tex, uint index ) {\n\n\tuint width = uint( textureSize( tex, 0 ).x );\n\tuvec2 uv;\n\tuv.x = index % width;\n\tuv.y = index / width;\n\n\treturn texelFetch( tex, ivec2( uv ), 0 );\n\n}\n\nvec4 textureSampleBarycoord( sampler2D tex, vec3 barycoord, uvec3 faceIndices ) {\n\n\treturn\n\t\tbarycoord.x * texelFetch1D( tex, faceIndices.x ) +\n\t\tbarycoord.y * texelFetch1D( tex, faceIndices.y ) +\n\t\tbarycoord.z * texelFetch1D( tex, faceIndices.z );\n\n}\n\nvoid ndcToCameraRay(\n\tvec2 coord, mat4 cameraWorld, mat4 invProjectionMatrix,\n\tout vec3 rayOrigin, out vec3 rayDirection\n) {\n\n\t// get camera look direction and near plane for camera clipping\n\tvec4 lookDirection = cameraWorld * vec4( 0.0, 0.0, - 1.0, 0.0 );\n\tvec4 nearVector = invProjectionMatrix * vec4( 0.0, 0.0, - 1.0, 1.0 );\n\tfloat near = abs( nearVector.z / nearVector.w );\n\n\t// get the camera direction and position from camera matrices\n\tvec4 origin = cameraWorld * vec4( 0.0, 0.0, 0.0, 1.0 );\n\tvec4 direction = invProjectionMatrix * vec4( coord, 0.5, 1.0 );\n\tdirection /= direction.w;\n\tdirection = cameraWorld * direction - origin;\n\n\t// slide the origin along the ray until it sits at the near clip plane position\n\torigin.xyz += direction.xyz * near / dot( direction, lookDirection );\n\n\trayOrigin = origin.xyz;\n\trayDirection = direction.xyz;\n\n}\n`;\n","export const bvh_ray_functions = /* glsl */`\n\n#ifndef TRI_INTERSECT_EPSILON\n#define TRI_INTERSECT_EPSILON 1e-5\n#endif\n\n// Raycasting\nbool intersectsBounds( vec3 rayOrigin, vec3 rayDirection, vec3 boundsMin, vec3 boundsMax, out float dist ) {\n\n\t// https://www.reddit.com/r/opengl/comments/8ntzz5/fast_glsl_ray_box_intersection/\n\t// https://tavianator.com/2011/ray_box.html\n\tvec3 invDir = 1.0 / rayDirection;\n\n\t// find intersection distances for each plane\n\tvec3 tMinPlane = invDir * ( boundsMin - rayOrigin );\n\tvec3 tMaxPlane = invDir * ( boundsMax - rayOrigin );\n\n\t// get the min and max distances from each intersection\n\tvec3 tMinHit = min( tMaxPlane, tMinPlane );\n\tvec3 tMaxHit = max( tMaxPlane, tMinPlane );\n\n\t// get the furthest hit distance\n\tvec2 t = max( tMinHit.xx, tMinHit.yz );\n\tfloat t0 = max( t.x, t.y );\n\n\t// get the minimum hit distance\n\tt = min( tMaxHit.xx, tMaxHit.yz );\n\tfloat t1 = min( t.x, t.y );\n\n\t// set distance to 0.0 if the ray starts inside the box\n\tdist = max( t0, 0.0 );\n\n\treturn t1 >= dist;\n\n}\n\nbool intersectsTriangle(\n\tvec3 rayOrigin, vec3 rayDirection, vec3 a, vec3 b, vec3 c,\n\tout vec3 barycoord, out vec3 norm, out float dist, out float side\n) {\n\n\t// https://stackoverflow.com/questions/42740765/intersection-between-line-and-triangle-in-3d\n\tvec3 edge1 = b - a;\n\tvec3 edge2 = c - a;\n\tnorm = cross( edge1, edge2 );\n\n\tfloat det = - dot( rayDirection, norm );\n\tfloat invdet = 1.0 / det;\n\n\tvec3 AO = rayOrigin - a;\n\tvec3 DAO = cross( AO, rayDirection );\n\n\tvec4 uvt;\n\tuvt.x = dot( edge2, DAO ) * invdet;\n\tuvt.y = - dot( edge1, DAO ) * invdet;\n\tuvt.z = dot( AO, norm ) * invdet;\n\tuvt.w = 1.0 - uvt.x - uvt.y;\n\n\t// set the hit information\n\tbarycoord = uvt.wxy; // arranged in A, B, C order\n\tdist = uvt.z;\n\tside = sign( det );\n\tnorm = side * normalize( norm );\n\n\t// add an epsilon to avoid misses between triangles\n\tuvt += vec4( TRI_INTERSECT_EPSILON );\n\n\treturn all( greaterThanEqual( uvt, vec4( 0.0 ) ) );\n\n}\n\nbool intersectTriangles(\n\t// geometry info and triangle range\n\tsampler2D positionAttr, usampler2D indexAttr, uint offset, uint count,\n\n\t// ray\n\tvec3 rayOrigin, vec3 rayDirection,\n\n\t// outputs\n\tinout float minDistance, inout uvec4 faceIndices, inout vec3 faceNormal, inout vec3 barycoord,\n\tinout float side, inout float dist\n) {\n\n\tbool found = false;\n\tvec3 localBarycoord, localNormal;\n\tfloat localDist, localSide;\n\tfor ( uint i = offset, l = offset + count; i < l; i ++ ) {\n\n\t\tuvec3 indices = uTexelFetch1D( indexAttr, i ).xyz;\n\t\tvec3 a = texelFetch1D( positionAttr, indices.x ).rgb;\n\t\tvec3 b = texelFetch1D( positionAttr, indices.y ).rgb;\n\t\tvec3 c = texelFetch1D( positionAttr, indices.z ).rgb;\n\n\t\tif (\n\t\t\tintersectsTriangle( rayOrigin, rayDirection, a, b, c, localBarycoord, localNormal, localDist, localSide )\n\t\t\t&& localDist < minDistance\n\t\t) {\n\n\t\t\tfound = true;\n\t\t\tminDistance = localDist;\n\n\t\t\tfaceIndices = uvec4( indices.xyz, i );\n\t\t\tfaceNormal = localNormal;\n\n\t\t\tside = localSide;\n\t\t\tbarycoord = localBarycoord;\n\t\t\tdist = localDist;\n\n\t\t}\n\n\t}\n\n\treturn found;\n\n}\n\nbool intersectsBVHNodeBounds( vec3 rayOrigin, vec3 rayDirection, sampler2D bvhBounds, uint currNodeIndex, out float dist ) {\n\n\tuint cni2 = currNodeIndex * 2u;\n\tvec3 boundsMin = texelFetch1D( bvhBounds, cni2 ).xyz;\n\tvec3 boundsMax = texelFetch1D( bvhBounds, cni2 + 1u ).xyz;\n\treturn intersectsBounds( rayOrigin, rayDirection, boundsMin, boundsMax, dist );\n\n}\n\n// use a macro to hide the fact that we need to expand the struct into separate fields\n#define\\\n\tbvhIntersectFirstHit(\\\n\t\tbvh,\\\n\t\trayOrigin, rayDirection, faceIndices, faceNormal, barycoord, side, dist\\\n\t)\\\n\t_bvhIntersectFirstHit(\\\n\t\tbvh.position, bvh.index, bvh.bvhBounds, bvh.bvhContents,\\\n\t\trayOrigin, rayDirection, faceIndices, faceNormal, barycoord, side, dist\\\n\t)\n\nbool _bvhIntersectFirstHit(\n\t// bvh info\n\tsampler2D bvh_position, usampler2D bvh_index, sampler2D bvh_bvhBounds, usampler2D bvh_bvhContents,\n\n\t// ray\n\tvec3 rayOrigin, vec3 rayDirection,\n\n\t// output variables split into separate variables due to output precision\n\tinout uvec4 faceIndices, inout vec3 faceNormal, inout vec3 barycoord,\n\tinout float side, inout float dist\n) {\n\n\t// stack needs to be twice as long as the deepest tree we expect because\n\t// we push both the left and right child onto the stack every traversal\n\tint ptr = 0;\n\tuint stack[ BVH_STACK_DEPTH ];\n\tstack[ 0 ] = 0u;\n\n\tfloat triangleDistance = INFINITY;\n\tbool found = false;\n\twhile ( ptr > - 1 && ptr < BVH_STACK_DEPTH ) {\n\n\t\tuint currNodeIndex = stack[ ptr ];\n\t\tptr --;\n\n\t\t// check if we intersect the current bounds\n\t\tfloat boundsHitDistance;\n\t\tif (\n\t\t\t! intersectsBVHNodeBounds( rayOrigin, rayDirection, bvh_bvhBounds, currNodeIndex, boundsHitDistance )\n\t\t\t|| boundsHitDistance > triangleDistance\n\t\t) {\n\n\t\t\tcontinue;\n\n\t\t}\n\n\t\tuvec2 boundsInfo = uTexelFetch1D( bvh_bvhContents, currNodeIndex ).xy;\n\t\tbool isLeaf = bool( boundsInfo.x & 0xffff0000u );\n\n\t\tif ( isLeaf ) {\n\n\t\t\tuint count = boundsInfo.x & 0x0000ffffu;\n\t\t\tuint offset = boundsInfo.y;\n\n\t\t\tfound = intersectTriangles(\n\t\t\t\tbvh_position, bvh_index, offset, count,\n\t\t\t\trayOrigin, rayDirection, triangleDistance,\n\t\t\t\tfaceIndices, faceNormal, barycoord, side, dist\n\t\t\t) || found;\n\n\t\t} else {\n\n\t\t\tuint leftIndex = currNodeIndex + 1u;\n\t\t\tuint splitAxis = boundsInfo.x & 0x0000ffffu;\n\t\t\tuint rightIndex = boundsInfo.y;\n\n\t\t\tbool leftToRight = rayDirection[ splitAxis ] >= 0.0;\n\t\t\tuint c1 = leftToRight ? leftIndex : rightIndex;\n\t\t\tuint c2 = leftToRight ? rightIndex : leftIndex;\n\n\t\t\t// set c2 in the stack so we traverse it later. We need to keep track of a pointer in\n\t\t\t// the stack while we traverse. The second pointer added is the one that will be\n\t\t\t// traversed first\n\t\t\tptr ++;\n\t\t\tstack[ ptr ] = c2;\n\n\t\t\tptr ++;\n\t\t\tstack[ ptr ] = c1;\n\n\t\t}\n\n\t}\n\n\treturn found;\n\n}\n`;\n","// Note that a struct cannot be used for the hit record including faceIndices, faceNormal, barycoord,\n// side, and dist because on some mobile GPUS (such as Adreno) numbers are afforded less precision specifically\n// when in a struct leading to inaccurate hit results. See KhronosGroup/WebGL#3351 for more details.\nexport const bvh_struct_definitions = /* glsl */`\nstruct BVH {\n\n\tusampler2D index;\n\tsampler2D position;\n\n\tsampler2D bvhBounds;\n\tusampler2D bvhContents;\n\n};\n`;\n","export { MeshBVH } from './core/MeshBVH.js';\nexport { MeshBVHHelper } from './objects/MeshBVHHelper.js';\nexport { CENTER, AVERAGE, SAH, NOT_INTERSECTED, INTERSECTED, CONTAINED } from './core/Constants.js';\nexport { getBVHExtremes, estimateMemoryInBytes, getJSONStructure, validateBounds } from './debug/Debug.js';\nexport * from './utils/ExtensionUtilities.js';\nexport { getTriangleHitPointInfo } from './utils/TriangleUtilities.js';\nexport * from './math/ExtendedTriangle.js';\nexport * from './math/OrientedBox.js';\nexport * from './gpu/MeshBVHUniformStruct.js';\nexport * from './gpu/VertexAttributeTexture.js';\nexport * from './utils/StaticGeometryGenerator.js';\nexport * as BVHShaderGLSL from './gpu/BVHShaderGLSL.js';\n\n// backwards compatibility\nimport * as BVHShaderGLSL from './gpu/BVHShaderGLSL.js';\nexport const shaderStructs = BVHShaderGLSL.bvh_struct_definitions;\nexport const shaderDistanceFunction = BVHShaderGLSL.bvh_distance_functions;\nexport const shaderIntersectFunction = `\n\t${ BVHShaderGLSL.common_functions }\n\t${ BVHShaderGLSL.bvh_ray_functions }\n`;\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useThree } from '@react-three/fiber';\nimport * as React from 'react';\nimport { Mesh } from 'three';\nimport { SAH, acceleratedRaycast, computeBoundsTree, disposeBoundsTree } from 'three-mesh-bvh';\n\nconst isMesh = child => child.isMesh;\n\n/**\n * @deprecated Use the Bvh component instead\n */\nfunction useBVH(mesh, options) {\n options = {\n strategy: SAH,\n verbose: false,\n setBoundingBox: true,\n maxDepth: 40,\n maxLeafTris: 10,\n indirect: false,\n ...options\n };\n React.useEffect(() => {\n if (mesh.current) {\n mesh.current.raycast = acceleratedRaycast;\n const geometry = mesh.current.geometry;\n geometry.computeBoundsTree = computeBoundsTree;\n geometry.disposeBoundsTree = disposeBoundsTree;\n geometry.computeBoundsTree(options);\n return () => {\n if (geometry.boundsTree) {\n geometry.disposeBoundsTree();\n }\n };\n }\n }, [mesh, JSON.stringify(options)]);\n}\nconst Bvh = /* @__PURE__ */React.forwardRef(({\n enabled = true,\n firstHitOnly = false,\n children,\n strategy = SAH,\n verbose = false,\n setBoundingBox = true,\n maxDepth = 40,\n maxLeafTris = 10,\n indirect = false,\n ...props\n}, fref) => {\n const ref = React.useRef(null);\n const raycaster = useThree(state => state.raycaster);\n React.useImperativeHandle(fref, () => ref.current, []);\n React.useEffect(() => {\n if (enabled) {\n const options = {\n strategy,\n verbose,\n setBoundingBox,\n maxDepth,\n maxLeafTris,\n indirect\n };\n const group = ref.current;\n // This can only safely work if the component is used once, but there is no alternative.\n // Hijacking the raycast method to do it for individual meshes is not an option as it would\n // cost too much memory ...\n raycaster.firstHitOnly = firstHitOnly;\n group.traverse(child => {\n // Only include meshes that do not yet have a boundsTree and whose raycast is standard issue\n if (isMesh(child) && !child.geometry.boundsTree && child.raycast === Mesh.prototype.raycast) {\n child.raycast = acceleratedRaycast;\n child.geometry.computeBoundsTree = computeBoundsTree;\n child.geometry.disposeBoundsTree = disposeBoundsTree;\n child.geometry.computeBoundsTree(options);\n }\n });\n return () => {\n delete raycaster.firstHitOnly;\n group.traverse(child => {\n if (isMesh(child) && child.geometry.boundsTree) {\n child.geometry.disposeBoundsTree();\n child.raycast = Mesh.prototype.raycast;\n }\n });\n };\n }\n }, []);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref\n }, props), children);\n});\n\nexport { Bvh, useBVH };\n","import * as React from 'react';\n\n/* eslint-disable react-hooks/rules-of-hooks */\nfunction useContextBridge(...contexts) {\n const cRef = React.useRef([]);\n cRef.current = contexts.map(context => React.useContext(context));\n return React.useMemo(() => ({\n children\n }) => contexts.reduceRight((acc, Context, i) => /*#__PURE__*/React.createElement(Context.Provider, {\n value: cRef.current[i],\n children: acc\n }), children\n /*\n * done this way in reference to:\n * https://github.com/DefinitelyTyped/DefinitelyTyped/issues/44572#issuecomment-625878049\n * https://github.com/microsoft/TypeScript/issues/14729\n */), []);\n}\n\nexport { useContextBridge };\n","import * as React from 'react';\nimport { Object3D, AnimationMixer } from 'three';\nimport { useFrame } from '@react-three/fiber';\n\nfunction useAnimations(clips, root) {\n const ref = React.useRef(null);\n const [actualRef] = React.useState(() => root ? root instanceof Object3D ? {\n current: root\n } : root : ref);\n const [mixer] = React.useState(() => new AnimationMixer(undefined));\n React.useLayoutEffect(() => {\n if (root) actualRef.current = root instanceof Object3D ? root : root.current;\n mixer._root = actualRef.current;\n });\n const lazyActions = React.useRef({});\n const api = React.useMemo(() => {\n const actions = {};\n clips.forEach(clip => Object.defineProperty(actions, clip.name, {\n enumerable: true,\n get() {\n if (actualRef.current) {\n return lazyActions.current[clip.name] || (lazyActions.current[clip.name] = mixer.clipAction(clip, actualRef.current));\n }\n },\n configurable: true\n }));\n return {\n ref: actualRef,\n clips,\n actions,\n names: clips.map(c => c.name),\n mixer\n };\n }, [clips]);\n useFrame((state, delta) => mixer.update(delta));\n React.useEffect(() => {\n const currentRoot = actualRef.current;\n return () => {\n // Clean up only when clips change, wipe out lazy actions and uncache clips\n lazyActions.current = {};\n mixer.stopAllAction();\n Object.values(api.actions).forEach(action => {\n if (currentRoot) {\n mixer.uncacheAction(action, currentRoot);\n }\n });\n };\n }, [clips]);\n return api;\n}\n\nexport { useAnimations };\n","import * as React from 'react';\nimport { addEffect, addAfterEffect } from '@react-three/fiber';\n\nfunction useIntersect(onChange) {\n const ref = React.useRef(null);\n const check = React.useRef(false);\n const temp = React.useRef(false);\n const callback = React.useRef(onChange);\n React.useLayoutEffect(() => void (callback.current = onChange), [onChange]);\n React.useEffect(() => {\n const obj = ref.current;\n if (obj) {\n // Stamp out frustum check pre-emptively\n const unsub1 = addEffect(() => {\n check.current = false;\n return true;\n });\n // If the object is inside the frustum three will call onRender\n const oldOnRender = obj.onBeforeRender;\n obj.onBeforeRender = () => check.current = true;\n // Compare the check value against the temp value, if it differs set state\n const unsub2 = addAfterEffect(() => {\n if (check.current !== temp.current) callback.current == null || callback.current(temp.current = check.current);\n return true;\n });\n return () => {\n obj.onBeforeRender = oldOnRender;\n unsub1();\n unsub2();\n };\n }\n }, []);\n return ref;\n}\n\nexport { useIntersect };\n","import * as THREE from 'three';\nimport * as React from 'react';\nimport { applyProps } from '@react-three/fiber';\n\n// credits for the box-projecting shader code go to codercat (https://codercat.tk)\n// and @0beqz https://gist.github.com/0beqz/8d51b4ae16d68021a09fb504af708fca\n\nconst worldposReplace = /* glsl */`\n#if defined( USE_ENVMAP ) || defined( DISTANCE ) || defined ( USE_SHADOWMAP )\n vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n #ifdef BOX_PROJECTED_ENV_MAP\n vWorldPosition = worldPosition.xyz;\n #endif\n#endif\n`;\nconst boxProjectDefinitions = /*glsl */`\n#ifdef BOX_PROJECTED_ENV_MAP\n uniform vec3 envMapSize;\n uniform vec3 envMapPosition;\n varying vec3 vWorldPosition;\n \n vec3 parallaxCorrectNormal( vec3 v, vec3 cubeSize, vec3 cubePos ) {\n vec3 nDir = normalize( v );\n vec3 rbmax = ( .5 * cubeSize + cubePos - vWorldPosition ) / nDir;\n vec3 rbmin = ( -.5 * cubeSize + cubePos - vWorldPosition ) / nDir;\n vec3 rbminmax;\n rbminmax.x = ( nDir.x > 0. ) ? rbmax.x : rbmin.x;\n rbminmax.y = ( nDir.y > 0. ) ? rbmax.y : rbmin.y;\n rbminmax.z = ( nDir.z > 0. ) ? rbmax.z : rbmin.z;\n float correction = min( min( rbminmax.x, rbminmax.y ), rbminmax.z );\n vec3 boxIntersection = vWorldPosition + nDir * correction; \n return boxIntersection - cubePos;\n }\n#endif\n`;\n\n// will be inserted after \"vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\"\nconst getIBLIrradiance_patch = /* glsl */`\n#ifdef BOX_PROJECTED_ENV_MAP\n worldNormal = parallaxCorrectNormal( worldNormal, envMapSize, envMapPosition );\n#endif\n`;\n\n// will be inserted after \"reflectVec = inverseTransformDirection( reflectVec, viewMatrix );\"\nconst getIBLRadiance_patch = /* glsl */`\n#ifdef BOX_PROJECTED_ENV_MAP\n reflectVec = parallaxCorrectNormal( reflectVec, envMapSize, envMapPosition );\n#endif\n`;\n\n// FIXME Replace with `THREE.WebGLProgramParametersWithUniforms` type when able to target @types/three@0.160.0\n\nfunction boxProjectedEnvMap(shader, envMapPosition, envMapSize) {\n // defines\n shader.defines.BOX_PROJECTED_ENV_MAP = true;\n // uniforms\n shader.uniforms.envMapPosition = {\n value: envMapPosition\n };\n shader.uniforms.envMapSize = {\n value: envMapSize\n };\n // vertex shader\n shader.vertexShader = `\n varying vec3 vWorldPosition;\n ${shader.vertexShader.replace('#include <worldpos_vertex>', worldposReplace)}`;\n // fragment shader\n shader.fragmentShader = `\n ${boxProjectDefinitions}\n ${shader.fragmentShader.replace('#include <envmap_physical_pars_fragment>', THREE.ShaderChunk.envmap_physical_pars_fragment).replace('vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );', `vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\n ${getIBLIrradiance_patch}\n `).replace('reflectVec = inverseTransformDirection( reflectVec, viewMatrix );', `reflectVec = inverseTransformDirection( reflectVec, viewMatrix );\n ${getIBLRadiance_patch}\n `)}`;\n}\nfunction useBoxProjectedEnv(position = new THREE.Vector3(), size = new THREE.Vector3()) {\n const [config] = React.useState(() => ({\n position: new THREE.Vector3(),\n size: new THREE.Vector3()\n }));\n applyProps(config, {\n position,\n size\n });\n const ref = React.useRef(null);\n const spread = React.useMemo(() => ({\n ref,\n onBeforeCompile: shader => boxProjectedEnvMap(shader, config.position, config.size),\n customProgramCacheKey: () => JSON.stringify(config.position.toArray()) + JSON.stringify(config.size.toArray())\n }), [...config.position.toArray(), ...config.size.toArray()]);\n React.useLayoutEffect(() => void (ref.current.needsUpdate = true), [config]);\n return spread;\n}\n\nexport { useBoxProjectedEnv };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { useFrame } from '@react-three/fiber';\n\nconst boundingBox = /* @__PURE__ */new THREE.Box3();\nconst boundingBoxSize = /* @__PURE__ */new THREE.Vector3();\nconst BBAnchor = ({\n anchor,\n ...props\n}) => {\n const ref = React.useRef(null);\n const parentRef = React.useRef(null);\n\n // Reattach group created by this component to the parent's parent,\n // so it becomes a sibling of its initial parent.\n // We do that so the children have no impact on a bounding box of a parent.\n React.useEffect(() => {\n var _ref$current;\n if ((_ref$current = ref.current) != null && (_ref$current = _ref$current.parent) != null && _ref$current.parent) {\n parentRef.current = ref.current.parent;\n ref.current.parent.parent.add(ref.current);\n }\n }, []);\n useFrame(() => {\n if (parentRef.current) {\n boundingBox.setFromObject(parentRef.current);\n boundingBox.getSize(boundingBoxSize);\n ref.current.position.set(parentRef.current.position.x + boundingBoxSize.x * (Array.isArray(anchor) ? anchor[0] : anchor.x) / 2, parentRef.current.position.y + boundingBoxSize.y * (Array.isArray(anchor) ? anchor[1] : anchor.y) / 2, parentRef.current.position.z + boundingBoxSize.z * (Array.isArray(anchor) ? anchor[2] : anchor.z) / 2);\n }\n });\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref\n }, props));\n};\n\nexport { BBAnchor };\n","import * as React from 'react';\nimport { useMemo, useCallback } from 'react';\nimport { useFrame } from '@react-three/fiber';\nimport { Texture } from 'three';\n\n// smooth new sample (measurement) based on previous sample (current)\nfunction smoothAverage(current, measurement, smoothing = 0.9) {\n return measurement * smoothing + current * (1.0 - smoothing);\n}\n\n// default ease\nconst easeCircleOut = x => Math.sqrt(1 - Math.pow(x - 1, 2));\nclass TrailTextureImpl {\n constructor({\n size = 256,\n maxAge = 750,\n radius = 0.3,\n intensity = 0.2,\n interpolate = 0,\n smoothing = 0,\n minForce = 0.3,\n blend = 'screen',\n // source-over is canvas default. Others are slower\n ease = easeCircleOut\n } = {}) {\n this.size = size;\n this.maxAge = maxAge;\n this.radius = radius;\n this.intensity = intensity;\n this.ease = ease;\n this.interpolate = interpolate;\n this.smoothing = smoothing;\n this.minForce = minForce;\n this.blend = blend;\n this.trail = [];\n this.force = 0;\n this.initTexture();\n }\n initTexture() {\n this.canvas = document.createElement('canvas');\n this.canvas.width = this.canvas.height = this.size;\n const ctx = this.canvas.getContext('2d');\n if (ctx === null) {\n throw new Error('2D not available');\n }\n this.ctx = ctx;\n this.ctx.fillStyle = 'black';\n this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n this.texture = new Texture(this.canvas);\n this.canvas.id = 'touchTexture';\n this.canvas.style.width = this.canvas.style.height = `${this.canvas.width}px`;\n }\n update(delta) {\n this.clear();\n\n // age points\n this.trail.forEach((point, i) => {\n point.age += delta * 1000;\n // remove old\n if (point.age > this.maxAge) {\n this.trail.splice(i, 1);\n }\n });\n\n // reset force when empty (when smoothing)\n if (!this.trail.length) this.force = 0;\n this.trail.forEach(point => {\n this.drawTouch(point);\n });\n this.texture.needsUpdate = true;\n }\n clear() {\n this.ctx.globalCompositeOperation = 'source-over';\n this.ctx.fillStyle = 'black';\n this.ctx.fillRect(0, 0, this.canvas.width, this.canvas.height);\n }\n addTouch(point) {\n const last = this.trail[this.trail.length - 1];\n if (last) {\n const dx = last.x - point.x;\n const dy = last.y - point.y;\n const dd = dx * dx + dy * dy;\n const force = Math.max(this.minForce, Math.min(dd * 10000, 1));\n this.force = smoothAverage(force, this.force, this.smoothing);\n if (!!this.interpolate) {\n const lines = Math.ceil(dd / Math.pow(this.radius * 0.5 / this.interpolate, 2));\n if (lines > 1) {\n for (let i = 1; i < lines; i++) {\n this.trail.push({\n x: last.x - dx / lines * i,\n y: last.y - dy / lines * i,\n age: 0,\n force\n });\n }\n }\n }\n }\n this.trail.push({\n x: point.x,\n y: point.y,\n age: 0,\n force: this.force\n });\n }\n drawTouch(point) {\n const pos = {\n x: point.x * this.size,\n y: (1 - point.y) * this.size\n };\n let intensity = 1;\n if (point.age < this.maxAge * 0.3) {\n intensity = this.ease(point.age / (this.maxAge * 0.3));\n } else {\n intensity = this.ease(1 - (point.age - this.maxAge * 0.3) / (this.maxAge * 0.7));\n }\n intensity *= point.force;\n\n // apply blending\n this.ctx.globalCompositeOperation = this.blend;\n const radius = this.size * this.radius * intensity;\n const grd = this.ctx.createRadialGradient(pos.x, pos.y, Math.max(0, radius * 0.25), pos.x, pos.y, Math.max(0, radius));\n grd.addColorStop(0, `rgba(255, 255, 255, ${this.intensity})`);\n grd.addColorStop(1, `rgba(0, 0, 0, 0.0)`);\n this.ctx.beginPath();\n this.ctx.fillStyle = grd;\n this.ctx.arc(pos.x, pos.y, Math.max(0, radius), 0, Math.PI * 2);\n this.ctx.fill();\n }\n}\nfunction useTrailTexture(config = {}) {\n const {\n size,\n maxAge,\n radius,\n intensity,\n interpolate,\n smoothing,\n minForce,\n blend,\n ease\n } = config;\n const trail = useMemo(() => new TrailTextureImpl(config), [size, maxAge, radius, intensity, interpolate, smoothing, minForce, blend, ease]);\n useFrame((_, delta) => void trail.update(delta));\n const onMove = useCallback(e => trail.addTouch(e.uv), [trail]);\n return [trail.texture, onMove];\n}\n\n//\n\nconst TrailTexture = ({\n children,\n ...config\n}) => {\n const ret = useTrailTexture(config);\n return /*#__PURE__*/React.createElement(React.Fragment, null, children == null ? void 0 : children(ret));\n};\n\nexport { TrailTexture, useTrailTexture };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { Box3, Vector3, Sphere } from 'three';\nimport * as React from 'react';\n\nconst Center = /* @__PURE__ */React.forwardRef(function Center({\n children,\n object,\n disable,\n disableX,\n disableY,\n disableZ,\n left,\n right,\n top,\n bottom,\n front,\n back,\n onCentered,\n precise = true,\n cacheKey = 0,\n ...props\n}, fRef) {\n const ref = React.useRef(null);\n const outer = React.useRef(null);\n const inner = React.useRef(null);\n const [box3] = React.useState(() => new Box3());\n const [center] = React.useState(() => new Vector3());\n const [sphere] = React.useState(() => new Sphere());\n React.useLayoutEffect(() => {\n outer.current.matrixWorld.identity();\n box3.setFromObject(object !== null && object !== void 0 ? object : inner.current, precise);\n const width = box3.max.x - box3.min.x;\n const height = box3.max.y - box3.min.y;\n const depth = box3.max.z - box3.min.z;\n box3.getCenter(center);\n box3.getBoundingSphere(sphere);\n const vAlign = top ? height / 2 : bottom ? -height / 2 : 0;\n const hAlign = left ? -width / 2 : right ? width / 2 : 0;\n const dAlign = front ? depth / 2 : back ? -depth / 2 : 0;\n outer.current.position.set(disable || disableX ? 0 : -center.x + hAlign, disable || disableY ? 0 : -center.y + vAlign, disable || disableZ ? 0 : -center.z + dAlign);\n\n // Only fire onCentered if the bounding box has changed\n onCentered == null || onCentered({\n parent: ref.current.parent,\n container: ref.current,\n width,\n height,\n depth,\n boundingBox: box3,\n boundingSphere: sphere,\n center: center,\n verticalAlignment: vAlign,\n horizontalAlignment: hAlign,\n depthAlignment: dAlign\n });\n }, [cacheKey, onCentered, top, left, front, disable, disableX, disableY, disableZ, object, precise, right, bottom, back, box3, center, sphere]);\n React.useImperativeHandle(fRef, () => ref.current, []);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref\n }, props), /*#__PURE__*/React.createElement(\"group\", {\n ref: outer\n }, /*#__PURE__*/React.createElement(\"group\", {\n ref: inner\n }, children)));\n});\n\nexport { Center };\n","import * as React from 'react';\nimport { Text3D } from './Text3D.js';\nimport { Center } from './Center.js';\n\n/* eslint react-hooks/exhaustive-deps: 1 */\n/**\n * A simple counter example component. Click to increment, meta-click to decrement.\n */\nconst Example = /* @__PURE__ */React.forwardRef(({\n font,\n color = '#cbcbcb',\n bevelSize = 0.04,\n debug = false,\n children,\n ...props\n}, fref) => {\n const [counter, setCounter] = React.useState(0);\n const incr = React.useCallback((x = 1) => setCounter(counter + x), [counter]);\n const decr = React.useCallback((x = 1) => setCounter(counter - x), [counter]);\n\n // ref-API\n const api = React.useMemo(() => ({\n incr,\n decr\n }), [incr, decr]);\n React.useImperativeHandle(fref, () => api, [api]);\n return /*#__PURE__*/React.createElement(\"group\", props, /*#__PURE__*/React.createElement(React.Suspense, {\n fallback: null\n }, /*#__PURE__*/React.createElement(Center, {\n top: true,\n cacheKey: JSON.stringify({\n counter,\n font\n })\n }, /*#__PURE__*/React.createElement(Text3D, {\n bevelEnabled: true,\n bevelSize: bevelSize,\n font: font\n }, debug ? /*#__PURE__*/React.createElement(\"meshNormalMaterial\", {\n wireframe: true\n }) : /*#__PURE__*/React.createElement(\"meshStandardMaterial\", {\n color: color\n }), counter))), children);\n});\n\nexport { Example };\n","/**\n * Sets `BufferAttribute.updateRange` since r159.\n */\nconst setUpdateRange = (attribute, updateRange) => {\n attribute.updateRanges[0] = updateRange;\n};\n\nexport { setUpdateRange };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { extend, useFrame } from '@react-three/fiber';\nimport { setUpdateRange } from '../helpers/deprecated.js';\n\nfunction isFunctionChild(value) {\n return typeof value === 'function';\n}\nconst _instanceLocalMatrix = /* @__PURE__ */new THREE.Matrix4();\nconst _instanceWorldMatrix = /* @__PURE__ */new THREE.Matrix4();\nconst _instanceIntersects = [];\nconst _mesh = /* @__PURE__ */new THREE.Mesh();\nclass PositionMesh extends THREE.Group {\n constructor() {\n super();\n this.color = new THREE.Color('white');\n this.instance = {\n current: undefined\n };\n this.instanceKey = {\n current: undefined\n };\n }\n\n // This will allow the virtual instance have bounds\n get geometry() {\n var _this$instance$curren;\n return (_this$instance$curren = this.instance.current) == null ? void 0 : _this$instance$curren.geometry;\n }\n\n // And this will allow the virtual instance to receive events\n raycast(raycaster, intersects) {\n const parent = this.instance.current;\n if (!parent) return;\n if (!parent.geometry || !parent.material) return;\n _mesh.geometry = parent.geometry;\n const matrixWorld = parent.matrixWorld;\n const instanceId = parent.userData.instances.indexOf(this.instanceKey);\n // If the instance wasn't found or exceeds the parents draw range, bail out\n if (instanceId === -1 || instanceId > parent.count) return;\n // calculate the world matrix for each instance\n parent.getMatrixAt(instanceId, _instanceLocalMatrix);\n _instanceWorldMatrix.multiplyMatrices(matrixWorld, _instanceLocalMatrix);\n // the mesh represents this single instance\n _mesh.matrixWorld = _instanceWorldMatrix;\n // raycast side according to instance material\n if (parent.material instanceof THREE.Material) _mesh.material.side = parent.material.side;else _mesh.material.side = parent.material[0].side;\n _mesh.raycast(raycaster, _instanceIntersects);\n // process the result of raycast\n for (let i = 0, l = _instanceIntersects.length; i < l; i++) {\n const intersect = _instanceIntersects[i];\n intersect.instanceId = instanceId;\n intersect.object = this;\n intersects.push(intersect);\n }\n _instanceIntersects.length = 0;\n }\n}\nconst globalContext = /* @__PURE__ */React.createContext(null);\nconst parentMatrix = /* @__PURE__ */new THREE.Matrix4();\nconst instanceMatrix = /* @__PURE__ */new THREE.Matrix4();\nconst tempMatrix = /* @__PURE__ */new THREE.Matrix4();\nconst translation = /* @__PURE__ */new THREE.Vector3();\nconst rotation = /* @__PURE__ */new THREE.Quaternion();\nconst scale = /* @__PURE__ */new THREE.Vector3();\nconst isInstancedBufferAttribute = attr => attr.isInstancedBufferAttribute;\nconst Instance = /* @__PURE__ */React.forwardRef(({\n context,\n children,\n ...props\n}, ref) => {\n React.useMemo(() => extend({\n PositionMesh\n }), []);\n const group = React.useRef(null);\n React.useImperativeHandle(ref, () => group.current, []);\n const {\n subscribe,\n getParent\n } = React.useContext(context || globalContext);\n React.useLayoutEffect(() => subscribe(group), []);\n return /*#__PURE__*/React.createElement(\"positionMesh\", _extends({\n instance: getParent(),\n instanceKey: group,\n ref: group\n }, props), children);\n});\nconst Instances = /* @__PURE__ */React.forwardRef(({\n context,\n children,\n range,\n limit = 1000,\n frames = Infinity,\n ...props\n}, ref) => {\n const [{\n localContext,\n instance\n }] = React.useState(() => {\n const localContext = /*#__PURE__*/React.createContext(null);\n return {\n localContext,\n instance: /*#__PURE__*/React.forwardRef((props, ref) => /*#__PURE__*/React.createElement(Instance, _extends({\n context: localContext\n }, props, {\n ref: ref\n })))\n };\n });\n const parentRef = React.useRef(null);\n React.useImperativeHandle(ref, () => parentRef.current, []);\n const [instances, setInstances] = React.useState([]);\n const [[matrices, colors]] = React.useState(() => {\n const mArray = new Float32Array(limit * 16);\n for (let i = 0; i < limit; i++) tempMatrix.identity().toArray(mArray, i * 16);\n return [mArray, new Float32Array([...new Array(limit * 3)].map(() => 1))];\n });\n React.useEffect(() => {\n // We might be a frame too late? 🤷‍♂️\n parentRef.current.instanceMatrix.needsUpdate = true;\n });\n let iterations = 0;\n let count = 0;\n const attributes = React.useRef([]);\n React.useLayoutEffect(() => {\n attributes.current = Object.entries(parentRef.current.geometry.attributes).filter(([_name, value]) => isInstancedBufferAttribute(value));\n });\n useFrame(() => {\n if (frames === Infinity || iterations < frames) {\n parentRef.current.updateMatrix();\n parentRef.current.updateMatrixWorld();\n parentMatrix.copy(parentRef.current.matrixWorld).invert();\n count = Math.min(limit, range !== undefined ? range : limit, instances.length);\n parentRef.current.count = count;\n setUpdateRange(parentRef.current.instanceMatrix, {\n start: 0,\n count: count * 16\n });\n setUpdateRange(parentRef.current.instanceColor, {\n start: 0,\n count: count * 3\n });\n for (let i = 0; i < instances.length; i++) {\n const instance = instances[i].current;\n // Multiply the inverse of the InstancedMesh world matrix or else\n // Instances will be double-transformed if <Instances> isn't at identity\n instance.matrixWorld.decompose(translation, rotation, scale);\n instanceMatrix.compose(translation, rotation, scale).premultiply(parentMatrix);\n instanceMatrix.toArray(matrices, i * 16);\n parentRef.current.instanceMatrix.needsUpdate = true;\n instance.color.toArray(colors, i * 3);\n parentRef.current.instanceColor.needsUpdate = true;\n }\n iterations++;\n }\n });\n const api = React.useMemo(() => ({\n getParent: () => parentRef,\n subscribe: ref => {\n setInstances(instances => [...instances, ref]);\n return () => setInstances(instances => instances.filter(item => item.current !== ref.current));\n }\n }), []);\n return /*#__PURE__*/React.createElement(\"instancedMesh\", _extends({\n userData: {\n instances,\n limit,\n frames\n },\n matrixAutoUpdate: false,\n ref: parentRef,\n args: [null, null, 0],\n raycast: () => null\n }, props), /*#__PURE__*/React.createElement(\"instancedBufferAttribute\", {\n attach: \"instanceMatrix\",\n args: [matrices, 16],\n usage: THREE.DynamicDrawUsage\n }), /*#__PURE__*/React.createElement(\"instancedBufferAttribute\", {\n attach: \"instanceColor\",\n args: [colors, 3],\n usage: THREE.DynamicDrawUsage\n }), isFunctionChild(children) ? /*#__PURE__*/React.createElement(localContext.Provider, {\n value: api\n }, children(instance)) : context ? /*#__PURE__*/React.createElement(context.Provider, {\n value: api\n }, children) : /*#__PURE__*/React.createElement(globalContext.Provider, {\n value: api\n }, children));\n});\n// TODO: make this non-recursive and type-safe\nconst Merged = /* @__PURE__ */React.forwardRef(function Merged({\n meshes,\n children,\n ...props\n}, ref) {\n const isArray = Array.isArray(meshes);\n // Filter out meshes from collections, which may contain non-meshes\n // @ts-expect-error\n if (!isArray) for (const key of Object.keys(meshes)) if (!meshes[key].isMesh) delete meshes[key];\n const render = args => isArray ?\n // @ts-expect-error\n children(...args) : children(\n // @ts-expect-error\n Object.keys(meshes)\n // @ts-expect-error\n .filter(key => meshes[key].isMesh).reduce((acc, key, i) => ({\n ...acc,\n [key]: args[i]\n }), {}));\n\n // @ts-expect-error\n const components = (isArray ? meshes : Object.values(meshes)).map(({\n geometry,\n material\n }) => /*#__PURE__*/React.createElement(Instances, _extends({\n key: geometry.uuid,\n geometry: geometry,\n material: material\n }, props)));\n return /*#__PURE__*/React.createElement(\"group\", {\n ref: ref\n }, renderRecursive(render, components));\n});\n\n// https://github.com/jamesplease/react-composer\nfunction renderRecursive(render, components, results = []) {\n // Once components is exhausted, we can render out the results array.\n if (!components[0]) {\n return render(results);\n }\n\n // Continue recursion for remaining items.\n // results.concat([value]) ensures [...results, value] instead of [...results, ...value]\n function nextRender(value) {\n return renderRecursive(render, components.slice(1), results.concat([value]));\n }\n\n // Each props.components entry is either an element or function [element factory]\n return typeof components[0] === 'function' ?\n // When it is a function, produce an element by invoking it with \"render component values\".\n components[0]({\n results,\n render: nextRender\n }) :\n /*#__PURE__*/\n // When it is an element, enhance the element's props with the render prop.\n React.cloneElement(components[0], {\n children: nextRender\n });\n}\n\n/** Idea and implementation for global instances and instanced attributes by\n/* Matias Gonzalez Fernandez https://x.com/matiNotFound\n/* and Paul Henschel https://x.com/0xca0a\n*/\nfunction createInstances() {\n const context = /*#__PURE__*/React.createContext(null);\n return [/*#__PURE__*/React.forwardRef((props, fref) => /*#__PURE__*/React.createElement(Instances, _extends({\n ref: fref,\n context: context\n }, props))), /*#__PURE__*/React.forwardRef((props, fref) => /*#__PURE__*/React.createElement(Instance, _extends({\n ref: fref,\n context: context\n }, props)))];\n}\nconst InstancedAttribute = /*#__PURE__*/React.forwardRef(({\n name,\n defaultValue,\n normalized,\n usage = THREE.DynamicDrawUsage\n}, fref) => {\n const ref = React.useRef(null);\n React.useImperativeHandle(fref, () => ref.current, []);\n React.useLayoutEffect(() => {\n const parent = ref.current.__r3f.parent.object;\n parent.geometry.attributes[name] = ref.current;\n const value = Array.isArray(defaultValue) ? defaultValue : [defaultValue];\n const array = Array.from({\n length: parent.userData.limit\n }, () => value).flat();\n ref.current.array = new Float32Array(array);\n ref.current.itemSize = value.length;\n // @ts-expect-error\n ref.current.count = array.length / ref.current.itemSize;\n return () => {\n delete parent.geometry.attributes[name];\n };\n }, [name]);\n let iterations = 0;\n useFrame(() => {\n const parent = ref.current.__r3f.parent.object;\n if (parent.userData.frames === Infinity || iterations < parent.userData.frames) {\n for (let i = 0; i < parent.userData.instances.length; i++) {\n const instance = parent.userData.instances[i].current;\n const value = instance[name];\n if (value !== undefined) {\n ref.current.set(Array.isArray(value) ? value : typeof value.toArray === 'function' ? value.toArray() : [value], i * ref.current.itemSize);\n ref.current.needsUpdate = true;\n }\n }\n iterations++;\n }\n });\n // @ts-expect-error we're abusing three API here by mutating immutable args\n return /*#__PURE__*/React.createElement(\"instancedBufferAttribute\", {\n ref: ref,\n usage: usage,\n normalized: normalized\n });\n});\n\nexport { Instance, InstancedAttribute, Instances, Merged, PositionMesh, createInstances };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useFrame } from '@react-three/fiber';\nimport * as THREE from 'three';\nimport { Instances, Instance } from './Instances.js';\nimport { Billboard } from './Billboard.js';\nimport { useSpriteLoader, getFirstFrame } from './useSpriteLoader.js';\n\n// Frame-related types\n\nconst context = /*#__PURE__*/React.createContext(null);\nfunction useSpriteAnimator() {\n return React.useContext(context);\n}\n\n// Type guard for SpriteData\nfunction isSpriteData(data) {\n return data !== null && 'meta' in data && 'frames' in data;\n}\nconst geometry = /* @__PURE__ */new THREE.PlaneGeometry(1, 1);\nconst SpriteAnimator = /* @__PURE__ */React.forwardRef(({\n startFrame = 0,\n endFrame,\n fps = 30,\n frameName = '',\n textureDataURL,\n textureImageURL,\n loop = false,\n numberOfFrames = 1,\n autoPlay = true,\n animationNames,\n onStart,\n onEnd,\n onLoopEnd,\n onFrame,\n play,\n pause = false,\n flipX = false,\n alphaTest = 0.0,\n children,\n asSprite = false,\n offset,\n playBackwards = false,\n resetOnEnd = false,\n maxItems = 1,\n instanceItems = [[0, 0, 0]],\n spriteDataset,\n canvasRenderingContext2DSettings,\n roundFramePosition = false,\n meshProps = {},\n ...props\n}, fref) => {\n const ref = React.useRef(new THREE.Group());\n const spriteData = React.useRef(null);\n const matRef = React.useRef(null);\n const spriteRef = React.useRef(null);\n const timerOffset = React.useRef(window.performance.now());\n const currentFrame = React.useRef(startFrame);\n const currentFrameName = React.useRef(frameName);\n const fpsInterval = fps > 0 ? 1000 / fps : 0;\n const [spriteTexture, setSpriteTexture] = React.useState(new THREE.Texture());\n const totalFrames = React.useRef(0);\n const [aspect, setAspect] = React.useState(new THREE.Vector3(1, 1, 1));\n const flipOffset = flipX ? -1 : 1;\n const pauseRef = React.useRef(pause);\n const pos = React.useRef(offset);\n const softEnd = React.useRef(false);\n const {\n spriteObj,\n loadJsonAndTexture\n } = useSpriteLoader(null, null, animationNames, numberOfFrames, undefined, canvasRenderingContext2DSettings);\n const frameNameRef = React.useRef(frameName);\n\n // lite version for pre-loaded assets\n const parseSpriteDataLite = React.useCallback((textureData, data) => {\n if (data === null) {\n if (numberOfFrames) {\n //get size from texture\n\n totalFrames.current = numberOfFrames;\n if (playBackwards) {\n currentFrame.current = numberOfFrames - 1;\n }\n spriteData.current = data;\n }\n } else {\n var _spriteData$current$f, _spriteData$current;\n spriteData.current = data;\n if (spriteData.current && Array.isArray(spriteData.current.frames)) {\n totalFrames.current = spriteData.current.frames.length;\n } else if (spriteData.current && typeof spriteData.current === 'object' && frameNameRef.current) {\n totalFrames.current = spriteData.current.frames[frameNameRef.current].length;\n } else {\n totalFrames.current = 0;\n }\n if (playBackwards) {\n currentFrame.current = totalFrames.current - 1;\n }\n const {\n w,\n h\n } = getFirstFrame((_spriteData$current$f = (_spriteData$current = spriteData.current) == null ? void 0 : _spriteData$current.frames) !== null && _spriteData$current$f !== void 0 ? _spriteData$current$f : [], frameNameRef.current).sourceSize;\n const aspect = calculateAspectRatio(w, h);\n setAspect(aspect);\n if (matRef.current) {\n matRef.current.map = textureData;\n }\n }\n setSpriteTexture(textureData);\n }, [numberOfFrames, playBackwards]);\n\n // modify the sprite material after json is parsed and state updated\n const modifySpritePosition = React.useCallback(() => {\n if (!spriteData.current) return;\n const {\n meta: {\n size: metaInfo\n },\n frames\n } = spriteData.current;\n const {\n w: frameW,\n h: frameH\n } = Array.isArray(frames) ? frames[0].sourceSize : frameName ? frames[frameName] ? frames[frameName][0].sourceSize : {\n w: 0,\n h: 0\n } : {\n w: 0,\n h: 0\n };\n if (matRef.current && matRef.current.map) {\n matRef.current.map.wrapS = matRef.current.map.wrapT = THREE.RepeatWrapping;\n matRef.current.map.center.set(0, 0);\n matRef.current.map.repeat.set(1 * flipOffset / (metaInfo.w / frameW), 1 / (metaInfo.h / frameH));\n }\n //const framesH = (metaInfo.w - 1) / frameW\n const framesV = (metaInfo.h - 1) / frameH;\n const frameOffsetY = 1 / framesV;\n if (matRef.current && matRef.current.map) {\n matRef.current.map.offset.x = 0.0; //-matRef.current.map.repeat.x\n matRef.current.map.offset.y = 1 - frameOffsetY;\n }\n if (onStart) {\n onStart({\n currentFrameName: frameName !== null && frameName !== void 0 ? frameName : '',\n currentFrame: currentFrame.current\n });\n }\n }, [flipOffset, frameName, onStart]);\n const state = React.useMemo(() => ({\n current: pos.current,\n offset: pos.current,\n imageUrl: textureImageURL,\n hasEnded: false,\n ref: fref\n }), [textureImageURL, fref]);\n React.useImperativeHandle(fref, () => ref.current, []);\n React.useLayoutEffect(() => {\n pos.current = offset;\n }, [offset]);\n const calculateAspectRatio = (width, height) => {\n var _spriteRef$current;\n const ret = new THREE.Vector3();\n const aspectRatio = height / width;\n ret.set(1, aspectRatio, 1);\n (_spriteRef$current = spriteRef.current) == null || _spriteRef$current.scale.copy(ret);\n return ret;\n };\n\n // initial loads\n React.useEffect(() => {\n if (spriteDataset) {\n var _spriteDataset$sprite;\n parseSpriteDataLite(spriteDataset == null || (_spriteDataset$sprite = spriteDataset.spriteTexture) == null ? void 0 : _spriteDataset$sprite.clone(), spriteDataset.spriteData);\n } else {\n if (textureImageURL && textureDataURL) {\n loadJsonAndTexture(textureImageURL, textureDataURL);\n }\n }\n }, [loadJsonAndTexture, spriteDataset, textureDataURL, textureImageURL, parseSpriteDataLite]);\n React.useEffect(() => {\n if (spriteObj) {\n var _spriteObj$spriteText;\n parseSpriteDataLite(spriteObj == null || (_spriteObj$spriteText = spriteObj.spriteTexture) == null ? void 0 : _spriteObj$spriteText.clone(), spriteObj == null ? void 0 : spriteObj.spriteData);\n }\n }, [spriteObj, parseSpriteDataLite]);\n\n // support backwards play\n React.useEffect(() => {\n state.hasEnded = false;\n if (spriteData.current && playBackwards === true) {\n var _ref;\n currentFrame.current = ((_ref = spriteData.current.frames.length) !== null && _ref !== void 0 ? _ref : 0) - 1;\n } else {\n currentFrame.current = 0;\n }\n }, [playBackwards, state]);\n React.useLayoutEffect(() => {\n modifySpritePosition();\n }, [spriteTexture, flipX, modifySpritePosition]);\n React.useEffect(() => {\n if (autoPlay) {\n pauseRef.current = false;\n }\n }, [autoPlay]);\n React.useLayoutEffect(() => {\n if (currentFrameName.current !== frameName && frameName) {\n currentFrame.current = 0;\n currentFrameName.current = frameName;\n state.hasEnded = false;\n if (fpsInterval <= 0) {\n currentFrame.current = endFrame || startFrame || 0;\n }\n // modifySpritePosition()\n if (spriteData.current) {\n const {\n w,\n h\n } = getFirstFrame(spriteData.current.frames, frameName).sourceSize;\n const _aspect = calculateAspectRatio(w, h);\n setAspect(_aspect);\n }\n }\n }, [frameName, fpsInterval, state, endFrame, startFrame]);\n\n // run the animation on each frame\n const runAnimation = () => {\n if (!isSpriteData(spriteData.current)) return;\n const {\n meta: {\n size: metaInfo\n },\n frames\n } = spriteData.current;\n const {\n w: frameW,\n h: frameH\n } = getFirstFrame(frames, frameName).sourceSize;\n const spriteFrames = Array.isArray(frames) ? frames : frameName ? frames[frameName] : [];\n const _endFrame = endFrame || spriteFrames.length - 1;\n var _offset = offset === undefined ? state.current : offset;\n if (fpsInterval <= 0) {\n currentFrame.current = endFrame || startFrame || 0;\n calculateFinalPosition(frameW, frameH, metaInfo, spriteFrames);\n return;\n }\n const now = window.performance.now();\n const diff = now - timerOffset.current;\n if (diff <= fpsInterval) return;\n\n // conditionals to support backwards play\n var endCondition = playBackwards ? currentFrame.current < 0 : currentFrame.current > _endFrame;\n var onStartCondition = playBackwards ? currentFrame.current === _endFrame : currentFrame.current === 0;\n var manualProgressEndCondition = playBackwards ? currentFrame.current < 0 : currentFrame.current >= _endFrame;\n if (endCondition) {\n currentFrame.current = loop ? startFrame !== null && startFrame !== void 0 ? startFrame : 0 : 0;\n if (playBackwards) {\n currentFrame.current = _endFrame;\n }\n if (loop) {\n onLoopEnd == null || onLoopEnd({\n currentFrameName: frameName !== null && frameName !== void 0 ? frameName : '',\n currentFrame: currentFrame.current\n });\n } else {\n onEnd == null || onEnd({\n currentFrameName: frameName !== null && frameName !== void 0 ? frameName : '',\n currentFrame: currentFrame.current\n });\n state.hasEnded = !resetOnEnd;\n if (resetOnEnd) {\n pauseRef.current = true;\n //calculateFinalPosition(frameW, frameH, metaInfo, spriteFrames)\n }\n }\n if (!loop) return;\n } else if (onStartCondition) {\n onStart == null || onStart({\n currentFrameName: frameName !== null && frameName !== void 0 ? frameName : '',\n currentFrame: currentFrame.current\n });\n }\n\n // for manual update\n if (_offset !== undefined && manualProgressEndCondition) {\n if (softEnd.current === false) {\n onEnd == null || onEnd({\n currentFrameName: frameName !== null && frameName !== void 0 ? frameName : '',\n currentFrame: currentFrame.current\n });\n softEnd.current = true;\n }\n } else {\n // same for start?\n softEnd.current = false;\n }\n\n // clock to limit fps\n if (diff <= fpsInterval) return;\n timerOffset.current = now - diff % fpsInterval;\n calculateFinalPosition(frameW, frameH, metaInfo, spriteFrames);\n };\n const calculateFinalPosition = (frameW, frameH, metaInfo, spriteFrames) => {\n // get the manual update offset to find the next frame\n var _offset = offset === undefined ? state.current : offset;\n const targetFrame = currentFrame.current;\n let finalValX = 0;\n let finalValY = 0;\n calculateAspectRatio(frameW, frameH);\n const framesH = roundFramePosition ? Math.round((metaInfo.w - 1) / frameW) : (metaInfo.w - 1) / frameW;\n const framesV = roundFramePosition ? Math.round((metaInfo.h - 1) / frameH) : (metaInfo.h - 1) / frameH;\n if (!spriteFrames[targetFrame]) {\n return;\n }\n const {\n frame: {\n x: frameX,\n y: frameY\n },\n sourceSize: {\n w: originalSizeX,\n h: originalSizeY\n }\n } = spriteFrames[targetFrame];\n const frameOffsetX = 1 / framesH;\n const frameOffsetY = 1 / framesV;\n if (matRef.current && matRef.current.map) {\n finalValX = flipOffset > 0 ? frameOffsetX * (frameX / originalSizeX) : frameOffsetX * (frameX / originalSizeX) - matRef.current.map.repeat.x;\n finalValY = Math.abs(1 - frameOffsetY) - frameOffsetY * (frameY / originalSizeY);\n matRef.current.map.offset.x = finalValX;\n matRef.current.map.offset.y = finalValY;\n }\n\n // if manual update is active\n if (_offset !== undefined && _offset !== null) {\n // Calculate the frame index, based on offset given from the provider\n let frameIndex = Math.floor(_offset * spriteFrames.length);\n\n // Ensure the frame index is within the valid range\n frameIndex = Math.max(0, Math.min(frameIndex, spriteFrames.length - 1));\n if (isNaN(frameIndex)) {\n frameIndex = 0; //fallback\n }\n currentFrame.current = frameIndex;\n } else {\n // auto update\n if (playBackwards) {\n currentFrame.current -= 1;\n } else {\n currentFrame.current += 1;\n }\n }\n };\n\n // *** Warning! It runs on every frame! ***\n useFrame((_state, _delta) => {\n var _spriteData$current2, _matRef$current;\n if (!((_spriteData$current2 = spriteData.current) != null && _spriteData$current2.frames) || !((_matRef$current = matRef.current) != null && _matRef$current.map)) {\n return;\n }\n if (pauseRef.current) {\n return;\n }\n if (!state.hasEnded && (autoPlay || play)) {\n runAnimation();\n onFrame == null || onFrame({\n currentFrameName: currentFrameName.current,\n currentFrame: currentFrame.current\n });\n }\n });\n function multiplyScale(initialScale = new THREE.Vector3(1, 1, 1), newScale = 1) {\n if (typeof newScale === 'number') return initialScale.multiplyScalar(newScale);\n if (Array.isArray(newScale)) return initialScale.multiply(new THREE.Vector3(...newScale));\n if (newScale instanceof THREE.Vector3) return initialScale.multiply(newScale);\n }\n return /*#__PURE__*/React.createElement(\"group\", _extends({}, props, {\n ref: ref,\n scale: multiplyScale(aspect, props.scale)\n }), /*#__PURE__*/React.createElement(context.Provider, {\n value: state\n }, asSprite && /*#__PURE__*/React.createElement(Billboard, null, /*#__PURE__*/React.createElement(\"mesh\", _extends({\n ref: spriteRef,\n scale: 1.0,\n geometry: geometry\n }, meshProps), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n premultipliedAlpha: false,\n toneMapped: false,\n side: THREE.DoubleSide,\n ref: matRef,\n map: spriteTexture,\n transparent: true,\n alphaTest: alphaTest !== null && alphaTest !== void 0 ? alphaTest : 0.0\n }))), !asSprite && /*#__PURE__*/React.createElement(Instances, _extends({\n geometry: geometry,\n limit: maxItems !== null && maxItems !== void 0 ? maxItems : 1\n }, meshProps), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n premultipliedAlpha: false,\n toneMapped: false,\n side: THREE.DoubleSide,\n ref: matRef,\n map: spriteTexture,\n transparent: true,\n alphaTest: alphaTest !== null && alphaTest !== void 0 ? alphaTest : 0.0\n }), (instanceItems !== null && instanceItems !== void 0 ? instanceItems : [0]).map((item, index) => /*#__PURE__*/React.createElement(Instance, _extends({\n key: index,\n ref: (instanceItems == null ? void 0 : instanceItems.length) === 1 ? spriteRef : null,\n position: item,\n scale: 1.0\n }, meshProps)))), children));\n});\n\nexport { SpriteAnimator, useSpriteAnimator };\n","import * as React from 'react';\nimport * as THREE from 'three';\nimport { createPortal } from '@react-three/fiber';\nimport { Flow } from 'three-stdlib';\n\nconst CurveModifier = /* @__PURE__ */React.forwardRef(({\n children,\n curve\n}, ref) => {\n const [scene] = React.useState(() => new THREE.Scene());\n const [obj, set] = React.useState();\n const modifier = React.useRef(null);\n React.useLayoutEffect(() => {\n modifier.current = new Flow(scene.children[0]);\n set(modifier.current.object3D);\n }, [children]);\n React.useEffect(() => {\n var _modifier$current;\n if (curve) (_modifier$current = modifier.current) == null || _modifier$current.updateCurve(0, curve);\n }, [curve]);\n React.useImperativeHandle(ref, () => modifier.current);\n return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal(children, scene), obj && /*#__PURE__*/React.createElement(\"primitive\", {\n object: obj\n }));\n});\n\nexport { CurveModifier };\n","var distort = \"#define GLSLIFY 1\\nvec3 mod289(vec3 x){return x-floor(x*(1.0/289.0))*289.0;}vec4 mod289(vec4 x){return x-floor(x*(1.0/289.0))*289.0;}vec4 permute(vec4 x){return mod289(((x*34.0)+1.0)*x);}vec4 taylorInvSqrt(vec4 r){return 1.79284291400159-0.85373472095314*r;}float snoise(vec3 v){const vec2 C=vec2(1.0/6.0,1.0/3.0);const vec4 D=vec4(0.0,0.5,1.0,2.0);vec3 i=floor(v+dot(v,C.yyy));vec3 x0=v-i+dot(i,C.xxx);vec3 g=step(x0.yzx,x0.xyz);vec3 l=1.0-g;vec3 i1=min(g.xyz,l.zxy);vec3 i2=max(g.xyz,l.zxy);vec3 x1=x0-i1+C.xxx;vec3 x2=x0-i2+C.yyy;vec3 x3=x0-D.yyy;i=mod289(i);vec4 p=permute(permute(permute(i.z+vec4(0.0,i1.z,i2.z,1.0))+i.y+vec4(0.0,i1.y,i2.y,1.0))+i.x+vec4(0.0,i1.x,i2.x,1.0));float n_=0.142857142857;vec3 ns=n_*D.wyz-D.xzx;vec4 j=p-49.0*floor(p*ns.z*ns.z);vec4 x_=floor(j*ns.z);vec4 y_=floor(j-7.0*x_);vec4 x=x_*ns.x+ns.yyyy;vec4 y=y_*ns.x+ns.yyyy;vec4 h=1.0-abs(x)-abs(y);vec4 b0=vec4(x.xy,y.xy);vec4 b1=vec4(x.zw,y.zw);vec4 s0=floor(b0)*2.0+1.0;vec4 s1=floor(b1)*2.0+1.0;vec4 sh=-step(h,vec4(0.0));vec4 a0=b0.xzyw+s0.xzyw*sh.xxyy;vec4 a1=b1.xzyw+s1.xzyw*sh.zzww;vec3 p0=vec3(a0.xy,h.x);vec3 p1=vec3(a0.zw,h.y);vec3 p2=vec3(a1.xy,h.z);vec3 p3=vec3(a1.zw,h.w);vec4 norm=taylorInvSqrt(vec4(dot(p0,p0),dot(p1,p1),dot(p2,p2),dot(p3,p3)));p0*=norm.x;p1*=norm.y;p2*=norm.z;p3*=norm.w;vec4 m=max(0.6-vec4(dot(x0,x0),dot(x1,x1),dot(x2,x2),dot(x3,x3)),0.0);m=m*m;return 42.0*dot(m*m,vec4(dot(p0,x0),dot(p1,x1),dot(p2,x2),dot(p3,x3)));}\"; // eslint-disable-line\n\nexport { distort as default };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { MeshPhysicalMaterial } from 'three';\nimport { useFrame } from '@react-three/fiber';\nimport distort from '../helpers/glsl/distort.vert.glsl.js';\n\nclass DistortMaterialImpl extends MeshPhysicalMaterial {\n constructor(parameters = {}) {\n super(parameters);\n this.setValues(parameters);\n this._time = {\n value: 0\n };\n this._distort = {\n value: 0.4\n };\n this._radius = {\n value: 1\n };\n }\n\n // FIXME Use `THREE.WebGLProgramParametersWithUniforms` type when able to target @types/three@0.160.0\n onBeforeCompile(shader) {\n shader.uniforms.time = this._time;\n shader.uniforms.radius = this._radius;\n shader.uniforms.distort = this._distort;\n shader.vertexShader = `\n uniform float time;\n uniform float radius;\n uniform float distort;\n ${distort}\n ${shader.vertexShader}\n `;\n shader.vertexShader = shader.vertexShader.replace('#include <begin_vertex>', `\n float updateTime = time / 50.0;\n float noise = snoise(vec3(position / 2.0 + updateTime * 5.0));\n vec3 transformed = vec3(position * (noise * pow(distort, 2.0) + radius));\n `);\n }\n get time() {\n return this._time.value;\n }\n set time(v) {\n this._time.value = v;\n }\n get distort() {\n return this._distort.value;\n }\n set distort(v) {\n this._distort.value = v;\n }\n get radius() {\n return this._radius.value;\n }\n set radius(v) {\n this._radius.value = v;\n }\n}\nconst MeshDistortMaterial = /* @__PURE__ */React.forwardRef(({\n speed = 1,\n ...props\n}, ref) => {\n const [material] = React.useState(() => new DistortMaterialImpl());\n useFrame(state => material && (material.time = state.clock.elapsedTime * speed));\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n object: material,\n ref: ref,\n attach: \"material\"\n }, props));\n});\n\nexport { MeshDistortMaterial };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { MeshStandardMaterial } from 'three';\nimport { useFrame } from '@react-three/fiber';\n\nclass WobbleMaterialImpl extends MeshStandardMaterial {\n constructor(parameters = {}) {\n super(parameters);\n this.setValues(parameters);\n this._time = {\n value: 0\n };\n this._factor = {\n value: 1\n };\n }\n\n // FIXME Use `THREE.WebGLProgramParametersWithUniforms` type when able to target @types/three@0.160.0\n onBeforeCompile(shader) {\n shader.uniforms.time = this._time;\n shader.uniforms.factor = this._factor;\n shader.vertexShader = `\n uniform float time;\n uniform float factor;\n ${shader.vertexShader}\n `;\n shader.vertexShader = shader.vertexShader.replace('#include <begin_vertex>', `float theta = sin( time + position.y ) / 2.0 * factor;\n float c = cos( theta );\n float s = sin( theta );\n mat3 m = mat3( c, 0, s, 0, 1, 0, -s, 0, c );\n vec3 transformed = vec3( position ) * m;\n vNormal = vNormal * m;`);\n }\n get time() {\n return this._time.value;\n }\n set time(v) {\n this._time.value = v;\n }\n get factor() {\n return this._factor.value;\n }\n set factor(v) {\n this._factor.value = v;\n }\n}\nconst MeshWobbleMaterial = /* @__PURE__ */React.forwardRef(({\n speed = 1,\n ...props\n}, ref) => {\n const [material] = React.useState(() => new WobbleMaterialImpl());\n useFrame(state => material && (material.time = state.clock.elapsedTime * speed));\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n object: material,\n ref: ref,\n attach: \"material\"\n }, props));\n});\n\nexport { MeshWobbleMaterial };\n","import * as THREE from 'three';\nimport { version } from '../helpers/constants.js';\n\nclass ConvolutionMaterial extends THREE.ShaderMaterial {\n constructor(texelSize = new THREE.Vector2()) {\n super({\n uniforms: {\n inputBuffer: new THREE.Uniform(null),\n depthBuffer: new THREE.Uniform(null),\n resolution: new THREE.Uniform(new THREE.Vector2()),\n texelSize: new THREE.Uniform(new THREE.Vector2()),\n halfTexelSize: new THREE.Uniform(new THREE.Vector2()),\n kernel: new THREE.Uniform(0.0),\n scale: new THREE.Uniform(1.0),\n cameraNear: new THREE.Uniform(0.0),\n cameraFar: new THREE.Uniform(1.0),\n minDepthThreshold: new THREE.Uniform(0.0),\n maxDepthThreshold: new THREE.Uniform(1.0),\n depthScale: new THREE.Uniform(0.0),\n depthToBlurRatioBias: new THREE.Uniform(0.25)\n },\n fragmentShader: `#include <common>\n #include <dithering_pars_fragment> \n uniform sampler2D inputBuffer;\n uniform sampler2D depthBuffer;\n uniform float cameraNear;\n uniform float cameraFar;\n uniform float minDepthThreshold;\n uniform float maxDepthThreshold;\n uniform float depthScale;\n uniform float depthToBlurRatioBias;\n varying vec2 vUv;\n varying vec2 vUv0;\n varying vec2 vUv1;\n varying vec2 vUv2;\n varying vec2 vUv3;\n\n void main() {\n float depthFactor = 0.0;\n \n #ifdef USE_DEPTH\n vec4 depth = texture2D(depthBuffer, vUv);\n depthFactor = smoothstep(minDepthThreshold, maxDepthThreshold, 1.0-(depth.r * depth.a));\n depthFactor *= depthScale;\n depthFactor = max(0.0, min(1.0, depthFactor + 0.25));\n #endif\n \n vec4 sum = texture2D(inputBuffer, mix(vUv0, vUv, depthFactor));\n sum += texture2D(inputBuffer, mix(vUv1, vUv, depthFactor));\n sum += texture2D(inputBuffer, mix(vUv2, vUv, depthFactor));\n sum += texture2D(inputBuffer, mix(vUv3, vUv, depthFactor));\n gl_FragColor = sum * 0.25 ;\n\n #include <dithering_fragment>\n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }`,\n vertexShader: `uniform vec2 texelSize;\n uniform vec2 halfTexelSize;\n uniform float kernel;\n uniform float scale;\n varying vec2 vUv;\n varying vec2 vUv0;\n varying vec2 vUv1;\n varying vec2 vUv2;\n varying vec2 vUv3;\n\n void main() {\n vec2 uv = position.xy * 0.5 + 0.5;\n vUv = uv;\n\n vec2 dUv = (texelSize * vec2(kernel) + halfTexelSize) * scale;\n vUv0 = vec2(uv.x - dUv.x, uv.y + dUv.y);\n vUv1 = vec2(uv.x + dUv.x, uv.y + dUv.y);\n vUv2 = vec2(uv.x + dUv.x, uv.y - dUv.y);\n vUv3 = vec2(uv.x - dUv.x, uv.y - dUv.y);\n\n gl_Position = vec4(position.xy, 1.0, 1.0);\n }`,\n blending: THREE.NoBlending,\n depthWrite: false,\n depthTest: false\n });\n this.toneMapped = false;\n this.setTexelSize(texelSize.x, texelSize.y);\n this.kernel = new Float32Array([0.0, 1.0, 2.0, 2.0, 3.0]);\n }\n setTexelSize(x, y) {\n this.uniforms.texelSize.value.set(x, y);\n this.uniforms.halfTexelSize.value.set(x, y).multiplyScalar(0.5);\n }\n setResolution(resolution) {\n this.uniforms.resolution.value.copy(resolution);\n }\n}\n\nexport { ConvolutionMaterial };\n","import { WebGLRenderTarget, LinearFilter, HalfFloatType, Vector2, Scene, Camera, BufferGeometry, BufferAttribute, Mesh } from 'three';\nimport { ConvolutionMaterial } from './ConvolutionMaterial.js';\n\nclass BlurPass {\n constructor({\n gl,\n resolution,\n width = 500,\n height = 500,\n minDepthThreshold = 0,\n maxDepthThreshold = 1,\n depthScale = 0,\n depthToBlurRatioBias = 0.25\n }) {\n this.renderToScreen = false;\n this.renderTargetA = new WebGLRenderTarget(resolution, resolution, {\n minFilter: LinearFilter,\n magFilter: LinearFilter,\n stencilBuffer: false,\n depthBuffer: false,\n type: HalfFloatType\n });\n this.renderTargetB = this.renderTargetA.clone();\n this.convolutionMaterial = new ConvolutionMaterial();\n this.convolutionMaterial.setTexelSize(1.0 / width, 1.0 / height);\n this.convolutionMaterial.setResolution(new Vector2(width, height));\n this.scene = new Scene();\n this.camera = new Camera();\n this.convolutionMaterial.uniforms.minDepthThreshold.value = minDepthThreshold;\n this.convolutionMaterial.uniforms.maxDepthThreshold.value = maxDepthThreshold;\n this.convolutionMaterial.uniforms.depthScale.value = depthScale;\n this.convolutionMaterial.uniforms.depthToBlurRatioBias.value = depthToBlurRatioBias;\n this.convolutionMaterial.defines.USE_DEPTH = depthScale > 0;\n const vertices = new Float32Array([-1, -1, 0, 3, -1, 0, -1, 3, 0]);\n const uvs = new Float32Array([0, 0, 2, 0, 0, 2]);\n const geometry = new BufferGeometry();\n geometry.setAttribute('position', new BufferAttribute(vertices, 3));\n geometry.setAttribute('uv', new BufferAttribute(uvs, 2));\n this.screen = new Mesh(geometry, this.convolutionMaterial);\n this.screen.frustumCulled = false;\n this.scene.add(this.screen);\n }\n render(renderer, inputBuffer, outputBuffer) {\n const scene = this.scene;\n const camera = this.camera;\n const renderTargetA = this.renderTargetA;\n const renderTargetB = this.renderTargetB;\n let material = this.convolutionMaterial;\n let uniforms = material.uniforms;\n uniforms.depthBuffer.value = inputBuffer.depthTexture;\n const kernel = material.kernel;\n let lastRT = inputBuffer;\n let destRT;\n let i, l;\n // Apply the multi-pass blur.\n for (i = 0, l = kernel.length - 1; i < l; ++i) {\n // Alternate between targets.\n destRT = (i & 1) === 0 ? renderTargetA : renderTargetB;\n uniforms.kernel.value = kernel[i];\n uniforms.inputBuffer.value = lastRT.texture;\n renderer.setRenderTarget(destRT);\n renderer.render(scene, camera);\n lastRT = destRT;\n }\n uniforms.kernel.value = kernel[i];\n uniforms.inputBuffer.value = lastRT.texture;\n renderer.setRenderTarget(this.renderToScreen ? null : outputBuffer);\n renderer.render(scene, camera);\n }\n}\n\nexport { BlurPass };\n","import { MeshStandardMaterial } from 'three';\n\nclass MeshReflectorMaterial extends MeshStandardMaterial {\n constructor(parameters = {}) {\n super(parameters);\n this._tDepth = {\n value: null\n };\n this._distortionMap = {\n value: null\n };\n this._tDiffuse = {\n value: null\n };\n this._tDiffuseBlur = {\n value: null\n };\n this._textureMatrix = {\n value: null\n };\n this._hasBlur = {\n value: false\n };\n this._mirror = {\n value: 0.0\n };\n this._mixBlur = {\n value: 0.0\n };\n this._blurStrength = {\n value: 0.5\n };\n this._minDepthThreshold = {\n value: 0.9\n };\n this._maxDepthThreshold = {\n value: 1\n };\n this._depthScale = {\n value: 0\n };\n this._depthToBlurRatioBias = {\n value: 0.25\n };\n this._distortion = {\n value: 1\n };\n this._mixContrast = {\n value: 1.0\n };\n this.setValues(parameters);\n }\n onBeforeCompile(shader) {\n var _shader$defines;\n if (!((_shader$defines = shader.defines) != null && _shader$defines.USE_UV)) {\n shader.defines.USE_UV = '';\n }\n shader.uniforms.hasBlur = this._hasBlur;\n shader.uniforms.tDiffuse = this._tDiffuse;\n shader.uniforms.tDepth = this._tDepth;\n shader.uniforms.distortionMap = this._distortionMap;\n shader.uniforms.tDiffuseBlur = this._tDiffuseBlur;\n shader.uniforms.textureMatrix = this._textureMatrix;\n shader.uniforms.mirror = this._mirror;\n shader.uniforms.mixBlur = this._mixBlur;\n shader.uniforms.mixStrength = this._blurStrength;\n shader.uniforms.minDepthThreshold = this._minDepthThreshold;\n shader.uniforms.maxDepthThreshold = this._maxDepthThreshold;\n shader.uniforms.depthScale = this._depthScale;\n shader.uniforms.depthToBlurRatioBias = this._depthToBlurRatioBias;\n shader.uniforms.distortion = this._distortion;\n shader.uniforms.mixContrast = this._mixContrast;\n shader.vertexShader = `\n uniform mat4 textureMatrix;\n varying vec4 my_vUv;\n ${shader.vertexShader}`;\n shader.vertexShader = shader.vertexShader.replace('#include <project_vertex>', `#include <project_vertex>\n my_vUv = textureMatrix * vec4( position, 1.0 );\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );`);\n shader.fragmentShader = `\n uniform sampler2D tDiffuse;\n uniform sampler2D tDiffuseBlur;\n uniform sampler2D tDepth;\n uniform sampler2D distortionMap;\n uniform float distortion;\n uniform float cameraNear;\n\t\t\t uniform float cameraFar;\n uniform bool hasBlur;\n uniform float mixBlur;\n uniform float mirror;\n uniform float mixStrength;\n uniform float minDepthThreshold;\n uniform float maxDepthThreshold;\n uniform float mixContrast;\n uniform float depthScale;\n uniform float depthToBlurRatioBias;\n varying vec4 my_vUv;\n ${shader.fragmentShader}`;\n shader.fragmentShader = shader.fragmentShader.replace('#include <emissivemap_fragment>', `#include <emissivemap_fragment>\n\n float distortionFactor = 0.0;\n #ifdef USE_DISTORTION\n distortionFactor = texture2D(distortionMap, vUv).r * distortion;\n #endif\n\n vec4 new_vUv = my_vUv;\n new_vUv.x += distortionFactor;\n new_vUv.y += distortionFactor;\n\n vec4 base = texture2DProj(tDiffuse, new_vUv);\n vec4 blur = texture2DProj(tDiffuseBlur, new_vUv);\n\n vec4 merge = base;\n\n #ifdef USE_NORMALMAP\n vec2 normal_uv = vec2(0.0);\n vec4 normalColor = texture2D(normalMap, vUv * normalScale);\n vec3 my_normal = normalize( vec3( normalColor.r * 2.0 - 1.0, normalColor.b, normalColor.g * 2.0 - 1.0 ) );\n vec3 coord = new_vUv.xyz / new_vUv.w;\n normal_uv = coord.xy + coord.z * my_normal.xz * 0.05;\n vec4 base_normal = texture2D(tDiffuse, normal_uv);\n vec4 blur_normal = texture2D(tDiffuseBlur, normal_uv);\n merge = base_normal;\n blur = blur_normal;\n #endif\n\n float depthFactor = 0.0001;\n float blurFactor = 0.0;\n\n #ifdef USE_DEPTH\n vec4 depth = texture2DProj(tDepth, new_vUv);\n depthFactor = smoothstep(minDepthThreshold, maxDepthThreshold, 1.0-(depth.r * depth.a));\n depthFactor *= depthScale;\n depthFactor = max(0.0001, min(1.0, depthFactor));\n\n #ifdef USE_BLUR\n blur = blur * min(1.0, depthFactor + depthToBlurRatioBias);\n merge = merge * min(1.0, depthFactor + 0.5);\n #else\n merge = merge * depthFactor;\n #endif\n\n #endif\n\n float reflectorRoughnessFactor = roughness;\n #ifdef USE_ROUGHNESSMAP\n vec4 reflectorTexelRoughness = texture2D( roughnessMap, vUv );\n reflectorRoughnessFactor *= reflectorTexelRoughness.g;\n #endif\n\n #ifdef USE_BLUR\n blurFactor = min(1.0, mixBlur * reflectorRoughnessFactor);\n merge = mix(merge, blur, blurFactor);\n #endif\n\n vec4 newMerge = vec4(0.0, 0.0, 0.0, 1.0);\n newMerge.r = (merge.r - 0.5) * mixContrast + 0.5;\n newMerge.g = (merge.g - 0.5) * mixContrast + 0.5;\n newMerge.b = (merge.b - 0.5) * mixContrast + 0.5;\n\n diffuseColor.rgb = diffuseColor.rgb * ((1.0 - min(1.0, mirror)) + newMerge.rgb * mixStrength);\n `);\n }\n get tDiffuse() {\n return this._tDiffuse.value;\n }\n set tDiffuse(v) {\n this._tDiffuse.value = v;\n }\n get tDepth() {\n return this._tDepth.value;\n }\n set tDepth(v) {\n this._tDepth.value = v;\n }\n get distortionMap() {\n return this._distortionMap.value;\n }\n set distortionMap(v) {\n this._distortionMap.value = v;\n }\n get tDiffuseBlur() {\n return this._tDiffuseBlur.value;\n }\n set tDiffuseBlur(v) {\n this._tDiffuseBlur.value = v;\n }\n get textureMatrix() {\n return this._textureMatrix.value;\n }\n set textureMatrix(v) {\n this._textureMatrix.value = v;\n }\n get hasBlur() {\n return this._hasBlur.value;\n }\n set hasBlur(v) {\n this._hasBlur.value = v;\n }\n get mirror() {\n return this._mirror.value;\n }\n set mirror(v) {\n this._mirror.value = v;\n }\n get mixBlur() {\n return this._mixBlur.value;\n }\n set mixBlur(v) {\n this._mixBlur.value = v;\n }\n get mixStrength() {\n return this._blurStrength.value;\n }\n set mixStrength(v) {\n this._blurStrength.value = v;\n }\n get minDepthThreshold() {\n return this._minDepthThreshold.value;\n }\n set minDepthThreshold(v) {\n this._minDepthThreshold.value = v;\n }\n get maxDepthThreshold() {\n return this._maxDepthThreshold.value;\n }\n set maxDepthThreshold(v) {\n this._maxDepthThreshold.value = v;\n }\n get depthScale() {\n return this._depthScale.value;\n }\n set depthScale(v) {\n this._depthScale.value = v;\n }\n get depthToBlurRatioBias() {\n return this._depthToBlurRatioBias.value;\n }\n set depthToBlurRatioBias(v) {\n this._depthToBlurRatioBias.value = v;\n }\n get distortion() {\n return this._distortion.value;\n }\n set distortion(v) {\n this._distortion.value = v;\n }\n get mixContrast() {\n return this._mixContrast.value;\n }\n set mixContrast(v) {\n this._mixContrast.value = v;\n }\n}\n\nexport { MeshReflectorMaterial };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { Plane, Vector3, Matrix4, Vector4, PerspectiveCamera, WebGLRenderTarget, DepthTexture, DepthFormat, UnsignedShortType, LinearFilter, HalfFloatType } from 'three';\nimport { extend, useThree, useFrame } from '@react-three/fiber';\nimport { BlurPass } from '../materials/BlurPass.js';\nimport { MeshReflectorMaterial as MeshReflectorMaterial$1 } from '../materials/MeshReflectorMaterial.js';\n\nconst MeshReflectorMaterial = /* @__PURE__ */React.forwardRef(({\n mixBlur = 0,\n mixStrength = 1,\n resolution = 256,\n blur = [0, 0],\n minDepthThreshold = 0.9,\n maxDepthThreshold = 1,\n depthScale = 0,\n depthToBlurRatioBias = 0.25,\n mirror = 0,\n distortion = 1,\n mixContrast = 1,\n distortionMap,\n reflectorOffset = 0,\n ...props\n}, ref) => {\n extend({\n MeshReflectorMaterialImpl: MeshReflectorMaterial$1\n });\n const gl = useThree(({\n gl\n }) => gl);\n const camera = useThree(({\n camera\n }) => camera);\n const scene = useThree(({\n scene\n }) => scene);\n blur = Array.isArray(blur) ? blur : [blur, blur];\n const hasBlur = blur[0] + blur[1] > 0;\n const blurX = blur[0];\n const blurY = blur[1];\n const materialRef = React.useRef(null);\n React.useImperativeHandle(ref, () => materialRef.current, []);\n const [reflectorPlane] = React.useState(() => new Plane());\n const [normal] = React.useState(() => new Vector3());\n const [reflectorWorldPosition] = React.useState(() => new Vector3());\n const [cameraWorldPosition] = React.useState(() => new Vector3());\n const [rotationMatrix] = React.useState(() => new Matrix4());\n const [lookAtPosition] = React.useState(() => new Vector3(0, 0, -1));\n const [clipPlane] = React.useState(() => new Vector4());\n const [view] = React.useState(() => new Vector3());\n const [target] = React.useState(() => new Vector3());\n const [q] = React.useState(() => new Vector4());\n const [textureMatrix] = React.useState(() => new Matrix4());\n const [virtualCamera] = React.useState(() => new PerspectiveCamera());\n const beforeRender = React.useCallback(() => {\n var _materialRef$current;\n const parent = materialRef.current.parent || ((_materialRef$current = materialRef.current) == null || (_materialRef$current = _materialRef$current.__r3f.parent) == null ? void 0 : _materialRef$current.object);\n if (!parent) return;\n reflectorWorldPosition.setFromMatrixPosition(parent.matrixWorld);\n cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);\n rotationMatrix.extractRotation(parent.matrixWorld);\n normal.set(0, 0, 1);\n normal.applyMatrix4(rotationMatrix);\n reflectorWorldPosition.addScaledVector(normal, reflectorOffset);\n view.subVectors(reflectorWorldPosition, cameraWorldPosition);\n // Avoid rendering when reflector is facing away\n if (view.dot(normal) > 0) return;\n view.reflect(normal).negate();\n view.add(reflectorWorldPosition);\n rotationMatrix.extractRotation(camera.matrixWorld);\n lookAtPosition.set(0, 0, -1);\n lookAtPosition.applyMatrix4(rotationMatrix);\n lookAtPosition.add(cameraWorldPosition);\n target.subVectors(reflectorWorldPosition, lookAtPosition);\n target.reflect(normal).negate();\n target.add(reflectorWorldPosition);\n virtualCamera.position.copy(view);\n virtualCamera.up.set(0, 1, 0);\n virtualCamera.up.applyMatrix4(rotationMatrix);\n virtualCamera.up.reflect(normal);\n virtualCamera.lookAt(target);\n virtualCamera.far = camera.far; // Used in WebGLBackground\n virtualCamera.updateMatrixWorld();\n virtualCamera.projectionMatrix.copy(camera.projectionMatrix);\n // Update the texture matrix\n textureMatrix.set(0.5, 0.0, 0.0, 0.5, 0.0, 0.5, 0.0, 0.5, 0.0, 0.0, 0.5, 0.5, 0.0, 0.0, 0.0, 1.0);\n textureMatrix.multiply(virtualCamera.projectionMatrix);\n textureMatrix.multiply(virtualCamera.matrixWorldInverse);\n textureMatrix.multiply(parent.matrixWorld);\n // Now update projection matrix with new clip plane, implementing code from: http://www.terathon.com/code/oblique.html\n // Paper explaining this technique: http://www.terathon.com/lengyel/Lengyel-Oblique.pdf\n reflectorPlane.setFromNormalAndCoplanarPoint(normal, reflectorWorldPosition);\n reflectorPlane.applyMatrix4(virtualCamera.matrixWorldInverse);\n clipPlane.set(reflectorPlane.normal.x, reflectorPlane.normal.y, reflectorPlane.normal.z, reflectorPlane.constant);\n const projectionMatrix = virtualCamera.projectionMatrix;\n q.x = (Math.sign(clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0];\n q.y = (Math.sign(clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5];\n q.z = -1.0;\n q.w = (1.0 + projectionMatrix.elements[10]) / projectionMatrix.elements[14];\n // Calculate the scaled plane vector\n clipPlane.multiplyScalar(2.0 / clipPlane.dot(q));\n // Replacing the third row of the projection matrix\n projectionMatrix.elements[2] = clipPlane.x;\n projectionMatrix.elements[6] = clipPlane.y;\n projectionMatrix.elements[10] = clipPlane.z + 1.0;\n projectionMatrix.elements[14] = clipPlane.w;\n }, [camera, reflectorOffset]);\n const [fbo1, fbo2, blurpass, reflectorProps] = React.useMemo(() => {\n const parameters = {\n minFilter: LinearFilter,\n magFilter: LinearFilter,\n type: HalfFloatType\n };\n const fbo1 = new WebGLRenderTarget(resolution, resolution, parameters);\n fbo1.depthBuffer = true;\n fbo1.depthTexture = new DepthTexture(resolution, resolution);\n fbo1.depthTexture.format = DepthFormat;\n fbo1.depthTexture.type = UnsignedShortType;\n const fbo2 = new WebGLRenderTarget(resolution, resolution, parameters);\n const blurpass = new BlurPass({\n gl,\n resolution,\n width: blurX,\n height: blurY,\n minDepthThreshold,\n maxDepthThreshold,\n depthScale,\n depthToBlurRatioBias\n });\n const reflectorProps = {\n mirror,\n textureMatrix,\n mixBlur,\n tDiffuse: fbo1.texture,\n tDepth: fbo1.depthTexture,\n tDiffuseBlur: fbo2.texture,\n hasBlur,\n mixStrength,\n minDepthThreshold,\n maxDepthThreshold,\n depthScale,\n depthToBlurRatioBias,\n distortion,\n distortionMap,\n mixContrast,\n 'defines-USE_BLUR': hasBlur ? '' : undefined,\n 'defines-USE_DEPTH': depthScale > 0 ? '' : undefined,\n 'defines-USE_DISTORTION': distortionMap ? '' : undefined\n };\n return [fbo1, fbo2, blurpass, reflectorProps];\n }, [gl, blurX, blurY, textureMatrix, resolution, mirror, hasBlur, mixBlur, mixStrength, minDepthThreshold, maxDepthThreshold, depthScale, depthToBlurRatioBias, distortion, distortionMap, mixContrast]);\n useFrame(() => {\n var _materialRef$current2;\n const parent = materialRef.current.parent || ((_materialRef$current2 = materialRef.current) == null || (_materialRef$current2 = _materialRef$current2.__r3f.parent) == null ? void 0 : _materialRef$current2.object);\n if (!parent) return;\n parent.visible = false;\n const currentXrEnabled = gl.xr.enabled;\n const currentShadowAutoUpdate = gl.shadowMap.autoUpdate;\n beforeRender();\n gl.xr.enabled = false;\n gl.shadowMap.autoUpdate = false;\n gl.setRenderTarget(fbo1);\n gl.state.buffers.depth.setMask(true);\n if (!gl.autoClear) gl.clear();\n gl.render(scene, virtualCamera);\n if (hasBlur) blurpass.render(gl, fbo1, fbo2);\n gl.xr.enabled = currentXrEnabled;\n gl.shadowMap.autoUpdate = currentShadowAutoUpdate;\n parent.visible = true;\n gl.setRenderTarget(null);\n });\n return /*#__PURE__*/React.createElement(\"meshReflectorMaterialImpl\", _extends({\n attach: \"material\"\n // Defines can't be updated dynamically, so we need to recreate the material\n ,\n key: 'key' + reflectorProps['defines-USE_BLUR'] + reflectorProps['defines-USE_DEPTH'] + reflectorProps['defines-USE_DISTORTION'],\n ref: materialRef\n }, reflectorProps, props));\n});\n\nexport { MeshReflectorMaterial };\n","import * as THREE from 'three';\nimport { shaderMaterial } from '../core/shaderMaterial.js';\nimport { shaderStructs, shaderIntersectFunction, MeshBVHUniformStruct } from 'three-mesh-bvh';\nimport { version } from '../helpers/constants.js';\n\n// Author: N8Programs\nconst MeshRefractionMaterial = /* @__PURE__ */shaderMaterial({\n envMap: null,\n bounces: 3,\n ior: 2.4,\n correctMips: true,\n aberrationStrength: 0.01,\n fresnel: 0,\n bvh: /* @__PURE__ */new MeshBVHUniformStruct(),\n color: /* @__PURE__ */new THREE.Color('white'),\n opacity: 1,\n resolution: /* @__PURE__ */new THREE.Vector2(),\n viewMatrixInverse: /* @__PURE__ */new THREE.Matrix4(),\n projectionMatrixInverse: /* @__PURE__ */new THREE.Matrix4()\n}, /*glsl*/`\n uniform mat4 viewMatrixInverse;\n\n varying vec3 vWorldPosition;\n varying vec3 vNormal;\n varying mat4 vModelMatrixInverse;\n\n #include <color_pars_vertex>\n\n void main() {\n #include <color_vertex>\n\n vec4 transformedNormal = vec4(normal, 0.0);\n vec4 transformedPosition = vec4(position, 1.0);\n #ifdef USE_INSTANCING\n transformedNormal = instanceMatrix * transformedNormal;\n transformedPosition = instanceMatrix * transformedPosition;\n #endif\n\n #ifdef USE_INSTANCING\n vModelMatrixInverse = inverse(modelMatrix * instanceMatrix);\n #else\n vModelMatrixInverse = inverse(modelMatrix);\n #endif\n\n vWorldPosition = (modelMatrix * transformedPosition).xyz;\n vNormal = normalize((viewMatrixInverse * vec4(normalMatrix * transformedNormal.xyz, 0.0)).xyz);\n gl_Position = projectionMatrix * viewMatrix * modelMatrix * transformedPosition;\n }`, /*glsl*/`\n #define ENVMAP_TYPE_CUBE_UV\n precision highp isampler2D;\n precision highp usampler2D;\n varying vec3 vWorldPosition;\n varying vec3 vNormal;\n varying mat4 vModelMatrixInverse;\n\n #include <color_pars_fragment>\n\n #ifdef ENVMAP_TYPE_CUBEM\n uniform samplerCube envMap;\n #else\n uniform sampler2D envMap;\n #endif\n\n uniform float bounces;\n ${shaderStructs}\n ${shaderIntersectFunction}\n uniform BVH bvh;\n uniform float ior;\n uniform bool correctMips;\n uniform vec2 resolution;\n uniform float fresnel;\n uniform mat4 modelMatrix;\n uniform mat4 projectionMatrixInverse;\n uniform mat4 viewMatrixInverse;\n uniform float aberrationStrength;\n uniform vec3 color;\n uniform float opacity;\n\n float fresnelFunc(vec3 viewDirection, vec3 worldNormal) {\n return pow( 1.0 + dot( viewDirection, worldNormal), 10.0 );\n }\n\n vec3 totalInternalReflection(vec3 ro, vec3 rd, vec3 normal, float ior, mat4 modelMatrixInverse) {\n vec3 rayOrigin = ro;\n vec3 rayDirection = rd;\n rayDirection = refract(rayDirection, normal, 1.0 / ior);\n rayOrigin = vWorldPosition + rayDirection * 0.001;\n rayOrigin = (modelMatrixInverse * vec4(rayOrigin, 1.0)).xyz;\n rayDirection = normalize((modelMatrixInverse * vec4(rayDirection, 0.0)).xyz);\n for(float i = 0.0; i < bounces; i++) {\n uvec4 faceIndices = uvec4( 0u );\n vec3 faceNormal = vec3( 0.0, 0.0, 1.0 );\n vec3 barycoord = vec3( 0.0 );\n float side = 1.0;\n float dist = 0.0;\n bvhIntersectFirstHit( bvh, rayOrigin, rayDirection, faceIndices, faceNormal, barycoord, side, dist );\n vec3 hitPos = rayOrigin + rayDirection * max(dist - 0.001, 0.0);\n vec3 tempDir = refract(rayDirection, faceNormal, ior);\n if (length(tempDir) != 0.0) {\n rayDirection = tempDir;\n break;\n }\n rayDirection = reflect(rayDirection, faceNormal);\n rayOrigin = hitPos + rayDirection * 0.01;\n }\n rayDirection = normalize((modelMatrix * vec4(rayDirection, 0.0)).xyz);\n return rayDirection;\n }\n\n #include <common>\n #include <cube_uv_reflection_fragment>\n\n #ifdef ENVMAP_TYPE_CUBEM\n vec4 textureGradient(samplerCube envMap, vec3 rayDirection, vec3 directionCamPerfect) {\n return textureGrad(envMap, rayDirection, dFdx(correctMips ? directionCamPerfect: rayDirection), dFdy(correctMips ? directionCamPerfect: rayDirection));\n }\n #else\n vec4 textureGradient(sampler2D envMap, vec3 rayDirection, vec3 directionCamPerfect) {\n vec2 uvv = equirectUv( rayDirection );\n vec2 smoothUv = equirectUv( directionCamPerfect );\n return textureGrad(envMap, uvv, dFdx(correctMips ? smoothUv : uvv), dFdy(correctMips ? smoothUv : uvv));\n }\n #endif\n\n void main() {\n vec2 uv = gl_FragCoord.xy / resolution;\n vec3 directionCamPerfect = (projectionMatrixInverse * vec4(uv * 2.0 - 1.0, 0.0, 1.0)).xyz;\n directionCamPerfect = (viewMatrixInverse * vec4(directionCamPerfect, 0.0)).xyz;\n directionCamPerfect = normalize(directionCamPerfect);\n vec3 normal = vNormal;\n vec3 rayOrigin = cameraPosition;\n vec3 rayDirection = normalize(vWorldPosition - cameraPosition);\n\n vec4 diffuseColor = vec4(color, opacity);\n #include <color_fragment>\n\n #ifdef CHROMATIC_ABERRATIONS\n vec3 rayDirectionG = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior, 1.0), vModelMatrixInverse);\n #ifdef FAST_CHROMA\n vec3 rayDirectionR = normalize(rayDirectionG + 1.0 * vec3(aberrationStrength / 2.0));\n vec3 rayDirectionB = normalize(rayDirectionG - 1.0 * vec3(aberrationStrength / 2.0));\n #else\n vec3 rayDirectionR = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior * (1.0 - aberrationStrength), 1.0), vModelMatrixInverse);\n vec3 rayDirectionB = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior * (1.0 + aberrationStrength), 1.0), vModelMatrixInverse);\n #endif\n float finalColorR = textureGradient(envMap, rayDirectionR, directionCamPerfect).r;\n float finalColorG = textureGradient(envMap, rayDirectionG, directionCamPerfect).g;\n float finalColorB = textureGradient(envMap, rayDirectionB, directionCamPerfect).b;\n diffuseColor.rgb *= vec3(finalColorR, finalColorG, finalColorB);\n #else\n rayDirection = totalInternalReflection(rayOrigin, rayDirection, normal, max(ior, 1.0), vModelMatrixInverse);\n diffuseColor.rgb *= textureGradient(envMap, rayDirection, directionCamPerfect).rgb;\n #endif\n\n vec3 viewDirection = normalize(vWorldPosition - cameraPosition);\n float nFresnel = fresnelFunc(viewDirection, normal) * fresnel;\n gl_FragColor = vec4(mix(diffuseColor.rgb, vec3(1.0), nFresnel), diffuseColor.a);\n\n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }`);\n\nexport { MeshRefractionMaterial };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useRef, useMemo, useLayoutEffect } from 'react';\nimport { extend, useThree, useFrame } from '@react-three/fiber';\nimport { MeshBVHUniformStruct, MeshBVH, SAH } from 'three-mesh-bvh';\nimport { MeshRefractionMaterial as MeshRefractionMaterial$1 } from '../materials/MeshRefractionMaterial.js';\n\nconst isCubeTexture = def => def && def.isCubeTexture;\nfunction MeshRefractionMaterial({\n aberrationStrength = 0,\n fastChroma = true,\n envMap,\n ...props\n}) {\n extend({\n MeshRefractionMaterial: MeshRefractionMaterial$1\n });\n const material = useRef(null);\n const {\n size\n } = useThree();\n const defines = useMemo(() => {\n var _ref, _envMap$image$;\n const temp = {};\n // Sampler2D and SamplerCube need different defines\n const isCubeMap = isCubeTexture(envMap);\n const w = (_ref = isCubeMap ? (_envMap$image$ = envMap.image[0]) == null ? void 0 : _envMap$image$.width : envMap.image.width) !== null && _ref !== void 0 ? _ref : 1024;\n const cubeSize = w / 4;\n const _lodMax = Math.floor(Math.log2(cubeSize));\n const _cubeSize = Math.pow(2, _lodMax);\n const width = 3 * Math.max(_cubeSize, 16 * 7);\n const height = 4 * _cubeSize;\n if (isCubeMap) temp.ENVMAP_TYPE_CUBEM = '';\n temp.CUBEUV_TEXEL_WIDTH = `${1.0 / width}`;\n temp.CUBEUV_TEXEL_HEIGHT = `${1.0 / height}`;\n temp.CUBEUV_MAX_MIP = `${_lodMax}.0`;\n // Add defines from chromatic aberration\n if (aberrationStrength > 0) temp.CHROMATIC_ABERRATIONS = '';\n if (fastChroma) temp.FAST_CHROMA = '';\n return temp;\n }, [aberrationStrength, fastChroma]);\n useLayoutEffect(() => {\n var _material$current;\n // Get the geometry of this materials parent\n const geometry = (_material$current = material.current) == null || (_material$current = _material$current.__r3f) == null || (_material$current = _material$current.parent) == null || (_material$current = _material$current.object) == null ? void 0 : _material$current.geometry;\n // Update the BVH\n if (geometry) {\n material.current.bvh = new MeshBVHUniformStruct();\n material.current.bvh.updateFrom(new MeshBVH(geometry.clone().toNonIndexed(), {\n strategy: SAH\n }));\n }\n }, []);\n useFrame(({\n camera\n }) => {\n material.current.viewMatrixInverse = camera.matrixWorld;\n material.current.projectionMatrixInverse = camera.projectionMatrixInverse;\n });\n return /*#__PURE__*/React.createElement(\"meshRefractionMaterial\", _extends({\n // @ts-ignore\n key: JSON.stringify(defines)\n // @ts-ignore\n ,\n defines: defines,\n ref: material,\n resolution: [size.width, size.height],\n aberrationStrength: aberrationStrength,\n envMap: envMap\n }, props));\n}\n\nexport { MeshRefractionMaterial };\n","import { shaderMaterial } from '../core/shaderMaterial.js';\n\nconst DiscardMaterial = /* @__PURE__ */shaderMaterial({}, 'void main() { }', 'void main() { gl_FragColor = vec4(0.0, 0.0, 0.0, 0.0); discard; }');\n\nexport { DiscardMaterial };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { extend, useFrame } from '@react-three/fiber';\nimport { useFBO } from './Fbo.js';\nimport { DiscardMaterial } from '../materials/DiscardMaterial.js';\n\nclass MeshTransmissionMaterialImpl extends THREE.MeshPhysicalMaterial {\n constructor(samples = 6, transmissionSampler = false) {\n super();\n this.uniforms = {\n chromaticAberration: {\n value: 0.05\n },\n // Transmission must always be 0, unless transmissionSampler is being used\n transmission: {\n value: 0\n },\n // Instead a workaround is used, see below for reasons why\n _transmission: {\n value: 1\n },\n transmissionMap: {\n value: null\n },\n // Roughness is 1 in THREE.MeshPhysicalMaterial but it makes little sense in a transmission material\n roughness: {\n value: 0\n },\n thickness: {\n value: 0\n },\n thicknessMap: {\n value: null\n },\n attenuationDistance: {\n value: Infinity\n },\n attenuationColor: {\n value: new THREE.Color('white')\n },\n anisotropicBlur: {\n value: 0.1\n },\n time: {\n value: 0\n },\n distortion: {\n value: 0.0\n },\n distortionScale: {\n value: 0.5\n },\n temporalDistortion: {\n value: 0.0\n },\n buffer: {\n value: null\n }\n };\n this.onBeforeCompile = shader => {\n shader.uniforms = {\n ...shader.uniforms,\n ...this.uniforms\n };\n\n // Fix for r153-r156 anisotropy chunks\n // https://github.com/mrdoob/three.js/pull/26716\n if (this.anisotropy > 0) shader.defines.USE_ANISOTROPY = '';\n\n // If the transmission sampler is active inject a flag\n if (transmissionSampler) shader.defines.USE_SAMPLER = '';\n // Otherwise we do use use .transmission and must therefore force USE_TRANSMISSION\n // because threejs won't inject it for us\n else shader.defines.USE_TRANSMISSION = '';\n\n // Head\n shader.fragmentShader = /*glsl*/`\n uniform float chromaticAberration; \n uniform float anisotropicBlur; \n uniform float time;\n uniform float distortion;\n uniform float distortionScale;\n uniform float temporalDistortion;\n uniform sampler2D buffer;\n\n vec3 random3(vec3 c) {\n float j = 4096.0*sin(dot(c,vec3(17.0, 59.4, 15.0)));\n vec3 r;\n r.z = fract(512.0*j);\n j *= .125;\n r.x = fract(512.0*j);\n j *= .125;\n r.y = fract(512.0*j);\n return r-0.5;\n }\n\n uint hash( uint x ) {\n x += ( x << 10u );\n x ^= ( x >> 6u );\n x += ( x << 3u );\n x ^= ( x >> 11u );\n x += ( x << 15u );\n return x;\n }\n\n // Compound versions of the hashing algorithm I whipped together.\n uint hash( uvec2 v ) { return hash( v.x ^ hash(v.y) ); }\n uint hash( uvec3 v ) { return hash( v.x ^ hash(v.y) ^ hash(v.z) ); }\n uint hash( uvec4 v ) { return hash( v.x ^ hash(v.y) ^ hash(v.z) ^ hash(v.w) ); }\n\n // Construct a float with half-open range [0:1] using low 23 bits.\n // All zeroes yields 0.0, all ones yields the next smallest representable value below 1.0.\n float floatConstruct( uint m ) {\n const uint ieeeMantissa = 0x007FFFFFu; // binary32 mantissa bitmask\n const uint ieeeOne = 0x3F800000u; // 1.0 in IEEE binary32\n m &= ieeeMantissa; // Keep only mantissa bits (fractional part)\n m |= ieeeOne; // Add fractional part to 1.0\n float f = uintBitsToFloat( m ); // Range [1:2]\n return f - 1.0; // Range [0:1]\n }\n\n // Pseudo-random value in half-open range [0:1].\n float randomBase( float x ) { return floatConstruct(hash(floatBitsToUint(x))); }\n float randomBase( vec2 v ) { return floatConstruct(hash(floatBitsToUint(v))); }\n float randomBase( vec3 v ) { return floatConstruct(hash(floatBitsToUint(v))); }\n float randomBase( vec4 v ) { return floatConstruct(hash(floatBitsToUint(v))); }\n float rand(float seed) {\n float result = randomBase(vec3(gl_FragCoord.xy, seed));\n return result;\n }\n\n const float F3 = 0.3333333;\n const float G3 = 0.1666667;\n\n float snoise(vec3 p) {\n vec3 s = floor(p + dot(p, vec3(F3)));\n vec3 x = p - s + dot(s, vec3(G3));\n vec3 e = step(vec3(0.0), x - x.yzx);\n vec3 i1 = e*(1.0 - e.zxy);\n vec3 i2 = 1.0 - e.zxy*(1.0 - e);\n vec3 x1 = x - i1 + G3;\n vec3 x2 = x - i2 + 2.0*G3;\n vec3 x3 = x - 1.0 + 3.0*G3;\n vec4 w, d;\n w.x = dot(x, x);\n w.y = dot(x1, x1);\n w.z = dot(x2, x2);\n w.w = dot(x3, x3);\n w = max(0.6 - w, 0.0);\n d.x = dot(random3(s), x);\n d.y = dot(random3(s + i1), x1);\n d.z = dot(random3(s + i2), x2);\n d.w = dot(random3(s + 1.0), x3);\n w *= w;\n w *= w;\n d *= w;\n return dot(d, vec4(52.0));\n }\n\n float snoiseFractal(vec3 m) {\n return 0.5333333* snoise(m)\n +0.2666667* snoise(2.0*m)\n +0.1333333* snoise(4.0*m)\n +0.0666667* snoise(8.0*m);\n }\\n` + shader.fragmentShader;\n\n // Remove transmission\n shader.fragmentShader = shader.fragmentShader.replace('#include <transmission_pars_fragment>', /*glsl*/`\n #ifdef USE_TRANSMISSION\n // Transmission code is based on glTF-Sampler-Viewer\n // https://github.com/KhronosGroup/glTF-Sample-Viewer\n uniform float _transmission;\n uniform float thickness;\n uniform float attenuationDistance;\n uniform vec3 attenuationColor;\n #ifdef USE_TRANSMISSIONMAP\n uniform sampler2D transmissionMap;\n #endif\n #ifdef USE_THICKNESSMAP\n uniform sampler2D thicknessMap;\n #endif\n uniform vec2 transmissionSamplerSize;\n uniform sampler2D transmissionSamplerMap;\n uniform mat4 modelMatrix;\n uniform mat4 projectionMatrix;\n varying vec3 vWorldPosition;\n vec3 getVolumeTransmissionRay( const in vec3 n, const in vec3 v, const in float thickness, const in float ior, const in mat4 modelMatrix ) {\n // Direction of refracted light.\n vec3 refractionVector = refract( - v, normalize( n ), 1.0 / ior );\n // Compute rotation-independant scaling of the model matrix.\n vec3 modelScale;\n modelScale.x = length( vec3( modelMatrix[ 0 ].xyz ) );\n modelScale.y = length( vec3( modelMatrix[ 1 ].xyz ) );\n modelScale.z = length( vec3( modelMatrix[ 2 ].xyz ) );\n // The thickness is specified in local space.\n return normalize( refractionVector ) * thickness * modelScale;\n }\n float applyIorToRoughness( const in float roughness, const in float ior ) {\n // Scale roughness with IOR so that an IOR of 1.0 results in no microfacet refraction and\n // an IOR of 1.5 results in the default amount of microfacet refraction.\n return roughness * clamp( ior * 2.0 - 2.0, 0.0, 1.0 );\n }\n vec4 getTransmissionSample( const in vec2 fragCoord, const in float roughness, const in float ior ) {\n float framebufferLod = log2( transmissionSamplerSize.x ) * applyIorToRoughness( roughness, ior ); \n #ifdef USE_SAMPLER\n #ifdef texture2DLodEXT\n return texture2DLodEXT(transmissionSamplerMap, fragCoord.xy, framebufferLod);\n #else\n return texture2D(transmissionSamplerMap, fragCoord.xy, framebufferLod);\n #endif\n #else\n return texture2D(buffer, fragCoord.xy);\n #endif\n }\n vec3 applyVolumeAttenuation( const in vec3 radiance, const in float transmissionDistance, const in vec3 attenuationColor, const in float attenuationDistance ) {\n if ( isinf( attenuationDistance ) ) {\n // Attenuation distance is +∞, i.e. the transmitted color is not attenuated at all.\n return radiance;\n } else {\n // Compute light attenuation using Beer's law.\n vec3 attenuationCoefficient = -log( attenuationColor ) / attenuationDistance;\n vec3 transmittance = exp( - attenuationCoefficient * transmissionDistance ); // Beer's law\n return transmittance * radiance;\n }\n }\n vec4 getIBLVolumeRefraction( const in vec3 n, const in vec3 v, const in float roughness, const in vec3 diffuseColor,\n const in vec3 specularColor, const in float specularF90, const in vec3 position, const in mat4 modelMatrix,\n const in mat4 viewMatrix, const in mat4 projMatrix, const in float ior, const in float thickness,\n const in vec3 attenuationColor, const in float attenuationDistance ) {\n vec3 transmissionRay = getVolumeTransmissionRay( n, v, thickness, ior, modelMatrix );\n vec3 refractedRayExit = position + transmissionRay;\n // Project refracted vector on the framebuffer, while mapping to normalized device coordinates.\n vec4 ndcPos = projMatrix * viewMatrix * vec4( refractedRayExit, 1.0 );\n vec2 refractionCoords = ndcPos.xy / ndcPos.w;\n refractionCoords += 1.0;\n refractionCoords /= 2.0;\n // Sample framebuffer to get pixel the refracted ray hits.\n vec4 transmittedLight = getTransmissionSample( refractionCoords, roughness, ior );\n vec3 attenuatedColor = applyVolumeAttenuation( transmittedLight.rgb, length( transmissionRay ), attenuationColor, attenuationDistance );\n // Get the specular component.\n vec3 F = EnvironmentBRDF( n, v, specularColor, specularF90, roughness );\n return vec4( ( 1.0 - F ) * attenuatedColor * diffuseColor, transmittedLight.a );\n }\n #endif\\n`);\n\n // Add refraction\n shader.fragmentShader = shader.fragmentShader.replace('#include <transmission_fragment>', /*glsl*/` \n // Improve the refraction to use the world pos\n material.transmission = _transmission;\n material.transmissionAlpha = 1.0;\n material.thickness = thickness;\n material.attenuationDistance = attenuationDistance;\n material.attenuationColor = attenuationColor;\n #ifdef USE_TRANSMISSIONMAP\n material.transmission *= texture2D( transmissionMap, vUv ).r;\n #endif\n #ifdef USE_THICKNESSMAP\n material.thickness *= texture2D( thicknessMap, vUv ).g;\n #endif\n \n vec3 pos = vWorldPosition;\n float runningSeed = 0.0;\n vec3 v = normalize( cameraPosition - pos );\n vec3 n = inverseTransformDirection( normal, viewMatrix );\n vec3 transmission = vec3(0.0);\n float transmissionR, transmissionB, transmissionG;\n float randomCoords = rand(runningSeed++);\n float thickness_smear = thickness * max(pow(roughnessFactor, 0.33), anisotropicBlur);\n vec3 distortionNormal = vec3(0.0);\n vec3 temporalOffset = vec3(time, -time, -time) * temporalDistortion;\n if (distortion > 0.0) {\n distortionNormal = distortion * vec3(snoiseFractal(vec3((pos * distortionScale + temporalOffset))), snoiseFractal(vec3(pos.zxy * distortionScale - temporalOffset)), snoiseFractal(vec3(pos.yxz * distortionScale + temporalOffset)));\n }\n for (float i = 0.0; i < ${samples}.0; i ++) {\n vec3 sampleNorm = normalize(n + roughnessFactor * roughnessFactor * 2.0 * normalize(vec3(rand(runningSeed++) - 0.5, rand(runningSeed++) - 0.5, rand(runningSeed++) - 0.5)) * pow(rand(runningSeed++), 0.33) + distortionNormal);\n transmissionR = getIBLVolumeRefraction(\n sampleNorm, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n pos, modelMatrix, viewMatrix, projectionMatrix, material.ior, material.thickness + thickness_smear * (i + randomCoords) / float(${samples}),\n material.attenuationColor, material.attenuationDistance\n ).r;\n transmissionG = getIBLVolumeRefraction(\n sampleNorm, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n pos, modelMatrix, viewMatrix, projectionMatrix, material.ior * (1.0 + chromaticAberration * (i + randomCoords) / float(${samples})) , material.thickness + thickness_smear * (i + randomCoords) / float(${samples}),\n material.attenuationColor, material.attenuationDistance\n ).g;\n transmissionB = getIBLVolumeRefraction(\n sampleNorm, v, material.roughness, material.diffuseColor, material.specularColor, material.specularF90,\n pos, modelMatrix, viewMatrix, projectionMatrix, material.ior * (1.0 + 2.0 * chromaticAberration * (i + randomCoords) / float(${samples})), material.thickness + thickness_smear * (i + randomCoords) / float(${samples}),\n material.attenuationColor, material.attenuationDistance\n ).b;\n transmission.r += transmissionR;\n transmission.g += transmissionG;\n transmission.b += transmissionB;\n }\n transmission /= ${samples}.0;\n totalDiffuse = mix( totalDiffuse, transmission.rgb, material.transmission );\\n`);\n };\n Object.keys(this.uniforms).forEach(name => Object.defineProperty(this, name, {\n get: () => this.uniforms[name].value,\n set: v => this.uniforms[name].value = v\n }));\n }\n}\nconst MeshTransmissionMaterial = /* @__PURE__ */React.forwardRef(({\n buffer,\n transmissionSampler = false,\n backside = false,\n side = THREE.FrontSide,\n transmission = 1,\n thickness = 0,\n backsideThickness = 0,\n backsideEnvMapIntensity = 1,\n samples = 10,\n resolution,\n backsideResolution,\n background,\n anisotropy,\n anisotropicBlur,\n ...props\n}, fref) => {\n extend({\n MeshTransmissionMaterial: MeshTransmissionMaterialImpl\n });\n const ref = React.useRef(null);\n const [discardMaterial] = React.useState(() => new DiscardMaterial());\n const fboBack = useFBO(backsideResolution || resolution);\n const fboMain = useFBO(resolution);\n let oldBg;\n let oldEnvMapIntensity;\n let oldTone;\n let parent;\n useFrame(state => {\n ref.current.time = state.clock.elapsedTime;\n // Render only if the buffer matches the built-in and no transmission sampler is set\n if (ref.current.buffer === fboMain.texture && !transmissionSampler) {\n var _r3f$parent;\n parent = (_r3f$parent = ref.current.__r3f.parent) == null ? void 0 : _r3f$parent.object;\n if (parent) {\n // Save defaults\n oldTone = state.gl.toneMapping;\n oldBg = state.scene.background;\n oldEnvMapIntensity = ref.current.envMapIntensity;\n\n // Switch off tonemapping lest it double tone maps\n // Save the current background and set the HDR as the new BG\n // Use discardmaterial, the parent will be invisible, but it's shadows will still be cast\n state.gl.toneMapping = THREE.NoToneMapping;\n if (background) state.scene.background = background;\n parent.material = discardMaterial;\n if (backside) {\n // Render into the backside buffer\n state.gl.setRenderTarget(fboBack);\n state.gl.render(state.scene, state.camera);\n // And now prepare the material for the main render using the backside buffer\n parent.material = ref.current;\n parent.material.buffer = fboBack.texture;\n parent.material.thickness = backsideThickness;\n parent.material.side = THREE.BackSide;\n parent.material.envMapIntensity = backsideEnvMapIntensity;\n }\n\n // Render into the main buffer\n state.gl.setRenderTarget(fboMain);\n state.gl.render(state.scene, state.camera);\n parent.material = ref.current;\n parent.material.thickness = thickness;\n parent.material.side = side;\n parent.material.buffer = fboMain.texture;\n parent.material.envMapIntensity = oldEnvMapIntensity;\n\n // Set old state back\n state.scene.background = oldBg;\n state.gl.setRenderTarget(null);\n state.gl.toneMapping = oldTone;\n }\n }\n });\n\n // Forward ref\n React.useImperativeHandle(fref, () => ref.current, []);\n return /*#__PURE__*/React.createElement(\"meshTransmissionMaterial\", _extends({\n // Samples must re-compile the shader so we memoize it\n args: [samples, transmissionSampler],\n ref: ref\n }, props, {\n buffer: buffer || fboMain.texture\n // @ts-ignore\n ,\n _transmission: transmission\n // In order for this to not incur extra cost \"transmission\" must be set to 0 and treated as a reserved prop.\n // This is because THREE.WebGLRenderer will check for transmission > 0 and execute extra renders.\n // The exception is when transmissionSampler is set, in which case we are using three's built in sampler.\n ,\n anisotropicBlur: anisotropicBlur !== null && anisotropicBlur !== void 0 ? anisotropicBlur : anisotropy,\n transmission: transmissionSampler ? transmission : 0,\n thickness: thickness,\n side: side\n }));\n});\n\nexport { MeshTransmissionMaterial };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { extend } from '@react-three/fiber';\nimport { DiscardMaterial } from '../materials/DiscardMaterial.js';\n\nconst MeshDiscardMaterial = /* @__PURE__ */React.forwardRef((props, fref) => {\n extend({\n DiscardMaterialImpl: DiscardMaterial\n });\n return /*#__PURE__*/React.createElement(\"discardMaterialImpl\", _extends({\n ref: fref\n }, props));\n});\n\nexport { MeshDiscardMaterial };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\n\nfunction MultiMaterial(props) {\n const group = React.useRef(null);\n React.useLayoutEffect(() => {\n const parent = group.current.parent;\n const geometry = parent == null ? void 0 : parent.geometry;\n if (geometry) {\n const oldMaterial = parent.material;\n parent.material = group.current.__r3f.children.map(instance => instance.object);\n const oldGroups = [...geometry.groups];\n geometry.clearGroups();\n parent.material.forEach((material, index) => {\n if (index < parent.material.length - 1) material.depthWrite = false;\n geometry.addGroup(0, Infinity, index);\n });\n return () => {\n parent.material = oldMaterial;\n geometry.groups = oldGroups;\n };\n }\n });\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: group\n }, props));\n}\n\nexport { MultiMaterial };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { version } from '../helpers/constants.js';\n\nconst opaque_fragment = version >= 154 ? 'opaque_fragment' : 'output_fragment';\nclass PointMaterialImpl extends THREE.PointsMaterial {\n constructor(props) {\n super(props);\n this.onBeforeCompile = (shader, renderer) => {\n const {\n isWebGL2\n } = renderer.capabilities;\n shader.fragmentShader = shader.fragmentShader.replace(`#include <${opaque_fragment}>`, `\n ${!isWebGL2 ? `#extension GL_OES_standard_derivatives : enable\\n#include <${opaque_fragment}>` : `#include <${opaque_fragment}>`}\n vec2 cxy = 2.0 * gl_PointCoord - 1.0;\n float r = dot(cxy, cxy);\n float delta = fwidth(r); \n float mask = 1.0 - smoothstep(1.0 - delta, 1.0 + delta, r);\n gl_FragColor = vec4(gl_FragColor.rgb, mask * gl_FragColor.a );\n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n `);\n };\n }\n}\nconst PointMaterial = /* @__PURE__ */React.forwardRef((props, ref) => {\n const [material] = React.useState(() => new PointMaterialImpl(null));\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({}, props, {\n object: material,\n ref: ref,\n attach: \"material\"\n }));\n});\n\nexport { PointMaterial, PointMaterialImpl };\n","import * as React from 'react';\nimport * as THREE from 'three';\nimport { useThree } from '@react-three/fiber';\n\n/* Integration and compilation: @N8Programs\n Inspired by:\n https://github.com/mrdoob/three.js/blob/dev/examples/webgl_shadowmap_pcss.html\n https://developer.nvidia.com/gpugems/gpugems2/part-ii-shading-lighting-and-shadows/chapter-17-efficient-soft-edged-shadows-using\n https://developer.download.nvidia.com/whitepapers/2008/PCSS_Integration.pdf\n https://github.com/mrdoob/three.js/blob/master/examples/webgl_shadowmap_pcss.html [spidersharma03]\n https://spline.design/\n Concept:\n https://www.gamedev.net/tutorials/programming/graphics/contact-hardening-soft-shadows-made-fast-r4906/\n Vogel Disk Implementation:\n https://www.shadertoy.com/view/4l3yRM [ashalah]\n High-Frequency Noise Implementation:\n https://www.shadertoy.com/view/tt3fDH [spawner64]\n*/\nconst pcss = ({\n focus = 0,\n size = 25,\n samples = 10\n} = {}) => `\n#define PENUMBRA_FILTER_SIZE float(${size})\n#define RGB_NOISE_FUNCTION(uv) (randRGB(uv))\nvec3 randRGB(vec2 uv) {\n return vec3(\n fract(sin(dot(uv, vec2(12.75613, 38.12123))) * 13234.76575),\n fract(sin(dot(uv, vec2(19.45531, 58.46547))) * 43678.23431),\n fract(sin(dot(uv, vec2(23.67817, 78.23121))) * 93567.23423)\n );\n}\n\nvec3 lowPassRandRGB(vec2 uv) {\n // 3x3 convolution (average)\n // can be implemented as separable with an extra buffer for a total of 6 samples instead of 9\n vec3 result = vec3(0);\n result += RGB_NOISE_FUNCTION(uv + vec2(-1.0, -1.0));\n result += RGB_NOISE_FUNCTION(uv + vec2(-1.0, 0.0));\n result += RGB_NOISE_FUNCTION(uv + vec2(-1.0, +1.0));\n result += RGB_NOISE_FUNCTION(uv + vec2( 0.0, -1.0));\n result += RGB_NOISE_FUNCTION(uv + vec2( 0.0, 0.0));\n result += RGB_NOISE_FUNCTION(uv + vec2( 0.0, +1.0));\n result += RGB_NOISE_FUNCTION(uv + vec2(+1.0, -1.0));\n result += RGB_NOISE_FUNCTION(uv + vec2(+1.0, 0.0));\n result += RGB_NOISE_FUNCTION(uv + vec2(+1.0, +1.0));\n result *= 0.111111111; // 1.0 / 9.0\n return result;\n}\nvec3 highPassRandRGB(vec2 uv) {\n // by subtracting the low-pass signal from the original signal, we're being left with the high-pass signal\n // hp(x) = x - lp(x)\n return RGB_NOISE_FUNCTION(uv) - lowPassRandRGB(uv) + 0.5;\n}\n\n\nvec2 vogelDiskSample(int sampleIndex, int sampleCount, float angle) {\n const float goldenAngle = 2.399963f; // radians\n float r = sqrt(float(sampleIndex) + 0.5f) / sqrt(float(sampleCount));\n float theta = float(sampleIndex) * goldenAngle + angle;\n float sine = sin(theta);\n float cosine = cos(theta);\n return vec2(cosine, sine) * r;\n}\nfloat penumbraSize( const in float zReceiver, const in float zBlocker ) { // Parallel plane estimation\n return (zReceiver - zBlocker) / zBlocker;\n}\nfloat findBlocker(sampler2D shadowMap, vec2 uv, float compare, float angle) {\n float texelSize = 1.0 / float(textureSize(shadowMap, 0).x);\n float blockerDepthSum = float(${focus});\n float blockers = 0.0;\n\n int j = 0;\n vec2 offset = vec2(0.);\n float depth = 0.;\n\n #pragma unroll_loop_start\n for(int i = 0; i < ${samples}; i ++) {\n offset = (vogelDiskSample(j, ${samples}, angle) * texelSize) * 2.0 * PENUMBRA_FILTER_SIZE;\n depth = unpackRGBAToDepth( texture2D( shadowMap, uv + offset));\n if (depth < compare) {\n blockerDepthSum += depth;\n blockers++;\n }\n j++;\n }\n #pragma unroll_loop_end\n\n if (blockers > 0.0) {\n return blockerDepthSum / blockers;\n }\n return -1.0;\n}\n\n \nfloat vogelFilter(sampler2D shadowMap, vec2 uv, float zReceiver, float filterRadius, float angle) {\n float texelSize = 1.0 / float(textureSize(shadowMap, 0).x);\n float shadow = 0.0f;\n int j = 0;\n vec2 vogelSample = vec2(0.0);\n vec2 offset = vec2(0.0);\n #pragma unroll_loop_start\n for (int i = 0; i < ${samples}; i++) {\n vogelSample = vogelDiskSample(j, ${samples}, angle) * texelSize;\n offset = vogelSample * (1.0 + filterRadius * float(${size}));\n shadow += step( zReceiver, unpackRGBAToDepth( texture2D( shadowMap, uv + offset ) ) );\n j++;\n }\n #pragma unroll_loop_end\n return shadow * 1.0 / ${samples}.0;\n}\n\nfloat PCSS (sampler2D shadowMap, vec4 coords) {\n vec2 uv = coords.xy;\n float zReceiver = coords.z; // Assumed to be eye-space z in this code\n float angle = highPassRandRGB(gl_FragCoord.xy).r * PI2;\n float avgBlockerDepth = findBlocker(shadowMap, uv, zReceiver, angle);\n if (avgBlockerDepth == -1.0) {\n return 1.0;\n }\n float penumbraRatio = penumbraSize(zReceiver, avgBlockerDepth);\n return vogelFilter(shadowMap, uv, zReceiver, 1.25 * penumbraRatio, angle);\n}`;\nfunction reset(gl, scene, camera) {\n scene.traverse(object => {\n if (object.material) {\n gl.properties.remove(object.material);\n object.material.dispose == null || object.material.dispose();\n }\n });\n gl.info.programs.length = 0;\n gl.compile(scene, camera);\n}\nfunction SoftShadows({\n focus = 0,\n samples = 10,\n size = 25\n}) {\n const gl = useThree(state => state.gl);\n const scene = useThree(state => state.scene);\n const camera = useThree(state => state.camera);\n React.useEffect(() => {\n const original = THREE.ShaderChunk.shadowmap_pars_fragment;\n THREE.ShaderChunk.shadowmap_pars_fragment = THREE.ShaderChunk.shadowmap_pars_fragment.replace('#ifdef USE_SHADOWMAP', '#ifdef USE_SHADOWMAP\\n' + pcss({\n size,\n samples,\n focus\n })).replace('#if defined( SHADOWMAP_TYPE_PCF )', '\\nreturn PCSS(shadowMap, shadowCoord);\\n#if defined( SHADOWMAP_TYPE_PCF )');\n reset(gl, scene, camera);\n return () => {\n THREE.ShaderChunk.shadowmap_pars_fragment = original;\n reset(gl, scene, camera);\n };\n }, [focus, size, samples]);\n return null;\n}\n\nexport { SoftShadows };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\n\nfunction create(type, effect) {\n const El = type + 'Geometry';\n return /*#__PURE__*/React.forwardRef(({\n args,\n children,\n ...props\n }, fref) => {\n const ref = React.useRef(null);\n React.useImperativeHandle(fref, () => ref.current);\n React.useLayoutEffect(() => void (effect == null ? void 0 : effect(ref.current)));\n return /*#__PURE__*/React.createElement(\"mesh\", _extends({\n ref: ref\n }, props), /*#__PURE__*/React.createElement(El, {\n attach: \"geometry\",\n args: args\n }), children);\n });\n}\nconst Box = /* @__PURE__ */create('box');\nconst Circle = /* @__PURE__ */create('circle');\nconst Cone = /* @__PURE__ */create('cone');\nconst Cylinder = /* @__PURE__ */create('cylinder');\nconst Sphere = /* @__PURE__ */create('sphere');\nconst Plane = /* @__PURE__ */create('plane');\nconst Tube = /* @__PURE__ */create('tube');\nconst Torus = /* @__PURE__ */create('torus');\nconst TorusKnot = /* @__PURE__ */create('torusKnot');\nconst Tetrahedron = /* @__PURE__ */create('tetrahedron');\nconst Ring = /* @__PURE__ */create('ring');\nconst Polyhedron = /* @__PURE__ */create('polyhedron');\nconst Icosahedron = /* @__PURE__ */create('icosahedron');\nconst Octahedron = /* @__PURE__ */create('octahedron');\nconst Dodecahedron = /* @__PURE__ */create('dodecahedron');\nconst Extrude = /* @__PURE__ */create('extrude');\nconst Lathe = /* @__PURE__ */create('lathe');\nconst Capsule = /* @__PURE__ */create('capsule');\nconst Shape = /* @__PURE__ */create('shape', ({\n geometry\n}) => {\n // Calculate UVs (by https://discourse.threejs.org/u/prisoner849)\n // https://discourse.threejs.org/t/custom-shape-in-image-not-working/49348/10\n const pos = geometry.attributes.position;\n const b3 = new THREE.Box3().setFromBufferAttribute(pos);\n const b3size = new THREE.Vector3();\n b3.getSize(b3size);\n const uv = [];\n let x = 0,\n y = 0,\n u = 0,\n v = 0;\n for (let i = 0; i < pos.count; i++) {\n x = pos.getX(i);\n y = pos.getY(i);\n u = (x - b3.min.x) / b3size.x;\n v = (y - b3.min.y) / b3size.y;\n uv.push(u, v);\n }\n geometry.setAttribute('uv', new THREE.Float32BufferAttribute(uv, 2));\n});\n\nexport { Box, Capsule, Circle, Cone, Cylinder, Dodecahedron, Extrude, Icosahedron, Lathe, Octahedron, Plane, Polyhedron, Ring, Shape, Sphere, Tetrahedron, Torus, TorusKnot, Tube };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { Shape } from 'three';\nimport { toCreasedNormals } from 'three-stdlib';\n\nconst eps = 0.00001;\nfunction createShape(width, height, radius0) {\n const shape = new Shape();\n const radius = radius0 - eps;\n shape.absarc(eps, eps, eps, -Math.PI / 2, -Math.PI, true);\n shape.absarc(eps, height - radius * 2, eps, Math.PI, Math.PI / 2, true);\n shape.absarc(width - radius * 2, height - radius * 2, eps, Math.PI / 2, 0, true);\n shape.absarc(width - radius * 2, eps, eps, 0, -Math.PI / 2, true);\n return shape;\n}\nconst RoundedBox = /* @__PURE__ */React.forwardRef(function RoundedBox({\n args: [width = 1, height = 1, depth = 1] = [],\n radius = 0.05,\n steps = 1,\n smoothness = 4,\n bevelSegments = 4,\n creaseAngle = 0.4,\n children,\n ...rest\n}, ref) {\n return /*#__PURE__*/React.createElement(\"mesh\", _extends({\n ref: ref\n }, rest), /*#__PURE__*/React.createElement(RoundedBoxGeometry, {\n args: [width, height, depth],\n radius: radius,\n steps: steps,\n smoothness: smoothness,\n bevelSegments: bevelSegments,\n creaseAngle: creaseAngle\n }), children);\n});\nconst RoundedBoxGeometry = /* @__PURE__ */React.forwardRef(function RoundedBoxGeometry({\n args: [width = 1, height = 1, depth = 1] = [],\n radius = 0.05,\n steps = 1,\n smoothness = 4,\n bevelSegments = 4,\n creaseAngle = 0.4,\n ...rest\n}, ref) {\n const shape = React.useMemo(() => createShape(width, height, radius), [width, height, radius]);\n const params = React.useMemo(() => ({\n depth: depth - radius * 2,\n bevelEnabled: true,\n bevelSegments: bevelSegments * 2,\n steps,\n bevelSize: radius - eps,\n bevelThickness: radius,\n curveSegments: smoothness\n }), [depth, radius, smoothness, bevelSegments, steps]);\n const geomRef = React.useRef(null);\n React.useLayoutEffect(() => {\n if (geomRef.current) {\n geomRef.current.center();\n toCreasedNormals(geomRef.current, creaseAngle);\n }\n }, [shape, params, creaseAngle]);\n React.useImperativeHandle(ref, () => geomRef.current);\n return /*#__PURE__*/React.createElement(\"extrudeGeometry\", _extends({\n ref: geomRef,\n args: [shape, params]\n }, rest));\n});\n\nexport { RoundedBox, RoundedBoxGeometry };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\n\nfunction createScreenQuadGeometry() {\n const geometry = new THREE.BufferGeometry();\n const vertices = new Float32Array([-1, -1, 3, -1, -1, 3]);\n geometry.boundingSphere = new THREE.Sphere();\n geometry.boundingSphere.set(new THREE.Vector3(), Infinity);\n geometry.setAttribute('position', new THREE.BufferAttribute(vertices, 2));\n return geometry;\n}\nconst ScreenQuad = /* @__PURE__ */React.forwardRef(function ScreenQuad({\n children,\n ...restProps\n}, ref) {\n const geometry = React.useMemo(createScreenQuadGeometry, []);\n return /*#__PURE__*/React.createElement(\"mesh\", _extends({\n ref: ref,\n geometry: geometry,\n frustumCulled: false\n }, restProps), children);\n});\n\nexport { ScreenQuad };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\n\nconst Resize = /* @__PURE__ */React.forwardRef(({\n children,\n width,\n height,\n depth,\n box3,\n precise = true,\n ...props\n}, fRef) => {\n const ref = React.useRef(null);\n const outer = React.useRef(null);\n const inner = React.useRef(null);\n React.useLayoutEffect(() => {\n outer.current.matrixWorld.identity();\n let box = box3 || new THREE.Box3().setFromObject(inner.current, precise);\n const w = box.max.x - box.min.x;\n const h = box.max.y - box.min.y;\n const d = box.max.z - box.min.z;\n let dimension = Math.max(w, h, d);\n if (width) dimension = w;\n if (height) dimension = h;\n if (depth) dimension = d;\n outer.current.scale.setScalar(1 / dimension);\n }, [width, height, depth, box3, precise]);\n React.useImperativeHandle(fRef, () => ref.current, []);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref\n }, props), /*#__PURE__*/React.createElement(\"group\", {\n ref: outer\n }, /*#__PURE__*/React.createElement(\"group\", {\n ref: inner\n }, children)));\n});\n\nexport { Resize };\n","import * as React from 'react';\nimport * as THREE from 'three';\nimport { useThree, useFrame } from '@react-three/fiber';\n\nvar AnimationState = /*#__PURE__*/function (AnimationState) {\n AnimationState[AnimationState[\"NONE\"] = 0] = \"NONE\";\n AnimationState[AnimationState[\"START\"] = 1] = \"START\";\n AnimationState[AnimationState[\"ACTIVE\"] = 2] = \"ACTIVE\";\n return AnimationState;\n}(AnimationState || {});\nconst isOrthographic = def => def && def.isOrthographicCamera;\nconst isBox3 = def => def && def.isBox3;\nconst interpolateFuncDefault = t => {\n // Imitates the previously used THREE.MathUtils.damp\n return 1 - Math.exp(-5 * t) + 0.007 * t;\n};\nconst context = /*#__PURE__*/React.createContext(null);\nfunction Bounds({\n children,\n maxDuration = 1.0,\n margin = 1.2,\n observe,\n fit,\n clip,\n interpolateFunc = interpolateFuncDefault,\n onFit\n}) {\n const ref = React.useRef(null);\n const {\n camera,\n size,\n invalidate\n } = useThree();\n const controls = useThree(state => state.controls);\n const onFitRef = React.useRef(onFit);\n onFitRef.current = onFit;\n const origin = React.useRef({\n camPos: new THREE.Vector3(),\n camRot: new THREE.Quaternion(),\n camZoom: 1\n });\n const goal = React.useRef({\n camPos: undefined,\n camRot: undefined,\n camZoom: undefined,\n camUp: undefined,\n target: undefined\n });\n const animationState = React.useRef(AnimationState.NONE);\n const t = React.useRef(0); // represent animation state from 0 to 1\n\n const [box] = React.useState(() => new THREE.Box3());\n const api = React.useMemo(() => {\n function getSize() {\n const boxSize = box.getSize(new THREE.Vector3());\n const center = box.getCenter(new THREE.Vector3());\n const maxSize = Math.max(boxSize.x, boxSize.y, boxSize.z);\n const fitHeightDistance = isOrthographic(camera) ? maxSize * 4 : maxSize / (2 * Math.atan(Math.PI * camera.fov / 360));\n const fitWidthDistance = isOrthographic(camera) ? maxSize * 4 : fitHeightDistance / camera.aspect;\n const distance = margin * Math.max(fitHeightDistance, fitWidthDistance);\n return {\n box,\n size: boxSize,\n center,\n distance\n };\n }\n return {\n getSize,\n refresh(object) {\n if (isBox3(object)) box.copy(object);else {\n const target = object || ref.current;\n if (!target) return this;\n target.updateWorldMatrix(true, true);\n box.setFromObject(target);\n }\n if (box.isEmpty()) {\n const max = camera.position.length() || 10;\n box.setFromCenterAndSize(new THREE.Vector3(), new THREE.Vector3(max, max, max));\n }\n origin.current.camPos.copy(camera.position);\n origin.current.camRot.copy(camera.quaternion);\n isOrthographic(camera) && (origin.current.camZoom = camera.zoom);\n goal.current.camPos = undefined;\n goal.current.camRot = undefined;\n goal.current.camZoom = undefined;\n goal.current.camUp = undefined;\n goal.current.target = undefined;\n return this;\n },\n reset() {\n const {\n center,\n distance\n } = getSize();\n const direction = camera.position.clone().sub(center).normalize();\n goal.current.camPos = center.clone().addScaledVector(direction, distance);\n goal.current.target = center.clone();\n const mCamRot = new THREE.Matrix4().lookAt(goal.current.camPos, goal.current.target, camera.up);\n goal.current.camRot = new THREE.Quaternion().setFromRotationMatrix(mCamRot);\n animationState.current = AnimationState.START;\n t.current = 0;\n return this;\n },\n moveTo(position) {\n goal.current.camPos = Array.isArray(position) ? new THREE.Vector3(...position) : position.clone();\n animationState.current = AnimationState.START;\n t.current = 0;\n return this;\n },\n lookAt({\n target,\n up\n }) {\n goal.current.target = Array.isArray(target) ? new THREE.Vector3(...target) : target.clone();\n if (up) {\n goal.current.camUp = Array.isArray(up) ? new THREE.Vector3(...up) : up.clone();\n } else {\n goal.current.camUp = camera.up.clone();\n }\n const mCamRot = new THREE.Matrix4().lookAt(goal.current.camPos || camera.position, goal.current.target, goal.current.camUp);\n goal.current.camRot = new THREE.Quaternion().setFromRotationMatrix(mCamRot);\n animationState.current = AnimationState.START;\n t.current = 0;\n return this;\n },\n /**\n * @deprecated Use moveTo and lookAt instead\n */\n to({\n position,\n target\n }) {\n return this.moveTo(position).lookAt({\n target\n });\n },\n fit() {\n if (!isOrthographic(camera)) {\n // For non-orthographic cameras, fit should behave exactly like reset\n return this.reset();\n }\n\n // For orthographic cameras, fit should only modify the zoom value\n let maxHeight = 0,\n maxWidth = 0;\n const vertices = [new THREE.Vector3(box.min.x, box.min.y, box.min.z), new THREE.Vector3(box.min.x, box.max.y, box.min.z), new THREE.Vector3(box.min.x, box.min.y, box.max.z), new THREE.Vector3(box.min.x, box.max.y, box.max.z), new THREE.Vector3(box.max.x, box.max.y, box.max.z), new THREE.Vector3(box.max.x, box.max.y, box.min.z), new THREE.Vector3(box.max.x, box.min.y, box.max.z), new THREE.Vector3(box.max.x, box.min.y, box.min.z)];\n\n // Transform the center and each corner to camera space\n const pos = goal.current.camPos || camera.position;\n const target = goal.current.target || (controls == null ? void 0 : controls.target);\n const up = goal.current.camUp || camera.up;\n const mCamWInv = target ? new THREE.Matrix4().lookAt(pos, target, up).setPosition(pos).invert() : camera.matrixWorldInverse;\n for (const v of vertices) {\n v.applyMatrix4(mCamWInv);\n maxHeight = Math.max(maxHeight, Math.abs(v.y));\n maxWidth = Math.max(maxWidth, Math.abs(v.x));\n }\n maxHeight *= 2;\n maxWidth *= 2;\n const zoomForHeight = (camera.top - camera.bottom) / maxHeight;\n const zoomForWidth = (camera.right - camera.left) / maxWidth;\n goal.current.camZoom = Math.min(zoomForHeight, zoomForWidth) / margin;\n animationState.current = AnimationState.START;\n t.current = 0;\n onFitRef.current && onFitRef.current(this.getSize());\n return this;\n },\n clip() {\n const {\n distance\n } = getSize();\n camera.near = distance / 100;\n camera.far = distance * 100;\n camera.updateProjectionMatrix();\n if (controls) {\n controls.maxDistance = distance * 10;\n controls.update();\n }\n invalidate();\n return this;\n }\n };\n }, [box, camera, controls, margin, invalidate]);\n React.useLayoutEffect(() => {\n if (controls) {\n // Try to prevent drag hijacking\n const callback = () => {\n if (controls && goal.current.target && animationState.current !== AnimationState.NONE) {\n const front = new THREE.Vector3().setFromMatrixColumn(camera.matrix, 2);\n const d0 = origin.current.camPos.distanceTo(controls.target);\n const d1 = (goal.current.camPos || origin.current.camPos).distanceTo(goal.current.target);\n const d = (1 - t.current) * d0 + t.current * d1;\n controls.target.copy(camera.position).addScaledVector(front, -d);\n controls.update();\n }\n animationState.current = AnimationState.NONE;\n };\n controls.addEventListener('start', callback);\n return () => controls.removeEventListener('start', callback);\n }\n }, [controls]);\n\n // Scale pointer on window resize\n const count = React.useRef(0);\n React.useLayoutEffect(() => {\n if (observe || count.current++ === 0) {\n api.refresh();\n if (fit) api.reset().fit();\n if (clip) api.clip();\n }\n }, [size, clip, fit, observe, camera, controls]);\n useFrame((state, delta) => {\n // This [additional animation step START] is needed to guarantee that delta used in animation isn't absurdly high (2-3 seconds) which is actually possible if rendering happens on demand...\n if (animationState.current === AnimationState.START) {\n animationState.current = AnimationState.ACTIVE;\n invalidate();\n } else if (animationState.current === AnimationState.ACTIVE) {\n t.current += delta / maxDuration;\n if (t.current >= 1) {\n goal.current.camPos && camera.position.copy(goal.current.camPos);\n goal.current.camRot && camera.quaternion.copy(goal.current.camRot);\n goal.current.camUp && camera.up.copy(goal.current.camUp);\n goal.current.camZoom && isOrthographic(camera) && (camera.zoom = goal.current.camZoom);\n camera.updateMatrixWorld();\n camera.updateProjectionMatrix();\n if (controls && goal.current.target) {\n controls.target.copy(goal.current.target);\n controls.update();\n }\n animationState.current = AnimationState.NONE;\n } else {\n const k = interpolateFunc(t.current);\n goal.current.camPos && camera.position.lerpVectors(origin.current.camPos, goal.current.camPos, k);\n goal.current.camRot && camera.quaternion.slerpQuaternions(origin.current.camRot, goal.current.camRot, k);\n goal.current.camUp && camera.up.set(0, 1, 0).applyQuaternion(camera.quaternion);\n goal.current.camZoom && isOrthographic(camera) && (camera.zoom = (1 - k) * origin.current.camZoom + k * goal.current.camZoom);\n camera.updateMatrixWorld();\n camera.updateProjectionMatrix();\n }\n invalidate();\n }\n });\n return /*#__PURE__*/React.createElement(\"group\", {\n ref: ref\n }, /*#__PURE__*/React.createElement(context.Provider, {\n value: api\n }, children));\n}\nfunction useBounds() {\n return React.useContext(context);\n}\n\nexport { Bounds, useBounds };\n","import * as React from 'react';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { SimplexNoise } from 'three-stdlib';\n\nconst CameraShake = /* @__PURE__ */React.forwardRef(({\n intensity = 1,\n decay,\n decayRate = 0.65,\n maxYaw = 0.1,\n maxPitch = 0.1,\n maxRoll = 0.1,\n yawFrequency = 0.1,\n pitchFrequency = 0.1,\n rollFrequency = 0.1\n}, ref) => {\n const camera = useThree(state => state.camera);\n const defaultControls = useThree(state => state.controls);\n const intensityRef = React.useRef(intensity);\n const initialRotation = React.useRef(camera.rotation.clone());\n const [yawNoise] = React.useState(() => new SimplexNoise());\n const [pitchNoise] = React.useState(() => new SimplexNoise());\n const [rollNoise] = React.useState(() => new SimplexNoise());\n const constrainIntensity = () => {\n if (intensityRef.current < 0 || intensityRef.current > 1) {\n intensityRef.current = intensityRef.current < 0 ? 0 : 1;\n }\n };\n React.useImperativeHandle(ref, () => ({\n getIntensity: () => intensityRef.current,\n setIntensity: val => {\n intensityRef.current = val;\n constrainIntensity();\n }\n }), []);\n React.useEffect(() => {\n if (defaultControls) {\n const callback = () => void (initialRotation.current = camera.rotation.clone());\n defaultControls.addEventListener('change', callback);\n callback();\n return () => void defaultControls.removeEventListener('change', callback);\n }\n }, [camera, defaultControls]);\n useFrame((state, delta) => {\n const shake = Math.pow(intensityRef.current, 2);\n const yaw = maxYaw * shake * yawNoise.noise(state.clock.elapsedTime * yawFrequency, 1);\n const pitch = maxPitch * shake * pitchNoise.noise(state.clock.elapsedTime * pitchFrequency, 1);\n const roll = maxRoll * shake * rollNoise.noise(state.clock.elapsedTime * rollFrequency, 1);\n camera.rotation.set(initialRotation.current.x + pitch, initialRotation.current.y + yaw, initialRotation.current.z + roll);\n if (decay && intensityRef.current > 0) {\n intensityRef.current -= decayRate * delta;\n constrainIntensity();\n }\n });\n return null;\n});\n\nexport { CameraShake };\n","import * as React from 'react';\nimport { useFrame } from '@react-three/fiber';\nimport * as THREE from 'three';\n\nconst Float = /* @__PURE__ */React.forwardRef(({\n children,\n enabled = true,\n speed = 1,\n rotationIntensity = 1,\n floatIntensity = 1,\n floatingRange = [-0.1, 0.1],\n autoInvalidate = false,\n ...props\n}, forwardRef) => {\n const ref = React.useRef(null);\n React.useImperativeHandle(forwardRef, () => ref.current, []);\n const offset = React.useRef(Math.random() * 10000);\n useFrame(state => {\n var _floatingRange$, _floatingRange$2;\n if (!enabled || speed === 0) return;\n if (autoInvalidate) state.invalidate();\n const t = offset.current + state.clock.elapsedTime;\n ref.current.rotation.x = Math.cos(t / 4 * speed) / 8 * rotationIntensity;\n ref.current.rotation.y = Math.sin(t / 4 * speed) / 8 * rotationIntensity;\n ref.current.rotation.z = Math.sin(t / 4 * speed) / 20 * rotationIntensity;\n let yPosition = Math.sin(t / 4 * speed) / 10;\n yPosition = THREE.MathUtils.mapLinear(yPosition, -0.1, 0.1, (_floatingRange$ = floatingRange == null ? void 0 : floatingRange[0]) !== null && _floatingRange$ !== void 0 ? _floatingRange$ : -0.1, (_floatingRange$2 = floatingRange == null ? void 0 : floatingRange[1]) !== null && _floatingRange$2 !== void 0 ? _floatingRange$2 : 0.1);\n ref.current.position.y = yPosition * floatIntensity;\n ref.current.updateMatrix();\n });\n return /*#__PURE__*/React.createElement(\"group\", props, /*#__PURE__*/React.createElement(\"group\", {\n ref: ref,\n matrixAutoUpdate: false\n }, children));\n});\n\nexport { Float };\n","/**\n * @monogrid/gainmap-js v3.4.0\n * With ❤️, by MONOGRID <gainmap@monogrid.com>\n */\n\nimport { ClampToEdgeWrapping, LinearFilter, Scene, OrthographicCamera, HalfFloatType, FloatType, Mesh, PlaneGeometry, WebGLRenderTarget, RGBAFormat, UVMapping, WebGLRenderer, DataTexture, LinearSRGBColorSpace, ShaderMaterial, Texture, MeshBasicMaterial, IntType, ShortType, ByteType, UnsignedIntType, UnsignedByteType } from 'three';\n\nconst getBufferForType = (type, width, height) => {\n let out;\n switch (type) {\n case UnsignedByteType:\n out = new Uint8ClampedArray(width * height * 4);\n break;\n case HalfFloatType:\n out = new Uint16Array(width * height * 4);\n break;\n case UnsignedIntType:\n out = new Uint32Array(width * height * 4);\n break;\n case ByteType:\n out = new Int8Array(width * height * 4);\n break;\n case ShortType:\n out = new Int16Array(width * height * 4);\n break;\n case IntType:\n out = new Int32Array(width * height * 4);\n break;\n case FloatType:\n out = new Float32Array(width * height * 4);\n break;\n default:\n throw new Error('Unsupported data type');\n }\n return out;\n};\nlet _canReadPixelsResult;\n/**\n * Test if this browser implementation can correctly read pixels from the specified\n * Render target type.\n *\n * Runs only once\n *\n * @param type\n * @param renderer\n * @param camera\n * @param renderTargetOptions\n * @returns\n */\nconst canReadPixels = (type, renderer, camera, renderTargetOptions) => {\n if (_canReadPixelsResult !== undefined)\n return _canReadPixelsResult;\n const testRT = new WebGLRenderTarget(1, 1, renderTargetOptions);\n renderer.setRenderTarget(testRT);\n const mesh = new Mesh(new PlaneGeometry(), new MeshBasicMaterial({ color: 0xffffff }));\n renderer.render(mesh, camera);\n renderer.setRenderTarget(null);\n const out = getBufferForType(type, testRT.width, testRT.height);\n renderer.readRenderTargetPixels(testRT, 0, 0, testRT.width, testRT.height, out);\n testRT.dispose();\n mesh.geometry.dispose();\n mesh.material.dispose();\n _canReadPixelsResult = out[0] !== 0;\n return _canReadPixelsResult;\n};\n/**\n * Utility class used for rendering a texture with a material\n *\n * @category Core\n * @group Core\n */\nclass QuadRenderer {\n _renderer;\n _rendererIsDisposable = false;\n _material;\n _scene;\n _camera;\n _quad;\n _renderTarget;\n _width;\n _height;\n _type;\n _colorSpace;\n _supportsReadPixels = true;\n /**\n * Constructs a new QuadRenderer\n *\n * @param options Parameters for this QuadRenderer\n */\n constructor(options) {\n this._width = options.width;\n this._height = options.height;\n this._type = options.type;\n this._colorSpace = options.colorSpace;\n const rtOptions = {\n // fixed options\n format: RGBAFormat,\n depthBuffer: false,\n stencilBuffer: false,\n // user options\n type: this._type, // set in class property\n colorSpace: this._colorSpace, // set in class property\n anisotropy: options.renderTargetOptions?.anisotropy !== undefined ? options.renderTargetOptions?.anisotropy : 1,\n generateMipmaps: options.renderTargetOptions?.generateMipmaps !== undefined ? options.renderTargetOptions?.generateMipmaps : false,\n magFilter: options.renderTargetOptions?.magFilter !== undefined ? options.renderTargetOptions?.magFilter : LinearFilter,\n minFilter: options.renderTargetOptions?.minFilter !== undefined ? options.renderTargetOptions?.minFilter : LinearFilter,\n samples: options.renderTargetOptions?.samples !== undefined ? options.renderTargetOptions?.samples : undefined,\n wrapS: options.renderTargetOptions?.wrapS !== undefined ? options.renderTargetOptions?.wrapS : ClampToEdgeWrapping,\n wrapT: options.renderTargetOptions?.wrapT !== undefined ? options.renderTargetOptions?.wrapT : ClampToEdgeWrapping\n };\n this._material = options.material;\n if (options.renderer) {\n this._renderer = options.renderer;\n }\n else {\n this._renderer = QuadRenderer.instantiateRenderer();\n this._rendererIsDisposable = true;\n }\n this._scene = new Scene();\n this._camera = new OrthographicCamera();\n this._camera.position.set(0, 0, 10);\n this._camera.left = -0.5;\n this._camera.right = 0.5;\n this._camera.top = 0.5;\n this._camera.bottom = -0.5;\n this._camera.updateProjectionMatrix();\n if (!canReadPixels(this._type, this._renderer, this._camera, rtOptions)) {\n let alternativeType;\n switch (this._type) {\n case HalfFloatType:\n alternativeType = this._renderer.extensions.has('EXT_color_buffer_float') ? FloatType : undefined;\n break;\n }\n if (alternativeType !== undefined) {\n console.warn(`This browser does not support reading pixels from ${this._type} RenderTargets, switching to ${FloatType}`);\n this._type = alternativeType;\n }\n else {\n this._supportsReadPixels = false;\n console.warn('This browser dos not support toArray or toDataTexture, calls to those methods will result in an error thrown');\n }\n }\n this._quad = new Mesh(new PlaneGeometry(), this._material);\n this._quad.geometry.computeBoundingBox();\n this._scene.add(this._quad);\n this._renderTarget = new WebGLRenderTarget(this.width, this.height, rtOptions);\n this._renderTarget.texture.mapping = options.renderTargetOptions?.mapping !== undefined ? options.renderTargetOptions?.mapping : UVMapping;\n }\n /**\n * Instantiates a temporary renderer\n *\n * @returns\n */\n static instantiateRenderer() {\n const renderer = new WebGLRenderer();\n renderer.setSize(128, 128);\n // renderer.outputColorSpace = SRGBColorSpace\n // renderer.toneMapping = LinearToneMapping\n // renderer.debug.checkShaderErrors = false\n // this._rendererIsDisposable = true\n return renderer;\n }\n /**\n * Renders the input texture using the specified material\n */\n render = () => {\n this._renderer.setRenderTarget(this._renderTarget);\n try {\n this._renderer.render(this._scene, this._camera);\n }\n catch (e) {\n this._renderer.setRenderTarget(null);\n throw e;\n }\n this._renderer.setRenderTarget(null);\n };\n /**\n * Obtains a Buffer containing the rendered texture.\n *\n * @throws Error if the browser cannot read pixels from this RenderTarget type.\n * @returns a TypedArray containing RGBA values from this renderer\n */\n toArray() {\n if (!this._supportsReadPixels)\n throw new Error('Can\\'t read pixels in this browser');\n const out = getBufferForType(this._type, this._width, this._height);\n this._renderer.readRenderTargetPixels(this._renderTarget, 0, 0, this._width, this._height, out);\n return out;\n }\n /**\n * Performs a readPixel operation in the renderTarget\n * and returns a DataTexture containing the read data\n *\n * @param options options\n * @returns\n */\n toDataTexture(options) {\n const returnValue = new DataTexture(\n // fixed values\n this.toArray(), this.width, this.height, RGBAFormat, this._type, \n // user values\n options?.mapping || UVMapping, options?.wrapS || ClampToEdgeWrapping, options?.wrapT || ClampToEdgeWrapping, options?.magFilter || LinearFilter, options?.minFilter || LinearFilter, options?.anisotropy || 1, \n // fixed value\n LinearSRGBColorSpace);\n // set this afterwards, we can't set it in constructor\n returnValue.generateMipmaps = options?.generateMipmaps !== undefined ? options?.generateMipmaps : false;\n return returnValue;\n }\n /**\n * If using a disposable renderer, it will dispose it.\n */\n disposeOnDemandRenderer() {\n this._renderer.setRenderTarget(null);\n if (this._rendererIsDisposable) {\n this._renderer.dispose();\n this._renderer.forceContextLoss();\n }\n }\n /**\n * Will dispose of **all** assets used by this renderer.\n *\n *\n * @param disposeRenderTarget will dispose of the renderTarget which will not be usable later\n * set this to true if you passed the `renderTarget.texture` to a `PMREMGenerator`\n * or are otherwise done with it.\n *\n * @example\n * ```js\n * const loader = new HDRJPGLoader(renderer)\n * const result = await loader.loadAsync('gainmap.jpeg')\n * const mesh = new Mesh(geometry, new MeshBasicMaterial({ map: result.renderTarget.texture }) )\n * // DO NOT dispose the renderTarget here,\n * // it is used directly in the material\n * result.dispose()\n * ```\n *\n * @example\n * ```js\n * const loader = new HDRJPGLoader(renderer)\n * const pmremGenerator = new PMREMGenerator( renderer );\n * const result = await loader.loadAsync('gainmap.jpeg')\n * const envMap = pmremGenerator.fromEquirectangular(result.renderTarget.texture)\n * const mesh = new Mesh(geometry, new MeshStandardMaterial({ envMap }) )\n * // renderTarget can be disposed here\n * // because it was used to generate a PMREM texture\n * result.dispose(true)\n * ```\n */\n dispose(disposeRenderTarget) {\n this.disposeOnDemandRenderer();\n if (disposeRenderTarget) {\n this.renderTarget.dispose();\n }\n // dispose shader material texture uniforms\n if (this.material instanceof ShaderMaterial) {\n Object.values(this.material.uniforms).forEach(v => {\n if (v.value instanceof Texture)\n v.value.dispose();\n });\n }\n // dispose other material properties\n Object.values(this.material).forEach(value => {\n if (value instanceof Texture)\n value.dispose();\n });\n this.material.dispose();\n this._quad.geometry.dispose();\n }\n /**\n * Width of the texture\n */\n get width() { return this._width; }\n set width(value) {\n this._width = value;\n this._renderTarget.setSize(this._width, this._height);\n }\n /**\n * Height of the texture\n */\n get height() { return this._height; }\n set height(value) {\n this._height = value;\n this._renderTarget.setSize(this._width, this._height);\n }\n /**\n * The renderer used\n */\n get renderer() { return this._renderer; }\n /**\n * The `WebGLRenderTarget` used.\n */\n get renderTarget() { return this._renderTarget; }\n set renderTarget(value) {\n this._renderTarget = value;\n this._width = value.width;\n this._height = value.height;\n // this._type = value.texture.type\n }\n /**\n * The `Material` used.\n */\n get material() { return this._material; }\n /**\n *\n */\n get type() { return this._type; }\n get colorSpace() { return this._colorSpace; }\n}\n\nexport { QuadRenderer as Q };\n","/**\n * @monogrid/gainmap-js v3.4.0\n * With ❤️, by MONOGRID <gainmap@monogrid.com>\n */\n\nimport { SRGBColorSpace, LinearSRGBColorSpace, HalfFloatType, Loader, LoadingManager, Texture, UVMapping, ClampToEdgeWrapping, LinearFilter, LinearMipMapLinearFilter, RGBAFormat, UnsignedByteType } from 'three';\n\n/**\n * Shared decode implementation factory\n * Creates a decode function that prepares a QuadRenderer with the given parameters\n */\nfunction createDecodeFunction(config) {\n return (params) => {\n const { sdr, gainMap, renderer } = params;\n if (sdr.colorSpace !== SRGBColorSpace) {\n console.warn('SDR Colorspace needs to be *SRGBColorSpace*, setting it automatically');\n sdr.colorSpace = SRGBColorSpace;\n }\n sdr.needsUpdate = true;\n if (gainMap.colorSpace !== LinearSRGBColorSpace) {\n console.warn('Gainmap Colorspace needs to be *LinearSRGBColorSpace*, setting it automatically');\n gainMap.colorSpace = LinearSRGBColorSpace;\n }\n gainMap.needsUpdate = true;\n const material = config.createMaterial({\n ...params,\n sdr,\n gainMap\n });\n const quadRenderer = config.createQuadRenderer({\n width: sdr.image.width,\n height: sdr.image.height,\n type: HalfFloatType,\n colorSpace: LinearSRGBColorSpace,\n material,\n renderer,\n renderTargetOptions: params.renderTargetOptions\n });\n return quadRenderer;\n };\n}\n\nclass GainMapNotFoundError extends Error {\n}\n\nclass XMPMetadataNotFoundError extends Error {\n}\n\nconst getXMLValue = (xml, tag, defaultValue) => {\n // Check for attribute format first: tag=\"value\"\n const attributeMatch = new RegExp(`${tag}=\"([^\"]*)\"`, 'i').exec(xml);\n if (attributeMatch)\n return attributeMatch[1];\n // Check for tag format: <tag>value</tag> or <tag><rdf:li>value</rdf:li>...</tag>\n const tagMatch = new RegExp(`<${tag}[^>]*>([\\\\s\\\\S]*?)</${tag}>`, 'i').exec(xml);\n if (tagMatch) {\n // Check if it contains rdf:li elements\n const liValues = tagMatch[1].match(/<rdf:li>([^<]*)<\\/rdf:li>/g);\n if (liValues && liValues.length === 3) {\n return liValues.map(v => v.replace(/<\\/?rdf:li>/g, ''));\n }\n return tagMatch[1].trim();\n }\n if (defaultValue !== undefined)\n return defaultValue;\n throw new Error(`Can't find ${tag} in gainmap metadata`);\n};\nconst extractXMP = (input) => {\n let str;\n // support node test environment\n if (typeof TextDecoder !== 'undefined')\n str = new TextDecoder().decode(input);\n else\n str = input.toString();\n let start = str.indexOf('<x:xmpmeta');\n while (start !== -1) {\n const end = str.indexOf('x:xmpmeta>', start);\n const xmpBlock = str.slice(start, end + 10);\n try {\n const gainMapMin = getXMLValue(xmpBlock, 'hdrgm:GainMapMin', '0');\n const gainMapMax = getXMLValue(xmpBlock, 'hdrgm:GainMapMax');\n const gamma = getXMLValue(xmpBlock, 'hdrgm:Gamma', '1');\n const offsetSDR = getXMLValue(xmpBlock, 'hdrgm:OffsetSDR', '0.015625');\n const offsetHDR = getXMLValue(xmpBlock, 'hdrgm:OffsetHDR', '0.015625');\n // These are always attributes, so we can use a simpler regex\n const hdrCapacityMinMatch = /hdrgm:HDRCapacityMin=\"([^\"]*)\"/.exec(xmpBlock);\n const hdrCapacityMin = hdrCapacityMinMatch ? hdrCapacityMinMatch[1] : '0';\n const hdrCapacityMaxMatch = /hdrgm:HDRCapacityMax=\"([^\"]*)\"/.exec(xmpBlock);\n if (!hdrCapacityMaxMatch)\n throw new Error('Incomplete gainmap metadata');\n const hdrCapacityMax = hdrCapacityMaxMatch[1];\n return {\n gainMapMin: Array.isArray(gainMapMin) ? gainMapMin.map(v => parseFloat(v)) : [parseFloat(gainMapMin), parseFloat(gainMapMin), parseFloat(gainMapMin)],\n gainMapMax: Array.isArray(gainMapMax) ? gainMapMax.map(v => parseFloat(v)) : [parseFloat(gainMapMax), parseFloat(gainMapMax), parseFloat(gainMapMax)],\n gamma: Array.isArray(gamma) ? gamma.map(v => parseFloat(v)) : [parseFloat(gamma), parseFloat(gamma), parseFloat(gamma)],\n offsetSdr: Array.isArray(offsetSDR) ? offsetSDR.map(v => parseFloat(v)) : [parseFloat(offsetSDR), parseFloat(offsetSDR), parseFloat(offsetSDR)],\n offsetHdr: Array.isArray(offsetHDR) ? offsetHDR.map(v => parseFloat(v)) : [parseFloat(offsetHDR), parseFloat(offsetHDR), parseFloat(offsetHDR)],\n hdrCapacityMin: parseFloat(hdrCapacityMin),\n hdrCapacityMax: parseFloat(hdrCapacityMax)\n };\n }\n catch (e) {\n // Continue searching for another xmpmeta block if this one fails\n }\n start = str.indexOf('<x:xmpmeta', end);\n }\n};\n\n/**\n * MPF Extractor (Multi Picture Format Extractor)\n * By Henrik S Nilsson 2019\n *\n * Extracts images stored in images based on the MPF format (found here: https://www.cipa.jp/e/std/std-sec.html\n * under \"CIPA DC-007-Translation-2021 Multi-Picture Format\"\n *\n * Overly commented, and without intention of being complete or production ready.\n * Created to extract depth maps from iPhone images, and to learn about image metadata.\n * Kudos to: Phil Harvey (exiftool), Jaume Sanchez (android-lens-blur-depth-extractor)\n */\nclass MPFExtractor {\n options;\n constructor(options) {\n this.options = {\n debug: options && options.debug !== undefined ? options.debug : false,\n extractFII: options && options.extractFII !== undefined ? options.extractFII : true,\n extractNonFII: options && options.extractNonFII !== undefined ? options.extractNonFII : true\n };\n }\n extract(imageArrayBuffer) {\n return new Promise((resolve, reject) => {\n const debug = this.options.debug;\n const dataView = new DataView(imageArrayBuffer.buffer);\n // If you're executing this line on a big endian machine, it'll be reversed.\n // bigEnd further down though, refers to the endianness of the image itself.\n if (dataView.getUint16(0) !== 0xffd8) {\n reject(new Error('Not a valid jpeg'));\n return;\n }\n const length = dataView.byteLength;\n let offset = 2;\n let loops = 0;\n let marker; // APP# marker\n while (offset < length) {\n if (++loops > 250) {\n reject(new Error(`Found no marker after ${loops} loops 😵`));\n return;\n }\n if (dataView.getUint8(offset) !== 0xff) {\n reject(new Error(`Not a valid marker at offset 0x${offset.toString(16)}, found: 0x${dataView.getUint8(offset).toString(16)}`));\n return;\n }\n marker = dataView.getUint8(offset + 1);\n if (debug)\n console.log(`Marker: ${marker.toString(16)}`);\n if (marker === 0xe2) {\n if (debug)\n console.log('Found APP2 marker (0xffe2)');\n // Works for iPhone 8 Plus, X, and XSMax. Or any photos of MPF format.\n // Great way to visualize image information in html is using Exiftool. E.g.:\n // ./exiftool.exe -htmldump -wantTrailer photo.jpg > photo.html\n const formatPt = offset + 4;\n /*\n * Structure of the MP Format Identifier\n *\n * Offset Addr. | Code (Hex) | Description\n * +00 ff Marker Prefix <-- offset\n * +01 e2 APP2\n * +02 #n APP2 Field Length\n * +03 #n APP2 Field Length\n * +04 4d 'M' <-- formatPt\n * +05 50 'P'\n * +06 46 'F'\n * +07 00 NULL\n * <-- tiffOffset\n */\n if (dataView.getUint32(formatPt) === 0x4d504600) {\n // Found MPF tag, so we start dig out sub images\n const tiffOffset = formatPt + 4;\n let bigEnd; // Endianness from TIFF header\n // Test for TIFF validity and endianness\n // 0x4949 and 0x4D4D ('II' and 'MM') marks Little Endian and Big Endian\n if (dataView.getUint16(tiffOffset) === 0x4949) {\n bigEnd = false;\n }\n else if (dataView.getUint16(tiffOffset) === 0x4d4d) {\n bigEnd = true;\n }\n else {\n reject(new Error('No valid endianness marker found in TIFF header'));\n return;\n }\n if (dataView.getUint16(tiffOffset + 2, !bigEnd) !== 0x002a) {\n reject(new Error('Not valid TIFF data! (no 0x002A marker)'));\n return;\n }\n // 32 bit number stating the offset from the start of the 8 Byte MP Header\n // to MP Index IFD Least possible value is thus 8 (means 0 offset)\n const firstIFDOffset = dataView.getUint32(tiffOffset + 4, !bigEnd);\n if (firstIFDOffset < 0x00000008) {\n reject(new Error('Not valid TIFF data! (First offset less than 8)'));\n return;\n }\n // Move ahead to MP Index IFD\n // Assume we're at the first IFD, so firstIFDOffset points to\n // MP Index IFD and not MP Attributes IFD. (If we try extract from a sub image,\n // we fail silently here due to this assumption)\n // Count (2 Byte) | MP Index Fields a.k.a. MP Entries (count * 12 Byte) | Offset of Next IFD (4 Byte)\n const dirStart = tiffOffset + firstIFDOffset; // Start of IFD (Image File Directory)\n const count = dataView.getUint16(dirStart, !bigEnd); // Count of MPEntries (2 Byte)\n // Extract info from MPEntries (starting after Count)\n const entriesStart = dirStart + 2;\n let numberOfImages = 0;\n for (let i = entriesStart; i < entriesStart + 12 * count; i += 12) {\n // Each entry is 12 Bytes long\n // Check MP Index IFD tags, here we only take tag 0xb001 = Number of images\n if (dataView.getUint16(i, !bigEnd) === 0xb001) {\n // stored in Last 4 bytes of its 12 Byte entry.\n numberOfImages = dataView.getUint32(i + 8, !bigEnd);\n }\n }\n const nextIFDOffsetLen = 4; // 4 Byte offset field that appears after MP Index IFD tags\n const MPImageListValPt = dirStart + 2 + count * 12 + nextIFDOffsetLen;\n const images = [];\n for (let i = MPImageListValPt; i < MPImageListValPt + numberOfImages * 16; i += 16) {\n const image = {\n MPType: dataView.getUint32(i, !bigEnd),\n size: dataView.getUint32(i + 4, !bigEnd),\n // This offset is specified relative to the address of the MP Endian\n // field in the MP Header, unless the image is a First Individual Image,\n // in which case the value of the offset shall be NULL (0x00000000).\n dataOffset: dataView.getUint32(i + 8, !bigEnd),\n dependantImages: dataView.getUint32(i + 12, !bigEnd),\n start: -1,\n end: -1,\n isFII: false\n };\n if (!image.dataOffset) {\n // dataOffset is 0x00000000 for First Individual Image\n image.start = 0;\n image.isFII = true;\n }\n else {\n image.start = tiffOffset + image.dataOffset;\n image.isFII = false;\n }\n image.end = image.start + image.size;\n images.push(image);\n }\n if (this.options.extractNonFII && images.length) {\n const bufferBlob = new Blob([dataView]);\n const imgs = [];\n for (const image of images) {\n if (image.isFII && !this.options.extractFII) {\n continue; // Skip FII\n }\n const imageBlob = bufferBlob.slice(image.start, image.end + 1, 'image/jpeg');\n // we don't need this\n // const imageUrl = URL.createObjectURL(imageBlob)\n // image.img = document.createElement('img')\n // image.img.src = imageUrl\n imgs.push(imageBlob);\n }\n resolve(imgs);\n }\n }\n }\n offset += 2 + dataView.getUint16(offset + 2);\n }\n });\n }\n}\n\n/**\n * Extracts XMP Metadata and the gain map recovery image\n * from a single JPEG file.\n *\n * @category Decoding Functions\n * @group Decoding Functions\n * @param jpegFile an `Uint8Array` containing and encoded JPEG file\n * @returns an sdr `Uint8Array` compressed in JPEG, a gainMap `Uint8Array` compressed in JPEG and the XMP parsed XMP metadata\n * @throws Error if XMP Metadata is not found\n * @throws Error if Gain map image is not found\n * @example\n * import { FileLoader } from 'three'\n * import { extractGainmapFromJPEG } from '@monogrid/gainmap-js'\n *\n * const jpegFile = await new FileLoader()\n * .setResponseType('arraybuffer')\n * .loadAsync('image.jpg')\n *\n * const { sdr, gainMap, metadata } = extractGainmapFromJPEG(jpegFile)\n */\nconst extractGainmapFromJPEG = async (jpegFile) => {\n const metadata = extractXMP(jpegFile);\n if (!metadata)\n throw new XMPMetadataNotFoundError('Gain map XMP metadata not found');\n const mpfExtractor = new MPFExtractor({ extractFII: true, extractNonFII: true });\n const images = await mpfExtractor.extract(jpegFile);\n if (images.length !== 2)\n throw new GainMapNotFoundError('Gain map recovery image not found');\n return {\n sdr: new Uint8Array(await images[0].arrayBuffer()),\n gainMap: new Uint8Array(await images[1].arrayBuffer()),\n metadata\n };\n};\n\n/**\n * private function, async get image from blob\n *\n * @param blob\n * @returns\n */\nconst getHTMLImageFromBlob = (blob) => {\n return new Promise((resolve, reject) => {\n const img = document.createElement('img');\n img.onload = () => { resolve(img); };\n // eslint-disable-next-line @typescript-eslint/prefer-promise-reject-errors\n img.onerror = (e) => { reject(e); };\n img.src = URL.createObjectURL(blob);\n });\n};\n\n/**\n * Shared base class for loaders that extracts common logic\n */\nclass LoaderBaseShared extends Loader {\n _renderer;\n _renderTargetOptions;\n _internalLoadingManager;\n _config;\n constructor(config, manager) {\n super(manager);\n this._config = config;\n if (config.renderer)\n this._renderer = config.renderer;\n this._internalLoadingManager = new LoadingManager();\n }\n setRenderer(renderer) {\n this._renderer = renderer;\n return this;\n }\n setRenderTargetOptions(options) {\n this._renderTargetOptions = options;\n return this;\n }\n prepareQuadRenderer() {\n if (!this._renderer) {\n console.warn('WARNING: A Renderer was not passed to this Loader constructor or in setRenderer, the result of this Loader will need to be converted to a Data Texture with toDataTexture() before you can use it in your renderer.');\n }\n const material = this._config.createMaterial({\n gainMapMax: [1, 1, 1],\n gainMapMin: [0, 0, 0],\n gamma: [1, 1, 1],\n offsetHdr: [1, 1, 1],\n offsetSdr: [1, 1, 1],\n hdrCapacityMax: 1,\n hdrCapacityMin: 0,\n maxDisplayBoost: 1,\n gainMap: new Texture(),\n sdr: new Texture()\n });\n return this._config.createQuadRenderer({\n width: 16,\n height: 16,\n type: HalfFloatType,\n colorSpace: LinearSRGBColorSpace,\n material,\n renderer: this._renderer,\n renderTargetOptions: this._renderTargetOptions\n });\n }\n async processImages(sdrBuffer, gainMapBuffer, imageOrientation) {\n const gainMapBlob = gainMapBuffer ? new Blob([gainMapBuffer], { type: 'image/jpeg' }) : undefined;\n const sdrBlob = new Blob([sdrBuffer], { type: 'image/jpeg' });\n let sdrImage;\n let gainMapImage;\n let needsFlip = false;\n if (typeof createImageBitmap === 'undefined') {\n const res = await Promise.all([\n gainMapBlob ? getHTMLImageFromBlob(gainMapBlob) : Promise.resolve(undefined),\n getHTMLImageFromBlob(sdrBlob)\n ]);\n gainMapImage = res[0];\n sdrImage = res[1];\n needsFlip = imageOrientation === 'flipY';\n }\n else {\n const res = await Promise.all([\n gainMapBlob ? createImageBitmap(gainMapBlob, { imageOrientation: imageOrientation || 'flipY' }) : Promise.resolve(undefined),\n createImageBitmap(sdrBlob, { imageOrientation: imageOrientation || 'flipY' })\n ]);\n gainMapImage = res[0];\n sdrImage = res[1];\n }\n return { sdrImage, gainMapImage, needsFlip };\n }\n createTextures(sdrImage, gainMapImage, needsFlip) {\n const gainMap = new Texture(gainMapImage || new ImageData(2, 2), UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, LinearMipMapLinearFilter, RGBAFormat, UnsignedByteType, 1, LinearSRGBColorSpace);\n gainMap.flipY = needsFlip;\n gainMap.needsUpdate = true;\n const sdr = new Texture(sdrImage, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, LinearMipMapLinearFilter, RGBAFormat, UnsignedByteType, 1, SRGBColorSpace);\n sdr.flipY = needsFlip;\n sdr.needsUpdate = true;\n return { gainMap, sdr };\n }\n updateQuadRenderer(quadRenderer, sdrImage, gainMap, sdr, metadata) {\n quadRenderer.width = sdrImage.width;\n quadRenderer.height = sdrImage.height;\n quadRenderer.material.gainMap = gainMap;\n quadRenderer.material.sdr = sdr;\n quadRenderer.material.gainMapMin = metadata.gainMapMin;\n quadRenderer.material.gainMapMax = metadata.gainMapMax;\n quadRenderer.material.offsetHdr = metadata.offsetHdr;\n quadRenderer.material.offsetSdr = metadata.offsetSdr;\n quadRenderer.material.gamma = metadata.gamma;\n quadRenderer.material.hdrCapacityMin = metadata.hdrCapacityMin;\n quadRenderer.material.hdrCapacityMax = metadata.hdrCapacityMax;\n quadRenderer.material.maxDisplayBoost = Math.pow(2, metadata.hdrCapacityMax);\n quadRenderer.material.needsUpdate = true;\n }\n}\n\nexport { GainMapNotFoundError as G, LoaderBaseShared as L, MPFExtractor as M, XMPMetadataNotFoundError as X, extractXMP as a, createDecodeFunction as c, extractGainmapFromJPEG as e };\n","/**\n * @monogrid/gainmap-js v3.4.0\n * With ❤️, by MONOGRID <gainmap@monogrid.com>\n */\n\nimport { Q as QuadRenderer } from './QuadRenderer-Bj1xl_EK.js';\nimport { c as createDecodeFunction, L as LoaderBaseShared, e as extractGainmapFromJPEG, X as XMPMetadataNotFoundError, G as GainMapNotFoundError } from './Loader-DLI-_JDP.js';\nexport { M as MPFExtractor, a as extractXMP } from './Loader-DLI-_JDP.js';\nimport { ShaderMaterial, NoBlending, Vector3, WebGLRenderer, FileLoader } from 'three';\n\nconst vertexShader = /* glsl */ `\nvarying vec2 vUv;\n\nvoid main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n}\n`;\nconst fragmentShader = /* glsl */ `\n// min half float value\n#define HALF_FLOAT_MIN vec3( -65504, -65504, -65504 )\n// max half float value\n#define HALF_FLOAT_MAX vec3( 65504, 65504, 65504 )\n\nuniform sampler2D sdr;\nuniform sampler2D gainMap;\nuniform vec3 gamma;\nuniform vec3 offsetHdr;\nuniform vec3 offsetSdr;\nuniform vec3 gainMapMin;\nuniform vec3 gainMapMax;\nuniform float weightFactor;\n\nvarying vec2 vUv;\n\nvoid main() {\n vec3 rgb = texture2D( sdr, vUv ).rgb;\n vec3 recovery = texture2D( gainMap, vUv ).rgb;\n vec3 logRecovery = pow( recovery, gamma );\n vec3 logBoost = gainMapMin * ( 1.0 - logRecovery ) + gainMapMax * logRecovery;\n vec3 hdrColor = (rgb + offsetSdr) * exp2( logBoost * weightFactor ) - offsetHdr;\n vec3 clampedHdrColor = max( HALF_FLOAT_MIN, min( HALF_FLOAT_MAX, hdrColor ));\n gl_FragColor = vec4( clampedHdrColor , 1.0 );\n}\n`;\n/**\n * A Material which is able to decode the Gainmap into a full HDR Representation\n *\n * @category Materials\n * @group Materials\n */\nclass GainMapDecoderMaterial extends ShaderMaterial {\n _maxDisplayBoost;\n _hdrCapacityMin;\n _hdrCapacityMax;\n /**\n *\n * @param params\n */\n constructor({ gamma, offsetHdr, offsetSdr, gainMapMin, gainMapMax, maxDisplayBoost, hdrCapacityMin, hdrCapacityMax, sdr, gainMap }) {\n super({\n name: 'GainMapDecoderMaterial',\n vertexShader,\n fragmentShader,\n uniforms: {\n sdr: { value: sdr },\n gainMap: { value: gainMap },\n gamma: { value: new Vector3(1.0 / gamma[0], 1.0 / gamma[1], 1.0 / gamma[2]) },\n offsetHdr: { value: new Vector3().fromArray(offsetHdr) },\n offsetSdr: { value: new Vector3().fromArray(offsetSdr) },\n gainMapMin: { value: new Vector3().fromArray(gainMapMin) },\n gainMapMax: { value: new Vector3().fromArray(gainMapMax) },\n weightFactor: {\n value: (Math.log2(maxDisplayBoost) - hdrCapacityMin) / (hdrCapacityMax - hdrCapacityMin)\n }\n },\n blending: NoBlending,\n depthTest: false,\n depthWrite: false\n });\n this._maxDisplayBoost = maxDisplayBoost;\n this._hdrCapacityMin = hdrCapacityMin;\n this._hdrCapacityMax = hdrCapacityMax;\n this.needsUpdate = true;\n this.uniformsNeedUpdate = true;\n }\n get sdr() { return this.uniforms.sdr.value; }\n set sdr(value) { this.uniforms.sdr.value = value; }\n get gainMap() { return this.uniforms.gainMap.value; }\n set gainMap(value) { this.uniforms.gainMap.value = value; }\n /**\n * @see {@link GainMapMetadata.offsetHdr}\n */\n get offsetHdr() { return this.uniforms.offsetHdr.value.toArray(); }\n set offsetHdr(value) { this.uniforms.offsetHdr.value.fromArray(value); }\n /**\n * @see {@link GainMapMetadata.offsetSdr}\n */\n get offsetSdr() { return this.uniforms.offsetSdr.value.toArray(); }\n set offsetSdr(value) { this.uniforms.offsetSdr.value.fromArray(value); }\n /**\n * @see {@link GainMapMetadata.gainMapMin}\n */\n get gainMapMin() { return this.uniforms.gainMapMin.value.toArray(); }\n set gainMapMin(value) { this.uniforms.gainMapMin.value.fromArray(value); }\n /**\n * @see {@link GainMapMetadata.gainMapMax}\n */\n get gainMapMax() { return this.uniforms.gainMapMax.value.toArray(); }\n set gainMapMax(value) { this.uniforms.gainMapMax.value.fromArray(value); }\n /**\n * @see {@link GainMapMetadata.gamma}\n */\n get gamma() {\n const g = this.uniforms.gamma.value;\n return [1 / g.x, 1 / g.y, 1 / g.z];\n }\n set gamma(value) {\n const g = this.uniforms.gamma.value;\n g.x = 1.0 / value[0];\n g.y = 1.0 / value[1];\n g.z = 1.0 / value[2];\n }\n /**\n * @see {@link GainMapMetadata.hdrCapacityMin}\n * @remarks Logarithmic space\n */\n get hdrCapacityMin() { return this._hdrCapacityMin; }\n set hdrCapacityMin(value) {\n this._hdrCapacityMin = value;\n this.calculateWeight();\n }\n /**\n * @see {@link GainMapMetadata.hdrCapacityMin}\n * @remarks Logarithmic space\n */\n get hdrCapacityMax() { return this._hdrCapacityMax; }\n set hdrCapacityMax(value) {\n this._hdrCapacityMax = value;\n this.calculateWeight();\n }\n /**\n * @see {@link GainmapDecodingParameters.maxDisplayBoost}\n * @remarks Non Logarithmic space\n */\n get maxDisplayBoost() { return this._maxDisplayBoost; }\n set maxDisplayBoost(value) {\n this._maxDisplayBoost = Math.max(1, Math.min(65504, value));\n this.calculateWeight();\n }\n calculateWeight() {\n const val = (Math.log2(this._maxDisplayBoost) - this._hdrCapacityMin) / (this._hdrCapacityMax - this._hdrCapacityMin);\n this.uniforms.weightFactor.value = Math.max(0, Math.min(1, val));\n }\n}\n\nconst decodeImpl = createDecodeFunction({\n renderer: WebGLRenderer,\n createMaterial: (params) => new GainMapDecoderMaterial(params),\n createQuadRenderer: (params) => new QuadRenderer(params)\n});\n/**\n * Decodes a gain map using a WebGL RenderTarget\n *\n * @category Decoding Functions\n * @group Decoding Functions\n * @example\n * import { decode } from '@monogrid/gainmap-js'\n * import {\n * Mesh,\n * MeshBasicMaterial,\n * PerspectiveCamera,\n * PlaneGeometry,\n * Scene,\n * TextureLoader,\n * WebGLRenderer\n * } from 'three'\n *\n * const renderer = new WebGLRenderer()\n *\n * const textureLoader = new TextureLoader()\n *\n * // load SDR Representation\n * const sdr = await textureLoader.loadAsync('sdr.jpg')\n * // load Gain map recovery image\n * const gainMap = await textureLoader.loadAsync('gainmap.jpg')\n * // load metadata\n * const metadata = await (await fetch('metadata.json')).json()\n *\n * const result = decode({\n * sdr,\n * gainMap,\n * // this allows to use `result.renderTarget.texture` directly\n * renderer,\n * // this will restore the full HDR range\n * maxDisplayBoost: Math.pow(2, metadata.hdrCapacityMax),\n * ...metadata\n * })\n *\n * const scene = new Scene()\n * // `result` can be used to populate a Texture\n * const mesh = new Mesh(\n * new PlaneGeometry(),\n * new MeshBasicMaterial({ map: result.renderTarget.texture })\n * )\n * scene.add(mesh)\n * renderer.render(scene, new PerspectiveCamera())\n *\n * // result must be manually disposed\n * // when you are done using it\n * result.dispose()\n *\n * @param params\n * @returns\n * @throws {Error} if the WebGLRenderer fails to render the gain map\n */\nconst decode = (params) => {\n // Ensure renderer is defined for the base function\n if (!params.renderer) {\n throw new Error('Renderer is required for decode function');\n }\n const quadRenderer = decodeImpl({\n ...params,\n renderer: params.renderer\n });\n try {\n quadRenderer.render();\n }\n catch (e) {\n quadRenderer.disposeOnDemandRenderer();\n throw e;\n }\n return quadRenderer;\n};\n\n/**\n * Base class for WebGL loaders\n * @template TUrl - The type of URL used to load resources\n */\nclass LoaderBaseWebGL extends LoaderBaseShared {\n constructor(renderer, manager) {\n super({\n renderer,\n createMaterial: (params) => new GainMapDecoderMaterial(params),\n createQuadRenderer: (params) => new QuadRenderer(params)\n }, manager);\n }\n /**\n * @private\n * @param quadRenderer\n * @param metadata\n * @param sdrBuffer\n * @param gainMapBuffer\n */\n async render(quadRenderer, metadata, sdrBuffer, gainMapBuffer) {\n const { sdrImage, gainMapImage, needsFlip } = await this.processImages(sdrBuffer, gainMapBuffer, 'flipY');\n const { gainMap, sdr } = this.createTextures(sdrImage, gainMapImage, needsFlip);\n this.updateQuadRenderer(quadRenderer, sdrImage, gainMap, sdr, metadata);\n quadRenderer.render();\n }\n}\n\n/**\n * A Three.js Loader for the gain map format.\n *\n * @category Loaders\n * @group Loaders\n *\n * @example\n * import { GainMapLoader } from '@monogrid/gainmap-js'\n * import {\n * EquirectangularReflectionMapping,\n * Mesh,\n * MeshBasicMaterial,\n * PerspectiveCamera,\n * PlaneGeometry,\n * Scene,\n * WebGLRenderer\n * } from 'three'\n *\n * const renderer = new WebGLRenderer()\n *\n * const loader = new GainMapLoader(renderer)\n * .setRenderTargetOptions({ mapping: EquirectangularReflectionMapping })\n *\n * const result = await loader.loadAsync(['sdr.jpeg', 'gainmap.jpeg', 'metadata.json'])\n * // `result` can be used to populate a Texture\n *\n * const scene = new Scene()\n * const mesh = new Mesh(\n * new PlaneGeometry(),\n * new MeshBasicMaterial({ map: result.renderTarget.texture })\n * )\n * scene.add(mesh)\n * renderer.render(scene, new PerspectiveCamera())\n *\n * // Starting from three.js r159\n * // `result.renderTarget.texture` can\n * // also be used as Equirectangular scene background\n * //\n * // it was previously needed to convert it\n * // to a DataTexture with `result.toDataTexture()`\n * scene.background = result.renderTarget.texture\n *\n * // result must be manually disposed\n * // when you are done using it\n * result.dispose()\n *\n */\nclass GainMapLoader extends LoaderBaseWebGL {\n /**\n * Loads a gainmap using separate data\n * * sdr image\n * * gain map image\n * * metadata json\n *\n * useful for webp gain maps\n *\n * @param urls An array in the form of [sdr.jpg, gainmap.jpg, metadata.json]\n * @param onLoad Load complete callback, will receive the result\n * @param onProgress Progress callback, will receive a `ProgressEvent`\n * @param onError Error callback\n * @returns\n */\n load([sdrUrl, gainMapUrl, metadataUrl], onLoad, onProgress, onError) {\n const quadRenderer = this.prepareQuadRenderer();\n let sdr;\n let gainMap;\n let metadata;\n const loadCheck = async () => {\n if (sdr && gainMap && metadata) {\n // solves #16\n try {\n await this.render(quadRenderer, metadata, sdr, gainMap);\n }\n catch (error) {\n this.manager.itemError(sdrUrl);\n this.manager.itemError(gainMapUrl);\n this.manager.itemError(metadataUrl);\n if (typeof onError === 'function')\n onError(error);\n quadRenderer.disposeOnDemandRenderer();\n return;\n }\n if (typeof onLoad === 'function')\n onLoad(quadRenderer);\n this.manager.itemEnd(sdrUrl);\n this.manager.itemEnd(gainMapUrl);\n this.manager.itemEnd(metadataUrl);\n quadRenderer.disposeOnDemandRenderer();\n }\n };\n let sdrLengthComputable = true;\n let sdrTotal = 0;\n let sdrLoaded = 0;\n let gainMapLengthComputable = true;\n let gainMapTotal = 0;\n let gainMapLoaded = 0;\n let metadataLengthComputable = true;\n let metadataTotal = 0;\n let metadataLoaded = 0;\n const progressHandler = () => {\n if (typeof onProgress === 'function') {\n const total = sdrTotal + gainMapTotal + metadataTotal;\n const loaded = sdrLoaded + gainMapLoaded + metadataLoaded;\n const lengthComputable = sdrLengthComputable && gainMapLengthComputable && metadataLengthComputable;\n onProgress(new ProgressEvent('progress', { lengthComputable, loaded, total }));\n }\n };\n this.manager.itemStart(sdrUrl);\n this.manager.itemStart(gainMapUrl);\n this.manager.itemStart(metadataUrl);\n const sdrLoader = new FileLoader(this._internalLoadingManager);\n sdrLoader.setResponseType('arraybuffer');\n sdrLoader.setRequestHeader(this.requestHeader);\n sdrLoader.setPath(this.path);\n sdrLoader.setWithCredentials(this.withCredentials);\n sdrLoader.load(sdrUrl, async (buffer) => {\n /* istanbul ignore if\n this condition exists only because of three.js types + strict mode\n */\n if (typeof buffer === 'string')\n throw new Error('Invalid sdr buffer');\n sdr = buffer;\n await loadCheck();\n }, (e) => {\n sdrLengthComputable = e.lengthComputable;\n sdrLoaded = e.loaded;\n sdrTotal = e.total;\n progressHandler();\n }, (error) => {\n this.manager.itemError(sdrUrl);\n if (typeof onError === 'function')\n onError(error);\n });\n const gainMapLoader = new FileLoader(this._internalLoadingManager);\n gainMapLoader.setResponseType('arraybuffer');\n gainMapLoader.setRequestHeader(this.requestHeader);\n gainMapLoader.setPath(this.path);\n gainMapLoader.setWithCredentials(this.withCredentials);\n gainMapLoader.load(gainMapUrl, async (buffer) => {\n /* istanbul ignore if\n this condition exists only because of three.js types + strict mode\n */\n if (typeof buffer === 'string')\n throw new Error('Invalid gainmap buffer');\n gainMap = buffer;\n await loadCheck();\n }, (e) => {\n gainMapLengthComputable = e.lengthComputable;\n gainMapLoaded = e.loaded;\n gainMapTotal = e.total;\n progressHandler();\n }, (error) => {\n this.manager.itemError(gainMapUrl);\n if (typeof onError === 'function')\n onError(error);\n });\n const metadataLoader = new FileLoader(this._internalLoadingManager);\n // metadataLoader.setResponseType('json')\n metadataLoader.setRequestHeader(this.requestHeader);\n metadataLoader.setPath(this.path);\n metadataLoader.setWithCredentials(this.withCredentials);\n metadataLoader.load(metadataUrl, async (json) => {\n /* istanbul ignore if\n this condition exists only because of three.js types + strict mode\n */\n if (typeof json !== 'string')\n throw new Error('Invalid metadata string');\n // TODO: implement check on JSON file and remove this eslint disable\n // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment\n metadata = JSON.parse(json);\n await loadCheck();\n }, (e) => {\n metadataLengthComputable = e.lengthComputable;\n metadataLoaded = e.loaded;\n metadataTotal = e.total;\n progressHandler();\n }, (error) => {\n this.manager.itemError(metadataUrl);\n if (typeof onError === 'function')\n onError(error);\n });\n return quadRenderer;\n }\n}\n\n/**\n * A Three.js Loader for a JPEG with embedded gainmap metadata.\n *\n * @category Loaders\n * @group Loaders\n *\n * @example\n * import { HDRJPGLoader } from '@monogrid/gainmap-js'\n * import {\n * EquirectangularReflectionMapping,\n * Mesh,\n * MeshBasicMaterial,\n * PerspectiveCamera,\n * PlaneGeometry,\n * Scene,\n * WebGLRenderer\n * } from 'three'\n *\n * const renderer = new WebGLRenderer()\n *\n * const loader = new HDRJPGLoader(renderer)\n * .setRenderTargetOptions({ mapping: EquirectangularReflectionMapping })\n *\n * const result = await loader.loadAsync('gainmap.jpeg')\n * // `result` can be used to populate a Texture\n *\n * const scene = new Scene()\n * const mesh = new Mesh(\n * new PlaneGeometry(),\n * new MeshBasicMaterial({ map: result.renderTarget.texture })\n * )\n * scene.add(mesh)\n * renderer.render(scene, new PerspectiveCamera())\n *\n * // Starting from three.js r159\n * // `result.renderTarget.texture` can\n * // also be used as Equirectangular scene background\n * //\n * // it was previously needed to convert it\n * // to a DataTexture with `result.toDataTexture()`\n * scene.background = result.renderTarget.texture\n *\n * // result must be manually disposed\n * // when you are done using it\n * result.dispose()\n *\n */\nclass HDRJPGLoader extends LoaderBaseWebGL {\n /**\n * Loads a JPEG containing gain map metadata\n * Renders a normal SDR image if gainmap data is not found\n *\n * @param url Path to a JPEG file containing embedded gain map metadata\n * @param onLoad Load complete callback, will receive the result\n * @param onProgress Progress callback, will receive a `ProgressEvent`\n * @param onError Error callback\n * @returns\n */\n load(url, onLoad, onProgress, onError) {\n const quadRenderer = this.prepareQuadRenderer();\n const loader = new FileLoader(this._internalLoadingManager);\n loader.setResponseType('arraybuffer');\n loader.setRequestHeader(this.requestHeader);\n loader.setPath(this.path);\n loader.setWithCredentials(this.withCredentials);\n this.manager.itemStart(url);\n loader.load(url, async (jpeg) => {\n /* istanbul ignore if\n this condition exists only because of three.js types + strict mode\n */\n if (typeof jpeg === 'string')\n throw new Error('Invalid buffer, received [string], was expecting [ArrayBuffer]');\n const jpegBuffer = new Uint8Array(jpeg);\n let sdrJPEG;\n let gainMapJPEG;\n let metadata;\n try {\n const extractionResult = await extractGainmapFromJPEG(jpegBuffer);\n // gain map is successfully reconstructed\n sdrJPEG = extractionResult.sdr;\n gainMapJPEG = extractionResult.gainMap;\n metadata = extractionResult.metadata;\n }\n catch (e) {\n // render the SDR version if this is not a gainmap\n if (e instanceof XMPMetadataNotFoundError || e instanceof GainMapNotFoundError) {\n console.warn(`Failure to reconstruct an HDR image from ${url}: Gain map metadata not found in the file, HDRJPGLoader will render the SDR jpeg`);\n metadata = {\n gainMapMin: [0, 0, 0],\n gainMapMax: [1, 1, 1],\n gamma: [1, 1, 1],\n hdrCapacityMin: 0,\n hdrCapacityMax: 1,\n offsetHdr: [0, 0, 0],\n offsetSdr: [0, 0, 0]\n };\n sdrJPEG = jpegBuffer;\n }\n else {\n throw e;\n }\n }\n // solves #16\n try {\n await this.render(quadRenderer, metadata, sdrJPEG.buffer, gainMapJPEG?.buffer);\n }\n catch (error) {\n this.manager.itemError(url);\n if (typeof onError === 'function')\n onError(error);\n quadRenderer.disposeOnDemandRenderer();\n return;\n }\n if (typeof onLoad === 'function')\n onLoad(quadRenderer);\n this.manager.itemEnd(url);\n quadRenderer.disposeOnDemandRenderer();\n }, onProgress, (error) => {\n this.manager.itemError(url);\n if (typeof onError === 'function')\n onError(error);\n });\n return quadRenderer;\n }\n}\n\nexport { GainMapDecoderMaterial, GainMapLoader, GainMapNotFoundError, HDRJPGLoader, HDRJPGLoader as JPEGRLoader, LoaderBaseShared, QuadRenderer, XMPMetadataNotFoundError, createDecodeFunction, decode, extractGainmapFromJPEG };\n","const presetsObj = {\n apartment: 'lebombo_1k.hdr',\n city: 'potsdamer_platz_1k.hdr',\n dawn: 'kiara_1_dawn_1k.hdr',\n forest: 'forest_slope_1k.hdr',\n lobby: 'st_fagans_interior_1k.hdr',\n night: 'dikhololo_night_1k.hdr',\n park: 'rooitou_park_1k.hdr',\n studio: 'studio_small_03_1k.hdr',\n sunset: 'venice_sunset_1k.hdr',\n warehouse: 'empty_warehouse_01_1k.hdr'\n};\n\nexport { presetsObj };\n","import { useThree, useLoader } from '@react-three/fiber';\nimport { CubeReflectionMapping, EquirectangularReflectionMapping, CubeTextureLoader } from 'three';\nimport { RGBELoader, EXRLoader } from 'three-stdlib';\nimport { HDRJPGLoader, GainMapLoader } from '@monogrid/gainmap-js';\nimport { presetsObj } from '../helpers/environment-assets.js';\nimport { useLayoutEffect } from 'react';\n\nconst CUBEMAP_ROOT = 'https://raw.githack.com/pmndrs/drei-assets/456060a26bbeb8fdf79326f224b6d99b8bcce736/hdri/';\nconst isArray = arr => Array.isArray(arr);\nconst defaultFiles = ['/px.png', '/nx.png', '/py.png', '/ny.png', '/pz.png', '/nz.png'];\nfunction useEnvironment({\n files = defaultFiles,\n path = '',\n preset = undefined,\n colorSpace = undefined,\n extensions\n} = {}) {\n if (preset) {\n validatePreset(preset);\n files = presetsObj[preset];\n path = CUBEMAP_ROOT;\n }\n\n // Everything else\n const multiFile = isArray(files);\n const {\n extension,\n isCubemap\n } = getExtension(files);\n const loader = getLoader(extension);\n if (!loader) throw new Error('useEnvironment: Unrecognized file extension: ' + files);\n const gl = useThree(state => state.gl);\n useLayoutEffect(() => {\n // Only required for gainmap\n if (extension !== 'webp' && extension !== 'jpg' && extension !== 'jpeg') return;\n function clearGainmapTexture() {\n useLoader.clear(loader, multiFile ? [files] : files);\n }\n gl.domElement.addEventListener('webglcontextlost', clearGainmapTexture, {\n once: true\n });\n }, [files, gl.domElement]);\n const loaderResult = useLoader(loader, multiFile ? [files] : files, loader => {\n // Gainmap requires a renderer\n if (extension === 'webp' || extension === 'jpg' || extension === 'jpeg') {\n // @ts-expect-error\n loader.setRenderer(gl);\n }\n loader.setPath == null || loader.setPath(path);\n // @ts-expect-error\n if (extensions) extensions(loader);\n });\n let texture = multiFile ?\n // @ts-ignore\n loaderResult[0] : loaderResult;\n if (extension === 'jpg' || extension === 'jpeg' || extension === 'webp') {\n var _renderTarget;\n texture = (_renderTarget = texture.renderTarget) == null ? void 0 : _renderTarget.texture;\n }\n texture.mapping = isCubemap ? CubeReflectionMapping : EquirectangularReflectionMapping;\n texture.colorSpace = colorSpace !== null && colorSpace !== void 0 ? colorSpace : isCubemap ? 'srgb' : 'srgb-linear';\n return texture;\n}\nconst preloadDefaultOptions = {\n files: defaultFiles,\n path: '',\n preset: undefined,\n extensions: undefined\n};\nuseEnvironment.preload = preloadOptions => {\n const options = {\n ...preloadDefaultOptions,\n ...preloadOptions\n };\n let {\n files,\n path = ''\n } = options;\n const {\n preset,\n extensions\n } = options;\n if (preset) {\n validatePreset(preset);\n files = presetsObj[preset];\n path = CUBEMAP_ROOT;\n }\n const {\n extension\n } = getExtension(files);\n if (extension === 'webp' || extension === 'jpg' || extension === 'jpeg') {\n throw new Error('useEnvironment: Preloading gainmaps is not supported');\n }\n const loader = getLoader(extension);\n if (!loader) throw new Error('useEnvironment: Unrecognized file extension: ' + files);\n useLoader.preload(loader, isArray(files) ? [files] : files, loader => {\n loader.setPath == null || loader.setPath(path);\n // @ts-expect-error\n if (extensions) extensions(loader);\n });\n};\nconst clearDefaultOptins = {\n files: defaultFiles,\n preset: undefined\n};\nuseEnvironment.clear = clearOptions => {\n const options = {\n ...clearDefaultOptins,\n ...clearOptions\n };\n let {\n files\n } = options;\n const {\n preset\n } = options;\n if (preset) {\n validatePreset(preset);\n files = presetsObj[preset];\n }\n const {\n extension\n } = getExtension(files);\n const loader = getLoader(extension);\n if (!loader) throw new Error('useEnvironment: Unrecognized file extension: ' + files);\n useLoader.clear(loader, isArray(files) ? [files] : files);\n};\nfunction validatePreset(preset) {\n if (!(preset in presetsObj)) throw new Error('Preset must be one of: ' + Object.keys(presetsObj).join(', '));\n}\nfunction getExtension(files) {\n var _firstEntry$split$pop;\n const isCubemap = isArray(files) && files.length === 6;\n const isGainmap = isArray(files) && files.length === 3 && files.some(file => file.endsWith('json'));\n const firstEntry = isArray(files) ? files[0] : files;\n\n // Everything else\n const extension = isCubemap ? 'cube' : isGainmap ? 'webp' : firstEntry.startsWith('data:application/exr') ? 'exr' : firstEntry.startsWith('data:application/hdr') ? 'hdr' : firstEntry.startsWith('data:image/jpeg') ? 'jpg' : (_firstEntry$split$pop = firstEntry.split('.').pop()) == null || (_firstEntry$split$pop = _firstEntry$split$pop.split('?')) == null || (_firstEntry$split$pop = _firstEntry$split$pop.shift()) == null ? void 0 : _firstEntry$split$pop.toLowerCase();\n return {\n extension,\n isCubemap,\n isGainmap\n };\n}\nfunction getLoader(extension) {\n const loader = extension === 'cube' ? CubeTextureLoader : extension === 'hdr' ? RGBELoader : extension === 'exr' ? EXRLoader : extension === 'jpg' || extension === 'jpeg' ? HDRJPGLoader : extension === 'webp' ? GainMapLoader : null;\n return loader;\n}\n\nexport { useEnvironment };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useThree, useFrame, createPortal, applyProps, extend } from '@react-three/fiber';\nimport { Scene, WebGLCubeRenderTarget, HalfFloatType } from 'three';\nimport { GroundProjectedEnv } from 'three-stdlib';\nimport { useEnvironment } from './useEnvironment.js';\n\nconst isRef = obj => obj.current && obj.current.isScene;\nconst resolveScene = scene => isRef(scene) ? scene.current : scene;\nfunction setEnvProps(background, scene, defaultScene, texture, sceneProps = {}) {\n var _target$backgroundRot, _target$backgroundRot2, _target$environmentRo, _target$environmentRo2;\n // defaults\n sceneProps = {\n backgroundBlurriness: 0,\n backgroundIntensity: 1,\n backgroundRotation: [0, 0, 0],\n environmentIntensity: 1,\n environmentRotation: [0, 0, 0],\n ...sceneProps\n };\n const target = resolveScene(scene || defaultScene);\n const oldbg = target.background;\n const oldenv = target.environment;\n const oldSceneProps = {\n // @ts-ignore\n backgroundBlurriness: target.backgroundBlurriness,\n // @ts-ignore\n backgroundIntensity: target.backgroundIntensity,\n // @ts-ignore\n backgroundRotation: (_target$backgroundRot = (_target$backgroundRot2 = target.backgroundRotation) == null || _target$backgroundRot2.clone == null ? void 0 : _target$backgroundRot2.clone()) !== null && _target$backgroundRot !== void 0 ? _target$backgroundRot : [0, 0, 0],\n // @ts-ignore\n environmentIntensity: target.environmentIntensity,\n // @ts-ignore\n environmentRotation: (_target$environmentRo = (_target$environmentRo2 = target.environmentRotation) == null || _target$environmentRo2.clone == null ? void 0 : _target$environmentRo2.clone()) !== null && _target$environmentRo !== void 0 ? _target$environmentRo : [0, 0, 0]\n };\n if (background !== 'only') target.environment = texture;\n if (background) target.background = texture;\n applyProps(target, sceneProps);\n return () => {\n if (background !== 'only') target.environment = oldenv;\n if (background) target.background = oldbg;\n applyProps(target, oldSceneProps);\n };\n}\nfunction EnvironmentMap({\n scene,\n background = false,\n map,\n ...config\n}) {\n const defaultScene = useThree(state => state.scene);\n React.useLayoutEffect(() => {\n if (map) return setEnvProps(background, scene, defaultScene, map, config);\n });\n return null;\n}\nfunction EnvironmentCube({\n background = false,\n scene,\n blur,\n backgroundBlurriness,\n backgroundIntensity,\n backgroundRotation,\n environmentIntensity,\n environmentRotation,\n ...rest\n}) {\n const texture = useEnvironment(rest);\n const defaultScene = useThree(state => state.scene);\n React.useLayoutEffect(() => {\n return setEnvProps(background, scene, defaultScene, texture, {\n backgroundBlurriness: blur !== null && blur !== void 0 ? blur : backgroundBlurriness,\n backgroundIntensity,\n backgroundRotation,\n environmentIntensity,\n environmentRotation\n });\n });\n React.useEffect(() => {\n return () => {\n texture.dispose();\n };\n }, [texture]);\n return null;\n}\nfunction EnvironmentPortal({\n children,\n near = 0.1,\n far = 1000,\n resolution = 256,\n frames = 1,\n map,\n background = false,\n blur,\n backgroundBlurriness,\n backgroundIntensity,\n backgroundRotation,\n environmentIntensity,\n environmentRotation,\n scene,\n files,\n path,\n preset = undefined,\n extensions\n}) {\n const gl = useThree(state => state.gl);\n const defaultScene = useThree(state => state.scene);\n const camera = React.useRef(null);\n const [virtualScene] = React.useState(() => new Scene());\n const fbo = React.useMemo(() => {\n const fbo = new WebGLCubeRenderTarget(resolution);\n fbo.texture.type = HalfFloatType;\n return fbo;\n }, [resolution]);\n React.useEffect(() => {\n return () => {\n fbo.dispose();\n };\n }, [fbo]);\n React.useLayoutEffect(() => {\n if (frames === 1) {\n const autoClear = gl.autoClear;\n gl.autoClear = true;\n camera.current.update(gl, virtualScene);\n gl.autoClear = autoClear;\n }\n return setEnvProps(background, scene, defaultScene, fbo.texture, {\n backgroundBlurriness: blur !== null && blur !== void 0 ? blur : backgroundBlurriness,\n backgroundIntensity,\n backgroundRotation,\n environmentIntensity,\n environmentRotation\n });\n }, [children, virtualScene, fbo.texture, scene, defaultScene, background, frames, gl]);\n let count = 1;\n useFrame(() => {\n if (frames === Infinity || count < frames) {\n const autoClear = gl.autoClear;\n gl.autoClear = true;\n camera.current.update(gl, virtualScene);\n gl.autoClear = autoClear;\n count++;\n }\n });\n return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal(/*#__PURE__*/React.createElement(React.Fragment, null, children, /*#__PURE__*/React.createElement(\"cubeCamera\", {\n ref: camera,\n args: [near, far, fbo]\n }), files || preset ? /*#__PURE__*/React.createElement(EnvironmentCube, {\n background: true,\n files: files,\n preset: preset,\n path: path,\n extensions: extensions\n }) : map ? /*#__PURE__*/React.createElement(EnvironmentMap, {\n background: true,\n map: map,\n extensions: extensions\n }) : null), virtualScene));\n}\nfunction EnvironmentGround(props) {\n var _props$ground, _props$ground2, _scale, _props$ground3;\n const textureDefault = useEnvironment(props);\n const texture = props.map || textureDefault;\n React.useMemo(() => extend({\n GroundProjectedEnvImpl: GroundProjectedEnv\n }), []);\n React.useEffect(() => {\n return () => {\n textureDefault.dispose();\n };\n }, [textureDefault]);\n const args = React.useMemo(() => [texture], [texture]);\n const height = (_props$ground = props.ground) == null ? void 0 : _props$ground.height;\n const radius = (_props$ground2 = props.ground) == null ? void 0 : _props$ground2.radius;\n const scale = (_scale = (_props$ground3 = props.ground) == null ? void 0 : _props$ground3.scale) !== null && _scale !== void 0 ? _scale : 1000;\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(EnvironmentMap, _extends({}, props, {\n map: texture\n })), /*#__PURE__*/React.createElement(\"groundProjectedEnvImpl\", {\n args: args,\n scale: scale,\n height: height,\n radius: radius\n }));\n}\nfunction Environment(props) {\n return props.ground ? /*#__PURE__*/React.createElement(EnvironmentGround, props) : props.map ? /*#__PURE__*/React.createElement(EnvironmentMap, props) : props.children ? /*#__PURE__*/React.createElement(EnvironmentPortal, props) : /*#__PURE__*/React.createElement(EnvironmentCube, props);\n}\n\nexport { Environment, EnvironmentCube, EnvironmentMap, EnvironmentPortal };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { HorizontalBlurShader, VerticalBlurShader } from 'three-stdlib';\n\nconst ContactShadows = /* @__PURE__ */React.forwardRef(({\n scale = 10,\n frames = Infinity,\n opacity = 1,\n width = 1,\n height = 1,\n blur = 1,\n near = 0,\n far = 10,\n resolution = 512,\n smooth = true,\n color = '#000000',\n depthWrite = false,\n renderOrder,\n ...props\n}, fref) => {\n const ref = React.useRef(null);\n const scene = useThree(state => state.scene);\n const gl = useThree(state => state.gl);\n const shadowCamera = React.useRef(null);\n width = width * (Array.isArray(scale) ? scale[0] : scale || 1);\n height = height * (Array.isArray(scale) ? scale[1] : scale || 1);\n const [renderTarget, planeGeometry, depthMaterial, blurPlane, horizontalBlurMaterial, verticalBlurMaterial, renderTargetBlur] = React.useMemo(() => {\n const renderTarget = new THREE.WebGLRenderTarget(resolution, resolution);\n const renderTargetBlur = new THREE.WebGLRenderTarget(resolution, resolution);\n renderTargetBlur.texture.generateMipmaps = renderTarget.texture.generateMipmaps = false;\n const planeGeometry = new THREE.PlaneGeometry(width, height).rotateX(Math.PI / 2);\n const blurPlane = new THREE.Mesh(planeGeometry);\n const depthMaterial = new THREE.MeshDepthMaterial();\n depthMaterial.depthTest = depthMaterial.depthWrite = false;\n depthMaterial.onBeforeCompile = shader => {\n shader.uniforms = {\n ...shader.uniforms,\n ucolor: {\n value: new THREE.Color(color)\n }\n };\n shader.fragmentShader = shader.fragmentShader.replace(`void main() {`,\n //\n `uniform vec3 ucolor;\n void main() {\n `);\n shader.fragmentShader = shader.fragmentShader.replace('vec4( vec3( 1.0 - fragCoordZ ), opacity );',\n // Colorize the shadow, multiply by the falloff so that the center can remain darker\n 'vec4( ucolor * fragCoordZ * 2.0, ( 1.0 - fragCoordZ ) * 1.0 );');\n };\n const horizontalBlurMaterial = new THREE.ShaderMaterial(HorizontalBlurShader);\n const verticalBlurMaterial = new THREE.ShaderMaterial(VerticalBlurShader);\n verticalBlurMaterial.depthTest = horizontalBlurMaterial.depthTest = false;\n return [renderTarget, planeGeometry, depthMaterial, blurPlane, horizontalBlurMaterial, verticalBlurMaterial, renderTargetBlur];\n }, [resolution, width, height, scale, color]);\n const blurShadows = blur => {\n blurPlane.visible = true;\n blurPlane.material = horizontalBlurMaterial;\n horizontalBlurMaterial.uniforms.tDiffuse.value = renderTarget.texture;\n horizontalBlurMaterial.uniforms.h.value = blur * 1 / 256;\n gl.setRenderTarget(renderTargetBlur);\n gl.render(blurPlane, shadowCamera.current);\n blurPlane.material = verticalBlurMaterial;\n verticalBlurMaterial.uniforms.tDiffuse.value = renderTargetBlur.texture;\n verticalBlurMaterial.uniforms.v.value = blur * 1 / 256;\n gl.setRenderTarget(renderTarget);\n gl.render(blurPlane, shadowCamera.current);\n blurPlane.visible = false;\n };\n let count = 0;\n let initialBackground;\n let initialOverrideMaterial;\n useFrame(() => {\n if (shadowCamera.current && (frames === Infinity || count < frames)) {\n count++;\n initialBackground = scene.background;\n initialOverrideMaterial = scene.overrideMaterial;\n ref.current.visible = false;\n scene.background = null;\n scene.overrideMaterial = depthMaterial;\n gl.setRenderTarget(renderTarget);\n gl.render(scene, shadowCamera.current);\n blurShadows(blur);\n if (smooth) blurShadows(blur * 0.4);\n gl.setRenderTarget(null);\n ref.current.visible = true;\n scene.overrideMaterial = initialOverrideMaterial;\n scene.background = initialBackground;\n }\n });\n React.useImperativeHandle(fref, () => ref.current, []);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n \"rotation-x\": Math.PI / 2\n }, props, {\n ref: ref\n }), /*#__PURE__*/React.createElement(\"mesh\", {\n renderOrder: renderOrder,\n geometry: planeGeometry,\n scale: [1, -1, 1],\n rotation: [-Math.PI / 2, 0, 0]\n }, /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n transparent: true,\n map: renderTarget.texture,\n opacity: opacity,\n depthWrite: depthWrite\n })), /*#__PURE__*/React.createElement(\"orthographicCamera\", {\n ref: shadowCamera,\n args: [-width / 2, width / 2, height / 2, -height / 2, near, far]\n }));\n});\n\nexport { ContactShadows };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { extend, useThree, useFrame } from '@react-three/fiber';\nimport { shaderMaterial } from './shaderMaterial.js';\nimport { DiscardMaterial } from '../materials/DiscardMaterial.js';\nimport { version } from '../helpers/constants.js';\n\nfunction isLight(object) {\n return object.isLight;\n}\nfunction isGeometry(object) {\n return !!object.geometry;\n}\nconst accumulativeContext = /* @__PURE__ */React.createContext(null);\nconst SoftShadowMaterial = /* @__PURE__ */shaderMaterial({\n color: /* @__PURE__ */new THREE.Color(),\n blend: 2.0,\n alphaTest: 0.75,\n opacity: 0,\n map: null\n}, `varying vec2 vUv;\n void main() {\n gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);\n vUv = uv;\n }`, `varying vec2 vUv;\n uniform sampler2D map;\n uniform vec3 color;\n uniform float opacity;\n uniform float alphaTest;\n uniform float blend;\n void main() {\n vec4 sampledDiffuseColor = texture2D(map, vUv);\n gl_FragColor = vec4(color * sampledDiffuseColor.r * blend, max(0.0, (1.0 - (sampledDiffuseColor.r + sampledDiffuseColor.g + sampledDiffuseColor.b) / alphaTest)) * opacity);\n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }`);\nconst AccumulativeShadows = /* @__PURE__ */React.forwardRef(({\n children,\n temporal,\n frames = 40,\n limit = Infinity,\n blend = 20,\n scale = 10,\n opacity = 1,\n alphaTest = 0.75,\n color = 'black',\n colorBlend = 2,\n resolution = 1024,\n toneMapped = true,\n ...props\n}, forwardRef) => {\n extend({\n SoftShadowMaterial\n });\n const gl = useThree(state => state.gl);\n const scene = useThree(state => state.scene);\n const camera = useThree(state => state.camera);\n const invalidate = useThree(state => state.invalidate);\n const gPlane = React.useRef(null);\n const gLights = React.useRef(null);\n const [plm] = React.useState(() => new ProgressiveLightMap(gl, scene, resolution));\n React.useLayoutEffect(() => {\n plm.configure(gPlane.current);\n }, []);\n const api = React.useMemo(() => ({\n lights: new Map(),\n temporal: !!temporal,\n frames: Math.max(2, frames),\n blend: Math.max(2, frames === Infinity ? blend : frames),\n count: 0,\n getMesh: () => gPlane.current,\n reset: () => {\n // Clear buffers, reset opacities, set frame count to 0\n plm.clear();\n const material = gPlane.current.material;\n material.opacity = 0;\n material.alphaTest = 0;\n api.count = 0;\n },\n update: (frames = 1) => {\n // Adapt the opacity-blend ratio to the number of frames\n const material = gPlane.current.material;\n if (!api.temporal) {\n material.opacity = opacity;\n material.alphaTest = alphaTest;\n } else {\n material.opacity = Math.min(opacity, material.opacity + opacity / api.blend);\n material.alphaTest = Math.min(alphaTest, material.alphaTest + alphaTest / api.blend);\n }\n\n // Switch accumulative lights on\n gLights.current.visible = true;\n // Collect scene lights and meshes\n plm.prepare();\n\n // Update the lightmap and the accumulative lights\n for (let i = 0; i < frames; i++) {\n api.lights.forEach(light => light.update());\n plm.update(camera, api.blend);\n }\n // Switch lights off\n gLights.current.visible = false;\n // Restore lights and meshes\n plm.finish();\n }\n }), [plm, camera, scene, temporal, frames, blend, opacity, alphaTest]);\n React.useLayoutEffect(() => {\n // Reset internals, buffers, ...\n api.reset();\n // Update lightmap\n if (!api.temporal && api.frames !== Infinity) api.update(api.blend);\n });\n\n // Expose api, allow children to set itself as the main light source\n React.useImperativeHandle(forwardRef, () => api, [api]);\n useFrame(() => {\n if ((api.temporal || api.frames === Infinity) && api.count < api.frames && api.count < limit) {\n invalidate();\n api.update();\n api.count++;\n }\n });\n return /*#__PURE__*/React.createElement(\"group\", props, /*#__PURE__*/React.createElement(\"group\", {\n traverse: () => null,\n ref: gLights\n }, /*#__PURE__*/React.createElement(accumulativeContext.Provider, {\n value: api\n }, children)), /*#__PURE__*/React.createElement(\"mesh\", {\n receiveShadow: true,\n ref: gPlane,\n scale: scale,\n rotation: [-Math.PI / 2, 0, 0]\n }, /*#__PURE__*/React.createElement(\"planeGeometry\", null), /*#__PURE__*/React.createElement(\"softShadowMaterial\", {\n transparent: true,\n depthWrite: false,\n toneMapped: toneMapped,\n color: color,\n blend: colorBlend,\n map: plm.progressiveLightMap2.texture\n })));\n});\nconst RandomizedLight = /* @__PURE__ */React.forwardRef(({\n castShadow = true,\n bias = 0.001,\n mapSize = 512,\n size = 5,\n near = 0.5,\n far = 500,\n frames = 1,\n position = [0, 0, 0],\n radius = 1,\n amount = 8,\n intensity = version >= 155 ? Math.PI : 1,\n ambient = 0.5,\n ...props\n}, forwardRef) => {\n const gLights = React.useRef(null);\n const length = new THREE.Vector3(...position).length();\n const parent = React.useContext(accumulativeContext);\n const update = React.useCallback(() => {\n let light;\n if (gLights.current) {\n for (let l = 0; l < gLights.current.children.length; l++) {\n light = gLights.current.children[l];\n if (Math.random() > ambient) {\n light.position.set(position[0] + THREE.MathUtils.randFloatSpread(radius), position[1] + THREE.MathUtils.randFloatSpread(radius), position[2] + THREE.MathUtils.randFloatSpread(radius));\n } else {\n let lambda = Math.acos(2 * Math.random() - 1) - Math.PI / 2.0;\n let phi = 2 * Math.PI * Math.random();\n light.position.set(Math.cos(lambda) * Math.cos(phi) * length, Math.abs(Math.cos(lambda) * Math.sin(phi) * length), Math.sin(lambda) * length);\n }\n }\n }\n }, [radius, ambient, length, ...position]);\n const api = React.useMemo(() => ({\n update\n }), [update]);\n React.useImperativeHandle(forwardRef, () => api, [api]);\n React.useLayoutEffect(() => {\n var _parent$lights;\n const group = gLights.current;\n if (parent) (_parent$lights = parent.lights) == null || _parent$lights.set(group.uuid, api);\n return () => {\n var _parent$lights2;\n return void (parent == null || (_parent$lights2 = parent.lights) == null ? void 0 : _parent$lights2.delete(group.uuid));\n };\n }, [parent, api]);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: gLights\n }, props), Array.from({\n length: amount\n }, (_, index) => /*#__PURE__*/React.createElement(\"directionalLight\", {\n key: index,\n castShadow: castShadow,\n \"shadow-bias\": bias,\n \"shadow-mapSize\": [mapSize, mapSize],\n intensity: intensity / amount\n }, /*#__PURE__*/React.createElement(\"orthographicCamera\", {\n attach: \"shadow-camera\",\n args: [-size, size, size, -size, near, far]\n }))));\n});\n\n// Based on \"Progressive Light Map Accumulator\", by [zalo](https://github.com/zalo/)\nclass ProgressiveLightMap {\n constructor(renderer, scene, res = 1024) {\n this.renderer = renderer;\n this.res = res;\n this.scene = scene;\n this.buffer1Active = false;\n this.lights = [];\n this.meshes = [];\n this.object = null;\n this.clearColor = new THREE.Color();\n this.clearAlpha = 0;\n\n // Create the Progressive LightMap Texture\n const textureParams = {\n type: THREE.HalfFloatType,\n magFilter: THREE.NearestFilter,\n minFilter: THREE.NearestFilter\n };\n this.progressiveLightMap1 = new THREE.WebGLRenderTarget(this.res, this.res, textureParams);\n this.progressiveLightMap2 = new THREE.WebGLRenderTarget(this.res, this.res, textureParams);\n\n // Inject some spicy new logic into a standard phong material\n this.discardMat = new DiscardMaterial();\n this.targetMat = new THREE.MeshLambertMaterial({\n fog: false\n });\n this.previousShadowMap = {\n value: this.progressiveLightMap1.texture\n };\n this.averagingWindow = {\n value: 100\n };\n this.targetMat.onBeforeCompile = shader => {\n // Vertex Shader: Set Vertex Positions to the Unwrapped UV Positions\n shader.vertexShader = 'varying vec2 vUv;\\n' + shader.vertexShader.slice(0, -1) + 'vUv = uv; gl_Position = vec4((uv - 0.5) * 2.0, 1.0, 1.0); }';\n\n // Fragment Shader: Set Pixels to average in the Previous frame's Shadows\n const bodyStart = shader.fragmentShader.indexOf('void main() {');\n shader.fragmentShader = 'varying vec2 vUv;\\n' + shader.fragmentShader.slice(0, bodyStart) + 'uniform sampler2D previousShadowMap;\\n\tuniform float averagingWindow;\\n' + shader.fragmentShader.slice(bodyStart - 1, -1) + `\\nvec3 texelOld = texture2D(previousShadowMap, vUv).rgb;\n gl_FragColor.rgb = mix(texelOld, gl_FragColor.rgb, 1.0/ averagingWindow);\n }`;\n\n // Set the Previous Frame's Texture Buffer and Averaging Window\n shader.uniforms.previousShadowMap = this.previousShadowMap;\n shader.uniforms.averagingWindow = this.averagingWindow;\n };\n }\n clear() {\n this.renderer.getClearColor(this.clearColor);\n this.clearAlpha = this.renderer.getClearAlpha();\n this.renderer.setClearColor('black', 1);\n this.renderer.setRenderTarget(this.progressiveLightMap1);\n this.renderer.clear();\n this.renderer.setRenderTarget(this.progressiveLightMap2);\n this.renderer.clear();\n this.renderer.setRenderTarget(null);\n this.renderer.setClearColor(this.clearColor, this.clearAlpha);\n this.lights = [];\n this.meshes = [];\n this.scene.traverse(object => {\n if (isGeometry(object)) {\n this.meshes.push({\n object,\n material: object.material\n });\n } else if (isLight(object)) {\n this.lights.push({\n object,\n intensity: object.intensity\n });\n }\n });\n }\n prepare() {\n this.lights.forEach(light => light.object.intensity = 0);\n this.meshes.forEach(mesh => mesh.object.material = this.discardMat);\n }\n finish() {\n this.lights.forEach(light => light.object.intensity = light.intensity);\n this.meshes.forEach(mesh => mesh.object.material = mesh.material);\n }\n configure(object) {\n this.object = object;\n }\n update(camera, blendWindow = 100) {\n if (!this.object) return;\n // Set each object's material to the UV Unwrapped Surface Mapping Version\n this.averagingWindow.value = blendWindow;\n this.object.material = this.targetMat;\n // Ping-pong two surface buffers for reading/writing\n const activeMap = this.buffer1Active ? this.progressiveLightMap1 : this.progressiveLightMap2;\n const inactiveMap = this.buffer1Active ? this.progressiveLightMap2 : this.progressiveLightMap1;\n // Render the object's surface maps\n const oldBg = this.scene.background;\n this.scene.background = null;\n this.renderer.setRenderTarget(activeMap);\n this.previousShadowMap.value = inactiveMap.texture;\n this.buffer1Active = !this.buffer1Active;\n this.renderer.render(this.scene, camera);\n this.renderer.setRenderTarget(null);\n this.scene.background = oldBg;\n }\n}\n\nexport { AccumulativeShadows, RandomizedLight, accumulativeContext };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { Environment } from './Environment.js';\nimport { ContactShadows } from './ContactShadows.js';\nimport { Center } from './Center.js';\nimport { AccumulativeShadows, RandomizedLight } from './AccumulativeShadows.js';\nimport { Bounds, useBounds } from './Bounds.js';\n\nconst presets = {\n rembrandt: {\n main: [1, 2, 1],\n fill: [-2, -0.5, -2]\n },\n portrait: {\n main: [-1, 2, 0.5],\n fill: [-1, 0.5, -1.5]\n },\n upfront: {\n main: [0, 2, 1],\n fill: [-1, 0.5, -1.5]\n },\n soft: {\n main: [-2, 4, 4],\n fill: [-1, 0.5, -1.5]\n }\n};\nfunction Refit({\n radius,\n adjustCamera\n}) {\n const api = useBounds();\n React.useEffect(() => {\n if (adjustCamera) api.refresh().clip().fit();\n }, [radius, adjustCamera]);\n return null;\n}\nfunction Stage({\n children,\n center,\n adjustCamera = true,\n intensity = 0.5,\n shadows = 'contact',\n environment = 'city',\n preset = 'rembrandt',\n ...props\n}) {\n var _bias, _normalBias, _size, _offset, _amount, _radius, _ambient, _intensity;\n const config = typeof preset === 'string' ? presets[preset] : preset;\n const [{\n radius,\n height\n }, set] = React.useState({\n radius: 0,\n width: 0,\n height: 0,\n depth: 0\n });\n const shadowBias = (_bias = shadows == null ? void 0 : shadows.bias) !== null && _bias !== void 0 ? _bias : -0.0001;\n const normalBias = (_normalBias = shadows == null ? void 0 : shadows.normalBias) !== null && _normalBias !== void 0 ? _normalBias : 0;\n const shadowSize = (_size = shadows == null ? void 0 : shadows.size) !== null && _size !== void 0 ? _size : 1024;\n const shadowOffset = (_offset = shadows == null ? void 0 : shadows.offset) !== null && _offset !== void 0 ? _offset : 0;\n const contactShadow = shadows === 'contact' || (shadows == null ? void 0 : shadows.type) === 'contact';\n const accumulativeShadow = shadows === 'accumulative' || (shadows == null ? void 0 : shadows.type) === 'accumulative';\n const shadowSpread = {\n ...(typeof shadows === 'object' ? shadows : {})\n };\n const environmentProps = !environment ? null : typeof environment === 'string' ? {\n preset: environment\n } : environment;\n const onCentered = React.useCallback(props => {\n const {\n width,\n height,\n depth,\n boundingSphere\n } = props;\n set({\n radius: boundingSphere.radius,\n width,\n height,\n depth\n });\n if (center != null && center.onCentered) center.onCentered(props);\n }, []);\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"ambientLight\", {\n intensity: intensity / 3\n }), /*#__PURE__*/React.createElement(\"spotLight\", {\n penumbra: 1,\n position: [config.main[0] * radius, config.main[1] * radius, config.main[2] * radius],\n intensity: intensity * 2,\n castShadow: !!shadows,\n \"shadow-bias\": shadowBias,\n \"shadow-normalBias\": normalBias,\n \"shadow-mapSize\": shadowSize\n }), /*#__PURE__*/React.createElement(\"pointLight\", {\n position: [config.fill[0] * radius, config.fill[1] * radius, config.fill[2] * radius],\n intensity: intensity\n }), /*#__PURE__*/React.createElement(Bounds, _extends({\n fit: !!adjustCamera,\n clip: !!adjustCamera,\n margin: Number(adjustCamera),\n observe: true\n }, props), /*#__PURE__*/React.createElement(Refit, {\n radius: radius,\n adjustCamera: adjustCamera\n }), /*#__PURE__*/React.createElement(Center, _extends({}, center, {\n position: [0, shadowOffset / 2, 0],\n onCentered: onCentered\n }), children)), /*#__PURE__*/React.createElement(\"group\", {\n position: [0, -height / 2 - shadowOffset / 2, 0]\n }, contactShadow && /*#__PURE__*/React.createElement(ContactShadows, _extends({\n scale: radius * 4,\n far: radius,\n blur: 2\n }, shadowSpread)), accumulativeShadow && /*#__PURE__*/React.createElement(AccumulativeShadows, _extends({\n temporal: true,\n frames: 100,\n alphaTest: 0.9,\n toneMapped: true,\n scale: radius * 4\n }, shadowSpread), /*#__PURE__*/React.createElement(RandomizedLight, {\n amount: (_amount = shadowSpread.amount) !== null && _amount !== void 0 ? _amount : 8,\n radius: (_radius = shadowSpread.radius) !== null && _radius !== void 0 ? _radius : radius,\n ambient: (_ambient = shadowSpread.ambient) !== null && _ambient !== void 0 ? _ambient : 0.5,\n intensity: (_intensity = shadowSpread.intensity) !== null && _intensity !== void 0 ? _intensity : 1,\n position: [config.main[0] * radius, config.main[1] * radius, config.main[2] * radius],\n size: radius * 4,\n bias: -shadowBias,\n mapSize: shadowSize\n }))), environment && /*#__PURE__*/React.createElement(Environment, environmentProps));\n}\n\nexport { Stage };\n","import * as React from 'react';\n\nconst easeInExpo = x => x === 0 ? 0 : Math.pow(2, 10 * x - 10);\nfunction Backdrop({\n children,\n floor = 0.25,\n segments = 20,\n receiveShadow,\n ...props\n}) {\n const ref = React.useRef(null);\n React.useLayoutEffect(() => {\n let i = 0;\n const offset = segments / segments / 2;\n const position = ref.current.attributes.position;\n for (let x = 0; x < segments + 1; x++) {\n for (let y = 0; y < segments + 1; y++) {\n position.setXYZ(i++, x / segments - offset + (x === 0 ? -floor : 0), y / segments - offset, easeInExpo(x / segments));\n }\n }\n position.needsUpdate = true;\n ref.current.computeVertexNormals();\n }, [segments, floor]);\n return /*#__PURE__*/React.createElement(\"group\", props, /*#__PURE__*/React.createElement(\"mesh\", {\n receiveShadow: receiveShadow,\n rotation: [-Math.PI / 2, 0, Math.PI / 2]\n }, /*#__PURE__*/React.createElement(\"planeGeometry\", {\n ref: ref,\n args: [1, 1, segments, segments]\n }), children));\n}\n\nexport { Backdrop };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { Color, DoubleSide } from 'three';\n\nconst Shadow = /* @__PURE__ */React.forwardRef(({\n fog = false,\n renderOrder,\n depthWrite = false,\n colorStop = 0.0,\n color = 'black',\n opacity = 0.5,\n ...props\n}, ref) => {\n const canvas = React.useMemo(() => {\n const canvas = document.createElement('canvas');\n canvas.width = 128;\n canvas.height = 128;\n const context = canvas.getContext('2d');\n const gradient = context.createRadialGradient(canvas.width / 2, canvas.height / 2, 0, canvas.width / 2, canvas.height / 2, canvas.width / 2);\n gradient.addColorStop(colorStop, new Color(color).getStyle());\n gradient.addColorStop(1, 'rgba(0,0,0,0)');\n context.fillStyle = gradient;\n context.fillRect(0, 0, canvas.width, canvas.height);\n return canvas;\n }, [color, colorStop]);\n return /*#__PURE__*/React.createElement(\"mesh\", _extends({\n renderOrder: renderOrder,\n ref: ref,\n \"rotation-x\": -Math.PI / 2\n }, props), /*#__PURE__*/React.createElement(\"planeGeometry\", null), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n transparent: true,\n opacity: opacity,\n fog: fog,\n depthWrite: depthWrite,\n side: DoubleSide\n }, /*#__PURE__*/React.createElement(\"canvasTexture\", {\n attach: \"map\",\n args: [canvas]\n })));\n});\n\nexport { Shadow };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { extend, useThree, useFrame } from '@react-three/fiber';\nimport { useFBO } from './Fbo.js';\nimport { useHelper } from './Helper.js';\nimport { shaderMaterial } from './shaderMaterial.js';\nimport { Edges } from './Edges.js';\nimport { FullScreenQuad } from 'three-stdlib';\nimport { version } from '../helpers/constants.js';\n\nfunction createNormalMaterial(side = THREE.FrontSide) {\n const viewMatrix = {\n value: new THREE.Matrix4()\n };\n return Object.assign(new THREE.MeshNormalMaterial({\n side\n }), {\n viewMatrix,\n onBeforeCompile: shader => {\n shader.uniforms.viewMatrix = viewMatrix;\n shader.fragmentShader = `vec3 inverseTransformDirection( in vec3 dir, in mat4 matrix ) {\n return normalize( ( vec4( dir, 0.0 ) * matrix ).xyz );\n }\\n` + shader.fragmentShader.replace('#include <normal_fragment_maps>', `#include <normal_fragment_maps>\n normal = inverseTransformDirection( normal, viewMatrix );\\n`);\n }\n });\n}\nconst CausticsProjectionMaterial = /* @__PURE__ */shaderMaterial({\n causticsTexture: null,\n causticsTextureB: null,\n color: /* @__PURE__ */new THREE.Color(),\n lightProjMatrix: /* @__PURE__ */new THREE.Matrix4(),\n lightViewMatrix: /* @__PURE__ */new THREE.Matrix4()\n}, `varying vec3 vWorldPosition;\n void main() {\n gl_Position = projectionMatrix * viewMatrix * modelMatrix * vec4(position, 1.);\n vec4 worldPosition = modelMatrix * vec4(position, 1.);\n vWorldPosition = worldPosition.xyz;\n }`, `varying vec3 vWorldPosition;\n uniform vec3 color;\n uniform sampler2D causticsTexture;\n uniform sampler2D causticsTextureB;\n uniform mat4 lightProjMatrix;\n uniform mat4 lightViewMatrix;\n void main() {\n // Apply caustics\n vec4 lightSpacePos = lightProjMatrix * lightViewMatrix * vec4(vWorldPosition, 1.0);\n lightSpacePos.xyz /= lightSpacePos.w;\n lightSpacePos.xyz = lightSpacePos.xyz * 0.5 + 0.5;\n vec3 front = texture2D(causticsTexture, lightSpacePos.xy).rgb;\n vec3 back = texture2D(causticsTextureB, lightSpacePos.xy).rgb;\n gl_FragColor = vec4((front + back) * color, 1.0);\n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }`);\nconst CausticsMaterial = /* @__PURE__ */shaderMaterial({\n cameraMatrixWorld: /* @__PURE__ */new THREE.Matrix4(),\n cameraProjectionMatrixInv: /* @__PURE__ */new THREE.Matrix4(),\n normalTexture: null,\n depthTexture: null,\n lightDir: /* @__PURE__ */new THREE.Vector3(0, 1, 0),\n lightPlaneNormal: /* @__PURE__ */new THREE.Vector3(0, 1, 0),\n lightPlaneConstant: 0,\n near: 0.1,\n far: 100,\n modelMatrix: /* @__PURE__ */new THREE.Matrix4(),\n worldRadius: 1 / 40,\n ior: 1.1,\n bounces: 0,\n resolution: 1024,\n size: 10,\n intensity: 0.5\n}, /* glsl */`\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }`, /* glsl */`\n uniform mat4 cameraMatrixWorld;\n uniform mat4 cameraProjectionMatrixInv;\n uniform vec3 lightDir;\n uniform vec3 lightPlaneNormal;\n uniform float lightPlaneConstant;\n uniform float near;\n uniform float far;\n uniform float time;\n uniform float worldRadius;\n uniform float resolution;\n uniform float size;\n uniform float intensity;\n uniform float ior;\n precision highp isampler2D;\n precision highp usampler2D;\n uniform sampler2D normalTexture;\n uniform sampler2D depthTexture;\n uniform float bounces;\n varying vec2 vUv;\n vec3 WorldPosFromDepth(float depth, vec2 coord) {\n float z = depth * 2.0 - 1.0;\n vec4 clipSpacePosition = vec4(coord * 2.0 - 1.0, z, 1.0);\n vec4 viewSpacePosition = cameraProjectionMatrixInv * clipSpacePosition;\n // Perspective division\n viewSpacePosition /= viewSpacePosition.w;\n vec4 worldSpacePosition = cameraMatrixWorld * viewSpacePosition;\n return worldSpacePosition.xyz;\n }\n float sdPlane( vec3 p, vec3 n, float h ) {\n // n must be normalized\n return dot(p,n) + h;\n }\n float planeIntersect( vec3 ro, vec3 rd, vec4 p ) {\n return -(dot(ro,p.xyz)+p.w)/dot(rd,p.xyz);\n }\n vec3 totalInternalReflection(vec3 ro, vec3 rd, vec3 pos, vec3 normal, float ior, out vec3 rayOrigin, out vec3 rayDirection) {\n rayOrigin = ro;\n rayDirection = rd;\n rayDirection = refract(rayDirection, normal, 1.0 / ior);\n rayOrigin = pos + rayDirection * 0.1;\n return rayDirection;\n }\n void main() {\n // Each sample consists of random offset in the x and y direction\n float caustic = 0.0;\n float causticTexelSize = (1.0 / resolution) * size * 2.0;\n float texelsNeeded = worldRadius / causticTexelSize;\n float sampleRadius = texelsNeeded / resolution;\n float sum = 0.0;\n if (texture2D(depthTexture, vUv).x == 1.0) {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n return;\n }\n vec2 offset1 = vec2(-0.5, -0.5);//vec2(rand() - 0.5, rand() - 0.5);\n vec2 offset2 = vec2(-0.5, 0.5);//vec2(rand() - 0.5, rand() - 0.5);\n vec2 offset3 = vec2(0.5, 0.5);//vec2(rand() - 0.5, rand() - 0.5);\n vec2 offset4 = vec2(0.5, -0.5);//vec2(rand() - 0.5, rand() - 0.5);\n vec2 uv1 = vUv + offset1 * sampleRadius;\n vec2 uv2 = vUv + offset2 * sampleRadius;\n vec2 uv3 = vUv + offset3 * sampleRadius;\n vec2 uv4 = vUv + offset4 * sampleRadius;\n vec3 normal1 = texture2D(normalTexture, uv1, -10.0).rgb * 2.0 - 1.0;\n vec3 normal2 = texture2D(normalTexture, uv2, -10.0).rgb * 2.0 - 1.0;\n vec3 normal3 = texture2D(normalTexture, uv3, -10.0).rgb * 2.0 - 1.0;\n vec3 normal4 = texture2D(normalTexture, uv4, -10.0).rgb * 2.0 - 1.0;\n float depth1 = texture2D(depthTexture, uv1, -10.0).x;\n float depth2 = texture2D(depthTexture, uv2, -10.0).x;\n float depth3 = texture2D(depthTexture, uv3, -10.0).x;\n float depth4 = texture2D(depthTexture, uv4, -10.0).x;\n // Sanity check the depths\n if (depth1 == 1.0 || depth2 == 1.0 || depth3 == 1.0 || depth4 == 1.0) {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0);\n return;\n }\n vec3 pos1 = WorldPosFromDepth(depth1, uv1);\n vec3 pos2 = WorldPosFromDepth(depth2, uv2);\n vec3 pos3 = WorldPosFromDepth(depth3, uv3);\n vec3 pos4 = WorldPosFromDepth(depth4, uv4);\n vec3 originPos1 = WorldPosFromDepth(0.0, uv1);\n vec3 originPos2 = WorldPosFromDepth(0.0, uv2);\n vec3 originPos3 = WorldPosFromDepth(0.0, uv3);\n vec3 originPos4 = WorldPosFromDepth(0.0, uv4);\n vec3 endPos1, endPos2, endPos3, endPos4;\n vec3 endDir1, endDir2, endDir3, endDir4;\n totalInternalReflection(originPos1, lightDir, pos1, normal1, ior, endPos1, endDir1);\n totalInternalReflection(originPos2, lightDir, pos2, normal2, ior, endPos2, endDir2);\n totalInternalReflection(originPos3, lightDir, pos3, normal3, ior, endPos3, endDir3);\n totalInternalReflection(originPos4, lightDir, pos4, normal4, ior, endPos4, endDir4);\n float lightPosArea = length(cross(originPos2 - originPos1, originPos3 - originPos1)) + length(cross(originPos3 - originPos1, originPos4 - originPos1));\n float t1 = planeIntersect(endPos1, endDir1, vec4(lightPlaneNormal, lightPlaneConstant));\n float t2 = planeIntersect(endPos2, endDir2, vec4(lightPlaneNormal, lightPlaneConstant));\n float t3 = planeIntersect(endPos3, endDir3, vec4(lightPlaneNormal, lightPlaneConstant));\n float t4 = planeIntersect(endPos4, endDir4, vec4(lightPlaneNormal, lightPlaneConstant));\n vec3 finalPos1 = endPos1 + endDir1 * t1;\n vec3 finalPos2 = endPos2 + endDir2 * t2;\n vec3 finalPos3 = endPos3 + endDir3 * t3;\n vec3 finalPos4 = endPos4 + endDir4 * t4;\n float finalArea = length(cross(finalPos2 - finalPos1, finalPos3 - finalPos1)) + length(cross(finalPos3 - finalPos1, finalPos4 - finalPos1));\n caustic += intensity * (lightPosArea / finalArea);\n // Calculate the area of the triangle in light spaces\n gl_FragColor = vec4(vec3(max(caustic, 0.0)), 1.0);\n }`);\nconst NORMALPROPS = {\n depth: true,\n minFilter: THREE.LinearFilter,\n magFilter: THREE.LinearFilter,\n type: THREE.UnsignedByteType\n};\nconst CAUSTICPROPS = {\n minFilter: THREE.LinearMipmapLinearFilter,\n magFilter: THREE.LinearFilter,\n type: THREE.FloatType,\n generateMipmaps: true\n};\nconst Caustics = /* @__PURE__ */React.forwardRef(({\n debug,\n children,\n frames = 1,\n ior = 1.1,\n color = 'white',\n causticsOnly = false,\n backside = false,\n backsideIOR = 1.1,\n worldRadius = 0.3125,\n intensity = 0.05,\n resolution = 2024,\n lightSource = [5, 5, 5],\n ...props\n}, fref) => {\n extend({\n CausticsProjectionMaterial\n });\n const ref = React.useRef(null);\n const camera = React.useRef(null);\n const scene = React.useRef(null);\n const plane = React.useRef(null);\n const gl = useThree(state => state.gl);\n const helper = useHelper(debug && camera, THREE.CameraHelper);\n\n // Buffers for front and back faces\n const normalTarget = useFBO(resolution, resolution, NORMALPROPS);\n const normalTargetB = useFBO(resolution, resolution, NORMALPROPS);\n const causticsTarget = useFBO(resolution, resolution, CAUSTICPROPS);\n const causticsTargetB = useFBO(resolution, resolution, CAUSTICPROPS);\n // Normal materials for front and back faces\n const [normalMat] = React.useState(() => createNormalMaterial());\n const [normalMatB] = React.useState(() => createNormalMaterial(THREE.BackSide));\n // The quad that catches the caustics\n const [causticsMaterial] = React.useState(() => new CausticsMaterial());\n const [causticsQuad] = React.useState(() => new FullScreenQuad(causticsMaterial));\n React.useLayoutEffect(() => {\n ref.current.updateWorldMatrix(false, true);\n });\n let count = 0;\n const v = new THREE.Vector3();\n const lpF = new THREE.Frustum();\n const lpM = new THREE.Matrix4();\n const lpP = new THREE.Plane();\n const lightDir = new THREE.Vector3();\n const lightDirInv = new THREE.Vector3();\n const bounds = new THREE.Box3();\n const focusPos = new THREE.Vector3();\n const boundsVertices = [];\n const worldVerts = [];\n const projectedVerts = [];\n const lightDirs = [];\n const cameraPos = new THREE.Vector3();\n for (let i = 0; i < 8; i++) {\n boundsVertices.push(new THREE.Vector3());\n worldVerts.push(new THREE.Vector3());\n projectedVerts.push(new THREE.Vector3());\n lightDirs.push(new THREE.Vector3());\n }\n useFrame(() => {\n if (frames === Infinity || count++ < frames) {\n var _scene$current$parent, _helper$current;\n if (Array.isArray(lightSource)) lightDir.fromArray(lightSource).normalize();else lightDir.copy(ref.current.worldToLocal(lightSource.current.getWorldPosition(v)).normalize());\n lightDirInv.copy(lightDir).multiplyScalar(-1);\n (_scene$current$parent = scene.current.parent) == null || _scene$current$parent.matrixWorld.identity();\n bounds.setFromObject(scene.current, true);\n boundsVertices[0].set(bounds.min.x, bounds.min.y, bounds.min.z);\n boundsVertices[1].set(bounds.min.x, bounds.min.y, bounds.max.z);\n boundsVertices[2].set(bounds.min.x, bounds.max.y, bounds.min.z);\n boundsVertices[3].set(bounds.min.x, bounds.max.y, bounds.max.z);\n boundsVertices[4].set(bounds.max.x, bounds.min.y, bounds.min.z);\n boundsVertices[5].set(bounds.max.x, bounds.min.y, bounds.max.z);\n boundsVertices[6].set(bounds.max.x, bounds.max.y, bounds.min.z);\n boundsVertices[7].set(bounds.max.x, bounds.max.y, bounds.max.z);\n for (let i = 0; i < 8; i++) {\n worldVerts[i].copy(boundsVertices[i]);\n }\n bounds.getCenter(focusPos);\n boundsVertices.map(v => v.sub(focusPos));\n const lightPlane = lpP.set(lightDirInv, 0);\n boundsVertices.map((v, i) => lightPlane.projectPoint(v, projectedVerts[i]));\n const centralVert = projectedVerts.reduce((a, b) => a.add(b), v.set(0, 0, 0)).divideScalar(projectedVerts.length);\n const radius = projectedVerts.map(v => v.distanceTo(centralVert)).reduce((a, b) => Math.max(a, b));\n const dirLength = boundsVertices.map(x => x.dot(lightDir)).reduce((a, b) => Math.max(a, b));\n // Shadows\n camera.current.position.copy(cameraPos.copy(lightDir).multiplyScalar(dirLength).add(focusPos));\n camera.current.lookAt(scene.current.localToWorld(focusPos));\n const dirMatrix = lpM.lookAt(camera.current.position, focusPos, v.set(0, 1, 0));\n camera.current.left = -radius;\n camera.current.right = radius;\n camera.current.top = radius;\n camera.current.bottom = -radius;\n const yOffset = v.set(0, radius, 0).applyMatrix4(dirMatrix);\n const yTime = (camera.current.position.y + yOffset.y) / lightDir.y;\n camera.current.near = 0.1;\n camera.current.far = yTime;\n camera.current.updateProjectionMatrix();\n camera.current.updateMatrixWorld();\n\n // Now find size of ground plane\n const groundProjectedCoords = worldVerts.map((v, i) => v.add(lightDirs[i].copy(lightDir).multiplyScalar(-v.y / lightDir.y)));\n const centerPos = groundProjectedCoords.reduce((a, b) => a.add(b), v.set(0, 0, 0)).divideScalar(groundProjectedCoords.length);\n const maxSize = 2 * groundProjectedCoords.map(v => Math.hypot(v.x - centerPos.x, v.z - centerPos.z)).reduce((a, b) => Math.max(a, b));\n plane.current.scale.setScalar(maxSize);\n plane.current.position.copy(centerPos);\n if (debug) (_helper$current = helper.current) == null || _helper$current.update();\n\n // Inject uniforms\n normalMatB.viewMatrix.value = normalMat.viewMatrix.value = camera.current.matrixWorldInverse;\n const dirLightNearPlane = lpF.setFromProjectionMatrix(lpM.multiplyMatrices(camera.current.projectionMatrix, camera.current.matrixWorldInverse)).planes[4];\n causticsMaterial.cameraMatrixWorld = camera.current.matrixWorld;\n causticsMaterial.cameraProjectionMatrixInv = camera.current.projectionMatrixInverse;\n causticsMaterial.lightDir = lightDirInv;\n causticsMaterial.lightPlaneNormal = dirLightNearPlane.normal;\n causticsMaterial.lightPlaneConstant = dirLightNearPlane.constant;\n causticsMaterial.near = camera.current.near;\n causticsMaterial.far = camera.current.far;\n causticsMaterial.resolution = resolution;\n causticsMaterial.size = radius;\n causticsMaterial.intensity = intensity;\n causticsMaterial.worldRadius = worldRadius;\n\n // Switch the scene on\n scene.current.visible = true;\n\n // Render front face normals\n gl.setRenderTarget(normalTarget);\n gl.clear();\n scene.current.overrideMaterial = normalMat;\n gl.render(scene.current, camera.current);\n\n // Render back face normals, if enabled\n gl.setRenderTarget(normalTargetB);\n gl.clear();\n if (backside) {\n scene.current.overrideMaterial = normalMatB;\n gl.render(scene.current, camera.current);\n }\n\n // Remove the override material\n scene.current.overrideMaterial = null;\n\n // Render front face caustics\n causticsMaterial.ior = ior;\n plane.current.material.lightProjMatrix = camera.current.projectionMatrix;\n plane.current.material.lightViewMatrix = camera.current.matrixWorldInverse;\n causticsMaterial.normalTexture = normalTarget.texture;\n causticsMaterial.depthTexture = normalTarget.depthTexture;\n gl.setRenderTarget(causticsTarget);\n gl.clear();\n causticsQuad.render(gl);\n\n // Render back face caustics, if enabled\n causticsMaterial.ior = backsideIOR;\n causticsMaterial.normalTexture = normalTargetB.texture;\n causticsMaterial.depthTexture = normalTargetB.depthTexture;\n gl.setRenderTarget(causticsTargetB);\n gl.clear();\n if (backside) causticsQuad.render(gl);\n\n // Reset render target\n gl.setRenderTarget(null);\n\n // Switch the scene off if caustics is all that's wanted\n if (causticsOnly) scene.current.visible = false;\n }\n });\n React.useImperativeHandle(fref, () => ref.current, []);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref\n }, props), /*#__PURE__*/React.createElement(\"scene\", {\n ref: scene\n }, /*#__PURE__*/React.createElement(\"orthographicCamera\", {\n ref: camera,\n up: [0, 1, 0]\n }), children), /*#__PURE__*/React.createElement(\"mesh\", {\n renderOrder: 2,\n ref: plane,\n \"rotation-x\": -Math.PI / 2\n }, /*#__PURE__*/React.createElement(\"planeGeometry\", null), /*#__PURE__*/React.createElement(\"causticsProjectionMaterial\", {\n transparent: true,\n color: color,\n causticsTexture: causticsTarget.texture,\n causticsTextureB: causticsTargetB.texture,\n blending: THREE.CustomBlending,\n blendSrc: THREE.OneFactor,\n blendDst: THREE.SrcAlphaFactor,\n depthWrite: false\n }), debug && /*#__PURE__*/React.createElement(Edges, null, /*#__PURE__*/React.createElement(\"lineBasicMaterial\", {\n color: \"#ffff00\",\n toneMapped: false\n }))));\n});\n\nexport { Caustics };\n","import * as THREE from 'three';\nimport { version } from '../helpers/constants.js';\n\nclass SpotLightMaterial extends THREE.ShaderMaterial {\n constructor() {\n super({\n uniforms: {\n depth: {\n value: null\n },\n opacity: {\n value: 1\n },\n attenuation: {\n value: 2.5\n },\n anglePower: {\n value: 12\n },\n spotPosition: {\n value: new THREE.Vector3(0, 0, 0)\n },\n lightColor: {\n value: new THREE.Color('white')\n },\n cameraNear: {\n value: 0\n },\n cameraFar: {\n value: 1\n },\n resolution: {\n value: new THREE.Vector2(0, 0)\n }\n },\n transparent: true,\n depthWrite: false,\n vertexShader: /* glsl */`\n varying vec3 vNormal;\n varying float vViewZ;\n varying float vIntensity;\n uniform vec3 spotPosition;\n uniform float attenuation;\n\n #include <common>\n #include <logdepthbuf_pars_vertex>\n\n void main() {\n // compute intensity\n vNormal = normalize(normalMatrix * normal);\n vec4 worldPosition = modelMatrix * vec4(position, 1);\n vec4 viewPosition = viewMatrix * worldPosition;\n vViewZ = viewPosition.z;\n\n vIntensity = 1.0 - saturate(distance(worldPosition.xyz, spotPosition) / attenuation);\n\n gl_Position = projectionMatrix * viewPosition;\n\n #include <logdepthbuf_vertex>\n }\n `,\n fragmentShader: /* glsl */`\n varying vec3 vNormal;\n varying float vViewZ;\n varying float vIntensity;\n\n uniform vec3 lightColor;\n uniform float anglePower;\n uniform sampler2D depth;\n uniform vec2 resolution;\n uniform float cameraNear;\n uniform float cameraFar;\n uniform float opacity;\n\n #include <packing>\n #include <logdepthbuf_pars_fragment>\n\n float readDepth(sampler2D depthSampler, vec2 uv) {\n float fragCoordZ = texture(depthSampler, uv).r;\n\n // https://github.com/mrdoob/three.js/issues/23072\n #ifdef USE_LOGDEPTHBUF\n float viewZ = 1.0 - exp2(fragCoordZ * log(cameraFar + 1.0) / log(2.0));\n #else\n float viewZ = perspectiveDepthToViewZ(fragCoordZ, cameraNear, cameraFar);\n #endif\n\n return viewZ;\n }\n\n void main() {\n #include <logdepthbuf_fragment>\n\n vec3 normal = vec3(vNormal.x, vNormal.y, abs(vNormal.z));\n float angleIntensity = pow(dot(normal, vec3(0, 0, 1)), anglePower);\n float intensity = vIntensity * angleIntensity;\n\n // fades when z is close to sampled depth, meaning the cone is intersecting existing geometry\n bool isSoft = resolution[0] > 0.0 && resolution[1] > 0.0;\n if (isSoft) {\n vec2 uv = gl_FragCoord.xy / resolution;\n intensity *= smoothstep(0.0, 1.0, vViewZ - readDepth(depth, uv));\n }\n\n gl_FragColor = vec4(lightColor, intensity * opacity);\n\n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }\n `\n });\n }\n}\n\nexport { SpotLightMaterial };\n","var SpotlightShadowShader = \"#define GLSLIFY 1\\nvarying vec2 vUv;uniform sampler2D uShadowMap;uniform float uTime;void main(){vec3 color=texture2D(uShadowMap,vUv).xyz;gl_FragColor=vec4(color,1.);}\"; // eslint-disable-line\n\nexport { SpotlightShadowShader as default };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { Vector3, CylinderGeometry, Matrix4, WebGLRenderTarget, RGBAFormat, ShaderMaterial, DoubleSide, RepeatWrapping } from 'three';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { FullScreenQuad } from 'three-stdlib';\nimport { SpotLightMaterial } from '../materials/SpotLightMaterial.js';\nimport SpotlightShadowShader from '../helpers/glsl/DefaultSpotlightShadowShadows.glsl.js';\n\nconst isSpotLight = child => {\n return child == null ? void 0 : child.isSpotLight;\n};\nfunction VolumetricMesh({\n opacity = 1,\n radiusTop,\n radiusBottom,\n depthBuffer,\n color = 'white',\n distance = 5,\n angle = 0.15,\n attenuation = 5,\n anglePower = 5\n}) {\n const mesh = React.useRef(null);\n const size = useThree(state => state.size);\n const camera = useThree(state => state.camera);\n const dpr = useThree(state => state.viewport.dpr);\n const [material] = React.useState(() => new SpotLightMaterial());\n const [vec] = React.useState(() => new Vector3());\n radiusTop = radiusTop === undefined ? 0.1 : radiusTop;\n radiusBottom = radiusBottom === undefined ? angle * 7 : radiusBottom;\n useFrame(() => {\n material.uniforms.spotPosition.value.copy(mesh.current.getWorldPosition(vec));\n mesh.current.lookAt(mesh.current.parent.target.getWorldPosition(vec));\n });\n const geom = React.useMemo(() => {\n const geometry = new CylinderGeometry(radiusTop, radiusBottom, distance, 128, 64, true);\n geometry.applyMatrix4(new Matrix4().makeTranslation(0, -distance / 2, 0));\n geometry.applyMatrix4(new Matrix4().makeRotationX(-Math.PI / 2));\n return geometry;\n }, [distance, radiusTop, radiusBottom]);\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"mesh\", {\n ref: mesh,\n geometry: geom,\n raycast: () => null\n }, /*#__PURE__*/React.createElement(\"primitive\", {\n object: material,\n attach: \"material\",\n \"uniforms-opacity-value\": opacity,\n \"uniforms-lightColor-value\": color,\n \"uniforms-attenuation-value\": attenuation,\n \"uniforms-anglePower-value\": anglePower,\n \"uniforms-depth-value\": depthBuffer,\n \"uniforms-cameraNear-value\": camera.near,\n \"uniforms-cameraFar-value\": camera.far,\n \"uniforms-resolution-value\": depthBuffer ? [size.width * dpr, size.height * dpr] : [0, 0]\n })));\n}\nfunction useCommon(spotlight, mesh, width, height, distance) {\n const [[pos, dir]] = React.useState(() => [new Vector3(), new Vector3()]);\n React.useLayoutEffect(() => {\n if (isSpotLight(spotlight.current)) {\n spotlight.current.shadow.mapSize.set(width, height);\n spotlight.current.shadow.needsUpdate = true;\n } else {\n throw new Error('SpotlightShadow must be a child of a SpotLight');\n }\n }, [spotlight, width, height]);\n useFrame(() => {\n if (!spotlight.current) return;\n const A = spotlight.current.position;\n const B = spotlight.current.target.position;\n dir.copy(B).sub(A);\n var len = dir.length();\n dir.normalize().multiplyScalar(len * distance);\n pos.copy(A).add(dir);\n mesh.current.position.copy(pos);\n mesh.current.lookAt(spotlight.current.target.position);\n });\n}\nfunction SpotlightShadowWithShader({\n distance = 0.4,\n alphaTest = 0.5,\n map,\n shader = SpotlightShadowShader,\n width = 512,\n height = 512,\n scale = 1,\n children,\n ...rest\n}) {\n const mesh = React.useRef(null);\n const spotlight = rest.spotlightRef;\n const debug = rest.debug;\n useCommon(spotlight, mesh, width, height, distance);\n const renderTarget = React.useMemo(() => new WebGLRenderTarget(width, height, {\n format: RGBAFormat,\n stencilBuffer: false\n // depthTexture: null!\n }), [width, height]);\n const uniforms = React.useRef({\n uShadowMap: {\n value: map\n },\n uTime: {\n value: 0\n }\n });\n React.useEffect(() => void (uniforms.current.uShadowMap.value = map), [map]);\n const fsQuad = React.useMemo(() => new FullScreenQuad(new ShaderMaterial({\n uniforms: uniforms.current,\n vertexShader: /* glsl */`\n varying vec2 vUv;\n\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n }\n `,\n fragmentShader: shader\n })), [shader]);\n React.useEffect(() => () => {\n fsQuad.material.dispose();\n fsQuad.dispose();\n }, [fsQuad]);\n React.useEffect(() => () => renderTarget.dispose(), [renderTarget]);\n useFrame(({\n gl\n }, dt) => {\n uniforms.current.uTime.value += dt;\n gl.setRenderTarget(renderTarget);\n fsQuad.render(gl);\n gl.setRenderTarget(null);\n });\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"mesh\", {\n ref: mesh,\n scale: scale,\n castShadow: true\n }, /*#__PURE__*/React.createElement(\"planeGeometry\", null), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n transparent: true,\n side: DoubleSide,\n alphaTest: alphaTest,\n alphaMap: renderTarget.texture,\n \"alphaMap-wrapS\": RepeatWrapping,\n \"alphaMap-wrapT\": RepeatWrapping,\n opacity: debug ? 1 : 0\n }, children)));\n}\nfunction SpotlightShadowWithoutShader({\n distance = 0.4,\n alphaTest = 0.5,\n map,\n width = 512,\n height = 512,\n scale,\n children,\n ...rest\n}) {\n const mesh = React.useRef(null);\n const spotlight = rest.spotlightRef;\n const debug = rest.debug;\n useCommon(spotlight, mesh, width, height, distance);\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"mesh\", {\n ref: mesh,\n scale: scale,\n castShadow: true\n }, /*#__PURE__*/React.createElement(\"planeGeometry\", null), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n transparent: true,\n side: DoubleSide,\n alphaTest: alphaTest,\n alphaMap: map,\n \"alphaMap-wrapS\": RepeatWrapping,\n \"alphaMap-wrapT\": RepeatWrapping,\n opacity: debug ? 1 : 0\n }, children)));\n}\nfunction SpotLightShadow(props) {\n if (props.shader) return /*#__PURE__*/React.createElement(SpotlightShadowWithShader, props);\n return /*#__PURE__*/React.createElement(SpotlightShadowWithoutShader, props);\n}\nconst SpotLight = /*#__PURE__*/React.forwardRef(({\n // Volumetric\n opacity = 1,\n radiusTop,\n radiusBottom,\n depthBuffer,\n color = 'white',\n distance = 5,\n angle = 0.15,\n attenuation = 5,\n anglePower = 5,\n volumetric = true,\n debug = false,\n children,\n ...props\n}, ref) => {\n const spotlight = React.useRef(null);\n React.useImperativeHandle(ref, () => spotlight.current, []);\n return /*#__PURE__*/React.createElement(\"group\", null, debug && spotlight.current && /*#__PURE__*/React.createElement(\"spotLightHelper\", {\n args: [spotlight.current]\n }), /*#__PURE__*/React.createElement(\"spotLight\", _extends({\n ref: spotlight,\n angle: angle,\n color: color,\n distance: distance,\n castShadow: true\n }, props), volumetric && /*#__PURE__*/React.createElement(VolumetricMesh, {\n debug: debug,\n opacity: opacity,\n radiusTop: radiusTop,\n radiusBottom: radiusBottom,\n depthBuffer: depthBuffer,\n color: color,\n distance: distance,\n angle: angle,\n attenuation: attenuation,\n anglePower: anglePower\n })), children && /*#__PURE__*/React.cloneElement(children, {\n spotlightRef: spotlight,\n debug: debug\n }));\n});\n\nexport { SpotLight, SpotLightShadow };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { applyProps } from '@react-three/fiber';\nimport * as React from 'react';\nimport * as THREE from 'three';\n\nconst Lightformer = /* @__PURE__ */React.forwardRef(({\n light,\n args,\n map,\n toneMapped = false,\n color = 'white',\n form: Form = 'rect',\n intensity = 1,\n scale = 1,\n target = [0, 0, 0],\n children,\n ...props\n}, forwardRef) => {\n // Apply emissive power\n const ref = React.useRef(null);\n React.useImperativeHandle(forwardRef, () => ref.current, []);\n React.useLayoutEffect(() => {\n if (!children && !props.material) {\n applyProps(ref.current.material, {\n color\n });\n ref.current.material.color.multiplyScalar(intensity);\n }\n }, [color, intensity, children, props.material]);\n\n // Target light\n React.useLayoutEffect(() => {\n if (!props.rotation) ref.current.quaternion.identity();\n if (target && !props.rotation) {\n 'boolean' === typeof target ? ref.current.lookAt(0, 0, 0) : ref.current.lookAt(Array.isArray(target) ? new THREE.Vector3(...target) : target);\n }\n }, [target, props.rotation]);\n\n // Fix 2-dimensional scale\n scale = Array.isArray(scale) && scale.length === 2 ? [scale[0], scale[1], 1] : scale;\n return /*#__PURE__*/React.createElement(\"mesh\", _extends({\n ref: ref,\n scale: scale\n }, props), Form === 'circle' ? /*#__PURE__*/React.createElement(\"ringGeometry\", {\n args: args ? args : [0, 0.5, 64]\n }) : Form === 'ring' ? /*#__PURE__*/React.createElement(\"ringGeometry\", {\n args: args ? args : [0.25, 0.5, 64]\n }) : Form === 'rect' || Form === 'plane' ? /*#__PURE__*/React.createElement(\"planeGeometry\", {\n args: args ? args : [1, 1]\n }) : Form === 'box' ? /*#__PURE__*/React.createElement(\"boxGeometry\", {\n args: args ? args : [1, 1, 1]\n }) : /*#__PURE__*/React.createElement(Form, {\n args: args\n }), children ? children : /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n toneMapped: toneMapped,\n map: map,\n side: THREE.DoubleSide\n }), light && /*#__PURE__*/React.createElement(\"pointLight\", _extends({\n castShadow: true\n }, light)));\n});\n\nexport { Lightformer };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { Sky as Sky$1 } from 'three-stdlib';\nimport { Vector3 } from 'three';\n\nfunction calcPosFromAngles(inclination, azimuth, vector = new Vector3()) {\n const theta = Math.PI * (inclination - 0.5);\n const phi = 2 * Math.PI * (azimuth - 0.5);\n vector.x = Math.cos(phi);\n vector.y = Math.sin(theta);\n vector.z = Math.sin(phi);\n return vector;\n}\nconst Sky = /* @__PURE__ */React.forwardRef(({\n inclination = 0.6,\n azimuth = 0.1,\n distance = 1000,\n mieCoefficient = 0.005,\n mieDirectionalG = 0.8,\n rayleigh = 0.5,\n turbidity = 10,\n sunPosition = calcPosFromAngles(inclination, azimuth),\n ...props\n}, ref) => {\n const scale = React.useMemo(() => new Vector3().setScalar(distance), [distance]);\n const [sky] = React.useState(() => new Sky$1());\n return /*#__PURE__*/React.createElement(\"primitive\", _extends({\n object: sky,\n ref: ref,\n \"material-uniforms-mieCoefficient-value\": mieCoefficient,\n \"material-uniforms-mieDirectionalG-value\": mieDirectionalG,\n \"material-uniforms-rayleigh-value\": rayleigh,\n \"material-uniforms-sunPosition-value\": sunPosition,\n \"material-uniforms-turbidity-value\": turbidity,\n scale: scale\n }, props));\n});\n\nexport { Sky, calcPosFromAngles };\n","import * as React from 'react';\nimport { useFrame } from '@react-three/fiber';\nimport { Color, AdditiveBlending, ShaderMaterial, Vector3, Spherical } from 'three';\nimport { version } from '../helpers/constants.js';\n\nclass StarfieldMaterial extends ShaderMaterial {\n constructor() {\n super({\n uniforms: {\n time: {\n value: 0.0\n },\n fade: {\n value: 1.0\n }\n },\n vertexShader: /* glsl */`\n uniform float time;\n attribute float size;\n varying vec3 vColor;\n void main() {\n vColor = color;\n vec4 mvPosition = modelViewMatrix * vec4(position, 0.5);\n gl_PointSize = size * (30.0 / -mvPosition.z) * (3.0 + sin(time + 100.0));\n gl_Position = projectionMatrix * mvPosition;\n }`,\n fragmentShader: /* glsl */`\n uniform sampler2D pointTexture;\n uniform float fade;\n varying vec3 vColor;\n void main() {\n float opacity = 1.0;\n if (fade == 1.0) {\n float d = distance(gl_PointCoord, vec2(0.5, 0.5));\n opacity = 1.0 / (1.0 + exp(16.0 * (d - 0.25)));\n }\n gl_FragColor = vec4(vColor, opacity);\n\n #include <tonemapping_fragment>\n\t #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }`\n });\n }\n}\nconst genStar = r => {\n return new Vector3().setFromSpherical(new Spherical(r, Math.acos(1 - Math.random() * 2), Math.random() * 2 * Math.PI));\n};\nconst Stars = /* @__PURE__ */React.forwardRef(({\n radius = 100,\n depth = 50,\n count = 5000,\n saturation = 0,\n factor = 4,\n fade = false,\n speed = 1\n}, ref) => {\n const material = React.useRef(null);\n const [position, color, size] = React.useMemo(() => {\n const positions = [];\n const colors = [];\n const sizes = Array.from({\n length: count\n }, () => (0.5 + 0.5 * Math.random()) * factor);\n const color = new Color();\n let r = radius + depth;\n const increment = depth / count;\n for (let i = 0; i < count; i++) {\n r -= increment * Math.random();\n positions.push(...genStar(r).toArray());\n color.setHSL(i / count, saturation, 0.9);\n colors.push(color.r, color.g, color.b);\n }\n return [new Float32Array(positions), new Float32Array(colors), new Float32Array(sizes)];\n }, [count, depth, factor, radius, saturation]);\n useFrame(state => material.current && (material.current.uniforms.time.value = state.clock.elapsedTime * speed));\n const [starfieldMaterial] = React.useState(() => new StarfieldMaterial());\n return /*#__PURE__*/React.createElement(\"points\", {\n ref: ref\n }, /*#__PURE__*/React.createElement(\"bufferGeometry\", null, /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-position\",\n args: [position, 3]\n }), /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-color\",\n args: [color, 3]\n }), /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-size\",\n args: [size, 1]\n })), /*#__PURE__*/React.createElement(\"primitive\", {\n ref: material,\n object: starfieldMaterial,\n attach: \"material\",\n blending: AdditiveBlending,\n \"uniforms-fade-value\": fade,\n depthWrite: false,\n transparent: true,\n vertexColors: true\n }));\n});\n\nexport { Stars };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { REVISION, Quaternion, Vector3, DynamicDrawUsage, MeshLambertMaterial, Matrix4, Color } from 'three';\nimport { extend, useFrame, applyProps } from '@react-three/fiber';\nimport { useTexture } from './Texture.js';\nimport { setUpdateRange } from '../helpers/deprecated.js';\n\nconst CLOUD_URL = 'https://rawcdn.githack.com/pmndrs/drei-assets/9225a9f1fbd449d9411125c2f419b843d0308c9f/cloud.png';\nconst parentMatrix = /* @__PURE__ */new Matrix4();\nconst translation = /* @__PURE__ */new Vector3();\nconst rotation = /* @__PURE__ */new Quaternion();\nconst cpos = /* @__PURE__ */new Vector3();\nconst cquat = /* @__PURE__ */new Quaternion();\nconst scale = /* @__PURE__ */new Vector3();\nconst context = /* @__PURE__ */React.createContext(null);\nconst Clouds = /* @__PURE__ */React.forwardRef(({\n children,\n material = MeshLambertMaterial,\n texture = CLOUD_URL,\n range,\n limit = 200,\n frustumCulled,\n ...props\n}, fref) => {\n var _image$width, _image$height;\n const CloudMaterial = React.useMemo(() => {\n return class extends material {\n constructor() {\n super();\n const opaque_fragment = parseInt(REVISION.replace(/\\D+/g, '')) >= 154 ? 'opaque_fragment' : 'output_fragment';\n this.onBeforeCompile = shader => {\n shader.vertexShader = `attribute float cloudOpacity;\n varying float vOpacity;\n ` + shader.vertexShader.replace('#include <fog_vertex>', `#include <fog_vertex>\n vOpacity = cloudOpacity;\n `);\n shader.fragmentShader = `varying float vOpacity;\n ` + shader.fragmentShader.replace(`#include <${opaque_fragment}>`, `#include <${opaque_fragment}>\n gl_FragColor = vec4(outgoingLight, diffuseColor.a * vOpacity);\n `);\n };\n }\n };\n }, [material]);\n extend({\n CloudMaterial\n });\n const instance = React.useRef(null);\n const clouds = React.useRef([]);\n const opacities = React.useMemo(() => new Float32Array(Array.from({\n length: limit\n }, () => 1)), [limit]);\n const colors = React.useMemo(() => new Float32Array(Array.from({\n length: limit\n }, () => [1, 1, 1]).flat()), [limit]);\n const cloudTexture = useTexture(texture);\n let t = 0;\n let index = 0;\n let config;\n const qat = new Quaternion();\n const dir = new Vector3(0, 0, 1);\n const pos = new Vector3();\n useFrame((state, delta) => {\n t = state.clock.elapsedTime;\n parentMatrix.copy(instance.current.matrixWorld).invert();\n state.camera.matrixWorld.decompose(cpos, cquat, scale);\n for (index = 0; index < clouds.current.length; index++) {\n config = clouds.current[index];\n config.ref.current.matrixWorld.decompose(translation, rotation, scale);\n translation.add(pos.copy(config.position).applyQuaternion(rotation).multiply(scale));\n rotation.copy(cquat).multiply(qat.setFromAxisAngle(dir, config.rotation += delta * config.rotationFactor));\n scale.multiplyScalar(config.volume + (1 + Math.sin(t * config.density * config.speed)) / 2 * config.growth);\n config.matrix.compose(translation, rotation, scale).premultiply(parentMatrix);\n config.dist = translation.distanceTo(cpos);\n }\n\n // Depth-sort. Instances have no specific draw order, w/o sorting z would be random\n clouds.current.sort((a, b) => b.dist - a.dist);\n for (index = 0; index < clouds.current.length; index++) {\n config = clouds.current[index];\n opacities[index] = config.opacity * (config.dist < config.fade - 1 ? config.dist / config.fade : 1);\n instance.current.setMatrixAt(index, config.matrix);\n instance.current.setColorAt(index, config.color);\n }\n\n // Update instance\n instance.current.geometry.attributes.cloudOpacity.needsUpdate = true;\n instance.current.instanceMatrix.needsUpdate = true;\n if (instance.current.instanceColor) instance.current.instanceColor.needsUpdate = true;\n });\n React.useLayoutEffect(() => {\n const count = Math.min(limit, range !== undefined ? range : limit, clouds.current.length);\n instance.current.count = count;\n setUpdateRange(instance.current.instanceMatrix, {\n start: 0,\n count: count * 16\n });\n if (instance.current.instanceColor) {\n setUpdateRange(instance.current.instanceColor, {\n start: 0,\n count: count * 3\n });\n }\n setUpdateRange(instance.current.geometry.attributes.cloudOpacity, {\n start: 0,\n count: count\n });\n });\n let imageBounds = [(_image$width = cloudTexture.image.width) !== null && _image$width !== void 0 ? _image$width : 1, (_image$height = cloudTexture.image.height) !== null && _image$height !== void 0 ? _image$height : 1];\n const max = Math.max(imageBounds[0], imageBounds[1]);\n imageBounds = [imageBounds[0] / max, imageBounds[1] / max];\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: fref\n }, props), /*#__PURE__*/React.createElement(context.Provider, {\n value: clouds\n }, children, /*#__PURE__*/React.createElement(\"instancedMesh\", {\n matrixAutoUpdate: false,\n ref: instance,\n args: [null, null, limit],\n frustumCulled: frustumCulled\n }, /*#__PURE__*/React.createElement(\"instancedBufferAttribute\", {\n usage: DynamicDrawUsage,\n attach: \"instanceColor\",\n args: [colors, 3]\n }), /*#__PURE__*/React.createElement(\"planeGeometry\", {\n args: [...imageBounds]\n }, /*#__PURE__*/React.createElement(\"instancedBufferAttribute\", {\n usage: DynamicDrawUsage,\n attach: \"attributes-cloudOpacity\",\n args: [opacities, 1]\n })), /*#__PURE__*/React.createElement(\"cloudMaterial\", {\n key: material.name,\n map: cloudTexture,\n transparent: true,\n depthWrite: false\n }))));\n});\nconst CloudInstance = /* @__PURE__ */React.forwardRef(({\n opacity = 1,\n speed = 0,\n bounds = [5, 1, 1],\n segments = 20,\n color = '#ffffff',\n fade = 10,\n volume = 6,\n smallestVolume = 0.25,\n distribute = null,\n growth = 4,\n concentrate = 'inside',\n seed = Math.random(),\n ...props\n}, fref) => {\n function random() {\n const x = Math.sin(seed++) * 10000;\n return x - Math.floor(x);\n }\n const parent = React.useContext(context);\n const ref = React.useRef(null);\n const uuid = React.useId();\n const clouds = React.useMemo(() => {\n return [...new Array(segments)].map((_, index) => ({\n segments,\n bounds: new Vector3(1, 1, 1),\n position: new Vector3(),\n uuid,\n index,\n ref,\n dist: 0,\n matrix: new Matrix4(),\n color: new Color(),\n rotation: index * (Math.PI / segments)\n }));\n }, [segments, uuid]);\n React.useLayoutEffect(() => {\n clouds.forEach((cloud, index) => {\n applyProps(cloud, {\n volume,\n color,\n speed,\n growth,\n opacity,\n fade,\n bounds,\n density: Math.max(0.5, random()),\n rotationFactor: Math.max(0.2, 0.5 * random()) * speed\n });\n // Only distribute randomly if there are multiple segments\n\n const distributed = distribute == null ? void 0 : distribute(cloud, index);\n if (distributed || segments > 1) {\n var _distributed$point;\n cloud.position.copy(cloud.bounds).multiply((_distributed$point = distributed == null ? void 0 : distributed.point) !== null && _distributed$point !== void 0 ? _distributed$point : {\n x: random() * 2 - 1,\n y: random() * 2 - 1,\n z: random() * 2 - 1\n });\n }\n const xDiff = Math.abs(cloud.position.x);\n const yDiff = Math.abs(cloud.position.y);\n const zDiff = Math.abs(cloud.position.z);\n const max = Math.max(xDiff, yDiff, zDiff);\n cloud.length = 1;\n if (xDiff === max) cloud.length -= xDiff / cloud.bounds.x;\n if (yDiff === max) cloud.length -= yDiff / cloud.bounds.y;\n if (zDiff === max) cloud.length -= zDiff / cloud.bounds.z;\n cloud.volume = ((distributed == null ? void 0 : distributed.volume) !== undefined ? distributed.volume : Math.max(Math.max(0, smallestVolume), concentrate === 'random' ? random() : concentrate === 'inside' ? cloud.length : 1 - cloud.length)) * volume;\n });\n }, [concentrate, bounds, fade, color, opacity, growth, volume, seed, segments, speed]);\n React.useLayoutEffect(() => {\n const temp = clouds;\n parent.current = [...parent.current, ...temp];\n return () => {\n parent.current = parent.current.filter(item => item.uuid !== uuid);\n };\n }, [clouds]);\n React.useImperativeHandle(fref, () => ref.current, []);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref\n }, props));\n});\nconst Cloud = /* @__PURE__ */React.forwardRef((props, fref) => {\n const parent = React.useContext(context);\n if (parent) return /*#__PURE__*/React.createElement(CloudInstance, _extends({\n ref: fref\n }, props));\n return /*#__PURE__*/React.createElement(Clouds, null, /*#__PURE__*/React.createElement(CloudInstance, _extends({\n ref: fref\n }, props)));\n});\n\nexport { Cloud, CloudInstance, Clouds };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { extend, useThree, useFrame } from '@react-three/fiber';\nimport { version } from '../helpers/constants.js';\n\nclass SparklesImplMaterial extends THREE.ShaderMaterial {\n constructor() {\n super({\n uniforms: {\n time: {\n value: 0\n },\n pixelRatio: {\n value: 1\n }\n },\n vertexShader: /* glsl */`\n uniform float pixelRatio;\n uniform float time;\n attribute float size; \n attribute float speed; \n attribute float opacity;\n attribute vec3 noise;\n attribute vec3 color;\n varying vec3 vColor;\n varying float vOpacity;\n\n void main() {\n vec4 modelPosition = modelMatrix * vec4(position, 1.0);\n modelPosition.y += sin(time * speed + modelPosition.x * noise.x * 100.0) * 0.2;\n modelPosition.z += cos(time * speed + modelPosition.x * noise.y * 100.0) * 0.2;\n modelPosition.x += cos(time * speed + modelPosition.x * noise.z * 100.0) * 0.2;\n vec4 viewPosition = viewMatrix * modelPosition;\n vec4 projectionPostion = projectionMatrix * viewPosition;\n gl_Position = projectionPostion;\n gl_PointSize = size * 25. * pixelRatio;\n gl_PointSize *= (1.0 / - viewPosition.z);\n vColor = color;\n vOpacity = opacity;\n }\n `,\n fragmentShader: /* glsl */`\n varying vec3 vColor;\n varying float vOpacity;\n void main() {\n float distanceToCenter = distance(gl_PointCoord, vec2(0.5));\n float strength = 0.05 / distanceToCenter - 0.1;\n gl_FragColor = vec4(vColor, strength * vOpacity);\n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }\n `\n });\n }\n get time() {\n return this.uniforms.time.value;\n }\n set time(value) {\n this.uniforms.time.value = value;\n }\n get pixelRatio() {\n return this.uniforms.pixelRatio.value;\n }\n set pixelRatio(value) {\n this.uniforms.pixelRatio.value = value;\n }\n}\nconst isFloat32Array = def => def && def.constructor === Float32Array;\nconst expandColor = v => [v.r, v.g, v.b];\nconst isVector = v => v instanceof THREE.Vector2 || v instanceof THREE.Vector3 || v instanceof THREE.Vector4;\nconst normalizeVector = v => {\n if (Array.isArray(v)) return v;else if (isVector(v)) return v.toArray();\n return [v, v, v];\n};\nfunction usePropAsIsOrAsAttribute(count, prop, setDefault) {\n return React.useMemo(() => {\n if (prop !== undefined) {\n if (isFloat32Array(prop)) {\n return prop;\n } else {\n if (prop instanceof THREE.Color) {\n const a = Array.from({\n length: count * 3\n }, () => expandColor(prop)).flat();\n return Float32Array.from(a);\n } else if (isVector(prop) || Array.isArray(prop)) {\n const a = Array.from({\n length: count * 3\n }, () => normalizeVector(prop)).flat();\n return Float32Array.from(a);\n }\n return Float32Array.from({\n length: count\n }, () => prop);\n }\n }\n return Float32Array.from({\n length: count\n }, setDefault);\n }, [prop]);\n}\nconst Sparkles = /* @__PURE__ */React.forwardRef(({\n noise = 1,\n count = 100,\n speed = 1,\n opacity = 1,\n scale = 1,\n size,\n color,\n children,\n ...props\n}, forwardRef) => {\n React.useMemo(() => extend({\n SparklesImplMaterial\n }), []);\n const ref = React.useRef(null);\n const dpr = useThree(state => state.viewport.dpr);\n const _scale = normalizeVector(scale);\n const positions = React.useMemo(() => Float32Array.from(Array.from({\n length: count\n }, () => _scale.map(THREE.MathUtils.randFloatSpread)).flat()), [count, ..._scale]);\n const sizes = usePropAsIsOrAsAttribute(count, size, Math.random);\n const opacities = usePropAsIsOrAsAttribute(count, opacity);\n const speeds = usePropAsIsOrAsAttribute(count, speed);\n const noises = usePropAsIsOrAsAttribute(count * 3, noise);\n const colors = usePropAsIsOrAsAttribute(color === undefined ? count * 3 : count, !isFloat32Array(color) ? new THREE.Color(color) : color, () => 1);\n useFrame(state => {\n if (ref.current && ref.current.material) ref.current.material.time = state.clock.elapsedTime;\n });\n React.useImperativeHandle(forwardRef, () => ref.current, []);\n return /*#__PURE__*/React.createElement(\"points\", _extends({\n key: `particle-${count}-${JSON.stringify(scale)}`\n }, props, {\n ref: ref\n }), /*#__PURE__*/React.createElement(\"bufferGeometry\", null, /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-position\",\n args: [positions, 3]\n }), /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-size\",\n args: [sizes, 1]\n }), /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-opacity\",\n args: [opacities, 1]\n }), /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-speed\",\n args: [speeds, 1]\n }), /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-color\",\n args: [colors, 3]\n }), /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-noise\",\n args: [noises, 3]\n })), children ? children : /*#__PURE__*/React.createElement(\"sparklesImplMaterial\", {\n transparent: true,\n pixelRatio: dpr,\n depthWrite: false\n }));\n});\n\nexport { Sparkles };\n","import * as React from 'react';\nimport { useTexture } from './Texture.js';\nimport { suspend } from 'suspend-react';\n\nfunction getFormatString(format) {\n switch (format) {\n case 64:\n return '-64px';\n case 128:\n return '-128px';\n case 256:\n return '-256px';\n case 512:\n return '-512px';\n default:\n return '';\n }\n}\nconst LIST_URL = 'https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/matcaps.json';\nconst MATCAP_ROOT = 'https://rawcdn.githack.com/emmelleppi/matcaps/9b36ccaaf0a24881a39062d05566c9e92be4aa0d';\nfunction useMatcapTexture(id = 0, format = 1024, onLoad) {\n const matcapList = suspend(() => fetch(LIST_URL).then(res => res.json()), ['matcapList']);\n const DEFAULT_MATCAP = matcapList[0];\n const numTot = React.useMemo(() => Object.keys(matcapList).length, []);\n const fileHash = React.useMemo(() => {\n if (typeof id === 'string') {\n return id;\n } else if (typeof id === 'number') {\n return matcapList[id];\n }\n return null;\n }, [id]);\n const fileName = `${fileHash || DEFAULT_MATCAP}${getFormatString(format)}.png`;\n const url = `${MATCAP_ROOT}/${format}/${fileName}`;\n const matcapTexture = useTexture(url, onLoad);\n return [matcapTexture, url, numTot];\n}\n\n//\n\nconst MatcapTexture = ({\n children,\n id,\n format,\n onLoad\n}) => {\n const texture = useMatcapTexture(id, format, onLoad);\n return /*#__PURE__*/React.createElement(React.Fragment, null, children == null ? void 0 : children(texture));\n};\n\nexport { MatcapTexture, useMatcapTexture };\n","import * as React from 'react';\nimport { useTexture } from './Texture.js';\nimport { RepeatWrapping, Vector2 } from 'three';\nimport { suspend } from 'suspend-react';\n\nconst NORMAL_ROOT = 'https://rawcdn.githack.com/pmndrs/drei-assets/7a3104997e1576f83472829815b00880d88b32fb';\nconst LIST_URL = 'https://cdn.jsdelivr.net/gh/pmndrs/drei-assets@master/normals/normals.json';\nfunction useNormalTexture(id = 0, settings = {}, onLoad) {\n const {\n repeat = [1, 1],\n anisotropy = 1,\n offset = [0, 0]\n } = settings;\n const normalsList = suspend(() => fetch(LIST_URL).then(res => res.json()), ['normalsList']);\n const numTot = React.useMemo(() => Object.keys(normalsList).length, []);\n const DEFAULT_NORMAL = normalsList[0];\n const imageName = normalsList[id] || DEFAULT_NORMAL;\n const url = `${NORMAL_ROOT}/normals/${imageName}`;\n const normalTexture = useTexture(url, onLoad);\n React.useLayoutEffect(() => {\n if (!normalTexture) return;\n normalTexture.wrapS = normalTexture.wrapT = RepeatWrapping;\n normalTexture.repeat = new Vector2(repeat[0], repeat[1]);\n normalTexture.offset = new Vector2(offset[0], offset[1]);\n normalTexture.anisotropy = anisotropy;\n }, [normalTexture, anisotropy, repeat, offset]);\n return [normalTexture, url, numTot];\n}\n\n//\n\nconst NormalTexture = ({\n children,\n id,\n onLoad,\n ...settings\n}) => {\n const ret = useNormalTexture(id, settings, onLoad);\n return /*#__PURE__*/React.createElement(React.Fragment, null, children == null ? void 0 : children(ret));\n};\n\nexport { NormalTexture, useNormalTexture };\n","import * as THREE from 'three';\nimport * as React from 'react';\nimport { shaderMaterial } from '../core/shaderMaterial.js';\n\nconst WireframeMaterialShaders = {\n uniforms: {\n strokeOpacity: 1,\n fillOpacity: 0.25,\n fillMix: 0,\n thickness: 0.05,\n colorBackfaces: false,\n dashInvert: true,\n dash: false,\n dashRepeats: 4,\n dashLength: 0.5,\n squeeze: false,\n squeezeMin: 0.2,\n squeezeMax: 1,\n stroke: /* @__PURE__ */new THREE.Color('#ff0000'),\n backfaceStroke: /* @__PURE__ */new THREE.Color('#0000ff'),\n fill: /* @__PURE__ */new THREE.Color('#00ff00')\n },\n vertex: /* glsl */`\n\t attribute vec3 barycentric;\n\t\n\t\tvarying vec3 v_edges_Barycentric;\n\t\tvarying vec3 v_edges_Position;\n\n\t\tvoid initWireframe() {\n\t\t\tv_edges_Barycentric = barycentric;\n\t\t\tv_edges_Position = position.xyz;\n\t\t}\n\t `,\n fragment: /* glsl */`\n\t\t#ifndef PI\n\t \t#define PI 3.1415926535897932384626433832795\n\t\t#endif\n \n\t varying vec3 v_edges_Barycentric;\n\t varying vec3 v_edges_Position;\n \n\t uniform float strokeOpacity;\n\t uniform float fillOpacity;\n\t uniform float fillMix;\n\t uniform float thickness;\n\t uniform bool colorBackfaces;\n \n\t // Dash\n\t uniform bool dashInvert;\n\t uniform bool dash;\n\t uniform bool dashOnly;\n\t uniform float dashRepeats;\n\t uniform float dashLength;\n \n\t // Squeeze\n\t uniform bool squeeze;\n\t uniform float squeezeMin;\n\t uniform float squeezeMax;\n \n\t // Colors\n\t uniform vec3 stroke;\n\t uniform vec3 backfaceStroke;\n\t uniform vec3 fill;\n \n\t // This is like\n\t float wireframe_aastep(float threshold, float dist) {\n\t\t float afwidth = fwidth(dist) * 0.5;\n\t\t return smoothstep(threshold - afwidth, threshold + afwidth, dist);\n\t }\n \n\t float wireframe_map(float value, float min1, float max1, float min2, float max2) {\n\t\t return min2 + (value - min1) * (max2 - min2) / (max1 - min1);\n\t }\n \n\t float getWireframe() {\n\t\t\tvec3 barycentric = v_edges_Barycentric;\n\t\t\n\t\t\t// Distance from center of each triangle to its edges.\n\t\t\tfloat d = min(min(barycentric.x, barycentric.y), barycentric.z);\n\n\t\t\t// for dashed rendering, we can use this to get the 0 .. 1 value of the line length\n\t\t\tfloat positionAlong = max(barycentric.x, barycentric.y);\n\t\t\tif (barycentric.y < barycentric.x && barycentric.y < barycentric.z) {\n\t\t\t\tpositionAlong = 1.0 - positionAlong;\n\t\t\t}\n\n\t\t\t// the thickness of the stroke\n\t\t\tfloat computedThickness = wireframe_map(thickness, 0.0, 1.0, 0.0, 0.34);\n\n\t\t\t// if we want to shrink the thickness toward the center of the line segment\n\t\t\tif (squeeze) {\n\t\t\t\tcomputedThickness *= mix(squeezeMin, squeezeMax, (1.0 - sin(positionAlong * PI)));\n\t\t\t}\n\n\t\t\t// Create dash pattern\n\t\t\tif (dash) {\n\t\t\t\t// here we offset the stroke position depending on whether it\n\t\t\t\t// should overlap or not\n\t\t\t\tfloat offset = 1.0 / dashRepeats * dashLength / 2.0;\n\t\t\t\tif (!dashInvert) {\n\t\t\t\t\toffset += 1.0 / dashRepeats / 2.0;\n\t\t\t\t}\n\n\t\t\t\t// if we should animate the dash or not\n\t\t\t\t// if (dashAnimate) {\n\t\t\t\t// \toffset += time * 0.22;\n\t\t\t\t// }\n\n\t\t\t\t// create the repeating dash pattern\n\t\t\t\tfloat pattern = fract((positionAlong + offset) * dashRepeats);\n\t\t\t\tcomputedThickness *= 1.0 - wireframe_aastep(dashLength, pattern);\n\t\t\t}\n\n\t\t\t// compute the anti-aliased stroke edge \n\t\t\tfloat edge = 1.0 - wireframe_aastep(computedThickness, d);\n\n\t\t\treturn edge;\n\t }\n\t `\n};\nconst WireframeMaterial = /* @__PURE__ */shaderMaterial(WireframeMaterialShaders.uniforms, WireframeMaterialShaders.vertex + /* glsl */`\n \tvoid main() {\n\t\tinitWireframe();\n\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n\t}\n `, WireframeMaterialShaders.fragment + /* glsl */`\n void main () {\n\t\t// Compute color\n\n\t\tfloat edge = getWireframe();\n\t\tvec4 colorStroke = vec4(stroke, edge);\n\n\t\t#ifdef FLIP_SIDED\n\t\t\tcolorStroke.rgb = backfaceStroke;\n\t\t#endif\n \n\t\tvec4 colorFill = vec4(fill, fillOpacity);\n\t\tvec4 outColor = mix(colorFill, colorStroke, edge * strokeOpacity);\n\n\t\tgl_FragColor = outColor;\n\t}\n `);\nfunction setWireframeOverride(material, uniforms) {\n material.onBeforeCompile = shader => {\n shader.uniforms = {\n ...shader.uniforms,\n ...uniforms\n };\n shader.vertexShader = shader.vertexShader.replace('void main() {', `\n\t\t ${WireframeMaterialShaders.vertex}\n\t\t void main() {\n\t\t\tinitWireframe();\n\t\t`);\n shader.fragmentShader = shader.fragmentShader.replace('void main() {', `\n\t\t ${WireframeMaterialShaders.fragment}\n\t\t void main() {\n\t\t`);\n shader.fragmentShader = shader.fragmentShader.replace('#include <color_fragment>', /* glsl */`\n\t\t #include <color_fragment>\n\t\t\t float edge = getWireframe();\n\t\t vec4 colorStroke = vec4(stroke, edge);\n\t\t #ifdef FLIP_SIDED\n\t\t\tcolorStroke.rgb = backfaceStroke;\n\t\t #endif\n\t\t vec4 colorFill = vec4(mix(diffuseColor.rgb, fill, fillMix), mix(diffuseColor.a, fillOpacity, fillMix));\n\t\t vec4 outColor = mix(colorFill, colorStroke, edge * strokeOpacity);\n\n\t\t diffuseColor.rgb = outColor.rgb;\n\t\t diffuseColor.a *= outColor.a;\n\t\t`);\n };\n material.side = THREE.DoubleSide;\n material.transparent = true;\n}\nfunction useWireframeUniforms(uniforms, props) {\n React.useEffect(() => {\n var _props$fillOpacity;\n return void (uniforms.fillOpacity.value = (_props$fillOpacity = props.fillOpacity) !== null && _props$fillOpacity !== void 0 ? _props$fillOpacity : uniforms.fillOpacity.value);\n }, [props.fillOpacity]);\n React.useEffect(() => {\n var _props$fillMix;\n return void (uniforms.fillMix.value = (_props$fillMix = props.fillMix) !== null && _props$fillMix !== void 0 ? _props$fillMix : uniforms.fillMix.value);\n }, [props.fillMix]);\n React.useEffect(() => {\n var _props$strokeOpacity;\n return void (uniforms.strokeOpacity.value = (_props$strokeOpacity = props.strokeOpacity) !== null && _props$strokeOpacity !== void 0 ? _props$strokeOpacity : uniforms.strokeOpacity.value);\n }, [props.strokeOpacity]);\n React.useEffect(() => {\n var _props$thickness;\n return void (uniforms.thickness.value = (_props$thickness = props.thickness) !== null && _props$thickness !== void 0 ? _props$thickness : uniforms.thickness.value);\n }, [props.thickness]);\n React.useEffect(() => void (uniforms.colorBackfaces.value = !!props.colorBackfaces), [props.colorBackfaces]);\n React.useEffect(() => void (uniforms.dash.value = !!props.dash), [props.dash]);\n React.useEffect(() => void (uniforms.dashInvert.value = !!props.dashInvert), [props.dashInvert]);\n React.useEffect(() => {\n var _props$dashRepeats;\n return void (uniforms.dashRepeats.value = (_props$dashRepeats = props.dashRepeats) !== null && _props$dashRepeats !== void 0 ? _props$dashRepeats : uniforms.dashRepeats.value);\n }, [props.dashRepeats]);\n React.useEffect(() => {\n var _props$dashLength;\n return void (uniforms.dashLength.value = (_props$dashLength = props.dashLength) !== null && _props$dashLength !== void 0 ? _props$dashLength : uniforms.dashLength.value);\n }, [props.dashLength]);\n React.useEffect(() => void (uniforms.squeeze.value = !!props.squeeze), [props.squeeze]);\n React.useEffect(() => {\n var _props$squeezeMin;\n return void (uniforms.squeezeMin.value = (_props$squeezeMin = props.squeezeMin) !== null && _props$squeezeMin !== void 0 ? _props$squeezeMin : uniforms.squeezeMin.value);\n }, [props.squeezeMin]);\n React.useEffect(() => {\n var _props$squeezeMax;\n return void (uniforms.squeezeMax.value = (_props$squeezeMax = props.squeezeMax) !== null && _props$squeezeMax !== void 0 ? _props$squeezeMax : uniforms.squeezeMax.value);\n }, [props.squeezeMax]);\n React.useEffect(() => void (uniforms.stroke.value = props.stroke ? new THREE.Color(props.stroke) : uniforms.stroke.value), [props.stroke]);\n React.useEffect(() => void (uniforms.fill.value = props.fill ? new THREE.Color(props.fill) : uniforms.fill.value), [props.fill]);\n React.useEffect(() => void (uniforms.backfaceStroke.value = props.backfaceStroke ? new THREE.Color(props.backfaceStroke) : uniforms.backfaceStroke.value), [props.backfaceStroke]);\n}\n\nexport { WireframeMaterial, WireframeMaterialShaders, setWireframeOverride, useWireframeUniforms };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { extend } from '@react-three/fiber';\nimport { WireframeMaterial, WireframeMaterialShaders, useWireframeUniforms, setWireframeOverride } from '../materials/WireframeMaterial.js';\n\nfunction isWithGeometry(object) {\n return !!(object != null && object.geometry);\n}\nfunction isGeometry(object) {\n return !!(object != null && object.isBufferGeometry);\n}\nfunction isRefObject(object) {\n return !!(object != null && object.current);\n}\nfunction isRef(object) {\n return (object == null ? void 0 : object.current) !== undefined;\n}\nfunction isWireframeGeometry(geometry) {\n return geometry.type === 'WireframeGeometry';\n}\nfunction getUniforms() {\n const u = {};\n for (const key in WireframeMaterialShaders.uniforms) {\n u[key] = {\n value: WireframeMaterialShaders.uniforms[key]\n };\n }\n return u;\n}\nfunction getBarycentricCoordinates(geometry, removeEdge) {\n const position = geometry.getAttribute('position');\n const count = position.count;\n const barycentric = [];\n for (let i = 0; i < count; i++) {\n const even = i % 2 === 0;\n const Q = removeEdge ? 1 : 0;\n if (even) {\n barycentric.push(0, 0, 1, 0, 1, 0, 1, 0, Q);\n } else {\n barycentric.push(0, 1, 0, 0, 0, 1, 1, 0, Q);\n }\n }\n return new THREE.BufferAttribute(Float32Array.from(barycentric), 3);\n}\nfunction getInputGeometry(inputGeometry) {\n const geo = isRefObject(inputGeometry) ? inputGeometry.current : inputGeometry;\n if (!isGeometry(geo)) {\n // Disallow WireframeGeometry\n if (isWireframeGeometry(geo)) {\n throw new Error('Wireframe: WireframeGeometry is not supported.');\n }\n const parent = geo.parent;\n if (isWithGeometry(parent)) {\n // Disallow WireframeGeometry\n if (isWireframeGeometry(parent.geometry)) {\n throw new Error('Wireframe: WireframeGeometry is not supported.');\n }\n return parent.geometry;\n }\n } else {\n return geo;\n }\n}\nfunction setBarycentricCoordinates(geometry, simplify) {\n if (geometry.index) {\n console.warn('Wireframe: Requires non-indexed geometry, converting to non-indexed geometry.');\n const nonIndexedGeo = geometry.toNonIndexed();\n geometry.copy(nonIndexedGeo);\n geometry.setIndex(null);\n }\n const newBarycentric = getBarycentricCoordinates(geometry, simplify);\n geometry.setAttribute('barycentric', newBarycentric);\n}\nfunction WireframeWithCustomGeo({\n geometry: customGeometry,\n simplify = false,\n ...props\n}) {\n extend({\n MeshWireframeMaterial: WireframeMaterial\n });\n const [geometry, setGeometry] = React.useState(null);\n React.useLayoutEffect(() => {\n const geom = getInputGeometry(customGeometry);\n if (!geom) {\n throw new Error('Wireframe: geometry prop must be a BufferGeometry or a ref to a BufferGeometry.');\n }\n setBarycentricCoordinates(geom, simplify);\n if (isRef(customGeometry)) {\n setGeometry(geom);\n }\n }, [simplify, customGeometry]);\n const drawnGeo = isRef(customGeometry) ? geometry : customGeometry;\n return /*#__PURE__*/React.createElement(React.Fragment, null, drawnGeo && /*#__PURE__*/React.createElement(\"mesh\", {\n geometry: drawnGeo\n }, /*#__PURE__*/React.createElement(\"meshWireframeMaterial\", _extends({\n attach: \"material\",\n transparent: true,\n side: THREE.DoubleSide,\n polygonOffset: true //\n ,\n polygonOffsetFactor: -4\n }, props, {\n extensions: {\n derivatives: true,\n fragDepth: false,\n drawBuffers: false,\n shaderTextureLOD: false\n }\n }))));\n}\nfunction WireframeWithoutCustomGeo({\n simplify = false,\n ...props\n}) {\n const objectRef = React.useRef(null);\n const uniforms = React.useMemo(() => getUniforms(), [WireframeMaterialShaders.uniforms]);\n useWireframeUniforms(uniforms, props);\n React.useLayoutEffect(() => {\n const geom = getInputGeometry(objectRef);\n if (!geom) {\n throw new Error('Wireframe: Must be a child of a Mesh, Line or Points object or specify a geometry prop.');\n }\n const og = geom.clone();\n setBarycentricCoordinates(geom, simplify);\n return () => {\n geom.copy(og);\n og.dispose();\n };\n }, [simplify]);\n React.useLayoutEffect(() => {\n const parentMesh = objectRef.current.parent;\n const og = parentMesh.material.clone();\n setWireframeOverride(parentMesh.material, uniforms);\n return () => {\n parentMesh.material.dispose();\n parentMesh.material = og;\n };\n }, []);\n return /*#__PURE__*/React.createElement(\"object3D\", {\n ref: objectRef\n });\n}\nfunction Wireframe({\n geometry: customGeometry,\n ...props\n}) {\n if (customGeometry) {\n return /*#__PURE__*/React.createElement(WireframeWithCustomGeo, _extends({\n geometry: customGeometry\n }, props));\n }\n return /*#__PURE__*/React.createElement(WireframeWithoutCustomGeo, props);\n}\n\nexport { Wireframe };\n","import { useFrame } from '@react-three/fiber';\nimport * as React from 'react';\nimport * as THREE from 'three';\n\n/**\n * Integration and compilation: Faraz Shaikh (https://twitter.com/CantBeFaraz)\n *\n * Based on:\n * - https://gkjohnson.github.io/threejs-sandbox/screendoor-transparency/ by Garrett Johnson (https://github.com/gkjohnson)\n *\n * Note:\n * - Must depreciate in favor of https://github.com/mrdoob/three.js/issues/10600 when it's ready.\n */\nfunction ShadowAlpha({\n opacity,\n alphaMap\n}) {\n const depthMaterialRef = React.useRef(null);\n const distanceMaterialRef = React.useRef(null);\n const uShadowOpacity = React.useRef({\n value: 1\n });\n const uAlphaMap = React.useRef({\n value: null\n });\n const uHasAlphaMap = React.useRef({\n value: false\n });\n React.useLayoutEffect(() => {\n depthMaterialRef.current.onBeforeCompile = distanceMaterialRef.current.onBeforeCompile = shader => {\n // Need to get the \"void main\" line dynamically because the lines for\n // MeshDistanceMaterial and MeshDepthMaterial are different 🤦‍♂️\n const mainLineStart = shader.fragmentShader.indexOf('void main');\n let mainLine = '';\n let ch;\n let i = mainLineStart;\n while (ch !== '\\n' && i < mainLineStart + 100) {\n ch = shader.fragmentShader.charAt(i);\n mainLine += ch;\n i++;\n }\n mainLine = mainLine.trim();\n shader.vertexShader = shader.vertexShader.replace('void main() {', `\n varying vec2 custom_vUv;\n\n void main() {\n custom_vUv = uv;\n \n `);\n shader.fragmentShader = shader.fragmentShader.replace(mainLine, `\n uniform float uShadowOpacity;\n uniform sampler2D uAlphaMap;\n uniform bool uHasAlphaMap;\n\n varying vec2 custom_vUv;\n \n float bayerDither2x2( vec2 v ) {\n return mod( 3.0 * v.y + 2.0 * v.x, 4.0 );\n }\n \n float bayerDither4x4( vec2 v ) {\n vec2 P1 = mod( v, 2.0 );\n vec2 P2 = mod( floor( 0.5 * v ), 2.0 );\n return 4.0 * bayerDither2x2( P1 ) + bayerDither2x2( P2 );\n }\n \n void main() {\n float alpha = \n uHasAlphaMap ? \n uShadowOpacity * texture2D(uAlphaMap, custom_vUv).x\n : uShadowOpacity;\n\n if( ( bayerDither4x4( floor( mod( gl_FragCoord.xy, 4.0 ) ) ) ) / 16.0 >= alpha ) discard;\n \n `);\n shader.uniforms['uShadowOpacity'] = uShadowOpacity.current;\n shader.uniforms['uAlphaMap'] = uAlphaMap.current;\n shader.uniforms['uHasAlphaMap'] = uHasAlphaMap.current;\n };\n }, []);\n useFrame(() => {\n var _r3f;\n const parent = (_r3f = depthMaterialRef.current.__r3f) == null || (_r3f = _r3f.parent) == null ? void 0 : _r3f.object;\n if (parent) {\n const parentMainMaterial = parent.material;\n if (parentMainMaterial) {\n uShadowOpacity.current.value = opacity !== null && opacity !== void 0 ? opacity : parentMainMaterial.opacity;\n if (alphaMap === false) {\n uAlphaMap.current.value = null;\n uHasAlphaMap.current.value = false;\n } else {\n uAlphaMap.current.value = alphaMap || parentMainMaterial.alphaMap;\n uHasAlphaMap.current.value = !!uAlphaMap.current.value;\n }\n }\n }\n });\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"meshDepthMaterial\", {\n ref: depthMaterialRef,\n attach: \"customDepthMaterial\",\n depthPacking: THREE.RGBADepthPacking\n }), /*#__PURE__*/React.createElement(\"meshDistanceMaterial\", {\n ref: distanceMaterialRef,\n attach: \"customDistanceMaterial\"\n }));\n}\n\nexport { ShadowAlpha };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { extend, useFrame } from '@react-three/fiber';\n\nconst _inverseMatrix = /* @__PURE__ */new THREE.Matrix4();\nconst _ray = /* @__PURE__ */new THREE.Ray();\nconst _sphere = /* @__PURE__ */new THREE.Sphere();\nconst _position = /* @__PURE__ */new THREE.Vector3();\nclass PositionPoint extends THREE.Group {\n constructor() {\n super();\n this.size = 0;\n this.color = new THREE.Color('white');\n this.instance = {\n current: undefined\n };\n this.instanceKey = {\n current: undefined\n };\n }\n\n // This will allow the virtual instance have bounds\n get geometry() {\n var _this$instance$curren;\n return (_this$instance$curren = this.instance.current) == null ? void 0 : _this$instance$curren.geometry;\n }\n raycast(raycaster, intersects) {\n var _raycaster$params$Poi, _raycaster$params$Poi2;\n const parent = this.instance.current;\n if (!parent || !parent.geometry) return;\n const instanceId = parent.userData.instances.indexOf(this.instanceKey);\n // If the instance wasn't found or exceeds the parents draw range, bail out\n if (instanceId === -1 || instanceId > parent.geometry.drawRange.count) return;\n const threshold = (_raycaster$params$Poi = (_raycaster$params$Poi2 = raycaster.params.Points) == null ? void 0 : _raycaster$params$Poi2.threshold) !== null && _raycaster$params$Poi !== void 0 ? _raycaster$params$Poi : 1;\n _sphere.set(this.getWorldPosition(_position), threshold);\n if (raycaster.ray.intersectsSphere(_sphere) === false) return;\n _inverseMatrix.copy(parent.matrixWorld).invert();\n _ray.copy(raycaster.ray).applyMatrix4(_inverseMatrix);\n const localThreshold = threshold / ((this.scale.x + this.scale.y + this.scale.z) / 3);\n const localThresholdSq = localThreshold * localThreshold;\n const rayPointDistanceSq = _ray.distanceSqToPoint(this.position);\n if (rayPointDistanceSq < localThresholdSq) {\n const intersectPoint = new THREE.Vector3();\n _ray.closestPointToPoint(this.position, intersectPoint);\n intersectPoint.applyMatrix4(this.matrixWorld);\n const distance = raycaster.ray.origin.distanceTo(intersectPoint);\n if (distance < raycaster.near || distance > raycaster.far) return;\n intersects.push({\n distance: distance,\n distanceToRay: Math.sqrt(rayPointDistanceSq),\n point: intersectPoint,\n index: instanceId,\n face: null,\n object: this\n });\n }\n }\n}\nlet i, positionRef;\nconst context = /* @__PURE__ */React.createContext(null);\nconst parentMatrix = /* @__PURE__ */new THREE.Matrix4();\nconst position = /* @__PURE__ */new THREE.Vector3();\n\n/**\n * Instance implementation, relies on react + context to update the attributes based on the children of this component\n */\nconst PointsInstances = /* @__PURE__ */React.forwardRef(({\n children,\n range,\n limit = 1000,\n ...props\n}, ref) => {\n const parentRef = React.useRef(null);\n React.useImperativeHandle(ref, () => parentRef.current, []);\n const [refs, setRefs] = React.useState([]);\n const [[positions, colors, sizes]] = React.useState(() => [new Float32Array(limit * 3), Float32Array.from({\n length: limit * 3\n }, () => 1), Float32Array.from({\n length: limit\n }, () => 1)]);\n React.useEffect(() => {\n // We might be a frame too late? 🤷‍♂️\n parentRef.current.geometry.attributes.position.needsUpdate = true;\n });\n useFrame(() => {\n parentRef.current.updateMatrix();\n parentRef.current.updateMatrixWorld();\n parentMatrix.copy(parentRef.current.matrixWorld).invert();\n parentRef.current.geometry.drawRange.count = Math.min(limit, range !== undefined ? range : limit, refs.length);\n for (i = 0; i < refs.length; i++) {\n positionRef = refs[i].current;\n positionRef.getWorldPosition(position).applyMatrix4(parentMatrix);\n position.toArray(positions, i * 3);\n parentRef.current.geometry.attributes.position.needsUpdate = true;\n positionRef.matrixWorldNeedsUpdate = true;\n positionRef.color.toArray(colors, i * 3);\n parentRef.current.geometry.attributes.color.needsUpdate = true;\n sizes.set([positionRef.size], i);\n parentRef.current.geometry.attributes.size.needsUpdate = true;\n }\n });\n const api = React.useMemo(() => ({\n getParent: () => parentRef,\n subscribe: ref => {\n setRefs(refs => [...refs, ref]);\n return () => setRefs(refs => refs.filter(item => item.current !== ref.current));\n }\n }), []);\n return /*#__PURE__*/React.createElement(\"points\", _extends({\n userData: {\n instances: refs\n },\n matrixAutoUpdate: false,\n ref: parentRef,\n raycast: () => null\n }, props), /*#__PURE__*/React.createElement(\"bufferGeometry\", null, /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-position\",\n args: [positions, 3],\n usage: THREE.DynamicDrawUsage\n }), /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-color\",\n args: [colors, 3],\n usage: THREE.DynamicDrawUsage\n }), /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-size\",\n args: [sizes, 1],\n usage: THREE.DynamicDrawUsage\n })), /*#__PURE__*/React.createElement(context.Provider, {\n value: api\n }, children));\n});\nconst Point = /* @__PURE__ */React.forwardRef(({\n children,\n ...props\n}, ref) => {\n React.useMemo(() => extend({\n PositionPoint\n }), []);\n const group = React.useRef(null);\n React.useImperativeHandle(ref, () => group.current, []);\n const {\n subscribe,\n getParent\n } = React.useContext(context);\n React.useLayoutEffect(() => subscribe(group), []);\n return /*#__PURE__*/React.createElement(\"positionPoint\", _extends({\n instance: getParent(),\n instanceKey: group,\n ref: group\n }, props), children);\n});\n\n/**\n * Buffer implementation, relies on complete buffers of the correct number, leaves it to the user to update them\n */\n\nconst PointsBuffer = /* @__PURE__ */React.forwardRef(({\n children,\n positions,\n colors,\n sizes,\n stride = 3,\n ...props\n}, forwardedRef) => {\n const pointsRef = React.useRef(null);\n React.useImperativeHandle(forwardedRef, () => pointsRef.current, []);\n useFrame(() => {\n const attr = pointsRef.current.geometry.attributes;\n attr.position.needsUpdate = true;\n if (colors) attr.color.needsUpdate = true;\n if (sizes) attr.size.needsUpdate = true;\n });\n return /*#__PURE__*/React.createElement(\"points\", _extends({\n ref: pointsRef\n }, props), /*#__PURE__*/React.createElement(\"bufferGeometry\", null, /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-position\",\n args: [positions, stride],\n usage: THREE.DynamicDrawUsage\n }), colors && /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-color\",\n args: [colors, stride],\n count: colors.length / stride,\n usage: THREE.DynamicDrawUsage\n }), sizes && /*#__PURE__*/React.createElement(\"bufferAttribute\", {\n attach: \"attributes-size\",\n args: [sizes, 1],\n count: sizes.length / stride,\n usage: THREE.DynamicDrawUsage\n })), children);\n});\nconst Points = /* @__PURE__ */React.forwardRef((props, forwardedRef) => {\n if (props.positions instanceof Float32Array) {\n return /*#__PURE__*/React.createElement(PointsBuffer, _extends({}, props, {\n ref: forwardedRef\n }));\n } else return /*#__PURE__*/React.createElement(PointsInstances, _extends({}, props, {\n ref: forwardedRef\n }));\n});\n\nexport { Point, Points, PointsBuffer, PositionPoint };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { extend, useFrame } from '@react-three/fiber';\nimport { Line2, LineMaterial, LineSegmentsGeometry } from 'three-stdlib';\n\nconst context = /* @__PURE__ */React.createContext(null);\nconst Segments = /* @__PURE__ */React.forwardRef((props, forwardedRef) => {\n React.useMemo(() => extend({\n SegmentObject\n }), []);\n const {\n limit = 1000,\n lineWidth = 1.0,\n children,\n ...rest\n } = props;\n const [segments, setSegments] = React.useState([]);\n const [line] = React.useState(() => new Line2());\n const [material] = React.useState(() => new LineMaterial());\n const [geometry] = React.useState(() => new LineSegmentsGeometry());\n const [resolution] = React.useState(() => new THREE.Vector2(512, 512));\n const [positions] = React.useState(() => Array(limit * 6).fill(0));\n const [colors] = React.useState(() => Array(limit * 6).fill(0));\n const api = React.useMemo(() => ({\n subscribe: ref => {\n setSegments(segments => [...segments, ref]);\n return () => setSegments(segments => segments.filter(item => item.current !== ref.current));\n }\n }), []);\n useFrame(() => {\n for (let i = 0; i < limit; i++) {\n var _segments$i;\n const segment = (_segments$i = segments[i]) == null ? void 0 : _segments$i.current;\n if (segment) {\n positions[i * 6 + 0] = segment.start.x;\n positions[i * 6 + 1] = segment.start.y;\n positions[i * 6 + 2] = segment.start.z;\n positions[i * 6 + 3] = segment.end.x;\n positions[i * 6 + 4] = segment.end.y;\n positions[i * 6 + 5] = segment.end.z;\n colors[i * 6 + 0] = segment.color.r;\n colors[i * 6 + 1] = segment.color.g;\n colors[i * 6 + 2] = segment.color.b;\n colors[i * 6 + 3] = segment.color.r;\n colors[i * 6 + 4] = segment.color.g;\n colors[i * 6 + 5] = segment.color.b;\n }\n }\n geometry.setColors(colors);\n geometry.setPositions(positions);\n line.computeLineDistances();\n });\n return /*#__PURE__*/React.createElement(\"primitive\", {\n object: line,\n ref: forwardedRef\n }, /*#__PURE__*/React.createElement(\"primitive\", {\n object: geometry,\n attach: \"geometry\"\n }), /*#__PURE__*/React.createElement(\"primitive\", _extends({\n object: material,\n attach: \"material\",\n vertexColors: true,\n resolution: resolution,\n linewidth: lineWidth\n }, rest)), /*#__PURE__*/React.createElement(context.Provider, {\n value: api\n }, children));\n});\nclass SegmentObject {\n constructor() {\n this.color = new THREE.Color('white');\n this.start = new THREE.Vector3(0, 0, 0);\n this.end = new THREE.Vector3(0, 0, 0);\n }\n}\nconst normPos = pos => pos instanceof THREE.Vector3 ? pos : new THREE.Vector3(...(typeof pos === 'number' ? [pos, pos, pos] : pos));\nconst Segment = /* @__PURE__ */React.forwardRef(({\n color,\n start,\n end\n}, forwardedRef) => {\n const api = React.useContext(context);\n if (!api) throw 'Segment must used inside Segments component.';\n const ref = React.useRef(null);\n React.useImperativeHandle(forwardedRef, () => ref.current, []);\n React.useLayoutEffect(() => api.subscribe(ref), []);\n return /*#__PURE__*/React.createElement(\"segmentObject\", {\n ref: ref,\n color: color,\n start: normPos(start),\n end: normPos(end)\n });\n});\n\nexport { Segment, SegmentObject, Segments };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { useFrame } from '@react-three/fiber';\n\nconst Detailed = /* @__PURE__ */React.forwardRef(({\n children,\n hysteresis = 0,\n distances,\n ...props\n}, ref) => {\n const lodRef = React.useRef(null);\n React.useImperativeHandle(ref, () => lodRef.current, []);\n React.useLayoutEffect(() => {\n const {\n current: lod\n } = lodRef;\n lod.levels.length = 0;\n lod.children.forEach((object, index) => lod.levels.push({\n object,\n hysteresis,\n distance: distances[index]\n }));\n });\n useFrame(state => {\n var _lodRef$current;\n return (_lodRef$current = lodRef.current) == null ? void 0 : _lodRef$current.update(state.camera);\n });\n return /*#__PURE__*/React.createElement(\"lOD\", _extends({\n ref: lodRef\n }, props), children);\n});\n\nexport { Detailed };\n","import { WebGLCubeRenderTarget, CubeCamera } from 'three';\nimport * as React from 'react';\nimport { useThree } from '@react-three/fiber';\n\nfunction Preload({\n all,\n scene,\n camera\n}) {\n const gl = useThree(({\n gl\n }) => gl);\n const dCamera = useThree(({\n camera\n }) => camera);\n const dScene = useThree(({\n scene\n }) => scene);\n\n // Layout effect because it must run before React commits\n React.useLayoutEffect(() => {\n const invisible = [];\n if (all) {\n (scene || dScene).traverse(object => {\n if (object.visible === false) {\n invisible.push(object);\n object.visible = true;\n }\n });\n }\n // Now compile the scene\n gl.compile(scene || dScene, camera || dCamera);\n // And for good measure, hit it with a cube camera\n const cubeRenderTarget = new WebGLCubeRenderTarget(128);\n const cubeCamera = new CubeCamera(0.01, 100000, cubeRenderTarget);\n cubeCamera.update(gl, scene || dScene);\n cubeRenderTarget.dispose();\n // Flips these objects back\n invisible.forEach(object => object.visible = false);\n }, []);\n return null;\n}\n\nexport { Preload };\n","import { useEffect } from 'react';\nimport { useThree } from '@react-three/fiber';\n\nfunction BakeShadows() {\n const gl = useThree(state => state.gl);\n useEffect(() => {\n gl.shadowMap.autoUpdate = false;\n gl.shadowMap.needsUpdate = true;\n return () => {\n gl.shadowMap.autoUpdate = gl.shadowMap.needsUpdate = true;\n };\n }, [gl.shadowMap]);\n return null;\n}\n\nexport { BakeShadows };\n","import { Matrix4, Ray, Sphere, Vector3 } from 'three';\n\nconst _inverseMatrix = /* @__PURE__ */new Matrix4();\nconst _ray = /* @__PURE__ */new Ray();\nconst _sphere = /* @__PURE__ */new Sphere();\nconst _vA = /* @__PURE__ */new Vector3();\nfunction meshBounds(raycaster, intersects) {\n const geometry = this.geometry;\n const material = this.material;\n const matrixWorld = this.matrixWorld;\n if (material === undefined) return;\n // Checking boundingSphere distance to ray\n if (geometry.boundingSphere === null) geometry.computeBoundingSphere();\n _sphere.copy(geometry.boundingSphere);\n _sphere.applyMatrix4(matrixWorld);\n if (raycaster.ray.intersectsSphere(_sphere) === false) return;\n _inverseMatrix.copy(matrixWorld).invert();\n _ray.copy(raycaster.ray).applyMatrix4(_inverseMatrix);\n // Check boundingBox before continuing\n if (geometry.boundingBox !== null && _ray.intersectBox(geometry.boundingBox, _vA) === null) return;\n intersects.push({\n distance: _vA.distanceTo(raycaster.ray.origin),\n point: _vA.clone(),\n object: this\n });\n}\n\nexport { meshBounds };\n","import * as React from 'react';\nimport { useThree } from '@react-three/fiber';\n\nfunction AdaptiveDpr({\n pixelated\n}) {\n const gl = useThree(state => state.gl);\n const active = useThree(state => state.internal.active);\n const current = useThree(state => state.performance.current);\n const initialDpr = useThree(state => state.viewport.initialDpr);\n const setDpr = useThree(state => state.setDpr);\n // Restore initial pixelratio on unmount\n React.useEffect(() => {\n const domElement = gl.domElement;\n return () => {\n if (active) setDpr(initialDpr);\n if (pixelated && domElement) domElement.style.imageRendering = 'auto';\n };\n }, []);\n // Set adaptive pixelratio\n React.useEffect(() => {\n setDpr(current * initialDpr);\n if (pixelated && gl.domElement) gl.domElement.style.imageRendering = current === 1 ? 'auto' : 'pixelated';\n }, [current]);\n return null;\n}\n\nexport { AdaptiveDpr };\n","import * as React from 'react';\nimport { useThree } from '@react-three/fiber';\n\nfunction AdaptiveEvents() {\n const get = useThree(state => state.get);\n const setEvents = useThree(state => state.setEvents);\n const current = useThree(state => state.performance.current);\n React.useEffect(() => {\n const enabled = get().events.enabled;\n return () => setEvents({\n enabled\n });\n }, []);\n React.useEffect(() => setEvents({\n enabled: current === 1\n }), [current]);\n return null;\n}\n\nexport { AdaptiveEvents };\n","import * as React from 'react';\nimport { useState, useContext, useRef, useLayoutEffect, createContext } from 'react';\nimport { useFrame } from '@react-three/fiber';\n\nconst context = /* @__PURE__ */createContext(null);\nfunction PerformanceMonitor({\n iterations = 10,\n ms = 250,\n threshold = 0.75,\n step = 0.1,\n factor: _factor = 0.5,\n flipflops = Infinity,\n bounds = refreshrate => refreshrate > 100 ? [60, 100] : [40, 60],\n onIncline,\n onDecline,\n onChange,\n onFallback,\n children\n}) {\n const decimalPlacesRatio = Math.pow(10, 0);\n const [api, _] = useState(() => ({\n fps: 0,\n index: 0,\n factor: _factor,\n flipped: 0,\n refreshrate: 0,\n fallback: false,\n frames: [],\n averages: [],\n subscriptions: new Map(),\n subscribe: ref => {\n const key = Symbol();\n api.subscriptions.set(key, ref.current);\n return () => void api.subscriptions.delete(key);\n }\n }));\n let lastFactor = 0;\n useFrame(() => {\n const {\n frames,\n averages\n } = api;\n\n // If the fallback has been reached do not continue running samples\n if (api.fallback) return;\n if (averages.length < iterations) {\n frames.push(performance.now());\n const msPassed = frames[frames.length - 1] - frames[0];\n if (msPassed >= ms) {\n api.fps = Math.round(frames.length / msPassed * 1000 * decimalPlacesRatio) / decimalPlacesRatio;\n api.refreshrate = Math.max(api.refreshrate, api.fps);\n averages[api.index++ % iterations] = api.fps;\n if (averages.length === iterations) {\n const [lower, upper] = bounds(api.refreshrate);\n const upperBounds = averages.filter(value => value >= upper);\n const lowerBounds = averages.filter(value => value < lower);\n // Trigger incline when more than -threshold- avgs exceed the upper bound\n if (upperBounds.length > iterations * threshold) {\n api.factor = Math.min(1, api.factor + step);\n api.flipped++;\n if (onIncline) onIncline(api);\n api.subscriptions.forEach(value => value.onIncline && value.onIncline(api));\n }\n // Trigger decline when more than -threshold- avgs are below the lower bound\n if (lowerBounds.length > iterations * threshold) {\n api.factor = Math.max(0, api.factor - step);\n api.flipped++;\n if (onDecline) onDecline(api);\n api.subscriptions.forEach(value => value.onDecline && value.onDecline(api));\n }\n if (lastFactor !== api.factor) {\n lastFactor = api.factor;\n if (onChange) onChange(api);\n api.subscriptions.forEach(value => value.onChange && value.onChange(api));\n }\n if (api.flipped > flipflops && !api.fallback) {\n api.fallback = true;\n if (onFallback) onFallback(api);\n api.subscriptions.forEach(value => value.onFallback && value.onFallback(api));\n }\n api.averages = [];\n\n // Resetting the refreshrate creates more problems than it solves atm\n // api.refreshrate = 0\n }\n api.frames = [];\n }\n }\n });\n return /*#__PURE__*/React.createElement(context.Provider, {\n value: api\n }, children);\n}\nfunction usePerformanceMonitor({\n onIncline,\n onDecline,\n onChange,\n onFallback\n}) {\n const api = useContext(context);\n const ref = useRef({\n onIncline,\n onDecline,\n onChange,\n onFallback\n });\n useLayoutEffect(() => {\n ref.current.onIncline = onIncline;\n ref.current.onDecline = onDecline;\n ref.current.onChange = onChange;\n ref.current.onFallback = onFallback;\n }, [onIncline, onDecline, onChange, onFallback]);\n useLayoutEffect(() => api.subscribe(ref), [api]);\n}\n\nexport { PerformanceMonitor, usePerformanceMonitor };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { useThree, createPortal, useFrame } from '@react-three/fiber';\nimport { useFBO } from './Fbo.js';\n\nconst RenderTexture = /* @__PURE__ */React.forwardRef(({\n children,\n compute,\n width,\n height,\n samples = 8,\n renderPriority = 0,\n eventPriority = 0,\n frames = Infinity,\n stencilBuffer = false,\n depthBuffer = true,\n generateMipmaps = false,\n ...props\n}, forwardRef) => {\n const {\n size,\n viewport\n } = useThree();\n const fbo = useFBO((width || size.width) * viewport.dpr, (height || size.height) * viewport.dpr, {\n samples,\n stencilBuffer,\n depthBuffer,\n generateMipmaps\n });\n const [vScene] = React.useState(() => new THREE.Scene());\n const uvCompute = React.useCallback((event, state, previous) => {\n var _fbo$texture, _previous$previousRoo;\n // Since this is only a texture it does not have an easy way to obtain the parent, which we\n // need to transform event coordinates to local coordinates. We use r3f internals to find the\n // next Object3D.\n let parent = (_fbo$texture = fbo.texture) == null || (_fbo$texture = _fbo$texture.__r3f.parent) == null ? void 0 : _fbo$texture.object;\n while (parent && !(parent instanceof THREE.Object3D)) {\n var _parent$__r3f$parent;\n parent = (_parent$__r3f$parent = parent.__r3f.parent) == null ? void 0 : _parent$__r3f$parent.object;\n }\n if (!parent) return false;\n // First we call the previous state-onion-layers compute, this is what makes it possible to nest portals\n if (!previous.raycaster.camera) previous.events.compute(event, previous, (_previous$previousRoo = previous.previousRoot) == null ? void 0 : _previous$previousRoo.getState());\n // We run a quick check against the parent, if it isn't hit there's no need to raycast at all\n const [intersection] = previous.raycaster.intersectObject(parent);\n if (!intersection) return false;\n // We take that hits uv coords, set up this layers raycaster, et voilà, we have raycasting on arbitrary surfaces\n const uv = intersection.uv;\n if (!uv) return false;\n state.raycaster.setFromCamera(state.pointer.set(uv.x * 2 - 1, uv.y * 2 - 1), state.camera);\n }, []);\n React.useImperativeHandle(forwardRef, () => fbo.texture, [fbo]);\n return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal(/*#__PURE__*/React.createElement(Container, {\n renderPriority: renderPriority,\n frames: frames,\n fbo: fbo\n }, children, /*#__PURE__*/React.createElement(\"group\", {\n onPointerOver: () => null\n })), vScene, {\n events: {\n compute: compute || uvCompute,\n priority: eventPriority\n }\n }), /*#__PURE__*/React.createElement(\"primitive\", _extends({\n object: fbo.texture\n }, props)));\n});\n\n// The container component has to be separate, it can not be inlined because \"useFrame(state\" when run inside createPortal will return\n// the portals own state which includes user-land overrides (custom cameras etc), but if it is executed in <RenderTexture>'s render function\n// it would return the default state.\nfunction Container({\n frames,\n renderPriority,\n children,\n fbo\n}) {\n let count = 0;\n let oldAutoClear;\n let oldXrEnabled;\n let oldRenderTarget;\n let oldIsPresenting;\n useFrame(state => {\n if (frames === Infinity || count < frames) {\n oldAutoClear = state.gl.autoClear;\n oldXrEnabled = state.gl.xr.enabled;\n oldRenderTarget = state.gl.getRenderTarget();\n oldIsPresenting = state.gl.xr.isPresenting;\n state.gl.autoClear = true;\n state.gl.xr.enabled = false;\n state.gl.xr.isPresenting = false;\n state.gl.setRenderTarget(fbo);\n state.gl.render(state.scene, state.camera);\n state.gl.setRenderTarget(oldRenderTarget);\n state.gl.autoClear = oldAutoClear;\n state.gl.xr.enabled = oldXrEnabled;\n state.gl.xr.isPresenting = oldIsPresenting;\n count++;\n }\n }, renderPriority);\n return /*#__PURE__*/React.createElement(React.Fragment, null, children);\n}\n\nexport { RenderTexture };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { useThree, createPortal, useFrame } from '@react-three/fiber';\n\nconst RenderCubeTexture = /* @__PURE__ */React.forwardRef(({\n children,\n compute,\n renderPriority = -1,\n eventPriority = 0,\n frames = Infinity,\n stencilBuffer = false,\n depthBuffer = true,\n generateMipmaps = false,\n resolution = 896,\n near = 0.1,\n far = 1000,\n flip = false,\n position,\n rotation,\n scale,\n quaternion,\n matrix,\n matrixAutoUpdate,\n ...props\n}, forwardRef) => {\n const {\n size,\n viewport\n } = useThree();\n const camera = React.useRef(null);\n const fbo = React.useMemo(() => {\n const fbo = new THREE.WebGLCubeRenderTarget(Math.max((resolution || size.width) * viewport.dpr, (resolution || size.height) * viewport.dpr), {\n stencilBuffer,\n depthBuffer,\n generateMipmaps\n });\n fbo.texture.isRenderTargetTexture = !flip;\n fbo.texture.flipY = true;\n fbo.texture.type = THREE.HalfFloatType;\n return fbo;\n }, [resolution, flip]);\n React.useEffect(() => {\n return () => fbo.dispose();\n }, [fbo]);\n const [vScene] = React.useState(() => new THREE.Scene());\n React.useImperativeHandle(forwardRef, () => ({\n scene: vScene,\n fbo,\n camera: camera.current\n }), [fbo]);\n return /*#__PURE__*/React.createElement(React.Fragment, null, createPortal(/*#__PURE__*/React.createElement(Container, {\n renderPriority: renderPriority,\n frames: frames,\n camera: camera\n }, children, /*#__PURE__*/React.createElement(\"group\", {\n onPointerOver: () => null\n })), vScene, {\n events: {\n compute,\n priority: eventPriority\n }\n }), /*#__PURE__*/React.createElement(\"primitive\", _extends({\n object: fbo.texture\n }, props)), /*#__PURE__*/React.createElement(\"cubeCamera\", {\n ref: camera,\n args: [near, far, fbo],\n position: position,\n rotation: rotation,\n scale: scale,\n quaternion: quaternion,\n matrix: matrix,\n matrixAutoUpdate: matrixAutoUpdate\n }));\n});\n\n// The container component has to be separate, it can not be inlined because \"useFrame(state\" when run inside createPortal will return\n// the portals own state which includes user-land overrides (custom cameras etc), but if it is executed in <RenderTexture>'s render function\n// it would return the default state.\nfunction Container({\n frames,\n renderPriority,\n children,\n camera\n}) {\n let count = 0;\n useFrame(state => {\n if (frames === Infinity || count < frames) {\n camera.current.update(state.gl, state.scene);\n count++;\n }\n }, renderPriority);\n return /*#__PURE__*/React.createElement(React.Fragment, null, children);\n}\n\nexport { RenderCubeTexture };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\n\nconst Mask = /* @__PURE__ */React.forwardRef(({\n id = 1,\n colorWrite = false,\n depthWrite = false,\n ...props\n}, fref) => {\n const ref = React.useRef(null);\n const spread = React.useMemo(() => ({\n colorWrite,\n depthWrite,\n stencilWrite: true,\n stencilRef: id,\n stencilFunc: THREE.AlwaysStencilFunc,\n stencilFail: THREE.ReplaceStencilOp,\n stencilZFail: THREE.ReplaceStencilOp,\n stencilZPass: THREE.ReplaceStencilOp\n }), [id, colorWrite, depthWrite]);\n React.useLayoutEffect(() => {\n Object.assign(ref.current.material, spread);\n });\n React.useImperativeHandle(fref, () => ref.current, []);\n return /*#__PURE__*/React.createElement(\"mesh\", _extends({\n ref: ref,\n renderOrder: -id\n }, props));\n});\nfunction useMask(id, inverse = false) {\n return {\n stencilWrite: true,\n stencilRef: id,\n stencilFunc: inverse ? THREE.NotEqualStencilFunc : THREE.EqualStencilFunc,\n stencilFail: THREE.KeepStencilOp,\n stencilZFail: THREE.KeepStencilOp,\n stencilZPass: THREE.KeepStencilOp\n };\n}\n\nexport { Mask, useMask };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { RenderCubeTexture } from './RenderCubeTexture.js';\n\nfunction Fisheye({\n renderPriority = 1,\n zoom = 0,\n segments = 64,\n children,\n resolution = 896,\n ...props\n}) {\n const sphere = React.useRef(null);\n const cubeApi = React.useRef(null);\n\n // This isn't more than a simple sphere and a fixed orthographc camera\n // pointing at it. A virtual scene is portalled into the environment map\n // of its material. The cube-camera filming that scene is being synced to\n // the portals default camera with the <UpdateCubeCamera> component.\n\n const {\n width,\n height\n } = useThree(state => state.size);\n const [orthoC] = React.useState(() => new THREE.OrthographicCamera());\n React.useLayoutEffect(() => {\n orthoC.position.set(0, 0, 100);\n orthoC.zoom = 100;\n orthoC.left = width / -2;\n orthoC.right = width / 2;\n orthoC.top = height / 2;\n orthoC.bottom = height / -2;\n orthoC.updateProjectionMatrix();\n }, [width, height]);\n const radius = Math.sqrt(width * width + height * height) / 100 * (0.5 + zoom / 2);\n const normal = new THREE.Vector3();\n const sph = new THREE.Sphere(new THREE.Vector3(), radius);\n const normalMatrix = new THREE.Matrix3();\n const compute = React.useCallback((event, state, prev) => {\n // Raycast from the render camera to the sphere and get the surface normal\n // of the point hit in world space of the sphere scene\n // We have to set the raycaster using the orthocam and pointer\n // to perform sphere interscetions.\n state.pointer.set(event.offsetX / state.size.width * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1);\n state.raycaster.setFromCamera(state.pointer, orthoC);\n if (!state.raycaster.ray.intersectSphere(sph, normal)) return;else normal.normalize();\n // Get the matrix for transforming normals into world space\n normalMatrix.getNormalMatrix(cubeApi.current.camera.matrixWorld);\n // Get the ray\n cubeApi.current.camera.getWorldPosition(state.raycaster.ray.origin);\n state.raycaster.ray.direction.set(0, 0, 1).reflect(normal);\n state.raycaster.ray.direction.x *= -1; // flip across X to accommodate the \"flip\" of the env map\n state.raycaster.ray.direction.applyNormalMatrix(normalMatrix).multiplyScalar(-1);\n return undefined;\n }, []);\n useFrame(state => {\n // Take over rendering\n if (renderPriority) state.gl.render(sphere.current, orthoC);\n }, renderPriority);\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"mesh\", _extends({\n ref: sphere\n }, props, {\n scale: radius\n }), /*#__PURE__*/React.createElement(\"sphereGeometry\", {\n args: [1, segments, segments]\n }), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", null, /*#__PURE__*/React.createElement(RenderCubeTexture, {\n compute: compute,\n attach: \"envMap\",\n flip: true,\n resolution: resolution,\n ref: cubeApi\n }, children, /*#__PURE__*/React.createElement(UpdateCubeCamera, {\n api: cubeApi\n })))));\n}\nfunction UpdateCubeCamera({\n api\n}) {\n const t = new THREE.Vector3();\n const r = new THREE.Quaternion();\n const s = new THREE.Vector3();\n const e = new THREE.Euler(0, Math.PI, 0);\n useFrame(state => {\n // Read out the cameras whereabouts, state.camera is the one *within* the portal\n state.camera.matrixWorld.decompose(t, r, s);\n // Apply its position and rotation, flip the Y axis\n api.current.camera.position.copy(t);\n api.current.camera.quaternion.setFromEuler(e).premultiply(r);\n });\n return null;\n}\n\nexport { Fisheye };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { extend, useThree, useFrame } from '@react-three/fiber';\nimport { useIntersect } from './useIntersect.js';\nimport { useFBO } from './Fbo.js';\nimport { RenderTexture } from './RenderTexture.js';\nimport { shaderMaterial } from './shaderMaterial.js';\nimport { FullScreenQuad } from 'three-stdlib';\nimport { version } from '../helpers/constants.js';\n\nconst PortalMaterialImpl = /* @__PURE__ */shaderMaterial({\n blur: 0,\n map: null,\n sdf: null,\n blend: 0,\n size: 0,\n resolution: /* @__PURE__ */new THREE.Vector2()\n}, `varying vec2 vUv;\n void main() {\n gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n vUv = uv;\n }`, `uniform sampler2D sdf;\n uniform sampler2D map;\n uniform float blur;\n uniform float size;\n uniform float time;\n uniform vec2 resolution;\n varying vec2 vUv;\n #include <packing>\n void main() {\n vec2 uv = gl_FragCoord.xy / resolution.xy;\n vec4 t = texture2D(map, uv);\n float k = blur;\n float d = texture2D(sdf, vUv).r/size;\n float alpha = 1.0 - smoothstep(0.0, 1.0, clamp(d/k + 1.0, 0.0, 1.0));\n gl_FragColor = vec4(t.rgb, blur == 0.0 ? t.a : t.a * alpha);\n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }`);\nconst MeshPortalMaterial = /* @__PURE__ */React.forwardRef(({\n children,\n events = undefined,\n blur = 0,\n eventPriority = 0,\n renderPriority = 0,\n worldUnits = false,\n resolution = 512,\n ...props\n}, fref) => {\n extend({\n PortalMaterialImpl\n });\n const ref = React.useRef(null);\n const {\n scene,\n gl,\n size,\n viewport,\n setEvents\n } = useThree();\n const maskRenderTarget = useFBO(resolution, resolution);\n const [priority, setPriority] = React.useState(0);\n useFrame(() => {\n // If blend is > 0 then the portal is being entered, the render-priority must change\n const p = ref.current.blend > 0 ? Math.max(1, renderPriority) : 0;\n if (priority !== p) setPriority(p);\n });\n React.useEffect(() => {\n if (events !== undefined) setEvents({\n enabled: !events\n });\n }, [events]);\n const [visible, setVisible] = React.useState(true);\n // See if the parent mesh is in the camera frustum\n const parent = useIntersect(setVisible);\n React.useLayoutEffect(() => {\n var _ref$current;\n // Since the ref above is not tied to a mesh directly (we're inside a material),\n // it has to be tied to the parent mesh here\n parent.current = (_ref$current = ref.current) == null || (_ref$current = _ref$current.__r3f.parent) == null ? void 0 : _ref$current.object;\n }, []);\n React.useLayoutEffect(() => {\n if (!parent.current) return;\n\n // Apply the SDF mask only once\n if (blur && ref.current.sdf === null) {\n const tempMesh = new THREE.Mesh(parent.current.geometry, new THREE.MeshBasicMaterial());\n const boundingBox = new THREE.Box3().setFromBufferAttribute(tempMesh.geometry.attributes.position);\n const orthoCam = new THREE.OrthographicCamera(boundingBox.min.x * (1 + 2 / resolution), boundingBox.max.x * (1 + 2 / resolution), boundingBox.max.y * (1 + 2 / resolution), boundingBox.min.y * (1 + 2 / resolution), 0.1, 1000);\n orthoCam.position.set(0, 0, 1);\n orthoCam.lookAt(0, 0, 0);\n gl.setRenderTarget(maskRenderTarget);\n gl.render(tempMesh, orthoCam);\n const sg = makeSDFGenerator(resolution, resolution, gl);\n const sdf = sg(maskRenderTarget.texture);\n const readSdf = new Float32Array(resolution * resolution);\n gl.readRenderTargetPixels(sdf, 0, 0, resolution, resolution, readSdf);\n // Get smallest value in sdf\n let min = Infinity;\n for (let i = 0; i < readSdf.length; i++) {\n if (readSdf[i] < min) min = readSdf[i];\n }\n min = -min;\n ref.current.size = min;\n ref.current.sdf = sdf.texture;\n gl.setRenderTarget(null);\n }\n }, [resolution, blur]);\n React.useImperativeHandle(fref, () => ref.current);\n const compute = React.useCallback((event, state, previous) => {\n var _ref$current2;\n if (!parent.current) return false;\n state.pointer.set(event.offsetX / state.size.width * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1);\n state.raycaster.setFromCamera(state.pointer, state.camera);\n if (((_ref$current2 = ref.current) == null ? void 0 : _ref$current2.blend) === 0) {\n // We run a quick check against the parent, if it isn't hit there's no need to raycast at all\n const [intersection] = state.raycaster.intersectObject(parent.current);\n if (!intersection) {\n // Cancel out the raycast camera if the parent mesh isn't hit\n state.raycaster.camera = undefined;\n return false;\n }\n }\n }, []);\n return /*#__PURE__*/React.createElement(\"portalMaterialImpl\", _extends({\n ref: ref,\n blur: blur,\n blend: 0,\n resolution: [size.width * viewport.dpr, size.height * viewport.dpr],\n attach: \"material\"\n }, props), /*#__PURE__*/React.createElement(RenderTexture, {\n attach: \"map\",\n frames: visible ? Infinity : 0,\n eventPriority: eventPriority,\n renderPriority: renderPriority,\n compute: compute\n }, children, /*#__PURE__*/React.createElement(ManagePortalScene, {\n events: events,\n rootScene: scene,\n priority: priority,\n material: ref,\n worldUnits: worldUnits\n })));\n});\nfunction ManagePortalScene({\n events = undefined,\n rootScene,\n material,\n priority,\n worldUnits\n}) {\n const scene = useThree(state => state.scene);\n const setEvents = useThree(state => state.setEvents);\n const buffer1 = useFBO();\n const buffer2 = useFBO();\n React.useLayoutEffect(() => {\n scene.matrixAutoUpdate = false;\n }, []);\n React.useEffect(() => {\n if (events !== undefined) setEvents({\n enabled: events\n });\n }, [events]);\n const [quad, blend] = React.useMemo(() => {\n // This fullscreen-quad is used to blend the two textures\n const blend = {\n value: 0\n };\n const quad = new FullScreenQuad(new THREE.ShaderMaterial({\n uniforms: {\n a: {\n value: buffer1.texture\n },\n b: {\n value: buffer2.texture\n },\n blend\n },\n vertexShader: /*glsl*/`\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }`,\n fragmentShader: /*glsl*/`\n uniform sampler2D a;\n uniform sampler2D b;\n uniform float blend;\n varying vec2 vUv;\n #include <packing>\n void main() {\n vec4 ta = texture2D(a, vUv);\n vec4 tb = texture2D(b, vUv);\n gl_FragColor = mix(tb, ta, blend);\n #include <tonemapping_fragment>\n #include <${version >= 154 ? 'colorspace_fragment' : 'encodings_fragment'}>\n }`\n }));\n return [quad, blend];\n }, []);\n useFrame(state => {\n var _material$current;\n let parent = material == null || (_material$current = material.current) == null || (_material$current = _material$current.__r3f.parent) == null ? void 0 : _material$current.object;\n if (parent) {\n // Move portal contents along with the parent if worldUnits is true\n if (!worldUnits) {\n var _material$current2;\n // If the portal renders exclusively the original scene needs to be updated\n if (priority && ((_material$current2 = material.current) == null ? void 0 : _material$current2.blend) === 1) parent.updateWorldMatrix(true, false);\n scene.matrixWorld.copy(parent.matrixWorld);\n } else scene.matrixWorld.identity();\n\n // This bit is only necessary if the portal is blended, now it has a render-priority\n // and will take over the render loop\n if (priority) {\n var _material$current3, _material$current4, _material$current5;\n if (((_material$current3 = material.current) == null ? void 0 : _material$current3.blend) > 0 && ((_material$current4 = material.current) == null ? void 0 : _material$current4.blend) < 1) {\n // If blend is ongoing (> 0 and < 1) then we need to render both the root scene\n // and the portal scene, both will then be mixed in the quad from above\n blend.value = material.current.blend;\n state.gl.setRenderTarget(buffer1);\n state.gl.render(scene, state.camera);\n state.gl.setRenderTarget(buffer2);\n state.gl.render(rootScene, state.camera);\n state.gl.setRenderTarget(null);\n quad.render(state.gl);\n } else if (((_material$current5 = material.current) == null ? void 0 : _material$current5.blend) === 1) {\n // However if blend is 1 we only need to render the portal scene\n state.gl.render(scene, state.camera);\n }\n }\n }\n }, priority);\n return /*#__PURE__*/React.createElement(React.Fragment, null);\n}\nconst makeSDFGenerator = (clientWidth, clientHeight, renderer) => {\n let finalTarget = new THREE.WebGLRenderTarget(clientWidth, clientHeight, {\n minFilter: THREE.LinearMipmapLinearFilter,\n magFilter: THREE.LinearFilter,\n type: THREE.FloatType,\n format: THREE.RedFormat,\n generateMipmaps: true\n });\n let outsideRenderTarget = new THREE.WebGLRenderTarget(clientWidth, clientHeight, {\n minFilter: THREE.NearestFilter,\n magFilter: THREE.NearestFilter\n });\n let insideRenderTarget = new THREE.WebGLRenderTarget(clientWidth, clientHeight, {\n minFilter: THREE.NearestFilter,\n magFilter: THREE.NearestFilter\n });\n let outsideRenderTarget2 = new THREE.WebGLRenderTarget(clientWidth, clientHeight, {\n minFilter: THREE.NearestFilter,\n magFilter: THREE.NearestFilter\n });\n let insideRenderTarget2 = new THREE.WebGLRenderTarget(clientWidth, clientHeight, {\n minFilter: THREE.NearestFilter,\n magFilter: THREE.NearestFilter\n });\n let outsideRenderTargetFinal = new THREE.WebGLRenderTarget(clientWidth, clientHeight, {\n minFilter: THREE.NearestFilter,\n magFilter: THREE.NearestFilter,\n type: THREE.FloatType,\n format: THREE.RedFormat\n });\n let insideRenderTargetFinal = new THREE.WebGLRenderTarget(clientWidth, clientHeight, {\n minFilter: THREE.NearestFilter,\n magFilter: THREE.NearestFilter,\n type: THREE.FloatType,\n format: THREE.RedFormat\n });\n const uvRender = new FullScreenQuad(new THREE.ShaderMaterial({\n uniforms: {\n tex: {\n value: null\n }\n },\n vertexShader: /*glsl*/`\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }`,\n fragmentShader: /*glsl*/`\n uniform sampler2D tex;\n varying vec2 vUv;\n #include <packing>\n void main() {\n gl_FragColor = pack2HalfToRGBA(vUv * (round(texture2D(tex, vUv).x)));\n }`\n }));\n const uvRenderInside = new FullScreenQuad(new THREE.ShaderMaterial({\n uniforms: {\n tex: {\n value: null\n }\n },\n vertexShader: /*glsl*/`\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }`,\n fragmentShader: /*glsl*/`\n uniform sampler2D tex;\n varying vec2 vUv;\n #include <packing>\n void main() {\n gl_FragColor = pack2HalfToRGBA(vUv * (1.0 - round(texture2D(tex, vUv).x)));\n }`\n }));\n const jumpFloodRender = new FullScreenQuad(new THREE.ShaderMaterial({\n uniforms: {\n tex: {\n value: null\n },\n offset: {\n value: 0.0\n },\n level: {\n value: 0.0\n },\n maxSteps: {\n value: 0.0\n }\n },\n vertexShader: /*glsl*/`\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }`,\n fragmentShader: /*glsl*/`\n varying vec2 vUv;\n uniform sampler2D tex;\n uniform float offset;\n uniform float level;\n uniform float maxSteps;\n #include <packing>\n void main() {\n float closestDist = 9999999.9;\n vec2 closestPos = vec2(0.0);\n for (float x = -1.0; x <= 1.0; x += 1.0) {\n for (float y = -1.0; y <= 1.0; y += 1.0) {\n vec2 voffset = vUv;\n voffset += vec2(x, y) * vec2(${1 / clientWidth}, ${1 / clientHeight}) * offset;\n vec2 pos = unpackRGBATo2Half(texture2D(tex, voffset));\n float dist = distance(pos.xy, vUv);\n if(pos.x != 0.0 && pos.y != 0.0 && dist < closestDist) {\n closestDist = dist;\n closestPos = pos;\n }\n }\n }\n gl_FragColor = pack2HalfToRGBA(closestPos);\n }`\n }));\n const distanceFieldRender = new FullScreenQuad(new THREE.ShaderMaterial({\n uniforms: {\n tex: {\n value: null\n },\n size: {\n value: new THREE.Vector2(clientWidth, clientHeight)\n }\n },\n vertexShader: /*glsl*/`\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }`,\n fragmentShader: /*glsl*/`\n varying vec2 vUv;\n uniform sampler2D tex;\n uniform vec2 size;\n #include <packing>\n void main() {\n gl_FragColor = vec4(distance(size * unpackRGBATo2Half(texture2D(tex, vUv)), size * vUv), 0.0, 0.0, 0.0);\n }`\n }));\n const compositeRender = new FullScreenQuad(new THREE.ShaderMaterial({\n uniforms: {\n inside: {\n value: insideRenderTargetFinal.texture\n },\n outside: {\n value: outsideRenderTargetFinal.texture\n },\n tex: {\n value: null\n }\n },\n vertexShader: /*glsl*/`\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }`,\n fragmentShader: /*glsl*/`\n varying vec2 vUv;\n uniform sampler2D inside;\n uniform sampler2D outside;\n uniform sampler2D tex;\n #include <packing>\n void main() {\n float i = texture2D(inside, vUv).x;\n float o =texture2D(outside, vUv).x;\n if (texture2D(tex, vUv).x == 0.0) {\n gl_FragColor = vec4(o, 0.0, 0.0, 0.0);\n } else {\n gl_FragColor = vec4(-i, 0.0, 0.0, 0.0);\n }\n }`\n }));\n return image => {\n let ft = finalTarget;\n image.minFilter = THREE.NearestFilter;\n image.magFilter = THREE.NearestFilter;\n uvRender.material.uniforms.tex.value = image;\n renderer.setRenderTarget(outsideRenderTarget);\n uvRender.render(renderer);\n const passes = Math.ceil(Math.log(Math.max(clientWidth, clientHeight)) / Math.log(2.0));\n let lastTarget = outsideRenderTarget;\n let target = null;\n for (let i = 0; i < passes; i++) {\n const offset = Math.pow(2, passes - i - 1);\n target = lastTarget === outsideRenderTarget ? outsideRenderTarget2 : outsideRenderTarget;\n jumpFloodRender.material.uniforms.level.value = i;\n jumpFloodRender.material.uniforms.maxSteps.value = passes;\n jumpFloodRender.material.uniforms.offset.value = offset;\n jumpFloodRender.material.uniforms.tex.value = lastTarget.texture;\n renderer.setRenderTarget(target);\n jumpFloodRender.render(renderer);\n lastTarget = target;\n }\n renderer.setRenderTarget(outsideRenderTargetFinal);\n distanceFieldRender.material.uniforms.tex.value = target.texture;\n distanceFieldRender.render(renderer);\n uvRenderInside.material.uniforms.tex.value = image;\n renderer.setRenderTarget(insideRenderTarget);\n uvRenderInside.render(renderer);\n lastTarget = insideRenderTarget;\n for (let i = 0; i < passes; i++) {\n const offset = Math.pow(2, passes - i - 1);\n target = lastTarget === insideRenderTarget ? insideRenderTarget2 : insideRenderTarget;\n jumpFloodRender.material.uniforms.level.value = i;\n jumpFloodRender.material.uniforms.maxSteps.value = passes;\n jumpFloodRender.material.uniforms.offset.value = offset;\n jumpFloodRender.material.uniforms.tex.value = lastTarget.texture;\n renderer.setRenderTarget(target);\n jumpFloodRender.render(renderer);\n lastTarget = target;\n }\n renderer.setRenderTarget(insideRenderTargetFinal);\n distanceFieldRender.material.uniforms.tex.value = target.texture;\n distanceFieldRender.render(renderer);\n renderer.setRenderTarget(ft);\n compositeRender.material.uniforms.tex.value = image;\n compositeRender.render(renderer);\n renderer.setRenderTarget(null);\n return ft;\n };\n};\n\nexport { MeshPortalMaterial };\n","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const destroy = () => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] The `destroy` method will be unsupported in a future version. Instead use unsubscribe function returned by subscribe. Everything will be garbage-collected if store is garbage-collected.\"\n );\n }\n listeners.clear();\n };\n const api = { setState, getState, getInitialState, subscribe, destroy };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\nvar vanilla = (createState) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] Default export is deprecated. Instead use import { createStore } from 'zustand/vanilla'.\"\n );\n }\n return createStore(createState);\n};\n\nexport { createStore, vanilla as default };\n","import { createStore } from 'zustand/vanilla';\nexport * from 'zustand/vanilla';\nimport ReactExports from 'react';\nimport useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector.js';\n\nconst { useDebugValue } = ReactExports;\nconst { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports;\nlet didWarnAboutEqualityFn = false;\nconst identity = (arg) => arg;\nfunction useStore(api, selector = identity, equalityFn) {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && equalityFn && !didWarnAboutEqualityFn) {\n console.warn(\n \"[DEPRECATED] Use `createWithEqualityFn` instead of `create` or use `useStoreWithEqualityFn` instead of `useStore`. They can be imported from 'zustand/traditional'. https://github.com/pmndrs/zustand/discussions/1937\"\n );\n didWarnAboutEqualityFn = true;\n }\n const slice = useSyncExternalStoreWithSelector(\n api.subscribe,\n api.getState,\n api.getServerState || api.getInitialState,\n selector,\n equalityFn\n );\n useDebugValue(slice);\n return slice;\n}\nconst createImpl = (createState) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && typeof createState !== \"function\") {\n console.warn(\n \"[DEPRECATED] Passing a vanilla store will be unsupported in a future version. Instead use `import { useStore } from 'zustand'`.\"\n );\n }\n const api = typeof createState === \"function\" ? createStore(createState) : createState;\n const useBoundStore = (selector, equalityFn) => useStore(api, selector, equalityFn);\n Object.assign(useBoundStore, api);\n return useBoundStore;\n};\nconst create = (createState) => createState ? createImpl(createState) : createImpl;\nvar react = (createState) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") {\n console.warn(\n \"[DEPRECATED] Default export is deprecated. Instead use `import { create } from 'zustand'`.\"\n );\n }\n return create(createState);\n};\n\nexport { create, react as default, useStore };\n","import React from 'react';\nimport { create } from 'zustand';\n\nvar _window$document, _window$navigator;\n/**\n * An SSR-friendly useLayoutEffect.\n *\n * React currently throws a warning when using useLayoutEffect on the server.\n * To get around it, we can conditionally useEffect on the server (no-op) and\n * useLayoutEffect elsewhere.\n *\n * @see https://github.com/facebook/react/issues/14927\n */\n\nconst useIsomorphicLayoutEffect = typeof window !== 'undefined' && ((_window$document = window.document) != null && _window$document.createElement || ((_window$navigator = window.navigator) == null ? void 0 : _window$navigator.product) === 'ReactNative') ? React.useLayoutEffect : React.useEffect;\n\nfunction tunnel() {\n const useStore = create(set => ({\n current: new Array(),\n version: 0,\n set\n }));\n return {\n In: ({\n children\n }) => {\n const set = useStore(state => state.set);\n const version = useStore(state => state.version);\n /* When this component mounts, we increase the store's version number.\n This will cause all existing rats to re-render (just like if the Out component\n were mapping items to a list.) The re-rendering will cause the final \n order of rendered components to match what the user is expecting. */\n\n useIsomorphicLayoutEffect(() => {\n set(state => ({\n version: state.version + 1\n }));\n }, []);\n /* Any time the children _or_ the store's version number change, insert\n the specified React children into the list of rats. */\n\n useIsomorphicLayoutEffect(() => {\n set(({\n current\n }) => ({\n current: [...current, children]\n }));\n return () => set(({\n current\n }) => ({\n current: current.filter(c => c !== children)\n }));\n }, [children, version]);\n return null;\n },\n Out: () => {\n const current = useStore(state => state.current);\n return /*#__PURE__*/React.createElement(React.Fragment, null, current);\n }\n };\n}\n\nexport { tunnel as default };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { context, useThree, createPortal, useFrame } from '@react-three/fiber';\nimport tunnel from 'tunnel-rat';\n\nconst isOrthographicCamera = def => def && def.isOrthographicCamera;\nconst col = /* @__PURE__ */new THREE.Color();\nconst tracked = /* @__PURE__ */tunnel();\nfunction computeContainerPosition(canvasSize, trackRect) {\n const {\n right,\n top,\n left: trackLeft,\n bottom: trackBottom,\n width,\n height\n } = trackRect;\n const isOffscreen = trackRect.bottom < 0 || top > canvasSize.height || right < 0 || trackRect.left > canvasSize.width;\n const canvasBottom = canvasSize.top + canvasSize.height;\n const bottom = canvasBottom - trackBottom;\n const left = trackLeft - canvasSize.left;\n return {\n position: {\n width,\n height,\n left,\n top,\n bottom,\n right\n },\n isOffscreen\n };\n}\nfunction prepareSkissor(state, {\n left,\n bottom,\n width,\n height\n}) {\n let autoClear;\n const aspect = width / height;\n if (isOrthographicCamera(state.camera)) {\n if (!state.camera.manual) {\n if (state.camera.left !== width / -2 || state.camera.right !== width / 2 || state.camera.top !== height / 2 || state.camera.bottom !== height / -2) {\n Object.assign(state.camera, {\n left: width / -2,\n right: width / 2,\n top: height / 2,\n bottom: height / -2\n });\n state.camera.updateProjectionMatrix();\n }\n } else {\n state.camera.updateProjectionMatrix();\n }\n } else if (state.camera.aspect !== aspect) {\n state.camera.aspect = aspect;\n state.camera.updateProjectionMatrix();\n }\n autoClear = state.gl.autoClear;\n state.gl.autoClear = false;\n state.gl.setViewport(left, bottom, width, height);\n state.gl.setScissor(left, bottom, width, height);\n state.gl.setScissorTest(true);\n return autoClear;\n}\nfunction finishSkissor(state, autoClear) {\n // Restore the default state\n state.gl.setScissorTest(false);\n state.gl.autoClear = autoClear;\n}\nfunction clear(state) {\n state.gl.getClearColor(col);\n state.gl.setClearColor(col, state.gl.getClearAlpha());\n state.gl.clear(true, true);\n}\nfunction Container({\n visible = true,\n canvasSize,\n scene,\n index,\n children,\n frames,\n rect,\n track\n}) {\n const rootState = useThree();\n const [isOffscreen, setOffscreen] = React.useState(false);\n let frameCount = 0;\n useFrame(state => {\n if (frames === Infinity || frameCount <= frames) {\n var _track$current;\n if (track) rect.current = (_track$current = track.current) == null ? void 0 : _track$current.getBoundingClientRect();\n frameCount++;\n }\n if (rect.current) {\n const {\n position,\n isOffscreen: _isOffscreen\n } = computeContainerPosition(canvasSize, rect.current);\n if (isOffscreen !== _isOffscreen) setOffscreen(_isOffscreen);\n if (visible && !isOffscreen && rect.current) {\n const autoClear = prepareSkissor(state, position);\n // When children are present render the portalled scene, otherwise the default scene\n state.gl.render(children ? state.scene : scene, state.camera);\n finishSkissor(state, autoClear);\n }\n }\n }, index);\n React.useLayoutEffect(() => {\n const curRect = rect.current;\n if (curRect && (!visible || !isOffscreen)) {\n // If the view is not visible clear it once, but stop rendering afterwards!\n const {\n position\n } = computeContainerPosition(canvasSize, curRect);\n const autoClear = prepareSkissor(rootState, position);\n clear(rootState);\n finishSkissor(rootState, autoClear);\n }\n }, [visible, isOffscreen]);\n React.useEffect(() => {\n if (!track) return;\n const curRect = rect.current;\n // Connect the event layer to the tracking element\n const old = rootState.get().events.connected;\n rootState.setEvents({\n connected: track.current\n });\n return () => {\n if (curRect) {\n const {\n position\n } = computeContainerPosition(canvasSize, curRect);\n const autoClear = prepareSkissor(rootState, position);\n clear(rootState);\n finishSkissor(rootState, autoClear);\n }\n rootState.setEvents({\n connected: old\n });\n };\n }, [track]);\n return /*#__PURE__*/React.createElement(React.Fragment, null, children, /*#__PURE__*/React.createElement(\"group\", {\n onPointerOver: () => null\n }));\n}\nconst CanvasView = /* @__PURE__ */React.forwardRef(({\n track,\n visible = true,\n index = 1,\n id,\n style,\n className,\n frames = Infinity,\n children,\n ...props\n}, fref) => {\n var _rect$current, _rect$current2, _rect$current3, _rect$current4;\n const rect = React.useRef(null);\n const {\n size,\n scene\n } = useThree();\n const [virtualScene] = React.useState(() => new THREE.Scene());\n const [ready, toggle] = React.useReducer(() => true, false);\n const compute = React.useCallback((event, state) => {\n if (rect.current && track && track.current && event.target === track.current) {\n const {\n width,\n height,\n left,\n top\n } = rect.current;\n const x = event.clientX - left;\n const y = event.clientY - top;\n state.pointer.set(x / width * 2 - 1, -(y / height) * 2 + 1);\n state.raycaster.setFromCamera(state.pointer, state.camera);\n }\n }, [rect, track]);\n React.useEffect(() => {\n var _track$current2;\n // We need the tracking elements bounds beforehand in order to inject it into the portal\n if (track) rect.current = (_track$current2 = track.current) == null ? void 0 : _track$current2.getBoundingClientRect();\n // And now we can proceed\n toggle();\n }, [track]);\n return /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: fref\n }, props), ready && createPortal(/*#__PURE__*/React.createElement(Container, {\n visible: visible,\n canvasSize: size,\n frames: frames,\n scene: scene,\n track: track,\n rect: rect,\n index: index\n }, children), virtualScene, {\n events: {\n compute,\n priority: index\n },\n size: {\n width: (_rect$current = rect.current) == null ? void 0 : _rect$current.width,\n height: (_rect$current2 = rect.current) == null ? void 0 : _rect$current2.height,\n // @ts-ignore\n top: (_rect$current3 = rect.current) == null ? void 0 : _rect$current3.top,\n // @ts-ignore\n left: (_rect$current4 = rect.current) == null ? void 0 : _rect$current4.left\n }\n }));\n});\nconst HtmlView = /* @__PURE__ */React.forwardRef(({\n as: El = 'div',\n id,\n visible,\n className,\n style,\n index = 1,\n track,\n frames = Infinity,\n children,\n ...props\n}, fref) => {\n const uuid = React.useId();\n const ref = React.useRef(null);\n React.useImperativeHandle(fref, () => ref.current);\n return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(El, _extends({\n ref: ref,\n id: id,\n className: className,\n style: style\n }, props)), /*#__PURE__*/React.createElement(tracked.In, null, /*#__PURE__*/React.createElement(CanvasView, {\n visible: visible,\n key: uuid,\n track: ref,\n frames: frames,\n index: index\n }, children)));\n});\nconst View = /* @__PURE__ */(() => {\n const _View = /*#__PURE__*/React.forwardRef((props, fref) => {\n // If we're inside a canvas we should be able to access the context store\n const store = React.useContext(context);\n // If that's not the case we render a tunnel\n if (!store) return /*#__PURE__*/React.createElement(HtmlView, _extends({\n ref: fref\n }, props));\n // Otherwise a plain canvas-view\n else return /*#__PURE__*/React.createElement(CanvasView, _extends({\n ref: fref\n }, props));\n });\n _View.Port = () => /*#__PURE__*/React.createElement(tracked.Out, null);\n return _View;\n})();\n\nexport { View };\n","import * as React from 'react';\n\nconst context = /* @__PURE__ */React.createContext(null);\n\nexport { context };\n","import * as React from 'react';\nimport * as THREE from 'three';\nimport { useThree } from '@react-three/fiber';\nimport { Line } from '../../core/Line.js';\nimport { Html } from '../Html.js';\nimport { context } from './context.js';\n\nconst vec1 = /* @__PURE__ */new THREE.Vector3();\nconst vec2 = /* @__PURE__ */new THREE.Vector3();\nconst calculateOffset = (clickPoint, normal, rayStart, rayDir) => {\n const e1 = normal.dot(normal);\n const e2 = normal.dot(clickPoint) - normal.dot(rayStart);\n const e3 = normal.dot(rayDir);\n if (e3 === 0) {\n return -e2 / e1;\n }\n vec1.copy(rayDir).multiplyScalar(e1 / e3).sub(normal);\n vec2.copy(rayDir).multiplyScalar(e2 / e3).add(rayStart).sub(clickPoint);\n const offset = -vec1.dot(vec2) / vec1.dot(vec1);\n return offset;\n};\nconst upV = /* @__PURE__ */new THREE.Vector3(0, 1, 0);\nconst offsetMatrix = /* @__PURE__ */new THREE.Matrix4();\nconst AxisArrow = ({\n direction,\n axis\n}) => {\n const {\n translation,\n translationLimits,\n annotations,\n annotationsClass,\n depthTest,\n scale,\n lineWidth,\n fixed,\n axisColors,\n hoveredColor,\n opacity,\n renderOrder,\n onDragStart,\n onDrag,\n onDragEnd,\n userData\n } = React.useContext(context);\n const camControls = useThree(state => state.controls);\n const divRef = React.useRef(null);\n const objRef = React.useRef(null);\n const clickInfo = React.useRef(null);\n const offset0 = React.useRef(0);\n const [isHovered, setIsHovered] = React.useState(false);\n const onPointerDown = React.useCallback(e => {\n if (annotations) {\n divRef.current.innerText = `${translation.current[axis].toFixed(2)}`;\n divRef.current.style.display = 'block';\n }\n e.stopPropagation();\n const rotation = new THREE.Matrix4().extractRotation(objRef.current.matrixWorld);\n const clickPoint = e.point.clone();\n const origin = new THREE.Vector3().setFromMatrixPosition(objRef.current.matrixWorld);\n const dir = direction.clone().applyMatrix4(rotation).normalize();\n clickInfo.current = {\n clickPoint,\n dir\n };\n offset0.current = translation.current[axis];\n onDragStart({\n component: 'Arrow',\n axis,\n origin,\n directions: [dir]\n });\n camControls && (camControls.enabled = false);\n // @ts-ignore - setPointerCapture is not in the type definition\n e.target.setPointerCapture(e.pointerId);\n }, [annotations, direction, camControls, onDragStart, translation, axis]);\n const onPointerMove = React.useCallback(e => {\n e.stopPropagation();\n if (!isHovered) setIsHovered(true);\n if (clickInfo.current) {\n const {\n clickPoint,\n dir\n } = clickInfo.current;\n const [min, max] = (translationLimits == null ? void 0 : translationLimits[axis]) || [undefined, undefined];\n let offset = calculateOffset(clickPoint, dir, e.ray.origin, e.ray.direction);\n if (min !== undefined) {\n offset = Math.max(offset, min - offset0.current);\n }\n if (max !== undefined) {\n offset = Math.min(offset, max - offset0.current);\n }\n translation.current[axis] = offset0.current + offset;\n if (annotations) {\n divRef.current.innerText = `${translation.current[axis].toFixed(2)}`;\n }\n offsetMatrix.makeTranslation(dir.x * offset, dir.y * offset, dir.z * offset);\n onDrag(offsetMatrix);\n }\n }, [annotations, onDrag, isHovered, translation, translationLimits, axis]);\n const onPointerUp = React.useCallback(e => {\n if (annotations) {\n divRef.current.style.display = 'none';\n }\n e.stopPropagation();\n clickInfo.current = null;\n onDragEnd();\n camControls && (camControls.enabled = true);\n // @ts-ignore - releasePointerCapture & PointerEvent#pointerId is not in the type definition\n e.target.releasePointerCapture(e.pointerId);\n }, [annotations, camControls, onDragEnd]);\n const onPointerOut = React.useCallback(e => {\n e.stopPropagation();\n setIsHovered(false);\n }, []);\n const {\n cylinderLength,\n coneWidth,\n coneLength,\n matrixL\n } = React.useMemo(() => {\n const coneWidth = fixed ? lineWidth / scale * 1.6 : scale / 20;\n const coneLength = fixed ? 0.2 : scale / 5;\n const cylinderLength = fixed ? 1 - coneLength : scale - coneLength;\n const quaternion = new THREE.Quaternion().setFromUnitVectors(upV, direction.clone().normalize());\n const matrixL = new THREE.Matrix4().makeRotationFromQuaternion(quaternion);\n return {\n cylinderLength,\n coneWidth,\n coneLength,\n matrixL\n };\n }, [direction, scale, lineWidth, fixed]);\n const color_ = isHovered ? hoveredColor : axisColors[axis];\n return /*#__PURE__*/React.createElement(\"group\", {\n ref: objRef\n }, /*#__PURE__*/React.createElement(\"group\", {\n matrix: matrixL,\n matrixAutoUpdate: false,\n onPointerDown: onPointerDown,\n onPointerMove: onPointerMove,\n onPointerUp: onPointerUp,\n onPointerOut: onPointerOut\n }, annotations && /*#__PURE__*/React.createElement(Html, {\n position: [0, -coneLength, 0]\n }, /*#__PURE__*/React.createElement(\"div\", {\n style: {\n display: 'none',\n background: '#151520',\n color: 'white',\n padding: '6px 8px',\n borderRadius: 7,\n whiteSpace: 'nowrap'\n },\n className: annotationsClass,\n ref: divRef\n })), /*#__PURE__*/React.createElement(\"mesh\", {\n visible: false,\n position: [0, (cylinderLength + coneLength) / 2.0, 0],\n userData: userData\n }, /*#__PURE__*/React.createElement(\"cylinderGeometry\", {\n args: [coneWidth * 1.4, coneWidth * 1.4, cylinderLength + coneLength, 8, 1]\n })), /*#__PURE__*/React.createElement(Line, {\n transparent: true,\n raycast: () => null,\n depthTest: depthTest,\n points: [0, 0, 0, 0, cylinderLength, 0],\n lineWidth: lineWidth,\n side: THREE.DoubleSide,\n color: color_,\n opacity: opacity,\n polygonOffset: true,\n renderOrder: renderOrder,\n polygonOffsetFactor: -10,\n fog: false\n }), /*#__PURE__*/React.createElement(\"mesh\", {\n raycast: () => null,\n position: [0, cylinderLength + coneLength / 2.0, 0],\n renderOrder: renderOrder\n }, /*#__PURE__*/React.createElement(\"coneGeometry\", {\n args: [coneWidth, coneLength, 24, 1]\n }), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n transparent: true,\n depthTest: depthTest,\n color: color_,\n opacity: opacity,\n polygonOffset: true,\n polygonOffsetFactor: -10,\n fog: false\n }))));\n};\n\nexport { AxisArrow, calculateOffset };\n","import * as React from 'react';\nimport * as THREE from 'three';\nimport { useThree } from '@react-three/fiber';\nimport { Line } from '../../core/Line.js';\nimport { Html } from '../Html.js';\nimport { context } from './context.js';\n\nconst clickDir = /* @__PURE__ */new THREE.Vector3();\nconst intersectionDir = /* @__PURE__ */new THREE.Vector3();\nconst toDegrees = radians => radians * 180 / Math.PI;\nconst toRadians = degrees => degrees * Math.PI / 180;\nconst calculateAngle = (clickPoint, intersectionPoint, origin, e1, e2) => {\n clickDir.copy(clickPoint).sub(origin);\n intersectionDir.copy(intersectionPoint).sub(origin);\n const dote1e1 = e1.dot(e1);\n const dote2e2 = e2.dot(e2);\n const uClick = clickDir.dot(e1) / dote1e1;\n const vClick = clickDir.dot(e2) / dote2e2;\n const uIntersection = intersectionDir.dot(e1) / dote1e1;\n const vIntersection = intersectionDir.dot(e2) / dote2e2;\n const angleClick = Math.atan2(vClick, uClick);\n const angleIntersection = Math.atan2(vIntersection, uIntersection);\n return angleIntersection - angleClick;\n};\nconst fmod = (num, denom) => {\n let k = Math.floor(num / denom);\n k = k < 0 ? k + 1 : k;\n return num - k * denom;\n};\nconst minimizeAngle = angle => {\n let result = fmod(angle, 2 * Math.PI);\n if (Math.abs(result) < 1e-6) {\n return 0.0;\n }\n if (result < 0.0) {\n result += 2 * Math.PI;\n }\n return result;\n};\nconst rotMatrix = /* @__PURE__ */new THREE.Matrix4();\nconst posNew = /* @__PURE__ */new THREE.Vector3();\nconst ray = /* @__PURE__ */new THREE.Ray();\nconst intersection = /* @__PURE__ */new THREE.Vector3();\nconst AxisRotator = ({\n dir1,\n dir2,\n axis\n}) => {\n const {\n rotationLimits,\n annotations,\n annotationsClass,\n depthTest,\n scale,\n lineWidth,\n fixed,\n axisColors,\n hoveredColor,\n renderOrder,\n opacity,\n onDragStart,\n onDrag,\n onDragEnd,\n userData\n } = React.useContext(context);\n const camControls = useThree(state => state.controls);\n const divRef = React.useRef(null);\n const objRef = React.useRef(null);\n const angle0 = React.useRef(0);\n const angle = React.useRef(0);\n const clickInfo = React.useRef(null);\n const [isHovered, setIsHovered] = React.useState(false);\n const onPointerDown = React.useCallback(e => {\n if (annotations) {\n divRef.current.innerText = `${toDegrees(angle.current).toFixed(0)}º`;\n divRef.current.style.display = 'block';\n }\n e.stopPropagation();\n const clickPoint = e.point.clone();\n const origin = new THREE.Vector3().setFromMatrixPosition(objRef.current.matrixWorld);\n const e1 = new THREE.Vector3().setFromMatrixColumn(objRef.current.matrixWorld, 0).normalize();\n const e2 = new THREE.Vector3().setFromMatrixColumn(objRef.current.matrixWorld, 1).normalize();\n const normal = new THREE.Vector3().setFromMatrixColumn(objRef.current.matrixWorld, 2).normalize();\n const plane = new THREE.Plane().setFromNormalAndCoplanarPoint(normal, origin);\n clickInfo.current = {\n clickPoint,\n origin,\n e1,\n e2,\n normal,\n plane\n };\n onDragStart({\n component: 'Rotator',\n axis,\n origin,\n directions: [e1, e2, normal]\n });\n camControls && (camControls.enabled = false);\n // @ts-ignore\n e.target.setPointerCapture(e.pointerId);\n }, [annotations, camControls, onDragStart, axis]);\n const onPointerMove = React.useCallback(e => {\n e.stopPropagation();\n if (!isHovered) setIsHovered(true);\n if (clickInfo.current) {\n const {\n clickPoint,\n origin,\n e1,\n e2,\n normal,\n plane\n } = clickInfo.current;\n const [min, max] = (rotationLimits == null ? void 0 : rotationLimits[axis]) || [undefined, undefined];\n ray.copy(e.ray);\n ray.intersectPlane(plane, intersection);\n ray.direction.negate();\n ray.intersectPlane(plane, intersection);\n let deltaAngle = calculateAngle(clickPoint, intersection, origin, e1, e2);\n let degrees = toDegrees(deltaAngle);\n\n // @ts-ignore\n if (e.shiftKey) {\n degrees = Math.round(degrees / 10) * 10;\n deltaAngle = toRadians(degrees);\n }\n if (min !== undefined && max !== undefined && max - min < 2 * Math.PI) {\n deltaAngle = minimizeAngle(deltaAngle);\n deltaAngle = deltaAngle > Math.PI ? deltaAngle - 2 * Math.PI : deltaAngle;\n deltaAngle = THREE.MathUtils.clamp(deltaAngle, min - angle0.current, max - angle0.current);\n angle.current = angle0.current + deltaAngle;\n } else {\n angle.current = minimizeAngle(angle0.current + deltaAngle);\n angle.current = angle.current > Math.PI ? angle.current - 2 * Math.PI : angle.current;\n }\n if (annotations) {\n degrees = toDegrees(angle.current);\n divRef.current.innerText = `${degrees.toFixed(0)}º`;\n }\n rotMatrix.makeRotationAxis(normal, deltaAngle);\n posNew.copy(origin).applyMatrix4(rotMatrix).sub(origin).negate();\n rotMatrix.setPosition(posNew);\n onDrag(rotMatrix);\n }\n }, [annotations, onDrag, isHovered, rotationLimits, axis]);\n const onPointerUp = React.useCallback(e => {\n if (annotations) {\n divRef.current.style.display = 'none';\n }\n e.stopPropagation();\n angle0.current = angle.current;\n clickInfo.current = null;\n onDragEnd();\n camControls && (camControls.enabled = true);\n // @ts-ignore\n e.target.releasePointerCapture(e.pointerId);\n }, [annotations, camControls, onDragEnd]);\n const onPointerOut = React.useCallback(e => {\n e.stopPropagation();\n setIsHovered(false);\n }, []);\n const matrixL = React.useMemo(() => {\n const dir1N = dir1.clone().normalize();\n const dir2N = dir2.clone().normalize();\n return new THREE.Matrix4().makeBasis(dir1N, dir2N, dir1N.clone().cross(dir2N));\n }, [dir1, dir2]);\n const r = fixed ? 0.65 : scale * 0.65;\n const arc = React.useMemo(() => {\n const segments = 32;\n const points = [];\n for (let j = 0; j <= segments; j++) {\n const angle = j * (Math.PI / 2) / segments;\n points.push(new THREE.Vector3(Math.cos(angle) * r, Math.sin(angle) * r, 0));\n }\n return points;\n }, [r]);\n return /*#__PURE__*/React.createElement(\"group\", {\n ref: objRef,\n onPointerDown: onPointerDown,\n onPointerMove: onPointerMove,\n onPointerUp: onPointerUp,\n onPointerOut: onPointerOut,\n matrix: matrixL,\n matrixAutoUpdate: false\n }, annotations && /*#__PURE__*/React.createElement(Html, {\n position: [r, r, 0]\n }, /*#__PURE__*/React.createElement(\"div\", {\n style: {\n display: 'none',\n background: '#151520',\n color: 'white',\n padding: '6px 8px',\n borderRadius: 7,\n whiteSpace: 'nowrap'\n },\n className: annotationsClass,\n ref: divRef\n })), /*#__PURE__*/React.createElement(Line, {\n points: arc,\n lineWidth: lineWidth * 4,\n visible: false,\n userData: userData\n }), /*#__PURE__*/React.createElement(Line, {\n transparent: true,\n raycast: () => null,\n depthTest: depthTest,\n points: arc,\n lineWidth: lineWidth,\n side: THREE.DoubleSide,\n color: isHovered ? hoveredColor : axisColors[axis],\n opacity: opacity,\n polygonOffset: true,\n polygonOffsetFactor: -10,\n renderOrder: renderOrder,\n fog: false\n }));\n};\n\nexport { AxisRotator };\n","import * as React from 'react';\nimport * as THREE from 'three';\nimport { useThree } from '@react-three/fiber';\nimport { Line } from '../../core/Line.js';\nimport { Html } from '../Html.js';\nimport { context } from './context.js';\n\nconst decomposeIntoBasis = (e1, e2, offset) => {\n const i1 = Math.abs(e1.x) >= Math.abs(e1.y) && Math.abs(e1.x) >= Math.abs(e1.z) ? 0 : Math.abs(e1.y) >= Math.abs(e1.x) && Math.abs(e1.y) >= Math.abs(e1.z) ? 1 : 2;\n const e2DegrowthOrder = [0, 1, 2].sort((a, b) => Math.abs(e2.getComponent(b)) - Math.abs(e2.getComponent(a)));\n const i2 = i1 === e2DegrowthOrder[0] ? e2DegrowthOrder[1] : e2DegrowthOrder[0];\n const a1 = e1.getComponent(i1);\n const a2 = e1.getComponent(i2);\n const b1 = e2.getComponent(i1);\n const b2 = e2.getComponent(i2);\n const c1 = offset.getComponent(i1);\n const c2 = offset.getComponent(i2);\n const y = (c2 - c1 * (a2 / a1)) / (b2 - b1 * (a2 / a1));\n const x = (c1 - y * b1) / a1;\n return [x, y];\n};\nconst ray = /* @__PURE__ */new THREE.Ray();\nconst intersection = /* @__PURE__ */new THREE.Vector3();\nconst offsetMatrix = /* @__PURE__ */new THREE.Matrix4();\nconst PlaneSlider = ({\n dir1,\n dir2,\n axis\n}) => {\n const {\n translation,\n translationLimits,\n annotations,\n annotationsClass,\n depthTest,\n scale,\n lineWidth,\n fixed,\n axisColors,\n hoveredColor,\n opacity,\n renderOrder,\n onDragStart,\n onDrag,\n onDragEnd,\n userData\n } = React.useContext(context);\n const camControls = useThree(state => state.controls);\n const divRef = React.useRef(null);\n const objRef = React.useRef(null);\n const clickInfo = React.useRef(null);\n const offsetX0 = React.useRef(0);\n const offsetY0 = React.useRef(0);\n const [isHovered, setIsHovered] = React.useState(false);\n const onPointerDown = React.useCallback(e => {\n if (annotations) {\n divRef.current.innerText = `${translation.current[(axis + 1) % 3].toFixed(2)}, ${translation.current[(axis + 2) % 3].toFixed(2)}`;\n divRef.current.style.display = 'block';\n }\n e.stopPropagation();\n const clickPoint = e.point.clone();\n const origin = new THREE.Vector3().setFromMatrixPosition(objRef.current.matrixWorld);\n const e1 = new THREE.Vector3().setFromMatrixColumn(objRef.current.matrixWorld, 0).normalize();\n const e2 = new THREE.Vector3().setFromMatrixColumn(objRef.current.matrixWorld, 1).normalize();\n const normal = new THREE.Vector3().setFromMatrixColumn(objRef.current.matrixWorld, 2).normalize();\n const plane = new THREE.Plane().setFromNormalAndCoplanarPoint(normal, origin);\n clickInfo.current = {\n clickPoint,\n e1,\n e2,\n plane\n };\n offsetX0.current = translation.current[(axis + 1) % 3];\n offsetY0.current = translation.current[(axis + 2) % 3];\n onDragStart({\n component: 'Slider',\n axis,\n origin,\n directions: [e1, e2, normal]\n });\n camControls && (camControls.enabled = false);\n // @ts-ignore\n e.target.setPointerCapture(e.pointerId);\n }, [annotations, camControls, onDragStart, axis]);\n const onPointerMove = React.useCallback(e => {\n e.stopPropagation();\n if (!isHovered) setIsHovered(true);\n if (clickInfo.current) {\n const {\n clickPoint,\n e1,\n e2,\n plane\n } = clickInfo.current;\n const [minX, maxX] = (translationLimits == null ? void 0 : translationLimits[(axis + 1) % 3]) || [undefined, undefined];\n const [minY, maxY] = (translationLimits == null ? void 0 : translationLimits[(axis + 2) % 3]) || [undefined, undefined];\n ray.copy(e.ray);\n ray.intersectPlane(plane, intersection);\n ray.direction.negate();\n ray.intersectPlane(plane, intersection);\n intersection.sub(clickPoint);\n let [offsetX, offsetY] = decomposeIntoBasis(e1, e2, intersection);\n /* let offsetY = (intersection.y - (intersection.x * e1.y) / e1.x) / (e2.y - (e2.x * e1.y) / e1.x)\n let offsetX = (intersection.x - offsetY * e2.x) / e1.x */\n if (minX !== undefined) {\n offsetX = Math.max(offsetX, minX - offsetX0.current);\n }\n if (maxX !== undefined) {\n offsetX = Math.min(offsetX, maxX - offsetX0.current);\n }\n if (minY !== undefined) {\n offsetY = Math.max(offsetY, minY - offsetY0.current);\n }\n if (maxY !== undefined) {\n offsetY = Math.min(offsetY, maxY - offsetY0.current);\n }\n translation.current[(axis + 1) % 3] = offsetX0.current + offsetX;\n translation.current[(axis + 2) % 3] = offsetY0.current + offsetY;\n if (annotations) {\n divRef.current.innerText = `${translation.current[(axis + 1) % 3].toFixed(2)}, ${translation.current[(axis + 2) % 3].toFixed(2)}`;\n }\n offsetMatrix.makeTranslation(offsetX * e1.x + offsetY * e2.x, offsetX * e1.y + offsetY * e2.y, offsetX * e1.z + offsetY * e2.z);\n onDrag(offsetMatrix);\n }\n }, [annotations, onDrag, isHovered, translation, translationLimits, axis]);\n const onPointerUp = React.useCallback(e => {\n if (annotations) {\n divRef.current.style.display = 'none';\n }\n e.stopPropagation();\n clickInfo.current = null;\n onDragEnd();\n camControls && (camControls.enabled = true);\n // @ts-ignore\n e.target.releasePointerCapture(e.pointerId);\n }, [annotations, camControls, onDragEnd]);\n const onPointerOut = React.useCallback(e => {\n e.stopPropagation();\n setIsHovered(false);\n }, []);\n const matrixL = React.useMemo(() => {\n const dir1N = dir1.clone().normalize();\n const dir2N = dir2.clone().normalize();\n return new THREE.Matrix4().makeBasis(dir1N, dir2N, dir1N.clone().cross(dir2N));\n }, [dir1, dir2]);\n const pos1 = fixed ? 1 / 7 : scale / 7;\n const length = fixed ? 0.225 : scale * 0.225;\n const color = isHovered ? hoveredColor : axisColors[axis];\n const points = React.useMemo(() => [new THREE.Vector3(0, 0, 0), new THREE.Vector3(0, length, 0), new THREE.Vector3(length, length, 0), new THREE.Vector3(length, 0, 0), new THREE.Vector3(0, 0, 0)], [length]);\n return /*#__PURE__*/React.createElement(\"group\", {\n ref: objRef,\n matrix: matrixL,\n matrixAutoUpdate: false\n }, annotations && /*#__PURE__*/React.createElement(Html, {\n position: [0, 0, 0]\n }, /*#__PURE__*/React.createElement(\"div\", {\n style: {\n display: 'none',\n background: '#151520',\n color: 'white',\n padding: '6px 8px',\n borderRadius: 7,\n whiteSpace: 'nowrap'\n },\n className: annotationsClass,\n ref: divRef\n })), /*#__PURE__*/React.createElement(\"group\", {\n position: [pos1 * 1.7, pos1 * 1.7, 0]\n }, /*#__PURE__*/React.createElement(\"mesh\", {\n visible: true,\n onPointerDown: onPointerDown,\n onPointerMove: onPointerMove,\n onPointerUp: onPointerUp,\n onPointerOut: onPointerOut,\n scale: length,\n userData: userData,\n renderOrder: renderOrder\n }, /*#__PURE__*/React.createElement(\"planeGeometry\", null), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n transparent: true,\n depthTest: depthTest,\n color: color,\n polygonOffset: true,\n polygonOffsetFactor: -10,\n side: THREE.DoubleSide,\n fog: false\n })), /*#__PURE__*/React.createElement(Line, {\n position: [-length / 2, -length / 2, 0],\n transparent: true,\n depthTest: depthTest,\n points: points,\n lineWidth: lineWidth,\n color: color,\n opacity: opacity,\n polygonOffset: true,\n polygonOffsetFactor: -10,\n userData: userData,\n fog: false,\n renderOrder: renderOrder\n })));\n};\n\nexport { PlaneSlider };\n","import * as React from 'react';\nimport * as THREE from 'three';\nimport { useThree } from '@react-three/fiber';\nimport { Html } from '../Html.js';\nimport { context } from './context.js';\nimport { calculateScaleFactor } from '../../core/calculateScaleFactor.js';\n\nconst vec1 = /* @__PURE__ */new THREE.Vector3();\nconst vec2 = /* @__PURE__ */new THREE.Vector3();\nconst calculateOffset = (clickPoint, normal, rayStart, rayDir) => {\n const e1 = normal.dot(normal);\n const e2 = normal.dot(clickPoint) - normal.dot(rayStart);\n const e3 = normal.dot(rayDir);\n if (e3 === 0) {\n return -e2 / e1;\n }\n vec1.copy(rayDir).multiplyScalar(e1 / e3).sub(normal);\n vec2.copy(rayDir).multiplyScalar(e2 / e3).add(rayStart).sub(clickPoint);\n const offset = -vec1.dot(vec2) / vec1.dot(vec1);\n return offset;\n};\nconst upV = /* @__PURE__ */new THREE.Vector3(0, 1, 0);\nconst scaleV = /* @__PURE__ */new THREE.Vector3();\nconst scaleMatrix = /* @__PURE__ */new THREE.Matrix4();\nconst ScalingSphere = ({\n direction,\n axis\n}) => {\n const {\n scaleLimits,\n annotations,\n annotationsClass,\n depthTest,\n scale,\n lineWidth,\n fixed,\n axisColors,\n hoveredColor,\n opacity,\n renderOrder,\n onDragStart,\n onDrag,\n onDragEnd,\n userData\n } = React.useContext(context);\n const size = useThree(state => state.size);\n const camControls = useThree(state => state.controls);\n const divRef = React.useRef(null);\n const objRef = React.useRef(null);\n const meshRef = React.useRef(null);\n const scale0 = React.useRef(1);\n const scaleCur = React.useRef(1);\n const clickInfo = React.useRef(null);\n const [isHovered, setIsHovered] = React.useState(false);\n const position = fixed ? 1.2 : 1.2 * scale;\n const onPointerDown = React.useCallback(e => {\n if (annotations) {\n divRef.current.innerText = `${scaleCur.current.toFixed(2)}`;\n divRef.current.style.display = 'block';\n }\n e.stopPropagation();\n const rotation = new THREE.Matrix4().extractRotation(objRef.current.matrixWorld);\n const clickPoint = e.point.clone();\n const origin = new THREE.Vector3().setFromMatrixPosition(objRef.current.matrixWorld);\n const dir = direction.clone().applyMatrix4(rotation).normalize();\n const mPLG = objRef.current.matrixWorld.clone();\n const mPLGInv = mPLG.clone().invert();\n const offsetMultiplier = fixed ? 1 / calculateScaleFactor(objRef.current.getWorldPosition(vec1), scale, e.camera, size) : 1;\n clickInfo.current = {\n clickPoint,\n dir,\n mPLG,\n mPLGInv,\n offsetMultiplier\n };\n onDragStart({\n component: 'Sphere',\n axis,\n origin,\n directions: [dir]\n });\n camControls && (camControls.enabled = false);\n // @ts-ignore - setPointerCapture is not in the type definition\n e.target.setPointerCapture(e.pointerId);\n }, [annotations, camControls, direction, onDragStart, axis, fixed, scale, size]);\n const onPointerMove = React.useCallback(e => {\n e.stopPropagation();\n if (!isHovered) setIsHovered(true);\n if (clickInfo.current) {\n const {\n clickPoint,\n dir,\n mPLG,\n mPLGInv,\n offsetMultiplier\n } = clickInfo.current;\n const [min, max] = (scaleLimits == null ? void 0 : scaleLimits[axis]) || [1e-5, undefined]; // always limit the minimal value, since setting it very low might break the transform\n\n const offsetW = calculateOffset(clickPoint, dir, e.ray.origin, e.ray.direction);\n const offsetL = offsetW * offsetMultiplier;\n const offsetH = fixed ? offsetL : offsetL / scale;\n let upscale = Math.pow(2, offsetH * 0.2);\n\n // @ts-ignore\n if (e.shiftKey) {\n upscale = Math.round(upscale * 10) / 10;\n }\n upscale = Math.max(upscale, min / scale0.current);\n if (max !== undefined) {\n upscale = Math.min(upscale, max / scale0.current);\n }\n scaleCur.current = scale0.current * upscale;\n meshRef.current.position.set(0, position + offsetL, 0);\n if (annotations) {\n divRef.current.innerText = `${scaleCur.current.toFixed(2)}`;\n }\n scaleV.set(1, 1, 1);\n scaleV.setComponent(axis, upscale);\n scaleMatrix.makeScale(scaleV.x, scaleV.y, scaleV.z).premultiply(mPLG).multiply(mPLGInv);\n onDrag(scaleMatrix);\n }\n }, [annotations, position, onDrag, isHovered, scaleLimits, axis]);\n const onPointerUp = React.useCallback(e => {\n if (annotations) {\n divRef.current.style.display = 'none';\n }\n e.stopPropagation();\n scale0.current = scaleCur.current;\n clickInfo.current = null;\n meshRef.current.position.set(0, position, 0);\n onDragEnd();\n camControls && (camControls.enabled = true);\n // @ts-ignore - releasePointerCapture & PointerEvent#pointerId is not in the type definition\n e.target.releasePointerCapture(e.pointerId);\n }, [annotations, camControls, onDragEnd, position]);\n const onPointerOut = React.useCallback(e => {\n e.stopPropagation();\n setIsHovered(false);\n }, []);\n const {\n radius,\n matrixL\n } = React.useMemo(() => {\n const radius = fixed ? lineWidth / scale * 1.8 : scale / 22.5;\n const quaternion = new THREE.Quaternion().setFromUnitVectors(upV, direction.clone().normalize());\n const matrixL = new THREE.Matrix4().makeRotationFromQuaternion(quaternion);\n return {\n radius,\n matrixL\n };\n }, [direction, scale, lineWidth, fixed]);\n const color = isHovered ? hoveredColor : axisColors[axis];\n return /*#__PURE__*/React.createElement(\"group\", {\n ref: objRef\n }, /*#__PURE__*/React.createElement(\"group\", {\n matrix: matrixL,\n matrixAutoUpdate: false,\n onPointerDown: onPointerDown,\n onPointerMove: onPointerMove,\n onPointerUp: onPointerUp,\n onPointerOut: onPointerOut\n }, annotations && /*#__PURE__*/React.createElement(Html, {\n position: [0, position / 2, 0]\n }, /*#__PURE__*/React.createElement(\"div\", {\n style: {\n display: 'none',\n background: '#151520',\n color: 'white',\n padding: '6px 8px',\n borderRadius: 7,\n whiteSpace: 'nowrap'\n },\n className: annotationsClass,\n ref: divRef\n })), /*#__PURE__*/React.createElement(\"mesh\", {\n ref: meshRef,\n position: [0, position, 0],\n renderOrder: renderOrder,\n userData: userData\n }, /*#__PURE__*/React.createElement(\"sphereGeometry\", {\n args: [radius, 12, 12]\n }), /*#__PURE__*/React.createElement(\"meshBasicMaterial\", {\n transparent: true,\n depthTest: depthTest,\n color: color,\n opacity: opacity,\n polygonOffset: true,\n polygonOffsetFactor: -10\n }))));\n};\n\nexport { ScalingSphere, calculateOffset };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport { AxisArrow } from './AxisArrow.js';\nimport { AxisRotator } from './AxisRotator.js';\nimport { PlaneSlider } from './PlaneSlider.js';\nimport { ScalingSphere } from './ScalingSphere.js';\nimport { context } from './context.js';\nimport { calculateScaleFactor } from '../../core/calculateScaleFactor.js';\n\nconst mL0 = /* @__PURE__ */new THREE.Matrix4();\nconst mW0 = /* @__PURE__ */new THREE.Matrix4();\nconst mP = /* @__PURE__ */new THREE.Matrix4();\nconst mPInv = /* @__PURE__ */new THREE.Matrix4();\nconst mW = /* @__PURE__ */new THREE.Matrix4();\nconst mL = /* @__PURE__ */new THREE.Matrix4();\nconst mL0Inv = /* @__PURE__ */new THREE.Matrix4();\nconst mdL = /* @__PURE__ */new THREE.Matrix4();\nconst mG = /* @__PURE__ */new THREE.Matrix4();\nconst bb = /* @__PURE__ */new THREE.Box3();\nconst bbObj = /* @__PURE__ */new THREE.Box3();\nconst vCenter = /* @__PURE__ */new THREE.Vector3();\nconst vSize = /* @__PURE__ */new THREE.Vector3();\nconst vAnchorOffset = /* @__PURE__ */new THREE.Vector3();\nconst vPosition = /* @__PURE__ */new THREE.Vector3();\nconst vScale = /* @__PURE__ */new THREE.Vector3();\nconst xDir = /* @__PURE__ */new THREE.Vector3(1, 0, 0);\nconst yDir = /* @__PURE__ */new THREE.Vector3(0, 1, 0);\nconst zDir = /* @__PURE__ */new THREE.Vector3(0, 0, 1);\nconst PivotControls = /* @__PURE__ */React.forwardRef(({\n enabled = true,\n matrix,\n onDragStart,\n onDrag,\n onDragEnd,\n autoTransform = true,\n anchor,\n disableAxes = false,\n disableSliders = false,\n disableRotations = false,\n disableScaling = false,\n activeAxes = [true, true, true],\n offset = [0, 0, 0],\n rotation = [0, 0, 0],\n scale = 1,\n lineWidth = 4,\n fixed = false,\n translationLimits,\n rotationLimits,\n scaleLimits,\n depthTest = true,\n renderOrder = 500,\n axisColors = ['#ff2060', '#20df80', '#2080ff'],\n hoveredColor = '#ffff40',\n annotations = false,\n annotationsClass,\n opacity = 1,\n visible = true,\n userData,\n children,\n ...props\n}, fRef) => {\n const invalidate = useThree(state => state.invalidate);\n const parentRef = React.useRef(null);\n const ref = React.useRef(null);\n const gizmoRef = React.useRef(null);\n const childrenRef = React.useRef(null);\n const translation = React.useRef([0, 0, 0]);\n const cameraScale = React.useRef(new THREE.Vector3(1, 1, 1));\n const gizmoScale = React.useRef(new THREE.Vector3(1, 1, 1));\n React.useLayoutEffect(() => {\n if (!anchor) return;\n childrenRef.current.updateWorldMatrix(true, true);\n mPInv.copy(childrenRef.current.matrixWorld).invert();\n bb.makeEmpty();\n childrenRef.current.traverse(obj => {\n if (!obj.geometry) return;\n if (!obj.geometry.boundingBox) obj.geometry.computeBoundingBox();\n mL.copy(obj.matrixWorld).premultiply(mPInv);\n bbObj.copy(obj.geometry.boundingBox);\n bbObj.applyMatrix4(mL);\n bb.union(bbObj);\n });\n vCenter.copy(bb.max).add(bb.min).multiplyScalar(0.5);\n vSize.copy(bb.max).sub(bb.min).multiplyScalar(0.5);\n vAnchorOffset.copy(vSize).multiply(new THREE.Vector3(...anchor)).add(vCenter);\n vPosition.set(...offset).add(vAnchorOffset);\n gizmoRef.current.position.copy(vPosition);\n invalidate();\n });\n const config = React.useMemo(() => ({\n onDragStart: props => {\n mL0.copy(ref.current.matrix);\n mW0.copy(ref.current.matrixWorld);\n onDragStart && onDragStart(props);\n invalidate();\n },\n onDrag: mdW => {\n mP.copy(parentRef.current.matrixWorld);\n mPInv.copy(mP).invert();\n // After applying the delta\n mW.copy(mW0).premultiply(mdW);\n mL.copy(mW).premultiply(mPInv);\n mL0Inv.copy(mL0).invert();\n mdL.copy(mL).multiply(mL0Inv);\n if (autoTransform) {\n ref.current.matrix.copy(mL);\n }\n onDrag && onDrag(mL, mdL, mW, mdW);\n invalidate();\n },\n onDragEnd: () => {\n if (onDragEnd) onDragEnd();\n invalidate();\n },\n translation,\n translationLimits,\n rotationLimits,\n axisColors,\n hoveredColor,\n opacity,\n scale,\n lineWidth,\n fixed,\n depthTest,\n renderOrder,\n userData,\n annotations,\n annotationsClass\n }), [onDragStart, onDrag, onDragEnd, translation, translationLimits, rotationLimits, scaleLimits, depthTest, scale, lineWidth, fixed, ...axisColors, hoveredColor, opacity, userData, autoTransform, annotations, annotationsClass]);\n const vec = new THREE.Vector3();\n useFrame(state => {\n if (fixed) {\n const sf = calculateScaleFactor(gizmoRef.current.getWorldPosition(vec), scale, state.camera, state.size);\n cameraScale.current.setScalar(sf);\n }\n if (matrix && matrix instanceof THREE.Matrix4) {\n ref.current.matrix = matrix;\n }\n // Update gizmo scale in accordance with matrix changes\n // Without this, there might be noticable turbulences if scaling happens fast enough\n ref.current.updateWorldMatrix(true, true);\n mG.makeRotationFromEuler(gizmoRef.current.rotation).setPosition(gizmoRef.current.position).premultiply(ref.current.matrixWorld);\n gizmoScale.current.setFromMatrixScale(mG);\n vScale.copy(cameraScale.current).divide(gizmoScale.current);\n if (Math.abs(gizmoRef.current.scale.x - vScale.x) > 1e-4 || Math.abs(gizmoRef.current.scale.y - vScale.y) > 1e-4 || Math.abs(gizmoRef.current.scale.z - vScale.z) > 1e-4) {\n gizmoRef.current.scale.copy(vScale);\n state.invalidate();\n }\n });\n React.useImperativeHandle(fRef, () => ref.current, []);\n return /*#__PURE__*/React.createElement(context.Provider, {\n value: config\n }, /*#__PURE__*/React.createElement(\"group\", {\n ref: parentRef\n }, /*#__PURE__*/React.createElement(\"group\", _extends({\n ref: ref,\n matrix: matrix,\n matrixAutoUpdate: false\n }, props), /*#__PURE__*/React.createElement(\"group\", {\n visible: visible,\n ref: gizmoRef,\n position: offset,\n rotation: rotation\n }, enabled && /*#__PURE__*/React.createElement(React.Fragment, null, !disableAxes && activeAxes[0] && /*#__PURE__*/React.createElement(AxisArrow, {\n axis: 0,\n direction: xDir\n }), !disableAxes && activeAxes[1] && /*#__PURE__*/React.createElement(AxisArrow, {\n axis: 1,\n direction: yDir\n }), !disableAxes && activeAxes[2] && /*#__PURE__*/React.createElement(AxisArrow, {\n axis: 2,\n direction: zDir\n }), !disableSliders && activeAxes[0] && activeAxes[1] && /*#__PURE__*/React.createElement(PlaneSlider, {\n axis: 2,\n dir1: xDir,\n dir2: yDir\n }), !disableSliders && activeAxes[0] && activeAxes[2] && /*#__PURE__*/React.createElement(PlaneSlider, {\n axis: 1,\n dir1: zDir,\n dir2: xDir\n }), !disableSliders && activeAxes[2] && activeAxes[1] && /*#__PURE__*/React.createElement(PlaneSlider, {\n axis: 0,\n dir1: yDir,\n dir2: zDir\n }), !disableRotations && activeAxes[0] && activeAxes[1] && /*#__PURE__*/React.createElement(AxisRotator, {\n axis: 2,\n dir1: xDir,\n dir2: yDir\n }), !disableRotations && activeAxes[0] && activeAxes[2] && /*#__PURE__*/React.createElement(AxisRotator, {\n axis: 1,\n dir1: zDir,\n dir2: xDir\n }), !disableRotations && activeAxes[2] && activeAxes[1] && /*#__PURE__*/React.createElement(AxisRotator, {\n axis: 0,\n dir1: yDir,\n dir2: zDir\n }), !disableScaling && activeAxes[0] && /*#__PURE__*/React.createElement(ScalingSphere, {\n axis: 0,\n direction: xDir\n }), !disableScaling && activeAxes[1] && /*#__PURE__*/React.createElement(ScalingSphere, {\n axis: 1,\n direction: yDir\n }), !disableScaling && activeAxes[2] && /*#__PURE__*/React.createElement(ScalingSphere, {\n axis: 2,\n direction: zDir\n }))), /*#__PURE__*/React.createElement(\"group\", {\n ref: childrenRef\n }, children))));\n});\n\nexport { PivotControls };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { forwardRef, useEffect } from 'react';\nimport { suspend, clear } from 'suspend-react';\nimport { VideoTexture } from '../core/VideoTexture.js';\n\n/**\n * Create a video texture from [`getDisplayMedia`](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getDisplayMedia)\n */\nconst ScreenVideoTexture = /* @__PURE__ */forwardRef(({\n options = {\n video: true\n },\n ...props\n}, fref) => {\n const mediaStream = suspend(() => navigator.mediaDevices.getDisplayMedia(options), []);\n useEffect(() => {\n return () => {\n mediaStream == null || mediaStream.getTracks().forEach(track => track.stop());\n clear([]);\n };\n }, [mediaStream]);\n return /*#__PURE__*/React.createElement(VideoTexture, _extends({\n ref: fref\n }, props, {\n src: mediaStream\n }));\n});\n\nexport { ScreenVideoTexture };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as React from 'react';\nimport { forwardRef, useEffect } from 'react';\nimport { suspend, clear } from 'suspend-react';\nimport { VideoTexture } from '../core/VideoTexture.js';\n\n/**\n * Create a video texture from [`getUserMedia`](https://developer.mozilla.org/en-US/docs/Web/API/MediaDevices/getUserMedia)\n */\nconst WebcamVideoTexture = /* @__PURE__ */forwardRef(({\n constraints = {\n audio: false,\n video: {\n facingMode: 'user'\n }\n },\n ...props\n}, fref) => {\n const mediaStream = suspend(() => navigator.mediaDevices.getUserMedia(constraints), []);\n useEffect(() => {\n return () => {\n mediaStream == null || mediaStream.getTracks().forEach(track => track.stop());\n clear([]);\n };\n }, [mediaStream]);\n return /*#__PURE__*/React.createElement(VideoTexture, _extends({\n ref: fref\n }, props, {\n src: mediaStream\n }));\n});\n\nexport { WebcamVideoTexture };\n","import * as React from 'react';\nimport * as THREE from 'three';\nimport { useThree } from '@react-three/fiber';\nimport { Line } from '../core/Line.js';\n\n/* eslint react-hooks/exhaustive-deps: 1 */\nconst defaultLookAt = /* @__PURE__ */new THREE.Vector3(0, 0, -1);\nconst normal = /* @__PURE__ */function () {\n const a = new THREE.Vector3();\n const b = new THREE.Vector3();\n const c = new THREE.Vector3();\n const ab = new THREE.Vector3();\n const ac = new THREE.Vector3();\n return function (v1, v2, v3, v) {\n a.copy(v1);\n b.copy(v2);\n c.copy(v3);\n ab.copy(b).sub(a);\n ac.copy(c).sub(a);\n return v.crossVectors(ac, ab).normalize();\n };\n}();\nfunction mean(v1, v2) {\n return v1.clone().add(v2).multiplyScalar(0.5);\n}\nconst Facemesh = /* @__PURE__ */React.forwardRef(({\n points = FacemeshDatas.SAMPLE_FACELANDMARKER_RESULT.faceLandmarks[0],\n face,\n facialTransformationMatrix,\n faceBlendshapes,\n offset,\n offsetScalar = 80,\n width,\n height,\n depth = 1,\n verticalTri = [159, 386, 152],\n origin,\n eyes = true,\n eyesAsOrigin = false,\n debug = false,\n children,\n ...props\n}, fref) => {\n var _meshRef$current3;\n if (face) {\n points = face.keypoints;\n console.warn('Facemesh `face` prop is deprecated: use `points` instead');\n }\n const offsetRef = React.useRef(null);\n const scaleRef = React.useRef(null);\n const originRef = React.useRef(null);\n const outerRef = React.useRef(null);\n const meshRef = React.useRef(null);\n const eyeRightRef = React.useRef(null);\n const eyeLeftRef = React.useRef(null);\n const [sightDir] = React.useState(() => new THREE.Vector3());\n const [transform] = React.useState(() => new THREE.Object3D());\n const [sightDirQuaternion] = React.useState(() => new THREE.Quaternion());\n const [_origin] = React.useState(() => new THREE.Vector3());\n const {\n invalidate\n } = useThree();\n React.useEffect(() => {\n var _meshRef$current;\n (_meshRef$current = meshRef.current) == null || _meshRef$current.geometry.setIndex(FacemeshDatas.TRIANGULATION);\n }, []);\n const [bboxSize] = React.useState(() => new THREE.Vector3());\n React.useEffect(() => {\n var _meshRef$current2, _outerRef$current;\n const faceGeometry = (_meshRef$current2 = meshRef.current) == null ? void 0 : _meshRef$current2.geometry;\n if (!faceGeometry) return;\n faceGeometry.setFromPoints(points);\n faceGeometry.setDrawRange(0, FacemeshDatas.TRIANGULATION.length);\n\n //\n // A. compute sightDir vector\n //\n // - either from `facialTransformationMatrix` if available\n // - or from `verticalTri`\n //\n\n if (facialTransformationMatrix) {\n // from facialTransformationMatrix\n transform.matrix.fromArray(facialTransformationMatrix.data);\n transform.matrix.decompose(transform.position, transform.quaternion, transform.scale);\n\n // Rotation: y and z axes are inverted\n transform.rotation.y *= -1;\n transform.rotation.z *= -1;\n sightDirQuaternion.setFromEuler(transform.rotation);\n\n // Offset: y and z axes are inverted\n if (offset) {\n var _offsetRef$current;\n transform.position.y *= -1;\n transform.position.z *= -1;\n (_offsetRef$current = offsetRef.current) == null || _offsetRef$current.position.copy(transform.position.divideScalar(offsetScalar));\n } else {\n var _offsetRef$current2;\n (_offsetRef$current2 = offsetRef.current) == null || _offsetRef$current2.position.set(0, 0, 0); // reset\n }\n } else {\n // normal to verticalTri\n normal(points[verticalTri[0]], points[verticalTri[1]], points[verticalTri[2]], sightDir);\n sightDirQuaternion.setFromUnitVectors(defaultLookAt, sightDir);\n }\n const sightDirQuaternionInverse = sightDirQuaternion.clone().invert();\n\n //\n // B. geometry (straightened)\n //\n\n // 1. center (before rotate back)\n faceGeometry.computeBoundingBox();\n if (debug) invalidate(); // invalidate to force re-render for box3Helper (after .computeBoundingBox())\n faceGeometry.center();\n\n // 2. rotate back + rotate outerRef (once 1.)\n faceGeometry.applyQuaternion(sightDirQuaternionInverse);\n (_outerRef$current = outerRef.current) == null || _outerRef$current.setRotationFromQuaternion(sightDirQuaternion);\n\n // 3. 👀 eyes\n if (eyes) {\n if (!faceBlendshapes) {\n console.warn('Facemesh `eyes` option only works if `faceBlendshapes` is provided: skipping.');\n } else {\n if (eyeRightRef.current && eyeLeftRef.current && originRef.current) {\n if (eyesAsOrigin) {\n // compute the middle of the 2 eyes as the `origin`\n const eyeRightSphere = eyeRightRef.current._computeSphere(faceGeometry);\n const eyeLeftSphere = eyeLeftRef.current._computeSphere(faceGeometry);\n const eyesCenter = mean(eyeRightSphere.center, eyeLeftSphere.center);\n origin = eyesCenter.negate(); // eslint-disable-line react-hooks/exhaustive-deps\n\n eyeRightRef.current._update(faceGeometry, faceBlendshapes, eyeRightSphere);\n eyeLeftRef.current._update(faceGeometry, faceBlendshapes, eyeLeftSphere);\n } else {\n eyeRightRef.current._update(faceGeometry, faceBlendshapes);\n eyeLeftRef.current._update(faceGeometry, faceBlendshapes);\n }\n }\n }\n }\n\n // 3. origin\n if (originRef.current) {\n if (origin !== undefined) {\n if (typeof origin === 'number') {\n const position = faceGeometry.getAttribute('position');\n _origin.set(-position.getX(origin), -position.getY(origin), -position.getZ(origin));\n } else if (origin.isVector3) {\n _origin.copy(origin);\n }\n } else {\n _origin.setScalar(0);\n }\n originRef.current.position.copy(_origin);\n }\n\n // 4. re-scale\n if (scaleRef.current) {\n let scale = 1;\n if (width || height || depth) {\n faceGeometry.boundingBox.getSize(bboxSize);\n if (width) scale = width / bboxSize.x; // fit in width\n if (height) scale = height / bboxSize.y; // fit in height\n if (depth) scale = depth / bboxSize.z; // fit in depth\n }\n scaleRef.current.scale.setScalar(scale !== 1 ? scale : 1);\n }\n faceGeometry.computeVertexNormals();\n faceGeometry.attributes.position.needsUpdate = true;\n }, [points, facialTransformationMatrix, faceBlendshapes, transform, offset, offsetScalar, width, height, depth, verticalTri, origin, eyes, debug, invalidate, sightDir, sightDirQuaternion, bboxSize, _origin]);\n\n //\n // API\n //\n\n const api = React.useMemo(() => ({\n outerRef,\n meshRef,\n eyeRightRef,\n eyeLeftRef\n }), []);\n React.useImperativeHandle(fref, () => api, [api]);\n const [meshBboxSize] = React.useState(() => new THREE.Vector3());\n const bbox = (_meshRef$current3 = meshRef.current) == null ? void 0 : _meshRef$current3.geometry.boundingBox;\n const one = (bbox == null ? void 0 : bbox.getSize(meshBboxSize).z) || 1;\n return /*#__PURE__*/React.createElement(\"group\", props, /*#__PURE__*/React.createElement(\"group\", {\n ref: offsetRef\n }, /*#__PURE__*/React.createElement(\"group\", {\n ref: outerRef\n }, /*#__PURE__*/React.createElement(\"group\", {\n ref: scaleRef\n }, debug ? /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(\"axesHelper\", {\n args: [one]\n }), /*#__PURE__*/React.createElement(Line, {\n points: [[0, 0, 0], [0, 0, -one]],\n color: 0x00ffff\n })) : null, /*#__PURE__*/React.createElement(\"group\", {\n ref: originRef\n }, eyes && faceBlendshapes && /*#__PURE__*/React.createElement(\"group\", {\n name: \"eyes\"\n }, /*#__PURE__*/React.createElement(FacemeshEye, {\n side: \"left\",\n ref: eyeRightRef,\n debug: debug\n }), /*#__PURE__*/React.createElement(FacemeshEye, {\n side: \"right\",\n ref: eyeLeftRef,\n debug: debug\n })), /*#__PURE__*/React.createElement(\"mesh\", {\n ref: meshRef,\n name: \"face\"\n }, children, debug ? /*#__PURE__*/React.createElement(React.Fragment, null, bbox && /*#__PURE__*/React.createElement(\"box3Helper\", {\n args: [bbox]\n })) : null))))));\n});\n\n//\n// 👁️ FacemeshEye\n//\n\nconst FacemeshEyeDefaults = {\n contourLandmarks: {\n right: [33, 133, 159, 145, 153],\n left: [263, 362, 386, 374, 380]\n },\n blendshapes: {\n right: [14, 16, 18, 12],\n // lookIn,lookOut, lookUp,lookDown\n left: [13, 15, 17, 11] // lookIn,lookOut, lookUp,lookDown\n },\n color: {\n right: 'red',\n left: '#00ff00'\n },\n fov: {\n horizontal: 100,\n vertical: 90\n }\n};\nconst FacemeshEye = /* @__PURE__ */React.forwardRef(({\n side,\n debug = true\n}, fref) => {\n const eyeMeshRef = React.useRef(null);\n const irisDirRef = React.useRef(null);\n\n //\n // _computeSphere()\n //\n // Compute eye's sphere .position and .radius\n //\n\n const [sphere] = React.useState(() => new THREE.Sphere());\n const _computeSphere = React.useCallback(faceGeometry => {\n const position = faceGeometry.getAttribute('position');\n\n // get some eye contour landmarks points (from geometry)\n const eyeContourLandmarks = FacemeshEyeDefaults.contourLandmarks[side];\n const eyeContourPoints = eyeContourLandmarks.map(i => new THREE.Vector3(position.getX(i), position.getY(i), position.getZ(i))); // prettier-ignore\n\n // compute center (centroid from eyeContourPoints)\n sphere.center.set(0, 0, 0);\n eyeContourPoints.forEach(v => sphere.center.add(v));\n sphere.center.divideScalar(eyeContourPoints.length);\n\n // radius (eye half-width)\n sphere.radius = eyeContourPoints[0].sub(eyeContourPoints[1]).length() / 2;\n return sphere;\n }, [sphere, side]);\n\n //\n // _update()\n //\n // Update:\n // - A. eye's mesh (according to sphere)\n // - B. iris direction (according to \"look*\" blendshapes)\n //\n\n const [rotation] = React.useState(() => new THREE.Euler());\n const _update = React.useCallback((faceGeometry, faceBlendshapes, sphere) => {\n // A.\n if (eyeMeshRef.current) {\n var _sphere;\n (_sphere = sphere) !== null && _sphere !== void 0 ? _sphere : sphere = _computeSphere(faceGeometry); // compute sphere dims (if not passed)\n eyeMeshRef.current.position.copy(sphere.center);\n eyeMeshRef.current.scale.setScalar(sphere.radius);\n }\n\n // B.\n if (faceBlendshapes && irisDirRef.current) {\n const blendshapes = FacemeshEyeDefaults.blendshapes[side];\n const lookIn = faceBlendshapes.categories[blendshapes[0]].score;\n const lookOut = faceBlendshapes.categories[blendshapes[1]].score;\n const lookUp = faceBlendshapes.categories[blendshapes[2]].score;\n const lookDown = faceBlendshapes.categories[blendshapes[3]].score;\n const hfov = FacemeshEyeDefaults.fov.horizontal * THREE.MathUtils.DEG2RAD;\n const vfov = FacemeshEyeDefaults.fov.vertical * THREE.MathUtils.DEG2RAD;\n const rx = hfov * 0.5 * (lookDown - lookUp);\n const ry = vfov * 0.5 * (lookIn - lookOut) * (side === 'left' ? 1 : -1);\n rotation.set(rx, ry, 0);\n irisDirRef.current.setRotationFromEuler(rotation);\n }\n }, [_computeSphere, side, rotation]);\n\n //\n // API\n //\n\n const api = React.useMemo(() => ({\n eyeMeshRef: eyeMeshRef,\n irisDirRef: irisDirRef,\n _computeSphere,\n _update\n }), [_computeSphere, _update]);\n React.useImperativeHandle(fref, () => api, [api]);\n const color = FacemeshEyeDefaults.color[side];\n return /*#__PURE__*/React.createElement(\"group\", null, /*#__PURE__*/React.createElement(\"group\", {\n ref: eyeMeshRef\n }, debug && /*#__PURE__*/React.createElement(\"axesHelper\", null), /*#__PURE__*/React.createElement(\"group\", {\n ref: irisDirRef\n }, /*#__PURE__*/React.createElement(React.Fragment, null, debug && /*#__PURE__*/React.createElement(Line, {\n points: [[0, 0, 0], [0, 0, -2]],\n lineWidth: 1,\n color: color\n })))));\n});\n\n//\n// Sample datas\n//\n\nconst FacemeshDatas = {\n // Extracted from: https://github.com/tensorflow/tfjs-models/blob/a8f500809f5afe38feea27870c77e7ba03a6ece4/face-landmarks-detection/demos/shared/triangulation.js\n // prettier-ignore\n TRIANGULATION: [127, 34, 139, 11, 0, 37, 232, 231, 120, 72, 37, 39, 128, 121, 47, 232, 121, 128, 104, 69, 67, 175, 171, 148, 157, 154, 155, 118, 50, 101, 73, 39, 40, 9, 151, 108, 48, 115, 131, 194, 204, 211, 74, 40, 185, 80, 42, 183, 40, 92, 186, 230, 229, 118, 202, 212, 214, 83, 18, 17, 76, 61, 146, 160, 29, 30, 56, 157, 173, 106, 204, 194, 135, 214, 192, 203, 165, 98, 21, 71, 68, 51, 45, 4, 144, 24, 23, 77, 146, 91, 205, 50, 187, 201, 200, 18, 91, 106, 182, 90, 91, 181, 85, 84, 17, 206, 203, 36, 148, 171, 140, 92, 40, 39, 193, 189, 244, 159, 158, 28, 247, 246, 161, 236, 3, 196, 54, 68, 104, 193, 168, 8, 117, 228, 31, 189, 193, 55, 98, 97, 99, 126, 47, 100, 166, 79, 218, 155, 154, 26, 209, 49, 131, 135, 136, 150, 47, 126, 217, 223, 52, 53, 45, 51, 134, 211, 170, 140, 67, 69, 108, 43, 106, 91, 230, 119, 120, 226, 130, 247, 63, 53, 52, 238, 20, 242, 46, 70, 156, 78, 62, 96, 46, 53, 63, 143, 34, 227, 173, 155, 133, 123, 117, 111, 44, 125, 19, 236, 134, 51, 216, 206, 205, 154, 153, 22, 39, 37, 167, 200, 201, 208, 36, 142, 100, 57, 212, 202, 20, 60, 99, 28, 158, 157, 35, 226, 113, 160, 159, 27, 204, 202, 210, 113, 225, 46, 43, 202, 204, 62, 76, 77, 137, 123, 116, 41, 38, 72, 203, 129, 142, 64, 98, 240, 49, 102, 64, 41, 73, 74, 212, 216, 207, 42, 74, 184, 169, 170, 211, 170, 149, 176, 105, 66, 69, 122, 6, 168, 123, 147, 187, 96, 77, 90, 65, 55, 107, 89, 90, 180, 101, 100, 120, 63, 105, 104, 93, 137, 227, 15, 86, 85, 129, 102, 49, 14, 87, 86, 55, 8, 9, 100, 47, 121, 145, 23, 22, 88, 89, 179, 6, 122, 196, 88, 95, 96, 138, 172, 136, 215, 58, 172, 115, 48, 219, 42, 80, 81, 195, 3, 51, 43, 146, 61, 171, 175, 199, 81, 82, 38, 53, 46, 225, 144, 163, 110, 246, 33, 7, 52, 65, 66, 229, 228, 117, 34, 127, 234, 107, 108, 69, 109, 108, 151, 48, 64, 235, 62, 78, 191, 129, 209, 126, 111, 35, 143, 163, 161, 246, 117, 123, 50, 222, 65, 52, 19, 125, 141, 221, 55, 65, 3, 195, 197, 25, 7, 33, 220, 237, 44, 70, 71, 139, 122, 193, 245, 247, 130, 33, 71, 21, 162, 153, 158, 159, 170, 169, 150, 188, 174, 196, 216, 186, 92, 144, 160, 161, 2, 97, 167, 141, 125, 241, 164, 167, 37, 72, 38, 12, 145, 159, 160, 38, 82, 13, 63, 68, 71, 226, 35, 111, 158, 153, 154, 101, 50, 205, 206, 92, 165, 209, 198, 217, 165, 167, 97, 220, 115, 218, 133, 112, 243, 239, 238, 241, 214, 135, 169, 190, 173, 133, 171, 208, 32, 125, 44, 237, 86, 87, 178, 85, 86, 179, 84, 85, 180, 83, 84, 181, 201, 83, 182, 137, 93, 132, 76, 62, 183, 61, 76, 184, 57, 61, 185, 212, 57, 186, 214, 207, 187, 34, 143, 156, 79, 239, 237, 123, 137, 177, 44, 1, 4, 201, 194, 32, 64, 102, 129, 213, 215, 138, 59, 166, 219, 242, 99, 97, 2, 94, 141, 75, 59, 235, 24, 110, 228, 25, 130, 226, 23, 24, 229, 22, 23, 230, 26, 22, 231, 112, 26, 232, 189, 190, 243, 221, 56, 190, 28, 56, 221, 27, 28, 222, 29, 27, 223, 30, 29, 224, 247, 30, 225, 238, 79, 20, 166, 59, 75, 60, 75, 240, 147, 177, 215, 20, 79, 166, 187, 147, 213, 112, 233, 244, 233, 128, 245, 128, 114, 188, 114, 217, 174, 131, 115, 220, 217, 198, 236, 198, 131, 134, 177, 132, 58, 143, 35, 124, 110, 163, 7, 228, 110, 25, 356, 389, 368, 11, 302, 267, 452, 350, 349, 302, 303, 269, 357, 343, 277, 452, 453, 357, 333, 332, 297, 175, 152, 377, 384, 398, 382, 347, 348, 330, 303, 304, 270, 9, 336, 337, 278, 279, 360, 418, 262, 431, 304, 408, 409, 310, 415, 407, 270, 409, 410, 450, 348, 347, 422, 430, 434, 313, 314, 17, 306, 307, 375, 387, 388, 260, 286, 414, 398, 335, 406, 418, 364, 367, 416, 423, 358, 327, 251, 284, 298, 281, 5, 4, 373, 374, 253, 307, 320, 321, 425, 427, 411, 421, 313, 18, 321, 405, 406, 320, 404, 405, 315, 16, 17, 426, 425, 266, 377, 400, 369, 322, 391, 269, 417, 465, 464, 386, 257, 258, 466, 260, 388, 456, 399, 419, 284, 332, 333, 417, 285, 8, 346, 340, 261, 413, 441, 285, 327, 460, 328, 355, 371, 329, 392, 439, 438, 382, 341, 256, 429, 420, 360, 364, 394, 379, 277, 343, 437, 443, 444, 283, 275, 440, 363, 431, 262, 369, 297, 338, 337, 273, 375, 321, 450, 451, 349, 446, 342, 467, 293, 334, 282, 458, 461, 462, 276, 353, 383, 308, 324, 325, 276, 300, 293, 372, 345, 447, 382, 398, 362, 352, 345, 340, 274, 1, 19, 456, 248, 281, 436, 427, 425, 381, 256, 252, 269, 391, 393, 200, 199, 428, 266, 330, 329, 287, 273, 422, 250, 462, 328, 258, 286, 384, 265, 353, 342, 387, 259, 257, 424, 431, 430, 342, 353, 276, 273, 335, 424, 292, 325, 307, 366, 447, 345, 271, 303, 302, 423, 266, 371, 294, 455, 460, 279, 278, 294, 271, 272, 304, 432, 434, 427, 272, 407, 408, 394, 430, 431, 395, 369, 400, 334, 333, 299, 351, 417, 168, 352, 280, 411, 325, 319, 320, 295, 296, 336, 319, 403, 404, 330, 348, 349, 293, 298, 333, 323, 454, 447, 15, 16, 315, 358, 429, 279, 14, 15, 316, 285, 336, 9, 329, 349, 350, 374, 380, 252, 318, 402, 403, 6, 197, 419, 318, 319, 325, 367, 364, 365, 435, 367, 397, 344, 438, 439, 272, 271, 311, 195, 5, 281, 273, 287, 291, 396, 428, 199, 311, 271, 268, 283, 444, 445, 373, 254, 339, 263, 466, 249, 282, 334, 296, 449, 347, 346, 264, 447, 454, 336, 296, 299, 338, 10, 151, 278, 439, 455, 292, 407, 415, 358, 371, 355, 340, 345, 372, 390, 249, 466, 346, 347, 280, 442, 443, 282, 19, 94, 370, 441, 442, 295, 248, 419, 197, 263, 255, 359, 440, 275, 274, 300, 383, 368, 351, 412, 465, 263, 467, 466, 301, 368, 389, 380, 374, 386, 395, 378, 379, 412, 351, 419, 436, 426, 322, 373, 390, 388, 2, 164, 393, 370, 462, 461, 164, 0, 267, 302, 11, 12, 374, 373, 387, 268, 12, 13, 293, 300, 301, 446, 261, 340, 385, 384, 381, 330, 266, 425, 426, 423, 391, 429, 355, 437, 391, 327, 326, 440, 457, 438, 341, 382, 362, 459, 457, 461, 434, 430, 394, 414, 463, 362, 396, 369, 262, 354, 461, 457, 316, 403, 402, 315, 404, 403, 314, 405, 404, 313, 406, 405, 421, 418, 406, 366, 401, 361, 306, 408, 407, 291, 409, 408, 287, 410, 409, 432, 436, 410, 434, 416, 411, 264, 368, 383, 309, 438, 457, 352, 376, 401, 274, 275, 4, 421, 428, 262, 294, 327, 358, 433, 416, 367, 289, 455, 439, 462, 370, 326, 2, 326, 370, 305, 460, 455, 254, 449, 448, 255, 261, 446, 253, 450, 449, 252, 451, 450, 256, 452, 451, 341, 453, 452, 413, 464, 463, 441, 413, 414, 258, 442, 441, 257, 443, 442, 259, 444, 443, 260, 445, 444, 467, 342, 445, 459, 458, 250, 289, 392, 290, 290, 328, 460, 376, 433, 435, 250, 290, 392, 411, 416, 433, 341, 463, 464, 453, 464, 465, 357, 465, 412, 343, 412, 399, 360, 363, 440, 437, 399, 456, 420, 456, 363, 401, 435, 288, 372, 383, 353, 339, 255, 249, 448, 261, 255, 133, 243, 190, 133, 155, 112, 33, 246, 247, 33, 130, 25, 398, 384, 286, 362, 398, 414, 362, 463, 341, 263, 359, 467, 263, 249, 255, 466, 467, 260, 75, 60, 166, 238, 239, 79, 162, 127, 139, 72, 11, 37, 121, 232, 120, 73, 72, 39, 114, 128, 47, 233, 232, 128, 103, 104, 67, 152, 175, 148, 173, 157, 155, 119, 118, 101, 74, 73, 40, 107, 9, 108, 49, 48, 131, 32, 194, 211, 184, 74, 185, 191, 80, 183, 185, 40, 186, 119, 230, 118, 210, 202, 214, 84, 83, 17, 77, 76, 146, 161, 160, 30, 190, 56, 173, 182, 106, 194, 138, 135, 192, 129, 203, 98, 54, 21, 68, 5, 51, 4, 145, 144, 23, 90, 77, 91, 207, 205, 187, 83, 201, 18, 181, 91, 182, 180, 90, 181, 16, 85, 17, 205, 206, 36, 176, 148, 140, 165, 92, 39, 245, 193, 244, 27, 159, 28, 30, 247, 161, 174, 236, 196, 103, 54, 104, 55, 193, 8, 111, 117, 31, 221, 189, 55, 240, 98, 99, 142, 126, 100, 219, 166, 218, 112, 155, 26, 198, 209, 131, 169, 135, 150, 114, 47, 217, 224, 223, 53, 220, 45, 134, 32, 211, 140, 109, 67, 108, 146, 43, 91, 231, 230, 120, 113, 226, 247, 105, 63, 52, 241, 238, 242, 124, 46, 156, 95, 78, 96, 70, 46, 63, 116, 143, 227, 116, 123, 111, 1, 44, 19, 3, 236, 51, 207, 216, 205, 26, 154, 22, 165, 39, 167, 199, 200, 208, 101, 36, 100, 43, 57, 202, 242, 20, 99, 56, 28, 157, 124, 35, 113, 29, 160, 27, 211, 204, 210, 124, 113, 46, 106, 43, 204, 96, 62, 77, 227, 137, 116, 73, 41, 72, 36, 203, 142, 235, 64, 240, 48, 49, 64, 42, 41, 74, 214, 212, 207, 183, 42, 184, 210, 169, 211, 140, 170, 176, 104, 105, 69, 193, 122, 168, 50, 123, 187, 89, 96, 90, 66, 65, 107, 179, 89, 180, 119, 101, 120, 68, 63, 104, 234, 93, 227, 16, 15, 85, 209, 129, 49, 15, 14, 86, 107, 55, 9, 120, 100, 121, 153, 145, 22, 178, 88, 179, 197, 6, 196, 89, 88, 96, 135, 138, 136, 138, 215, 172, 218, 115, 219, 41, 42, 81, 5, 195, 51, 57, 43, 61, 208, 171, 199, 41, 81, 38, 224, 53, 225, 24, 144, 110, 105, 52, 66, 118, 229, 117, 227, 34, 234, 66, 107, 69, 10, 109, 151, 219, 48, 235, 183, 62, 191, 142, 129, 126, 116, 111, 143, 7, 163, 246, 118, 117, 50, 223, 222, 52, 94, 19, 141, 222, 221, 65, 196, 3, 197, 45, 220, 44, 156, 70, 139, 188, 122, 245, 139, 71, 162, 145, 153, 159, 149, 170, 150, 122, 188, 196, 206, 216, 92, 163, 144, 161, 164, 2, 167, 242, 141, 241, 0, 164, 37, 11, 72, 12, 144, 145, 160, 12, 38, 13, 70, 63, 71, 31, 226, 111, 157, 158, 154, 36, 101, 205, 203, 206, 165, 126, 209, 217, 98, 165, 97, 237, 220, 218, 237, 239, 241, 210, 214, 169, 140, 171, 32, 241, 125, 237, 179, 86, 178, 180, 85, 179, 181, 84, 180, 182, 83, 181, 194, 201, 182, 177, 137, 132, 184, 76, 183, 185, 61, 184, 186, 57, 185, 216, 212, 186, 192, 214, 187, 139, 34, 156, 218, 79, 237, 147, 123, 177, 45, 44, 4, 208, 201, 32, 98, 64, 129, 192, 213, 138, 235, 59, 219, 141, 242, 97, 97, 2, 141, 240, 75, 235, 229, 24, 228, 31, 25, 226, 230, 23, 229, 231, 22, 230, 232, 26, 231, 233, 112, 232, 244, 189, 243, 189, 221, 190, 222, 28, 221, 223, 27, 222, 224, 29, 223, 225, 30, 224, 113, 247, 225, 99, 60, 240, 213, 147, 215, 60, 20, 166, 192, 187, 213, 243, 112, 244, 244, 233, 245, 245, 128, 188, 188, 114, 174, 134, 131, 220, 174, 217, 236, 236, 198, 134, 215, 177, 58, 156, 143, 124, 25, 110, 7, 31, 228, 25, 264, 356, 368, 0, 11, 267, 451, 452, 349, 267, 302, 269, 350, 357, 277, 350, 452, 357, 299, 333, 297, 396, 175, 377, 381, 384, 382, 280, 347, 330, 269, 303, 270, 151, 9, 337, 344, 278, 360, 424, 418, 431, 270, 304, 409, 272, 310, 407, 322, 270, 410, 449, 450, 347, 432, 422, 434, 18, 313, 17, 291, 306, 375, 259, 387, 260, 424, 335, 418, 434, 364, 416, 391, 423, 327, 301, 251, 298, 275, 281, 4, 254, 373, 253, 375, 307, 321, 280, 425, 411, 200, 421, 18, 335, 321, 406, 321, 320, 405, 314, 315, 17, 423, 426, 266, 396, 377, 369, 270, 322, 269, 413, 417, 464, 385, 386, 258, 248, 456, 419, 298, 284, 333, 168, 417, 8, 448, 346, 261, 417, 413, 285, 326, 327, 328, 277, 355, 329, 309, 392, 438, 381, 382, 256, 279, 429, 360, 365, 364, 379, 355, 277, 437, 282, 443, 283, 281, 275, 363, 395, 431, 369, 299, 297, 337, 335, 273, 321, 348, 450, 349, 359, 446, 467, 283, 293, 282, 250, 458, 462, 300, 276, 383, 292, 308, 325, 283, 276, 293, 264, 372, 447, 346, 352, 340, 354, 274, 19, 363, 456, 281, 426, 436, 425, 380, 381, 252, 267, 269, 393, 421, 200, 428, 371, 266, 329, 432, 287, 422, 290, 250, 328, 385, 258, 384, 446, 265, 342, 386, 387, 257, 422, 424, 430, 445, 342, 276, 422, 273, 424, 306, 292, 307, 352, 366, 345, 268, 271, 302, 358, 423, 371, 327, 294, 460, 331, 279, 294, 303, 271, 304, 436, 432, 427, 304, 272, 408, 395, 394, 431, 378, 395, 400, 296, 334, 299, 6, 351, 168, 376, 352, 411, 307, 325, 320, 285, 295, 336, 320, 319, 404, 329, 330, 349, 334, 293, 333, 366, 323, 447, 316, 15, 315, 331, 358, 279, 317, 14, 316, 8, 285, 9, 277, 329, 350, 253, 374, 252, 319, 318, 403, 351, 6, 419, 324, 318, 325, 397, 367, 365, 288, 435, 397, 278, 344, 439, 310, 272, 311, 248, 195, 281, 375, 273, 291, 175, 396, 199, 312, 311, 268, 276, 283, 445, 390, 373, 339, 295, 282, 296, 448, 449, 346, 356, 264, 454, 337, 336, 299, 337, 338, 151, 294, 278, 455, 308, 292, 415, 429, 358, 355, 265, 340, 372, 388, 390, 466, 352, 346, 280, 295, 442, 282, 354, 19, 370, 285, 441, 295, 195, 248, 197, 457, 440, 274, 301, 300, 368, 417, 351, 465, 251, 301, 389, 385, 380, 386, 394, 395, 379, 399, 412, 419, 410, 436, 322, 387, 373, 388, 326, 2, 393, 354, 370, 461, 393, 164, 267, 268, 302, 12, 386, 374, 387, 312, 268, 13, 298, 293, 301, 265, 446, 340, 380, 385, 381, 280, 330, 425, 322, 426, 391, 420, 429, 437, 393, 391, 326, 344, 440, 438, 458, 459, 461, 364, 434, 394, 428, 396, 262, 274, 354, 457, 317, 316, 402, 316, 315, 403, 315, 314, 404, 314, 313, 405, 313, 421, 406, 323, 366, 361, 292, 306, 407, 306, 291, 408, 291, 287, 409, 287, 432, 410, 427, 434, 411, 372, 264, 383, 459, 309, 457, 366, 352, 401, 1, 274, 4, 418, 421, 262, 331, 294, 358, 435, 433, 367, 392, 289, 439, 328, 462, 326, 94, 2, 370, 289, 305, 455, 339, 254, 448, 359, 255, 446, 254, 253, 449, 253, 252, 450, 252, 256, 451, 256, 341, 452, 414, 413, 463, 286, 441, 414, 286, 258, 441, 258, 257, 442, 257, 259, 443, 259, 260, 444, 260, 467, 445, 309, 459, 250, 305, 289, 290, 305, 290, 460, 401, 376, 435, 309, 250, 392, 376, 411, 433, 453, 341, 464, 357, 453, 465, 343, 357, 412, 437, 343, 399, 344, 360, 440, 420, 437, 456, 360, 420, 363, 361, 401, 288, 265, 372, 353, 390, 339, 249, 339, 448, 255],\n // My face as default (captured with a 640x480 webcam)\n // prettier-ignore\n SAMPLE_FACE: {\n \"keypoints\": [{\n \"x\": 356.2804412841797,\n \"y\": 295.1960563659668,\n \"z\": -23.786449432373047,\n \"name\": \"lips\"\n }, {\n \"x\": 354.8859405517578,\n \"y\": 264.69520568847656,\n \"z\": -36.718435287475586\n }, {\n \"x\": 355.2180862426758,\n \"y\": 275.3360366821289,\n \"z\": -21.183712482452393\n }, {\n \"x\": 347.349853515625,\n \"y\": 242.4400234222412,\n \"z\": -25.093655586242676\n }, {\n \"x\": 354.40135955810547,\n \"y\": 256.67933464050293,\n \"z\": -38.23572635650635\n }, {\n \"x\": 353.7689971923828,\n \"y\": 247.54886627197266,\n \"z\": -34.5475435256958\n }, {\n \"x\": 352.1288299560547,\n \"y\": 227.34312057495117,\n \"z\": -13.095386028289795\n }, {\n \"x\": 303.5013198852539,\n \"y\": 234.67002868652344,\n \"z\": 12.500141859054565,\n \"name\": \"rightEye\"\n }, {\n \"x\": 351.09378814697266,\n \"y\": 211.87547206878662,\n \"z\": -6.413471698760986\n }, {\n \"x\": 350.7115936279297,\n \"y\": 202.1251630783081,\n \"z\": -6.413471698760986\n }, {\n \"x\": 348.33667755126953,\n \"y\": 168.7741756439209,\n \"z\": 6.483500003814697,\n \"name\": \"faceOval\"\n }, {\n \"x\": 356.4806365966797,\n \"y\": 299.2995357513428,\n \"z\": -23.144519329071045\n }, {\n \"x\": 356.5511703491211,\n \"y\": 302.66146659851074,\n \"z\": -21.020312309265137\n }, {\n \"x\": 356.6239547729492,\n \"y\": 304.1536331176758,\n \"z\": -18.137459754943848,\n \"name\": \"lips\"\n }, {\n \"x\": 356.5807342529297,\n \"y\": 305.1840591430664,\n \"z\": -18.767719268798828,\n \"name\": \"lips\"\n }, {\n \"x\": 356.8241500854492,\n \"y\": 308.25711250305176,\n \"z\": -20.16829490661621\n }, {\n \"x\": 357.113037109375,\n \"y\": 312.26277351379395,\n \"z\": -22.10575819015503\n }, {\n \"x\": 357.34962463378906,\n \"y\": 317.1123218536377,\n \"z\": -21.837315559387207,\n \"name\": \"lips\"\n }, {\n \"x\": 357.6658630371094,\n \"y\": 325.51036834716797,\n \"z\": -16.27002477645874\n }, {\n \"x\": 355.0201416015625,\n \"y\": 269.36279296875,\n \"z\": -33.73054027557373\n }, {\n \"x\": 348.5237503051758,\n \"y\": 270.33411026000977,\n \"z\": -24.93025302886963\n }, {\n \"x\": 279.97331619262695,\n \"y\": 213.24176788330078,\n \"z\": 47.759642601013184,\n \"name\": \"faceOval\"\n }, {\n \"x\": 322.66529083251953,\n \"y\": 238.5027265548706,\n \"z\": 5.535193085670471\n }, {\n \"x\": 316.0983657836914,\n \"y\": 239.94489669799805,\n \"z\": 5.777376294136047\n }, {\n \"x\": 309.9431610107422,\n \"y\": 240.24518966674805,\n \"z\": 7.510589361190796\n }, {\n \"x\": 301.31994247436523,\n \"y\": 237.86138534545898,\n \"z\": 13.118728399276733\n }, {\n \"x\": 328.14266204833984,\n \"y\": 235.80496788024902,\n \"z\": 6.646900177001953\n }, {\n \"x\": 313.7326431274414,\n \"y\": 222.11161136627197,\n \"z\": 3.9887237548828125\n }, {\n \"x\": 320.45196533203125,\n \"y\": 221.87729358673096,\n \"z\": 4.601476192474365\n }, {\n \"x\": 307.35679626464844,\n \"y\": 223.63793849945068,\n \"z\": 5.932023525238037\n }, {\n \"x\": 303.0031204223633,\n \"y\": 226.3743782043457,\n \"z\": 8.479321002960205\n }, {\n \"x\": 296.80023193359375,\n \"y\": 242.94299125671387,\n \"z\": 15.931552648544312\n }, {\n \"x\": 332.2352981567383,\n \"y\": 340.77341079711914,\n \"z\": -10.165848731994629\n }, {\n \"x\": 301.38587951660156,\n \"y\": 233.46447944641113,\n \"z\": 14.764405488967896,\n \"name\": \"rightEye\"\n }, {\n \"x\": 279.0147018432617,\n \"y\": 244.37155723571777,\n \"z\": 45.77549457550049\n }, {\n \"x\": 289.60548400878906,\n \"y\": 239.1807460784912,\n \"z\": 23.191204071044922\n }, {\n \"x\": 320.32257080078125,\n \"y\": 267.1292781829834,\n \"z\": -4.954537749290466\n }, {\n \"x\": 347.64583587646484,\n \"y\": 294.4955062866211,\n \"z\": -23.062820434570312,\n \"name\": \"lips\"\n }, {\n \"x\": 349.28138732910156,\n \"y\": 303.1095886230469,\n \"z\": -20.238323211669922\n }, {\n \"x\": 338.9453125,\n \"y\": 298.19186210632324,\n \"z\": -19.456336498260498,\n \"name\": \"lips\"\n }, {\n \"x\": 333.36788177490234,\n \"y\": 302.6706790924072,\n \"z\": -14.776077270507812,\n \"name\": \"lips\"\n }, {\n \"x\": 342.89188385009766,\n \"y\": 304.3561363220215,\n \"z\": -17.752301692962646\n }, {\n \"x\": 337.7375030517578,\n \"y\": 306.0098361968994,\n \"z\": -13.410515785217285\n }, {\n \"x\": 325.6159210205078,\n \"y\": 316.22995376586914,\n \"z\": -6.681914925575256\n }, {\n \"x\": 349.0104675292969,\n \"y\": 264.9818515777588,\n \"z\": -36.274919509887695\n }, {\n \"x\": 347.7138900756836,\n \"y\": 257.5664806365967,\n \"z\": -37.67549514770508\n }, {\n \"x\": 291.79357528686523,\n \"y\": 218.88171672821045,\n \"z\": 11.578094959259033,\n \"name\": \"rightEyebrow\"\n }, {\n \"x\": 332.2689437866211,\n \"y\": 247.56946563720703,\n \"z\": -3.3730539679527283\n }, {\n \"x\": 332.0074462890625,\n \"y\": 267.1201229095459,\n \"z\": -19.969879388809204\n }, {\n \"x\": 331.27952575683594,\n \"y\": 263.6967658996582,\n \"z\": -17.47218608856201\n }, {\n \"x\": 301.04373931884766,\n \"y\": 269.56552505493164,\n \"z\": 3.61815482378006\n }, {\n \"x\": 347.4863815307617,\n \"y\": 249.0706443786621,\n \"z\": -32.633421421051025\n }, {\n \"x\": 307.26118087768555,\n \"y\": 208.2646894454956,\n \"z\": 1.1591226607561111,\n \"name\": \"rightEyebrow\"\n }, {\n \"x\": 297.91919708251953,\n \"y\": 212.22604751586914,\n \"z\": 5.914516448974609,\n \"name\": \"rightEyebrow\"\n }, {\n \"x\": 285.1651382446289,\n \"y\": 197.98450469970703,\n \"z\": 36.391637325286865,\n \"name\": \"faceOval\"\n }, {\n \"x\": 337.04097747802734,\n \"y\": 211.25229835510254,\n \"z\": -4.548954665660858\n }, {\n \"x\": 326.5912628173828,\n \"y\": 223.16698551177979,\n \"z\": 6.670243740081787\n }, {\n \"x\": 320.05664825439453,\n \"y\": 309.5834255218506,\n \"z\": -4.055835008621216\n }, {\n \"x\": 289.6866226196289,\n \"y\": 314.617395401001,\n \"z\": 53.875489234924316,\n \"name\": \"faceOval\"\n }, {\n \"x\": 337.4256896972656,\n \"y\": 270.8755302429199,\n \"z\": -17.67060160636902\n }, {\n \"x\": 343.69922637939453,\n \"y\": 273.0000400543213,\n \"z\": -18.756048679351807\n }, {\n \"x\": 327.4242401123047,\n \"y\": 309.22399520874023,\n \"z\": -4.703601002693176,\n \"name\": \"lips\"\n }, {\n \"x\": 330.37220001220703,\n \"y\": 308.3323001861572,\n \"z\": -6.442649960517883\n }, {\n \"x\": 293.87027740478516,\n \"y\": 207.7961826324463,\n \"z\": 9.821539521217346,\n \"name\": \"rightEyebrow\"\n }, {\n \"x\": 332.11437225341797,\n \"y\": 271.22812271118164,\n \"z\": -16.64351224899292\n }, {\n \"x\": 320.1197814941406,\n \"y\": 207.40366458892822,\n \"z\": -2.48164564371109,\n \"name\": \"rightEyebrow\"\n }, {\n \"x\": 318.59575271606445,\n \"y\": 201.07443809509277,\n \"z\": -3.110446035861969,\n \"name\": \"rightEyebrow\"\n }, {\n \"x\": 310.72303771972656,\n \"y\": 175.75075149536133,\n \"z\": 13.328815698623657,\n \"name\": \"faceOval\"\n }, {\n \"x\": 289.67578887939453,\n \"y\": 202.29835510253906,\n \"z\": 21.370456218719482\n }, {\n \"x\": 315.30879974365234,\n \"y\": 187.35260009765625,\n \"z\": 5.0304025411605835\n }, {\n \"x\": 287.8936767578125,\n \"y\": 216.54793739318848,\n \"z\": 17.81065821647644,\n \"name\": \"rightEyebrow\"\n }, {\n \"x\": 283.9391899108887,\n \"y\": 215.01142501831055,\n \"z\": 32.04984903335571\n }, {\n \"x\": 348.35330963134766,\n \"y\": 299.4155788421631,\n \"z\": -22.47924566268921\n }, {\n \"x\": 341.1790466308594,\n \"y\": 301.8221855163574,\n \"z\": -18.977805376052856\n }, {\n \"x\": 335.69713592529297,\n \"y\": 304.4266891479492,\n \"z\": -14.682706594467163\n }, {\n \"x\": 339.4615173339844,\n \"y\": 272.3654365539551,\n \"z\": -16.38674020767212\n }, {\n \"x\": 328.99600982666016,\n \"y\": 308.86685371398926,\n \"z\": -5.616893768310547\n }, {\n \"x\": 332.00313568115234,\n \"y\": 309.1875743865967,\n \"z\": -10.335084199905396\n }, {\n \"x\": 331.0068130493164,\n \"y\": 307.9274368286133,\n \"z\": -6.681914925575256,\n \"name\": \"lips\"\n }, {\n \"x\": 341.13792419433594,\n \"y\": 266.4876937866211,\n \"z\": -26.56425952911377\n }, {\n \"x\": 339.02950286865234,\n \"y\": 305.6663703918457,\n \"z\": -12.33674168586731,\n \"name\": \"lips\"\n }, {\n \"x\": 344.22935485839844,\n \"y\": 304.9452781677246,\n \"z\": -15.161235332489014,\n \"name\": \"lips\"\n }, {\n \"x\": 350.1844024658203,\n \"y\": 304.374303817749,\n \"z\": -17.5305438041687,\n \"name\": \"lips\"\n }, {\n \"x\": 348.52630615234375,\n \"y\": 325.9562301635742,\n \"z\": -16.164982318878174\n }, {\n \"x\": 348.6581802368164,\n \"y\": 317.1624183654785,\n \"z\": -21.510512828826904,\n \"name\": \"lips\"\n }, {\n \"x\": 348.9766311645508,\n \"y\": 312.1923065185547,\n \"z\": -21.708929538726807\n }, {\n \"x\": 349.2427444458008,\n \"y\": 308.0660820007324,\n \"z\": -19.643079042434692\n }, {\n \"x\": 349.67491149902344,\n \"y\": 305.42747497558594,\n \"z\": -18.16080331802368,\n \"name\": \"lips\"\n }, {\n \"x\": 337.95589447021484,\n \"y\": 306.6535949707031,\n \"z\": -12.803598642349243,\n \"name\": \"lips\"\n }, {\n \"x\": 337.06878662109375,\n \"y\": 307.63169288635254,\n \"z\": -14.274203777313232\n }, {\n \"x\": 335.77449798583984,\n \"y\": 309.8449516296387,\n \"z\": -15.698124170303345\n }, {\n \"x\": 334.6099090576172,\n \"y\": 312.7997016906738,\n \"z\": -14.764405488967896,\n \"name\": \"lips\"\n }, {\n \"x\": 327.2330856323242,\n \"y\": 293.80866050720215,\n \"z\": -11.864047050476074\n }, {\n \"x\": 280.97679138183594,\n \"y\": 279.79928970336914,\n \"z\": 68.90834331512451,\n \"name\": \"faceOval\"\n }, {\n \"x\": 355.13843536376953,\n \"y\": 271.7875671386719,\n \"z\": -25.350427627563477\n }, {\n \"x\": 334.7235870361328,\n \"y\": 307.4656391143799,\n \"z\": -9.302158951759338,\n \"name\": \"lips\"\n }, {\n \"x\": 333.5293960571289,\n \"y\": 307.89782524108887,\n \"z\": -10.200862884521484\n }, {\n \"x\": 346.29688262939453,\n \"y\": 276.4256286621094,\n \"z\": -19.748122692108154\n }, {\n \"x\": 335.16246795654297,\n \"y\": 276.22097969055176,\n \"z\": -12.313398122787476\n }, {\n \"x\": 345.09132385253906,\n \"y\": 274.7082996368408,\n \"z\": -19.304605722427368\n }, {\n \"x\": 325.4267883300781,\n \"y\": 252.95130729675293,\n \"z\": -1.6661019623279572\n }, {\n \"x\": 315.347843170166,\n \"y\": 259.05200958251953,\n \"z\": -0.25604281574487686\n }, {\n \"x\": 330.44933319091797,\n \"y\": 267.7570152282715,\n \"z\": -14.017432928085327\n }, {\n \"x\": 294.96768951416016,\n \"y\": 185.26001930236816,\n \"z\": 23.903164863586426,\n \"name\": \"faceOval\"\n }, {\n \"x\": 299.63531494140625,\n \"y\": 192.7913761138916,\n \"z\": 12.640198469161987\n }, {\n \"x\": 304.5452117919922,\n \"y\": 202.4142837524414,\n \"z\": 3.244667649269104,\n \"name\": \"rightEyebrow\"\n }, {\n \"x\": 331.6915512084961,\n \"y\": 320.0467872619629,\n \"z\": -10.632705688476562\n }, {\n \"x\": 334.5911407470703,\n \"y\": 201.27566814422607,\n \"z\": -6.133356094360352,\n \"name\": \"rightEyebrow\"\n }, {\n \"x\": 331.4815902709961,\n \"y\": 185.44180870056152,\n \"z\": 0.6627205014228821\n }, {\n \"x\": 328.05816650390625,\n \"y\": 170.8385467529297,\n \"z\": 7.358860373497009,\n \"name\": \"faceOval\"\n }, {\n \"x\": 304.49764251708984,\n \"y\": 239.76297855377197,\n \"z\": 10.387605428695679\n }, {\n \"x\": 290.6382179260254,\n \"y\": 248.85257720947266,\n \"z\": 19.03616428375244\n }, {\n \"x\": 331.5682601928711,\n \"y\": 233.20727348327637,\n \"z\": 7.837390303611755\n }, {\n \"x\": 295.5115509033203,\n \"y\": 228.9834451675415,\n \"z\": 14.41426157951355\n }, {\n \"x\": 336.94332122802734,\n \"y\": 241.8259334564209,\n \"z\": -5.27842104434967\n }, {\n \"x\": 336.2792205810547,\n \"y\": 262.7049922943115,\n \"z\": -26.12074375152588\n }, {\n \"x\": 284.4102478027344,\n \"y\": 255.3262710571289,\n \"z\": 25.467140674591064\n }, {\n \"x\": 295.1420593261719,\n \"y\": 253.02655220031738,\n \"z\": 12.430112361907959\n }, {\n \"x\": 303.5196113586426,\n \"y\": 254.20703887939453,\n \"z\": 6.139191389083862\n }, {\n \"x\": 315.73450088500977,\n \"y\": 251.64799690246582,\n \"z\": 3.3788898587226868\n }, {\n \"x\": 324.69661712646484,\n \"y\": 247.56494522094727,\n \"z\": 2.3328344523906708\n }, {\n \"x\": 331.57970428466797,\n \"y\": 243.02241325378418,\n \"z\": 1.1423448473215103\n }, {\n \"x\": 345.6210708618164,\n \"y\": 229.9976634979248,\n \"z\": -10.825285911560059\n }, {\n \"x\": 286.26644134521484,\n \"y\": 270.37991523742676,\n \"z\": 21.708929538726807\n }, {\n \"x\": 290.2525520324707,\n \"y\": 228.4921360015869,\n \"z\": 17.71728754043579\n }, {\n \"x\": 351.65367126464844,\n \"y\": 269.3400764465332,\n \"z\": -33.450424671173096\n }, {\n \"x\": 333.1378936767578,\n \"y\": 253.88388633728027,\n \"z\": -7.230473756790161\n }, {\n \"x\": 277.8318977355957,\n \"y\": 246.95331573486328,\n \"z\": 68.20805549621582,\n \"name\": \"faceOval\"\n }, {\n \"x\": 336.6680908203125,\n \"y\": 238.10003757476807,\n \"z\": 0.7688578963279724\n }, {\n \"x\": 329.95800018310547,\n \"y\": 269.18323516845703,\n \"z\": -7.207130789756775\n }, {\n \"x\": 299.17491912841797,\n \"y\": 234.13324356079102,\n \"z\": 15.95489501953125\n }, {\n \"x\": 335.61729431152344,\n \"y\": 258.71752738952637,\n \"z\": -23.016133308410645\n }, {\n \"x\": 284.1079330444336,\n \"y\": 297.0343494415283,\n \"z\": 63.25934886932373,\n \"name\": \"faceOval\"\n }, {\n \"x\": 331.44542694091797,\n \"y\": 230.6892442703247,\n \"z\": 9.92658257484436,\n \"name\": \"rightEye\"\n }, {\n \"x\": 341.41536712646484,\n \"y\": 253.01264762878418,\n \"z\": -29.038610458374023\n }, {\n \"x\": 303.5472869873047,\n \"y\": 327.5896739959717,\n \"z\": 16.725212335586548\n }, {\n \"x\": 304.7756576538086,\n \"y\": 337.4389457702637,\n \"z\": 27.38126277923584,\n \"name\": \"faceOval\"\n }, {\n \"x\": 280.80501556396484,\n \"y\": 275.32050132751465,\n \"z\": 45.0752067565918\n }, {\n \"x\": 295.43582916259766,\n \"y\": 318.4501647949219,\n \"z\": 26.2608003616333\n }, {\n \"x\": 281.4303207397461,\n \"y\": 228.7355661392212,\n \"z\": 40.94350814819336\n }, {\n \"x\": 331.2549591064453,\n \"y\": 349.4216537475586,\n \"z\": -7.376367449760437\n }, {\n \"x\": 352.4247741699219,\n \"y\": 271.7330074310303,\n \"z\": -24.953596591949463\n }, {\n \"x\": 327.5672912597656,\n \"y\": 260.41900634765625,\n \"z\": -5.456410646438599\n }, {\n \"x\": 284.5432472229004,\n \"y\": 241.7647933959961,\n \"z\": 29.668869972229004\n }, {\n \"x\": 310,\n \"y\": 235.66174507141113,\n \"z\": 8.502663969993591,\n \"name\": \"rightEye\"\n }, {\n \"x\": 315.7071113586426,\n \"y\": 235.7572603225708,\n \"z\": 6.938687562942505,\n \"name\": \"rightEye\"\n }, {\n \"x\": 330.41088104248047,\n \"y\": 311.04143142700195,\n \"z\": -9.325502514839172,\n \"name\": \"lips\"\n }, {\n \"x\": 288.5377502441406,\n \"y\": 285.31983375549316,\n \"z\": 21.837315559387207\n }, {\n \"x\": 344.55039978027344,\n \"y\": 359.4300842285156,\n \"z\": -6.705257892608643,\n \"name\": \"faceOval\"\n }, {\n \"x\": 323.41880798339844,\n \"y\": 351.67362213134766,\n \"z\": 7.802375555038452,\n \"name\": \"faceOval\"\n }, {\n \"x\": 314.64088439941406,\n \"y\": 346.11894607543945,\n \"z\": 16.36339783668518,\n \"name\": \"faceOval\"\n }, {\n \"x\": 349.4945526123047,\n \"y\": 184.8434829711914,\n \"z\": -0.21847527474164963\n }, {\n \"x\": 359.24694061279297,\n \"y\": 359.8348903656006,\n \"z\": -8.403456211090088,\n \"name\": \"faceOval\"\n }, {\n \"x\": 321.26182556152344,\n \"y\": 234.64492321014404,\n \"z\": 6.90950870513916,\n \"name\": \"rightEye\"\n }, {\n \"x\": 326.318359375,\n \"y\": 232.90250301361084,\n \"z\": 8.029969334602356,\n \"name\": \"rightEye\"\n }, {\n \"x\": 329.6211624145508,\n \"y\": 231.6195774078369,\n \"z\": 9.722331762313843,\n \"name\": \"rightEye\"\n }, {\n \"x\": 285.9398078918457,\n \"y\": 228.2351303100586,\n \"z\": 24.650139808654785\n }, {\n \"x\": 325.79288482666016,\n \"y\": 227.88007736206055,\n \"z\": 7.469738721847534,\n \"name\": \"rightEye\"\n }, {\n \"x\": 320.1699447631836,\n \"y\": 227.5934886932373,\n \"z\": 6.168370842933655,\n \"name\": \"rightEye\"\n }, {\n \"x\": 314.85408782958984,\n \"y\": 227.85282611846924,\n \"z\": 6.2675780057907104,\n \"name\": \"rightEye\"\n }, {\n \"x\": 309.3084907531738,\n \"y\": 229.1516876220703,\n \"z\": 7.7031683921813965,\n \"name\": \"rightEye\"\n }, {\n \"x\": 305.5621337890625,\n \"y\": 230.92366218566895,\n \"z\": 9.722331762313843,\n \"name\": \"rightEye\"\n }, {\n \"x\": 277.8681945800781,\n \"y\": 228.5354232788086,\n \"z\": 59.71122741699219,\n \"name\": \"faceOval\"\n }, {\n \"x\": 306.1444664001465,\n \"y\": 235.1954698562622,\n \"z\": 10.603528022766113,\n \"name\": \"rightEye\"\n }, {\n \"x\": 355.4478454589844,\n \"y\": 281.96210861206055,\n \"z\": -20.565123558044434\n }, {\n \"x\": 333.02661895751953,\n \"y\": 288.0105400085449,\n \"z\": -14.72939133644104\n }, {\n \"x\": 337.15728759765625,\n \"y\": 269.2059516906738,\n \"z\": -19.8414945602417\n }, {\n \"x\": 345.9898376464844,\n \"y\": 283.5453128814697,\n \"z\": -20.4834246635437\n }, {\n \"x\": 351.48963928222656,\n \"y\": 219.98916149139404,\n \"z\": -7.0378947257995605\n }, {\n \"x\": 312.39574432373047,\n \"y\": 336.50628089904785,\n \"z\": 8.671900033950806\n }, {\n \"x\": 321.32152557373047,\n \"y\": 343.1755256652832,\n \"z\": 0.9067271649837494\n }, {\n \"x\": 343.78379821777344,\n \"y\": 353.2975959777832,\n \"z\": -14.355905055999756\n }, {\n \"x\": 296.8791389465332,\n \"y\": 327.91497230529785,\n \"z\": 41.01353645324707,\n \"name\": \"faceOval\"\n }, {\n \"x\": 329.6939468383789,\n \"y\": 229.27897453308105,\n \"z\": 8.934508562088013,\n \"name\": \"rightEye\"\n }, {\n \"x\": 341.6905212402344,\n \"y\": 241.4073657989502,\n \"z\": -14.589333534240723\n }, {\n \"x\": 359.03079986572266,\n \"y\": 353.48859786987305,\n \"z\": -15.803166627883911\n }, {\n \"x\": 333.1861877441406,\n \"y\": 356.43213272094727,\n \"z\": -1.0234417766332626,\n \"name\": \"faceOval\"\n }, {\n \"x\": 283.97483825683594,\n \"y\": 291.4318656921387,\n \"z\": 41.94725513458252\n }, {\n \"x\": 343.33770751953125,\n \"y\": 305.830135345459,\n \"z\": -15.756480693817139,\n \"name\": \"lips\"\n }, {\n \"x\": 342.40283966064453,\n \"y\": 307.7453899383545,\n \"z\": -17.4021577835083\n }, {\n \"x\": 341.53621673583984,\n \"y\": 311.0595703125,\n \"z\": -19.047834873199463\n }, {\n \"x\": 340.9107208251953,\n \"y\": 315.4837703704834,\n \"z\": -18.5576331615448,\n \"name\": \"lips\"\n }, {\n \"x\": 339.1478729248047,\n \"y\": 323.42233657836914,\n \"z\": -14.367576837539673\n }, {\n \"x\": 333.3201599121094,\n \"y\": 307.4406337738037,\n \"z\": -9.617288708686829\n }, {\n \"x\": 331.2411117553711,\n \"y\": 306.9811820983887,\n \"z\": -9.669809937477112\n }, {\n \"x\": 329.23255920410156,\n \"y\": 306.0508346557617,\n \"z\": -9.582273960113525,\n \"name\": \"lips\"\n }, {\n \"x\": 322.4586486816406,\n \"y\": 301.33323669433594,\n \"z\": -7.720675468444824\n }, {\n \"x\": 297.1712112426758,\n \"y\": 286.9552803039551,\n \"z\": 8.240055441856384\n }, {\n \"x\": 341.3060760498047,\n \"y\": 235.4432201385498,\n \"z\": -7.504753470420837\n }, {\n \"x\": 336.9318389892578,\n \"y\": 224.3451976776123,\n \"z\": 5.829898118972778\n }, {\n \"x\": 332.65323638916016,\n \"y\": 226.70403957366943,\n \"z\": 8.105834126472473\n }, {\n \"x\": 334.67357635498047,\n \"y\": 306.4397621154785,\n \"z\": -8.981193900108337,\n \"name\": \"lips\"\n }, {\n \"x\": 297.4601936340332,\n \"y\": 306.29210472106934,\n \"z\": 15.476365089416504\n }, {\n \"x\": 342.9119110107422,\n \"y\": 222.37077713012695,\n \"z\": -2.754466235637665\n }, {\n \"x\": 335.4629898071289,\n \"y\": 332.20250129699707,\n \"z\": -11.823196411132812\n }, {\n \"x\": 353.2412338256836,\n \"y\": 240.56339263916016,\n \"z\": -27.147831916809082\n }, {\n \"x\": 346.3080596923828,\n \"y\": 236.41446590423584,\n \"z\": -18.452589511871338\n }, {\n \"x\": 352.6475143432617,\n \"y\": 234.1420555114746,\n \"z\": -19.748122692108154\n }, {\n \"x\": 337.3209762573242,\n \"y\": 253.39937210083008,\n \"z\": -16.024924516677856\n }, {\n \"x\": 358.6122131347656,\n \"y\": 344.90861892700195,\n \"z\": -18.592647314071655\n }, {\n \"x\": 358.1117248535156,\n \"y\": 334.64990615844727,\n \"z\": -17.49552845954895\n }, {\n \"x\": 346.4450454711914,\n \"y\": 335.0321102142334,\n \"z\": -16.32838249206543\n }, {\n \"x\": 319.17640686035156,\n \"y\": 320.2833938598633,\n \"z\": -3.276764452457428\n }, {\n \"x\": 325.2540588378906,\n \"y\": 276.2369728088379,\n \"z\": -6.460157036781311\n }, {\n \"x\": 326.7214584350586,\n \"y\": 327.3939514160156,\n \"z\": -7.417217493057251\n }, {\n \"x\": 310.7190132141113,\n \"y\": 277.2265148162842,\n \"z\": -3.5452082753181458\n }, {\n \"x\": 319.78355407714844,\n \"y\": 284.8238182067871,\n \"z\": -6.4543211460113525\n }, {\n \"x\": 305.773983001709,\n \"y\": 290.83580017089844,\n \"z\": 0.06907138042151928\n }, {\n \"x\": 344.4001770019531,\n \"y\": 344.85408782958984,\n \"z\": -16.946970224380493\n }, {\n \"x\": 333.1879425048828,\n \"y\": 258.74256134033203,\n \"z\": -11.90489649772644\n }, {\n \"x\": 313.80598068237305,\n \"y\": 327.08919525146484,\n \"z\": 2.2277912497520447\n }, {\n \"x\": 322.9637908935547,\n \"y\": 334.6819496154785,\n \"z\": -3.3643004298210144\n }, {\n \"x\": 313.4055519104004,\n \"y\": 311.2166690826416,\n \"z\": -1.1175429821014404\n }, {\n \"x\": 291.0865783691406,\n \"y\": 298.2831001281738,\n \"z\": 22.467575073242188\n }, {\n \"x\": 305.6580924987793,\n \"y\": 313.3707904815674,\n \"z\": 5.561453700065613\n }, {\n \"x\": 288.23760986328125,\n \"y\": 305.9941864013672,\n \"z\": 36.765122413635254\n }, {\n \"x\": 315.10692596435547,\n \"y\": 296.26991271972656,\n \"z\": -4.604393839836121\n }, {\n \"x\": 337.50518798828125,\n \"y\": 247.5944423675537,\n \"z\": -10.597691535949707\n }, {\n \"x\": 338.8450622558594,\n \"y\": 265.47778129577637,\n \"z\": -27.778091430664062\n }, {\n \"x\": 334.25254821777344,\n \"y\": 269.0671920776367,\n \"z\": -20.938611030578613\n }, {\n \"x\": 341.64512634277344,\n \"y\": 259.6387195587158,\n \"z\": -32.189905643463135\n }, {\n \"x\": 331.44081115722656,\n \"y\": 219.0976095199585,\n \"z\": 4.207563698291779\n }, {\n \"x\": 320.56339263916016,\n \"y\": 216.49658203125,\n \"z\": 2.930997312068939\n }, {\n \"x\": 311.21912002563477,\n \"y\": 216.57853603363037,\n \"z\": 2.9674705862998962\n }, {\n \"x\": 303.46256256103516,\n \"y\": 218.54614734649658,\n \"z\": 5.357203483581543\n }, {\n \"x\": 297.99999237060547,\n \"y\": 222.505202293396,\n \"z\": 9.325502514839172\n }, {\n \"x\": 294.93839263916016,\n \"y\": 236.39654159545898,\n \"z\": 18.534289598464966\n }, {\n \"x\": 278.87489318847656,\n \"y\": 259.7095584869385,\n \"z\": 45.68212032318115\n }, {\n \"x\": 300.3782653808594,\n \"y\": 245.38593292236328,\n \"z\": 12.278382778167725\n }, {\n \"x\": 307.06348419189453,\n \"y\": 246.36857986450195,\n \"z\": 8.164191246032715\n }, {\n \"x\": 315.5229187011719,\n \"y\": 245.3949737548828,\n \"z\": 5.503097176551819\n }, {\n \"x\": 323.71395111083984,\n \"y\": 242.75178909301758,\n \"z\": 4.6335723996162415\n }, {\n \"x\": 330.2785873413086,\n \"y\": 239.34658527374268,\n \"z\": 4.937030673027039\n }, {\n \"x\": 334.6982192993164,\n \"y\": 236.0460376739502,\n \"z\": 4.823233783245087\n }, {\n \"x\": 279.3412208557129,\n \"y\": 263.5196113586426,\n \"z\": 70.91583728790283,\n \"name\": \"faceOval\"\n }, {\n \"x\": 334.65972900390625,\n \"y\": 271.6648578643799,\n \"z\": -17.775644063949585\n }, {\n \"x\": 342.05677032470703,\n \"y\": 246.99846267700195,\n \"z\": -20.84523916244507\n }, {\n \"x\": 344.0357971191406,\n \"y\": 264.5701503753662,\n \"z\": -32.936880588531494\n }, {\n \"x\": 348.25531005859375,\n \"y\": 268.6645030975342,\n \"z\": -30.695960521697998\n }, {\n \"x\": 344.12227630615234,\n \"y\": 266.34212493896484,\n \"z\": -29.808926582336426\n }, {\n \"x\": 337.12318420410156,\n \"y\": 274.2556858062744,\n \"z\": -15.768152475357056\n }, {\n \"x\": 349.49047088623047,\n \"y\": 269.071683883667,\n \"z\": -32.51670837402344\n }, {\n \"x\": 350.1683044433594,\n \"y\": 271.4691352844238,\n \"z\": -24.93025302886963\n }, {\n \"x\": 333.9634704589844,\n \"y\": 230.56639194488525,\n \"z\": 8.89949381351471\n }, {\n \"x\": 338.2147979736328,\n \"y\": 231.4807891845703,\n \"z\": 4.6715047955513\n }, {\n \"x\": 340.4712677001953,\n \"y\": 231.74463272094727,\n \"z\": -0.34996166825294495\n }, {\n \"x\": 303.28975677490234,\n \"y\": 232.24980354309082,\n \"z\": 11.916568279266357,\n \"name\": \"rightEye\"\n }, {\n \"x\": 299.4649124145508,\n \"y\": 229.53842639923096,\n \"z\": 12.325069904327393\n }, {\n \"x\": 359.09618377685547,\n \"y\": 241.77349090576172,\n \"z\": -24.650139808654785\n }, {\n \"x\": 399.46216583251953,\n \"y\": 229.89503860473633,\n \"z\": 15.919880867004395,\n \"name\": \"leftEye\"\n }, {\n \"x\": 361.38919830322266,\n \"y\": 269.6129894256592,\n \"z\": -24.510080814361572\n }, {\n \"x\": 416.9973373413086,\n \"y\": 206.0895538330078,\n \"z\": 53.26857566833496,\n \"name\": \"faceOval\"\n }, {\n \"x\": 381.32179260253906,\n \"y\": 235.5476474761963,\n \"z\": 7.6214683055877686\n }, {\n \"x\": 387.8068542480469,\n \"y\": 236.25958442687988,\n \"z\": 8.345099091529846\n }, {\n \"x\": 393.95751953125,\n \"y\": 235.8660364151001,\n \"z\": 10.475142002105713\n }, {\n \"x\": 401.84600830078125,\n \"y\": 232.77019500732422,\n \"z\": 16.760226488113403\n }, {\n \"x\": 375.70568084716797,\n \"y\": 233.48456382751465,\n \"z\": 8.234220147132874\n }, {\n \"x\": 388.17752838134766,\n \"y\": 218.94717693328857,\n \"z\": 6.810300946235657\n }, {\n \"x\": 381.64928436279297,\n \"y\": 219.2656660079956,\n \"z\": 6.711093783378601\n }, {\n \"x\": 394.4760513305664,\n \"y\": 219.66821193695068,\n \"z\": 9.173773527145386\n }, {\n \"x\": 398.8843536376953,\n \"y\": 221.8837022781372,\n \"z\": 12.03328251838684\n }, {\n \"x\": 406.5454864501953,\n \"y\": 237.12156772613525,\n \"z\": 19.7131085395813\n }, {\n \"x\": 383.87447357177734,\n \"y\": 337.6932907104492,\n \"z\": -8.631049990653992\n }, {\n \"x\": 401.2682342529297,\n \"y\": 228.5916566848755,\n \"z\": 18.359217643737793,\n \"name\": \"leftEye\"\n }, {\n \"x\": 422.0449447631836,\n \"y\": 236.73934936523438,\n \"z\": 51.16771221160889\n }, {\n \"x\": 412.69153594970703,\n \"y\": 232.80198097229004,\n \"z\": 27.52131938934326\n }, {\n \"x\": 387.3497772216797,\n \"y\": 263.298397064209,\n \"z\": -2.8609684109687805\n }, {\n \"x\": 364.5124053955078,\n \"y\": 293.39221000671387,\n \"z\": -22.397546768188477,\n \"name\": \"lips\"\n }, {\n \"x\": 363.62987518310547,\n \"y\": 302.1291446685791,\n \"z\": -19.643079042434692\n }, {\n \"x\": 373.2334518432617,\n \"y\": 295.8647060394287,\n \"z\": -18.125789165496826,\n \"name\": \"lips\"\n }, {\n \"x\": 378.83365631103516,\n \"y\": 299.5177745819092,\n \"z\": -13.153743743896484,\n \"name\": \"lips\"\n }, {\n \"x\": 369.91477966308594,\n \"y\": 302.5704002380371,\n \"z\": -16.65518283843994\n }, {\n \"x\": 374.9167251586914,\n \"y\": 303.5416603088379,\n \"z\": -11.963253021240234\n }, {\n \"x\": 387.58888244628906,\n \"y\": 312.2716999053955,\n \"z\": -4.680258631706238\n }, {\n \"x\": 360.6635284423828,\n \"y\": 264.31986808776855,\n \"z\": -35.94811677932739\n }, {\n \"x\": 361.04564666748047,\n \"y\": 256.8225860595703,\n \"z\": -37.278664112091064\n }, {\n \"x\": 408.3855438232422,\n \"y\": 213.52088928222656,\n \"z\": 15.756480693817139,\n \"name\": \"leftEyebrow\"\n }, {\n \"x\": 373.2946014404297,\n \"y\": 245.38101196289062,\n \"z\": -1.9316278398036957\n }, {\n \"x\": 376.83860778808594,\n \"y\": 264.3721103668213,\n \"z\": -18.510947227478027\n }, {\n \"x\": 376.9546127319336,\n \"y\": 261.0010528564453,\n \"z\": -15.989909172058105\n }, {\n \"x\": 406.1498260498047,\n \"y\": 263.5030174255371,\n \"z\": 7.072908878326416\n }, {\n \"x\": 360.07205963134766,\n \"y\": 248.3631706237793,\n \"z\": -32.16656446456909\n }, {\n \"x\": 393.11119079589844,\n \"y\": 205.10473251342773,\n \"z\": 3.7786373496055603,\n \"name\": \"leftEyebrow\"\n }, {\n \"x\": 402.12791442871094,\n \"y\": 207.89000988006592,\n \"z\": 9.383859634399414,\n \"name\": \"leftEyebrow\"\n }, {\n \"x\": 410.8693313598633,\n \"y\": 191.6182279586792,\n \"z\": 41.27030849456787,\n \"name\": \"faceOval\"\n }, {\n \"x\": 364.9509811401367,\n \"y\": 210.40483474731445,\n \"z\": -3.758212625980377\n }, {\n \"x\": 375.94444274902344,\n \"y\": 221.1331844329834,\n \"z\": 8.368442058563232\n }, {\n \"x\": 392.1904754638672,\n \"y\": 305.0360298156738,\n \"z\": -1.752179116010666\n }, {\n \"x\": 419.50225830078125,\n \"y\": 307.25592613220215,\n \"z\": 58.96425247192383,\n \"name\": \"faceOval\"\n }, {\n \"x\": 372.0027160644531,\n \"y\": 268.7212657928467,\n \"z\": -16.631840467453003\n }, {\n \"x\": 366.1614227294922,\n \"y\": 271.6237449645996,\n \"z\": -18.219159841537476\n }, {\n \"x\": 385.00938415527344,\n \"y\": 305.3863334655762,\n \"z\": -2.567722797393799\n }, {\n \"x\": 381.99771881103516,\n \"y\": 304.9723720550537,\n \"z\": -4.575215280056\n }, {\n \"x\": 405.078125,\n \"y\": 203.21216583251953,\n \"z\": 13.713973760604858,\n \"name\": \"leftEyebrow\"\n }, {\n \"x\": 377.13207244873047,\n \"y\": 268.4710121154785,\n \"z\": -15.266278982162476\n }, {\n \"x\": 380.9713363647461,\n \"y\": 205.36980628967285,\n \"z\": -0.7250899076461792,\n \"name\": \"leftEyebrow\"\n }, {\n \"x\": 381.7788314819336,\n \"y\": 198.9268398284912,\n \"z\": -1.184653863310814,\n \"name\": \"leftEyebrow\"\n }, {\n \"x\": 385.5204772949219,\n \"y\": 172.1484375,\n \"z\": 16.04826807975769,\n \"name\": \"faceOval\"\n }, {\n \"x\": 407.94189453125,\n \"y\": 196.76236152648926,\n \"z\": 25.723915100097656\n }, {\n \"x\": 383.03890228271484,\n \"y\": 184.5157527923584,\n \"z\": 7.393874526023865\n }, {\n \"x\": 411.61781311035156,\n \"y\": 210.79241752624512,\n \"z\": 22.315845489501953,\n \"name\": \"leftEyebrow\"\n }, {\n \"x\": 414.30870056152344,\n \"y\": 208.4643030166626,\n \"z\": 37.021894454956055\n }, {\n \"x\": 364.28722381591797,\n \"y\": 298.35777282714844,\n \"z\": -21.86065673828125\n }, {\n \"x\": 371.3682556152344,\n \"y\": 299.78848457336426,\n \"z\": -17.834001779556274\n }, {\n \"x\": 376.88201904296875,\n \"y\": 301.6696071624756,\n \"z\": -13.153743743896484\n }, {\n \"x\": 370.2193832397461,\n \"y\": 270.49095153808594,\n \"z\": -15.569736957550049\n }, {\n \"x\": 383.5081100463867,\n \"y\": 305.2726364135742,\n \"z\": -3.673594295978546\n }, {\n \"x\": 380.73760986328125,\n \"y\": 305.96869468688965,\n \"z\": -8.660228252410889\n }, {\n \"x\": 381.2334442138672,\n \"y\": 304.63574409484863,\n \"z\": -4.820316135883331,\n \"name\": \"lips\"\n }, {\n \"x\": 368.1698989868164,\n \"y\": 264.8884963989258,\n \"z\": -25.653886795043945\n }, {\n \"x\": 373.5087203979492,\n \"y\": 303.4233856201172,\n \"z\": -10.95950722694397,\n \"name\": \"lips\"\n }, {\n \"x\": 368.4544372558594,\n \"y\": 303.29601287841797,\n \"z\": -14.169161319732666,\n \"name\": \"lips\"\n }, {\n \"x\": 362.76554107666016,\n \"y\": 303.5735607147217,\n \"z\": -16.911956071853638,\n \"name\": \"lips\"\n }, {\n \"x\": 366.60980224609375,\n \"y\": 324.8870658874512,\n \"z\": -15.616422891616821\n }, {\n \"x\": 365.7067108154297,\n \"y\": 315.95678329467773,\n \"z\": -20.903596878051758,\n \"name\": \"lips\"\n }, {\n \"x\": 365.0083923339844,\n \"y\": 311.2232208251953,\n \"z\": -21.066999435424805\n }, {\n \"x\": 364.1508102416992,\n \"y\": 307.0583438873291,\n \"z\": -18.907777070999146\n }, {\n \"x\": 363.37512969970703,\n \"y\": 304.5721435546875,\n \"z\": -17.42550015449524,\n \"name\": \"lips\"\n }, {\n \"x\": 374.580078125,\n \"y\": 304.3059539794922,\n \"z\": -11.40302300453186,\n \"name\": \"lips\"\n }, {\n \"x\": 375.55362701416016,\n \"y\": 305.0998020172119,\n \"z\": -12.861957550048828\n }, {\n \"x\": 377.2437286376953,\n \"y\": 307.1674346923828,\n \"z\": -14.215847253799438\n }, {\n \"x\": 378.68587493896484,\n \"y\": 309.9015712738037,\n \"z\": -13.223772048950195,\n \"name\": \"lips\"\n }, {\n \"x\": 383.8992691040039,\n \"y\": 290.29629707336426,\n \"z\": -9.97326910495758\n }, {\n \"x\": 423.3871841430664,\n \"y\": 271.91688537597656,\n \"z\": 74.37058925628662,\n \"name\": \"faceOval\"\n }, {\n \"x\": 377.68043518066406,\n \"y\": 304.62209701538086,\n \"z\": -7.603961229324341,\n \"name\": \"lips\"\n }, {\n \"x\": 379.00428771972656,\n \"y\": 304.9314594268799,\n \"z\": -8.57852816581726\n }, {\n \"x\": 364.00279998779297,\n \"y\": 275.2813911437988,\n \"z\": -19.25792098045349\n }, {\n \"x\": 374.68231201171875,\n \"y\": 273.82555961608887,\n \"z\": -11.28047227859497\n }, {\n \"x\": 365.0354766845703,\n \"y\": 273.4548568725586,\n \"z\": -18.791062831878662\n }, {\n \"x\": 380.61901092529297,\n \"y\": 249.8848056793213,\n \"z\": 0.15501167625188828\n }, {\n \"x\": 391.14158630371094,\n \"y\": 254.7934627532959,\n \"z\": 2.0906515419483185\n }, {\n \"x\": 378.1761169433594,\n \"y\": 264.9612236022949,\n \"z\": -12.605184316635132\n }, {\n \"x\": 400.9540557861328,\n \"y\": 179.99592304229736,\n \"z\": 27.82477855682373,\n \"name\": \"faceOval\"\n }, {\n \"x\": 398.0038833618164,\n \"y\": 188.50656509399414,\n \"z\": 16.094952821731567\n }, {\n \"x\": 394.8717498779297,\n \"y\": 199.0359592437744,\n \"z\": 6.226727366447449,\n \"name\": \"leftEyebrow\"\n }, {\n \"x\": 382.10926055908203,\n \"y\": 316.83926582336426,\n \"z\": -8.946179747581482\n }, {\n \"x\": 366.51588439941406,\n \"y\": 200.32583713531494,\n \"z\": -5.24632453918457,\n \"name\": \"leftEyebrow\"\n }, {\n \"x\": 367.4893569946289,\n \"y\": 183.87210845947266,\n \"z\": 1.9039081037044525\n }, {\n \"x\": 368.6243438720703,\n \"y\": 168.8127565383911,\n \"z\": 8.736093044281006,\n \"name\": \"faceOval\"\n }, {\n \"x\": 398.96175384521484,\n \"y\": 234.9675178527832,\n \"z\": 13.713973760604858\n }, {\n \"x\": 412.9645538330078,\n \"y\": 242.23042488098145,\n \"z\": 23.272905349731445\n }, {\n \"x\": 372.05257415771484,\n \"y\": 231.41919136047363,\n \"z\": 9.226294755935669\n }, {\n \"x\": 406.0722351074219,\n \"y\": 223.58965873718262,\n \"z\": 18.370890617370605\n }, {\n \"x\": 368.27442169189453,\n \"y\": 240.2039337158203,\n \"z\": -4.166713654994965\n }, {\n \"x\": 372.3575210571289,\n \"y\": 260.66442489624023,\n \"z\": -24.976940155029297\n }, {\n \"x\": 419.2244338989258,\n \"y\": 247.9079246520996,\n \"z\": 30.299127101898193\n }, {\n \"x\": 409.43885803222656,\n \"y\": 246.60913467407227,\n \"z\": 16.398411989212036\n }, {\n \"x\": 401.69139862060547,\n \"y\": 248.76328468322754,\n \"z\": 9.395531415939331\n }, {\n \"x\": 389.7608184814453,\n \"y\": 247.56915092468262,\n \"z\": 5.841569304466248\n }, {\n \"x\": 380.5461883544922,\n \"y\": 244.55984115600586,\n \"z\": 4.263003468513489\n }, {\n \"x\": 373.25817108154297,\n \"y\": 240.80214500427246,\n \"z\": 2.5356262922286987\n }, {\n \"x\": 358.77086639404297,\n \"y\": 229.35615062713623,\n \"z\": -10.387605428695679\n }, {\n \"x\": 419.5793914794922,\n \"y\": 262.8478717803955,\n \"z\": 26.5175724029541\n }, {\n \"x\": 410.8808898925781,\n \"y\": 222.51372814178467,\n \"z\": 22.199130058288574\n }, {\n \"x\": 358.45714569091797,\n \"y\": 268.91467094421387,\n \"z\": -33.17030906677246\n }, {\n \"x\": 373.4129333496094,\n \"y\": 251.6385841369629,\n \"z\": -5.771540403366089\n }, {\n \"x\": 422.5408172607422,\n \"y\": 239.23919677734375,\n \"z\": 74.04378890991211,\n \"name\": \"faceOval\"\n }, {\n \"x\": 367.8171920776367,\n \"y\": 236.58040523529053,\n \"z\": 1.820748895406723\n }, {\n \"x\": 378.51959228515625,\n \"y\": 266.2532329559326,\n \"z\": -5.74819803237915\n }, {\n \"x\": 403.3472442626953,\n \"y\": 229.05112266540527,\n \"z\": 19.689764976501465\n }, {\n \"x\": 372.34840393066406,\n \"y\": 256.6451168060303,\n \"z\": -21.872329711914062\n }, {\n \"x\": 422.54566192626953,\n \"y\": 289.1587829589844,\n \"z\": 68.67491245269775,\n \"name\": \"faceOval\"\n }, {\n \"x\": 371.9297409057617,\n \"y\": 228.90116214752197,\n \"z\": 11.432201862335205,\n \"name\": \"leftEye\"\n }, {\n \"x\": 366.21360778808594,\n \"y\": 251.6158962249756,\n \"z\": -28.19826364517212\n }, {\n \"x\": 409.1571807861328,\n \"y\": 321.3156223297119,\n \"z\": 20.2266526222229\n }, {\n \"x\": 408.52943420410156,\n \"y\": 331.44238471984863,\n \"z\": 31.09278917312622,\n \"name\": \"faceOval\"\n }, {\n \"x\": 424.2788314819336,\n \"y\": 267.1992301940918,\n \"z\": 50.467424392700195\n }, {\n \"x\": 415.60352325439453,\n \"y\": 311.6528606414795,\n \"z\": 30.579242706298828\n }, {\n \"x\": 418.12793731689453,\n \"y\": 221.59927368164062,\n \"z\": 46.26569747924805\n }, {\n \"x\": 385.68286895751953,\n \"y\": 346.0184955596924,\n \"z\": -5.70151150226593\n }, {\n \"x\": 357.82936096191406,\n \"y\": 271.3758373260498,\n \"z\": -24.836881160736084\n }, {\n \"x\": 379.588623046875,\n \"y\": 257.5071716308594,\n \"z\": -3.755294680595398\n }, {\n \"x\": 417.4592590332031,\n \"y\": 234.71948146820068,\n \"z\": 34.5475435256958\n }, {\n \"x\": 393.4684371948242,\n \"y\": 231.58967971801758,\n \"z\": 11.408859491348267,\n \"name\": \"leftEye\"\n }, {\n \"x\": 387.8864288330078,\n \"y\": 232.14245796203613,\n \"z\": 9.51808214187622,\n \"name\": \"leftEye\"\n }, {\n \"x\": 382.4981689453125,\n \"y\": 307.5654888153076,\n \"z\": -7.522260546684265,\n \"name\": \"lips\"\n }, {\n \"x\": 419.00169372558594,\n \"y\": 277.8332805633545,\n \"z\": 26.424202919006348\n }, {\n \"x\": 373.62953186035156,\n \"y\": 357.6375102996826,\n \"z\": -5.75986921787262,\n \"name\": \"faceOval\"\n }, {\n \"x\": 392.8708267211914,\n \"y\": 347.72446632385254,\n \"z\": 10.154176950454712,\n \"name\": \"faceOval\"\n }, {\n \"x\": 400.3953552246094,\n \"y\": 341.0005187988281,\n \"z\": 19.39797878265381,\n \"name\": \"faceOval\"\n }, {\n \"x\": 382.25440979003906,\n \"y\": 231.66935920715332,\n \"z\": 8.998700976371765,\n \"name\": \"leftEye\"\n }, {\n \"x\": 377.14550018310547,\n \"y\": 230.4228687286377,\n \"z\": 9.804032444953918,\n \"name\": \"leftEye\"\n }, {\n \"x\": 373.8358688354492,\n \"y\": 229.64950561523438,\n \"z\": 11.292144060134888,\n \"name\": \"leftEye\"\n }, {\n \"x\": 414.5794677734375,\n \"y\": 221.67891025543213,\n \"z\": 29.412097930908203\n }, {\n \"x\": 377.00672149658203,\n \"y\": 225.66201210021973,\n \"z\": 9.360517263412476,\n \"name\": \"leftEye\"\n }, {\n \"x\": 382.29530334472656,\n \"y\": 224.8431158065796,\n \"z\": 8.32175612449646,\n \"name\": \"leftEye\"\n }, {\n \"x\": 387.5133514404297,\n \"y\": 224.49507236480713,\n \"z\": 8.917000889778137,\n \"name\": \"leftEye\"\n }, {\n \"x\": 393.15906524658203,\n \"y\": 225.24795055389404,\n \"z\": 10.737749338150024,\n \"name\": \"leftEye\"\n }, {\n \"x\": 397.05554962158203,\n \"y\": 226.55359268188477,\n \"z\": 13.002015352249146,\n \"name\": \"leftEye\"\n }, {\n \"x\": 420.5299377441406,\n \"y\": 221.014666557312,\n \"z\": 65.40690422058105,\n \"name\": \"faceOval\"\n }, {\n \"x\": 397.06920623779297,\n \"y\": 230.6661558151245,\n \"z\": 13.807345628738403,\n \"name\": \"leftEye\"\n }, {\n \"x\": 377.94647216796875,\n \"y\": 285.1647090911865,\n \"z\": -13.305472135543823\n }, {\n \"x\": 372.1118927001953,\n \"y\": 267.1267318725586,\n \"z\": -18.83774757385254\n }, {\n \"x\": 364.9968719482422,\n \"y\": 282.24411964416504,\n \"z\": -19.818150997161865\n }, {\n \"x\": 401.973876953125,\n \"y\": 331.20131492614746,\n \"z\": 11.566424369812012\n }, {\n \"x\": 394.3083190917969,\n \"y\": 338.86693954467773,\n \"z\": 3.142542541027069\n }, {\n \"x\": 373.9820861816406,\n \"y\": 351.4504623413086,\n \"z\": -13.50388765335083\n }, {\n \"x\": 414.3888854980469,\n \"y\": 321.24735832214355,\n \"z\": 45.51872253417969,\n \"name\": \"faceOval\"\n }, {\n \"x\": 373.44234466552734,\n \"y\": 227.33163356781006,\n \"z\": 10.626870393753052,\n \"name\": \"leftEye\"\n }, {\n \"x\": 364.0731430053711,\n \"y\": 240.31539916992188,\n \"z\": -13.807345628738403\n }, {\n \"x\": 384.2658233642578,\n \"y\": 353.3793067932129,\n \"z\": 0.7385850697755814,\n \"name\": \"faceOval\"\n }, {\n \"x\": 423.20526123046875,\n \"y\": 283.5176181793213,\n \"z\": 47.152724266052246\n }, {\n \"x\": 369.42798614501953,\n \"y\": 304.0898895263672,\n \"z\": -14.647691249847412,\n \"name\": \"lips\"\n }, {\n \"x\": 370.63812255859375,\n \"y\": 305.90051651000977,\n \"z\": -16.211668252944946\n }, {\n \"x\": 371.91192626953125,\n \"y\": 309.0167713165283,\n \"z\": -17.84567356109619\n }, {\n \"x\": 373.0583953857422,\n \"y\": 313.3545398712158,\n \"z\": -17.378815412521362,\n \"name\": \"lips\"\n }, {\n \"x\": 375.39905548095703,\n \"y\": 321.09289169311523,\n \"z\": -13.118728399276733\n }, {\n \"x\": 379.2567825317383,\n \"y\": 304.3582534790039,\n \"z\": -7.924926280975342\n }, {\n \"x\": 381.18797302246094,\n \"y\": 303.7031364440918,\n \"z\": -7.843226194381714\n }, {\n \"x\": 383.0918502807617,\n \"y\": 302.4884605407715,\n \"z\": -7.6506465673446655,\n \"name\": \"lips\"\n }, {\n \"x\": 389.09461975097656,\n \"y\": 297.1475315093994,\n \"z\": -5.5497825145721436\n }, {\n \"x\": 411.6408920288086,\n \"y\": 280.24898529052734,\n \"z\": 12.02161192893982\n }, {\n \"x\": 363.3110809326172,\n \"y\": 234.27620887756348,\n \"z\": -6.775286793708801\n }, {\n \"x\": 366.0474395751953,\n \"y\": 223.29872131347656,\n \"z\": 6.827808618545532\n }, {\n \"x\": 370.34427642822266,\n \"y\": 225.1457118988037,\n \"z\": 9.558931589126587\n }, {\n \"x\": 377.5371551513672,\n \"y\": 303.60079765319824,\n \"z\": -7.358860373497009,\n \"name\": \"lips\"\n }, {\n \"x\": 412.9557800292969,\n \"y\": 299.53579902648926,\n \"z\": 19.39797878265381\n }, {\n \"x\": 360.0810241699219,\n \"y\": 221.72012329101562,\n \"z\": -2.153385728597641\n }, {\n \"x\": 379.82784271240234,\n \"y\": 329.47723388671875,\n \"z\": -10.48097848892212\n }, {\n \"x\": 359.08477783203125,\n \"y\": 235.7911491394043,\n \"z\": -18.079102039337158\n }, {\n \"x\": 369.6688461303711,\n \"y\": 251.5407943725586,\n \"z\": -14.962821006774902\n }, {\n \"x\": 369.5555114746094,\n \"y\": 333.5307312011719,\n \"z\": -15.67478060722351\n }, {\n \"x\": 394.0193176269531,\n \"y\": 315.6973171234131,\n \"z\": -0.9920747578144073\n }, {\n \"x\": 383.78997802734375,\n \"y\": 272.7268695831299,\n \"z\": -4.689012169837952\n }, {\n \"x\": 387.67765045166016,\n \"y\": 323.6722755432129,\n \"z\": -5.640236139297485\n }, {\n \"x\": 397.8769302368164,\n \"y\": 272.1331214904785,\n \"z\": -0.9395531564950943\n }, {\n \"x\": 389.87476348876953,\n \"y\": 280.5630111694336,\n \"z\": -4.29218202829361\n }, {\n \"x\": 403.83888244628906,\n \"y\": 285.1167869567871,\n \"z\": 3.0229100584983826\n }, {\n \"x\": 372.5467300415039,\n \"y\": 343.1070327758789,\n \"z\": -16.153310537338257\n }, {\n \"x\": 374.1112518310547,\n \"y\": 256.3721466064453,\n \"z\": -10.574349164962769\n }, {\n \"x\": 399.73785400390625,\n \"y\": 321.77515983581543,\n \"z\": 4.849494695663452\n }, {\n \"x\": 392.03365325927734,\n \"y\": 330.56447982788086,\n \"z\": -1.3407598435878754\n }, {\n \"x\": 398.59134674072266,\n \"y\": 305.93902587890625,\n \"z\": 1.517290621995926\n }, {\n \"x\": 417.95997619628906,\n \"y\": 290.9716987609863,\n \"z\": 26.89105987548828\n }, {\n \"x\": 406.04541778564453,\n \"y\": 307.35154151916504,\n \"z\": 8.666064143180847\n }, {\n \"x\": 420.75328826904297,\n \"y\": 298.40752601623535,\n \"z\": 41.78385257720947\n }, {\n \"x\": 395.4522705078125,\n \"y\": 291.4153575897217,\n \"z\": -2.1752697229385376\n }, {\n \"x\": 368.6452102661133,\n \"y\": 245.8882999420166,\n \"z\": -9.453888535499573\n }, {\n \"x\": 370.34900665283203,\n \"y\": 263.56690406799316,\n \"z\": -26.75100326538086\n }, {\n \"x\": 374.98477935791016,\n \"y\": 266.6126346588135,\n \"z\": -19.77146625518799\n }, {\n \"x\": 366.99840545654297,\n \"y\": 258.12140464782715,\n \"z\": -31.372904777526855\n }, {\n \"x\": 371.00616455078125,\n \"y\": 217.63479709625244,\n \"z\": 5.60522198677063\n }, {\n \"x\": 381.30577087402344,\n \"y\": 214.14087295532227,\n \"z\": 4.983716309070587\n }, {\n \"x\": 390.1496124267578,\n \"y\": 213.38221549987793,\n \"z\": 5.593550801277161\n }, {\n \"x\": 397.7696990966797,\n \"y\": 214.3659782409668,\n \"z\": 8.57852816581726\n }, {\n \"x\": 403.1652069091797,\n \"y\": 217.65509605407715,\n \"z\": 13.013685941696167\n }, {\n \"x\": 407.3551940917969,\n \"y\": 230.72525024414062,\n \"z\": 22.444231510162354\n }, {\n \"x\": 424.0876770019531,\n \"y\": 251.7839241027832,\n \"z\": 51.16771221160889\n }, {\n \"x\": 403.50196838378906,\n \"y\": 239.88757610321045,\n \"z\": 15.803166627883911\n }, {\n \"x\": 397.31719970703125,\n \"y\": 241.49806022644043,\n \"z\": 11.233787536621094\n }, {\n \"x\": 388.99425506591797,\n \"y\": 241.4366912841797,\n \"z\": 7.948269248008728\n }, {\n \"x\": 380.7804489135742,\n \"y\": 239.78078842163086,\n \"z\": 6.600214838981628\n }, {\n \"x\": 374.01336669921875,\n \"y\": 237.11946487426758,\n \"z\": 6.349278092384338\n }, {\n \"x\": 369.39125061035156,\n \"y\": 234.35351371765137,\n \"z\": 5.987462401390076\n }, {\n \"x\": 422.9730987548828,\n \"y\": 255.76455116271973,\n \"z\": 76.61150932312012,\n \"name\": \"faceOval\"\n }, {\n \"x\": 374.73915100097656,\n \"y\": 269.24214363098145,\n \"z\": -16.608498096466064\n }, {\n \"x\": 364.61681365966797,\n \"y\": 245.71088790893555,\n \"z\": -20.02823829650879\n }, {\n \"x\": 365.3834533691406,\n \"y\": 263.34174156188965,\n \"z\": -32.32996463775635\n }, {\n \"x\": 361.58252716064453,\n \"y\": 267.8273677825928,\n \"z\": -30.345816612243652\n }, {\n \"x\": 365.37208557128906,\n \"y\": 265.0249671936035,\n \"z\": -29.178667068481445\n }, {\n \"x\": 372.72605895996094,\n \"y\": 272.05135345458984,\n \"z\": -14.834434986114502\n }, {\n \"x\": 360.48614501953125,\n \"y\": 268.34827423095703,\n \"z\": -32.189905643463135\n }, {\n \"x\": 359.9516296386719,\n \"y\": 270.8049201965332,\n \"z\": -24.650139808654785\n }, {\n \"x\": 369.5049285888672,\n \"y\": 229.01945114135742,\n \"z\": 10.107489824295044\n }, {\n \"x\": 365.5447769165039,\n \"y\": 230.24096488952637,\n \"z\": 5.593550801277161\n }, {\n \"x\": 363.50669860839844,\n \"y\": 230.6208372116089,\n \"z\": 0.43622106313705444\n }, {\n \"x\": 399.3529510498047,\n \"y\": 227.65677452087402,\n \"z\": 15.35965085029602,\n \"name\": \"leftEye\"\n }, {\n \"x\": 402.5693130493164,\n \"y\": 224.60190296173096,\n \"z\": 15.931552648544312\n }],\n \"box\": {\n \"xMin\": 277.8318977355957,\n \"yMin\": 168.7741756439209,\n \"xMax\": 424.2788314819336,\n \"yMax\": 359.8348903656006,\n \"width\": 146.4469337463379,\n \"height\": 191.0607147216797\n }\n },\n // Tasks-vision: https://developers.google.com/mediapipe/solutions/vision/face_landmarker/web_js\n // prettier-ignore\n SAMPLE_FACELANDMARKER_RESULT: {\n \"faceLandmarks\": [[{\n \"x\": 0.5760777592658997,\n \"y\": 0.8639070391654968,\n \"z\": -0.030997956171631813\n }, {\n \"x\": 0.572094738483429,\n \"y\": 0.7886289358139038,\n \"z\": -0.07189624011516571\n }, {\n \"x\": 0.5723551511764526,\n \"y\": 0.8075382709503174,\n \"z\": -0.03578168898820877\n }, {\n \"x\": 0.5548420548439026,\n \"y\": 0.7188365459442139,\n \"z\": -0.057787876576185226\n }, {\n \"x\": 0.5706077814102173,\n \"y\": 0.7674974799156189,\n \"z\": -0.07740399986505508\n }, {\n \"x\": 0.5681378245353699,\n \"y\": 0.7387768030166626,\n \"z\": -0.07356284558773041\n }, {\n \"x\": 0.5621535181999207,\n \"y\": 0.6681165099143982,\n \"z\": -0.04189874976873398\n }, {\n \"x\": 0.46613582968711853,\n \"y\": 0.6679812073707581,\n \"z\": 0.011289681307971478\n }, {\n \"x\": 0.5579932928085327,\n \"y\": 0.6174106597900391,\n \"z\": -0.03502821549773216\n }, {\n \"x\": 0.5563451647758484,\n \"y\": 0.5905600190162659,\n \"z\": -0.03928658738732338\n }, {\n \"x\": 0.5487832427024841,\n \"y\": 0.4900572597980499,\n \"z\": -0.029898937791585922\n }, {\n \"x\": 0.5765544176101685,\n \"y\": 0.8692144751548767,\n \"z\": -0.02831427752971649\n }, {\n \"x\": 0.5771114230155945,\n \"y\": 0.873644232749939,\n \"z\": -0.02345779910683632\n }, {\n \"x\": 0.5771905779838562,\n \"y\": 0.877016007900238,\n \"z\": -0.016658689826726913\n }, {\n \"x\": 0.5778058767318726,\n \"y\": 0.8770116567611694,\n \"z\": -0.014505492523312569\n }, {\n \"x\": 0.5783766508102417,\n \"y\": 0.8835000991821289,\n \"z\": -0.015996402129530907\n }, {\n \"x\": 0.5792440176010132,\n \"y\": 0.8913810849189758,\n \"z\": -0.01924579218029976\n }, {\n \"x\": 0.5796768069267273,\n \"y\": 0.8996334671974182,\n \"z\": -0.018261712044477463\n }, {\n \"x\": 0.5817288160324097,\n \"y\": 0.9255813956260681,\n \"z\": -0.007126849144697189\n }, {\n \"x\": 0.5726592540740967,\n \"y\": 0.7992473244667053,\n \"z\": -0.0643521398305893\n }, {\n \"x\": 0.5579419136047363,\n \"y\": 0.7996989488601685,\n \"z\": -0.04566684365272522\n }, {\n \"x\": 0.4216199815273285,\n \"y\": 0.5958762764930725,\n \"z\": 0.06776496022939682\n }, {\n \"x\": 0.5052269697189331,\n \"y\": 0.6796539425849915,\n \"z\": -0.0010737782577052712\n }, {\n \"x\": 0.49243026971817017,\n \"y\": 0.6838865876197815,\n \"z\": -0.0005227324436418712\n }, {\n \"x\": 0.4796970784664154,\n \"y\": 0.6856290102005005,\n \"z\": 0.002684245817363262\n }, {\n \"x\": 0.4618356227874756,\n \"y\": 0.6764569878578186,\n \"z\": 0.013439622707664967\n }, {\n \"x\": 0.5160380601882935,\n \"y\": 0.6737282276153564,\n \"z\": -0.000017607348127057776\n }, {\n \"x\": 0.48070961236953735,\n \"y\": 0.6255870461463928,\n \"z\": -0.008339674212038517\n }, {\n \"x\": 0.49719780683517456,\n \"y\": 0.6256808042526245,\n \"z\": -0.008027955889701843\n }, {\n \"x\": 0.46674346923828125,\n \"y\": 0.6317623853683472,\n \"z\": -0.004460199736058712\n }, {\n \"x\": 0.4582492709159851,\n \"y\": 0.641118049621582,\n \"z\": 0.0011905613355338573\n }, {\n \"x\": 0.45408669114112854,\n \"y\": 0.6911458969116211,\n \"z\": 0.020514748990535736\n }, {\n \"x\": 0.535312294960022,\n \"y\": 0.9619986414909363,\n \"z\": 0.012499462813138962\n }, {\n \"x\": 0.4608460068702698,\n \"y\": 0.6628725528717041,\n \"z\": 0.01517564244568348\n }, {\n \"x\": 0.4206731915473938,\n \"y\": 0.6828458309173584,\n \"z\": 0.07848648726940155\n }, {\n \"x\": 0.4390624463558197,\n \"y\": 0.6796106696128845,\n \"z\": 0.03283142298460007\n }, {\n \"x\": 0.5029968619346619,\n \"y\": 0.7701570391654968,\n \"z\": -0.009734481573104858\n }, {\n \"x\": 0.5595027208328247,\n \"y\": 0.8607323169708252,\n \"z\": -0.030043255537748337\n }, {\n \"x\": 0.5621269941329956,\n \"y\": 0.8738374710083008,\n \"z\": -0.021709579974412918\n }, {\n \"x\": 0.5451499819755554,\n \"y\": 0.865527331829071,\n \"z\": -0.022014077752828598\n }, {\n \"x\": 0.5351184010505676,\n \"y\": 0.8705098032951355,\n \"z\": -0.011602800339460373\n }, {\n \"x\": 0.5495014190673828,\n \"y\": 0.8744956254959106,\n \"z\": -0.016490943729877472\n }, {\n \"x\": 0.5395170450210571,\n \"y\": 0.8759440779685974,\n \"z\": -0.007333362940698862\n }, {\n \"x\": 0.5183624029159546,\n \"y\": 0.8959754705429077,\n \"z\": 0.010520773939788342\n }, {\n \"x\": 0.5604349374771118,\n \"y\": 0.7895449995994568,\n \"z\": -0.07082037627696991\n }, {\n \"x\": 0.557381272315979,\n \"y\": 0.7687489986419678,\n \"z\": -0.07590588927268982\n }, {\n \"x\": 0.4432901442050934,\n \"y\": 0.6308897733688354,\n \"z\": 0.0027153254486620426\n }, {\n \"x\": 0.5258325338363647,\n \"y\": 0.7151225805282593,\n \"z\": -0.014676518738269806\n }, {\n \"x\": 0.5271827578544617,\n \"y\": 0.7833116054534912,\n \"z\": -0.037643320858478546\n }, {\n \"x\": 0.5257382988929749,\n \"y\": 0.7717816233634949,\n \"z\": -0.03401920944452286\n }, {\n \"x\": 0.46516409516334534,\n \"y\": 0.7705106735229492,\n \"z\": 0.0065747760236263275\n }, {\n \"x\": 0.5558893084526062,\n \"y\": 0.7420997619628906,\n \"z\": -0.0694495290517807\n }, {\n \"x\": 0.4720408320426941,\n \"y\": 0.6066038608551025,\n \"z\": -0.021204356104135513\n }, {\n \"x\": 0.45432573556900024,\n \"y\": 0.6158540844917297,\n \"z\": -0.011054684408009052\n }, {\n \"x\": 0.4305151402950287,\n \"y\": 0.5608053803443909,\n \"z\": 0.0396830290555954\n }, {\n \"x\": 0.5310865640640259,\n \"y\": 0.6157484650611877,\n \"z\": -0.03081176057457924\n }, {\n \"x\": 0.5114666223526001,\n \"y\": 0.6329749226570129,\n \"z\": -0.00335998204536736\n }, {\n \"x\": 0.506435751914978,\n \"y\": 0.8786543607711792,\n \"z\": 0.012980876490473747\n }, {\n \"x\": 0.4480472207069397,\n \"y\": 0.8640613555908203,\n \"z\": 0.12569651007652283\n }, {\n \"x\": 0.5372058153152466,\n \"y\": 0.7942581176757812,\n \"z\": -0.03168361634016037\n }, {\n \"x\": 0.5488379597663879,\n \"y\": 0.8001630306243896,\n \"z\": -0.03280917927622795\n }, {\n \"x\": 0.5213388204574585,\n \"y\": 0.8794381618499756,\n \"z\": 0.011892606504261494\n }, {\n \"x\": 0.5242055654525757,\n \"y\": 0.8789222240447998,\n \"z\": 0.008370225317776203\n }, {\n \"x\": 0.4477175176143646,\n \"y\": 0.6039950251579285,\n \"z\": -0.0050799972377717495\n }, {\n \"x\": 0.526964008808136,\n \"y\": 0.7916748523712158,\n \"z\": -0.02968614175915718\n }, {\n \"x\": 0.4971255660057068,\n \"y\": 0.6050706505775452,\n \"z\": -0.028175678104162216\n }, {\n \"x\": 0.4938119053840637,\n \"y\": 0.5882453918457031,\n \"z\": -0.03210941329598427\n }, {\n \"x\": 0.4757143557071686,\n \"y\": 0.5094879865646362,\n \"z\": -0.01300730835646391\n }, {\n \"x\": 0.43947282433509827,\n \"y\": 0.5816648006439209,\n \"z\": 0.01415177434682846\n }, {\n \"x\": 0.485664039850235,\n \"y\": 0.5477864146232605,\n \"z\": -0.023685332387685776\n }, {\n \"x\": 0.43635931611061096,\n \"y\": 0.6226438283920288,\n \"z\": 0.013606148771941662\n }, {\n \"x\": 0.42910251021385193,\n \"y\": 0.6102726459503174,\n \"z\": 0.03926564007997513\n }, {\n \"x\": 0.5605402588844299,\n \"y\": 0.8680099248886108,\n \"z\": -0.027318159118294716\n }, {\n \"x\": 0.5474816560745239,\n \"y\": 0.8702861070632935,\n \"z\": -0.019686367362737656\n }, {\n \"x\": 0.5373021364212036,\n \"y\": 0.8728838562965393,\n \"z\": -0.010484928265213966\n }, {\n \"x\": 0.540735125541687,\n \"y\": 0.7979167103767395,\n \"z\": -0.029073253273963928\n }, {\n \"x\": 0.5228585004806519,\n \"y\": 0.87913578748703,\n \"z\": 0.009915109723806381\n }, {\n \"x\": 0.530497670173645,\n \"y\": 0.8815253973007202,\n \"z\": 0.0020524784922599792\n }, {\n \"x\": 0.5259912610054016,\n \"y\": 0.8790552616119385,\n \"z\": 0.007895970717072487\n }, {\n \"x\": 0.5433906316757202,\n \"y\": 0.7882310748100281,\n \"z\": -0.05121905356645584\n }, {\n \"x\": 0.541388213634491,\n \"y\": 0.8777219653129578,\n \"z\": -0.00466804439201951\n }, {\n \"x\": 0.5515822172164917,\n \"y\": 0.8767023086547852,\n \"z\": -0.010475946590304375\n }, {\n \"x\": 0.5637003779411316,\n \"y\": 0.877059817314148,\n \"z\": -0.015273625031113625\n }, {\n \"x\": 0.5640299320220947,\n \"y\": 0.9263423085212708,\n \"z\": -0.00658724969252944\n }, {\n \"x\": 0.5642300248146057,\n \"y\": 0.8993074893951416,\n \"z\": -0.017653480172157288\n }, {\n \"x\": 0.5637336373329163,\n \"y\": 0.8910360932350159,\n \"z\": -0.01852807030081749\n }, {\n \"x\": 0.5637134313583374,\n \"y\": 0.8837276697158813,\n \"z\": -0.01482592523097992\n }, {\n \"x\": 0.564205527305603,\n \"y\": 0.8768964409828186,\n \"z\": -0.01331155002117157\n }, {\n \"x\": 0.5419867634773254,\n \"y\": 0.8778373599052429,\n \"z\": -0.0037720394320786\n }, {\n \"x\": 0.5404468774795532,\n \"y\": 0.880696177482605,\n \"z\": -0.005610354244709015\n }, {\n \"x\": 0.5392338633537292,\n \"y\": 0.8845721483230591,\n \"z\": -0.007352025713771582\n }, {\n \"x\": 0.538469672203064,\n \"y\": 0.8891173601150513,\n \"z\": -0.005154991988092661\n }, {\n \"x\": 0.5189250111579895,\n \"y\": 0.8452741503715515,\n \"z\": -0.009755070321261883\n }, {\n \"x\": 0.4258975088596344,\n \"y\": 0.7662280797958374,\n \"z\": 0.1387351155281067\n }, {\n \"x\": 0.5725725293159485,\n \"y\": 0.8041572570800781,\n \"z\": -0.04583907872438431\n }, {\n \"x\": 0.5342061519622803,\n \"y\": 0.8785833120346069,\n \"z\": 0.002659974154084921\n }, {\n \"x\": 0.5324031114578247,\n \"y\": 0.8804071545600891,\n \"z\": 0.0017832003068178892\n }, {\n \"x\": 0.5538818836212158,\n \"y\": 0.8078407645225525,\n \"z\": -0.03254539892077446\n }, {\n \"x\": 0.5325431823730469,\n \"y\": 0.8026832938194275,\n \"z\": -0.019140373915433884\n }, {\n \"x\": 0.5514076948165894,\n \"y\": 0.8043903112411499,\n \"z\": -0.03313535451889038\n }, {\n \"x\": 0.5131856203079224,\n \"y\": 0.7284771800041199,\n \"z\": -0.009399853646755219\n }, {\n \"x\": 0.49331504106521606,\n \"y\": 0.7443980574607849,\n \"z\": -0.005225230939686298\n }, {\n \"x\": 0.5239617824554443,\n \"y\": 0.7807451486587524,\n \"z\": -0.025881027802824974\n }, {\n \"x\": 0.4473606050014496,\n \"y\": 0.5315827131271362,\n \"z\": 0.011164786294102669\n }, {\n \"x\": 0.45718759298324585,\n \"y\": 0.5604941248893738,\n \"z\": -0.005943301599472761\n }, {\n \"x\": 0.4670005738735199,\n \"y\": 0.5909327268600464,\n \"z\": -0.019681761041283607\n }, {\n \"x\": 0.5311570167541504,\n \"y\": 0.9076261520385742,\n \"z\": 0.00389476353302598\n }, {\n \"x\": 0.5249923467636108,\n \"y\": 0.5893563628196716,\n \"z\": -0.037981919944286346\n }, {\n \"x\": 0.5166932344436646,\n \"y\": 0.5429551005363464,\n \"z\": -0.03319704160094261\n }, {\n \"x\": 0.5085030198097229,\n \"y\": 0.49676206707954407,\n \"z\": -0.02691275253891945\n }, {\n \"x\": 0.4687720239162445,\n \"y\": 0.6834565997123718,\n \"z\": 0.008113506250083447\n }, {\n \"x\": 0.4426414966583252,\n \"y\": 0.7069531679153442,\n \"z\": 0.028577271848917007\n }, {\n \"x\": 0.5230373740196228,\n \"y\": 0.6675713658332825,\n \"z\": 0.001773772411979735\n }, {\n \"x\": 0.4481240212917328,\n \"y\": 0.6527872085571289,\n \"z\": 0.012414850294589996\n }, {\n \"x\": 0.5339856743812561,\n \"y\": 0.7012367844581604,\n \"z\": -0.020220188423991203\n }, {\n \"x\": 0.5347223281860352,\n \"y\": 0.7761190533638,\n \"z\": -0.05141595005989075\n }, {\n \"x\": 0.4315067231655121,\n \"y\": 0.7211957573890686,\n \"z\": 0.04381405934691429\n }, {\n \"x\": 0.45203351974487305,\n \"y\": 0.7206180095672607,\n \"z\": 0.017288070172071457\n }, {\n \"x\": 0.46892452239990234,\n \"y\": 0.7265436053276062,\n \"z\": 0.005602988880127668\n }, {\n \"x\": 0.49314674735069275,\n \"y\": 0.7202282547950745,\n \"z\": -0.0006408205372281373\n }, {\n \"x\": 0.5104925632476807,\n \"y\": 0.7091827392578125,\n \"z\": -0.00362918758764863\n }, {\n \"x\": 0.5232142210006714,\n \"y\": 0.698553740978241,\n \"z\": -0.00787867046892643\n }, {\n \"x\": 0.5497883558273315,\n \"y\": 0.6743605136871338,\n \"z\": -0.036349106580019\n }, {\n \"x\": 0.43658503890037537,\n \"y\": 0.7627100348472595,\n \"z\": 0.042555369436740875\n }, {\n \"x\": 0.4397648870944977,\n \"y\": 0.6528646349906921,\n \"z\": 0.017956094816327095\n }, {\n \"x\": 0.5653332471847534,\n \"y\": 0.7992802858352661,\n \"z\": -0.06365057826042175\n }, {\n \"x\": 0.5285563468933105,\n \"y\": 0.736810564994812,\n \"z\": -0.018836988136172295\n }, {\n \"x\": 0.4180678725242615,\n \"y\": 0.6792560815811157,\n \"z\": 0.12284679710865021\n }, {\n \"x\": 0.5328429937362671,\n \"y\": 0.6865872144699097,\n \"z\": -0.010484723374247551\n }, {\n \"x\": 0.5230283141136169,\n \"y\": 0.7809416055679321,\n \"z\": -0.011922398582100868\n }, {\n \"x\": 0.4551771283149719,\n \"y\": 0.6650775074958801,\n \"z\": 0.01774493046104908\n }, {\n \"x\": 0.5337203741073608,\n \"y\": 0.7618928551673889,\n \"z\": -0.04697106033563614\n }, {\n \"x\": 0.43463975191116333,\n \"y\": 0.8133478164672852,\n \"z\": 0.1354849934577942\n }, {\n \"x\": 0.5225707292556763,\n \"y\": 0.6605283617973328,\n \"z\": 0.004980515688657761\n }, {\n \"x\": 0.5441933870315552,\n \"y\": 0.7497199773788452,\n \"z\": -0.06091512367129326\n }, {\n \"x\": 0.4774007797241211,\n \"y\": 0.9159183502197266,\n \"z\": 0.059622734785079956\n }, {\n \"x\": 0.48068761825561523,\n \"y\": 0.9364941716194153,\n \"z\": 0.08404944837093353\n }, {\n \"x\": 0.4268292486667633,\n \"y\": 0.7657528519630432,\n \"z\": 0.09051097184419632\n }, {\n \"x\": 0.46051913499832153,\n \"y\": 0.8880485892295837,\n \"z\": 0.0738474428653717\n }, {\n \"x\": 0.4243420660495758,\n \"y\": 0.6434382200241089,\n \"z\": 0.06230505183339119\n }, {\n \"x\": 0.5342157483100891,\n \"y\": 0.9835634231567383,\n \"z\": 0.021662971004843712\n }, {\n \"x\": 0.5668109655380249,\n \"y\": 0.8042187094688416,\n \"z\": -0.044937074184417725\n }, {\n \"x\": 0.5176341533660889,\n \"y\": 0.7530587315559387,\n \"z\": -0.012967454269528389\n }, {\n \"x\": 0.430206298828125,\n \"y\": 0.6835605502128601,\n \"z\": 0.04612284153699875\n }, {\n \"x\": 0.4794231951236725,\n \"y\": 0.6732114553451538,\n \"z\": 0.003970044665038586\n }, {\n \"x\": 0.49073347449302673,\n \"y\": 0.6722435355186462,\n \"z\": 0.0008692514384165406\n }, {\n \"x\": 0.5294116139411926,\n \"y\": 0.884677529335022,\n \"z\": 0.004413890186697245\n }, {\n \"x\": 0.4430122375488281,\n \"y\": 0.80235356092453,\n \"z\": 0.04987282305955887\n }, {\n \"x\": 0.5603825449943542,\n \"y\": 1.0092442035675049,\n \"z\": 0.026417359709739685\n }, {\n \"x\": 0.5186598300933838,\n \"y\": 0.9828659892082214,\n \"z\": 0.0513598807156086\n }, {\n \"x\": 0.5010536909103394,\n \"y\": 0.9640932679176331,\n \"z\": 0.06591596454381943\n }, {\n \"x\": 0.5524769425392151,\n \"y\": 0.539441704750061,\n \"z\": -0.035816047340631485\n }, {\n \"x\": 0.5879997611045837,\n \"y\": 1.0091472864151,\n \"z\": 0.02285068854689598\n }, {\n \"x\": 0.5016193985939026,\n \"y\": 0.6684437990188599,\n \"z\": 0.00028415941051207483\n }, {\n \"x\": 0.511952817440033,\n \"y\": 0.6642197370529175,\n \"z\": 0.0021144719794392586\n }, {\n \"x\": 0.5194343328475952,\n \"y\": 0.6623469591140747,\n \"z\": 0.004674181342124939\n }, {\n \"x\": 0.4321230351924896,\n \"y\": 0.6496355533599854,\n \"z\": 0.03124697133898735\n }, {\n \"x\": 0.508686363697052,\n \"y\": 0.6479565501213074,\n \"z\": -0.00044765998609364033\n }, {\n \"x\": 0.4963986277580261,\n \"y\": 0.6431032419204712,\n \"z\": -0.0032507688738405704\n }, {\n \"x\": 0.4845542013645172,\n \"y\": 0.6430778503417969,\n \"z\": -0.002903624437749386\n }, {\n \"x\": 0.4733612537384033,\n \"y\": 0.647506833076477,\n \"z\": 0.00023347247042693198\n }, {\n \"x\": 0.4668654501438141,\n \"y\": 0.653346598148346,\n \"z\": 0.004762572236359119\n }, {\n \"x\": 0.41815051436424255,\n \"y\": 0.633708119392395,\n \"z\": 0.09809435904026031\n }, {\n \"x\": 0.47159942984580994,\n \"y\": 0.6711485385894775,\n \"z\": 0.007849935442209244\n }, {\n \"x\": 0.5734396576881409,\n \"y\": 0.8256140351295471,\n \"z\": -0.03155219927430153\n }, {\n \"x\": 0.5306524038314819,\n \"y\": 0.8337990641593933,\n \"z\": -0.018351426348090172\n }, {\n \"x\": 0.5371729135513306,\n \"y\": 0.7910830974578857,\n \"z\": -0.037286680191755295\n }, {\n \"x\": 0.5549534559249878,\n \"y\": 0.8275275826454163,\n \"z\": -0.030664825811982155\n }, {\n \"x\": 0.5597432255744934,\n \"y\": 0.6418541669845581,\n \"z\": -0.03318847343325615\n }, {\n \"x\": 0.4958484172821045,\n \"y\": 0.9429569244384766,\n \"z\": 0.048340678215026855\n }, {\n \"x\": 0.5140507817268372,\n \"y\": 0.9634028077125549,\n \"z\": 0.03589847311377525\n }, {\n \"x\": 0.5587693452835083,\n \"y\": 0.9951097369194031,\n \"z\": 0.00908728688955307\n }, {\n \"x\": 0.46411189436912537,\n \"y\": 0.9051855206489563,\n \"z\": 0.10601935535669327\n }, {\n \"x\": 0.5181609392166138,\n \"y\": 0.6554316878318787,\n \"z\": 0.002546071307733655\n }, {\n \"x\": 0.5436590909957886,\n \"y\": 0.7085841298103333,\n \"z\": -0.03844436630606651\n }, {\n \"x\": 0.5872187614440918,\n \"y\": 0.9960382580757141,\n \"z\": 0.0063423276878893375\n }, {\n \"x\": 0.5379653573036194,\n \"y\": 0.9989125728607178,\n \"z\": 0.03636329993605614\n }, {\n \"x\": 0.4350326955318451,\n \"y\": 0.8088565468788147,\n \"z\": 0.09147704392671585\n }, {\n \"x\": 0.5523084998130798,\n \"y\": 0.8773422837257385,\n \"z\": -0.009068487212061882\n }, {\n \"x\": 0.5510149598121643,\n \"y\": 0.8816931843757629,\n \"z\": -0.011043853126466274\n }, {\n \"x\": 0.5503793954849243,\n \"y\": 0.88776695728302,\n \"z\": -0.01348799467086792\n }, {\n \"x\": 0.5501549243927002,\n \"y\": 0.8954370617866516,\n \"z\": -0.012142189778387547\n }, {\n \"x\": 0.546072781085968,\n \"y\": 0.9192524552345276,\n \"z\": -0.003157563041895628\n }, {\n \"x\": 0.5314661860466003,\n \"y\": 0.8771666884422302,\n \"z\": 0.0005075141089037061\n }, {\n \"x\": 0.5293324589729309,\n \"y\": 0.8762547969818115,\n \"z\": 0.00039177737198770046\n }, {\n \"x\": 0.5275698900222778,\n \"y\": 0.8750609755516052,\n \"z\": 0.000047732755774632096\n }, {\n \"x\": 0.5104271173477173,\n \"y\": 0.8607332110404968,\n \"z\": 0.0012934643309563398\n }, {\n \"x\": 0.45938700437545776,\n \"y\": 0.8134918212890625,\n \"z\": 0.023569690063595772\n }, {\n \"x\": 0.5418947339057922,\n \"y\": 0.6864100694656372,\n \"z\": -0.027333909645676613\n }, {\n \"x\": 0.531914234161377,\n \"y\": 0.6456130743026733,\n \"z\": -0.005434140563011169\n }, {\n \"x\": 0.523697018623352,\n \"y\": 0.647885262966156,\n \"z\": -0.0002466466394253075\n }, {\n \"x\": 0.5338191390037537,\n \"y\": 0.8783687353134155,\n \"z\": 0.002268768846988678\n }, {\n \"x\": 0.46226605772972107,\n \"y\": 0.8610277771949768,\n \"z\": 0.04718952998518944\n }, {\n \"x\": 0.5434442758560181,\n \"y\": 0.6456181406974792,\n \"z\": -0.02327350154519081\n }, {\n \"x\": 0.5399754643440247,\n \"y\": 0.940219521522522,\n \"z\": 0.005075343884527683\n }, {\n \"x\": 0.5661457777023315,\n \"y\": 0.71457839012146,\n \"z\": -0.06242101639509201\n }, {\n \"x\": 0.5523148775100708,\n \"y\": 0.6974870562553406,\n \"z\": -0.04863070324063301\n }, {\n \"x\": 0.5639959573745728,\n \"y\": 0.6923378109931946,\n \"z\": -0.05180761218070984\n }, {\n \"x\": 0.5367592573165894,\n \"y\": 0.7423217296600342,\n \"z\": -0.03623027727007866\n }, {\n \"x\": 0.5853689908981323,\n \"y\": 0.9752064943313599,\n \"z\": -0.002361974213272333\n }, {\n \"x\": 0.5835235118865967,\n \"y\": 0.9493685960769653,\n \"z\": -0.003941743168979883\n }, {\n \"x\": 0.5615018606185913,\n \"y\": 0.949194610118866,\n \"z\": -0.0015953965485095978\n }, {\n \"x\": 0.5068561434745789,\n \"y\": 0.9048219323158264,\n \"z\": 0.01862684078514576\n }, {\n \"x\": 0.5134067535400391,\n \"y\": 0.7971825003623962,\n \"z\": -0.008485661819577217\n }, {\n \"x\": 0.5223897099494934,\n \"y\": 0.925589919090271,\n \"z\": 0.01249657291918993\n }, {\n \"x\": 0.48500555753707886,\n \"y\": 0.7959478497505188,\n \"z\": -0.0032065745908766985\n }, {\n \"x\": 0.5037734508514404,\n \"y\": 0.8184596300125122,\n \"z\": -0.004932103678584099\n }, {\n \"x\": 0.4766361117362976,\n \"y\": 0.828806459903717,\n \"z\": 0.01027688942849636\n }, {\n \"x\": 0.5589827299118042,\n \"y\": 0.974656343460083,\n \"z\": 0.0009666886180639267\n }, {\n \"x\": 0.5294582843780518,\n \"y\": 0.7541216611862183,\n \"z\": -0.025603046640753746\n }, {\n \"x\": 0.4973002076148987,\n \"y\": 0.9208990931510925,\n \"z\": 0.031931452453136444\n }, {\n \"x\": 0.5163551568984985,\n \"y\": 0.9432790875434875,\n \"z\": 0.024321340024471283\n }, {\n \"x\": 0.49399662017822266,\n \"y\": 0.8814862370491028,\n \"z\": 0.018687399104237556\n }, {\n \"x\": 0.44948166608810425,\n \"y\": 0.836137592792511,\n \"z\": 0.05702034756541252\n }, {\n \"x\": 0.47898444533348083,\n \"y\": 0.8836610913276672,\n \"z\": 0.03150695189833641\n }, {\n \"x\": 0.4454479217529297,\n \"y\": 0.8499438166618347,\n \"z\": 0.08868525922298431\n }, {\n \"x\": 0.49572959542274475,\n \"y\": 0.8452823758125305,\n \"z\": 0.0036111653316766024\n }, {\n \"x\": 0.5362502336502075,\n \"y\": 0.7222585678100586,\n \"z\": -0.027912352234125137\n }, {\n \"x\": 0.5393770337104797,\n \"y\": 0.7850722074508667,\n \"z\": -0.05415399745106697\n }, {\n \"x\": 0.531399667263031,\n \"y\": 0.7898418307304382,\n \"z\": -0.03883346915245056\n }, {\n \"x\": 0.5451627373695374,\n \"y\": 0.7717036604881287,\n \"z\": -0.06480253487825394\n }, {\n \"x\": 0.5206395983695984,\n \"y\": 0.6287745833396912,\n \"z\": -0.010521138086915016\n }, {\n \"x\": 0.4974782466888428,\n \"y\": 0.6191938519477844,\n \"z\": -0.014098240062594414\n }, {\n \"x\": 0.4774145185947418,\n \"y\": 0.6193130612373352,\n \"z\": -0.013643337413668633\n }, {\n \"x\": 0.4616098403930664,\n \"y\": 0.6259890198707581,\n \"z\": -0.008448202162981033\n }, {\n \"x\": 0.4516478478908539,\n \"y\": 0.6368461847305298,\n \"z\": 0.00009050309745362028\n }, {\n \"x\": 0.4485096037387848,\n \"y\": 0.6719120740890503,\n \"z\": 0.022984720766544342\n }, {\n \"x\": 0.42177659273147583,\n \"y\": 0.7240667343139648,\n \"z\": 0.08511673659086227\n }, {\n \"x\": 0.4616215229034424,\n \"y\": 0.6988231539726257,\n \"z\": 0.014238474890589714\n }, {\n \"x\": 0.4755798876285553,\n \"y\": 0.7034608721733093,\n \"z\": 0.00625590980052948\n }, {\n \"x\": 0.4924992024898529,\n \"y\": 0.7005885243415833,\n \"z\": 0.0009391739731654525\n }, {\n \"x\": 0.5082254409790039,\n \"y\": 0.693384051322937,\n \"z\": -0.0009464038303121924\n }, {\n \"x\": 0.5203112959861755,\n \"y\": 0.6849707961082458,\n \"z\": -0.0022114769089967012\n }, {\n \"x\": 0.52867591381073,\n \"y\": 0.6779075860977173,\n \"z\": -0.002962538506835699\n }, {\n \"x\": 0.4213953912258148,\n \"y\": 0.7219811677932739,\n \"z\": 0.1350894570350647\n }, {\n \"x\": 0.5320829749107361,\n \"y\": 0.794858992099762,\n \"z\": -0.03181503340601921\n }, {\n \"x\": 0.5452795028686523,\n \"y\": 0.7286570072174072,\n \"z\": -0.04771539941430092\n }, {\n \"x\": 0.5496407747268677,\n \"y\": 0.7866933345794678,\n \"z\": -0.06452003121376038\n }, {\n \"x\": 0.557040274143219,\n \"y\": 0.7962084412574768,\n \"z\": -0.05837344378232956\n }, {\n \"x\": 0.549176812171936,\n \"y\": 0.7895247936248779,\n \"z\": -0.057761140167713165\n }, {\n \"x\": 0.5362890362739563,\n \"y\": 0.8005836606025696,\n \"z\": -0.026903774589300156\n }, {\n \"x\": 0.560200035572052,\n \"y\": 0.7983731031417847,\n \"z\": -0.06172555685043335\n }, {\n \"x\": 0.5616944432258606,\n \"y\": 0.8022753596305847,\n \"z\": -0.045200999826192856\n }, {\n \"x\": 0.5273328423500061,\n \"y\": 0.6611284017562866,\n \"z\": 0.0029021520167589188\n }, {\n \"x\": 0.534850537776947,\n \"y\": 0.6660012006759644,\n \"z\": -0.005215510260313749\n }, {\n \"x\": 0.5394860506057739,\n \"y\": 0.6701375246047974,\n \"z\": -0.014931917190551758\n }, {\n \"x\": 0.4634307324886322,\n \"y\": 0.658291757106781,\n \"z\": 0.009295716881752014\n }, {\n \"x\": 0.4538393020629883,\n \"y\": 0.6519932150840759,\n \"z\": 0.00930330716073513\n }, {\n \"x\": 0.5776031613349915,\n \"y\": 0.7159298658370972,\n \"z\": -0.057365912944078445\n }, {\n \"x\": 0.6504855155944824,\n \"y\": 0.6461779475212097,\n \"z\": 0.014184834435582161\n }, {\n \"x\": 0.5860154032707214,\n \"y\": 0.7962266206741333,\n \"z\": -0.04522843658924103\n }, {\n \"x\": 0.6842049360275269,\n \"y\": 0.5631637573242188,\n \"z\": 0.07207967340946198\n }, {\n \"x\": 0.6152560710906982,\n \"y\": 0.6674962639808655,\n \"z\": 0.0007529259892180562\n }, {\n \"x\": 0.6280948519706726,\n \"y\": 0.6684326529502869,\n \"z\": 0.0016892586136236787\n }, {\n \"x\": 0.6408625245094299,\n \"y\": 0.6663892269134521,\n \"z\": 0.005331226624548435\n }, {\n \"x\": 0.6557814478874207,\n \"y\": 0.6534678936004639,\n \"z\": 0.01646413467824459\n }, {\n \"x\": 0.6035663485527039,\n \"y\": 0.6639701724052429,\n \"z\": 0.0013799630105495453\n }, {\n \"x\": 0.6329053044319153,\n \"y\": 0.608010470867157,\n \"z\": -0.006195899099111557\n }, {\n \"x\": 0.6167260408401489,\n \"y\": 0.6117533445358276,\n \"z\": -0.006319951266050339\n }, {\n \"x\": 0.6471013426780701,\n \"y\": 0.6112449765205383,\n \"z\": -0.0017843559617176652\n }, {\n \"x\": 0.6560901999473572,\n \"y\": 0.6185776591300964,\n \"z\": 0.004047257360070944\n }, {\n \"x\": 0.6666946411132812,\n \"y\": 0.6651176810264587,\n \"z\": 0.023647578433156013\n }, {\n \"x\": 0.6311345100402832,\n \"y\": 0.9495396018028259,\n \"z\": 0.014004078693687916\n }, {\n \"x\": 0.6544655561447144,\n \"y\": 0.6397901773452759,\n \"z\": 0.01809609681367874\n }, {\n \"x\": 0.6965808868408203,\n \"y\": 0.6482675075531006,\n \"z\": 0.08304904401302338\n }, {\n \"x\": 0.679817259311676,\n \"y\": 0.650188148021698,\n \"z\": 0.03632688894867897\n }, {\n \"x\": 0.6336516737937927,\n \"y\": 0.7541458010673523,\n \"z\": -0.007742783520370722\n }, {\n \"x\": 0.5921701192855835,\n \"y\": 0.8567668199539185,\n \"z\": -0.029399123042821884\n }, {\n \"x\": 0.591663658618927,\n \"y\": 0.870215654373169,\n \"z\": -0.02103729173541069\n }, {\n \"x\": 0.6068367958068848,\n \"y\": 0.8584195375442505,\n \"z\": -0.020668085664510727\n }, {\n \"x\": 0.6176617741584778,\n \"y\": 0.860965371131897,\n \"z\": -0.009790095500648022\n }, {\n \"x\": 0.6040634512901306,\n \"y\": 0.8686612844467163,\n \"z\": -0.015289564616978168\n }, {\n \"x\": 0.6143736839294434,\n \"y\": 0.8671170473098755,\n \"z\": -0.005712216719985008\n }, {\n \"x\": 0.6373105049133301,\n \"y\": 0.8815656900405884,\n \"z\": 0.012672550976276398\n }, {\n \"x\": 0.5832505822181702,\n \"y\": 0.7866312861442566,\n \"z\": -0.07051534950733185\n }, {\n \"x\": 0.5836675763130188,\n \"y\": 0.7658692598342896,\n \"z\": -0.07566110789775848\n }, {\n \"x\": 0.6709531545639038,\n \"y\": 0.604898989200592,\n \"z\": 0.005951565690338612\n }, {\n \"x\": 0.6029891967773438,\n \"y\": 0.705652117729187,\n \"z\": -0.013388276100158691\n }, {\n \"x\": 0.6131622195243835,\n \"y\": 0.7728396058082581,\n \"z\": -0.036248479038476944\n }, {\n \"x\": 0.6123163104057312,\n \"y\": 0.7612020373344421,\n \"z\": -0.03264721855521202\n }, {\n \"x\": 0.6696187853813171,\n \"y\": 0.744706928730011,\n \"z\": 0.009673702530562878\n }, {\n \"x\": 0.5803102254867554,\n \"y\": 0.7385968565940857,\n \"z\": -0.0689152330160141\n }, {\n \"x\": 0.6404349207878113,\n \"y\": 0.5877999663352966,\n \"z\": -0.01929756999015808\n }, {\n \"x\": 0.6588467955589294,\n \"y\": 0.5929454565048218,\n \"z\": -0.008487257175147533\n }, {\n \"x\": 0.6720337867736816,\n \"y\": 0.530631422996521,\n \"z\": 0.043437421321868896\n }, {\n \"x\": 0.584305465221405,\n \"y\": 0.6099005341529846,\n \"z\": -0.030301367864012718\n }, {\n \"x\": 0.6034283638000488,\n \"y\": 0.6217452883720398,\n \"z\": -0.001970183802768588\n }, {\n \"x\": 0.6460927724838257,\n \"y\": 0.8608663082122803,\n \"z\": 0.015541625209152699\n }, {\n \"x\": 0.6957815289497375,\n \"y\": 0.8326103091239929,\n \"z\": 0.13015234470367432\n }, {\n \"x\": 0.6043362617492676,\n \"y\": 0.7861682772636414,\n \"z\": -0.030476901680231094\n }, {\n \"x\": 0.594293475151062,\n \"y\": 0.7942103147506714,\n \"z\": -0.032218821346759796\n }, {\n \"x\": 0.6324057579040527,\n \"y\": 0.8665139675140381,\n \"z\": 0.014255806803703308\n }, {\n \"x\": 0.6296147704124451,\n \"y\": 0.8667733669281006,\n \"z\": 0.010388285852968693\n }, {\n \"x\": 0.663644552230835,\n \"y\": 0.5798642635345459,\n \"z\": -0.0022301070857793093\n }, {\n \"x\": 0.6140630841255188,\n \"y\": 0.7809288501739502,\n \"z\": -0.02835679054260254\n }, {\n \"x\": 0.615908145904541,\n \"y\": 0.5921698212623596,\n \"z\": -0.026804860681295395\n }, {\n \"x\": 0.617181122303009,\n \"y\": 0.5748661756515503,\n \"z\": -0.03060605563223362\n }, {\n \"x\": 0.6222207546234131,\n \"y\": 0.49137672781944275,\n \"z\": -0.011151673272252083\n }, {\n \"x\": 0.6669357419013977,\n \"y\": 0.5541607141494751,\n \"z\": 0.017466170713305473\n }, {\n \"x\": 0.6182981729507446,\n \"y\": 0.5320425629615784,\n \"z\": -0.021793590858578682\n }, {\n \"x\": 0.6760554313659668,\n \"y\": 0.595052182674408,\n \"z\": 0.017115700989961624\n }, {\n \"x\": 0.6801463961601257,\n \"y\": 0.5800720453262329,\n \"z\": 0.043127160519361496\n }, {\n \"x\": 0.5922210812568665,\n \"y\": 0.8644017577171326,\n \"z\": -0.02662893570959568\n }, {\n \"x\": 0.6054555177688599,\n \"y\": 0.8637874722480774,\n \"z\": -0.018363753333687782\n }, {\n \"x\": 0.6161889433860779,\n \"y\": 0.8641164898872375,\n \"z\": -0.008808949030935764\n }, {\n \"x\": 0.6017249822616577,\n \"y\": 0.7901403307914734,\n \"z\": -0.028126630932092667\n }, {\n \"x\": 0.631446123123169,\n \"y\": 0.8664817810058594,\n \"z\": 0.012112865224480629\n }, {\n \"x\": 0.6249198913574219,\n \"y\": 0.8716511130332947,\n \"z\": 0.003882825840264559\n }, {\n \"x\": 0.6281915903091431,\n \"y\": 0.867301881313324,\n \"z\": 0.009891441091895103\n }, {\n \"x\": 0.5986843109130859,\n \"y\": 0.7813931703567505,\n \"z\": -0.050227612257003784\n }, {\n \"x\": 0.6126407384872437,\n \"y\": 0.869275689125061,\n \"z\": -0.0031255714129656553\n }, {\n \"x\": 0.6027271151542664,\n \"y\": 0.8711842894554138,\n \"z\": -0.009324162267148495\n }, {\n \"x\": 0.59088134765625,\n \"y\": 0.8742044568061829,\n \"z\": -0.014608660712838173\n }, {\n \"x\": 0.5984604358673096,\n \"y\": 0.9216185212135315,\n \"z\": -0.005981989670544863\n }, {\n \"x\": 0.5950398445129395,\n \"y\": 0.8964707255363464,\n \"z\": -0.01703473925590515\n }, {\n \"x\": 0.5941568613052368,\n \"y\": 0.8882410526275635,\n \"z\": -0.017784785479307175\n }, {\n \"x\": 0.5928806662559509,\n \"y\": 0.8803883194923401,\n \"z\": -0.014153128489851952\n }, {\n \"x\": 0.5909661054611206,\n \"y\": 0.8748103976249695,\n \"z\": -0.012609979137778282\n }, {\n \"x\": 0.6128016710281372,\n \"y\": 0.8702545762062073,\n \"z\": -0.0022550546564161777\n }, {\n \"x\": 0.6150846481323242,\n \"y\": 0.8726804256439209,\n \"z\": -0.00414019962772727\n }, {\n \"x\": 0.6173093914985657,\n \"y\": 0.8770190477371216,\n \"z\": -0.005970994010567665\n }, {\n \"x\": 0.619335412979126,\n \"y\": 0.8814800977706909,\n \"z\": -0.0036864024586975574\n }, {\n \"x\": 0.6292637586593628,\n \"y\": 0.8314558267593384,\n \"z\": -0.007714875973761082\n }, {\n \"x\": 0.702275276184082,\n \"y\": 0.7320667505264282,\n \"z\": 0.1433621346950531\n }, {\n \"x\": 0.6204835176467896,\n \"y\": 0.8689177632331848,\n \"z\": 0.0044869170524179935\n }, {\n \"x\": 0.6223508715629578,\n \"y\": 0.8704851269721985,\n \"z\": 0.00352082890458405\n }, {\n \"x\": 0.590448260307312,\n \"y\": 0.8029727935791016,\n \"z\": -0.03200828656554222\n }, {\n \"x\": 0.6097423434257507,\n \"y\": 0.7933741211891174,\n \"z\": -0.018042555078864098\n }, {\n \"x\": 0.59229576587677,\n \"y\": 0.7993767261505127,\n \"z\": -0.032564569264650345\n }, {\n \"x\": 0.6171364188194275,\n \"y\": 0.7153720259666443,\n \"z\": -0.007672437466681004\n }, {\n \"x\": 0.6389747858047485,\n \"y\": 0.726390540599823,\n \"z\": -0.002999067772179842\n }, {\n \"x\": 0.6151940226554871,\n \"y\": 0.769412100315094,\n \"z\": -0.024427521973848343\n }, {\n \"x\": 0.6526776552200317,\n \"y\": 0.505868136882782,\n \"z\": 0.01412637997418642\n }, {\n \"x\": 0.6475822329521179,\n \"y\": 0.5375454425811768,\n \"z\": -0.0033899128902703524\n }, {\n \"x\": 0.6433356404304504,\n \"y\": 0.5714520215988159,\n \"z\": -0.017428796738386154\n }, {\n \"x\": 0.626949667930603,\n \"y\": 0.8962116837501526,\n \"z\": 0.005602736957371235\n }, {\n \"x\": 0.5868416428565979,\n \"y\": 0.5829002261161804,\n \"z\": -0.03727729618549347\n }, {\n \"x\": 0.5877229571342468,\n \"y\": 0.5345035791397095,\n \"z\": -0.032396964728832245\n }, {\n \"x\": 0.5887066125869751,\n \"y\": 0.48655083775520325,\n \"z\": -0.025856535881757736\n }, {\n \"x\": 0.6507197618484497,\n \"y\": 0.6612282991409302,\n \"z\": 0.011114613153040409\n }, {\n \"x\": 0.6803066730499268,\n \"y\": 0.677992045879364,\n \"z\": 0.032125361263751984\n }, {\n \"x\": 0.5963194370269775,\n \"y\": 0.6598632335662842,\n \"z\": 0.002976928371936083\n }, {\n \"x\": 0.667536199092865,\n \"y\": 0.6274255514144897,\n \"z\": 0.015618261881172657\n }, {\n \"x\": 0.5930740833282471,\n \"y\": 0.6940041780471802,\n \"z\": -0.019217798486351967\n }, {\n \"x\": 0.6053346395492554,\n \"y\": 0.7676517963409424,\n \"z\": -0.050308309495449066\n }, {\n \"x\": 0.6934473514556885,\n \"y\": 0.6884298920631409,\n \"z\": 0.04794462397694588\n }, {\n \"x\": 0.6738007664680481,\n \"y\": 0.6934011578559875,\n \"z\": 0.020697161555290222\n }, {\n \"x\": 0.6588084697723389,\n \"y\": 0.7033141851425171,\n \"z\": 0.008462334051728249\n }, {\n \"x\": 0.6346072554588318,\n \"y\": 0.7029502391815186,\n \"z\": 0.001542167621664703\n }, {\n \"x\": 0.6157816648483276,\n \"y\": 0.6966525912284851,\n \"z\": -0.002009218093007803\n }, {\n \"x\": 0.6015574336051941,\n \"y\": 0.688928484916687,\n \"z\": -0.006588225718587637\n }, {\n \"x\": 0.5746836066246033,\n \"y\": 0.6711069345474243,\n \"z\": -0.03597589209675789\n }, {\n \"x\": 0.6947521567344666,\n \"y\": 0.7309479117393494,\n \"z\": 0.046707939356565475\n }, {\n \"x\": 0.6759101152420044,\n \"y\": 0.6249120831489563,\n \"z\": 0.021654341369867325\n }, {\n \"x\": 0.5794773101806641,\n \"y\": 0.7971615195274353,\n \"z\": -0.06339326500892639\n }, {\n \"x\": 0.6041849851608276,\n \"y\": 0.727514922618866,\n \"z\": -0.017512541264295578\n }, {\n \"x\": 0.6968844532966614,\n \"y\": 0.6440950036048889,\n \"z\": 0.12727996706962585\n }, {\n \"x\": 0.5910853147506714,\n \"y\": 0.679325520992279,\n \"z\": -0.009497715160250664\n }, {\n \"x\": 0.6157375574111938,\n \"y\": 0.7695677280426025,\n \"z\": -0.010624290443956852\n }, {\n \"x\": 0.6606494784355164,\n \"y\": 0.6410489678382874,\n \"z\": 0.0208158977329731\n }, {\n \"x\": 0.6040687561035156,\n \"y\": 0.7531470656394958,\n \"z\": -0.045887019485235214\n }, {\n \"x\": 0.7012156248092651,\n \"y\": 0.780247151851654,\n \"z\": 0.14028730988502502\n }, {\n \"x\": 0.595149576663971,\n \"y\": 0.6527782678604126,\n \"z\": 0.006308757700026035\n }, {\n \"x\": 0.5925500392913818,\n \"y\": 0.7436665892601013,\n \"z\": -0.060151755809783936\n }, {\n \"x\": 0.6780198812484741,\n \"y\": 0.8905693888664246,\n \"z\": 0.0626060739159584\n }, {\n \"x\": 0.676746666431427,\n \"y\": 0.9113880395889282,\n \"z\": 0.08726003766059875\n }, {\n \"x\": 0.7030686140060425,\n \"y\": 0.7312687635421753,\n \"z\": 0.09529774636030197\n }, {\n \"x\": 0.688987135887146,\n \"y\": 0.8588417172431946,\n \"z\": 0.07752864807844162\n }, {\n \"x\": 0.6883691549301147,\n \"y\": 0.6109960675239563,\n \"z\": 0.06669612973928452\n }, {\n \"x\": 0.6358906030654907,\n \"y\": 0.9702065587043762,\n \"z\": 0.023120900616049767\n }, {\n \"x\": 0.5781539678573608,\n \"y\": 0.8023634552955627,\n \"z\": -0.044763918966054916\n }, {\n \"x\": 0.6170316934585571,\n \"y\": 0.7408350706100464,\n \"z\": -0.011375460773706436\n }, {\n \"x\": 0.688542366027832,\n \"y\": 0.6516284346580505,\n \"z\": 0.050206027925014496\n }, {\n \"x\": 0.6385149359703064,\n \"y\": 0.6540714502334595,\n \"z\": 0.006462941411882639\n }, {\n \"x\": 0.6279382109642029,\n \"y\": 0.6563615798950195,\n \"z\": 0.003062846139073372\n }, {\n \"x\": 0.6268895268440247,\n \"y\": 0.8736732006072998,\n \"z\": 0.00627936702221632\n }, {\n \"x\": 0.6944946050643921,\n \"y\": 0.7709181308746338,\n \"z\": 0.053824134171009064\n }, {\n \"x\": 0.614617109298706,\n \"y\": 1.0022112131118774,\n \"z\": 0.02719894051551819\n }, {\n \"x\": 0.6493719220161438,\n \"y\": 0.9665167927742004,\n \"z\": 0.053563784807920456\n }, {\n \"x\": 0.6624587178230286,\n \"y\": 0.943530797958374,\n \"z\": 0.068605437874794\n }, {\n \"x\": 0.6162528991699219,\n \"y\": 0.6558693051338196,\n \"z\": 0.002187855076044798\n }, {\n \"x\": 0.6058168411254883,\n \"y\": 0.654328465461731,\n \"z\": 0.0036193584091961384\n }, {\n \"x\": 0.5987918972969055,\n \"y\": 0.6536934971809387,\n \"z\": 0.006134530063718557\n }, {\n \"x\": 0.6831037402153015,\n \"y\": 0.6195642948150635,\n \"z\": 0.03511790186166763\n }, {\n \"x\": 0.6062582731246948,\n \"y\": 0.6356398463249207,\n \"z\": 0.001280312892049551\n }, {\n \"x\": 0.6174948811531067,\n \"y\": 0.62776118516922,\n \"z\": -0.0013642468256875873\n }, {\n \"x\": 0.6297246217727661,\n \"y\": 0.6253792643547058,\n \"z\": -0.0007034156005829573\n }, {\n \"x\": 0.6407091617584229,\n \"y\": 0.627578616142273,\n \"z\": 0.0028144705574959517\n }, {\n \"x\": 0.6479622721672058,\n \"y\": 0.6322650909423828,\n \"z\": 0.00750273372977972\n }, {\n \"x\": 0.6915091276168823,\n \"y\": 0.5990704298019409,\n \"z\": 0.10270945727825165\n }, {\n \"x\": 0.6457163095474243,\n \"y\": 0.6504453420639038,\n \"z\": 0.010696077719330788\n }, {\n \"x\": 0.6164222955703735,\n \"y\": 0.8231936097145081,\n \"z\": -0.016772059723734856\n }, {\n \"x\": 0.6042401194572449,\n \"y\": 0.7830976843833923,\n \"z\": -0.03630910441279411\n }, {\n \"x\": 0.5922216773033142,\n \"y\": 0.8228387236595154,\n \"z\": -0.029992375522851944\n }, {\n \"x\": 0.6646111011505127,\n \"y\": 0.92097008228302,\n \"z\": 0.050967294722795486\n }, {\n \"x\": 0.651232898235321,\n \"y\": 0.9460107088088989,\n \"z\": 0.038000158965587616\n }, {\n \"x\": 0.6140977144241333,\n \"y\": 0.9882472157478333,\n \"z\": 0.009882091544568539\n }, {\n \"x\": 0.6870781183242798,\n \"y\": 0.8768675327301025,\n \"z\": 0.10980932414531708\n }, {\n \"x\": 0.5986856818199158,\n \"y\": 0.6456438899040222,\n \"z\": 0.003999010659754276\n }, {\n \"x\": 0.585981547832489,\n \"y\": 0.7034481763839722,\n \"z\": -0.0377722829580307\n }, {\n \"x\": 0.6342031359672546,\n \"y\": 0.9867448806762695,\n \"z\": 0.03786521404981613\n }, {\n \"x\": 0.7013950943946838,\n \"y\": 0.776049017906189,\n \"z\": 0.09598205983638763\n }, {\n \"x\": 0.6030206680297852,\n \"y\": 0.8719133138656616,\n \"z\": -0.007931148633360863\n }, {\n \"x\": 0.6050592064857483,\n \"y\": 0.8767156004905701,\n \"z\": -0.009791925549507141\n }, {\n \"x\": 0.6073468923568726,\n \"y\": 0.8831382393836975,\n \"z\": -0.012361008673906326\n }, {\n \"x\": 0.6087977290153503,\n \"y\": 0.890143632888794,\n \"z\": -0.01098148338496685\n }, {\n \"x\": 0.6147705316543579,\n \"y\": 0.9110084772109985,\n \"z\": -0.0018823575228452682\n }, {\n \"x\": 0.622577965259552,\n \"y\": 0.8670604825019836,\n \"z\": 0.002609190298244357\n }, {\n \"x\": 0.6241236329078674,\n \"y\": 0.8651344180107117,\n \"z\": 0.0025534380692988634\n }, {\n \"x\": 0.6257084608078003,\n \"y\": 0.8638408184051514,\n \"z\": 0.0023300074972212315\n }, {\n \"x\": 0.639931321144104,\n \"y\": 0.8449671268463135,\n \"z\": 0.0038123116828501225\n }, {\n \"x\": 0.6810906529426575,\n \"y\": 0.7856625318527222,\n \"z\": 0.02717764675617218\n }, {\n \"x\": 0.583532452583313,\n \"y\": 0.6811994910240173,\n \"z\": -0.026588857173919678\n }, {\n \"x\": 0.5855660438537598,\n \"y\": 0.6393819451332092,\n \"z\": -0.004512844607234001\n }, {\n \"x\": 0.5932201743125916,\n \"y\": 0.6398029327392578,\n \"z\": 0.0008020466193556786\n }, {\n \"x\": 0.6200879812240601,\n \"y\": 0.8683351874351501,\n \"z\": 0.00417016725987196\n }, {\n \"x\": 0.6842559576034546,\n \"y\": 0.8330534100532532,\n \"z\": 0.050836317241191864\n }, {\n \"x\": 0.5754412412643433,\n \"y\": 0.6418221592903137,\n \"z\": -0.022838059812784195\n }, {\n \"x\": 0.6232790350914001,\n \"y\": 0.9295297265052795,\n \"z\": 0.006339520215988159\n }, {\n \"x\": 0.5764067769050598,\n \"y\": 0.694546639919281,\n \"z\": -0.04825803264975548\n }, {\n \"x\": 0.59778892993927,\n \"y\": 0.7343927621841431,\n \"z\": -0.035004377365112305\n }, {\n \"x\": 0.6042810678482056,\n \"y\": 0.9441440105438232,\n \"z\": -0.0010970570147037506\n }, {\n \"x\": 0.6496372222900391,\n \"y\": 0.8869078159332275,\n \"z\": 0.021036235615611076\n }, {\n \"x\": 0.6274012327194214,\n \"y\": 0.7830310463905334,\n \"z\": -0.006658440921455622\n }, {\n \"x\": 0.637792706489563,\n \"y\": 0.9104999899864197,\n \"z\": 0.014290250837802887\n }, {\n \"x\": 0.6549934148788452,\n \"y\": 0.7748609185218811,\n \"z\": -0.0006672973395325243\n }, {\n \"x\": 0.6404005289077759,\n \"y\": 0.801220715045929,\n \"z\": -0.0026642554439604282\n }, {\n \"x\": 0.6671456694602966,\n \"y\": 0.8045546412467957,\n \"z\": 0.013180811889469624\n }, {\n \"x\": 0.6107483506202698,\n \"y\": 0.9680658578872681,\n \"z\": 0.001778992242179811\n }, {\n \"x\": 0.6060343980789185,\n \"y\": 0.744587242603302,\n \"z\": -0.024382334202528\n }, {\n \"x\": 0.6602751612663269,\n \"y\": 0.8998945355415344,\n \"z\": 0.0344940721988678\n }, {\n \"x\": 0.6463775038719177,\n \"y\": 0.9262562394142151,\n \"z\": 0.02617623284459114\n }, {\n \"x\": 0.6579852104187012,\n \"y\": 0.8602304458618164,\n \"z\": 0.021586716175079346\n }, {\n \"x\": 0.6926165223121643,\n \"y\": 0.8053340315818787,\n \"z\": 0.061075080186128616\n }, {\n \"x\": 0.6724731922149658,\n \"y\": 0.8594399690628052,\n \"z\": 0.03457934781908989\n }, {\n \"x\": 0.6975721716880798,\n \"y\": 0.8183245062828064,\n \"z\": 0.09300774335861206\n }, {\n \"x\": 0.6512877941131592,\n \"y\": 0.8258221745491028,\n \"z\": 0.006324059329926968\n }, {\n \"x\": 0.594887375831604,\n \"y\": 0.7148372530937195,\n \"z\": -0.026898479089140892\n }, {\n \"x\": 0.6017440557479858,\n \"y\": 0.7773507833480835,\n \"z\": -0.05312420800328255\n }, {\n \"x\": 0.6096571683883667,\n \"y\": 0.7806998491287231,\n \"z\": -0.037646256387233734\n }, {\n \"x\": 0.5952993035316467,\n \"y\": 0.7654367685317993,\n \"z\": -0.06398405134677887\n }, {\n \"x\": 0.5950021147727966,\n \"y\": 0.6201304793357849,\n \"z\": -0.009297547861933708\n }, {\n \"x\": 0.6165438890457153,\n \"y\": 0.6052900552749634,\n \"z\": -0.012455573305487633\n }, {\n \"x\": 0.6362661719322205,\n \"y\": 0.6015968918800354,\n \"z\": -0.011649220250546932\n }, {\n \"x\": 0.6522727608680725,\n \"y\": 0.6046400666236877,\n \"z\": -0.005903332494199276\n }, {\n \"x\": 0.6625409722328186,\n \"y\": 0.6128141283988953,\n \"z\": 0.0030042496509850025\n }, {\n \"x\": 0.6688099503517151,\n \"y\": 0.6457712054252625,\n \"z\": 0.026322703808546066\n }, {\n \"x\": 0.7013440728187561,\n \"y\": 0.6893666386604309,\n \"z\": 0.08984331786632538\n }, {\n \"x\": 0.6608623266220093,\n \"y\": 0.6749406456947327,\n \"z\": 0.0172116681933403\n }, {\n \"x\": 0.6482325196266174,\n \"y\": 0.6823726296424866,\n \"z\": 0.008881398476660252\n }, {\n \"x\": 0.6313265562057495,\n \"y\": 0.6842025518417358,\n \"z\": 0.0031308617908507586\n }, {\n \"x\": 0.6147016286849976,\n \"y\": 0.6809731721878052,\n \"z\": 0.0007630771724507213\n }, {\n \"x\": 0.6018834114074707,\n \"y\": 0.6755372285842896,\n \"z\": -0.0008834321051836014\n }, {\n \"x\": 0.5925027132034302,\n \"y\": 0.670681357383728,\n \"z\": -0.001968748401850462\n }, {\n \"x\": 0.700127363204956,\n \"y\": 0.6871103644371033,\n \"z\": 0.13980500400066376\n }, {\n \"x\": 0.6095665693283081,\n \"y\": 0.7853189706802368,\n \"z\": -0.03074747882783413\n }, {\n \"x\": 0.5880423784255981,\n \"y\": 0.7229287028312683,\n \"z\": -0.04691500961780548\n }, {\n \"x\": 0.5930182337760925,\n \"y\": 0.7811514139175415,\n \"z\": -0.06398335844278336\n }, {\n \"x\": 0.5867722034454346,\n \"y\": 0.7922660112380981,\n \"z\": -0.05794971063733101\n }, {\n \"x\": 0.5933279991149902,\n \"y\": 0.7842848896980286,\n \"z\": -0.05714067071676254\n }, {\n \"x\": 0.6063535809516907,\n \"y\": 0.7920218706130981,\n \"z\": -0.02590685710310936\n }, {\n \"x\": 0.5839452743530273,\n \"y\": 0.794978141784668,\n \"z\": -0.0615212507545948\n }, {\n \"x\": 0.5828126072883606,\n \"y\": 0.8000800013542175,\n \"z\": -0.0449722595512867\n }, {\n \"x\": 0.5909603834152222,\n \"y\": 0.6541213393211365,\n \"z\": 0.003991890233010054\n }, {\n \"x\": 0.5852181911468506,\n \"y\": 0.6602938771247864,\n \"z\": -0.004428438376635313\n }, {\n \"x\": 0.5825737714767456,\n \"y\": 0.6651063561439514,\n \"z\": -0.014345290139317513\n }, {\n \"x\": 0.6517343521118164,\n \"y\": 0.6362385153770447,\n \"z\": 0.012151890434324741\n }, {\n \"x\": 0.6615052819252014,\n \"y\": 0.6281577944755554,\n \"z\": 0.0123682152479887\n }, {\n \"x\": 0.4856873154640198,\n \"y\": 0.6568945646286011,\n \"z\": 0.000720038078725338\n }, {\n \"x\": 0.49988406896591187,\n \"y\": 0.6547410488128662,\n \"z\": 0.0006949726957827806\n }, {\n \"x\": 0.48438939452171326,\n \"y\": 0.6392973065376282,\n \"z\": 0.000705525919329375\n }, {\n \"x\": 0.47143134474754333,\n \"y\": 0.6589511632919312,\n \"z\": 0.0006980331381782889\n }, {\n \"x\": 0.48704618215560913,\n \"y\": 0.6752797961235046,\n \"z\": 0.0006921177846379578\n }, {\n \"x\": 0.6243702173233032,\n \"y\": 0.640461802482605,\n \"z\": -0.00006592126737814397\n }, {\n \"x\": 0.6390967965126038,\n \"y\": 0.6385173797607422,\n \"z\": -0.00016105435497593135\n }, {\n \"x\": 0.6230536699295044,\n \"y\": 0.6224825382232666,\n \"z\": -0.00016136496560648084\n }, {\n \"x\": 0.6095397472381592,\n \"y\": 0.641917884349823,\n \"z\": -0.0001803556369850412\n }, {\n \"x\": 0.6250996589660645,\n \"y\": 0.6586247682571411,\n \"z\": -0.0001785515050869435\n }]],\n \"faceBlendshapes\": [{\n \"categories\": [{\n \"index\": 0,\n \"score\": 0.000005187174338061595,\n \"categoryName\": \"_neutral\",\n \"displayName\": \"\"\n }, {\n \"index\": 1,\n \"score\": 0.24521504342556,\n \"categoryName\": \"browDownLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 2,\n \"score\": 0.1987743377685547,\n \"categoryName\": \"browDownRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 3,\n \"score\": 0.013400448486208916,\n \"categoryName\": \"browInnerUp\",\n \"displayName\": \"\"\n }, {\n \"index\": 4,\n \"score\": 0.012361560948193073,\n \"categoryName\": \"browOuterUpLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 5,\n \"score\": 0.019305096939206123,\n \"categoryName\": \"browOuterUpRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 6,\n \"score\": 0.000028426356948330067,\n \"categoryName\": \"cheekPuff\",\n \"displayName\": \"\"\n }, {\n \"index\": 7,\n \"score\": 3.4500112633395474e-7,\n \"categoryName\": \"cheekSquintLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 8,\n \"score\": 4.83789051486383e-7,\n \"categoryName\": \"cheekSquintRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 9,\n \"score\": 0.07650448381900787,\n \"categoryName\": \"eyeBlinkLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 10,\n \"score\": 0.05070012807846069,\n \"categoryName\": \"eyeBlinkRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 11,\n \"score\": 0.13978900015354156,\n \"categoryName\": \"eyeLookDownLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 12,\n \"score\": 0.14198613166809082,\n \"categoryName\": \"eyeLookDownRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 13,\n \"score\": 0.2177766114473343,\n \"categoryName\": \"eyeLookInLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 14,\n \"score\": 0.014739357866346836,\n \"categoryName\": \"eyeLookInRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 15,\n \"score\": 0.02361512929201126,\n \"categoryName\": \"eyeLookOutLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 16,\n \"score\": 0.19679604470729828,\n \"categoryName\": \"eyeLookOutRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 17,\n \"score\": 0.04874616861343384,\n \"categoryName\": \"eyeLookUpLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 18,\n \"score\": 0.049392376095056534,\n \"categoryName\": \"eyeLookUpRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 19,\n \"score\": 0.34944331645965576,\n \"categoryName\": \"eyeSquintLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 20,\n \"score\": 0.2939716875553131,\n \"categoryName\": \"eyeSquintRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 21,\n \"score\": 0.005955042317509651,\n \"categoryName\": \"eyeWideLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 22,\n \"score\": 0.006776117719709873,\n \"categoryName\": \"eyeWideRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 23,\n \"score\": 0.000016942436559475027,\n \"categoryName\": \"jawForward\",\n \"displayName\": \"\"\n }, {\n \"index\": 24,\n \"score\": 0.0045165494084358215,\n \"categoryName\": \"jawLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 25,\n \"score\": 0.07803940027952194,\n \"categoryName\": \"jawOpen\",\n \"displayName\": \"\"\n }, {\n \"index\": 26,\n \"score\": 0.00002090057751047425,\n \"categoryName\": \"jawRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 27,\n \"score\": 0.06032035872340202,\n \"categoryName\": \"mouthClose\",\n \"displayName\": \"\"\n }, {\n \"index\": 28,\n \"score\": 0.00228882092051208,\n \"categoryName\": \"mouthDimpleLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 29,\n \"score\": 0.00781762320548296,\n \"categoryName\": \"mouthDimpleRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 30,\n \"score\": 0.0017093931091949344,\n \"categoryName\": \"mouthFrownLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 31,\n \"score\": 0.0019319106359034777,\n \"categoryName\": \"mouthFrownRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 32,\n \"score\": 0.00008485237776767462,\n \"categoryName\": \"mouthFunnel\",\n \"displayName\": \"\"\n }, {\n \"index\": 33,\n \"score\": 0.0009051355300471187,\n \"categoryName\": \"mouthLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 34,\n \"score\": 0.0003630454302765429,\n \"categoryName\": \"mouthLowerDownLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 35,\n \"score\": 0.00017601238505449146,\n \"categoryName\": \"mouthLowerDownRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 36,\n \"score\": 0.12865161895751953,\n \"categoryName\": \"mouthPressLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 37,\n \"score\": 0.20137207210063934,\n \"categoryName\": \"mouthPressRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 38,\n \"score\": 0.0022203284315764904,\n \"categoryName\": \"mouthPucker\",\n \"displayName\": \"\"\n }, {\n \"index\": 39,\n \"score\": 0.0009096377179957926,\n \"categoryName\": \"mouthRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 40,\n \"score\": 0.34189721941947937,\n \"categoryName\": \"mouthRollLower\",\n \"displayName\": \"\"\n }, {\n \"index\": 41,\n \"score\": 0.11409689486026764,\n \"categoryName\": \"mouthRollUpper\",\n \"displayName\": \"\"\n }, {\n \"index\": 42,\n \"score\": 0.17172536253929138,\n \"categoryName\": \"mouthShrugLower\",\n \"displayName\": \"\"\n }, {\n \"index\": 43,\n \"score\": 0.004038424696773291,\n \"categoryName\": \"mouthShrugUpper\",\n \"displayName\": \"\"\n }, {\n \"index\": 44,\n \"score\": 0.00023205230536404997,\n \"categoryName\": \"mouthSmileLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 45,\n \"score\": 0.00019313619122840464,\n \"categoryName\": \"mouthSmileRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 46,\n \"score\": 0.0018571305554360151,\n \"categoryName\": \"mouthStretchLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 47,\n \"score\": 0.0023813238367438316,\n \"categoryName\": \"mouthStretchRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 48,\n \"score\": 0.000024323100660694763,\n \"categoryName\": \"mouthUpperUpLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 49,\n \"score\": 0.00003161552012898028,\n \"categoryName\": \"mouthUpperUpRight\",\n \"displayName\": \"\"\n }, {\n \"index\": 50,\n \"score\": 1.08198406678639e-7,\n \"categoryName\": \"noseSneerLeft\",\n \"displayName\": \"\"\n }, {\n \"index\": 51,\n \"score\": 0.0000012652527630052646,\n \"categoryName\": \"noseSneerRight\",\n \"displayName\": \"\"\n }],\n \"headIndex\": -1,\n \"headName\": \"\"\n }],\n \"facialTransformationMatrixes\": [{\n \"rows\": 4,\n \"columns\": 4,\n \"data\": [0.9947517514228821, 0.10230544209480286, 0.0013679931871592999, 0, -0.10230997204780579, 0.9947447776794434, 0.003816320328041911, 0, -0.000970348424743861, -0.0039362297393381596, 0.9999914169311523, 0, 2.8888821601867676, -7.808934211730957, -30.52109146118164, 1]\n }]\n }\n};\n\nexport { Facemesh, FacemeshDatas, FacemeshEye, FacemeshEyeDefaults };\n","import * as React from 'react';\nimport { forwardRef, useEffect, useImperativeHandle, useContext, createContext } from 'react';\nimport { suspend, clear } from 'suspend-react';\n\n/* eslint react-hooks/exhaustive-deps: 1 */\nconst FaceLandmarkerContext = /* @__PURE__ */createContext({});\nconst FaceLandmarkerDefaults = {\n basePath: 'https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.17/wasm',\n options: {\n baseOptions: {\n modelAssetPath: 'https://storage.googleapis.com/mediapipe-models/face_landmarker/face_landmarker/float16/1/face_landmarker.task',\n delegate: 'GPU'\n },\n runningMode: 'VIDEO',\n outputFaceBlendshapes: true,\n outputFacialTransformationMatrixes: true\n }\n};\nconst FaceLandmarker = /*#__PURE__*/forwardRef(({\n basePath = FaceLandmarkerDefaults.basePath,\n options = FaceLandmarkerDefaults.options,\n children\n}, fref) => {\n const opts = JSON.stringify(options);\n const faceLandmarker = suspend(async () => {\n const {\n FilesetResolver,\n FaceLandmarker\n } = await import('@mediapipe/tasks-vision');\n const vision = await FilesetResolver.forVisionTasks(basePath);\n return FaceLandmarker.createFromOptions(vision, options);\n }, [basePath, opts]);\n useEffect(() => {\n return () => {\n faceLandmarker == null || faceLandmarker.close();\n clear([basePath, opts]);\n };\n }, [faceLandmarker, basePath, opts]);\n useImperativeHandle(fref, () => faceLandmarker, [faceLandmarker]); // expose faceLandmarker through ref\n\n return /*#__PURE__*/React.createElement(FaceLandmarkerContext.Provider, {\n value: faceLandmarker\n }, children);\n});\nfunction useFaceLandmarker() {\n return useContext(FaceLandmarkerContext);\n}\n\nexport { FaceLandmarker, FaceLandmarkerDefaults, useFaceLandmarker };\n","import _extends from '@babel/runtime/helpers/esm/extends';\nimport * as THREE from 'three';\nimport * as React from 'react';\nimport { forwardRef, useRef, useState, useCallback, useMemo, useImperativeHandle, useEffect, Suspense, useContext, createContext } from 'react';\nimport { useThree, useFrame } from '@react-three/fiber';\nimport { easing } from 'maath';\nimport { VideoTexture } from '../core/VideoTexture.js';\nimport { WebcamVideoTexture } from './WebcamVideoTexture.js';\nimport { Facemesh } from './Facemesh.js';\nimport { useFaceLandmarker } from './FaceLandmarker.js';\n\nfunction mean(v1, v2) {\n return v1.clone().add(v2).multiplyScalar(0.5);\n}\nfunction localToLocal(objSrc, v, objDst) {\n // see: https://discourse.threejs.org/t/object3d-localtolocal/51564\n const v_world = objSrc.localToWorld(v);\n return objDst.worldToLocal(v_world);\n}\n\n//\n//\n//\n\nconst FaceControlsContext = /* @__PURE__ */createContext({});\n\n/**\n * The camera follows your face.\n *\n * Pre-requisite: wrap into a `FaceLandmarker` provider:\n *\n * ```jsx\n * <FaceLandmarker>...</FaceLandmarker>\n * ```\n */\n\nconst FaceControls = /* @__PURE__ */forwardRef(({\n camera,\n videoTexture = {\n start: true\n },\n manualDetect = false,\n faceLandmarkerResult,\n manualUpdate = false,\n makeDefault,\n smoothTime = 0.25,\n offset = true,\n offsetScalar = 80,\n eyes = false,\n eyesAsOrigin = true,\n depth = 0.15,\n debug = false,\n facemesh\n}, fref) => {\n var _result$facialTransfo, _result$faceBlendshap;\n const scene = useThree(state => state.scene);\n const defaultCamera = useThree(state => state.camera);\n const set = useThree(state => state.set);\n const get = useThree(state => state.get);\n const explCamera = camera || defaultCamera;\n const facemeshApiRef = useRef(null);\n\n //\n // computeTarget()\n //\n // Compute `target` position and rotation for the camera (according to <Facemesh>)\n //\n // 1. 👀 either following the 2 eyes\n // 2. 👤 or just the head mesh\n //\n\n const [target] = useState(() => new THREE.Object3D());\n const [irisRightDirPos] = useState(() => new THREE.Vector3());\n const [irisLeftDirPos] = useState(() => new THREE.Vector3());\n const [irisRightLookAt] = useState(() => new THREE.Vector3());\n const [irisLeftLookAt] = useState(() => new THREE.Vector3());\n const computeTarget = useCallback(() => {\n // same parent as the camera\n target.parent = explCamera.parent;\n const facemeshApi = facemeshApiRef.current;\n if (facemeshApi) {\n const {\n outerRef,\n eyeRightRef,\n eyeLeftRef\n } = facemeshApi;\n if (eyeRightRef.current && eyeLeftRef.current) {\n // 1. 👀\n\n const {\n irisDirRef: irisRightDirRef\n } = eyeRightRef.current;\n const {\n irisDirRef: irisLeftDirRef\n } = eyeLeftRef.current;\n if (irisRightDirRef.current && irisLeftDirRef.current && outerRef.current) {\n //\n // position: mean of irisRightDirPos,irisLeftDirPos\n //\n irisRightDirPos.copy(localToLocal(irisRightDirRef.current, new THREE.Vector3(0, 0, 0), outerRef.current));\n irisLeftDirPos.copy(localToLocal(irisLeftDirRef.current, new THREE.Vector3(0, 0, 0), outerRef.current));\n target.position.copy(localToLocal(outerRef.current, mean(irisRightDirPos, irisLeftDirPos), explCamera.parent || scene));\n\n //\n // lookAt: mean of irisRightLookAt,irisLeftLookAt\n //\n irisRightLookAt.copy(localToLocal(irisRightDirRef.current, new THREE.Vector3(0, 0, 1), outerRef.current));\n irisLeftLookAt.copy(localToLocal(irisLeftDirRef.current, new THREE.Vector3(0, 0, 1), outerRef.current));\n target.lookAt(outerRef.current.localToWorld(mean(irisRightLookAt, irisLeftLookAt)));\n }\n } else {\n // 2. 👤\n\n if (outerRef.current) {\n target.position.copy(localToLocal(outerRef.current, new THREE.Vector3(0, 0, 0), explCamera.parent || scene));\n target.lookAt(outerRef.current.localToWorld(new THREE.Vector3(0, 0, 1)));\n }\n }\n }\n return target;\n }, [explCamera, irisLeftDirPos, irisLeftLookAt, irisRightDirPos, irisRightLookAt, scene, target]);\n\n //\n // update()\n //\n // Updating the camera `current` position and rotation, following `target`\n //\n\n const [current] = useState(() => new THREE.Object3D());\n const update = useCallback(function (delta, target) {\n if (explCamera) {\n var _target;\n (_target = target) !== null && _target !== void 0 ? _target : target = computeTarget();\n if (smoothTime > 0) {\n // damping current\n const eps = 1e-9;\n easing.damp3(current.position, target.position, smoothTime, delta, undefined, undefined, eps);\n easing.dampE(current.rotation, target.rotation, smoothTime, delta, undefined, undefined, eps);\n } else {\n // instant\n current.position.copy(target.position);\n current.rotation.copy(target.rotation);\n }\n explCamera.position.copy(current.position);\n explCamera.rotation.copy(current.rotation);\n }\n }, [explCamera, computeTarget, smoothTime, current.position, current.rotation]);\n useFrame((_, delta) => {\n if (manualUpdate) return;\n update(delta);\n });\n\n //\n // onVideoFrame (only used if !manualDetect)\n //\n\n const videoTextureRef = useRef(null);\n const [_faceLandmarkerResult, setFaceLandmarkerResult] = useState();\n const faceLandmarker = useFaceLandmarker();\n const onVideoFrame = useCallback((now, metadata) => {\n const texture = videoTextureRef.current;\n if (!texture) return;\n const videoFrame = texture.source.data;\n const result = faceLandmarker == null ? void 0 : faceLandmarker.detectForVideo(videoFrame, now);\n setFaceLandmarkerResult(result);\n }, [faceLandmarker]);\n\n //\n // Ref API\n //\n\n const api = useMemo(() => Object.assign(Object.create(THREE.EventDispatcher.prototype), {\n computeTarget,\n update,\n facemeshApiRef\n }), [computeTarget, update]);\n useImperativeHandle(fref, () => api, [api]);\n\n //\n // makeDefault (`controls` global state)\n //\n\n useEffect(() => {\n if (makeDefault) {\n const old = get().controls;\n set({\n controls: api\n });\n return () => set({\n controls: old\n });\n }\n }, [makeDefault, api, get, set]);\n\n //\n //\n //\n\n const result = faceLandmarkerResult !== null && faceLandmarkerResult !== void 0 ? faceLandmarkerResult : _faceLandmarkerResult;\n const points = result == null ? void 0 : result.faceLandmarks[0];\n const facialTransformationMatrix = result == null || (_result$facialTransfo = result.facialTransformationMatrixes) == null ? void 0 : _result$facialTransfo[0];\n const faceBlendshapes = result == null || (_result$faceBlendshap = result.faceBlendshapes) == null ? void 0 : _result$faceBlendshap[0];\n const videoTextureProps = {\n onVideoFrame,\n ...videoTexture\n };\n return /*#__PURE__*/React.createElement(FaceControlsContext.Provider, {\n value: api\n }, !manualDetect && /*#__PURE__*/React.createElement(Suspense, {\n fallback: null\n }, 'src' in videoTextureProps ? /*#__PURE__*/React.createElement(VideoTexture, _extends({\n ref: videoTextureRef\n }, videoTextureProps)) : /*#__PURE__*/React.createElement(WebcamVideoTexture, _extends({\n ref: videoTextureRef\n }, videoTextureProps))), /*#__PURE__*/React.createElement(Facemesh, _extends({\n ref: facemeshApiRef,\n children: /*#__PURE__*/React.createElement(\"meshNormalMaterial\", {\n side: THREE.DoubleSide\n })\n }, facemesh, {\n points: points,\n depth: depth,\n facialTransformationMatrix: facialTransformationMatrix,\n faceBlendshapes: faceBlendshapes,\n eyes: eyes,\n eyesAsOrigin: eyesAsOrigin,\n offset: offset,\n offsetScalar: offsetScalar,\n debug: debug,\n \"rotation-z\": Math.PI,\n visible: debug\n })));\n});\nconst useFaceControls = () => useContext(FaceControlsContext);\n\nexport { FaceControls, useFaceControls };\n"],"x_google_ignoreList":[27,276,277],"mappings":"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AI,GAAG,IAAI,OAAO,KAAK;KAC9B,MAAM,WAAW,WAAW,KAAK,OAAO;KACxC,MAAM,MAAM,IAAI,KAAK,YAAY,KAAK;KACtC,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KAGzB,YAFY,IAAI,KAAK,YAAY,KAAK,UAEvB,IAAI,IADT,WAAW,GACK,KAAK,SAAS;IAE5C;GACF;GACA,KAAK,SAAS,aAAa,GAAG,KAAK,KAAK;GACxC,SAAS,aAAa,UAAU,EAAE,cAAc;GAChD,SAAS,aAAa,QAAQ,EAAE,cAAc;GAC9C,IAAI,KAAK,WACP,SAAS,aAAa,IAAI,EAAE,cAAc;GAC5C,IAAI,KAAK,cACP,SAAS,aAAa,OAAO,EAAE,cAAc;GAC/C,IAAI,KAAK,QAAQ,IAAI,cACnB,QAAQ,KACN,oHACF;EACJ;EACA,KAAK,KAAK,UAAU;CACtB;AACF;AACA,IAAM,YAAY,IAAI,WAAW;CAC/B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,IAAM,WAAW,IAAI,WAAW;CAC9B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;;;ACnsJD,IAAIC,eAAY,OAAO;AACvB,IAAIC,sBAAmB,KAAK,KAAK,UAAU,OAAO,MAAMD,aAAU,KAAK,KAAK;CAAE,YAAY;CAAM,cAAc;CAAM,UAAU;CAAM;AAAM,CAAC,IAAI,IAAI,OAAO;AAC1J,IAAIE,oBAAiB,KAAK,KAAK,UAAU;CACvC,mBAAgB,KAAK,OAAO,QAAQ,WAAW,MAAM,KAAK,KAAK,KAAK;CACpE,OAAO;AACT;AACA,IAAM,eAAN,MAAmB;;;;;CAKjB,YAAY,IAAI,MAAM;EACpB,iBAAc,MAAM,SAAS;GAC3B;IAAC;IAAG;IAAG;GAAC;GACR;IAAC;IAAI;IAAG;GAAC;GACT;IAAC;IAAG;IAAI;GAAC;GACT;IAAC;IAAI;IAAI;GAAC;GACV;IAAC;IAAG;IAAG;GAAC;GACR;IAAC;IAAI;IAAG;GAAC;GACT;IAAC;IAAG;IAAG;GAAE;GACT;IAAC;IAAI;IAAG;GAAE;GACV;IAAC;IAAG;IAAG;GAAC;GACR;IAAC;IAAG;IAAI;GAAC;GACT;IAAC;IAAG;IAAG;GAAE;GACT;IAAC;IAAG;IAAI;GAAE;EACZ,CAAC;EACD,iBAAc,MAAM,SAAS;GAC3B;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAE;GACZ;IAAC;IAAG;IAAG;IAAI;GAAC;GACZ;IAAC;IAAG;IAAG;IAAI;GAAE;GACb;IAAC;IAAG;IAAI;IAAG;GAAC;GACZ;IAAC;IAAG;IAAI;IAAG;GAAE;GACb;IAAC;IAAG;IAAI;IAAI;GAAC;GACb;IAAC;IAAG;IAAI;IAAI;GAAE;GACd;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAE;GACZ;IAAC;IAAG;IAAG;IAAI;GAAC;GACZ;IAAC;IAAG;IAAG;IAAI;GAAE;GACb;IAAC;IAAI;IAAG;IAAG;GAAC;GACZ;IAAC;IAAI;IAAG;IAAG;GAAE;GACb;IAAC;IAAI;IAAG;IAAI;GAAC;GACb;IAAC;IAAI;IAAG;IAAI;GAAE;GACd;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAE;GACZ;IAAC;IAAG;IAAI;IAAG;GAAC;GACZ;IAAC;IAAG;IAAI;IAAG;GAAE;GACb;IAAC;IAAI;IAAG;IAAG;GAAC;GACZ;IAAC;IAAI;IAAG;IAAG;GAAE;GACb;IAAC;IAAI;IAAI;IAAG;GAAC;GACb;IAAC;IAAI;IAAI;IAAG;GAAE;GACd;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAI;GAAC;GACZ;IAAC;IAAG;IAAI;IAAG;GAAC;GACZ;IAAC;IAAG;IAAI;IAAI;GAAC;GACb;IAAC;IAAI;IAAG;IAAG;GAAC;GACZ;IAAC;IAAI;IAAG;IAAI;GAAC;GACb;IAAC;IAAI;IAAI;IAAG;GAAC;GACb;IAAC;IAAI;IAAI;IAAI;GAAC;EAChB,CAAC;EACD,iBAAc,MAAM,KAAK,CAAC,CAAC;EAE3B,iBAAc,MAAM,QAAQ,CAAC,CAAC;EAG9B,iBAAc,MAAM,WAAW;GAC7B;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;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AAI,EAAE;GAC9B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,EAAE;GAC9B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;EACjC;EACA,SAAS,WAAW,MAAM;GACxB,MAAM,IAAI,KAAM,KAAK,IAAI,UAAU,CAAC;GACpC,MAAM,IAAI,KAAM,KAAK,IAAI,UAAU,EAAE;GACrC,MAAM,IAAI,KAAM,KAAK,IAAI,UAAU,CAAC;GACpC,MAAM,IAAI,KAAM,KAAK,IAAI,IAAI,UAAU,EAAE;GACzC,MAAM,IAAI,KAAM,KAAK,IAAI,IAAI,UAAU,EAAE;GACzC,MAAM,IAAI,KAAM,KAAK,IAAI,IAAI,UAAU,CAAC;GACxC,MAAM,IAAI,KAAM,KAAK,IAAI,IAAI,UAAU,EAAE;GACzC,IAAI,QAAQ,IAAI,MAAM,CAAC;GACvB,IAAI,OAAO,IAAI,MAAM,CAAC;GACtB,IAAI,QAAQ,IAAI,MAAM,CAAC;GACvB,IAAI,QAAQ,IAAI,MAAM,CAAC;GACvB,KAAK,IAAI,MAAM,GAAG,MAAM,GAAG,EAAE,KAAK;IAChC,IAAI,SAAS,MAAM;IACnB,MAAM,KAAK,IAAI,KAAK,SAAS;IAC7B,MAAM,KAAK,IAAI,KAAK,SAAS;IAC7B,MAAM,KAAK,IAAI,KAAK,SAAS;IAC7B,MAAM,KAAK,IAAI,KAAK,SAAS;IAC7B,KAAK,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS;IACjG,KAAK,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS;IACjG,KAAK,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS;IACjG,KAAK,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS;IACjG,MAAM,KAAK,KAAK,KAAK,SAAS,KAAK,KAAK,SAAS;IACjD,MAAM,KAAK,KAAK,KAAK,SAAS,KAAK,KAAK,SAAS;IACjD,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,KAAK,SAAS,KAAK,MAAM,KAAK,KAAK;IACnC,KAAK,SAAS,KAAK,MAAM,KAAK,KAAK;IACnC,KAAK,SAAS,KAAK,MAAM,KAAK,KAAK;IACnC,KAAK,SAAS,KAAK,MAAM,KAAK,KAAK;IACnC,KAAK,SAAS,KAAK,MAAM,KAAK,KAAK;IACnC,KAAK,SAAS,KAAK,MAAM,KAAK,KAAK;IACnC,KAAK,SAAS,KAAK,MAAM,KAAK,KAAK;IACnC,KAAK,SAAS,KAAK,MAAM,KAAK,KAAK;GACrC;GACA,KAAK,IAAI,SAAS,GAAG,SAAS,GAAG,EAAE,QAAQ;IACzC,MAAM,KAAK,IAAI,KAAK,KAAK;IACzB,MAAM,KAAK,IAAI,KAAK,KAAK;IACzB,MAAM,KAAK,IAAI,KAAK,KAAK;IACzB,MAAM,KAAK,IAAI,KAAK,KAAK;IACzB,KAAK,KAAK,IAAI,KAAK,IAAI,UAAU,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK;IAC/F,KAAK,KAAK,IAAI,KAAK,IAAI,UAAU,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK;IAC/F,KAAK,KAAK,IAAI,KAAK,IAAI,UAAU,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK;IAC/F,KAAK,KAAK,IAAI,KAAK,IAAI,UAAU,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK;IAC/F,MAAM,KAAK,KAAK,KAAK,UAAU,KAAK,KAAK;IACzC,MAAM,KAAK,KAAK,KAAK,UAAU,KAAK,KAAK;IACzC,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,KAAK,IAAI,UAAU,MAAM,KAAK,KAAK;IACnC,KAAK,IAAI,UAAU,MAAM,KAAK,KAAK;IACnC,KAAK,KAAK,UAAU,MAAM,KAAK,KAAK;IACpC,KAAK,KAAK,UAAU,MAAM,KAAK,KAAK;IACpC,KAAK,KAAK,UAAU,MAAM,KAAK,KAAK;IACpC,KAAK,KAAK,UAAU,MAAM,KAAK,KAAK;IACpC,KAAK,KAAK,UAAU,MAAM,KAAK,KAAK;IACpC,KAAK,KAAK,UAAU,MAAM,KAAK,KAAK;GACtC;EACF;EACA,SAAS,cAAc,MAAM;GAC3B,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,GAAG;IAC3B,IAAI,IAAI,KAAK,GAAG;IAChB,IAAI,KAAK,KAAK,GAAG;IACjB,IAAI,KAAK,KAAK,GAAG;IACjB,KAAK,GAAG,KAAK,IAAI,SAAS;IAC1B,KAAK,GAAG,KAAK,IAAI,QAAS,KAAK,QAAS;IACxC,KAAK,GAAG,KAAK,IAAI,SAAS;GAC5B;EACF;EACA,SAAS,cAAc,KAAK,KAAK,KAAK;GACpC,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,GACxB,IAAI,MAAM,KAAK,UAAU,YAAY,SAAS,IAAI,EAAE,CAAC;EAEzD;EACA,SAAS,SAAS,OAAO;GACvB,IAAI,SAAS,GACX,OAAO,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,GAAG;QAEvD,OAAO,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,SAAS,KAAK,IAAI,KAAK,IAAI,CAAC;EAEnE;EACA,SAAS,cAAc,MAAM;GAC3B,OAAO,IAAI,SAAS,KAAK,MAAM,QAAQ,KAAK,OAAO,OAAO,KAAK,IAAI;EACrE;EACA,SAAS,cAAc,MAAM;GAC3B,IAAI,aAAa,KAAK,OAAO,OAAO,MAAM,KAAK,OAAO,OAAO,KAAK,OAAO,QAAQ,KAAK,IAAI;GAC1F,IAAI,YAAY,IAAI,WAAW,gBAAgB,UAAU,CAAC;GAC1D,IAAI,YAAY,IAAI,WAAW,UAAU,MAAM;GAC/C,UAAU,SAAS;GACnB,iBAAiB,WAAW,SAAS;GACrC,OAAO,IAAI,SAAS,UAAU,MAAM;EACtC;EACA,SAAS,cAAc,MAAM;GAE3B,IAAI,YAAY,WADC,KAAK,MAAM,MAAM,KAAK,OAAO,OAAO,KAAK,OAAO,QAAQ,KAAK,IAC1C,CAAC;GACrC,IAAI,YAAY,IAAI,WAAW,UAAU,MAAM;GAC/C,UAAU,SAAS;GACnB,iBAAiB,WAAW,SAAS;GACrC,OAAO,IAAI,SAAS,UAAU,MAAM;EACtC;EACA,SAAS,cAAc,MAAM;GAC3B,IAAI,aAAa,KAAK;GACtB,IAAI,WAAW,EAAE,OAAO,KAAK,OAAO,MAAM;GAC1C,IAAI,YAAY,IAAI,YAAY,KAAK,QAAQ,KAAK,qBAAqB,KAAK,WAAW,KAAK,KAAK;GACjG,IAAI,SAAS,IAAI,WAAW,WAAW;GACvC,IAAI,eAAe;GACnB,IAAI,iBAAiB,IAAI,MAAM,KAAK,QAAQ;GAC5C,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,UAAU,KAAK;IACtC,eAAe,KAAK,CAAC;IACrB,eAAe,GAAG,WAAW;IAC7B,eAAe,GAAG,SAAS,eAAe,GAAG;IAC7C,eAAe,GAAG,QAAQ,KAAK;IAC/B,eAAe,GAAG,QAAQ,KAAK;IAC/B,eAAe,GAAG,UAAU,KAAK;IACjC,gBAAgB,eAAe,GAAG,KAAK,eAAe,GAAG,KAAK,eAAe,GAAG;GAClF;GACA,IAAI,aAAa,YAAY,YAAY,QAAQ;GACjD,IAAI,aAAa,YAAY,YAAY,QAAQ;GACjD,IAAI,cAAc,aAChB,MAAM;GAER,IAAI,cAAc,YAChB,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,aAAa,GAAG,KAC/C,OAAO,IAAI,cAAc,WAAW,YAAY,QAAQ;GAG5D,IAAI,MAAM,IAAI,YAAY,YAAY;GACtC,IAAI,WAAW,qBAAqB,QAAQ,GAAG;GAC/C,IAAI,SAAS,YAAY,YAAY,QAAQ;GAC7C,cAAc,KAAK,OAAO,YAAY,UAAU,QAAQ,WAAW,YAAY;GAC/E,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,UAAU,EAAE,GAAG;IACtC,IAAI,KAAK,eAAe;IACxB,KAAK,IAAI,IAAI,GAAG,IAAI,eAAe,GAAG,MAAM,EAAE,GAC5C,WAAW,WAAW,GAAG,QAAQ,GAAG,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,QAAQ;GAExF;GACA,SAAS,KAAK,WAAW,YAAY;GACrC,IAAI,aAAa;GACjB,IAAI,YAAY,IAAI,WAAW,UAAU,OAAO,UAAU;GAC1D,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,OAAO,KAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,UAAU,KAAK;IACtC,IAAI,KAAK,eAAe;IACxB,IAAI,IAAI,GAAG,KAAK,GAAG;IACnB,IAAI,KAAK,IAAI,WAAW,UAAU,QAAQ,GAAG,MAAM,YAAY,IAAI,UAAU;IAC7E,UAAU,IAAI,IAAI,UAAU;IAC5B,cAAc,IAAI;IAClB,GAAG,OAAO;GACZ;GAEF,OAAO,IAAI,SAAS,UAAU,MAAM;EACtC;EACA,SAAS,cAAc,MAAM;GAE3B,IAAI,YAAY,WADC,KAAK,MAAM,MAAM,KAAK,OAAO,OAAO,KAAK,OAAO,QAAQ,KAAK,IAC1C,CAAC;GACrC,MAAM,KAAK,KAAK,QAAQ,KAAK,WAAW,KAAK;GAC7C,MAAM,YAAY,KAAK,QAAQ,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI,YAAY,EAAE;GAC3E,IAAI,eAAe;GACnB,IAAI,WAAW;GACf,MAAM,MAAM,IAAI,MAAM,CAAC;GACvB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,OAAO,KAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,UAAU,KAAK;IACtC,IAAI,QAAQ;IACZ,QAAQ,KAAK,MAAb;KACE,KAAK;MACH,IAAI,KAAK;MACT,IAAI,KAAK,IAAI,KAAK,KAAK;MACvB,eAAe,IAAI,KAAK,KAAK;MAC7B,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,OAAO,EAAE,GAAG;OACnC,MAAM,OAAO,UAAU,IAAI,SAAS,IAAI,UAAU,IAAI;OACtD,SAAS;OACT,UAAU,YAAY;OACtB;MACF;MACA;KACF,KAAK;MACH,IAAI,KAAK;MACT,IAAI,KAAK,IAAI,KAAK,KAAK;MACvB,IAAI,KAAK,IAAI,KAAK,KAAK;MACvB,eAAe,IAAI,KAAK,KAAK;MAC7B,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,OAAO,EAAE,GAAG;OACnC,MAAM,OAAO,UAAU,IAAI,SAAS,KAAK,UAAU,IAAI,SAAS,KAAK,UAAU,IAAI,SAAS;OAC5F,SAAS;OACT,UAAU,YAAY;OACtB;MACF;MACA;IACJ;GACF;GAEF,OAAO,IAAI,SAAS,UAAU,MAAM;EACtC;EACA,SAAS,cAAc,MAAM;GAC3B,IAAI,aAAa,KAAK;GACtB,IAAI,WAAW,EAAE,OAAO,KAAK,OAAO,MAAM;GAC1C,IAAI,YAAY,IAAI,WAAW,KAAK,QAAQ,KAAK,SAAS,KAAK,WAAW,KAAK,OAAO,WAAW;GACjG,IAAI,YAAY;IACd,SAAS,WAAW,YAAY,QAAQ;IACxC,yBAAyB,WAAW,YAAY,QAAQ;IACxD,uBAAuB,WAAW,YAAY,QAAQ;IACtD,kBAAkB,WAAW,YAAY,QAAQ;IACjD,kBAAkB,WAAW,YAAY,QAAQ;IACjD,mBAAmB,WAAW,YAAY,QAAQ;IAClD,qBAAqB,WAAW,YAAY,QAAQ;IACpD,YAAY,WAAW,YAAY,QAAQ;IAC3C,0BAA0B,WAAW,YAAY,QAAQ;IACzD,0BAA0B,WAAW,YAAY,QAAQ;IACzD,eAAe,WAAW,YAAY,QAAQ;GAChD;GACA,IAAI,UAAU,UAAU,GACtB,MAAM,sBAAsB,UAAU,cAAc,cAAc,UAAU,UAAU;GAExF,IAAI,eAAe,IAAI,MAAM;GAC7B,IAAI,WAAW,YAAY,YAAY,QAAQ,IAAI;GACnD,OAAO,WAAW,GAAG;IACnB,IAAI,OAAO,0BAA0B,WAAW,QAAQ,QAAQ;IAChE,IAAI,QAAQ,WAAW,YAAY,QAAQ;IAC3C,IAAI,cAAc,SAAS,IAAI;IAC/B,IAAI,OAAO,SAAS,KAAK;IACzB,IAAI,QAAQ,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE;IACjC,IAAI,OAAO,WAAW,YAAY,QAAQ;IAC1C,aAAa,KAAK;KAChB;KACA;KACA;KACA;IACF,CAAC;IACD,YAAY,KAAK,SAAS;GAC5B;GACA,IAAI,WAAW,UAAU;GACzB,IAAI,cAAc,IAAI,MAAM,KAAK,QAAQ;GACzC,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,UAAU,EAAE,GAAG;IACtC,IAAI,KAAK,YAAY,KAAK,CAAC;IAC3B,IAAI,UAAU,SAAS;IACvB,GAAG,OAAO,QAAQ;IAClB,GAAG,cAAc;IACjB,GAAG,UAAU;IACb,GAAG,OAAO,QAAQ;IAClB,GAAG,UAAU,QAAQ;IACrB,GAAG,QAAQ,KAAK;IAChB,GAAG,SAAS,KAAK;GACnB;GACA,IAAI,SAAS,EACX,KAAK,IAAI,MAAM,CAAC,EAClB;GACA,KAAK,IAAI,UAAU,GAAG,UAAU,KAAK,UAAU,EAAE,SAAS;IACxD,IAAI,KAAK,YAAY;IACrB,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,EAAE,GAAG;KAC5C,IAAI,OAAO,aAAa;KACxB,IAAI,GAAG,QAAQ,KAAK,MAAM;MACxB,GAAG,cAAc,KAAK;MACtB,IAAI,KAAK,SAAS,GAChB,OAAO,IAAI,KAAK,SAAS;MAE3B,GAAG,SAAS;KACd;IACF;GACF;GACA,IAAI,UAAU,mBAAmB,GAC/B,QAAQ,UAAU,eAAlB;IACE,KAAK;KACH,IAAI,WAAW,IAAI,YAAY,UAAU,wBAAwB;KACjE,cACE,KAAK,OACL,YACA,UACA,UAAU,kBACV,UACA,UAAU,wBACZ;KACA;IACF,KAAK;KACH,IAAI,aAAa,KAAK,MAAM,MAAM,SAAS,OAAO,SAAS,QAAQ,UAAU,wBAAwB;KACrG,IAAI,OAAO,WAAW,UAAU;KAChC,IAAI,WAAW,IAAI,YAAY,KAAK,MAAM;KAC1C,SAAS,SAAS,UAAU;KAC5B;GACJ;GAEF,IAAI,UAAU,mBAAmB,GAAG;IAClC,IAAI,WAAW;KACb,OAAO,KAAK;KACZ,QAAQ;KACR,MAAM,UAAU;IAClB;IACA,IAAI,WAAW,IAAI,YAAY,cAAc,QAAQ,EAAE,MAAM;IAC7D,SAAS,SAAS,UAAU;GAC9B;GACA,IAAI,UAAU,aAAa,GAAG;IAC5B,IAAI,aAAa,KAAK,MAAM,MAAM,SAAS,OAAO,SAAS,QAAQ,UAAU,iBAAiB;IAC9F,IAAI,OAAO,WAAW,UAAU;IAChC,IAAI,YAAY,gBAAgB,KAAK,MAAM;IAC3C,SAAS,SAAS,UAAU;GAC9B;GACA,IAAI,eAAe;GACnB,IAAI,aAAa,IAAI,MAAM,YAAY,MAAM;GAC7C,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,EAAE,GACvC,WAAW,KAAK,IAAI,MAAM;GAE5B,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,OAAO,EAAE,GAChC,KAAK,IAAI,OAAO,GAAG,OAAO,YAAY,QAAQ,EAAE,MAAM;IACpD,WAAW,MAAM,KAAK,YAAY;IAClC,gBAAgB,YAAY,MAAM,QAAQ,KAAK,OAAO;GACxD;GAEF,eAAe,QAAQ,YAAY,aAAa,UAAU,UAAU,SAAS;GAC7E,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,QAAQ,EAAE,GAAG;IAC3C,IAAI,KAAK,YAAY;IACrB,IAAI,GAAG,SACL;IACF,QAAQ,GAAG,aAAX;KACE,KAAK;MACH,IAAI,MAAM;MACV,IAAI,YAAY;MAChB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,OAAO,EAAE,GAAG;OACnC,IAAI,iBAAiB,WAAW,GAAG;OACnC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,OAAO,EAAE,GAAG;QACjC,KAAK,IAAI,OAAO,GAAG,OAAO,aAAa,GAAG,MAAM,EAAE,MAChD,UAAU,oBAAoB,UAAU,YAAY,OAAO,GAAG,QAAQ,GAAG;QAE3E;OACF;OACA;MACF;MACA;KACF,KAAK;KACL,SACE,MAAM;IACV;GACF;GACA,OAAO,IAAI,SAAS,UAAU,MAAM;EACtC;EACA,SAAS,0BAA0B,SAAS,SAAS;GACnD,IAAI,aAAa,IAAI,WAAW,OAAO;GACvC,IAAI,YAAY;GAChB,OAAO,WAAW,QAAQ,QAAQ,cAAc,GAC9C,aAAa;GAEf,IAAI,cAAc,IAAI,YAAY,EAAE,OAAO,WAAW,MAAM,QAAQ,OAAO,QAAQ,QAAQ,SAAS,CAAC;GACrG,QAAQ,QAAQ,QAAQ,QAAQ,YAAY;GAC5C,OAAO;EACT;EACA,SAAS,uBAAuB,SAAS,SAAS,MAAM;GACtD,IAAI,cAAc,IAAI,YAAY,EAAE,OAAO,IAAI,WAAW,OAAO,EAAE,MAAM,QAAQ,OAAO,QAAQ,QAAQ,IAAI,CAAC;GAC7G,QAAQ,QAAQ,QAAQ,QAAQ;GAChC,OAAO;EACT;EACA,SAAS,cAAc,UAAU,SAAS;GAGxC,OAAO,CAFC,WAAW,UAAU,OAErB,GADA,YAAY,UAAU,OACnB,CAAC;EACd;EACA,SAAS,cAAc,UAAU,SAAS;GAGxC,OAAO,CAFC,YAAY,UAAU,OAEtB,GADA,YAAY,UAAU,OACnB,CAAC;EACd;EACA,SAAS,WAAW,UAAU,SAAS;GACrC,IAAI,QAAQ,SAAS,SAAS,QAAQ,OAAO,IAAI;GACjD,QAAQ,QAAQ,QAAQ,QAAQ;GAChC,OAAO;EACT;EACA,SAAS,YAAY,UAAU,SAAS;GACtC,IAAI,SAAS,SAAS,UAAU,QAAQ,OAAO,IAAI;GACnD,QAAQ,QAAQ,QAAQ,QAAQ;GAChC,OAAO;EACT;EACA,SAAS,gBAAgB,aAAa,SAAS;GAC7C,IAAI,QAAQ,YAAY,QAAQ;GAChC,QAAQ,QAAQ,QAAQ,QAAQ;GAChC,OAAO;EACT;EACA,SAAS,WAAW,UAAU,SAAS;GACrC,IAAI,QAAQ,SAAS,SAAS,QAAQ,KAAK;GAC3C,QAAQ,QAAQ,QAAQ,QAAQ;GAChC,OAAO;EACT;EACA,MAAM,aAAa,SAAS,UAAU,SAAS;GAC7C,IAAI;GACJ,IAAI,iBAAiB,SAAS,WAC5B,MAAM,OAAO,SAAS,YAAY,QAAQ,OAAO,IAAI,CAAC;QAEtD,MAAM,SAAS,UAAU,QAAQ,QAAQ,GAAG,IAAI,IAAI,OAAO,SAAS,UAAU,QAAQ,OAAO,IAAI,KAAK,EAAE;GAE1G,QAAQ,SAAS;GACjB,OAAO;EACT;EACA,SAAS,aAAa,UAAU,SAAS;GACvC,IAAI,QAAQ,SAAS,WAAW,QAAQ,OAAO,IAAI;GACnD,QAAQ,SAAS;GACjB,OAAO;EACT;EACA,SAAS,cAAc,UAAU,SAAS;GACxC,OAAO,UAAU,YAAY,aAAa,UAAU,OAAO,CAAC;EAC9D;EACA,SAAS,cAAc,QAAQ;GAC7B,IAAI,YAAY,SAAS,UAAU,IAAI,WAAW,SAAS;GAC3D,QAAQ,UAAU,KAAK,KAAK,MAAM,WAAW,aAAa,KAAK,WAAW,MAAM,WAAW,KAAK,IAAI,GAAG,WAAW,EAAE,KAAK,IAAI,WAAW,QAAQ,kBAAkB,WAAW;EAC/K;EACA,SAAS,YAAY,UAAU,SAAS;GACtC,IAAI,SAAS,SAAS,UAAU,QAAQ,OAAO,IAAI;GACnD,QAAQ,SAAS;GACjB,OAAO;EACT;EACA,SAAS,aAAa,SAAS,SAAS;GACtC,OAAO,cAAc,YAAY,SAAS,OAAO,CAAC;EACpD;EACA,SAAS,YAAY,UAAU,SAAS,SAAS,MAAM;GACrD,IAAI,cAAc,QAAQ;GAC1B,IAAI,WAAW,CAAC;GAChB,OAAO,QAAQ,QAAQ,cAAc,OAAO,GAAG;IAC7C,IAAI,OAAO,0BAA0B,SAAS,OAAO;IACrD,IAAI,YAAY,WAAW,UAAU,OAAO;IAC5C,IAAI,UAAU,WAAW,UAAU,OAAO;IAC1C,QAAQ,SAAS;IACjB,IAAI,YAAY,WAAW,UAAU,OAAO;IAC5C,IAAI,YAAY,WAAW,UAAU,OAAO;IAC5C,SAAS,KAAK;KACZ;KACA;KACA;KACA;KACA;IACF,CAAC;GACH;GACA,QAAQ,SAAS;GACjB,OAAO;EACT;EACA,SAAS,oBAAoB,UAAU,SAAS;GAS9C,OAAO;IACL,MATS,aAAa,UAAU,OAS7B;IACH,MATS,aAAa,UAAU,OAS7B;IACH,QATW,aAAa,UAAU,OAS7B;IACL,QATW,aAAa,UAAU,OAS7B;IACL,OATU,aAAa,UAAU,OAS7B;IACJ,OATU,aAAa,UAAU,OAS7B;IACJ,QATW,aAAa,UAAU,OAS7B;IACL,QATW,aAAa,UAAU,OAS7B;GACP;EACF;EACA,SAAS,iBAAiB,UAAU,SAAS;GAc3C,OAAO;IAZL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GAGoB,EADJ,WAAW,UAAU,OACL;EACpC;EACA,SAAS,WAAW,UAAU,SAAS;GAKrC,OAAO;IAAE,MAJE,YAAY,UAAU,OAIrB;IAAG,MAHJ,YAAY,UAAU,OAGf;IAAG,MAFV,YAAY,UAAU,OAET;IAAG,MADhB,YAAY,UAAU,OACH;GAAE;EAClC;EACA,SAAS,eAAe,UAAU,SAAS;GAGzC,OAAO,CAFW,cAEF,EADA,WAAW,UAAU,OACX;EAC5B;EACA,SAAS,SAAS,UAAU,SAAS;GAGnC,OAAO,CAFC,aAAa,UAAU,OAEvB,GADA,aAAa,UAAU,OACpB,CAAC;EACd;EACA,SAAS,SAAS,UAAU,SAAS;GAInC,OAAO;IAHC,aAAa,UAAU,OAGvB;IAFA,aAAa,UAAU,OAEpB;IADH,aAAa,UAAU,OACjB;GAAC;EACjB;EACA,SAAS,WAAW,UAAU,SAAS,SAAS,MAAM,MAAM;GAC1D,IAAI,SAAS,YAAY,SAAS,kBAAkB,SAAS,cAC3D,OAAO,uBAAuB,SAAS,SAAS,IAAI;QAC/C,IAAI,SAAS,UAClB,OAAO,YAAY,UAAU,SAAS,SAAS,IAAI;QAC9C,IAAI,SAAS,kBAClB,OAAO,oBAAoB,UAAU,OAAO;QACvC,IAAI,SAAS,eAClB,OAAO,iBAAiB,UAAU,OAAO;QACpC,IAAI,SAAS,SAClB,OAAO,WAAW,UAAU,OAAO;QAC9B,IAAI,SAAS,aAClB,OAAO,eAAe,UAAU,OAAO;QAClC,IAAI,SAAS,SAClB,OAAO,aAAa,UAAU,OAAO;QAChC,IAAI,SAAS,OAClB,OAAO,SAAS,UAAU,OAAO;QAC5B,IAAI,SAAS,OAClB,OAAO,SAAS,UAAU,OAAO;QAC5B,IAAI,SAAS,OAClB,OAAO,WAAW,UAAU,OAAO;QAC9B,IAAI,SAAS,YAClB,OAAO,cAAc,UAAU,OAAO;QACjC,IAAI,SAAS,YAClB,OAAO,cAAc,UAAU,OAAO;QACjC,IAAI,SAAS,WAAW;IAC7B,QAAQ,SAAS;IACjB,OAAO;GACT,OAAO;IACL,QAAQ,SAAS;IACjB;GACF;EACF;EACA,SAAS,YAAY,UAAU,SAAS,SAAS;GAC/C,MAAM,aAAa,CAAC;GACpB,IAAI,SAAS,UAAU,GAAG,IAAI,KAAK,UACjC,MAAM;GAER,WAAW,UAAU,SAAS,SAAS,CAAC;GACxC,MAAM,OAAO,SAAS,SAAS,CAAC;GAChC,WAAW,OAAO;IAChB,YAAY,CAAC,EAAE,OAAO;IACtB,UAAU,CAAC,EAAE,OAAO;IACpB,YAAY,CAAC,EAAE,OAAO;IACtB,WAAW,CAAC,EAAE,OAAO;GACvB;GACA,QAAQ,QAAQ;GAChB,IAAI,cAAc;GAClB,OAAO,aAAa;IAClB,IAAI,gBAAgB,0BAA0B,SAAS,OAAO;IAC9D,IAAI,iBAAiB,GACnB,cAAc;SACT;KACL,IAAI,gBAAgB,0BAA0B,SAAS,OAAO;KAE9D,IAAI,iBAAiB,WAAW,UAAU,SAAS,SAAS,eADxC,YAAY,UAAU,OAC6C,CAAC;KACxF,IAAI,mBAAmB,KAAK,GAC1B,QAAQ,KAAK,2DAA2D,cAAc,GAAG;UAEzF,WAAW,iBAAiB;IAEhC;GACF;GACA,KAAK,OAAO,OAAO,GAAG;IACpB,QAAQ,MAAM,cAAc,UAAU;IACtC,MAAM;GACR;GACA,OAAO;EACT;EACA,SAAS,aAAa,YAAY,UAAU,aAAa,SAAS,YAAY;GAC5E,MAAM,cAAc;IAClB,MAAM;IACN,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,OAAO,WAAW,WAAW,OAAO,WAAW,WAAW,OAAO;IACjE,QAAQ,WAAW,WAAW,OAAO,WAAW,WAAW,OAAO;IAClE,UAAU,WAAW,SAAS;IAC9B,cAAc;IACd,OAAO;IACP,WAAW;IACX,MAAM,WAAW,SAAS,GAAG;IAC7B,YAAY;IACZ,QAAQ;IACR,QAAQ;KACP,gBAAgB,eAAe,aAAa;GAC/C;GACA,QAAQ,WAAW,aAAnB;IACE,KAAK;KACH,YAAY,QAAQ;KACpB,YAAY,aAAa;KACzB;IACF,KAAK;KACH,YAAY,QAAQ;KACpB,YAAY,aAAa;KACzB;IACF,KAAK;KACH,YAAY,QAAQ;KACpB,YAAY,aAAa;KACzB;IACF,KAAK;KACH,YAAY,QAAQ;KACpB,YAAY,aAAa;KACzB;IACF,KAAK;KACH,YAAY,QAAQ;KACpB,YAAY,aAAa;KACzB;IACF,KAAK;KACH,YAAY,QAAQ;KACpB,YAAY,aAAa;KACzB;IACF,KAAK;KACH,YAAY,QAAQ;KACpB,YAAY,aAAa;KACzB;IACF,KAAK;KACH,YAAY,QAAQ;KACpB,YAAY,aAAa;KACzB;IACF,SACE,MAAM,sBAAsB,WAAW,cAAc;GACzD;GACA,YAAY,oBAAoB,YAAY;GAC5C,IAAI,YAAY,QAAQ,GACtB,QAAQ,YAAR;IACE,KAAK;KACH,YAAY,SAAS;KACrB,YAAY,YAAY;KACxB;IACF,KAAK;KACH,YAAY,SAAS;KACrB,YAAY,YAAY;KACxB;GACJ;QACK,IAAI,YAAY,QAAQ,GAC7B,QAAQ,YAAR;IACE,KAAK;KACH,YAAY,SAAS;KACrB,YAAY,YAAY;KACxB;IACF,KAAK;KACH,YAAY,SAAS;KACrB,YAAY,YAAY;GAC5B;QAEA,MAAM,4CAA4C,YAAY,OAAO,UAAU,WAAW,cAAc;GAE1G,YAAY,cAAc,WAAW,WAAW,OAAO,KAAK,YAAY;GACxE,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,YAAY,KAC1C,WAAW,UAAU,OAAO;GAC9B,YAAY,iBAAiB,YAAY,YAAY,IAAI,IAAI,YAAY;GACzE,MAAM,OAAO,YAAY,QAAQ,YAAY,SAAS,YAAY;GAClE,QAAQ,YAAR;IACE,KAAK;KACH,YAAY,YAAY,IAAI,aAAa,IAAI;KAC7C,IAAI,YAAY,WAAW,YAAY,gBACrC,YAAY,UAAU,KAAK,GAAG,GAAG,IAAI;KACvC;IACF,KAAK;KACH,YAAY,YAAY,IAAI,YAAY,IAAI;KAC5C,IAAI,YAAY,WAAW,YAAY,gBACrC,YAAY,UAAU,KAAK,OAAO,GAAG,IAAI;KAC3C;IACF;KACE,QAAQ,MAAM,uCAAuC,UAAU;KAC/D;GACJ;GACA,YAAY,eAAe,YAAY,QAAQ,YAAY,YAAY,YAAY;GACnF,IAAI,YAAY,kBAAkB,GAChC,YAAY,SAAS;QAErB,YAAY,SAAS;GACvB,IAAI,eACF,YAAY,aAAa;QAEzB,YAAY,WAAW;GACzB,OAAO;EACT;EACA,MAAM,iBAAiB,IAAI,SAAS,MAAM;EAC1C,MAAM,aAAa,IAAI,WAAW,MAAM;EACxC,MAAM,SAAS,EAAE,OAAO,EAAE;EAC1B,MAAM,YAAY,YAAY,gBAAgB,QAAQ,MAAM;EAC5D,MAAM,aAAa,aAAa,WAAW,gBAAgB,YAAY,QAAQ,KAAK,IAAI;EACxF,MAAM,YAAY,EAAE,OAAO,EAAE;EAC7B,MAAM,iBAAiB;GAAE,GAAG;GAAG,GAAG;GAAG,GAAG;GAAG,GAAG;GAAG,GAAG;EAAE;EACtD,KAAK,IAAI,mBAAmB,GAAG,mBAAmB,WAAW,SAAS,WAAW,mBAAmB,oBAAoB;GACtH,MAAM,OAAO,YAAY,gBAAgB,MAAM;GAC/C,WAAW,OAAO,YAAY,gBAAgB,MAAM;GACpD,WAAW,QAAQ,OAAO,WAAW,oBAAoB,WAAW,SAAS,WAAW,SAAS,OAAO,WAAW;GAEnH,MAAM,SADe,WAAW,OAAO,WAAW,QAAQ,WAAW,eACvC,WAAW,WAAW,UAAU,IAAI,cAAc,UAAU;GAC1F,OAAO,SAAS,WAAW;GAC3B,KAAK,IAAI,SAAS,GAAG,SAAS,WAAW,mBAAmB,UAAU;IACpE,MAAM,SAAS,SAAS,mBAAmB,WAAW;IACtD,IAAI,UAAU,WAAW,QACvB;IACF,KAAK,IAAI,YAAY,GAAG,YAAY,WAAW,UAAU,aAAa;KACpE,MAAM,OAAO,eAAe,UAAU,SAAS,WAAW;KAC1D,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,OAAO,KAAK;MACzC,UAAU,SAAS,UAAU,WAAW,WAAW,WAAW,SAAS,YAAY,WAAW,QAAQ,KAAK,WAAW;MACtH,MAAM,YAAY,WAAW,SAAS,IAAI,WAAW,WAAW,QAAQ,WAAW,kBAAkB,IAAI,WAAW,iBAAiB;MACrI,WAAW,UAAU,YAAY,WAAW,OAAO,QAAQ,SAAS;KACtE;IACF;GACF;EACF;EACA,OAAO;GACL,QAAQ;GACR,OAAO,WAAW;GAClB,QAAQ,WAAW;GACnB,MAAM,WAAW;GACjB,QAAQ,WAAW;IAClB,gBAAgB,eAAe,aAAa,WAAW,gBAAgB,eAAe;GACvF,MAAM,KAAK;EACb;CACF;CACA,YAAY,OAAO;EACjB,KAAK,OAAO;EACZ,OAAO;CACT;CACA,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,SAAS,eAAe,SAAS,SAAS;GACxC,IAAI,eACF,QAAQ,aAAa,QAAQ;QAE7B,QAAQ,WAAW,QAAQ;GAC7B,QAAQ,YAAY;GACpB,QAAQ,YAAY;GACpB,QAAQ,kBAAkB;GAC1B,QAAQ,QAAQ;GAChB,IAAI,QACF,OAAO,SAAS,OAAO;EAC3B;EACA,OAAO,MAAM,KAAK,KAAK,gBAAgB,YAAY,OAAO;CAC5D;AACF;;;ACx0CA,IAAM,kBAAkB;AACxB,IAAM,YAA4B,uBAAO;CACvC,MAAM,mBAAmBC,SAAO;EAC9B,YAAY,SAAS;GACnB,MAAM,OAAO;GACb,KAAK,aAAa;GAClB,KAAK,cAAc;EACrB;EACA,KAAK,KAAK,QAAQ,YAAY,SAAS;GACrC,MAAM,QAAQ;GACd,MAAM,SAAS,IAAI,WAAW,MAAM,OAAO;GAC3C,OAAO,QAAQ,MAAM,IAAI;GACzB,OAAO,iBAAiB,MAAM,aAAa;GAC3C,OAAO,mBAAmB,MAAM,eAAe;GAC/C,OAAO,KACL,KACA,SAAS,MAAM;IACb,IAAI;KACF,OAAO,MAAM,MAAM,IAAI,CAAC;IAC1B,SAAS,GAAG;KACV,IAAI,SACF,QAAQ,CAAC;UAET,QAAQ,MAAM,CAAC;KAEjB,MAAM,QAAQ,UAAU,GAAG;IAC7B;GACF,GACA,YACA,OACF;EACF;EACA,MAAM,MAAM;GACV,MAAM,QAAQ;GACd,SAAS,UAAU,MAAM,OAAO;IAC9B,IAAI,KAAK,aAAa,GACpB;IACF,MAAM,YAAY,iBAAiB,IAAI;IACvC,IAAI,aAAa;IACjB,IAAI,OAAO;IACX,QAAQ,KAAK,UAAb;KACE,KAAK;MACH,QAAQ,WAAW,MAAM,KAAK;MAC9B;KACF,KAAK;MACH,mBAAmB,IAAI;MACvB;KACF,KAAK;MACH,QAAQ,WAAW,MAAM,KAAK;MAC9B;KACF,KAAK;MACH,QAAQ,WAAW,MAAM,KAAK;MAC9B,IAAI,KAAK,aAAa,GAAG,GACvB,OAAO,cAAc,IAAI;MAC3B;KACF,KAAK;MACH,QAAQ,WAAW,MAAM,KAAK;MAC9B,OAAO,cAAc,IAAI;MACzB;KACF,KAAK;MACH,QAAQ,WAAW,MAAM,KAAK;MAC9B,OAAO,iBAAiB,IAAI;MAC5B;KACF,KAAK;MACH,QAAQ,WAAW,MAAM,KAAK;MAC9B,OAAO,kBAAkB,IAAI;MAC7B;KACF,KAAK;MACH,QAAQ,WAAW,MAAM,KAAK;MAC9B,OAAO,gBAAgB,IAAI;MAC3B;KACF,KAAK;MACH,QAAQ,WAAW,MAAM,KAAK;MAC9B,OAAO,iBAAiB,IAAI;MAC5B;KACF,KAAK;MACH,QAAQ,WAAW,MAAM,KAAK;MAC9B,OAAO,cAAc,IAAI;MACzB;KACF,KAAK;MACH,aAAa;MACb;KACF,KAAK;MACH,QAAQ,WAAW,MAAM,KAAK;MAE9B,MAAM,cADO,KAAK,eAAe,gCAAgC,MAAM,KAAK,IACpD,UAAU,CAAC;MACnC,MAAM,WAAW,KAAK,gBAAgB,eAAe,UAAU;MAC/D,IAAI,UACF,UAAU,UAAU,KAAK;WAEzB,QAAQ,KAAK,4DAA4D,UAAU;MAErF;IACJ;IACA,IAAI,MAAM;KACR,IAAI,MAAM,SAAS,KAAK,KAAK,MAAM,SAAS,QAC1C,KAAK,MAAM,SAAS,MAAM,MAAM,eAAe;KAEjD,cAAc,MAAM,gBAAgB;KACpC,MAAM,KAAK,IAAI;KACf,KAAK,WAAW;MAAE;MAAM;KAAM;IAChC;IACA,MAAM,aAAa,KAAK;IACxB,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;KAC1C,MAAM,QAAQ,WAAW;KACzB,IAAI,cAAc,MAAM,aAAa,WAAW,MAAM,aAAa,QACjE;KAEF,UAAU,OAAO,KAAK;IACxB;IACA,IAAI,WAAW;KACb,eAAe,IAAI;KACnB,IAAI,eAAe,SAAS,GAC1B,iBAAiB,KAAK,eAAe,eAAe,SAAS,EAAE;UAE/D,iBAAiB,SAAS;IAE9B;GACF;GACA,SAAS,cAAc,MAAM;IAC3B,MAAM,OAAO,IAAI,UAAU;IAC3B,MAAM,QAAQ,IAAI,QAAQ;IAC1B,MAAM,UAAU,IAAI,QAAQ;IAC5B,MAAM,aAAa,IAAI,QAAQ;IAC/B,IAAI,eAAe;IACnB,IAAI,kBAAkB;IACtB,MAAM,IAAI,KAAK,aAAa,GAAG;IAC/B,IAAI,MAAM,MAAM,MAAM,QACpB,OAAO;IACT,MAAM,WAAW,EAAE,MAAM,sBAAsB;IAC/C,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,IAAI,GAAG,KAAK;KAC/C,MAAM,UAAU,SAAS;KACzB,MAAM,OAAO,QAAQ,OAAO,CAAC;KAC7B,MAAM,QAAQ,QAAQ,MAAM,CAAC,EAAE,KAAK;KACpC,IAAI,iBAAiB,MAAM;MACzB,kBAAkB;MAClB,eAAe;KACjB;KACA,IAAI;KACJ,QAAQ,MAAR;MACE,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,MAAM,IAAI,QAAQ,IAAI;QACtB,MAAM,IAAI,QAAQ,IAAI;QACtB,QAAQ,IAAI,MAAM;QAClB,QAAQ,IAAI,MAAM;QAClB,IAAI,MAAM,GACR,KAAK,OAAO,MAAM,GAAG,MAAM,CAAC;aAE5B,KAAK,OAAO,MAAM,GAAG,MAAM,CAAC;QAE9B,IAAI,MAAM,GACR,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK;QAChD,MAAM,IAAI,QAAQ;QAClB,QAAQ,IAAI,MAAM;QAClB,QAAQ,IAAI,MAAM;QAClB,KAAK,OAAO,MAAM,GAAG,MAAM,CAAC;QAC5B,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK;QAChD,MAAM,IAAI,QAAQ;QAClB,QAAQ,IAAI,MAAM;QAClB,QAAQ,IAAI,MAAM;QAClB,KAAK,OAAO,MAAM,GAAG,MAAM,CAAC;QAC5B,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,MAAM,IAAI,QAAQ,IAAI;QACtB,MAAM,IAAI,QAAQ,IAAI;QACtB,QAAQ,IAAI,MAAM;QAClB,QAAQ,IAAI,MAAM;QAClB,KAAK,OAAO,MAAM,GAAG,MAAM,CAAC;QAC5B,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,KAAK,cACH,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,QAAQ,IAAI,EACd;QACA,QAAQ,IAAI,QAAQ,IAAI;QACxB,QAAQ,IAAI,QAAQ,IAAI;QACxB,MAAM,IAAI,QAAQ,IAAI;QACtB,MAAM,IAAI,QAAQ,IAAI;QACtB,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,KAAK,cACH,cAAc,MAAM,GAAG,QAAQ,CAAC,GAChC,cAAc,MAAM,GAAG,QAAQ,CAAC,GAChC,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,QAAQ,IAAI,EACd;QACA,QAAQ,IAAI,QAAQ,IAAI;QACxB,QAAQ,IAAI,QAAQ,IAAI;QACxB,MAAM,IAAI,QAAQ,IAAI;QACtB,MAAM,IAAI,QAAQ,IAAI;QACtB,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,KAAK,iBAAiB,QAAQ,IAAI,IAAI,QAAQ,IAAI,IAAI,QAAQ,IAAI,IAAI,QAAQ,IAAI,EAAE;QACpF,QAAQ,IAAI,QAAQ,IAAI;QACxB,QAAQ,IAAI,QAAQ,IAAI;QACxB,MAAM,IAAI,QAAQ,IAAI;QACtB,MAAM,IAAI,QAAQ,IAAI;QACtB,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,MAAM,KAAK,cAAc,MAAM,GAAG,QAAQ,CAAC;QAC3C,MAAM,KAAK,cAAc,MAAM,GAAG,QAAQ,CAAC;QAC3C,KAAK,iBAAiB,IAAI,IAAI,QAAQ,IAAI,IAAI,QAAQ,IAAI,EAAE;QAC5D,QAAQ,IAAI;QACZ,QAAQ,IAAI;QACZ,MAAM,IAAI,QAAQ,IAAI;QACtB,MAAM,IAAI,QAAQ,IAAI;QACtB,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;OACtC,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,IAAI,QAAQ,IAAI,MAAM,MAAM,KAAK,QAAQ,IAAI,MAAM,MAAM,GACvD;QACF,MAAM,QAAQ,MAAM,MAAM;QAC1B,MAAM,IAAI,QAAQ,IAAI;QACtB,MAAM,IAAI,QAAQ,IAAI;QACtB,QAAQ,IAAI,MAAM;QAClB,QAAQ,IAAI,MAAM;QAClB,gBACE,MACA,QAAQ,IACR,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,OACA,KACF;QACA,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,MAAM,KAAK,QAAQ,IAAI;QACvB,MAAM,KAAK,QAAQ,IAAI;QACvB,QAAQ,IAAI,MAAM;QAClB,QAAQ,IAAI,MAAM;QAClB,IAAI,MAAM,GACR,KAAK,OAAO,MAAM,GAAG,MAAM,CAAC;aAE5B,KAAK,OAAO,MAAM,GAAG,MAAM,CAAC;QAE9B,IAAI,MAAM,GACR,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK;QAChD,MAAM,KAAK,QAAQ;QACnB,QAAQ,IAAI,MAAM;QAClB,QAAQ,IAAI,MAAM;QAClB,KAAK,OAAO,MAAM,GAAG,MAAM,CAAC;QAC5B,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK;QAChD,MAAM,KAAK,QAAQ;QACnB,QAAQ,IAAI,MAAM;QAClB,QAAQ,IAAI,MAAM;QAClB,KAAK,OAAO,MAAM,GAAG,MAAM,CAAC;QAC5B,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,MAAM,KAAK,QAAQ,IAAI;QACvB,MAAM,KAAK,QAAQ,IAAI;QACvB,QAAQ,IAAI,MAAM;QAClB,QAAQ,IAAI,MAAM;QAClB,KAAK,OAAO,MAAM,GAAG,MAAM,CAAC;QAC5B,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,KAAK,cACH,MAAM,IAAI,QAAQ,IAAI,IACtB,MAAM,IAAI,QAAQ,IAAI,IACtB,MAAM,IAAI,QAAQ,IAAI,IACtB,MAAM,IAAI,QAAQ,IAAI,IACtB,MAAM,IAAI,QAAQ,IAAI,IACtB,MAAM,IAAI,QAAQ,IAAI,EACxB;QACA,QAAQ,IAAI,MAAM,IAAI,QAAQ,IAAI;QAClC,QAAQ,IAAI,MAAM,IAAI,QAAQ,IAAI;QAClC,MAAM,KAAK,QAAQ,IAAI;QACvB,MAAM,KAAK,QAAQ,IAAI;QACvB,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,KAAK,cACH,cAAc,MAAM,GAAG,QAAQ,CAAC,GAChC,cAAc,MAAM,GAAG,QAAQ,CAAC,GAChC,MAAM,IAAI,QAAQ,IAAI,IACtB,MAAM,IAAI,QAAQ,IAAI,IACtB,MAAM,IAAI,QAAQ,IAAI,IACtB,MAAM,IAAI,QAAQ,IAAI,EACxB;QACA,QAAQ,IAAI,MAAM,IAAI,QAAQ,IAAI;QAClC,QAAQ,IAAI,MAAM,IAAI,QAAQ,IAAI;QAClC,MAAM,KAAK,QAAQ,IAAI;QACvB,MAAM,KAAK,QAAQ,IAAI;QACvB,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,KAAK,iBACH,MAAM,IAAI,QAAQ,IAAI,IACtB,MAAM,IAAI,QAAQ,IAAI,IACtB,MAAM,IAAI,QAAQ,IAAI,IACtB,MAAM,IAAI,QAAQ,IAAI,EACxB;QACA,QAAQ,IAAI,MAAM,IAAI,QAAQ,IAAI;QAClC,QAAQ,IAAI,MAAM,IAAI,QAAQ,IAAI;QAClC,MAAM,KAAK,QAAQ,IAAI;QACvB,MAAM,KAAK,QAAQ,IAAI;QACvB,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,MAAM,KAAK,cAAc,MAAM,GAAG,QAAQ,CAAC;QAC3C,MAAM,KAAK,cAAc,MAAM,GAAG,QAAQ,CAAC;QAC3C,KAAK,iBAAiB,IAAI,IAAI,MAAM,IAAI,QAAQ,IAAI,IAAI,MAAM,IAAI,QAAQ,IAAI,EAAE;QAChF,QAAQ,IAAI;QACZ,QAAQ,IAAI;QACZ,MAAM,IAAI,MAAM,IAAI,QAAQ,IAAI;QAChC,MAAM,IAAI,MAAM,IAAI,QAAQ,IAAI;QAChC,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;OACtC,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,IAAI,QAAQ,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,GAC3C;QACF,MAAM,QAAQ,MAAM,MAAM;QAC1B,MAAM,KAAK,QAAQ,IAAI;QACvB,MAAM,KAAK,QAAQ,IAAI;QACvB,QAAQ,IAAI,MAAM;QAClB,QAAQ,IAAI,MAAM;QAClB,gBACE,MACA,QAAQ,IACR,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,OACA,KACF;QACA,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;MACL,KAAK;OACH,KAAK,YAAY,YAAY;OAC7B,IAAI,KAAK,YAAY,OAAO,SAAS,GAAG;QACtC,MAAM,KAAK,UAAU;QACrB,KAAK,YAAY,aAAa,KAAK,KAAK;QACxC,eAAe;OACjB;OACA;MACF,SACE,QAAQ,KAAK,OAAO;KACxB;KACA,kBAAkB;IACpB;IACA,OAAO;GACT;GACA,SAAS,mBAAmB,MAAM;IAChC,IAAI,CAAC,KAAK,SAAS,CAAC,KAAK,MAAM,YAAY,CAAC,KAAK,MAAM,SAAS,QAC9D;IACF,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,SAAS,QAAQ,KAAK;KACnD,MAAM,aAAa,KAAK,MAAM,SAAS;KACvC,IAAI,WAAW,SAAS,GACtB;KACF,MAAM,eAAe,WAAW,aAAa,MAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,OAAO,GAAG,KAAK,CAAC;KAC/F,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;MAC5C,MAAM,cAAc,OAAO,YAAY,OAAO,QAAQ,WAAW,KAAK,EAAE,QAAQ,GAAG,OAAO,MAAM,EAAE,CAAC;MACnG,YAAY,aAAa,MAAM,OAAO,OAAO,YAAY,aAAa,OAAO,CAAC,GAAG,WAAW;KAC9F;IACF;GACF;GACA,SAAS,gBAAgB,MAAM,IAAI,IAAI,iBAAiB,gBAAgB,YAAY,OAAO,KAAK;IAC9F,IAAI,MAAM,KAAK,MAAM,GAAG;KACtB,KAAK,OAAO,IAAI,GAAG,IAAI,CAAC;KACxB;IACF;IACA,kBAAkB,kBAAkB,KAAK,KAAK;IAC9C,KAAK,KAAK,IAAI,EAAE;IAChB,KAAK,KAAK,IAAI,EAAE;IAChB,MAAM,OAAO,MAAM,IAAI,IAAI,KAAK;IAChC,MAAM,OAAO,MAAM,IAAI,IAAI,KAAK;IAChC,MAAM,MAAM,KAAK,IAAI,eAAe,IAAI,MAAM,KAAK,IAAI,eAAe,IAAI;IAC1E,MAAM,MAAM,CAAC,KAAK,IAAI,eAAe,IAAI,MAAM,KAAK,IAAI,eAAe,IAAI;IAC3E,IAAI,MAAM,KAAK;IACf,IAAI,MAAM,KAAK;IACf,MAAM,OAAO,MAAM;IACnB,MAAM,OAAO,MAAM;IACnB,MAAM,KAAK,OAAO,MAAM,OAAO;IAC/B,IAAI,KAAK,GAAG;KACV,MAAM,IAAI,KAAK,KAAK,EAAE;KACtB,KAAK,IAAI;KACT,KAAK,IAAI;KACT,MAAM,KAAK;KACX,MAAM,KAAK;IACb;IACA,MAAM,KAAK,MAAM,OAAO,MAAM;IAC9B,MAAM,MAAM,MAAM,MAAM,MAAM;IAC9B,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,GAAG,EAAE,CAAC;IACjC,IAAI,mBAAmB,YACrB,IAAI,CAAC;IACP,MAAM,MAAM,IAAI,KAAK,MAAM;IAC3B,MAAM,MAAM,CAAC,IAAI,KAAK,MAAM;IAC5B,MAAM,KAAK,KAAK,IAAI,eAAe,IAAI,MAAM,KAAK,IAAI,eAAe,IAAI,OAAO,MAAM,IAAI,IAAI,KAAK;IACnG,MAAM,KAAK,KAAK,IAAI,eAAe,IAAI,MAAM,KAAK,IAAI,eAAe,IAAI,OAAO,MAAM,IAAI,IAAI,KAAK;IACnG,MAAM,QAAQ,SAAS,GAAG,IAAI,MAAM,OAAO,KAAK,MAAM,OAAO,EAAE;IAC/D,MAAM,QAAQ,UAAU,MAAM,OAAO,KAAK,MAAM,OAAO,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,OAAO,EAAE,KAAK,KAAK,KAAK;IAC9G,KAAK,YAAY,WAAW,IAAI,IAAI,IAAI,IAAI,OAAO,QAAQ,OAAO,eAAe,GAAG,eAAe;GACrG;GACA,SAAS,SAAS,IAAI,IAAI,IAAI,IAAI;IAChC,MAAM,MAAM,KAAK,KAAK,KAAK;IAC3B,MAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;IACtE,IAAI,MAAM,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC;IACxD,IAAI,KAAK,KAAK,KAAK,KAAK,GACtB,MAAM,CAAC;IACT,OAAO;GACT;GACA,SAAS,cAAc,MAAM;IAC3B,MAAM,IAAI,oBAAoB,KAAK,aAAa,GAAG,KAAK,CAAC;IACzD,MAAM,IAAI,oBAAoB,KAAK,aAAa,GAAG,KAAK,CAAC;IACzD,MAAM,KAAK,oBAAoB,KAAK,aAAa,IAAI,KAAK,KAAK,aAAa,IAAI,KAAK,CAAC;IACtF,MAAM,KAAK,oBAAoB,KAAK,aAAa,IAAI,KAAK,KAAK,aAAa,IAAI,KAAK,CAAC;IACtF,MAAM,IAAI,oBAAoB,KAAK,aAAa,OAAO,CAAC;IACxD,MAAM,IAAI,oBAAoB,KAAK,aAAa,QAAQ,CAAC;IACzD,MAAM,MAAM;IACZ,MAAM,OAAO,IAAI,UAAU;IAC3B,KAAK,OAAO,IAAI,IAAI,CAAC;IACrB,KAAK,OAAO,IAAI,IAAI,IAAI,CAAC;IACzB,IAAI,OAAO,KAAK,OAAO,GACrB,KAAK,cAAc,IAAI,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,IAAI,KAAK,KAAK,IAAI,GAAG,IAAI,EAAE;IAE5E,KAAK,OAAO,IAAI,GAAG,IAAI,IAAI,EAAE;IAC7B,IAAI,OAAO,KAAK,OAAO,GACrB,KAAK,cAAc,IAAI,GAAG,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC;IAExF,KAAK,OAAO,IAAI,IAAI,IAAI,CAAC;IACzB,IAAI,OAAO,KAAK,OAAO,GACrB,KAAK,cAAc,IAAI,KAAK,KAAK,IAAI,GAAG,GAAG,IAAI,IAAI,KAAK,KAAK,GAAG,IAAI,IAAI,EAAE;IAE5E,KAAK,OAAO,GAAG,IAAI,EAAE;IACrB,IAAI,OAAO,KAAK,OAAO,GACrB,KAAK,cAAc,GAAG,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,GAAG,IAAI,IAAI,CAAC;IAEhE,OAAO;GACT;GACA,SAAS,iBAAiB,MAAM;IAC9B,SAAS,SAAS,OAAO,GAAG,GAAG;KAC7B,MAAM,IAAI,oBAAoB,CAAC;KAC/B,MAAM,IAAI,oBAAoB,CAAC;KAC/B,IAAI,UAAU,GACZ,KAAK,OAAO,GAAG,CAAC;UAEhB,KAAK,OAAO,GAAG,CAAC;KAElB;IACF;IACA,MAAM,QAAQ;IACd,MAAM,OAAO,IAAI,UAAU;IAC3B,IAAI,QAAQ;IACZ,KAAK,aAAa,QAAQ,EAAE,QAAQ,OAAO,QAAQ;IACnD,KAAK,YAAY,YAAY;IAC7B,OAAO;GACT;GACA,SAAS,kBAAkB,MAAM;IAC/B,SAAS,SAAS,OAAO,GAAG,GAAG;KAC7B,MAAM,IAAI,oBAAoB,CAAC;KAC/B,MAAM,IAAI,oBAAoB,CAAC;KAC/B,IAAI,UAAU,GACZ,KAAK,OAAO,GAAG,CAAC;UAEhB,KAAK,OAAO,GAAG,CAAC;KAElB;IACF;IACA,MAAM,QAAQ;IACd,MAAM,OAAO,IAAI,UAAU;IAC3B,IAAI,QAAQ;IACZ,KAAK,aAAa,QAAQ,EAAE,QAAQ,OAAO,QAAQ;IACnD,KAAK,YAAY,YAAY;IAC7B,OAAO;GACT;GACA,SAAS,gBAAgB,MAAM;IAC7B,MAAM,IAAI,oBAAoB,KAAK,aAAa,IAAI,KAAK,CAAC;IAC1D,MAAM,IAAI,oBAAoB,KAAK,aAAa,IAAI,KAAK,CAAC;IAC1D,MAAM,IAAI,oBAAoB,KAAK,aAAa,GAAG,KAAK,CAAC;IACzD,MAAM,UAAU,IAAI,KAAK;IACzB,QAAQ,OAAO,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,CAAC;IACtC,MAAM,OAAO,IAAI,UAAU;IAC3B,KAAK,SAAS,KAAK,OAAO;IAC1B,OAAO;GACT;GACA,SAAS,iBAAiB,MAAM;IAC9B,MAAM,IAAI,oBAAoB,KAAK,aAAa,IAAI,KAAK,CAAC;IAC1D,MAAM,IAAI,oBAAoB,KAAK,aAAa,IAAI,KAAK,CAAC;IAC1D,MAAM,KAAK,oBAAoB,KAAK,aAAa,IAAI,KAAK,CAAC;IAC3D,MAAM,KAAK,oBAAoB,KAAK,aAAa,IAAI,KAAK,CAAC;IAC3D,MAAM,UAAU,IAAI,KAAK;IACzB,QAAQ,WAAW,GAAG,GAAG,IAAI,IAAI,GAAG,KAAK,KAAK,CAAC;IAC/C,MAAM,OAAO,IAAI,UAAU;IAC3B,KAAK,SAAS,KAAK,OAAO;IAC1B,OAAO;GACT;GACA,SAAS,cAAc,MAAM;IAC3B,MAAM,KAAK,oBAAoB,KAAK,aAAa,IAAI,KAAK,CAAC;IAC3D,MAAM,KAAK,oBAAoB,KAAK,aAAa,IAAI,KAAK,CAAC;IAC3D,MAAM,KAAK,oBAAoB,KAAK,aAAa,IAAI,KAAK,CAAC;IAC3D,MAAM,KAAK,oBAAoB,KAAK,aAAa,IAAI,KAAK,CAAC;IAC3D,MAAM,OAAO,IAAI,UAAU;IAC3B,KAAK,OAAO,IAAI,EAAE;IAClB,KAAK,OAAO,IAAI,EAAE;IAClB,KAAK,YAAY,YAAY;IAC7B,OAAO;GACT;GACA,SAAS,WAAW,MAAM,OAAO;IAC/B,QAAQ,OAAO,OAAO,CAAC,GAAG,KAAK;IAC/B,IAAI,mBAAmB,CAAC;IACxB,IAAI,KAAK,aAAa,OAAO,GAAG;KAC9B,MAAM,iBAAiB,KAAK,aAAa,OAAO,EAAE,MAAM,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,CAAC;KACjG,KAAK,IAAI,IAAI,GAAG,IAAI,eAAe,QAAQ,KACzC,mBAAmB,OAAO,OAAO,kBAAkB,YAAY,MAAM,eAAe,GAAG;IAE3F;IACA,IAAI,KAAK,aAAa,IAAI,GACxB,mBAAmB,OAAO,OAAO,kBAAkB,YAAY,MAAM,KAAK,aAAa,IAAI,EAAE;IAE/F,SAAS,SAAS,SAAS,QAAQ,gBAAgB;KACjD,IAAI,mBAAmB,KAAK,GAC1B,iBAAiB,SAAS,KAAK,GAAG;MAChC,IAAI,EAAE,WAAW,KAAK,GACpB,QAAQ,KAAK,yDAAyD;MACxE,OAAO;KACT;KACF,IAAI,KAAK,aAAa,OAAO,GAC3B,MAAM,UAAU,eAAe,KAAK,aAAa,OAAO,CAAC;KAC3D,IAAI,iBAAiB,UACnB,MAAM,UAAU,eAAe,iBAAiB,QAAQ;KAC1D,IAAI,KAAK,SAAS,KAAK,MAAM,aAAa,IACxC,MAAM,UAAU,eAAe,KAAK,MAAM,QAAQ;IACtD;IACA,SAAS,MAAM,GAAG;KAChB,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,oBAAoB,CAAC,CAAC,CAAC;IACxD;IACA,SAAS,SAAS,GAAG;KACnB,OAAO,KAAK,IAAI,GAAG,oBAAoB,CAAC,CAAC;IAC3C;IACA,SAAS,QAAQ,MAAM;IACvB,SAAS,gBAAgB,eAAe,KAAK;IAC7C,SAAS,aAAa,UAAU;IAChC,SAAS,WAAW,WAAW,KAAK;IACpC,SAAS,UAAU,QAAQ;IAC3B,SAAS,kBAAkB,iBAAiB,KAAK;IACjD,SAAS,gBAAgB,eAAe,QAAQ;IAChD,SAAS,mBAAmB,gBAAgB;IAC5C,SAAS,kBAAkB,eAAe;IAC1C,SAAS,qBAAqB,oBAAoB,QAAQ;IAC1D,SAAS,cAAc,YAAY;IACnC,OAAO;GACT;GACA,SAAS,cAAc,GAAG,GAAG;IAC3B,OAAO,KAAK,IAAI;GAClB;GACA,SAAS,YAAY,OAAO,OAAO,QAAQ;IACzC,IAAI,OAAO,UAAU,UACnB,MAAM,IAAI,UAAU,oBAAoB,OAAO,KAAK;IAEtD,MAAM,KAAK;KACT,WAAW;KACX,YAAY;KACZ,OAAO;KACP,MAAM;KACN,OAAO;KACP,OAAO;KACP,KAAK;KACL,OAAO;IACT;IACA,MAAM,MAAM;IACZ,MAAM,MAAM;IACZ,MAAM,QAAQ;IACd,MAAM,MAAM;IACZ,IAAI,QAAQ;IACZ,IAAI,YAAY;IAChB,IAAI,SAAS,IAAI,WAAW;IAC5B,MAAM,SAAS,CAAC;IAChB,SAAS,iBAAiB,UAAU,GAAG,SAAS;KAC9C,MAAM,wBAAQ,IAAI,YAAY,4BAA2B,WAAW,iBAAgB,IAAI,GAAG;KAC3F,MAAM,UAAU;KAChB,MAAM;IACR;IACA,SAAS,YAAY;KACnB,IAAI,WAAW,IACb,IAAI,aAAa,IACf,OAAO,KAAK,OAAO,MAAM,CAAC;UAE1B,OAAO,KAAK,OAAO,MAAM,IAAI,KAAK,IAAI,IAAI,OAAO,QAAQ,CAAC,CAAC;KAE/D,SAAS;KACT,WAAW;IACb;IACA,IAAI;IACJ,MAAM,SAAS,MAAM;IACrB,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK;KAC/B,UAAU,MAAM;KAChB,IAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS,OAAO,SAAS,MAAM,KAAK,GAAG,MAAM,KAAK,OAAO,GAAG;MAC5F,QAAQ;MACR,SAAS;MACT,UAAU;MACV;KACF;KACA,IAAI,UAAU,KAAK;MACjB,IAAI,GAAG,WAAW,KAAK,OAAO,GAC5B;MAEF,IAAI,GAAG,MAAM,KAAK,OAAO,KAAK,GAAG,KAAK,KAAK,OAAO,GAAG;OACnD,QAAQ;OACR,SAAS;OACT;MACF;MACA,IAAI,GAAG,MAAM,KAAK,OAAO,GAAG;OAC1B,QAAQ;OACR,SAAS;OACT;MACF;MACA,IAAI,GAAG,MAAM,KAAK,OAAO,GAAG;OAC1B,IAAI,WACF,iBAAiB,SAAS,GAAG,MAAM;OAErC,YAAY;MACd;KACF;KACA,IAAI,UAAU,KAAK;MACjB,IAAI,GAAG,MAAM,KAAK,OAAO,GAAG;OAC1B,UAAU;OACV;MACF;MACA,IAAI,GAAG,MAAM,KAAK,OAAO,GAAG;OAC1B,UAAU;OACV,QAAQ;OACR;MACF;MACA,IAAI,GAAG,IAAI,KAAK,OAAO,GAAG;OACxB,QAAQ;OACR;MACF;MACA,IAAI,GAAG,KAAK,KAAK,OAAO,KAAK,OAAO,WAAW,KAAK,GAAG,KAAK,KAAK,OAAO,EAAE,GACxE,iBAAiB,SAAS,GAAG,MAAM;KAEvC;KACA,IAAI,UAAU,OAAO;MACnB,IAAI,GAAG,MAAM,KAAK,OAAO,GAAG;OAC1B,UAAU;OACV;MACF;MACA,IAAI,GAAG,IAAI,KAAK,OAAO,GAAG;OACxB,QAAQ;OACR;MACF;MACA,IAAI,GAAG,MAAM,KAAK,OAAO,KAAK,OAAO,OAAO,SAAS,OAAO,KAC1D,iBAAiB,SAAS,GAAG,MAAM;KAEvC;KACA,IAAI,UAAU,KAAK;MACjB,IAAI,GAAG,MAAM,KAAK,OAAO,GAAG;OAC1B,YAAY;OACZ;MACF;MACA,IAAI,GAAG,KAAK,KAAK,OAAO,GAAG;OACzB,IAAI,aAAa,IAAI;QACnB,YAAY;QACZ;OACF;OACA,IAAI,SAAS,WAAW,KAAK,GAAG,KAAK,KAAK,QAAQ,GAChD,iBAAiB,SAAS,GAAG,MAAM;MAEvC;KACF;KACA,IAAI,GAAG,WAAW,KAAK,OAAO,GAAG;MAC/B,UAAU;MACV,QAAQ;MACR,YAAY;KACd,OAAO,IAAI,GAAG,MAAM,KAAK,OAAO,GAAG;MACjC,UAAU;MACV,QAAQ;MACR,YAAY;KACd,OAAO,IAAI,GAAG,KAAK,KAAK,OAAO,GAAG;MAChC,UAAU;MACV,QAAQ;MACR,SAAS;KACX,OAAO,IAAI,GAAG,MAAM,KAAK,OAAO,GAAG;MACjC,UAAU;MACV,QAAQ;MACR,SAAS;KACX,OACE,iBAAiB,SAAS,GAAG,MAAM;IAEvC;IACA,UAAU;IACV,OAAO;GACT;GACA,MAAM,QAAQ;IAAC;IAAM;IAAM;IAAM;IAAM;IAAM;GAAI;GACjD,MAAM,iBAAiB;IACrB,IAAI;KACF,IAAI;KACJ,IAAI;KACJ,IAAI,IAAI;KACR,IAAI,KAAK;KACT,IAAI,IAAI;KACR,IAAI;IACN;IACA,IAAI;KACF,IAAI;KACJ,IAAI;KACJ,IAAI,IAAI;KACR,IAAI,KAAK;KACT,IAAI,IAAI;KACR,IAAI;IACN;IACA,IAAI;KACF,IAAI;KACJ,IAAI;KACJ,IAAI;KACJ,IAAI;KACJ,IAAI;KACJ,IAAI;IACN;IACA,IAAI;KACF,IAAI,OAAO;KACX,IAAI,OAAO;KACX,IAAI,IAAI;KACR,IAAI;KACJ,IAAI,IAAI;KACR,IAAI;IACN;IACA,IAAI;KACF,IAAI,OAAO;KACX,IAAI,OAAO;KACX,IAAI,IAAI;KACR,IAAI,KAAK;KACT,IAAI;KACJ,IAAI;IACN;IACA,IAAI,EACF,IAAI,EACN;GACF;GACA,SAAS,oBAAoB,QAAQ;IACnC,IAAI,UAAU;IACd,IAAI,OAAO,WAAW,YAAY,kBAAkB,QAClD,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;KAC5C,MAAM,IAAI,MAAM;KAChB,IAAI,OAAO,SAAS,CAAC,GAAG;MACtB,UAAU;MACV,SAAS,OAAO,UAAU,GAAG,OAAO,SAAS,EAAE,MAAM;MACrD;KACF;IACF;IAEF,IAAI,QAAQ,KAAK;IACjB,IAAI,YAAY,QAAQ,MAAM,gBAAgB,MAC5C,QAAQ,eAAe,MAAM,MAAM,eAAe,MAAM;SACnD;KACL,QAAQ,eAAe,SAAS,MAAM;KACtC,IAAI,QAAQ,GACV,QAAQ,eAAe,SAAS,QAAQ,MAAM;IAElD;IACA,OAAO,QAAQ,WAAW,MAAM;GAClC;GACA,SAAS,iBAAiB,MAAM;IAC9B,IAAI,EAAE,KAAK,aAAa,WAAW,KAAK,KAAK,aAAa,UAAU,KAAK,aAAa,GAAG,KAAK,KAAK,aAAa,GAAG,KACjH,OAAO;IAET,MAAM,YAAY,mBAAmB,IAAI;IACzC,IAAI,eAAe,SAAS,GAC1B,UAAU,YAAY,eAAe,eAAe,SAAS,EAAE;IAEjE,iBAAiB,KAAK,SAAS;IAC/B,eAAe,KAAK,SAAS;IAC7B,OAAO;GACT;GACA,SAAS,mBAAmB,MAAM;IAChC,MAAM,YAAY,IAAI,QAAQ;IAC9B,MAAM,oBAAoB;IAC1B,IAAI,KAAK,aAAa,UAAU,KAAK,aAAa,GAAG,KAAK,KAAK,aAAa,GAAG,IAAI;KACjF,MAAM,KAAK,oBAAoB,KAAK,aAAa,GAAG,CAAC;KACrD,MAAM,KAAK,oBAAoB,KAAK,aAAa,GAAG,CAAC;KACrD,UAAU,UAAU,IAAI,EAAE;IAC5B;IACA,IAAI,KAAK,aAAa,WAAW,GAAG;KAClC,MAAM,kBAAkB,KAAK,aAAa,WAAW,EAAE,MAAM,GAAG;KAChE,KAAK,IAAI,SAAS,gBAAgB,SAAS,GAAG,UAAU,GAAG,UAAU;MACnE,MAAM,gBAAgB,gBAAgB,QAAQ,KAAK;MACnD,IAAI,kBAAkB,IACpB;MACF,MAAM,aAAa,cAAc,QAAQ,GAAG;MAC5C,MAAM,cAAc,cAAc;MAClC,IAAI,aAAa,KAAK,aAAa,aAAa;OAC9C,MAAM,gBAAgB,cAAc,MAAM,GAAG,UAAU;OACvD,MAAM,QAAQ,YAAY,cAAc,MAAM,aAAa,CAAC,CAAC;OAC7D,kBAAkB,SAAS;OAC3B,QAAQ,eAAR;QACE,KAAK;SACH,IAAI,MAAM,UAAU,GAAG;UACrB,MAAM,KAAK,MAAM;UACjB,IAAI,KAAK;UACT,IAAI,MAAM,UAAU,GAClB,KAAK,MAAM;UAEb,kBAAkB,UAAU,IAAI,EAAE;SACpC;SACA;QACF,KAAK;SACH,IAAI,MAAM,UAAU,GAAG;UACrB,IAAI,QAAQ;UACZ,IAAI,KAAK;UACT,IAAI,KAAK;UACT,QAAQ,MAAM,KAAK,KAAK,KAAK;UAC7B,IAAI,MAAM,UAAU,GAAG;WACrB,KAAK,MAAM;WACX,KAAK,MAAM;UACb;UACA,eAAe,gBAAgB,CAAC,IAAI,CAAC,EAAE;UACvC,eAAe,aAAa,KAAK;UACjC,eAAe,iBAAiB,gBAAgB,cAAc;UAC9D,eAAe,gBAAgB,IAAI,EAAE;UACrC,kBAAkB,iBAAiB,gBAAgB,cAAc;SACnE;SACA;QACF,KAAK;SACH,IAAI,MAAM,UAAU,GAAG;UACrB,MAAM,SAAS,MAAM;UACrB,IAAI,SAAS;UACb,IAAI,MAAM,UAAU,GAClB,SAAS,MAAM;UAEjB,kBAAkB,MAAM,QAAQ,MAAM;SACxC;SACA;QACF,KAAK;SACH,IAAI,MAAM,WAAW,GACnB,kBAAkB,IAAI,GAAG,KAAK,IAAI,MAAM,KAAK,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;SAElF;QACF,KAAK;SACH,IAAI,MAAM,WAAW,GACnB,kBAAkB,IAAI,GAAG,GAAG,GAAG,KAAK,IAAI,MAAM,KAAK,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;SAElF;QACF,KAAK;SACH,IAAI,MAAM,WAAW,GACnB,kBAAkB,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,GAAG,GAAG,CAAC;SAE3F;OACJ;MACF;MACA,UAAU,YAAY,iBAAiB;KACzC;IACF;IACA,OAAO;GACT;GACA,SAAS,cAAc,MAAM,GAAG;IAC9B,SAAS,WAAW,IAAI;KACtB,OAAO,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,aAAa,CAAC;KACxC,GAAG,IAAI,OAAO,GAAG,OAAO,CAAC;IAC3B;IACA,SAAS,qBAAqB,OAAO;KACnC,MAAM,IAAI,MAAM;KAChB,MAAM,IAAI,MAAM;KAChB,MAAM,WAAW,KAAK,IAAI,MAAM,SAAS;KACzC,MAAM,WAAW,KAAK,IAAI,MAAM,SAAS;KACzC,MAAM,KAAK,IAAI,QAAQ,IAAI,UAAU,IAAI,UAAU,CAAC;KACpD,MAAM,KAAK,IAAI,QAAQ,CAAC,IAAI,UAAU,IAAI,UAAU,CAAC;KACrD,MAAM,KAAK,GAAG,aAAa,CAAC;KAC5B,MAAM,KAAK,GAAG,aAAa,CAAC;KAC5B,MAAM,KAAK,eAAe,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;KACnE,MAAM,QAAQ,eAAe,KAAK,EAAE,EAAE,OAAO;KAG7C,MAAM,MAFS,eAAe,KAAK,KAAK,EAAE,UAC1B,EAAE,SAAS,KACd,EAAE;KACf,MAAM,KAAK,mBAAmB,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;KACpD,MAAM,UAAU,KAAK,KAAK,GAAG,GAAG;KAChC,MAAM,UAAU,KAAK,KAAK,GAAG,GAAG;KAChC,MAAM,UAAU,IAAI;KACpB,MAAM,UAAU,IAAI;KACpB,MAAM,YAAY,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE;KAEzC,IAAI,GADmB,MAAM,YAAY,MAAM,gBAAgB,IAAI,KAAK,MAAM,OAAO,UACjE;MAClB,MAAM,SAAS,eAAe,IAAI,SAAS,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,GAAG,CAAC;MACvE,MAAM,MAAM,eAAe,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC;MACzE,MAAM,OAAO,OAAO,SAAS,GAAG,EAAE,SAAS,EAAE;MAC7C,MAAM,kBAAkB,QAAQ;OAC9B,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,IAAI,QAAQ,KAAK,IAAI,GAAG,GAAG,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,aAAa,IAAI;OAC3F,OAAO,KAAK,MAAM,MAAM,IAAI;MAC9B;MACA,MAAM,cAAc,eAAe,MAAM,WAAW;MACpD,MAAM,YAAY,eAAe,MAAM,SAAS;MAChD,IAAI,mBAAmB,CAAC,GACtB,MAAM,aAAa,CAAC,MAAM;KAE9B;IACF;IACA,SAAS,oBAAoB,OAAO;KAClC,MAAM,KAAK,mBAAmB,CAAC;KAC/B,MAAM,KAAK,mBAAmB,CAAC;KAC/B,MAAM,WAAW;KACjB,MAAM,WAAW;KACjB,MAAM,QAAQ,KAAK,OAAO,UAAU,KAAK,MAAM,EAAE,SAAS,IAAI,EAAE,SAAS,EAAE,IAAI,KAAK,MAAM,CAAC,EAAE,SAAS,IAAI,EAAE,SAAS,EAAE;KACvH,MAAM,aAAa;KACnB,IAAI,mBAAmB,CAAC,GAAG;MACzB,MAAM,eAAe;MACrB,MAAM,aAAa;MACnB,MAAM,aAAa,CAAC,MAAM;KAC5B;IACF;IACA,MAAM,WAAW,KAAK;IACtB,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,IAAI,GAAG,KAAK;KAE/C,MAAM,SADU,SAAS,GACF;KACvB,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;MACtC,MAAM,QAAQ,OAAO;MACrB,IAAI,MAAM,aAAa;OACrB,WAAW,MAAM,EAAE;OACnB,WAAW,MAAM,EAAE;MACrB,OAAO,IAAI,MAAM,oBAAoB;OACnC,WAAW,MAAM,EAAE;OACnB,WAAW,MAAM,EAAE;OACnB,WAAW,MAAM,EAAE;OACnB,WAAW,MAAM,EAAE;MACrB,OAAO,IAAI,MAAM,wBAAwB;OACvC,WAAW,MAAM,EAAE;OACnB,WAAW,MAAM,EAAE;OACnB,WAAW,MAAM,EAAE;MACrB,OAAO,IAAI,MAAM,gBAAgB;OAC/B,OAAO,IAAI,MAAM,IAAI,MAAM,EAAE;OAC7B,WAAW,MAAM;OACjB,MAAM,KAAK,OAAO;OAClB,MAAM,KAAK,OAAO;OAClB,IAAI,kBAAkB,CAAC,GACrB,qBAAqB,KAAK;YAE1B,oBAAoB,KAAK;MAE7B;KACF;IACF;GACF;GACA,SAAS,mBAAmB,GAAG;IAC7B,MAAM,KAAK,EAAE;IACb,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK;GACzC;GACA,SAAS,kBAAkB,GAAG;IAC5B,MAAM,KAAK,EAAE;IACb,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG;IAC5C,IAAI,aAAa,GACf,OAAO;IACT,MAAM,KAAK,mBAAmB,CAAC;IAC/B,MAAM,KAAK,mBAAmB,CAAC;IAC/B,OAAO,KAAK,IAAI,YAAY,KAAK,GAAG,IAAI,OAAO;GACjD;GACA,SAAS,mBAAmB,GAAG;IAC7B,MAAM,KAAK,EAAE;IACb,OAAO,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,EAAE;GAChD;GACA,SAAS,mBAAmB,GAAG;IAC7B,MAAM,KAAK,EAAE;IACb,OAAO,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,EAAE;GAChD;GACA,SAAS,mBAAmB,GAAG,GAAG,GAAG;IACnC,IAAI,KAAK,KAAK,IAAI,IAAI;IACtB,MAAM,KAAK,IAAI;IACf,MAAM,KAAK,IAAI;IACf,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC;IACxC,IAAI,KAAK,GAAG;KACV,MAAM,MAAO,KAAK;KAClB,IAAI,IAAI;KACR,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI;IAC5B,OAAO,IAAI,KAAK,GACd,MAAM,MAAO,KAAK;SACb;KACL,MAAM,KAAM;KACZ,MAAM,MAAO;IACf;IACA,IAAI,KAAK,GACP,KAAK,KAAK;SAEV,KAAK,KAAK;IAEZ,IAAI,KAAK,IAAI,EAAE,IAAI,IAAI,KAAK,IAAI,CAAC,GAAG;KAClC,IAAI,KAAK,IAAI;KACb,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC;KAC5B,KAAK,IAAI;IACX,OAAO,IAAI,KAAK,IAAI,CAAC,MAAM,GAAG;KAC5B,KAAK;KACL,KAAK;IACP,OAAO;KACL,IAAI,MAAO,KAAK;KAChB,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC;KAC5B,KAAK,IAAI;IACX;IACA,IAAI,KAAK,GAAG;KACV,IAAI;KACJ,KAAK,CAAC;KACN,KAAK;IACP;IACA,OAAO;KAAE;KAAK;KAAK;KAAI;IAAG;GAC5B;GACA,MAAM,QAAQ,CAAC;GACf,MAAM,cAAc,CAAC;GACrB,MAAM,iBAAiB,CAAC;GACxB,MAAM,iBAAiB,IAAI,QAAQ;GACnC,MAAM,iBAAiB,IAAI,QAAQ;GACnC,MAAM,iBAAiB,IAAI,QAAQ;GACnC,MAAM,iBAAiB,IAAI,QAAQ;GACnC,MAAM,SAAS,IAAI,QAAQ;GAC3B,MAAM,SAAS,IAAI,QAAQ;GAC3B,MAAM,mBAAmB,IAAI,QAAQ;GACrC,MAAM,MAAM,IAAI,UAAU,EAAE,gBAAgB,MAAM,eAAe;GACjE,UAAU,IAAI,iBAAiB;IAC7B,MAAM;IACN,aAAa;IACb,eAAe;IACf,aAAa;IACb,gBAAgB;IAChB,eAAe;IACf,kBAAkB;GACpB,CAAC;GAED,OAAO;IADQ;IAAO,KAAK,IAAI;GACrB;EACZ;EACA,OAAO,aAAa,WAAW;GAC7B,MAAM,YAAY;GAClB,MAAM,2BAA2B;IAC/B,QAAQ;IACR,aAAa;IACb,SAAS;IACT,MAAM;IACN,OAAO;IACP,QAAQ;IACR,QAAQ;GACV;GACA,MAAM,iBAAiB;IACrB,KAAK,yBAAyB;IAC9B,GAAG;GACL;GACA,SAAS,qBAAqB,IAAI,IAAI,IAAI,IAAI;IAC5C,MAAM,KAAK,GAAG;IACd,MAAM,KAAK,GAAG;IACd,MAAM,KAAK,GAAG;IACd,MAAM,KAAK,GAAG;IACd,MAAM,KAAK,GAAG;IACd,MAAM,KAAK,GAAG;IACd,MAAM,KAAK,GAAG;IACd,MAAM,KAAK,GAAG;IACd,MAAM,QAAQ,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK;IACvD,MAAM,QAAQ,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK;IACvD,MAAM,SAAS,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK;IACxD,MAAM,KAAK,OAAO;IAClB,MAAM,KAAK,OAAO;IAClB,IAAI,UAAU,KAAK,SAAS,KAAK,MAAM,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,GACpE,OAAO;SACF,IAAI,SAAS,KAAK,UAAU,GAAG;KACpC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;MAC1B,cAAc,MAAM,IAAI,KAAK,IAAI,IAAI,EAAE;MACvC,IAAI,eAAe,OAAO,yBAAyB,QAAQ;OACzD,MAAM,QAAQ,MAAM,IAAI,KAAK;OAC7B,OAAO;QAAE,GAAG,MAAM;QAAG,GAAG,MAAM;QAAG,GAAG,eAAe;OAAE;MACvD,OAAO,IAAI,eAAe,OAAO,yBAAyB,SAGxD,OAAO;OAAE,GAAA,EAFG,KAAK,eAAe,KAAK,KAAK,KAAK,YAAY,EAAE;OAEjD,GAAA,EADA,KAAK,eAAe,KAAK,KAAK,KAAK,YAAY,EAAE;OAC9C,GAAG,eAAe;MAAE;KAEvC;KACA,OAAO;IACT,OAAO;KACL,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;MAC1B,cAAc,MAAM,IAAI,KAAK,IAAI,IAAI,EAAE;MACvC,IAAI,eAAe,OAAO,yBAAyB,QAAQ;OACzD,MAAM,QAAQ,MAAM,IAAI,KAAK;OAC7B,OAAO;QAAE,GAAG,MAAM;QAAG,GAAG,MAAM;QAAG,GAAG,eAAe;OAAE;MACvD;KACF;KAGA,OAAO;MAAE,GAAA,EAFG,KAAK,MAAM,KAAK,KAAK,YAAY,EAAE;MAEnC,GAAA,EADA,KAAK,MAAM,KAAK,KAAK,YAAY,EAAE;MAChC,GAAG;KAAG;IACvB;GACF;GACA,SAAS,cAAc,GAAG,WAAW,SAAS;IAC5C,MAAM,KAAK,QAAQ,IAAI,UAAU;IACjC,MAAM,KAAK,QAAQ,IAAI,UAAU;IACjC,MAAM,KAAK,EAAE,IAAI,UAAU;IAC3B,MAAM,KAAK,EAAE,IAAI,UAAU;IAC3B,MAAM,KAAK,KAAK,KAAK,KAAK;IAC1B,IAAI,EAAE,MAAM,UAAU,KAAK,EAAE,MAAM,UAAU,GAAG;KAC9C,eAAe,MAAM,yBAAyB;KAC9C,eAAe,IAAI;KACnB;IACF;IACA,IAAI,EAAE,MAAM,QAAQ,KAAK,EAAE,MAAM,QAAQ,GAAG;KAC1C,eAAe,MAAM,yBAAyB;KAC9C,eAAe,IAAI;KACnB;IACF;IACA,IAAI,KAAK,CAAC,OAAO,SAAS;KACxB,eAAe,MAAM,yBAAyB;KAC9C;IACF;IACA,IAAI,KAAK,OAAO,SAAS;KACvB,eAAe,MAAM,yBAAyB;KAC9C;IACF;IACA,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;KAC9B,eAAe,MAAM,yBAAyB;KAC9C;IACF;IACA,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,GAAG;KAC/D,eAAe,MAAM,yBAAyB;KAC9C;IACF;IACA,IAAI;IACJ,IAAI,OAAO,GACT,IAAI,KAAK;SAET,IAAI,KAAK;IAEX,eAAe,MAAM,yBAAyB;IAC9C,eAAe,IAAI;GACrB;GACA,SAAS,iBAAiB,OAAO,OAAO;IACtC,MAAM,mBAAmB,CAAC;IAC1B,MAAM,gBAAgB,CAAC;IACvB,KAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS;KACjD,MAAM,iBAAiB,MAAM,QAAQ;KACrC,MAAM,eAAe,MAAM;KAC3B,KAAK,IAAI,SAAS,GAAG,SAAS,MAAM,QAAQ,UAAU;MACpD,MAAM,iBAAiB,MAAM,SAAS;MACtC,MAAM,eAAe,MAAM;MAC3B,MAAM,eAAe,qBAAqB,gBAAgB,cAAc,gBAAgB,YAAY;MACpG,IAAI,iBAAiB,QAAQ,iBAAiB,MAC3C,MAAM,EAAE,KAAK,aAAa,IAAI,OAAO,WAAW,EAAE,KAAK,aAAa,IAAI,OAAO,OAClF,MAAM,KAAK,GAAG;OACZ,iBAAiB,KAAK,YAAY;OAClC,cAAc,KAAK,IAAI,QAAQ,aAAa,GAAG,aAAa,CAAC,CAAC;MAChE;KACF;IACF;IACA,OAAO;GACT;GACA,SAAS,yBAAyB,UAAU,aAAa,OAAO;IAC9D,MAAM,SAAS,IAAI,QAAQ;IAC3B,YAAY,UAAU,MAAM;IAC5B,MAAM,mBAAmB,CAAC;IAC1B,MAAM,SAAS,SAAS;KACtB,IAAI,KAAK,YAAY,cAAc,MAAM,GAEvC,iBADuC,UAAU,KAAK,MAC1C,EAAE,SAAS,MAAM;MAC3B,iBAAiB,KAAK;OAAE,YAAY,KAAK;OAAY,MAAM,KAAK;OAAM,OAAO;MAAE,CAAC;KAClF,CAAC;IAEL,CAAC;IACD,iBAAiB,MAAM,IAAI,OAAO;KAChC,OAAO,GAAG,MAAM,IAAI,GAAG,MAAM;IAC/B,CAAC;IACD,OAAO;GACT;GACA,SAAS,SAAS,YAAY,UAAU,eAAe,eAAe,WAAW;IAC/E,IAAI,cAAc,QAAQ,cAAc,KAAK,KAAK,cAAc,IAC9D,YAAY;IAEd,MAAM,oBAAoB,IAAI,QAAQ;IACtC,WAAW,YAAY,UAAU,iBAAiB;IAKlD,MAAM,wBAAwB,yBAAyB,CAHrD,IAAI,QAAQ,eAAe,kBAAkB,CAAC,GAC9C,IAAI,QAAQ,eAAe,kBAAkB,CAAC,CAEc,GAAG,WAAW,aAAa,QAAQ;IACjG,sBAAsB,MAAM,IAAI,OAAO;KACrC,OAAO,GAAG,MAAM,IAAI,GAAG,MAAM;IAC/B,CAAC;IACD,MAAM,oBAAoB,CAAC;IAC3B,MAAM,qBAAqB,CAAC;IAC5B,sBAAsB,SAAS,OAAO;KACpC,IAAI,GAAG,eAAe,WAAW,YAC/B,kBAAkB,KAAK,EAAE;UAEzB,mBAAmB,KAAK,EAAE;IAE9B,CAAC;IACD,MAAM,eAAe,kBAAkB,GAAG,MAAM;IAChD,MAAM,QAAQ,CAAC;IACf,IAAI,IAAI;IACR,OAAO,IAAI,mBAAmB,UAAU,mBAAmB,GAAG,MAAM,IAAI,cAAc;KACpF,IAAI,MAAM,SAAS,KAAK,MAAM,MAAM,SAAS,OAAO,mBAAmB,GAAG,YACxE,MAAM,IAAI;UAEV,MAAM,KAAK,mBAAmB,GAAG,UAAU;KAE7C;IACF;IACA,MAAM,KAAK,WAAW,UAAU;IAChC,IAAI,cAAc,WAAW;KAC3B,MAAM,SAAS,MAAM,SAAS,MAAM,IAAI,OAAO;KAC/C,MAAM,YAAY,MAAM,MAAM,SAAS;KACvC,OAAO;MAAE,YAAY,WAAW;MAAY;MAAQ,KAAK;KAAU;IACrE,OAAO,IAAI,cAAc,WAAW;KAClC,IAAI,SAAS;KACb,IAAI,YAAY;KAChB,IAAI,cAAc;KAClB,KAAK,IAAI,KAAK,GAAG,KAAK,MAAM,QAAQ,MAAM;MACxC,MAAM,aAAa,MAAM;MACzB,IAAI,QAAQ;OACV,cAAc,SAAS,YAAY;OACnC,SAAS;OACT,YAAY;MACd,OAAO,IAAI,gBAAgB,SAAS,YAAY,MAAM;OACpD,cAAc,SAAS,YAAY;OACnC,SAAS;MACX;KACF;KACA,OAAO;MAAE,YAAY,WAAW;MAAY;MAAQ,KAAK;KAAU;IACrE,OACE,QAAQ,KAAK,kBAAiB,YAAY,kCAAiC;GAE/E;GACA,IAAI,eAAe;GACnB,IAAI,eAAe;GACnB,IAAI,cAAc,UAAU,SAAS,KAAK,MAAM;IAC9C,MAAM,SAAS,EAAE,UAAU;IAC3B,IAAI,OAAO;IACX,IAAI,OAAO;IACX,IAAI,OAAO;IACX,IAAI,OAAO;IACX,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;KACtC,MAAM,KAAK,OAAO;KAClB,IAAI,GAAG,IAAI,MACT,OAAO,GAAG;KAEZ,IAAI,GAAG,IAAI,MACT,OAAO,GAAG;KAEZ,IAAI,GAAG,IAAI,MACT,OAAO,GAAG;KAEZ,IAAI,GAAG,IAAI,MACT,OAAO,GAAG;IAEd;IACA,IAAI,gBAAgB,MAClB,eAAe,OAAO;IAExB,IAAI,gBAAgB,MAClB,eAAe,OAAO;IAExB,OAAO;KACL,QAAQ,EAAE;KACV;KACA,MAAM,WAAW,YAAY,MAAM;KACnC,YAAY;KACZ,aAAa,IAAI,KAAK,IAAI,QAAQ,MAAM,IAAI,GAAG,IAAI,QAAQ,MAAM,IAAI,CAAC;IACxE;GACF,CAAC;GACD,cAAc,YAAY,QAAQ,OAAO,GAAG,OAAO,SAAS,CAAC;GAC7D,KAAK,IAAI,aAAa,GAAG,aAAa,YAAY,QAAQ,cACxD,YAAY,YAAY,aAAa;GAEvC,MAAM,UAAU,YAAY,KACzB,MAAM,SACL,GACA,aACA,cACA,cACA,UAAU,WAAW,UAAU,SAAS,MAAM,WAAW,KAAK,CAChE,CACF;GACA,MAAM,iBAAiB,CAAC;GACxB,YAAY,SAAS,MAAM;IAEzB,IAAI,CADa,QAAQ,EAAE,YACb,QAAQ;KACpB,MAAM,QAAQ,IAAIC,QAAM;KACxB,MAAM,SAAS,EAAE;KAEjB,QADsB,QAAQ,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UACxD,EAAE,SAAS,MAAM;MACnB,MAAM,OAAO,YAAY,EAAE;MAC3B,MAAM,OAAO,IAAI,KAAK;MACtB,KAAK,SAAS,KAAK;MACnB,MAAM,MAAM,KAAK,IAAI;KACvB,CAAC;KACD,eAAe,KAAK,KAAK;IAC3B;GACF,CAAC;GACD,OAAO;EACT;EACA,OAAO,eAAe,OAAO,OAAO,UAAU,SAAS,YAAY;GACjE,QAAQ,UAAU,KAAK,IAAI,QAAQ;GACnC,QAAQ,UAAU,KAAK,IAAI,QAAQ;GACnC,WAAW,aAAa,KAAK,IAAI,WAAW;GAC5C,UAAU,YAAY,KAAK,IAAI,UAAU;GACzC,aAAa,eAAe,KAAK,IAAI,aAAa;GAClD,OAAO;IACL,aAAa;IACb,aAAa;IACb,gBAAgB;IAChB,eAAe;IACf,kBAAkB;GACpB;EACF;EACA,OAAO,eAAe,QAAQ,OAAO,cAAc,aAAa;GAC9D,MAAM,WAAW,CAAC;GAClB,MAAM,UAAU,CAAC;GACjB,MAAM,MAAM,CAAC;GACb,IAAI,WAAW,0BAA0B,QAAQ,OAAO,cAAc,aAAa,UAAU,SAAS,GAAG,MAAM,GAC7G,OAAO;GAET,MAAM,WAAW,IAAI,eAAe;GACpC,SAAS,aAAa,YAAY,IAAI,uBAAuB,UAAU,CAAC,CAAC;GACzE,SAAS,aAAa,UAAU,IAAI,uBAAuB,SAAS,CAAC,CAAC;GACtE,SAAS,aAAa,MAAM,IAAI,uBAAuB,KAAK,CAAC,CAAC;GAC9D,OAAO;EACT;EACA,OAAO,0BAA0B,QAAQ,OAAO,cAAc,aAAa,UAAU,SAAS,KAAK,cAAc;GAC/G,MAAM,WAAW,IAAI,QAAQ;GAC7B,MAAM,WAAW,IAAI,QAAQ;GAC7B,MAAM,WAAW,IAAI,QAAQ;GAC7B,MAAM,WAAW,IAAI,QAAQ;GAC7B,MAAM,WAAW,IAAI,QAAQ;GAC7B,MAAM,WAAW,IAAI,QAAQ;GAC7B,MAAM,WAAW,IAAI,QAAQ;GAC7B,MAAM,aAAa,IAAI,QAAQ;GAC/B,MAAM,aAAa,IAAI,QAAQ;GAC/B,MAAM,UAAU,IAAI,QAAQ;GAC5B,MAAM,UAAU,IAAI,QAAQ;GAC5B,MAAM,gBAAgB,IAAI,QAAQ;GAClC,MAAM,gBAAgB,IAAI,QAAQ;GAClC,MAAM,aAAa,IAAI,QAAQ;GAC/B,MAAM,aAAa,IAAI,QAAQ;GAC/B,MAAM,aAAa,IAAI,QAAQ;GAC/B,MAAM,aAAa,IAAI,QAAQ;GAC/B,eAAe,iBAAiB,KAAK,IAAI,eAAe;GACxD,cAAc,gBAAgB,KAAK,IAAI,cAAc;GACrD,eAAe,iBAAiB,KAAK,IAAI,eAAe;GACxD,SAAS,uBAAuB,MAAM;GACtC,MAAM,YAAY,OAAO;GACzB,IAAI,YAAY,GACd,OAAO;GACT,MAAM,WAAW,OAAO,GAAG,OAAO,OAAO,YAAY,EAAE;GACvD,IAAI;GACJ,IAAI,gBAAgB,OAAO;GAC3B,IAAI;GACJ,MAAM,eAAe,MAAM,cAAc;GACzC,MAAM,SAAS,KAAK,YAAY;GAChC,IAAI,KAAK,GAAG;GACZ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI,0BAA0B;GAC9B,IAAI,cAAc;GAClB,IAAI,oBAAoB,eAAe;GACvC,IAAI,sBAAsB,eAAe;GACzC,UAAU,OAAO,IAAI,OAAO,IAAI,QAAQ,EAAE,eAAe,YAAY;GACrE,WAAW,KAAK,OAAO,EAAE,EAAE,IAAI,QAAQ;GACvC,WAAW,KAAK,OAAO,EAAE,EAAE,IAAI,QAAQ;GACvC,QAAQ,KAAK,UAAU;GACvB,QAAQ,KAAK,UAAU;GACvB,KAAK,IAAI,SAAS,GAAG,SAAS,WAAW,UAAU;IACjD,eAAe,OAAO;IACtB,IAAI,WAAW,YAAY,GACzB,IAAI,UACF,YAAY,OAAO;SAEnB,YAAY,KAAK;SAEnB,YAAY,OAAO,SAAS;IAE9B,MAAM,UAAU;IAChB,UAAU,eAAe,cAAc,OAAO;IAC9C,SAAS,KAAK,OAAO,EAAE,eAAe,YAAY;IAClD,cAAc,KAAK,YAAY,EAAE,IAAI,QAAQ;IAC7C,cAAc,KAAK,YAAY,EAAE,IAAI,QAAQ;IAC7C,KAAK,KAAK;IACV,oBAAoB;IACpB,IAAI,cAAc,KAAK,GAAG;KACxB,UAAU,cAAc,WAAW,QAAQ;KAC3C,SAAS,KAAK,QAAQ,EAAE,eAAe,YAAY;KACnD,WAAW,KAAK,YAAY,EAAE,IAAI,QAAQ;KAC1C,WAAW,KAAK,YAAY,EAAE,IAAI,QAAQ;KAC1C,mBAAmB;KACnB,SAAS,WAAW,WAAW,aAAa;KAC5C,IAAI,QAAQ,IAAI,QAAQ,IAAI,GAC1B,mBAAmB;KAErB,IAAI,WAAW,GACb,0BAA0B;KAC5B,SAAS,WAAW,WAAW,YAAY;KAC3C,SAAS,UAAU;KACnB,MAAM,MAAM,KAAK,IAAI,QAAQ,IAAI,QAAQ,CAAC;KAC1C,IAAI,MAAM,OAAO,SAAS;MACxB,MAAM,YAAY,eAAe;MACjC,SAAS,eAAe,CAAC,SAAS;MAClC,SAAS,WAAW,cAAc,aAAa;MAC/C,SAAS,KAAK,QAAQ,EAAE,UAAU,SAAS,EAAE,IAAI,QAAQ;MACzD,WAAW,KAAK,QAAQ,EAAE,OAAO;MACjC,MAAM,eAAe,SAAS,OAAO;MACrC,MAAM,oBAAoB,SAAS,OAAO;MAC1C,SAAS,aAAa,iBAAiB;MACvC,SAAS,WAAW,WAAW,YAAY;MAC3C,MAAM,oBAAoB,SAAS,OAAO;MAC1C,SAAS,aAAa,iBAAiB;MACvC,IAAI,SAAS,IAAI,UAAU,IAAI,qBAAqB,SAAS,IAAI,UAAU,IAAI,mBAC7E,oBAAoB;MAEtB,WAAW,KAAK,QAAQ,EAAE,IAAI,YAAY;MAC1C,WAAW,IAAI,YAAY;MAC3B,UAAU;MACV,IAAI,mBACF,IAAI,kBAAkB;OACpB,WAAW,KAAK,UAAU;OAC1B,cAAc,KAAK,UAAU;MAC/B,OAAO;OACL,WAAW,KAAK,UAAU;OAC1B,cAAc,KAAK,UAAU;MAC/B;WAEA,qBAAqB;MAEvB,QAAQ,MAAM,gBAAd;OACE,KAAK;QACH,yBAAyB,kBAAkB,mBAAmB,EAAE;QAChE;OACF,KAAK;QACH,wCAAwC,kBAAkB,iBAAiB;QAC3E,IAAI,kBACF,mBAAmB,cAAc,eAAe,YAAY,IAAI,CAAC;aAEjE,mBAAmB,cAAc,YAAY,eAAe,IAAI,CAAC;QAEnE;OAGF;QACE,MAAM,gBAAgB,eAAe,MAAM,mBAAmB;QAC9D,IAAI,gBAAgB,GAClB,IAAI,MAAM,mBAAmB,cAAc;SACzC,yBAAyB,kBAAkB,mBAAmB,EAAE;SAChE;QACF,OAAO;SACL,wCAAwC,kBAAkB,iBAAiB;SAC3E,IAAI,kBAAkB;UACpB,SAAS,WAAW,YAAY,aAAa,EAAE,eAAe,aAAa,EAAE,IAAI,aAAa;UAC9F,SAAS,WAAW,YAAY,UAAU,EAAE,eAAe,aAAa,EAAE,IAAI,UAAU;UACxF,UAAU,eAAe,IAAI,CAAC;UAC9B,UAAU,UAAU,IAAI,CAAC;UACzB,UAAU,cAAc,IAAI,EAAG;UAC/B,UAAU,cAAc,IAAI,EAAG;UAC/B,UAAU,UAAU,IAAI,CAAC;UACzB,UAAU,UAAU,IAAI,CAAC;UACzB,UAAU,cAAc,IAAI,EAAG;UAC/B,UAAU,UAAU,IAAI,CAAC;UACzB,UAAU,YAAY,IAAI,CAAC;SAC7B,OAAO;UACL,SAAS,WAAW,YAAY,aAAa,EAAE,eAAe,aAAa,EAAE,IAAI,aAAa;UAC9F,SAAS,WAAW,YAAY,UAAU,EAAE,eAAe,aAAa,EAAE,IAAI,UAAU;UACxF,UAAU,eAAe,IAAI,CAAC;UAC9B,UAAU,UAAU,IAAI,CAAC;UACzB,UAAU,cAAc,IAAI,EAAG;UAC/B,UAAU,cAAc,IAAI,EAAG;UAC/B,UAAU,UAAU,IAAI,CAAC;UACzB,UAAU,UAAU,IAAI,CAAC;UACzB,UAAU,cAAc,IAAI,EAAG;UAC/B,UAAU,UAAU,IAAI,CAAC;UACzB,UAAU,YAAY,IAAI,CAAC;SAC7B;QACF;aACK;SACL,IAAI,mBAAmB;UACrB,IAAI,kBAAkB;WACpB,UAAU,YAAY,IAAI,CAAC;WAC3B,UAAU,YAAY,IAAI,CAAC;WAC3B,UAAU,YAAY,IAAI,CAAC;WAC3B,UAAU,YAAY,IAAI,CAAC;WAC3B,UAAU,YAAY,IAAI,CAAC;WAC3B,UAAU,YAAY,IAAI,CAAC;UAC7B,OAAO;WACL,UAAU,YAAY,IAAI,CAAC;WAC3B,UAAU,YAAY,IAAI,CAAC;WAC3B,UAAU,YAAY,IAAI,CAAC;WAC3B,UAAU,YAAY,IAAI,CAAC;WAC3B,UAAU,YAAY,IAAI,CAAC;WAC3B,UAAU,YAAY,IAAI,CAAC;UAC7B;UACA,IAAI,kBACF,WAAW,KAAK,UAAU;eAE1B,WAAW,KAAK,UAAU;SAE9B,OACE,IAAI,kBAAkB;UACpB,UAAU,eAAe,IAAI,CAAC;UAC9B,UAAU,YAAY,IAAI,CAAC;UAC3B,UAAU,cAAc,IAAI,EAAG;UAC/B,UAAU,cAAc,IAAI,EAAG;UAC/B,UAAU,YAAY,IAAI,CAAC;UAC3B,UAAU,YAAY,IAAI,CAAC;SAC7B,OAAO;UACL,UAAU,eAAe,IAAI,CAAC;UAC9B,UAAU,YAAY,IAAI,CAAC;UAC3B,UAAU,cAAc,IAAI,EAAG;UAC/B,UAAU,cAAc,IAAI,EAAG;UAC/B,UAAU,YAAY,IAAI,CAAC;UAC3B,UAAU,YAAY,IAAI,CAAC;SAC7B;SAEF,UAAU;QACZ;QACA;MACJ;KACF,OACE,qBAAqB;IAEzB,OACE,qBAAqB;IAEvB,IAAI,CAAC,YAAY,WAAW,YAAY,GACtC,eAAe,OAAO,IAAI,SAAS,SAAS,kBAAkB,MAAM,EAAE;IAExE,KAAK;IACL,gBAAgB;IAChB,WAAW,KAAK,UAAU;IAC1B,WAAW,KAAK,UAAU;GAC5B;GACA,IAAI,CAAC,UACH,eAAe,cAAc,eAAe,eAAe,kBAAkB,OAAO,EAAE;QACjF,IAAI,qBAAqB,UAAU;IACxC,IAAI,YAAY;IAChB,IAAI,YAAY;IAChB,IAAI,4BAA4B,kBAAkB;KAChD,YAAY;KACZ,YAAY;IACd;IACA,IAAI;SACE,WAAW,yBAAyB;MACtC,UAAU,QAAQ,UAAU,CAAK;MACjC,UAAU,QAAQ,UAAU,CAAK;MACjC,IAAI,SACF,UAAU,QAAQ,UAAU,CAAK;KAErC;WAEA,IAAI,WAAW,CAAC,yBAAyB;KACvC,UAAU,QAAQ,UAAU,CAAK;KACjC,UAAU,QAAQ,UAAU,CAAK;KACjC,IAAI,SACF,UAAU,QAAQ,UAAU,CAAK;IAErC;GAEJ;GACA,OAAO;GACP,SAAS,UAAU,IAAI,IAAI,QAAQ;IACjC,OAAO,WAAW,IAAI,EAAE;IACxB,OAAO,OAAO,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,EAAE,UAAU;GACnD;GACA,SAAS,UAAU,UAAU,GAAG,GAAG;IACjC,IAAI,UAAU;KACZ,SAAS,qBAAqB,SAAS;KACvC,SAAS,oBAAoB,KAAK,SAAS;KAC3C,SAAS,oBAAoB,KAAK;KAClC,IAAI,SAAS;MACX,QAAQ,qBAAqB;MAC7B,QAAQ,oBAAoB,KAAK;MACjC,QAAQ,oBAAoB,KAAK;KACnC;KACA,qBAAqB;KACrB,IAAI,KAAK;MACP,IAAI,uBAAuB;MAC3B,IAAI,sBAAsB,KAAK;MAC/B,uBAAuB;KACzB;IACF;IACA,eAAe;GACjB;GACA,SAAS,mBAAmB,QAAQ,IAAI,IAAI,GAAG,GAAG;IAChD,SAAS,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,UAAU;IACxC,SAAS,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,UAAU;IACxC,IAAI,QAAQ,KAAK;IACjB,MAAM,MAAM,SAAS,IAAI,QAAQ;IACjC,IAAI,KAAK,IAAI,GAAG,IAAI,GAClB,QAAQ,KAAK,IAAI,KAAK,KAAK,GAAG,CAAC;IACjC,SAAS;IACT,SAAS,KAAK,EAAE;IAChB,KAAK,IAAI,IAAI,GAAG,KAAK,eAAe,GAAG,IAAI,IAAI,KAAK;KAClD,SAAS,KAAK,QAAQ,EAAE,aAAa,QAAQ,KAAK;KAClD,UAAU,UAAU,GAAG,CAAC;KACxB,UAAU,UAAU,GAAG,CAAC;KACxB,UAAU,QAAQ,GAAG,EAAG;KACxB,SAAS,KAAK,QAAQ;IACxB;IACA,UAAU,UAAU,GAAG,CAAC;IACxB,UAAU,IAAI,GAAG,CAAC;IAClB,UAAU,QAAQ,GAAG,EAAG;GAC1B;GACA,SAAS,uBAAuB;IAC9B,UAAU,YAAY,IAAI,CAAC;IAC3B,UAAU,YAAY,IAAI,CAAC;IAC3B,UAAU,eAAe,IAAI,CAAC;IAC9B,UAAU,YAAY,IAAI,CAAC;IAC3B,UAAU,eAAe,IAAI,CAAC;IAC9B,UAAU,eAAe,IAAI,CAAC;GAChC;GACA,SAAS,yBAAyB,mBAAmB,oBAAoB,GAAG;IAC1E,IAAI,oBACF,IAAI,mBAAmB;KACrB,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,eAAe,IAAI,CAAC;KAC9B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,eAAe,IAAI,CAAC;KAC9B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,eAAe,GAAG,CAAC;KAC7B,UAAU,YAAY,GAAG,CAAC;KAC1B,UAAU,YAAY,GAAG,EAAG;IAC9B,OAAO;KACL,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,eAAe,IAAI,CAAC;KAC9B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,eAAe,IAAI,CAAC;KAC9B,UAAU,eAAe,GAAG,CAAC;KAC7B,UAAU,YAAY,GAAG,CAAC;KAC1B,UAAU,YAAY,GAAG,CAAC;IAC5B;SAEA,IAAI,mBAAmB;KACrB,UAAU,eAAe,GAAG,CAAC;KAC7B,UAAU,YAAY,GAAG,CAAC;KAC1B,UAAU,cAAc,GAAG,EAAG;IAChC,OAAO;KACL,UAAU,eAAe,GAAG,CAAC;KAC7B,UAAU,YAAY,GAAG,CAAC;KAC1B,UAAU,cAAc,GAAG,EAAG;IAChC;GAEJ;GACA,SAAS,wCAAwC,mBAAmB,oBAAoB;IACtF,IAAI,oBACF,IAAI,mBAAmB;KACrB,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,eAAe,IAAI,CAAC;KAC9B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,eAAe,IAAI,CAAC;KAC9B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,eAAe,IAAI,CAAC;KAC9B,UAAU,cAAc,IAAI,EAAG;KAC/B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,cAAc,IAAI,EAAG;KAC/B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,YAAY,IAAI,CAAC;IAC7B,OAAO;KACL,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,eAAe,IAAI,CAAC;KAC9B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,eAAe,IAAI,CAAC;KAC9B,UAAU,eAAe,IAAI,CAAC;KAC9B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,cAAc,IAAI,EAAG;KAC/B,UAAU,cAAc,IAAI,EAAG;KAC/B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,YAAY,IAAI,CAAC;IAC7B;GAEJ;GACA,SAAS,eAAe,QAAQ,IAAI,IAAI,mBAAmB,OAAO,GAAG;IACnE,QAAQ,MAAM,eAAd;KACE,KAAK;MACH,IAAI,OACF,mBAAmB,QAAQ,IAAI,IAAI,GAAG,EAAG;WAEzC,mBAAmB,QAAQ,IAAI,IAAI,GAAG,EAAG;MAE3C;KACF,KAAK;MACH,IAAI,OAAO;OACT,SAAS,WAAW,IAAI,MAAM;OAC9B,SAAS,IAAI,SAAS,GAAG,CAAC,SAAS,CAAC;OACpC,SAAS,WAAW,UAAU,QAAQ,EAAE,IAAI,MAAM;OAClD,SAAS,WAAW,UAAU,QAAQ,EAAE,IAAI,MAAM;OAClD,IAAI,mBAAmB;QACrB,SAAS,QAAQ,UAAU,CAAK;QAChC,SAAS,QAAQ,UAAU,CAAK;QAChC,SAAS,QAAQ,UAAU,CAAK;OAClC,OAAO;QACL,SAAS,QAAQ,UAAU,CAAK;QAChC,IAAI,OAAe,IAAI,SAAS,QAAQ,UAAU,CAAK,IAAI,SAAS,QAAQ,UAAU,CAAK;QAC3F,SAAS,QAAQ,UAAU,CAAK;OAClC;MACF,OAAO;OACL,SAAS,WAAW,IAAI,MAAM;OAC9B,SAAS,IAAI,SAAS,GAAG,CAAC,SAAS,CAAC;OACpC,SAAS,WAAW,UAAU,QAAQ,EAAE,IAAI,MAAM;OAClD,SAAS,WAAW,UAAU,QAAQ,EAAE,IAAI,MAAM;OAClD,MAAM,KAAK,SAAS;OACpB,IAAI,mBAAmB;QACrB,SAAS,QAAQ,UAAU,KAAK,CAAK;QACrC,SAAS,QAAQ,UAAU,KAAK,CAAK;QACrC,SAAS,QAAQ,UAAU,KAAK,EAAK;OACvC,OAAO;QACL,SAAS,QAAQ,UAAU,KAAK,CAAK;QACrC,SAAS,QAAQ,UAAU,KAAK,CAAK;QACrC,SAAS,QAAQ,UAAU,KAAK,EAAK;OACvC;MACF;MACA;IACJ;GACF;GACA,SAAS,uBAAuB,SAAS;IACvC,IAAI,YAAY;IAChB,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,SAAS,GAAG,IAAI,GAAG,KAC7C,IAAI,QAAQ,GAAG,WAAW,QAAQ,IAAI,EAAE,IAAI,aAAa;KACvD,YAAY;KACZ;IACF;IAEF,IAAI,CAAC,WACH,OAAO;IACT,MAAM,YAAY,CAAC;IACnB,UAAU,KAAK,QAAQ,EAAE;IACzB,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,SAAS,GAAG,IAAI,GAAG,KAC7C,IAAI,QAAQ,GAAG,WAAW,QAAQ,IAAI,EAAE,KAAK,aAC3C,UAAU,KAAK,QAAQ,EAAE;IAG7B,UAAU,KAAK,QAAQ,QAAQ,SAAS,EAAE;IAC1C,OAAO;GACT;EACF;CACF;CACA,OAAO;AACT,GAAG;;;ACzxDH,IAAM,6BAA6B,IAAI,QAAQ;AAC/C,IAAM,cAAN,cAA0BC,SAAO;CAC/B,YAAY,SAAS;EACnB,MAAM,OAAO;EACb,KAAK,cAAc;EACnB,KAAK,gBAAgB,CAAC;EACtB,KAAK,gBAAgB;EACrB,KAAK,iBAAiB;EACtB,KAAK,cAAc;EACnB,KAAK,aAAa,CAAC;EACnB,KAAK,mBAAmB;EACxB,KAAK,kBAAkB;EACvB,KAAK,sBAAsB;GACzB,UAAU;GACV,QAAQ;GACR,OAAO;GACP,IAAI;EACN;EACA,KAAK,wBAAwB;GAC3B,UAAU;GACV,QAAQ;GACR,OAAO;GACP,IAAI;EACN;CACF;CACA,eAAe,MAAM;EACnB,KAAK,cAAc;EACnB,OAAO;CACT;CACA,iBAAiB,QAAQ;EACvB,KAAK,gBAAgB;EACrB,OAAO;CACT;CACA,eAAe,aAAa;EAC1B,KAAK,cAAc;EACnB,OAAO;CACT;CACA,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,MAAM,SAAS,IAAI,WAAW,KAAK,OAAO;EAC1C,OAAO,QAAQ,KAAK,IAAI;EACxB,OAAO,gBAAgB,aAAa;EACpC,OAAO,iBAAiB,KAAK,aAAa;EAC1C,OAAO,mBAAmB,KAAK,eAAe;EAC9C,OAAO,KACL,MACC,WAAW;GACV,MAAM,aAAa;IACjB,cAAc,KAAK;IACnB,gBAAgB,KAAK;IACrB,cAAc;GAChB;GACA,KAAK,eAAe,QAAQ,UAAU,EAAE,KAAK,MAAM,EAAE,MAAM,OAAO;EACpE,GACA,YACA,OACF;CACF;;CAEA,gBAAgB,QAAQ,UAAU,cAAc,gBAAgB;EAC9D,MAAM,aAAa;GACjB,cAAc,gBAAgB,KAAK;GACnC,gBAAgB,kBAAkB,KAAK;GACvC,cAAc,CAAC,CAAC;EAClB;EACA,KAAK,eAAe,QAAQ,UAAU,EAAE,KAAK,QAAQ;CACvD;CACA,eAAe,QAAQ,YAAY;EACjC,KAAK,MAAM,aAAa,WAAW,gBAAgB;GACjD,MAAM,OAAO,WAAW,eAAe;GACvC,IAAI,KAAK,sBAAsB,KAAK,GAClC,WAAW,eAAe,aAAa,KAAK;EAEhD;EACA,MAAM,UAAU,KAAK,UAAU,UAAU;EACzC,IAAI,WAAW,IAAI,MAAM,GAAG;GAC1B,MAAM,aAAa,WAAW,IAAI,MAAM;GACxC,IAAI,WAAW,QAAQ,SACrB,OAAO,WAAW;QACb,IAAI,OAAO,eAAe,GAC/B,MAAM,IAAI,MACR,+GACF;EAEJ;EACA,IAAI;EACJ,MAAM,SAAS,KAAK;EACpB,MAAM,WAAW,OAAO;EACxB,MAAM,kBAAkB,KAAK,WAAW,QAAQ,QAAQ,EAAE,MAAM,YAAY;GAC1E,SAAS;GACT,OAAO,IAAI,SAAS,SAAS,WAAW;IACtC,OAAO,WAAW,UAAU;KAAE;KAAS;IAAO;IAC9C,OAAO,YAAY;KAAE,MAAM;KAAU,IAAI;KAAQ;KAAY;IAAO,GAAG,CAAC,MAAM,CAAC;GACjF,CAAC;EACH,CAAC,EAAE,MAAM,YAAY,KAAK,gBAAgB,QAAQ,QAAQ,CAAC;EAC3D,gBAAgB,YAAY,IAAI,EAAE,WAAW;GAC3C,IAAI,UAAU,QACZ,KAAK,aAAa,QAAQ,MAAM;EAEpC,CAAC;EACD,WAAW,IAAI,QAAQ;GACrB,KAAK;GACL,SAAS;EACX,CAAC;EACD,OAAO;CACT;CACA,gBAAgB,cAAc;EAC5B,MAAM,WAAW,IAAI,eAAe;EACpC,IAAI,aAAa,OACf,SAAS,SAAS,IAAI,gBAAgB,aAAa,MAAM,OAAO,CAAC,CAAC;EAEpE,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,WAAW,QAAQ,KAAK;GACvD,MAAM,YAAY,aAAa,WAAW;GAC1C,MAAM,OAAO,UAAU;GACvB,MAAM,QAAQ,UAAU;GACxB,MAAM,WAAW,UAAU;GAC3B,SAAS,aAAa,MAAM,IAAI,gBAAgB,OAAO,QAAQ,CAAC;EAClE;EACA,OAAO;CACT;CACA,aAAa,KAAK,cAAc;EAC9B,MAAM,SAAS,IAAI,WAAW,KAAK,OAAO;EAC1C,OAAO,QAAQ,KAAK,WAAW;EAC/B,OAAO,gBAAgB,YAAY;EACnC,OAAO,mBAAmB,KAAK,eAAe;EAC9C,OAAO,IAAI,SAAS,SAAS,WAAW;GACtC,OAAO,KAAK,KAAK,SAAS,KAAK,GAAG,MAAM;EAC1C,CAAC;CACH;CACA,UAAU;EACR,KAAK,aAAa;EAClB,OAAO;CACT;CACA,eAAe;EACb,IAAI,KAAK,gBACP,OAAO,KAAK;EACd,MAAM,QAAQ,OAAO,gBAAgB,YAAY,KAAK,cAAc,SAAS;EAC7E,MAAM,mBAAmB,CAAC;EAC1B,IAAI,OACF,iBAAiB,KAAK,KAAK,aAAa,oBAAoB,MAAM,CAAC;OAC9D;GACL,iBAAiB,KAAK,KAAK,aAAa,yBAAyB,MAAM,CAAC;GACxE,iBAAiB,KAAK,KAAK,aAAa,sBAAsB,aAAa,CAAC;EAC9E;EACA,KAAK,iBAAiB,QAAQ,IAAI,gBAAgB,EAAE,MAAM,cAAc;GACtE,MAAM,YAAY,UAAU;GAC5B,IAAI,CAAC,OACH,KAAK,cAAc,aAAa,UAAU;GAE5C,MAAM,KAAK,YAAY,SAAS;GAChC,MAAM,OAAO;IACX;IACA;IACA;IACA;IACA,GAAG,UAAU,GAAG,QAAQ,GAAG,IAAI,GAAG,GAAG,YAAY,GAAG,CAAC;GACvD,EAAE,KAAK,IAAI;GACX,KAAK,kBAAkB,IAAI,gBAAgB,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;EAC7D,CAAC;EACD,OAAO,KAAK;CACd;CACA,WAAW,QAAQ,UAAU;EAC3B,OAAO,KAAK,aAAa,EAAE,WAAW;GACpC,IAAI,KAAK,WAAW,SAAS,KAAK,aAAa;IAC7C,MAAM,UAAU,IAAI,OAAO,KAAK,eAAe;IAC/C,QAAQ,aAAa,CAAC;IACtB,QAAQ,aAAa,CAAC;IACtB,QAAQ,YAAY;IACpB,QAAQ,YAAY;KAAE,MAAM;KAAQ,eAAe,KAAK;IAAc,CAAC;IACvE,QAAQ,YAAY,SAAS,GAAG;KAC9B,MAAM,UAAU,EAAE;KAClB,QAAQ,QAAQ,MAAhB;MACE,KAAK;OACH,QAAQ,WAAW,QAAQ,IAAI,QAAQ,OAAO;OAC9C;MACF,KAAK;OACH,QAAQ,WAAW,QAAQ,IAAI,OAAO,OAAO;OAC7C;MACF,SACE,QAAQ,MAAM,8CAA6C,QAAQ,OAAO,IAAG;KACjF;IACF;IACA,KAAK,WAAW,KAAK,OAAO;GAC9B,OACE,KAAK,WAAW,KAAK,SAAS,GAAG,GAAG;IAClC,OAAO,EAAE,YAAY,EAAE,YAAY,KAAK;GAC1C,CAAC;GAEH,MAAM,SAAS,KAAK,WAAW,KAAK,WAAW,SAAS;GACxD,OAAO,WAAW,UAAU;GAC5B,OAAO,aAAa;GACpB,OAAO;EACT,CAAC;CACH;CACA,aAAa,QAAQ,QAAQ;EAC3B,OAAO,aAAa,OAAO,WAAW;EACtC,OAAO,OAAO,WAAW;EACzB,OAAO,OAAO,WAAW;CAC3B;CACA,QAAQ;EACN,QAAQ,IACN,eACA,KAAK,WAAW,KAAK,WAAW,OAAO,SAAS,CAClD;CACF;CACA,UAAU;EACR,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,EAAE,GAC5C,KAAK,WAAW,GAAG,UAAU;EAE/B,KAAK,WAAW,SAAS;EACzB,OAAO;CACT;AACF;AACA,SAAS,cAAc;CACrB,IAAI;CACJ,IAAI;CACJ,YAAY,SAAS,GAAG;EACtB,MAAM,UAAU,EAAE;EAClB,QAAQ,QAAQ,MAAhB;GACE,KAAK;IACH,gBAAgB,QAAQ;IACxB,iBAAiB,IAAI,QAAQ,SAAS,SAAS;KAC7C,cAAc,iBAAiB,SAAS,OAAO;MAC7C,QAAQ,EAAE,MAAM,CAAC;KACnB;KACA,mBAAmB,aAAa;IAClC,CAAC;IACD;GACF,KAAK;IACH,MAAM,SAAS,QAAQ;IACvB,MAAM,aAAa,QAAQ;IAC3B,eAAe,MAAM,WAAW;KAC9B,MAAM,QAAQ,OAAO;KACrB,MAAM,UAAU,IAAI,MAAM,QAAQ;KAClC,MAAM,gBAAgB,IAAI,MAAM,cAAc;KAC9C,cAAc,KAAK,IAAI,UAAU,MAAM,GAAG,OAAO,UAAU;KAC3D,IAAI;MACF,MAAM,WAAW,eAAe,OAAO,SAAS,eAAe,UAAU;MACzE,MAAM,UAAU,SAAS,WAAW,KAAK,SAAS,KAAK,MAAM,MAAM;MACnE,IAAI,SAAS,OACX,QAAQ,KAAK,SAAS,MAAM,MAAM,MAAM;MAC1C,KAAK,YAAY;OAAE,MAAM;OAAU,IAAI,QAAQ;OAAI;MAAS,GAAG,OAAO;KACxE,SAAS,OAAO;MACd,QAAQ,MAAM,KAAK;MACnB,KAAK,YAAY;OAAE,MAAM;OAAS,IAAI,QAAQ;OAAI,OAAO,MAAM;MAAQ,CAAC;KAC1E,UAAU;MACR,MAAM,QAAQ,aAAa;MAC3B,MAAM,QAAQ,OAAO;KACvB;IACF,CAAC;IACD;EACJ;CACF;CACA,SAAS,eAAe,OAAO,SAAS,eAAe,YAAY;EACjE,MAAM,eAAe,WAAW;EAChC,MAAM,iBAAiB,WAAW;EAClC,IAAI;EACJ,IAAI;EACJ,MAAM,eAAe,QAAQ,uBAAuB,aAAa;EACjE,IAAI,iBAAiB,MAAM,iBAAiB;GAC1C,gBAAgB,IAAI,MAAM,KAAK;GAC/B,iBAAiB,QAAQ,mBAAmB,eAAe,aAAa;EAC1E,OAAO,IAAI,iBAAiB,MAAM,aAAa;GAC7C,gBAAgB,IAAI,MAAM,WAAW;GACrC,iBAAiB,QAAQ,yBAAyB,eAAe,aAAa;EAChF,OACE,MAAM,IAAI,MAAM,8CAA8C;EAEhE,IAAI,CAAC,eAAe,GAAG,KAAK,cAAc,QAAQ,GAChD,MAAM,IAAI,MAAM,yCAAyC,eAAe,UAAU,CAAC;EAErF,MAAM,WAAW;GAAE,OAAO;GAAM,YAAY,CAAC;EAAE;EAC/C,KAAK,MAAM,iBAAiB,cAAc;GACxC,MAAM,gBAAgB,KAAK,eAAe;GAC1C,IAAI;GACJ,IAAI;GACJ,IAAI,WAAW,cAAc;IAC3B,cAAc,aAAa;IAC3B,YAAY,QAAQ,uBAAuB,eAAe,WAAW;GACvE,OAAO;IACL,cAAc,QAAQ,eAAe,eAAe,MAAM,aAAa,eAAe;IACtF,IAAI,gBAAgB,IAClB;IACF,YAAY,QAAQ,aAAa,eAAe,WAAW;GAC7D;GACA,SAAS,WAAW,KAAK,gBAAgB,OAAO,SAAS,eAAe,eAAe,eAAe,SAAS,CAAC;EAClH;EACA,IAAI,iBAAiB,MAAM,iBACzB,SAAS,QAAQ,YAAY,OAAO,SAAS,aAAa;EAE5D,MAAM,QAAQ,aAAa;EAC3B,OAAO;CACT;CACA,SAAS,YAAY,OAAO,SAAS,eAAe;EAElD,MAAM,aADW,cAAc,UACL,IAAI;EAC9B,MAAM,aAAa,aAAa;EAChC,MAAM,MAAM,MAAM,QAAQ,UAAU;EACpC,QAAQ,wBAAwB,eAAe,YAAY,GAAG;EAC9D,MAAM,QAAQ,IAAI,YAAY,MAAM,QAAQ,QAAQ,KAAK,UAAU,EAAE,MAAM;EAC3E,MAAM,MAAM,GAAG;EACf,OAAO;GAAE,OAAO;GAAO,UAAU;EAAE;CACrC;CACA,SAAS,gBAAgB,OAAO,SAAS,eAAe,eAAe,eAAe,WAAW;EAC/F,MAAM,gBAAgB,UAAU,eAAe;EAE/C,MAAM,YADY,cAAc,WACN,IAAI;EAC9B,MAAM,aAAa,YAAY,cAAc;EAC7C,MAAM,WAAW,iBAAiB,OAAO,aAAa;EACtD,MAAM,MAAM,MAAM,QAAQ,UAAU;EACpC,QAAQ,kCAAkC,eAAe,WAAW,UAAU,YAAY,GAAG;EAC7F,MAAM,QAAQ,IAAI,cAAc,MAAM,QAAQ,QAAQ,KAAK,SAAS,EAAE,MAAM;EAC5E,MAAM,MAAM,GAAG;EACf,OAAO;GACL,MAAM;GACN;GACA,UAAU;EACZ;CACF;CACA,SAAS,iBAAiB,OAAO,eAAe;EAC9C,QAAQ,eAAR;GACE,KAAK,cACH,OAAO,MAAM;GACf,KAAK,WACH,OAAO,MAAM;GACf,KAAK,YACH,OAAO,MAAM;GACf,KAAK,YACH,OAAO,MAAM;GACf,KAAK,YACH,OAAO,MAAM;GACf,KAAK,aACH,OAAO,MAAM;GACf,KAAK,aACH,OAAO,MAAM;EACjB;CACF;AACF;;;AChVA,IAAMC,yBAAuB,IAAI,KAAK;AACtC,IAAM,0BAA0B,IAAI,QAAQ;AAC5C,IAAM,uBAAN,cAAmC,wBAAwB;CACzD,cAAc;EACZ,MAAM;EACN,KAAK,yBAAyB;EAC9B,KAAK,OAAO;EACZ,MAAM,YAAY;GAAC;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAI;GAAG;GAAG;GAAI;EAAC;EAC/F,MAAM,MAAM;GAAC;GAAI;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAI;GAAI;GAAG;GAAI;GAAI;GAAI;GAAG;EAAE;EAEnE,KAAK,SAAS;GADC;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;EAChD,CAAC;EACnB,KAAK,aAAa,YAAY,IAAI,uBAAuB,WAAW,CAAC,CAAC;EACtE,KAAK,aAAa,MAAM,IAAI,uBAAuB,KAAK,CAAC,CAAC;CAC5D;CACA,aAAa,QAAQ;EACnB,MAAM,QAAQ,KAAK,WAAW;EAC9B,MAAM,MAAM,KAAK,WAAW;EAC5B,IAAI,UAAU,KAAK,GAAG;GACpB,MAAM,aAAa,MAAM;GACzB,IAAI,aAAa,MAAM;GACvB,MAAM,cAAc;EACtB;EACA,IAAI,KAAK,gBAAgB,MACvB,KAAK,mBAAmB;EAE1B,IAAI,KAAK,mBAAmB,MAC1B,KAAK,sBAAsB;EAE7B,OAAO;CACT;CACA,aAAa,OAAO;EAClB,IAAI;EACJ,IAAI,iBAAiB,cACnB,eAAe;OACV,IAAI,MAAM,QAAQ,KAAK,GAC5B,eAAe,IAAI,aAAa,KAAK;EAEvC,MAAM,iBAAiB,IAAI,2BAA2B,cAAc,GAAG,CAAC;EACxE,KAAK,aAAa,iBAAiB,IAAI,2BAA2B,gBAAgB,GAAG,CAAC,CAAC;EACvF,KAAK,aAAa,eAAe,IAAI,2BAA2B,gBAAgB,GAAG,CAAC,CAAC;EACrF,KAAK,mBAAmB;EACxB,KAAK,sBAAsB;EAC3B,OAAO;CACT;CACA,UAAU,OAAO,WAAW,GAAG;EAC7B,IAAI;EACJ,IAAI,iBAAiB,cACnB,SAAS;OACJ,IAAI,MAAM,QAAQ,KAAK,GAC5B,SAAS,IAAI,aAAa,KAAK;EAEjC,MAAM,sBAAsB,IAAI,2BAA2B,QAAQ,WAAW,GAAG,CAAC;EAClF,KAAK,aAAa,sBAAsB,IAAI,2BAA2B,qBAAqB,UAAU,CAAC,CAAC;EACxG,KAAK,aAAa,oBAAoB,IAAI,2BAA2B,qBAAqB,UAAU,QAAQ,CAAC;EAC7G,OAAO;CACT;CACA,sBAAsB,UAAU;EAC9B,KAAK,aAAa,SAAS,WAAW,SAAS,KAAK;EACpD,OAAO;CACT;CACA,kBAAkB,UAAU;EAC1B,KAAK,aAAa,SAAS,WAAW,SAAS,KAAK;EACpD,OAAO;CACT;CACA,SAAS,MAAM;EACb,KAAK,sBAAsB,IAAI,kBAAkB,KAAK,QAAQ,CAAC;EAC/D,OAAO;CACT;CACA,iBAAiB,cAAc;EAC7B,MAAM,WAAW,aAAa;EAC9B,KAAK,aAAa,SAAS,WAAW,SAAS,KAAK;EACpD,OAAO;CACT;CACA,qBAAqB;EACnB,IAAI,KAAK,gBAAgB,MACvB,KAAK,cAAc,IAAI,KAAK;EAE9B,MAAM,QAAQ,KAAK,WAAW;EAC9B,MAAM,MAAM,KAAK,WAAW;EAC5B,IAAI,UAAU,KAAK,KAAK,QAAQ,KAAK,GAAG;GACtC,KAAK,YAAY,uBAAuB,KAAK;GAC7C,OAAK,uBAAuB,GAAG;GAC/B,KAAK,YAAY,MAAMA,MAAI;EAC7B;CACF;CACA,wBAAwB;EACtB,IAAI,KAAK,mBAAmB,MAC1B,KAAK,iBAAiB,IAAIC,SAAO;EAEnC,IAAI,KAAK,gBAAgB,MACvB,KAAK,mBAAmB;EAE1B,MAAM,QAAQ,KAAK,WAAW;EAC9B,MAAM,MAAM,KAAK,WAAW;EAC5B,IAAI,UAAU,KAAK,KAAK,QAAQ,KAAK,GAAG;GACtC,MAAM,SAAS,KAAK,eAAe;GACnC,KAAK,YAAY,UAAU,MAAM;GACjC,IAAI,cAAc;GAClB,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,OAAO,IAAI,IAAI,KAAK;IAC7C,QAAQ,oBAAoB,OAAO,CAAC;IACpC,cAAc,KAAK,IAAI,aAAa,OAAO,kBAAkB,OAAO,CAAC;IACrE,QAAQ,oBAAoB,KAAK,CAAC;IAClC,cAAc,KAAK,IAAI,aAAa,OAAO,kBAAkB,OAAO,CAAC;GACvE;GACA,KAAK,eAAe,SAAS,KAAK,KAAK,WAAW;GAClD,IAAI,MAAM,KAAK,eAAe,MAAM,GAClC,QAAQ,MACN,yIACA,IACF;EAEJ;CACF;CACA,SAAS,CACT;CACA,YAAY,QAAQ;EAClB,QAAQ,KAAK,+EAA+E;EAC5F,OAAO,KAAK,aAAa,MAAM;CACjC;AACF;;;ACvHA,IAAM,eAAN,cAA2B,qBAAqB;CAC9C,cAAc;EACZ,MAAM;EACN,KAAK,iBAAiB;EACtB,KAAK,OAAO;CACd;CACA,aAAa,OAAO;EAClB,MAAM,SAAS,MAAM,SAAS;EAC9B,MAAM,SAAS,IAAI,aAAa,IAAI,MAAM;EAC1C,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK,GAAG;GAClC,OAAO,IAAI,KAAK,MAAM;GACtB,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;EAChC;EACA,MAAM,aAAa,MAAM;EACzB,OAAO;CACT;CACA,UAAU,OAAO,WAAW,GAAG;EAC7B,MAAM,SAAS,MAAM,SAAS;EAC9B,MAAM,SAAS,IAAI,aAAa,IAAI,MAAM;EAC1C,IAAI,aAAa,GACf,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK,UAAU;GACzC,OAAO,IAAI,KAAK,MAAM;GACtB,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;EAChC;OAEA,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK,UAAU;GACzC,OAAO,IAAI,KAAK,MAAM;GACtB,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;EAChC;EAEF,MAAM,UAAU,QAAQ,QAAQ;EAChC,OAAO;CACT;CACA,SAAS,MAAM;EACb,MAAM,WAAW,KAAK;EACtB,KAAK,aAAa,SAAS,WAAW,SAAS,KAAK;EACpD,OAAO;CACT;AACF;;;ACnDA,IAAM,eAAN,cAA2B,eAAe;CACxC,YAAY,YAAY;EACtB,MAAM;GACJ,MAAM;GACN,UAAU,cAAc,MACtB,cAAc,MAAM;IAClB,YAAY;IACZ,YAAY;IACZ;KACE,YAAY,EAAE,OAAO,EAAE;KACvB,WAAW,EAAE,OAAO,EAAE;KACtB,YAAY,EAAE,OAAO,IAAI,QAAQ,GAAG,CAAC,EAAE;KACvC,YAAY,EAAE,OAAO,EAAE;KACvB,WAAW,EAAE,OAAO,EAAE;KACtB,UAAU,EAAE,OAAO,EAAE;KACrB,SAAS,EAAE,OAAO,EAAE;IAEtB;GACF,CAAC,CACH;GACA,cAEE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8OF,gBAEE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuKSC,aAAW,MAAM,wBAAwB,qBAAqB;;;;;;GAOzE,UAAU;EAEZ,CAAC;EACD,KAAK,iBAAiB;EACtB,KAAK,kBAAkB,WAAW;GAChC,IAAI,KAAK,aACP,KAAK,QAAQ,uBAAuB;QAEpC,OAAO,KAAK,QAAQ;EAExB;EACA,OAAO,iBAAiB,MAAM;GAC5B,OAAO;IACL,YAAY;IACZ,KAAK,WAAW;KACd,OAAO,KAAK,SAAS,QAAQ;IAC/B;IACA,KAAK,SAAS,OAAO;KACnB,KAAK,SAAS,QAAQ,QAAQ;IAChC;GACF;GACA,YAAY;IACV,YAAY;IACZ,KAAK,WAAW;KACd,OAAO,iBAAiB,KAAK;IAC/B;IACA,KAAK,SAAS,OAAO;KACnB,IAAI,UAAU,MACZ,KAAK,QAAQ,cAAc;UAE3B,OAAO,KAAK,QAAQ;IAExB;GACF;GACA,WAAW;IACT,YAAY;IACZ,KAAK,WAAW;KACd,OAAO,KAAK,SAAS,UAAU;IACjC;IACA,KAAK,SAAS,OAAO;KACnB,KAAK,SAAS,UAAU,QAAQ;IAClC;GACF;GACA,QAAQ;IACN,YAAY;IACZ,KAAK,WAAW;KACd,OAAO,QAAQ,cAAc,KAAK,OAAO;IAC3C;IACA,IAAI,OAAO;KACT,IAAI,QAAQ,KAAK,MAAM,QAAQ,cAAc,KAAK,OAAO,GACvD,KAAK,cAAc;KAErB,IAAI,UAAU,MACZ,KAAK,QAAQ,WAAW;UAExB,OAAO,KAAK,QAAQ;IAExB;GACF;GACA,WAAW;IACT,YAAY;IACZ,KAAK,WAAW;KACd,OAAO,KAAK,SAAS,UAAU;IACjC;IACA,KAAK,SAAS,OAAO;KACnB,KAAK,SAAS,UAAU,QAAQ;IAClC;GACF;GACA,UAAU;IACR,YAAY;IACZ,KAAK,WAAW;KACd,OAAO,KAAK,SAAS,SAAS;IAChC;IACA,KAAK,SAAS,OAAO;KACnB,KAAK,SAAS,SAAS,QAAQ;IACjC;GACF;GACA,YAAY;IACV,YAAY;IACZ,KAAK,WAAW;KACd,OAAO,KAAK,SAAS,WAAW;IAClC;IACA,KAAK,SAAS,OAAO;KACnB,KAAK,SAAS,WAAW,QAAQ;IACnC;GACF;GACA,SAAS;IACP,YAAY;IACZ,KAAK,WAAW;KACd,OAAO,KAAK,SAAS,QAAQ;IAC/B;IACA,KAAK,SAAS,OAAO;KACnB,KAAK,SAAS,QAAQ,QAAQ;IAChC;GACF;GACA,SAAS;IACP,YAAY;IACZ,KAAK,WAAW;KACd,OAAO,KAAK,SAAS,QAAQ;IAC/B;IACA,KAAK,SAAS,OAAO;KACnB,KAAK,SAAS,QAAQ,QAAQ;IAChC;GACF;GACA,YAAY;IACV,YAAY;IACZ,KAAK,WAAW;KACd,OAAO,KAAK,SAAS,WAAW;IAClC;IACA,KAAK,SAAS,OAAO;KACnB,KAAK,SAAS,WAAW,MAAM,KAAK,KAAK;IAC3C;GACF;GACA,iBAAiB;IACf,YAAY;IACZ,KAAK,WAAW;KACd,OAAO,QAAQ,2BAA2B,KAAK,OAAO;IACxD;IACA,KAAK,SAAS,OAAO;KACnB,IAAI,QAAQ,KAAK,MAAM,QAAQ,2BAA2B,KAAK,OAAO,GACpE,KAAK,cAAc;KAErB,IAAI,UAAU,MAAM;MAClB,KAAK,QAAQ,wBAAwB;MACrC,KAAK,WAAW,cAAc;KAChC,OAAO;MACL,OAAO,KAAK,QAAQ;MACpB,KAAK,WAAW,cAAc;KAChC;IACF;GACF;EACF,CAAC;EACD,KAAK,UAAU,UAAU;CAC3B;AACF;;;ACxjBA,IAAM,4BAA4B,IAAI,QAAQ;AAC9C,IAAM,yBAAyB,IAAI,QAAQ;AAC3C,IAAM,uBAAuB,IAAI,QAAQ;AACzC,IAAM,0BAA0B,IAAI,QAAQ;AAC5C,IAAM,wBAAwB,IAAI,QAAQ;AAC1C,IAAM,4BAA4B,IAAI,QAAQ;AAC9C,IAAM,6BAA6B,IAAI,QAAQ;AAC/C,IAAM,4BAA4B,IAAI,QAAQ;AAC9C,IAAM,wBAAwB,IAAI,MAAM;AACxC,IAAM,gCAAgC,IAAI,QAAQ;AAClD,IAAM,uBAAuB,IAAI,KAAK;AACtC,IAAMC,4BAA0B,IAAIC,SAAO;AAC3C,IAAM,qCAAqC,IAAI,QAAQ;AACvD,IAAIC,QAAM;AACV,SAAS,uBAAuB,QAAQ,UAAU,YAAY;CAC5D,mBAAmB,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,EAAE,aAAa,OAAO,gBAAgB;CAC/E,mBAAmB,eAAe,IAAI,mBAAmB,CAAC;CAC1D,mBAAmB,IAAI,aAAa,WAAW;CAC/C,mBAAmB,IAAI,aAAa,WAAW;CAC/C,mBAAmB,aAAa,OAAO,uBAAuB;CAC9D,mBAAmB,eAAe,IAAI,mBAAmB,CAAC;CAC1D,OAAO,KAAK,IAAI,KAAK,IAAI,mBAAmB,GAAG,mBAAmB,CAAC,CAAC;AACtE;AACA,SAAS,kBAAkB,cAAc,YAAY;CACnD,MAAM,cAAc,aAAa;CACjC,MAAM,WAAW,aAAa;CAC9B,MAAM,gBAAgB,SAAS,WAAW;CAC1C,MAAM,cAAc,SAAS,WAAW;CACxC,MAAM,eAAe,KAAK,IAAI,SAAS,eAAe,cAAc,KAAK;CACzE,KAAK,IAAI,IAAI,GAAG,IAAI,cAAc,IAAI,GAAG,KAAK;EAC5C,MAAM,MAAM,oBAAoB,eAAe,CAAC;EAChD,MAAM,IAAI,oBAAoB,aAAa,CAAC;EAC5C,MAAM,aAAa,WAAW;EAC9B,MAAM,cAAc,IAAI,QAAQ;EAChC,MAAM,QAAQ,IAAI,QAAQ;EAC1B,OAAK,oBAAoB,MAAM,OAAO,MAAM,KAAK,OAAO,WAAW;EAEnE,IADiB,MAAM,WAAW,WAAW,IAAI,aAAa,IAE5D,WAAW,KAAK;GACd;GACA;GACA,UAAUA,OAAK,OAAO,WAAW,KAAK;GACtC,QAAQ;GACR,MAAM;GACN,WAAW;GACX,IAAI;IACH,MAAM;EACT,CAAC;CAEL;AACF;AACA,SAAS,mBAAmB,cAAc,QAAQ,YAAY;CAC5D,MAAM,mBAAmB,OAAO;CAEhC,MAAM,aADW,aAAa,SACF;CAC5B,MAAM,cAAc,aAAa;CACjC,MAAM,WAAW,aAAa;CAC9B,MAAM,gBAAgB,SAAS,WAAW;CAC1C,MAAM,cAAc,SAAS,WAAW;CACxC,MAAM,eAAe,KAAK,IAAI,SAAS,eAAe,cAAc,KAAK;CACzE,MAAM,OAAO,CAAC,OAAO;CACrB,OAAK,GAAG,GAAG,SAAS;CACpB,UAAU,IAAI;CACd,UAAU,aAAa,OAAO,kBAAkB;CAChD,UAAU,aAAa,gBAAgB;CACvC,UAAU,eAAe,IAAI,UAAU,CAAC;CACxC,UAAU,KAAK,WAAW,IAAI;CAC9B,UAAU,KAAK,WAAW,IAAI;CAC9B,UAAU,IAAI;CACd,WAAW,KAAK,SAAS;CACzB,UAAU,iBAAiB,OAAO,oBAAoB,WAAW;CACjE,KAAK,IAAI,IAAI,GAAG,IAAI,cAAc,IAAI,GAAG,KAAK;EAC5C,QAAQ,oBAAoB,eAAe,CAAC;EAC5C,MAAM,oBAAoB,aAAa,CAAC;EACxC,QAAQ,IAAI;EACZ,MAAM,IAAI;EACV,QAAQ,aAAa,SAAS;EAC9B,MAAM,aAAa,SAAS;EAE5B,IAD2B,QAAQ,IAAI,QAAQ,MAAM,IAAI,MAEvD;EAEF,IAAI,QAAQ,IAAI,MAAM;GACpB,MAAM,YAAY,QAAQ,IAAI,MAAM;GACpC,MAAM,KAAK,QAAQ,IAAI,QAAQ;GAC/B,QAAQ,KAAK,OAAO,CAAC;EACvB,OAAO,IAAI,MAAM,IAAI,MAAM;GACzB,MAAM,YAAY,MAAM,IAAI,QAAQ;GACpC,MAAM,KAAK,MAAM,IAAI,QAAQ;GAC7B,MAAM,KAAK,SAAS,CAAC;EACvB;EACA,QAAQ,aAAa,gBAAgB;EACrC,MAAM,aAAa,gBAAgB;EACnC,QAAQ,eAAe,IAAI,QAAQ,CAAC;EACpC,MAAM,eAAe,IAAI,MAAM,CAAC;EAChC,QAAQ,KAAK,WAAW,IAAI;EAC5B,QAAQ,KAAK,WAAW,IAAI;EAC5B,MAAM,KAAK,WAAW,IAAI;EAC1B,MAAM,KAAK,WAAW,IAAI;EAC1B,MAAM,MAAM,KAAK,OAAO;EACxB,MAAM,MAAM,IAAI;EAChB,MAAM,IAAI,KAAK,KAAK;EACpB,MAAM,IAAI,IAAI;EACd,MAAM,QAAQ,MAAM,6BAA6B,YAAY,IAAI;EACjE,MAAM,GAAG,OAAO,aAAa;EAC7B,MAAM,OAAO,UAAU,KAAK,QAAQ,GAAG,MAAM,GAAG,KAAK;EACrD,MAAM,gBAAgB,QAAQ,MAAM,QAAQ;EAC5C,MAAM,WAAW,WAAW,WAAW,aAAa,IAAI,aAAa;EACrE,IAAI,iBAAiB,UAAU;GAC7B,MAAM,MAAM,oBAAoB,eAAe,CAAC;GAChD,MAAM,IAAI,oBAAoB,aAAa,CAAC;GAC5C,MAAM,MAAM,aAAa,WAAW;GACpC,MAAM,IAAI,aAAa,WAAW;GAClC,MAAM,cAAc,IAAI,QAAQ;GAChC,MAAM,QAAQ,IAAI,QAAQ;GAC1B,OAAK,oBAAoB,MAAM,OAAO,MAAM,KAAK,OAAO,WAAW;GACnE,WAAW,KAAK;IACd;IACA;IACA,UAAUA,OAAK,OAAO,WAAW,KAAK;IACtC,QAAQ;IACR,MAAM;IACN,WAAW;IACX,IAAI;KACH,MAAM;GACT,CAAC;EACH;CACF;AACF;AACA,IAAM,gBAAN,cAA4B,KAAK;CAC/B,YAAY,WAAW,IAAI,qBAAqB,GAAG,WAAW,IAAI,aAAa,EAAE,OAAO,KAAK,OAAO,IAAI,SAAS,CAAC,GAAG;EACnH,MAAM,UAAU,QAAQ;EACxB,KAAK,kBAAkB;EACvB,KAAK,OAAO;CACd;CAEA,uBAAuB;EACrB,MAAM,WAAW,KAAK;EACtB,MAAM,gBAAgB,SAAS,WAAW;EAC1C,MAAM,cAAc,SAAS,WAAW;EACxC,MAAM,gBAAgB,IAAI,aAAa,IAAI,cAAc,KAAK;EAC9D,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,cAAc,OAAO,IAAI,GAAG,KAAK,KAAK,GAAG;GAClE,OAAO,oBAAoB,eAAe,CAAC;GAC3C,KAAK,oBAAoB,aAAa,CAAC;GACvC,cAAc,KAAK,MAAM,IAAI,IAAI,cAAc,IAAI;GACnD,cAAc,IAAI,KAAK,cAAc,KAAK,OAAO,WAAW,IAAI;EAClE;EACA,MAAM,yBAAyB,IAAI,2BAA2B,eAAe,GAAG,CAAC;EACjF,SAAS,aAAa,yBAAyB,IAAI,2BAA2B,wBAAwB,GAAG,CAAC,CAAC;EAC3G,SAAS,aAAa,uBAAuB,IAAI,2BAA2B,wBAAwB,GAAG,CAAC,CAAC;EACzG,OAAO;CACT;CACA,QAAQ,WAAW,YAAY;EAC7B,MAAM,aAAa,KAAK,SAAS;EACjC,MAAM,SAAS,UAAU;EACzB,IAAI,WAAW,QAAQ,CAAC,YACtB,QAAQ,MACN,iIACF;EAEF,MAAM,YAAY,UAAU,OAAO,UAAU,KAAK,IAAI,UAAU,OAAO,MAAM,aAAa,IAAI;EAC9F,SAAO,UAAU;EACjB,MAAM,cAAc,KAAK;EACzB,MAAM,WAAW,KAAK;EACtB,MAAM,WAAW,KAAK;EACtB,aAAa,SAAS,YAAY;EAClC,IAAI,SAAS,mBAAmB,MAC9B,SAAS,sBAAsB;EAEjC,UAAQ,KAAK,SAAS,cAAc,EAAE,aAAa,WAAW;EAC9D,IAAI;EACJ,IAAI,YACF,eAAe,aAAa;OAG5B,eAAe,uBAAuB,QADb,KAAK,IAAI,OAAO,MAAMF,UAAQ,gBAAgBE,OAAK,MAAM,CACrB,GAAG,SAAS,UAAU;EAErF,UAAQ,UAAU;EAClB,IAAIA,OAAK,iBAAiBF,SAAO,MAAM,OACrC;EAEF,IAAI,SAAS,gBAAgB,MAC3B,SAAS,mBAAmB;EAE9B,KAAK,KAAK,SAAS,WAAW,EAAE,aAAa,WAAW;EACxD,IAAI;EACJ,IAAI,YACF,YAAY,aAAa;OAGzB,YAAY,uBAAuB,QADb,KAAK,IAAI,OAAO,MAAM,KAAK,gBAAgBE,OAAK,MAAM,CACrB,GAAG,SAAS,UAAU;EAE/E,KAAK,eAAe,SAAS;EAC7B,IAAIA,OAAK,cAAc,IAAI,MAAM,OAC/B;EAEF,IAAI,YACF,kBAAkB,MAAM,UAAU;OAElC,mBAAmB,MAAM,QAAQ,UAAU;CAE/C;CACA,eAAe,UAAU;EACvB,MAAM,WAAW,KAAK,SAAS;EAC/B,IAAI,YAAY,SAAS,YAAY;GACnC,SAAS,YAAY,SAAS;GAC9B,KAAK,SAAS,SAAS,WAAW,MAAM,IAAI,UAAU,GAAG,UAAU,CAAC;EACtE;CACF;AACF;;;AClNA,IAAM,QAAN,cAAoB,cAAc;CAChC,YAAY,WAAW,IAAI,aAAa,GAAG,WAAW,IAAI,aAAa,EAAE,OAAO,KAAK,OAAO,IAAI,SAAS,CAAC,GAAG;EAC3G,MAAM,UAAU,QAAQ;EACxB,KAAK,UAAU;EACf,KAAK,OAAO;CACd;AACF;;;ACTA,IAAI;AACJ,IAAM,uBAAuB;CAC3B,IAAI,WACF,OAAO;CACT,MAAM,YAAY;CAClB,MAAM,YAAY;CAClB,MAAM,WAAW,IAAI,WAAW;EAC9B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CACD,MAAM,WAAW,IAAI,WAAW;EAC9B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CACD,IAAI,OAAO,gBAAgB,UACzB,OAAO,EACL,WAAW,MACb;CAEF,IAAI,OAAO;CACX,IAAI,YAAY,SAAS,QAAQ,GAC/B,OAAO;CAET,IAAI;CACJ,MAAM,UAAU,YAAY,YAAY,OAAO,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,WAAW;EACzE,WAAW,OAAO;EAClB,SAAS,QAAQ,kBAAkB;CACrC,CAAC;CACD,SAAS,OAAO,MAAM;EACpB,MAAM,SAAS,IAAI,WAAW,KAAK,MAAM;EACzC,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;GACpC,MAAM,KAAK,KAAK,WAAW,CAAC;GAC5B,OAAO,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK;EACxF;EACA,IAAI,QAAQ;EACZ,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GACjC,OAAO,WAAW,OAAO,KAAK,KAAK,SAAS,OAA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GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAG;GAAG;GAAG;GAAG;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAE;GAAI;GAAI;GAAI;GAAI;GAAE;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAE;GAAI;GAAE;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAE;GAAI;GAAI;GAAE;GAAI;GAAI;GAAI;GAAI;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAE;GAAI;GAAE;GAAI;GAAE;GAAE;GAAE;GAAE;GAAI;GAAI;GAAI;GAAI;GAAE;GAAE;GAAE;GAAE;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;EAAI;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;EAAK;EAAI;EAAI;EAAI;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAI;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAI;EAAI;EAAI;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAI;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAI;EAAG;EAAG;EAAK;EAAI;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAG;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAI;EAAK;EAAG;EAAI;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAG;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAG;EAAK;EAAK;EAAI;EAAG;EAAI;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAG;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAI;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAG;EAAG;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAG;EAAI;EAAK;EAAI;EAAI;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAI;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAG;EAAK;EAAI;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAG;EAAI;EAAG;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAG;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAI;EAAI;EAAG;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAI;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAG;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAG;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAG;EAAK;EAAI;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAI;EAAI;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAG;EAAK;EAAK;EAAI;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAI;EAAG;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAI;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAI;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAI;EAAK;EAAG;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAG;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAG;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAG;EAAK;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAI;EAAG;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;EAAK;CAAG;CAGxzY,aAAa;EACX,aAAa;GAAC;IACZ,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;IACL,QAAQ;GACV;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;EAAC;EACD,OAAO;GACL,QAAQ;GACR,QAAQ;GACR,QAAQ;GACR,QAAQ;GACR,SAAS;GACT,UAAU;EACZ;CACF;CAGA,8BAA8B;EAC5B,iBAAiB,CAAC;GAAC;IACjB,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;GAAG;IACD,KAAK;IACL,KAAK;IACL,KAAK;GACP;EAAC,CAAC;EACF,mBAAmB,CAAC;GAClB,cAAc;IAAC;KACb,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IAAG;KACD,SAAS;KACT,SAAS;KACT,gBAAgB;KAChB,eAAe;IACjB;IA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"} \ No newline at end of file diff --git a/node_modules/.vite/deps/@react-three_fiber.js b/node_modules/.vite/deps/@react-three_fiber.js index 5e7b4d18..de014578 100644 --- a/node_modules/.vite/deps/@react-three_fiber.js +++ b/node_modules/.vite/deps/@react-three_fiber.js @@ -1,2 +1,2 @@ -import { C as unmountComponentAtNode, D as useLoader, E as useInstanceHandle, O as useStore, S as threeTypes, T as useGraph, _ as flushGlobalEffects, a as addEffect, b as invalidate, c as applyProps, d as createEvents, f as createPointerEvents, g as extend, h as dispose, i as addAfterEffect, k as useThree, l as buildGraph, m as createRoot, n as _roots, o as addTail, p as createPortal, r as act, s as advance, t as Canvas, u as context, v as flushSync, w as useFrame, x as reconciler, y as getRootState } from "./react-three-fiber.esm-CjFO8AMT.js"; +import { C as unmountComponentAtNode, D as useLoader, E as useInstanceHandle, O as useStore, S as threeTypes, T as useGraph, _ as flushGlobalEffects, a as addEffect, b as invalidate, c as applyProps, d as createEvents, f as createPointerEvents, g as extend, h as dispose, i as addAfterEffect, k as useThree, l as buildGraph, m as createRoot, n as _roots, o as addTail, p as createPortal, r as act, s as advance, t as Canvas, u as context, v as flushSync, w as useFrame, x as reconciler, y as getRootState } from "./react-three-fiber.esm-CIxUR0B5.js"; export { Canvas, threeTypes as ReactThreeFiber, _roots, act, addAfterEffect, addEffect, addTail, advance, applyProps, buildGraph, context, createEvents, createPortal, createRoot, dispose, createPointerEvents as events, extend, flushGlobalEffects, flushSync, getRootState, invalidate, reconciler, unmountComponentAtNode, useFrame, useGraph, useInstanceHandle, useLoader, useStore, useThree }; diff --git a/node_modules/.vite/deps/_metadata.json b/node_modules/.vite/deps/_metadata.json index 84aab813..d0bbc5ba 100644 --- a/node_modules/.vite/deps/_metadata.json +++ b/node_modules/.vite/deps/_metadata.json @@ -1,91 +1,85 @@ { - "hash": "f30195d7", + "hash": "fbd2cc45", "configHash": "f017f77e", - "lockfileHash": "a6162cb8", - "browserHash": "64345825", + "lockfileHash": "793311a2", + "browserHash": "d0b9b3c4", "optimized": { "@react-three/drei": { "src": "../../@react-three/drei/index.js", "file": "@react-three_drei.js", - "fileHash": "9125f2b8", + "fileHash": "42f9f493", "needsInterop": false }, "@react-three/fiber": { "src": "../../@react-three/fiber/dist/react-three-fiber.esm.js", "file": "@react-three_fiber.js", - "fileHash": "698d52a7", + "fileHash": "dd3cbf53", "needsInterop": false }, "jspdf-autotable": { "src": "../../jspdf-autotable/dist/jspdf.plugin.autotable.mjs", "file": "jspdf-autotable.js", - "fileHash": "90ce8453", + "fileHash": "02ccae1f", "needsInterop": false }, "jspdf": { "src": "../../jspdf/dist/jspdf.es.min.js", "file": "jspdf.js", - "fileHash": "e9b3de55", + "fileHash": "21201b3f", "needsInterop": false }, "react-dom": { "src": "../../react-dom/index.js", "file": "react-dom.js", - "fileHash": "fe079aad", + "fileHash": "e35ec24a", "needsInterop": true }, "react-dom/client": { "src": "../../react-dom/client.js", "file": "react-dom_client.js", - "fileHash": "16f25223", + "fileHash": "e04ce812", "needsInterop": true }, "react": { "src": "../../react/index.js", "file": "react.js", - "fileHash": "6ca69fef", + "fileHash": "729cc7a6", "needsInterop": true }, "react/jsx-dev-runtime": { "src": "../../react/jsx-dev-runtime.js", "file": "react_jsx-dev-runtime.js", - "fileHash": "54811978", + "fileHash": "c5a19cb5", "needsInterop": true }, "react/jsx-runtime": { "src": "../../react/jsx-runtime.js", "file": "react_jsx-runtime.js", - "fileHash": "dd1bdb59", + "fileHash": "d90431ec", "needsInterop": true }, - "three-stdlib": { - "src": "../../three-stdlib/index.js", - "file": "three-stdlib.js", - "fileHash": "0c62efec", - "needsInterop": false - }, "three": { "src": "../../three/build/three.module.js", "file": "three.js", - "fileHash": "fa8017f5", + "fileHash": "e09cb562", "needsInterop": false }, "three/examples/jsm/exporters/GLTFExporter.js": { "src": "../../three/examples/jsm/exporters/GLTFExporter.js", "file": "three_examples_jsm_exporters_GLTFExporter__js.js", - "fileHash": "cf4024df", + "fileHash": "5b3f35cf", "needsInterop": false }, "three/examples/jsm/exporters/OBJExporter.js": { "src": "../../three/examples/jsm/exporters/OBJExporter.js", "file": "three_examples_jsm_exporters_OBJExporter__js.js", - "fileHash": "1d42a730", + "fileHash": "8a957c23", "needsInterop": false }, "zustand": { "src": "../../zustand/esm/index.mjs", "file": "zustand.js", - "fileHash": "f409abaf", + "fileHash": "a8333ac5", "needsInterop": false } }, @@ -106,18 +100,14 @@ "file": "purify.es-erUxcz-o.js", "isDynamicEntry": true }, - "react-three-fiber.esm-CjFO8AMT": { - "file": "react-three-fiber.esm-CjFO8AMT.js", + "react-three-fiber.esm-CIxUR0B5": { + "file": "react-three-fiber.esm-CIxUR0B5.js", "isDynamicEntry": false }, "scheduler-B7fwqo6I": { "file": "scheduler-B7fwqo6I.js", "isDynamicEntry": false }, - "three-stdlib-BHZ1qH6e": { - "file": "three-stdlib-BHZ1qH6e.js", - "isDynamicEntry": false - }, "three.module-DxhMWCDR": { "file": "three.module-DxhMWCDR.js", "isDynamicEntry": false diff --git a/node_modules/.vite/deps/react-dom_client.js b/node_modules/.vite/deps/react-dom_client.js index 7bbe92fc..32e5ba9c 100644 --- a/node_modules/.vite/deps/react-dom_client.js +++ b/node_modules/.vite/deps/react-dom_client.js @@ -1,7 +1,7 @@ import { t as __commonJSMin } from "./chunk-B-1-B7_t.js"; import { t as require_react } from "./react.js"; -import { t as require_scheduler } from "./scheduler-B7fwqo6I.js"; import { t as require_react_dom } from "./react-dom.js"; +import { t as require_scheduler } from "./scheduler-B7fwqo6I.js"; //#region node_modules/react-dom/cjs/react-dom-client.development.js /** * @license React diff --git a/node_modules/.vite/deps/react-three-fiber.esm-CjFO8AMT.js b/node_modules/.vite/deps/react-three-fiber.esm-CjFO8AMT.js deleted file mode 100644 index d7b60210..00000000 --- a/node_modules/.vite/deps/react-three-fiber.esm-CjFO8AMT.js +++ /dev/null @@ -1,9576 +0,0 @@ -import { r as __toESM, t as __commonJSMin } from "./chunk-B-1-B7_t.js"; -import { $i as OrthographicCamera, Bs as Vector2, Eo as SRGBColorSpace, Oo as Scene, Vr as LinearSRGBColorSpace, Vs as Vector3, c as three_module_exports, ct as Color, do as Raycaster, ko as ShaderMaterial, o as WebGLRenderer, ra as PerspectiveCamera, st as Clock, ut as ColorManagement, vr as Layers } from "./three.module-DxhMWCDR.js"; -import { t as require_react } from "./react.js"; -import { t as require_scheduler } from "./scheduler-B7fwqo6I.js"; -import { t as createStore$1 } from "./vanilla-DCS0UZ51.js"; -import { t as require_jsx_runtime } from "./react_jsx-runtime.js"; -//#region node_modules/use-sync-external-store/cjs/use-sync-external-store-shim.development.js -/** -* @license React -* use-sync-external-store-shim.development.js -* -* Copyright (c) Meta Platforms, Inc. and affiliates. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. -*/ -var require_use_sync_external_store_shim_development = /* @__PURE__ */ __commonJSMin(((exports) => { - (function() { - function is(x, y) { - return x === y && (0 !== x || 1 / x === 1 / y) || x !== x && y !== y; - } - function useSyncExternalStore$2(subscribe, getSnapshot) { - didWarnOld18Alpha || void 0 === React.startTransition || (didWarnOld18Alpha = !0, console.error("You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release.")); - var value = getSnapshot(); - if (!didWarnUncachedGetSnapshot) { - var cachedValue = getSnapshot(); - objectIs(value, cachedValue) || (console.error("The result of getSnapshot should be cached to avoid an infinite loop"), didWarnUncachedGetSnapshot = !0); - } - cachedValue = useState({ inst: { - value, - getSnapshot - } }); - var inst = cachedValue[0].inst, forceUpdate = cachedValue[1]; - useLayoutEffect(function() { - inst.value = value; - inst.getSnapshot = getSnapshot; - checkIfSnapshotChanged(inst) && forceUpdate({ inst }); - }, [ - subscribe, - value, - getSnapshot - ]); - useEffect(function() { - checkIfSnapshotChanged(inst) && forceUpdate({ inst }); - return subscribe(function() { - checkIfSnapshotChanged(inst) && forceUpdate({ inst }); - }); - }, [subscribe]); - useDebugValue(value); - return value; - } - function checkIfSnapshotChanged(inst) { - var latestGetSnapshot = inst.getSnapshot; - inst = inst.value; - try { - var nextValue = latestGetSnapshot(); - return !objectIs(inst, nextValue); - } catch (error) { - return !0; - } - } - function useSyncExternalStore$1(subscribe, getSnapshot) { - return getSnapshot(); - } - "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); - var React = require_react(), objectIs = "function" === typeof Object.is ? Object.is : is, useState = React.useState, useEffect = React.useEffect, useLayoutEffect = React.useLayoutEffect, useDebugValue = React.useDebugValue, didWarnOld18Alpha = !1, didWarnUncachedGetSnapshot = !1, shim = "undefined" === typeof window || "undefined" === typeof window.document || "undefined" === typeof window.document.createElement ? useSyncExternalStore$1 : useSyncExternalStore$2; - exports.useSyncExternalStore = void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim; - "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); - })(); -})); -//#endregion -//#region node_modules/use-sync-external-store/shim/index.js -var require_shim = /* @__PURE__ */ __commonJSMin(((exports, module) => { - module.exports = require_use_sync_external_store_shim_development(); -})); -//#endregion -//#region node_modules/use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js -/** -* @license React -* use-sync-external-store-shim/with-selector.development.js -* -* Copyright (c) Meta Platforms, Inc. and affiliates. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. -*/ -var require_with_selector_development = /* @__PURE__ */ __commonJSMin(((exports) => { - (function() { - function is(x, y) { - return x === y && (0 !== x || 1 / x === 1 / y) || x !== x && y !== y; - } - "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error()); - var React = require_react(), shim = require_shim(), objectIs = "function" === typeof Object.is ? Object.is : is, useSyncExternalStore = shim.useSyncExternalStore, useRef = React.useRef, useEffect = React.useEffect, useMemo = React.useMemo, useDebugValue = React.useDebugValue; - exports.useSyncExternalStoreWithSelector = function(subscribe, getSnapshot, getServerSnapshot, selector, isEqual) { - var instRef = useRef(null); - if (null === instRef.current) { - var inst = { - hasValue: !1, - value: null - }; - instRef.current = inst; - } else inst = instRef.current; - instRef = useMemo(function() { - function memoizedSelector(nextSnapshot) { - if (!hasMemo) { - hasMemo = !0; - memoizedSnapshot = nextSnapshot; - nextSnapshot = selector(nextSnapshot); - if (void 0 !== isEqual && inst.hasValue) { - var currentSelection = inst.value; - if (isEqual(currentSelection, nextSnapshot)) return memoizedSelection = currentSelection; - } - return memoizedSelection = nextSnapshot; - } - currentSelection = memoizedSelection; - if (objectIs(memoizedSnapshot, nextSnapshot)) return currentSelection; - var nextSelection = selector(nextSnapshot); - if (void 0 !== isEqual && isEqual(currentSelection, nextSelection)) return memoizedSnapshot = nextSnapshot, currentSelection; - memoizedSnapshot = nextSnapshot; - return memoizedSelection = nextSelection; - } - var hasMemo = !1, memoizedSnapshot, memoizedSelection, maybeGetServerSnapshot = void 0 === getServerSnapshot ? null : getServerSnapshot; - return [function() { - return memoizedSelector(getSnapshot()); - }, null === maybeGetServerSnapshot ? void 0 : function() { - return memoizedSelector(maybeGetServerSnapshot()); - }]; - }, [ - getSnapshot, - getServerSnapshot, - selector, - isEqual - ]); - var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]); - useEffect(function() { - inst.hasValue = !0; - inst.value = value; - }, [value]); - useDebugValue(value); - return value; - }; - "undefined" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ && "function" === typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop && __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error()); - })(); -})); -//#endregion -//#region node_modules/use-sync-external-store/shim/with-selector.js -var require_with_selector = /* @__PURE__ */ __commonJSMin(((exports, module) => { - module.exports = require_with_selector_development(); -})); -//#endregion -//#region node_modules/zustand/esm/traditional.mjs -var import_react = /* @__PURE__ */ __toESM(require_react(), 1); -var { useSyncExternalStoreWithSelector } = (/* @__PURE__ */ __toESM(require_with_selector(), 1)).default; -var identity = (arg) => arg; -function useStoreWithEqualityFn(api, selector = identity, equalityFn) { - const slice = useSyncExternalStoreWithSelector(api.subscribe, api.getState, api.getInitialState, selector, equalityFn); - import_react.useDebugValue(slice); - return slice; -} -var createWithEqualityFnImpl = (createState, defaultEqualityFn) => { - const api = createStore$1(createState); - const useBoundStoreWithEqualityFn = (selector, equalityFn = defaultEqualityFn) => useStoreWithEqualityFn(api, selector, equalityFn); - Object.assign(useBoundStoreWithEqualityFn, api); - return useBoundStoreWithEqualityFn; -}; -var createWithEqualityFn = ((createState, defaultEqualityFn) => createState ? createWithEqualityFnImpl(createState, defaultEqualityFn) : createWithEqualityFnImpl); -//#endregion -//#region node_modules/suspend-react/index.js -var isPromise = (promise) => typeof promise === "object" && typeof promise.then === "function"; -var globalCache = []; -function shallowEqualArrays(arrA, arrB, equal = (a, b) => a === b) { - if (arrA === arrB) return true; - if (!arrA || !arrB) return false; - const len = arrA.length; - if (arrB.length !== len) return false; - for (let i = 0; i < len; i++) if (!equal(arrA[i], arrB[i])) return false; - return true; -} -function query(fn, keys = null, preload = false, config = {}) { - if (keys === null) keys = [fn]; - for (const entry of globalCache) if (shallowEqualArrays(keys, entry.keys, entry.equal)) { - if (preload) return void 0; - if (Object.prototype.hasOwnProperty.call(entry, "error")) throw entry.error; - if (Object.prototype.hasOwnProperty.call(entry, "response")) { - if (config.lifespan && config.lifespan > 0) { - if (entry.timeout) clearTimeout(entry.timeout); - entry.timeout = setTimeout(entry.remove, config.lifespan); - } - return entry.response; - } - if (!preload) throw entry.promise; - } - const entry = { - keys, - equal: config.equal, - remove: () => { - const index = globalCache.indexOf(entry); - if (index !== -1) globalCache.splice(index, 1); - }, - promise: (isPromise(fn) ? fn : fn(...keys)).then((response) => { - entry.response = response; - if (config.lifespan && config.lifespan > 0) entry.timeout = setTimeout(entry.remove, config.lifespan); - }).catch((error) => entry.error = error) - }; - globalCache.push(entry); - if (!preload) throw entry.promise; -} -var suspend = (fn, keys, config) => query(fn, keys, false, config); -var preload = (fn, keys, config) => void query(fn, keys, true, config); -var clear = (keys) => { - if (keys === void 0 || keys.length === 0) globalCache.splice(0, globalCache.length); - else { - const entry = globalCache.find((entry) => shallowEqualArrays(keys, entry.keys, entry.equal)); - if (entry) entry.remove(); - } -}; -//#endregion -//#region node_modules/its-fine/dist/index.js -var import_scheduler = /* @__PURE__ */ __toESM(require_scheduler()); -var import_jsx_runtime = require_jsx_runtime(); -/* @__PURE__ */ (() => { - var e, t; - return typeof window != "undefined" && (((e = window.document) == null ? void 0 : e.createElement) || ((t = window.navigator) == null ? void 0 : t.product) === "ReactNative"); -})() ? import_react.useLayoutEffect : import_react.useEffect; -function i$1(e, t, r) { - if (!e) return; - if (r(e) === !0) return e; - let n = t ? e.return : e.child; - for (; n;) { - const u = i$1(n, t, r); - if (u) return u; - n = t ? null : n.sibling; - } -} -function l(e) { - try { - return Object.defineProperties(e, { - _currentRenderer: { - get() { - return null; - }, - set() {} - }, - _currentRenderer2: { - get() { - return null; - }, - set() {} - } - }); - } catch (t) { - return e; - } -} -var a = /* @__PURE__ */ l(/* @__PURE__ */ import_react.createContext(null)); -var m = class extends import_react.Component { - render() { - return /* @__PURE__ */ import_react.createElement(a.Provider, { value: this._reactInternals }, this.props.children); - } -}; -function c() { - const e = import_react.useContext(a); - if (e === null) throw new Error("its-fine: useFiber must be called within a <FiberProvider />!"); - const t = import_react.useId(); - return import_react.useMemo(() => { - for (const n of [e, e == null ? void 0 : e.alternate]) { - if (!n) continue; - const u = i$1(n, !1, (d) => { - let s = d.memoizedState; - for (; s;) { - if (s.memoizedState === t) return !0; - s = s.next; - } - }); - if (u) return u; - } - }, [e, t]); -} -var p$1 = Symbol.for("react.context"), b = (e) => e !== null && typeof e == "object" && "$$typeof" in e && e.$$typeof === p$1; -function h() { - const e = c(), [t] = import_react.useState(() => /* @__PURE__ */ new Map()); - t.clear(); - let r = e; - for (; r;) { - const n = r.type; - b(n) && n !== a && !t.has(n) && t.set(n, import_react.use(l(n))), r = r.return; - } - return t; -} -function x() { - const e = h(); - return import_react.useMemo(() => Array.from(e.keys()).reduce((t, r) => (n) => /* @__PURE__ */ import_react.createElement(t, null, /* @__PURE__ */ import_react.createElement(r.Provider, { - ...n, - value: e.get(r) - })), (t) => /* @__PURE__ */ import_react.createElement(m, { ...t })), [e]); -} -//#endregion -//#region node_modules/@react-three/fiber/dist/events-b389eeca.esm.js -var threeTypes = /*#__PURE__*/ Object.freeze({ __proto__: null }); -/** -* Returns the instance's initial (outmost) root. -*/ -function findInitialRoot(instance) { - let root = instance.root; - while (root.getState().previousRoot) root = root.getState().previousRoot; - return root; -} -/** -* Safely flush async effects when testing, simulating a legacy root. -* @deprecated Import from React instead. import { act } from 'react' -*/ -var act = import_react.act; -var isOrthographicCamera = (def) => def && def.isOrthographicCamera; -var isRef = (obj) => obj && obj.hasOwnProperty("current"); -var isColorRepresentation = (value) => value != null && (typeof value === "string" || typeof value === "number" || value.isColor); -/** -* An SSR-friendly useLayoutEffect. -* -* React currently throws a warning when using useLayoutEffect on the server. -* To get around it, we can conditionally useEffect on the server (no-op) and -* useLayoutEffect elsewhere. -* -* @see https://github.com/facebook/react/issues/14927 -*/ -var useIsomorphicLayoutEffect = /* @__PURE__ */ ((_window$document, _window$navigator) => typeof window !== "undefined" && (((_window$document = window.document) == null ? void 0 : _window$document.createElement) || ((_window$navigator = window.navigator) == null ? void 0 : _window$navigator.product) === "ReactNative"))() ? import_react.useLayoutEffect : import_react.useEffect; -function useMutableCallback(fn) { - const ref = import_react.useRef(fn); - useIsomorphicLayoutEffect(() => void (ref.current = fn), [fn]); - return ref; -} -/** -* Bridges renderer Context and StrictMode from a primary renderer. -*/ -function useBridge() { - const fiber = c(); - const ContextBridge = x(); - return import_react.useMemo(() => ({ children }) => { - return /*#__PURE__*/ (0, import_jsx_runtime.jsx)(!!i$1(fiber, true, (node) => node.type === import_react.StrictMode) ? import_react.StrictMode : import_react.Fragment, { children: /*#__PURE__*/ (0, import_jsx_runtime.jsx)(ContextBridge, { children }) }); - }, [fiber, ContextBridge]); -} -function Block({ set }) { - useIsomorphicLayoutEffect(() => { - set(new Promise(() => null)); - return () => set(false); - }, [set]); - return null; -} -var ErrorBoundary = /* @__PURE__ */ ((_ErrorBoundary) => (_ErrorBoundary = class ErrorBoundary extends import_react.Component { - constructor(...args) { - super(...args); - this.state = { error: false }; - } - componentDidCatch(err) { - this.props.set(err); - } - render() { - return this.state.error ? null : this.props.children; - } -}, _ErrorBoundary.getDerivedStateFromError = () => ({ error: true }), _ErrorBoundary))(); -function calculateDpr(dpr) { - var _window$devicePixelRa; - const target = typeof window !== "undefined" ? (_window$devicePixelRa = window.devicePixelRatio) != null ? _window$devicePixelRa : 2 : 1; - return Array.isArray(dpr) ? Math.min(Math.max(dpr[0], target), dpr[1]) : dpr; -} -/** -* Returns instance root state -*/ -function getRootState(obj) { - var _r3f; - return (_r3f = obj.__r3f) == null ? void 0 : _r3f.root.getState(); -} -var is = { - obj: (a) => a === Object(a) && !is.arr(a) && typeof a !== "function", - fun: (a) => typeof a === "function", - str: (a) => typeof a === "string", - num: (a) => typeof a === "number", - boo: (a) => typeof a === "boolean", - und: (a) => a === void 0, - nul: (a) => a === null, - arr: (a) => Array.isArray(a), - equ(a, b, { arrays = "shallow", objects = "reference", strict = true } = {}) { - if (typeof a !== typeof b || !!a !== !!b) return false; - if (is.str(a) || is.num(a) || is.boo(a)) return a === b; - const isObj = is.obj(a); - if (isObj && objects === "reference") return a === b; - const isArr = is.arr(a); - if (isArr && arrays === "reference") return a === b; - if ((isArr || isObj) && a === b) return true; - let i; - for (i in a) if (!(i in b)) return false; - if (isObj && arrays === "shallow" && objects === "shallow") { - for (i in strict ? b : a) if (!is.equ(a[i], b[i], { - strict, - objects: "reference" - })) return false; - } else for (i in strict ? b : a) if (a[i] !== b[i]) return false; - if (is.und(i)) { - if (isArr && a.length === 0 && b.length === 0) return true; - if (isObj && Object.keys(a).length === 0 && Object.keys(b).length === 0) return true; - if (a !== b) return false; - } - return true; - } -}; -function buildGraph(object) { - const data = { - nodes: {}, - materials: {}, - meshes: {} - }; - if (object) object.traverse((obj) => { - if (obj.name) data.nodes[obj.name] = obj; - if (obj.material && !data.materials[obj.material.name]) data.materials[obj.material.name] = obj.material; - if (obj.isMesh && !data.meshes[obj.name]) data.meshes[obj.name] = obj; - }); - return data; -} -function dispose(obj) { - if (obj.type !== "Scene") obj.dispose == null || obj.dispose(); - for (const p in obj) { - const prop = obj[p]; - if ((prop == null ? void 0 : prop.type) !== "Scene") prop == null || prop.dispose == null || prop.dispose(); - } -} -var REACT_INTERNAL_PROPS = [ - "children", - "key", - "ref" -]; -function getInstanceProps(pendingProps) { - const props = {}; - for (const key in pendingProps) if (!REACT_INTERNAL_PROPS.includes(key)) props[key] = pendingProps[key]; - return props; -} -function prepare(target, root, type, props) { - const object = target; - let instance = object == null ? void 0 : object.__r3f; - if (!instance) { - instance = { - root, - type, - parent: null, - children: [], - props: getInstanceProps(props), - object, - eventCount: 0, - handlers: {}, - isHidden: false - }; - if (object) object.__r3f = instance; - } - return instance; -} -function resolve(root, key) { - if (!key.includes("-")) return { - root, - key, - target: root[key] - }; - if (key in root) return { - root, - key, - target: root[key] - }; - let target = root; - const parts = key.split("-"); - for (const part of parts) { - if (typeof target !== "object" || target === null) { - if (target !== void 0) { - const remaining = parts.slice(parts.indexOf(part)).join("-"); - return { - root: target, - key: remaining, - target: void 0 - }; - } - return { - root, - key, - target: void 0 - }; - } - key = part; - root = target; - target = target[key]; - } - return { - root, - key, - target - }; -} -var INDEX_REGEX = /-\d+$/; -function attach(parent, child) { - if (is.str(child.props.attach)) { - if (INDEX_REGEX.test(child.props.attach)) { - const index = child.props.attach.replace(INDEX_REGEX, ""); - const { root, key } = resolve(parent.object, index); - if (!Array.isArray(root[key])) root[key] = []; - } - const { root, key } = resolve(parent.object, child.props.attach); - child.previousAttach = root[key]; - root[key] = child.object; - } else if (is.fun(child.props.attach)) child.previousAttach = child.props.attach(parent.object, child.object); -} -function detach(parent, child) { - if (is.str(child.props.attach)) { - const { root, key } = resolve(parent.object, child.props.attach); - const previous = child.previousAttach; - if (previous === void 0) delete root[key]; - else root[key] = previous; - } else child.previousAttach == null || child.previousAttach(parent.object, child.object); - delete child.previousAttach; -} -var RESERVED_PROPS = [ - ...REACT_INTERNAL_PROPS, - "args", - "dispose", - "attach", - "object", - "onUpdate", - "dispose" -]; -var MEMOIZED_PROTOTYPES = /* @__PURE__ */ new Map(); -function getMemoizedPrototype(root) { - let ctor = MEMOIZED_PROTOTYPES.get(root.constructor); - try { - if (!ctor) { - ctor = new root.constructor(); - MEMOIZED_PROTOTYPES.set(root.constructor, ctor); - } - } catch (e) {} - return ctor; -} -function diffProps(instance, newProps) { - const changedProps = {}; - for (const prop in newProps) { - if (RESERVED_PROPS.includes(prop)) continue; - if (is.equ(newProps[prop], instance.props[prop])) continue; - changedProps[prop] = newProps[prop]; - for (const other in newProps) if (other.startsWith(`${prop}-`)) changedProps[other] = newProps[other]; - } - for (const prop in instance.props) { - if (RESERVED_PROPS.includes(prop) || newProps.hasOwnProperty(prop)) continue; - const { root, key } = resolve(instance.object, prop); - if (root.constructor && root.constructor.length === 0) { - const ctor = getMemoizedPrototype(root); - if (!is.und(ctor)) changedProps[key] = ctor[key]; - } else changedProps[key] = 0; - } - return changedProps; -} -var colorMaps = [ - "map", - "emissiveMap", - "sheenColorMap", - "specularColorMap", - "envMap" -]; -var EVENT_REGEX = /^on(Pointer|Click|DoubleClick|ContextMenu|Wheel)/; -function applyProps(object, props) { - var _instance$object; - const instance = object.__r3f; - const rootState = instance && findInitialRoot(instance).getState(); - const prevHandlers = instance == null ? void 0 : instance.eventCount; - for (const prop in props) { - let value = props[prop]; - if (RESERVED_PROPS.includes(prop)) continue; - if (instance && EVENT_REGEX.test(prop)) { - if (typeof value === "function") instance.handlers[prop] = value; - else delete instance.handlers[prop]; - instance.eventCount = Object.keys(instance.handlers).length; - continue; - } - if (value === void 0) continue; - let { root, key, target } = resolve(object, prop); - if (target === void 0 && (typeof root !== "object" || root === null)) throw Error(`R3F: Cannot set "${prop}". Ensure it is an object before setting "${key}".`); - if (target instanceof Layers && value instanceof Layers) target.mask = value.mask; - else if (target instanceof Color && isColorRepresentation(value)) target.set(value); - else if (target !== null && typeof target === "object" && typeof target.set === "function" && typeof target.copy === "function" && value != null && value.constructor && target.constructor === value.constructor) target.copy(value); - else if (target !== null && typeof target === "object" && typeof target.set === "function" && Array.isArray(value)) if (typeof target.fromArray === "function") target.fromArray(value); - else target.set(...value); - else if (target !== null && typeof target === "object" && typeof target.set === "function" && typeof value === "number") if (typeof target.setScalar === "function") target.setScalar(value); - else target.set(value); - else if (root instanceof ShaderMaterial && key === "uniforms" && is.obj(value)) { - if (!is.obj(root.uniforms)) root.uniforms = {}; - const uniforms = root.uniforms; - const nextUniforms = value; - for (const name in nextUniforms) { - const uniform = nextUniforms[name]; - const targetUniform = uniforms[name]; - if (targetUniform) Object.assign(targetUniform, uniform); - else uniforms[name] = { ...uniform }; - } - } else { - var _root$key; - root[key] = value; - if (rootState && !rootState.linear && colorMaps.includes(key) && (_root$key = root[key]) != null && _root$key.isTexture && root[key].format === 1023 && root[key].type === 1009) root[key].colorSpace = SRGBColorSpace; - } - } - if (instance != null && instance.parent && rootState != null && rootState.internal && (_instance$object = instance.object) != null && _instance$object.isObject3D && prevHandlers !== instance.eventCount) { - const object = instance.object; - const index = rootState.internal.interaction.indexOf(object); - if (index > -1) rootState.internal.interaction.splice(index, 1); - if (instance.eventCount && object.raycast !== null) rootState.internal.interaction.push(object); - } - if (instance && instance.props.attach === void 0) { - if (instance.object.isBufferGeometry) instance.props.attach = "geometry"; - else if (instance.object.isMaterial) instance.props.attach = "material"; - } - if (instance) invalidateInstance(instance); - return object; -} -function invalidateInstance(instance) { - var _instance$root; - if (!instance.parent) return; - instance.props.onUpdate == null || instance.props.onUpdate(instance.object); - const state = (_instance$root = instance.root) == null ? void 0 : _instance$root.getState == null ? void 0 : _instance$root.getState(); - if (state && state.internal.frames === 0) state.invalidate(); -} -function updateCamera(camera, size) { - if (camera.manual) return; - if (isOrthographicCamera(camera)) { - camera.left = size.width / -2; - camera.right = size.width / 2; - camera.top = size.height / 2; - camera.bottom = size.height / -2; - } else camera.aspect = size.width / size.height; - camera.updateProjectionMatrix(); -} -var isObject3D = (object) => object == null ? void 0 : object.isObject3D; -function makeId(event) { - return (event.eventObject || event.object).uuid + "/" + event.index + event.instanceId; -} -/** -* Release pointer captures. -* This is called by releasePointerCapture in the API, and when an object is removed. -*/ -function releaseInternalPointerCapture(capturedMap, obj, captures, pointerId) { - const captureData = captures.get(obj); - if (captureData) { - captures.delete(obj); - if (captures.size === 0) { - capturedMap.delete(pointerId); - captureData.target.releasePointerCapture(pointerId); - } - } -} -/** This function transfers all interactivity state from one object instance to another. Used when swapping instances due to reconstruction. */ -function swapInteractivity(store, object, newObject) { - const { internal } = store.getState(); - for (let i = 0; i < internal.interaction.length; i++) if (internal.interaction[i] === object) internal.interaction[i] = newObject; - for (let i = 0; i < internal.initialHits.length; i++) if (internal.initialHits[i] === object) internal.initialHits[i] = newObject; - internal.hovered.forEach((value, key) => { - if (value.eventObject === object || value.object === object) { - internal.hovered.delete(key); - const next = { - ...value, - eventObject: value.eventObject === object ? newObject : value.eventObject, - object: value.object === object ? newObject : value.object - }; - internal.hovered.set(makeId(next), next); - } - }); - internal.capturedMap.forEach((captures) => { - const captureData = captures.get(object); - if (captureData) { - captures.delete(object); - captures.set(newObject, captureData); - } - }); -} -function removeInteractivity(store, object) { - const { internal } = store.getState(); - internal.interaction = internal.interaction.filter((o) => o !== object); - internal.initialHits = internal.initialHits.filter((o) => o !== object); - internal.hovered.forEach((value, key) => { - if (value.eventObject === object || value.object === object) internal.hovered.delete(key); - }); - internal.capturedMap.forEach((captures, pointerId) => { - releaseInternalPointerCapture(internal.capturedMap, object, captures, pointerId); - }); -} -function createEvents(store) { - /** Calculates delta */ - function calculateDistance(event) { - const { internal } = store.getState(); - const dx = event.offsetX - internal.initialClick[0]; - const dy = event.offsetY - internal.initialClick[1]; - return Math.round(Math.sqrt(dx * dx + dy * dy)); - } - /** Returns true if an instance has a valid pointer-event registered, this excludes scroll, clicks etc */ - function filterPointerEvents(objects) { - return objects.filter((obj) => [ - "Move", - "Over", - "Enter", - "Out", - "Leave" - ].some((name) => { - var _r3f; - return (_r3f = obj.__r3f) == null ? void 0 : _r3f.handlers["onPointer" + name]; - })); - } - function intersect(event, filter) { - const state = store.getState(); - const duplicates = /* @__PURE__ */ new Set(); - const intersections = []; - const eventsObjects = filter ? filter(state.internal.interaction) : state.internal.interaction; - for (let i = 0; i < eventsObjects.length; i++) { - const state = getRootState(eventsObjects[i]); - if (state) state.raycaster.camera = void 0; - } - if (!state.previousRoot) state.events.compute == null || state.events.compute(event, state); - function handleRaycast(obj) { - const state = getRootState(obj); - if (!state || !state.events.enabled || state.raycaster.camera === null) return []; - if (state.raycaster.camera === void 0) { - var _state$previousRoot; - state.events.compute == null || state.events.compute(event, state, (_state$previousRoot = state.previousRoot) == null ? void 0 : _state$previousRoot.getState()); - if (state.raycaster.camera === void 0) state.raycaster.camera = null; - } - return state.raycaster.camera ? state.raycaster.intersectObject(obj, true) : []; - } - let hits = eventsObjects.flatMap(handleRaycast).sort((a, b) => { - const aState = getRootState(a.object); - const bState = getRootState(b.object); - if (!aState || !bState) return a.distance - b.distance; - return bState.events.priority - aState.events.priority || a.distance - b.distance; - }).filter((item) => { - const id = makeId(item); - if (duplicates.has(id)) return false; - duplicates.add(id); - return true; - }); - if (state.events.filter) hits = state.events.filter(hits, state); - for (const hit of hits) { - let eventObject = hit.object; - while (eventObject) { - var _r3f2; - if ((_r3f2 = eventObject.__r3f) != null && _r3f2.eventCount) intersections.push({ - ...hit, - eventObject - }); - eventObject = eventObject.parent; - } - } - if ("pointerId" in event && state.internal.capturedMap.has(event.pointerId)) { - for (let captureData of state.internal.capturedMap.get(event.pointerId).values()) if (!duplicates.has(makeId(captureData.intersection))) intersections.push(captureData.intersection); - } - return intersections; - } - /** Handles intersections by forwarding them to handlers */ - function handleIntersects(intersections, event, delta, callback) { - if (intersections.length) { - const localState = { stopped: false }; - for (const hit of intersections) { - let state = getRootState(hit.object); - if (!state) hit.object.traverseAncestors((obj) => { - const parentState = getRootState(obj); - if (parentState) { - state = parentState; - return false; - } - }); - if (state) { - const { raycaster, pointer, camera, internal } = state; - const unprojectedPoint = new Vector3(pointer.x, pointer.y, 0).unproject(camera); - const hasPointerCapture = (id) => { - var _internal$capturedMap, _internal$capturedMap2; - return (_internal$capturedMap = (_internal$capturedMap2 = internal.capturedMap.get(id)) == null ? void 0 : _internal$capturedMap2.has(hit.eventObject)) != null ? _internal$capturedMap : false; - }; - const setPointerCapture = (id) => { - const captureData = { - intersection: hit, - target: event.target - }; - if (internal.capturedMap.has(id)) internal.capturedMap.get(id).set(hit.eventObject, captureData); - else internal.capturedMap.set(id, new Map([[hit.eventObject, captureData]])); - event.target.setPointerCapture(id); - }; - const releasePointerCapture = (id) => { - const captures = internal.capturedMap.get(id); - if (captures) releaseInternalPointerCapture(internal.capturedMap, hit.eventObject, captures, id); - }; - let extractEventProps = {}; - for (let prop in event) { - let property = event[prop]; - if (typeof property !== "function") extractEventProps[prop] = property; - } - let raycastEvent = { - ...hit, - ...extractEventProps, - pointer, - intersections, - stopped: localState.stopped, - delta, - unprojectedPoint, - ray: raycaster.ray, - camera, - stopPropagation() { - const capturesForPointer = "pointerId" in event && internal.capturedMap.get(event.pointerId); - if (!capturesForPointer || capturesForPointer.has(hit.eventObject)) { - raycastEvent.stopped = localState.stopped = true; - if (internal.hovered.size && Array.from(internal.hovered.values()).find((i) => i.eventObject === hit.eventObject)) cancelPointer([...intersections.slice(0, intersections.indexOf(hit)), hit]); - } - }, - target: { - hasPointerCapture, - setPointerCapture, - releasePointerCapture - }, - currentTarget: { - hasPointerCapture, - setPointerCapture, - releasePointerCapture - }, - nativeEvent: event - }; - callback(raycastEvent); - if (localState.stopped === true) break; - } - } - } - return intersections; - } - function cancelPointer(intersections) { - const { internal } = store.getState(); - for (const hoveredObj of internal.hovered.values()) if (!intersections.length || !intersections.find((hit) => hit.object === hoveredObj.object && hit.index === hoveredObj.index && hit.instanceId === hoveredObj.instanceId)) { - const instance = hoveredObj.eventObject.__r3f; - internal.hovered.delete(makeId(hoveredObj)); - if (instance != null && instance.eventCount) { - const handlers = instance.handlers; - const data = { - ...hoveredObj, - intersections - }; - handlers.onPointerOut == null || handlers.onPointerOut(data); - handlers.onPointerLeave == null || handlers.onPointerLeave(data); - } - } - } - function pointerMissed(event, objects) { - for (let i = 0; i < objects.length; i++) { - const instance = objects[i].__r3f; - instance == null || instance.handlers.onPointerMissed == null || instance.handlers.onPointerMissed(event); - } - } - function handlePointer(name) { - switch (name) { - case "onPointerLeave": - case "onPointerCancel": return () => cancelPointer([]); - case "onLostPointerCapture": return (event) => { - const { internal } = store.getState(); - if ("pointerId" in event && internal.capturedMap.has(event.pointerId)) requestAnimationFrame(() => { - if (internal.capturedMap.has(event.pointerId)) { - internal.capturedMap.delete(event.pointerId); - cancelPointer([]); - } - }); - }; - } - return function handleEvent(event) { - const { onPointerMissed, internal } = store.getState(); - internal.lastEvent.current = event; - const isPointerMove = name === "onPointerMove"; - const isClickEvent = name === "onClick" || name === "onContextMenu" || name === "onDoubleClick"; - const hits = intersect(event, isPointerMove ? filterPointerEvents : void 0); - const delta = isClickEvent ? calculateDistance(event) : 0; - if (name === "onPointerDown") { - internal.initialClick = [event.offsetX, event.offsetY]; - internal.initialHits = hits.map((hit) => hit.eventObject); - } - if (isClickEvent && !hits.length) { - if (delta <= 2) { - pointerMissed(event, internal.interaction); - if (onPointerMissed) onPointerMissed(event); - } - } - if (isPointerMove) cancelPointer(hits); - function onIntersect(data) { - const eventObject = data.eventObject; - const instance = eventObject.__r3f; - if (!(instance != null && instance.eventCount)) return; - const handlers = instance.handlers; - if (isPointerMove) { - if (handlers.onPointerOver || handlers.onPointerEnter || handlers.onPointerOut || handlers.onPointerLeave) { - const id = makeId(data); - const hoveredItem = internal.hovered.get(id); - if (!hoveredItem) { - internal.hovered.set(id, data); - handlers.onPointerOver == null || handlers.onPointerOver(data); - handlers.onPointerEnter == null || handlers.onPointerEnter(data); - } else if (hoveredItem.stopped) data.stopPropagation(); - } - handlers.onPointerMove == null || handlers.onPointerMove(data); - } else { - const handler = handlers[name]; - if (handler) { - if (!isClickEvent || internal.initialHits.includes(eventObject)) { - pointerMissed(event, internal.interaction.filter((object) => !internal.initialHits.includes(object))); - handler(data); - } - } else if (isClickEvent && internal.initialHits.includes(eventObject)) pointerMissed(event, internal.interaction.filter((object) => !internal.initialHits.includes(object))); - } - } - handleIntersects(hits, event, delta, onIntersect); - }; - } - return { handlePointer }; -} -var isRenderer = (def) => !!(def != null && def.render); -var context = /* @__PURE__ */ import_react.createContext(null); -var createStore = (invalidate, advance) => { - const rootStore = createWithEqualityFn((set, get) => { - const position = new Vector3(); - const defaultTarget = new Vector3(); - const tempTarget = new Vector3(); - function getCurrentViewport(camera = get().camera, target = defaultTarget, size = get().size) { - const { width, height, top, left } = size; - const aspect = width / height; - if (target.isVector3) tempTarget.copy(target); - else tempTarget.set(...target); - const distance = camera.getWorldPosition(position).distanceTo(tempTarget); - if (isOrthographicCamera(camera)) return { - width: width / camera.zoom, - height: height / camera.zoom, - top, - left, - factor: 1, - distance, - aspect - }; - else { - const fov = camera.fov * Math.PI / 180; - const h = 2 * Math.tan(fov / 2) * distance; - const w = h * (width / height); - return { - width: w, - height: h, - top, - left, - factor: width / w, - distance, - aspect - }; - } - } - let performanceTimeout = void 0; - const setPerformanceCurrent = (current) => set((state) => ({ performance: { - ...state.performance, - current - } })); - const pointer = new Vector2(); - return { - set, - get, - gl: null, - camera: null, - raycaster: null, - events: { - priority: 1, - enabled: true, - connected: false - }, - scene: null, - xr: null, - invalidate: (frames = 1) => invalidate(get(), frames), - advance: (timestamp, runGlobalEffects) => advance(timestamp, runGlobalEffects, get()), - legacy: false, - linear: false, - flat: false, - controls: null, - clock: new Clock(), - pointer, - mouse: pointer, - frameloop: "always", - onPointerMissed: void 0, - performance: { - current: 1, - min: .5, - max: 1, - debounce: 200, - regress: () => { - const state = get(); - if (performanceTimeout) clearTimeout(performanceTimeout); - if (state.performance.current !== state.performance.min) setPerformanceCurrent(state.performance.min); - performanceTimeout = setTimeout(() => setPerformanceCurrent(get().performance.max), state.performance.debounce); - } - }, - size: { - width: 0, - height: 0, - top: 0, - left: 0 - }, - viewport: { - initialDpr: 0, - dpr: 0, - width: 0, - height: 0, - top: 0, - left: 0, - aspect: 0, - distance: 0, - factor: 0, - getCurrentViewport - }, - setEvents: (events) => set((state) => ({ - ...state, - events: { - ...state.events, - ...events - } - })), - setSize: (width, height, top = 0, left = 0) => { - const camera = get().camera; - const size = { - width, - height, - top, - left - }; - set((state) => ({ - size, - viewport: { - ...state.viewport, - ...getCurrentViewport(camera, defaultTarget, size) - } - })); - }, - setDpr: (dpr) => set((state) => { - const resolved = calculateDpr(dpr); - return { viewport: { - ...state.viewport, - dpr: resolved, - initialDpr: state.viewport.initialDpr || resolved - } }; - }), - setFrameloop: (frameloop = "always") => { - const clock = get().clock; - clock.stop(); - clock.elapsedTime = 0; - if (frameloop !== "never") { - clock.start(); - clock.elapsedTime = 0; - } - set(() => ({ frameloop })); - }, - previousRoot: void 0, - internal: { - interaction: [], - hovered: /* @__PURE__ */ new Map(), - subscribers: [], - initialClick: [0, 0], - initialHits: [], - capturedMap: /* @__PURE__ */ new Map(), - lastEvent: /*#__PURE__*/ import_react.createRef(), - active: false, - frames: 0, - priority: 0, - subscribe: (ref, priority, store) => { - const internal = get().internal; - internal.priority = internal.priority + (priority > 0 ? 1 : 0); - internal.subscribers.push({ - ref, - priority, - store - }); - internal.subscribers = internal.subscribers.sort((a, b) => a.priority - b.priority); - return () => { - const internal = get().internal; - if (internal != null && internal.subscribers) { - internal.priority = internal.priority - (priority > 0 ? 1 : 0); - internal.subscribers = internal.subscribers.filter((s) => s.ref !== ref); - } - }; - } - } - }; - }); - const state = rootStore.getState(); - let oldSize = state.size; - let oldDpr = state.viewport.dpr; - let oldCamera = state.camera; - rootStore.subscribe(() => { - const { camera, size, viewport, gl, set } = rootStore.getState(); - if (size.width !== oldSize.width || size.height !== oldSize.height || viewport.dpr !== oldDpr) { - oldSize = size; - oldDpr = viewport.dpr; - updateCamera(camera, size); - if (viewport.dpr > 0) gl.setPixelRatio(viewport.dpr); - const updateStyle = typeof HTMLCanvasElement !== "undefined" && gl.domElement instanceof HTMLCanvasElement; - gl.setSize(size.width, size.height, updateStyle); - } - if (camera !== oldCamera) { - oldCamera = camera; - set((state) => ({ viewport: { - ...state.viewport, - ...state.viewport.getCurrentViewport(camera) - } })); - } - }); - rootStore.subscribe((state) => invalidate(state)); - return rootStore; -}; -/** -* Exposes an object's {@link Instance}. -* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#useInstanceHandle -* -* **Note**: this is an escape hatch to react-internal fields. Expect this to change significantly between versions. -*/ -function useInstanceHandle(ref) { - const instance = import_react.useRef(null); - import_react.useImperativeHandle(instance, () => ref.current.__r3f, [ref]); - return instance; -} -/** -* Returns the R3F Canvas' Zustand store. Useful for [transient updates](https://github.com/pmndrs/zustand#transient-updates-for-often-occurring-state-changes). -* @see https://docs.pmnd.rs/react-three-fiber/api/hooks#usestore -*/ -function useStore() { - const store = import_react.useContext(context); - if (!store) throw new Error("R3F: Hooks can only be used within the Canvas component!"); - return store; -} -/** -* Accesses R3F's internal state, containing renderer, canvas, scene, etc. -* @see https://docs.pmnd.rs/react-three-fiber/api/hooks#usethree -*/ -function useThree(selector = (state) => state, equalityFn) { - return useStore()(selector, equalityFn); -} -/** -* Executes a callback before render in a shared frame loop. -* Can order effects with render priority or manually render with a positive priority. -* @see https://docs.pmnd.rs/react-three-fiber/api/hooks#useframe -*/ -function useFrame(callback, renderPriority = 0) { - const store = useStore(); - const subscribe = store.getState().internal.subscribe; - const ref = useMutableCallback(callback); - useIsomorphicLayoutEffect(() => subscribe(ref, renderPriority, store), [ - renderPriority, - subscribe, - store - ]); - return null; -} -/** -* Returns a node graph of an object with named nodes & materials. -* @see https://docs.pmnd.rs/react-three-fiber/api/hooks#usegraph -*/ -function useGraph(object) { - return import_react.useMemo(() => buildGraph(object), [object]); -} -var memoizedLoaders = /* @__PURE__ */ new WeakMap(); -var isConstructor$1 = (value) => { - var _value$prototype; - return typeof value === "function" && (value == null ? void 0 : (_value$prototype = value.prototype) == null ? void 0 : _value$prototype.constructor) === value; -}; -function loadingFn(extensions, onProgress) { - return function(Proto, ...input) { - let loader; - if (isConstructor$1(Proto)) { - loader = memoizedLoaders.get(Proto); - if (!loader) { - loader = new Proto(); - memoizedLoaders.set(Proto, loader); - } - } else loader = Proto; - if (extensions) extensions(loader); - return Promise.all(input.map((input) => new Promise((res, reject) => loader.load(input, (data) => { - if (isObject3D(data == null ? void 0 : data.scene)) Object.assign(data, buildGraph(data.scene)); - res(data); - }, onProgress, (error) => reject(/* @__PURE__ */ new Error(`Could not load ${input}: ${error == null ? void 0 : error.message}`)))))); - }; -} -/** -* Synchronously loads and caches assets with a three loader. -* -* Note: this hook's caller must be wrapped with `React.Suspense` -* @see https://docs.pmnd.rs/react-three-fiber/api/hooks#useloader -*/ -function useLoader(loader, input, extensions, onProgress) { - const keys = Array.isArray(input) ? input : [input]; - const results = suspend(loadingFn(extensions, onProgress), [loader, ...keys], { equal: is.equ }); - return Array.isArray(input) ? results : results[0]; -} -/** -* Preloads an asset into cache as a side-effect. -*/ -useLoader.preload = function(loader, input, extensions) { - const keys = Array.isArray(input) ? input : [input]; - return preload(loadingFn(extensions), [loader, ...keys]); -}; -/** -* Removes a loaded asset from cache. -*/ -useLoader.clear = function(loader, input) { - return clear([loader, ...Array.isArray(input) ? input : [input]]); -}; -/** -* @license React -* react-reconciler-constants.production.js -* -* Copyright (c) Meta Platforms, Inc. and affiliates. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. -*/ var t = 1, o = 8, r = 32, e = 2; -var packageData = { - name: "@react-three/fiber", - version: "9.6.1", - description: "A React renderer for Threejs", - keywords: [ - "react", - "renderer", - "fiber", - "three", - "threejs" - ], - author: "Paul Henschel (https://github.com/drcmda)", - license: "MIT", - maintainers: [ - "Josh Ellis (https://github.com/joshuaellis)", - "Cody Bennett (https://github.com/codyjasonbennett)", - "Kris Baumgarter (https://github.com/krispya)" - ], - bugs: { url: "https://github.com/pmndrs/react-three-fiber/issues" }, - homepage: "https://github.com/pmndrs/react-three-fiber#readme", - repository: { - type: "git", - url: "git+https://github.com/pmndrs/react-three-fiber.git" - }, - collective: { - type: "opencollective", - url: "https://opencollective.com/react-three-fiber" - }, - main: "dist/react-three-fiber.cjs.js", - module: "dist/react-three-fiber.esm.js", - types: "dist/react-three-fiber.cjs.d.ts", - "react-native": "native/dist/react-three-fiber-native.cjs.js", - sideEffects: false, - preconstruct: { entrypoints: ["index.tsx", "native.tsx"] }, - scripts: { prebuild: "cp ../../readme.md readme.md" }, - devDependencies: { - "@types/react-reconciler": "^0.32.3", - "react-reconciler": "^0.33.0" - }, - dependencies: { - "@babel/runtime": "^7.17.8", - "@types/webxr": "*", - "base64-js": "^1.5.1", - buffer: "^6.0.3", - "its-fine": "^2.0.0", - "react-use-measure": "^2.1.7", - scheduler: "^0.27.0", - "suspend-react": "^0.1.3", - "use-sync-external-store": "^1.4.0", - zustand: "^5.0.3" - }, - peerDependencies: { - expo: ">=43.0", - "expo-asset": ">=8.4", - "expo-file-system": ">=11.0", - "expo-gl": ">=11.0", - react: ">=19 <19.3", - "react-dom": ">=19 <19.3", - "react-native": ">=0.78", - three: ">=0.156" - }, - peerDependenciesMeta: { - "react-dom": { optional: true }, - "react-native": { optional: true }, - expo: { optional: true }, - "expo-asset": { optional: true }, - "expo-file-system": { optional: true }, - "expo-gl": { optional: true } - } -}; -function Xb(Tt) { - return Tt && Tt.__esModule && Object.prototype.hasOwnProperty.call(Tt, "default") ? Tt.default : Tt; -} -var Rm = { exports: {} }; -/** -* @license React -* react-reconciler.production.js -* -* Copyright (c) Meta Platforms, Inc. and affiliates. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. -*/ -({ exports: {} }).exports; -var Mg = { exports: {} }; -/** -* @license React -* react-reconciler.development.js -* -* Copyright (c) Meta Platforms, Inc. and affiliates. -* -* This source code is licensed under the MIT license found in the -* LICENSE file in the root directory of this source tree. -*/ -Mg.exports; -var Rb; -function e0() { - return Rb || (Rb = 1, function(Tt) { - Tt.exports = function(m) { - function Yn(e, n) { - for (e = e.memoizedState; e !== null && 0 < n;) e = e.next, n--; - return e; - } - function _d(e, n, o, i) { - if (o >= n.length) return i; - var s = n[o], u = fn(e) ? e.slice() : ze({}, e); - return u[s] = _d(e[s], n, o + 1, i), u; - } - function F(e, n, o) { - if (n.length !== o.length) console.warn("copyWithRename() expects paths of the same length"); - else { - for (var i = 0; i < o.length - 1; i++) if (n[i] !== o[i]) { - console.warn("copyWithRename() expects paths to be the same except for the deepest key"); - return; - } - return Rd(e, n, o, 0); - } - } - function Rd(e, n, o, i) { - var s = n[i], u = fn(e) ? e.slice() : ze({}, e); - return i + 1 === n.length ? (u[o[i]] = u[s], fn(u) ? u.splice(s, 1) : delete u[s]) : u[s] = Rd(e[s], n, o, i + 1), u; - } - function du(e, n, o) { - var i = n[o], s = fn(e) ? e.slice() : ze({}, e); - return o + 1 === n.length ? (fn(s) ? s.splice(i, 1) : delete s[i], s) : (s[i] = du(e[i], n, o + 1), s); - } - function fu() { - return !1; - } - function pu() { - return null; - } - function lt(e, n, o, i) { - return new Vm(e, n, o, i); - } - function Fl(e, n) { - e.context === Oe && (Wh(n, e, null, null), Ls()); - } - function hu(e, n) { - if (co !== null) { - var o = n.staleFamilies; - n = n.updatedFamilies, el(), jh(e.current, n, o), Ls(); - } - } - function Ir(e) { - co = e; - } - function D() { - console.error("Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. You can only call Hooks at the top level of your React function. For more information, see https://react.dev/link/rules-of-hooks"); - } - function Ce() { - console.error("Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()."); - } - function Em() {} - function Zo() {} - function Lr(e) { - var n = []; - return e.forEach(function(o) { - n.push(o); - }), n.sort().join(", "); - } - function Pi(e) { - var n = e, o = e; - if (e.alternate) for (; n.return;) n = n.return; - else { - e = n; - do - n = e, n.flags & 4098 && (o = n.return), e = n.return; - while (e); - } - return n.tag === 3 ? o : null; - } - function Tp(e) { - if (Pi(e) !== e) throw Error("Unable to find node on an unmounted component."); - } - function Ed(e) { - var n = e.alternate; - if (!n) { - if (n = Pi(e), n === null) throw Error("Unable to find node on an unmounted component."); - return n !== e ? null : e; - } - for (var o = e, i = n;;) { - var s = o.return; - if (s === null) break; - var u = s.alternate; - if (u === null) { - if (i = s.return, i !== null) { - o = i; - continue; - } - break; - } - if (s.child === u.child) { - for (u = s.child; u;) { - if (u === o) return Tp(s), e; - if (u === i) return Tp(s), n; - u = u.sibling; - } - throw Error("Unable to find node on an unmounted component."); - } - if (o.return !== i.return) o = s, i = u; - else { - for (var f = !1, p = s.child; p;) { - if (p === o) { - f = !0, o = s, i = u; - break; - } - if (p === i) { - f = !0, i = s, o = u; - break; - } - p = p.sibling; - } - if (!f) { - for (p = u.child; p;) { - if (p === o) { - f = !0, o = u, i = s; - break; - } - if (p === i) { - f = !0, i = u, o = s; - break; - } - p = p.sibling; - } - if (!f) throw Error("Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue."); - } - } - if (o.alternate !== i) throw Error("Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue."); - } - if (o.tag !== 3) throw Error("Unable to find node on an unmounted component."); - return o.stateNode.current === o ? e : n; - } - function mu(e) { - return e = Ed(e), e !== null ? xi(e) : null; - } - function xi(e) { - var n = e.tag; - if (n === 5 || n === 26 || n === 27 || n === 6) return e; - for (e = e.child; e !== null;) { - if (n = xi(e), n !== null) return n; - e = e.sibling; - } - return null; - } - function _p(e) { - var n = e.tag; - if (n === 5 || n === 26 || n === 27 || n === 6) return e; - for (e = e.child; e !== null;) { - if (e.tag !== 4 && (n = _p(e), n !== null)) return n; - e = e.sibling; - } - return null; - } - function Yo(e) { - return e === null || typeof e != "object" ? null : (e = ni && e[ni] || e["@@iterator"], typeof e == "function" ? e : null); - } - function $e(e) { - if (e == null) return null; - if (typeof e == "function") return e.$$typeof === il ? null : e.displayName || e.name || null; - if (typeof e == "string") return e; - switch (e) { - case ol: return "Fragment"; - case Uf: return "Profiler"; - case Lc: return "StrictMode"; - case Nc: return "Suspense"; - case Bf: return "SuspenseList"; - case Ds: return "Activity"; - } - if (typeof e == "object") switch (typeof e.tag == "number" && console.error("Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue."), e.$$typeof) { - case Ao: return "Portal"; - case on: return e.displayName || "Context"; - case ei: return (e._context.displayName || "Context") + ".Consumer"; - case jn: - var n = e.render; - return e = e.displayName, e || (e = n.displayName || n.name || "", e = e !== "" ? "ForwardRef(" + e + ")" : "ForwardRef"), e; - case al: return n = e.displayName || null, n !== null ? n : $e(e.type) || "Memo"; - case kt: - n = e._payload, e = e._init; - try { - return $e(e(n)); - } catch {} - } - return null; - } - function G(e) { - var n = e.type; - switch (e.tag) { - case 31: return "Activity"; - case 24: return "Cache"; - case 9: return (n._context.displayName || "Context") + ".Consumer"; - case 10: return n.displayName || "Context"; - case 18: return "DehydratedFragment"; - case 11: return e = n.render, e = e.displayName || e.name || "", n.displayName || (e !== "" ? "ForwardRef(" + e + ")" : "ForwardRef"); - case 7: return "Fragment"; - case 26: - case 27: - case 5: return n; - case 4: return "Portal"; - case 3: return "Root"; - case 6: return "Text"; - case 16: return $e(n); - case 8: return n === Lc ? "StrictMode" : "Mode"; - case 22: return "Offscreen"; - case 12: return "Profiler"; - case 21: return "Scope"; - case 13: return "Suspense"; - case 19: return "SuspenseList"; - case 25: return "TracingMarker"; - case 1: - case 0: - case 14: - case 15: - if (typeof n == "function") return n.displayName || n.name || null; - if (typeof n == "string") return n; - break; - case 29: - if (n = e._debugInfo, n != null) { - for (var o = n.length - 1; 0 <= o; o--) if (typeof n[o].name == "string") return n[o].name; - } - if (e.return !== null) return G(e.return); - } - return null; - } - function st(e) { - return { current: e }; - } - function Ze(e, n) { - 0 > V ? console.error("Unexpected pop.") : (n !== W[V] && console.error("Unexpected Fiber popped."), e.current = A[V], A[V] = null, W[V] = null, V--); - } - function pe(e, n, o) { - V++, A[V] = e.current, W[V] = o, e.current = n; - } - function Im(e) { - return e >>>= 0, e === 0 ? 32 : 31 - (li(e) / P | 0) | 0; - } - function _t(e) { - var n = e & 42; - if (n !== 0) return n; - switch (e & -e) { - case 1: return 1; - case 2: return 2; - case 4: return 4; - case 8: return 8; - case 16: return 16; - case 32: return 32; - case 64: return 64; - case 128: return 128; - case 256: - case 512: - case 1024: - case 2048: - case 4096: - case 8192: - case 16384: - case 32768: - case 65536: - case 131072: return e & 261888; - case 262144: - case 524288: - case 1048576: - case 2097152: return e & 3932160; - case 4194304: - case 8388608: - case 16777216: - case 33554432: return e & 62914560; - case 67108864: return 67108864; - case 134217728: return 134217728; - case 268435456: return 268435456; - case 536870912: return 536870912; - case 1073741824: return 0; - default: return console.error("Should have found matching lanes. This is a bug in React."), e; - } - } - function zi(e, n, o) { - var i = e.pendingLanes; - if (i === 0) return 0; - var s = 0, u = e.suspendedLanes, f = e.pingedLanes; - e = e.warmLanes; - var p = i & 134217727; - return p !== 0 ? (i = p & ~u, i !== 0 ? s = _t(i) : (f &= p, f !== 0 ? s = _t(f) : o || (o = p & ~e, o !== 0 && (s = _t(o))))) : (p = i & ~u, p !== 0 ? s = _t(p) : f !== 0 ? s = _t(f) : o || (o = i & ~e, o !== 0 && (s = _t(o)))), s === 0 ? 0 : n !== 0 && n !== s && (n & u) === 0 && (u = s & -s, o = n & -n, u >= o || u === 32 && (o & 4194048) !== 0) ? n : s; - } - function Hl(e, n) { - return (e.pendingLanes & ~(e.suspendedLanes & ~e.pingedLanes) & n) === 0; - } - function Rp(e, n) { - switch (e) { - case 1: - case 2: - case 4: - case 8: - case 64: return n + 250; - case 16: - case 32: - case 128: - case 256: - case 512: - case 1024: - case 2048: - case 4096: - case 8192: - case 16384: - case 32768: - case 65536: - case 131072: - case 262144: - case 524288: - case 1048576: - case 2097152: return n + 5e3; - case 4194304: - case 8388608: - case 16777216: - case 33554432: return -1; - case 67108864: - case 134217728: - case 268435456: - case 536870912: - case 1073741824: return -1; - default: return console.error("Should have found matching lanes. This is a bug in React."), -1; - } - } - function ut() { - var e = H; - return H <<= 1, !(H & 62914560) && (H = 4194304), e; - } - function or(e) { - for (var n = [], o = 0; 31 > o; o++) n.push(e); - return n; - } - function Ci(e, n) { - e.pendingLanes |= n, n !== 268435456 && (e.suspendedLanes = 0, e.pingedLanes = 0, e.warmLanes = 0); - } - function Id(e, n, o, i, s, u) { - var f = e.pendingLanes; - e.pendingLanes = o, e.suspendedLanes = 0, e.pingedLanes = 0, e.warmLanes = 0, e.expiredLanes &= o, e.entangledLanes &= o, e.errorRecoveryDisabledLanes &= o, e.shellSuspendCounter = 0; - var p = e.entanglements, g = e.expirationTimes, S = e.hiddenUpdates; - for (o = f & ~o; 0 < o;) { - var T = 31 - vn(o), _ = 1 << T; - p[T] = 0, g[T] = -1; - var I = S[T]; - if (I !== null) for (S[T] = null, T = 0; T < I.length; T++) { - var O = I[T]; - O !== null && (O.lane &= -536870913); - } - o &= ~_; - } - i !== 0 && gu(e, i, 0), u !== 0 && s === 0 && e.tag !== 0 && (e.suspendedLanes |= u & ~(f & ~n)); - } - function gu(e, n, o) { - e.pendingLanes |= n, e.suspendedLanes &= ~n; - var i = 31 - vn(n); - e.entangledLanes |= n, e.entanglements[i] = e.entanglements[i] | 1073741824 | o & 261930; - } - function Ld(e, n) { - var o = e.entangledLanes |= n; - for (e = e.entanglements; o;) { - var i = 31 - vn(o), s = 1 << i; - s & n | e[i] & n && (e[i] |= n), o &= ~s; - } - } - function Al(e, n) { - var o = n & -n; - return o = (o & 42) !== 0 ? 1 : Xo(o), (o & (e.suspendedLanes | n)) !== 0 ? 0 : o; - } - function Xo(e) { - switch (e) { - case 2: - e = 1; - break; - case 8: - e = 4; - break; - case 32: - e = 16; - break; - case 256: - case 512: - case 1024: - case 2048: - case 4096: - case 8192: - case 16384: - case 32768: - case 65536: - case 131072: - case 262144: - case 524288: - case 1048576: - case 2097152: - case 4194304: - case 8388608: - case 16777216: - case 33554432: - e = 128; - break; - case 268435456: - e = 134217728; - break; - default: e = 0; - } - return e; - } - function yu(e, n, o) { - if (wa) for (e = e.pendingUpdatersLaneMap; 0 < o;) { - var i = 31 - vn(o), s = 1 << i; - e[i].add(n), o &= ~s; - } - } - function jl(e, n) { - if (wa) for (var o = e.pendingUpdatersLaneMap, i = e.memoizedUpdaters; 0 < n;) { - var s = 31 - vn(n); - e = 1 << s, s = o[s], 0 < s.size && (s.forEach(function(u) { - var f = u.alternate; - f !== null && i.has(f) || i.add(u); - }), s.clear()), n &= ~e; - } - } - function ar(e) { - return e &= -e, 2 < e ? 8 < e ? (e & 134217727) !== 0 ? 32 : 268435456 : 8 : 2; - } - function Ep(e) { - if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ > "u") return !1; - var n = __REACT_DEVTOOLS_GLOBAL_HOOK__; - if (n.isDisabled) return !0; - if (!n.supportsFiber) return console.error("The installed version of React DevTools is too old and will not work with the current version of React. Please update React DevTools. https://react.dev/link/react-devtools"), !0; - try { - td = n.inject(e), zt = n; - } catch (o) { - console.error("React instrumentation encountered an error: %o.", o); - } - return !!n.checkDCE; - } - function De(e) { - if (typeof Ib == "function" && Lb(e), zt && typeof zt.setStrictMode == "function") try { - zt.setStrictMode(td, e); - } catch (n) { - ka || (ka = !0, console.error("React instrumentation encountered an error: %o", n)); - } - } - function Ti(e, n) { - return e === n && (e !== 0 || 1 / e === 1 / n) || e !== e && n !== n; - } - function _a(e) { - for (var n = 0, o = 0; o < e.length; o++) { - var i = e[o]; - if (typeof i == "object" && i !== null) if (fn(i) && i.length === 2 && typeof i[0] == "string") { - if (n !== 0 && n !== 3) return 1; - n = 3; - } else return 1; - else { - if (typeof i == "function" || typeof i == "string" && 50 < i.length || n !== 0 && n !== 2) return 1; - n = 2; - } - } - return n; - } - function Dl(e, n, o, i) { - for (var s in e) Xm.call(e, s) && s[0] !== "_" && ct(s, e[s], n, o, i); - } - function ct(e, n, o, i, s) { - switch (typeof n) { - case "object": if (n === null) { - n = "null"; - break; - } else { - if (n.$$typeof === Ho) { - var u = $e(n.type) || "…", f = n.key; - n = n.props; - var p = Object.keys(n), g = p.length; - if (f == null && g === 0) { - n = "<" + u + " />"; - break; - } - if (3 > i || g === 1 && p[0] === "children" && f == null) { - n = "<" + u + " … />"; - break; - } - o.push([s + "\xA0\xA0".repeat(i) + e, "<" + u]), f !== null && ct("key", f, o, i + 1, s), e = !1; - for (var S in n) S === "children" ? n.children != null && (!fn(n.children) || 0 < n.children.length) && (e = !0) : Xm.call(n, S) && S[0] !== "_" && ct(S, n[S], o, i + 1, s); - o.push(["", e ? ">…</" + u + ">" : "/>"]); - return; - } - if (u = Object.prototype.toString.call(n), u = u.slice(8, u.length - 1), u === "Array") { - if (S = _a(n), S === 2 || S === 0) { - n = JSON.stringify(n); - break; - } else if (S === 3) { - for (o.push([s + "\xA0\xA0".repeat(i) + e, ""]), e = 0; e < n.length; e++) u = n[e], ct(u[0], u[1], o, i + 1, s); - return; - } - } - if (u === "Promise") { - if (n.status === "fulfilled") { - if (u = o.length, ct(e, n.value, o, i, s), o.length > u) { - o = o[u], o[1] = "Promise<" + (o[1] || "Object") + ">"; - return; - } - } else if (n.status === "rejected" && (u = o.length, ct(e, n.reason, o, i, s), o.length > u)) { - o = o[u], o[1] = "Rejected Promise<" + o[1] + ">"; - return; - } - o.push(["\xA0\xA0".repeat(i) + e, "Promise"]); - return; - } - u === "Object" && (S = Object.getPrototypeOf(n)) && typeof S.constructor == "function" && (u = S.constructor.name), o.push([s + "\xA0\xA0".repeat(i) + e, u === "Object" ? 3 > i ? "" : "…" : u]), 3 > i && Dl(n, o, i + 1, s); - return; - } - case "function": - n = n.name === "" ? "() => {}" : n.name + "() {}"; - break; - case "string": - n = n === "This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects." ? "…" : JSON.stringify(n); - break; - case "undefined": - n = "undefined"; - break; - case "boolean": - n = n ? "true" : "false"; - break; - default: n = String(n); - } - o.push([s + "\xA0\xA0".repeat(i) + e, n]); - } - function fo(e, n, o, i) { - var s = !0; - for (f in e) f in n || (o.push(["–\xA0" + "\xA0\xA0".repeat(i) + f, "…"]), s = !1); - for (var u in n) if (u in e) { - var f = e[u], p = n[u]; - if (f !== p) { - if (i === 0 && u === "children") s = "\xA0\xA0".repeat(i) + u, o.push(["–\xA0" + s, "…"], ["+\xA0" + s, "…"]); - else { - if (!(3 <= i)) { - if (typeof f == "object" && typeof p == "object" && f !== null && p !== null && f.$$typeof === p.$$typeof) if (p.$$typeof === Ho) { - if (f.type === p.type && f.key === p.key) { - f = $e(p.type) || "…", s = "\xA0\xA0".repeat(i) + u, f = "<" + f + " … />", o.push(["–\xA0" + s, f], ["+\xA0" + s, f]), s = !1; - continue; - } - } else { - var g = Object.prototype.toString.call(f), S = Object.prototype.toString.call(p); - if (g === S && (S === "[object Object]" || S === "[object Array]")) { - g = [" \xA0" + "\xA0\xA0".repeat(i) + u, S === "[object Array]" ? "Array" : ""], o.push(g), S = o.length, fo(f, p, o, i + 1) ? S === o.length && (g[1] = "Referentially unequal but deeply equal objects. Consider memoization.") : s = !1; - continue; - } - } - else if (typeof f == "function" && typeof p == "function" && f.name === p.name && f.length === p.length && (g = Function.prototype.toString.call(f), S = Function.prototype.toString.call(p), g === S)) { - f = p.name === "" ? "() => {}" : p.name + "() {}", o.push([" \xA0" + "\xA0\xA0".repeat(i) + u, f + " Referentially unequal function closure. Consider memoization."]); - continue; - } - } - ct(u, f, o, i, "–\xA0"), ct(u, p, o, i, "+\xA0"); - } - s = !1; - } - } else o.push(["+\xA0" + "\xA0\xA0".repeat(i) + u, "…"]), s = !1; - return s; - } - function En(e) { - fe = e & 63 ? "Blocking" : e & 64 ? "Gesture" : e & 4194176 ? "Transition" : e & 62914560 ? "Suspense" : e & 2080374784 ? "Idle" : "Other"; - } - function Ot(e, n, o, i) { - Me && (bl.start = n, bl.end = o, si.color = "warning", si.tooltipText = i, si.properties = null, (e = e._debugTask) ? e.run(performance.measure.bind(performance, i, bl)) : performance.measure(i, bl)); - } - function _i(e, n, o) { - Ot(e, n, o, "Reconnect"); - } - function po(e, n, o, i, s) { - var u = G(e); - if (u !== null && Me) { - var f = e.alternate, p = e.actualDuration; - if (f === null || f.child !== e.child) for (var g = e.child; g !== null; g = g.sibling) p -= g.actualDuration; - i = .5 > p ? i ? "tertiary-light" : "primary-light" : 10 > p ? i ? "tertiary" : "primary" : 100 > p ? i ? "tertiary-dark" : "primary-dark" : "error"; - var S = e.memoizedProps; - p = e._debugTask, S !== null && f !== null && f.memoizedProps !== S ? (g = [Hb], S = fo(f.memoizedProps, S, g, 0), 1 < g.length && (S && !yl && (f.lanes & s) === 0 && 100 < e.actualDuration ? (yl = !0, g[0] = Ab, si.color = "warning", si.tooltipText = "This component received deeply equal props. It might benefit from useMemo or the React Compiler in its owner.") : (si.color = i, si.tooltipText = u), si.properties = g, bl.start = n, bl.end = o, p != null ? p.run(performance.measure.bind(performance, "​" + u, bl)) : performance.measure("​" + u, bl))) : p != null ? p.run(console.timeStamp.bind(console, u, n, o, "Components ⚛", void 0, i)) : console.timeStamp(u, n, o, "Components ⚛", void 0, i); - } - } - function Ri(e, n, o, i) { - if (Me) { - var s = G(e); - if (s !== null) { - for (var u = null, f = [], p = 0; p < i.length; p++) { - var g = i[p]; - u == null && g.source !== null && (u = g.source._debugTask), g = g.value, f.push(["Error", typeof g == "object" && g !== null && typeof g.message == "string" ? String(g.message) : String(g)]); - } - e.key !== null && ct("key", e.key, f, 0, ""), e.memoizedProps !== null && Dl(e.memoizedProps, f, 0, ""), u ??= e._debugTask, e = { - start: n, - end: o, - detail: { devtools: { - color: "error", - track: "Components ⚛", - tooltipText: e.tag === 13 ? "Hydration failed" : "Error boundary caught an error", - properties: f - } } - }, u ? u.run(performance.measure.bind(performance, "​" + s, e)) : performance.measure("​" + s, e); - } - } - } - function Un(e, n, o, i, s) { - if (s !== null) { - if (Me) { - var u = G(e); - if (u !== null) { - i = []; - for (var f = 0; f < s.length; f++) { - var p = s[f].value; - i.push(["Error", typeof p == "object" && p !== null && typeof p.message == "string" ? String(p.message) : String(p)]); - } - e.key !== null && ct("key", e.key, i, 0, ""), e.memoizedProps !== null && Dl(e.memoizedProps, i, 0, ""), n = { - start: n, - end: o, - detail: { devtools: { - color: "error", - track: "Components ⚛", - tooltipText: "A lifecycle or effect errored", - properties: i - } } - }, (e = e._debugTask) ? e.run(performance.measure.bind(performance, "​" + u, n)) : performance.measure("​" + u, n); - } - } - } else u = G(e), u !== null && Me && (s = 1 > i ? "secondary-light" : 100 > i ? "secondary" : 500 > i ? "secondary-dark" : "error", (e = e._debugTask) ? e.run(console.timeStamp.bind(console, u, n, o, "Components ⚛", void 0, s)) : console.timeStamp(u, n, o, "Components ⚛", void 0, s)); - } - function In(e, n, o, i) { - if (Me && !(n <= e)) { - var s = (o & 738197653) === o ? "tertiary-dark" : "primary-dark"; - o = (o & 536870912) === o ? "Prepared" : (o & 201326741) === o ? "Hydrated" : "Render", i ? i.run(console.timeStamp.bind(console, o, e, n, fe, "Scheduler ⚛", s)) : console.timeStamp(o, e, n, fe, "Scheduler ⚛", s); - } - } - function Wl(e, n, o, i) { - !Me || n <= e || (o = (o & 738197653) === o ? "tertiary-dark" : "primary-dark", i ? i.run(console.timeStamp.bind(console, "Prewarm", e, n, fe, "Scheduler ⚛", o)) : console.timeStamp("Prewarm", e, n, fe, "Scheduler ⚛", o)); - } - function Nd(e, n, o, i) { - !Me || n <= e || (o = (o & 738197653) === o ? "tertiary-dark" : "primary-dark", i ? i.run(console.timeStamp.bind(console, "Suspended", e, n, fe, "Scheduler ⚛", o)) : console.timeStamp("Suspended", e, n, fe, "Scheduler ⚛", o)); - } - function Fd(e, n, o, i, s, u) { - if (Me && !(n <= e)) { - o = []; - for (var f = 0; f < i.length; f++) { - var p = i[f].value; - o.push(["Recoverable Error", typeof p == "object" && p !== null && typeof p.message == "string" ? String(p.message) : String(p)]); - } - e = { - start: e, - end: n, - detail: { devtools: { - color: "primary-dark", - track: fe, - trackGroup: "Scheduler ⚛", - tooltipText: s ? "Hydration Failed" : "Recovered after Error", - properties: o - } } - }, u ? u.run(performance.measure.bind(performance, "Recovered", e)) : performance.measure("Recovered", e); - } - } - function Ra(e, n, o, i) { - !Me || n <= e || (i ? i.run(console.timeStamp.bind(console, "Errored", e, n, fe, "Scheduler ⚛", "error")) : console.timeStamp("Errored", e, n, fe, "Scheduler ⚛", "error")); - } - function bu(e, n, o, i) { - !Me || n <= e || (i ? i.run(console.timeStamp.bind(console, o, e, n, fe, "Scheduler ⚛", "secondary-light")) : console.timeStamp(o, e, n, fe, "Scheduler ⚛", "secondary-light")); - } - function ir(e, n, o, i, s) { - if (Me && !(n <= e)) { - for (var u = [], f = 0; f < o.length; f++) { - var p = o[f].value; - u.push(["Error", typeof p == "object" && p !== null && typeof p.message == "string" ? String(p.message) : String(p)]); - } - e = { - start: e, - end: n, - detail: { devtools: { - color: "error", - track: fe, - trackGroup: "Scheduler ⚛", - tooltipText: i ? "Remaining Effects Errored" : "Commit Errored", - properties: u - } } - }, s ? s.run(performance.measure.bind(performance, "Errored", e)) : performance.measure("Errored", e); - } - } - function Ea() {} - function Ip() { - if (Yf === 0) { - Gg = console.log, Jg = console.info, Zg = console.warn, Yg = console.error, Xg = console.group, Kg = console.groupCollapsed, ey = console.groupEnd; - var e = { - configurable: !0, - enumerable: !0, - value: Ea, - writable: !0 - }; - Object.defineProperties(console, { - info: e, - log: e, - warn: e, - error: e, - group: e, - groupCollapsed: e, - groupEnd: e - }); - } - Yf++; - } - function Lp() { - if (Yf--, Yf === 0) { - var e = { - configurable: !0, - enumerable: !0, - writable: !0 - }; - Object.defineProperties(console, { - log: ze({}, e, { value: Gg }), - info: ze({}, e, { value: Jg }), - warn: ze({}, e, { value: Zg }), - error: ze({}, e, { value: Yg }), - group: ze({}, e, { value: Xg }), - groupCollapsed: ze({}, e, { value: Kg }), - groupEnd: ze({}, e, { value: ey }) - }); - } - 0 > Yf && console.error("disabledDepth fell below zero. This is a bug in React. Please file an issue."); - } - function vu(e) { - var n = Error.prepareStackTrace; - if (Error.prepareStackTrace = void 0, e = e.stack, Error.prepareStackTrace = n, e.startsWith(`Error: react-stack-top-frame -`) && (e = e.slice(29)), n = e.indexOf(` -`), n !== -1 && (e = e.slice(n + 1)), n = e.indexOf("react_stack_bottom_frame"), n !== -1 && (n = e.lastIndexOf(` -`, n)), n !== -1) e = e.slice(0, n); - else return ""; - return e; - } - function dt(e) { - if (Km === void 0) try { - throw Error(); - } catch (o) { - var n = o.stack.trim().match(/\n( *(at )?)/); - Km = n && n[1] || "", ny = -1 < o.stack.indexOf(` - at`) ? " (<anonymous>)" : -1 < o.stack.indexOf("@") ? "@unknown:0:0" : ""; - } - return ` -` + Km + e + ny; - } - function Su(e, n) { - if (!e || eg) return ""; - var o = ng.get(e); - if (o !== void 0) return o; - eg = !0, o = Error.prepareStackTrace, Error.prepareStackTrace = void 0; - var i = null; - i = x.H, x.H = null, Ip(); - try { - var s = { DetermineComponentFrameRoot: function() { - try { - if (n) { - var I = function() { - throw Error(); - }; - if (Object.defineProperty(I.prototype, "props", { set: function() { - throw Error(); - } }), typeof Reflect == "object" && Reflect.construct) { - try { - Reflect.construct(I, []); - } catch (K) { - var O = K; - } - Reflect.construct(e, [], I); - } else { - try { - I.call(); - } catch (K) { - O = K; - } - e.call(I.prototype); - } - } else { - try { - throw Error(); - } catch (K) { - O = K; - } - (I = e()) && typeof I.catch == "function" && I.catch(function() {}); - } - } catch (K) { - if (K && O && typeof K.stack == "string") return [K.stack, O.stack]; - } - return [null, null]; - } }; - s.DetermineComponentFrameRoot.displayName = "DetermineComponentFrameRoot"; - var u = Object.getOwnPropertyDescriptor(s.DetermineComponentFrameRoot, "name"); - u && u.configurable && Object.defineProperty(s.DetermineComponentFrameRoot, "name", { value: "DetermineComponentFrameRoot" }); - var f = s.DetermineComponentFrameRoot(), p = f[0], g = f[1]; - if (p && g) { - var S = p.split(` -`), T = g.split(` -`); - for (f = u = 0; u < S.length && !S[u].includes("DetermineComponentFrameRoot");) u++; - for (; f < T.length && !T[f].includes("DetermineComponentFrameRoot");) f++; - if (u === S.length || f === T.length) for (u = S.length - 1, f = T.length - 1; 1 <= u && 0 <= f && S[u] !== T[f];) f--; - for (; 1 <= u && 0 <= f; u--, f--) if (S[u] !== T[f]) { - if (u !== 1 || f !== 1) do - if (u--, f--, 0 > f || S[u] !== T[f]) { - var _ = ` -` + S[u].replace(" at new ", " at "); - return e.displayName && _.includes("<anonymous>") && (_ = _.replace("<anonymous>", e.displayName)), typeof e == "function" && ng.set(e, _), _; - } - while (1 <= u && 0 <= f); - break; - } - } - } finally { - eg = !1, x.H = i, Lp(), Error.prepareStackTrace = o; - } - return S = (S = e ? e.displayName || e.name : "") ? dt(S) : "", typeof e == "function" && ng.set(e, S), S; - } - function Lm(e, n) { - switch (e.tag) { - case 26: - case 27: - case 5: return dt(e.type); - case 16: return dt("Lazy"); - case 13: return e.child !== n && n !== null ? dt("Suspense Fallback") : dt("Suspense"); - case 19: return dt("SuspenseList"); - case 0: - case 15: return Su(e.type, !1); - case 11: return Su(e.type.render, !1); - case 1: return Su(e.type, !0); - case 31: return dt("Activity"); - default: return ""; - } - } - function ku(e) { - try { - var n = "", o = null; - do { - n += Lm(e, o); - var i = e._debugInfo; - if (i) for (var s = i.length - 1; 0 <= s; s--) { - var u = i[s]; - if (typeof u.name == "string") { - var f = n; - e: { - var p = u.name, g = u.env, S = u.debugLocation; - if (S != null) { - var T = vu(S), _ = T.lastIndexOf(` -`), I = _ === -1 ? T : T.slice(_ + 1); - if (I.indexOf(p) !== -1) { - var O = ` -` + I; - break e; - } - } - O = dt(p + (g ? " [" + g + "]" : "")); - } - n = f + O; - } - } - o = e, e = e.return; - } while (e); - return n; - } catch (K) { - return ` -Error generating stack: ` + K.message + ` -` + K.stack; - } - } - function Np(e) { - return (e = e ? e.displayName || e.name : "") ? dt(e) : ""; - } - function ft(e, n) { - if (typeof e == "object" && e !== null) { - var o = tg.get(e); - return o !== void 0 ? o : (n = { - value: e, - source: n, - stack: ku(n) - }, tg.set(e, n), n); - } - return { - value: e, - source: n, - stack: ku(n) - }; - } - function ho(e, n) { - mo(), rd[od++] = Xf, rd[od++] = Vh, Vh = e, Xf = n; - } - function wu(e, n, o) { - mo(), to[ro++] = ui, to[ro++] = ci, to[ro++] = Gs, Gs = e; - var i = ui; - e = ci; - var s = 32 - vn(i) - 1; - i &= ~(1 << s), o += 1; - var u = 32 - vn(n) + s; - if (30 < u) { - var f = s - s % 5; - u = (i & (1 << f) - 1).toString(32), i >>= f, s -= f, ui = 1 << 32 - vn(n) + s | o << s | i, ci = u + e; - } else ui = 1 << u | o << s | i, ci = e; - } - function Ei(e) { - mo(), e.return !== null && (ho(e, 1), wu(e, 1, 0)); - } - function Pu(e) { - for (; e === Vh;) Vh = rd[--od], rd[od] = null, Xf = rd[--od], rd[od] = null; - for (; e === Gs;) Gs = to[--ro], to[ro] = null, ci = to[--ro], to[ro] = null, ui = to[--ro], to[ro] = null; - } - function Ul() { - return mo(), Gs !== null ? { - id: ui, - overflow: ci - } : null; - } - function Hd(e, n) { - mo(), to[ro++] = ui, to[ro++] = ci, to[ro++] = Gs, ui = n.id, ci = n.overflow, Gs = e; - } - function mo() { - ge || console.error("Expected to be hydrating. This is a bug in React. Please file an issue."); - } - function pt(e) { - return e === null && console.error("Expected host context to exist. This error is likely caused by a bug in React. Please file an issue."), e; - } - function Bl(e, n) { - pe(Sl, n, e), pe(Kf, e, e), pe(vl, null, e), n = Zr(n), Ze(vl, e), pe(vl, n, e); - } - function Ia(e) { - Ze(vl, e), Ze(Kf, e), Ze(Sl, e); - } - function Rt() { - return pt(vl.current); - } - function La(e) { - e.memoizedState !== null && pe(qh, e, e); - var n = pt(vl.current), o = Dn(n, e.type); - n !== o && (pe(Kf, e, e), pe(vl, o, e)); - } - function Na(e) { - Kf.current === e && (Ze(vl, e), Ze(Kf, e)), qh.current === e && (Ze(qh, e), at ? Kt._currentValue = Xt : Kt._currentValue2 = Xt); - } - function Ad(e, n) { - return e.serverProps === void 0 && e.serverTail.length === 0 && e.children.length === 1 && 3 < e.distanceFromLeaf && e.distanceFromLeaf > 15 - n ? Ad(e.children[0], n) : e; - } - function Bn(e) { - return " " + " ".repeat(e); - } - function go(e) { - return "+ " + " ".repeat(e); - } - function yo(e) { - return "- " + " ".repeat(e); - } - function Ko(e) { - switch (e.tag) { - case 26: - case 27: - case 5: return e.type; - case 16: return "Lazy"; - case 31: return "Activity"; - case 13: return "Suspense"; - case 19: return "SuspenseList"; - case 0: - case 15: return e = e.type, e.displayName || e.name || null; - case 11: return e = e.type.render, e.displayName || e.name || null; - case 1: return e = e.type, e.displayName || e.name || null; - default: return null; - } - } - function Ii(e, n) { - return ty.test(e) ? (e = JSON.stringify(e), e.length > n - 2 ? 8 > n ? "{\"...\"}" : "{" + e.slice(0, n - 7) + "...\"}" : "{" + e + "}") : e.length > n ? 5 > n ? "{\"...\"}" : e.slice(0, n - 3) + "..." : e; - } - function Fa(e, n, o) { - var i = 120 - 2 * o; - if (n === null) return go(o) + Ii(e, i) + ` -`; - if (typeof n == "string") { - for (var s = 0; s < n.length && s < e.length && n.charCodeAt(s) === e.charCodeAt(s); s++); - return s > i - 8 && 10 < s && (e = "..." + e.slice(s - 8), n = "..." + n.slice(s - 8)), go(o) + Ii(e, i) + ` -` + yo(o) + Ii(n, i) + ` -`; - } - return Bn(o) + Ii(e, i) + ` -`; - } - function Ol(e) { - return Object.prototype.toString.call(e).replace(/^\[object (.*)\]$/, function(n, o) { - return o; - }); - } - function Ha(e, n) { - switch (typeof e) { - case "string": return e = JSON.stringify(e), e.length > n ? 5 > n ? "\"...\"" : e.slice(0, n - 4) + "...\"" : e; - case "object": - if (e === null) return "null"; - if (fn(e)) return "[...]"; - if (e.$$typeof === Ho) return (n = $e(e.type)) ? "<" + n + ">" : "<...>"; - var o = Ol(e); - if (o === "Object") { - o = "", n -= 2; - for (var i in e) if (e.hasOwnProperty(i)) { - var s = JSON.stringify(i); - if (s !== "\"" + i + "\"" && (i = s), n -= i.length - 2, s = Ha(e[i], 15 > n ? n : 15), n -= s.length, 0 > n) { - o += o === "" ? "..." : ", ..."; - break; - } - o += (o === "" ? "" : ",") + i + ":" + s; - } - return "{" + o + "}"; - } - return o; - case "function": return (n = e.displayName || e.name) ? "function " + n : "function"; - default: return String(e); - } - } - function Et(e, n) { - return typeof e != "string" || ty.test(e) ? "{" + Ha(e, n - 2) + "}" : e.length > n - 2 ? 5 > n ? "\"...\"" : "\"" + e.slice(0, n - 5) + "...\"" : "\"" + e + "\""; - } - function Nr(e, n, o) { - var i = 120 - o.length - e.length, s = [], u; - for (u in n) if (n.hasOwnProperty(u) && u !== "children") { - var f = Et(n[u], 120 - o.length - u.length - 1); - i -= u.length + f.length + 2, s.push(u + "=" + f); - } - return s.length === 0 ? o + "<" + e + `> -` : 0 < i ? o + "<" + e + " " + s.join(" ") + `> -` : o + "<" + e + ` -` + o + " " + s.join(` -` + o + " ") + ` -` + o + `> -`; - } - function Ml(e, n, o) { - var i = "", s = ze({}, n), u; - for (u in e) if (e.hasOwnProperty(u)) { - delete s[u]; - var f = 120 - 2 * o - u.length - 2, p = Ha(e[u], f); - n.hasOwnProperty(u) ? (f = Ha(n[u], f), i += go(o) + u + ": " + p + ` -`, i += yo(o) + u + ": " + f + ` -`) : i += go(o) + u + ": " + p + ` -`; - } - for (var g in s) s.hasOwnProperty(g) && (e = Ha(s[g], 120 - 2 * o - g.length - 2), i += yo(o) + g + ": " + e + ` -`); - return i; - } - function jd(e, n, o, i) { - var s = "", u = /* @__PURE__ */ new Map(); - for (S in o) o.hasOwnProperty(S) && u.set(S.toLowerCase(), S); - if (u.size === 1 && u.has("children")) s += Nr(e, n, Bn(i)); - else { - for (var f in n) if (n.hasOwnProperty(f) && f !== "children") { - var p = 120 - 2 * (i + 1) - f.length - 1, g = u.get(f.toLowerCase()); - if (g !== void 0) { - u.delete(f.toLowerCase()); - var S = n[f]; - g = o[g]; - var T = Et(S, p); - p = Et(g, p), typeof S == "object" && S !== null && typeof g == "object" && g !== null && Ol(S) === "Object" && Ol(g) === "Object" && (2 < Object.keys(S).length || 2 < Object.keys(g).length || -1 < T.indexOf("...") || -1 < p.indexOf("...")) ? s += Bn(i + 1) + f + `={{ -` + Ml(S, g, i + 2) + Bn(i + 1) + `}} -` : (s += go(i + 1) + f + "=" + T + ` -`, s += yo(i + 1) + f + "=" + p + ` -`); - } else s += Bn(i + 1) + f + "=" + Et(n[f], p) + ` -`; - } - u.forEach(function(_) { - if (_ !== "children") { - var I = 120 - 2 * (i + 1) - _.length - 1; - s += yo(i + 1) + _ + "=" + Et(o[_], I) + ` -`; - } - }), s = s === "" ? Bn(i) + "<" + e + `> -` : Bn(i) + "<" + e + ` -` + s + Bn(i) + `> -`; - } - return e = o.children, n = n.children, typeof e == "string" || typeof e == "number" || typeof e == "bigint" ? (u = "", (typeof n == "string" || typeof n == "number" || typeof n == "bigint") && (u = "" + n), s += Fa(u, "" + e, i + 1)) : (typeof n == "string" || typeof n == "number" || typeof n == "bigint") && (s = e == null ? s + Fa("" + n, null, i + 1) : s + Fa("" + n, void 0, i + 1)), s; - } - function Li(e, n) { - var o = Ko(e); - if (o === null) { - for (o = "", e = e.child; e;) o += Li(e, n), e = e.sibling; - return o; - } - return Bn(n) + "<" + o + `> -`; - } - function Aa(e, n) { - var o = Ad(e, n); - if (o !== e && (e.children.length !== 1 || e.children[0] !== o)) return Bn(n) + `... -` + Aa(o, n + 1); - o = ""; - var i = e.fiber._debugInfo; - if (i) for (var s = 0; s < i.length; s++) { - var u = i[s].name; - typeof u == "string" && (o += Bn(n) + "<" + u + `> -`, n++); - } - if (i = "", s = e.fiber.pendingProps, e.fiber.tag === 6) i = Fa(s, e.serverProps, n), n++; - else if (u = Ko(e.fiber), u !== null) if (e.serverProps === void 0) { - i = n; - var f = 120 - 2 * i - u.length - 2, p = ""; - for (S in s) if (s.hasOwnProperty(S) && S !== "children") { - var g = Et(s[S], 15); - if (f -= S.length + g.length + 2, 0 > f) { - p += " ..."; - break; - } - p += " " + S + "=" + g; - } - i = Bn(i) + "<" + u + p + `> -`, n++; - } else e.serverProps === null ? (i = Nr(u, s, go(n)), n++) : typeof e.serverProps == "string" ? console.error("Should not have matched a non HostText fiber to a Text node. This is a bug in React.") : (i = jd(u, s, e.serverProps, n), n++); - var S = ""; - for (s = e.fiber.child, u = 0; s && u < e.children.length;) f = e.children[u], f.fiber === s ? (S += Aa(f, n), u++) : S += Li(s, n), s = s.sibling; - for (s && 0 < e.children.length && (S += Bn(n) + `... -`), s = e.serverTail, e.serverProps === null && n--, e = 0; e < s.length; e++) u = s[e], S = typeof u == "string" ? S + (yo(n) + Ii(u, 120 - 2 * n) + ` -`) : S + Nr(u.type, u.props, yo(n)); - return o + i + S; - } - function Dd(e) { - try { - return ` - -` + Aa(e, 0); - } catch { - return ""; - } - } - function Fp() { - if (di === null) return ""; - var e = di; - try { - var n = ""; - switch (e.tag === 6 && (e = e.return), e.tag) { - case 26: - case 27: - case 5: - n += dt(e.type); - break; - case 13: - n += dt("Suspense"); - break; - case 19: - n += dt("SuspenseList"); - break; - case 31: - n += dt("Activity"); - break; - case 30: - case 0: - case 15: - case 1: - e._debugOwner || n !== "" || (n += Np(e.type)); - break; - case 11: e._debugOwner || n !== "" || (n += Np(e.type.render)); - } - for (; e;) if (typeof e.tag == "number") { - var o = e; - e = o._debugOwner; - var i = o._debugStack; - if (e && i) { - var s = vu(i); - s !== "" && (n += ` -` + s); - } - } else if (e.debugStack != null) { - var u = e.debugStack; - (e = e.owner) && u && (n += ` -` + vu(u)); - } else break; - var f = n; - } catch (p) { - f = ` -Error generating stack: ` + p.message + ` -` + p.stack; - } - return f; - } - function B(e, n, o, i, s, u, f) { - var p = di; - Ql(e); - try { - return e !== null && e._debugTask ? e._debugTask.run(n.bind(null, o, i, s, u, f)) : n(o, i, s, u, f); - } finally { - Ql(p); - } - throw Error("runWithFiberInDEV should never be called in production. This is a bug in React."); - } - function Ql(e) { - x.getCurrentStack = e === null ? null : Fp, Pa = !1, di = e; - } - function bo(e, n) { - if (e.return === null) { - if (Tr === null) Tr = { - fiber: e, - children: [], - serverProps: void 0, - serverTail: [], - distanceFromLeaf: n - }; - else { - if (Tr.fiber !== e) throw Error("Saw multiple hydration diff roots in a pass. This is a bug in React."); - Tr.distanceFromLeaf > n && (Tr.distanceFromLeaf = n); - } - return Tr; - } - var o = bo(e.return, n + 1).children; - return 0 < o.length && o[o.length - 1].fiber === e ? (o = o[o.length - 1], o.distanceFromLeaf > n && (o.distanceFromLeaf = n), o) : (n = { - fiber: e, - children: [], - serverProps: void 0, - serverTail: [], - distanceFromLeaf: n - }, o.push(n), n); - } - function vo() { - ge && console.error("We should not be hydrating here. This is a bug in React. Please file a bug."); - } - function Ni(e, n) { - xa || (e = bo(e, 0), e.serverProps = null, n !== null && (n = ml(n), e.serverTail.push(n))); - } - function Fr(e) { - var n = 1 < arguments.length && arguments[1] !== void 0 ? arguments[1] : !1, o = "", i = Tr; - throw i !== null && (Tr = null, o = Dd(i)), Fi(ft(Error("Hydration failed because the server rendered " + (n ? "text" : "HTML") + ` didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used: - -- A server/client branch \`if (typeof window !== 'undefined')\`. -- Variable input such as \`Date.now()\` or \`Math.random()\` which changes each time it's called. -- Date formatting in a user's locale which doesn't match the server. -- External changing data without sending a snapshot of it along with the HTML. -- Invalid HTML tag nesting. - -It can also happen if the client has a browser extension installed which messes with the HTML before React loaded. - -https://react.dev/link/hydration-mismatch` + o), e)), rg; - } - function So(e, n) { - if (!qn) throw Error("Expected prepareToHydrateHostInstance() to never be called. This error is likely caused by a bug in React. Please file an issue."); - de(e.stateNode, e.type, e.memoizedProps, n, e) || Fr(e, !0); - } - function ht(e) { - for (it = e.return; it;) switch (it.tag) { - case 5: - case 31: - case 13: - oo = !1; - return; - case 27: - case 3: - oo = !0; - return; - default: it = it.return; - } - } - function ko(e) { - if (!qn || e !== it) return !1; - if (!ge) return ht(e), ge = !0, !1; - var n = e.tag; - if (d ? n !== 3 && n !== 27 && (n !== 5 || Yc(e.type) && !ue(e.type, e.memoizedProps)) && Ke && (Ve(e), Fr(e)) : n !== 3 && (n !== 5 || Yc(e.type) && !ue(e.type, e.memoizedProps)) && Ke && (Ve(e), Fr(e)), ht(e), n === 13) { - if (!qn) throw Error("Expected skipPastDehydratedSuspenseInstance() to never be called. This error is likely caused by a bug in React. Please file an issue."); - if (e = e.memoizedState, e = e !== null ? e.dehydrated : null, !e) throw Error("Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue."); - Ke = ai(e); - } else if (n === 31) { - if (e = e.memoizedState, e = e !== null ? e.dehydrated : null, !e) throw Error("Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue."); - Ke = ya(e); - } else Ke = d && n === 27 ? Zm(e.type, Ke) : it ? ga(e.stateNode) : null; - return !0; - } - function Ve(e) { - for (var n = Ke; n;) { - var o = bo(e, 0), i = ml(n); - o.serverTail.push(i), n = i.type === "Suspense" ? ai(n) : ga(n); - } - } - function wo() { - qn && (Ke = it = null, xa = ge = !1); - } - function $l() { - var e = kl; - return e !== null && (Bt === null ? Bt = e : Bt.push.apply(Bt, e), kl = null), e; - } - function Fi(e) { - kl === null ? kl = [e] : kl.push(e); - } - function xu() { - var e = Tr; - if (e !== null) { - Tr = null; - for (var n = Dd(e); 0 < e.children.length;) e = e.children[0]; - B(e.fiber, function() { - console.error(`A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used: - -- A server/client branch \`if (typeof window !== 'undefined')\`. -- Variable input such as \`Date.now()\` or \`Math.random()\` which changes each time it's called. -- Date formatting in a user's locale which doesn't match the server. -- External changing data without sending a snapshot of it along with the HTML. -- Invalid HTML tag nesting. - -It can also happen if the client has a browser extension installed which messes with the HTML before React loaded. - -%s%s`, "https://react.dev/link/hydration-mismatch", n); - }); - } - } - function zu() { - ad = Zh = null, id = !1; - } - function Hr(e, n, o) { - at ? (pe(Gh, n._currentValue, e), n._currentValue = o, pe(og, n._currentRenderer, e), n._currentRenderer !== void 0 && n._currentRenderer !== null && n._currentRenderer !== Jh && console.error("Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."), n._currentRenderer = Jh) : (pe(Gh, n._currentValue2, e), n._currentValue2 = o, pe(ag, n._currentRenderer2, e), n._currentRenderer2 !== void 0 && n._currentRenderer2 !== null && n._currentRenderer2 !== Jh && console.error("Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported."), n._currentRenderer2 = Jh); - } - function lr(e, n) { - var o = Gh.current; - at ? (e._currentValue = o, o = og.current, Ze(og, n), e._currentRenderer = o) : (e._currentValue2 = o, o = ag.current, Ze(ag, n), e._currentRenderer2 = o), Ze(Gh, n); - } - function Vl(e, n, o) { - for (; e !== null;) { - var i = e.alternate; - if ((e.childLanes & n) !== n ? (e.childLanes |= n, i !== null && (i.childLanes |= n)) : i !== null && (i.childLanes & n) !== n && (i.childLanes |= n), e === o) break; - e = e.return; - } - e !== o && console.error("Expected to find the propagation root when scheduling context work. This error is likely caused by a bug in React. Please file an issue."); - } - function Ln(e, n, o, i) { - var s = e.child; - for (s !== null && (s.return = e); s !== null;) { - var u = s.dependencies; - if (u !== null) { - var f = s.child; - u = u.firstContext; - e: for (; u !== null;) { - var p = u; - u = s; - for (var g = 0; g < n.length; g++) if (p.context === n[g]) { - u.lanes |= o, p = u.alternate, p !== null && (p.lanes |= o), Vl(u.return, o, e), i || (f = null); - break e; - } - u = p.next; - } - } else if (s.tag === 18) { - if (f = s.return, f === null) throw Error("We just came from a parent so we must have had a parent. This is a bug in React."); - f.lanes |= o, u = f.alternate, u !== null && (u.lanes |= o), Vl(f, o, e), f = null; - } else f = s.child; - if (f !== null) f.return = s; - else for (f = s; f !== null;) { - if (f === e) { - f = null; - break; - } - if (s = f.sibling, s !== null) { - s.return = f.return, f = s; - break; - } - f = f.return; - } - s = f; - } - } - function He(e, n, o, i) { - e = null; - for (var s = n, u = !1; s !== null;) { - if (!u) { - if ((s.flags & 524288) !== 0) u = !0; - else if ((s.flags & 262144) !== 0) break; - } - if (s.tag === 10) { - var f = s.alternate; - if (f === null) throw Error("Should have a current fiber. This is a bug in React."); - if (f = f.memoizedProps, f !== null) { - var p = s.type; - jt(s.pendingProps.value, f.value) || (e !== null ? e.push(p) : e = [p]); - } - } else if (s === qh.current) { - if (f = s.alternate, f === null) throw Error("Should have a current fiber. This is a bug in React."); - f.memoizedState.memoizedState !== s.memoizedState.memoizedState && (e !== null ? e.push(Kt) : e = [Kt]); - } - s = s.return; - } - e !== null && Ln(n, e, o, i), n.flags |= 262144; - } - function ja(e) { - for (e = e.firstContext; e !== null;) { - var n = e.context; - if (!jt(at ? n._currentValue : n._currentValue2, e.memoizedValue)) return !0; - e = e.next; - } - return !1; - } - function sr(e) { - Zh = e, ad = null, e = e.dependencies, e !== null && (e.firstContext = null); - } - function Ee(e) { - return id && console.error("Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()."), Ar(Zh, e); - } - function Hi(e, n) { - return Zh === null && sr(e), Ar(e, n); - } - function Ar(e, n) { - var o = at ? n._currentValue : n._currentValue2; - if (n = { - context: n, - memoizedValue: o, - next: null - }, ad === null) { - if (e === null) throw Error("Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo()."); - ad = n, e.dependencies = { - lanes: 0, - firstContext: n, - _debugThenableState: null - }, e.flags |= 524288; - } else ad = ad.next = n; - return o; - } - function Ai() { - return { - controller: new jb(), - data: /* @__PURE__ */ new Map(), - refCount: 0 - }; - } - function Po(e) { - e.controller.signal.aborted && console.warn("A cache instance was retained after it was already freed. This likely indicates a bug in React."), e.refCount++; - } - function Da(e) { - e.refCount--, 0 > e.refCount && console.warn("A cache instance was released after it was already freed. This likely indicates a bug in React."), e.refCount === 0 && Db(Wb, function() { - e.controller.abort(); - }); - } - function ur(e, n, o) { - (e & 127) !== 0 ? 0 > za && (za = xn(), ep = Yh(n), ig = n, o != null && (lg = G(o)), Ns() && (cn = !0, Pl = 1), e = Pr(), n = ti(), e !== ld || n !== np ? ld = -1.1 : n !== null && (Pl = 1), Ys = e, np = n) : e & 4194048 && 0 > ao && (ao = xn(), tp = Yh(n), ry = n, o != null && (oy = G(o)), 0 > mi) && (e = Pr(), n = ti(), (e !== zl || n !== Xs) && (zl = -1.1), xl = e, Xs = n); - } - function Hp(e) { - if (0 > za) { - za = xn(), ep = e._debugTask != null ? e._debugTask : null, Ns() && (Pl = 1); - var n = Pr(), o = ti(); - n !== ld || o !== np ? ld = -1.1 : o !== null && (Pl = 1), Ys = n, np = o; - } - 0 > ao && (ao = xn(), tp = e._debugTask != null ? e._debugTask : null, 0 > mi) && (e = Pr(), n = ti(), (e !== zl || n !== Xs) && (zl = -1.1), xl = e, Xs = n); - } - function jr() { - var e = Js; - return Js = 0, e; - } - function ql(e) { - var n = Js; - return Js = e, n; - } - function ji(e) { - var n = Js; - return Js += e, n; - } - function Gl() { - q = $ = -1.1; - } - function Xn() { - var e = $; - return $ = -1.1, e; - } - function mt(e) { - 0 <= e && ($ = e); - } - function Dr() { - var e = en; - return en = -0, e; - } - function cr(e) { - 0 <= e && (en = e); - } - function dr() { - var e = Je; - return Je = null, e; - } - function fr() { - var e = cn; - return cn = !1, e; - } - function Jl(e) { - Dt = xn(), 0 > e.actualStartTime && (e.actualStartTime = Dt); - } - function Cu(e) { - if (0 <= Dt) { - var n = xn() - Dt; - e.actualDuration += n, e.selfBaseDuration = n, Dt = -1; - } - } - function Wd(e) { - if (0 <= Dt) { - var n = xn() - Dt; - e.actualDuration += n, Dt = -1; - } - } - function pr() { - if (0 <= Dt) { - var e = xn(), n = e - Dt; - Dt = -1, Js += n, en += n, q = e; - } - } - function Ud(e) { - Je === null && (Je = []), Je.push(e), pi === null && (pi = []), pi.push(e); - } - function hr() { - Dt = xn(), 0 > $ && ($ = Dt); - } - function Zl(e) { - for (var n = e.child; n;) e.actualDuration += n.actualDuration, n = n.sibling; - } - function Yl() {} - function Kn(e) { - e !== ud && e.next === null && (ud === null ? tm = ud = e : ud = ud.next = e), rm = !0, x.actQueue !== null ? cg || (cg = !0, Od()) : ug || (ug = !0, Od()); - } - function Wa(e, n) { - if (!dg && rm) { - dg = !0; - do - for (var o = !1, i = tm; i !== null;) { - if (!n) if (e !== 0) { - var s = i.pendingLanes; - if (s === 0) var u = 0; - else { - var f = i.suspendedLanes, p = i.pingedLanes; - u = (1 << 31 - vn(42 | e) + 1) - 1, u &= s & ~(f & ~p), u = u & 201326741 ? u & 201326741 | 1 : u ? u | 2 : 0; - } - u !== 0 && (o = !0, Ap(i, u)); - } else u = ae, u = zi(i, i === je ? u : 0, i.cancelPendingCommit !== null || i.timeoutHandle !== Yr), !(u & 3) || Hl(i, u) || (o = !0, Ap(i, u)); - i = i.next; - } - while (o); - dg = !1; - } - } - function Xl() { - ll(), Di(); - } - function Di() { - rm = cg = ug = !1; - var e = 0; - Ks !== 0 && Us() && (e = Ks); - for (var n = me(), o = null, i = tm; i !== null;) { - var s = i.next, u = Bd(i, n); - u === 0 ? (i.next = null, o === null ? tm = s : o.next = s, s === null && (ud = o)) : (o = i, (e !== 0 || u & 3) && (rm = !0)), i = s; - } - Rn !== Ll && Rn !== Cm || Wa(e, !1), Ks !== 0 && (Ks = 0); - } - function Bd(e, n) { - for (var o = e.suspendedLanes, i = e.pingedLanes, s = e.expirationTimes, u = e.pendingLanes & -62914561; 0 < u;) { - var f = 31 - vn(u), p = 1 << f, g = s[f]; - g === -1 ? ((p & o) === 0 || (p & i) !== 0) && (s[f] = Rp(p, n)) : g <= n && (e.expiredLanes |= p), u &= ~p; - } - if (n = je, o = ae, o = zi(e, e === n ? o : 0, e.cancelPendingCommit !== null || e.timeoutHandle !== Yr), i = e.callbackNode, o === 0 || e === n && (Le === lu || Le === su) || e.cancelPendingCommit !== null) return i !== null && _u(i), e.callbackNode = null, e.callbackPriority = 0; - if ((o & 3) === 0 || Hl(e, o)) { - if (n = o & -o, n !== e.callbackPriority || x.actQueue !== null && i !== fg) _u(i); - else return n; - switch (ar(o)) { - case 2: - case 8: - o = Oo; - break; - case 32: - o = qs; - break; - case 268435456: - o = Qg; - break; - default: o = qs; - } - return i = Tu.bind(null, e), x.actQueue !== null ? (x.actQueue.push(i), o = fg) : o = Q(o, i), e.callbackPriority = n, e.callbackNode = o, n; - } - return i !== null && _u(i), e.callbackPriority = 2, e.callbackNode = null, 2; - } - function Tu(e, n) { - if (nm = em = !1, ll(), Rn !== Ll && Rn !== Cm) return e.callbackNode = null, e.callbackPriority = 0, null; - var o = e.callbackNode; - if (Go === zm && (Go = Ag), el() && e.callbackNode !== o) return null; - var i = ae; - return i = zi(e, e === je ? i : 0, e.cancelPendingCommit !== null || e.timeoutHandle !== Yr), i === 0 ? null : (Lf(e, i, n), Bd(e, me()), e.callbackNode != null && e.callbackNode === o ? Tu.bind(null, e) : null); - } - function Ap(e, n) { - if (el()) return null; - em = nm, nm = !1, Lf(e, n, !0); - } - function _u(e) { - e !== fg && e !== null && Ge(e); - } - function Od() { - x.actQueue !== null && x.actQueue.push(function() { - return Di(), null; - }), Oh ? er(function() { - (ye & (Zn | uo)) !== Jn ? Q(be, Xl) : Di(); - }) : Q(be, Xl); - } - function Ru() { - if (Ks === 0) { - var e = eu; - e === 0 && (e = w, w <<= 1, !(w & 261888) && (w = 256)), Ks = e; - } - return Ks; - } - function jp(e, n) { - if (op === null) { - var o = op = []; - pg = 0, eu = Ru(), cd = { - status: "pending", - value: void 0, - then: function(i) { - o.push(i); - } - }; - } - return pg++, n.then(Md, Md), n; - } - function Md() { - if (--pg === 0 && (-1 < ao || (mi = -1.1), op !== null)) { - cd !== null && (cd.status = "fulfilled"); - var e = op; - op = null, eu = 0, cd = null; - for (var n = 0; n < e.length; n++) (0, e[n])(); - } - } - function Qd(e, n) { - var o = [], i = { - status: "pending", - value: null, - reason: null, - then: function(s) { - o.push(s); - } - }; - return e.then(function() { - i.status = "fulfilled", i.value = n; - for (var s = 0; s < o.length; s++) (0, o[s])(n); - }, function(s) { - for (i.status = "rejected", i.reason = s, s = 0; s < o.length; s++) (0, o[s])(void 0); - }), i; - } - function Eu() { - var e = nu.current; - return e !== null ? e : je.pooledCache; - } - function Kl(e, n) { - n === null ? pe(nu, nu.current, e) : pe(nu, n.pool, e); - } - function Iu() { - var e = Eu(); - return e === null ? null : { - parent: at ? un._currentValue : un._currentValue2, - pool: e - }; - } - function es(e, n) { - if (jt(e, n)) return !0; - if (typeof e != "object" || e === null || typeof n != "object" || n === null) return !1; - var o = Object.keys(e), i = Object.keys(n); - if (o.length !== i.length) return !1; - for (i = 0; i < o.length; i++) { - var s = o[i]; - if (!Xm.call(n, s) || !jt(e[s], n[s])) return !1; - } - return !0; - } - function $d() { - return { - didWarnAboutUncachedPromise: !1, - thenables: [] - }; - } - function Vd(e) { - return e = e.status, e === "fulfilled" || e === "rejected"; - } - function Lu(e, n, o) { - x.actQueue !== null && (x.didUsePromise = !0); - var i = e.thenables; - if (o = i[o], o === void 0 ? i.push(n) : o !== n && (e.didWarnAboutUncachedPromise || (e.didWarnAboutUncachedPromise = !0, console.error("A component was suspended by an uncached promise. Creating promises inside a Client Component or hook is not yet supported, except via a Suspense-compatible library or framework.")), n.then(Yl, Yl), n = o), n._debugInfo === void 0) { - e = performance.now(), i = n.displayName; - var s = { - name: typeof i == "string" ? i : "Promise", - start: e, - end: e, - value: n - }; - n._debugInfo = [{ awaited: s }], n.status !== "fulfilled" && n.status !== "rejected" && (e = function() { - s.end = performance.now(); - }, n.then(e, e)); - } - switch (n.status) { - case "fulfilled": return n.value; - case "rejected": throw e = n.reason, Dp(e), e; - default: - if (typeof n.status == "string") n.then(Yl, Yl); - else { - if (e = je, e !== null && 100 < e.shellSuspendCounter) throw Error("An unknown Component is an async Client Component. Only Server Components can be async at the moment. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server."); - e = n, e.status = "pending", e.then(function(u) { - if (n.status === "pending") { - var f = n; - f.status = "fulfilled", f.value = u; - } - }, function(u) { - if (n.status === "pending") { - var f = n; - f.status = "rejected", f.reason = u; - } - }); - } - switch (n.status) { - case "fulfilled": return n.value; - case "rejected": throw e = n.reason, Dp(e), e; - } - throw ru = n, dp = !0, dd; - } - } - function xo(e) { - try { - return Mb(e); - } catch (n) { - throw n !== null && typeof n == "object" && typeof n.then == "function" ? (ru = n, dp = !0, dd) : n; - } - } - function qd() { - if (ru === null) throw Error("Expected a suspended thenable. This is a bug in React. Please file an issue."); - var e = ru; - return ru = null, dp = !1, e; - } - function Dp(e) { - if (e === dd || e === am) throw Error("Hooks are not supported inside an async component. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server."); - } - function Nn(e) { - var n = oe; - return e != null && (oe = n === null ? e : n.concat(e)), n; - } - function Nu() { - var e = oe; - if (e != null) { - for (var n = e.length - 1; 0 <= n; n--) if (e[n].name != null) { - var o = e[n].debugTask; - if (o != null) return o; - } - } - return null; - } - function ea(e, n, o) { - for (var i = Object.keys(e.props), s = 0; s < i.length; s++) { - var u = i[s]; - if (u !== "children" && u !== "key") { - n === null && (n = Rc(e, o.mode, 0), n._debugInfo = oe, n.return = o), B(n, function(f) { - console.error("Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.", f); - }, u); - break; - } - } - } - function Wi(e) { - var n = fp; - return fp += 1, fd === null && (fd = $d()), Lu(fd, e, n); - } - function na(e, n) { - n = n.props.ref, e.ref = n !== void 0 ? n : null; - } - function Gd(e, n) { - throw n.$$typeof === Uh ? Error(`A React Element from an older version of React was rendered. This is not supported. It can happen if: -- Multiple copies of the "react" package is used. -- A library pre-bundled an old copy of "react" or "react/jsx-runtime". -- A compiler tries to "inline" JSX instead of using the runtime.`) : (e = Object.prototype.toString.call(n), Error("Objects are not valid as a React child (found: " + (e === "[object Object]" ? "object with keys {" + Object.keys(n).join(", ") + "}" : e) + "). If you meant to render a collection of children, use an array instead.")); - } - function ns(e, n) { - var o = Nu(); - o !== null ? o.run(Gd.bind(null, e, n)) : Gd(e, n); - } - function Fu(e, n) { - var o = G(e) || "Component"; - wy[o] || (wy[o] = !0, n = n.displayName || n.name || "Component", e.tag === 3 ? console.error(`Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it. - root.render(%s)`, n, n, n) : console.error(`Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it. - <%s>{%s}</%s>`, n, n, o, n, o)); - } - function ts(e, n) { - var o = Nu(); - o !== null ? o.run(Fu.bind(null, e, n)) : Fu(e, n); - } - function Jd(e, n) { - var o = G(e) || "Component"; - Py[o] || (Py[o] = !0, n = String(n), e.tag === 3 ? console.error(`Symbols are not valid as a React child. - root.render(%s)`, n) : console.error(`Symbols are not valid as a React child. - <%s>%s</%s>`, o, n, o)); - } - function Wr(e, n) { - var o = Nu(); - o !== null ? o.run(Jd.bind(null, e, n)) : Jd(e, n); - } - function rs(e) { - function n(b, v) { - if (e) { - var k = b.deletions; - k === null ? (b.deletions = [v], b.flags |= 16) : k.push(v); - } - } - function o(b, v) { - if (!e) return null; - for (; v !== null;) n(b, v), v = v.sibling; - return null; - } - function i(b) { - for (var v = /* @__PURE__ */ new Map(); b !== null;) b.key !== null ? v.set(b.key, b) : v.set(b.index, b), b = b.sibling; - return v; - } - function s(b, v) { - return b = Fo(b, v), b.index = 0, b.sibling = null, b; - } - function u(b, v, k) { - return b.index = k, e ? (k = b.alternate, k !== null ? (k = k.index, k < v ? (b.flags |= 67108866, v) : k) : (b.flags |= 67108866, v)) : (b.flags |= 1048576, v); - } - function f(b) { - return e && b.alternate === null && (b.flags |= 67108866), b; - } - function p(b, v, k, E) { - return v === null || v.tag !== 6 ? (v = Ec(k, b.mode, E), v.return = b, v._debugOwner = b, v._debugTask = b._debugTask, v._debugInfo = oe, v) : (v = s(v, k), v.return = b, v._debugInfo = oe, v); - } - function g(b, v, k, E) { - var U = k.type; - return U === ol ? (v = T(b, v, k.props.children, E, k.key), ea(k, v, b), v) : v !== null && (v.elementType === U || Wf(v, k) || typeof U == "object" && U !== null && U.$$typeof === kt && xo(U) === v.type) ? (v = s(v, k.props), na(v, k), v.return = b, v._debugOwner = k._owner, v._debugInfo = oe, v) : (v = Rc(k, b.mode, E), na(v, k), v.return = b, v._debugInfo = oe, v); - } - function S(b, v, k, E) { - return v === null || v.tag !== 4 || v.stateNode.containerInfo !== k.containerInfo || v.stateNode.implementation !== k.implementation ? (v = Hs(k, b.mode, E), v.return = b, v._debugInfo = oe, v) : (v = s(v, k.children || []), v.return = b, v._debugInfo = oe, v); - } - function T(b, v, k, E, U) { - return v === null || v.tag !== 7 ? (v = fa(k, b.mode, E, U), v.return = b, v._debugOwner = b, v._debugTask = b._debugTask, v._debugInfo = oe, v) : (v = s(v, k), v.return = b, v._debugInfo = oe, v); - } - function _(b, v, k) { - if (typeof v == "string" && v !== "" || typeof v == "number" || typeof v == "bigint") return v = Ec("" + v, b.mode, k), v.return = b, v._debugOwner = b, v._debugTask = b._debugTask, v._debugInfo = oe, v; - if (typeof v == "object" && v !== null) { - switch (v.$$typeof) { - case Ho: return k = Rc(v, b.mode, k), na(k, v), k.return = b, b = Nn(v._debugInfo), k._debugInfo = oe, oe = b, k; - case Ao: return v = Hs(v, b.mode, k), v.return = b, v._debugInfo = oe, v; - case kt: - var E = Nn(v._debugInfo); - return v = xo(v), b = _(b, v, k), oe = E, b; - } - if (fn(v) || Yo(v)) return k = fa(v, b.mode, k, null), k.return = b, k._debugOwner = b, k._debugTask = b._debugTask, b = Nn(v._debugInfo), k._debugInfo = oe, oe = b, k; - if (typeof v.then == "function") return E = Nn(v._debugInfo), b = _(b, Wi(v), k), oe = E, b; - if (v.$$typeof === on) return _(b, Hi(b, v), k); - ns(b, v); - } - return typeof v == "function" && ts(b, v), typeof v == "symbol" && Wr(b, v), null; - } - function I(b, v, k, E) { - var U = v !== null ? v.key : null; - if (typeof k == "string" && k !== "" || typeof k == "number" || typeof k == "bigint") return U !== null ? null : p(b, v, "" + k, E); - if (typeof k == "object" && k !== null) { - switch (k.$$typeof) { - case Ho: return k.key === U ? (U = Nn(k._debugInfo), b = g(b, v, k, E), oe = U, b) : null; - case Ao: return k.key === U ? S(b, v, k, E) : null; - case kt: return U = Nn(k._debugInfo), k = xo(k), b = I(b, v, k, E), oe = U, b; - } - if (fn(k) || Yo(k)) return U !== null ? null : (U = Nn(k._debugInfo), b = T(b, v, k, E, null), oe = U, b); - if (typeof k.then == "function") return U = Nn(k._debugInfo), b = I(b, v, Wi(k), E), oe = U, b; - if (k.$$typeof === on) return I(b, v, Hi(b, k), E); - ns(b, k); - } - return typeof k == "function" && ts(b, k), typeof k == "symbol" && Wr(b, k), null; - } - function O(b, v, k, E, U) { - if (typeof E == "string" && E !== "" || typeof E == "number" || typeof E == "bigint") return b = b.get(k) || null, p(v, b, "" + E, U); - if (typeof E == "object" && E !== null) { - switch (E.$$typeof) { - case Ho: return k = b.get(E.key === null ? k : E.key) || null, b = Nn(E._debugInfo), v = g(v, k, E, U), oe = b, v; - case Ao: return b = b.get(E.key === null ? k : E.key) || null, S(v, b, E, U); - case kt: - var ke = Nn(E._debugInfo); - return E = xo(E), v = O(b, v, k, E, U), oe = ke, v; - } - if (fn(E) || Yo(E)) return k = b.get(k) || null, b = Nn(E._debugInfo), v = T(v, k, E, U, null), oe = b, v; - if (typeof E.then == "function") return ke = Nn(E._debugInfo), v = O(b, v, k, Wi(E), U), oe = ke, v; - if (E.$$typeof === on) return O(b, v, k, Hi(v, E), U); - ns(v, E); - } - return typeof E == "function" && ts(v, E), typeof E == "symbol" && Wr(v, E), null; - } - function K(b, v, k, E) { - if (typeof k != "object" || k === null) return E; - switch (k.$$typeof) { - case Ho: - case Ao: - Zo(b, v, k); - var U = k.key; - if (typeof U != "string") break; - if (E === null) { - E = /* @__PURE__ */ new Set(), E.add(U); - break; - } - if (!E.has(U)) { - E.add(U); - break; - } - B(v, function() { - console.error("Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted — the behavior is unsupported and could change in a future version.", U); - }); - break; - case kt: k = xo(k), K(b, v, k, E); - } - return E; - } - function Fe(b, v, k, E) { - for (var U = null, ke = null, X = null, te = v, re = v = 0, Qe = null; te !== null && re < k.length; re++) { - te.index > re ? (Qe = te, te = null) : Qe = te.sibling; - var kn = I(b, te, k[re], E); - if (kn === null) { - te === null && (te = Qe); - break; - } - U = K(b, kn, k[re], U), e && te && kn.alternate === null && n(b, te), v = u(kn, v, re), X === null ? ke = kn : X.sibling = kn, X = kn, te = Qe; - } - if (re === k.length) return o(b, te), ge && ho(b, re), ke; - if (te === null) { - for (; re < k.length; re++) te = _(b, k[re], E), te !== null && (U = K(b, te, k[re], U), v = u(te, v, re), X === null ? ke = te : X.sibling = te, X = te); - return ge && ho(b, re), ke; - } - for (te = i(te); re < k.length; re++) Qe = O(te, b, re, k[re], E), Qe !== null && (U = K(b, Qe, k[re], U), e && Qe.alternate !== null && te.delete(Qe.key === null ? re : Qe.key), v = u(Qe, v, re), X === null ? ke = Qe : X.sibling = Qe, X = Qe); - return e && te.forEach(function(wi) { - return n(b, wi); - }), ge && ho(b, re), ke; - } - function Td(b, v, k, E) { - if (k == null) throw Error("An iterable object provided no iterator."); - for (var U = null, ke = null, X = v, te = v = 0, re = null, Qe = null, kn = k.next(); X !== null && !kn.done; te++, kn = k.next()) { - X.index > te ? (re = X, X = null) : re = X.sibling; - var wi = I(b, X, kn.value, E); - if (wi === null) { - X === null && (X = re); - break; - } - Qe = K(b, wi, kn.value, Qe), e && X && wi.alternate === null && n(b, X), v = u(wi, v, te), ke === null ? U = wi : ke.sibling = wi, ke = wi, X = re; - } - if (kn.done) return o(b, X), ge && ho(b, te), U; - if (X === null) { - for (; !kn.done; te++, kn = k.next()) X = _(b, kn.value, E), X !== null && (Qe = K(b, X, kn.value, Qe), v = u(X, v, te), ke === null ? U = X : ke.sibling = X, ke = X); - return ge && ho(b, te), U; - } - for (X = i(X); !kn.done; te++, kn = k.next()) re = O(X, b, te, kn.value, E), re !== null && (Qe = K(b, re, kn.value, Qe), e && re.alternate !== null && X.delete(re.key === null ? te : re.key), v = u(re, v, te), ke === null ? U = re : ke.sibling = re, ke = re); - return e && X.forEach(function(Yb) { - return n(b, Yb); - }), ge && ho(b, te), U; - } - function Jo(b, v, k, E) { - if (typeof k == "object" && k !== null && k.type === ol && k.key === null && (ea(k, null, b), k = k.props.children), typeof k == "object" && k !== null) { - switch (k.$$typeof) { - case Ho: - var U = Nn(k._debugInfo); - e: { - for (var ke = k.key; v !== null;) { - if (v.key === ke) { - if (ke = k.type, ke === ol) { - if (v.tag === 7) { - o(b, v.sibling), E = s(v, k.props.children), E.return = b, E._debugOwner = k._owner, E._debugInfo = oe, ea(k, E, b), b = E; - break e; - } - } else if (v.elementType === ke || Wf(v, k) || typeof ke == "object" && ke !== null && ke.$$typeof === kt && xo(ke) === v.type) { - o(b, v.sibling), E = s(v, k.props), na(E, k), E.return = b, E._debugOwner = k._owner, E._debugInfo = oe, b = E; - break e; - } - o(b, v); - break; - } else n(b, v); - v = v.sibling; - } - k.type === ol ? (E = fa(k.props.children, b.mode, E, k.key), E.return = b, E._debugOwner = b, E._debugTask = b._debugTask, E._debugInfo = oe, ea(k, E, b), b = E) : (E = Rc(k, b.mode, E), na(E, k), E.return = b, E._debugInfo = oe, b = E); - } - return b = f(b), oe = U, b; - case Ao: - e: { - for (U = k, k = U.key; v !== null;) { - if (v.key === k) if (v.tag === 4 && v.stateNode.containerInfo === U.containerInfo && v.stateNode.implementation === U.implementation) { - o(b, v.sibling), E = s(v, U.children || []), E.return = b, b = E; - break e; - } else { - o(b, v); - break; - } - else n(b, v); - v = v.sibling; - } - E = Hs(U, b.mode, E), E.return = b, b = E; - } - return f(b); - case kt: return U = Nn(k._debugInfo), k = xo(k), b = Jo(b, v, k, E), oe = U, b; - } - if (fn(k)) return U = Nn(k._debugInfo), b = Fe(b, v, k, E), oe = U, b; - if (Yo(k)) { - if (U = Nn(k._debugInfo), ke = Yo(k), typeof ke != "function") throw Error("An object is not an iterable. This error is likely caused by a bug in React. Please file an issue."); - var X = ke.call(k); - return X === k ? (b.tag !== 0 || Object.prototype.toString.call(b.type) !== "[object GeneratorFunction]" || Object.prototype.toString.call(X) !== "[object Generator]") && (Sy || console.error("Using Iterators as children is unsupported and will likely yield unexpected results because enumerating a generator mutates it. You may convert it to an array with `Array.from()` or the `[...spread]` operator before rendering. You can also use an Iterable that can iterate multiple times over the same items."), Sy = !0) : k.entries !== ke || yg || (console.error("Using Maps as children is not supported. Use an array of keyed ReactElements instead."), yg = !0), b = Td(b, v, X, E), oe = U, b; - } - if (typeof k.then == "function") return U = Nn(k._debugInfo), b = Jo(b, v, Wi(k), E), oe = U, b; - if (k.$$typeof === on) return Jo(b, v, Hi(b, k), E); - ns(b, k); - } - return typeof k == "string" && k !== "" || typeof k == "number" || typeof k == "bigint" ? (U = "" + k, v !== null && v.tag === 6 ? (o(b, v.sibling), E = s(v, U), E.return = b, b = E) : (o(b, v), E = Ec(U, b.mode, E), E.return = b, E._debugOwner = b, E._debugTask = b._debugTask, E._debugInfo = oe, b = E), f(b)) : (typeof k == "function" && ts(b, k), typeof k == "symbol" && Wr(b, k), o(b, v)); - } - return function(b, v, k, E) { - var U = oe; - oe = null; - try { - fp = 0; - var ke = Jo(b, v, k, E); - return fd = null, ke; - } catch (Qe) { - if (Qe === dd || Qe === am) throw Qe; - var X = lt(29, Qe, null, b.mode); - X.lanes = E, X.return = b; - var te = X._debugInfo = oe; - if (X._debugOwner = b._debugOwner, X._debugTask = b._debugTask, te != null) { - for (var re = te.length - 1; 0 <= re; re--) if (typeof te[re].stack == "string") { - X._debugOwner = te[re], X._debugTask = te[re].debugTask; - break; - } - } - return X; - } finally { - oe = U; - } - }; - } - function Zd(e, n) { - var o = fn(e); - return e = !o && typeof Yo(e) == "function", o || e ? (o = o ? "array" : "iterable", console.error("A nested %s was passed to row #%s in <SuspenseList />. Wrap it in an additional SuspenseList to configure its revealOrder: <SuspenseList revealOrder=...> ... <SuspenseList revealOrder=...>{%s}</SuspenseList> ... </SuspenseList>", o, n, o), !1) : !0; - } - function Ui() { - for (var e = pd, n = bg = pd = 0; n < e;) { - var o = io[n]; - io[n++] = null; - var i = io[n]; - io[n++] = null; - var s = io[n]; - io[n++] = null; - var u = io[n]; - if (io[n++] = null, i !== null && s !== null) { - var f = i.pending; - f === null ? s.next = s : (s.next = f.next, f.next = s), i.pending = s; - } - u !== 0 && wn(o, s, u); - } - } - function os(e, n, o, i) { - io[pd++] = e, io[pd++] = n, io[pd++] = o, io[pd++] = i, bg |= i, e.lanes |= i, e = e.alternate, e !== null && (e.lanes |= i); - } - function Hu(e, n, o, i) { - return os(e, n, o, i), as(e); - } - function On(e, n) { - return os(e, null, null, n), as(e); - } - function wn(e, n, o) { - e.lanes |= o; - var i = e.alternate; - i !== null && (i.lanes |= o); - for (var s = !1, u = e.return; u !== null;) u.childLanes |= o, i = u.alternate, i !== null && (i.childLanes |= o), u.tag === 22 && (e = u.stateNode, e === null || e._visibility & pp || (s = !0)), e = u, u = u.return; - return e.tag === 3 ? (u = e.stateNode, s && n !== null && (s = 31 - vn(o), e = u.hiddenUpdates, i = e[s], i === null ? e[s] = [n] : i.push(n), n.lane = o | 536870912), u) : null; - } - function as(e) { - if (zp > Gb) throw cu = zp = 0, Cp = Ug = null, Error("Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops."); - cu > Jb && (cu = 0, Cp = null, console.error("Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render.")), e.alternate === null && e.flags & 4098 && zc(e); - for (var n = e, o = n.return; o !== null;) n.alternate === null && n.flags & 4098 && zc(e), n = o, o = n.return; - return n.tag === 3 ? n.stateNode : null; - } - function Au(e) { - e.updateQueue = { - baseState: e.memoizedState, - firstBaseUpdate: null, - lastBaseUpdate: null, - shared: { - pending: null, - lanes: 0, - hiddenCallbacks: null - }, - callbacks: null - }; - } - function ju(e, n) { - e = e.updateQueue, n.updateQueue === e && (n.updateQueue = { - baseState: e.baseState, - firstBaseUpdate: e.firstBaseUpdate, - lastBaseUpdate: e.lastBaseUpdate, - shared: e.shared, - callbacks: null - }); - } - function zo(e) { - return { - lane: e, - tag: zy, - payload: null, - callback: null, - next: null - }; - } - function Mt(e, n, o) { - var i = e.updateQueue; - if (i === null) return null; - if (i = i.shared, Sg === i && !_y) { - var s = G(e); - console.error(`An update (setState, replaceState, or forceUpdate) was scheduled from inside an update function. Update functions should be pure, with zero side-effects. Consider using componentDidUpdate or a callback. - -Please update the following component: %s`, s), _y = !0; - } - return (ye & Zn) !== Jn ? (s = i.pending, s === null ? n.next = n : (n.next = s.next, s.next = n), i.pending = n, n = as(e), wn(e, null, o), n) : (os(e, i, n, o), as(e)); - } - function Bi(e, n, o) { - if (n = n.updateQueue, n !== null && (n = n.shared, (o & 4194048) !== 0)) { - var i = n.lanes; - i &= e.pendingLanes, o |= i, n.lanes = o, Ld(e, o); - } - } - function Ua(e, n) { - var o = e.updateQueue, i = e.alternate; - if (i !== null && (i = i.updateQueue, o === i)) { - var s = null, u = null; - if (o = o.firstBaseUpdate, o !== null) { - do { - var f = { - lane: o.lane, - tag: o.tag, - payload: o.payload, - callback: null, - next: null - }; - u === null ? s = u = f : u = u.next = f, o = o.next; - } while (o !== null); - u === null ? s = u = n : u = u.next = n; - } else s = u = n; - o = { - baseState: i.baseState, - firstBaseUpdate: s, - lastBaseUpdate: u, - shared: i.shared, - callbacks: i.callbacks - }, e.updateQueue = o; - return; - } - e = o.lastBaseUpdate, e === null ? o.firstBaseUpdate = n : e.next = n, o.lastBaseUpdate = n; - } - function Oi() { - if (kg) { - var e = cd; - if (e !== null) throw e; - } - } - function is(e, n, o, i) { - kg = !1; - var s = e.updateQueue; - Cl = !1, Sg = s.shared; - var u = s.firstBaseUpdate, f = s.lastBaseUpdate, p = s.shared.pending; - if (p !== null) { - s.shared.pending = null; - var g = p, S = g.next; - g.next = null, f === null ? u = S : f.next = S, f = g; - var T = e.alternate; - T !== null && (T = T.updateQueue, p = T.lastBaseUpdate, p !== f && (p === null ? T.firstBaseUpdate = S : p.next = S, T.lastBaseUpdate = g)); - } - if (u !== null) { - var _ = s.baseState; - f = 0, T = S = g = null, p = u; - do { - var I = p.lane & -536870913, O = I !== p.lane; - if (O ? (ae & I) === I : (i & I) === I) { - I !== 0 && I === eu && (kg = !0), T !== null && (T = T.next = { - lane: 0, - tag: p.tag, - payload: p.payload, - callback: null, - next: null - }); - e: { - I = e; - var K = p, Fe = n, Td = o; - switch (K.tag) { - case Cy: - if (K = K.payload, typeof K == "function") { - id = !0; - var Jo = K.call(Td, _, Fe); - if (I.mode & 8) { - De(!0); - try { - K.call(Td, _, Fe); - } finally { - De(!1); - } - } - id = !1, _ = Jo; - break e; - } - _ = K; - break e; - case vg: I.flags = I.flags & -65537 | 128; - case zy: - if (Jo = K.payload, typeof Jo == "function") { - if (id = !0, K = Jo.call(Td, _, Fe), I.mode & 8) { - De(!0); - try { - Jo.call(Td, _, Fe); - } finally { - De(!1); - } - } - id = !1; - } else K = Jo; - if (K == null) break e; - _ = ze({}, _, K); - break e; - case Ty: Cl = !0; - } - } - I = p.callback, I !== null && (e.flags |= 64, O && (e.flags |= 8192), O = s.callbacks, O === null ? s.callbacks = [I] : O.push(I)); - } else O = { - lane: I, - tag: p.tag, - payload: p.payload, - callback: p.callback, - next: null - }, T === null ? (S = T = O, g = _) : T = T.next = O, f |= I; - if (p = p.next, p === null) { - if (p = s.shared.pending, p === null) break; - O = p, p = O.next, O.next = null, s.lastBaseUpdate = O, s.shared.pending = null; - } - } while (!0); - T === null && (g = _), s.baseState = g, s.firstBaseUpdate = S, s.lastBaseUpdate = T, u === null && (s.shared.lanes = 0), Rl |= f, e.lanes = f, e.memoizedState = _; - } - Sg = null; - } - function ls(e, n) { - if (typeof e != "function") throw Error("Invalid argument passed as callback. Expected a function. Instead received: " + e); - e.call(n); - } - function Yd(e, n) { - var o = e.shared.hiddenCallbacks; - if (o !== null) for (e.shared.hiddenCallbacks = null, e = 0; e < o.length; e++) ls(o[e], n); - } - function Xd(e, n) { - var o = e.callbacks; - if (o !== null) for (e.callbacks = null, e = 0; e < o.length; e++) ls(o[e], n); - } - function Kd(e, n) { - var o = Ta; - pe(lm, o, e), pe(hd, n, e), Ta = o | n.baseLanes; - } - function Du(e) { - pe(lm, Ta, e), pe(hd, hd.current, e); - } - function ss(e) { - Ta = lm.current, Ze(hd, e), Ze(lm, e); - } - function Ur(e) { - var n = e.alternate; - pe(Sn, Sn.current & md, e), pe(_r, e, e), Qo === null && (n === null || hd.current !== null || n.memoizedState !== null) && (Qo = e); - } - function Wu(e) { - pe(Sn, Sn.current, e), pe(_r, e, e), Qo === null && (Qo = e); - } - function Uu(e) { - e.tag === 22 ? (pe(Sn, Sn.current, e), pe(_r, e, e), Qo === null && (Qo = e)) : mr(e); - } - function mr(e) { - pe(Sn, Sn.current, e), pe(_r, _r.current, e); - } - function et(e) { - Ze(_r, e), Qo === e && (Qo = null), Ze(Sn, e); - } - function us(e) { - for (var n = e; n !== null;) { - if (n.tag === 13) { - var o = n.memoizedState; - if (o !== null && (o = o.dehydrated, o === null || Ms(o) || $c(o))) return n; - } else if (n.tag === 19 && (n.memoizedProps.revealOrder === "forwards" || n.memoizedProps.revealOrder === "backwards" || n.memoizedProps.revealOrder === "unstable_legacy-backwards" || n.memoizedProps.revealOrder === "together")) { - if ((n.flags & 128) !== 0) return n; - } else if (n.child !== null) { - n.child.return = n, n = n.child; - continue; - } - if (n === e) break; - for (; n.sibling === null;) { - if (n.return === null || n.return === e) return null; - n = n.return; - } - n.sibling.return = n.return, n = n.sibling; - } - return null; - } - function ee() { - var e = z; - so === null ? so = [e] : so.push(e); - } - function N() { - var e = z; - if (so !== null && (vi++, so[vi] !== e)) { - var n = G(Y); - if (!Ry.has(n) && (Ry.add(n), so !== null)) { - for (var o = "", i = 0; i <= vi; i++) { - var s = so[i], u = i === vi ? e : s; - for (s = i + 1 + ". " + s; 30 > s.length;) s += " "; - s += u + ` -`, o += s; - } - console.error(`React has detected a change in the order of Hooks called by %s. This will lead to bugs and errors if not fixed. For more information, read the Rules of Hooks: https://react.dev/link/rules-of-hooks - - Previous render Next render - ------------------------------------------------------ -%s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -`, n, o); - } - } - } - function gt(e) { - e == null || fn(e) || console.error("%s received a final argument that is not an array (instead, received `%s`). When specified, the final argument must be an array.", z, typeof e); - } - function Mi() { - var e = G(Y); - Iy.has(e) || (Iy.add(e), console.error("ReactDOM.useFormState has been renamed to React.useActionState. Please update %s to use React.useActionState.", e)); - } - function Ye() { - throw Error(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons: -1. You might have mismatching versions of React and the renderer (such as React DOM) -2. You might be breaking the Rules of Hooks -3. You might have more than one copy of React in the same app -See https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.`); - } - function Bu(e, n) { - if (gp) return !1; - if (n === null) return console.error("%s received a final argument during this render, but not during the previous render. Even though the final argument is optional, its type cannot change between renders.", z), !1; - e.length !== n.length && console.error(`The final argument passed to %s changed size between renders. The order and size of this array must remain constant. - -Previous: %s -Incoming: %s`, z, "[" + n.join(", ") + "]", "[" + e.join(", ") + "]"); - for (var o = 0; o < n.length && o < e.length; o++) if (!jt(e[o], n[o])) return !1; - return !0; - } - function It(e, n, o, i, s, u) { - yi = u, Y = n, so = e !== null ? e._debugHookTypes : null, vi = -1, gp = e !== null && e.type !== n.type, (Object.prototype.toString.call(o) === "[object AsyncFunction]" || Object.prototype.toString.call(o) === "[object AsyncGeneratorFunction]") && (u = G(Y), wg.has(u) || (wg.add(u), console.error("%s is an async Client Component. Only Server Components can be async at the moment. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.", u === null ? "An unknown Component" : "<" + u + ">"))), n.memoizedState = null, n.updateQueue = null, n.lanes = 0, x.H = e !== null && e.memoizedState !== null ? xg : so !== null ? Ly : Pg, au = u = (n.mode & 8) !== Z; - var f = hg(o, i, s); - if (au = !1, yd && (f = Ou(n, o, i, s)), u) { - De(!0); - try { - f = Ou(n, o, i, s); - } finally { - De(!1); - } - } - return cs(e, n), f; - } - function cs(e, n) { - n._debugHookTypes = so, n.dependencies === null ? bi !== null && (n.dependencies = { - lanes: 0, - firstContext: null, - _debugThenableState: bi - }) : n.dependencies._debugThenableState = bi, x.H = yp; - var o = Ae !== null && Ae.next !== null; - if (yi = 0, so = z = zn = Ae = Y = null, vi = -1, e !== null && (e.flags & 65011712) !== (n.flags & 65011712) && console.error("Internal React error: Expected static flag was missing. Please notify the React team."), um = !1, mp = 0, bi = null, o) throw Error("Rendered fewer hooks than expected. This may be caused by an accidental early return statement."); - e === null || Cn || (e = e.dependencies, e !== null && ja(e) && (Cn = !0)), dp ? (dp = !1, e = !0) : e = !1, e && (n = G(n) || "Unknown", Ey.has(n) || wg.has(n) || (Ey.add(n), console.error("`use` was called from inside a try/catch block. This is not allowed and can lead to unexpected behavior. To handle errors triggered by `use`, wrap your component in a error boundary."))); - } - function Ou(e, n, o, i) { - Y = e; - var s = 0; - do { - if (yd && (bi = null), mp = 0, yd = !1, s >= $b) throw Error("Too many re-renders. React limits the number of renders to prevent an infinite loop."); - if (s += 1, gp = !1, zn = Ae = null, e.updateQueue != null) { - var u = e.updateQueue; - u.lastEffect = null, u.events = null, u.stores = null, u.memoCache != null && (u.memoCache.index = 0); - } - vi = -1, x.H = Ny, u = hg(n, o, i); - } while (yd); - return u; - } - function ef() { - var e = x.H, n = e.useState()[0]; - return n = typeof n.then == "function" ? Co(n) : n, e = e.useState()[0], (Ae !== null ? Ae.memoizedState : null) !== e && (Y.flags |= 1024), n; - } - function Mu() { - var e = cm !== 0; - return cm = 0, e; - } - function Qu(e, n, o) { - n.updateQueue = e.updateQueue, n.flags = (n.mode & 16) !== Z ? n.flags & -402655237 : n.flags & -2053, e.lanes &= ~o; - } - function ds(e) { - if (um) { - for (e = e.memoizedState; e !== null;) { - var n = e.queue; - n !== null && (n.pending = null), e = e.next; - } - um = !1; - } - yi = 0, so = zn = Ae = Y = null, vi = -1, z = null, yd = !1, mp = cm = 0, bi = null; - } - function Fn() { - var e = { - memoizedState: null, - baseState: null, - baseQueue: null, - queue: null, - next: null - }; - return zn === null ? Y.memoizedState = zn = e : zn = zn.next = e, zn; - } - function xe() { - if (Ae === null) { - var e = Y.alternate; - e = e !== null ? e.memoizedState : null; - } else e = Ae.next; - var n = zn === null ? Y.memoizedState : zn.next; - if (n !== null) zn = n, Ae = e; - else { - if (e === null) throw Y.alternate === null ? Error("Update hook called on initial render. This is likely a bug in React. Please file an issue.") : Error("Rendered more hooks than during the previous render."); - Ae = e, e = { - memoizedState: Ae.memoizedState, - baseState: Ae.baseState, - baseQueue: Ae.baseQueue, - queue: Ae.queue, - next: null - }, zn === null ? Y.memoizedState = zn = e : zn = zn.next = e; - } - return zn; - } - function Ba() { - return { - lastEffect: null, - events: null, - stores: null, - memoCache: null - }; - } - function Co(e) { - var n = mp; - return mp += 1, bi === null && (bi = $d()), e = Lu(bi, e, n), n = Y, (zn === null ? n.memoizedState : zn.next) === null && (n = n.alternate, x.H = n !== null && n.memoizedState !== null ? xg : Pg), e; - } - function we(e) { - if (e !== null && typeof e == "object") { - if (typeof e.then == "function") return Co(e); - if (e.$$typeof === on) return Ee(e); - } - throw Error("An unsupported type was passed to use(): " + String(e)); - } - function Oa(e) { - var n = null, o = Y.updateQueue; - if (o !== null && (n = o.memoCache), n == null) { - var i = Y.alternate; - i !== null && (i = i.updateQueue, i !== null && (i = i.memoCache, i != null && (n = { - data: i.data.map(function(s) { - return s.slice(); - }), - index: 0 - }))); - } - if (n ??= { - data: [], - index: 0 - }, o === null && (o = Ba(), Y.updateQueue = o), o.memoCache = n, o = n.data[n.index], o === void 0 || gp) for (o = n.data[n.index] = Array(e), i = 0; i < e; i++) o[i] = Bh; - else o.length !== e && console.error("Expected a constant size argument for each invocation of useMemoCache. The previous cache was allocated with size %s but size %s was requested.", o.length, e); - return n.index++, o; - } - function gr(e, n) { - return typeof n == "function" ? n(e) : n; - } - function $u(e, n, o) { - var i = Fn(); - if (o !== void 0) { - var s = o(n); - if (au) { - De(!0); - try { - o(n); - } finally { - De(!1); - } - } - } else s = n; - return i.memoizedState = i.baseState = s, e = { - pending: null, - lanes: 0, - dispatch: null, - lastRenderedReducer: e, - lastRenderedState: s - }, i.queue = e, e = e.dispatch = Vp.bind(null, Y, e), [i.memoizedState, e]; - } - function Br(e) { - return Or(xe(), Ae, e); - } - function Or(e, n, o) { - var i = e.queue; - if (i === null) throw Error("Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)"); - i.lastRenderedReducer = o; - var s = e.baseQueue, u = i.pending; - if (u !== null) { - if (s !== null) { - var f = s.next; - s.next = u.next, u.next = f; - } - n.baseQueue !== s && console.error("Internal error: Expected work-in-progress queue to be a clone. This is a bug in React."), n.baseQueue = s = u, i.pending = null; - } - if (u = e.baseState, s === null) e.memoizedState = u; - else { - n = s.next; - var p = f = null, g = null, S = n, T = !1; - do { - var _ = S.lane & -536870913; - if (_ !== S.lane ? (ae & _) === _ : (yi & _) === _) { - var I = S.revertLane; - if (I === 0) g !== null && (g = g.next = { - lane: 0, - revertLane: 0, - gesture: null, - action: S.action, - hasEagerState: S.hasEagerState, - eagerState: S.eagerState, - next: null - }), _ === eu && (T = !0); - else if ((yi & I) === I) { - S = S.next, I === eu && (T = !0); - continue; - } else _ = { - lane: 0, - revertLane: S.revertLane, - gesture: null, - action: S.action, - hasEagerState: S.hasEagerState, - eagerState: S.eagerState, - next: null - }, g === null ? (p = g = _, f = u) : g = g.next = _, Y.lanes |= I, Rl |= I; - _ = S.action, au && o(u, _), u = S.hasEagerState ? S.eagerState : o(u, _); - } else I = { - lane: _, - revertLane: S.revertLane, - gesture: S.gesture, - action: S.action, - hasEagerState: S.hasEagerState, - eagerState: S.eagerState, - next: null - }, g === null ? (p = g = I, f = u) : g = g.next = I, Y.lanes |= _, Rl |= _; - S = S.next; - } while (S !== null && S !== n); - if (g === null ? f = u : g.next = p, !jt(u, e.memoizedState) && (Cn = !0, T && (o = cd, o !== null))) throw o; - e.memoizedState = u, e.baseState = f, e.baseQueue = g, i.lastRenderedState = u; - } - return s === null && (i.lanes = 0), [e.memoizedState, i.dispatch]; - } - function Qi(e) { - var n = xe(), o = n.queue; - if (o === null) throw Error("Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)"); - o.lastRenderedReducer = e; - var i = o.dispatch, s = o.pending, u = n.memoizedState; - if (s !== null) { - o.pending = null; - var f = s = s.next; - do - u = e(u, f.action), f = f.next; - while (f !== s); - jt(u, n.memoizedState) || (Cn = !0), n.memoizedState = u, n.baseQueue === null && (n.baseState = u), o.lastRenderedState = u; - } - return [u, i]; - } - function Vu(e, n, o) { - var i = Y, s = Fn(); - if (ge) { - if (o === void 0) throw Error("Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering."); - var u = o(); - gd || u === o() || (console.error("The result of getServerSnapshot should be cached to avoid an infinite loop"), gd = !0); - } else { - if (u = n(), gd || (o = n(), jt(u, o) || (console.error("The result of getSnapshot should be cached to avoid an infinite loop"), gd = !0)), je === null) throw Error("Expected a work-in-progress root. This is a bug in React. Please file an issue."); - ae & 127 || yr(i, n, u); - } - return s.memoizedState = u, o = { - value: u, - getSnapshot: n - }, s.queue = o, yt(qu.bind(null, i, o, e), [e]), i.flags |= 2048, Vt(lo | Ut, { destroy: void 0 }, nf.bind(null, i, o, u, n), null), u; - } - function ta(e, n, o) { - var i = Y, s = xe(), u = ge; - if (u) { - if (o === void 0) throw Error("Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering."); - o = o(); - } else if (o = n(), !gd) { - var f = n(); - jt(o, f) || (console.error("The result of getSnapshot should be cached to avoid an infinite loop"), gd = !0); - } - (f = !jt((Ae || s).memoizedState, o)) && (s.memoizedState = o, Cn = !0), s = s.queue; - if (Qn(2048, Ut, qu.bind(null, i, s, e), [e]), s.getSnapshot !== n || f || zn !== null && zn.memoizedState.tag & lo) { - if (i.flags |= 2048, Vt(lo | Ut, { destroy: void 0 }, nf.bind(null, i, s, o, n), null), je === null) throw Error("Expected a work-in-progress root. This is a bug in React. Please file an issue."); - u || yi & 127 || yr(i, n, o); - } - return o; - } - function yr(e, n, o) { - e.flags |= 16384, e = { - getSnapshot: n, - value: o - }, n = Y.updateQueue, n === null ? (n = Ba(), Y.updateQueue = n, n.stores = [e]) : (o = n.stores, o === null ? n.stores = [e] : o.push(e)); - } - function nf(e, n, o, i) { - n.value = o, n.getSnapshot = i, tf(n) && Gu(e); - } - function qu(e, n, o) { - return o(function() { - tf(n) && (ur(2, "updateSyncExternalStore()", e), Gu(e)); - }); - } - function tf(e) { - var n = e.getSnapshot; - e = e.value; - try { - var o = n(); - return !jt(e, o); - } catch { - return !0; - } - } - function Gu(e) { - var n = On(e, 2); - n !== null && We(n, e, 2); - } - function fs(e) { - var n = Fn(); - if (typeof e == "function") { - var o = e; - if (e = o(), au) { - De(!0); - try { - o(); - } finally { - De(!1); - } - } - } - return n.memoizedState = n.baseState = e, n.queue = { - pending: null, - lanes: 0, - dispatch: null, - lastRenderedReducer: gr, - lastRenderedState: e - }, n; - } - function $i(e) { - e = fs(e); - var n = e.queue, o = cf.bind(null, Y, n); - return n.dispatch = o, [e.memoizedState, o]; - } - function Ju(e) { - var n = Fn(); - n.memoizedState = n.baseState = e; - var o = { - pending: null, - lanes: 0, - dispatch: null, - lastRenderedReducer: null, - lastRenderedState: null - }; - return n.queue = o, n = Gi.bind(null, Y, !0, o), o.dispatch = n, [e, n]; - } - function rf(e, n) { - return Wp(xe(), Ae, e, n); - } - function Wp(e, n, o, i) { - return e.baseState = o, Or(e, Ae, typeof i == "function" ? i : gr); - } - function of(e, n) { - var o = xe(); - return Ae !== null ? Wp(o, Ae, e, n) : (o.baseState = e, [e, o.queue.dispatch]); - } - function Up(e, n, o, i, s) { - if (Ji(e)) throw Error("Cannot update form state while rendering."); - if (e = n.action, e !== null) { - var u = { - payload: s, - action: e, - next: null, - isTransition: !0, - status: "pending", - value: null, - reason: null, - listeners: [], - then: function(f) { - u.listeners.push(f); - } - }; - x.T !== null ? o(!0) : u.isTransition = !1, i(u), o = n.pending, o === null ? (u.next = n.pending = u, Qt(n, u)) : (u.next = o.next, n.pending = o.next = u); - } - } - function Qt(e, n) { - var o = n.action, i = n.payload, s = e.state; - if (n.isTransition) { - var u = x.T, f = {}; - f._updatedFibers = /* @__PURE__ */ new Set(), x.T = f; - try { - var p = o(s, i), g = x.S; - g !== null && g(f, p), Zu(e, n, p); - } catch (S) { - Yu(e, n, S); - } finally { - u !== null && f.types !== null && (u.types !== null && u.types !== f.types && console.error("We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React."), u.types = f.types), x.T = u, u === null && f._updatedFibers && (e = f._updatedFibers.size, f._updatedFibers.clear(), 10 < e && console.warn("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.")); - } - } else try { - f = o(s, i), Zu(e, n, f); - } catch (S) { - Yu(e, n, S); - } - } - function Zu(e, n, o) { - o !== null && typeof o == "object" && typeof o.then == "function" ? (x.asyncTransitions++, o.then(ys, ys), o.then(function(i) { - af(e, n, i); - }, function(i) { - return Yu(e, n, i); - }), n.isTransition || console.error("An async function with useActionState was called outside of a transition. This is likely not what you intended (for example, isPending will not update correctly). Either call the returned function inside startTransition, or pass it to an `action` or `formAction` prop.")) : af(e, n, o); - } - function af(e, n, o) { - n.status = "fulfilled", n.value = o, Bp(n), e.state = o, n = e.pending, n !== null && (o = n.next, o === n ? e.pending = null : (o = o.next, n.next = o, Qt(e, o))); - } - function Yu(e, n, o) { - var i = e.pending; - if (e.pending = null, i !== null) { - i = i.next; - do - n.status = "rejected", n.reason = o, Bp(n), n = n.next; - while (n !== i); - } - e.action = null; - } - function Bp(e) { - e = e.listeners; - for (var n = 0; n < e.length; n++) (0, e[n])(); - } - function ps(e, n) { - return n; - } - function tn(e, n) { - if (ge) { - var o = je.formState; - if (o !== null) { - e: { - var i = Y; - if (ge) { - if (Ke) { - var s = Pt(Ke, oo); - if (s) { - Ke = ga(s), i = Cr(s); - break e; - } - } - Fr(i); - } - i = !1; - } - i && (n = o[0]); - } - } - o = Fn(), o.memoizedState = o.baseState = n, i = { - pending: null, - lanes: 0, - dispatch: null, - lastRenderedReducer: ps, - lastRenderedState: n - }, o.queue = i, o = cf.bind(null, Y, i), i.dispatch = o, i = fs(!1); - var u = Gi.bind(null, Y, !1, i.queue); - return i = Fn(), s = { - state: n, - dispatch: null, - action: e, - pending: null - }, i.queue = s, o = Up.bind(null, Y, s, u, o), s.dispatch = o, i.memoizedState = e, [ - n, - o, - !1 - ]; - } - function hs(e) { - return Mn(xe(), Ae, e); - } - function Mn(e, n, o) { - if (n = Or(e, n, ps)[0], e = Br(gr)[0], typeof n == "object" && n !== null && typeof n.then == "function") try { - var i = Co(n); - } catch (f) { - throw f === dd ? am : f; - } - else i = n; - n = xe(); - var s = n.queue, u = s.dispatch; - return o !== n.memoizedState && (Y.flags |= 2048, Vt(lo | Ut, { destroy: void 0 }, Op.bind(null, s, o), null)), [ - i, - u, - e - ]; - } - function Op(e, n) { - e.action = n; - } - function $t(e) { - var n = xe(), o = Ae; - if (o !== null) return Mn(n, o, e); - xe(), n = n.memoizedState, o = xe(); - var i = o.queue.dispatch; - return o.memoizedState = e, [ - n, - i, - !1 - ]; - } - function Vt(e, n, o, i) { - return e = { - tag: e, - create: o, - deps: i, - inst: n, - next: null - }, n = Y.updateQueue, n === null && (n = Ba(), Y.updateQueue = n), o = n.lastEffect, o === null ? n.lastEffect = e.next = e : (i = o.next, o.next = e, e.next = i, n.lastEffect = e), e; - } - function br(e) { - var n = Fn(); - return e = { current: e }, n.memoizedState = e; - } - function To(e, n, o, i) { - var s = Fn(); - Y.flags |= e, s.memoizedState = Vt(lo | n, { destroy: void 0 }, o, i === void 0 ? null : i); - } - function Qn(e, n, o, i) { - var s = xe(); - i = i === void 0 ? null : i; - var u = s.memoizedState.inst; - Ae !== null && i !== null && Bu(i, Ae.memoizedState.deps) ? s.memoizedState = Vt(n, u, o, i) : (Y.flags |= e, s.memoizedState = Vt(lo | n, u, o, i)); - } - function yt(e, n) { - (Y.mode & 16) !== Z ? To(276826112, Ut, e, n) : To(8390656, Ut, e, n); - } - function Mp(e) { - Y.flags |= 4; - var n = Y.updateQueue; - if (n === null) n = Ba(), Y.updateQueue = n, n.events = [e]; - else { - var o = n.events; - o === null ? n.events = [e] : o.push(e); - } - } - function ra(e) { - var n = Fn(), o = { impl: e }; - return n.memoizedState = o, function() { - if ((ye & Zn) !== Jn) throw Error("A function wrapped in useEffectEvent can't be called during rendering."); - return o.impl.apply(void 0, arguments); - }; - } - function oa(e) { - var n = xe().memoizedState; - return Mp({ - ref: n, - nextImpl: e - }), function() { - if ((ye & Zn) !== Jn) throw Error("A function wrapped in useEffectEvent can't be called during rendering."); - return n.impl.apply(void 0, arguments); - }; - } - function _o(e, n) { - var o = 4194308; - return (Y.mode & 16) !== Z && (o |= 134217728), To(o, Rr, e, n); - } - function lf(e, n) { - if (typeof n == "function") { - e = e(); - var o = n(e); - return function() { - typeof o == "function" ? o() : n(null); - }; - } - if (n != null) return n.hasOwnProperty("current") || console.error("Expected useImperativeHandle() first argument to either be a ref callback or React.createRef() object. Instead received: %s.", "an object with keys {" + Object.keys(n).join(", ") + "}"), e = e(), n.current = e, function() { - n.current = null; - }; - } - function Xu(e, n, o) { - typeof n != "function" && console.error("Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.", n !== null ? typeof n : "null"), o = o != null ? o.concat([e]) : null; - var i = 4194308; - (Y.mode & 16) !== Z && (i |= 134217728), To(i, Rr, lf.bind(null, n, e), o); - } - function aa(e, n, o) { - typeof n != "function" && console.error("Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.", n !== null ? typeof n : "null"), o = o != null ? o.concat([e]) : null, Qn(4, Rr, lf.bind(null, n, e), o); - } - function Ku(e, n) { - return Fn().memoizedState = [e, n === void 0 ? null : n], e; - } - function Ma(e, n) { - var o = xe(); - n = n === void 0 ? null : n; - var i = o.memoizedState; - return n !== null && Bu(n, i[1]) ? i[0] : (o.memoizedState = [e, n], e); - } - function ec(e, n) { - var o = Fn(); - n = n === void 0 ? null : n; - var i = e(); - if (au) { - De(!0); - try { - e(); - } finally { - De(!1); - } - } - return o.memoizedState = [i, n], i; - } - function Vi(e, n) { - var o = xe(); - n = n === void 0 ? null : n; - var i = o.memoizedState; - if (n !== null && Bu(n, i[1])) return i[0]; - if (i = e(), au) { - De(!0); - try { - e(); - } finally { - De(!1); - } - } - return o.memoizedState = [i, n], i; - } - function ms(e, n) { - return gs(Fn(), e, n); - } - function nc(e, n) { - return bt(xe(), Ae.memoizedState, e, n); - } - function sf(e, n) { - var o = xe(); - return Ae === null ? gs(o, e, n) : bt(o, Ae.memoizedState, e, n); - } - function gs(e, n, o) { - return o === void 0 || (yi & 1073741824) !== 0 && (ae & 261930) === 0 ? e.memoizedState = n : (e.memoizedState = o, e = gh(), Y.lanes |= e, Rl |= e, o); - } - function bt(e, n, o, i) { - return jt(o, n) ? o : hd.current !== null ? (e = gs(e, o, i), jt(e, n) || (Cn = !0), e) : (yi & 42) === 0 || (yi & 1073741824) !== 0 && (ae & 261930) === 0 ? (Cn = !0, e.memoizedState = o) : (e = gh(), Y.lanes |= e, Rl |= e, n); - } - function ys() { - x.asyncTransitions--; - } - function nt(e, n, o, i, s) { - var u = wt(); - an(u !== 0 && 8 > u ? u : 8); - var f = x.T, p = {}; - p._updatedFibers = /* @__PURE__ */ new Set(), x.T = p, Gi(e, !1, n, o); - try { - var g = s(), S = x.S; - if (S !== null && S(p, g), g !== null && typeof g == "object" && typeof g.then == "function") { - x.asyncTransitions++, g.then(ys, ys); - var T = Qd(g, i); - qi(e, n, T, Nt(e)); - } else qi(e, n, i, Nt(e)); - } catch (_) { - qi(e, n, { - then: function() {}, - status: "rejected", - reason: _ - }, Nt(e)); - } finally { - an(u), f !== null && p.types !== null && (f.types !== null && f.types !== p.types && console.error("We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React."), f.types = p.types), x.T = f, f === null && p._updatedFibers && (e = p._updatedFibers.size, p._updatedFibers.clear(), 10 < e && console.warn("Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.")); - } - } - function uf(e) { - var n = e.memoizedState; - if (n !== null) return n; - n = { - memoizedState: Xt, - baseState: Xt, - baseQueue: null, - queue: { - pending: null, - lanes: 0, - dispatch: null, - lastRenderedReducer: gr, - lastRenderedState: Xt - }, - next: null - }; - var o = {}; - return n.next = { - memoizedState: o, - baseState: o, - baseQueue: null, - queue: { - pending: null, - lanes: 0, - dispatch: null, - lastRenderedReducer: gr, - lastRenderedState: o - }, - next: null - }, e.memoizedState = n, e = e.alternate, e !== null && (e.memoizedState = n), n; - } - function tc() { - var e = fs(!1); - return e = nt.bind(null, Y, e.queue, !0, !1), Fn().memoizedState = e, [!1, e]; - } - function Qp() { - var e = Br(gr)[0], n = xe().memoizedState; - return [typeof e == "boolean" ? e : Co(e), n]; - } - function Ro() { - var e = Qi(gr)[0], n = xe().memoizedState; - return [typeof e == "boolean" ? e : Co(e), n]; - } - function ia() { - return Ee(Kt); - } - function bs() { - var e = Fn(), n = je.identifierPrefix; - if (ge) { - var o = ci, i = ui; - o = (i & ~(1 << 32 - vn(i) - 1)).toString(32) + o, n = "_" + n + "R_" + o, o = cm++, 0 < o && (n += "H" + o.toString(32)), n += "_"; - } else o = Qb++, n = "_" + n + "r_" + o.toString(32) + "_"; - return e.memoizedState = n; - } - function la() { - return Fn().memoizedState = $p.bind(null, Y); - } - function $p(e, n) { - for (var o = e.return; o !== null;) { - switch (o.tag) { - case 24: - case 3: - var i = Nt(o), s = zo(i), u = Mt(o, s, i); - u !== null && (ur(i, "refresh()", e), We(u, o, i), Bi(u, o, i)), e = Ai(), n != null && u !== null && console.error("The seed argument is not enabled outside experimental channels."), s.payload = { cache: e }; - return; - } - o = o.return; - } - } - function Vp(e, n, o) { - var i = arguments; - typeof i[3] == "function" && console.error("State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect()."), i = Nt(e); - var s = { - lane: i, - revertLane: 0, - gesture: null, - action: o, - hasEagerState: !1, - eagerState: null, - next: null - }; - Ji(e) ? qp(n, s) : (s = Hu(e, n, s, i), s !== null && (ur(i, "dispatch()", e), We(s, e, i), Gp(s, n, i))); - } - function cf(e, n, o) { - var i = arguments; - typeof i[3] == "function" && console.error("State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect()."), i = Nt(e), qi(e, n, o, i) && ur(i, "setState()", e); - } - function qi(e, n, o, i) { - var s = { - lane: i, - revertLane: 0, - gesture: null, - action: o, - hasEagerState: !1, - eagerState: null, - next: null - }; - if (Ji(e)) qp(n, s); - else { - var u = e.alternate; - if (e.lanes === 0 && (u === null || u.lanes === 0) && (u = n.lastRenderedReducer, u !== null)) { - var f = x.H; - x.H = $o; - try { - var p = n.lastRenderedState, g = u(p, o); - if (s.hasEagerState = !0, s.eagerState = g, jt(g, p)) return os(e, n, s, 0), je === null && Ui(), !1; - } catch {} finally { - x.H = f; - } - } - if (o = Hu(e, n, s, i), o !== null) return We(o, e, i), Gp(o, n, i), !0; - } - return !1; - } - function Gi(e, n, o, i) { - if (x.T === null && eu === 0 && console.error("An optimistic state update occurred outside a transition or action. To fix, move the update to an action, or wrap with startTransition."), i = { - lane: 2, - revertLane: Ru(), - gesture: null, - action: i, - hasEagerState: !1, - eagerState: null, - next: null - }, Ji(e)) { - if (n) throw Error("Cannot update optimistic state while rendering."); - console.error("Cannot call startTransition while rendering."); - } else n = Hu(e, o, i, 2), n !== null && (ur(2, "setOptimistic()", e), We(n, e, 2)); - } - function Ji(e) { - var n = e.alternate; - return e === Y || n !== null && n === Y; - } - function qp(e, n) { - yd = um = !0; - var o = e.pending; - o === null ? n.next = n : (n.next = o.next, o.next = n), e.pending = n; - } - function Gp(e, n, o) { - if ((o & 4194048) !== 0) { - var i = n.lanes; - i &= e.pendingLanes, o |= i, n.lanes = o, Ld(e, o); - } - } - function df(e) { - if (e !== null && typeof e != "function") { - var n = String(e); - Qy.has(n) || (Qy.add(n), console.error("Expected the last optional `callback` argument to be a function. Instead received: %s.", e)); - } - } - function rc(e, n, o, i) { - var s = e.memoizedState, u = o(i, s); - if (e.mode & 8) { - De(!0); - try { - u = o(i, s); - } finally { - De(!1); - } - } - u === void 0 && (n = $e(n) || "Component", Uy.has(n) || (Uy.add(n), console.error("%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.", n))), s = u == null ? s : ze({}, s, u), e.memoizedState = s, e.lanes === 0 && (e.updateQueue.baseState = s); - } - function ff(e, n, o, i, s, u, f) { - var p = e.stateNode; - if (typeof p.shouldComponentUpdate == "function") { - if (o = p.shouldComponentUpdate(i, u, f), e.mode & 8) { - De(!0); - try { - o = p.shouldComponentUpdate(i, u, f); - } finally { - De(!1); - } - } - return o === void 0 && console.error("%s.shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.", $e(n) || "Component"), o; - } - return n.prototype && n.prototype.isPureReactComponent ? !es(o, i) || !es(s, u) : !0; - } - function Qa(e, n, o, i) { - var s = n.state; - typeof n.componentWillReceiveProps == "function" && n.componentWillReceiveProps(o, i), typeof n.UNSAFE_componentWillReceiveProps == "function" && n.UNSAFE_componentWillReceiveProps(o, i), n.state !== s && (e = G(e) || "Component", Hy.has(e) || (Hy.add(e), console.error("%s.componentWillReceiveProps(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.", e)), zg.enqueueReplaceState(n, n.state, null)); - } - function Mr(e, n) { - var o = n; - if ("ref" in n) { - o = {}; - for (var i in n) i !== "ref" && (o[i] = n[i]); - } - if (e = e.defaultProps) { - o === n && (o = ze({}, o)); - for (var s in e) o[s] === void 0 && (o[s] = e[s]); - } - return o; - } - function vs(e, n) { - try { - bd = n.source ? G(n.source) : null, Cg = null; - var o = n.value; - if (x.actQueue !== null) x.thrownErrors.push(o); - else { - var i = e.onUncaughtError; - i(o, { componentStack: n.stack }); - } - } catch (s) { - setTimeout(function() { - throw s; - }); - } - } - function pf(e, n, o) { - try { - bd = o.source ? G(o.source) : null, Cg = G(n); - var i = e.onCaughtError; - i(o.value, { - componentStack: o.stack, - errorBoundary: n.tag === 1 ? n.stateNode : null - }); - } catch (s) { - setTimeout(function() { - throw s; - }); - } - } - function oc(e, n, o) { - return o = zo(o), o.tag = vg, o.payload = { element: null }, o.callback = function() { - B(n.source, vs, e, n); - }, o; - } - function ac(e) { - return e = zo(e), e.tag = vg, e; - } - function ic(e, n, o, i) { - var s = o.type.getDerivedStateFromError; - if (typeof s == "function") { - var u = i.value; - e.payload = function() { - return s(u); - }, e.callback = function() { - Ah(o), B(i.source, pf, n, o, i); - }; - } - var f = o.stateNode; - f !== null && typeof f.componentDidCatch == "function" && (e.callback = function() { - Ah(o), B(i.source, pf, n, o, i), typeof s != "function" && (Il === null ? Il = new Set([this]) : Il.add(this)), Ub(this, i), typeof s == "function" || !(o.lanes & 2) && console.error("%s: Error boundaries should implement getDerivedStateFromError(). In that method, return a state update to display an error message or fallback UI.", G(o) || "Unknown"); - }); - } - function Jp(e, n, o, i, s) { - if (o.flags |= 32768, wa && nl(e, s), i !== null && typeof i == "object" && typeof i.then == "function") { - if (n = o.alternate, n !== null && He(n, o, s, !0), ge && (xa = !0), o = _r.current, o !== null) { - switch (o.tag) { - case 31: - case 13: return Qo === null ? Pc() : o.alternate === null && nn === ki && (nn = vm), o.flags &= -257, o.flags |= 65536, o.lanes = s, i === im ? o.flags |= 16384 : (n = o.updateQueue, n === null ? o.updateQueue = new Set([i]) : n.add(i), Af(e, i, s)), !1; - case 22: return o.flags |= 65536, i === im ? o.flags |= 16384 : (n = o.updateQueue, n === null ? (n = { - transitions: null, - markerInstances: null, - retryQueue: new Set([i]) - }, o.updateQueue = n) : (o = n.retryQueue, o === null ? n.retryQueue = new Set([i]) : o.add(i)), Af(e, i, s)), !1; - } - throw Error("Unexpected Suspense handler tag (" + o.tag + "). This is a bug in React."); - } - return Af(e, i, s), Pc(), !1; - } - if (ge) return xa = !0, n = _r.current, n !== null ? (!(n.flags & 65536) && (n.flags |= 256), n.flags |= 65536, n.lanes = s, i !== rg && Fi(ft(Error("There was an error while hydrating but React was able to recover by instead client rendering from the nearest Suspense boundary.", { cause: i }), o))) : (i !== rg && Fi(ft(Error("There was an error while hydrating but React was able to recover by instead client rendering the entire root.", { cause: i }), o)), e = e.current.alternate, e.flags |= 65536, s &= -s, e.lanes |= s, i = ft(i, o), s = oc(e.stateNode, i, s), Ua(e, s), nn !== Tl && (nn = iu)), !1; - var u = ft(Error("There was an error during concurrent rendering but React was able to recover by instead synchronously rendering the entire root.", { cause: i }), o); - if (wp === null ? wp = [u] : wp.push(u), nn !== Tl && (nn = iu), n === null) return !0; - i = ft(i, o), o = n; - do { - switch (o.tag) { - case 3: return o.flags |= 65536, e = s & -s, o.lanes |= e, e = oc(o.stateNode, i, e), Ua(o, e), !1; - case 1: if (n = o.type, u = o.stateNode, (o.flags & 128) === 0 && (typeof n.getDerivedStateFromError == "function" || u !== null && typeof u.componentDidCatch == "function" && (Il === null || !Il.has(u)))) return o.flags |= 65536, s &= -s, o.lanes |= s, s = ac(s), ic(s, e, o, i), Ua(o, s), !1; - } - o = o.return; - } while (o !== null); - return !1; - } - function rn(e, n, o, i) { - n.child = e === null ? xy(n, null, o, i) : ou(n, e.child, o, i); - } - function hf(e, n, o, i, s) { - o = o.render; - var u = n.ref; - if ("ref" in i) { - var f = {}; - for (var p in i) p !== "ref" && (f[p] = i[p]); - } else f = i; - return sr(n), i = It(e, n, o, f, u, s), p = Mu(), e !== null && !Cn ? (Qu(e, n, s), vr(e, n, s)) : (ge && p && Ei(n), n.flags |= 1, rn(e, n, i, s), n.child); - } - function mf(e, n, o, i, s) { - if (e === null) { - var u = o.type; - return typeof u == "function" && !Tc(u) && u.defaultProps === void 0 && o.compare === null ? (o = Ya(u), n.tag = 15, n.type = o, Eo(n, u), ve(e, n, o, i, s)) : (e = _c(o.type, null, i, n, n.mode, s), e.ref = n.ref, e.return = n, n.child = e); - } - if (u = e.child, !ie(e, s)) { - var f = u.memoizedProps; - if (o = o.compare, o = o !== null ? o : es, o(f, i) && e.ref === n.ref) return vr(e, n, s); - } - return n.flags |= 1, e = Fo(u, i), e.ref = n.ref, e.return = n, n.child = e; - } - function ve(e, n, o, i, s) { - if (e !== null) { - var u = e.memoizedProps; - if (es(u, i) && e.ref === n.ref && n.type === e.type) if (Cn = !1, n.pendingProps = i = u, ie(e, s)) e.flags & 131072 && (Cn = !0); - else return n.lanes = e.lanes, vr(e, n, s); - } - return ks(e, n, o, i, s); - } - function lc(e, n, o, i) { - var s = i.children, u = e !== null ? e.memoizedState : null; - if (e === null && n.stateNode === null && (n.stateNode = { - _visibility: pp, - _pendingMarkers: null, - _retryCache: null, - _transitions: null - }), i.mode === "hidden") { - if ((n.flags & 128) !== 0) { - if (u = u !== null ? u.baseLanes | o : o, e !== null) { - for (i = n.child = e.child, s = 0; i !== null;) s = s | i.lanes | i.childLanes, i = i.sibling; - i = s & ~u; - } else i = 0, n.child = null; - return gf(e, n, u, o, i); - } - if ((o & 536870912) !== 0) n.memoizedState = { - baseLanes: 0, - cachePool: null - }, e !== null && Kl(n, u !== null ? u.cachePool : null), u !== null ? Kd(n, u) : Du(n), Uu(n); - else return i = n.lanes = 536870912, gf(e, n, u !== null ? u.baseLanes | o : o, o, i); - } else u !== null ? (Kl(n, u.cachePool), Kd(n, u), mr(n), n.memoizedState = null) : (e !== null && Kl(n, null), Du(n), mr(n)); - return rn(e, n, s, o), n.child; - } - function Ss(e, n) { - return e !== null && e.tag === 22 || n.stateNode !== null || (n.stateNode = { - _visibility: pp, - _pendingMarkers: null, - _retryCache: null, - _transitions: null - }), n.sibling; - } - function gf(e, n, o, i, s) { - var u = Eu(); - return u = u === null ? null : { - parent: at ? un._currentValue : un._currentValue2, - pool: u - }, n.memoizedState = { - baseLanes: o, - cachePool: u - }, e !== null && Kl(n, null), Du(n), Uu(n), e !== null && He(e, n, i, !0), n.childLanes = s, null; - } - function sc(e, n) { - var o = n.hidden; - return o !== void 0 && console.error(`<Activity> doesn't accept a hidden prop. Use mode="hidden" instead. -- <Activity %s> -+ <Activity %s>`, o === !0 ? "hidden" : o === !1 ? "hidden={false}" : "hidden={...}", o ? "mode=\"hidden\"" : "mode=\"visible\""), n = xs({ - mode: n.mode, - children: n.children - }, e.mode), n.ref = e.ref, e.child = n, n.return = e, n; - } - function Zp(e, n, o) { - return ou(n, e.child, null, o), e = sc(n, n.pendingProps), e.flags |= 2, et(n), n.memoizedState = null, e; - } - function Nm(e, n, o) { - var i = n.pendingProps, s = (n.flags & 128) !== 0; - if (n.flags &= -129, e === null) { - if (ge) { - if (i.mode === "hidden") return e = sc(n, i), n.lanes = 536870912, Ss(null, e); - if (Wu(n), (e = Ke) ? (o = ce(e, oo), o !== null && (i = { - dehydrated: o, - treeContext: Ul(), - retryLane: 536870912, - hydrationErrors: null - }, n.memoizedState = i, i = Xa(o), i.return = n, n.child = i, it = n, Ke = null)) : o = null, o === null) throw Ni(n, e), Fr(n); - return n.lanes = 536870912, null; - } - return sc(n, i); - } - var u = e.memoizedState; - if (u !== null) { - var f = u.dehydrated; - if (Wu(n), s) if (n.flags & 256) n.flags &= -257, n = Zp(e, n, o); - else if (n.memoizedState !== null) n.child = e.child, n.flags |= 128, n = null; - else throw Error("Client rendering an Activity suspended it again. This is a bug in React."); - else if (vo(), o & 536870912 && wc(n), Cn || He(e, n, o, !1), s = (o & e.childLanes) !== 0, Cn || s) { - if (i = je, i !== null && (f = Al(i, o), f !== 0 && f !== u.retryLane)) throw u.retryLane = f, On(e, f), We(i, e, f), Tg; - Pc(), n = Zp(e, n, o); - } else e = u.treeContext, qn && (Ke = Gc(f), it = n, ge = !0, kl = null, xa = !1, Tr = null, oo = !1, e !== null && Hd(n, e)), n = sc(n, i), n.flags |= 4096; - return n; - } - return u = e.child, i = { - mode: i.mode, - children: i.children - }, o & 536870912 && (o & e.lanes) !== 0 && wc(n), e = Fo(u, i), e.ref = n.ref, n.child = e, e.return = n, e; - } - function uc(e, n) { - var o = n.ref; - if (o === null) e !== null && e.ref !== null && (n.flags |= 4194816); - else { - if (typeof o != "function" && typeof o != "object") throw Error("Expected ref to be a function, an object returned by React.createRef(), or undefined/null."); - (e === null || e.ref !== o) && (n.flags |= 4194816); - } - } - function ks(e, n, o, i, s) { - if (o.prototype && typeof o.prototype.render == "function") { - var u = $e(o) || "Unknown"; - $y[u] || (console.error("The <%s /> component appears to have a render method, but doesn't extend React.Component. This is likely to cause errors. Change %s to extend React.Component instead.", u, u), $y[u] = !0); - } - return n.mode & 8 && Mo.recordLegacyContextWarning(n, null), e === null && (Eo(n, n.type), o.contextTypes && (u = $e(o) || "Unknown", qy[u] || (qy[u] = !0, console.error("%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with React.useContext() instead. (https://react.dev/link/legacy-context)", u)))), sr(n), o = It(e, n, o, i, void 0, s), i = Mu(), e !== null && !Cn ? (Qu(e, n, s), vr(e, n, s)) : (ge && i && Ei(n), n.flags |= 1, rn(e, n, o, s), n.child); - } - function Qr(e, n, o, i, s, u) { - return sr(n), vi = -1, gp = e !== null && e.type !== n.type, n.updateQueue = null, o = Ou(n, i, o, s), cs(e, n), i = Mu(), e !== null && !Cn ? (Qu(e, n, u), vr(e, n, u)) : (ge && i && Ei(n), n.flags |= 1, rn(e, n, o, u), n.child); - } - function yf(e, n, o, i, s) { - switch (pu(n)) { - case !1: - var u = n.stateNode, f = new n.type(n.memoizedProps, u.context).state; - u.updater.enqueueSetState(u, f, null); - break; - case !0: - n.flags |= 128, n.flags |= 65536, u = Error("Simulated error coming from DevTools"); - var p = s & -s; - if (n.lanes |= p, f = je, f === null) throw Error("Expected a work-in-progress root. This is a bug in React. Please file an issue."); - p = ac(p), ic(p, f, n, ft(u, n)), Ua(n, p); - } - if (sr(n), n.stateNode === null) { - if (f = Oe, u = o.contextType, "contextType" in o && u !== null && (u === void 0 || u.$$typeof !== on) && !My.has(o) && (My.add(o), p = u === void 0 ? " However, it is set to undefined. This can be caused by a typo or by mixing up named and default imports. This can also happen due to a circular dependency, so try moving the createContext() call to a separate file." : typeof u != "object" ? " However, it is set to a " + typeof u + "." : u.$$typeof === ei ? " Did you accidentally pass the Context.Consumer instead?" : " However, it is set to an object with keys {" + Object.keys(u).join(", ") + "}.", console.error("%s defines an invalid contextType. contextType should point to the Context object returned by React.createContext().%s", $e(o) || "Component", p)), typeof u == "object" && u !== null && (f = Ee(u)), u = new o(i, f), n.mode & 8) { - De(!0); - try { - u = new o(i, f); - } finally { - De(!1); - } - } - if (f = n.memoizedState = u.state !== null && u.state !== void 0 ? u.state : null, u.updater = zg, n.stateNode = u, u._reactInternals = n, u._reactInternalInstance = Fy, typeof o.getDerivedStateFromProps == "function" && f === null && (f = $e(o) || "Component", Ay.has(f) || (Ay.add(f), console.error("`%s` uses `getDerivedStateFromProps` but its initial state is %s. This is not recommended. Instead, define the initial state by assigning an object to `this.state` in the constructor of `%s`. This ensures that `getDerivedStateFromProps` arguments have a consistent shape.", f, u.state === null ? "null" : "undefined", f))), typeof o.getDerivedStateFromProps == "function" || typeof u.getSnapshotBeforeUpdate == "function") { - var g = p = f = null; - if (typeof u.componentWillMount == "function" && u.componentWillMount.__suppressDeprecationWarning !== !0 ? f = "componentWillMount" : typeof u.UNSAFE_componentWillMount == "function" && (f = "UNSAFE_componentWillMount"), typeof u.componentWillReceiveProps == "function" && u.componentWillReceiveProps.__suppressDeprecationWarning !== !0 ? p = "componentWillReceiveProps" : typeof u.UNSAFE_componentWillReceiveProps == "function" && (p = "UNSAFE_componentWillReceiveProps"), typeof u.componentWillUpdate == "function" && u.componentWillUpdate.__suppressDeprecationWarning !== !0 ? g = "componentWillUpdate" : typeof u.UNSAFE_componentWillUpdate == "function" && (g = "UNSAFE_componentWillUpdate"), f !== null || p !== null || g !== null) { - u = $e(o) || "Component"; - var S = typeof o.getDerivedStateFromProps == "function" ? "getDerivedStateFromProps()" : "getSnapshotBeforeUpdate()"; - Dy.has(u) || (Dy.add(u), console.error(`Unsafe legacy lifecycles will not be called for components using new component APIs. - -%s uses %s but also contains the following legacy lifecycles:%s%s%s - -The above lifecycles should be removed. Learn more about this warning here: -https://react.dev/link/unsafe-component-lifecycles`, u, S, f !== null ? ` - ` + f : "", p !== null ? ` - ` + p : "", g !== null ? ` - ` + g : "")); - } - } - u = n.stateNode, f = $e(o) || "Component", u.render || (o.prototype && typeof o.prototype.render == "function" ? console.error("No `render` method found on the %s instance: did you accidentally return an object from the constructor?", f) : console.error("No `render` method found on the %s instance: you may have forgotten to define `render`.", f)), !u.getInitialState || u.getInitialState.isReactClassApproved || u.state || console.error("getInitialState was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Did you mean to define a state property instead?", f), u.getDefaultProps && !u.getDefaultProps.isReactClassApproved && console.error("getDefaultProps was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Use a static property to define defaultProps instead.", f), u.contextType && console.error("contextType was defined as an instance property on %s. Use a static property to define contextType instead.", f), o.childContextTypes && !Oy.has(o) && (Oy.add(o), console.error("%s uses the legacy childContextTypes API which was removed in React 19. Use React.createContext() instead. (https://react.dev/link/legacy-context)", f)), o.contextTypes && !By.has(o) && (By.add(o), console.error("%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with static contextType instead. (https://react.dev/link/legacy-context)", f)), typeof u.componentShouldUpdate == "function" && console.error("%s has a method called componentShouldUpdate(). Did you mean shouldComponentUpdate()? The name is phrased as a question because the function is expected to return a value.", f), o.prototype && o.prototype.isPureReactComponent && typeof u.shouldComponentUpdate < "u" && console.error("%s has a method called shouldComponentUpdate(). shouldComponentUpdate should not be used when extending React.PureComponent. Please extend React.Component if shouldComponentUpdate is used.", $e(o) || "A pure component"), typeof u.componentDidUnmount == "function" && console.error("%s has a method called componentDidUnmount(). But there is no such lifecycle method. Did you mean componentWillUnmount()?", f), typeof u.componentDidReceiveProps == "function" && console.error("%s has a method called componentDidReceiveProps(). But there is no such lifecycle method. If you meant to update the state in response to changing props, use componentWillReceiveProps(). If you meant to fetch data or run side-effects or mutations after React has updated the UI, use componentDidUpdate().", f), typeof u.componentWillRecieveProps == "function" && console.error("%s has a method called componentWillRecieveProps(). Did you mean componentWillReceiveProps()?", f), typeof u.UNSAFE_componentWillRecieveProps == "function" && console.error("%s has a method called UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?", f), p = u.props !== i, u.props !== void 0 && p && console.error("When calling super() in `%s`, make sure to pass up the same props that your component's constructor was passed.", f), u.defaultProps && console.error("Setting defaultProps as an instance property on %s is not supported and will be ignored. Instead, define defaultProps as a static property on %s.", f, f), typeof u.getSnapshotBeforeUpdate != "function" || typeof u.componentDidUpdate == "function" || jy.has(o) || (jy.add(o), console.error("%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). This component defines getSnapshotBeforeUpdate() only.", $e(o))), typeof u.getDerivedStateFromProps == "function" && console.error("%s: getDerivedStateFromProps() is defined as an instance method and will be ignored. Instead, declare it as a static method.", f), typeof u.getDerivedStateFromError == "function" && console.error("%s: getDerivedStateFromError() is defined as an instance method and will be ignored. Instead, declare it as a static method.", f), typeof o.getSnapshotBeforeUpdate == "function" && console.error("%s: getSnapshotBeforeUpdate() is defined as a static method and will be ignored. Instead, declare it as an instance method.", f), (p = u.state) && (typeof p != "object" || fn(p)) && console.error("%s.state: must be set to an object or null", f), typeof u.getChildContext == "function" && typeof o.childContextTypes != "object" && console.error("%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().", f), u = n.stateNode, u.props = i, u.state = n.memoizedState, u.refs = {}, Au(n), f = o.contextType, u.context = typeof f == "object" && f !== null ? Ee(f) : Oe, u.state === i && (f = $e(o) || "Component", Wy.has(f) || (Wy.add(f), console.error("%s: It is not recommended to assign props directly to state because updates to props won't be reflected in state. In most cases, it is better to use props directly.", f))), n.mode & 8 && Mo.recordLegacyContextWarning(n, u), Mo.recordUnsafeLifecycleWarnings(n, u), u.state = n.memoizedState, f = o.getDerivedStateFromProps, typeof f == "function" && (rc(n, o, f, i), u.state = n.memoizedState), typeof o.getDerivedStateFromProps == "function" || typeof u.getSnapshotBeforeUpdate == "function" || typeof u.UNSAFE_componentWillMount != "function" && typeof u.componentWillMount != "function" || (f = u.state, typeof u.componentWillMount == "function" && u.componentWillMount(), typeof u.UNSAFE_componentWillMount == "function" && u.UNSAFE_componentWillMount(), f !== u.state && (console.error("%s.componentWillMount(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.", G(n) || "Component"), zg.enqueueReplaceState(u, u.state, null)), is(n, i, u, s), Oi(), u.state = n.memoizedState), typeof u.componentDidMount == "function" && (n.flags |= 4194308), (n.mode & 16) !== Z && (n.flags |= 134217728), u = !0; - } else if (e === null) { - u = n.stateNode; - var T = n.memoizedProps; - p = Mr(o, T), u.props = p; - var _ = u.context; - g = o.contextType, f = Oe, typeof g == "object" && g !== null && (f = Ee(g)), S = o.getDerivedStateFromProps, g = typeof S == "function" || typeof u.getSnapshotBeforeUpdate == "function", T = n.pendingProps !== T, g || typeof u.UNSAFE_componentWillReceiveProps != "function" && typeof u.componentWillReceiveProps != "function" || (T || _ !== f) && Qa(n, u, i, f), Cl = !1; - var I = n.memoizedState; - u.state = I, is(n, i, u, s), Oi(), _ = n.memoizedState, T || I !== _ || Cl ? (typeof S == "function" && (rc(n, o, S, i), _ = n.memoizedState), (p = Cl || ff(n, o, p, i, I, _, f)) ? (g || typeof u.UNSAFE_componentWillMount != "function" && typeof u.componentWillMount != "function" || (typeof u.componentWillMount == "function" && u.componentWillMount(), typeof u.UNSAFE_componentWillMount == "function" && u.UNSAFE_componentWillMount()), typeof u.componentDidMount == "function" && (n.flags |= 4194308), (n.mode & 16) !== Z && (n.flags |= 134217728)) : (typeof u.componentDidMount == "function" && (n.flags |= 4194308), (n.mode & 16) !== Z && (n.flags |= 134217728), n.memoizedProps = i, n.memoizedState = _), u.props = i, u.state = _, u.context = f, u = p) : (typeof u.componentDidMount == "function" && (n.flags |= 4194308), (n.mode & 16) !== Z && (n.flags |= 134217728), u = !1); - } else { - u = n.stateNode, ju(e, n), f = n.memoizedProps, g = Mr(o, f), u.props = g, S = n.pendingProps, I = u.context, _ = o.contextType, p = Oe, typeof _ == "object" && _ !== null && (p = Ee(_)), T = o.getDerivedStateFromProps, (_ = typeof T == "function" || typeof u.getSnapshotBeforeUpdate == "function") || typeof u.UNSAFE_componentWillReceiveProps != "function" && typeof u.componentWillReceiveProps != "function" || (f !== S || I !== p) && Qa(n, u, i, p), Cl = !1, I = n.memoizedState, u.state = I, is(n, i, u, s), Oi(); - var O = n.memoizedState; - f !== S || I !== O || Cl || e !== null && e.dependencies !== null && ja(e.dependencies) ? (typeof T == "function" && (rc(n, o, T, i), O = n.memoizedState), (g = Cl || ff(n, o, g, i, I, O, p) || e !== null && e.dependencies !== null && ja(e.dependencies)) ? (_ || typeof u.UNSAFE_componentWillUpdate != "function" && typeof u.componentWillUpdate != "function" || (typeof u.componentWillUpdate == "function" && u.componentWillUpdate(i, O, p), typeof u.UNSAFE_componentWillUpdate == "function" && u.UNSAFE_componentWillUpdate(i, O, p)), typeof u.componentDidUpdate == "function" && (n.flags |= 4), typeof u.getSnapshotBeforeUpdate == "function" && (n.flags |= 1024)) : (typeof u.componentDidUpdate != "function" || f === e.memoizedProps && I === e.memoizedState || (n.flags |= 4), typeof u.getSnapshotBeforeUpdate != "function" || f === e.memoizedProps && I === e.memoizedState || (n.flags |= 1024), n.memoizedProps = i, n.memoizedState = O), u.props = i, u.state = O, u.context = p, u = g) : (typeof u.componentDidUpdate != "function" || f === e.memoizedProps && I === e.memoizedState || (n.flags |= 4), typeof u.getSnapshotBeforeUpdate != "function" || f === e.memoizedProps && I === e.memoizedState || (n.flags |= 1024), u = !1); - } - if (p = u, uc(e, n), f = (n.flags & 128) !== 0, p || f) { - if (p = n.stateNode, Ql(n), f && typeof o.getDerivedStateFromError != "function") o = null, Dt = -1; - else if (o = cy(p), n.mode & 8) { - De(!0); - try { - cy(p); - } finally { - De(!1); - } - } - n.flags |= 1, e !== null && f ? (n.child = ou(n, e.child, null, s), n.child = ou(n, null, o, s)) : rn(e, n, o, s), n.memoizedState = p.state, e = n.child; - } else e = vr(e, n, s); - return s = n.stateNode, u && s.props !== i && (vd || console.error("It looks like %s is reassigning its own `this.props` while rendering. This is not supported and can lead to confusing bugs.", G(n) || "a component"), vd = !0), e; - } - function ws(e, n, o, i) { - return wo(), n.flags |= 256, rn(e, n, o, i), n.child; - } - function Eo(e, n) { - n && n.childContextTypes && console.error(`childContextTypes cannot be defined on a function component. - %s.childContextTypes = ...`, n.displayName || n.name || "Component"), typeof n.getDerivedStateFromProps == "function" && (e = $e(n) || "Unknown", Gy[e] || (console.error("%s: Function components do not support getDerivedStateFromProps.", e), Gy[e] = !0)), typeof n.contextType == "object" && n.contextType !== null && (n = $e(n) || "Unknown", Vy[n] || (console.error("%s: Function components do not support contextType.", n), Vy[n] = !0)); - } - function Ps(e) { - return { - baseLanes: e, - cachePool: Iu() - }; - } - function cc(e, n, o) { - return e = e !== null ? e.childLanes & ~o : 0, n && (e |= rr), e; - } - function dc(e, n, o) { - var i = n.pendingProps; - fu(n) && (n.flags |= 128); - var s = !1, u = (n.flags & 128) !== 0, f; - if ((f = u) || (f = e !== null && e.memoizedState === null ? !1 : (Sn.current & hp) !== 0), f && (s = !0, n.flags &= -129), f = (n.flags & 32) !== 0, n.flags &= -33, e === null) { - if (ge) { - if (s ? Ur(n) : mr(n), (e = Ke) ? (o = Ne(e, oo), o !== null && (f = { - dehydrated: o, - treeContext: Ul(), - retryLane: 536870912, - hydrationErrors: null - }, n.memoizedState = f, f = Xa(o), f.return = n, n.child = f, it = n, Ke = null)) : o = null, o === null) throw Ni(n, e), Fr(n); - return $c(o) ? n.lanes = 32 : n.lanes = 536870912, null; - } - var p = i.children; - return i = i.fallback, s ? (mr(n), s = n.mode, p = xs({ - mode: "hidden", - children: p - }, s), i = fa(i, s, o, null), p.return = n, i.return = n, p.sibling = i, n.child = p, i = n.child, i.memoizedState = Ps(o), i.childLanes = cc(e, f, o), n.memoizedState = _g, Ss(null, i)) : (Ur(n), bf(n, p)); - } - var g = e.memoizedState; - if (g !== null && (p = g.dehydrated, p !== null)) { - if (u) n.flags & 256 ? (Ur(n), n.flags &= -257, n = fc(e, n, o)) : n.memoizedState !== null ? (mr(n), n.child = e.child, n.flags |= 128, n = null) : (mr(n), p = i.fallback, s = n.mode, i = xs({ - mode: "visible", - children: i.children - }, s), p = fa(p, s, o, null), p.flags |= 2, i.return = n, p.return = n, i.sibling = p, n.child = i, ou(n, e.child, null, o), i = n.child, i.memoizedState = Ps(o), i.childLanes = cc(e, f, o), n.memoizedState = _g, n = Ss(null, i)); - else if (Ur(n), vo(), o & 536870912 && wc(n), $c(p)) s = Pn(p), f = s.digest, p = s.message, i = s.stack, s = s.componentStack, p = Error(p || "The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering."), p.stack = i || "", p.digest = f, f = s === void 0 ? null : s, i = { - value: p, - source: null, - stack: f - }, typeof f == "string" && tg.set(p, i), Fi(i), n = fc(e, n, o); - else if (Cn || He(e, n, o, !1), f = (o & e.childLanes) !== 0, Cn || f) { - if (f = je, f !== null && (i = Al(f, o), i !== 0 && i !== g.retryLane)) throw g.retryLane = i, On(e, i), We(f, e, i), Tg; - Ms(p) || Pc(), n = fc(e, n, o); - } else Ms(p) ? (n.flags |= 192, n.child = e.child, n = null) : (e = g.treeContext, qn && (Ke = Jc(p), it = n, ge = !0, kl = null, xa = !1, Tr = null, oo = !1, e !== null && Hd(n, e)), n = bf(n, i.children), n.flags |= 4096); - return n; - } - return s ? (mr(n), p = i.fallback, s = n.mode, g = e.child, u = g.sibling, i = Fo(g, { - mode: "hidden", - children: i.children - }), i.subtreeFlags = g.subtreeFlags & 65011712, u !== null ? p = Fo(u, p) : (p = fa(p, s, o, null), p.flags |= 2), p.return = n, i.return = n, i.sibling = p, n.child = i, Ss(null, i), i = n.child, p = e.child.memoizedState, p === null ? p = Ps(o) : (s = p.cachePool, s !== null ? (g = at ? un._currentValue : un._currentValue2, s = s.parent !== g ? { - parent: g, - pool: g - } : s) : s = Iu(), p = { - baseLanes: p.baseLanes | o, - cachePool: s - }), i.memoizedState = p, i.childLanes = cc(e, f, o), n.memoizedState = _g, Ss(e.child, i)) : (g !== null && (o & 62914560) === o && (o & e.lanes) !== 0 && wc(n), Ur(n), o = e.child, e = o.sibling, o = Fo(o, { - mode: "visible", - children: i.children - }), o.return = n, o.sibling = null, e !== null && (f = n.deletions, f === null ? (n.deletions = [e], n.flags |= 16) : f.push(e)), n.child = o, n.memoizedState = null, o); - } - function bf(e, n) { - return n = xs({ - mode: "visible", - children: n - }, e.mode), n.return = e, e.child = n; - } - function xs(e, n) { - return e = lt(22, e, null, n), e.lanes = 0, e; - } - function fc(e, n, o) { - return ou(n, e.child, null, o), e = bf(n, n.pendingProps.children), e.flags |= 2, n.memoizedState = null, e; - } - function vf(e, n, o) { - e.lanes |= n; - var i = e.alternate; - i !== null && (i.lanes |= n), Vl(e.return, n, o); - } - function pc(e, n, o, i, s, u) { - var f = e.memoizedState; - f === null ? e.memoizedState = { - isBackwards: n, - rendering: null, - renderingStartTime: 0, - last: i, - tail: o, - tailMode: s, - treeForkCount: u - } : (f.isBackwards = n, f.rendering = null, f.renderingStartTime = 0, f.last = i, f.tail = o, f.tailMode = s, f.treeForkCount = u); - } - function Sf(e, n, o) { - var _s2; - var i = n.pendingProps, s = i.revealOrder, u = i.tail, f = i.children, p = Sn.current; - if ((i = (p & hp) !== 0) ? (p = p & md | hp, n.flags |= 128) : p &= md, pe(Sn, p, n), p = (_s2 = s) != null ? _s2 : "null", s !== "forwards" && s !== "unstable_legacy-backwards" && s !== "together" && s !== "independent" && !Jy[p]) if (Jy[p] = !0, s == null) console.error("The default for the <SuspenseList revealOrder=\"...\"> prop is changing. To be future compatible you must explictly specify either \"independent\" (the current default), \"together\", \"forwards\" or \"legacy_unstable-backwards\"."); - else if (s === "backwards") console.error("The rendering order of <SuspenseList revealOrder=\"backwards\"> is changing. To be future compatible you must specify revealOrder=\"legacy_unstable-backwards\" instead."); - else if (typeof s == "string") switch (s.toLowerCase()) { - case "together": - case "forwards": - case "backwards": - case "independent": - console.error("\"%s\" is not a valid value for revealOrder on <SuspenseList />. Use lowercase \"%s\" instead.", s, s.toLowerCase()); - break; - case "forward": - case "backward": - console.error("\"%s\" is not a valid value for revealOrder on <SuspenseList />. React uses the -s suffix in the spelling. Use \"%ss\" instead.", s, s.toLowerCase()); - break; - default: console.error("\"%s\" is not a supported revealOrder on <SuspenseList />. Did you mean \"independent\", \"together\", \"forwards\" or \"backwards\"?", s); - } - else console.error("%s is not a supported value for revealOrder on <SuspenseList />. Did you mean \"independent\", \"together\", \"forwards\" or \"backwards\"?", s); - p = u != null ? u : "null", fm[p] || (u == null ? (s === "forwards" || s === "backwards" || s === "unstable_legacy-backwards") && (fm[p] = !0, console.error("The default for the <SuspenseList tail=\"...\"> prop is changing. To be future compatible you must explictly specify either \"visible\" (the current default), \"collapsed\" or \"hidden\".")) : u !== "visible" && u !== "collapsed" && u !== "hidden" ? (fm[p] = !0, console.error("\"%s\" is not a supported value for tail on <SuspenseList />. Did you mean \"visible\", \"collapsed\" or \"hidden\"?", u)) : s !== "forwards" && s !== "backwards" && s !== "unstable_legacy-backwards" && (fm[p] = !0, console.error("<SuspenseList tail=\"%s\" /> is only valid if revealOrder is \"forwards\" or \"backwards\". Did you mean to specify revealOrder=\"forwards\"?", u))); - e: if ((s === "forwards" || s === "backwards" || s === "unstable_legacy-backwards") && f !== void 0 && f !== null && f !== !1) if (fn(f)) { - for (p = 0; p < f.length; p++) if (!Zd(f[p], p)) break e; - } else if (p = Yo(f), typeof p == "function") { - if (p = p.call(f)) for (var g = p.next(), S = 0; !g.done; g = p.next()) { - if (!Zd(g.value, S)) break e; - S++; - } - } else console.error("A single row was passed to a <SuspenseList revealOrder=\"%s\" />. This is not useful since it needs multiple rows. Did you mean to pass multiple children or an array?", s); - if (rn(e, n, f, o), ge ? (mo(), f = Xf) : f = 0, !i && e !== null && (e.flags & 128) !== 0) e: for (e = n.child; e !== null;) { - if (e.tag === 13) e.memoizedState !== null && vf(e, o, n); - else if (e.tag === 19) vf(e, o, n); - else if (e.child !== null) { - e.child.return = e, e = e.child; - continue; - } - if (e === n) break e; - for (; e.sibling === null;) { - if (e.return === null || e.return === n) break e; - e = e.return; - } - e.sibling.return = e.return, e = e.sibling; - } - switch (s) { - case "forwards": - for (o = n.child, s = null; o !== null;) e = o.alternate, e !== null && us(e) === null && (s = o), o = o.sibling; - o = s, o === null ? (s = n.child, n.child = null) : (s = o.sibling, o.sibling = null), pc(n, !1, s, o, u, f); - break; - case "backwards": - case "unstable_legacy-backwards": - for (o = null, s = n.child, n.child = null; s !== null;) { - if (e = s.alternate, e !== null && us(e) === null) { - n.child = s; - break; - } - e = s.sibling, s.sibling = o, o = s, s = e; - } - pc(n, !0, o, null, u, f); - break; - case "together": - pc(n, !1, null, null, void 0, f); - break; - default: n.memoizedState = null; - } - return n.child; - } - function vr(e, n, o) { - if (e !== null && (n.dependencies = e.dependencies), Dt = -1, Rl |= n.lanes, (o & n.childLanes) === 0) if (e !== null) { - if (He(e, n, o, !1), (o & n.childLanes) === 0) return null; - } else return null; - if (e !== null && n.child !== e.child) throw Error("Resuming work not yet implemented."); - if (n.child !== null) { - for (e = n.child, o = Fo(e, e.pendingProps), n.child = o, o.return = n; e.sibling !== null;) e = e.sibling, o = o.sibling = Fo(e, e.pendingProps), o.return = n; - o.sibling = null; - } - return n.child; - } - function ie(e, n) { - return (e.lanes & n) !== 0 ? !0 : (e = e.dependencies, !!(e !== null && ja(e))); - } - function Fm(e, n, o) { - switch (n.tag) { - case 3: - Bl(n, n.stateNode.containerInfo), Hr(n, un, e.memoizedState.cache), wo(); - break; - case 27: - case 5: - La(n); - break; - case 4: - Bl(n, n.stateNode.containerInfo); - break; - case 10: - Hr(n, n.type, n.memoizedProps.value); - break; - case 12: - (o & n.childLanes) !== 0 && (n.flags |= 4), n.flags |= 2048; - var i = n.stateNode; - i.effectDuration = -0, i.passiveEffectDuration = -0; - break; - case 31: - if (n.memoizedState !== null) return n.flags |= 128, Wu(n), null; - break; - case 13: - if (i = n.memoizedState, i !== null) return i.dehydrated !== null ? (Ur(n), n.flags |= 128, null) : (o & n.child.childLanes) !== 0 ? dc(e, n, o) : (Ur(n), e = vr(e, n, o), e !== null ? e.sibling : null); - Ur(n); - break; - case 19: - var s = (e.flags & 128) !== 0; - if (i = (o & n.childLanes) !== 0, i || (He(e, n, o, !1), i = (o & n.childLanes) !== 0), s) { - if (i) return Sf(e, n, o); - n.flags |= 128; - } - if (s = n.memoizedState, s !== null && (s.rendering = null, s.tail = null, s.lastEffect = null), pe(Sn, Sn.current, n), i) break; - return null; - case 22: return n.lanes = 0, lc(e, n, o, n.pendingProps); - case 24: Hr(n, un, e.memoizedState.cache); - } - return vr(e, n, o); - } - function tt(e, n, o) { - if (n._debugNeedsRemount && e !== null) { - o = _c(n.type, n.key, n.pendingProps, n._debugOwner || null, n.mode, n.lanes), o._debugStack = n._debugStack, o._debugTask = n._debugTask; - var i = n.return; - if (i === null) throw Error("Cannot swap the root fiber."); - if (e.alternate = null, n.alternate = null, o.index = n.index, o.sibling = n.sibling, o.return = n.return, o.ref = n.ref, o._debugInfo = n._debugInfo, n === i.child) i.child = o; - else { - var s = i.child; - if (s === null) throw Error("Expected parent to have a child."); - for (; s.sibling !== n;) if (s = s.sibling, s === null) throw Error("Expected to find the previous sibling."); - s.sibling = o; - } - return n = i.deletions, n === null ? (i.deletions = [e], i.flags |= 16) : n.push(e), o.flags |= 2, o; - } - if (e !== null) if (e.memoizedProps !== n.pendingProps || n.type !== e.type) Cn = !0; - else { - if (!ie(e, o) && (n.flags & 128) === 0) return Cn = !1, Fm(e, n, o); - Cn = (e.flags & 131072) !== 0; - } - else Cn = !1, (i = ge) && (mo(), i = (n.flags & 1048576) !== 0), i && (i = n.index, mo(), wu(n, Xf, i)); - switch (n.lanes = 0, n.tag) { - case 16: - e: if (i = n.pendingProps, e = xo(n.elementType), n.type = e, typeof e == "function") Tc(e) ? (i = Mr(e, i), n.tag = 1, n.type = e = Ya(e), n = yf(null, n, e, i, o)) : (n.tag = 0, Eo(n, e), n.type = e = Ya(e), n = ks(null, n, e, i, o)); - else { - if (e != null) { - if (s = e.$$typeof, s === jn) { - n.tag = 11, n.type = e = Cc(e), n = hf(null, n, e, i, o); - break e; - } else if (s === al) { - n.tag = 14, n = mf(null, n, e, i, o); - break e; - } - } - throw n = "", e !== null && typeof e == "object" && e.$$typeof === kt && (n = " Did you wrap a component in React.lazy() more than once?"), e = $e(e) || e, Error("Element type is invalid. Received a promise that resolves to: " + e + ". Lazy element type must resolve to a class or function." + n); - } - return n; - case 0: return ks(e, n, n.type, n.pendingProps, o); - case 1: return i = n.type, s = Mr(i, n.pendingProps), yf(e, n, i, s, o); - case 3: - e: { - if (Bl(n, n.stateNode.containerInfo), e === null) throw Error("Should have a current fiber. This is a bug in React."); - var u = n.pendingProps; - s = n.memoizedState, i = s.element, ju(e, n), is(n, u, null, o); - var f = n.memoizedState; - if (u = f.cache, Hr(n, un, u), u !== s.cache && Ln(n, [un], o, !0), Oi(), u = f.element, qn && s.isDehydrated) if (s = { - element: u, - isDehydrated: !1, - cache: f.cache - }, n.updateQueue.baseState = s, n.memoizedState = s, n.flags & 256) { - n = ws(e, n, u, o); - break e; - } else if (u !== i) { - i = ft(Error("This root received an early update, before anything was able hydrate. Switched the entire root to client rendering."), n), Fi(i), n = ws(e, n, u, o); - break e; - } else for (qn && (Ke = qc(n.stateNode.containerInfo), it = n, ge = !0, kl = null, xa = !1, Tr = null, oo = !0), e = xy(n, null, u, o), n.child = e; e;) e.flags = e.flags & -3 | 4096, e = e.sibling; - else { - if (wo(), u === i) { - n = vr(e, n, o); - break e; - } - rn(e, n, u, o); - } - n = n.child; - } - return n; - case 26: if (Re) return uc(e, n), e === null ? (e = no(n.type, null, n.pendingProps, null)) ? n.memoizedState = e : ge || (n.stateNode = t(n.type, n.pendingProps, pt(Sl.current), n)) : n.memoizedState = no(n.type, e.memoizedProps, n.pendingProps, e.memoizedState), null; - case 27: if (d) return La(n), e === null && d && ge && (s = pt(Sl.current), i = Rt(), s = n.stateNode = h(n.type, n.pendingProps, s, i, !1), xa || (i = Vs(s, n.type, n.pendingProps, i), i !== null && (bo(n, 0).serverProps = i)), it = n, oo = !0, Ke = Zc(n.type, s, Ke)), rn(e, n, n.pendingProps.children, o), uc(e, n), e === null && (n.flags |= 4194304), n.child; - case 5: return e === null && ge && (u = Rt(), i = Xc(n.type, n.pendingProps, u), s = Ke, (f = !s) || (f = Qs(s, n.type, n.pendingProps, oo), f !== null ? (n.stateNode = f, xa || (u = Vs(f, n.type, n.pendingProps, u), u !== null && (bo(n, 0).serverProps = u)), it = n, Ke = Vc(f), oo = !1, u = !0) : u = !1, f = !u), f && (i && Ni(n, s), Fr(n))), La(n), s = n.type, u = n.pendingProps, f = e !== null ? e.memoizedProps : null, i = u.children, ue(s, u) ? i = null : f !== null && ue(s, f) && (n.flags |= 32), n.memoizedState !== null && (s = It(e, n, ef, null, null, o), at ? Kt._currentValue = s : Kt._currentValue2 = s), uc(e, n), rn(e, n, i, o), n.child; - case 6: return e === null && ge && (e = n.pendingProps, o = Rt(), e = va(e, o), o = Ke, (i = !o) || (i = Ym(o, n.pendingProps, oo), i !== null ? (n.stateNode = i, it = n, Ke = null, i = !0) : i = !1, i = !i), i && (e && Ni(n, o), Fr(n))), null; - case 13: return dc(e, n, o); - case 4: return Bl(n, n.stateNode.containerInfo), i = n.pendingProps, e === null ? n.child = ou(n, null, i, o) : rn(e, n, i, o), n.child; - case 11: return hf(e, n, n.type, n.pendingProps, o); - case 7: return rn(e, n, n.pendingProps, o), n.child; - case 8: return rn(e, n, n.pendingProps.children, o), n.child; - case 12: return n.flags |= 4, n.flags |= 2048, i = n.stateNode, i.effectDuration = -0, i.passiveEffectDuration = -0, rn(e, n, n.pendingProps.children, o), n.child; - case 10: return i = n.type, s = n.pendingProps, u = s.value, "value" in s || Zy || (Zy = !0, console.error("The `value` prop is required for the `<Context.Provider>`. Did you misspell it or forget to pass it?")), Hr(n, i, u), rn(e, n, s.children, o), n.child; - case 9: return s = n.type._context, i = n.pendingProps.children, typeof i != "function" && console.error("A context consumer was rendered with multiple children, or a child that isn't a function. A context consumer expects a single child that is a function. If you did pass a function, make sure there is no trailing or leading whitespace around it."), sr(n), s = Ee(s), i = hg(i, s, void 0), n.flags |= 1, rn(e, n, i, o), n.child; - case 14: return mf(e, n, n.type, n.pendingProps, o); - case 15: return ve(e, n, n.type, n.pendingProps, o); - case 19: return Sf(e, n, o); - case 31: return Nm(e, n, o); - case 22: return lc(e, n, o, n.pendingProps); - case 24: return sr(n), i = Ee(un), e === null ? (s = Eu(), s === null && (s = je, u = Ai(), s.pooledCache = u, Po(u), u !== null && (s.pooledCacheLanes |= o), s = u), n.memoizedState = { - parent: i, - cache: s - }, Au(n), Hr(n, un, s)) : ((e.lanes & o) !== 0 && (ju(e, n), is(n, null, null, o), Oi()), s = e.memoizedState, u = n.memoizedState, s.parent !== i ? (s = { - parent: i, - cache: i - }, n.memoizedState = s, n.lanes === 0 && (n.memoizedState = n.updateQueue.baseState = s), Hr(n, un, i)) : (i = u.cache, Hr(n, un, i), i !== s.cache && Ln(n, [un], o, !0))), rn(e, n, n.pendingProps.children, o), n.child; - case 29: throw n.pendingProps; - } - throw Error("Unknown unit of work tag (" + n.tag + "). This error is likely caused by a bug in React. Please file an issue."); - } - function Lt(e) { - e.flags |= 4; - } - function hc(e) { - Xr && (e.flags |= 8); - } - function zs(e, n) { - if (e !== null && e.child === n.child) return !1; - if ((n.flags & 16) !== 0) return !0; - for (e = n.child; e !== null;) { - if ((e.flags & 8218) !== 0 || (e.subtreeFlags & 8218) !== 0) return !0; - e = e.sibling; - } - return !1; - } - function sa(e, n, o, i) { - if (Be) for (o = n.child; o !== null;) { - if (o.tag === 5 || o.tag === 6) bn(e, o.stateNode); - else if (!(o.tag === 4 || d && o.tag === 27) && o.child !== null) { - o.child.return = o, o = o.child; - continue; - } - if (o === n) break; - for (; o.sibling === null;) { - if (o.return === null || o.return === n) return; - o = o.return; - } - o.sibling.return = o.return, o = o.sibling; - } - else if (Xr) for (var s = n.child; s !== null;) { - if (s.tag === 5) { - var u = s.stateNode; - o && i && (u = eo(u, s.type, s.memoizedProps)), bn(e, u); - } else if (s.tag === 6) u = s.stateNode, o && i && (u = sn(u, s.memoizedProps)), bn(e, u); - else if (s.tag !== 4) { - if (s.tag === 22 && s.memoizedState !== null) u = s.child, u !== null && (u.return = s), sa(e, s, !0, !0); - else if (s.child !== null) { - s.child.return = s, s = s.child; - continue; - } - } - if (s === n) break; - for (; s.sibling === null;) { - if (s.return === null || s.return === n) return; - s = s.return; - } - s.sibling.return = s.return, s = s.sibling; - } - } - function $a(e, n, o, i) { - var s = !1; - if (Xr) for (var u = n.child; u !== null;) { - if (u.tag === 5) { - var f = u.stateNode; - o && i && (f = eo(f, u.type, u.memoizedProps)), Mc(e, f); - } else if (u.tag === 6) f = u.stateNode, o && i && (f = sn(f, u.memoizedProps)), Mc(e, f); - else if (u.tag !== 4) { - if (u.tag === 22 && u.memoizedState !== null) s = u.child, s !== null && (s.return = u), $a(e, u, !0, !0), s = !0; - else if (u.child !== null) { - u.child.return = u, u = u.child; - continue; - } - } - if (u === n) break; - for (; u.sibling === null;) { - if (u.return === null || u.return === n) return s; - u = u.return; - } - u.sibling.return = u.return, u = u.sibling; - } - return s; - } - function kf(e, n) { - if (Xr && zs(e, n)) { - e = n.stateNode; - var o = e.containerInfo, i = Oc(); - $a(i, n, !1, !1), e.pendingChildren = i, Lt(n), hn(o, i); - } - } - function Cs(e, n, o, i) { - if (Be) e.memoizedProps !== i && Lt(n); - else if (Xr) { - var s = e.stateNode, u = e.memoizedProps; - if ((e = zs(e, n)) || u !== i) { - var f = Rt(); - u = Qh(s, o, u, i, !e, null), u === s ? n.stateNode = s : (hc(n), Ue(u, o, i, f) && Lt(n), n.stateNode = u, e && sa(u, n, !1, !1)); - } else n.stateNode = s; - } - } - function mc(e, n, o, i, s) { - if ((e.mode & 32) !== Z && (o === null ? sl(n, i) : ul(n, o, i))) { - if (e.flags |= 16777216, (s & 335544128) === s || Hc(n, i)) if (ha(e.stateNode, n, i)) e.flags |= 8192; - else if (Sh()) e.flags |= 8192; - else throw ru = im, gg; - } else e.flags &= -16777217; - } - function Io(e, n) { - if (a(n)) { - if (e.flags |= 16777216, !l(n)) if (Sh()) e.flags |= 8192; - else throw ru = im, gg; - } else e.flags &= -16777217; - } - function Zi(e, n) { - n !== null && (e.flags |= 4), e.flags & 16384 && (n = e.tag !== 22 ? ut() : 536870912, e.lanes |= n, uu |= n); - } - function Va(e, n) { - if (!ge) switch (e.tailMode) { - case "hidden": - n = e.tail; - for (var o = null; n !== null;) n.alternate !== null && (o = n), n = n.sibling; - o === null ? e.tail = null : o.sibling = null; - break; - case "collapsed": - o = e.tail; - for (var i = null; o !== null;) o.alternate !== null && (i = o), o = o.sibling; - i === null ? n || e.tail === null ? e.tail = null : e.tail.sibling = null : i.sibling = null; - } - } - function Te(e) { - var n = e.alternate !== null && e.alternate.child === e.child, o = 0, i = 0; - if (n) if ((e.mode & 2) !== Z) { - for (var s = e.selfBaseDuration, u = e.child; u !== null;) o |= u.lanes | u.childLanes, i |= u.subtreeFlags & 65011712, i |= u.flags & 65011712, s += u.treeBaseDuration, u = u.sibling; - e.treeBaseDuration = s; - } else for (s = e.child; s !== null;) o |= s.lanes | s.childLanes, i |= s.subtreeFlags & 65011712, i |= s.flags & 65011712, s.return = e, s = s.sibling; - else if ((e.mode & 2) !== Z) { - s = e.actualDuration, u = e.selfBaseDuration; - for (var f = e.child; f !== null;) o |= f.lanes | f.childLanes, i |= f.subtreeFlags, i |= f.flags, s += f.actualDuration, u += f.treeBaseDuration, f = f.sibling; - e.actualDuration = s, e.treeBaseDuration = u; - } else for (s = e.child; s !== null;) o |= s.lanes | s.childLanes, i |= s.subtreeFlags, i |= s.flags, s.return = e, s = s.sibling; - return e.subtreeFlags |= i, e.childLanes = o, n; - } - function wf(e, n, o) { - var i = n.pendingProps; - switch (Pu(n), n.tag) { - case 16: - case 15: - case 0: - case 11: - case 7: - case 8: - case 12: - case 9: - case 14: return Te(n), null; - case 1: return Te(n), null; - case 3: return o = n.stateNode, i = null, e !== null && (i = e.memoizedState.cache), n.memoizedState.cache !== i && (n.flags |= 2048), lr(un, n), Ia(n), o.pendingContext && (o.context = o.pendingContext, o.pendingContext = null), (e === null || e.child === null) && (ko(n) ? (xu(), Lt(n)) : e === null || e.memoizedState.isDehydrated && !(n.flags & 256) || (n.flags |= 1024, $l())), kf(e, n), Te(n), null; - case 26: if (Re) { - var s = n.type, u = n.memoizedState; - return e === null ? (Lt(n), u !== null ? (Te(n), Io(n, u)) : (Te(n), mc(n, s, null, i, o))) : u ? u !== e.memoizedState ? (Lt(n), Te(n), Io(n, u)) : (Te(n), n.flags &= -16777217) : (u = e.memoizedProps, Be ? u !== i && Lt(n) : Cs(e, n, s, i), Te(n), mc(n, s, u, i, o)), null; - } - case 27: if (d) { - if (Na(n), o = pt(Sl.current), s = n.type, e !== null && n.stateNode != null) Be ? e.memoizedProps !== i && Lt(n) : Cs(e, n, s, i); - else { - if (!i) { - if (n.stateNode === null) throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue."); - return Te(n), null; - } - e = Rt(), ko(n) ? So(n, e) : (e = h(s, i, o, e, !0), n.stateNode = e, Lt(n)); - } - return Te(n), null; - } - case 5: - if (Na(n), s = n.type, e !== null && n.stateNode != null) Cs(e, n, s, i); - else { - if (!i) { - if (n.stateNode === null) throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue."); - return Te(n), null; - } - if (u = Rt(), ko(n)) So(n, u), ii(n.stateNode, s, i, u) && (n.flags |= 64); - else { - var f = pt(Sl.current); - f = Fc(s, i, f, u, n), hc(n), sa(f, n, !1, !1), n.stateNode = f, Ue(f, s, i, u) && Lt(n); - } - } - return Te(n), mc(n, n.type, e === null ? null : e.memoizedProps, n.pendingProps, o), null; - case 6: - if (e && n.stateNode != null) o = e.memoizedProps, Be ? o !== i && Lt(n) : Xr && (o !== i ? (e = pt(Sl.current), o = Rt(), hc(n), n.stateNode = Do(i, e, o, n)) : n.stateNode = e.stateNode); - else { - if (typeof i != "string" && n.stateNode === null) throw Error("We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue."); - if (e = pt(Sl.current), o = Rt(), ko(n)) { - if (!qn) throw Error("Expected prepareToHydrateHostTextInstance() to never be called. This error is likely caused by a bug in React. Please file an issue."); - if (e = n.stateNode, o = n.memoizedProps, s = !xa, i = null, u = it, u !== null) switch (u.tag) { - case 3: - s && (s = Zf(e, o, i), s !== null && (bo(n, 0).serverProps = s)); - break; - case 27: - case 5: i = u.memoizedProps, s && (s = Zf(e, o, i), s !== null && (bo(n, 0).serverProps = s)); - } - he(e, o, n, i) || Fr(n, !0); - } else hc(n), n.stateNode = Do(i, e, o, n); - } - return Te(n), null; - case 31: - if (o = n.memoizedState, e === null || e.memoizedState !== null) { - if (i = ko(n), o !== null) { - if (e === null) { - if (!i) throw Error("A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React."); - if (!qn) throw Error("Expected prepareToHydrateHostActivityInstance() to never be called. This error is likely caused by a bug in React. Please file an issue."); - if (e = n.memoizedState, e = e !== null ? e.dehydrated : null, !e) throw Error("Expected to have a hydrated activity instance. This error is likely caused by a bug in React. Please file an issue."); - _e(e, n), Te(n), (n.mode & 2) !== Z && o !== null && (e = n.child, e !== null && (n.treeBaseDuration -= e.treeBaseDuration)); - } else xu(), wo(), !(n.flags & 128) && (o = n.memoizedState = null), n.flags |= 4, Te(n), (n.mode & 2) !== Z && o !== null && (e = n.child, e !== null && (n.treeBaseDuration -= e.treeBaseDuration)); - e = !1; - } else o = $l(), e !== null && e.memoizedState !== null && (e.memoizedState.hydrationErrors = o), e = !0; - if (!e) return n.flags & 256 ? (et(n), n) : (et(n), null); - if ((n.flags & 128) !== 0) throw Error("Client rendering an Activity suspended it again. This is a bug in React."); - } - return Te(n), null; - case 13: - if (i = n.memoizedState, e === null || e.memoizedState !== null && e.memoizedState.dehydrated !== null) { - if (s = i, u = ko(n), s !== null && s.dehydrated !== null) { - if (e === null) { - if (!u) throw Error("A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React."); - if (!qn) throw Error("Expected prepareToHydrateHostSuspenseInstance() to never be called. This error is likely caused by a bug in React. Please file an issue."); - if (u = n.memoizedState, u = u !== null ? u.dehydrated : null, !u) throw Error("Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue."); - Ht(u, n), Te(n), (n.mode & 2) !== Z && s !== null && (s = n.child, s !== null && (n.treeBaseDuration -= s.treeBaseDuration)); - } else xu(), wo(), !(n.flags & 128) && (s = n.memoizedState = null), n.flags |= 4, Te(n), (n.mode & 2) !== Z && s !== null && (s = n.child, s !== null && (n.treeBaseDuration -= s.treeBaseDuration)); - s = !1; - } else s = $l(), e !== null && e.memoizedState !== null && (e.memoizedState.hydrationErrors = s), s = !0; - if (!s) return n.flags & 256 ? (et(n), n) : (et(n), null); - } - return et(n), (n.flags & 128) !== 0 ? (n.lanes = o, (n.mode & 2) !== Z && Zl(n), n) : (o = i !== null, e = e !== null && e.memoizedState !== null, o && (i = n.child, s = null, i.alternate !== null && i.alternate.memoizedState !== null && i.alternate.memoizedState.cachePool !== null && (s = i.alternate.memoizedState.cachePool.pool), u = null, i.memoizedState !== null && i.memoizedState.cachePool !== null && (u = i.memoizedState.cachePool.pool), u !== s && (i.flags |= 2048)), o !== e && o && (n.child.flags |= 8192), Zi(n, n.updateQueue), Te(n), (n.mode & 2) !== Z && o && (e = n.child, e !== null && (n.treeBaseDuration -= e.treeBaseDuration)), null); - case 4: return Ia(n), kf(e, n), e === null && qe(n.stateNode.containerInfo), Te(n), null; - case 10: return lr(n.type, n), Te(n), null; - case 19: - if (Ze(Sn, n), i = n.memoizedState, i === null) return Te(n), null; - if (s = (n.flags & 128) !== 0, u = i.rendering, u === null) if (s) Va(i, !1); - else { - if (nn !== ki || e !== null && (e.flags & 128) !== 0) for (e = n.child; e !== null;) { - if (u = us(e), u !== null) { - for (n.flags |= 128, Va(i, !1), e = u.updateQueue, n.updateQueue = e, Zi(n, e), n.subtreeFlags = 0, e = o, o = n.child; o !== null;) dn(o, e), o = o.sibling; - return pe(Sn, Sn.current & md | hp, n), ge && ho(n, i.treeForkCount), n.child; - } - e = e.sibling; - } - i.tail !== null && me() > Pp && (n.flags |= 128, s = !0, Va(i, !1), n.lanes = 4194304); - } - else { - if (!s) if (e = us(u), e !== null) { - if (n.flags |= 128, s = !0, e = e.updateQueue, n.updateQueue = e, Zi(n, e), Va(i, !0), i.tail === null && i.tailMode === "hidden" && !u.alternate && !ge) return Te(n), null; - } else 2 * me() - i.renderingStartTime > Pp && o !== 536870912 && (n.flags |= 128, s = !0, Va(i, !1), n.lanes = 4194304); - i.isBackwards ? (u.sibling = n.child, n.child = u) : (e = i.last, e !== null ? e.sibling = u : n.child = u, i.last = u); - } - return i.tail !== null ? (e = i.tail, i.rendering = e, i.tail = e.sibling, i.renderingStartTime = me(), e.sibling = null, o = Sn.current, o = s ? o & md | hp : o & md, pe(Sn, o, n), ge && ho(n, i.treeForkCount), e) : (Te(n), null); - case 22: - case 23: return et(n), ss(n), i = n.memoizedState !== null, e !== null ? e.memoizedState !== null !== i && (n.flags |= 8192) : i && (n.flags |= 8192), i ? o & 536870912 && !(n.flags & 128) && (Te(n), n.subtreeFlags & 6 && (n.flags |= 8192)) : Te(n), o = n.updateQueue, o !== null && Zi(n, o.retryQueue), o = null, e !== null && e.memoizedState !== null && e.memoizedState.cachePool !== null && (o = e.memoizedState.cachePool.pool), i = null, n.memoizedState !== null && n.memoizedState.cachePool !== null && (i = n.memoizedState.cachePool.pool), i !== o && (n.flags |= 2048), e !== null && Ze(nu, n), null; - case 24: return o = null, e !== null && (o = e.memoizedState.cache), n.memoizedState.cache !== o && (n.flags |= 2048), lr(un, n), Te(n), null; - case 25: return null; - case 30: return null; - } - throw Error("Unknown unit of work tag (" + n.tag + "). This error is likely caused by a bug in React. Please file an issue."); - } - function ua(e, n) { - switch (Pu(n), n.tag) { - case 1: return e = n.flags, e & 65536 ? (n.flags = e & -65537 | 128, (n.mode & 2) !== Z && Zl(n), n) : null; - case 3: return lr(un, n), Ia(n), e = n.flags, (e & 65536) !== 0 && (e & 128) === 0 ? (n.flags = e & -65537 | 128, n) : null; - case 26: - case 27: - case 5: return Na(n), null; - case 31: - if (n.memoizedState !== null) { - if (et(n), n.alternate === null) throw Error("Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue."); - wo(); - } - return e = n.flags, e & 65536 ? (n.flags = e & -65537 | 128, (n.mode & 2) !== Z && Zl(n), n) : null; - case 13: - if (et(n), e = n.memoizedState, e !== null && e.dehydrated !== null) { - if (n.alternate === null) throw Error("Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue."); - wo(); - } - return e = n.flags, e & 65536 ? (n.flags = e & -65537 | 128, (n.mode & 2) !== Z && Zl(n), n) : null; - case 19: return Ze(Sn, n), null; - case 4: return Ia(n), null; - case 10: return lr(n.type, n), null; - case 22: - case 23: return et(n), ss(n), e !== null && Ze(nu, n), e = n.flags, e & 65536 ? (n.flags = e & -65537 | 128, (n.mode & 2) !== Z && Zl(n), n) : null; - case 24: return lr(un, n), null; - case 25: return null; - default: return null; - } - } - function gc(e, n) { - switch (Pu(n), n.tag) { - case 3: - lr(un, n), Ia(n); - break; - case 26: - case 27: - case 5: - Na(n); - break; - case 4: - Ia(n); - break; - case 31: - n.memoizedState !== null && et(n); - break; - case 13: - et(n); - break; - case 19: - Ze(Sn, n); - break; - case 10: - lr(n.type, n); - break; - case 22: - case 23: - et(n), ss(n), e !== null && Ze(nu, n); - break; - case 24: lr(un, n); - } - } - function $r(e) { - return (e.mode & 2) !== Z; - } - function Pf(e, n) { - $r(e) ? (hr(), ca(n, e), pr()) : ca(n, e); - } - function xf(e, n, o) { - $r(e) ? (hr(), M(o, e, n), pr()) : M(o, e, n); - } - function ca(e, n) { - try { - var o = n.updateQueue, i = o !== null ? o.lastEffect : null; - if (i !== null) { - var s = i.next; - o = s; - do { - if ((o.tag & e) === e && (i = void 0, (e & Wt) !== sm && (zd = !0), i = B(n, Bb, o), (e & Wt) !== sm && (zd = !1), i !== void 0 && typeof i != "function")) { - var u = void 0; - u = (o.tag & Rr) !== 0 ? "useLayoutEffect" : (o.tag & Wt) !== 0 ? "useInsertionEffect" : "useEffect"; - var f = void 0; - f = i === null ? " You returned null. If your effect does not require clean up, return undefined (or nothing)." : typeof i.then == "function" ? ` - -It looks like you wrote ` + u + `(async () => ...) or returned a Promise. Instead, write the async function inside your effect and call it immediately: - -` + u + `(() => { - async function fetchData() { - // You can await here - const response = await MyAPI.getData(someId); - // ... - } - fetchData(); -}, [someId]); // Or [] if effect doesn't need props or state - -Learn more about data fetching with Hooks: https://react.dev/link/hooks-data-fetching` : " You returned: " + i, B(n, function(p, g) { - console.error("%s must not return anything besides a function, which is used for clean-up.%s", p, g); - }, u, f); - } - o = o.next; - } while (o !== s); - } - } catch (p) { - Se(n, n.return, p); - } - } - function M(e, n, o) { - try { - var i = n.updateQueue, s = i !== null ? i.lastEffect : null; - if (s !== null) { - var u = s.next; - i = u; - do { - if ((i.tag & e) === e) { - var f = i.inst, p = f.destroy; - p !== void 0 && (f.destroy = void 0, (e & Wt) !== sm && (zd = !0), s = n, B(s, Ob, s, o, p), (e & Wt) !== sm && (zd = !1)); - } - i = i.next; - } while (i !== u); - } - } catch (g) { - Se(n, n.return, g); - } - } - function Yp(e, n) { - $r(e) ? (hr(), ca(n, e), pr()) : ca(n, e); - } - function zf(e, n, o) { - $r(e) ? (hr(), M(o, e, n), pr()) : M(o, e, n); - } - function Cf(e) { - var n = e.updateQueue; - if (n !== null) { - var o = e.stateNode; - e.type.defaultProps || "ref" in e.memoizedProps || vd || (o.props !== e.memoizedProps && console.error("Expected %s props to match memoized props before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.", G(e) || "instance"), o.state !== e.memoizedState && console.error("Expected %s state to match memoized state before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.", G(e) || "instance")); - try { - B(e, Xd, n, o); - } catch (i) { - Se(e, e.return, i); - } - } - } - function Ts(e, n, o) { - return e.getSnapshotBeforeUpdate(n, o); - } - function Hm(e, n) { - var o = n.memoizedProps, i = n.memoizedState; - n = e.stateNode, e.type.defaultProps || "ref" in e.memoizedProps || vd || (n.props !== e.memoizedProps && console.error("Expected %s props to match memoized props before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.", G(e) || "instance"), n.state !== e.memoizedState && console.error("Expected %s state to match memoized state before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.", G(e) || "instance")); - try { - var s = Mr(e.type, o), u = B(e, Ts, n, s, i); - o = Yy, u !== void 0 || o.has(e.type) || (o.add(e.type), B(e, function() { - console.error("%s.getSnapshotBeforeUpdate(): A snapshot value (or null) must be returned. You have returned undefined.", G(e)); - })), n.__reactInternalSnapshotBeforeUpdate = u; - } catch (f) { - Se(e, e.return, f); - } - } - function Xp(e, n, o) { - o.props = Mr(e.type, e.memoizedProps), o.state = e.memoizedState, $r(e) ? (hr(), B(e, gy, e, n, o), pr()) : B(e, gy, e, n, o); - } - function Am(e) { - var n = e.ref; - if (n !== null) { - switch (e.tag) { - case 26: - case 27: - case 5: - var o = ot(e.stateNode); - break; - case 30: - o = e.stateNode; - break; - default: o = e.stateNode; - } - if (typeof n == "function") if ($r(e)) try { - hr(), e.refCleanup = n(o); - } finally { - pr(); - } - else e.refCleanup = n(o); - else typeof n == "string" ? console.error("String refs are no longer supported.") : n.hasOwnProperty("current") || console.error("Unexpected ref object provided for %s. Use either a ref-setter function or React.createRef().", G(e)), n.current = o; - } - } - function _s(e, n) { - try { - B(e, Am, e); - } catch (o) { - Se(e, n, o); - } - } - function Vr(e, n) { - var o = e.ref, i = e.refCleanup; - if (o !== null) if (typeof i == "function") try { - if ($r(e)) try { - hr(), B(e, i); - } finally { - pr(e); - } - else B(e, i); - } catch (s) { - Se(e, n, s); - } finally { - e.refCleanup = null, e = e.alternate, e != null && (e.refCleanup = null); - } - else if (typeof o == "function") try { - if ($r(e)) try { - hr(), B(e, o, null); - } finally { - pr(e); - } - else B(e, o, null); - } catch (s) { - Se(e, n, s); - } - else o.current = null; - } - function yc(e, n, o, i) { - var s = e.memoizedProps, u = s.id, f = s.onCommit; - s = s.onRender, n = n === null ? "mount" : "update", em && (n = "nested-update"), typeof s == "function" && s(u, n, e.actualDuration, e.treeBaseDuration, e.actualStartTime, o), typeof f == "function" && f(u, n, i, o); - } - function Kp(e, n, o, i) { - var s = e.memoizedProps; - e = s.id, s = s.onPostCommit, n = n === null ? "mount" : "update", em && (n = "nested-update"), typeof s == "function" && s(e, n, i, o); - } - function Rs(e) { - var n = e.type, o = e.memoizedProps, i = e.stateNode; - try { - B(e, Ie, i, n, o, e); - } catch (s) { - Se(e, e.return, s); - } - } - function bc(e, n, o) { - try { - B(e, pn, e.stateNode, e.type, o, n, e); - } catch (i) { - Se(e, e.return, i); - } - } - function eh(e) { - return e.tag === 5 || e.tag === 3 || (Re ? e.tag === 26 : !1) || (d ? e.tag === 27 && j(e.type) : !1) || e.tag === 4; - } - function Tf(e) { - e: for (;;) { - for (; e.sibling === null;) { - if (e.return === null || eh(e.return)) return null; - e = e.return; - } - for (e.sibling.return = e.return, e = e.sibling; e.tag !== 5 && e.tag !== 6 && e.tag !== 18;) { - if (d && e.tag === 27 && j(e.type) || e.flags & 2 || e.child === null || e.tag === 4) continue e; - e.child.return = e, e = e.child; - } - if (!(e.flags & 2)) return e.stateNode; - } - } - function Lo(e, n, o) { - var i = e.tag; - if (i === 5 || i === 6) e = e.stateNode, n ? dl(o, e, n) : Wo(o, e); - else if (i !== 4 && (d && i === 27 && j(e.type) && (o = e.stateNode, n = null), e = e.child, e !== null)) for (Lo(e, n, o), e = e.sibling; e !== null;) Lo(e, n, o), e = e.sibling; - } - function qt(e, n, o) { - var i = e.tag; - if (i === 5 || i === 6) e = e.stateNode, n ? Uc(o, e, n) : ln(o, e); - else if (i !== 4 && (d && i === 27 && j(e.type) && (o = e.stateNode), e = e.child, e !== null)) for (qt(e, n, o), e = e.sibling; e !== null;) qt(e, n, o), e = e.sibling; - } - function $n(e) { - for (var n, o = e.return; o !== null;) { - if (eh(o)) { - n = o; - break; - } - o = o.return; - } - if (Be) { - if (n == null) throw Error("Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue."); - switch (n.tag) { - case 27: if (d) { - n = n.stateNode, o = Tf(e), qt(e, o, n); - break; - } - case 5: - o = n.stateNode, n.flags & 32 && (fl(o), n.flags &= -33), n = Tf(e), qt(e, n, o); - break; - case 3: - case 4: - n = n.stateNode.containerInfo, o = Tf(e), Lo(e, o, n); - break; - default: throw Error("Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue."); - } - } - } - function Sr(e, n, o) { - e = e.containerInfo; - try { - B(n, Qc, e, o); - } catch (i) { - Se(n, n.return, i); - } - } - function Hn(e) { - var n = e.stateNode, o = e.memoizedProps; - try { - B(e, y, e.type, o, n, e); - } catch (i) { - Se(e, e.return, i); - } - } - function nh(e, n) { - return n.tag === 31 ? (n = n.memoizedState, e.memoizedState !== null && n === null) : n.tag === 13 ? (e = e.memoizedState, n = n.memoizedState, e !== null && e.dehydrated !== null && (n === null || n.dehydrated === null)) : n.tag === 3 ? e.memoizedState.isDehydrated && (n.flags & 256) === 0 : !1; - } - function jm(e, n) { - for (Ws(e.containerInfo), Gn = n; Gn !== null;) if (e = Gn, n = e.child, (e.subtreeFlags & 1028) !== 0 && n !== null) n.return = e, Gn = n; - else for (; Gn !== null;) { - n = e = Gn; - var o = n.alternate, i = n.flags; - switch (n.tag) { - case 0: - if ((i & 4) !== 0 && (n = n.updateQueue, n = n !== null ? n.events : null, n !== null)) for (o = 0; o < n.length; o++) i = n[o], i.ref.impl = i.nextImpl; - break; - case 11: - case 15: break; - case 1: - i & 1024 && o !== null && Hm(n, o); - break; - case 3: - i & 1024 && Be && qf(n.stateNode.containerInfo); - break; - case 5: - case 26: - case 27: - case 6: - case 4: - case 17: break; - default: if ((i & 1024) !== 0) throw Error("This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue."); - } - if (n = e.sibling, n !== null) { - n.return = e.return, Gn = n; - break; - } - Gn = e.return; - } - } - function yn(e, n, o) { - var i = Xn(), s = Dr(), u = dr(), f = fr(), p = o.flags; - switch (o.tag) { - case 0: - case 11: - case 15: - rt(e, o), p & 4 && Pf(o, Rr | lo); - break; - case 1: - if (rt(e, o), p & 4) if (e = o.stateNode, n === null) o.type.defaultProps || "ref" in o.memoizedProps || vd || (e.props !== o.memoizedProps && console.error("Expected %s props to match memoized props before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.", G(o) || "instance"), e.state !== o.memoizedState && console.error("Expected %s state to match memoized state before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.", G(o) || "instance")), $r(o) ? (hr(), B(o, mg, o, e), pr()) : B(o, mg, o, e); - else { - var g = Mr(o.type, n.memoizedProps); - n = n.memoizedState, o.type.defaultProps || "ref" in o.memoizedProps || vd || (e.props !== o.memoizedProps && console.error("Expected %s props to match memoized props before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.", G(o) || "instance"), e.state !== o.memoizedState && console.error("Expected %s state to match memoized state before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.", G(o) || "instance")), $r(o) ? (hr(), B(o, py, o, e, g, n, e.__reactInternalSnapshotBeforeUpdate), pr()) : B(o, py, o, e, g, n, e.__reactInternalSnapshotBeforeUpdate); - } - p & 64 && Cf(o), p & 512 && _s(o, o.return); - break; - case 3: - if (n = jr(), rt(e, o), p & 64 && (p = o.updateQueue, p !== null)) { - if (g = null, o.child !== null) switch (o.child.tag) { - case 27: - case 5: - g = ot(o.child.stateNode); - break; - case 1: g = o.child.stateNode; - } - try { - B(o, Xd, p, g); - } catch (T) { - Se(o, o.return, T); - } - } - e.effectDuration += ql(n); - break; - case 27: d && n === null && p & 4 && Hn(o); - case 26: - case 5: - if (rt(e, o), n === null) { - if (p & 4) Rs(o); - else if (p & 64) { - e = o.type, n = o.memoizedProps, g = o.stateNode; - try { - B(o, Gf, g, e, n, o); - } catch (T) { - Se(o, o.return, T); - } - } - } - p & 512 && _s(o, o.return); - break; - case 12: - if (p & 4) { - p = jr(), rt(e, o), e = o.stateNode, e.effectDuration += ji(p); - try { - B(o, yc, o, n, wl, e.effectDuration); - } catch (T) { - Se(o, o.return, T); - } - } else rt(e, o); - break; - case 31: - rt(e, o), p & 4 && th(e, o); - break; - case 13: - rt(e, o), p & 4 && rh(e, o), p & 64 && (e = o.memoizedState, e !== null && (e = e.dehydrated, e !== null && (p = Nh.bind(null, o), mn(e, p)))); - break; - case 22: - if (p = o.memoizedState !== null || Si, !p) { - n = n !== null && n.memoizedState !== null || Tn, g = Si; - var S = Tn; - Si = p, (Tn = n) && !S ? (Gr(e, o, (o.subtreeFlags & 8772) !== 0), (o.mode & 2) !== Z && 0 <= $ && 0 <= q && .05 < q - $ && _i(o, $, q)) : rt(e, o), Si = g, Tn = S; - } - break; - case 30: break; - default: rt(e, o); - } - (o.mode & 2) !== Z && 0 <= $ && 0 <= q && ((cn || .05 < en) && Un(o, $, q, en, Je), o.alternate === null && o.return !== null && o.return.alternate !== null && .05 < q - $ && (nh(o.return.alternate, o.return) || Ot(o, $, q, "Mount"))), mt(i), cr(s), Je = u, cn = f; - } - function qr(e) { - var n = e.alternate; - n !== null && (e.alternate = null, qr(n)), e.child = null, e.deletions = null, e.sibling = null, e.tag === 5 && (n = e.stateNode, n !== null && Qf(n)), e.stateNode = null, e._debugOwner = null, e.return = null, e.dependencies = null, e.memoizedProps = null, e.memoizedState = null, e.pendingProps = null, e.stateNode = null, e.updateQueue = null; - } - function kr(e, n, o) { - for (o = o.child; o !== null;) _f(e, n, o), o = o.sibling; - } - function _f(e, n, o) { - if (zt && typeof zt.onCommitFiberUnmount == "function") try { - zt.onCommitFiberUnmount(td, o); - } catch (S) { - ka || (ka = !0, console.error("React instrumentation encountered an error: %o", S)); - } - var i = Xn(), s = Dr(), u = dr(), f = fr(); - switch (o.tag) { - case 26: if (Re) { - Tn || Vr(o, n), kr(e, n, o), o.memoizedState ? ed(o.memoizedState) : o.stateNode && nd(o.stateNode); - break; - } - case 27: if (d) { - Tn || Vr(o, n); - var p = _n, g = nr; - j(o.type) && (_n = o.stateNode, nr = !1), kr(e, n, o), B(o, R, o.stateNode), _n = p, nr = g; - break; - } - case 5: Tn || Vr(o, n); - case 6: - if (Be) { - if (p = _n, g = nr, _n = null, kr(e, n, o), _n = p, nr = g, _n !== null) if (nr) try { - B(o, Bc, _n, o.stateNode); - } catch (S) { - Se(o, n, S); - } - else try { - B(o, oi, _n, o.stateNode); - } catch (S) { - Se(o, n, S); - } - } else kr(e, n, o); - break; - case 18: - Be && _n !== null && (nr ? hl(_n, o.stateNode) : At(_n, o.stateNode)); - break; - case 4: - Be ? (p = _n, g = nr, _n = o.stateNode.containerInfo, nr = !0, kr(e, n, o), _n = p, nr = g) : (Xr && Sr(o.stateNode, o, Oc()), kr(e, n, o)); - break; - case 0: - case 11: - case 14: - case 15: - M(Wt, o, n), Tn || xf(o, n, Rr), kr(e, n, o); - break; - case 1: - Tn || (Vr(o, n), p = o.stateNode, typeof p.componentWillUnmount == "function" && Xp(o, n, p)), kr(e, n, o); - break; - case 21: - kr(e, n, o); - break; - case 22: - Tn = (p = Tn) || o.memoizedState !== null, kr(e, n, o), Tn = p; - break; - default: kr(e, n, o); - } - (o.mode & 2) !== Z && 0 <= $ && 0 <= q && (cn || .05 < en) && Un(o, $, q, en, Je), mt(i), cr(s), Je = u, cn = f; - } - function th(e, n) { - if (qn && n.memoizedState === null && (e = n.alternate, e !== null && (e = e.memoizedState, e !== null))) { - e = e.dehydrated; - try { - B(n, Xe, e); - } catch (o) { - Se(n, n.return, o); - } - } - } - function rh(e, n) { - if (qn && n.memoizedState === null && (e = n.alternate, e !== null && (e = e.memoizedState, e !== null && (e = e.dehydrated, e !== null)))) try { - B(n, ba, e); - } catch (o) { - Se(n, n.return, o); - } - } - function Dm(e) { - switch (e.tag) { - case 31: - case 13: - case 19: - var n = e.stateNode; - return n === null && (n = e.stateNode = new Xy()), n; - case 22: return e = e.stateNode, n = e._retryCache, n === null && (n = e._retryCache = new Xy()), n; - default: throw Error("Unexpected Suspense handler tag (" + e.tag + "). This is a bug in React."); - } - } - function Yi(e, n) { - var o = Dm(e); - n.forEach(function(i) { - if (!o.has(i)) { - if (o.add(i), wa) if (Sd !== null && kd !== null) nl(kd, Sd); - else throw Error("Expected finished root and lanes to be set. This is a bug in React."); - var s = $m.bind(null, e, i); - i.then(s, s); - } - }); - } - function An(e, n) { - var o = n.deletions; - if (o !== null) for (var i = 0; i < o.length; i++) { - var s = e, u = n, f = o[i], p = Xn(); - if (Be) { - var g = u; - e: for (; g !== null;) { - switch (g.tag) { - case 27: if (d) { - if (j(g.type)) { - _n = g.stateNode, nr = !1; - break e; - } - break; - } - case 5: - _n = g.stateNode, nr = !1; - break e; - case 3: - case 4: - _n = g.stateNode.containerInfo, nr = !0; - break e; - } - g = g.return; - } - if (_n === null) throw Error("Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue."); - _f(s, u, f), _n = null, nr = !1; - } else _f(s, u, f); - (f.mode & 2) !== Z && 0 <= $ && 0 <= q && .05 < q - $ && Ot(f, $, q, "Unmount"), mt(p), s = f, u = s.alternate, u !== null && (u.return = null), s.return = null; - } - if (n.subtreeFlags & 13886) for (n = n.child; n !== null;) oh(n, e), n = n.sibling; - } - function oh(e, n) { - var o = Xn(), i = Dr(), s = dr(), u = fr(), f = e.alternate, p = e.flags; - switch (e.tag) { - case 0: - case 11: - case 14: - case 15: - An(n, e), Vn(e), p & 4 && (M(Wt | lo, e, e.return), ca(Wt | lo, e), xf(e, e.return, Rr | lo)); - break; - case 1: - An(n, e), Vn(e), p & 512 && (Tn || f === null || Vr(f, f.return)), p & 64 && Si && (p = e.updateQueue, p !== null && (f = p.callbacks, f !== null && (n = p.shared.hiddenCallbacks, p.shared.hiddenCallbacks = n === null ? f : n.concat(f)))); - break; - case 26: if (Re) { - var g = Vo; - An(n, e), Vn(e), p & 512 && (Tn || f === null || Vr(f, f.return)), p & 4 && (p = f !== null ? f.memoizedState : null, n = e.memoizedState, f === null ? n === null ? e.stateNode === null ? e.stateNode = $h(g, e.type, e.memoizedProps, e) : gl(g, e.type, e.stateNode) : e.stateNode = Kc(g, n, e.memoizedProps) : p !== n ? (p === null ? f.stateNode !== null && nd(f.stateNode) : ed(p), n === null ? gl(g, e.type, e.stateNode) : Kc(g, n, e.memoizedProps)) : n === null && e.stateNode !== null && bc(e, e.memoizedProps, f.memoizedProps)); - break; - } - case 27: if (d) { - An(n, e), Vn(e), p & 512 && (Tn || f === null || Vr(f, f.return)), f !== null && p & 4 && bc(e, e.memoizedProps, f.memoizedProps); - break; - } - case 5: - if (An(n, e), Vn(e), p & 512 && (Tn || f === null || Vr(f, f.return)), Be) { - if (e.flags & 32) { - n = e.stateNode; - try { - B(e, fl, n); - } catch (Fe) { - Se(e, e.return, Fe); - } - } - p & 4 && e.stateNode != null && (n = e.memoizedProps, bc(e, n, f !== null ? f.memoizedProps : n)), p & 1024 && (Rg = !0, e.type !== "form" && console.error("Unexpected host component type. Expected a form. This is a bug in React.")); - } else Xr && e.alternate !== null && (e.alternate.stateNode = e.stateNode); - break; - case 6: - if (An(n, e), Vn(e), p & 4 && Be) { - if (e.stateNode === null) throw Error("This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue."); - p = e.memoizedProps, f = f !== null ? f.memoizedProps : p, n = e.stateNode; - try { - B(e, ne, n, f, p); - } catch (Fe) { - Se(e, e.return, Fe); - } - } - break; - case 3: - if (g = jr(), Re) { - r(); - var S = Vo; - Vo = Sa(n.containerInfo), An(n, e), Vo = S; - } else An(n, e); - if (Vn(e), p & 4) { - if (Be && qn && f !== null && f.memoizedState.isDehydrated) try { - B(e, Uo, n.containerInfo); - } catch (Fe) { - Se(e, e.return, Fe); - } - if (Xr) { - p = n.containerInfo, f = n.pendingChildren; - try { - B(e, Qc, p, f); - } catch (Fe) { - Se(e, e.return, Fe); - } - } - } - Rg && (Rg = !1, ah(e)), n.effectDuration += ql(g); - break; - case 4: - Re ? (f = Vo, Vo = Sa(e.stateNode.containerInfo), An(n, e), Vn(e), Vo = f) : (An(n, e), Vn(e)), p & 4 && Xr && Sr(e.stateNode, e, e.stateNode.pendingChildren); - break; - case 12: - p = jr(), An(n, e), Vn(e), e.stateNode.effectDuration += ji(p); - break; - case 31: - An(n, e), Vn(e), p & 4 && (p = e.updateQueue, p !== null && (e.updateQueue = null, Yi(e, p))); - break; - case 13: - An(n, e), Vn(e), e.child.flags & 8192 && e.memoizedState !== null != (f !== null && f.memoizedState !== null) && (xm = me()), p & 4 && (p = e.updateQueue, p !== null && (e.updateQueue = null, Yi(e, p))); - break; - case 22: - g = e.memoizedState !== null; - var T = f !== null && f.memoizedState !== null, _ = Si, I = Tn; - if (Si = _ || g, Tn = I || T, An(n, e), Tn = I, Si = _, T && !g && !_ && !I && (e.mode & 2) !== Z && 0 <= $ && 0 <= q && .05 < q - $ && _i(e, $, q), Vn(e), p & 8192 && (n = e.stateNode, n._visibility = g ? n._visibility & ~pp : n._visibility | pp, !g || f === null || T || Si || Tn || (qa(e), (e.mode & 2) !== Z && 0 <= $ && 0 <= q && .05 < q - $ && Ot(e, $, q, "Disconnect")), Be)) { - e: if (f = null, Be) for (n = e;;) { - if (n.tag === 5 || Re && n.tag === 26) { - if (f === null) { - T = f = n; - try { - S = T.stateNode, g ? B(T, pl, S) : B(T, Os, T.stateNode, T.memoizedProps); - } catch (Fe) { - Se(T, T.return, Fe); - } - } - } else if (n.tag === 6) { - if (f === null) { - T = n; - try { - var O = T.stateNode; - g ? B(T, Jm, O) : B(T, Mh, O, T.memoizedProps); - } catch (Fe) { - Se(T, T.return, Fe); - } - } - } else if (n.tag === 18) { - if (f === null) { - T = n; - try { - var K = T.stateNode; - g ? B(T, $s, K) : B(T, xt, T.stateNode); - } catch (Fe) { - Se(T, T.return, Fe); - } - } - } else if ((n.tag !== 22 && n.tag !== 23 || n.memoizedState === null || n === e) && n.child !== null) { - n.child.return = n, n = n.child; - continue; - } - if (n === e) break e; - for (; n.sibling === null;) { - if (n.return === null || n.return === e) break e; - f === n && (f = null), n = n.return; - } - f === n && (f = null), n.sibling.return = n.return, n = n.sibling; - } - } - p & 4 && (p = e.updateQueue, p !== null && (f = p.retryQueue, f !== null && (p.retryQueue = null, Yi(e, f)))); - break; - case 19: - An(n, e), Vn(e), p & 4 && (p = e.updateQueue, p !== null && (e.updateQueue = null, Yi(e, p))); - break; - case 30: break; - case 21: break; - default: An(n, e), Vn(e); - } - (e.mode & 2) !== Z && 0 <= $ && 0 <= q && ((cn || .05 < en) && Un(e, $, q, en, Je), e.alternate === null && e.return !== null && e.return.alternate !== null && .05 < q - $ && (nh(e.return.alternate, e.return) || Ot(e, $, q, "Mount"))), mt(o), cr(i), Je = s, cn = u; - } - function Vn(e) { - var n = e.flags; - if (n & 2) { - try { - B(e, $n, e); - } catch (o) { - Se(e, e.return, o); - } - e.flags &= -3; - } - n & 4096 && (e.flags &= -4097); - } - function ah(e) { - if (e.subtreeFlags & 1024) for (e = e.child; e !== null;) { - var n = e; - ah(n), n.tag === 5 && n.flags & 1024 && Bs(n.stateNode), e = e.sibling; - } - } - function rt(e, n) { - if (n.subtreeFlags & 8772) for (n = n.child; n !== null;) yn(e, n.alternate, n), n = n.sibling; - } - function da(e) { - var n = Xn(), o = Dr(), i = dr(), s = fr(); - switch (e.tag) { - case 0: - case 11: - case 14: - case 15: - xf(e, e.return, Rr), qa(e); - break; - case 1: - Vr(e, e.return); - var u = e.stateNode; - typeof u.componentWillUnmount == "function" && Xp(e, e.return, u), qa(e); - break; - case 27: d && B(e, R, e.stateNode); - case 26: - case 5: - Vr(e, e.return), qa(e); - break; - case 22: - e.memoizedState === null && qa(e); - break; - case 30: - qa(e); - break; - default: qa(e); - } - (e.mode & 2) !== Z && 0 <= $ && 0 <= q && (cn || .05 < en) && Un(e, $, q, en, Je), mt(n), cr(o), Je = i, cn = s; - } - function qa(e) { - for (e = e.child; e !== null;) da(e), e = e.sibling; - } - function ih(e, n, o, i) { - var s = Xn(), u = Dr(), f = dr(), p = fr(), g = o.flags; - switch (o.tag) { - case 0: - case 11: - case 15: - Gr(e, o, i), Pf(o, Rr); - break; - case 1: - if (Gr(e, o, i), n = o.stateNode, typeof n.componentDidMount == "function" && B(o, mg, o, n), n = o.updateQueue, n !== null) { - e = o.stateNode; - try { - B(o, Yd, n, e); - } catch (S) { - Se(o, o.return, S); - } - } - i && g & 64 && Cf(o), _s(o, o.return); - break; - case 27: d && Hn(o); - case 26: - case 5: - Gr(e, o, i), i && n === null && g & 4 && Rs(o), _s(o, o.return); - break; - case 12: - if (i && g & 4) { - g = jr(), Gr(e, o, i), i = o.stateNode, i.effectDuration += ji(g); - try { - B(o, yc, o, n, wl, i.effectDuration); - } catch (S) { - Se(o, o.return, S); - } - } else Gr(e, o, i); - break; - case 31: - Gr(e, o, i), i && g & 4 && th(e, o); - break; - case 13: - Gr(e, o, i), i && g & 4 && rh(e, o); - break; - case 22: - o.memoizedState === null && Gr(e, o, i), _s(o, o.return); - break; - case 30: break; - default: Gr(e, o, i); - } - (o.mode & 2) !== Z && 0 <= $ && 0 <= q && (cn || .05 < en) && Un(o, $, q, en, Je), mt(s), cr(u), Je = f, cn = p; - } - function Gr(e, n, o) { - for (o = o && (n.subtreeFlags & 8772) !== 0, n = n.child; n !== null;) ih(e, n.alternate, n, o), n = n.sibling; - } - function Ga(e, n) { - var o = null; - e !== null && e.memoizedState !== null && e.memoizedState.cachePool !== null && (o = e.memoizedState.cachePool.pool), e = null, n.memoizedState !== null && n.memoizedState.cachePool !== null && (e = n.memoizedState.cachePool.pool), e !== o && (e != null && Po(e), o != null && Da(o)); - } - function Rf(e, n) { - e = null, n.alternate !== null && (e = n.alternate.memoizedState.cache), n = n.memoizedState.cache, n !== e && (Po(n), e != null && Da(e)); - } - function wr(e, n, o, i, s) { - if (n.subtreeFlags & 10256 || n.actualDuration !== 0 && (n.alternate === null || n.alternate.child !== n.child)) for (n = n.child; n !== null;) { - var u = n.sibling; - lh(e, n, o, i, u !== null ? u.actualStartTime : s), n = u; - } - } - function lh(e, n, o, i, s) { - var u = Xn(), f = Dr(), p = dr(), g = fr(), S = yl, T = n.flags; - switch (n.tag) { - case 0: - case 11: - case 15: - (n.mode & 2) !== Z && 0 < n.actualStartTime && n.flags & 1 && po(n, n.actualStartTime, s, Wn, o), wr(e, n, o, i, s), T & 2048 && Yp(n, Ut | lo); - break; - case 1: - (n.mode & 2) !== Z && 0 < n.actualStartTime && ((n.flags & 128) !== 0 ? Ri(n, n.actualStartTime, s, []) : n.flags & 1 && po(n, n.actualStartTime, s, Wn, o)), wr(e, n, o, i, s); - break; - case 3: - var _ = jr(), I = Wn; - Wn = n.alternate !== null && n.alternate.memoizedState.isDehydrated && (n.flags & 256) === 0, wr(e, n, o, i, s), Wn = I, T & 2048 && (o = null, n.alternate !== null && (o = n.alternate.memoizedState.cache), i = n.memoizedState.cache, i !== o && (Po(i), o != null && Da(o))), e.passiveEffectDuration += ql(_); - break; - case 12: - if (T & 2048) { - T = jr(), wr(e, n, o, i, s), e = n.stateNode, e.passiveEffectDuration += ji(T); - try { - B(n, Kp, n, n.alternate, wl, e.passiveEffectDuration); - } catch (O) { - Se(n, n.return, O); - } - } else wr(e, n, o, i, s); - break; - case 31: - T = Wn, _ = n.alternate !== null ? n.alternate.memoizedState : null, I = n.memoizedState, _ !== null && I === null ? (I = n.deletions, I !== null && 0 < I.length && I[0].tag === 18 ? (Wn = !1, _ = _.hydrationErrors, _ !== null && Ri(n, n.actualStartTime, s, _)) : Wn = !0) : Wn = !1, wr(e, n, o, i, s), Wn = T; - break; - case 13: - T = Wn, _ = n.alternate !== null ? n.alternate.memoizedState : null, I = n.memoizedState, _ === null || _.dehydrated === null || I !== null && I.dehydrated !== null ? Wn = !1 : (I = n.deletions, I !== null && 0 < I.length && I[0].tag === 18 ? (Wn = !1, _ = _.hydrationErrors, _ !== null && Ri(n, n.actualStartTime, s, _)) : Wn = !0), wr(e, n, o, i, s), Wn = T; - break; - case 23: break; - case 22: - I = n.stateNode, _ = n.alternate, n.memoizedState !== null ? I._visibility & gi ? wr(e, n, o, i, s) : Es(e, n, o, i, s) : I._visibility & gi ? wr(e, n, o, i, s) : (I._visibility |= gi, Jr(e, n, o, i, (n.subtreeFlags & 10256) !== 0 || n.actualDuration !== 0 && (n.alternate === null || n.alternate.child !== n.child), s), (n.mode & 2) === Z || Wn || (e = n.actualStartTime, 0 <= e && .05 < s - e && _i(n, e, s), 0 <= $ && 0 <= q && .05 < q - $ && _i(n, $, q))), T & 2048 && Ga(_, n); - break; - case 24: - wr(e, n, o, i, s), T & 2048 && Rf(n.alternate, n); - break; - default: wr(e, n, o, i, s); - } - (n.mode & 2) !== Z && ((e = !Wn && n.alternate === null && n.return !== null && n.return.alternate !== null) && (o = n.actualStartTime, 0 <= o && .05 < s - o && Ot(n, o, s, "Mount")), 0 <= $ && 0 <= q && ((cn || .05 < en) && Un(n, $, q, en, Je), e && .05 < q - $ && Ot(n, $, q, "Mount"))), mt(u), cr(f), Je = p, cn = g, yl = S; - } - function Jr(e, n, o, i, s, u) { - for (s = s && ((n.subtreeFlags & 10256) !== 0 || n.actualDuration !== 0 && (n.alternate === null || n.alternate.child !== n.child)), n = n.child; n !== null;) { - var f = n.sibling; - sh(e, n, o, i, s, f !== null ? f.actualStartTime : u), n = f; - } - } - function sh(e, n, o, i, s, u) { - var f = Xn(), p = Dr(), g = dr(), S = fr(), T = yl; - s && (n.mode & 2) !== Z && 0 < n.actualStartTime && n.flags & 1 && po(n, n.actualStartTime, u, Wn, o); - var _ = n.flags; - switch (n.tag) { - case 0: - case 11: - case 15: - Jr(e, n, o, i, s, u), Yp(n, Ut); - break; - case 23: break; - case 22: - var I = n.stateNode; - n.memoizedState !== null ? I._visibility & gi ? Jr(e, n, o, i, s, u) : Es(e, n, o, i, u) : (I._visibility |= gi, Jr(e, n, o, i, s, u)), s && _ & 2048 && Ga(n.alternate, n); - break; - case 24: - Jr(e, n, o, i, s, u), s && _ & 2048 && Rf(n.alternate, n); - break; - default: Jr(e, n, o, i, s, u); - } - (n.mode & 2) !== Z && 0 <= $ && 0 <= q && (cn || .05 < en) && Un(n, $, q, en, Je), mt(f), cr(p), Je = g, cn = S, yl = T; - } - function Es(e, n, o, i, s) { - if (n.subtreeFlags & 10256 || n.actualDuration !== 0 && (n.alternate === null || n.alternate.child !== n.child)) for (var u = n.child; u !== null;) { - n = u.sibling; - var f = e, p = o, g = i, S = n !== null ? n.actualStartTime : s, T = yl; - (u.mode & 2) !== Z && 0 < u.actualStartTime && u.flags & 1 && po(u, u.actualStartTime, S, Wn, p); - var _ = u.flags; - switch (u.tag) { - case 22: - Es(f, u, p, g, S), _ & 2048 && Ga(u.alternate, u); - break; - case 24: - Es(f, u, p, g, S), _ & 2048 && Rf(u.alternate, u); - break; - default: Es(f, u, p, g, S); - } - yl = T, u = n; - } - } - function Ja(e, n, o) { - if (e.subtreeFlags & wd) for (e = e.child; e !== null;) uh(e, n, o), e = e.sibling; - } - function uh(e, n, o) { - switch (e.tag) { - case 26: - if (Ja(e, n, o), e.flags & wd) if (e.memoizedState !== null) c(o, Vo, e.memoizedState, e.memoizedProps); - else { - var i = e.stateNode, s = e.type; - e = e.memoizedProps, ((n & 335544128) === n || Hc(s, e)) && Ac(o, i, s, e); - } - break; - case 5: - Ja(e, n, o), e.flags & wd && (i = e.stateNode, s = e.type, e = e.memoizedProps, ((n & 335544128) === n || Hc(s, e)) && Ac(o, i, s, e)); - break; - case 3: - case 4: - Re ? (i = Vo, Vo = Sa(e.stateNode.containerInfo), Ja(e, n, o), Vo = i) : Ja(e, n, o); - break; - case 22: - e.memoizedState === null && (i = e.alternate, i !== null && i.memoizedState !== null ? (i = wd, wd = 16777216, Ja(e, n, o), wd = i) : Ja(e, n, o)); - break; - default: Ja(e, n, o); - } - } - function ch(e) { - var n = e.alternate; - if (n !== null && (e = n.child, e !== null)) { - n.child = null; - do - n = e.sibling, e.sibling = null, e = n; - while (e !== null); - } - } - function Is(e) { - var n = e.deletions; - if ((e.flags & 16) !== 0) { - if (n !== null) for (var o = 0; o < n.length; o++) { - var i = n[o], s = Xn(); - Gn = i, ph(i, e), (i.mode & 2) !== Z && 0 <= $ && 0 <= q && .05 < q - $ && Ot(i, $, q, "Unmount"), mt(s); - } - ch(e); - } - if (e.subtreeFlags & 10256) for (e = e.child; e !== null;) dh(e), e = e.sibling; - } - function dh(e) { - var n = Xn(), o = Dr(), i = dr(), s = fr(); - switch (e.tag) { - case 0: - case 11: - case 15: - Is(e), e.flags & 2048 && zf(e, e.return, Ut | lo); - break; - case 3: - var u = jr(); - Is(e), e.stateNode.passiveEffectDuration += ql(u); - break; - case 12: - u = jr(), Is(e), e.stateNode.passiveEffectDuration += ji(u); - break; - case 22: - u = e.stateNode, e.memoizedState !== null && u._visibility & gi && (e.return === null || e.return.tag !== 13) ? (u._visibility &= ~gi, vc(e), (e.mode & 2) !== Z && 0 <= $ && 0 <= q && .05 < q - $ && Ot(e, $, q, "Disconnect")) : Is(e); - break; - default: Is(e); - } - (e.mode & 2) !== Z && 0 <= $ && 0 <= q && (cn || .05 < en) && Un(e, $, q, en, Je), mt(n), cr(o), cn = s, Je = i; - } - function vc(e) { - var n = e.deletions; - if ((e.flags & 16) !== 0) { - if (n !== null) for (var o = 0; o < n.length; o++) { - var i = n[o], s = Xn(); - Gn = i, ph(i, e), (i.mode & 2) !== Z && 0 <= $ && 0 <= q && .05 < q - $ && Ot(i, $, q, "Unmount"), mt(s); - } - ch(e); - } - for (e = e.child; e !== null;) fh(e), e = e.sibling; - } - function fh(e) { - var n = Xn(), o = Dr(), i = dr(), s = fr(); - switch (e.tag) { - case 0: - case 11: - case 15: - zf(e, e.return, Ut), vc(e); - break; - case 22: - var u = e.stateNode; - u._visibility & gi && (u._visibility &= ~gi, vc(e)); - break; - default: vc(e); - } - (e.mode & 2) !== Z && 0 <= $ && 0 <= q && (cn || .05 < en) && Un(e, $, q, en, Je), mt(n), cr(o), cn = s, Je = i; - } - function ph(e, n) { - for (; Gn !== null;) { - var o = Gn, i = o, s = n, u = Xn(), f = Dr(), p = dr(), g = fr(); - switch (i.tag) { - case 0: - case 11: - case 15: - zf(i, s, Ut); - break; - case 23: - case 22: - i.memoizedState !== null && i.memoizedState.cachePool !== null && (s = i.memoizedState.cachePool.pool, s != null && Po(s)); - break; - case 24: Da(i.memoizedState.cache); - } - if ((i.mode & 2) !== Z && 0 <= $ && 0 <= q && (cn || .05 < en) && Un(i, $, q, en, Je), mt(u), cr(f), cn = g, Je = p, i = o.child, i !== null) i.return = o, Gn = i; - else e: for (o = e; Gn !== null;) { - if (i = Gn, u = i.sibling, f = i.return, qr(i), i === o) { - Gn = null; - break e; - } - if (u !== null) { - u.return = f, Gn = u; - break e; - } - Gn = f; - } - } - } - function Ef(e) { - var n = Gm(e); - if (n != null) { - if (typeof n.memoizedProps["data-testname"] != "string") throw Error("Invalid host root specified. Should be either a React container or a node with a testname attribute."); - return n; - } - if (e = $f(e), e === null) throw Error("Could not find React container within specified host subtree."); - return e.stateNode.current; - } - function If(e, n) { - var o = e.tag; - switch (n.$$typeof) { - case pm: - if (e.type === n.value) return !0; - break; - case hm: - e: { - for (n = n.value, e = [e, 0], o = 0; o < e.length;) { - var i = e[o++], s = i.tag, u = e[o++], f = n[u]; - if (s !== 5 && s !== 26 && s !== 27 || !Kr(i)) { - for (; f != null && If(i, f);) u++, f = n[u]; - if (u === n.length) { - n = !0; - break e; - } else for (i = i.child; i !== null;) e.push(i, u), i = i.sibling; - } - } - n = !1; - } - return n; - case mm: - if ((o === 5 || o === 26 || o === 27) && Wc(e.stateNode, n.value)) return !0; - break; - case ym: - if ((o === 5 || o === 6 || o === 26 || o === 27) && (e = Vf(e), e !== null && 0 <= e.indexOf(n.value))) return !0; - break; - case gm: - if ((o === 5 || o === 26 || o === 27) && (e = e.memoizedProps["data-testname"], typeof e == "string" && e.toLowerCase() === n.value.toLowerCase())) return !0; - break; - default: throw Error("Invalid selector type specified."); - } - return !1; - } - function Sc(e) { - switch (e.$$typeof) { - case pm: return "<" + ($e(e.value) || "Unknown") + ">"; - case hm: return ":has(" + (Sc(e) || "") + ")"; - case mm: return "[role=\"" + e.value + "\"]"; - case ym: return "\"" + e.value + "\""; - case gm: return "[data-testname=\"" + e.value + "\"]"; - default: throw Error("Invalid selector type specified."); - } - } - function hh(e, n) { - var o = []; - e = [e, 0]; - for (var i = 0; i < e.length;) { - var s = e[i++], u = s.tag, f = e[i++], p = n[f]; - if (u !== 5 && u !== 26 && u !== 27 || !Kr(s)) { - for (; p != null && If(s, p);) f++, p = n[f]; - if (f === n.length) o.push(s); - else for (s = s.child; s !== null;) e.push(s, f), s = s.sibling; - } - } - return o; - } - function kc(e, n) { - if (!xr) throw Error("Test selector API is not supported by this renderer."); - e = Ef(e), e = hh(e, n), n = [], e = Array.from(e); - for (var o = 0; o < e.length;) { - var i = e[o++], s = i.tag; - if (s === 5 || s === 26 || s === 27) Kr(i) || n.push(i.stateNode); - else for (i = i.child; i !== null;) e.push(i), i = i.sibling; - } - return n; - } - function Wm() { - xr && bm.forEach(function(e) { - return e(); - }); - } - function mh() { - var e = typeof IS_REACT_ACT_ENVIRONMENT < "u" ? IS_REACT_ACT_ENVIRONMENT : void 0; - return e || x.actQueue === null || console.error("The current testing environment is not configured to support act(...)"), e; - } - function Nt(e) { - if ((ye & Zn) !== Jn && ae !== 0) return ae & -ae; - var n = x.T; - return n !== null ? (n._updatedFibers || (n._updatedFibers = /* @__PURE__ */ new Set()), n._updatedFibers.add(e), Ru()) : Mf(); - } - function gh() { - if (rr === 0) if ((ae & 536870912) === 0 || ge) { - var e = C; - C <<= 1, !(C & 3932160) && (C = 262144), rr = e; - } else rr = 536870912; - return e = _r.current, e !== null && (e.flags |= 32), rr; - } - function We(e, n, o) { - if (zd && console.error("useInsertionEffect must not schedule updates."), Bg && (Tm = !0), (e === je && (Le === lu || Le === su) || e.cancelPendingCommit !== null) && (Xi(e, 0), No(e, ae, rr, !1)), Ci(e, o), (ye & Zn) !== Jn && e === je) { - if (Pa) switch (n.tag) { - case 0: - case 11: - case 15: - e = se && G(se) || "Unknown", fb.has(e) || (fb.add(e), n = G(n) || "Unknown", console.error("Cannot update a component (`%s`) while rendering a different component (`%s`). To locate the bad setState() call inside `%s`, follow the stack trace as described in https://react.dev/link/setstate-in-render", n, e, e)); - break; - case 1: db || (console.error("Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state."), db = !0); - } - } else wa && yu(e, n, o), Hh(n), e === je && ((ye & Zn) === Jn && (El |= o), nn === Tl && No(e, ae, rr, !1)), Kn(e); - } - function Lf(e, n, o) { - if ((ye & (Zn | uo)) !== Jn) throw Error("Should not already be working."); - if (ae !== 0 && se !== null) { - var i = se, s = me(); - switch (ay) { - case Sp: - case lu: - var u = rp; - Me && ((i = i._debugTask) ? i.run(console.timeStamp.bind(console, "Suspended", u, s, "Components ⚛", void 0, "primary-light")) : console.timeStamp("Suspended", u, s, "Components ⚛", void 0, "primary-light")); - break; - case su: - u = rp, Me && ((i = i._debugTask) ? i.run(console.timeStamp.bind(console, "Action", u, s, "Components ⚛", void 0, "primary-light")) : console.timeStamp("Action", u, s, "Components ⚛", void 0, "primary-light")); - break; - default: Me && (i = s - rp, 3 > i || console.timeStamp("Blocked", rp, s, "Components ⚛", void 0, 5 > i ? "primary-light" : 10 > i ? "primary" : 100 > i ? "primary-dark" : "error")); - } - } - u = (o = !o && (n & 127) === 0 && (n & e.expiredLanes) === 0 || Hl(e, n)) ? Um(e, n) : Ff(e, n, !0); - var f = o; - do { - if (u === ki) { - Pd && !o && No(e, n, 0, !1), n = Le, rp = xn(), ay = n; - break; - } else { - if (i = me(), s = e.current.alternate, f && !bh(s)) { - En(n), s = Ct, u = i, !Me || u <= s || (gn ? gn.run(console.timeStamp.bind(console, "Teared Render", s, u, fe, "Scheduler ⚛", "error")) : console.timeStamp("Teared Render", s, u, fe, "Scheduler ⚛", "error")), Za(n, i), u = Ff(e, n, !1), f = !1; - continue; - } - if (u === iu) { - if (f = n, e.errorRecoveryDisabledLanes & f) var p = 0; - else p = e.pendingLanes & -536870913, p = p !== 0 ? p : p & 536870912 ? 536870912 : 0; - if (p !== 0) { - En(n), Ra(Ct, i, n, gn), Za(n, i), n = p; - e: { - i = e, u = f, f = wp; - var g = qn && i.current.memoizedState.isDehydrated; - if (g && (Xi(i, p).flags |= 256), p = Ff(i, p, !1), p !== iu) { - if (Lg && !g) { - i.errorRecoveryDisabledLanes |= u, El |= u, u = Tl; - break e; - } - i = Bt, Bt = f, i !== null && (Bt === null ? Bt = i : Bt.push.apply(Bt, i)); - } - u = p; - } - if (f = !1, u !== iu) continue; - i = me(); - } - } - if (u === vp) { - En(n), Ra(Ct, i, n, gn), Za(n, i), Xi(e, 0), No(e, n, 0, !0); - break; - } - e: { - switch (o = e, u) { - case ki: - case vp: throw Error("Root did not complete. This is a bug in React."); - case Tl: if ((n & 4194048) !== n) break; - case Sm: - En(n), Wl(Ct, i, n, gn), Za(n, i), s = n, (s & 127) !== 0 ? Xh = i : s & 4194048 && (Kh = i), No(o, n, rr, !_l); - break e; - case iu: - Bt = null; - break; - case vm: - case Ky: break; - default: throw Error("Unknown root exit status."); - } - if (x.actQueue !== null) Hf(o, s, n, Bt, xp, Pm, rr, El, uu, u, null, null, Ct, i); - else { - if ((n & 62914560) === n && (f = xm + tb - me(), 10 < f)) { - if (No(o, n, rr, !_l), zi(o, 0, !0) !== 0) break e; - qo = n, o.timeoutHandle = Yt(yh.bind(null, o, s, Bt, xp, Pm, n, rr, El, uu, _l, u, "Throttled", Ct, i), f); - break e; - } - yh(o, s, Bt, xp, Pm, n, rr, El, uu, _l, u, null, Ct, i); - } - } - } - break; - } while (!0); - Kn(e); - } - function yh(e, n, o, i, s, u, f, p, g, S, T, _, I, O) { - e.timeoutHandle = Yr; - var K = n.subtreeFlags, Fe = null; - if ((K & 8192 || (K & 16785408) === 16785408) && (Fe = cl(), uh(n, u, Fe), K = (u & 62914560) === u ? xm - me() : (u & 4194048) === u ? nb - me() : 0, K = jc(Fe, K), K !== null)) { - qo = u, e.cancelPendingCommit = K(Hf.bind(null, e, n, u, o, i, s, f, p, g, T, Fe, Dc(Fe, e.containerInfo), I, O)), No(e, u, f, !S); - return; - } - Hf(e, n, u, o, i, s, f, p, g, T, Fe, _, I, O); - } - function bh(e) { - for (var n = e;;) { - var o = n.tag; - if ((o === 0 || o === 11 || o === 15) && n.flags & 16384 && (o = n.updateQueue, o !== null && (o = o.stores, o !== null))) for (var i = 0; i < o.length; i++) { - var s = o[i], u = s.getSnapshot; - s = s.value; - try { - if (!jt(u(), s)) return !1; - } catch { - return !1; - } - } - if (o = n.child, n.subtreeFlags & 16384 && o !== null) o.return = n, n = o; - else { - if (n === e) break; - for (; n.sibling === null;) { - if (n.return === null || n.return === e) return !0; - n = n.return; - } - n.sibling.return = n.return, n = n.sibling; - } - } - return !0; - } - function No(e, n, o, i) { - n &= ~Ng, n &= ~El, e.suspendedLanes |= n, e.pingedLanes &= ~n, i && (e.warmLanes |= n), i = e.expirationTimes; - for (var s = n; 0 < s;) { - var u = 31 - vn(s), f = 1 << u; - i[u] = -1, s &= ~f; - } - o !== 0 && gu(e, o, n); - } - function Ls() { - return (ye & (Zn | uo)) === Jn ? (Wa(0, !1), !1) : !0; - } - function Ns() { - return (ye & (Zn | uo)) !== Jn; - } - function Fs() { - if (se !== null) { - if (Le === tr) var e = se.return; - else e = se, zu(), ds(e), fd = null, fp = 0, e = se; - for (; e !== null;) gc(e.alternate, e), e = e.return; - se = null; - } - } - function Za(e, n) { - e & 127 && (Zs = n), e & 4194048 && (hi = n); - } - function Xi(e, n) { - Me && (console.timeStamp("Blocking Track", .003, .003, "Blocking", "Scheduler ⚛", "primary-light"), console.timeStamp("Transition Track", .003, .003, "Transition", "Scheduler ⚛", "primary-light"), console.timeStamp("Suspense Track", .003, .003, "Suspense", "Scheduler ⚛", "primary-light"), console.timeStamp("Idle Track", .003, .003, "Idle", "Scheduler ⚛", "primary-light")); - var o = Ct; - if (Ct = xn(), ae !== 0 && 0 < o) { - if (En(ae), nn === vm || nn === Tl) Wl(o, Ct, n, gn); - else { - var i = Ct, s = gn; - if (Me && !(i <= o)) { - var u = (n & 738197653) === n ? "tertiary-dark" : "primary-dark", f = (n & 536870912) === n ? "Prewarm" : (n & 201326741) === n ? "Interrupted Hydration" : "Interrupted Render"; - s ? s.run(console.timeStamp.bind(console, f, o, i, fe, "Scheduler ⚛", u)) : console.timeStamp(f, o, i, fe, "Scheduler ⚛", u); - } - } - Za(ae, Ct); - } - if (o = gn, gn = null, (n & 127) !== 0) { - gn = ep, s = 0 <= za && za < Zs ? Zs : za, i = 0 <= Ys && Ys < Zs ? Zs : Ys, u = 0 <= i ? i : 0 <= s ? s : Ct, 0 <= Xh && (En(2), Nd(Xh, u, n, o)), o = s; - var p = i, g = np, S = 0 < ld, T = Pl === 1, _ = Pl === 2; - if (s = Ct, i = ep, u = ig, f = lg, Me) { - if (fe = "Blocking", 0 < o ? o > s && (o = s) : o = s, 0 < p ? p > o && (p = o) : p = o, g !== null && o > p) { - var I = S ? "secondary-light" : "warning"; - i ? i.run(console.timeStamp.bind(console, S ? "Consecutive" : "Event: " + g, p, o, fe, "Scheduler ⚛", I)) : console.timeStamp(S ? "Consecutive" : "Event: " + g, p, o, fe, "Scheduler ⚛", I); - } - s > o && (p = T ? "error" : (n & 738197653) === n ? "tertiary-light" : "primary-light", T = _ ? "Promise Resolved" : T ? "Cascading Update" : 5 < s - o ? "Update Blocked" : "Update", _ = [], f != null && _.push(["Component name", f]), u != null && _.push(["Method name", u]), o = { - start: o, - end: s, - detail: { devtools: { - properties: _, - track: fe, - trackGroup: "Scheduler ⚛", - color: p - } } - }, i ? i.run(performance.measure.bind(performance, T, o)) : performance.measure(T, o)); - } - za = -1.1, Pl = 0, lg = ig = null, Xh = -1.1, ld = Ys, Ys = -1.1, Zs = xn(); - } - if (n & 4194048 && (gn = tp, s = 0 <= mi && mi < hi ? hi : mi, o = 0 <= ao && ao < hi ? hi : ao, i = 0 <= xl && xl < hi ? hi : xl, u = 0 <= i ? i : 0 <= o ? o : Ct, 0 <= Kh && (En(256), Nd(Kh, u, n, gn)), _ = i, p = Xs, g = 0 < zl, S = sg === 2, u = Ct, i = tp, f = ry, T = oy, Me && (fe = "Transition", 0 < o ? o > u && (o = u) : o = u, 0 < s ? s > o && (s = o) : s = o, 0 < _ ? _ > s && (_ = s) : _ = s, s > _ && p !== null && (I = g ? "secondary-light" : "warning", i ? i.run(console.timeStamp.bind(console, g ? "Consecutive" : "Event: " + p, _, s, fe, "Scheduler ⚛", I)) : console.timeStamp(g ? "Consecutive" : "Event: " + p, _, s, fe, "Scheduler ⚛", I)), o > s && (i ? i.run(console.timeStamp.bind(console, "Action", s, o, fe, "Scheduler ⚛", "primary-dark")) : console.timeStamp("Action", s, o, fe, "Scheduler ⚛", "primary-dark")), u > o && (s = S ? "Promise Resolved" : 5 < u - o ? "Update Blocked" : "Update", _ = [], T != null && _.push(["Component name", T]), f != null && _.push(["Method name", f]), o = { - start: o, - end: u, - detail: { devtools: { - properties: _, - track: fe, - trackGroup: "Scheduler ⚛", - color: "primary-light" - } } - }, i ? i.run(performance.measure.bind(performance, s, o)) : performance.measure(s, o))), ao = mi = -1.1, sg = 0, Kh = -1.1, zl = xl, xl = -1.1, hi = xn()), o = e.timeoutHandle, o !== Yr && (e.timeoutHandle = Yr, Of(o)), o = e.cancelPendingCommit, o !== null && (e.cancelPendingCommit = null, o()), qo = 0, Fs(), je = e, se = o = Fo(e.current, null), ae = n, Le = tr, Er = null, _l = !1, Pd = Hl(e, n), Lg = !1, nn = ki, uu = rr = Ng = El = Rl = 0, Bt = wp = null, Pm = !1, n & 8 && (n |= n & 32), i = e.entangledLanes, i !== 0) for (e = e.entanglements, i &= n; 0 < i;) s = 31 - vn(i), u = 1 << s, n |= e[s], i &= ~u; - return Ta = n, Ui(), e = Vg(), 1e3 < e - $g && (x.recentlyCreatedOwnerStacks = 0, $g = e), Mo.discardPendingWarnings(), o; - } - function vh(e, n) { - Y = null, x.H = yp, x.getCurrentStack = null, Pa = !1, di = null, n === dd || n === am ? (n = qd(), Le = Sp) : n === gg ? (n = qd(), Le = eb) : Le = n === Tg ? Ig : n !== null && typeof n == "object" && typeof n.then == "function" ? kp : km, Er = n; - var o = se; - o === null ? (nn = vp, vs(e, ft(n, e.current))) : o.mode & 2 && Cu(o); - } - function Sh() { - var e = _r.current; - return e === null ? !0 : (ae & 4194048) === ae ? Qo === null : (ae & 62914560) === ae || (ae & 536870912) !== 0 ? e === Qo : !1; - } - function Nf() { - var e = x.H; - return x.H = yp, e === null ? yp : e; - } - function kh() { - var e = x.A; - return x.A = Vb, e; - } - function wc(e) { - gn === null && (gn = e._debugTask == null ? null : e._debugTask); - } - function Pc() { - nn = Tl, _l || (ae & 4194048) !== ae && _r.current !== null || (Pd = !0), !(Rl & 134217727) && !(El & 134217727) || je === null || No(je, ae, rr, !1); - } - function Ff(e, n, o) { - var i = ye; - ye |= Zn; - var s = Nf(), u = kh(); - if (je !== e || ae !== n) { - if (wa) { - var f = e.memoizedUpdaters; - 0 < f.size && (nl(e, ae), f.clear()), jl(e, n); - } - xp = null, Xi(e, n); - } - n = !1, f = nn; - e: do - try { - if (Le !== tr && se !== null) { - var p = se, g = Er; - switch (Le) { - case Ig: - Fs(), f = Sm; - break e; - case Sp: - case lu: - case su: - case kp: - _r.current === null && (n = !0); - var S = Le; - if (Le = tr, Er = null, Ki(e, p, g, S), o && Pd) { - f = ki; - break e; - } - break; - default: S = Le, Le = tr, Er = null, Ki(e, p, g, S); - } - } - wh(), f = nn; - break; - } catch (T) { - vh(e, T); - } - while (!0); - return n && e.shellSuspendCounter++, zu(), ye = i, x.H = s, x.A = u, se === null && (je = null, ae = 0, Ui()), f; - } - function wh() { - for (; se !== null;) Ph(se); - } - function Um(e, n) { - var o = ye; - ye |= Zn; - var i = Nf(), s = kh(); - if (je !== e || ae !== n) { - if (wa) { - var u = e.memoizedUpdaters; - 0 < u.size && (nl(e, ae), u.clear()), jl(e, n); - } - xp = null, Pp = me() + Fg, Xi(e, n); - } else Pd = Hl(e, n); - e: do - try { - if (Le !== tr && se !== null) n: switch (n = se, u = Er, Le) { - case km: - Le = tr, Er = null, Ki(e, n, u, km); - break; - case lu: - case su: - if (Vd(u)) { - Le = tr, Er = null, xh(n); - break; - } - n = function() { - Le !== lu && Le !== su || je !== e || (Le = wm), Kn(e); - }, u.then(n, n); - break e; - case Sp: - Le = wm; - break e; - case eb: - Le = Eg; - break e; - case wm: - Vd(u) ? (Le = tr, Er = null, xh(n)) : (Le = tr, Er = null, Ki(e, n, u, wm)); - break; - case Eg: - var f = null; - switch (se.tag) { - case 26: f = se.memoizedState; - case 5: - case 27: - var p = se, g = p.type, S = p.pendingProps; - if (f ? l(f) : ha(p.stateNode, g, S)) { - Le = tr, Er = null; - var T = p.sibling; - if (T !== null) se = T; - else { - var _ = p.return; - _ !== null ? (se = _, xc(_)) : se = null; - } - break n; - } - break; - default: console.error("Unexpected type of fiber triggered a suspensey commit. This is a bug in React."); - } - Le = tr, Er = null, Ki(e, n, u, Eg); - break; - case kp: - Le = tr, Er = null, Ki(e, n, u, kp); - break; - case Ig: - Fs(), nn = Sm; - break e; - default: throw Error("Unexpected SuspendedReason. This is a bug in React."); - } - x.actQueue !== null ? wh() : Bm(); - break; - } catch (I) { - vh(e, I); - } - while (!0); - return zu(), x.H = i, x.A = s, ye = o, se !== null ? ki : (je = null, ae = 0, Ui(), nn); - } - function Bm() { - for (; se !== null && !J();) Ph(se); - } - function Ph(e) { - var n = e.alternate; - (e.mode & 2) !== Z ? (Jl(e), n = B(e, tt, n, e, Ta), Cu(e)) : n = B(e, tt, n, e, Ta), e.memoizedProps = e.pendingProps, n === null ? xc(e) : se = n; - } - function xh(e) { - var n = B(e, Om, e); - e.memoizedProps = e.pendingProps, n === null ? xc(e) : se = n; - } - function Om(e) { - var n = e.alternate, o = (e.mode & 2) !== Z; - switch (o && Jl(e), e.tag) { - case 15: - case 0: - n = Qr(n, e, e.pendingProps, e.type, void 0, ae); - break; - case 11: - n = Qr(n, e, e.pendingProps, e.type.render, e.ref, ae); - break; - case 5: ds(e); - default: gc(n, e), e = se = dn(e, Ta), n = tt(n, e, Ta); - } - return o && Cu(e), n; - } - function Ki(e, n, o, i) { - zu(), ds(n), fd = null, fp = 0; - var s = n.return; - try { - if (Jp(e, s, n, o, ae)) { - nn = vp, vs(e, ft(o, e.current)), se = null; - return; - } - } catch (u) { - if (s !== null) throw se = s, u; - nn = vp, vs(e, ft(o, e.current)), se = null; - return; - } - n.flags & 32768 ? (ge || i === km ? e = !0 : Pd || (ae & 536870912) !== 0 ? e = !1 : (_l = e = !0, (i === lu || i === su || i === Sp || i === kp) && (i = _r.current, i !== null && i.tag === 13 && (i.flags |= 16384))), zh(n, e)) : xc(n); - } - function xc(e) { - var n = e; - do { - if ((n.flags & 32768) !== 0) { - zh(n, _l); - return; - } - var o = n.alternate; - if (e = n.return, Jl(n), o = B(n, wf, o, n, Ta), (n.mode & 2) !== Z && Wd(n), o !== null) { - se = o; - return; - } - if (n = n.sibling, n !== null) { - se = n; - return; - } - se = n = e; - } while (n !== null); - nn === ki && (nn = Ky); - } - function zh(e, n) { - do { - var o = ua(e.alternate, e); - if (o !== null) { - o.flags &= 32767, se = o; - return; - } - if ((e.mode & 2) !== Z) { - Wd(e), o = e.actualDuration; - for (var i = e.child; i !== null;) o += i.actualDuration, i = i.sibling; - e.actualDuration = o; - } - if (o = e.return, o !== null && (o.flags |= 32768, o.subtreeFlags = 0, o.deletions = null), !n && (e = e.sibling, e !== null)) { - se = e; - return; - } - se = e = o; - } while (e !== null); - nn = Sm, se = null; - } - function Hf(e, n, o, i, s, u, f, p, g, S, T, _, I, O) { - e.cancelPendingCommit = null; - do - el(); - while (Rn !== Ll); - if (Mo.flushLegacyContextWarning(), Mo.flushPendingUnsafeLifecycleWarnings(), (ye & (Zn | uo)) !== Jn) throw Error("Should not already be working."); - if (En(o), S === iu ? Ra(I, O, o, gn) : i !== null ? Fd(I, O, o, i, n !== null && n.alternate !== null && n.alternate.memoizedState.isDehydrated && (n.flags & 256) !== 0, gn) : In(I, O, o, gn), n !== null) { - if (o === 0 && console.error("finishedLanes should not be empty during a commit. This is a bug in React."), n === e.current) throw Error("Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue."); - if (u = n.lanes | n.childLanes, u |= bg, Id(e, o, u, f, p, g), e === je && (se = je = null, ae = 0), xd = n, Nl = e, qo = o, jg = u, Wg = s, sb = i, Dg = O, ub = _, Go = zm, cb = null, n.actualDuration !== 0 || (n.subtreeFlags & 10256) !== 0 || (n.flags & 10256) !== 0 ? (e.callbackNode = null, e.callbackPriority = 0, Fh(qs, function() { - return ll(), Go === zm && (Go = Ag), Eh(), null; - })) : (e.callbackNode = null, e.callbackPriority = 0), pi = null, wl = xn(), _ !== null && bu(O, wl, _, gn), i = (n.flags & 13878) !== 0, (n.subtreeFlags & 13878) !== 0 || i) { - i = x.T, x.T = null, s = wt(), an(2), f = ye, ye |= uo; - try { - jm(e, n, o); - } finally { - ye = f, an(s), x.T = i; - } - } - Rn = ob, Ch(), Th(), _h(); - } - } - function Ch() { - if (Rn === ob) { - Rn = Ll; - var e = Nl, n = xd, o = qo, i = (n.flags & 13878) !== 0; - if ((n.subtreeFlags & 13878) !== 0 || i) { - i = x.T, x.T = null; - var s = wt(); - an(2); - var u = ye; - ye |= uo; - try { - Sd = o, kd = e, Gl(), oh(n, e), kd = Sd = null, pa(e.containerInfo); - } finally { - ye = u, an(s), x.T = i; - } - } - e.current = n, Rn = ab; - } - } - function Th() { - if (Rn === ab) { - Rn = Ll; - var e = cb; - if (e !== null) { - wl = xn(); - var n = fi, o = wl; - !Me || o <= n || console.timeStamp(e, n, o, fe, "Scheduler ⚛", "secondary-light"); - } - e = Nl, n = xd, o = qo; - var i = (n.flags & 8772) !== 0; - if ((n.subtreeFlags & 8772) !== 0 || i) { - i = x.T, x.T = null; - var s = wt(); - an(2); - var u = ye; - ye |= uo; - try { - Sd = o, kd = e, Gl(), yn(e, n.alternate, n), kd = Sd = null; - } finally { - ye = u, an(s), x.T = i; - } - } - e = Dg, n = ub, fi = xn(), e = n === null ? e : wl, n = fi, o = Go === Hg, i = gn, pi !== null ? ir(e, n, pi, !1, i) : !Me || n <= e || (i ? i.run(console.timeStamp.bind(console, o ? "Commit Interrupted View Transition" : "Commit", e, n, fe, "Scheduler ⚛", o ? "error" : "secondary-dark")) : console.timeStamp(o ? "Commit Interrupted View Transition" : "Commit", e, n, fe, "Scheduler ⚛", o ? "error" : "secondary-dark")), Rn = ib; - } - } - function _h() { - if (Rn === lb || Rn === ib) { - if (Rn === lb) { - var e = fi; - fi = xn(); - var n = fi, o = Go === Hg; - !Me || n <= e || console.timeStamp(o ? "Interrupted View Transition" : "Starting Animation", e, n, fe, "Scheduler ⚛", o ? " error" : "secondary-light"), Go !== Hg && (Go = rb); - } - Rn = Ll, Pe(), e = Nl; - var i = xd; - n = qo, o = sb; - var s = i.actualDuration !== 0 || (i.subtreeFlags & 10256) !== 0 || (i.flags & 10256) !== 0; - s ? Rn = Cm : (Rn = Ll, xd = Nl = null, Rh(e, e.pendingLanes), cu = 0, Cp = null); - var u = e.pendingLanes; - if (u === 0 && (Il = null), s || Df(e), u = ar(n), i = i.stateNode, zt && typeof zt.onCommitFiberRoot == "function") try { - var f = (i.current.flags & 128) === 128; - switch (u) { - case 2: - var p = be; - break; - case 8: - p = Oo; - break; - case 32: - p = qs; - break; - case 268435456: - p = Qg; - break; - default: p = qs; - } - zt.onCommitFiberRoot(td, i, p, f); - } catch (_) { - ka || (ka = !0, console.error("React instrumentation encountered an error: %o", _)); - } - if (wa && e.memoizedUpdaters.clear(), Wm(), o !== null) { - f = x.T, p = wt(), an(2), x.T = null; - try { - var g = e.onRecoverableError; - for (i = 0; i < o.length; i++) { - var S = o[i], T = Mm(S.stack); - B(S.source, g, S.value, T); - } - } finally { - x.T = f, an(p); - } - } - qo & 3 && el(), Kn(e), u = e.pendingLanes, (n & 261930) !== 0 && (u & 42) !== 0 ? (nm = !0, e === Ug ? zp++ : (zp = 0, Ug = e)) : zp = 0, s || Za(n, fi), qn && Jf(), Wa(0, !1); - } - } - function Mm(e) { - return e = { componentStack: e }, Object.defineProperty(e, "digest", { get: function() { - console.error("You are accessing \"digest\" from the errorInfo object passed to onRecoverableError. This property is no longer provided as part of errorInfo but can be accessed as a property of the Error instance itself."); - } }), e; - } - function Rh(e, n) { - (e.pooledCacheLanes &= n) === 0 && (n = e.pooledCache, n != null && (e.pooledCache = null, Da(n))); - } - function el() { - return Ch(), Th(), _h(), Eh(); - } - function Eh() { - if (Rn !== Cm) return !1; - var e = Nl, n = jg; - jg = 0; - var o = ar(qo), i = 32 > o ? 32 : o; - o = x.T; - var s = wt(); - try { - an(i), x.T = null; - var u = Wg; - Wg = null, i = Nl; - var f = qo; - if (Rn = Ll, xd = Nl = null, qo = 0, (ye & (Zn | uo)) !== Jn) throw Error("Cannot flush passive effects while already rendering."); - En(f), Bg = !0, Tm = !1; - var p = 0; - if (pi = null, p = me(), Go === rb) { - var g = fi, S = p; - !Me || S <= g || (sd ? sd.run(console.timeStamp.bind(console, "Animating", g, S, fe, "Scheduler ⚛", "secondary-dark")) : console.timeStamp("Animating", g, S, fe, "Scheduler ⚛", "secondary-dark")); - } else { - g = fi, S = p; - var T = Go === Ag; - !Me || S <= g || (gn ? gn.run(console.timeStamp.bind(console, T ? "Waiting for Paint" : "Waiting", g, S, fe, "Scheduler ⚛", "secondary-light")) : console.timeStamp(T ? "Waiting for Paint" : "Waiting", g, S, fe, "Scheduler ⚛", "secondary-light")); - } - g = ye, ye |= uo; - var _ = i.current; - Gl(), dh(_); - var I = i.current; - _ = Dg, Gl(), lh(i, I, f, u, _), Df(i), ye = g; - var O = me(); - if (I = p, _ = gn, pi !== null ? ir(I, O, pi, !0, _) : !Me || O <= I || (_ ? _.run(console.timeStamp.bind(console, "Remaining Effects", I, O, fe, "Scheduler ⚛", "secondary-dark")) : console.timeStamp("Remaining Effects", I, O, fe, "Scheduler ⚛", "secondary-dark")), Za(f, O), Wa(0, !1), Tm ? i === Cp ? cu++ : (cu = 0, Cp = i) : cu = 0, Tm = Bg = !1, zt && typeof zt.onPostCommitFiberRoot == "function") try { - zt.onPostCommitFiberRoot(td, i); - } catch (Fe) { - ka || (ka = !0, console.error("React instrumentation encountered an error: %o", Fe)); - } - var K = i.current.stateNode; - return K.effectDuration = 0, K.passiveEffectDuration = 0, !0; - } finally { - an(s), x.T = o, Rh(e, n); - } - } - function Ih(e, n, o) { - n = ft(o, n), Ud(n), n = oc(e.stateNode, n, 2), e = Mt(e, n, 2), e !== null && (Ci(e, 2), Kn(e)); - } - function Se(e, n, o) { - if (zd = !1, e.tag === 3) Ih(e, e, o); - else { - for (; n !== null;) { - if (n.tag === 3) { - Ih(n, e, o); - return; - } - if (n.tag === 1) { - var i = n.stateNode; - if (typeof n.type.getDerivedStateFromError == "function" || typeof i.componentDidCatch == "function" && (Il === null || !Il.has(i))) { - e = ft(o, e), Ud(e), o = ac(2), i = Mt(n, o, 2), i !== null && (ic(o, i, n, e), Ci(i, 2), Kn(i)); - return; - } - } - n = n.return; - } - console.error(`Internal React error: Attempted to capture a commit phase error inside a detached tree. This indicates a bug in React. Potential causes include deleting the same fiber more than once, committing an already-finished tree, or an inconsistent return pointer. - -Error message: - -%s`, o); - } - } - function Af(e, n, o) { - var i = e.pingCache; - if (i === null) { - i = e.pingCache = new qb(); - var s = /* @__PURE__ */ new Set(); - i.set(n, s); - } else s = i.get(n), s === void 0 && (s = /* @__PURE__ */ new Set(), i.set(n, s)); - s.has(o) || (Lg = !0, s.add(o), i = Qm.bind(null, e, n, o), wa && nl(e, o), n.then(i, i)); - } - function Qm(e, n, o) { - var i = e.pingCache; - i !== null && i.delete(n), e.pingedLanes |= e.suspendedLanes & o, e.warmLanes &= ~o, (o & 127) !== 0 ? 0 > za && (Zs = za = xn(), ep = Yh("Promise Resolved"), Pl = 2) : o & 4194048 && 0 > ao && (hi = ao = xn(), tp = Yh("Promise Resolved"), sg = 2), mh() && x.actQueue === null && console.error(`A suspended resource finished loading inside a test, but the event was not wrapped in act(...). - -When testing, code that resolves suspended data should be wrapped into act(...): - -act(() => { - /* finish loading suspended data */ -}); -/* assert on the output */ - -This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act`), je === e && (ae & o) === o && (nn === Tl || nn === vm && (ae & 62914560) === ae && me() - xm < tb ? (ye & Zn) === Jn && Xi(e, 0) : Ng |= o, uu === ae && (uu = 0)), Kn(e); - } - function Lh(e, n) { - n === 0 && (n = ut()), e = On(e, n), e !== null && (Ci(e, n), Kn(e)); - } - function Nh(e) { - var n = e.memoizedState, o = 0; - n !== null && (o = n.retryLane), Lh(e, o); - } - function $m(e, n) { - var o = 0; - switch (e.tag) { - case 31: - case 13: - var i = e.stateNode, s = e.memoizedState; - s !== null && (o = s.retryLane); - break; - case 19: - i = e.stateNode; - break; - case 22: - i = e.stateNode._retryCache; - break; - default: throw Error("Pinged unknown suspense boundary type. This is probably a bug in React."); - } - i !== null && i.delete(n), Lh(e, o); - } - function jf(e, n, o) { - if ((n.subtreeFlags & 67117056) !== 0) for (n = n.child; n !== null;) { - var i = e, s = n, u = s.type === Lc; - u = o || u, s.tag !== 22 ? s.flags & 67108864 ? u && B(s, Gt, i, s) : jf(i, s, u) : s.memoizedState === null && (u && s.flags & 8192 ? B(s, Gt, i, s) : s.subtreeFlags & 67108864 && B(s, jf, i, s, u)), n = n.sibling; - } - } - function Gt(e, n) { - De(!0); - try { - da(n), fh(n), ih(e, n.alternate, n, !1), sh(e, n, 0, null, !1, 0); - } finally { - De(!1); - } - } - function Df(e) { - var n = !0; - e.current.mode & 24 || (n = !1), jf(e, e.current, n); - } - function zc(e) { - if ((ye & Zn) === Jn) { - var n = e.tag; - if (n === 3 || n === 1 || n === 0 || n === 11 || n === 14 || n === 15) { - if (n = G(e) || "ReactComponent", _m !== null) { - if (_m.has(n)) return; - _m.add(n); - } else _m = new Set([n]); - B(e, function() { - console.error("Can't perform a React state update on a component that hasn't mounted yet. This indicates that you have a side-effect in your render function that asynchronously tries to update the component. Move this work to useEffect instead."); - }); - } - } - } - function nl(e, n) { - wa && e.memoizedUpdaters.forEach(function(o) { - yu(e, o, n); - }); - } - function Fh(e, n) { - var o = x.actQueue; - return o !== null ? (o.push(n), Zb) : Q(e, n); - } - function Hh(e) { - mh() && x.actQueue === null && B(e, function() { - console.error(`An update to %s inside a test was not wrapped in act(...). - -When testing, code that causes React state updates should be wrapped into act(...): - -act(() => { - /* fire events that update state */ -}); -/* assert on the output */ - -This ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act`, G(e)); - }); - } - function Ya(e) { - if (co === null) return e; - var n = co(e); - return n === void 0 ? e : n.current; - } - function Cc(e) { - if (co === null) return e; - var n = co(e); - return n === void 0 ? e != null && typeof e.render == "function" && (n = Ya(e.render), e.render !== n) ? (n = { - $$typeof: jn, - render: n - }, e.displayName !== void 0 && (n.displayName = e.displayName), n) : e : n.current; - } - function Wf(e, n) { - if (co === null) return !1; - var o = e.elementType; - n = n.type; - var i = !1, s = typeof n == "object" && n !== null ? n.$$typeof : null; - switch (e.tag) { - case 1: - typeof n == "function" && (i = !0); - break; - case 0: - (typeof n == "function" || s === kt) && (i = !0); - break; - case 11: - (s === jn || s === kt) && (i = !0); - break; - case 14: - case 15: - (s === al || s === kt) && (i = !0); - break; - default: return !1; - } - return !!(i && (e = co(o), e !== void 0 && e === co(n))); - } - function Ah(e) { - co !== null && typeof WeakSet == "function" && (Cd === null && (Cd = /* @__PURE__ */ new WeakSet()), Cd.add(e)); - } - function jh(e, n, o) { - do { - var i = e, s = i.alternate, u = i.child, f = i.sibling, p = i.tag; - i = i.type; - var g = null; - switch (p) { - case 0: - case 15: - case 1: - g = i; - break; - case 11: g = i.render; - } - if (co === null) throw Error("Expected resolveFamily to be set during hot reload."); - var S = !1; - if (i = !1, g !== null && (g = co(g), g !== void 0 && (o.has(g) ? i = !0 : n.has(g) && (p === 1 ? i = !0 : S = !0))), Cd !== null && (Cd.has(e) || s !== null && Cd.has(s)) && (i = !0), i && (e._debugNeedsRemount = !0), (i || S) && (s = On(e, 2), s !== null && We(s, e, 2)), u === null || i || jh(u, n, o), f === null) break; - e = f; - } while (!0); - } - function Vm(e, n, o, i) { - this.tag = e, this.key = o, this.sibling = this.child = this.return = this.stateNode = this.type = this.elementType = null, this.index = 0, this.refCleanup = this.ref = null, this.pendingProps = n, this.dependencies = this.memoizedState = this.updateQueue = this.memoizedProps = null, this.mode = i, this.subtreeFlags = this.flags = 0, this.deletions = null, this.childLanes = this.lanes = 0, this.alternate = null, this.actualDuration = -0, this.actualStartTime = -1.1, this.treeBaseDuration = this.selfBaseDuration = -0, this._debugTask = this._debugStack = this._debugOwner = this._debugInfo = null, this._debugNeedsRemount = !1, this._debugHookTypes = null, pb || typeof Object.preventExtensions != "function" || Object.preventExtensions(this); - } - function Tc(e) { - return e = e.prototype, !(!e || !e.isReactComponent); - } - function Fo(e, n) { - var o = e.alternate; - switch (o === null ? (o = lt(e.tag, n, e.key, e.mode), o.elementType = e.elementType, o.type = e.type, o.stateNode = e.stateNode, o._debugOwner = e._debugOwner, o._debugStack = e._debugStack, o._debugTask = e._debugTask, o._debugHookTypes = e._debugHookTypes, o.alternate = e, e.alternate = o) : (o.pendingProps = n, o.type = e.type, o.flags = 0, o.subtreeFlags = 0, o.deletions = null, o.actualDuration = -0, o.actualStartTime = -1.1), o.flags = e.flags & 65011712, o.childLanes = e.childLanes, o.lanes = e.lanes, o.child = e.child, o.memoizedProps = e.memoizedProps, o.memoizedState = e.memoizedState, o.updateQueue = e.updateQueue, n = e.dependencies, o.dependencies = n === null ? null : { - lanes: n.lanes, - firstContext: n.firstContext, - _debugThenableState: n._debugThenableState - }, o.sibling = e.sibling, o.index = e.index, o.ref = e.ref, o.refCleanup = e.refCleanup, o.selfBaseDuration = e.selfBaseDuration, o.treeBaseDuration = e.treeBaseDuration, o._debugInfo = e._debugInfo, o._debugNeedsRemount = e._debugNeedsRemount, o.tag) { - case 0: - case 15: - o.type = Ya(e.type); - break; - case 1: - o.type = Ya(e.type); - break; - case 11: o.type = Cc(e.type); - } - return o; - } - function dn(e, n) { - e.flags &= 65011714; - var o = e.alternate; - return o === null ? (e.childLanes = 0, e.lanes = n, e.child = null, e.subtreeFlags = 0, e.memoizedProps = null, e.memoizedState = null, e.updateQueue = null, e.dependencies = null, e.stateNode = null, e.selfBaseDuration = 0, e.treeBaseDuration = 0) : (e.childLanes = o.childLanes, e.lanes = o.lanes, e.child = o.child, e.subtreeFlags = 0, e.deletions = null, e.memoizedProps = o.memoizedProps, e.memoizedState = o.memoizedState, e.updateQueue = o.updateQueue, e.type = o.type, n = o.dependencies, e.dependencies = n === null ? null : { - lanes: n.lanes, - firstContext: n.firstContext, - _debugThenableState: n._debugThenableState - }, e.selfBaseDuration = o.selfBaseDuration, e.treeBaseDuration = o.treeBaseDuration), e; - } - function _c(e, n, o, i, s, u) { - var f = 0, p = e; - if (typeof e == "function") Tc(e) && (f = 1), p = Ya(p); - else if (typeof e == "string") Re && d ? (f = Rt(), f = Bo(e, o, f) ? 26 : L(e) ? 27 : 5) : Re ? (f = Rt(), f = Bo(e, o, f) ? 26 : 5) : f = d && L(e) ? 27 : 5; - else e: switch (e) { - case Ds: return n = lt(31, o, n, s), n.elementType = Ds, n.lanes = u, n; - case ol: return fa(o.children, s, u, n); - case Lc: - f = 8, s |= 24; - break; - case Uf: return e = o, i = s, typeof e.id != "string" && console.error("Profiler must specify an \"id\" of type `string` as a prop. Received the type `%s` instead.", typeof e.id), n = lt(12, e, n, i | 2), n.elementType = Uf, n.lanes = u, n.stateNode = { - effectDuration: 0, - passiveEffectDuration: 0 - }, n; - case Nc: return n = lt(13, o, n, s), n.elementType = Nc, n.lanes = u, n; - case Bf: return n = lt(19, o, n, s), n.elementType = Bf, n.lanes = u, n; - default: - if (typeof e == "object" && e !== null) switch (e.$$typeof) { - case on: - f = 10; - break e; - case ei: - f = 9; - break e; - case jn: - f = 11, p = Cc(p); - break e; - case al: - f = 14; - break e; - case kt: - f = 16, p = null; - break e; - } - p = "", (e === void 0 || typeof e == "object" && e !== null && Object.keys(e).length === 0) && (p += " You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports."), e === null ? o = "null" : fn(e) ? o = "array" : e !== void 0 && e.$$typeof === Ho ? (o = "<" + ($e(e.type) || "Unknown") + " />", p = " Did you accidentally export a JSX literal instead of a component?") : o = typeof e, f = i ? typeof i.tag == "number" ? G(i) : typeof i.name == "string" ? i.name : null : null, f && (p += ` - -Check the render method of \`` + f + "`."), f = 29, o = Error("Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: " + (o + "." + p)), p = null; - } - return n = lt(f, o, n, s), n.elementType = e, n.type = p, n.lanes = u, n._debugOwner = i, n; - } - function Rc(e, n, o) { - return n = _c(e.type, e.key, e.props, e._owner, n, o), n._debugOwner = e._owner, n._debugStack = e._debugStack, n._debugTask = e._debugTask, n; - } - function fa(e, n, o, i) { - return e = lt(7, e, i, n), e.lanes = o, e; - } - function Ec(e, n, o) { - return e = lt(6, e, null, n), e.lanes = o, e; - } - function Xa(e) { - var n = lt(18, null, null, Z); - return n.stateNode = e, n; - } - function Hs(e, n, o) { - return n = lt(4, e.children !== null ? e.children : [], e.key, n), n.lanes = o, n.stateNode = { - containerInfo: e.containerInfo, - pendingChildren: null, - implementation: e.implementation - }, n; - } - function tl(e, n, o, i, s, u, f, p, g) { - for (this.tag = 1, this.containerInfo = e, this.pingCache = this.current = this.pendingChildren = null, this.timeoutHandle = Yr, this.callbackNode = this.next = this.pendingContext = this.context = this.cancelPendingCommit = null, this.callbackPriority = 0, this.expirationTimes = or(-1), this.entangledLanes = this.shellSuspendCounter = this.errorRecoveryDisabledLanes = this.expiredLanes = this.warmLanes = this.pingedLanes = this.suspendedLanes = this.pendingLanes = 0, this.entanglements = or(0), this.hiddenUpdates = or(null), this.identifierPrefix = i, this.onUncaughtError = s, this.onCaughtError = u, this.onRecoverableError = f, this.pooledCache = null, this.pooledCacheLanes = 0, this.formState = g, this.incompleteTransitions = /* @__PURE__ */ new Map(), this.passiveEffectDuration = this.effectDuration = -0, this.memoizedUpdaters = /* @__PURE__ */ new Set(), e = this.pendingUpdatersLaneMap = [], n = 0; 31 > n; n++) e.push(/* @__PURE__ */ new Set()); - this._debugRootType = o ? "hydrateRoot()" : "createRoot()"; - } - function Ka(e, n, o, i, s, u, f, p, g, S, T, _) { - return e = new tl(e, n, o, f, g, S, T, _, p), n = 1, u === !0 && (n |= 24), u = lt(3, null, null, n | 2), e.current = u, u.stateNode = e, n = Ai(), Po(n), e.pooledCache = n, Po(n), u.memoizedState = { - element: i, - isDehydrated: o, - cache: n - }, Au(u), e; - } - function vt(e) { - return "" + e; - } - function Dh(e) { - return e ? (e = Oe, e) : Oe; - } - function Wh(e, n, o, i) { - return As(n.current, 2, e, n, o, i), 2; - } - function As(e, n, o, i, s, u) { - if (zt && typeof zt.onScheduleFiberRoot == "function") try { - zt.onScheduleFiberRoot(td, i, o); - } catch (f) { - ka || (ka = !0, console.error("React instrumentation encountered an error: %o", f)); - } - s = Dh(s), i.context === null ? i.context = s : i.pendingContext = s, Pa && di !== null && !hb && (hb = !0, console.error(`Render methods should be a pure function of props and state; triggering nested component updates from render is not allowed. If necessary, trigger nested updates in componentDidUpdate. - -Check the render method of %s.`, G(di) || "Unknown")), i = zo(n), i.payload = { element: o }, u = u === void 0 ? null : u, u !== null && (typeof u != "function" && console.error("Expected the last optional `callback` argument to be a function. Instead received: %s.", u), i.callback = u), o = Mt(e, i, n), o !== null && (ur(n, "root.render()", null), We(o, e, n), Bi(o, e, n)); - } - function js(e, n) { - if (e = e.memoizedState, e !== null && e.dehydrated !== null) { - var o = e.retryLane; - e.retryLane = o !== 0 && o < n ? o : n; - } - } - function rl(e, n) { - js(e, n), (e = e.alternate) && js(e, n); - } - function Ic() { - return di; - } - var le = {}, qm = import_react.default, St = import_scheduler.default, ze = Object.assign, Uh = Symbol.for("react.element"), Ho = Symbol.for("react.transitional.element"), Ao = Symbol.for("react.portal"), ol = Symbol.for("react.fragment"), Lc = Symbol.for("react.strict_mode"), Uf = Symbol.for("react.profiler"), ei = Symbol.for("react.consumer"), on = Symbol.for("react.context"), jn = Symbol.for("react.forward_ref"), Nc = Symbol.for("react.suspense"), Bf = Symbol.for("react.suspense_list"), al = Symbol.for("react.memo"), kt = Symbol.for("react.lazy"); - var Ds = Symbol.for("react.activity"); - var Bh = Symbol.for("react.memo_cache_sentinel"); - var ni = Symbol.iterator, il = Symbol.for("react.client.reference"), fn = Array.isArray, x = qm.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE, Jt = m.rendererVersion, Zt = m.rendererPackageName, jo = m.extraDevToolsConfig, ot = m.getPublicInstance, Zr = m.getRootHostContext, Dn = m.getChildHostContext, Ws = m.prepareForCommit, pa = m.resetAfterCommit, Fc = m.createInstance; - m.cloneMutableInstance; - var bn = m.appendInitialChild, Ue = m.finalizeInitialChildren, ue = m.shouldSetTextContent, Do = m.createTextInstance; - m.cloneMutableTextInstance; - var Yt = m.scheduleTimeout, Of = m.cancelTimeout, Yr = m.noTimeout, at = m.isPrimaryRenderer; - m.warnsIfNotActing; - var Be = m.supportsMutation, Xr = m.supportsPersistence, qn = m.supportsHydration, Gm = m.getInstanceFromNode; - m.beforeActiveInstanceBlur; - var qe = m.preparePortalMount; - m.prepareScopeUpdate, m.getInstanceFromScope; - var an = m.setCurrentUpdatePriority, wt = m.getCurrentUpdatePriority, Mf = m.resolveUpdatePriority, ll = m.trackSchedulerEvent, ti = m.resolveEventType, Pr = m.resolveEventTimeStamp, Us = m.shouldAttemptEagerTransition, Qf = m.detachDeletedInstance; - m.requestPostPaintCallback; - var sl = m.maySuspendCommit, ul = m.maySuspendCommitOnUpdate, Hc = m.maySuspendCommitInSyncRender, ha = m.preloadInstance, cl = m.startSuspendingCommit, Ac = m.suspendInstance; - m.suspendOnActiveViewTransition; - var jc = m.waitForCommitToBeReady, Dc = m.getSuspendedCommitReason, Xt = m.NotPendingTransition, Kt = m.HostTransitionContext, Bs = m.resetFormInstance, ri = m.bindToConsole, Oh = m.supportsMicrotasks, er = m.scheduleMicrotask, xr = m.supportsTestSelectors, $f = m.findFiberRoot, ma = m.getBoundingRect, Vf = m.getTextContent, Kr = m.isHiddenSubtree, Wc = m.matchAccessibilityRole, Ft = m.setFocusIfFocusable, zr = m.setupIntersectionObserver, ln = m.appendChild, Wo = m.appendChildToContainer, ne = m.commitTextUpdate, Ie = m.commitMount, pn = m.commitUpdate, Uc = m.insertBefore, dl = m.insertInContainerBefore, oi = m.removeChild, Bc = m.removeChildFromContainer, fl = m.resetTextContent, pl = m.hideInstance, Jm = m.hideTextInstance, Os = m.unhideInstance, Mh = m.unhideTextInstance; - m.cancelViewTransitionName, m.cancelRootViewTransitionName, m.restoreRootViewTransitionName, m.cloneRootViewTransitionContainer, m.removeRootViewTransitionClone, m.measureClonedInstance, m.hasInstanceChanged, m.hasInstanceAffectedParent, m.startViewTransition, m.startGestureTransition, m.stopViewTransition, m.getCurrentGestureOffset, m.createViewTransitionInstance; - var qf = m.clearContainer; - m.createFragmentInstance, m.updateFragmentInstanceFiber, m.commitNewChildToFragmentInstance, m.deleteChildFromFragmentInstance; - var Qh = m.cloneInstance, Oc = m.createContainerChildSet, Mc = m.appendChildToContainerChildSet, hn = m.finalizeContainerChildren, Qc = m.replaceContainerChildren, eo = m.cloneHiddenInstance, sn = m.cloneHiddenTextInstance, Ms = m.isSuspenseInstancePending, $c = m.isSuspenseInstanceFallback, Pn = m.getSuspenseInstanceFallbackErrorDetails, mn = m.registerSuspenseInstanceRetry, Pt = m.canHydrateFormStateMarker, Cr = m.isFormStateMarkerMatching, ga = m.getNextHydratableSibling, Zm = m.getNextHydratableSiblingAfterSingleton, Vc = m.getFirstHydratableChild, qc = m.getFirstHydratableChildWithinContainer, Gc = m.getFirstHydratableChildWithinActivityInstance, Jc = m.getFirstHydratableChildWithinSuspenseInstance, Zc = m.getFirstHydratableChildWithinSingleton, Qs = m.canHydrateInstance, Ym = m.canHydrateTextInstance, ce = m.canHydrateActivityInstance, Ne = m.canHydrateSuspenseInstance, de = m.hydrateInstance, he = m.hydrateTextInstance, _e = m.hydrateActivityInstance, Ht = m.hydrateSuspenseInstance, ya = m.getNextHydratableInstanceAfterActivityInstance, ai = m.getNextHydratableInstanceAfterSuspenseInstance, Gf = m.commitHydratedInstance, Uo = m.commitHydratedContainer, Xe = m.commitHydratedActivityInstance, ba = m.commitHydratedSuspenseInstance, ii = m.finalizeHydratedChildren, Jf = m.flushHydrationEvents; - m.clearActivityBoundary; - var At = m.clearSuspenseBoundary; - m.clearActivityBoundaryFromContainer; - var hl = m.clearSuspenseBoundaryFromContainer, $s = m.hideDehydratedBoundary, xt = m.unhideDehydratedBoundary, Yc = m.shouldDeleteUnhydratedTailInstances, Vs = m.diffHydratedPropsForDevWarnings, Zf = m.diffHydratedTextForDevWarnings, ml = m.describeHydratableInstanceForDevWarnings, Xc = m.validateHydratableInstance, va = m.validateHydratableTextInstance, Re = m.supportsResources, Bo = m.isHostHoistableType, Sa = m.getHoistableRoot, no = m.getResource, Kc = m.acquireResource, ed = m.releaseResource, $h = m.hydrateHoistable, gl = m.mountHoistable, nd = m.unmountHoistable, t = m.createHoistableInstance, r = m.prepareToCommitHoistables, a = m.mayResourceSuspendCommit, l = m.preloadResource, c = m.suspendResource, d = m.supportsSingletons, h = m.resolveSingletonInstance, y = m.acquireSingletonInstance, R = m.releaseSingletonInstance, L = m.isHostSingletonType, j = m.isSingletonScope, A = [], W = [], V = -1, Oe = {}; - Object.freeze(Oe); - var vn = Math.clz32 ? Math.clz32 : Im, li = Math.log, P = Math.LN2, w = 256, C = 262144, H = 4194304, Q = St.unstable_scheduleCallback, Ge = St.unstable_cancelCallback, J = St.unstable_shouldYield, Pe = St.unstable_requestPaint, me = St.unstable_now, be = St.unstable_ImmediatePriority, Oo = St.unstable_UserBlockingPriority, qs = St.unstable_NormalPriority, Qg = St.unstable_IdlePriority, Ib = St.log, Lb = St.unstable_setDisableYieldValue, td = null, zt = null, ka = !1, wa = typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ < "u", $g = 0; - if (typeof performance == "object" && typeof performance.now == "function") var Nb = performance, Vg = function() { - return Nb.now(); - }; - else { - var Fb = Date; - Vg = function() { - return Fb.now(); - }; - } - var jt = typeof Object.is == "function" ? Object.is : Ti, qg = typeof reportError == "function" ? reportError : function(e) { - if (typeof window == "object" && typeof window.ErrorEvent == "function") { - var n = new window.ErrorEvent("error", { - bubbles: !0, - cancelable: !0, - message: typeof e == "object" && e !== null && typeof e.message == "string" ? String(e.message) : String(e), - error: e - }); - if (!window.dispatchEvent(n)) return; - } else if (typeof process == "object" && typeof process.emit == "function") { - process.emit("uncaughtException", e); - return; - } - console.error(e); - }, Xm = Object.prototype.hasOwnProperty, Me = typeof console < "u" && typeof console.timeStamp == "function" && typeof performance < "u" && typeof performance.measure == "function", fe = "Blocking", yl = !1, si = { - color: "primary", - properties: null, - tooltipText: "", - track: "Components ⚛" - }, bl = { - start: -0, - end: -0, - detail: { devtools: si } - }, Hb = ["Changed Props", ""], Ab = ["Changed Props", "This component received deeply equal props. It might benefit from useMemo or the React Compiler in its owner."], Yf = 0, Gg, Jg, Zg, Yg, Xg, Kg, ey; - Ea.__reactDisabledLog = !0; - var Km, ny, eg = !1, ng = new (typeof WeakMap == "function" ? WeakMap : Map)(), tg = /* @__PURE__ */ new WeakMap(), rd = [], od = 0, Vh = null, Xf = 0, to = [], ro = 0, Gs = null, ui = 1, ci = "", vl = st(null), Kf = st(null), Sl = st(null), qh = st(null), ty = /["'&<>\n\t]|^\s|\s$/, di = null, Pa = !1, it = null, Ke = null, ge = !1, xa = !1, Tr = null, kl = null, oo = !1, rg = Error("Hydration Mismatch Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React."), Z = 0, Gh = st(null), og = st(null), ag = st(null), Jh = {}, Zh = null, ad = null, id = !1, jb = typeof AbortController < "u" ? AbortController : function() { - var e = [], n = this.signal = { - aborted: !1, - addEventListener: function(o, i) { - e.push(i); - } - }; - this.abort = function() { - n.aborted = !0, e.forEach(function(o) { - return o(); - }); - }; - }, Db = St.unstable_scheduleCallback, Wb = St.unstable_NormalPriority, un = { - $$typeof: on, - Consumer: null, - Provider: null, - _currentValue: null, - _currentValue2: null, - _threadCount: 0, - _currentRenderer: null, - _currentRenderer2: null - }, xn = St.unstable_now, Yh = console.createTask ? console.createTask : function() { - return null; - }, Ct = -0, wl = -0, fi = -0, pi = null, Dt = -1.1, Js = -0, en = -0, $ = -1.1, q = -1.1, Je = null, cn = !1, Zs = -0, za = -1.1, ep = null, Pl = 0, ig = null, lg = null, Ys = -1.1, np = null, ld = -1.1, Xh = -1.1, hi = -0, mi = -1.1, ao = -1.1, sg = 0, tp = null, ry = null, oy = null, xl = -1.1, Xs = null, zl = -1.1, Kh = -1.1, sd = null, ay = 0, rp = -1.1, em = !1, nm = !1, tm = null, ud = null, ug = !1, cg = !1, rm = !1, dg = !1, Ks = 0, fg = {}, op = null, pg = 0, eu = 0, cd = null, iy = x.S; - x.S = function(e, n) { - if (nb = me(), typeof n == "object" && n !== null && typeof n.then == "function") { - if (0 > mi && 0 > ao) { - mi = xn(); - var o = Pr(), i = ti(); - (o !== zl || i !== Xs) && (zl = -1.1), xl = o, Xs = i; - } - jp(e, n); - } - iy !== null && iy(e, n); - }; - var nu = st(null), Mo = { - recordUnsafeLifecycleWarnings: function() {}, - flushPendingUnsafeLifecycleWarnings: function() {}, - recordLegacyContextWarning: function() {}, - flushLegacyContextWarning: function() {}, - discardPendingWarnings: function() {} - }, ap = [], ip = [], lp = [], sp = [], up = [], cp = [], tu = /* @__PURE__ */ new Set(); - Mo.recordUnsafeLifecycleWarnings = function(e, n) { - tu.has(e.type) || (typeof n.componentWillMount == "function" && n.componentWillMount.__suppressDeprecationWarning !== !0 && ap.push(e), e.mode & 8 && typeof n.UNSAFE_componentWillMount == "function" && ip.push(e), typeof n.componentWillReceiveProps == "function" && n.componentWillReceiveProps.__suppressDeprecationWarning !== !0 && lp.push(e), e.mode & 8 && typeof n.UNSAFE_componentWillReceiveProps == "function" && sp.push(e), typeof n.componentWillUpdate == "function" && n.componentWillUpdate.__suppressDeprecationWarning !== !0 && up.push(e), e.mode & 8 && typeof n.UNSAFE_componentWillUpdate == "function" && cp.push(e)); - }, Mo.flushPendingUnsafeLifecycleWarnings = function() { - var e = /* @__PURE__ */ new Set(); - 0 < ap.length && (ap.forEach(function(p) { - e.add(G(p) || "Component"), tu.add(p.type); - }), ap = []); - var n = /* @__PURE__ */ new Set(); - 0 < ip.length && (ip.forEach(function(p) { - n.add(G(p) || "Component"), tu.add(p.type); - }), ip = []); - var o = /* @__PURE__ */ new Set(); - 0 < lp.length && (lp.forEach(function(p) { - o.add(G(p) || "Component"), tu.add(p.type); - }), lp = []); - var i = /* @__PURE__ */ new Set(); - 0 < sp.length && (sp.forEach(function(p) { - i.add(G(p) || "Component"), tu.add(p.type); - }), sp = []); - var s = /* @__PURE__ */ new Set(); - 0 < up.length && (up.forEach(function(p) { - s.add(G(p) || "Component"), tu.add(p.type); - }), up = []); - var u = /* @__PURE__ */ new Set(); - if (0 < cp.length && (cp.forEach(function(p) { - u.add(G(p) || "Component"), tu.add(p.type); - }), cp = []), 0 < n.size) { - var f = Lr(n); - console.error(`Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details. - -* Move code with side effects to componentDidMount, and set initial state in the constructor. - -Please update the following components: %s`, f); - } - 0 < i.size && (f = Lr(i), console.error(`Using UNSAFE_componentWillReceiveProps in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details. - -* Move data fetching code or side effects to componentDidUpdate. -* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state - -Please update the following components: %s`, f)), 0 < u.size && (f = Lr(u), console.error(`Using UNSAFE_componentWillUpdate in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details. - -* Move data fetching code or side effects to componentDidUpdate. - -Please update the following components: %s`, f)), 0 < e.size && (f = Lr(e), console.warn(`componentWillMount has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details. - -* Move code with side effects to componentDidMount, and set initial state in the constructor. -* Rename componentWillMount to UNSAFE_componentWillMount to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run \`npx react-codemod rename-unsafe-lifecycles\` in your project source folder. - -Please update the following components: %s`, f)), 0 < o.size && (f = Lr(o), console.warn(`componentWillReceiveProps has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details. - -* Move data fetching code or side effects to componentDidUpdate. -* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state -* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run \`npx react-codemod rename-unsafe-lifecycles\` in your project source folder. - -Please update the following components: %s`, f)), 0 < s.size && (f = Lr(s), console.warn(`componentWillUpdate has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details. - -* Move data fetching code or side effects to componentDidUpdate. -* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run \`npx react-codemod rename-unsafe-lifecycles\` in your project source folder. - -Please update the following components: %s`, f)); - }; - var om = /* @__PURE__ */ new Map(), ly = /* @__PURE__ */ new Set(); - Mo.recordLegacyContextWarning = function(e, n) { - for (var o = null, i = e; i !== null;) i.mode & 8 && (o = i), i = i.return; - o === null ? console.error("Expected to find a StrictMode component in a strict mode tree. This error is likely caused by a bug in React. Please file an issue.") : !ly.has(e.type) && (i = om.get(o), e.type.contextTypes != null || e.type.childContextTypes != null || n !== null && typeof n.getChildContext == "function") && (i === void 0 && (i = [], om.set(o, i)), i.push(e)); - }, Mo.flushLegacyContextWarning = function() { - om.forEach(function(e) { - if (e.length !== 0) { - var n = e[0], o = /* @__PURE__ */ new Set(); - e.forEach(function(s) { - o.add(G(s) || "Component"), ly.add(s.type); - }); - var i = Lr(o); - B(n, function() { - console.error(`Legacy context API has been detected within a strict-mode tree. - -The old API will be supported in all 16.x releases, but applications using it should migrate to the new version. - -Please update the following components: %s - -Learn more about this warning here: https://react.dev/link/legacy-context`, i); - }); - } - }); - }, Mo.discardPendingWarnings = function() { - ap = [], ip = [], lp = [], sp = [], up = [], cp = [], om = /* @__PURE__ */ new Map(); - }; - var sy = { react_stack_bottom_frame: function(e, n, o) { - var i = Pa; - Pa = !0; - try { - return e(n, o); - } finally { - Pa = i; - } - } }, hg = sy.react_stack_bottom_frame.bind(sy), uy = { react_stack_bottom_frame: function(e) { - var n = Pa; - Pa = !0; - try { - return e.render(); - } finally { - Pa = n; - } - } }, cy = uy.react_stack_bottom_frame.bind(uy), dy = { react_stack_bottom_frame: function(e, n) { - try { - n.componentDidMount(); - } catch (o) { - Se(e, e.return, o); - } - } }, mg = dy.react_stack_bottom_frame.bind(dy), fy = { react_stack_bottom_frame: function(e, n, o, i, s) { - try { - n.componentDidUpdate(o, i, s); - } catch (u) { - Se(e, e.return, u); - } - } }, py = fy.react_stack_bottom_frame.bind(fy), hy = { react_stack_bottom_frame: function(e, n) { - var o = n.stack; - e.componentDidCatch(n.value, { componentStack: o !== null ? o : "" }); - } }, Ub = hy.react_stack_bottom_frame.bind(hy), my = { react_stack_bottom_frame: function(e, n, o) { - try { - o.componentWillUnmount(); - } catch (i) { - Se(e, n, i); - } - } }, gy = my.react_stack_bottom_frame.bind(my), yy = { react_stack_bottom_frame: function(e) { - var n = e.create; - return e = e.inst, n = n(), e.destroy = n; - } }, Bb = yy.react_stack_bottom_frame.bind(yy), by = { react_stack_bottom_frame: function(e, n, o) { - try { - o(); - } catch (i) { - Se(e, n, i); - } - } }, Ob = by.react_stack_bottom_frame.bind(by), vy = { react_stack_bottom_frame: function(e) { - var n = e._init; - return n(e._payload); - } }, Mb = vy.react_stack_bottom_frame.bind(vy), dd = Error("Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`."), gg = Error("Suspense Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React."), am = Error("Suspense Exception: This is not a real error! It's an implementation detail of `useActionState` to interrupt the current render. You must either rethrow it immediately, or move the `useActionState` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\n\nTo handle async errors, wrap your component in an error boundary."), im = { then: function() { - console.error("Internal React error: A listener was unexpectedly attached to a \"noop\" thenable. This is a bug in React. Please file an issue."); - } }, ru = null, dp = !1, fd = null, fp = 0, oe = null, yg, Sy = yg = !1, ky = {}, wy = {}, Py = {}; - Zo = function(e, n, o) { - if (o !== null && typeof o == "object" && o._store && (!o._store.validated && o.key == null || o._store.validated === 2)) { - if (typeof o._store != "object") throw Error("React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue."); - o._store.validated = 1; - var i = G(e), s = i || "null"; - if (!ky[s]) { - ky[s] = !0, o = o._owner, e = e._debugOwner; - var u = ""; - e && typeof e.tag == "number" && (s = G(e)) && (u = ` - -Check the render method of \`` + s + "`."), u || i && (u = ` - -Check the top-level render call using <` + i + ">."); - var f = ""; - o != null && e !== o && (i = null, typeof o.tag == "number" ? i = G(o) : typeof o.name == "string" && (i = o.name), i && (f = " It was passed a child from " + i + ".")), B(n, function() { - console.error("Each child in a list should have a unique \"key\" prop.%s%s See https://react.dev/link/warning-keys for more information.", u, f); - }); - } - } - }; - var ou = rs(!0), xy = rs(!1), pp = 1, gi = 2, io = [], pd = 0, bg = 0, zy = 0, Cy = 1, Ty = 2, vg = 3, Cl = !1, _y = !1, Sg = null, kg = !1, hd = st(null), lm = st(0), _r = st(null), Qo = null, md = 1, hp = 2, Sn = st(0), sm = 0, lo = 1, Wt = 2, Rr = 4, Ut = 8, gd, Ry = /* @__PURE__ */ new Set(), Ey = /* @__PURE__ */ new Set(), wg = /* @__PURE__ */ new Set(), Iy = /* @__PURE__ */ new Set(), yi = 0, Y = null, Ae = null, zn = null, um = !1, yd = !1, au = !1, cm = 0, mp = 0, bi = null, Qb = 0, $b = 25, z = null, so = null, vi = -1, gp = !1, yp = { - readContext: Ee, - use: we, - useCallback: Ye, - useContext: Ye, - useEffect: Ye, - useImperativeHandle: Ye, - useLayoutEffect: Ye, - useInsertionEffect: Ye, - useMemo: Ye, - useReducer: Ye, - useRef: Ye, - useState: Ye, - useDebugValue: Ye, - useDeferredValue: Ye, - useTransition: Ye, - useSyncExternalStore: Ye, - useId: Ye, - useHostTransitionStatus: Ye, - useFormState: Ye, - useActionState: Ye, - useOptimistic: Ye, - useMemoCache: Ye, - useCacheRefresh: Ye - }; - yp.useEffectEvent = Ye; - var Pg = null, Ly = null, xg = null, Ny = null, Ca = null, $o = null, dm = null; - Pg = { - readContext: function(e) { - return Ee(e); - }, - use: we, - useCallback: function(e, n) { - return z = "useCallback", ee(), gt(n), Ku(e, n); - }, - useContext: function(e) { - return z = "useContext", ee(), Ee(e); - }, - useEffect: function(e, n) { - return z = "useEffect", ee(), gt(n), yt(e, n); - }, - useImperativeHandle: function(e, n, o) { - return z = "useImperativeHandle", ee(), gt(o), Xu(e, n, o); - }, - useInsertionEffect: function(e, n) { - z = "useInsertionEffect", ee(), gt(n), To(4, Wt, e, n); - }, - useLayoutEffect: function(e, n) { - return z = "useLayoutEffect", ee(), gt(n), _o(e, n); - }, - useMemo: function(e, n) { - z = "useMemo", ee(), gt(n); - var o = x.H; - x.H = Ca; - try { - return ec(e, n); - } finally { - x.H = o; - } - }, - useReducer: function(e, n, o) { - z = "useReducer", ee(); - var i = x.H; - x.H = Ca; - try { - return $u(e, n, o); - } finally { - x.H = i; - } - }, - useRef: function(e) { - return z = "useRef", ee(), br(e); - }, - useState: function(e) { - z = "useState", ee(); - var n = x.H; - x.H = Ca; - try { - return $i(e); - } finally { - x.H = n; - } - }, - useDebugValue: function() { - z = "useDebugValue", ee(); - }, - useDeferredValue: function(e, n) { - return z = "useDeferredValue", ee(), ms(e, n); - }, - useTransition: function() { - return z = "useTransition", ee(), tc(); - }, - useSyncExternalStore: function(e, n, o) { - return z = "useSyncExternalStore", ee(), Vu(e, n, o); - }, - useId: function() { - return z = "useId", ee(), bs(); - }, - useFormState: function(e, n) { - return z = "useFormState", ee(), Mi(), tn(e, n); - }, - useActionState: function(e, n) { - return z = "useActionState", ee(), tn(e, n); - }, - useOptimistic: function(e) { - return z = "useOptimistic", ee(), Ju(e); - }, - useHostTransitionStatus: ia, - useMemoCache: Oa, - useCacheRefresh: function() { - return z = "useCacheRefresh", ee(), la(); - }, - useEffectEvent: function(e) { - return z = "useEffectEvent", ee(), ra(e); - } - }, Ly = { - readContext: function(e) { - return Ee(e); - }, - use: we, - useCallback: function(e, n) { - return z = "useCallback", N(), Ku(e, n); - }, - useContext: function(e) { - return z = "useContext", N(), Ee(e); - }, - useEffect: function(e, n) { - return z = "useEffect", N(), yt(e, n); - }, - useImperativeHandle: function(e, n, o) { - return z = "useImperativeHandle", N(), Xu(e, n, o); - }, - useInsertionEffect: function(e, n) { - z = "useInsertionEffect", N(), To(4, Wt, e, n); - }, - useLayoutEffect: function(e, n) { - return z = "useLayoutEffect", N(), _o(e, n); - }, - useMemo: function(e, n) { - z = "useMemo", N(); - var o = x.H; - x.H = Ca; - try { - return ec(e, n); - } finally { - x.H = o; - } - }, - useReducer: function(e, n, o) { - z = "useReducer", N(); - var i = x.H; - x.H = Ca; - try { - return $u(e, n, o); - } finally { - x.H = i; - } - }, - useRef: function(e) { - return z = "useRef", N(), br(e); - }, - useState: function(e) { - z = "useState", N(); - var n = x.H; - x.H = Ca; - try { - return $i(e); - } finally { - x.H = n; - } - }, - useDebugValue: function() { - z = "useDebugValue", N(); - }, - useDeferredValue: function(e, n) { - return z = "useDeferredValue", N(), ms(e, n); - }, - useTransition: function() { - return z = "useTransition", N(), tc(); - }, - useSyncExternalStore: function(e, n, o) { - return z = "useSyncExternalStore", N(), Vu(e, n, o); - }, - useId: function() { - return z = "useId", N(), bs(); - }, - useActionState: function(e, n) { - return z = "useActionState", N(), tn(e, n); - }, - useFormState: function(e, n) { - return z = "useFormState", N(), Mi(), tn(e, n); - }, - useOptimistic: function(e) { - return z = "useOptimistic", N(), Ju(e); - }, - useHostTransitionStatus: ia, - useMemoCache: Oa, - useCacheRefresh: function() { - return z = "useCacheRefresh", N(), la(); - }, - useEffectEvent: function(e) { - return z = "useEffectEvent", N(), ra(e); - } - }, xg = { - readContext: function(e) { - return Ee(e); - }, - use: we, - useCallback: function(e, n) { - return z = "useCallback", N(), Ma(e, n); - }, - useContext: function(e) { - return z = "useContext", N(), Ee(e); - }, - useEffect: function(e, n) { - z = "useEffect", N(), Qn(2048, Ut, e, n); - }, - useImperativeHandle: function(e, n, o) { - return z = "useImperativeHandle", N(), aa(e, n, o); - }, - useInsertionEffect: function(e, n) { - return z = "useInsertionEffect", N(), Qn(4, Wt, e, n); - }, - useLayoutEffect: function(e, n) { - return z = "useLayoutEffect", N(), Qn(4, Rr, e, n); - }, - useMemo: function(e, n) { - z = "useMemo", N(); - var o = x.H; - x.H = $o; - try { - return Vi(e, n); - } finally { - x.H = o; - } - }, - useReducer: function(e, n, o) { - z = "useReducer", N(); - var i = x.H; - x.H = $o; - try { - return Br(e, n, o); - } finally { - x.H = i; - } - }, - useRef: function() { - return z = "useRef", N(), xe().memoizedState; - }, - useState: function() { - z = "useState", N(); - var e = x.H; - x.H = $o; - try { - return Br(gr); - } finally { - x.H = e; - } - }, - useDebugValue: function() { - z = "useDebugValue", N(); - }, - useDeferredValue: function(e, n) { - return z = "useDeferredValue", N(), nc(e, n); - }, - useTransition: function() { - return z = "useTransition", N(), Qp(); - }, - useSyncExternalStore: function(e, n, o) { - return z = "useSyncExternalStore", N(), ta(e, n, o); - }, - useId: function() { - return z = "useId", N(), xe().memoizedState; - }, - useFormState: function(e) { - return z = "useFormState", N(), Mi(), hs(e); - }, - useActionState: function(e) { - return z = "useActionState", N(), hs(e); - }, - useOptimistic: function(e, n) { - return z = "useOptimistic", N(), rf(e, n); - }, - useHostTransitionStatus: ia, - useMemoCache: Oa, - useCacheRefresh: function() { - return z = "useCacheRefresh", N(), xe().memoizedState; - }, - useEffectEvent: function(e) { - return z = "useEffectEvent", N(), oa(e); - } - }, Ny = { - readContext: function(e) { - return Ee(e); - }, - use: we, - useCallback: function(e, n) { - return z = "useCallback", N(), Ma(e, n); - }, - useContext: function(e) { - return z = "useContext", N(), Ee(e); - }, - useEffect: function(e, n) { - z = "useEffect", N(), Qn(2048, Ut, e, n); - }, - useImperativeHandle: function(e, n, o) { - return z = "useImperativeHandle", N(), aa(e, n, o); - }, - useInsertionEffect: function(e, n) { - return z = "useInsertionEffect", N(), Qn(4, Wt, e, n); - }, - useLayoutEffect: function(e, n) { - return z = "useLayoutEffect", N(), Qn(4, Rr, e, n); - }, - useMemo: function(e, n) { - z = "useMemo", N(); - var o = x.H; - x.H = dm; - try { - return Vi(e, n); - } finally { - x.H = o; - } - }, - useReducer: function(e, n, o) { - z = "useReducer", N(); - var i = x.H; - x.H = dm; - try { - return Qi(e, n, o); - } finally { - x.H = i; - } - }, - useRef: function() { - return z = "useRef", N(), xe().memoizedState; - }, - useState: function() { - z = "useState", N(); - var e = x.H; - x.H = dm; - try { - return Qi(gr); - } finally { - x.H = e; - } - }, - useDebugValue: function() { - z = "useDebugValue", N(); - }, - useDeferredValue: function(e, n) { - return z = "useDeferredValue", N(), sf(e, n); - }, - useTransition: function() { - return z = "useTransition", N(), Ro(); - }, - useSyncExternalStore: function(e, n, o) { - return z = "useSyncExternalStore", N(), ta(e, n, o); - }, - useId: function() { - return z = "useId", N(), xe().memoizedState; - }, - useFormState: function(e) { - return z = "useFormState", N(), Mi(), $t(e); - }, - useActionState: function(e) { - return z = "useActionState", N(), $t(e); - }, - useOptimistic: function(e, n) { - return z = "useOptimistic", N(), of(e, n); - }, - useHostTransitionStatus: ia, - useMemoCache: Oa, - useCacheRefresh: function() { - return z = "useCacheRefresh", N(), xe().memoizedState; - }, - useEffectEvent: function(e) { - return z = "useEffectEvent", N(), oa(e); - } - }, Ca = { - readContext: function(e) { - return Ce(), Ee(e); - }, - use: function(e) { - return D(), we(e); - }, - useCallback: function(e, n) { - return z = "useCallback", D(), ee(), Ku(e, n); - }, - useContext: function(e) { - return z = "useContext", D(), ee(), Ee(e); - }, - useEffect: function(e, n) { - return z = "useEffect", D(), ee(), yt(e, n); - }, - useImperativeHandle: function(e, n, o) { - return z = "useImperativeHandle", D(), ee(), Xu(e, n, o); - }, - useInsertionEffect: function(e, n) { - z = "useInsertionEffect", D(), ee(), To(4, Wt, e, n); - }, - useLayoutEffect: function(e, n) { - return z = "useLayoutEffect", D(), ee(), _o(e, n); - }, - useMemo: function(e, n) { - z = "useMemo", D(), ee(); - var o = x.H; - x.H = Ca; - try { - return ec(e, n); - } finally { - x.H = o; - } - }, - useReducer: function(e, n, o) { - z = "useReducer", D(), ee(); - var i = x.H; - x.H = Ca; - try { - return $u(e, n, o); - } finally { - x.H = i; - } - }, - useRef: function(e) { - return z = "useRef", D(), ee(), br(e); - }, - useState: function(e) { - z = "useState", D(), ee(); - var n = x.H; - x.H = Ca; - try { - return $i(e); - } finally { - x.H = n; - } - }, - useDebugValue: function() { - z = "useDebugValue", D(), ee(); - }, - useDeferredValue: function(e, n) { - return z = "useDeferredValue", D(), ee(), ms(e, n); - }, - useTransition: function() { - return z = "useTransition", D(), ee(), tc(); - }, - useSyncExternalStore: function(e, n, o) { - return z = "useSyncExternalStore", D(), ee(), Vu(e, n, o); - }, - useId: function() { - return z = "useId", D(), ee(), bs(); - }, - useFormState: function(e, n) { - return z = "useFormState", D(), ee(), tn(e, n); - }, - useActionState: function(e, n) { - return z = "useActionState", D(), ee(), tn(e, n); - }, - useOptimistic: function(e) { - return z = "useOptimistic", D(), ee(), Ju(e); - }, - useMemoCache: function(e) { - return D(), Oa(e); - }, - useHostTransitionStatus: ia, - useCacheRefresh: function() { - return z = "useCacheRefresh", ee(), la(); - }, - useEffectEvent: function(e) { - return z = "useEffectEvent", D(), ee(), ra(e); - } - }, $o = { - readContext: function(e) { - return Ce(), Ee(e); - }, - use: function(e) { - return D(), we(e); - }, - useCallback: function(e, n) { - return z = "useCallback", D(), N(), Ma(e, n); - }, - useContext: function(e) { - return z = "useContext", D(), N(), Ee(e); - }, - useEffect: function(e, n) { - z = "useEffect", D(), N(), Qn(2048, Ut, e, n); - }, - useImperativeHandle: function(e, n, o) { - return z = "useImperativeHandle", D(), N(), aa(e, n, o); - }, - useInsertionEffect: function(e, n) { - return z = "useInsertionEffect", D(), N(), Qn(4, Wt, e, n); - }, - useLayoutEffect: function(e, n) { - return z = "useLayoutEffect", D(), N(), Qn(4, Rr, e, n); - }, - useMemo: function(e, n) { - z = "useMemo", D(), N(); - var o = x.H; - x.H = $o; - try { - return Vi(e, n); - } finally { - x.H = o; - } - }, - useReducer: function(e, n, o) { - z = "useReducer", D(), N(); - var i = x.H; - x.H = $o; - try { - return Br(e, n, o); - } finally { - x.H = i; - } - }, - useRef: function() { - return z = "useRef", D(), N(), xe().memoizedState; - }, - useState: function() { - z = "useState", D(), N(); - var e = x.H; - x.H = $o; - try { - return Br(gr); - } finally { - x.H = e; - } - }, - useDebugValue: function() { - z = "useDebugValue", D(), N(); - }, - useDeferredValue: function(e, n) { - return z = "useDeferredValue", D(), N(), nc(e, n); - }, - useTransition: function() { - return z = "useTransition", D(), N(), Qp(); - }, - useSyncExternalStore: function(e, n, o) { - return z = "useSyncExternalStore", D(), N(), ta(e, n, o); - }, - useId: function() { - return z = "useId", D(), N(), xe().memoizedState; - }, - useFormState: function(e) { - return z = "useFormState", D(), N(), hs(e); - }, - useActionState: function(e) { - return z = "useActionState", D(), N(), hs(e); - }, - useOptimistic: function(e, n) { - return z = "useOptimistic", D(), N(), rf(e, n); - }, - useMemoCache: function(e) { - return D(), Oa(e); - }, - useHostTransitionStatus: ia, - useCacheRefresh: function() { - return z = "useCacheRefresh", N(), xe().memoizedState; - }, - useEffectEvent: function(e) { - return z = "useEffectEvent", D(), N(), oa(e); - } - }, dm = { - readContext: function(e) { - return Ce(), Ee(e); - }, - use: function(e) { - return D(), we(e); - }, - useCallback: function(e, n) { - return z = "useCallback", D(), N(), Ma(e, n); - }, - useContext: function(e) { - return z = "useContext", D(), N(), Ee(e); - }, - useEffect: function(e, n) { - z = "useEffect", D(), N(), Qn(2048, Ut, e, n); - }, - useImperativeHandle: function(e, n, o) { - return z = "useImperativeHandle", D(), N(), aa(e, n, o); - }, - useInsertionEffect: function(e, n) { - return z = "useInsertionEffect", D(), N(), Qn(4, Wt, e, n); - }, - useLayoutEffect: function(e, n) { - return z = "useLayoutEffect", D(), N(), Qn(4, Rr, e, n); - }, - useMemo: function(e, n) { - z = "useMemo", D(), N(); - var o = x.H; - x.H = $o; - try { - return Vi(e, n); - } finally { - x.H = o; - } - }, - useReducer: function(e, n, o) { - z = "useReducer", D(), N(); - var i = x.H; - x.H = $o; - try { - return Qi(e, n, o); - } finally { - x.H = i; - } - }, - useRef: function() { - return z = "useRef", D(), N(), xe().memoizedState; - }, - useState: function() { - z = "useState", D(), N(); - var e = x.H; - x.H = $o; - try { - return Qi(gr); - } finally { - x.H = e; - } - }, - useDebugValue: function() { - z = "useDebugValue", D(), N(); - }, - useDeferredValue: function(e, n) { - return z = "useDeferredValue", D(), N(), sf(e, n); - }, - useTransition: function() { - return z = "useTransition", D(), N(), Ro(); - }, - useSyncExternalStore: function(e, n, o) { - return z = "useSyncExternalStore", D(), N(), ta(e, n, o); - }, - useId: function() { - return z = "useId", D(), N(), xe().memoizedState; - }, - useFormState: function(e) { - return z = "useFormState", D(), N(), $t(e); - }, - useActionState: function(e) { - return z = "useActionState", D(), N(), $t(e); - }, - useOptimistic: function(e, n) { - return z = "useOptimistic", D(), N(), of(e, n); - }, - useMemoCache: function(e) { - return D(), Oa(e); - }, - useHostTransitionStatus: ia, - useCacheRefresh: function() { - return z = "useCacheRefresh", N(), xe().memoizedState; - }, - useEffectEvent: function(e) { - return z = "useEffectEvent", D(), N(), oa(e); - } - }; - var Fy = {}, Hy = /* @__PURE__ */ new Set(), Ay = /* @__PURE__ */ new Set(), jy = /* @__PURE__ */ new Set(), Dy = /* @__PURE__ */ new Set(), Wy = /* @__PURE__ */ new Set(), Uy = /* @__PURE__ */ new Set(), By = /* @__PURE__ */ new Set(), Oy = /* @__PURE__ */ new Set(), My = /* @__PURE__ */ new Set(), Qy = /* @__PURE__ */ new Set(); - Object.freeze(Fy); - var zg = { - enqueueSetState: function(e, n, o) { - e = e._reactInternals; - var i = Nt(e), s = zo(i); - s.payload = n, o != null && (df(o), s.callback = o), n = Mt(e, s, i), n !== null && (ur(i, "this.setState()", e), We(n, e, i), Bi(n, e, i)); - }, - enqueueReplaceState: function(e, n, o) { - e = e._reactInternals; - var i = Nt(e), s = zo(i); - s.tag = Cy, s.payload = n, o != null && (df(o), s.callback = o), n = Mt(e, s, i), n !== null && (ur(i, "this.replaceState()", e), We(n, e, i), Bi(n, e, i)); - }, - enqueueForceUpdate: function(e, n) { - e = e._reactInternals; - var o = Nt(e), i = zo(o); - i.tag = Ty, n != null && (df(n), i.callback = n), n = Mt(e, i, o), n !== null && (ur(o, "this.forceUpdate()", e), We(n, e, o), Bi(n, e, o)); - } - }, bd = null, Cg = null, Tg = Error("This is not a real error. It's an implementation detail of React's selective hydration feature. If this leaks into userspace, it's a bug in React. Please file an issue."), Cn = !1, $y = {}, Vy = {}, qy = {}, Gy = {}, vd = !1, Jy = {}, fm = {}, _g = { - dehydrated: null, - treeContext: null, - retryLane: 0, - hydrationErrors: null - }, Zy = !1, Yy = null; - Yy = /* @__PURE__ */ new Set(); - var Si = !1, Tn = !1, Rg = !1, Xy = typeof WeakSet == "function" ? WeakSet : Set, Gn = null, Sd = null, kd = null, _n = null, nr = !1, Vo = null, Wn = !1, wd = 8192, Vb = { - getCacheForType: function(e) { - var n = Ee(un), o = n.data.get(e); - return o === void 0 && (o = e(), n.data.set(e, o)), o; - }, - cacheSignal: function() { - return Ee(un).controller.signal; - }, - getOwner: function() { - return di; - } - }, pm = 0, hm = 1, mm = 2, gm = 3, ym = 4; - if (typeof Symbol == "function" && Symbol.for) { - var bp = Symbol.for; - pm = bp("selector.component"), hm = bp("selector.has_pseudo_class"), mm = bp("selector.role"), gm = bp("selector.test_id"), ym = bp("selector.text"); - } - var bm = [], qb = typeof WeakMap == "function" ? WeakMap : Map, Jn = 0, Zn = 2, uo = 4, ki = 0, vp = 1, iu = 2, vm = 3, Tl = 4, Sm = 6, Ky = 5, ye = Jn, je = null, se = null, ae = 0, tr = 0, km = 1, lu = 2, Sp = 3, eb = 4, Eg = 5, kp = 6, wm = 7, Ig = 8, su = 9, Le = tr, Er = null, _l = !1, Pd = !1, Lg = !1, Ta = 0, nn = ki, Rl = 0, El = 0, Ng = 0, rr = 0, uu = 0, wp = null, Bt = null, Pm = !1, xm = 0, nb = 0, tb = 300, Pp = Infinity, Fg = 500, xp = null, gn = null, Il = null, zm = 0, Hg = 1, Ag = 2, rb = 3, Ll = 0, ob = 1, ab = 2, ib = 3, lb = 4, Cm = 5, Rn = 0, Nl = null, xd = null, qo = 0, jg = 0, Dg = -0, Wg = null, sb = null, ub = null, Go = zm, cb = null, Gb = 50, zp = 0, Ug = null, Bg = !1, Tm = !1, Jb = 50, cu = 0, Cp = null, zd = !1, _m = null, db = !1, fb = /* @__PURE__ */ new Set(), Zb = {}, co = null, Cd = null, pb = !1; - try { - Object.preventExtensions({}); - } catch { - pb = !0; - } - var hb = !1, mb = {}, gb = null, yb = null, bb = null, vb = null, Sb = null, kb = null, wb = null, Pb = null, xb = null, zb = null; - return gb = function(e, n, o, i) { - n = Yn(e, n), n !== null && (o = _d(n.memoizedState, o, 0, i), n.memoizedState = o, n.baseState = o, e.memoizedProps = ze({}, e.memoizedProps), o = On(e, 2), o !== null && We(o, e, 2)); - }, yb = function(e, n, o) { - n = Yn(e, n), n !== null && (o = du(n.memoizedState, o, 0), n.memoizedState = o, n.baseState = o, e.memoizedProps = ze({}, e.memoizedProps), o = On(e, 2), o !== null && We(o, e, 2)); - }, bb = function(e, n, o, i) { - n = Yn(e, n), n !== null && (o = F(n.memoizedState, o, i), n.memoizedState = o, n.baseState = o, e.memoizedProps = ze({}, e.memoizedProps), o = On(e, 2), o !== null && We(o, e, 2)); - }, vb = function(e, n, o) { - e.pendingProps = _d(e.memoizedProps, n, 0, o), e.alternate && (e.alternate.pendingProps = e.pendingProps), n = On(e, 2), n !== null && We(n, e, 2); - }, Sb = function(e, n) { - e.pendingProps = du(e.memoizedProps, n, 0), e.alternate && (e.alternate.pendingProps = e.pendingProps), n = On(e, 2), n !== null && We(n, e, 2); - }, kb = function(e, n, o) { - e.pendingProps = F(e.memoizedProps, n, o), e.alternate && (e.alternate.pendingProps = e.pendingProps), n = On(e, 2), n !== null && We(n, e, 2); - }, wb = function(e) { - var n = On(e, 2); - n !== null && We(n, e, 2); - }, Pb = function(e) { - var n = ut(), o = On(e, n); - o !== null && We(o, e, n); - }, xb = function(e) { - pu = e; - }, zb = function(e) { - fu = e; - }, le.attemptContinuousHydration = function(e) { - if (e.tag === 13 || e.tag === 31) { - var n = On(e, 67108864); - n !== null && We(n, e, 67108864), rl(e, 67108864); - } - }, le.attemptHydrationAtCurrentPriority = function(e) { - if (e.tag === 13 || e.tag === 31) { - var n = Nt(e); - n = Xo(n); - var o = On(e, n); - o !== null && We(o, e, n), rl(e, n); - } - }, le.attemptSynchronousHydration = function(e) { - switch (e.tag) { - case 3: - if (e = e.stateNode, e.current.memoizedState.isDehydrated) { - var n = _t(e.pendingLanes); - if (n !== 0) { - for (e.pendingLanes |= 2, e.entangledLanes |= 2; n;) { - var o = 1 << 31 - vn(n); - e.entanglements[1] |= o, n &= ~o; - } - Kn(e), (ye & (Zn | uo)) === Jn && (Pp = me() + Fg, Wa(0, !1)); - } - } - break; - case 31: - case 13: n = On(e, 2), n !== null && We(n, e, 2), Ls(), rl(e, 2); - } - }, le.batchedUpdates = function(e, n) { - return e(n); - }, le.createComponentSelector = function(e) { - return { - $$typeof: pm, - value: e - }; - }, le.createContainer = function(e, n, o, i, s, u, f, p, g, S) { - return Ka(e, n, !1, null, o, i, u, null, f, p, g, S); - }, le.createHasPseudoClassSelector = function(e) { - return { - $$typeof: hm, - value: e - }; - }, le.createHydrationContainer = function(e, n, o, i, s, u, f, p, g, S, T, _, I, O) { - var _n2; - return e = Ka(o, i, !0, e, s, u, p, O, g, S, T, _), e.context = Dh(null), o = e.current, i = Nt(o), i = Xo(i), s = zo(i), s.callback = (_n2 = n) != null ? _n2 : null, Mt(o, s, i), ur(i, "hydrateRoot()", null), n = i, e.current.lanes = n, Ci(e, n), Kn(e), e; - }, le.createPortal = function(e, n, o) { - var i = 3 < arguments.length && arguments[3] !== void 0 ? arguments[3] : null; - try { - vt(i); - var s = !1; - } catch { - s = !0; - } - return s && (console.error("The provided key is an unsupported type %s. This value must be coerced to a string before using it here.", typeof Symbol == "function" && Symbol.toStringTag && i[Symbol.toStringTag] || i.constructor.name || "Object"), vt(i)), { - $$typeof: Ao, - key: i == null ? null : "" + i, - children: e, - containerInfo: n, - implementation: o - }; - }, le.createRoleSelector = function(e) { - return { - $$typeof: mm, - value: e - }; - }, le.createTestNameSelector = function(e) { - return { - $$typeof: gm, - value: e - }; - }, le.createTextSelector = function(e) { - return { - $$typeof: ym, - value: e - }; - }, le.defaultOnCaughtError = function(e) { - var n = bd ? "The above error occurred in the <" + bd + "> component." : "The above error occurred in one of your React components.", o = "React will try to recreate this component tree from scratch using the error boundary you provided, " + ((Cg || "Anonymous") + "."); - typeof e == "object" && e !== null && typeof e.environmentName == "string" ? ri("error", [ - `%o - -%s - -%s -`, - e, - n, - o - ], e.environmentName)() : console.error(`%o - -%s - -%s -`, e, n, o); - }, le.defaultOnRecoverableError = function(e) { - qg(e); - }, le.defaultOnUncaughtError = function(e) { - qg(e), console.warn(`%s - -%s -`, bd ? "An error occurred in the <" + bd + "> component." : "An error occurred in one of your React components.", `Consider adding an error boundary to your tree to customize error handling behavior. -Visit https://react.dev/link/error-boundaries to learn more about error boundaries.`); - }, le.deferredUpdates = function(e) { - var n = x.T, o = wt(); - try { - return an(32), x.T = null, e(); - } finally { - an(o), x.T = n; - } - }, le.discreteUpdates = function(e, n, o, i, s) { - var u = x.T, f = wt(); - try { - return an(2), x.T = null, e(n, o, i, s); - } finally { - an(f), x.T = u, ye === Jn && (Pp = me() + Fg); - } - }, le.findAllNodes = kc, le.findBoundingRects = function(e, n) { - if (!xr) throw Error("Test selector API is not supported by this renderer."); - n = kc(e, n), e = []; - for (var o = 0; o < n.length; o++) e.push(ma(n[o])); - for (n = e.length - 1; 0 < n; n--) { - o = e[n]; - for (var i = o.x, s = i + o.width, u = o.y, f = u + o.height, p = n - 1; 0 <= p; p--) if (n !== p) { - var g = e[p], S = g.x, T = S + g.width, _ = g.y, I = _ + g.height; - if (i >= S && u >= _ && s <= T && f <= I) { - e.splice(n, 1); - break; - } else if (i !== S || o.width !== g.width || I < u || _ > f) { - if (!(u !== _ || o.height !== g.height || T < i || S > s)) { - S > i && (g.width += S - i, g.x = i), T < s && (g.width = s - S), e.splice(n, 1); - break; - } - } else { - _ > u && (g.height += _ - u, g.y = u), I < f && (g.height = f - _), e.splice(n, 1); - break; - } - } - } - return e; - }, le.findHostInstance = function(e) { - var n = e._reactInternals; - if (n === void 0) throw typeof e.render == "function" ? Error("Unable to find node on an unmounted component.") : (e = Object.keys(e).join(","), Error("Argument appears to not be a ReactComponent. Keys: " + e)); - return e = mu(n), e === null ? null : ot(e.stateNode); - }, le.findHostInstanceWithNoPortals = function(e) { - return e = Ed(e), e = e !== null ? _p(e) : null, e === null ? null : ot(e.stateNode); - }, le.findHostInstanceWithWarning = function(e, n) { - var o = e._reactInternals; - if (o === void 0) throw typeof e.render == "function" ? Error("Unable to find node on an unmounted component.") : (e = Object.keys(e).join(","), Error("Argument appears to not be a ReactComponent. Keys: " + e)); - if (e = mu(o), e === null) return null; - if (e.mode & 8) { - var i = G(o) || "Component"; - mb[i] || (mb[i] = !0, B(e, function() { - o.mode & 8 ? console.error("%s is deprecated in StrictMode. %s was passed an instance of %s which is inside StrictMode. Instead, add a ref directly to the element you want to reference. Learn more about using refs safely here: https://react.dev/link/strict-mode-find-node", n, n, i) : console.error("%s is deprecated in StrictMode. %s was passed an instance of %s which renders StrictMode children. Instead, add a ref directly to the element you want to reference. Learn more about using refs safely here: https://react.dev/link/strict-mode-find-node", n, n, i); - })); - } - return ot(e.stateNode); - }, le.flushPassiveEffects = el, le.flushSyncFromReconciler = function(e) { - var n = ye; - ye |= 1; - var o = x.T, i = wt(); - try { - if (an(2), x.T = null, e) return e(); - } finally { - an(i), x.T = o, ye = n, (ye & (Zn | uo)) === Jn && Wa(0, !1); - } - }, le.flushSyncWork = Ls, le.focusWithin = function(e, n) { - if (!xr) throw Error("Test selector API is not supported by this renderer."); - for (e = Ef(e), n = hh(e, n), n = Array.from(n), e = 0; e < n.length;) { - var o = n[e++], i = o.tag; - if (!Kr(o)) { - if ((i === 5 || i === 26 || i === 27) && Ft(o.stateNode)) return !0; - for (o = o.child; o !== null;) n.push(o), o = o.sibling; - } - } - return !1; - }, le.getFindAllNodesFailureDescription = function(e, n) { - if (!xr) throw Error("Test selector API is not supported by this renderer."); - var o = 0, i = []; - e = [Ef(e), 0]; - for (var s = 0; s < e.length;) { - var u = e[s++], f = u.tag, p = e[s++], g = n[p]; - if ((f !== 5 && f !== 26 && f !== 27 || !Kr(u)) && (If(u, g) && (i.push(Sc(g)), p++, p > o && (o = p)), p < n.length)) for (u = u.child; u !== null;) e.push(u, p), u = u.sibling; - } - if (o < n.length) { - for (e = []; o < n.length; o++) e.push(Sc(n[o])); - return `findAllNodes was able to match part of the selector: - ` + (i.join(" > ") + ` - -No matching component was found for: - `) + e.join(" > "); - } - return null; - }, le.getPublicRootInstance = function(e) { - if (e = e.current, !e.child) return null; - switch (e.child.tag) { - case 27: - case 5: return ot(e.child.stateNode); - default: return e.child.stateNode; - } - }, le.injectIntoDevTools = function() { - var e = { - bundleType: 1, - version: Jt, - rendererPackageName: Zt, - currentDispatcherRef: x, - reconcilerVersion: "19.2.0" - }; - return jo !== null && (e.rendererConfig = jo), e.overrideHookState = gb, e.overrideHookStateDeletePath = yb, e.overrideHookStateRenamePath = bb, e.overrideProps = vb, e.overridePropsDeletePath = Sb, e.overridePropsRenamePath = kb, e.scheduleUpdate = wb, e.scheduleRetry = Pb, e.setErrorHandler = xb, e.setSuspenseHandler = zb, e.scheduleRefresh = hu, e.scheduleRoot = Fl, e.setRefreshHandler = Ir, e.getCurrentFiber = Ic, Ep(e); - }, le.isAlreadyRendering = Ns, le.observeVisibleRects = function(e, n, o, i) { - function s() { - var S = kc(e, n); - u.forEach(function(T) { - 0 > S.indexOf(T) && g(T); - }), S.forEach(function(T) { - 0 > u.indexOf(T) && p(T); - }); - } - if (!xr) throw Error("Test selector API is not supported by this renderer."); - var u = kc(e, n); - o = zr(u, o, i); - var f = o.disconnect, p = o.observe, g = o.unobserve; - return bm.push(s), { disconnect: function() { - var S = bm.indexOf(s); - 0 <= S && bm.splice(S, 1), f(); - } }; - }, le.shouldError = function(e) { - return pu(e); - }, le.shouldSuspend = function(e) { - return fu(e); - }, le.startHostTransition = function(e, n, o, i) { - if (e.tag !== 5) throw Error("Expected the form instance to be a HostComponent. This is a bug in React."); - var s = uf(e).queue; - Hp(e), nt(e, s, n, Xt, o === null ? Em : function() { - x.T === null && console.error("requestFormReset was called outside a transition or action. To fix, move to an action, or wrap with startTransition."); - var u = uf(e); - return u.next === null && (u = e.alternate.memoizedState), qi(e, u.next.queue, {}, Nt(e)), o(i); - }); - }, le.updateContainer = function(e, n, o, i) { - var s = n.current, u = Nt(s); - return As(s, u, e, n, o, i), u; - }, le.updateContainerSync = Wh, le; - }, Tt.exports.default = Tt.exports, Object.defineProperty(Tt.exports, "__esModule", { value: !0 }); - }(Mg)), Mg.exports; -} -var Eb; -function n0() { - return Eb || (Eb = 1, Rm.exports = e0()), Rm.exports; -} -var r0 = Xb(n0()); -function createReconciler(config) { - const reconciler = r0(config); - reconciler.injectIntoDevTools(); - return reconciler; -} -var NoEventPriority = 0; -var catalogue = {}; -var PREFIX_REGEX = /^three(?=[A-Z])/; -var toPascalCase = (type) => `${type[0].toUpperCase()}${type.slice(1)}`; -var i = 0; -var isConstructor = (object) => typeof object === "function"; -function extend(objects) { - if (isConstructor(objects)) { - const Component = `${i++}`; - catalogue[Component] = objects; - return Component; - } else Object.assign(catalogue, objects); -} -function validateInstance(type, props) { - const name = toPascalCase(type); - const target = catalogue[name]; - if (type !== "primitive" && !target) throw new Error(`R3F: ${name} is not part of the THREE namespace! Did you forget to extend? See: https://docs.pmnd.rs/react-three-fiber/api/objects#using-3rd-party-objects-declaratively`); - if (type === "primitive" && !props.object) throw new Error(`R3F: Primitives without 'object' are invalid!`); - if (props.args !== void 0 && !Array.isArray(props.args)) throw new Error("R3F: The args prop must be an array!"); -} -function createInstance(type, props, root) { - var _props$object; - type = toPascalCase(type) in catalogue ? type : type.replace(PREFIX_REGEX, ""); - validateInstance(type, props); - if (type === "primitive" && (_props$object = props.object) != null && _props$object.__r3f) delete props.object.__r3f; - return prepare(props.object, root, type, props); -} -function hideInstance(instance) { - if (!instance.isHidden) { - var _instance$parent; - if (instance.props.attach && (_instance$parent = instance.parent) != null && _instance$parent.object) detach(instance.parent, instance); - else if (isObject3D(instance.object)) instance.object.visible = false; - instance.isHidden = true; - invalidateInstance(instance); - } -} -function unhideInstance(instance) { - if (instance.isHidden) { - var _instance$parent2; - if (instance.props.attach && (_instance$parent2 = instance.parent) != null && _instance$parent2.object) attach(instance.parent, instance); - else if (isObject3D(instance.object) && instance.props.visible !== false) instance.object.visible = true; - instance.isHidden = false; - invalidateInstance(instance); - } -} -function handleContainerEffects(parent, child, beforeChild) { - const state = child.root.getState(); - if (!parent.parent && parent.object !== state.scene) return; - if (!child.object) { - var _child$props$object, _child$props$args; - const target = catalogue[toPascalCase(child.type)]; - child.object = (_child$props$object = child.props.object) != null ? _child$props$object : new target(...(_child$props$args = child.props.args) != null ? _child$props$args : []); - child.object.__r3f = child; - } - applyProps(child.object, child.props); - if (child.props.attach) attach(parent, child); - else if (isObject3D(child.object) && isObject3D(parent.object)) { - const childIndex = parent.object.children.indexOf(beforeChild == null ? void 0 : beforeChild.object); - if (beforeChild && childIndex !== -1) { - const existingIndex = parent.object.children.indexOf(child.object); - if (existingIndex !== -1) { - parent.object.children.splice(existingIndex, 1); - const adjustedIndex = existingIndex < childIndex ? childIndex - 1 : childIndex; - parent.object.children.splice(adjustedIndex, 0, child.object); - } else { - child.object.parent = parent.object; - parent.object.children.splice(childIndex, 0, child.object); - child.object.dispatchEvent({ type: "added" }); - parent.object.dispatchEvent({ - type: "childadded", - child: child.object - }); - } - } else parent.object.add(child.object); - } - for (const childInstance of child.children) handleContainerEffects(child, childInstance); - invalidateInstance(child); -} -function appendChild(parent, child) { - if (!child) return; - child.parent = parent; - parent.children.push(child); - handleContainerEffects(parent, child); -} -function insertBefore(parent, child, beforeChild) { - if (!child || !beforeChild) return; - child.parent = parent; - const childIndex = parent.children.indexOf(beforeChild); - if (childIndex !== -1) parent.children.splice(childIndex, 0, child); - else parent.children.push(child); - handleContainerEffects(parent, child, beforeChild); -} -function disposeOnIdle(object) { - if (typeof object.dispose === "function") { - const handleDispose = () => { - try { - object.dispose(); - } catch {} - }; - if (typeof IS_REACT_ACT_ENVIRONMENT !== "undefined") handleDispose(); - else (0, import_scheduler.unstable_scheduleCallback)(import_scheduler.unstable_IdlePriority, handleDispose); - } -} -function removeChild(parent, child, dispose) { - if (!child) return; - child.parent = null; - const childIndex = parent.children.indexOf(child); - if (childIndex !== -1) parent.children.splice(childIndex, 1); - if (child.props.attach) detach(parent, child); - else if (isObject3D(child.object) && isObject3D(parent.object)) { - parent.object.remove(child.object); - removeInteractivity(findInitialRoot(child), child.object); - } - const shouldDispose = child.props.dispose !== null && dispose !== false; - for (let i = child.children.length - 1; i >= 0; i--) { - const node = child.children[i]; - removeChild(child, node, shouldDispose); - } - child.children.length = 0; - delete child.object.__r3f; - if (shouldDispose && child.type !== "primitive" && child.object.type !== "Scene") disposeOnIdle(child.object); - if (dispose === void 0) invalidateInstance(child); -} -function setFiberRef(fiber, publicInstance) { - for (const _fiber of [fiber, fiber.alternate]) if (_fiber !== null) { - if (typeof _fiber.ref === "function") { - _fiber.refCleanup == null || _fiber.refCleanup(); - const cleanup = _fiber.ref(publicInstance); - if (typeof cleanup === "function") _fiber.refCleanup = cleanup; - } else if (_fiber.ref) _fiber.ref.current = publicInstance; - } -} -var reconstructed = []; -function swapInstances() { - for (const [instance] of reconstructed) { - const parent = instance.parent; - if (parent) { - if (instance.props.attach) detach(parent, instance); - else if (isObject3D(instance.object) && isObject3D(parent.object)) parent.object.remove(instance.object); - for (const child of instance.children) if (child.props.attach) detach(instance, child); - else if (isObject3D(child.object) && isObject3D(instance.object)) instance.object.remove(child.object); - } - if (instance.isHidden) unhideInstance(instance); - if (instance.object.__r3f) delete instance.object.__r3f; - if (instance.type !== "primitive") disposeOnIdle(instance.object); - } - for (const [instance, props, fiber] of reconstructed) { - instance.props = props; - const parent = instance.parent; - if (parent) { - var _instance$props$objec, _instance$props$args; - const target = catalogue[toPascalCase(instance.type)]; - const prevObject = instance.object; - instance.object = (_instance$props$objec = instance.props.object) != null ? _instance$props$objec : new target(...(_instance$props$args = instance.props.args) != null ? _instance$props$args : []); - instance.object.__r3f = instance; - setFiberRef(fiber, instance.object); - swapInteractivity(findInitialRoot(instance), prevObject, instance.object); - applyProps(instance.object, instance.props); - if (instance.props.attach) attach(parent, instance); - else if (isObject3D(instance.object) && isObject3D(parent.object)) parent.object.add(instance.object); - for (const child of instance.children) if (child.props.attach) attach(instance, child); - else if (isObject3D(child.object) && isObject3D(instance.object)) instance.object.add(child.object); - invalidateInstance(instance); - } - } - reconstructed.length = 0; -} -var handleTextInstance = () => {}; -var NO_CONTEXT = {}; -var currentUpdatePriority = NoEventPriority; -var NoFlags = 0; -var Update = 4; -var reconciler = /* @__PURE__ */ createReconciler({ - isPrimaryRenderer: false, - warnsIfNotActing: false, - supportsMutation: true, - supportsPersistence: false, - supportsHydration: false, - createInstance, - removeChild, - appendChild, - appendInitialChild: appendChild, - insertBefore, - appendChildToContainer(container, child) { - const scene = container.getState().scene.__r3f; - if (!child || !scene) return; - appendChild(scene, child); - }, - removeChildFromContainer(container, child) { - const scene = container.getState().scene.__r3f; - if (!child || !scene) return; - removeChild(scene, child); - }, - insertInContainerBefore(container, child, beforeChild) { - const scene = container.getState().scene.__r3f; - if (!child || !beforeChild || !scene) return; - insertBefore(scene, child, beforeChild); - }, - getRootHostContext: () => NO_CONTEXT, - getChildHostContext: () => NO_CONTEXT, - commitUpdate(instance, type, oldProps, newProps, fiber) { - var _newProps$args, _oldProps$args, _newProps$args2; - validateInstance(type, newProps); - let reconstruct = false; - if (instance.type === "primitive" && oldProps.object !== newProps.object) reconstruct = true; - else if (((_newProps$args = newProps.args) == null ? void 0 : _newProps$args.length) !== ((_oldProps$args = oldProps.args) == null ? void 0 : _oldProps$args.length)) reconstruct = true; - else if ((_newProps$args2 = newProps.args) != null && _newProps$args2.some((value, index) => { - var _oldProps$args2; - return value !== ((_oldProps$args2 = oldProps.args) == null ? void 0 : _oldProps$args2[index]); - })) reconstruct = true; - if (reconstruct) reconstructed.push([ - instance, - { ...newProps }, - fiber - ]); - else { - const changedProps = diffProps(instance, newProps); - if (Object.keys(changedProps).length) { - Object.assign(instance.props, changedProps); - applyProps(instance.object, changedProps); - } - } - if (fiber.sibling === null || (fiber.flags & Update) === NoFlags) swapInstances(); - }, - finalizeInitialChildren: () => false, - commitMount() {}, - getPublicInstance: (instance) => instance == null ? void 0 : instance.object, - prepareForCommit: () => null, - preparePortalMount: (container) => prepare(container.getState().scene, container, "", {}), - resetAfterCommit: () => {}, - shouldSetTextContent: () => false, - clearContainer: () => false, - hideInstance, - unhideInstance, - createTextInstance: handleTextInstance, - hideTextInstance: handleTextInstance, - unhideTextInstance: handleTextInstance, - scheduleTimeout: typeof setTimeout === "function" ? setTimeout : void 0, - cancelTimeout: typeof clearTimeout === "function" ? clearTimeout : void 0, - noTimeout: -1, - getInstanceFromNode: () => null, - beforeActiveInstanceBlur() {}, - afterActiveInstanceBlur() {}, - detachDeletedInstance() {}, - prepareScopeUpdate() {}, - getInstanceFromScope: () => null, - shouldAttemptEagerTransition: () => false, - trackSchedulerEvent: () => {}, - resolveEventType: () => null, - resolveEventTimeStamp: () => -1.1, - requestPostPaintCallback() {}, - maySuspendCommit: () => false, - preloadInstance: () => true, - suspendInstance() {}, - waitForCommitToBeReady: () => null, - NotPendingTransition: null, - HostTransitionContext: /* @__PURE__ */ import_react.createContext(null), - setCurrentUpdatePriority(newPriority) { - currentUpdatePriority = newPriority; - }, - getCurrentUpdatePriority() { - return currentUpdatePriority; - }, - resolveUpdatePriority() { - var _window$event; - if (currentUpdatePriority !== NoEventPriority) return currentUpdatePriority; - switch (typeof window !== "undefined" && ((_window$event = window.event) == null ? void 0 : _window$event.type)) { - case "click": - case "contextmenu": - case "dblclick": - case "pointercancel": - case "pointerdown": - case "pointerup": return e; - case "pointermove": - case "pointerout": - case "pointerover": - case "pointerenter": - case "pointerleave": - case "wheel": return o; - default: return r; - } - }, - resetFormInstance() {}, - rendererPackageName: "@react-three/fiber", - rendererVersion: packageData.version, - applyViewTransitionName(_instance, _name, _className) {}, - restoreViewTransitionName(_instance, _props) {}, - cancelViewTransitionName(_instance, _name, _props) {}, - cancelRootViewTransitionName(_rootContainer) {}, - restoreRootViewTransitionName(_rootContainer) {}, - InstanceMeasurement: null, - measureInstance: (_instance) => null, - wasInstanceInViewport: (_measurement) => true, - hasInstanceChanged: (_oldMeasurement, _newMeasurement) => false, - hasInstanceAffectedParent: (_oldMeasurement, _newMeasurement) => false, - suspendOnActiveViewTransition(_state, _container) {}, - startGestureTransition: () => null, - startViewTransition: () => null, - stopViewTransition(_transition) {}, - createViewTransitionInstance: (_name) => null, - getCurrentGestureOffset(_provider) { - throw new Error("startGestureTransition is not yet supported in react-three-fiber."); - }, - cloneMutableInstance(instance, _keepChildren) { - return instance; - }, - cloneMutableTextInstance(textInstance) { - return textInstance; - }, - cloneRootViewTransitionContainer(_rootContainer) { - throw new Error("Not implemented."); - }, - removeRootViewTransitionClone(_rootContainer, _clone) { - throw new Error("Not implemented."); - }, - createFragmentInstance: (_fiber) => null, - updateFragmentInstanceFiber(_fiber, _instance) {}, - commitNewChildToFragmentInstance(_child, _fragmentInstance) {}, - deleteChildFromFragmentInstance(_child, _fragmentInstance) {}, - measureClonedInstance: (_instance) => null, - maySuspendCommitOnUpdate: (_type, _oldProps, _newProps) => false, - maySuspendCommitInSyncRender: (_type, _props) => false, - startSuspendingCommit: () => null, - getSuspendedCommitReason: (_state, _rootContainer) => null -}); -var _roots = /* @__PURE__ */ new Map(); -var shallowLoose = { - objects: "shallow", - strict: false -}; -function computeInitialSize(canvas, size) { - if (!size && typeof HTMLCanvasElement !== "undefined" && canvas instanceof HTMLCanvasElement && canvas.parentElement) { - const { width, height, top, left } = canvas.parentElement.getBoundingClientRect(); - return { - width, - height, - top, - left - }; - } else if (!size && typeof OffscreenCanvas !== "undefined" && canvas instanceof OffscreenCanvas) return { - width: canvas.width, - height: canvas.height, - top: 0, - left: 0 - }; - return { - width: 0, - height: 0, - top: 0, - left: 0, - ...size - }; -} -function createRoot(canvas) { - const prevRoot = _roots.get(canvas); - const prevFiber = prevRoot == null ? void 0 : prevRoot.fiber; - const prevStore = prevRoot == null ? void 0 : prevRoot.store; - if (prevRoot) console.warn("R3F.createRoot should only be called once!"); - const logRecoverableError = typeof reportError === "function" ? reportError : console.error; - const store = prevStore || createStore(invalidate, advance); - const fiber = prevFiber || reconciler.createContainer(store, t, null, false, null, "", logRecoverableError, logRecoverableError, logRecoverableError, null); - if (!prevRoot) _roots.set(canvas, { - fiber, - store - }); - let onCreated; - let lastCamera; - let configured = false; - let pending = null; - return { - async configure(props = {}) { - let resolve; - pending = new Promise((_resolve) => resolve = _resolve); - let { gl: glConfig, size: propsSize, scene: sceneOptions, events, onCreated: onCreatedCallback, shadows = false, linear = false, flat = false, legacy = false, orthographic = false, frameloop = "always", dpr = [1, 2], performance, raycaster: raycastOptions, camera: cameraOptions, onPointerMissed } = props; - let state = store.getState(); - let gl = state.gl; - if (!state.gl) { - const defaultProps = { - canvas, - powerPreference: "high-performance", - antialias: true, - alpha: true - }; - const customRenderer = typeof glConfig === "function" ? await glConfig(defaultProps) : glConfig; - if (isRenderer(customRenderer)) gl = customRenderer; - else gl = new WebGLRenderer({ - ...defaultProps, - ...glConfig - }); - state.set({ gl }); - } - let raycaster = state.raycaster; - if (!raycaster) state.set({ raycaster: raycaster = new Raycaster() }); - const { params, ...options } = raycastOptions || {}; - if (!is.equ(options, raycaster, shallowLoose)) applyProps(raycaster, { ...options }); - if (!is.equ(params, raycaster.params, shallowLoose)) applyProps(raycaster, { params: { - ...raycaster.params, - ...params - } }); - if (!state.camera || state.camera === lastCamera && !is.equ(lastCamera, cameraOptions, shallowLoose)) { - lastCamera = cameraOptions; - const isCamera = cameraOptions == null ? void 0 : cameraOptions.isCamera; - const camera = isCamera ? cameraOptions : orthographic ? new OrthographicCamera(0, 0, 0, 0, .1, 1e3) : new PerspectiveCamera(75, 0, .1, 1e3); - if (!isCamera) { - camera.position.z = 5; - if (cameraOptions) { - applyProps(camera, cameraOptions); - if (!camera.manual) { - if ("aspect" in cameraOptions || "left" in cameraOptions || "right" in cameraOptions || "bottom" in cameraOptions || "top" in cameraOptions) { - camera.manual = true; - camera.updateProjectionMatrix(); - } - } - } - if (!state.camera && !(cameraOptions != null && cameraOptions.rotation)) camera.lookAt(0, 0, 0); - } - state.set({ camera }); - raycaster.camera = camera; - } - if (!state.scene) { - let scene; - if (sceneOptions != null && sceneOptions.isScene) { - scene = sceneOptions; - prepare(scene, store, "", {}); - } else { - scene = new Scene(); - prepare(scene, store, "", {}); - if (sceneOptions) applyProps(scene, sceneOptions); - } - state.set({ scene }); - } - if (events && !state.events.handlers) state.set({ events: events(store) }); - const size = computeInitialSize(canvas, propsSize); - if (!is.equ(size, state.size, shallowLoose)) state.setSize(size.width, size.height, size.top, size.left); - if (dpr && state.viewport.dpr !== calculateDpr(dpr)) state.setDpr(dpr); - if (state.frameloop !== frameloop) state.setFrameloop(frameloop); - if (!state.onPointerMissed) state.set({ onPointerMissed }); - if (performance && !is.equ(performance, state.performance, shallowLoose)) state.set((state) => ({ performance: { - ...state.performance, - ...performance - } })); - if (!state.xr) { - var _gl$xr; - const handleXRFrame = (timestamp, frame) => { - const state = store.getState(); - if (state.frameloop === "never") return; - advance(timestamp, true, state, frame); - }; - const handleSessionChange = () => { - const state = store.getState(); - state.gl.xr.enabled = state.gl.xr.isPresenting; - state.gl.xr.setAnimationLoop(state.gl.xr.isPresenting ? handleXRFrame : null); - if (!state.gl.xr.isPresenting) invalidate(state); - }; - const xr = { - connect() { - const gl = store.getState().gl; - gl.xr.addEventListener("sessionstart", handleSessionChange); - gl.xr.addEventListener("sessionend", handleSessionChange); - }, - disconnect() { - const gl = store.getState().gl; - gl.xr.removeEventListener("sessionstart", handleSessionChange); - gl.xr.removeEventListener("sessionend", handleSessionChange); - } - }; - if (typeof ((_gl$xr = gl.xr) == null ? void 0 : _gl$xr.addEventListener) === "function") xr.connect(); - state.set({ xr }); - } - if (gl.shadowMap) { - const oldEnabled = gl.shadowMap.enabled; - const oldType = gl.shadowMap.type; - gl.shadowMap.enabled = !!shadows; - if (is.boo(shadows)) gl.shadowMap.type = 2; - else if (is.str(shadows)) { - var _types$shadows; - const types = { - basic: 0, - percentage: 1, - soft: 2, - variance: 3 - }; - gl.shadowMap.type = (_types$shadows = types[shadows]) != null ? _types$shadows : 2; - } else if (is.obj(shadows)) Object.assign(gl.shadowMap, shadows); - if (oldEnabled !== gl.shadowMap.enabled || oldType !== gl.shadowMap.type) gl.shadowMap.needsUpdate = true; - } - ColorManagement.enabled = !legacy; - if (!configured) { - gl.outputColorSpace = linear ? LinearSRGBColorSpace : SRGBColorSpace; - gl.toneMapping = flat ? 0 : 4; - } - if (state.legacy !== legacy) state.set(() => ({ legacy })); - if (state.linear !== linear) state.set(() => ({ linear })); - if (state.flat !== flat) state.set(() => ({ flat })); - if (glConfig && !is.fun(glConfig) && !isRenderer(glConfig) && !is.equ(glConfig, gl, shallowLoose)) applyProps(gl, glConfig); - onCreated = onCreatedCallback; - configured = true; - resolve(); - return this; - }, - render(children) { - if (!configured && !pending) this.configure(); - pending.then(() => { - reconciler.updateContainer(/*#__PURE__*/ (0, import_jsx_runtime.jsx)(Provider, { - store, - children, - onCreated, - rootElement: canvas - }), fiber, null, () => void 0); - }); - return store; - }, - unmount() { - unmountComponentAtNode(canvas); - } - }; -} -function Provider({ store, children, onCreated, rootElement }) { - useIsomorphicLayoutEffect(() => { - const state = store.getState(); - state.set((state) => ({ internal: { - ...state.internal, - active: true - } })); - if (onCreated) onCreated(state); - if (!store.getState().events.connected) state.events.connect == null || state.events.connect(rootElement); - }, []); - return /*#__PURE__*/ (0, import_jsx_runtime.jsx)(context.Provider, { - value: store, - children - }); -} -function unmountComponentAtNode(canvas, callback) { - const root = _roots.get(canvas); - const fiber = root == null ? void 0 : root.fiber; - if (fiber) { - const state = root == null ? void 0 : root.store.getState(); - if (state) state.internal.active = false; - reconciler.updateContainer(null, fiber, null, () => { - if (state) setTimeout(() => { - try { - var _state$gl, _state$gl$renderLists, _state$gl2, _state$gl3; - state.events.disconnect == null || state.events.disconnect(); - (_state$gl = state.gl) == null || (_state$gl$renderLists = _state$gl.renderLists) == null || _state$gl$renderLists.dispose == null || _state$gl$renderLists.dispose(); - (_state$gl2 = state.gl) == null || _state$gl2.forceContextLoss == null || _state$gl2.forceContextLoss(); - if ((_state$gl3 = state.gl) != null && _state$gl3.xr) state.xr.disconnect(); - dispose(state.scene); - _roots.delete(canvas); - if (callback) callback(canvas); - } catch (e) {} - }, 500); - }); - } -} -function createPortal(children, container, state) { - return /*#__PURE__*/ (0, import_jsx_runtime.jsx)(Portal, { - children, - container, - state - }); -} -function Portal({ state = {}, children, container }) { - /** This has to be a component because it would not be able to call useThree/useStore otherwise since - * if this is our environment, then we are not in r3f's renderer but in react-dom, it would trigger - * the "R3F hooks can only be used within the Canvas component!" warning: - * <Canvas> - * {createPortal(...)} */ - const { events, size, ...rest } = state; - const previousRoot = useStore(); - const [raycaster] = import_react.useState(() => new Raycaster()); - const [pointer] = import_react.useState(() => new Vector2()); - const inject = useMutableCallback((rootState, injectState) => { - let viewport = void 0; - if (injectState.camera && size) { - const camera = injectState.camera; - viewport = rootState.viewport.getCurrentViewport(camera, new Vector3(), size); - if (camera !== rootState.camera) updateCamera(camera, size); - } - return { - ...rootState, - ...injectState, - scene: container, - raycaster, - pointer, - mouse: pointer, - previousRoot, - events: { - ...rootState.events, - ...injectState.events, - ...events - }, - size: { - ...rootState.size, - ...size - }, - viewport: { - ...rootState.viewport, - ...viewport - }, - setEvents: (events) => injectState.set((state) => ({ - ...state, - events: { - ...state.events, - ...events - } - })) - }; - }); - const usePortalStore = import_react.useMemo(() => { - const store = createWithEqualityFn((set, get) => ({ - ...rest, - set, - get - })); - const onMutate = (prev) => store.setState((state) => inject.current(prev, state)); - onMutate(previousRoot.getState()); - previousRoot.subscribe(onMutate); - return store; - }, [previousRoot, container]); - return /*#__PURE__*/ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: reconciler.createPortal(/*#__PURE__*/ (0, import_jsx_runtime.jsx)(context.Provider, { - value: usePortalStore, - children - }), usePortalStore, null) }); -} -/** -* Force React to flush any updates inside the provided callback synchronously and immediately. -* All the same caveats documented for react-dom's `flushSync` apply here (see https://react.dev/reference/react-dom/flushSync). -* Nevertheless, sometimes one needs to render synchronously, for example to keep DOM and 3D changes in lock-step without -* having to revert to a non-React solution. Note: this will only flush updates within the `Canvas` root. -*/ -function flushSync(fn) { - return reconciler.flushSyncFromReconciler(fn); -} -function createSubs(callback, subs) { - const sub = { callback }; - subs.add(sub); - return () => void subs.delete(sub); -} -var globalEffects = /* @__PURE__ */ new Set(); -var globalAfterEffects = /* @__PURE__ */ new Set(); -var globalTailEffects = /* @__PURE__ */ new Set(); -/** -* Adds a global render callback which is called each frame. -* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addEffect -*/ -var addEffect = (callback) => createSubs(callback, globalEffects); -/** -* Adds a global after-render callback which is called each frame. -* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addAfterEffect -*/ -var addAfterEffect = (callback) => createSubs(callback, globalAfterEffects); -/** -* Adds a global callback which is called when rendering stops. -* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addTail -*/ -var addTail = (callback) => createSubs(callback, globalTailEffects); -function run(effects, timestamp) { - if (!effects.size) return; - for (const { callback } of effects.values()) callback(timestamp); -} -function flushGlobalEffects(type, timestamp) { - switch (type) { - case "before": return run(globalEffects, timestamp); - case "after": return run(globalAfterEffects, timestamp); - case "tail": return run(globalTailEffects, timestamp); - } -} -var subscribers; -var subscription; -function update(timestamp, state, frame) { - let delta = state.clock.getDelta(); - if (state.frameloop === "never" && typeof timestamp === "number") { - delta = timestamp - state.clock.elapsedTime; - state.clock.oldTime = state.clock.elapsedTime; - state.clock.elapsedTime = timestamp; - } - subscribers = state.internal.subscribers; - for (let i = 0; i < subscribers.length; i++) { - subscription = subscribers[i]; - subscription.ref.current(subscription.store.getState(), delta, frame); - } - if (!state.internal.priority && state.gl.render) state.gl.render(state.scene, state.camera); - state.internal.frames = Math.max(0, state.internal.frames - 1); - return state.frameloop === "always" ? 1 : state.internal.frames; -} -var running = false; -var useFrameInProgress = false; -var repeat; -var frame; -var state; -function loop(timestamp) { - frame = requestAnimationFrame(loop); - running = true; - repeat = 0; - flushGlobalEffects("before", timestamp); - useFrameInProgress = true; - for (const root of _roots.values()) { - var _state$gl$xr; - state = root.store.getState(); - if (state.internal.active && (state.frameloop === "always" || state.internal.frames > 0) && !((_state$gl$xr = state.gl.xr) != null && _state$gl$xr.isPresenting)) repeat += update(timestamp, state); - } - useFrameInProgress = false; - flushGlobalEffects("after", timestamp); - if (repeat === 0) { - flushGlobalEffects("tail", timestamp); - running = false; - return cancelAnimationFrame(frame); - } -} -/** -* Invalidates the view, requesting a frame to be rendered. Will globally invalidate unless passed a root's state. -* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#invalidate -*/ -function invalidate(state, frames = 1) { - var _state$gl$xr2; - if (!state) return _roots.forEach((root) => invalidate(root.store.getState(), frames)); - if ((_state$gl$xr2 = state.gl.xr) != null && _state$gl$xr2.isPresenting || !state.internal.active || state.frameloop === "never") return; - if (frames > 1) state.internal.frames = Math.min(60, state.internal.frames + frames); - else if (useFrameInProgress) state.internal.frames = 2; - else state.internal.frames = 1; - if (!running) { - running = true; - requestAnimationFrame(loop); - } -} -/** -* Advances the frameloop and runs render effects, useful for when manually rendering via `frameloop="never"`. -* @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#advance -*/ -function advance(timestamp, runGlobalEffects = true, state, frame) { - if (runGlobalEffects) flushGlobalEffects("before", timestamp); - if (!state) for (const root of _roots.values()) update(timestamp, root.store.getState()); - else update(timestamp, state, frame); - if (runGlobalEffects) flushGlobalEffects("after", timestamp); -} -var DOM_EVENTS = { - onClick: ["click", false], - onContextMenu: ["contextmenu", false], - onDoubleClick: ["dblclick", false], - onWheel: ["wheel", true], - onPointerDown: ["pointerdown", true], - onPointerUp: ["pointerup", true], - onPointerLeave: ["pointerleave", true], - onPointerMove: ["pointermove", true], - onPointerCancel: ["pointercancel", true], - onLostPointerCapture: ["lostpointercapture", true] -}; -/** Default R3F event manager for web */ -function createPointerEvents(store) { - const { handlePointer } = createEvents(store); - return { - priority: 1, - enabled: true, - compute(event, state, previous) { - state.pointer.set(event.offsetX / state.size.width * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1); - state.raycaster.setFromCamera(state.pointer, state.camera); - }, - connected: void 0, - handlers: Object.keys(DOM_EVENTS).reduce((acc, key) => ({ - ...acc, - [key]: handlePointer(key) - }), {}), - update: () => { - var _internal$lastEvent; - const { events, internal } = store.getState(); - if ((_internal$lastEvent = internal.lastEvent) != null && _internal$lastEvent.current && events.handlers) events.handlers.onPointerMove(internal.lastEvent.current); - }, - connect: (target) => { - const { set, events } = store.getState(); - events.disconnect == null || events.disconnect(); - set((state) => ({ events: { - ...state.events, - connected: target - } })); - if (events.handlers) for (const name in events.handlers) { - const event = events.handlers[name]; - const [eventName, passive] = DOM_EVENTS[name]; - target.addEventListener(eventName, event, { passive }); - } - }, - disconnect: () => { - const { set, events } = store.getState(); - if (events.connected) { - if (events.handlers) for (const name in events.handlers) { - const event = events.handlers[name]; - const [eventName] = DOM_EVENTS[name]; - events.connected.removeEventListener(eventName, event); - } - set((state) => ({ events: { - ...state.events, - connected: void 0 - } })); - } - } - }; -} -//#endregion -//#region node_modules/react-use-measure/dist/index.js -function g(n, t) { - let o; - return (...i) => { - window.clearTimeout(o), o = window.setTimeout(() => n(...i), t); - }; -} -function j({ debounce: n, scroll: t, polyfill: o, offsetSize: i } = { - debounce: 0, - scroll: !1, - offsetSize: !1 -}) { - const a = o || (typeof window == "undefined" ? class {} : window.ResizeObserver); - if (!a) throw new Error("This browser does not support ResizeObserver out of the box. See: https://github.com/react-spring/react-use-measure/#resize-observer-polyfills"); - const [c, h] = (0, import_react.useState)({ - left: 0, - top: 0, - width: 0, - height: 0, - bottom: 0, - right: 0, - x: 0, - y: 0 - }), e = (0, import_react.useRef)({ - element: null, - scrollContainers: null, - resizeObserver: null, - lastBounds: c, - orientationHandler: null - }), d = n ? typeof n == "number" ? n : n.scroll : null, f = n ? typeof n == "number" ? n : n.resize : null, w = (0, import_react.useRef)(!1); - (0, import_react.useEffect)(() => (w.current = !0, () => void (w.current = !1))); - const [z, m, s] = (0, import_react.useMemo)(() => { - const r = () => { - if (!e.current.element) return; - const { left: y, top: C, width: H, height: O, bottom: S, right: x, x: B, y: R } = e.current.element.getBoundingClientRect(), l = { - left: y, - top: C, - width: H, - height: O, - bottom: S, - right: x, - x: B, - y: R - }; - e.current.element instanceof HTMLElement && i && (l.height = e.current.element.offsetHeight, l.width = e.current.element.offsetWidth), Object.freeze(l), w.current && !D(e.current.lastBounds, l) && h(e.current.lastBounds = l); - }; - return [ - r, - f ? g(r, f) : r, - d ? g(r, d) : r - ]; - }, [ - h, - i, - d, - f - ]); - function v() { - e.current.scrollContainers && (e.current.scrollContainers.forEach((r) => r.removeEventListener("scroll", s, !0)), e.current.scrollContainers = null), e.current.resizeObserver && (e.current.resizeObserver.disconnect(), e.current.resizeObserver = null), e.current.orientationHandler && ("orientation" in screen && "removeEventListener" in screen.orientation ? screen.orientation.removeEventListener("change", e.current.orientationHandler) : "onorientationchange" in window && window.removeEventListener("orientationchange", e.current.orientationHandler)); - } - function b() { - e.current.element && (e.current.resizeObserver = new a(s), e.current.resizeObserver.observe(e.current.element), t && e.current.scrollContainers && e.current.scrollContainers.forEach((r) => r.addEventListener("scroll", s, { - capture: !0, - passive: !0 - })), e.current.orientationHandler = () => { - s(); - }, "orientation" in screen && "addEventListener" in screen.orientation ? screen.orientation.addEventListener("change", e.current.orientationHandler) : "onorientationchange" in window && window.addEventListener("orientationchange", e.current.orientationHandler)); - } - const L = (r) => { - !r || r === e.current.element || (v(), e.current.element = r, e.current.scrollContainers = E(r), b()); - }; - return X(s, !!t), W(m), (0, import_react.useEffect)(() => { - v(), b(); - }, [ - t, - s, - m - ]), (0, import_react.useEffect)(() => v, []), [ - L, - c, - z - ]; -} -function W(n) { - (0, import_react.useEffect)(() => { - const t = n; - return window.addEventListener("resize", t), () => void window.removeEventListener("resize", t); - }, [n]); -} -function X(n, t) { - (0, import_react.useEffect)(() => { - if (t) { - const o = n; - return window.addEventListener("scroll", o, { - capture: !0, - passive: !0 - }), () => void window.removeEventListener("scroll", o, !0); - } - }, [n, t]); -} -function E(n) { - const t = []; - if (!n || n === document.body) return t; - const { overflow: o, overflowX: i, overflowY: a } = window.getComputedStyle(n); - return [ - o, - i, - a - ].some((c) => c === "auto" || c === "scroll") && t.push(n), [...t, ...E(n.parentElement)]; -} -var k = [ - "x", - "y", - "top", - "bottom", - "left", - "right", - "width", - "height" -], D = (n, t) => k.every((o) => n[o] === t[o]); -//#endregion -//#region node_modules/@react-three/fiber/dist/react-three-fiber.esm.js -function CanvasImpl({ ref, children, fallback, resize, style, gl, events = createPointerEvents, eventSource, eventPrefix, shadows, linear, flat, legacy, orthographic, frameloop, dpr, performance, raycaster, camera, scene, onPointerMissed, onCreated, ...props }) { - import_react.useMemo(() => extend(three_module_exports), []); - const Bridge = useBridge(); - const [containerRef, containerRect] = j({ - scroll: true, - debounce: { - scroll: 50, - resize: 0 - }, - ...resize - }); - const canvasRef = import_react.useRef(null); - const divRef = import_react.useRef(null); - import_react.useImperativeHandle(ref, () => canvasRef.current); - const handlePointerMissed = useMutableCallback(onPointerMissed); - const [block, setBlock] = import_react.useState(false); - const [error, setError] = import_react.useState(false); - if (block) throw block; - if (error) throw error; - const root = import_react.useRef(null); - useIsomorphicLayoutEffect(() => { - const canvas = canvasRef.current; - if (containerRect.width > 0 && containerRect.height > 0 && canvas) { - if (!root.current) root.current = createRoot(canvas); - async function run() { - await root.current.configure({ - gl, - scene, - events, - shadows, - linear, - flat, - legacy, - orthographic, - frameloop, - dpr, - performance, - raycaster, - camera, - size: containerRect, - onPointerMissed: (...args) => handlePointerMissed.current == null ? void 0 : handlePointerMissed.current(...args), - onCreated: (state) => { - state.events.connect == null || state.events.connect(eventSource ? isRef(eventSource) ? eventSource.current : eventSource : divRef.current); - if (eventPrefix) state.setEvents({ compute: (event, state) => { - const x = event[eventPrefix + "X"]; - const y = event[eventPrefix + "Y"]; - state.pointer.set(x / state.size.width * 2 - 1, -(y / state.size.height) * 2 + 1); - state.raycaster.setFromCamera(state.pointer, state.camera); - } }); - onCreated?.(state); - } - }); - root.current.render(/*#__PURE__*/ (0, import_jsx_runtime.jsx)(Bridge, { children: /*#__PURE__*/ (0, import_jsx_runtime.jsx)(ErrorBoundary, { - set: setError, - children: /*#__PURE__*/ (0, import_jsx_runtime.jsx)(import_react.Suspense, { - fallback: /*#__PURE__*/ (0, import_jsx_runtime.jsx)(Block, { set: setBlock }), - children: children != null ? children : null - }) - }) })); - } - run(); - } - }); - import_react.useEffect(() => { - const canvas = canvasRef.current; - if (canvas) return () => unmountComponentAtNode(canvas); - }, []); - return /*#__PURE__*/ (0, import_jsx_runtime.jsx)("div", { - ref: divRef, - style: { - position: "relative", - width: "100%", - height: "100%", - overflow: "hidden", - pointerEvents: eventSource ? "none" : "auto", - ...style - }, - ...props, - children: /*#__PURE__*/ (0, import_jsx_runtime.jsx)("div", { - ref: containerRef, - style: { - width: "100%", - height: "100%" - }, - children: /*#__PURE__*/ (0, import_jsx_runtime.jsx)("canvas", { - ref: canvasRef, - style: { display: "block" }, - children: fallback - }) - }) - }); -} -/** -* A DOM canvas which accepts threejs elements as children. -* @see https://docs.pmnd.rs/react-three-fiber/api/canvas -*/ -function Canvas(props) { - return /*#__PURE__*/ (0, import_jsx_runtime.jsx)(m, { children: /*#__PURE__*/ (0, import_jsx_runtime.jsx)(CanvasImpl, { ...props }) }); -} -//#endregion -export { clear as A, unmountComponentAtNode as C, useLoader as D, useInstanceHandle as E, suspend as M, require_with_selector as N, useStore as O, threeTypes as S, useGraph as T, flushGlobalEffects as _, addEffect as a, invalidate as b, applyProps as c, createEvents as d, createPointerEvents as f, extend as g, dispose as h, addAfterEffect as i, preload as j, useThree as k, buildGraph as l, createRoot as m, _roots as n, addTail as o, createPortal as p, act as r, advance as s, Canvas as t, context as u, flushSync as v, useFrame as w, reconciler as x, getRootState as y }; - -//# sourceMappingURL=react-three-fiber.esm-CjFO8AMT.js.map \ No newline at end of file diff --git a/node_modules/.vite/deps/react-three-fiber.esm-CjFO8AMT.js.map b/node_modules/.vite/deps/react-three-fiber.esm-CjFO8AMT.js.map deleted file mode 100644 index 26748214..00000000 --- a/node_modules/.vite/deps/react-three-fiber.esm-CjFO8AMT.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"react-three-fiber.esm-CjFO8AMT.js","names":["useSyncExternalStoreExports","createStore","i","p","'act' + ''","useFiber","useContextBridge","traverseFiber","THREE.Layers","THREE.Color","THREE.ShaderMaterial","THREE.SRGBColorSpace","THREE.Vector3","THREE.Vector2","THREE.Clock","React__default","Tb","unstable_IdlePriority","THREE.WebGLRenderer","THREE.Raycaster","THREE.OrthographicCamera","THREE.PerspectiveCamera","THREE.Scene","THREE.LinearSRGBColorSpace","Fragment","THREE","useMeasure","FiberProvider"],"sources":["../../use-sync-external-store/cjs/use-sync-external-store-shim.development.js","../../use-sync-external-store/shim/index.js","../../use-sync-external-store/cjs/use-sync-external-store-shim/with-selector.development.js","../../use-sync-external-store/shim/with-selector.js","../../zustand/esm/traditional.mjs","../../suspend-react/index.js","../../its-fine/dist/index.js","../../@react-three/fiber/dist/events-b389eeca.esm.js","../../react-use-measure/dist/index.js","../../@react-three/fiber/dist/react-three-fiber.esm.js"],"sourcesContent":["/**\n * @license React\n * use-sync-external-store-shim.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n function useSyncExternalStore$2(subscribe, getSnapshot) {\n didWarnOld18Alpha ||\n void 0 === React.startTransition ||\n ((didWarnOld18Alpha = !0),\n console.error(\n \"You are using an outdated, pre-release alpha of React 18 that does not support useSyncExternalStore. The use-sync-external-store shim will not work correctly. Upgrade to a newer pre-release.\"\n ));\n var value = getSnapshot();\n if (!didWarnUncachedGetSnapshot) {\n var cachedValue = getSnapshot();\n objectIs(value, cachedValue) ||\n (console.error(\n \"The result of getSnapshot should be cached to avoid an infinite loop\"\n ),\n (didWarnUncachedGetSnapshot = !0));\n }\n cachedValue = useState({\n inst: { value: value, getSnapshot: getSnapshot }\n });\n var inst = cachedValue[0].inst,\n forceUpdate = cachedValue[1];\n useLayoutEffect(\n function () {\n inst.value = value;\n inst.getSnapshot = getSnapshot;\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n },\n [subscribe, value, getSnapshot]\n );\n useEffect(\n function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n return subscribe(function () {\n checkIfSnapshotChanged(inst) && forceUpdate({ inst: inst });\n });\n },\n [subscribe]\n );\n useDebugValue(value);\n return value;\n }\n function checkIfSnapshotChanged(inst) {\n var latestGetSnapshot = inst.getSnapshot;\n inst = inst.value;\n try {\n var nextValue = latestGetSnapshot();\n return !objectIs(inst, nextValue);\n } catch (error) {\n return !0;\n }\n }\n function useSyncExternalStore$1(subscribe, getSnapshot) {\n return getSnapshot();\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useState = React.useState,\n useEffect = React.useEffect,\n useLayoutEffect = React.useLayoutEffect,\n useDebugValue = React.useDebugValue,\n didWarnOld18Alpha = !1,\n didWarnUncachedGetSnapshot = !1,\n shim =\n \"undefined\" === typeof window ||\n \"undefined\" === typeof window.document ||\n \"undefined\" === typeof window.document.createElement\n ? useSyncExternalStore$1\n : useSyncExternalStore$2;\n exports.useSyncExternalStore =\n void 0 !== React.useSyncExternalStore ? React.useSyncExternalStore : shim;\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim.development.js');\n}\n","/**\n * @license React\n * use-sync-external-store-shim/with-selector.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n\"use strict\";\n\"production\" !== process.env.NODE_ENV &&\n (function () {\n function is(x, y) {\n return (x === y && (0 !== x || 1 / x === 1 / y)) || (x !== x && y !== y);\n }\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStart(Error());\n var React = require(\"react\"),\n shim = require(\"use-sync-external-store/shim\"),\n objectIs = \"function\" === typeof Object.is ? Object.is : is,\n useSyncExternalStore = shim.useSyncExternalStore,\n useRef = React.useRef,\n useEffect = React.useEffect,\n useMemo = React.useMemo,\n useDebugValue = React.useDebugValue;\n exports.useSyncExternalStoreWithSelector = function (\n subscribe,\n getSnapshot,\n getServerSnapshot,\n selector,\n isEqual\n ) {\n var instRef = useRef(null);\n if (null === instRef.current) {\n var inst = { hasValue: !1, value: null };\n instRef.current = inst;\n } else inst = instRef.current;\n instRef = useMemo(\n function () {\n function memoizedSelector(nextSnapshot) {\n if (!hasMemo) {\n hasMemo = !0;\n memoizedSnapshot = nextSnapshot;\n nextSnapshot = selector(nextSnapshot);\n if (void 0 !== isEqual && inst.hasValue) {\n var currentSelection = inst.value;\n if (isEqual(currentSelection, nextSnapshot))\n return (memoizedSelection = currentSelection);\n }\n return (memoizedSelection = nextSnapshot);\n }\n currentSelection = memoizedSelection;\n if (objectIs(memoizedSnapshot, nextSnapshot))\n return currentSelection;\n var nextSelection = selector(nextSnapshot);\n if (void 0 !== isEqual && isEqual(currentSelection, nextSelection))\n return (memoizedSnapshot = nextSnapshot), currentSelection;\n memoizedSnapshot = nextSnapshot;\n return (memoizedSelection = nextSelection);\n }\n var hasMemo = !1,\n memoizedSnapshot,\n memoizedSelection,\n maybeGetServerSnapshot =\n void 0 === getServerSnapshot ? null : getServerSnapshot;\n return [\n function () {\n return memoizedSelector(getSnapshot());\n },\n null === maybeGetServerSnapshot\n ? void 0\n : function () {\n return memoizedSelector(maybeGetServerSnapshot());\n }\n ];\n },\n [getSnapshot, getServerSnapshot, selector, isEqual]\n );\n var value = useSyncExternalStore(subscribe, instRef[0], instRef[1]);\n useEffect(\n function () {\n inst.hasValue = !0;\n inst.value = value;\n },\n [value]\n );\n useDebugValue(value);\n return value;\n };\n \"undefined\" !== typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ &&\n \"function\" ===\n typeof __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop &&\n __REACT_DEVTOOLS_GLOBAL_HOOK__.registerInternalModuleStop(Error());\n })();\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.production.js');\n} else {\n module.exports = require('../cjs/use-sync-external-store-shim/with-selector.development.js');\n}\n","import React from 'react';\nimport useSyncExternalStoreExports from 'use-sync-external-store/shim/with-selector.js';\nimport { createStore } from 'zustand/vanilla';\n\nconst { useSyncExternalStoreWithSelector } = useSyncExternalStoreExports;\nconst identity = (arg) => arg;\nfunction useStoreWithEqualityFn(api, selector = identity, equalityFn) {\n const slice = useSyncExternalStoreWithSelector(\n api.subscribe,\n api.getState,\n api.getInitialState,\n selector,\n equalityFn\n );\n React.useDebugValue(slice);\n return slice;\n}\nconst createWithEqualityFnImpl = (createState, defaultEqualityFn) => {\n const api = createStore(createState);\n const useBoundStoreWithEqualityFn = (selector, equalityFn = defaultEqualityFn) => useStoreWithEqualityFn(api, selector, equalityFn);\n Object.assign(useBoundStoreWithEqualityFn, api);\n return useBoundStoreWithEqualityFn;\n};\nconst createWithEqualityFn = ((createState, defaultEqualityFn) => createState ? createWithEqualityFnImpl(createState, defaultEqualityFn) : createWithEqualityFnImpl);\n\nexport { createWithEqualityFn, useStoreWithEqualityFn };\n","const isPromise = promise => typeof promise === 'object' && typeof promise.then === 'function';\n\nconst globalCache = [];\n\nfunction shallowEqualArrays(arrA, arrB, equal = (a, b) => a === b) {\n if (arrA === arrB) return true;\n if (!arrA || !arrB) return false;\n const len = arrA.length;\n if (arrB.length !== len) return false;\n\n for (let i = 0; i < len; i++) if (!equal(arrA[i], arrB[i])) return false;\n\n return true;\n}\n\nfunction query(fn, keys = null, preload = false, config = {}) {\n // If no keys were given, the function is the key\n if (keys === null) keys = [fn];\n\n for (const entry of globalCache) {\n // Find a match\n if (shallowEqualArrays(keys, entry.keys, entry.equal)) {\n // If we're pre-loading and the element is present, just return\n if (preload) return undefined; // If an error occurred, throw\n\n if (Object.prototype.hasOwnProperty.call(entry, 'error')) throw entry.error; // If a response was successful, return\n\n if (Object.prototype.hasOwnProperty.call(entry, 'response')) {\n if (config.lifespan && config.lifespan > 0) {\n if (entry.timeout) clearTimeout(entry.timeout);\n entry.timeout = setTimeout(entry.remove, config.lifespan);\n }\n\n return entry.response;\n } // If the promise is still unresolved, throw\n\n\n if (!preload) throw entry.promise;\n }\n } // The request is new or has changed.\n\n\n const entry = {\n keys,\n equal: config.equal,\n remove: () => {\n const index = globalCache.indexOf(entry);\n if (index !== -1) globalCache.splice(index, 1);\n },\n promise: // Execute the promise\n (isPromise(fn) ? fn : fn(...keys) // When it resolves, store its value\n ).then(response => {\n entry.response = response; // Remove the entry in time if a lifespan was given\n\n if (config.lifespan && config.lifespan > 0) {\n entry.timeout = setTimeout(entry.remove, config.lifespan);\n }\n }) // Store caught errors, they will be thrown in the render-phase to bubble into an error-bound\n .catch(error => entry.error = error)\n }; // Register the entry\n\n globalCache.push(entry); // And throw the promise, this yields control back to React\n\n if (!preload) throw entry.promise;\n return undefined;\n}\n\nconst suspend = (fn, keys, config) => query(fn, keys, false, config);\n\nconst preload = (fn, keys, config) => void query(fn, keys, true, config);\n\nconst peek = keys => {\n var _globalCache$find;\n\n return (_globalCache$find = globalCache.find(entry => shallowEqualArrays(keys, entry.keys, entry.equal))) == null ? void 0 : _globalCache$find.response;\n};\n\nconst clear = keys => {\n if (keys === undefined || keys.length === 0) globalCache.splice(0, globalCache.length);else {\n const entry = globalCache.find(entry => shallowEqualArrays(keys, entry.keys, entry.equal));\n if (entry) entry.remove();\n }\n};\n\nexport { clear, peek, preload, suspend };\n","import * as o from \"react\";\nconst f = /* @__PURE__ */ (() => {\n var e, t;\n return typeof window != \"undefined\" && (((e = window.document) == null ? void 0 : e.createElement) || ((t = window.navigator) == null ? void 0 : t.product) === \"ReactNative\");\n})() ? o.useLayoutEffect : o.useEffect;\nfunction i(e, t, r) {\n if (!e) return;\n if (r(e) === !0) return e;\n let n = t ? e.return : e.child;\n for (; n; ) {\n const u = i(n, t, r);\n if (u) return u;\n n = t ? null : n.sibling;\n }\n}\nfunction l(e) {\n try {\n return Object.defineProperties(e, {\n _currentRenderer: {\n get() {\n return null;\n },\n set() {\n }\n },\n _currentRenderer2: {\n get() {\n return null;\n },\n set() {\n }\n }\n });\n } catch (t) {\n return e;\n }\n}\nconst a = /* @__PURE__ */ l(/* @__PURE__ */ o.createContext(null));\nclass m extends o.Component {\n render() {\n return /* @__PURE__ */ o.createElement(a.Provider, { value: this._reactInternals }, this.props.children);\n }\n}\nfunction c() {\n const e = o.useContext(a);\n if (e === null) throw new Error(\"its-fine: useFiber must be called within a <FiberProvider />!\");\n const t = o.useId();\n return o.useMemo(() => {\n for (const n of [e, e == null ? void 0 : e.alternate]) {\n if (!n) continue;\n const u = i(n, !1, (d) => {\n let s = d.memoizedState;\n for (; s; ) {\n if (s.memoizedState === t) return !0;\n s = s.next;\n }\n });\n if (u) return u;\n }\n }, [e, t]);\n}\nfunction w() {\n const e = c(), t = o.useMemo(\n () => i(e, !0, (r) => {\n var n;\n return ((n = r.stateNode) == null ? void 0 : n.containerInfo) != null;\n }),\n [e]\n );\n return t == null ? void 0 : t.stateNode.containerInfo;\n}\nfunction v(e) {\n const t = c(), r = o.useRef(void 0);\n return f(() => {\n var n;\n r.current = (n = i(\n t,\n !1,\n (u) => typeof u.type == \"string\" && (e === void 0 || u.type === e)\n )) == null ? void 0 : n.stateNode;\n }, [t]), r;\n}\nfunction y(e) {\n const t = c(), r = o.useRef(void 0);\n return f(() => {\n var n;\n r.current = (n = i(\n t,\n !0,\n (u) => typeof u.type == \"string\" && (e === void 0 || u.type === e)\n )) == null ? void 0 : n.stateNode;\n }, [t]), r;\n}\nconst p = Symbol.for(\"react.context\"), b = (e) => e !== null && typeof e == \"object\" && \"$$typeof\" in e && e.$$typeof === p;\nfunction h() {\n const e = c(), [t] = o.useState(() => /* @__PURE__ */ new Map());\n t.clear();\n let r = e;\n for (; r; ) {\n const n = r.type;\n b(n) && n !== a && !t.has(n) && t.set(n, o.use(l(n))), r = r.return;\n }\n return t;\n}\nfunction x() {\n const e = h();\n return o.useMemo(\n () => Array.from(e.keys()).reduce(\n (t, r) => (n) => /* @__PURE__ */ o.createElement(t, null, /* @__PURE__ */ o.createElement(r.Provider, { ...n, value: e.get(r) })),\n (t) => /* @__PURE__ */ o.createElement(m, { ...t })\n ),\n [e]\n );\n}\nexport {\n m as FiberProvider,\n i as traverseFiber,\n w as useContainer,\n x as useContextBridge,\n h as useContextMap,\n c as useFiber,\n v as useNearestChild,\n y as useNearestParent\n};\n//# sourceMappingURL=index.js.map\n","import * as React from 'react';\nimport React__default from 'react';\nimport * as THREE from 'three';\nimport { createWithEqualityFn } from 'zustand/traditional';\nimport { suspend, preload, clear } from 'suspend-react';\nimport Tb, { unstable_scheduleCallback, unstable_IdlePriority } from 'scheduler';\nimport { jsx, Fragment } from 'react/jsx-runtime';\nimport { useFiber, useContextBridge, traverseFiber } from 'its-fine';\n\nvar threeTypes = /*#__PURE__*/Object.freeze({\n __proto__: null\n});\n\n/**\r\n * Returns the instance's initial (outmost) root.\r\n */\nfunction findInitialRoot(instance) {\n let root = instance.root;\n while (root.getState().previousRoot) root = root.getState().previousRoot;\n return root;\n}\n/**\r\n * Safely flush async effects when testing, simulating a legacy root.\r\n * @deprecated Import from React instead. import { act } from 'react'\r\n */\n// Reference with computed key to break Webpack static analysis\n// https://github.com/webpack/webpack/issues/14814\nconst act = React['act' + ''];\nconst isOrthographicCamera = def => def && def.isOrthographicCamera;\nconst isRef = obj => obj && obj.hasOwnProperty('current');\nconst isColorRepresentation = value => value != null && (typeof value === 'string' || typeof value === 'number' || value.isColor);\n\n/**\r\n * An SSR-friendly useLayoutEffect.\r\n *\r\n * React currently throws a warning when using useLayoutEffect on the server.\r\n * To get around it, we can conditionally useEffect on the server (no-op) and\r\n * useLayoutEffect elsewhere.\r\n *\r\n * @see https://github.com/facebook/react/issues/14927\r\n */\nconst useIsomorphicLayoutEffect = /* @__PURE__ */((_window$document, _window$navigator) => typeof window !== 'undefined' && (((_window$document = window.document) == null ? void 0 : _window$document.createElement) || ((_window$navigator = window.navigator) == null ? void 0 : _window$navigator.product) === 'ReactNative'))() ? React.useLayoutEffect : React.useEffect;\nfunction useMutableCallback(fn) {\n const ref = React.useRef(fn);\n useIsomorphicLayoutEffect(() => void (ref.current = fn), [fn]);\n return ref;\n}\n/**\r\n * Bridges renderer Context and StrictMode from a primary renderer.\r\n */\nfunction useBridge() {\n const fiber = useFiber();\n const ContextBridge = useContextBridge();\n return React.useMemo(() => ({\n children\n }) => {\n const strict = !!traverseFiber(fiber, true, node => node.type === React.StrictMode);\n const Root = strict ? React.StrictMode : React.Fragment;\n return /*#__PURE__*/jsx(Root, {\n children: /*#__PURE__*/jsx(ContextBridge, {\n children: children\n })\n });\n }, [fiber, ContextBridge]);\n}\nfunction Block({\n set\n}) {\n useIsomorphicLayoutEffect(() => {\n set(new Promise(() => null));\n return () => set(false);\n }, [set]);\n return null;\n}\n\n// NOTE: static members get down-level transpiled to mutations which break tree-shaking\nconst ErrorBoundary = /* @__PURE__ */(_ErrorBoundary => (_ErrorBoundary = class ErrorBoundary extends React.Component {\n constructor(...args) {\n super(...args);\n this.state = {\n error: false\n };\n }\n componentDidCatch(err) {\n this.props.set(err);\n }\n render() {\n return this.state.error ? null : this.props.children;\n }\n}, _ErrorBoundary.getDerivedStateFromError = () => ({\n error: true\n}), _ErrorBoundary))();\nfunction calculateDpr(dpr) {\n var _window$devicePixelRa;\n // Err on the side of progress by assuming 2x dpr if we can't detect it\n // This will happen in workers where window is defined but dpr isn't.\n const target = typeof window !== 'undefined' ? (_window$devicePixelRa = window.devicePixelRatio) != null ? _window$devicePixelRa : 2 : 1;\n return Array.isArray(dpr) ? Math.min(Math.max(dpr[0], target), dpr[1]) : dpr;\n}\n\n/**\r\n * Returns instance root state\r\n */\nfunction getRootState(obj) {\n var _r3f;\n return (_r3f = obj.__r3f) == null ? void 0 : _r3f.root.getState();\n}\n// A collection of compare functions\nconst is = {\n obj: a => a === Object(a) && !is.arr(a) && typeof a !== 'function',\n fun: a => typeof a === 'function',\n str: a => typeof a === 'string',\n num: a => typeof a === 'number',\n boo: a => typeof a === 'boolean',\n und: a => a === void 0,\n nul: a => a === null,\n arr: a => Array.isArray(a),\n equ(a, b, {\n arrays = 'shallow',\n objects = 'reference',\n strict = true\n } = {}) {\n // Wrong type or one of the two undefined, doesn't match\n if (typeof a !== typeof b || !!a !== !!b) return false;\n // Atomic, just compare a against b\n if (is.str(a) || is.num(a) || is.boo(a)) return a === b;\n const isObj = is.obj(a);\n if (isObj && objects === 'reference') return a === b;\n const isArr = is.arr(a);\n if (isArr && arrays === 'reference') return a === b;\n // Array or Object, shallow compare first to see if it's a match\n if ((isArr || isObj) && a === b) return true;\n // Last resort, go through keys\n let i;\n // Check if a has all the keys of b\n for (i in a) if (!(i in b)) return false;\n // Check if values between keys match\n if (isObj && arrays === 'shallow' && objects === 'shallow') {\n for (i in strict ? b : a) if (!is.equ(a[i], b[i], {\n strict,\n objects: 'reference'\n })) return false;\n } else {\n for (i in strict ? b : a) if (a[i] !== b[i]) return false;\n }\n // If i is undefined\n if (is.und(i)) {\n // If both arrays are empty we consider them equal\n if (isArr && a.length === 0 && b.length === 0) return true;\n // If both objects are empty we consider them equal\n if (isObj && Object.keys(a).length === 0 && Object.keys(b).length === 0) return true;\n // Otherwise match them by value\n if (a !== b) return false;\n }\n return true;\n }\n};\n\n// Collects nodes and materials from a THREE.Object3D\nfunction buildGraph(object) {\n const data = {\n nodes: {},\n materials: {},\n meshes: {}\n };\n if (object) {\n object.traverse(obj => {\n if (obj.name) data.nodes[obj.name] = obj;\n if (obj.material && !data.materials[obj.material.name]) data.materials[obj.material.name] = obj.material;\n if (obj.isMesh && !data.meshes[obj.name]) data.meshes[obj.name] = obj;\n });\n }\n return data;\n}\n// Disposes an object and all its properties\nfunction dispose(obj) {\n if (obj.type !== 'Scene') obj.dispose == null ? void 0 : obj.dispose();\n for (const p in obj) {\n const prop = obj[p];\n if ((prop == null ? void 0 : prop.type) !== 'Scene') prop == null ? void 0 : prop.dispose == null ? void 0 : prop.dispose();\n }\n}\nconst REACT_INTERNAL_PROPS = ['children', 'key', 'ref'];\n\n// Gets only instance props from reconciler fibers\nfunction getInstanceProps(pendingProps) {\n const props = {};\n for (const key in pendingProps) {\n if (!REACT_INTERNAL_PROPS.includes(key)) props[key] = pendingProps[key];\n }\n return props;\n}\n\n// Each object in the scene carries a small LocalState descriptor\nfunction prepare(target, root, type, props) {\n const object = target;\n\n // Create instance descriptor\n let instance = object == null ? void 0 : object.__r3f;\n if (!instance) {\n instance = {\n root,\n type,\n parent: null,\n children: [],\n props: getInstanceProps(props),\n object,\n eventCount: 0,\n handlers: {},\n isHidden: false\n };\n if (object) object.__r3f = instance;\n }\n return instance;\n}\nfunction resolve(root, key) {\n if (!key.includes('-')) return {\n root,\n key,\n target: root[key]\n };\n\n // First try the entire key as a single property (e.g., 'foo-bar')\n if (key in root) {\n return {\n root,\n key,\n target: root[key]\n };\n }\n\n // Try piercing (e.g., 'material-color' -> material.color)\n let target = root;\n const parts = key.split('-');\n for (const part of parts) {\n if (typeof target !== 'object' || target === null) {\n if (target !== undefined) {\n // Property exists but has unexpected shape\n const remaining = parts.slice(parts.indexOf(part)).join('-');\n return {\n root: target,\n key: remaining,\n target: undefined\n };\n }\n // Property doesn't exist - fallback to original key\n return {\n root,\n key,\n target: undefined\n };\n }\n key = part;\n root = target;\n target = target[key];\n }\n return {\n root,\n key,\n target\n };\n}\n\n// Checks if a dash-cased string ends with an integer\nconst INDEX_REGEX = /-\\d+$/;\nfunction attach(parent, child) {\n if (is.str(child.props.attach)) {\n // If attaching into an array (foo-0), create one\n if (INDEX_REGEX.test(child.props.attach)) {\n const index = child.props.attach.replace(INDEX_REGEX, '');\n const {\n root,\n key\n } = resolve(parent.object, index);\n if (!Array.isArray(root[key])) root[key] = [];\n }\n const {\n root,\n key\n } = resolve(parent.object, child.props.attach);\n child.previousAttach = root[key];\n root[key] = child.object;\n } else if (is.fun(child.props.attach)) {\n child.previousAttach = child.props.attach(parent.object, child.object);\n }\n}\nfunction detach(parent, child) {\n if (is.str(child.props.attach)) {\n const {\n root,\n key\n } = resolve(parent.object, child.props.attach);\n const previous = child.previousAttach;\n // When the previous value was undefined, it means the value was never set to begin with\n if (previous === undefined) delete root[key];\n // Otherwise set the previous value\n else root[key] = previous;\n } else {\n child.previousAttach == null ? void 0 : child.previousAttach(parent.object, child.object);\n }\n delete child.previousAttach;\n}\nconst RESERVED_PROPS = [...REACT_INTERNAL_PROPS,\n// Instance props\n'args', 'dispose', 'attach', 'object', 'onUpdate',\n// Behavior flags\n'dispose'];\nconst MEMOIZED_PROTOTYPES = new Map();\nfunction getMemoizedPrototype(root) {\n let ctor = MEMOIZED_PROTOTYPES.get(root.constructor);\n try {\n if (!ctor) {\n ctor = new root.constructor();\n MEMOIZED_PROTOTYPES.set(root.constructor, ctor);\n }\n } catch (e) {\n // ...\n }\n return ctor;\n}\n\n// This function prepares a set of changes to be applied to the instance\nfunction diffProps(instance, newProps) {\n const changedProps = {};\n\n // Sort through props\n for (const prop in newProps) {\n // Skip reserved keys\n if (RESERVED_PROPS.includes(prop)) continue;\n // Skip if props match\n if (is.equ(newProps[prop], instance.props[prop])) continue;\n\n // Props changed, add them\n changedProps[prop] = newProps[prop];\n\n // Reset pierced props\n for (const other in newProps) {\n if (other.startsWith(`${prop}-`)) changedProps[other] = newProps[other];\n }\n }\n\n // Reset removed props for HMR\n for (const prop in instance.props) {\n if (RESERVED_PROPS.includes(prop) || newProps.hasOwnProperty(prop)) continue;\n const {\n root,\n key\n } = resolve(instance.object, prop);\n\n // https://github.com/mrdoob/three.js/issues/21209\n // HMR/fast-refresh relies on the ability to cancel out props, but threejs\n // has no means to do this. Hence we curate a small collection of value-classes\n // with their respective constructor/set arguments\n // For removed props, try to set default values, if possible\n if (root.constructor && root.constructor.length === 0) {\n // create a blank slate of the instance and copy the particular parameter.\n const ctor = getMemoizedPrototype(root);\n if (!is.und(ctor)) changedProps[key] = ctor[key];\n } else {\n // instance does not have constructor, just set it to 0\n changedProps[key] = 0;\n }\n }\n return changedProps;\n}\n\n// https://github.com/mrdoob/three.js/pull/27042\n// https://github.com/mrdoob/three.js/pull/22748\nconst colorMaps = ['map', 'emissiveMap', 'sheenColorMap', 'specularColorMap', 'envMap'];\nconst EVENT_REGEX = /^on(Pointer|Click|DoubleClick|ContextMenu|Wheel)/;\n// This function applies a set of changes to the instance\nfunction applyProps(object, props) {\n var _instance$object;\n const instance = object.__r3f;\n const rootState = instance && findInitialRoot(instance).getState();\n const prevHandlers = instance == null ? void 0 : instance.eventCount;\n for (const prop in props) {\n let value = props[prop];\n\n // Don't mutate reserved keys\n if (RESERVED_PROPS.includes(prop)) continue;\n\n // Deal with pointer events, including removing them if undefined\n if (instance && EVENT_REGEX.test(prop)) {\n if (typeof value === 'function') instance.handlers[prop] = value;else delete instance.handlers[prop];\n instance.eventCount = Object.keys(instance.handlers).length;\n continue;\n }\n\n // Ignore setting undefined props\n // https://github.com/pmndrs/react-three-fiber/issues/274\n if (value === undefined) continue;\n let {\n root,\n key,\n target\n } = resolve(object, prop);\n\n // Throw an error if we attempted to set a pierced prop to a non-object\n if (target === undefined && (typeof root !== 'object' || root === null)) {\n throw Error(`R3F: Cannot set \"${prop}\". Ensure it is an object before setting \"${key}\".`);\n }\n\n // Layers must be written to the mask property\n if (target instanceof THREE.Layers && value instanceof THREE.Layers) {\n target.mask = value.mask;\n }\n // Set colors if valid color representation for automatic conversion (copy)\n else if (target instanceof THREE.Color && isColorRepresentation(value)) {\n target.set(value);\n }\n // Copy if properties match signatures and implement math interface (likely read-only)\n else if (target !== null && typeof target === 'object' && typeof target.set === 'function' && typeof target.copy === 'function' && value != null && value.constructor && target.constructor === value.constructor) {\n target.copy(value);\n }\n // Set array types\n else if (target !== null && typeof target === 'object' && typeof target.set === 'function' && Array.isArray(value)) {\n if (typeof target.fromArray === 'function') target.fromArray(value);else target.set(...value);\n }\n // Set literal types\n else if (target !== null && typeof target === 'object' && typeof target.set === 'function' && typeof value === 'number') {\n // Allow setting array scalars\n if (typeof target.setScalar === 'function') target.setScalar(value);\n // Otherwise just set single value\n else target.set(value);\n }\n // ShaderMaterial uniforms must keep a stable target reference\n else if (root instanceof THREE.ShaderMaterial && key === 'uniforms' && is.obj(value)) {\n if (!is.obj(root.uniforms)) root.uniforms = {};\n const uniforms = root.uniforms;\n const nextUniforms = value;\n for (const name in nextUniforms) {\n const uniform = nextUniforms[name];\n const targetUniform = uniforms[name];\n if (targetUniform) Object.assign(targetUniform, uniform);else uniforms[name] = {\n ...uniform\n };\n }\n }\n // Else, just overwrite the value\n else {\n var _root$key;\n root[key] = value;\n\n // Auto-convert sRGB texture parameters for built-in materials\n // https://github.com/pmndrs/react-three-fiber/issues/344\n // https://github.com/mrdoob/three.js/pull/25857\n if (rootState && !rootState.linear && colorMaps.includes(key) && (_root$key = root[key]) != null && _root$key.isTexture &&\n // sRGB textures must be RGBA8 since r137 https://github.com/mrdoob/three.js/pull/23129\n root[key].format === THREE.RGBAFormat && root[key].type === THREE.UnsignedByteType) {\n // NOTE: this cannot be set from the renderer (e.g. sRGB source textures rendered to P3)\n root[key].colorSpace = THREE.SRGBColorSpace;\n }\n }\n }\n\n // Register event handlers\n if (instance != null && instance.parent && rootState != null && rootState.internal && (_instance$object = instance.object) != null && _instance$object.isObject3D && prevHandlers !== instance.eventCount) {\n const object = instance.object;\n // Pre-emptively remove the instance from the interaction manager\n const index = rootState.internal.interaction.indexOf(object);\n if (index > -1) rootState.internal.interaction.splice(index, 1);\n // Add the instance to the interaction manager only when it has handlers\n if (instance.eventCount && object.raycast !== null) {\n rootState.internal.interaction.push(object);\n }\n }\n\n // Auto-attach geometries and materials\n if (instance && instance.props.attach === undefined) {\n if (instance.object.isBufferGeometry) instance.props.attach = 'geometry';else if (instance.object.isMaterial) instance.props.attach = 'material';\n }\n\n // Instance was updated, request a frame\n if (instance) invalidateInstance(instance);\n return object;\n}\nfunction invalidateInstance(instance) {\n var _instance$root;\n if (!instance.parent) return;\n instance.props.onUpdate == null ? void 0 : instance.props.onUpdate(instance.object);\n const state = (_instance$root = instance.root) == null ? void 0 : _instance$root.getState == null ? void 0 : _instance$root.getState();\n if (state && state.internal.frames === 0) state.invalidate();\n}\nfunction updateCamera(camera, size) {\n // Do not mess with the camera if it belongs to the user\n // https://github.com/pmndrs/react-three-fiber/issues/92\n if (camera.manual) return;\n if (isOrthographicCamera(camera)) {\n camera.left = size.width / -2;\n camera.right = size.width / 2;\n camera.top = size.height / 2;\n camera.bottom = size.height / -2;\n } else {\n camera.aspect = size.width / size.height;\n }\n camera.updateProjectionMatrix();\n}\nconst isObject3D = object => object == null ? void 0 : object.isObject3D;\n\nfunction makeId(event) {\n return (event.eventObject || event.object).uuid + '/' + event.index + event.instanceId;\n}\n\n/**\r\n * Release pointer captures.\r\n * This is called by releasePointerCapture in the API, and when an object is removed.\r\n */\nfunction releaseInternalPointerCapture(capturedMap, obj, captures, pointerId) {\n const captureData = captures.get(obj);\n if (captureData) {\n captures.delete(obj);\n // If this was the last capturing object for this pointer\n if (captures.size === 0) {\n capturedMap.delete(pointerId);\n captureData.target.releasePointerCapture(pointerId);\n }\n }\n}\n\n/** This function transfers all interactivity state from one object instance to another. Used when swapping instances due to reconstruction. */\nfunction swapInteractivity(store, object, newObject) {\n const {\n internal\n } = store.getState();\n for (let i = 0; i < internal.interaction.length; i++) {\n if (internal.interaction[i] === object) internal.interaction[i] = newObject;\n }\n for (let i = 0; i < internal.initialHits.length; i++) {\n if (internal.initialHits[i] === object) internal.initialHits[i] = newObject;\n }\n internal.hovered.forEach((value, key) => {\n if (value.eventObject === object || value.object === object) {\n internal.hovered.delete(key);\n const next = {\n ...value,\n eventObject: value.eventObject === object ? newObject : value.eventObject,\n object: value.object === object ? newObject : value.object\n };\n internal.hovered.set(makeId(next), next);\n }\n });\n internal.capturedMap.forEach(captures => {\n const captureData = captures.get(object);\n if (captureData) {\n captures.delete(object);\n captures.set(newObject, captureData);\n }\n });\n}\nfunction removeInteractivity(store, object) {\n const {\n internal\n } = store.getState();\n // Removes every trace of an object from the data store\n internal.interaction = internal.interaction.filter(o => o !== object);\n internal.initialHits = internal.initialHits.filter(o => o !== object);\n internal.hovered.forEach((value, key) => {\n if (value.eventObject === object || value.object === object) {\n // Clear out intersects, they are outdated by now\n internal.hovered.delete(key);\n }\n });\n internal.capturedMap.forEach((captures, pointerId) => {\n releaseInternalPointerCapture(internal.capturedMap, object, captures, pointerId);\n });\n}\nfunction createEvents(store) {\n /** Calculates delta */\n function calculateDistance(event) {\n const {\n internal\n } = store.getState();\n const dx = event.offsetX - internal.initialClick[0];\n const dy = event.offsetY - internal.initialClick[1];\n return Math.round(Math.sqrt(dx * dx + dy * dy));\n }\n\n /** Returns true if an instance has a valid pointer-event registered, this excludes scroll, clicks etc */\n function filterPointerEvents(objects) {\n return objects.filter(obj => ['Move', 'Over', 'Enter', 'Out', 'Leave'].some(name => {\n var _r3f;\n return (_r3f = obj.__r3f) == null ? void 0 : _r3f.handlers['onPointer' + name];\n }));\n }\n function intersect(event, filter) {\n const state = store.getState();\n const duplicates = new Set();\n const intersections = [];\n // Allow callers to eliminate event objects\n const eventsObjects = filter ? filter(state.internal.interaction) : state.internal.interaction;\n // Reset all raycaster cameras to undefined\n for (let i = 0; i < eventsObjects.length; i++) {\n const state = getRootState(eventsObjects[i]);\n if (state) {\n state.raycaster.camera = undefined;\n }\n }\n if (!state.previousRoot) {\n // Make sure root-level pointer and ray are set up\n state.events.compute == null ? void 0 : state.events.compute(event, state);\n }\n function handleRaycast(obj) {\n const state = getRootState(obj);\n // Skip event handling when noEvents is set, or when the raycasters camera is null\n if (!state || !state.events.enabled || state.raycaster.camera === null) return [];\n\n // When the camera is undefined we have to call the event layers update function\n if (state.raycaster.camera === undefined) {\n var _state$previousRoot;\n state.events.compute == null ? void 0 : state.events.compute(event, state, (_state$previousRoot = state.previousRoot) == null ? void 0 : _state$previousRoot.getState());\n // If the camera is still undefined we have to skip this layer entirely\n if (state.raycaster.camera === undefined) state.raycaster.camera = null;\n }\n\n // Intersect object by object\n return state.raycaster.camera ? state.raycaster.intersectObject(obj, true) : [];\n }\n\n // Collect events\n let hits = eventsObjects\n // Intersect objects\n .flatMap(handleRaycast)\n // Sort by event priority and distance\n .sort((a, b) => {\n const aState = getRootState(a.object);\n const bState = getRootState(b.object);\n if (!aState || !bState) return a.distance - b.distance;\n return bState.events.priority - aState.events.priority || a.distance - b.distance;\n })\n // Filter out duplicates\n .filter(item => {\n const id = makeId(item);\n if (duplicates.has(id)) return false;\n duplicates.add(id);\n return true;\n });\n\n // https://github.com/mrdoob/three.js/issues/16031\n // Allow custom userland intersect sort order, this likely only makes sense on the root filter\n if (state.events.filter) hits = state.events.filter(hits, state);\n\n // Bubble up the events, find the event source (eventObject)\n for (const hit of hits) {\n let eventObject = hit.object;\n // Bubble event up\n while (eventObject) {\n var _r3f2;\n if ((_r3f2 = eventObject.__r3f) != null && _r3f2.eventCount) intersections.push({\n ...hit,\n eventObject\n });\n eventObject = eventObject.parent;\n }\n }\n\n // If the interaction is captured, make all capturing targets part of the intersect.\n if ('pointerId' in event && state.internal.capturedMap.has(event.pointerId)) {\n for (let captureData of state.internal.capturedMap.get(event.pointerId).values()) {\n if (!duplicates.has(makeId(captureData.intersection))) intersections.push(captureData.intersection);\n }\n }\n return intersections;\n }\n\n /** Handles intersections by forwarding them to handlers */\n function handleIntersects(intersections, event, delta, callback) {\n // If anything has been found, forward it to the event listeners\n if (intersections.length) {\n const localState = {\n stopped: false\n };\n for (const hit of intersections) {\n let state = getRootState(hit.object);\n\n // If the object is not managed by R3F, it might be parented to an element which is.\n // Traverse upwards until we find a managed parent and use its state instead.\n if (!state) {\n hit.object.traverseAncestors(obj => {\n const parentState = getRootState(obj);\n if (parentState) {\n state = parentState;\n return false;\n }\n });\n }\n if (state) {\n const {\n raycaster,\n pointer,\n camera,\n internal\n } = state;\n const unprojectedPoint = new THREE.Vector3(pointer.x, pointer.y, 0).unproject(camera);\n const hasPointerCapture = id => {\n var _internal$capturedMap, _internal$capturedMap2;\n return (_internal$capturedMap = (_internal$capturedMap2 = internal.capturedMap.get(id)) == null ? void 0 : _internal$capturedMap2.has(hit.eventObject)) != null ? _internal$capturedMap : false;\n };\n const setPointerCapture = id => {\n const captureData = {\n intersection: hit,\n target: event.target\n };\n if (internal.capturedMap.has(id)) {\n // if the pointerId was previously captured, we add the hit to the\n // event capturedMap.\n internal.capturedMap.get(id).set(hit.eventObject, captureData);\n } else {\n // if the pointerId was not previously captured, we create a map\n // containing the hitObject, and the hit. hitObject is used for\n // faster access.\n internal.capturedMap.set(id, new Map([[hit.eventObject, captureData]]));\n }\n event.target.setPointerCapture(id);\n };\n const releasePointerCapture = id => {\n const captures = internal.capturedMap.get(id);\n if (captures) {\n releaseInternalPointerCapture(internal.capturedMap, hit.eventObject, captures, id);\n }\n };\n\n // Add native event props\n let extractEventProps = {};\n // This iterates over the event's properties including the inherited ones. Native PointerEvents have most of their props as getters which are inherited, but polyfilled PointerEvents have them all as their own properties (i.e. not inherited). We can't use Object.keys() or Object.entries() as they only return \"own\" properties; nor Object.getPrototypeOf(event) as that *doesn't* return \"own\" properties, only inherited ones.\n for (let prop in event) {\n let property = event[prop];\n // Only copy over atomics, leave functions alone as these should be\n // called as event.nativeEvent.fn()\n if (typeof property !== 'function') extractEventProps[prop] = property;\n }\n let raycastEvent = {\n ...hit,\n ...extractEventProps,\n pointer,\n intersections,\n stopped: localState.stopped,\n delta,\n unprojectedPoint,\n ray: raycaster.ray,\n camera: camera,\n // Hijack stopPropagation, which just sets a flag\n stopPropagation() {\n // https://github.com/pmndrs/react-three-fiber/issues/596\n // Events are not allowed to stop propagation if the pointer has been captured\n const capturesForPointer = 'pointerId' in event && internal.capturedMap.get(event.pointerId);\n\n // We only authorize stopPropagation...\n if (\n // ...if this pointer hasn't been captured\n !capturesForPointer ||\n // ... or if the hit object is capturing the pointer\n capturesForPointer.has(hit.eventObject)) {\n raycastEvent.stopped = localState.stopped = true;\n // Propagation is stopped, remove all other hover records\n // An event handler is only allowed to flush other handlers if it is hovered itself\n if (internal.hovered.size && Array.from(internal.hovered.values()).find(i => i.eventObject === hit.eventObject)) {\n // Objects cannot flush out higher up objects that have already caught the event\n const higher = intersections.slice(0, intersections.indexOf(hit));\n cancelPointer([...higher, hit]);\n }\n }\n },\n // there should be a distinction between target and currentTarget\n target: {\n hasPointerCapture,\n setPointerCapture,\n releasePointerCapture\n },\n currentTarget: {\n hasPointerCapture,\n setPointerCapture,\n releasePointerCapture\n },\n nativeEvent: event\n };\n\n // Call subscribers\n callback(raycastEvent);\n // Event bubbling may be interrupted by stopPropagation\n if (localState.stopped === true) break;\n }\n }\n }\n return intersections;\n }\n function cancelPointer(intersections) {\n const {\n internal\n } = store.getState();\n for (const hoveredObj of internal.hovered.values()) {\n // When no objects were hit or the hovered object wasn't found underneath the cursor\n // we call onPointerOut and delete the object from the hovered-elements map\n if (!intersections.length || !intersections.find(hit => hit.object === hoveredObj.object && hit.index === hoveredObj.index && hit.instanceId === hoveredObj.instanceId)) {\n const eventObject = hoveredObj.eventObject;\n const instance = eventObject.__r3f;\n internal.hovered.delete(makeId(hoveredObj));\n if (instance != null && instance.eventCount) {\n const handlers = instance.handlers;\n // Clear out intersects, they are outdated by now\n const data = {\n ...hoveredObj,\n intersections\n };\n handlers.onPointerOut == null ? void 0 : handlers.onPointerOut(data);\n handlers.onPointerLeave == null ? void 0 : handlers.onPointerLeave(data);\n }\n }\n }\n }\n function pointerMissed(event, objects) {\n for (let i = 0; i < objects.length; i++) {\n const instance = objects[i].__r3f;\n instance == null ? void 0 : instance.handlers.onPointerMissed == null ? void 0 : instance.handlers.onPointerMissed(event);\n }\n }\n function handlePointer(name) {\n // Deal with cancelation\n switch (name) {\n case 'onPointerLeave':\n case 'onPointerCancel':\n return () => cancelPointer([]);\n case 'onLostPointerCapture':\n return event => {\n const {\n internal\n } = store.getState();\n if ('pointerId' in event && internal.capturedMap.has(event.pointerId)) {\n // If the object event interface had onLostPointerCapture, we'd call it here on every\n // object that's getting removed. We call it on the next frame because onLostPointerCapture\n // fires before onPointerUp. Otherwise pointerUp would never be called if the event didn't\n // happen in the object it originated from, leaving components in a in-between state.\n requestAnimationFrame(() => {\n // Only release if pointer-up didn't do it already\n if (internal.capturedMap.has(event.pointerId)) {\n internal.capturedMap.delete(event.pointerId);\n cancelPointer([]);\n }\n });\n }\n };\n }\n\n // Any other pointer goes here ...\n return function handleEvent(event) {\n const {\n onPointerMissed,\n internal\n } = store.getState();\n\n // prepareRay(event)\n internal.lastEvent.current = event;\n\n // Get fresh intersects\n const isPointerMove = name === 'onPointerMove';\n const isClickEvent = name === 'onClick' || name === 'onContextMenu' || name === 'onDoubleClick';\n const filter = isPointerMove ? filterPointerEvents : undefined;\n const hits = intersect(event, filter);\n const delta = isClickEvent ? calculateDistance(event) : 0;\n\n // Save initial coordinates on pointer-down\n if (name === 'onPointerDown') {\n internal.initialClick = [event.offsetX, event.offsetY];\n internal.initialHits = hits.map(hit => hit.eventObject);\n }\n\n // If a click yields no results, pass it back to the user as a miss\n // Missed events have to come first in order to establish user-land side-effect clean up\n if (isClickEvent && !hits.length) {\n if (delta <= 2) {\n pointerMissed(event, internal.interaction);\n if (onPointerMissed) onPointerMissed(event);\n }\n }\n // Take care of unhover\n if (isPointerMove) cancelPointer(hits);\n function onIntersect(data) {\n const eventObject = data.eventObject;\n const instance = eventObject.__r3f;\n\n // Check presence of handlers\n if (!(instance != null && instance.eventCount)) return;\n const handlers = instance.handlers;\n\n /*\r\n MAYBE TODO, DELETE IF NOT: \r\n Check if the object is captured, captured events should not have intersects running in parallel\r\n But wouldn't it be better to just replace capturedMap with a single entry?\r\n Also, are we OK with straight up making picking up multiple objects impossible?\r\n \r\n const pointerId = (data as ThreeEvent<PointerEvent>).pointerId \r\n if (pointerId !== undefined) {\r\n const capturedMeshSet = internal.capturedMap.get(pointerId)\r\n if (capturedMeshSet) {\r\n const captured = capturedMeshSet.get(eventObject)\r\n if (captured && captured.localState.stopped) return\r\n }\r\n }*/\n\n if (isPointerMove) {\n // Move event ...\n if (handlers.onPointerOver || handlers.onPointerEnter || handlers.onPointerOut || handlers.onPointerLeave) {\n // When enter or out is present take care of hover-state\n const id = makeId(data);\n const hoveredItem = internal.hovered.get(id);\n if (!hoveredItem) {\n // If the object wasn't previously hovered, book it and call its handler\n internal.hovered.set(id, data);\n handlers.onPointerOver == null ? void 0 : handlers.onPointerOver(data);\n handlers.onPointerEnter == null ? void 0 : handlers.onPointerEnter(data);\n } else if (hoveredItem.stopped) {\n // If the object was previously hovered and stopped, we shouldn't allow other items to proceed\n data.stopPropagation();\n }\n }\n // Call mouse move\n handlers.onPointerMove == null ? void 0 : handlers.onPointerMove(data);\n } else {\n // All other events ...\n const handler = handlers[name];\n if (handler) {\n // Forward all events back to their respective handlers with the exception of click events,\n // which must use the initial target\n if (!isClickEvent || internal.initialHits.includes(eventObject)) {\n // Missed events have to come first\n pointerMissed(event, internal.interaction.filter(object => !internal.initialHits.includes(object)));\n // Now call the handler\n handler(data);\n }\n } else {\n // Trigger onPointerMissed on all elements that have pointer over/out handlers, but not click and weren't hit\n if (isClickEvent && internal.initialHits.includes(eventObject)) {\n pointerMissed(event, internal.interaction.filter(object => !internal.initialHits.includes(object)));\n }\n }\n }\n }\n handleIntersects(hits, event, delta, onIntersect);\n };\n }\n return {\n handlePointer\n };\n}\n\nconst isRenderer = def => !!(def != null && def.render);\nconst context = /* @__PURE__ */React.createContext(null);\nconst createStore = (invalidate, advance) => {\n const rootStore = createWithEqualityFn((set, get) => {\n const position = new THREE.Vector3();\n const defaultTarget = new THREE.Vector3();\n const tempTarget = new THREE.Vector3();\n function getCurrentViewport(camera = get().camera, target = defaultTarget, size = get().size) {\n const {\n width,\n height,\n top,\n left\n } = size;\n const aspect = width / height;\n if (target.isVector3) tempTarget.copy(target);else tempTarget.set(...target);\n const distance = camera.getWorldPosition(position).distanceTo(tempTarget);\n if (isOrthographicCamera(camera)) {\n return {\n width: width / camera.zoom,\n height: height / camera.zoom,\n top,\n left,\n factor: 1,\n distance,\n aspect\n };\n } else {\n const fov = camera.fov * Math.PI / 180; // convert vertical fov to radians\n const h = 2 * Math.tan(fov / 2) * distance; // visible height\n const w = h * (width / height);\n return {\n width: w,\n height: h,\n top,\n left,\n factor: width / w,\n distance,\n aspect\n };\n }\n }\n let performanceTimeout = undefined;\n const setPerformanceCurrent = current => set(state => ({\n performance: {\n ...state.performance,\n current\n }\n }));\n const pointer = new THREE.Vector2();\n const rootState = {\n set,\n get,\n // Mock objects that have to be configured\n gl: null,\n camera: null,\n raycaster: null,\n events: {\n priority: 1,\n enabled: true,\n connected: false\n },\n scene: null,\n xr: null,\n invalidate: (frames = 1) => invalidate(get(), frames),\n advance: (timestamp, runGlobalEffects) => advance(timestamp, runGlobalEffects, get()),\n legacy: false,\n linear: false,\n flat: false,\n controls: null,\n clock: new THREE.Clock(),\n pointer,\n mouse: pointer,\n frameloop: 'always',\n onPointerMissed: undefined,\n performance: {\n current: 1,\n min: 0.5,\n max: 1,\n debounce: 200,\n regress: () => {\n const state = get();\n // Clear timeout\n if (performanceTimeout) clearTimeout(performanceTimeout);\n // Set lower bound performance\n if (state.performance.current !== state.performance.min) setPerformanceCurrent(state.performance.min);\n // Go back to upper bound performance after a while unless something regresses meanwhile\n performanceTimeout = setTimeout(() => setPerformanceCurrent(get().performance.max), state.performance.debounce);\n }\n },\n size: {\n width: 0,\n height: 0,\n top: 0,\n left: 0\n },\n viewport: {\n initialDpr: 0,\n dpr: 0,\n width: 0,\n height: 0,\n top: 0,\n left: 0,\n aspect: 0,\n distance: 0,\n factor: 0,\n getCurrentViewport\n },\n setEvents: events => set(state => ({\n ...state,\n events: {\n ...state.events,\n ...events\n }\n })),\n setSize: (width, height, top = 0, left = 0) => {\n const camera = get().camera;\n const size = {\n width,\n height,\n top,\n left\n };\n set(state => ({\n size,\n viewport: {\n ...state.viewport,\n ...getCurrentViewport(camera, defaultTarget, size)\n }\n }));\n },\n setDpr: dpr => set(state => {\n const resolved = calculateDpr(dpr);\n return {\n viewport: {\n ...state.viewport,\n dpr: resolved,\n initialDpr: state.viewport.initialDpr || resolved\n }\n };\n }),\n setFrameloop: (frameloop = 'always') => {\n const clock = get().clock;\n\n // if frameloop === \"never\" clock.elapsedTime is updated using advance(timestamp)\n clock.stop();\n clock.elapsedTime = 0;\n if (frameloop !== 'never') {\n clock.start();\n clock.elapsedTime = 0;\n }\n set(() => ({\n frameloop\n }));\n },\n previousRoot: undefined,\n internal: {\n // Events\n interaction: [],\n hovered: new Map(),\n subscribers: [],\n initialClick: [0, 0],\n initialHits: [],\n capturedMap: new Map(),\n lastEvent: /*#__PURE__*/React.createRef(),\n // Updates\n active: false,\n frames: 0,\n priority: 0,\n subscribe: (ref, priority, store) => {\n const internal = get().internal;\n // If this subscription was given a priority, it takes rendering into its own hands\n // For that reason we switch off automatic rendering and increase the manual flag\n // As long as this flag is positive there can be no internal rendering at all\n // because there could be multiple render subscriptions\n internal.priority = internal.priority + (priority > 0 ? 1 : 0);\n internal.subscribers.push({\n ref,\n priority,\n store\n });\n // Register subscriber and sort layers from lowest to highest, meaning,\n // highest priority renders last (on top of the other frames)\n internal.subscribers = internal.subscribers.sort((a, b) => a.priority - b.priority);\n return () => {\n const internal = get().internal;\n if (internal != null && internal.subscribers) {\n // Decrease manual flag if this subscription had a priority\n internal.priority = internal.priority - (priority > 0 ? 1 : 0);\n // Remove subscriber from list\n internal.subscribers = internal.subscribers.filter(s => s.ref !== ref);\n }\n };\n }\n }\n };\n return rootState;\n });\n const state = rootStore.getState();\n let oldSize = state.size;\n let oldDpr = state.viewport.dpr;\n let oldCamera = state.camera;\n rootStore.subscribe(() => {\n const {\n camera,\n size,\n viewport,\n gl,\n set\n } = rootStore.getState();\n\n // Resize camera and renderer on changes to size and pixelratio\n if (size.width !== oldSize.width || size.height !== oldSize.height || viewport.dpr !== oldDpr) {\n oldSize = size;\n oldDpr = viewport.dpr;\n // Update camera & renderer\n updateCamera(camera, size);\n if (viewport.dpr > 0) gl.setPixelRatio(viewport.dpr);\n const updateStyle = typeof HTMLCanvasElement !== 'undefined' && gl.domElement instanceof HTMLCanvasElement;\n gl.setSize(size.width, size.height, updateStyle);\n }\n\n // Update viewport once the camera changes\n if (camera !== oldCamera) {\n oldCamera = camera;\n // Update viewport\n set(state => ({\n viewport: {\n ...state.viewport,\n ...state.viewport.getCurrentViewport(camera)\n }\n }));\n }\n });\n\n // Invalidate on any change\n rootStore.subscribe(state => invalidate(state));\n\n // Return root state\n return rootStore;\n};\n\n/**\r\n * Exposes an object's {@link Instance}.\r\n * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#useInstanceHandle\r\n *\r\n * **Note**: this is an escape hatch to react-internal fields. Expect this to change significantly between versions.\r\n */\nfunction useInstanceHandle(ref) {\n const instance = React.useRef(null);\n React.useImperativeHandle(instance, () => ref.current.__r3f, [ref]);\n return instance;\n}\n\n/**\r\n * Returns the R3F Canvas' Zustand store. Useful for [transient updates](https://github.com/pmndrs/zustand#transient-updates-for-often-occurring-state-changes).\r\n * @see https://docs.pmnd.rs/react-three-fiber/api/hooks#usestore\r\n */\nfunction useStore() {\n const store = React.useContext(context);\n if (!store) throw new Error('R3F: Hooks can only be used within the Canvas component!');\n return store;\n}\n\n/**\r\n * Accesses R3F's internal state, containing renderer, canvas, scene, etc.\r\n * @see https://docs.pmnd.rs/react-three-fiber/api/hooks#usethree\r\n */\nfunction useThree(selector = state => state, equalityFn) {\n return useStore()(selector, equalityFn);\n}\n\n/**\r\n * Executes a callback before render in a shared frame loop.\r\n * Can order effects with render priority or manually render with a positive priority.\r\n * @see https://docs.pmnd.rs/react-three-fiber/api/hooks#useframe\r\n */\nfunction useFrame(callback, renderPriority = 0) {\n const store = useStore();\n const subscribe = store.getState().internal.subscribe;\n // Memoize ref\n const ref = useMutableCallback(callback);\n // Subscribe on mount, unsubscribe on unmount\n useIsomorphicLayoutEffect(() => subscribe(ref, renderPriority, store), [renderPriority, subscribe, store]);\n return null;\n}\n\n/**\r\n * Returns a node graph of an object with named nodes & materials.\r\n * @see https://docs.pmnd.rs/react-three-fiber/api/hooks#usegraph\r\n */\nfunction useGraph(object) {\n return React.useMemo(() => buildGraph(object), [object]);\n}\nconst memoizedLoaders = new WeakMap();\nconst isConstructor$1 = value => {\n var _value$prototype;\n return typeof value === 'function' && (value == null ? void 0 : (_value$prototype = value.prototype) == null ? void 0 : _value$prototype.constructor) === value;\n};\nfunction loadingFn(extensions, onProgress) {\n return function (Proto, ...input) {\n let loader;\n\n // Construct and cache loader if constructor was passed\n if (isConstructor$1(Proto)) {\n loader = memoizedLoaders.get(Proto);\n if (!loader) {\n loader = new Proto();\n memoizedLoaders.set(Proto, loader);\n }\n } else {\n loader = Proto;\n }\n\n // Apply loader extensions\n if (extensions) extensions(loader);\n\n // Go through the urls and load them\n return Promise.all(input.map(input => new Promise((res, reject) => loader.load(input, data => {\n if (isObject3D(data == null ? void 0 : data.scene)) Object.assign(data, buildGraph(data.scene));\n res(data);\n }, onProgress, error => reject(new Error(`Could not load ${input}: ${error == null ? void 0 : error.message}`))))));\n };\n}\n\n/**\r\n * Synchronously loads and caches assets with a three loader.\r\n *\r\n * Note: this hook's caller must be wrapped with `React.Suspense`\r\n * @see https://docs.pmnd.rs/react-three-fiber/api/hooks#useloader\r\n */\nfunction useLoader(loader, input, extensions, onProgress) {\n // Use suspense to load async assets\n const keys = Array.isArray(input) ? input : [input];\n const results = suspend(loadingFn(extensions, onProgress), [loader, ...keys], {\n equal: is.equ\n });\n // Return the object(s)\n return Array.isArray(input) ? results : results[0];\n}\n\n/**\r\n * Preloads an asset into cache as a side-effect.\r\n */\nuseLoader.preload = function (loader, input, extensions) {\n const keys = Array.isArray(input) ? input : [input];\n return preload(loadingFn(extensions), [loader, ...keys]);\n};\n\n/**\r\n * Removes a loaded asset from cache.\r\n */\nuseLoader.clear = function (loader, input) {\n const keys = Array.isArray(input) ? input : [input];\n return clear([loader, ...keys]);\n};\n\n/**\n * @license React\n * react-reconciler-constants.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */const t = 1,\n o = 8,\n r = 32,\n e = 2;\n\nvar packageData = {\n\tname: \"@react-three/fiber\",\n\tversion: \"9.6.1\",\n\tdescription: \"A React renderer for Threejs\",\n\tkeywords: [\n\t\t\"react\",\n\t\t\"renderer\",\n\t\t\"fiber\",\n\t\t\"three\",\n\t\t\"threejs\"\n\t],\n\tauthor: \"Paul Henschel (https://github.com/drcmda)\",\n\tlicense: \"MIT\",\n\tmaintainers: [\n\t\t\"Josh Ellis (https://github.com/joshuaellis)\",\n\t\t\"Cody Bennett (https://github.com/codyjasonbennett)\",\n\t\t\"Kris Baumgarter (https://github.com/krispya)\"\n\t],\n\tbugs: {\n\t\turl: \"https://github.com/pmndrs/react-three-fiber/issues\"\n\t},\n\thomepage: \"https://github.com/pmndrs/react-three-fiber#readme\",\n\trepository: {\n\t\ttype: \"git\",\n\t\turl: \"git+https://github.com/pmndrs/react-three-fiber.git\"\n\t},\n\tcollective: {\n\t\ttype: \"opencollective\",\n\t\turl: \"https://opencollective.com/react-three-fiber\"\n\t},\n\tmain: \"dist/react-three-fiber.cjs.js\",\n\tmodule: \"dist/react-three-fiber.esm.js\",\n\ttypes: \"dist/react-three-fiber.cjs.d.ts\",\n\t\"react-native\": \"native/dist/react-three-fiber-native.cjs.js\",\n\tsideEffects: false,\n\tpreconstruct: {\n\t\tentrypoints: [\n\t\t\t\"index.tsx\",\n\t\t\t\"native.tsx\"\n\t\t]\n\t},\n\tscripts: {\n\t\tprebuild: \"cp ../../readme.md readme.md\"\n\t},\n\tdevDependencies: {\n\t\t\"@types/react-reconciler\": \"^0.32.3\",\n\t\t\"react-reconciler\": \"^0.33.0\"\n\t},\n\tdependencies: {\n\t\t\"@babel/runtime\": \"^7.17.8\",\n\t\t\"@types/webxr\": \"*\",\n\t\t\"base64-js\": \"^1.5.1\",\n\t\tbuffer: \"^6.0.3\",\n\t\t\"its-fine\": \"^2.0.0\",\n\t\t\"react-use-measure\": \"^2.1.7\",\n\t\tscheduler: \"^0.27.0\",\n\t\t\"suspend-react\": \"^0.1.3\",\n\t\t\"use-sync-external-store\": \"^1.4.0\",\n\t\tzustand: \"^5.0.3\"\n\t},\n\tpeerDependencies: {\n\t\texpo: \">=43.0\",\n\t\t\"expo-asset\": \">=8.4\",\n\t\t\"expo-file-system\": \">=11.0\",\n\t\t\"expo-gl\": \">=11.0\",\n\t\treact: \">=19 <19.3\",\n\t\t\"react-dom\": \">=19 <19.3\",\n\t\t\"react-native\": \">=0.78\",\n\t\tthree: \">=0.156\"\n\t},\n\tpeerDependenciesMeta: {\n\t\t\"react-dom\": {\n\t\t\toptional: true\n\t\t},\n\t\t\"react-native\": {\n\t\t\toptional: true\n\t\t},\n\t\texpo: {\n\t\t\toptional: true\n\t\t},\n\t\t\"expo-asset\": {\n\t\t\toptional: true\n\t\t},\n\t\t\"expo-file-system\": {\n\t\t\toptional: true\n\t\t},\n\t\t\"expo-gl\": {\n\t\t\toptional: true\n\t\t}\n\t}\n};\n\nfunction Xb(Tt) {\n return Tt && Tt.__esModule && Object.prototype.hasOwnProperty.call(Tt, \"default\") ? Tt.default : Tt;\n}\nvar Rm = {\n exports: {}\n },\n Og = {\n exports: {}\n }; /**\n * @license React\n * react-reconciler.production.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nOg.exports;\n var _b;\nfunction Kb() {\n return _b || (_b = 1, function (Tt) {\n\n Tt.exports = function (m) {\n function Yn(t, r, a, l) {\n return new uc(t, r, a, l);\n }\n function _d() {}\n function F(t) {\n var r = \"https://react.dev/errors/\" + t;\n if (1 < arguments.length) {\n r += \"?args[]=\" + encodeURIComponent(arguments[1]);\n for (var a = 2; a < arguments.length; a++) r += \"&args[]=\" + encodeURIComponent(arguments[a]);\n }\n return \"Minified React error #\" + t + \"; visit \" + r + \" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.\";\n }\n function Rd(t) {\n var r = t,\n a = t;\n if (t.alternate) for (; r.return;) r = r.return;else {\n t = r;\n do r = t, (r.flags & 4098) !== 0 && (a = r.return), t = r.return; while (t);\n }\n return r.tag === 3 ? a : null;\n }\n function du(t) {\n if (Rd(t) !== t) throw Error(F(188));\n }\n function fu(t) {\n var r = t.alternate;\n if (!r) {\n if (r = Rd(t), r === null) throw Error(F(188));\n return r !== t ? null : t;\n }\n for (var a = t, l = r;;) {\n var c = a.return;\n if (c === null) break;\n var d = c.alternate;\n if (d === null) {\n if (l = c.return, l !== null) {\n a = l;\n continue;\n }\n break;\n }\n if (c.child === d.child) {\n for (d = c.child; d;) {\n if (d === a) return du(c), t;\n if (d === l) return du(c), r;\n d = d.sibling;\n }\n throw Error(F(188));\n }\n if (a.return !== l.return) a = c, l = d;else {\n for (var h = !1, y = c.child; y;) {\n if (y === a) {\n h = !0, a = c, l = d;\n break;\n }\n if (y === l) {\n h = !0, l = c, a = d;\n break;\n }\n y = y.sibling;\n }\n if (!h) {\n for (y = d.child; y;) {\n if (y === a) {\n h = !0, a = d, l = c;\n break;\n }\n if (y === l) {\n h = !0, l = d, a = c;\n break;\n }\n y = y.sibling;\n }\n if (!h) throw Error(F(189));\n }\n }\n if (a.alternate !== l) throw Error(F(190));\n }\n if (a.tag !== 3) throw Error(F(188));\n return a.stateNode.current === a ? t : r;\n }\n function pu(t) {\n var r = t.tag;\n if (r === 5 || r === 26 || r === 27 || r === 6) return t;\n for (t = t.child; t !== null;) {\n if (r = pu(t), r !== null) return r;\n t = t.sibling;\n }\n return null;\n }\n function lt(t) {\n var r = t.tag;\n if (r === 5 || r === 26 || r === 27 || r === 6) return t;\n for (t = t.child; t !== null;) {\n if (t.tag !== 4 && (r = lt(t), r !== null)) return r;\n t = t.sibling;\n }\n return null;\n }\n function Fl(t) {\n return t === null || typeof t != \"object\" ? null : (t = Pf && t[Pf] || t[\"@@iterator\"], typeof t == \"function\" ? t : null);\n }\n function hu(t) {\n if (t == null) return null;\n if (typeof t == \"function\") return t.$$typeof === xf ? null : t.displayName || t.name || null;\n if (typeof t == \"string\") return t;\n switch (t) {\n case $a:\n return \"Fragment\";\n case Cs:\n return \"Profiler\";\n case kf:\n return \"StrictMode\";\n case Va:\n return \"Suspense\";\n case Te:\n return \"SuspenseList\";\n case gc:\n return \"Activity\";\n }\n if (typeof t == \"object\") switch (t.$$typeof) {\n case sa:\n return \"Portal\";\n case Io:\n return t.displayName || \"Context\";\n case mc:\n return (t._context.displayName || \"Context\") + \".Consumer\";\n case Zi:\n var r = t.render;\n return t = t.displayName, t || (t = r.displayName || r.name || \"\", t = t !== \"\" ? \"ForwardRef(\" + t + \")\" : \"ForwardRef\"), t;\n case wf:\n return r = t.displayName || null, r !== null ? r : hu(t.type) || \"Memo\";\n case ua:\n r = t._payload, t = t._init;\n try {\n return hu(t(r));\n } catch {}\n }\n return null;\n }\n function Ir(t) {\n return {\n current: t\n };\n }\n function D(t) {\n 0 > tl || (t.current = Hs[tl], Hs[tl] = null, tl--);\n }\n function Ce(t, r) {\n tl++, Hs[tl] = t.current, t.current = r;\n }\n function Em(t) {\n return t >>>= 0, t === 0 ? 32 : 31 - (Dh(t) / Wh | 0) | 0;\n }\n function Zo(t) {\n var r = t & 42;\n if (r !== 0) return r;\n switch (t & -t) {\n case 1:\n return 1;\n case 2:\n return 2;\n case 4:\n return 4;\n case 8:\n return 8;\n case 16:\n return 16;\n case 32:\n return 32;\n case 64:\n return 64;\n case 128:\n return 128;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n return t & 261888;\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return t & 3932160;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return t & 62914560;\n case 67108864:\n return 67108864;\n case 134217728:\n return 134217728;\n case 268435456:\n return 268435456;\n case 536870912:\n return 536870912;\n case 1073741824:\n return 0;\n default:\n return t;\n }\n }\n function Lr(t, r, a) {\n var l = t.pendingLanes;\n if (l === 0) return 0;\n var c = 0,\n d = t.suspendedLanes,\n h = t.pingedLanes;\n t = t.warmLanes;\n var y = l & 134217727;\n return y !== 0 ? (l = y & ~d, l !== 0 ? c = Zo(l) : (h &= y, h !== 0 ? c = Zo(h) : a || (a = y & ~t, a !== 0 && (c = Zo(a))))) : (y = l & ~d, y !== 0 ? c = Zo(y) : h !== 0 ? c = Zo(h) : a || (a = l & ~t, a !== 0 && (c = Zo(a)))), c === 0 ? 0 : r !== 0 && r !== c && (r & d) === 0 && (d = c & -c, a = r & -r, d >= a || d === 32 && (a & 4194048) !== 0) ? r : c;\n }\n function Pi(t, r) {\n return (t.pendingLanes & ~(t.suspendedLanes & ~t.pingedLanes) & r) === 0;\n }\n function Tp(t, r) {\n switch (t) {\n case 1:\n case 2:\n case 4:\n case 8:\n case 64:\n return r + 250;\n case 16:\n case 32:\n case 128:\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return r + 5e3;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return -1;\n case 67108864:\n case 134217728:\n case 268435456:\n case 536870912:\n case 1073741824:\n return -1;\n default:\n return -1;\n }\n }\n function Ed() {\n var t = rl;\n return rl <<= 1, (rl & 62914560) === 0 && (rl = 4194304), t;\n }\n function mu(t) {\n for (var r = [], a = 0; 31 > a; a++) r.push(t);\n return r;\n }\n function xi(t, r) {\n t.pendingLanes |= r, r !== 268435456 && (t.suspendedLanes = 0, t.pingedLanes = 0, t.warmLanes = 0);\n }\n function _p(t, r, a, l, c, d) {\n var h = t.pendingLanes;\n t.pendingLanes = a, t.suspendedLanes = 0, t.pingedLanes = 0, t.warmLanes = 0, t.expiredLanes &= a, t.entangledLanes &= a, t.errorRecoveryDisabledLanes &= a, t.shellSuspendCounter = 0;\n var y = t.entanglements,\n R = t.expirationTimes,\n L = t.hiddenUpdates;\n for (a = h & ~a; 0 < a;) {\n var j = 31 - vt(a),\n A = 1 << j;\n y[j] = 0, R[j] = -1;\n var W = L[j];\n if (W !== null) for (L[j] = null, j = 0; j < W.length; j++) {\n var V = W[j];\n V !== null && (V.lane &= -536870913);\n }\n a &= ~A;\n }\n l !== 0 && Yo(t, l, 0), d !== 0 && c === 0 && t.tag !== 0 && (t.suspendedLanes |= d & ~(h & ~r));\n }\n function Yo(t, r, a) {\n t.pendingLanes |= r, t.suspendedLanes &= ~r;\n var l = 31 - vt(r);\n t.entangledLanes |= r, t.entanglements[l] = t.entanglements[l] | 1073741824 | a & 261930;\n }\n function $e(t, r) {\n var a = t.entangledLanes |= r;\n for (t = t.entanglements; a;) {\n var l = 31 - vt(a),\n c = 1 << l;\n c & r | t[l] & r && (t[l] |= r), a &= ~c;\n }\n }\n function G(t, r) {\n var a = r & -r;\n return a = (a & 42) !== 0 ? 1 : st(a), (a & (t.suspendedLanes | r)) !== 0 ? 0 : a;\n }\n function st(t) {\n switch (t) {\n case 2:\n t = 1;\n break;\n case 8:\n t = 4;\n break;\n case 32:\n t = 16;\n break;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n t = 128;\n break;\n case 268435456:\n t = 134217728;\n break;\n default:\n t = 0;\n }\n return t;\n }\n function Ze(t) {\n return t &= -t, 2 < t ? 8 < t ? (t & 134217727) !== 0 ? 32 : 268435456 : 8 : 2;\n }\n function pe(t) {\n if (typeof Lc == \"function\" && Uf(t), on && typeof on.setStrictMode == \"function\") try {\n on.setStrictMode(ei, t);\n } catch {}\n }\n function Im(t, r) {\n return t === r && (t !== 0 || 1 / t === 1 / r) || t !== t && r !== r;\n }\n function _t(t) {\n if (al === void 0) try {\n throw Error();\n } catch (a) {\n var r = a.stack.trim().match(/\\n( *(at )?)/);\n al = r && r[1] || \"\", kt = -1 < a.stack.indexOf(`\n at`) ? \" (<anonymous>)\" : -1 < a.stack.indexOf(\"@\") ? \"@unknown:0:0\" : \"\";\n }\n return `\n` + al + t + kt;\n }\n function zi(t, r) {\n if (!t || Ds) return \"\";\n Ds = !0;\n var a = Error.prepareStackTrace;\n Error.prepareStackTrace = void 0;\n try {\n var l = {\n DetermineComponentFrameRoot: function () {\n try {\n if (r) {\n var A = function () {\n throw Error();\n };\n if (Object.defineProperty(A.prototype, \"props\", {\n set: function () {\n throw Error();\n }\n }), typeof Reflect == \"object\" && Reflect.construct) {\n try {\n Reflect.construct(A, []);\n } catch (V) {\n var W = V;\n }\n Reflect.construct(t, [], A);\n } else {\n try {\n A.call();\n } catch (V) {\n W = V;\n }\n t.call(A.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (V) {\n W = V;\n }\n (A = t()) && typeof A.catch == \"function\" && A.catch(function () {});\n }\n } catch (V) {\n if (V && W && typeof V.stack == \"string\") return [V.stack, W.stack];\n }\n return [null, null];\n }\n };\n l.DetermineComponentFrameRoot.displayName = \"DetermineComponentFrameRoot\";\n var c = Object.getOwnPropertyDescriptor(l.DetermineComponentFrameRoot, \"name\");\n c && c.configurable && Object.defineProperty(l.DetermineComponentFrameRoot, \"name\", {\n value: \"DetermineComponentFrameRoot\"\n });\n var d = l.DetermineComponentFrameRoot(),\n h = d[0],\n y = d[1];\n if (h && y) {\n var R = h.split(`\n`),\n L = y.split(`\n`);\n for (c = l = 0; l < R.length && !R[l].includes(\"DetermineComponentFrameRoot\");) l++;\n for (; c < L.length && !L[c].includes(\"DetermineComponentFrameRoot\");) c++;\n if (l === R.length || c === L.length) for (l = R.length - 1, c = L.length - 1; 1 <= l && 0 <= c && R[l] !== L[c];) c--;\n for (; 1 <= l && 0 <= c; l--, c--) if (R[l] !== L[c]) {\n if (l !== 1 || c !== 1) do if (l--, c--, 0 > c || R[l] !== L[c]) {\n var j = `\n` + R[l].replace(\" at new \", \" at \");\n return t.displayName && j.includes(\"<anonymous>\") && (j = j.replace(\"<anonymous>\", t.displayName)), j;\n } while (1 <= l && 0 <= c);\n break;\n }\n }\n } finally {\n Ds = !1, Error.prepareStackTrace = a;\n }\n return (a = t ? t.displayName || t.name : \"\") ? _t(a) : \"\";\n }\n function Hl(t, r) {\n switch (t.tag) {\n case 26:\n case 27:\n case 5:\n return _t(t.type);\n case 16:\n return _t(\"Lazy\");\n case 13:\n return t.child !== r && r !== null ? _t(\"Suspense Fallback\") : _t(\"Suspense\");\n case 19:\n return _t(\"SuspenseList\");\n case 0:\n case 15:\n return zi(t.type, !1);\n case 11:\n return zi(t.type.render, !1);\n case 1:\n return zi(t.type, !0);\n case 31:\n return _t(\"Activity\");\n default:\n return \"\";\n }\n }\n function Rp(t) {\n try {\n var r = \"\",\n a = null;\n do r += Hl(t, a), a = t, t = t.return; while (t);\n return r;\n } catch (l) {\n return `\nError generating stack: ` + l.message + `\n` + l.stack;\n }\n }\n function ut(t, r) {\n if (typeof t == \"object\" && t !== null) {\n var a = Bh.get(t);\n return a !== void 0 ? a : (r = {\n value: t,\n source: r,\n stack: Rp(r)\n }, Bh.set(t, r), r);\n }\n return {\n value: t,\n source: r,\n stack: Rp(r)\n };\n }\n function or(t, r) {\n ni[il++] = x, ni[il++] = fn, fn = t, x = r;\n }\n function Ci(t, r, a) {\n Jt[Zt++] = ot, Jt[Zt++] = Zr, Jt[Zt++] = jo, jo = t;\n var l = ot;\n t = Zr;\n var c = 32 - vt(l) - 1;\n l &= ~(1 << c), a += 1;\n var d = 32 - vt(r) + c;\n if (30 < d) {\n var h = c - c % 5;\n d = (l & (1 << h) - 1).toString(32), l >>= h, c -= h, ot = 1 << 32 - vt(r) + c | a << c | l, Zr = d + t;\n } else ot = 1 << d | a << c | l, Zr = t;\n }\n function Id(t) {\n t.return !== null && (or(t, 1), Ci(t, 1, 0));\n }\n function gu(t) {\n for (; t === fn;) fn = ni[--il], ni[il] = null, x = ni[--il], ni[il] = null;\n for (; t === jo;) jo = Jt[--Zt], Jt[Zt] = null, Zr = Jt[--Zt], Jt[Zt] = null, ot = Jt[--Zt], Jt[Zt] = null;\n }\n function Ld(t, r) {\n Jt[Zt++] = ot, Jt[Zt++] = Zr, Jt[Zt++] = jo, ot = r.id, Zr = r.overflow, jo = t;\n }\n function Al(t, r) {\n Ce(pa, r), Ce(Ws, t), Ce(Dn, null), t = Hm(r), D(Dn), Ce(Dn, t);\n }\n function Xo() {\n D(Dn), D(Ws), D(pa);\n }\n function yu(t) {\n t.memoizedState !== null && Ce(Fc, t);\n var r = Dn.current,\n a = Xp(r, t.type);\n r !== a && (Ce(Ws, t), Ce(Dn, a));\n }\n function jl(t) {\n Ws.current === t && (D(Dn), D(Ws)), Fc.current === t && (D(Fc), qt ? da._currentValue = rt : da._currentValue2 = rt);\n }\n function ar(t) {\n var r = Error(F(418, 1 < arguments.length && arguments[1] !== void 0 && arguments[1] ? \"text\" : \"HTML\", \"\"));\n throw ct(ut(r, t)), Of;\n }\n function Ep(t, r) {\n if (!Hn) throw Error(F(175));\n Ki(t.stateNode, t.type, t.memoizedProps, r, t) || ar(t, !0);\n }\n function De(t) {\n for (bn = t.return; bn;) switch (bn.tag) {\n case 5:\n case 31:\n case 13:\n Yt = !1;\n return;\n case 27:\n case 3:\n Yt = !0;\n return;\n default:\n bn = bn.return;\n }\n }\n function Ti(t) {\n if (!Hn || t !== bn) return !1;\n if (!ue) return De(t), ue = !0, !1;\n var r = t.tag;\n if (dn ? r !== 3 && r !== 27 && (r !== 5 || Nh(t.type) && !Rs(t.type, t.memoizedProps)) && Ue && ar(t) : r !== 3 && (r !== 5 || Nh(t.type) && !Rs(t.type, t.memoizedProps)) && Ue && ar(t), De(t), r === 13) {\n if (!Hn) throw Error(F(316));\n if (t = t.memoizedState, t = t !== null ? t.dehydrated : null, !t) throw Error(F(317));\n Ue = Th(t);\n } else if (r === 31) {\n if (t = t.memoizedState, t = t !== null ? t.dehydrated : null, !t) throw Error(F(317));\n Ue = Ch(t);\n } else Ue = dn && r === 27 ? kh(t.type, Ue) : bn ? Nf(t.stateNode) : null;\n return !0;\n }\n function _a() {\n Hn && (Ue = bn = null, ue = !1);\n }\n function Dl() {\n var t = Do;\n return t !== null && (xt === null ? xt = t : xt.push.apply(xt, t), Do = null), t;\n }\n function ct(t) {\n Do === null ? Do = [t] : Do.push(t);\n }\n function fo(t, r, a) {\n qt ? (Ce(Yr, r._currentValue), r._currentValue = a) : (Ce(Yr, r._currentValue2), r._currentValue2 = a);\n }\n function En(t) {\n var r = Yr.current;\n qt ? t._currentValue = r : t._currentValue2 = r, D(Yr);\n }\n function Ot(t, r, a) {\n for (; t !== null;) {\n var l = t.alternate;\n if ((t.childLanes & r) !== r ? (t.childLanes |= r, l !== null && (l.childLanes |= r)) : l !== null && (l.childLanes & r) !== r && (l.childLanes |= r), t === a) break;\n t = t.return;\n }\n }\n function _i(t, r, a, l) {\n var c = t.child;\n for (c !== null && (c.return = t); c !== null;) {\n var d = c.dependencies;\n if (d !== null) {\n var h = c.child;\n d = d.firstContext;\n e: for (; d !== null;) {\n var y = d;\n d = c;\n for (var R = 0; R < r.length; R++) if (y.context === r[R]) {\n d.lanes |= a, y = d.alternate, y !== null && (y.lanes |= a), Ot(d.return, a, t), l || (h = null);\n break e;\n }\n d = y.next;\n }\n } else if (c.tag === 18) {\n if (h = c.return, h === null) throw Error(F(341));\n h.lanes |= a, d = h.alternate, d !== null && (d.lanes |= a), Ot(h, a, t), h = null;\n } else h = c.child;\n if (h !== null) h.return = c;else for (h = c; h !== null;) {\n if (h === t) {\n h = null;\n break;\n }\n if (c = h.sibling, c !== null) {\n c.return = h.return, h = c;\n break;\n }\n h = h.return;\n }\n c = h;\n }\n }\n function po(t, r, a, l) {\n t = null;\n for (var c = r, d = !1; c !== null;) {\n if (!d) {\n if ((c.flags & 524288) !== 0) d = !0;else if ((c.flags & 262144) !== 0) break;\n }\n if (c.tag === 10) {\n var h = c.alternate;\n if (h === null) throw Error(F(387));\n if (h = h.memoizedProps, h !== null) {\n var y = c.type;\n jn(c.pendingProps.value, h.value) || (t !== null ? t.push(y) : t = [y]);\n }\n } else if (c === Fc.current) {\n if (h = c.alternate, h === null) throw Error(F(387));\n h.memoizedState.memoizedState !== c.memoizedState.memoizedState && (t !== null ? t.push(da) : t = [da]);\n }\n c = c.return;\n }\n t !== null && _i(r, t, a, l), r.flags |= 262144;\n }\n function Ri(t) {\n for (t = t.firstContext; t !== null;) {\n var r = t.context;\n if (!jn(qt ? r._currentValue : r._currentValue2, t.memoizedValue)) return !0;\n t = t.next;\n }\n return !1;\n }\n function Un(t) {\n at = t, Be = null, t = t.dependencies, t !== null && (t.firstContext = null);\n }\n function In(t) {\n return Nd(at, t);\n }\n function Wl(t, r) {\n return at === null && Un(t), Nd(t, r);\n }\n function Nd(t, r) {\n var a = qt ? r._currentValue : r._currentValue2;\n if (r = {\n context: r,\n memoizedValue: a,\n next: null\n }, Be === null) {\n if (t === null) throw Error(F(308));\n Be = r, t.dependencies = {\n lanes: 0,\n firstContext: r\n }, t.flags |= 524288;\n } else Be = Be.next = r;\n return a;\n }\n function Fd() {\n return {\n controller: new Xr(),\n data: new Map(),\n refCount: 0\n };\n }\n function Ra(t) {\n t.refCount--, t.refCount === 0 && qn(Gm, function () {\n t.controller.abort();\n });\n }\n function bu() {}\n function ir(t) {\n t !== wt && t.next === null && (wt === null ? an = wt = t : wt = wt.next = t), ll = !0, Mf || (Mf = !0, Lm());\n }\n function Ea(t, r) {\n if (!ti && ll) {\n ti = !0;\n do for (var a = !1, l = an; l !== null;) {\n if (!r) if (t !== 0) {\n var c = l.pendingLanes;\n if (c === 0) var d = 0;else {\n var h = l.suspendedLanes,\n y = l.pingedLanes;\n d = (1 << 31 - vt(42 | t) + 1) - 1, d &= c & ~(h & ~y), d = d & 201326741 ? d & 201326741 | 1 : d ? d | 2 : 0;\n }\n d !== 0 && (a = !0, Su(l, d));\n } else d = he, d = Lr(l, l === Ne ? d : 0, l.cancelPendingCommit !== null || l.timeoutHandle !== Lo), (d & 3) === 0 || Pi(l, d) || (a = !0, Su(l, d));\n l = l.next;\n } while (a);\n ti = !1;\n }\n }\n function Ip() {\n Lp();\n }\n function Lp() {\n ll = Mf = !1;\n var t = 0;\n Pr !== 0 && _f() && (t = Pr);\n for (var r = ze(), a = null, l = an; l !== null;) {\n var c = l.next,\n d = vu(l, r);\n d === 0 ? (l.next = null, a === null ? an = c : a.next = c, c === null && (wt = a)) : (a = l, (t !== 0 || (d & 3) !== 0) && (ll = !0)), l = c;\n }\n Re !== 0 && Re !== 5 || Ea(t, !1), Pr !== 0 && (Pr = 0);\n }\n function vu(t, r) {\n for (var a = t.suspendedLanes, l = t.pingedLanes, c = t.expirationTimes, d = t.pendingLanes & -62914561; 0 < d;) {\n var h = 31 - vt(d),\n y = 1 << h,\n R = c[h];\n R === -1 ? ((y & a) === 0 || (y & l) !== 0) && (c[h] = Tp(y, r)) : R <= r && (t.expiredLanes |= y), d &= ~y;\n }\n if (r = Ne, a = he, a = Lr(t, t === r ? a : 0, t.cancelPendingCommit !== null || t.timeoutHandle !== Lo), l = t.callbackNode, a === 0 || t === r && (_e === 2 || _e === 9) || t.cancelPendingCommit !== null) return l !== null && l !== null && le(l), t.callbackNode = null, t.callbackPriority = 0;\n if ((a & 3) === 0 || Pi(t, a)) {\n if (r = a & -a, r === t.callbackPriority) return r;\n switch (l !== null && le(l), Ze(a)) {\n case 2:\n case 8:\n a = Ho;\n break;\n case 32:\n a = Ao;\n break;\n case 268435456:\n a = ol;\n break;\n default:\n a = Ao;\n }\n return l = dt.bind(null, t), a = Ic(a, l), t.callbackPriority = r, t.callbackNode = a, r;\n }\n return l !== null && l !== null && le(l), t.callbackPriority = 2, t.callbackNode = null, 2;\n }\n function dt(t, r) {\n if (Re !== 0 && Re !== 5) return t.callbackNode = null, t.callbackPriority = 0, null;\n var a = t.callbackNode;\n if (rn() && t.callbackNode !== a) return null;\n var l = he;\n return l = Lr(t, t === Ne ? l : 0, t.cancelPendingCommit !== null || t.timeoutHandle !== Lo), l === 0 ? null : (uf(t, l, r), vu(t, ze()), t.callbackNode != null && t.callbackNode === a ? dt.bind(null, t) : null);\n }\n function Su(t, r) {\n if (rn()) return null;\n uf(t, r, !0);\n }\n function Lm() {\n ih ? Gr(function () {\n (ce & 6) !== 0 ? Ic(Uh, Ip) : Lp();\n }) : Ic(Uh, Ip);\n }\n function ku() {\n if (Pr === 0) {\n var t = sl;\n t === 0 && (t = As, As <<= 1, (As & 261888) === 0 && (As = 256)), Pr = t;\n }\n return Pr;\n }\n function Np(t, r) {\n if (Us === null) {\n var a = Us = [];\n Qf = 0, sl = ku(), ul = {\n status: \"pending\",\n value: void 0,\n then: function (l) {\n a.push(l);\n }\n };\n }\n return Qf++, r.then(ft, ft), r;\n }\n function ft() {\n if (--Qf === 0 && Us !== null) {\n ul !== null && (ul.status = \"fulfilled\");\n var t = Us;\n Us = null, sl = 0, ul = null;\n for (var r = 0; r < t.length; r++) (0, t[r])();\n }\n }\n function ho(t, r) {\n var a = [],\n l = {\n status: \"pending\",\n value: null,\n reason: null,\n then: function (c) {\n a.push(c);\n }\n };\n return t.then(function () {\n l.status = \"fulfilled\", l.value = r;\n for (var c = 0; c < a.length; c++) (0, a[c])(r);\n }, function (c) {\n for (l.status = \"rejected\", l.reason = c, c = 0; c < a.length; c++) (0, a[c])(void 0);\n }), l;\n }\n function wu() {\n var t = ha.current;\n return t !== null ? t : Ne.pooledCache;\n }\n function Ei(t, r) {\n r === null ? Ce(ha, ha.current) : Ce(ha, r.pool);\n }\n function Pu() {\n var t = wu();\n return t === null ? null : {\n parent: qt ? qe._currentValue : qe._currentValue2,\n pool: t\n };\n }\n function Ul(t, r) {\n if (jn(t, r)) return !0;\n if (typeof t != \"object\" || t === null || typeof r != \"object\" || r === null) return !1;\n var a = Object.keys(t),\n l = Object.keys(r);\n if (a.length !== l.length) return !1;\n for (l = 0; l < a.length; l++) {\n var c = a[l];\n if (!Bf.call(r, c) || !jn(t[c], r[c])) return !1;\n }\n return !0;\n }\n function Hd(t) {\n return t = t.status, t === \"fulfilled\" || t === \"rejected\";\n }\n function mo(t, r, a) {\n switch (a = t[a], a === void 0 ? t.push(r) : a !== r && (r.then(bu, bu), r = a), r.status) {\n case \"fulfilled\":\n return r.value;\n case \"rejected\":\n throw t = r.reason, Ia(t), t;\n default:\n if (typeof r.status == \"string\") r.then(bu, bu);else {\n if (t = Ne, t !== null && 100 < t.shellSuspendCounter) throw Error(F(482));\n t = r, t.status = \"pending\", t.then(function (l) {\n if (r.status === \"pending\") {\n var c = r;\n c.status = \"fulfilled\", c.value = l;\n }\n }, function (l) {\n if (r.status === \"pending\") {\n var c = r;\n c.status = \"rejected\", c.reason = l;\n }\n });\n }\n switch (r.status) {\n case \"fulfilled\":\n return r.value;\n case \"rejected\":\n throw t = r.reason, Ia(t), t;\n }\n throw Xt = r, cl;\n }\n }\n function pt(t) {\n try {\n var r = t._init;\n return r(t._payload);\n } catch (a) {\n throw a !== null && typeof a == \"object\" && typeof a.then == \"function\" ? (Xt = a, cl) : a;\n }\n }\n function Bl() {\n if (Xt === null) throw Error(F(459));\n var t = Xt;\n return Xt = null, t;\n }\n function Ia(t) {\n if (t === cl || t === jc) throw Error(F(483));\n }\n function Rt(t) {\n var r = Bs;\n return Bs += 1, Kt === null && (Kt = []), mo(Kt, t, r);\n }\n function La(t, r) {\n r = r.props.ref, t.ref = r !== void 0 ? r : null;\n }\n function Na(t, r) {\n throw r.$$typeof === hc ? Error(F(525)) : (t = Object.prototype.toString.call(r), Error(F(31, t === \"[object Object]\" ? \"object with keys {\" + Object.keys(r).join(\", \") + \"}\" : t)));\n }\n function Ad(t) {\n function r(P, w) {\n if (t) {\n var C = P.deletions;\n C === null ? (P.deletions = [w], P.flags |= 16) : C.push(w);\n }\n }\n function a(P, w) {\n if (!t) return null;\n for (; w !== null;) r(P, w), w = w.sibling;\n return null;\n }\n function l(P) {\n for (var w = new Map(); P !== null;) P.key !== null ? w.set(P.key, P) : w.set(P.index, P), P = P.sibling;\n return w;\n }\n function c(P, w) {\n return P = Qr(P, w), P.index = 0, P.sibling = null, P;\n }\n function d(P, w, C) {\n return P.index = C, t ? (C = P.alternate, C !== null ? (C = C.index, C < w ? (P.flags |= 67108866, w) : C) : (P.flags |= 67108866, w)) : (P.flags |= 1048576, w);\n }\n function h(P) {\n return t && P.alternate === null && (P.flags |= 67108866), P;\n }\n function y(P, w, C, H) {\n return w === null || w.tag !== 6 ? (w = Ps(C, P.mode, H), w.return = P, w) : (w = c(w, C), w.return = P, w);\n }\n function R(P, w, C, H) {\n var Q = C.type;\n return Q === $a ? j(P, w, C.props.children, H, C.key) : w !== null && (w.elementType === Q || typeof Q == \"object\" && Q !== null && Q.$$typeof === ua && pt(Q) === w.type) ? (w = c(w, C.props), La(w, C), w.return = P, w) : (w = ws(C.type, C.key, C.props, null, P.mode, H), La(w, C), w.return = P, w);\n }\n function L(P, w, C, H) {\n return w === null || w.tag !== 4 || w.stateNode.containerInfo !== C.containerInfo || w.stateNode.implementation !== C.implementation ? (w = dc(C, P.mode, H), w.return = P, w) : (w = c(w, C.children || []), w.return = P, w);\n }\n function j(P, w, C, H, Q) {\n return w === null || w.tag !== 7 ? (w = Eo(C, P.mode, H, Q), w.return = P, w) : (w = c(w, C), w.return = P, w);\n }\n function A(P, w, C) {\n if (typeof w == \"string\" && w !== \"\" || typeof w == \"number\" || typeof w == \"bigint\") return w = Ps(\"\" + w, P.mode, C), w.return = P, w;\n if (typeof w == \"object\" && w !== null) {\n switch (w.$$typeof) {\n case zs:\n return C = ws(w.type, w.key, w.props, null, P.mode, C), La(C, w), C.return = P, C;\n case sa:\n return w = dc(w, P.mode, C), w.return = P, w;\n case ua:\n return w = pt(w), A(P, w, C);\n }\n if (ca(w) || Fl(w)) return w = Eo(w, P.mode, C, null), w.return = P, w;\n if (typeof w.then == \"function\") return A(P, Rt(w), C);\n if (w.$$typeof === Io) return A(P, Wl(P, w), C);\n Na(P, w);\n }\n return null;\n }\n function W(P, w, C, H) {\n var Q = w !== null ? w.key : null;\n if (typeof C == \"string\" && C !== \"\" || typeof C == \"number\" || typeof C == \"bigint\") return Q !== null ? null : y(P, w, \"\" + C, H);\n if (typeof C == \"object\" && C !== null) {\n switch (C.$$typeof) {\n case zs:\n return C.key === Q ? R(P, w, C, H) : null;\n case sa:\n return C.key === Q ? L(P, w, C, H) : null;\n case ua:\n return C = pt(C), W(P, w, C, H);\n }\n if (ca(C) || Fl(C)) return Q !== null ? null : j(P, w, C, H, null);\n if (typeof C.then == \"function\") return W(P, w, Rt(C), H);\n if (C.$$typeof === Io) return W(P, w, Wl(P, C), H);\n Na(P, C);\n }\n return null;\n }\n function V(P, w, C, H, Q) {\n if (typeof H == \"string\" && H !== \"\" || typeof H == \"number\" || typeof H == \"bigint\") return P = P.get(C) || null, y(w, P, \"\" + H, Q);\n if (typeof H == \"object\" && H !== null) {\n switch (H.$$typeof) {\n case zs:\n return P = P.get(H.key === null ? C : H.key) || null, R(w, P, H, Q);\n case sa:\n return P = P.get(H.key === null ? C : H.key) || null, L(w, P, H, Q);\n case ua:\n return H = pt(H), V(P, w, C, H, Q);\n }\n if (ca(H) || Fl(H)) return P = P.get(C) || null, j(w, P, H, Q, null);\n if (typeof H.then == \"function\") return V(P, w, C, Rt(H), Q);\n if (H.$$typeof === Io) return V(P, w, C, Wl(w, H), Q);\n Na(w, H);\n }\n return null;\n }\n function Oe(P, w, C, H) {\n for (var Q = null, Ge = null, J = w, Pe = w = 0, me = null; J !== null && Pe < C.length; Pe++) {\n J.index > Pe ? (me = J, J = null) : me = J.sibling;\n var be = W(P, J, C[Pe], H);\n if (be === null) {\n J === null && (J = me);\n break;\n }\n t && J && be.alternate === null && r(P, J), w = d(be, w, Pe), Ge === null ? Q = be : Ge.sibling = be, Ge = be, J = me;\n }\n if (Pe === C.length) return a(P, J), ue && or(P, Pe), Q;\n if (J === null) {\n for (; Pe < C.length; Pe++) J = A(P, C[Pe], H), J !== null && (w = d(J, w, Pe), Ge === null ? Q = J : Ge.sibling = J, Ge = J);\n return ue && or(P, Pe), Q;\n }\n for (J = l(J); Pe < C.length; Pe++) me = V(J, P, Pe, C[Pe], H), me !== null && (t && me.alternate !== null && J.delete(me.key === null ? Pe : me.key), w = d(me, w, Pe), Ge === null ? Q = me : Ge.sibling = me, Ge = me);\n return t && J.forEach(function (Oo) {\n return r(P, Oo);\n }), ue && or(P, Pe), Q;\n }\n function vn(P, w, C, H) {\n if (C == null) throw Error(F(151));\n for (var Q = null, Ge = null, J = w, Pe = w = 0, me = null, be = C.next(); J !== null && !be.done; Pe++, be = C.next()) {\n J.index > Pe ? (me = J, J = null) : me = J.sibling;\n var Oo = W(P, J, be.value, H);\n if (Oo === null) {\n J === null && (J = me);\n break;\n }\n t && J && Oo.alternate === null && r(P, J), w = d(Oo, w, Pe), Ge === null ? Q = Oo : Ge.sibling = Oo, Ge = Oo, J = me;\n }\n if (be.done) return a(P, J), ue && or(P, Pe), Q;\n if (J === null) {\n for (; !be.done; Pe++, be = C.next()) be = A(P, be.value, H), be !== null && (w = d(be, w, Pe), Ge === null ? Q = be : Ge.sibling = be, Ge = be);\n return ue && or(P, Pe), Q;\n }\n for (J = l(J); !be.done; Pe++, be = C.next()) be = V(J, P, Pe, be.value, H), be !== null && (t && be.alternate !== null && J.delete(be.key === null ? Pe : be.key), w = d(be, w, Pe), Ge === null ? Q = be : Ge.sibling = be, Ge = be);\n return t && J.forEach(function (qs) {\n return r(P, qs);\n }), ue && or(P, Pe), Q;\n }\n function li(P, w, C, H) {\n if (typeof C == \"object\" && C !== null && C.type === $a && C.key === null && (C = C.props.children), typeof C == \"object\" && C !== null) {\n switch (C.$$typeof) {\n case zs:\n e: {\n for (var Q = C.key; w !== null;) {\n if (w.key === Q) {\n if (Q = C.type, Q === $a) {\n if (w.tag === 7) {\n a(P, w.sibling), H = c(w, C.props.children), H.return = P, P = H;\n break e;\n }\n } else if (w.elementType === Q || typeof Q == \"object\" && Q !== null && Q.$$typeof === ua && pt(Q) === w.type) {\n a(P, w.sibling), H = c(w, C.props), La(H, C), H.return = P, P = H;\n break e;\n }\n a(P, w);\n break;\n } else r(P, w);\n w = w.sibling;\n }\n C.type === $a ? (H = Eo(C.props.children, P.mode, H, C.key), H.return = P, P = H) : (H = ws(C.type, C.key, C.props, null, P.mode, H), La(H, C), H.return = P, P = H);\n }\n return h(P);\n case sa:\n e: {\n for (Q = C.key; w !== null;) {\n if (w.key === Q) {\n if (w.tag === 4 && w.stateNode.containerInfo === C.containerInfo && w.stateNode.implementation === C.implementation) {\n a(P, w.sibling), H = c(w, C.children || []), H.return = P, P = H;\n break e;\n } else {\n a(P, w);\n break;\n }\n } else r(P, w);\n w = w.sibling;\n }\n H = dc(C, P.mode, H), H.return = P, P = H;\n }\n return h(P);\n case ua:\n return C = pt(C), li(P, w, C, H);\n }\n if (ca(C)) return Oe(P, w, C, H);\n if (Fl(C)) {\n if (Q = Fl(C), typeof Q != \"function\") throw Error(F(150));\n return C = Q.call(C), vn(P, w, C, H);\n }\n if (typeof C.then == \"function\") return li(P, w, Rt(C), H);\n if (C.$$typeof === Io) return li(P, w, Wl(P, C), H);\n Na(P, C);\n }\n return typeof C == \"string\" && C !== \"\" || typeof C == \"number\" || typeof C == \"bigint\" ? (C = \"\" + C, w !== null && w.tag === 6 ? (a(P, w.sibling), H = c(w, C), H.return = P, P = H) : (a(P, w), H = Ps(C, P.mode, H), H.return = P, P = H), h(P)) : a(P, w);\n }\n return function (P, w, C, H) {\n try {\n Bs = 0;\n var Q = li(P, w, C, H);\n return Kt = null, Q;\n } catch (J) {\n if (J === cl || J === jc) throw J;\n var Ge = Yn(29, J, null, P.mode);\n return Ge.lanes = H, Ge.return = P, Ge;\n } finally {}\n };\n }\n function Bn() {\n for (var t = xr, r = $f = xr = 0; r < t;) {\n var a = er[r];\n er[r++] = null;\n var l = er[r];\n er[r++] = null;\n var c = er[r];\n er[r++] = null;\n var d = er[r];\n if (er[r++] = null, l !== null && c !== null) {\n var h = l.pending;\n h === null ? c.next = c : (c.next = h.next, h.next = c), l.pending = c;\n }\n d !== 0 && Ii(a, c, d);\n }\n }\n function go(t, r, a, l) {\n er[xr++] = t, er[xr++] = r, er[xr++] = a, er[xr++] = l, $f |= l, t.lanes |= l, t = t.alternate, t !== null && (t.lanes |= l);\n }\n function yo(t, r, a, l) {\n return go(t, r, a, l), Fa(t);\n }\n function Ko(t, r) {\n return go(t, null, null, r), Fa(t);\n }\n function Ii(t, r, a) {\n t.lanes |= a;\n var l = t.alternate;\n l !== null && (l.lanes |= a);\n for (var c = !1, d = t.return; d !== null;) d.childLanes |= a, l = d.alternate, l !== null && (l.childLanes |= a), d.tag === 22 && (t = d.stateNode, t === null || t._visibility & 1 || (c = !0)), t = d, d = d.return;\n return t.tag === 3 ? (d = t.stateNode, c && r !== null && (c = 31 - vt(a), t = d.hiddenUpdates, l = t[c], l === null ? t[c] = [r] : l.push(r), r.lane = a | 536870912), d) : null;\n }\n function Fa(t) {\n if (50 < gl) throw gl = 0, nd = null, Error(F(185));\n for (var r = t.return; r !== null;) t = r, r = t.return;\n return t.tag === 3 ? t.stateNode : null;\n }\n function Ol(t) {\n t.updateQueue = {\n baseState: t.memoizedState,\n firstBaseUpdate: null,\n lastBaseUpdate: null,\n shared: {\n pending: null,\n lanes: 0,\n hiddenCallbacks: null\n },\n callbacks: null\n };\n }\n function Ha(t, r) {\n t = t.updateQueue, r.updateQueue === t && (r.updateQueue = {\n baseState: t.baseState,\n firstBaseUpdate: t.firstBaseUpdate,\n lastBaseUpdate: t.lastBaseUpdate,\n shared: t.shared,\n callbacks: null\n });\n }\n function Et(t) {\n return {\n lane: t,\n tag: 0,\n payload: null,\n callback: null,\n next: null\n };\n }\n function Nr(t, r, a) {\n var l = t.updateQueue;\n if (l === null) return null;\n if (l = l.shared, (ce & 2) !== 0) {\n var c = l.pending;\n return c === null ? r.next = r : (r.next = c.next, c.next = r), l.pending = r, r = Fa(t), Ii(t, null, a), r;\n }\n return go(t, l, r, a), Fa(t);\n }\n function Ml(t, r, a) {\n if (r = r.updateQueue, r !== null && (r = r.shared, (a & 4194048) !== 0)) {\n var l = r.lanes;\n l &= t.pendingLanes, a |= l, r.lanes = a, $e(t, a);\n }\n }\n function jd(t, r) {\n var a = t.updateQueue,\n l = t.alternate;\n if (l !== null && (l = l.updateQueue, a === l)) {\n var c = null,\n d = null;\n if (a = a.firstBaseUpdate, a !== null) {\n do {\n var h = {\n lane: a.lane,\n tag: a.tag,\n payload: a.payload,\n callback: null,\n next: null\n };\n d === null ? c = d = h : d = d.next = h, a = a.next;\n } while (a !== null);\n d === null ? c = d = r : d = d.next = r;\n } else c = d = r;\n a = {\n baseState: l.baseState,\n firstBaseUpdate: c,\n lastBaseUpdate: d,\n shared: l.shared,\n callbacks: l.callbacks\n }, t.updateQueue = a;\n return;\n }\n t = a.lastBaseUpdate, t === null ? a.firstBaseUpdate = r : t.next = r, a.lastBaseUpdate = r;\n }\n function Li() {\n if (Vf) {\n var t = ul;\n if (t !== null) throw t;\n }\n }\n function Aa(t, r, a, l) {\n Vf = !1;\n var c = t.updateQueue;\n ma = !1;\n var d = c.firstBaseUpdate,\n h = c.lastBaseUpdate,\n y = c.shared.pending;\n if (y !== null) {\n c.shared.pending = null;\n var R = y,\n L = R.next;\n R.next = null, h === null ? d = L : h.next = L, h = R;\n var j = t.alternate;\n j !== null && (j = j.updateQueue, y = j.lastBaseUpdate, y !== h && (y === null ? j.firstBaseUpdate = L : y.next = L, j.lastBaseUpdate = R));\n }\n if (d !== null) {\n var A = c.baseState;\n h = 0, j = L = R = null, y = d;\n do {\n var W = y.lane & -536870913,\n V = W !== y.lane;\n if (V ? (he & W) === W : (l & W) === W) {\n W !== 0 && W === sl && (Vf = !0), j !== null && (j = j.next = {\n lane: 0,\n tag: y.tag,\n payload: y.payload,\n callback: null,\n next: null\n });\n e: {\n var Oe = t,\n vn = y;\n W = r;\n var li = a;\n switch (vn.tag) {\n case 1:\n if (Oe = vn.payload, typeof Oe == \"function\") {\n A = Oe.call(li, A, W);\n break e;\n }\n A = Oe;\n break e;\n case 3:\n Oe.flags = Oe.flags & -65537 | 128;\n case 0:\n if (Oe = vn.payload, W = typeof Oe == \"function\" ? Oe.call(li, A, W) : Oe, W == null) break e;\n A = Lt({}, A, W);\n break e;\n case 2:\n ma = !0;\n }\n }\n W = y.callback, W !== null && (t.flags |= 64, V && (t.flags |= 8192), V = c.callbacks, V === null ? c.callbacks = [W] : V.push(W));\n } else V = {\n lane: W,\n tag: y.tag,\n payload: y.payload,\n callback: y.callback,\n next: null\n }, j === null ? (L = j = V, R = A) : j = j.next = V, h |= W;\n if (y = y.next, y === null) {\n if (y = c.shared.pending, y === null) break;\n V = y, y = V.next, V.next = null, c.lastBaseUpdate = V, c.shared.pending = null;\n }\n } while (!0);\n j === null && (R = A), c.baseState = R, c.firstBaseUpdate = L, c.lastBaseUpdate = j, d === null && (c.shared.lanes = 0), ba |= h, t.lanes = h, t.memoizedState = A;\n }\n }\n function Dd(t, r) {\n if (typeof t != \"function\") throw Error(F(191, t));\n t.call(r);\n }\n function Fp(t, r) {\n var a = t.callbacks;\n if (a !== null) for (t.callbacks = null, t = 0; t < a.length; t++) Dd(a[t], r);\n }\n function B(t, r) {\n t = Uo, Ce(Wc, t), Ce(Kr, r), Uo = t | r.baseLanes;\n }\n function Ql() {\n Ce(Wc, Uo), Ce(Kr, Kr.current);\n }\n function bo() {\n Uo = Wc.current, D(Kr), D(Wc);\n }\n function vo(t) {\n var r = t.alternate;\n Ce(ln, ln.current & 1), Ce(Ft, t), zr === null && (r === null || Kr.current !== null || r.memoizedState !== null) && (zr = t);\n }\n function Ni(t) {\n Ce(ln, ln.current), Ce(Ft, t), zr === null && (zr = t);\n }\n function Fr(t) {\n t.tag === 22 ? (Ce(ln, ln.current), Ce(Ft, t), zr === null && (zr = t)) : So();\n }\n function So() {\n Ce(ln, ln.current), Ce(Ft, Ft.current);\n }\n function ht(t) {\n D(Ft), zr === t && (zr = null), D(ln);\n }\n function ko(t) {\n for (var r = t; r !== null;) {\n if (r.tag === 13) {\n var a = r.memoizedState;\n if (a !== null && (a = a.dehydrated, a === null || Ns(a) || Fs(a))) return r;\n } else if (r.tag === 19 && (r.memoizedProps.revealOrder === \"forwards\" || r.memoizedProps.revealOrder === \"backwards\" || r.memoizedProps.revealOrder === \"unstable_legacy-backwards\" || r.memoizedProps.revealOrder === \"together\")) {\n if ((r.flags & 128) !== 0) return r;\n } else if (r.child !== null) {\n r.child.return = r, r = r.child;\n continue;\n }\n if (r === t) break;\n for (; r.sibling === null;) {\n if (r.return === null || r.return === t) return null;\n r = r.return;\n }\n r.sibling.return = r.return, r = r.sibling;\n }\n return null;\n }\n function Ve() {\n throw Error(F(321));\n }\n function wo(t, r) {\n if (r === null) return !1;\n for (var a = 0; a < r.length && a < t.length; a++) if (!jn(t[a], r[a])) return !1;\n return !0;\n }\n function $l(t, r, a, l, c, d) {\n return Wo = d, ne = r, r.memoizedState = null, r.updateQueue = null, r.lanes = 0, M.H = t === null || t.memoizedState === null ? Mh : qf, oi = !1, d = a(l, c), oi = !1, dl && (d = xu(r, a, l, c)), Fi(t), d;\n }\n function Fi(t) {\n M.H = Os;\n var r = Ie !== null && Ie.next !== null;\n if (Wo = 0, pn = Ie = ne = null, Uc = !1, fl = 0, pl = null, r) throw Error(F(300));\n t === null || hn || (t = t.dependencies, t !== null && Ri(t) && (hn = !0));\n }\n function xu(t, r, a, l) {\n ne = t;\n var c = 0;\n do {\n if (dl && (pl = null), fl = 0, dl = !1, 25 <= c) throw Error(F(301));\n if (c += 1, pn = Ie = null, t.updateQueue != null) {\n var d = t.updateQueue;\n d.lastEffect = null, d.events = null, d.stores = null, d.memoCache != null && (d.memoCache.index = 0);\n }\n M.H = Qh, d = r(a, l);\n } while (dl);\n return d;\n }\n function zu() {\n var t = M.H,\n r = t.useState()[0];\n return r = typeof r.then == \"function\" ? sr(r) : r, t = t.useState()[0], (Ie !== null ? Ie.memoizedState : null) !== t && (ne.flags |= 1024), r;\n }\n function Hr() {\n var t = Bc !== 0;\n return Bc = 0, t;\n }\n function lr(t, r, a) {\n r.updateQueue = t.updateQueue, r.flags &= -2053, t.lanes &= ~a;\n }\n function Vl(t) {\n if (Uc) {\n for (t = t.memoizedState; t !== null;) {\n var r = t.queue;\n r !== null && (r.pending = null), t = t.next;\n }\n Uc = !1;\n }\n Wo = 0, pn = Ie = ne = null, dl = !1, fl = Bc = 0, pl = null;\n }\n function Ln() {\n var t = {\n memoizedState: null,\n baseState: null,\n baseQueue: null,\n queue: null,\n next: null\n };\n return pn === null ? ne.memoizedState = pn = t : pn = pn.next = t, pn;\n }\n function He() {\n if (Ie === null) {\n var t = ne.alternate;\n t = t !== null ? t.memoizedState : null;\n } else t = Ie.next;\n var r = pn === null ? ne.memoizedState : pn.next;\n if (r !== null) pn = r, Ie = t;else {\n if (t === null) throw ne.alternate === null ? Error(F(467)) : Error(F(310));\n Ie = t, t = {\n memoizedState: Ie.memoizedState,\n baseState: Ie.baseState,\n baseQueue: Ie.baseQueue,\n queue: Ie.queue,\n next: null\n }, pn === null ? ne.memoizedState = pn = t : pn = pn.next = t;\n }\n return pn;\n }\n function ja() {\n return {\n lastEffect: null,\n events: null,\n stores: null,\n memoCache: null\n };\n }\n function sr(t) {\n var r = fl;\n return fl += 1, pl === null && (pl = []), t = mo(pl, t, r), r = ne, (pn === null ? r.memoizedState : pn.next) === null && (r = r.alternate, M.H = r === null || r.memoizedState === null ? Mh : qf), t;\n }\n function Ee(t) {\n if (t !== null && typeof t == \"object\") {\n if (typeof t.then == \"function\") return sr(t);\n if (t.$$typeof === Io) return In(t);\n }\n throw Error(F(438, String(t)));\n }\n function Hi(t) {\n var r = null,\n a = ne.updateQueue;\n if (a !== null && (r = a.memoCache), r == null) {\n var l = ne.alternate;\n l !== null && (l = l.updateQueue, l !== null && (l = l.memoCache, l != null && (r = {\n data: l.data.map(function (c) {\n return c.slice();\n }),\n index: 0\n })));\n }\n if (r == null && (r = {\n data: [],\n index: 0\n }), a === null && (a = ja(), ne.updateQueue = a), a.memoCache = r, a = r.data[r.index], a === void 0) for (a = r.data[r.index] = Array(t), l = 0; l < t; l++) a[l] = $r;\n return r.index++, a;\n }\n function Ar(t, r) {\n return typeof r == \"function\" ? r(t) : r;\n }\n function Ai(t) {\n var r = He();\n return Po(r, Ie, t);\n }\n function Po(t, r, a) {\n var l = t.queue;\n if (l === null) throw Error(F(311));\n l.lastRenderedReducer = a;\n var c = t.baseQueue,\n d = l.pending;\n if (d !== null) {\n if (c !== null) {\n var h = c.next;\n c.next = d.next, d.next = h;\n }\n r.baseQueue = c = d, l.pending = null;\n }\n if (d = t.baseState, c === null) t.memoizedState = d;else {\n r = c.next;\n var y = h = null,\n R = null,\n L = r,\n j = !1;\n do {\n var A = L.lane & -536870913;\n if (A !== L.lane ? (he & A) === A : (Wo & A) === A) {\n var W = L.revertLane;\n if (W === 0) R !== null && (R = R.next = {\n lane: 0,\n revertLane: 0,\n gesture: null,\n action: L.action,\n hasEagerState: L.hasEagerState,\n eagerState: L.eagerState,\n next: null\n }), A === sl && (j = !0);else if ((Wo & W) === W) {\n L = L.next, W === sl && (j = !0);\n continue;\n } else A = {\n lane: 0,\n revertLane: L.revertLane,\n gesture: null,\n action: L.action,\n hasEagerState: L.hasEagerState,\n eagerState: L.eagerState,\n next: null\n }, R === null ? (y = R = A, h = d) : R = R.next = A, ne.lanes |= W, ba |= W;\n A = L.action, oi && a(d, A), d = L.hasEagerState ? L.eagerState : a(d, A);\n } else W = {\n lane: A,\n revertLane: L.revertLane,\n gesture: L.gesture,\n action: L.action,\n hasEagerState: L.hasEagerState,\n eagerState: L.eagerState,\n next: null\n }, R === null ? (y = R = W, h = d) : R = R.next = W, ne.lanes |= A, ba |= A;\n L = L.next;\n } while (L !== null && L !== r);\n if (R === null ? h = d : R.next = y, !jn(d, t.memoizedState) && (hn = !0, j && (a = ul, a !== null))) throw a;\n t.memoizedState = d, t.baseState = h, t.baseQueue = R, l.lastRenderedState = d;\n }\n return c === null && (l.lanes = 0), [t.memoizedState, l.dispatch];\n }\n function Da(t) {\n var r = He(),\n a = r.queue;\n if (a === null) throw Error(F(311));\n a.lastRenderedReducer = t;\n var l = a.dispatch,\n c = a.pending,\n d = r.memoizedState;\n if (c !== null) {\n a.pending = null;\n var h = c = c.next;\n do d = t(d, h.action), h = h.next; while (h !== c);\n jn(d, r.memoizedState) || (hn = !0), r.memoizedState = d, r.baseQueue === null && (r.baseState = d), a.lastRenderedState = d;\n }\n return [d, l];\n }\n function ur(t, r, a) {\n var l = ne,\n c = He(),\n d = ue;\n if (d) {\n if (a === void 0) throw Error(F(407));\n a = a();\n } else a = r();\n var h = !jn((Ie || c).memoizedState, a);\n if (h && (c.memoizedState = a, hn = !0), c = c.queue, Tu(ql.bind(null, l, c, t), [t]), c.getSnapshot !== r || h || pn !== null && pn.memoizedState.tag & 1) {\n if (l.flags |= 2048, Kn(9, {\n destroy: void 0\n }, jr.bind(null, l, c, a, r), null), Ne === null) throw Error(F(349));\n d || (Wo & 127) !== 0 || Hp(l, r, a);\n }\n return a;\n }\n function Hp(t, r, a) {\n t.flags |= 16384, t = {\n getSnapshot: r,\n value: a\n }, r = ne.updateQueue, r === null ? (r = ja(), ne.updateQueue = r, r.stores = [t]) : (a = r.stores, a === null ? r.stores = [t] : a.push(t));\n }\n function jr(t, r, a, l) {\n r.value = a, r.getSnapshot = l, ji(r) && Gl(t);\n }\n function ql(t, r, a) {\n return a(function () {\n ji(r) && Gl(t);\n });\n }\n function ji(t) {\n var r = t.getSnapshot;\n t = t.value;\n try {\n var a = r();\n return !jn(t, a);\n } catch {\n return !0;\n }\n }\n function Gl(t) {\n var r = Ko(t, 2);\n r !== null && nt(r, t, 2);\n }\n function Xn(t) {\n var r = Ln();\n if (typeof t == \"function\") {\n var a = t;\n if (t = a(), oi) {\n pe(!0);\n try {\n a();\n } finally {\n pe(!1);\n }\n }\n }\n return r.memoizedState = r.baseState = t, r.queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: Ar,\n lastRenderedState: t\n }, r;\n }\n function mt(t, r, a, l) {\n return t.baseState = a, Po(t, Ie, typeof l == \"function\" ? l : Ar);\n }\n function Dr(t, r, a, l, c) {\n if (na(t)) throw Error(F(485));\n if (t = r.action, t !== null) {\n var d = {\n payload: c,\n action: t,\n next: null,\n isTransition: !0,\n status: \"pending\",\n value: null,\n reason: null,\n listeners: [],\n then: function (h) {\n d.listeners.push(h);\n }\n };\n M.T !== null ? a(!0) : d.isTransition = !1, l(d), a = r.pending, a === null ? (d.next = r.pending = d, cr(r, d)) : (d.next = a.next, r.pending = a.next = d);\n }\n }\n function cr(t, r) {\n var a = r.action,\n l = r.payload,\n c = t.state;\n if (r.isTransition) {\n var d = M.T,\n h = {};\n M.T = h;\n try {\n var y = a(c, l),\n R = M.S;\n R !== null && R(h, y), dr(t, r, y);\n } catch (L) {\n Jl(t, r, L);\n } finally {\n d !== null && h.types !== null && (d.types = h.types), M.T = d;\n }\n } else try {\n d = a(c, l), dr(t, r, d);\n } catch (L) {\n Jl(t, r, L);\n }\n }\n function dr(t, r, a) {\n a !== null && typeof a == \"object\" && typeof a.then == \"function\" ? a.then(function (l) {\n fr(t, r, l);\n }, function (l) {\n return Jl(t, r, l);\n }) : fr(t, r, a);\n }\n function fr(t, r, a) {\n r.status = \"fulfilled\", r.value = a, Cu(r), t.state = a, r = t.pending, r !== null && (a = r.next, a === r ? t.pending = null : (a = a.next, r.next = a, cr(t, a)));\n }\n function Jl(t, r, a) {\n var l = t.pending;\n if (t.pending = null, l !== null) {\n l = l.next;\n do r.status = \"rejected\", r.reason = a, Cu(r), r = r.next; while (r !== l);\n }\n t.action = null;\n }\n function Cu(t) {\n t = t.listeners;\n for (var r = 0; r < t.length; r++) (0, t[r])();\n }\n function Wd(t, r) {\n return r;\n }\n function pr(t, r) {\n if (ue) {\n var a = Ne.formState;\n if (a !== null) {\n e: {\n var l = ne;\n if (ue) {\n if (Ue) {\n var c = vh(Ue, Yt);\n if (c) {\n Ue = Nf(c), l = Sh(c);\n break e;\n }\n }\n ar(l);\n }\n l = !1;\n }\n l && (r = a[0]);\n }\n }\n a = Ln(), a.memoizedState = a.baseState = r, l = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: Wd,\n lastRenderedState: r\n }, a.queue = l, a = Nu.bind(null, ne, l), l.dispatch = a, l = Xn(!1);\n var d = Wi.bind(null, ne, !1, l.queue);\n return l = Ln(), c = {\n state: r,\n dispatch: null,\n action: t,\n pending: null\n }, l.queue = c, a = Dr.bind(null, ne, c, d, a), c.dispatch = a, l.memoizedState = t, [r, a, !1];\n }\n function Ud(t) {\n var r = He();\n return hr(r, Ie, t);\n }\n function hr(t, r, a) {\n if (r = Po(t, r, Wd)[0], t = Ai(Ar)[0], typeof r == \"object\" && r !== null && typeof r.then == \"function\") try {\n var l = sr(r);\n } catch (h) {\n throw h === cl ? jc : h;\n } else l = r;\n r = He();\n var c = r.queue,\n d = c.dispatch;\n return a !== r.memoizedState && (ne.flags |= 2048, Kn(9, {\n destroy: void 0\n }, Zl.bind(null, c, a), null)), [l, d, t];\n }\n function Zl(t, r) {\n t.action = r;\n }\n function Yl(t) {\n var r = He(),\n a = Ie;\n if (a !== null) return hr(r, a, t);\n He(), r = r.memoizedState, a = He();\n var l = a.queue.dispatch;\n return a.memoizedState = t, [r, l, !1];\n }\n function Kn(t, r, a, l) {\n return t = {\n tag: t,\n create: a,\n deps: l,\n inst: r,\n next: null\n }, r = ne.updateQueue, r === null && (r = ja(), ne.updateQueue = r), a = r.lastEffect, a === null ? r.lastEffect = t.next = t : (l = a.next, a.next = t, t.next = l, r.lastEffect = t), t;\n }\n function Wa() {\n return He().memoizedState;\n }\n function Xl(t, r, a, l) {\n var c = Ln();\n ne.flags |= t, c.memoizedState = Kn(1 | r, {\n destroy: void 0\n }, a, l === void 0 ? null : l);\n }\n function Di(t, r, a, l) {\n var c = He();\n l = l === void 0 ? null : l;\n var d = c.memoizedState.inst;\n Ie !== null && l !== null && wo(l, Ie.memoizedState.deps) ? c.memoizedState = Kn(r, d, a, l) : (ne.flags |= t, c.memoizedState = Kn(1 | r, d, a, l));\n }\n function Bd(t, r) {\n Xl(8390656, 8, t, r);\n }\n function Tu(t, r) {\n Di(2048, 8, t, r);\n }\n function Ap(t) {\n ne.flags |= 4;\n var r = ne.updateQueue;\n if (r === null) r = ja(), ne.updateQueue = r, r.events = [t];else {\n var a = r.events;\n a === null ? r.events = [t] : a.push(t);\n }\n }\n function _u(t) {\n var r = He().memoizedState;\n return Ap({\n ref: r,\n nextImpl: t\n }), function () {\n if ((ce & 2) !== 0) throw Error(F(440));\n return r.impl.apply(void 0, arguments);\n };\n }\n function Od(t, r) {\n return Di(4, 2, t, r);\n }\n function Ru(t, r) {\n return Di(4, 4, t, r);\n }\n function jp(t, r) {\n if (typeof r == \"function\") {\n t = t();\n var a = r(t);\n return function () {\n typeof a == \"function\" ? a() : r(null);\n };\n }\n if (r != null) return t = t(), r.current = t, function () {\n r.current = null;\n };\n }\n function Md(t, r, a) {\n a = a != null ? a.concat([t]) : null, Di(4, 4, jp.bind(null, r, t), a);\n }\n function Qd() {}\n function Eu(t, r) {\n var a = He();\n r = r === void 0 ? null : r;\n var l = a.memoizedState;\n return r !== null && wo(r, l[1]) ? l[0] : (a.memoizedState = [t, r], t);\n }\n function Kl(t, r) {\n var a = He();\n r = r === void 0 ? null : r;\n var l = a.memoizedState;\n if (r !== null && wo(r, l[1])) return l[0];\n if (l = t(), oi) {\n pe(!0);\n try {\n t();\n } finally {\n pe(!1);\n }\n }\n return a.memoizedState = [l, r], l;\n }\n function Iu(t, r, a) {\n return a === void 0 || (Wo & 1073741824) !== 0 && (he & 261930) === 0 ? t.memoizedState = r : (t.memoizedState = a, t = ys(), ne.lanes |= t, ba |= t, a);\n }\n function es(t, r, a, l) {\n return jn(a, r) ? a : Kr.current !== null ? (t = Iu(t, a, l), jn(t, r) || (hn = !0), t) : (Wo & 42) === 0 || (Wo & 1073741824) !== 0 && (he & 261930) === 0 ? (hn = !0, t.memoizedState = a) : (t = ys(), ne.lanes |= t, ba |= t, r);\n }\n function $d(t, r, a, l, c) {\n var d = qr();\n yn(d !== 0 && 8 > d ? d : 8);\n var h = M.T,\n y = {};\n M.T = y, Wi(t, !1, r, a);\n try {\n var R = c(),\n L = M.S;\n if (L !== null && L(y, R), R !== null && typeof R == \"object\" && typeof R.then == \"function\") {\n var j = ho(R, l);\n ea(t, r, j, bt(t));\n } else ea(t, r, l, bt(t));\n } catch (A) {\n ea(t, r, {\n then: function () {},\n status: \"rejected\",\n reason: A\n }, bt());\n } finally {\n yn(d), h !== null && y.types !== null && (h.types = y.types), M.T = h;\n }\n }\n function Vd(t) {\n var r = t.memoizedState;\n if (r !== null) return r;\n r = {\n memoizedState: rt,\n baseState: rt,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: Ar,\n lastRenderedState: rt\n },\n next: null\n };\n var a = {};\n return r.next = {\n memoizedState: a,\n baseState: a,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: Ar,\n lastRenderedState: a\n },\n next: null\n }, t.memoizedState = r, t = t.alternate, t !== null && (t.memoizedState = r), r;\n }\n function Lu() {\n return In(da);\n }\n function xo() {\n return He().memoizedState;\n }\n function qd() {\n return He().memoizedState;\n }\n function Dp(t) {\n for (var r = t.return; r !== null;) {\n switch (r.tag) {\n case 24:\n case 3:\n var a = bt();\n t = Et(a);\n var l = Nr(r, t, a);\n l !== null && (nt(l, r, a), Ml(l, r, a)), r = {\n cache: Fd()\n }, t.payload = r;\n return;\n }\n r = r.return;\n }\n }\n function Nn(t, r, a) {\n var l = bt();\n a = {\n lane: l,\n revertLane: 0,\n gesture: null,\n action: a,\n hasEagerState: !1,\n eagerState: null,\n next: null\n }, na(t) ? Gd(r, a) : (a = yo(t, r, a, l), a !== null && (nt(a, t, l), ns(a, r, l)));\n }\n function Nu(t, r, a) {\n var l = bt();\n ea(t, r, a, l);\n }\n function ea(t, r, a, l) {\n var c = {\n lane: l,\n revertLane: 0,\n gesture: null,\n action: a,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (na(t)) Gd(r, c);else {\n var d = t.alternate;\n if (t.lanes === 0 && (d === null || d.lanes === 0) && (d = r.lastRenderedReducer, d !== null)) try {\n var h = r.lastRenderedState,\n y = d(h, a);\n if (c.hasEagerState = !0, c.eagerState = y, jn(y, h)) return go(t, r, c, 0), Ne === null && Bn(), !1;\n } catch {} finally {}\n if (a = yo(t, r, c, l), a !== null) return nt(a, t, l), ns(a, r, l), !0;\n }\n return !1;\n }\n function Wi(t, r, a, l) {\n if (l = {\n lane: 2,\n revertLane: ku(),\n gesture: null,\n action: l,\n hasEagerState: !1,\n eagerState: null,\n next: null\n }, na(t)) {\n if (r) throw Error(F(479));\n } else r = yo(t, a, l, 2), r !== null && nt(r, t, 2);\n }\n function na(t) {\n var r = t.alternate;\n return t === ne || r !== null && r === ne;\n }\n function Gd(t, r) {\n dl = Uc = !0;\n var a = t.pending;\n a === null ? r.next = r : (r.next = a.next, a.next = r), t.pending = r;\n }\n function ns(t, r, a) {\n if ((a & 4194048) !== 0) {\n var l = r.lanes;\n l &= t.pendingLanes, a |= l, r.lanes = a, $e(t, a);\n }\n }\n function Fu(t, r, a, l) {\n r = t.memoizedState, a = a(l, r), a = a == null ? r : Lt({}, r, a), t.memoizedState = a, t.lanes === 0 && (t.updateQueue.baseState = a);\n }\n function ts(t, r, a, l, c, d, h) {\n return t = t.stateNode, typeof t.shouldComponentUpdate == \"function\" ? t.shouldComponentUpdate(l, d, h) : r.prototype && r.prototype.isPureReactComponent ? !Ul(a, l) || !Ul(c, d) : !0;\n }\n function Jd(t, r, a, l) {\n t = r.state, typeof r.componentWillReceiveProps == \"function\" && r.componentWillReceiveProps(a, l), typeof r.UNSAFE_componentWillReceiveProps == \"function\" && r.UNSAFE_componentWillReceiveProps(a, l), r.state !== t && Oc.enqueueReplaceState(r, r.state, null);\n }\n function Wr(t, r) {\n var a = r;\n if (\"ref\" in r) {\n a = {};\n for (var l in r) l !== \"ref\" && (a[l] = r[l]);\n }\n if (t = t.defaultProps) {\n a === r && (a = Lt({}, a));\n for (var c in t) a[c] === void 0 && (a[c] = t[c]);\n }\n return a;\n }\n function rs(t, r) {\n try {\n var a = t.onUncaughtError;\n a(r.value, {\n componentStack: r.stack\n });\n } catch (l) {\n setTimeout(function () {\n throw l;\n });\n }\n }\n function Zd(t, r, a) {\n try {\n var l = t.onCaughtError;\n l(a.value, {\n componentStack: a.stack,\n errorBoundary: r.tag === 1 ? r.stateNode : null\n });\n } catch (c) {\n setTimeout(function () {\n throw c;\n });\n }\n }\n function Ui(t, r, a) {\n return a = Et(a), a.tag = 3, a.payload = {\n element: null\n }, a.callback = function () {\n rs(t, r);\n }, a;\n }\n function os(t) {\n return t = Et(t), t.tag = 3, t;\n }\n function Hu(t, r, a, l) {\n var c = a.type.getDerivedStateFromError;\n if (typeof c == \"function\") {\n var d = l.value;\n t.payload = function () {\n return c(d);\n }, t.callback = function () {\n Zd(r, a, l);\n };\n }\n var h = a.stateNode;\n h !== null && typeof h.componentDidCatch == \"function\" && (t.callback = function () {\n Zd(r, a, l), typeof c != \"function\" && (va === null ? va = new Set([this]) : va.add(this));\n var y = l.stack;\n this.componentDidCatch(l.value, {\n componentStack: y !== null ? y : \"\"\n });\n });\n }\n function On(t, r, a, l, c) {\n if (a.flags |= 32768, l !== null && typeof l == \"object\" && typeof l.then == \"function\") {\n if (r = a.alternate, r !== null && po(r, a, c, !0), a = Ft.current, a !== null) {\n switch (a.tag) {\n case 31:\n case 13:\n return zr === null ? Gi() : a.alternate === null && Xe === 0 && (Xe = 3), a.flags &= -257, a.flags |= 65536, a.lanes = c, l === Dc ? a.flags |= 16384 : (r = a.updateQueue, r === null ? a.updateQueue = new Set([l]) : r.add(l), lc(t, l, c)), !1;\n case 22:\n return a.flags |= 65536, l === Dc ? a.flags |= 16384 : (r = a.updateQueue, r === null ? (r = {\n transitions: null,\n markerInstances: null,\n retryQueue: new Set([l])\n }, a.updateQueue = r) : (a = r.retryQueue, a === null ? r.retryQueue = new Set([l]) : a.add(l)), lc(t, l, c)), !1;\n }\n throw Error(F(435, a.tag));\n }\n return lc(t, l, c), Gi(), !1;\n }\n if (ue) return r = Ft.current, r !== null ? ((r.flags & 65536) === 0 && (r.flags |= 256), r.flags |= 65536, r.lanes = c, l !== Of && (t = Error(F(422), {\n cause: l\n }), ct(ut(t, a)))) : (l !== Of && (r = Error(F(423), {\n cause: l\n }), ct(ut(r, a))), t = t.current.alternate, t.flags |= 65536, c &= -c, t.lanes |= c, l = ut(l, a), c = Ui(t.stateNode, l, c), jd(t, c), Xe !== 4 && (Xe = 2)), !1;\n var d = Error(F(520), {\n cause: l\n });\n if (d = ut(d, a), $s === null ? $s = [d] : $s.push(d), Xe !== 4 && (Xe = 2), r === null) return !0;\n l = ut(l, a), a = r;\n do {\n switch (a.tag) {\n case 3:\n return a.flags |= 65536, t = c & -c, a.lanes |= t, t = Ui(a.stateNode, l, t), jd(a, t), !1;\n case 1:\n if (r = a.type, d = a.stateNode, (a.flags & 128) === 0 && (typeof r.getDerivedStateFromError == \"function\" || d !== null && typeof d.componentDidCatch == \"function\" && (va === null || !va.has(d)))) return a.flags |= 65536, c &= -c, a.lanes |= c, c = os(c), Hu(c, t, a, l), jd(a, c), !1;\n }\n a = a.return;\n } while (a !== null);\n return !1;\n }\n function wn(t, r, a, l) {\n r.child = t === null ? Oh(r, null, a, l) : ri(r, t.child, a, l);\n }\n function as(t, r, a, l, c) {\n a = a.render;\n var d = r.ref;\n if (\"ref\" in l) {\n var h = {};\n for (var y in l) y !== \"ref\" && (h[y] = l[y]);\n } else h = l;\n return Un(r), l = $l(t, r, a, h, d, c), y = Hr(), t !== null && !hn ? (lr(t, r, c), gt(t, r, c)) : (ue && y && Id(r), r.flags |= 1, wn(t, r, l, c), r.child);\n }\n function Au(t, r, a, l, c) {\n if (t === null) {\n var d = a.type;\n return typeof d == \"function\" && !ks(d) && d.defaultProps === void 0 && a.compare === null ? (r.tag = 15, r.type = d, ju(t, r, d, l, c)) : (t = ws(a.type, null, l, r, r.mode, c), t.ref = r.ref, t.return = r, r.child = t);\n }\n if (d = t.child, !Mi(t, c)) {\n var h = d.memoizedProps;\n if (a = a.compare, a = a !== null ? a : Ul, a(h, l) && t.ref === r.ref) return gt(t, r, c);\n }\n return r.flags |= 1, t = Qr(d, l), t.ref = r.ref, t.return = r, r.child = t;\n }\n function ju(t, r, a, l, c) {\n if (t !== null) {\n var d = t.memoizedProps;\n if (Ul(d, l) && t.ref === r.ref) if (hn = !1, r.pendingProps = l = d, Mi(t, c)) (t.flags & 131072) !== 0 && (hn = !0);else return r.lanes = t.lanes, gt(t, r, c);\n }\n return Yd(t, r, a, l, c);\n }\n function zo(t, r, a, l) {\n var c = l.children,\n d = t !== null ? t.memoizedState : null;\n if (t === null && r.stateNode === null && (r.stateNode = {\n _visibility: 1,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n }), l.mode === \"hidden\") {\n if ((r.flags & 128) !== 0) {\n if (d = d !== null ? d.baseLanes | a : a, t !== null) {\n for (l = r.child = t.child, c = 0; l !== null;) c = c | l.lanes | l.childLanes, l = l.sibling;\n l = c & ~d;\n } else l = 0, r.child = null;\n return Bi(t, r, d, a, l);\n }\n if ((a & 536870912) !== 0) r.memoizedState = {\n baseLanes: 0,\n cachePool: null\n }, t !== null && Ei(r, d !== null ? d.cachePool : null), d !== null ? B(r, d) : Ql(), Fr(r);else return l = r.lanes = 536870912, Bi(t, r, d !== null ? d.baseLanes | a : a, a, l);\n } else d !== null ? (Ei(r, d.cachePool), B(r, d), So(), r.memoizedState = null) : (t !== null && Ei(r, null), Ql(), So());\n return wn(t, r, c, a), r.child;\n }\n function Mt(t, r) {\n return t !== null && t.tag === 22 || r.stateNode !== null || (r.stateNode = {\n _visibility: 1,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n }), r.sibling;\n }\n function Bi(t, r, a, l, c) {\n var d = wu();\n return d = d === null ? null : {\n parent: qt ? qe._currentValue : qe._currentValue2,\n pool: d\n }, r.memoizedState = {\n baseLanes: a,\n cachePool: d\n }, t !== null && Ei(r, null), Ql(), Fr(r), t !== null && po(t, r, l, !0), r.childLanes = c, null;\n }\n function Ua(t, r) {\n return r = mr({\n mode: r.mode,\n children: r.children\n }, t.mode), r.ref = t.ref, t.child = r, r.return = t, r;\n }\n function Oi(t, r, a) {\n return ri(r, t.child, null, a), t = Ua(r, r.pendingProps), t.flags |= 2, ht(r), r.memoizedState = null, t;\n }\n function is(t, r, a) {\n var l = r.pendingProps,\n c = (r.flags & 128) !== 0;\n if (r.flags &= -129, t === null) {\n if (ue) {\n if (l.mode === \"hidden\") return t = Ua(r, l), r.lanes = 536870912, Mt(null, t);\n if (Ni(r), (t = Ue) ? (t = xh(t, Yt), t !== null && (r.memoizedState = {\n dehydrated: t,\n treeContext: jo !== null ? {\n id: ot,\n overflow: Zr\n } : null,\n retryLane: 536870912,\n hydrationErrors: null\n }, a = cc(t), a.return = r, r.child = a, bn = r, Ue = null)) : t = null, t === null) throw ar(r);\n return r.lanes = 536870912, null;\n }\n return Ua(r, l);\n }\n var d = t.memoizedState;\n if (d !== null) {\n var h = d.dehydrated;\n if (Ni(r), c) {\n if (r.flags & 256) r.flags &= -257, r = Oi(t, r, a);else if (r.memoizedState !== null) r.child = t.child, r.flags |= 128, r = null;else throw Error(F(558));\n } else if (hn || po(t, r, a, !1), c = (a & t.childLanes) !== 0, hn || c) {\n if (l = Ne, l !== null && (h = G(l, a), h !== 0 && h !== d.retryLane)) throw d.retryLane = h, Ko(t, h), nt(l, t, h), Mc;\n Gi(), r = Oi(t, r, a);\n } else t = d.treeContext, Hn && (Ue = Ff(h), bn = r, ue = !0, Do = null, Yt = !1, t !== null && Ld(r, t)), r = Ua(r, l), r.flags |= 4096;\n return r;\n }\n return t = Qr(t.child, {\n mode: l.mode,\n children: l.children\n }), t.ref = r.ref, r.child = t, t.return = r, t;\n }\n function ls(t, r) {\n var a = r.ref;\n if (a === null) t !== null && t.ref !== null && (r.flags |= 4194816);else {\n if (typeof a != \"function\" && typeof a != \"object\") throw Error(F(284));\n (t === null || t.ref !== a) && (r.flags |= 4194816);\n }\n }\n function Yd(t, r, a, l, c) {\n return Un(r), a = $l(t, r, a, l, void 0, c), l = Hr(), t !== null && !hn ? (lr(t, r, c), gt(t, r, c)) : (ue && l && Id(r), r.flags |= 1, wn(t, r, a, c), r.child);\n }\n function Xd(t, r, a, l, c, d) {\n return Un(r), r.updateQueue = null, a = xu(r, l, a, c), Fi(t), l = Hr(), t !== null && !hn ? (lr(t, r, d), gt(t, r, d)) : (ue && l && Id(r), r.flags |= 1, wn(t, r, a, d), r.child);\n }\n function Kd(t, r, a, l, c) {\n if (Un(r), r.stateNode === null) {\n var d = Ka,\n h = a.contextType;\n typeof h == \"object\" && h !== null && (d = In(h)), d = new a(l, d), r.memoizedState = d.state !== null && d.state !== void 0 ? d.state : null, d.updater = Oc, r.stateNode = d, d._reactInternals = r, d = r.stateNode, d.props = l, d.state = r.memoizedState, d.refs = {}, Ol(r), h = a.contextType, d.context = typeof h == \"object\" && h !== null ? In(h) : Ka, d.state = r.memoizedState, h = a.getDerivedStateFromProps, typeof h == \"function\" && (Fu(r, a, h, l), d.state = r.memoizedState), typeof a.getDerivedStateFromProps == \"function\" || typeof d.getSnapshotBeforeUpdate == \"function\" || typeof d.UNSAFE_componentWillMount != \"function\" && typeof d.componentWillMount != \"function\" || (h = d.state, typeof d.componentWillMount == \"function\" && d.componentWillMount(), typeof d.UNSAFE_componentWillMount == \"function\" && d.UNSAFE_componentWillMount(), h !== d.state && Oc.enqueueReplaceState(d, d.state, null), Aa(r, l, d, c), Li(), d.state = r.memoizedState), typeof d.componentDidMount == \"function\" && (r.flags |= 4194308), l = !0;\n } else if (t === null) {\n d = r.stateNode;\n var y = r.memoizedProps,\n R = Wr(a, y);\n d.props = R;\n var L = d.context,\n j = a.contextType;\n h = Ka, typeof j == \"object\" && j !== null && (h = In(j));\n var A = a.getDerivedStateFromProps;\n j = typeof A == \"function\" || typeof d.getSnapshotBeforeUpdate == \"function\", y = r.pendingProps !== y, j || typeof d.UNSAFE_componentWillReceiveProps != \"function\" && typeof d.componentWillReceiveProps != \"function\" || (y || L !== h) && Jd(r, d, l, h), ma = !1;\n var W = r.memoizedState;\n d.state = W, Aa(r, l, d, c), Li(), L = r.memoizedState, y || W !== L || ma ? (typeof A == \"function\" && (Fu(r, a, A, l), L = r.memoizedState), (R = ma || ts(r, a, R, l, W, L, h)) ? (j || typeof d.UNSAFE_componentWillMount != \"function\" && typeof d.componentWillMount != \"function\" || (typeof d.componentWillMount == \"function\" && d.componentWillMount(), typeof d.UNSAFE_componentWillMount == \"function\" && d.UNSAFE_componentWillMount()), typeof d.componentDidMount == \"function\" && (r.flags |= 4194308)) : (typeof d.componentDidMount == \"function\" && (r.flags |= 4194308), r.memoizedProps = l, r.memoizedState = L), d.props = l, d.state = L, d.context = h, l = R) : (typeof d.componentDidMount == \"function\" && (r.flags |= 4194308), l = !1);\n } else {\n d = r.stateNode, Ha(t, r), h = r.memoizedProps, j = Wr(a, h), d.props = j, A = r.pendingProps, W = d.context, L = a.contextType, R = Ka, typeof L == \"object\" && L !== null && (R = In(L)), y = a.getDerivedStateFromProps, (L = typeof y == \"function\" || typeof d.getSnapshotBeforeUpdate == \"function\") || typeof d.UNSAFE_componentWillReceiveProps != \"function\" && typeof d.componentWillReceiveProps != \"function\" || (h !== A || W !== R) && Jd(r, d, l, R), ma = !1, W = r.memoizedState, d.state = W, Aa(r, l, d, c), Li();\n var V = r.memoizedState;\n h !== A || W !== V || ma || t !== null && t.dependencies !== null && Ri(t.dependencies) ? (typeof y == \"function\" && (Fu(r, a, y, l), V = r.memoizedState), (j = ma || ts(r, a, j, l, W, V, R) || t !== null && t.dependencies !== null && Ri(t.dependencies)) ? (L || typeof d.UNSAFE_componentWillUpdate != \"function\" && typeof d.componentWillUpdate != \"function\" || (typeof d.componentWillUpdate == \"function\" && d.componentWillUpdate(l, V, R), typeof d.UNSAFE_componentWillUpdate == \"function\" && d.UNSAFE_componentWillUpdate(l, V, R)), typeof d.componentDidUpdate == \"function\" && (r.flags |= 4), typeof d.getSnapshotBeforeUpdate == \"function\" && (r.flags |= 1024)) : (typeof d.componentDidUpdate != \"function\" || h === t.memoizedProps && W === t.memoizedState || (r.flags |= 4), typeof d.getSnapshotBeforeUpdate != \"function\" || h === t.memoizedProps && W === t.memoizedState || (r.flags |= 1024), r.memoizedProps = l, r.memoizedState = V), d.props = l, d.state = V, d.context = R, l = j) : (typeof d.componentDidUpdate != \"function\" || h === t.memoizedProps && W === t.memoizedState || (r.flags |= 4), typeof d.getSnapshotBeforeUpdate != \"function\" || h === t.memoizedProps && W === t.memoizedState || (r.flags |= 1024), l = !1);\n }\n return d = l, ls(t, r), l = (r.flags & 128) !== 0, d || l ? (d = r.stateNode, a = l && typeof a.getDerivedStateFromError != \"function\" ? null : d.render(), r.flags |= 1, t !== null && l ? (r.child = ri(r, t.child, null, c), r.child = ri(r, null, a, c)) : wn(t, r, a, c), r.memoizedState = d.state, t = r.child) : t = gt(t, r, c), t;\n }\n function Du(t, r, a, l) {\n return _a(), r.flags |= 256, wn(t, r, a, l), r.child;\n }\n function ss(t) {\n return {\n baseLanes: t,\n cachePool: Pu()\n };\n }\n function Ur(t, r, a) {\n return t = t !== null ? t.childLanes & ~a : 0, r && (t |= At), t;\n }\n function Wu(t, r, a) {\n var l = r.pendingProps,\n c = !1,\n d = (r.flags & 128) !== 0,\n h;\n if ((h = d) || (h = t !== null && t.memoizedState === null ? !1 : (ln.current & 2) !== 0), h && (c = !0, r.flags &= -129), h = (r.flags & 32) !== 0, r.flags &= -33, t === null) {\n if (ue) {\n if (c ? vo(r) : So(), (t = Ue) ? (t = Om(t, Yt), t !== null && (r.memoizedState = {\n dehydrated: t,\n treeContext: jo !== null ? {\n id: ot,\n overflow: Zr\n } : null,\n retryLane: 536870912,\n hydrationErrors: null\n }, a = cc(t), a.return = r, r.child = a, bn = r, Ue = null)) : t = null, t === null) throw ar(r);\n return Fs(t) ? r.lanes = 32 : r.lanes = 536870912, null;\n }\n var y = l.children;\n return l = l.fallback, c ? (So(), c = r.mode, y = mr({\n mode: \"hidden\",\n children: y\n }, c), l = Eo(l, c, a, null), y.return = r, l.return = r, y.sibling = l, r.child = y, l = r.child, l.memoizedState = ss(a), l.childLanes = Ur(t, h, a), r.memoizedState = Qc, Mt(null, l)) : (vo(r), Uu(r, y));\n }\n var R = t.memoizedState;\n if (R !== null && (y = R.dehydrated, y !== null)) {\n if (d) r.flags & 256 ? (vo(r), r.flags &= -257, r = et(t, r, a)) : r.memoizedState !== null ? (So(), r.child = t.child, r.flags |= 128, r = null) : (So(), y = l.fallback, c = r.mode, l = mr({\n mode: \"visible\",\n children: l.children\n }, c), y = Eo(y, c, a, null), y.flags |= 2, l.return = r, y.return = r, l.sibling = y, r.child = l, ri(r, t.child, null, a), l = r.child, l.memoizedState = ss(a), l.childLanes = Ur(t, h, a), r.memoizedState = Qc, r = Mt(null, l));else if (vo(r), Fs(y)) h = Za(y).digest, l = Error(F(419)), l.stack = \"\", l.digest = h, ct({\n value: l,\n source: null,\n stack: null\n }), r = et(t, r, a);else if (hn || po(t, r, a, !1), h = (a & t.childLanes) !== 0, hn || h) {\n if (h = Ne, h !== null && (l = G(h, a), l !== 0 && l !== R.retryLane)) throw R.retryLane = l, Ko(t, l), nt(h, t, l), Mc;\n Ns(y) || Gi(), r = et(t, r, a);\n } else Ns(y) ? (r.flags |= 192, r.child = t.child, r = null) : (t = R.treeContext, Hn && (Ue = wh(y), bn = r, ue = !0, Do = null, Yt = !1, t !== null && Ld(r, t)), r = Uu(r, l.children), r.flags |= 4096);\n return r;\n }\n return c ? (So(), y = l.fallback, c = r.mode, R = t.child, d = R.sibling, l = Qr(R, {\n mode: \"hidden\",\n children: l.children\n }), l.subtreeFlags = R.subtreeFlags & 65011712, d !== null ? y = Qr(d, y) : (y = Eo(y, c, a, null), y.flags |= 2), y.return = r, l.return = r, l.sibling = y, r.child = l, Mt(null, l), l = r.child, y = t.child.memoizedState, y === null ? y = ss(a) : (c = y.cachePool, c !== null ? (R = qt ? qe._currentValue : qe._currentValue2, c = c.parent !== R ? {\n parent: R,\n pool: R\n } : c) : c = Pu(), y = {\n baseLanes: y.baseLanes | a,\n cachePool: c\n }), l.memoizedState = y, l.childLanes = Ur(t, h, a), r.memoizedState = Qc, Mt(t.child, l)) : (vo(r), a = t.child, t = a.sibling, a = Qr(a, {\n mode: \"visible\",\n children: l.children\n }), a.return = r, a.sibling = null, t !== null && (h = r.deletions, h === null ? (r.deletions = [t], r.flags |= 16) : h.push(t)), r.child = a, r.memoizedState = null, a);\n }\n function Uu(t, r) {\n return r = mr({\n mode: \"visible\",\n children: r\n }, t.mode), r.return = t, t.child = r;\n }\n function mr(t, r) {\n return t = Yn(22, t, null, r), t.lanes = 0, t;\n }\n function et(t, r, a) {\n return ri(r, t.child, null, a), t = Uu(r, r.pendingProps.children), t.flags |= 2, r.memoizedState = null, t;\n }\n function us(t, r, a) {\n t.lanes |= r;\n var l = t.alternate;\n l !== null && (l.lanes |= r), Ot(t.return, r, a);\n }\n function ee(t, r, a, l, c, d) {\n var h = t.memoizedState;\n h === null ? t.memoizedState = {\n isBackwards: r,\n rendering: null,\n renderingStartTime: 0,\n last: l,\n tail: a,\n tailMode: c,\n treeForkCount: d\n } : (h.isBackwards = r, h.rendering = null, h.renderingStartTime = 0, h.last = l, h.tail = a, h.tailMode = c, h.treeForkCount = d);\n }\n function N(t, r, a) {\n var l = r.pendingProps,\n c = l.revealOrder,\n d = l.tail;\n l = l.children;\n var h = ln.current,\n y = (h & 2) !== 0;\n if (y ? (h = h & 1 | 2, r.flags |= 128) : h &= 1, Ce(ln, h), wn(t, r, l, a), l = ue ? x : 0, !y && t !== null && (t.flags & 128) !== 0) e: for (t = r.child; t !== null;) {\n if (t.tag === 13) t.memoizedState !== null && us(t, a, r);else if (t.tag === 19) us(t, a, r);else if (t.child !== null) {\n t.child.return = t, t = t.child;\n continue;\n }\n if (t === r) break e;\n for (; t.sibling === null;) {\n if (t.return === null || t.return === r) break e;\n t = t.return;\n }\n t.sibling.return = t.return, t = t.sibling;\n }\n switch (c) {\n case \"forwards\":\n for (a = r.child, c = null; a !== null;) t = a.alternate, t !== null && ko(t) === null && (c = a), a = a.sibling;\n a = c, a === null ? (c = r.child, r.child = null) : (c = a.sibling, a.sibling = null), ee(r, !1, c, a, d, l);\n break;\n case \"backwards\":\n case \"unstable_legacy-backwards\":\n for (a = null, c = r.child, r.child = null; c !== null;) {\n if (t = c.alternate, t !== null && ko(t) === null) {\n r.child = c;\n break;\n }\n t = c.sibling, c.sibling = a, a = c, c = t;\n }\n ee(r, !0, a, null, d, l);\n break;\n case \"together\":\n ee(r, !1, null, null, void 0, l);\n break;\n default:\n r.memoizedState = null;\n }\n return r.child;\n }\n function gt(t, r, a) {\n if (t !== null && (r.dependencies = t.dependencies), ba |= r.lanes, (a & r.childLanes) === 0) if (t !== null) {\n if (po(t, r, a, !1), (a & r.childLanes) === 0) return null;\n } else return null;\n if (t !== null && r.child !== t.child) throw Error(F(153));\n if (r.child !== null) {\n for (t = r.child, a = Qr(t, t.pendingProps), r.child = a, a.return = r; t.sibling !== null;) t = t.sibling, a = a.sibling = Qr(t, t.pendingProps), a.return = r;\n a.sibling = null;\n }\n return r.child;\n }\n function Mi(t, r) {\n return (t.lanes & r) !== 0 ? !0 : (t = t.dependencies, !!(t !== null && Ri(t)));\n }\n function Ye(t, r, a) {\n switch (r.tag) {\n case 3:\n Al(r, r.stateNode.containerInfo), fo(r, qe, t.memoizedState.cache), _a();\n break;\n case 27:\n case 5:\n yu(r);\n break;\n case 4:\n Al(r, r.stateNode.containerInfo);\n break;\n case 10:\n fo(r, r.type, r.memoizedProps.value);\n break;\n case 31:\n if (r.memoizedState !== null) return r.flags |= 128, Ni(r), null;\n break;\n case 13:\n var l = r.memoizedState;\n if (l !== null) return l.dehydrated !== null ? (vo(r), r.flags |= 128, null) : (a & r.child.childLanes) !== 0 ? Wu(t, r, a) : (vo(r), t = gt(t, r, a), t !== null ? t.sibling : null);\n vo(r);\n break;\n case 19:\n var c = (t.flags & 128) !== 0;\n if (l = (a & r.childLanes) !== 0, l || (po(t, r, a, !1), l = (a & r.childLanes) !== 0), c) {\n if (l) return N(t, r, a);\n r.flags |= 128;\n }\n if (c = r.memoizedState, c !== null && (c.rendering = null, c.tail = null, c.lastEffect = null), Ce(ln, ln.current), l) break;\n return null;\n case 22:\n return r.lanes = 0, zo(t, r, a, r.pendingProps);\n case 24:\n fo(r, qe, t.memoizedState.cache);\n }\n return gt(t, r, a);\n }\n function Bu(t, r, a) {\n if (t !== null) {\n if (t.memoizedProps !== r.pendingProps) hn = !0;else {\n if (!Mi(t, a) && (r.flags & 128) === 0) return hn = !1, Ye(t, r, a);\n hn = (t.flags & 131072) !== 0;\n }\n } else hn = !1, ue && (r.flags & 1048576) !== 0 && Ci(r, x, r.index);\n switch (r.lanes = 0, r.tag) {\n case 16:\n e: {\n var l = r.pendingProps;\n if (t = pt(r.elementType), r.type = t, typeof t == \"function\") ks(t) ? (l = Wr(t, l), r.tag = 1, r = Kd(null, r, t, l, a)) : (r.tag = 0, r = Yd(null, r, t, l, a));else {\n if (t != null) {\n var c = t.$$typeof;\n if (c === Zi) {\n r.tag = 11, r = as(null, r, t, l, a);\n break e;\n } else if (c === wf) {\n r.tag = 14, r = Au(null, r, t, l, a);\n break e;\n }\n }\n throw r = hu(t) || t, Error(F(306, r, \"\"));\n }\n }\n return r;\n case 0:\n return Yd(t, r, r.type, r.pendingProps, a);\n case 1:\n return l = r.type, c = Wr(l, r.pendingProps), Kd(t, r, l, c, a);\n case 3:\n e: {\n if (Al(r, r.stateNode.containerInfo), t === null) throw Error(F(387));\n var d = r.pendingProps;\n c = r.memoizedState, l = c.element, Ha(t, r), Aa(r, d, null, a);\n var h = r.memoizedState;\n if (d = h.cache, fo(r, qe, d), d !== c.cache && _i(r, [qe], a, !0), Li(), d = h.element, Hn && c.isDehydrated) {\n if (c = {\n element: d,\n isDehydrated: !1,\n cache: h.cache\n }, r.updateQueue.baseState = c, r.memoizedState = c, r.flags & 256) {\n r = Du(t, r, d, a);\n break e;\n } else if (d !== l) {\n l = ut(Error(F(424)), r), ct(l), r = Du(t, r, d, a);\n break e;\n } else for (Hn && (Ue = Pc(r.stateNode.containerInfo), bn = r, ue = !0, Do = null, Yt = !0), a = Oh(r, null, d, a), r.child = a; a;) a.flags = a.flags & -3 | 4096, a = a.sibling;\n } else {\n if (_a(), d === l) {\n r = gt(t, r, a);\n break e;\n }\n wn(t, r, d, a);\n }\n r = r.child;\n }\n return r;\n case 26:\n if (Gt) return ls(t, r), t === null ? (a = nl(r.type, null, r.pendingProps, null)) ? r.memoizedState = a : ue || (r.stateNode = Ah(r.type, r.pendingProps, pa.current, r)) : r.memoizedState = nl(r.type, t.memoizedProps, r.pendingProps, t.memoizedState), null;\n case 27:\n if (dn) return yu(r), t === null && dn && ue && (l = r.stateNode = _c(r.type, r.pendingProps, pa.current, Dn.current, !1), bn = r, Yt = !0, Ue = Um(r.type, l, Ue)), wn(t, r, r.pendingProps.children, a), ls(t, r), t === null && (r.flags |= 4194304), r.child;\n case 5:\n return t === null && ue && ($m(r.type, r.pendingProps, Dn.current), (c = l = Ue) && (l = Bm(l, r.type, r.pendingProps, Yt), l !== null ? (r.stateNode = l, bn = r, Ue = wc(l), Yt = !1, c = !0) : c = !1), c || ar(r)), yu(r), c = r.type, d = r.pendingProps, h = t !== null ? t.memoizedProps : null, l = d.children, Rs(c, d) ? l = null : h !== null && Rs(c, h) && (r.flags |= 32), r.memoizedState !== null && (c = $l(t, r, zu, null, null, a), qt ? da._currentValue = c : da._currentValue2 = c), ls(t, r), wn(t, r, l, a), r.child;\n case 6:\n return t === null && ue && (jf(r.pendingProps, Dn.current), (t = a = Ue) && (a = Ph(a, r.pendingProps, Yt), a !== null ? (r.stateNode = a, bn = r, Ue = null, t = !0) : t = !1), t || ar(r)), null;\n case 13:\n return Wu(t, r, a);\n case 4:\n return Al(r, r.stateNode.containerInfo), l = r.pendingProps, t === null ? r.child = ri(r, null, l, a) : wn(t, r, l, a), r.child;\n case 11:\n return as(t, r, r.type, r.pendingProps, a);\n case 7:\n return wn(t, r, r.pendingProps, a), r.child;\n case 8:\n return wn(t, r, r.pendingProps.children, a), r.child;\n case 12:\n return wn(t, r, r.pendingProps.children, a), r.child;\n case 10:\n return l = r.pendingProps, fo(r, r.type, l.value), wn(t, r, l.children, a), r.child;\n case 9:\n return c = r.type._context, l = r.pendingProps.children, Un(r), c = In(c), l = l(c), r.flags |= 1, wn(t, r, l, a), r.child;\n case 14:\n return Au(t, r, r.type, r.pendingProps, a);\n case 15:\n return ju(t, r, r.type, r.pendingProps, a);\n case 19:\n return N(t, r, a);\n case 31:\n return is(t, r, a);\n case 22:\n return zo(t, r, a, r.pendingProps);\n case 24:\n return Un(r), l = In(qe), t === null ? (c = wu(), c === null && (c = Ne, d = Fd(), c.pooledCache = d, d.refCount++, d !== null && (c.pooledCacheLanes |= a), c = d), r.memoizedState = {\n parent: l,\n cache: c\n }, Ol(r), fo(r, qe, c)) : ((t.lanes & a) !== 0 && (Ha(t, r), Aa(r, null, null, a), Li()), c = t.memoizedState, d = r.memoizedState, c.parent !== l ? (c = {\n parent: l,\n cache: l\n }, r.memoizedState = c, r.lanes === 0 && (r.memoizedState = r.updateQueue.baseState = c), fo(r, qe, l)) : (l = d.cache, fo(r, qe, l), l !== c.cache && _i(r, [qe], a, !0))), wn(t, r, r.pendingProps.children, a), r.child;\n case 29:\n throw r.pendingProps;\n }\n throw Error(F(156, r.tag));\n }\n function It(t) {\n t.flags |= 4;\n }\n function cs(t) {\n Sr && (t.flags |= 8);\n }\n function Ou(t, r) {\n if (t !== null && t.child === r.child) return !1;\n if ((r.flags & 16) !== 0) return !0;\n for (t = r.child; t !== null;) {\n if ((t.flags & 8218) !== 0 || (t.subtreeFlags & 8218) !== 0) return !0;\n t = t.sibling;\n }\n return !1;\n }\n function ef(t, r, a, l) {\n if ($n) for (a = r.child; a !== null;) {\n if (a.tag === 5 || a.tag === 6) yc(t, a.stateNode);else if (!(a.tag === 4 || dn && a.tag === 27) && a.child !== null) {\n a.child.return = a, a = a.child;\n continue;\n }\n if (a === r) break;\n for (; a.sibling === null;) {\n if (a.return === null || a.return === r) return;\n a = a.return;\n }\n a.sibling.return = a.return, a = a.sibling;\n } else if (Sr) for (var c = r.child; c !== null;) {\n if (c.tag === 5) {\n var d = c.stateNode;\n a && l && (d = No(d, c.type, c.memoizedProps)), yc(t, d);\n } else if (c.tag === 6) d = c.stateNode, a && l && (d = Ls(d, c.memoizedProps)), yc(t, d);else if (c.tag !== 4) {\n if (c.tag === 22 && c.memoizedState !== null) d = c.child, d !== null && (d.return = c), ef(t, c, !0, !0);else if (c.child !== null) {\n c.child.return = c, c = c.child;\n continue;\n }\n }\n if (c === r) break;\n for (; c.sibling === null;) {\n if (c.return === null || c.return === r) return;\n c = c.return;\n }\n c.sibling.return = c.return, c = c.sibling;\n }\n }\n function Mu(t, r, a, l) {\n var c = !1;\n if (Sr) for (var d = r.child; d !== null;) {\n if (d.tag === 5) {\n var h = d.stateNode;\n a && l && (h = No(h, d.type, d.memoizedProps)), Lf(t, h);\n } else if (d.tag === 6) h = d.stateNode, a && l && (h = Ls(h, d.memoizedProps)), Lf(t, h);else if (d.tag !== 4) {\n if (d.tag === 22 && d.memoizedState !== null) c = d.child, c !== null && (c.return = d), Mu(t, d, !0, !0), c = !0;else if (d.child !== null) {\n d.child.return = d, d = d.child;\n continue;\n }\n }\n if (d === r) break;\n for (; d.sibling === null;) {\n if (d.return === null || d.return === r) return c;\n d = d.return;\n }\n d.sibling.return = d.return, d = d.sibling;\n }\n return c;\n }\n function Qu(t, r) {\n if (Sr && Ou(t, r)) {\n t = r.stateNode;\n var a = t.containerInfo,\n l = We();\n Mu(l, r, !1, !1), t.pendingChildren = l, It(r), yh(a, l);\n }\n }\n function ds(t, r, a, l) {\n if ($n) t.memoizedProps !== l && It(r);else if (Sr) {\n var c = t.stateNode,\n d = t.memoizedProps;\n if ((t = Ou(t, r)) || d !== l) {\n var h = Dn.current;\n d = gh(c, a, d, l, !t, null), d === c ? r.stateNode = c : (cs(r), Kp(d, a, l, h) && It(r), r.stateNode = d, t && ef(d, r, !1, !1));\n } else r.stateNode = c;\n }\n }\n function Fn(t, r, a, l, c) {\n if ((t.mode & 32) !== 0 && (a === null ? rh(r, l) : Dm(r, a, l))) {\n if (t.flags |= 16777216, (c & 335544128) === c || Yi(r, l)) if (An(t.stateNode, r, l)) t.flags |= 8192;else if (Vp()) t.flags |= 8192;else throw Xt = Dc, Ac;\n } else t.flags &= -16777217;\n }\n function xe(t, r) {\n if (Vm(r)) {\n if (t.flags |= 16777216, !Tc(r)) if (Vp()) t.flags |= 8192;else throw Xt = Dc, Ac;\n } else t.flags &= -16777217;\n }\n function Ba(t, r) {\n r !== null && (t.flags |= 4), t.flags & 16384 && (r = t.tag !== 22 ? Ed() : 536870912, t.lanes |= r, hl |= r);\n }\n function Co(t, r) {\n if (!ue) switch (t.tailMode) {\n case \"hidden\":\n r = t.tail;\n for (var a = null; r !== null;) r.alternate !== null && (a = r), r = r.sibling;\n a === null ? t.tail = null : a.sibling = null;\n break;\n case \"collapsed\":\n a = t.tail;\n for (var l = null; a !== null;) a.alternate !== null && (l = a), a = a.sibling;\n l === null ? r || t.tail === null ? t.tail = null : t.tail.sibling = null : l.sibling = null;\n }\n }\n function we(t) {\n var r = t.alternate !== null && t.alternate.child === t.child,\n a = 0,\n l = 0;\n if (r) for (var c = t.child; c !== null;) a |= c.lanes | c.childLanes, l |= c.subtreeFlags & 65011712, l |= c.flags & 65011712, c.return = t, c = c.sibling;else for (c = t.child; c !== null;) a |= c.lanes | c.childLanes, l |= c.subtreeFlags, l |= c.flags, c.return = t, c = c.sibling;\n return t.subtreeFlags |= l, t.childLanes = a, r;\n }\n function Oa(t, r, a) {\n var l = r.pendingProps;\n switch (gu(r), r.tag) {\n case 16:\n case 15:\n case 0:\n case 11:\n case 7:\n case 8:\n case 12:\n case 9:\n case 14:\n return we(r), null;\n case 1:\n return we(r), null;\n case 3:\n return a = r.stateNode, l = null, t !== null && (l = t.memoizedState.cache), r.memoizedState.cache !== l && (r.flags |= 2048), En(qe), Xo(), a.pendingContext && (a.context = a.pendingContext, a.pendingContext = null), (t === null || t.child === null) && (Ti(r) ? It(r) : t === null || t.memoizedState.isDehydrated && (r.flags & 256) === 0 || (r.flags |= 1024, Dl())), Qu(t, r), we(r), null;\n case 26:\n if (Gt) {\n var c = r.type,\n d = r.memoizedState;\n return t === null ? (It(r), d !== null ? (we(r), xe(r, d)) : (we(r), Fn(r, c, null, l, a))) : d ? d !== t.memoizedState ? (It(r), we(r), xe(r, d)) : (we(r), r.flags &= -16777217) : (d = t.memoizedProps, $n ? d !== l && It(r) : ds(t, r, c, l), we(r), Fn(r, c, d, l, a)), null;\n }\n case 27:\n if (dn) {\n if (jl(r), a = pa.current, c = r.type, t !== null && r.stateNode != null) $n ? t.memoizedProps !== l && It(r) : ds(t, r, c, l);else {\n if (!l) {\n if (r.stateNode === null) throw Error(F(166));\n return we(r), null;\n }\n t = Dn.current, Ti(r) ? Ep(r, t) : (t = _c(c, l, a, t, !0), r.stateNode = t, It(r));\n }\n return we(r), null;\n }\n case 5:\n if (jl(r), c = r.type, t !== null && r.stateNode != null) ds(t, r, c, l);else {\n if (!l) {\n if (r.stateNode === null) throw Error(F(166));\n return we(r), null;\n }\n if (d = Dn.current, Ti(r)) Ep(r, d), Eh(r.stateNode, c, l, d) && (r.flags |= 64);else {\n var h = Vr(c, l, pa.current, d, r);\n cs(r), ef(h, r, !1, !1), r.stateNode = h, Kp(h, c, l, d) && It(r);\n }\n }\n return we(r), Fn(r, r.type, t === null ? null : t.memoizedProps, r.pendingProps, a), null;\n case 6:\n if (t && r.stateNode != null) a = t.memoizedProps, $n ? a !== l && It(r) : Sr && (a !== l ? (t = pa.current, a = Dn.current, cs(r), r.stateNode = bc(l, t, a, r)) : r.stateNode = t.stateNode);else {\n if (typeof l != \"string\" && r.stateNode === null) throw Error(F(166));\n if (t = pa.current, a = Dn.current, Ti(r)) {\n if (!Hn) throw Error(F(176));\n if (t = r.stateNode, a = r.memoizedProps, l = null, c = bn, c !== null) switch (c.tag) {\n case 27:\n case 5:\n l = c.memoizedProps;\n }\n xc(t, a, r, l) || ar(r, !0);\n } else cs(r), r.stateNode = bc(l, t, a, r);\n }\n return we(r), null;\n case 31:\n if (a = r.memoizedState, t === null || t.memoizedState !== null) {\n if (l = Ti(r), a !== null) {\n if (t === null) {\n if (!l) throw Error(F(318));\n if (!Hn) throw Error(F(556));\n if (t = r.memoizedState, t = t !== null ? t.dehydrated : null, !t) throw Error(F(557));\n zh(t, r);\n } else _a(), (r.flags & 128) === 0 && (r.memoizedState = null), r.flags |= 4;\n we(r), t = !1;\n } else a = Dl(), t !== null && t.memoizedState !== null && (t.memoizedState.hydrationErrors = a), t = !0;\n if (!t) return r.flags & 256 ? (ht(r), r) : (ht(r), null);\n if ((r.flags & 128) !== 0) throw Error(F(558));\n }\n return we(r), null;\n case 13:\n if (l = r.memoizedState, t === null || t.memoizedState !== null && t.memoizedState.dehydrated !== null) {\n if (c = Ti(r), l !== null && l.dehydrated !== null) {\n if (t === null) {\n if (!c) throw Error(F(318));\n if (!Hn) throw Error(F(344));\n if (c = r.memoizedState, c = c !== null ? c.dehydrated : null, !c) throw Error(F(317));\n Hf(c, r);\n } else _a(), (r.flags & 128) === 0 && (r.memoizedState = null), r.flags |= 4;\n we(r), c = !1;\n } else c = Dl(), t !== null && t.memoizedState !== null && (t.memoizedState.hydrationErrors = c), c = !0;\n if (!c) return r.flags & 256 ? (ht(r), r) : (ht(r), null);\n }\n return ht(r), (r.flags & 128) !== 0 ? (r.lanes = a, r) : (a = l !== null, t = t !== null && t.memoizedState !== null, a && (l = r.child, c = null, l.alternate !== null && l.alternate.memoizedState !== null && l.alternate.memoizedState.cachePool !== null && (c = l.alternate.memoizedState.cachePool.pool), d = null, l.memoizedState !== null && l.memoizedState.cachePool !== null && (d = l.memoizedState.cachePool.pool), d !== c && (l.flags |= 2048)), a !== t && a && (r.child.flags |= 8192), Ba(r, r.updateQueue), we(r), null);\n case 4:\n return Xo(), Qu(t, r), t === null && jm(r.stateNode.containerInfo), we(r), null;\n case 10:\n return En(r.type), we(r), null;\n case 19:\n if (D(ln), l = r.memoizedState, l === null) return we(r), null;\n if (c = (r.flags & 128) !== 0, d = l.rendering, d === null) {\n if (c) Co(l, !1);else {\n if (Xe !== 0 || t !== null && (t.flags & 128) !== 0) for (t = r.child; t !== null;) {\n if (d = ko(t), d !== null) {\n for (r.flags |= 128, Co(l, !1), t = d.updateQueue, r.updateQueue = t, Ba(r, t), r.subtreeFlags = 0, t = a, a = r.child; a !== null;) yf(a, t), a = a.sibling;\n return Ce(ln, ln.current & 1 | 2), ue && or(r, l.treeForkCount), r.child;\n }\n t = t.sibling;\n }\n l.tail !== null && ze() > ml && (r.flags |= 128, c = !0, Co(l, !1), r.lanes = 4194304);\n }\n } else {\n if (!c) if (t = ko(d), t !== null) {\n if (r.flags |= 128, c = !0, t = t.updateQueue, r.updateQueue = t, Ba(r, t), Co(l, !0), l.tail === null && l.tailMode === \"hidden\" && !d.alternate && !ue) return we(r), null;\n } else 2 * ze() - l.renderingStartTime > ml && a !== 536870912 && (r.flags |= 128, c = !0, Co(l, !1), r.lanes = 4194304);\n l.isBackwards ? (d.sibling = r.child, r.child = d) : (t = l.last, t !== null ? t.sibling = d : r.child = d, l.last = d);\n }\n return l.tail !== null ? (t = l.tail, l.rendering = t, l.tail = t.sibling, l.renderingStartTime = ze(), t.sibling = null, a = ln.current, Ce(ln, c ? a & 1 | 2 : a & 1), ue && or(r, l.treeForkCount), t) : (we(r), null);\n case 22:\n case 23:\n return ht(r), bo(), l = r.memoizedState !== null, t !== null ? t.memoizedState !== null !== l && (r.flags |= 8192) : l && (r.flags |= 8192), l ? (a & 536870912) !== 0 && (r.flags & 128) === 0 && (we(r), r.subtreeFlags & 6 && (r.flags |= 8192)) : we(r), a = r.updateQueue, a !== null && Ba(r, a.retryQueue), a = null, t !== null && t.memoizedState !== null && t.memoizedState.cachePool !== null && (a = t.memoizedState.cachePool.pool), l = null, r.memoizedState !== null && r.memoizedState.cachePool !== null && (l = r.memoizedState.cachePool.pool), l !== a && (r.flags |= 2048), t !== null && D(ha), null;\n case 24:\n return a = null, t !== null && (a = t.memoizedState.cache), r.memoizedState.cache !== a && (r.flags |= 2048), En(qe), we(r), null;\n case 25:\n return null;\n case 30:\n return null;\n }\n throw Error(F(156, r.tag));\n }\n function gr(t, r) {\n switch (gu(r), r.tag) {\n case 1:\n return t = r.flags, t & 65536 ? (r.flags = t & -65537 | 128, r) : null;\n case 3:\n return En(qe), Xo(), t = r.flags, (t & 65536) !== 0 && (t & 128) === 0 ? (r.flags = t & -65537 | 128, r) : null;\n case 26:\n case 27:\n case 5:\n return jl(r), null;\n case 31:\n if (r.memoizedState !== null) {\n if (ht(r), r.alternate === null) throw Error(F(340));\n _a();\n }\n return t = r.flags, t & 65536 ? (r.flags = t & -65537 | 128, r) : null;\n case 13:\n if (ht(r), t = r.memoizedState, t !== null && t.dehydrated !== null) {\n if (r.alternate === null) throw Error(F(340));\n _a();\n }\n return t = r.flags, t & 65536 ? (r.flags = t & -65537 | 128, r) : null;\n case 19:\n return D(ln), null;\n case 4:\n return Xo(), null;\n case 10:\n return En(r.type), null;\n case 22:\n case 23:\n return ht(r), bo(), t !== null && D(ha), t = r.flags, t & 65536 ? (r.flags = t & -65537 | 128, r) : null;\n case 24:\n return En(qe), null;\n case 25:\n return null;\n default:\n return null;\n }\n }\n function $u(t, r) {\n switch (gu(r), r.tag) {\n case 3:\n En(qe), Xo();\n break;\n case 26:\n case 27:\n case 5:\n jl(r);\n break;\n case 4:\n Xo();\n break;\n case 31:\n r.memoizedState !== null && ht(r);\n break;\n case 13:\n ht(r);\n break;\n case 19:\n D(ln);\n break;\n case 10:\n En(r.type);\n break;\n case 22:\n case 23:\n ht(r), bo(), t !== null && D(ha);\n break;\n case 24:\n En(qe);\n }\n }\n function Br(t, r) {\n try {\n var a = r.updateQueue,\n l = a !== null ? a.lastEffect : null;\n if (l !== null) {\n var c = l.next;\n a = c;\n do {\n if ((a.tag & t) === t) {\n l = void 0;\n var d = a.create,\n h = a.inst;\n l = d(), h.destroy = l;\n }\n a = a.next;\n } while (a !== c);\n }\n } catch (y) {\n ve(r, r.return, y);\n }\n }\n function Or(t, r, a) {\n try {\n var l = r.updateQueue,\n c = l !== null ? l.lastEffect : null;\n if (c !== null) {\n var d = c.next;\n l = d;\n do {\n if ((l.tag & t) === t) {\n var h = l.inst,\n y = h.destroy;\n if (y !== void 0) {\n h.destroy = void 0, c = r;\n var R = a,\n L = y;\n try {\n L();\n } catch (j) {\n ve(c, R, j);\n }\n }\n }\n l = l.next;\n } while (l !== d);\n }\n } catch (j) {\n ve(r, r.return, j);\n }\n }\n function Qi(t) {\n var r = t.updateQueue;\n if (r !== null) {\n var a = t.stateNode;\n try {\n Fp(r, a);\n } catch (l) {\n ve(t, t.return, l);\n }\n }\n }\n function Vu(t, r, a) {\n a.props = Wr(t.type, t.memoizedProps), a.state = t.memoizedState;\n try {\n a.componentWillUnmount();\n } catch (l) {\n ve(t, r, l);\n }\n }\n function ta(t, r) {\n try {\n var a = t.ref;\n if (a !== null) {\n switch (t.tag) {\n case 26:\n case 27:\n case 5:\n var l = Ts(t.stateNode);\n break;\n case 30:\n l = t.stateNode;\n break;\n default:\n l = t.stateNode;\n }\n typeof a == \"function\" ? t.refCleanup = a(l) : a.current = l;\n }\n } catch (c) {\n ve(t, r, c);\n }\n }\n function yr(t, r) {\n var a = t.ref,\n l = t.refCleanup;\n if (a !== null) if (typeof l == \"function\") try {\n l();\n } catch (c) {\n ve(t, r, c);\n } finally {\n t.refCleanup = null, t = t.alternate, t != null && (t.refCleanup = null);\n } else if (typeof a == \"function\") try {\n a(null);\n } catch (c) {\n ve(t, r, c);\n } else a.current = null;\n }\n function nf(t) {\n var r = t.type,\n a = t.memoizedProps,\n l = t.stateNode;\n try {\n dh(l, r, a, t);\n } catch (c) {\n ve(t, t.return, c);\n }\n }\n function qu(t, r, a) {\n try {\n vc(t.stateNode, t.type, a, r, t);\n } catch (l) {\n ve(t, t.return, l);\n }\n }\n function tf(t) {\n return t.tag === 5 || t.tag === 3 || (Gt ? t.tag === 26 : !1) || (dn ? t.tag === 27 && Xa(t.type) : !1) || t.tag === 4;\n }\n function Gu(t) {\n e: for (;;) {\n for (; t.sibling === null;) {\n if (t.return === null || tf(t.return)) return null;\n t = t.return;\n }\n for (t.sibling.return = t.return, t = t.sibling; t.tag !== 5 && t.tag !== 6 && t.tag !== 18;) {\n if (dn && t.tag === 27 && Xa(t.type) || t.flags & 2 || t.child === null || t.tag === 4) continue e;\n t.child.return = t, t = t.child;\n }\n if (!(t.flags & 2)) return t.stateNode;\n }\n }\n function fs(t, r, a) {\n var l = t.tag;\n if (l === 5 || l === 6) t = t.stateNode, r ? ph(a, t, r) : ch(a, t);else if (l !== 4 && (dn && l === 27 && Xa(t.type) && (a = t.stateNode, r = null), t = t.child, t !== null)) for (fs(t, r, a), t = t.sibling; t !== null;) fs(t, r, a), t = t.sibling;\n }\n function $i(t, r, a) {\n var l = t.tag;\n if (l === 5 || l === 6) t = t.stateNode, r ? fh(a, t, r) : uh(a, t);else if (l !== 4 && (dn && l === 27 && Xa(t.type) && (a = t.stateNode), t = t.child, t !== null)) for ($i(t, r, a), t = t.sibling; t !== null;) $i(t, r, a), t = t.sibling;\n }\n function Ju(t, r, a) {\n t = t.containerInfo;\n try {\n bh(t, a);\n } catch (l) {\n ve(r, r.return, l);\n }\n }\n function rf(t) {\n var r = t.stateNode,\n a = t.memoizedProps;\n try {\n Rc(t.type, a, r, t);\n } catch (l) {\n ve(t, t.return, l);\n }\n }\n function Wp(t, r) {\n for (Am(t.containerInfo), Pn = r; Pn !== null;) if (t = Pn, r = t.child, (t.subtreeFlags & 1028) !== 0 && r !== null) r.return = t, Pn = r;else for (; Pn !== null;) {\n t = Pn;\n var a = t.alternate;\n switch (r = t.flags, t.tag) {\n case 0:\n if ((r & 4) !== 0 && (r = t.updateQueue, r = r !== null ? r.events : null, r !== null)) for (var l = 0; l < r.length; l++) {\n var c = r[l];\n c.ref.impl = c.nextImpl;\n }\n break;\n case 11:\n case 15:\n break;\n case 1:\n if ((r & 1024) !== 0 && a !== null) {\n r = void 0, l = t, c = a.memoizedProps, a = a.memoizedState;\n var d = l.stateNode;\n try {\n var h = Wr(l.type, c);\n r = d.getSnapshotBeforeUpdate(h, a), d.__reactInternalSnapshotBeforeUpdate = r;\n } catch (y) {\n ve(l, l.return, y);\n }\n }\n break;\n case 3:\n (r & 1024) !== 0 && $n && Nt(t.stateNode.containerInfo);\n break;\n case 5:\n case 26:\n case 27:\n case 6:\n case 4:\n case 17:\n break;\n default:\n if ((r & 1024) !== 0) throw Error(F(163));\n }\n if (r = t.sibling, r !== null) {\n r.return = t.return, Pn = r;\n break;\n }\n Pn = t.return;\n }\n }\n function of(t, r, a) {\n var l = a.flags;\n switch (a.tag) {\n case 0:\n case 11:\n case 15:\n $t(t, a), l & 4 && Br(5, a);\n break;\n case 1:\n if ($t(t, a), l & 4) if (t = a.stateNode, r === null) try {\n t.componentDidMount();\n } catch (h) {\n ve(a, a.return, h);\n } else {\n var c = Wr(a.type, r.memoizedProps);\n r = r.memoizedState;\n try {\n t.componentDidUpdate(c, r, t.__reactInternalSnapshotBeforeUpdate);\n } catch (h) {\n ve(a, a.return, h);\n }\n }\n l & 64 && Qi(a), l & 512 && ta(a, a.return);\n break;\n case 3:\n if ($t(t, a), l & 64 && (l = a.updateQueue, l !== null)) {\n if (t = null, a.child !== null) switch (a.child.tag) {\n case 27:\n case 5:\n t = Ts(a.child.stateNode);\n break;\n case 1:\n t = a.child.stateNode;\n }\n try {\n Fp(l, t);\n } catch (h) {\n ve(a, a.return, h);\n }\n }\n break;\n case 27:\n dn && r === null && l & 4 && rf(a);\n case 26:\n case 5:\n if ($t(t, a), r === null) {\n if (l & 4) nf(a);else if (l & 64) {\n t = a.type, r = a.memoizedProps, c = a.stateNode;\n try {\n _h(c, t, r, a);\n } catch (h) {\n ve(a, a.return, h);\n }\n }\n }\n l & 512 && ta(a, a.return);\n break;\n case 12:\n $t(t, a);\n break;\n case 31:\n $t(t, a), l & 4 && af(t, a);\n break;\n case 13:\n $t(t, a), l & 4 && Yu(t, a), l & 64 && (l = a.memoizedState, l !== null && (l = l.dehydrated, l !== null && (a = sc.bind(null, a), Xi(l, a))));\n break;\n case 22:\n if (l = a.memoizedState !== null || eo, !l) {\n r = r !== null && r.memoizedState !== null || sn, c = eo;\n var d = sn;\n eo = l, (sn = r) && !d ? br(t, a, (a.subtreeFlags & 8772) !== 0) : $t(t, a), eo = c, sn = d;\n }\n break;\n case 30:\n break;\n default:\n $t(t, a);\n }\n }\n function Up(t) {\n var r = t.alternate;\n r !== null && (t.alternate = null, Up(r)), t.child = null, t.deletions = null, t.sibling = null, t.tag === 5 && (r = t.stateNode, r !== null && th(r)), t.stateNode = null, t.return = null, t.dependencies = null, t.memoizedProps = null, t.memoizedState = null, t.pendingProps = null, t.stateNode = null, t.updateQueue = null;\n }\n function Qt(t, r, a) {\n for (a = a.child; a !== null;) Zu(t, r, a), a = a.sibling;\n }\n function Zu(t, r, a) {\n if (on && typeof on.onCommitFiberUnmount == \"function\") try {\n on.onCommitFiberUnmount(ei, a);\n } catch {}\n switch (a.tag) {\n case 26:\n if (Gt) {\n sn || yr(a, r), Qt(t, r, a), a.memoizedState ? Hh(a.memoizedState) : a.stateNode && Wf(a.stateNode);\n break;\n }\n case 27:\n if (dn) {\n sn || yr(a, r);\n var l = mn,\n c = Pt;\n Xa(a.type) && (mn = a.stateNode, Pt = !1), Qt(t, r, a), fa(a.stateNode), mn = l, Pt = c;\n break;\n }\n case 5:\n sn || yr(a, r);\n case 6:\n if ($n) {\n if (l = mn, c = Pt, mn = null, Qt(t, r, a), mn = l, Pt = c, mn !== null) if (Pt) try {\n If(mn, a.stateNode);\n } catch (d) {\n ve(a, r, d);\n } else try {\n Ef(mn, a.stateNode);\n } catch (d) {\n ve(a, r, d);\n }\n } else Qt(t, r, a);\n break;\n case 18:\n $n && mn !== null && (Pt ? Af(mn, a.stateNode) : Se(mn, a.stateNode));\n break;\n case 4:\n $n ? (l = mn, c = Pt, mn = a.stateNode.containerInfo, Pt = !0, Qt(t, r, a), mn = l, Pt = c) : (Sr && Ju(a.stateNode, a, We()), Qt(t, r, a));\n break;\n case 0:\n case 11:\n case 14:\n case 15:\n Or(2, a, r), sn || Or(4, a, r), Qt(t, r, a);\n break;\n case 1:\n sn || (yr(a, r), l = a.stateNode, typeof l.componentWillUnmount == \"function\" && Vu(a, r, l)), Qt(t, r, a);\n break;\n case 21:\n Qt(t, r, a);\n break;\n case 22:\n sn = (l = sn) || a.memoizedState !== null, Qt(t, r, a), sn = l;\n break;\n default:\n Qt(t, r, a);\n }\n }\n function af(t, r) {\n if (Hn && r.memoizedState === null && (t = r.alternate, t !== null && (t = t.memoizedState, t !== null))) {\n t = t.dehydrated;\n try {\n Rh(t);\n } catch (a) {\n ve(r, r.return, a);\n }\n }\n }\n function Yu(t, r) {\n if (Hn && r.memoizedState === null && (t = r.alternate, t !== null && (t = t.memoizedState, t !== null && (t = t.dehydrated, t !== null)))) try {\n el(t);\n } catch (a) {\n ve(r, r.return, a);\n }\n }\n function Bp(t) {\n switch (t.tag) {\n case 31:\n case 13:\n case 19:\n var r = t.stateNode;\n return r === null && (r = t.stateNode = new $c()), r;\n case 22:\n return t = t.stateNode, r = t._retryCache, r === null && (r = t._retryCache = new $c()), r;\n default:\n throw Error(F(435, t.tag));\n }\n }\n function ps(t, r) {\n var a = Bp(t);\n r.forEach(function (l) {\n if (!a.has(l)) {\n a.add(l);\n var c = Zp.bind(null, t, l);\n l.then(c, c);\n }\n });\n }\n function tn(t, r) {\n var a = r.deletions;\n if (a !== null) for (var l = 0; l < a.length; l++) {\n var c = a[l],\n d = t,\n h = r;\n if ($n) {\n var y = h;\n e: for (; y !== null;) {\n switch (y.tag) {\n case 27:\n if (dn) {\n if (Xa(y.type)) {\n mn = y.stateNode, Pt = !1;\n break e;\n }\n break;\n }\n case 5:\n mn = y.stateNode, Pt = !1;\n break e;\n case 3:\n case 4:\n mn = y.stateNode.containerInfo, Pt = !0;\n break e;\n }\n y = y.return;\n }\n if (mn === null) throw Error(F(160));\n Zu(d, h, c), mn = null, Pt = !1;\n } else Zu(d, h, c);\n d = c.alternate, d !== null && (d.return = null), c.return = null;\n }\n if (r.subtreeFlags & 13886) for (r = r.child; r !== null;) hs(r, t), r = r.sibling;\n }\n function hs(t, r) {\n var a = t.alternate,\n l = t.flags;\n switch (t.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n tn(r, t), Mn(t), l & 4 && (Or(3, t, t.return), Br(3, t), Or(5, t, t.return));\n break;\n case 1:\n tn(r, t), Mn(t), l & 512 && (sn || a === null || yr(a, a.return)), l & 64 && eo && (t = t.updateQueue, t !== null && (l = t.callbacks, l !== null && (a = t.shared.hiddenCallbacks, t.shared.hiddenCallbacks = a === null ? l : a.concat(l))));\n break;\n case 26:\n if (Gt) {\n var c = Cr;\n if (tn(r, t), Mn(t), l & 512 && (sn || a === null || yr(a, a.return)), l & 4) {\n l = a !== null ? a.memoizedState : null;\n var d = t.memoizedState;\n a === null ? d === null ? t.stateNode === null ? t.stateNode = Ya(c, t.type, t.memoizedProps, t) : Cc(c, t.type, t.stateNode) : t.stateNode = Fh(c, d, t.memoizedProps) : l !== d ? (l === null ? a.stateNode !== null && Wf(a.stateNode) : Hh(l), d === null ? Cc(c, t.type, t.stateNode) : Fh(c, d, t.memoizedProps)) : d === null && t.stateNode !== null && qu(t, t.memoizedProps, a.memoizedProps);\n }\n break;\n }\n case 27:\n if (dn) {\n tn(r, t), Mn(t), l & 512 && (sn || a === null || yr(a, a.return)), a !== null && l & 4 && qu(t, t.memoizedProps, a.memoizedProps);\n break;\n }\n case 5:\n if (tn(r, t), Mn(t), l & 512 && (sn || a === null || yr(a, a.return)), $n) {\n if (t.flags & 32) {\n c = t.stateNode;\n try {\n Sc(c);\n } catch (A) {\n ve(t, t.return, A);\n }\n }\n l & 4 && t.stateNode != null && (c = t.memoizedProps, qu(t, c, a !== null ? a.memoizedProps : c)), l & 1024 && (Ms = !0);\n } else Sr && t.alternate !== null && (t.alternate.stateNode = t.stateNode);\n break;\n case 6:\n if (tn(r, t), Mn(t), l & 4 && $n) {\n if (t.stateNode === null) throw Error(F(162));\n l = t.memoizedProps, a = a !== null ? a.memoizedProps : l, c = t.stateNode;\n try {\n Is(c, a, l);\n } catch (A) {\n ve(t, t.return, A);\n }\n }\n break;\n case 3:\n if (Gt ? (jh(), c = Cr, Cr = zc(r.containerInfo), tn(r, t), Cr = c) : tn(r, t), Mn(t), l & 4) {\n if ($n && Hn && a !== null && a.memoizedState.isDehydrated) try {\n Mm(r.containerInfo);\n } catch (A) {\n ve(t, t.return, A);\n }\n if (Sr) {\n l = r.containerInfo, a = r.pendingChildren;\n try {\n bh(l, a);\n } catch (A) {\n ve(t, t.return, A);\n }\n }\n }\n Ms && (Ms = !1, Op(t));\n break;\n case 4:\n Gt ? (a = Cr, Cr = zc(t.stateNode.containerInfo), tn(r, t), Mn(t), Cr = a) : (tn(r, t), Mn(t)), l & 4 && Sr && Ju(t.stateNode, t, t.stateNode.pendingChildren);\n break;\n case 12:\n tn(r, t), Mn(t);\n break;\n case 31:\n tn(r, t), Mn(t), l & 4 && (l = t.updateQueue, l !== null && (t.updateQueue = null, ps(t, l)));\n break;\n case 13:\n tn(r, t), Mn(t), t.child.flags & 8192 && t.memoizedState !== null != (a !== null && a.memoizedState !== null) && (Vs = ze()), l & 4 && (l = t.updateQueue, l !== null && (t.updateQueue = null, ps(t, l)));\n break;\n case 22:\n c = t.memoizedState !== null;\n var h = a !== null && a.memoizedState !== null,\n y = eo,\n R = sn;\n if (eo = y || c, sn = R || h, tn(r, t), sn = R, eo = y, Mn(t), l & 8192 && (r = t.stateNode, r._visibility = c ? r._visibility & -2 : r._visibility | 1, c && (a === null || h || eo || sn || Vt(t)), $n)) {\n e: if (a = null, $n) for (r = t;;) {\n if (r.tag === 5 || Gt && r.tag === 26) {\n if (a === null) {\n h = a = r;\n try {\n d = h.stateNode, c ? hh(d) : Wm(h.stateNode, h.memoizedProps);\n } catch (A) {\n ve(h, h.return, A);\n }\n }\n } else if (r.tag === 6) {\n if (a === null) {\n h = r;\n try {\n var L = h.stateNode;\n c ? kc(L) : mh(L, h.memoizedProps);\n } catch (A) {\n ve(h, h.return, A);\n }\n }\n } else if (r.tag === 18) {\n if (a === null) {\n h = r;\n try {\n var j = h.stateNode;\n c ? Qm(j) : Lh(h.stateNode);\n } catch (A) {\n ve(h, h.return, A);\n }\n }\n } else if ((r.tag !== 22 && r.tag !== 23 || r.memoizedState === null || r === t) && r.child !== null) {\n r.child.return = r, r = r.child;\n continue;\n }\n if (r === t) break e;\n for (; r.sibling === null;) {\n if (r.return === null || r.return === t) break e;\n a === r && (a = null), r = r.return;\n }\n a === r && (a = null), r.sibling.return = r.return, r = r.sibling;\n }\n }\n l & 4 && (l = t.updateQueue, l !== null && (a = l.retryQueue, a !== null && (l.retryQueue = null, ps(t, a))));\n break;\n case 19:\n tn(r, t), Mn(t), l & 4 && (l = t.updateQueue, l !== null && (t.updateQueue = null, ps(t, l)));\n break;\n case 30:\n break;\n case 21:\n break;\n default:\n tn(r, t), Mn(t);\n }\n }\n function Mn(t) {\n var r = t.flags;\n if (r & 2) {\n try {\n for (var a, l = t.return; l !== null;) {\n if (tf(l)) {\n a = l;\n break;\n }\n l = l.return;\n }\n if ($n) {\n if (a == null) throw Error(F(160));\n switch (a.tag) {\n case 27:\n if (dn) {\n var c = a.stateNode,\n d = Gu(t);\n $i(t, d, c);\n break;\n }\n case 5:\n var h = a.stateNode;\n a.flags & 32 && (Sc(h), a.flags &= -33);\n var y = Gu(t);\n $i(t, y, h);\n break;\n case 3:\n case 4:\n var R = a.stateNode.containerInfo,\n L = Gu(t);\n fs(t, L, R);\n break;\n default:\n throw Error(F(161));\n }\n }\n } catch (j) {\n ve(t, t.return, j);\n }\n t.flags &= -3;\n }\n r & 4096 && (t.flags &= -4097);\n }\n function Op(t) {\n if (t.subtreeFlags & 1024) for (t = t.child; t !== null;) {\n var r = t;\n Op(r), r.tag === 5 && r.flags & 1024 && qa(r.stateNode), t = t.sibling;\n }\n }\n function $t(t, r) {\n if (r.subtreeFlags & 8772) for (r = r.child; r !== null;) of(t, r.alternate, r), r = r.sibling;\n }\n function Vt(t) {\n for (t = t.child; t !== null;) {\n var r = t;\n switch (r.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n Or(4, r, r.return), Vt(r);\n break;\n case 1:\n yr(r, r.return);\n var a = r.stateNode;\n typeof a.componentWillUnmount == \"function\" && Vu(r, r.return, a), Vt(r);\n break;\n case 27:\n dn && fa(r.stateNode);\n case 26:\n case 5:\n yr(r, r.return), Vt(r);\n break;\n case 22:\n r.memoizedState === null && Vt(r);\n break;\n case 30:\n Vt(r);\n break;\n default:\n Vt(r);\n }\n t = t.sibling;\n }\n }\n function br(t, r, a) {\n for (a = a && (r.subtreeFlags & 8772) !== 0, r = r.child; r !== null;) {\n var l = r.alternate,\n c = t,\n d = r,\n h = d.flags;\n switch (d.tag) {\n case 0:\n case 11:\n case 15:\n br(c, d, a), Br(4, d);\n break;\n case 1:\n if (br(c, d, a), l = d, c = l.stateNode, typeof c.componentDidMount == \"function\") try {\n c.componentDidMount();\n } catch (L) {\n ve(l, l.return, L);\n }\n if (l = d, c = l.updateQueue, c !== null) {\n var y = l.stateNode;\n try {\n var R = c.shared.hiddenCallbacks;\n if (R !== null) for (c.shared.hiddenCallbacks = null, c = 0; c < R.length; c++) Dd(R[c], y);\n } catch (L) {\n ve(l, l.return, L);\n }\n }\n a && h & 64 && Qi(d), ta(d, d.return);\n break;\n case 27:\n dn && rf(d);\n case 26:\n case 5:\n br(c, d, a), a && l === null && h & 4 && nf(d), ta(d, d.return);\n break;\n case 12:\n br(c, d, a);\n break;\n case 31:\n br(c, d, a), a && h & 4 && af(c, d);\n break;\n case 13:\n br(c, d, a), a && h & 4 && Yu(c, d);\n break;\n case 22:\n d.memoizedState === null && br(c, d, a), ta(d, d.return);\n break;\n case 30:\n break;\n default:\n br(c, d, a);\n }\n r = r.sibling;\n }\n }\n function To(t, r) {\n var a = null;\n t !== null && t.memoizedState !== null && t.memoizedState.cachePool !== null && (a = t.memoizedState.cachePool.pool), t = null, r.memoizedState !== null && r.memoizedState.cachePool !== null && (t = r.memoizedState.cachePool.pool), t !== a && (t != null && t.refCount++, a != null && Ra(a));\n }\n function Qn(t, r) {\n t = null, r.alternate !== null && (t = r.alternate.memoizedState.cache), r = r.memoizedState.cache, r !== t && (r.refCount++, t != null && Ra(t));\n }\n function yt(t, r, a, l) {\n if (r.subtreeFlags & 10256) for (r = r.child; r !== null;) Mp(t, r, a, l), r = r.sibling;\n }\n function Mp(t, r, a, l) {\n var c = r.flags;\n switch (r.tag) {\n case 0:\n case 11:\n case 15:\n yt(t, r, a, l), c & 2048 && Br(9, r);\n break;\n case 1:\n yt(t, r, a, l);\n break;\n case 3:\n yt(t, r, a, l), c & 2048 && (t = null, r.alternate !== null && (t = r.alternate.memoizedState.cache), r = r.memoizedState.cache, r !== t && (r.refCount++, t != null && Ra(t)));\n break;\n case 12:\n if (c & 2048) {\n yt(t, r, a, l), t = r.stateNode;\n try {\n var d = r.memoizedProps,\n h = d.id,\n y = d.onPostCommit;\n typeof y == \"function\" && y(h, r.alternate === null ? \"mount\" : \"update\", t.passiveEffectDuration, -0);\n } catch (R) {\n ve(r, r.return, R);\n }\n } else yt(t, r, a, l);\n break;\n case 31:\n yt(t, r, a, l);\n break;\n case 13:\n yt(t, r, a, l);\n break;\n case 23:\n break;\n case 22:\n d = r.stateNode, h = r.alternate, r.memoizedState !== null ? d._visibility & 2 ? yt(t, r, a, l) : oa(t, r) : d._visibility & 2 ? yt(t, r, a, l) : (d._visibility |= 2, ra(t, r, a, l, (r.subtreeFlags & 10256) !== 0 || !1)), c & 2048 && To(h, r);\n break;\n case 24:\n yt(t, r, a, l), c & 2048 && Qn(r.alternate, r);\n break;\n default:\n yt(t, r, a, l);\n }\n }\n function ra(t, r, a, l, c) {\n for (c = c && ((r.subtreeFlags & 10256) !== 0 || !1), r = r.child; r !== null;) {\n var d = t,\n h = r,\n y = a,\n R = l,\n L = h.flags;\n switch (h.tag) {\n case 0:\n case 11:\n case 15:\n ra(d, h, y, R, c), Br(8, h);\n break;\n case 23:\n break;\n case 22:\n var j = h.stateNode;\n h.memoizedState !== null ? j._visibility & 2 ? ra(d, h, y, R, c) : oa(d, h) : (j._visibility |= 2, ra(d, h, y, R, c)), c && L & 2048 && To(h.alternate, h);\n break;\n case 24:\n ra(d, h, y, R, c), c && L & 2048 && Qn(h.alternate, h);\n break;\n default:\n ra(d, h, y, R, c);\n }\n r = r.sibling;\n }\n }\n function oa(t, r) {\n if (r.subtreeFlags & 10256) for (r = r.child; r !== null;) {\n var a = t,\n l = r,\n c = l.flags;\n switch (l.tag) {\n case 22:\n oa(a, l), c & 2048 && To(l.alternate, l);\n break;\n case 24:\n oa(a, l), c & 2048 && Qn(l.alternate, l);\n break;\n default:\n oa(a, l);\n }\n r = r.sibling;\n }\n }\n function _o(t, r, a) {\n if (t.subtreeFlags & ga) for (t = t.child; t !== null;) lf(t, r, a), t = t.sibling;\n }\n function lf(t, r, a) {\n switch (t.tag) {\n case 26:\n if (_o(t, r, a), t.flags & ga) if (t.memoizedState !== null) Fo(a, Cr, t.memoizedState, t.memoizedProps);else {\n var l = t.stateNode,\n c = t.type;\n t = t.memoizedProps, ((r & 335544128) === r || Yi(c, t)) && Vn(a, l, c, t);\n }\n break;\n case 5:\n _o(t, r, a), t.flags & ga && (l = t.stateNode, c = t.type, t = t.memoizedProps, ((r & 335544128) === r || Yi(c, t)) && Vn(a, l, c, t));\n break;\n case 3:\n case 4:\n Gt ? (l = Cr, Cr = zc(t.stateNode.containerInfo), _o(t, r, a), Cr = l) : _o(t, r, a);\n break;\n case 22:\n t.memoizedState === null && (l = t.alternate, l !== null && l.memoizedState !== null ? (l = ga, ga = 16777216, _o(t, r, a), ga = l) : _o(t, r, a));\n break;\n default:\n _o(t, r, a);\n }\n }\n function Xu(t) {\n var r = t.alternate;\n if (r !== null && (t = r.child, t !== null)) {\n r.child = null;\n do r = t.sibling, t.sibling = null, t = r; while (t !== null);\n }\n }\n function aa(t) {\n var r = t.deletions;\n if ((t.flags & 16) !== 0) {\n if (r !== null) for (var a = 0; a < r.length; a++) {\n var l = r[a];\n Pn = l, ec(l, t);\n }\n Xu(t);\n }\n if (t.subtreeFlags & 10256) for (t = t.child; t !== null;) Ku(t), t = t.sibling;\n }\n function Ku(t) {\n switch (t.tag) {\n case 0:\n case 11:\n case 15:\n aa(t), t.flags & 2048 && Or(9, t, t.return);\n break;\n case 3:\n aa(t);\n break;\n case 12:\n aa(t);\n break;\n case 22:\n var r = t.stateNode;\n t.memoizedState !== null && r._visibility & 2 && (t.return === null || t.return.tag !== 13) ? (r._visibility &= -3, Ma(t)) : aa(t);\n break;\n default:\n aa(t);\n }\n }\n function Ma(t) {\n var r = t.deletions;\n if ((t.flags & 16) !== 0) {\n if (r !== null) for (var a = 0; a < r.length; a++) {\n var l = r[a];\n Pn = l, ec(l, t);\n }\n Xu(t);\n }\n for (t = t.child; t !== null;) {\n switch (r = t, r.tag) {\n case 0:\n case 11:\n case 15:\n Or(8, r, r.return), Ma(r);\n break;\n case 22:\n a = r.stateNode, a._visibility & 2 && (a._visibility &= -3, Ma(r));\n break;\n default:\n Ma(r);\n }\n t = t.sibling;\n }\n }\n function ec(t, r) {\n for (; Pn !== null;) {\n var a = Pn;\n switch (a.tag) {\n case 0:\n case 11:\n case 15:\n Or(8, a, r);\n break;\n case 23:\n case 22:\n if (a.memoizedState !== null && a.memoizedState.cachePool !== null) {\n var l = a.memoizedState.cachePool.pool;\n l != null && l.refCount++;\n }\n break;\n case 24:\n Ra(a.memoizedState.cache);\n }\n if (l = a.child, l !== null) l.return = a, Pn = l;else e: for (a = t; Pn !== null;) {\n l = Pn;\n var c = l.sibling,\n d = l.return;\n if (Up(l), l === a) {\n Pn = null;\n break e;\n }\n if (c !== null) {\n c.return = d, Pn = c;\n break e;\n }\n Pn = d;\n }\n }\n }\n function Vi(t) {\n var r = nh(t);\n if (r != null) {\n if (typeof r.memoizedProps[\"data-testname\"] != \"string\") throw Error(F(364));\n return r;\n }\n if (t = Rf(t), t === null) throw Error(F(362));\n return t.stateNode.current;\n }\n function ms(t, r) {\n var a = t.tag;\n switch (r.$$typeof) {\n case Vc:\n if (t.type === r.value) return !0;\n break;\n case qc:\n e: {\n for (r = r.value, t = [t, 0], a = 0; a < t.length;) {\n var l = t[a++],\n c = l.tag,\n d = t[a++],\n h = r[d];\n if (c !== 5 && c !== 26 && c !== 27 || !Jr(l)) {\n for (; h != null && ms(l, h);) d++, h = r[d];\n if (d === r.length) {\n r = !0;\n break e;\n } else for (l = l.child; l !== null;) t.push(l, d), l = l.sibling;\n }\n }\n r = !1;\n }\n return r;\n case Gc:\n if ((a === 5 || a === 26 || a === 27) && sh(t.stateNode, r.value)) return !0;\n break;\n case Zc:\n if ((a === 5 || a === 6 || a === 26 || a === 27) && (t = lh(t), t !== null && 0 <= t.indexOf(r.value))) return !0;\n break;\n case Jc:\n if ((a === 5 || a === 26 || a === 27) && (t = t.memoizedProps[\"data-testname\"], typeof t == \"string\" && t.toLowerCase() === r.value.toLowerCase())) return !0;\n break;\n default:\n throw Error(F(365));\n }\n return !1;\n }\n function nc(t) {\n switch (t.$$typeof) {\n case Vc:\n return \"<\" + (hu(t.value) || \"Unknown\") + \">\";\n case qc:\n return \":has(\" + (nc(t) || \"\") + \")\";\n case Gc:\n return '[role=\"' + t.value + '\"]';\n case Zc:\n return '\"' + t.value + '\"';\n case Jc:\n return '[data-testname=\"' + t.value + '\"]';\n default:\n throw Error(F(365));\n }\n }\n function sf(t, r) {\n var a = [];\n t = [t, 0];\n for (var l = 0; l < t.length;) {\n var c = t[l++],\n d = c.tag,\n h = t[l++],\n y = r[h];\n if (d !== 5 && d !== 26 && d !== 27 || !Jr(c)) {\n for (; y != null && ms(c, y);) h++, y = r[h];\n if (h === r.length) a.push(c);else for (c = c.child; c !== null;) t.push(c, h), c = c.sibling;\n }\n }\n return a;\n }\n function gs(t, r) {\n if (!Ga) throw Error(F(363));\n t = Vi(t), t = sf(t, r), r = [], t = Array.from(t);\n for (var a = 0; a < t.length;) {\n var l = t[a++],\n c = l.tag;\n if (c === 5 || c === 26 || c === 27) Jr(l) || r.push(l.stateNode);else for (l = l.child; l !== null;) t.push(l), l = l.sibling;\n }\n return r;\n }\n function bt() {\n return (ce & 2) !== 0 && he !== 0 ? he & -he : M.T !== null ? ku() : kr();\n }\n function ys() {\n if (At === 0) if ((he & 536870912) === 0 || ue) {\n var t = js;\n js <<= 1, (js & 3932160) === 0 && (js = 262144), At = t;\n } else At = 536870912;\n return t = Ft.current, t !== null && (t.flags |= 32), At;\n }\n function nt(t, r, a) {\n (t === Ne && (_e === 2 || _e === 9) || t.cancelPendingCommit !== null) && (la(t, 0), Ro(t, he, At, !1)), xi(t, a), ((ce & 2) === 0 || t !== Ne) && (t === Ne && ((ce & 2) === 0 && (ii |= a), Xe === 4 && Ro(t, he, At, !1)), ir(t));\n }\n function uf(t, r, a) {\n if ((ce & 6) !== 0) throw Error(F(327));\n var l = !a && (r & 127) === 0 && (r & t.expiredLanes) === 0 || Pi(t, r),\n c = l ? Gp(t, r) : Ji(t, r, !0),\n d = l;\n do {\n if (c === 0) {\n ai && !l && Ro(t, r, 0, !1);\n break;\n } else {\n if (a = t.current.alternate, d && !Qp(a)) {\n c = Ji(t, r, !1), d = !1;\n continue;\n }\n if (c === 2) {\n if (d = r, t.errorRecoveryDisabledLanes & d) var h = 0;else h = t.pendingLanes & -536870913, h = h !== 0 ? h : h & 536870912 ? 536870912 : 0;\n if (h !== 0) {\n r = h;\n e: {\n var y = t;\n c = $s;\n var R = Hn && y.current.memoizedState.isDehydrated;\n if (R && (la(y, h).flags |= 256), h = Ji(y, h, !1), h !== 2) {\n if (Gf && !R) {\n y.errorRecoveryDisabledLanes |= d, ii |= d, c = 4;\n break e;\n }\n d = xt, xt = c, d !== null && (xt === null ? xt = d : xt.push.apply(xt, d));\n }\n c = h;\n }\n if (d = !1, c !== 2) continue;\n }\n }\n if (c === 1) {\n la(t, 0), Ro(t, r, 0, !0);\n break;\n }\n e: {\n switch (l = t, d = c, d) {\n case 0:\n case 1:\n throw Error(F(345));\n case 4:\n if ((r & 4194048) !== r) break;\n case 6:\n Ro(l, r, At, !ya);\n break e;\n case 2:\n xt = null;\n break;\n case 3:\n case 5:\n break;\n default:\n throw Error(F(329));\n }\n if ((r & 62914560) === r && (c = Vs + 300 - ze(), 10 < c)) {\n if (Ro(l, r, At, !ya), Lr(l, 0, !0) !== 0) break e;\n no = r, l.timeoutHandle = eh(tc.bind(null, l, a, xt, Xc, Yc, r, At, ii, hl, ya, d, \"Throttled\", -0, 0), c);\n break e;\n }\n tc(l, a, xt, Xc, Yc, r, At, ii, hl, ya, d, null, -0, 0);\n }\n }\n break;\n } while (!0);\n ir(t);\n }\n function tc(t, r, a, l, c, d, h, y, R, L, j, A, W, V) {\n if (t.timeoutHandle = Lo, A = r.subtreeFlags, A & 8192 || (A & 16785408) === 16785408) {\n A = oh(), lf(r, d, A);\n var Oe = (d & 62914560) === d ? Vs - ze() : (d & 4194048) === d ? Zf - ze() : 0;\n if (Oe = ah(A, Oe), Oe !== null) {\n no = d, t.cancelPendingCommit = Oe(pf.bind(null, t, r, d, a, l, c, h, y, R, j, A, null, W, V)), Ro(t, d, h, !L);\n return;\n }\n }\n pf(t, r, d, a, l, c, h, y, R);\n }\n function Qp(t) {\n for (var r = t;;) {\n var a = r.tag;\n if ((a === 0 || a === 11 || a === 15) && r.flags & 16384 && (a = r.updateQueue, a !== null && (a = a.stores, a !== null))) for (var l = 0; l < a.length; l++) {\n var c = a[l],\n d = c.getSnapshot;\n c = c.value;\n try {\n if (!jn(d(), c)) return !1;\n } catch {\n return !1;\n }\n }\n if (a = r.child, r.subtreeFlags & 16384 && a !== null) a.return = r, r = a;else {\n if (r === t) break;\n for (; r.sibling === null;) {\n if (r.return === null || r.return === t) return !0;\n r = r.return;\n }\n r.sibling.return = r.return, r = r.sibling;\n }\n }\n return !0;\n }\n function Ro(t, r, a, l) {\n r &= ~Jf, r &= ~ii, t.suspendedLanes |= r, t.pingedLanes &= ~r, l && (t.warmLanes |= r), l = t.expirationTimes;\n for (var c = r; 0 < c;) {\n var d = 31 - vt(c),\n h = 1 << d;\n l[d] = -1, c &= ~h;\n }\n a !== 0 && Yo(t, a, r);\n }\n function ia() {\n return (ce & 6) === 0 ? (Ea(0, !1), !1) : !0;\n }\n function bs() {\n if (de !== null) {\n if (_e === 0) var t = de.return;else t = de, Be = at = null, Vl(t), Kt = null, Bs = 0, t = de;\n for (; t !== null;) $u(t.alternate, t), t = t.return;\n de = null;\n }\n }\n function la(t, r) {\n var a = t.timeoutHandle;\n a !== Lo && (t.timeoutHandle = Lo, Tf(a)), a = t.cancelPendingCommit, a !== null && (t.cancelPendingCommit = null, a()), no = 0, bs(), Ne = t, de = a = Qr(t.current, null), he = r, _e = 0, Ht = null, ya = !1, ai = Pi(t, r), Gf = !1, hl = At = Jf = ii = ba = Xe = 0, xt = $s = null, Yc = !1, (r & 8) !== 0 && (r |= r & 32);\n var l = t.entangledLanes;\n if (l !== 0) for (t = t.entanglements, l &= r; 0 < l;) {\n var c = 31 - vt(l),\n d = 1 << c;\n r |= t[c], l &= ~d;\n }\n return Uo = r, Bn(), a;\n }\n function $p(t, r) {\n ne = null, M.H = Os, r === cl || r === jc ? (r = Bl(), _e = 3) : r === Ac ? (r = Bl(), _e = 4) : _e = r === Mc ? 8 : r !== null && typeof r == \"object\" && typeof r.then == \"function\" ? 6 : 1, Ht = r, de === null && (Xe = 1, rs(t, ut(r, t.current)));\n }\n function Vp() {\n var t = Ft.current;\n return t === null ? !0 : (he & 4194048) === he ? zr === null : (he & 62914560) === he || (he & 536870912) !== 0 ? t === zr : !1;\n }\n function cf() {\n var t = M.H;\n return M.H = Os, t === null ? Os : t;\n }\n function qi() {\n var t = M.A;\n return M.A = Zm, t;\n }\n function Gi() {\n Xe = 4, ya || (he & 4194048) !== he && Ft.current !== null || (ai = !0), (ba & 134217727) === 0 && (ii & 134217727) === 0 || Ne === null || Ro(Ne, he, At, !1);\n }\n function Ji(t, r, a) {\n var l = ce;\n ce |= 2;\n var c = cf(),\n d = qi();\n (Ne !== t || he !== r) && (Xc = null, la(t, r)), r = !1;\n var h = Xe;\n e: do try {\n if (_e !== 0 && de !== null) {\n var y = de,\n R = Ht;\n switch (_e) {\n case 8:\n bs(), h = 6;\n break e;\n case 3:\n case 2:\n case 9:\n case 6:\n Ft.current === null && (r = !0);\n var L = _e;\n if (_e = 0, Ht = null, Qa(t, y, R, L), a && ai) {\n h = 0;\n break e;\n }\n break;\n default:\n L = _e, _e = 0, Ht = null, Qa(t, y, R, L);\n }\n }\n qp(), h = Xe;\n break;\n } catch (j) {\n $p(t, j);\n } while (!0);\n return r && t.shellSuspendCounter++, Be = at = null, ce = l, M.H = c, M.A = d, de === null && (Ne = null, he = 0, Bn()), h;\n }\n function qp() {\n for (; de !== null;) rc(de);\n }\n function Gp(t, r) {\n var a = ce;\n ce |= 2;\n var l = cf(),\n c = qi();\n Ne !== t || he !== r ? (Xc = null, ml = ze() + 500, la(t, r)) : ai = Pi(t, r);\n e: do try {\n if (_e !== 0 && de !== null) {\n r = de;\n var d = Ht;\n n: switch (_e) {\n case 1:\n _e = 0, Ht = null, Qa(t, r, d, 1);\n break;\n case 2:\n case 9:\n if (Hd(d)) {\n _e = 0, Ht = null, ff(r);\n break;\n }\n r = function () {\n _e !== 2 && _e !== 9 || Ne !== t || (_e = 7), ir(t);\n }, d.then(r, r);\n break e;\n case 3:\n _e = 7;\n break e;\n case 4:\n _e = 5;\n break e;\n case 7:\n Hd(d) ? (_e = 0, Ht = null, ff(r)) : (_e = 0, Ht = null, Qa(t, r, d, 7));\n break;\n case 5:\n var h = null;\n switch (de.tag) {\n case 26:\n h = de.memoizedState;\n case 5:\n case 27:\n var y = de,\n R = y.type,\n L = y.pendingProps;\n if (h ? Tc(h) : An(y.stateNode, R, L)) {\n _e = 0, Ht = null;\n var j = y.sibling;\n if (j !== null) de = j;else {\n var A = y.return;\n A !== null ? (de = A, Mr(A)) : de = null;\n }\n break n;\n }\n }\n _e = 0, Ht = null, Qa(t, r, d, 5);\n break;\n case 6:\n _e = 0, Ht = null, Qa(t, r, d, 6);\n break;\n case 8:\n bs(), Xe = 6;\n break e;\n default:\n throw Error(F(462));\n }\n }\n df();\n break;\n } catch (W) {\n $p(t, W);\n } while (!0);\n return Be = at = null, M.H = l, M.A = c, ce = a, de !== null ? 0 : (Ne = null, he = 0, Bn(), Xe);\n }\n function df() {\n for (; de !== null && !qm();) rc(de);\n }\n function rc(t) {\n var r = Bu(t.alternate, t, Uo);\n t.memoizedProps = t.pendingProps, r === null ? Mr(t) : de = r;\n }\n function ff(t) {\n var r = t,\n a = r.alternate;\n switch (r.tag) {\n case 15:\n case 0:\n r = Xd(a, r, r.pendingProps, r.type, void 0, he);\n break;\n case 11:\n r = Xd(a, r, r.pendingProps, r.type.render, r.ref, he);\n break;\n case 5:\n Vl(r);\n default:\n $u(a, r), r = de = yf(r, Uo), r = Bu(a, r, Uo);\n }\n t.memoizedProps = t.pendingProps, r === null ? Mr(t) : de = r;\n }\n function Qa(t, r, a, l) {\n Be = at = null, Vl(r), Kt = null, Bs = 0;\n var c = r.return;\n try {\n if (On(t, c, r, a, he)) {\n Xe = 1, rs(t, ut(a, t.current)), de = null;\n return;\n }\n } catch (d) {\n if (c !== null) throw de = c, d;\n Xe = 1, rs(t, ut(a, t.current)), de = null;\n return;\n }\n r.flags & 32768 ? (ue || l === 1 ? t = !0 : ai || (he & 536870912) !== 0 ? t = !1 : (ya = t = !0, (l === 2 || l === 9 || l === 3 || l === 6) && (l = Ft.current, l !== null && l.tag === 13 && (l.flags |= 16384))), vs(r, t)) : Mr(r);\n }\n function Mr(t) {\n var r = t;\n do {\n if ((r.flags & 32768) !== 0) {\n vs(r, ya);\n return;\n }\n t = r.return;\n var a = Oa(r.alternate, r, Uo);\n if (a !== null) {\n de = a;\n return;\n }\n if (r = r.sibling, r !== null) {\n de = r;\n return;\n }\n de = r = t;\n } while (r !== null);\n Xe === 0 && (Xe = 5);\n }\n function vs(t, r) {\n do {\n var a = gr(t.alternate, t);\n if (a !== null) {\n a.flags &= 32767, de = a;\n return;\n }\n if (a = t.return, a !== null && (a.flags |= 32768, a.subtreeFlags = 0, a.deletions = null), !r && (t = t.sibling, t !== null)) {\n de = t;\n return;\n }\n de = t = a;\n } while (t !== null);\n Xe = 6, de = null;\n }\n function pf(t, r, a, l, c, d, h, y, R) {\n t.cancelPendingCommit = null;\n do rn(); while (Re !== 0);\n if ((ce & 6) !== 0) throw Error(F(327));\n if (r !== null) {\n if (r === t.current) throw Error(F(177));\n if (d = r.lanes | r.childLanes, d |= $f, _p(t, a, d, h, y, R), t === Ne && (de = Ne = null, he = 0), Sa = r, Bo = t, no = a, Kc = d, ed = c, $h = l, (r.subtreeFlags & 10256) !== 0 || (r.flags & 10256) !== 0 ? (t.callbackNode = null, t.callbackPriority = 0, Nm(Ao, function () {\n return hf(), null;\n })) : (t.callbackNode = null, t.callbackPriority = 0), l = (r.flags & 13878) !== 0, (r.subtreeFlags & 13878) !== 0 || l) {\n l = M.T, M.T = null, c = qr(), yn(2), h = ce, ce |= 4;\n try {\n Wp(t, r, a);\n } finally {\n ce = h, yn(c), M.T = l;\n }\n }\n Re = 1, oc(), ac(), ic();\n }\n }\n function oc() {\n if (Re === 1) {\n Re = 0;\n var t = Bo,\n r = Sa,\n a = (r.flags & 13878) !== 0;\n if ((r.subtreeFlags & 13878) !== 0 || a) {\n a = M.T, M.T = null;\n var l = qr();\n yn(2);\n var c = ce;\n ce |= 4;\n try {\n hs(r, t), _s(t.containerInfo);\n } finally {\n ce = c, yn(l), M.T = a;\n }\n }\n t.current = r, Re = 2;\n }\n }\n function ac() {\n if (Re === 2) {\n Re = 0;\n var t = Bo,\n r = Sa,\n a = (r.flags & 8772) !== 0;\n if ((r.subtreeFlags & 8772) !== 0 || a) {\n a = M.T, M.T = null;\n var l = qr();\n yn(2);\n var c = ce;\n ce |= 4;\n try {\n of(t, r.alternate, r);\n } finally {\n ce = c, yn(l), M.T = a;\n }\n }\n Re = 3;\n }\n }\n function ic() {\n if (Re === 4 || Re === 3) {\n Re = 0, St();\n var t = Bo,\n r = Sa,\n a = no,\n l = $h;\n (r.subtreeFlags & 10256) !== 0 || (r.flags & 10256) !== 0 ? Re = 5 : (Re = 0, Sa = Bo = null, Jp(t, t.pendingLanes));\n var c = t.pendingLanes;\n if (c === 0 && (va = null), Ze(a), r = r.stateNode, on && typeof on.onCommitFiberRoot == \"function\") try {\n on.onCommitFiberRoot(ei, r, void 0, (r.current.flags & 128) === 128);\n } catch {}\n if (l !== null) {\n r = M.T, c = qr(), yn(2), M.T = null;\n try {\n for (var d = t.onRecoverableError, h = 0; h < l.length; h++) {\n var y = l[h];\n d(y.value, {\n componentStack: y.stack\n });\n }\n } finally {\n M.T = r, yn(c);\n }\n }\n (no & 3) !== 0 && rn(), ir(t), c = t.pendingLanes, (a & 261930) !== 0 && (c & 42) !== 0 ? t === nd ? gl++ : (gl = 0, nd = t) : gl = 0, Hn && Ih(), Ea(0, !1);\n }\n }\n function Jp(t, r) {\n (t.pooledCacheLanes &= r) === 0 && (r = t.pooledCache, r != null && (t.pooledCache = null, Ra(r)));\n }\n function rn() {\n return oc(), ac(), ic(), hf();\n }\n function hf() {\n if (Re !== 5) return !1;\n var t = Bo,\n r = Kc;\n Kc = 0;\n var a = Ze(no),\n l = 32 > a ? 32 : a;\n a = M.T;\n var c = qr();\n try {\n yn(l), M.T = null, l = ed, ed = null;\n var d = Bo,\n h = no;\n if (Re = 0, Sa = Bo = null, no = 0, (ce & 6) !== 0) throw Error(F(331));\n var y = ce;\n if (ce |= 4, Ku(d.current), Mp(d, d.current, h, l), ce = y, Ea(0, !1), on && typeof on.onPostCommitFiberRoot == \"function\") try {\n on.onPostCommitFiberRoot(ei, d);\n } catch {}\n return !0;\n } finally {\n yn(c), M.T = a, Jp(t, r);\n }\n }\n function mf(t, r, a) {\n r = ut(a, r), r = Ui(t.stateNode, r, 2), t = Nr(t, r, 2), t !== null && (xi(t, 2), ir(t));\n }\n function ve(t, r, a) {\n if (t.tag === 3) mf(t, t, a);else for (; r !== null;) {\n if (r.tag === 3) {\n mf(r, t, a);\n break;\n } else if (r.tag === 1) {\n var l = r.stateNode;\n if (typeof r.type.getDerivedStateFromError == \"function\" || typeof l.componentDidCatch == \"function\" && (va === null || !va.has(l))) {\n t = ut(a, t), a = os(2), l = Nr(r, a, 2), l !== null && (Hu(a, l, r, t), xi(l, 2), ir(l));\n break;\n }\n }\n r = r.return;\n }\n }\n function lc(t, r, a) {\n var l = t.pingCache;\n if (l === null) {\n l = t.pingCache = new Ym();\n var c = new Set();\n l.set(r, c);\n } else c = l.get(r), c === void 0 && (c = new Set(), l.set(r, c));\n c.has(a) || (Gf = !0, c.add(a), t = Ss.bind(null, t, r, a), r.then(t, t));\n }\n function Ss(t, r, a) {\n var l = t.pingCache;\n l !== null && l.delete(r), t.pingedLanes |= t.suspendedLanes & a, t.warmLanes &= ~a, Ne === t && (he & a) === a && (Xe === 4 || Xe === 3 && (he & 62914560) === he && 300 > ze() - Vs ? (ce & 2) === 0 && la(t, 0) : Jf |= a, hl === he && (hl = 0)), ir(t);\n }\n function gf(t, r) {\n r === 0 && (r = Ed()), t = Ko(t, r), t !== null && (xi(t, r), ir(t));\n }\n function sc(t) {\n var r = t.memoizedState,\n a = 0;\n r !== null && (a = r.retryLane), gf(t, a);\n }\n function Zp(t, r) {\n var a = 0;\n switch (t.tag) {\n case 31:\n case 13:\n var l = t.stateNode,\n c = t.memoizedState;\n c !== null && (a = c.retryLane);\n break;\n case 19:\n l = t.stateNode;\n break;\n case 22:\n l = t.stateNode._retryCache;\n break;\n default:\n throw Error(F(314));\n }\n l !== null && l.delete(r), gf(t, a);\n }\n function Nm(t, r) {\n return Ic(t, r);\n }\n function uc(t, r, a, l) {\n this.tag = t, this.key = a, this.sibling = this.child = this.return = this.stateNode = this.type = this.elementType = null, this.index = 0, this.refCleanup = this.ref = null, this.pendingProps = r, this.dependencies = this.memoizedState = this.updateQueue = this.memoizedProps = null, this.mode = l, this.subtreeFlags = this.flags = 0, this.deletions = null, this.childLanes = this.lanes = 0, this.alternate = null;\n }\n function ks(t) {\n return t = t.prototype, !(!t || !t.isReactComponent);\n }\n function Qr(t, r) {\n var a = t.alternate;\n return a === null ? (a = Yn(t.tag, r, t.key, t.mode), a.elementType = t.elementType, a.type = t.type, a.stateNode = t.stateNode, a.alternate = t, t.alternate = a) : (a.pendingProps = r, a.type = t.type, a.flags = 0, a.subtreeFlags = 0, a.deletions = null), a.flags = t.flags & 65011712, a.childLanes = t.childLanes, a.lanes = t.lanes, a.child = t.child, a.memoizedProps = t.memoizedProps, a.memoizedState = t.memoizedState, a.updateQueue = t.updateQueue, r = t.dependencies, a.dependencies = r === null ? null : {\n lanes: r.lanes,\n firstContext: r.firstContext\n }, a.sibling = t.sibling, a.index = t.index, a.ref = t.ref, a.refCleanup = t.refCleanup, a;\n }\n function yf(t, r) {\n t.flags &= 65011714;\n var a = t.alternate;\n return a === null ? (t.childLanes = 0, t.lanes = r, t.child = null, t.subtreeFlags = 0, t.memoizedProps = null, t.memoizedState = null, t.updateQueue = null, t.dependencies = null, t.stateNode = null) : (t.childLanes = a.childLanes, t.lanes = a.lanes, t.child = a.child, t.subtreeFlags = 0, t.deletions = null, t.memoizedProps = a.memoizedProps, t.memoizedState = a.memoizedState, t.updateQueue = a.updateQueue, t.type = a.type, r = a.dependencies, t.dependencies = r === null ? null : {\n lanes: r.lanes,\n firstContext: r.firstContext\n }), t;\n }\n function ws(t, r, a, l, c, d) {\n var h = 0;\n if (l = t, typeof t == \"function\") ks(t) && (h = 1);else if (typeof t == \"string\") h = Gt && dn ? Df(t, a, Dn.current) ? 26 : Ec(t) ? 27 : 5 : Gt ? Df(t, a, Dn.current) ? 26 : 5 : dn && Ec(t) ? 27 : 5;else e: switch (t) {\n case gc:\n return t = Yn(31, a, r, c), t.elementType = gc, t.lanes = d, t;\n case $a:\n return Eo(a.children, c, d, r);\n case kf:\n h = 8, c |= 24;\n break;\n case Cs:\n return t = Yn(12, a, r, c | 2), t.elementType = Cs, t.lanes = d, t;\n case Va:\n return t = Yn(13, a, r, c), t.elementType = Va, t.lanes = d, t;\n case Te:\n return t = Yn(19, a, r, c), t.elementType = Te, t.lanes = d, t;\n default:\n if (typeof t == \"object\" && t !== null) switch (t.$$typeof) {\n case Io:\n h = 10;\n break e;\n case mc:\n h = 9;\n break e;\n case Zi:\n h = 11;\n break e;\n case wf:\n h = 14;\n break e;\n case ua:\n h = 16, l = null;\n break e;\n }\n h = 29, a = Error(F(130, t === null ? \"null\" : typeof t, \"\")), l = null;\n }\n return r = Yn(h, a, r, c), r.elementType = t, r.type = l, r.lanes = d, r;\n }\n function Eo(t, r, a, l) {\n return t = Yn(7, t, l, r), t.lanes = a, t;\n }\n function Ps(t, r, a) {\n return t = Yn(6, t, null, r), t.lanes = a, t;\n }\n function cc(t) {\n var r = Yn(18, null, null, 0);\n return r.stateNode = t, r;\n }\n function dc(t, r, a) {\n return r = Yn(4, t.children !== null ? t.children : [], t.key, r), r.lanes = a, r.stateNode = {\n containerInfo: t.containerInfo,\n pendingChildren: null,\n implementation: t.implementation\n }, r;\n }\n function bf(t, r, a, l, c, d, h, y, R) {\n this.tag = 1, this.containerInfo = t, this.pingCache = this.current = this.pendingChildren = null, this.timeoutHandle = Lo, this.callbackNode = this.next = this.pendingContext = this.context = this.cancelPendingCommit = null, this.callbackPriority = 0, this.expirationTimes = mu(-1), this.entangledLanes = this.shellSuspendCounter = this.errorRecoveryDisabledLanes = this.expiredLanes = this.warmLanes = this.pingedLanes = this.suspendedLanes = this.pendingLanes = 0, this.entanglements = mu(0), this.hiddenUpdates = mu(null), this.identifierPrefix = l, this.onUncaughtError = c, this.onCaughtError = d, this.onRecoverableError = h, this.pooledCache = null, this.pooledCacheLanes = 0, this.formState = R, this.incompleteTransitions = new Map();\n }\n function xs(t, r, a, l, c, d, h, y, R, L, j, A) {\n return t = new bf(t, r, a, h, R, L, j, A, y), r = 1, d === !0 && (r |= 24), d = Yn(3, null, null, r), t.current = d, d.stateNode = t, r = Fd(), r.refCount++, t.pooledCache = r, r.refCount++, d.memoizedState = {\n element: l,\n isDehydrated: a,\n cache: r\n }, Ol(d), t;\n }\n function fc(t) {\n return t ? (t = Ka, t) : Ka;\n }\n function vf(t) {\n var r = t._reactInternals;\n if (r === void 0) throw typeof t.render == \"function\" ? Error(F(188)) : (t = Object.keys(t).join(\",\"), Error(F(268, t)));\n return t = fu(r), t = t !== null ? pu(t) : null, t === null ? null : Ts(t.stateNode);\n }\n function pc(t, r, a, l, c, d) {\n c = fc(c), l.context === null ? l.context = c : l.pendingContext = c, l = Et(r), l.payload = {\n element: a\n }, d = d === void 0 ? null : d, d !== null && (l.callback = d), a = Nr(t, l, r), a !== null && (nt(a, t, r), Ml(a, t, r));\n }\n function Sf(t, r) {\n if (t = t.memoizedState, t !== null && t.dehydrated !== null) {\n var a = t.retryLane;\n t.retryLane = a !== 0 && a < r ? a : r;\n }\n }\n function vr(t, r) {\n Sf(t, r), (t = t.alternate) && Sf(t, r);\n }\n var ie = {},\n Fm = React__default,\n tt = Tb,\n Lt = Object.assign,\n hc = Symbol.for(\"react.element\"),\n zs = Symbol.for(\"react.transitional.element\"),\n sa = Symbol.for(\"react.portal\"),\n $a = Symbol.for(\"react.fragment\"),\n kf = Symbol.for(\"react.strict_mode\"),\n Cs = Symbol.for(\"react.profiler\"),\n mc = Symbol.for(\"react.consumer\"),\n Io = Symbol.for(\"react.context\"),\n Zi = Symbol.for(\"react.forward_ref\"),\n Va = Symbol.for(\"react.suspense\"),\n Te = Symbol.for(\"react.suspense_list\"),\n wf = Symbol.for(\"react.memo\"),\n ua = Symbol.for(\"react.lazy\");\n var gc = Symbol.for(\"react.activity\");\n var $r = Symbol.for(\"react.memo_cache_sentinel\");\n var Pf = Symbol.iterator,\n xf = Symbol.for(\"react.client.reference\"),\n ca = Array.isArray,\n M = Fm.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n Yp = m.rendererVersion,\n zf = m.rendererPackageName,\n Cf = m.extraDevToolsConfig,\n Ts = m.getPublicInstance,\n Hm = m.getRootHostContext,\n Xp = m.getChildHostContext,\n Am = m.prepareForCommit,\n _s = m.resetAfterCommit,\n Vr = m.createInstance;\n m.cloneMutableInstance;\n var yc = m.appendInitialChild,\n Kp = m.finalizeInitialChildren,\n Rs = m.shouldSetTextContent,\n bc = m.createTextInstance;\n m.cloneMutableTextInstance;\n var eh = m.scheduleTimeout,\n Tf = m.cancelTimeout,\n Lo = m.noTimeout,\n qt = m.isPrimaryRenderer;\n m.warnsIfNotActing;\n var $n = m.supportsMutation,\n Sr = m.supportsPersistence,\n Hn = m.supportsHydration,\n nh = m.getInstanceFromNode;\n m.beforeActiveInstanceBlur;\n var jm = m.preparePortalMount;\n m.prepareScopeUpdate, m.getInstanceFromScope;\n var yn = m.setCurrentUpdatePriority,\n qr = m.getCurrentUpdatePriority,\n kr = m.resolveUpdatePriority;\n m.trackSchedulerEvent, m.resolveEventType, m.resolveEventTimeStamp;\n var _f = m.shouldAttemptEagerTransition,\n th = m.detachDeletedInstance;\n m.requestPostPaintCallback;\n var rh = m.maySuspendCommit,\n Dm = m.maySuspendCommitOnUpdate,\n Yi = m.maySuspendCommitInSyncRender,\n An = m.preloadInstance,\n oh = m.startSuspendingCommit,\n Vn = m.suspendInstance;\n m.suspendOnActiveViewTransition;\n var ah = m.waitForCommitToBeReady;\n m.getSuspendedCommitReason;\n var rt = m.NotPendingTransition,\n da = m.HostTransitionContext,\n qa = m.resetFormInstance;\n m.bindToConsole;\n var ih = m.supportsMicrotasks,\n Gr = m.scheduleMicrotask,\n Ga = m.supportsTestSelectors,\n Rf = m.findFiberRoot,\n wr = m.getBoundingRect,\n lh = m.getTextContent,\n Jr = m.isHiddenSubtree,\n sh = m.matchAccessibilityRole,\n Es = m.setFocusIfFocusable,\n Ja = m.setupIntersectionObserver,\n uh = m.appendChild,\n ch = m.appendChildToContainer,\n Is = m.commitTextUpdate,\n dh = m.commitMount,\n vc = m.commitUpdate,\n fh = m.insertBefore,\n ph = m.insertInContainerBefore,\n Ef = m.removeChild,\n If = m.removeChildFromContainer,\n Sc = m.resetTextContent,\n hh = m.hideInstance,\n kc = m.hideTextInstance,\n Wm = m.unhideInstance,\n mh = m.unhideTextInstance;\n m.cancelViewTransitionName, m.cancelRootViewTransitionName, m.restoreRootViewTransitionName, m.cloneRootViewTransitionContainer, m.removeRootViewTransitionClone, m.measureClonedInstance, m.hasInstanceChanged, m.hasInstanceAffectedParent, m.startViewTransition, m.startGestureTransition, m.stopViewTransition, m.getCurrentGestureOffset, m.createViewTransitionInstance;\n var Nt = m.clearContainer;\n m.createFragmentInstance, m.updateFragmentInstanceFiber, m.commitNewChildToFragmentInstance, m.deleteChildFromFragmentInstance;\n var gh = m.cloneInstance,\n We = m.createContainerChildSet,\n Lf = m.appendChildToContainerChildSet,\n yh = m.finalizeContainerChildren,\n bh = m.replaceContainerChildren,\n No = m.cloneHiddenInstance,\n Ls = m.cloneHiddenTextInstance,\n Ns = m.isSuspenseInstancePending,\n Fs = m.isSuspenseInstanceFallback,\n Za = m.getSuspenseInstanceFallbackErrorDetails,\n Xi = m.registerSuspenseInstanceRetry,\n vh = m.canHydrateFormStateMarker,\n Sh = m.isFormStateMarkerMatching,\n Nf = m.getNextHydratableSibling,\n kh = m.getNextHydratableSiblingAfterSingleton,\n wc = m.getFirstHydratableChild,\n Pc = m.getFirstHydratableChildWithinContainer,\n Ff = m.getFirstHydratableChildWithinActivityInstance,\n wh = m.getFirstHydratableChildWithinSuspenseInstance,\n Um = m.getFirstHydratableChildWithinSingleton,\n Bm = m.canHydrateInstance,\n Ph = m.canHydrateTextInstance,\n xh = m.canHydrateActivityInstance,\n Om = m.canHydrateSuspenseInstance,\n Ki = m.hydrateInstance,\n xc = m.hydrateTextInstance,\n zh = m.hydrateActivityInstance,\n Hf = m.hydrateSuspenseInstance,\n Ch = m.getNextHydratableInstanceAfterActivityInstance,\n Th = m.getNextHydratableInstanceAfterSuspenseInstance,\n _h = m.commitHydratedInstance,\n Mm = m.commitHydratedContainer,\n Rh = m.commitHydratedActivityInstance,\n el = m.commitHydratedSuspenseInstance,\n Eh = m.finalizeHydratedChildren,\n Ih = m.flushHydrationEvents;\n m.clearActivityBoundary;\n var Se = m.clearSuspenseBoundary;\n m.clearActivityBoundaryFromContainer;\n var Af = m.clearSuspenseBoundaryFromContainer,\n Qm = m.hideDehydratedBoundary,\n Lh = m.unhideDehydratedBoundary,\n Nh = m.shouldDeleteUnhydratedTailInstances;\n m.diffHydratedPropsForDevWarnings, m.diffHydratedTextForDevWarnings, m.describeHydratableInstanceForDevWarnings;\n var $m = m.validateHydratableInstance,\n jf = m.validateHydratableTextInstance,\n Gt = m.supportsResources,\n Df = m.isHostHoistableType,\n zc = m.getHoistableRoot,\n nl = m.getResource,\n Fh = m.acquireResource,\n Hh = m.releaseResource,\n Ya = m.hydrateHoistable,\n Cc = m.mountHoistable,\n Wf = m.unmountHoistable,\n Ah = m.createHoistableInstance,\n jh = m.prepareToCommitHoistables,\n Vm = m.mayResourceSuspendCommit,\n Tc = m.preloadResource,\n Fo = m.suspendResource,\n dn = m.supportsSingletons,\n _c = m.resolveSingletonInstance,\n Rc = m.acquireSingletonInstance,\n fa = m.releaseSingletonInstance,\n Ec = m.isHostSingletonType,\n Xa = m.isSingletonScope,\n Hs = [],\n tl = -1,\n Ka = {},\n vt = Math.clz32 ? Math.clz32 : Em,\n Dh = Math.log,\n Wh = Math.LN2,\n As = 256,\n js = 262144,\n rl = 4194304,\n Ic = tt.unstable_scheduleCallback,\n le = tt.unstable_cancelCallback,\n qm = tt.unstable_shouldYield,\n St = tt.unstable_requestPaint,\n ze = tt.unstable_now,\n Uh = tt.unstable_ImmediatePriority,\n Ho = tt.unstable_UserBlockingPriority,\n Ao = tt.unstable_NormalPriority,\n ol = tt.unstable_IdlePriority,\n Lc = tt.log,\n Uf = tt.unstable_setDisableYieldValue,\n ei = null,\n on = null,\n jn = typeof Object.is == \"function\" ? Object.is : Im,\n Nc = typeof reportError == \"function\" ? reportError : function (t) {\n if (typeof window == \"object\" && typeof window.ErrorEvent == \"function\") {\n var r = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message: typeof t == \"object\" && t !== null && typeof t.message == \"string\" ? String(t.message) : String(t),\n error: t\n });\n if (!window.dispatchEvent(r)) return;\n } else if (typeof process == \"object\" && typeof process.emit == \"function\") {\n process.emit(\"uncaughtException\", t);\n return;\n }\n console.error(t);\n },\n Bf = Object.prototype.hasOwnProperty,\n al,\n kt,\n Ds = !1,\n Bh = new WeakMap(),\n ni = [],\n il = 0,\n fn = null,\n x = 0,\n Jt = [],\n Zt = 0,\n jo = null,\n ot = 1,\n Zr = \"\",\n Dn = Ir(null),\n Ws = Ir(null),\n pa = Ir(null),\n Fc = Ir(null),\n bn = null,\n Ue = null,\n ue = !1,\n Do = null,\n Yt = !1,\n Of = Error(F(519)),\n Yr = Ir(null),\n at = null,\n Be = null,\n Xr = typeof AbortController < \"u\" ? AbortController : function () {\n var t = [],\n r = this.signal = {\n aborted: !1,\n addEventListener: function (a, l) {\n t.push(l);\n }\n };\n this.abort = function () {\n r.aborted = !0, t.forEach(function (a) {\n return a();\n });\n };\n },\n qn = tt.unstable_scheduleCallback,\n Gm = tt.unstable_NormalPriority,\n qe = {\n $$typeof: Io,\n Consumer: null,\n Provider: null,\n _currentValue: null,\n _currentValue2: null,\n _threadCount: 0\n },\n an = null,\n wt = null,\n Mf = !1,\n ll = !1,\n ti = !1,\n Pr = 0,\n Us = null,\n Qf = 0,\n sl = 0,\n ul = null,\n Hc = M.S;\n M.S = function (t, r) {\n Zf = ze(), typeof r == \"object\" && r !== null && typeof r.then == \"function\" && Np(t, r), Hc !== null && Hc(t, r);\n };\n var ha = Ir(null),\n cl = Error(F(460)),\n Ac = Error(F(474)),\n jc = Error(F(542)),\n Dc = {\n then: function () {}\n },\n Xt = null,\n Kt = null,\n Bs = 0,\n ri = Ad(!0),\n Oh = Ad(!1),\n er = [],\n xr = 0,\n $f = 0,\n ma = !1,\n Vf = !1,\n Kr = Ir(null),\n Wc = Ir(0),\n Ft = Ir(null),\n zr = null,\n ln = Ir(0),\n Wo = 0,\n ne = null,\n Ie = null,\n pn = null,\n Uc = !1,\n dl = !1,\n oi = !1,\n Bc = 0,\n fl = 0,\n pl = null,\n Jm = 0,\n Os = {\n readContext: In,\n use: Ee,\n useCallback: Ve,\n useContext: Ve,\n useEffect: Ve,\n useImperativeHandle: Ve,\n useLayoutEffect: Ve,\n useInsertionEffect: Ve,\n useMemo: Ve,\n useReducer: Ve,\n useRef: Ve,\n useState: Ve,\n useDebugValue: Ve,\n useDeferredValue: Ve,\n useTransition: Ve,\n useSyncExternalStore: Ve,\n useId: Ve,\n useHostTransitionStatus: Ve,\n useFormState: Ve,\n useActionState: Ve,\n useOptimistic: Ve,\n useMemoCache: Ve,\n useCacheRefresh: Ve\n };\n Os.useEffectEvent = Ve;\n var Mh = {\n readContext: In,\n use: Ee,\n useCallback: function (t, r) {\n return Ln().memoizedState = [t, r === void 0 ? null : r], t;\n },\n useContext: In,\n useEffect: Bd,\n useImperativeHandle: function (t, r, a) {\n a = a != null ? a.concat([t]) : null, Xl(4194308, 4, jp.bind(null, r, t), a);\n },\n useLayoutEffect: function (t, r) {\n return Xl(4194308, 4, t, r);\n },\n useInsertionEffect: function (t, r) {\n Xl(4, 2, t, r);\n },\n useMemo: function (t, r) {\n var a = Ln();\n r = r === void 0 ? null : r;\n var l = t();\n if (oi) {\n pe(!0);\n try {\n t();\n } finally {\n pe(!1);\n }\n }\n return a.memoizedState = [l, r], l;\n },\n useReducer: function (t, r, a) {\n var l = Ln();\n if (a !== void 0) {\n var c = a(r);\n if (oi) {\n pe(!0);\n try {\n a(r);\n } finally {\n pe(!1);\n }\n }\n } else c = r;\n return l.memoizedState = l.baseState = c, t = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: t,\n lastRenderedState: c\n }, l.queue = t, t = t.dispatch = Nn.bind(null, ne, t), [l.memoizedState, t];\n },\n useRef: function (t) {\n var r = Ln();\n return t = {\n current: t\n }, r.memoizedState = t;\n },\n useState: function (t) {\n t = Xn(t);\n var r = t.queue,\n a = Nu.bind(null, ne, r);\n return r.dispatch = a, [t.memoizedState, a];\n },\n useDebugValue: Qd,\n useDeferredValue: function (t, r) {\n var a = Ln();\n return Iu(a, t, r);\n },\n useTransition: function () {\n var t = Xn(!1);\n return t = $d.bind(null, ne, t.queue, !0, !1), Ln().memoizedState = t, [!1, t];\n },\n useSyncExternalStore: function (t, r, a) {\n var l = ne,\n c = Ln();\n if (ue) {\n if (a === void 0) throw Error(F(407));\n a = a();\n } else {\n if (a = r(), Ne === null) throw Error(F(349));\n (he & 127) !== 0 || Hp(l, r, a);\n }\n c.memoizedState = a;\n var d = {\n value: a,\n getSnapshot: r\n };\n return c.queue = d, Bd(ql.bind(null, l, d, t), [t]), l.flags |= 2048, Kn(9, {\n destroy: void 0\n }, jr.bind(null, l, d, a, r), null), a;\n },\n useId: function () {\n var t = Ln(),\n r = Ne.identifierPrefix;\n if (ue) {\n var a = Zr,\n l = ot;\n a = (l & ~(1 << 32 - vt(l) - 1)).toString(32) + a, r = \"_\" + r + \"R_\" + a, a = Bc++, 0 < a && (r += \"H\" + a.toString(32)), r += \"_\";\n } else a = Jm++, r = \"_\" + r + \"r_\" + a.toString(32) + \"_\";\n return t.memoizedState = r;\n },\n useHostTransitionStatus: Lu,\n useFormState: pr,\n useActionState: pr,\n useOptimistic: function (t) {\n var r = Ln();\n r.memoizedState = r.baseState = t;\n var a = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: null,\n lastRenderedState: null\n };\n return r.queue = a, r = Wi.bind(null, ne, !0, a), a.dispatch = r, [t, r];\n },\n useMemoCache: Hi,\n useCacheRefresh: function () {\n return Ln().memoizedState = Dp.bind(null, ne);\n },\n useEffectEvent: function (t) {\n var r = Ln(),\n a = {\n impl: t\n };\n return r.memoizedState = a, function () {\n if ((ce & 2) !== 0) throw Error(F(440));\n return a.impl.apply(void 0, arguments);\n };\n }\n },\n qf = {\n readContext: In,\n use: Ee,\n useCallback: Eu,\n useContext: In,\n useEffect: Tu,\n useImperativeHandle: Md,\n useInsertionEffect: Od,\n useLayoutEffect: Ru,\n useMemo: Kl,\n useReducer: Ai,\n useRef: Wa,\n useState: function () {\n return Ai(Ar);\n },\n useDebugValue: Qd,\n useDeferredValue: function (t, r) {\n var a = He();\n return es(a, Ie.memoizedState, t, r);\n },\n useTransition: function () {\n var t = Ai(Ar)[0],\n r = He().memoizedState;\n return [typeof t == \"boolean\" ? t : sr(t), r];\n },\n useSyncExternalStore: ur,\n useId: xo,\n useHostTransitionStatus: Lu,\n useFormState: Ud,\n useActionState: Ud,\n useOptimistic: function (t, r) {\n var a = He();\n return mt(a, Ie, t, r);\n },\n useMemoCache: Hi,\n useCacheRefresh: qd\n };\n qf.useEffectEvent = _u;\n var Qh = {\n readContext: In,\n use: Ee,\n useCallback: Eu,\n useContext: In,\n useEffect: Tu,\n useImperativeHandle: Md,\n useInsertionEffect: Od,\n useLayoutEffect: Ru,\n useMemo: Kl,\n useReducer: Da,\n useRef: Wa,\n useState: function () {\n return Da(Ar);\n },\n useDebugValue: Qd,\n useDeferredValue: function (t, r) {\n var a = He();\n return Ie === null ? Iu(a, t, r) : es(a, Ie.memoizedState, t, r);\n },\n useTransition: function () {\n var t = Da(Ar)[0],\n r = He().memoizedState;\n return [typeof t == \"boolean\" ? t : sr(t), r];\n },\n useSyncExternalStore: ur,\n useId: xo,\n useHostTransitionStatus: Lu,\n useFormState: Yl,\n useActionState: Yl,\n useOptimistic: function (t, r) {\n var a = He();\n return Ie !== null ? mt(a, Ie, t, r) : (a.baseState = t, [t, a.queue.dispatch]);\n },\n useMemoCache: Hi,\n useCacheRefresh: qd\n };\n Qh.useEffectEvent = _u;\n var Oc = {\n enqueueSetState: function (t, r, a) {\n t = t._reactInternals;\n var l = bt(),\n c = Et(l);\n c.payload = r, a != null && (c.callback = a), r = Nr(t, c, l), r !== null && (nt(r, t, l), Ml(r, t, l));\n },\n enqueueReplaceState: function (t, r, a) {\n t = t._reactInternals;\n var l = bt(),\n c = Et(l);\n c.tag = 1, c.payload = r, a != null && (c.callback = a), r = Nr(t, c, l), r !== null && (nt(r, t, l), Ml(r, t, l));\n },\n enqueueForceUpdate: function (t, r) {\n t = t._reactInternals;\n var a = bt(),\n l = Et(a);\n l.tag = 2, r != null && (l.callback = r), r = Nr(t, l, a), r !== null && (nt(r, t, a), Ml(r, t, a));\n }\n },\n Mc = Error(F(461)),\n hn = !1,\n Qc = {\n dehydrated: null,\n treeContext: null,\n retryLane: 0,\n hydrationErrors: null\n },\n eo = !1,\n sn = !1,\n Ms = !1,\n $c = typeof WeakSet == \"function\" ? WeakSet : Set,\n Pn = null,\n mn = null,\n Pt = !1,\n Cr = null,\n ga = 8192,\n Zm = {\n getCacheForType: function (t) {\n var r = In(qe),\n a = r.data.get(t);\n return a === void 0 && (a = t(), r.data.set(t, a)), a;\n },\n cacheSignal: function () {\n return In(qe).controller.signal;\n }\n },\n Vc = 0,\n qc = 1,\n Gc = 2,\n Jc = 3,\n Zc = 4;\n if (typeof Symbol == \"function\" && Symbol.for) {\n var Qs = Symbol.for;\n Vc = Qs(\"selector.component\"), qc = Qs(\"selector.has_pseudo_class\"), Gc = Qs(\"selector.role\"), Jc = Qs(\"selector.test_id\"), Zc = Qs(\"selector.text\");\n }\n var Ym = typeof WeakMap == \"function\" ? WeakMap : Map,\n ce = 0,\n Ne = null,\n de = null,\n he = 0,\n _e = 0,\n Ht = null,\n ya = !1,\n ai = !1,\n Gf = !1,\n Uo = 0,\n Xe = 0,\n ba = 0,\n ii = 0,\n Jf = 0,\n At = 0,\n hl = 0,\n $s = null,\n xt = null,\n Yc = !1,\n Vs = 0,\n Zf = 0,\n ml = 1 / 0,\n Xc = null,\n va = null,\n Re = 0,\n Bo = null,\n Sa = null,\n no = 0,\n Kc = 0,\n ed = null,\n $h = null,\n gl = 0,\n nd = null;\n return ie.attemptContinuousHydration = function (t) {\n if (t.tag === 13 || t.tag === 31) {\n var r = Ko(t, 67108864);\n r !== null && nt(r, t, 67108864), vr(t, 67108864);\n }\n }, ie.attemptHydrationAtCurrentPriority = function (t) {\n if (t.tag === 13 || t.tag === 31) {\n var r = bt();\n r = st(r);\n var a = Ko(t, r);\n a !== null && nt(a, t, r), vr(t, r);\n }\n }, ie.attemptSynchronousHydration = function (t) {\n switch (t.tag) {\n case 3:\n if (t = t.stateNode, t.current.memoizedState.isDehydrated) {\n var r = Zo(t.pendingLanes);\n if (r !== 0) {\n for (t.pendingLanes |= 2, t.entangledLanes |= 2; r;) {\n var a = 1 << 31 - vt(r);\n t.entanglements[1] |= a, r &= ~a;\n }\n ir(t), (ce & 6) === 0 && (ml = ze() + 500, Ea(0, !1));\n }\n }\n break;\n case 31:\n case 13:\n r = Ko(t, 2), r !== null && nt(r, t, 2), ia(), vr(t, 2);\n }\n }, ie.batchedUpdates = function (t, r) {\n return t(r);\n }, ie.createComponentSelector = function (t) {\n return {\n $$typeof: Vc,\n value: t\n };\n }, ie.createContainer = function (t, r, a, l, c, d, h, y, R, L) {\n return xs(t, r, !1, null, a, l, d, null, h, y, R, L);\n }, ie.createHasPseudoClassSelector = function (t) {\n return {\n $$typeof: qc,\n value: t\n };\n }, ie.createHydrationContainer = function (t, r, a, l, c, d, h, y, R, L, j, A, W, V) {\n var _r2;\n return t = xs(a, l, !0, t, c, d, y, V, R, L, j, A), t.context = fc(null), a = t.current, l = bt(), l = st(l), c = Et(l), c.callback = (_r2 = r) != null ? _r2 : null, Nr(a, c, l), r = l, t.current.lanes = r, xi(t, r), ir(t), t;\n }, ie.createPortal = function (t, r, a) {\n var l = 3 < arguments.length && arguments[3] !== void 0 ? arguments[3] : null;\n return {\n $$typeof: sa,\n key: l == null ? null : \"\" + l,\n children: t,\n containerInfo: r,\n implementation: a\n };\n }, ie.createRoleSelector = function (t) {\n return {\n $$typeof: Gc,\n value: t\n };\n }, ie.createTestNameSelector = function (t) {\n return {\n $$typeof: Jc,\n value: t\n };\n }, ie.createTextSelector = function (t) {\n return {\n $$typeof: Zc,\n value: t\n };\n }, ie.defaultOnCaughtError = function (t) {\n console.error(t);\n }, ie.defaultOnRecoverableError = function (t) {\n Nc(t);\n }, ie.defaultOnUncaughtError = function (t) {\n Nc(t);\n }, ie.deferredUpdates = function (t) {\n var r = M.T,\n a = qr();\n try {\n return yn(32), M.T = null, t();\n } finally {\n yn(a), M.T = r;\n }\n }, ie.discreteUpdates = function (t, r, a, l, c) {\n var d = M.T,\n h = qr();\n try {\n return yn(2), M.T = null, t(r, a, l, c);\n } finally {\n yn(h), M.T = d, ce === 0 && (ml = ze() + 500);\n }\n }, ie.findAllNodes = gs, ie.findBoundingRects = function (t, r) {\n if (!Ga) throw Error(F(363));\n r = gs(t, r), t = [];\n for (var a = 0; a < r.length; a++) t.push(wr(r[a]));\n for (r = t.length - 1; 0 < r; r--) {\n a = t[r];\n for (var l = a.x, c = l + a.width, d = a.y, h = d + a.height, y = r - 1; 0 <= y; y--) if (r !== y) {\n var R = t[y],\n L = R.x,\n j = L + R.width,\n A = R.y,\n W = A + R.height;\n if (l >= L && d >= A && c <= j && h <= W) {\n t.splice(r, 1);\n break;\n } else if (l !== L || a.width !== R.width || W < d || A > h) {\n if (!(d !== A || a.height !== R.height || j < l || L > c)) {\n L > l && (R.width += L - l, R.x = l), j < c && (R.width = c - L), t.splice(r, 1);\n break;\n }\n } else {\n A > d && (R.height += A - d, R.y = d), W < h && (R.height = h - A), t.splice(r, 1);\n break;\n }\n }\n }\n return t;\n }, ie.findHostInstance = vf, ie.findHostInstanceWithNoPortals = function (t) {\n return t = fu(t), t = t !== null ? lt(t) : null, t === null ? null : Ts(t.stateNode);\n }, ie.findHostInstanceWithWarning = function (t) {\n return vf(t);\n }, ie.flushPassiveEffects = rn, ie.flushSyncFromReconciler = function (t) {\n var r = ce;\n ce |= 1;\n var a = M.T,\n l = qr();\n try {\n if (yn(2), M.T = null, t) return t();\n } finally {\n yn(l), M.T = a, ce = r, (ce & 6) === 0 && Ea(0, !1);\n }\n }, ie.flushSyncWork = ia, ie.focusWithin = function (t, r) {\n if (!Ga) throw Error(F(363));\n for (t = Vi(t), r = sf(t, r), r = Array.from(r), t = 0; t < r.length;) {\n var a = r[t++],\n l = a.tag;\n if (!Jr(a)) {\n if ((l === 5 || l === 26 || l === 27) && Es(a.stateNode)) return !0;\n for (a = a.child; a !== null;) r.push(a), a = a.sibling;\n }\n }\n return !1;\n }, ie.getFindAllNodesFailureDescription = function (t, r) {\n if (!Ga) throw Error(F(363));\n var a = 0,\n l = [];\n t = [Vi(t), 0];\n for (var c = 0; c < t.length;) {\n var d = t[c++],\n h = d.tag,\n y = t[c++],\n R = r[y];\n if ((h !== 5 && h !== 26 && h !== 27 || !Jr(d)) && (ms(d, R) && (l.push(nc(R)), y++, y > a && (a = y)), y < r.length)) for (d = d.child; d !== null;) t.push(d, y), d = d.sibling;\n }\n if (a < r.length) {\n for (t = []; a < r.length; a++) t.push(nc(r[a]));\n return `findAllNodes was able to match part of the selector:\n ` + (l.join(\" > \") + `\n\nNo matching component was found for:\n `) + t.join(\" > \");\n }\n return null;\n }, ie.getPublicRootInstance = function (t) {\n if (t = t.current, !t.child) return null;\n switch (t.child.tag) {\n case 27:\n case 5:\n return Ts(t.child.stateNode);\n default:\n return t.child.stateNode;\n }\n }, ie.injectIntoDevTools = function () {\n var t = {\n bundleType: 0,\n version: Yp,\n rendererPackageName: zf,\n currentDispatcherRef: M,\n reconcilerVersion: \"19.2.0\"\n };\n if (Cf !== null && (t.rendererConfig = Cf), typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ > \"u\") t = !1;else {\n var r = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (r.isDisabled || !r.supportsFiber) t = !0;else {\n try {\n ei = r.inject(t), on = r;\n } catch {}\n t = !!r.checkDCE;\n }\n }\n return t;\n }, ie.isAlreadyRendering = function () {\n return (ce & 6) !== 0;\n }, ie.observeVisibleRects = function (t, r, a, l) {\n if (!Ga) throw Error(F(363));\n t = gs(t, r);\n var c = Ja(t, a, l).disconnect;\n return {\n disconnect: function () {\n c();\n }\n };\n }, ie.shouldError = function () {\n return null;\n }, ie.shouldSuspend = function () {\n return !1;\n }, ie.startHostTransition = function (t, r, a, l) {\n if (t.tag !== 5) throw Error(F(476));\n var c = Vd(t).queue;\n $d(t, c, r, rt, a === null ? _d : function () {\n var d = Vd(t);\n return d.next === null && (d = t.alternate.memoizedState), ea(t, d.next.queue, {}, bt()), a(l);\n });\n }, ie.updateContainer = function (t, r, a, l) {\n var c = r.current,\n d = bt();\n return pc(c, d, t, r, a, l), d;\n }, ie.updateContainerSync = function (t, r, a, l) {\n return pc(r.current, 2, t, r, a, l), 2;\n }, ie;\n }, Tt.exports.default = Tt.exports, Object.defineProperty(Tt.exports, \"__esModule\", {\n value: !0\n });\n }(Og)), Og.exports;\n}\nvar Mg = {\n exports: {}\n}; /**\n * @license React\n * react-reconciler.development.js\n *\n * Copyright (c) Meta Platforms, Inc. and affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\nMg.exports;\n var Rb;\nfunction e0() {\n return Rb || (Rb = 1, function (Tt) {\n\n process.env.NODE_ENV !== \"production\" && (Tt.exports = function (m) {\n function Yn(e, n) {\n for (e = e.memoizedState; e !== null && 0 < n;) e = e.next, n--;\n return e;\n }\n function _d(e, n, o, i) {\n if (o >= n.length) return i;\n var s = n[o],\n u = fn(e) ? e.slice() : ze({}, e);\n return u[s] = _d(e[s], n, o + 1, i), u;\n }\n function F(e, n, o) {\n if (n.length !== o.length) console.warn(\"copyWithRename() expects paths of the same length\");else {\n for (var i = 0; i < o.length - 1; i++) if (n[i] !== o[i]) {\n console.warn(\"copyWithRename() expects paths to be the same except for the deepest key\");\n return;\n }\n return Rd(e, n, o, 0);\n }\n }\n function Rd(e, n, o, i) {\n var s = n[i],\n u = fn(e) ? e.slice() : ze({}, e);\n return i + 1 === n.length ? (u[o[i]] = u[s], fn(u) ? u.splice(s, 1) : delete u[s]) : u[s] = Rd(e[s], n, o, i + 1), u;\n }\n function du(e, n, o) {\n var i = n[o],\n s = fn(e) ? e.slice() : ze({}, e);\n return o + 1 === n.length ? (fn(s) ? s.splice(i, 1) : delete s[i], s) : (s[i] = du(e[i], n, o + 1), s);\n }\n function fu() {\n return !1;\n }\n function pu() {\n return null;\n }\n function lt(e, n, o, i) {\n return new Vm(e, n, o, i);\n }\n function Fl(e, n) {\n e.context === Oe && (Wh(n, e, null, null), Ls());\n }\n function hu(e, n) {\n if (co !== null) {\n var o = n.staleFamilies;\n n = n.updatedFamilies, el(), jh(e.current, n, o), Ls();\n }\n }\n function Ir(e) {\n co = e;\n }\n function D() {\n console.error(\"Do not call Hooks inside useEffect(...), useMemo(...), or other built-in Hooks. You can only call Hooks at the top level of your React function. For more information, see https://react.dev/link/rules-of-hooks\");\n }\n function Ce() {\n console.error(\"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\");\n }\n function Em() {}\n function Zo() {}\n function Lr(e) {\n var n = [];\n return e.forEach(function (o) {\n n.push(o);\n }), n.sort().join(\", \");\n }\n function Pi(e) {\n var n = e,\n o = e;\n if (e.alternate) for (; n.return;) n = n.return;else {\n e = n;\n do n = e, (n.flags & 4098) !== 0 && (o = n.return), e = n.return; while (e);\n }\n return n.tag === 3 ? o : null;\n }\n function Tp(e) {\n if (Pi(e) !== e) throw Error(\"Unable to find node on an unmounted component.\");\n }\n function Ed(e) {\n var n = e.alternate;\n if (!n) {\n if (n = Pi(e), n === null) throw Error(\"Unable to find node on an unmounted component.\");\n return n !== e ? null : e;\n }\n for (var o = e, i = n;;) {\n var s = o.return;\n if (s === null) break;\n var u = s.alternate;\n if (u === null) {\n if (i = s.return, i !== null) {\n o = i;\n continue;\n }\n break;\n }\n if (s.child === u.child) {\n for (u = s.child; u;) {\n if (u === o) return Tp(s), e;\n if (u === i) return Tp(s), n;\n u = u.sibling;\n }\n throw Error(\"Unable to find node on an unmounted component.\");\n }\n if (o.return !== i.return) o = s, i = u;else {\n for (var f = !1, p = s.child; p;) {\n if (p === o) {\n f = !0, o = s, i = u;\n break;\n }\n if (p === i) {\n f = !0, i = s, o = u;\n break;\n }\n p = p.sibling;\n }\n if (!f) {\n for (p = u.child; p;) {\n if (p === o) {\n f = !0, o = u, i = s;\n break;\n }\n if (p === i) {\n f = !0, i = u, o = s;\n break;\n }\n p = p.sibling;\n }\n if (!f) throw Error(\"Child was not found in either parent set. This indicates a bug in React related to the return pointer. Please file an issue.\");\n }\n }\n if (o.alternate !== i) throw Error(\"Return fibers should always be each others' alternates. This error is likely caused by a bug in React. Please file an issue.\");\n }\n if (o.tag !== 3) throw Error(\"Unable to find node on an unmounted component.\");\n return o.stateNode.current === o ? e : n;\n }\n function mu(e) {\n return e = Ed(e), e !== null ? xi(e) : null;\n }\n function xi(e) {\n var n = e.tag;\n if (n === 5 || n === 26 || n === 27 || n === 6) return e;\n for (e = e.child; e !== null;) {\n if (n = xi(e), n !== null) return n;\n e = e.sibling;\n }\n return null;\n }\n function _p(e) {\n var n = e.tag;\n if (n === 5 || n === 26 || n === 27 || n === 6) return e;\n for (e = e.child; e !== null;) {\n if (e.tag !== 4 && (n = _p(e), n !== null)) return n;\n e = e.sibling;\n }\n return null;\n }\n function Yo(e) {\n return e === null || typeof e != \"object\" ? null : (e = ni && e[ni] || e[\"@@iterator\"], typeof e == \"function\" ? e : null);\n }\n function $e(e) {\n if (e == null) return null;\n if (typeof e == \"function\") return e.$$typeof === il ? null : e.displayName || e.name || null;\n if (typeof e == \"string\") return e;\n switch (e) {\n case ol:\n return \"Fragment\";\n case Uf:\n return \"Profiler\";\n case Lc:\n return \"StrictMode\";\n case Nc:\n return \"Suspense\";\n case Bf:\n return \"SuspenseList\";\n case Ds:\n return \"Activity\";\n }\n if (typeof e == \"object\") switch (typeof e.tag == \"number\" && console.error(\"Received an unexpected object in getComponentNameFromType(). This is likely a bug in React. Please file an issue.\"), e.$$typeof) {\n case Ao:\n return \"Portal\";\n case on:\n return e.displayName || \"Context\";\n case ei:\n return (e._context.displayName || \"Context\") + \".Consumer\";\n case jn:\n var n = e.render;\n return e = e.displayName, e || (e = n.displayName || n.name || \"\", e = e !== \"\" ? \"ForwardRef(\" + e + \")\" : \"ForwardRef\"), e;\n case al:\n return n = e.displayName || null, n !== null ? n : $e(e.type) || \"Memo\";\n case kt:\n n = e._payload, e = e._init;\n try {\n return $e(e(n));\n } catch {}\n }\n return null;\n }\n function G(e) {\n var n = e.type;\n switch (e.tag) {\n case 31:\n return \"Activity\";\n case 24:\n return \"Cache\";\n case 9:\n return (n._context.displayName || \"Context\") + \".Consumer\";\n case 10:\n return n.displayName || \"Context\";\n case 18:\n return \"DehydratedFragment\";\n case 11:\n return e = n.render, e = e.displayName || e.name || \"\", n.displayName || (e !== \"\" ? \"ForwardRef(\" + e + \")\" : \"ForwardRef\");\n case 7:\n return \"Fragment\";\n case 26:\n case 27:\n case 5:\n return n;\n case 4:\n return \"Portal\";\n case 3:\n return \"Root\";\n case 6:\n return \"Text\";\n case 16:\n return $e(n);\n case 8:\n return n === Lc ? \"StrictMode\" : \"Mode\";\n case 22:\n return \"Offscreen\";\n case 12:\n return \"Profiler\";\n case 21:\n return \"Scope\";\n case 13:\n return \"Suspense\";\n case 19:\n return \"SuspenseList\";\n case 25:\n return \"TracingMarker\";\n case 1:\n case 0:\n case 14:\n case 15:\n if (typeof n == \"function\") return n.displayName || n.name || null;\n if (typeof n == \"string\") return n;\n break;\n case 29:\n if (n = e._debugInfo, n != null) {\n for (var o = n.length - 1; 0 <= o; o--) if (typeof n[o].name == \"string\") return n[o].name;\n }\n if (e.return !== null) return G(e.return);\n }\n return null;\n }\n function st(e) {\n return {\n current: e\n };\n }\n function Ze(e, n) {\n 0 > V ? console.error(\"Unexpected pop.\") : (n !== W[V] && console.error(\"Unexpected Fiber popped.\"), e.current = A[V], A[V] = null, W[V] = null, V--);\n }\n function pe(e, n, o) {\n V++, A[V] = e.current, W[V] = o, e.current = n;\n }\n function Im(e) {\n return e >>>= 0, e === 0 ? 32 : 31 - (li(e) / P | 0) | 0;\n }\n function _t(e) {\n var n = e & 42;\n if (n !== 0) return n;\n switch (e & -e) {\n case 1:\n return 1;\n case 2:\n return 2;\n case 4:\n return 4;\n case 8:\n return 8;\n case 16:\n return 16;\n case 32:\n return 32;\n case 64:\n return 64;\n case 128:\n return 128;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n return e & 261888;\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return e & 3932160;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return e & 62914560;\n case 67108864:\n return 67108864;\n case 134217728:\n return 134217728;\n case 268435456:\n return 268435456;\n case 536870912:\n return 536870912;\n case 1073741824:\n return 0;\n default:\n return console.error(\"Should have found matching lanes. This is a bug in React.\"), e;\n }\n }\n function zi(e, n, o) {\n var i = e.pendingLanes;\n if (i === 0) return 0;\n var s = 0,\n u = e.suspendedLanes,\n f = e.pingedLanes;\n e = e.warmLanes;\n var p = i & 134217727;\n return p !== 0 ? (i = p & ~u, i !== 0 ? s = _t(i) : (f &= p, f !== 0 ? s = _t(f) : o || (o = p & ~e, o !== 0 && (s = _t(o))))) : (p = i & ~u, p !== 0 ? s = _t(p) : f !== 0 ? s = _t(f) : o || (o = i & ~e, o !== 0 && (s = _t(o)))), s === 0 ? 0 : n !== 0 && n !== s && (n & u) === 0 && (u = s & -s, o = n & -n, u >= o || u === 32 && (o & 4194048) !== 0) ? n : s;\n }\n function Hl(e, n) {\n return (e.pendingLanes & ~(e.suspendedLanes & ~e.pingedLanes) & n) === 0;\n }\n function Rp(e, n) {\n switch (e) {\n case 1:\n case 2:\n case 4:\n case 8:\n case 64:\n return n + 250;\n case 16:\n case 32:\n case 128:\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n return n + 5e3;\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n return -1;\n case 67108864:\n case 134217728:\n case 268435456:\n case 536870912:\n case 1073741824:\n return -1;\n default:\n return console.error(\"Should have found matching lanes. This is a bug in React.\"), -1;\n }\n }\n function ut() {\n var e = H;\n return H <<= 1, (H & 62914560) === 0 && (H = 4194304), e;\n }\n function or(e) {\n for (var n = [], o = 0; 31 > o; o++) n.push(e);\n return n;\n }\n function Ci(e, n) {\n e.pendingLanes |= n, n !== 268435456 && (e.suspendedLanes = 0, e.pingedLanes = 0, e.warmLanes = 0);\n }\n function Id(e, n, o, i, s, u) {\n var f = e.pendingLanes;\n e.pendingLanes = o, e.suspendedLanes = 0, e.pingedLanes = 0, e.warmLanes = 0, e.expiredLanes &= o, e.entangledLanes &= o, e.errorRecoveryDisabledLanes &= o, e.shellSuspendCounter = 0;\n var p = e.entanglements,\n g = e.expirationTimes,\n S = e.hiddenUpdates;\n for (o = f & ~o; 0 < o;) {\n var T = 31 - vn(o),\n _ = 1 << T;\n p[T] = 0, g[T] = -1;\n var I = S[T];\n if (I !== null) for (S[T] = null, T = 0; T < I.length; T++) {\n var O = I[T];\n O !== null && (O.lane &= -536870913);\n }\n o &= ~_;\n }\n i !== 0 && gu(e, i, 0), u !== 0 && s === 0 && e.tag !== 0 && (e.suspendedLanes |= u & ~(f & ~n));\n }\n function gu(e, n, o) {\n e.pendingLanes |= n, e.suspendedLanes &= ~n;\n var i = 31 - vn(n);\n e.entangledLanes |= n, e.entanglements[i] = e.entanglements[i] | 1073741824 | o & 261930;\n }\n function Ld(e, n) {\n var o = e.entangledLanes |= n;\n for (e = e.entanglements; o;) {\n var i = 31 - vn(o),\n s = 1 << i;\n s & n | e[i] & n && (e[i] |= n), o &= ~s;\n }\n }\n function Al(e, n) {\n var o = n & -n;\n return o = (o & 42) !== 0 ? 1 : Xo(o), (o & (e.suspendedLanes | n)) !== 0 ? 0 : o;\n }\n function Xo(e) {\n switch (e) {\n case 2:\n e = 1;\n break;\n case 8:\n e = 4;\n break;\n case 32:\n e = 16;\n break;\n case 256:\n case 512:\n case 1024:\n case 2048:\n case 4096:\n case 8192:\n case 16384:\n case 32768:\n case 65536:\n case 131072:\n case 262144:\n case 524288:\n case 1048576:\n case 2097152:\n case 4194304:\n case 8388608:\n case 16777216:\n case 33554432:\n e = 128;\n break;\n case 268435456:\n e = 134217728;\n break;\n default:\n e = 0;\n }\n return e;\n }\n function yu(e, n, o) {\n if (wa) for (e = e.pendingUpdatersLaneMap; 0 < o;) {\n var i = 31 - vn(o),\n s = 1 << i;\n e[i].add(n), o &= ~s;\n }\n }\n function jl(e, n) {\n if (wa) for (var o = e.pendingUpdatersLaneMap, i = e.memoizedUpdaters; 0 < n;) {\n var s = 31 - vn(n);\n e = 1 << s, s = o[s], 0 < s.size && (s.forEach(function (u) {\n var f = u.alternate;\n f !== null && i.has(f) || i.add(u);\n }), s.clear()), n &= ~e;\n }\n }\n function ar(e) {\n return e &= -e, 2 < e ? 8 < e ? (e & 134217727) !== 0 ? 32 : 268435456 : 8 : 2;\n }\n function Ep(e) {\n if (typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ > \"u\") return !1;\n var n = __REACT_DEVTOOLS_GLOBAL_HOOK__;\n if (n.isDisabled) return !0;\n if (!n.supportsFiber) return console.error(\"The installed version of React DevTools is too old and will not work with the current version of React. Please update React DevTools. https://react.dev/link/react-devtools\"), !0;\n try {\n td = n.inject(e), zt = n;\n } catch (o) {\n console.error(\"React instrumentation encountered an error: %o.\", o);\n }\n return !!n.checkDCE;\n }\n function De(e) {\n if (typeof Ib == \"function\" && Lb(e), zt && typeof zt.setStrictMode == \"function\") try {\n zt.setStrictMode(td, e);\n } catch (n) {\n ka || (ka = !0, console.error(\"React instrumentation encountered an error: %o\", n));\n }\n }\n function Ti(e, n) {\n return e === n && (e !== 0 || 1 / e === 1 / n) || e !== e && n !== n;\n }\n function _a(e) {\n for (var n = 0, o = 0; o < e.length; o++) {\n var i = e[o];\n if (typeof i == \"object\" && i !== null) {\n if (fn(i) && i.length === 2 && typeof i[0] == \"string\") {\n if (n !== 0 && n !== 3) return 1;\n n = 3;\n } else return 1;\n } else {\n if (typeof i == \"function\" || typeof i == \"string\" && 50 < i.length || n !== 0 && n !== 2) return 1;\n n = 2;\n }\n }\n return n;\n }\n function Dl(e, n, o, i) {\n for (var s in e) Xm.call(e, s) && s[0] !== \"_\" && ct(s, e[s], n, o, i);\n }\n function ct(e, n, o, i, s) {\n switch (typeof n) {\n case \"object\":\n if (n === null) {\n n = \"null\";\n break;\n } else {\n if (n.$$typeof === Ho) {\n var u = $e(n.type) || \"\\u2026\",\n f = n.key;\n n = n.props;\n var p = Object.keys(n),\n g = p.length;\n if (f == null && g === 0) {\n n = \"<\" + u + \" />\";\n break;\n }\n if (3 > i || g === 1 && p[0] === \"children\" && f == null) {\n n = \"<\" + u + \" \\u2026 />\";\n break;\n }\n o.push([s + \"\\xA0\\xA0\".repeat(i) + e, \"<\" + u]), f !== null && ct(\"key\", f, o, i + 1, s), e = !1;\n for (var S in n) S === \"children\" ? n.children != null && (!fn(n.children) || 0 < n.children.length) && (e = !0) : Xm.call(n, S) && S[0] !== \"_\" && ct(S, n[S], o, i + 1, s);\n o.push([\"\", e ? \">\\u2026</\" + u + \">\" : \"/>\"]);\n return;\n }\n if (u = Object.prototype.toString.call(n), u = u.slice(8, u.length - 1), u === \"Array\") {\n if (S = _a(n), S === 2 || S === 0) {\n n = JSON.stringify(n);\n break;\n } else if (S === 3) {\n for (o.push([s + \"\\xA0\\xA0\".repeat(i) + e, \"\"]), e = 0; e < n.length; e++) u = n[e], ct(u[0], u[1], o, i + 1, s);\n return;\n }\n }\n if (u === \"Promise\") {\n if (n.status === \"fulfilled\") {\n if (u = o.length, ct(e, n.value, o, i, s), o.length > u) {\n o = o[u], o[1] = \"Promise<\" + (o[1] || \"Object\") + \">\";\n return;\n }\n } else if (n.status === \"rejected\" && (u = o.length, ct(e, n.reason, o, i, s), o.length > u)) {\n o = o[u], o[1] = \"Rejected Promise<\" + o[1] + \">\";\n return;\n }\n o.push([\"\\xA0\\xA0\".repeat(i) + e, \"Promise\"]);\n return;\n }\n u === \"Object\" && (S = Object.getPrototypeOf(n)) && typeof S.constructor == \"function\" && (u = S.constructor.name), o.push([s + \"\\xA0\\xA0\".repeat(i) + e, u === \"Object\" ? 3 > i ? \"\" : \"\\u2026\" : u]), 3 > i && Dl(n, o, i + 1, s);\n return;\n }\n case \"function\":\n n = n.name === \"\" ? \"() => {}\" : n.name + \"() {}\";\n break;\n case \"string\":\n n = n === \"This object has been omitted by React in the console log to avoid sending too much data from the server. Try logging smaller or more specific objects.\" ? \"\\u2026\" : JSON.stringify(n);\n break;\n case \"undefined\":\n n = \"undefined\";\n break;\n case \"boolean\":\n n = n ? \"true\" : \"false\";\n break;\n default:\n n = String(n);\n }\n o.push([s + \"\\xA0\\xA0\".repeat(i) + e, n]);\n }\n function fo(e, n, o, i) {\n var s = !0;\n for (f in e) f in n || (o.push([\"\\u2013\\xA0\" + \"\\xA0\\xA0\".repeat(i) + f, \"\\u2026\"]), s = !1);\n for (var u in n) if (u in e) {\n var f = e[u],\n p = n[u];\n if (f !== p) {\n if (i === 0 && u === \"children\") s = \"\\xA0\\xA0\".repeat(i) + u, o.push([\"\\u2013\\xA0\" + s, \"\\u2026\"], [\"+\\xA0\" + s, \"\\u2026\"]);else {\n if (!(3 <= i)) {\n if (typeof f == \"object\" && typeof p == \"object\" && f !== null && p !== null && f.$$typeof === p.$$typeof) {\n if (p.$$typeof === Ho) {\n if (f.type === p.type && f.key === p.key) {\n f = $e(p.type) || \"\\u2026\", s = \"\\xA0\\xA0\".repeat(i) + u, f = \"<\" + f + \" \\u2026 />\", o.push([\"\\u2013\\xA0\" + s, f], [\"+\\xA0\" + s, f]), s = !1;\n continue;\n }\n } else {\n var g = Object.prototype.toString.call(f),\n S = Object.prototype.toString.call(p);\n if (g === S && (S === \"[object Object]\" || S === \"[object Array]\")) {\n g = [\"\\u2007\\xA0\" + \"\\xA0\\xA0\".repeat(i) + u, S === \"[object Array]\" ? \"Array\" : \"\"], o.push(g), S = o.length, fo(f, p, o, i + 1) ? S === o.length && (g[1] = \"Referentially unequal but deeply equal objects. Consider memoization.\") : s = !1;\n continue;\n }\n }\n } else if (typeof f == \"function\" && typeof p == \"function\" && f.name === p.name && f.length === p.length && (g = Function.prototype.toString.call(f), S = Function.prototype.toString.call(p), g === S)) {\n f = p.name === \"\" ? \"() => {}\" : p.name + \"() {}\", o.push([\"\\u2007\\xA0\" + \"\\xA0\\xA0\".repeat(i) + u, f + \" Referentially unequal function closure. Consider memoization.\"]);\n continue;\n }\n }\n ct(u, f, o, i, \"\\u2013\\xA0\"), ct(u, p, o, i, \"+\\xA0\");\n }\n s = !1;\n }\n } else o.push([\"+\\xA0\" + \"\\xA0\\xA0\".repeat(i) + u, \"\\u2026\"]), s = !1;\n return s;\n }\n function En(e) {\n fe = e & 63 ? \"Blocking\" : e & 64 ? \"Gesture\" : e & 4194176 ? \"Transition\" : e & 62914560 ? \"Suspense\" : e & 2080374784 ? \"Idle\" : \"Other\";\n }\n function Ot(e, n, o, i) {\n Me && (bl.start = n, bl.end = o, si.color = \"warning\", si.tooltipText = i, si.properties = null, (e = e._debugTask) ? e.run(performance.measure.bind(performance, i, bl)) : performance.measure(i, bl));\n }\n function _i(e, n, o) {\n Ot(e, n, o, \"Reconnect\");\n }\n function po(e, n, o, i, s) {\n var u = G(e);\n if (u !== null && Me) {\n var f = e.alternate,\n p = e.actualDuration;\n if (f === null || f.child !== e.child) for (var g = e.child; g !== null; g = g.sibling) p -= g.actualDuration;\n i = .5 > p ? i ? \"tertiary-light\" : \"primary-light\" : 10 > p ? i ? \"tertiary\" : \"primary\" : 100 > p ? i ? \"tertiary-dark\" : \"primary-dark\" : \"error\";\n var S = e.memoizedProps;\n p = e._debugTask, S !== null && f !== null && f.memoizedProps !== S ? (g = [Hb], S = fo(f.memoizedProps, S, g, 0), 1 < g.length && (S && !yl && (f.lanes & s) === 0 && 100 < e.actualDuration ? (yl = !0, g[0] = Ab, si.color = \"warning\", si.tooltipText = \"This component received deeply equal props. It might benefit from useMemo or the React Compiler in its owner.\") : (si.color = i, si.tooltipText = u), si.properties = g, bl.start = n, bl.end = o, p != null ? p.run(performance.measure.bind(performance, \"\\u200B\" + u, bl)) : performance.measure(\"\\u200B\" + u, bl))) : p != null ? p.run(console.timeStamp.bind(console, u, n, o, \"Components \\u269B\", void 0, i)) : console.timeStamp(u, n, o, \"Components \\u269B\", void 0, i);\n }\n }\n function Ri(e, n, o, i) {\n if (Me) {\n var s = G(e);\n if (s !== null) {\n for (var u = null, f = [], p = 0; p < i.length; p++) {\n var g = i[p];\n u == null && g.source !== null && (u = g.source._debugTask), g = g.value, f.push([\"Error\", typeof g == \"object\" && g !== null && typeof g.message == \"string\" ? String(g.message) : String(g)]);\n }\n e.key !== null && ct(\"key\", e.key, f, 0, \"\"), e.memoizedProps !== null && Dl(e.memoizedProps, f, 0, \"\"), u == null && (u = e._debugTask), e = {\n start: n,\n end: o,\n detail: {\n devtools: {\n color: \"error\",\n track: \"Components \\u269B\",\n tooltipText: e.tag === 13 ? \"Hydration failed\" : \"Error boundary caught an error\",\n properties: f\n }\n }\n }, u ? u.run(performance.measure.bind(performance, \"\\u200B\" + s, e)) : performance.measure(\"\\u200B\" + s, e);\n }\n }\n }\n function Un(e, n, o, i, s) {\n if (s !== null) {\n if (Me) {\n var u = G(e);\n if (u !== null) {\n i = [];\n for (var f = 0; f < s.length; f++) {\n var p = s[f].value;\n i.push([\"Error\", typeof p == \"object\" && p !== null && typeof p.message == \"string\" ? String(p.message) : String(p)]);\n }\n e.key !== null && ct(\"key\", e.key, i, 0, \"\"), e.memoizedProps !== null && Dl(e.memoizedProps, i, 0, \"\"), n = {\n start: n,\n end: o,\n detail: {\n devtools: {\n color: \"error\",\n track: \"Components \\u269B\",\n tooltipText: \"A lifecycle or effect errored\",\n properties: i\n }\n }\n }, (e = e._debugTask) ? e.run(performance.measure.bind(performance, \"\\u200B\" + u, n)) : performance.measure(\"\\u200B\" + u, n);\n }\n }\n } else u = G(e), u !== null && Me && (s = 1 > i ? \"secondary-light\" : 100 > i ? \"secondary\" : 500 > i ? \"secondary-dark\" : \"error\", (e = e._debugTask) ? e.run(console.timeStamp.bind(console, u, n, o, \"Components \\u269B\", void 0, s)) : console.timeStamp(u, n, o, \"Components \\u269B\", void 0, s));\n }\n function In(e, n, o, i) {\n if (Me && !(n <= e)) {\n var s = (o & 738197653) === o ? \"tertiary-dark\" : \"primary-dark\";\n o = (o & 536870912) === o ? \"Prepared\" : (o & 201326741) === o ? \"Hydrated\" : \"Render\", i ? i.run(console.timeStamp.bind(console, o, e, n, fe, \"Scheduler \\u269B\", s)) : console.timeStamp(o, e, n, fe, \"Scheduler \\u269B\", s);\n }\n }\n function Wl(e, n, o, i) {\n !Me || n <= e || (o = (o & 738197653) === o ? \"tertiary-dark\" : \"primary-dark\", i ? i.run(console.timeStamp.bind(console, \"Prewarm\", e, n, fe, \"Scheduler \\u269B\", o)) : console.timeStamp(\"Prewarm\", e, n, fe, \"Scheduler \\u269B\", o));\n }\n function Nd(e, n, o, i) {\n !Me || n <= e || (o = (o & 738197653) === o ? \"tertiary-dark\" : \"primary-dark\", i ? i.run(console.timeStamp.bind(console, \"Suspended\", e, n, fe, \"Scheduler \\u269B\", o)) : console.timeStamp(\"Suspended\", e, n, fe, \"Scheduler \\u269B\", o));\n }\n function Fd(e, n, o, i, s, u) {\n if (Me && !(n <= e)) {\n o = [];\n for (var f = 0; f < i.length; f++) {\n var p = i[f].value;\n o.push([\"Recoverable Error\", typeof p == \"object\" && p !== null && typeof p.message == \"string\" ? String(p.message) : String(p)]);\n }\n e = {\n start: e,\n end: n,\n detail: {\n devtools: {\n color: \"primary-dark\",\n track: fe,\n trackGroup: \"Scheduler \\u269B\",\n tooltipText: s ? \"Hydration Failed\" : \"Recovered after Error\",\n properties: o\n }\n }\n }, u ? u.run(performance.measure.bind(performance, \"Recovered\", e)) : performance.measure(\"Recovered\", e);\n }\n }\n function Ra(e, n, o, i) {\n !Me || n <= e || (i ? i.run(console.timeStamp.bind(console, \"Errored\", e, n, fe, \"Scheduler \\u269B\", \"error\")) : console.timeStamp(\"Errored\", e, n, fe, \"Scheduler \\u269B\", \"error\"));\n }\n function bu(e, n, o, i) {\n !Me || n <= e || (i ? i.run(console.timeStamp.bind(console, o, e, n, fe, \"Scheduler \\u269B\", \"secondary-light\")) : console.timeStamp(o, e, n, fe, \"Scheduler \\u269B\", \"secondary-light\"));\n }\n function ir(e, n, o, i, s) {\n if (Me && !(n <= e)) {\n for (var u = [], f = 0; f < o.length; f++) {\n var p = o[f].value;\n u.push([\"Error\", typeof p == \"object\" && p !== null && typeof p.message == \"string\" ? String(p.message) : String(p)]);\n }\n e = {\n start: e,\n end: n,\n detail: {\n devtools: {\n color: \"error\",\n track: fe,\n trackGroup: \"Scheduler \\u269B\",\n tooltipText: i ? \"Remaining Effects Errored\" : \"Commit Errored\",\n properties: u\n }\n }\n }, s ? s.run(performance.measure.bind(performance, \"Errored\", e)) : performance.measure(\"Errored\", e);\n }\n }\n function Ea() {}\n function Ip() {\n if (Yf === 0) {\n Gg = console.log, Jg = console.info, Zg = console.warn, Yg = console.error, Xg = console.group, Kg = console.groupCollapsed, ey = console.groupEnd;\n var e = {\n configurable: !0,\n enumerable: !0,\n value: Ea,\n writable: !0\n };\n Object.defineProperties(console, {\n info: e,\n log: e,\n warn: e,\n error: e,\n group: e,\n groupCollapsed: e,\n groupEnd: e\n });\n }\n Yf++;\n }\n function Lp() {\n if (Yf--, Yf === 0) {\n var e = {\n configurable: !0,\n enumerable: !0,\n writable: !0\n };\n Object.defineProperties(console, {\n log: ze({}, e, {\n value: Gg\n }),\n info: ze({}, e, {\n value: Jg\n }),\n warn: ze({}, e, {\n value: Zg\n }),\n error: ze({}, e, {\n value: Yg\n }),\n group: ze({}, e, {\n value: Xg\n }),\n groupCollapsed: ze({}, e, {\n value: Kg\n }),\n groupEnd: ze({}, e, {\n value: ey\n })\n });\n }\n 0 > Yf && console.error(\"disabledDepth fell below zero. This is a bug in React. Please file an issue.\");\n }\n function vu(e) {\n var n = Error.prepareStackTrace;\n if (Error.prepareStackTrace = void 0, e = e.stack, Error.prepareStackTrace = n, e.startsWith(`Error: react-stack-top-frame\n`) && (e = e.slice(29)), n = e.indexOf(`\n`), n !== -1 && (e = e.slice(n + 1)), n = e.indexOf(\"react_stack_bottom_frame\"), n !== -1 && (n = e.lastIndexOf(`\n`, n)), n !== -1) e = e.slice(0, n);else return \"\";\n return e;\n }\n function dt(e) {\n if (Km === void 0) try {\n throw Error();\n } catch (o) {\n var n = o.stack.trim().match(/\\n( *(at )?)/);\n Km = n && n[1] || \"\", ny = -1 < o.stack.indexOf(`\n at`) ? \" (<anonymous>)\" : -1 < o.stack.indexOf(\"@\") ? \"@unknown:0:0\" : \"\";\n }\n return `\n` + Km + e + ny;\n }\n function Su(e, n) {\n if (!e || eg) return \"\";\n var o = ng.get(e);\n if (o !== void 0) return o;\n eg = !0, o = Error.prepareStackTrace, Error.prepareStackTrace = void 0;\n var i = null;\n i = x.H, x.H = null, Ip();\n try {\n var s = {\n DetermineComponentFrameRoot: function () {\n try {\n if (n) {\n var I = function () {\n throw Error();\n };\n if (Object.defineProperty(I.prototype, \"props\", {\n set: function () {\n throw Error();\n }\n }), typeof Reflect == \"object\" && Reflect.construct) {\n try {\n Reflect.construct(I, []);\n } catch (K) {\n var O = K;\n }\n Reflect.construct(e, [], I);\n } else {\n try {\n I.call();\n } catch (K) {\n O = K;\n }\n e.call(I.prototype);\n }\n } else {\n try {\n throw Error();\n } catch (K) {\n O = K;\n }\n (I = e()) && typeof I.catch == \"function\" && I.catch(function () {});\n }\n } catch (K) {\n if (K && O && typeof K.stack == \"string\") return [K.stack, O.stack];\n }\n return [null, null];\n }\n };\n s.DetermineComponentFrameRoot.displayName = \"DetermineComponentFrameRoot\";\n var u = Object.getOwnPropertyDescriptor(s.DetermineComponentFrameRoot, \"name\");\n u && u.configurable && Object.defineProperty(s.DetermineComponentFrameRoot, \"name\", {\n value: \"DetermineComponentFrameRoot\"\n });\n var f = s.DetermineComponentFrameRoot(),\n p = f[0],\n g = f[1];\n if (p && g) {\n var S = p.split(`\n`),\n T = g.split(`\n`);\n for (f = u = 0; u < S.length && !S[u].includes(\"DetermineComponentFrameRoot\");) u++;\n for (; f < T.length && !T[f].includes(\"DetermineComponentFrameRoot\");) f++;\n if (u === S.length || f === T.length) for (u = S.length - 1, f = T.length - 1; 1 <= u && 0 <= f && S[u] !== T[f];) f--;\n for (; 1 <= u && 0 <= f; u--, f--) if (S[u] !== T[f]) {\n if (u !== 1 || f !== 1) do if (u--, f--, 0 > f || S[u] !== T[f]) {\n var _ = `\n` + S[u].replace(\" at new \", \" at \");\n return e.displayName && _.includes(\"<anonymous>\") && (_ = _.replace(\"<anonymous>\", e.displayName)), typeof e == \"function\" && ng.set(e, _), _;\n } while (1 <= u && 0 <= f);\n break;\n }\n }\n } finally {\n eg = !1, x.H = i, Lp(), Error.prepareStackTrace = o;\n }\n return S = (S = e ? e.displayName || e.name : \"\") ? dt(S) : \"\", typeof e == \"function\" && ng.set(e, S), S;\n }\n function Lm(e, n) {\n switch (e.tag) {\n case 26:\n case 27:\n case 5:\n return dt(e.type);\n case 16:\n return dt(\"Lazy\");\n case 13:\n return e.child !== n && n !== null ? dt(\"Suspense Fallback\") : dt(\"Suspense\");\n case 19:\n return dt(\"SuspenseList\");\n case 0:\n case 15:\n return Su(e.type, !1);\n case 11:\n return Su(e.type.render, !1);\n case 1:\n return Su(e.type, !0);\n case 31:\n return dt(\"Activity\");\n default:\n return \"\";\n }\n }\n function ku(e) {\n try {\n var n = \"\",\n o = null;\n do {\n n += Lm(e, o);\n var i = e._debugInfo;\n if (i) for (var s = i.length - 1; 0 <= s; s--) {\n var u = i[s];\n if (typeof u.name == \"string\") {\n var f = n;\n e: {\n var p = u.name,\n g = u.env,\n S = u.debugLocation;\n if (S != null) {\n var T = vu(S),\n _ = T.lastIndexOf(`\n`),\n I = _ === -1 ? T : T.slice(_ + 1);\n if (I.indexOf(p) !== -1) {\n var O = `\n` + I;\n break e;\n }\n }\n O = dt(p + (g ? \" [\" + g + \"]\" : \"\"));\n }\n n = f + O;\n }\n }\n o = e, e = e.return;\n } while (e);\n return n;\n } catch (K) {\n return `\nError generating stack: ` + K.message + `\n` + K.stack;\n }\n }\n function Np(e) {\n return (e = e ? e.displayName || e.name : \"\") ? dt(e) : \"\";\n }\n function ft(e, n) {\n if (typeof e == \"object\" && e !== null) {\n var o = tg.get(e);\n return o !== void 0 ? o : (n = {\n value: e,\n source: n,\n stack: ku(n)\n }, tg.set(e, n), n);\n }\n return {\n value: e,\n source: n,\n stack: ku(n)\n };\n }\n function ho(e, n) {\n mo(), rd[od++] = Xf, rd[od++] = Vh, Vh = e, Xf = n;\n }\n function wu(e, n, o) {\n mo(), to[ro++] = ui, to[ro++] = ci, to[ro++] = Gs, Gs = e;\n var i = ui;\n e = ci;\n var s = 32 - vn(i) - 1;\n i &= ~(1 << s), o += 1;\n var u = 32 - vn(n) + s;\n if (30 < u) {\n var f = s - s % 5;\n u = (i & (1 << f) - 1).toString(32), i >>= f, s -= f, ui = 1 << 32 - vn(n) + s | o << s | i, ci = u + e;\n } else ui = 1 << u | o << s | i, ci = e;\n }\n function Ei(e) {\n mo(), e.return !== null && (ho(e, 1), wu(e, 1, 0));\n }\n function Pu(e) {\n for (; e === Vh;) Vh = rd[--od], rd[od] = null, Xf = rd[--od], rd[od] = null;\n for (; e === Gs;) Gs = to[--ro], to[ro] = null, ci = to[--ro], to[ro] = null, ui = to[--ro], to[ro] = null;\n }\n function Ul() {\n return mo(), Gs !== null ? {\n id: ui,\n overflow: ci\n } : null;\n }\n function Hd(e, n) {\n mo(), to[ro++] = ui, to[ro++] = ci, to[ro++] = Gs, ui = n.id, ci = n.overflow, Gs = e;\n }\n function mo() {\n ge || console.error(\"Expected to be hydrating. This is a bug in React. Please file an issue.\");\n }\n function pt(e) {\n return e === null && console.error(\"Expected host context to exist. This error is likely caused by a bug in React. Please file an issue.\"), e;\n }\n function Bl(e, n) {\n pe(Sl, n, e), pe(Kf, e, e), pe(vl, null, e), n = Zr(n), Ze(vl, e), pe(vl, n, e);\n }\n function Ia(e) {\n Ze(vl, e), Ze(Kf, e), Ze(Sl, e);\n }\n function Rt() {\n return pt(vl.current);\n }\n function La(e) {\n e.memoizedState !== null && pe(qh, e, e);\n var n = pt(vl.current),\n o = Dn(n, e.type);\n n !== o && (pe(Kf, e, e), pe(vl, o, e));\n }\n function Na(e) {\n Kf.current === e && (Ze(vl, e), Ze(Kf, e)), qh.current === e && (Ze(qh, e), at ? Kt._currentValue = Xt : Kt._currentValue2 = Xt);\n }\n function Ad(e, n) {\n return e.serverProps === void 0 && e.serverTail.length === 0 && e.children.length === 1 && 3 < e.distanceFromLeaf && e.distanceFromLeaf > 15 - n ? Ad(e.children[0], n) : e;\n }\n function Bn(e) {\n return \" \" + \" \".repeat(e);\n }\n function go(e) {\n return \"+ \" + \" \".repeat(e);\n }\n function yo(e) {\n return \"- \" + \" \".repeat(e);\n }\n function Ko(e) {\n switch (e.tag) {\n case 26:\n case 27:\n case 5:\n return e.type;\n case 16:\n return \"Lazy\";\n case 31:\n return \"Activity\";\n case 13:\n return \"Suspense\";\n case 19:\n return \"SuspenseList\";\n case 0:\n case 15:\n return e = e.type, e.displayName || e.name || null;\n case 11:\n return e = e.type.render, e.displayName || e.name || null;\n case 1:\n return e = e.type, e.displayName || e.name || null;\n default:\n return null;\n }\n }\n function Ii(e, n) {\n return ty.test(e) ? (e = JSON.stringify(e), e.length > n - 2 ? 8 > n ? '{\"...\"}' : \"{\" + e.slice(0, n - 7) + '...\"}' : \"{\" + e + \"}\") : e.length > n ? 5 > n ? '{\"...\"}' : e.slice(0, n - 3) + \"...\" : e;\n }\n function Fa(e, n, o) {\n var i = 120 - 2 * o;\n if (n === null) return go(o) + Ii(e, i) + `\n`;\n if (typeof n == \"string\") {\n for (var s = 0; s < n.length && s < e.length && n.charCodeAt(s) === e.charCodeAt(s); s++);\n return s > i - 8 && 10 < s && (e = \"...\" + e.slice(s - 8), n = \"...\" + n.slice(s - 8)), go(o) + Ii(e, i) + `\n` + yo(o) + Ii(n, i) + `\n`;\n }\n return Bn(o) + Ii(e, i) + `\n`;\n }\n function Ol(e) {\n return Object.prototype.toString.call(e).replace(/^\\[object (.*)\\]$/, function (n, o) {\n return o;\n });\n }\n function Ha(e, n) {\n switch (typeof e) {\n case \"string\":\n return e = JSON.stringify(e), e.length > n ? 5 > n ? '\"...\"' : e.slice(0, n - 4) + '...\"' : e;\n case \"object\":\n if (e === null) return \"null\";\n if (fn(e)) return \"[...]\";\n if (e.$$typeof === Ho) return (n = $e(e.type)) ? \"<\" + n + \">\" : \"<...>\";\n var o = Ol(e);\n if (o === \"Object\") {\n o = \"\", n -= 2;\n for (var i in e) if (e.hasOwnProperty(i)) {\n var s = JSON.stringify(i);\n if (s !== '\"' + i + '\"' && (i = s), n -= i.length - 2, s = Ha(e[i], 15 > n ? n : 15), n -= s.length, 0 > n) {\n o += o === \"\" ? \"...\" : \", ...\";\n break;\n }\n o += (o === \"\" ? \"\" : \",\") + i + \":\" + s;\n }\n return \"{\" + o + \"}\";\n }\n return o;\n case \"function\":\n return (n = e.displayName || e.name) ? \"function \" + n : \"function\";\n default:\n return String(e);\n }\n }\n function Et(e, n) {\n return typeof e != \"string\" || ty.test(e) ? \"{\" + Ha(e, n - 2) + \"}\" : e.length > n - 2 ? 5 > n ? '\"...\"' : '\"' + e.slice(0, n - 5) + '...\"' : '\"' + e + '\"';\n }\n function Nr(e, n, o) {\n var i = 120 - o.length - e.length,\n s = [],\n u;\n for (u in n) if (n.hasOwnProperty(u) && u !== \"children\") {\n var f = Et(n[u], 120 - o.length - u.length - 1);\n i -= u.length + f.length + 2, s.push(u + \"=\" + f);\n }\n return s.length === 0 ? o + \"<\" + e + `>\n` : 0 < i ? o + \"<\" + e + \" \" + s.join(\" \") + `>\n` : o + \"<\" + e + `\n` + o + \" \" + s.join(`\n` + o + \" \") + `\n` + o + `>\n`;\n }\n function Ml(e, n, o) {\n var i = \"\",\n s = ze({}, n),\n u;\n for (u in e) if (e.hasOwnProperty(u)) {\n delete s[u];\n var f = 120 - 2 * o - u.length - 2,\n p = Ha(e[u], f);\n n.hasOwnProperty(u) ? (f = Ha(n[u], f), i += go(o) + u + \": \" + p + `\n`, i += yo(o) + u + \": \" + f + `\n`) : i += go(o) + u + \": \" + p + `\n`;\n }\n for (var g in s) s.hasOwnProperty(g) && (e = Ha(s[g], 120 - 2 * o - g.length - 2), i += yo(o) + g + \": \" + e + `\n`);\n return i;\n }\n function jd(e, n, o, i) {\n var s = \"\",\n u = new Map();\n for (S in o) o.hasOwnProperty(S) && u.set(S.toLowerCase(), S);\n if (u.size === 1 && u.has(\"children\")) s += Nr(e, n, Bn(i));else {\n for (var f in n) if (n.hasOwnProperty(f) && f !== \"children\") {\n var p = 120 - 2 * (i + 1) - f.length - 1,\n g = u.get(f.toLowerCase());\n if (g !== void 0) {\n u.delete(f.toLowerCase());\n var S = n[f];\n g = o[g];\n var T = Et(S, p);\n p = Et(g, p), typeof S == \"object\" && S !== null && typeof g == \"object\" && g !== null && Ol(S) === \"Object\" && Ol(g) === \"Object\" && (2 < Object.keys(S).length || 2 < Object.keys(g).length || -1 < T.indexOf(\"...\") || -1 < p.indexOf(\"...\")) ? s += Bn(i + 1) + f + `={{\n` + Ml(S, g, i + 2) + Bn(i + 1) + `}}\n` : (s += go(i + 1) + f + \"=\" + T + `\n`, s += yo(i + 1) + f + \"=\" + p + `\n`);\n } else s += Bn(i + 1) + f + \"=\" + Et(n[f], p) + `\n`;\n }\n u.forEach(function (_) {\n if (_ !== \"children\") {\n var I = 120 - 2 * (i + 1) - _.length - 1;\n s += yo(i + 1) + _ + \"=\" + Et(o[_], I) + `\n`;\n }\n }), s = s === \"\" ? Bn(i) + \"<\" + e + `>\n` : Bn(i) + \"<\" + e + `\n` + s + Bn(i) + `>\n`;\n }\n return e = o.children, n = n.children, typeof e == \"string\" || typeof e == \"number\" || typeof e == \"bigint\" ? (u = \"\", (typeof n == \"string\" || typeof n == \"number\" || typeof n == \"bigint\") && (u = \"\" + n), s += Fa(u, \"\" + e, i + 1)) : (typeof n == \"string\" || typeof n == \"number\" || typeof n == \"bigint\") && (s = e == null ? s + Fa(\"\" + n, null, i + 1) : s + Fa(\"\" + n, void 0, i + 1)), s;\n }\n function Li(e, n) {\n var o = Ko(e);\n if (o === null) {\n for (o = \"\", e = e.child; e;) o += Li(e, n), e = e.sibling;\n return o;\n }\n return Bn(n) + \"<\" + o + `>\n`;\n }\n function Aa(e, n) {\n var o = Ad(e, n);\n if (o !== e && (e.children.length !== 1 || e.children[0] !== o)) return Bn(n) + `...\n` + Aa(o, n + 1);\n o = \"\";\n var i = e.fiber._debugInfo;\n if (i) for (var s = 0; s < i.length; s++) {\n var u = i[s].name;\n typeof u == \"string\" && (o += Bn(n) + \"<\" + u + `>\n`, n++);\n }\n if (i = \"\", s = e.fiber.pendingProps, e.fiber.tag === 6) i = Fa(s, e.serverProps, n), n++;else if (u = Ko(e.fiber), u !== null) if (e.serverProps === void 0) {\n i = n;\n var f = 120 - 2 * i - u.length - 2,\n p = \"\";\n for (S in s) if (s.hasOwnProperty(S) && S !== \"children\") {\n var g = Et(s[S], 15);\n if (f -= S.length + g.length + 2, 0 > f) {\n p += \" ...\";\n break;\n }\n p += \" \" + S + \"=\" + g;\n }\n i = Bn(i) + \"<\" + u + p + `>\n`, n++;\n } else e.serverProps === null ? (i = Nr(u, s, go(n)), n++) : typeof e.serverProps == \"string\" ? console.error(\"Should not have matched a non HostText fiber to a Text node. This is a bug in React.\") : (i = jd(u, s, e.serverProps, n), n++);\n var S = \"\";\n for (s = e.fiber.child, u = 0; s && u < e.children.length;) f = e.children[u], f.fiber === s ? (S += Aa(f, n), u++) : S += Li(s, n), s = s.sibling;\n for (s && 0 < e.children.length && (S += Bn(n) + `...\n`), s = e.serverTail, e.serverProps === null && n--, e = 0; e < s.length; e++) u = s[e], S = typeof u == \"string\" ? S + (yo(n) + Ii(u, 120 - 2 * n) + `\n`) : S + Nr(u.type, u.props, yo(n));\n return o + i + S;\n }\n function Dd(e) {\n try {\n return `\n\n` + Aa(e, 0);\n } catch {\n return \"\";\n }\n }\n function Fp() {\n if (di === null) return \"\";\n var e = di;\n try {\n var n = \"\";\n switch (e.tag === 6 && (e = e.return), e.tag) {\n case 26:\n case 27:\n case 5:\n n += dt(e.type);\n break;\n case 13:\n n += dt(\"Suspense\");\n break;\n case 19:\n n += dt(\"SuspenseList\");\n break;\n case 31:\n n += dt(\"Activity\");\n break;\n case 30:\n case 0:\n case 15:\n case 1:\n e._debugOwner || n !== \"\" || (n += Np(e.type));\n break;\n case 11:\n e._debugOwner || n !== \"\" || (n += Np(e.type.render));\n }\n for (; e;) if (typeof e.tag == \"number\") {\n var o = e;\n e = o._debugOwner;\n var i = o._debugStack;\n if (e && i) {\n var s = vu(i);\n s !== \"\" && (n += `\n` + s);\n }\n } else if (e.debugStack != null) {\n var u = e.debugStack;\n (e = e.owner) && u && (n += `\n` + vu(u));\n } else break;\n var f = n;\n } catch (p) {\n f = `\nError generating stack: ` + p.message + `\n` + p.stack;\n }\n return f;\n }\n function B(e, n, o, i, s, u, f) {\n var p = di;\n Ql(e);\n try {\n return e !== null && e._debugTask ? e._debugTask.run(n.bind(null, o, i, s, u, f)) : n(o, i, s, u, f);\n } finally {\n Ql(p);\n }\n throw Error(\"runWithFiberInDEV should never be called in production. This is a bug in React.\");\n }\n function Ql(e) {\n x.getCurrentStack = e === null ? null : Fp, Pa = !1, di = e;\n }\n function bo(e, n) {\n if (e.return === null) {\n if (Tr === null) Tr = {\n fiber: e,\n children: [],\n serverProps: void 0,\n serverTail: [],\n distanceFromLeaf: n\n };else {\n if (Tr.fiber !== e) throw Error(\"Saw multiple hydration diff roots in a pass. This is a bug in React.\");\n Tr.distanceFromLeaf > n && (Tr.distanceFromLeaf = n);\n }\n return Tr;\n }\n var o = bo(e.return, n + 1).children;\n return 0 < o.length && o[o.length - 1].fiber === e ? (o = o[o.length - 1], o.distanceFromLeaf > n && (o.distanceFromLeaf = n), o) : (n = {\n fiber: e,\n children: [],\n serverProps: void 0,\n serverTail: [],\n distanceFromLeaf: n\n }, o.push(n), n);\n }\n function vo() {\n ge && console.error(\"We should not be hydrating here. This is a bug in React. Please file a bug.\");\n }\n function Ni(e, n) {\n xa || (e = bo(e, 0), e.serverProps = null, n !== null && (n = ml(n), e.serverTail.push(n)));\n }\n function Fr(e) {\n var n = 1 < arguments.length && arguments[1] !== void 0 ? arguments[1] : !1,\n o = \"\",\n i = Tr;\n throw i !== null && (Tr = null, o = Dd(i)), Fi(ft(Error(\"Hydration failed because the server rendered \" + (n ? \"text\" : \"HTML\") + ` didn't match the client. As a result this tree will be regenerated on the client. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch \\`if (typeof window !== 'undefined')\\`.\n- Variable input such as \\`Date.now()\\` or \\`Math.random()\\` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\nhttps://react.dev/link/hydration-mismatch` + o), e)), rg;\n }\n function So(e, n) {\n if (!qn) throw Error(\"Expected prepareToHydrateHostInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.\");\n de(e.stateNode, e.type, e.memoizedProps, n, e) || Fr(e, !0);\n }\n function ht(e) {\n for (it = e.return; it;) switch (it.tag) {\n case 5:\n case 31:\n case 13:\n oo = !1;\n return;\n case 27:\n case 3:\n oo = !0;\n return;\n default:\n it = it.return;\n }\n }\n function ko(e) {\n if (!qn || e !== it) return !1;\n if (!ge) return ht(e), ge = !0, !1;\n var n = e.tag;\n if (d ? n !== 3 && n !== 27 && (n !== 5 || Yc(e.type) && !ue(e.type, e.memoizedProps)) && Ke && (Ve(e), Fr(e)) : n !== 3 && (n !== 5 || Yc(e.type) && !ue(e.type, e.memoizedProps)) && Ke && (Ve(e), Fr(e)), ht(e), n === 13) {\n if (!qn) throw Error(\"Expected skipPastDehydratedSuspenseInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.\");\n if (e = e.memoizedState, e = e !== null ? e.dehydrated : null, !e) throw Error(\"Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.\");\n Ke = ai(e);\n } else if (n === 31) {\n if (e = e.memoizedState, e = e !== null ? e.dehydrated : null, !e) throw Error(\"Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.\");\n Ke = ya(e);\n } else Ke = d && n === 27 ? Zm(e.type, Ke) : it ? ga(e.stateNode) : null;\n return !0;\n }\n function Ve(e) {\n for (var n = Ke; n;) {\n var o = bo(e, 0),\n i = ml(n);\n o.serverTail.push(i), n = i.type === \"Suspense\" ? ai(n) : ga(n);\n }\n }\n function wo() {\n qn && (Ke = it = null, xa = ge = !1);\n }\n function $l() {\n var e = kl;\n return e !== null && (Bt === null ? Bt = e : Bt.push.apply(Bt, e), kl = null), e;\n }\n function Fi(e) {\n kl === null ? kl = [e] : kl.push(e);\n }\n function xu() {\n var e = Tr;\n if (e !== null) {\n Tr = null;\n for (var n = Dd(e); 0 < e.children.length;) e = e.children[0];\n B(e.fiber, function () {\n console.error(`A tree hydrated but some attributes of the server rendered HTML didn't match the client properties. This won't be patched up. This can happen if a SSR-ed Client Component used:\n\n- A server/client branch \\`if (typeof window !== 'undefined')\\`.\n- Variable input such as \\`Date.now()\\` or \\`Math.random()\\` which changes each time it's called.\n- Date formatting in a user's locale which doesn't match the server.\n- External changing data without sending a snapshot of it along with the HTML.\n- Invalid HTML tag nesting.\n\nIt can also happen if the client has a browser extension installed which messes with the HTML before React loaded.\n\n%s%s`, \"https://react.dev/link/hydration-mismatch\", n);\n });\n }\n }\n function zu() {\n ad = Zh = null, id = !1;\n }\n function Hr(e, n, o) {\n at ? (pe(Gh, n._currentValue, e), n._currentValue = o, pe(og, n._currentRenderer, e), n._currentRenderer !== void 0 && n._currentRenderer !== null && n._currentRenderer !== Jh && console.error(\"Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported.\"), n._currentRenderer = Jh) : (pe(Gh, n._currentValue2, e), n._currentValue2 = o, pe(ag, n._currentRenderer2, e), n._currentRenderer2 !== void 0 && n._currentRenderer2 !== null && n._currentRenderer2 !== Jh && console.error(\"Detected multiple renderers concurrently rendering the same context provider. This is currently unsupported.\"), n._currentRenderer2 = Jh);\n }\n function lr(e, n) {\n var o = Gh.current;\n at ? (e._currentValue = o, o = og.current, Ze(og, n), e._currentRenderer = o) : (e._currentValue2 = o, o = ag.current, Ze(ag, n), e._currentRenderer2 = o), Ze(Gh, n);\n }\n function Vl(e, n, o) {\n for (; e !== null;) {\n var i = e.alternate;\n if ((e.childLanes & n) !== n ? (e.childLanes |= n, i !== null && (i.childLanes |= n)) : i !== null && (i.childLanes & n) !== n && (i.childLanes |= n), e === o) break;\n e = e.return;\n }\n e !== o && console.error(\"Expected to find the propagation root when scheduling context work. This error is likely caused by a bug in React. Please file an issue.\");\n }\n function Ln(e, n, o, i) {\n var s = e.child;\n for (s !== null && (s.return = e); s !== null;) {\n var u = s.dependencies;\n if (u !== null) {\n var f = s.child;\n u = u.firstContext;\n e: for (; u !== null;) {\n var p = u;\n u = s;\n for (var g = 0; g < n.length; g++) if (p.context === n[g]) {\n u.lanes |= o, p = u.alternate, p !== null && (p.lanes |= o), Vl(u.return, o, e), i || (f = null);\n break e;\n }\n u = p.next;\n }\n } else if (s.tag === 18) {\n if (f = s.return, f === null) throw Error(\"We just came from a parent so we must have had a parent. This is a bug in React.\");\n f.lanes |= o, u = f.alternate, u !== null && (u.lanes |= o), Vl(f, o, e), f = null;\n } else f = s.child;\n if (f !== null) f.return = s;else for (f = s; f !== null;) {\n if (f === e) {\n f = null;\n break;\n }\n if (s = f.sibling, s !== null) {\n s.return = f.return, f = s;\n break;\n }\n f = f.return;\n }\n s = f;\n }\n }\n function He(e, n, o, i) {\n e = null;\n for (var s = n, u = !1; s !== null;) {\n if (!u) {\n if ((s.flags & 524288) !== 0) u = !0;else if ((s.flags & 262144) !== 0) break;\n }\n if (s.tag === 10) {\n var f = s.alternate;\n if (f === null) throw Error(\"Should have a current fiber. This is a bug in React.\");\n if (f = f.memoizedProps, f !== null) {\n var p = s.type;\n jt(s.pendingProps.value, f.value) || (e !== null ? e.push(p) : e = [p]);\n }\n } else if (s === qh.current) {\n if (f = s.alternate, f === null) throw Error(\"Should have a current fiber. This is a bug in React.\");\n f.memoizedState.memoizedState !== s.memoizedState.memoizedState && (e !== null ? e.push(Kt) : e = [Kt]);\n }\n s = s.return;\n }\n e !== null && Ln(n, e, o, i), n.flags |= 262144;\n }\n function ja(e) {\n for (e = e.firstContext; e !== null;) {\n var n = e.context;\n if (!jt(at ? n._currentValue : n._currentValue2, e.memoizedValue)) return !0;\n e = e.next;\n }\n return !1;\n }\n function sr(e) {\n Zh = e, ad = null, e = e.dependencies, e !== null && (e.firstContext = null);\n }\n function Ee(e) {\n return id && console.error(\"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\"), Ar(Zh, e);\n }\n function Hi(e, n) {\n return Zh === null && sr(e), Ar(e, n);\n }\n function Ar(e, n) {\n var o = at ? n._currentValue : n._currentValue2;\n if (n = {\n context: n,\n memoizedValue: o,\n next: null\n }, ad === null) {\n if (e === null) throw Error(\"Context can only be read while React is rendering. In classes, you can read it in the render method or getDerivedStateFromProps. In function components, you can read it directly in the function body, but not inside Hooks like useReducer() or useMemo().\");\n ad = n, e.dependencies = {\n lanes: 0,\n firstContext: n,\n _debugThenableState: null\n }, e.flags |= 524288;\n } else ad = ad.next = n;\n return o;\n }\n function Ai() {\n return {\n controller: new jb(),\n data: new Map(),\n refCount: 0\n };\n }\n function Po(e) {\n e.controller.signal.aborted && console.warn(\"A cache instance was retained after it was already freed. This likely indicates a bug in React.\"), e.refCount++;\n }\n function Da(e) {\n e.refCount--, 0 > e.refCount && console.warn(\"A cache instance was released after it was already freed. This likely indicates a bug in React.\"), e.refCount === 0 && Db(Wb, function () {\n e.controller.abort();\n });\n }\n function ur(e, n, o) {\n (e & 127) !== 0 ? 0 > za && (za = xn(), ep = Yh(n), ig = n, o != null && (lg = G(o)), Ns() && (cn = !0, Pl = 1), e = Pr(), n = ti(), e !== ld || n !== np ? ld = -1.1 : n !== null && (Pl = 1), Ys = e, np = n) : (e & 4194048) !== 0 && 0 > ao && (ao = xn(), tp = Yh(n), ry = n, o != null && (oy = G(o)), 0 > mi) && (e = Pr(), n = ti(), (e !== zl || n !== Xs) && (zl = -1.1), xl = e, Xs = n);\n }\n function Hp(e) {\n if (0 > za) {\n za = xn(), ep = e._debugTask != null ? e._debugTask : null, Ns() && (Pl = 1);\n var n = Pr(),\n o = ti();\n n !== ld || o !== np ? ld = -1.1 : o !== null && (Pl = 1), Ys = n, np = o;\n }\n 0 > ao && (ao = xn(), tp = e._debugTask != null ? e._debugTask : null, 0 > mi) && (e = Pr(), n = ti(), (e !== zl || n !== Xs) && (zl = -1.1), xl = e, Xs = n);\n }\n function jr() {\n var e = Js;\n return Js = 0, e;\n }\n function ql(e) {\n var n = Js;\n return Js = e, n;\n }\n function ji(e) {\n var n = Js;\n return Js += e, n;\n }\n function Gl() {\n q = $ = -1.1;\n }\n function Xn() {\n var e = $;\n return $ = -1.1, e;\n }\n function mt(e) {\n 0 <= e && ($ = e);\n }\n function Dr() {\n var e = en;\n return en = -0, e;\n }\n function cr(e) {\n 0 <= e && (en = e);\n }\n function dr() {\n var e = Je;\n return Je = null, e;\n }\n function fr() {\n var e = cn;\n return cn = !1, e;\n }\n function Jl(e) {\n Dt = xn(), 0 > e.actualStartTime && (e.actualStartTime = Dt);\n }\n function Cu(e) {\n if (0 <= Dt) {\n var n = xn() - Dt;\n e.actualDuration += n, e.selfBaseDuration = n, Dt = -1;\n }\n }\n function Wd(e) {\n if (0 <= Dt) {\n var n = xn() - Dt;\n e.actualDuration += n, Dt = -1;\n }\n }\n function pr() {\n if (0 <= Dt) {\n var e = xn(),\n n = e - Dt;\n Dt = -1, Js += n, en += n, q = e;\n }\n }\n function Ud(e) {\n Je === null && (Je = []), Je.push(e), pi === null && (pi = []), pi.push(e);\n }\n function hr() {\n Dt = xn(), 0 > $ && ($ = Dt);\n }\n function Zl(e) {\n for (var n = e.child; n;) e.actualDuration += n.actualDuration, n = n.sibling;\n }\n function Yl() {}\n function Kn(e) {\n e !== ud && e.next === null && (ud === null ? tm = ud = e : ud = ud.next = e), rm = !0, x.actQueue !== null ? cg || (cg = !0, Od()) : ug || (ug = !0, Od());\n }\n function Wa(e, n) {\n if (!dg && rm) {\n dg = !0;\n do for (var o = !1, i = tm; i !== null;) {\n if (!n) if (e !== 0) {\n var s = i.pendingLanes;\n if (s === 0) var u = 0;else {\n var f = i.suspendedLanes,\n p = i.pingedLanes;\n u = (1 << 31 - vn(42 | e) + 1) - 1, u &= s & ~(f & ~p), u = u & 201326741 ? u & 201326741 | 1 : u ? u | 2 : 0;\n }\n u !== 0 && (o = !0, Ap(i, u));\n } else u = ae, u = zi(i, i === je ? u : 0, i.cancelPendingCommit !== null || i.timeoutHandle !== Yr), (u & 3) === 0 || Hl(i, u) || (o = !0, Ap(i, u));\n i = i.next;\n } while (o);\n dg = !1;\n }\n }\n function Xl() {\n ll(), Di();\n }\n function Di() {\n rm = cg = ug = !1;\n var e = 0;\n Ks !== 0 && Us() && (e = Ks);\n for (var n = me(), o = null, i = tm; i !== null;) {\n var s = i.next,\n u = Bd(i, n);\n u === 0 ? (i.next = null, o === null ? tm = s : o.next = s, s === null && (ud = o)) : (o = i, (e !== 0 || (u & 3) !== 0) && (rm = !0)), i = s;\n }\n Rn !== Ll && Rn !== Cm || Wa(e, !1), Ks !== 0 && (Ks = 0);\n }\n function Bd(e, n) {\n for (var o = e.suspendedLanes, i = e.pingedLanes, s = e.expirationTimes, u = e.pendingLanes & -62914561; 0 < u;) {\n var f = 31 - vn(u),\n p = 1 << f,\n g = s[f];\n g === -1 ? ((p & o) === 0 || (p & i) !== 0) && (s[f] = Rp(p, n)) : g <= n && (e.expiredLanes |= p), u &= ~p;\n }\n if (n = je, o = ae, o = zi(e, e === n ? o : 0, e.cancelPendingCommit !== null || e.timeoutHandle !== Yr), i = e.callbackNode, o === 0 || e === n && (Le === lu || Le === su) || e.cancelPendingCommit !== null) return i !== null && _u(i), e.callbackNode = null, e.callbackPriority = 0;\n if ((o & 3) === 0 || Hl(e, o)) {\n if (n = o & -o, n !== e.callbackPriority || x.actQueue !== null && i !== fg) _u(i);else return n;\n switch (ar(o)) {\n case 2:\n case 8:\n o = Oo;\n break;\n case 32:\n o = qs;\n break;\n case 268435456:\n o = Qg;\n break;\n default:\n o = qs;\n }\n return i = Tu.bind(null, e), x.actQueue !== null ? (x.actQueue.push(i), o = fg) : o = Q(o, i), e.callbackPriority = n, e.callbackNode = o, n;\n }\n return i !== null && _u(i), e.callbackPriority = 2, e.callbackNode = null, 2;\n }\n function Tu(e, n) {\n if (nm = em = !1, ll(), Rn !== Ll && Rn !== Cm) return e.callbackNode = null, e.callbackPriority = 0, null;\n var o = e.callbackNode;\n if (Go === zm && (Go = Ag), el() && e.callbackNode !== o) return null;\n var i = ae;\n return i = zi(e, e === je ? i : 0, e.cancelPendingCommit !== null || e.timeoutHandle !== Yr), i === 0 ? null : (Lf(e, i, n), Bd(e, me()), e.callbackNode != null && e.callbackNode === o ? Tu.bind(null, e) : null);\n }\n function Ap(e, n) {\n if (el()) return null;\n em = nm, nm = !1, Lf(e, n, !0);\n }\n function _u(e) {\n e !== fg && e !== null && Ge(e);\n }\n function Od() {\n x.actQueue !== null && x.actQueue.push(function () {\n return Di(), null;\n }), Oh ? er(function () {\n (ye & (Zn | uo)) !== Jn ? Q(be, Xl) : Di();\n }) : Q(be, Xl);\n }\n function Ru() {\n if (Ks === 0) {\n var e = eu;\n e === 0 && (e = w, w <<= 1, (w & 261888) === 0 && (w = 256)), Ks = e;\n }\n return Ks;\n }\n function jp(e, n) {\n if (op === null) {\n var o = op = [];\n pg = 0, eu = Ru(), cd = {\n status: \"pending\",\n value: void 0,\n then: function (i) {\n o.push(i);\n }\n };\n }\n return pg++, n.then(Md, Md), n;\n }\n function Md() {\n if (--pg === 0 && (-1 < ao || (mi = -1.1), op !== null)) {\n cd !== null && (cd.status = \"fulfilled\");\n var e = op;\n op = null, eu = 0, cd = null;\n for (var n = 0; n < e.length; n++) (0, e[n])();\n }\n }\n function Qd(e, n) {\n var o = [],\n i = {\n status: \"pending\",\n value: null,\n reason: null,\n then: function (s) {\n o.push(s);\n }\n };\n return e.then(function () {\n i.status = \"fulfilled\", i.value = n;\n for (var s = 0; s < o.length; s++) (0, o[s])(n);\n }, function (s) {\n for (i.status = \"rejected\", i.reason = s, s = 0; s < o.length; s++) (0, o[s])(void 0);\n }), i;\n }\n function Eu() {\n var e = nu.current;\n return e !== null ? e : je.pooledCache;\n }\n function Kl(e, n) {\n n === null ? pe(nu, nu.current, e) : pe(nu, n.pool, e);\n }\n function Iu() {\n var e = Eu();\n return e === null ? null : {\n parent: at ? un._currentValue : un._currentValue2,\n pool: e\n };\n }\n function es(e, n) {\n if (jt(e, n)) return !0;\n if (typeof e != \"object\" || e === null || typeof n != \"object\" || n === null) return !1;\n var o = Object.keys(e),\n i = Object.keys(n);\n if (o.length !== i.length) return !1;\n for (i = 0; i < o.length; i++) {\n var s = o[i];\n if (!Xm.call(n, s) || !jt(e[s], n[s])) return !1;\n }\n return !0;\n }\n function $d() {\n return {\n didWarnAboutUncachedPromise: !1,\n thenables: []\n };\n }\n function Vd(e) {\n return e = e.status, e === \"fulfilled\" || e === \"rejected\";\n }\n function Lu(e, n, o) {\n x.actQueue !== null && (x.didUsePromise = !0);\n var i = e.thenables;\n if (o = i[o], o === void 0 ? i.push(n) : o !== n && (e.didWarnAboutUncachedPromise || (e.didWarnAboutUncachedPromise = !0, console.error(\"A component was suspended by an uncached promise. Creating promises inside a Client Component or hook is not yet supported, except via a Suspense-compatible library or framework.\")), n.then(Yl, Yl), n = o), n._debugInfo === void 0) {\n e = performance.now(), i = n.displayName;\n var s = {\n name: typeof i == \"string\" ? i : \"Promise\",\n start: e,\n end: e,\n value: n\n };\n n._debugInfo = [{\n awaited: s\n }], n.status !== \"fulfilled\" && n.status !== \"rejected\" && (e = function () {\n s.end = performance.now();\n }, n.then(e, e));\n }\n switch (n.status) {\n case \"fulfilled\":\n return n.value;\n case \"rejected\":\n throw e = n.reason, Dp(e), e;\n default:\n if (typeof n.status == \"string\") n.then(Yl, Yl);else {\n if (e = je, e !== null && 100 < e.shellSuspendCounter) throw Error(\"An unknown Component is an async Client Component. Only Server Components can be async at the moment. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.\");\n e = n, e.status = \"pending\", e.then(function (u) {\n if (n.status === \"pending\") {\n var f = n;\n f.status = \"fulfilled\", f.value = u;\n }\n }, function (u) {\n if (n.status === \"pending\") {\n var f = n;\n f.status = \"rejected\", f.reason = u;\n }\n });\n }\n switch (n.status) {\n case \"fulfilled\":\n return n.value;\n case \"rejected\":\n throw e = n.reason, Dp(e), e;\n }\n throw ru = n, dp = !0, dd;\n }\n }\n function xo(e) {\n try {\n return Mb(e);\n } catch (n) {\n throw n !== null && typeof n == \"object\" && typeof n.then == \"function\" ? (ru = n, dp = !0, dd) : n;\n }\n }\n function qd() {\n if (ru === null) throw Error(\"Expected a suspended thenable. This is a bug in React. Please file an issue.\");\n var e = ru;\n return ru = null, dp = !1, e;\n }\n function Dp(e) {\n if (e === dd || e === am) throw Error(\"Hooks are not supported inside an async component. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.\");\n }\n function Nn(e) {\n var n = oe;\n return e != null && (oe = n === null ? e : n.concat(e)), n;\n }\n function Nu() {\n var e = oe;\n if (e != null) {\n for (var n = e.length - 1; 0 <= n; n--) if (e[n].name != null) {\n var o = e[n].debugTask;\n if (o != null) return o;\n }\n }\n return null;\n }\n function ea(e, n, o) {\n for (var i = Object.keys(e.props), s = 0; s < i.length; s++) {\n var u = i[s];\n if (u !== \"children\" && u !== \"key\") {\n n === null && (n = Rc(e, o.mode, 0), n._debugInfo = oe, n.return = o), B(n, function (f) {\n console.error(\"Invalid prop `%s` supplied to `React.Fragment`. React.Fragment can only have `key` and `children` props.\", f);\n }, u);\n break;\n }\n }\n }\n function Wi(e) {\n var n = fp;\n return fp += 1, fd === null && (fd = $d()), Lu(fd, e, n);\n }\n function na(e, n) {\n n = n.props.ref, e.ref = n !== void 0 ? n : null;\n }\n function Gd(e, n) {\n throw n.$$typeof === Uh ? Error(`A React Element from an older version of React was rendered. This is not supported. It can happen if:\n- Multiple copies of the \"react\" package is used.\n- A library pre-bundled an old copy of \"react\" or \"react/jsx-runtime\".\n- A compiler tries to \"inline\" JSX instead of using the runtime.`) : (e = Object.prototype.toString.call(n), Error(\"Objects are not valid as a React child (found: \" + (e === \"[object Object]\" ? \"object with keys {\" + Object.keys(n).join(\", \") + \"}\" : e) + \"). If you meant to render a collection of children, use an array instead.\"));\n }\n function ns(e, n) {\n var o = Nu();\n o !== null ? o.run(Gd.bind(null, e, n)) : Gd(e, n);\n }\n function Fu(e, n) {\n var o = G(e) || \"Component\";\n wy[o] || (wy[o] = !0, n = n.displayName || n.name || \"Component\", e.tag === 3 ? console.error(`Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.\n root.render(%s)`, n, n, n) : console.error(`Functions are not valid as a React child. This may happen if you return %s instead of <%s /> from render. Or maybe you meant to call this function rather than return it.\n <%s>{%s}</%s>`, n, n, o, n, o));\n }\n function ts(e, n) {\n var o = Nu();\n o !== null ? o.run(Fu.bind(null, e, n)) : Fu(e, n);\n }\n function Jd(e, n) {\n var o = G(e) || \"Component\";\n Py[o] || (Py[o] = !0, n = String(n), e.tag === 3 ? console.error(`Symbols are not valid as a React child.\n root.render(%s)`, n) : console.error(`Symbols are not valid as a React child.\n <%s>%s</%s>`, o, n, o));\n }\n function Wr(e, n) {\n var o = Nu();\n o !== null ? o.run(Jd.bind(null, e, n)) : Jd(e, n);\n }\n function rs(e) {\n function n(b, v) {\n if (e) {\n var k = b.deletions;\n k === null ? (b.deletions = [v], b.flags |= 16) : k.push(v);\n }\n }\n function o(b, v) {\n if (!e) return null;\n for (; v !== null;) n(b, v), v = v.sibling;\n return null;\n }\n function i(b) {\n for (var v = new Map(); b !== null;) b.key !== null ? v.set(b.key, b) : v.set(b.index, b), b = b.sibling;\n return v;\n }\n function s(b, v) {\n return b = Fo(b, v), b.index = 0, b.sibling = null, b;\n }\n function u(b, v, k) {\n return b.index = k, e ? (k = b.alternate, k !== null ? (k = k.index, k < v ? (b.flags |= 67108866, v) : k) : (b.flags |= 67108866, v)) : (b.flags |= 1048576, v);\n }\n function f(b) {\n return e && b.alternate === null && (b.flags |= 67108866), b;\n }\n function p(b, v, k, E) {\n return v === null || v.tag !== 6 ? (v = Ec(k, b.mode, E), v.return = b, v._debugOwner = b, v._debugTask = b._debugTask, v._debugInfo = oe, v) : (v = s(v, k), v.return = b, v._debugInfo = oe, v);\n }\n function g(b, v, k, E) {\n var U = k.type;\n return U === ol ? (v = T(b, v, k.props.children, E, k.key), ea(k, v, b), v) : v !== null && (v.elementType === U || Wf(v, k) || typeof U == \"object\" && U !== null && U.$$typeof === kt && xo(U) === v.type) ? (v = s(v, k.props), na(v, k), v.return = b, v._debugOwner = k._owner, v._debugInfo = oe, v) : (v = Rc(k, b.mode, E), na(v, k), v.return = b, v._debugInfo = oe, v);\n }\n function S(b, v, k, E) {\n return v === null || v.tag !== 4 || v.stateNode.containerInfo !== k.containerInfo || v.stateNode.implementation !== k.implementation ? (v = Hs(k, b.mode, E), v.return = b, v._debugInfo = oe, v) : (v = s(v, k.children || []), v.return = b, v._debugInfo = oe, v);\n }\n function T(b, v, k, E, U) {\n return v === null || v.tag !== 7 ? (v = fa(k, b.mode, E, U), v.return = b, v._debugOwner = b, v._debugTask = b._debugTask, v._debugInfo = oe, v) : (v = s(v, k), v.return = b, v._debugInfo = oe, v);\n }\n function _(b, v, k) {\n if (typeof v == \"string\" && v !== \"\" || typeof v == \"number\" || typeof v == \"bigint\") return v = Ec(\"\" + v, b.mode, k), v.return = b, v._debugOwner = b, v._debugTask = b._debugTask, v._debugInfo = oe, v;\n if (typeof v == \"object\" && v !== null) {\n switch (v.$$typeof) {\n case Ho:\n return k = Rc(v, b.mode, k), na(k, v), k.return = b, b = Nn(v._debugInfo), k._debugInfo = oe, oe = b, k;\n case Ao:\n return v = Hs(v, b.mode, k), v.return = b, v._debugInfo = oe, v;\n case kt:\n var E = Nn(v._debugInfo);\n return v = xo(v), b = _(b, v, k), oe = E, b;\n }\n if (fn(v) || Yo(v)) return k = fa(v, b.mode, k, null), k.return = b, k._debugOwner = b, k._debugTask = b._debugTask, b = Nn(v._debugInfo), k._debugInfo = oe, oe = b, k;\n if (typeof v.then == \"function\") return E = Nn(v._debugInfo), b = _(b, Wi(v), k), oe = E, b;\n if (v.$$typeof === on) return _(b, Hi(b, v), k);\n ns(b, v);\n }\n return typeof v == \"function\" && ts(b, v), typeof v == \"symbol\" && Wr(b, v), null;\n }\n function I(b, v, k, E) {\n var U = v !== null ? v.key : null;\n if (typeof k == \"string\" && k !== \"\" || typeof k == \"number\" || typeof k == \"bigint\") return U !== null ? null : p(b, v, \"\" + k, E);\n if (typeof k == \"object\" && k !== null) {\n switch (k.$$typeof) {\n case Ho:\n return k.key === U ? (U = Nn(k._debugInfo), b = g(b, v, k, E), oe = U, b) : null;\n case Ao:\n return k.key === U ? S(b, v, k, E) : null;\n case kt:\n return U = Nn(k._debugInfo), k = xo(k), b = I(b, v, k, E), oe = U, b;\n }\n if (fn(k) || Yo(k)) return U !== null ? null : (U = Nn(k._debugInfo), b = T(b, v, k, E, null), oe = U, b);\n if (typeof k.then == \"function\") return U = Nn(k._debugInfo), b = I(b, v, Wi(k), E), oe = U, b;\n if (k.$$typeof === on) return I(b, v, Hi(b, k), E);\n ns(b, k);\n }\n return typeof k == \"function\" && ts(b, k), typeof k == \"symbol\" && Wr(b, k), null;\n }\n function O(b, v, k, E, U) {\n if (typeof E == \"string\" && E !== \"\" || typeof E == \"number\" || typeof E == \"bigint\") return b = b.get(k) || null, p(v, b, \"\" + E, U);\n if (typeof E == \"object\" && E !== null) {\n switch (E.$$typeof) {\n case Ho:\n return k = b.get(E.key === null ? k : E.key) || null, b = Nn(E._debugInfo), v = g(v, k, E, U), oe = b, v;\n case Ao:\n return b = b.get(E.key === null ? k : E.key) || null, S(v, b, E, U);\n case kt:\n var ke = Nn(E._debugInfo);\n return E = xo(E), v = O(b, v, k, E, U), oe = ke, v;\n }\n if (fn(E) || Yo(E)) return k = b.get(k) || null, b = Nn(E._debugInfo), v = T(v, k, E, U, null), oe = b, v;\n if (typeof E.then == \"function\") return ke = Nn(E._debugInfo), v = O(b, v, k, Wi(E), U), oe = ke, v;\n if (E.$$typeof === on) return O(b, v, k, Hi(v, E), U);\n ns(v, E);\n }\n return typeof E == \"function\" && ts(v, E), typeof E == \"symbol\" && Wr(v, E), null;\n }\n function K(b, v, k, E) {\n if (typeof k != \"object\" || k === null) return E;\n switch (k.$$typeof) {\n case Ho:\n case Ao:\n Zo(b, v, k);\n var U = k.key;\n if (typeof U != \"string\") break;\n if (E === null) {\n E = new Set(), E.add(U);\n break;\n }\n if (!E.has(U)) {\n E.add(U);\n break;\n }\n B(v, function () {\n console.error(\"Encountered two children with the same key, `%s`. Keys should be unique so that components maintain their identity across updates. Non-unique keys may cause children to be duplicated and/or omitted \\u2014 the behavior is unsupported and could change in a future version.\", U);\n });\n break;\n case kt:\n k = xo(k), K(b, v, k, E);\n }\n return E;\n }\n function Fe(b, v, k, E) {\n for (var U = null, ke = null, X = null, te = v, re = v = 0, Qe = null; te !== null && re < k.length; re++) {\n te.index > re ? (Qe = te, te = null) : Qe = te.sibling;\n var kn = I(b, te, k[re], E);\n if (kn === null) {\n te === null && (te = Qe);\n break;\n }\n U = K(b, kn, k[re], U), e && te && kn.alternate === null && n(b, te), v = u(kn, v, re), X === null ? ke = kn : X.sibling = kn, X = kn, te = Qe;\n }\n if (re === k.length) return o(b, te), ge && ho(b, re), ke;\n if (te === null) {\n for (; re < k.length; re++) te = _(b, k[re], E), te !== null && (U = K(b, te, k[re], U), v = u(te, v, re), X === null ? ke = te : X.sibling = te, X = te);\n return ge && ho(b, re), ke;\n }\n for (te = i(te); re < k.length; re++) Qe = O(te, b, re, k[re], E), Qe !== null && (U = K(b, Qe, k[re], U), e && Qe.alternate !== null && te.delete(Qe.key === null ? re : Qe.key), v = u(Qe, v, re), X === null ? ke = Qe : X.sibling = Qe, X = Qe);\n return e && te.forEach(function (wi) {\n return n(b, wi);\n }), ge && ho(b, re), ke;\n }\n function Td(b, v, k, E) {\n if (k == null) throw Error(\"An iterable object provided no iterator.\");\n for (var U = null, ke = null, X = v, te = v = 0, re = null, Qe = null, kn = k.next(); X !== null && !kn.done; te++, kn = k.next()) {\n X.index > te ? (re = X, X = null) : re = X.sibling;\n var wi = I(b, X, kn.value, E);\n if (wi === null) {\n X === null && (X = re);\n break;\n }\n Qe = K(b, wi, kn.value, Qe), e && X && wi.alternate === null && n(b, X), v = u(wi, v, te), ke === null ? U = wi : ke.sibling = wi, ke = wi, X = re;\n }\n if (kn.done) return o(b, X), ge && ho(b, te), U;\n if (X === null) {\n for (; !kn.done; te++, kn = k.next()) X = _(b, kn.value, E), X !== null && (Qe = K(b, X, kn.value, Qe), v = u(X, v, te), ke === null ? U = X : ke.sibling = X, ke = X);\n return ge && ho(b, te), U;\n }\n for (X = i(X); !kn.done; te++, kn = k.next()) re = O(X, b, te, kn.value, E), re !== null && (Qe = K(b, re, kn.value, Qe), e && re.alternate !== null && X.delete(re.key === null ? te : re.key), v = u(re, v, te), ke === null ? U = re : ke.sibling = re, ke = re);\n return e && X.forEach(function (Yb) {\n return n(b, Yb);\n }), ge && ho(b, te), U;\n }\n function Jo(b, v, k, E) {\n if (typeof k == \"object\" && k !== null && k.type === ol && k.key === null && (ea(k, null, b), k = k.props.children), typeof k == \"object\" && k !== null) {\n switch (k.$$typeof) {\n case Ho:\n var U = Nn(k._debugInfo);\n e: {\n for (var ke = k.key; v !== null;) {\n if (v.key === ke) {\n if (ke = k.type, ke === ol) {\n if (v.tag === 7) {\n o(b, v.sibling), E = s(v, k.props.children), E.return = b, E._debugOwner = k._owner, E._debugInfo = oe, ea(k, E, b), b = E;\n break e;\n }\n } else if (v.elementType === ke || Wf(v, k) || typeof ke == \"object\" && ke !== null && ke.$$typeof === kt && xo(ke) === v.type) {\n o(b, v.sibling), E = s(v, k.props), na(E, k), E.return = b, E._debugOwner = k._owner, E._debugInfo = oe, b = E;\n break e;\n }\n o(b, v);\n break;\n } else n(b, v);\n v = v.sibling;\n }\n k.type === ol ? (E = fa(k.props.children, b.mode, E, k.key), E.return = b, E._debugOwner = b, E._debugTask = b._debugTask, E._debugInfo = oe, ea(k, E, b), b = E) : (E = Rc(k, b.mode, E), na(E, k), E.return = b, E._debugInfo = oe, b = E);\n }\n return b = f(b), oe = U, b;\n case Ao:\n e: {\n for (U = k, k = U.key; v !== null;) {\n if (v.key === k) {\n if (v.tag === 4 && v.stateNode.containerInfo === U.containerInfo && v.stateNode.implementation === U.implementation) {\n o(b, v.sibling), E = s(v, U.children || []), E.return = b, b = E;\n break e;\n } else {\n o(b, v);\n break;\n }\n } else n(b, v);\n v = v.sibling;\n }\n E = Hs(U, b.mode, E), E.return = b, b = E;\n }\n return f(b);\n case kt:\n return U = Nn(k._debugInfo), k = xo(k), b = Jo(b, v, k, E), oe = U, b;\n }\n if (fn(k)) return U = Nn(k._debugInfo), b = Fe(b, v, k, E), oe = U, b;\n if (Yo(k)) {\n if (U = Nn(k._debugInfo), ke = Yo(k), typeof ke != \"function\") throw Error(\"An object is not an iterable. This error is likely caused by a bug in React. Please file an issue.\");\n var X = ke.call(k);\n return X === k ? (b.tag !== 0 || Object.prototype.toString.call(b.type) !== \"[object GeneratorFunction]\" || Object.prototype.toString.call(X) !== \"[object Generator]\") && (Sy || console.error(\"Using Iterators as children is unsupported and will likely yield unexpected results because enumerating a generator mutates it. You may convert it to an array with `Array.from()` or the `[...spread]` operator before rendering. You can also use an Iterable that can iterate multiple times over the same items.\"), Sy = !0) : k.entries !== ke || yg || (console.error(\"Using Maps as children is not supported. Use an array of keyed ReactElements instead.\"), yg = !0), b = Td(b, v, X, E), oe = U, b;\n }\n if (typeof k.then == \"function\") return U = Nn(k._debugInfo), b = Jo(b, v, Wi(k), E), oe = U, b;\n if (k.$$typeof === on) return Jo(b, v, Hi(b, k), E);\n ns(b, k);\n }\n return typeof k == \"string\" && k !== \"\" || typeof k == \"number\" || typeof k == \"bigint\" ? (U = \"\" + k, v !== null && v.tag === 6 ? (o(b, v.sibling), E = s(v, U), E.return = b, b = E) : (o(b, v), E = Ec(U, b.mode, E), E.return = b, E._debugOwner = b, E._debugTask = b._debugTask, E._debugInfo = oe, b = E), f(b)) : (typeof k == \"function\" && ts(b, k), typeof k == \"symbol\" && Wr(b, k), o(b, v));\n }\n return function (b, v, k, E) {\n var U = oe;\n oe = null;\n try {\n fp = 0;\n var ke = Jo(b, v, k, E);\n return fd = null, ke;\n } catch (Qe) {\n if (Qe === dd || Qe === am) throw Qe;\n var X = lt(29, Qe, null, b.mode);\n X.lanes = E, X.return = b;\n var te = X._debugInfo = oe;\n if (X._debugOwner = b._debugOwner, X._debugTask = b._debugTask, te != null) {\n for (var re = te.length - 1; 0 <= re; re--) if (typeof te[re].stack == \"string\") {\n X._debugOwner = te[re], X._debugTask = te[re].debugTask;\n break;\n }\n }\n return X;\n } finally {\n oe = U;\n }\n };\n }\n function Zd(e, n) {\n var o = fn(e);\n return e = !o && typeof Yo(e) == \"function\", o || e ? (o = o ? \"array\" : \"iterable\", console.error(\"A nested %s was passed to row #%s in <SuspenseList />. Wrap it in an additional SuspenseList to configure its revealOrder: <SuspenseList revealOrder=...> ... <SuspenseList revealOrder=...>{%s}</SuspenseList> ... </SuspenseList>\", o, n, o), !1) : !0;\n }\n function Ui() {\n for (var e = pd, n = bg = pd = 0; n < e;) {\n var o = io[n];\n io[n++] = null;\n var i = io[n];\n io[n++] = null;\n var s = io[n];\n io[n++] = null;\n var u = io[n];\n if (io[n++] = null, i !== null && s !== null) {\n var f = i.pending;\n f === null ? s.next = s : (s.next = f.next, f.next = s), i.pending = s;\n }\n u !== 0 && wn(o, s, u);\n }\n }\n function os(e, n, o, i) {\n io[pd++] = e, io[pd++] = n, io[pd++] = o, io[pd++] = i, bg |= i, e.lanes |= i, e = e.alternate, e !== null && (e.lanes |= i);\n }\n function Hu(e, n, o, i) {\n return os(e, n, o, i), as(e);\n }\n function On(e, n) {\n return os(e, null, null, n), as(e);\n }\n function wn(e, n, o) {\n e.lanes |= o;\n var i = e.alternate;\n i !== null && (i.lanes |= o);\n for (var s = !1, u = e.return; u !== null;) u.childLanes |= o, i = u.alternate, i !== null && (i.childLanes |= o), u.tag === 22 && (e = u.stateNode, e === null || e._visibility & pp || (s = !0)), e = u, u = u.return;\n return e.tag === 3 ? (u = e.stateNode, s && n !== null && (s = 31 - vn(o), e = u.hiddenUpdates, i = e[s], i === null ? e[s] = [n] : i.push(n), n.lane = o | 536870912), u) : null;\n }\n function as(e) {\n if (zp > Gb) throw cu = zp = 0, Cp = Ug = null, Error(\"Maximum update depth exceeded. This can happen when a component repeatedly calls setState inside componentWillUpdate or componentDidUpdate. React limits the number of nested updates to prevent infinite loops.\");\n cu > Jb && (cu = 0, Cp = null, console.error(\"Maximum update depth exceeded. This can happen when a component calls setState inside useEffect, but useEffect either doesn't have a dependency array, or one of the dependencies changes on every render.\")), e.alternate === null && (e.flags & 4098) !== 0 && zc(e);\n for (var n = e, o = n.return; o !== null;) n.alternate === null && (n.flags & 4098) !== 0 && zc(e), n = o, o = n.return;\n return n.tag === 3 ? n.stateNode : null;\n }\n function Au(e) {\n e.updateQueue = {\n baseState: e.memoizedState,\n firstBaseUpdate: null,\n lastBaseUpdate: null,\n shared: {\n pending: null,\n lanes: 0,\n hiddenCallbacks: null\n },\n callbacks: null\n };\n }\n function ju(e, n) {\n e = e.updateQueue, n.updateQueue === e && (n.updateQueue = {\n baseState: e.baseState,\n firstBaseUpdate: e.firstBaseUpdate,\n lastBaseUpdate: e.lastBaseUpdate,\n shared: e.shared,\n callbacks: null\n });\n }\n function zo(e) {\n return {\n lane: e,\n tag: zy,\n payload: null,\n callback: null,\n next: null\n };\n }\n function Mt(e, n, o) {\n var i = e.updateQueue;\n if (i === null) return null;\n if (i = i.shared, Sg === i && !_y) {\n var s = G(e);\n console.error(`An update (setState, replaceState, or forceUpdate) was scheduled from inside an update function. Update functions should be pure, with zero side-effects. Consider using componentDidUpdate or a callback.\n\nPlease update the following component: %s`, s), _y = !0;\n }\n return (ye & Zn) !== Jn ? (s = i.pending, s === null ? n.next = n : (n.next = s.next, s.next = n), i.pending = n, n = as(e), wn(e, null, o), n) : (os(e, i, n, o), as(e));\n }\n function Bi(e, n, o) {\n if (n = n.updateQueue, n !== null && (n = n.shared, (o & 4194048) !== 0)) {\n var i = n.lanes;\n i &= e.pendingLanes, o |= i, n.lanes = o, Ld(e, o);\n }\n }\n function Ua(e, n) {\n var o = e.updateQueue,\n i = e.alternate;\n if (i !== null && (i = i.updateQueue, o === i)) {\n var s = null,\n u = null;\n if (o = o.firstBaseUpdate, o !== null) {\n do {\n var f = {\n lane: o.lane,\n tag: o.tag,\n payload: o.payload,\n callback: null,\n next: null\n };\n u === null ? s = u = f : u = u.next = f, o = o.next;\n } while (o !== null);\n u === null ? s = u = n : u = u.next = n;\n } else s = u = n;\n o = {\n baseState: i.baseState,\n firstBaseUpdate: s,\n lastBaseUpdate: u,\n shared: i.shared,\n callbacks: i.callbacks\n }, e.updateQueue = o;\n return;\n }\n e = o.lastBaseUpdate, e === null ? o.firstBaseUpdate = n : e.next = n, o.lastBaseUpdate = n;\n }\n function Oi() {\n if (kg) {\n var e = cd;\n if (e !== null) throw e;\n }\n }\n function is(e, n, o, i) {\n kg = !1;\n var s = e.updateQueue;\n Cl = !1, Sg = s.shared;\n var u = s.firstBaseUpdate,\n f = s.lastBaseUpdate,\n p = s.shared.pending;\n if (p !== null) {\n s.shared.pending = null;\n var g = p,\n S = g.next;\n g.next = null, f === null ? u = S : f.next = S, f = g;\n var T = e.alternate;\n T !== null && (T = T.updateQueue, p = T.lastBaseUpdate, p !== f && (p === null ? T.firstBaseUpdate = S : p.next = S, T.lastBaseUpdate = g));\n }\n if (u !== null) {\n var _ = s.baseState;\n f = 0, T = S = g = null, p = u;\n do {\n var I = p.lane & -536870913,\n O = I !== p.lane;\n if (O ? (ae & I) === I : (i & I) === I) {\n I !== 0 && I === eu && (kg = !0), T !== null && (T = T.next = {\n lane: 0,\n tag: p.tag,\n payload: p.payload,\n callback: null,\n next: null\n });\n e: {\n I = e;\n var K = p,\n Fe = n,\n Td = o;\n switch (K.tag) {\n case Cy:\n if (K = K.payload, typeof K == \"function\") {\n id = !0;\n var Jo = K.call(Td, _, Fe);\n if (I.mode & 8) {\n De(!0);\n try {\n K.call(Td, _, Fe);\n } finally {\n De(!1);\n }\n }\n id = !1, _ = Jo;\n break e;\n }\n _ = K;\n break e;\n case vg:\n I.flags = I.flags & -65537 | 128;\n case zy:\n if (Jo = K.payload, typeof Jo == \"function\") {\n if (id = !0, K = Jo.call(Td, _, Fe), I.mode & 8) {\n De(!0);\n try {\n Jo.call(Td, _, Fe);\n } finally {\n De(!1);\n }\n }\n id = !1;\n } else K = Jo;\n if (K == null) break e;\n _ = ze({}, _, K);\n break e;\n case Ty:\n Cl = !0;\n }\n }\n I = p.callback, I !== null && (e.flags |= 64, O && (e.flags |= 8192), O = s.callbacks, O === null ? s.callbacks = [I] : O.push(I));\n } else O = {\n lane: I,\n tag: p.tag,\n payload: p.payload,\n callback: p.callback,\n next: null\n }, T === null ? (S = T = O, g = _) : T = T.next = O, f |= I;\n if (p = p.next, p === null) {\n if (p = s.shared.pending, p === null) break;\n O = p, p = O.next, O.next = null, s.lastBaseUpdate = O, s.shared.pending = null;\n }\n } while (!0);\n T === null && (g = _), s.baseState = g, s.firstBaseUpdate = S, s.lastBaseUpdate = T, u === null && (s.shared.lanes = 0), Rl |= f, e.lanes = f, e.memoizedState = _;\n }\n Sg = null;\n }\n function ls(e, n) {\n if (typeof e != \"function\") throw Error(\"Invalid argument passed as callback. Expected a function. Instead received: \" + e);\n e.call(n);\n }\n function Yd(e, n) {\n var o = e.shared.hiddenCallbacks;\n if (o !== null) for (e.shared.hiddenCallbacks = null, e = 0; e < o.length; e++) ls(o[e], n);\n }\n function Xd(e, n) {\n var o = e.callbacks;\n if (o !== null) for (e.callbacks = null, e = 0; e < o.length; e++) ls(o[e], n);\n }\n function Kd(e, n) {\n var o = Ta;\n pe(lm, o, e), pe(hd, n, e), Ta = o | n.baseLanes;\n }\n function Du(e) {\n pe(lm, Ta, e), pe(hd, hd.current, e);\n }\n function ss(e) {\n Ta = lm.current, Ze(hd, e), Ze(lm, e);\n }\n function Ur(e) {\n var n = e.alternate;\n pe(Sn, Sn.current & md, e), pe(_r, e, e), Qo === null && (n === null || hd.current !== null || n.memoizedState !== null) && (Qo = e);\n }\n function Wu(e) {\n pe(Sn, Sn.current, e), pe(_r, e, e), Qo === null && (Qo = e);\n }\n function Uu(e) {\n e.tag === 22 ? (pe(Sn, Sn.current, e), pe(_r, e, e), Qo === null && (Qo = e)) : mr(e);\n }\n function mr(e) {\n pe(Sn, Sn.current, e), pe(_r, _r.current, e);\n }\n function et(e) {\n Ze(_r, e), Qo === e && (Qo = null), Ze(Sn, e);\n }\n function us(e) {\n for (var n = e; n !== null;) {\n if (n.tag === 13) {\n var o = n.memoizedState;\n if (o !== null && (o = o.dehydrated, o === null || Ms(o) || $c(o))) return n;\n } else if (n.tag === 19 && (n.memoizedProps.revealOrder === \"forwards\" || n.memoizedProps.revealOrder === \"backwards\" || n.memoizedProps.revealOrder === \"unstable_legacy-backwards\" || n.memoizedProps.revealOrder === \"together\")) {\n if ((n.flags & 128) !== 0) return n;\n } else if (n.child !== null) {\n n.child.return = n, n = n.child;\n continue;\n }\n if (n === e) break;\n for (; n.sibling === null;) {\n if (n.return === null || n.return === e) return null;\n n = n.return;\n }\n n.sibling.return = n.return, n = n.sibling;\n }\n return null;\n }\n function ee() {\n var e = z;\n so === null ? so = [e] : so.push(e);\n }\n function N() {\n var e = z;\n if (so !== null && (vi++, so[vi] !== e)) {\n var n = G(Y);\n if (!Ry.has(n) && (Ry.add(n), so !== null)) {\n for (var o = \"\", i = 0; i <= vi; i++) {\n var s = so[i],\n u = i === vi ? e : s;\n for (s = i + 1 + \". \" + s; 30 > s.length;) s += \" \";\n s += u + `\n`, o += s;\n }\n console.error(`React has detected a change in the order of Hooks called by %s. This will lead to bugs and errors if not fixed. For more information, read the Rules of Hooks: https://react.dev/link/rules-of-hooks\n\n Previous render Next render\n ------------------------------------------------------\n%s ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n`, n, o);\n }\n }\n }\n function gt(e) {\n e == null || fn(e) || console.error(\"%s received a final argument that is not an array (instead, received `%s`). When specified, the final argument must be an array.\", z, typeof e);\n }\n function Mi() {\n var e = G(Y);\n Iy.has(e) || (Iy.add(e), console.error(\"ReactDOM.useFormState has been renamed to React.useActionState. Please update %s to use React.useActionState.\", e));\n }\n function Ye() {\n throw Error(`Invalid hook call. Hooks can only be called inside of the body of a function component. This could happen for one of the following reasons:\n1. You might have mismatching versions of React and the renderer (such as React DOM)\n2. You might be breaking the Rules of Hooks\n3. You might have more than one copy of React in the same app\nSee https://react.dev/link/invalid-hook-call for tips about how to debug and fix this problem.`);\n }\n function Bu(e, n) {\n if (gp) return !1;\n if (n === null) return console.error(\"%s received a final argument during this render, but not during the previous render. Even though the final argument is optional, its type cannot change between renders.\", z), !1;\n e.length !== n.length && console.error(`The final argument passed to %s changed size between renders. The order and size of this array must remain constant.\n\nPrevious: %s\nIncoming: %s`, z, \"[\" + n.join(\", \") + \"]\", \"[\" + e.join(\", \") + \"]\");\n for (var o = 0; o < n.length && o < e.length; o++) if (!jt(e[o], n[o])) return !1;\n return !0;\n }\n function It(e, n, o, i, s, u) {\n yi = u, Y = n, so = e !== null ? e._debugHookTypes : null, vi = -1, gp = e !== null && e.type !== n.type, (Object.prototype.toString.call(o) === \"[object AsyncFunction]\" || Object.prototype.toString.call(o) === \"[object AsyncGeneratorFunction]\") && (u = G(Y), wg.has(u) || (wg.add(u), console.error(\"%s is an async Client Component. Only Server Components can be async at the moment. This error is often caused by accidentally adding `'use client'` to a module that was originally written for the server.\", u === null ? \"An unknown Component\" : \"<\" + u + \">\"))), n.memoizedState = null, n.updateQueue = null, n.lanes = 0, x.H = e !== null && e.memoizedState !== null ? xg : so !== null ? Ly : Pg, au = u = (n.mode & 8) !== Z;\n var f = hg(o, i, s);\n if (au = !1, yd && (f = Ou(n, o, i, s)), u) {\n De(!0);\n try {\n f = Ou(n, o, i, s);\n } finally {\n De(!1);\n }\n }\n return cs(e, n), f;\n }\n function cs(e, n) {\n n._debugHookTypes = so, n.dependencies === null ? bi !== null && (n.dependencies = {\n lanes: 0,\n firstContext: null,\n _debugThenableState: bi\n }) : n.dependencies._debugThenableState = bi, x.H = yp;\n var o = Ae !== null && Ae.next !== null;\n if (yi = 0, so = z = zn = Ae = Y = null, vi = -1, e !== null && (e.flags & 65011712) !== (n.flags & 65011712) && console.error(\"Internal React error: Expected static flag was missing. Please notify the React team.\"), um = !1, mp = 0, bi = null, o) throw Error(\"Rendered fewer hooks than expected. This may be caused by an accidental early return statement.\");\n e === null || Cn || (e = e.dependencies, e !== null && ja(e) && (Cn = !0)), dp ? (dp = !1, e = !0) : e = !1, e && (n = G(n) || \"Unknown\", Ey.has(n) || wg.has(n) || (Ey.add(n), console.error(\"`use` was called from inside a try/catch block. This is not allowed and can lead to unexpected behavior. To handle errors triggered by `use`, wrap your component in a error boundary.\")));\n }\n function Ou(e, n, o, i) {\n Y = e;\n var s = 0;\n do {\n if (yd && (bi = null), mp = 0, yd = !1, s >= $b) throw Error(\"Too many re-renders. React limits the number of renders to prevent an infinite loop.\");\n if (s += 1, gp = !1, zn = Ae = null, e.updateQueue != null) {\n var u = e.updateQueue;\n u.lastEffect = null, u.events = null, u.stores = null, u.memoCache != null && (u.memoCache.index = 0);\n }\n vi = -1, x.H = Ny, u = hg(n, o, i);\n } while (yd);\n return u;\n }\n function ef() {\n var e = x.H,\n n = e.useState()[0];\n return n = typeof n.then == \"function\" ? Co(n) : n, e = e.useState()[0], (Ae !== null ? Ae.memoizedState : null) !== e && (Y.flags |= 1024), n;\n }\n function Mu() {\n var e = cm !== 0;\n return cm = 0, e;\n }\n function Qu(e, n, o) {\n n.updateQueue = e.updateQueue, n.flags = (n.mode & 16) !== Z ? n.flags & -402655237 : n.flags & -2053, e.lanes &= ~o;\n }\n function ds(e) {\n if (um) {\n for (e = e.memoizedState; e !== null;) {\n var n = e.queue;\n n !== null && (n.pending = null), e = e.next;\n }\n um = !1;\n }\n yi = 0, so = zn = Ae = Y = null, vi = -1, z = null, yd = !1, mp = cm = 0, bi = null;\n }\n function Fn() {\n var e = {\n memoizedState: null,\n baseState: null,\n baseQueue: null,\n queue: null,\n next: null\n };\n return zn === null ? Y.memoizedState = zn = e : zn = zn.next = e, zn;\n }\n function xe() {\n if (Ae === null) {\n var e = Y.alternate;\n e = e !== null ? e.memoizedState : null;\n } else e = Ae.next;\n var n = zn === null ? Y.memoizedState : zn.next;\n if (n !== null) zn = n, Ae = e;else {\n if (e === null) throw Y.alternate === null ? Error(\"Update hook called on initial render. This is likely a bug in React. Please file an issue.\") : Error(\"Rendered more hooks than during the previous render.\");\n Ae = e, e = {\n memoizedState: Ae.memoizedState,\n baseState: Ae.baseState,\n baseQueue: Ae.baseQueue,\n queue: Ae.queue,\n next: null\n }, zn === null ? Y.memoizedState = zn = e : zn = zn.next = e;\n }\n return zn;\n }\n function Ba() {\n return {\n lastEffect: null,\n events: null,\n stores: null,\n memoCache: null\n };\n }\n function Co(e) {\n var n = mp;\n return mp += 1, bi === null && (bi = $d()), e = Lu(bi, e, n), n = Y, (zn === null ? n.memoizedState : zn.next) === null && (n = n.alternate, x.H = n !== null && n.memoizedState !== null ? xg : Pg), e;\n }\n function we(e) {\n if (e !== null && typeof e == \"object\") {\n if (typeof e.then == \"function\") return Co(e);\n if (e.$$typeof === on) return Ee(e);\n }\n throw Error(\"An unsupported type was passed to use(): \" + String(e));\n }\n function Oa(e) {\n var n = null,\n o = Y.updateQueue;\n if (o !== null && (n = o.memoCache), n == null) {\n var i = Y.alternate;\n i !== null && (i = i.updateQueue, i !== null && (i = i.memoCache, i != null && (n = {\n data: i.data.map(function (s) {\n return s.slice();\n }),\n index: 0\n })));\n }\n if (n == null && (n = {\n data: [],\n index: 0\n }), o === null && (o = Ba(), Y.updateQueue = o), o.memoCache = n, o = n.data[n.index], o === void 0 || gp) for (o = n.data[n.index] = Array(e), i = 0; i < e; i++) o[i] = Bh;else o.length !== e && console.error(\"Expected a constant size argument for each invocation of useMemoCache. The previous cache was allocated with size %s but size %s was requested.\", o.length, e);\n return n.index++, o;\n }\n function gr(e, n) {\n return typeof n == \"function\" ? n(e) : n;\n }\n function $u(e, n, o) {\n var i = Fn();\n if (o !== void 0) {\n var s = o(n);\n if (au) {\n De(!0);\n try {\n o(n);\n } finally {\n De(!1);\n }\n }\n } else s = n;\n return i.memoizedState = i.baseState = s, e = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: e,\n lastRenderedState: s\n }, i.queue = e, e = e.dispatch = Vp.bind(null, Y, e), [i.memoizedState, e];\n }\n function Br(e) {\n var n = xe();\n return Or(n, Ae, e);\n }\n function Or(e, n, o) {\n var i = e.queue;\n if (i === null) throw Error(\"Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)\");\n i.lastRenderedReducer = o;\n var s = e.baseQueue,\n u = i.pending;\n if (u !== null) {\n if (s !== null) {\n var f = s.next;\n s.next = u.next, u.next = f;\n }\n n.baseQueue !== s && console.error(\"Internal error: Expected work-in-progress queue to be a clone. This is a bug in React.\"), n.baseQueue = s = u, i.pending = null;\n }\n if (u = e.baseState, s === null) e.memoizedState = u;else {\n n = s.next;\n var p = f = null,\n g = null,\n S = n,\n T = !1;\n do {\n var _ = S.lane & -536870913;\n if (_ !== S.lane ? (ae & _) === _ : (yi & _) === _) {\n var I = S.revertLane;\n if (I === 0) g !== null && (g = g.next = {\n lane: 0,\n revertLane: 0,\n gesture: null,\n action: S.action,\n hasEagerState: S.hasEagerState,\n eagerState: S.eagerState,\n next: null\n }), _ === eu && (T = !0);else if ((yi & I) === I) {\n S = S.next, I === eu && (T = !0);\n continue;\n } else _ = {\n lane: 0,\n revertLane: S.revertLane,\n gesture: null,\n action: S.action,\n hasEagerState: S.hasEagerState,\n eagerState: S.eagerState,\n next: null\n }, g === null ? (p = g = _, f = u) : g = g.next = _, Y.lanes |= I, Rl |= I;\n _ = S.action, au && o(u, _), u = S.hasEagerState ? S.eagerState : o(u, _);\n } else I = {\n lane: _,\n revertLane: S.revertLane,\n gesture: S.gesture,\n action: S.action,\n hasEagerState: S.hasEagerState,\n eagerState: S.eagerState,\n next: null\n }, g === null ? (p = g = I, f = u) : g = g.next = I, Y.lanes |= _, Rl |= _;\n S = S.next;\n } while (S !== null && S !== n);\n if (g === null ? f = u : g.next = p, !jt(u, e.memoizedState) && (Cn = !0, T && (o = cd, o !== null))) throw o;\n e.memoizedState = u, e.baseState = f, e.baseQueue = g, i.lastRenderedState = u;\n }\n return s === null && (i.lanes = 0), [e.memoizedState, i.dispatch];\n }\n function Qi(e) {\n var n = xe(),\n o = n.queue;\n if (o === null) throw Error(\"Should have a queue. You are likely calling Hooks conditionally, which is not allowed. (https://react.dev/link/invalid-hook-call)\");\n o.lastRenderedReducer = e;\n var i = o.dispatch,\n s = o.pending,\n u = n.memoizedState;\n if (s !== null) {\n o.pending = null;\n var f = s = s.next;\n do u = e(u, f.action), f = f.next; while (f !== s);\n jt(u, n.memoizedState) || (Cn = !0), n.memoizedState = u, n.baseQueue === null && (n.baseState = u), o.lastRenderedState = u;\n }\n return [u, i];\n }\n function Vu(e, n, o) {\n var i = Y,\n s = Fn();\n if (ge) {\n if (o === void 0) throw Error(\"Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering.\");\n var u = o();\n gd || u === o() || (console.error(\"The result of getServerSnapshot should be cached to avoid an infinite loop\"), gd = !0);\n } else {\n if (u = n(), gd || (o = n(), jt(u, o) || (console.error(\"The result of getSnapshot should be cached to avoid an infinite loop\"), gd = !0)), je === null) throw Error(\"Expected a work-in-progress root. This is a bug in React. Please file an issue.\");\n (ae & 127) !== 0 || yr(i, n, u);\n }\n return s.memoizedState = u, o = {\n value: u,\n getSnapshot: n\n }, s.queue = o, yt(qu.bind(null, i, o, e), [e]), i.flags |= 2048, Vt(lo | Ut, {\n destroy: void 0\n }, nf.bind(null, i, o, u, n), null), u;\n }\n function ta(e, n, o) {\n var i = Y,\n s = xe(),\n u = ge;\n if (u) {\n if (o === void 0) throw Error(\"Missing getServerSnapshot, which is required for server-rendered content. Will revert to client rendering.\");\n o = o();\n } else if (o = n(), !gd) {\n var f = n();\n jt(o, f) || (console.error(\"The result of getSnapshot should be cached to avoid an infinite loop\"), gd = !0);\n }\n (f = !jt((Ae || s).memoizedState, o)) && (s.memoizedState = o, Cn = !0), s = s.queue;\n var p = qu.bind(null, i, s, e);\n if (Qn(2048, Ut, p, [e]), s.getSnapshot !== n || f || zn !== null && zn.memoizedState.tag & lo) {\n if (i.flags |= 2048, Vt(lo | Ut, {\n destroy: void 0\n }, nf.bind(null, i, s, o, n), null), je === null) throw Error(\"Expected a work-in-progress root. This is a bug in React. Please file an issue.\");\n u || (yi & 127) !== 0 || yr(i, n, o);\n }\n return o;\n }\n function yr(e, n, o) {\n e.flags |= 16384, e = {\n getSnapshot: n,\n value: o\n }, n = Y.updateQueue, n === null ? (n = Ba(), Y.updateQueue = n, n.stores = [e]) : (o = n.stores, o === null ? n.stores = [e] : o.push(e));\n }\n function nf(e, n, o, i) {\n n.value = o, n.getSnapshot = i, tf(n) && Gu(e);\n }\n function qu(e, n, o) {\n return o(function () {\n tf(n) && (ur(2, \"updateSyncExternalStore()\", e), Gu(e));\n });\n }\n function tf(e) {\n var n = e.getSnapshot;\n e = e.value;\n try {\n var o = n();\n return !jt(e, o);\n } catch {\n return !0;\n }\n }\n function Gu(e) {\n var n = On(e, 2);\n n !== null && We(n, e, 2);\n }\n function fs(e) {\n var n = Fn();\n if (typeof e == \"function\") {\n var o = e;\n if (e = o(), au) {\n De(!0);\n try {\n o();\n } finally {\n De(!1);\n }\n }\n }\n return n.memoizedState = n.baseState = e, n.queue = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: gr,\n lastRenderedState: e\n }, n;\n }\n function $i(e) {\n e = fs(e);\n var n = e.queue,\n o = cf.bind(null, Y, n);\n return n.dispatch = o, [e.memoizedState, o];\n }\n function Ju(e) {\n var n = Fn();\n n.memoizedState = n.baseState = e;\n var o = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: null,\n lastRenderedState: null\n };\n return n.queue = o, n = Gi.bind(null, Y, !0, o), o.dispatch = n, [e, n];\n }\n function rf(e, n) {\n var o = xe();\n return Wp(o, Ae, e, n);\n }\n function Wp(e, n, o, i) {\n return e.baseState = o, Or(e, Ae, typeof i == \"function\" ? i : gr);\n }\n function of(e, n) {\n var o = xe();\n return Ae !== null ? Wp(o, Ae, e, n) : (o.baseState = e, [e, o.queue.dispatch]);\n }\n function Up(e, n, o, i, s) {\n if (Ji(e)) throw Error(\"Cannot update form state while rendering.\");\n if (e = n.action, e !== null) {\n var u = {\n payload: s,\n action: e,\n next: null,\n isTransition: !0,\n status: \"pending\",\n value: null,\n reason: null,\n listeners: [],\n then: function (f) {\n u.listeners.push(f);\n }\n };\n x.T !== null ? o(!0) : u.isTransition = !1, i(u), o = n.pending, o === null ? (u.next = n.pending = u, Qt(n, u)) : (u.next = o.next, n.pending = o.next = u);\n }\n }\n function Qt(e, n) {\n var o = n.action,\n i = n.payload,\n s = e.state;\n if (n.isTransition) {\n var u = x.T,\n f = {};\n f._updatedFibers = new Set(), x.T = f;\n try {\n var p = o(s, i),\n g = x.S;\n g !== null && g(f, p), Zu(e, n, p);\n } catch (S) {\n Yu(e, n, S);\n } finally {\n u !== null && f.types !== null && (u.types !== null && u.types !== f.types && console.error(\"We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React.\"), u.types = f.types), x.T = u, u === null && f._updatedFibers && (e = f._updatedFibers.size, f._updatedFibers.clear(), 10 < e && console.warn(\"Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.\"));\n }\n } else try {\n f = o(s, i), Zu(e, n, f);\n } catch (S) {\n Yu(e, n, S);\n }\n }\n function Zu(e, n, o) {\n o !== null && typeof o == \"object\" && typeof o.then == \"function\" ? (x.asyncTransitions++, o.then(ys, ys), o.then(function (i) {\n af(e, n, i);\n }, function (i) {\n return Yu(e, n, i);\n }), n.isTransition || console.error(\"An async function with useActionState was called outside of a transition. This is likely not what you intended (for example, isPending will not update correctly). Either call the returned function inside startTransition, or pass it to an `action` or `formAction` prop.\")) : af(e, n, o);\n }\n function af(e, n, o) {\n n.status = \"fulfilled\", n.value = o, Bp(n), e.state = o, n = e.pending, n !== null && (o = n.next, o === n ? e.pending = null : (o = o.next, n.next = o, Qt(e, o)));\n }\n function Yu(e, n, o) {\n var i = e.pending;\n if (e.pending = null, i !== null) {\n i = i.next;\n do n.status = \"rejected\", n.reason = o, Bp(n), n = n.next; while (n !== i);\n }\n e.action = null;\n }\n function Bp(e) {\n e = e.listeners;\n for (var n = 0; n < e.length; n++) (0, e[n])();\n }\n function ps(e, n) {\n return n;\n }\n function tn(e, n) {\n if (ge) {\n var o = je.formState;\n if (o !== null) {\n e: {\n var i = Y;\n if (ge) {\n if (Ke) {\n var s = Pt(Ke, oo);\n if (s) {\n Ke = ga(s), i = Cr(s);\n break e;\n }\n }\n Fr(i);\n }\n i = !1;\n }\n i && (n = o[0]);\n }\n }\n o = Fn(), o.memoizedState = o.baseState = n, i = {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: ps,\n lastRenderedState: n\n }, o.queue = i, o = cf.bind(null, Y, i), i.dispatch = o, i = fs(!1);\n var u = Gi.bind(null, Y, !1, i.queue);\n return i = Fn(), s = {\n state: n,\n dispatch: null,\n action: e,\n pending: null\n }, i.queue = s, o = Up.bind(null, Y, s, u, o), s.dispatch = o, i.memoizedState = e, [n, o, !1];\n }\n function hs(e) {\n var n = xe();\n return Mn(n, Ae, e);\n }\n function Mn(e, n, o) {\n if (n = Or(e, n, ps)[0], e = Br(gr)[0], typeof n == \"object\" && n !== null && typeof n.then == \"function\") try {\n var i = Co(n);\n } catch (f) {\n throw f === dd ? am : f;\n } else i = n;\n n = xe();\n var s = n.queue,\n u = s.dispatch;\n return o !== n.memoizedState && (Y.flags |= 2048, Vt(lo | Ut, {\n destroy: void 0\n }, Op.bind(null, s, o), null)), [i, u, e];\n }\n function Op(e, n) {\n e.action = n;\n }\n function $t(e) {\n var n = xe(),\n o = Ae;\n if (o !== null) return Mn(n, o, e);\n xe(), n = n.memoizedState, o = xe();\n var i = o.queue.dispatch;\n return o.memoizedState = e, [n, i, !1];\n }\n function Vt(e, n, o, i) {\n return e = {\n tag: e,\n create: o,\n deps: i,\n inst: n,\n next: null\n }, n = Y.updateQueue, n === null && (n = Ba(), Y.updateQueue = n), o = n.lastEffect, o === null ? n.lastEffect = e.next = e : (i = o.next, o.next = e, e.next = i, n.lastEffect = e), e;\n }\n function br(e) {\n var n = Fn();\n return e = {\n current: e\n }, n.memoizedState = e;\n }\n function To(e, n, o, i) {\n var s = Fn();\n Y.flags |= e, s.memoizedState = Vt(lo | n, {\n destroy: void 0\n }, o, i === void 0 ? null : i);\n }\n function Qn(e, n, o, i) {\n var s = xe();\n i = i === void 0 ? null : i;\n var u = s.memoizedState.inst;\n Ae !== null && i !== null && Bu(i, Ae.memoizedState.deps) ? s.memoizedState = Vt(n, u, o, i) : (Y.flags |= e, s.memoizedState = Vt(lo | n, u, o, i));\n }\n function yt(e, n) {\n (Y.mode & 16) !== Z ? To(276826112, Ut, e, n) : To(8390656, Ut, e, n);\n }\n function Mp(e) {\n Y.flags |= 4;\n var n = Y.updateQueue;\n if (n === null) n = Ba(), Y.updateQueue = n, n.events = [e];else {\n var o = n.events;\n o === null ? n.events = [e] : o.push(e);\n }\n }\n function ra(e) {\n var n = Fn(),\n o = {\n impl: e\n };\n return n.memoizedState = o, function () {\n if ((ye & Zn) !== Jn) throw Error(\"A function wrapped in useEffectEvent can't be called during rendering.\");\n return o.impl.apply(void 0, arguments);\n };\n }\n function oa(e) {\n var n = xe().memoizedState;\n return Mp({\n ref: n,\n nextImpl: e\n }), function () {\n if ((ye & Zn) !== Jn) throw Error(\"A function wrapped in useEffectEvent can't be called during rendering.\");\n return n.impl.apply(void 0, arguments);\n };\n }\n function _o(e, n) {\n var o = 4194308;\n return (Y.mode & 16) !== Z && (o |= 134217728), To(o, Rr, e, n);\n }\n function lf(e, n) {\n if (typeof n == \"function\") {\n e = e();\n var o = n(e);\n return function () {\n typeof o == \"function\" ? o() : n(null);\n };\n }\n if (n != null) return n.hasOwnProperty(\"current\") || console.error(\"Expected useImperativeHandle() first argument to either be a ref callback or React.createRef() object. Instead received: %s.\", \"an object with keys {\" + Object.keys(n).join(\", \") + \"}\"), e = e(), n.current = e, function () {\n n.current = null;\n };\n }\n function Xu(e, n, o) {\n typeof n != \"function\" && console.error(\"Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.\", n !== null ? typeof n : \"null\"), o = o != null ? o.concat([e]) : null;\n var i = 4194308;\n (Y.mode & 16) !== Z && (i |= 134217728), To(i, Rr, lf.bind(null, n, e), o);\n }\n function aa(e, n, o) {\n typeof n != \"function\" && console.error(\"Expected useImperativeHandle() second argument to be a function that creates a handle. Instead received: %s.\", n !== null ? typeof n : \"null\"), o = o != null ? o.concat([e]) : null, Qn(4, Rr, lf.bind(null, n, e), o);\n }\n function Ku(e, n) {\n return Fn().memoizedState = [e, n === void 0 ? null : n], e;\n }\n function Ma(e, n) {\n var o = xe();\n n = n === void 0 ? null : n;\n var i = o.memoizedState;\n return n !== null && Bu(n, i[1]) ? i[0] : (o.memoizedState = [e, n], e);\n }\n function ec(e, n) {\n var o = Fn();\n n = n === void 0 ? null : n;\n var i = e();\n if (au) {\n De(!0);\n try {\n e();\n } finally {\n De(!1);\n }\n }\n return o.memoizedState = [i, n], i;\n }\n function Vi(e, n) {\n var o = xe();\n n = n === void 0 ? null : n;\n var i = o.memoizedState;\n if (n !== null && Bu(n, i[1])) return i[0];\n if (i = e(), au) {\n De(!0);\n try {\n e();\n } finally {\n De(!1);\n }\n }\n return o.memoizedState = [i, n], i;\n }\n function ms(e, n) {\n var o = Fn();\n return gs(o, e, n);\n }\n function nc(e, n) {\n var o = xe();\n return bt(o, Ae.memoizedState, e, n);\n }\n function sf(e, n) {\n var o = xe();\n return Ae === null ? gs(o, e, n) : bt(o, Ae.memoizedState, e, n);\n }\n function gs(e, n, o) {\n return o === void 0 || (yi & 1073741824) !== 0 && (ae & 261930) === 0 ? e.memoizedState = n : (e.memoizedState = o, e = gh(), Y.lanes |= e, Rl |= e, o);\n }\n function bt(e, n, o, i) {\n return jt(o, n) ? o : hd.current !== null ? (e = gs(e, o, i), jt(e, n) || (Cn = !0), e) : (yi & 42) === 0 || (yi & 1073741824) !== 0 && (ae & 261930) === 0 ? (Cn = !0, e.memoizedState = o) : (e = gh(), Y.lanes |= e, Rl |= e, n);\n }\n function ys() {\n x.asyncTransitions--;\n }\n function nt(e, n, o, i, s) {\n var u = wt();\n an(u !== 0 && 8 > u ? u : 8);\n var f = x.T,\n p = {};\n p._updatedFibers = new Set(), x.T = p, Gi(e, !1, n, o);\n try {\n var g = s(),\n S = x.S;\n if (S !== null && S(p, g), g !== null && typeof g == \"object\" && typeof g.then == \"function\") {\n x.asyncTransitions++, g.then(ys, ys);\n var T = Qd(g, i);\n qi(e, n, T, Nt(e));\n } else qi(e, n, i, Nt(e));\n } catch (_) {\n qi(e, n, {\n then: function () {},\n status: \"rejected\",\n reason: _\n }, Nt(e));\n } finally {\n an(u), f !== null && p.types !== null && (f.types !== null && f.types !== p.types && console.error(\"We expected inner Transitions to have transferred the outer types set and that you cannot add to the outer Transition while inside the inner.This is a bug in React.\"), f.types = p.types), x.T = f, f === null && p._updatedFibers && (e = p._updatedFibers.size, p._updatedFibers.clear(), 10 < e && console.warn(\"Detected a large number of updates inside startTransition. If this is due to a subscription please re-write it to use React provided hooks. Otherwise concurrent mode guarantees are off the table.\"));\n }\n }\n function uf(e) {\n var n = e.memoizedState;\n if (n !== null) return n;\n n = {\n memoizedState: Xt,\n baseState: Xt,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: gr,\n lastRenderedState: Xt\n },\n next: null\n };\n var o = {};\n return n.next = {\n memoizedState: o,\n baseState: o,\n baseQueue: null,\n queue: {\n pending: null,\n lanes: 0,\n dispatch: null,\n lastRenderedReducer: gr,\n lastRenderedState: o\n },\n next: null\n }, e.memoizedState = n, e = e.alternate, e !== null && (e.memoizedState = n), n;\n }\n function tc() {\n var e = fs(!1);\n return e = nt.bind(null, Y, e.queue, !0, !1), Fn().memoizedState = e, [!1, e];\n }\n function Qp() {\n var e = Br(gr)[0],\n n = xe().memoizedState;\n return [typeof e == \"boolean\" ? e : Co(e), n];\n }\n function Ro() {\n var e = Qi(gr)[0],\n n = xe().memoizedState;\n return [typeof e == \"boolean\" ? e : Co(e), n];\n }\n function ia() {\n return Ee(Kt);\n }\n function bs() {\n var e = Fn(),\n n = je.identifierPrefix;\n if (ge) {\n var o = ci,\n i = ui;\n o = (i & ~(1 << 32 - vn(i) - 1)).toString(32) + o, n = \"_\" + n + \"R_\" + o, o = cm++, 0 < o && (n += \"H\" + o.toString(32)), n += \"_\";\n } else o = Qb++, n = \"_\" + n + \"r_\" + o.toString(32) + \"_\";\n return e.memoizedState = n;\n }\n function la() {\n return Fn().memoizedState = $p.bind(null, Y);\n }\n function $p(e, n) {\n for (var o = e.return; o !== null;) {\n switch (o.tag) {\n case 24:\n case 3:\n var i = Nt(o),\n s = zo(i),\n u = Mt(o, s, i);\n u !== null && (ur(i, \"refresh()\", e), We(u, o, i), Bi(u, o, i)), e = Ai(), n != null && u !== null && console.error(\"The seed argument is not enabled outside experimental channels.\"), s.payload = {\n cache: e\n };\n return;\n }\n o = o.return;\n }\n }\n function Vp(e, n, o) {\n var i = arguments;\n typeof i[3] == \"function\" && console.error(\"State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect().\"), i = Nt(e);\n var s = {\n lane: i,\n revertLane: 0,\n gesture: null,\n action: o,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n Ji(e) ? qp(n, s) : (s = Hu(e, n, s, i), s !== null && (ur(i, \"dispatch()\", e), We(s, e, i), Gp(s, n, i)));\n }\n function cf(e, n, o) {\n var i = arguments;\n typeof i[3] == \"function\" && console.error(\"State updates from the useState() and useReducer() Hooks don't support the second callback argument. To execute a side effect after rendering, declare it in the component body with useEffect().\"), i = Nt(e), qi(e, n, o, i) && ur(i, \"setState()\", e);\n }\n function qi(e, n, o, i) {\n var s = {\n lane: i,\n revertLane: 0,\n gesture: null,\n action: o,\n hasEagerState: !1,\n eagerState: null,\n next: null\n };\n if (Ji(e)) qp(n, s);else {\n var u = e.alternate;\n if (e.lanes === 0 && (u === null || u.lanes === 0) && (u = n.lastRenderedReducer, u !== null)) {\n var f = x.H;\n x.H = $o;\n try {\n var p = n.lastRenderedState,\n g = u(p, o);\n if (s.hasEagerState = !0, s.eagerState = g, jt(g, p)) return os(e, n, s, 0), je === null && Ui(), !1;\n } catch {} finally {\n x.H = f;\n }\n }\n if (o = Hu(e, n, s, i), o !== null) return We(o, e, i), Gp(o, n, i), !0;\n }\n return !1;\n }\n function Gi(e, n, o, i) {\n if (x.T === null && eu === 0 && console.error(\"An optimistic state update occurred outside a transition or action. To fix, move the update to an action, or wrap with startTransition.\"), i = {\n lane: 2,\n revertLane: Ru(),\n gesture: null,\n action: i,\n hasEagerState: !1,\n eagerState: null,\n next: null\n }, Ji(e)) {\n if (n) throw Error(\"Cannot update optimistic state while rendering.\");\n console.error(\"Cannot call startTransition while rendering.\");\n } else n = Hu(e, o, i, 2), n !== null && (ur(2, \"setOptimistic()\", e), We(n, e, 2));\n }\n function Ji(e) {\n var n = e.alternate;\n return e === Y || n !== null && n === Y;\n }\n function qp(e, n) {\n yd = um = !0;\n var o = e.pending;\n o === null ? n.next = n : (n.next = o.next, o.next = n), e.pending = n;\n }\n function Gp(e, n, o) {\n if ((o & 4194048) !== 0) {\n var i = n.lanes;\n i &= e.pendingLanes, o |= i, n.lanes = o, Ld(e, o);\n }\n }\n function df(e) {\n if (e !== null && typeof e != \"function\") {\n var n = String(e);\n Qy.has(n) || (Qy.add(n), console.error(\"Expected the last optional `callback` argument to be a function. Instead received: %s.\", e));\n }\n }\n function rc(e, n, o, i) {\n var s = e.memoizedState,\n u = o(i, s);\n if (e.mode & 8) {\n De(!0);\n try {\n u = o(i, s);\n } finally {\n De(!1);\n }\n }\n u === void 0 && (n = $e(n) || \"Component\", Uy.has(n) || (Uy.add(n), console.error(\"%s.getDerivedStateFromProps(): A valid state object (or null) must be returned. You have returned undefined.\", n))), s = u == null ? s : ze({}, s, u), e.memoizedState = s, e.lanes === 0 && (e.updateQueue.baseState = s);\n }\n function ff(e, n, o, i, s, u, f) {\n var p = e.stateNode;\n if (typeof p.shouldComponentUpdate == \"function\") {\n if (o = p.shouldComponentUpdate(i, u, f), e.mode & 8) {\n De(!0);\n try {\n o = p.shouldComponentUpdate(i, u, f);\n } finally {\n De(!1);\n }\n }\n return o === void 0 && console.error(\"%s.shouldComponentUpdate(): Returned undefined instead of a boolean value. Make sure to return true or false.\", $e(n) || \"Component\"), o;\n }\n return n.prototype && n.prototype.isPureReactComponent ? !es(o, i) || !es(s, u) : !0;\n }\n function Qa(e, n, o, i) {\n var s = n.state;\n typeof n.componentWillReceiveProps == \"function\" && n.componentWillReceiveProps(o, i), typeof n.UNSAFE_componentWillReceiveProps == \"function\" && n.UNSAFE_componentWillReceiveProps(o, i), n.state !== s && (e = G(e) || \"Component\", Hy.has(e) || (Hy.add(e), console.error(\"%s.componentWillReceiveProps(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.\", e)), zg.enqueueReplaceState(n, n.state, null));\n }\n function Mr(e, n) {\n var o = n;\n if (\"ref\" in n) {\n o = {};\n for (var i in n) i !== \"ref\" && (o[i] = n[i]);\n }\n if (e = e.defaultProps) {\n o === n && (o = ze({}, o));\n for (var s in e) o[s] === void 0 && (o[s] = e[s]);\n }\n return o;\n }\n function vs(e, n) {\n try {\n bd = n.source ? G(n.source) : null, Cg = null;\n var o = n.value;\n if (x.actQueue !== null) x.thrownErrors.push(o);else {\n var i = e.onUncaughtError;\n i(o, {\n componentStack: n.stack\n });\n }\n } catch (s) {\n setTimeout(function () {\n throw s;\n });\n }\n }\n function pf(e, n, o) {\n try {\n bd = o.source ? G(o.source) : null, Cg = G(n);\n var i = e.onCaughtError;\n i(o.value, {\n componentStack: o.stack,\n errorBoundary: n.tag === 1 ? n.stateNode : null\n });\n } catch (s) {\n setTimeout(function () {\n throw s;\n });\n }\n }\n function oc(e, n, o) {\n return o = zo(o), o.tag = vg, o.payload = {\n element: null\n }, o.callback = function () {\n B(n.source, vs, e, n);\n }, o;\n }\n function ac(e) {\n return e = zo(e), e.tag = vg, e;\n }\n function ic(e, n, o, i) {\n var s = o.type.getDerivedStateFromError;\n if (typeof s == \"function\") {\n var u = i.value;\n e.payload = function () {\n return s(u);\n }, e.callback = function () {\n Ah(o), B(i.source, pf, n, o, i);\n };\n }\n var f = o.stateNode;\n f !== null && typeof f.componentDidCatch == \"function\" && (e.callback = function () {\n Ah(o), B(i.source, pf, n, o, i), typeof s != \"function\" && (Il === null ? Il = new Set([this]) : Il.add(this)), Ub(this, i), typeof s == \"function\" || (o.lanes & 2) === 0 && console.error(\"%s: Error boundaries should implement getDerivedStateFromError(). In that method, return a state update to display an error message or fallback UI.\", G(o) || \"Unknown\");\n });\n }\n function Jp(e, n, o, i, s) {\n if (o.flags |= 32768, wa && nl(e, s), i !== null && typeof i == \"object\" && typeof i.then == \"function\") {\n if (n = o.alternate, n !== null && He(n, o, s, !0), ge && (xa = !0), o = _r.current, o !== null) {\n switch (o.tag) {\n case 31:\n case 13:\n return Qo === null ? Pc() : o.alternate === null && nn === ki && (nn = vm), o.flags &= -257, o.flags |= 65536, o.lanes = s, i === im ? o.flags |= 16384 : (n = o.updateQueue, n === null ? o.updateQueue = new Set([i]) : n.add(i), Af(e, i, s)), !1;\n case 22:\n return o.flags |= 65536, i === im ? o.flags |= 16384 : (n = o.updateQueue, n === null ? (n = {\n transitions: null,\n markerInstances: null,\n retryQueue: new Set([i])\n }, o.updateQueue = n) : (o = n.retryQueue, o === null ? n.retryQueue = new Set([i]) : o.add(i)), Af(e, i, s)), !1;\n }\n throw Error(\"Unexpected Suspense handler tag (\" + o.tag + \"). This is a bug in React.\");\n }\n return Af(e, i, s), Pc(), !1;\n }\n if (ge) return xa = !0, n = _r.current, n !== null ? ((n.flags & 65536) === 0 && (n.flags |= 256), n.flags |= 65536, n.lanes = s, i !== rg && Fi(ft(Error(\"There was an error while hydrating but React was able to recover by instead client rendering from the nearest Suspense boundary.\", {\n cause: i\n }), o))) : (i !== rg && Fi(ft(Error(\"There was an error while hydrating but React was able to recover by instead client rendering the entire root.\", {\n cause: i\n }), o)), e = e.current.alternate, e.flags |= 65536, s &= -s, e.lanes |= s, i = ft(i, o), s = oc(e.stateNode, i, s), Ua(e, s), nn !== Tl && (nn = iu)), !1;\n var u = ft(Error(\"There was an error during concurrent rendering but React was able to recover by instead synchronously rendering the entire root.\", {\n cause: i\n }), o);\n if (wp === null ? wp = [u] : wp.push(u), nn !== Tl && (nn = iu), n === null) return !0;\n i = ft(i, o), o = n;\n do {\n switch (o.tag) {\n case 3:\n return o.flags |= 65536, e = s & -s, o.lanes |= e, e = oc(o.stateNode, i, e), Ua(o, e), !1;\n case 1:\n if (n = o.type, u = o.stateNode, (o.flags & 128) === 0 && (typeof n.getDerivedStateFromError == \"function\" || u !== null && typeof u.componentDidCatch == \"function\" && (Il === null || !Il.has(u)))) return o.flags |= 65536, s &= -s, o.lanes |= s, s = ac(s), ic(s, e, o, i), Ua(o, s), !1;\n }\n o = o.return;\n } while (o !== null);\n return !1;\n }\n function rn(e, n, o, i) {\n n.child = e === null ? xy(n, null, o, i) : ou(n, e.child, o, i);\n }\n function hf(e, n, o, i, s) {\n o = o.render;\n var u = n.ref;\n if (\"ref\" in i) {\n var f = {};\n for (var p in i) p !== \"ref\" && (f[p] = i[p]);\n } else f = i;\n return sr(n), i = It(e, n, o, f, u, s), p = Mu(), e !== null && !Cn ? (Qu(e, n, s), vr(e, n, s)) : (ge && p && Ei(n), n.flags |= 1, rn(e, n, i, s), n.child);\n }\n function mf(e, n, o, i, s) {\n if (e === null) {\n var u = o.type;\n return typeof u == \"function\" && !Tc(u) && u.defaultProps === void 0 && o.compare === null ? (o = Ya(u), n.tag = 15, n.type = o, Eo(n, u), ve(e, n, o, i, s)) : (e = _c(o.type, null, i, n, n.mode, s), e.ref = n.ref, e.return = n, n.child = e);\n }\n if (u = e.child, !ie(e, s)) {\n var f = u.memoizedProps;\n if (o = o.compare, o = o !== null ? o : es, o(f, i) && e.ref === n.ref) return vr(e, n, s);\n }\n return n.flags |= 1, e = Fo(u, i), e.ref = n.ref, e.return = n, n.child = e;\n }\n function ve(e, n, o, i, s) {\n if (e !== null) {\n var u = e.memoizedProps;\n if (es(u, i) && e.ref === n.ref && n.type === e.type) if (Cn = !1, n.pendingProps = i = u, ie(e, s)) (e.flags & 131072) !== 0 && (Cn = !0);else return n.lanes = e.lanes, vr(e, n, s);\n }\n return ks(e, n, o, i, s);\n }\n function lc(e, n, o, i) {\n var s = i.children,\n u = e !== null ? e.memoizedState : null;\n if (e === null && n.stateNode === null && (n.stateNode = {\n _visibility: pp,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n }), i.mode === \"hidden\") {\n if ((n.flags & 128) !== 0) {\n if (u = u !== null ? u.baseLanes | o : o, e !== null) {\n for (i = n.child = e.child, s = 0; i !== null;) s = s | i.lanes | i.childLanes, i = i.sibling;\n i = s & ~u;\n } else i = 0, n.child = null;\n return gf(e, n, u, o, i);\n }\n if ((o & 536870912) !== 0) n.memoizedState = {\n baseLanes: 0,\n cachePool: null\n }, e !== null && Kl(n, u !== null ? u.cachePool : null), u !== null ? Kd(n, u) : Du(n), Uu(n);else return i = n.lanes = 536870912, gf(e, n, u !== null ? u.baseLanes | o : o, o, i);\n } else u !== null ? (Kl(n, u.cachePool), Kd(n, u), mr(n), n.memoizedState = null) : (e !== null && Kl(n, null), Du(n), mr(n));\n return rn(e, n, s, o), n.child;\n }\n function Ss(e, n) {\n return e !== null && e.tag === 22 || n.stateNode !== null || (n.stateNode = {\n _visibility: pp,\n _pendingMarkers: null,\n _retryCache: null,\n _transitions: null\n }), n.sibling;\n }\n function gf(e, n, o, i, s) {\n var u = Eu();\n return u = u === null ? null : {\n parent: at ? un._currentValue : un._currentValue2,\n pool: u\n }, n.memoizedState = {\n baseLanes: o,\n cachePool: u\n }, e !== null && Kl(n, null), Du(n), Uu(n), e !== null && He(e, n, i, !0), n.childLanes = s, null;\n }\n function sc(e, n) {\n var o = n.hidden;\n return o !== void 0 && console.error(`<Activity> doesn't accept a hidden prop. Use mode=\"hidden\" instead.\n- <Activity %s>\n+ <Activity %s>`, o === !0 ? \"hidden\" : o === !1 ? \"hidden={false}\" : \"hidden={...}\", o ? 'mode=\"hidden\"' : 'mode=\"visible\"'), n = xs({\n mode: n.mode,\n children: n.children\n }, e.mode), n.ref = e.ref, e.child = n, n.return = e, n;\n }\n function Zp(e, n, o) {\n return ou(n, e.child, null, o), e = sc(n, n.pendingProps), e.flags |= 2, et(n), n.memoizedState = null, e;\n }\n function Nm(e, n, o) {\n var i = n.pendingProps,\n s = (n.flags & 128) !== 0;\n if (n.flags &= -129, e === null) {\n if (ge) {\n if (i.mode === \"hidden\") return e = sc(n, i), n.lanes = 536870912, Ss(null, e);\n if (Wu(n), (e = Ke) ? (o = ce(e, oo), o !== null && (i = {\n dehydrated: o,\n treeContext: Ul(),\n retryLane: 536870912,\n hydrationErrors: null\n }, n.memoizedState = i, i = Xa(o), i.return = n, n.child = i, it = n, Ke = null)) : o = null, o === null) throw Ni(n, e), Fr(n);\n return n.lanes = 536870912, null;\n }\n return sc(n, i);\n }\n var u = e.memoizedState;\n if (u !== null) {\n var f = u.dehydrated;\n if (Wu(n), s) {\n if (n.flags & 256) n.flags &= -257, n = Zp(e, n, o);else if (n.memoizedState !== null) n.child = e.child, n.flags |= 128, n = null;else throw Error(\"Client rendering an Activity suspended it again. This is a bug in React.\");\n } else if (vo(), (o & 536870912) !== 0 && wc(n), Cn || He(e, n, o, !1), s = (o & e.childLanes) !== 0, Cn || s) {\n if (i = je, i !== null && (f = Al(i, o), f !== 0 && f !== u.retryLane)) throw u.retryLane = f, On(e, f), We(i, e, f), Tg;\n Pc(), n = Zp(e, n, o);\n } else e = u.treeContext, qn && (Ke = Gc(f), it = n, ge = !0, kl = null, xa = !1, Tr = null, oo = !1, e !== null && Hd(n, e)), n = sc(n, i), n.flags |= 4096;\n return n;\n }\n return u = e.child, i = {\n mode: i.mode,\n children: i.children\n }, (o & 536870912) !== 0 && (o & e.lanes) !== 0 && wc(n), e = Fo(u, i), e.ref = n.ref, n.child = e, e.return = n, e;\n }\n function uc(e, n) {\n var o = n.ref;\n if (o === null) e !== null && e.ref !== null && (n.flags |= 4194816);else {\n if (typeof o != \"function\" && typeof o != \"object\") throw Error(\"Expected ref to be a function, an object returned by React.createRef(), or undefined/null.\");\n (e === null || e.ref !== o) && (n.flags |= 4194816);\n }\n }\n function ks(e, n, o, i, s) {\n if (o.prototype && typeof o.prototype.render == \"function\") {\n var u = $e(o) || \"Unknown\";\n $y[u] || (console.error(\"The <%s /> component appears to have a render method, but doesn't extend React.Component. This is likely to cause errors. Change %s to extend React.Component instead.\", u, u), $y[u] = !0);\n }\n return n.mode & 8 && Mo.recordLegacyContextWarning(n, null), e === null && (Eo(n, n.type), o.contextTypes && (u = $e(o) || \"Unknown\", qy[u] || (qy[u] = !0, console.error(\"%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with React.useContext() instead. (https://react.dev/link/legacy-context)\", u)))), sr(n), o = It(e, n, o, i, void 0, s), i = Mu(), e !== null && !Cn ? (Qu(e, n, s), vr(e, n, s)) : (ge && i && Ei(n), n.flags |= 1, rn(e, n, o, s), n.child);\n }\n function Qr(e, n, o, i, s, u) {\n return sr(n), vi = -1, gp = e !== null && e.type !== n.type, n.updateQueue = null, o = Ou(n, i, o, s), cs(e, n), i = Mu(), e !== null && !Cn ? (Qu(e, n, u), vr(e, n, u)) : (ge && i && Ei(n), n.flags |= 1, rn(e, n, o, u), n.child);\n }\n function yf(e, n, o, i, s) {\n switch (pu(n)) {\n case !1:\n var u = n.stateNode,\n f = new n.type(n.memoizedProps, u.context).state;\n u.updater.enqueueSetState(u, f, null);\n break;\n case !0:\n n.flags |= 128, n.flags |= 65536, u = Error(\"Simulated error coming from DevTools\");\n var p = s & -s;\n if (n.lanes |= p, f = je, f === null) throw Error(\"Expected a work-in-progress root. This is a bug in React. Please file an issue.\");\n p = ac(p), ic(p, f, n, ft(u, n)), Ua(n, p);\n }\n if (sr(n), n.stateNode === null) {\n if (f = Oe, u = o.contextType, \"contextType\" in o && u !== null && (u === void 0 || u.$$typeof !== on) && !My.has(o) && (My.add(o), p = u === void 0 ? \" However, it is set to undefined. This can be caused by a typo or by mixing up named and default imports. This can also happen due to a circular dependency, so try moving the createContext() call to a separate file.\" : typeof u != \"object\" ? \" However, it is set to a \" + typeof u + \".\" : u.$$typeof === ei ? \" Did you accidentally pass the Context.Consumer instead?\" : \" However, it is set to an object with keys {\" + Object.keys(u).join(\", \") + \"}.\", console.error(\"%s defines an invalid contextType. contextType should point to the Context object returned by React.createContext().%s\", $e(o) || \"Component\", p)), typeof u == \"object\" && u !== null && (f = Ee(u)), u = new o(i, f), n.mode & 8) {\n De(!0);\n try {\n u = new o(i, f);\n } finally {\n De(!1);\n }\n }\n if (f = n.memoizedState = u.state !== null && u.state !== void 0 ? u.state : null, u.updater = zg, n.stateNode = u, u._reactInternals = n, u._reactInternalInstance = Fy, typeof o.getDerivedStateFromProps == \"function\" && f === null && (f = $e(o) || \"Component\", Ay.has(f) || (Ay.add(f), console.error(\"`%s` uses `getDerivedStateFromProps` but its initial state is %s. This is not recommended. Instead, define the initial state by assigning an object to `this.state` in the constructor of `%s`. This ensures that `getDerivedStateFromProps` arguments have a consistent shape.\", f, u.state === null ? \"null\" : \"undefined\", f))), typeof o.getDerivedStateFromProps == \"function\" || typeof u.getSnapshotBeforeUpdate == \"function\") {\n var g = p = f = null;\n if (typeof u.componentWillMount == \"function\" && u.componentWillMount.__suppressDeprecationWarning !== !0 ? f = \"componentWillMount\" : typeof u.UNSAFE_componentWillMount == \"function\" && (f = \"UNSAFE_componentWillMount\"), typeof u.componentWillReceiveProps == \"function\" && u.componentWillReceiveProps.__suppressDeprecationWarning !== !0 ? p = \"componentWillReceiveProps\" : typeof u.UNSAFE_componentWillReceiveProps == \"function\" && (p = \"UNSAFE_componentWillReceiveProps\"), typeof u.componentWillUpdate == \"function\" && u.componentWillUpdate.__suppressDeprecationWarning !== !0 ? g = \"componentWillUpdate\" : typeof u.UNSAFE_componentWillUpdate == \"function\" && (g = \"UNSAFE_componentWillUpdate\"), f !== null || p !== null || g !== null) {\n u = $e(o) || \"Component\";\n var S = typeof o.getDerivedStateFromProps == \"function\" ? \"getDerivedStateFromProps()\" : \"getSnapshotBeforeUpdate()\";\n Dy.has(u) || (Dy.add(u), console.error(`Unsafe legacy lifecycles will not be called for components using new component APIs.\n\n%s uses %s but also contains the following legacy lifecycles:%s%s%s\n\nThe above lifecycles should be removed. Learn more about this warning here:\nhttps://react.dev/link/unsafe-component-lifecycles`, u, S, f !== null ? `\n ` + f : \"\", p !== null ? `\n ` + p : \"\", g !== null ? `\n ` + g : \"\"));\n }\n }\n u = n.stateNode, f = $e(o) || \"Component\", u.render || (o.prototype && typeof o.prototype.render == \"function\" ? console.error(\"No `render` method found on the %s instance: did you accidentally return an object from the constructor?\", f) : console.error(\"No `render` method found on the %s instance: you may have forgotten to define `render`.\", f)), !u.getInitialState || u.getInitialState.isReactClassApproved || u.state || console.error(\"getInitialState was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Did you mean to define a state property instead?\", f), u.getDefaultProps && !u.getDefaultProps.isReactClassApproved && console.error(\"getDefaultProps was defined on %s, a plain JavaScript class. This is only supported for classes created using React.createClass. Use a static property to define defaultProps instead.\", f), u.contextType && console.error(\"contextType was defined as an instance property on %s. Use a static property to define contextType instead.\", f), o.childContextTypes && !Oy.has(o) && (Oy.add(o), console.error(\"%s uses the legacy childContextTypes API which was removed in React 19. Use React.createContext() instead. (https://react.dev/link/legacy-context)\", f)), o.contextTypes && !By.has(o) && (By.add(o), console.error(\"%s uses the legacy contextTypes API which was removed in React 19. Use React.createContext() with static contextType instead. (https://react.dev/link/legacy-context)\", f)), typeof u.componentShouldUpdate == \"function\" && console.error(\"%s has a method called componentShouldUpdate(). Did you mean shouldComponentUpdate()? The name is phrased as a question because the function is expected to return a value.\", f), o.prototype && o.prototype.isPureReactComponent && typeof u.shouldComponentUpdate < \"u\" && console.error(\"%s has a method called shouldComponentUpdate(). shouldComponentUpdate should not be used when extending React.PureComponent. Please extend React.Component if shouldComponentUpdate is used.\", $e(o) || \"A pure component\"), typeof u.componentDidUnmount == \"function\" && console.error(\"%s has a method called componentDidUnmount(). But there is no such lifecycle method. Did you mean componentWillUnmount()?\", f), typeof u.componentDidReceiveProps == \"function\" && console.error(\"%s has a method called componentDidReceiveProps(). But there is no such lifecycle method. If you meant to update the state in response to changing props, use componentWillReceiveProps(). If you meant to fetch data or run side-effects or mutations after React has updated the UI, use componentDidUpdate().\", f), typeof u.componentWillRecieveProps == \"function\" && console.error(\"%s has a method called componentWillRecieveProps(). Did you mean componentWillReceiveProps()?\", f), typeof u.UNSAFE_componentWillRecieveProps == \"function\" && console.error(\"%s has a method called UNSAFE_componentWillRecieveProps(). Did you mean UNSAFE_componentWillReceiveProps()?\", f), p = u.props !== i, u.props !== void 0 && p && console.error(\"When calling super() in `%s`, make sure to pass up the same props that your component's constructor was passed.\", f), u.defaultProps && console.error(\"Setting defaultProps as an instance property on %s is not supported and will be ignored. Instead, define defaultProps as a static property on %s.\", f, f), typeof u.getSnapshotBeforeUpdate != \"function\" || typeof u.componentDidUpdate == \"function\" || jy.has(o) || (jy.add(o), console.error(\"%s: getSnapshotBeforeUpdate() should be used with componentDidUpdate(). This component defines getSnapshotBeforeUpdate() only.\", $e(o))), typeof u.getDerivedStateFromProps == \"function\" && console.error(\"%s: getDerivedStateFromProps() is defined as an instance method and will be ignored. Instead, declare it as a static method.\", f), typeof u.getDerivedStateFromError == \"function\" && console.error(\"%s: getDerivedStateFromError() is defined as an instance method and will be ignored. Instead, declare it as a static method.\", f), typeof o.getSnapshotBeforeUpdate == \"function\" && console.error(\"%s: getSnapshotBeforeUpdate() is defined as a static method and will be ignored. Instead, declare it as an instance method.\", f), (p = u.state) && (typeof p != \"object\" || fn(p)) && console.error(\"%s.state: must be set to an object or null\", f), typeof u.getChildContext == \"function\" && typeof o.childContextTypes != \"object\" && console.error(\"%s.getChildContext(): childContextTypes must be defined in order to use getChildContext().\", f), u = n.stateNode, u.props = i, u.state = n.memoizedState, u.refs = {}, Au(n), f = o.contextType, u.context = typeof f == \"object\" && f !== null ? Ee(f) : Oe, u.state === i && (f = $e(o) || \"Component\", Wy.has(f) || (Wy.add(f), console.error(\"%s: It is not recommended to assign props directly to state because updates to props won't be reflected in state. In most cases, it is better to use props directly.\", f))), n.mode & 8 && Mo.recordLegacyContextWarning(n, u), Mo.recordUnsafeLifecycleWarnings(n, u), u.state = n.memoizedState, f = o.getDerivedStateFromProps, typeof f == \"function\" && (rc(n, o, f, i), u.state = n.memoizedState), typeof o.getDerivedStateFromProps == \"function\" || typeof u.getSnapshotBeforeUpdate == \"function\" || typeof u.UNSAFE_componentWillMount != \"function\" && typeof u.componentWillMount != \"function\" || (f = u.state, typeof u.componentWillMount == \"function\" && u.componentWillMount(), typeof u.UNSAFE_componentWillMount == \"function\" && u.UNSAFE_componentWillMount(), f !== u.state && (console.error(\"%s.componentWillMount(): Assigning directly to this.state is deprecated (except inside a component's constructor). Use setState instead.\", G(n) || \"Component\"), zg.enqueueReplaceState(u, u.state, null)), is(n, i, u, s), Oi(), u.state = n.memoizedState), typeof u.componentDidMount == \"function\" && (n.flags |= 4194308), (n.mode & 16) !== Z && (n.flags |= 134217728), u = !0;\n } else if (e === null) {\n u = n.stateNode;\n var T = n.memoizedProps;\n p = Mr(o, T), u.props = p;\n var _ = u.context;\n g = o.contextType, f = Oe, typeof g == \"object\" && g !== null && (f = Ee(g)), S = o.getDerivedStateFromProps, g = typeof S == \"function\" || typeof u.getSnapshotBeforeUpdate == \"function\", T = n.pendingProps !== T, g || typeof u.UNSAFE_componentWillReceiveProps != \"function\" && typeof u.componentWillReceiveProps != \"function\" || (T || _ !== f) && Qa(n, u, i, f), Cl = !1;\n var I = n.memoizedState;\n u.state = I, is(n, i, u, s), Oi(), _ = n.memoizedState, T || I !== _ || Cl ? (typeof S == \"function\" && (rc(n, o, S, i), _ = n.memoizedState), (p = Cl || ff(n, o, p, i, I, _, f)) ? (g || typeof u.UNSAFE_componentWillMount != \"function\" && typeof u.componentWillMount != \"function\" || (typeof u.componentWillMount == \"function\" && u.componentWillMount(), typeof u.UNSAFE_componentWillMount == \"function\" && u.UNSAFE_componentWillMount()), typeof u.componentDidMount == \"function\" && (n.flags |= 4194308), (n.mode & 16) !== Z && (n.flags |= 134217728)) : (typeof u.componentDidMount == \"function\" && (n.flags |= 4194308), (n.mode & 16) !== Z && (n.flags |= 134217728), n.memoizedProps = i, n.memoizedState = _), u.props = i, u.state = _, u.context = f, u = p) : (typeof u.componentDidMount == \"function\" && (n.flags |= 4194308), (n.mode & 16) !== Z && (n.flags |= 134217728), u = !1);\n } else {\n u = n.stateNode, ju(e, n), f = n.memoizedProps, g = Mr(o, f), u.props = g, S = n.pendingProps, I = u.context, _ = o.contextType, p = Oe, typeof _ == \"object\" && _ !== null && (p = Ee(_)), T = o.getDerivedStateFromProps, (_ = typeof T == \"function\" || typeof u.getSnapshotBeforeUpdate == \"function\") || typeof u.UNSAFE_componentWillReceiveProps != \"function\" && typeof u.componentWillReceiveProps != \"function\" || (f !== S || I !== p) && Qa(n, u, i, p), Cl = !1, I = n.memoizedState, u.state = I, is(n, i, u, s), Oi();\n var O = n.memoizedState;\n f !== S || I !== O || Cl || e !== null && e.dependencies !== null && ja(e.dependencies) ? (typeof T == \"function\" && (rc(n, o, T, i), O = n.memoizedState), (g = Cl || ff(n, o, g, i, I, O, p) || e !== null && e.dependencies !== null && ja(e.dependencies)) ? (_ || typeof u.UNSAFE_componentWillUpdate != \"function\" && typeof u.componentWillUpdate != \"function\" || (typeof u.componentWillUpdate == \"function\" && u.componentWillUpdate(i, O, p), typeof u.UNSAFE_componentWillUpdate == \"function\" && u.UNSAFE_componentWillUpdate(i, O, p)), typeof u.componentDidUpdate == \"function\" && (n.flags |= 4), typeof u.getSnapshotBeforeUpdate == \"function\" && (n.flags |= 1024)) : (typeof u.componentDidUpdate != \"function\" || f === e.memoizedProps && I === e.memoizedState || (n.flags |= 4), typeof u.getSnapshotBeforeUpdate != \"function\" || f === e.memoizedProps && I === e.memoizedState || (n.flags |= 1024), n.memoizedProps = i, n.memoizedState = O), u.props = i, u.state = O, u.context = p, u = g) : (typeof u.componentDidUpdate != \"function\" || f === e.memoizedProps && I === e.memoizedState || (n.flags |= 4), typeof u.getSnapshotBeforeUpdate != \"function\" || f === e.memoizedProps && I === e.memoizedState || (n.flags |= 1024), u = !1);\n }\n if (p = u, uc(e, n), f = (n.flags & 128) !== 0, p || f) {\n if (p = n.stateNode, Ql(n), f && typeof o.getDerivedStateFromError != \"function\") o = null, Dt = -1;else if (o = cy(p), n.mode & 8) {\n De(!0);\n try {\n cy(p);\n } finally {\n De(!1);\n }\n }\n n.flags |= 1, e !== null && f ? (n.child = ou(n, e.child, null, s), n.child = ou(n, null, o, s)) : rn(e, n, o, s), n.memoizedState = p.state, e = n.child;\n } else e = vr(e, n, s);\n return s = n.stateNode, u && s.props !== i && (vd || console.error(\"It looks like %s is reassigning its own `this.props` while rendering. This is not supported and can lead to confusing bugs.\", G(n) || \"a component\"), vd = !0), e;\n }\n function ws(e, n, o, i) {\n return wo(), n.flags |= 256, rn(e, n, o, i), n.child;\n }\n function Eo(e, n) {\n n && n.childContextTypes && console.error(`childContextTypes cannot be defined on a function component.\n %s.childContextTypes = ...`, n.displayName || n.name || \"Component\"), typeof n.getDerivedStateFromProps == \"function\" && (e = $e(n) || \"Unknown\", Gy[e] || (console.error(\"%s: Function components do not support getDerivedStateFromProps.\", e), Gy[e] = !0)), typeof n.contextType == \"object\" && n.contextType !== null && (n = $e(n) || \"Unknown\", Vy[n] || (console.error(\"%s: Function components do not support contextType.\", n), Vy[n] = !0));\n }\n function Ps(e) {\n return {\n baseLanes: e,\n cachePool: Iu()\n };\n }\n function cc(e, n, o) {\n return e = e !== null ? e.childLanes & ~o : 0, n && (e |= rr), e;\n }\n function dc(e, n, o) {\n var i = n.pendingProps;\n fu(n) && (n.flags |= 128);\n var s = !1,\n u = (n.flags & 128) !== 0,\n f;\n if ((f = u) || (f = e !== null && e.memoizedState === null ? !1 : (Sn.current & hp) !== 0), f && (s = !0, n.flags &= -129), f = (n.flags & 32) !== 0, n.flags &= -33, e === null) {\n if (ge) {\n if (s ? Ur(n) : mr(n), (e = Ke) ? (o = Ne(e, oo), o !== null && (f = {\n dehydrated: o,\n treeContext: Ul(),\n retryLane: 536870912,\n hydrationErrors: null\n }, n.memoizedState = f, f = Xa(o), f.return = n, n.child = f, it = n, Ke = null)) : o = null, o === null) throw Ni(n, e), Fr(n);\n return $c(o) ? n.lanes = 32 : n.lanes = 536870912, null;\n }\n var p = i.children;\n return i = i.fallback, s ? (mr(n), s = n.mode, p = xs({\n mode: \"hidden\",\n children: p\n }, s), i = fa(i, s, o, null), p.return = n, i.return = n, p.sibling = i, n.child = p, i = n.child, i.memoizedState = Ps(o), i.childLanes = cc(e, f, o), n.memoizedState = _g, Ss(null, i)) : (Ur(n), bf(n, p));\n }\n var g = e.memoizedState;\n if (g !== null && (p = g.dehydrated, p !== null)) {\n if (u) n.flags & 256 ? (Ur(n), n.flags &= -257, n = fc(e, n, o)) : n.memoizedState !== null ? (mr(n), n.child = e.child, n.flags |= 128, n = null) : (mr(n), p = i.fallback, s = n.mode, i = xs({\n mode: \"visible\",\n children: i.children\n }, s), p = fa(p, s, o, null), p.flags |= 2, i.return = n, p.return = n, i.sibling = p, n.child = i, ou(n, e.child, null, o), i = n.child, i.memoizedState = Ps(o), i.childLanes = cc(e, f, o), n.memoizedState = _g, n = Ss(null, i));else if (Ur(n), vo(), (o & 536870912) !== 0 && wc(n), $c(p)) s = Pn(p), f = s.digest, p = s.message, i = s.stack, s = s.componentStack, p = Error(p || \"The server could not finish this Suspense boundary, likely due to an error during server rendering. Switched to client rendering.\"), p.stack = i || \"\", p.digest = f, f = s === void 0 ? null : s, i = {\n value: p,\n source: null,\n stack: f\n }, typeof f == \"string\" && tg.set(p, i), Fi(i), n = fc(e, n, o);else if (Cn || He(e, n, o, !1), f = (o & e.childLanes) !== 0, Cn || f) {\n if (f = je, f !== null && (i = Al(f, o), i !== 0 && i !== g.retryLane)) throw g.retryLane = i, On(e, i), We(f, e, i), Tg;\n Ms(p) || Pc(), n = fc(e, n, o);\n } else Ms(p) ? (n.flags |= 192, n.child = e.child, n = null) : (e = g.treeContext, qn && (Ke = Jc(p), it = n, ge = !0, kl = null, xa = !1, Tr = null, oo = !1, e !== null && Hd(n, e)), n = bf(n, i.children), n.flags |= 4096);\n return n;\n }\n return s ? (mr(n), p = i.fallback, s = n.mode, g = e.child, u = g.sibling, i = Fo(g, {\n mode: \"hidden\",\n children: i.children\n }), i.subtreeFlags = g.subtreeFlags & 65011712, u !== null ? p = Fo(u, p) : (p = fa(p, s, o, null), p.flags |= 2), p.return = n, i.return = n, i.sibling = p, n.child = i, Ss(null, i), i = n.child, p = e.child.memoizedState, p === null ? p = Ps(o) : (s = p.cachePool, s !== null ? (g = at ? un._currentValue : un._currentValue2, s = s.parent !== g ? {\n parent: g,\n pool: g\n } : s) : s = Iu(), p = {\n baseLanes: p.baseLanes | o,\n cachePool: s\n }), i.memoizedState = p, i.childLanes = cc(e, f, o), n.memoizedState = _g, Ss(e.child, i)) : (g !== null && (o & 62914560) === o && (o & e.lanes) !== 0 && wc(n), Ur(n), o = e.child, e = o.sibling, o = Fo(o, {\n mode: \"visible\",\n children: i.children\n }), o.return = n, o.sibling = null, e !== null && (f = n.deletions, f === null ? (n.deletions = [e], n.flags |= 16) : f.push(e)), n.child = o, n.memoizedState = null, o);\n }\n function bf(e, n) {\n return n = xs({\n mode: \"visible\",\n children: n\n }, e.mode), n.return = e, e.child = n;\n }\n function xs(e, n) {\n return e = lt(22, e, null, n), e.lanes = 0, e;\n }\n function fc(e, n, o) {\n return ou(n, e.child, null, o), e = bf(n, n.pendingProps.children), e.flags |= 2, n.memoizedState = null, e;\n }\n function vf(e, n, o) {\n e.lanes |= n;\n var i = e.alternate;\n i !== null && (i.lanes |= n), Vl(e.return, n, o);\n }\n function pc(e, n, o, i, s, u) {\n var f = e.memoizedState;\n f === null ? e.memoizedState = {\n isBackwards: n,\n rendering: null,\n renderingStartTime: 0,\n last: i,\n tail: o,\n tailMode: s,\n treeForkCount: u\n } : (f.isBackwards = n, f.rendering = null, f.renderingStartTime = 0, f.last = i, f.tail = o, f.tailMode = s, f.treeForkCount = u);\n }\n function Sf(e, n, o) {\n var _s2;\n var i = n.pendingProps,\n s = i.revealOrder,\n u = i.tail,\n f = i.children,\n p = Sn.current;\n if ((i = (p & hp) !== 0) ? (p = p & md | hp, n.flags |= 128) : p &= md, pe(Sn, p, n), p = (_s2 = s) != null ? _s2 : \"null\", s !== \"forwards\" && s !== \"unstable_legacy-backwards\" && s !== \"together\" && s !== \"independent\" && !Jy[p]) if (Jy[p] = !0, s == null) console.error('The default for the <SuspenseList revealOrder=\"...\"> prop is changing. To be future compatible you must explictly specify either \"independent\" (the current default), \"together\", \"forwards\" or \"legacy_unstable-backwards\".');else if (s === \"backwards\") console.error('The rendering order of <SuspenseList revealOrder=\"backwards\"> is changing. To be future compatible you must specify revealOrder=\"legacy_unstable-backwards\" instead.');else if (typeof s == \"string\") switch (s.toLowerCase()) {\n case \"together\":\n case \"forwards\":\n case \"backwards\":\n case \"independent\":\n console.error('\"%s\" is not a valid value for revealOrder on <SuspenseList />. Use lowercase \"%s\" instead.', s, s.toLowerCase());\n break;\n case \"forward\":\n case \"backward\":\n console.error('\"%s\" is not a valid value for revealOrder on <SuspenseList />. React uses the -s suffix in the spelling. Use \"%ss\" instead.', s, s.toLowerCase());\n break;\n default:\n console.error('\"%s\" is not a supported revealOrder on <SuspenseList />. Did you mean \"independent\", \"together\", \"forwards\" or \"backwards\"?', s);\n } else console.error('%s is not a supported value for revealOrder on <SuspenseList />. Did you mean \"independent\", \"together\", \"forwards\" or \"backwards\"?', s);\n p = u != null ? u : \"null\", fm[p] || (u == null ? (s === \"forwards\" || s === \"backwards\" || s === \"unstable_legacy-backwards\") && (fm[p] = !0, console.error('The default for the <SuspenseList tail=\"...\"> prop is changing. To be future compatible you must explictly specify either \"visible\" (the current default), \"collapsed\" or \"hidden\".')) : u !== \"visible\" && u !== \"collapsed\" && u !== \"hidden\" ? (fm[p] = !0, console.error('\"%s\" is not a supported value for tail on <SuspenseList />. Did you mean \"visible\", \"collapsed\" or \"hidden\"?', u)) : s !== \"forwards\" && s !== \"backwards\" && s !== \"unstable_legacy-backwards\" && (fm[p] = !0, console.error('<SuspenseList tail=\"%s\" /> is only valid if revealOrder is \"forwards\" or \"backwards\". Did you mean to specify revealOrder=\"forwards\"?', u)));\n e: if ((s === \"forwards\" || s === \"backwards\" || s === \"unstable_legacy-backwards\") && f !== void 0 && f !== null && f !== !1) if (fn(f)) {\n for (p = 0; p < f.length; p++) if (!Zd(f[p], p)) break e;\n } else if (p = Yo(f), typeof p == \"function\") {\n if (p = p.call(f)) for (var g = p.next(), S = 0; !g.done; g = p.next()) {\n if (!Zd(g.value, S)) break e;\n S++;\n }\n } else console.error('A single row was passed to a <SuspenseList revealOrder=\"%s\" />. This is not useful since it needs multiple rows. Did you mean to pass multiple children or an array?', s);\n if (rn(e, n, f, o), ge ? (mo(), f = Xf) : f = 0, !i && e !== null && (e.flags & 128) !== 0) e: for (e = n.child; e !== null;) {\n if (e.tag === 13) e.memoizedState !== null && vf(e, o, n);else if (e.tag === 19) vf(e, o, n);else if (e.child !== null) {\n e.child.return = e, e = e.child;\n continue;\n }\n if (e === n) break e;\n for (; e.sibling === null;) {\n if (e.return === null || e.return === n) break e;\n e = e.return;\n }\n e.sibling.return = e.return, e = e.sibling;\n }\n switch (s) {\n case \"forwards\":\n for (o = n.child, s = null; o !== null;) e = o.alternate, e !== null && us(e) === null && (s = o), o = o.sibling;\n o = s, o === null ? (s = n.child, n.child = null) : (s = o.sibling, o.sibling = null), pc(n, !1, s, o, u, f);\n break;\n case \"backwards\":\n case \"unstable_legacy-backwards\":\n for (o = null, s = n.child, n.child = null; s !== null;) {\n if (e = s.alternate, e !== null && us(e) === null) {\n n.child = s;\n break;\n }\n e = s.sibling, s.sibling = o, o = s, s = e;\n }\n pc(n, !0, o, null, u, f);\n break;\n case \"together\":\n pc(n, !1, null, null, void 0, f);\n break;\n default:\n n.memoizedState = null;\n }\n return n.child;\n }\n function vr(e, n, o) {\n if (e !== null && (n.dependencies = e.dependencies), Dt = -1, Rl |= n.lanes, (o & n.childLanes) === 0) if (e !== null) {\n if (He(e, n, o, !1), (o & n.childLanes) === 0) return null;\n } else return null;\n if (e !== null && n.child !== e.child) throw Error(\"Resuming work not yet implemented.\");\n if (n.child !== null) {\n for (e = n.child, o = Fo(e, e.pendingProps), n.child = o, o.return = n; e.sibling !== null;) e = e.sibling, o = o.sibling = Fo(e, e.pendingProps), o.return = n;\n o.sibling = null;\n }\n return n.child;\n }\n function ie(e, n) {\n return (e.lanes & n) !== 0 ? !0 : (e = e.dependencies, !!(e !== null && ja(e)));\n }\n function Fm(e, n, o) {\n switch (n.tag) {\n case 3:\n Bl(n, n.stateNode.containerInfo), Hr(n, un, e.memoizedState.cache), wo();\n break;\n case 27:\n case 5:\n La(n);\n break;\n case 4:\n Bl(n, n.stateNode.containerInfo);\n break;\n case 10:\n Hr(n, n.type, n.memoizedProps.value);\n break;\n case 12:\n (o & n.childLanes) !== 0 && (n.flags |= 4), n.flags |= 2048;\n var i = n.stateNode;\n i.effectDuration = -0, i.passiveEffectDuration = -0;\n break;\n case 31:\n if (n.memoizedState !== null) return n.flags |= 128, Wu(n), null;\n break;\n case 13:\n if (i = n.memoizedState, i !== null) return i.dehydrated !== null ? (Ur(n), n.flags |= 128, null) : (o & n.child.childLanes) !== 0 ? dc(e, n, o) : (Ur(n), e = vr(e, n, o), e !== null ? e.sibling : null);\n Ur(n);\n break;\n case 19:\n var s = (e.flags & 128) !== 0;\n if (i = (o & n.childLanes) !== 0, i || (He(e, n, o, !1), i = (o & n.childLanes) !== 0), s) {\n if (i) return Sf(e, n, o);\n n.flags |= 128;\n }\n if (s = n.memoizedState, s !== null && (s.rendering = null, s.tail = null, s.lastEffect = null), pe(Sn, Sn.current, n), i) break;\n return null;\n case 22:\n return n.lanes = 0, lc(e, n, o, n.pendingProps);\n case 24:\n Hr(n, un, e.memoizedState.cache);\n }\n return vr(e, n, o);\n }\n function tt(e, n, o) {\n if (n._debugNeedsRemount && e !== null) {\n o = _c(n.type, n.key, n.pendingProps, n._debugOwner || null, n.mode, n.lanes), o._debugStack = n._debugStack, o._debugTask = n._debugTask;\n var i = n.return;\n if (i === null) throw Error(\"Cannot swap the root fiber.\");\n if (e.alternate = null, n.alternate = null, o.index = n.index, o.sibling = n.sibling, o.return = n.return, o.ref = n.ref, o._debugInfo = n._debugInfo, n === i.child) i.child = o;else {\n var s = i.child;\n if (s === null) throw Error(\"Expected parent to have a child.\");\n for (; s.sibling !== n;) if (s = s.sibling, s === null) throw Error(\"Expected to find the previous sibling.\");\n s.sibling = o;\n }\n return n = i.deletions, n === null ? (i.deletions = [e], i.flags |= 16) : n.push(e), o.flags |= 2, o;\n }\n if (e !== null) {\n if (e.memoizedProps !== n.pendingProps || n.type !== e.type) Cn = !0;else {\n if (!ie(e, o) && (n.flags & 128) === 0) return Cn = !1, Fm(e, n, o);\n Cn = (e.flags & 131072) !== 0;\n }\n } else Cn = !1, (i = ge) && (mo(), i = (n.flags & 1048576) !== 0), i && (i = n.index, mo(), wu(n, Xf, i));\n switch (n.lanes = 0, n.tag) {\n case 16:\n e: if (i = n.pendingProps, e = xo(n.elementType), n.type = e, typeof e == \"function\") Tc(e) ? (i = Mr(e, i), n.tag = 1, n.type = e = Ya(e), n = yf(null, n, e, i, o)) : (n.tag = 0, Eo(n, e), n.type = e = Ya(e), n = ks(null, n, e, i, o));else {\n if (e != null) {\n if (s = e.$$typeof, s === jn) {\n n.tag = 11, n.type = e = Cc(e), n = hf(null, n, e, i, o);\n break e;\n } else if (s === al) {\n n.tag = 14, n = mf(null, n, e, i, o);\n break e;\n }\n }\n throw n = \"\", e !== null && typeof e == \"object\" && e.$$typeof === kt && (n = \" Did you wrap a component in React.lazy() more than once?\"), e = $e(e) || e, Error(\"Element type is invalid. Received a promise that resolves to: \" + e + \". Lazy element type must resolve to a class or function.\" + n);\n }\n return n;\n case 0:\n return ks(e, n, n.type, n.pendingProps, o);\n case 1:\n return i = n.type, s = Mr(i, n.pendingProps), yf(e, n, i, s, o);\n case 3:\n e: {\n if (Bl(n, n.stateNode.containerInfo), e === null) throw Error(\"Should have a current fiber. This is a bug in React.\");\n var u = n.pendingProps;\n s = n.memoizedState, i = s.element, ju(e, n), is(n, u, null, o);\n var f = n.memoizedState;\n if (u = f.cache, Hr(n, un, u), u !== s.cache && Ln(n, [un], o, !0), Oi(), u = f.element, qn && s.isDehydrated) {\n if (s = {\n element: u,\n isDehydrated: !1,\n cache: f.cache\n }, n.updateQueue.baseState = s, n.memoizedState = s, n.flags & 256) {\n n = ws(e, n, u, o);\n break e;\n } else if (u !== i) {\n i = ft(Error(\"This root received an early update, before anything was able hydrate. Switched the entire root to client rendering.\"), n), Fi(i), n = ws(e, n, u, o);\n break e;\n } else for (qn && (Ke = qc(n.stateNode.containerInfo), it = n, ge = !0, kl = null, xa = !1, Tr = null, oo = !0), e = xy(n, null, u, o), n.child = e; e;) e.flags = e.flags & -3 | 4096, e = e.sibling;\n } else {\n if (wo(), u === i) {\n n = vr(e, n, o);\n break e;\n }\n rn(e, n, u, o);\n }\n n = n.child;\n }\n return n;\n case 26:\n if (Re) return uc(e, n), e === null ? (e = no(n.type, null, n.pendingProps, null)) ? n.memoizedState = e : ge || (n.stateNode = t(n.type, n.pendingProps, pt(Sl.current), n)) : n.memoizedState = no(n.type, e.memoizedProps, n.pendingProps, e.memoizedState), null;\n case 27:\n if (d) return La(n), e === null && d && ge && (s = pt(Sl.current), i = Rt(), s = n.stateNode = h(n.type, n.pendingProps, s, i, !1), xa || (i = Vs(s, n.type, n.pendingProps, i), i !== null && (bo(n, 0).serverProps = i)), it = n, oo = !0, Ke = Zc(n.type, s, Ke)), rn(e, n, n.pendingProps.children, o), uc(e, n), e === null && (n.flags |= 4194304), n.child;\n case 5:\n return e === null && ge && (u = Rt(), i = Xc(n.type, n.pendingProps, u), s = Ke, (f = !s) || (f = Qs(s, n.type, n.pendingProps, oo), f !== null ? (n.stateNode = f, xa || (u = Vs(f, n.type, n.pendingProps, u), u !== null && (bo(n, 0).serverProps = u)), it = n, Ke = Vc(f), oo = !1, u = !0) : u = !1, f = !u), f && (i && Ni(n, s), Fr(n))), La(n), s = n.type, u = n.pendingProps, f = e !== null ? e.memoizedProps : null, i = u.children, ue(s, u) ? i = null : f !== null && ue(s, f) && (n.flags |= 32), n.memoizedState !== null && (s = It(e, n, ef, null, null, o), at ? Kt._currentValue = s : Kt._currentValue2 = s), uc(e, n), rn(e, n, i, o), n.child;\n case 6:\n return e === null && ge && (e = n.pendingProps, o = Rt(), e = va(e, o), o = Ke, (i = !o) || (i = Ym(o, n.pendingProps, oo), i !== null ? (n.stateNode = i, it = n, Ke = null, i = !0) : i = !1, i = !i), i && (e && Ni(n, o), Fr(n))), null;\n case 13:\n return dc(e, n, o);\n case 4:\n return Bl(n, n.stateNode.containerInfo), i = n.pendingProps, e === null ? n.child = ou(n, null, i, o) : rn(e, n, i, o), n.child;\n case 11:\n return hf(e, n, n.type, n.pendingProps, o);\n case 7:\n return rn(e, n, n.pendingProps, o), n.child;\n case 8:\n return rn(e, n, n.pendingProps.children, o), n.child;\n case 12:\n return n.flags |= 4, n.flags |= 2048, i = n.stateNode, i.effectDuration = -0, i.passiveEffectDuration = -0, rn(e, n, n.pendingProps.children, o), n.child;\n case 10:\n return i = n.type, s = n.pendingProps, u = s.value, \"value\" in s || Zy || (Zy = !0, console.error(\"The `value` prop is required for the `<Context.Provider>`. Did you misspell it or forget to pass it?\")), Hr(n, i, u), rn(e, n, s.children, o), n.child;\n case 9:\n return s = n.type._context, i = n.pendingProps.children, typeof i != \"function\" && console.error(\"A context consumer was rendered with multiple children, or a child that isn't a function. A context consumer expects a single child that is a function. If you did pass a function, make sure there is no trailing or leading whitespace around it.\"), sr(n), s = Ee(s), i = hg(i, s, void 0), n.flags |= 1, rn(e, n, i, o), n.child;\n case 14:\n return mf(e, n, n.type, n.pendingProps, o);\n case 15:\n return ve(e, n, n.type, n.pendingProps, o);\n case 19:\n return Sf(e, n, o);\n case 31:\n return Nm(e, n, o);\n case 22:\n return lc(e, n, o, n.pendingProps);\n case 24:\n return sr(n), i = Ee(un), e === null ? (s = Eu(), s === null && (s = je, u = Ai(), s.pooledCache = u, Po(u), u !== null && (s.pooledCacheLanes |= o), s = u), n.memoizedState = {\n parent: i,\n cache: s\n }, Au(n), Hr(n, un, s)) : ((e.lanes & o) !== 0 && (ju(e, n), is(n, null, null, o), Oi()), s = e.memoizedState, u = n.memoizedState, s.parent !== i ? (s = {\n parent: i,\n cache: i\n }, n.memoizedState = s, n.lanes === 0 && (n.memoizedState = n.updateQueue.baseState = s), Hr(n, un, i)) : (i = u.cache, Hr(n, un, i), i !== s.cache && Ln(n, [un], o, !0))), rn(e, n, n.pendingProps.children, o), n.child;\n case 29:\n throw n.pendingProps;\n }\n throw Error(\"Unknown unit of work tag (\" + n.tag + \"). This error is likely caused by a bug in React. Please file an issue.\");\n }\n function Lt(e) {\n e.flags |= 4;\n }\n function hc(e) {\n Xr && (e.flags |= 8);\n }\n function zs(e, n) {\n if (e !== null && e.child === n.child) return !1;\n if ((n.flags & 16) !== 0) return !0;\n for (e = n.child; e !== null;) {\n if ((e.flags & 8218) !== 0 || (e.subtreeFlags & 8218) !== 0) return !0;\n e = e.sibling;\n }\n return !1;\n }\n function sa(e, n, o, i) {\n if (Be) for (o = n.child; o !== null;) {\n if (o.tag === 5 || o.tag === 6) bn(e, o.stateNode);else if (!(o.tag === 4 || d && o.tag === 27) && o.child !== null) {\n o.child.return = o, o = o.child;\n continue;\n }\n if (o === n) break;\n for (; o.sibling === null;) {\n if (o.return === null || o.return === n) return;\n o = o.return;\n }\n o.sibling.return = o.return, o = o.sibling;\n } else if (Xr) for (var s = n.child; s !== null;) {\n if (s.tag === 5) {\n var u = s.stateNode;\n o && i && (u = eo(u, s.type, s.memoizedProps)), bn(e, u);\n } else if (s.tag === 6) u = s.stateNode, o && i && (u = sn(u, s.memoizedProps)), bn(e, u);else if (s.tag !== 4) {\n if (s.tag === 22 && s.memoizedState !== null) u = s.child, u !== null && (u.return = s), sa(e, s, !0, !0);else if (s.child !== null) {\n s.child.return = s, s = s.child;\n continue;\n }\n }\n if (s === n) break;\n for (; s.sibling === null;) {\n if (s.return === null || s.return === n) return;\n s = s.return;\n }\n s.sibling.return = s.return, s = s.sibling;\n }\n }\n function $a(e, n, o, i) {\n var s = !1;\n if (Xr) for (var u = n.child; u !== null;) {\n if (u.tag === 5) {\n var f = u.stateNode;\n o && i && (f = eo(f, u.type, u.memoizedProps)), Mc(e, f);\n } else if (u.tag === 6) f = u.stateNode, o && i && (f = sn(f, u.memoizedProps)), Mc(e, f);else if (u.tag !== 4) {\n if (u.tag === 22 && u.memoizedState !== null) s = u.child, s !== null && (s.return = u), $a(e, u, !0, !0), s = !0;else if (u.child !== null) {\n u.child.return = u, u = u.child;\n continue;\n }\n }\n if (u === n) break;\n for (; u.sibling === null;) {\n if (u.return === null || u.return === n) return s;\n u = u.return;\n }\n u.sibling.return = u.return, u = u.sibling;\n }\n return s;\n }\n function kf(e, n) {\n if (Xr && zs(e, n)) {\n e = n.stateNode;\n var o = e.containerInfo,\n i = Oc();\n $a(i, n, !1, !1), e.pendingChildren = i, Lt(n), hn(o, i);\n }\n }\n function Cs(e, n, o, i) {\n if (Be) e.memoizedProps !== i && Lt(n);else if (Xr) {\n var s = e.stateNode,\n u = e.memoizedProps;\n if ((e = zs(e, n)) || u !== i) {\n var f = Rt();\n u = Qh(s, o, u, i, !e, null), u === s ? n.stateNode = s : (hc(n), Ue(u, o, i, f) && Lt(n), n.stateNode = u, e && sa(u, n, !1, !1));\n } else n.stateNode = s;\n }\n }\n function mc(e, n, o, i, s) {\n if ((e.mode & 32) !== Z && (o === null ? sl(n, i) : ul(n, o, i))) {\n if (e.flags |= 16777216, (s & 335544128) === s || Hc(n, i)) if (ha(e.stateNode, n, i)) e.flags |= 8192;else if (Sh()) e.flags |= 8192;else throw ru = im, gg;\n } else e.flags &= -16777217;\n }\n function Io(e, n) {\n if (a(n)) {\n if (e.flags |= 16777216, !l(n)) if (Sh()) e.flags |= 8192;else throw ru = im, gg;\n } else e.flags &= -16777217;\n }\n function Zi(e, n) {\n n !== null && (e.flags |= 4), e.flags & 16384 && (n = e.tag !== 22 ? ut() : 536870912, e.lanes |= n, uu |= n);\n }\n function Va(e, n) {\n if (!ge) switch (e.tailMode) {\n case \"hidden\":\n n = e.tail;\n for (var o = null; n !== null;) n.alternate !== null && (o = n), n = n.sibling;\n o === null ? e.tail = null : o.sibling = null;\n break;\n case \"collapsed\":\n o = e.tail;\n for (var i = null; o !== null;) o.alternate !== null && (i = o), o = o.sibling;\n i === null ? n || e.tail === null ? e.tail = null : e.tail.sibling = null : i.sibling = null;\n }\n }\n function Te(e) {\n var n = e.alternate !== null && e.alternate.child === e.child,\n o = 0,\n i = 0;\n if (n) {\n if ((e.mode & 2) !== Z) {\n for (var s = e.selfBaseDuration, u = e.child; u !== null;) o |= u.lanes | u.childLanes, i |= u.subtreeFlags & 65011712, i |= u.flags & 65011712, s += u.treeBaseDuration, u = u.sibling;\n e.treeBaseDuration = s;\n } else for (s = e.child; s !== null;) o |= s.lanes | s.childLanes, i |= s.subtreeFlags & 65011712, i |= s.flags & 65011712, s.return = e, s = s.sibling;\n } else if ((e.mode & 2) !== Z) {\n s = e.actualDuration, u = e.selfBaseDuration;\n for (var f = e.child; f !== null;) o |= f.lanes | f.childLanes, i |= f.subtreeFlags, i |= f.flags, s += f.actualDuration, u += f.treeBaseDuration, f = f.sibling;\n e.actualDuration = s, e.treeBaseDuration = u;\n } else for (s = e.child; s !== null;) o |= s.lanes | s.childLanes, i |= s.subtreeFlags, i |= s.flags, s.return = e, s = s.sibling;\n return e.subtreeFlags |= i, e.childLanes = o, n;\n }\n function wf(e, n, o) {\n var i = n.pendingProps;\n switch (Pu(n), n.tag) {\n case 16:\n case 15:\n case 0:\n case 11:\n case 7:\n case 8:\n case 12:\n case 9:\n case 14:\n return Te(n), null;\n case 1:\n return Te(n), null;\n case 3:\n return o = n.stateNode, i = null, e !== null && (i = e.memoizedState.cache), n.memoizedState.cache !== i && (n.flags |= 2048), lr(un, n), Ia(n), o.pendingContext && (o.context = o.pendingContext, o.pendingContext = null), (e === null || e.child === null) && (ko(n) ? (xu(), Lt(n)) : e === null || e.memoizedState.isDehydrated && (n.flags & 256) === 0 || (n.flags |= 1024, $l())), kf(e, n), Te(n), null;\n case 26:\n if (Re) {\n var s = n.type,\n u = n.memoizedState;\n return e === null ? (Lt(n), u !== null ? (Te(n), Io(n, u)) : (Te(n), mc(n, s, null, i, o))) : u ? u !== e.memoizedState ? (Lt(n), Te(n), Io(n, u)) : (Te(n), n.flags &= -16777217) : (u = e.memoizedProps, Be ? u !== i && Lt(n) : Cs(e, n, s, i), Te(n), mc(n, s, u, i, o)), null;\n }\n case 27:\n if (d) {\n if (Na(n), o = pt(Sl.current), s = n.type, e !== null && n.stateNode != null) Be ? e.memoizedProps !== i && Lt(n) : Cs(e, n, s, i);else {\n if (!i) {\n if (n.stateNode === null) throw Error(\"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\");\n return Te(n), null;\n }\n e = Rt(), ko(n) ? So(n, e) : (e = h(s, i, o, e, !0), n.stateNode = e, Lt(n));\n }\n return Te(n), null;\n }\n case 5:\n if (Na(n), s = n.type, e !== null && n.stateNode != null) Cs(e, n, s, i);else {\n if (!i) {\n if (n.stateNode === null) throw Error(\"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\");\n return Te(n), null;\n }\n if (u = Rt(), ko(n)) So(n, u), ii(n.stateNode, s, i, u) && (n.flags |= 64);else {\n var f = pt(Sl.current);\n f = Fc(s, i, f, u, n), hc(n), sa(f, n, !1, !1), n.stateNode = f, Ue(f, s, i, u) && Lt(n);\n }\n }\n return Te(n), mc(n, n.type, e === null ? null : e.memoizedProps, n.pendingProps, o), null;\n case 6:\n if (e && n.stateNode != null) o = e.memoizedProps, Be ? o !== i && Lt(n) : Xr && (o !== i ? (e = pt(Sl.current), o = Rt(), hc(n), n.stateNode = Do(i, e, o, n)) : n.stateNode = e.stateNode);else {\n if (typeof i != \"string\" && n.stateNode === null) throw Error(\"We must have new props for new mounts. This error is likely caused by a bug in React. Please file an issue.\");\n if (e = pt(Sl.current), o = Rt(), ko(n)) {\n if (!qn) throw Error(\"Expected prepareToHydrateHostTextInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.\");\n if (e = n.stateNode, o = n.memoizedProps, s = !xa, i = null, u = it, u !== null) switch (u.tag) {\n case 3:\n s && (s = Zf(e, o, i), s !== null && (bo(n, 0).serverProps = s));\n break;\n case 27:\n case 5:\n i = u.memoizedProps, s && (s = Zf(e, o, i), s !== null && (bo(n, 0).serverProps = s));\n }\n he(e, o, n, i) || Fr(n, !0);\n } else hc(n), n.stateNode = Do(i, e, o, n);\n }\n return Te(n), null;\n case 31:\n if (o = n.memoizedState, e === null || e.memoizedState !== null) {\n if (i = ko(n), o !== null) {\n if (e === null) {\n if (!i) throw Error(\"A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React.\");\n if (!qn) throw Error(\"Expected prepareToHydrateHostActivityInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.\");\n if (e = n.memoizedState, e = e !== null ? e.dehydrated : null, !e) throw Error(\"Expected to have a hydrated activity instance. This error is likely caused by a bug in React. Please file an issue.\");\n _e(e, n), Te(n), (n.mode & 2) !== Z && o !== null && (e = n.child, e !== null && (n.treeBaseDuration -= e.treeBaseDuration));\n } else xu(), wo(), (n.flags & 128) === 0 && (o = n.memoizedState = null), n.flags |= 4, Te(n), (n.mode & 2) !== Z && o !== null && (e = n.child, e !== null && (n.treeBaseDuration -= e.treeBaseDuration));\n e = !1;\n } else o = $l(), e !== null && e.memoizedState !== null && (e.memoizedState.hydrationErrors = o), e = !0;\n if (!e) return n.flags & 256 ? (et(n), n) : (et(n), null);\n if ((n.flags & 128) !== 0) throw Error(\"Client rendering an Activity suspended it again. This is a bug in React.\");\n }\n return Te(n), null;\n case 13:\n if (i = n.memoizedState, e === null || e.memoizedState !== null && e.memoizedState.dehydrated !== null) {\n if (s = i, u = ko(n), s !== null && s.dehydrated !== null) {\n if (e === null) {\n if (!u) throw Error(\"A dehydrated suspense component was completed without a hydrated node. This is probably a bug in React.\");\n if (!qn) throw Error(\"Expected prepareToHydrateHostSuspenseInstance() to never be called. This error is likely caused by a bug in React. Please file an issue.\");\n if (u = n.memoizedState, u = u !== null ? u.dehydrated : null, !u) throw Error(\"Expected to have a hydrated suspense instance. This error is likely caused by a bug in React. Please file an issue.\");\n Ht(u, n), Te(n), (n.mode & 2) !== Z && s !== null && (s = n.child, s !== null && (n.treeBaseDuration -= s.treeBaseDuration));\n } else xu(), wo(), (n.flags & 128) === 0 && (s = n.memoizedState = null), n.flags |= 4, Te(n), (n.mode & 2) !== Z && s !== null && (s = n.child, s !== null && (n.treeBaseDuration -= s.treeBaseDuration));\n s = !1;\n } else s = $l(), e !== null && e.memoizedState !== null && (e.memoizedState.hydrationErrors = s), s = !0;\n if (!s) return n.flags & 256 ? (et(n), n) : (et(n), null);\n }\n return et(n), (n.flags & 128) !== 0 ? (n.lanes = o, (n.mode & 2) !== Z && Zl(n), n) : (o = i !== null, e = e !== null && e.memoizedState !== null, o && (i = n.child, s = null, i.alternate !== null && i.alternate.memoizedState !== null && i.alternate.memoizedState.cachePool !== null && (s = i.alternate.memoizedState.cachePool.pool), u = null, i.memoizedState !== null && i.memoizedState.cachePool !== null && (u = i.memoizedState.cachePool.pool), u !== s && (i.flags |= 2048)), o !== e && o && (n.child.flags |= 8192), Zi(n, n.updateQueue), Te(n), (n.mode & 2) !== Z && o && (e = n.child, e !== null && (n.treeBaseDuration -= e.treeBaseDuration)), null);\n case 4:\n return Ia(n), kf(e, n), e === null && qe(n.stateNode.containerInfo), Te(n), null;\n case 10:\n return lr(n.type, n), Te(n), null;\n case 19:\n if (Ze(Sn, n), i = n.memoizedState, i === null) return Te(n), null;\n if (s = (n.flags & 128) !== 0, u = i.rendering, u === null) {\n if (s) Va(i, !1);else {\n if (nn !== ki || e !== null && (e.flags & 128) !== 0) for (e = n.child; e !== null;) {\n if (u = us(e), u !== null) {\n for (n.flags |= 128, Va(i, !1), e = u.updateQueue, n.updateQueue = e, Zi(n, e), n.subtreeFlags = 0, e = o, o = n.child; o !== null;) dn(o, e), o = o.sibling;\n return pe(Sn, Sn.current & md | hp, n), ge && ho(n, i.treeForkCount), n.child;\n }\n e = e.sibling;\n }\n i.tail !== null && me() > Pp && (n.flags |= 128, s = !0, Va(i, !1), n.lanes = 4194304);\n }\n } else {\n if (!s) if (e = us(u), e !== null) {\n if (n.flags |= 128, s = !0, e = e.updateQueue, n.updateQueue = e, Zi(n, e), Va(i, !0), i.tail === null && i.tailMode === \"hidden\" && !u.alternate && !ge) return Te(n), null;\n } else 2 * me() - i.renderingStartTime > Pp && o !== 536870912 && (n.flags |= 128, s = !0, Va(i, !1), n.lanes = 4194304);\n i.isBackwards ? (u.sibling = n.child, n.child = u) : (e = i.last, e !== null ? e.sibling = u : n.child = u, i.last = u);\n }\n return i.tail !== null ? (e = i.tail, i.rendering = e, i.tail = e.sibling, i.renderingStartTime = me(), e.sibling = null, o = Sn.current, o = s ? o & md | hp : o & md, pe(Sn, o, n), ge && ho(n, i.treeForkCount), e) : (Te(n), null);\n case 22:\n case 23:\n return et(n), ss(n), i = n.memoizedState !== null, e !== null ? e.memoizedState !== null !== i && (n.flags |= 8192) : i && (n.flags |= 8192), i ? (o & 536870912) !== 0 && (n.flags & 128) === 0 && (Te(n), n.subtreeFlags & 6 && (n.flags |= 8192)) : Te(n), o = n.updateQueue, o !== null && Zi(n, o.retryQueue), o = null, e !== null && e.memoizedState !== null && e.memoizedState.cachePool !== null && (o = e.memoizedState.cachePool.pool), i = null, n.memoizedState !== null && n.memoizedState.cachePool !== null && (i = n.memoizedState.cachePool.pool), i !== o && (n.flags |= 2048), e !== null && Ze(nu, n), null;\n case 24:\n return o = null, e !== null && (o = e.memoizedState.cache), n.memoizedState.cache !== o && (n.flags |= 2048), lr(un, n), Te(n), null;\n case 25:\n return null;\n case 30:\n return null;\n }\n throw Error(\"Unknown unit of work tag (\" + n.tag + \"). This error is likely caused by a bug in React. Please file an issue.\");\n }\n function ua(e, n) {\n switch (Pu(n), n.tag) {\n case 1:\n return e = n.flags, e & 65536 ? (n.flags = e & -65537 | 128, (n.mode & 2) !== Z && Zl(n), n) : null;\n case 3:\n return lr(un, n), Ia(n), e = n.flags, (e & 65536) !== 0 && (e & 128) === 0 ? (n.flags = e & -65537 | 128, n) : null;\n case 26:\n case 27:\n case 5:\n return Na(n), null;\n case 31:\n if (n.memoizedState !== null) {\n if (et(n), n.alternate === null) throw Error(\"Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue.\");\n wo();\n }\n return e = n.flags, e & 65536 ? (n.flags = e & -65537 | 128, (n.mode & 2) !== Z && Zl(n), n) : null;\n case 13:\n if (et(n), e = n.memoizedState, e !== null && e.dehydrated !== null) {\n if (n.alternate === null) throw Error(\"Threw in newly mounted dehydrated component. This is likely a bug in React. Please file an issue.\");\n wo();\n }\n return e = n.flags, e & 65536 ? (n.flags = e & -65537 | 128, (n.mode & 2) !== Z && Zl(n), n) : null;\n case 19:\n return Ze(Sn, n), null;\n case 4:\n return Ia(n), null;\n case 10:\n return lr(n.type, n), null;\n case 22:\n case 23:\n return et(n), ss(n), e !== null && Ze(nu, n), e = n.flags, e & 65536 ? (n.flags = e & -65537 | 128, (n.mode & 2) !== Z && Zl(n), n) : null;\n case 24:\n return lr(un, n), null;\n case 25:\n return null;\n default:\n return null;\n }\n }\n function gc(e, n) {\n switch (Pu(n), n.tag) {\n case 3:\n lr(un, n), Ia(n);\n break;\n case 26:\n case 27:\n case 5:\n Na(n);\n break;\n case 4:\n Ia(n);\n break;\n case 31:\n n.memoizedState !== null && et(n);\n break;\n case 13:\n et(n);\n break;\n case 19:\n Ze(Sn, n);\n break;\n case 10:\n lr(n.type, n);\n break;\n case 22:\n case 23:\n et(n), ss(n), e !== null && Ze(nu, n);\n break;\n case 24:\n lr(un, n);\n }\n }\n function $r(e) {\n return (e.mode & 2) !== Z;\n }\n function Pf(e, n) {\n $r(e) ? (hr(), ca(n, e), pr()) : ca(n, e);\n }\n function xf(e, n, o) {\n $r(e) ? (hr(), M(o, e, n), pr()) : M(o, e, n);\n }\n function ca(e, n) {\n try {\n var o = n.updateQueue,\n i = o !== null ? o.lastEffect : null;\n if (i !== null) {\n var s = i.next;\n o = s;\n do {\n if ((o.tag & e) === e && (i = void 0, (e & Wt) !== sm && (zd = !0), i = B(n, Bb, o), (e & Wt) !== sm && (zd = !1), i !== void 0 && typeof i != \"function\")) {\n var u = void 0;\n u = (o.tag & Rr) !== 0 ? \"useLayoutEffect\" : (o.tag & Wt) !== 0 ? \"useInsertionEffect\" : \"useEffect\";\n var f = void 0;\n f = i === null ? \" You returned null. If your effect does not require clean up, return undefined (or nothing).\" : typeof i.then == \"function\" ? `\n\nIt looks like you wrote ` + u + `(async () => ...) or returned a Promise. Instead, write the async function inside your effect and call it immediately:\n\n` + u + `(() => {\n async function fetchData() {\n // You can await here\n const response = await MyAPI.getData(someId);\n // ...\n }\n fetchData();\n}, [someId]); // Or [] if effect doesn't need props or state\n\nLearn more about data fetching with Hooks: https://react.dev/link/hooks-data-fetching` : \" You returned: \" + i, B(n, function (p, g) {\n console.error(\"%s must not return anything besides a function, which is used for clean-up.%s\", p, g);\n }, u, f);\n }\n o = o.next;\n } while (o !== s);\n }\n } catch (p) {\n Se(n, n.return, p);\n }\n }\n function M(e, n, o) {\n try {\n var i = n.updateQueue,\n s = i !== null ? i.lastEffect : null;\n if (s !== null) {\n var u = s.next;\n i = u;\n do {\n if ((i.tag & e) === e) {\n var f = i.inst,\n p = f.destroy;\n p !== void 0 && (f.destroy = void 0, (e & Wt) !== sm && (zd = !0), s = n, B(s, Ob, s, o, p), (e & Wt) !== sm && (zd = !1));\n }\n i = i.next;\n } while (i !== u);\n }\n } catch (g) {\n Se(n, n.return, g);\n }\n }\n function Yp(e, n) {\n $r(e) ? (hr(), ca(n, e), pr()) : ca(n, e);\n }\n function zf(e, n, o) {\n $r(e) ? (hr(), M(o, e, n), pr()) : M(o, e, n);\n }\n function Cf(e) {\n var n = e.updateQueue;\n if (n !== null) {\n var o = e.stateNode;\n e.type.defaultProps || \"ref\" in e.memoizedProps || vd || (o.props !== e.memoizedProps && console.error(\"Expected %s props to match memoized props before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\", G(e) || \"instance\"), o.state !== e.memoizedState && console.error(\"Expected %s state to match memoized state before processing the update queue. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\", G(e) || \"instance\"));\n try {\n B(e, Xd, n, o);\n } catch (i) {\n Se(e, e.return, i);\n }\n }\n }\n function Ts(e, n, o) {\n return e.getSnapshotBeforeUpdate(n, o);\n }\n function Hm(e, n) {\n var o = n.memoizedProps,\n i = n.memoizedState;\n n = e.stateNode, e.type.defaultProps || \"ref\" in e.memoizedProps || vd || (n.props !== e.memoizedProps && console.error(\"Expected %s props to match memoized props before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\", G(e) || \"instance\"), n.state !== e.memoizedState && console.error(\"Expected %s state to match memoized state before getSnapshotBeforeUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\", G(e) || \"instance\"));\n try {\n var s = Mr(e.type, o),\n u = B(e, Ts, n, s, i);\n o = Yy, u !== void 0 || o.has(e.type) || (o.add(e.type), B(e, function () {\n console.error(\"%s.getSnapshotBeforeUpdate(): A snapshot value (or null) must be returned. You have returned undefined.\", G(e));\n })), n.__reactInternalSnapshotBeforeUpdate = u;\n } catch (f) {\n Se(e, e.return, f);\n }\n }\n function Xp(e, n, o) {\n o.props = Mr(e.type, e.memoizedProps), o.state = e.memoizedState, $r(e) ? (hr(), B(e, gy, e, n, o), pr()) : B(e, gy, e, n, o);\n }\n function Am(e) {\n var n = e.ref;\n if (n !== null) {\n switch (e.tag) {\n case 26:\n case 27:\n case 5:\n var o = ot(e.stateNode);\n break;\n case 30:\n o = e.stateNode;\n break;\n default:\n o = e.stateNode;\n }\n if (typeof n == \"function\") {\n if ($r(e)) try {\n hr(), e.refCleanup = n(o);\n } finally {\n pr();\n } else e.refCleanup = n(o);\n } else typeof n == \"string\" ? console.error(\"String refs are no longer supported.\") : n.hasOwnProperty(\"current\") || console.error(\"Unexpected ref object provided for %s. Use either a ref-setter function or React.createRef().\", G(e)), n.current = o;\n }\n }\n function _s(e, n) {\n try {\n B(e, Am, e);\n } catch (o) {\n Se(e, n, o);\n }\n }\n function Vr(e, n) {\n var o = e.ref,\n i = e.refCleanup;\n if (o !== null) if (typeof i == \"function\") try {\n if ($r(e)) try {\n hr(), B(e, i);\n } finally {\n pr(e);\n } else B(e, i);\n } catch (s) {\n Se(e, n, s);\n } finally {\n e.refCleanup = null, e = e.alternate, e != null && (e.refCleanup = null);\n } else if (typeof o == \"function\") try {\n if ($r(e)) try {\n hr(), B(e, o, null);\n } finally {\n pr(e);\n } else B(e, o, null);\n } catch (s) {\n Se(e, n, s);\n } else o.current = null;\n }\n function yc(e, n, o, i) {\n var s = e.memoizedProps,\n u = s.id,\n f = s.onCommit;\n s = s.onRender, n = n === null ? \"mount\" : \"update\", em && (n = \"nested-update\"), typeof s == \"function\" && s(u, n, e.actualDuration, e.treeBaseDuration, e.actualStartTime, o), typeof f == \"function\" && f(u, n, i, o);\n }\n function Kp(e, n, o, i) {\n var s = e.memoizedProps;\n e = s.id, s = s.onPostCommit, n = n === null ? \"mount\" : \"update\", em && (n = \"nested-update\"), typeof s == \"function\" && s(e, n, i, o);\n }\n function Rs(e) {\n var n = e.type,\n o = e.memoizedProps,\n i = e.stateNode;\n try {\n B(e, Ie, i, n, o, e);\n } catch (s) {\n Se(e, e.return, s);\n }\n }\n function bc(e, n, o) {\n try {\n B(e, pn, e.stateNode, e.type, o, n, e);\n } catch (i) {\n Se(e, e.return, i);\n }\n }\n function eh(e) {\n return e.tag === 5 || e.tag === 3 || (Re ? e.tag === 26 : !1) || (d ? e.tag === 27 && j(e.type) : !1) || e.tag === 4;\n }\n function Tf(e) {\n e: for (;;) {\n for (; e.sibling === null;) {\n if (e.return === null || eh(e.return)) return null;\n e = e.return;\n }\n for (e.sibling.return = e.return, e = e.sibling; e.tag !== 5 && e.tag !== 6 && e.tag !== 18;) {\n if (d && e.tag === 27 && j(e.type) || e.flags & 2 || e.child === null || e.tag === 4) continue e;\n e.child.return = e, e = e.child;\n }\n if (!(e.flags & 2)) return e.stateNode;\n }\n }\n function Lo(e, n, o) {\n var i = e.tag;\n if (i === 5 || i === 6) e = e.stateNode, n ? dl(o, e, n) : Wo(o, e);else if (i !== 4 && (d && i === 27 && j(e.type) && (o = e.stateNode, n = null), e = e.child, e !== null)) for (Lo(e, n, o), e = e.sibling; e !== null;) Lo(e, n, o), e = e.sibling;\n }\n function qt(e, n, o) {\n var i = e.tag;\n if (i === 5 || i === 6) e = e.stateNode, n ? Uc(o, e, n) : ln(o, e);else if (i !== 4 && (d && i === 27 && j(e.type) && (o = e.stateNode), e = e.child, e !== null)) for (qt(e, n, o), e = e.sibling; e !== null;) qt(e, n, o), e = e.sibling;\n }\n function $n(e) {\n for (var n, o = e.return; o !== null;) {\n if (eh(o)) {\n n = o;\n break;\n }\n o = o.return;\n }\n if (Be) {\n if (n == null) throw Error(\"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\");\n switch (n.tag) {\n case 27:\n if (d) {\n n = n.stateNode, o = Tf(e), qt(e, o, n);\n break;\n }\n case 5:\n o = n.stateNode, n.flags & 32 && (fl(o), n.flags &= -33), n = Tf(e), qt(e, n, o);\n break;\n case 3:\n case 4:\n n = n.stateNode.containerInfo, o = Tf(e), Lo(e, o, n);\n break;\n default:\n throw Error(\"Invalid host parent fiber. This error is likely caused by a bug in React. Please file an issue.\");\n }\n }\n }\n function Sr(e, n, o) {\n e = e.containerInfo;\n try {\n B(n, Qc, e, o);\n } catch (i) {\n Se(n, n.return, i);\n }\n }\n function Hn(e) {\n var n = e.stateNode,\n o = e.memoizedProps;\n try {\n B(e, y, e.type, o, n, e);\n } catch (i) {\n Se(e, e.return, i);\n }\n }\n function nh(e, n) {\n return n.tag === 31 ? (n = n.memoizedState, e.memoizedState !== null && n === null) : n.tag === 13 ? (e = e.memoizedState, n = n.memoizedState, e !== null && e.dehydrated !== null && (n === null || n.dehydrated === null)) : n.tag === 3 ? e.memoizedState.isDehydrated && (n.flags & 256) === 0 : !1;\n }\n function jm(e, n) {\n for (Ws(e.containerInfo), Gn = n; Gn !== null;) if (e = Gn, n = e.child, (e.subtreeFlags & 1028) !== 0 && n !== null) n.return = e, Gn = n;else for (; Gn !== null;) {\n n = e = Gn;\n var o = n.alternate,\n i = n.flags;\n switch (n.tag) {\n case 0:\n if ((i & 4) !== 0 && (n = n.updateQueue, n = n !== null ? n.events : null, n !== null)) for (o = 0; o < n.length; o++) i = n[o], i.ref.impl = i.nextImpl;\n break;\n case 11:\n case 15:\n break;\n case 1:\n (i & 1024) !== 0 && o !== null && Hm(n, o);\n break;\n case 3:\n (i & 1024) !== 0 && Be && qf(n.stateNode.containerInfo);\n break;\n case 5:\n case 26:\n case 27:\n case 6:\n case 4:\n case 17:\n break;\n default:\n if ((i & 1024) !== 0) throw Error(\"This unit of work tag should not have side-effects. This error is likely caused by a bug in React. Please file an issue.\");\n }\n if (n = e.sibling, n !== null) {\n n.return = e.return, Gn = n;\n break;\n }\n Gn = e.return;\n }\n }\n function yn(e, n, o) {\n var i = Xn(),\n s = Dr(),\n u = dr(),\n f = fr(),\n p = o.flags;\n switch (o.tag) {\n case 0:\n case 11:\n case 15:\n rt(e, o), p & 4 && Pf(o, Rr | lo);\n break;\n case 1:\n if (rt(e, o), p & 4) if (e = o.stateNode, n === null) o.type.defaultProps || \"ref\" in o.memoizedProps || vd || (e.props !== o.memoizedProps && console.error(\"Expected %s props to match memoized props before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\", G(o) || \"instance\"), e.state !== o.memoizedState && console.error(\"Expected %s state to match memoized state before componentDidMount. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\", G(o) || \"instance\")), $r(o) ? (hr(), B(o, mg, o, e), pr()) : B(o, mg, o, e);else {\n var g = Mr(o.type, n.memoizedProps);\n n = n.memoizedState, o.type.defaultProps || \"ref\" in o.memoizedProps || vd || (e.props !== o.memoizedProps && console.error(\"Expected %s props to match memoized props before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.props`. Please file an issue.\", G(o) || \"instance\"), e.state !== o.memoizedState && console.error(\"Expected %s state to match memoized state before componentDidUpdate. This might either be because of a bug in React, or because a component reassigns its own `this.state`. Please file an issue.\", G(o) || \"instance\")), $r(o) ? (hr(), B(o, py, o, e, g, n, e.__reactInternalSnapshotBeforeUpdate), pr()) : B(o, py, o, e, g, n, e.__reactInternalSnapshotBeforeUpdate);\n }\n p & 64 && Cf(o), p & 512 && _s(o, o.return);\n break;\n case 3:\n if (n = jr(), rt(e, o), p & 64 && (p = o.updateQueue, p !== null)) {\n if (g = null, o.child !== null) switch (o.child.tag) {\n case 27:\n case 5:\n g = ot(o.child.stateNode);\n break;\n case 1:\n g = o.child.stateNode;\n }\n try {\n B(o, Xd, p, g);\n } catch (T) {\n Se(o, o.return, T);\n }\n }\n e.effectDuration += ql(n);\n break;\n case 27:\n d && n === null && p & 4 && Hn(o);\n case 26:\n case 5:\n if (rt(e, o), n === null) {\n if (p & 4) Rs(o);else if (p & 64) {\n e = o.type, n = o.memoizedProps, g = o.stateNode;\n try {\n B(o, Gf, g, e, n, o);\n } catch (T) {\n Se(o, o.return, T);\n }\n }\n }\n p & 512 && _s(o, o.return);\n break;\n case 12:\n if (p & 4) {\n p = jr(), rt(e, o), e = o.stateNode, e.effectDuration += ji(p);\n try {\n B(o, yc, o, n, wl, e.effectDuration);\n } catch (T) {\n Se(o, o.return, T);\n }\n } else rt(e, o);\n break;\n case 31:\n rt(e, o), p & 4 && th(e, o);\n break;\n case 13:\n rt(e, o), p & 4 && rh(e, o), p & 64 && (e = o.memoizedState, e !== null && (e = e.dehydrated, e !== null && (p = Nh.bind(null, o), mn(e, p))));\n break;\n case 22:\n if (p = o.memoizedState !== null || Si, !p) {\n n = n !== null && n.memoizedState !== null || Tn, g = Si;\n var S = Tn;\n Si = p, (Tn = n) && !S ? (Gr(e, o, (o.subtreeFlags & 8772) !== 0), (o.mode & 2) !== Z && 0 <= $ && 0 <= q && .05 < q - $ && _i(o, $, q)) : rt(e, o), Si = g, Tn = S;\n }\n break;\n case 30:\n break;\n default:\n rt(e, o);\n }\n (o.mode & 2) !== Z && 0 <= $ && 0 <= q && ((cn || .05 < en) && Un(o, $, q, en, Je), o.alternate === null && o.return !== null && o.return.alternate !== null && .05 < q - $ && (nh(o.return.alternate, o.return) || Ot(o, $, q, \"Mount\"))), mt(i), cr(s), Je = u, cn = f;\n }\n function qr(e) {\n var n = e.alternate;\n n !== null && (e.alternate = null, qr(n)), e.child = null, e.deletions = null, e.sibling = null, e.tag === 5 && (n = e.stateNode, n !== null && Qf(n)), e.stateNode = null, e._debugOwner = null, e.return = null, e.dependencies = null, e.memoizedProps = null, e.memoizedState = null, e.pendingProps = null, e.stateNode = null, e.updateQueue = null;\n }\n function kr(e, n, o) {\n for (o = o.child; o !== null;) _f(e, n, o), o = o.sibling;\n }\n function _f(e, n, o) {\n if (zt && typeof zt.onCommitFiberUnmount == \"function\") try {\n zt.onCommitFiberUnmount(td, o);\n } catch (S) {\n ka || (ka = !0, console.error(\"React instrumentation encountered an error: %o\", S));\n }\n var i = Xn(),\n s = Dr(),\n u = dr(),\n f = fr();\n switch (o.tag) {\n case 26:\n if (Re) {\n Tn || Vr(o, n), kr(e, n, o), o.memoizedState ? ed(o.memoizedState) : o.stateNode && nd(o.stateNode);\n break;\n }\n case 27:\n if (d) {\n Tn || Vr(o, n);\n var p = _n,\n g = nr;\n j(o.type) && (_n = o.stateNode, nr = !1), kr(e, n, o), B(o, R, o.stateNode), _n = p, nr = g;\n break;\n }\n case 5:\n Tn || Vr(o, n);\n case 6:\n if (Be) {\n if (p = _n, g = nr, _n = null, kr(e, n, o), _n = p, nr = g, _n !== null) if (nr) try {\n B(o, Bc, _n, o.stateNode);\n } catch (S) {\n Se(o, n, S);\n } else try {\n B(o, oi, _n, o.stateNode);\n } catch (S) {\n Se(o, n, S);\n }\n } else kr(e, n, o);\n break;\n case 18:\n Be && _n !== null && (nr ? hl(_n, o.stateNode) : At(_n, o.stateNode));\n break;\n case 4:\n Be ? (p = _n, g = nr, _n = o.stateNode.containerInfo, nr = !0, kr(e, n, o), _n = p, nr = g) : (Xr && Sr(o.stateNode, o, Oc()), kr(e, n, o));\n break;\n case 0:\n case 11:\n case 14:\n case 15:\n M(Wt, o, n), Tn || xf(o, n, Rr), kr(e, n, o);\n break;\n case 1:\n Tn || (Vr(o, n), p = o.stateNode, typeof p.componentWillUnmount == \"function\" && Xp(o, n, p)), kr(e, n, o);\n break;\n case 21:\n kr(e, n, o);\n break;\n case 22:\n Tn = (p = Tn) || o.memoizedState !== null, kr(e, n, o), Tn = p;\n break;\n default:\n kr(e, n, o);\n }\n (o.mode & 2) !== Z && 0 <= $ && 0 <= q && (cn || .05 < en) && Un(o, $, q, en, Je), mt(i), cr(s), Je = u, cn = f;\n }\n function th(e, n) {\n if (qn && n.memoizedState === null && (e = n.alternate, e !== null && (e = e.memoizedState, e !== null))) {\n e = e.dehydrated;\n try {\n B(n, Xe, e);\n } catch (o) {\n Se(n, n.return, o);\n }\n }\n }\n function rh(e, n) {\n if (qn && n.memoizedState === null && (e = n.alternate, e !== null && (e = e.memoizedState, e !== null && (e = e.dehydrated, e !== null)))) try {\n B(n, ba, e);\n } catch (o) {\n Se(n, n.return, o);\n }\n }\n function Dm(e) {\n switch (e.tag) {\n case 31:\n case 13:\n case 19:\n var n = e.stateNode;\n return n === null && (n = e.stateNode = new Xy()), n;\n case 22:\n return e = e.stateNode, n = e._retryCache, n === null && (n = e._retryCache = new Xy()), n;\n default:\n throw Error(\"Unexpected Suspense handler tag (\" + e.tag + \"). This is a bug in React.\");\n }\n }\n function Yi(e, n) {\n var o = Dm(e);\n n.forEach(function (i) {\n if (!o.has(i)) {\n if (o.add(i), wa) if (Sd !== null && kd !== null) nl(kd, Sd);else throw Error(\"Expected finished root and lanes to be set. This is a bug in React.\");\n var s = $m.bind(null, e, i);\n i.then(s, s);\n }\n });\n }\n function An(e, n) {\n var o = n.deletions;\n if (o !== null) for (var i = 0; i < o.length; i++) {\n var s = e,\n u = n,\n f = o[i],\n p = Xn();\n if (Be) {\n var g = u;\n e: for (; g !== null;) {\n switch (g.tag) {\n case 27:\n if (d) {\n if (j(g.type)) {\n _n = g.stateNode, nr = !1;\n break e;\n }\n break;\n }\n case 5:\n _n = g.stateNode, nr = !1;\n break e;\n case 3:\n case 4:\n _n = g.stateNode.containerInfo, nr = !0;\n break e;\n }\n g = g.return;\n }\n if (_n === null) throw Error(\"Expected to find a host parent. This error is likely caused by a bug in React. Please file an issue.\");\n _f(s, u, f), _n = null, nr = !1;\n } else _f(s, u, f);\n (f.mode & 2) !== Z && 0 <= $ && 0 <= q && .05 < q - $ && Ot(f, $, q, \"Unmount\"), mt(p), s = f, u = s.alternate, u !== null && (u.return = null), s.return = null;\n }\n if (n.subtreeFlags & 13886) for (n = n.child; n !== null;) oh(n, e), n = n.sibling;\n }\n function oh(e, n) {\n var o = Xn(),\n i = Dr(),\n s = dr(),\n u = fr(),\n f = e.alternate,\n p = e.flags;\n switch (e.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n An(n, e), Vn(e), p & 4 && (M(Wt | lo, e, e.return), ca(Wt | lo, e), xf(e, e.return, Rr | lo));\n break;\n case 1:\n An(n, e), Vn(e), p & 512 && (Tn || f === null || Vr(f, f.return)), p & 64 && Si && (p = e.updateQueue, p !== null && (f = p.callbacks, f !== null && (n = p.shared.hiddenCallbacks, p.shared.hiddenCallbacks = n === null ? f : n.concat(f))));\n break;\n case 26:\n if (Re) {\n var g = Vo;\n An(n, e), Vn(e), p & 512 && (Tn || f === null || Vr(f, f.return)), p & 4 && (p = f !== null ? f.memoizedState : null, n = e.memoizedState, f === null ? n === null ? e.stateNode === null ? e.stateNode = $h(g, e.type, e.memoizedProps, e) : gl(g, e.type, e.stateNode) : e.stateNode = Kc(g, n, e.memoizedProps) : p !== n ? (p === null ? f.stateNode !== null && nd(f.stateNode) : ed(p), n === null ? gl(g, e.type, e.stateNode) : Kc(g, n, e.memoizedProps)) : n === null && e.stateNode !== null && bc(e, e.memoizedProps, f.memoizedProps));\n break;\n }\n case 27:\n if (d) {\n An(n, e), Vn(e), p & 512 && (Tn || f === null || Vr(f, f.return)), f !== null && p & 4 && bc(e, e.memoizedProps, f.memoizedProps);\n break;\n }\n case 5:\n if (An(n, e), Vn(e), p & 512 && (Tn || f === null || Vr(f, f.return)), Be) {\n if (e.flags & 32) {\n n = e.stateNode;\n try {\n B(e, fl, n);\n } catch (Fe) {\n Se(e, e.return, Fe);\n }\n }\n p & 4 && e.stateNode != null && (n = e.memoizedProps, bc(e, n, f !== null ? f.memoizedProps : n)), p & 1024 && (Rg = !0, e.type !== \"form\" && console.error(\"Unexpected host component type. Expected a form. This is a bug in React.\"));\n } else Xr && e.alternate !== null && (e.alternate.stateNode = e.stateNode);\n break;\n case 6:\n if (An(n, e), Vn(e), p & 4 && Be) {\n if (e.stateNode === null) throw Error(\"This should have a text node initialized. This error is likely caused by a bug in React. Please file an issue.\");\n p = e.memoizedProps, f = f !== null ? f.memoizedProps : p, n = e.stateNode;\n try {\n B(e, ne, n, f, p);\n } catch (Fe) {\n Se(e, e.return, Fe);\n }\n }\n break;\n case 3:\n if (g = jr(), Re) {\n r();\n var S = Vo;\n Vo = Sa(n.containerInfo), An(n, e), Vo = S;\n } else An(n, e);\n if (Vn(e), p & 4) {\n if (Be && qn && f !== null && f.memoizedState.isDehydrated) try {\n B(e, Uo, n.containerInfo);\n } catch (Fe) {\n Se(e, e.return, Fe);\n }\n if (Xr) {\n p = n.containerInfo, f = n.pendingChildren;\n try {\n B(e, Qc, p, f);\n } catch (Fe) {\n Se(e, e.return, Fe);\n }\n }\n }\n Rg && (Rg = !1, ah(e)), n.effectDuration += ql(g);\n break;\n case 4:\n Re ? (f = Vo, Vo = Sa(e.stateNode.containerInfo), An(n, e), Vn(e), Vo = f) : (An(n, e), Vn(e)), p & 4 && Xr && Sr(e.stateNode, e, e.stateNode.pendingChildren);\n break;\n case 12:\n p = jr(), An(n, e), Vn(e), e.stateNode.effectDuration += ji(p);\n break;\n case 31:\n An(n, e), Vn(e), p & 4 && (p = e.updateQueue, p !== null && (e.updateQueue = null, Yi(e, p)));\n break;\n case 13:\n An(n, e), Vn(e), e.child.flags & 8192 && e.memoizedState !== null != (f !== null && f.memoizedState !== null) && (xm = me()), p & 4 && (p = e.updateQueue, p !== null && (e.updateQueue = null, Yi(e, p)));\n break;\n case 22:\n g = e.memoizedState !== null;\n var T = f !== null && f.memoizedState !== null,\n _ = Si,\n I = Tn;\n if (Si = _ || g, Tn = I || T, An(n, e), Tn = I, Si = _, T && !g && !_ && !I && (e.mode & 2) !== Z && 0 <= $ && 0 <= q && .05 < q - $ && _i(e, $, q), Vn(e), p & 8192 && (n = e.stateNode, n._visibility = g ? n._visibility & ~pp : n._visibility | pp, !g || f === null || T || Si || Tn || (qa(e), (e.mode & 2) !== Z && 0 <= $ && 0 <= q && .05 < q - $ && Ot(e, $, q, \"Disconnect\")), Be)) {\n e: if (f = null, Be) for (n = e;;) {\n if (n.tag === 5 || Re && n.tag === 26) {\n if (f === null) {\n T = f = n;\n try {\n S = T.stateNode, g ? B(T, pl, S) : B(T, Os, T.stateNode, T.memoizedProps);\n } catch (Fe) {\n Se(T, T.return, Fe);\n }\n }\n } else if (n.tag === 6) {\n if (f === null) {\n T = n;\n try {\n var O = T.stateNode;\n g ? B(T, Jm, O) : B(T, Mh, O, T.memoizedProps);\n } catch (Fe) {\n Se(T, T.return, Fe);\n }\n }\n } else if (n.tag === 18) {\n if (f === null) {\n T = n;\n try {\n var K = T.stateNode;\n g ? B(T, $s, K) : B(T, xt, T.stateNode);\n } catch (Fe) {\n Se(T, T.return, Fe);\n }\n }\n } else if ((n.tag !== 22 && n.tag !== 23 || n.memoizedState === null || n === e) && n.child !== null) {\n n.child.return = n, n = n.child;\n continue;\n }\n if (n === e) break e;\n for (; n.sibling === null;) {\n if (n.return === null || n.return === e) break e;\n f === n && (f = null), n = n.return;\n }\n f === n && (f = null), n.sibling.return = n.return, n = n.sibling;\n }\n }\n p & 4 && (p = e.updateQueue, p !== null && (f = p.retryQueue, f !== null && (p.retryQueue = null, Yi(e, f))));\n break;\n case 19:\n An(n, e), Vn(e), p & 4 && (p = e.updateQueue, p !== null && (e.updateQueue = null, Yi(e, p)));\n break;\n case 30:\n break;\n case 21:\n break;\n default:\n An(n, e), Vn(e);\n }\n (e.mode & 2) !== Z && 0 <= $ && 0 <= q && ((cn || .05 < en) && Un(e, $, q, en, Je), e.alternate === null && e.return !== null && e.return.alternate !== null && .05 < q - $ && (nh(e.return.alternate, e.return) || Ot(e, $, q, \"Mount\"))), mt(o), cr(i), Je = s, cn = u;\n }\n function Vn(e) {\n var n = e.flags;\n if (n & 2) {\n try {\n B(e, $n, e);\n } catch (o) {\n Se(e, e.return, o);\n }\n e.flags &= -3;\n }\n n & 4096 && (e.flags &= -4097);\n }\n function ah(e) {\n if (e.subtreeFlags & 1024) for (e = e.child; e !== null;) {\n var n = e;\n ah(n), n.tag === 5 && n.flags & 1024 && Bs(n.stateNode), e = e.sibling;\n }\n }\n function rt(e, n) {\n if (n.subtreeFlags & 8772) for (n = n.child; n !== null;) yn(e, n.alternate, n), n = n.sibling;\n }\n function da(e) {\n var n = Xn(),\n o = Dr(),\n i = dr(),\n s = fr();\n switch (e.tag) {\n case 0:\n case 11:\n case 14:\n case 15:\n xf(e, e.return, Rr), qa(e);\n break;\n case 1:\n Vr(e, e.return);\n var u = e.stateNode;\n typeof u.componentWillUnmount == \"function\" && Xp(e, e.return, u), qa(e);\n break;\n case 27:\n d && B(e, R, e.stateNode);\n case 26:\n case 5:\n Vr(e, e.return), qa(e);\n break;\n case 22:\n e.memoizedState === null && qa(e);\n break;\n case 30:\n qa(e);\n break;\n default:\n qa(e);\n }\n (e.mode & 2) !== Z && 0 <= $ && 0 <= q && (cn || .05 < en) && Un(e, $, q, en, Je), mt(n), cr(o), Je = i, cn = s;\n }\n function qa(e) {\n for (e = e.child; e !== null;) da(e), e = e.sibling;\n }\n function ih(e, n, o, i) {\n var s = Xn(),\n u = Dr(),\n f = dr(),\n p = fr(),\n g = o.flags;\n switch (o.tag) {\n case 0:\n case 11:\n case 15:\n Gr(e, o, i), Pf(o, Rr);\n break;\n case 1:\n if (Gr(e, o, i), n = o.stateNode, typeof n.componentDidMount == \"function\" && B(o, mg, o, n), n = o.updateQueue, n !== null) {\n e = o.stateNode;\n try {\n B(o, Yd, n, e);\n } catch (S) {\n Se(o, o.return, S);\n }\n }\n i && g & 64 && Cf(o), _s(o, o.return);\n break;\n case 27:\n d && Hn(o);\n case 26:\n case 5:\n Gr(e, o, i), i && n === null && g & 4 && Rs(o), _s(o, o.return);\n break;\n case 12:\n if (i && g & 4) {\n g = jr(), Gr(e, o, i), i = o.stateNode, i.effectDuration += ji(g);\n try {\n B(o, yc, o, n, wl, i.effectDuration);\n } catch (S) {\n Se(o, o.return, S);\n }\n } else Gr(e, o, i);\n break;\n case 31:\n Gr(e, o, i), i && g & 4 && th(e, o);\n break;\n case 13:\n Gr(e, o, i), i && g & 4 && rh(e, o);\n break;\n case 22:\n o.memoizedState === null && Gr(e, o, i), _s(o, o.return);\n break;\n case 30:\n break;\n default:\n Gr(e, o, i);\n }\n (o.mode & 2) !== Z && 0 <= $ && 0 <= q && (cn || .05 < en) && Un(o, $, q, en, Je), mt(s), cr(u), Je = f, cn = p;\n }\n function Gr(e, n, o) {\n for (o = o && (n.subtreeFlags & 8772) !== 0, n = n.child; n !== null;) ih(e, n.alternate, n, o), n = n.sibling;\n }\n function Ga(e, n) {\n var o = null;\n e !== null && e.memoizedState !== null && e.memoizedState.cachePool !== null && (o = e.memoizedState.cachePool.pool), e = null, n.memoizedState !== null && n.memoizedState.cachePool !== null && (e = n.memoizedState.cachePool.pool), e !== o && (e != null && Po(e), o != null && Da(o));\n }\n function Rf(e, n) {\n e = null, n.alternate !== null && (e = n.alternate.memoizedState.cache), n = n.memoizedState.cache, n !== e && (Po(n), e != null && Da(e));\n }\n function wr(e, n, o, i, s) {\n if (n.subtreeFlags & 10256 || n.actualDuration !== 0 && (n.alternate === null || n.alternate.child !== n.child)) for (n = n.child; n !== null;) {\n var u = n.sibling;\n lh(e, n, o, i, u !== null ? u.actualStartTime : s), n = u;\n }\n }\n function lh(e, n, o, i, s) {\n var u = Xn(),\n f = Dr(),\n p = dr(),\n g = fr(),\n S = yl,\n T = n.flags;\n switch (n.tag) {\n case 0:\n case 11:\n case 15:\n (n.mode & 2) !== Z && 0 < n.actualStartTime && (n.flags & 1) !== 0 && po(n, n.actualStartTime, s, Wn, o), wr(e, n, o, i, s), T & 2048 && Yp(n, Ut | lo);\n break;\n case 1:\n (n.mode & 2) !== Z && 0 < n.actualStartTime && ((n.flags & 128) !== 0 ? Ri(n, n.actualStartTime, s, []) : (n.flags & 1) !== 0 && po(n, n.actualStartTime, s, Wn, o)), wr(e, n, o, i, s);\n break;\n case 3:\n var _ = jr(),\n I = Wn;\n Wn = n.alternate !== null && n.alternate.memoizedState.isDehydrated && (n.flags & 256) === 0, wr(e, n, o, i, s), Wn = I, T & 2048 && (o = null, n.alternate !== null && (o = n.alternate.memoizedState.cache), i = n.memoizedState.cache, i !== o && (Po(i), o != null && Da(o))), e.passiveEffectDuration += ql(_);\n break;\n case 12:\n if (T & 2048) {\n T = jr(), wr(e, n, o, i, s), e = n.stateNode, e.passiveEffectDuration += ji(T);\n try {\n B(n, Kp, n, n.alternate, wl, e.passiveEffectDuration);\n } catch (O) {\n Se(n, n.return, O);\n }\n } else wr(e, n, o, i, s);\n break;\n case 31:\n T = Wn, _ = n.alternate !== null ? n.alternate.memoizedState : null, I = n.memoizedState, _ !== null && I === null ? (I = n.deletions, I !== null && 0 < I.length && I[0].tag === 18 ? (Wn = !1, _ = _.hydrationErrors, _ !== null && Ri(n, n.actualStartTime, s, _)) : Wn = !0) : Wn = !1, wr(e, n, o, i, s), Wn = T;\n break;\n case 13:\n T = Wn, _ = n.alternate !== null ? n.alternate.memoizedState : null, I = n.memoizedState, _ === null || _.dehydrated === null || I !== null && I.dehydrated !== null ? Wn = !1 : (I = n.deletions, I !== null && 0 < I.length && I[0].tag === 18 ? (Wn = !1, _ = _.hydrationErrors, _ !== null && Ri(n, n.actualStartTime, s, _)) : Wn = !0), wr(e, n, o, i, s), Wn = T;\n break;\n case 23:\n break;\n case 22:\n I = n.stateNode, _ = n.alternate, n.memoizedState !== null ? I._visibility & gi ? wr(e, n, o, i, s) : Es(e, n, o, i, s) : I._visibility & gi ? wr(e, n, o, i, s) : (I._visibility |= gi, Jr(e, n, o, i, (n.subtreeFlags & 10256) !== 0 || n.actualDuration !== 0 && (n.alternate === null || n.alternate.child !== n.child), s), (n.mode & 2) === Z || Wn || (e = n.actualStartTime, 0 <= e && .05 < s - e && _i(n, e, s), 0 <= $ && 0 <= q && .05 < q - $ && _i(n, $, q))), T & 2048 && Ga(_, n);\n break;\n case 24:\n wr(e, n, o, i, s), T & 2048 && Rf(n.alternate, n);\n break;\n default:\n wr(e, n, o, i, s);\n }\n (n.mode & 2) !== Z && ((e = !Wn && n.alternate === null && n.return !== null && n.return.alternate !== null) && (o = n.actualStartTime, 0 <= o && .05 < s - o && Ot(n, o, s, \"Mount\")), 0 <= $ && 0 <= q && ((cn || .05 < en) && Un(n, $, q, en, Je), e && .05 < q - $ && Ot(n, $, q, \"Mount\"))), mt(u), cr(f), Je = p, cn = g, yl = S;\n }\n function Jr(e, n, o, i, s, u) {\n for (s = s && ((n.subtreeFlags & 10256) !== 0 || n.actualDuration !== 0 && (n.alternate === null || n.alternate.child !== n.child)), n = n.child; n !== null;) {\n var f = n.sibling;\n sh(e, n, o, i, s, f !== null ? f.actualStartTime : u), n = f;\n }\n }\n function sh(e, n, o, i, s, u) {\n var f = Xn(),\n p = Dr(),\n g = dr(),\n S = fr(),\n T = yl;\n s && (n.mode & 2) !== Z && 0 < n.actualStartTime && (n.flags & 1) !== 0 && po(n, n.actualStartTime, u, Wn, o);\n var _ = n.flags;\n switch (n.tag) {\n case 0:\n case 11:\n case 15:\n Jr(e, n, o, i, s, u), Yp(n, Ut);\n break;\n case 23:\n break;\n case 22:\n var I = n.stateNode;\n n.memoizedState !== null ? I._visibility & gi ? Jr(e, n, o, i, s, u) : Es(e, n, o, i, u) : (I._visibility |= gi, Jr(e, n, o, i, s, u)), s && _ & 2048 && Ga(n.alternate, n);\n break;\n case 24:\n Jr(e, n, o, i, s, u), s && _ & 2048 && Rf(n.alternate, n);\n break;\n default:\n Jr(e, n, o, i, s, u);\n }\n (n.mode & 2) !== Z && 0 <= $ && 0 <= q && (cn || .05 < en) && Un(n, $, q, en, Je), mt(f), cr(p), Je = g, cn = S, yl = T;\n }\n function Es(e, n, o, i, s) {\n if (n.subtreeFlags & 10256 || n.actualDuration !== 0 && (n.alternate === null || n.alternate.child !== n.child)) for (var u = n.child; u !== null;) {\n n = u.sibling;\n var f = e,\n p = o,\n g = i,\n S = n !== null ? n.actualStartTime : s,\n T = yl;\n (u.mode & 2) !== Z && 0 < u.actualStartTime && (u.flags & 1) !== 0 && po(u, u.actualStartTime, S, Wn, p);\n var _ = u.flags;\n switch (u.tag) {\n case 22:\n Es(f, u, p, g, S), _ & 2048 && Ga(u.alternate, u);\n break;\n case 24:\n Es(f, u, p, g, S), _ & 2048 && Rf(u.alternate, u);\n break;\n default:\n Es(f, u, p, g, S);\n }\n yl = T, u = n;\n }\n }\n function Ja(e, n, o) {\n if (e.subtreeFlags & wd) for (e = e.child; e !== null;) uh(e, n, o), e = e.sibling;\n }\n function uh(e, n, o) {\n switch (e.tag) {\n case 26:\n if (Ja(e, n, o), e.flags & wd) if (e.memoizedState !== null) c(o, Vo, e.memoizedState, e.memoizedProps);else {\n var i = e.stateNode,\n s = e.type;\n e = e.memoizedProps, ((n & 335544128) === n || Hc(s, e)) && Ac(o, i, s, e);\n }\n break;\n case 5:\n Ja(e, n, o), e.flags & wd && (i = e.stateNode, s = e.type, e = e.memoizedProps, ((n & 335544128) === n || Hc(s, e)) && Ac(o, i, s, e));\n break;\n case 3:\n case 4:\n Re ? (i = Vo, Vo = Sa(e.stateNode.containerInfo), Ja(e, n, o), Vo = i) : Ja(e, n, o);\n break;\n case 22:\n e.memoizedState === null && (i = e.alternate, i !== null && i.memoizedState !== null ? (i = wd, wd = 16777216, Ja(e, n, o), wd = i) : Ja(e, n, o));\n break;\n default:\n Ja(e, n, o);\n }\n }\n function ch(e) {\n var n = e.alternate;\n if (n !== null && (e = n.child, e !== null)) {\n n.child = null;\n do n = e.sibling, e.sibling = null, e = n; while (e !== null);\n }\n }\n function Is(e) {\n var n = e.deletions;\n if ((e.flags & 16) !== 0) {\n if (n !== null) for (var o = 0; o < n.length; o++) {\n var i = n[o],\n s = Xn();\n Gn = i, ph(i, e), (i.mode & 2) !== Z && 0 <= $ && 0 <= q && .05 < q - $ && Ot(i, $, q, \"Unmount\"), mt(s);\n }\n ch(e);\n }\n if (e.subtreeFlags & 10256) for (e = e.child; e !== null;) dh(e), e = e.sibling;\n }\n function dh(e) {\n var n = Xn(),\n o = Dr(),\n i = dr(),\n s = fr();\n switch (e.tag) {\n case 0:\n case 11:\n case 15:\n Is(e), e.flags & 2048 && zf(e, e.return, Ut | lo);\n break;\n case 3:\n var u = jr();\n Is(e), e.stateNode.passiveEffectDuration += ql(u);\n break;\n case 12:\n u = jr(), Is(e), e.stateNode.passiveEffectDuration += ji(u);\n break;\n case 22:\n u = e.stateNode, e.memoizedState !== null && u._visibility & gi && (e.return === null || e.return.tag !== 13) ? (u._visibility &= ~gi, vc(e), (e.mode & 2) !== Z && 0 <= $ && 0 <= q && .05 < q - $ && Ot(e, $, q, \"Disconnect\")) : Is(e);\n break;\n default:\n Is(e);\n }\n (e.mode & 2) !== Z && 0 <= $ && 0 <= q && (cn || .05 < en) && Un(e, $, q, en, Je), mt(n), cr(o), cn = s, Je = i;\n }\n function vc(e) {\n var n = e.deletions;\n if ((e.flags & 16) !== 0) {\n if (n !== null) for (var o = 0; o < n.length; o++) {\n var i = n[o],\n s = Xn();\n Gn = i, ph(i, e), (i.mode & 2) !== Z && 0 <= $ && 0 <= q && .05 < q - $ && Ot(i, $, q, \"Unmount\"), mt(s);\n }\n ch(e);\n }\n for (e = e.child; e !== null;) fh(e), e = e.sibling;\n }\n function fh(e) {\n var n = Xn(),\n o = Dr(),\n i = dr(),\n s = fr();\n switch (e.tag) {\n case 0:\n case 11:\n case 15:\n zf(e, e.return, Ut), vc(e);\n break;\n case 22:\n var u = e.stateNode;\n u._visibility & gi && (u._visibility &= ~gi, vc(e));\n break;\n default:\n vc(e);\n }\n (e.mode & 2) !== Z && 0 <= $ && 0 <= q && (cn || .05 < en) && Un(e, $, q, en, Je), mt(n), cr(o), cn = s, Je = i;\n }\n function ph(e, n) {\n for (; Gn !== null;) {\n var o = Gn,\n i = o,\n s = n,\n u = Xn(),\n f = Dr(),\n p = dr(),\n g = fr();\n switch (i.tag) {\n case 0:\n case 11:\n case 15:\n zf(i, s, Ut);\n break;\n case 23:\n case 22:\n i.memoizedState !== null && i.memoizedState.cachePool !== null && (s = i.memoizedState.cachePool.pool, s != null && Po(s));\n break;\n case 24:\n Da(i.memoizedState.cache);\n }\n if ((i.mode & 2) !== Z && 0 <= $ && 0 <= q && (cn || .05 < en) && Un(i, $, q, en, Je), mt(u), cr(f), cn = g, Je = p, i = o.child, i !== null) i.return = o, Gn = i;else e: for (o = e; Gn !== null;) {\n if (i = Gn, u = i.sibling, f = i.return, qr(i), i === o) {\n Gn = null;\n break e;\n }\n if (u !== null) {\n u.return = f, Gn = u;\n break e;\n }\n Gn = f;\n }\n }\n }\n function Ef(e) {\n var n = Gm(e);\n if (n != null) {\n if (typeof n.memoizedProps[\"data-testname\"] != \"string\") throw Error(\"Invalid host root specified. Should be either a React container or a node with a testname attribute.\");\n return n;\n }\n if (e = $f(e), e === null) throw Error(\"Could not find React container within specified host subtree.\");\n return e.stateNode.current;\n }\n function If(e, n) {\n var o = e.tag;\n switch (n.$$typeof) {\n case pm:\n if (e.type === n.value) return !0;\n break;\n case hm:\n e: {\n for (n = n.value, e = [e, 0], o = 0; o < e.length;) {\n var i = e[o++],\n s = i.tag,\n u = e[o++],\n f = n[u];\n if (s !== 5 && s !== 26 && s !== 27 || !Kr(i)) {\n for (; f != null && If(i, f);) u++, f = n[u];\n if (u === n.length) {\n n = !0;\n break e;\n } else for (i = i.child; i !== null;) e.push(i, u), i = i.sibling;\n }\n }\n n = !1;\n }\n return n;\n case mm:\n if ((o === 5 || o === 26 || o === 27) && Wc(e.stateNode, n.value)) return !0;\n break;\n case ym:\n if ((o === 5 || o === 6 || o === 26 || o === 27) && (e = Vf(e), e !== null && 0 <= e.indexOf(n.value))) return !0;\n break;\n case gm:\n if ((o === 5 || o === 26 || o === 27) && (e = e.memoizedProps[\"data-testname\"], typeof e == \"string\" && e.toLowerCase() === n.value.toLowerCase())) return !0;\n break;\n default:\n throw Error(\"Invalid selector type specified.\");\n }\n return !1;\n }\n function Sc(e) {\n switch (e.$$typeof) {\n case pm:\n return \"<\" + ($e(e.value) || \"Unknown\") + \">\";\n case hm:\n return \":has(\" + (Sc(e) || \"\") + \")\";\n case mm:\n return '[role=\"' + e.value + '\"]';\n case ym:\n return '\"' + e.value + '\"';\n case gm:\n return '[data-testname=\"' + e.value + '\"]';\n default:\n throw Error(\"Invalid selector type specified.\");\n }\n }\n function hh(e, n) {\n var o = [];\n e = [e, 0];\n for (var i = 0; i < e.length;) {\n var s = e[i++],\n u = s.tag,\n f = e[i++],\n p = n[f];\n if (u !== 5 && u !== 26 && u !== 27 || !Kr(s)) {\n for (; p != null && If(s, p);) f++, p = n[f];\n if (f === n.length) o.push(s);else for (s = s.child; s !== null;) e.push(s, f), s = s.sibling;\n }\n }\n return o;\n }\n function kc(e, n) {\n if (!xr) throw Error(\"Test selector API is not supported by this renderer.\");\n e = Ef(e), e = hh(e, n), n = [], e = Array.from(e);\n for (var o = 0; o < e.length;) {\n var i = e[o++],\n s = i.tag;\n if (s === 5 || s === 26 || s === 27) Kr(i) || n.push(i.stateNode);else for (i = i.child; i !== null;) e.push(i), i = i.sibling;\n }\n return n;\n }\n function Wm() {\n xr && bm.forEach(function (e) {\n return e();\n });\n }\n function mh() {\n var e = typeof IS_REACT_ACT_ENVIRONMENT < \"u\" ? IS_REACT_ACT_ENVIRONMENT : void 0;\n return e || x.actQueue === null || console.error(\"The current testing environment is not configured to support act(...)\"), e;\n }\n function Nt(e) {\n if ((ye & Zn) !== Jn && ae !== 0) return ae & -ae;\n var n = x.T;\n return n !== null ? (n._updatedFibers || (n._updatedFibers = new Set()), n._updatedFibers.add(e), Ru()) : Mf();\n }\n function gh() {\n if (rr === 0) if ((ae & 536870912) === 0 || ge) {\n var e = C;\n C <<= 1, (C & 3932160) === 0 && (C = 262144), rr = e;\n } else rr = 536870912;\n return e = _r.current, e !== null && (e.flags |= 32), rr;\n }\n function We(e, n, o) {\n if (zd && console.error(\"useInsertionEffect must not schedule updates.\"), Bg && (Tm = !0), (e === je && (Le === lu || Le === su) || e.cancelPendingCommit !== null) && (Xi(e, 0), No(e, ae, rr, !1)), Ci(e, o), (ye & Zn) !== Jn && e === je) {\n if (Pa) switch (n.tag) {\n case 0:\n case 11:\n case 15:\n e = se && G(se) || \"Unknown\", fb.has(e) || (fb.add(e), n = G(n) || \"Unknown\", console.error(\"Cannot update a component (`%s`) while rendering a different component (`%s`). To locate the bad setState() call inside `%s`, follow the stack trace as described in https://react.dev/link/setstate-in-render\", n, e, e));\n break;\n case 1:\n db || (console.error(\"Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state.\"), db = !0);\n }\n } else wa && yu(e, n, o), Hh(n), e === je && ((ye & Zn) === Jn && (El |= o), nn === Tl && No(e, ae, rr, !1)), Kn(e);\n }\n function Lf(e, n, o) {\n if ((ye & (Zn | uo)) !== Jn) throw Error(\"Should not already be working.\");\n if (ae !== 0 && se !== null) {\n var i = se,\n s = me();\n switch (ay) {\n case Sp:\n case lu:\n var u = rp;\n Me && ((i = i._debugTask) ? i.run(console.timeStamp.bind(console, \"Suspended\", u, s, \"Components \\u269B\", void 0, \"primary-light\")) : console.timeStamp(\"Suspended\", u, s, \"Components \\u269B\", void 0, \"primary-light\"));\n break;\n case su:\n u = rp, Me && ((i = i._debugTask) ? i.run(console.timeStamp.bind(console, \"Action\", u, s, \"Components \\u269B\", void 0, \"primary-light\")) : console.timeStamp(\"Action\", u, s, \"Components \\u269B\", void 0, \"primary-light\"));\n break;\n default:\n Me && (i = s - rp, 3 > i || console.timeStamp(\"Blocked\", rp, s, \"Components \\u269B\", void 0, 5 > i ? \"primary-light\" : 10 > i ? \"primary\" : 100 > i ? \"primary-dark\" : \"error\"));\n }\n }\n u = (o = !o && (n & 127) === 0 && (n & e.expiredLanes) === 0 || Hl(e, n)) ? Um(e, n) : Ff(e, n, !0);\n var f = o;\n do {\n if (u === ki) {\n Pd && !o && No(e, n, 0, !1), n = Le, rp = xn(), ay = n;\n break;\n } else {\n if (i = me(), s = e.current.alternate, f && !bh(s)) {\n En(n), s = Ct, u = i, !Me || u <= s || (gn ? gn.run(console.timeStamp.bind(console, \"Teared Render\", s, u, fe, \"Scheduler \\u269B\", \"error\")) : console.timeStamp(\"Teared Render\", s, u, fe, \"Scheduler \\u269B\", \"error\")), Za(n, i), u = Ff(e, n, !1), f = !1;\n continue;\n }\n if (u === iu) {\n if (f = n, e.errorRecoveryDisabledLanes & f) var p = 0;else p = e.pendingLanes & -536870913, p = p !== 0 ? p : p & 536870912 ? 536870912 : 0;\n if (p !== 0) {\n En(n), Ra(Ct, i, n, gn), Za(n, i), n = p;\n e: {\n i = e, u = f, f = wp;\n var g = qn && i.current.memoizedState.isDehydrated;\n if (g && (Xi(i, p).flags |= 256), p = Ff(i, p, !1), p !== iu) {\n if (Lg && !g) {\n i.errorRecoveryDisabledLanes |= u, El |= u, u = Tl;\n break e;\n }\n i = Bt, Bt = f, i !== null && (Bt === null ? Bt = i : Bt.push.apply(Bt, i));\n }\n u = p;\n }\n if (f = !1, u !== iu) continue;\n i = me();\n }\n }\n if (u === vp) {\n En(n), Ra(Ct, i, n, gn), Za(n, i), Xi(e, 0), No(e, n, 0, !0);\n break;\n }\n e: {\n switch (o = e, u) {\n case ki:\n case vp:\n throw Error(\"Root did not complete. This is a bug in React.\");\n case Tl:\n if ((n & 4194048) !== n) break;\n case Sm:\n En(n), Wl(Ct, i, n, gn), Za(n, i), s = n, (s & 127) !== 0 ? Xh = i : (s & 4194048) !== 0 && (Kh = i), No(o, n, rr, !_l);\n break e;\n case iu:\n Bt = null;\n break;\n case vm:\n case Ky:\n break;\n default:\n throw Error(\"Unknown root exit status.\");\n }\n if (x.actQueue !== null) Hf(o, s, n, Bt, xp, Pm, rr, El, uu, u, null, null, Ct, i);else {\n if ((n & 62914560) === n && (f = xm + tb - me(), 10 < f)) {\n if (No(o, n, rr, !_l), zi(o, 0, !0) !== 0) break e;\n qo = n, o.timeoutHandle = Yt(yh.bind(null, o, s, Bt, xp, Pm, n, rr, El, uu, _l, u, \"Throttled\", Ct, i), f);\n break e;\n }\n yh(o, s, Bt, xp, Pm, n, rr, El, uu, _l, u, null, Ct, i);\n }\n }\n }\n break;\n } while (!0);\n Kn(e);\n }\n function yh(e, n, o, i, s, u, f, p, g, S, T, _, I, O) {\n e.timeoutHandle = Yr;\n var K = n.subtreeFlags,\n Fe = null;\n if ((K & 8192 || (K & 16785408) === 16785408) && (Fe = cl(), uh(n, u, Fe), K = (u & 62914560) === u ? xm - me() : (u & 4194048) === u ? nb - me() : 0, K = jc(Fe, K), K !== null)) {\n qo = u, e.cancelPendingCommit = K(Hf.bind(null, e, n, u, o, i, s, f, p, g, T, Fe, Dc(Fe, e.containerInfo), I, O)), No(e, u, f, !S);\n return;\n }\n Hf(e, n, u, o, i, s, f, p, g, T, Fe, _, I, O);\n }\n function bh(e) {\n for (var n = e;;) {\n var o = n.tag;\n if ((o === 0 || o === 11 || o === 15) && n.flags & 16384 && (o = n.updateQueue, o !== null && (o = o.stores, o !== null))) for (var i = 0; i < o.length; i++) {\n var s = o[i],\n u = s.getSnapshot;\n s = s.value;\n try {\n if (!jt(u(), s)) return !1;\n } catch {\n return !1;\n }\n }\n if (o = n.child, n.subtreeFlags & 16384 && o !== null) o.return = n, n = o;else {\n if (n === e) break;\n for (; n.sibling === null;) {\n if (n.return === null || n.return === e) return !0;\n n = n.return;\n }\n n.sibling.return = n.return, n = n.sibling;\n }\n }\n return !0;\n }\n function No(e, n, o, i) {\n n &= ~Ng, n &= ~El, e.suspendedLanes |= n, e.pingedLanes &= ~n, i && (e.warmLanes |= n), i = e.expirationTimes;\n for (var s = n; 0 < s;) {\n var u = 31 - vn(s),\n f = 1 << u;\n i[u] = -1, s &= ~f;\n }\n o !== 0 && gu(e, o, n);\n }\n function Ls() {\n return (ye & (Zn | uo)) === Jn ? (Wa(0, !1), !1) : !0;\n }\n function Ns() {\n return (ye & (Zn | uo)) !== Jn;\n }\n function Fs() {\n if (se !== null) {\n if (Le === tr) var e = se.return;else e = se, zu(), ds(e), fd = null, fp = 0, e = se;\n for (; e !== null;) gc(e.alternate, e), e = e.return;\n se = null;\n }\n }\n function Za(e, n) {\n (e & 127) !== 0 && (Zs = n), (e & 4194048) !== 0 && (hi = n);\n }\n function Xi(e, n) {\n Me && (console.timeStamp(\"Blocking Track\", .003, .003, \"Blocking\", \"Scheduler \\u269B\", \"primary-light\"), console.timeStamp(\"Transition Track\", .003, .003, \"Transition\", \"Scheduler \\u269B\", \"primary-light\"), console.timeStamp(\"Suspense Track\", .003, .003, \"Suspense\", \"Scheduler \\u269B\", \"primary-light\"), console.timeStamp(\"Idle Track\", .003, .003, \"Idle\", \"Scheduler \\u269B\", \"primary-light\"));\n var o = Ct;\n if (Ct = xn(), ae !== 0 && 0 < o) {\n if (En(ae), nn === vm || nn === Tl) Wl(o, Ct, n, gn);else {\n var i = Ct,\n s = gn;\n if (Me && !(i <= o)) {\n var u = (n & 738197653) === n ? \"tertiary-dark\" : \"primary-dark\",\n f = (n & 536870912) === n ? \"Prewarm\" : (n & 201326741) === n ? \"Interrupted Hydration\" : \"Interrupted Render\";\n s ? s.run(console.timeStamp.bind(console, f, o, i, fe, \"Scheduler \\u269B\", u)) : console.timeStamp(f, o, i, fe, \"Scheduler \\u269B\", u);\n }\n }\n Za(ae, Ct);\n }\n if (o = gn, gn = null, (n & 127) !== 0) {\n gn = ep, s = 0 <= za && za < Zs ? Zs : za, i = 0 <= Ys && Ys < Zs ? Zs : Ys, u = 0 <= i ? i : 0 <= s ? s : Ct, 0 <= Xh && (En(2), Nd(Xh, u, n, o)), o = s;\n var p = i,\n g = np,\n S = 0 < ld,\n T = Pl === 1,\n _ = Pl === 2;\n if (s = Ct, i = ep, u = ig, f = lg, Me) {\n if (fe = \"Blocking\", 0 < o ? o > s && (o = s) : o = s, 0 < p ? p > o && (p = o) : p = o, g !== null && o > p) {\n var I = S ? \"secondary-light\" : \"warning\";\n i ? i.run(console.timeStamp.bind(console, S ? \"Consecutive\" : \"Event: \" + g, p, o, fe, \"Scheduler \\u269B\", I)) : console.timeStamp(S ? \"Consecutive\" : \"Event: \" + g, p, o, fe, \"Scheduler \\u269B\", I);\n }\n s > o && (p = T ? \"error\" : (n & 738197653) === n ? \"tertiary-light\" : \"primary-light\", T = _ ? \"Promise Resolved\" : T ? \"Cascading Update\" : 5 < s - o ? \"Update Blocked\" : \"Update\", _ = [], f != null && _.push([\"Component name\", f]), u != null && _.push([\"Method name\", u]), o = {\n start: o,\n end: s,\n detail: {\n devtools: {\n properties: _,\n track: fe,\n trackGroup: \"Scheduler \\u269B\",\n color: p\n }\n }\n }, i ? i.run(performance.measure.bind(performance, T, o)) : performance.measure(T, o));\n }\n za = -1.1, Pl = 0, lg = ig = null, Xh = -1.1, ld = Ys, Ys = -1.1, Zs = xn();\n }\n if ((n & 4194048) !== 0 && (gn = tp, s = 0 <= mi && mi < hi ? hi : mi, o = 0 <= ao && ao < hi ? hi : ao, i = 0 <= xl && xl < hi ? hi : xl, u = 0 <= i ? i : 0 <= o ? o : Ct, 0 <= Kh && (En(256), Nd(Kh, u, n, gn)), _ = i, p = Xs, g = 0 < zl, S = sg === 2, u = Ct, i = tp, f = ry, T = oy, Me && (fe = \"Transition\", 0 < o ? o > u && (o = u) : o = u, 0 < s ? s > o && (s = o) : s = o, 0 < _ ? _ > s && (_ = s) : _ = s, s > _ && p !== null && (I = g ? \"secondary-light\" : \"warning\", i ? i.run(console.timeStamp.bind(console, g ? \"Consecutive\" : \"Event: \" + p, _, s, fe, \"Scheduler \\u269B\", I)) : console.timeStamp(g ? \"Consecutive\" : \"Event: \" + p, _, s, fe, \"Scheduler \\u269B\", I)), o > s && (i ? i.run(console.timeStamp.bind(console, \"Action\", s, o, fe, \"Scheduler \\u269B\", \"primary-dark\")) : console.timeStamp(\"Action\", s, o, fe, \"Scheduler \\u269B\", \"primary-dark\")), u > o && (s = S ? \"Promise Resolved\" : 5 < u - o ? \"Update Blocked\" : \"Update\", _ = [], T != null && _.push([\"Component name\", T]), f != null && _.push([\"Method name\", f]), o = {\n start: o,\n end: u,\n detail: {\n devtools: {\n properties: _,\n track: fe,\n trackGroup: \"Scheduler \\u269B\",\n color: \"primary-light\"\n }\n }\n }, i ? i.run(performance.measure.bind(performance, s, o)) : performance.measure(s, o))), ao = mi = -1.1, sg = 0, Kh = -1.1, zl = xl, xl = -1.1, hi = xn()), o = e.timeoutHandle, o !== Yr && (e.timeoutHandle = Yr, Of(o)), o = e.cancelPendingCommit, o !== null && (e.cancelPendingCommit = null, o()), qo = 0, Fs(), je = e, se = o = Fo(e.current, null), ae = n, Le = tr, Er = null, _l = !1, Pd = Hl(e, n), Lg = !1, nn = ki, uu = rr = Ng = El = Rl = 0, Bt = wp = null, Pm = !1, (n & 8) !== 0 && (n |= n & 32), i = e.entangledLanes, i !== 0) for (e = e.entanglements, i &= n; 0 < i;) s = 31 - vn(i), u = 1 << s, n |= e[s], i &= ~u;\n return Ta = n, Ui(), e = Vg(), 1e3 < e - $g && (x.recentlyCreatedOwnerStacks = 0, $g = e), Mo.discardPendingWarnings(), o;\n }\n function vh(e, n) {\n Y = null, x.H = yp, x.getCurrentStack = null, Pa = !1, di = null, n === dd || n === am ? (n = qd(), Le = Sp) : n === gg ? (n = qd(), Le = eb) : Le = n === Tg ? Ig : n !== null && typeof n == \"object\" && typeof n.then == \"function\" ? kp : km, Er = n;\n var o = se;\n o === null ? (nn = vp, vs(e, ft(n, e.current))) : o.mode & 2 && Cu(o);\n }\n function Sh() {\n var e = _r.current;\n return e === null ? !0 : (ae & 4194048) === ae ? Qo === null : (ae & 62914560) === ae || (ae & 536870912) !== 0 ? e === Qo : !1;\n }\n function Nf() {\n var e = x.H;\n return x.H = yp, e === null ? yp : e;\n }\n function kh() {\n var e = x.A;\n return x.A = Vb, e;\n }\n function wc(e) {\n gn === null && (gn = e._debugTask == null ? null : e._debugTask);\n }\n function Pc() {\n nn = Tl, _l || (ae & 4194048) !== ae && _r.current !== null || (Pd = !0), (Rl & 134217727) === 0 && (El & 134217727) === 0 || je === null || No(je, ae, rr, !1);\n }\n function Ff(e, n, o) {\n var i = ye;\n ye |= Zn;\n var s = Nf(),\n u = kh();\n if (je !== e || ae !== n) {\n if (wa) {\n var f = e.memoizedUpdaters;\n 0 < f.size && (nl(e, ae), f.clear()), jl(e, n);\n }\n xp = null, Xi(e, n);\n }\n n = !1, f = nn;\n e: do try {\n if (Le !== tr && se !== null) {\n var p = se,\n g = Er;\n switch (Le) {\n case Ig:\n Fs(), f = Sm;\n break e;\n case Sp:\n case lu:\n case su:\n case kp:\n _r.current === null && (n = !0);\n var S = Le;\n if (Le = tr, Er = null, Ki(e, p, g, S), o && Pd) {\n f = ki;\n break e;\n }\n break;\n default:\n S = Le, Le = tr, Er = null, Ki(e, p, g, S);\n }\n }\n wh(), f = nn;\n break;\n } catch (T) {\n vh(e, T);\n } while (!0);\n return n && e.shellSuspendCounter++, zu(), ye = i, x.H = s, x.A = u, se === null && (je = null, ae = 0, Ui()), f;\n }\n function wh() {\n for (; se !== null;) Ph(se);\n }\n function Um(e, n) {\n var o = ye;\n ye |= Zn;\n var i = Nf(),\n s = kh();\n if (je !== e || ae !== n) {\n if (wa) {\n var u = e.memoizedUpdaters;\n 0 < u.size && (nl(e, ae), u.clear()), jl(e, n);\n }\n xp = null, Pp = me() + Fg, Xi(e, n);\n } else Pd = Hl(e, n);\n e: do try {\n if (Le !== tr && se !== null) n: switch (n = se, u = Er, Le) {\n case km:\n Le = tr, Er = null, Ki(e, n, u, km);\n break;\n case lu:\n case su:\n if (Vd(u)) {\n Le = tr, Er = null, xh(n);\n break;\n }\n n = function () {\n Le !== lu && Le !== su || je !== e || (Le = wm), Kn(e);\n }, u.then(n, n);\n break e;\n case Sp:\n Le = wm;\n break e;\n case eb:\n Le = Eg;\n break e;\n case wm:\n Vd(u) ? (Le = tr, Er = null, xh(n)) : (Le = tr, Er = null, Ki(e, n, u, wm));\n break;\n case Eg:\n var f = null;\n switch (se.tag) {\n case 26:\n f = se.memoizedState;\n case 5:\n case 27:\n var p = se,\n g = p.type,\n S = p.pendingProps;\n if (f ? l(f) : ha(p.stateNode, g, S)) {\n Le = tr, Er = null;\n var T = p.sibling;\n if (T !== null) se = T;else {\n var _ = p.return;\n _ !== null ? (se = _, xc(_)) : se = null;\n }\n break n;\n }\n break;\n default:\n console.error(\"Unexpected type of fiber triggered a suspensey commit. This is a bug in React.\");\n }\n Le = tr, Er = null, Ki(e, n, u, Eg);\n break;\n case kp:\n Le = tr, Er = null, Ki(e, n, u, kp);\n break;\n case Ig:\n Fs(), nn = Sm;\n break e;\n default:\n throw Error(\"Unexpected SuspendedReason. This is a bug in React.\");\n }\n x.actQueue !== null ? wh() : Bm();\n break;\n } catch (I) {\n vh(e, I);\n } while (!0);\n return zu(), x.H = i, x.A = s, ye = o, se !== null ? ki : (je = null, ae = 0, Ui(), nn);\n }\n function Bm() {\n for (; se !== null && !J();) Ph(se);\n }\n function Ph(e) {\n var n = e.alternate;\n (e.mode & 2) !== Z ? (Jl(e), n = B(e, tt, n, e, Ta), Cu(e)) : n = B(e, tt, n, e, Ta), e.memoizedProps = e.pendingProps, n === null ? xc(e) : se = n;\n }\n function xh(e) {\n var n = B(e, Om, e);\n e.memoizedProps = e.pendingProps, n === null ? xc(e) : se = n;\n }\n function Om(e) {\n var n = e.alternate,\n o = (e.mode & 2) !== Z;\n switch (o && Jl(e), e.tag) {\n case 15:\n case 0:\n n = Qr(n, e, e.pendingProps, e.type, void 0, ae);\n break;\n case 11:\n n = Qr(n, e, e.pendingProps, e.type.render, e.ref, ae);\n break;\n case 5:\n ds(e);\n default:\n gc(n, e), e = se = dn(e, Ta), n = tt(n, e, Ta);\n }\n return o && Cu(e), n;\n }\n function Ki(e, n, o, i) {\n zu(), ds(n), fd = null, fp = 0;\n var s = n.return;\n try {\n if (Jp(e, s, n, o, ae)) {\n nn = vp, vs(e, ft(o, e.current)), se = null;\n return;\n }\n } catch (u) {\n if (s !== null) throw se = s, u;\n nn = vp, vs(e, ft(o, e.current)), se = null;\n return;\n }\n n.flags & 32768 ? (ge || i === km ? e = !0 : Pd || (ae & 536870912) !== 0 ? e = !1 : (_l = e = !0, (i === lu || i === su || i === Sp || i === kp) && (i = _r.current, i !== null && i.tag === 13 && (i.flags |= 16384))), zh(n, e)) : xc(n);\n }\n function xc(e) {\n var n = e;\n do {\n if ((n.flags & 32768) !== 0) {\n zh(n, _l);\n return;\n }\n var o = n.alternate;\n if (e = n.return, Jl(n), o = B(n, wf, o, n, Ta), (n.mode & 2) !== Z && Wd(n), o !== null) {\n se = o;\n return;\n }\n if (n = n.sibling, n !== null) {\n se = n;\n return;\n }\n se = n = e;\n } while (n !== null);\n nn === ki && (nn = Ky);\n }\n function zh(e, n) {\n do {\n var o = ua(e.alternate, e);\n if (o !== null) {\n o.flags &= 32767, se = o;\n return;\n }\n if ((e.mode & 2) !== Z) {\n Wd(e), o = e.actualDuration;\n for (var i = e.child; i !== null;) o += i.actualDuration, i = i.sibling;\n e.actualDuration = o;\n }\n if (o = e.return, o !== null && (o.flags |= 32768, o.subtreeFlags = 0, o.deletions = null), !n && (e = e.sibling, e !== null)) {\n se = e;\n return;\n }\n se = e = o;\n } while (e !== null);\n nn = Sm, se = null;\n }\n function Hf(e, n, o, i, s, u, f, p, g, S, T, _, I, O) {\n e.cancelPendingCommit = null;\n do el(); while (Rn !== Ll);\n if (Mo.flushLegacyContextWarning(), Mo.flushPendingUnsafeLifecycleWarnings(), (ye & (Zn | uo)) !== Jn) throw Error(\"Should not already be working.\");\n if (En(o), S === iu ? Ra(I, O, o, gn) : i !== null ? Fd(I, O, o, i, n !== null && n.alternate !== null && n.alternate.memoizedState.isDehydrated && (n.flags & 256) !== 0, gn) : In(I, O, o, gn), n !== null) {\n if (o === 0 && console.error(\"finishedLanes should not be empty during a commit. This is a bug in React.\"), n === e.current) throw Error(\"Cannot commit the same tree as before. This error is likely caused by a bug in React. Please file an issue.\");\n if (u = n.lanes | n.childLanes, u |= bg, Id(e, o, u, f, p, g), e === je && (se = je = null, ae = 0), xd = n, Nl = e, qo = o, jg = u, Wg = s, sb = i, Dg = O, ub = _, Go = zm, cb = null, n.actualDuration !== 0 || (n.subtreeFlags & 10256) !== 0 || (n.flags & 10256) !== 0 ? (e.callbackNode = null, e.callbackPriority = 0, Fh(qs, function () {\n return ll(), Go === zm && (Go = Ag), Eh(), null;\n })) : (e.callbackNode = null, e.callbackPriority = 0), pi = null, wl = xn(), _ !== null && bu(O, wl, _, gn), i = (n.flags & 13878) !== 0, (n.subtreeFlags & 13878) !== 0 || i) {\n i = x.T, x.T = null, s = wt(), an(2), f = ye, ye |= uo;\n try {\n jm(e, n, o);\n } finally {\n ye = f, an(s), x.T = i;\n }\n }\n Rn = ob, Ch(), Th(), _h();\n }\n }\n function Ch() {\n if (Rn === ob) {\n Rn = Ll;\n var e = Nl,\n n = xd,\n o = qo,\n i = (n.flags & 13878) !== 0;\n if ((n.subtreeFlags & 13878) !== 0 || i) {\n i = x.T, x.T = null;\n var s = wt();\n an(2);\n var u = ye;\n ye |= uo;\n try {\n Sd = o, kd = e, Gl(), oh(n, e), kd = Sd = null, pa(e.containerInfo);\n } finally {\n ye = u, an(s), x.T = i;\n }\n }\n e.current = n, Rn = ab;\n }\n }\n function Th() {\n if (Rn === ab) {\n Rn = Ll;\n var e = cb;\n if (e !== null) {\n wl = xn();\n var n = fi,\n o = wl;\n !Me || o <= n || (console.timeStamp(e, n, o, fe, \"Scheduler \\u269B\", \"secondary-light\"));\n }\n e = Nl, n = xd, o = qo;\n var i = (n.flags & 8772) !== 0;\n if ((n.subtreeFlags & 8772) !== 0 || i) {\n i = x.T, x.T = null;\n var s = wt();\n an(2);\n var u = ye;\n ye |= uo;\n try {\n Sd = o, kd = e, Gl(), yn(e, n.alternate, n), kd = Sd = null;\n } finally {\n ye = u, an(s), x.T = i;\n }\n }\n e = Dg, n = ub, fi = xn(), e = n === null ? e : wl, n = fi, o = Go === Hg, i = gn, pi !== null ? ir(e, n, pi, !1, i) : !Me || n <= e || (i ? i.run(console.timeStamp.bind(console, o ? \"Commit Interrupted View Transition\" : \"Commit\", e, n, fe, \"Scheduler \\u269B\", o ? \"error\" : \"secondary-dark\")) : console.timeStamp(o ? \"Commit Interrupted View Transition\" : \"Commit\", e, n, fe, \"Scheduler \\u269B\", o ? \"error\" : \"secondary-dark\")), Rn = ib;\n }\n }\n function _h() {\n if (Rn === lb || Rn === ib) {\n if (Rn === lb) {\n var e = fi;\n fi = xn();\n var n = fi,\n o = Go === Hg;\n !Me || n <= e || (console.timeStamp(o ? \"Interrupted View Transition\" : \"Starting Animation\", e, n, fe, \"Scheduler \\u269B\", o ? \" error\" : \"secondary-light\")), Go !== Hg && (Go = rb);\n }\n Rn = Ll, Pe(), e = Nl;\n var i = xd;\n n = qo, o = sb;\n var s = i.actualDuration !== 0 || (i.subtreeFlags & 10256) !== 0 || (i.flags & 10256) !== 0;\n s ? Rn = Cm : (Rn = Ll, xd = Nl = null, Rh(e, e.pendingLanes), cu = 0, Cp = null);\n var u = e.pendingLanes;\n if (u === 0 && (Il = null), s || Df(e), u = ar(n), i = i.stateNode, zt && typeof zt.onCommitFiberRoot == \"function\") try {\n var f = (i.current.flags & 128) === 128;\n switch (u) {\n case 2:\n var p = be;\n break;\n case 8:\n p = Oo;\n break;\n case 32:\n p = qs;\n break;\n case 268435456:\n p = Qg;\n break;\n default:\n p = qs;\n }\n zt.onCommitFiberRoot(td, i, p, f);\n } catch (_) {\n ka || (ka = !0, console.error(\"React instrumentation encountered an error: %o\", _));\n }\n if (wa && e.memoizedUpdaters.clear(), Wm(), o !== null) {\n f = x.T, p = wt(), an(2), x.T = null;\n try {\n var g = e.onRecoverableError;\n for (i = 0; i < o.length; i++) {\n var S = o[i],\n T = Mm(S.stack);\n B(S.source, g, S.value, T);\n }\n } finally {\n x.T = f, an(p);\n }\n }\n (qo & 3) !== 0 && el(), Kn(e), u = e.pendingLanes, (n & 261930) !== 0 && (u & 42) !== 0 ? (nm = !0, e === Ug ? zp++ : (zp = 0, Ug = e)) : zp = 0, s || Za(n, fi), qn && Jf(), Wa(0, !1);\n }\n }\n function Mm(e) {\n return e = {\n componentStack: e\n }, Object.defineProperty(e, \"digest\", {\n get: function () {\n console.error('You are accessing \"digest\" from the errorInfo object passed to onRecoverableError. This property is no longer provided as part of errorInfo but can be accessed as a property of the Error instance itself.');\n }\n }), e;\n }\n function Rh(e, n) {\n (e.pooledCacheLanes &= n) === 0 && (n = e.pooledCache, n != null && (e.pooledCache = null, Da(n)));\n }\n function el() {\n return Ch(), Th(), _h(), Eh();\n }\n function Eh() {\n if (Rn !== Cm) return !1;\n var e = Nl,\n n = jg;\n jg = 0;\n var o = ar(qo),\n i = 32 > o ? 32 : o;\n o = x.T;\n var s = wt();\n try {\n an(i), x.T = null;\n var u = Wg;\n Wg = null, i = Nl;\n var f = qo;\n if (Rn = Ll, xd = Nl = null, qo = 0, (ye & (Zn | uo)) !== Jn) throw Error(\"Cannot flush passive effects while already rendering.\");\n En(f), Bg = !0, Tm = !1;\n var p = 0;\n if (pi = null, p = me(), Go === rb) {\n var g = fi,\n S = p;\n !Me || S <= g || (sd ? sd.run(console.timeStamp.bind(console, \"Animating\", g, S, fe, \"Scheduler \\u269B\", \"secondary-dark\")) : console.timeStamp(\"Animating\", g, S, fe, \"Scheduler \\u269B\", \"secondary-dark\"));\n } else {\n g = fi, S = p;\n var T = Go === Ag;\n !Me || S <= g || (gn ? gn.run(console.timeStamp.bind(console, T ? \"Waiting for Paint\" : \"Waiting\", g, S, fe, \"Scheduler \\u269B\", \"secondary-light\")) : console.timeStamp(T ? \"Waiting for Paint\" : \"Waiting\", g, S, fe, \"Scheduler \\u269B\", \"secondary-light\"));\n }\n g = ye, ye |= uo;\n var _ = i.current;\n Gl(), dh(_);\n var I = i.current;\n _ = Dg, Gl(), lh(i, I, f, u, _), Df(i), ye = g;\n var O = me();\n if (I = p, _ = gn, pi !== null ? ir(I, O, pi, !0, _) : !Me || O <= I || (_ ? _.run(console.timeStamp.bind(console, \"Remaining Effects\", I, O, fe, \"Scheduler \\u269B\", \"secondary-dark\")) : console.timeStamp(\"Remaining Effects\", I, O, fe, \"Scheduler \\u269B\", \"secondary-dark\")), Za(f, O), Wa(0, !1), Tm ? i === Cp ? cu++ : (cu = 0, Cp = i) : cu = 0, Tm = Bg = !1, zt && typeof zt.onPostCommitFiberRoot == \"function\") try {\n zt.onPostCommitFiberRoot(td, i);\n } catch (Fe) {\n ka || (ka = !0, console.error(\"React instrumentation encountered an error: %o\", Fe));\n }\n var K = i.current.stateNode;\n return K.effectDuration = 0, K.passiveEffectDuration = 0, !0;\n } finally {\n an(s), x.T = o, Rh(e, n);\n }\n }\n function Ih(e, n, o) {\n n = ft(o, n), Ud(n), n = oc(e.stateNode, n, 2), e = Mt(e, n, 2), e !== null && (Ci(e, 2), Kn(e));\n }\n function Se(e, n, o) {\n if (zd = !1, e.tag === 3) Ih(e, e, o);else {\n for (; n !== null;) {\n if (n.tag === 3) {\n Ih(n, e, o);\n return;\n }\n if (n.tag === 1) {\n var i = n.stateNode;\n if (typeof n.type.getDerivedStateFromError == \"function\" || typeof i.componentDidCatch == \"function\" && (Il === null || !Il.has(i))) {\n e = ft(o, e), Ud(e), o = ac(2), i = Mt(n, o, 2), i !== null && (ic(o, i, n, e), Ci(i, 2), Kn(i));\n return;\n }\n }\n n = n.return;\n }\n console.error(`Internal React error: Attempted to capture a commit phase error inside a detached tree. This indicates a bug in React. Potential causes include deleting the same fiber more than once, committing an already-finished tree, or an inconsistent return pointer.\n\nError message:\n\n%s`, o);\n }\n }\n function Af(e, n, o) {\n var i = e.pingCache;\n if (i === null) {\n i = e.pingCache = new qb();\n var s = new Set();\n i.set(n, s);\n } else s = i.get(n), s === void 0 && (s = new Set(), i.set(n, s));\n s.has(o) || (Lg = !0, s.add(o), i = Qm.bind(null, e, n, o), wa && nl(e, o), n.then(i, i));\n }\n function Qm(e, n, o) {\n var i = e.pingCache;\n i !== null && i.delete(n), e.pingedLanes |= e.suspendedLanes & o, e.warmLanes &= ~o, (o & 127) !== 0 ? 0 > za && (Zs = za = xn(), ep = Yh(\"Promise Resolved\"), Pl = 2) : (o & 4194048) !== 0 && 0 > ao && (hi = ao = xn(), tp = Yh(\"Promise Resolved\"), sg = 2), mh() && x.actQueue === null && console.error(`A suspended resource finished loading inside a test, but the event was not wrapped in act(...).\n\nWhen testing, code that resolves suspended data should be wrapped into act(...):\n\nact(() => {\n /* finish loading suspended data */\n});\n/* assert on the output */\n\nThis ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act`), je === e && (ae & o) === o && (nn === Tl || nn === vm && (ae & 62914560) === ae && me() - xm < tb ? (ye & Zn) === Jn && Xi(e, 0) : Ng |= o, uu === ae && (uu = 0)), Kn(e);\n }\n function Lh(e, n) {\n n === 0 && (n = ut()), e = On(e, n), e !== null && (Ci(e, n), Kn(e));\n }\n function Nh(e) {\n var n = e.memoizedState,\n o = 0;\n n !== null && (o = n.retryLane), Lh(e, o);\n }\n function $m(e, n) {\n var o = 0;\n switch (e.tag) {\n case 31:\n case 13:\n var i = e.stateNode,\n s = e.memoizedState;\n s !== null && (o = s.retryLane);\n break;\n case 19:\n i = e.stateNode;\n break;\n case 22:\n i = e.stateNode._retryCache;\n break;\n default:\n throw Error(\"Pinged unknown suspense boundary type. This is probably a bug in React.\");\n }\n i !== null && i.delete(n), Lh(e, o);\n }\n function jf(e, n, o) {\n if ((n.subtreeFlags & 67117056) !== 0) for (n = n.child; n !== null;) {\n var i = e,\n s = n,\n u = s.type === Lc;\n u = o || u, s.tag !== 22 ? s.flags & 67108864 ? u && B(s, Gt, i, s) : jf(i, s, u) : s.memoizedState === null && (u && s.flags & 8192 ? B(s, Gt, i, s) : s.subtreeFlags & 67108864 && B(s, jf, i, s, u)), n = n.sibling;\n }\n }\n function Gt(e, n) {\n De(!0);\n try {\n da(n), fh(n), ih(e, n.alternate, n, !1), sh(e, n, 0, null, !1, 0);\n } finally {\n De(!1);\n }\n }\n function Df(e) {\n var n = !0;\n e.current.mode & 24 || (n = !1), jf(e, e.current, n);\n }\n function zc(e) {\n if ((ye & Zn) === Jn) {\n var n = e.tag;\n if (n === 3 || n === 1 || n === 0 || n === 11 || n === 14 || n === 15) {\n if (n = G(e) || \"ReactComponent\", _m !== null) {\n if (_m.has(n)) return;\n _m.add(n);\n } else _m = new Set([n]);\n B(e, function () {\n console.error(\"Can't perform a React state update on a component that hasn't mounted yet. This indicates that you have a side-effect in your render function that asynchronously tries to update the component. Move this work to useEffect instead.\");\n });\n }\n }\n }\n function nl(e, n) {\n wa && e.memoizedUpdaters.forEach(function (o) {\n yu(e, o, n);\n });\n }\n function Fh(e, n) {\n var o = x.actQueue;\n return o !== null ? (o.push(n), Zb) : Q(e, n);\n }\n function Hh(e) {\n mh() && x.actQueue === null && B(e, function () {\n console.error(`An update to %s inside a test was not wrapped in act(...).\n\nWhen testing, code that causes React state updates should be wrapped into act(...):\n\nact(() => {\n /* fire events that update state */\n});\n/* assert on the output */\n\nThis ensures that you're testing the behavior the user would see in the browser. Learn more at https://react.dev/link/wrap-tests-with-act`, G(e));\n });\n }\n function Ya(e) {\n if (co === null) return e;\n var n = co(e);\n return n === void 0 ? e : n.current;\n }\n function Cc(e) {\n if (co === null) return e;\n var n = co(e);\n return n === void 0 ? e != null && typeof e.render == \"function\" && (n = Ya(e.render), e.render !== n) ? (n = {\n $$typeof: jn,\n render: n\n }, e.displayName !== void 0 && (n.displayName = e.displayName), n) : e : n.current;\n }\n function Wf(e, n) {\n if (co === null) return !1;\n var o = e.elementType;\n n = n.type;\n var i = !1,\n s = typeof n == \"object\" && n !== null ? n.$$typeof : null;\n switch (e.tag) {\n case 1:\n typeof n == \"function\" && (i = !0);\n break;\n case 0:\n (typeof n == \"function\" || s === kt) && (i = !0);\n break;\n case 11:\n (s === jn || s === kt) && (i = !0);\n break;\n case 14:\n case 15:\n (s === al || s === kt) && (i = !0);\n break;\n default:\n return !1;\n }\n return !!(i && (e = co(o), e !== void 0 && e === co(n)));\n }\n function Ah(e) {\n co !== null && typeof WeakSet == \"function\" && (Cd === null && (Cd = new WeakSet()), Cd.add(e));\n }\n function jh(e, n, o) {\n do {\n var i = e,\n s = i.alternate,\n u = i.child,\n f = i.sibling,\n p = i.tag;\n i = i.type;\n var g = null;\n switch (p) {\n case 0:\n case 15:\n case 1:\n g = i;\n break;\n case 11:\n g = i.render;\n }\n if (co === null) throw Error(\"Expected resolveFamily to be set during hot reload.\");\n var S = !1;\n if (i = !1, g !== null && (g = co(g), g !== void 0 && (o.has(g) ? i = !0 : n.has(g) && (p === 1 ? i = !0 : S = !0))), Cd !== null && (Cd.has(e) || s !== null && Cd.has(s)) && (i = !0), i && (e._debugNeedsRemount = !0), (i || S) && (s = On(e, 2), s !== null && We(s, e, 2)), u === null || i || jh(u, n, o), f === null) break;\n e = f;\n } while (!0);\n }\n function Vm(e, n, o, i) {\n this.tag = e, this.key = o, this.sibling = this.child = this.return = this.stateNode = this.type = this.elementType = null, this.index = 0, this.refCleanup = this.ref = null, this.pendingProps = n, this.dependencies = this.memoizedState = this.updateQueue = this.memoizedProps = null, this.mode = i, this.subtreeFlags = this.flags = 0, this.deletions = null, this.childLanes = this.lanes = 0, this.alternate = null, this.actualDuration = -0, this.actualStartTime = -1.1, this.treeBaseDuration = this.selfBaseDuration = -0, this._debugTask = this._debugStack = this._debugOwner = this._debugInfo = null, this._debugNeedsRemount = !1, this._debugHookTypes = null, pb || typeof Object.preventExtensions != \"function\" || Object.preventExtensions(this);\n }\n function Tc(e) {\n return e = e.prototype, !(!e || !e.isReactComponent);\n }\n function Fo(e, n) {\n var o = e.alternate;\n switch (o === null ? (o = lt(e.tag, n, e.key, e.mode), o.elementType = e.elementType, o.type = e.type, o.stateNode = e.stateNode, o._debugOwner = e._debugOwner, o._debugStack = e._debugStack, o._debugTask = e._debugTask, o._debugHookTypes = e._debugHookTypes, o.alternate = e, e.alternate = o) : (o.pendingProps = n, o.type = e.type, o.flags = 0, o.subtreeFlags = 0, o.deletions = null, o.actualDuration = -0, o.actualStartTime = -1.1), o.flags = e.flags & 65011712, o.childLanes = e.childLanes, o.lanes = e.lanes, o.child = e.child, o.memoizedProps = e.memoizedProps, o.memoizedState = e.memoizedState, o.updateQueue = e.updateQueue, n = e.dependencies, o.dependencies = n === null ? null : {\n lanes: n.lanes,\n firstContext: n.firstContext,\n _debugThenableState: n._debugThenableState\n }, o.sibling = e.sibling, o.index = e.index, o.ref = e.ref, o.refCleanup = e.refCleanup, o.selfBaseDuration = e.selfBaseDuration, o.treeBaseDuration = e.treeBaseDuration, o._debugInfo = e._debugInfo, o._debugNeedsRemount = e._debugNeedsRemount, o.tag) {\n case 0:\n case 15:\n o.type = Ya(e.type);\n break;\n case 1:\n o.type = Ya(e.type);\n break;\n case 11:\n o.type = Cc(e.type);\n }\n return o;\n }\n function dn(e, n) {\n e.flags &= 65011714;\n var o = e.alternate;\n return o === null ? (e.childLanes = 0, e.lanes = n, e.child = null, e.subtreeFlags = 0, e.memoizedProps = null, e.memoizedState = null, e.updateQueue = null, e.dependencies = null, e.stateNode = null, e.selfBaseDuration = 0, e.treeBaseDuration = 0) : (e.childLanes = o.childLanes, e.lanes = o.lanes, e.child = o.child, e.subtreeFlags = 0, e.deletions = null, e.memoizedProps = o.memoizedProps, e.memoizedState = o.memoizedState, e.updateQueue = o.updateQueue, e.type = o.type, n = o.dependencies, e.dependencies = n === null ? null : {\n lanes: n.lanes,\n firstContext: n.firstContext,\n _debugThenableState: n._debugThenableState\n }, e.selfBaseDuration = o.selfBaseDuration, e.treeBaseDuration = o.treeBaseDuration), e;\n }\n function _c(e, n, o, i, s, u) {\n var f = 0,\n p = e;\n if (typeof e == \"function\") Tc(e) && (f = 1), p = Ya(p);else if (typeof e == \"string\") Re && d ? (f = Rt(), f = Bo(e, o, f) ? 26 : L(e) ? 27 : 5) : Re ? (f = Rt(), f = Bo(e, o, f) ? 26 : 5) : f = d && L(e) ? 27 : 5;else e: switch (e) {\n case Ds:\n return n = lt(31, o, n, s), n.elementType = Ds, n.lanes = u, n;\n case ol:\n return fa(o.children, s, u, n);\n case Lc:\n f = 8, s |= 24;\n break;\n case Uf:\n return e = o, i = s, typeof e.id != \"string\" && console.error('Profiler must specify an \"id\" of type `string` as a prop. Received the type `%s` instead.', typeof e.id), n = lt(12, e, n, i | 2), n.elementType = Uf, n.lanes = u, n.stateNode = {\n effectDuration: 0,\n passiveEffectDuration: 0\n }, n;\n case Nc:\n return n = lt(13, o, n, s), n.elementType = Nc, n.lanes = u, n;\n case Bf:\n return n = lt(19, o, n, s), n.elementType = Bf, n.lanes = u, n;\n default:\n if (typeof e == \"object\" && e !== null) switch (e.$$typeof) {\n case on:\n f = 10;\n break e;\n case ei:\n f = 9;\n break e;\n case jn:\n f = 11, p = Cc(p);\n break e;\n case al:\n f = 14;\n break e;\n case kt:\n f = 16, p = null;\n break e;\n }\n p = \"\", (e === void 0 || typeof e == \"object\" && e !== null && Object.keys(e).length === 0) && (p += \" You likely forgot to export your component from the file it's defined in, or you might have mixed up default and named imports.\"), e === null ? o = \"null\" : fn(e) ? o = \"array\" : e !== void 0 && e.$$typeof === Ho ? (o = \"<\" + ($e(e.type) || \"Unknown\") + \" />\", p = \" Did you accidentally export a JSX literal instead of a component?\") : o = typeof e, f = i ? typeof i.tag == \"number\" ? G(i) : typeof i.name == \"string\" ? i.name : null : null, f && (p += `\n\nCheck the render method of \\`` + f + \"`.\"), f = 29, o = Error(\"Element type is invalid: expected a string (for built-in components) or a class/function (for composite components) but got: \" + (o + \".\" + p)), p = null;\n }\n return n = lt(f, o, n, s), n.elementType = e, n.type = p, n.lanes = u, n._debugOwner = i, n;\n }\n function Rc(e, n, o) {\n return n = _c(e.type, e.key, e.props, e._owner, n, o), n._debugOwner = e._owner, n._debugStack = e._debugStack, n._debugTask = e._debugTask, n;\n }\n function fa(e, n, o, i) {\n return e = lt(7, e, i, n), e.lanes = o, e;\n }\n function Ec(e, n, o) {\n return e = lt(6, e, null, n), e.lanes = o, e;\n }\n function Xa(e) {\n var n = lt(18, null, null, Z);\n return n.stateNode = e, n;\n }\n function Hs(e, n, o) {\n return n = lt(4, e.children !== null ? e.children : [], e.key, n), n.lanes = o, n.stateNode = {\n containerInfo: e.containerInfo,\n pendingChildren: null,\n implementation: e.implementation\n }, n;\n }\n function tl(e, n, o, i, s, u, f, p, g) {\n for (this.tag = 1, this.containerInfo = e, this.pingCache = this.current = this.pendingChildren = null, this.timeoutHandle = Yr, this.callbackNode = this.next = this.pendingContext = this.context = this.cancelPendingCommit = null, this.callbackPriority = 0, this.expirationTimes = or(-1), this.entangledLanes = this.shellSuspendCounter = this.errorRecoveryDisabledLanes = this.expiredLanes = this.warmLanes = this.pingedLanes = this.suspendedLanes = this.pendingLanes = 0, this.entanglements = or(0), this.hiddenUpdates = or(null), this.identifierPrefix = i, this.onUncaughtError = s, this.onCaughtError = u, this.onRecoverableError = f, this.pooledCache = null, this.pooledCacheLanes = 0, this.formState = g, this.incompleteTransitions = new Map(), this.passiveEffectDuration = this.effectDuration = -0, this.memoizedUpdaters = new Set(), e = this.pendingUpdatersLaneMap = [], n = 0; 31 > n; n++) e.push(new Set());\n this._debugRootType = o ? \"hydrateRoot()\" : \"createRoot()\";\n }\n function Ka(e, n, o, i, s, u, f, p, g, S, T, _) {\n return e = new tl(e, n, o, f, g, S, T, _, p), n = 1, u === !0 && (n |= 24), u = lt(3, null, null, n | 2), e.current = u, u.stateNode = e, n = Ai(), Po(n), e.pooledCache = n, Po(n), u.memoizedState = {\n element: i,\n isDehydrated: o,\n cache: n\n }, Au(u), e;\n }\n function vt(e) {\n return \"\" + e;\n }\n function Dh(e) {\n return e ? (e = Oe, e) : Oe;\n }\n function Wh(e, n, o, i) {\n return As(n.current, 2, e, n, o, i), 2;\n }\n function As(e, n, o, i, s, u) {\n if (zt && typeof zt.onScheduleFiberRoot == \"function\") try {\n zt.onScheduleFiberRoot(td, i, o);\n } catch (f) {\n ka || (ka = !0, console.error(\"React instrumentation encountered an error: %o\", f));\n }\n s = Dh(s), i.context === null ? i.context = s : i.pendingContext = s, Pa && di !== null && !hb && (hb = !0, console.error(`Render methods should be a pure function of props and state; triggering nested component updates from render is not allowed. If necessary, trigger nested updates in componentDidUpdate.\n\nCheck the render method of %s.`, G(di) || \"Unknown\")), i = zo(n), i.payload = {\n element: o\n }, u = u === void 0 ? null : u, u !== null && (typeof u != \"function\" && console.error(\"Expected the last optional `callback` argument to be a function. Instead received: %s.\", u), i.callback = u), o = Mt(e, i, n), o !== null && (ur(n, \"root.render()\", null), We(o, e, n), Bi(o, e, n));\n }\n function js(e, n) {\n if (e = e.memoizedState, e !== null && e.dehydrated !== null) {\n var o = e.retryLane;\n e.retryLane = o !== 0 && o < n ? o : n;\n }\n }\n function rl(e, n) {\n js(e, n), (e = e.alternate) && js(e, n);\n }\n function Ic() {\n return di;\n }\n var le = {},\n qm = React__default,\n St = Tb,\n ze = Object.assign,\n Uh = Symbol.for(\"react.element\"),\n Ho = Symbol.for(\"react.transitional.element\"),\n Ao = Symbol.for(\"react.portal\"),\n ol = Symbol.for(\"react.fragment\"),\n Lc = Symbol.for(\"react.strict_mode\"),\n Uf = Symbol.for(\"react.profiler\"),\n ei = Symbol.for(\"react.consumer\"),\n on = Symbol.for(\"react.context\"),\n jn = Symbol.for(\"react.forward_ref\"),\n Nc = Symbol.for(\"react.suspense\"),\n Bf = Symbol.for(\"react.suspense_list\"),\n al = Symbol.for(\"react.memo\"),\n kt = Symbol.for(\"react.lazy\");\n var Ds = Symbol.for(\"react.activity\");\n var Bh = Symbol.for(\"react.memo_cache_sentinel\");\n var ni = Symbol.iterator,\n il = Symbol.for(\"react.client.reference\"),\n fn = Array.isArray,\n x = qm.__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE,\n Jt = m.rendererVersion,\n Zt = m.rendererPackageName,\n jo = m.extraDevToolsConfig,\n ot = m.getPublicInstance,\n Zr = m.getRootHostContext,\n Dn = m.getChildHostContext,\n Ws = m.prepareForCommit,\n pa = m.resetAfterCommit,\n Fc = m.createInstance;\n m.cloneMutableInstance;\n var bn = m.appendInitialChild,\n Ue = m.finalizeInitialChildren,\n ue = m.shouldSetTextContent,\n Do = m.createTextInstance;\n m.cloneMutableTextInstance;\n var Yt = m.scheduleTimeout,\n Of = m.cancelTimeout,\n Yr = m.noTimeout,\n at = m.isPrimaryRenderer;\n m.warnsIfNotActing;\n var Be = m.supportsMutation,\n Xr = m.supportsPersistence,\n qn = m.supportsHydration,\n Gm = m.getInstanceFromNode;\n m.beforeActiveInstanceBlur;\n var qe = m.preparePortalMount;\n m.prepareScopeUpdate, m.getInstanceFromScope;\n var an = m.setCurrentUpdatePriority,\n wt = m.getCurrentUpdatePriority,\n Mf = m.resolveUpdatePriority,\n ll = m.trackSchedulerEvent,\n ti = m.resolveEventType,\n Pr = m.resolveEventTimeStamp,\n Us = m.shouldAttemptEagerTransition,\n Qf = m.detachDeletedInstance;\n m.requestPostPaintCallback;\n var sl = m.maySuspendCommit,\n ul = m.maySuspendCommitOnUpdate,\n Hc = m.maySuspendCommitInSyncRender,\n ha = m.preloadInstance,\n cl = m.startSuspendingCommit,\n Ac = m.suspendInstance;\n m.suspendOnActiveViewTransition;\n var jc = m.waitForCommitToBeReady,\n Dc = m.getSuspendedCommitReason,\n Xt = m.NotPendingTransition,\n Kt = m.HostTransitionContext,\n Bs = m.resetFormInstance,\n ri = m.bindToConsole,\n Oh = m.supportsMicrotasks,\n er = m.scheduleMicrotask,\n xr = m.supportsTestSelectors,\n $f = m.findFiberRoot,\n ma = m.getBoundingRect,\n Vf = m.getTextContent,\n Kr = m.isHiddenSubtree,\n Wc = m.matchAccessibilityRole,\n Ft = m.setFocusIfFocusable,\n zr = m.setupIntersectionObserver,\n ln = m.appendChild,\n Wo = m.appendChildToContainer,\n ne = m.commitTextUpdate,\n Ie = m.commitMount,\n pn = m.commitUpdate,\n Uc = m.insertBefore,\n dl = m.insertInContainerBefore,\n oi = m.removeChild,\n Bc = m.removeChildFromContainer,\n fl = m.resetTextContent,\n pl = m.hideInstance,\n Jm = m.hideTextInstance,\n Os = m.unhideInstance,\n Mh = m.unhideTextInstance;\n m.cancelViewTransitionName, m.cancelRootViewTransitionName, m.restoreRootViewTransitionName, m.cloneRootViewTransitionContainer, m.removeRootViewTransitionClone, m.measureClonedInstance, m.hasInstanceChanged, m.hasInstanceAffectedParent, m.startViewTransition, m.startGestureTransition, m.stopViewTransition, m.getCurrentGestureOffset, m.createViewTransitionInstance;\n var qf = m.clearContainer;\n m.createFragmentInstance, m.updateFragmentInstanceFiber, m.commitNewChildToFragmentInstance, m.deleteChildFromFragmentInstance;\n var Qh = m.cloneInstance,\n Oc = m.createContainerChildSet,\n Mc = m.appendChildToContainerChildSet,\n hn = m.finalizeContainerChildren,\n Qc = m.replaceContainerChildren,\n eo = m.cloneHiddenInstance,\n sn = m.cloneHiddenTextInstance,\n Ms = m.isSuspenseInstancePending,\n $c = m.isSuspenseInstanceFallback,\n Pn = m.getSuspenseInstanceFallbackErrorDetails,\n mn = m.registerSuspenseInstanceRetry,\n Pt = m.canHydrateFormStateMarker,\n Cr = m.isFormStateMarkerMatching,\n ga = m.getNextHydratableSibling,\n Zm = m.getNextHydratableSiblingAfterSingleton,\n Vc = m.getFirstHydratableChild,\n qc = m.getFirstHydratableChildWithinContainer,\n Gc = m.getFirstHydratableChildWithinActivityInstance,\n Jc = m.getFirstHydratableChildWithinSuspenseInstance,\n Zc = m.getFirstHydratableChildWithinSingleton,\n Qs = m.canHydrateInstance,\n Ym = m.canHydrateTextInstance,\n ce = m.canHydrateActivityInstance,\n Ne = m.canHydrateSuspenseInstance,\n de = m.hydrateInstance,\n he = m.hydrateTextInstance,\n _e = m.hydrateActivityInstance,\n Ht = m.hydrateSuspenseInstance,\n ya = m.getNextHydratableInstanceAfterActivityInstance,\n ai = m.getNextHydratableInstanceAfterSuspenseInstance,\n Gf = m.commitHydratedInstance,\n Uo = m.commitHydratedContainer,\n Xe = m.commitHydratedActivityInstance,\n ba = m.commitHydratedSuspenseInstance,\n ii = m.finalizeHydratedChildren,\n Jf = m.flushHydrationEvents;\n m.clearActivityBoundary;\n var At = m.clearSuspenseBoundary;\n m.clearActivityBoundaryFromContainer;\n var hl = m.clearSuspenseBoundaryFromContainer,\n $s = m.hideDehydratedBoundary,\n xt = m.unhideDehydratedBoundary,\n Yc = m.shouldDeleteUnhydratedTailInstances,\n Vs = m.diffHydratedPropsForDevWarnings,\n Zf = m.diffHydratedTextForDevWarnings,\n ml = m.describeHydratableInstanceForDevWarnings,\n Xc = m.validateHydratableInstance,\n va = m.validateHydratableTextInstance,\n Re = m.supportsResources,\n Bo = m.isHostHoistableType,\n Sa = m.getHoistableRoot,\n no = m.getResource,\n Kc = m.acquireResource,\n ed = m.releaseResource,\n $h = m.hydrateHoistable,\n gl = m.mountHoistable,\n nd = m.unmountHoistable,\n t = m.createHoistableInstance,\n r = m.prepareToCommitHoistables,\n a = m.mayResourceSuspendCommit,\n l = m.preloadResource,\n c = m.suspendResource,\n d = m.supportsSingletons,\n h = m.resolveSingletonInstance,\n y = m.acquireSingletonInstance,\n R = m.releaseSingletonInstance,\n L = m.isHostSingletonType,\n j = m.isSingletonScope,\n A = [],\n W = [],\n V = -1,\n Oe = {};\n Object.freeze(Oe);\n var vn = Math.clz32 ? Math.clz32 : Im,\n li = Math.log,\n P = Math.LN2,\n w = 256,\n C = 262144,\n H = 4194304,\n Q = St.unstable_scheduleCallback,\n Ge = St.unstable_cancelCallback,\n J = St.unstable_shouldYield,\n Pe = St.unstable_requestPaint,\n me = St.unstable_now,\n be = St.unstable_ImmediatePriority,\n Oo = St.unstable_UserBlockingPriority,\n qs = St.unstable_NormalPriority,\n Qg = St.unstable_IdlePriority,\n Ib = St.log,\n Lb = St.unstable_setDisableYieldValue,\n td = null,\n zt = null,\n ka = !1,\n wa = typeof __REACT_DEVTOOLS_GLOBAL_HOOK__ < \"u\",\n $g = 0;\n if (typeof performance == \"object\" && typeof performance.now == \"function\") var Nb = performance,\n Vg = function () {\n return Nb.now();\n };else {\n var Fb = Date;\n Vg = function () {\n return Fb.now();\n };\n }\n var jt = typeof Object.is == \"function\" ? Object.is : Ti,\n qg = typeof reportError == \"function\" ? reportError : function (e) {\n if (typeof window == \"object\" && typeof window.ErrorEvent == \"function\") {\n var n = new window.ErrorEvent(\"error\", {\n bubbles: !0,\n cancelable: !0,\n message: typeof e == \"object\" && e !== null && typeof e.message == \"string\" ? String(e.message) : String(e),\n error: e\n });\n if (!window.dispatchEvent(n)) return;\n } else if (typeof process == \"object\" && typeof process.emit == \"function\") {\n process.emit(\"uncaughtException\", e);\n return;\n }\n console.error(e);\n },\n Xm = Object.prototype.hasOwnProperty,\n Me = typeof console < \"u\" && typeof console.timeStamp == \"function\" && typeof performance < \"u\" && typeof performance.measure == \"function\",\n fe = \"Blocking\",\n yl = !1,\n si = {\n color: \"primary\",\n properties: null,\n tooltipText: \"\",\n track: \"Components \\u269B\"\n },\n bl = {\n start: -0,\n end: -0,\n detail: {\n devtools: si\n }\n },\n Hb = [\"Changed Props\", \"\"],\n Ab = [\"Changed Props\", \"This component received deeply equal props. It might benefit from useMemo or the React Compiler in its owner.\"],\n Yf = 0,\n Gg,\n Jg,\n Zg,\n Yg,\n Xg,\n Kg,\n ey;\n Ea.__reactDisabledLog = !0;\n var Km,\n ny,\n eg = !1,\n ng = new (typeof WeakMap == \"function\" ? WeakMap : Map)(),\n tg = new WeakMap(),\n rd = [],\n od = 0,\n Vh = null,\n Xf = 0,\n to = [],\n ro = 0,\n Gs = null,\n ui = 1,\n ci = \"\",\n vl = st(null),\n Kf = st(null),\n Sl = st(null),\n qh = st(null),\n ty = /[\"'&<>\\n\\t]|^\\s|\\s$/,\n di = null,\n Pa = !1,\n it = null,\n Ke = null,\n ge = !1,\n xa = !1,\n Tr = null,\n kl = null,\n oo = !1,\n rg = Error(\"Hydration Mismatch Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React.\"),\n Z = 0,\n Gh = st(null),\n og = st(null),\n ag = st(null),\n Jh = {},\n Zh = null,\n ad = null,\n id = !1,\n jb = typeof AbortController < \"u\" ? AbortController : function () {\n var e = [],\n n = this.signal = {\n aborted: !1,\n addEventListener: function (o, i) {\n e.push(i);\n }\n };\n this.abort = function () {\n n.aborted = !0, e.forEach(function (o) {\n return o();\n });\n };\n },\n Db = St.unstable_scheduleCallback,\n Wb = St.unstable_NormalPriority,\n un = {\n $$typeof: on,\n Consumer: null,\n Provider: null,\n _currentValue: null,\n _currentValue2: null,\n _threadCount: 0,\n _currentRenderer: null,\n _currentRenderer2: null\n },\n xn = St.unstable_now,\n Yh = console.createTask ? console.createTask : function () {\n return null;\n },\n Ct = -0,\n wl = -0,\n fi = -0,\n pi = null,\n Dt = -1.1,\n Js = -0,\n en = -0,\n $ = -1.1,\n q = -1.1,\n Je = null,\n cn = !1,\n Zs = -0,\n za = -1.1,\n ep = null,\n Pl = 0,\n ig = null,\n lg = null,\n Ys = -1.1,\n np = null,\n ld = -1.1,\n Xh = -1.1,\n hi = -0,\n mi = -1.1,\n ao = -1.1,\n sg = 0,\n tp = null,\n ry = null,\n oy = null,\n xl = -1.1,\n Xs = null,\n zl = -1.1,\n Kh = -1.1,\n sd = null,\n ay = 0,\n rp = -1.1,\n em = !1,\n nm = !1,\n tm = null,\n ud = null,\n ug = !1,\n cg = !1,\n rm = !1,\n dg = !1,\n Ks = 0,\n fg = {},\n op = null,\n pg = 0,\n eu = 0,\n cd = null,\n iy = x.S;\n x.S = function (e, n) {\n if (nb = me(), typeof n == \"object\" && n !== null && typeof n.then == \"function\") {\n if (0 > mi && 0 > ao) {\n mi = xn();\n var o = Pr(),\n i = ti();\n (o !== zl || i !== Xs) && (zl = -1.1), xl = o, Xs = i;\n }\n jp(e, n);\n }\n iy !== null && iy(e, n);\n };\n var nu = st(null),\n Mo = {\n recordUnsafeLifecycleWarnings: function () {},\n flushPendingUnsafeLifecycleWarnings: function () {},\n recordLegacyContextWarning: function () {},\n flushLegacyContextWarning: function () {},\n discardPendingWarnings: function () {}\n },\n ap = [],\n ip = [],\n lp = [],\n sp = [],\n up = [],\n cp = [],\n tu = new Set();\n Mo.recordUnsafeLifecycleWarnings = function (e, n) {\n tu.has(e.type) || (typeof n.componentWillMount == \"function\" && n.componentWillMount.__suppressDeprecationWarning !== !0 && ap.push(e), e.mode & 8 && typeof n.UNSAFE_componentWillMount == \"function\" && ip.push(e), typeof n.componentWillReceiveProps == \"function\" && n.componentWillReceiveProps.__suppressDeprecationWarning !== !0 && lp.push(e), e.mode & 8 && typeof n.UNSAFE_componentWillReceiveProps == \"function\" && sp.push(e), typeof n.componentWillUpdate == \"function\" && n.componentWillUpdate.__suppressDeprecationWarning !== !0 && up.push(e), e.mode & 8 && typeof n.UNSAFE_componentWillUpdate == \"function\" && cp.push(e));\n }, Mo.flushPendingUnsafeLifecycleWarnings = function () {\n var e = new Set();\n 0 < ap.length && (ap.forEach(function (p) {\n e.add(G(p) || \"Component\"), tu.add(p.type);\n }), ap = []);\n var n = new Set();\n 0 < ip.length && (ip.forEach(function (p) {\n n.add(G(p) || \"Component\"), tu.add(p.type);\n }), ip = []);\n var o = new Set();\n 0 < lp.length && (lp.forEach(function (p) {\n o.add(G(p) || \"Component\"), tu.add(p.type);\n }), lp = []);\n var i = new Set();\n 0 < sp.length && (sp.forEach(function (p) {\n i.add(G(p) || \"Component\"), tu.add(p.type);\n }), sp = []);\n var s = new Set();\n 0 < up.length && (up.forEach(function (p) {\n s.add(G(p) || \"Component\"), tu.add(p.type);\n }), up = []);\n var u = new Set();\n if (0 < cp.length && (cp.forEach(function (p) {\n u.add(G(p) || \"Component\"), tu.add(p.type);\n }), cp = []), 0 < n.size) {\n var f = Lr(n);\n console.error(`Using UNSAFE_componentWillMount in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move code with side effects to componentDidMount, and set initial state in the constructor.\n\nPlease update the following components: %s`, f);\n }\n 0 < i.size && (f = Lr(i), console.error(`Using UNSAFE_componentWillReceiveProps in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move data fetching code or side effects to componentDidUpdate.\n* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state\n\nPlease update the following components: %s`, f)), 0 < u.size && (f = Lr(u), console.error(`Using UNSAFE_componentWillUpdate in strict mode is not recommended and may indicate bugs in your code. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move data fetching code or side effects to componentDidUpdate.\n\nPlease update the following components: %s`, f)), 0 < e.size && (f = Lr(e), console.warn(`componentWillMount has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move code with side effects to componentDidMount, and set initial state in the constructor.\n* Rename componentWillMount to UNSAFE_componentWillMount to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run \\`npx react-codemod rename-unsafe-lifecycles\\` in your project source folder.\n\nPlease update the following components: %s`, f)), 0 < o.size && (f = Lr(o), console.warn(`componentWillReceiveProps has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move data fetching code or side effects to componentDidUpdate.\n* If you're updating state whenever props change, refactor your code to use memoization techniques or move it to static getDerivedStateFromProps. Learn more at: https://react.dev/link/derived-state\n* Rename componentWillReceiveProps to UNSAFE_componentWillReceiveProps to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run \\`npx react-codemod rename-unsafe-lifecycles\\` in your project source folder.\n\nPlease update the following components: %s`, f)), 0 < s.size && (f = Lr(s), console.warn(`componentWillUpdate has been renamed, and is not recommended for use. See https://react.dev/link/unsafe-component-lifecycles for details.\n\n* Move data fetching code or side effects to componentDidUpdate.\n* Rename componentWillUpdate to UNSAFE_componentWillUpdate to suppress this warning in non-strict mode. In React 18.x, only the UNSAFE_ name will work. To rename all deprecated lifecycles to their new names, you can run \\`npx react-codemod rename-unsafe-lifecycles\\` in your project source folder.\n\nPlease update the following components: %s`, f));\n };\n var om = new Map(),\n ly = new Set();\n Mo.recordLegacyContextWarning = function (e, n) {\n for (var o = null, i = e; i !== null;) i.mode & 8 && (o = i), i = i.return;\n o === null ? console.error(\"Expected to find a StrictMode component in a strict mode tree. This error is likely caused by a bug in React. Please file an issue.\") : !ly.has(e.type) && (i = om.get(o), e.type.contextTypes != null || e.type.childContextTypes != null || n !== null && typeof n.getChildContext == \"function\") && (i === void 0 && (i = [], om.set(o, i)), i.push(e));\n }, Mo.flushLegacyContextWarning = function () {\n om.forEach(function (e) {\n if (e.length !== 0) {\n var n = e[0],\n o = new Set();\n e.forEach(function (s) {\n o.add(G(s) || \"Component\"), ly.add(s.type);\n });\n var i = Lr(o);\n B(n, function () {\n console.error(`Legacy context API has been detected within a strict-mode tree.\n\nThe old API will be supported in all 16.x releases, but applications using it should migrate to the new version.\n\nPlease update the following components: %s\n\nLearn more about this warning here: https://react.dev/link/legacy-context`, i);\n });\n }\n });\n }, Mo.discardPendingWarnings = function () {\n ap = [], ip = [], lp = [], sp = [], up = [], cp = [], om = new Map();\n };\n var sy = {\n react_stack_bottom_frame: function (e, n, o) {\n var i = Pa;\n Pa = !0;\n try {\n return e(n, o);\n } finally {\n Pa = i;\n }\n }\n },\n hg = sy.react_stack_bottom_frame.bind(sy),\n uy = {\n react_stack_bottom_frame: function (e) {\n var n = Pa;\n Pa = !0;\n try {\n return e.render();\n } finally {\n Pa = n;\n }\n }\n },\n cy = uy.react_stack_bottom_frame.bind(uy),\n dy = {\n react_stack_bottom_frame: function (e, n) {\n try {\n n.componentDidMount();\n } catch (o) {\n Se(e, e.return, o);\n }\n }\n },\n mg = dy.react_stack_bottom_frame.bind(dy),\n fy = {\n react_stack_bottom_frame: function (e, n, o, i, s) {\n try {\n n.componentDidUpdate(o, i, s);\n } catch (u) {\n Se(e, e.return, u);\n }\n }\n },\n py = fy.react_stack_bottom_frame.bind(fy),\n hy = {\n react_stack_bottom_frame: function (e, n) {\n var o = n.stack;\n e.componentDidCatch(n.value, {\n componentStack: o !== null ? o : \"\"\n });\n }\n },\n Ub = hy.react_stack_bottom_frame.bind(hy),\n my = {\n react_stack_bottom_frame: function (e, n, o) {\n try {\n o.componentWillUnmount();\n } catch (i) {\n Se(e, n, i);\n }\n }\n },\n gy = my.react_stack_bottom_frame.bind(my),\n yy = {\n react_stack_bottom_frame: function (e) {\n var n = e.create;\n return e = e.inst, n = n(), e.destroy = n;\n }\n },\n Bb = yy.react_stack_bottom_frame.bind(yy),\n by = {\n react_stack_bottom_frame: function (e, n, o) {\n try {\n o();\n } catch (i) {\n Se(e, n, i);\n }\n }\n },\n Ob = by.react_stack_bottom_frame.bind(by),\n vy = {\n react_stack_bottom_frame: function (e) {\n var n = e._init;\n return n(e._payload);\n }\n },\n Mb = vy.react_stack_bottom_frame.bind(vy),\n dd = Error(\"Suspense Exception: This is not a real error! It's an implementation detail of `use` to interrupt the current render. You must either rethrow it immediately, or move the `use` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\\n\\nTo handle async errors, wrap your component in an error boundary, or call the promise's `.catch` method and pass the result to `use`.\"),\n gg = Error(\"Suspense Exception: This is not a real error, and should not leak into userspace. If you're seeing this, it's likely a bug in React.\"),\n am = Error(\"Suspense Exception: This is not a real error! It's an implementation detail of `useActionState` to interrupt the current render. You must either rethrow it immediately, or move the `useActionState` call outside of the `try/catch` block. Capturing without rethrowing will lead to unexpected behavior.\\n\\nTo handle async errors, wrap your component in an error boundary.\"),\n im = {\n then: function () {\n console.error('Internal React error: A listener was unexpectedly attached to a \"noop\" thenable. This is a bug in React. Please file an issue.');\n }\n },\n ru = null,\n dp = !1,\n fd = null,\n fp = 0,\n oe = null,\n yg,\n Sy = yg = !1,\n ky = {},\n wy = {},\n Py = {};\n Zo = function (e, n, o) {\n if (o !== null && typeof o == \"object\" && o._store && (!o._store.validated && o.key == null || o._store.validated === 2)) {\n if (typeof o._store != \"object\") throw Error(\"React Component in warnForMissingKey should have a _store. This error is likely caused by a bug in React. Please file an issue.\");\n o._store.validated = 1;\n var i = G(e),\n s = i || \"null\";\n if (!ky[s]) {\n ky[s] = !0, o = o._owner, e = e._debugOwner;\n var u = \"\";\n e && typeof e.tag == \"number\" && (s = G(e)) && (u = `\n\nCheck the render method of \\`` + s + \"`.\"), u || i && (u = `\n\nCheck the top-level render call using <` + i + \">.\");\n var f = \"\";\n o != null && e !== o && (i = null, typeof o.tag == \"number\" ? i = G(o) : typeof o.name == \"string\" && (i = o.name), i && (f = \" It was passed a child from \" + i + \".\")), B(n, function () {\n console.error('Each child in a list should have a unique \"key\" prop.%s%s See https://react.dev/link/warning-keys for more information.', u, f);\n });\n }\n }\n };\n var ou = rs(!0),\n xy = rs(!1),\n pp = 1,\n gi = 2,\n io = [],\n pd = 0,\n bg = 0,\n zy = 0,\n Cy = 1,\n Ty = 2,\n vg = 3,\n Cl = !1,\n _y = !1,\n Sg = null,\n kg = !1,\n hd = st(null),\n lm = st(0),\n _r = st(null),\n Qo = null,\n md = 1,\n hp = 2,\n Sn = st(0),\n sm = 0,\n lo = 1,\n Wt = 2,\n Rr = 4,\n Ut = 8,\n gd,\n Ry = new Set(),\n Ey = new Set(),\n wg = new Set(),\n Iy = new Set(),\n yi = 0,\n Y = null,\n Ae = null,\n zn = null,\n um = !1,\n yd = !1,\n au = !1,\n cm = 0,\n mp = 0,\n bi = null,\n Qb = 0,\n $b = 25,\n z = null,\n so = null,\n vi = -1,\n gp = !1,\n yp = {\n readContext: Ee,\n use: we,\n useCallback: Ye,\n useContext: Ye,\n useEffect: Ye,\n useImperativeHandle: Ye,\n useLayoutEffect: Ye,\n useInsertionEffect: Ye,\n useMemo: Ye,\n useReducer: Ye,\n useRef: Ye,\n useState: Ye,\n useDebugValue: Ye,\n useDeferredValue: Ye,\n useTransition: Ye,\n useSyncExternalStore: Ye,\n useId: Ye,\n useHostTransitionStatus: Ye,\n useFormState: Ye,\n useActionState: Ye,\n useOptimistic: Ye,\n useMemoCache: Ye,\n useCacheRefresh: Ye\n };\n yp.useEffectEvent = Ye;\n var Pg = null,\n Ly = null,\n xg = null,\n Ny = null,\n Ca = null,\n $o = null,\n dm = null;\n Pg = {\n readContext: function (e) {\n return Ee(e);\n },\n use: we,\n useCallback: function (e, n) {\n return z = \"useCallback\", ee(), gt(n), Ku(e, n);\n },\n useContext: function (e) {\n return z = \"useContext\", ee(), Ee(e);\n },\n useEffect: function (e, n) {\n return z = \"useEffect\", ee(), gt(n), yt(e, n);\n },\n useImperativeHandle: function (e, n, o) {\n return z = \"useImperativeHandle\", ee(), gt(o), Xu(e, n, o);\n },\n useInsertionEffect: function (e, n) {\n z = \"useInsertionEffect\", ee(), gt(n), To(4, Wt, e, n);\n },\n useLayoutEffect: function (e, n) {\n return z = \"useLayoutEffect\", ee(), gt(n), _o(e, n);\n },\n useMemo: function (e, n) {\n z = \"useMemo\", ee(), gt(n);\n var o = x.H;\n x.H = Ca;\n try {\n return ec(e, n);\n } finally {\n x.H = o;\n }\n },\n useReducer: function (e, n, o) {\n z = \"useReducer\", ee();\n var i = x.H;\n x.H = Ca;\n try {\n return $u(e, n, o);\n } finally {\n x.H = i;\n }\n },\n useRef: function (e) {\n return z = \"useRef\", ee(), br(e);\n },\n useState: function (e) {\n z = \"useState\", ee();\n var n = x.H;\n x.H = Ca;\n try {\n return $i(e);\n } finally {\n x.H = n;\n }\n },\n useDebugValue: function () {\n z = \"useDebugValue\", ee();\n },\n useDeferredValue: function (e, n) {\n return z = \"useDeferredValue\", ee(), ms(e, n);\n },\n useTransition: function () {\n return z = \"useTransition\", ee(), tc();\n },\n useSyncExternalStore: function (e, n, o) {\n return z = \"useSyncExternalStore\", ee(), Vu(e, n, o);\n },\n useId: function () {\n return z = \"useId\", ee(), bs();\n },\n useFormState: function (e, n) {\n return z = \"useFormState\", ee(), Mi(), tn(e, n);\n },\n useActionState: function (e, n) {\n return z = \"useActionState\", ee(), tn(e, n);\n },\n useOptimistic: function (e) {\n return z = \"useOptimistic\", ee(), Ju(e);\n },\n useHostTransitionStatus: ia,\n useMemoCache: Oa,\n useCacheRefresh: function () {\n return z = \"useCacheRefresh\", ee(), la();\n },\n useEffectEvent: function (e) {\n return z = \"useEffectEvent\", ee(), ra(e);\n }\n }, Ly = {\n readContext: function (e) {\n return Ee(e);\n },\n use: we,\n useCallback: function (e, n) {\n return z = \"useCallback\", N(), Ku(e, n);\n },\n useContext: function (e) {\n return z = \"useContext\", N(), Ee(e);\n },\n useEffect: function (e, n) {\n return z = \"useEffect\", N(), yt(e, n);\n },\n useImperativeHandle: function (e, n, o) {\n return z = \"useImperativeHandle\", N(), Xu(e, n, o);\n },\n useInsertionEffect: function (e, n) {\n z = \"useInsertionEffect\", N(), To(4, Wt, e, n);\n },\n useLayoutEffect: function (e, n) {\n return z = \"useLayoutEffect\", N(), _o(e, n);\n },\n useMemo: function (e, n) {\n z = \"useMemo\", N();\n var o = x.H;\n x.H = Ca;\n try {\n return ec(e, n);\n } finally {\n x.H = o;\n }\n },\n useReducer: function (e, n, o) {\n z = \"useReducer\", N();\n var i = x.H;\n x.H = Ca;\n try {\n return $u(e, n, o);\n } finally {\n x.H = i;\n }\n },\n useRef: function (e) {\n return z = \"useRef\", N(), br(e);\n },\n useState: function (e) {\n z = \"useState\", N();\n var n = x.H;\n x.H = Ca;\n try {\n return $i(e);\n } finally {\n x.H = n;\n }\n },\n useDebugValue: function () {\n z = \"useDebugValue\", N();\n },\n useDeferredValue: function (e, n) {\n return z = \"useDeferredValue\", N(), ms(e, n);\n },\n useTransition: function () {\n return z = \"useTransition\", N(), tc();\n },\n useSyncExternalStore: function (e, n, o) {\n return z = \"useSyncExternalStore\", N(), Vu(e, n, o);\n },\n useId: function () {\n return z = \"useId\", N(), bs();\n },\n useActionState: function (e, n) {\n return z = \"useActionState\", N(), tn(e, n);\n },\n useFormState: function (e, n) {\n return z = \"useFormState\", N(), Mi(), tn(e, n);\n },\n useOptimistic: function (e) {\n return z = \"useOptimistic\", N(), Ju(e);\n },\n useHostTransitionStatus: ia,\n useMemoCache: Oa,\n useCacheRefresh: function () {\n return z = \"useCacheRefresh\", N(), la();\n },\n useEffectEvent: function (e) {\n return z = \"useEffectEvent\", N(), ra(e);\n }\n }, xg = {\n readContext: function (e) {\n return Ee(e);\n },\n use: we,\n useCallback: function (e, n) {\n return z = \"useCallback\", N(), Ma(e, n);\n },\n useContext: function (e) {\n return z = \"useContext\", N(), Ee(e);\n },\n useEffect: function (e, n) {\n z = \"useEffect\", N(), Qn(2048, Ut, e, n);\n },\n useImperativeHandle: function (e, n, o) {\n return z = \"useImperativeHandle\", N(), aa(e, n, o);\n },\n useInsertionEffect: function (e, n) {\n return z = \"useInsertionEffect\", N(), Qn(4, Wt, e, n);\n },\n useLayoutEffect: function (e, n) {\n return z = \"useLayoutEffect\", N(), Qn(4, Rr, e, n);\n },\n useMemo: function (e, n) {\n z = \"useMemo\", N();\n var o = x.H;\n x.H = $o;\n try {\n return Vi(e, n);\n } finally {\n x.H = o;\n }\n },\n useReducer: function (e, n, o) {\n z = \"useReducer\", N();\n var i = x.H;\n x.H = $o;\n try {\n return Br(e, n, o);\n } finally {\n x.H = i;\n }\n },\n useRef: function () {\n return z = \"useRef\", N(), xe().memoizedState;\n },\n useState: function () {\n z = \"useState\", N();\n var e = x.H;\n x.H = $o;\n try {\n return Br(gr);\n } finally {\n x.H = e;\n }\n },\n useDebugValue: function () {\n z = \"useDebugValue\", N();\n },\n useDeferredValue: function (e, n) {\n return z = \"useDeferredValue\", N(), nc(e, n);\n },\n useTransition: function () {\n return z = \"useTransition\", N(), Qp();\n },\n useSyncExternalStore: function (e, n, o) {\n return z = \"useSyncExternalStore\", N(), ta(e, n, o);\n },\n useId: function () {\n return z = \"useId\", N(), xe().memoizedState;\n },\n useFormState: function (e) {\n return z = \"useFormState\", N(), Mi(), hs(e);\n },\n useActionState: function (e) {\n return z = \"useActionState\", N(), hs(e);\n },\n useOptimistic: function (e, n) {\n return z = \"useOptimistic\", N(), rf(e, n);\n },\n useHostTransitionStatus: ia,\n useMemoCache: Oa,\n useCacheRefresh: function () {\n return z = \"useCacheRefresh\", N(), xe().memoizedState;\n },\n useEffectEvent: function (e) {\n return z = \"useEffectEvent\", N(), oa(e);\n }\n }, Ny = {\n readContext: function (e) {\n return Ee(e);\n },\n use: we,\n useCallback: function (e, n) {\n return z = \"useCallback\", N(), Ma(e, n);\n },\n useContext: function (e) {\n return z = \"useContext\", N(), Ee(e);\n },\n useEffect: function (e, n) {\n z = \"useEffect\", N(), Qn(2048, Ut, e, n);\n },\n useImperativeHandle: function (e, n, o) {\n return z = \"useImperativeHandle\", N(), aa(e, n, o);\n },\n useInsertionEffect: function (e, n) {\n return z = \"useInsertionEffect\", N(), Qn(4, Wt, e, n);\n },\n useLayoutEffect: function (e, n) {\n return z = \"useLayoutEffect\", N(), Qn(4, Rr, e, n);\n },\n useMemo: function (e, n) {\n z = \"useMemo\", N();\n var o = x.H;\n x.H = dm;\n try {\n return Vi(e, n);\n } finally {\n x.H = o;\n }\n },\n useReducer: function (e, n, o) {\n z = \"useReducer\", N();\n var i = x.H;\n x.H = dm;\n try {\n return Qi(e, n, o);\n } finally {\n x.H = i;\n }\n },\n useRef: function () {\n return z = \"useRef\", N(), xe().memoizedState;\n },\n useState: function () {\n z = \"useState\", N();\n var e = x.H;\n x.H = dm;\n try {\n return Qi(gr);\n } finally {\n x.H = e;\n }\n },\n useDebugValue: function () {\n z = \"useDebugValue\", N();\n },\n useDeferredValue: function (e, n) {\n return z = \"useDeferredValue\", N(), sf(e, n);\n },\n useTransition: function () {\n return z = \"useTransition\", N(), Ro();\n },\n useSyncExternalStore: function (e, n, o) {\n return z = \"useSyncExternalStore\", N(), ta(e, n, o);\n },\n useId: function () {\n return z = \"useId\", N(), xe().memoizedState;\n },\n useFormState: function (e) {\n return z = \"useFormState\", N(), Mi(), $t(e);\n },\n useActionState: function (e) {\n return z = \"useActionState\", N(), $t(e);\n },\n useOptimistic: function (e, n) {\n return z = \"useOptimistic\", N(), of(e, n);\n },\n useHostTransitionStatus: ia,\n useMemoCache: Oa,\n useCacheRefresh: function () {\n return z = \"useCacheRefresh\", N(), xe().memoizedState;\n },\n useEffectEvent: function (e) {\n return z = \"useEffectEvent\", N(), oa(e);\n }\n }, Ca = {\n readContext: function (e) {\n return Ce(), Ee(e);\n },\n use: function (e) {\n return D(), we(e);\n },\n useCallback: function (e, n) {\n return z = \"useCallback\", D(), ee(), Ku(e, n);\n },\n useContext: function (e) {\n return z = \"useContext\", D(), ee(), Ee(e);\n },\n useEffect: function (e, n) {\n return z = \"useEffect\", D(), ee(), yt(e, n);\n },\n useImperativeHandle: function (e, n, o) {\n return z = \"useImperativeHandle\", D(), ee(), Xu(e, n, o);\n },\n useInsertionEffect: function (e, n) {\n z = \"useInsertionEffect\", D(), ee(), To(4, Wt, e, n);\n },\n useLayoutEffect: function (e, n) {\n return z = \"useLayoutEffect\", D(), ee(), _o(e, n);\n },\n useMemo: function (e, n) {\n z = \"useMemo\", D(), ee();\n var o = x.H;\n x.H = Ca;\n try {\n return ec(e, n);\n } finally {\n x.H = o;\n }\n },\n useReducer: function (e, n, o) {\n z = \"useReducer\", D(), ee();\n var i = x.H;\n x.H = Ca;\n try {\n return $u(e, n, o);\n } finally {\n x.H = i;\n }\n },\n useRef: function (e) {\n return z = \"useRef\", D(), ee(), br(e);\n },\n useState: function (e) {\n z = \"useState\", D(), ee();\n var n = x.H;\n x.H = Ca;\n try {\n return $i(e);\n } finally {\n x.H = n;\n }\n },\n useDebugValue: function () {\n z = \"useDebugValue\", D(), ee();\n },\n useDeferredValue: function (e, n) {\n return z = \"useDeferredValue\", D(), ee(), ms(e, n);\n },\n useTransition: function () {\n return z = \"useTransition\", D(), ee(), tc();\n },\n useSyncExternalStore: function (e, n, o) {\n return z = \"useSyncExternalStore\", D(), ee(), Vu(e, n, o);\n },\n useId: function () {\n return z = \"useId\", D(), ee(), bs();\n },\n useFormState: function (e, n) {\n return z = \"useFormState\", D(), ee(), tn(e, n);\n },\n useActionState: function (e, n) {\n return z = \"useActionState\", D(), ee(), tn(e, n);\n },\n useOptimistic: function (e) {\n return z = \"useOptimistic\", D(), ee(), Ju(e);\n },\n useMemoCache: function (e) {\n return D(), Oa(e);\n },\n useHostTransitionStatus: ia,\n useCacheRefresh: function () {\n return z = \"useCacheRefresh\", ee(), la();\n },\n useEffectEvent: function (e) {\n return z = \"useEffectEvent\", D(), ee(), ra(e);\n }\n }, $o = {\n readContext: function (e) {\n return Ce(), Ee(e);\n },\n use: function (e) {\n return D(), we(e);\n },\n useCallback: function (e, n) {\n return z = \"useCallback\", D(), N(), Ma(e, n);\n },\n useContext: function (e) {\n return z = \"useContext\", D(), N(), Ee(e);\n },\n useEffect: function (e, n) {\n z = \"useEffect\", D(), N(), Qn(2048, Ut, e, n);\n },\n useImperativeHandle: function (e, n, o) {\n return z = \"useImperativeHandle\", D(), N(), aa(e, n, o);\n },\n useInsertionEffect: function (e, n) {\n return z = \"useInsertionEffect\", D(), N(), Qn(4, Wt, e, n);\n },\n useLayoutEffect: function (e, n) {\n return z = \"useLayoutEffect\", D(), N(), Qn(4, Rr, e, n);\n },\n useMemo: function (e, n) {\n z = \"useMemo\", D(), N();\n var o = x.H;\n x.H = $o;\n try {\n return Vi(e, n);\n } finally {\n x.H = o;\n }\n },\n useReducer: function (e, n, o) {\n z = \"useReducer\", D(), N();\n var i = x.H;\n x.H = $o;\n try {\n return Br(e, n, o);\n } finally {\n x.H = i;\n }\n },\n useRef: function () {\n return z = \"useRef\", D(), N(), xe().memoizedState;\n },\n useState: function () {\n z = \"useState\", D(), N();\n var e = x.H;\n x.H = $o;\n try {\n return Br(gr);\n } finally {\n x.H = e;\n }\n },\n useDebugValue: function () {\n z = \"useDebugValue\", D(), N();\n },\n useDeferredValue: function (e, n) {\n return z = \"useDeferredValue\", D(), N(), nc(e, n);\n },\n useTransition: function () {\n return z = \"useTransition\", D(), N(), Qp();\n },\n useSyncExternalStore: function (e, n, o) {\n return z = \"useSyncExternalStore\", D(), N(), ta(e, n, o);\n },\n useId: function () {\n return z = \"useId\", D(), N(), xe().memoizedState;\n },\n useFormState: function (e) {\n return z = \"useFormState\", D(), N(), hs(e);\n },\n useActionState: function (e) {\n return z = \"useActionState\", D(), N(), hs(e);\n },\n useOptimistic: function (e, n) {\n return z = \"useOptimistic\", D(), N(), rf(e, n);\n },\n useMemoCache: function (e) {\n return D(), Oa(e);\n },\n useHostTransitionStatus: ia,\n useCacheRefresh: function () {\n return z = \"useCacheRefresh\", N(), xe().memoizedState;\n },\n useEffectEvent: function (e) {\n return z = \"useEffectEvent\", D(), N(), oa(e);\n }\n }, dm = {\n readContext: function (e) {\n return Ce(), Ee(e);\n },\n use: function (e) {\n return D(), we(e);\n },\n useCallback: function (e, n) {\n return z = \"useCallback\", D(), N(), Ma(e, n);\n },\n useContext: function (e) {\n return z = \"useContext\", D(), N(), Ee(e);\n },\n useEffect: function (e, n) {\n z = \"useEffect\", D(), N(), Qn(2048, Ut, e, n);\n },\n useImperativeHandle: function (e, n, o) {\n return z = \"useImperativeHandle\", D(), N(), aa(e, n, o);\n },\n useInsertionEffect: function (e, n) {\n return z = \"useInsertionEffect\", D(), N(), Qn(4, Wt, e, n);\n },\n useLayoutEffect: function (e, n) {\n return z = \"useLayoutEffect\", D(), N(), Qn(4, Rr, e, n);\n },\n useMemo: function (e, n) {\n z = \"useMemo\", D(), N();\n var o = x.H;\n x.H = $o;\n try {\n return Vi(e, n);\n } finally {\n x.H = o;\n }\n },\n useReducer: function (e, n, o) {\n z = \"useReducer\", D(), N();\n var i = x.H;\n x.H = $o;\n try {\n return Qi(e, n, o);\n } finally {\n x.H = i;\n }\n },\n useRef: function () {\n return z = \"useRef\", D(), N(), xe().memoizedState;\n },\n useState: function () {\n z = \"useState\", D(), N();\n var e = x.H;\n x.H = $o;\n try {\n return Qi(gr);\n } finally {\n x.H = e;\n }\n },\n useDebugValue: function () {\n z = \"useDebugValue\", D(), N();\n },\n useDeferredValue: function (e, n) {\n return z = \"useDeferredValue\", D(), N(), sf(e, n);\n },\n useTransition: function () {\n return z = \"useTransition\", D(), N(), Ro();\n },\n useSyncExternalStore: function (e, n, o) {\n return z = \"useSyncExternalStore\", D(), N(), ta(e, n, o);\n },\n useId: function () {\n return z = \"useId\", D(), N(), xe().memoizedState;\n },\n useFormState: function (e) {\n return z = \"useFormState\", D(), N(), $t(e);\n },\n useActionState: function (e) {\n return z = \"useActionState\", D(), N(), $t(e);\n },\n useOptimistic: function (e, n) {\n return z = \"useOptimistic\", D(), N(), of(e, n);\n },\n useMemoCache: function (e) {\n return D(), Oa(e);\n },\n useHostTransitionStatus: ia,\n useCacheRefresh: function () {\n return z = \"useCacheRefresh\", N(), xe().memoizedState;\n },\n useEffectEvent: function (e) {\n return z = \"useEffectEvent\", D(), N(), oa(e);\n }\n };\n var Fy = {},\n Hy = new Set(),\n Ay = new Set(),\n jy = new Set(),\n Dy = new Set(),\n Wy = new Set(),\n Uy = new Set(),\n By = new Set(),\n Oy = new Set(),\n My = new Set(),\n Qy = new Set();\n Object.freeze(Fy);\n var zg = {\n enqueueSetState: function (e, n, o) {\n e = e._reactInternals;\n var i = Nt(e),\n s = zo(i);\n s.payload = n, o != null && (df(o), s.callback = o), n = Mt(e, s, i), n !== null && (ur(i, \"this.setState()\", e), We(n, e, i), Bi(n, e, i));\n },\n enqueueReplaceState: function (e, n, o) {\n e = e._reactInternals;\n var i = Nt(e),\n s = zo(i);\n s.tag = Cy, s.payload = n, o != null && (df(o), s.callback = o), n = Mt(e, s, i), n !== null && (ur(i, \"this.replaceState()\", e), We(n, e, i), Bi(n, e, i));\n },\n enqueueForceUpdate: function (e, n) {\n e = e._reactInternals;\n var o = Nt(e),\n i = zo(o);\n i.tag = Ty, n != null && (df(n), i.callback = n), n = Mt(e, i, o), n !== null && (ur(o, \"this.forceUpdate()\", e), We(n, e, o), Bi(n, e, o));\n }\n },\n bd = null,\n Cg = null,\n Tg = Error(\"This is not a real error. It's an implementation detail of React's selective hydration feature. If this leaks into userspace, it's a bug in React. Please file an issue.\"),\n Cn = !1,\n $y = {},\n Vy = {},\n qy = {},\n Gy = {},\n vd = !1,\n Jy = {},\n fm = {},\n _g = {\n dehydrated: null,\n treeContext: null,\n retryLane: 0,\n hydrationErrors: null\n },\n Zy = !1,\n Yy = null;\n Yy = new Set();\n var Si = !1,\n Tn = !1,\n Rg = !1,\n Xy = typeof WeakSet == \"function\" ? WeakSet : Set,\n Gn = null,\n Sd = null,\n kd = null,\n _n = null,\n nr = !1,\n Vo = null,\n Wn = !1,\n wd = 8192,\n Vb = {\n getCacheForType: function (e) {\n var n = Ee(un),\n o = n.data.get(e);\n return o === void 0 && (o = e(), n.data.set(e, o)), o;\n },\n cacheSignal: function () {\n return Ee(un).controller.signal;\n },\n getOwner: function () {\n return di;\n }\n },\n pm = 0,\n hm = 1,\n mm = 2,\n gm = 3,\n ym = 4;\n if (typeof Symbol == \"function\" && Symbol.for) {\n var bp = Symbol.for;\n pm = bp(\"selector.component\"), hm = bp(\"selector.has_pseudo_class\"), mm = bp(\"selector.role\"), gm = bp(\"selector.test_id\"), ym = bp(\"selector.text\");\n }\n var bm = [],\n qb = typeof WeakMap == \"function\" ? WeakMap : Map,\n Jn = 0,\n Zn = 2,\n uo = 4,\n ki = 0,\n vp = 1,\n iu = 2,\n vm = 3,\n Tl = 4,\n Sm = 6,\n Ky = 5,\n ye = Jn,\n je = null,\n se = null,\n ae = 0,\n tr = 0,\n km = 1,\n lu = 2,\n Sp = 3,\n eb = 4,\n Eg = 5,\n kp = 6,\n wm = 7,\n Ig = 8,\n su = 9,\n Le = tr,\n Er = null,\n _l = !1,\n Pd = !1,\n Lg = !1,\n Ta = 0,\n nn = ki,\n Rl = 0,\n El = 0,\n Ng = 0,\n rr = 0,\n uu = 0,\n wp = null,\n Bt = null,\n Pm = !1,\n xm = 0,\n nb = 0,\n tb = 300,\n Pp = 1 / 0,\n Fg = 500,\n xp = null,\n gn = null,\n Il = null,\n zm = 0,\n Hg = 1,\n Ag = 2,\n rb = 3,\n Ll = 0,\n ob = 1,\n ab = 2,\n ib = 3,\n lb = 4,\n Cm = 5,\n Rn = 0,\n Nl = null,\n xd = null,\n qo = 0,\n jg = 0,\n Dg = -0,\n Wg = null,\n sb = null,\n ub = null,\n Go = zm,\n cb = null,\n Gb = 50,\n zp = 0,\n Ug = null,\n Bg = !1,\n Tm = !1,\n Jb = 50,\n cu = 0,\n Cp = null,\n zd = !1,\n _m = null,\n db = !1,\n fb = new Set(),\n Zb = {},\n co = null,\n Cd = null,\n pb = !1;\n try {\n var o0 = Object.preventExtensions({});\n } catch {\n pb = !0;\n }\n var hb = !1,\n mb = {},\n gb = null,\n yb = null,\n bb = null,\n vb = null,\n Sb = null,\n kb = null,\n wb = null,\n Pb = null,\n xb = null,\n zb = null;\n return gb = function (e, n, o, i) {\n n = Yn(e, n), n !== null && (o = _d(n.memoizedState, o, 0, i), n.memoizedState = o, n.baseState = o, e.memoizedProps = ze({}, e.memoizedProps), o = On(e, 2), o !== null && We(o, e, 2));\n }, yb = function (e, n, o) {\n n = Yn(e, n), n !== null && (o = du(n.memoizedState, o, 0), n.memoizedState = o, n.baseState = o, e.memoizedProps = ze({}, e.memoizedProps), o = On(e, 2), o !== null && We(o, e, 2));\n }, bb = function (e, n, o, i) {\n n = Yn(e, n), n !== null && (o = F(n.memoizedState, o, i), n.memoizedState = o, n.baseState = o, e.memoizedProps = ze({}, e.memoizedProps), o = On(e, 2), o !== null && We(o, e, 2));\n }, vb = function (e, n, o) {\n e.pendingProps = _d(e.memoizedProps, n, 0, o), e.alternate && (e.alternate.pendingProps = e.pendingProps), n = On(e, 2), n !== null && We(n, e, 2);\n }, Sb = function (e, n) {\n e.pendingProps = du(e.memoizedProps, n, 0), e.alternate && (e.alternate.pendingProps = e.pendingProps), n = On(e, 2), n !== null && We(n, e, 2);\n }, kb = function (e, n, o) {\n e.pendingProps = F(e.memoizedProps, n, o), e.alternate && (e.alternate.pendingProps = e.pendingProps), n = On(e, 2), n !== null && We(n, e, 2);\n }, wb = function (e) {\n var n = On(e, 2);\n n !== null && We(n, e, 2);\n }, Pb = function (e) {\n var n = ut(),\n o = On(e, n);\n o !== null && We(o, e, n);\n }, xb = function (e) {\n pu = e;\n }, zb = function (e) {\n fu = e;\n }, le.attemptContinuousHydration = function (e) {\n if (e.tag === 13 || e.tag === 31) {\n var n = On(e, 67108864);\n n !== null && We(n, e, 67108864), rl(e, 67108864);\n }\n }, le.attemptHydrationAtCurrentPriority = function (e) {\n if (e.tag === 13 || e.tag === 31) {\n var n = Nt(e);\n n = Xo(n);\n var o = On(e, n);\n o !== null && We(o, e, n), rl(e, n);\n }\n }, le.attemptSynchronousHydration = function (e) {\n switch (e.tag) {\n case 3:\n if (e = e.stateNode, e.current.memoizedState.isDehydrated) {\n var n = _t(e.pendingLanes);\n if (n !== 0) {\n for (e.pendingLanes |= 2, e.entangledLanes |= 2; n;) {\n var o = 1 << 31 - vn(n);\n e.entanglements[1] |= o, n &= ~o;\n }\n Kn(e), (ye & (Zn | uo)) === Jn && (Pp = me() + Fg, Wa(0, !1));\n }\n }\n break;\n case 31:\n case 13:\n n = On(e, 2), n !== null && We(n, e, 2), Ls(), rl(e, 2);\n }\n }, le.batchedUpdates = function (e, n) {\n return e(n);\n }, le.createComponentSelector = function (e) {\n return {\n $$typeof: pm,\n value: e\n };\n }, le.createContainer = function (e, n, o, i, s, u, f, p, g, S) {\n return Ka(e, n, !1, null, o, i, u, null, f, p, g, S);\n }, le.createHasPseudoClassSelector = function (e) {\n return {\n $$typeof: hm,\n value: e\n };\n }, le.createHydrationContainer = function (e, n, o, i, s, u, f, p, g, S, T, _, I, O) {\n var _n2;\n return e = Ka(o, i, !0, e, s, u, p, O, g, S, T, _), e.context = Dh(null), o = e.current, i = Nt(o), i = Xo(i), s = zo(i), s.callback = (_n2 = n) != null ? _n2 : null, Mt(o, s, i), ur(i, \"hydrateRoot()\", null), n = i, e.current.lanes = n, Ci(e, n), Kn(e), e;\n }, le.createPortal = function (e, n, o) {\n var i = 3 < arguments.length && arguments[3] !== void 0 ? arguments[3] : null;\n try {\n vt(i);\n var s = !1;\n } catch {\n s = !0;\n }\n return s && (console.error(\"The provided key is an unsupported type %s. This value must be coerced to a string before using it here.\", typeof Symbol == \"function\" && Symbol.toStringTag && i[Symbol.toStringTag] || i.constructor.name || \"Object\"), vt(i)), {\n $$typeof: Ao,\n key: i == null ? null : \"\" + i,\n children: e,\n containerInfo: n,\n implementation: o\n };\n }, le.createRoleSelector = function (e) {\n return {\n $$typeof: mm,\n value: e\n };\n }, le.createTestNameSelector = function (e) {\n return {\n $$typeof: gm,\n value: e\n };\n }, le.createTextSelector = function (e) {\n return {\n $$typeof: ym,\n value: e\n };\n }, le.defaultOnCaughtError = function (e) {\n var n = bd ? \"The above error occurred in the <\" + bd + \"> component.\" : \"The above error occurred in one of your React components.\",\n o = \"React will try to recreate this component tree from scratch using the error boundary you provided, \" + ((Cg || \"Anonymous\") + \".\");\n typeof e == \"object\" && e !== null && typeof e.environmentName == \"string\" ? ri(\"error\", [`%o\n\n%s\n\n%s\n`, e, n, o], e.environmentName)() : console.error(`%o\n\n%s\n\n%s\n`, e, n, o);\n }, le.defaultOnRecoverableError = function (e) {\n qg(e);\n }, le.defaultOnUncaughtError = function (e) {\n qg(e), console.warn(`%s\n\n%s\n`, bd ? \"An error occurred in the <\" + bd + \"> component.\" : \"An error occurred in one of your React components.\", `Consider adding an error boundary to your tree to customize error handling behavior.\nVisit https://react.dev/link/error-boundaries to learn more about error boundaries.`);\n }, le.deferredUpdates = function (e) {\n var n = x.T,\n o = wt();\n try {\n return an(32), x.T = null, e();\n } finally {\n an(o), x.T = n;\n }\n }, le.discreteUpdates = function (e, n, o, i, s) {\n var u = x.T,\n f = wt();\n try {\n return an(2), x.T = null, e(n, o, i, s);\n } finally {\n an(f), x.T = u, ye === Jn && (Pp = me() + Fg);\n }\n }, le.findAllNodes = kc, le.findBoundingRects = function (e, n) {\n if (!xr) throw Error(\"Test selector API is not supported by this renderer.\");\n n = kc(e, n), e = [];\n for (var o = 0; o < n.length; o++) e.push(ma(n[o]));\n for (n = e.length - 1; 0 < n; n--) {\n o = e[n];\n for (var i = o.x, s = i + o.width, u = o.y, f = u + o.height, p = n - 1; 0 <= p; p--) if (n !== p) {\n var g = e[p],\n S = g.x,\n T = S + g.width,\n _ = g.y,\n I = _ + g.height;\n if (i >= S && u >= _ && s <= T && f <= I) {\n e.splice(n, 1);\n break;\n } else if (i !== S || o.width !== g.width || I < u || _ > f) {\n if (!(u !== _ || o.height !== g.height || T < i || S > s)) {\n S > i && (g.width += S - i, g.x = i), T < s && (g.width = s - S), e.splice(n, 1);\n break;\n }\n } else {\n _ > u && (g.height += _ - u, g.y = u), I < f && (g.height = f - _), e.splice(n, 1);\n break;\n }\n }\n }\n return e;\n }, le.findHostInstance = function (e) {\n var n = e._reactInternals;\n if (n === void 0) throw typeof e.render == \"function\" ? Error(\"Unable to find node on an unmounted component.\") : (e = Object.keys(e).join(\",\"), Error(\"Argument appears to not be a ReactComponent. Keys: \" + e));\n return e = mu(n), e === null ? null : ot(e.stateNode);\n }, le.findHostInstanceWithNoPortals = function (e) {\n return e = Ed(e), e = e !== null ? _p(e) : null, e === null ? null : ot(e.stateNode);\n }, le.findHostInstanceWithWarning = function (e, n) {\n var o = e._reactInternals;\n if (o === void 0) throw typeof e.render == \"function\" ? Error(\"Unable to find node on an unmounted component.\") : (e = Object.keys(e).join(\",\"), Error(\"Argument appears to not be a ReactComponent. Keys: \" + e));\n if (e = mu(o), e === null) return null;\n if (e.mode & 8) {\n var i = G(o) || \"Component\";\n mb[i] || (mb[i] = !0, B(e, function () {\n o.mode & 8 ? console.error(\"%s is deprecated in StrictMode. %s was passed an instance of %s which is inside StrictMode. Instead, add a ref directly to the element you want to reference. Learn more about using refs safely here: https://react.dev/link/strict-mode-find-node\", n, n, i) : console.error(\"%s is deprecated in StrictMode. %s was passed an instance of %s which renders StrictMode children. Instead, add a ref directly to the element you want to reference. Learn more about using refs safely here: https://react.dev/link/strict-mode-find-node\", n, n, i);\n }));\n }\n return ot(e.stateNode);\n }, le.flushPassiveEffects = el, le.flushSyncFromReconciler = function (e) {\n var n = ye;\n ye |= 1;\n var o = x.T,\n i = wt();\n try {\n if (an(2), x.T = null, e) return e();\n } finally {\n an(i), x.T = o, ye = n, (ye & (Zn | uo)) === Jn && Wa(0, !1);\n }\n }, le.flushSyncWork = Ls, le.focusWithin = function (e, n) {\n if (!xr) throw Error(\"Test selector API is not supported by this renderer.\");\n for (e = Ef(e), n = hh(e, n), n = Array.from(n), e = 0; e < n.length;) {\n var o = n[e++],\n i = o.tag;\n if (!Kr(o)) {\n if ((i === 5 || i === 26 || i === 27) && Ft(o.stateNode)) return !0;\n for (o = o.child; o !== null;) n.push(o), o = o.sibling;\n }\n }\n return !1;\n }, le.getFindAllNodesFailureDescription = function (e, n) {\n if (!xr) throw Error(\"Test selector API is not supported by this renderer.\");\n var o = 0,\n i = [];\n e = [Ef(e), 0];\n for (var s = 0; s < e.length;) {\n var u = e[s++],\n f = u.tag,\n p = e[s++],\n g = n[p];\n if ((f !== 5 && f !== 26 && f !== 27 || !Kr(u)) && (If(u, g) && (i.push(Sc(g)), p++, p > o && (o = p)), p < n.length)) for (u = u.child; u !== null;) e.push(u, p), u = u.sibling;\n }\n if (o < n.length) {\n for (e = []; o < n.length; o++) e.push(Sc(n[o]));\n return `findAllNodes was able to match part of the selector:\n ` + (i.join(\" > \") + `\n\nNo matching component was found for:\n `) + e.join(\" > \");\n }\n return null;\n }, le.getPublicRootInstance = function (e) {\n if (e = e.current, !e.child) return null;\n switch (e.child.tag) {\n case 27:\n case 5:\n return ot(e.child.stateNode);\n default:\n return e.child.stateNode;\n }\n }, le.injectIntoDevTools = function () {\n var e = {\n bundleType: 1,\n version: Jt,\n rendererPackageName: Zt,\n currentDispatcherRef: x,\n reconcilerVersion: \"19.2.0\"\n };\n return jo !== null && (e.rendererConfig = jo), e.overrideHookState = gb, e.overrideHookStateDeletePath = yb, e.overrideHookStateRenamePath = bb, e.overrideProps = vb, e.overridePropsDeletePath = Sb, e.overridePropsRenamePath = kb, e.scheduleUpdate = wb, e.scheduleRetry = Pb, e.setErrorHandler = xb, e.setSuspenseHandler = zb, e.scheduleRefresh = hu, e.scheduleRoot = Fl, e.setRefreshHandler = Ir, e.getCurrentFiber = Ic, Ep(e);\n }, le.isAlreadyRendering = Ns, le.observeVisibleRects = function (e, n, o, i) {\n function s() {\n var S = kc(e, n);\n u.forEach(function (T) {\n 0 > S.indexOf(T) && g(T);\n }), S.forEach(function (T) {\n 0 > u.indexOf(T) && p(T);\n });\n }\n if (!xr) throw Error(\"Test selector API is not supported by this renderer.\");\n var u = kc(e, n);\n o = zr(u, o, i);\n var f = o.disconnect,\n p = o.observe,\n g = o.unobserve;\n return bm.push(s), {\n disconnect: function () {\n var S = bm.indexOf(s);\n 0 <= S && bm.splice(S, 1), f();\n }\n };\n }, le.shouldError = function (e) {\n return pu(e);\n }, le.shouldSuspend = function (e) {\n return fu(e);\n }, le.startHostTransition = function (e, n, o, i) {\n if (e.tag !== 5) throw Error(\"Expected the form instance to be a HostComponent. This is a bug in React.\");\n var s = uf(e).queue;\n Hp(e), nt(e, s, n, Xt, o === null ? Em : function () {\n x.T === null && console.error(\"requestFormReset was called outside a transition or action. To fix, move to an action, or wrap with startTransition.\");\n var u = uf(e);\n return u.next === null && (u = e.alternate.memoizedState), qi(e, u.next.queue, {}, Nt(e)), o(i);\n });\n }, le.updateContainer = function (e, n, o, i) {\n var s = n.current,\n u = Nt(s);\n return As(s, u, e, n, o, i), u;\n }, le.updateContainerSync = Wh, le;\n }, Tt.exports.default = Tt.exports, Object.defineProperty(Tt.exports, \"__esModule\", {\n value: !0\n }));\n }(Mg)), Mg.exports;\n}\nvar Eb;\nfunction n0() {\n return Eb || (Eb = 1, process.env.NODE_ENV === \"production\" ? Rm.exports = Kb() : Rm.exports = e0()), Rm.exports;\n}\nvar t0 = n0();\nconst r0 = Xb(t0);\n\nfunction createReconciler(config) {\n const reconciler = r0(config);\n\n // @ts-ignore DefinitelyTyped is not up to date\n reconciler.injectIntoDevTools();\n return reconciler;\n}\nconst NoEventPriority = 0;\n\n// TODO: handle constructor overloads\n// https://github.com/pmndrs/react-three-fiber/pull/2931\n// https://github.com/microsoft/TypeScript/issues/37079\n\nconst catalogue = {};\nconst PREFIX_REGEX = /^three(?=[A-Z])/;\nconst toPascalCase = type => `${type[0].toUpperCase()}${type.slice(1)}`;\nlet i = 0;\nconst isConstructor = object => typeof object === 'function';\nfunction extend(objects) {\n if (isConstructor(objects)) {\n const Component = `${i++}`;\n catalogue[Component] = objects;\n return Component;\n } else {\n Object.assign(catalogue, objects);\n }\n}\nfunction validateInstance(type, props) {\n // Get target from catalogue\n const name = toPascalCase(type);\n const target = catalogue[name];\n\n // Validate element target\n if (type !== 'primitive' && !target) throw new Error(`R3F: ${name} is not part of the THREE namespace! Did you forget to extend? See: https://docs.pmnd.rs/react-three-fiber/api/objects#using-3rd-party-objects-declaratively`);\n\n // Validate primitives\n if (type === 'primitive' && !props.object) throw new Error(`R3F: Primitives without 'object' are invalid!`);\n\n // Throw if an object or literal was passed for args\n if (props.args !== undefined && !Array.isArray(props.args)) throw new Error('R3F: The args prop must be an array!');\n}\nfunction createInstance(type, props, root) {\n var _props$object;\n // Remove three* prefix from elements if native element not present\n type = toPascalCase(type) in catalogue ? type : type.replace(PREFIX_REGEX, '');\n validateInstance(type, props);\n\n // Regenerate the R3F instance for primitives to simulate a new object\n if (type === 'primitive' && (_props$object = props.object) != null && _props$object.__r3f) delete props.object.__r3f;\n return prepare(props.object, root, type, props);\n}\nfunction hideInstance(instance) {\n if (!instance.isHidden) {\n var _instance$parent;\n if (instance.props.attach && (_instance$parent = instance.parent) != null && _instance$parent.object) {\n detach(instance.parent, instance);\n } else if (isObject3D(instance.object)) {\n instance.object.visible = false;\n }\n instance.isHidden = true;\n invalidateInstance(instance);\n }\n}\nfunction unhideInstance(instance) {\n if (instance.isHidden) {\n var _instance$parent2;\n if (instance.props.attach && (_instance$parent2 = instance.parent) != null && _instance$parent2.object) {\n attach(instance.parent, instance);\n } else if (isObject3D(instance.object) && instance.props.visible !== false) {\n instance.object.visible = true;\n }\n instance.isHidden = false;\n invalidateInstance(instance);\n }\n}\n\n// https://github.com/facebook/react/issues/20271\n// This will make sure events and attach are only handled once when trees are complete\nfunction handleContainerEffects(parent, child, beforeChild) {\n // Bail if tree isn't mounted or parent is not a container.\n // This ensures that the tree is finalized and React won't discard results to Suspense\n const state = child.root.getState();\n if (!parent.parent && parent.object !== state.scene) return;\n\n // Create & link object on first run\n if (!child.object) {\n var _child$props$object, _child$props$args;\n // Get target from catalogue\n const target = catalogue[toPascalCase(child.type)];\n\n // Create object\n child.object = (_child$props$object = child.props.object) != null ? _child$props$object : new target(...((_child$props$args = child.props.args) != null ? _child$props$args : []));\n child.object.__r3f = child;\n }\n\n // Set initial props\n applyProps(child.object, child.props);\n\n // Append instance\n if (child.props.attach) {\n attach(parent, child);\n } else if (isObject3D(child.object) && isObject3D(parent.object)) {\n const childIndex = parent.object.children.indexOf(beforeChild == null ? void 0 : beforeChild.object);\n if (beforeChild && childIndex !== -1) {\n // If the child is already in the parent's children array, move it to the new position\n // Otherwise, just insert it at the target position\n const existingIndex = parent.object.children.indexOf(child.object);\n if (existingIndex !== -1) {\n parent.object.children.splice(existingIndex, 1);\n const adjustedIndex = existingIndex < childIndex ? childIndex - 1 : childIndex;\n parent.object.children.splice(adjustedIndex, 0, child.object);\n } else {\n child.object.parent = parent.object;\n parent.object.children.splice(childIndex, 0, child.object);\n child.object.dispatchEvent({\n type: 'added'\n });\n parent.object.dispatchEvent({\n type: 'childadded',\n child: child.object\n });\n }\n } else {\n parent.object.add(child.object);\n }\n }\n\n // Link subtree\n for (const childInstance of child.children) handleContainerEffects(child, childInstance);\n\n // Tree was updated, request a frame\n invalidateInstance(child);\n}\nfunction appendChild(parent, child) {\n if (!child) return;\n\n // Link instances\n child.parent = parent;\n parent.children.push(child);\n\n // Attach tree once complete\n handleContainerEffects(parent, child);\n}\nfunction insertBefore(parent, child, beforeChild) {\n if (!child || !beforeChild) return;\n\n // Link instances\n child.parent = parent;\n const childIndex = parent.children.indexOf(beforeChild);\n if (childIndex !== -1) parent.children.splice(childIndex, 0, child);else parent.children.push(child);\n\n // Attach tree once complete\n handleContainerEffects(parent, child, beforeChild);\n}\nfunction disposeOnIdle(object) {\n if (typeof object.dispose === 'function') {\n const handleDispose = () => {\n try {\n object.dispose();\n } catch {\n // no-op\n }\n };\n\n // In a testing environment, cleanup immediately\n if (typeof IS_REACT_ACT_ENVIRONMENT !== 'undefined') handleDispose();\n // Otherwise, using a real GPU so schedule cleanup to prevent stalls\n else unstable_scheduleCallback(unstable_IdlePriority, handleDispose);\n }\n}\nfunction removeChild(parent, child, dispose) {\n if (!child) return;\n\n // Unlink instances\n child.parent = null;\n const childIndex = parent.children.indexOf(child);\n if (childIndex !== -1) parent.children.splice(childIndex, 1);\n\n // Eagerly tear down tree\n if (child.props.attach) {\n detach(parent, child);\n } else if (isObject3D(child.object) && isObject3D(parent.object)) {\n parent.object.remove(child.object);\n removeInteractivity(findInitialRoot(child), child.object);\n }\n\n // Allow objects to bail out of unmount disposal with dispose={null}\n const shouldDispose = child.props.dispose !== null && dispose !== false;\n\n // Recursively remove instance children\n for (let i = child.children.length - 1; i >= 0; i--) {\n const node = child.children[i];\n removeChild(child, node, shouldDispose);\n }\n child.children.length = 0;\n\n // Unlink instance object\n delete child.object.__r3f;\n\n // Dispose object whenever the reconciler feels like it.\n // Never dispose of primitives because their state may be kept outside of React!\n // In order for an object to be able to dispose it\n // - has a dispose method\n // - cannot be a <primitive object={...} />\n // - cannot be a THREE.Scene, because three has broken its own API\n if (shouldDispose && child.type !== 'primitive' && child.object.type !== 'Scene') {\n disposeOnIdle(child.object);\n }\n\n // Tree was updated, request a frame for top-level instance\n if (dispose === undefined) invalidateInstance(child);\n}\nfunction setFiberRef(fiber, publicInstance) {\n for (const _fiber of [fiber, fiber.alternate]) {\n if (_fiber !== null) {\n if (typeof _fiber.ref === 'function') {\n _fiber.refCleanup == null ? void 0 : _fiber.refCleanup();\n const cleanup = _fiber.ref(publicInstance);\n if (typeof cleanup === 'function') _fiber.refCleanup = cleanup;\n } else if (_fiber.ref) {\n _fiber.ref.current = publicInstance;\n }\n }\n }\n}\nconst reconstructed = [];\nfunction swapInstances() {\n // Detach instance\n for (const [instance] of reconstructed) {\n const parent = instance.parent;\n if (parent) {\n if (instance.props.attach) {\n detach(parent, instance);\n } else if (isObject3D(instance.object) && isObject3D(parent.object)) {\n parent.object.remove(instance.object);\n }\n for (const child of instance.children) {\n if (child.props.attach) {\n detach(instance, child);\n } else if (isObject3D(child.object) && isObject3D(instance.object)) {\n instance.object.remove(child.object);\n }\n }\n }\n\n // If the old instance is hidden, we need to unhide it.\n // React assumes it can discard instances since they're pure for DOM.\n // This isn't true for us since our lifetimes are impure and longliving.\n // So, we manually check if an instance was hidden and unhide it.\n if (instance.isHidden) unhideInstance(instance);\n\n // Dispose of old object if able\n if (instance.object.__r3f) delete instance.object.__r3f;\n if (instance.type !== 'primitive') disposeOnIdle(instance.object);\n }\n\n // Update instance\n for (const [instance, props, fiber] of reconstructed) {\n instance.props = props;\n const parent = instance.parent;\n if (parent) {\n var _instance$props$objec, _instance$props$args;\n // Get target from catalogue\n const target = catalogue[toPascalCase(instance.type)];\n\n // Create object\n const prevObject = instance.object;\n instance.object = (_instance$props$objec = instance.props.object) != null ? _instance$props$objec : new target(...((_instance$props$args = instance.props.args) != null ? _instance$props$args : []));\n instance.object.__r3f = instance;\n setFiberRef(fiber, instance.object);\n swapInteractivity(findInitialRoot(instance), prevObject, instance.object);\n applyProps(instance.object, instance.props);\n if (instance.props.attach) {\n attach(parent, instance);\n } else if (isObject3D(instance.object) && isObject3D(parent.object)) {\n parent.object.add(instance.object);\n }\n for (const child of instance.children) {\n if (child.props.attach) {\n attach(instance, child);\n } else if (isObject3D(child.object) && isObject3D(instance.object)) {\n instance.object.add(child.object);\n }\n }\n\n // Tree was updated, request a frame\n invalidateInstance(instance);\n }\n }\n reconstructed.length = 0;\n}\n\n// Don't handle text instances, make it no-op\nconst handleTextInstance = () => {};\nconst NO_CONTEXT = {};\nlet currentUpdatePriority = NoEventPriority;\n\n// https://github.com/facebook/react/blob/main/packages/react-reconciler/src/ReactFiberFlags.js\nconst NoFlags = 0;\nconst Update = 4;\nconst reconciler = /* @__PURE__ */createReconciler({\n isPrimaryRenderer: false,\n warnsIfNotActing: false,\n supportsMutation: true,\n supportsPersistence: false,\n supportsHydration: false,\n createInstance,\n removeChild,\n appendChild,\n appendInitialChild: appendChild,\n insertBefore,\n appendChildToContainer(container, child) {\n const scene = container.getState().scene.__r3f;\n if (!child || !scene) return;\n appendChild(scene, child);\n },\n removeChildFromContainer(container, child) {\n const scene = container.getState().scene.__r3f;\n if (!child || !scene) return;\n removeChild(scene, child);\n },\n insertInContainerBefore(container, child, beforeChild) {\n const scene = container.getState().scene.__r3f;\n if (!child || !beforeChild || !scene) return;\n insertBefore(scene, child, beforeChild);\n },\n getRootHostContext: () => NO_CONTEXT,\n getChildHostContext: () => NO_CONTEXT,\n commitUpdate(instance, type, oldProps, newProps, fiber) {\n var _newProps$args, _oldProps$args, _newProps$args2;\n validateInstance(type, newProps);\n let reconstruct = false;\n\n // Reconstruct primitives if object prop changes\n if (instance.type === 'primitive' && oldProps.object !== newProps.object) reconstruct = true;\n // Reconstruct instance if args were added or removed\n else if (((_newProps$args = newProps.args) == null ? void 0 : _newProps$args.length) !== ((_oldProps$args = oldProps.args) == null ? void 0 : _oldProps$args.length)) reconstruct = true;\n // Reconstruct instance if args were changed\n else if ((_newProps$args2 = newProps.args) != null && _newProps$args2.some((value, index) => {\n var _oldProps$args2;\n return value !== ((_oldProps$args2 = oldProps.args) == null ? void 0 : _oldProps$args2[index]);\n })) reconstruct = true;\n\n // Reconstruct when args or <primitive object={...} have changes\n if (reconstruct) {\n reconstructed.push([instance, {\n ...newProps\n }, fiber]);\n } else {\n // Create a diff-set, flag if there are any changes\n const changedProps = diffProps(instance, newProps);\n if (Object.keys(changedProps).length) {\n Object.assign(instance.props, changedProps);\n applyProps(instance.object, changedProps);\n }\n }\n\n // Flush reconstructed siblings when we hit the last updated child in a sequence\n const isTailSibling = fiber.sibling === null || (fiber.flags & Update) === NoFlags;\n if (isTailSibling) swapInstances();\n },\n finalizeInitialChildren: () => false,\n commitMount() {},\n getPublicInstance: instance => instance == null ? void 0 : instance.object,\n prepareForCommit: () => null,\n preparePortalMount: container => prepare(container.getState().scene, container, '', {}),\n resetAfterCommit: () => {},\n shouldSetTextContent: () => false,\n clearContainer: () => false,\n hideInstance,\n unhideInstance,\n createTextInstance: handleTextInstance,\n hideTextInstance: handleTextInstance,\n unhideTextInstance: handleTextInstance,\n scheduleTimeout: typeof setTimeout === 'function' ? setTimeout : undefined,\n cancelTimeout: typeof clearTimeout === 'function' ? clearTimeout : undefined,\n noTimeout: -1,\n getInstanceFromNode: () => null,\n beforeActiveInstanceBlur() {},\n afterActiveInstanceBlur() {},\n detachDeletedInstance() {},\n prepareScopeUpdate() {},\n getInstanceFromScope: () => null,\n shouldAttemptEagerTransition: () => false,\n trackSchedulerEvent: () => {},\n resolveEventType: () => null,\n resolveEventTimeStamp: () => -1.1,\n requestPostPaintCallback() {},\n maySuspendCommit: () => false,\n preloadInstance: () => true,\n // true indicates already loaded\n suspendInstance() {},\n waitForCommitToBeReady: () => null,\n NotPendingTransition: null,\n // The reconciler types use the internal ReactContext with all the hidden properties\n // so we have to cast from the public React.Context type\n HostTransitionContext: /* @__PURE__ */React.createContext(null),\n setCurrentUpdatePriority(newPriority) {\n currentUpdatePriority = newPriority;\n },\n getCurrentUpdatePriority() {\n return currentUpdatePriority;\n },\n resolveUpdatePriority() {\n var _window$event;\n if (currentUpdatePriority !== NoEventPriority) return currentUpdatePriority;\n switch (typeof window !== 'undefined' && ((_window$event = window.event) == null ? void 0 : _window$event.type)) {\n case 'click':\n case 'contextmenu':\n case 'dblclick':\n case 'pointercancel':\n case 'pointerdown':\n case 'pointerup':\n return e;\n case 'pointermove':\n case 'pointerout':\n case 'pointerover':\n case 'pointerenter':\n case 'pointerleave':\n case 'wheel':\n return o;\n default:\n return r;\n }\n },\n resetFormInstance() {},\n // @ts-ignore DefinitelyTyped is not up to date\n rendererPackageName: '@react-three/fiber',\n rendererVersion: packageData.version,\n // https://github.com/facebook/react/pull/31975\n // https://github.com/facebook/react/pull/31999\n applyViewTransitionName(_instance, _name, _className) {},\n restoreViewTransitionName(_instance, _props) {},\n cancelViewTransitionName(_instance, _name, _props) {},\n cancelRootViewTransitionName(_rootContainer) {},\n restoreRootViewTransitionName(_rootContainer) {},\n InstanceMeasurement: null,\n measureInstance: _instance => null,\n wasInstanceInViewport: _measurement => true,\n hasInstanceChanged: (_oldMeasurement, _newMeasurement) => false,\n hasInstanceAffectedParent: (_oldMeasurement, _newMeasurement) => false,\n // https://github.com/facebook/react/pull/32002\n // https://github.com/facebook/react/pull/34486\n suspendOnActiveViewTransition(_state, _container) {},\n // https://github.com/facebook/react/pull/32451\n // https://github.com/facebook/react/pull/32760\n startGestureTransition: () => null,\n startViewTransition: () => null,\n stopViewTransition(_transition) {},\n // https://github.com/facebook/react/pull/32038\n createViewTransitionInstance: _name => null,\n // https://github.com/facebook/react/pull/32379\n // https://github.com/facebook/react/pull/32786\n getCurrentGestureOffset(_provider) {\n throw new Error('startGestureTransition is not yet supported in react-three-fiber.');\n },\n // https://github.com/facebook/react/pull/32500\n cloneMutableInstance(instance, _keepChildren) {\n return instance;\n },\n cloneMutableTextInstance(textInstance) {\n return textInstance;\n },\n cloneRootViewTransitionContainer(_rootContainer) {\n throw new Error('Not implemented.');\n },\n removeRootViewTransitionClone(_rootContainer, _clone) {\n throw new Error('Not implemented.');\n },\n // https://github.com/facebook/react/pull/32465\n createFragmentInstance: _fiber => null,\n updateFragmentInstanceFiber(_fiber, _instance) {},\n commitNewChildToFragmentInstance(_child, _fragmentInstance) {},\n deleteChildFromFragmentInstance(_child, _fragmentInstance) {},\n // https://github.com/facebook/react/pull/32653\n measureClonedInstance: _instance => null,\n // https://github.com/facebook/react/pull/32819\n maySuspendCommitOnUpdate: (_type, _oldProps, _newProps) => false,\n maySuspendCommitInSyncRender: (_type, _props) => false,\n // https://github.com/facebook/react/pull/34486\n startSuspendingCommit: () => null,\n // https://github.com/facebook/react/pull/34522\n getSuspendedCommitReason: (_state, _rootContainer) => null\n});\n\nconst _roots = new Map();\nconst shallowLoose = {\n objects: 'shallow',\n strict: false\n};\nfunction computeInitialSize(canvas, size) {\n if (!size && typeof HTMLCanvasElement !== 'undefined' && canvas instanceof HTMLCanvasElement && canvas.parentElement) {\n const {\n width,\n height,\n top,\n left\n } = canvas.parentElement.getBoundingClientRect();\n return {\n width,\n height,\n top,\n left\n };\n } else if (!size && typeof OffscreenCanvas !== 'undefined' && canvas instanceof OffscreenCanvas) {\n return {\n width: canvas.width,\n height: canvas.height,\n top: 0,\n left: 0\n };\n }\n return {\n width: 0,\n height: 0,\n top: 0,\n left: 0,\n ...size\n };\n}\nfunction createRoot(canvas) {\n // Check against mistaken use of createRoot\n const prevRoot = _roots.get(canvas);\n const prevFiber = prevRoot == null ? void 0 : prevRoot.fiber;\n const prevStore = prevRoot == null ? void 0 : prevRoot.store;\n if (prevRoot) console.warn('R3F.createRoot should only be called once!');\n\n // Report when an error was detected in a previous render\n // https://github.com/pmndrs/react-three-fiber/pull/2261\n const logRecoverableError = typeof reportError === 'function' ?\n // In modern browsers, reportError will dispatch an error event,\n // emulating an uncaught JavaScript error.\n reportError :\n // In older browsers and test environments, fallback to console.error.\n console.error;\n\n // Create store\n const store = prevStore || createStore(invalidate, advance);\n // Create renderer\n const fiber = prevFiber || reconciler.createContainer(store,\n // container\n t,\n // tag\n null,\n // hydration callbacks\n false,\n // isStrictMode\n null,\n // concurrentUpdatesByDefaultOverride\n '',\n // identifierPrefix\n logRecoverableError,\n // onUncaughtError\n logRecoverableError,\n // onCaughtError\n logRecoverableError,\n // onRecoverableError\n null // transitionCallbacks\n );\n // Map it\n if (!prevRoot) _roots.set(canvas, {\n fiber,\n store\n });\n\n // Locals\n let onCreated;\n let lastCamera;\n let configured = false;\n let pending = null;\n return {\n async configure(props = {}) {\n let resolve;\n pending = new Promise(_resolve => resolve = _resolve);\n let {\n gl: glConfig,\n size: propsSize,\n scene: sceneOptions,\n events,\n onCreated: onCreatedCallback,\n shadows = false,\n linear = false,\n flat = false,\n legacy = false,\n orthographic = false,\n frameloop = 'always',\n dpr = [1, 2],\n performance,\n raycaster: raycastOptions,\n camera: cameraOptions,\n onPointerMissed\n } = props;\n let state = store.getState();\n\n // Set up renderer (one time only!)\n let gl = state.gl;\n if (!state.gl) {\n const defaultProps = {\n canvas: canvas,\n powerPreference: 'high-performance',\n antialias: true,\n alpha: true\n };\n const customRenderer = typeof glConfig === 'function' ? await glConfig(defaultProps) : glConfig;\n if (isRenderer(customRenderer)) {\n gl = customRenderer;\n } else {\n gl = new THREE.WebGLRenderer({\n ...defaultProps,\n ...glConfig\n });\n }\n state.set({\n gl\n });\n }\n\n // Set up raycaster (one time only!)\n let raycaster = state.raycaster;\n if (!raycaster) state.set({\n raycaster: raycaster = new THREE.Raycaster()\n });\n\n // Set raycaster options\n const {\n params,\n ...options\n } = raycastOptions || {};\n if (!is.equ(options, raycaster, shallowLoose)) applyProps(raycaster, {\n ...options\n });\n if (!is.equ(params, raycaster.params, shallowLoose)) applyProps(raycaster, {\n params: {\n ...raycaster.params,\n ...params\n }\n });\n\n // Create default camera, don't overwrite any user-set state\n if (!state.camera || state.camera === lastCamera && !is.equ(lastCamera, cameraOptions, shallowLoose)) {\n lastCamera = cameraOptions;\n const isCamera = cameraOptions == null ? void 0 : cameraOptions.isCamera;\n const camera = isCamera ? cameraOptions : orthographic ? new THREE.OrthographicCamera(0, 0, 0, 0, 0.1, 1000) : new THREE.PerspectiveCamera(75, 0, 0.1, 1000);\n if (!isCamera) {\n camera.position.z = 5;\n if (cameraOptions) {\n applyProps(camera, cameraOptions);\n // Preserve user-defined frustum if possible\n // https://github.com/pmndrs/react-three-fiber/issues/3160\n if (!camera.manual) {\n if ('aspect' in cameraOptions || 'left' in cameraOptions || 'right' in cameraOptions || 'bottom' in cameraOptions || 'top' in cameraOptions) {\n camera.manual = true;\n camera.updateProjectionMatrix();\n }\n }\n }\n // Always look at center by default\n if (!state.camera && !(cameraOptions != null && cameraOptions.rotation)) camera.lookAt(0, 0, 0);\n }\n state.set({\n camera\n });\n\n // Configure raycaster\n // https://github.com/pmndrs/react-xr/issues/300\n raycaster.camera = camera;\n }\n\n // Set up scene (one time only!)\n if (!state.scene) {\n let scene;\n if (sceneOptions != null && sceneOptions.isScene) {\n scene = sceneOptions;\n prepare(scene, store, '', {});\n } else {\n scene = new THREE.Scene();\n prepare(scene, store, '', {});\n if (sceneOptions) applyProps(scene, sceneOptions);\n }\n state.set({\n scene\n });\n }\n\n // Store events internally\n if (events && !state.events.handlers) state.set({\n events: events(store)\n });\n // Check size, allow it to take on container bounds initially\n const size = computeInitialSize(canvas, propsSize);\n if (!is.equ(size, state.size, shallowLoose)) {\n state.setSize(size.width, size.height, size.top, size.left);\n }\n // Check pixelratio\n if (dpr && state.viewport.dpr !== calculateDpr(dpr)) state.setDpr(dpr);\n // Check frameloop\n if (state.frameloop !== frameloop) state.setFrameloop(frameloop);\n // Check pointer missed\n if (!state.onPointerMissed) state.set({\n onPointerMissed\n });\n // Check performance\n if (performance && !is.equ(performance, state.performance, shallowLoose)) state.set(state => ({\n performance: {\n ...state.performance,\n ...performance\n }\n }));\n\n // Set up XR (one time only!)\n if (!state.xr) {\n var _gl$xr;\n // Handle frame behavior in WebXR\n const handleXRFrame = (timestamp, frame) => {\n const state = store.getState();\n if (state.frameloop === 'never') return;\n advance(timestamp, true, state, frame);\n };\n\n // Toggle render switching on session\n const handleSessionChange = () => {\n const state = store.getState();\n state.gl.xr.enabled = state.gl.xr.isPresenting;\n state.gl.xr.setAnimationLoop(state.gl.xr.isPresenting ? handleXRFrame : null);\n if (!state.gl.xr.isPresenting) invalidate(state);\n };\n\n // WebXR session manager\n const xr = {\n connect() {\n const gl = store.getState().gl;\n gl.xr.addEventListener('sessionstart', handleSessionChange);\n gl.xr.addEventListener('sessionend', handleSessionChange);\n },\n disconnect() {\n const gl = store.getState().gl;\n gl.xr.removeEventListener('sessionstart', handleSessionChange);\n gl.xr.removeEventListener('sessionend', handleSessionChange);\n }\n };\n\n // Subscribe to WebXR session events\n if (typeof ((_gl$xr = gl.xr) == null ? void 0 : _gl$xr.addEventListener) === 'function') xr.connect();\n state.set({\n xr\n });\n }\n\n // Set shadowmap\n if (gl.shadowMap) {\n const oldEnabled = gl.shadowMap.enabled;\n const oldType = gl.shadowMap.type;\n gl.shadowMap.enabled = !!shadows;\n if (is.boo(shadows)) {\n gl.shadowMap.type = THREE.PCFSoftShadowMap;\n } else if (is.str(shadows)) {\n var _types$shadows;\n const types = {\n basic: THREE.BasicShadowMap,\n percentage: THREE.PCFShadowMap,\n soft: THREE.PCFSoftShadowMap,\n variance: THREE.VSMShadowMap\n };\n gl.shadowMap.type = (_types$shadows = types[shadows]) != null ? _types$shadows : THREE.PCFSoftShadowMap;\n } else if (is.obj(shadows)) {\n Object.assign(gl.shadowMap, shadows);\n }\n if (oldEnabled !== gl.shadowMap.enabled || oldType !== gl.shadowMap.type) gl.shadowMap.needsUpdate = true;\n }\n THREE.ColorManagement.enabled = !legacy;\n\n // Set color space and tonemapping preferences\n if (!configured) {\n gl.outputColorSpace = linear ? THREE.LinearSRGBColorSpace : THREE.SRGBColorSpace;\n gl.toneMapping = flat ? THREE.NoToneMapping : THREE.ACESFilmicToneMapping;\n }\n\n // Update color management state\n if (state.legacy !== legacy) state.set(() => ({\n legacy\n }));\n if (state.linear !== linear) state.set(() => ({\n linear\n }));\n if (state.flat !== flat) state.set(() => ({\n flat\n }));\n\n // Set gl props\n if (glConfig && !is.fun(glConfig) && !isRenderer(glConfig) && !is.equ(glConfig, gl, shallowLoose)) applyProps(gl, glConfig);\n\n // Set locals\n onCreated = onCreatedCallback;\n configured = true;\n resolve();\n return this;\n },\n render(children) {\n // The root has to be configured before it can be rendered\n if (!configured && !pending) this.configure();\n pending.then(() => {\n reconciler.updateContainer( /*#__PURE__*/jsx(Provider, {\n store: store,\n children: children,\n onCreated: onCreated,\n rootElement: canvas\n }), fiber, null, () => undefined);\n });\n return store;\n },\n unmount() {\n unmountComponentAtNode(canvas);\n }\n };\n}\nfunction Provider({\n store,\n children,\n onCreated,\n rootElement\n}) {\n useIsomorphicLayoutEffect(() => {\n const state = store.getState();\n // Flag the canvas active, rendering will now begin\n state.set(state => ({\n internal: {\n ...state.internal,\n active: true\n }\n }));\n // Notify that init is completed, the scene graph exists, but nothing has yet rendered\n if (onCreated) onCreated(state);\n // Connect events to the targets parent, this is done to ensure events are registered on\n // a shared target, and not on the canvas itself\n if (!store.getState().events.connected) state.events.connect == null ? void 0 : state.events.connect(rootElement);\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n return /*#__PURE__*/jsx(context.Provider, {\n value: store,\n children: children\n });\n}\nfunction unmountComponentAtNode(canvas, callback) {\n const root = _roots.get(canvas);\n const fiber = root == null ? void 0 : root.fiber;\n if (fiber) {\n const state = root == null ? void 0 : root.store.getState();\n if (state) state.internal.active = false;\n reconciler.updateContainer(null, fiber, null, () => {\n if (state) {\n setTimeout(() => {\n try {\n var _state$gl, _state$gl$renderLists, _state$gl2, _state$gl3;\n state.events.disconnect == null ? void 0 : state.events.disconnect();\n (_state$gl = state.gl) == null ? void 0 : (_state$gl$renderLists = _state$gl.renderLists) == null ? void 0 : _state$gl$renderLists.dispose == null ? void 0 : _state$gl$renderLists.dispose();\n (_state$gl2 = state.gl) == null ? void 0 : _state$gl2.forceContextLoss == null ? void 0 : _state$gl2.forceContextLoss();\n if ((_state$gl3 = state.gl) != null && _state$gl3.xr) state.xr.disconnect();\n dispose(state.scene);\n _roots.delete(canvas);\n if (callback) callback(canvas);\n } catch (e) {\n /* ... */\n }\n }, 500);\n }\n });\n }\n}\nfunction createPortal(children, container, state) {\n return /*#__PURE__*/jsx(Portal, {\n children: children,\n container: container,\n state: state\n });\n}\nfunction Portal({\n state = {},\n children,\n container\n}) {\n /** This has to be a component because it would not be able to call useThree/useStore otherwise since\r\n * if this is our environment, then we are not in r3f's renderer but in react-dom, it would trigger\r\n * the \"R3F hooks can only be used within the Canvas component!\" warning:\r\n * <Canvas>\r\n * {createPortal(...)} */\n const {\n events,\n size,\n ...rest\n } = state;\n const previousRoot = useStore();\n const [raycaster] = React.useState(() => new THREE.Raycaster());\n const [pointer] = React.useState(() => new THREE.Vector2());\n const inject = useMutableCallback((rootState, injectState) => {\n let viewport = undefined;\n if (injectState.camera && size) {\n const camera = injectState.camera;\n // Calculate the override viewport, if present\n viewport = rootState.viewport.getCurrentViewport(camera, new THREE.Vector3(), size);\n // Update the portal camera, if it differs from the previous layer\n if (camera !== rootState.camera) updateCamera(camera, size);\n }\n return {\n // The intersect consists of the previous root state\n ...rootState,\n ...injectState,\n // Portals have their own scene, which forms the root, a raycaster and a pointer\n scene: container,\n raycaster,\n pointer,\n mouse: pointer,\n // Their previous root is the layer before it\n previousRoot,\n // Events, size and viewport can be overridden by the inject layer\n events: {\n ...rootState.events,\n ...injectState.events,\n ...events\n },\n size: {\n ...rootState.size,\n ...size\n },\n viewport: {\n ...rootState.viewport,\n ...viewport\n },\n // Layers are allowed to override events\n setEvents: events => injectState.set(state => ({\n ...state,\n events: {\n ...state.events,\n ...events\n }\n }))\n };\n });\n const usePortalStore = React.useMemo(() => {\n // Create a mirrored store, based on the previous root with a few overrides ...\n const store = createWithEqualityFn((set, get) => ({\n ...rest,\n set,\n get\n }));\n\n // Subscribe to previous root-state and copy changes over to the mirrored portal-state\n const onMutate = prev => store.setState(state => inject.current(prev, state));\n onMutate(previousRoot.getState());\n previousRoot.subscribe(onMutate);\n return store;\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [previousRoot, container]);\n return (\n /*#__PURE__*/\n // @ts-ignore, reconciler types are not maintained\n jsx(Fragment, {\n children: reconciler.createPortal( /*#__PURE__*/jsx(context.Provider, {\n value: usePortalStore,\n children: children\n }), usePortalStore, null)\n })\n );\n}\n\n/**\r\n * Force React to flush any updates inside the provided callback synchronously and immediately.\r\n * All the same caveats documented for react-dom's `flushSync` apply here (see https://react.dev/reference/react-dom/flushSync).\r\n * Nevertheless, sometimes one needs to render synchronously, for example to keep DOM and 3D changes in lock-step without\r\n * having to revert to a non-React solution. Note: this will only flush updates within the `Canvas` root.\r\n */\nfunction flushSync(fn) {\n // @ts-ignore - reconciler types are not maintained\n return reconciler.flushSyncFromReconciler(fn);\n}\n\nfunction createSubs(callback, subs) {\n const sub = {\n callback\n };\n subs.add(sub);\n return () => void subs.delete(sub);\n}\nconst globalEffects = new Set();\nconst globalAfterEffects = new Set();\nconst globalTailEffects = new Set();\n\n/**\r\n * Adds a global render callback which is called each frame.\r\n * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addEffect\r\n */\nconst addEffect = callback => createSubs(callback, globalEffects);\n\n/**\r\n * Adds a global after-render callback which is called each frame.\r\n * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addAfterEffect\r\n */\nconst addAfterEffect = callback => createSubs(callback, globalAfterEffects);\n\n/**\r\n * Adds a global callback which is called when rendering stops.\r\n * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addTail\r\n */\nconst addTail = callback => createSubs(callback, globalTailEffects);\nfunction run(effects, timestamp) {\n if (!effects.size) return;\n for (const {\n callback\n } of effects.values()) {\n callback(timestamp);\n }\n}\nfunction flushGlobalEffects(type, timestamp) {\n switch (type) {\n case 'before':\n return run(globalEffects, timestamp);\n case 'after':\n return run(globalAfterEffects, timestamp);\n case 'tail':\n return run(globalTailEffects, timestamp);\n }\n}\nlet subscribers;\nlet subscription;\nfunction update(timestamp, state, frame) {\n // Run local effects\n let delta = state.clock.getDelta();\n\n // In frameloop='never' mode, clock times are updated using the provided timestamp\n if (state.frameloop === 'never' && typeof timestamp === 'number') {\n delta = timestamp - state.clock.elapsedTime;\n state.clock.oldTime = state.clock.elapsedTime;\n state.clock.elapsedTime = timestamp;\n }\n\n // Call subscribers (useFrame)\n subscribers = state.internal.subscribers;\n for (let i = 0; i < subscribers.length; i++) {\n subscription = subscribers[i];\n subscription.ref.current(subscription.store.getState(), delta, frame);\n }\n\n // Render content\n if (!state.internal.priority && state.gl.render) state.gl.render(state.scene, state.camera);\n\n // Decrease frame count\n state.internal.frames = Math.max(0, state.internal.frames - 1);\n return state.frameloop === 'always' ? 1 : state.internal.frames;\n}\nlet running = false;\nlet useFrameInProgress = false;\nlet repeat;\nlet frame;\nlet state;\nfunction loop(timestamp) {\n frame = requestAnimationFrame(loop);\n running = true;\n repeat = 0;\n\n // Run effects\n flushGlobalEffects('before', timestamp);\n\n // Render all roots\n useFrameInProgress = true;\n for (const root of _roots.values()) {\n var _state$gl$xr;\n state = root.store.getState();\n\n // If the frameloop is invalidated, do not run another frame\n if (state.internal.active && (state.frameloop === 'always' || state.internal.frames > 0) && !((_state$gl$xr = state.gl.xr) != null && _state$gl$xr.isPresenting)) {\n repeat += update(timestamp, state);\n }\n }\n useFrameInProgress = false;\n\n // Run after-effects\n flushGlobalEffects('after', timestamp);\n\n // Stop the loop if nothing invalidates it\n if (repeat === 0) {\n // Tail call effects, they are called when rendering stops\n flushGlobalEffects('tail', timestamp);\n\n // Flag end of operation\n running = false;\n return cancelAnimationFrame(frame);\n }\n}\n\n/**\r\n * Invalidates the view, requesting a frame to be rendered. Will globally invalidate unless passed a root's state.\r\n * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#invalidate\r\n */\nfunction invalidate(state, frames = 1) {\n var _state$gl$xr2;\n if (!state) return _roots.forEach(root => invalidate(root.store.getState(), frames));\n if ((_state$gl$xr2 = state.gl.xr) != null && _state$gl$xr2.isPresenting || !state.internal.active || state.frameloop === 'never') return;\n if (frames > 1) {\n // legacy support for people using frames parameters\n // Increase frames, do not go higher than 60\n state.internal.frames = Math.min(60, state.internal.frames + frames);\n } else {\n if (useFrameInProgress) {\n //called from within a useFrame, it means the user wants an additional frame\n state.internal.frames = 2;\n } else {\n //the user needs a new frame, no need to increment further than 1\n state.internal.frames = 1;\n }\n }\n\n // If the render-loop isn't active, start it\n if (!running) {\n running = true;\n requestAnimationFrame(loop);\n }\n}\n\n/**\r\n * Advances the frameloop and runs render effects, useful for when manually rendering via `frameloop=\"never\"`.\r\n * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#advance\r\n */\nfunction advance(timestamp, runGlobalEffects = true, state, frame) {\n if (runGlobalEffects) flushGlobalEffects('before', timestamp);\n if (!state) for (const root of _roots.values()) update(timestamp, root.store.getState());else update(timestamp, state, frame);\n if (runGlobalEffects) flushGlobalEffects('after', timestamp);\n}\n\nconst DOM_EVENTS = {\n onClick: ['click', false],\n onContextMenu: ['contextmenu', false],\n onDoubleClick: ['dblclick', false],\n onWheel: ['wheel', true],\n onPointerDown: ['pointerdown', true],\n onPointerUp: ['pointerup', true],\n onPointerLeave: ['pointerleave', true],\n onPointerMove: ['pointermove', true],\n onPointerCancel: ['pointercancel', true],\n onLostPointerCapture: ['lostpointercapture', true]\n};\n\n/** Default R3F event manager for web */\nfunction createPointerEvents(store) {\n const {\n handlePointer\n } = createEvents(store);\n return {\n priority: 1,\n enabled: true,\n compute(event, state, previous) {\n // https://github.com/pmndrs/react-three-fiber/pull/782\n // Events trigger outside of canvas when moved, use offsetX/Y by default and allow overrides\n state.pointer.set(event.offsetX / state.size.width * 2 - 1, -(event.offsetY / state.size.height) * 2 + 1);\n state.raycaster.setFromCamera(state.pointer, state.camera);\n },\n connected: undefined,\n handlers: Object.keys(DOM_EVENTS).reduce((acc, key) => ({\n ...acc,\n [key]: handlePointer(key)\n }), {}),\n update: () => {\n var _internal$lastEvent;\n const {\n events,\n internal\n } = store.getState();\n if ((_internal$lastEvent = internal.lastEvent) != null && _internal$lastEvent.current && events.handlers) events.handlers.onPointerMove(internal.lastEvent.current);\n },\n connect: target => {\n const {\n set,\n events\n } = store.getState();\n events.disconnect == null ? void 0 : events.disconnect();\n set(state => ({\n events: {\n ...state.events,\n connected: target\n }\n }));\n if (events.handlers) {\n for (const name in events.handlers) {\n const event = events.handlers[name];\n const [eventName, passive] = DOM_EVENTS[name];\n target.addEventListener(eventName, event, {\n passive\n });\n }\n }\n },\n disconnect: () => {\n const {\n set,\n events\n } = store.getState();\n if (events.connected) {\n if (events.handlers) {\n for (const name in events.handlers) {\n const event = events.handlers[name];\n const [eventName] = DOM_EVENTS[name];\n events.connected.removeEventListener(eventName, event);\n }\n }\n set(state => ({\n events: {\n ...state.events,\n connected: undefined\n }\n }));\n }\n }\n };\n}\n\nexport { useStore as A, Block as B, useThree as C, useFrame as D, ErrorBoundary as E, useGraph as F, useLoader as G, _roots as _, useMutableCallback as a, useIsomorphicLayoutEffect as b, createRoot as c, unmountComponentAtNode as d, extend as e, createPointerEvents as f, createEvents as g, flushGlobalEffects as h, isRef as i, addEffect as j, addAfterEffect as k, addTail as l, invalidate as m, advance as n, createPortal as o, flushSync as p, context as q, reconciler as r, applyProps as s, threeTypes as t, useBridge as u, getRootState as v, dispose as w, act as x, buildGraph as y, useInstanceHandle as z };\n","import{useState as T,useRef as p,useEffect as u,useMemo as M}from\"react\";function g(n,t){let o;return(...i)=>{window.clearTimeout(o),o=window.setTimeout(()=>n(...i),t)}}function j({debounce:n,scroll:t,polyfill:o,offsetSize:i}={debounce:0,scroll:!1,offsetSize:!1}){const a=o||(typeof window==\"undefined\"?class{}:window.ResizeObserver);if(!a)throw new Error(\"This browser does not support ResizeObserver out of the box. See: https://github.com/react-spring/react-use-measure/#resize-observer-polyfills\");const[c,h]=T({left:0,top:0,width:0,height:0,bottom:0,right:0,x:0,y:0}),e=p({element:null,scrollContainers:null,resizeObserver:null,lastBounds:c,orientationHandler:null}),d=n?typeof n==\"number\"?n:n.scroll:null,f=n?typeof n==\"number\"?n:n.resize:null,w=p(!1);u(()=>(w.current=!0,()=>void(w.current=!1)));const[z,m,s]=M(()=>{const r=()=>{if(!e.current.element)return;const{left:y,top:C,width:H,height:O,bottom:S,right:x,x:B,y:R}=e.current.element.getBoundingClientRect(),l={left:y,top:C,width:H,height:O,bottom:S,right:x,x:B,y:R};e.current.element instanceof HTMLElement&&i&&(l.height=e.current.element.offsetHeight,l.width=e.current.element.offsetWidth),Object.freeze(l),w.current&&!D(e.current.lastBounds,l)&&h(e.current.lastBounds=l)};return[r,f?g(r,f):r,d?g(r,d):r]},[h,i,d,f]);function v(){e.current.scrollContainers&&(e.current.scrollContainers.forEach(r=>r.removeEventListener(\"scroll\",s,!0)),e.current.scrollContainers=null),e.current.resizeObserver&&(e.current.resizeObserver.disconnect(),e.current.resizeObserver=null),e.current.orientationHandler&&(\"orientation\"in screen&&\"removeEventListener\"in screen.orientation?screen.orientation.removeEventListener(\"change\",e.current.orientationHandler):\"onorientationchange\"in window&&window.removeEventListener(\"orientationchange\",e.current.orientationHandler))}function b(){e.current.element&&(e.current.resizeObserver=new a(s),e.current.resizeObserver.observe(e.current.element),t&&e.current.scrollContainers&&e.current.scrollContainers.forEach(r=>r.addEventListener(\"scroll\",s,{capture:!0,passive:!0})),e.current.orientationHandler=()=>{s()},\"orientation\"in screen&&\"addEventListener\"in screen.orientation?screen.orientation.addEventListener(\"change\",e.current.orientationHandler):\"onorientationchange\"in window&&window.addEventListener(\"orientationchange\",e.current.orientationHandler))}const L=r=>{!r||r===e.current.element||(v(),e.current.element=r,e.current.scrollContainers=E(r),b())};return X(s,!!t),W(m),u(()=>{v(),b()},[t,s,m]),u(()=>v,[]),[L,c,z]}function W(n){u(()=>{const t=n;return window.addEventListener(\"resize\",t),()=>void window.removeEventListener(\"resize\",t)},[n])}function X(n,t){u(()=>{if(t){const o=n;return window.addEventListener(\"scroll\",o,{capture:!0,passive:!0}),()=>void window.removeEventListener(\"scroll\",o,!0)}},[n,t])}function E(n){const t=[];if(!n||n===document.body)return t;const{overflow:o,overflowX:i,overflowY:a}=window.getComputedStyle(n);return[o,i,a].some(c=>c===\"auto\"||c===\"scroll\")&&t.push(n),[...t,...E(n.parentElement)]}const k=[\"x\",\"y\",\"top\",\"bottom\",\"left\",\"right\",\"width\",\"height\"],D=(n,t)=>k.every(o=>n[o]===t[o]);export{j as default};\n//# sourceMappingURL=index.js.map\n","import { e as extend, u as useBridge, a as useMutableCallback, b as useIsomorphicLayoutEffect, c as createRoot, i as isRef, E as ErrorBoundary, B as Block, d as unmountComponentAtNode, f as createPointerEvents } from './events-b389eeca.esm.js';\nexport { t as ReactThreeFiber, _ as _roots, x as act, k as addAfterEffect, j as addEffect, l as addTail, n as advance, s as applyProps, y as buildGraph, q as context, g as createEvents, o as createPortal, c as createRoot, w as dispose, f as events, e as extend, h as flushGlobalEffects, p as flushSync, v as getRootState, m as invalidate, r as reconciler, d as unmountComponentAtNode, D as useFrame, F as useGraph, z as useInstanceHandle, G as useLoader, A as useStore, C as useThree } from './events-b389eeca.esm.js';\nimport * as React from 'react';\nimport * as THREE from 'three';\nimport useMeasure from 'react-use-measure';\nimport { FiberProvider } from 'its-fine';\nimport { jsx } from 'react/jsx-runtime';\nimport 'zustand/traditional';\nimport 'suspend-react';\nimport 'scheduler';\n\nfunction CanvasImpl({\n ref,\n children,\n fallback,\n resize,\n style,\n gl,\n events = createPointerEvents,\n eventSource,\n eventPrefix,\n shadows,\n linear,\n flat,\n legacy,\n orthographic,\n frameloop,\n dpr,\n performance,\n raycaster,\n camera,\n scene,\n onPointerMissed,\n onCreated,\n ...props\n}) {\n // Create a known catalogue of Threejs-native elements\n // This will include the entire THREE namespace by default, users can extend\n // their own elements by using the createRoot API instead\n React.useMemo(() => extend(THREE), []);\n const Bridge = useBridge();\n const [containerRef, containerRect] = useMeasure({\n scroll: true,\n debounce: {\n scroll: 50,\n resize: 0\n },\n ...resize\n });\n const canvasRef = React.useRef(null);\n const divRef = React.useRef(null);\n React.useImperativeHandle(ref, () => canvasRef.current);\n const handlePointerMissed = useMutableCallback(onPointerMissed);\n const [block, setBlock] = React.useState(false);\n const [error, setError] = React.useState(false);\n\n // Suspend this component if block is a promise (2nd run)\n if (block) throw block;\n // Throw exception outwards if anything within canvas throws\n if (error) throw error;\n const root = React.useRef(null);\n useIsomorphicLayoutEffect(() => {\n const canvas = canvasRef.current;\n if (containerRect.width > 0 && containerRect.height > 0 && canvas) {\n if (!root.current) root.current = createRoot(canvas);\n async function run() {\n await root.current.configure({\n gl,\n scene,\n events,\n shadows,\n linear,\n flat,\n legacy,\n orthographic,\n frameloop,\n dpr,\n performance,\n raycaster,\n camera,\n size: containerRect,\n // Pass mutable reference to onPointerMissed so it's free to update\n onPointerMissed: (...args) => handlePointerMissed.current == null ? void 0 : handlePointerMissed.current(...args),\n onCreated: state => {\n // Connect to event source\n state.events.connect == null ? void 0 : state.events.connect(eventSource ? isRef(eventSource) ? eventSource.current : eventSource : divRef.current);\n // Set up compute function\n if (eventPrefix) {\n state.setEvents({\n compute: (event, state) => {\n const x = event[eventPrefix + 'X'];\n const y = event[eventPrefix + 'Y'];\n state.pointer.set(x / state.size.width * 2 - 1, -(y / state.size.height) * 2 + 1);\n state.raycaster.setFromCamera(state.pointer, state.camera);\n }\n });\n }\n // Call onCreated callback\n onCreated == null ? void 0 : onCreated(state);\n }\n });\n root.current.render( /*#__PURE__*/jsx(Bridge, {\n children: /*#__PURE__*/jsx(ErrorBoundary, {\n set: setError,\n children: /*#__PURE__*/jsx(React.Suspense, {\n fallback: /*#__PURE__*/jsx(Block, {\n set: setBlock\n }),\n children: children != null ? children : null\n })\n })\n }));\n }\n run();\n }\n });\n React.useEffect(() => {\n const canvas = canvasRef.current;\n if (canvas) return () => unmountComponentAtNode(canvas);\n }, []);\n\n // When the event source is not this div, we need to set pointer-events to none\n // Or else the canvas will block events from reaching the event source\n const pointerEvents = eventSource ? 'none' : 'auto';\n return /*#__PURE__*/jsx(\"div\", {\n ref: divRef,\n style: {\n position: 'relative',\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n pointerEvents,\n ...style\n },\n ...props,\n children: /*#__PURE__*/jsx(\"div\", {\n ref: containerRef,\n style: {\n width: '100%',\n height: '100%'\n },\n children: /*#__PURE__*/jsx(\"canvas\", {\n ref: canvasRef,\n style: {\n display: 'block'\n },\n children: fallback\n })\n })\n });\n}\n\n/**\r\n * A DOM canvas which accepts threejs elements as children.\r\n * @see https://docs.pmnd.rs/react-three-fiber/api/canvas\r\n */\nfunction Canvas(props) {\n return /*#__PURE__*/jsx(FiberProvider, {\n children: /*#__PURE__*/jsx(CanvasImpl, {\n ...props\n })\n });\n}\n\nexport { Canvas };\n"],"mappings":"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"} \ No newline at end of file diff --git a/node_modules/.vite/deps/three-stdlib-BHZ1qH6e.js b/node_modules/.vite/deps/three-stdlib-BHZ1qH6e.js deleted file mode 100644 index aa19ba01..00000000 --- a/node_modules/.vite/deps/three-stdlib-BHZ1qH6e.js +++ /dev/null @@ -1,147672 +0,0 @@ -import { n as __exportAll } from "./chunk-B-1-B7_t.js"; -import { $ as Camera, $i as OrthographicCamera, $n as InstancedMesh, As as UniformsUtils, Bo as Sphere, Br as LinearMipmapNearestFilter, Bs as Vector2, C as AnimationMixer, Da as RGBAFormat, Dn as Frustum, Dr as Line, Ea as RGBADepthPacking, Er as LightProbe, Fa as RGBA_ASTC_4x4_Format, Fr as LinearFilter, G as Box3Helper, Ga as RGBA_PVRTC_2BPPV1_Format, Gi as OctahedronGeometry, Gn as ImageBitmapLoader, Go as SpotLight, Gr as LoaderUtils, H as BooleanKeyframeTrack, Hi as Object3D, Ho as Spherical, Hs as Vector4, Ht as DataTexture, Io as Skeleton, J as BufferAttribute, Ja as RGBA_S3TC_DXT3_Format, Jn as IncrementStencilOp, Jo as SpriteMaterial, K as BoxGeometry, Ka as RGBA_PVRTC_4BPPV1_Format, Kr as LoadingManager, Lo as SkeletonHelper, No as ShapePath, Nr as LineLoop, Ns as UnsignedInt248Type, Oo as Scene, Or as Line3, Os as Uniform, Po as ShapeUtils, Pr as LineSegments, Pt as Curve, Qn as InstancedInterleavedBuffer, Qs as WireframeGeometry, Qt as DirectionalLight, Rn as GridHelper, Ro as SkinnedMesh, Rs as UnsignedShortType, Rt as CylinderGeometry, Sn as FloatType, Ti as NearestMipmapNearestFilter, Ts as Uint32BufferAttribute, U as Box2, Ua as RGBA_BPTC_Format, Uo as SphericalHarmonics3, Us as VectorKeyframeTrack, Ut as DataTextureLoader, V as Bone, Vi as NumberKeyframeTrack, Vn as HalfFloatType, Vo as SphereGeometry, Vs as Vector3, W as Box3, Wa as RGBA_ETC2_EAC_Format, Wn as IcosahedronGeometry, Wr as Loader, Wt as DataUtils, X as BufferGeometryLoader, Xn as InstancedBufferAttribute, Xr as MOUSE, Xt as DepthTexture, Y as BufferGeometry, Ya as RGBA_S3TC_DXT5_Format, Ys as WebGLRenderTarget, Yt as DepthStencilFormat, Zn as InstancedBufferGeometry, Zr as Material, _i as MirroredRepeatWrapping, _r as LatheGeometry, a as WebGLCubeRenderTarget, aa as PlaneGeometry, ai as Mesh, ao as RGB_S3TC_DXT1_Format, ar as InterleavedBufferAttribute, cr as InterpolateDiscrete, cs as TOUCH, ct as Color, di as MeshNormalMaterial, do as Raycaster, ds as Texture, ei as MathUtils, fi as MeshPhongMaterial, fo as RectAreaLight, fs as TextureLoader, gn as EventDispatcher$1, gs as TorusGeometry, gt as ConeGeometry, hi as MeshToonMaterial, hn as Euler, ht as CompressedTextureLoader, i as UniformsLib, ia as Plane, io as RGB_PVRTC_4BPPV1_Format, ir as InterleavedBuffer, jo as Shape, js as UnsignedByteType, ko as ShaderMaterial, kr as LineBasicMaterial, la as Points, li as MeshLambertMaterial, ln as EllipseCurve, lo as RawShaderMaterial, lr as InterpolateLinear, lt as ColorKeyframeTrack, ma as PropertyBinding, mi as MeshStandardMaterial, mt as CompressedTexture, n as ShaderChunk, na as Path, ni as Matrix3, no as RGB_ETC2_Format, o as WebGLRenderer, oi as MeshBasicMaterial, on as DynamicDrawUsage, or as Interpolant, ot as ClampToEdgeWrapping, pi as MeshPhysicalMaterial, po as RedFormat, qo as Sprite, qt as DefaultLoadingManager, r as ShaderLib, ra as PerspectiveCamera, ri as Matrix4, ro as RGB_PVRTC_2BPPV1_Format, sa as PointLight, si as MeshDepthMaterial, so as RGFormat, st as Clock, to as RGB_ETC1_Format, ts as StereoCamera, tt as CanvasTexture, ua as PointsMaterial, uo as Ray, va as Quaternion, vn as ExtrudeGeometry, vo as RepeatWrapping, vs as Triangle$1, wi as NearestMipmapLinearFilter, ws as Uint16BufferAttribute, wt as CubeTexture, x as AnimationClip, xi as NearestFilter, xn as Float32BufferAttribute, y as AmbientLight, ya as QuaternionKeyframeTrack, yn as FileLoader, za as RGBA_ASTC_6x6_Format, zn as Group, zr as LinearMipmapLinearFilter } from "./three.module-DxhMWCDR.js"; -//#region node_modules/three-stdlib/loaders/MD2Loader.js -var _normalData = [ - [ - -.525731, - 0, - .850651 - ], - [ - -.442863, - .238856, - .864188 - ], - [ - -.295242, - 0, - .955423 - ], - [ - -.309017, - .5, - .809017 - ], - [ - -.16246, - .262866, - .951056 - ], - [ - 0, - 0, - 1 - ], - [ - 0, - .850651, - .525731 - ], - [ - -.147621, - .716567, - .681718 - ], - [ - .147621, - .716567, - .681718 - ], - [ - 0, - .525731, - .850651 - ], - [ - .309017, - .5, - .809017 - ], - [ - .525731, - 0, - .850651 - ], - [ - .295242, - 0, - .955423 - ], - [ - .442863, - .238856, - .864188 - ], - [ - .16246, - .262866, - .951056 - ], - [ - -.681718, - .147621, - .716567 - ], - [ - -.809017, - .309017, - .5 - ], - [ - -.587785, - .425325, - .688191 - ], - [ - -.850651, - .525731, - 0 - ], - [ - -.864188, - .442863, - .238856 - ], - [ - -.716567, - .681718, - .147621 - ], - [ - -.688191, - .587785, - .425325 - ], - [ - -.5, - .809017, - .309017 - ], - [ - -.238856, - .864188, - .442863 - ], - [ - -.425325, - .688191, - .587785 - ], - [ - -.716567, - .681718, - -.147621 - ], - [ - -.5, - .809017, - -.309017 - ], - [ - -.525731, - .850651, - 0 - ], - [ - 0, - .850651, - -.525731 - ], - [ - -.238856, - .864188, - -.442863 - ], - [ - 0, - .955423, - -.295242 - ], - [ - -.262866, - .951056, - -.16246 - ], - [ - 0, - 1, - 0 - ], - [ - 0, - .955423, - .295242 - ], - [ - -.262866, - .951056, - .16246 - ], - [ - .238856, - .864188, - .442863 - ], - [ - .262866, - .951056, - .16246 - ], - [ - .5, - .809017, - .309017 - ], - [ - .238856, - .864188, - -.442863 - ], - [ - .262866, - .951056, - -.16246 - ], - [ - .5, - .809017, - -.309017 - ], - [ - .850651, - .525731, - 0 - ], - [ - .716567, - .681718, - .147621 - ], - [ - .716567, - .681718, - -.147621 - ], - [ - .525731, - .850651, - 0 - ], - [ - .425325, - .688191, - .587785 - ], - [ - .864188, - .442863, - .238856 - ], - [ - .688191, - .587785, - .425325 - ], - [ - .809017, - .309017, - .5 - ], - [ - .681718, - .147621, - .716567 - ], - [ - .587785, - .425325, - .688191 - ], - [ - .955423, - .295242, - 0 - ], - [ - 1, - 0, - 0 - ], - [ - .951056, - .16246, - .262866 - ], - [ - .850651, - -.525731, - 0 - ], - [ - .955423, - -.295242, - 0 - ], - [ - .864188, - -.442863, - .238856 - ], - [ - .951056, - -.16246, - .262866 - ], - [ - .809017, - -.309017, - .5 - ], - [ - .681718, - -.147621, - .716567 - ], - [ - .850651, - 0, - .525731 - ], - [ - .864188, - .442863, - -.238856 - ], - [ - .809017, - .309017, - -.5 - ], - [ - .951056, - .16246, - -.262866 - ], - [ - .525731, - 0, - -.850651 - ], - [ - .681718, - .147621, - -.716567 - ], - [ - .681718, - -.147621, - -.716567 - ], - [ - .850651, - 0, - -.525731 - ], - [ - .809017, - -.309017, - -.5 - ], - [ - .864188, - -.442863, - -.238856 - ], - [ - .951056, - -.16246, - -.262866 - ], - [ - .147621, - .716567, - -.681718 - ], - [ - .309017, - .5, - -.809017 - ], - [ - .425325, - .688191, - -.587785 - ], - [ - .442863, - .238856, - -.864188 - ], - [ - .587785, - .425325, - -.688191 - ], - [ - .688191, - .587785, - -.425325 - ], - [ - -.147621, - .716567, - -.681718 - ], - [ - -.309017, - .5, - -.809017 - ], - [ - 0, - .525731, - -.850651 - ], - [ - -.525731, - 0, - -.850651 - ], - [ - -.442863, - .238856, - -.864188 - ], - [ - -.295242, - 0, - -.955423 - ], - [ - -.16246, - .262866, - -.951056 - ], - [ - 0, - 0, - -1 - ], - [ - .295242, - 0, - -.955423 - ], - [ - .16246, - .262866, - -.951056 - ], - [ - -.442863, - -.238856, - -.864188 - ], - [ - -.309017, - -.5, - -.809017 - ], - [ - -.16246, - -.262866, - -.951056 - ], - [ - 0, - -.850651, - -.525731 - ], - [ - -.147621, - -.716567, - -.681718 - ], - [ - .147621, - -.716567, - -.681718 - ], - [ - 0, - -.525731, - -.850651 - ], - [ - .309017, - -.5, - -.809017 - ], - [ - .442863, - -.238856, - -.864188 - ], - [ - .16246, - -.262866, - -.951056 - ], - [ - .238856, - -.864188, - -.442863 - ], - [ - .5, - -.809017, - -.309017 - ], - [ - .425325, - -.688191, - -.587785 - ], - [ - .716567, - -.681718, - -.147621 - ], - [ - .688191, - -.587785, - -.425325 - ], - [ - .587785, - -.425325, - -.688191 - ], - [ - 0, - -.955423, - -.295242 - ], - [ - 0, - -1, - 0 - ], - [ - .262866, - -.951056, - -.16246 - ], - [ - 0, - -.850651, - .525731 - ], - [ - 0, - -.955423, - .295242 - ], - [ - .238856, - -.864188, - .442863 - ], - [ - .262866, - -.951056, - .16246 - ], - [ - .5, - -.809017, - .309017 - ], - [ - .716567, - -.681718, - .147621 - ], - [ - .525731, - -.850651, - 0 - ], - [ - -.238856, - -.864188, - -.442863 - ], - [ - -.5, - -.809017, - -.309017 - ], - [ - -.262866, - -.951056, - -.16246 - ], - [ - -.850651, - -.525731, - 0 - ], - [ - -.716567, - -.681718, - -.147621 - ], - [ - -.716567, - -.681718, - .147621 - ], - [ - -.525731, - -.850651, - 0 - ], - [ - -.5, - -.809017, - .309017 - ], - [ - -.238856, - -.864188, - .442863 - ], - [ - -.262866, - -.951056, - .16246 - ], - [ - -.864188, - -.442863, - .238856 - ], - [ - -.809017, - -.309017, - .5 - ], - [ - -.688191, - -.587785, - .425325 - ], - [ - -.681718, - -.147621, - .716567 - ], - [ - -.442863, - -.238856, - .864188 - ], - [ - -.587785, - -.425325, - .688191 - ], - [ - -.309017, - -.5, - .809017 - ], - [ - -.147621, - -.716567, - .681718 - ], - [ - -.425325, - -.688191, - .587785 - ], - [ - -.16246, - -.262866, - .951056 - ], - [ - .442863, - -.238856, - .864188 - ], - [ - .16246, - -.262866, - .951056 - ], - [ - .309017, - -.5, - .809017 - ], - [ - .147621, - -.716567, - .681718 - ], - [ - 0, - -.525731, - .850651 - ], - [ - .425325, - -.688191, - .587785 - ], - [ - .587785, - -.425325, - .688191 - ], - [ - .688191, - -.587785, - .425325 - ], - [ - -.955423, - .295242, - 0 - ], - [ - -.951056, - .16246, - .262866 - ], - [ - -1, - 0, - 0 - ], - [ - -.850651, - 0, - .525731 - ], - [ - -.955423, - -.295242, - 0 - ], - [ - -.951056, - -.16246, - .262866 - ], - [ - -.864188, - .442863, - -.238856 - ], - [ - -.951056, - .16246, - -.262866 - ], - [ - -.809017, - .309017, - -.5 - ], - [ - -.864188, - -.442863, - -.238856 - ], - [ - -.951056, - -.16246, - -.262866 - ], - [ - -.809017, - -.309017, - -.5 - ], - [ - -.681718, - .147621, - -.716567 - ], - [ - -.681718, - -.147621, - -.716567 - ], - [ - -.850651, - 0, - -.525731 - ], - [ - -.688191, - .587785, - -.425325 - ], - [ - -.587785, - .425325, - -.688191 - ], - [ - -.425325, - .688191, - -.587785 - ], - [ - -.425325, - -.688191, - -.587785 - ], - [ - -.587785, - -.425325, - -.688191 - ], - [ - -.688191, - -.587785, - -.425325 - ] -]; -var MD2Loader = class extends Loader { - constructor(manager) { - super(manager); - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(scope.manager); - loader.setPath(scope.path); - loader.setResponseType("arraybuffer"); - loader.setRequestHeader(scope.requestHeader); - loader.setWithCredentials(scope.withCredentials); - loader.load(url, function(buffer) { - try { - onLoad(scope.parse(buffer)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(buffer) { - const data = new DataView(buffer); - const header = {}; - const headerNames = [ - "ident", - "version", - "skinwidth", - "skinheight", - "framesize", - "num_skins", - "num_vertices", - "num_st", - "num_tris", - "num_glcmds", - "num_frames", - "offset_skins", - "offset_st", - "offset_tris", - "offset_frames", - "offset_glcmds", - "offset_end" - ]; - for (let i = 0; i < headerNames.length; i++) header[headerNames[i]] = data.getInt32(i * 4, true); - if (header.ident !== 844121161 || header.version !== 8) { - console.error("Not a valid MD2 file"); - return; - } - if (header.offset_end !== data.byteLength) { - console.error("Corrupted MD2 file"); - return; - } - const geometry = new BufferGeometry(); - const uvsTemp = []; - let offset = header.offset_st; - for (let i = 0, l = header.num_st; i < l; i++) { - const u = data.getInt16(offset + 0, true); - const v = data.getInt16(offset + 2, true); - uvsTemp.push(u / header.skinwidth, 1 - v / header.skinheight); - offset += 4; - } - offset = header.offset_tris; - const vertexIndices = []; - const uvIndices = []; - for (let i = 0, l = header.num_tris; i < l; i++) { - vertexIndices.push(data.getUint16(offset + 0, true), data.getUint16(offset + 2, true), data.getUint16(offset + 4, true)); - uvIndices.push(data.getUint16(offset + 6, true), data.getUint16(offset + 8, true), data.getUint16(offset + 10, true)); - offset += 12; - } - const translation = new Vector3(); - const scale = new Vector3(); - const string = []; - const frames = []; - offset = header.offset_frames; - for (let i = 0, l = header.num_frames; i < l; i++) { - scale.set(data.getFloat32(offset + 0, true), data.getFloat32(offset + 4, true), data.getFloat32(offset + 8, true)); - translation.set(data.getFloat32(offset + 12, true), data.getFloat32(offset + 16, true), data.getFloat32(offset + 20, true)); - offset += 24; - for (let j = 0; j < 16; j++) { - const character = data.getUint8(offset + j, true); - if (character === 0) break; - string[j] = character; - } - const frame = { - name: String.fromCharCode.apply(null, string), - vertices: [], - normals: [] - }; - offset += 16; - for (let j = 0; j < header.num_vertices; j++) { - let x = data.getUint8(offset++, true); - let y = data.getUint8(offset++, true); - let z = data.getUint8(offset++, true); - const n = _normalData[data.getUint8(offset++, true)]; - x = x * scale.x + translation.x; - y = y * scale.y + translation.y; - z = z * scale.z + translation.z; - frame.vertices.push(x, z, y); - frame.normals.push(n[0], n[2], n[1]); - } - frames.push(frame); - } - const positions = []; - const normals = []; - const uvs = []; - const verticesTemp = frames[0].vertices; - const normalsTemp = frames[0].normals; - for (let i = 0, l = vertexIndices.length; i < l; i++) { - let stride = vertexIndices[i] * 3; - const x = verticesTemp[stride]; - const y = verticesTemp[stride + 1]; - const z = verticesTemp[stride + 2]; - positions.push(x, y, z); - const nx = normalsTemp[stride]; - const ny = normalsTemp[stride + 1]; - const nz = normalsTemp[stride + 2]; - normals.push(nx, ny, nz); - stride = uvIndices[i] * 2; - const u = uvsTemp[stride]; - const v = uvsTemp[stride + 1]; - uvs.push(u, v); - } - geometry.setAttribute("position", new Float32BufferAttribute(positions, 3)); - geometry.setAttribute("normal", new Float32BufferAttribute(normals, 3)); - geometry.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); - const morphPositions = []; - const morphNormals = []; - for (let i = 0, l = frames.length; i < l; i++) { - const frame = frames[i]; - const attributeName = frame.name; - if (frame.vertices.length > 0) { - const positions2 = []; - for (let j = 0, jl = vertexIndices.length; j < jl; j++) { - const stride = vertexIndices[j] * 3; - const x = frame.vertices[stride]; - const y = frame.vertices[stride + 1]; - const z = frame.vertices[stride + 2]; - positions2.push(x, y, z); - } - const positionAttribute = new Float32BufferAttribute(positions2, 3); - positionAttribute.name = attributeName; - morphPositions.push(positionAttribute); - } - if (frame.normals.length > 0) { - const normals2 = []; - for (let j = 0, jl = vertexIndices.length; j < jl; j++) { - const stride = vertexIndices[j] * 3; - const nx = frame.normals[stride]; - const ny = frame.normals[stride + 1]; - const nz = frame.normals[stride + 2]; - normals2.push(nx, ny, nz); - } - const normalAttribute = new Float32BufferAttribute(normals2, 3); - normalAttribute.name = attributeName; - morphNormals.push(normalAttribute); - } - } - geometry.morphAttributes.position = morphPositions; - geometry.morphAttributes.normal = morphNormals; - geometry.morphTargetsRelative = false; - geometry.animations = AnimationClip.CreateClipsFromMorphTargetSequences(frames, 10); - return geometry; - } -}; -//#endregion -//#region node_modules/three-stdlib/misc/MorphBlendMesh.js -var MorphBlendMesh = class extends Mesh { - constructor(geometry, material) { - super(geometry, material); - this.animationsMap = {}; - this.animationsList = []; - const numFrames = Object.keys(this.morphTargetDictionary).length; - const name = "__default"; - const startFrame = 0; - const endFrame = numFrames - 1; - const fps = numFrames / 1; - this.createAnimation(name, startFrame, endFrame, fps); - this.setAnimationWeight(name, 1); - } - createAnimation(name, start, end, fps) { - const animation = { - start, - end, - length: end - start + 1, - fps, - duration: (end - start) / fps, - lastFrame: 0, - currentFrame: 0, - active: false, - time: 0, - direction: 1, - weight: 1, - directionBackwards: false, - mirroredLoop: false - }; - this.animationsMap[name] = animation; - this.animationsList.push(animation); - } - autoCreateAnimations(fps) { - const pattern = /([a-z]+)_?(\d+)/i; - let firstAnimation; - const frameRanges = {}; - let i = 0; - for (const key in this.morphTargetDictionary) { - const chunks = key.match(pattern); - if (chunks && chunks.length > 1) { - const name = chunks[1]; - if (!frameRanges[name]) frameRanges[name] = { - start: Infinity, - end: -Infinity - }; - const range = frameRanges[name]; - if (i < range.start) range.start = i; - if (i > range.end) range.end = i; - if (!firstAnimation) firstAnimation = name; - } - i++; - } - for (const name in frameRanges) { - const range = frameRanges[name]; - this.createAnimation(name, range.start, range.end, fps); - } - this.firstAnimation = firstAnimation; - } - setAnimationDirectionForward(name) { - const animation = this.animationsMap[name]; - if (animation) { - animation.direction = 1; - animation.directionBackwards = false; - } - } - setAnimationDirectionBackward(name) { - const animation = this.animationsMap[name]; - if (animation) { - animation.direction = -1; - animation.directionBackwards = true; - } - } - setAnimationFPS(name, fps) { - const animation = this.animationsMap[name]; - if (animation) { - animation.fps = fps; - animation.duration = (animation.end - animation.start) / animation.fps; - } - } - setAnimationDuration(name, duration) { - const animation = this.animationsMap[name]; - if (animation) { - animation.duration = duration; - animation.fps = (animation.end - animation.start) / animation.duration; - } - } - setAnimationWeight(name, weight) { - const animation = this.animationsMap[name]; - if (animation) animation.weight = weight; - } - setAnimationTime(name, time) { - const animation = this.animationsMap[name]; - if (animation) animation.time = time; - } - getAnimationTime(name) { - let time = 0; - const animation = this.animationsMap[name]; - if (animation) time = animation.time; - return time; - } - getAnimationDuration(name) { - let duration = -1; - const animation = this.animationsMap[name]; - if (animation) duration = animation.duration; - return duration; - } - playAnimation(name) { - const animation = this.animationsMap[name]; - if (animation) { - animation.time = 0; - animation.active = true; - } else console.warn("THREE.MorphBlendMesh: animation[" + name + "] undefined in .playAnimation()"); - } - stopAnimation(name) { - const animation = this.animationsMap[name]; - if (animation) animation.active = false; - } - update(delta) { - for (let i = 0, il = this.animationsList.length; i < il; i++) { - const animation = this.animationsList[i]; - if (!animation.active) continue; - const frameTime = animation.duration / animation.length; - animation.time += animation.direction * delta; - if (animation.mirroredLoop) { - if (animation.time > animation.duration || animation.time < 0) { - animation.direction *= -1; - if (animation.time > animation.duration) { - animation.time = animation.duration; - animation.directionBackwards = true; - } - if (animation.time < 0) { - animation.time = 0; - animation.directionBackwards = false; - } - } - } else { - animation.time = animation.time % animation.duration; - if (animation.time < 0) animation.time += animation.duration; - } - const keyframe = animation.start + MathUtils.clamp(Math.floor(animation.time / frameTime), 0, animation.length - 1); - const weight = animation.weight; - if (keyframe !== animation.currentFrame) { - this.morphTargetInfluences[animation.lastFrame] = 0; - this.morphTargetInfluences[animation.currentFrame] = 1 * weight; - this.morphTargetInfluences[keyframe] = 0; - animation.lastFrame = animation.currentFrame; - animation.currentFrame = keyframe; - } - let mix = animation.time % frameTime / frameTime; - if (animation.directionBackwards) mix = 1 - mix; - if (animation.currentFrame !== animation.lastFrame) { - this.morphTargetInfluences[animation.currentFrame] = mix * weight; - this.morphTargetInfluences[animation.lastFrame] = (1 - mix) * weight; - } else this.morphTargetInfluences[animation.currentFrame] = weight; - } - } -}; -//#endregion -//#region node_modules/three-stdlib/misc/MD2CharacterComplex.js -var MD2CharacterComplex = class { - constructor() { - this.scale = 1; - this.animationFPS = 6; - this.transitionFrames = 15; - this.maxSpeed = 275; - this.maxReverseSpeed = -275; - this.frontAcceleration = 600; - this.backAcceleration = 600; - this.frontDecceleration = 600; - this.angularSpeed = 2.5; - this.root = new Object3D(); - this.meshBody = null; - this.meshWeapon = null; - this.controls = null; - this.skinsBody = []; - this.skinsWeapon = []; - this.weapons = []; - this.currentSkin = void 0; - this.onLoadComplete = function() {}; - this.meshes = []; - this.animations = {}; - this.loadCounter = 0; - this.speed = 0; - this.bodyOrientation = 0; - this.walkSpeed = this.maxSpeed; - this.crouchSpeed = this.maxSpeed * .5; - this.activeAnimation = null; - this.oldAnimation = null; - } - enableShadows(enable) { - for (let i = 0; i < this.meshes.length; i++) { - this.meshes[i].castShadow = enable; - this.meshes[i].receiveShadow = enable; - } - } - setVisible(enable) { - for (let i = 0; i < this.meshes.length; i++) { - this.meshes[i].visible = enable; - this.meshes[i].visible = enable; - } - } - shareParts(original) { - this.animations = original.animations; - this.walkSpeed = original.walkSpeed; - this.crouchSpeed = original.crouchSpeed; - this.skinsBody = original.skinsBody; - this.skinsWeapon = original.skinsWeapon; - const mesh = this._createPart(original.meshBody.geometry, this.skinsBody[0]); - mesh.scale.set(this.scale, this.scale, this.scale); - this.root.position.y = original.root.position.y; - this.root.add(mesh); - this.meshBody = mesh; - this.meshes.push(mesh); - for (let i = 0; i < original.weapons.length; i++) { - const meshWeapon = this._createPart(original.weapons[i].geometry, this.skinsWeapon[i]); - meshWeapon.scale.set(this.scale, this.scale, this.scale); - meshWeapon.visible = false; - meshWeapon.name = original.weapons[i].name; - this.root.add(meshWeapon); - this.weapons[i] = meshWeapon; - this.meshWeapon = meshWeapon; - this.meshes.push(meshWeapon); - } - } - loadParts(config) { - const scope = this; - function loadTextures(baseUrl, textureUrls) { - const textureLoader = new TextureLoader(); - const textures = []; - for (let i = 0; i < textureUrls.length; i++) { - textures[i] = textureLoader.load(baseUrl + textureUrls[i], checkLoadingComplete); - textures[i].mapping = 300; - textures[i].name = textureUrls[i]; - if ("colorSpace" in textures[i]) textures[i].colorSpace = "srgb"; - else textures[i].encoding = 3001; - } - return textures; - } - function checkLoadingComplete() { - scope.loadCounter -= 1; - if (scope.loadCounter === 0) scope.onLoadComplete(); - } - this.animations = config.animations; - this.walkSpeed = config.walkSpeed; - this.crouchSpeed = config.crouchSpeed; - this.loadCounter = config.weapons.length * 2 + config.skins.length + 1; - const weaponsTextures = []; - for (let i = 0; i < config.weapons.length; i++) weaponsTextures[i] = config.weapons[i][1]; - this.skinsBody = loadTextures(config.baseUrl + "skins/", config.skins); - this.skinsWeapon = loadTextures(config.baseUrl + "skins/", weaponsTextures); - const loader = new MD2Loader(); - loader.load(config.baseUrl + config.body, function(geo) { - const boundingBox = new Box3(); - boundingBox.setFromBufferAttribute(geo.attributes.position); - scope.root.position.y = -scope.scale * boundingBox.min.y; - const mesh = scope._createPart(geo, scope.skinsBody[0]); - mesh.scale.set(scope.scale, scope.scale, scope.scale); - scope.root.add(mesh); - scope.meshBody = mesh; - scope.meshes.push(mesh); - checkLoadingComplete(); - }); - const generateCallback = function(index, name) { - return function(geo) { - const mesh = scope._createPart(geo, scope.skinsWeapon[index]); - mesh.scale.set(scope.scale, scope.scale, scope.scale); - mesh.visible = false; - mesh.name = name; - scope.root.add(mesh); - scope.weapons[index] = mesh; - scope.meshWeapon = mesh; - scope.meshes.push(mesh); - checkLoadingComplete(); - }; - }; - for (let i = 0; i < config.weapons.length; i++) loader.load(config.baseUrl + config.weapons[i][0], generateCallback(i, config.weapons[i][0])); - } - setPlaybackRate(rate) { - if (this.meshBody) this.meshBody.duration = this.meshBody.baseDuration / rate; - if (this.meshWeapon) this.meshWeapon.duration = this.meshWeapon.baseDuration / rate; - } - setWireframe(wireframeEnabled) { - if (wireframeEnabled) { - if (this.meshBody) this.meshBody.material = this.meshBody.materialWireframe; - if (this.meshWeapon) this.meshWeapon.material = this.meshWeapon.materialWireframe; - } else { - if (this.meshBody) this.meshBody.material = this.meshBody.materialTexture; - if (this.meshWeapon) this.meshWeapon.material = this.meshWeapon.materialTexture; - } - } - setSkin(index) { - if (this.meshBody && this.meshBody.material.wireframe === false) { - this.meshBody.material.map = this.skinsBody[index]; - this.currentSkin = index; - } - } - setWeapon(index) { - for (let i = 0; i < this.weapons.length; i++) this.weapons[i].visible = false; - const activeWeapon = this.weapons[index]; - if (activeWeapon) { - activeWeapon.visible = true; - this.meshWeapon = activeWeapon; - if (this.activeAnimation) { - activeWeapon.playAnimation(this.activeAnimation); - this.meshWeapon.setAnimationTime(this.activeAnimation, this.meshBody.getAnimationTime(this.activeAnimation)); - } - } - } - setAnimation(animationName) { - if (animationName === this.activeAnimation || !animationName) return; - if (this.meshBody) { - this.meshBody.setAnimationWeight(animationName, 0); - this.meshBody.playAnimation(animationName); - this.oldAnimation = this.activeAnimation; - this.activeAnimation = animationName; - this.blendCounter = this.transitionFrames; - } - if (this.meshWeapon) { - this.meshWeapon.setAnimationWeight(animationName, 0); - this.meshWeapon.playAnimation(animationName); - } - } - update(delta) { - if (this.controls) this.updateMovementModel(delta); - if (this.animations) { - this.updateBehaviors(); - this.updateAnimations(delta); - } - } - updateAnimations(delta) { - let mix = 1; - if (this.blendCounter > 0) { - mix = (this.transitionFrames - this.blendCounter) / this.transitionFrames; - this.blendCounter -= 1; - } - if (this.meshBody) { - this.meshBody.update(delta); - this.meshBody.setAnimationWeight(this.activeAnimation, mix); - this.meshBody.setAnimationWeight(this.oldAnimation, 1 - mix); - } - if (this.meshWeapon) { - this.meshWeapon.update(delta); - this.meshWeapon.setAnimationWeight(this.activeAnimation, mix); - this.meshWeapon.setAnimationWeight(this.oldAnimation, 1 - mix); - } - } - updateBehaviors() { - const controls = this.controls; - const animations = this.animations; - let moveAnimation, idleAnimation; - if (controls.crouch) { - moveAnimation = animations["crouchMove"]; - idleAnimation = animations["crouchIdle"]; - } else { - moveAnimation = animations["move"]; - idleAnimation = animations["idle"]; - } - if (controls.jump) { - moveAnimation = animations["jump"]; - idleAnimation = animations["jump"]; - } - if (controls.attack) if (controls.crouch) { - moveAnimation = animations["crouchAttack"]; - idleAnimation = animations["crouchAttack"]; - } else { - moveAnimation = animations["attack"]; - idleAnimation = animations["attack"]; - } - if (controls.moveForward || controls.moveBackward || controls.moveLeft || controls.moveRight) { - if (this.activeAnimation !== moveAnimation) this.setAnimation(moveAnimation); - } - if (Math.abs(this.speed) < .2 * this.maxSpeed && !(controls.moveLeft || controls.moveRight || controls.moveForward || controls.moveBackward)) { - if (this.activeAnimation !== idleAnimation) this.setAnimation(idleAnimation); - } - if (controls.moveForward) { - if (this.meshBody) { - this.meshBody.setAnimationDirectionForward(this.activeAnimation); - this.meshBody.setAnimationDirectionForward(this.oldAnimation); - } - if (this.meshWeapon) { - this.meshWeapon.setAnimationDirectionForward(this.activeAnimation); - this.meshWeapon.setAnimationDirectionForward(this.oldAnimation); - } - } - if (controls.moveBackward) { - if (this.meshBody) { - this.meshBody.setAnimationDirectionBackward(this.activeAnimation); - this.meshBody.setAnimationDirectionBackward(this.oldAnimation); - } - if (this.meshWeapon) { - this.meshWeapon.setAnimationDirectionBackward(this.activeAnimation); - this.meshWeapon.setAnimationDirectionBackward(this.oldAnimation); - } - } - } - updateMovementModel(delta) { - function exponentialEaseOut(k) { - return k === 1 ? 1 : -Math.pow(2, -10 * k) + 1; - } - const controls = this.controls; - if (controls.crouch) this.maxSpeed = this.crouchSpeed; - else this.maxSpeed = this.walkSpeed; - this.maxReverseSpeed = -this.maxSpeed; - if (controls.moveForward) this.speed = MathUtils.clamp(this.speed + delta * this.frontAcceleration, this.maxReverseSpeed, this.maxSpeed); - if (controls.moveBackward) this.speed = MathUtils.clamp(this.speed - delta * this.backAcceleration, this.maxReverseSpeed, this.maxSpeed); - const dir = 1; - if (controls.moveLeft) { - this.bodyOrientation += delta * this.angularSpeed; - this.speed = MathUtils.clamp(this.speed + dir * delta * this.frontAcceleration, this.maxReverseSpeed, this.maxSpeed); - } - if (controls.moveRight) { - this.bodyOrientation -= delta * this.angularSpeed; - this.speed = MathUtils.clamp(this.speed + dir * delta * this.frontAcceleration, this.maxReverseSpeed, this.maxSpeed); - } - if (!(controls.moveForward || controls.moveBackward)) if (this.speed > 0) { - const k = exponentialEaseOut(this.speed / this.maxSpeed); - this.speed = MathUtils.clamp(this.speed - k * delta * this.frontDecceleration, 0, this.maxSpeed); - } else { - const k = exponentialEaseOut(this.speed / this.maxReverseSpeed); - this.speed = MathUtils.clamp(this.speed + k * delta * this.backAcceleration, this.maxReverseSpeed, 0); - } - const forwardDelta = this.speed * delta; - this.root.position.x += Math.sin(this.bodyOrientation) * forwardDelta; - this.root.position.z += Math.cos(this.bodyOrientation) * forwardDelta; - this.root.rotation.y = this.bodyOrientation; - } - _createPart(geometry, skinMap) { - const materialWireframe = new MeshLambertMaterial({ - color: 16755200, - wireframe: true, - morphTargets: true, - morphNormals: true - }); - const materialTexture = new MeshLambertMaterial({ - color: 16777215, - wireframe: false, - map: skinMap, - morphTargets: true, - morphNormals: true - }); - const mesh = new MorphBlendMesh(geometry, materialTexture); - mesh.rotation.y = -Math.PI / 2; - mesh.materialTexture = materialTexture; - mesh.materialWireframe = materialWireframe; - mesh.autoCreateAnimations(this.animationFPS); - return mesh; - } -}; -//#endregion -//#region node_modules/three-stdlib/math/ConvexHull.js -var Visible = 0; -var Deleted = 1; -var _v1$5 = /* @__PURE__ */ new Vector3(); -var _line3 = /* @__PURE__ */ new Line3(); -var _plane$2 = /* @__PURE__ */ new Plane(); -var _closestPoint$1 = /* @__PURE__ */ new Vector3(); -var _triangle = /* @__PURE__ */ new Triangle$1(); -var ConvexHull = class { - constructor() { - this.tolerance = -1; - this.faces = []; - this.newFaces = []; - this.assigned = new VertexList(); - this.unassigned = new VertexList(); - this.vertices = []; - } - setFromPoints(points) { - if (points.length >= 4) { - this.makeEmpty(); - for (let i = 0, l = points.length; i < l; i++) this.vertices.push(new VertexNode(points[i])); - this.compute(); - } - return this; - } - setFromObject(object) { - const points = []; - object.updateMatrixWorld(true); - object.traverse(function(node) { - const geometry = node.geometry; - if (geometry !== void 0) { - const attribute = geometry.attributes.position; - if (attribute !== void 0) for (let i = 0, l = attribute.count; i < l; i++) { - const point = new Vector3(); - point.fromBufferAttribute(attribute, i).applyMatrix4(node.matrixWorld); - points.push(point); - } - } - }); - return this.setFromPoints(points); - } - containsPoint(point) { - const faces = this.faces; - for (let i = 0, l = faces.length; i < l; i++) if (faces[i].distanceToPoint(point) > this.tolerance) return false; - return true; - } - intersectRay(ray, target) { - const faces = this.faces; - let tNear = -Infinity; - let tFar = Infinity; - for (let i = 0, l = faces.length; i < l; i++) { - const face = faces[i]; - const vN = face.distanceToPoint(ray.origin); - const vD = face.normal.dot(ray.direction); - if (vN > 0 && vD >= 0) return null; - const t = vD !== 0 ? -vN / vD : 0; - if (t <= 0) continue; - if (vD > 0) tFar = Math.min(t, tFar); - else tNear = Math.max(t, tNear); - if (tNear > tFar) return null; - } - if (tNear !== -Infinity) ray.at(tNear, target); - else ray.at(tFar, target); - return target; - } - intersectsRay(ray) { - return this.intersectRay(ray, _v1$5) !== null; - } - makeEmpty() { - this.faces = []; - this.vertices = []; - return this; - } - addVertexToFace(vertex, face) { - vertex.face = face; - if (face.outside === null) this.assigned.append(vertex); - else this.assigned.insertBefore(face.outside, vertex); - face.outside = vertex; - return this; - } - removeVertexFromFace(vertex, face) { - if (vertex === face.outside) if (vertex.next !== null && vertex.next.face === face) face.outside = vertex.next; - else face.outside = null; - this.assigned.remove(vertex); - return this; - } - removeAllVerticesFromFace(face) { - if (face.outside !== null) { - const start = face.outside; - let end = face.outside; - while (end.next !== null && end.next.face === face) end = end.next; - this.assigned.removeSubList(start, end); - start.prev = end.next = null; - face.outside = null; - return start; - } - } - deleteFaceVertices(face, absorbingFace) { - const faceVertices = this.removeAllVerticesFromFace(face); - if (faceVertices !== void 0) if (absorbingFace === void 0) this.unassigned.appendChain(faceVertices); - else { - let vertex = faceVertices; - do { - const nextVertex = vertex.next; - if (absorbingFace.distanceToPoint(vertex.point) > this.tolerance) this.addVertexToFace(vertex, absorbingFace); - else this.unassigned.append(vertex); - vertex = nextVertex; - } while (vertex !== null); - } - return this; - } - resolveUnassignedPoints(newFaces) { - if (this.unassigned.isEmpty() === false) { - let vertex = this.unassigned.first(); - do { - const nextVertex = vertex.next; - let maxDistance = this.tolerance; - let maxFace = null; - for (let i = 0; i < newFaces.length; i++) { - const face = newFaces[i]; - if (face.mark === Visible) { - const distance = face.distanceToPoint(vertex.point); - if (distance > maxDistance) { - maxDistance = distance; - maxFace = face; - } - if (maxDistance > 1e3 * this.tolerance) break; - } - } - if (maxFace !== null) this.addVertexToFace(vertex, maxFace); - vertex = nextVertex; - } while (vertex !== null); - } - return this; - } - computeExtremes() { - const min = new Vector3(); - const max = new Vector3(); - const minVertices = []; - const maxVertices = []; - for (let i = 0; i < 3; i++) minVertices[i] = maxVertices[i] = this.vertices[0]; - min.copy(this.vertices[0].point); - max.copy(this.vertices[0].point); - for (let i = 0, l = this.vertices.length; i < l; i++) { - const vertex = this.vertices[i]; - const point = vertex.point; - for (let j = 0; j < 3; j++) if (point.getComponent(j) < min.getComponent(j)) { - min.setComponent(j, point.getComponent(j)); - minVertices[j] = vertex; - } - for (let j = 0; j < 3; j++) if (point.getComponent(j) > max.getComponent(j)) { - max.setComponent(j, point.getComponent(j)); - maxVertices[j] = vertex; - } - } - this.tolerance = 3 * Number.EPSILON * (Math.max(Math.abs(min.x), Math.abs(max.x)) + Math.max(Math.abs(min.y), Math.abs(max.y)) + Math.max(Math.abs(min.z), Math.abs(max.z))); - return { - min: minVertices, - max: maxVertices - }; - } - computeInitialHull() { - const vertices = this.vertices; - const extremes = this.computeExtremes(); - const min = extremes.min; - const max = extremes.max; - let maxDistance = 0; - let index = 0; - for (let i = 0; i < 3; i++) { - const distance = max[i].point.getComponent(i) - min[i].point.getComponent(i); - if (distance > maxDistance) { - maxDistance = distance; - index = i; - } - } - const v0 = min[index]; - const v1 = max[index]; - let v2; - let v3; - maxDistance = 0; - _line3.set(v0.point, v1.point); - for (let i = 0, l = this.vertices.length; i < l; i++) { - const vertex = vertices[i]; - if (vertex !== v0 && vertex !== v1) { - _line3.closestPointToPoint(vertex.point, true, _closestPoint$1); - const distance = _closestPoint$1.distanceToSquared(vertex.point); - if (distance > maxDistance) { - maxDistance = distance; - v2 = vertex; - } - } - } - maxDistance = -1; - _plane$2.setFromCoplanarPoints(v0.point, v1.point, v2.point); - for (let i = 0, l = this.vertices.length; i < l; i++) { - const vertex = vertices[i]; - if (vertex !== v0 && vertex !== v1 && vertex !== v2) { - const distance = Math.abs(_plane$2.distanceToPoint(vertex.point)); - if (distance > maxDistance) { - maxDistance = distance; - v3 = vertex; - } - } - } - const faces = []; - if (_plane$2.distanceToPoint(v3.point) < 0) { - faces.push(Face$1.create(v0, v1, v2), Face$1.create(v3, v1, v0), Face$1.create(v3, v2, v1), Face$1.create(v3, v0, v2)); - for (let i = 0; i < 3; i++) { - const j = (i + 1) % 3; - faces[i + 1].getEdge(2).setTwin(faces[0].getEdge(j)); - faces[i + 1].getEdge(1).setTwin(faces[j + 1].getEdge(0)); - } - } else { - faces.push(Face$1.create(v0, v2, v1), Face$1.create(v3, v0, v1), Face$1.create(v3, v1, v2), Face$1.create(v3, v2, v0)); - for (let i = 0; i < 3; i++) { - const j = (i + 1) % 3; - faces[i + 1].getEdge(2).setTwin(faces[0].getEdge((3 - i) % 3)); - faces[i + 1].getEdge(0).setTwin(faces[j + 1].getEdge(1)); - } - } - for (let i = 0; i < 4; i++) this.faces.push(faces[i]); - for (let i = 0, l = vertices.length; i < l; i++) { - const vertex = vertices[i]; - if (vertex !== v0 && vertex !== v1 && vertex !== v2 && vertex !== v3) { - maxDistance = this.tolerance; - let maxFace = null; - for (let j = 0; j < 4; j++) { - const distance = this.faces[j].distanceToPoint(vertex.point); - if (distance > maxDistance) { - maxDistance = distance; - maxFace = this.faces[j]; - } - } - if (maxFace !== null) this.addVertexToFace(vertex, maxFace); - } - } - return this; - } - reindexFaces() { - const activeFaces = []; - for (let i = 0; i < this.faces.length; i++) { - const face = this.faces[i]; - if (face.mark === Visible) activeFaces.push(face); - } - this.faces = activeFaces; - return this; - } - nextVertexToAdd() { - if (this.assigned.isEmpty() === false) { - let eyeVertex, maxDistance = 0; - const eyeFace = this.assigned.first().face; - let vertex = eyeFace.outside; - do { - const distance = eyeFace.distanceToPoint(vertex.point); - if (distance > maxDistance) { - maxDistance = distance; - eyeVertex = vertex; - } - vertex = vertex.next; - } while (vertex !== null && vertex.face === eyeFace); - return eyeVertex; - } - } - computeHorizon(eyePoint, crossEdge, face, horizon) { - this.deleteFaceVertices(face); - face.mark = Deleted; - let edge; - if (crossEdge === null) edge = crossEdge = face.getEdge(0); - else edge = crossEdge.next; - do { - const twinEdge = edge.twin; - const oppositeFace = twinEdge.face; - if (oppositeFace.mark === Visible) if (oppositeFace.distanceToPoint(eyePoint) > this.tolerance) this.computeHorizon(eyePoint, twinEdge, oppositeFace, horizon); - else horizon.push(edge); - edge = edge.next; - } while (edge !== crossEdge); - return this; - } - addAdjoiningFace(eyeVertex, horizonEdge) { - const face = Face$1.create(eyeVertex, horizonEdge.tail(), horizonEdge.head()); - this.faces.push(face); - face.getEdge(-1).setTwin(horizonEdge.twin); - return face.getEdge(0); - } - addNewFaces(eyeVertex, horizon) { - this.newFaces = []; - let firstSideEdge = null; - let previousSideEdge = null; - for (let i = 0; i < horizon.length; i++) { - const horizonEdge = horizon[i]; - const sideEdge = this.addAdjoiningFace(eyeVertex, horizonEdge); - if (firstSideEdge === null) firstSideEdge = sideEdge; - else sideEdge.next.setTwin(previousSideEdge); - this.newFaces.push(sideEdge.face); - previousSideEdge = sideEdge; - } - firstSideEdge.next.setTwin(previousSideEdge); - return this; - } - addVertexToHull(eyeVertex) { - const horizon = []; - this.unassigned.clear(); - this.removeVertexFromFace(eyeVertex, eyeVertex.face); - this.computeHorizon(eyeVertex.point, null, eyeVertex.face, horizon); - this.addNewFaces(eyeVertex, horizon); - this.resolveUnassignedPoints(this.newFaces); - return this; - } - cleanup() { - this.assigned.clear(); - this.unassigned.clear(); - this.newFaces = []; - return this; - } - compute() { - let vertex; - this.computeInitialHull(); - while ((vertex = this.nextVertexToAdd()) !== void 0) this.addVertexToHull(vertex); - this.reindexFaces(); - this.cleanup(); - return this; - } -}; -var Face$1 = /* @__PURE__ */ (() => { - class Face2 { - constructor() { - this.normal = new Vector3(); - this.midpoint = new Vector3(); - this.area = 0; - this.constant = 0; - this.outside = null; - this.mark = Visible; - this.edge = null; - } - static create(a, b, c) { - const face = new Face2(); - const e0 = new HalfEdge(a, face); - const e1 = new HalfEdge(b, face); - const e2 = new HalfEdge(c, face); - e0.next = e2.prev = e1; - e1.next = e0.prev = e2; - e2.next = e1.prev = e0; - face.edge = e0; - return face.compute(); - } - getEdge(i) { - let edge = this.edge; - while (i > 0) { - edge = edge.next; - i--; - } - while (i < 0) { - edge = edge.prev; - i++; - } - return edge; - } - compute() { - const a = this.edge.tail(); - const b = this.edge.head(); - const c = this.edge.next.head(); - _triangle.set(a.point, b.point, c.point); - _triangle.getNormal(this.normal); - _triangle.getMidpoint(this.midpoint); - this.area = _triangle.getArea(); - this.constant = this.normal.dot(this.midpoint); - return this; - } - distanceToPoint(point) { - return this.normal.dot(point) - this.constant; - } - } - return Face2; -})(); -var HalfEdge = class { - constructor(vertex, face) { - this.vertex = vertex; - this.prev = null; - this.next = null; - this.twin = null; - this.face = face; - } - head() { - return this.vertex; - } - tail() { - return this.prev ? this.prev.vertex : null; - } - length() { - const head = this.head(); - const tail = this.tail(); - if (tail !== null) return tail.point.distanceTo(head.point); - return -1; - } - lengthSquared() { - const head = this.head(); - const tail = this.tail(); - if (tail !== null) return tail.point.distanceToSquared(head.point); - return -1; - } - setTwin(edge) { - this.twin = edge; - edge.twin = this; - return this; - } -}; -var VertexNode = class { - constructor(point) { - this.point = point; - this.prev = null; - this.next = null; - this.face = null; - } -}; -var VertexList = class { - constructor() { - this.head = null; - this.tail = null; - } - first() { - return this.head; - } - last() { - return this.tail; - } - clear() { - this.head = this.tail = null; - return this; - } - insertBefore(target, vertex) { - vertex.prev = target.prev; - vertex.next = target; - if (vertex.prev === null) this.head = vertex; - else vertex.prev.next = vertex; - target.prev = vertex; - return this; - } - insertAfter(target, vertex) { - vertex.prev = target; - vertex.next = target.next; - if (vertex.next === null) this.tail = vertex; - else vertex.next.prev = vertex; - target.next = vertex; - return this; - } - append(vertex) { - if (this.head === null) this.head = vertex; - else this.tail.next = vertex; - vertex.prev = this.tail; - vertex.next = null; - this.tail = vertex; - return this; - } - appendChain(vertex) { - if (this.head === null) this.head = vertex; - else this.tail.next = vertex; - vertex.prev = this.tail; - while (vertex.next !== null) vertex = vertex.next; - this.tail = vertex; - return this; - } - remove(vertex) { - if (vertex.prev === null) this.head = vertex.next; - else vertex.prev.next = vertex.next; - if (vertex.next === null) this.tail = vertex.prev; - else vertex.next.prev = vertex.prev; - return this; - } - removeSubList(a, b) { - if (a.prev === null) this.head = b.next; - else a.prev.next = b.next; - if (b.next === null) this.tail = a.prev; - else b.next.prev = a.prev; - return this; - } - isEmpty() { - return this.head === null; - } -}; -//#endregion -//#region node_modules/three-stdlib/geometries/ConvexGeometry.js -var ConvexGeometry = class extends BufferGeometry { - constructor(points = []) { - super(); - const vertices = []; - const normals = []; - const faces = new ConvexHull().setFromPoints(points).faces; - for (let i = 0; i < faces.length; i++) { - const face = faces[i]; - let edge = face.edge; - do { - const point = edge.head().point; - vertices.push(point.x, point.y, point.z); - normals.push(face.normal.x, face.normal.y, face.normal.z); - edge = edge.next; - } while (edge !== face.edge); - } - this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); - } -}; -//#endregion -//#region node_modules/three-stdlib/misc/ConvexObjectBreaker.js -var _v1$4 = /* @__PURE__ */ new Vector3(); -var ConvexObjectBreaker = /* @__PURE__ */ (() => { - class ConvexObjectBreaker2 { - constructor(minSizeForBreak = 1.4, smallDelta = 1e-4) { - this.minSizeForBreak = minSizeForBreak; - this.smallDelta = smallDelta; - this.tempLine1 = new Line3(); - this.tempPlane1 = new Plane(); - this.tempPlane2 = new Plane(); - this.tempPlane_Cut = new Plane(); - this.tempCM1 = new Vector3(); - this.tempCM2 = new Vector3(); - this.tempVector3 = new Vector3(); - this.tempVector3_2 = new Vector3(); - this.tempVector3_3 = new Vector3(); - this.tempVector3_P0 = new Vector3(); - this.tempVector3_P1 = new Vector3(); - this.tempVector3_P2 = new Vector3(); - this.tempVector3_N0 = new Vector3(); - this.tempVector3_N1 = new Vector3(); - this.tempVector3_AB = new Vector3(); - this.tempVector3_CB = new Vector3(); - this.tempResultObjects = { - object1: null, - object2: null - }; - this.segments = []; - const n = 900; - for (let i = 0; i < n; i++) this.segments[i] = false; - } - prepareBreakableObject(object, mass, velocity, angularVelocity, breakable) { - const userData = object.userData; - userData.mass = mass; - userData.velocity = velocity.clone(); - userData.angularVelocity = angularVelocity.clone(); - userData.breakable = breakable; - } - subdivideByImpact(object, pointOfImpact, normal, maxRadialIterations, maxRandomIterations) { - const debris = []; - const tempPlane1 = this.tempPlane1; - const tempPlane2 = this.tempPlane2; - this.tempVector3.addVectors(pointOfImpact, normal); - tempPlane1.setFromCoplanarPoints(pointOfImpact, object.position, this.tempVector3); - const maxTotalIterations = maxRandomIterations + maxRadialIterations; - const scope = this; - function subdivideRadial(subObject, startAngle, endAngle, numIterations) { - if (Math.random() < numIterations * .05 || numIterations > maxTotalIterations) { - debris.push(subObject); - return; - } - let angle = Math.PI; - if (numIterations === 0) { - tempPlane2.normal.copy(tempPlane1.normal); - tempPlane2.constant = tempPlane1.constant; - } else if (numIterations <= maxRadialIterations) { - angle = (endAngle - startAngle) * (.2 + .6 * Math.random()) + startAngle; - scope.tempVector3_2.copy(object.position).sub(pointOfImpact).applyAxisAngle(normal, angle).add(pointOfImpact); - tempPlane2.setFromCoplanarPoints(pointOfImpact, scope.tempVector3, scope.tempVector3_2); - } else { - angle = (.5 * (numIterations & 1) + .2 * (2 - Math.random())) * Math.PI; - scope.tempVector3_2.copy(pointOfImpact).sub(subObject.position).applyAxisAngle(normal, angle).add(subObject.position); - scope.tempVector3_3.copy(normal).add(subObject.position); - tempPlane2.setFromCoplanarPoints(subObject.position, scope.tempVector3_3, scope.tempVector3_2); - } - scope.cutByPlane(subObject, tempPlane2, scope.tempResultObjects); - const obj1 = scope.tempResultObjects.object1; - const obj2 = scope.tempResultObjects.object2; - if (obj1) subdivideRadial(obj1, startAngle, angle, numIterations + 1); - if (obj2) subdivideRadial(obj2, angle, endAngle, numIterations + 1); - } - subdivideRadial(object, 0, 2 * Math.PI, 0); - return debris; - } - cutByPlane(object, plane, output) { - const geometry = object.geometry; - const coords = geometry.attributes.position.array; - const normals = geometry.attributes.normal.array; - const numPoints = coords.length / 3; - let numFaces = numPoints / 3; - let indices = geometry.getIndex(); - if (indices) { - indices = indices.array; - numFaces = indices.length / 3; - } - function getVertexIndex(faceIdx, vert) { - const idx = faceIdx * 3 + vert; - return indices ? indices[idx] : idx; - } - const points1 = []; - const points2 = []; - const delta = this.smallDelta; - const numPointPairs = numPoints * numPoints; - for (let i = 0; i < numPointPairs; i++) this.segments[i] = false; - const p0 = this.tempVector3_P0; - const p1 = this.tempVector3_P1; - const n0 = this.tempVector3_N0; - const n1 = this.tempVector3_N1; - for (let i = 0; i < numFaces - 1; i++) { - const a1 = getVertexIndex(i, 0); - const b1 = getVertexIndex(i, 1); - const c1 = getVertexIndex(i, 2); - n0.set(normals[a1], normals[a1] + 1, normals[a1] + 2); - for (let j = i + 1; j < numFaces; j++) { - const a2 = getVertexIndex(j, 0); - const b2 = getVertexIndex(j, 1); - const c2 = getVertexIndex(j, 2); - n1.set(normals[a2], normals[a2] + 1, normals[a2] + 2); - if (1 - n0.dot(n1) < delta) { - if (a1 === a2 || a1 === b2 || a1 === c2) if (b1 === a2 || b1 === b2 || b1 === c2) { - this.segments[a1 * numPoints + b1] = true; - this.segments[b1 * numPoints + a1] = true; - } else { - this.segments[c1 * numPoints + a1] = true; - this.segments[a1 * numPoints + c1] = true; - } - else if (b1 === a2 || b1 === b2 || b1 === c2) { - this.segments[c1 * numPoints + b1] = true; - this.segments[b1 * numPoints + c1] = true; - } - } - } - } - const localPlane = this.tempPlane_Cut; - object.updateMatrix(); - ConvexObjectBreaker2.transformPlaneToLocalSpace(plane, object.matrix, localPlane); - for (let i = 0; i < numFaces; i++) { - const va = getVertexIndex(i, 0); - const vb = getVertexIndex(i, 1); - const vc = getVertexIndex(i, 2); - for (let segment = 0; segment < 3; segment++) { - const i0 = segment === 0 ? va : segment === 1 ? vb : vc; - const i1 = segment === 0 ? vb : segment === 1 ? vc : va; - if (this.segments[i0 * numPoints + i1]) continue; - this.segments[i0 * numPoints + i1] = true; - this.segments[i1 * numPoints + i0] = true; - p0.set(coords[3 * i0], coords[3 * i0 + 1], coords[3 * i0 + 2]); - p1.set(coords[3 * i1], coords[3 * i1 + 1], coords[3 * i1 + 2]); - let mark0 = 0; - let d = localPlane.distanceToPoint(p0); - if (d > delta) { - mark0 = 2; - points2.push(p0.clone()); - } else if (d < -delta) { - mark0 = 1; - points1.push(p0.clone()); - } else { - mark0 = 3; - points1.push(p0.clone()); - points2.push(p0.clone()); - } - let mark1 = 0; - d = localPlane.distanceToPoint(p1); - if (d > delta) { - mark1 = 2; - points2.push(p1.clone()); - } else if (d < -delta) { - mark1 = 1; - points1.push(p1.clone()); - } else { - mark1 = 3; - points1.push(p1.clone()); - points2.push(p1.clone()); - } - if (mark0 === 1 && mark1 === 2 || mark0 === 2 && mark1 === 1) { - this.tempLine1.start.copy(p0); - this.tempLine1.end.copy(p1); - let intersection = new Vector3(); - intersection = localPlane.intersectLine(this.tempLine1, intersection); - if (intersection === null) { - console.error("Internal error: segment does not intersect plane."); - output.segmentedObject1 = null; - output.segmentedObject2 = null; - return 0; - } - points1.push(intersection); - points2.push(intersection.clone()); - } - } - } - const newMass = object.userData.mass * .5; - this.tempCM1.set(0, 0, 0); - let radius1 = 0; - const numPoints1 = points1.length; - if (numPoints1 > 0) { - for (let i = 0; i < numPoints1; i++) this.tempCM1.add(points1[i]); - this.tempCM1.divideScalar(numPoints1); - for (let i = 0; i < numPoints1; i++) { - const p = points1[i]; - p.sub(this.tempCM1); - radius1 = Math.max(radius1, p.x, p.y, p.z); - } - this.tempCM1.add(object.position); - } - this.tempCM2.set(0, 0, 0); - let radius2 = 0; - const numPoints2 = points2.length; - if (numPoints2 > 0) { - for (let i = 0; i < numPoints2; i++) this.tempCM2.add(points2[i]); - this.tempCM2.divideScalar(numPoints2); - for (let i = 0; i < numPoints2; i++) { - const p = points2[i]; - p.sub(this.tempCM2); - radius2 = Math.max(radius2, p.x, p.y, p.z); - } - this.tempCM2.add(object.position); - } - let object1 = null; - let object2 = null; - let numObjects = 0; - if (numPoints1 > 4) { - object1 = new Mesh(new ConvexGeometry(points1), object.material); - object1.position.copy(this.tempCM1); - object1.quaternion.copy(object.quaternion); - this.prepareBreakableObject(object1, newMass, object.userData.velocity, object.userData.angularVelocity, 2 * radius1 > this.minSizeForBreak); - numObjects++; - } - if (numPoints2 > 4) { - object2 = new Mesh(new ConvexGeometry(points2), object.material); - object2.position.copy(this.tempCM2); - object2.quaternion.copy(object.quaternion); - this.prepareBreakableObject(object2, newMass, object.userData.velocity, object.userData.angularVelocity, 2 * radius2 > this.minSizeForBreak); - numObjects++; - } - output.object1 = object1; - output.object2 = object2; - return numObjects; - } - static transformFreeVector(v, m) { - const x = v.x, y = v.y, z = v.z; - const e = m.elements; - v.x = e[0] * x + e[4] * y + e[8] * z; - v.y = e[1] * x + e[5] * y + e[9] * z; - v.z = e[2] * x + e[6] * y + e[10] * z; - return v; - } - static transformFreeVectorInverse(v, m) { - const x = v.x, y = v.y, z = v.z; - const e = m.elements; - v.x = e[0] * x + e[1] * y + e[2] * z; - v.y = e[4] * x + e[5] * y + e[6] * z; - v.z = e[8] * x + e[9] * y + e[10] * z; - return v; - } - static transformTiedVectorInverse(v, m) { - const x = v.x, y = v.y, z = v.z; - const e = m.elements; - v.x = e[0] * x + e[1] * y + e[2] * z - e[12]; - v.y = e[4] * x + e[5] * y + e[6] * z - e[13]; - v.z = e[8] * x + e[9] * y + e[10] * z - e[14]; - return v; - } - static transformPlaneToLocalSpace(plane, m, resultPlane) { - resultPlane.normal.copy(plane.normal); - resultPlane.constant = plane.constant; - const referencePoint = ConvexObjectBreaker2.transformTiedVectorInverse(plane.coplanarPoint(_v1$4), m); - ConvexObjectBreaker2.transformFreeVectorInverse(resultPlane.normal, m); - resultPlane.constant = -referencePoint.dot(resultPlane.normal); - } - } - return ConvexObjectBreaker2; -})(); -//#endregion -//#region node_modules/three-stdlib/misc/GPUComputationRenderer.js -var GPUComputationRenderer = class { - constructor(sizeX, sizeY, renderer) { - this.variables = []; - this.currentTextureIndex = 0; - let dataType = FloatType; - const scene = new Scene(); - const camera = new Camera(); - camera.position.z = 1; - const passThruUniforms = { passThruTexture: { value: null } }; - const passThruShader = createShaderMaterial(getPassThroughFragmentShader(), passThruUniforms); - const mesh = new Mesh(new PlaneGeometry(2, 2), passThruShader); - scene.add(mesh); - this.setDataType = function(type) { - dataType = type; - return this; - }; - this.addVariable = function(variableName, computeFragmentShader, initialValueTexture) { - const variable = { - name: variableName, - initialValueTexture, - material: this.createShaderMaterial(computeFragmentShader), - dependencies: null, - renderTargets: [], - wrapS: null, - wrapT: null, - minFilter: NearestFilter, - magFilter: NearestFilter - }; - this.variables.push(variable); - return variable; - }; - this.setVariableDependencies = function(variable, dependencies) { - variable.dependencies = dependencies; - }; - this.init = function() { - if (renderer.capabilities.isWebGL2 === false && renderer.extensions.has("OES_texture_float") === false) return "No OES_texture_float support for float textures."; - if (renderer.capabilities.maxVertexTextures === 0) return "No support for vertex shader textures."; - for (let i = 0; i < this.variables.length; i++) { - const variable = this.variables[i]; - variable.renderTargets[0] = this.createRenderTarget(sizeX, sizeY, variable.wrapS, variable.wrapT, variable.minFilter, variable.magFilter); - variable.renderTargets[1] = this.createRenderTarget(sizeX, sizeY, variable.wrapS, variable.wrapT, variable.minFilter, variable.magFilter); - this.renderTexture(variable.initialValueTexture, variable.renderTargets[0]); - this.renderTexture(variable.initialValueTexture, variable.renderTargets[1]); - const material = variable.material; - const uniforms = material.uniforms; - if (variable.dependencies !== null) for (let d = 0; d < variable.dependencies.length; d++) { - const depVar = variable.dependencies[d]; - if (depVar.name !== variable.name) { - let found = false; - for (let j = 0; j < this.variables.length; j++) if (depVar.name === this.variables[j].name) { - found = true; - break; - } - if (!found) return "Variable dependency not found. Variable=" + variable.name + ", dependency=" + depVar.name; - } - uniforms[depVar.name] = { value: null }; - material.fragmentShader = "\nuniform sampler2D " + depVar.name + ";\n" + material.fragmentShader; - } - } - this.currentTextureIndex = 0; - return null; - }; - this.compute = function() { - const currentTextureIndex = this.currentTextureIndex; - const nextTextureIndex = this.currentTextureIndex === 0 ? 1 : 0; - for (let i = 0, il = this.variables.length; i < il; i++) { - const variable = this.variables[i]; - if (variable.dependencies !== null) { - const uniforms = variable.material.uniforms; - for (let d = 0, dl = variable.dependencies.length; d < dl; d++) { - const depVar = variable.dependencies[d]; - uniforms[depVar.name].value = depVar.renderTargets[currentTextureIndex].texture; - } - } - this.doRenderTarget(variable.material, variable.renderTargets[nextTextureIndex]); - } - this.currentTextureIndex = nextTextureIndex; - }; - this.getCurrentRenderTarget = function(variable) { - return variable.renderTargets[this.currentTextureIndex]; - }; - this.getAlternateRenderTarget = function(variable) { - return variable.renderTargets[this.currentTextureIndex === 0 ? 1 : 0]; - }; - this.dispose = function() { - mesh.geometry.dispose(); - mesh.material.dispose(); - const variables = this.variables; - for (let i = 0; i < variables.length; i++) { - const variable = variables[i]; - if (variable.initialValueTexture) variable.initialValueTexture.dispose(); - const renderTargets = variable.renderTargets; - for (let j = 0; j < renderTargets.length; j++) renderTargets[j].dispose(); - } - }; - function addResolutionDefine(materialShader) { - materialShader.defines.resolution = "vec2( " + sizeX.toFixed(1) + ", " + sizeY.toFixed(1) + " )"; - } - this.addResolutionDefine = addResolutionDefine; - function createShaderMaterial(computeFragmentShader, uniforms) { - uniforms = uniforms || {}; - const material = new ShaderMaterial({ - uniforms, - vertexShader: getPassThroughVertexShader(), - fragmentShader: computeFragmentShader - }); - addResolutionDefine(material); - return material; - } - this.createShaderMaterial = createShaderMaterial; - this.createRenderTarget = function(sizeXTexture, sizeYTexture, wrapS, wrapT, minFilter, magFilter) { - sizeXTexture = sizeXTexture || sizeX; - sizeYTexture = sizeYTexture || sizeY; - wrapS = wrapS || 1001; - wrapT = wrapT || 1001; - minFilter = minFilter || 1003; - magFilter = magFilter || 1003; - return new WebGLRenderTarget(sizeXTexture, sizeYTexture, { - wrapS, - wrapT, - minFilter, - magFilter, - format: RGBAFormat, - type: dataType, - depthBuffer: false - }); - }; - this.createTexture = function() { - const texture = new DataTexture(new Float32Array(sizeX * sizeY * 4), sizeX, sizeY, RGBAFormat, FloatType); - texture.needsUpdate = true; - return texture; - }; - this.renderTexture = function(input, output) { - passThruUniforms.passThruTexture.value = input; - this.doRenderTarget(passThruShader, output); - passThruUniforms.passThruTexture.value = null; - }; - this.doRenderTarget = function(material, output) { - const currentRenderTarget = renderer.getRenderTarget(); - const currentXrEnabled = renderer.xr.enabled; - const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate; - const currentOutputColorSpace = renderer.outputColorSpace; - const currentToneMapping = renderer.toneMapping; - renderer.xr.enabled = false; - renderer.shadowMap.autoUpdate = false; - if ("outputColorSpace" in renderer) renderer.outputColorSpace = "srgb-linear"; - else renderer.encoding = 3e3; - renderer.toneMapping = 0; - mesh.material = material; - renderer.setRenderTarget(output); - renderer.render(scene, camera); - mesh.material = passThruShader; - renderer.xr.enabled = currentXrEnabled; - renderer.shadowMap.autoUpdate = currentShadowAutoUpdate; - renderer.outputColorSpace = currentOutputColorSpace; - renderer.toneMapping = currentToneMapping; - renderer.setRenderTarget(currentRenderTarget); - }; - function getPassThroughVertexShader() { - return "void main() {\n\n gl_Position = vec4( position, 1.0 );\n\n}\n"; - } - function getPassThroughFragmentShader() { - return "uniform sampler2D passThruTexture;\n\nvoid main() {\n\n vec2 uv = gl_FragCoord.xy / resolution.xy;\n\n gl_FragColor = texture2D( passThruTexture, uv );\n\n}\n"; - } - } -}; -//#endregion -//#region node_modules/three-stdlib/misc/Gyroscope.js -var _translationObject = /* @__PURE__ */ new Vector3(); -var _quaternionObject = /* @__PURE__ */ new Quaternion(); -var _scaleObject = /* @__PURE__ */ new Vector3(); -var _translationWorld = /* @__PURE__ */ new Vector3(); -var _quaternionWorld = /* @__PURE__ */ new Quaternion(); -var _scaleWorld = /* @__PURE__ */ new Vector3(); -var Gyroscope = class extends Object3D { - constructor() { - super(); - } - updateMatrixWorld(force) { - this.matrixAutoUpdate && this.updateMatrix(); - if (this.matrixWorldNeedsUpdate || force) { - if (this.parent !== null) { - this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix); - this.matrixWorld.decompose(_translationWorld, _quaternionWorld, _scaleWorld); - this.matrix.decompose(_translationObject, _quaternionObject, _scaleObject); - this.matrixWorld.compose(_translationWorld, _quaternionObject, _scaleWorld); - } else this.matrixWorld.copy(this.matrix); - this.matrixWorldNeedsUpdate = false; - force = true; - } - for (let i = 0, l = this.children.length; i < l; i++) this.children[i].updateMatrixWorld(force); - } -}; -//#endregion -//#region node_modules/three-stdlib/misc/MorphAnimMesh.js -var MorphAnimMesh = class extends Mesh { - constructor(geometry, material) { - super(geometry, material); - this.type = "MorphAnimMesh"; - this.mixer = new AnimationMixer(this); - this.activeAction = null; - } - setDirectionForward() { - this.mixer.timeScale = 1; - } - setDirectionBackward() { - this.mixer.timeScale = -1; - } - playAnimation(label, fps) { - if (this.activeAction) { - this.activeAction.stop(); - this.activeAction = null; - } - const clip = AnimationClip.findByName(this, label); - if (clip) { - const action = this.mixer.clipAction(clip); - action.timeScale = clip.tracks.length * fps / clip.duration; - this.activeAction = action.play(); - } else throw new Error("THREE.MorphAnimMesh: animations[" + label + "] undefined in .playAnimation()"); - } - updateAnimation(delta) { - this.mixer.update(delta); - } - copy(source, recursive) { - super.copy(source, recursive); - this.mixer = new AnimationMixer(this); - return this; - } -}; -//#endregion -//#region node_modules/three-stdlib/misc/RollerCoaster.js -var RollerCoasterGeometry = class extends BufferGeometry { - constructor(curve, divisions) { - super(); - const vertices = []; - const normals = []; - const colors = []; - const color1 = [ - 1, - 1, - 1 - ]; - const color2 = [ - 1, - 1, - 0 - ]; - const up = new Vector3(0, 1, 0); - const forward = new Vector3(); - const right = new Vector3(); - const quaternion = new Quaternion(); - const prevQuaternion = new Quaternion(); - prevQuaternion.setFromAxisAngle(up, Math.PI / 2); - const point = new Vector3(); - const prevPoint = new Vector3(); - prevPoint.copy(curve.getPointAt(0)); - const step = [ - new Vector3(-.225, 0, 0), - new Vector3(0, -.05, 0), - new Vector3(0, -.175, 0), - new Vector3(0, -.05, 0), - new Vector3(.225, 0, 0), - new Vector3(0, -.175, 0) - ]; - const PI2 = Math.PI * 2; - let sides = 5; - const tube1 = []; - for (let i = 0; i < sides; i++) { - const angle = i / sides * PI2; - tube1.push(new Vector3(Math.sin(angle) * .06, Math.cos(angle) * .06, 0)); - } - sides = 6; - const tube2 = []; - for (let i = 0; i < sides; i++) { - const angle = i / sides * PI2; - tube2.push(new Vector3(Math.sin(angle) * .025, Math.cos(angle) * .025, 0)); - } - const vector = new Vector3(); - const normal = new Vector3(); - function drawShape(shape, color) { - normal.set(0, 0, -1).applyQuaternion(quaternion); - for (let j = 0; j < shape.length; j++) { - vector.copy(shape[j]); - vector.applyQuaternion(quaternion); - vector.add(point); - vertices.push(vector.x, vector.y, vector.z); - normals.push(normal.x, normal.y, normal.z); - colors.push(color[0], color[1], color[2]); - } - normal.set(0, 0, 1).applyQuaternion(quaternion); - for (let j = shape.length - 1; j >= 0; j--) { - vector.copy(shape[j]); - vector.applyQuaternion(quaternion); - vector.add(point); - vertices.push(vector.x, vector.y, vector.z); - normals.push(normal.x, normal.y, normal.z); - colors.push(color[0], color[1], color[2]); - } - } - const vector1 = new Vector3(); - const vector2 = new Vector3(); - const vector3 = new Vector3(); - const vector4 = new Vector3(); - const normal1 = new Vector3(); - const normal2 = new Vector3(); - const normal3 = new Vector3(); - const normal4 = new Vector3(); - function extrudeShape(shape, offset2, color) { - for (let j = 0, jl = shape.length; j < jl; j++) { - const point1 = shape[j]; - const point2 = shape[(j + 1) % jl]; - vector1.copy(point1).add(offset2); - vector1.applyQuaternion(quaternion); - vector1.add(point); - vector2.copy(point2).add(offset2); - vector2.applyQuaternion(quaternion); - vector2.add(point); - vector3.copy(point2).add(offset2); - vector3.applyQuaternion(prevQuaternion); - vector3.add(prevPoint); - vector4.copy(point1).add(offset2); - vector4.applyQuaternion(prevQuaternion); - vector4.add(prevPoint); - vertices.push(vector1.x, vector1.y, vector1.z); - vertices.push(vector2.x, vector2.y, vector2.z); - vertices.push(vector4.x, vector4.y, vector4.z); - vertices.push(vector2.x, vector2.y, vector2.z); - vertices.push(vector3.x, vector3.y, vector3.z); - vertices.push(vector4.x, vector4.y, vector4.z); - normal1.copy(point1); - normal1.applyQuaternion(quaternion); - normal1.normalize(); - normal2.copy(point2); - normal2.applyQuaternion(quaternion); - normal2.normalize(); - normal3.copy(point2); - normal3.applyQuaternion(prevQuaternion); - normal3.normalize(); - normal4.copy(point1); - normal4.applyQuaternion(prevQuaternion); - normal4.normalize(); - normals.push(normal1.x, normal1.y, normal1.z); - normals.push(normal2.x, normal2.y, normal2.z); - normals.push(normal4.x, normal4.y, normal4.z); - normals.push(normal2.x, normal2.y, normal2.z); - normals.push(normal3.x, normal3.y, normal3.z); - normals.push(normal4.x, normal4.y, normal4.z); - colors.push(color[0], color[1], color[2]); - colors.push(color[0], color[1], color[2]); - colors.push(color[0], color[1], color[2]); - colors.push(color[0], color[1], color[2]); - colors.push(color[0], color[1], color[2]); - colors.push(color[0], color[1], color[2]); - } - } - const offset = new Vector3(); - for (let i = 1; i <= divisions; i++) { - point.copy(curve.getPointAt(i / divisions)); - up.set(0, 1, 0); - forward.subVectors(point, prevPoint).normalize(); - right.crossVectors(up, forward).normalize(); - up.crossVectors(forward, right); - const angle = Math.atan2(forward.x, forward.z); - quaternion.setFromAxisAngle(up, angle); - if (i % 2 === 0) drawShape(step, color2); - extrudeShape(tube1, offset.set(0, -.125, 0), color2); - extrudeShape(tube2, offset.set(.2, 0, 0), color1); - extrudeShape(tube2, offset.set(-.2, 0, 0), color1); - prevPoint.copy(point); - prevQuaternion.copy(quaternion); - } - this.setAttribute("position", new BufferAttribute(new Float32Array(vertices), 3)); - this.setAttribute("normal", new BufferAttribute(new Float32Array(normals), 3)); - this.setAttribute("color", new BufferAttribute(new Float32Array(colors), 3)); - } -}; -var RollerCoasterLiftersGeometry = class extends BufferGeometry { - constructor(curve, divisions) { - super(); - const vertices = []; - const normals = []; - const quaternion = new Quaternion(); - const up = new Vector3(0, 1, 0); - const point = new Vector3(); - const tangent = new Vector3(); - const tube1 = [ - new Vector3(0, .05, -.05), - new Vector3(0, .05, .05), - new Vector3(0, -.05, 0) - ]; - const tube2 = [ - new Vector3(-.05, 0, .05), - new Vector3(-.05, 0, -.05), - new Vector3(.05, 0, 0) - ]; - const tube3 = [ - new Vector3(.05, 0, -.05), - new Vector3(.05, 0, .05), - new Vector3(-.05, 0, 0) - ]; - const vector1 = new Vector3(); - const vector2 = new Vector3(); - const vector3 = new Vector3(); - const vector4 = new Vector3(); - const normal1 = new Vector3(); - const normal2 = new Vector3(); - const normal3 = new Vector3(); - const normal4 = new Vector3(); - function extrudeShape(shape, fromPoint2, toPoint2) { - for (let j = 0, jl = shape.length; j < jl; j++) { - const point1 = shape[j]; - const point2 = shape[(j + 1) % jl]; - vector1.copy(point1); - vector1.applyQuaternion(quaternion); - vector1.add(fromPoint2); - vector2.copy(point2); - vector2.applyQuaternion(quaternion); - vector2.add(fromPoint2); - vector3.copy(point2); - vector3.applyQuaternion(quaternion); - vector3.add(toPoint2); - vector4.copy(point1); - vector4.applyQuaternion(quaternion); - vector4.add(toPoint2); - vertices.push(vector1.x, vector1.y, vector1.z); - vertices.push(vector2.x, vector2.y, vector2.z); - vertices.push(vector4.x, vector4.y, vector4.z); - vertices.push(vector2.x, vector2.y, vector2.z); - vertices.push(vector3.x, vector3.y, vector3.z); - vertices.push(vector4.x, vector4.y, vector4.z); - normal1.copy(point1); - normal1.applyQuaternion(quaternion); - normal1.normalize(); - normal2.copy(point2); - normal2.applyQuaternion(quaternion); - normal2.normalize(); - normal3.copy(point2); - normal3.applyQuaternion(quaternion); - normal3.normalize(); - normal4.copy(point1); - normal4.applyQuaternion(quaternion); - normal4.normalize(); - normals.push(normal1.x, normal1.y, normal1.z); - normals.push(normal2.x, normal2.y, normal2.z); - normals.push(normal4.x, normal4.y, normal4.z); - normals.push(normal2.x, normal2.y, normal2.z); - normals.push(normal3.x, normal3.y, normal3.z); - normals.push(normal4.x, normal4.y, normal4.z); - } - } - const fromPoint = new Vector3(); - const toPoint = new Vector3(); - for (let i = 1; i <= divisions; i++) { - point.copy(curve.getPointAt(i / divisions)); - tangent.copy(curve.getTangentAt(i / divisions)); - const angle = Math.atan2(tangent.x, tangent.z); - quaternion.setFromAxisAngle(up, angle); - if (point.y > 10) { - fromPoint.set(-.75, -.35, 0); - fromPoint.applyQuaternion(quaternion); - fromPoint.add(point); - toPoint.set(.75, -.35, 0); - toPoint.applyQuaternion(quaternion); - toPoint.add(point); - extrudeShape(tube1, fromPoint, toPoint); - fromPoint.set(-.7, -.3, 0); - fromPoint.applyQuaternion(quaternion); - fromPoint.add(point); - toPoint.set(-.7, -point.y, 0); - toPoint.applyQuaternion(quaternion); - toPoint.add(point); - extrudeShape(tube2, fromPoint, toPoint); - fromPoint.set(.7, -.3, 0); - fromPoint.applyQuaternion(quaternion); - fromPoint.add(point); - toPoint.set(.7, -point.y, 0); - toPoint.applyQuaternion(quaternion); - toPoint.add(point); - extrudeShape(tube3, fromPoint, toPoint); - } else { - fromPoint.set(0, -.2, 0); - fromPoint.applyQuaternion(quaternion); - fromPoint.add(point); - toPoint.set(0, -point.y, 0); - toPoint.applyQuaternion(quaternion); - toPoint.add(point); - extrudeShape(tube3, fromPoint, toPoint); - } - } - this.setAttribute("position", new BufferAttribute(new Float32Array(vertices), 3)); - this.setAttribute("normal", new BufferAttribute(new Float32Array(normals), 3)); - } -}; -var RollerCoasterShadowGeometry = class extends BufferGeometry { - constructor(curve, divisions) { - super(); - const vertices = []; - const up = new Vector3(0, 1, 0); - const forward = new Vector3(); - const quaternion = new Quaternion(); - const prevQuaternion = new Quaternion(); - prevQuaternion.setFromAxisAngle(up, Math.PI / 2); - const point = new Vector3(); - const prevPoint = new Vector3(); - prevPoint.copy(curve.getPointAt(0)); - prevPoint.y = 0; - const vector1 = new Vector3(); - const vector2 = new Vector3(); - const vector3 = new Vector3(); - const vector4 = new Vector3(); - for (let i = 1; i <= divisions; i++) { - point.copy(curve.getPointAt(i / divisions)); - point.y = 0; - forward.subVectors(point, prevPoint); - const angle = Math.atan2(forward.x, forward.z); - quaternion.setFromAxisAngle(up, angle); - vector1.set(-.3, 0, 0); - vector1.applyQuaternion(quaternion); - vector1.add(point); - vector2.set(.3, 0, 0); - vector2.applyQuaternion(quaternion); - vector2.add(point); - vector3.set(.3, 0, 0); - vector3.applyQuaternion(prevQuaternion); - vector3.add(prevPoint); - vector4.set(-.3, 0, 0); - vector4.applyQuaternion(prevQuaternion); - vector4.add(prevPoint); - vertices.push(vector1.x, vector1.y, vector1.z); - vertices.push(vector2.x, vector2.y, vector2.z); - vertices.push(vector4.x, vector4.y, vector4.z); - vertices.push(vector2.x, vector2.y, vector2.z); - vertices.push(vector3.x, vector3.y, vector3.z); - vertices.push(vector4.x, vector4.y, vector4.z); - prevPoint.copy(point); - prevQuaternion.copy(quaternion); - } - this.setAttribute("position", new BufferAttribute(new Float32Array(vertices), 3)); - } -}; -var SkyGeometry = class extends BufferGeometry { - constructor() { - super(); - const vertices = []; - for (let i = 0; i < 100; i++) { - const x = Math.random() * 800 - 400; - const y = Math.random() * 50 + 50; - const z = Math.random() * 800 - 400; - const size = Math.random() * 40 + 20; - vertices.push(x - size, y, z - size); - vertices.push(x + size, y, z - size); - vertices.push(x - size, y, z + size); - vertices.push(x + size, y, z - size); - vertices.push(x + size, y, z + size); - vertices.push(x - size, y, z + size); - } - this.setAttribute("position", new BufferAttribute(new Float32Array(vertices), 3)); - } -}; -var TreesGeometry = class extends BufferGeometry { - constructor(landscape) { - super(); - const vertices = []; - const colors = []; - const raycaster = new Raycaster(); - raycaster.ray.direction.set(0, -1, 0); - const _color = new Color(); - for (let i = 0; i < 2e3; i++) { - const x = Math.random() * 500 - 250; - const z = Math.random() * 500 - 250; - raycaster.ray.origin.set(x, 50, z); - const intersections = raycaster.intersectObject(landscape); - if (intersections.length === 0) continue; - const y = intersections[0].point.y; - const height = Math.random() * 5 + .5; - let angle = Math.random() * Math.PI * 2; - vertices.push(x + Math.sin(angle), y, z + Math.cos(angle)); - vertices.push(x, y + height, z); - vertices.push(x + Math.sin(angle + Math.PI), y, z + Math.cos(angle + Math.PI)); - angle += Math.PI / 2; - vertices.push(x + Math.sin(angle), y, z + Math.cos(angle)); - vertices.push(x, y + height, z); - vertices.push(x + Math.sin(angle + Math.PI), y, z + Math.cos(angle + Math.PI)); - const random = Math.random() * .1; - for (let j = 0; j < 6; j++) { - _color.setRGB(.2 + random, .4 + random, 0, "srgb"); - colors.push(_color.r, _color.g, _color.b); - } - } - this.setAttribute("position", new BufferAttribute(new Float32Array(vertices), 3)); - this.setAttribute("color", new BufferAttribute(new Float32Array(colors), 3)); - } -}; -//#endregion -//#region node_modules/three-stdlib/misc/Timer.js -var __defProp$59 = Object.defineProperty; -var __defNormalProp$59 = (obj, key, value) => key in obj ? __defProp$59(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$59 = (obj, key, value) => { - __defNormalProp$59(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var Timer = class { - constructor() { - __publicField$59(this, "_previousTime"); - __publicField$59(this, "_currentTime"); - __publicField$59(this, "_delta"); - __publicField$59(this, "_elapsed"); - __publicField$59(this, "_timescale"); - __publicField$59(this, "_useFixedDelta"); - __publicField$59(this, "_fixedDelta"); - __publicField$59(this, "_usePageVisibilityAPI"); - __publicField$59(this, "_pageVisibilityHandler"); - this._previousTime = 0; - this._currentTime = 0; - this._delta = 0; - this._elapsed = 0; - this._timescale = 1; - this._useFixedDelta = false; - this._fixedDelta = 16.67; - this._usePageVisibilityAPI = typeof document !== "undefined" && document.hidden !== void 0; - } - connect() { - if (this._usePageVisibilityAPI) { - this._pageVisibilityHandler = handleVisibilityChange.bind(this); - document.addEventListener("visibilitychange", this._pageVisibilityHandler, false); - } - return this; - } - dispose() { - if (this._usePageVisibilityAPI && this._pageVisibilityHandler) document.removeEventListener("visibilitychange", this._pageVisibilityHandler); - return this; - } - disableFixedDelta() { - this._useFixedDelta = false; - return this; - } - enableFixedDelta() { - this._useFixedDelta = true; - return this; - } - getDelta() { - return this._delta / 1e3; - } - getElapsedTime() { - return this._elapsed / 1e3; - } - getFixedDelta() { - return this._fixedDelta / 1e3; - } - getTimescale() { - return this._timescale; - } - reset() { - this._currentTime = this._now(); - return this; - } - setFixedDelta(fixedDelta) { - this._fixedDelta = fixedDelta * 1e3; - return this; - } - setTimescale(timescale) { - this._timescale = timescale; - return this; - } - update() { - if (this._useFixedDelta === true) this._delta = this._fixedDelta; - else { - this._previousTime = this._currentTime; - this._currentTime = this._now(); - this._delta = this._currentTime - this._previousTime; - } - this._delta *= this._timescale; - this._elapsed += this._delta; - return this; - } - get elapsedTime() { - return this.getElapsedTime(); - } - _now() { - return (typeof performance === "undefined" ? Date : performance).now(); - } -}; -function handleVisibilityChange() { - if (document.hidden === false) this.reset(); -} -//#endregion -//#region node_modules/three-stdlib/misc/WebGL.js -var webGLAvailable, webGL2Available; -function isWebGLAvailable() { - var _a; - if (webGLAvailable !== void 0) return webGLAvailable; - try { - let gl; - const canvas = document.createElement("canvas"); - webGLAvailable = !!(window.WebGLRenderingContext && (gl = canvas.getContext("webgl"))); - if (gl) (_a = gl.getExtension("WEBGL_lose_context")) == null || _a.loseContext(); - return webGLAvailable; - } catch (e) { - return webGLAvailable = false; - } -} -function isWebGL2Available() { - var _a; - if (webGL2Available !== void 0) return webGL2Available; - try { - let gl; - const canvas = document.createElement("canvas"); - webGL2Available = !!(window.WebGL2RenderingContext && (gl = canvas.getContext("webgl2"))); - if (gl) (_a = gl.getExtension("WEBGL_lose_context")) == null || _a.loseContext(); - return webGL2Available; - } catch (e) { - return webGL2Available = false; - } -} -function getWebGLErrorMessage() { - return getErrorMessage(1); -} -function getWebGL2ErrorMessage() { - return getErrorMessage(2); -} -function getErrorMessage(version) { - const names = { - 1: "WebGL", - 2: "WebGL 2" - }; - const contexts = { - 1: window.WebGLRenderingContext, - 2: window.WebGL2RenderingContext - }; - const element = document.createElement("div"); - element.id = "webglmessage"; - element.style.fontFamily = "monospace"; - element.style.fontSize = "13px"; - element.style.fontWeight = "normal"; - element.style.textAlign = "center"; - element.style.background = "#fff"; - element.style.color = "#000"; - element.style.padding = "1.5em"; - element.style.width = "400px"; - element.style.margin = "5em auto 0"; - let message = "Your $0 does not seem to support <a href=\"http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation\" style=\"color:#000\">$1</a>"; - if (contexts[version]) message = message.replace("$0", "graphics card"); - else message = message.replace("$0", "browser"); - message = message.replace("$1", names[version]); - element.innerHTML = message; - return element; -} -//#endregion -//#region node_modules/three-stdlib/misc/MD2Character.js -var MD2Character = class { - constructor() { - this.scale = 1; - this.animationFPS = 6; - this.root = new Object3D(); - this.meshBody = null; - this.meshWeapon = null; - this.skinsBody = []; - this.skinsWeapon = []; - this.weapons = []; - this.activeAnimation = null; - this.mixer = null; - this.onLoadComplete = function() {}; - this.loadCounter = 0; - } - loadParts(config) { - const scope = this; - function createPart(geometry, skinMap) { - const materialWireframe = new MeshLambertMaterial({ - color: 16755200, - wireframe: true, - morphTargets: true, - morphNormals: true - }); - const materialTexture = new MeshLambertMaterial({ - color: 16777215, - wireframe: false, - map: skinMap, - morphTargets: true, - morphNormals: true - }); - const mesh = new Mesh(geometry, materialTexture); - mesh.rotation.y = -Math.PI / 2; - mesh.castShadow = true; - mesh.receiveShadow = true; - mesh.materialTexture = materialTexture; - mesh.materialWireframe = materialWireframe; - return mesh; - } - function loadTextures(baseUrl, textureUrls) { - const textureLoader = new TextureLoader(); - const textures = []; - for (let i = 0; i < textureUrls.length; i++) { - textures[i] = textureLoader.load(baseUrl + textureUrls[i], checkLoadingComplete); - textures[i].mapping = 300; - textures[i].name = textureUrls[i]; - if ("colorSpace" in textures[i]) textures[i].colorSpace = "srgb"; - else textures[i].encoding = 3001; - } - return textures; - } - function checkLoadingComplete() { - scope.loadCounter -= 1; - if (scope.loadCounter === 0) scope.onLoadComplete(); - } - this.loadCounter = config.weapons.length * 2 + config.skins.length + 1; - const weaponsTextures = []; - for (let i = 0; i < config.weapons.length; i++) weaponsTextures[i] = config.weapons[i][1]; - this.skinsBody = loadTextures(config.baseUrl + "skins/", config.skins); - this.skinsWeapon = loadTextures(config.baseUrl + "skins/", weaponsTextures); - const loader = new MD2Loader(); - loader.load(config.baseUrl + config.body, function(geo) { - const boundingBox = new Box3(); - boundingBox.setFromBufferAttribute(geo.attributes.position); - scope.root.position.y = -scope.scale * boundingBox.min.y; - const mesh = createPart(geo, scope.skinsBody[0]); - mesh.scale.set(scope.scale, scope.scale, scope.scale); - scope.root.add(mesh); - scope.meshBody = mesh; - scope.meshBody.clipOffset = 0; - scope.activeAnimationClipName = mesh.geometry.animations[0].name; - scope.mixer = new AnimationMixer(mesh); - checkLoadingComplete(); - }); - const generateCallback = function(index, name) { - return function(geo) { - const mesh = createPart(geo, scope.skinsWeapon[index]); - mesh.scale.set(scope.scale, scope.scale, scope.scale); - mesh.visible = false; - mesh.name = name; - scope.root.add(mesh); - scope.weapons[index] = mesh; - scope.meshWeapon = mesh; - checkLoadingComplete(); - }; - }; - for (let i = 0; i < config.weapons.length; i++) loader.load(config.baseUrl + config.weapons[i][0], generateCallback(i, config.weapons[i][0])); - } - setPlaybackRate(rate) { - if (rate !== 0) this.mixer.timeScale = 1 / rate; - else this.mixer.timeScale = 0; - } - setWireframe(wireframeEnabled) { - if (wireframeEnabled) { - if (this.meshBody) this.meshBody.material = this.meshBody.materialWireframe; - if (this.meshWeapon) this.meshWeapon.material = this.meshWeapon.materialWireframe; - } else { - if (this.meshBody) this.meshBody.material = this.meshBody.materialTexture; - if (this.meshWeapon) this.meshWeapon.material = this.meshWeapon.materialTexture; - } - } - setSkin(index) { - if (this.meshBody && this.meshBody.material.wireframe === false) this.meshBody.material.map = this.skinsBody[index]; - } - setWeapon(index) { - for (let i = 0; i < this.weapons.length; i++) this.weapons[i].visible = false; - const activeWeapon = this.weapons[index]; - if (activeWeapon) { - activeWeapon.visible = true; - this.meshWeapon = activeWeapon; - this.syncWeaponAnimation(); - } - } - setAnimation(clipName) { - if (this.meshBody) { - if (this.meshBody.activeAction) { - this.meshBody.activeAction.stop(); - this.meshBody.activeAction = null; - } - const action = this.mixer.clipAction(clipName, this.meshBody); - if (action) this.meshBody.activeAction = action.play(); - } - this.activeClipName = clipName; - this.syncWeaponAnimation(); - } - syncWeaponAnimation() { - const clipName = this.activeClipName; - if (this.meshWeapon) { - if (this.meshWeapon.activeAction) { - this.meshWeapon.activeAction.stop(); - this.meshWeapon.activeAction = null; - } - const action = this.mixer.clipAction(clipName, this.meshWeapon); - if (action) this.meshWeapon.activeAction = action.syncWith(this.meshBody.activeAction).play(); - } - } - update(delta) { - if (this.mixer) this.mixer.update(delta); - } -}; -//#endregion -//#region node_modules/three-stdlib/misc/VolumeSlice.js -var VolumeSlice = class { - constructor(volume, index, axis) { - const slice = this; - this.volume = volume; - index = index || 0; - Object.defineProperty(this, "index", { - get: function() { - return index; - }, - set: function(value) { - index = value; - slice.geometryNeedsUpdate = true; - return index; - } - }); - this.axis = axis || "z"; - this.canvas = document.createElement("canvas"); - this.canvasBuffer = document.createElement("canvas"); - this.updateGeometry(); - const canvasMap = new Texture(this.canvas); - canvasMap.minFilter = LinearFilter; - canvasMap.wrapS = canvasMap.wrapT = ClampToEdgeWrapping; - if ("colorSpace" in canvasMap) canvasMap.colorSpace = "srgb"; - else canvasMap.encoding = 3001; - const material = new MeshBasicMaterial({ - map: canvasMap, - side: 2, - transparent: true - }); - this.mesh = new Mesh(this.geometry, material); - this.mesh.matrixAutoUpdate = false; - this.geometryNeedsUpdate = true; - this.repaint(); - } - /** - * @member {Function} repaint Refresh the texture and the geometry if geometryNeedsUpdate is set to true - * @memberof VolumeSlice - */ - repaint() { - if (this.geometryNeedsUpdate) this.updateGeometry(); - const iLength = this.iLength, jLength = this.jLength, sliceAccess = this.sliceAccess, volume = this.volume, canvas = this.canvasBuffer, ctx = this.ctxBuffer; - const imgData = ctx.getImageData(0, 0, iLength, jLength); - const data = imgData.data; - const volumeData = volume.data; - const upperThreshold = volume.upperThreshold; - const lowerThreshold = volume.lowerThreshold; - const windowLow = volume.windowLow; - const windowHigh = volume.windowHigh; - let pixelCount = 0; - if (volume.dataType === "label") for (let j = 0; j < jLength; j++) for (let i = 0; i < iLength; i++) { - let label = volumeData[sliceAccess(i, j)]; - label = label >= this.colorMap.length ? label % this.colorMap.length + 1 : label; - const color = this.colorMap[label]; - data[4 * pixelCount] = color >> 24 & 255; - data[4 * pixelCount + 1] = color >> 16 & 255; - data[4 * pixelCount + 2] = color >> 8 & 255; - data[4 * pixelCount + 3] = color & 255; - pixelCount++; - } - else for (let j = 0; j < jLength; j++) for (let i = 0; i < iLength; i++) { - let value = volumeData[sliceAccess(i, j)]; - let alpha = 255; - alpha = upperThreshold >= value ? lowerThreshold <= value ? alpha : 0 : 0; - value = Math.floor(255 * (value - windowLow) / (windowHigh - windowLow)); - value = value > 255 ? 255 : value < 0 ? 0 : value | 0; - data[4 * pixelCount] = value; - data[4 * pixelCount + 1] = value; - data[4 * pixelCount + 2] = value; - data[4 * pixelCount + 3] = alpha; - pixelCount++; - } - ctx.putImageData(imgData, 0, 0); - this.ctx.drawImage(canvas, 0, 0, iLength, jLength, 0, 0, this.canvas.width, this.canvas.height); - this.mesh.material.map.needsUpdate = true; - } - /** - * @member {Function} Refresh the geometry according to axis and index - * @see Volume.extractPerpendicularPlane - * @memberof VolumeSlice - */ - updateGeometry() { - const extracted = this.volume.extractPerpendicularPlane(this.axis, this.index); - this.sliceAccess = extracted.sliceAccess; - this.jLength = extracted.jLength; - this.iLength = extracted.iLength; - this.matrix = extracted.matrix; - this.canvas.width = extracted.planeWidth; - this.canvas.height = extracted.planeHeight; - this.canvasBuffer.width = this.iLength; - this.canvasBuffer.height = this.jLength; - this.ctx = this.canvas.getContext("2d"); - this.ctxBuffer = this.canvasBuffer.getContext("2d"); - if (this.geometry) this.geometry.dispose(); - this.geometry = new PlaneGeometry(extracted.planeWidth, extracted.planeHeight); - if (this.mesh) { - this.mesh.geometry = this.geometry; - this.mesh.matrix.identity(); - this.mesh.applyMatrix4(this.matrix); - } - this.geometryNeedsUpdate = false; - } -}; -//#endregion -//#region node_modules/three-stdlib/misc/TubePainter.js -function TubePainter() { - const BUFFER_SIZE = 1e6 * 3; - const positions = new BufferAttribute(new Float32Array(BUFFER_SIZE), 3); - positions.usage = DynamicDrawUsage; - const normals = new BufferAttribute(new Float32Array(BUFFER_SIZE), 3); - normals.usage = DynamicDrawUsage; - const colors = new BufferAttribute(new Float32Array(BUFFER_SIZE), 3); - colors.usage = DynamicDrawUsage; - const geometry = new BufferGeometry(); - geometry.setAttribute("position", positions); - geometry.setAttribute("normal", normals); - geometry.setAttribute("color", colors); - geometry.drawRange.count = 0; - const mesh = new Mesh(geometry, new MeshStandardMaterial({ vertexColors: true })); - mesh.frustumCulled = false; - function getPoints(size2) { - const PI2 = Math.PI * 2; - const sides = 10; - const array = []; - const radius = .01 * size2; - for (let i = 0; i < sides; i++) { - const angle = i / sides * PI2; - array.push(new Vector3(Math.sin(angle) * radius, Math.cos(angle) * radius, 0)); - } - return array; - } - const vector1 = new Vector3(); - const vector2 = new Vector3(); - const vector3 = new Vector3(); - const vector4 = new Vector3(); - const color = new Color(16777215); - let size = 1; - function stroke(position1, position2, matrix12, matrix22) { - if (position1.distanceToSquared(position2) === 0) return; - let count2 = geometry.drawRange.count; - const points = getPoints(size); - for (let i = 0, il = points.length; i < il; i++) { - const vertex1 = points[i]; - const vertex2 = points[(i + 1) % il]; - vector1.copy(vertex1).applyMatrix4(matrix22).add(position2); - vector2.copy(vertex2).applyMatrix4(matrix22).add(position2); - vector3.copy(vertex2).applyMatrix4(matrix12).add(position1); - vector4.copy(vertex1).applyMatrix4(matrix12).add(position1); - vector1.toArray(positions.array, (count2 + 0) * 3); - vector2.toArray(positions.array, (count2 + 1) * 3); - vector4.toArray(positions.array, (count2 + 2) * 3); - vector2.toArray(positions.array, (count2 + 3) * 3); - vector3.toArray(positions.array, (count2 + 4) * 3); - vector4.toArray(positions.array, (count2 + 5) * 3); - vector1.copy(vertex1).applyMatrix4(matrix22).normalize(); - vector2.copy(vertex2).applyMatrix4(matrix22).normalize(); - vector3.copy(vertex2).applyMatrix4(matrix12).normalize(); - vector4.copy(vertex1).applyMatrix4(matrix12).normalize(); - vector1.toArray(normals.array, (count2 + 0) * 3); - vector2.toArray(normals.array, (count2 + 1) * 3); - vector4.toArray(normals.array, (count2 + 2) * 3); - vector2.toArray(normals.array, (count2 + 3) * 3); - vector3.toArray(normals.array, (count2 + 4) * 3); - vector4.toArray(normals.array, (count2 + 5) * 3); - color.toArray(colors.array, (count2 + 0) * 3); - color.toArray(colors.array, (count2 + 1) * 3); - color.toArray(colors.array, (count2 + 2) * 3); - color.toArray(colors.array, (count2 + 3) * 3); - color.toArray(colors.array, (count2 + 4) * 3); - color.toArray(colors.array, (count2 + 5) * 3); - count2 += 6; - } - geometry.drawRange.count = count2; - } - const up = new Vector3(0, 1, 0); - const point1 = new Vector3(); - const point2 = new Vector3(); - const matrix1 = new Matrix4(); - const matrix2 = new Matrix4(); - function moveTo(position) { - point1.copy(position); - matrix1.lookAt(point2, point1, up); - point2.copy(position); - matrix2.copy(matrix1); - } - function lineTo(position) { - point1.copy(position); - matrix1.lookAt(point2, point1, up); - stroke(point1, point2, matrix1, matrix2); - point2.copy(point1); - matrix2.copy(matrix1); - } - function setSize(value) { - size = value; - } - let count = 0; - function update() { - const start = count; - const end = geometry.drawRange.count; - if (start === end) return; - positions.updateRange.offset = start * 3; - positions.updateRange.count = (end - start) * 3; - positions.needsUpdate = true; - normals.updateRange.offset = start * 3; - normals.updateRange.count = (end - start) * 3; - normals.needsUpdate = true; - colors.updateRange.offset = start * 3; - colors.updateRange.count = (end - start) * 3; - colors.needsUpdate = true; - count = geometry.drawRange.count; - } - return { - mesh, - moveTo, - lineTo, - setSize, - update - }; -} -//#endregion -//#region node_modules/three-stdlib/misc/Volume.js -var Volume = class { - constructor(xLength, yLength, zLength, type, arrayBuffer) { - if (xLength !== void 0) { - this.xLength = Number(xLength) || 1; - this.yLength = Number(yLength) || 1; - this.zLength = Number(zLength) || 1; - this.axisOrder = [ - "x", - "y", - "z" - ]; - switch (type) { - case "Uint8": - case "uint8": - case "uchar": - case "unsigned char": - case "uint8_t": - this.data = new Uint8Array(arrayBuffer); - break; - case "Int8": - case "int8": - case "signed char": - case "int8_t": - this.data = new Int8Array(arrayBuffer); - break; - case "Int16": - case "int16": - case "short": - case "short int": - case "signed short": - case "signed short int": - case "int16_t": - this.data = new Int16Array(arrayBuffer); - break; - case "Uint16": - case "uint16": - case "ushort": - case "unsigned short": - case "unsigned short int": - case "uint16_t": - this.data = new Uint16Array(arrayBuffer); - break; - case "Int32": - case "int32": - case "int": - case "signed int": - case "int32_t": - this.data = new Int32Array(arrayBuffer); - break; - case "Uint32": - case "uint32": - case "uint": - case "unsigned int": - case "uint32_t": - this.data = new Uint32Array(arrayBuffer); - break; - case "longlong": - case "long long": - case "long long int": - case "signed long long": - case "signed long long int": - case "int64": - case "int64_t": - case "ulonglong": - case "unsigned long long": - case "unsigned long long int": - case "uint64": - case "uint64_t": throw new Error("Error in Volume constructor : this type is not supported in JavaScript"); - case "Float32": - case "float32": - case "float": - this.data = new Float32Array(arrayBuffer); - break; - case "Float64": - case "float64": - case "double": - this.data = new Float64Array(arrayBuffer); - break; - default: this.data = new Uint8Array(arrayBuffer); - } - if (this.data.length !== this.xLength * this.yLength * this.zLength) throw new Error("Error in Volume constructor, lengths are not matching arrayBuffer size"); - } - this.spacing = [ - 1, - 1, - 1 - ]; - this.offset = [ - 0, - 0, - 0 - ]; - this.matrix = new Matrix3(); - this.matrix.identity(); - let lowerThreshold = -Infinity; - Object.defineProperty(this, "lowerThreshold", { - get: function() { - return lowerThreshold; - }, - set: function(value) { - lowerThreshold = value; - this.sliceList.forEach(function(slice) { - slice.geometryNeedsUpdate = true; - }); - } - }); - let upperThreshold = Infinity; - Object.defineProperty(this, "upperThreshold", { - get: function() { - return upperThreshold; - }, - set: function(value) { - upperThreshold = value; - this.sliceList.forEach(function(slice) { - slice.geometryNeedsUpdate = true; - }); - } - }); - this.sliceList = []; - this.segmentation = false; - } - /** - * @member {Function} getData Shortcut for data[access(i,j,k)] - * @memberof Volume - * @param {number} i First coordinate - * @param {number} j Second coordinate - * @param {number} k Third coordinate - * @returns {number} value in the data array - */ - getData(i, j, k) { - return this.data[k * this.xLength * this.yLength + j * this.xLength + i]; - } - /** - * @member {Function} access compute the index in the data array corresponding to the given coordinates in IJK system - * @memberof Volume - * @param {number} i First coordinate - * @param {number} j Second coordinate - * @param {number} k Third coordinate - * @returns {number} index - */ - access(i, j, k) { - return k * this.xLength * this.yLength + j * this.xLength + i; - } - /** - * @member {Function} reverseAccess Retrieve the IJK coordinates of the voxel corresponding of the given index in the data - * @memberof Volume - * @param {number} index index of the voxel - * @returns {Array} [x,y,z] - */ - reverseAccess(index) { - const z = Math.floor(index / (this.yLength * this.xLength)); - const y = Math.floor((index - z * this.yLength * this.xLength) / this.xLength); - return [ - index - z * this.yLength * this.xLength - y * this.xLength, - y, - z - ]; - } - /** - * @member {Function} map Apply a function to all the voxels, be careful, the value will be replaced - * @memberof Volume - * @param {Function} functionToMap A function to apply to every voxel, will be called with the following parameters : - * value of the voxel - * index of the voxel - * the data (TypedArray) - * @param {Object} context You can specify a context in which call the function, default if this Volume - * @returns {Volume} this - */ - map(functionToMap, context) { - const length = this.data.length; - context = context || this; - for (let i = 0; i < length; i++) this.data[i] = functionToMap.call(context, this.data[i], i, this.data); - return this; - } - /** - * @member {Function} extractPerpendicularPlane Compute the orientation of the slice and returns all the information relative to the geometry such as sliceAccess, the plane matrix (orientation and position in RAS coordinate) and the dimensions of the plane in both coordinate system. - * @memberof Volume - * @param {string} axis the normal axis to the slice 'x' 'y' or 'z' - * @param {number} index the index of the slice - * @returns {Object} an object containing all the usefull information on the geometry of the slice - */ - extractPerpendicularPlane(axis, RASIndex) { - let firstSpacing, secondSpacing, positionOffset, IJKIndex; - const axisInIJK = new Vector3(), firstDirection = new Vector3(), secondDirection = new Vector3(), planeMatrix = new Matrix4().identity(), volume = this; - const dimensions = new Vector3(this.xLength, this.yLength, this.zLength); - switch (axis) { - case "x": - axisInIJK.set(1, 0, 0); - firstDirection.set(0, 0, -1); - secondDirection.set(0, -1, 0); - firstSpacing = this.spacing[this.axisOrder.indexOf("z")]; - secondSpacing = this.spacing[this.axisOrder.indexOf("y")]; - IJKIndex = new Vector3(RASIndex, 0, 0); - planeMatrix.multiply(new Matrix4().makeRotationY(Math.PI / 2)); - positionOffset = (volume.RASDimensions[0] - 1) / 2; - planeMatrix.setPosition(new Vector3(RASIndex - positionOffset, 0, 0)); - break; - case "y": - axisInIJK.set(0, 1, 0); - firstDirection.set(1, 0, 0); - secondDirection.set(0, 0, 1); - firstSpacing = this.spacing[this.axisOrder.indexOf("x")]; - secondSpacing = this.spacing[this.axisOrder.indexOf("z")]; - IJKIndex = new Vector3(0, RASIndex, 0); - planeMatrix.multiply(new Matrix4().makeRotationX(-Math.PI / 2)); - positionOffset = (volume.RASDimensions[1] - 1) / 2; - planeMatrix.setPosition(new Vector3(0, RASIndex - positionOffset, 0)); - break; - default: - axisInIJK.set(0, 0, 1); - firstDirection.set(1, 0, 0); - secondDirection.set(0, -1, 0); - firstSpacing = this.spacing[this.axisOrder.indexOf("x")]; - secondSpacing = this.spacing[this.axisOrder.indexOf("y")]; - IJKIndex = new Vector3(0, 0, RASIndex); - positionOffset = (volume.RASDimensions[2] - 1) / 2; - planeMatrix.setPosition(new Vector3(0, 0, RASIndex - positionOffset)); - break; - } - let iLength, jLength; - if (!this.segmentation) { - firstDirection.applyMatrix4(volume.inverseMatrix).normalize(); - secondDirection.applyMatrix4(volume.inverseMatrix).normalize(); - axisInIJK.applyMatrix4(volume.inverseMatrix).normalize(); - } - firstDirection.arglet = "i"; - secondDirection.arglet = "j"; - iLength = Math.floor(Math.abs(firstDirection.dot(dimensions))); - jLength = Math.floor(Math.abs(secondDirection.dot(dimensions))); - const planeWidth = Math.abs(iLength * firstSpacing); - const planeHeight = Math.abs(jLength * secondSpacing); - IJKIndex = Math.abs(Math.round(IJKIndex.applyMatrix4(volume.inverseMatrix).dot(axisInIJK))); - const base = [ - new Vector3(1, 0, 0), - new Vector3(0, 1, 0), - new Vector3(0, 0, 1) - ]; - const iDirection = [ - firstDirection, - secondDirection, - axisInIJK - ].find(function(x) { - return Math.abs(x.dot(base[0])) > .9; - }); - const jDirection = [ - firstDirection, - secondDirection, - axisInIJK - ].find(function(x) { - return Math.abs(x.dot(base[1])) > .9; - }); - const kDirection = [ - firstDirection, - secondDirection, - axisInIJK - ].find(function(x) { - return Math.abs(x.dot(base[2])) > .9; - }); - function sliceAccess(i, j) { - const si = iDirection === axisInIJK ? IJKIndex : iDirection.arglet === "i" ? i : j; - const sj = jDirection === axisInIJK ? IJKIndex : jDirection.arglet === "i" ? i : j; - const sk = kDirection === axisInIJK ? IJKIndex : kDirection.arglet === "i" ? i : j; - const accessI = iDirection.dot(base[0]) > 0 ? si : volume.xLength - 1 - si; - const accessJ = jDirection.dot(base[1]) > 0 ? sj : volume.yLength - 1 - sj; - const accessK = kDirection.dot(base[2]) > 0 ? sk : volume.zLength - 1 - sk; - return volume.access(accessI, accessJ, accessK); - } - return { - iLength, - jLength, - sliceAccess, - matrix: planeMatrix, - planeWidth, - planeHeight - }; - } - /** - * @member {Function} extractSlice Returns a slice corresponding to the given axis and index - * The coordinate are given in the Right Anterior Superior coordinate format - * @memberof Volume - * @param {string} axis the normal axis to the slice 'x' 'y' or 'z' - * @param {number} index the index of the slice - * @returns {VolumeSlice} the extracted slice - */ - extractSlice(axis, index) { - const slice = new VolumeSlice(this, index, axis); - this.sliceList.push(slice); - return slice; - } - /** - * @member {Function} repaintAllSlices Call repaint on all the slices extracted from this volume - * @see VolumeSlice.repaint - * @memberof Volume - * @returns {Volume} this - */ - repaintAllSlices() { - this.sliceList.forEach(function(slice) { - slice.repaint(); - }); - return this; - } - /** - * @member {Function} computeMinMax Compute the minimum and the maximum of the data in the volume - * @memberof Volume - * @returns {Array} [min,max] - */ - computeMinMax() { - let min = Infinity; - let max = -Infinity; - const datasize = this.data.length; - let i = 0; - for (i = 0; i < datasize; i++) if (!isNaN(this.data[i])) { - const value = this.data[i]; - min = Math.min(min, value); - max = Math.max(max, value); - } - this.min = min; - this.max = max; - return [min, max]; - } -}; -//#endregion -//#region node_modules/potpack/index.mjs -function potpack(boxes) { - let area = 0; - let maxWidth = 0; - for (const box of boxes) { - area += box.w * box.h; - maxWidth = Math.max(maxWidth, box.w); - } - boxes.sort((a, b) => b.h - a.h); - const spaces = [{ - x: 0, - y: 0, - w: Math.max(Math.ceil(Math.sqrt(area / .95)), maxWidth), - h: Infinity - }]; - let width = 0; - let height = 0; - for (const box of boxes) for (let i = spaces.length - 1; i >= 0; i--) { - const space = spaces[i]; - if (box.w > space.w || box.h > space.h) continue; - box.x = space.x; - box.y = space.y; - height = Math.max(height, box.y + box.h); - width = Math.max(width, box.x + box.w); - if (box.w === space.w && box.h === space.h) { - const last = spaces.pop(); - if (i < spaces.length) spaces[i] = last; - } else if (box.h === space.h) { - space.x += box.w; - space.w -= box.w; - } else if (box.w === space.w) { - space.y += box.h; - space.h -= box.h; - } else { - spaces.push({ - x: space.x + box.w, - y: space.y, - w: space.w - box.w, - h: box.h - }); - space.y += box.h; - space.h -= box.h; - } - break; - } - return { - w: width, - h: height, - fill: area / (width * height) || 0 - }; -} -//#endregion -//#region node_modules/three-stdlib/_polyfill/constants.js -var version = /* @__PURE__ */ (() => parseInt("184".replace(/\D+/g, "")))(); -//#endregion -//#region node_modules/three-stdlib/_polyfill/uv1.js -var UV1 = version >= 125 ? "uv1" : "uv2"; -//#endregion -//#region node_modules/three-stdlib/misc/ProgressiveLightmap.js -var ProgressiveLightMap = class { - constructor(renderer, res = 1024) { - this.renderer = renderer; - this.res = res; - this.lightMapContainers = []; - this.compiled = false; - this.scene = new Scene(); - this.scene.background = null; - this.tinyTarget = new WebGLRenderTarget(1, 1); - this.buffer1Active = false; - this.firstUpdate = true; - this.warned = false; - const format = /(Android|iPad|iPhone|iPod)/g.test(navigator.userAgent) ? alfFloatType : FloatType; - this.progressiveLightMap1 = new WebGLRenderTarget(this.res, this.res, { type: format }); - this.progressiveLightMap2 = new WebGLRenderTarget(this.res, this.res, { type: format }); - this.uvMat = new MeshPhongMaterial(); - this.uvMat.uniforms = {}; - this.uvMat.onBeforeCompile = (shader) => { - shader.vertexShader = "#define USE_LIGHTMAP\n" + shader.vertexShader.slice(0, -1) + ` gl_Position = vec4((${UV1} - 0.5) * 2.0, 1.0, 1.0); }`; - const bodyStart = shader.fragmentShader.indexOf("void main() {"); - shader.fragmentShader = `varying vec2 v${UV1 === "uv1" ? UV1 : "Uv2"}; -` + shader.fragmentShader.slice(0, bodyStart) + " uniform sampler2D previousShadowMap;\n uniform float averagingWindow;\n" + shader.fragmentShader.slice(bodyStart - 1, -1) + ` -vec3 texelOld = texture2D(previousShadowMap, v${UV1 === "uv1" ? UV1 : "Uv2"}).rgb; - gl_FragColor.rgb = mix(texelOld, gl_FragColor.rgb, 1.0/averagingWindow); - }`; - shader.uniforms.previousShadowMap = { value: this.progressiveLightMap1.texture }; - shader.uniforms.averagingWindow = { value: 100 }; - this.uvMat.uniforms = shader.uniforms; - this.uvMat.userData.shader = shader; - this.compiled = true; - }; - } - /** - * Sets these objects' materials' lightmaps and modifies their uv1's. - * @param {Object3D} objects An array of objects and lights to set up your lightmap. - */ - addObjectsToLightMap(objects) { - this.uv_boxes = []; - const padding = 3 / this.res; - for (let ob = 0; ob < objects.length; ob++) { - const object = objects[ob]; - if (object.isLight) { - this.scene.attach(object); - continue; - } - if (!object.geometry.hasAttribute("uv")) { - console.warn("All lightmap objects need UVs!"); - continue; - } - if (this.blurringPlane == null) this._initializeBlurPlane(this.res, this.progressiveLightMap1); - object.material.lightMap = this.progressiveLightMap2.texture; - object.material.dithering = true; - object.castShadow = true; - object.receiveShadow = true; - object.renderOrder = 1e3 + ob; - this.uv_boxes.push({ - w: 1 + padding * 2, - h: 1 + padding * 2, - index: ob - }); - this.lightMapContainers.push({ - basicMat: object.material, - object - }); - this.compiled = false; - } - const dimensions = potpack(this.uv_boxes); - this.uv_boxes.forEach((box) => { - const uv1 = objects[box.index].geometry.getAttribute("uv").clone(); - for (let i = 0; i < uv1.array.length; i += uv1.itemSize) { - uv1.array[i] = (uv1.array[i] + box.x + padding) / dimensions.w; - uv1.array[i + 1] = (uv1.array[i + 1] + box.y + padding) / dimensions.h; - } - objects[box.index].geometry.setAttribute(UV1, uv1); - objects[box.index].geometry.getAttribute(UV1).needsUpdate = true; - }); - } - /** - * This function renders each mesh one at a time into their respective surface maps - * @param {Camera} camera Standard Rendering Camera - * @param {number} blendWindow When >1, samples will accumulate over time. - * @param {boolean} blurEdges Whether to fix UV Edges via blurring - */ - update(camera, blendWindow = 100, blurEdges = true) { - if (this.blurringPlane == null) return; - const oldTarget = this.renderer.getRenderTarget(); - this.blurringPlane.visible = blurEdges; - for (let l = 0; l < this.lightMapContainers.length; l++) { - this.lightMapContainers[l].object.oldScene = this.lightMapContainers[l].object.parent; - this.scene.attach(this.lightMapContainers[l].object); - } - if (this.firstUpdate) { - this.renderer.setRenderTarget(this.tinyTarget); - this.renderer.render(this.scene, camera); - this.firstUpdate = false; - } - for (let l = 0; l < this.lightMapContainers.length; l++) { - this.uvMat.uniforms.averagingWindow = { value: blendWindow }; - this.lightMapContainers[l].object.material = this.uvMat; - this.lightMapContainers[l].object.oldFrustumCulled = this.lightMapContainers[l].object.frustumCulled; - this.lightMapContainers[l].object.frustumCulled = false; - } - const activeMap = this.buffer1Active ? this.progressiveLightMap1 : this.progressiveLightMap2; - const inactiveMap = this.buffer1Active ? this.progressiveLightMap2 : this.progressiveLightMap1; - this.renderer.setRenderTarget(activeMap); - this.uvMat.uniforms.previousShadowMap = { value: inactiveMap.texture }; - this.blurringPlane.material.uniforms.previousShadowMap = { value: inactiveMap.texture }; - this.buffer1Active = !this.buffer1Active; - this.renderer.render(this.scene, camera); - for (let l = 0; l < this.lightMapContainers.length; l++) { - this.lightMapContainers[l].object.frustumCulled = this.lightMapContainers[l].object.oldFrustumCulled; - this.lightMapContainers[l].object.material = this.lightMapContainers[l].basicMat; - this.lightMapContainers[l].object.oldScene.attach(this.lightMapContainers[l].object); - } - this.renderer.setRenderTarget(oldTarget); - } - /** DEBUG - * Draw the lightmap in the main scene. Call this after adding the objects to it. - * @param {boolean} visible Whether the debug plane should be visible - * @param {Vector3} position Where the debug plane should be drawn - */ - showDebugLightmap(visible, position = void 0) { - if (this.lightMapContainers.length == 0) { - if (!this.warned) { - console.warn("Call this after adding the objects!"); - this.warned = true; - } - return; - } - if (this.labelMesh == null) { - this.labelMaterial = new MeshBasicMaterial({ - map: this.progressiveLightMap1.texture, - side: 2 - }); - this.labelPlane = new PlaneGeometry(100, 100); - this.labelMesh = new Mesh(this.labelPlane, this.labelMaterial); - this.labelMesh.position.y = 250; - this.lightMapContainers[0].object.parent.add(this.labelMesh); - } - if (position != void 0) this.labelMesh.position.copy(position); - this.labelMesh.visible = visible; - } - /** - * INTERNAL Creates the Blurring Plane - * @param {number} res The square resolution of this object's lightMap. - * @param {WebGLRenderTexture} lightMap The lightmap to initialize the plane with. - */ - _initializeBlurPlane(res, lightMap = null) { - const blurMaterial = new MeshBasicMaterial(); - blurMaterial.uniforms = { - previousShadowMap: { value: null }, - pixelOffset: { value: 1 / res }, - polygonOffset: true, - polygonOffsetFactor: -1, - polygonOffsetUnits: 3 - }; - blurMaterial.onBeforeCompile = (shader) => { - shader.vertexShader = "#define USE_UV\n" + shader.vertexShader.slice(0, -1) + " gl_Position = vec4((uv - 0.5) * 2.0, 1.0, 1.0); }"; - const bodyStart = shader.fragmentShader.indexOf("void main() {"); - shader.fragmentShader = "#define USE_UV\n" + shader.fragmentShader.slice(0, bodyStart) + " uniform sampler2D previousShadowMap;\n uniform float pixelOffset;\n" + shader.fragmentShader.slice(bodyStart - 1, -1) + ` gl_FragColor.rgb = ( - texture2D(previousShadowMap, vUv + vec2( pixelOffset, 0.0 )).rgb + - texture2D(previousShadowMap, vUv + vec2( 0.0 , pixelOffset)).rgb + - texture2D(previousShadowMap, vUv + vec2( 0.0 , -pixelOffset)).rgb + - texture2D(previousShadowMap, vUv + vec2(-pixelOffset, 0.0 )).rgb + - texture2D(previousShadowMap, vUv + vec2( pixelOffset, pixelOffset)).rgb + - texture2D(previousShadowMap, vUv + vec2(-pixelOffset, pixelOffset)).rgb + - texture2D(previousShadowMap, vUv + vec2( pixelOffset, -pixelOffset)).rgb + - texture2D(previousShadowMap, vUv + vec2(-pixelOffset, -pixelOffset)).rgb)/8.0; - }`; - shader.uniforms.previousShadowMap = { value: lightMap.texture }; - shader.uniforms.pixelOffset = { value: .5 / res }; - blurMaterial.uniforms = shader.uniforms; - blurMaterial.userData.shader = shader; - this.compiled = true; - }; - this.blurringPlane = new Mesh(new PlaneGeometry(1, 1), blurMaterial); - this.blurringPlane.name = "Blurring Plane"; - this.blurringPlane.frustumCulled = false; - this.blurringPlane.renderOrder = 0; - this.blurringPlane.material.depthWrite = false; - this.scene.add(this.blurringPlane); - } -}; -//#endregion -//#region node_modules/three-stdlib/renderers/CSS2DRenderer.js -var CSS2DObject = class extends Object3D { - constructor(element = document.createElement("div")) { - super(); - this.isCSS2DObject = true; - this.element = element; - this.element.style.position = "absolute"; - this.element.style.userSelect = "none"; - this.element.setAttribute("draggable", false); - this.center = new Vector2(.5, .5); - this.addEventListener("removed", function() { - this.traverse(function(object) { - if (object.element instanceof Element && object.element.parentNode !== null) object.element.parentNode.removeChild(object.element); - }); - }); - } - copy(source, recursive) { - super.copy(source, recursive); - this.element = source.element.cloneNode(true); - this.center = source.center; - return this; - } -}; -var _vector$4 = /* @__PURE__ */ new Vector3(); -var _viewMatrix = /* @__PURE__ */ new Matrix4(); -var _viewProjectionMatrix = /* @__PURE__ */ new Matrix4(); -var _a$1 = /* @__PURE__ */ new Vector3(); -var _b$1 = /* @__PURE__ */ new Vector3(); -var CSS2DRenderer = class { - constructor(parameters = {}) { - const _this = this; - let _width, _height; - let _widthHalf, _heightHalf; - const cache = { objects: /* @__PURE__ */ new WeakMap() }; - const domElement = parameters.element !== void 0 ? parameters.element : document.createElement("div"); - domElement.style.overflow = "hidden"; - this.domElement = domElement; - this.getSize = function() { - return { - width: _width, - height: _height - }; - }; - this.render = function(scene, camera) { - if (scene.matrixWorldAutoUpdate === true) scene.updateMatrixWorld(); - if (camera.parent === null && camera.matrixWorldAutoUpdate === true) camera.updateMatrixWorld(); - _viewMatrix.copy(camera.matrixWorldInverse); - _viewProjectionMatrix.multiplyMatrices(camera.projectionMatrix, _viewMatrix); - renderObject(scene, scene, camera); - zOrder(scene); - }; - this.setSize = function(width, height) { - _width = width; - _height = height; - _widthHalf = _width / 2; - _heightHalf = _height / 2; - domElement.style.width = width + "px"; - domElement.style.height = height + "px"; - }; - function renderObject(object, scene, camera) { - if (object.isCSS2DObject) { - _vector$4.setFromMatrixPosition(object.matrixWorld); - _vector$4.applyMatrix4(_viewProjectionMatrix); - const visible = object.visible === true && _vector$4.z >= -1 && _vector$4.z <= 1 && object.layers.test(camera.layers) === true; - object.element.style.display = visible === true ? "" : "none"; - if (visible === true) { - object.onBeforeRender(_this, scene, camera); - const element = object.element; - element.style.transform = "translate(" + -100 * object.center.x + "%," + -100 * object.center.y + "%)translate(" + (_vector$4.x * _widthHalf + _widthHalf) + "px," + (-_vector$4.y * _heightHalf + _heightHalf) + "px)"; - if (element.parentNode !== domElement) domElement.appendChild(element); - object.onAfterRender(_this, scene, camera); - } - const objectData = { distanceToCameraSquared: getDistanceToSquared(camera, object) }; - cache.objects.set(object, objectData); - } - for (let i = 0, l = object.children.length; i < l; i++) renderObject(object.children[i], scene, camera); - } - function getDistanceToSquared(object1, object2) { - _a$1.setFromMatrixPosition(object1.matrixWorld); - _b$1.setFromMatrixPosition(object2.matrixWorld); - return _a$1.distanceToSquared(_b$1); - } - function filterAndFlatten(scene) { - const result = []; - scene.traverse(function(object) { - if (object.isCSS2DObject) result.push(object); - }); - return result; - } - function zOrder(scene) { - const sorted = filterAndFlatten(scene).sort(function(a, b) { - if (a.renderOrder !== b.renderOrder) return b.renderOrder - a.renderOrder; - return cache.objects.get(a).distanceToCameraSquared - cache.objects.get(b).distanceToCameraSquared; - }); - const zMax = sorted.length; - for (let i = 0, l = sorted.length; i < l; i++) sorted[i].element.style.zIndex = zMax - i; - } - } -}; -//#endregion -//#region node_modules/three-stdlib/renderers/CSS3DRenderer.js -var _position$1 = /* @__PURE__ */ new Vector3(); -var _quaternion$1 = /* @__PURE__ */ new Quaternion(); -var _scale$1 = /* @__PURE__ */ new Vector3(); -var CSS3DObject = class extends Object3D { - constructor(element = document.createElement("div")) { - super(); - this.isCSS3DObject = true; - this.element = element; - this.element.style.position = "absolute"; - this.element.style.pointerEvents = "auto"; - this.element.style.userSelect = "none"; - this.element.setAttribute("draggable", false); - this.addEventListener("removed", function() { - this.traverse(function(object) { - if (object.element instanceof Element && object.element.parentNode !== null) object.element.parentNode.removeChild(object.element); - }); - }); - } - copy(source, recursive) { - super.copy(source, recursive); - this.element = source.element.cloneNode(true); - return this; - } -}; -var CSS3DSprite = class extends CSS3DObject { - constructor(element) { - super(element); - this.isCSS3DSprite = true; - this.rotation2D = 0; - } - copy(source, recursive) { - super.copy(source, recursive); - this.rotation2D = source.rotation2D; - return this; - } -}; -var _matrix$2 = /* @__PURE__ */ new Matrix4(); -var _matrix2 = /* @__PURE__ */ new Matrix4(); -var CSS3DRenderer = class { - constructor(parameters = {}) { - const _this = this; - let _width, _height; - let _widthHalf, _heightHalf; - const cache = { - camera: { style: "" }, - objects: /* @__PURE__ */ new WeakMap() - }; - const domElement = parameters.element !== void 0 ? parameters.element : document.createElement("div"); - domElement.style.overflow = "hidden"; - this.domElement = domElement; - const viewElement = document.createElement("div"); - viewElement.style.transformOrigin = "0 0"; - viewElement.style.pointerEvents = "none"; - domElement.appendChild(viewElement); - const cameraElement = document.createElement("div"); - cameraElement.style.transformStyle = "preserve-3d"; - viewElement.appendChild(cameraElement); - this.getSize = function() { - return { - width: _width, - height: _height - }; - }; - this.render = function(scene, camera) { - const fov = camera.projectionMatrix.elements[5] * _heightHalf; - if (camera.view && camera.view.enabled) { - viewElement.style.transform = `translate( ${-camera.view.offsetX * (_width / camera.view.width)}px, ${-camera.view.offsetY * (_height / camera.view.height)}px )`; - viewElement.style.transform += `scale( ${camera.view.fullWidth / camera.view.width}, ${camera.view.fullHeight / camera.view.height} )`; - } else viewElement.style.transform = ""; - if (scene.matrixWorldAutoUpdate === true) scene.updateMatrixWorld(); - if (camera.parent === null && camera.matrixWorldAutoUpdate === true) camera.updateMatrixWorld(); - let tx, ty; - if (camera.isOrthographicCamera) { - tx = -(camera.right + camera.left) / 2; - ty = (camera.top + camera.bottom) / 2; - } - const scaleByViewOffset = camera.view && camera.view.enabled ? camera.view.height / camera.view.fullHeight : 1; - const cameraCSSMatrix = camera.isOrthographicCamera ? `scale( ${scaleByViewOffset} )scale(` + fov + ")translate(" + epsilon(tx) + "px," + epsilon(ty) + "px)" + getCameraCSSMatrix(camera.matrixWorldInverse) : `scale( ${scaleByViewOffset} )translateZ(` + fov + "px)" + getCameraCSSMatrix(camera.matrixWorldInverse); - const style = (camera.isPerspectiveCamera ? "perspective(" + fov + "px) " : "") + cameraCSSMatrix + "translate(" + _widthHalf + "px," + _heightHalf + "px)"; - if (cache.camera.style !== style) { - cameraElement.style.transform = style; - cache.camera.style = style; - } - renderObject(scene, scene, camera); - }; - this.setSize = function(width, height) { - _width = width; - _height = height; - _widthHalf = _width / 2; - _heightHalf = _height / 2; - domElement.style.width = width + "px"; - domElement.style.height = height + "px"; - viewElement.style.width = width + "px"; - viewElement.style.height = height + "px"; - cameraElement.style.width = width + "px"; - cameraElement.style.height = height + "px"; - }; - function epsilon(value) { - return Math.abs(value) < 1e-10 ? 0 : value; - } - function getCameraCSSMatrix(matrix) { - const elements = matrix.elements; - return "matrix3d(" + epsilon(elements[0]) + "," + epsilon(-elements[1]) + "," + epsilon(elements[2]) + "," + epsilon(elements[3]) + "," + epsilon(elements[4]) + "," + epsilon(-elements[5]) + "," + epsilon(elements[6]) + "," + epsilon(elements[7]) + "," + epsilon(elements[8]) + "," + epsilon(-elements[9]) + "," + epsilon(elements[10]) + "," + epsilon(elements[11]) + "," + epsilon(elements[12]) + "," + epsilon(-elements[13]) + "," + epsilon(elements[14]) + "," + epsilon(elements[15]) + ")"; - } - function getObjectCSSMatrix(matrix) { - const elements = matrix.elements; - return "translate(-50%,-50%)" + ("matrix3d(" + epsilon(elements[0]) + "," + epsilon(elements[1]) + "," + epsilon(elements[2]) + "," + epsilon(elements[3]) + "," + epsilon(-elements[4]) + "," + epsilon(-elements[5]) + "," + epsilon(-elements[6]) + "," + epsilon(-elements[7]) + "," + epsilon(elements[8]) + "," + epsilon(elements[9]) + "," + epsilon(elements[10]) + "," + epsilon(elements[11]) + "," + epsilon(elements[12]) + "," + epsilon(elements[13]) + "," + epsilon(elements[14]) + "," + epsilon(elements[15]) + ")"); - } - function renderObject(object, scene, camera, cameraCSSMatrix) { - if (object.isCSS3DObject) { - const visible = object.visible === true && object.layers.test(camera.layers) === true; - object.element.style.display = visible === true ? "" : "none"; - if (visible === true) { - object.onBeforeRender(_this, scene, camera); - let style; - if (object.isCSS3DSprite) { - _matrix$2.copy(camera.matrixWorldInverse); - _matrix$2.transpose(); - if (object.rotation2D !== 0) _matrix$2.multiply(_matrix2.makeRotationZ(object.rotation2D)); - object.matrixWorld.decompose(_position$1, _quaternion$1, _scale$1); - _matrix$2.setPosition(_position$1); - _matrix$2.scale(_scale$1); - _matrix$2.elements[3] = 0; - _matrix$2.elements[7] = 0; - _matrix$2.elements[11] = 0; - _matrix$2.elements[15] = 1; - style = getObjectCSSMatrix(_matrix$2); - } else style = getObjectCSSMatrix(object.matrixWorld); - const element = object.element; - const cachedObject = cache.objects.get(object); - if (cachedObject === void 0 || cachedObject.style !== style) { - element.style.transform = style; - const objectData = { style }; - cache.objects.set(object, objectData); - } - if (element.parentNode !== cameraElement) cameraElement.appendChild(element); - object.onAfterRender(_this, scene, camera); - } - } - for (let i = 0, l = object.children.length; i < l; i++) renderObject(object.children[i], scene, camera); - } - } -}; -//#endregion -//#region node_modules/three-stdlib/renderers/Projector.js -var RenderableObject = class { - constructor() { - this.id = 0; - this.object = null; - this.z = 0; - this.renderOrder = 0; - } -}; -var RenderableFace = class { - constructor() { - this.id = 0; - this.v1 = new RenderableVertex(); - this.v2 = new RenderableVertex(); - this.v3 = new RenderableVertex(); - this.normalModel = new Vector3(); - this.vertexNormalsModel = [ - new Vector3(), - new Vector3(), - new Vector3() - ]; - this.vertexNormalsLength = 0; - this.color = new Color(); - this.material = null; - this.uvs = [ - new Vector2(), - new Vector2(), - new Vector2() - ]; - this.z = 0; - this.renderOrder = 0; - } -}; -var RenderableVertex = class { - constructor() { - this.position = new Vector3(); - this.positionWorld = new Vector3(); - this.positionScreen = new Vector4(); - this.visible = true; - } - copy(vertex) { - this.positionWorld.copy(vertex.positionWorld); - this.positionScreen.copy(vertex.positionScreen); - } -}; -var RenderableLine = class { - constructor() { - this.id = 0; - this.v1 = new RenderableVertex(); - this.v2 = new RenderableVertex(); - this.vertexColors = [new Color(), new Color()]; - this.material = null; - this.z = 0; - this.renderOrder = 0; - } -}; -var RenderableSprite = class { - constructor() { - this.id = 0; - this.object = null; - this.x = 0; - this.y = 0; - this.z = 0; - this.rotation = 0; - this.scale = new Vector2(); - this.material = null; - this.renderOrder = 0; - } -}; -var Projector = class { - constructor() { - let _object, _objectCount, _objectPoolLength = 0, _vertex, _vertexCount, _vertexPoolLength = 0, _face, _faceCount, _facePoolLength = 0, _line, _lineCount, _linePoolLength = 0, _sprite, _spriteCount, _spritePoolLength = 0, _modelMatrix; - const _renderData = { - objects: [], - lights: [], - elements: [] - }, _vector3 = new Vector3(), _vector4 = new Vector4(), _clipBox = new Box3(new Vector3(-1, -1, -1), new Vector3(1, 1, 1)), _boundingBox = new Box3(), _points3 = new Array(3), _viewMatrix = new Matrix4(), _viewProjectionMatrix = new Matrix4(), _modelViewProjectionMatrix = new Matrix4(), _frustum = new Frustum(), _objectPool = [], _vertexPool = [], _facePool = [], _linePool = [], _spritePool = []; - function RenderList() { - const normals = []; - const colors = []; - const uvs = []; - let object = null; - const normalMatrix = new Matrix3(); - function setObject(value) { - object = value; - normalMatrix.getNormalMatrix(object.matrixWorld); - normals.length = 0; - colors.length = 0; - uvs.length = 0; - } - function projectVertex(vertex) { - const position = vertex.position; - const positionWorld = vertex.positionWorld; - const positionScreen = vertex.positionScreen; - positionWorld.copy(position).applyMatrix4(_modelMatrix); - positionScreen.copy(positionWorld).applyMatrix4(_viewProjectionMatrix); - const invW = 1 / positionScreen.w; - positionScreen.x *= invW; - positionScreen.y *= invW; - positionScreen.z *= invW; - vertex.visible = positionScreen.x >= -1 && positionScreen.x <= 1 && positionScreen.y >= -1 && positionScreen.y <= 1 && positionScreen.z >= -1 && positionScreen.z <= 1; - } - function pushVertex(x, y, z) { - _vertex = getNextVertexInPool(); - _vertex.position.set(x, y, z); - projectVertex(_vertex); - } - function pushNormal(x, y, z) { - normals.push(x, y, z); - } - function pushColor(r, g, b) { - colors.push(r, g, b); - } - function pushUv(x, y) { - uvs.push(x, y); - } - function checkTriangleVisibility(v1, v2, v3) { - if (v1.visible === true || v2.visible === true || v3.visible === true) return true; - _points3[0] = v1.positionScreen; - _points3[1] = v2.positionScreen; - _points3[2] = v3.positionScreen; - return _clipBox.intersectsBox(_boundingBox.setFromPoints(_points3)); - } - function checkBackfaceCulling(v1, v2, v3) { - return (v3.positionScreen.x - v1.positionScreen.x) * (v2.positionScreen.y - v1.positionScreen.y) - (v3.positionScreen.y - v1.positionScreen.y) * (v2.positionScreen.x - v1.positionScreen.x) < 0; - } - function pushLine(a, b) { - const v1 = _vertexPool[a]; - const v2 = _vertexPool[b]; - v1.positionScreen.copy(v1.position).applyMatrix4(_modelViewProjectionMatrix); - v2.positionScreen.copy(v2.position).applyMatrix4(_modelViewProjectionMatrix); - if (clipLine(v1.positionScreen, v2.positionScreen) === true) { - v1.positionScreen.multiplyScalar(1 / v1.positionScreen.w); - v2.positionScreen.multiplyScalar(1 / v2.positionScreen.w); - _line = getNextLineInPool(); - _line.id = object.id; - _line.v1.copy(v1); - _line.v2.copy(v2); - _line.z = Math.max(v1.positionScreen.z, v2.positionScreen.z); - _line.renderOrder = object.renderOrder; - _line.material = object.material; - if (object.material.vertexColors) { - _line.vertexColors[0].fromArray(colors, a * 3); - _line.vertexColors[1].fromArray(colors, b * 3); - } - _renderData.elements.push(_line); - } - } - function pushTriangle(a, b, c, material) { - const v1 = _vertexPool[a]; - const v2 = _vertexPool[b]; - const v3 = _vertexPool[c]; - if (checkTriangleVisibility(v1, v2, v3) === false) return; - if (material.side === 2 || checkBackfaceCulling(v1, v2, v3) === true) { - _face = getNextFaceInPool(); - _face.id = object.id; - _face.v1.copy(v1); - _face.v2.copy(v2); - _face.v3.copy(v3); - _face.z = (v1.positionScreen.z + v2.positionScreen.z + v3.positionScreen.z) / 3; - _face.renderOrder = object.renderOrder; - _vector3.subVectors(v3.position, v2.position); - _vector4.subVectors(v1.position, v2.position); - _vector3.cross(_vector4); - _face.normalModel.copy(_vector3); - _face.normalModel.applyMatrix3(normalMatrix).normalize(); - for (let i = 0; i < 3; i++) { - const normal = _face.vertexNormalsModel[i]; - normal.fromArray(normals, arguments[i] * 3); - normal.applyMatrix3(normalMatrix).normalize(); - _face.uvs[i].fromArray(uvs, arguments[i] * 2); - } - _face.vertexNormalsLength = 3; - _face.material = material; - if (material.vertexColors) _face.color.fromArray(colors, a * 3); - _renderData.elements.push(_face); - } - } - return { - setObject, - projectVertex, - checkTriangleVisibility, - checkBackfaceCulling, - pushVertex, - pushNormal, - pushColor, - pushUv, - pushLine, - pushTriangle - }; - } - const renderList = new RenderList(); - function projectObject(object) { - if (object.visible === false) return; - if (object.isLight) _renderData.lights.push(object); - else if (object.isMesh || object.isLine || object.isPoints) { - if (object.material.visible === false) return; - if (object.frustumCulled === true && _frustum.intersectsObject(object) === false) return; - addObject(object); - } else if (object.isSprite) { - if (object.material.visible === false) return; - if (object.frustumCulled === true && _frustum.intersectsSprite(object) === false) return; - addObject(object); - } - const children = object.children; - for (let i = 0, l = children.length; i < l; i++) projectObject(children[i]); - } - function addObject(object) { - _object = getNextObjectInPool(); - _object.id = object.id; - _object.object = object; - _vector3.setFromMatrixPosition(object.matrixWorld); - _vector3.applyMatrix4(_viewProjectionMatrix); - _object.z = _vector3.z; - _object.renderOrder = object.renderOrder; - _renderData.objects.push(_object); - } - this.projectScene = function(scene, camera, sortObjects, sortElements) { - _faceCount = 0; - _lineCount = 0; - _spriteCount = 0; - _renderData.elements.length = 0; - if (scene.matrixWorldAutoUpdate === true) scene.updateMatrixWorld(); - if (camera.parent === null && camera.matrixWorldAutoUpdate === true) camera.updateMatrixWorld(); - _viewMatrix.copy(camera.matrixWorldInverse); - _viewProjectionMatrix.multiplyMatrices(camera.projectionMatrix, _viewMatrix); - _frustum.setFromProjectionMatrix(_viewProjectionMatrix); - _objectCount = 0; - _renderData.objects.length = 0; - _renderData.lights.length = 0; - projectObject(scene); - if (sortObjects === true) _renderData.objects.sort(painterSort); - const objects = _renderData.objects; - for (let o = 0, ol = objects.length; o < ol; o++) { - const object = objects[o].object; - const geometry = object.geometry; - renderList.setObject(object); - _modelMatrix = object.matrixWorld; - _vertexCount = 0; - if (object.isMesh) { - let material = object.material; - const isMultiMaterial = Array.isArray(material); - const attributes = geometry.attributes; - const groups = geometry.groups; - if (attributes.position === void 0) continue; - const positions = attributes.position.array; - for (let i = 0, l = positions.length; i < l; i += 3) { - let x = positions[i]; - let y = positions[i + 1]; - let z = positions[i + 2]; - const morphTargets = geometry.morphAttributes.position; - if (morphTargets !== void 0) { - const morphTargetsRelative = geometry.morphTargetsRelative; - const morphInfluences = object.morphTargetInfluences; - for (let t = 0, tl = morphTargets.length; t < tl; t++) { - const influence = morphInfluences[t]; - if (influence === 0) continue; - const target = morphTargets[t]; - if (morphTargetsRelative) { - x += target.getX(i / 3) * influence; - y += target.getY(i / 3) * influence; - z += target.getZ(i / 3) * influence; - } else { - x += (target.getX(i / 3) - positions[i]) * influence; - y += (target.getY(i / 3) - positions[i + 1]) * influence; - z += (target.getZ(i / 3) - positions[i + 2]) * influence; - } - } - } - renderList.pushVertex(x, y, z); - } - if (attributes.normal !== void 0) { - const normals = attributes.normal.array; - for (let i = 0, l = normals.length; i < l; i += 3) renderList.pushNormal(normals[i], normals[i + 1], normals[i + 2]); - } - if (attributes.color !== void 0) { - const colors = attributes.color.array; - for (let i = 0, l = colors.length; i < l; i += 3) renderList.pushColor(colors[i], colors[i + 1], colors[i + 2]); - } - if (attributes.uv !== void 0) { - const uvs = attributes.uv.array; - for (let i = 0, l = uvs.length; i < l; i += 2) renderList.pushUv(uvs[i], uvs[i + 1]); - } - if (geometry.index !== null) { - const indices = geometry.index.array; - if (groups.length > 0) for (let g = 0; g < groups.length; g++) { - const group = groups[g]; - material = isMultiMaterial === true ? object.material[group.materialIndex] : object.material; - if (material === void 0) continue; - for (let i = group.start, l = group.start + group.count; i < l; i += 3) renderList.pushTriangle(indices[i], indices[i + 1], indices[i + 2], material); - } - else for (let i = 0, l = indices.length; i < l; i += 3) renderList.pushTriangle(indices[i], indices[i + 1], indices[i + 2], material); - } else if (groups.length > 0) for (let g = 0; g < groups.length; g++) { - const group = groups[g]; - material = isMultiMaterial === true ? object.material[group.materialIndex] : object.material; - if (material === void 0) continue; - for (let i = group.start, l = group.start + group.count; i < l; i += 3) renderList.pushTriangle(i, i + 1, i + 2, material); - } - else for (let i = 0, l = positions.length / 3; i < l; i += 3) renderList.pushTriangle(i, i + 1, i + 2, material); - } else if (object.isLine) { - _modelViewProjectionMatrix.multiplyMatrices(_viewProjectionMatrix, _modelMatrix); - const attributes = geometry.attributes; - if (attributes.position !== void 0) { - const positions = attributes.position.array; - for (let i = 0, l = positions.length; i < l; i += 3) renderList.pushVertex(positions[i], positions[i + 1], positions[i + 2]); - if (attributes.color !== void 0) { - const colors = attributes.color.array; - for (let i = 0, l = colors.length; i < l; i += 3) renderList.pushColor(colors[i], colors[i + 1], colors[i + 2]); - } - if (geometry.index !== null) { - const indices = geometry.index.array; - for (let i = 0, l = indices.length; i < l; i += 2) renderList.pushLine(indices[i], indices[i + 1]); - } else { - const step = object.isLineSegments ? 2 : 1; - for (let i = 0, l = positions.length / 3 - 1; i < l; i += step) renderList.pushLine(i, i + 1); - } - } - } else if (object.isPoints) { - _modelViewProjectionMatrix.multiplyMatrices(_viewProjectionMatrix, _modelMatrix); - const attributes = geometry.attributes; - if (attributes.position !== void 0) { - const positions = attributes.position.array; - for (let i = 0, l = positions.length; i < l; i += 3) { - _vector4.set(positions[i], positions[i + 1], positions[i + 2], 1); - _vector4.applyMatrix4(_modelViewProjectionMatrix); - pushPoint(_vector4, object, camera); - } - } - } else if (object.isSprite) { - object.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, object.matrixWorld); - _vector4.set(_modelMatrix.elements[12], _modelMatrix.elements[13], _modelMatrix.elements[14], 1); - _vector4.applyMatrix4(_viewProjectionMatrix); - pushPoint(_vector4, object, camera); - } - } - if (sortElements === true) _renderData.elements.sort(painterSort); - return _renderData; - }; - function pushPoint(_vector42, object, camera) { - const invW = 1 / _vector42.w; - _vector42.z *= invW; - if (_vector42.z >= -1 && _vector42.z <= 1) { - _sprite = getNextSpriteInPool(); - _sprite.id = object.id; - _sprite.x = _vector42.x * invW; - _sprite.y = _vector42.y * invW; - _sprite.z = _vector42.z; - _sprite.renderOrder = object.renderOrder; - _sprite.object = object; - _sprite.rotation = object.rotation; - _sprite.scale.x = object.scale.x * Math.abs(_sprite.x - (_vector42.x + camera.projectionMatrix.elements[0]) / (_vector42.w + camera.projectionMatrix.elements[12])); - _sprite.scale.y = object.scale.y * Math.abs(_sprite.y - (_vector42.y + camera.projectionMatrix.elements[5]) / (_vector42.w + camera.projectionMatrix.elements[13])); - _sprite.material = object.material; - _renderData.elements.push(_sprite); - } - } - function getNextObjectInPool() { - if (_objectCount === _objectPoolLength) { - const object = new RenderableObject(); - _objectPool.push(object); - _objectPoolLength++; - _objectCount++; - return object; - } - return _objectPool[_objectCount++]; - } - function getNextVertexInPool() { - if (_vertexCount === _vertexPoolLength) { - const vertex = new RenderableVertex(); - _vertexPool.push(vertex); - _vertexPoolLength++; - _vertexCount++; - return vertex; - } - return _vertexPool[_vertexCount++]; - } - function getNextFaceInPool() { - if (_faceCount === _facePoolLength) { - const face = new RenderableFace(); - _facePool.push(face); - _facePoolLength++; - _faceCount++; - return face; - } - return _facePool[_faceCount++]; - } - function getNextLineInPool() { - if (_lineCount === _linePoolLength) { - const line = new RenderableLine(); - _linePool.push(line); - _linePoolLength++; - _lineCount++; - return line; - } - return _linePool[_lineCount++]; - } - function getNextSpriteInPool() { - if (_spriteCount === _spritePoolLength) { - const sprite = new RenderableSprite(); - _spritePool.push(sprite); - _spritePoolLength++; - _spriteCount++; - return sprite; - } - return _spritePool[_spriteCount++]; - } - function painterSort(a, b) { - if (a.renderOrder !== b.renderOrder) return a.renderOrder - b.renderOrder; - else if (a.z !== b.z) return b.z - a.z; - else if (a.id !== b.id) return a.id - b.id; - else return 0; - } - function clipLine(s1, s2) { - let alpha1 = 0, alpha2 = 1; - const bc1near = s1.z + s1.w, bc2near = s2.z + s2.w, bc1far = -s1.z + s1.w, bc2far = -s2.z + s2.w; - if (bc1near >= 0 && bc2near >= 0 && bc1far >= 0 && bc2far >= 0) return true; - else if (bc1near < 0 && bc2near < 0 || bc1far < 0 && bc2far < 0) return false; - else { - if (bc1near < 0) alpha1 = Math.max(alpha1, bc1near / (bc1near - bc2near)); - else if (bc2near < 0) alpha2 = Math.min(alpha2, bc1near / (bc1near - bc2near)); - if (bc1far < 0) alpha1 = Math.max(alpha1, bc1far / (bc1far - bc2far)); - else if (bc2far < 0) alpha2 = Math.min(alpha2, bc1far / (bc1far - bc2far)); - if (alpha2 < alpha1) return false; - else { - s1.lerp(s2, alpha1); - s2.lerp(s1, 1 - alpha2); - return true; - } - } - } - } -}; -//#endregion -//#region node_modules/three-stdlib/renderers/SVGRenderer.js -var SVGObject = class extends Object3D { - constructor(node) { - super(); - this.isSVGObject = true; - this.node = node; - } -}; -var SVGRenderer = class { - constructor() { - let _renderData, _elements, _lights, _svgWidth, _svgHeight, _svgWidthHalf, _svgHeightHalf, _v1, _v2, _v3, _svgNode, _pathCount = 0, _precision = null, _quality = 1, _currentPath, _currentStyle; - const _this = this, _clipBox = new Box2(), _elemBox = new Box2(), _color = new Color(), _diffuseColor = new Color(), _ambientLight = new Color(), _directionalLights = new Color(), _pointLights = new Color(), _clearColor = new Color(), _vector3 = new Vector3(), _centroid = new Vector3(), _normal = new Vector3(), _normalViewMatrix = new Matrix3(), _viewMatrix = new Matrix4(), _viewProjectionMatrix = new Matrix4(), _svgPathPool = [], _projector = new Projector(), _svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); - this.domElement = _svg; - this.autoClear = true; - this.sortObjects = true; - this.sortElements = true; - this.overdraw = .5; - this.info = { render: { - vertices: 0, - faces: 0 - } }; - this.setQuality = function(quality) { - switch (quality) { - case "high": - _quality = 1; - break; - case "low": - _quality = 0; - break; - } - }; - this.setClearColor = function(color) { - _clearColor.set(color); - }; - this.setPixelRatio = function() {}; - this.setSize = function(width, height) { - _svgWidth = width; - _svgHeight = height; - _svgWidthHalf = _svgWidth / 2; - _svgHeightHalf = _svgHeight / 2; - _svg.setAttribute("viewBox", -_svgWidthHalf + " " + -_svgHeightHalf + " " + _svgWidth + " " + _svgHeight); - _svg.setAttribute("width", _svgWidth); - _svg.setAttribute("height", _svgHeight); - _clipBox.min.set(-_svgWidthHalf, -_svgHeightHalf); - _clipBox.max.set(_svgWidthHalf, _svgHeightHalf); - }; - this.getSize = function() { - return { - width: _svgWidth, - height: _svgHeight - }; - }; - this.setPrecision = function(precision) { - _precision = precision; - }; - function removeChildNodes() { - _pathCount = 0; - while (_svg.childNodes.length > 0) _svg.removeChild(_svg.childNodes[0]); - } - function convert(c) { - return _precision !== null ? c.toFixed(_precision) : c; - } - this.clear = function() { - removeChildNodes(); - _svg.style.backgroundColor = _clearColor.getStyle(); - }; - this.render = function(scene, camera) { - if (camera instanceof Camera === false) { - console.error("THREE.SVGRenderer.render: camera is not an instance of Camera."); - return; - } - const background = scene.background; - if (background && background.isColor) { - removeChildNodes(); - _svg.style.backgroundColor = background.getStyle(); - } else if (this.autoClear === true) this.clear(); - _this.info.render.vertices = 0; - _this.info.render.faces = 0; - _viewMatrix.copy(camera.matrixWorldInverse); - _viewProjectionMatrix.multiplyMatrices(camera.projectionMatrix, _viewMatrix); - _renderData = _projector.projectScene(scene, camera, this.sortObjects, this.sortElements); - _elements = _renderData.elements; - _lights = _renderData.lights; - _normalViewMatrix.getNormalMatrix(camera.matrixWorldInverse); - calculateLights(_lights); - _currentPath = ""; - _currentStyle = ""; - for (let e = 0, el = _elements.length; e < el; e++) { - const element = _elements[e]; - const material = element.material; - if (material === void 0 || material.opacity === 0) continue; - _elemBox.makeEmpty(); - if (element instanceof RenderableSprite) { - _v1 = element; - _v1.x *= _svgWidthHalf; - _v1.y *= -_svgHeightHalf; - renderSprite(_v1, element, material); - } else if (element instanceof RenderableLine) { - _v1 = element.v1; - _v2 = element.v2; - _v1.positionScreen.x *= _svgWidthHalf; - _v1.positionScreen.y *= -_svgHeightHalf; - _v2.positionScreen.x *= _svgWidthHalf; - _v2.positionScreen.y *= -_svgHeightHalf; - _elemBox.setFromPoints([_v1.positionScreen, _v2.positionScreen]); - if (_clipBox.intersectsBox(_elemBox) === true) renderLine(_v1, _v2, material); - } else if (element instanceof RenderableFace) { - _v1 = element.v1; - _v2 = element.v2; - _v3 = element.v3; - if (_v1.positionScreen.z < -1 || _v1.positionScreen.z > 1) continue; - if (_v2.positionScreen.z < -1 || _v2.positionScreen.z > 1) continue; - if (_v3.positionScreen.z < -1 || _v3.positionScreen.z > 1) continue; - _v1.positionScreen.x *= _svgWidthHalf; - _v1.positionScreen.y *= -_svgHeightHalf; - _v2.positionScreen.x *= _svgWidthHalf; - _v2.positionScreen.y *= -_svgHeightHalf; - _v3.positionScreen.x *= _svgWidthHalf; - _v3.positionScreen.y *= -_svgHeightHalf; - if (this.overdraw > 0) { - expand(_v1.positionScreen, _v2.positionScreen, this.overdraw); - expand(_v2.positionScreen, _v3.positionScreen, this.overdraw); - expand(_v3.positionScreen, _v1.positionScreen, this.overdraw); - } - _elemBox.setFromPoints([ - _v1.positionScreen, - _v2.positionScreen, - _v3.positionScreen - ]); - if (_clipBox.intersectsBox(_elemBox) === true) renderFace3(_v1, _v2, _v3, element, material); - } - } - flushPath(); - scene.traverseVisible(function(object) { - if (object.isSVGObject) { - _vector3.setFromMatrixPosition(object.matrixWorld); - _vector3.applyMatrix4(_viewProjectionMatrix); - if (_vector3.z < -1 || _vector3.z > 1) return; - const x = _vector3.x * _svgWidthHalf; - const y = -_vector3.y * _svgHeightHalf; - const node = object.node; - node.setAttribute("transform", "translate(" + x + "," + y + ")"); - _svg.appendChild(node); - } - }); - }; - function calculateLights(lights) { - _ambientLight.setRGB(0, 0, 0); - _directionalLights.setRGB(0, 0, 0); - _pointLights.setRGB(0, 0, 0); - for (let l = 0, ll = lights.length; l < ll; l++) { - const light = lights[l]; - const lightColor = light.color; - if (light.isAmbientLight) { - _ambientLight.r += lightColor.r; - _ambientLight.g += lightColor.g; - _ambientLight.b += lightColor.b; - } else if (light.isDirectionalLight) { - _directionalLights.r += lightColor.r; - _directionalLights.g += lightColor.g; - _directionalLights.b += lightColor.b; - } else if (light.isPointLight) { - _pointLights.r += lightColor.r; - _pointLights.g += lightColor.g; - _pointLights.b += lightColor.b; - } - } - } - function calculateLight(lights, position, normal, color) { - for (let l = 0, ll = lights.length; l < ll; l++) { - const light = lights[l]; - const lightColor = light.color; - if (light.isDirectionalLight) { - const lightPosition = _vector3.setFromMatrixPosition(light.matrixWorld).normalize(); - let amount = normal.dot(lightPosition); - if (amount <= 0) continue; - amount *= light.intensity; - color.r += lightColor.r * amount; - color.g += lightColor.g * amount; - color.b += lightColor.b * amount; - } else if (light.isPointLight) { - const lightPosition = _vector3.setFromMatrixPosition(light.matrixWorld); - let amount = normal.dot(_vector3.subVectors(lightPosition, position).normalize()); - if (amount <= 0) continue; - amount *= light.distance == 0 ? 1 : 1 - Math.min(position.distanceTo(lightPosition) / light.distance, 1); - if (amount == 0) continue; - amount *= light.intensity; - color.r += lightColor.r * amount; - color.g += lightColor.g * amount; - color.b += lightColor.b * amount; - } - } - } - function renderSprite(v1, element, material) { - let scaleX = element.scale.x * _svgWidthHalf; - let scaleY = element.scale.y * _svgHeightHalf; - if (material.isPointsMaterial) { - scaleX *= material.size; - scaleY *= material.size; - } - const path = "M" + convert(v1.x - scaleX * .5) + "," + convert(v1.y - scaleY * .5) + "h" + convert(scaleX) + "v" + convert(scaleY) + "h" + convert(-scaleX) + "z"; - let style = ""; - if (material.isSpriteMaterial || material.isPointsMaterial) style = "fill:" + material.color.getStyle() + ";fill-opacity:" + material.opacity; - addPath(style, path); - } - function renderLine(v1, v2, material) { - const path = "M" + convert(v1.positionScreen.x) + "," + convert(v1.positionScreen.y) + "L" + convert(v2.positionScreen.x) + "," + convert(v2.positionScreen.y); - if (material.isLineBasicMaterial) { - let style = "fill:none;stroke:" + material.color.getStyle() + ";stroke-opacity:" + material.opacity + ";stroke-width:" + material.linewidth + ";stroke-linecap:" + material.linecap; - if (material.isLineDashedMaterial) style = style + ";stroke-dasharray:" + material.dashSize + "," + material.gapSize; - addPath(style, path); - } - } - function renderFace3(v1, v2, v3, element, material) { - _this.info.render.vertices += 3; - _this.info.render.faces++; - const path = "M" + convert(v1.positionScreen.x) + "," + convert(v1.positionScreen.y) + "L" + convert(v2.positionScreen.x) + "," + convert(v2.positionScreen.y) + "L" + convert(v3.positionScreen.x) + "," + convert(v3.positionScreen.y) + "z"; - let style = ""; - if (material.isMeshBasicMaterial) { - _color.copy(material.color); - if (material.vertexColors) _color.multiply(element.color); - } else if (material.isMeshLambertMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial) { - _diffuseColor.copy(material.color); - if (material.vertexColors) _diffuseColor.multiply(element.color); - _color.copy(_ambientLight); - _centroid.copy(v1.positionWorld).add(v2.positionWorld).add(v3.positionWorld).divideScalar(3); - calculateLight(_lights, _centroid, element.normalModel, _color); - _color.multiply(_diffuseColor).add(material.emissive); - } else if (material.isMeshNormalMaterial) { - _normal.copy(element.normalModel).applyMatrix3(_normalViewMatrix).normalize(); - _color.setRGB(_normal.x, _normal.y, _normal.z).multiplyScalar(.5).addScalar(.5); - } - if (material.wireframe) style = "fill:none;stroke:" + _color.getStyle() + ";stroke-opacity:" + material.opacity + ";stroke-width:" + material.wireframeLinewidth + ";stroke-linecap:" + material.wireframeLinecap + ";stroke-linejoin:" + material.wireframeLinejoin; - else style = "fill:" + _color.getStyle() + ";fill-opacity:" + material.opacity; - addPath(style, path); - } - function expand(v1, v2, pixels) { - let x = v2.x - v1.x, y = v2.y - v1.y; - const det = x * x + y * y; - if (det === 0) return; - const idet = pixels / Math.sqrt(det); - x *= idet; - y *= idet; - v2.x += x; - v2.y += y; - v1.x -= x; - v1.y -= y; - } - function addPath(style, path) { - if (_currentStyle === style) _currentPath += path; - else { - flushPath(); - _currentStyle = style; - _currentPath = path; - } - } - function flushPath() { - if (_currentPath) { - _svgNode = getPathNode(_pathCount++); - _svgNode.setAttribute("d", _currentPath); - _svgNode.setAttribute("style", _currentStyle); - _svg.appendChild(_svgNode); - } - _currentPath = ""; - _currentStyle = ""; - } - function getPathNode(id) { - if (_svgPathPool[id] == null) { - _svgPathPool[id] = document.createElementNS("http://www.w3.org/2000/svg", "path"); - if (_quality == 0) _svgPathPool[id].setAttribute("shape-rendering", "crispEdges"); - return _svgPathPool[id]; - } - return _svgPathPool[id]; - } - } -}; -//#endregion -//#region node_modules/three-stdlib/textures/FlakesTexture.js -var FlakesTexture = class { - constructor(width = 512, height = 512) { - const canvas = document.createElement("canvas"); - canvas.width = width; - canvas.height = height; - const context = canvas.getContext("2d"); - context.fillStyle = "rgb(127,127,255)"; - context.fillRect(0, 0, width, height); - for (let i = 0; i < 4e3; i++) { - const x = Math.random() * width; - const y = Math.random() * height; - const r = Math.random() * 3 + 3; - let nx = Math.random() * 2 - 1; - let ny = Math.random() * 2 - 1; - let nz = 1.5; - const l = Math.sqrt(nx * nx + ny * ny + nz * nz); - nx /= l; - ny /= l; - nz /= l; - context.fillStyle = "rgb(" + (nx * 127 + 127) + "," + (ny * 127 + 127) + "," + nz * 255 + ")"; - context.beginPath(); - context.arc(x, y, r, 0, Math.PI * 2); - context.fill(); - } - return canvas; - } -}; -//#endregion -//#region node_modules/three-stdlib/modifiers/CurveModifier.js -var __defProp$58 = Object.defineProperty; -var __defNormalProp$58 = (obj, key, value) => key in obj ? __defProp$58(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$58 = (obj, key, value) => { - __defNormalProp$58(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var CHANNELS = 4; -var TEXTURE_WIDTH = 1024; -var TEXTURE_HEIGHT = 4; -var initSplineTexture = (numberOfCurves = 1) => { - const dataTexture = new DataTexture(new Float32Array(TEXTURE_WIDTH * TEXTURE_HEIGHT * numberOfCurves * CHANNELS), TEXTURE_WIDTH, TEXTURE_HEIGHT * numberOfCurves, RGBAFormat, FloatType); - dataTexture.wrapS = RepeatWrapping; - dataTexture.wrapT = RepeatWrapping; - dataTexture.magFilter = NearestFilter; - dataTexture.needsUpdate = true; - return dataTexture; -}; -var updateSplineTexture = (texture, splineCurve, offset = 0) => { - const numberOfPoints = Math.floor(TEXTURE_WIDTH * (TEXTURE_HEIGHT / 4)); - splineCurve.arcLengthDivisions = numberOfPoints / 2; - splineCurve.updateArcLengths(); - const points = splineCurve.getSpacedPoints(numberOfPoints); - const frenetFrames = splineCurve.computeFrenetFrames(numberOfPoints, true); - for (let i = 0; i < numberOfPoints; i++) { - const rowOffset = Math.floor(i / TEXTURE_WIDTH); - const rowIndex = i % TEXTURE_WIDTH; - let pt = points[i]; - setTextureValue(texture, rowIndex, pt.x, pt.y, pt.z, 0 + rowOffset + TEXTURE_HEIGHT * offset); - pt = frenetFrames.tangents[i]; - setTextureValue(texture, rowIndex, pt.x, pt.y, pt.z, 1 + rowOffset + TEXTURE_HEIGHT * offset); - pt = frenetFrames.normals[i]; - setTextureValue(texture, rowIndex, pt.x, pt.y, pt.z, 2 + rowOffset + TEXTURE_HEIGHT * offset); - pt = frenetFrames.binormals[i]; - setTextureValue(texture, rowIndex, pt.x, pt.y, pt.z, 3 + rowOffset + TEXTURE_HEIGHT * offset); - } - texture.needsUpdate = true; -}; -var setTextureValue = (texture, index, x, y, z, o) => { - const { data } = texture.image; - const i = CHANNELS * TEXTURE_WIDTH * o; - data[index * CHANNELS + i + 0] = x; - data[index * CHANNELS + i + 1] = y; - data[index * CHANNELS + i + 2] = z; - data[index * CHANNELS + i + 3] = 1; -}; -var getUniforms = (splineTexture) => ({ - spineTexture: { value: splineTexture }, - pathOffset: { - type: "f", - value: 0 - }, - pathSegment: { - type: "f", - value: 1 - }, - spineOffset: { - type: "f", - value: 161 - }, - spineLength: { - type: "f", - value: 400 - }, - flow: { - type: "i", - value: 1 - } -}); -function modifyShader(material, uniforms, numberOfCurves = 1) { - if (material.__ok) return; - material.__ok = true; - material.onBeforeCompile = (shader) => { - if (shader.__modified) return; - shader.__modified = true; - Object.assign(shader.uniforms, uniforms); - shader.vertexShader = ` - uniform sampler2D spineTexture; - uniform float pathOffset; - uniform float pathSegment; - uniform float spineOffset; - uniform float spineLength; - uniform int flow; - - float textureLayers = ${TEXTURE_HEIGHT * numberOfCurves}.; - float textureStacks = ${TEXTURE_HEIGHT / 4}.; - - ${shader.vertexShader} - `.replace("#include <beginnormal_vertex>", "").replace("#include <defaultnormal_vertex>", "").replace("#include <begin_vertex>", "").replace(/void\s*main\s*\(\)\s*\{/, ` - void main() { - #include <beginnormal_vertex> - - vec4 worldPos = modelMatrix * vec4(position, 1.); - - bool bend = flow > 0; - float xWeight = bend ? 0. : 1.; - - #ifdef USE_INSTANCING - float pathOffsetFromInstanceMatrix = instanceMatrix[3][2]; - float spineLengthFromInstanceMatrix = instanceMatrix[3][0]; - float spinePortion = bend ? (worldPos.x + spineOffset) / spineLengthFromInstanceMatrix : 0.; - float mt = (spinePortion * pathSegment + pathOffset + pathOffsetFromInstanceMatrix)*textureStacks; - #else - float spinePortion = bend ? (worldPos.x + spineOffset) / spineLength : 0.; - float mt = (spinePortion * pathSegment + pathOffset)*textureStacks; - #endif - - mt = mod(mt, textureStacks); - float rowOffset = floor(mt); - - #ifdef USE_INSTANCING - rowOffset += instanceMatrix[3][1] * ${TEXTURE_HEIGHT}.; - #endif - - vec3 spinePos = texture2D(spineTexture, vec2(mt, (0. + rowOffset + 0.5) / textureLayers)).xyz; - vec3 a = texture2D(spineTexture, vec2(mt, (1. + rowOffset + 0.5) / textureLayers)).xyz; - vec3 b = texture2D(spineTexture, vec2(mt, (2. + rowOffset + 0.5) / textureLayers)).xyz; - vec3 c = texture2D(spineTexture, vec2(mt, (3. + rowOffset + 0.5) / textureLayers)).xyz; - mat3 basis = mat3(a, b, c); - - vec3 transformed = basis - * vec3(worldPos.x * xWeight, worldPos.y * 1., worldPos.z * 1.) - + spinePos; - - vec3 transformedNormal = normalMatrix * (basis * objectNormal); - `).replace("#include <project_vertex>", `vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 ); - gl_Position = projectionMatrix * mvPosition;`); - }; -} -var Flow = class { - /** - * @param {Mesh} mesh The mesh to clone and modify to bend around the curve - * @param {number} numberOfCurves The amount of space that should preallocated for additional curves - */ - constructor(mesh, numberOfCurves = 1) { - __publicField$58(this, "curveArray"); - __publicField$58(this, "curveLengthArray"); - __publicField$58(this, "object3D"); - __publicField$58(this, "splineTexure"); - __publicField$58(this, "uniforms"); - const obj3D = mesh.clone(); - const splineTexure = initSplineTexture(numberOfCurves); - const uniforms = getUniforms(splineTexure); - obj3D.traverse((child) => { - if (child instanceof Mesh || child instanceof InstancedMesh) { - child.material = child.material.clone(); - modifyShader(child.material, uniforms, numberOfCurves); - } - }); - this.curveArray = new Array(numberOfCurves); - this.curveLengthArray = new Array(numberOfCurves); - this.object3D = obj3D; - this.splineTexure = splineTexure; - this.uniforms = uniforms; - } - updateCurve(index, curve) { - if (index >= this.curveArray.length) throw Error("Index out of range for Flow"); - const curveLength = curve.getLength(); - this.uniforms.spineLength.value = curveLength; - this.curveLengthArray[index] = curveLength; - this.curveArray[index] = curve; - updateSplineTexture(this.splineTexure, curve, index); - } - moveAlongCurve(amount) { - this.uniforms.pathOffset.value += amount; - } -}; -var matrix$1 = /* @__PURE__ */ new Matrix4(); -var InstancedFlow = class extends Flow { - /** - * - * @param {number} count The number of instanced elements - * @param {number} curveCount The number of curves to preallocate for - * @param {Geometry} geometry The geometry to use for the instanced mesh - * @param {Material} material The material to use for the instanced mesh - */ - constructor(count, curveCount, geometry, material) { - const mesh = new InstancedMesh(geometry, material, count); - mesh.instanceMatrix.setUsage(DynamicDrawUsage); - mesh.frustumCulled = false; - super(mesh, curveCount); - __publicField$58(this, "offsets"); - __publicField$58(this, "whichCurve"); - this.offsets = new Array(count).fill(0); - this.whichCurve = new Array(count).fill(0); - } - /** - * The extra information about which curve and curve position is stored in the translation components of the matrix for the instanced objects - * This writes that information to the matrix and marks it as needing update. - * - * @param {number} index of the instanced element to update - */ - writeChanges(index) { - matrix$1.makeTranslation(this.curveLengthArray[this.whichCurve[index]], this.whichCurve[index], this.offsets[index]); - this.object3D.setMatrixAt(index, matrix$1); - this.object3D.instanceMatrix.needsUpdate = true; - } - /** - * Move an individual element along the curve by a specific amount - * - * @param {number} index Which element to update - * @param {number} offset Move by how much - */ - moveIndividualAlongCurve(index, offset) { - this.offsets[index] += offset; - this.writeChanges(index); - } - /** - * Select which curve to use for an element - * - * @param {number} index the index of the instanced element to update - * @param {number} curveNo the index of the curve it should use - */ - setCurve(index, curveNo) { - if (isNaN(curveNo)) throw Error("curve index being set is Not a Number (NaN)"); - this.whichCurve[index] = curveNo; - this.writeChanges(index); - } -}; -//#endregion -//#region node_modules/three-stdlib/types/helpers.js -var getWithKey = (obj, key) => obj[key]; -//#endregion -//#region node_modules/three-stdlib/utils/BufferGeometryUtils.js -var BufferGeometryUtils_exports = /* @__PURE__ */ __exportAll({ - computeMorphedAttributes: () => computeMorphedAttributes, - estimateBytesUsed: () => estimateBytesUsed, - interleaveAttributes: () => interleaveAttributes, - mergeBufferAttributes: () => mergeBufferAttributes, - mergeBufferGeometries: () => mergeBufferGeometries, - mergeVertices: () => mergeVertices, - toCreasedNormals: () => toCreasedNormals, - toTrianglesDrawMode: () => toTrianglesDrawMode -}); -var mergeBufferGeometries = (geometries, useGroups) => { - const isIndexed = geometries[0].index !== null; - const attributesUsed = new Set(Object.keys(geometries[0].attributes)); - const morphAttributesUsed = new Set(Object.keys(geometries[0].morphAttributes)); - const attributes = {}; - const morphAttributes = {}; - const morphTargetsRelative = geometries[0].morphTargetsRelative; - const mergedGeometry = new BufferGeometry(); - let offset = 0; - geometries.forEach((geom, i) => { - let attributesCount = 0; - if (isIndexed !== (geom.index !== null)) { - console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index " + i + ". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them."); - return null; - } - for (let name in geom.attributes) { - if (!attributesUsed.has(name)) { - console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index " + i + ". All geometries must have compatible attributes; make sure \"" + name + "\" attribute exists among all geometries, or in none of them."); - return null; - } - if (attributes[name] === void 0) attributes[name] = []; - attributes[name].push(geom.attributes[name]); - attributesCount++; - } - if (attributesCount !== attributesUsed.size) { - console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index " + i + ". Make sure all geometries have the same number of attributes."); - return null; - } - if (morphTargetsRelative !== geom.morphTargetsRelative) { - console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index " + i + ". .morphTargetsRelative must be consistent throughout all geometries."); - return null; - } - for (let name in geom.morphAttributes) { - if (!morphAttributesUsed.has(name)) { - console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index " + i + ". .morphAttributes must be consistent throughout all geometries."); - return null; - } - if (morphAttributes[name] === void 0) morphAttributes[name] = []; - morphAttributes[name].push(geom.morphAttributes[name]); - } - mergedGeometry.userData.mergedUserData = mergedGeometry.userData.mergedUserData || []; - mergedGeometry.userData.mergedUserData.push(geom.userData); - if (useGroups) { - let count; - if (geom.index) count = geom.index.count; - else if (geom.attributes.position !== void 0) count = geom.attributes.position.count; - else { - console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index " + i + ". The geometry must have either an index or a position attribute"); - return null; - } - mergedGeometry.addGroup(offset, count, i); - offset += count; - } - }); - if (isIndexed) { - let indexOffset = 0; - const mergedIndex = []; - geometries.forEach((geom) => { - const index = geom.index; - for (let j = 0; j < index.count; ++j) mergedIndex.push(index.getX(j) + indexOffset); - indexOffset += geom.attributes.position.count; - }); - mergedGeometry.setIndex(mergedIndex); - } - for (let name in attributes) { - const mergedAttribute = mergeBufferAttributes(attributes[name]); - if (!mergedAttribute) { - console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the " + name + " attribute."); - return null; - } - mergedGeometry.setAttribute(name, mergedAttribute); - } - for (let name in morphAttributes) { - const numMorphTargets = morphAttributes[name][0].length; - if (numMorphTargets === 0) break; - mergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {}; - mergedGeometry.morphAttributes[name] = []; - for (let i = 0; i < numMorphTargets; ++i) { - const morphAttributesToMerge = []; - for (let j = 0; j < morphAttributes[name].length; ++j) morphAttributesToMerge.push(morphAttributes[name][j][i]); - const mergedMorphAttribute = mergeBufferAttributes(morphAttributesToMerge); - if (!mergedMorphAttribute) { - console.error("THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the " + name + " morphAttribute."); - return null; - } - mergedGeometry.morphAttributes[name].push(mergedMorphAttribute); - } - } - return mergedGeometry; -}; -var mergeBufferAttributes = (attributes) => { - let TypedArray = void 0; - let itemSize = void 0; - let normalized = void 0; - let arrayLength = 0; - attributes.forEach((attr) => { - if (TypedArray === void 0) TypedArray = attr.array.constructor; - if (TypedArray !== attr.array.constructor) { - console.error("THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes."); - return null; - } - if (itemSize === void 0) itemSize = attr.itemSize; - if (itemSize !== attr.itemSize) { - console.error("THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes."); - return null; - } - if (normalized === void 0) normalized = attr.normalized; - if (normalized !== attr.normalized) { - console.error("THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes."); - return null; - } - arrayLength += attr.array.length; - }); - if (TypedArray && itemSize) { - const array = new TypedArray(arrayLength); - let offset = 0; - attributes.forEach((attr) => { - array.set(attr.array, offset); - offset += attr.array.length; - }); - return new BufferAttribute(array, itemSize, normalized); - } -}; -var interleaveAttributes = (attributes) => { - let TypedArray = void 0; - let arrayLength = 0; - let stride = 0; - for (let i = 0, l = attributes.length; i < l; ++i) { - const attribute = attributes[i]; - if (TypedArray === void 0) TypedArray = attribute.array.constructor; - if (TypedArray !== attribute.array.constructor) { - console.error("AttributeBuffers of different types cannot be interleaved"); - return null; - } - arrayLength += attribute.array.length; - stride += attribute.itemSize; - } - const interleavedBuffer = new InterleavedBuffer(new TypedArray(arrayLength), stride); - let offset = 0; - const res = []; - const getters = [ - "getX", - "getY", - "getZ", - "getW" - ]; - const setters = [ - "setX", - "setY", - "setZ", - "setW" - ]; - for (let j = 0, l = attributes.length; j < l; j++) { - const attribute = attributes[j]; - const itemSize = attribute.itemSize; - const count = attribute.count; - const iba = new InterleavedBufferAttribute(interleavedBuffer, itemSize, offset, attribute.normalized); - res.push(iba); - offset += itemSize; - for (let c = 0; c < count; c++) for (let k = 0; k < itemSize; k++) { - const set = getWithKey(iba, setters[k]); - const get = getWithKey(attribute, getters[k]); - set(c, get(c)); - } - } - return res; -}; -function estimateBytesUsed(geometry) { - let mem = 0; - for (let name in geometry.attributes) { - const attr = geometry.getAttribute(name); - mem += attr.count * attr.itemSize * attr.array.BYTES_PER_ELEMENT; - } - const indices = geometry.getIndex(); - mem += indices ? indices.count * indices.itemSize * indices.array.BYTES_PER_ELEMENT : 0; - return mem; -} -function mergeVertices(geometry, tolerance = 1e-4) { - tolerance = Math.max(tolerance, Number.EPSILON); - const hashToIndex = {}; - const indices = geometry.getIndex(); - const positions = geometry.getAttribute("position"); - const vertexCount = indices ? indices.count : positions.count; - let nextIndex = 0; - const attributeNames = Object.keys(geometry.attributes); - const attrArrays = {}; - const morphAttrsArrays = {}; - const newIndices = []; - const getters = [ - "getX", - "getY", - "getZ", - "getW" - ]; - for (let i = 0, l = attributeNames.length; i < l; i++) { - const name = attributeNames[i]; - attrArrays[name] = []; - const morphAttr = geometry.morphAttributes[name]; - if (morphAttr) morphAttrsArrays[name] = new Array(morphAttr.length).fill(0).map(() => []); - } - const decimalShift = Math.log10(1 / tolerance); - const shiftMultiplier = Math.pow(10, decimalShift); - for (let i = 0; i < vertexCount; i++) { - const index = indices ? indices.getX(i) : i; - let hash = ""; - for (let j = 0, l = attributeNames.length; j < l; j++) { - const name = attributeNames[j]; - const attribute = geometry.getAttribute(name); - const itemSize = attribute.itemSize; - for (let k = 0; k < itemSize; k++) hash += `${~~(attribute[getters[k]](index) * shiftMultiplier)},`; - } - if (hash in hashToIndex) newIndices.push(hashToIndex[hash]); - else { - for (let j = 0, l = attributeNames.length; j < l; j++) { - const name = attributeNames[j]; - const attribute = geometry.getAttribute(name); - const morphAttr = geometry.morphAttributes[name]; - const itemSize = attribute.itemSize; - const newarray = attrArrays[name]; - const newMorphArrays = morphAttrsArrays[name]; - for (let k = 0; k < itemSize; k++) { - const getterFunc = getters[k]; - newarray.push(attribute[getterFunc](index)); - if (morphAttr) for (let m = 0, ml = morphAttr.length; m < ml; m++) newMorphArrays[m].push(morphAttr[m][getterFunc](index)); - } - } - hashToIndex[hash] = nextIndex; - newIndices.push(nextIndex); - nextIndex++; - } - } - const result = geometry.clone(); - for (let i = 0, l = attributeNames.length; i < l; i++) { - const name = attributeNames[i]; - const oldAttribute = geometry.getAttribute(name); - const attribute = new BufferAttribute(new oldAttribute.array.constructor(attrArrays[name]), oldAttribute.itemSize, oldAttribute.normalized); - result.setAttribute(name, attribute); - if (name in morphAttrsArrays) for (let j = 0; j < morphAttrsArrays[name].length; j++) { - const oldMorphAttribute = geometry.morphAttributes[name][j]; - const morphAttribute = new BufferAttribute(new oldMorphAttribute.array.constructor(morphAttrsArrays[name][j]), oldMorphAttribute.itemSize, oldMorphAttribute.normalized); - result.morphAttributes[name][j] = morphAttribute; - } - } - result.setIndex(newIndices); - return result; -} -function toTrianglesDrawMode(geometry, drawMode) { - if (drawMode === 0) { - console.warn("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles."); - return geometry; - } - if (drawMode === 2 || drawMode === 1) { - let index = geometry.getIndex(); - if (index === null) { - const indices = []; - const position = geometry.getAttribute("position"); - if (position !== void 0) { - for (let i = 0; i < position.count; i++) indices.push(i); - geometry.setIndex(indices); - index = geometry.getIndex(); - } else { - console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible."); - return geometry; - } - } - const numberOfTriangles = index.count - 2; - const newIndices = []; - if (index) if (drawMode === 2) for (let i = 1; i <= numberOfTriangles; i++) { - newIndices.push(index.getX(0)); - newIndices.push(index.getX(i)); - newIndices.push(index.getX(i + 1)); - } - else for (let i = 0; i < numberOfTriangles; i++) if (i % 2 === 0) { - newIndices.push(index.getX(i)); - newIndices.push(index.getX(i + 1)); - newIndices.push(index.getX(i + 2)); - } else { - newIndices.push(index.getX(i + 2)); - newIndices.push(index.getX(i + 1)); - newIndices.push(index.getX(i)); - } - if (newIndices.length / 3 !== numberOfTriangles) console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles."); - const newGeometry = geometry.clone(); - newGeometry.setIndex(newIndices); - newGeometry.clearGroups(); - return newGeometry; - } else { - console.error("THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:", drawMode); - return geometry; - } -} -function computeMorphedAttributes(object) { - if (object.geometry.isBufferGeometry !== true) { - console.error("THREE.BufferGeometryUtils: Geometry is not of type BufferGeometry."); - return null; - } - const _vA = new Vector3(); - const _vB = new Vector3(); - const _vC = new Vector3(); - const _tempA = new Vector3(); - const _tempB = new Vector3(); - const _tempC = new Vector3(); - const _morphA = new Vector3(); - const _morphB = new Vector3(); - const _morphC = new Vector3(); - function _calculateMorphedAttributeData(object2, material2, attribute, morphAttribute, morphTargetsRelative2, a2, b2, c2, modifiedAttributeArray) { - _vA.fromBufferAttribute(attribute, a2); - _vB.fromBufferAttribute(attribute, b2); - _vC.fromBufferAttribute(attribute, c2); - const morphInfluences = object2.morphTargetInfluences; - if (material2.morphTargets && morphAttribute && morphInfluences) { - _morphA.set(0, 0, 0); - _morphB.set(0, 0, 0); - _morphC.set(0, 0, 0); - for (let i2 = 0, il2 = morphAttribute.length; i2 < il2; i2++) { - const influence = morphInfluences[i2]; - const morph = morphAttribute[i2]; - if (influence === 0) continue; - _tempA.fromBufferAttribute(morph, a2); - _tempB.fromBufferAttribute(morph, b2); - _tempC.fromBufferAttribute(morph, c2); - if (morphTargetsRelative2) { - _morphA.addScaledVector(_tempA, influence); - _morphB.addScaledVector(_tempB, influence); - _morphC.addScaledVector(_tempC, influence); - } else { - _morphA.addScaledVector(_tempA.sub(_vA), influence); - _morphB.addScaledVector(_tempB.sub(_vB), influence); - _morphC.addScaledVector(_tempC.sub(_vC), influence); - } - } - _vA.add(_morphA); - _vB.add(_morphB); - _vC.add(_morphC); - } - if (object2.isSkinnedMesh) { - object2.boneTransform(a2, _vA); - object2.boneTransform(b2, _vB); - object2.boneTransform(c2, _vC); - } - modifiedAttributeArray[a2 * 3 + 0] = _vA.x; - modifiedAttributeArray[a2 * 3 + 1] = _vA.y; - modifiedAttributeArray[a2 * 3 + 2] = _vA.z; - modifiedAttributeArray[b2 * 3 + 0] = _vB.x; - modifiedAttributeArray[b2 * 3 + 1] = _vB.y; - modifiedAttributeArray[b2 * 3 + 2] = _vB.z; - modifiedAttributeArray[c2 * 3 + 0] = _vC.x; - modifiedAttributeArray[c2 * 3 + 1] = _vC.y; - modifiedAttributeArray[c2 * 3 + 2] = _vC.z; - } - const geometry = object.geometry; - const material = object.material; - let a, b, c; - const index = geometry.index; - const positionAttribute = geometry.attributes.position; - const morphPosition = geometry.morphAttributes.position; - const morphTargetsRelative = geometry.morphTargetsRelative; - const normalAttribute = geometry.attributes.normal; - const morphNormal = geometry.morphAttributes.position; - const groups = geometry.groups; - const drawRange = geometry.drawRange; - let i, j, il, jl; - let group, groupMaterial; - let start, end; - const modifiedPosition = new Float32Array(positionAttribute.count * positionAttribute.itemSize); - const modifiedNormal = new Float32Array(normalAttribute.count * normalAttribute.itemSize); - if (index !== null) if (Array.isArray(material)) for (i = 0, il = groups.length; i < il; i++) { - group = groups[i]; - groupMaterial = material[group.materialIndex]; - start = Math.max(group.start, drawRange.start); - end = Math.min(group.start + group.count, drawRange.start + drawRange.count); - for (j = start, jl = end; j < jl; j += 3) { - a = index.getX(j); - b = index.getX(j + 1); - c = index.getX(j + 2); - _calculateMorphedAttributeData(object, groupMaterial, positionAttribute, morphPosition, morphTargetsRelative, a, b, c, modifiedPosition); - _calculateMorphedAttributeData(object, groupMaterial, normalAttribute, morphNormal, morphTargetsRelative, a, b, c, modifiedNormal); - } - } - else { - start = Math.max(0, drawRange.start); - end = Math.min(index.count, drawRange.start + drawRange.count); - for (i = start, il = end; i < il; i += 3) { - a = index.getX(i); - b = index.getX(i + 1); - c = index.getX(i + 2); - _calculateMorphedAttributeData(object, material, positionAttribute, morphPosition, morphTargetsRelative, a, b, c, modifiedPosition); - _calculateMorphedAttributeData(object, material, normalAttribute, morphNormal, morphTargetsRelative, a, b, c, modifiedNormal); - } - } - else if (positionAttribute !== void 0) if (Array.isArray(material)) for (i = 0, il = groups.length; i < il; i++) { - group = groups[i]; - groupMaterial = material[group.materialIndex]; - start = Math.max(group.start, drawRange.start); - end = Math.min(group.start + group.count, drawRange.start + drawRange.count); - for (j = start, jl = end; j < jl; j += 3) { - a = j; - b = j + 1; - c = j + 2; - _calculateMorphedAttributeData(object, groupMaterial, positionAttribute, morphPosition, morphTargetsRelative, a, b, c, modifiedPosition); - _calculateMorphedAttributeData(object, groupMaterial, normalAttribute, morphNormal, morphTargetsRelative, a, b, c, modifiedNormal); - } - } - else { - start = Math.max(0, drawRange.start); - end = Math.min(positionAttribute.count, drawRange.start + drawRange.count); - for (i = start, il = end; i < il; i += 3) { - a = i; - b = i + 1; - c = i + 2; - _calculateMorphedAttributeData(object, material, positionAttribute, morphPosition, morphTargetsRelative, a, b, c, modifiedPosition); - _calculateMorphedAttributeData(object, material, normalAttribute, morphNormal, morphTargetsRelative, a, b, c, modifiedNormal); - } - } - return { - positionAttribute, - normalAttribute, - morphedPositionAttribute: new Float32BufferAttribute(modifiedPosition, 3), - morphedNormalAttribute: new Float32BufferAttribute(modifiedNormal, 3) - }; -} -function toCreasedNormals(geometry, creaseAngle = Math.PI / 3) { - const creaseDot = Math.cos(creaseAngle); - const hashMultiplier = 1.0000000001 * 100; - const verts = [ - new Vector3(), - new Vector3(), - new Vector3() - ]; - const tempVec1 = new Vector3(); - const tempVec2 = new Vector3(); - const tempNorm = new Vector3(); - const tempNorm2 = new Vector3(); - function hashVertex(v) { - return `${~~(v.x * hashMultiplier)},${~~(v.y * hashMultiplier)},${~~(v.z * hashMultiplier)}`; - } - const resultGeometry = geometry.index ? geometry.toNonIndexed() : geometry; - const posAttr = resultGeometry.attributes.position; - const vertexMap = {}; - for (let i = 0, l = posAttr.count / 3; i < l; i++) { - const i3 = 3 * i; - const a = verts[0].fromBufferAttribute(posAttr, i3 + 0); - const b = verts[1].fromBufferAttribute(posAttr, i3 + 1); - const c = verts[2].fromBufferAttribute(posAttr, i3 + 2); - tempVec1.subVectors(c, b); - tempVec2.subVectors(a, b); - const normal = new Vector3().crossVectors(tempVec1, tempVec2).normalize(); - for (let n = 0; n < 3; n++) { - const vert = verts[n]; - const hash = hashVertex(vert); - if (!(hash in vertexMap)) vertexMap[hash] = []; - vertexMap[hash].push(normal); - } - } - const normAttr = new BufferAttribute(new Float32Array(posAttr.count * 3), 3, false); - for (let i = 0, l = posAttr.count / 3; i < l; i++) { - const i3 = 3 * i; - const a = verts[0].fromBufferAttribute(posAttr, i3 + 0); - const b = verts[1].fromBufferAttribute(posAttr, i3 + 1); - const c = verts[2].fromBufferAttribute(posAttr, i3 + 2); - tempVec1.subVectors(c, b); - tempVec2.subVectors(a, b); - tempNorm.crossVectors(tempVec1, tempVec2).normalize(); - for (let n = 0; n < 3; n++) { - const vert = verts[n]; - const otherNormals = vertexMap[hashVertex(vert)]; - tempNorm2.set(0, 0, 0); - for (let k = 0, lk = otherNormals.length; k < lk; k++) { - const otherNorm = otherNormals[k]; - if (tempNorm.dot(otherNorm) > creaseDot) tempNorm2.add(otherNorm); - } - tempNorm2.normalize(); - normAttr.setXYZ(i3 + n, tempNorm2.x, tempNorm2.y, tempNorm2.z); - } - } - resultGeometry.setAttribute("normal", normAttr); - return resultGeometry; -} -//#endregion -//#region node_modules/three-stdlib/modifiers/SimplifyModifier.js -var __defProp$57 = Object.defineProperty; -var __defNormalProp$57 = (obj, key, value) => key in obj ? __defProp$57(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$57 = (obj, key, value) => { - __defNormalProp$57(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var cb = /* @__PURE__ */ new Vector3(); -var ab = /* @__PURE__ */ new Vector3(); -function pushIfUnique(array, object) { - if (array.indexOf(object) === -1) array.push(object); -} -function removeFromArray(array, object) { - const k = array.indexOf(object); - if (k > -1) array.splice(k, 1); -} -var Vertex = class { - constructor(v, id) { - __publicField$57(this, "position"); - __publicField$57(this, "id"); - __publicField$57(this, "faces"); - __publicField$57(this, "neighbors"); - __publicField$57(this, "collapseCost"); - __publicField$57(this, "collapseNeighbor"); - __publicField$57(this, "minCost", 0); - __publicField$57(this, "totalCost", 0); - __publicField$57(this, "costCount", 0); - this.position = v; - this.id = id; - this.faces = []; - this.neighbors = []; - this.collapseCost = 0; - this.collapseNeighbor = null; - } - addUniqueNeighbor(vertex) { - pushIfUnique(this.neighbors, vertex); - } - removeIfNonNeighbor(n) { - const neighbors = this.neighbors; - const faces = this.faces; - const offset = neighbors.indexOf(n); - if (offset === -1) return; - for (let i = 0; i < faces.length; i++) if (faces[i].hasVertex(n)) return; - neighbors.splice(offset, 1); - } -}; -var Triangle = class { - constructor(v1, v2, v3, a, b, c) { - __publicField$57(this, "a"); - __publicField$57(this, "b"); - __publicField$57(this, "c"); - __publicField$57(this, "v1"); - __publicField$57(this, "v2"); - __publicField$57(this, "v3"); - __publicField$57(this, "normal", new Vector3()); - this.a = a; - this.b = b; - this.c = c; - this.v1 = v1; - this.v2 = v2; - this.v3 = v3; - this.computeNormal(); - v1.faces.push(this); - v1.addUniqueNeighbor(v2); - v1.addUniqueNeighbor(v3); - v2.faces.push(this); - v2.addUniqueNeighbor(v1); - v2.addUniqueNeighbor(v3); - v3.faces.push(this); - v3.addUniqueNeighbor(v1); - v3.addUniqueNeighbor(v2); - } - computeNormal() { - const vA = this.v1.position; - const vB = this.v2.position; - const vC = this.v3.position; - cb.subVectors(vC, vB); - ab.subVectors(vA, vB); - cb.cross(ab).normalize(); - this.normal.copy(cb); - } - hasVertex(v) { - return v === this.v1 || v === this.v2 || v === this.v3; - } - replaceVertex(oldv, newv) { - if (oldv === this.v1) this.v1 = newv; - else if (oldv === this.v2) this.v2 = newv; - else if (oldv === this.v3) this.v3 = newv; - removeFromArray(oldv.faces, this); - newv.faces.push(this); - oldv.removeIfNonNeighbor(this.v1); - this.v1.removeIfNonNeighbor(oldv); - oldv.removeIfNonNeighbor(this.v2); - this.v2.removeIfNonNeighbor(oldv); - oldv.removeIfNonNeighbor(this.v3); - this.v3.removeIfNonNeighbor(oldv); - this.v1.addUniqueNeighbor(this.v2); - this.v1.addUniqueNeighbor(this.v3); - this.v2.addUniqueNeighbor(this.v1); - this.v2.addUniqueNeighbor(this.v3); - this.v3.addUniqueNeighbor(this.v1); - this.v3.addUniqueNeighbor(this.v2); - this.computeNormal(); - } -}; -var SimplifyModifier = class { - constructor() { - __publicField$57(this, "computeEdgeCollapseCost", (u, v) => { - const edgelength = v.position.distanceTo(u.position); - let curvature = 0; - const sideFaces = []; - let i, il = u.faces.length, face, sideFace; - for (i = 0; i < il; i++) { - face = u.faces[i]; - if (face.hasVertex(v)) sideFaces.push(face); - } - for (i = 0; i < il; i++) { - let minCurvature = 1; - face = u.faces[i]; - for (let j = 0; j < sideFaces.length; j++) { - sideFace = sideFaces[j]; - const dotProd = face.normal.dot(sideFace.normal); - minCurvature = Math.min(minCurvature, (1.001 - dotProd) / 2); - } - curvature = Math.max(curvature, minCurvature); - } - const borders = 0; - if (sideFaces.length < 2) curvature = 1; - return edgelength * curvature + borders; - }); - __publicField$57(this, "computeEdgeCostAtVertex", (v) => { - if (v.neighbors.length === 0) { - v.collapseNeighbor = null; - v.collapseCost = -.01; - return; - } - v.collapseCost = 1e5; - v.collapseNeighbor = null; - for (let i = 0; i < v.neighbors.length; i++) { - const collapseCost = this.computeEdgeCollapseCost(v, v.neighbors[i]); - if (!v.collapseNeighbor) { - v.collapseNeighbor = v.neighbors[i]; - v.collapseCost = collapseCost; - v.minCost = collapseCost; - v.totalCost = 0; - v.costCount = 0; - } - v.costCount++; - v.totalCost += collapseCost; - if (collapseCost < v.minCost) { - v.collapseNeighbor = v.neighbors[i]; - v.minCost = collapseCost; - } - } - v.collapseCost = v.totalCost / v.costCount; - }); - __publicField$57(this, "removeFace", (f, faces) => { - removeFromArray(faces, f); - if (f.v1) removeFromArray(f.v1.faces, f); - if (f.v2) removeFromArray(f.v2.faces, f); - if (f.v3) removeFromArray(f.v3.faces, f); - const vs = [ - f.v1, - f.v2, - f.v3 - ]; - let v1, v2; - for (let i = 0; i < 3; i++) { - v1 = vs[i]; - v2 = vs[(i + 1) % 3]; - if (!v1 || !v2) continue; - v1.removeIfNonNeighbor(v2); - v2.removeIfNonNeighbor(v1); - } - }); - __publicField$57(this, "collapse", (vertices, faces, u, v) => { - if (!v) { - this.removeVertex(u, vertices); - return; - } - let i; - const tmpVertices = []; - for (i = 0; i < u.neighbors.length; i++) tmpVertices.push(u.neighbors[i]); - for (i = u.faces.length - 1; i >= 0; i--) if (u.faces[i].hasVertex(v)) this.removeFace(u.faces[i], faces); - for (i = u.faces.length - 1; i >= 0; i--) u.faces[i].replaceVertex(u, v); - this.removeVertex(u, vertices); - for (i = 0; i < tmpVertices.length; i++) this.computeEdgeCostAtVertex(tmpVertices[i]); - }); - __publicField$57(this, "minimumCostEdge", (vertices) => { - let least = vertices[0]; - for (let i = 0; i < vertices.length; i++) if (vertices[i].collapseCost < least.collapseCost) least = vertices[i]; - return least; - }); - __publicField$57(this, "modify", (geometry, count) => { - geometry = geometry.clone(); - const attributes = geometry.attributes; - for (let name in attributes) if (name !== "position") geometry.deleteAttribute(name); - geometry = mergeVertices(geometry); - const vertices = []; - const faces = []; - const positionAttribute = geometry.getAttribute("position"); - for (let i = 0; i < positionAttribute.count; i++) { - const vertex = new Vertex(new Vector3().fromBufferAttribute(positionAttribute, i), i); - vertices.push(vertex); - } - const geomIndex = geometry.getIndex(); - if (geomIndex !== null) for (let i = 0; i < geomIndex.count; i += 3) { - const a = geomIndex.getX(i); - const b = geomIndex.getX(i + 1); - const c = geomIndex.getX(i + 2); - const triangle = new Triangle(vertices[a], vertices[b], vertices[c], a, b, c); - faces.push(triangle); - } - else for (let i = 0; i < positionAttribute.count; i += 3) { - const a = i; - const b = i + 1; - const c = i + 2; - const triangle = new Triangle(vertices[a], vertices[b], vertices[c], a, b, c); - faces.push(triangle); - } - for (let i = 0, il = vertices.length; i < il; i++) this.computeEdgeCostAtVertex(vertices[i]); - let nextVertex; - let z = count; - while (z--) { - nextVertex = this.minimumCostEdge(vertices); - if (!nextVertex) { - console.log("THREE.SimplifyModifier: No next vertex"); - break; - } else this.collapse(vertices, faces, nextVertex, nextVertex.collapseNeighbor); - } - const simplifiedGeometry = new BufferGeometry(); - const position = []; - let index = []; - for (let i = 0; i < vertices.length; i++) { - const vertex = vertices[i].position; - position.push(vertex.x, vertex.y, vertex.z); - } - for (let i = 0; i < faces.length; i++) { - const face = faces[i]; - const a = vertices.indexOf(face.v1); - const b = vertices.indexOf(face.v2); - const c = vertices.indexOf(face.v3); - index.push(a, b, c); - } - simplifiedGeometry.setAttribute("position", new Float32BufferAttribute(position, 3)); - simplifiedGeometry.setIndex(index); - return simplifiedGeometry; - }); - } - removeVertex(v, vertices) { - console.assert(v.faces.length === 0); - while (v.neighbors.length) removeFromArray(v.neighbors.pop().neighbors, v); - removeFromArray(vertices, v); - } -}; -//#endregion -//#region node_modules/three-stdlib/modifiers/EdgeSplitModifier.js -var __defProp$56 = Object.defineProperty; -var __defNormalProp$56 = (obj, key, value) => key in obj ? __defProp$56(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$56 = (obj, key, value) => { - __defNormalProp$56(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var EdgeSplitModifier = class { - constructor() { - __publicField$56(this, "A", new Vector3()); - __publicField$56(this, "B", new Vector3()); - __publicField$56(this, "C", new Vector3()); - __publicField$56(this, "positions", []); - __publicField$56(this, "normals", new Float32Array()); - __publicField$56(this, "indexes", []); - __publicField$56(this, "pointToIndexMap", []); - __publicField$56(this, "splitIndexes", []); - __publicField$56(this, "oldNormals", []); - __publicField$56(this, "computeNormals", () => { - this.normals = new Float32Array(this.indexes.length * 3); - for (let i = 0; i < this.indexes.length; i += 3) { - let index = this.indexes[i]; - this.A.set(this.positions[3 * index], this.positions[3 * index + 1], this.positions[3 * index + 2]); - index = this.indexes[i + 1]; - this.B.set(this.positions[3 * index], this.positions[3 * index + 1], this.positions[3 * index + 2]); - index = this.indexes[i + 2]; - this.C.set(this.positions[3 * index], this.positions[3 * index + 1], this.positions[3 * index + 2]); - this.C.sub(this.B); - this.A.sub(this.B); - const normal = this.C.cross(this.A).normalize(); - for (let j = 0; j < 3; j++) { - this.normals[3 * (i + j)] = normal.x; - this.normals[3 * (i + j) + 1] = normal.y; - this.normals[3 * (i + j) + 2] = normal.z; - } - } - }); - __publicField$56(this, "mapPositionsToIndexes", () => { - this.pointToIndexMap = Array(this.positions.length / 3); - for (let i = 0; i < this.indexes.length; i++) { - const index = this.indexes[i]; - if (this.pointToIndexMap[index] == null) this.pointToIndexMap[index] = []; - this.pointToIndexMap[index].push(i); - } - }); - __publicField$56(this, "edgeSplitToGroups", (indexes, cutOff, firstIndex) => { - this.A.set(this.normals[3 * firstIndex], this.normals[3 * firstIndex + 1], this.normals[3 * firstIndex + 2]).normalize(); - const result = { - splitGroup: [], - currentGroup: [firstIndex] - }; - for (let j of indexes) if (j !== firstIndex) { - this.B.set(this.normals[3 * j], this.normals[3 * j + 1], this.normals[3 * j + 2]).normalize(); - if (this.B.dot(this.A) < cutOff) result.splitGroup.push(j); - else result.currentGroup.push(j); - } - return result; - }); - __publicField$56(this, "edgeSplit", (indexes, cutOff, original = null) => { - if (indexes.length === 0) return; - const groupResults = []; - for (let index of indexes) groupResults.push(this.edgeSplitToGroups(indexes, cutOff, index)); - let result = groupResults[0]; - for (let groupResult of groupResults) if (groupResult.currentGroup.length > result.currentGroup.length) result = groupResult; - if (original != null) this.splitIndexes.push({ - original, - indexes: result.currentGroup - }); - if (result.splitGroup.length) this.edgeSplit(result.splitGroup, cutOff, original || result.currentGroup[0]); - }); - __publicField$56(this, "modify", (geometry, cutOffAngle, tryKeepNormals = true) => { - let hadNormals = false; - if (geometry.attributes.normal) { - hadNormals = true; - geometry = geometry.clone(); - if (tryKeepNormals === true && geometry.index !== null) this.oldNormals = geometry.attributes.normal.array; - geometry.deleteAttribute("normal"); - } - if (geometry.index == null) { - if (BufferGeometryUtils_exports === void 0) throw "THREE.EdgeSplitModifier relies on BufferGeometryUtils"; - geometry = mergeVertices(geometry); - } - this.indexes = geometry.index.array; - this.positions = geometry.getAttribute("position").array; - this.computeNormals(); - this.mapPositionsToIndexes(); - this.splitIndexes = []; - for (let vertexIndexes of this.pointToIndexMap) this.edgeSplit(vertexIndexes, Math.cos(cutOffAngle) - .001); - const newAttributes = {}; - for (let name of Object.keys(geometry.attributes)) { - const oldAttribute = geometry.attributes[name]; - const newArray = new oldAttribute.array.constructor((this.indexes.length + this.splitIndexes.length) * oldAttribute.itemSize); - newArray.set(oldAttribute.array); - newAttributes[name] = new BufferAttribute(newArray, oldAttribute.itemSize, oldAttribute.normalized); - } - const newIndexes = new Uint32Array(this.indexes.length); - newIndexes.set(this.indexes); - for (let i = 0; i < this.splitIndexes.length; i++) { - const split = this.splitIndexes[i]; - const index = this.indexes[split.original]; - for (let attribute of Object.values(newAttributes)) for (let j = 0; j < attribute.itemSize; j++) attribute.array[(this.indexes.length + i) * attribute.itemSize + j] = attribute.array[index * attribute.itemSize + j]; - for (let j of split.indexes) newIndexes[j] = this.indexes.length + i; - } - geometry = new BufferGeometry(); - geometry.setIndex(new BufferAttribute(newIndexes, 1)); - for (let name of Object.keys(newAttributes)) geometry.setAttribute(name, newAttributes[name]); - if (hadNormals) { - geometry.computeVertexNormals(); - if (this.oldNormals !== null) { - const changedNormals = new Array(this.oldNormals.length / 3).fill(false); - for (let splitData of this.splitIndexes) changedNormals[splitData.original] = true; - for (let i = 0; i < changedNormals.length; i++) if (changedNormals[i] === false) for (let j = 0; j < 3; j++) geometry.attributes.normal.array[3 * i + j] = this.oldNormals[3 * i + j]; - } - } - return geometry; - }); - } -}; -//#endregion -//#region node_modules/three-stdlib/modifiers/TessellateModifier.js -var __defProp$55 = Object.defineProperty; -var __defNormalProp$55 = (obj, key, value) => key in obj ? __defProp$55(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$55 = (obj, key, value) => { - __defNormalProp$55(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var TessellateModifier = class { - constructor(maxEdgeLength = .1, maxIterations = 6) { - __publicField$55(this, "maxEdgeLength"); - __publicField$55(this, "maxIterations"); - __publicField$55(this, "modify", (geometry) => { - if (geometry.index !== null) geometry = geometry.toNonIndexed(); - const maxIterations = this.maxIterations; - const maxEdgeLengthSquared = this.maxEdgeLength * this.maxEdgeLength; - const va = new Vector3(); - const vb = new Vector3(); - const vc = new Vector3(); - const vm = new Vector3(); - const vs = [ - va, - vb, - vc, - vm - ]; - const na = new Vector3(); - const nb = new Vector3(); - const nc = new Vector3(); - const nm = new Vector3(); - const ns = [ - na, - nb, - nc, - nm - ]; - const ca = new Color(); - const cb = new Color(); - const cc = new Color(); - const cm = new Color(); - const cs = [ - ca, - cb, - cc, - cm - ]; - const ua = new Vector2(); - const ub = new Vector2(); - const uc = new Vector2(); - const um = new Vector2(); - const us = [ - ua, - ub, - uc, - um - ]; - const u2a = new Vector2(); - const u2b = new Vector2(); - const u2c = new Vector2(); - const u2m = new Vector2(); - const u2s = [ - u2a, - u2b, - u2c, - u2m - ]; - const attributes = geometry.attributes; - const hasNormals = attributes.normal !== void 0; - const hasColors = attributes.color !== void 0; - const hasUVs = attributes.uv !== void 0; - const hasUV1s = attributes[UV1] !== void 0; - let positions = attributes.position.array; - let normals = hasNormals ? attributes.normal.array : null; - let colors = hasColors ? attributes.color.array : null; - let uvs = hasUVs ? attributes.uv.array : null; - let uv1s = hasUV1s ? attributes.uv1.array : null; - let positions2 = positions; - let normals2 = normals; - let colors2 = colors; - let uvs2 = uvs; - let uv1s2 = uv1s; - let iteration = 0; - let tessellating = true; - function addTriangle(a, b, c) { - const v1 = vs[a]; - const v2 = vs[b]; - const v3 = vs[c]; - positions2.push(v1.x, v1.y, v1.z); - positions2.push(v2.x, v2.y, v2.z); - positions2.push(v3.x, v3.y, v3.z); - if (hasNormals) { - const n1 = ns[a]; - const n2 = ns[b]; - const n3 = ns[c]; - normals2.push(n1.x, n1.y, n1.z); - normals2.push(n2.x, n2.y, n2.z); - normals2.push(n3.x, n3.y, n3.z); - } - if (hasColors) { - const c1 = cs[a]; - const c2 = cs[b]; - const c3 = cs[c]; - colors2.push(c1.r, c1.g, c1.b); - colors2.push(c2.r, c2.g, c2.b); - colors2.push(c3.r, c3.g, c3.b); - } - if (hasUVs) { - const u1 = us[a]; - const u2 = us[b]; - const u3 = us[c]; - uvs2.push(u1.x, u1.y); - uvs2.push(u2.x, u2.y); - uvs2.push(u3.x, u3.y); - } - if (hasUV1s) { - const u21 = u2s[a]; - const u22 = u2s[b]; - const u23 = u2s[c]; - uv1s2.push(u21.x, u21.y); - uv1s2.push(u22.x, u22.y); - uv1s2.push(u23.x, u23.y); - } - } - while (tessellating && iteration < maxIterations) { - iteration++; - tessellating = false; - positions = positions2; - positions2 = []; - if (hasNormals) { - normals = normals2; - normals2 = []; - } - if (hasColors) { - colors = colors2; - colors2 = []; - } - if (hasUVs) { - uvs = uvs2; - uvs2 = []; - } - if (hasUV1s) { - uv1s = uv1s2; - uv1s2 = []; - } - for (let i = 0, i2 = 0, il = positions.length; i < il; i += 9, i2 += 6) { - va.fromArray(positions, i + 0); - vb.fromArray(positions, i + 3); - vc.fromArray(positions, i + 6); - if (hasNormals && normals) { - na.fromArray(normals, i + 0); - nb.fromArray(normals, i + 3); - nc.fromArray(normals, i + 6); - } - if (hasColors && colors) { - ca.fromArray(colors, i + 0); - cb.fromArray(colors, i + 3); - cc.fromArray(colors, i + 6); - } - if (hasUVs && uvs) { - ua.fromArray(uvs, i2 + 0); - ub.fromArray(uvs, i2 + 2); - uc.fromArray(uvs, i2 + 4); - } - if (hasUV1s && uv1s) { - u2a.fromArray(uv1s, i2 + 0); - u2b.fromArray(uv1s, i2 + 2); - u2c.fromArray(uv1s, i2 + 4); - } - const dab = va.distanceToSquared(vb); - const dbc = vb.distanceToSquared(vc); - const dac = va.distanceToSquared(vc); - if (dab > maxEdgeLengthSquared || dbc > maxEdgeLengthSquared || dac > maxEdgeLengthSquared) { - tessellating = true; - if (dab >= dbc && dab >= dac) { - vm.lerpVectors(va, vb, .5); - if (hasNormals) nm.lerpVectors(na, nb, .5); - if (hasColors) cm.lerpColors(ca, cb, .5); - if (hasUVs) um.lerpVectors(ua, ub, .5); - if (hasUV1s) u2m.lerpVectors(u2a, u2b, .5); - addTriangle(0, 3, 2); - addTriangle(3, 1, 2); - } else if (dbc >= dab && dbc >= dac) { - vm.lerpVectors(vb, vc, .5); - if (hasNormals) nm.lerpVectors(nb, nc, .5); - if (hasColors) cm.lerpColors(cb, cc, .5); - if (hasUVs) um.lerpVectors(ub, uc, .5); - if (hasUV1s) u2m.lerpVectors(u2b, u2c, .5); - addTriangle(0, 1, 3); - addTriangle(3, 2, 0); - } else { - vm.lerpVectors(va, vc, .5); - if (hasNormals) nm.lerpVectors(na, nc, .5); - if (hasColors) cm.lerpColors(ca, cc, .5); - if (hasUVs) um.lerpVectors(ua, uc, .5); - if (hasUV1s) u2m.lerpVectors(u2a, u2c, .5); - addTriangle(0, 1, 3); - addTriangle(3, 1, 2); - } - } else addTriangle(0, 1, 2); - } - } - const geometry2 = new BufferGeometry(); - geometry2.setAttribute("position", new Float32BufferAttribute(positions2, 3)); - if (hasNormals) geometry2.setAttribute("normal", new Float32BufferAttribute(normals2, 3)); - if (hasColors) geometry2.setAttribute("color", new Float32BufferAttribute(colors2, 3)); - if (hasUVs) geometry2.setAttribute("uv", new Float32BufferAttribute(uvs2, 2)); - if (hasUV1s) geometry2.setAttribute(UV1, new Float32BufferAttribute(uv1s2, 2)); - return geometry2; - }); - this.maxEdgeLength = maxEdgeLength; - this.maxIterations = maxIterations; - } -}; -//#endregion -//#region node_modules/three-stdlib/exporters/GLTFExporter.js -var __defProp$54 = Object.defineProperty; -var __defNormalProp$54 = (obj, key, value) => key in obj ? __defProp$54(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$54 = (obj, key, value) => { - __defNormalProp$54(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -async function readAsDataURL(blob) { - const buffer = await blob.arrayBuffer(); - const data = btoa(String.fromCharCode(...new Uint8Array(buffer))); - return `data:${blob.type || ""};base64,${data}`; -} -var _renderer; -var fullscreenQuadGeometry; -var fullscreenQuadMaterial; -var fullscreenQuad; -function decompress(texture, maxTextureSize = Infinity, renderer = null) { - if (!fullscreenQuadGeometry) fullscreenQuadGeometry = new PlaneGeometry(2, 2, 1, 1); - if (!fullscreenQuadMaterial) fullscreenQuadMaterial = new ShaderMaterial({ - uniforms: { blitTexture: new Uniform(texture) }, - vertexShader: ` - varying vec2 vUv; - void main(){ - vUv = uv; - gl_Position = vec4(position.xy * 1.0,0.,.999999); - } - `, - fragmentShader: ` - uniform sampler2D blitTexture; - varying vec2 vUv; - - void main(){ - gl_FragColor = vec4(vUv.xy, 0, 1); - - #ifdef IS_SRGB - gl_FragColor = LinearTosRGB( texture2D( blitTexture, vUv) ); - #else - gl_FragColor = texture2D( blitTexture, vUv); - #endif - } - ` - }); - fullscreenQuadMaterial.uniforms.blitTexture.value = texture; - fullscreenQuadMaterial.defines.IS_SRGB = "colorSpace" in texture ? texture.colorSpace === "srgb" : texture.encoding === 3001; - fullscreenQuadMaterial.needsUpdate = true; - if (!fullscreenQuad) { - fullscreenQuad = new Mesh(fullscreenQuadGeometry, fullscreenQuadMaterial); - fullscreenQuad.frustrumCulled = false; - } - const _camera = new PerspectiveCamera(); - const _scene = new Scene(); - _scene.add(fullscreenQuad); - if (!renderer) renderer = _renderer = new WebGLRenderer({ antialias: false }); - renderer.setSize(Math.min(texture.image.width, maxTextureSize), Math.min(texture.image.height, maxTextureSize)); - renderer.clear(); - renderer.render(_scene, _camera); - const readableTexture = new Texture(renderer.domElement); - readableTexture.minFilter = texture.minFilter; - readableTexture.magFilter = texture.magFilter; - readableTexture.wrapS = texture.wrapS; - readableTexture.wrapT = texture.wrapT; - readableTexture.name = texture.name; - if (_renderer) { - _renderer.dispose(); - _renderer = null; - } - return readableTexture; -} -var KHR_mesh_quantization_ExtraAttrTypes = { - POSITION: [ - "byte", - "byte normalized", - "unsigned byte", - "unsigned byte normalized", - "short", - "short normalized", - "unsigned short", - "unsigned short normalized" - ], - NORMAL: ["byte normalized", "short normalized"], - TANGENT: ["byte normalized", "short normalized"], - TEXCOORD: [ - "byte", - "byte normalized", - "unsigned byte", - "short", - "short normalized", - "unsigned short" - ] -}; -var GLTFExporter = /* @__PURE__ */ (() => { - class GLTFExporter2 { - constructor() { - this.pluginCallbacks = []; - this.register(function(writer) { - return new GLTFLightExtension(writer); - }); - this.register(function(writer) { - return new GLTFMaterialsUnlitExtension$1(writer); - }); - this.register(function(writer) { - return new GLTFMaterialsTransmissionExtension$1(writer); - }); - this.register(function(writer) { - return new GLTFMaterialsVolumeExtension$1(writer); - }); - this.register(function(writer) { - return new GLTFMaterialsIorExtension$1(writer); - }); - this.register(function(writer) { - return new GLTFMaterialsSpecularExtension$1(writer); - }); - this.register(function(writer) { - return new GLTFMaterialsClearcoatExtension$1(writer); - }); - this.register(function(writer) { - return new GLTFMaterialsIridescenceExtension$1(writer); - }); - this.register(function(writer) { - return new GLTFMaterialsSheenExtension$1(writer); - }); - this.register(function(writer) { - return new GLTFMaterialsAnisotropyExtension$1(writer); - }); - this.register(function(writer) { - return new GLTFMaterialsEmissiveStrengthExtension$1(writer); - }); - } - register(callback) { - if (this.pluginCallbacks.indexOf(callback) === -1) this.pluginCallbacks.push(callback); - return this; - } - unregister(callback) { - if (this.pluginCallbacks.indexOf(callback) !== -1) this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(callback), 1); - return this; - } - /** - * Parse scenes and generate GLTF output - * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes - * @param {Function} onDone Callback on completed - * @param {Function} onError Callback on errors - * @param {Object} options options - */ - parse(input, onDone, onError, options) { - const writer = new GLTFWriter(); - const plugins = []; - for (let i = 0, il = this.pluginCallbacks.length; i < il; i++) plugins.push(this.pluginCallbacks[i](writer)); - writer.setPlugins(plugins); - writer.write(input, onDone, options).catch(onError); - } - parseAsync(input, options) { - const scope = this; - return new Promise(function(resolve, reject) { - scope.parse(input, resolve, reject, options); - }); - } - } - /** - * Static utility functions - */ - __publicField$54(GLTFExporter2, "Utils", { - insertKeyframe: function(track, time) { - const tolerance = .001; - const valueSize = track.getValueSize(); - const times = new track.TimeBufferType(track.times.length + 1); - const values = new track.ValueBufferType(track.values.length + valueSize); - const interpolant = track.createInterpolant(new track.ValueBufferType(valueSize)); - let index; - if (track.times.length === 0) { - times[0] = time; - for (let i = 0; i < valueSize; i++) values[i] = 0; - index = 0; - } else if (time < track.times[0]) { - if (Math.abs(track.times[0] - time) < tolerance) return 0; - times[0] = time; - times.set(track.times, 1); - values.set(interpolant.evaluate(time), 0); - values.set(track.values, valueSize); - index = 0; - } else if (time > track.times[track.times.length - 1]) { - if (Math.abs(track.times[track.times.length - 1] - time) < tolerance) return track.times.length - 1; - times[times.length - 1] = time; - times.set(track.times, 0); - values.set(track.values, 0); - values.set(interpolant.evaluate(time), track.values.length); - index = times.length - 1; - } else for (let i = 0; i < track.times.length; i++) { - if (Math.abs(track.times[i] - time) < tolerance) return i; - if (track.times[i] < time && track.times[i + 1] > time) { - times.set(track.times.slice(0, i + 1), 0); - times[i + 1] = time; - times.set(track.times.slice(i + 1), i + 2); - values.set(track.values.slice(0, (i + 1) * valueSize), 0); - values.set(interpolant.evaluate(time), (i + 1) * valueSize); - values.set(track.values.slice((i + 1) * valueSize), (i + 2) * valueSize); - index = i + 1; - break; - } - } - track.times = times; - track.values = values; - return index; - }, - mergeMorphTargetTracks: function(clip, root) { - const tracks = []; - const mergedTracks = {}; - const sourceTracks = clip.tracks; - for (let i = 0; i < sourceTracks.length; ++i) { - let sourceTrack = sourceTracks[i]; - const sourceTrackBinding = PropertyBinding.parseTrackName(sourceTrack.name); - const sourceTrackNode = PropertyBinding.findNode(root, sourceTrackBinding.nodeName); - if (sourceTrackBinding.propertyName !== "morphTargetInfluences" || sourceTrackBinding.propertyIndex === void 0) { - tracks.push(sourceTrack); - continue; - } - if (sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodDiscrete && sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodLinear) { - if (sourceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline) throw new Error("THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation."); - console.warn("THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead."); - sourceTrack = sourceTrack.clone(); - sourceTrack.setInterpolation(InterpolateLinear); - } - const targetCount = sourceTrackNode.morphTargetInfluences.length; - const targetIndex = sourceTrackNode.morphTargetDictionary[sourceTrackBinding.propertyIndex]; - if (targetIndex === void 0) throw new Error("THREE.GLTFExporter: Morph target name not found: " + sourceTrackBinding.propertyIndex); - let mergedTrack; - if (mergedTracks[sourceTrackNode.uuid] === void 0) { - mergedTrack = sourceTrack.clone(); - const values = new mergedTrack.ValueBufferType(targetCount * mergedTrack.times.length); - for (let j = 0; j < mergedTrack.times.length; j++) values[j * targetCount + targetIndex] = mergedTrack.values[j]; - mergedTrack.name = (sourceTrackBinding.nodeName || "") + ".morphTargetInfluences"; - mergedTrack.values = values; - mergedTracks[sourceTrackNode.uuid] = mergedTrack; - tracks.push(mergedTrack); - continue; - } - const sourceInterpolant = sourceTrack.createInterpolant(new sourceTrack.ValueBufferType(1)); - mergedTrack = mergedTracks[sourceTrackNode.uuid]; - for (let j = 0; j < mergedTrack.times.length; j++) mergedTrack.values[j * targetCount + targetIndex] = sourceInterpolant.evaluate(mergedTrack.times[j]); - for (let j = 0; j < sourceTrack.times.length; j++) { - const keyframeIndex = this.insertKeyframe(mergedTrack, sourceTrack.times[j]); - mergedTrack.values[keyframeIndex * targetCount + targetIndex] = sourceTrack.values[j]; - } - } - clip.tracks = tracks; - return clip; - } - }); - return GLTFExporter2; -})(); -var WEBGL_CONSTANTS$1 = { - POINTS: 0, - LINES: 1, - LINE_LOOP: 2, - LINE_STRIP: 3, - TRIANGLES: 4, - TRIANGLE_STRIP: 5, - TRIANGLE_FAN: 6, - BYTE: 5120, - UNSIGNED_BYTE: 5121, - SHORT: 5122, - UNSIGNED_SHORT: 5123, - INT: 5124, - UNSIGNED_INT: 5125, - FLOAT: 5126, - ARRAY_BUFFER: 34962, - ELEMENT_ARRAY_BUFFER: 34963, - NEAREST: 9728, - LINEAR: 9729, - NEAREST_MIPMAP_NEAREST: 9984, - LINEAR_MIPMAP_NEAREST: 9985, - NEAREST_MIPMAP_LINEAR: 9986, - LINEAR_MIPMAP_LINEAR: 9987, - CLAMP_TO_EDGE: 33071, - MIRRORED_REPEAT: 33648, - REPEAT: 10497 -}; -var KHR_MESH_QUANTIZATION = "KHR_mesh_quantization"; -var THREE_TO_WEBGL = {}; -THREE_TO_WEBGL[NearestFilter] = WEBGL_CONSTANTS$1.NEAREST; -THREE_TO_WEBGL[NearestMipmapNearestFilter] = WEBGL_CONSTANTS$1.NEAREST_MIPMAP_NEAREST; -THREE_TO_WEBGL[NearestMipmapLinearFilter] = WEBGL_CONSTANTS$1.NEAREST_MIPMAP_LINEAR; -THREE_TO_WEBGL[LinearFilter] = WEBGL_CONSTANTS$1.LINEAR; -THREE_TO_WEBGL[LinearMipmapNearestFilter] = WEBGL_CONSTANTS$1.LINEAR_MIPMAP_NEAREST; -THREE_TO_WEBGL[LinearMipmapLinearFilter] = WEBGL_CONSTANTS$1.LINEAR_MIPMAP_LINEAR; -THREE_TO_WEBGL[ClampToEdgeWrapping] = WEBGL_CONSTANTS$1.CLAMP_TO_EDGE; -THREE_TO_WEBGL[RepeatWrapping] = WEBGL_CONSTANTS$1.REPEAT; -THREE_TO_WEBGL[MirroredRepeatWrapping] = WEBGL_CONSTANTS$1.MIRRORED_REPEAT; -var PATH_PROPERTIES$1 = { - scale: "scale", - position: "translation", - quaternion: "rotation", - morphTargetInfluences: "weights" -}; -var DEFAULT_SPECULAR_COLOR = /* @__PURE__ */ new Color(); -var GLB_HEADER_BYTES = 12; -var GLB_HEADER_MAGIC = 1179937895; -var GLB_VERSION = 2; -var GLB_CHUNK_PREFIX_BYTES = 8; -var GLB_CHUNK_TYPE_JSON = 1313821514; -var GLB_CHUNK_TYPE_BIN = 5130562; -function equalArray(array1, array2) { - return array1.length === array2.length && array1.every(function(element, index) { - return element === array2[index]; - }); -} -function stringToArrayBuffer(text) { - return new TextEncoder().encode(text).buffer; -} -function isIdentityMatrix(matrix) { - return equalArray(matrix.elements, [ - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1, - 0, - 0, - 0, - 0, - 1 - ]); -} -function getMinMax(attribute, start, count) { - const output = { - min: new Array(attribute.itemSize).fill(Number.POSITIVE_INFINITY), - max: new Array(attribute.itemSize).fill(Number.NEGATIVE_INFINITY) - }; - for (let i = start; i < start + count; i++) for (let a = 0; a < attribute.itemSize; a++) { - let value; - if (attribute.itemSize > 4) value = attribute.array[i * attribute.itemSize + a]; - else { - if (a === 0) value = attribute.getX(i); - else if (a === 1) value = attribute.getY(i); - else if (a === 2) value = attribute.getZ(i); - else if (a === 3) value = attribute.getW(i); - if (attribute.normalized === true) value = MathUtils.normalize(value, attribute.array); - } - output.min[a] = Math.min(output.min[a], value); - output.max[a] = Math.max(output.max[a], value); - } - return output; -} -function getPaddedBufferSize(bufferSize) { - return Math.ceil(bufferSize / 4) * 4; -} -function getPaddedArrayBuffer(arrayBuffer, paddingByte = 0) { - const paddedLength = getPaddedBufferSize(arrayBuffer.byteLength); - if (paddedLength !== arrayBuffer.byteLength) { - const array = new Uint8Array(paddedLength); - array.set(new Uint8Array(arrayBuffer)); - if (paddingByte !== 0) for (let i = arrayBuffer.byteLength; i < paddedLength; i++) array[i] = paddingByte; - return array.buffer; - } - return arrayBuffer; -} -function getCanvas() { - if (typeof document === "undefined" && typeof OffscreenCanvas !== "undefined") return new OffscreenCanvas(1, 1); - return document.createElement("canvas"); -} -function getToBlobPromise(canvas, mimeType) { - if (canvas.toBlob !== void 0) return new Promise((resolve) => canvas.toBlob(resolve, mimeType)); - let quality; - if (mimeType === "image/jpeg") quality = .92; - else if (mimeType === "image/webp") quality = .8; - return canvas.convertToBlob({ - type: mimeType, - quality - }); -} -var GLTFWriter = class { - constructor() { - this.plugins = []; - this.options = {}; - this.pending = []; - this.buffers = []; - this.byteOffset = 0; - this.buffers = []; - this.nodeMap = /* @__PURE__ */ new Map(); - this.skins = []; - this.extensionsUsed = {}; - this.extensionsRequired = {}; - this.uids = /* @__PURE__ */ new Map(); - this.uid = 0; - this.json = { asset: { - version: "2.0", - generator: "THREE.GLTFExporter" - } }; - this.cache = { - meshes: /* @__PURE__ */ new Map(), - attributes: /* @__PURE__ */ new Map(), - attributesNormalized: /* @__PURE__ */ new Map(), - materials: /* @__PURE__ */ new Map(), - textures: /* @__PURE__ */ new Map(), - images: /* @__PURE__ */ new Map() - }; - } - setPlugins(plugins) { - this.plugins = plugins; - } - /** - * Parse scenes and generate GLTF output - * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes - * @param {Function} onDone Callback on completed - * @param {Object} options options - */ - async write(input, onDone, options = {}) { - this.options = Object.assign({ - binary: false, - trs: false, - onlyVisible: true, - maxTextureSize: Infinity, - animations: [], - includeCustomExtensions: false - }, options); - if (this.options.animations.length > 0) this.options.trs = true; - this.processInput(input); - await Promise.all(this.pending); - const writer = this; - const buffers = writer.buffers; - const json = writer.json; - options = writer.options; - const extensionsUsed = writer.extensionsUsed; - const extensionsRequired = writer.extensionsRequired; - const blob = new Blob(buffers, { type: "application/octet-stream" }); - const extensionsUsedList = Object.keys(extensionsUsed); - const extensionsRequiredList = Object.keys(extensionsRequired); - if (extensionsUsedList.length > 0) json.extensionsUsed = extensionsUsedList; - if (extensionsRequiredList.length > 0) json.extensionsRequired = extensionsRequiredList; - if (json.buffers && json.buffers.length > 0) json.buffers[0].byteLength = blob.size; - if (options.binary === true) blob.arrayBuffer().then((result) => { - const binaryChunk = getPaddedArrayBuffer(result); - const binaryChunkPrefix = /* @__PURE__ */ new DataView(/* @__PURE__ */ new ArrayBuffer(GLB_CHUNK_PREFIX_BYTES)); - binaryChunkPrefix.setUint32(0, binaryChunk.byteLength, true); - binaryChunkPrefix.setUint32(4, GLB_CHUNK_TYPE_BIN, true); - const jsonChunk = getPaddedArrayBuffer(stringToArrayBuffer(JSON.stringify(json)), 32); - const jsonChunkPrefix = /* @__PURE__ */ new DataView(/* @__PURE__ */ new ArrayBuffer(GLB_CHUNK_PREFIX_BYTES)); - jsonChunkPrefix.setUint32(0, jsonChunk.byteLength, true); - jsonChunkPrefix.setUint32(4, GLB_CHUNK_TYPE_JSON, true); - const header = /* @__PURE__ */ new ArrayBuffer(GLB_HEADER_BYTES); - const headerView = new DataView(header); - headerView.setUint32(0, GLB_HEADER_MAGIC, true); - headerView.setUint32(4, GLB_VERSION, true); - const totalByteLength = GLB_HEADER_BYTES + jsonChunkPrefix.byteLength + jsonChunk.byteLength + binaryChunkPrefix.byteLength + binaryChunk.byteLength; - headerView.setUint32(8, totalByteLength, true); - new Blob([ - header, - jsonChunkPrefix, - jsonChunk, - binaryChunkPrefix, - binaryChunk - ], { type: "application/octet-stream" }).arrayBuffer().then(onDone); - }); - else if (json.buffers && json.buffers.length > 0) readAsDataURL(blob).then((uri) => { - json.buffers[0].uri = uri; - onDone(json); - }); - else onDone(json); - } - /** - * Serializes a userData. - * - * @param {THREE.Object3D|THREE.Material} object - * @param {Object} objectDef - */ - serializeUserData(object, objectDef) { - if (Object.keys(object.userData).length === 0) return; - const options = this.options; - const extensionsUsed = this.extensionsUsed; - try { - const json = JSON.parse(JSON.stringify(object.userData)); - if (options.includeCustomExtensions && json.gltfExtensions) { - if (objectDef.extensions === void 0) objectDef.extensions = {}; - for (const extensionName in json.gltfExtensions) { - objectDef.extensions[extensionName] = json.gltfExtensions[extensionName]; - extensionsUsed[extensionName] = true; - } - delete json.gltfExtensions; - } - if (Object.keys(json).length > 0) objectDef.extras = json; - } catch (error) { - console.warn("THREE.GLTFExporter: userData of '" + object.name + "' won't be serialized because of JSON.stringify error - " + error.message); - } - } - /** - * Returns ids for buffer attributes. - * @param {Object} object - * @return {Integer} - */ - getUID(attribute, isRelativeCopy = false) { - if (this.uids.has(attribute) === false) { - const uids2 = /* @__PURE__ */ new Map(); - uids2.set(true, this.uid++); - uids2.set(false, this.uid++); - this.uids.set(attribute, uids2); - } - return this.uids.get(attribute).get(isRelativeCopy); - } - /** - * Checks if normal attribute values are normalized. - * - * @param {BufferAttribute} normal - * @returns {Boolean} - */ - isNormalizedNormalAttribute(normal) { - if (this.cache.attributesNormalized.has(normal)) return false; - const v = new Vector3(); - for (let i = 0, il = normal.count; i < il; i++) if (Math.abs(v.fromBufferAttribute(normal, i).length() - 1) > 5e-4) return false; - return true; - } - /** - * Creates normalized normal buffer attribute. - * - * @param {BufferAttribute} normal - * @returns {BufferAttribute} - * - */ - createNormalizedNormalAttribute(normal) { - const cache = this.cache; - if (cache.attributesNormalized.has(normal)) return cache.attributesNormalized.get(normal); - const attribute = normal.clone(); - const v = new Vector3(); - for (let i = 0, il = attribute.count; i < il; i++) { - v.fromBufferAttribute(attribute, i); - if (v.x === 0 && v.y === 0 && v.z === 0) v.setX(1); - else v.normalize(); - attribute.setXYZ(i, v.x, v.y, v.z); - } - cache.attributesNormalized.set(normal, attribute); - return attribute; - } - /** - * Applies a texture transform, if present, to the map definition. Requires - * the KHR_texture_transform extension. - * - * @param {Object} mapDef - * @param {THREE.Texture} texture - */ - applyTextureTransform(mapDef, texture) { - let didTransform = false; - const transformDef = {}; - if (texture.offset.x !== 0 || texture.offset.y !== 0) { - transformDef.offset = texture.offset.toArray(); - didTransform = true; - } - if (texture.rotation !== 0) { - transformDef.rotation = texture.rotation; - didTransform = true; - } - if (texture.repeat.x !== 1 || texture.repeat.y !== 1) { - transformDef.scale = texture.repeat.toArray(); - didTransform = true; - } - if (didTransform) { - mapDef.extensions = mapDef.extensions || {}; - mapDef.extensions["KHR_texture_transform"] = transformDef; - this.extensionsUsed["KHR_texture_transform"] = true; - } - } - buildMetalRoughTexture(metalnessMap, roughnessMap) { - if (metalnessMap === roughnessMap) return metalnessMap; - function getEncodingConversion(map) { - if ("colorSpace" in map ? map.colorSpace === "srgb" : map.encoding === 3001) return function SRGBToLinear(c) { - return c < .04045 ? c * .0773993808 : Math.pow(c * .9478672986 + .0521327014, 2.4); - }; - return function LinearToLinear(c) { - return c; - }; - } - console.warn("THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures."); - if (metalnessMap instanceof CompressedTexture) metalnessMap = decompress(metalnessMap); - if (roughnessMap instanceof CompressedTexture) roughnessMap = decompress(roughnessMap); - const metalness = metalnessMap ? metalnessMap.image : null; - const roughness = roughnessMap ? roughnessMap.image : null; - const width = Math.max(metalness ? metalness.width : 0, roughness ? roughness.width : 0); - const height = Math.max(metalness ? metalness.height : 0, roughness ? roughness.height : 0); - const canvas = getCanvas(); - canvas.width = width; - canvas.height = height; - const context = canvas.getContext("2d"); - context.fillStyle = "#00ffff"; - context.fillRect(0, 0, width, height); - const composite = context.getImageData(0, 0, width, height); - if (metalness) { - context.drawImage(metalness, 0, 0, width, height); - const convert = getEncodingConversion(metalnessMap); - const data = context.getImageData(0, 0, width, height).data; - for (let i = 2; i < data.length; i += 4) composite.data[i] = convert(data[i] / 256) * 256; - } - if (roughness) { - context.drawImage(roughness, 0, 0, width, height); - const convert = getEncodingConversion(roughnessMap); - const data = context.getImageData(0, 0, width, height).data; - for (let i = 1; i < data.length; i += 4) composite.data[i] = convert(data[i] / 256) * 256; - } - context.putImageData(composite, 0, 0); - const texture = (metalnessMap || roughnessMap).clone(); - texture.source = new Texture(canvas).source; - if ("colorSpace" in texture) texture.colorSpace = ""; - else texture.encoding = 3e3; - texture.channel = (metalnessMap || roughnessMap).channel; - if (metalnessMap && roughnessMap && metalnessMap.channel !== roughnessMap.channel) console.warn("THREE.GLTFExporter: UV channels for metalnessMap and roughnessMap textures must match."); - return texture; - } - /** - * Process a buffer to append to the default one. - * @param {ArrayBuffer} buffer - * @return {Integer} - */ - processBuffer(buffer) { - const json = this.json; - const buffers = this.buffers; - if (!json.buffers) json.buffers = [{ byteLength: 0 }]; - buffers.push(buffer); - return 0; - } - /** - * Process and generate a BufferView - * @param {BufferAttribute} attribute - * @param {number} componentType - * @param {number} start - * @param {number} count - * @param {number} target (Optional) Target usage of the BufferView - * @return {Object} - */ - processBufferView(attribute, componentType, start, count, target) { - const json = this.json; - if (!json.bufferViews) json.bufferViews = []; - let componentSize; - switch (componentType) { - case WEBGL_CONSTANTS$1.BYTE: - case WEBGL_CONSTANTS$1.UNSIGNED_BYTE: - componentSize = 1; - break; - case WEBGL_CONSTANTS$1.SHORT: - case WEBGL_CONSTANTS$1.UNSIGNED_SHORT: - componentSize = 2; - break; - default: componentSize = 4; - } - let byteStride = attribute.itemSize * componentSize; - if (target === WEBGL_CONSTANTS$1.ARRAY_BUFFER) byteStride = Math.ceil(byteStride / 4) * 4; - const byteLength = getPaddedBufferSize(count * byteStride); - const dataView = new DataView(new ArrayBuffer(byteLength)); - let offset = 0; - for (let i = start; i < start + count; i++) { - for (let a = 0; a < attribute.itemSize; a++) { - let value; - if (attribute.itemSize > 4) value = attribute.array[i * attribute.itemSize + a]; - else { - if (a === 0) value = attribute.getX(i); - else if (a === 1) value = attribute.getY(i); - else if (a === 2) value = attribute.getZ(i); - else if (a === 3) value = attribute.getW(i); - if (attribute.normalized === true) value = MathUtils.normalize(value, attribute.array); - } - if (componentType === WEBGL_CONSTANTS$1.FLOAT) dataView.setFloat32(offset, value, true); - else if (componentType === WEBGL_CONSTANTS$1.INT) dataView.setInt32(offset, value, true); - else if (componentType === WEBGL_CONSTANTS$1.UNSIGNED_INT) dataView.setUint32(offset, value, true); - else if (componentType === WEBGL_CONSTANTS$1.SHORT) dataView.setInt16(offset, value, true); - else if (componentType === WEBGL_CONSTANTS$1.UNSIGNED_SHORT) dataView.setUint16(offset, value, true); - else if (componentType === WEBGL_CONSTANTS$1.BYTE) dataView.setInt8(offset, value); - else if (componentType === WEBGL_CONSTANTS$1.UNSIGNED_BYTE) dataView.setUint8(offset, value); - offset += componentSize; - } - if (offset % byteStride !== 0) offset += byteStride - offset % byteStride; - } - const bufferViewDef = { - buffer: this.processBuffer(dataView.buffer), - byteOffset: this.byteOffset, - byteLength - }; - if (target !== void 0) bufferViewDef.target = target; - if (target === WEBGL_CONSTANTS$1.ARRAY_BUFFER) bufferViewDef.byteStride = byteStride; - this.byteOffset += byteLength; - json.bufferViews.push(bufferViewDef); - return { - id: json.bufferViews.length - 1, - byteLength: 0 - }; - } - /** - * Process and generate a BufferView from an image Blob. - * @param {Blob} blob - * @return {Promise<Integer>} - */ - processBufferViewImage(blob) { - const writer = this; - const json = writer.json; - if (!json.bufferViews) json.bufferViews = []; - return blob.arrayBuffer().then((result) => { - const buffer = getPaddedArrayBuffer(result); - const bufferViewDef = { - buffer: writer.processBuffer(buffer), - byteOffset: writer.byteOffset, - byteLength: buffer.byteLength - }; - writer.byteOffset += buffer.byteLength; - return json.bufferViews.push(bufferViewDef) - 1; - }); - } - /** - * Process attribute to generate an accessor - * @param {BufferAttribute} attribute Attribute to process - * @param {THREE.BufferGeometry} geometry (Optional) Geometry used for truncated draw range - * @param {Integer} start (Optional) - * @param {Integer} count (Optional) - * @return {Integer|null} Index of the processed accessor on the "accessors" array - */ - processAccessor(attribute, geometry, start, count) { - const json = this.json; - const types = { - 1: "SCALAR", - 2: "VEC2", - 3: "VEC3", - 4: "VEC4", - 9: "MAT3", - 16: "MAT4" - }; - let componentType; - if (attribute.array.constructor === Float32Array) componentType = WEBGL_CONSTANTS$1.FLOAT; - else if (attribute.array.constructor === Int32Array) componentType = WEBGL_CONSTANTS$1.INT; - else if (attribute.array.constructor === Uint32Array) componentType = WEBGL_CONSTANTS$1.UNSIGNED_INT; - else if (attribute.array.constructor === Int16Array) componentType = WEBGL_CONSTANTS$1.SHORT; - else if (attribute.array.constructor === Uint16Array) componentType = WEBGL_CONSTANTS$1.UNSIGNED_SHORT; - else if (attribute.array.constructor === Int8Array) componentType = WEBGL_CONSTANTS$1.BYTE; - else if (attribute.array.constructor === Uint8Array) componentType = WEBGL_CONSTANTS$1.UNSIGNED_BYTE; - else throw new Error("THREE.GLTFExporter: Unsupported bufferAttribute component type: " + attribute.array.constructor.name); - if (start === void 0) start = 0; - if (count === void 0) count = attribute.count; - if (count === 0) return null; - const minMax = getMinMax(attribute, start, count); - let bufferViewTarget; - if (geometry !== void 0) bufferViewTarget = attribute === geometry.index ? WEBGL_CONSTANTS$1.ELEMENT_ARRAY_BUFFER : WEBGL_CONSTANTS$1.ARRAY_BUFFER; - const bufferView = this.processBufferView(attribute, componentType, start, count, bufferViewTarget); - const accessorDef = { - bufferView: bufferView.id, - byteOffset: bufferView.byteOffset, - componentType, - count, - max: minMax.max, - min: minMax.min, - type: types[attribute.itemSize] - }; - if (attribute.normalized === true) accessorDef.normalized = true; - if (!json.accessors) json.accessors = []; - return json.accessors.push(accessorDef) - 1; - } - /** - * Process image - * @param {Image} image to process - * @param {Integer} format of the image (RGBAFormat) - * @param {Boolean} flipY before writing out the image - * @param {String} mimeType export format - * @return {Integer} Index of the processed texture in the "images" array - */ - processImage(image, format, flipY, mimeType = "image/png") { - if (image !== null) { - const writer = this; - const cache = writer.cache; - const json = writer.json; - const options = writer.options; - const pending = writer.pending; - if (!cache.images.has(image)) cache.images.set(image, {}); - const cachedImages = cache.images.get(image); - const key = mimeType + ":flipY/" + flipY.toString(); - if (cachedImages[key] !== void 0) return cachedImages[key]; - if (!json.images) json.images = []; - const imageDef = { mimeType }; - const canvas = getCanvas(); - canvas.width = Math.min(image.width, options.maxTextureSize); - canvas.height = Math.min(image.height, options.maxTextureSize); - const ctx = canvas.getContext("2d"); - if (flipY === true) { - ctx.translate(0, canvas.height); - ctx.scale(1, -1); - } - if (image.data !== void 0) { - if (format !== 1023) console.error("GLTFExporter: Only RGBAFormat is supported.", format); - if (image.width > options.maxTextureSize || image.height > options.maxTextureSize) console.warn("GLTFExporter: Image size is bigger than maxTextureSize", image); - const data = new Uint8ClampedArray(image.height * image.width * 4); - for (let i = 0; i < data.length; i += 4) { - data[i + 0] = image.data[i + 0]; - data[i + 1] = image.data[i + 1]; - data[i + 2] = image.data[i + 2]; - data[i + 3] = image.data[i + 3]; - } - ctx.putImageData(new ImageData(data, image.width, image.height), 0, 0); - } else ctx.drawImage(image, 0, 0, canvas.width, canvas.height); - if (options.binary === true) pending.push(getToBlobPromise(canvas, mimeType).then((blob) => writer.processBufferViewImage(blob)).then((bufferViewIndex) => { - imageDef.bufferView = bufferViewIndex; - })); - else if (canvas.toDataURL !== void 0) imageDef.uri = canvas.toDataURL(mimeType); - else pending.push(getToBlobPromise(canvas, mimeType).then(readAsDataURL).then((uri) => { - imageDef.uri = uri; - })); - const index = json.images.push(imageDef) - 1; - cachedImages[key] = index; - return index; - } else throw new Error("THREE.GLTFExporter: No valid image data found. Unable to process texture."); - } - /** - * Process sampler - * @param {Texture} map Texture to process - * @return {Integer} Index of the processed texture in the "samplers" array - */ - processSampler(map) { - const json = this.json; - if (!json.samplers) json.samplers = []; - const samplerDef = { - magFilter: THREE_TO_WEBGL[map.magFilter], - minFilter: THREE_TO_WEBGL[map.minFilter], - wrapS: THREE_TO_WEBGL[map.wrapS], - wrapT: THREE_TO_WEBGL[map.wrapT] - }; - return json.samplers.push(samplerDef) - 1; - } - /** - * Process texture - * @param {Texture} map Map to process - * @return {Integer} Index of the processed texture in the "textures" array - */ - processTexture(map) { - const options = this.options; - const cache = this.cache; - const json = this.json; - if (cache.textures.has(map)) return cache.textures.get(map); - if (!json.textures) json.textures = []; - if (map instanceof CompressedTexture) map = decompress(map, options.maxTextureSize); - let mimeType = map.userData.mimeType; - if (mimeType === "image/webp") mimeType = "image/png"; - const textureDef = { - sampler: this.processSampler(map), - source: this.processImage(map.image, map.format, map.flipY, mimeType) - }; - if (map.name) textureDef.name = map.name; - this._invokeAll(function(ext) { - ext.writeTexture && ext.writeTexture(map, textureDef); - }); - const index = json.textures.push(textureDef) - 1; - cache.textures.set(map, index); - return index; - } - /** - * Process material - * @param {THREE.Material} material Material to process - * @return {Integer|null} Index of the processed material in the "materials" array - */ - processMaterial(material) { - const cache = this.cache; - const json = this.json; - if (cache.materials.has(material)) return cache.materials.get(material); - if (material.isShaderMaterial) { - console.warn("GLTFExporter: THREE.ShaderMaterial not supported."); - return null; - } - if (!json.materials) json.materials = []; - const materialDef = { pbrMetallicRoughness: {} }; - if (material.isMeshStandardMaterial !== true && material.isMeshBasicMaterial !== true) console.warn("GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results."); - const color = material.color.toArray().concat([material.opacity]); - if (!equalArray(color, [ - 1, - 1, - 1, - 1 - ])) materialDef.pbrMetallicRoughness.baseColorFactor = color; - if (material.isMeshStandardMaterial) { - materialDef.pbrMetallicRoughness.metallicFactor = material.metalness; - materialDef.pbrMetallicRoughness.roughnessFactor = material.roughness; - } else { - materialDef.pbrMetallicRoughness.metallicFactor = .5; - materialDef.pbrMetallicRoughness.roughnessFactor = .5; - } - if (material.metalnessMap || material.roughnessMap) { - const metalRoughTexture = this.buildMetalRoughTexture(material.metalnessMap, material.roughnessMap); - const metalRoughMapDef = { - index: this.processTexture(metalRoughTexture), - channel: metalRoughTexture.channel - }; - this.applyTextureTransform(metalRoughMapDef, metalRoughTexture); - materialDef.pbrMetallicRoughness.metallicRoughnessTexture = metalRoughMapDef; - } - if (material.map) { - const baseColorMapDef = { - index: this.processTexture(material.map), - texCoord: material.map.channel - }; - this.applyTextureTransform(baseColorMapDef, material.map); - materialDef.pbrMetallicRoughness.baseColorTexture = baseColorMapDef; - } - if (material.emissive) { - const emissive = material.emissive; - if (Math.max(emissive.r, emissive.g, emissive.b) > 0) materialDef.emissiveFactor = material.emissive.toArray(); - if (material.emissiveMap) { - const emissiveMapDef = { - index: this.processTexture(material.emissiveMap), - texCoord: material.emissiveMap.channel - }; - this.applyTextureTransform(emissiveMapDef, material.emissiveMap); - materialDef.emissiveTexture = emissiveMapDef; - } - } - if (material.normalMap) { - const normalMapDef = { - index: this.processTexture(material.normalMap), - texCoord: material.normalMap.channel - }; - if (material.normalScale && material.normalScale.x !== 1) normalMapDef.scale = material.normalScale.x; - this.applyTextureTransform(normalMapDef, material.normalMap); - materialDef.normalTexture = normalMapDef; - } - if (material.aoMap) { - const occlusionMapDef = { - index: this.processTexture(material.aoMap), - texCoord: material.aoMap.channel - }; - if (material.aoMapIntensity !== 1) occlusionMapDef.strength = material.aoMapIntensity; - this.applyTextureTransform(occlusionMapDef, material.aoMap); - materialDef.occlusionTexture = occlusionMapDef; - } - if (material.transparent) materialDef.alphaMode = "BLEND"; - else if (material.alphaTest > 0) { - materialDef.alphaMode = "MASK"; - materialDef.alphaCutoff = material.alphaTest; - } - if (material.side === 2) materialDef.doubleSided = true; - if (material.name !== "") materialDef.name = material.name; - this.serializeUserData(material, materialDef); - this._invokeAll(function(ext) { - ext.writeMaterial && ext.writeMaterial(material, materialDef); - }); - const index = json.materials.push(materialDef) - 1; - cache.materials.set(material, index); - return index; - } - /** - * Process mesh - * @param {THREE.Mesh} mesh Mesh to process - * @return {Integer|null} Index of the processed mesh in the "meshes" array - */ - processMesh(mesh) { - const cache = this.cache; - const json = this.json; - const meshCacheKeyParts = [mesh.geometry.uuid]; - if (Array.isArray(mesh.material)) for (let i = 0, l = mesh.material.length; i < l; i++) meshCacheKeyParts.push(mesh.material[i].uuid); - else meshCacheKeyParts.push(mesh.material.uuid); - const meshCacheKey = meshCacheKeyParts.join(":"); - if (cache.meshes.has(meshCacheKey)) return cache.meshes.get(meshCacheKey); - const geometry = mesh.geometry; - let mode; - if (mesh.isLineSegments) mode = WEBGL_CONSTANTS$1.LINES; - else if (mesh.isLineLoop) mode = WEBGL_CONSTANTS$1.LINE_LOOP; - else if (mesh.isLine) mode = WEBGL_CONSTANTS$1.LINE_STRIP; - else if (mesh.isPoints) mode = WEBGL_CONSTANTS$1.POINTS; - else mode = mesh.material.wireframe ? WEBGL_CONSTANTS$1.LINES : WEBGL_CONSTANTS$1.TRIANGLES; - const meshDef = {}; - const attributes = {}; - const primitives = []; - const targets = []; - const nameConversion = { - ...version >= 152 ? { - uv: "TEXCOORD_0", - uv1: "TEXCOORD_1", - uv2: "TEXCOORD_2", - uv3: "TEXCOORD_3" - } : { - uv: "TEXCOORD_0", - uv2: "TEXCOORD_1" - }, - color: "COLOR_0", - skinWeight: "WEIGHTS_0", - skinIndex: "JOINTS_0" - }; - const originalNormal = geometry.getAttribute("normal"); - if (originalNormal !== void 0 && !this.isNormalizedNormalAttribute(originalNormal)) { - console.warn("THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one."); - geometry.setAttribute("normal", this.createNormalizedNormalAttribute(originalNormal)); - } - let modifiedAttribute = null; - for (let attributeName in geometry.attributes) { - if (attributeName.slice(0, 5) === "morph") continue; - const attribute = geometry.attributes[attributeName]; - attributeName = nameConversion[attributeName] || attributeName.toUpperCase(); - if (!/^(POSITION|NORMAL|TANGENT|TEXCOORD_\d+|COLOR_\d+|JOINTS_\d+|WEIGHTS_\d+)$/.test(attributeName)) attributeName = "_" + attributeName; - if (cache.attributes.has(this.getUID(attribute))) { - attributes[attributeName] = cache.attributes.get(this.getUID(attribute)); - continue; - } - modifiedAttribute = null; - const array = attribute.array; - if (attributeName === "JOINTS_0" && !(array instanceof Uint16Array) && !(array instanceof Uint8Array)) { - console.warn("GLTFExporter: Attribute \"skinIndex\" converted to type UNSIGNED_SHORT."); - modifiedAttribute = new BufferAttribute(new Uint16Array(array), attribute.itemSize, attribute.normalized); - } - const accessor = this.processAccessor(modifiedAttribute || attribute, geometry); - if (accessor !== null) { - if (!attributeName.startsWith("_")) this.detectMeshQuantization(attributeName, attribute); - attributes[attributeName] = accessor; - cache.attributes.set(this.getUID(attribute), accessor); - } - } - if (originalNormal !== void 0) geometry.setAttribute("normal", originalNormal); - if (Object.keys(attributes).length === 0) return null; - if (mesh.morphTargetInfluences !== void 0 && mesh.morphTargetInfluences.length > 0) { - const weights = []; - const targetNames = []; - const reverseDictionary = {}; - if (mesh.morphTargetDictionary !== void 0) for (const key in mesh.morphTargetDictionary) reverseDictionary[mesh.morphTargetDictionary[key]] = key; - for (let i = 0; i < mesh.morphTargetInfluences.length; ++i) { - const target = {}; - let warned = false; - for (const attributeName in geometry.morphAttributes) { - if (attributeName !== "position" && attributeName !== "normal") { - if (!warned) { - console.warn("GLTFExporter: Only POSITION and NORMAL morph are supported."); - warned = true; - } - continue; - } - const attribute = geometry.morphAttributes[attributeName][i]; - const gltfAttributeName = attributeName.toUpperCase(); - const baseAttribute = geometry.attributes[attributeName]; - if (cache.attributes.has(this.getUID(attribute, true))) { - target[gltfAttributeName] = cache.attributes.get(this.getUID(attribute, true)); - continue; - } - const relativeAttribute = attribute.clone(); - if (!geometry.morphTargetsRelative) for (let j = 0, jl = attribute.count; j < jl; j++) for (let a = 0; a < attribute.itemSize; a++) { - if (a === 0) relativeAttribute.setX(j, attribute.getX(j) - baseAttribute.getX(j)); - if (a === 1) relativeAttribute.setY(j, attribute.getY(j) - baseAttribute.getY(j)); - if (a === 2) relativeAttribute.setZ(j, attribute.getZ(j) - baseAttribute.getZ(j)); - if (a === 3) relativeAttribute.setW(j, attribute.getW(j) - baseAttribute.getW(j)); - } - target[gltfAttributeName] = this.processAccessor(relativeAttribute, geometry); - cache.attributes.set(this.getUID(baseAttribute, true), target[gltfAttributeName]); - } - targets.push(target); - weights.push(mesh.morphTargetInfluences[i]); - if (mesh.morphTargetDictionary !== void 0) targetNames.push(reverseDictionary[i]); - } - meshDef.weights = weights; - if (targetNames.length > 0) { - meshDef.extras = {}; - meshDef.extras.targetNames = targetNames; - } - } - const isMultiMaterial = Array.isArray(mesh.material); - if (isMultiMaterial && geometry.groups.length === 0) return null; - const materials = isMultiMaterial ? mesh.material : [mesh.material]; - const groups = isMultiMaterial ? geometry.groups : [{ - materialIndex: 0, - start: void 0, - count: void 0 - }]; - for (let i = 0, il = groups.length; i < il; i++) { - const primitive = { - mode, - attributes - }; - this.serializeUserData(geometry, primitive); - if (targets.length > 0) primitive.targets = targets; - if (geometry.index !== null) { - let cacheKey = this.getUID(geometry.index); - if (groups[i].start !== void 0 || groups[i].count !== void 0) cacheKey += ":" + groups[i].start + ":" + groups[i].count; - if (cache.attributes.has(cacheKey)) primitive.indices = cache.attributes.get(cacheKey); - else { - primitive.indices = this.processAccessor(geometry.index, geometry, groups[i].start, groups[i].count); - cache.attributes.set(cacheKey, primitive.indices); - } - if (primitive.indices === null) delete primitive.indices; - } - const material = this.processMaterial(materials[groups[i].materialIndex]); - if (material !== null) primitive.material = material; - primitives.push(primitive); - } - meshDef.primitives = primitives; - if (!json.meshes) json.meshes = []; - this._invokeAll(function(ext) { - ext.writeMesh && ext.writeMesh(mesh, meshDef); - }); - const index = json.meshes.push(meshDef) - 1; - cache.meshes.set(meshCacheKey, index); - return index; - } - /** - * If a vertex attribute with a - * [non-standard data type](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#meshes-overview) - * is used, it is checked whether it is a valid data type according to the - * [KHR_mesh_quantization](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/README.md) - * extension. - * In this case the extension is automatically added to the list of used extensions. - * - * @param {string} attributeName - * @param {THREE.BufferAttribute} attribute - */ - detectMeshQuantization(attributeName, attribute) { - if (this.extensionsUsed[KHR_MESH_QUANTIZATION]) return; - let attrType = void 0; - switch (attribute.array.constructor) { - case Int8Array: - attrType = "byte"; - break; - case Uint8Array: - attrType = "unsigned byte"; - break; - case Int16Array: - attrType = "short"; - break; - case Uint16Array: - attrType = "unsigned short"; - break; - default: return; - } - if (attribute.normalized) attrType += " normalized"; - const attrNamePrefix = attributeName.split("_", 1)[0]; - if (KHR_mesh_quantization_ExtraAttrTypes[attrNamePrefix] && KHR_mesh_quantization_ExtraAttrTypes[attrNamePrefix].includes(attrType)) { - this.extensionsUsed[KHR_MESH_QUANTIZATION] = true; - this.extensionsRequired[KHR_MESH_QUANTIZATION] = true; - } - } - /** - * Process camera - * @param {THREE.Camera} camera Camera to process - * @return {Integer} Index of the processed mesh in the "camera" array - */ - processCamera(camera) { - const json = this.json; - if (!json.cameras) json.cameras = []; - const isOrtho = camera.isOrthographicCamera; - const cameraDef = { type: isOrtho ? "orthographic" : "perspective" }; - if (isOrtho) cameraDef.orthographic = { - xmag: camera.right * 2, - ymag: camera.top * 2, - zfar: camera.far <= 0 ? .001 : camera.far, - znear: camera.near < 0 ? 0 : camera.near - }; - else cameraDef.perspective = { - aspectRatio: camera.aspect, - yfov: MathUtils.degToRad(camera.fov), - zfar: camera.far <= 0 ? .001 : camera.far, - znear: camera.near < 0 ? 0 : camera.near - }; - if (camera.name !== "") cameraDef.name = camera.type; - return json.cameras.push(cameraDef) - 1; - } - /** - * Creates glTF animation entry from AnimationClip object. - * - * Status: - * - Only properties listed in PATH_PROPERTIES may be animated. - * - * @param {THREE.AnimationClip} clip - * @param {THREE.Object3D} root - * @return {number|null} - */ - processAnimation(clip, root) { - const json = this.json; - const nodeMap = this.nodeMap; - if (!json.animations) json.animations = []; - clip = GLTFExporter.Utils.mergeMorphTargetTracks(clip.clone(), root); - const tracks = clip.tracks; - const channels = []; - const samplers = []; - for (let i = 0; i < tracks.length; ++i) { - const track = tracks[i]; - const trackBinding = PropertyBinding.parseTrackName(track.name); - let trackNode = PropertyBinding.findNode(root, trackBinding.nodeName); - const trackProperty = PATH_PROPERTIES$1[trackBinding.propertyName]; - if (trackBinding.objectName === "bones") if (trackNode.isSkinnedMesh === true) trackNode = trackNode.skeleton.getBoneByName(trackBinding.objectIndex); - else trackNode = void 0; - if (!trackNode || !trackProperty) { - console.warn("THREE.GLTFExporter: Could not export animation track \"%s\".", track.name); - return null; - } - const inputItemSize = 1; - let outputItemSize = track.values.length / track.times.length; - if (trackProperty === PATH_PROPERTIES$1.morphTargetInfluences) outputItemSize /= trackNode.morphTargetInfluences.length; - let interpolation; - if (track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true) { - interpolation = "CUBICSPLINE"; - outputItemSize /= 3; - } else if (track.getInterpolation() === 2300) interpolation = "STEP"; - else interpolation = "LINEAR"; - samplers.push({ - input: this.processAccessor(new BufferAttribute(track.times, inputItemSize)), - output: this.processAccessor(new BufferAttribute(track.values, outputItemSize)), - interpolation - }); - channels.push({ - sampler: samplers.length - 1, - target: { - node: nodeMap.get(trackNode), - path: trackProperty - } - }); - } - json.animations.push({ - name: clip.name || "clip_" + json.animations.length, - samplers, - channels - }); - return json.animations.length - 1; - } - /** - * @param {THREE.Object3D} object - * @return {number|null} - */ - processSkin(object) { - const json = this.json; - const nodeMap = this.nodeMap; - const node = json.nodes[nodeMap.get(object)]; - const skeleton = object.skeleton; - if (skeleton === void 0) return null; - const rootJoint = object.skeleton.bones[0]; - if (rootJoint === void 0) return null; - const joints = []; - const inverseBindMatrices = new Float32Array(skeleton.bones.length * 16); - const temporaryBoneInverse = new Matrix4(); - for (let i = 0; i < skeleton.bones.length; ++i) { - joints.push(nodeMap.get(skeleton.bones[i])); - temporaryBoneInverse.copy(skeleton.boneInverses[i]); - temporaryBoneInverse.multiply(object.bindMatrix).toArray(inverseBindMatrices, i * 16); - } - if (json.skins === void 0) json.skins = []; - json.skins.push({ - inverseBindMatrices: this.processAccessor(new BufferAttribute(inverseBindMatrices, 16)), - joints, - skeleton: nodeMap.get(rootJoint) - }); - return node.skin = json.skins.length - 1; - } - /** - * Process Object3D node - * @param {THREE.Object3D} node Object3D to processNode - * @return {Integer} Index of the node in the nodes list - */ - processNode(object) { - const json = this.json; - const options = this.options; - const nodeMap = this.nodeMap; - if (!json.nodes) json.nodes = []; - const nodeDef = {}; - if (options.trs) { - const rotation = object.quaternion.toArray(); - const position = object.position.toArray(); - const scale = object.scale.toArray(); - if (!equalArray(rotation, [ - 0, - 0, - 0, - 1 - ])) nodeDef.rotation = rotation; - if (!equalArray(position, [ - 0, - 0, - 0 - ])) nodeDef.translation = position; - if (!equalArray(scale, [ - 1, - 1, - 1 - ])) nodeDef.scale = scale; - } else { - if (object.matrixAutoUpdate) object.updateMatrix(); - if (isIdentityMatrix(object.matrix) === false) nodeDef.matrix = object.matrix.elements; - } - if (object.name !== "") nodeDef.name = String(object.name); - this.serializeUserData(object, nodeDef); - if (object.isMesh || object.isLine || object.isPoints) { - const meshIndex = this.processMesh(object); - if (meshIndex !== null) nodeDef.mesh = meshIndex; - } else if (object.isCamera) nodeDef.camera = this.processCamera(object); - if (object.isSkinnedMesh) this.skins.push(object); - if (object.children.length > 0) { - const children = []; - for (let i = 0, l = object.children.length; i < l; i++) { - const child = object.children[i]; - if (child.visible || options.onlyVisible === false) { - const nodeIndex2 = this.processNode(child); - if (nodeIndex2 !== null) children.push(nodeIndex2); - } - } - if (children.length > 0) nodeDef.children = children; - } - this._invokeAll(function(ext) { - ext.writeNode && ext.writeNode(object, nodeDef); - }); - const nodeIndex = json.nodes.push(nodeDef) - 1; - nodeMap.set(object, nodeIndex); - return nodeIndex; - } - /** - * Process Scene - * @param {Scene} node Scene to process - */ - processScene(scene) { - const json = this.json; - const options = this.options; - if (!json.scenes) { - json.scenes = []; - json.scene = 0; - } - const sceneDef = {}; - if (scene.name !== "") sceneDef.name = scene.name; - json.scenes.push(sceneDef); - const nodes = []; - for (let i = 0, l = scene.children.length; i < l; i++) { - const child = scene.children[i]; - if (child.visible || options.onlyVisible === false) { - const nodeIndex = this.processNode(child); - if (nodeIndex !== null) nodes.push(nodeIndex); - } - } - if (nodes.length > 0) sceneDef.nodes = nodes; - this.serializeUserData(scene, sceneDef); - } - /** - * Creates a Scene to hold a list of objects and parse it - * @param {Array} objects List of objects to process - */ - processObjects(objects) { - const scene = new Scene(); - scene.name = "AuxScene"; - for (let i = 0; i < objects.length; i++) scene.children.push(objects[i]); - this.processScene(scene); - } - /** - * @param {THREE.Object3D|Array<THREE.Object3D>} input - */ - processInput(input) { - const options = this.options; - input = input instanceof Array ? input : [input]; - this._invokeAll(function(ext) { - ext.beforeParse && ext.beforeParse(input); - }); - const objectsWithoutScene = []; - for (let i = 0; i < input.length; i++) if (input[i] instanceof Scene) this.processScene(input[i]); - else objectsWithoutScene.push(input[i]); - if (objectsWithoutScene.length > 0) this.processObjects(objectsWithoutScene); - for (let i = 0; i < this.skins.length; ++i) this.processSkin(this.skins[i]); - for (let i = 0; i < options.animations.length; ++i) this.processAnimation(options.animations[i], input[0]); - this._invokeAll(function(ext) { - ext.afterParse && ext.afterParse(input); - }); - } - _invokeAll(func) { - for (let i = 0, il = this.plugins.length; i < il; i++) func(this.plugins[i]); - } -}; -var GLTFLightExtension = class { - constructor(writer) { - this.writer = writer; - this.name = "KHR_lights_punctual"; - } - writeNode(light, nodeDef) { - if (!light.isLight) return; - if (!light.isDirectionalLight && !light.isPointLight && !light.isSpotLight) { - console.warn("THREE.GLTFExporter: Only directional, point, and spot lights are supported.", light); - return; - } - const writer = this.writer; - const json = writer.json; - const extensionsUsed = writer.extensionsUsed; - const lightDef = {}; - if (light.name) lightDef.name = light.name; - lightDef.color = light.color.toArray(); - lightDef.intensity = light.intensity; - if (light.isDirectionalLight) lightDef.type = "directional"; - else if (light.isPointLight) { - lightDef.type = "point"; - if (light.distance > 0) lightDef.range = light.distance; - } else if (light.isSpotLight) { - lightDef.type = "spot"; - if (light.distance > 0) lightDef.range = light.distance; - lightDef.spot = {}; - lightDef.spot.innerConeAngle = (light.penumbra - 1) * light.angle * -1; - lightDef.spot.outerConeAngle = light.angle; - } - if (light.decay !== void 0 && light.decay !== 2) console.warn("THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, and expects light.decay=2."); - if (light.target && (light.target.parent !== light || light.target.position.x !== 0 || light.target.position.y !== 0 || light.target.position.z !== -1)) console.warn("THREE.GLTFExporter: Light direction may be lost. For best results, make light.target a child of the light with position 0,0,-1."); - if (!extensionsUsed[this.name]) { - json.extensions = json.extensions || {}; - json.extensions[this.name] = { lights: [] }; - extensionsUsed[this.name] = true; - } - const lights = json.extensions[this.name].lights; - lights.push(lightDef); - nodeDef.extensions = nodeDef.extensions || {}; - nodeDef.extensions[this.name] = { light: lights.length - 1 }; - } -}; -var GLTFMaterialsUnlitExtension$1 = class { - constructor(writer) { - this.writer = writer; - this.name = "KHR_materials_unlit"; - } - writeMaterial(material, materialDef) { - if (!material.isMeshBasicMaterial) return; - const extensionsUsed = this.writer.extensionsUsed; - materialDef.extensions = materialDef.extensions || {}; - materialDef.extensions[this.name] = {}; - extensionsUsed[this.name] = true; - materialDef.pbrMetallicRoughness.metallicFactor = 0; - materialDef.pbrMetallicRoughness.roughnessFactor = .9; - } -}; -var GLTFMaterialsClearcoatExtension$1 = class { - constructor(writer) { - this.writer = writer; - this.name = "KHR_materials_clearcoat"; - } - writeMaterial(material, materialDef) { - if (!material.isMeshPhysicalMaterial || material.clearcoat === 0) return; - const writer = this.writer; - const extensionsUsed = writer.extensionsUsed; - const extensionDef = {}; - extensionDef.clearcoatFactor = material.clearcoat; - if (material.clearcoatMap) { - const clearcoatMapDef = { - index: writer.processTexture(material.clearcoatMap), - texCoord: material.clearcoatMap.channel - }; - writer.applyTextureTransform(clearcoatMapDef, material.clearcoatMap); - extensionDef.clearcoatTexture = clearcoatMapDef; - } - extensionDef.clearcoatRoughnessFactor = material.clearcoatRoughness; - if (material.clearcoatRoughnessMap) { - const clearcoatRoughnessMapDef = { - index: writer.processTexture(material.clearcoatRoughnessMap), - texCoord: material.clearcoatRoughnessMap.channel - }; - writer.applyTextureTransform(clearcoatRoughnessMapDef, material.clearcoatRoughnessMap); - extensionDef.clearcoatRoughnessTexture = clearcoatRoughnessMapDef; - } - if (material.clearcoatNormalMap) { - const clearcoatNormalMapDef = { - index: writer.processTexture(material.clearcoatNormalMap), - texCoord: material.clearcoatNormalMap.channel - }; - writer.applyTextureTransform(clearcoatNormalMapDef, material.clearcoatNormalMap); - extensionDef.clearcoatNormalTexture = clearcoatNormalMapDef; - } - materialDef.extensions = materialDef.extensions || {}; - materialDef.extensions[this.name] = extensionDef; - extensionsUsed[this.name] = true; - } -}; -var GLTFMaterialsIridescenceExtension$1 = class { - constructor(writer) { - this.writer = writer; - this.name = "KHR_materials_iridescence"; - } - writeMaterial(material, materialDef) { - if (!material.isMeshPhysicalMaterial || material.iridescence === 0) return; - const writer = this.writer; - const extensionsUsed = writer.extensionsUsed; - const extensionDef = {}; - extensionDef.iridescenceFactor = material.iridescence; - if (material.iridescenceMap) { - const iridescenceMapDef = { - index: writer.processTexture(material.iridescenceMap), - texCoord: material.iridescenceMap.channel - }; - writer.applyTextureTransform(iridescenceMapDef, material.iridescenceMap); - extensionDef.iridescenceTexture = iridescenceMapDef; - } - extensionDef.iridescenceIor = material.iridescenceIOR; - extensionDef.iridescenceThicknessMinimum = material.iridescenceThicknessRange[0]; - extensionDef.iridescenceThicknessMaximum = material.iridescenceThicknessRange[1]; - if (material.iridescenceThicknessMap) { - const iridescenceThicknessMapDef = { - index: writer.processTexture(material.iridescenceThicknessMap), - texCoord: material.iridescenceThicknessMap.channel - }; - writer.applyTextureTransform(iridescenceThicknessMapDef, material.iridescenceThicknessMap); - extensionDef.iridescenceThicknessTexture = iridescenceThicknessMapDef; - } - materialDef.extensions = materialDef.extensions || {}; - materialDef.extensions[this.name] = extensionDef; - extensionsUsed[this.name] = true; - } -}; -var GLTFMaterialsTransmissionExtension$1 = class { - constructor(writer) { - this.writer = writer; - this.name = "KHR_materials_transmission"; - } - writeMaterial(material, materialDef) { - if (!material.isMeshPhysicalMaterial || material.transmission === 0) return; - const writer = this.writer; - const extensionsUsed = writer.extensionsUsed; - const extensionDef = {}; - extensionDef.transmissionFactor = material.transmission; - if (material.transmissionMap) { - const transmissionMapDef = { - index: writer.processTexture(material.transmissionMap), - texCoord: material.transmissionMap.channel - }; - writer.applyTextureTransform(transmissionMapDef, material.transmissionMap); - extensionDef.transmissionTexture = transmissionMapDef; - } - materialDef.extensions = materialDef.extensions || {}; - materialDef.extensions[this.name] = extensionDef; - extensionsUsed[this.name] = true; - } -}; -var GLTFMaterialsVolumeExtension$1 = class { - constructor(writer) { - this.writer = writer; - this.name = "KHR_materials_volume"; - } - writeMaterial(material, materialDef) { - if (!material.isMeshPhysicalMaterial || material.transmission === 0) return; - const writer = this.writer; - const extensionsUsed = writer.extensionsUsed; - const extensionDef = {}; - extensionDef.thicknessFactor = material.thickness; - if (material.thicknessMap) { - const thicknessMapDef = { - index: writer.processTexture(material.thicknessMap), - texCoord: material.thicknessMap.channel - }; - writer.applyTextureTransform(thicknessMapDef, material.thicknessMap); - extensionDef.thicknessTexture = thicknessMapDef; - } - extensionDef.attenuationDistance = material.attenuationDistance; - extensionDef.attenuationColor = material.attenuationColor.toArray(); - materialDef.extensions = materialDef.extensions || {}; - materialDef.extensions[this.name] = extensionDef; - extensionsUsed[this.name] = true; - } -}; -var GLTFMaterialsIorExtension$1 = class { - constructor(writer) { - this.writer = writer; - this.name = "KHR_materials_ior"; - } - writeMaterial(material, materialDef) { - if (!material.isMeshPhysicalMaterial || material.ior === 1.5) return; - const extensionsUsed = this.writer.extensionsUsed; - const extensionDef = {}; - extensionDef.ior = material.ior; - materialDef.extensions = materialDef.extensions || {}; - materialDef.extensions[this.name] = extensionDef; - extensionsUsed[this.name] = true; - } -}; -var GLTFMaterialsSpecularExtension$1 = class { - constructor(writer) { - this.writer = writer; - this.name = "KHR_materials_specular"; - } - writeMaterial(material, materialDef) { - if (!material.isMeshPhysicalMaterial || material.specularIntensity === 1 && material.specularColor.equals(DEFAULT_SPECULAR_COLOR) && !material.specularIntensityMap && !material.specularColorTexture) return; - const writer = this.writer; - const extensionsUsed = writer.extensionsUsed; - const extensionDef = {}; - if (material.specularIntensityMap) { - const specularIntensityMapDef = { - index: writer.processTexture(material.specularIntensityMap), - texCoord: material.specularIntensityMap.channel - }; - writer.applyTextureTransform(specularIntensityMapDef, material.specularIntensityMap); - extensionDef.specularTexture = specularIntensityMapDef; - } - if (material.specularColorMap) { - const specularColorMapDef = { - index: writer.processTexture(material.specularColorMap), - texCoord: material.specularColorMap.channel - }; - writer.applyTextureTransform(specularColorMapDef, material.specularColorMap); - extensionDef.specularColorTexture = specularColorMapDef; - } - extensionDef.specularFactor = material.specularIntensity; - extensionDef.specularColorFactor = material.specularColor.toArray(); - materialDef.extensions = materialDef.extensions || {}; - materialDef.extensions[this.name] = extensionDef; - extensionsUsed[this.name] = true; - } -}; -var GLTFMaterialsSheenExtension$1 = class { - constructor(writer) { - this.writer = writer; - this.name = "KHR_materials_sheen"; - } - writeMaterial(material, materialDef) { - if (!material.isMeshPhysicalMaterial || material.sheen == 0) return; - const writer = this.writer; - const extensionsUsed = writer.extensionsUsed; - const extensionDef = {}; - if (material.sheenRoughnessMap) { - const sheenRoughnessMapDef = { - index: writer.processTexture(material.sheenRoughnessMap), - texCoord: material.sheenRoughnessMap.channel - }; - writer.applyTextureTransform(sheenRoughnessMapDef, material.sheenRoughnessMap); - extensionDef.sheenRoughnessTexture = sheenRoughnessMapDef; - } - if (material.sheenColorMap) { - const sheenColorMapDef = { - index: writer.processTexture(material.sheenColorMap), - texCoord: material.sheenColorMap.channel - }; - writer.applyTextureTransform(sheenColorMapDef, material.sheenColorMap); - extensionDef.sheenColorTexture = sheenColorMapDef; - } - extensionDef.sheenRoughnessFactor = material.sheenRoughness; - extensionDef.sheenColorFactor = material.sheenColor.toArray(); - materialDef.extensions = materialDef.extensions || {}; - materialDef.extensions[this.name] = extensionDef; - extensionsUsed[this.name] = true; - } -}; -var GLTFMaterialsAnisotropyExtension$1 = class { - constructor(writer) { - this.writer = writer; - this.name = "KHR_materials_anisotropy"; - } - writeMaterial(material, materialDef) { - if (!material.isMeshPhysicalMaterial || material.anisotropy == 0) return; - const writer = this.writer; - const extensionsUsed = writer.extensionsUsed; - const extensionDef = {}; - if (material.anisotropyMap) { - const anisotropyMapDef = { index: writer.processTexture(material.anisotropyMap) }; - writer.applyTextureTransform(anisotropyMapDef, material.anisotropyMap); - extensionDef.anisotropyTexture = anisotropyMapDef; - } - extensionDef.anisotropyStrength = material.anisotropy; - extensionDef.anisotropyRotation = material.anisotropyRotation; - materialDef.extensions = materialDef.extensions || {}; - materialDef.extensions[this.name] = extensionDef; - extensionsUsed[this.name] = true; - } -}; -var GLTFMaterialsEmissiveStrengthExtension$1 = class { - constructor(writer) { - this.writer = writer; - this.name = "KHR_materials_emissive_strength"; - } - writeMaterial(material, materialDef) { - if (!material.isMeshStandardMaterial || material.emissiveIntensity === 1) return; - const extensionsUsed = this.writer.extensionsUsed; - const extensionDef = {}; - extensionDef.emissiveStrength = material.emissiveIntensity; - materialDef.extensions = materialDef.extensions || {}; - materialDef.extensions[this.name] = extensionDef; - extensionsUsed[this.name] = true; - } -}; -//#endregion -//#region node_modules/three-stdlib/node_modules/fflate/esm/browser.js -var u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array; -var fleb = new u8([ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 2, - 2, - 2, - 2, - 3, - 3, - 3, - 3, - 4, - 4, - 4, - 4, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0 -]); -var fdeb = new u8([ - 0, - 0, - 0, - 0, - 1, - 1, - 2, - 2, - 3, - 3, - 4, - 4, - 5, - 5, - 6, - 6, - 7, - 7, - 8, - 8, - 9, - 9, - 10, - 10, - 11, - 11, - 12, - 12, - 13, - 13, - 0, - 0 -]); -var clim = new u8([ - 16, - 17, - 18, - 0, - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15 -]); -var freb = function(eb, start) { - var b = new u16(31); - for (var i = 0; i < 31; ++i) b[i] = start += 1 << eb[i - 1]; - var r = new u32(b[30]); - for (var i = 1; i < 30; ++i) for (var j = b[i]; j < b[i + 1]; ++j) r[j] = j - b[i] << 5 | i; - return [b, r]; -}; -var _a = freb(fleb, 2), fl = _a[0], revfl = _a[1]; -fl[28] = 258, revfl[258] = 28; -var _b = freb(fdeb, 0), fd = _b[0], revfd = _b[1]; -var rev = new u16(32768); -for (var i$1 = 0; i$1 < 32768; ++i$1) { - var x = (i$1 & 43690) >>> 1 | (i$1 & 21845) << 1; - x = (x & 52428) >>> 2 | (x & 13107) << 2; - x = (x & 61680) >>> 4 | (x & 3855) << 4; - rev[i$1] = ((x & 65280) >>> 8 | (x & 255) << 8) >>> 1; -} -var hMap = (function(cd, mb, r) { - var s = cd.length; - var i = 0; - var l = new u16(mb); - for (; i < s; ++i) ++l[cd[i] - 1]; - var le = new u16(mb); - for (i = 0; i < mb; ++i) le[i] = le[i - 1] + l[i - 1] << 1; - var co; - if (r) { - co = new u16(1 << mb); - var rvb = 15 - mb; - for (i = 0; i < s; ++i) if (cd[i]) { - var sv = i << 4 | cd[i]; - var r_1 = mb - cd[i]; - var v = le[cd[i] - 1]++ << r_1; - for (var m = v | (1 << r_1) - 1; v <= m; ++v) co[rev[v] >>> rvb] = sv; - } - } else { - co = new u16(s); - for (i = 0; i < s; ++i) if (cd[i]) co[i] = rev[le[cd[i] - 1]++] >>> 15 - cd[i]; - } - return co; -}); -var flt = new u8(288); -for (var i$1 = 0; i$1 < 144; ++i$1) flt[i$1] = 8; -for (var i$1 = 144; i$1 < 256; ++i$1) flt[i$1] = 9; -for (var i$1 = 256; i$1 < 280; ++i$1) flt[i$1] = 7; -for (var i$1 = 280; i$1 < 288; ++i$1) flt[i$1] = 8; -var fdt = new u8(32); -for (var i$1 = 0; i$1 < 32; ++i$1) fdt[i$1] = 5; -var flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1); -var fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1); -var max = function(a) { - var m = a[0]; - for (var i = 1; i < a.length; ++i) if (a[i] > m) m = a[i]; - return m; -}; -var bits = function(d, p, m) { - var o = p / 8 | 0; - return (d[o] | d[o + 1] << 8) >> (p & 7) & m; -}; -var bits16 = function(d, p) { - var o = p / 8 | 0; - return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7); -}; -var shft = function(p) { - return (p / 8 | 0) + (p & 7 && 1); -}; -var slc = function(v, s, e) { - if (s == null || s < 0) s = 0; - if (e == null || e > v.length) e = v.length; - var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s); - n.set(v.subarray(s, e)); - return n; -}; -var inflt = function(dat, buf, st) { - var sl = dat.length; - if (!sl || st && !st.l && sl < 5) return buf || new u8(0); - var noBuf = !buf || st; - var noSt = !st || st.i; - if (!st) st = {}; - if (!buf) buf = new u8(sl * 3); - var cbuf = function(l) { - var bl = buf.length; - if (l > bl) { - var nbuf = new u8(Math.max(bl * 2, l)); - nbuf.set(buf); - buf = nbuf; - } - }; - var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n; - var tbts = sl * 8; - do { - if (!lm) { - st.f = final = bits(dat, pos, 1); - var type = bits(dat, pos + 1, 3); - pos += 3; - if (!type) { - var s = shft(pos) + 4, l = dat[s - 4] | dat[s - 3] << 8, t = s + l; - if (t > sl) { - if (noSt) throw "unexpected EOF"; - break; - } - if (noBuf) cbuf(bt + l); - buf.set(dat.subarray(s, t), bt); - st.b = bt += l, st.p = pos = t * 8; - continue; - } else if (type == 1) lm = flrm, dm = fdrm, lbt = 9, dbt = 5; - else if (type == 2) { - var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4; - var tl = hLit + bits(dat, pos + 5, 31) + 1; - pos += 14; - var ldt = new u8(tl); - var clt = new u8(19); - for (var i = 0; i < hcLen; ++i) clt[clim[i]] = bits(dat, pos + i * 3, 7); - pos += hcLen * 3; - var clb = max(clt), clbmsk = (1 << clb) - 1; - var clm = hMap(clt, clb, 1); - for (var i = 0; i < tl;) { - var r = clm[bits(dat, pos, clbmsk)]; - pos += r & 15; - var s = r >>> 4; - if (s < 16) ldt[i++] = s; - else { - var c = 0, n = 0; - if (s == 16) n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1]; - else if (s == 17) n = 3 + bits(dat, pos, 7), pos += 3; - else if (s == 18) n = 11 + bits(dat, pos, 127), pos += 7; - while (n--) ldt[i++] = c; - } - } - var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit); - lbt = max(lt); - dbt = max(dt); - lm = hMap(lt, lbt, 1); - dm = hMap(dt, dbt, 1); - } else throw "invalid block type"; - if (pos > tbts) { - if (noSt) throw "unexpected EOF"; - break; - } - } - if (noBuf) cbuf(bt + 131072); - var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1; - var lpos = pos; - for (;; lpos = pos) { - var c = lm[bits16(dat, pos) & lms], sym = c >>> 4; - pos += c & 15; - if (pos > tbts) { - if (noSt) throw "unexpected EOF"; - break; - } - if (!c) throw "invalid length/literal"; - if (sym < 256) buf[bt++] = sym; - else if (sym == 256) { - lpos = pos, lm = null; - break; - } else { - var add = sym - 254; - if (sym > 264) { - var i = sym - 257, b = fleb[i]; - add = bits(dat, pos, (1 << b) - 1) + fl[i]; - pos += b; - } - var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4; - if (!d) throw "invalid distance"; - pos += d & 15; - var dt = fd[dsym]; - if (dsym > 3) { - var b = fdeb[dsym]; - dt += bits16(dat, pos) & (1 << b) - 1, pos += b; - } - if (pos > tbts) { - if (noSt) throw "unexpected EOF"; - break; - } - if (noBuf) cbuf(bt + 131072); - var end = bt + add; - for (; bt < end; bt += 4) { - buf[bt] = buf[bt - dt]; - buf[bt + 1] = buf[bt + 1 - dt]; - buf[bt + 2] = buf[bt + 2 - dt]; - buf[bt + 3] = buf[bt + 3 - dt]; - } - bt = end; - } - } - st.l = lm, st.p = lpos, st.b = bt; - if (lm) final = 1, st.m = lbt, st.d = dm, st.n = dbt; - } while (!final); - return bt == buf.length ? buf : slc(buf, 0, bt); -}; -var wbits = function(d, p, v) { - v <<= p & 7; - var o = p / 8 | 0; - d[o] |= v; - d[o + 1] |= v >>> 8; -}; -var wbits16 = function(d, p, v) { - v <<= p & 7; - var o = p / 8 | 0; - d[o] |= v; - d[o + 1] |= v >>> 8; - d[o + 2] |= v >>> 16; -}; -var hTree = function(d, mb) { - var t = []; - for (var i = 0; i < d.length; ++i) if (d[i]) t.push({ - s: i, - f: d[i] - }); - var s = t.length; - var t2 = t.slice(); - if (!s) return [et, 0]; - if (s == 1) { - var v = new u8(t[0].s + 1); - v[t[0].s] = 1; - return [v, 1]; - } - t.sort(function(a, b) { - return a.f - b.f; - }); - t.push({ - s: -1, - f: 25001 - }); - var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2; - t[0] = { - s: -1, - f: l.f + r.f, - l, - r - }; - while (i1 != s - 1) { - l = t[t[i0].f < t[i2].f ? i0++ : i2++]; - r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++]; - t[i1++] = { - s: -1, - f: l.f + r.f, - l, - r - }; - } - var maxSym = t2[0].s; - for (var i = 1; i < s; ++i) if (t2[i].s > maxSym) maxSym = t2[i].s; - var tr = new u16(maxSym + 1); - var mbt = ln(t[i1 - 1], tr, 0); - if (mbt > mb) { - var i = 0, dt = 0; - var lft = mbt - mb, cst = 1 << lft; - t2.sort(function(a, b) { - return tr[b.s] - tr[a.s] || a.f - b.f; - }); - for (; i < s; ++i) { - var i2_1 = t2[i].s; - if (tr[i2_1] > mb) { - dt += cst - (1 << mbt - tr[i2_1]); - tr[i2_1] = mb; - } else break; - } - dt >>>= lft; - while (dt > 0) { - var i2_2 = t2[i].s; - if (tr[i2_2] < mb) dt -= 1 << mb - tr[i2_2]++ - 1; - else ++i; - } - for (; i >= 0 && dt; --i) { - var i2_3 = t2[i].s; - if (tr[i2_3] == mb) { - --tr[i2_3]; - ++dt; - } - } - mbt = mb; - } - return [new u8(tr), mbt]; -}; -var ln = function(n, l, d) { - return n.s == -1 ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1)) : l[n.s] = d; -}; -var lc = function(c) { - var s = c.length; - while (s && !c[--s]); - var cl = new u16(++s); - var cli = 0, cln = c[0], cls = 1; - var w = function(v) { - cl[cli++] = v; - }; - for (var i = 1; i <= s; ++i) if (c[i] == cln && i != s) ++cls; - else { - if (!cln && cls > 2) { - for (; cls > 138; cls -= 138) w(32754); - if (cls > 2) { - w(cls > 10 ? cls - 11 << 5 | 28690 : cls - 3 << 5 | 12305); - cls = 0; - } - } else if (cls > 3) { - w(cln), --cls; - for (; cls > 6; cls -= 6) w(8304); - if (cls > 2) w(cls - 3 << 5 | 8208), cls = 0; - } - while (cls--) w(cln); - cls = 1; - cln = c[i]; - } - return [cl.subarray(0, cli), s]; -}; -var clen = function(cf, cl) { - var l = 0; - for (var i = 0; i < cl.length; ++i) l += cf[i] * cl[i]; - return l; -}; -var wfblk = function(out, pos, dat) { - var s = dat.length; - var o = shft(pos + 2); - out[o] = s & 255; - out[o + 1] = s >>> 8; - out[o + 2] = out[o] ^ 255; - out[o + 3] = out[o + 1] ^ 255; - for (var i = 0; i < s; ++i) out[o + i + 4] = dat[i]; - return (o + 4 + s) * 8; -}; -var wblk = function(dat, out, final, syms, lf, df, eb, li, bs, bl, p) { - wbits(out, p++, final); - ++lf[256]; - var _a = hTree(lf, 15), dlt = _a[0], mlb = _a[1]; - var _b = hTree(df, 15), ddt = _b[0], mdb = _b[1]; - var _c = lc(dlt), lclt = _c[0], nlc = _c[1]; - var _d = lc(ddt), lcdt = _d[0], ndc = _d[1]; - var lcfreq = new u16(19); - for (var i = 0; i < lclt.length; ++i) lcfreq[lclt[i] & 31]++; - for (var i = 0; i < lcdt.length; ++i) lcfreq[lcdt[i] & 31]++; - var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1]; - var nlcc = 19; - for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc); - var flen = bl + 5 << 3; - var ftlen = clen(lf, flt) + clen(df, fdt) + eb; - var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]); - if (flen <= ftlen && flen <= dtlen) return wfblk(out, p, dat.subarray(bs, bs + bl)); - var lm, ll, dm, dl; - wbits(out, p, 1 + (dtlen < ftlen)), p += 2; - if (dtlen < ftlen) { - lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt; - var llm = hMap(lct, mlcb, 0); - wbits(out, p, nlc - 257); - wbits(out, p + 5, ndc - 1); - wbits(out, p + 10, nlcc - 4); - p += 14; - for (var i = 0; i < nlcc; ++i) wbits(out, p + 3 * i, lct[clim[i]]); - p += 3 * nlcc; - var lcts = [lclt, lcdt]; - for (var it = 0; it < 2; ++it) { - var clct = lcts[it]; - for (var i = 0; i < clct.length; ++i) { - var len = clct[i] & 31; - wbits(out, p, llm[len]), p += lct[len]; - if (len > 15) wbits(out, p, clct[i] >>> 5 & 127), p += clct[i] >>> 12; - } - } - } else lm = flm, ll = flt, dm = fdm, dl = fdt; - for (var i = 0; i < li; ++i) if (syms[i] > 255) { - var len = syms[i] >>> 18 & 31; - wbits16(out, p, lm[len + 257]), p += ll[len + 257]; - if (len > 7) wbits(out, p, syms[i] >>> 23 & 31), p += fleb[len]; - var dst = syms[i] & 31; - wbits16(out, p, dm[dst]), p += dl[dst]; - if (dst > 3) wbits16(out, p, syms[i] >>> 5 & 8191), p += fdeb[dst]; - } else wbits16(out, p, lm[syms[i]]), p += ll[syms[i]]; - wbits16(out, p, lm[256]); - return p + ll[256]; -}; -var deo = /*#__PURE__*/ new u32([ - 65540, - 131080, - 131088, - 131104, - 262176, - 1048704, - 1048832, - 2114560, - 2117632 -]); -var et = /*#__PURE__*/ new u8(0); -var dflt = function(dat, lvl, plvl, pre, post, lst) { - var s = dat.length; - var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7e3)) + post); - var w = o.subarray(pre, o.length - post); - var pos = 0; - if (!lvl || s < 8) for (var i = 0; i <= s; i += 65535) { - var e = i + 65535; - if (e < s) pos = wfblk(w, pos, dat.subarray(i, e)); - else { - w[i] = lst; - pos = wfblk(w, pos, dat.subarray(i, s)); - } - } - else { - var opt = deo[lvl - 1]; - var n = opt >>> 13, c = opt & 8191; - var msk_1 = (1 << plvl) - 1; - var prev = new u16(32768), head = new u16(msk_1 + 1); - var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1; - var hsh = function(i) { - return (dat[i] ^ dat[i + 1] << bs1_1 ^ dat[i + 2] << bs2_1) & msk_1; - }; - var syms = new u32(25e3); - var lf = new u16(288), df = new u16(32); - var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0; - for (; i < s; ++i) { - var hv = hsh(i); - var imod = i & 32767, pimod = head[hv]; - prev[imod] = pimod; - head[hv] = imod; - if (wi <= i) { - var rem = s - i; - if ((lc_1 > 7e3 || li > 24576) && rem > 423) { - pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos); - li = lc_1 = eb = 0, bs = i; - for (var j = 0; j < 286; ++j) lf[j] = 0; - for (var j = 0; j < 30; ++j) df[j] = 0; - } - var l = 2, d = 0, ch_1 = c, dif = imod - pimod & 32767; - if (rem > 2 && hv == hsh(i - dif)) { - var maxn = Math.min(n, rem) - 1; - var maxd = Math.min(32767, i); - var ml = Math.min(258, rem); - while (dif <= maxd && --ch_1 && imod != pimod) { - if (dat[i + l] == dat[i + l - dif]) { - var nl = 0; - for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl); - if (nl > l) { - l = nl, d = dif; - if (nl > maxn) break; - var mmd = Math.min(dif, nl - 2); - var md = 0; - for (var j = 0; j < mmd; ++j) { - var ti = i - dif + j + 32768 & 32767; - var cd = ti - prev[ti] + 32768 & 32767; - if (cd > md) md = cd, pimod = ti; - } - } - } - imod = pimod, pimod = prev[imod]; - dif += imod - pimod + 32768 & 32767; - } - } - if (d) { - syms[li++] = 268435456 | revfl[l] << 18 | revfd[d]; - var lin = revfl[l] & 31, din = revfd[d] & 31; - eb += fleb[lin] + fdeb[din]; - ++lf[257 + lin]; - ++df[din]; - wi = i + l; - ++lc_1; - } else { - syms[li++] = dat[i]; - ++lf[dat[i]]; - } - } - } - pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos); - if (!lst && pos & 7) pos = wfblk(w, pos + 1, et); - } - return slc(o, 0, pre + shft(pos) + post); -}; -var crct = /*#__PURE__*/ (function() { - var t = new Int32Array(256); - for (var i = 0; i < 256; ++i) { - var c = i, k = 9; - while (--k) c = (c & 1 && -306674912) ^ c >>> 1; - t[i] = c; - } - return t; -})(); -var crc = function() { - var c = -1; - return { - p: function(d) { - var cr = c; - for (var i = 0; i < d.length; ++i) cr = crct[cr & 255 ^ d[i]] ^ cr >>> 8; - c = cr; - }, - d: function() { - return ~c; - } - }; -}; -var dopt = function(dat, opt, pre, post, st) { - return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : 12 + opt.mem, pre, post, !st); -}; -var mrg = function(a, b) { - var o = {}; - for (var k in a) o[k] = a[k]; - for (var k in b) o[k] = b[k]; - return o; -}; -var b2 = function(d, b) { - return d[b] | d[b + 1] << 8; -}; -var b4 = function(d, b) { - return (d[b] | d[b + 1] << 8 | d[b + 2] << 16 | d[b + 3] << 24) >>> 0; -}; -var b8 = function(d, b) { - return b4(d, b) + b4(d, b + 4) * 4294967296; -}; -var wbytes = function(d, b, v) { - for (; v; ++b) d[b] = v, v >>>= 8; -}; -var gzs = function(d) { - if (d[0] != 31 || d[1] != 139 || d[2] != 8) throw "invalid gzip data"; - var flg = d[3]; - var st = 10; - if (flg & 4) st += d[10] | (d[11] << 8) + 2; - for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++]); - return st + (flg & 2); -}; -var gzl = function(d) { - var l = d.length; - return (d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16 | d[l - 1] << 24) >>> 0; -}; -var zlv = function(d) { - if ((d[0] & 15) != 8 || d[0] >>> 4 > 7 || (d[0] << 8 | d[1]) % 31) throw "invalid zlib data"; - if (d[1] & 32) throw "invalid zlib data: preset dictionaries not supported"; -}; -/** -* Compresses data with DEFLATE without any wrapper -* @param data The data to compress -* @param opts The compression options -* @returns The deflated version of the data -*/ -function deflateSync(data, opts) { - return dopt(data, opts || {}, 0, 0); -} -/** -* Expands DEFLATE data with no wrapper -* @param data The data to decompress -* @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length. -* @returns The decompressed version of the data -*/ -function inflateSync(data, out) { - return inflt(data, out); -} -/** -* Expands GZIP data -* @param data The data to decompress -* @param out Where to write the data. GZIP already encodes the output size, so providing this doesn't save memory. -* @returns The decompressed version of the data -*/ -function gunzipSync(data, out) { - return inflt(data.subarray(gzs(data), -8), out || new u8(gzl(data))); -} -/** -* Expands Zlib data -* @param data The data to decompress -* @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length. -* @returns The decompressed version of the data -*/ -function unzlibSync(data, out) { - return inflt((zlv(data), data.subarray(2, -4)), out); -} -var fltn = function(d, p, t, o) { - for (var k in d) { - var val = d[k], n = p + k; - if (val instanceof u8) t[n] = [val, o]; - else if (Array.isArray(val)) t[n] = [val[0], mrg(o, val[1])]; - else fltn(val, n + "/", t, o); - } -}; -var te = typeof TextEncoder != "undefined" && /*#__PURE__*/ new TextEncoder(); -var td = typeof TextDecoder != "undefined" && /*#__PURE__*/ new TextDecoder(); -try { - td.decode(et, { stream: true }); -} catch (e) {} -var dutf8 = function(d) { - for (var r = "", i = 0;;) { - var c = d[i++]; - var eb = (c > 127) + (c > 223) + (c > 239); - if (i + eb > d.length) return [r, slc(d, i - 1)]; - if (!eb) r += String.fromCharCode(c); - else if (eb == 3) c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | d[i++] & 63) - 65536, r += String.fromCharCode(55296 | c >> 10, 56320 | c & 1023); - else if (eb & 1) r += String.fromCharCode((c & 31) << 6 | d[i++] & 63); - else r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | d[i++] & 63); - } -}; -/** -* Converts a string into a Uint8Array for use with compression/decompression methods -* @param str The string to encode -* @param latin1 Whether or not to interpret the data as Latin-1. This should -* not need to be true unless decoding a binary string. -* @returns The string encoded in UTF-8/Latin-1 binary -*/ -function strToU8(str, latin1) { - if (latin1) { - var ar_1 = new u8(str.length); - for (var i = 0; i < str.length; ++i) ar_1[i] = str.charCodeAt(i); - return ar_1; - } - if (te) return te.encode(str); - var l = str.length; - var ar = new u8(str.length + (str.length >> 1)); - var ai = 0; - var w = function(v) { - ar[ai++] = v; - }; - for (var i = 0; i < l; ++i) { - if (ai + 5 > ar.length) { - var n = new u8(ai + 8 + (l - i << 1)); - n.set(ar); - ar = n; - } - var c = str.charCodeAt(i); - if (c < 128 || latin1) w(c); - else if (c < 2048) w(192 | c >> 6), w(128 | c & 63); - else if (c > 55295 && c < 57344) c = 65536 + (c & 1047552) | str.charCodeAt(++i) & 1023, w(240 | c >> 18), w(128 | c >> 12 & 63), w(128 | c >> 6 & 63), w(128 | c & 63); - else w(224 | c >> 12), w(128 | c >> 6 & 63), w(128 | c & 63); - } - return slc(ar, 0, ai); -} -/** -* Converts a Uint8Array to a string -* @param dat The data to decode to string -* @param latin1 Whether or not to interpret the data as Latin-1. This should -* not need to be true unless encoding to binary string. -* @returns The original UTF-8/Latin-1 string -*/ -function strFromU8(dat, latin1) { - if (latin1) { - var r = ""; - for (var i = 0; i < dat.length; i += 16384) r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384)); - return r; - } else if (td) return td.decode(dat); - else { - var _a = dutf8(dat), out = _a[0]; - if (_a[1].length) throw "invalid utf-8 data"; - return out; - } -} -var slzh = function(d, b) { - return b + 30 + b2(d, b + 26) + b2(d, b + 28); -}; -var zh = function(d, b, z) { - var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20); - var _a = z && bs == 4294967295 ? z64e(d, es) : [ - bs, - b4(d, b + 24), - b4(d, b + 42) - ], sc = _a[0], su = _a[1], off = _a[2]; - return [ - b2(d, b + 10), - sc, - su, - fn, - es + b2(d, b + 30) + b2(d, b + 32), - off - ]; -}; -var z64e = function(d, b) { - for (; b2(d, b) != 1; b += 4 + b2(d, b + 2)); - return [ - b8(d, b + 12), - b8(d, b + 4), - b8(d, b + 20) - ]; -}; -var exfl = function(ex) { - var le = 0; - if (ex) for (var k in ex) { - var l = ex[k].length; - if (l > 65535) throw "extra field too long"; - le += l + 4; - } - return le; -}; -var wzh = function(d, b, f, fn, u, c, ce, co) { - var fl = fn.length, ex = f.extra, col = co && co.length; - var exl = exfl(ex); - wbytes(d, b, ce != null ? 33639248 : 67324752), b += 4; - if (ce != null) d[b++] = 20, d[b++] = f.os; - d[b] = 20, b += 2; - d[b++] = f.flag << 1 | (c == null && 8), d[b++] = u && 8; - d[b++] = f.compression & 255, d[b++] = f.compression >> 8; - var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980; - if (y < 0 || y > 119) throw "date not in range 1980-2099"; - wbytes(d, b, y << 25 | dt.getMonth() + 1 << 21 | dt.getDate() << 16 | dt.getHours() << 11 | dt.getMinutes() << 5 | dt.getSeconds() >>> 1), b += 4; - if (c != null) { - wbytes(d, b, f.crc); - wbytes(d, b + 4, c); - wbytes(d, b + 8, f.size); - } - wbytes(d, b + 12, fl); - wbytes(d, b + 14, exl), b += 16; - if (ce != null) { - wbytes(d, b, col); - wbytes(d, b + 6, f.attrs); - wbytes(d, b + 10, ce), b += 14; - } - d.set(fn, b); - b += fl; - if (exl) for (var k in ex) { - var exf = ex[k], l = exf.length; - wbytes(d, b, +k); - wbytes(d, b + 2, l); - d.set(exf, b + 4), b += 4 + l; - } - if (col) d.set(co, b), b += col; - return b; -}; -var wzf = function(o, b, c, d, e) { - wbytes(o, b, 101010256); - wbytes(o, b + 8, c); - wbytes(o, b + 10, c); - wbytes(o, b + 12, d); - wbytes(o, b + 16, e); -}; -/** -* Synchronously creates a ZIP file. Prefer using `zip` for better performance -* with more than one file. -* @param data The directory structure for the ZIP archive -* @param opts The main options, merged with per-file options -* @returns The generated ZIP archive -*/ -function zipSync(data, opts) { - if (!opts) opts = {}; - var r = {}; - var files = []; - fltn(data, "", r, opts); - var o = 0; - var tot = 0; - for (var fn in r) { - var _a = r[fn], file = _a[0], p = _a[1]; - var compression = p.level == 0 ? 0 : 8; - var f = strToU8(fn), s = f.length; - var com = p.comment, m = com && strToU8(com), ms = m && m.length; - var exl = exfl(p.extra); - if (s > 65535) throw "filename too long"; - var d = compression ? deflateSync(file, p) : file, l = d.length; - var c = crc(); - c.p(file); - files.push(mrg(p, { - size: file.length, - crc: c.d(), - c: d, - f, - m, - u: s != fn.length || m && com.length != ms, - o, - compression - })); - o += 30 + s + exl + l; - tot += 76 + 2 * (s + exl) + (ms || 0) + l; - } - var out = new u8(tot + 22), oe = o, cdl = tot - o; - for (var i = 0; i < files.length; ++i) { - var f = files[i]; - wzh(out, f.o, f, f.f, f.u, f.c.length); - var badd = 30 + f.f.length + exfl(f.extra); - out.set(f.c, f.o + badd); - wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0); - } - wzf(out, o, files.length, cdl, oe); - return out; -} -/** -* Synchronously decompresses a ZIP archive. Prefer using `unzip` for better -* performance with more than one file. -* @param data The raw compressed ZIP file -* @returns The decompressed files -*/ -function unzipSync(data) { - var files = {}; - var e = data.length - 22; - for (; b4(data, e) != 101010256; --e) if (!e || data.length - e > 65558) throw "invalid zip file"; - var c = b2(data, e + 8); - if (!c) return {}; - var o = b4(data, e + 16); - var z = o == 4294967295; - if (z) { - e = b4(data, e - 12); - if (b4(data, e) != 101075792) throw "invalid zip file"; - c = b4(data, e + 32); - o = b4(data, e + 48); - } - for (var i = 0; i < c; ++i) { - var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off); - o = no; - if (!c_2) files[fn] = slc(data, b, b + sc); - else if (c_2 == 8) files[fn] = inflateSync(data.subarray(b, b + sc), new u8(su)); - else throw "unknown compression type " + c_2; - } - return files; -} -//#endregion -//#region node_modules/three-stdlib/exporters/USDZExporter.js -var __defProp$53 = Object.defineProperty; -var __defNormalProp$53 = (obj, key, value) => key in obj ? __defProp$53(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$53 = (obj, key, value) => { - __defNormalProp$53(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var USDZExporter = class { - constructor() { - __publicField$53(this, "PRECISION", 7); - __publicField$53(this, "materials"); - __publicField$53(this, "textures"); - __publicField$53(this, "files"); - this.materials = {}; - this.textures = {}; - this.files = {}; - } - async parse(scene) { - const modelFileName = "model.usda"; - this.files[modelFileName] = null; - let output = this.buildHeader(); - scene.traverseVisible((object) => { - if (object instanceof Mesh && object.isMesh && object.material.isMeshStandardMaterial) { - const geometry = object.geometry; - const material = object.material; - const geometryFileName = "geometries/Geometry_" + geometry.id + ".usd"; - if (!(geometryFileName in this.files)) { - const meshObject = this.buildMeshObject(geometry); - this.files[geometryFileName] = this.buildUSDFileAsString(meshObject); - } - if (!(material.uuid in this.materials)) this.materials[material.uuid] = material; - output += this.buildXform(object, geometry, material); - } - }); - output += this.buildMaterials(this.materials); - this.files[modelFileName] = strToU8(output); - output = null; - for (const id in this.textures) { - const texture = this.textures[id]; - const color = id.split("_")[1]; - const isRGBA = texture.format === 1023; - const canvas = this.imageToCanvas(texture.image, color); - const blob = await new Promise((resolve) => canvas == null ? void 0 : canvas.toBlob(resolve, isRGBA ? "image/png" : "image/jpeg", 1)); - if (blob) this.files[`textures/Texture_${id}.${isRGBA ? "png" : "jpg"}`] = new Uint8Array(await blob.arrayBuffer()); - } - let offset = 0; - for (const filename in this.files) { - const file = this.files[filename]; - const headerSize = 34 + filename.length; - offset += headerSize; - const offsetMod64 = offset & 63; - if (offsetMod64 !== 4 && file !== null && file instanceof Uint8Array) { - const padLength = 64 - offsetMod64; - const padding = new Uint8Array(padLength); - this.files[filename] = [file, { extra: { 12345: padding } }]; - } - if (file && typeof file.length === "number") offset = file.length; - } - return zipSync(this.files, { level: 0 }); - } - imageToCanvas(image, color) { - if (typeof HTMLImageElement !== "undefined" && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== "undefined" && image instanceof HTMLCanvasElement || typeof OffscreenCanvas !== "undefined" && image instanceof OffscreenCanvas || typeof ImageBitmap !== "undefined" && image instanceof ImageBitmap) { - const scale = 1024 / Math.max(image.width, image.height); - const canvas = document.createElement("canvas"); - canvas.width = image.width * Math.min(1, scale); - canvas.height = image.height * Math.min(1, scale); - const context = canvas.getContext("2d"); - context?.drawImage(image, 0, 0, canvas.width, canvas.height); - if (color !== void 0) { - const hex = parseInt(color, 16); - const r = (hex >> 16 & 255) / 255; - const g = (hex >> 8 & 255) / 255; - const b = (hex & 255) / 255; - const imagedata = context == null ? void 0 : context.getImageData(0, 0, canvas.width, canvas.height); - if (imagedata) { - const data = imagedata == null ? void 0 : imagedata.data; - for (let i = 0; i < data.length; i += 4) { - data[i + 0] = data[i + 0] * r; - data[i + 1] = data[i + 1] * g; - data[i + 2] = data[i + 2] * b; - } - context?.putImageData(imagedata, 0, 0); - } - } - return canvas; - } - } - buildHeader() { - return `#usda 1.0 -( - customLayerData = { - string creator = "Three.js USDZExporter" - } - metersPerUnit = 1 - upAxis = "Y" -) -`; - } - buildUSDFileAsString(dataToInsert) { - let output = this.buildHeader(); - output += dataToInsert; - return strToU8(output); - } - buildXform(object, geometry, material) { - const name = "Object_" + object.id; - const transform = this.buildMatrix(object.matrixWorld); - if (object.matrixWorld.determinant() < 0) console.warn("THREE.USDZExporter: USDZ does not support negative scales", object); - return `def Xform "${name}" ( - prepend references = @./geometries/Geometry_${geometry.id}.usd@</Geometry> -) -{ - matrix4d xformOp:transform = ${transform} - uniform token[] xformOpOrder = ["xformOp:transform"] - rel material:binding = </Materials/Material_${material.id}> -} -`; - } - buildMatrix(matrix) { - const array = matrix.elements; - return `( ${this.buildMatrixRow(array, 0)}, ${this.buildMatrixRow(array, 4)}, ${this.buildMatrixRow(array, 8)}, ${this.buildMatrixRow(array, 12)} )`; - } - buildMatrixRow(array, offset) { - return `(${array[offset + 0]}, ${array[offset + 1]}, ${array[offset + 2]}, ${array[offset + 3]})`; - } - buildMeshObject(geometry) { - return ` -def "Geometry" -{ - ${this.buildMesh(geometry)} -} -`; - } - buildMesh(geometry) { - const name = "Geometry"; - const attributes = geometry.attributes; - const count = attributes.position.count; - return ` - def Mesh "${name}" - { - int[] faceVertexCounts = [${this.buildMeshVertexCount(geometry)}] - int[] faceVertexIndices = [${this.buildMeshVertexIndices(geometry)}] - normal3f[] normals = [${this.buildVector3Array(attributes.normal, count)}] ( - interpolation = "vertex" - ) - point3f[] points = [${this.buildVector3Array(attributes.position, count)}] - float2[] primvars:st = [${this.buildVector2Array(attributes.uv, count)}] ( - interpolation = "vertex" - ) - uniform token subdivisionScheme = "none" - } -`; - } - buildMeshVertexCount(geometry) { - const count = geometry.index !== null ? geometry.index.array.length : geometry.attributes.position.count; - return Array(count / 3).fill(3).join(", "); - } - buildMeshVertexIndices(geometry) { - if (geometry.index !== null) return geometry.index.array.join(", "); - const array = []; - const length = geometry.attributes.position.count; - for (let i = 0; i < length; i++) array.push(i); - return array.join(", "); - } - buildVector3Array(attribute, count) { - if (attribute === void 0) { - console.warn("USDZExporter: Normals missing."); - return Array(count).fill("(0, 0, 0)").join(", "); - } - const array = []; - const data = attribute.array; - for (let i = 0; i < data.length; i += 3) array.push(`(${data[i + 0].toPrecision(this.PRECISION)}, ${data[i + 1].toPrecision(this.PRECISION)}, ${data[i + 2].toPrecision(this.PRECISION)})`); - return array.join(", "); - } - buildVector2Array(attribute, count) { - if (attribute === void 0) { - console.warn("USDZExporter: UVs missing."); - return Array(count).fill("(0, 0)").join(", "); - } - const array = []; - const data = attribute.array; - for (let i = 0; i < data.length; i += 2) array.push(`(${data[i + 0].toPrecision(this.PRECISION)}, ${1 - data[i + 1].toPrecision(this.PRECISION)})`); - return array.join(", "); - } - buildMaterials(materials) { - const array = []; - for (const uuid in materials) { - const material = materials[uuid]; - array.push(this.buildMaterial(material)); - } - return `def "Materials" -{ -${array.join("")} -} -`; - } - buildMaterial(material) { - const pad = " "; - const inputs = []; - const samplers = []; - if (material.map !== null) { - inputs.push(`${pad}color3f inputs:diffuseColor.connect = </Materials/Material_${material.id}/Texture_${material.map.id}_diffuse.outputs:rgb>`); - if (material.transparent || material.alphaTest > 0) inputs.push(`${pad}float inputs:opacity.connect = </Materials/Material_${material.id}/Texture_${material.map.id}_diffuse.outputs:a>`); - if (material.alphaTest > .01) inputs.push(`${pad}float inputs:opacityThreshold = ${material.alphaTest}`); - else if (material.transparent || material.alphaTest > 0) inputs.push(`${pad}float inputs:opacityThreshold = 0.01`); - samplers.push(this.buildTexture(material, material.map, "diffuse", material.color)); - } else inputs.push(`${pad}color3f inputs:diffuseColor = ${this.buildColor(material.color)}`); - if (material.emissiveMap !== null) { - inputs.push(`${pad}color3f inputs:emissiveColor.connect = </Materials/Material_${material.id}/Texture_${material.emissiveMap.id}_emissive.outputs:rgb>`); - samplers.push(this.buildTexture(material, material.emissiveMap, "emissive")); - } else if (material.emissive.getHex() > 0) inputs.push(`${pad}color3f inputs:emissiveColor = ${this.buildColor(material.emissive)}`); - if (material.normalMap !== null) { - inputs.push(`${pad}normal3f inputs:normal.connect = </Materials/Material_${material.id}/Texture_${material.normalMap.id}_normal.outputs:rgb>`); - samplers.push(this.buildTexture(material, material.normalMap, "normal")); - } - if (material.aoMap !== null) { - inputs.push(`${pad}float inputs:occlusion.connect = </Materials/Material_${material.id}/Texture_${material.aoMap.id}_occlusion.outputs:r>`); - samplers.push(this.buildTexture(material, material.aoMap, "occlusion")); - } - if (material.roughnessMap !== null && material.roughness === 1) { - inputs.push(`${pad}float inputs:roughness.connect = </Materials/Material_${material.id}/Texture_${material.roughnessMap.id}_roughness.outputs:g>`); - samplers.push(this.buildTexture(material, material.roughnessMap, "roughness")); - } else inputs.push(`${pad}float inputs:roughness = ${material.roughness}`); - if (material.metalnessMap !== null && material.metalness === 1) { - inputs.push(`${pad}float inputs:metallic.connect = </Materials/Material_${material.id}/Texture_${material.metalnessMap.id}_metallic.outputs:b>`); - samplers.push(this.buildTexture(material, material.metalnessMap, "metallic")); - } else inputs.push(`${pad}float inputs:metallic = ${material.metalness}`); - inputs.push(`${pad}float inputs:opacity = ${material.opacity}`); - if (material instanceof MeshPhysicalMaterial) { - inputs.push(`${pad}float inputs:clearcoat = ${material.clearcoat}`); - inputs.push(`${pad}float inputs:clearcoatRoughness = ${material.clearcoatRoughness}`); - inputs.push(`${pad}float inputs:ior = ${material.ior}`); - } - return ` - def Material "Material_${material.id}" - { - def Shader "PreviewSurface" - { - uniform token info:id = "UsdPreviewSurface" -${inputs.join("\n")} - int inputs:useSpecularWorkflow = 0 - token outputs:surface - } - token outputs:surface.connect = </Materials/Material_${material.id}/PreviewSurface.outputs:surface> - token inputs:frame:stPrimvarName = "st" - def Shader "uvReader_st" - { - uniform token info:id = "UsdPrimvarReader_float2" - token inputs:varname.connect = </Materials/Material_${material.id}.inputs:frame:stPrimvarName> - float2 inputs:fallback = (0.0, 0.0) - float2 outputs:result - } -${samplers.join("\n")} - } -`; - } - buildTexture(material, texture, mapType, color) { - const id = texture.id + (color ? "_" + color.getHexString() : ""); - const isRGBA = texture.format === 1023; - this.textures[id] = texture; - return ` - def Shader "Transform2d_${mapType}" ( - sdrMetadata = { - string role = "math" - } - ) - { - uniform token info:id = "UsdTransform2d" - float2 inputs:in.connect = </Materials/Material_${material.id}/uvReader_st.outputs:result> - float2 inputs:scale = ${this.buildVector2(texture.repeat)} - float2 inputs:translation = ${this.buildVector2(texture.offset)} - float2 outputs:result - } - def Shader "Texture_${texture.id}_${mapType}" - { - uniform token info:id = "UsdUVTexture" - asset inputs:file = @textures/Texture_${id}.${isRGBA ? "png" : "jpg"}@ - float2 inputs:st.connect = </Materials/Material_${material.id}/Transform2d_${mapType}.outputs:result> - token inputs:wrapS = "repeat" - token inputs:wrapT = "repeat" - float outputs:r - float outputs:g - float outputs:b - float3 outputs:rgb - ${material.transparent || material.alphaTest > 0 ? "float outputs:a" : ""} - }`; - } - buildColor(color) { - return `(${color.r}, ${color.g}, ${color.b})`; - } - buildVector2(vector) { - return `(${vector.x}, ${vector.y})`; - } -}; -//#endregion -//#region node_modules/three-stdlib/exporters/PLYExporter.js -var PLYExporter = class { - parse(object, onDone, options) { - if (onDone && typeof onDone === "object") { - console.warn("THREE.PLYExporter: The options parameter is now the third argument to the \"parse\" function. See the documentation for the new API."); - options = onDone; - onDone = void 0; - } - options = Object.assign({ - binary: false, - excludeAttributes: [], - littleEndian: false - }, options); - const excludeAttributes = options.excludeAttributes; - let includeNormals = false; - let includeColors = false; - let includeUVs = false; - let vertexCount = 0; - let faceCount = 0; - object.traverse(function(child) { - if (child instanceof Mesh && child.isMesh) { - const geometry = child.geometry; - if (!geometry.isBufferGeometry) throw new Error("THREE.PLYExporter: Geometry is not of type THREE.BufferGeometry."); - const vertices = geometry.getAttribute("position"); - const normals = geometry.getAttribute("normal"); - const uvs = geometry.getAttribute("uv"); - const colors = geometry.getAttribute("color"); - const indices = geometry.getIndex(); - if (vertices === void 0) return; - vertexCount += vertices.count; - faceCount += indices ? indices.count / 3 : vertices.count / 3; - if (normals !== void 0) includeNormals = true; - if (uvs !== void 0) includeUVs = true; - if (colors !== void 0) includeColors = true; - } - }); - const includeIndices = (excludeAttributes == null ? void 0 : excludeAttributes.indexOf("index")) === -1; - includeNormals = includeNormals && (excludeAttributes == null ? void 0 : excludeAttributes.indexOf("normal")) === -1; - includeColors = includeColors && (excludeAttributes == null ? void 0 : excludeAttributes.indexOf("color")) === -1; - includeUVs = includeUVs && (excludeAttributes == null ? void 0 : excludeAttributes.indexOf("uv")) === -1; - if (includeIndices && faceCount !== Math.floor(faceCount)) { - console.error("PLYExporter: Failed to generate a valid PLY file with triangle indices because the number of indices is not divisible by 3."); - return null; - } - const indexByteCount = 4; - let header = `ply -format ${options.binary ? options.littleEndian ? "binary_little_endian" : "binary_big_endian" : "ascii"} 1.0 -element vertex ${vertexCount} -property float x -property float y -property float z -`; - if (includeNormals) header += "property float nx\nproperty float ny\nproperty float nz\n"; - if (includeUVs) header += "property float s\nproperty float t\n"; - if (includeColors) header += "property uchar red\nproperty uchar green\nproperty uchar blue\n"; - if (includeIndices) header += `${`element face ${faceCount} -`}property list uchar int vertex_index -`; - header += "end_header\n"; - const vertex = new Vector3(); - const normalMatrixWorld = new Matrix3(); - let result = null; - if (options.binary) { - const headerBin = new TextEncoder().encode(header); - const vertexListLength = vertexCount * (12 + (includeNormals ? 12 : 0) + (includeColors ? 3 : 0) + (includeUVs ? 8 : 0)); - const faceListLength = includeIndices ? faceCount * 13 : 0; - const output = new DataView(new ArrayBuffer(headerBin.length + vertexListLength + faceListLength)); - new Uint8Array(output.buffer).set(headerBin, 0); - let vOffset = headerBin.length; - let fOffset = headerBin.length + vertexListLength; - let writtenVertices = 0; - this.traverseMeshes(object, function(mesh, geometry) { - const vertices = geometry.getAttribute("position"); - const normals = geometry.getAttribute("normal"); - const uvs = geometry.getAttribute("uv"); - const colors = geometry.getAttribute("color"); - const indices = geometry.getIndex(); - normalMatrixWorld.getNormalMatrix(mesh.matrixWorld); - for (let i = 0, l = vertices.count; i < l; i++) { - vertex.x = vertices.getX(i); - vertex.y = vertices.getY(i); - vertex.z = vertices.getZ(i); - vertex.applyMatrix4(mesh.matrixWorld); - output.setFloat32(vOffset, vertex.x, options.littleEndian); - vOffset += 4; - output.setFloat32(vOffset, vertex.y, options.littleEndian); - vOffset += 4; - output.setFloat32(vOffset, vertex.z, options.littleEndian); - vOffset += 4; - if (includeNormals) if (normals != null) { - vertex.x = normals.getX(i); - vertex.y = normals.getY(i); - vertex.z = normals.getZ(i); - vertex.applyMatrix3(normalMatrixWorld).normalize(); - output.setFloat32(vOffset, vertex.x, options.littleEndian); - vOffset += 4; - output.setFloat32(vOffset, vertex.y, options.littleEndian); - vOffset += 4; - output.setFloat32(vOffset, vertex.z, options.littleEndian); - vOffset += 4; - } else { - output.setFloat32(vOffset, 0, options.littleEndian); - vOffset += 4; - output.setFloat32(vOffset, 0, options.littleEndian); - vOffset += 4; - output.setFloat32(vOffset, 0, options.littleEndian); - vOffset += 4; - } - if (includeUVs) { - if (uvs != null) { - output.setFloat32(vOffset, uvs.getX(i), options.littleEndian); - vOffset += 4; - output.setFloat32(vOffset, uvs.getY(i), options.littleEndian); - vOffset += 4; - } else if (!includeUVs) { - output.setFloat32(vOffset, 0, options.littleEndian); - vOffset += 4; - output.setFloat32(vOffset, 0, options.littleEndian); - vOffset += 4; - } - } - if (includeColors) if (colors != null) { - output.setUint8(vOffset, Math.floor(colors.getX(i) * 255)); - vOffset += 1; - output.setUint8(vOffset, Math.floor(colors.getY(i) * 255)); - vOffset += 1; - output.setUint8(vOffset, Math.floor(colors.getZ(i) * 255)); - vOffset += 1; - } else { - output.setUint8(vOffset, 255); - vOffset += 1; - output.setUint8(vOffset, 255); - vOffset += 1; - output.setUint8(vOffset, 255); - vOffset += 1; - } - } - if (includeIndices) if (indices !== null) for (let i = 0, l = indices.count; i < l; i += 3) { - output.setUint8(fOffset, 3); - fOffset += 1; - output.setUint32(fOffset, indices.getX(i + 0) + writtenVertices, options.littleEndian); - fOffset += indexByteCount; - output.setUint32(fOffset, indices.getX(i + 1) + writtenVertices, options.littleEndian); - fOffset += indexByteCount; - output.setUint32(fOffset, indices.getX(i + 2) + writtenVertices, options.littleEndian); - fOffset += indexByteCount; - } - else for (let i = 0, l = vertices.count; i < l; i += 3) { - output.setUint8(fOffset, 3); - fOffset += 1; - output.setUint32(fOffset, writtenVertices + i, options.littleEndian); - fOffset += indexByteCount; - output.setUint32(fOffset, writtenVertices + i + 1, options.littleEndian); - fOffset += indexByteCount; - output.setUint32(fOffset, writtenVertices + i + 2, options.littleEndian); - fOffset += indexByteCount; - } - writtenVertices += vertices.count; - }); - result = output.buffer; - } else { - let writtenVertices = 0; - let vertexList = ""; - let faceList = ""; - this.traverseMeshes(object, function(mesh, geometry) { - const vertices = geometry.getAttribute("position"); - const normals = geometry.getAttribute("normal"); - const uvs = geometry.getAttribute("uv"); - const colors = geometry.getAttribute("color"); - const indices = geometry.getIndex(); - normalMatrixWorld.getNormalMatrix(mesh.matrixWorld); - for (let i = 0, l = vertices.count; i < l; i++) { - vertex.x = vertices.getX(i); - vertex.y = vertices.getY(i); - vertex.z = vertices.getZ(i); - vertex.applyMatrix4(mesh.matrixWorld); - let line = vertex.x + " " + vertex.y + " " + vertex.z; - if (includeNormals) if (normals != null) { - vertex.x = normals.getX(i); - vertex.y = normals.getY(i); - vertex.z = normals.getZ(i); - vertex.applyMatrix3(normalMatrixWorld).normalize(); - line += " " + vertex.x + " " + vertex.y + " " + vertex.z; - } else line += " 0 0 0"; - if (includeUVs) { - if (uvs != null) line += " " + uvs.getX(i) + " " + uvs.getY(i); - else if (includeUVs) line += " 0 0"; - } - if (includeColors) if (colors != null) line += " " + Math.floor(colors.getX(i) * 255) + " " + Math.floor(colors.getY(i) * 255) + " " + Math.floor(colors.getZ(i) * 255); - else line += " 255 255 255"; - vertexList += line + "\n"; - } - if (includeIndices) { - if (indices !== null) for (let i = 0, l = indices.count; i < l; i += 3) { - faceList += `3 ${indices.getX(i + 0) + writtenVertices}`; - faceList += ` ${indices.getX(i + 1) + writtenVertices}`; - faceList += ` ${indices.getX(i + 2) + writtenVertices} -`; - } - else for (let i = 0, l = vertices.count; i < l; i += 3) faceList += `3 ${writtenVertices + i} ${writtenVertices + i + 1} ${writtenVertices + i + 2} -`; - faceCount += indices ? indices.count / 3 : vertices.count / 3; - } - writtenVertices += vertices.count; - }); - result = `${header}${vertexList}${includeIndices ? `${faceList} -` : "\n"}`; - } - if (typeof onDone === "function") requestAnimationFrame(() => onDone && onDone(typeof result === "string" ? result : "")); - return result; - } - traverseMeshes(object, cb) { - object.traverse(function(child) { - if (child instanceof Mesh && child.isMesh) { - const mesh = child; - const geometry = mesh.geometry; - if (!geometry.isBufferGeometry) throw new Error("THREE.PLYExporter: Geometry is not of type THREE.BufferGeometry."); - if (geometry.hasAttribute("position")) cb(mesh, geometry); - } - }); - } -}; -//#endregion -//#region node_modules/three-stdlib/exporters/DRACOExporter.js -var __defProp$52 = Object.defineProperty; -var __defNormalProp$52 = (obj, key, value) => key in obj ? __defProp$52(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$52 = (obj, key, value) => { - __defNormalProp$52(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var DRACOExporter = /* @__PURE__ */ (() => { - const _DRACOExporter = class { - parse(object, options = { - decodeSpeed: 5, - encodeSpeed: 5, - encoderMethod: _DRACOExporter.MESH_EDGEBREAKER_ENCODING, - quantization: [ - 16, - 8, - 8, - 8, - 8 - ], - exportUvs: true, - exportNormals: true, - exportColor: false - }) { - if (object instanceof BufferGeometry && object.isBufferGeometry) throw new Error("DRACOExporter: The first parameter of parse() is now an instance of Mesh or Points."); - if (DracoEncoderModule === void 0) throw new Error("THREE.DRACOExporter: required the draco_encoder to work."); - const geometry = object.geometry; - const dracoEncoder = DracoEncoderModule(); - const encoder = new dracoEncoder.Encoder(); - let builder; - let dracoObject; - if (!geometry.isBufferGeometry) throw new Error("THREE.DRACOExporter.parse(geometry, options): geometry is not a THREE.BufferGeometry instance."); - if (object instanceof Mesh && object.isMesh) { - builder = new dracoEncoder.MeshBuilder(); - dracoObject = new dracoEncoder.Mesh(); - const vertices = geometry.getAttribute("position"); - builder.AddFloatAttributeToMesh(dracoObject, dracoEncoder.POSITION, vertices.count, vertices.itemSize, vertices.array); - const faces = geometry.getIndex(); - if (faces !== null) builder.AddFacesToMesh(dracoObject, faces.count / 3, faces.array); - else { - const faces2 = new (vertices.count > 65535 ? Uint32Array : Uint16Array)(vertices.count); - for (let i = 0; i < faces2.length; i++) faces2[i] = i; - builder.AddFacesToMesh(dracoObject, vertices.count, faces2); - } - if (options.exportNormals) { - const normals = geometry.getAttribute("normal"); - if (normals !== void 0) builder.AddFloatAttributeToMesh(dracoObject, dracoEncoder.NORMAL, normals.count, normals.itemSize, normals.array); - } - if (options.exportUvs) { - const uvs = geometry.getAttribute("uv"); - if (uvs !== void 0) builder.AddFloatAttributeToMesh(dracoObject, dracoEncoder.TEX_COORD, uvs.count, uvs.itemSize, uvs.array); - } - if (options.exportColor) { - const colors = geometry.getAttribute("color"); - if (colors !== void 0) builder.AddFloatAttributeToMesh(dracoObject, dracoEncoder.COLOR, colors.count, colors.itemSize, colors.array); - } - } else if (object instanceof Points && object.isPoints) { - builder = new dracoEncoder.PointCloudBuilder(); - dracoObject = new dracoEncoder.PointCloud(); - const vertices = geometry.getAttribute("position"); - builder.AddFloatAttribute(dracoObject, dracoEncoder.POSITION, vertices.count, vertices.itemSize, vertices.array); - if (options.exportColor) { - const colors = geometry.getAttribute("color"); - if (colors !== void 0) builder.AddFloatAttribute(dracoObject, dracoEncoder.COLOR, colors.count, colors.itemSize, colors.array); - } - } else throw new Error("DRACOExporter: Unsupported object type."); - const encodedData = new dracoEncoder.DracoInt8Array(); - const encodeSpeed = options.encodeSpeed !== void 0 ? options.encodeSpeed : 5; - const decodeSpeed = options.decodeSpeed !== void 0 ? options.decodeSpeed : 5; - encoder.SetSpeedOptions(encodeSpeed, decodeSpeed); - if (options.encoderMethod !== void 0) encoder.SetEncodingMethod(options.encoderMethod); - if (options.quantization !== void 0) { - for (let i = 0; i < 5; i++) if (options.quantization[i] !== void 0) encoder.SetAttributeQuantization(i, options.quantization[i]); - } - let length; - if (object instanceof Mesh && object.isMesh) length = encoder.EncodeMeshToDracoBuffer(dracoObject, encodedData); - else length = encoder.EncodePointCloudToDracoBuffer(dracoObject, true, encodedData); - dracoEncoder.destroy(dracoObject); - if (length === 0) throw new Error("THREE.DRACOExporter: Draco encoding failed."); - const outputData = new Int8Array(new ArrayBuffer(length)); - for (let i = 0; i < length; i++) outputData[i] = encodedData.GetValue(i); - dracoEncoder.destroy(encodedData); - dracoEncoder.destroy(encoder); - dracoEncoder.destroy(builder); - return outputData; - } - }; - let DRACOExporter2 = _DRACOExporter; - __publicField$52(DRACOExporter2, "MESH_EDGEBREAKER_ENCODING", 1); - __publicField$52(DRACOExporter2, "MESH_SEQUENTIAL_ENCODING", 0); - __publicField$52(DRACOExporter2, "POINT_CLOUD", 0); - __publicField$52(DRACOExporter2, "TRIANGULAR_MESH", 1); - __publicField$52(DRACOExporter2, "INVALID", -1); - __publicField$52(DRACOExporter2, "POSITION", 0); - __publicField$52(DRACOExporter2, "NORMAL", 1); - __publicField$52(DRACOExporter2, "COLOR", 2); - __publicField$52(DRACOExporter2, "TEX_COORD", 3); - __publicField$52(DRACOExporter2, "GENERIC", 4); - return DRACOExporter2; -})(); -//#endregion -//#region node_modules/three-stdlib/exporters/ColladaExporter.js -var __defProp$51 = Object.defineProperty; -var __defNormalProp$51 = (obj, key, value) => key in obj ? __defProp$51(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$51 = (obj, key, value) => { - __defNormalProp$51(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var ColladaExporter = class { - constructor() { - __publicField$51(this, "options"); - __publicField$51(this, "geometryInfo"); - __publicField$51(this, "materialMap"); - __publicField$51(this, "imageMap"); - __publicField$51(this, "textures"); - __publicField$51(this, "libraryImages"); - __publicField$51(this, "libraryGeometries"); - __publicField$51(this, "libraryEffects"); - __publicField$51(this, "libraryMaterials"); - __publicField$51(this, "canvas"); - __publicField$51(this, "ctx"); - __publicField$51(this, "transMat"); - __publicField$51(this, "getFuncs", [ - "getX", - "getY", - "getZ", - "getW" - ]); - this.options = { - version: "1.4.1", - author: null, - textureDirectory: "", - upAxis: "Y_UP", - unitName: null, - unitMeter: null - }; - this.geometryInfo = /* @__PURE__ */ new WeakMap(); - this.materialMap = /* @__PURE__ */ new WeakMap(); - this.imageMap = /* @__PURE__ */ new WeakMap(); - this.textures = []; - this.libraryImages = []; - this.libraryGeometries = []; - this.libraryEffects = []; - this.libraryMaterials = []; - this.canvas = null; - this.ctx = null; - this.transMat = null; - } - parse(object, onDone, options = {}) { - this.options = { - ...this.options, - ...options - }; - if (this.options.upAxis.match(/^[XYZ]_UP$/) === null) { - console.error("ColladaExporter: Invalid upAxis: valid values are X_UP, Y_UP or Z_UP."); - return null; - } - if (this.options.unitName !== null && this.options.unitMeter === null) { - console.error("ColladaExporter: unitMeter needs to be specified if unitName is specified."); - return null; - } - if (this.options.unitMeter !== null && this.options.unitName === null) { - console.error("ColladaExporter: unitName needs to be specified if unitMeter is specified."); - return null; - } - if (this.options.textureDirectory !== "") this.options.textureDirectory = `${this.options.textureDirectory}/`.replace(/\\/g, "/").replace(/\/+/g, "/"); - if (this.options.version !== "1.4.1" && this.options.version !== "1.5.0") { - console.warn(`ColladaExporter : Version ${this.options.version} not supported for export. Only 1.4.1 and 1.5.0.`); - return null; - } - const libraryVisualScenes = this.processObject(object); - let dae = `<?xml version="1.0" encoding="UTF-8" standalone="no" ?>${`<COLLADA xmlns="${this.options.version === "1.4.1" ? "http://www.collada.org/2005/11/COLLADASchema" : "https://www.khronos.org/collada/"}" version="${this.options.version}">`}<asset><contributor><authoring_tool>three.js Collada Exporter</authoring_tool>${this.options.author !== null ? `<author>${this.options.author}</author>` : ""}</contributor>${`<created>${(/* @__PURE__ */ new Date()).toISOString()}</created>`}${`<modified>${(/* @__PURE__ */ new Date()).toISOString()}</modified>`}<up_axis>Y_UP</up_axis></asset>`; - dae += `<library_images>${this.libraryImages.join("")}</library_images>`; - dae += `<library_effects>${this.libraryEffects.join("")}</library_effects>`; - dae += `<library_materials>${this.libraryMaterials.join("")}</library_materials>`; - dae += `<library_geometries>${this.libraryGeometries.join("")}</library_geometries>`; - dae += `<library_visual_scenes><visual_scene id="Scene" name="scene">${libraryVisualScenes}</visual_scene></library_visual_scenes>`; - dae += "<scene><instance_visual_scene url=\"#Scene\"/></scene>"; - dae += "</COLLADA>"; - const res = { - data: this.format(dae), - textures: this.textures - }; - if (typeof onDone === "function") requestAnimationFrame(() => onDone(res)); - return res; - } - format(urdf) { - var _a, _b; - const IS_END_TAG = /^<\//; - const IS_SELF_CLOSING = /(\?>$)|(\/>$)/; - const HAS_TEXT = /<[^>]+>[^<]*<\/[^<]+>/; - const pad = (ch, num) => num > 0 ? ch + pad(ch, num - 1) : ""; - let tagnum = 0; - return (_b = (_a = urdf.match(/(<[^>]+>[^<]+<\/[^<]+>)|(<[^>]+>)/g)) == null ? void 0 : _a.map((tag) => { - if (!HAS_TEXT.test(tag) && !IS_SELF_CLOSING.test(tag) && IS_END_TAG.test(tag)) tagnum--; - const res = `${pad(" ", tagnum)}${tag}`; - if (!HAS_TEXT.test(tag) && !IS_SELF_CLOSING.test(tag) && !IS_END_TAG.test(tag)) tagnum++; - return res; - }).join("\n")) != null ? _b : ""; - } - base64ToBuffer(str) { - const b = atob(str); - const buf = new Uint8Array(b.length); - for (let i = 0, l = buf.length; i < l; i++) buf[i] = b.charCodeAt(i); - return buf; - } - imageToData(image, ext) { - var _a; - this.canvas = this.canvas || document.createElement("canvas"); - this.ctx = this.ctx || this.canvas.getContext("2d"); - this.canvas.width = image.width instanceof SVGAnimatedLength ? 0 : image.width; - this.canvas.height = image.height instanceof SVGAnimatedLength ? 0 : image.height; - (_a = this.ctx) == null || _a.drawImage(image, 0, 0); - const base64data = this.canvas.toDataURL(`image/${ext}`, 1).replace(/^data:image\/(png|jpg);base64,/, ""); - return this.base64ToBuffer(base64data); - } - attrBufferToArray(attr) { - if (attr instanceof InterleavedBufferAttribute && attr.isInterleavedBufferAttribute) { - const TypedArrayConstructor = attr.array.constructor; - const arr = new TypedArrayConstructor(attr.count * attr.itemSize); - const size = attr.itemSize; - for (let i = 0, l = attr.count; i < l; i++) for (let j = 0; j < size; j++) arr[i * size + j] = attr[this.getFuncs[j]](i); - return arr; - } else return attr.array; - } - subArray(arr, st, ct) { - if (Array.isArray(arr)) return arr.slice(st, st + ct); - else { - const TypedArrayConstructor = arr.constructor; - return new TypedArrayConstructor(arr.buffer, st * arr.BYTES_PER_ELEMENT, ct); - } - } - getAttribute(attr, name, params, type) { - const array = this.attrBufferToArray(attr); - return Array.isArray(array) ? `${`<source id="${name}"><float_array id="${name}-array" count="${array.length}">` + array.join(" ")}</float_array><technique_common>${`<accessor source="#${name}-array" count="${Math.floor(array.length / attr.itemSize)}" stride="${attr.itemSize}">`}${params.map((n) => `<param name="${n}" type="${type}" />`).join("")}</accessor></technique_common></source>` : ""; - } - getTransform(o) { - o.updateMatrix(); - this.transMat = this.transMat || new Matrix4(); - this.transMat.copy(o.matrix); - this.transMat.transpose(); - return `<matrix>${this.transMat.toArray().join(" ")}</matrix>`; - } - processGeometry(g) { - let info = this.geometryInfo.get(g); - if (!info) { - const bufferGeometry = g; - if (!bufferGeometry.isBufferGeometry) throw new Error("THREE.ColladaExporter: Geometry is not of type THREE.BufferGeometry."); - const meshid = `Mesh${this.libraryGeometries.length + 1}`; - const indexCount = bufferGeometry.index ? bufferGeometry.index.count * bufferGeometry.index.itemSize : bufferGeometry.attributes.position.count; - const groups = bufferGeometry.groups != null && bufferGeometry.groups.length !== 0 ? bufferGeometry.groups : [{ - start: 0, - count: indexCount, - materialIndex: 0 - }]; - let gnode = `<geometry id="${meshid}"${g.name ? ` name="${g.name}"` : ""}><mesh>`; - const posName = `${meshid}-position`; - const vertName = `${meshid}-vertices`; - gnode += this.getAttribute(bufferGeometry.attributes.position, posName, [ - "X", - "Y", - "Z" - ], "float"); - gnode += `<vertices id="${vertName}"><input semantic="POSITION" source="#${posName}" /></vertices>`; - let triangleInputs = `<input semantic="VERTEX" source="#${vertName}" offset="0" />`; - if ("normal" in bufferGeometry.attributes) { - const normName = `${meshid}-normal`; - gnode += this.getAttribute(bufferGeometry.attributes.normal, normName, [ - "X", - "Y", - "Z" - ], "float"); - triangleInputs += `<input semantic="NORMAL" source="#${normName}" offset="0" />`; - } - if ("uv" in bufferGeometry.attributes) { - const uvName = `${meshid}-texcoord`; - gnode += this.getAttribute(bufferGeometry.attributes.uv, uvName, ["S", "T"], "float"); - triangleInputs += `<input semantic="TEXCOORD" source="#${uvName}" offset="0" set="0" />`; - } - if (UV1 in bufferGeometry.attributes) { - const uvName = `${meshid}-texcoord2`; - gnode += this.getAttribute(bufferGeometry.attributes[UV1], uvName, ["S", "T"], "float"); - triangleInputs += `<input semantic="TEXCOORD" source="#${uvName}" offset="0" set="1" />`; - } - if ("color" in bufferGeometry.attributes) { - const colName = `${meshid}-color`; - gnode += this.getAttribute(bufferGeometry.attributes.color, colName, [ - "X", - "Y", - "Z" - ], "uint8"); - triangleInputs += `<input semantic="COLOR" source="#${colName}" offset="0" />`; - } - let indexArray = null; - if (bufferGeometry.index) indexArray = this.attrBufferToArray(bufferGeometry.index); - else { - indexArray = new Array(indexCount); - for (let i = 0, l = indexArray.length; i < l && Array.isArray(indexArray); i++) indexArray[i] = i; - } - for (let i = 0, l = groups.length; i < l; i++) { - const group = groups[i]; - const subarr = this.subArray(indexArray, group.start, group.count); - const polycount = subarr.length / 3; - gnode += `<triangles material="MESH_MATERIAL_${group.materialIndex}" count="${polycount}">`; - gnode += triangleInputs; - gnode += `<p>${subarr.join(" ")}</p>`; - gnode += "</triangles>"; - } - gnode += "</mesh></geometry>"; - this.libraryGeometries.push(gnode); - info = { - meshid, - bufferGeometry - }; - this.geometryInfo.set(g, info); - } - return info; - } - processTexture(tex) { - let texid = this.imageMap.get(tex); - if (texid == null) { - texid = `image-${this.libraryImages.length + 1}`; - const ext = "png"; - const name = tex.name || texid; - let imageNode = `<image id="${texid}" name="${name}">`; - if (this.options.version === "1.5.0") imageNode += `<init_from><ref>${this.options.textureDirectory}${name}.${ext}</ref></init_from>`; - else imageNode += `<init_from>${this.options.textureDirectory}${name}.${ext}</init_from>`; - imageNode += "</image>"; - this.libraryImages.push(imageNode); - this.imageMap.set(tex, texid); - this.textures.push({ - directory: this.options.textureDirectory, - name, - ext, - data: this.imageToData(tex.image, ext), - original: tex - }); - } - return texid; - } - processMaterial(m) { - let matid = this.materialMap.get(m); - if (matid == null) { - matid = `Mat${this.libraryEffects.length + 1}`; - let type = "phong"; - if (m instanceof MeshLambertMaterial) type = "lambert"; - else if (m instanceof MeshBasicMaterial) { - type = "constant"; - if (m.map !== null) console.warn("ColladaExporter: Texture maps not supported with MeshBasicMaterial."); - } - if (m instanceof MeshPhongMaterial) { - const emissive = m.emissive ? m.emissive : new Color(0, 0, 0); - const diffuse = m.color ? m.color : new Color(0, 0, 0); - const specular = m.specular ? m.specular : new Color(1, 1, 1); - const shininess = m.shininess || 0; - const reflectivity = m.reflectivity || 0; - let transparencyNode = ""; - if (m.transparent) { - transparencyNode += `<transparent>${m.map ? "<texture texture=\"diffuse-sampler\"></texture>" : "<float>1</float>"}</transparent>`; - if (m.opacity < 1) transparencyNode += `<transparency><float>${m.opacity}</float></transparency>`; - } - const techniqueNode = `${`<technique sid="common"><${type}>`}<emission>${m.emissiveMap ? "<texture texture=\"emissive-sampler\" texcoord=\"TEXCOORD\" />" : `<color sid="emission">${emissive.r} ${emissive.g} ${emissive.b} 1</color>`}</emission>${type !== "constant" ? `<diffuse>${m.map ? "<texture texture=\"diffuse-sampler\" texcoord=\"TEXCOORD\" />" : `<color sid="diffuse">${diffuse.r} ${diffuse.g} ${diffuse.b} 1</color>`}</diffuse>` : ""}${type !== "constant" ? `<bump>${m.normalMap ? "<texture texture=\"bump-sampler\" texcoord=\"TEXCOORD\" />" : ""}</bump>` : ""}${type === "phong" ? `${`<specular><color sid="specular">${specular.r} ${specular.g} ${specular.b} 1</color></specular>`}<shininess>${m.specularMap ? "<texture texture=\"specular-sampler\" texcoord=\"TEXCOORD\" />" : `<float sid="shininess">${shininess}</float>`}</shininess>` : ""}${`<reflective><color>${diffuse.r} ${diffuse.g} ${diffuse.b} 1</color></reflective>`}${`<reflectivity><float>${reflectivity}</float></reflectivity>`}${transparencyNode}${`</${type}></technique>`}`; - const effectnode = `${`<effect id="${matid}-effect">`}<profile_COMMON>${m.map ? `<newparam sid="diffuse-surface"><surface type="2D">${`<init_from>${this.processTexture(m.map)}</init_from>`}</surface></newparam><newparam sid="diffuse-sampler"><sampler2D><source>diffuse-surface</source></sampler2D></newparam>` : ""}${m.specularMap ? `<newparam sid="specular-surface"><surface type="2D">${`<init_from>${this.processTexture(m.specularMap)}</init_from>`}</surface></newparam><newparam sid="specular-sampler"><sampler2D><source>specular-surface</source></sampler2D></newparam>` : ""}${m.emissiveMap ? `<newparam sid="emissive-surface"><surface type="2D">${`<init_from>${this.processTexture(m.emissiveMap)}</init_from>`}</surface></newparam><newparam sid="emissive-sampler"><sampler2D><source>emissive-surface</source></sampler2D></newparam>` : ""}${m.normalMap ? `<newparam sid="bump-surface"><surface type="2D">${`<init_from>${this.processTexture(m.normalMap)}</init_from>`}</surface></newparam><newparam sid="bump-sampler"><sampler2D><source>bump-surface</source></sampler2D></newparam>` : ""}${techniqueNode}${m.side === 2 ? "<extra><technique profile=\"THREEJS\"><double_sided sid=\"double_sided\" type=\"int\">1</double_sided></technique></extra>" : ""}</profile_COMMON></effect>`; - const materialName = m.name ? ` name="${m.name}"` : ""; - const materialNode = `<material id="${matid}"${materialName}><instance_effect url="#${matid}-effect" /></material>`; - this.libraryMaterials.push(materialNode); - this.libraryEffects.push(effectnode); - this.materialMap.set(m, matid); - } - } - return matid; - } - processObject(o) { - let node = `<node name="${o.name}">`; - node += this.getTransform(o); - new Mesh().geometry; - if (o instanceof Mesh && o.isMesh && o.geometry !== null) { - const geomInfo = this.processGeometry(o.geometry); - const meshid = geomInfo.meshid; - const geometry = geomInfo.bufferGeometry; - let matids = null; - let matidsArray; - const mat = o.material || new MeshBasicMaterial(); - const materials = Array.isArray(mat) ? mat : [mat]; - if (geometry.groups.length > materials.length) matidsArray = new Array(geometry.groups.length); - else matidsArray = new Array(materials.length); - matids = matidsArray.fill(null).map((_, i) => this.processMaterial(materials[i % materials.length])); - node += `${`<instance_geometry url="#${meshid}">` + (matids != null ? `<bind_material><technique_common>${matids.map((id, i) => `${`<instance_material symbol="MESH_MATERIAL_${i}" target="#${id}" >`}<bind_vertex_input semantic="TEXCOORD" input_semantic="TEXCOORD" input_set="0" /></instance_material>`).join("")}</technique_common></bind_material>` : "")}</instance_geometry>`; - } - o.children.forEach((c) => node += this.processObject(c)); - node += "</node>"; - return node; - } -}; -//#endregion -//#region node_modules/three-stdlib/libs/mmdparser.js -var CharsetEncoder = class { - constructor() { - this.s2uTable = { - 0: 0, - 1: 1, - 2: 2, - 3: 3, - 4: 4, - 5: 5, - 6: 6, - 7: 7, - 8: 8, - 9: 9, - 10: 10, - 11: 11, - 12: 12, - 13: 13, - 14: 14, - 15: 15, - 16: 16, - 17: 17, - 18: 18, - 19: 19, - 20: 20, - 21: 21, - 22: 22, - 23: 23, - 24: 24, - 25: 25, - 26: 26, - 27: 27, - 28: 28, - 29: 29, - 30: 30, - 31: 31, - 32: 32, - 33: 33, - 34: 34, - 35: 35, - 36: 36, - 37: 37, - 38: 38, - 39: 39, - 40: 40, - 41: 41, - 42: 42, - 43: 43, - 44: 44, - 45: 45, - 46: 46, - 47: 47, - 48: 48, - 49: 49, - 50: 50, - 51: 51, - 52: 52, - 53: 53, - 54: 54, - 55: 55, - 56: 56, - 57: 57, - 58: 58, - 59: 59, - 60: 60, - 61: 61, - 62: 62, - 63: 63, - 64: 64, - 65: 65, - 66: 66, - 67: 67, - 68: 68, - 69: 69, - 70: 70, - 71: 71, - 72: 72, - 73: 73, - 74: 74, - 75: 75, - 76: 76, - 77: 77, - 78: 78, - 79: 79, - 80: 80, - 81: 81, - 82: 82, - 83: 83, - 84: 84, - 85: 85, - 86: 86, - 87: 87, - 88: 88, - 89: 89, - 90: 90, - 91: 91, - 92: 92, - 93: 93, - 94: 94, - 95: 95, - 96: 96, - 97: 97, - 98: 98, - 99: 99, - 100: 100, - 101: 101, - 102: 102, - 103: 103, - 104: 104, - 105: 105, - 106: 106, - 107: 107, - 108: 108, - 109: 109, - 110: 110, - 111: 111, - 112: 112, - 113: 113, - 114: 114, - 115: 115, - 116: 116, - 117: 117, - 118: 118, - 119: 119, - 120: 120, - 121: 121, - 122: 122, - 123: 123, - 124: 124, - 125: 125, - 126: 126, - 161: 65377, - 162: 65378, - 163: 65379, - 164: 65380, - 165: 65381, - 166: 65382, - 167: 65383, - 168: 65384, - 169: 65385, - 170: 65386, - 171: 65387, - 172: 65388, - 173: 65389, - 174: 65390, - 175: 65391, - 176: 65392, - 177: 65393, - 178: 65394, - 179: 65395, - 180: 65396, - 181: 65397, - 182: 65398, - 183: 65399, - 184: 65400, - 185: 65401, - 186: 65402, - 187: 65403, - 188: 65404, - 189: 65405, - 190: 65406, - 191: 65407, - 192: 65408, - 193: 65409, - 194: 65410, - 195: 65411, - 196: 65412, - 197: 65413, - 198: 65414, - 199: 65415, - 200: 65416, - 201: 65417, - 202: 65418, - 203: 65419, - 204: 65420, - 205: 65421, - 206: 65422, - 207: 65423, - 208: 65424, - 209: 65425, - 210: 65426, - 211: 65427, - 212: 65428, - 213: 65429, - 214: 65430, - 215: 65431, - 216: 65432, - 217: 65433, - 218: 65434, - 219: 65435, - 220: 65436, - 221: 65437, - 222: 65438, - 223: 65439, - 33088: 12288, - 33089: 12289, - 33090: 12290, - 33091: 65292, - 33092: 65294, - 33093: 12539, - 33094: 65306, - 33095: 65307, - 33096: 65311, - 33097: 65281, - 33098: 12443, - 33099: 12444, - 33100: 180, - 33101: 65344, - 33102: 168, - 33103: 65342, - 33104: 65507, - 33105: 65343, - 33106: 12541, - 33107: 12542, - 33108: 12445, - 33109: 12446, - 33110: 12291, - 33111: 20189, - 33112: 12293, - 33113: 12294, - 33114: 12295, - 33115: 12540, - 33116: 8213, - 33117: 8208, - 33118: 65295, - 33119: 65340, - 33120: 65374, - 33121: 8741, - 33122: 65372, - 33123: 8230, - 33124: 8229, - 33125: 8216, - 33126: 8217, - 33127: 8220, - 33128: 8221, - 33129: 65288, - 33130: 65289, - 33131: 12308, - 33132: 12309, - 33133: 65339, - 33134: 65341, - 33135: 65371, - 33136: 65373, - 33137: 12296, - 33138: 12297, - 33139: 12298, - 33140: 12299, - 33141: 12300, - 33142: 12301, - 33143: 12302, - 33144: 12303, - 33145: 12304, - 33146: 12305, - 33147: 65291, - 33148: 65293, - 33149: 177, - 33150: 215, - 33152: 247, - 33153: 65309, - 33154: 8800, - 33155: 65308, - 33156: 65310, - 33157: 8806, - 33158: 8807, - 33159: 8734, - 33160: 8756, - 33161: 9794, - 33162: 9792, - 33163: 176, - 33164: 8242, - 33165: 8243, - 33166: 8451, - 33167: 65509, - 33168: 65284, - 33169: 65504, - 33170: 65505, - 33171: 65285, - 33172: 65283, - 33173: 65286, - 33174: 65290, - 33175: 65312, - 33176: 167, - 33177: 9734, - 33178: 9733, - 33179: 9675, - 33180: 9679, - 33181: 9678, - 33182: 9671, - 33183: 9670, - 33184: 9633, - 33185: 9632, - 33186: 9651, - 33187: 9650, - 33188: 9661, - 33189: 9660, - 33190: 8251, - 33191: 12306, - 33192: 8594, - 33193: 8592, - 33194: 8593, - 33195: 8595, - 33196: 12307, - 33208: 8712, - 33209: 8715, - 33210: 8838, - 33211: 8839, - 33212: 8834, - 33213: 8835, - 33214: 8746, - 33215: 8745, - 33224: 8743, - 33225: 8744, - 33226: 65506, - 33227: 8658, - 33228: 8660, - 33229: 8704, - 33230: 8707, - 33242: 8736, - 33243: 8869, - 33244: 8978, - 33245: 8706, - 33246: 8711, - 33247: 8801, - 33248: 8786, - 33249: 8810, - 33250: 8811, - 33251: 8730, - 33252: 8765, - 33253: 8733, - 33254: 8757, - 33255: 8747, - 33256: 8748, - 33264: 8491, - 33265: 8240, - 33266: 9839, - 33267: 9837, - 33268: 9834, - 33269: 8224, - 33270: 8225, - 33271: 182, - 33276: 9711, - 33359: 65296, - 33360: 65297, - 33361: 65298, - 33362: 65299, - 33363: 65300, - 33364: 65301, - 33365: 65302, - 33366: 65303, - 33367: 65304, - 33368: 65305, - 33376: 65313, - 33377: 65314, - 33378: 65315, - 33379: 65316, - 33380: 65317, - 33381: 65318, - 33382: 65319, - 33383: 65320, - 33384: 65321, - 33385: 65322, - 33386: 65323, - 33387: 65324, - 33388: 65325, - 33389: 65326, - 33390: 65327, - 33391: 65328, - 33392: 65329, - 33393: 65330, - 33394: 65331, - 33395: 65332, - 33396: 65333, - 33397: 65334, - 33398: 65335, - 33399: 65336, - 33400: 65337, - 33401: 65338, - 33409: 65345, - 33410: 65346, - 33411: 65347, - 33412: 65348, - 33413: 65349, - 33414: 65350, - 33415: 65351, - 33416: 65352, - 33417: 65353, - 33418: 65354, - 33419: 65355, - 33420: 65356, - 33421: 65357, - 33422: 65358, - 33423: 65359, - 33424: 65360, - 33425: 65361, - 33426: 65362, - 33427: 65363, - 33428: 65364, - 33429: 65365, - 33430: 65366, - 33431: 65367, - 33432: 65368, - 33433: 65369, - 33434: 65370, - 33439: 12353, - 33440: 12354, - 33441: 12355, - 33442: 12356, - 33443: 12357, - 33444: 12358, - 33445: 12359, - 33446: 12360, - 33447: 12361, - 33448: 12362, - 33449: 12363, - 33450: 12364, - 33451: 12365, - 33452: 12366, - 33453: 12367, - 33454: 12368, - 33455: 12369, - 33456: 12370, - 33457: 12371, - 33458: 12372, - 33459: 12373, - 33460: 12374, - 33461: 12375, - 33462: 12376, - 33463: 12377, - 33464: 12378, - 33465: 12379, - 33466: 12380, - 33467: 12381, - 33468: 12382, - 33469: 12383, - 33470: 12384, - 33471: 12385, - 33472: 12386, - 33473: 12387, - 33474: 12388, - 33475: 12389, - 33476: 12390, - 33477: 12391, - 33478: 12392, - 33479: 12393, - 33480: 12394, - 33481: 12395, - 33482: 12396, - 33483: 12397, - 33484: 12398, - 33485: 12399, - 33486: 12400, - 33487: 12401, - 33488: 12402, - 33489: 12403, - 33490: 12404, - 33491: 12405, - 33492: 12406, - 33493: 12407, - 33494: 12408, - 33495: 12409, - 33496: 12410, - 33497: 12411, - 33498: 12412, - 33499: 12413, - 33500: 12414, - 33501: 12415, - 33502: 12416, - 33503: 12417, - 33504: 12418, - 33505: 12419, - 33506: 12420, - 33507: 12421, - 33508: 12422, - 33509: 12423, - 33510: 12424, - 33511: 12425, - 33512: 12426, - 33513: 12427, - 33514: 12428, - 33515: 12429, - 33516: 12430, - 33517: 12431, - 33518: 12432, - 33519: 12433, - 33520: 12434, - 33521: 12435, - 33600: 12449, - 33601: 12450, - 33602: 12451, - 33603: 12452, - 33604: 12453, - 33605: 12454, - 33606: 12455, - 33607: 12456, - 33608: 12457, - 33609: 12458, - 33610: 12459, - 33611: 12460, - 33612: 12461, - 33613: 12462, - 33614: 12463, - 33615: 12464, - 33616: 12465, - 33617: 12466, - 33618: 12467, - 33619: 12468, - 33620: 12469, - 33621: 12470, - 33622: 12471, - 33623: 12472, - 33624: 12473, - 33625: 12474, - 33626: 12475, - 33627: 12476, - 33628: 12477, - 33629: 12478, - 33630: 12479, - 33631: 12480, - 33632: 12481, - 33633: 12482, - 33634: 12483, - 33635: 12484, - 33636: 12485, - 33637: 12486, - 33638: 12487, - 33639: 12488, - 33640: 12489, - 33641: 12490, - 33642: 12491, - 33643: 12492, - 33644: 12493, - 33645: 12494, - 33646: 12495, - 33647: 12496, - 33648: 12497, - 33649: 12498, - 33650: 12499, - 33651: 12500, - 33652: 12501, - 33653: 12502, - 33654: 12503, - 33655: 12504, - 33656: 12505, - 33657: 12506, - 33658: 12507, - 33659: 12508, - 33660: 12509, - 33661: 12510, - 33662: 12511, - 33664: 12512, - 33665: 12513, - 33666: 12514, - 33667: 12515, - 33668: 12516, - 33669: 12517, - 33670: 12518, - 33671: 12519, - 33672: 12520, - 33673: 12521, - 33674: 12522, - 33675: 12523, - 33676: 12524, - 33677: 12525, - 33678: 12526, - 33679: 12527, - 33680: 12528, - 33681: 12529, - 33682: 12530, - 33683: 12531, - 33684: 12532, - 33685: 12533, - 33686: 12534, - 33695: 913, - 33696: 914, - 33697: 915, - 33698: 916, - 33699: 917, - 33700: 918, - 33701: 919, - 33702: 920, - 33703: 921, - 33704: 922, - 33705: 923, - 33706: 924, - 33707: 925, - 33708: 926, - 33709: 927, - 33710: 928, - 33711: 929, - 33712: 931, - 33713: 932, - 33714: 933, - 33715: 934, - 33716: 935, - 33717: 936, - 33718: 937, - 33727: 945, - 33728: 946, - 33729: 947, - 33730: 948, - 33731: 949, - 33732: 950, - 33733: 951, - 33734: 952, - 33735: 953, - 33736: 954, - 33737: 955, - 33738: 956, - 33739: 957, - 33740: 958, - 33741: 959, - 33742: 960, - 33743: 961, - 33744: 963, - 33745: 964, - 33746: 965, - 33747: 966, - 33748: 967, - 33749: 968, - 33750: 969, - 33856: 1040, - 33857: 1041, - 33858: 1042, - 33859: 1043, - 33860: 1044, - 33861: 1045, - 33862: 1025, - 33863: 1046, - 33864: 1047, - 33865: 1048, - 33866: 1049, - 33867: 1050, - 33868: 1051, - 33869: 1052, - 33870: 1053, - 33871: 1054, - 33872: 1055, - 33873: 1056, - 33874: 1057, - 33875: 1058, - 33876: 1059, - 33877: 1060, - 33878: 1061, - 33879: 1062, - 33880: 1063, - 33881: 1064, - 33882: 1065, - 33883: 1066, - 33884: 1067, - 33885: 1068, - 33886: 1069, - 33887: 1070, - 33888: 1071, - 33904: 1072, - 33905: 1073, - 33906: 1074, - 33907: 1075, - 33908: 1076, - 33909: 1077, - 33910: 1105, - 33911: 1078, - 33912: 1079, - 33913: 1080, - 33914: 1081, - 33915: 1082, - 33916: 1083, - 33917: 1084, - 33918: 1085, - 33920: 1086, - 33921: 1087, - 33922: 1088, - 33923: 1089, - 33924: 1090, - 33925: 1091, - 33926: 1092, - 33927: 1093, - 33928: 1094, - 33929: 1095, - 33930: 1096, - 33931: 1097, - 33932: 1098, - 33933: 1099, - 33934: 1100, - 33935: 1101, - 33936: 1102, - 33937: 1103, - 33951: 9472, - 33952: 9474, - 33953: 9484, - 33954: 9488, - 33955: 9496, - 33956: 9492, - 33957: 9500, - 33958: 9516, - 33959: 9508, - 33960: 9524, - 33961: 9532, - 33962: 9473, - 33963: 9475, - 33964: 9487, - 33965: 9491, - 33966: 9499, - 33967: 9495, - 33968: 9507, - 33969: 9523, - 33970: 9515, - 33971: 9531, - 33972: 9547, - 33973: 9504, - 33974: 9519, - 33975: 9512, - 33976: 9527, - 33977: 9535, - 33978: 9501, - 33979: 9520, - 33980: 9509, - 33981: 9528, - 33982: 9538, - 34624: 9312, - 34625: 9313, - 34626: 9314, - 34627: 9315, - 34628: 9316, - 34629: 9317, - 34630: 9318, - 34631: 9319, - 34632: 9320, - 34633: 9321, - 34634: 9322, - 34635: 9323, - 34636: 9324, - 34637: 9325, - 34638: 9326, - 34639: 9327, - 34640: 9328, - 34641: 9329, - 34642: 9330, - 34643: 9331, - 34644: 8544, - 34645: 8545, - 34646: 8546, - 34647: 8547, - 34648: 8548, - 34649: 8549, - 34650: 8550, - 34651: 8551, - 34652: 8552, - 34653: 8553, - 34655: 13129, - 34656: 13076, - 34657: 13090, - 34658: 13133, - 34659: 13080, - 34660: 13095, - 34661: 13059, - 34662: 13110, - 34663: 13137, - 34664: 13143, - 34665: 13069, - 34666: 13094, - 34667: 13091, - 34668: 13099, - 34669: 13130, - 34670: 13115, - 34671: 13212, - 34672: 13213, - 34673: 13214, - 34674: 13198, - 34675: 13199, - 34676: 13252, - 34677: 13217, - 34686: 13179, - 34688: 12317, - 34689: 12319, - 34690: 8470, - 34691: 13261, - 34692: 8481, - 34693: 12964, - 34694: 12965, - 34695: 12966, - 34696: 12967, - 34697: 12968, - 34698: 12849, - 34699: 12850, - 34700: 12857, - 34701: 13182, - 34702: 13181, - 34703: 13180, - 34704: 8786, - 34705: 8801, - 34706: 8747, - 34707: 8750, - 34708: 8721, - 34709: 8730, - 34710: 8869, - 34711: 8736, - 34712: 8735, - 34713: 8895, - 34714: 8757, - 34715: 8745, - 34716: 8746, - 34975: 20124, - 34976: 21782, - 34977: 23043, - 34978: 38463, - 34979: 21696, - 34980: 24859, - 34981: 25384, - 34982: 23030, - 34983: 36898, - 34984: 33909, - 34985: 33564, - 34986: 31312, - 34987: 24746, - 34988: 25569, - 34989: 28197, - 34990: 26093, - 34991: 33894, - 34992: 33446, - 34993: 39925, - 34994: 26771, - 34995: 22311, - 34996: 26017, - 34997: 25201, - 34998: 23451, - 34999: 22992, - 35e3: 34427, - 35001: 39156, - 35002: 32098, - 35003: 32190, - 35004: 39822, - 35005: 25110, - 35006: 31903, - 35007: 34999, - 35008: 23433, - 35009: 24245, - 35010: 25353, - 35011: 26263, - 35012: 26696, - 35013: 38343, - 35014: 38797, - 35015: 26447, - 35016: 20197, - 35017: 20234, - 35018: 20301, - 35019: 20381, - 35020: 20553, - 35021: 22258, - 35022: 22839, - 35023: 22996, - 35024: 23041, - 35025: 23561, - 35026: 24799, - 35027: 24847, - 35028: 24944, - 35029: 26131, - 35030: 26885, - 35031: 28858, - 35032: 30031, - 35033: 30064, - 35034: 31227, - 35035: 32173, - 35036: 32239, - 35037: 32963, - 35038: 33806, - 35039: 34915, - 35040: 35586, - 35041: 36949, - 35042: 36986, - 35043: 21307, - 35044: 20117, - 35045: 20133, - 35046: 22495, - 35047: 32946, - 35048: 37057, - 35049: 30959, - 35050: 19968, - 35051: 22769, - 35052: 28322, - 35053: 36920, - 35054: 31282, - 35055: 33576, - 35056: 33419, - 35057: 39983, - 35058: 20801, - 35059: 21360, - 35060: 21693, - 35061: 21729, - 35062: 22240, - 35063: 23035, - 35064: 24341, - 35065: 39154, - 35066: 28139, - 35067: 32996, - 35068: 34093, - 35136: 38498, - 35137: 38512, - 35138: 38560, - 35139: 38907, - 35140: 21515, - 35141: 21491, - 35142: 23431, - 35143: 28879, - 35144: 32701, - 35145: 36802, - 35146: 38632, - 35147: 21359, - 35148: 40284, - 35149: 31418, - 35150: 19985, - 35151: 30867, - 35152: 33276, - 35153: 28198, - 35154: 22040, - 35155: 21764, - 35156: 27421, - 35157: 34074, - 35158: 39995, - 35159: 23013, - 35160: 21417, - 35161: 28006, - 35162: 29916, - 35163: 38287, - 35164: 22082, - 35165: 20113, - 35166: 36939, - 35167: 38642, - 35168: 33615, - 35169: 39180, - 35170: 21473, - 35171: 21942, - 35172: 23344, - 35173: 24433, - 35174: 26144, - 35175: 26355, - 35176: 26628, - 35177: 27704, - 35178: 27891, - 35179: 27945, - 35180: 29787, - 35181: 30408, - 35182: 31310, - 35183: 38964, - 35184: 33521, - 35185: 34907, - 35186: 35424, - 35187: 37613, - 35188: 28082, - 35189: 30123, - 35190: 30410, - 35191: 39365, - 35192: 24742, - 35193: 35585, - 35194: 36234, - 35195: 38322, - 35196: 27022, - 35197: 21421, - 35198: 20870, - 35200: 22290, - 35201: 22576, - 35202: 22852, - 35203: 23476, - 35204: 24310, - 35205: 24616, - 35206: 25513, - 35207: 25588, - 35208: 27839, - 35209: 28436, - 35210: 28814, - 35211: 28948, - 35212: 29017, - 35213: 29141, - 35214: 29503, - 35215: 32257, - 35216: 33398, - 35217: 33489, - 35218: 34199, - 35219: 36960, - 35220: 37467, - 35221: 40219, - 35222: 22633, - 35223: 26044, - 35224: 27738, - 35225: 29989, - 35226: 20985, - 35227: 22830, - 35228: 22885, - 35229: 24448, - 35230: 24540, - 35231: 25276, - 35232: 26106, - 35233: 27178, - 35234: 27431, - 35235: 27572, - 35236: 29579, - 35237: 32705, - 35238: 35158, - 35239: 40236, - 35240: 40206, - 35241: 40644, - 35242: 23713, - 35243: 27798, - 35244: 33659, - 35245: 20740, - 35246: 23627, - 35247: 25014, - 35248: 33222, - 35249: 26742, - 35250: 29281, - 35251: 20057, - 35252: 20474, - 35253: 21368, - 35254: 24681, - 35255: 28201, - 35256: 31311, - 35257: 38899, - 35258: 19979, - 35259: 21270, - 35260: 20206, - 35261: 20309, - 35262: 20285, - 35263: 20385, - 35264: 20339, - 35265: 21152, - 35266: 21487, - 35267: 22025, - 35268: 22799, - 35269: 23233, - 35270: 23478, - 35271: 23521, - 35272: 31185, - 35273: 26247, - 35274: 26524, - 35275: 26550, - 35276: 27468, - 35277: 27827, - 35278: 28779, - 35279: 29634, - 35280: 31117, - 35281: 31166, - 35282: 31292, - 35283: 31623, - 35284: 33457, - 35285: 33499, - 35286: 33540, - 35287: 33655, - 35288: 33775, - 35289: 33747, - 35290: 34662, - 35291: 35506, - 35292: 22057, - 35293: 36008, - 35294: 36838, - 35295: 36942, - 35296: 38686, - 35297: 34442, - 35298: 20420, - 35299: 23784, - 35300: 25105, - 35301: 29273, - 35302: 30011, - 35303: 33253, - 35304: 33469, - 35305: 34558, - 35306: 36032, - 35307: 38597, - 35308: 39187, - 35309: 39381, - 35310: 20171, - 35311: 20250, - 35312: 35299, - 35313: 22238, - 35314: 22602, - 35315: 22730, - 35316: 24315, - 35317: 24555, - 35318: 24618, - 35319: 24724, - 35320: 24674, - 35321: 25040, - 35322: 25106, - 35323: 25296, - 35324: 25913, - 35392: 39745, - 35393: 26214, - 35394: 26800, - 35395: 28023, - 35396: 28784, - 35397: 30028, - 35398: 30342, - 35399: 32117, - 35400: 33445, - 35401: 34809, - 35402: 38283, - 35403: 38542, - 35404: 35997, - 35405: 20977, - 35406: 21182, - 35407: 22806, - 35408: 21683, - 35409: 23475, - 35410: 23830, - 35411: 24936, - 35412: 27010, - 35413: 28079, - 35414: 30861, - 35415: 33995, - 35416: 34903, - 35417: 35442, - 35418: 37799, - 35419: 39608, - 35420: 28012, - 35421: 39336, - 35422: 34521, - 35423: 22435, - 35424: 26623, - 35425: 34510, - 35426: 37390, - 35427: 21123, - 35428: 22151, - 35429: 21508, - 35430: 24275, - 35431: 25313, - 35432: 25785, - 35433: 26684, - 35434: 26680, - 35435: 27579, - 35436: 29554, - 35437: 30906, - 35438: 31339, - 35439: 35226, - 35440: 35282, - 35441: 36203, - 35442: 36611, - 35443: 37101, - 35444: 38307, - 35445: 38548, - 35446: 38761, - 35447: 23398, - 35448: 23731, - 35449: 27005, - 35450: 38989, - 35451: 38990, - 35452: 25499, - 35453: 31520, - 35454: 27179, - 35456: 27263, - 35457: 26806, - 35458: 39949, - 35459: 28511, - 35460: 21106, - 35461: 21917, - 35462: 24688, - 35463: 25324, - 35464: 27963, - 35465: 28167, - 35466: 28369, - 35467: 33883, - 35468: 35088, - 35469: 36676, - 35470: 19988, - 35471: 39993, - 35472: 21494, - 35473: 26907, - 35474: 27194, - 35475: 38788, - 35476: 26666, - 35477: 20828, - 35478: 31427, - 35479: 33970, - 35480: 37340, - 35481: 37772, - 35482: 22107, - 35483: 40232, - 35484: 26658, - 35485: 33541, - 35486: 33841, - 35487: 31909, - 35488: 21e3, - 35489: 33477, - 35490: 29926, - 35491: 20094, - 35492: 20355, - 35493: 20896, - 35494: 23506, - 35495: 21002, - 35496: 21208, - 35497: 21223, - 35498: 24059, - 35499: 21914, - 35500: 22570, - 35501: 23014, - 35502: 23436, - 35503: 23448, - 35504: 23515, - 35505: 24178, - 35506: 24185, - 35507: 24739, - 35508: 24863, - 35509: 24931, - 35510: 25022, - 35511: 25563, - 35512: 25954, - 35513: 26577, - 35514: 26707, - 35515: 26874, - 35516: 27454, - 35517: 27475, - 35518: 27735, - 35519: 28450, - 35520: 28567, - 35521: 28485, - 35522: 29872, - 35523: 29976, - 35524: 30435, - 35525: 30475, - 35526: 31487, - 35527: 31649, - 35528: 31777, - 35529: 32233, - 35530: 32566, - 35531: 32752, - 35532: 32925, - 35533: 33382, - 35534: 33694, - 35535: 35251, - 35536: 35532, - 35537: 36011, - 35538: 36996, - 35539: 37969, - 35540: 38291, - 35541: 38289, - 35542: 38306, - 35543: 38501, - 35544: 38867, - 35545: 39208, - 35546: 33304, - 35547: 20024, - 35548: 21547, - 35549: 23736, - 35550: 24012, - 35551: 29609, - 35552: 30284, - 35553: 30524, - 35554: 23721, - 35555: 32747, - 35556: 36107, - 35557: 38593, - 35558: 38929, - 35559: 38996, - 35560: 39e3, - 35561: 20225, - 35562: 20238, - 35563: 21361, - 35564: 21916, - 35565: 22120, - 35566: 22522, - 35567: 22855, - 35568: 23305, - 35569: 23492, - 35570: 23696, - 35571: 24076, - 35572: 24190, - 35573: 24524, - 35574: 25582, - 35575: 26426, - 35576: 26071, - 35577: 26082, - 35578: 26399, - 35579: 26827, - 35580: 26820, - 35648: 27231, - 35649: 24112, - 35650: 27589, - 35651: 27671, - 35652: 27773, - 35653: 30079, - 35654: 31048, - 35655: 23395, - 35656: 31232, - 35657: 32e3, - 35658: 24509, - 35659: 35215, - 35660: 35352, - 35661: 36020, - 35662: 36215, - 35663: 36556, - 35664: 36637, - 35665: 39138, - 35666: 39438, - 35667: 39740, - 35668: 20096, - 35669: 20605, - 35670: 20736, - 35671: 22931, - 35672: 23452, - 35673: 25135, - 35674: 25216, - 35675: 25836, - 35676: 27450, - 35677: 29344, - 35678: 30097, - 35679: 31047, - 35680: 32681, - 35681: 34811, - 35682: 35516, - 35683: 35696, - 35684: 25516, - 35685: 33738, - 35686: 38816, - 35687: 21513, - 35688: 21507, - 35689: 21931, - 35690: 26708, - 35691: 27224, - 35692: 35440, - 35693: 30759, - 35694: 26485, - 35695: 40653, - 35696: 21364, - 35697: 23458, - 35698: 33050, - 35699: 34384, - 35700: 36870, - 35701: 19992, - 35702: 20037, - 35703: 20167, - 35704: 20241, - 35705: 21450, - 35706: 21560, - 35707: 23470, - 35708: 24339, - 35709: 24613, - 35710: 25937, - 35712: 26429, - 35713: 27714, - 35714: 27762, - 35715: 27875, - 35716: 28792, - 35717: 29699, - 35718: 31350, - 35719: 31406, - 35720: 31496, - 35721: 32026, - 35722: 31998, - 35723: 32102, - 35724: 26087, - 35725: 29275, - 35726: 21435, - 35727: 23621, - 35728: 24040, - 35729: 25298, - 35730: 25312, - 35731: 25369, - 35732: 28192, - 35733: 34394, - 35734: 35377, - 35735: 36317, - 35736: 37624, - 35737: 28417, - 35738: 31142, - 35739: 39770, - 35740: 20136, - 35741: 20139, - 35742: 20140, - 35743: 20379, - 35744: 20384, - 35745: 20689, - 35746: 20807, - 35747: 31478, - 35748: 20849, - 35749: 20982, - 35750: 21332, - 35751: 21281, - 35752: 21375, - 35753: 21483, - 35754: 21932, - 35755: 22659, - 35756: 23777, - 35757: 24375, - 35758: 24394, - 35759: 24623, - 35760: 24656, - 35761: 24685, - 35762: 25375, - 35763: 25945, - 35764: 27211, - 35765: 27841, - 35766: 29378, - 35767: 29421, - 35768: 30703, - 35769: 33016, - 35770: 33029, - 35771: 33288, - 35772: 34126, - 35773: 37111, - 35774: 37857, - 35775: 38911, - 35776: 39255, - 35777: 39514, - 35778: 20208, - 35779: 20957, - 35780: 23597, - 35781: 26241, - 35782: 26989, - 35783: 23616, - 35784: 26354, - 35785: 26997, - 35786: 29577, - 35787: 26704, - 35788: 31873, - 35789: 20677, - 35790: 21220, - 35791: 22343, - 35792: 24062, - 35793: 37670, - 35794: 26020, - 35795: 27427, - 35796: 27453, - 35797: 29748, - 35798: 31105, - 35799: 31165, - 35800: 31563, - 35801: 32202, - 35802: 33465, - 35803: 33740, - 35804: 34943, - 35805: 35167, - 35806: 35641, - 35807: 36817, - 35808: 37329, - 35809: 21535, - 35810: 37504, - 35811: 20061, - 35812: 20534, - 35813: 21477, - 35814: 21306, - 35815: 29399, - 35816: 29590, - 35817: 30697, - 35818: 33510, - 35819: 36527, - 35820: 39366, - 35821: 39368, - 35822: 39378, - 35823: 20855, - 35824: 24858, - 35825: 34398, - 35826: 21936, - 35827: 31354, - 35828: 20598, - 35829: 23507, - 35830: 36935, - 35831: 38533, - 35832: 20018, - 35833: 27355, - 35834: 37351, - 35835: 23633, - 35836: 23624, - 35904: 25496, - 35905: 31391, - 35906: 27795, - 35907: 38772, - 35908: 36705, - 35909: 31402, - 35910: 29066, - 35911: 38536, - 35912: 31874, - 35913: 26647, - 35914: 32368, - 35915: 26705, - 35916: 37740, - 35917: 21234, - 35918: 21531, - 35919: 34219, - 35920: 35347, - 35921: 32676, - 35922: 36557, - 35923: 37089, - 35924: 21350, - 35925: 34952, - 35926: 31041, - 35927: 20418, - 35928: 20670, - 35929: 21009, - 35930: 20804, - 35931: 21843, - 35932: 22317, - 35933: 29674, - 35934: 22411, - 35935: 22865, - 35936: 24418, - 35937: 24452, - 35938: 24693, - 35939: 24950, - 35940: 24935, - 35941: 25001, - 35942: 25522, - 35943: 25658, - 35944: 25964, - 35945: 26223, - 35946: 26690, - 35947: 28179, - 35948: 30054, - 35949: 31293, - 35950: 31995, - 35951: 32076, - 35952: 32153, - 35953: 32331, - 35954: 32619, - 35955: 33550, - 35956: 33610, - 35957: 34509, - 35958: 35336, - 35959: 35427, - 35960: 35686, - 35961: 36605, - 35962: 38938, - 35963: 40335, - 35964: 33464, - 35965: 36814, - 35966: 39912, - 35968: 21127, - 35969: 25119, - 35970: 25731, - 35971: 28608, - 35972: 38553, - 35973: 26689, - 35974: 20625, - 35975: 27424, - 35976: 27770, - 35977: 28500, - 35978: 31348, - 35979: 32080, - 35980: 34880, - 35981: 35363, - 35982: 26376, - 35983: 20214, - 35984: 20537, - 35985: 20518, - 35986: 20581, - 35987: 20860, - 35988: 21048, - 35989: 21091, - 35990: 21927, - 35991: 22287, - 35992: 22533, - 35993: 23244, - 35994: 24314, - 35995: 25010, - 35996: 25080, - 35997: 25331, - 35998: 25458, - 35999: 26908, - 36e3: 27177, - 36001: 29309, - 36002: 29356, - 36003: 29486, - 36004: 30740, - 36005: 30831, - 36006: 32121, - 36007: 30476, - 36008: 32937, - 36009: 35211, - 36010: 35609, - 36011: 36066, - 36012: 36562, - 36013: 36963, - 36014: 37749, - 36015: 38522, - 36016: 38997, - 36017: 39443, - 36018: 40568, - 36019: 20803, - 36020: 21407, - 36021: 21427, - 36022: 24187, - 36023: 24358, - 36024: 28187, - 36025: 28304, - 36026: 29572, - 36027: 29694, - 36028: 32067, - 36029: 33335, - 36030: 35328, - 36031: 35578, - 36032: 38480, - 36033: 20046, - 36034: 20491, - 36035: 21476, - 36036: 21628, - 36037: 22266, - 36038: 22993, - 36039: 23396, - 36040: 24049, - 36041: 24235, - 36042: 24359, - 36043: 25144, - 36044: 25925, - 36045: 26543, - 36046: 28246, - 36047: 29392, - 36048: 31946, - 36049: 34996, - 36050: 32929, - 36051: 32993, - 36052: 33776, - 36053: 34382, - 36054: 35463, - 36055: 36328, - 36056: 37431, - 36057: 38599, - 36058: 39015, - 36059: 40723, - 36060: 20116, - 36061: 20114, - 36062: 20237, - 36063: 21320, - 36064: 21577, - 36065: 21566, - 36066: 23087, - 36067: 24460, - 36068: 24481, - 36069: 24735, - 36070: 26791, - 36071: 27278, - 36072: 29786, - 36073: 30849, - 36074: 35486, - 36075: 35492, - 36076: 35703, - 36077: 37264, - 36078: 20062, - 36079: 39881, - 36080: 20132, - 36081: 20348, - 36082: 20399, - 36083: 20505, - 36084: 20502, - 36085: 20809, - 36086: 20844, - 36087: 21151, - 36088: 21177, - 36089: 21246, - 36090: 21402, - 36091: 21475, - 36092: 21521, - 36160: 21518, - 36161: 21897, - 36162: 22353, - 36163: 22434, - 36164: 22909, - 36165: 23380, - 36166: 23389, - 36167: 23439, - 36168: 24037, - 36169: 24039, - 36170: 24055, - 36171: 24184, - 36172: 24195, - 36173: 24218, - 36174: 24247, - 36175: 24344, - 36176: 24658, - 36177: 24908, - 36178: 25239, - 36179: 25304, - 36180: 25511, - 36181: 25915, - 36182: 26114, - 36183: 26179, - 36184: 26356, - 36185: 26477, - 36186: 26657, - 36187: 26775, - 36188: 27083, - 36189: 27743, - 36190: 27946, - 36191: 28009, - 36192: 28207, - 36193: 28317, - 36194: 30002, - 36195: 30343, - 36196: 30828, - 36197: 31295, - 36198: 31968, - 36199: 32005, - 36200: 32024, - 36201: 32094, - 36202: 32177, - 36203: 32789, - 36204: 32771, - 36205: 32943, - 36206: 32945, - 36207: 33108, - 36208: 33167, - 36209: 33322, - 36210: 33618, - 36211: 34892, - 36212: 34913, - 36213: 35611, - 36214: 36002, - 36215: 36092, - 36216: 37066, - 36217: 37237, - 36218: 37489, - 36219: 30783, - 36220: 37628, - 36221: 38308, - 36222: 38477, - 36224: 38917, - 36225: 39321, - 36226: 39640, - 36227: 40251, - 36228: 21083, - 36229: 21163, - 36230: 21495, - 36231: 21512, - 36232: 22741, - 36233: 25335, - 36234: 28640, - 36235: 35946, - 36236: 36703, - 36237: 40633, - 36238: 20811, - 36239: 21051, - 36240: 21578, - 36241: 22269, - 36242: 31296, - 36243: 37239, - 36244: 40288, - 36245: 40658, - 36246: 29508, - 36247: 28425, - 36248: 33136, - 36249: 29969, - 36250: 24573, - 36251: 24794, - 36252: 39592, - 36253: 29403, - 36254: 36796, - 36255: 27492, - 36256: 38915, - 36257: 20170, - 36258: 22256, - 36259: 22372, - 36260: 22718, - 36261: 23130, - 36262: 24680, - 36263: 25031, - 36264: 26127, - 36265: 26118, - 36266: 26681, - 36267: 26801, - 36268: 28151, - 36269: 30165, - 36270: 32058, - 36271: 33390, - 36272: 39746, - 36273: 20123, - 36274: 20304, - 36275: 21449, - 36276: 21766, - 36277: 23919, - 36278: 24038, - 36279: 24046, - 36280: 26619, - 36281: 27801, - 36282: 29811, - 36283: 30722, - 36284: 35408, - 36285: 37782, - 36286: 35039, - 36287: 22352, - 36288: 24231, - 36289: 25387, - 36290: 20661, - 36291: 20652, - 36292: 20877, - 36293: 26368, - 36294: 21705, - 36295: 22622, - 36296: 22971, - 36297: 23472, - 36298: 24425, - 36299: 25165, - 36300: 25505, - 36301: 26685, - 36302: 27507, - 36303: 28168, - 36304: 28797, - 36305: 37319, - 36306: 29312, - 36307: 30741, - 36308: 30758, - 36309: 31085, - 36310: 25998, - 36311: 32048, - 36312: 33756, - 36313: 35009, - 36314: 36617, - 36315: 38555, - 36316: 21092, - 36317: 22312, - 36318: 26448, - 36319: 32618, - 36320: 36001, - 36321: 20916, - 36322: 22338, - 36323: 38442, - 36324: 22586, - 36325: 27018, - 36326: 32948, - 36327: 21682, - 36328: 23822, - 36329: 22524, - 36330: 30869, - 36331: 40442, - 36332: 20316, - 36333: 21066, - 36334: 21643, - 36335: 25662, - 36336: 26152, - 36337: 26388, - 36338: 26613, - 36339: 31364, - 36340: 31574, - 36341: 32034, - 36342: 37679, - 36343: 26716, - 36344: 39853, - 36345: 31545, - 36346: 21273, - 36347: 20874, - 36348: 21047, - 36416: 23519, - 36417: 25334, - 36418: 25774, - 36419: 25830, - 36420: 26413, - 36421: 27578, - 36422: 34217, - 36423: 38609, - 36424: 30352, - 36425: 39894, - 36426: 25420, - 36427: 37638, - 36428: 39851, - 36429: 30399, - 36430: 26194, - 36431: 19977, - 36432: 20632, - 36433: 21442, - 36434: 23665, - 36435: 24808, - 36436: 25746, - 36437: 25955, - 36438: 26719, - 36439: 29158, - 36440: 29642, - 36441: 29987, - 36442: 31639, - 36443: 32386, - 36444: 34453, - 36445: 35715, - 36446: 36059, - 36447: 37240, - 36448: 39184, - 36449: 26028, - 36450: 26283, - 36451: 27531, - 36452: 20181, - 36453: 20180, - 36454: 20282, - 36455: 20351, - 36456: 21050, - 36457: 21496, - 36458: 21490, - 36459: 21987, - 36460: 22235, - 36461: 22763, - 36462: 22987, - 36463: 22985, - 36464: 23039, - 36465: 23376, - 36466: 23629, - 36467: 24066, - 36468: 24107, - 36469: 24535, - 36470: 24605, - 36471: 25351, - 36472: 25903, - 36473: 23388, - 36474: 26031, - 36475: 26045, - 36476: 26088, - 36477: 26525, - 36478: 27490, - 36480: 27515, - 36481: 27663, - 36482: 29509, - 36483: 31049, - 36484: 31169, - 36485: 31992, - 36486: 32025, - 36487: 32043, - 36488: 32930, - 36489: 33026, - 36490: 33267, - 36491: 35222, - 36492: 35422, - 36493: 35433, - 36494: 35430, - 36495: 35468, - 36496: 35566, - 36497: 36039, - 36498: 36060, - 36499: 38604, - 36500: 39164, - 36501: 27503, - 36502: 20107, - 36503: 20284, - 36504: 20365, - 36505: 20816, - 36506: 23383, - 36507: 23546, - 36508: 24904, - 36509: 25345, - 36510: 26178, - 36511: 27425, - 36512: 28363, - 36513: 27835, - 36514: 29246, - 36515: 29885, - 36516: 30164, - 36517: 30913, - 36518: 31034, - 36519: 32780, - 36520: 32819, - 36521: 33258, - 36522: 33940, - 36523: 36766, - 36524: 27728, - 36525: 40575, - 36526: 24335, - 36527: 35672, - 36528: 40235, - 36529: 31482, - 36530: 36600, - 36531: 23437, - 36532: 38635, - 36533: 19971, - 36534: 21489, - 36535: 22519, - 36536: 22833, - 36537: 23241, - 36538: 23460, - 36539: 24713, - 36540: 28287, - 36541: 28422, - 36542: 30142, - 36543: 36074, - 36544: 23455, - 36545: 34048, - 36546: 31712, - 36547: 20594, - 36548: 26612, - 36549: 33437, - 36550: 23649, - 36551: 34122, - 36552: 32286, - 36553: 33294, - 36554: 20889, - 36555: 23556, - 36556: 25448, - 36557: 36198, - 36558: 26012, - 36559: 29038, - 36560: 31038, - 36561: 32023, - 36562: 32773, - 36563: 35613, - 36564: 36554, - 36565: 36974, - 36566: 34503, - 36567: 37034, - 36568: 20511, - 36569: 21242, - 36570: 23610, - 36571: 26451, - 36572: 28796, - 36573: 29237, - 36574: 37196, - 36575: 37320, - 36576: 37675, - 36577: 33509, - 36578: 23490, - 36579: 24369, - 36580: 24825, - 36581: 20027, - 36582: 21462, - 36583: 23432, - 36584: 25163, - 36585: 26417, - 36586: 27530, - 36587: 29417, - 36588: 29664, - 36589: 31278, - 36590: 33131, - 36591: 36259, - 36592: 37202, - 36593: 39318, - 36594: 20754, - 36595: 21463, - 36596: 21610, - 36597: 23551, - 36598: 25480, - 36599: 27193, - 36600: 32172, - 36601: 38656, - 36602: 22234, - 36603: 21454, - 36604: 21608, - 36672: 23447, - 36673: 23601, - 36674: 24030, - 36675: 20462, - 36676: 24833, - 36677: 25342, - 36678: 27954, - 36679: 31168, - 36680: 31179, - 36681: 32066, - 36682: 32333, - 36683: 32722, - 36684: 33261, - 36685: 33311, - 36686: 33936, - 36687: 34886, - 36688: 35186, - 36689: 35728, - 36690: 36468, - 36691: 36655, - 36692: 36913, - 36693: 37195, - 36694: 37228, - 36695: 38598, - 36696: 37276, - 36697: 20160, - 36698: 20303, - 36699: 20805, - 36700: 21313, - 36701: 24467, - 36702: 25102, - 36703: 26580, - 36704: 27713, - 36705: 28171, - 36706: 29539, - 36707: 32294, - 36708: 37325, - 36709: 37507, - 36710: 21460, - 36711: 22809, - 36712: 23487, - 36713: 28113, - 36714: 31069, - 36715: 32302, - 36716: 31899, - 36717: 22654, - 36718: 29087, - 36719: 20986, - 36720: 34899, - 36721: 36848, - 36722: 20426, - 36723: 23803, - 36724: 26149, - 36725: 30636, - 36726: 31459, - 36727: 33308, - 36728: 39423, - 36729: 20934, - 36730: 24490, - 36731: 26092, - 36732: 26991, - 36733: 27529, - 36734: 28147, - 36736: 28310, - 36737: 28516, - 36738: 30462, - 36739: 32020, - 36740: 24033, - 36741: 36981, - 36742: 37255, - 36743: 38918, - 36744: 20966, - 36745: 21021, - 36746: 25152, - 36747: 26257, - 36748: 26329, - 36749: 28186, - 36750: 24246, - 36751: 32210, - 36752: 32626, - 36753: 26360, - 36754: 34223, - 36755: 34295, - 36756: 35576, - 36757: 21161, - 36758: 21465, - 36759: 22899, - 36760: 24207, - 36761: 24464, - 36762: 24661, - 36763: 37604, - 36764: 38500, - 36765: 20663, - 36766: 20767, - 36767: 21213, - 36768: 21280, - 36769: 21319, - 36770: 21484, - 36771: 21736, - 36772: 21830, - 36773: 21809, - 36774: 22039, - 36775: 22888, - 36776: 22974, - 36777: 23100, - 36778: 23477, - 36779: 23558, - 36780: 23567, - 36781: 23569, - 36782: 23578, - 36783: 24196, - 36784: 24202, - 36785: 24288, - 36786: 24432, - 36787: 25215, - 36788: 25220, - 36789: 25307, - 36790: 25484, - 36791: 25463, - 36792: 26119, - 36793: 26124, - 36794: 26157, - 36795: 26230, - 36796: 26494, - 36797: 26786, - 36798: 27167, - 36799: 27189, - 36800: 27836, - 36801: 28040, - 36802: 28169, - 36803: 28248, - 36804: 28988, - 36805: 28966, - 36806: 29031, - 36807: 30151, - 36808: 30465, - 36809: 30813, - 36810: 30977, - 36811: 31077, - 36812: 31216, - 36813: 31456, - 36814: 31505, - 36815: 31911, - 36816: 32057, - 36817: 32918, - 36818: 33750, - 36819: 33931, - 36820: 34121, - 36821: 34909, - 36822: 35059, - 36823: 35359, - 36824: 35388, - 36825: 35412, - 36826: 35443, - 36827: 35937, - 36828: 36062, - 36829: 37284, - 36830: 37478, - 36831: 37758, - 36832: 37912, - 36833: 38556, - 36834: 38808, - 36835: 19978, - 36836: 19976, - 36837: 19998, - 36838: 20055, - 36839: 20887, - 36840: 21104, - 36841: 22478, - 36842: 22580, - 36843: 22732, - 36844: 23330, - 36845: 24120, - 36846: 24773, - 36847: 25854, - 36848: 26465, - 36849: 26454, - 36850: 27972, - 36851: 29366, - 36852: 30067, - 36853: 31331, - 36854: 33976, - 36855: 35698, - 36856: 37304, - 36857: 37664, - 36858: 22065, - 36859: 22516, - 36860: 39166, - 36928: 25325, - 36929: 26893, - 36930: 27542, - 36931: 29165, - 36932: 32340, - 36933: 32887, - 36934: 33394, - 36935: 35302, - 36936: 39135, - 36937: 34645, - 36938: 36785, - 36939: 23611, - 36940: 20280, - 36941: 20449, - 36942: 20405, - 36943: 21767, - 36944: 23072, - 36945: 23517, - 36946: 23529, - 36947: 24515, - 36948: 24910, - 36949: 25391, - 36950: 26032, - 36951: 26187, - 36952: 26862, - 36953: 27035, - 36954: 28024, - 36955: 28145, - 36956: 30003, - 36957: 30137, - 36958: 30495, - 36959: 31070, - 36960: 31206, - 36961: 32051, - 36962: 33251, - 36963: 33455, - 36964: 34218, - 36965: 35242, - 36966: 35386, - 36967: 36523, - 36968: 36763, - 36969: 36914, - 36970: 37341, - 36971: 38663, - 36972: 20154, - 36973: 20161, - 36974: 20995, - 36975: 22645, - 36976: 22764, - 36977: 23563, - 36978: 29978, - 36979: 23613, - 36980: 33102, - 36981: 35338, - 36982: 36805, - 36983: 38499, - 36984: 38765, - 36985: 31525, - 36986: 35535, - 36987: 38920, - 36988: 37218, - 36989: 22259, - 36990: 21416, - 36992: 36887, - 36993: 21561, - 36994: 22402, - 36995: 24101, - 36996: 25512, - 36997: 27700, - 36998: 28810, - 36999: 30561, - 37e3: 31883, - 37001: 32736, - 37002: 34928, - 37003: 36930, - 37004: 37204, - 37005: 37648, - 37006: 37656, - 37007: 38543, - 37008: 29790, - 37009: 39620, - 37010: 23815, - 37011: 23913, - 37012: 25968, - 37013: 26530, - 37014: 36264, - 37015: 38619, - 37016: 25454, - 37017: 26441, - 37018: 26905, - 37019: 33733, - 37020: 38935, - 37021: 38592, - 37022: 35070, - 37023: 28548, - 37024: 25722, - 37025: 23544, - 37026: 19990, - 37027: 28716, - 37028: 30045, - 37029: 26159, - 37030: 20932, - 37031: 21046, - 37032: 21218, - 37033: 22995, - 37034: 24449, - 37035: 24615, - 37036: 25104, - 37037: 25919, - 37038: 25972, - 37039: 26143, - 37040: 26228, - 37041: 26866, - 37042: 26646, - 37043: 27491, - 37044: 28165, - 37045: 29298, - 37046: 29983, - 37047: 30427, - 37048: 31934, - 37049: 32854, - 37050: 22768, - 37051: 35069, - 37052: 35199, - 37053: 35488, - 37054: 35475, - 37055: 35531, - 37056: 36893, - 37057: 37266, - 37058: 38738, - 37059: 38745, - 37060: 25993, - 37061: 31246, - 37062: 33030, - 37063: 38587, - 37064: 24109, - 37065: 24796, - 37066: 25114, - 37067: 26021, - 37068: 26132, - 37069: 26512, - 37070: 30707, - 37071: 31309, - 37072: 31821, - 37073: 32318, - 37074: 33034, - 37075: 36012, - 37076: 36196, - 37077: 36321, - 37078: 36447, - 37079: 30889, - 37080: 20999, - 37081: 25305, - 37082: 25509, - 37083: 25666, - 37084: 25240, - 37085: 35373, - 37086: 31363, - 37087: 31680, - 37088: 35500, - 37089: 38634, - 37090: 32118, - 37091: 33292, - 37092: 34633, - 37093: 20185, - 37094: 20808, - 37095: 21315, - 37096: 21344, - 37097: 23459, - 37098: 23554, - 37099: 23574, - 37100: 24029, - 37101: 25126, - 37102: 25159, - 37103: 25776, - 37104: 26643, - 37105: 26676, - 37106: 27849, - 37107: 27973, - 37108: 27927, - 37109: 26579, - 37110: 28508, - 37111: 29006, - 37112: 29053, - 37113: 26059, - 37114: 31359, - 37115: 31661, - 37116: 32218, - 37184: 32330, - 37185: 32680, - 37186: 33146, - 37187: 33307, - 37188: 33337, - 37189: 34214, - 37190: 35438, - 37191: 36046, - 37192: 36341, - 37193: 36984, - 37194: 36983, - 37195: 37549, - 37196: 37521, - 37197: 38275, - 37198: 39854, - 37199: 21069, - 37200: 21892, - 37201: 28472, - 37202: 28982, - 37203: 20840, - 37204: 31109, - 37205: 32341, - 37206: 33203, - 37207: 31950, - 37208: 22092, - 37209: 22609, - 37210: 23720, - 37211: 25514, - 37212: 26366, - 37213: 26365, - 37214: 26970, - 37215: 29401, - 37216: 30095, - 37217: 30094, - 37218: 30990, - 37219: 31062, - 37220: 31199, - 37221: 31895, - 37222: 32032, - 37223: 32068, - 37224: 34311, - 37225: 35380, - 37226: 38459, - 37227: 36961, - 37228: 40736, - 37229: 20711, - 37230: 21109, - 37231: 21452, - 37232: 21474, - 37233: 20489, - 37234: 21930, - 37235: 22766, - 37236: 22863, - 37237: 29245, - 37238: 23435, - 37239: 23652, - 37240: 21277, - 37241: 24803, - 37242: 24819, - 37243: 25436, - 37244: 25475, - 37245: 25407, - 37246: 25531, - 37248: 25805, - 37249: 26089, - 37250: 26361, - 37251: 24035, - 37252: 27085, - 37253: 27133, - 37254: 28437, - 37255: 29157, - 37256: 20105, - 37257: 30185, - 37258: 30456, - 37259: 31379, - 37260: 31967, - 37261: 32207, - 37262: 32156, - 37263: 32865, - 37264: 33609, - 37265: 33624, - 37266: 33900, - 37267: 33980, - 37268: 34299, - 37269: 35013, - 37270: 36208, - 37271: 36865, - 37272: 36973, - 37273: 37783, - 37274: 38684, - 37275: 39442, - 37276: 20687, - 37277: 22679, - 37278: 24974, - 37279: 33235, - 37280: 34101, - 37281: 36104, - 37282: 36896, - 37283: 20419, - 37284: 20596, - 37285: 21063, - 37286: 21363, - 37287: 24687, - 37288: 25417, - 37289: 26463, - 37290: 28204, - 37291: 36275, - 37292: 36895, - 37293: 20439, - 37294: 23646, - 37295: 36042, - 37296: 26063, - 37297: 32154, - 37298: 21330, - 37299: 34966, - 37300: 20854, - 37301: 25539, - 37302: 23384, - 37303: 23403, - 37304: 23562, - 37305: 25613, - 37306: 26449, - 37307: 36956, - 37308: 20182, - 37309: 22810, - 37310: 22826, - 37311: 27760, - 37312: 35409, - 37313: 21822, - 37314: 22549, - 37315: 22949, - 37316: 24816, - 37317: 25171, - 37318: 26561, - 37319: 33333, - 37320: 26965, - 37321: 38464, - 37322: 39364, - 37323: 39464, - 37324: 20307, - 37325: 22534, - 37326: 23550, - 37327: 32784, - 37328: 23729, - 37329: 24111, - 37330: 24453, - 37331: 24608, - 37332: 24907, - 37333: 25140, - 37334: 26367, - 37335: 27888, - 37336: 28382, - 37337: 32974, - 37338: 33151, - 37339: 33492, - 37340: 34955, - 37341: 36024, - 37342: 36864, - 37343: 36910, - 37344: 38538, - 37345: 40667, - 37346: 39899, - 37347: 20195, - 37348: 21488, - 37349: 22823, - 37350: 31532, - 37351: 37261, - 37352: 38988, - 37353: 40441, - 37354: 28381, - 37355: 28711, - 37356: 21331, - 37357: 21828, - 37358: 23429, - 37359: 25176, - 37360: 25246, - 37361: 25299, - 37362: 27810, - 37363: 28655, - 37364: 29730, - 37365: 35351, - 37366: 37944, - 37367: 28609, - 37368: 35582, - 37369: 33592, - 37370: 20967, - 37371: 34552, - 37372: 21482, - 37440: 21481, - 37441: 20294, - 37442: 36948, - 37443: 36784, - 37444: 22890, - 37445: 33073, - 37446: 24061, - 37447: 31466, - 37448: 36799, - 37449: 26842, - 37450: 35895, - 37451: 29432, - 37452: 40008, - 37453: 27197, - 37454: 35504, - 37455: 20025, - 37456: 21336, - 37457: 22022, - 37458: 22374, - 37459: 25285, - 37460: 25506, - 37461: 26086, - 37462: 27470, - 37463: 28129, - 37464: 28251, - 37465: 28845, - 37466: 30701, - 37467: 31471, - 37468: 31658, - 37469: 32187, - 37470: 32829, - 37471: 32966, - 37472: 34507, - 37473: 35477, - 37474: 37723, - 37475: 22243, - 37476: 22727, - 37477: 24382, - 37478: 26029, - 37479: 26262, - 37480: 27264, - 37481: 27573, - 37482: 30007, - 37483: 35527, - 37484: 20516, - 37485: 30693, - 37486: 22320, - 37487: 24347, - 37488: 24677, - 37489: 26234, - 37490: 27744, - 37491: 30196, - 37492: 31258, - 37493: 32622, - 37494: 33268, - 37495: 34584, - 37496: 36933, - 37497: 39347, - 37498: 31689, - 37499: 30044, - 37500: 31481, - 37501: 31569, - 37502: 33988, - 37504: 36880, - 37505: 31209, - 37506: 31378, - 37507: 33590, - 37508: 23265, - 37509: 30528, - 37510: 20013, - 37511: 20210, - 37512: 23449, - 37513: 24544, - 37514: 25277, - 37515: 26172, - 37516: 26609, - 37517: 27880, - 37518: 34411, - 37519: 34935, - 37520: 35387, - 37521: 37198, - 37522: 37619, - 37523: 39376, - 37524: 27159, - 37525: 28710, - 37526: 29482, - 37527: 33511, - 37528: 33879, - 37529: 36015, - 37530: 19969, - 37531: 20806, - 37532: 20939, - 37533: 21899, - 37534: 23541, - 37535: 24086, - 37536: 24115, - 37537: 24193, - 37538: 24340, - 37539: 24373, - 37540: 24427, - 37541: 24500, - 37542: 25074, - 37543: 25361, - 37544: 26274, - 37545: 26397, - 37546: 28526, - 37547: 29266, - 37548: 30010, - 37549: 30522, - 37550: 32884, - 37551: 33081, - 37552: 33144, - 37553: 34678, - 37554: 35519, - 37555: 35548, - 37556: 36229, - 37557: 36339, - 37558: 37530, - 37559: 38263, - 37560: 38914, - 37561: 40165, - 37562: 21189, - 37563: 25431, - 37564: 30452, - 37565: 26389, - 37566: 27784, - 37567: 29645, - 37568: 36035, - 37569: 37806, - 37570: 38515, - 37571: 27941, - 37572: 22684, - 37573: 26894, - 37574: 27084, - 37575: 36861, - 37576: 37786, - 37577: 30171, - 37578: 36890, - 37579: 22618, - 37580: 26626, - 37581: 25524, - 37582: 27131, - 37583: 20291, - 37584: 28460, - 37585: 26584, - 37586: 36795, - 37587: 34086, - 37588: 32180, - 37589: 37716, - 37590: 26943, - 37591: 28528, - 37592: 22378, - 37593: 22775, - 37594: 23340, - 37595: 32044, - 37596: 29226, - 37597: 21514, - 37598: 37347, - 37599: 40372, - 37600: 20141, - 37601: 20302, - 37602: 20572, - 37603: 20597, - 37604: 21059, - 37605: 35998, - 37606: 21576, - 37607: 22564, - 37608: 23450, - 37609: 24093, - 37610: 24213, - 37611: 24237, - 37612: 24311, - 37613: 24351, - 37614: 24716, - 37615: 25269, - 37616: 25402, - 37617: 25552, - 37618: 26799, - 37619: 27712, - 37620: 30855, - 37621: 31118, - 37622: 31243, - 37623: 32224, - 37624: 33351, - 37625: 35330, - 37626: 35558, - 37627: 36420, - 37628: 36883, - 37696: 37048, - 37697: 37165, - 37698: 37336, - 37699: 40718, - 37700: 27877, - 37701: 25688, - 37702: 25826, - 37703: 25973, - 37704: 28404, - 37705: 30340, - 37706: 31515, - 37707: 36969, - 37708: 37841, - 37709: 28346, - 37710: 21746, - 37711: 24505, - 37712: 25764, - 37713: 36685, - 37714: 36845, - 37715: 37444, - 37716: 20856, - 37717: 22635, - 37718: 22825, - 37719: 23637, - 37720: 24215, - 37721: 28155, - 37722: 32399, - 37723: 29980, - 37724: 36028, - 37725: 36578, - 37726: 39003, - 37727: 28857, - 37728: 20253, - 37729: 27583, - 37730: 28593, - 37731: 3e4, - 37732: 38651, - 37733: 20814, - 37734: 21520, - 37735: 22581, - 37736: 22615, - 37737: 22956, - 37738: 23648, - 37739: 24466, - 37740: 26007, - 37741: 26460, - 37742: 28193, - 37743: 30331, - 37744: 33759, - 37745: 36077, - 37746: 36884, - 37747: 37117, - 37748: 37709, - 37749: 30757, - 37750: 30778, - 37751: 21162, - 37752: 24230, - 37753: 22303, - 37754: 22900, - 37755: 24594, - 37756: 20498, - 37757: 20826, - 37758: 20908, - 37760: 20941, - 37761: 20992, - 37762: 21776, - 37763: 22612, - 37764: 22616, - 37765: 22871, - 37766: 23445, - 37767: 23798, - 37768: 23947, - 37769: 24764, - 37770: 25237, - 37771: 25645, - 37772: 26481, - 37773: 26691, - 37774: 26812, - 37775: 26847, - 37776: 30423, - 37777: 28120, - 37778: 28271, - 37779: 28059, - 37780: 28783, - 37781: 29128, - 37782: 24403, - 37783: 30168, - 37784: 31095, - 37785: 31561, - 37786: 31572, - 37787: 31570, - 37788: 31958, - 37789: 32113, - 37790: 21040, - 37791: 33891, - 37792: 34153, - 37793: 34276, - 37794: 35342, - 37795: 35588, - 37796: 35910, - 37797: 36367, - 37798: 36867, - 37799: 36879, - 37800: 37913, - 37801: 38518, - 37802: 38957, - 37803: 39472, - 37804: 38360, - 37805: 20685, - 37806: 21205, - 37807: 21516, - 37808: 22530, - 37809: 23566, - 37810: 24999, - 37811: 25758, - 37812: 27934, - 37813: 30643, - 37814: 31461, - 37815: 33012, - 37816: 33796, - 37817: 36947, - 37818: 37509, - 37819: 23776, - 37820: 40199, - 37821: 21311, - 37822: 24471, - 37823: 24499, - 37824: 28060, - 37825: 29305, - 37826: 30563, - 37827: 31167, - 37828: 31716, - 37829: 27602, - 37830: 29420, - 37831: 35501, - 37832: 26627, - 37833: 27233, - 37834: 20984, - 37835: 31361, - 37836: 26932, - 37837: 23626, - 37838: 40182, - 37839: 33515, - 37840: 23493, - 37841: 37193, - 37842: 28702, - 37843: 22136, - 37844: 23663, - 37845: 24775, - 37846: 25958, - 37847: 27788, - 37848: 35930, - 37849: 36929, - 37850: 38931, - 37851: 21585, - 37852: 26311, - 37853: 37389, - 37854: 22856, - 37855: 37027, - 37856: 20869, - 37857: 20045, - 37858: 20970, - 37859: 34201, - 37860: 35598, - 37861: 28760, - 37862: 25466, - 37863: 37707, - 37864: 26978, - 37865: 39348, - 37866: 32260, - 37867: 30071, - 37868: 21335, - 37869: 26976, - 37870: 36575, - 37871: 38627, - 37872: 27741, - 37873: 20108, - 37874: 23612, - 37875: 24336, - 37876: 36841, - 37877: 21250, - 37878: 36049, - 37879: 32905, - 37880: 34425, - 37881: 24319, - 37882: 26085, - 37883: 20083, - 37884: 20837, - 37952: 22914, - 37953: 23615, - 37954: 38894, - 37955: 20219, - 37956: 22922, - 37957: 24525, - 37958: 35469, - 37959: 28641, - 37960: 31152, - 37961: 31074, - 37962: 23527, - 37963: 33905, - 37964: 29483, - 37965: 29105, - 37966: 24180, - 37967: 24565, - 37968: 25467, - 37969: 25754, - 37970: 29123, - 37971: 31896, - 37972: 20035, - 37973: 24316, - 37974: 20043, - 37975: 22492, - 37976: 22178, - 37977: 24745, - 37978: 28611, - 37979: 32013, - 37980: 33021, - 37981: 33075, - 37982: 33215, - 37983: 36786, - 37984: 35223, - 37985: 34468, - 37986: 24052, - 37987: 25226, - 37988: 25773, - 37989: 35207, - 37990: 26487, - 37991: 27874, - 37992: 27966, - 37993: 29750, - 37994: 30772, - 37995: 23110, - 37996: 32629, - 37997: 33453, - 37998: 39340, - 37999: 20467, - 38e3: 24259, - 38001: 25309, - 38002: 25490, - 38003: 25943, - 38004: 26479, - 38005: 30403, - 38006: 29260, - 38007: 32972, - 38008: 32954, - 38009: 36649, - 38010: 37197, - 38011: 20493, - 38012: 22521, - 38013: 23186, - 38014: 26757, - 38016: 26995, - 38017: 29028, - 38018: 29437, - 38019: 36023, - 38020: 22770, - 38021: 36064, - 38022: 38506, - 38023: 36889, - 38024: 34687, - 38025: 31204, - 38026: 30695, - 38027: 33833, - 38028: 20271, - 38029: 21093, - 38030: 21338, - 38031: 25293, - 38032: 26575, - 38033: 27850, - 38034: 30333, - 38035: 31636, - 38036: 31893, - 38037: 33334, - 38038: 34180, - 38039: 36843, - 38040: 26333, - 38041: 28448, - 38042: 29190, - 38043: 32283, - 38044: 33707, - 38045: 39361, - 38046: 40614, - 38047: 20989, - 38048: 31665, - 38049: 30834, - 38050: 31672, - 38051: 32903, - 38052: 31560, - 38053: 27368, - 38054: 24161, - 38055: 32908, - 38056: 30033, - 38057: 30048, - 38058: 20843, - 38059: 37474, - 38060: 28300, - 38061: 30330, - 38062: 37271, - 38063: 39658, - 38064: 20240, - 38065: 32624, - 38066: 25244, - 38067: 31567, - 38068: 38309, - 38069: 40169, - 38070: 22138, - 38071: 22617, - 38072: 34532, - 38073: 38588, - 38074: 20276, - 38075: 21028, - 38076: 21322, - 38077: 21453, - 38078: 21467, - 38079: 24070, - 38080: 25644, - 38081: 26001, - 38082: 26495, - 38083: 27710, - 38084: 27726, - 38085: 29256, - 38086: 29359, - 38087: 29677, - 38088: 30036, - 38089: 32321, - 38090: 33324, - 38091: 34281, - 38092: 36009, - 38093: 31684, - 38094: 37318, - 38095: 29033, - 38096: 38930, - 38097: 39151, - 38098: 25405, - 38099: 26217, - 38100: 30058, - 38101: 30436, - 38102: 30928, - 38103: 34115, - 38104: 34542, - 38105: 21290, - 38106: 21329, - 38107: 21542, - 38108: 22915, - 38109: 24199, - 38110: 24444, - 38111: 24754, - 38112: 25161, - 38113: 25209, - 38114: 25259, - 38115: 26e3, - 38116: 27604, - 38117: 27852, - 38118: 30130, - 38119: 30382, - 38120: 30865, - 38121: 31192, - 38122: 32203, - 38123: 32631, - 38124: 32933, - 38125: 34987, - 38126: 35513, - 38127: 36027, - 38128: 36991, - 38129: 38750, - 38130: 39131, - 38131: 27147, - 38132: 31800, - 38133: 20633, - 38134: 23614, - 38135: 24494, - 38136: 26503, - 38137: 27608, - 38138: 29749, - 38139: 30473, - 38140: 32654, - 38208: 40763, - 38209: 26570, - 38210: 31255, - 38211: 21305, - 38212: 30091, - 38213: 39661, - 38214: 24422, - 38215: 33181, - 38216: 33777, - 38217: 32920, - 38218: 24380, - 38219: 24517, - 38220: 30050, - 38221: 31558, - 38222: 36924, - 38223: 26727, - 38224: 23019, - 38225: 23195, - 38226: 32016, - 38227: 30334, - 38228: 35628, - 38229: 20469, - 38230: 24426, - 38231: 27161, - 38232: 27703, - 38233: 28418, - 38234: 29922, - 38235: 31080, - 38236: 34920, - 38237: 35413, - 38238: 35961, - 38239: 24287, - 38240: 25551, - 38241: 30149, - 38242: 31186, - 38243: 33495, - 38244: 37672, - 38245: 37618, - 38246: 33948, - 38247: 34541, - 38248: 39981, - 38249: 21697, - 38250: 24428, - 38251: 25996, - 38252: 27996, - 38253: 28693, - 38254: 36007, - 38255: 36051, - 38256: 38971, - 38257: 25935, - 38258: 29942, - 38259: 19981, - 38260: 20184, - 38261: 22496, - 38262: 22827, - 38263: 23142, - 38264: 23500, - 38265: 20904, - 38266: 24067, - 38267: 24220, - 38268: 24598, - 38269: 25206, - 38270: 25975, - 38272: 26023, - 38273: 26222, - 38274: 28014, - 38275: 29238, - 38276: 31526, - 38277: 33104, - 38278: 33178, - 38279: 33433, - 38280: 35676, - 38281: 36e3, - 38282: 36070, - 38283: 36212, - 38284: 38428, - 38285: 38468, - 38286: 20398, - 38287: 25771, - 38288: 27494, - 38289: 33310, - 38290: 33889, - 38291: 34154, - 38292: 37096, - 38293: 23553, - 38294: 26963, - 38295: 39080, - 38296: 33914, - 38297: 34135, - 38298: 20239, - 38299: 21103, - 38300: 24489, - 38301: 24133, - 38302: 26381, - 38303: 31119, - 38304: 33145, - 38305: 35079, - 38306: 35206, - 38307: 28149, - 38308: 24343, - 38309: 25173, - 38310: 27832, - 38311: 20175, - 38312: 29289, - 38313: 39826, - 38314: 20998, - 38315: 21563, - 38316: 22132, - 38317: 22707, - 38318: 24996, - 38319: 25198, - 38320: 28954, - 38321: 22894, - 38322: 31881, - 38323: 31966, - 38324: 32027, - 38325: 38640, - 38326: 25991, - 38327: 32862, - 38328: 19993, - 38329: 20341, - 38330: 20853, - 38331: 22592, - 38332: 24163, - 38333: 24179, - 38334: 24330, - 38335: 26564, - 38336: 20006, - 38337: 34109, - 38338: 38281, - 38339: 38491, - 38340: 31859, - 38341: 38913, - 38342: 20731, - 38343: 22721, - 38344: 30294, - 38345: 30887, - 38346: 21029, - 38347: 30629, - 38348: 34065, - 38349: 31622, - 38350: 20559, - 38351: 22793, - 38352: 29255, - 38353: 31687, - 38354: 32232, - 38355: 36794, - 38356: 36820, - 38357: 36941, - 38358: 20415, - 38359: 21193, - 38360: 23081, - 38361: 24321, - 38362: 38829, - 38363: 20445, - 38364: 33303, - 38365: 37610, - 38366: 22275, - 38367: 25429, - 38368: 27497, - 38369: 29995, - 38370: 35036, - 38371: 36628, - 38372: 31298, - 38373: 21215, - 38374: 22675, - 38375: 24917, - 38376: 25098, - 38377: 26286, - 38378: 27597, - 38379: 31807, - 38380: 33769, - 38381: 20515, - 38382: 20472, - 38383: 21253, - 38384: 21574, - 38385: 22577, - 38386: 22857, - 38387: 23453, - 38388: 23792, - 38389: 23791, - 38390: 23849, - 38391: 24214, - 38392: 25265, - 38393: 25447, - 38394: 25918, - 38395: 26041, - 38396: 26379, - 38464: 27861, - 38465: 27873, - 38466: 28921, - 38467: 30770, - 38468: 32299, - 38469: 32990, - 38470: 33459, - 38471: 33804, - 38472: 34028, - 38473: 34562, - 38474: 35090, - 38475: 35370, - 38476: 35914, - 38477: 37030, - 38478: 37586, - 38479: 39165, - 38480: 40179, - 38481: 40300, - 38482: 20047, - 38483: 20129, - 38484: 20621, - 38485: 21078, - 38486: 22346, - 38487: 22952, - 38488: 24125, - 38489: 24536, - 38490: 24537, - 38491: 25151, - 38492: 26292, - 38493: 26395, - 38494: 26576, - 38495: 26834, - 38496: 20882, - 38497: 32033, - 38498: 32938, - 38499: 33192, - 38500: 35584, - 38501: 35980, - 38502: 36031, - 38503: 37502, - 38504: 38450, - 38505: 21536, - 38506: 38956, - 38507: 21271, - 38508: 20693, - 38509: 21340, - 38510: 22696, - 38511: 25778, - 38512: 26420, - 38513: 29287, - 38514: 30566, - 38515: 31302, - 38516: 37350, - 38517: 21187, - 38518: 27809, - 38519: 27526, - 38520: 22528, - 38521: 24140, - 38522: 22868, - 38523: 26412, - 38524: 32763, - 38525: 20961, - 38526: 30406, - 38528: 25705, - 38529: 30952, - 38530: 39764, - 38531: 40635, - 38532: 22475, - 38533: 22969, - 38534: 26151, - 38535: 26522, - 38536: 27598, - 38537: 21737, - 38538: 27097, - 38539: 24149, - 38540: 33180, - 38541: 26517, - 38542: 39850, - 38543: 26622, - 38544: 40018, - 38545: 26717, - 38546: 20134, - 38547: 20451, - 38548: 21448, - 38549: 25273, - 38550: 26411, - 38551: 27819, - 38552: 36804, - 38553: 20397, - 38554: 32365, - 38555: 40639, - 38556: 19975, - 38557: 24930, - 38558: 28288, - 38559: 28459, - 38560: 34067, - 38561: 21619, - 38562: 26410, - 38563: 39749, - 38564: 24051, - 38565: 31637, - 38566: 23724, - 38567: 23494, - 38568: 34588, - 38569: 28234, - 38570: 34001, - 38571: 31252, - 38572: 33032, - 38573: 22937, - 38574: 31885, - 38575: 27665, - 38576: 30496, - 38577: 21209, - 38578: 22818, - 38579: 28961, - 38580: 29279, - 38581: 30683, - 38582: 38695, - 38583: 40289, - 38584: 26891, - 38585: 23167, - 38586: 23064, - 38587: 20901, - 38588: 21517, - 38589: 21629, - 38590: 26126, - 38591: 30431, - 38592: 36855, - 38593: 37528, - 38594: 40180, - 38595: 23018, - 38596: 29277, - 38597: 28357, - 38598: 20813, - 38599: 26825, - 38600: 32191, - 38601: 32236, - 38602: 38754, - 38603: 40634, - 38604: 25720, - 38605: 27169, - 38606: 33538, - 38607: 22916, - 38608: 23391, - 38609: 27611, - 38610: 29467, - 38611: 30450, - 38612: 32178, - 38613: 32791, - 38614: 33945, - 38615: 20786, - 38616: 26408, - 38617: 40665, - 38618: 30446, - 38619: 26466, - 38620: 21247, - 38621: 39173, - 38622: 23588, - 38623: 25147, - 38624: 31870, - 38625: 36016, - 38626: 21839, - 38627: 24758, - 38628: 32011, - 38629: 38272, - 38630: 21249, - 38631: 20063, - 38632: 20918, - 38633: 22812, - 38634: 29242, - 38635: 32822, - 38636: 37326, - 38637: 24357, - 38638: 30690, - 38639: 21380, - 38640: 24441, - 38641: 32004, - 38642: 34220, - 38643: 35379, - 38644: 36493, - 38645: 38742, - 38646: 26611, - 38647: 34222, - 38648: 37971, - 38649: 24841, - 38650: 24840, - 38651: 27833, - 38652: 30290, - 38720: 35565, - 38721: 36664, - 38722: 21807, - 38723: 20305, - 38724: 20778, - 38725: 21191, - 38726: 21451, - 38727: 23461, - 38728: 24189, - 38729: 24736, - 38730: 24962, - 38731: 25558, - 38732: 26377, - 38733: 26586, - 38734: 28263, - 38735: 28044, - 38736: 29494, - 38737: 29495, - 38738: 30001, - 38739: 31056, - 38740: 35029, - 38741: 35480, - 38742: 36938, - 38743: 37009, - 38744: 37109, - 38745: 38596, - 38746: 34701, - 38747: 22805, - 38748: 20104, - 38749: 20313, - 38750: 19982, - 38751: 35465, - 38752: 36671, - 38753: 38928, - 38754: 20653, - 38755: 24188, - 38756: 22934, - 38757: 23481, - 38758: 24248, - 38759: 25562, - 38760: 25594, - 38761: 25793, - 38762: 26332, - 38763: 26954, - 38764: 27096, - 38765: 27915, - 38766: 28342, - 38767: 29076, - 38768: 29992, - 38769: 31407, - 38770: 32650, - 38771: 32768, - 38772: 33865, - 38773: 33993, - 38774: 35201, - 38775: 35617, - 38776: 36362, - 38777: 36965, - 38778: 38525, - 38779: 39178, - 38780: 24958, - 38781: 25233, - 38782: 27442, - 38784: 27779, - 38785: 28020, - 38786: 32716, - 38787: 32764, - 38788: 28096, - 38789: 32645, - 38790: 34746, - 38791: 35064, - 38792: 26469, - 38793: 33713, - 38794: 38972, - 38795: 38647, - 38796: 27931, - 38797: 32097, - 38798: 33853, - 38799: 37226, - 38800: 20081, - 38801: 21365, - 38802: 23888, - 38803: 27396, - 38804: 28651, - 38805: 34253, - 38806: 34349, - 38807: 35239, - 38808: 21033, - 38809: 21519, - 38810: 23653, - 38811: 26446, - 38812: 26792, - 38813: 29702, - 38814: 29827, - 38815: 30178, - 38816: 35023, - 38817: 35041, - 38818: 37324, - 38819: 38626, - 38820: 38520, - 38821: 24459, - 38822: 29575, - 38823: 31435, - 38824: 33870, - 38825: 25504, - 38826: 30053, - 38827: 21129, - 38828: 27969, - 38829: 28316, - 38830: 29705, - 38831: 30041, - 38832: 30827, - 38833: 31890, - 38834: 38534, - 38835: 31452, - 38836: 40845, - 38837: 20406, - 38838: 24942, - 38839: 26053, - 38840: 34396, - 38841: 20102, - 38842: 20142, - 38843: 20698, - 38844: 20001, - 38845: 20940, - 38846: 23534, - 38847: 26009, - 38848: 26753, - 38849: 28092, - 38850: 29471, - 38851: 30274, - 38852: 30637, - 38853: 31260, - 38854: 31975, - 38855: 33391, - 38856: 35538, - 38857: 36988, - 38858: 37327, - 38859: 38517, - 38860: 38936, - 38861: 21147, - 38862: 32209, - 38863: 20523, - 38864: 21400, - 38865: 26519, - 38866: 28107, - 38867: 29136, - 38868: 29747, - 38869: 33256, - 38870: 36650, - 38871: 38563, - 38872: 40023, - 38873: 40607, - 38874: 29792, - 38875: 22593, - 38876: 28057, - 38877: 32047, - 38878: 39006, - 38879: 20196, - 38880: 20278, - 38881: 20363, - 38882: 20919, - 38883: 21169, - 38884: 23994, - 38885: 24604, - 38886: 29618, - 38887: 31036, - 38888: 33491, - 38889: 37428, - 38890: 38583, - 38891: 38646, - 38892: 38666, - 38893: 40599, - 38894: 40802, - 38895: 26278, - 38896: 27508, - 38897: 21015, - 38898: 21155, - 38899: 28872, - 38900: 35010, - 38901: 24265, - 38902: 24651, - 38903: 24976, - 38904: 28451, - 38905: 29001, - 38906: 31806, - 38907: 32244, - 38908: 32879, - 38976: 34030, - 38977: 36899, - 38978: 37676, - 38979: 21570, - 38980: 39791, - 38981: 27347, - 38982: 28809, - 38983: 36034, - 38984: 36335, - 38985: 38706, - 38986: 21172, - 38987: 23105, - 38988: 24266, - 38989: 24324, - 38990: 26391, - 38991: 27004, - 38992: 27028, - 38993: 28010, - 38994: 28431, - 38995: 29282, - 38996: 29436, - 38997: 31725, - 38998: 32769, - 38999: 32894, - 39e3: 34635, - 39001: 37070, - 39002: 20845, - 39003: 40595, - 39004: 31108, - 39005: 32907, - 39006: 37682, - 39007: 35542, - 39008: 20525, - 39009: 21644, - 39010: 35441, - 39011: 27498, - 39012: 36036, - 39013: 33031, - 39014: 24785, - 39015: 26528, - 39016: 40434, - 39017: 20121, - 39018: 20120, - 39019: 39952, - 39020: 35435, - 39021: 34241, - 39022: 34152, - 39023: 26880, - 39024: 28286, - 39025: 30871, - 39026: 33109, - 39071: 24332, - 39072: 19984, - 39073: 19989, - 39074: 20010, - 39075: 20017, - 39076: 20022, - 39077: 20028, - 39078: 20031, - 39079: 20034, - 39080: 20054, - 39081: 20056, - 39082: 20098, - 39083: 20101, - 39084: 35947, - 39085: 20106, - 39086: 33298, - 39087: 24333, - 39088: 20110, - 39089: 20126, - 39090: 20127, - 39091: 20128, - 39092: 20130, - 39093: 20144, - 39094: 20147, - 39095: 20150, - 39096: 20174, - 39097: 20173, - 39098: 20164, - 39099: 20166, - 39100: 20162, - 39101: 20183, - 39102: 20190, - 39103: 20205, - 39104: 20191, - 39105: 20215, - 39106: 20233, - 39107: 20314, - 39108: 20272, - 39109: 20315, - 39110: 20317, - 39111: 20311, - 39112: 20295, - 39113: 20342, - 39114: 20360, - 39115: 20367, - 39116: 20376, - 39117: 20347, - 39118: 20329, - 39119: 20336, - 39120: 20369, - 39121: 20335, - 39122: 20358, - 39123: 20374, - 39124: 20760, - 39125: 20436, - 39126: 20447, - 39127: 20430, - 39128: 20440, - 39129: 20443, - 39130: 20433, - 39131: 20442, - 39132: 20432, - 39133: 20452, - 39134: 20453, - 39135: 20506, - 39136: 20520, - 39137: 20500, - 39138: 20522, - 39139: 20517, - 39140: 20485, - 39141: 20252, - 39142: 20470, - 39143: 20513, - 39144: 20521, - 39145: 20524, - 39146: 20478, - 39147: 20463, - 39148: 20497, - 39149: 20486, - 39150: 20547, - 39151: 20551, - 39152: 26371, - 39153: 20565, - 39154: 20560, - 39155: 20552, - 39156: 20570, - 39157: 20566, - 39158: 20588, - 39159: 20600, - 39160: 20608, - 39161: 20634, - 39162: 20613, - 39163: 20660, - 39164: 20658, - 39232: 20681, - 39233: 20682, - 39234: 20659, - 39235: 20674, - 39236: 20694, - 39237: 20702, - 39238: 20709, - 39239: 20717, - 39240: 20707, - 39241: 20718, - 39242: 20729, - 39243: 20725, - 39244: 20745, - 39245: 20737, - 39246: 20738, - 39247: 20758, - 39248: 20757, - 39249: 20756, - 39250: 20762, - 39251: 20769, - 39252: 20794, - 39253: 20791, - 39254: 20796, - 39255: 20795, - 39256: 20799, - 39257: 20800, - 39258: 20818, - 39259: 20812, - 39260: 20820, - 39261: 20834, - 39262: 31480, - 39263: 20841, - 39264: 20842, - 39265: 20846, - 39266: 20864, - 39267: 20866, - 39268: 22232, - 39269: 20876, - 39270: 20873, - 39271: 20879, - 39272: 20881, - 39273: 20883, - 39274: 20885, - 39275: 20886, - 39276: 20900, - 39277: 20902, - 39278: 20898, - 39279: 20905, - 39280: 20906, - 39281: 20907, - 39282: 20915, - 39283: 20913, - 39284: 20914, - 39285: 20912, - 39286: 20917, - 39287: 20925, - 39288: 20933, - 39289: 20937, - 39290: 20955, - 39291: 20960, - 39292: 34389, - 39293: 20969, - 39294: 20973, - 39296: 20976, - 39297: 20981, - 39298: 20990, - 39299: 20996, - 39300: 21003, - 39301: 21012, - 39302: 21006, - 39303: 21031, - 39304: 21034, - 39305: 21038, - 39306: 21043, - 39307: 21049, - 39308: 21071, - 39309: 21060, - 39310: 21067, - 39311: 21068, - 39312: 21086, - 39313: 21076, - 39314: 21098, - 39315: 21108, - 39316: 21097, - 39317: 21107, - 39318: 21119, - 39319: 21117, - 39320: 21133, - 39321: 21140, - 39322: 21138, - 39323: 21105, - 39324: 21128, - 39325: 21137, - 39326: 36776, - 39327: 36775, - 39328: 21164, - 39329: 21165, - 39330: 21180, - 39331: 21173, - 39332: 21185, - 39333: 21197, - 39334: 21207, - 39335: 21214, - 39336: 21219, - 39337: 21222, - 39338: 39149, - 39339: 21216, - 39340: 21235, - 39341: 21237, - 39342: 21240, - 39343: 21241, - 39344: 21254, - 39345: 21256, - 39346: 30008, - 39347: 21261, - 39348: 21264, - 39349: 21263, - 39350: 21269, - 39351: 21274, - 39352: 21283, - 39353: 21295, - 39354: 21297, - 39355: 21299, - 39356: 21304, - 39357: 21312, - 39358: 21318, - 39359: 21317, - 39360: 19991, - 39361: 21321, - 39362: 21325, - 39363: 20950, - 39364: 21342, - 39365: 21353, - 39366: 21358, - 39367: 22808, - 39368: 21371, - 39369: 21367, - 39370: 21378, - 39371: 21398, - 39372: 21408, - 39373: 21414, - 39374: 21413, - 39375: 21422, - 39376: 21424, - 39377: 21430, - 39378: 21443, - 39379: 31762, - 39380: 38617, - 39381: 21471, - 39382: 26364, - 39383: 29166, - 39384: 21486, - 39385: 21480, - 39386: 21485, - 39387: 21498, - 39388: 21505, - 39389: 21565, - 39390: 21568, - 39391: 21548, - 39392: 21549, - 39393: 21564, - 39394: 21550, - 39395: 21558, - 39396: 21545, - 39397: 21533, - 39398: 21582, - 39399: 21647, - 39400: 21621, - 39401: 21646, - 39402: 21599, - 39403: 21617, - 39404: 21623, - 39405: 21616, - 39406: 21650, - 39407: 21627, - 39408: 21632, - 39409: 21622, - 39410: 21636, - 39411: 21648, - 39412: 21638, - 39413: 21703, - 39414: 21666, - 39415: 21688, - 39416: 21669, - 39417: 21676, - 39418: 21700, - 39419: 21704, - 39420: 21672, - 39488: 21675, - 39489: 21698, - 39490: 21668, - 39491: 21694, - 39492: 21692, - 39493: 21720, - 39494: 21733, - 39495: 21734, - 39496: 21775, - 39497: 21780, - 39498: 21757, - 39499: 21742, - 39500: 21741, - 39501: 21754, - 39502: 21730, - 39503: 21817, - 39504: 21824, - 39505: 21859, - 39506: 21836, - 39507: 21806, - 39508: 21852, - 39509: 21829, - 39510: 21846, - 39511: 21847, - 39512: 21816, - 39513: 21811, - 39514: 21853, - 39515: 21913, - 39516: 21888, - 39517: 21679, - 39518: 21898, - 39519: 21919, - 39520: 21883, - 39521: 21886, - 39522: 21912, - 39523: 21918, - 39524: 21934, - 39525: 21884, - 39526: 21891, - 39527: 21929, - 39528: 21895, - 39529: 21928, - 39530: 21978, - 39531: 21957, - 39532: 21983, - 39533: 21956, - 39534: 21980, - 39535: 21988, - 39536: 21972, - 39537: 22036, - 39538: 22007, - 39539: 22038, - 39540: 22014, - 39541: 22013, - 39542: 22043, - 39543: 22009, - 39544: 22094, - 39545: 22096, - 39546: 29151, - 39547: 22068, - 39548: 22070, - 39549: 22066, - 39550: 22072, - 39552: 22123, - 39553: 22116, - 39554: 22063, - 39555: 22124, - 39556: 22122, - 39557: 22150, - 39558: 22144, - 39559: 22154, - 39560: 22176, - 39561: 22164, - 39562: 22159, - 39563: 22181, - 39564: 22190, - 39565: 22198, - 39566: 22196, - 39567: 22210, - 39568: 22204, - 39569: 22209, - 39570: 22211, - 39571: 22208, - 39572: 22216, - 39573: 22222, - 39574: 22225, - 39575: 22227, - 39576: 22231, - 39577: 22254, - 39578: 22265, - 39579: 22272, - 39580: 22271, - 39581: 22276, - 39582: 22281, - 39583: 22280, - 39584: 22283, - 39585: 22285, - 39586: 22291, - 39587: 22296, - 39588: 22294, - 39589: 21959, - 39590: 22300, - 39591: 22310, - 39592: 22327, - 39593: 22328, - 39594: 22350, - 39595: 22331, - 39596: 22336, - 39597: 22351, - 39598: 22377, - 39599: 22464, - 39600: 22408, - 39601: 22369, - 39602: 22399, - 39603: 22409, - 39604: 22419, - 39605: 22432, - 39606: 22451, - 39607: 22436, - 39608: 22442, - 39609: 22448, - 39610: 22467, - 39611: 22470, - 39612: 22484, - 39613: 22482, - 39614: 22483, - 39615: 22538, - 39616: 22486, - 39617: 22499, - 39618: 22539, - 39619: 22553, - 39620: 22557, - 39621: 22642, - 39622: 22561, - 39623: 22626, - 39624: 22603, - 39625: 22640, - 39626: 27584, - 39627: 22610, - 39628: 22589, - 39629: 22649, - 39630: 22661, - 39631: 22713, - 39632: 22687, - 39633: 22699, - 39634: 22714, - 39635: 22750, - 39636: 22715, - 39637: 22712, - 39638: 22702, - 39639: 22725, - 39640: 22739, - 39641: 22737, - 39642: 22743, - 39643: 22745, - 39644: 22744, - 39645: 22757, - 39646: 22748, - 39647: 22756, - 39648: 22751, - 39649: 22767, - 39650: 22778, - 39651: 22777, - 39652: 22779, - 39653: 22780, - 39654: 22781, - 39655: 22786, - 39656: 22794, - 39657: 22800, - 39658: 22811, - 39659: 26790, - 39660: 22821, - 39661: 22828, - 39662: 22829, - 39663: 22834, - 39664: 22840, - 39665: 22846, - 39666: 31442, - 39667: 22869, - 39668: 22864, - 39669: 22862, - 39670: 22874, - 39671: 22872, - 39672: 22882, - 39673: 22880, - 39674: 22887, - 39675: 22892, - 39676: 22889, - 39744: 22904, - 39745: 22913, - 39746: 22941, - 39747: 20318, - 39748: 20395, - 39749: 22947, - 39750: 22962, - 39751: 22982, - 39752: 23016, - 39753: 23004, - 39754: 22925, - 39755: 23001, - 39756: 23002, - 39757: 23077, - 39758: 23071, - 39759: 23057, - 39760: 23068, - 39761: 23049, - 39762: 23066, - 39763: 23104, - 39764: 23148, - 39765: 23113, - 39766: 23093, - 39767: 23094, - 39768: 23138, - 39769: 23146, - 39770: 23194, - 39771: 23228, - 39772: 23230, - 39773: 23243, - 39774: 23234, - 39775: 23229, - 39776: 23267, - 39777: 23255, - 39778: 23270, - 39779: 23273, - 39780: 23254, - 39781: 23290, - 39782: 23291, - 39783: 23308, - 39784: 23307, - 39785: 23318, - 39786: 23346, - 39787: 23248, - 39788: 23338, - 39789: 23350, - 39790: 23358, - 39791: 23363, - 39792: 23365, - 39793: 23360, - 39794: 23377, - 39795: 23381, - 39796: 23386, - 39797: 23387, - 39798: 23397, - 39799: 23401, - 39800: 23408, - 39801: 23411, - 39802: 23413, - 39803: 23416, - 39804: 25992, - 39805: 23418, - 39806: 23424, - 39808: 23427, - 39809: 23462, - 39810: 23480, - 39811: 23491, - 39812: 23495, - 39813: 23497, - 39814: 23508, - 39815: 23504, - 39816: 23524, - 39817: 23526, - 39818: 23522, - 39819: 23518, - 39820: 23525, - 39821: 23531, - 39822: 23536, - 39823: 23542, - 39824: 23539, - 39825: 23557, - 39826: 23559, - 39827: 23560, - 39828: 23565, - 39829: 23571, - 39830: 23584, - 39831: 23586, - 39832: 23592, - 39833: 23608, - 39834: 23609, - 39835: 23617, - 39836: 23622, - 39837: 23630, - 39838: 23635, - 39839: 23632, - 39840: 23631, - 39841: 23409, - 39842: 23660, - 39843: 23662, - 39844: 20066, - 39845: 23670, - 39846: 23673, - 39847: 23692, - 39848: 23697, - 39849: 23700, - 39850: 22939, - 39851: 23723, - 39852: 23739, - 39853: 23734, - 39854: 23740, - 39855: 23735, - 39856: 23749, - 39857: 23742, - 39858: 23751, - 39859: 23769, - 39860: 23785, - 39861: 23805, - 39862: 23802, - 39863: 23789, - 39864: 23948, - 39865: 23786, - 39866: 23819, - 39867: 23829, - 39868: 23831, - 39869: 23900, - 39870: 23839, - 39871: 23835, - 39872: 23825, - 39873: 23828, - 39874: 23842, - 39875: 23834, - 39876: 23833, - 39877: 23832, - 39878: 23884, - 39879: 23890, - 39880: 23886, - 39881: 23883, - 39882: 23916, - 39883: 23923, - 39884: 23926, - 39885: 23943, - 39886: 23940, - 39887: 23938, - 39888: 23970, - 39889: 23965, - 39890: 23980, - 39891: 23982, - 39892: 23997, - 39893: 23952, - 39894: 23991, - 39895: 23996, - 39896: 24009, - 39897: 24013, - 39898: 24019, - 39899: 24018, - 39900: 24022, - 39901: 24027, - 39902: 24043, - 39903: 24050, - 39904: 24053, - 39905: 24075, - 39906: 24090, - 39907: 24089, - 39908: 24081, - 39909: 24091, - 39910: 24118, - 39911: 24119, - 39912: 24132, - 39913: 24131, - 39914: 24128, - 39915: 24142, - 39916: 24151, - 39917: 24148, - 39918: 24159, - 39919: 24162, - 39920: 24164, - 39921: 24135, - 39922: 24181, - 39923: 24182, - 39924: 24186, - 39925: 40636, - 39926: 24191, - 39927: 24224, - 39928: 24257, - 39929: 24258, - 39930: 24264, - 39931: 24272, - 39932: 24271, - 4e4: 24278, - 40001: 24291, - 40002: 24285, - 40003: 24282, - 40004: 24283, - 40005: 24290, - 40006: 24289, - 40007: 24296, - 40008: 24297, - 40009: 24300, - 40010: 24305, - 40011: 24307, - 40012: 24304, - 40013: 24308, - 40014: 24312, - 40015: 24318, - 40016: 24323, - 40017: 24329, - 40018: 24413, - 40019: 24412, - 40020: 24331, - 40021: 24337, - 40022: 24342, - 40023: 24361, - 40024: 24365, - 40025: 24376, - 40026: 24385, - 40027: 24392, - 40028: 24396, - 40029: 24398, - 40030: 24367, - 40031: 24401, - 40032: 24406, - 40033: 24407, - 40034: 24409, - 40035: 24417, - 40036: 24429, - 40037: 24435, - 40038: 24439, - 40039: 24451, - 40040: 24450, - 40041: 24447, - 40042: 24458, - 40043: 24456, - 40044: 24465, - 40045: 24455, - 40046: 24478, - 40047: 24473, - 40048: 24472, - 40049: 24480, - 40050: 24488, - 40051: 24493, - 40052: 24508, - 40053: 24534, - 40054: 24571, - 40055: 24548, - 40056: 24568, - 40057: 24561, - 40058: 24541, - 40059: 24755, - 40060: 24575, - 40061: 24609, - 40062: 24672, - 40064: 24601, - 40065: 24592, - 40066: 24617, - 40067: 24590, - 40068: 24625, - 40069: 24603, - 40070: 24597, - 40071: 24619, - 40072: 24614, - 40073: 24591, - 40074: 24634, - 40075: 24666, - 40076: 24641, - 40077: 24682, - 40078: 24695, - 40079: 24671, - 40080: 24650, - 40081: 24646, - 40082: 24653, - 40083: 24675, - 40084: 24643, - 40085: 24676, - 40086: 24642, - 40087: 24684, - 40088: 24683, - 40089: 24665, - 40090: 24705, - 40091: 24717, - 40092: 24807, - 40093: 24707, - 40094: 24730, - 40095: 24708, - 40096: 24731, - 40097: 24726, - 40098: 24727, - 40099: 24722, - 40100: 24743, - 40101: 24715, - 40102: 24801, - 40103: 24760, - 40104: 24800, - 40105: 24787, - 40106: 24756, - 40107: 24560, - 40108: 24765, - 40109: 24774, - 40110: 24757, - 40111: 24792, - 40112: 24909, - 40113: 24853, - 40114: 24838, - 40115: 24822, - 40116: 24823, - 40117: 24832, - 40118: 24820, - 40119: 24826, - 40120: 24835, - 40121: 24865, - 40122: 24827, - 40123: 24817, - 40124: 24845, - 40125: 24846, - 40126: 24903, - 40127: 24894, - 40128: 24872, - 40129: 24871, - 40130: 24906, - 40131: 24895, - 40132: 24892, - 40133: 24876, - 40134: 24884, - 40135: 24893, - 40136: 24898, - 40137: 24900, - 40138: 24947, - 40139: 24951, - 40140: 24920, - 40141: 24921, - 40142: 24922, - 40143: 24939, - 40144: 24948, - 40145: 24943, - 40146: 24933, - 40147: 24945, - 40148: 24927, - 40149: 24925, - 40150: 24915, - 40151: 24949, - 40152: 24985, - 40153: 24982, - 40154: 24967, - 40155: 25004, - 40156: 24980, - 40157: 24986, - 40158: 24970, - 40159: 24977, - 40160: 25003, - 40161: 25006, - 40162: 25036, - 40163: 25034, - 40164: 25033, - 40165: 25079, - 40166: 25032, - 40167: 25027, - 40168: 25030, - 40169: 25018, - 40170: 25035, - 40171: 32633, - 40172: 25037, - 40173: 25062, - 40174: 25059, - 40175: 25078, - 40176: 25082, - 40177: 25076, - 40178: 25087, - 40179: 25085, - 40180: 25084, - 40181: 25086, - 40182: 25088, - 40183: 25096, - 40184: 25097, - 40185: 25101, - 40186: 25100, - 40187: 25108, - 40188: 25115, - 40256: 25118, - 40257: 25121, - 40258: 25130, - 40259: 25134, - 40260: 25136, - 40261: 25138, - 40262: 25139, - 40263: 25153, - 40264: 25166, - 40265: 25182, - 40266: 25187, - 40267: 25179, - 40268: 25184, - 40269: 25192, - 40270: 25212, - 40271: 25218, - 40272: 25225, - 40273: 25214, - 40274: 25234, - 40275: 25235, - 40276: 25238, - 40277: 25300, - 40278: 25219, - 40279: 25236, - 40280: 25303, - 40281: 25297, - 40282: 25275, - 40283: 25295, - 40284: 25343, - 40285: 25286, - 40286: 25812, - 40287: 25288, - 40288: 25308, - 40289: 25292, - 40290: 25290, - 40291: 25282, - 40292: 25287, - 40293: 25243, - 40294: 25289, - 40295: 25356, - 40296: 25326, - 40297: 25329, - 40298: 25383, - 40299: 25346, - 40300: 25352, - 40301: 25327, - 40302: 25333, - 40303: 25424, - 40304: 25406, - 40305: 25421, - 40306: 25628, - 40307: 25423, - 40308: 25494, - 40309: 25486, - 40310: 25472, - 40311: 25515, - 40312: 25462, - 40313: 25507, - 40314: 25487, - 40315: 25481, - 40316: 25503, - 40317: 25525, - 40318: 25451, - 40320: 25449, - 40321: 25534, - 40322: 25577, - 40323: 25536, - 40324: 25542, - 40325: 25571, - 40326: 25545, - 40327: 25554, - 40328: 25590, - 40329: 25540, - 40330: 25622, - 40331: 25652, - 40332: 25606, - 40333: 25619, - 40334: 25638, - 40335: 25654, - 40336: 25885, - 40337: 25623, - 40338: 25640, - 40339: 25615, - 40340: 25703, - 40341: 25711, - 40342: 25718, - 40343: 25678, - 40344: 25898, - 40345: 25749, - 40346: 25747, - 40347: 25765, - 40348: 25769, - 40349: 25736, - 40350: 25788, - 40351: 25818, - 40352: 25810, - 40353: 25797, - 40354: 25799, - 40355: 25787, - 40356: 25816, - 40357: 25794, - 40358: 25841, - 40359: 25831, - 40360: 33289, - 40361: 25824, - 40362: 25825, - 40363: 25260, - 40364: 25827, - 40365: 25839, - 40366: 25900, - 40367: 25846, - 40368: 25844, - 40369: 25842, - 40370: 25850, - 40371: 25856, - 40372: 25853, - 40373: 25880, - 40374: 25884, - 40375: 25861, - 40376: 25892, - 40377: 25891, - 40378: 25899, - 40379: 25908, - 40380: 25909, - 40381: 25911, - 40382: 25910, - 40383: 25912, - 40384: 30027, - 40385: 25928, - 40386: 25942, - 40387: 25941, - 40388: 25933, - 40389: 25944, - 40390: 25950, - 40391: 25949, - 40392: 25970, - 40393: 25976, - 40394: 25986, - 40395: 25987, - 40396: 35722, - 40397: 26011, - 40398: 26015, - 40399: 26027, - 40400: 26039, - 40401: 26051, - 40402: 26054, - 40403: 26049, - 40404: 26052, - 40405: 26060, - 40406: 26066, - 40407: 26075, - 40408: 26073, - 40409: 26080, - 40410: 26081, - 40411: 26097, - 40412: 26482, - 40413: 26122, - 40414: 26115, - 40415: 26107, - 40416: 26483, - 40417: 26165, - 40418: 26166, - 40419: 26164, - 40420: 26140, - 40421: 26191, - 40422: 26180, - 40423: 26185, - 40424: 26177, - 40425: 26206, - 40426: 26205, - 40427: 26212, - 40428: 26215, - 40429: 26216, - 40430: 26207, - 40431: 26210, - 40432: 26224, - 40433: 26243, - 40434: 26248, - 40435: 26254, - 40436: 26249, - 40437: 26244, - 40438: 26264, - 40439: 26269, - 40440: 26305, - 40441: 26297, - 40442: 26313, - 40443: 26302, - 40444: 26300, - 40512: 26308, - 40513: 26296, - 40514: 26326, - 40515: 26330, - 40516: 26336, - 40517: 26175, - 40518: 26342, - 40519: 26345, - 40520: 26352, - 40521: 26357, - 40522: 26359, - 40523: 26383, - 40524: 26390, - 40525: 26398, - 40526: 26406, - 40527: 26407, - 40528: 38712, - 40529: 26414, - 40530: 26431, - 40531: 26422, - 40532: 26433, - 40533: 26424, - 40534: 26423, - 40535: 26438, - 40536: 26462, - 40537: 26464, - 40538: 26457, - 40539: 26467, - 40540: 26468, - 40541: 26505, - 40542: 26480, - 40543: 26537, - 40544: 26492, - 40545: 26474, - 40546: 26508, - 40547: 26507, - 40548: 26534, - 40549: 26529, - 40550: 26501, - 40551: 26551, - 40552: 26607, - 40553: 26548, - 40554: 26604, - 40555: 26547, - 40556: 26601, - 40557: 26552, - 40558: 26596, - 40559: 26590, - 40560: 26589, - 40561: 26594, - 40562: 26606, - 40563: 26553, - 40564: 26574, - 40565: 26566, - 40566: 26599, - 40567: 27292, - 40568: 26654, - 40569: 26694, - 40570: 26665, - 40571: 26688, - 40572: 26701, - 40573: 26674, - 40574: 26702, - 40576: 26803, - 40577: 26667, - 40578: 26713, - 40579: 26723, - 40580: 26743, - 40581: 26751, - 40582: 26783, - 40583: 26767, - 40584: 26797, - 40585: 26772, - 40586: 26781, - 40587: 26779, - 40588: 26755, - 40589: 27310, - 40590: 26809, - 40591: 26740, - 40592: 26805, - 40593: 26784, - 40594: 26810, - 40595: 26895, - 40596: 26765, - 40597: 26750, - 40598: 26881, - 40599: 26826, - 40600: 26888, - 40601: 26840, - 40602: 26914, - 40603: 26918, - 40604: 26849, - 40605: 26892, - 40606: 26829, - 40607: 26836, - 40608: 26855, - 40609: 26837, - 40610: 26934, - 40611: 26898, - 40612: 26884, - 40613: 26839, - 40614: 26851, - 40615: 26917, - 40616: 26873, - 40617: 26848, - 40618: 26863, - 40619: 26920, - 40620: 26922, - 40621: 26906, - 40622: 26915, - 40623: 26913, - 40624: 26822, - 40625: 27001, - 40626: 26999, - 40627: 26972, - 40628: 27e3, - 40629: 26987, - 40630: 26964, - 40631: 27006, - 40632: 26990, - 40633: 26937, - 40634: 26996, - 40635: 26941, - 40636: 26969, - 40637: 26928, - 40638: 26977, - 40639: 26974, - 40640: 26973, - 40641: 27009, - 40642: 26986, - 40643: 27058, - 40644: 27054, - 40645: 27088, - 40646: 27071, - 40647: 27073, - 40648: 27091, - 40649: 27070, - 40650: 27086, - 40651: 23528, - 40652: 27082, - 40653: 27101, - 40654: 27067, - 40655: 27075, - 40656: 27047, - 40657: 27182, - 40658: 27025, - 40659: 27040, - 40660: 27036, - 40661: 27029, - 40662: 27060, - 40663: 27102, - 40664: 27112, - 40665: 27138, - 40666: 27163, - 40667: 27135, - 40668: 27402, - 40669: 27129, - 40670: 27122, - 40671: 27111, - 40672: 27141, - 40673: 27057, - 40674: 27166, - 40675: 27117, - 40676: 27156, - 40677: 27115, - 40678: 27146, - 40679: 27154, - 40680: 27329, - 40681: 27171, - 40682: 27155, - 40683: 27204, - 40684: 27148, - 40685: 27250, - 40686: 27190, - 40687: 27256, - 40688: 27207, - 40689: 27234, - 40690: 27225, - 40691: 27238, - 40692: 27208, - 40693: 27192, - 40694: 27170, - 40695: 27280, - 40696: 27277, - 40697: 27296, - 40698: 27268, - 40699: 27298, - 40700: 27299, - 40768: 27287, - 40769: 34327, - 40770: 27323, - 40771: 27331, - 40772: 27330, - 40773: 27320, - 40774: 27315, - 40775: 27308, - 40776: 27358, - 40777: 27345, - 40778: 27359, - 40779: 27306, - 40780: 27354, - 40781: 27370, - 40782: 27387, - 40783: 27397, - 40784: 34326, - 40785: 27386, - 40786: 27410, - 40787: 27414, - 40788: 39729, - 40789: 27423, - 40790: 27448, - 40791: 27447, - 40792: 30428, - 40793: 27449, - 40794: 39150, - 40795: 27463, - 40796: 27459, - 40797: 27465, - 40798: 27472, - 40799: 27481, - 40800: 27476, - 40801: 27483, - 40802: 27487, - 40803: 27489, - 40804: 27512, - 40805: 27513, - 40806: 27519, - 40807: 27520, - 40808: 27524, - 40809: 27523, - 40810: 27533, - 40811: 27544, - 40812: 27541, - 40813: 27550, - 40814: 27556, - 40815: 27562, - 40816: 27563, - 40817: 27567, - 40818: 27570, - 40819: 27569, - 40820: 27571, - 40821: 27575, - 40822: 27580, - 40823: 27590, - 40824: 27595, - 40825: 27603, - 40826: 27615, - 40827: 27628, - 40828: 27627, - 40829: 27635, - 40830: 27631, - 40832: 40638, - 40833: 27656, - 40834: 27667, - 40835: 27668, - 40836: 27675, - 40837: 27684, - 40838: 27683, - 40839: 27742, - 40840: 27733, - 40841: 27746, - 40842: 27754, - 40843: 27778, - 40844: 27789, - 40845: 27802, - 40846: 27777, - 40847: 27803, - 40848: 27774, - 40849: 27752, - 40850: 27763, - 40851: 27794, - 40852: 27792, - 40853: 27844, - 40854: 27889, - 40855: 27859, - 40856: 27837, - 40857: 27863, - 40858: 27845, - 40859: 27869, - 40860: 27822, - 40861: 27825, - 40862: 27838, - 40863: 27834, - 40864: 27867, - 40865: 27887, - 40866: 27865, - 40867: 27882, - 40868: 27935, - 40869: 34893, - 40870: 27958, - 40871: 27947, - 40872: 27965, - 40873: 27960, - 40874: 27929, - 40875: 27957, - 40876: 27955, - 40877: 27922, - 40878: 27916, - 40879: 28003, - 40880: 28051, - 40881: 28004, - 40882: 27994, - 40883: 28025, - 40884: 27993, - 40885: 28046, - 40886: 28053, - 40887: 28644, - 40888: 28037, - 40889: 28153, - 40890: 28181, - 40891: 28170, - 40892: 28085, - 40893: 28103, - 40894: 28134, - 40895: 28088, - 40896: 28102, - 40897: 28140, - 40898: 28126, - 40899: 28108, - 40900: 28136, - 40901: 28114, - 40902: 28101, - 40903: 28154, - 40904: 28121, - 40905: 28132, - 40906: 28117, - 40907: 28138, - 40908: 28142, - 40909: 28205, - 40910: 28270, - 40911: 28206, - 40912: 28185, - 40913: 28274, - 40914: 28255, - 40915: 28222, - 40916: 28195, - 40917: 28267, - 40918: 28203, - 40919: 28278, - 40920: 28237, - 40921: 28191, - 40922: 28227, - 40923: 28218, - 40924: 28238, - 40925: 28196, - 40926: 28415, - 40927: 28189, - 40928: 28216, - 40929: 28290, - 40930: 28330, - 40931: 28312, - 40932: 28361, - 40933: 28343, - 40934: 28371, - 40935: 28349, - 40936: 28335, - 40937: 28356, - 40938: 28338, - 40939: 28372, - 40940: 28373, - 40941: 28303, - 40942: 28325, - 40943: 28354, - 40944: 28319, - 40945: 28481, - 40946: 28433, - 40947: 28748, - 40948: 28396, - 40949: 28408, - 40950: 28414, - 40951: 28479, - 40952: 28402, - 40953: 28465, - 40954: 28399, - 40955: 28466, - 40956: 28364, - 57408: 28478, - 57409: 28435, - 57410: 28407, - 57411: 28550, - 57412: 28538, - 57413: 28536, - 57414: 28545, - 57415: 28544, - 57416: 28527, - 57417: 28507, - 57418: 28659, - 57419: 28525, - 57420: 28546, - 57421: 28540, - 57422: 28504, - 57423: 28558, - 57424: 28561, - 57425: 28610, - 57426: 28518, - 57427: 28595, - 57428: 28579, - 57429: 28577, - 57430: 28580, - 57431: 28601, - 57432: 28614, - 57433: 28586, - 57434: 28639, - 57435: 28629, - 57436: 28652, - 57437: 28628, - 57438: 28632, - 57439: 28657, - 57440: 28654, - 57441: 28635, - 57442: 28681, - 57443: 28683, - 57444: 28666, - 57445: 28689, - 57446: 28673, - 57447: 28687, - 57448: 28670, - 57449: 28699, - 57450: 28698, - 57451: 28532, - 57452: 28701, - 57453: 28696, - 57454: 28703, - 57455: 28720, - 57456: 28734, - 57457: 28722, - 57458: 28753, - 57459: 28771, - 57460: 28825, - 57461: 28818, - 57462: 28847, - 57463: 28913, - 57464: 28844, - 57465: 28856, - 57466: 28851, - 57467: 28846, - 57468: 28895, - 57469: 28875, - 57470: 28893, - 57472: 28889, - 57473: 28937, - 57474: 28925, - 57475: 28956, - 57476: 28953, - 57477: 29029, - 57478: 29013, - 57479: 29064, - 57480: 29030, - 57481: 29026, - 57482: 29004, - 57483: 29014, - 57484: 29036, - 57485: 29071, - 57486: 29179, - 57487: 29060, - 57488: 29077, - 57489: 29096, - 57490: 29100, - 57491: 29143, - 57492: 29113, - 57493: 29118, - 57494: 29138, - 57495: 29129, - 57496: 29140, - 57497: 29134, - 57498: 29152, - 57499: 29164, - 57500: 29159, - 57501: 29173, - 57502: 29180, - 57503: 29177, - 57504: 29183, - 57505: 29197, - 57506: 29200, - 57507: 29211, - 57508: 29224, - 57509: 29229, - 57510: 29228, - 57511: 29232, - 57512: 29234, - 57513: 29243, - 57514: 29244, - 57515: 29247, - 57516: 29248, - 57517: 29254, - 57518: 29259, - 57519: 29272, - 57520: 29300, - 57521: 29310, - 57522: 29314, - 57523: 29313, - 57524: 29319, - 57525: 29330, - 57526: 29334, - 57527: 29346, - 57528: 29351, - 57529: 29369, - 57530: 29362, - 57531: 29379, - 57532: 29382, - 57533: 29380, - 57534: 29390, - 57535: 29394, - 57536: 29410, - 57537: 29408, - 57538: 29409, - 57539: 29433, - 57540: 29431, - 57541: 20495, - 57542: 29463, - 57543: 29450, - 57544: 29468, - 57545: 29462, - 57546: 29469, - 57547: 29492, - 57548: 29487, - 57549: 29481, - 57550: 29477, - 57551: 29502, - 57552: 29518, - 57553: 29519, - 57554: 40664, - 57555: 29527, - 57556: 29546, - 57557: 29544, - 57558: 29552, - 57559: 29560, - 57560: 29557, - 57561: 29563, - 57562: 29562, - 57563: 29640, - 57564: 29619, - 57565: 29646, - 57566: 29627, - 57567: 29632, - 57568: 29669, - 57569: 29678, - 57570: 29662, - 57571: 29858, - 57572: 29701, - 57573: 29807, - 57574: 29733, - 57575: 29688, - 57576: 29746, - 57577: 29754, - 57578: 29781, - 57579: 29759, - 57580: 29791, - 57581: 29785, - 57582: 29761, - 57583: 29788, - 57584: 29801, - 57585: 29808, - 57586: 29795, - 57587: 29802, - 57588: 29814, - 57589: 29822, - 57590: 29835, - 57591: 29854, - 57592: 29863, - 57593: 29898, - 57594: 29903, - 57595: 29908, - 57596: 29681, - 57664: 29920, - 57665: 29923, - 57666: 29927, - 57667: 29929, - 57668: 29934, - 57669: 29938, - 57670: 29936, - 57671: 29937, - 57672: 29944, - 57673: 29943, - 57674: 29956, - 57675: 29955, - 57676: 29957, - 57677: 29964, - 57678: 29966, - 57679: 29965, - 57680: 29973, - 57681: 29971, - 57682: 29982, - 57683: 29990, - 57684: 29996, - 57685: 30012, - 57686: 30020, - 57687: 30029, - 57688: 30026, - 57689: 30025, - 57690: 30043, - 57691: 30022, - 57692: 30042, - 57693: 30057, - 57694: 30052, - 57695: 30055, - 57696: 30059, - 57697: 30061, - 57698: 30072, - 57699: 30070, - 57700: 30086, - 57701: 30087, - 57702: 30068, - 57703: 30090, - 57704: 30089, - 57705: 30082, - 57706: 30100, - 57707: 30106, - 57708: 30109, - 57709: 30117, - 57710: 30115, - 57711: 30146, - 57712: 30131, - 57713: 30147, - 57714: 30133, - 57715: 30141, - 57716: 30136, - 57717: 30140, - 57718: 30129, - 57719: 30157, - 57720: 30154, - 57721: 30162, - 57722: 30169, - 57723: 30179, - 57724: 30174, - 57725: 30206, - 57726: 30207, - 57728: 30204, - 57729: 30209, - 57730: 30192, - 57731: 30202, - 57732: 30194, - 57733: 30195, - 57734: 30219, - 57735: 30221, - 57736: 30217, - 57737: 30239, - 57738: 30247, - 57739: 30240, - 57740: 30241, - 57741: 30242, - 57742: 30244, - 57743: 30260, - 57744: 30256, - 57745: 30267, - 57746: 30279, - 57747: 30280, - 57748: 30278, - 57749: 30300, - 57750: 30296, - 57751: 30305, - 57752: 30306, - 57753: 30312, - 57754: 30313, - 57755: 30314, - 57756: 30311, - 57757: 30316, - 57758: 30320, - 57759: 30322, - 57760: 30326, - 57761: 30328, - 57762: 30332, - 57763: 30336, - 57764: 30339, - 57765: 30344, - 57766: 30347, - 57767: 30350, - 57768: 30358, - 57769: 30355, - 57770: 30361, - 57771: 30362, - 57772: 30384, - 57773: 30388, - 57774: 30392, - 57775: 30393, - 57776: 30394, - 57777: 30402, - 57778: 30413, - 57779: 30422, - 57780: 30418, - 57781: 30430, - 57782: 30433, - 57783: 30437, - 57784: 30439, - 57785: 30442, - 57786: 34351, - 57787: 30459, - 57788: 30472, - 57789: 30471, - 57790: 30468, - 57791: 30505, - 57792: 30500, - 57793: 30494, - 57794: 30501, - 57795: 30502, - 57796: 30491, - 57797: 30519, - 57798: 30520, - 57799: 30535, - 57800: 30554, - 57801: 30568, - 57802: 30571, - 57803: 30555, - 57804: 30565, - 57805: 30591, - 57806: 30590, - 57807: 30585, - 57808: 30606, - 57809: 30603, - 57810: 30609, - 57811: 30624, - 57812: 30622, - 57813: 30640, - 57814: 30646, - 57815: 30649, - 57816: 30655, - 57817: 30652, - 57818: 30653, - 57819: 30651, - 57820: 30663, - 57821: 30669, - 57822: 30679, - 57823: 30682, - 57824: 30684, - 57825: 30691, - 57826: 30702, - 57827: 30716, - 57828: 30732, - 57829: 30738, - 57830: 31014, - 57831: 30752, - 57832: 31018, - 57833: 30789, - 57834: 30862, - 57835: 30836, - 57836: 30854, - 57837: 30844, - 57838: 30874, - 57839: 30860, - 57840: 30883, - 57841: 30901, - 57842: 30890, - 57843: 30895, - 57844: 30929, - 57845: 30918, - 57846: 30923, - 57847: 30932, - 57848: 30910, - 57849: 30908, - 57850: 30917, - 57851: 30922, - 57852: 30956, - 57920: 30951, - 57921: 30938, - 57922: 30973, - 57923: 30964, - 57924: 30983, - 57925: 30994, - 57926: 30993, - 57927: 31001, - 57928: 31020, - 57929: 31019, - 57930: 31040, - 57931: 31072, - 57932: 31063, - 57933: 31071, - 57934: 31066, - 57935: 31061, - 57936: 31059, - 57937: 31098, - 57938: 31103, - 57939: 31114, - 57940: 31133, - 57941: 31143, - 57942: 40779, - 57943: 31146, - 57944: 31150, - 57945: 31155, - 57946: 31161, - 57947: 31162, - 57948: 31177, - 57949: 31189, - 57950: 31207, - 57951: 31212, - 57952: 31201, - 57953: 31203, - 57954: 31240, - 57955: 31245, - 57956: 31256, - 57957: 31257, - 57958: 31264, - 57959: 31263, - 57960: 31104, - 57961: 31281, - 57962: 31291, - 57963: 31294, - 57964: 31287, - 57965: 31299, - 57966: 31319, - 57967: 31305, - 57968: 31329, - 57969: 31330, - 57970: 31337, - 57971: 40861, - 57972: 31344, - 57973: 31353, - 57974: 31357, - 57975: 31368, - 57976: 31383, - 57977: 31381, - 57978: 31384, - 57979: 31382, - 57980: 31401, - 57981: 31432, - 57982: 31408, - 57984: 31414, - 57985: 31429, - 57986: 31428, - 57987: 31423, - 57988: 36995, - 57989: 31431, - 57990: 31434, - 57991: 31437, - 57992: 31439, - 57993: 31445, - 57994: 31443, - 57995: 31449, - 57996: 31450, - 57997: 31453, - 57998: 31457, - 57999: 31458, - 58e3: 31462, - 58001: 31469, - 58002: 31472, - 58003: 31490, - 58004: 31503, - 58005: 31498, - 58006: 31494, - 58007: 31539, - 58008: 31512, - 58009: 31513, - 58010: 31518, - 58011: 31541, - 58012: 31528, - 58013: 31542, - 58014: 31568, - 58015: 31610, - 58016: 31492, - 58017: 31565, - 58018: 31499, - 58019: 31564, - 58020: 31557, - 58021: 31605, - 58022: 31589, - 58023: 31604, - 58024: 31591, - 58025: 31600, - 58026: 31601, - 58027: 31596, - 58028: 31598, - 58029: 31645, - 58030: 31640, - 58031: 31647, - 58032: 31629, - 58033: 31644, - 58034: 31642, - 58035: 31627, - 58036: 31634, - 58037: 31631, - 58038: 31581, - 58039: 31641, - 58040: 31691, - 58041: 31681, - 58042: 31692, - 58043: 31695, - 58044: 31668, - 58045: 31686, - 58046: 31709, - 58047: 31721, - 58048: 31761, - 58049: 31764, - 58050: 31718, - 58051: 31717, - 58052: 31840, - 58053: 31744, - 58054: 31751, - 58055: 31763, - 58056: 31731, - 58057: 31735, - 58058: 31767, - 58059: 31757, - 58060: 31734, - 58061: 31779, - 58062: 31783, - 58063: 31786, - 58064: 31775, - 58065: 31799, - 58066: 31787, - 58067: 31805, - 58068: 31820, - 58069: 31811, - 58070: 31828, - 58071: 31823, - 58072: 31808, - 58073: 31824, - 58074: 31832, - 58075: 31839, - 58076: 31844, - 58077: 31830, - 58078: 31845, - 58079: 31852, - 58080: 31861, - 58081: 31875, - 58082: 31888, - 58083: 31908, - 58084: 31917, - 58085: 31906, - 58086: 31915, - 58087: 31905, - 58088: 31912, - 58089: 31923, - 58090: 31922, - 58091: 31921, - 58092: 31918, - 58093: 31929, - 58094: 31933, - 58095: 31936, - 58096: 31941, - 58097: 31938, - 58098: 31960, - 58099: 31954, - 58100: 31964, - 58101: 31970, - 58102: 39739, - 58103: 31983, - 58104: 31986, - 58105: 31988, - 58106: 31990, - 58107: 31994, - 58108: 32006, - 58176: 32002, - 58177: 32028, - 58178: 32021, - 58179: 32010, - 58180: 32069, - 58181: 32075, - 58182: 32046, - 58183: 32050, - 58184: 32063, - 58185: 32053, - 58186: 32070, - 58187: 32115, - 58188: 32086, - 58189: 32078, - 58190: 32114, - 58191: 32104, - 58192: 32110, - 58193: 32079, - 58194: 32099, - 58195: 32147, - 58196: 32137, - 58197: 32091, - 58198: 32143, - 58199: 32125, - 58200: 32155, - 58201: 32186, - 58202: 32174, - 58203: 32163, - 58204: 32181, - 58205: 32199, - 58206: 32189, - 58207: 32171, - 58208: 32317, - 58209: 32162, - 58210: 32175, - 58211: 32220, - 58212: 32184, - 58213: 32159, - 58214: 32176, - 58215: 32216, - 58216: 32221, - 58217: 32228, - 58218: 32222, - 58219: 32251, - 58220: 32242, - 58221: 32225, - 58222: 32261, - 58223: 32266, - 58224: 32291, - 58225: 32289, - 58226: 32274, - 58227: 32305, - 58228: 32287, - 58229: 32265, - 58230: 32267, - 58231: 32290, - 58232: 32326, - 58233: 32358, - 58234: 32315, - 58235: 32309, - 58236: 32313, - 58237: 32323, - 58238: 32311, - 58240: 32306, - 58241: 32314, - 58242: 32359, - 58243: 32349, - 58244: 32342, - 58245: 32350, - 58246: 32345, - 58247: 32346, - 58248: 32377, - 58249: 32362, - 58250: 32361, - 58251: 32380, - 58252: 32379, - 58253: 32387, - 58254: 32213, - 58255: 32381, - 58256: 36782, - 58257: 32383, - 58258: 32392, - 58259: 32393, - 58260: 32396, - 58261: 32402, - 58262: 32400, - 58263: 32403, - 58264: 32404, - 58265: 32406, - 58266: 32398, - 58267: 32411, - 58268: 32412, - 58269: 32568, - 58270: 32570, - 58271: 32581, - 58272: 32588, - 58273: 32589, - 58274: 32590, - 58275: 32592, - 58276: 32593, - 58277: 32597, - 58278: 32596, - 58279: 32600, - 58280: 32607, - 58281: 32608, - 58282: 32616, - 58283: 32617, - 58284: 32615, - 58285: 32632, - 58286: 32642, - 58287: 32646, - 58288: 32643, - 58289: 32648, - 58290: 32647, - 58291: 32652, - 58292: 32660, - 58293: 32670, - 58294: 32669, - 58295: 32666, - 58296: 32675, - 58297: 32687, - 58298: 32690, - 58299: 32697, - 58300: 32686, - 58301: 32694, - 58302: 32696, - 58303: 35697, - 58304: 32709, - 58305: 32710, - 58306: 32714, - 58307: 32725, - 58308: 32724, - 58309: 32737, - 58310: 32742, - 58311: 32745, - 58312: 32755, - 58313: 32761, - 58314: 39132, - 58315: 32774, - 58316: 32772, - 58317: 32779, - 58318: 32786, - 58319: 32792, - 58320: 32793, - 58321: 32796, - 58322: 32801, - 58323: 32808, - 58324: 32831, - 58325: 32827, - 58326: 32842, - 58327: 32838, - 58328: 32850, - 58329: 32856, - 58330: 32858, - 58331: 32863, - 58332: 32866, - 58333: 32872, - 58334: 32883, - 58335: 32882, - 58336: 32880, - 58337: 32886, - 58338: 32889, - 58339: 32893, - 58340: 32895, - 58341: 32900, - 58342: 32902, - 58343: 32901, - 58344: 32923, - 58345: 32915, - 58346: 32922, - 58347: 32941, - 58348: 20880, - 58349: 32940, - 58350: 32987, - 58351: 32997, - 58352: 32985, - 58353: 32989, - 58354: 32964, - 58355: 32986, - 58356: 32982, - 58357: 33033, - 58358: 33007, - 58359: 33009, - 58360: 33051, - 58361: 33065, - 58362: 33059, - 58363: 33071, - 58364: 33099, - 58432: 38539, - 58433: 33094, - 58434: 33086, - 58435: 33107, - 58436: 33105, - 58437: 33020, - 58438: 33137, - 58439: 33134, - 58440: 33125, - 58441: 33126, - 58442: 33140, - 58443: 33155, - 58444: 33160, - 58445: 33162, - 58446: 33152, - 58447: 33154, - 58448: 33184, - 58449: 33173, - 58450: 33188, - 58451: 33187, - 58452: 33119, - 58453: 33171, - 58454: 33193, - 58455: 33200, - 58456: 33205, - 58457: 33214, - 58458: 33208, - 58459: 33213, - 58460: 33216, - 58461: 33218, - 58462: 33210, - 58463: 33225, - 58464: 33229, - 58465: 33233, - 58466: 33241, - 58467: 33240, - 58468: 33224, - 58469: 33242, - 58470: 33247, - 58471: 33248, - 58472: 33255, - 58473: 33274, - 58474: 33275, - 58475: 33278, - 58476: 33281, - 58477: 33282, - 58478: 33285, - 58479: 33287, - 58480: 33290, - 58481: 33293, - 58482: 33296, - 58483: 33302, - 58484: 33321, - 58485: 33323, - 58486: 33336, - 58487: 33331, - 58488: 33344, - 58489: 33369, - 58490: 33368, - 58491: 33373, - 58492: 33370, - 58493: 33375, - 58494: 33380, - 58496: 33378, - 58497: 33384, - 58498: 33386, - 58499: 33387, - 58500: 33326, - 58501: 33393, - 58502: 33399, - 58503: 33400, - 58504: 33406, - 58505: 33421, - 58506: 33426, - 58507: 33451, - 58508: 33439, - 58509: 33467, - 58510: 33452, - 58511: 33505, - 58512: 33507, - 58513: 33503, - 58514: 33490, - 58515: 33524, - 58516: 33523, - 58517: 33530, - 58518: 33683, - 58519: 33539, - 58520: 33531, - 58521: 33529, - 58522: 33502, - 58523: 33542, - 58524: 33500, - 58525: 33545, - 58526: 33497, - 58527: 33589, - 58528: 33588, - 58529: 33558, - 58530: 33586, - 58531: 33585, - 58532: 33600, - 58533: 33593, - 58534: 33616, - 58535: 33605, - 58536: 33583, - 58537: 33579, - 58538: 33559, - 58539: 33560, - 58540: 33669, - 58541: 33690, - 58542: 33706, - 58543: 33695, - 58544: 33698, - 58545: 33686, - 58546: 33571, - 58547: 33678, - 58548: 33671, - 58549: 33674, - 58550: 33660, - 58551: 33717, - 58552: 33651, - 58553: 33653, - 58554: 33696, - 58555: 33673, - 58556: 33704, - 58557: 33780, - 58558: 33811, - 58559: 33771, - 58560: 33742, - 58561: 33789, - 58562: 33795, - 58563: 33752, - 58564: 33803, - 58565: 33729, - 58566: 33783, - 58567: 33799, - 58568: 33760, - 58569: 33778, - 58570: 33805, - 58571: 33826, - 58572: 33824, - 58573: 33725, - 58574: 33848, - 58575: 34054, - 58576: 33787, - 58577: 33901, - 58578: 33834, - 58579: 33852, - 58580: 34138, - 58581: 33924, - 58582: 33911, - 58583: 33899, - 58584: 33965, - 58585: 33902, - 58586: 33922, - 58587: 33897, - 58588: 33862, - 58589: 33836, - 58590: 33903, - 58591: 33913, - 58592: 33845, - 58593: 33994, - 58594: 33890, - 58595: 33977, - 58596: 33983, - 58597: 33951, - 58598: 34009, - 58599: 33997, - 58600: 33979, - 58601: 34010, - 58602: 34e3, - 58603: 33985, - 58604: 33990, - 58605: 34006, - 58606: 33953, - 58607: 34081, - 58608: 34047, - 58609: 34036, - 58610: 34071, - 58611: 34072, - 58612: 34092, - 58613: 34079, - 58614: 34069, - 58615: 34068, - 58616: 34044, - 58617: 34112, - 58618: 34147, - 58619: 34136, - 58620: 34120, - 58688: 34113, - 58689: 34306, - 58690: 34123, - 58691: 34133, - 58692: 34176, - 58693: 34212, - 58694: 34184, - 58695: 34193, - 58696: 34186, - 58697: 34216, - 58698: 34157, - 58699: 34196, - 58700: 34203, - 58701: 34282, - 58702: 34183, - 58703: 34204, - 58704: 34167, - 58705: 34174, - 58706: 34192, - 58707: 34249, - 58708: 34234, - 58709: 34255, - 58710: 34233, - 58711: 34256, - 58712: 34261, - 58713: 34269, - 58714: 34277, - 58715: 34268, - 58716: 34297, - 58717: 34314, - 58718: 34323, - 58719: 34315, - 58720: 34302, - 58721: 34298, - 58722: 34310, - 58723: 34338, - 58724: 34330, - 58725: 34352, - 58726: 34367, - 58727: 34381, - 58728: 20053, - 58729: 34388, - 58730: 34399, - 58731: 34407, - 58732: 34417, - 58733: 34451, - 58734: 34467, - 58735: 34473, - 58736: 34474, - 58737: 34443, - 58738: 34444, - 58739: 34486, - 58740: 34479, - 58741: 34500, - 58742: 34502, - 58743: 34480, - 58744: 34505, - 58745: 34851, - 58746: 34475, - 58747: 34516, - 58748: 34526, - 58749: 34537, - 58750: 34540, - 58752: 34527, - 58753: 34523, - 58754: 34543, - 58755: 34578, - 58756: 34566, - 58757: 34568, - 58758: 34560, - 58759: 34563, - 58760: 34555, - 58761: 34577, - 58762: 34569, - 58763: 34573, - 58764: 34553, - 58765: 34570, - 58766: 34612, - 58767: 34623, - 58768: 34615, - 58769: 34619, - 58770: 34597, - 58771: 34601, - 58772: 34586, - 58773: 34656, - 58774: 34655, - 58775: 34680, - 58776: 34636, - 58777: 34638, - 58778: 34676, - 58779: 34647, - 58780: 34664, - 58781: 34670, - 58782: 34649, - 58783: 34643, - 58784: 34659, - 58785: 34666, - 58786: 34821, - 58787: 34722, - 58788: 34719, - 58789: 34690, - 58790: 34735, - 58791: 34763, - 58792: 34749, - 58793: 34752, - 58794: 34768, - 58795: 38614, - 58796: 34731, - 58797: 34756, - 58798: 34739, - 58799: 34759, - 58800: 34758, - 58801: 34747, - 58802: 34799, - 58803: 34802, - 58804: 34784, - 58805: 34831, - 58806: 34829, - 58807: 34814, - 58808: 34806, - 58809: 34807, - 58810: 34830, - 58811: 34770, - 58812: 34833, - 58813: 34838, - 58814: 34837, - 58815: 34850, - 58816: 34849, - 58817: 34865, - 58818: 34870, - 58819: 34873, - 58820: 34855, - 58821: 34875, - 58822: 34884, - 58823: 34882, - 58824: 34898, - 58825: 34905, - 58826: 34910, - 58827: 34914, - 58828: 34923, - 58829: 34945, - 58830: 34942, - 58831: 34974, - 58832: 34933, - 58833: 34941, - 58834: 34997, - 58835: 34930, - 58836: 34946, - 58837: 34967, - 58838: 34962, - 58839: 34990, - 58840: 34969, - 58841: 34978, - 58842: 34957, - 58843: 34980, - 58844: 34992, - 58845: 35007, - 58846: 34993, - 58847: 35011, - 58848: 35012, - 58849: 35028, - 58850: 35032, - 58851: 35033, - 58852: 35037, - 58853: 35065, - 58854: 35074, - 58855: 35068, - 58856: 35060, - 58857: 35048, - 58858: 35058, - 58859: 35076, - 58860: 35084, - 58861: 35082, - 58862: 35091, - 58863: 35139, - 58864: 35102, - 58865: 35109, - 58866: 35114, - 58867: 35115, - 58868: 35137, - 58869: 35140, - 58870: 35131, - 58871: 35126, - 58872: 35128, - 58873: 35148, - 58874: 35101, - 58875: 35168, - 58876: 35166, - 58944: 35174, - 58945: 35172, - 58946: 35181, - 58947: 35178, - 58948: 35183, - 58949: 35188, - 58950: 35191, - 58951: 35198, - 58952: 35203, - 58953: 35208, - 58954: 35210, - 58955: 35219, - 58956: 35224, - 58957: 35233, - 58958: 35241, - 58959: 35238, - 58960: 35244, - 58961: 35247, - 58962: 35250, - 58963: 35258, - 58964: 35261, - 58965: 35263, - 58966: 35264, - 58967: 35290, - 58968: 35292, - 58969: 35293, - 58970: 35303, - 58971: 35316, - 58972: 35320, - 58973: 35331, - 58974: 35350, - 58975: 35344, - 58976: 35340, - 58977: 35355, - 58978: 35357, - 58979: 35365, - 58980: 35382, - 58981: 35393, - 58982: 35419, - 58983: 35410, - 58984: 35398, - 58985: 35400, - 58986: 35452, - 58987: 35437, - 58988: 35436, - 58989: 35426, - 58990: 35461, - 58991: 35458, - 58992: 35460, - 58993: 35496, - 58994: 35489, - 58995: 35473, - 58996: 35493, - 58997: 35494, - 58998: 35482, - 58999: 35491, - 59e3: 35524, - 59001: 35533, - 59002: 35522, - 59003: 35546, - 59004: 35563, - 59005: 35571, - 59006: 35559, - 59008: 35556, - 59009: 35569, - 59010: 35604, - 59011: 35552, - 59012: 35554, - 59013: 35575, - 59014: 35550, - 59015: 35547, - 59016: 35596, - 59017: 35591, - 59018: 35610, - 59019: 35553, - 59020: 35606, - 59021: 35600, - 59022: 35607, - 59023: 35616, - 59024: 35635, - 59025: 38827, - 59026: 35622, - 59027: 35627, - 59028: 35646, - 59029: 35624, - 59030: 35649, - 59031: 35660, - 59032: 35663, - 59033: 35662, - 59034: 35657, - 59035: 35670, - 59036: 35675, - 59037: 35674, - 59038: 35691, - 59039: 35679, - 59040: 35692, - 59041: 35695, - 59042: 35700, - 59043: 35709, - 59044: 35712, - 59045: 35724, - 59046: 35726, - 59047: 35730, - 59048: 35731, - 59049: 35734, - 59050: 35737, - 59051: 35738, - 59052: 35898, - 59053: 35905, - 59054: 35903, - 59055: 35912, - 59056: 35916, - 59057: 35918, - 59058: 35920, - 59059: 35925, - 59060: 35938, - 59061: 35948, - 59062: 35960, - 59063: 35962, - 59064: 35970, - 59065: 35977, - 59066: 35973, - 59067: 35978, - 59068: 35981, - 59069: 35982, - 59070: 35988, - 59071: 35964, - 59072: 35992, - 59073: 25117, - 59074: 36013, - 59075: 36010, - 59076: 36029, - 59077: 36018, - 59078: 36019, - 59079: 36014, - 59080: 36022, - 59081: 36040, - 59082: 36033, - 59083: 36068, - 59084: 36067, - 59085: 36058, - 59086: 36093, - 59087: 36090, - 59088: 36091, - 59089: 36100, - 59090: 36101, - 59091: 36106, - 59092: 36103, - 59093: 36111, - 59094: 36109, - 59095: 36112, - 59096: 40782, - 59097: 36115, - 59098: 36045, - 59099: 36116, - 59100: 36118, - 59101: 36199, - 59102: 36205, - 59103: 36209, - 59104: 36211, - 59105: 36225, - 59106: 36249, - 59107: 36290, - 59108: 36286, - 59109: 36282, - 59110: 36303, - 59111: 36314, - 59112: 36310, - 59113: 36300, - 59114: 36315, - 59115: 36299, - 59116: 36330, - 59117: 36331, - 59118: 36319, - 59119: 36323, - 59120: 36348, - 59121: 36360, - 59122: 36361, - 59123: 36351, - 59124: 36381, - 59125: 36382, - 59126: 36368, - 59127: 36383, - 59128: 36418, - 59129: 36405, - 59130: 36400, - 59131: 36404, - 59132: 36426, - 59200: 36423, - 59201: 36425, - 59202: 36428, - 59203: 36432, - 59204: 36424, - 59205: 36441, - 59206: 36452, - 59207: 36448, - 59208: 36394, - 59209: 36451, - 59210: 36437, - 59211: 36470, - 59212: 36466, - 59213: 36476, - 59214: 36481, - 59215: 36487, - 59216: 36485, - 59217: 36484, - 59218: 36491, - 59219: 36490, - 59220: 36499, - 59221: 36497, - 59222: 36500, - 59223: 36505, - 59224: 36522, - 59225: 36513, - 59226: 36524, - 59227: 36528, - 59228: 36550, - 59229: 36529, - 59230: 36542, - 59231: 36549, - 59232: 36552, - 59233: 36555, - 59234: 36571, - 59235: 36579, - 59236: 36604, - 59237: 36603, - 59238: 36587, - 59239: 36606, - 59240: 36618, - 59241: 36613, - 59242: 36629, - 59243: 36626, - 59244: 36633, - 59245: 36627, - 59246: 36636, - 59247: 36639, - 59248: 36635, - 59249: 36620, - 59250: 36646, - 59251: 36659, - 59252: 36667, - 59253: 36665, - 59254: 36677, - 59255: 36674, - 59256: 36670, - 59257: 36684, - 59258: 36681, - 59259: 36678, - 59260: 36686, - 59261: 36695, - 59262: 36700, - 59264: 36706, - 59265: 36707, - 59266: 36708, - 59267: 36764, - 59268: 36767, - 59269: 36771, - 59270: 36781, - 59271: 36783, - 59272: 36791, - 59273: 36826, - 59274: 36837, - 59275: 36834, - 59276: 36842, - 59277: 36847, - 59278: 36999, - 59279: 36852, - 59280: 36869, - 59281: 36857, - 59282: 36858, - 59283: 36881, - 59284: 36885, - 59285: 36897, - 59286: 36877, - 59287: 36894, - 59288: 36886, - 59289: 36875, - 59290: 36903, - 59291: 36918, - 59292: 36917, - 59293: 36921, - 59294: 36856, - 59295: 36943, - 59296: 36944, - 59297: 36945, - 59298: 36946, - 59299: 36878, - 59300: 36937, - 59301: 36926, - 59302: 36950, - 59303: 36952, - 59304: 36958, - 59305: 36968, - 59306: 36975, - 59307: 36982, - 59308: 38568, - 59309: 36978, - 59310: 36994, - 59311: 36989, - 59312: 36993, - 59313: 36992, - 59314: 37002, - 59315: 37001, - 59316: 37007, - 59317: 37032, - 59318: 37039, - 59319: 37041, - 59320: 37045, - 59321: 37090, - 59322: 37092, - 59323: 25160, - 59324: 37083, - 59325: 37122, - 59326: 37138, - 59327: 37145, - 59328: 37170, - 59329: 37168, - 59330: 37194, - 59331: 37206, - 59332: 37208, - 59333: 37219, - 59334: 37221, - 59335: 37225, - 59336: 37235, - 59337: 37234, - 59338: 37259, - 59339: 37257, - 59340: 37250, - 59341: 37282, - 59342: 37291, - 59343: 37295, - 59344: 37290, - 59345: 37301, - 59346: 37300, - 59347: 37306, - 59348: 37312, - 59349: 37313, - 59350: 37321, - 59351: 37323, - 59352: 37328, - 59353: 37334, - 59354: 37343, - 59355: 37345, - 59356: 37339, - 59357: 37372, - 59358: 37365, - 59359: 37366, - 59360: 37406, - 59361: 37375, - 59362: 37396, - 59363: 37420, - 59364: 37397, - 59365: 37393, - 59366: 37470, - 59367: 37463, - 59368: 37445, - 59369: 37449, - 59370: 37476, - 59371: 37448, - 59372: 37525, - 59373: 37439, - 59374: 37451, - 59375: 37456, - 59376: 37532, - 59377: 37526, - 59378: 37523, - 59379: 37531, - 59380: 37466, - 59381: 37583, - 59382: 37561, - 59383: 37559, - 59384: 37609, - 59385: 37647, - 59386: 37626, - 59387: 37700, - 59388: 37678, - 59456: 37657, - 59457: 37666, - 59458: 37658, - 59459: 37667, - 59460: 37690, - 59461: 37685, - 59462: 37691, - 59463: 37724, - 59464: 37728, - 59465: 37756, - 59466: 37742, - 59467: 37718, - 59468: 37808, - 59469: 37804, - 59470: 37805, - 59471: 37780, - 59472: 37817, - 59473: 37846, - 59474: 37847, - 59475: 37864, - 59476: 37861, - 59477: 37848, - 59478: 37827, - 59479: 37853, - 59480: 37840, - 59481: 37832, - 59482: 37860, - 59483: 37914, - 59484: 37908, - 59485: 37907, - 59486: 37891, - 59487: 37895, - 59488: 37904, - 59489: 37942, - 59490: 37931, - 59491: 37941, - 59492: 37921, - 59493: 37946, - 59494: 37953, - 59495: 37970, - 59496: 37956, - 59497: 37979, - 59498: 37984, - 59499: 37986, - 59500: 37982, - 59501: 37994, - 59502: 37417, - 59503: 38e3, - 59504: 38005, - 59505: 38007, - 59506: 38013, - 59507: 37978, - 59508: 38012, - 59509: 38014, - 59510: 38017, - 59511: 38015, - 59512: 38274, - 59513: 38279, - 59514: 38282, - 59515: 38292, - 59516: 38294, - 59517: 38296, - 59518: 38297, - 59520: 38304, - 59521: 38312, - 59522: 38311, - 59523: 38317, - 59524: 38332, - 59525: 38331, - 59526: 38329, - 59527: 38334, - 59528: 38346, - 59529: 28662, - 59530: 38339, - 59531: 38349, - 59532: 38348, - 59533: 38357, - 59534: 38356, - 59535: 38358, - 59536: 38364, - 59537: 38369, - 59538: 38373, - 59539: 38370, - 59540: 38433, - 59541: 38440, - 59542: 38446, - 59543: 38447, - 59544: 38466, - 59545: 38476, - 59546: 38479, - 59547: 38475, - 59548: 38519, - 59549: 38492, - 59550: 38494, - 59551: 38493, - 59552: 38495, - 59553: 38502, - 59554: 38514, - 59555: 38508, - 59556: 38541, - 59557: 38552, - 59558: 38549, - 59559: 38551, - 59560: 38570, - 59561: 38567, - 59562: 38577, - 59563: 38578, - 59564: 38576, - 59565: 38580, - 59566: 38582, - 59567: 38584, - 59568: 38585, - 59569: 38606, - 59570: 38603, - 59571: 38601, - 59572: 38605, - 59573: 35149, - 59574: 38620, - 59575: 38669, - 59576: 38613, - 59577: 38649, - 59578: 38660, - 59579: 38662, - 59580: 38664, - 59581: 38675, - 59582: 38670, - 59583: 38673, - 59584: 38671, - 59585: 38678, - 59586: 38681, - 59587: 38692, - 59588: 38698, - 59589: 38704, - 59590: 38713, - 59591: 38717, - 59592: 38718, - 59593: 38724, - 59594: 38726, - 59595: 38728, - 59596: 38722, - 59597: 38729, - 59598: 38748, - 59599: 38752, - 59600: 38756, - 59601: 38758, - 59602: 38760, - 59603: 21202, - 59604: 38763, - 59605: 38769, - 59606: 38777, - 59607: 38789, - 59608: 38780, - 59609: 38785, - 59610: 38778, - 59611: 38790, - 59612: 38795, - 59613: 38799, - 59614: 38800, - 59615: 38812, - 59616: 38824, - 59617: 38822, - 59618: 38819, - 59619: 38835, - 59620: 38836, - 59621: 38851, - 59622: 38854, - 59623: 38856, - 59624: 38859, - 59625: 38876, - 59626: 38893, - 59627: 40783, - 59628: 38898, - 59629: 31455, - 59630: 38902, - 59631: 38901, - 59632: 38927, - 59633: 38924, - 59634: 38968, - 59635: 38948, - 59636: 38945, - 59637: 38967, - 59638: 38973, - 59639: 38982, - 59640: 38991, - 59641: 38987, - 59642: 39019, - 59643: 39023, - 59644: 39024, - 59712: 39025, - 59713: 39028, - 59714: 39027, - 59715: 39082, - 59716: 39087, - 59717: 39089, - 59718: 39094, - 59719: 39108, - 59720: 39107, - 59721: 39110, - 59722: 39145, - 59723: 39147, - 59724: 39171, - 59725: 39177, - 59726: 39186, - 59727: 39188, - 59728: 39192, - 59729: 39201, - 59730: 39197, - 59731: 39198, - 59732: 39204, - 59733: 39200, - 59734: 39212, - 59735: 39214, - 59736: 39229, - 59737: 39230, - 59738: 39234, - 59739: 39241, - 59740: 39237, - 59741: 39248, - 59742: 39243, - 59743: 39249, - 59744: 39250, - 59745: 39244, - 59746: 39253, - 59747: 39319, - 59748: 39320, - 59749: 39333, - 59750: 39341, - 59751: 39342, - 59752: 39356, - 59753: 39391, - 59754: 39387, - 59755: 39389, - 59756: 39384, - 59757: 39377, - 59758: 39405, - 59759: 39406, - 59760: 39409, - 59761: 39410, - 59762: 39419, - 59763: 39416, - 59764: 39425, - 59765: 39439, - 59766: 39429, - 59767: 39394, - 59768: 39449, - 59769: 39467, - 59770: 39479, - 59771: 39493, - 59772: 39490, - 59773: 39488, - 59774: 39491, - 59776: 39486, - 59777: 39509, - 59778: 39501, - 59779: 39515, - 59780: 39511, - 59781: 39519, - 59782: 39522, - 59783: 39525, - 59784: 39524, - 59785: 39529, - 59786: 39531, - 59787: 39530, - 59788: 39597, - 59789: 39600, - 59790: 39612, - 59791: 39616, - 59792: 39631, - 59793: 39633, - 59794: 39635, - 59795: 39636, - 59796: 39646, - 59797: 39647, - 59798: 39650, - 59799: 39651, - 59800: 39654, - 59801: 39663, - 59802: 39659, - 59803: 39662, - 59804: 39668, - 59805: 39665, - 59806: 39671, - 59807: 39675, - 59808: 39686, - 59809: 39704, - 59810: 39706, - 59811: 39711, - 59812: 39714, - 59813: 39715, - 59814: 39717, - 59815: 39719, - 59816: 39720, - 59817: 39721, - 59818: 39722, - 59819: 39726, - 59820: 39727, - 59821: 39730, - 59822: 39748, - 59823: 39747, - 59824: 39759, - 59825: 39757, - 59826: 39758, - 59827: 39761, - 59828: 39768, - 59829: 39796, - 59830: 39827, - 59831: 39811, - 59832: 39825, - 59833: 39830, - 59834: 39831, - 59835: 39839, - 59836: 39840, - 59837: 39848, - 59838: 39860, - 59839: 39872, - 59840: 39882, - 59841: 39865, - 59842: 39878, - 59843: 39887, - 59844: 39889, - 59845: 39890, - 59846: 39907, - 59847: 39906, - 59848: 39908, - 59849: 39892, - 59850: 39905, - 59851: 39994, - 59852: 39922, - 59853: 39921, - 59854: 39920, - 59855: 39957, - 59856: 39956, - 59857: 39945, - 59858: 39955, - 59859: 39948, - 59860: 39942, - 59861: 39944, - 59862: 39954, - 59863: 39946, - 59864: 39940, - 59865: 39982, - 59866: 39963, - 59867: 39973, - 59868: 39972, - 59869: 39969, - 59870: 39984, - 59871: 40007, - 59872: 39986, - 59873: 40006, - 59874: 39998, - 59875: 40026, - 59876: 40032, - 59877: 40039, - 59878: 40054, - 59879: 40056, - 59880: 40167, - 59881: 40172, - 59882: 40176, - 59883: 40201, - 59884: 40200, - 59885: 40171, - 59886: 40195, - 59887: 40198, - 59888: 40234, - 59889: 40230, - 59890: 40367, - 59891: 40227, - 59892: 40223, - 59893: 40260, - 59894: 40213, - 59895: 40210, - 59896: 40257, - 59897: 40255, - 59898: 40254, - 59899: 40262, - 59900: 40264, - 59968: 40285, - 59969: 40286, - 59970: 40292, - 59971: 40273, - 59972: 40272, - 59973: 40281, - 59974: 40306, - 59975: 40329, - 59976: 40327, - 59977: 40363, - 59978: 40303, - 59979: 40314, - 59980: 40346, - 59981: 40356, - 59982: 40361, - 59983: 40370, - 59984: 40388, - 59985: 40385, - 59986: 40379, - 59987: 40376, - 59988: 40378, - 59989: 40390, - 59990: 40399, - 59991: 40386, - 59992: 40409, - 59993: 40403, - 59994: 40440, - 59995: 40422, - 59996: 40429, - 59997: 40431, - 59998: 40445, - 59999: 40474, - 6e4: 40475, - 60001: 40478, - 60002: 40565, - 60003: 40569, - 60004: 40573, - 60005: 40577, - 60006: 40584, - 60007: 40587, - 60008: 40588, - 60009: 40594, - 60010: 40597, - 60011: 40593, - 60012: 40605, - 60013: 40613, - 60014: 40617, - 60015: 40632, - 60016: 40618, - 60017: 40621, - 60018: 38753, - 60019: 40652, - 60020: 40654, - 60021: 40655, - 60022: 40656, - 60023: 40660, - 60024: 40668, - 60025: 40670, - 60026: 40669, - 60027: 40672, - 60028: 40677, - 60029: 40680, - 60030: 40687, - 60032: 40692, - 60033: 40694, - 60034: 40695, - 60035: 40697, - 60036: 40699, - 60037: 40700, - 60038: 40701, - 60039: 40711, - 60040: 40712, - 60041: 30391, - 60042: 40725, - 60043: 40737, - 60044: 40748, - 60045: 40766, - 60046: 40778, - 60047: 40786, - 60048: 40788, - 60049: 40803, - 60050: 40799, - 60051: 40800, - 60052: 40801, - 60053: 40806, - 60054: 40807, - 60055: 40812, - 60056: 40810, - 60057: 40823, - 60058: 40818, - 60059: 40822, - 60060: 40853, - 60061: 40860, - 60062: 40864, - 60063: 22575, - 60064: 27079, - 60065: 36953, - 60066: 29796, - 60067: 20956, - 60068: 29081, - 60736: 32394, - 60737: 35100, - 60738: 37704, - 60739: 37512, - 60740: 34012, - 60741: 20425, - 60742: 28859, - 60743: 26161, - 60744: 26824, - 60745: 37625, - 60746: 26363, - 60747: 24389, - 60748: 20008, - 60749: 20193, - 60750: 20220, - 60751: 20224, - 60752: 20227, - 60753: 20281, - 60754: 20310, - 60755: 20370, - 60756: 20362, - 60757: 20378, - 60758: 20372, - 60759: 20429, - 60760: 20544, - 60761: 20514, - 60762: 20479, - 60763: 20510, - 60764: 20550, - 60765: 20592, - 60766: 20546, - 60767: 20628, - 60768: 20724, - 60769: 20696, - 60770: 20810, - 60771: 20836, - 60772: 20893, - 60773: 20926, - 60774: 20972, - 60775: 21013, - 60776: 21148, - 60777: 21158, - 60778: 21184, - 60779: 21211, - 60780: 21248, - 60781: 21255, - 60782: 21284, - 60783: 21362, - 60784: 21395, - 60785: 21426, - 60786: 21469, - 60787: 64014, - 60788: 21660, - 60789: 21642, - 60790: 21673, - 60791: 21759, - 60792: 21894, - 60793: 22361, - 60794: 22373, - 60795: 22444, - 60796: 22472, - 60797: 22471, - 60798: 64015, - 60800: 64016, - 60801: 22686, - 60802: 22706, - 60803: 22795, - 60804: 22867, - 60805: 22875, - 60806: 22877, - 60807: 22883, - 60808: 22948, - 60809: 22970, - 60810: 23382, - 60811: 23488, - 60812: 29999, - 60813: 23512, - 60814: 23532, - 60815: 23582, - 60816: 23718, - 60817: 23738, - 60818: 23797, - 60819: 23847, - 60820: 23891, - 60821: 64017, - 60822: 23874, - 60823: 23917, - 60824: 23992, - 60825: 23993, - 60826: 24016, - 60827: 24353, - 60828: 24372, - 60829: 24423, - 60830: 24503, - 60831: 24542, - 60832: 24669, - 60833: 24709, - 60834: 24714, - 60835: 24798, - 60836: 24789, - 60837: 24864, - 60838: 24818, - 60839: 24849, - 60840: 24887, - 60841: 24880, - 60842: 24984, - 60843: 25107, - 60844: 25254, - 60845: 25589, - 60846: 25696, - 60847: 25757, - 60848: 25806, - 60849: 25934, - 60850: 26112, - 60851: 26133, - 60852: 26171, - 60853: 26121, - 60854: 26158, - 60855: 26142, - 60856: 26148, - 60857: 26213, - 60858: 26199, - 60859: 26201, - 60860: 64018, - 60861: 26227, - 60862: 26265, - 60863: 26272, - 60864: 26290, - 60865: 26303, - 60866: 26362, - 60867: 26382, - 60868: 63785, - 60869: 26470, - 60870: 26555, - 60871: 26706, - 60872: 26560, - 60873: 26625, - 60874: 26692, - 60875: 26831, - 60876: 64019, - 60877: 26984, - 60878: 64020, - 60879: 27032, - 60880: 27106, - 60881: 27184, - 60882: 27243, - 60883: 27206, - 60884: 27251, - 60885: 27262, - 60886: 27362, - 60887: 27364, - 60888: 27606, - 60889: 27711, - 60890: 27740, - 60891: 27782, - 60892: 27759, - 60893: 27866, - 60894: 27908, - 60895: 28039, - 60896: 28015, - 60897: 28054, - 60898: 28076, - 60899: 28111, - 60900: 28152, - 60901: 28146, - 60902: 28156, - 60903: 28217, - 60904: 28252, - 60905: 28199, - 60906: 28220, - 60907: 28351, - 60908: 28552, - 60909: 28597, - 60910: 28661, - 60911: 28677, - 60912: 28679, - 60913: 28712, - 60914: 28805, - 60915: 28843, - 60916: 28943, - 60917: 28932, - 60918: 29020, - 60919: 28998, - 60920: 28999, - 60921: 64021, - 60922: 29121, - 60923: 29182, - 60924: 29361, - 60992: 29374, - 60993: 29476, - 60994: 64022, - 60995: 29559, - 60996: 29629, - 60997: 29641, - 60998: 29654, - 60999: 29667, - 61e3: 29650, - 61001: 29703, - 61002: 29685, - 61003: 29734, - 61004: 29738, - 61005: 29737, - 61006: 29742, - 61007: 29794, - 61008: 29833, - 61009: 29855, - 61010: 29953, - 61011: 30063, - 61012: 30338, - 61013: 30364, - 61014: 30366, - 61015: 30363, - 61016: 30374, - 61017: 64023, - 61018: 30534, - 61019: 21167, - 61020: 30753, - 61021: 30798, - 61022: 30820, - 61023: 30842, - 61024: 31024, - 61025: 64024, - 61026: 64025, - 61027: 64026, - 61028: 31124, - 61029: 64027, - 61030: 31131, - 61031: 31441, - 61032: 31463, - 61033: 64028, - 61034: 31467, - 61035: 31646, - 61036: 64029, - 61037: 32072, - 61038: 32092, - 61039: 32183, - 61040: 32160, - 61041: 32214, - 61042: 32338, - 61043: 32583, - 61044: 32673, - 61045: 64030, - 61046: 33537, - 61047: 33634, - 61048: 33663, - 61049: 33735, - 61050: 33782, - 61051: 33864, - 61052: 33972, - 61053: 34131, - 61054: 34137, - 61056: 34155, - 61057: 64031, - 61058: 34224, - 61059: 64032, - 61060: 64033, - 61061: 34823, - 61062: 35061, - 61063: 35346, - 61064: 35383, - 61065: 35449, - 61066: 35495, - 61067: 35518, - 61068: 35551, - 61069: 64034, - 61070: 35574, - 61071: 35667, - 61072: 35711, - 61073: 36080, - 61074: 36084, - 61075: 36114, - 61076: 36214, - 61077: 64035, - 61078: 36559, - 61079: 64036, - 61080: 64037, - 61081: 36967, - 61082: 37086, - 61083: 64038, - 61084: 37141, - 61085: 37159, - 61086: 37338, - 61087: 37335, - 61088: 37342, - 61089: 37357, - 61090: 37358, - 61091: 37348, - 61092: 37349, - 61093: 37382, - 61094: 37392, - 61095: 37386, - 61096: 37434, - 61097: 37440, - 61098: 37436, - 61099: 37454, - 61100: 37465, - 61101: 37457, - 61102: 37433, - 61103: 37479, - 61104: 37543, - 61105: 37495, - 61106: 37496, - 61107: 37607, - 61108: 37591, - 61109: 37593, - 61110: 37584, - 61111: 64039, - 61112: 37589, - 61113: 37600, - 61114: 37587, - 61115: 37669, - 61116: 37665, - 61117: 37627, - 61118: 64040, - 61119: 37662, - 61120: 37631, - 61121: 37661, - 61122: 37634, - 61123: 37744, - 61124: 37719, - 61125: 37796, - 61126: 37830, - 61127: 37854, - 61128: 37880, - 61129: 37937, - 61130: 37957, - 61131: 37960, - 61132: 38290, - 61133: 63964, - 61134: 64041, - 61135: 38557, - 61136: 38575, - 61137: 38707, - 61138: 38715, - 61139: 38723, - 61140: 38733, - 61141: 38735, - 61142: 38737, - 61143: 38741, - 61144: 38999, - 61145: 39013, - 61146: 64042, - 61147: 64043, - 61148: 39207, - 61149: 64044, - 61150: 39326, - 61151: 39502, - 61152: 39641, - 61153: 39644, - 61154: 39797, - 61155: 39794, - 61156: 39823, - 61157: 39857, - 61158: 39867, - 61159: 39936, - 61160: 40304, - 61161: 40299, - 61162: 64045, - 61163: 40473, - 61164: 40657, - 61167: 8560, - 61168: 8561, - 61169: 8562, - 61170: 8563, - 61171: 8564, - 61172: 8565, - 61173: 8566, - 61174: 8567, - 61175: 8568, - 61176: 8569, - 61177: 65506, - 61178: 65508, - 61179: 65287, - 61180: 65282, - 61504: 57344, - 61505: 57345, - 61506: 57346, - 61507: 57347, - 61508: 57348, - 61509: 57349, - 61510: 57350, - 61511: 57351, - 61512: 57352, - 61513: 57353, - 61514: 57354, - 61515: 57355, - 61516: 57356, - 61517: 57357, - 61518: 57358, - 61519: 57359, - 61520: 57360, - 61521: 57361, - 61522: 57362, - 61523: 57363, - 61524: 57364, - 61525: 57365, - 61526: 57366, - 61527: 57367, - 61528: 57368, - 61529: 57369, - 61530: 57370, - 61531: 57371, - 61532: 57372, - 61533: 57373, - 61534: 57374, - 61535: 57375, - 61536: 57376, - 61537: 57377, - 61538: 57378, - 61539: 57379, - 61540: 57380, - 61541: 57381, - 61542: 57382, - 61543: 57383, - 61544: 57384, - 61545: 57385, - 61546: 57386, - 61547: 57387, - 61548: 57388, - 61549: 57389, - 61550: 57390, - 61551: 57391, - 61552: 57392, - 61553: 57393, - 61554: 57394, - 61555: 57395, - 61556: 57396, - 61557: 57397, - 61558: 57398, - 61559: 57399, - 61560: 57400, - 61561: 57401, - 61562: 57402, - 61563: 57403, - 61564: 57404, - 61565: 57405, - 61566: 57406, - 61568: 57407, - 61569: 57408, - 61570: 57409, - 61571: 57410, - 61572: 57411, - 61573: 57412, - 61574: 57413, - 61575: 57414, - 61576: 57415, - 61577: 57416, - 61578: 57417, - 61579: 57418, - 61580: 57419, - 61581: 57420, - 61582: 57421, - 61583: 57422, - 61584: 57423, - 61585: 57424, - 61586: 57425, - 61587: 57426, - 61588: 57427, - 61589: 57428, - 61590: 57429, - 61591: 57430, - 61592: 57431, - 61593: 57432, - 61594: 57433, - 61595: 57434, - 61596: 57435, - 61597: 57436, - 61598: 57437, - 61599: 57438, - 61600: 57439, - 61601: 57440, - 61602: 57441, - 61603: 57442, - 61604: 57443, - 61605: 57444, - 61606: 57445, - 61607: 57446, - 61608: 57447, - 61609: 57448, - 61610: 57449, - 61611: 57450, - 61612: 57451, - 61613: 57452, - 61614: 57453, - 61615: 57454, - 61616: 57455, - 61617: 57456, - 61618: 57457, - 61619: 57458, - 61620: 57459, - 61621: 57460, - 61622: 57461, - 61623: 57462, - 61624: 57463, - 61625: 57464, - 61626: 57465, - 61627: 57466, - 61628: 57467, - 61629: 57468, - 61630: 57469, - 61631: 57470, - 61632: 57471, - 61633: 57472, - 61634: 57473, - 61635: 57474, - 61636: 57475, - 61637: 57476, - 61638: 57477, - 61639: 57478, - 61640: 57479, - 61641: 57480, - 61642: 57481, - 61643: 57482, - 61644: 57483, - 61645: 57484, - 61646: 57485, - 61647: 57486, - 61648: 57487, - 61649: 57488, - 61650: 57489, - 61651: 57490, - 61652: 57491, - 61653: 57492, - 61654: 57493, - 61655: 57494, - 61656: 57495, - 61657: 57496, - 61658: 57497, - 61659: 57498, - 61660: 57499, - 61661: 57500, - 61662: 57501, - 61663: 57502, - 61664: 57503, - 61665: 57504, - 61666: 57505, - 61667: 57506, - 61668: 57507, - 61669: 57508, - 61670: 57509, - 61671: 57510, - 61672: 57511, - 61673: 57512, - 61674: 57513, - 61675: 57514, - 61676: 57515, - 61677: 57516, - 61678: 57517, - 61679: 57518, - 61680: 57519, - 61681: 57520, - 61682: 57521, - 61683: 57522, - 61684: 57523, - 61685: 57524, - 61686: 57525, - 61687: 57526, - 61688: 57527, - 61689: 57528, - 61690: 57529, - 61691: 57530, - 61692: 57531, - 61760: 57532, - 61761: 57533, - 61762: 57534, - 61763: 57535, - 61764: 57536, - 61765: 57537, - 61766: 57538, - 61767: 57539, - 61768: 57540, - 61769: 57541, - 61770: 57542, - 61771: 57543, - 61772: 57544, - 61773: 57545, - 61774: 57546, - 61775: 57547, - 61776: 57548, - 61777: 57549, - 61778: 57550, - 61779: 57551, - 61780: 57552, - 61781: 57553, - 61782: 57554, - 61783: 57555, - 61784: 57556, - 61785: 57557, - 61786: 57558, - 61787: 57559, - 61788: 57560, - 61789: 57561, - 61790: 57562, - 61791: 57563, - 61792: 57564, - 61793: 57565, - 61794: 57566, - 61795: 57567, - 61796: 57568, - 61797: 57569, - 61798: 57570, - 61799: 57571, - 61800: 57572, - 61801: 57573, - 61802: 57574, - 61803: 57575, - 61804: 57576, - 61805: 57577, - 61806: 57578, - 61807: 57579, - 61808: 57580, - 61809: 57581, - 61810: 57582, - 61811: 57583, - 61812: 57584, - 61813: 57585, - 61814: 57586, - 61815: 57587, - 61816: 57588, - 61817: 57589, - 61818: 57590, - 61819: 57591, - 61820: 57592, - 61821: 57593, - 61822: 57594, - 61824: 57595, - 61825: 57596, - 61826: 57597, - 61827: 57598, - 61828: 57599, - 61829: 57600, - 61830: 57601, - 61831: 57602, - 61832: 57603, - 61833: 57604, - 61834: 57605, - 61835: 57606, - 61836: 57607, - 61837: 57608, - 61838: 57609, - 61839: 57610, - 61840: 57611, - 61841: 57612, - 61842: 57613, - 61843: 57614, - 61844: 57615, - 61845: 57616, - 61846: 57617, - 61847: 57618, - 61848: 57619, - 61849: 57620, - 61850: 57621, - 61851: 57622, - 61852: 57623, - 61853: 57624, - 61854: 57625, - 61855: 57626, - 61856: 57627, - 61857: 57628, - 61858: 57629, - 61859: 57630, - 61860: 57631, - 61861: 57632, - 61862: 57633, - 61863: 57634, - 61864: 57635, - 61865: 57636, - 61866: 57637, - 61867: 57638, - 61868: 57639, - 61869: 57640, - 61870: 57641, - 61871: 57642, - 61872: 57643, - 61873: 57644, - 61874: 57645, - 61875: 57646, - 61876: 57647, - 61877: 57648, - 61878: 57649, - 61879: 57650, - 61880: 57651, - 61881: 57652, - 61882: 57653, - 61883: 57654, - 61884: 57655, - 61885: 57656, - 61886: 57657, - 61887: 57658, - 61888: 57659, - 61889: 57660, - 61890: 57661, - 61891: 57662, - 61892: 57663, - 61893: 57664, - 61894: 57665, - 61895: 57666, - 61896: 57667, - 61897: 57668, - 61898: 57669, - 61899: 57670, - 61900: 57671, - 61901: 57672, - 61902: 57673, - 61903: 57674, - 61904: 57675, - 61905: 57676, - 61906: 57677, - 61907: 57678, - 61908: 57679, - 61909: 57680, - 61910: 57681, - 61911: 57682, - 61912: 57683, - 61913: 57684, - 61914: 57685, - 61915: 57686, - 61916: 57687, - 61917: 57688, - 61918: 57689, - 61919: 57690, - 61920: 57691, - 61921: 57692, - 61922: 57693, - 61923: 57694, - 61924: 57695, - 61925: 57696, - 61926: 57697, - 61927: 57698, - 61928: 57699, - 61929: 57700, - 61930: 57701, - 61931: 57702, - 61932: 57703, - 61933: 57704, - 61934: 57705, - 61935: 57706, - 61936: 57707, - 61937: 57708, - 61938: 57709, - 61939: 57710, - 61940: 57711, - 61941: 57712, - 61942: 57713, - 61943: 57714, - 61944: 57715, - 61945: 57716, - 61946: 57717, - 61947: 57718, - 61948: 57719, - 62016: 57720, - 62017: 57721, - 62018: 57722, - 62019: 57723, - 62020: 57724, - 62021: 57725, - 62022: 57726, - 62023: 57727, - 62024: 57728, - 62025: 57729, - 62026: 57730, - 62027: 57731, - 62028: 57732, - 62029: 57733, - 62030: 57734, - 62031: 57735, - 62032: 57736, - 62033: 57737, - 62034: 57738, - 62035: 57739, - 62036: 57740, - 62037: 57741, - 62038: 57742, - 62039: 57743, - 62040: 57744, - 62041: 57745, - 62042: 57746, - 62043: 57747, - 62044: 57748, - 62045: 57749, - 62046: 57750, - 62047: 57751, - 62048: 57752, - 62049: 57753, - 62050: 57754, - 62051: 57755, - 62052: 57756, - 62053: 57757, - 62054: 57758, - 62055: 57759, - 62056: 57760, - 62057: 57761, - 62058: 57762, - 62059: 57763, - 62060: 57764, - 62061: 57765, - 62062: 57766, - 62063: 57767, - 62064: 57768, - 62065: 57769, - 62066: 57770, - 62067: 57771, - 62068: 57772, - 62069: 57773, - 62070: 57774, - 62071: 57775, - 62072: 57776, - 62073: 57777, - 62074: 57778, - 62075: 57779, - 62076: 57780, - 62077: 57781, - 62078: 57782, - 62080: 57783, - 62081: 57784, - 62082: 57785, - 62083: 57786, - 62084: 57787, - 62085: 57788, - 62086: 57789, - 62087: 57790, - 62088: 57791, - 62089: 57792, - 62090: 57793, - 62091: 57794, - 62092: 57795, - 62093: 57796, - 62094: 57797, - 62095: 57798, - 62096: 57799, - 62097: 57800, - 62098: 57801, - 62099: 57802, - 62100: 57803, - 62101: 57804, - 62102: 57805, - 62103: 57806, - 62104: 57807, - 62105: 57808, - 62106: 57809, - 62107: 57810, - 62108: 57811, - 62109: 57812, - 62110: 57813, - 62111: 57814, - 62112: 57815, - 62113: 57816, - 62114: 57817, - 62115: 57818, - 62116: 57819, - 62117: 57820, - 62118: 57821, - 62119: 57822, - 62120: 57823, - 62121: 57824, - 62122: 57825, - 62123: 57826, - 62124: 57827, - 62125: 57828, - 62126: 57829, - 62127: 57830, - 62128: 57831, - 62129: 57832, - 62130: 57833, - 62131: 57834, - 62132: 57835, - 62133: 57836, - 62134: 57837, - 62135: 57838, - 62136: 57839, - 62137: 57840, - 62138: 57841, - 62139: 57842, - 62140: 57843, - 62141: 57844, - 62142: 57845, - 62143: 57846, - 62144: 57847, - 62145: 57848, - 62146: 57849, - 62147: 57850, - 62148: 57851, - 62149: 57852, - 62150: 57853, - 62151: 57854, - 62152: 57855, - 62153: 57856, - 62154: 57857, - 62155: 57858, - 62156: 57859, - 62157: 57860, - 62158: 57861, - 62159: 57862, - 62160: 57863, - 62161: 57864, - 62162: 57865, - 62163: 57866, - 62164: 57867, - 62165: 57868, - 62166: 57869, - 62167: 57870, - 62168: 57871, - 62169: 57872, - 62170: 57873, - 62171: 57874, - 62172: 57875, - 62173: 57876, - 62174: 57877, - 62175: 57878, - 62176: 57879, - 62177: 57880, - 62178: 57881, - 62179: 57882, - 62180: 57883, - 62181: 57884, - 62182: 57885, - 62183: 57886, - 62184: 57887, - 62185: 57888, - 62186: 57889, - 62187: 57890, - 62188: 57891, - 62189: 57892, - 62190: 57893, - 62191: 57894, - 62192: 57895, - 62193: 57896, - 62194: 57897, - 62195: 57898, - 62196: 57899, - 62197: 57900, - 62198: 57901, - 62199: 57902, - 62200: 57903, - 62201: 57904, - 62202: 57905, - 62203: 57906, - 62204: 57907, - 62272: 57908, - 62273: 57909, - 62274: 57910, - 62275: 57911, - 62276: 57912, - 62277: 57913, - 62278: 57914, - 62279: 57915, - 62280: 57916, - 62281: 57917, - 62282: 57918, - 62283: 57919, - 62284: 57920, - 62285: 57921, - 62286: 57922, - 62287: 57923, - 62288: 57924, - 62289: 57925, - 62290: 57926, - 62291: 57927, - 62292: 57928, - 62293: 57929, - 62294: 57930, - 62295: 57931, - 62296: 57932, - 62297: 57933, - 62298: 57934, - 62299: 57935, - 62300: 57936, - 62301: 57937, - 62302: 57938, - 62303: 57939, - 62304: 57940, - 62305: 57941, - 62306: 57942, - 62307: 57943, - 62308: 57944, - 62309: 57945, - 62310: 57946, - 62311: 57947, - 62312: 57948, - 62313: 57949, - 62314: 57950, - 62315: 57951, - 62316: 57952, - 62317: 57953, - 62318: 57954, - 62319: 57955, - 62320: 57956, - 62321: 57957, - 62322: 57958, - 62323: 57959, - 62324: 57960, - 62325: 57961, - 62326: 57962, - 62327: 57963, - 62328: 57964, - 62329: 57965, - 62330: 57966, - 62331: 57967, - 62332: 57968, - 62333: 57969, - 62334: 57970, - 62336: 57971, - 62337: 57972, - 62338: 57973, - 62339: 57974, - 62340: 57975, - 62341: 57976, - 62342: 57977, - 62343: 57978, - 62344: 57979, - 62345: 57980, - 62346: 57981, - 62347: 57982, - 62348: 57983, - 62349: 57984, - 62350: 57985, - 62351: 57986, - 62352: 57987, - 62353: 57988, - 62354: 57989, - 62355: 57990, - 62356: 57991, - 62357: 57992, - 62358: 57993, - 62359: 57994, - 62360: 57995, - 62361: 57996, - 62362: 57997, - 62363: 57998, - 62364: 57999, - 62365: 58e3, - 62366: 58001, - 62367: 58002, - 62368: 58003, - 62369: 58004, - 62370: 58005, - 62371: 58006, - 62372: 58007, - 62373: 58008, - 62374: 58009, - 62375: 58010, - 62376: 58011, - 62377: 58012, - 62378: 58013, - 62379: 58014, - 62380: 58015, - 62381: 58016, - 62382: 58017, - 62383: 58018, - 62384: 58019, - 62385: 58020, - 62386: 58021, - 62387: 58022, - 62388: 58023, - 62389: 58024, - 62390: 58025, - 62391: 58026, - 62392: 58027, - 62393: 58028, - 62394: 58029, - 62395: 58030, - 62396: 58031, - 62397: 58032, - 62398: 58033, - 62399: 58034, - 62400: 58035, - 62401: 58036, - 62402: 58037, - 62403: 58038, - 62404: 58039, - 62405: 58040, - 62406: 58041, - 62407: 58042, - 62408: 58043, - 62409: 58044, - 62410: 58045, - 62411: 58046, - 62412: 58047, - 62413: 58048, - 62414: 58049, - 62415: 58050, - 62416: 58051, - 62417: 58052, - 62418: 58053, - 62419: 58054, - 62420: 58055, - 62421: 58056, - 62422: 58057, - 62423: 58058, - 62424: 58059, - 62425: 58060, - 62426: 58061, - 62427: 58062, - 62428: 58063, - 62429: 58064, - 62430: 58065, - 62431: 58066, - 62432: 58067, - 62433: 58068, - 62434: 58069, - 62435: 58070, - 62436: 58071, - 62437: 58072, - 62438: 58073, - 62439: 58074, - 62440: 58075, - 62441: 58076, - 62442: 58077, - 62443: 58078, - 62444: 58079, - 62445: 58080, - 62446: 58081, - 62447: 58082, - 62448: 58083, - 62449: 58084, - 62450: 58085, - 62451: 58086, - 62452: 58087, - 62453: 58088, - 62454: 58089, - 62455: 58090, - 62456: 58091, - 62457: 58092, - 62458: 58093, - 62459: 58094, - 62460: 58095, - 62528: 58096, - 62529: 58097, - 62530: 58098, - 62531: 58099, - 62532: 58100, - 62533: 58101, - 62534: 58102, - 62535: 58103, - 62536: 58104, - 62537: 58105, - 62538: 58106, - 62539: 58107, - 62540: 58108, - 62541: 58109, - 62542: 58110, - 62543: 58111, - 62544: 58112, - 62545: 58113, - 62546: 58114, - 62547: 58115, - 62548: 58116, - 62549: 58117, - 62550: 58118, - 62551: 58119, - 62552: 58120, - 62553: 58121, - 62554: 58122, - 62555: 58123, - 62556: 58124, - 62557: 58125, - 62558: 58126, - 62559: 58127, - 62560: 58128, - 62561: 58129, - 62562: 58130, - 62563: 58131, - 62564: 58132, - 62565: 58133, - 62566: 58134, - 62567: 58135, - 62568: 58136, - 62569: 58137, - 62570: 58138, - 62571: 58139, - 62572: 58140, - 62573: 58141, - 62574: 58142, - 62575: 58143, - 62576: 58144, - 62577: 58145, - 62578: 58146, - 62579: 58147, - 62580: 58148, - 62581: 58149, - 62582: 58150, - 62583: 58151, - 62584: 58152, - 62585: 58153, - 62586: 58154, - 62587: 58155, - 62588: 58156, - 62589: 58157, - 62590: 58158, - 62592: 58159, - 62593: 58160, - 62594: 58161, - 62595: 58162, - 62596: 58163, - 62597: 58164, - 62598: 58165, - 62599: 58166, - 62600: 58167, - 62601: 58168, - 62602: 58169, - 62603: 58170, - 62604: 58171, - 62605: 58172, - 62606: 58173, - 62607: 58174, - 62608: 58175, - 62609: 58176, - 62610: 58177, - 62611: 58178, - 62612: 58179, - 62613: 58180, - 62614: 58181, - 62615: 58182, - 62616: 58183, - 62617: 58184, - 62618: 58185, - 62619: 58186, - 62620: 58187, - 62621: 58188, - 62622: 58189, - 62623: 58190, - 62624: 58191, - 62625: 58192, - 62626: 58193, - 62627: 58194, - 62628: 58195, - 62629: 58196, - 62630: 58197, - 62631: 58198, - 62632: 58199, - 62633: 58200, - 62634: 58201, - 62635: 58202, - 62636: 58203, - 62637: 58204, - 62638: 58205, - 62639: 58206, - 62640: 58207, - 62641: 58208, - 62642: 58209, - 62643: 58210, - 62644: 58211, - 62645: 58212, - 62646: 58213, - 62647: 58214, - 62648: 58215, - 62649: 58216, - 62650: 58217, - 62651: 58218, - 62652: 58219, - 62653: 58220, - 62654: 58221, - 62655: 58222, - 62656: 58223, - 62657: 58224, - 62658: 58225, - 62659: 58226, - 62660: 58227, - 62661: 58228, - 62662: 58229, - 62663: 58230, - 62664: 58231, - 62665: 58232, - 62666: 58233, - 62667: 58234, - 62668: 58235, - 62669: 58236, - 62670: 58237, - 62671: 58238, - 62672: 58239, - 62673: 58240, - 62674: 58241, - 62675: 58242, - 62676: 58243, - 62677: 58244, - 62678: 58245, - 62679: 58246, - 62680: 58247, - 62681: 58248, - 62682: 58249, - 62683: 58250, - 62684: 58251, - 62685: 58252, - 62686: 58253, - 62687: 58254, - 62688: 58255, - 62689: 58256, - 62690: 58257, - 62691: 58258, - 62692: 58259, - 62693: 58260, - 62694: 58261, - 62695: 58262, - 62696: 58263, - 62697: 58264, - 62698: 58265, - 62699: 58266, - 62700: 58267, - 62701: 58268, - 62702: 58269, - 62703: 58270, - 62704: 58271, - 62705: 58272, - 62706: 58273, - 62707: 58274, - 62708: 58275, - 62709: 58276, - 62710: 58277, - 62711: 58278, - 62712: 58279, - 62713: 58280, - 62714: 58281, - 62715: 58282, - 62716: 58283, - 62784: 58284, - 62785: 58285, - 62786: 58286, - 62787: 58287, - 62788: 58288, - 62789: 58289, - 62790: 58290, - 62791: 58291, - 62792: 58292, - 62793: 58293, - 62794: 58294, - 62795: 58295, - 62796: 58296, - 62797: 58297, - 62798: 58298, - 62799: 58299, - 62800: 58300, - 62801: 58301, - 62802: 58302, - 62803: 58303, - 62804: 58304, - 62805: 58305, - 62806: 58306, - 62807: 58307, - 62808: 58308, - 62809: 58309, - 62810: 58310, - 62811: 58311, - 62812: 58312, - 62813: 58313, - 62814: 58314, - 62815: 58315, - 62816: 58316, - 62817: 58317, - 62818: 58318, - 62819: 58319, - 62820: 58320, - 62821: 58321, - 62822: 58322, - 62823: 58323, - 62824: 58324, - 62825: 58325, - 62826: 58326, - 62827: 58327, - 62828: 58328, - 62829: 58329, - 62830: 58330, - 62831: 58331, - 62832: 58332, - 62833: 58333, - 62834: 58334, - 62835: 58335, - 62836: 58336, - 62837: 58337, - 62838: 58338, - 62839: 58339, - 62840: 58340, - 62841: 58341, - 62842: 58342, - 62843: 58343, - 62844: 58344, - 62845: 58345, - 62846: 58346, - 62848: 58347, - 62849: 58348, - 62850: 58349, - 62851: 58350, - 62852: 58351, - 62853: 58352, - 62854: 58353, - 62855: 58354, - 62856: 58355, - 62857: 58356, - 62858: 58357, - 62859: 58358, - 62860: 58359, - 62861: 58360, - 62862: 58361, - 62863: 58362, - 62864: 58363, - 62865: 58364, - 62866: 58365, - 62867: 58366, - 62868: 58367, - 62869: 58368, - 62870: 58369, - 62871: 58370, - 62872: 58371, - 62873: 58372, - 62874: 58373, - 62875: 58374, - 62876: 58375, - 62877: 58376, - 62878: 58377, - 62879: 58378, - 62880: 58379, - 62881: 58380, - 62882: 58381, - 62883: 58382, - 62884: 58383, - 62885: 58384, - 62886: 58385, - 62887: 58386, - 62888: 58387, - 62889: 58388, - 62890: 58389, - 62891: 58390, - 62892: 58391, - 62893: 58392, - 62894: 58393, - 62895: 58394, - 62896: 58395, - 62897: 58396, - 62898: 58397, - 62899: 58398, - 62900: 58399, - 62901: 58400, - 62902: 58401, - 62903: 58402, - 62904: 58403, - 62905: 58404, - 62906: 58405, - 62907: 58406, - 62908: 58407, - 62909: 58408, - 62910: 58409, - 62911: 58410, - 62912: 58411, - 62913: 58412, - 62914: 58413, - 62915: 58414, - 62916: 58415, - 62917: 58416, - 62918: 58417, - 62919: 58418, - 62920: 58419, - 62921: 58420, - 62922: 58421, - 62923: 58422, - 62924: 58423, - 62925: 58424, - 62926: 58425, - 62927: 58426, - 62928: 58427, - 62929: 58428, - 62930: 58429, - 62931: 58430, - 62932: 58431, - 62933: 58432, - 62934: 58433, - 62935: 58434, - 62936: 58435, - 62937: 58436, - 62938: 58437, - 62939: 58438, - 62940: 58439, - 62941: 58440, - 62942: 58441, - 62943: 58442, - 62944: 58443, - 62945: 58444, - 62946: 58445, - 62947: 58446, - 62948: 58447, - 62949: 58448, - 62950: 58449, - 62951: 58450, - 62952: 58451, - 62953: 58452, - 62954: 58453, - 62955: 58454, - 62956: 58455, - 62957: 58456, - 62958: 58457, - 62959: 58458, - 62960: 58459, - 62961: 58460, - 62962: 58461, - 62963: 58462, - 62964: 58463, - 62965: 58464, - 62966: 58465, - 62967: 58466, - 62968: 58467, - 62969: 58468, - 62970: 58469, - 62971: 58470, - 62972: 58471, - 63040: 58472, - 63041: 58473, - 63042: 58474, - 63043: 58475, - 63044: 58476, - 63045: 58477, - 63046: 58478, - 63047: 58479, - 63048: 58480, - 63049: 58481, - 63050: 58482, - 63051: 58483, - 63052: 58484, - 63053: 58485, - 63054: 58486, - 63055: 58487, - 63056: 58488, - 63057: 58489, - 63058: 58490, - 63059: 58491, - 63060: 58492, - 63061: 58493, - 63062: 58494, - 63063: 58495, - 63064: 58496, - 63065: 58497, - 63066: 58498, - 63067: 58499, - 63068: 58500, - 63069: 58501, - 63070: 58502, - 63071: 58503, - 63072: 58504, - 63073: 58505, - 63074: 58506, - 63075: 58507, - 63076: 58508, - 63077: 58509, - 63078: 58510, - 63079: 58511, - 63080: 58512, - 63081: 58513, - 63082: 58514, - 63083: 58515, - 63084: 58516, - 63085: 58517, - 63086: 58518, - 63087: 58519, - 63088: 58520, - 63089: 58521, - 63090: 58522, - 63091: 58523, - 63092: 58524, - 63093: 58525, - 63094: 58526, - 63095: 58527, - 63096: 58528, - 63097: 58529, - 63098: 58530, - 63099: 58531, - 63100: 58532, - 63101: 58533, - 63102: 58534, - 63104: 58535, - 63105: 58536, - 63106: 58537, - 63107: 58538, - 63108: 58539, - 63109: 58540, - 63110: 58541, - 63111: 58542, - 63112: 58543, - 63113: 58544, - 63114: 58545, - 63115: 58546, - 63116: 58547, - 63117: 58548, - 63118: 58549, - 63119: 58550, - 63120: 58551, - 63121: 58552, - 63122: 58553, - 63123: 58554, - 63124: 58555, - 63125: 58556, - 63126: 58557, - 63127: 58558, - 63128: 58559, - 63129: 58560, - 63130: 58561, - 63131: 58562, - 63132: 58563, - 63133: 58564, - 63134: 58565, - 63135: 58566, - 63136: 58567, - 63137: 58568, - 63138: 58569, - 63139: 58570, - 63140: 58571, - 63141: 58572, - 63142: 58573, - 63143: 58574, - 63144: 58575, - 63145: 58576, - 63146: 58577, - 63147: 58578, - 63148: 58579, - 63149: 58580, - 63150: 58581, - 63151: 58582, - 63152: 58583, - 63153: 58584, - 63154: 58585, - 63155: 58586, - 63156: 58587, - 63157: 58588, - 63158: 58589, - 63159: 58590, - 63160: 58591, - 63161: 58592, - 63162: 58593, - 63163: 58594, - 63164: 58595, - 63165: 58596, - 63166: 58597, - 63167: 58598, - 63168: 58599, - 63169: 58600, - 63170: 58601, - 63171: 58602, - 63172: 58603, - 63173: 58604, - 63174: 58605, - 63175: 58606, - 63176: 58607, - 63177: 58608, - 63178: 58609, - 63179: 58610, - 63180: 58611, - 63181: 58612, - 63182: 58613, - 63183: 58614, - 63184: 58615, - 63185: 58616, - 63186: 58617, - 63187: 58618, - 63188: 58619, - 63189: 58620, - 63190: 58621, - 63191: 58622, - 63192: 58623, - 63193: 58624, - 63194: 58625, - 63195: 58626, - 63196: 58627, - 63197: 58628, - 63198: 58629, - 63199: 58630, - 63200: 58631, - 63201: 58632, - 63202: 58633, - 63203: 58634, - 63204: 58635, - 63205: 58636, - 63206: 58637, - 63207: 58638, - 63208: 58639, - 63209: 58640, - 63210: 58641, - 63211: 58642, - 63212: 58643, - 63213: 58644, - 63214: 58645, - 63215: 58646, - 63216: 58647, - 63217: 58648, - 63218: 58649, - 63219: 58650, - 63220: 58651, - 63221: 58652, - 63222: 58653, - 63223: 58654, - 63224: 58655, - 63225: 58656, - 63226: 58657, - 63227: 58658, - 63228: 58659, - 63296: 58660, - 63297: 58661, - 63298: 58662, - 63299: 58663, - 63300: 58664, - 63301: 58665, - 63302: 58666, - 63303: 58667, - 63304: 58668, - 63305: 58669, - 63306: 58670, - 63307: 58671, - 63308: 58672, - 63309: 58673, - 63310: 58674, - 63311: 58675, - 63312: 58676, - 63313: 58677, - 63314: 58678, - 63315: 58679, - 63316: 58680, - 63317: 58681, - 63318: 58682, - 63319: 58683, - 63320: 58684, - 63321: 58685, - 63322: 58686, - 63323: 58687, - 63324: 58688, - 63325: 58689, - 63326: 58690, - 63327: 58691, - 63328: 58692, - 63329: 58693, - 63330: 58694, - 63331: 58695, - 63332: 58696, - 63333: 58697, - 63334: 58698, - 63335: 58699, - 63336: 58700, - 63337: 58701, - 63338: 58702, - 63339: 58703, - 63340: 58704, - 63341: 58705, - 63342: 58706, - 63343: 58707, - 63344: 58708, - 63345: 58709, - 63346: 58710, - 63347: 58711, - 63348: 58712, - 63349: 58713, - 63350: 58714, - 63351: 58715, - 63352: 58716, - 63353: 58717, - 63354: 58718, - 63355: 58719, - 63356: 58720, - 63357: 58721, - 63358: 58722, - 63360: 58723, - 63361: 58724, - 63362: 58725, - 63363: 58726, - 63364: 58727, - 63365: 58728, - 63366: 58729, - 63367: 58730, - 63368: 58731, - 63369: 58732, - 63370: 58733, - 63371: 58734, - 63372: 58735, - 63373: 58736, - 63374: 58737, - 63375: 58738, - 63376: 58739, - 63377: 58740, - 63378: 58741, - 63379: 58742, - 63380: 58743, - 63381: 58744, - 63382: 58745, - 63383: 58746, - 63384: 58747, - 63385: 58748, - 63386: 58749, - 63387: 58750, - 63388: 58751, - 63389: 58752, - 63390: 58753, - 63391: 58754, - 63392: 58755, - 63393: 58756, - 63394: 58757, - 63395: 58758, - 63396: 58759, - 63397: 58760, - 63398: 58761, - 63399: 58762, - 63400: 58763, - 63401: 58764, - 63402: 58765, - 63403: 58766, - 63404: 58767, - 63405: 58768, - 63406: 58769, - 63407: 58770, - 63408: 58771, - 63409: 58772, - 63410: 58773, - 63411: 58774, - 63412: 58775, - 63413: 58776, - 63414: 58777, - 63415: 58778, - 63416: 58779, - 63417: 58780, - 63418: 58781, - 63419: 58782, - 63420: 58783, - 63421: 58784, - 63422: 58785, - 63423: 58786, - 63424: 58787, - 63425: 58788, - 63426: 58789, - 63427: 58790, - 63428: 58791, - 63429: 58792, - 63430: 58793, - 63431: 58794, - 63432: 58795, - 63433: 58796, - 63434: 58797, - 63435: 58798, - 63436: 58799, - 63437: 58800, - 63438: 58801, - 63439: 58802, - 63440: 58803, - 63441: 58804, - 63442: 58805, - 63443: 58806, - 63444: 58807, - 63445: 58808, - 63446: 58809, - 63447: 58810, - 63448: 58811, - 63449: 58812, - 63450: 58813, - 63451: 58814, - 63452: 58815, - 63453: 58816, - 63454: 58817, - 63455: 58818, - 63456: 58819, - 63457: 58820, - 63458: 58821, - 63459: 58822, - 63460: 58823, - 63461: 58824, - 63462: 58825, - 63463: 58826, - 63464: 58827, - 63465: 58828, - 63466: 58829, - 63467: 58830, - 63468: 58831, - 63469: 58832, - 63470: 58833, - 63471: 58834, - 63472: 58835, - 63473: 58836, - 63474: 58837, - 63475: 58838, - 63476: 58839, - 63477: 58840, - 63478: 58841, - 63479: 58842, - 63480: 58843, - 63481: 58844, - 63482: 58845, - 63483: 58846, - 63484: 58847, - 63552: 58848, - 63553: 58849, - 63554: 58850, - 63555: 58851, - 63556: 58852, - 63557: 58853, - 63558: 58854, - 63559: 58855, - 63560: 58856, - 63561: 58857, - 63562: 58858, - 63563: 58859, - 63564: 58860, - 63565: 58861, - 63566: 58862, - 63567: 58863, - 63568: 58864, - 63569: 58865, - 63570: 58866, - 63571: 58867, - 63572: 58868, - 63573: 58869, - 63574: 58870, - 63575: 58871, - 63576: 58872, - 63577: 58873, - 63578: 58874, - 63579: 58875, - 63580: 58876, - 63581: 58877, - 63582: 58878, - 63583: 58879, - 63584: 58880, - 63585: 58881, - 63586: 58882, - 63587: 58883, - 63588: 58884, - 63589: 58885, - 63590: 58886, - 63591: 58887, - 63592: 58888, - 63593: 58889, - 63594: 58890, - 63595: 58891, - 63596: 58892, - 63597: 58893, - 63598: 58894, - 63599: 58895, - 63600: 58896, - 63601: 58897, - 63602: 58898, - 63603: 58899, - 63604: 58900, - 63605: 58901, - 63606: 58902, - 63607: 58903, - 63608: 58904, - 63609: 58905, - 63610: 58906, - 63611: 58907, - 63612: 58908, - 63613: 58909, - 63614: 58910, - 63616: 58911, - 63617: 58912, - 63618: 58913, - 63619: 58914, - 63620: 58915, - 63621: 58916, - 63622: 58917, - 63623: 58918, - 63624: 58919, - 63625: 58920, - 63626: 58921, - 63627: 58922, - 63628: 58923, - 63629: 58924, - 63630: 58925, - 63631: 58926, - 63632: 58927, - 63633: 58928, - 63634: 58929, - 63635: 58930, - 63636: 58931, - 63637: 58932, - 63638: 58933, - 63639: 58934, - 63640: 58935, - 63641: 58936, - 63642: 58937, - 63643: 58938, - 63644: 58939, - 63645: 58940, - 63646: 58941, - 63647: 58942, - 63648: 58943, - 63649: 58944, - 63650: 58945, - 63651: 58946, - 63652: 58947, - 63653: 58948, - 63654: 58949, - 63655: 58950, - 63656: 58951, - 63657: 58952, - 63658: 58953, - 63659: 58954, - 63660: 58955, - 63661: 58956, - 63662: 58957, - 63663: 58958, - 63664: 58959, - 63665: 58960, - 63666: 58961, - 63667: 58962, - 63668: 58963, - 63669: 58964, - 63670: 58965, - 63671: 58966, - 63672: 58967, - 63673: 58968, - 63674: 58969, - 63675: 58970, - 63676: 58971, - 63677: 58972, - 63678: 58973, - 63679: 58974, - 63680: 58975, - 63681: 58976, - 63682: 58977, - 63683: 58978, - 63684: 58979, - 63685: 58980, - 63686: 58981, - 63687: 58982, - 63688: 58983, - 63689: 58984, - 63690: 58985, - 63691: 58986, - 63692: 58987, - 63693: 58988, - 63694: 58989, - 63695: 58990, - 63696: 58991, - 63697: 58992, - 63698: 58993, - 63699: 58994, - 63700: 58995, - 63701: 58996, - 63702: 58997, - 63703: 58998, - 63704: 58999, - 63705: 59e3, - 63706: 59001, - 63707: 59002, - 63708: 59003, - 63709: 59004, - 63710: 59005, - 63711: 59006, - 63712: 59007, - 63713: 59008, - 63714: 59009, - 63715: 59010, - 63716: 59011, - 63717: 59012, - 63718: 59013, - 63719: 59014, - 63720: 59015, - 63721: 59016, - 63722: 59017, - 63723: 59018, - 63724: 59019, - 63725: 59020, - 63726: 59021, - 63727: 59022, - 63728: 59023, - 63729: 59024, - 63730: 59025, - 63731: 59026, - 63732: 59027, - 63733: 59028, - 63734: 59029, - 63735: 59030, - 63736: 59031, - 63737: 59032, - 63738: 59033, - 63739: 59034, - 63740: 59035, - 64064: 8560, - 64065: 8561, - 64066: 8562, - 64067: 8563, - 64068: 8564, - 64069: 8565, - 64070: 8566, - 64071: 8567, - 64072: 8568, - 64073: 8569, - 64074: 8544, - 64075: 8545, - 64076: 8546, - 64077: 8547, - 64078: 8548, - 64079: 8549, - 64080: 8550, - 64081: 8551, - 64082: 8552, - 64083: 8553, - 64084: 65506, - 64085: 65508, - 64086: 65287, - 64087: 65282, - 64088: 12849, - 64089: 8470, - 64090: 8481, - 64091: 8757, - 64092: 32394, - 64093: 35100, - 64094: 37704, - 64095: 37512, - 64096: 34012, - 64097: 20425, - 64098: 28859, - 64099: 26161, - 64100: 26824, - 64101: 37625, - 64102: 26363, - 64103: 24389, - 64104: 20008, - 64105: 20193, - 64106: 20220, - 64107: 20224, - 64108: 20227, - 64109: 20281, - 64110: 20310, - 64111: 20370, - 64112: 20362, - 64113: 20378, - 64114: 20372, - 64115: 20429, - 64116: 20544, - 64117: 20514, - 64118: 20479, - 64119: 20510, - 64120: 20550, - 64121: 20592, - 64122: 20546, - 64123: 20628, - 64124: 20724, - 64125: 20696, - 64126: 20810, - 64128: 20836, - 64129: 20893, - 64130: 20926, - 64131: 20972, - 64132: 21013, - 64133: 21148, - 64134: 21158, - 64135: 21184, - 64136: 21211, - 64137: 21248, - 64138: 21255, - 64139: 21284, - 64140: 21362, - 64141: 21395, - 64142: 21426, - 64143: 21469, - 64144: 64014, - 64145: 21660, - 64146: 21642, - 64147: 21673, - 64148: 21759, - 64149: 21894, - 64150: 22361, - 64151: 22373, - 64152: 22444, - 64153: 22472, - 64154: 22471, - 64155: 64015, - 64156: 64016, - 64157: 22686, - 64158: 22706, - 64159: 22795, - 64160: 22867, - 64161: 22875, - 64162: 22877, - 64163: 22883, - 64164: 22948, - 64165: 22970, - 64166: 23382, - 64167: 23488, - 64168: 29999, - 64169: 23512, - 64170: 23532, - 64171: 23582, - 64172: 23718, - 64173: 23738, - 64174: 23797, - 64175: 23847, - 64176: 23891, - 64177: 64017, - 64178: 23874, - 64179: 23917, - 64180: 23992, - 64181: 23993, - 64182: 24016, - 64183: 24353, - 64184: 24372, - 64185: 24423, - 64186: 24503, - 64187: 24542, - 64188: 24669, - 64189: 24709, - 64190: 24714, - 64191: 24798, - 64192: 24789, - 64193: 24864, - 64194: 24818, - 64195: 24849, - 64196: 24887, - 64197: 24880, - 64198: 24984, - 64199: 25107, - 64200: 25254, - 64201: 25589, - 64202: 25696, - 64203: 25757, - 64204: 25806, - 64205: 25934, - 64206: 26112, - 64207: 26133, - 64208: 26171, - 64209: 26121, - 64210: 26158, - 64211: 26142, - 64212: 26148, - 64213: 26213, - 64214: 26199, - 64215: 26201, - 64216: 64018, - 64217: 26227, - 64218: 26265, - 64219: 26272, - 64220: 26290, - 64221: 26303, - 64222: 26362, - 64223: 26382, - 64224: 63785, - 64225: 26470, - 64226: 26555, - 64227: 26706, - 64228: 26560, - 64229: 26625, - 64230: 26692, - 64231: 26831, - 64232: 64019, - 64233: 26984, - 64234: 64020, - 64235: 27032, - 64236: 27106, - 64237: 27184, - 64238: 27243, - 64239: 27206, - 64240: 27251, - 64241: 27262, - 64242: 27362, - 64243: 27364, - 64244: 27606, - 64245: 27711, - 64246: 27740, - 64247: 27782, - 64248: 27759, - 64249: 27866, - 64250: 27908, - 64251: 28039, - 64252: 28015, - 64320: 28054, - 64321: 28076, - 64322: 28111, - 64323: 28152, - 64324: 28146, - 64325: 28156, - 64326: 28217, - 64327: 28252, - 64328: 28199, - 64329: 28220, - 64330: 28351, - 64331: 28552, - 64332: 28597, - 64333: 28661, - 64334: 28677, - 64335: 28679, - 64336: 28712, - 64337: 28805, - 64338: 28843, - 64339: 28943, - 64340: 28932, - 64341: 29020, - 64342: 28998, - 64343: 28999, - 64344: 64021, - 64345: 29121, - 64346: 29182, - 64347: 29361, - 64348: 29374, - 64349: 29476, - 64350: 64022, - 64351: 29559, - 64352: 29629, - 64353: 29641, - 64354: 29654, - 64355: 29667, - 64356: 29650, - 64357: 29703, - 64358: 29685, - 64359: 29734, - 64360: 29738, - 64361: 29737, - 64362: 29742, - 64363: 29794, - 64364: 29833, - 64365: 29855, - 64366: 29953, - 64367: 30063, - 64368: 30338, - 64369: 30364, - 64370: 30366, - 64371: 30363, - 64372: 30374, - 64373: 64023, - 64374: 30534, - 64375: 21167, - 64376: 30753, - 64377: 30798, - 64378: 30820, - 64379: 30842, - 64380: 31024, - 64381: 64024, - 64382: 64025, - 64384: 64026, - 64385: 31124, - 64386: 64027, - 64387: 31131, - 64388: 31441, - 64389: 31463, - 64390: 64028, - 64391: 31467, - 64392: 31646, - 64393: 64029, - 64394: 32072, - 64395: 32092, - 64396: 32183, - 64397: 32160, - 64398: 32214, - 64399: 32338, - 64400: 32583, - 64401: 32673, - 64402: 64030, - 64403: 33537, - 64404: 33634, - 64405: 33663, - 64406: 33735, - 64407: 33782, - 64408: 33864, - 64409: 33972, - 64410: 34131, - 64411: 34137, - 64412: 34155, - 64413: 64031, - 64414: 34224, - 64415: 64032, - 64416: 64033, - 64417: 34823, - 64418: 35061, - 64419: 35346, - 64420: 35383, - 64421: 35449, - 64422: 35495, - 64423: 35518, - 64424: 35551, - 64425: 64034, - 64426: 35574, - 64427: 35667, - 64428: 35711, - 64429: 36080, - 64430: 36084, - 64431: 36114, - 64432: 36214, - 64433: 64035, - 64434: 36559, - 64435: 64036, - 64436: 64037, - 64437: 36967, - 64438: 37086, - 64439: 64038, - 64440: 37141, - 64441: 37159, - 64442: 37338, - 64443: 37335, - 64444: 37342, - 64445: 37357, - 64446: 37358, - 64447: 37348, - 64448: 37349, - 64449: 37382, - 64450: 37392, - 64451: 37386, - 64452: 37434, - 64453: 37440, - 64454: 37436, - 64455: 37454, - 64456: 37465, - 64457: 37457, - 64458: 37433, - 64459: 37479, - 64460: 37543, - 64461: 37495, - 64462: 37496, - 64463: 37607, - 64464: 37591, - 64465: 37593, - 64466: 37584, - 64467: 64039, - 64468: 37589, - 64469: 37600, - 64470: 37587, - 64471: 37669, - 64472: 37665, - 64473: 37627, - 64474: 64040, - 64475: 37662, - 64476: 37631, - 64477: 37661, - 64478: 37634, - 64479: 37744, - 64480: 37719, - 64481: 37796, - 64482: 37830, - 64483: 37854, - 64484: 37880, - 64485: 37937, - 64486: 37957, - 64487: 37960, - 64488: 38290, - 64489: 63964, - 64490: 64041, - 64491: 38557, - 64492: 38575, - 64493: 38707, - 64494: 38715, - 64495: 38723, - 64496: 38733, - 64497: 38735, - 64498: 38737, - 64499: 38741, - 64500: 38999, - 64501: 39013, - 64502: 64042, - 64503: 64043, - 64504: 39207, - 64505: 64044, - 64506: 39326, - 64507: 39502, - 64508: 39641, - 64576: 39644, - 64577: 39797, - 64578: 39794, - 64579: 39823, - 64580: 39857, - 64581: 39867, - 64582: 39936, - 64583: 40304, - 64584: 40299, - 64585: 64045, - 64586: 40473, - 64587: 40657 - }; - } - s2u(uint8Array) { - var t = this.s2uTable; - var str = ""; - var p = 0; - while (p < uint8Array.length) { - var key = uint8Array[p++]; - if (!(key >= 0 && key <= 126 || key >= 161 && key <= 223) && p < uint8Array.length) key = key << 8 | uint8Array[p++]; - if (t[key] === void 0) { - console.error("unknown char code " + key + "."); - return str; - } - str += String.fromCharCode(t[key]); - } - return str; - } -}; -var DataViewEx = class { - constructor(buffer, littleEndian) { - this.dv = new DataView(buffer); - this.offset = 0; - this.littleEndian = littleEndian !== void 0 ? littleEndian : true; - this.encoder = new CharsetEncoder(); - } - getInt8() { - var value = this.dv.getInt8(this.offset); - this.offset += 1; - return value; - } - getInt8Array(size) { - var a = []; - for (var i = 0; i < size; i++) a.push(this.getInt8()); - return a; - } - getUint8() { - var value = this.dv.getUint8(this.offset); - this.offset += 1; - return value; - } - getUint8Array(size) { - var a = []; - for (var i = 0; i < size; i++) a.push(this.getUint8()); - return a; - } - getInt16() { - var value = this.dv.getInt16(this.offset, this.littleEndian); - this.offset += 2; - return value; - } - getInt16Array(size) { - var a = []; - for (var i = 0; i < size; i++) a.push(this.getInt16()); - return a; - } - getUint16() { - var value = this.dv.getUint16(this.offset, this.littleEndian); - this.offset += 2; - return value; - } - getUint16Array(size) { - var a = []; - for (var i = 0; i < size; i++) a.push(this.getUint16()); - return a; - } - getInt32() { - var value = this.dv.getInt32(this.offset, this.littleEndian); - this.offset += 4; - return value; - } - getInt32Array(size) { - var a = []; - for (var i = 0; i < size; i++) a.push(this.getInt32()); - return a; - } - getUint32() { - var value = this.dv.getUint32(this.offset, this.littleEndian); - this.offset += 4; - return value; - } - getUint32Array(size) { - var a = []; - for (var i = 0; i < size; i++) a.push(this.getUint32()); - return a; - } - getFloat32() { - var value = this.dv.getFloat32(this.offset, this.littleEndian); - this.offset += 4; - return value; - } - getFloat32Array(size) { - var a = []; - for (var i = 0; i < size; i++) a.push(this.getFloat32()); - return a; - } - getFloat64() { - var value = this.dv.getFloat64(this.offset, this.littleEndian); - this.offset += 8; - return value; - } - getFloat64Array(size) { - var a = []; - for (var i = 0; i < size; i++) a.push(this.getFloat64()); - return a; - } - getIndex(type, isUnsigned) { - switch (type) { - case 1: return isUnsigned === true ? this.getUint8() : this.getInt8(); - case 2: return isUnsigned === true ? this.getUint16() : this.getInt16(); - case 4: return this.getInt32(); - default: throw "unknown number type " + type + " exception."; - } - } - getIndexArray(type, size, isUnsigned) { - var a = []; - for (var i = 0; i < size; i++) a.push(this.getIndex(type, isUnsigned)); - return a; - } - getChars(size) { - var str = ""; - while (size > 0) { - var value = this.getUint8(); - size--; - if (value === 0) break; - str += String.fromCharCode(value); - } - while (size > 0) { - this.getUint8(); - size--; - } - return str; - } - getSjisStringsAsUnicode(size) { - var a = []; - while (size > 0) { - var value = this.getUint8(); - size--; - if (value === 0) break; - a.push(value); - } - while (size > 0) { - this.getUint8(); - size--; - } - return this.encoder.s2u(new Uint8Array(a)); - } - getUnicodeStrings(size) { - var str = ""; - while (size > 0) { - var value = this.getUint16(); - size -= 2; - if (value === 0) break; - str += String.fromCharCode(value); - } - while (size > 0) { - this.getUint8(); - size--; - } - return str; - } - getTextBuffer() { - var size = this.getUint32(); - return this.getUnicodeStrings(size); - } -}; -var DataCreationHelper = class { - leftToRightVector3(v) { - v[2] = -v[2]; - } - leftToRightQuaternion(q) { - q[0] = -q[0]; - q[1] = -q[1]; - } - leftToRightEuler(r) { - r[0] = -r[0]; - r[1] = -r[1]; - } - leftToRightIndexOrder(p) { - var tmp = p[2]; - p[2] = p[0]; - p[0] = tmp; - } - leftToRightVector3Range(v1, v2) { - var tmp = -v2[2]; - v2[2] = -v1[2]; - v1[2] = tmp; - } - leftToRightEulerRange(r1, r2) { - var tmp1 = -r2[0]; - var tmp2 = -r2[1]; - r2[0] = -r1[0]; - r2[1] = -r1[1]; - r1[0] = tmp1; - r1[1] = tmp2; - } -}; -var Parser = class { - constructor() {} - parsePmd(buffer, leftToRight) { - var pmd = {}; - var dv = new DataViewEx(buffer); - pmd.metadata = {}; - pmd.metadata.format = "pmd"; - pmd.metadata.coordinateSystem = "left"; - var parseHeader = function() { - var metadata = pmd.metadata; - metadata.magic = dv.getChars(3); - if (metadata.magic !== "Pmd") throw "PMD file magic is not Pmd, but " + metadata.magic; - metadata.version = dv.getFloat32(); - metadata.modelName = dv.getSjisStringsAsUnicode(20); - metadata.comment = dv.getSjisStringsAsUnicode(256); - }; - var parseVertices = function() { - var parseVertex = function() { - var p = {}; - p.position = dv.getFloat32Array(3); - p.normal = dv.getFloat32Array(3); - p.uv = dv.getFloat32Array(2); - p.skinIndices = dv.getUint16Array(2); - p.skinWeights = [dv.getUint8() / 100]; - p.skinWeights.push(1 - p.skinWeights[0]); - p.edgeFlag = dv.getUint8(); - return p; - }; - var metadata = pmd.metadata; - metadata.vertexCount = dv.getUint32(); - pmd.vertices = []; - for (var i = 0; i < metadata.vertexCount; i++) pmd.vertices.push(parseVertex()); - }; - var parseFaces = function() { - var parseFace = function() { - var p = {}; - p.indices = dv.getUint16Array(3); - return p; - }; - var metadata = pmd.metadata; - metadata.faceCount = dv.getUint32() / 3; - pmd.faces = []; - for (var i = 0; i < metadata.faceCount; i++) pmd.faces.push(parseFace()); - }; - var parseMaterials = function() { - var parseMaterial = function() { - var p = {}; - p.diffuse = dv.getFloat32Array(4); - p.shininess = dv.getFloat32(); - p.specular = dv.getFloat32Array(3); - p.ambient = dv.getFloat32Array(3); - p.toonIndex = dv.getInt8(); - p.edgeFlag = dv.getUint8(); - p.faceCount = dv.getUint32() / 3; - p.fileName = dv.getSjisStringsAsUnicode(20); - return p; - }; - var metadata = pmd.metadata; - metadata.materialCount = dv.getUint32(); - pmd.materials = []; - for (var i = 0; i < metadata.materialCount; i++) pmd.materials.push(parseMaterial()); - }; - var parseBones = function() { - var parseBone = function() { - var p = {}; - p.name = dv.getSjisStringsAsUnicode(20); - p.parentIndex = dv.getInt16(); - p.tailIndex = dv.getInt16(); - p.type = dv.getUint8(); - p.ikIndex = dv.getInt16(); - p.position = dv.getFloat32Array(3); - return p; - }; - var metadata = pmd.metadata; - metadata.boneCount = dv.getUint16(); - pmd.bones = []; - for (var i = 0; i < metadata.boneCount; i++) pmd.bones.push(parseBone()); - }; - var parseIks = function() { - var parseIk = function() { - var p = {}; - p.target = dv.getUint16(); - p.effector = dv.getUint16(); - p.linkCount = dv.getUint8(); - p.iteration = dv.getUint16(); - p.maxAngle = dv.getFloat32(); - p.links = []; - for (var i2 = 0; i2 < p.linkCount; i2++) { - var link = {}; - link.index = dv.getUint16(); - p.links.push(link); - } - return p; - }; - var metadata = pmd.metadata; - metadata.ikCount = dv.getUint16(); - pmd.iks = []; - for (var i = 0; i < metadata.ikCount; i++) pmd.iks.push(parseIk()); - }; - var parseMorphs = function() { - var parseMorph = function() { - var p = {}; - p.name = dv.getSjisStringsAsUnicode(20); - p.elementCount = dv.getUint32(); - p.type = dv.getUint8(); - p.elements = []; - for (var i2 = 0; i2 < p.elementCount; i2++) p.elements.push({ - index: dv.getUint32(), - position: dv.getFloat32Array(3) - }); - return p; - }; - var metadata = pmd.metadata; - metadata.morphCount = dv.getUint16(); - pmd.morphs = []; - for (var i = 0; i < metadata.morphCount; i++) pmd.morphs.push(parseMorph()); - }; - var parseMorphFrames = function() { - var parseMorphFrame = function() { - var p = {}; - p.index = dv.getUint16(); - return p; - }; - var metadata = pmd.metadata; - metadata.morphFrameCount = dv.getUint8(); - pmd.morphFrames = []; - for (var i = 0; i < metadata.morphFrameCount; i++) pmd.morphFrames.push(parseMorphFrame()); - }; - var parseBoneFrameNames = function() { - var parseBoneFrameName = function() { - var p = {}; - p.name = dv.getSjisStringsAsUnicode(50); - return p; - }; - var metadata = pmd.metadata; - metadata.boneFrameNameCount = dv.getUint8(); - pmd.boneFrameNames = []; - for (var i = 0; i < metadata.boneFrameNameCount; i++) pmd.boneFrameNames.push(parseBoneFrameName()); - }; - var parseBoneFrames = function() { - var parseBoneFrame = function() { - var p = {}; - p.boneIndex = dv.getInt16(); - p.frameIndex = dv.getUint8(); - return p; - }; - var metadata = pmd.metadata; - metadata.boneFrameCount = dv.getUint32(); - pmd.boneFrames = []; - for (var i = 0; i < metadata.boneFrameCount; i++) pmd.boneFrames.push(parseBoneFrame()); - }; - var parseEnglishHeader = function() { - var metadata = pmd.metadata; - metadata.englishCompatibility = dv.getUint8(); - if (metadata.englishCompatibility > 0) { - metadata.englishModelName = dv.getSjisStringsAsUnicode(20); - metadata.englishComment = dv.getSjisStringsAsUnicode(256); - } - }; - var parseEnglishBoneNames = function() { - var parseEnglishBoneName = function() { - var p = {}; - p.name = dv.getSjisStringsAsUnicode(20); - return p; - }; - var metadata = pmd.metadata; - if (metadata.englishCompatibility === 0) return; - pmd.englishBoneNames = []; - for (var i = 0; i < metadata.boneCount; i++) pmd.englishBoneNames.push(parseEnglishBoneName()); - }; - var parseEnglishMorphNames = function() { - var parseEnglishMorphName = function() { - var p = {}; - p.name = dv.getSjisStringsAsUnicode(20); - return p; - }; - var metadata = pmd.metadata; - if (metadata.englishCompatibility === 0) return; - pmd.englishMorphNames = []; - for (var i = 0; i < metadata.morphCount - 1; i++) pmd.englishMorphNames.push(parseEnglishMorphName()); - }; - var parseEnglishBoneFrameNames = function() { - var parseEnglishBoneFrameName = function() { - var p = {}; - p.name = dv.getSjisStringsAsUnicode(50); - return p; - }; - var metadata = pmd.metadata; - if (metadata.englishCompatibility === 0) return; - pmd.englishBoneFrameNames = []; - for (var i = 0; i < metadata.boneFrameNameCount; i++) pmd.englishBoneFrameNames.push(parseEnglishBoneFrameName()); - }; - var parseToonTextures = function() { - var parseToonTexture = function() { - var p = {}; - p.fileName = dv.getSjisStringsAsUnicode(100); - return p; - }; - pmd.toonTextures = []; - for (var i = 0; i < 10; i++) pmd.toonTextures.push(parseToonTexture()); - }; - var parseRigidBodies = function() { - var parseRigidBody = function() { - var p = {}; - p.name = dv.getSjisStringsAsUnicode(20); - p.boneIndex = dv.getInt16(); - p.groupIndex = dv.getUint8(); - p.groupTarget = dv.getUint16(); - p.shapeType = dv.getUint8(); - p.width = dv.getFloat32(); - p.height = dv.getFloat32(); - p.depth = dv.getFloat32(); - p.position = dv.getFloat32Array(3); - p.rotation = dv.getFloat32Array(3); - p.weight = dv.getFloat32(); - p.positionDamping = dv.getFloat32(); - p.rotationDamping = dv.getFloat32(); - p.restitution = dv.getFloat32(); - p.friction = dv.getFloat32(); - p.type = dv.getUint8(); - return p; - }; - var metadata = pmd.metadata; - metadata.rigidBodyCount = dv.getUint32(); - pmd.rigidBodies = []; - for (var i = 0; i < metadata.rigidBodyCount; i++) pmd.rigidBodies.push(parseRigidBody()); - }; - var parseConstraints = function() { - var parseConstraint = function() { - var p = {}; - p.name = dv.getSjisStringsAsUnicode(20); - p.rigidBodyIndex1 = dv.getUint32(); - p.rigidBodyIndex2 = dv.getUint32(); - p.position = dv.getFloat32Array(3); - p.rotation = dv.getFloat32Array(3); - p.translationLimitation1 = dv.getFloat32Array(3); - p.translationLimitation2 = dv.getFloat32Array(3); - p.rotationLimitation1 = dv.getFloat32Array(3); - p.rotationLimitation2 = dv.getFloat32Array(3); - p.springPosition = dv.getFloat32Array(3); - p.springRotation = dv.getFloat32Array(3); - return p; - }; - var metadata = pmd.metadata; - metadata.constraintCount = dv.getUint32(); - pmd.constraints = []; - for (var i = 0; i < metadata.constraintCount; i++) pmd.constraints.push(parseConstraint()); - }; - parseHeader(); - parseVertices(); - parseFaces(); - parseMaterials(); - parseBones(); - parseIks(); - parseMorphs(); - parseMorphFrames(); - parseBoneFrameNames(); - parseBoneFrames(); - parseEnglishHeader(); - parseEnglishBoneNames(); - parseEnglishMorphNames(); - parseEnglishBoneFrameNames(); - parseToonTextures(); - parseRigidBodies(); - parseConstraints(); - if (leftToRight === true) this.leftToRightModel(pmd); - return pmd; - } - parsePmx(buffer, leftToRight) { - var pmx = {}; - var dv = new DataViewEx(buffer); - pmx.metadata = {}; - pmx.metadata.format = "pmx"; - pmx.metadata.coordinateSystem = "left"; - var parseHeader = function() { - var metadata = pmx.metadata; - metadata.magic = dv.getChars(4); - if (metadata.magic !== "PMX ") throw "PMX file magic is not PMX , but " + metadata.magic; - metadata.version = dv.getFloat32(); - if (metadata.version !== 2 && metadata.version !== 2.1) throw "PMX version " + metadata.version + " is not supported."; - metadata.headerSize = dv.getUint8(); - metadata.encoding = dv.getUint8(); - metadata.additionalUvNum = dv.getUint8(); - metadata.vertexIndexSize = dv.getUint8(); - metadata.textureIndexSize = dv.getUint8(); - metadata.materialIndexSize = dv.getUint8(); - metadata.boneIndexSize = dv.getUint8(); - metadata.morphIndexSize = dv.getUint8(); - metadata.rigidBodyIndexSize = dv.getUint8(); - metadata.modelName = dv.getTextBuffer(); - metadata.englishModelName = dv.getTextBuffer(); - metadata.comment = dv.getTextBuffer(); - metadata.englishComment = dv.getTextBuffer(); - }; - var parseVertices = function() { - var parseVertex = function() { - var p = {}; - p.position = dv.getFloat32Array(3); - p.normal = dv.getFloat32Array(3); - p.uv = dv.getFloat32Array(2); - p.auvs = []; - for (var i2 = 0; i2 < pmx.metadata.additionalUvNum; i2++) p.auvs.push(dv.getFloat32Array(4)); - p.type = dv.getUint8(); - var indexSize = metadata.boneIndexSize; - if (p.type === 0) { - p.skinIndices = dv.getIndexArray(indexSize, 1); - p.skinWeights = [1]; - } else if (p.type === 1) { - p.skinIndices = dv.getIndexArray(indexSize, 2); - p.skinWeights = dv.getFloat32Array(1); - p.skinWeights.push(1 - p.skinWeights[0]); - } else if (p.type === 2) { - p.skinIndices = dv.getIndexArray(indexSize, 4); - p.skinWeights = dv.getFloat32Array(4); - } else if (p.type === 3) { - p.skinIndices = dv.getIndexArray(indexSize, 2); - p.skinWeights = dv.getFloat32Array(1); - p.skinWeights.push(1 - p.skinWeights[0]); - p.skinC = dv.getFloat32Array(3); - p.skinR0 = dv.getFloat32Array(3); - p.skinR1 = dv.getFloat32Array(3); - p.type = 1; - } else throw "unsupport bone type " + p.type + " exception."; - p.edgeRatio = dv.getFloat32(); - return p; - }; - var metadata = pmx.metadata; - metadata.vertexCount = dv.getUint32(); - pmx.vertices = []; - for (var i = 0; i < metadata.vertexCount; i++) pmx.vertices.push(parseVertex()); - }; - var parseFaces = function() { - var parseFace = function() { - var p = {}; - p.indices = dv.getIndexArray(metadata.vertexIndexSize, 3, true); - return p; - }; - var metadata = pmx.metadata; - metadata.faceCount = dv.getUint32() / 3; - pmx.faces = []; - for (var i = 0; i < metadata.faceCount; i++) pmx.faces.push(parseFace()); - }; - var parseTextures = function() { - var parseTexture = function() { - return dv.getTextBuffer(); - }; - var metadata = pmx.metadata; - metadata.textureCount = dv.getUint32(); - pmx.textures = []; - for (var i = 0; i < metadata.textureCount; i++) pmx.textures.push(parseTexture()); - }; - var parseMaterials = function() { - var parseMaterial = function() { - var p = {}; - p.name = dv.getTextBuffer(); - p.englishName = dv.getTextBuffer(); - p.diffuse = dv.getFloat32Array(4); - p.specular = dv.getFloat32Array(3); - p.shininess = dv.getFloat32(); - p.ambient = dv.getFloat32Array(3); - p.flag = dv.getUint8(); - p.edgeColor = dv.getFloat32Array(4); - p.edgeSize = dv.getFloat32(); - p.textureIndex = dv.getIndex(pmx.metadata.textureIndexSize); - p.envTextureIndex = dv.getIndex(pmx.metadata.textureIndexSize); - p.envFlag = dv.getUint8(); - p.toonFlag = dv.getUint8(); - if (p.toonFlag === 0) p.toonIndex = dv.getIndex(pmx.metadata.textureIndexSize); - else if (p.toonFlag === 1) p.toonIndex = dv.getInt8(); - else throw "unknown toon flag " + p.toonFlag + " exception."; - p.comment = dv.getTextBuffer(); - p.faceCount = dv.getUint32() / 3; - return p; - }; - var metadata = pmx.metadata; - metadata.materialCount = dv.getUint32(); - pmx.materials = []; - for (var i = 0; i < metadata.materialCount; i++) pmx.materials.push(parseMaterial()); - }; - var parseBones = function() { - var parseBone = function() { - var p = {}; - p.name = dv.getTextBuffer(); - p.englishName = dv.getTextBuffer(); - p.position = dv.getFloat32Array(3); - p.parentIndex = dv.getIndex(pmx.metadata.boneIndexSize); - p.transformationClass = dv.getUint32(); - p.flag = dv.getUint16(); - if (p.flag & 1) p.connectIndex = dv.getIndex(pmx.metadata.boneIndexSize); - else p.offsetPosition = dv.getFloat32Array(3); - if (p.flag & 256 || p.flag & 512) { - var grant = {}; - grant.isLocal = (p.flag & 128) !== 0 ? true : false; - grant.affectRotation = (p.flag & 256) !== 0 ? true : false; - grant.affectPosition = (p.flag & 512) !== 0 ? true : false; - grant.parentIndex = dv.getIndex(pmx.metadata.boneIndexSize); - grant.ratio = dv.getFloat32(); - p.grant = grant; - } - if (p.flag & 1024) p.fixAxis = dv.getFloat32Array(3); - if (p.flag & 2048) { - p.localXVector = dv.getFloat32Array(3); - p.localZVector = dv.getFloat32Array(3); - } - if (p.flag & 8192) p.key = dv.getUint32(); - if (p.flag & 32) { - var ik = {}; - ik.effector = dv.getIndex(pmx.metadata.boneIndexSize); - ik.target = null; - ik.iteration = dv.getUint32(); - ik.maxAngle = dv.getFloat32(); - ik.linkCount = dv.getUint32(); - ik.links = []; - for (var i2 = 0; i2 < ik.linkCount; i2++) { - var link = {}; - link.index = dv.getIndex(pmx.metadata.boneIndexSize); - link.angleLimitation = dv.getUint8(); - if (link.angleLimitation === 1) { - link.lowerLimitationAngle = dv.getFloat32Array(3); - link.upperLimitationAngle = dv.getFloat32Array(3); - } - ik.links.push(link); - } - p.ik = ik; - } - return p; - }; - var metadata = pmx.metadata; - metadata.boneCount = dv.getUint32(); - pmx.bones = []; - for (var i = 0; i < metadata.boneCount; i++) pmx.bones.push(parseBone()); - }; - var parseMorphs = function() { - var parseMorph = function() { - var p = {}; - p.name = dv.getTextBuffer(); - p.englishName = dv.getTextBuffer(); - p.panel = dv.getUint8(); - p.type = dv.getUint8(); - p.elementCount = dv.getUint32(); - p.elements = []; - for (var i2 = 0; i2 < p.elementCount; i2++) if (p.type === 0) { - var m = {}; - m.index = dv.getIndex(pmx.metadata.morphIndexSize); - m.ratio = dv.getFloat32(); - p.elements.push(m); - } else if (p.type === 1) { - var m = {}; - m.index = dv.getIndex(pmx.metadata.vertexIndexSize, true); - m.position = dv.getFloat32Array(3); - p.elements.push(m); - } else if (p.type === 2) { - var m = {}; - m.index = dv.getIndex(pmx.metadata.boneIndexSize); - m.position = dv.getFloat32Array(3); - m.rotation = dv.getFloat32Array(4); - p.elements.push(m); - } else if (p.type === 3) { - var m = {}; - m.index = dv.getIndex(pmx.metadata.vertexIndexSize, true); - m.uv = dv.getFloat32Array(4); - p.elements.push(m); - } else if (p.type === 4); - else if (p.type === 5); - else if (p.type === 6); - else if (p.type === 7); - else if (p.type === 8) { - var m = {}; - m.index = dv.getIndex(pmx.metadata.materialIndexSize); - m.type = dv.getUint8(); - m.diffuse = dv.getFloat32Array(4); - m.specular = dv.getFloat32Array(3); - m.shininess = dv.getFloat32(); - m.ambient = dv.getFloat32Array(3); - m.edgeColor = dv.getFloat32Array(4); - m.edgeSize = dv.getFloat32(); - m.textureColor = dv.getFloat32Array(4); - m.sphereTextureColor = dv.getFloat32Array(4); - m.toonColor = dv.getFloat32Array(4); - p.elements.push(m); - } - return p; - }; - var metadata = pmx.metadata; - metadata.morphCount = dv.getUint32(); - pmx.morphs = []; - for (var i = 0; i < metadata.morphCount; i++) pmx.morphs.push(parseMorph()); - }; - var parseFrames = function() { - var parseFrame = function() { - var p = {}; - p.name = dv.getTextBuffer(); - p.englishName = dv.getTextBuffer(); - p.type = dv.getUint8(); - p.elementCount = dv.getUint32(); - p.elements = []; - for (var i2 = 0; i2 < p.elementCount; i2++) { - var e = {}; - e.target = dv.getUint8(); - e.index = e.target === 0 ? dv.getIndex(pmx.metadata.boneIndexSize) : dv.getIndex(pmx.metadata.morphIndexSize); - p.elements.push(e); - } - return p; - }; - var metadata = pmx.metadata; - metadata.frameCount = dv.getUint32(); - pmx.frames = []; - for (var i = 0; i < metadata.frameCount; i++) pmx.frames.push(parseFrame()); - }; - var parseRigidBodies = function() { - var parseRigidBody = function() { - var p = {}; - p.name = dv.getTextBuffer(); - p.englishName = dv.getTextBuffer(); - p.boneIndex = dv.getIndex(pmx.metadata.boneIndexSize); - p.groupIndex = dv.getUint8(); - p.groupTarget = dv.getUint16(); - p.shapeType = dv.getUint8(); - p.width = dv.getFloat32(); - p.height = dv.getFloat32(); - p.depth = dv.getFloat32(); - p.position = dv.getFloat32Array(3); - p.rotation = dv.getFloat32Array(3); - p.weight = dv.getFloat32(); - p.positionDamping = dv.getFloat32(); - p.rotationDamping = dv.getFloat32(); - p.restitution = dv.getFloat32(); - p.friction = dv.getFloat32(); - p.type = dv.getUint8(); - return p; - }; - var metadata = pmx.metadata; - metadata.rigidBodyCount = dv.getUint32(); - pmx.rigidBodies = []; - for (var i = 0; i < metadata.rigidBodyCount; i++) pmx.rigidBodies.push(parseRigidBody()); - }; - var parseConstraints = function() { - var parseConstraint = function() { - var p = {}; - p.name = dv.getTextBuffer(); - p.englishName = dv.getTextBuffer(); - p.type = dv.getUint8(); - p.rigidBodyIndex1 = dv.getIndex(pmx.metadata.rigidBodyIndexSize); - p.rigidBodyIndex2 = dv.getIndex(pmx.metadata.rigidBodyIndexSize); - p.position = dv.getFloat32Array(3); - p.rotation = dv.getFloat32Array(3); - p.translationLimitation1 = dv.getFloat32Array(3); - p.translationLimitation2 = dv.getFloat32Array(3); - p.rotationLimitation1 = dv.getFloat32Array(3); - p.rotationLimitation2 = dv.getFloat32Array(3); - p.springPosition = dv.getFloat32Array(3); - p.springRotation = dv.getFloat32Array(3); - return p; - }; - var metadata = pmx.metadata; - metadata.constraintCount = dv.getUint32(); - pmx.constraints = []; - for (var i = 0; i < metadata.constraintCount; i++) pmx.constraints.push(parseConstraint()); - }; - parseHeader(); - parseVertices(); - parseFaces(); - parseTextures(); - parseMaterials(); - parseBones(); - parseMorphs(); - parseFrames(); - parseRigidBodies(); - parseConstraints(); - if (leftToRight === true) this.leftToRightModel(pmx); - return pmx; - } - parseVmd(buffer, leftToRight) { - var vmd = {}; - var dv = new DataViewEx(buffer); - vmd.metadata = {}; - vmd.metadata.coordinateSystem = "left"; - var parseHeader = function() { - var metadata = vmd.metadata; - metadata.magic = dv.getChars(30); - if (metadata.magic !== "Vocaloid Motion Data 0002") throw "VMD file magic is not Vocaloid Motion Data 0002, but " + metadata.magic; - metadata.name = dv.getSjisStringsAsUnicode(20); - }; - var parseMotions = function() { - var parseMotion = function() { - var p = {}; - p.boneName = dv.getSjisStringsAsUnicode(15); - p.frameNum = dv.getUint32(); - p.position = dv.getFloat32Array(3); - p.rotation = dv.getFloat32Array(4); - p.interpolation = dv.getUint8Array(64); - return p; - }; - var metadata = vmd.metadata; - metadata.motionCount = dv.getUint32(); - vmd.motions = []; - for (var i = 0; i < metadata.motionCount; i++) vmd.motions.push(parseMotion()); - }; - var parseMorphs = function() { - var parseMorph = function() { - var p = {}; - p.morphName = dv.getSjisStringsAsUnicode(15); - p.frameNum = dv.getUint32(); - p.weight = dv.getFloat32(); - return p; - }; - var metadata = vmd.metadata; - metadata.morphCount = dv.getUint32(); - vmd.morphs = []; - for (var i = 0; i < metadata.morphCount; i++) vmd.morphs.push(parseMorph()); - }; - var parseCameras = function() { - var parseCamera = function() { - var p = {}; - p.frameNum = dv.getUint32(); - p.distance = dv.getFloat32(); - p.position = dv.getFloat32Array(3); - p.rotation = dv.getFloat32Array(3); - p.interpolation = dv.getUint8Array(24); - p.fov = dv.getUint32(); - p.perspective = dv.getUint8(); - return p; - }; - var metadata = vmd.metadata; - metadata.cameraCount = dv.getUint32(); - vmd.cameras = []; - for (var i = 0; i < metadata.cameraCount; i++) vmd.cameras.push(parseCamera()); - }; - parseHeader(); - parseMotions(); - parseMorphs(); - parseCameras(); - if (leftToRight === true) this.leftToRightVmd(vmd); - return vmd; - } - parseVpd(text, leftToRight) { - var vpd = {}; - vpd.metadata = {}; - vpd.metadata.coordinateSystem = "left"; - vpd.bones = []; - var lines = text.replace(/\/\/\w*(\r|\n|\r\n)/g, "").split(/\r|\n|\r\n/); - function throwError() { - throw "the file seems not vpd file."; - } - function checkMagic() { - if (lines[0] !== "Vocaloid Pose Data file") throwError(); - } - function parseHeader() { - if (lines.length < 4) throwError(); - vpd.metadata.parentFile = lines[2]; - vpd.metadata.boneCount = parseInt(lines[3]); - } - function parseBones() { - var boneHeaderPattern = /^\s*(Bone[0-9]+)\s*\{\s*(.*)$/; - var boneVectorPattern = /^\s*(-?[0-9]+\.[0-9]+)\s*,\s*(-?[0-9]+\.[0-9]+)\s*,\s*(-?[0-9]+\.[0-9]+)\s*;/; - var boneQuaternionPattern = /^\s*(-?[0-9]+\.[0-9]+)\s*,\s*(-?[0-9]+\.[0-9]+)\s*,\s*(-?[0-9]+\.[0-9]+)\s*,\s*(-?[0-9]+\.[0-9]+)\s*;/; - var boneFooterPattern = /^\s*}/; - var bones = vpd.bones; - var n = null; - var v = null; - var q = null; - for (var i = 4; i < lines.length; i++) { - var line = lines[i]; - var result = line.match(boneHeaderPattern); - if (result !== null) { - if (n !== null) throwError(); - n = result[2]; - } - result = line.match(boneVectorPattern); - if (result !== null) { - if (v !== null) throwError(); - v = [ - parseFloat(result[1]), - parseFloat(result[2]), - parseFloat(result[3]) - ]; - } - result = line.match(boneQuaternionPattern); - if (result !== null) { - if (q !== null) throwError(); - q = [ - parseFloat(result[1]), - parseFloat(result[2]), - parseFloat(result[3]), - parseFloat(result[4]) - ]; - } - result = line.match(boneFooterPattern); - if (result !== null) { - if (n === null || v === null || q === null) throwError(); - bones.push({ - name: n, - translation: v, - quaternion: q - }); - n = null; - v = null; - q = null; - } - } - if (n !== null || v !== null || q !== null) throwError(); - } - checkMagic(); - parseHeader(); - parseBones(); - if (leftToRight === true) this.leftToRightVpd(vpd); - return vpd; - } - mergeVmds(vmds) { - var v = {}; - v.metadata = {}; - v.metadata.name = vmds[0].metadata.name; - v.metadata.coordinateSystem = vmds[0].metadata.coordinateSystem; - v.metadata.motionCount = 0; - v.metadata.morphCount = 0; - v.metadata.cameraCount = 0; - v.motions = []; - v.morphs = []; - v.cameras = []; - for (var i = 0; i < vmds.length; i++) { - var v2 = vmds[i]; - v.metadata.motionCount += v2.metadata.motionCount; - v.metadata.morphCount += v2.metadata.morphCount; - v.metadata.cameraCount += v2.metadata.cameraCount; - for (var j = 0; j < v2.metadata.motionCount; j++) v.motions.push(v2.motions[j]); - for (var j = 0; j < v2.metadata.morphCount; j++) v.morphs.push(v2.morphs[j]); - for (var j = 0; j < v2.metadata.cameraCount; j++) v.cameras.push(v2.cameras[j]); - } - return v; - } - leftToRightModel(model) { - if (model.metadata.coordinateSystem === "right") return; - model.metadata.coordinateSystem = "right"; - var helper = new DataCreationHelper(); - for (var i = 0; i < model.metadata.vertexCount; i++) { - helper.leftToRightVector3(model.vertices[i].position); - helper.leftToRightVector3(model.vertices[i].normal); - } - for (var i = 0; i < model.metadata.faceCount; i++) helper.leftToRightIndexOrder(model.faces[i].indices); - for (var i = 0; i < model.metadata.boneCount; i++) helper.leftToRightVector3(model.bones[i].position); - for (var i = 0; i < model.metadata.morphCount; i++) { - var m = model.morphs[i]; - if (model.metadata.format === "pmx" && m.type !== 1) continue; - for (var j = 0; j < m.elements.length; j++) helper.leftToRightVector3(m.elements[j].position); - } - for (var i = 0; i < model.metadata.rigidBodyCount; i++) { - helper.leftToRightVector3(model.rigidBodies[i].position); - helper.leftToRightEuler(model.rigidBodies[i].rotation); - } - for (var i = 0; i < model.metadata.constraintCount; i++) { - helper.leftToRightVector3(model.constraints[i].position); - helper.leftToRightEuler(model.constraints[i].rotation); - helper.leftToRightVector3Range(model.constraints[i].translationLimitation1, model.constraints[i].translationLimitation2); - helper.leftToRightEulerRange(model.constraints[i].rotationLimitation1, model.constraints[i].rotationLimitation2); - } - } - leftToRightVmd(vmd) { - if (vmd.metadata.coordinateSystem === "right") return; - vmd.metadata.coordinateSystem = "right"; - var helper = new DataCreationHelper(); - for (var i = 0; i < vmd.metadata.motionCount; i++) { - helper.leftToRightVector3(vmd.motions[i].position); - helper.leftToRightQuaternion(vmd.motions[i].rotation); - } - for (var i = 0; i < vmd.metadata.cameraCount; i++) { - helper.leftToRightVector3(vmd.cameras[i].position); - helper.leftToRightEuler(vmd.cameras[i].rotation); - } - } - leftToRightVpd(vpd) { - if (vpd.metadata.coordinateSystem === "right") return; - vpd.metadata.coordinateSystem = "right"; - var helper = new DataCreationHelper(); - for (var i = 0; i < vpd.bones.length; i++) { - helper.leftToRightVector3(vpd.bones[i].translation); - helper.leftToRightQuaternion(vpd.bones[i].quaternion); - } - } -}; -//#endregion -//#region node_modules/three-stdlib/exporters/MMDExporter.js -var __defProp$50 = Object.defineProperty; -var __defNormalProp$50 = (obj, key, value) => key in obj ? __defProp$50(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$50 = (obj, key, value) => { - __defNormalProp$50(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var MMDExporter = class { - constructor() { - __publicField$50(this, "u2sTable"); - } - parseVpd(skin, outputShiftJis, useOriginalBones) { - if (skin.isSkinnedMesh !== true) { - console.warn("THREE.MMDExporter: parseVpd() requires SkinnedMesh instance."); - return null; - } - function toStringsFromNumber(num) { - if (Math.abs(num) < 1e-6) num = 0; - let a = num.toString(); - if (a.indexOf(".") === -1) a += "."; - a += "000000"; - const index = a.indexOf("."); - const d = a.slice(0, index); - const p = a.slice(index + 1, index + 7); - return d + "." + p; - } - function toStringsFromArray(array2) { - const a = []; - for (let i = 0, il = array2.length; i < il; i++) a.push(toStringsFromNumber(array2[i])); - return a.join(","); - } - skin.updateMatrixWorld(true); - const bones = skin.skeleton.bones; - const bones2 = this.getBindBones(skin); - const position = new Vector3(); - const quaternion = new Quaternion(); - const quaternion2 = new Quaternion(); - const matrix = new Matrix4(); - const array = []; - array.push("Vocaloid Pose Data file"); - array.push(""); - array.push((skin.name !== "" ? skin.name.replace(/\s/g, "_") : "skin") + ".osm;"); - array.push(bones.length + ";"); - array.push(""); - for (let i = 0, il = bones.length; i < il; i++) { - const bone = bones[i]; - const bone2 = bones2[i]; - if (useOriginalBones === true && bone.userData.ik !== void 0 && bone.userData.ik.originalMatrix !== void 0) matrix.fromArray(bone.userData.ik.originalMatrix); - else matrix.copy(bone.matrix); - position.setFromMatrixPosition(matrix); - quaternion.setFromRotationMatrix(matrix); - const pArray = position.sub(bone2.position).toArray(); - const qArray = quaternion2.copy(bone2.quaternion).conjugate().multiply(quaternion).toArray(); - pArray[2] = -pArray[2]; - qArray[0] = -qArray[0]; - qArray[1] = -qArray[1]; - array.push("Bone" + i + "{" + bone.name); - array.push(" " + toStringsFromArray(pArray) + ";"); - array.push(" " + toStringsFromArray(qArray) + ";"); - array.push("}"); - array.push(""); - } - array.push(""); - const lines = array.join("\n"); - return outputShiftJis === true ? this.unicodeToShiftjis(lines) : lines; - } - unicodeToShiftjis(str) { - if (this.u2sTable === void 0) { - const table = new CharsetEncoder().s2uTable; - this.u2sTable = {}; - const keys = Object.keys(table); - for (let i = 0, il = keys.length; i < il; i++) { - let key = keys[i]; - const value = table[key]; - this.u2sTable[value] = parseInt(key); - } - } - const array = []; - for (let i = 0, il = str.length; i < il; i++) { - const code = str.charCodeAt(i); - const value = this.u2sTable[code]; - if (value === void 0) throw "cannot convert charcode 0x" + code.toString(16); - else if (value > 255) { - array.push(value >> 8 & 255); - array.push(value & 255); - } else array.push(value & 255); - } - return new Uint8Array(array); - } - getBindBones(skin) { - const poseSkin = skin.clone(); - poseSkin.pose(); - return poseSkin.skeleton.bones; - } -}; -//#endregion -//#region node_modules/three-stdlib/exporters/STLExporter.js -var __defProp$49 = Object.defineProperty; -var __defNormalProp$49 = (obj, key, value) => key in obj ? __defProp$49(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$49 = (obj, key, value) => { - __defNormalProp$49(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var isMesh = (object) => object.isMesh; -var STLExporter = class { - constructor() { - __publicField$49(this, "binary", false); - __publicField$49(this, "output", ""); - __publicField$49(this, "offset", 80); - __publicField$49(this, "objects", []); - __publicField$49(this, "triangles", 0); - __publicField$49(this, "vA", new Vector3()); - __publicField$49(this, "vB", new Vector3()); - __publicField$49(this, "vC", new Vector3()); - __publicField$49(this, "cb", new Vector3()); - __publicField$49(this, "ab", new Vector3()); - __publicField$49(this, "normal", new Vector3()); - } - parse(scene, options) { - this.binary = (options == null ? void 0 : options.binary) !== void 0 ? options == null ? void 0 : options.binary : false; - scene.traverse((object) => { - if (isMesh(object)) { - const geometry = object.geometry; - if (!geometry.isBufferGeometry) throw new Error("THREE.STLExporter: Geometry is not of type THREE.BufferGeometry."); - const index = geometry.index; - const positionAttribute = geometry.getAttribute("position") || null; - if (!positionAttribute) return; - this.triangles += index !== null ? index.count / 3 : positionAttribute.count / 3; - this.objects.push({ - object3d: object, - geometry - }); - } - }); - if (this.binary) { - const bufferLength = this.triangles * 2 + this.triangles * 3 * 4 * 4 + 80 + 4; - const arrayBuffer = new ArrayBuffer(bufferLength); - this.output = new DataView(arrayBuffer); - this.output.setUint32(this.offset, this.triangles, true); - this.offset += 4; - } else { - this.output = ""; - this.output += "solid exported\n"; - } - for (let i = 0, il = this.objects.length; i < il; i++) { - const object = this.objects[i].object3d; - const geometry = this.objects[i].geometry; - const index = geometry.index; - const positionAttribute = geometry.getAttribute("position"); - if (index !== null) for (let j = 0; j < index.count; j += 3) { - const a = index.getX(j + 0); - const b = index.getX(j + 1); - const c = index.getX(j + 2); - this.writeFace(a, b, c, positionAttribute, object); - } - else for (let j = 0; j < positionAttribute.count; j += 3) { - const a = j + 0; - const b = j + 1; - const c = j + 2; - this.writeFace(a, b, c, positionAttribute, object); - } - } - if (!this.binary) this.output += "endsolid exported\n"; - return this.output; - } - writeFace(a, b, c, positionAttribute, object) { - this.vA.fromBufferAttribute(positionAttribute, a); - this.vB.fromBufferAttribute(positionAttribute, b); - this.vC.fromBufferAttribute(positionAttribute, c); - if (object.isSkinnedMesh) { - const mesh = object; - if ("applyBoneTransform" in mesh) { - mesh.applyBoneTransform(a, this.vA); - mesh.applyBoneTransform(b, this.vB); - mesh.applyBoneTransform(c, this.vC); - } else { - mesh.boneTransform(a, this.vA); - mesh.boneTransform(b, this.vB); - mesh.boneTransform(c, this.vC); - } - } - this.vA.applyMatrix4(object.matrixWorld); - this.vB.applyMatrix4(object.matrixWorld); - this.vC.applyMatrix4(object.matrixWorld); - this.writeNormal(this.vA, this.vB, this.vC); - this.writeVertex(this.vA); - this.writeVertex(this.vB); - this.writeVertex(this.vC); - if (this.binary && this.output instanceof DataView) { - this.output.setUint16(this.offset, 0, true); - this.offset += 2; - } else { - this.output += " endloop\n"; - this.output += " endfacet\n"; - } - } - writeNormal(vA, vB, vC) { - this.cb.subVectors(vC, vB); - this.ab.subVectors(vA, vB); - this.cb.cross(this.ab).normalize(); - this.normal.copy(this.cb).normalize(); - if (this.binary && this.output instanceof DataView) { - this.output.setFloat32(this.offset, this.normal.x, true); - this.offset += 4; - this.output.setFloat32(this.offset, this.normal.y, true); - this.offset += 4; - this.output.setFloat32(this.offset, this.normal.z, true); - this.offset += 4; - } else { - this.output += ` facet normal ${this.normal.x} ${this.normal.y} ${this.normal.z} -`; - this.output += " outer loop\n"; - } - } - writeVertex(vertex) { - if (this.binary && this.output instanceof DataView) { - this.output.setFloat32(this.offset, vertex.x, true); - this.offset += 4; - this.output.setFloat32(this.offset, vertex.y, true); - this.offset += 4; - this.output.setFloat32(this.offset, vertex.z, true); - this.offset += 4; - } else this.output += ` vertex ${vertex.x} ${vertex.y} ${vertex.z} -`; - } -}; -//#endregion -//#region node_modules/three-stdlib/exporters/OBJExporter.js -var __defProp$48 = Object.defineProperty; -var __defNormalProp$48 = (obj, key, value) => key in obj ? __defProp$48(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$48 = (obj, key, value) => { - __defNormalProp$48(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var OBJExporter = class { - constructor() { - __publicField$48(this, "output"); - __publicField$48(this, "indexVertex"); - __publicField$48(this, "indexVertexUvs"); - __publicField$48(this, "indexNormals"); - __publicField$48(this, "vertex"); - __publicField$48(this, "color"); - __publicField$48(this, "normal"); - __publicField$48(this, "uv"); - __publicField$48(this, "face"); - this.output = ""; - this.indexVertex = 0; - this.indexVertexUvs = 0; - this.indexNormals = 0; - this.vertex = new Vector3(); - this.color = new Color(); - this.normal = new Vector3(); - this.uv = new Vector2(); - this.face = []; - } - parse(object) { - object.traverse((child) => { - if (child instanceof Mesh && child.isMesh) this.parseMesh(child); - if (child instanceof Line && child.isLine) this.parseLine(child); - if (child instanceof Points && child.isPoints) this.parsePoints(child); - }); - return this.output; - } - parseMesh(mesh) { - let nbVertex = 0; - let nbNormals = 0; - let nbVertexUvs = 0; - const geometry = mesh.geometry; - const normalMatrixWorld = new Matrix3(); - if (!geometry.isBufferGeometry) throw new Error("THREE.OBJExporter: Geometry is not of type THREE.BufferGeometry."); - const vertices = geometry.getAttribute("position"); - const normals = geometry.getAttribute("normal"); - const uvs = geometry.getAttribute("uv"); - const indices = geometry.getIndex(); - this.output += `o ${mesh.name} -`; - if (mesh.material && !Array.isArray(mesh.material) && mesh.material.name) this.output += `usemtl ${mesh.material.name} -`; - if (vertices !== void 0) for (let i = 0, l = vertices.count; i < l; i++, nbVertex++) { - this.vertex.x = vertices.getX(i); - this.vertex.y = vertices.getY(i); - this.vertex.z = vertices.getZ(i); - this.vertex.applyMatrix4(mesh.matrixWorld); - this.output += `v ${this.vertex.x} ${this.vertex.y} ${this.vertex.z} -`; - } - if (uvs !== void 0) for (let i = 0, l = uvs.count; i < l; i++, nbVertexUvs++) { - this.uv.x = uvs.getX(i); - this.uv.y = uvs.getY(i); - this.output += `vt ${this.uv.x} ${this.uv.y} -`; - } - if (normals !== void 0) { - normalMatrixWorld.getNormalMatrix(mesh.matrixWorld); - for (let i = 0, l = normals.count; i < l; i++, nbNormals++) { - this.normal.x = normals.getX(i); - this.normal.y = normals.getY(i); - this.normal.z = normals.getZ(i); - this.normal.applyMatrix3(normalMatrixWorld).normalize(); - this.output += `vn ${this.normal.x} ${this.normal.y} ${this.normal.z} -`; - } - } - if (indices !== null) for (let i = 0, l = indices.count; i < l; i += 3) { - for (let m = 0; m < 3; m++) { - const j = indices.getX(i + m) + 1; - this.face[m] = this.indexVertex + j + (normals || uvs ? `/${uvs ? this.indexVertexUvs + j : ""}${normals ? `/${this.indexNormals + j}` : ""}` : ""); - } - this.output += `f ${this.face.join(" ")} -`; - } - else for (let i = 0, l = vertices.count; i < l; i += 3) { - for (let m = 0; m < 3; m++) { - const j = i + m + 1; - this.face[m] = this.indexVertex + j + (normals || uvs ? `/${uvs ? this.indexVertexUvs + j : ""}${normals ? `/${this.indexNormals + j}` : ""}` : ""); - } - this.output += `f ${this.face.join(" ")} -`; - } - this.indexVertex += nbVertex; - this.indexVertexUvs += nbVertexUvs; - this.indexNormals += nbNormals; - } - parseLine(line) { - let nbVertex = 0; - const geometry = line.geometry; - const type = line.type; - if (geometry.isBufferGeometry) throw new Error("THREE.OBJExporter: Geometry is not of type THREE.BufferGeometry."); - const vertices = geometry.getAttribute("position"); - this.output += `o ${line.name} -`; - if (vertices !== void 0) for (let i = 0, l = vertices.count; i < l; i++, nbVertex++) { - this.vertex.x = vertices.getX(i); - this.vertex.y = vertices.getY(i); - this.vertex.z = vertices.getZ(i); - this.vertex.applyMatrix4(line.matrixWorld); - this.output += `v ${this.vertex.x} ${this.vertex.y} ${this.vertex.z} -`; - } - if (type === "Line") { - this.output += "l "; - for (let j = 1, l = vertices.count; j <= l; j++) this.output += `${this.indexVertex + j} `; - this.output += "\n"; - } - if (type === "LineSegments") for (let j = 1, k = j + 1, l = vertices.count; j < l; j += 2, k = j + 1) this.output += `l ${this.indexVertex + j} ${this.indexVertex + k} -`; - this.indexVertex += nbVertex; - } - parsePoints(points) { - let nbVertex = 0; - const geometry = points.geometry; - if (!geometry.isBufferGeometry) throw new Error("THREE.OBJExporter: Geometry is not of type THREE.BufferGeometry."); - const vertices = geometry.getAttribute("position"); - const colors = geometry.getAttribute("color"); - this.output += `o ${points.name} -`; - if (vertices !== void 0) for (let i = 0, l = vertices.count; i < l; i++, nbVertex++) { - this.vertex.fromBufferAttribute(vertices, i); - this.vertex.applyMatrix4(points.matrixWorld); - this.output += `v ${this.vertex.x} ${this.vertex.y} ${this.vertex.z}`; - if (colors !== void 0 && colors instanceof BufferAttribute) { - this.color.fromBufferAttribute(colors, i); - this.output += ` ${this.color.r} ${this.color.g} ${this.color.b}`; - } - this.output += "\n"; - } - this.output += "p "; - for (let j = 1, l = vertices.count; j <= l; j++) this.output += `${this.indexVertex + j} `; - this.output += "\n"; - this.indexVertex += nbVertex; - } -}; -//#endregion -//#region node_modules/three-stdlib/environments/RoomEnvironment.js -function RoomEnvironment() { - const scene = new Scene(); - const geometry = new BoxGeometry(); - geometry.deleteAttribute("uv"); - const roomMaterial = new MeshStandardMaterial({ side: 1 }); - const boxMaterial = new MeshStandardMaterial(); - const mainLight = new PointLight(16777215, 5, 28, 2); - mainLight.position.set(.418, 16.199, .3); - scene.add(mainLight); - const room = new Mesh(geometry, roomMaterial); - room.position.set(-.757, 13.219, .717); - room.scale.set(31.713, 28.305, 28.591); - scene.add(room); - const box1 = new Mesh(geometry, boxMaterial); - box1.position.set(-10.906, 2.009, 1.846); - box1.rotation.set(0, -.195, 0); - box1.scale.set(2.328, 7.905, 4.651); - scene.add(box1); - const box2 = new Mesh(geometry, boxMaterial); - box2.position.set(-5.607, -.754, -.758); - box2.rotation.set(0, .994, 0); - box2.scale.set(1.97, 1.534, 3.955); - scene.add(box2); - const box3 = new Mesh(geometry, boxMaterial); - box3.position.set(6.167, .857, 7.803); - box3.rotation.set(0, .561, 0); - box3.scale.set(3.927, 6.285, 3.687); - scene.add(box3); - const box4 = new Mesh(geometry, boxMaterial); - box4.position.set(-2.017, .018, 6.124); - box4.rotation.set(0, .333, 0); - box4.scale.set(2.002, 4.566, 2.064); - scene.add(box4); - const box5 = new Mesh(geometry, boxMaterial); - box5.position.set(2.291, -.756, -2.621); - box5.rotation.set(0, -.286, 0); - box5.scale.set(1.546, 1.552, 1.496); - scene.add(box5); - const box6 = new Mesh(geometry, boxMaterial); - box6.position.set(-2.193, -.369, -5.547); - box6.rotation.set(0, .516, 0); - box6.scale.set(3.875, 3.487, 2.986); - scene.add(box6); - const light1 = new Mesh(geometry, createAreaLightMaterial(50)); - light1.position.set(-16.116, 14.37, 8.208); - light1.scale.set(.1, 2.428, 2.739); - scene.add(light1); - const light2 = new Mesh(geometry, createAreaLightMaterial(50)); - light2.position.set(-16.109, 18.021, -8.207); - light2.scale.set(.1, 2.425, 2.751); - scene.add(light2); - const light3 = new Mesh(geometry, createAreaLightMaterial(17)); - light3.position.set(14.904, 12.198, -1.832); - light3.scale.set(.15, 4.265, 6.331); - scene.add(light3); - const light4 = new Mesh(geometry, createAreaLightMaterial(43)); - light4.position.set(-.462, 8.89, 14.52); - light4.scale.set(4.38, 5.441, .088); - scene.add(light4); - const light5 = new Mesh(geometry, createAreaLightMaterial(20)); - light5.position.set(3.235, 11.486, -12.541); - light5.scale.set(2.5, 2, .1); - scene.add(light5); - const light6 = new Mesh(geometry, createAreaLightMaterial(100)); - light6.position.set(0, 20, 0); - light6.scale.set(1, .1, 1); - scene.add(light6); - function createAreaLightMaterial(intensity) { - const material = new MeshBasicMaterial(); - material.color.setScalar(intensity); - return material; - } - return scene; -} -//#endregion -//#region node_modules/three-stdlib/animation/AnimationClipCreator.js -var AnimationClipCreator = { - CreateRotationAnimation(period, axis = "x") { - const times = [0, period]; - return new AnimationClip(null, period, [new NumberKeyframeTrack(".rotation[" + axis + "]", times, [0, 360])]); - }, - CreateScaleAxisAnimation(period, axis = "x") { - const times = [0, period]; - return new AnimationClip(null, period, [new NumberKeyframeTrack(".scale[" + axis + "]", times, [0, 1])]); - }, - CreateShakeAnimation(duration, shakeScale) { - const times = [], values = [], tmp = new Vector3(); - for (let i = 0; i < duration * 10; i++) { - times.push(i / 10); - tmp.set(Math.random() * 2 - 1, Math.random() * 2 - 1, Math.random() * 2 - 1).multiply(shakeScale).toArray(values, values.length); - } - return new AnimationClip(null, duration, [new VectorKeyframeTrack(".position", times, values)]); - }, - CreatePulsationAnimation(duration, pulseScale) { - const times = [], values = [], tmp = new Vector3(); - for (let i = 0; i < duration * 10; i++) { - times.push(i / 10); - const scaleFactor = Math.random() * pulseScale; - tmp.set(scaleFactor, scaleFactor, scaleFactor).toArray(values, values.length); - } - return new AnimationClip(null, duration, [new VectorKeyframeTrack(".scale", times, values)]); - }, - CreateVisibilityAnimation(duration) { - return new AnimationClip(null, duration, [new BooleanKeyframeTrack(".visible", [ - 0, - duration / 2, - duration - ], [ - true, - false, - true - ])]); - }, - CreateMaterialColorAnimation(duration, colors) { - const times = [], values = [], timeStep = duration / colors.length; - for (let i = 0; i < colors.length; i++) { - times.push(i * timeStep); - const color = colors[i]; - values.push(color.r, color.g, color.b); - } - return new AnimationClip(null, duration, [new ColorKeyframeTrack(".material.color", times, values)]); - } -}; -//#endregion -//#region node_modules/three-stdlib/animation/CCDIKSolver.js -var _q$2 = /* @__PURE__ */ new Quaternion(); -var _targetPos = /* @__PURE__ */ new Vector3(); -var _targetVec = /* @__PURE__ */ new Vector3(); -var _effectorPos = /* @__PURE__ */ new Vector3(); -var _effectorVec = /* @__PURE__ */ new Vector3(); -var _linkPos = /* @__PURE__ */ new Vector3(); -var _invLinkQ = /* @__PURE__ */ new Quaternion(); -var _linkScale = /* @__PURE__ */ new Vector3(); -var _axis = /* @__PURE__ */ new Vector3(); -var _vector$3 = /* @__PURE__ */ new Vector3(); -var _matrix$1 = /* @__PURE__ */ new Matrix4(); -var CCDIKSolver = class { - /** - * @param {THREE.SkinnedMesh} mesh - * @param {Array<Object>} iks - */ - constructor(mesh, iks = []) { - this.mesh = mesh; - this.iks = iks; - this._valid(); - } - /** - * Update all IK bones. - * - * @return {CCDIKSolver} - */ - update() { - const iks = this.iks; - for (let i = 0, il = iks.length; i < il; i++) this.updateOne(iks[i]); - return this; - } - /** - * Update one IK bone - * - * @param {Object} ik parameter - * @return {CCDIKSolver} - */ - updateOne(ik) { - const bones = this.mesh.skeleton.bones; - const math = Math; - const effector = bones[ik.effector]; - const target = bones[ik.target]; - _targetPos.setFromMatrixPosition(target.matrixWorld); - const links = ik.links; - const iteration = ik.iteration !== void 0 ? ik.iteration : 1; - for (let i = 0; i < iteration; i++) { - let rotated = false; - for (let j = 0, jl = links.length; j < jl; j++) { - const link = bones[links[j].index]; - if (links[j].enabled === false) break; - const limitation = links[j].limitation; - const rotationMin = links[j].rotationMin; - const rotationMax = links[j].rotationMax; - link.matrixWorld.decompose(_linkPos, _invLinkQ, _linkScale); - _invLinkQ.invert(); - _effectorPos.setFromMatrixPosition(effector.matrixWorld); - _effectorVec.subVectors(_effectorPos, _linkPos); - _effectorVec.applyQuaternion(_invLinkQ); - _effectorVec.normalize(); - _targetVec.subVectors(_targetPos, _linkPos); - _targetVec.applyQuaternion(_invLinkQ); - _targetVec.normalize(); - let angle = _targetVec.dot(_effectorVec); - if (angle > 1) angle = 1; - else if (angle < -1) angle = -1; - angle = math.acos(angle); - if (angle < 1e-5) continue; - if (ik.minAngle !== void 0 && angle < ik.minAngle) angle = ik.minAngle; - if (ik.maxAngle !== void 0 && angle > ik.maxAngle) angle = ik.maxAngle; - _axis.crossVectors(_effectorVec, _targetVec); - _axis.normalize(); - _q$2.setFromAxisAngle(_axis, angle); - link.quaternion.multiply(_q$2); - if (limitation !== void 0) { - let c = link.quaternion.w; - if (c > 1) c = 1; - const c2 = math.sqrt(1 - c * c); - link.quaternion.set(limitation.x * c2, limitation.y * c2, limitation.z * c2, c); - } - if (rotationMin !== void 0) link.rotation.setFromVector3(_vector$3.setFromEuler(link.rotation).max(rotationMin)); - if (rotationMax !== void 0) link.rotation.setFromVector3(_vector$3.setFromEuler(link.rotation).min(rotationMax)); - link.updateMatrixWorld(true); - rotated = true; - } - if (!rotated) break; - } - return this; - } - /** - * Creates Helper - * - * @return {CCDIKHelper} - */ - createHelper() { - return new CCDIKHelper(this.mesh, this.iks); - } - _valid() { - const iks = this.iks; - const bones = this.mesh.skeleton.bones; - for (let i = 0, il = iks.length; i < il; i++) { - const ik = iks[i]; - const effector = bones[ik.effector]; - const links = ik.links; - let link0, link1; - link0 = effector; - for (let j = 0, jl = links.length; j < jl; j++) { - link1 = bones[links[j].index]; - if (link0.parent !== link1) console.warn("THREE.CCDIKSolver: bone " + link0.name + " is not the child of bone " + link1.name); - link0 = link1; - } - } - } -}; -function getPosition(bone, matrixWorldInv) { - return _vector$3.setFromMatrixPosition(bone.matrixWorld).applyMatrix4(matrixWorldInv); -} -function setPositionOfBoneToAttributeArray(array, index, bone, matrixWorldInv) { - const v = getPosition(bone, matrixWorldInv); - array[index * 3 + 0] = v.x; - array[index * 3 + 1] = v.y; - array[index * 3 + 2] = v.z; -} -var CCDIKHelper = class extends Object3D { - constructor(mesh, iks = [], sphereSize = .25) { - super(); - this.root = mesh; - this.iks = iks; - this.matrix.copy(mesh.matrixWorld); - this.matrixAutoUpdate = false; - this.sphereGeometry = new SphereGeometry(sphereSize, 16, 8); - this.targetSphereMaterial = new MeshBasicMaterial({ - color: new Color(16746632), - depthTest: false, - depthWrite: false, - transparent: true - }); - this.effectorSphereMaterial = new MeshBasicMaterial({ - color: new Color(8978312), - depthTest: false, - depthWrite: false, - transparent: true - }); - this.linkSphereMaterial = new MeshBasicMaterial({ - color: new Color(8947967), - depthTest: false, - depthWrite: false, - transparent: true - }); - this.lineMaterial = new LineBasicMaterial({ - color: new Color(16711680), - depthTest: false, - depthWrite: false, - transparent: true - }); - this._init(); - } - /** - * Updates IK bones visualization. - */ - updateMatrixWorld(force) { - const mesh = this.root; - if (this.visible) { - let offset = 0; - const iks = this.iks; - const bones = mesh.skeleton.bones; - _matrix$1.copy(mesh.matrixWorld).invert(); - for (let i = 0, il = iks.length; i < il; i++) { - const ik = iks[i]; - const targetBone = bones[ik.target]; - const effectorBone = bones[ik.effector]; - const targetMesh = this.children[offset++]; - const effectorMesh = this.children[offset++]; - targetMesh.position.copy(getPosition(targetBone, _matrix$1)); - effectorMesh.position.copy(getPosition(effectorBone, _matrix$1)); - for (let j = 0, jl = ik.links.length; j < jl; j++) { - const linkBone = bones[ik.links[j].index]; - this.children[offset++].position.copy(getPosition(linkBone, _matrix$1)); - } - const line = this.children[offset++]; - const array = line.geometry.attributes.position.array; - setPositionOfBoneToAttributeArray(array, 0, targetBone, _matrix$1); - setPositionOfBoneToAttributeArray(array, 1, effectorBone, _matrix$1); - for (let j = 0, jl = ik.links.length; j < jl; j++) { - const linkBone = bones[ik.links[j].index]; - setPositionOfBoneToAttributeArray(array, j + 2, linkBone, _matrix$1); - } - line.geometry.attributes.position.needsUpdate = true; - } - } - this.matrix.copy(mesh.matrixWorld); - super.updateMatrixWorld(force); - } - /** - * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app. - */ - dispose() { - this.sphereGeometry.dispose(); - this.targetSphereMaterial.dispose(); - this.effectorSphereMaterial.dispose(); - this.linkSphereMaterial.dispose(); - this.lineMaterial.dispose(); - const children = this.children; - for (let i = 0; i < children.length; i++) { - const child = children[i]; - if (child.isLine) child.geometry.dispose(); - } - } - _init() { - const scope = this; - const iks = this.iks; - function createLineGeometry(ik) { - const geometry = new BufferGeometry(); - const vertices = new Float32Array((2 + ik.links.length) * 3); - geometry.setAttribute("position", new BufferAttribute(vertices, 3)); - return geometry; - } - function createTargetMesh() { - return new Mesh(scope.sphereGeometry, scope.targetSphereMaterial); - } - function createEffectorMesh() { - return new Mesh(scope.sphereGeometry, scope.effectorSphereMaterial); - } - function createLinkMesh() { - return new Mesh(scope.sphereGeometry, scope.linkSphereMaterial); - } - function createLine(ik) { - return new Line(createLineGeometry(ik), scope.lineMaterial); - } - for (let i = 0, il = iks.length; i < il; i++) { - const ik = iks[i]; - this.add(createTargetMesh()); - this.add(createEffectorMesh()); - for (let j = 0, jl = ik.links.length; j < jl; j++) this.add(createLinkMesh()); - this.add(createLine(ik)); - } - } -}; -//#endregion -//#region node_modules/three-stdlib/_polyfill/CapsuleGeometry.js -var CapsuleGeometry = /* @__PURE__ */ (() => { - class CapsuleGeometry2 extends LatheGeometry { - constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) { - const path = new Path(); - path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0); - path.absarc(0, length / 2, radius, 0, Math.PI * .5); - super(path.getPoints(capSegments), radialSegments); - this.type = "CapsuleGeometry"; - this.parameters = { - radius, - height: length, - capSegments, - radialSegments - }; - } - static fromJSON(data) { - return new CapsuleGeometry2(data.radius, data.length, data.capSegments, data.radialSegments); - } - } - return CapsuleGeometry2; -})(); -//#endregion -//#region node_modules/three-stdlib/animation/MMDPhysics.js -var MMDPhysics = class { - /** - * @param {THREE.SkinnedMesh} mesh - * @param {Array<Object>} rigidBodyParams - * @param {Array<Object>} (optional) constraintParams - * @param {Object} params - (optional) - * @param {Number} params.unitStep - Default is 1 / 65. - * @param {Integer} params.maxStepNum - Default is 3. - * @param {Vector3} params.gravity - Default is ( 0, - 9.8 * 10, 0 ) - */ - constructor(mesh, rigidBodyParams, constraintParams = [], params = {}) { - if (typeof Ammo === "undefined") throw new Error("THREE.MMDPhysics: Import ammo.js https://github.com/kripken/ammo.js"); - this.manager = new ResourceManager(); - this.mesh = mesh; - this.unitStep = params.unitStep !== void 0 ? params.unitStep : 1 / 65; - this.maxStepNum = params.maxStepNum !== void 0 ? params.maxStepNum : 3; - this.gravity = new Vector3(0, -9.8 * 10, 0); - if (params.gravity !== void 0) this.gravity.copy(params.gravity); - this.world = params.world !== void 0 ? params.world : null; - this.bodies = []; - this.constraints = []; - this._init(mesh, rigidBodyParams, constraintParams); - } - /** - * Advances Physics calculation and updates bones. - * - * @param {Number} delta - time in second - * @return {MMDPhysics} - */ - update(delta) { - const manager = this.manager; - const mesh = this.mesh; - let isNonDefaultScale = false; - const position = manager.allocThreeVector3(); - const quaternion = manager.allocThreeQuaternion(); - const scale = manager.allocThreeVector3(); - mesh.matrixWorld.decompose(position, quaternion, scale); - if (scale.x !== 1 || scale.y !== 1 || scale.z !== 1) isNonDefaultScale = true; - let parent; - if (isNonDefaultScale) { - parent = mesh.parent; - if (parent !== null) mesh.parent = null; - scale.copy(this.mesh.scale); - mesh.scale.set(1, 1, 1); - mesh.updateMatrixWorld(true); - } - this._updateRigidBodies(); - this._stepSimulation(delta); - this._updateBones(); - if (isNonDefaultScale) { - if (parent !== null) mesh.parent = parent; - mesh.scale.copy(scale); - } - manager.freeThreeVector3(scale); - manager.freeThreeQuaternion(quaternion); - manager.freeThreeVector3(position); - return this; - } - /** - * Resets rigid bodies transorm to current bone's. - * - * @return {MMDPhysics} - */ - reset() { - for (let i = 0, il = this.bodies.length; i < il; i++) this.bodies[i].reset(); - return this; - } - /** - * Warm ups Rigid bodies. Calculates cycles steps. - * - * @param {Integer} cycles - * @return {MMDPhysics} - */ - warmup(cycles) { - for (let i = 0; i < cycles; i++) this.update(1 / 60); - return this; - } - /** - * Sets gravity. - * - * @param {Vector3} gravity - * @return {MMDPhysicsHelper} - */ - setGravity(gravity) { - this.world.setGravity(new Ammo.btVector3(gravity.x, gravity.y, gravity.z)); - this.gravity.copy(gravity); - return this; - } - /** - * Creates MMDPhysicsHelper - * - * @return {MMDPhysicsHelper} - */ - createHelper() { - return new MMDPhysicsHelper(this.mesh, this); - } - _init(mesh, rigidBodyParams, constraintParams) { - const manager = this.manager; - const parent = mesh.parent; - if (parent !== null) mesh.parent = null; - const currentPosition = manager.allocThreeVector3(); - const currentQuaternion = manager.allocThreeQuaternion(); - const currentScale = manager.allocThreeVector3(); - currentPosition.copy(mesh.position); - currentQuaternion.copy(mesh.quaternion); - currentScale.copy(mesh.scale); - mesh.position.set(0, 0, 0); - mesh.quaternion.set(0, 0, 0, 1); - mesh.scale.set(1, 1, 1); - mesh.updateMatrixWorld(true); - if (this.world === null) { - this.world = this._createWorld(); - this.setGravity(this.gravity); - } - this._initRigidBodies(rigidBodyParams); - this._initConstraints(constraintParams); - if (parent !== null) mesh.parent = parent; - mesh.position.copy(currentPosition); - mesh.quaternion.copy(currentQuaternion); - mesh.scale.copy(currentScale); - mesh.updateMatrixWorld(true); - this.reset(); - manager.freeThreeVector3(currentPosition); - manager.freeThreeQuaternion(currentQuaternion); - manager.freeThreeVector3(currentScale); - } - _createWorld() { - const config = new Ammo.btDefaultCollisionConfiguration(); - const dispatcher = new Ammo.btCollisionDispatcher(config); - const cache = new Ammo.btDbvtBroadphase(); - const solver = new Ammo.btSequentialImpulseConstraintSolver(); - return new Ammo.btDiscreteDynamicsWorld(dispatcher, cache, solver, config); - } - _initRigidBodies(rigidBodies) { - for (let i = 0, il = rigidBodies.length; i < il; i++) this.bodies.push(new RigidBody(this.mesh, this.world, rigidBodies[i], this.manager)); - } - _initConstraints(constraints) { - for (let i = 0, il = constraints.length; i < il; i++) { - const params = constraints[i]; - const bodyA = this.bodies[params.rigidBodyIndex1]; - const bodyB = this.bodies[params.rigidBodyIndex2]; - this.constraints.push(new Constraint(this.mesh, this.world, bodyA, bodyB, params, this.manager)); - } - } - _stepSimulation(delta) { - const unitStep = this.unitStep; - let stepTime = delta; - let maxStepNum = (delta / unitStep | 0) + 1; - if (stepTime < unitStep) { - stepTime = unitStep; - maxStepNum = 1; - } - if (maxStepNum > this.maxStepNum) maxStepNum = this.maxStepNum; - this.world.stepSimulation(stepTime, maxStepNum, unitStep); - } - _updateRigidBodies() { - for (let i = 0, il = this.bodies.length; i < il; i++) this.bodies[i].updateFromBone(); - } - _updateBones() { - for (let i = 0, il = this.bodies.length; i < il; i++) this.bodies[i].updateBone(); - } -}; -var ResourceManager = class { - constructor() { - this.threeVector3s = []; - this.threeMatrix4s = []; - this.threeQuaternions = []; - this.threeEulers = []; - this.transforms = []; - this.quaternions = []; - this.vector3s = []; - } - allocThreeVector3() { - return this.threeVector3s.length > 0 ? this.threeVector3s.pop() : new Vector3(); - } - freeThreeVector3(v) { - this.threeVector3s.push(v); - } - allocThreeMatrix4() { - return this.threeMatrix4s.length > 0 ? this.threeMatrix4s.pop() : new Matrix4(); - } - freeThreeMatrix4(m) { - this.threeMatrix4s.push(m); - } - allocThreeQuaternion() { - return this.threeQuaternions.length > 0 ? this.threeQuaternions.pop() : new Quaternion(); - } - freeThreeQuaternion(q) { - this.threeQuaternions.push(q); - } - allocThreeEuler() { - return this.threeEulers.length > 0 ? this.threeEulers.pop() : new Euler(); - } - freeThreeEuler(e) { - this.threeEulers.push(e); - } - allocTransform() { - return this.transforms.length > 0 ? this.transforms.pop() : new Ammo.btTransform(); - } - freeTransform(t) { - this.transforms.push(t); - } - allocQuaternion() { - return this.quaternions.length > 0 ? this.quaternions.pop() : new Ammo.btQuaternion(); - } - freeQuaternion(q) { - this.quaternions.push(q); - } - allocVector3() { - return this.vector3s.length > 0 ? this.vector3s.pop() : new Ammo.btVector3(); - } - freeVector3(v) { - this.vector3s.push(v); - } - setIdentity(t) { - t.setIdentity(); - } - getBasis(t) { - var q = this.allocQuaternion(); - t.getBasis().getRotation(q); - return q; - } - getBasisAsMatrix3(t) { - var q = this.getBasis(t); - var m = this.quaternionToMatrix3(q); - this.freeQuaternion(q); - return m; - } - getOrigin(t) { - return t.getOrigin(); - } - setOrigin(t, v) { - t.getOrigin().setValue(v.x(), v.y(), v.z()); - } - copyOrigin(t1, t2) { - var o = t2.getOrigin(); - this.setOrigin(t1, o); - } - setBasis(t, q) { - t.setRotation(q); - } - setBasisFromMatrix3(t, m) { - var q = this.matrix3ToQuaternion(m); - this.setBasis(t, q); - this.freeQuaternion(q); - } - setOriginFromArray3(t, a) { - t.getOrigin().setValue(a[0], a[1], a[2]); - } - setOriginFromThreeVector3(t, v) { - t.getOrigin().setValue(v.x, v.y, v.z); - } - setBasisFromArray3(t, a) { - var thQ = this.allocThreeQuaternion(); - var thE = this.allocThreeEuler(); - thE.set(a[0], a[1], a[2]); - this.setBasisFromThreeQuaternion(t, thQ.setFromEuler(thE)); - this.freeThreeEuler(thE); - this.freeThreeQuaternion(thQ); - } - setBasisFromThreeQuaternion(t, a) { - var q = this.allocQuaternion(); - q.setX(a.x); - q.setY(a.y); - q.setZ(a.z); - q.setW(a.w); - this.setBasis(t, q); - this.freeQuaternion(q); - } - multiplyTransforms(t1, t2) { - var t = this.allocTransform(); - this.setIdentity(t); - var m1 = this.getBasisAsMatrix3(t1); - var m2 = this.getBasisAsMatrix3(t2); - var o1 = this.getOrigin(t1); - var o2 = this.getOrigin(t2); - var v1 = this.multiplyMatrix3ByVector3(m1, o2); - var v2 = this.addVector3(v1, o1); - this.setOrigin(t, v2); - var m3 = this.multiplyMatrices3(m1, m2); - this.setBasisFromMatrix3(t, m3); - this.freeVector3(v1); - this.freeVector3(v2); - return t; - } - inverseTransform(t) { - var t2 = this.allocTransform(); - var m1 = this.getBasisAsMatrix3(t); - var o = this.getOrigin(t); - var m2 = this.transposeMatrix3(m1); - var v1 = this.negativeVector3(o); - var v2 = this.multiplyMatrix3ByVector3(m2, v1); - this.setOrigin(t2, v2); - this.setBasisFromMatrix3(t2, m2); - this.freeVector3(v1); - this.freeVector3(v2); - return t2; - } - multiplyMatrices3(m1, m2) { - var m3 = []; - var v10 = this.rowOfMatrix3(m1, 0); - var v11 = this.rowOfMatrix3(m1, 1); - var v12 = this.rowOfMatrix3(m1, 2); - var v20 = this.columnOfMatrix3(m2, 0); - var v21 = this.columnOfMatrix3(m2, 1); - var v22 = this.columnOfMatrix3(m2, 2); - m3[0] = this.dotVectors3(v10, v20); - m3[1] = this.dotVectors3(v10, v21); - m3[2] = this.dotVectors3(v10, v22); - m3[3] = this.dotVectors3(v11, v20); - m3[4] = this.dotVectors3(v11, v21); - m3[5] = this.dotVectors3(v11, v22); - m3[6] = this.dotVectors3(v12, v20); - m3[7] = this.dotVectors3(v12, v21); - m3[8] = this.dotVectors3(v12, v22); - this.freeVector3(v10); - this.freeVector3(v11); - this.freeVector3(v12); - this.freeVector3(v20); - this.freeVector3(v21); - this.freeVector3(v22); - return m3; - } - addVector3(v1, v2) { - var v = this.allocVector3(); - v.setValue(v1.x() + v2.x(), v1.y() + v2.y(), v1.z() + v2.z()); - return v; - } - dotVectors3(v1, v2) { - return v1.x() * v2.x() + v1.y() * v2.y() + v1.z() * v2.z(); - } - rowOfMatrix3(m, i) { - var v = this.allocVector3(); - v.setValue(m[i * 3 + 0], m[i * 3 + 1], m[i * 3 + 2]); - return v; - } - columnOfMatrix3(m, i) { - var v = this.allocVector3(); - v.setValue(m[i + 0], m[i + 3], m[i + 6]); - return v; - } - negativeVector3(v) { - var v2 = this.allocVector3(); - v2.setValue(-v.x(), -v.y(), -v.z()); - return v2; - } - multiplyMatrix3ByVector3(m, v) { - var v4 = this.allocVector3(); - var v0 = this.rowOfMatrix3(m, 0); - var v1 = this.rowOfMatrix3(m, 1); - var v2 = this.rowOfMatrix3(m, 2); - var x = this.dotVectors3(v0, v); - var y = this.dotVectors3(v1, v); - var z = this.dotVectors3(v2, v); - v4.setValue(x, y, z); - this.freeVector3(v0); - this.freeVector3(v1); - this.freeVector3(v2); - return v4; - } - transposeMatrix3(m) { - var m2 = []; - m2[0] = m[0]; - m2[1] = m[3]; - m2[2] = m[6]; - m2[3] = m[1]; - m2[4] = m[4]; - m2[5] = m[7]; - m2[6] = m[2]; - m2[7] = m[5]; - m2[8] = m[8]; - return m2; - } - quaternionToMatrix3(q) { - var m = []; - var x = q.x(); - var y = q.y(); - var z = q.z(); - var w = q.w(); - var xx = x * x; - var yy = y * y; - var zz = z * z; - var xy = x * y; - var yz = y * z; - var zx = z * x; - var xw = x * w; - var yw = y * w; - var zw = z * w; - m[0] = 1 - 2 * (yy + zz); - m[1] = 2 * (xy - zw); - m[2] = 2 * (zx + yw); - m[3] = 2 * (xy + zw); - m[4] = 1 - 2 * (zz + xx); - m[5] = 2 * (yz - xw); - m[6] = 2 * (zx - yw); - m[7] = 2 * (yz + xw); - m[8] = 1 - 2 * (xx + yy); - return m; - } - matrix3ToQuaternion(m) { - var t = m[0] + m[4] + m[8]; - var s, x, y, z, w; - if (t > 0) { - s = Math.sqrt(t + 1) * 2; - w = .25 * s; - x = (m[7] - m[5]) / s; - y = (m[2] - m[6]) / s; - z = (m[3] - m[1]) / s; - } else if (m[0] > m[4] && m[0] > m[8]) { - s = Math.sqrt(1 + m[0] - m[4] - m[8]) * 2; - w = (m[7] - m[5]) / s; - x = .25 * s; - y = (m[1] + m[3]) / s; - z = (m[2] + m[6]) / s; - } else if (m[4] > m[8]) { - s = Math.sqrt(1 + m[4] - m[0] - m[8]) * 2; - w = (m[2] - m[6]) / s; - x = (m[1] + m[3]) / s; - y = .25 * s; - z = (m[5] + m[7]) / s; - } else { - s = Math.sqrt(1 + m[8] - m[0] - m[4]) * 2; - w = (m[3] - m[1]) / s; - x = (m[2] + m[6]) / s; - y = (m[5] + m[7]) / s; - z = .25 * s; - } - var q = this.allocQuaternion(); - q.setX(x); - q.setY(y); - q.setZ(z); - q.setW(w); - return q; - } -}; -var RigidBody = class { - constructor(mesh, world, params, manager) { - this.mesh = mesh; - this.world = world; - this.params = params; - this.manager = manager; - this.body = null; - this.bone = null; - this.boneOffsetForm = null; - this.boneOffsetFormInverse = null; - this._init(); - } - /** - * Resets rigid body transform to the current bone's. - * - * @return {RigidBody} - */ - reset() { - this._setTransformFromBone(); - return this; - } - /** - * Updates rigid body's transform from the current bone. - * - * @return {RidigBody} - */ - updateFromBone() { - if (this.params.boneIndex !== -1 && this.params.type === 0) this._setTransformFromBone(); - return this; - } - /** - * Updates bone from the current ridid body's transform. - * - * @return {RidigBody} - */ - updateBone() { - if (this.params.type === 0 || this.params.boneIndex === -1) return this; - this._updateBoneRotation(); - if (this.params.type === 1) this._updateBonePosition(); - this.bone.updateMatrixWorld(true); - if (this.params.type === 2) this._setPositionFromBone(); - return this; - } - _init() { - function generateShape(p) { - switch (p.shapeType) { - case 0: return new Ammo.btSphereShape(p.width); - case 1: return new Ammo.btBoxShape(new Ammo.btVector3(p.width, p.height, p.depth)); - case 2: return new Ammo.btCapsuleShape(p.width, p.height); - default: throw new Error("unknown shape type " + p.shapeType); - } - } - const manager = this.manager; - const params = this.params; - const bones = this.mesh.skeleton.bones; - const bone = params.boneIndex === -1 ? new Bone() : bones[params.boneIndex]; - const shape = generateShape(params); - const weight = params.type === 0 ? 0 : params.weight; - const localInertia = manager.allocVector3(); - localInertia.setValue(0, 0, 0); - if (weight !== 0) shape.calculateLocalInertia(weight, localInertia); - const boneOffsetForm = manager.allocTransform(); - manager.setIdentity(boneOffsetForm); - manager.setOriginFromArray3(boneOffsetForm, params.position); - manager.setBasisFromArray3(boneOffsetForm, params.rotation); - const vector = manager.allocThreeVector3(); - const boneForm = manager.allocTransform(); - manager.setIdentity(boneForm); - manager.setOriginFromThreeVector3(boneForm, bone.getWorldPosition(vector)); - const form = manager.multiplyTransforms(boneForm, boneOffsetForm); - const state = new Ammo.btDefaultMotionState(form); - const info = new Ammo.btRigidBodyConstructionInfo(weight, state, shape, localInertia); - info.set_m_friction(params.friction); - info.set_m_restitution(params.restitution); - const body = new Ammo.btRigidBody(info); - if (params.type === 0) { - body.setCollisionFlags(body.getCollisionFlags() | 2); - body.setActivationState(4); - } - body.setDamping(params.positionDamping, params.rotationDamping); - body.setSleepingThresholds(0, 0); - this.world.addRigidBody(body, 1 << params.groupIndex, params.groupTarget); - this.body = body; - this.bone = bone; - this.boneOffsetForm = boneOffsetForm; - this.boneOffsetFormInverse = manager.inverseTransform(boneOffsetForm); - manager.freeVector3(localInertia); - manager.freeTransform(form); - manager.freeTransform(boneForm); - manager.freeThreeVector3(vector); - } - _getBoneTransform() { - const manager = this.manager; - const p = manager.allocThreeVector3(); - const q = manager.allocThreeQuaternion(); - const s = manager.allocThreeVector3(); - this.bone.matrixWorld.decompose(p, q, s); - const tr = manager.allocTransform(); - manager.setOriginFromThreeVector3(tr, p); - manager.setBasisFromThreeQuaternion(tr, q); - const form = manager.multiplyTransforms(tr, this.boneOffsetForm); - manager.freeTransform(tr); - manager.freeThreeVector3(s); - manager.freeThreeQuaternion(q); - manager.freeThreeVector3(p); - return form; - } - _getWorldTransformForBone() { - const manager = this.manager; - const tr = this.body.getCenterOfMassTransform(); - return manager.multiplyTransforms(tr, this.boneOffsetFormInverse); - } - _setTransformFromBone() { - const manager = this.manager; - const form = this._getBoneTransform(); - this.body.setCenterOfMassTransform(form); - this.body.getMotionState().setWorldTransform(form); - manager.freeTransform(form); - } - _setPositionFromBone() { - const manager = this.manager; - const form = this._getBoneTransform(); - const tr = manager.allocTransform(); - this.body.getMotionState().getWorldTransform(tr); - manager.copyOrigin(tr, form); - this.body.setCenterOfMassTransform(tr); - this.body.getMotionState().setWorldTransform(tr); - manager.freeTransform(tr); - manager.freeTransform(form); - } - _updateBoneRotation() { - const manager = this.manager; - const tr = this._getWorldTransformForBone(); - const q = manager.getBasis(tr); - const thQ = manager.allocThreeQuaternion(); - const thQ2 = manager.allocThreeQuaternion(); - const thQ3 = manager.allocThreeQuaternion(); - thQ.set(q.x(), q.y(), q.z(), q.w()); - thQ2.setFromRotationMatrix(this.bone.matrixWorld); - thQ2.conjugate(); - thQ2.multiply(thQ); - thQ3.setFromRotationMatrix(this.bone.matrix); - this.bone.quaternion.copy(thQ2.multiply(thQ3).normalize()); - manager.freeThreeQuaternion(thQ); - manager.freeThreeQuaternion(thQ2); - manager.freeThreeQuaternion(thQ3); - manager.freeQuaternion(q); - manager.freeTransform(tr); - } - _updateBonePosition() { - const manager = this.manager; - const tr = this._getWorldTransformForBone(); - const thV = manager.allocThreeVector3(); - const o = manager.getOrigin(tr); - thV.set(o.x(), o.y(), o.z()); - if (this.bone.parent) this.bone.parent.worldToLocal(thV); - this.bone.position.copy(thV); - manager.freeThreeVector3(thV); - manager.freeTransform(tr); - } -}; -var Constraint = class { - /** - * @param {THREE.SkinnedMesh} mesh - * @param {Ammo.btDiscreteDynamicsWorld} world - * @param {RigidBody} bodyA - * @param {RigidBody} bodyB - * @param {Object} params - * @param {ResourceManager} manager - */ - constructor(mesh, world, bodyA, bodyB, params, manager) { - this.mesh = mesh; - this.world = world; - this.bodyA = bodyA; - this.bodyB = bodyB; - this.params = params; - this.manager = manager; - this.constraint = null; - this._init(); - } - _init() { - const manager = this.manager; - const params = this.params; - const bodyA = this.bodyA; - const bodyB = this.bodyB; - const form = manager.allocTransform(); - manager.setIdentity(form); - manager.setOriginFromArray3(form, params.position); - manager.setBasisFromArray3(form, params.rotation); - const formA = manager.allocTransform(); - const formB = manager.allocTransform(); - bodyA.body.getMotionState().getWorldTransform(formA); - bodyB.body.getMotionState().getWorldTransform(formB); - const formInverseA = manager.inverseTransform(formA); - const formInverseB = manager.inverseTransform(formB); - const formA2 = manager.multiplyTransforms(formInverseA, form); - const formB2 = manager.multiplyTransforms(formInverseB, form); - const constraint = new Ammo.btGeneric6DofSpringConstraint(bodyA.body, bodyB.body, formA2, formB2, true); - const lll = manager.allocVector3(); - const lul = manager.allocVector3(); - const all = manager.allocVector3(); - const aul = manager.allocVector3(); - lll.setValue(params.translationLimitation1[0], params.translationLimitation1[1], params.translationLimitation1[2]); - lul.setValue(params.translationLimitation2[0], params.translationLimitation2[1], params.translationLimitation2[2]); - all.setValue(params.rotationLimitation1[0], params.rotationLimitation1[1], params.rotationLimitation1[2]); - aul.setValue(params.rotationLimitation2[0], params.rotationLimitation2[1], params.rotationLimitation2[2]); - constraint.setLinearLowerLimit(lll); - constraint.setLinearUpperLimit(lul); - constraint.setAngularLowerLimit(all); - constraint.setAngularUpperLimit(aul); - for (let i = 0; i < 3; i++) if (params.springPosition[i] !== 0) { - constraint.enableSpring(i, true); - constraint.setStiffness(i, params.springPosition[i]); - } - for (let i = 0; i < 3; i++) if (params.springRotation[i] !== 0) { - constraint.enableSpring(i + 3, true); - constraint.setStiffness(i + 3, params.springRotation[i]); - } - if (constraint.setParam !== void 0) for (let i = 0; i < 6; i++) constraint.setParam(2, .475, i); - this.world.addConstraint(constraint, true); - this.constraint = constraint; - manager.freeTransform(form); - manager.freeTransform(formA); - manager.freeTransform(formB); - manager.freeTransform(formInverseA); - manager.freeTransform(formInverseB); - manager.freeTransform(formA2); - manager.freeTransform(formB2); - manager.freeVector3(lll); - manager.freeVector3(lul); - manager.freeVector3(all); - manager.freeVector3(aul); - } -}; -var _position = /* @__PURE__ */ new Vector3(); -var _quaternion = /* @__PURE__ */ new Quaternion(); -var _scale = /* @__PURE__ */ new Vector3(); -var _matrixWorldInv = /* @__PURE__ */ new Matrix4(); -var MMDPhysicsHelper = class extends Object3D { - /** - * Visualize Rigid bodies - * - * @param {THREE.SkinnedMesh} mesh - * @param {Physics} physics - */ - constructor(mesh, physics) { - super(); - this.root = mesh; - this.physics = physics; - this.matrix.copy(mesh.matrixWorld); - this.matrixAutoUpdate = false; - this.materials = []; - this.materials.push(new MeshBasicMaterial({ - color: new Color(16746632), - wireframe: true, - depthTest: false, - depthWrite: false, - opacity: .25, - transparent: true - })); - this.materials.push(new MeshBasicMaterial({ - color: new Color(8978312), - wireframe: true, - depthTest: false, - depthWrite: false, - opacity: .25, - transparent: true - })); - this.materials.push(new MeshBasicMaterial({ - color: new Color(8947967), - wireframe: true, - depthTest: false, - depthWrite: false, - opacity: .25, - transparent: true - })); - this._init(); - } - /** - * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app. - */ - dispose() { - const materials = this.materials; - const children = this.children; - for (let i = 0; i < materials.length; i++) materials[i].dispose(); - for (let i = 0; i < children.length; i++) { - const child = children[i]; - if (child.isMesh) child.geometry.dispose(); - } - } - /** - * Updates Rigid Bodies visualization. - */ - updateMatrixWorld(force) { - var mesh = this.root; - if (this.visible) { - var bodies = this.physics.bodies; - _matrixWorldInv.copy(mesh.matrixWorld).decompose(_position, _quaternion, _scale).compose(_position, _quaternion, _scale.set(1, 1, 1)).invert(); - for (var i = 0, il = bodies.length; i < il; i++) { - var body = bodies[i].body; - var child = this.children[i]; - var tr = body.getCenterOfMassTransform(); - var origin = tr.getOrigin(); - var rotation = tr.getRotation(); - child.position.set(origin.x(), origin.y(), origin.z()).applyMatrix4(_matrixWorldInv); - child.quaternion.setFromRotationMatrix(_matrixWorldInv).multiply(_quaternion.set(rotation.x(), rotation.y(), rotation.z(), rotation.w())); - } - } - this.matrix.copy(mesh.matrixWorld).decompose(_position, _quaternion, _scale).compose(_position, _quaternion, _scale.set(1, 1, 1)); - super.updateMatrixWorld(force); - } - _init() { - var bodies = this.physics.bodies; - function createGeometry(param2) { - switch (param2.shapeType) { - case 0: return new SphereGeometry(param2.width, 16, 8); - case 1: return new BoxGeometry(param2.width * 2, param2.height * 2, param2.depth * 2, 8, 8, 8); - case 2: return new CapsuleGeometry(param2.width, param2.height, 8, 16); - default: return null; - } - } - for (var i = 0, il = bodies.length; i < il; i++) { - var param = bodies[i].params; - this.add(new Mesh(createGeometry(param), this.materials[param.type])); - } - } -}; -//#endregion -//#region node_modules/three-stdlib/animation/MMDAnimationHelper.js -var MMDAnimationHelper = class { - /** - * @param {Object} params - (optional) - * @param {boolean} params.sync - Whether animation durations of added objects are synched. Default is true. - * @param {Number} params.afterglow - Default is 0.0. - * @param {boolean} params.resetPhysicsOnLoop - Default is true. - */ - constructor(params = {}) { - this.meshes = []; - this.camera = null; - this.cameraTarget = new Object3D(); - this.cameraTarget.name = "target"; - this.audio = null; - this.audioManager = null; - this.objects = /* @__PURE__ */ new WeakMap(); - this.configuration = { - sync: params.sync !== void 0 ? params.sync : true, - afterglow: params.afterglow !== void 0 ? params.afterglow : 0, - resetPhysicsOnLoop: params.resetPhysicsOnLoop !== void 0 ? params.resetPhysicsOnLoop : true, - pmxAnimation: params.pmxAnimation !== void 0 ? params.pmxAnimation : false - }; - this.enabled = { - animation: true, - ik: true, - grant: true, - physics: true, - cameraAnimation: true - }; - this.onBeforePhysics = function() {}; - this.sharedPhysics = false; - this.masterPhysics = null; - } - /** - * Adds an Three.js Object to helper and setups animation. - * The anmation durations of added objects are synched - * if this.configuration.sync is true. - * - * @param {THREE.SkinnedMesh|THREE.Camera|THREE.Audio} object - * @param {Object} params - (optional) - * @param {THREE.AnimationClip|Array<THREE.AnimationClip>} params.animation - Only for THREE.SkinnedMesh and THREE.Camera. Default is undefined. - * @param {boolean} params.physics - Only for THREE.SkinnedMesh. Default is true. - * @param {Integer} params.warmup - Only for THREE.SkinnedMesh and physics is true. Default is 60. - * @param {Number} params.unitStep - Only for THREE.SkinnedMesh and physics is true. Default is 1 / 65. - * @param {Integer} params.maxStepNum - Only for THREE.SkinnedMesh and physics is true. Default is 3. - * @param {Vector3} params.gravity - Only for THREE.SkinnedMesh and physics is true. Default ( 0, - 9.8 * 10, 0 ). - * @param {Number} params.delayTime - Only for THREE.Audio. Default is 0.0. - * @return {MMDAnimationHelper} - */ - add(object, params = {}) { - if (object.isSkinnedMesh) this._addMesh(object, params); - else if (object.isCamera) this._setupCamera(object, params); - else if (object.type === "Audio") this._setupAudio(object, params); - else throw new Error("THREE.MMDAnimationHelper.add: accepts only THREE.SkinnedMesh or THREE.Camera or THREE.Audio instance."); - if (this.configuration.sync) this._syncDuration(); - return this; - } - /** - * Removes an Three.js Object from helper. - * - * @param {THREE.SkinnedMesh|THREE.Camera|THREE.Audio} object - * @return {MMDAnimationHelper} - */ - remove(object) { - if (object.isSkinnedMesh) this._removeMesh(object); - else if (object.isCamera) this._clearCamera(object); - else if (object.type === "Audio") this._clearAudio(object); - else throw new Error("THREE.MMDAnimationHelper.remove: accepts only THREE.SkinnedMesh or THREE.Camera or THREE.Audio instance."); - if (this.configuration.sync) this._syncDuration(); - return this; - } - /** - * Updates the animation. - * - * @param {Number} delta - * @return {MMDAnimationHelper} - */ - update(delta) { - if (this.audioManager !== null) this.audioManager.control(delta); - for (let i = 0; i < this.meshes.length; i++) this._animateMesh(this.meshes[i], delta); - if (this.sharedPhysics) this._updateSharedPhysics(delta); - if (this.camera !== null) this._animateCamera(this.camera, delta); - return this; - } - /** - * Changes the pose of SkinnedMesh as VPD specifies. - * - * @param {THREE.SkinnedMesh} mesh - * @param {Object} vpd - VPD content parsed MMDParser - * @param {Object} params - (optional) - * @param {boolean} params.resetPose - Default is true. - * @param {boolean} params.ik - Default is true. - * @param {boolean} params.grant - Default is true. - * @return {MMDAnimationHelper} - */ - pose(mesh, vpd, params = {}) { - if (params.resetPose !== false) mesh.pose(); - const bones = mesh.skeleton.bones; - const boneParams = vpd.bones; - const boneNameDictionary = {}; - for (let i = 0, il = bones.length; i < il; i++) boneNameDictionary[bones[i].name] = i; - const vector = new Vector3(); - const quaternion = new Quaternion(); - for (let i = 0, il = boneParams.length; i < il; i++) { - const boneParam = boneParams[i]; - const boneIndex = boneNameDictionary[boneParam.name]; - if (boneIndex === void 0) continue; - const bone = bones[boneIndex]; - bone.position.add(vector.fromArray(boneParam.translation)); - bone.quaternion.multiply(quaternion.fromArray(boneParam.quaternion)); - } - mesh.updateMatrixWorld(true); - if (this.configuration.pmxAnimation && mesh.geometry.userData.MMD && mesh.geometry.userData.MMD.format === "pmx") { - const sortedBonesData = this._sortBoneDataArray(mesh.geometry.userData.MMD.bones.slice()); - const ikSolver = params.ik !== false ? this._createCCDIKSolver(mesh) : null; - const grantSolver = params.grant !== false ? this.createGrantSolver(mesh) : null; - this._animatePMXMesh(mesh, sortedBonesData, ikSolver, grantSolver); - } else { - if (params.ik !== false) this._createCCDIKSolver(mesh).update(); - if (params.grant !== false) this.createGrantSolver(mesh).update(); - } - return this; - } - /** - * Enabes/Disables an animation feature. - * - * @param {string} key - * @param {boolean} enabled - * @return {MMDAnimationHelper} - */ - enable(key, enabled) { - if (this.enabled[key] === void 0) throw new Error("THREE.MMDAnimationHelper.enable: unknown key " + key); - this.enabled[key] = enabled; - if (key === "physics") for (let i = 0, il = this.meshes.length; i < il; i++) this._optimizeIK(this.meshes[i], enabled); - return this; - } - /** - * Creates an GrantSolver instance. - * - * @param {THREE.SkinnedMesh} mesh - * @return {GrantSolver} - */ - createGrantSolver(mesh) { - return new GrantSolver(mesh, mesh.geometry.userData.MMD.grants); - } - _addMesh(mesh, params) { - if (this.meshes.indexOf(mesh) >= 0) throw new Error("THREE.MMDAnimationHelper._addMesh: SkinnedMesh '" + mesh.name + "' has already been added."); - this.meshes.push(mesh); - this.objects.set(mesh, { looped: false }); - this._setupMeshAnimation(mesh, params.animation); - if (params.physics !== false) this._setupMeshPhysics(mesh, params); - return this; - } - _setupCamera(camera, params) { - if (this.camera === camera) throw new Error("THREE.MMDAnimationHelper._setupCamera: Camera '" + camera.name + "' has already been set."); - if (this.camera) this.clearCamera(this.camera); - this.camera = camera; - camera.add(this.cameraTarget); - this.objects.set(camera, {}); - if (params.animation !== void 0) this._setupCameraAnimation(camera, params.animation); - return this; - } - _setupAudio(audio, params) { - if (this.audio === audio) throw new Error("THREE.MMDAnimationHelper._setupAudio: Audio '" + audio.name + "' has already been set."); - if (this.audio) this.clearAudio(this.audio); - this.audio = audio; - this.audioManager = new AudioManager(audio, params); - this.objects.set(this.audioManager, { duration: this.audioManager.duration }); - return this; - } - _removeMesh(mesh) { - let found = false; - let writeIndex = 0; - for (let i = 0, il = this.meshes.length; i < il; i++) { - if (this.meshes[i] === mesh) { - this.objects.delete(mesh); - found = true; - continue; - } - this.meshes[writeIndex++] = this.meshes[i]; - } - if (!found) throw new Error("THREE.MMDAnimationHelper._removeMesh: SkinnedMesh '" + mesh.name + "' has not been added yet."); - this.meshes.length = writeIndex; - return this; - } - _clearCamera(camera) { - if (camera !== this.camera) throw new Error("THREE.MMDAnimationHelper._clearCamera: Camera '" + camera.name + "' has not been set yet."); - this.camera.remove(this.cameraTarget); - this.objects.delete(this.camera); - this.camera = null; - return this; - } - _clearAudio(audio) { - if (audio !== this.audio) throw new Error("THREE.MMDAnimationHelper._clearAudio: Audio '" + audio.name + "' has not been set yet."); - this.objects.delete(this.audioManager); - this.audio = null; - this.audioManager = null; - return this; - } - _setupMeshAnimation(mesh, animation) { - const objects = this.objects.get(mesh); - if (animation !== void 0) { - const animations = Array.isArray(animation) ? animation : [animation]; - objects.mixer = new AnimationMixer(mesh); - for (let i = 0, il = animations.length; i < il; i++) objects.mixer.clipAction(animations[i]).play(); - objects.mixer.addEventListener("loop", function(event) { - const tracks = event.action._clip.tracks; - if (tracks.length > 0 && tracks[0].name.slice(0, 6) !== ".bones") return; - objects.looped = true; - }); - } - objects.ikSolver = this._createCCDIKSolver(mesh); - objects.grantSolver = this.createGrantSolver(mesh); - return this; - } - _setupCameraAnimation(camera, animation) { - const animations = Array.isArray(animation) ? animation : [animation]; - const objects = this.objects.get(camera); - objects.mixer = new AnimationMixer(camera); - for (let i = 0, il = animations.length; i < il; i++) objects.mixer.clipAction(animations[i]).play(); - } - _setupMeshPhysics(mesh, params) { - const objects = this.objects.get(mesh); - if (params.world === void 0 && this.sharedPhysics) { - const masterPhysics = this._getMasterPhysics(); - if (masterPhysics !== null) world = masterPhysics.world; - } - objects.physics = this._createMMDPhysics(mesh, params); - if (objects.mixer && params.animationWarmup !== false) { - this._animateMesh(mesh, 0); - objects.physics.reset(); - } - objects.physics.warmup(params.warmup !== void 0 ? params.warmup : 60); - this._optimizeIK(mesh, true); - } - _animateMesh(mesh, delta) { - const objects = this.objects.get(mesh); - const mixer = objects.mixer; - const ikSolver = objects.ikSolver; - const grantSolver = objects.grantSolver; - const physics = objects.physics; - const looped = objects.looped; - if (mixer && this.enabled.animation) { - this._restoreBones(mesh); - mixer.update(delta); - this._saveBones(mesh); - if (this.configuration.pmxAnimation && mesh.geometry.userData.MMD && mesh.geometry.userData.MMD.format === "pmx") { - if (!objects.sortedBonesData) objects.sortedBonesData = this._sortBoneDataArray(mesh.geometry.userData.MMD.bones.slice()); - this._animatePMXMesh(mesh, objects.sortedBonesData, ikSolver && this.enabled.ik ? ikSolver : null, grantSolver && this.enabled.grant ? grantSolver : null); - } else { - if (ikSolver && this.enabled.ik) { - mesh.updateMatrixWorld(true); - ikSolver.update(); - } - if (grantSolver && this.enabled.grant) grantSolver.update(); - } - } - if (looped === true && this.enabled.physics) { - if (physics && this.configuration.resetPhysicsOnLoop) physics.reset(); - objects.looped = false; - } - if (physics && this.enabled.physics && !this.sharedPhysics) { - this.onBeforePhysics(mesh); - physics.update(delta); - } - } - _sortBoneDataArray(boneDataArray) { - return boneDataArray.sort(function(a, b) { - if (a.transformationClass !== b.transformationClass) return a.transformationClass - b.transformationClass; - else return a.index - b.index; - }); - } - _animatePMXMesh(mesh, sortedBonesData, ikSolver, grantSolver) { - _quaternionIndex = 0; - _grantResultMap.clear(); - for (let i = 0, il = sortedBonesData.length; i < il; i++) updateOne(mesh, sortedBonesData[i].index, ikSolver, grantSolver); - mesh.updateMatrixWorld(true); - return this; - } - _animateCamera(camera, delta) { - const mixer = this.objects.get(camera).mixer; - if (mixer && this.enabled.cameraAnimation) { - mixer.update(delta); - camera.updateProjectionMatrix(); - camera.up.set(0, 1, 0); - camera.up.applyQuaternion(camera.quaternion); - camera.lookAt(this.cameraTarget.position); - } - } - _optimizeIK(mesh, physicsEnabled) { - const iks = mesh.geometry.userData.MMD.iks; - const bones = mesh.geometry.userData.MMD.bones; - for (let i = 0, il = iks.length; i < il; i++) { - const links = iks[i].links; - for (let j = 0, jl = links.length; j < jl; j++) { - const link = links[j]; - if (physicsEnabled === true) link.enabled = bones[link.index].rigidBodyType > 0 ? false : true; - else link.enabled = true; - } - } - } - _createCCDIKSolver(mesh) { - if (CCDIKSolver === void 0) throw new Error("THREE.MMDAnimationHelper: Import CCDIKSolver."); - return new CCDIKSolver(mesh, mesh.geometry.userData.MMD.iks); - } - _createMMDPhysics(mesh, params) { - if (MMDPhysics === void 0) throw new Error("THREE.MMDPhysics: Import MMDPhysics."); - return new MMDPhysics(mesh, mesh.geometry.userData.MMD.rigidBodies, mesh.geometry.userData.MMD.constraints, params); - } - _syncDuration() { - let max = 0; - const objects = this.objects; - const meshes = this.meshes; - const camera = this.camera; - const audioManager = this.audioManager; - for (let i = 0, il = meshes.length; i < il; i++) { - const mixer = this.objects.get(meshes[i]).mixer; - if (mixer === void 0) continue; - for (let j = 0; j < mixer._actions.length; j++) { - const clip = mixer._actions[j]._clip; - if (!objects.has(clip)) objects.set(clip, { duration: clip.duration }); - max = Math.max(max, objects.get(clip).duration); - } - } - if (camera !== null) { - const mixer = this.objects.get(camera).mixer; - if (mixer !== void 0) for (let i = 0, il = mixer._actions.length; i < il; i++) { - const clip = mixer._actions[i]._clip; - if (!objects.has(clip)) objects.set(clip, { duration: clip.duration }); - max = Math.max(max, objects.get(clip).duration); - } - } - if (audioManager !== null) max = Math.max(max, objects.get(audioManager).duration); - max += this.configuration.afterglow; - for (let i = 0, il = this.meshes.length; i < il; i++) { - const mixer = this.objects.get(this.meshes[i]).mixer; - if (mixer === void 0) continue; - for (let j = 0, jl = mixer._actions.length; j < jl; j++) mixer._actions[j]._clip.duration = max; - } - if (camera !== null) { - const mixer = this.objects.get(camera).mixer; - if (mixer !== void 0) for (let i = 0, il = mixer._actions.length; i < il; i++) mixer._actions[i]._clip.duration = max; - } - if (audioManager !== null) audioManager.duration = max; - } - _updatePropertyMixersBuffer(mesh) { - const mixer = this.objects.get(mesh).mixer; - const propertyMixers = mixer._bindings; - const accuIndex = mixer._accuIndex; - for (let i = 0, il = propertyMixers.length; i < il; i++) { - const propertyMixer = propertyMixers[i]; - const buffer = propertyMixer.buffer; - const stride = propertyMixer.valueSize; - const offset = (accuIndex + 1) * stride; - propertyMixer.binding.getValue(buffer, offset); - } - } - _saveBones(mesh) { - const objects = this.objects.get(mesh); - const bones = mesh.skeleton.bones; - let backupBones = objects.backupBones; - if (backupBones === void 0) { - backupBones = new Float32Array(bones.length * 7); - objects.backupBones = backupBones; - } - for (let i = 0, il = bones.length; i < il; i++) { - const bone = bones[i]; - bone.position.toArray(backupBones, i * 7); - bone.quaternion.toArray(backupBones, i * 7 + 3); - } - } - _restoreBones(mesh) { - const backupBones = this.objects.get(mesh).backupBones; - if (backupBones === void 0) return; - const bones = mesh.skeleton.bones; - for (let i = 0, il = bones.length; i < il; i++) { - const bone = bones[i]; - bone.position.fromArray(backupBones, i * 7); - bone.quaternion.fromArray(backupBones, i * 7 + 3); - } - } - _getMasterPhysics() { - if (this.masterPhysics !== null) return this.masterPhysics; - for (let i = 0, il = this.meshes.length; i < il; i++) { - const physics = this.meshes[i].physics; - if (physics !== void 0 && physics !== null) { - this.masterPhysics = physics; - return this.masterPhysics; - } - } - return null; - } - _updateSharedPhysics(delta) { - if (this.meshes.length === 0 || !this.enabled.physics || !this.sharedPhysics) return; - const physics = this._getMasterPhysics(); - if (physics === null) return; - for (let i = 0, il = this.meshes.length; i < il; i++) { - const p = this.meshes[i].physics; - if (p !== null && p !== void 0) p.updateRigidBodies(); - } - physics.stepSimulation(delta); - for (let i = 0, il = this.meshes.length; i < il; i++) { - const p = this.meshes[i].physics; - if (p !== null && p !== void 0) p.updateBones(); - } - } -}; -var _quaternions = []; -var _quaternionIndex = 0; -function getQuaternion() { - if (_quaternionIndex >= _quaternions.length) _quaternions.push(new Quaternion()); - return _quaternions[_quaternionIndex++]; -} -var _grantResultMap = /* @__PURE__ */ new Map(); -function updateOne(mesh, boneIndex, ikSolver, grantSolver) { - const bones = mesh.skeleton.bones; - const boneData = mesh.geometry.userData.MMD.bones[boneIndex]; - const bone = bones[boneIndex]; - if (_grantResultMap.has(boneIndex)) return; - const quaternion = getQuaternion(); - _grantResultMap.set(boneIndex, quaternion.copy(bone.quaternion)); - if (grantSolver && boneData.grant && !boneData.grant.isLocal && boneData.grant.affectRotation) { - const parentIndex = boneData.grant.parentIndex; - const ratio = boneData.grant.ratio; - if (!_grantResultMap.has(parentIndex)) updateOne(mesh, parentIndex, ikSolver, grantSolver); - grantSolver.addGrantRotation(bone, _grantResultMap.get(parentIndex), ratio); - } - if (ikSolver && boneData.ik) { - mesh.updateMatrixWorld(true); - ikSolver.updateOne(boneData.ik); - const links = boneData.ik.links; - for (let i = 0, il = links.length; i < il; i++) { - const link = links[i]; - if (link.enabled === false) continue; - const linkIndex = link.index; - if (_grantResultMap.has(linkIndex)) _grantResultMap.set(linkIndex, _grantResultMap.get(linkIndex).copy(bones[linkIndex].quaternion)); - } - } - quaternion.copy(bone.quaternion); -} -var AudioManager = class { - /** - * @param {THREE.Audio} audio - * @param {Object} params - (optional) - * @param {Nuumber} params.delayTime - */ - constructor(audio, params = {}) { - this.audio = audio; - this.elapsedTime = 0; - this.currentTime = 0; - this.delayTime = params.delayTime !== void 0 ? params.delayTime : 0; - this.audioDuration = this.audio.buffer.duration; - this.duration = this.audioDuration + this.delayTime; - } - /** - * @param {Number} delta - * @return {AudioManager} - */ - control(delta) { - this.elapsed += delta; - this.currentTime += delta; - if (this._shouldStopAudio()) this.audio.stop(); - if (this._shouldStartAudio()) this.audio.play(); - return this; - } - _shouldStartAudio() { - if (this.audio.isPlaying) return false; - while (this.currentTime >= this.duration) this.currentTime -= this.duration; - if (this.currentTime < this.delayTime) return false; - if (this.currentTime - this.delayTime > this.audioDuration) return false; - return true; - } - _shouldStopAudio() { - return this.audio.isPlaying && this.currentTime >= this.duration; - } -}; -var _q$1 = /* @__PURE__ */ new Quaternion(); -var GrantSolver = class { - constructor(mesh, grants = []) { - this.mesh = mesh; - this.grants = grants; - } - /** - * Solve all the grant bones - * @return {GrantSolver} - */ - update() { - const grants = this.grants; - for (let i = 0, il = grants.length; i < il; i++) this.updateOne(grants[i]); - return this; - } - /** - * Solve a grant bone - * @param {Object} grant - grant parameter - * @return {GrantSolver} - */ - updateOne(grant) { - const bones = this.mesh.skeleton.bones; - const bone = bones[grant.index]; - const parentBone = bones[grant.parentIndex]; - if (grant.isLocal) { - if (grant.affectPosition); - if (grant.affectRotation); - } else { - if (grant.affectPosition); - if (grant.affectRotation) this.addGrantRotation(bone, parentBone.quaternion, grant.ratio); - } - return this; - } - addGrantRotation(bone, q, ratio) { - _q$1.set(0, 0, 0, 1); - _q$1.slerp(q, ratio); - bone.quaternion.multiply(_q$1); - return this; - } -}; -//#endregion -//#region node_modules/three-stdlib/objects/BatchedMesh.js -var __defProp$47 = Object.defineProperty; -var __defNormalProp$47 = (obj, key, value) => key in obj ? __defProp$47(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$47 = (obj, key, value) => { - __defNormalProp$47(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var ID_ATTR_NAME = "_batch_id_"; -var _identityMatrix$1 = /* @__PURE__ */ new Matrix4(); -var _zeroScaleMatrix = /* @__PURE__ */ (() => new Matrix4().set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1))(); -var batchingParsVertex = ` -#ifdef BATCHING - attribute float ${ID_ATTR_NAME}; - uniform highp sampler2D batchingTexture; - mat4 getBatchingMatrix( const in float i ) { - - int size = textureSize( batchingTexture, 0 ).x; - int j = int( i ) * 4; - int x = j % size; - int y = j / size; - vec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 ); - vec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 ); - vec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 ); - vec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 ); - return mat4( v1, v2, v3, v4 ); - - } -#endif -`; -var batchingbaseVertex = ` -#ifdef BATCHING - mat4 batchingMatrix = getBatchingMatrix( ${ID_ATTR_NAME} ); -#endif -`; -var batchingnormalVertex = ` -#ifdef BATCHING - objectNormal = vec4( batchingMatrix * vec4( objectNormal, 0.0 ) ).xyz; - #ifdef USE_TANGENT - objectTangent = vec4( batchingMatrix * vec4( objectTangent, 0.0 ) ).xyz; - #endif -#endif -`; -var batchingVertex = ` -#ifdef BATCHING - transformed = ( batchingMatrix * vec4( transformed, 1.0 ) ).xyz; -#endif -`; -function copyAttributeData(src, target, targetOffset = 0) { - const itemSize = target.itemSize; - if (src.isInterleavedBufferAttribute || src.array.constructor !== target.array.constructor) { - const vertexCount = src.count; - for (let i = 0; i < vertexCount; i++) for (let c = 0; c < itemSize; c++) target.setComponent(i + targetOffset, c, src.getComponent(i, c)); - } else target.array.set(src.array, targetOffset * itemSize); - target.needsUpdate = true; -} -var BatchedMesh = class extends Mesh { - constructor(maxGeometryCount, maxVertexCount, maxIndexCount = maxVertexCount * 2, material) { - super(new BufferGeometry(), material); - __publicField$47(this, "_vertexStarts"); - __publicField$47(this, "_vertexCounts"); - __publicField$47(this, "_indexStarts"); - __publicField$47(this, "_indexCounts"); - __publicField$47(this, "_reservedRanges"); - __publicField$47(this, "_visible"); - __publicField$47(this, "_active"); - __publicField$47(this, "_maxGeometryCount"); - __publicField$47(this, "_maxVertexCount"); - __publicField$47(this, "_maxIndexCount"); - __publicField$47(this, "_geometryInitialized"); - __publicField$47(this, "_geometryCount"); - __publicField$47(this, "_matrices"); - __publicField$47(this, "_matricesTexture"); - __publicField$47(this, "_customUniforms"); - this._vertexStarts = []; - this._vertexCounts = []; - this._indexStarts = []; - this._indexCounts = []; - this._reservedRanges = []; - this._visible = []; - this._active = []; - this._maxGeometryCount = maxGeometryCount; - this._maxVertexCount = maxVertexCount; - this._maxIndexCount = maxIndexCount; - this._geometryInitialized = false; - this._geometryCount = 0; - this._matrices = []; - this._matricesTexture = null; - this.frustumCulled = false; - this._customUniforms = { batchingTexture: { value: null } }; - this._initMatricesTexture(); - this._initShader(); - this.onBeforeRender = function() { - if (this.material.defines) this.material.defines.BATCHING = true; - }; - this.onAfterRender = function() { - if (this.material.defines) this.material.defines.BATCHING = false; - }; - } - _initMatricesTexture() { - let size = Math.sqrt(this._maxGeometryCount * 4); - size = MathUtils.ceilPowerOfTwo(size); - size = Math.max(size, 4); - const matricesTexture = new DataTexture(new Float32Array(size * size * 4), size, size, RGBAFormat, FloatType); - this._matricesTexture = matricesTexture; - this._customUniforms.batchingTexture.value = this._matricesTexture; - } - _initShader() { - const material = this.material; - const currentOnBeforeCompile = material.onBeforeCompile; - const customUniforms = this._customUniforms; - material.onBeforeCompile = function onBeforeCompile(parameters, renderer) { - parameters.vertexShader = parameters.vertexShader.replace("#include <skinning_pars_vertex>", "#include <skinning_pars_vertex>\n" + batchingParsVertex).replace("#include <uv_vertex>", "#include <uv_vertex>\n" + batchingbaseVertex).replace("#include <skinnormal_vertex>", "#include <skinnormal_vertex>\n" + batchingnormalVertex).replace("#include <skinning_vertex>", "#include <skinning_vertex>\n" + batchingVertex); - for (const uniformName in customUniforms) parameters.uniforms[uniformName] = customUniforms[uniformName]; - currentOnBeforeCompile.call(this, parameters, renderer); - }; - material.defines = material.defines || {}; - material.defines.BATCHING = false; - } - _initializeGeometry(reference) { - const geometry = this.geometry; - const maxVertexCount = this._maxVertexCount; - const maxGeometryCount = this._maxGeometryCount; - const maxIndexCount = this._maxIndexCount; - if (this._geometryInitialized === false) { - for (const attributeName in reference.attributes) { - const srcAttribute = reference.getAttribute(attributeName); - const { array, itemSize, normalized } = srcAttribute; - const dstArray = new array.constructor(maxVertexCount * itemSize); - const dstAttribute = new srcAttribute.constructor(dstArray, itemSize, normalized); - dstAttribute.setUsage(srcAttribute.usage); - geometry.setAttribute(attributeName, dstAttribute); - } - if (reference.getIndex() !== null) { - const indexArray = maxVertexCount > 65536 ? new Uint32Array(maxIndexCount) : new Uint16Array(maxIndexCount); - geometry.setIndex(new BufferAttribute(indexArray, 1)); - } - const idArray = maxGeometryCount > 65536 ? new Uint32Array(maxVertexCount) : new Uint16Array(maxVertexCount); - geometry.setAttribute(ID_ATTR_NAME, new BufferAttribute(idArray, 1)); - this._geometryInitialized = true; - } - } - _validateGeometry(geometry) { - if (geometry.getAttribute(ID_ATTR_NAME)) throw new Error(`BatchedMesh: Geometry cannot use attribute "${ID_ATTR_NAME}"`); - const batchGeometry = this.geometry; - if (Boolean(geometry.getIndex()) !== Boolean(batchGeometry.getIndex())) throw new Error("BatchedMesh: All geometries must consistently have \"index\"."); - for (const attributeName in batchGeometry.attributes) { - if (attributeName === ID_ATTR_NAME) continue; - if (!geometry.hasAttribute(attributeName)) throw new Error(`BatchedMesh: Added geometry missing "${attributeName}". All geometries must have consistent attributes.`); - const srcAttribute = geometry.getAttribute(attributeName); - const dstAttribute = batchGeometry.getAttribute(attributeName); - if (srcAttribute.itemSize !== dstAttribute.itemSize || srcAttribute.normalized !== dstAttribute.normalized) throw new Error("BatchedMesh: All attributes must have a consistent itemSize and normalized value."); - } - } - getGeometryCount() { - return this._geometryCount; - } - getVertexCount() { - const reservedRanges = this._reservedRanges; - if (reservedRanges.length === 0) return 0; - else { - const finalRange = reservedRanges[reservedRanges.length - 1]; - return finalRange.vertexStart + finalRange.vertexCount; - } - } - getIndexCount() { - const reservedRanges = this._reservedRanges; - if (this.geometry.getIndex() === null || reservedRanges.length === 0) return 0; - else { - const finalRange = reservedRanges[reservedRanges.length - 1]; - return finalRange.indexStart + finalRange.indexCount; - } - } - addGeometry(geometry, vertexCount = -1, indexCount = -1) { - this._initializeGeometry(geometry); - this._validateGeometry(geometry); - if (this._geometryCount >= this._maxGeometryCount) throw new Error("BatchedMesh: Maximum geometry count reached."); - const range = { - vertexStart: -1, - vertexCount: -1, - indexStart: -1, - indexCount: -1 - }; - let lastRange = null; - const reservedRanges = this._reservedRanges; - if (this._geometryCount !== 0) lastRange = reservedRanges[reservedRanges.length - 1]; - if (vertexCount === -1) range.vertexCount = geometry.getAttribute("position").count; - else range.vertexCount = vertexCount; - if (lastRange === null) range.vertexStart = 0; - else range.vertexStart = lastRange.vertexStart + lastRange.vertexCount; - if (geometry.getIndex() !== null) { - if (indexCount === -1) range.indexCount = geometry.getIndex().count; - else range.indexCount = indexCount; - if (lastRange === null) range.indexStart = 0; - else range.indexStart = lastRange.indexStart + lastRange.indexCount; - } - if (range.indexStart !== -1 && range.indexStart + range.indexCount > this._maxIndexCount || range.vertexStart + range.vertexCount > this._maxVertexCount) throw new Error("BatchedMesh: Reserved space request exceeds the maximum buffer size."); - const indexCounts = this._indexCounts; - const indexStarts = this._indexStarts; - const vertexCounts = this._vertexCounts; - const vertexStarts = this._vertexStarts; - const visible = this._visible; - const active = this._active; - const matricesTexture = this._matricesTexture; - const matrices = this._matrices; - const matricesArray = this._matricesTexture.image.data; - visible.push(true); - active.push(true); - const geometryId = this._geometryCount; - this._geometryCount++; - matrices.push(new Matrix4()); - _identityMatrix$1.toArray(matricesArray, geometryId * 16); - matricesTexture.needsUpdate = true; - reservedRanges.push(range); - vertexStarts.push(range.vertexStart); - vertexCounts.push(range.vertexCount); - if (geometry.getIndex() !== null) { - indexStarts.push(range.indexCount); - indexCounts.push(range.indexCount); - } - const idAttribute = this.geometry.getAttribute(ID_ATTR_NAME); - for (let i = 0; i < range.vertexCount; i++) idAttribute.setX(range.vertexStart + i, geometryId); - idAttribute.needsUpdate = true; - this.setGeometryAt(geometryId, geometry); - return geometryId; - } - /** - * @deprecated use `addGeometry` instead. - */ - applyGeometry(geometry) { - return this.addGeometry(geometry); - } - setGeometryAt(id, geometry) { - if (id >= this._geometryCount) throw new Error("BatchedMesh: Maximum geometry count reached."); - this._validateGeometry(geometry); - const range = this._reservedRanges[id]; - if (geometry.getIndex() !== null && geometry.getIndex().count > range.indexCount || geometry.attributes.position.count > range.vertexCount) throw new Error("BatchedMesh: Reserved space not large enough for provided geometry."); - const batchGeometry = this.geometry; - const srcPositionAttribute = geometry.getAttribute("position"); - const hasIndex = batchGeometry.getIndex() !== null; - const dstIndex = batchGeometry.getIndex(); - const srcIndex = geometry.getIndex(); - const vertexStart = range.vertexStart; - const vertexCount = range.vertexCount; - for (const attributeName in batchGeometry.attributes) { - if (attributeName === ID_ATTR_NAME) continue; - const srcAttribute = geometry.getAttribute(attributeName); - const dstAttribute = batchGeometry.getAttribute(attributeName); - copyAttributeData(srcAttribute, dstAttribute, vertexStart); - const itemSize = srcAttribute.itemSize; - for (let i = srcAttribute.count, l = vertexCount; i < l; i++) { - const index = vertexStart + i; - for (let c = 0; c < itemSize; c++) dstAttribute.setComponent(index, c, 0); - } - dstAttribute.needsUpdate = true; - } - this._vertexCounts[id] = srcPositionAttribute.count; - if (hasIndex) { - const indexStart = range.indexStart; - for (let i = 0; i < srcIndex.count; i++) dstIndex.setX(indexStart + i, vertexStart + srcIndex.getX(i)); - for (let i = srcIndex.count, l = range.indexCount; i < l; i++) dstIndex.setX(indexStart + i, vertexStart); - dstIndex.needsUpdate = true; - this._indexCounts[id] = srcIndex.count; - } - return id; - } - deleteGeometry(geometryId) { - const active = this._active; - const matricesTexture = this._matricesTexture; - const matricesArray = matricesTexture.image.data; - if (geometryId >= active.length || active[geometryId] === false) return this; - active[geometryId] = false; - _zeroScaleMatrix.toArray(matricesArray, geometryId * 16); - matricesTexture.needsUpdate = true; - return this; - } - optimize() { - throw new Error("BatchedMesh: Optimize function not implemented."); - } - setMatrixAt(geometryId, matrix) { - const visible = this._visible; - const active = this._active; - const matricesTexture = this._matricesTexture; - const matrices = this._matrices; - const matricesArray = matricesTexture.image.data; - if (geometryId >= matrices.length || active[geometryId] === false) return this; - if (visible[geometryId] === true) { - matrix.toArray(matricesArray, geometryId * 16); - matricesTexture.needsUpdate = true; - } - matrices[geometryId].copy(matrix); - return this; - } - getMatrixAt(geometryId, matrix) { - const matrices = this._matrices; - const active = this._active; - if (geometryId >= matrices.length || active[geometryId] === false) return matrix; - return matrix.copy(matrices[geometryId]); - } - setVisibleAt(geometryId, value) { - const visible = this._visible; - const active = this._active; - const matricesTexture = this._matricesTexture; - const matrices = this._matrices; - const matricesArray = matricesTexture.image.data; - if (geometryId >= visible.length || active[geometryId] === false || visible[geometryId] === value) return this; - if (value === true) matrices[geometryId].toArray(matricesArray, geometryId * 16); - else _zeroScaleMatrix.toArray(matricesArray, geometryId * 16); - matricesTexture.needsUpdate = true; - visible[geometryId] = value; - return this; - } - getVisibleAt(geometryId) { - const visible = this._visible; - const active = this._active; - if (geometryId >= visible.length || active[geometryId] === false) return false; - return visible[geometryId]; - } - raycast() { - console.warn("BatchedMesh: Raycast function not implemented."); - } - copy() { - throw new Error("BatchedMesh: Copy function not implemented."); - } - toJSON() { - throw new Error("BatchedMesh: toJSON function not implemented."); - } - dispose() { - this.geometry.dispose(); - this._matricesTexture.dispose(); - this._matricesTexture = null; - return this; - } -}; -//#endregion -//#region node_modules/three-stdlib/objects/Reflector.js -var __defProp$46 = Object.defineProperty; -var __defNormalProp$46 = (obj, key, value) => key in obj ? __defProp$46(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$46 = (obj, key, value) => { - __defNormalProp$46(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var Reflector = /* @__PURE__ */ (() => { - const _Reflector = class extends Mesh { - constructor(geometry, options = {}) { - super(geometry); - this.isReflector = true; - this.type = "Reflector"; - this.camera = new PerspectiveCamera(); - const scope = this; - const color = options.color !== void 0 ? new Color(options.color) : new Color(8355711); - const textureWidth = options.textureWidth || 512; - const textureHeight = options.textureHeight || 512; - const clipBias = options.clipBias || 0; - const shader = options.shader || _Reflector.ReflectorShader; - const multisample = options.multisample !== void 0 ? options.multisample : 4; - const reflectorPlane = new Plane(); - const normal = new Vector3(); - const reflectorWorldPosition = new Vector3(); - const cameraWorldPosition = new Vector3(); - const rotationMatrix = new Matrix4(); - const lookAtPosition = new Vector3(0, 0, -1); - const clipPlane = new Vector4(); - const view = new Vector3(); - const target = new Vector3(); - const q = new Vector4(); - const textureMatrix = new Matrix4(); - const virtualCamera = this.camera; - const renderTarget = new WebGLRenderTarget(textureWidth, textureHeight, { - samples: multisample, - type: HalfFloatType - }); - const material = new ShaderMaterial({ - uniforms: UniformsUtils.clone(shader.uniforms), - fragmentShader: shader.fragmentShader, - vertexShader: shader.vertexShader - }); - material.uniforms["tDiffuse"].value = renderTarget.texture; - material.uniforms["color"].value = color; - material.uniforms["textureMatrix"].value = textureMatrix; - this.material = material; - this.onBeforeRender = function(renderer, scene, camera) { - reflectorWorldPosition.setFromMatrixPosition(scope.matrixWorld); - cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld); - rotationMatrix.extractRotation(scope.matrixWorld); - normal.set(0, 0, 1); - normal.applyMatrix4(rotationMatrix); - view.subVectors(reflectorWorldPosition, cameraWorldPosition); - if (view.dot(normal) > 0) return; - view.reflect(normal).negate(); - view.add(reflectorWorldPosition); - rotationMatrix.extractRotation(camera.matrixWorld); - lookAtPosition.set(0, 0, -1); - lookAtPosition.applyMatrix4(rotationMatrix); - lookAtPosition.add(cameraWorldPosition); - target.subVectors(reflectorWorldPosition, lookAtPosition); - target.reflect(normal).negate(); - target.add(reflectorWorldPosition); - virtualCamera.position.copy(view); - virtualCamera.up.set(0, 1, 0); - virtualCamera.up.applyMatrix4(rotationMatrix); - virtualCamera.up.reflect(normal); - virtualCamera.lookAt(target); - virtualCamera.far = camera.far; - virtualCamera.updateMatrixWorld(); - virtualCamera.projectionMatrix.copy(camera.projectionMatrix); - textureMatrix.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1); - textureMatrix.multiply(virtualCamera.projectionMatrix); - textureMatrix.multiply(virtualCamera.matrixWorldInverse); - textureMatrix.multiply(scope.matrixWorld); - reflectorPlane.setFromNormalAndCoplanarPoint(normal, reflectorWorldPosition); - reflectorPlane.applyMatrix4(virtualCamera.matrixWorldInverse); - clipPlane.set(reflectorPlane.normal.x, reflectorPlane.normal.y, reflectorPlane.normal.z, reflectorPlane.constant); - const projectionMatrix = virtualCamera.projectionMatrix; - q.x = (Math.sign(clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0]; - q.y = (Math.sign(clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5]; - q.z = -1; - q.w = (1 + projectionMatrix.elements[10]) / projectionMatrix.elements[14]; - clipPlane.multiplyScalar(2 / clipPlane.dot(q)); - projectionMatrix.elements[2] = clipPlane.x; - projectionMatrix.elements[6] = clipPlane.y; - projectionMatrix.elements[10] = clipPlane.z + 1 - clipBias; - projectionMatrix.elements[14] = clipPlane.w; - scope.visible = false; - const currentRenderTarget = renderer.getRenderTarget(); - const currentXrEnabled = renderer.xr.enabled; - const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate; - const currentToneMapping = renderer.toneMapping; - let isSRGB = false; - if ("outputColorSpace" in renderer) isSRGB = renderer.outputColorSpace === "srgb"; - else isSRGB = renderer.outputEncoding === 3001; - renderer.xr.enabled = false; - renderer.shadowMap.autoUpdate = false; - if ("outputColorSpace" in renderer) renderer.outputColorSpace = "srgb-linear"; - else renderer.outputEncoding = 3e3; - renderer.toneMapping = 0; - renderer.setRenderTarget(renderTarget); - renderer.state.buffers.depth.setMask(true); - if (renderer.autoClear === false) renderer.clear(); - renderer.render(scene, virtualCamera); - renderer.xr.enabled = currentXrEnabled; - renderer.shadowMap.autoUpdate = currentShadowAutoUpdate; - renderer.toneMapping = currentToneMapping; - if ("outputColorSpace" in renderer) renderer.outputColorSpace = isSRGB ? "srgb" : "srgb-linear"; - else renderer.outputEncoding = isSRGB ? 3001 : 3e3; - renderer.setRenderTarget(currentRenderTarget); - const viewport = camera.viewport; - if (viewport !== void 0) renderer.state.viewport(viewport); - scope.visible = true; - }; - this.getRenderTarget = function() { - return renderTarget; - }; - this.dispose = function() { - renderTarget.dispose(); - scope.material.dispose(); - }; - } - }; - let Reflector2 = _Reflector; - __publicField$46(Reflector2, "ReflectorShader", { - uniforms: { - color: { value: null }, - tDiffuse: { value: null }, - textureMatrix: { value: null } - }, - vertexShader: ` - uniform mat4 textureMatrix; - varying vec4 vUv; - - #include <common> - #include <logdepthbuf_pars_vertex> - - void main() { - - vUv = textureMatrix * vec4( position, 1.0 ); - - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - #include <logdepthbuf_vertex> - - }`, - fragmentShader: ` - uniform vec3 color; - uniform sampler2D tDiffuse; - varying vec4 vUv; - - #include <logdepthbuf_pars_fragment> - - float blendOverlay( float base, float blend ) { - - return( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) ); - - } - - vec3 blendOverlay( vec3 base, vec3 blend ) { - - return vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) ); - - } - - void main() { - - #include <logdepthbuf_fragment> - - vec4 base = texture2DProj( tDiffuse, vUv ); - gl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 ); - - #include <tonemapping_fragment> - #include <${version >= 154 ? "colorspace_fragment" : "encodings_fragment"}> - - }` - }); - return Reflector2; -})(); -//#endregion -//#region node_modules/three-stdlib/objects/Refractor.js -var __defProp$45 = Object.defineProperty; -var __defNormalProp$45 = (obj, key, value) => key in obj ? __defProp$45(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$45 = (obj, key, value) => { - __defNormalProp$45(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var Refractor = /* @__PURE__ */ (() => { - const _Refractor = class extends Mesh { - constructor(geometry, options = {}) { - super(geometry); - this.isRefractor = true; - this.type = "Refractor"; - this.camera = new PerspectiveCamera(); - const scope = this; - const color = options.color !== void 0 ? new Color(options.color) : new Color(8355711); - const textureWidth = options.textureWidth || 512; - const textureHeight = options.textureHeight || 512; - const clipBias = options.clipBias || 0; - const shader = options.shader || _Refractor.RefractorShader; - const multisample = options.multisample !== void 0 ? options.multisample : 4; - const virtualCamera = this.camera; - virtualCamera.matrixAutoUpdate = false; - virtualCamera.userData.refractor = true; - const refractorPlane = new Plane(); - const textureMatrix = new Matrix4(); - const renderTarget = new WebGLRenderTarget(textureWidth, textureHeight, { - samples: multisample, - type: HalfFloatType - }); - this.material = new ShaderMaterial({ - uniforms: UniformsUtils.clone(shader.uniforms), - vertexShader: shader.vertexShader, - fragmentShader: shader.fragmentShader, - transparent: true - }); - this.material.uniforms["color"].value = color; - this.material.uniforms["tDiffuse"].value = renderTarget.texture; - this.material.uniforms["textureMatrix"].value = textureMatrix; - const visible = function() { - const refractorWorldPosition = new Vector3(); - const cameraWorldPosition = new Vector3(); - const rotationMatrix = new Matrix4(); - const view = new Vector3(); - const normal = new Vector3(); - return function visible2(camera) { - refractorWorldPosition.setFromMatrixPosition(scope.matrixWorld); - cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld); - view.subVectors(refractorWorldPosition, cameraWorldPosition); - rotationMatrix.extractRotation(scope.matrixWorld); - normal.set(0, 0, 1); - normal.applyMatrix4(rotationMatrix); - return view.dot(normal) < 0; - }; - }(); - const updateRefractorPlane = function() { - const normal = new Vector3(); - const position = new Vector3(); - const quaternion = new Quaternion(); - const scale = new Vector3(); - return function updateRefractorPlane2() { - scope.matrixWorld.decompose(position, quaternion, scale); - normal.set(0, 0, 1).applyQuaternion(quaternion).normalize(); - normal.negate(); - refractorPlane.setFromNormalAndCoplanarPoint(normal, position); - }; - }(); - const updateVirtualCamera = function() { - const clipPlane = new Plane(); - const clipVector = new Vector4(); - const q = new Vector4(); - return function updateVirtualCamera2(camera) { - virtualCamera.matrixWorld.copy(camera.matrixWorld); - virtualCamera.matrixWorldInverse.copy(virtualCamera.matrixWorld).invert(); - virtualCamera.projectionMatrix.copy(camera.projectionMatrix); - virtualCamera.far = camera.far; - clipPlane.copy(refractorPlane); - clipPlane.applyMatrix4(virtualCamera.matrixWorldInverse); - clipVector.set(clipPlane.normal.x, clipPlane.normal.y, clipPlane.normal.z, clipPlane.constant); - const projectionMatrix = virtualCamera.projectionMatrix; - q.x = (Math.sign(clipVector.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0]; - q.y = (Math.sign(clipVector.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5]; - q.z = -1; - q.w = (1 + projectionMatrix.elements[10]) / projectionMatrix.elements[14]; - clipVector.multiplyScalar(2 / clipVector.dot(q)); - projectionMatrix.elements[2] = clipVector.x; - projectionMatrix.elements[6] = clipVector.y; - projectionMatrix.elements[10] = clipVector.z + 1 - clipBias; - projectionMatrix.elements[14] = clipVector.w; - }; - }(); - function updateTextureMatrix(camera) { - textureMatrix.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1); - textureMatrix.multiply(camera.projectionMatrix); - textureMatrix.multiply(camera.matrixWorldInverse); - textureMatrix.multiply(scope.matrixWorld); - } - function render(renderer, scene, camera) { - scope.visible = false; - const currentRenderTarget = renderer.getRenderTarget(); - const currentXrEnabled = renderer.xr.enabled; - const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate; - const currentToneMapping = renderer.toneMapping; - let isSRGB = false; - if ("outputColorSpace" in renderer) isSRGB = renderer.outputColorSpace === "srgb"; - else isSRGB = renderer.outputEncoding === 3001; - renderer.xr.enabled = false; - renderer.shadowMap.autoUpdate = false; - if ("outputColorSpace" in renderer) renderer.outputColorSpace = "srgb-linear"; - else renderer.outputEncoding = 3e3; - renderer.toneMapping = 0; - renderer.setRenderTarget(renderTarget); - if (renderer.autoClear === false) renderer.clear(); - renderer.render(scene, virtualCamera); - renderer.xr.enabled = currentXrEnabled; - renderer.shadowMap.autoUpdate = currentShadowAutoUpdate; - renderer.toneMapping = currentToneMapping; - renderer.setRenderTarget(currentRenderTarget); - if ("outputColorSpace" in renderer) renderer.outputColorSpace = isSRGB ? "srgb" : "srgb-linear"; - else renderer.outputEncoding = isSRGB ? 3001 : 3e3; - const viewport = camera.viewport; - if (viewport !== void 0) renderer.state.viewport(viewport); - scope.visible = true; - } - this.onBeforeRender = function(renderer, scene, camera) { - if (camera.userData.refractor === true) return; - if (!visible(camera) === true) return; - updateRefractorPlane(); - updateTextureMatrix(camera); - updateVirtualCamera(camera); - render(renderer, scene, camera); - }; - this.getRenderTarget = function() { - return renderTarget; - }; - this.dispose = function() { - renderTarget.dispose(); - scope.material.dispose(); - }; - } - }; - let Refractor2 = _Refractor; - __publicField$45(Refractor2, "RefractorShader", { - uniforms: { - color: { value: null }, - tDiffuse: { value: null }, - textureMatrix: { value: null } - }, - vertexShader: ` - - uniform mat4 textureMatrix; - - varying vec4 vUv; - - void main() { - - vUv = textureMatrix * vec4( position, 1.0 ); - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - }`, - fragmentShader: ` - - uniform vec3 color; - uniform sampler2D tDiffuse; - - varying vec4 vUv; - - float blendOverlay( float base, float blend ) { - - return( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) ); - - } - - vec3 blendOverlay( vec3 base, vec3 blend ) { - - return vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) ); - - } - - void main() { - - vec4 base = texture2DProj( tDiffuse, vUv ); - gl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 ); - - #include <tonemapping_fragment> - #include <${version >= 154 ? "colorspace_fragment" : "encodings_fragment"}> - - }` - }); - return Refractor2; -})(); -//#endregion -//#region node_modules/three-stdlib/objects/ShadowMesh.js -var _shadowMatrix = /* @__PURE__ */ new Matrix4(); -var ShadowMesh = class extends Mesh { - constructor(mesh) { - const shadowMaterial = new MeshBasicMaterial({ - color: 0, - transparent: true, - opacity: .6, - depthWrite: false, - stencilWrite: true, - stencilFunc: 514, - stencilRef: 0, - stencilZPass: IncrementStencilOp - }); - super(mesh.geometry, shadowMaterial); - this.isShadowMesh = true; - this.meshMatrix = mesh.matrixWorld; - this.frustumCulled = false; - this.matrixAutoUpdate = false; - } - update(plane, lightPosition4D) { - const dot = plane.normal.x * lightPosition4D.x + plane.normal.y * lightPosition4D.y + plane.normal.z * lightPosition4D.z + -plane.constant * lightPosition4D.w; - const sme = _shadowMatrix.elements; - sme[0] = dot - lightPosition4D.x * plane.normal.x; - sme[4] = -lightPosition4D.x * plane.normal.y; - sme[8] = -lightPosition4D.x * plane.normal.z; - sme[12] = -lightPosition4D.x * -plane.constant; - sme[1] = -lightPosition4D.y * plane.normal.x; - sme[5] = dot - lightPosition4D.y * plane.normal.y; - sme[9] = -lightPosition4D.y * plane.normal.z; - sme[13] = -lightPosition4D.y * -plane.constant; - sme[2] = -lightPosition4D.z * plane.normal.x; - sme[6] = -lightPosition4D.z * plane.normal.y; - sme[10] = dot - lightPosition4D.z * plane.normal.z; - sme[14] = -lightPosition4D.z * -plane.constant; - sme[3] = -lightPosition4D.w * plane.normal.x; - sme[7] = -lightPosition4D.w * plane.normal.y; - sme[11] = -lightPosition4D.w * plane.normal.z; - sme[15] = dot - lightPosition4D.w * -plane.constant; - this.matrix.multiplyMatrices(_shadowMatrix, this.meshMatrix); - } -}; -//#endregion -//#region node_modules/three-stdlib/objects/Lensflare.js -var Lensflare = /* @__PURE__ */ (() => { - class Lensflare2 extends Mesh { - constructor() { - super(Lensflare2.Geometry, new MeshBasicMaterial({ - opacity: 0, - transparent: true - })); - this.isLensflare = true; - this.type = "Lensflare"; - this.frustumCulled = false; - this.renderOrder = Infinity; - const positionScreen = new Vector3(); - const positionView = new Vector3(); - const tempMap = new Texture({ - width: 16, - height: 16 - }); - tempMap.isFramebufferTexture = true; - tempMap.magFilter = NearestFilter; - tempMap.minFilter = NearestFilter; - tempMap.generateMipmaps = false; - tempMap.needsUpdate = true; - const occlusionMap = new Texture({ - width: 16, - height: 16 - }); - occlusionMap.isFramebufferTexture = true; - occlusionMap.magFilter = NearestFilter; - occlusionMap.minFilter = NearestFilter; - occlusionMap.generateMipmaps = false; - occlusionMap.needsUpdate = true; - const geometry = Lensflare2.Geometry; - const material1a = new RawShaderMaterial({ - uniforms: { - scale: { value: null }, - screenPosition: { value: null } - }, - vertexShader: ` - - precision highp float; - - uniform vec3 screenPosition; - uniform vec2 scale; - - attribute vec3 position; - - void main() { - - gl_Position = vec4( position.xy * scale + screenPosition.xy, screenPosition.z, 1.0 ); - - }`, - fragmentShader: ` - - precision highp float; - - void main() { - - gl_FragColor = vec4( 1.0, 0.0, 1.0, 1.0 ); - - }`, - depthTest: true, - depthWrite: false, - transparent: false - }); - const material1b = new RawShaderMaterial({ - uniforms: { - map: { value: tempMap }, - scale: { value: null }, - screenPosition: { value: null } - }, - vertexShader: ` - - precision highp float; - - uniform vec3 screenPosition; - uniform vec2 scale; - - attribute vec3 position; - attribute vec2 uv; - - varying vec2 vUV; - - void main() { - - vUV = uv; - - gl_Position = vec4( position.xy * scale + screenPosition.xy, screenPosition.z, 1.0 ); - - }`, - fragmentShader: ` - - precision highp float; - - uniform sampler2D map; - - varying vec2 vUV; - - void main() { - - gl_FragColor = texture2D( map, vUV ); - - }`, - depthTest: false, - depthWrite: false, - transparent: false - }); - const mesh1 = new Mesh(geometry, material1a); - const elements = []; - const shader = LensflareElement.Shader; - const material2 = new RawShaderMaterial({ - uniforms: { - map: { value: null }, - occlusionMap: { value: occlusionMap }, - color: { value: new Color(16777215) }, - scale: { value: new Vector2() }, - screenPosition: { value: new Vector3() } - }, - vertexShader: shader.vertexShader, - fragmentShader: shader.fragmentShader, - blending: 2, - transparent: true, - depthWrite: false - }); - const mesh2 = new Mesh(geometry, material2); - this.addElement = function(element) { - elements.push(element); - }; - const scale = new Vector2(); - const screenPositionPixels = new Vector2(); - const validArea = new Box2(); - const viewport = new Vector4(); - this.onBeforeRender = function(renderer, scene, camera) { - renderer.getCurrentViewport(viewport); - const invAspect = viewport.w / viewport.z; - const halfViewportWidth = viewport.z / 2; - const halfViewportHeight = viewport.w / 2; - let size = 16 / viewport.w; - scale.set(size * invAspect, size); - validArea.min.set(viewport.x, viewport.y); - validArea.max.set(viewport.x + (viewport.z - 16), viewport.y + (viewport.w - 16)); - positionView.setFromMatrixPosition(this.matrixWorld); - positionView.applyMatrix4(camera.matrixWorldInverse); - if (positionView.z > 0) return; - positionScreen.copy(positionView).applyMatrix4(camera.projectionMatrix); - screenPositionPixels.x = viewport.x + positionScreen.x * halfViewportWidth + halfViewportWidth - 8; - screenPositionPixels.y = viewport.y + positionScreen.y * halfViewportHeight + halfViewportHeight - 8; - if (validArea.containsPoint(screenPositionPixels)) { - renderer.copyFramebufferToTexture(screenPositionPixels, tempMap); - let uniforms = material1a.uniforms; - uniforms["scale"].value = scale; - uniforms["screenPosition"].value = positionScreen; - renderer.renderBufferDirect(camera, null, geometry, material1a, mesh1, null); - renderer.copyFramebufferToTexture(screenPositionPixels, occlusionMap); - uniforms = material1b.uniforms; - uniforms["scale"].value = scale; - uniforms["screenPosition"].value = positionScreen; - renderer.renderBufferDirect(camera, null, geometry, material1b, mesh1, null); - const vecX = -positionScreen.x * 2; - const vecY = -positionScreen.y * 2; - for (let i = 0, l = elements.length; i < l; i++) { - const element = elements[i]; - const uniforms2 = material2.uniforms; - uniforms2["color"].value.copy(element.color); - uniforms2["map"].value = element.texture; - uniforms2["screenPosition"].value.x = positionScreen.x + vecX * element.distance; - uniforms2["screenPosition"].value.y = positionScreen.y + vecY * element.distance; - size = element.size / viewport.w; - const invAspect2 = viewport.w / viewport.z; - uniforms2["scale"].value.set(size * invAspect2, size); - material2.uniformsNeedUpdate = true; - renderer.renderBufferDirect(camera, null, geometry, material2, mesh2, null); - } - } - }; - this.dispose = function() { - material1a.dispose(); - material1b.dispose(); - material2.dispose(); - tempMap.dispose(); - occlusionMap.dispose(); - for (let i = 0, l = elements.length; i < l; i++) elements[i].texture.dispose(); - }; - } - } - const _geometry = new BufferGeometry(); - const interleavedBuffer = new InterleavedBuffer(new Float32Array([ - -1, - -1, - 0, - 0, - 0, - 1, - -1, - 0, - 1, - 0, - 1, - 1, - 0, - 1, - 1, - -1, - 1, - 0, - 0, - 1 - ]), 5); - _geometry.setIndex([ - 0, - 1, - 2, - 0, - 2, - 3 - ]); - _geometry.setAttribute("position", new InterleavedBufferAttribute(interleavedBuffer, 3, 0, false)); - _geometry.setAttribute("uv", new InterleavedBufferAttribute(interleavedBuffer, 2, 3, false)); - Lensflare2.Geometry = _geometry; - return Lensflare2; -})(); -var LensflareElement = /* @__PURE__ */ (() => { - class LensflareElement2 { - constructor(texture, size = 1, distance = 0, color = new Color(16777215)) { - this.texture = texture; - this.size = size; - this.distance = distance; - this.color = color; - } - } - LensflareElement2.Shader = { - uniforms: { - map: { value: null }, - occlusionMap: { value: null }, - color: { value: null }, - scale: { value: null }, - screenPosition: { value: null } - }, - vertexShader: ` - - precision highp float; - - uniform vec3 screenPosition; - uniform vec2 scale; - - uniform sampler2D occlusionMap; - - attribute vec3 position; - attribute vec2 uv; - - varying vec2 vUV; - varying float vVisibility; - - void main() { - - vUV = uv; - - vec2 pos = position.xy; - - vec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) ); - visibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) ); - visibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) ); - visibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) ); - visibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) ); - visibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) ); - visibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) ); - visibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) ); - visibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) ); - - vVisibility = visibility.r / 9.0; - vVisibility *= 1.0 - visibility.g / 9.0; - vVisibility *= visibility.b / 9.0; - - gl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 ); - - } - `, - fragmentShader: ` - - precision highp float; - - uniform sampler2D map; - uniform vec3 color; - - varying vec2 vUV; - varying float vVisibility; - - void main() { - - vec4 texture = texture2D( map, vUV ); - texture.a *= vVisibility; - gl_FragColor = texture; - gl_FragColor.rgb *= color; - - } - ` - }; - return LensflareElement2; -})(); -//#endregion -//#region node_modules/three-stdlib/objects/Water.js -var Water = class extends Mesh { - constructor(geometry, options = {}) { - super(geometry); - this.isWater = true; - const scope = this; - const textureWidth = options.textureWidth !== void 0 ? options.textureWidth : 512; - const textureHeight = options.textureHeight !== void 0 ? options.textureHeight : 512; - const clipBias = options.clipBias !== void 0 ? options.clipBias : 0; - const alpha = options.alpha !== void 0 ? options.alpha : 1; - const time = options.time !== void 0 ? options.time : 0; - const normalSampler = options.waterNormals !== void 0 ? options.waterNormals : null; - const sunDirection = options.sunDirection !== void 0 ? options.sunDirection : new Vector3(.70707, .70707, 0); - const sunColor = new Color(options.sunColor !== void 0 ? options.sunColor : 16777215); - const waterColor = new Color(options.waterColor !== void 0 ? options.waterColor : 8355711); - const eye = options.eye !== void 0 ? options.eye : new Vector3(0, 0, 0); - const distortionScale = options.distortionScale !== void 0 ? options.distortionScale : 20; - const side = options.side !== void 0 ? options.side : 0; - const fog = options.fog !== void 0 ? options.fog : false; - const mirrorPlane = new Plane(); - const normal = new Vector3(); - const mirrorWorldPosition = new Vector3(); - const cameraWorldPosition = new Vector3(); - const rotationMatrix = new Matrix4(); - const lookAtPosition = new Vector3(0, 0, -1); - const clipPlane = new Vector4(); - const view = new Vector3(); - const target = new Vector3(); - const q = new Vector4(); - const textureMatrix = new Matrix4(); - const mirrorCamera = new PerspectiveCamera(); - const renderTarget = new WebGLRenderTarget(textureWidth, textureHeight); - const mirrorShader = { - uniforms: UniformsUtils.merge([ - UniformsLib["fog"], - UniformsLib["lights"], - { - normalSampler: { value: null }, - mirrorSampler: { value: null }, - alpha: { value: 1 }, - time: { value: 0 }, - size: { value: 1 }, - distortionScale: { value: 20 }, - textureMatrix: { value: new Matrix4() }, - sunColor: { value: new Color(8355711) }, - sunDirection: { value: new Vector3(.70707, .70707, 0) }, - eye: { value: new Vector3() }, - waterColor: { value: new Color(5592405) } - } - ]), - vertexShader: ` - uniform mat4 textureMatrix; - uniform float time; - - varying vec4 mirrorCoord; - varying vec4 worldPosition; - - #include <common> - #include <fog_pars_vertex> - #include <shadowmap_pars_vertex> - #include <logdepthbuf_pars_vertex> - - void main() { - mirrorCoord = modelMatrix * vec4( position, 1.0 ); - worldPosition = mirrorCoord.xyzw; - mirrorCoord = textureMatrix * mirrorCoord; - vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 ); - gl_Position = projectionMatrix * mvPosition; - - #include <beginnormal_vertex> - #include <defaultnormal_vertex> - #include <logdepthbuf_vertex> - #include <fog_vertex> - #include <shadowmap_vertex> - }`, - fragmentShader: ` - uniform sampler2D mirrorSampler; - uniform float alpha; - uniform float time; - uniform float size; - uniform float distortionScale; - uniform sampler2D normalSampler; - uniform vec3 sunColor; - uniform vec3 sunDirection; - uniform vec3 eye; - uniform vec3 waterColor; - - varying vec4 mirrorCoord; - varying vec4 worldPosition; - - vec4 getNoise( vec2 uv ) { - vec2 uv0 = ( uv / 103.0 ) + vec2(time / 17.0, time / 29.0); - vec2 uv1 = uv / 107.0-vec2( time / -19.0, time / 31.0 ); - vec2 uv2 = uv / vec2( 8907.0, 9803.0 ) + vec2( time / 101.0, time / 97.0 ); - vec2 uv3 = uv / vec2( 1091.0, 1027.0 ) - vec2( time / 109.0, time / -113.0 ); - vec4 noise = texture2D( normalSampler, uv0 ) + - texture2D( normalSampler, uv1 ) + - texture2D( normalSampler, uv2 ) + - texture2D( normalSampler, uv3 ); - return noise * 0.5 - 1.0; - } - - void sunLight( const vec3 surfaceNormal, const vec3 eyeDirection, float shiny, float spec, float diffuse, inout vec3 diffuseColor, inout vec3 specularColor ) { - vec3 reflection = normalize( reflect( -sunDirection, surfaceNormal ) ); - float direction = max( 0.0, dot( eyeDirection, reflection ) ); - specularColor += pow( direction, shiny ) * sunColor * spec; - diffuseColor += max( dot( sunDirection, surfaceNormal ), 0.0 ) * sunColor * diffuse; - } - - #include <common> - #include <packing> - #include <bsdfs> - #include <fog_pars_fragment> - #include <logdepthbuf_pars_fragment> - #include <lights_pars_begin> - #include <shadowmap_pars_fragment> - #include <shadowmask_pars_fragment> - - void main() { - - #include <logdepthbuf_fragment> - vec4 noise = getNoise( worldPosition.xz * size ); - vec3 surfaceNormal = normalize( noise.xzy * vec3( 1.5, 1.0, 1.5 ) ); - - vec3 diffuseLight = vec3(0.0); - vec3 specularLight = vec3(0.0); - - vec3 worldToEye = eye-worldPosition.xyz; - vec3 eyeDirection = normalize( worldToEye ); - sunLight( surfaceNormal, eyeDirection, 100.0, 2.0, 0.5, diffuseLight, specularLight ); - - float distance = length(worldToEye); - - vec2 distortion = surfaceNormal.xz * ( 0.001 + 1.0 / distance ) * distortionScale; - vec3 reflectionSample = vec3( texture2D( mirrorSampler, mirrorCoord.xy / mirrorCoord.w + distortion ) ); - - float theta = max( dot( eyeDirection, surfaceNormal ), 0.0 ); - float rf0 = 0.3; - float reflectance = rf0 + ( 1.0 - rf0 ) * pow( ( 1.0 - theta ), 5.0 ); - vec3 scatter = max( 0.0, dot( surfaceNormal, eyeDirection ) ) * waterColor; - vec3 albedo = mix( ( sunColor * diffuseLight * 0.3 + scatter ) * getShadowMask(), ( vec3( 0.1 ) + reflectionSample * 0.9 + reflectionSample * specularLight ), reflectance); - vec3 outgoingLight = albedo; - gl_FragColor = vec4( outgoingLight, alpha ); - - #include <tonemapping_fragment> - #include <${version >= 154 ? "colorspace_fragment" : "encodings_fragment"}> - #include <fog_fragment> - }` - }; - const material = new ShaderMaterial({ - fragmentShader: mirrorShader.fragmentShader, - vertexShader: mirrorShader.vertexShader, - uniforms: UniformsUtils.clone(mirrorShader.uniforms), - lights: true, - side, - fog - }); - material.uniforms["mirrorSampler"].value = renderTarget.texture; - material.uniforms["textureMatrix"].value = textureMatrix; - material.uniforms["alpha"].value = alpha; - material.uniforms["time"].value = time; - material.uniforms["normalSampler"].value = normalSampler; - material.uniforms["sunColor"].value = sunColor; - material.uniforms["waterColor"].value = waterColor; - material.uniforms["sunDirection"].value = sunDirection; - material.uniforms["distortionScale"].value = distortionScale; - material.uniforms["eye"].value = eye; - scope.material = material; - scope.onBeforeRender = function(renderer, scene, camera) { - mirrorWorldPosition.setFromMatrixPosition(scope.matrixWorld); - cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld); - rotationMatrix.extractRotation(scope.matrixWorld); - normal.set(0, 0, 1); - normal.applyMatrix4(rotationMatrix); - view.subVectors(mirrorWorldPosition, cameraWorldPosition); - if (view.dot(normal) > 0) return; - view.reflect(normal).negate(); - view.add(mirrorWorldPosition); - rotationMatrix.extractRotation(camera.matrixWorld); - lookAtPosition.set(0, 0, -1); - lookAtPosition.applyMatrix4(rotationMatrix); - lookAtPosition.add(cameraWorldPosition); - target.subVectors(mirrorWorldPosition, lookAtPosition); - target.reflect(normal).negate(); - target.add(mirrorWorldPosition); - mirrorCamera.position.copy(view); - mirrorCamera.up.set(0, 1, 0); - mirrorCamera.up.applyMatrix4(rotationMatrix); - mirrorCamera.up.reflect(normal); - mirrorCamera.lookAt(target); - mirrorCamera.far = camera.far; - mirrorCamera.updateMatrixWorld(); - mirrorCamera.projectionMatrix.copy(camera.projectionMatrix); - textureMatrix.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1); - textureMatrix.multiply(mirrorCamera.projectionMatrix); - textureMatrix.multiply(mirrorCamera.matrixWorldInverse); - mirrorPlane.setFromNormalAndCoplanarPoint(normal, mirrorWorldPosition); - mirrorPlane.applyMatrix4(mirrorCamera.matrixWorldInverse); - clipPlane.set(mirrorPlane.normal.x, mirrorPlane.normal.y, mirrorPlane.normal.z, mirrorPlane.constant); - const projectionMatrix = mirrorCamera.projectionMatrix; - q.x = (Math.sign(clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0]; - q.y = (Math.sign(clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5]; - q.z = -1; - q.w = (1 + projectionMatrix.elements[10]) / projectionMatrix.elements[14]; - clipPlane.multiplyScalar(2 / clipPlane.dot(q)); - projectionMatrix.elements[2] = clipPlane.x; - projectionMatrix.elements[6] = clipPlane.y; - projectionMatrix.elements[10] = clipPlane.z + 1 - clipBias; - projectionMatrix.elements[14] = clipPlane.w; - eye.setFromMatrixPosition(camera.matrixWorld); - const currentRenderTarget = renderer.getRenderTarget(); - const currentXrEnabled = renderer.xr.enabled; - const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate; - scope.visible = false; - renderer.xr.enabled = false; - renderer.shadowMap.autoUpdate = false; - renderer.setRenderTarget(renderTarget); - renderer.state.buffers.depth.setMask(true); - if (renderer.autoClear === false) renderer.clear(); - renderer.render(scene, mirrorCamera); - scope.visible = true; - renderer.xr.enabled = currentXrEnabled; - renderer.shadowMap.autoUpdate = currentShadowAutoUpdate; - renderer.setRenderTarget(currentRenderTarget); - const viewport = camera.viewport; - if (viewport !== void 0) renderer.state.viewport(viewport); - }; - } -}; -//#endregion -//#region node_modules/three-stdlib/objects/MarchingCubes.js -var MarchingCubes = class extends Mesh { - constructor(resolution, material, enableUvs = false, enableColors = false, maxPolyCount = 1e4) { - const geometry = new BufferGeometry(); - super(geometry, material); - this.isMarchingCubes = true; - const scope = this; - const vlist = new Float32Array(36); - const nlist = new Float32Array(36); - const clist = new Float32Array(36); - this.enableUvs = enableUvs; - this.enableColors = enableColors; - this.init = function(resolution2) { - this.resolution = resolution2; - this.isolation = 80; - this.size = resolution2; - this.size2 = this.size * this.size; - this.size3 = this.size2 * this.size; - this.halfsize = this.size / 2; - this.delta = 2 / this.size; - this.yd = this.size; - this.zd = this.size2; - this.field = new Float32Array(this.size3); - this.normal_cache = new Float32Array(this.size3 * 3); - this.palette = new Float32Array(this.size3 * 3); - this.count = 0; - const maxVertexCount = maxPolyCount * 3; - this.positionArray = new Float32Array(maxVertexCount * 3); - const positionAttribute = new BufferAttribute(this.positionArray, 3); - positionAttribute.setUsage(DynamicDrawUsage); - geometry.setAttribute("position", positionAttribute); - this.normalArray = new Float32Array(maxVertexCount * 3); - const normalAttribute = new BufferAttribute(this.normalArray, 3); - normalAttribute.setUsage(DynamicDrawUsage); - geometry.setAttribute("normal", normalAttribute); - if (this.enableUvs) { - this.uvArray = new Float32Array(maxVertexCount * 2); - const uvAttribute = new BufferAttribute(this.uvArray, 2); - uvAttribute.setUsage(DynamicDrawUsage); - geometry.setAttribute("uv", uvAttribute); - } - if (this.enableColors) { - this.colorArray = new Float32Array(maxVertexCount * 3); - const colorAttribute = new BufferAttribute(this.colorArray, 3); - colorAttribute.setUsage(DynamicDrawUsage); - geometry.setAttribute("color", colorAttribute); - } - geometry.boundingSphere = new Sphere(new Vector3(), 1); - }; - function lerp(a, b, t) { - return a + (b - a) * t; - } - function VIntX(q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2) { - const mu = (isol - valp1) / (valp2 - valp1), nc = scope.normal_cache; - vlist[offset + 0] = x + mu * scope.delta; - vlist[offset + 1] = y; - vlist[offset + 2] = z; - nlist[offset + 0] = lerp(nc[q + 0], nc[q + 3], mu); - nlist[offset + 1] = lerp(nc[q + 1], nc[q + 4], mu); - nlist[offset + 2] = lerp(nc[q + 2], nc[q + 5], mu); - clist[offset + 0] = lerp(scope.palette[c_offset1 * 3 + 0], scope.palette[c_offset2 * 3 + 0], mu); - clist[offset + 1] = lerp(scope.palette[c_offset1 * 3 + 1], scope.palette[c_offset2 * 3 + 1], mu); - clist[offset + 2] = lerp(scope.palette[c_offset1 * 3 + 2], scope.palette[c_offset2 * 3 + 2], mu); - } - function VIntY(q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2) { - const mu = (isol - valp1) / (valp2 - valp1), nc = scope.normal_cache; - vlist[offset + 0] = x; - vlist[offset + 1] = y + mu * scope.delta; - vlist[offset + 2] = z; - const q2 = q + scope.yd * 3; - nlist[offset + 0] = lerp(nc[q + 0], nc[q2 + 0], mu); - nlist[offset + 1] = lerp(nc[q + 1], nc[q2 + 1], mu); - nlist[offset + 2] = lerp(nc[q + 2], nc[q2 + 2], mu); - clist[offset + 0] = lerp(scope.palette[c_offset1 * 3 + 0], scope.palette[c_offset2 * 3 + 0], mu); - clist[offset + 1] = lerp(scope.palette[c_offset1 * 3 + 1], scope.palette[c_offset2 * 3 + 1], mu); - clist[offset + 2] = lerp(scope.palette[c_offset1 * 3 + 2], scope.palette[c_offset2 * 3 + 2], mu); - } - function VIntZ(q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2) { - const mu = (isol - valp1) / (valp2 - valp1), nc = scope.normal_cache; - vlist[offset + 0] = x; - vlist[offset + 1] = y; - vlist[offset + 2] = z + mu * scope.delta; - const q2 = q + scope.zd * 3; - nlist[offset + 0] = lerp(nc[q + 0], nc[q2 + 0], mu); - nlist[offset + 1] = lerp(nc[q + 1], nc[q2 + 1], mu); - nlist[offset + 2] = lerp(nc[q + 2], nc[q2 + 2], mu); - clist[offset + 0] = lerp(scope.palette[c_offset1 * 3 + 0], scope.palette[c_offset2 * 3 + 0], mu); - clist[offset + 1] = lerp(scope.palette[c_offset1 * 3 + 1], scope.palette[c_offset2 * 3 + 1], mu); - clist[offset + 2] = lerp(scope.palette[c_offset1 * 3 + 2], scope.palette[c_offset2 * 3 + 2], mu); - } - function compNorm(q) { - const q3 = q * 3; - if (scope.normal_cache[q3] === 0) { - scope.normal_cache[q3 + 0] = scope.field[q - 1] - scope.field[q + 1]; - scope.normal_cache[q3 + 1] = scope.field[q - scope.yd] - scope.field[q + scope.yd]; - scope.normal_cache[q3 + 2] = scope.field[q - scope.zd] - scope.field[q + scope.zd]; - } - } - function polygonize(fx, fy, fz, q, isol) { - const q1 = q + 1, qy = q + scope.yd, qz = q + scope.zd, q1y = q1 + scope.yd, q1z = q1 + scope.zd, qyz = q + scope.yd + scope.zd, q1yz = q1 + scope.yd + scope.zd; - let cubeindex = 0; - const field0 = scope.field[q], field1 = scope.field[q1], field2 = scope.field[qy], field3 = scope.field[q1y], field4 = scope.field[qz], field5 = scope.field[q1z], field6 = scope.field[qyz], field7 = scope.field[q1yz]; - if (field0 < isol) cubeindex |= 1; - if (field1 < isol) cubeindex |= 2; - if (field2 < isol) cubeindex |= 8; - if (field3 < isol) cubeindex |= 4; - if (field4 < isol) cubeindex |= 16; - if (field5 < isol) cubeindex |= 32; - if (field6 < isol) cubeindex |= 128; - if (field7 < isol) cubeindex |= 64; - const bits = edgeTable[cubeindex]; - if (bits === 0) return 0; - const d = scope.delta, fx2 = fx + d, fy2 = fy + d, fz2 = fz + d; - if (bits & 1) { - compNorm(q); - compNorm(q1); - VIntX(q * 3, 0, isol, fx, fy, fz, field0, field1, q, q1); - } - if (bits & 2) { - compNorm(q1); - compNorm(q1y); - VIntY(q1 * 3, 3, isol, fx2, fy, fz, field1, field3, q1, q1y); - } - if (bits & 4) { - compNorm(qy); - compNorm(q1y); - VIntX(qy * 3, 6, isol, fx, fy2, fz, field2, field3, qy, q1y); - } - if (bits & 8) { - compNorm(q); - compNorm(qy); - VIntY(q * 3, 9, isol, fx, fy, fz, field0, field2, q, qy); - } - if (bits & 16) { - compNorm(qz); - compNorm(q1z); - VIntX(qz * 3, 12, isol, fx, fy, fz2, field4, field5, qz, q1z); - } - if (bits & 32) { - compNorm(q1z); - compNorm(q1yz); - VIntY(q1z * 3, 15, isol, fx2, fy, fz2, field5, field7, q1z, q1yz); - } - if (bits & 64) { - compNorm(qyz); - compNorm(q1yz); - VIntX(qyz * 3, 18, isol, fx, fy2, fz2, field6, field7, qyz, q1yz); - } - if (bits & 128) { - compNorm(qz); - compNorm(qyz); - VIntY(qz * 3, 21, isol, fx, fy, fz2, field4, field6, qz, qyz); - } - if (bits & 256) { - compNorm(q); - compNorm(qz); - VIntZ(q * 3, 24, isol, fx, fy, fz, field0, field4, q, qz); - } - if (bits & 512) { - compNorm(q1); - compNorm(q1z); - VIntZ(q1 * 3, 27, isol, fx2, fy, fz, field1, field5, q1, q1z); - } - if (bits & 1024) { - compNorm(q1y); - compNorm(q1yz); - VIntZ(q1y * 3, 30, isol, fx2, fy2, fz, field3, field7, q1y, q1yz); - } - if (bits & 2048) { - compNorm(qy); - compNorm(qyz); - VIntZ(qy * 3, 33, isol, fx, fy2, fz, field2, field6, qy, qyz); - } - cubeindex <<= 4; - let o1, o2, o3, numtris = 0, i = 0; - while (triTable[cubeindex + i] != -1) { - o1 = cubeindex + i; - o2 = o1 + 1; - o3 = o1 + 2; - posnormtriv(vlist, nlist, clist, 3 * triTable[o1], 3 * triTable[o2], 3 * triTable[o3]); - i += 3; - numtris++; - } - return numtris; - } - function posnormtriv(pos, norm, colors, o1, o2, o3) { - const c = scope.count * 3; - scope.positionArray[c + 0] = pos[o1]; - scope.positionArray[c + 1] = pos[o1 + 1]; - scope.positionArray[c + 2] = pos[o1 + 2]; - scope.positionArray[c + 3] = pos[o2]; - scope.positionArray[c + 4] = pos[o2 + 1]; - scope.positionArray[c + 5] = pos[o2 + 2]; - scope.positionArray[c + 6] = pos[o3]; - scope.positionArray[c + 7] = pos[o3 + 1]; - scope.positionArray[c + 8] = pos[o3 + 2]; - if (scope.material.flatShading === true) { - const nx = (norm[o1 + 0] + norm[o2 + 0] + norm[o3 + 0]) / 3; - const ny = (norm[o1 + 1] + norm[o2 + 1] + norm[o3 + 1]) / 3; - const nz = (norm[o1 + 2] + norm[o2 + 2] + norm[o3 + 2]) / 3; - scope.normalArray[c + 0] = nx; - scope.normalArray[c + 1] = ny; - scope.normalArray[c + 2] = nz; - scope.normalArray[c + 3] = nx; - scope.normalArray[c + 4] = ny; - scope.normalArray[c + 5] = nz; - scope.normalArray[c + 6] = nx; - scope.normalArray[c + 7] = ny; - scope.normalArray[c + 8] = nz; - } else { - scope.normalArray[c + 0] = norm[o1 + 0]; - scope.normalArray[c + 1] = norm[o1 + 1]; - scope.normalArray[c + 2] = norm[o1 + 2]; - scope.normalArray[c + 3] = norm[o2 + 0]; - scope.normalArray[c + 4] = norm[o2 + 1]; - scope.normalArray[c + 5] = norm[o2 + 2]; - scope.normalArray[c + 6] = norm[o3 + 0]; - scope.normalArray[c + 7] = norm[o3 + 1]; - scope.normalArray[c + 8] = norm[o3 + 2]; - } - if (scope.enableUvs) { - const d = scope.count * 2; - scope.uvArray[d + 0] = pos[o1 + 0]; - scope.uvArray[d + 1] = pos[o1 + 2]; - scope.uvArray[d + 2] = pos[o2 + 0]; - scope.uvArray[d + 3] = pos[o2 + 2]; - scope.uvArray[d + 4] = pos[o3 + 0]; - scope.uvArray[d + 5] = pos[o3 + 2]; - } - if (scope.enableColors) { - scope.colorArray[c + 0] = colors[o1 + 0]; - scope.colorArray[c + 1] = colors[o1 + 1]; - scope.colorArray[c + 2] = colors[o1 + 2]; - scope.colorArray[c + 3] = colors[o2 + 0]; - scope.colorArray[c + 4] = colors[o2 + 1]; - scope.colorArray[c + 5] = colors[o2 + 2]; - scope.colorArray[c + 6] = colors[o3 + 0]; - scope.colorArray[c + 7] = colors[o3 + 1]; - scope.colorArray[c + 8] = colors[o3 + 2]; - } - scope.count += 3; - } - this.addBall = function(ballx, bally, ballz, strength, subtract, colors) { - const sign = Math.sign(strength); - strength = Math.abs(strength); - const userDefineColor = !(colors === void 0 || colors === null); - let ballColor = new Color(ballx, bally, ballz); - if (userDefineColor) try { - ballColor = colors instanceof Color ? colors : Array.isArray(colors) ? new Color(Math.min(Math.abs(colors[0]), 1), Math.min(Math.abs(colors[1]), 1), Math.min(Math.abs(colors[2]), 1)) : new Color(colors); - } catch (err) { - ballColor = new Color(ballx, bally, ballz); - } - const radius = this.size * Math.sqrt(strength / subtract), zs = ballz * this.size, ys = bally * this.size, xs = ballx * this.size; - let min_z = Math.floor(zs - radius); - if (min_z < 1) min_z = 1; - let max_z = Math.floor(zs + radius); - if (max_z > this.size - 1) max_z = this.size - 1; - let min_y = Math.floor(ys - radius); - if (min_y < 1) min_y = 1; - let max_y = Math.floor(ys + radius); - if (max_y > this.size - 1) max_y = this.size - 1; - let min_x = Math.floor(xs - radius); - if (min_x < 1) min_x = 1; - let max_x = Math.floor(xs + radius); - if (max_x > this.size - 1) max_x = this.size - 1; - let x, y, z, y_offset, z_offset, fx, fy, fz, fz2, fy2, val; - for (z = min_z; z < max_z; z++) { - z_offset = this.size2 * z; - fz = z / this.size - ballz; - fz2 = fz * fz; - for (y = min_y; y < max_y; y++) { - y_offset = z_offset + this.size * y; - fy = y / this.size - bally; - fy2 = fy * fy; - for (x = min_x; x < max_x; x++) { - fx = x / this.size - ballx; - val = strength / (1e-6 + fx * fx + fy2 + fz2) - subtract; - if (val > 0) { - this.field[y_offset + x] += val * sign; - const ratio = Math.sqrt((x - xs) * (x - xs) + (y - ys) * (y - ys) + (z - zs) * (z - zs)) / radius; - const contrib = 1 - ratio * ratio * ratio * (ratio * (ratio * 6 - 15) + 10); - this.palette[(y_offset + x) * 3 + 0] += ballColor.r * contrib; - this.palette[(y_offset + x) * 3 + 1] += ballColor.g * contrib; - this.palette[(y_offset + x) * 3 + 2] += ballColor.b * contrib; - } - } - } - } - }; - this.addPlaneX = function(strength, subtract) { - const size = this.size, yd = this.yd, zd = this.zd, field = this.field; - let x, y, z, xx, val, xdiv, cxy, dist = size * Math.sqrt(strength / subtract); - if (dist > size) dist = size; - for (x = 0; x < dist; x++) { - xdiv = x / size; - xx = xdiv * xdiv; - val = strength / (1e-4 + xx) - subtract; - if (val > 0) for (y = 0; y < size; y++) { - cxy = x + y * yd; - for (z = 0; z < size; z++) field[zd * z + cxy] += val; - } - } - }; - this.addPlaneY = function(strength, subtract) { - const size = this.size, yd = this.yd, zd = this.zd, field = this.field; - let x, y, z, yy, val, ydiv, cy, cxy, dist = size * Math.sqrt(strength / subtract); - if (dist > size) dist = size; - for (y = 0; y < dist; y++) { - ydiv = y / size; - yy = ydiv * ydiv; - val = strength / (1e-4 + yy) - subtract; - if (val > 0) { - cy = y * yd; - for (x = 0; x < size; x++) { - cxy = cy + x; - for (z = 0; z < size; z++) field[zd * z + cxy] += val; - } - } - } - }; - this.addPlaneZ = function(strength, subtract) { - const size = this.size, yd = this.yd, zd = this.zd, field = this.field; - let x, y, z, zz, val, zdiv, cz, cyz, dist = size * Math.sqrt(strength / subtract); - if (dist > size) dist = size; - for (z = 0; z < dist; z++) { - zdiv = z / size; - zz = zdiv * zdiv; - val = strength / (1e-4 + zz) - subtract; - if (val > 0) { - cz = zd * z; - for (y = 0; y < size; y++) { - cyz = cz + y * yd; - for (x = 0; x < size; x++) field[cyz + x] += val; - } - } - } - }; - this.setCell = function(x, y, z, value) { - const index = this.size2 * z + this.size * y + x; - this.field[index] = value; - }; - this.getCell = function(x, y, z) { - const index = this.size2 * z + this.size * y + x; - return this.field[index]; - }; - this.blur = function(intensity = 1) { - const field = this.field; - const fieldCopy = field.slice(); - const size = this.size; - const size2 = this.size2; - for (let x = 0; x < size; x++) for (let y = 0; y < size; y++) for (let z = 0; z < size; z++) { - const index = size2 * z + size * y + x; - let val = fieldCopy[index]; - let count = 1; - for (let x2 = -1; x2 <= 1; x2 += 2) { - const x3 = x2 + x; - if (x3 < 0 || x3 >= size) continue; - for (let y2 = -1; y2 <= 1; y2 += 2) { - const y3 = y2 + y; - if (y3 < 0 || y3 >= size) continue; - for (let z2 = -1; z2 <= 1; z2 += 2) { - const z3 = z2 + z; - if (z3 < 0 || z3 >= size) continue; - const val2 = fieldCopy[size2 * z3 + size * y3 + x3]; - count++; - val += intensity * (val2 - val) / count; - } - } - } - field[index] = val; - } - }; - this.reset = function() { - for (let i = 0; i < this.size3; i++) { - this.normal_cache[i * 3] = 0; - this.field[i] = 0; - this.palette[i * 3] = this.palette[i * 3 + 1] = this.palette[i * 3 + 2] = 0; - } - }; - this.update = function() { - this.count = 0; - const smin2 = this.size - 2; - for (let z = 1; z < smin2; z++) { - const z_offset = this.size2 * z; - const fz = (z - this.halfsize) / this.halfsize; - for (let y = 1; y < smin2; y++) { - const y_offset = z_offset + this.size * y; - const fy = (y - this.halfsize) / this.halfsize; - for (let x = 1; x < smin2; x++) polygonize((x - this.halfsize) / this.halfsize, fy, fz, y_offset + x, this.isolation); - } - } - this.geometry.setDrawRange(0, this.count); - geometry.getAttribute("position").needsUpdate = true; - geometry.getAttribute("normal").needsUpdate = true; - if (this.enableUvs) geometry.getAttribute("uv").needsUpdate = true; - if (this.enableColors) geometry.getAttribute("color").needsUpdate = true; - if (this.count / 3 > maxPolyCount) console.warn("THREE.MarchingCubes: Geometry buffers too small for rendering. Please create an instance with a higher poly count."); - }; - this.init(resolution); - } -}; -var edgeTable = new Int32Array([ - 0, - 265, - 515, - 778, - 1030, - 1295, - 1541, - 1804, - 2060, - 2309, - 2575, - 2822, - 3082, - 3331, - 3593, - 3840, - 400, - 153, - 915, - 666, - 1430, - 1183, - 1941, - 1692, - 2460, - 2197, - 2975, - 2710, - 3482, - 3219, - 3993, - 3728, - 560, - 825, - 51, - 314, - 1590, - 1855, - 1077, - 1340, - 2620, - 2869, - 2111, - 2358, - 3642, - 3891, - 3129, - 3376, - 928, - 681, - 419, - 170, - 1958, - 1711, - 1445, - 1196, - 2988, - 2725, - 2479, - 2214, - 4010, - 3747, - 3497, - 3232, - 1120, - 1385, - 1635, - 1898, - 102, - 367, - 613, - 876, - 3180, - 3429, - 3695, - 3942, - 2154, - 2403, - 2665, - 2912, - 1520, - 1273, - 2035, - 1786, - 502, - 255, - 1013, - 764, - 3580, - 3317, - 4095, - 3830, - 2554, - 2291, - 3065, - 2800, - 1616, - 1881, - 1107, - 1370, - 598, - 863, - 85, - 348, - 3676, - 3925, - 3167, - 3414, - 2650, - 2899, - 2137, - 2384, - 1984, - 1737, - 1475, - 1226, - 966, - 719, - 453, - 204, - 4044, - 3781, - 3535, - 3270, - 3018, - 2755, - 2505, - 2240, - 2240, - 2505, - 2755, - 3018, - 3270, - 3535, - 3781, - 4044, - 204, - 453, - 719, - 966, - 1226, - 1475, - 1737, - 1984, - 2384, - 2137, - 2899, - 2650, - 3414, - 3167, - 3925, - 3676, - 348, - 85, - 863, - 598, - 1370, - 1107, - 1881, - 1616, - 2800, - 3065, - 2291, - 2554, - 3830, - 4095, - 3317, - 3580, - 764, - 1013, - 255, - 502, - 1786, - 2035, - 1273, - 1520, - 2912, - 2665, - 2403, - 2154, - 3942, - 3695, - 3429, - 3180, - 876, - 613, - 367, - 102, - 1898, - 1635, - 1385, - 1120, - 3232, - 3497, - 3747, - 4010, - 2214, - 2479, - 2725, - 2988, - 1196, - 1445, - 1711, - 1958, - 170, - 419, - 681, - 928, - 3376, - 3129, - 3891, - 3642, - 2358, - 2111, - 2869, - 2620, - 1340, - 1077, - 1855, - 1590, - 314, - 51, - 825, - 560, - 3728, - 3993, - 3219, - 3482, - 2710, - 2975, - 2197, - 2460, - 1692, - 1941, - 1183, - 1430, - 666, - 915, - 153, - 400, - 3840, - 3593, - 3331, - 3082, - 2822, - 2575, - 2309, - 2060, - 1804, - 1541, - 1295, - 1030, - 778, - 515, - 265, - 0 -]); -var triTable = new Int32Array([ - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 8, - 3, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 1, - 9, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 8, - 3, - 9, - 8, - 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 2, - 10, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 8, - 3, - 1, - 2, - 10, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 9, - 2, - 10, - 0, - 2, - 9, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2, - 8, - 3, - 2, - 10, - 8, - 10, - 9, - 8, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3, - 11, - 2, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 11, - 2, - 8, - 11, - 0, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 9, - 0, - 2, - 3, - 11, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 11, - 2, - 1, - 9, - 11, - 9, - 8, - 11, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3, - 10, - 1, - 11, - 10, - 3, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 10, - 1, - 0, - 8, - 10, - 8, - 11, - 10, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3, - 9, - 0, - 3, - 11, - 9, - 11, - 10, - 9, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 9, - 8, - 10, - 10, - 8, - 11, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4, - 7, - 8, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4, - 3, - 0, - 7, - 3, - 4, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 1, - 9, - 8, - 4, - 7, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4, - 1, - 9, - 4, - 7, - 1, - 7, - 3, - 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 2, - 10, - 8, - 4, - 7, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3, - 4, - 7, - 3, - 0, - 4, - 1, - 2, - 10, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 9, - 2, - 10, - 9, - 0, - 2, - 8, - 4, - 7, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2, - 10, - 9, - 2, - 9, - 7, - 2, - 7, - 3, - 7, - 9, - 4, - -1, - -1, - -1, - -1, - 8, - 4, - 7, - 3, - 11, - 2, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 11, - 4, - 7, - 11, - 2, - 4, - 2, - 0, - 4, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 9, - 0, - 1, - 8, - 4, - 7, - 2, - 3, - 11, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4, - 7, - 11, - 9, - 4, - 11, - 9, - 11, - 2, - 9, - 2, - 1, - -1, - -1, - -1, - -1, - 3, - 10, - 1, - 3, - 11, - 10, - 7, - 8, - 4, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 11, - 10, - 1, - 4, - 11, - 1, - 0, - 4, - 7, - 11, - 4, - -1, - -1, - -1, - -1, - 4, - 7, - 8, - 9, - 0, - 11, - 9, - 11, - 10, - 11, - 0, - 3, - -1, - -1, - -1, - -1, - 4, - 7, - 11, - 4, - 11, - 9, - 9, - 11, - 10, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 9, - 5, - 4, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 9, - 5, - 4, - 0, - 8, - 3, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 5, - 4, - 1, - 5, - 0, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8, - 5, - 4, - 8, - 3, - 5, - 3, - 1, - 5, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 2, - 10, - 9, - 5, - 4, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3, - 0, - 8, - 1, - 2, - 10, - 4, - 9, - 5, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5, - 2, - 10, - 5, - 4, - 2, - 4, - 0, - 2, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2, - 10, - 5, - 3, - 2, - 5, - 3, - 5, - 4, - 3, - 4, - 8, - -1, - -1, - -1, - -1, - 9, - 5, - 4, - 2, - 3, - 11, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 11, - 2, - 0, - 8, - 11, - 4, - 9, - 5, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 5, - 4, - 0, - 1, - 5, - 2, - 3, - 11, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2, - 1, - 5, - 2, - 5, - 8, - 2, - 8, - 11, - 4, - 8, - 5, - -1, - -1, - -1, - -1, - 10, - 3, - 11, - 10, - 1, - 3, - 9, - 5, - 4, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4, - 9, - 5, - 0, - 8, - 1, - 8, - 10, - 1, - 8, - 11, - 10, - -1, - -1, - -1, - -1, - 5, - 4, - 0, - 5, - 0, - 11, - 5, - 11, - 10, - 11, - 0, - 3, - -1, - -1, - -1, - -1, - 5, - 4, - 8, - 5, - 8, - 10, - 10, - 8, - 11, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 9, - 7, - 8, - 5, - 7, - 9, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 9, - 3, - 0, - 9, - 5, - 3, - 5, - 7, - 3, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 7, - 8, - 0, - 1, - 7, - 1, - 5, - 7, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 5, - 3, - 3, - 5, - 7, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 9, - 7, - 8, - 9, - 5, - 7, - 10, - 1, - 2, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 10, - 1, - 2, - 9, - 5, - 0, - 5, - 3, - 0, - 5, - 7, - 3, - -1, - -1, - -1, - -1, - 8, - 0, - 2, - 8, - 2, - 5, - 8, - 5, - 7, - 10, - 5, - 2, - -1, - -1, - -1, - -1, - 2, - 10, - 5, - 2, - 5, - 3, - 3, - 5, - 7, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7, - 9, - 5, - 7, - 8, - 9, - 3, - 11, - 2, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 9, - 5, - 7, - 9, - 7, - 2, - 9, - 2, - 0, - 2, - 7, - 11, - -1, - -1, - -1, - -1, - 2, - 3, - 11, - 0, - 1, - 8, - 1, - 7, - 8, - 1, - 5, - 7, - -1, - -1, - -1, - -1, - 11, - 2, - 1, - 11, - 1, - 7, - 7, - 1, - 5, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 9, - 5, - 8, - 8, - 5, - 7, - 10, - 1, - 3, - 10, - 3, - 11, - -1, - -1, - -1, - -1, - 5, - 7, - 0, - 5, - 0, - 9, - 7, - 11, - 0, - 1, - 0, - 10, - 11, - 10, - 0, - -1, - 11, - 10, - 0, - 11, - 0, - 3, - 10, - 5, - 0, - 8, - 0, - 7, - 5, - 7, - 0, - -1, - 11, - 10, - 5, - 7, - 11, - 5, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 10, - 6, - 5, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 8, - 3, - 5, - 10, - 6, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 9, - 0, - 1, - 5, - 10, - 6, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 8, - 3, - 1, - 9, - 8, - 5, - 10, - 6, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 6, - 5, - 2, - 6, - 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 6, - 5, - 1, - 2, - 6, - 3, - 0, - 8, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 9, - 6, - 5, - 9, - 0, - 6, - 0, - 2, - 6, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5, - 9, - 8, - 5, - 8, - 2, - 5, - 2, - 6, - 3, - 2, - 8, - -1, - -1, - -1, - -1, - 2, - 3, - 11, - 10, - 6, - 5, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 11, - 0, - 8, - 11, - 2, - 0, - 10, - 6, - 5, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 1, - 9, - 2, - 3, - 11, - 5, - 10, - 6, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5, - 10, - 6, - 1, - 9, - 2, - 9, - 11, - 2, - 9, - 8, - 11, - -1, - -1, - -1, - -1, - 6, - 3, - 11, - 6, - 5, - 3, - 5, - 1, - 3, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 8, - 11, - 0, - 11, - 5, - 0, - 5, - 1, - 5, - 11, - 6, - -1, - -1, - -1, - -1, - 3, - 11, - 6, - 0, - 3, - 6, - 0, - 6, - 5, - 0, - 5, - 9, - -1, - -1, - -1, - -1, - 6, - 5, - 9, - 6, - 9, - 11, - 11, - 9, - 8, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5, - 10, - 6, - 4, - 7, - 8, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4, - 3, - 0, - 4, - 7, - 3, - 6, - 5, - 10, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 9, - 0, - 5, - 10, - 6, - 8, - 4, - 7, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 10, - 6, - 5, - 1, - 9, - 7, - 1, - 7, - 3, - 7, - 9, - 4, - -1, - -1, - -1, - -1, - 6, - 1, - 2, - 6, - 5, - 1, - 4, - 7, - 8, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 2, - 5, - 5, - 2, - 6, - 3, - 0, - 4, - 3, - 4, - 7, - -1, - -1, - -1, - -1, - 8, - 4, - 7, - 9, - 0, - 5, - 0, - 6, - 5, - 0, - 2, - 6, - -1, - -1, - -1, - -1, - 7, - 3, - 9, - 7, - 9, - 4, - 3, - 2, - 9, - 5, - 9, - 6, - 2, - 6, - 9, - -1, - 3, - 11, - 2, - 7, - 8, - 4, - 10, - 6, - 5, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5, - 10, - 6, - 4, - 7, - 2, - 4, - 2, - 0, - 2, - 7, - 11, - -1, - -1, - -1, - -1, - 0, - 1, - 9, - 4, - 7, - 8, - 2, - 3, - 11, - 5, - 10, - 6, - -1, - -1, - -1, - -1, - 9, - 2, - 1, - 9, - 11, - 2, - 9, - 4, - 11, - 7, - 11, - 4, - 5, - 10, - 6, - -1, - 8, - 4, - 7, - 3, - 11, - 5, - 3, - 5, - 1, - 5, - 11, - 6, - -1, - -1, - -1, - -1, - 5, - 1, - 11, - 5, - 11, - 6, - 1, - 0, - 11, - 7, - 11, - 4, - 0, - 4, - 11, - -1, - 0, - 5, - 9, - 0, - 6, - 5, - 0, - 3, - 6, - 11, - 6, - 3, - 8, - 4, - 7, - -1, - 6, - 5, - 9, - 6, - 9, - 11, - 4, - 7, - 9, - 7, - 11, - 9, - -1, - -1, - -1, - -1, - 10, - 4, - 9, - 6, - 4, - 10, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4, - 10, - 6, - 4, - 9, - 10, - 0, - 8, - 3, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 10, - 0, - 1, - 10, - 6, - 0, - 6, - 4, - 0, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8, - 3, - 1, - 8, - 1, - 6, - 8, - 6, - 4, - 6, - 1, - 10, - -1, - -1, - -1, - -1, - 1, - 4, - 9, - 1, - 2, - 4, - 2, - 6, - 4, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3, - 0, - 8, - 1, - 2, - 9, - 2, - 4, - 9, - 2, - 6, - 4, - -1, - -1, - -1, - -1, - 0, - 2, - 4, - 4, - 2, - 6, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8, - 3, - 2, - 8, - 2, - 4, - 4, - 2, - 6, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 10, - 4, - 9, - 10, - 6, - 4, - 11, - 2, - 3, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 8, - 2, - 2, - 8, - 11, - 4, - 9, - 10, - 4, - 10, - 6, - -1, - -1, - -1, - -1, - 3, - 11, - 2, - 0, - 1, - 6, - 0, - 6, - 4, - 6, - 1, - 10, - -1, - -1, - -1, - -1, - 6, - 4, - 1, - 6, - 1, - 10, - 4, - 8, - 1, - 2, - 1, - 11, - 8, - 11, - 1, - -1, - 9, - 6, - 4, - 9, - 3, - 6, - 9, - 1, - 3, - 11, - 6, - 3, - -1, - -1, - -1, - -1, - 8, - 11, - 1, - 8, - 1, - 0, - 11, - 6, - 1, - 9, - 1, - 4, - 6, - 4, - 1, - -1, - 3, - 11, - 6, - 3, - 6, - 0, - 0, - 6, - 4, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 6, - 4, - 8, - 11, - 6, - 8, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7, - 10, - 6, - 7, - 8, - 10, - 8, - 9, - 10, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 7, - 3, - 0, - 10, - 7, - 0, - 9, - 10, - 6, - 7, - 10, - -1, - -1, - -1, - -1, - 10, - 6, - 7, - 1, - 10, - 7, - 1, - 7, - 8, - 1, - 8, - 0, - -1, - -1, - -1, - -1, - 10, - 6, - 7, - 10, - 7, - 1, - 1, - 7, - 3, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 2, - 6, - 1, - 6, - 8, - 1, - 8, - 9, - 8, - 6, - 7, - -1, - -1, - -1, - -1, - 2, - 6, - 9, - 2, - 9, - 1, - 6, - 7, - 9, - 0, - 9, - 3, - 7, - 3, - 9, - -1, - 7, - 8, - 0, - 7, - 0, - 6, - 6, - 0, - 2, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7, - 3, - 2, - 6, - 7, - 2, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2, - 3, - 11, - 10, - 6, - 8, - 10, - 8, - 9, - 8, - 6, - 7, - -1, - -1, - -1, - -1, - 2, - 0, - 7, - 2, - 7, - 11, - 0, - 9, - 7, - 6, - 7, - 10, - 9, - 10, - 7, - -1, - 1, - 8, - 0, - 1, - 7, - 8, - 1, - 10, - 7, - 6, - 7, - 10, - 2, - 3, - 11, - -1, - 11, - 2, - 1, - 11, - 1, - 7, - 10, - 6, - 1, - 6, - 7, - 1, - -1, - -1, - -1, - -1, - 8, - 9, - 6, - 8, - 6, - 7, - 9, - 1, - 6, - 11, - 6, - 3, - 1, - 3, - 6, - -1, - 0, - 9, - 1, - 11, - 6, - 7, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7, - 8, - 0, - 7, - 0, - 6, - 3, - 11, - 0, - 11, - 6, - 0, - -1, - -1, - -1, - -1, - 7, - 11, - 6, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7, - 6, - 11, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3, - 0, - 8, - 11, - 7, - 6, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 1, - 9, - 11, - 7, - 6, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8, - 1, - 9, - 8, - 3, - 1, - 11, - 7, - 6, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 10, - 1, - 2, - 6, - 11, - 7, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 2, - 10, - 3, - 0, - 8, - 6, - 11, - 7, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2, - 9, - 0, - 2, - 10, - 9, - 6, - 11, - 7, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 6, - 11, - 7, - 2, - 10, - 3, - 10, - 8, - 3, - 10, - 9, - 8, - -1, - -1, - -1, - -1, - 7, - 2, - 3, - 6, - 2, - 7, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 7, - 0, - 8, - 7, - 6, - 0, - 6, - 2, - 0, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2, - 7, - 6, - 2, - 3, - 7, - 0, - 1, - 9, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 6, - 2, - 1, - 8, - 6, - 1, - 9, - 8, - 8, - 7, - 6, - -1, - -1, - -1, - -1, - 10, - 7, - 6, - 10, - 1, - 7, - 1, - 3, - 7, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 10, - 7, - 6, - 1, - 7, - 10, - 1, - 8, - 7, - 1, - 0, - 8, - -1, - -1, - -1, - -1, - 0, - 3, - 7, - 0, - 7, - 10, - 0, - 10, - 9, - 6, - 10, - 7, - -1, - -1, - -1, - -1, - 7, - 6, - 10, - 7, - 10, - 8, - 8, - 10, - 9, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 6, - 8, - 4, - 11, - 8, - 6, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3, - 6, - 11, - 3, - 0, - 6, - 0, - 4, - 6, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8, - 6, - 11, - 8, - 4, - 6, - 9, - 0, - 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 9, - 4, - 6, - 9, - 6, - 3, - 9, - 3, - 1, - 11, - 3, - 6, - -1, - -1, - -1, - -1, - 6, - 8, - 4, - 6, - 11, - 8, - 2, - 10, - 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 2, - 10, - 3, - 0, - 11, - 0, - 6, - 11, - 0, - 4, - 6, - -1, - -1, - -1, - -1, - 4, - 11, - 8, - 4, - 6, - 11, - 0, - 2, - 9, - 2, - 10, - 9, - -1, - -1, - -1, - -1, - 10, - 9, - 3, - 10, - 3, - 2, - 9, - 4, - 3, - 11, - 3, - 6, - 4, - 6, - 3, - -1, - 8, - 2, - 3, - 8, - 4, - 2, - 4, - 6, - 2, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 4, - 2, - 4, - 6, - 2, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 9, - 0, - 2, - 3, - 4, - 2, - 4, - 6, - 4, - 3, - 8, - -1, - -1, - -1, - -1, - 1, - 9, - 4, - 1, - 4, - 2, - 2, - 4, - 6, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8, - 1, - 3, - 8, - 6, - 1, - 8, - 4, - 6, - 6, - 10, - 1, - -1, - -1, - -1, - -1, - 10, - 1, - 0, - 10, - 0, - 6, - 6, - 0, - 4, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4, - 6, - 3, - 4, - 3, - 8, - 6, - 10, - 3, - 0, - 3, - 9, - 10, - 9, - 3, - -1, - 10, - 9, - 4, - 6, - 10, - 4, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4, - 9, - 5, - 7, - 6, - 11, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 8, - 3, - 4, - 9, - 5, - 11, - 7, - 6, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5, - 0, - 1, - 5, - 4, - 0, - 7, - 6, - 11, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 11, - 7, - 6, - 8, - 3, - 4, - 3, - 5, - 4, - 3, - 1, - 5, - -1, - -1, - -1, - -1, - 9, - 5, - 4, - 10, - 1, - 2, - 7, - 6, - 11, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 6, - 11, - 7, - 1, - 2, - 10, - 0, - 8, - 3, - 4, - 9, - 5, - -1, - -1, - -1, - -1, - 7, - 6, - 11, - 5, - 4, - 10, - 4, - 2, - 10, - 4, - 0, - 2, - -1, - -1, - -1, - -1, - 3, - 4, - 8, - 3, - 5, - 4, - 3, - 2, - 5, - 10, - 5, - 2, - 11, - 7, - 6, - -1, - 7, - 2, - 3, - 7, - 6, - 2, - 5, - 4, - 9, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 9, - 5, - 4, - 0, - 8, - 6, - 0, - 6, - 2, - 6, - 8, - 7, - -1, - -1, - -1, - -1, - 3, - 6, - 2, - 3, - 7, - 6, - 1, - 5, - 0, - 5, - 4, - 0, - -1, - -1, - -1, - -1, - 6, - 2, - 8, - 6, - 8, - 7, - 2, - 1, - 8, - 4, - 8, - 5, - 1, - 5, - 8, - -1, - 9, - 5, - 4, - 10, - 1, - 6, - 1, - 7, - 6, - 1, - 3, - 7, - -1, - -1, - -1, - -1, - 1, - 6, - 10, - 1, - 7, - 6, - 1, - 0, - 7, - 8, - 7, - 0, - 9, - 5, - 4, - -1, - 4, - 0, - 10, - 4, - 10, - 5, - 0, - 3, - 10, - 6, - 10, - 7, - 3, - 7, - 10, - -1, - 7, - 6, - 10, - 7, - 10, - 8, - 5, - 4, - 10, - 4, - 8, - 10, - -1, - -1, - -1, - -1, - 6, - 9, - 5, - 6, - 11, - 9, - 11, - 8, - 9, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3, - 6, - 11, - 0, - 6, - 3, - 0, - 5, - 6, - 0, - 9, - 5, - -1, - -1, - -1, - -1, - 0, - 11, - 8, - 0, - 5, - 11, - 0, - 1, - 5, - 5, - 6, - 11, - -1, - -1, - -1, - -1, - 6, - 11, - 3, - 6, - 3, - 5, - 5, - 3, - 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 2, - 10, - 9, - 5, - 11, - 9, - 11, - 8, - 11, - 5, - 6, - -1, - -1, - -1, - -1, - 0, - 11, - 3, - 0, - 6, - 11, - 0, - 9, - 6, - 5, - 6, - 9, - 1, - 2, - 10, - -1, - 11, - 8, - 5, - 11, - 5, - 6, - 8, - 0, - 5, - 10, - 5, - 2, - 0, - 2, - 5, - -1, - 6, - 11, - 3, - 6, - 3, - 5, - 2, - 10, - 3, - 10, - 5, - 3, - -1, - -1, - -1, - -1, - 5, - 8, - 9, - 5, - 2, - 8, - 5, - 6, - 2, - 3, - 8, - 2, - -1, - -1, - -1, - -1, - 9, - 5, - 6, - 9, - 6, - 0, - 0, - 6, - 2, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 5, - 8, - 1, - 8, - 0, - 5, - 6, - 8, - 3, - 8, - 2, - 6, - 2, - 8, - -1, - 1, - 5, - 6, - 2, - 1, - 6, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 3, - 6, - 1, - 6, - 10, - 3, - 8, - 6, - 5, - 6, - 9, - 8, - 9, - 6, - -1, - 10, - 1, - 0, - 10, - 0, - 6, - 9, - 5, - 0, - 5, - 6, - 0, - -1, - -1, - -1, - -1, - 0, - 3, - 8, - 5, - 6, - 10, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 10, - 5, - 6, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 11, - 5, - 10, - 7, - 5, - 11, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 11, - 5, - 10, - 11, - 7, - 5, - 8, - 3, - 0, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5, - 11, - 7, - 5, - 10, - 11, - 1, - 9, - 0, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 10, - 7, - 5, - 10, - 11, - 7, - 9, - 8, - 1, - 8, - 3, - 1, - -1, - -1, - -1, - -1, - 11, - 1, - 2, - 11, - 7, - 1, - 7, - 5, - 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 8, - 3, - 1, - 2, - 7, - 1, - 7, - 5, - 7, - 2, - 11, - -1, - -1, - -1, - -1, - 9, - 7, - 5, - 9, - 2, - 7, - 9, - 0, - 2, - 2, - 11, - 7, - -1, - -1, - -1, - -1, - 7, - 5, - 2, - 7, - 2, - 11, - 5, - 9, - 2, - 3, - 2, - 8, - 9, - 8, - 2, - -1, - 2, - 5, - 10, - 2, - 3, - 5, - 3, - 7, - 5, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8, - 2, - 0, - 8, - 5, - 2, - 8, - 7, - 5, - 10, - 2, - 5, - -1, - -1, - -1, - -1, - 9, - 0, - 1, - 5, - 10, - 3, - 5, - 3, - 7, - 3, - 10, - 2, - -1, - -1, - -1, - -1, - 9, - 8, - 2, - 9, - 2, - 1, - 8, - 7, - 2, - 10, - 2, - 5, - 7, - 5, - 2, - -1, - 1, - 3, - 5, - 3, - 7, - 5, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 8, - 7, - 0, - 7, - 1, - 1, - 7, - 5, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 9, - 0, - 3, - 9, - 3, - 5, - 5, - 3, - 7, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 9, - 8, - 7, - 5, - 9, - 7, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5, - 8, - 4, - 5, - 10, - 8, - 10, - 11, - 8, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 5, - 0, - 4, - 5, - 11, - 0, - 5, - 10, - 11, - 11, - 3, - 0, - -1, - -1, - -1, - -1, - 0, - 1, - 9, - 8, - 4, - 10, - 8, - 10, - 11, - 10, - 4, - 5, - -1, - -1, - -1, - -1, - 10, - 11, - 4, - 10, - 4, - 5, - 11, - 3, - 4, - 9, - 4, - 1, - 3, - 1, - 4, - -1, - 2, - 5, - 1, - 2, - 8, - 5, - 2, - 11, - 8, - 4, - 5, - 8, - -1, - -1, - -1, - -1, - 0, - 4, - 11, - 0, - 11, - 3, - 4, - 5, - 11, - 2, - 11, - 1, - 5, - 1, - 11, - -1, - 0, - 2, - 5, - 0, - 5, - 9, - 2, - 11, - 5, - 4, - 5, - 8, - 11, - 8, - 5, - -1, - 9, - 4, - 5, - 2, - 11, - 3, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2, - 5, - 10, - 3, - 5, - 2, - 3, - 4, - 5, - 3, - 8, - 4, - -1, - -1, - -1, - -1, - 5, - 10, - 2, - 5, - 2, - 4, - 4, - 2, - 0, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3, - 10, - 2, - 3, - 5, - 10, - 3, - 8, - 5, - 4, - 5, - 8, - 0, - 1, - 9, - -1, - 5, - 10, - 2, - 5, - 2, - 4, - 1, - 9, - 2, - 9, - 4, - 2, - -1, - -1, - -1, - -1, - 8, - 4, - 5, - 8, - 5, - 3, - 3, - 5, - 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 4, - 5, - 1, - 0, - 5, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 8, - 4, - 5, - 8, - 5, - 3, - 9, - 0, - 5, - 0, - 3, - 5, - -1, - -1, - -1, - -1, - 9, - 4, - 5, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4, - 11, - 7, - 4, - 9, - 11, - 9, - 10, - 11, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 8, - 3, - 4, - 9, - 7, - 9, - 11, - 7, - 9, - 10, - 11, - -1, - -1, - -1, - -1, - 1, - 10, - 11, - 1, - 11, - 4, - 1, - 4, - 0, - 7, - 4, - 11, - -1, - -1, - -1, - -1, - 3, - 1, - 4, - 3, - 4, - 8, - 1, - 10, - 4, - 7, - 4, - 11, - 10, - 11, - 4, - -1, - 4, - 11, - 7, - 9, - 11, - 4, - 9, - 2, - 11, - 9, - 1, - 2, - -1, - -1, - -1, - -1, - 9, - 7, - 4, - 9, - 11, - 7, - 9, - 1, - 11, - 2, - 11, - 1, - 0, - 8, - 3, - -1, - 11, - 7, - 4, - 11, - 4, - 2, - 2, - 4, - 0, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 11, - 7, - 4, - 11, - 4, - 2, - 8, - 3, - 4, - 3, - 2, - 4, - -1, - -1, - -1, - -1, - 2, - 9, - 10, - 2, - 7, - 9, - 2, - 3, - 7, - 7, - 4, - 9, - -1, - -1, - -1, - -1, - 9, - 10, - 7, - 9, - 7, - 4, - 10, - 2, - 7, - 8, - 7, - 0, - 2, - 0, - 7, - -1, - 3, - 7, - 10, - 3, - 10, - 2, - 7, - 4, - 10, - 1, - 10, - 0, - 4, - 0, - 10, - -1, - 1, - 10, - 2, - 8, - 7, - 4, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4, - 9, - 1, - 4, - 1, - 7, - 7, - 1, - 3, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4, - 9, - 1, - 4, - 1, - 7, - 0, - 8, - 1, - 8, - 7, - 1, - -1, - -1, - -1, - -1, - 4, - 0, - 3, - 7, - 4, - 3, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 4, - 8, - 7, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 9, - 10, - 8, - 10, - 11, - 8, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3, - 0, - 9, - 3, - 9, - 11, - 11, - 9, - 10, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 1, - 10, - 0, - 10, - 8, - 8, - 10, - 11, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3, - 1, - 10, - 11, - 3, - 10, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 2, - 11, - 1, - 11, - 9, - 9, - 11, - 8, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3, - 0, - 9, - 3, - 9, - 11, - 1, - 2, - 9, - 2, - 11, - 9, - -1, - -1, - -1, - -1, - 0, - 2, - 11, - 8, - 0, - 11, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 3, - 2, - 11, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2, - 3, - 8, - 2, - 8, - 10, - 10, - 8, - 9, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 9, - 10, - 2, - 0, - 9, - 2, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 2, - 3, - 8, - 2, - 8, - 10, - 0, - 1, - 8, - 1, - 10, - 8, - -1, - -1, - -1, - -1, - 1, - 10, - 2, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 1, - 3, - 8, - 9, - 1, - 8, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 9, - 1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - -1, - 0, - 3, - 8, - -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 -]); -//#endregion -//#region node_modules/three-stdlib/math/SimplexNoise.js -var __defProp$44 = Object.defineProperty; -var __defNormalProp$44 = (obj, key, value) => key in obj ? __defProp$44(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$44 = (obj, key, value) => { - __defNormalProp$44(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var SimplexNoise = class { - /** - * You can pass in a random number generator object if you like. - * It is assumed to have a random() method. - */ - constructor(r = Math) { - __publicField$44(this, "grad3", [ - [ - 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 - ] - ]); - __publicField$44(this, "grad4", [ - [ - 0, - 1, - 1, - 1 - ], - [ - 0, - 1, - 1, - -1 - ], - [ - 0, - 1, - -1, - 1 - ], - [ - 0, - 1, - -1, - -1 - ], - [ - 0, - -1, - 1, - 1 - ], - [ - 0, - -1, - 1, - -1 - ], - [ - 0, - -1, - -1, - 1 - ], - [ - 0, - -1, - -1, - -1 - ], - [ - 1, - 0, - 1, - 1 - ], - [ - 1, - 0, - 1, - -1 - ], - [ - 1, - 0, - -1, - 1 - ], - [ - 1, - 0, - -1, - -1 - ], - [ - -1, - 0, - 1, - 1 - ], - [ - -1, - 0, - 1, - -1 - ], - [ - -1, - 0, - -1, - 1 - ], - [ - -1, - 0, - -1, - -1 - ], - [ - 1, - 1, - 0, - 1 - ], - [ - 1, - 1, - 0, - -1 - ], - [ - 1, - -1, - 0, - 1 - ], - [ - 1, - -1, - 0, - -1 - ], - [ - -1, - 1, - 0, - 1 - ], - [ - -1, - 1, - 0, - -1 - ], - [ - -1, - -1, - 0, - 1 - ], - [ - -1, - -1, - 0, - -1 - ], - [ - 1, - 1, - 1, - 0 - ], - [ - 1, - 1, - -1, - 0 - ], - [ - 1, - -1, - 1, - 0 - ], - [ - 1, - -1, - -1, - 0 - ], - [ - -1, - 1, - 1, - 0 - ], - [ - -1, - 1, - -1, - 0 - ], - [ - -1, - -1, - 1, - 0 - ], - [ - -1, - -1, - -1, - 0 - ] - ]); - __publicField$44(this, "p", []); - __publicField$44(this, "perm", []); - __publicField$44(this, "simplex", [ - [ - 0, - 1, - 2, - 3 - ], - [ - 0, - 1, - 3, - 2 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 2, - 3, - 1 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 1, - 2, - 3, - 0 - ], - [ - 0, - 2, - 1, - 3 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 3, - 1, - 2 - ], - [ - 0, - 3, - 2, - 1 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 1, - 3, - 2, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 1, - 2, - 0, - 3 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 1, - 3, - 0, - 2 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 2, - 3, - 0, - 1 - ], - [ - 2, - 3, - 1, - 0 - ], - [ - 1, - 0, - 2, - 3 - ], - [ - 1, - 0, - 3, - 2 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 2, - 0, - 3, - 1 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 2, - 1, - 3, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 2, - 0, - 1, - 3 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 3, - 0, - 1, - 2 - ], - [ - 3, - 0, - 2, - 1 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 3, - 1, - 2, - 0 - ], - [ - 2, - 1, - 0, - 3 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 3, - 1, - 0, - 2 - ], - [ - 0, - 0, - 0, - 0 - ], - [ - 3, - 2, - 0, - 1 - ], - [ - 3, - 2, - 1, - 0 - ] - ]); - __publicField$44(this, "dot", (g, x, y) => { - return g[0] * x + g[1] * y; - }); - __publicField$44(this, "dot3", (g, x, y, z) => { - return g[0] * x + g[1] * y + g[2] * z; - }); - __publicField$44(this, "dot4", (g, x, y, z, w) => { - return g[0] * x + g[1] * y + g[2] * z + g[3] * w; - }); - __publicField$44(this, "noise", (xin, yin) => { - let n0; - let n1; - let n2; - const F2 = .5 * (Math.sqrt(3) - 1); - const s = (xin + yin) * F2; - const i = Math.floor(xin + s); - const j = Math.floor(yin + s); - const G2 = (3 - Math.sqrt(3)) / 6; - const t = (i + j) * G2; - const X0 = i - t; - const Y0 = j - t; - const x0 = xin - X0; - const y0 = yin - Y0; - let i1 = 0; - let j1 = 1; - if (x0 > y0) { - i1 = 1; - j1 = 0; - } - const x1 = x0 - i1 + G2; - const y1 = y0 - j1 + G2; - const x2 = x0 - 1 + 2 * G2; - const y2 = y0 - 1 + 2 * G2; - const ii = i & 255; - const jj = j & 255; - const gi0 = this.perm[ii + this.perm[jj]] % 12; - const gi1 = this.perm[ii + i1 + this.perm[jj + j1]] % 12; - const gi2 = this.perm[ii + 1 + this.perm[jj + 1]] % 12; - let t0 = .5 - x0 * x0 - y0 * y0; - if (t0 < 0) n0 = 0; - else { - t0 *= t0; - n0 = t0 * t0 * this.dot(this.grad3[gi0], x0, y0); - } - let t1 = .5 - x1 * x1 - y1 * y1; - if (t1 < 0) n1 = 0; - else { - t1 *= t1; - n1 = t1 * t1 * this.dot(this.grad3[gi1], x1, y1); - } - let t2 = .5 - x2 * x2 - y2 * y2; - if (t2 < 0) n2 = 0; - else { - t2 *= t2; - n2 = t2 * t2 * this.dot(this.grad3[gi2], x2, y2); - } - return 70 * (n0 + n1 + n2); - }); - __publicField$44(this, "noise3d", (xin, yin, zin) => { - let n0; - let n1; - let n2; - let n3; - const s = (xin + yin + zin) * (1 / 3); - const i = Math.floor(xin + s); - const j = Math.floor(yin + s); - const k = Math.floor(zin + s); - const G3 = 1 / 6; - const t = (i + j + k) * G3; - const X0 = i - t; - const Y0 = j - t; - const Z0 = k - t; - const x0 = xin - X0; - const y0 = yin - Y0; - const z0 = zin - Z0; - let i1; - let j1; - let k1; - let i2; - let j2; - let k2; - if (x0 >= y0) if (y0 >= z0) { - i1 = 1; - j1 = 0; - k1 = 0; - i2 = 1; - j2 = 1; - k2 = 0; - } else if (x0 >= z0) { - i1 = 1; - j1 = 0; - k1 = 0; - i2 = 1; - j2 = 0; - k2 = 1; - } else { - i1 = 0; - j1 = 0; - k1 = 1; - i2 = 1; - j2 = 0; - k2 = 1; - } - else if (y0 < z0) { - i1 = 0; - j1 = 0; - k1 = 1; - i2 = 0; - j2 = 1; - k2 = 1; - } else if (x0 < z0) { - i1 = 0; - j1 = 1; - k1 = 0; - i2 = 0; - j2 = 1; - k2 = 1; - } else { - i1 = 0; - j1 = 1; - k1 = 0; - i2 = 1; - j2 = 1; - k2 = 0; - } - const x1 = x0 - i1 + G3; - const y1 = y0 - j1 + G3; - const z1 = z0 - k1 + G3; - const x2 = x0 - i2 + 2 * G3; - const y2 = y0 - j2 + 2 * G3; - const z2 = z0 - k2 + 2 * G3; - const x3 = x0 - 1 + 3 * G3; - const y3 = y0 - 1 + 3 * G3; - const z3 = z0 - 1 + 3 * G3; - const ii = i & 255; - const jj = j & 255; - const kk = k & 255; - const gi0 = this.perm[ii + this.perm[jj + this.perm[kk]]] % 12; - const gi1 = this.perm[ii + i1 + this.perm[jj + j1 + this.perm[kk + k1]]] % 12; - const gi2 = this.perm[ii + i2 + this.perm[jj + j2 + this.perm[kk + k2]]] % 12; - const gi3 = this.perm[ii + 1 + this.perm[jj + 1 + this.perm[kk + 1]]] % 12; - let t0 = .6 - x0 * x0 - y0 * y0 - z0 * z0; - if (t0 < 0) n0 = 0; - else { - t0 *= t0; - n0 = t0 * t0 * this.dot3(this.grad3[gi0], x0, y0, z0); - } - let t1 = .6 - x1 * x1 - y1 * y1 - z1 * z1; - if (t1 < 0) n1 = 0; - else { - t1 *= t1; - n1 = t1 * t1 * this.dot3(this.grad3[gi1], x1, y1, z1); - } - let t2 = .6 - x2 * x2 - y2 * y2 - z2 * z2; - if (t2 < 0) n2 = 0; - else { - t2 *= t2; - n2 = t2 * t2 * this.dot3(this.grad3[gi2], x2, y2, z2); - } - let t3 = .6 - x3 * x3 - y3 * y3 - z3 * z3; - if (t3 < 0) n3 = 0; - else { - t3 *= t3; - n3 = t3 * t3 * this.dot3(this.grad3[gi3], x3, y3, z3); - } - return 32 * (n0 + n1 + n2 + n3); - }); - __publicField$44(this, "noise4d", (x, y, z, w) => { - const grad4 = this.grad4; - const simplex = this.simplex; - const perm = this.perm; - const F4 = (Math.sqrt(5) - 1) / 4; - const G4 = (5 - Math.sqrt(5)) / 20; - let n0; - let n1; - let n2; - let n3; - let n4; - const s = (x + y + z + w) * F4; - const i = Math.floor(x + s); - const j = Math.floor(y + s); - const k = Math.floor(z + s); - const l = Math.floor(w + s); - const t = (i + j + k + l) * G4; - const X0 = i - t; - const Y0 = j - t; - const Z0 = k - t; - const W0 = l - t; - const x0 = x - X0; - const y0 = y - Y0; - const z0 = z - Z0; - const w0 = w - W0; - const c1 = x0 > y0 ? 32 : 0; - const c2 = x0 > z0 ? 16 : 0; - const c3 = y0 > z0 ? 8 : 0; - const c4 = x0 > w0 ? 4 : 0; - const c5 = y0 > w0 ? 2 : 0; - const c6 = z0 > w0 ? 1 : 0; - const c = c1 + c2 + c3 + c4 + c5 + c6; - let i1; - let j1; - let k1; - let l1; - let i2; - let j2; - let k2; - let l2; - let i3; - let j3; - let k3; - let l3; - i1 = simplex[c][0] >= 3 ? 1 : 0; - j1 = simplex[c][1] >= 3 ? 1 : 0; - k1 = simplex[c][2] >= 3 ? 1 : 0; - l1 = simplex[c][3] >= 3 ? 1 : 0; - i2 = simplex[c][0] >= 2 ? 1 : 0; - j2 = simplex[c][1] >= 2 ? 1 : 0; - k2 = simplex[c][2] >= 2 ? 1 : 0; - l2 = simplex[c][3] >= 2 ? 1 : 0; - i3 = simplex[c][0] >= 1 ? 1 : 0; - j3 = simplex[c][1] >= 1 ? 1 : 0; - k3 = simplex[c][2] >= 1 ? 1 : 0; - l3 = simplex[c][3] >= 1 ? 1 : 0; - const x1 = x0 - i1 + G4; - const y1 = y0 - j1 + G4; - const z1 = z0 - k1 + G4; - const w1 = w0 - l1 + G4; - const x2 = x0 - i2 + 2 * G4; - const y2 = y0 - j2 + 2 * G4; - const z2 = z0 - k2 + 2 * G4; - const w2 = w0 - l2 + 2 * G4; - const x3 = x0 - i3 + 3 * G4; - const y3 = y0 - j3 + 3 * G4; - const z3 = z0 - k3 + 3 * G4; - const w3 = w0 - l3 + 3 * G4; - const x4 = x0 - 1 + 4 * G4; - const y4 = y0 - 1 + 4 * G4; - const z4 = z0 - 1 + 4 * G4; - const w4 = w0 - 1 + 4 * G4; - const ii = i & 255; - const jj = j & 255; - const kk = k & 255; - const ll = l & 255; - const gi0 = perm[ii + perm[jj + perm[kk + perm[ll]]]] % 32; - const gi1 = perm[ii + i1 + perm[jj + j1 + perm[kk + k1 + perm[ll + l1]]]] % 32; - const gi2 = perm[ii + i2 + perm[jj + j2 + perm[kk + k2 + perm[ll + l2]]]] % 32; - const gi3 = perm[ii + i3 + perm[jj + j3 + perm[kk + k3 + perm[ll + l3]]]] % 32; - const gi4 = perm[ii + 1 + perm[jj + 1 + perm[kk + 1 + perm[ll + 1]]]] % 32; - let t0 = .6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0; - if (t0 < 0) n0 = 0; - else { - t0 *= t0; - n0 = t0 * t0 * this.dot4(grad4[gi0], x0, y0, z0, w0); - } - let t1 = .6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1; - if (t1 < 0) n1 = 0; - else { - t1 *= t1; - n1 = t1 * t1 * this.dot4(grad4[gi1], x1, y1, z1, w1); - } - let t2 = .6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2; - if (t2 < 0) n2 = 0; - else { - t2 *= t2; - n2 = t2 * t2 * this.dot4(grad4[gi2], x2, y2, z2, w2); - } - let t3 = .6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3; - if (t3 < 0) n3 = 0; - else { - t3 *= t3; - n3 = t3 * t3 * this.dot4(grad4[gi3], x3, y3, z3, w3); - } - let t4 = .6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4; - if (t4 < 0) n4 = 0; - else { - t4 *= t4; - n4 = t4 * t4 * this.dot4(grad4[gi4], x4, y4, z4, w4); - } - return 27 * (n0 + n1 + n2 + n3 + n4); - }); - for (let i = 0; i < 256; i++) this.p[i] = Math.floor(r.random() * 256); - for (let i = 0; i < 512; i++) this.perm[i] = this.p[i & 255]; - } -}; -//#endregion -//#region node_modules/three-stdlib/geometries/LightningStrike.js -var __defProp$43 = Object.defineProperty; -var __defNormalProp$43 = (obj, key, value) => key in obj ? __defProp$43(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$43 = (obj, key, value) => { - __defNormalProp$43(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var LightningStrike = /* @__PURE__ */ (() => { - const _LightningStrike = class extends BufferGeometry { - constructor(rayParameters = {}) { - super(); - this.isLightningStrike = true; - this.type = "LightningStrike"; - this.init(_LightningStrike.copyParameters(rayParameters, rayParameters)); - this.createMesh(); - } - static createRandomGenerator() { - const numSeeds = 2053; - const seeds = []; - for (let i = 0; i < numSeeds; i++) seeds.push(Math.random()); - const generator = { - currentSeed: 0, - random: function() { - const value = seeds[generator.currentSeed]; - generator.currentSeed = (generator.currentSeed + 1) % numSeeds; - return value; - }, - getSeed: function() { - return generator.currentSeed / numSeeds; - }, - setSeed: function(seed) { - generator.currentSeed = Math.floor(seed * numSeeds) % numSeeds; - } - }; - return generator; - } - static copyParameters(dest = {}, source = {}) { - const vecCopy = function(v) { - if (source === dest) return v; - else return v.clone(); - }; - dest.sourceOffset = source.sourceOffset !== void 0 ? vecCopy(source.sourceOffset) : new Vector3(0, 100, 0), dest.destOffset = source.destOffset !== void 0 ? vecCopy(source.destOffset) : new Vector3(0, 0, 0), dest.timeScale = source.timeScale !== void 0 ? source.timeScale : 1, dest.roughness = source.roughness !== void 0 ? source.roughness : .9, dest.straightness = source.straightness !== void 0 ? source.straightness : .7, dest.up0 = source.up0 !== void 0 ? vecCopy(source.up0) : new Vector3(0, 0, 1); - dest.up1 = source.up1 !== void 0 ? vecCopy(source.up1) : new Vector3(0, 0, 1), dest.radius0 = source.radius0 !== void 0 ? source.radius0 : 1, dest.radius1 = source.radius1 !== void 0 ? source.radius1 : 1, dest.radius0Factor = source.radius0Factor !== void 0 ? source.radius0Factor : .5, dest.radius1Factor = source.radius1Factor !== void 0 ? source.radius1Factor : .2, dest.minRadius = source.minRadius !== void 0 ? source.minRadius : .2, dest.isEternal = source.isEternal !== void 0 ? source.isEternal : source.birthTime === void 0 || source.deathTime === void 0, dest.birthTime = source.birthTime, dest.deathTime = source.deathTime, dest.propagationTimeFactor = source.propagationTimeFactor !== void 0 ? source.propagationTimeFactor : .1, dest.vanishingTimeFactor = source.vanishingTimeFactor !== void 0 ? source.vanishingTimeFactor : .9, dest.subrayPeriod = source.subrayPeriod !== void 0 ? source.subrayPeriod : 4, dest.subrayDutyCycle = source.subrayDutyCycle !== void 0 ? source.subrayDutyCycle : .6; - dest.maxIterations = source.maxIterations !== void 0 ? source.maxIterations : 9; - dest.isStatic = source.isStatic !== void 0 ? source.isStatic : false; - dest.ramification = source.ramification !== void 0 ? source.ramification : 5; - dest.maxSubrayRecursion = source.maxSubrayRecursion !== void 0 ? source.maxSubrayRecursion : 3; - dest.recursionProbability = source.recursionProbability !== void 0 ? source.recursionProbability : .6; - dest.generateUVs = source.generateUVs !== void 0 ? source.generateUVs : false; - dest.randomGenerator = source.randomGenerator, dest.noiseSeed = source.noiseSeed, dest.onDecideSubrayCreation = source.onDecideSubrayCreation, dest.onSubrayCreation = source.onSubrayCreation; - return dest; - } - update(time) { - if (this.isStatic) return; - if (this.rayParameters.isEternal || this.rayParameters.birthTime <= time && time <= this.rayParameters.deathTime) { - this.updateMesh(time); - if (time < this.subrays[0].endPropagationTime) this.state = _LightningStrike.RAY_PROPAGATING; - else if (time > this.subrays[0].beginVanishingTime) this.state = _LightningStrike.RAY_VANISHING; - else this.state = _LightningStrike.RAY_STEADY; - this.visible = true; - } else { - this.visible = false; - if (time < this.rayParameters.birthTime) this.state = _LightningStrike.RAY_UNBORN; - else this.state = _LightningStrike.RAY_EXTINGUISHED; - } - } - init(rayParameters) { - this.rayParameters = rayParameters; - this.maxIterations = rayParameters.maxIterations !== void 0 ? Math.floor(rayParameters.maxIterations) : 9; - rayParameters.maxIterations = this.maxIterations; - this.isStatic = rayParameters.isStatic !== void 0 ? rayParameters.isStatic : false; - rayParameters.isStatic = this.isStatic; - this.ramification = rayParameters.ramification !== void 0 ? Math.floor(rayParameters.ramification) : 5; - rayParameters.ramification = this.ramification; - this.maxSubrayRecursion = rayParameters.maxSubrayRecursion !== void 0 ? Math.floor(rayParameters.maxSubrayRecursion) : 3; - rayParameters.maxSubrayRecursion = this.maxSubrayRecursion; - this.recursionProbability = rayParameters.recursionProbability !== void 0 ? rayParameters.recursionProbability : .6; - rayParameters.recursionProbability = this.recursionProbability; - this.generateUVs = rayParameters.generateUVs !== void 0 ? rayParameters.generateUVs : false; - rayParameters.generateUVs = this.generateUVs; - if (rayParameters.randomGenerator !== void 0) { - this.randomGenerator = rayParameters.randomGenerator; - this.seedGenerator = rayParameters.randomGenerator; - if (rayParameters.noiseSeed !== void 0) this.seedGenerator.setSeed(rayParameters.noiseSeed); - } else { - this.randomGenerator = _LightningStrike.createRandomGenerator(); - this.seedGenerator = Math; - } - if (rayParameters.onDecideSubrayCreation !== void 0) this.onDecideSubrayCreation = rayParameters.onDecideSubrayCreation; - else { - this.createDefaultSubrayCreationCallbacks(); - if (rayParameters.onSubrayCreation !== void 0) this.onSubrayCreation = rayParameters.onSubrayCreation; - } - this.state = _LightningStrike.RAY_INITIALIZED; - this.maxSubrays = Math.ceil(1 + Math.pow(this.ramification, Math.max(0, this.maxSubrayRecursion - 1))); - rayParameters.maxSubrays = this.maxSubrays; - this.maxRaySegments = 2 * (1 << this.maxIterations); - this.subrays = []; - for (let i = 0; i < this.maxSubrays; i++) this.subrays.push(this.createSubray()); - this.raySegments = []; - for (let i = 0; i < this.maxRaySegments; i++) this.raySegments.push(this.createSegment()); - this.time = 0; - this.timeFraction = 0; - this.currentSegmentCallback = null; - this.currentCreateTriangleVertices = this.generateUVs ? this.createTriangleVerticesWithUVs : this.createTriangleVerticesWithoutUVs; - this.numSubrays = 0; - this.currentSubray = null; - this.currentSegmentIndex = 0; - this.isInitialSegment = false; - this.subrayProbability = 0; - this.currentVertex = 0; - this.currentIndex = 0; - this.currentCoordinate = 0; - this.currentUVCoordinate = 0; - this.vertices = null; - this.uvs = null; - this.indices = null; - this.positionAttribute = null; - this.uvsAttribute = null; - this.simplexX = new SimplexNoise(this.seedGenerator); - this.simplexY = new SimplexNoise(this.seedGenerator); - this.simplexZ = new SimplexNoise(this.seedGenerator); - this.forwards = new Vector3(); - this.forwardsFill = new Vector3(); - this.side = new Vector3(); - this.down = new Vector3(); - this.middlePos = new Vector3(); - this.middleLinPos = new Vector3(); - this.newPos = new Vector3(); - this.vPos = new Vector3(); - this.cross1 = new Vector3(); - } - createMesh() { - const maxDrawableSegmentsPerSubRay = 1 << this.maxIterations; - const maxVerts = 3 * (maxDrawableSegmentsPerSubRay + 1) * this.maxSubrays; - const maxIndices = 18 * maxDrawableSegmentsPerSubRay * this.maxSubrays; - this.vertices = new Float32Array(maxVerts * 3); - this.indices = new Uint32Array(maxIndices); - if (this.generateUVs) this.uvs = new Float32Array(maxVerts * 2); - this.fillMesh(0); - this.setIndex(new Uint32BufferAttribute(this.indices, 1)); - this.positionAttribute = new Float32BufferAttribute(this.vertices, 3); - this.setAttribute("position", this.positionAttribute); - if (this.generateUVs) { - this.uvsAttribute = new Float32BufferAttribute(new Float32Array(this.uvs), 2); - this.setAttribute("uv", this.uvsAttribute); - } - if (!this.isStatic) { - this.index.usage = DynamicDrawUsage; - this.positionAttribute.usage = DynamicDrawUsage; - if (this.generateUVs) this.uvsAttribute.usage = DynamicDrawUsage; - } - this.vertices = this.positionAttribute.array; - this.indices = this.index.array; - if (this.generateUVs) this.uvs = this.uvsAttribute.array; - } - updateMesh(time) { - this.fillMesh(time); - this.drawRange.count = this.currentIndex; - this.index.needsUpdate = true; - this.positionAttribute.needsUpdate = true; - if (this.generateUVs) this.uvsAttribute.needsUpdate = true; - } - fillMesh(time) { - const scope = this; - this.currentVertex = 0; - this.currentIndex = 0; - this.currentCoordinate = 0; - this.currentUVCoordinate = 0; - this.fractalRay(time, function fillVertices(segment) { - const subray = scope.currentSubray; - if (time < subray.birthTime) return; - else if (this.rayParameters.isEternal && scope.currentSubray.recursion == 0) { - scope.createPrism(segment); - scope.onDecideSubrayCreation(segment, scope); - } else if (time < subray.endPropagationTime) { - if (scope.timeFraction >= segment.fraction0 * subray.propagationTimeFactor) { - scope.createPrism(segment); - scope.onDecideSubrayCreation(segment, scope); - } - } else if (time < subray.beginVanishingTime) { - scope.createPrism(segment); - scope.onDecideSubrayCreation(segment, scope); - } else { - if (scope.timeFraction <= subray.vanishingTimeFactor + segment.fraction1 * (1 - subray.vanishingTimeFactor)) scope.createPrism(segment); - scope.onDecideSubrayCreation(segment, scope); - } - }); - } - addNewSubray() { - return this.subrays[this.numSubrays++]; - } - initSubray(subray, rayParameters) { - subray.pos0.copy(rayParameters.sourceOffset); - subray.pos1.copy(rayParameters.destOffset); - subray.up0.copy(rayParameters.up0); - subray.up1.copy(rayParameters.up1); - subray.radius0 = rayParameters.radius0; - subray.radius1 = rayParameters.radius1; - subray.birthTime = rayParameters.birthTime; - subray.deathTime = rayParameters.deathTime; - subray.timeScale = rayParameters.timeScale; - subray.roughness = rayParameters.roughness; - subray.straightness = rayParameters.straightness; - subray.propagationTimeFactor = rayParameters.propagationTimeFactor; - subray.vanishingTimeFactor = rayParameters.vanishingTimeFactor; - subray.maxIterations = this.maxIterations; - subray.seed = rayParameters.noiseSeed !== void 0 ? rayParameters.noiseSeed : 0; - subray.recursion = 0; - } - fractalRay(time, segmentCallback) { - this.time = time; - this.currentSegmentCallback = segmentCallback; - this.numSubrays = 0; - this.initSubray(this.addNewSubray(), this.rayParameters); - for (let subrayIndex = 0; subrayIndex < this.numSubrays; subrayIndex++) { - const subray = this.subrays[subrayIndex]; - this.currentSubray = subray; - this.randomGenerator.setSeed(subray.seed); - subray.endPropagationTime = MathUtils.lerp(subray.birthTime, subray.deathTime, subray.propagationTimeFactor); - subray.beginVanishingTime = MathUtils.lerp(subray.deathTime, subray.birthTime, 1 - subray.vanishingTimeFactor); - const random1 = this.randomGenerator.random; - subray.linPos0.set(random1(), random1(), random1()).multiplyScalar(1e3); - subray.linPos1.set(random1(), random1(), random1()).multiplyScalar(1e3); - this.timeFraction = (time - subray.birthTime) / (subray.deathTime - subray.birthTime); - this.currentSegmentIndex = 0; - this.isInitialSegment = true; - const segment = this.getNewSegment(); - segment.iteration = 0; - segment.pos0.copy(subray.pos0); - segment.pos1.copy(subray.pos1); - segment.linPos0.copy(subray.linPos0); - segment.linPos1.copy(subray.linPos1); - segment.up0.copy(subray.up0); - segment.up1.copy(subray.up1); - segment.radius0 = subray.radius0; - segment.radius1 = subray.radius1; - segment.fraction0 = 0; - segment.fraction1 = 1; - segment.positionVariationFactor = 1 - subray.straightness; - this.subrayProbability = this.ramification * Math.pow(this.recursionProbability, subray.recursion) / (1 << subray.maxIterations); - this.fractalRayRecursive(segment); - } - this.currentSegmentCallback = null; - this.currentSubray = null; - } - fractalRayRecursive(segment) { - if (segment.iteration >= this.currentSubray.maxIterations) { - this.currentSegmentCallback(segment); - return; - } - this.forwards.subVectors(segment.pos1, segment.pos0); - let lForwards = this.forwards.length(); - if (lForwards < 1e-6) { - this.forwards.set(0, 0, .01); - lForwards = this.forwards.length(); - } - const middleRadius = (segment.radius0 + segment.radius1) * .5; - const middleFraction = (segment.fraction0 + segment.fraction1) * .5; - const timeDimension = this.time * this.currentSubray.timeScale * Math.pow(2, segment.iteration); - this.middlePos.lerpVectors(segment.pos0, segment.pos1, .5); - this.middleLinPos.lerpVectors(segment.linPos0, segment.linPos1, .5); - const p = this.middleLinPos; - this.newPos.set(this.simplexX.noise4d(p.x, p.y, p.z, timeDimension), this.simplexY.noise4d(p.x, p.y, p.z, timeDimension), this.simplexZ.noise4d(p.x, p.y, p.z, timeDimension)); - this.newPos.multiplyScalar(segment.positionVariationFactor * lForwards); - this.newPos.add(this.middlePos); - const newSegment1 = this.getNewSegment(); - newSegment1.pos0.copy(segment.pos0); - newSegment1.pos1.copy(this.newPos); - newSegment1.linPos0.copy(segment.linPos0); - newSegment1.linPos1.copy(this.middleLinPos); - newSegment1.up0.copy(segment.up0); - newSegment1.up1.copy(segment.up1); - newSegment1.radius0 = segment.radius0; - newSegment1.radius1 = middleRadius; - newSegment1.fraction0 = segment.fraction0; - newSegment1.fraction1 = middleFraction; - newSegment1.positionVariationFactor = segment.positionVariationFactor * this.currentSubray.roughness; - newSegment1.iteration = segment.iteration + 1; - const newSegment2 = this.getNewSegment(); - newSegment2.pos0.copy(this.newPos); - newSegment2.pos1.copy(segment.pos1); - newSegment2.linPos0.copy(this.middleLinPos); - newSegment2.linPos1.copy(segment.linPos1); - this.cross1.crossVectors(segment.up0, this.forwards.normalize()); - newSegment2.up0.crossVectors(this.forwards, this.cross1).normalize(); - newSegment2.up1.copy(segment.up1); - newSegment2.radius0 = middleRadius; - newSegment2.radius1 = segment.radius1; - newSegment2.fraction0 = middleFraction; - newSegment2.fraction1 = segment.fraction1; - newSegment2.positionVariationFactor = segment.positionVariationFactor * this.currentSubray.roughness; - newSegment2.iteration = segment.iteration + 1; - this.fractalRayRecursive(newSegment1); - this.fractalRayRecursive(newSegment2); - } - createPrism(segment) { - this.forwardsFill.subVectors(segment.pos1, segment.pos0).normalize(); - if (this.isInitialSegment) { - this.currentCreateTriangleVertices(segment.pos0, segment.up0, this.forwardsFill, segment.radius0, 0); - this.isInitialSegment = false; - } - this.currentCreateTriangleVertices(segment.pos1, segment.up0, this.forwardsFill, segment.radius1, segment.fraction1); - this.createPrismFaces(); - } - createTriangleVerticesWithoutUVs(pos, up, forwards, radius) { - this.side.crossVectors(up, forwards).multiplyScalar(radius * _LightningStrike.COS30DEG); - this.down.copy(up).multiplyScalar(-radius * _LightningStrike.SIN30DEG); - const p = this.vPos; - const v = this.vertices; - p.copy(pos).sub(this.side).add(this.down); - v[this.currentCoordinate++] = p.x; - v[this.currentCoordinate++] = p.y; - v[this.currentCoordinate++] = p.z; - p.copy(pos).add(this.side).add(this.down); - v[this.currentCoordinate++] = p.x; - v[this.currentCoordinate++] = p.y; - v[this.currentCoordinate++] = p.z; - p.copy(up).multiplyScalar(radius).add(pos); - v[this.currentCoordinate++] = p.x; - v[this.currentCoordinate++] = p.y; - v[this.currentCoordinate++] = p.z; - this.currentVertex += 3; - } - createTriangleVerticesWithUVs(pos, up, forwards, radius, u) { - this.side.crossVectors(up, forwards).multiplyScalar(radius * _LightningStrike.COS30DEG); - this.down.copy(up).multiplyScalar(-radius * _LightningStrike.SIN30DEG); - const p = this.vPos; - const v = this.vertices; - const uv = this.uvs; - p.copy(pos).sub(this.side).add(this.down); - v[this.currentCoordinate++] = p.x; - v[this.currentCoordinate++] = p.y; - v[this.currentCoordinate++] = p.z; - uv[this.currentUVCoordinate++] = u; - uv[this.currentUVCoordinate++] = 0; - p.copy(pos).add(this.side).add(this.down); - v[this.currentCoordinate++] = p.x; - v[this.currentCoordinate++] = p.y; - v[this.currentCoordinate++] = p.z; - uv[this.currentUVCoordinate++] = u; - uv[this.currentUVCoordinate++] = .5; - p.copy(up).multiplyScalar(radius).add(pos); - v[this.currentCoordinate++] = p.x; - v[this.currentCoordinate++] = p.y; - v[this.currentCoordinate++] = p.z; - uv[this.currentUVCoordinate++] = u; - uv[this.currentUVCoordinate++] = 1; - this.currentVertex += 3; - } - createPrismFaces(vertex) { - const indices = this.indices; - vertex = this.currentVertex - 6; - indices[this.currentIndex++] = vertex + 1; - indices[this.currentIndex++] = vertex + 2; - indices[this.currentIndex++] = vertex + 5; - indices[this.currentIndex++] = vertex + 1; - indices[this.currentIndex++] = vertex + 5; - indices[this.currentIndex++] = vertex + 4; - indices[this.currentIndex++] = vertex + 0; - indices[this.currentIndex++] = vertex + 1; - indices[this.currentIndex++] = vertex + 4; - indices[this.currentIndex++] = vertex + 0; - indices[this.currentIndex++] = vertex + 4; - indices[this.currentIndex++] = vertex + 3; - indices[this.currentIndex++] = vertex + 2; - indices[this.currentIndex++] = vertex + 0; - indices[this.currentIndex++] = vertex + 3; - indices[this.currentIndex++] = vertex + 2; - indices[this.currentIndex++] = vertex + 3; - indices[this.currentIndex++] = vertex + 5; - } - createDefaultSubrayCreationCallbacks() { - const random1 = this.randomGenerator.random; - this.onDecideSubrayCreation = function(segment, lightningStrike) { - const subray = lightningStrike.currentSubray; - const period = lightningStrike.rayParameters.subrayPeriod; - const dutyCycle = lightningStrike.rayParameters.subrayDutyCycle; - const phase0 = lightningStrike.rayParameters.isEternal && subray.recursion == 0 ? -random1() * period : MathUtils.lerp(subray.birthTime, subray.endPropagationTime, segment.fraction0) - random1() * period; - const phase = lightningStrike.time - phase0; - const currentCycle = Math.floor(phase / period); - const childSubraySeed = random1() * (currentCycle + 1); - const isActive = phase % period <= dutyCycle * period; - let probability = 0; - if (isActive) probability = lightningStrike.subrayProbability; - if (subray.recursion < lightningStrike.maxSubrayRecursion && lightningStrike.numSubrays < lightningStrike.maxSubrays && random1() < probability) { - const childSubray = lightningStrike.addNewSubray(); - const parentSeed = lightningStrike.randomGenerator.getSeed(); - childSubray.seed = childSubraySeed; - lightningStrike.randomGenerator.setSeed(childSubraySeed); - childSubray.recursion = subray.recursion + 1; - childSubray.maxIterations = Math.max(1, subray.maxIterations - 1); - childSubray.linPos0.set(random1(), random1(), random1()).multiplyScalar(1e3); - childSubray.linPos1.set(random1(), random1(), random1()).multiplyScalar(1e3); - childSubray.up0.copy(subray.up0); - childSubray.up1.copy(subray.up1); - childSubray.radius0 = segment.radius0 * lightningStrike.rayParameters.radius0Factor; - childSubray.radius1 = Math.min(lightningStrike.rayParameters.minRadius, segment.radius1 * lightningStrike.rayParameters.radius1Factor); - childSubray.birthTime = phase0 + currentCycle * period; - childSubray.deathTime = childSubray.birthTime + period * dutyCycle; - if (!lightningStrike.rayParameters.isEternal && subray.recursion == 0) { - childSubray.birthTime = Math.max(childSubray.birthTime, subray.birthTime); - childSubray.deathTime = Math.min(childSubray.deathTime, subray.deathTime); - } - childSubray.timeScale = subray.timeScale * 2; - childSubray.roughness = subray.roughness; - childSubray.straightness = subray.straightness; - childSubray.propagationTimeFactor = subray.propagationTimeFactor; - childSubray.vanishingTimeFactor = subray.vanishingTimeFactor; - lightningStrike.onSubrayCreation(segment, subray, childSubray, lightningStrike); - lightningStrike.randomGenerator.setSeed(parentSeed); - } - }; - const vec1Pos = new Vector3(); - const vec2Forward = new Vector3(); - const vec3Side = new Vector3(); - const vec4Up = new Vector3(); - this.onSubrayCreation = function(segment, parentSubray, childSubray, lightningStrike) { - lightningStrike.subrayCylinderPosition(segment, parentSubray, childSubray, .5, .6, .2); - }; - this.subrayConePosition = function(segment, parentSubray, childSubray, heightFactor, sideWidthFactor, minSideWidthFactor) { - childSubray.pos0.copy(segment.pos0); - vec1Pos.subVectors(parentSubray.pos1, parentSubray.pos0); - vec2Forward.copy(vec1Pos).normalize(); - vec1Pos.multiplyScalar(segment.fraction0 + (1 - segment.fraction0) * (random1() * heightFactor)); - const length = vec1Pos.length(); - vec3Side.crossVectors(parentSubray.up0, vec2Forward); - const angle = 2 * Math.PI * random1(); - vec3Side.multiplyScalar(Math.cos(angle)); - vec4Up.copy(parentSubray.up0).multiplyScalar(Math.sin(angle)); - childSubray.pos1.copy(vec3Side).add(vec4Up).multiplyScalar(length * sideWidthFactor * (minSideWidthFactor + random1() * (1 - minSideWidthFactor))).add(vec1Pos).add(parentSubray.pos0); - }; - this.subrayCylinderPosition = function(segment, parentSubray, childSubray, heightFactor, sideWidthFactor, minSideWidthFactor) { - childSubray.pos0.copy(segment.pos0); - vec1Pos.subVectors(parentSubray.pos1, parentSubray.pos0); - vec2Forward.copy(vec1Pos).normalize(); - vec1Pos.multiplyScalar(segment.fraction0 + (1 - segment.fraction0) * ((2 * random1() - 1) * heightFactor)); - const length = vec1Pos.length(); - vec3Side.crossVectors(parentSubray.up0, vec2Forward); - const angle = 2 * Math.PI * random1(); - vec3Side.multiplyScalar(Math.cos(angle)); - vec4Up.copy(parentSubray.up0).multiplyScalar(Math.sin(angle)); - childSubray.pos1.copy(vec3Side).add(vec4Up).multiplyScalar(length * sideWidthFactor * (minSideWidthFactor + random1() * (1 - minSideWidthFactor))).add(vec1Pos).add(parentSubray.pos0); - }; - } - createSubray() { - return { - seed: 0, - maxIterations: 0, - recursion: 0, - pos0: new Vector3(), - pos1: new Vector3(), - linPos0: new Vector3(), - linPos1: new Vector3(), - up0: new Vector3(), - up1: new Vector3(), - radius0: 0, - radius1: 0, - birthTime: 0, - deathTime: 0, - timeScale: 0, - roughness: 0, - straightness: 0, - propagationTimeFactor: 0, - vanishingTimeFactor: 0, - endPropagationTime: 0, - beginVanishingTime: 0 - }; - } - createSegment() { - return { - iteration: 0, - pos0: new Vector3(), - pos1: new Vector3(), - linPos0: new Vector3(), - linPos1: new Vector3(), - up0: new Vector3(), - up1: new Vector3(), - radius0: 0, - radius1: 0, - fraction0: 0, - fraction1: 0, - positionVariationFactor: 0 - }; - } - getNewSegment() { - return this.raySegments[this.currentSegmentIndex++]; - } - copy(source) { - super.copy(source); - this.init(_LightningStrike.copyParameters({}, source.rayParameters)); - return this; - } - clone() { - return new this.constructor(_LightningStrike.copyParameters({}, this.rayParameters)); - } - }; - let LightningStrike2 = _LightningStrike; - __publicField$43(LightningStrike2, "RAY_INITIALIZED", 0); - __publicField$43(LightningStrike2, "RAY_UNBORN", 1); - __publicField$43(LightningStrike2, "RAY_PROPAGATING", 2); - __publicField$43(LightningStrike2, "RAY_STEADY", 3); - __publicField$43(LightningStrike2, "RAY_VANISHING", 4); - __publicField$43(LightningStrike2, "RAY_EXTINGUISHED", 5); - __publicField$43(LightningStrike2, "COS30DEG", Math.cos(30 * Math.PI / 180)); - __publicField$43(LightningStrike2, "SIN30DEG", Math.sin(30 * Math.PI / 180)); - return LightningStrike2; -})(); -//#endregion -//#region node_modules/three-stdlib/objects/LightningStorm.js -var LightningStorm = class extends Object3D { - constructor(stormParams = {}) { - super(); - this.isLightningStorm = true; - this.stormParams = stormParams; - stormParams.size = stormParams.size !== void 0 ? stormParams.size : 1e3; - stormParams.minHeight = stormParams.minHeight !== void 0 ? stormParams.minHeight : 80; - stormParams.maxHeight = stormParams.maxHeight !== void 0 ? stormParams.maxHeight : 100; - stormParams.maxSlope = stormParams.maxSlope !== void 0 ? stormParams.maxSlope : 1.1; - stormParams.maxLightnings = stormParams.maxLightnings !== void 0 ? stormParams.maxLightnings : 3; - stormParams.lightningMinPeriod = stormParams.lightningMinPeriod !== void 0 ? stormParams.lightningMinPeriod : 3; - stormParams.lightningMaxPeriod = stormParams.lightningMaxPeriod !== void 0 ? stormParams.lightningMaxPeriod : 7; - stormParams.lightningMinDuration = stormParams.lightningMinDuration !== void 0 ? stormParams.lightningMinDuration : 1; - stormParams.lightningMaxDuration = stormParams.lightningMaxDuration !== void 0 ? stormParams.lightningMaxDuration : 2.5; - this.lightningParameters = LightningStrike.copyParameters(stormParams.lightningParameters, stormParams.lightningParameters); - this.lightningParameters.isEternal = false; - this.lightningMaterial = stormParams.lightningMaterial !== void 0 ? stormParams.lightningMaterial : new MeshBasicMaterial({ color: 11599871 }); - if (stormParams.onRayPosition !== void 0) this.onRayPosition = stormParams.onRayPosition; - else this.onRayPosition = function(source, dest) { - dest.set((Math.random() - .5) * stormParams.size, 0, (Math.random() - .5) * stormParams.size); - const height = MathUtils.lerp(stormParams.minHeight, stormParams.maxHeight, Math.random()); - source.set(stormParams.maxSlope * (2 * Math.random() - 1), 1, stormParams.maxSlope * (2 * Math.random() - 1)).multiplyScalar(height).add(dest); - }; - this.onLightningDown = stormParams.onLightningDown; - this.inited = false; - this.nextLightningTime = 0; - this.lightningsMeshes = []; - this.deadLightningsMeshes = []; - for (let i = 0; i < this.stormParams.maxLightnings; i++) { - const mesh = new Mesh(new LightningStrike(LightningStrike.copyParameters({}, this.lightningParameters)), this.lightningMaterial); - this.deadLightningsMeshes.push(mesh); - } - } - update(time) { - if (!this.inited) { - this.nextLightningTime = this.getNextLightningTime(time) * Math.random(); - this.inited = true; - } - if (time >= this.nextLightningTime) { - const lightningMesh = this.deadLightningsMeshes.pop(); - if (lightningMesh) { - const lightningParams1 = LightningStrike.copyParameters(lightningMesh.geometry.rayParameters, this.lightningParameters); - lightningParams1.birthTime = time; - lightningParams1.deathTime = time + MathUtils.lerp(this.stormParams.lightningMinDuration, this.stormParams.lightningMaxDuration, Math.random()); - this.onRayPosition(lightningParams1.sourceOffset, lightningParams1.destOffset); - lightningParams1.noiseSeed = Math.random(); - this.add(lightningMesh); - this.lightningsMeshes.push(lightningMesh); - } - this.nextLightningTime = this.getNextLightningTime(time); - } - let i = 0, il = this.lightningsMeshes.length; - while (i < il) { - const mesh = this.lightningsMeshes[i]; - const lightning = mesh.geometry; - const prevState = lightning.state; - lightning.update(time); - if (prevState === LightningStrike.RAY_PROPAGATING && lightning.state > prevState) { - if (this.onLightningDown) this.onLightningDown(lightning); - } - if (lightning.state === LightningStrike.RAY_EXTINGUISHED) { - this.lightningsMeshes.splice(this.lightningsMeshes.indexOf(mesh), 1); - this.deadLightningsMeshes.push(mesh); - this.remove(mesh); - il--; - } else i++; - } - } - getNextLightningTime(currentTime) { - return currentTime + MathUtils.lerp(this.stormParams.lightningMinPeriod, this.stormParams.lightningMaxPeriod, Math.random()) / (this.stormParams.maxLightnings + 1); - } - copy(source, recursive) { - super.copy(source, recursive); - this.stormParams.size = source.stormParams.size; - this.stormParams.minHeight = source.stormParams.minHeight; - this.stormParams.maxHeight = source.stormParams.maxHeight; - this.stormParams.maxSlope = source.stormParams.maxSlope; - this.stormParams.maxLightnings = source.stormParams.maxLightnings; - this.stormParams.lightningMinPeriod = source.stormParams.lightningMinPeriod; - this.stormParams.lightningMaxPeriod = source.stormParams.lightningMaxPeriod; - this.stormParams.lightningMinDuration = source.stormParams.lightningMinDuration; - this.stormParams.lightningMaxDuration = source.stormParams.lightningMaxDuration; - this.lightningParameters = LightningStrike.copyParameters({}, source.lightningParameters); - this.lightningMaterial = source.stormParams.lightningMaterial; - this.onLightningDown = source.onLightningDown; - return this; - } - clone() { - return new this.constructor(this.stormParams).copy(this); - } -}; -//#endregion -//#region node_modules/three-stdlib/objects/ReflectorRTT.js -var ReflectorRTT = class extends Reflector { - constructor(geometry, options) { - super(geometry, options); - this.geometry.setDrawRange(0, 0); - } -}; -//#endregion -//#region node_modules/three-stdlib/objects/ReflectorForSSRPass.js -var __defProp$42 = Object.defineProperty; -var __defNormalProp$42 = (obj, key, value) => key in obj ? __defProp$42(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$42 = (obj, key, value) => { - __defNormalProp$42(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var ReflectorForSSRPass = /* @__PURE__ */ (() => { - const _ReflectorForSSRPass = class extends Mesh { - constructor(geometry, options = {}) { - super(geometry); - this.isReflectorForSSRPass = true; - this.type = "ReflectorForSSRPass"; - const scope = this; - const color = options.color !== void 0 ? new Color(options.color) : new Color(8355711); - const textureWidth = options.textureWidth || 512; - const textureHeight = options.textureHeight || 512; - const clipBias = options.clipBias || 0; - const shader = options.shader || _ReflectorForSSRPass.ReflectorShader; - const useDepthTexture = options.useDepthTexture === true; - const yAxis = new Vector3(0, 1, 0); - const vecTemp0 = new Vector3(); - const vecTemp1 = new Vector3(); - scope.needsUpdate = false; - scope.maxDistance = _ReflectorForSSRPass.ReflectorShader.uniforms.maxDistance.value; - scope.opacity = _ReflectorForSSRPass.ReflectorShader.uniforms.opacity.value; - scope.color = color; - scope.resolution = options.resolution || new Vector2(window.innerWidth, window.innerHeight); - scope._distanceAttenuation = _ReflectorForSSRPass.ReflectorShader.defines.DISTANCE_ATTENUATION; - Object.defineProperty(scope, "distanceAttenuation", { - get() { - return scope._distanceAttenuation; - }, - set(val) { - if (scope._distanceAttenuation === val) return; - scope._distanceAttenuation = val; - scope.material.defines.DISTANCE_ATTENUATION = val; - scope.material.needsUpdate = true; - } - }); - scope._fresnel = _ReflectorForSSRPass.ReflectorShader.defines.FRESNEL; - Object.defineProperty(scope, "fresnel", { - get() { - return scope._fresnel; - }, - set(val) { - if (scope._fresnel === val) return; - scope._fresnel = val; - scope.material.defines.FRESNEL = val; - scope.material.needsUpdate = true; - } - }); - const normal = new Vector3(); - const reflectorWorldPosition = new Vector3(); - const cameraWorldPosition = new Vector3(); - const rotationMatrix = new Matrix4(); - const lookAtPosition = new Vector3(0, 0, -1); - const view = new Vector3(); - const target = new Vector3(); - const textureMatrix = new Matrix4(); - const virtualCamera = new PerspectiveCamera(); - let depthTexture; - if (useDepthTexture) { - depthTexture = new DepthTexture(); - depthTexture.type = UnsignedShortType; - depthTexture.minFilter = NearestFilter; - depthTexture.magFilter = NearestFilter; - } - const renderTarget = new WebGLRenderTarget(textureWidth, textureHeight, { - depthTexture: useDepthTexture ? depthTexture : null, - type: HalfFloatType - }); - const material = new ShaderMaterial({ - transparent: useDepthTexture, - defines: Object.assign({}, _ReflectorForSSRPass.ReflectorShader.defines, { useDepthTexture }), - uniforms: UniformsUtils.clone(shader.uniforms), - fragmentShader: shader.fragmentShader, - vertexShader: shader.vertexShader - }); - material.uniforms["tDiffuse"].value = renderTarget.texture; - material.uniforms["color"].value = scope.color; - material.uniforms["textureMatrix"].value = textureMatrix; - if (useDepthTexture) material.uniforms["tDepth"].value = renderTarget.depthTexture; - this.material = material; - const globalPlanes = [new Plane(new Vector3(0, 1, 0), clipBias)]; - this.doRender = function(renderer, scene, camera) { - material.uniforms["maxDistance"].value = scope.maxDistance; - material.uniforms["color"].value = scope.color; - material.uniforms["opacity"].value = scope.opacity; - vecTemp0.copy(camera.position).normalize(); - vecTemp1.copy(vecTemp0).reflect(yAxis); - material.uniforms["fresnelCoe"].value = (vecTemp0.dot(vecTemp1) + 1) / 2; - reflectorWorldPosition.setFromMatrixPosition(scope.matrixWorld); - cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld); - rotationMatrix.extractRotation(scope.matrixWorld); - normal.set(0, 0, 1); - normal.applyMatrix4(rotationMatrix); - view.subVectors(reflectorWorldPosition, cameraWorldPosition); - if (view.dot(normal) > 0) return; - view.reflect(normal).negate(); - view.add(reflectorWorldPosition); - rotationMatrix.extractRotation(camera.matrixWorld); - lookAtPosition.set(0, 0, -1); - lookAtPosition.applyMatrix4(rotationMatrix); - lookAtPosition.add(cameraWorldPosition); - target.subVectors(reflectorWorldPosition, lookAtPosition); - target.reflect(normal).negate(); - target.add(reflectorWorldPosition); - virtualCamera.position.copy(view); - virtualCamera.up.set(0, 1, 0); - virtualCamera.up.applyMatrix4(rotationMatrix); - virtualCamera.up.reflect(normal); - virtualCamera.lookAt(target); - virtualCamera.far = camera.far; - virtualCamera.updateMatrixWorld(); - virtualCamera.projectionMatrix.copy(camera.projectionMatrix); - material.uniforms["virtualCameraNear"].value = camera.near; - material.uniforms["virtualCameraFar"].value = camera.far; - material.uniforms["virtualCameraMatrixWorld"].value = virtualCamera.matrixWorld; - material.uniforms["virtualCameraProjectionMatrix"].value = camera.projectionMatrix; - material.uniforms["virtualCameraProjectionMatrixInverse"].value = camera.projectionMatrixInverse; - material.uniforms["resolution"].value = scope.resolution; - textureMatrix.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1); - textureMatrix.multiply(virtualCamera.projectionMatrix); - textureMatrix.multiply(virtualCamera.matrixWorldInverse); - textureMatrix.multiply(scope.matrixWorld); - const currentRenderTarget = renderer.getRenderTarget(); - const currentXrEnabled = renderer.xr.enabled; - const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate; - const currentClippingPlanes = renderer.clippingPlanes; - renderer.xr.enabled = false; - renderer.shadowMap.autoUpdate = false; - renderer.clippingPlanes = globalPlanes; - renderer.setRenderTarget(renderTarget); - renderer.state.buffers.depth.setMask(true); - if (renderer.autoClear === false) renderer.clear(); - renderer.render(scene, virtualCamera); - renderer.xr.enabled = currentXrEnabled; - renderer.shadowMap.autoUpdate = currentShadowAutoUpdate; - renderer.clippingPlanes = currentClippingPlanes; - renderer.setRenderTarget(currentRenderTarget); - const viewport = camera.viewport; - if (viewport !== void 0) renderer.state.viewport(viewport); - }; - this.getRenderTarget = function() { - return renderTarget; - }; - } - }; - let ReflectorForSSRPass2 = _ReflectorForSSRPass; - __publicField$42(ReflectorForSSRPass2, "ReflectorShader", { - defines: { - DISTANCE_ATTENUATION: true, - FRESNEL: true - }, - uniforms: { - color: { value: null }, - tDiffuse: { value: null }, - tDepth: { value: null }, - textureMatrix: { value: new Matrix4() }, - maxDistance: { value: 180 }, - opacity: { value: .5 }, - fresnelCoe: { value: null }, - virtualCameraNear: { value: null }, - virtualCameraFar: { value: null }, - virtualCameraProjectionMatrix: { value: new Matrix4() }, - virtualCameraMatrixWorld: { value: new Matrix4() }, - virtualCameraProjectionMatrixInverse: { value: new Matrix4() }, - resolution: { value: new Vector2() } - }, - vertexShader: ` - uniform mat4 textureMatrix; - varying vec4 vUv; - - void main() { - - vUv = textureMatrix * vec4( position, 1.0 ); - - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - }`, - fragmentShader: ` - uniform vec3 color; - uniform sampler2D tDiffuse; - uniform sampler2D tDepth; - uniform float maxDistance; - uniform float opacity; - uniform float fresnelCoe; - uniform float virtualCameraNear; - uniform float virtualCameraFar; - uniform mat4 virtualCameraProjectionMatrix; - uniform mat4 virtualCameraProjectionMatrixInverse; - uniform mat4 virtualCameraMatrixWorld; - uniform vec2 resolution; - varying vec4 vUv; - #include <packing> - float blendOverlay( float base, float blend ) { - return( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) ); - } - vec3 blendOverlay( vec3 base, vec3 blend ) { - return vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) ); - } - float getDepth( const in vec2 uv ) { - return texture2D( tDepth, uv ).x; - } - float getViewZ( const in float depth ) { - return perspectiveDepthToViewZ( depth, virtualCameraNear, virtualCameraFar ); - } - vec3 getViewPosition( const in vec2 uv, const in float depth/*clip space*/, const in float clipW ) { - vec4 clipPosition = vec4( ( vec3( uv, depth ) - 0.5 ) * 2.0, 1.0 );//ndc - clipPosition *= clipW; //clip - return ( virtualCameraProjectionMatrixInverse * clipPosition ).xyz;//view - } - void main() { - vec4 base = texture2DProj( tDiffuse, vUv ); - #ifdef useDepthTexture - vec2 uv=(gl_FragCoord.xy-.5)/resolution.xy; - uv.x=1.-uv.x; - float depth = texture2DProj( tDepth, vUv ).r; - float viewZ = getViewZ( depth ); - float clipW = virtualCameraProjectionMatrix[2][3] * viewZ+virtualCameraProjectionMatrix[3][3]; - vec3 viewPosition=getViewPosition( uv, depth, clipW ); - vec3 worldPosition=(virtualCameraMatrixWorld*vec4(viewPosition,1)).xyz; - if(worldPosition.y>maxDistance) discard; - float op=opacity; - #ifdef DISTANCE_ATTENUATION - float ratio=1.-(worldPosition.y/maxDistance); - float attenuation=ratio*ratio; - op=opacity*attenuation; - #endif - #ifdef FRESNEL - op*=fresnelCoe; - #endif - gl_FragColor = vec4( blendOverlay( base.rgb, color ), op ); - #else - gl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 ); - #endif - } - ` - }); - return ReflectorForSSRPass2; -})(); -//#endregion -//#region node_modules/three-stdlib/objects/Sky.js -var __defProp$41 = Object.defineProperty; -var __defNormalProp$41 = (obj, key, value) => key in obj ? __defProp$41(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$41 = (obj, key, value) => { - __defNormalProp$41(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var Sky = /* @__PURE__ */ (() => { - const SkyShader = { - uniforms: { - turbidity: { value: 2 }, - rayleigh: { value: 1 }, - mieCoefficient: { value: .005 }, - mieDirectionalG: { value: .8 }, - sunPosition: { value: new Vector3() }, - up: { value: new Vector3(0, 1, 0) } - }, - vertexShader: ` - uniform vec3 sunPosition; - uniform float rayleigh; - uniform float turbidity; - uniform float mieCoefficient; - uniform vec3 up; - - varying vec3 vWorldPosition; - varying vec3 vSunDirection; - varying float vSunfade; - varying vec3 vBetaR; - varying vec3 vBetaM; - varying float vSunE; - - // constants for atmospheric scattering - const float e = 2.71828182845904523536028747135266249775724709369995957; - const float pi = 3.141592653589793238462643383279502884197169; - - // wavelength of used primaries, according to preetham - const vec3 lambda = vec3( 680E-9, 550E-9, 450E-9 ); - // this pre-calcuation replaces older TotalRayleigh(vec3 lambda) function: - // (8.0 * pow(pi, 3.0) * pow(pow(n, 2.0) - 1.0, 2.0) * (6.0 + 3.0 * pn)) / (3.0 * N * pow(lambda, vec3(4.0)) * (6.0 - 7.0 * pn)) - const vec3 totalRayleigh = vec3( 5.804542996261093E-6, 1.3562911419845635E-5, 3.0265902468824876E-5 ); - - // mie stuff - // K coefficient for the primaries - const float v = 4.0; - const vec3 K = vec3( 0.686, 0.678, 0.666 ); - // MieConst = pi * pow( ( 2.0 * pi ) / lambda, vec3( v - 2.0 ) ) * K - const vec3 MieConst = vec3( 1.8399918514433978E14, 2.7798023919660528E14, 4.0790479543861094E14 ); - - // earth shadow hack - // cutoffAngle = pi / 1.95; - const float cutoffAngle = 1.6110731556870734; - const float steepness = 1.5; - const float EE = 1000.0; - - float sunIntensity( float zenithAngleCos ) { - zenithAngleCos = clamp( zenithAngleCos, -1.0, 1.0 ); - return EE * max( 0.0, 1.0 - pow( e, -( ( cutoffAngle - acos( zenithAngleCos ) ) / steepness ) ) ); - } - - vec3 totalMie( float T ) { - float c = ( 0.2 * T ) * 10E-18; - return 0.434 * c * MieConst; - } - - void main() { - - vec4 worldPosition = modelMatrix * vec4( position, 1.0 ); - vWorldPosition = worldPosition.xyz; - - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - gl_Position.z = gl_Position.w; // set z to camera.far - - vSunDirection = normalize( sunPosition ); - - vSunE = sunIntensity( dot( vSunDirection, up ) ); - - vSunfade = 1.0 - clamp( 1.0 - exp( ( sunPosition.y / 450000.0 ) ), 0.0, 1.0 ); - - float rayleighCoefficient = rayleigh - ( 1.0 * ( 1.0 - vSunfade ) ); - - // extinction (absorbtion + out scattering) - // rayleigh coefficients - vBetaR = totalRayleigh * rayleighCoefficient; - - // mie coefficients - vBetaM = totalMie( turbidity ) * mieCoefficient; - - } - `, - fragmentShader: ` - varying vec3 vWorldPosition; - varying vec3 vSunDirection; - varying float vSunfade; - varying vec3 vBetaR; - varying vec3 vBetaM; - varying float vSunE; - - uniform float mieDirectionalG; - uniform vec3 up; - - const vec3 cameraPos = vec3( 0.0, 0.0, 0.0 ); - - // constants for atmospheric scattering - const float pi = 3.141592653589793238462643383279502884197169; - - const float n = 1.0003; // refractive index of air - const float N = 2.545E25; // number of molecules per unit volume for air at 288.15K and 1013mb (sea level -45 celsius) - - // optical length at zenith for molecules - const float rayleighZenithLength = 8.4E3; - const float mieZenithLength = 1.25E3; - // 66 arc seconds -> degrees, and the cosine of that - const float sunAngularDiameterCos = 0.999956676946448443553574619906976478926848692873900859324; - - // 3.0 / ( 16.0 * pi ) - const float THREE_OVER_SIXTEENPI = 0.05968310365946075; - // 1.0 / ( 4.0 * pi ) - const float ONE_OVER_FOURPI = 0.07957747154594767; - - float rayleighPhase( float cosTheta ) { - return THREE_OVER_SIXTEENPI * ( 1.0 + pow( cosTheta, 2.0 ) ); - } - - float hgPhase( float cosTheta, float g ) { - float g2 = pow( g, 2.0 ); - float inverse = 1.0 / pow( 1.0 - 2.0 * g * cosTheta + g2, 1.5 ); - return ONE_OVER_FOURPI * ( ( 1.0 - g2 ) * inverse ); - } - - void main() { - - vec3 direction = normalize( vWorldPosition - cameraPos ); - - // optical length - // cutoff angle at 90 to avoid singularity in next formula. - float zenithAngle = acos( max( 0.0, dot( up, direction ) ) ); - float inverse = 1.0 / ( cos( zenithAngle ) + 0.15 * pow( 93.885 - ( ( zenithAngle * 180.0 ) / pi ), -1.253 ) ); - float sR = rayleighZenithLength * inverse; - float sM = mieZenithLength * inverse; - - // combined extinction factor - vec3 Fex = exp( -( vBetaR * sR + vBetaM * sM ) ); - - // in scattering - float cosTheta = dot( direction, vSunDirection ); - - float rPhase = rayleighPhase( cosTheta * 0.5 + 0.5 ); - vec3 betaRTheta = vBetaR * rPhase; - - float mPhase = hgPhase( cosTheta, mieDirectionalG ); - vec3 betaMTheta = vBetaM * mPhase; - - vec3 Lin = pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * ( 1.0 - Fex ), vec3( 1.5 ) ); - Lin *= mix( vec3( 1.0 ), pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * Fex, vec3( 1.0 / 2.0 ) ), clamp( pow( 1.0 - dot( up, vSunDirection ), 5.0 ), 0.0, 1.0 ) ); - - // nightsky - float theta = acos( direction.y ); // elevation --> y-axis, [-pi/2, pi/2] - float phi = atan( direction.z, direction.x ); // azimuth --> x-axis [-pi/2, pi/2] - vec2 uv = vec2( phi, theta ) / vec2( 2.0 * pi, pi ) + vec2( 0.5, 0.0 ); - vec3 L0 = vec3( 0.1 ) * Fex; - - // composition + solar disc - float sundisk = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos + 0.00002, cosTheta ); - L0 += ( vSunE * 19000.0 * Fex ) * sundisk; - - vec3 texColor = ( Lin + L0 ) * 0.04 + vec3( 0.0, 0.0003, 0.00075 ); - - vec3 retColor = pow( texColor, vec3( 1.0 / ( 1.2 + ( 1.2 * vSunfade ) ) ) ); - - gl_FragColor = vec4( retColor, 1.0 ); - - #include <tonemapping_fragment> - #include <${version >= 154 ? "colorspace_fragment" : "encodings_fragment"}> - - } - ` - }; - const material = new ShaderMaterial({ - name: "SkyShader", - fragmentShader: SkyShader.fragmentShader, - vertexShader: SkyShader.vertexShader, - uniforms: UniformsUtils.clone(SkyShader.uniforms), - side: 1, - depthWrite: false - }); - class Sky2 extends Mesh { - constructor() { - super(new BoxGeometry(1, 1, 1), material); - } - } - __publicField$41(Sky2, "SkyShader", SkyShader); - __publicField$41(Sky2, "material", material); - return Sky2; -})(); -//#endregion -//#region node_modules/three-stdlib/objects/Water2.js -var __defProp$40 = Object.defineProperty; -var __defNormalProp$40 = (obj, key, value) => key in obj ? __defProp$40(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$40 = (obj, key, value) => { - __defNormalProp$40(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var Water2 = /* @__PURE__ */ (() => { - const _Water2 = class extends Mesh { - constructor(geometry, options = {}) { - super(geometry); - this.isWater = true; - this.type = "Water"; - const scope = this; - const color = options.color !== void 0 ? new Color(options.color) : new Color(16777215); - const textureWidth = options.textureWidth || 512; - const textureHeight = options.textureHeight || 512; - const clipBias = options.clipBias || 0; - const flowDirection = options.flowDirection || new Vector2(1, 0); - const flowSpeed = options.flowSpeed || .03; - const reflectivity = options.reflectivity || .02; - const scale = options.scale || 1; - const shader = options.shader || _Water2.WaterShader; - const encoding = options.encoding !== void 0 ? options.encoding : 3e3; - const flowMap = options.flowMap || void 0; - const normalMap0 = options.normalMap0; - const normalMap1 = options.normalMap1; - const cycle = .15; - const halfCycle = cycle * .5; - const textureMatrix = new Matrix4(); - const clock = new Clock(); - if (Reflector === void 0) { - console.error("THREE.Water: Required component Reflector not found."); - return; - } - if (Refractor === void 0) { - console.error("THREE.Water: Required component Refractor not found."); - return; - } - const reflector = new Reflector(geometry, { - textureWidth, - textureHeight, - clipBias, - encoding - }); - const refractor = new Refractor(geometry, { - textureWidth, - textureHeight, - clipBias, - encoding - }); - reflector.matrixAutoUpdate = false; - refractor.matrixAutoUpdate = false; - this.material = new ShaderMaterial({ - uniforms: UniformsUtils.merge([UniformsLib["fog"], shader.uniforms]), - vertexShader: shader.vertexShader, - fragmentShader: shader.fragmentShader, - transparent: true, - fog: true - }); - if (flowMap !== void 0) { - this.material.defines.USE_FLOWMAP = ""; - this.material.uniforms["tFlowMap"] = { - type: "t", - value: flowMap - }; - } else this.material.uniforms["flowDirection"] = { - type: "v2", - value: flowDirection - }; - normalMap0.wrapS = normalMap0.wrapT = RepeatWrapping; - normalMap1.wrapS = normalMap1.wrapT = RepeatWrapping; - this.material.uniforms["tReflectionMap"].value = reflector.getRenderTarget().texture; - this.material.uniforms["tRefractionMap"].value = refractor.getRenderTarget().texture; - this.material.uniforms["tNormalMap0"].value = normalMap0; - this.material.uniforms["tNormalMap1"].value = normalMap1; - this.material.uniforms["color"].value = color; - this.material.uniforms["reflectivity"].value = reflectivity; - this.material.uniforms["textureMatrix"].value = textureMatrix; - this.material.uniforms["config"].value.x = 0; - this.material.uniforms["config"].value.y = halfCycle; - this.material.uniforms["config"].value.z = halfCycle; - this.material.uniforms["config"].value.w = scale; - function updateTextureMatrix(camera) { - textureMatrix.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1); - textureMatrix.multiply(camera.projectionMatrix); - textureMatrix.multiply(camera.matrixWorldInverse); - textureMatrix.multiply(scope.matrixWorld); - } - function updateFlow() { - const delta = clock.getDelta(); - const config = scope.material.uniforms["config"]; - config.value.x += flowSpeed * delta; - config.value.y = config.value.x + halfCycle; - if (config.value.x >= cycle) { - config.value.x = 0; - config.value.y = halfCycle; - } else if (config.value.y >= cycle) config.value.y = config.value.y - cycle; - } - this.onBeforeRender = function(renderer, scene, camera) { - updateTextureMatrix(camera); - updateFlow(); - scope.visible = false; - reflector.matrixWorld.copy(scope.matrixWorld); - refractor.matrixWorld.copy(scope.matrixWorld); - reflector.onBeforeRender(renderer, scene, camera); - refractor.onBeforeRender(renderer, scene, camera); - scope.visible = true; - }; - } - }; - let Water22 = _Water2; - __publicField$40(Water22, "WaterShader", { - uniforms: { - color: { value: null }, - reflectivity: { value: 0 }, - tReflectionMap: { value: null }, - tRefractionMap: { value: null }, - tNormalMap0: { value: null }, - tNormalMap1: { value: null }, - textureMatrix: { value: null }, - config: { value: /* @__PURE__ */ new Vector4() } - }, - vertexShader: ` - - #include <common> - #include <fog_pars_vertex> - #include <logdepthbuf_pars_vertex> - - uniform mat4 textureMatrix; - - varying vec4 vCoord; - varying vec2 vUv; - varying vec3 vToEye; - - void main() { - - vUv = uv; - vCoord = textureMatrix * vec4( position, 1.0 ); - - vec4 worldPosition = modelMatrix * vec4( position, 1.0 ); - vToEye = cameraPosition - worldPosition.xyz; - - vec4 mvPosition = viewMatrix * worldPosition; // used in fog_vertex - gl_Position = projectionMatrix * mvPosition; - - #include <logdepthbuf_vertex> - #include <fog_vertex> - - }`, - fragmentShader: ` - - #include <common> - #include <fog_pars_fragment> - #include <logdepthbuf_pars_fragment> - - uniform sampler2D tReflectionMap; - uniform sampler2D tRefractionMap; - uniform sampler2D tNormalMap0; - uniform sampler2D tNormalMap1; - - #ifdef USE_FLOWMAP - uniform sampler2D tFlowMap; - #else - uniform vec2 flowDirection; - #endif - - uniform vec3 color; - uniform float reflectivity; - uniform vec4 config; - - varying vec4 vCoord; - varying vec2 vUv; - varying vec3 vToEye; - - void main() { - - #include <logdepthbuf_fragment> - - float flowMapOffset0 = config.x; - float flowMapOffset1 = config.y; - float halfCycle = config.z; - float scale = config.w; - - vec3 toEye = normalize( vToEye ); - - // determine flow direction - vec2 flow; - #ifdef USE_FLOWMAP - flow = texture2D( tFlowMap, vUv ).rg * 2.0 - 1.0; - #else - flow = flowDirection; - #endif - flow.x *= - 1.0; - - // sample normal maps (distort uvs with flowdata) - vec4 normalColor0 = texture2D( tNormalMap0, ( vUv * scale ) + flow * flowMapOffset0 ); - vec4 normalColor1 = texture2D( tNormalMap1, ( vUv * scale ) + flow * flowMapOffset1 ); - - // linear interpolate to get the final normal color - float flowLerp = abs( halfCycle - flowMapOffset0 ) / halfCycle; - vec4 normalColor = mix( normalColor0, normalColor1, flowLerp ); - - // calculate normal vector - vec3 normal = normalize( vec3( normalColor.r * 2.0 - 1.0, normalColor.b, normalColor.g * 2.0 - 1.0 ) ); - - // calculate the fresnel term to blend reflection and refraction maps - float theta = max( dot( toEye, normal ), 0.0 ); - float reflectance = reflectivity + ( 1.0 - reflectivity ) * pow( ( 1.0 - theta ), 5.0 ); - - // calculate final uv coords - vec3 coord = vCoord.xyz / vCoord.w; - vec2 uv = coord.xy + coord.z * normal.xz * 0.05; - - vec4 reflectColor = texture2D( tReflectionMap, vec2( 1.0 - uv.x, uv.y ) ); - vec4 refractColor = texture2D( tRefractionMap, uv ); - - // multiply water color with the mix of both textures - gl_FragColor = vec4( color, 1.0 ) * mix( refractColor, reflectColor, reflectance ); - - #include <tonemapping_fragment> - #include <${version >= 154 ? "colorspace_fragment" : "encodings_fragment"}> - #include <fog_fragment> - - }` - }); - return Water22; -})(); -//#endregion -//#region node_modules/three-stdlib/objects/GroundProjectedEnv.js -var isCubeTexture = (def) => def && def.isCubeTexture; -var GroundProjectedEnv = class extends Mesh { - constructor(texture, options) { - var _a, _b; - const isCubeMap = isCubeTexture(texture); - const cubeSize = ((_b = isCubeMap ? (_a = texture.image[0]) == null ? void 0 : _a.width : texture.image.width) != null ? _b : 1024) / 4; - const _lodMax = Math.floor(Math.log2(cubeSize)); - const _cubeSize = Math.pow(2, _lodMax); - const width = 3 * Math.max(_cubeSize, 112); - const height = 4 * _cubeSize; - const defines = [ - isCubeMap ? "#define ENVMAP_TYPE_CUBE" : "", - `#define CUBEUV_TEXEL_WIDTH ${1 / width}`, - `#define CUBEUV_TEXEL_HEIGHT ${1 / height}`, - `#define CUBEUV_MAX_MIP ${_lodMax}.0` - ]; - const vertexShader = ` - varying vec3 vWorldPosition; - void main() - { - vec4 worldPosition = ( modelMatrix * vec4( position, 1.0 ) ); - vWorldPosition = worldPosition.xyz; - - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - } - `; - const fragmentShader = defines.join("\n") + ` - #define ENVMAP_TYPE_CUBE_UV - varying vec3 vWorldPosition; - uniform float radius; - uniform float height; - uniform float angle; - #ifdef ENVMAP_TYPE_CUBE - uniform samplerCube map; - #else - uniform sampler2D map; - #endif - // From: https://www.shadertoy.com/view/4tsBD7 - float diskIntersectWithBackFaceCulling( vec3 ro, vec3 rd, vec3 c, vec3 n, float r ) - { - float d = dot ( rd, n ); - - if( d > 0.0 ) { return 1e6; } - - vec3 o = ro - c; - float t = - dot( n, o ) / d; - vec3 q = o + rd * t; - - return ( dot( q, q ) < r * r ) ? t : 1e6; - } - // From: https://www.iquilezles.org/www/articles/intersectors/intersectors.htm - float sphereIntersect( vec3 ro, vec3 rd, vec3 ce, float ra ) - { - vec3 oc = ro - ce; - float b = dot( oc, rd ); - float c = dot( oc, oc ) - ra * ra; - float h = b * b - c; - - if( h < 0.0 ) { return -1.0; } - - h = sqrt( h ); - - return - b + h; - } - vec3 project() - { - vec3 p = normalize( vWorldPosition ); - vec3 camPos = cameraPosition; - camPos.y -= height; - float intersection = sphereIntersect( camPos, p, vec3( 0.0 ), radius ); - if( intersection > 0.0 ) { - - vec3 h = vec3( 0.0, - height, 0.0 ); - float intersection2 = diskIntersectWithBackFaceCulling( camPos, p, h, vec3( 0.0, 1.0, 0.0 ), radius ); - p = ( camPos + min( intersection, intersection2 ) * p ) / radius; - } else { - p = vec3( 0.0, 1.0, 0.0 ); - } - return p; - } - #include <common> - #include <cube_uv_reflection_fragment> - void main() - { - vec3 projectedWorldPosition = project(); - - #ifdef ENVMAP_TYPE_CUBE - vec3 outcolor = textureCube( map, projectedWorldPosition ).rgb; - #else - vec3 direction = normalize( projectedWorldPosition ); - vec2 uv = equirectUv( direction ); - vec3 outcolor = texture2D( map, uv ).rgb; - #endif - gl_FragColor = vec4( outcolor, 1.0 ); - #include <tonemapping_fragment> - #include <${version >= 154 ? "colorspace_fragment" : "encodings_fragment"}> - } - `; - const uniforms = { - map: { value: texture }, - height: { value: (options == null ? void 0 : options.height) || 15 }, - radius: { value: (options == null ? void 0 : options.radius) || 100 } - }; - const geometry = new IcosahedronGeometry(1, 16); - const material = new ShaderMaterial({ - uniforms, - fragmentShader, - vertexShader, - side: 2 - }); - super(geometry, material); - } - set radius(radius) { - this.material.uniforms.radius.value = radius; - } - get radius() { - return this.material.uniforms.radius.value; - } - set height(height) { - this.material.uniforms.height.value = height; - } - get height() { - return this.material.uniforms.height.value; - } -}; -//#endregion -//#region node_modules/three-stdlib/utils/SceneUtils.js -var SceneUtils = { - createMeshesFromInstancedMesh: function(instancedMesh) { - const group = new Group(); - const count = instancedMesh.count; - const geometry = instancedMesh.geometry; - const material = instancedMesh.material; - for (let i = 0; i < count; i++) { - const mesh = new Mesh(geometry, material); - instancedMesh.getMatrixAt(i, mesh.matrix); - mesh.matrix.decompose(mesh.position, mesh.quaternion, mesh.scale); - group.add(mesh); - } - group.copy(instancedMesh); - group.updateMatrixWorld(); - return group; - }, - createMultiMaterialObject: function(geometry, materials) { - const group = new Group(); - for (let i = 0, l = materials.length; i < l; i++) group.add(new Mesh(geometry, materials[i])); - return group; - }, - detach: function(child, parent, scene) { - console.warn("THREE.SceneUtils: detach() has been deprecated. Use scene.attach( child ) instead."); - scene.attach(child); - }, - attach: function(child, scene, parent) { - console.warn("THREE.SceneUtils: attach() has been deprecated. Use parent.attach( child ) instead."); - parent.attach(child); - } -}; -//#endregion -//#region node_modules/three-stdlib/utils/UVsDebug.js -function UVsDebug(geometry, size = 1024) { - const abc = "abc"; - const a = new Vector2(); - const b = new Vector2(); - const uvs = [ - new Vector2(), - new Vector2(), - new Vector2() - ]; - const face = []; - const canvas = document.createElement("canvas"); - const width = size; - const height = size; - canvas.width = width; - canvas.height = height; - const ctx = canvas.getContext("2d"); - ctx.lineWidth = 1; - ctx.strokeStyle = "rgb( 63, 63, 63 )"; - ctx.textAlign = "center"; - ctx.fillStyle = "rgb( 255, 255, 255 )"; - ctx.fillRect(0, 0, width, height); - const index = geometry.index; - const uvAttribute = geometry.attributes.uv; - if (index) for (let i = 0, il = index.count; i < il; i += 3) { - face[0] = index.getX(i); - face[1] = index.getX(i + 1); - face[2] = index.getX(i + 2); - uvs[0].fromBufferAttribute(uvAttribute, face[0]); - uvs[1].fromBufferAttribute(uvAttribute, face[1]); - uvs[2].fromBufferAttribute(uvAttribute, face[2]); - processFace(face, uvs, i / 3); - } - else for (let i = 0, il = uvAttribute.count; i < il; i += 3) { - face[0] = i; - face[1] = i + 1; - face[2] = i + 2; - uvs[0].fromBufferAttribute(uvAttribute, face[0]); - uvs[1].fromBufferAttribute(uvAttribute, face[1]); - uvs[2].fromBufferAttribute(uvAttribute, face[2]); - processFace(face, uvs, i / 3); - } - return canvas; - function processFace(face2, uvs2, index2) { - ctx.beginPath(); - a.set(0, 0); - for (let j = 0, jl = uvs2.length; j < jl; j++) { - const uv = uvs2[j]; - a.x += uv.x; - a.y += uv.y; - if (j === 0) ctx.moveTo(uv.x * (width - 2) + .5, (1 - uv.y) * (height - 2) + .5); - else ctx.lineTo(uv.x * (width - 2) + .5, (1 - uv.y) * (height - 2) + .5); - } - ctx.closePath(); - ctx.stroke(); - a.divideScalar(uvs2.length); - ctx.font = "18px Arial"; - ctx.fillStyle = "rgb( 63, 63, 63 )"; - ctx.fillText(index2, a.x * width, (1 - a.y) * height); - if (a.x > .95) ctx.fillText(index2, a.x % 1 * width, (1 - a.y) * height); - ctx.font = "12px Arial"; - ctx.fillStyle = "rgb( 191, 191, 191 )"; - for (let j = 0, jl = uvs2.length; j < jl; j++) { - const uv = uvs2[j]; - b.addVectors(a, uv).divideScalar(2); - const vnum = face2[j]; - ctx.fillText(abc[j] + vnum, b.x * width, (1 - b.y) * height); - if (b.x > .95) ctx.fillText(abc[j] + vnum, b.x % 1 * width, (1 - b.y) * height); - } - } -} -//#endregion -//#region node_modules/three-stdlib/utils/GeometryUtils.js -var hilbert2D = (center = new Vector3(0, 0, 0), size = 10, iterations = 1, v0 = 0, v1 = 1, v2 = 2, v3 = 3) => { - const half = size / 2; - const vec_s = [ - new Vector3(center.x - half, center.y, center.z - half), - new Vector3(center.x - half, center.y, center.z + half), - new Vector3(center.x + half, center.y, center.z + half), - new Vector3(center.x + half, center.y, center.z - half) - ]; - const vec = [ - vec_s[v0], - vec_s[v1], - vec_s[v2], - vec_s[v3] - ]; - if (0 <= --iterations) { - const tmp = []; - Array.prototype.push.apply(tmp, hilbert2D(vec[0], half, iterations, v0, v3, v2, v1)); - Array.prototype.push.apply(tmp, hilbert2D(vec[1], half, iterations, v0, v1, v2, v3)); - Array.prototype.push.apply(tmp, hilbert2D(vec[2], half, iterations, v0, v1, v2, v3)); - Array.prototype.push.apply(tmp, hilbert2D(vec[3], half, iterations, v2, v1, v0, v3)); - return tmp; - } - return vec; -}; -var hilbert3D = (center = new Vector3(0, 0, 0), size = 10, iterations = 1, v0 = 0, v1 = 1, v2 = 2, v3 = 3, v4 = 4, v5 = 5, v6 = 6, v7 = 7) => { - const half = size / 2; - const vec_s = [ - new Vector3(center.x - half, center.y + half, center.z - half), - new Vector3(center.x - half, center.y + half, center.z + half), - new Vector3(center.x - half, center.y - half, center.z + half), - new Vector3(center.x - half, center.y - half, center.z - half), - new Vector3(center.x + half, center.y - half, center.z - half), - new Vector3(center.x + half, center.y - half, center.z + half), - new Vector3(center.x + half, center.y + half, center.z + half), - new Vector3(center.x + half, center.y + half, center.z - half) - ]; - const vec = [ - vec_s[v0], - vec_s[v1], - vec_s[v2], - vec_s[v3], - vec_s[v4], - vec_s[v5], - vec_s[v6], - vec_s[v7] - ]; - if (--iterations >= 0) { - const tmp = []; - Array.prototype.push.apply(tmp, hilbert3D(vec[0], half, iterations, v0, v3, v4, v7, v6, v5, v2, v1)); - Array.prototype.push.apply(tmp, hilbert3D(vec[1], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3)); - Array.prototype.push.apply(tmp, hilbert3D(vec[2], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3)); - Array.prototype.push.apply(tmp, hilbert3D(vec[3], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5)); - Array.prototype.push.apply(tmp, hilbert3D(vec[4], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5)); - Array.prototype.push.apply(tmp, hilbert3D(vec[5], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7)); - Array.prototype.push.apply(tmp, hilbert3D(vec[6], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7)); - Array.prototype.push.apply(tmp, hilbert3D(vec[7], half, iterations, v6, v5, v2, v1, v0, v3, v4, v7)); - return tmp; - } - return vec; -}; -var gosper = (size = 1) => { - function fractalize(config) { - let output = ""; - let input = config.axiom; - for (let i = 0, il = config.steps; 0 <= il ? i < il : i > il; 0 <= il ? i++ : i--) { - output = ""; - for (let j = 0, jl = input.length; j < jl; j++) { - const char = input[j]; - if (char in config.rules) output += config.rules[char]; - else output += char; - } - input = output; - } - return output; - } - function toPoints(config) { - let currX = 0; - let currY = 0; - let angle = 0; - const path = [ - 0, - 0, - 0 - ]; - const fractal = config.fractal; - for (let i = 0, l = fractal.length; i < l; i++) { - const char = fractal[i]; - if (char === "+") angle += config.angle; - else if (char === "-") angle -= config.angle; - else if (char === "F") { - currX += config.size * Math.cos(angle); - currY += -config.size * Math.sin(angle); - path.push(currX, currY, 0); - } - } - return path; - } - return toPoints({ - fractal: fractalize({ - axiom: "A", - steps: 4, - rules: { - A: "A+BF++BF-FA--FAFA-BF+", - B: "-FA+BFBF++BF+FA--FA-B" - } - }), - size, - angle: Math.PI / 3 - }); -}; -var GeometryUtils = { - hilbert3D, - gosper, - hilbert2D -}; -//#endregion -//#region node_modules/three-stdlib/utils/RoughnessMipmapper.js -var __defProp$39 = Object.defineProperty; -var __defNormalProp$39 = (obj, key, value) => key in obj ? __defProp$39(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$39 = (obj, key, value) => { - __defNormalProp$39(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var _mipmapMaterial = /* @__PURE__ */ _getMipmapMaterial(); -var _mesh = /* @__PURE__ */ new Mesh(/* @__PURE__ */ new PlaneGeometry(2, 2), _mipmapMaterial); -var _flatCamera = /* @__PURE__ */ new OrthographicCamera(0, 1, 0, 1, 0, 1); -var _tempTarget = null; -var RoughnessMipmapper = class { - constructor(renderer) { - __publicField$39(this, "generateMipmaps", function(material) { - if ("roughnessMap" in material === false) return; - var { roughnessMap, normalMap } = material; - if (roughnessMap === null || normalMap === null || !roughnessMap.generateMipmaps || material.userData.roughnessUpdated) return; - material.userData.roughnessUpdated = true; - var width = Math.max(roughnessMap.image.width, normalMap.image.width); - var height = Math.max(roughnessMap.image.height, normalMap.image.height); - if (!MathUtils.isPowerOfTwo(width) || !MathUtils.isPowerOfTwo(height)) return; - var oldTarget = this._renderer.getRenderTarget(); - var autoClear = this._renderer.autoClear; - this._renderer.autoClear = false; - if (_tempTarget === null || _tempTarget.width !== width || _tempTarget.height !== height) { - if (_tempTarget !== null) _tempTarget.dispose(); - _tempTarget = new WebGLRenderTarget(width, height, { depthBuffer: false }); - _tempTarget.scissorTest = true; - } - if (width !== roughnessMap.image.width || height !== roughnessMap.image.height) { - var params = { - wrapS: roughnessMap.wrapS, - wrapT: roughnessMap.wrapT, - magFilter: roughnessMap.magFilter, - minFilter: roughnessMap.minFilter, - depthBuffer: false - }; - var newRoughnessTarget = new WebGLRenderTarget(width, height, params); - newRoughnessTarget.texture.generateMipmaps = true; - this._renderer.setRenderTarget(newRoughnessTarget); - material.roughnessMap = newRoughnessTarget.texture; - if (material.metalnessMap == roughnessMap) material.metalnessMap = material.roughnessMap; - if (material.aoMap == roughnessMap) material.aoMap = material.roughnessMap; - } - _mipmapMaterial.uniforms.roughnessMap.value = roughnessMap; - _mipmapMaterial.uniforms.normalMap.value = normalMap; - var position = new Vector2(0, 0); - var texelSize = _mipmapMaterial.uniforms.texelSize.value; - for (let mip = 0; width >= 1 && height >= 1; ++mip, width /= 2, height /= 2) { - texelSize.set(1 / width, 1 / height); - if (mip == 0) texelSize.set(0, 0); - _tempTarget.viewport.set(position.x, position.y, width, height); - _tempTarget.scissor.set(position.x, position.y, width, height); - this._renderer.setRenderTarget(_tempTarget); - this._renderer.render(_mesh, _flatCamera); - this._renderer.copyFramebufferToTexture(position, material.roughnessMap, mip); - _mipmapMaterial.uniforms.roughnessMap.value = material.roughnessMap; - } - if (roughnessMap !== material.roughnessMap) roughnessMap.dispose(); - this._renderer.setRenderTarget(oldTarget); - this._renderer.autoClear = autoClear; - }); - __publicField$39(this, "dispose", function() { - _mipmapMaterial.dispose(); - _mesh.geometry.dispose(); - if (_tempTarget != null) _tempTarget.dispose(); - }); - this._renderer = renderer; - this._renderer.compile(_mesh, _flatCamera); - } -}; -function _getMipmapMaterial() { - var shaderMaterial = new RawShaderMaterial({ - uniforms: { - roughnessMap: { value: null }, - normalMap: { value: null }, - texelSize: { value: new Vector2(1, 1) } - }, - vertexShader: ` - precision mediump float; - precision mediump int; - - attribute vec3 position; - attribute vec2 uv; - - varying vec2 vUv; - - void main() { - - vUv = uv; - - gl_Position = vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - precision mediump float; - precision mediump int; - - varying vec2 vUv; - - uniform sampler2D roughnessMap; - uniform sampler2D normalMap; - uniform vec2 texelSize; - - #define ENVMAP_TYPE_CUBE_UV - - vec4 envMapTexelToLinear( vec4 a ) { return a; } - - #include <cube_uv_reflection_fragment> - - float roughnessToVariance( float roughness ) { - - float variance = 0.0; - - if ( roughness >= r1 ) { - - variance = ( r0 - roughness ) * ( v1 - v0 ) / ( r0 - r1 ) + v0; - - } else if ( roughness >= r4 ) { - - variance = ( r1 - roughness ) * ( v4 - v1 ) / ( r1 - r4 ) + v1; - - } else if ( roughness >= r5 ) { - - variance = ( r4 - roughness ) * ( v5 - v4 ) / ( r4 - r5 ) + v4; - - } else { - - float roughness2 = roughness * roughness; - - variance = 1.79 * roughness2 * roughness2; - - } - - return variance; - - } - - float varianceToRoughness( float variance ) { - - float roughness = 0.0; - - if ( variance >= v1 ) { - - roughness = ( v0 - variance ) * ( r1 - r0 ) / ( v0 - v1 ) + r0; - - } else if ( variance >= v4 ) { - - roughness = ( v1 - variance ) * ( r4 - r1 ) / ( v1 - v4 ) + r1; - - } else if ( variance >= v5 ) { - - roughness = ( v4 - variance ) * ( r5 - r4 ) / ( v4 - v5 ) + r4; - - } else { - - roughness = pow( 0.559 * variance, 0.25 ); // 0.559 = 1.0 / 1.79 - - } - - return roughness; - - } - - void main() { - - gl_FragColor = texture2D( roughnessMap, vUv, - 1.0 ); - - if ( texelSize.x == 0.0 ) return; - - float roughness = gl_FragColor.g; - - float variance = roughnessToVariance( roughness ); - - vec3 avgNormal; - - for ( float x = - 1.0; x < 2.0; x += 2.0 ) { - - for ( float y = - 1.0; y < 2.0; y += 2.0 ) { - - vec2 uv = vUv + vec2( x, y ) * 0.25 * texelSize; - - avgNormal += normalize( texture2D( normalMap, uv, - 1.0 ).xyz - 0.5 ); - - } - - } - - variance += 1.0 - 0.25 * length( avgNormal ); - - gl_FragColor.g = varianceToRoughness( variance ); - - } - `, - blending: 0, - depthTest: false, - depthWrite: false - }); - shaderMaterial.type = "RoughnessMipmapper"; - return shaderMaterial; -} -//#endregion -//#region node_modules/three-stdlib/utils/SkeletonUtils.js -function retarget(target, source, options = {}) { - const pos = new Vector3(), quat = new Quaternion(), scale = new Vector3(), bindBoneMatrix = new Matrix4(), relativeMatrix = new Matrix4(), globalMatrix = new Matrix4(); - options.preserveMatrix = options.preserveMatrix !== void 0 ? options.preserveMatrix : true; - options.preservePosition = options.preservePosition !== void 0 ? options.preservePosition : true; - options.preserveHipPosition = options.preserveHipPosition !== void 0 ? options.preserveHipPosition : false; - options.useTargetMatrix = options.useTargetMatrix !== void 0 ? options.useTargetMatrix : false; - options.hip = options.hip !== void 0 ? options.hip : "hip"; - options.names = options.names || {}; - const sourceBones = source.isObject3D ? source.skeleton.bones : getBones(source), bones = target.isObject3D ? target.skeleton.bones : getBones(target); - let bindBones, bone, name, boneTo, bonesPosition; - if (target.isObject3D) target.skeleton.pose(); - else { - options.useTargetMatrix = true; - options.preserveMatrix = false; - } - if (options.preservePosition) { - bonesPosition = []; - for (let i = 0; i < bones.length; i++) bonesPosition.push(bones[i].position.clone()); - } - if (options.preserveMatrix) { - target.updateMatrixWorld(); - target.matrixWorld.identity(); - for (let i = 0; i < target.children.length; ++i) target.children[i].updateMatrixWorld(true); - } - if (options.offsets) { - bindBones = []; - for (let i = 0; i < bones.length; ++i) { - bone = bones[i]; - name = options.names[bone.name] || bone.name; - if (options.offsets[name]) { - bone.matrix.multiply(options.offsets[name]); - bone.matrix.decompose(bone.position, bone.quaternion, bone.scale); - bone.updateMatrixWorld(); - } - bindBones.push(bone.matrixWorld.clone()); - } - } - for (let i = 0; i < bones.length; ++i) { - bone = bones[i]; - name = options.names[bone.name] || bone.name; - boneTo = getBoneByName(name, sourceBones); - globalMatrix.copy(bone.matrixWorld); - if (boneTo) { - boneTo.updateMatrixWorld(); - if (options.useTargetMatrix) relativeMatrix.copy(boneTo.matrixWorld); - else { - relativeMatrix.copy(target.matrixWorld).invert(); - relativeMatrix.multiply(boneTo.matrixWorld); - } - scale.setFromMatrixScale(relativeMatrix); - relativeMatrix.scale(scale.set(1 / scale.x, 1 / scale.y, 1 / scale.z)); - globalMatrix.makeRotationFromQuaternion(quat.setFromRotationMatrix(relativeMatrix)); - if (target.isObject3D) { - const boneIndex = bones.indexOf(bone), wBindMatrix = bindBones ? bindBones[boneIndex] : bindBoneMatrix.copy(target.skeleton.boneInverses[boneIndex]).invert(); - globalMatrix.multiply(wBindMatrix); - } - globalMatrix.copyPosition(relativeMatrix); - } - if (bone.parent && bone.parent.isBone) { - bone.matrix.copy(bone.parent.matrixWorld).invert(); - bone.matrix.multiply(globalMatrix); - } else bone.matrix.copy(globalMatrix); - if (options.preserveHipPosition && name === options.hip) bone.matrix.setPosition(pos.set(0, bone.position.y, 0)); - bone.matrix.decompose(bone.position, bone.quaternion, bone.scale); - bone.updateMatrixWorld(); - } - if (options.preservePosition) for (let i = 0; i < bones.length; ++i) { - bone = bones[i]; - name = options.names[bone.name] || bone.name; - if (name !== options.hip) bone.position.copy(bonesPosition[i]); - } - if (options.preserveMatrix) target.updateMatrixWorld(true); -} -function retargetClip(target, source, clip, options = {}) { - options.useFirstFramePosition = options.useFirstFramePosition !== void 0 ? options.useFirstFramePosition : false; - options.fps = options.fps !== void 0 ? options.fps : 30; - options.names = options.names || []; - if (!source.isObject3D) source = getHelperFromSkeleton(source); - const numFrames = Math.round(clip.duration * (options.fps / 1e3) * 1e3), delta = 1 / options.fps, convertedTracks = [], mixer = new AnimationMixer(source), bones = getBones(target.skeleton), boneDatas = []; - let positionOffset, bone, boneTo, boneData, name; - mixer.clipAction(clip).play(); - mixer.update(0); - source.updateMatrixWorld(); - for (let i = 0; i < numFrames; ++i) { - const time = i * delta; - retarget(target, source, options); - for (let j = 0; j < bones.length; ++j) { - name = options.names[bones[j].name] || bones[j].name; - boneTo = getBoneByName(name, source.skeleton); - if (boneTo) { - bone = bones[j]; - boneData = boneDatas[j] = boneDatas[j] || { bone }; - if (options.hip === name) { - if (!boneData.pos) boneData.pos = { - times: new Float32Array(numFrames), - values: new Float32Array(numFrames * 3) - }; - if (options.useFirstFramePosition) { - if (i === 0) positionOffset = bone.position.clone(); - bone.position.sub(positionOffset); - } - boneData.pos.times[i] = time; - bone.position.toArray(boneData.pos.values, i * 3); - } - if (!boneData.quat) boneData.quat = { - times: new Float32Array(numFrames), - values: new Float32Array(numFrames * 4) - }; - boneData.quat.times[i] = time; - bone.quaternion.toArray(boneData.quat.values, i * 4); - } - } - mixer.update(delta); - source.updateMatrixWorld(); - } - for (let i = 0; i < boneDatas.length; ++i) { - boneData = boneDatas[i]; - if (boneData) { - if (boneData.pos) convertedTracks.push(new VectorKeyframeTrack(".bones[" + boneData.bone.name + "].position", boneData.pos.times, boneData.pos.values)); - convertedTracks.push(new QuaternionKeyframeTrack(".bones[" + boneData.bone.name + "].quaternion", boneData.quat.times, boneData.quat.values)); - } - } - mixer.uncacheAction(clip); - return new AnimationClip(clip.name, -1, convertedTracks); -} -function clone(source) { - const sourceLookup = /* @__PURE__ */ new Map(); - const cloneLookup = /* @__PURE__ */ new Map(); - const clone2 = source.clone(); - parallelTraverse(source, clone2, function(sourceNode, clonedNode) { - sourceLookup.set(clonedNode, sourceNode); - cloneLookup.set(sourceNode, clonedNode); - }); - clone2.traverse(function(node) { - if (!node.isSkinnedMesh) return; - const clonedMesh = node; - const sourceMesh = sourceLookup.get(node); - const sourceBones = sourceMesh.skeleton.bones; - clonedMesh.skeleton = sourceMesh.skeleton.clone(); - clonedMesh.bindMatrix.copy(sourceMesh.bindMatrix); - clonedMesh.skeleton.bones = sourceBones.map(function(bone) { - return cloneLookup.get(bone); - }); - clonedMesh.bind(clonedMesh.skeleton, clonedMesh.bindMatrix); - }); - return clone2; -} -function getBoneByName(name, skeleton) { - for (let i = 0, bones = getBones(skeleton); i < bones.length; i++) if (name === bones[i].name) return bones[i]; -} -function getBones(skeleton) { - return Array.isArray(skeleton) ? skeleton : skeleton.bones; -} -function getHelperFromSkeleton(skeleton) { - const source = new SkeletonHelper(skeleton.bones[0]); - source.skeleton = skeleton; - return source; -} -function parallelTraverse(a, b, callback) { - callback(a, b); - for (let i = 0; i < a.children.length; i++) parallelTraverse(a.children[i], b.children[i], callback); -} -var SkeletonUtils = { - retarget, - retargetClip, - clone -}; -//#endregion -//#region node_modules/three-stdlib/shaders/UnpackDepthRGBAShader.js -var UnpackDepthRGBAShader = { - uniforms: { - tDiffuse: { value: null }, - opacity: { value: 1 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform float opacity; - - uniform sampler2D tDiffuse; - - varying vec2 vUv; - - #include <packing> - - void main() { - - float depth = 1.0 - unpackRGBAToDepth( texture2D( tDiffuse, vUv ) ); - gl_FragColor = vec4( vec3( depth ), opacity ); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/utils/ShadowMapViewer.js -var ShadowMapViewer = class { - constructor(light) { - const scope = this; - const doRenderLabel = light.name !== void 0 && light.name !== ""; - let userAutoClearSetting; - const frame = { - x: 10, - y: 10, - width: 256, - height: 256 - }; - const camera = new OrthographicCamera(window.innerWidth / -2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / -2, 1, 10); - camera.position.set(0, 0, 2); - const scene = new Scene(); - const shader = UnpackDepthRGBAShader; - const uniforms = UniformsUtils.clone(shader.uniforms); - const material = new ShaderMaterial({ - uniforms, - vertexShader: shader.vertexShader, - fragmentShader: shader.fragmentShader - }); - const mesh = new Mesh(new PlaneGeometry(frame.width, frame.height), material); - scene.add(mesh); - let labelCanvas, labelMesh; - if (doRenderLabel) { - labelCanvas = document.createElement("canvas"); - const context = labelCanvas.getContext("2d"); - context.font = "Bold 20px Arial"; - const labelWidth = context.measureText(light.name).width; - labelCanvas.width = labelWidth; - labelCanvas.height = 25; - context.font = "Bold 20px Arial"; - context.fillStyle = "rgba( 255, 0, 0, 1 )"; - context.fillText(light.name, 0, 20); - const labelTexture = new Texture(labelCanvas); - labelTexture.magFilter = LinearFilter; - labelTexture.minFilter = LinearFilter; - labelTexture.needsUpdate = true; - const labelMaterial = new MeshBasicMaterial({ - map: labelTexture, - side: 2 - }); - labelMaterial.transparent = true; - labelMesh = new Mesh(new PlaneGeometry(labelCanvas.width, labelCanvas.height), labelMaterial); - scene.add(labelMesh); - } - function resetPosition() { - scope.position.set(scope.position.x, scope.position.y); - } - this.enabled = true; - this.size = { - width: frame.width, - height: frame.height, - set: function(width, height) { - this.width = width; - this.height = height; - mesh.scale.set(this.width / frame.width, this.height / frame.height, 1); - resetPosition(); - } - }; - this.position = { - x: frame.x, - y: frame.y, - set: function(x, y) { - this.x = x; - this.y = y; - const width = scope.size.width; - const height = scope.size.height; - mesh.position.set(-window.innerWidth / 2 + width / 2 + this.x, window.innerHeight / 2 - height / 2 - this.y, 0); - if (doRenderLabel) labelMesh.position.set(mesh.position.x, mesh.position.y - scope.size.height / 2 + labelCanvas.height / 2, 0); - } - }; - this.render = function(renderer) { - if (this.enabled) { - uniforms.tDiffuse.value = light.shadow.map.texture; - userAutoClearSetting = renderer.autoClear; - renderer.autoClear = false; - renderer.clearDepth(); - renderer.render(scene, camera); - renderer.autoClear = userAutoClearSetting; - } - }; - this.updateForWindowResize = function() { - if (this.enabled) { - camera.left = window.innerWidth / -2; - camera.right = window.innerWidth / 2; - camera.top = window.innerHeight / 2; - camera.bottom = window.innerHeight / -2; - camera.updateProjectionMatrix(); - this.update(); - } - }; - this.update = function() { - this.position.set(this.position.x, this.position.y); - this.size.set(this.size.width, this.size.height); - }; - this.update(); - } -}; -//#endregion -//#region node_modules/three-stdlib/utils/GeometryCompressionUtils.js -var GeometryCompressionUtils = { - /** - * Make the input mesh.geometry's normal attribute encoded and compressed by 3 different methods. - * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the normal data. - * - * @param {THREE.Mesh} mesh - * @param {String} encodeMethod "DEFAULT" || "OCT1Byte" || "OCT2Byte" || "ANGLES" - * - */ - compressNormals: function(mesh, encodeMethod) { - if (!mesh.geometry) console.error("Mesh must contain geometry. "); - const normal = mesh.geometry.attributes.normal; - if (!normal) console.error("Geometry must contain normal attribute. "); - if (normal.isPacked) return; - if (normal.itemSize != 3) console.error("normal.itemSize is not 3, which cannot be encoded. "); - const array = normal.array; - const count = normal.count; - let result; - if (encodeMethod == "DEFAULT") { - result = new Uint8Array(count * 3); - for (let idx = 0; idx < array.length; idx += 3) { - const encoded = this.EncodingFuncs.defaultEncode(array[idx], array[idx + 1], array[idx + 2], 1); - result[idx + 0] = encoded[0]; - result[idx + 1] = encoded[1]; - result[idx + 2] = encoded[2]; - } - mesh.geometry.setAttribute("normal", new BufferAttribute(result, 3, true)); - mesh.geometry.attributes.normal.bytes = result.length * 1; - } else if (encodeMethod == "OCT1Byte") { - result = new Int8Array(count * 2); - for (let idx = 0; idx < array.length; idx += 3) { - const encoded = this.EncodingFuncs.octEncodeBest(array[idx], array[idx + 1], array[idx + 2], 1); - result[idx / 3 * 2 + 0] = encoded[0]; - result[idx / 3 * 2 + 1] = encoded[1]; - } - mesh.geometry.setAttribute("normal", new BufferAttribute(result, 2, true)); - mesh.geometry.attributes.normal.bytes = result.length * 1; - } else if (encodeMethod == "OCT2Byte") { - result = new Int16Array(count * 2); - for (let idx = 0; idx < array.length; idx += 3) { - const encoded = this.EncodingFuncs.octEncodeBest(array[idx], array[idx + 1], array[idx + 2], 2); - result[idx / 3 * 2 + 0] = encoded[0]; - result[idx / 3 * 2 + 1] = encoded[1]; - } - mesh.geometry.setAttribute("normal", new BufferAttribute(result, 2, true)); - mesh.geometry.attributes.normal.bytes = result.length * 2; - } else if (encodeMethod == "ANGLES") { - result = new Uint16Array(count * 2); - for (let idx = 0; idx < array.length; idx += 3) { - const encoded = this.EncodingFuncs.anglesEncode(array[idx], array[idx + 1], array[idx + 2]); - result[idx / 3 * 2 + 0] = encoded[0]; - result[idx / 3 * 2 + 1] = encoded[1]; - } - mesh.geometry.setAttribute("normal", new BufferAttribute(result, 2, true)); - mesh.geometry.attributes.normal.bytes = result.length * 2; - } else console.error("Unrecognized encoding method, should be `DEFAULT` or `ANGLES` or `OCT`. "); - mesh.geometry.attributes.normal.needsUpdate = true; - mesh.geometry.attributes.normal.isPacked = true; - mesh.geometry.attributes.normal.packingMethod = encodeMethod; - if (!(mesh.material instanceof PackedPhongMaterial)) mesh.material = new PackedPhongMaterial().copy(mesh.material); - if (encodeMethod == "ANGLES") mesh.material.defines.USE_PACKED_NORMAL = 0; - if (encodeMethod == "OCT1Byte") mesh.material.defines.USE_PACKED_NORMAL = 1; - if (encodeMethod == "OCT2Byte") mesh.material.defines.USE_PACKED_NORMAL = 1; - if (encodeMethod == "DEFAULT") mesh.material.defines.USE_PACKED_NORMAL = 2; - }, - /** - * Make the input mesh.geometry's position attribute encoded and compressed. - * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the position data. - * - * @param {THREE.Mesh} mesh - * - */ - compressPositions: function(mesh) { - if (!mesh.geometry) console.error("Mesh must contain geometry. "); - const position = mesh.geometry.attributes.position; - if (!position) console.error("Geometry must contain position attribute. "); - if (position.isPacked) return; - if (position.itemSize != 3) console.error("position.itemSize is not 3, which cannot be packed. "); - const array = position.array; - const encodingBytes = 2; - const result = this.EncodingFuncs.quantizedEncode(array, encodingBytes); - const quantized = result.quantized; - const decodeMat = result.decodeMat; - if (mesh.geometry.boundingBox == null) mesh.geometry.computeBoundingBox(); - if (mesh.geometry.boundingSphere == null) mesh.geometry.computeBoundingSphere(); - mesh.geometry.setAttribute("position", new BufferAttribute(quantized, 3)); - mesh.geometry.attributes.position.isPacked = true; - mesh.geometry.attributes.position.needsUpdate = true; - mesh.geometry.attributes.position.bytes = quantized.length * encodingBytes; - if (!(mesh.material instanceof PackedPhongMaterial)) mesh.material = new PackedPhongMaterial().copy(mesh.material); - mesh.material.defines.USE_PACKED_POSITION = 0; - mesh.material.uniforms.quantizeMatPos.value = decodeMat; - mesh.material.uniforms.quantizeMatPos.needsUpdate = true; - }, - /** - * Make the input mesh.geometry's uv attribute encoded and compressed. - * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the uv data. - * - * @param {THREE.Mesh} mesh - * - */ - compressUvs: function(mesh) { - if (!mesh.geometry) console.error("Mesh must contain geometry property. "); - const uvs = mesh.geometry.attributes.uv; - if (!uvs) console.error("Geometry must contain uv attribute. "); - if (uvs.isPacked) return; - const range = { - min: Infinity, - max: -Infinity - }; - const array = uvs.array; - for (let i = 0; i < array.length; i++) { - range.min = Math.min(range.min, array[i]); - range.max = Math.max(range.max, array[i]); - } - let result; - if (range.min >= -1 && range.max <= 1) { - result = new Uint16Array(array.length); - for (let i = 0; i < array.length; i += 2) { - const encoded = this.EncodingFuncs.defaultEncode(array[i], array[i + 1], 0, 2); - result[i] = encoded[0]; - result[i + 1] = encoded[1]; - } - mesh.geometry.setAttribute("uv", new BufferAttribute(result, 2, true)); - mesh.geometry.attributes.uv.isPacked = true; - mesh.geometry.attributes.uv.needsUpdate = true; - mesh.geometry.attributes.uv.bytes = result.length * 2; - if (!(mesh.material instanceof PackedPhongMaterial)) mesh.material = new PackedPhongMaterial().copy(mesh.material); - mesh.material.defines.USE_PACKED_UV = 0; - } else { - result = this.EncodingFuncs.quantizedEncodeUV(array, 2); - mesh.geometry.setAttribute("uv", new BufferAttribute(result.quantized, 2)); - mesh.geometry.attributes.uv.isPacked = true; - mesh.geometry.attributes.uv.needsUpdate = true; - mesh.geometry.attributes.uv.bytes = result.quantized.length * 2; - if (!(mesh.material instanceof PackedPhongMaterial)) mesh.material = new PackedPhongMaterial().copy(mesh.material); - mesh.material.defines.USE_PACKED_UV = 1; - mesh.material.uniforms.quantizeMatUV.value = result.decodeMat; - mesh.material.uniforms.quantizeMatUV.needsUpdate = true; - } - }, - EncodingFuncs: { - defaultEncode: function(x, y, z, bytes) { - if (bytes == 1) { - const tmpx = Math.round((x + 1) * .5 * 255); - const tmpy = Math.round((y + 1) * .5 * 255); - const tmpz = Math.round((z + 1) * .5 * 255); - return new Uint8Array([ - tmpx, - tmpy, - tmpz - ]); - } else if (bytes == 2) { - const tmpx = Math.round((x + 1) * .5 * 65535); - const tmpy = Math.round((y + 1) * .5 * 65535); - const tmpz = Math.round((z + 1) * .5 * 65535); - return new Uint16Array([ - tmpx, - tmpy, - tmpz - ]); - } else console.error("number of bytes must be 1 or 2"); - }, - defaultDecode: function(array, bytes) { - if (bytes == 1) return [ - array[0] / 255 * 2 - 1, - array[1] / 255 * 2 - 1, - array[2] / 255 * 2 - 1 - ]; - else if (bytes == 2) return [ - array[0] / 65535 * 2 - 1, - array[1] / 65535 * 2 - 1, - array[2] / 65535 * 2 - 1 - ]; - else console.error("number of bytes must be 1 or 2"); - }, - anglesEncode: function(x, y, z) { - const normal0 = parseInt(.5 * (1 + Math.atan2(y, x) / Math.PI) * 65535); - const normal1 = parseInt(.5 * (1 + z) * 65535); - return new Uint16Array([normal0, normal1]); - }, - octEncodeBest: function(x, y, z, bytes) { - var oct, dec, best = oct = octEncodeVec3(x, y, z, "floor", "floor"), currentCos, bestCos; - dec = octDecodeVec2(oct); - bestCos = dot(x, y, z, dec); - oct = octEncodeVec3(x, y, z, "ceil", "floor"); - dec = octDecodeVec2(oct); - currentCos = dot(x, y, z, dec); - if (currentCos > bestCos) { - best = oct; - bestCos = currentCos; - } - oct = octEncodeVec3(x, y, z, "floor", "ceil"); - dec = octDecodeVec2(oct); - currentCos = dot(x, y, z, dec); - if (currentCos > bestCos) { - best = oct; - bestCos = currentCos; - } - oct = octEncodeVec3(x, y, z, "ceil", "ceil"); - dec = octDecodeVec2(oct); - currentCos = dot(x, y, z, dec); - if (currentCos > bestCos) best = oct; - return best; - function octEncodeVec3(x0, y0, z0, xfunc, yfunc) { - var x2 = x0 / (Math.abs(x0) + Math.abs(y0) + Math.abs(z0)); - var y2 = y0 / (Math.abs(x0) + Math.abs(y0) + Math.abs(z0)); - if (z < 0) { - var tempx = (1 - Math.abs(y2)) * (x2 >= 0 ? 1 : -1); - var tempy = (1 - Math.abs(x2)) * (y2 >= 0 ? 1 : -1); - x2 = tempx; - y2 = tempy; - var diff = 1 - Math.abs(x2) - Math.abs(y2); - if (diff > 0) { - diff += .001; - x2 += x2 > 0 ? diff / 2 : -diff / 2; - y2 += y2 > 0 ? diff / 2 : -diff / 2; - } - } - if (bytes == 1) return new Int8Array([Math[xfunc](x2 * 127.5 + (x2 < 0 ? 1 : 0)), Math[yfunc](y2 * 127.5 + (y2 < 0 ? 1 : 0))]); - if (bytes == 2) return new Int16Array([Math[xfunc](x2 * 32767.5 + (x2 < 0 ? 1 : 0)), Math[yfunc](y2 * 32767.5 + (y2 < 0 ? 1 : 0))]); - } - function octDecodeVec2(oct2) { - var x2 = oct2[0]; - var y2 = oct2[1]; - if (bytes == 1) { - x2 /= x2 < 0 ? 127 : 128; - y2 /= y2 < 0 ? 127 : 128; - } else if (bytes == 2) { - x2 /= x2 < 0 ? 32767 : 32768; - y2 /= y2 < 0 ? 32767 : 32768; - } - var z2 = 1 - Math.abs(x2) - Math.abs(y2); - if (z2 < 0) { - var tmpx = x2; - x2 = (1 - Math.abs(y2)) * (x2 >= 0 ? 1 : -1); - y2 = (1 - Math.abs(tmpx)) * (y2 >= 0 ? 1 : -1); - } - var length = Math.sqrt(x2 * x2 + y2 * y2 + z2 * z2); - return [ - x2 / length, - y2 / length, - z2 / length - ]; - } - function dot(x2, y2, z2, vec3) { - return x2 * vec3[0] + y2 * vec3[1] + z2 * vec3[2]; - } - }, - quantizedEncode: function(array, bytes) { - let quantized, segments; - if (bytes == 1) { - quantized = new Uint8Array(array.length); - segments = 255; - } else if (bytes == 2) { - quantized = new Uint16Array(array.length); - segments = 65535; - } else console.error("number of bytes error! "); - const decodeMat = new Matrix4(); - const min = new Float32Array(3); - const max = new Float32Array(3); - min[0] = min[1] = min[2] = Number.MAX_VALUE; - max[0] = max[1] = max[2] = -Number.MAX_VALUE; - for (let i = 0; i < array.length; i += 3) { - min[0] = Math.min(min[0], array[i + 0]); - min[1] = Math.min(min[1], array[i + 1]); - min[2] = Math.min(min[2], array[i + 2]); - max[0] = Math.max(max[0], array[i + 0]); - max[1] = Math.max(max[1], array[i + 1]); - max[2] = Math.max(max[2], array[i + 2]); - } - decodeMat.scale(new Vector3((max[0] - min[0]) / segments, (max[1] - min[1]) / segments, (max[2] - min[2]) / segments)); - decodeMat.elements[12] = min[0]; - decodeMat.elements[13] = min[1]; - decodeMat.elements[14] = min[2]; - decodeMat.transpose(); - const multiplier = new Float32Array([ - max[0] !== min[0] ? segments / (max[0] - min[0]) : 0, - max[1] !== min[1] ? segments / (max[1] - min[1]) : 0, - max[2] !== min[2] ? segments / (max[2] - min[2]) : 0 - ]); - for (let i = 0; i < array.length; i += 3) { - quantized[i + 0] = Math.floor((array[i + 0] - min[0]) * multiplier[0]); - quantized[i + 1] = Math.floor((array[i + 1] - min[1]) * multiplier[1]); - quantized[i + 2] = Math.floor((array[i + 2] - min[2]) * multiplier[2]); - } - return { - quantized, - decodeMat - }; - }, - quantizedEncodeUV: function(array, bytes) { - let quantized, segments; - if (bytes == 1) { - quantized = new Uint8Array(array.length); - segments = 255; - } else if (bytes == 2) { - quantized = new Uint16Array(array.length); - segments = 65535; - } else console.error("number of bytes error! "); - const decodeMat = new Matrix3(); - const min = new Float32Array(2); - const max = new Float32Array(2); - min[0] = min[1] = Number.MAX_VALUE; - max[0] = max[1] = -Number.MAX_VALUE; - for (let i = 0; i < array.length; i += 2) { - min[0] = Math.min(min[0], array[i + 0]); - min[1] = Math.min(min[1], array[i + 1]); - max[0] = Math.max(max[0], array[i + 0]); - max[1] = Math.max(max[1], array[i + 1]); - } - decodeMat.scale((max[0] - min[0]) / segments, (max[1] - min[1]) / segments); - decodeMat.elements[6] = min[0]; - decodeMat.elements[7] = min[1]; - decodeMat.transpose(); - const multiplier = new Float32Array([max[0] !== min[0] ? segments / (max[0] - min[0]) : 0, max[1] !== min[1] ? segments / (max[1] - min[1]) : 0]); - for (let i = 0; i < array.length; i += 2) { - quantized[i + 0] = Math.floor((array[i + 0] - min[0]) * multiplier[0]); - quantized[i + 1] = Math.floor((array[i + 1] - min[1]) * multiplier[1]); - } - return { - quantized, - decodeMat - }; - } - } -}; -var PackedPhongMaterial = class extends MeshPhongMaterial { - constructor(parameters) { - super(); - this.defines = {}; - this.type = "PackedPhongMaterial"; - this.uniforms = UniformsUtils.merge([ShaderLib.phong.uniforms, { - quantizeMatPos: { value: null }, - quantizeMatUV: { value: null } - }]); - this.vertexShader = [ - "#define PHONG", - "varying vec3 vViewPosition;", - "#ifndef FLAT_SHADED", - "varying vec3 vNormal;", - "#endif", - ShaderChunk.common, - ShaderChunk.uv_pars_vertex, - ShaderChunk.uv2_pars_vertex, - ShaderChunk.displacementmap_pars_vertex, - ShaderChunk.envmap_pars_vertex, - ShaderChunk.color_pars_vertex, - ShaderChunk.fog_pars_vertex, - ShaderChunk.morphtarget_pars_vertex, - ShaderChunk.skinning_pars_vertex, - ShaderChunk.shadowmap_pars_vertex, - ShaderChunk.logdepthbuf_pars_vertex, - ShaderChunk.clipping_planes_pars_vertex, - `#ifdef USE_PACKED_NORMAL - #if USE_PACKED_NORMAL == 0 - vec3 decodeNormal(vec3 packedNormal) - { - float x = packedNormal.x * 2.0 - 1.0; - float y = packedNormal.y * 2.0 - 1.0; - vec2 scth = vec2(sin(x * PI), cos(x * PI)); - vec2 scphi = vec2(sqrt(1.0 - y * y), y); - return normalize( vec3(scth.y * scphi.x, scth.x * scphi.x, scphi.y) ); - } - #endif - - #if USE_PACKED_NORMAL == 1 - vec3 decodeNormal(vec3 packedNormal) - { - vec3 v = vec3(packedNormal.xy, 1.0 - abs(packedNormal.x) - abs(packedNormal.y)); - if (v.z < 0.0) - { - v.xy = (1.0 - abs(v.yx)) * vec2((v.x >= 0.0) ? +1.0 : -1.0, (v.y >= 0.0) ? +1.0 : -1.0); - } - return normalize(v); - } - #endif - - #if USE_PACKED_NORMAL == 2 - vec3 decodeNormal(vec3 packedNormal) - { - vec3 v = (packedNormal * 2.0) - 1.0; - return normalize(v); - } - #endif - #endif`, - `#ifdef USE_PACKED_POSITION - #if USE_PACKED_POSITION == 0 - uniform mat4 quantizeMatPos; - #endif - #endif`, - `#ifdef USE_PACKED_UV - #if USE_PACKED_UV == 1 - uniform mat3 quantizeMatUV; - #endif - #endif`, - `#ifdef USE_PACKED_UV - #if USE_PACKED_UV == 0 - vec2 decodeUV(vec2 packedUV) - { - vec2 uv = (packedUV * 2.0) - 1.0; - return uv; - } - #endif - - #if USE_PACKED_UV == 1 - vec2 decodeUV(vec2 packedUV) - { - vec2 uv = ( vec3(packedUV, 1.0) * quantizeMatUV ).xy; - return uv; - } - #endif - #endif`, - "void main() {", - ShaderChunk.uv_vertex, - `#ifdef USE_UV - #ifdef USE_PACKED_UV - vUv = decodeUV(vUv); - #endif - #endif`, - ShaderChunk.uv2_vertex, - ShaderChunk.color_vertex, - ShaderChunk.beginnormal_vertex, - `#ifdef USE_PACKED_NORMAL - objectNormal = decodeNormal(objectNormal); - #endif - - #ifdef USE_TANGENT - vec3 objectTangent = vec3( tangent.xyz ); - #endif - `, - ShaderChunk.morphnormal_vertex, - ShaderChunk.skinbase_vertex, - ShaderChunk.skinnormal_vertex, - ShaderChunk.defaultnormal_vertex, - "#ifndef FLAT_SHADED", - " vNormal = normalize( transformedNormal );", - "#endif", - ShaderChunk.begin_vertex, - `#ifdef USE_PACKED_POSITION - #if USE_PACKED_POSITION == 0 - transformed = ( vec4(transformed, 1.0) * quantizeMatPos ).xyz; - #endif - #endif`, - ShaderChunk.morphtarget_vertex, - ShaderChunk.skinning_vertex, - ShaderChunk.displacementmap_vertex, - ShaderChunk.project_vertex, - ShaderChunk.logdepthbuf_vertex, - ShaderChunk.clipping_planes_vertex, - "vViewPosition = - mvPosition.xyz;", - ShaderChunk.worldpos_vertex, - ShaderChunk.envmap_vertex, - ShaderChunk.shadowmap_vertex, - ShaderChunk.fog_vertex, - "}" - ].join("\n"); - this.fragmentShader = [ - "#define PHONG", - "uniform vec3 diffuse;", - "uniform vec3 emissive;", - "uniform vec3 specular;", - "uniform float shininess;", - "uniform float opacity;", - ShaderChunk.common, - ShaderChunk.packing, - ShaderChunk.dithering_pars_fragment, - ShaderChunk.color_pars_fragment, - ShaderChunk.uv_pars_fragment, - ShaderChunk.uv2_pars_fragment, - ShaderChunk.map_pars_fragment, - ShaderChunk.alphamap_pars_fragment, - ShaderChunk.aomap_pars_fragment, - ShaderChunk.lightmap_pars_fragment, - ShaderChunk.emissivemap_pars_fragment, - ShaderChunk.envmap_common_pars_fragment, - ShaderChunk.envmap_pars_fragment, - ShaderChunk.cube_uv_reflection_fragment, - ShaderChunk.fog_pars_fragment, - ShaderChunk.bsdfs, - ShaderChunk.lights_pars_begin, - ShaderChunk.lights_phong_pars_fragment, - ShaderChunk.shadowmap_pars_fragment, - ShaderChunk.bumpmap_pars_fragment, - ShaderChunk.normalmap_pars_fragment, - ShaderChunk.specularmap_pars_fragment, - ShaderChunk.logdepthbuf_pars_fragment, - ShaderChunk.clipping_planes_pars_fragment, - "void main() {", - ShaderChunk.clipping_planes_fragment, - "vec4 diffuseColor = vec4( diffuse, opacity );", - "ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );", - "vec3 totalEmissiveRadiance = emissive;", - ShaderChunk.logdepthbuf_fragment, - ShaderChunk.map_fragment, - ShaderChunk.color_fragment, - ShaderChunk.alphamap_fragment, - ShaderChunk.alphatest_fragment, - ShaderChunk.specularmap_fragment, - ShaderChunk.normal_fragment_begin, - ShaderChunk.normal_fragment_maps, - ShaderChunk.emissivemap_fragment, - ShaderChunk.lights_phong_fragment, - ShaderChunk.lights_fragment_begin, - ShaderChunk.lights_fragment_maps, - ShaderChunk.lights_fragment_end, - ShaderChunk.aomap_fragment, - "vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;", - ShaderChunk.envmap_fragment, - "gl_FragColor = vec4( outgoingLight, diffuseColor.a );", - ShaderChunk.tonemapping_fragment, - version >= 154 ? ShaderChunk.colorspace_fragment : ShaderChunk.encodings_fragment, - ShaderChunk.fog_fragment, - ShaderChunk.premultiplied_alpha_fragment, - ShaderChunk.dithering_fragment, - "}" - ].join("\n"); - this.setValues(parameters); - } -}; -//#endregion -//#region node_modules/three-stdlib/shaders/BokehShader2.js -var BokehShader2 = { - uniforms: { - textureWidth: { value: 1 }, - textureHeight: { value: 1 }, - focalDepth: { value: 1 }, - focalLength: { value: 24 }, - fstop: { value: .9 }, - tColor: { value: null }, - tDepth: { value: null }, - maxblur: { value: 1 }, - showFocus: { value: 0 }, - manualdof: { value: 0 }, - vignetting: { value: 0 }, - depthblur: { value: 0 }, - threshold: { value: .5 }, - gain: { value: 2 }, - bias: { value: .5 }, - fringe: { value: .7 }, - znear: { value: .1 }, - zfar: { value: 100 }, - noise: { value: 1 }, - dithering: { value: 1e-4 }, - pentagon: { value: 0 }, - shaderFocus: { value: 1 }, - focusCoords: { value: /* @__PURE__ */ new Vector2() } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - #include <common> - - varying vec2 vUv; - - uniform sampler2D tColor; - uniform sampler2D tDepth; - uniform float textureWidth; - uniform float textureHeight; - - uniform float focalDepth; //focal distance value in meters, but you may use autofocus option below - uniform float focalLength; //focal length in mm - uniform float fstop; //f-stop value - uniform bool showFocus; //show debug focus point and focal range (red = focal point, green = focal range) - - /* - make sure that these two values are the same for your camera, otherwise distances will be wrong. - */ - - uniform float znear; // camera clipping start - uniform float zfar; // camera clipping end - - //------------------------------------------ - //user variables - - const int samples = SAMPLES; //samples on the first ring - const int rings = RINGS; //ring count - - const int maxringsamples = rings * samples; - - uniform bool manualdof; // manual dof calculation - float ndofstart = 1.0; // near dof blur start - float ndofdist = 2.0; // near dof blur falloff distance - float fdofstart = 1.0; // far dof blur start - float fdofdist = 3.0; // far dof blur falloff distance - - float CoC = 0.03; //circle of confusion size in mm (35mm film = 0.03mm) - - uniform bool vignetting; // use optical lens vignetting - - float vignout = 1.3; // vignetting outer border - float vignin = 0.0; // vignetting inner border - float vignfade = 22.0; // f-stops till vignete fades - - uniform bool shaderFocus; - // disable if you use external focalDepth value - - uniform vec2 focusCoords; - // autofocus point on screen (0.0,0.0 - left lower corner, 1.0,1.0 - upper right) - // if center of screen use vec2(0.5, 0.5); - - uniform float maxblur; - //clamp value of max blur (0.0 = no blur, 1.0 default) - - uniform float threshold; // highlight threshold; - uniform float gain; // highlight gain; - - uniform float bias; // bokeh edge bias - uniform float fringe; // bokeh chromatic aberration / fringing - - uniform bool noise; //use noise instead of pattern for sample dithering - - uniform float dithering; - - uniform bool depthblur; // blur the depth buffer - float dbsize = 1.25; // depth blur size - - /* - next part is experimental - not looking good with small sample and ring count - looks okay starting from samples = 4, rings = 4 - */ - - uniform bool pentagon; //use pentagon as bokeh shape? - float feather = 0.4; //pentagon shape feather - - //------------------------------------------ - - float penta(vec2 coords) { - //pentagonal shape - float scale = float(rings) - 1.3; - vec4 HS0 = vec4( 1.0, 0.0, 0.0, 1.0); - vec4 HS1 = vec4( 0.309016994, 0.951056516, 0.0, 1.0); - vec4 HS2 = vec4(-0.809016994, 0.587785252, 0.0, 1.0); - vec4 HS3 = vec4(-0.809016994,-0.587785252, 0.0, 1.0); - vec4 HS4 = vec4( 0.309016994,-0.951056516, 0.0, 1.0); - vec4 HS5 = vec4( 0.0 ,0.0 , 1.0, 1.0); - - vec4 one = vec4( 1.0 ); - - vec4 P = vec4((coords),vec2(scale, scale)); - - vec4 dist = vec4(0.0); - float inorout = -4.0; - - dist.x = dot( P, HS0 ); - dist.y = dot( P, HS1 ); - dist.z = dot( P, HS2 ); - dist.w = dot( P, HS3 ); - - dist = smoothstep( -feather, feather, dist ); - - inorout += dot( dist, one ); - - dist.x = dot( P, HS4 ); - dist.y = HS5.w - abs( P.z ); - - dist = smoothstep( -feather, feather, dist ); - inorout += dist.x; - - return clamp( inorout, 0.0, 1.0 ); - } - - float bdepth(vec2 coords) { - // Depth buffer blur - float d = 0.0; - float kernel[9]; - vec2 offset[9]; - - vec2 wh = vec2(1.0/textureWidth,1.0/textureHeight) * dbsize; - - offset[0] = vec2(-wh.x,-wh.y); - offset[1] = vec2( 0.0, -wh.y); - offset[2] = vec2( wh.x -wh.y); - - offset[3] = vec2(-wh.x, 0.0); - offset[4] = vec2( 0.0, 0.0); - offset[5] = vec2( wh.x, 0.0); - - offset[6] = vec2(-wh.x, wh.y); - offset[7] = vec2( 0.0, wh.y); - offset[8] = vec2( wh.x, wh.y); - - kernel[0] = 1.0/16.0; kernel[1] = 2.0/16.0; kernel[2] = 1.0/16.0; - kernel[3] = 2.0/16.0; kernel[4] = 4.0/16.0; kernel[5] = 2.0/16.0; - kernel[6] = 1.0/16.0; kernel[7] = 2.0/16.0; kernel[8] = 1.0/16.0; - - for( int i=0; i<9; i++ ) { - float tmp = texture2D(tDepth, coords + offset[i]).r; - d += tmp * kernel[i]; - } - - return d; - } - - vec3 color(vec2 coords,float blur) { - //processing the sample - - vec3 col = vec3(0.0); - vec2 texel = vec2(1.0/textureWidth,1.0/textureHeight); - - col.r = texture2D(tColor,coords + vec2(0.0,1.0)*texel*fringe*blur).r; - col.g = texture2D(tColor,coords + vec2(-0.866,-0.5)*texel*fringe*blur).g; - col.b = texture2D(tColor,coords + vec2(0.866,-0.5)*texel*fringe*blur).b; - - vec3 lumcoeff = vec3(0.299,0.587,0.114); - float lum = dot(col.rgb, lumcoeff); - float thresh = max((lum-threshold)*gain, 0.0); - return col+mix(vec3(0.0),col,thresh*blur); - } - - vec3 debugFocus(vec3 col, float blur, float depth) { - float edge = 0.002*depth; //distance based edge smoothing - float m = clamp(smoothstep(0.0,edge,blur),0.0,1.0); - float e = clamp(smoothstep(1.0-edge,1.0,blur),0.0,1.0); - - col = mix(col,vec3(1.0,0.5,0.0),(1.0-m)*0.6); - col = mix(col,vec3(0.0,0.5,1.0),((1.0-e)-(1.0-m))*0.2); - - return col; - } - - float linearize(float depth) { - return -zfar * znear / (depth * (zfar - znear) - zfar); - } - - float vignette() { - float dist = distance(vUv.xy, vec2(0.5,0.5)); - dist = smoothstep(vignout+(fstop/vignfade), vignin+(fstop/vignfade), dist); - return clamp(dist,0.0,1.0); - } - - float gather(float i, float j, int ringsamples, inout vec3 col, float w, float h, float blur) { - float rings2 = float(rings); - float step = PI*2.0 / float(ringsamples); - float pw = cos(j*step)*i; - float ph = sin(j*step)*i; - float p = 1.0; - if (pentagon) { - p = penta(vec2(pw,ph)); - } - col += color(vUv.xy + vec2(pw*w,ph*h), blur) * mix(1.0, i/rings2, bias) * p; - return 1.0 * mix(1.0, i /rings2, bias) * p; - } - - void main() { - //scene depth calculation - - float depth = linearize(texture2D(tDepth,vUv.xy).x); - - // Blur depth? - if ( depthblur ) { - depth = linearize(bdepth(vUv.xy)); - } - - //focal plane calculation - - float fDepth = focalDepth; - - if (shaderFocus) { - - fDepth = linearize(texture2D(tDepth,focusCoords).x); - - } - - // dof blur factor calculation - - float blur = 0.0; - - if (manualdof) { - float a = depth-fDepth; // Focal plane - float b = (a-fdofstart)/fdofdist; // Far DoF - float c = (-a-ndofstart)/ndofdist; // Near Dof - blur = (a>0.0) ? b : c; - } else { - float f = focalLength; // focal length in mm - float d = fDepth*1000.0; // focal plane in mm - float o = depth*1000.0; // depth in mm - - float a = (o*f)/(o-f); - float b = (d*f)/(d-f); - float c = (d-f)/(d*fstop*CoC); - - blur = abs(a-b)*c; - } - - blur = clamp(blur,0.0,1.0); - - // calculation of pattern for dithering - - vec2 noise = vec2(rand(vUv.xy), rand( vUv.xy + vec2( 0.4, 0.6 ) ) )*dithering*blur; - - // getting blur x and y step factor - - float w = (1.0/textureWidth)*blur*maxblur+noise.x; - float h = (1.0/textureHeight)*blur*maxblur+noise.y; - - // calculation of final color - - vec3 col = vec3(0.0); - - if(blur < 0.05) { - //some optimization thingy - col = texture2D(tColor, vUv.xy).rgb; - } else { - col = texture2D(tColor, vUv.xy).rgb; - float s = 1.0; - int ringsamples; - - for (int i = 1; i <= rings; i++) { - /*unboxstart*/ - ringsamples = i * samples; - - for (int j = 0 ; j < maxringsamples ; j++) { - if (j >= ringsamples) break; - s += gather(float(i), float(j), ringsamples, col, w, h, blur); - } - /*unboxend*/ - } - - col /= s; //divide by sample count - } - - if (showFocus) { - col = debugFocus(col, blur, depth); - } - - if (vignetting) { - col *= vignette(); - } - - gl_FragColor.rgb = col; - gl_FragColor.a = 1.0; - } - ` -}; -var BokehDepthShader = { - uniforms: { - mNear: { value: 1 }, - mFar: { value: 1e3 } - }, - vertexShader: ` - varying float vViewZDepth; - - void main() { - - #include <begin_vertex> - #include <project_vertex> - - vViewZDepth = - mvPosition.z; - - } - `, - fragmentShader: ` - uniform float mNear; - uniform float mFar; - - varying float vViewZDepth; - - void main() { - - float color = 1.0 - smoothstep( mNear, mFar, vViewZDepth ); - gl_FragColor = vec4( vec3( color ), 1.0 ); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/cameras/CinematicCamera.js -var CinematicCamera = class extends PerspectiveCamera { - constructor(fov, aspect, near, far) { - super(fov, aspect, near, far); - this.type = "CinematicCamera"; - this.postprocessing = { enabled: true }; - this.shaderSettings = { - rings: 3, - samples: 4 - }; - const depthShader = BokehDepthShader; - this.materialDepth = new ShaderMaterial({ - uniforms: depthShader.uniforms, - vertexShader: depthShader.vertexShader, - fragmentShader: depthShader.fragmentShader - }); - this.materialDepth.uniforms["mNear"].value = near; - this.materialDepth.uniforms["mFar"].value = far; - this.setLens(); - this.initPostProcessing(); - } - setLens(focalLength, filmGauge, fNumber, coc) { - if (focalLength === void 0) focalLength = 35; - if (filmGauge !== void 0) this.filmGauge = filmGauge; - this.setFocalLength(focalLength); - if (fNumber === void 0) fNumber = 8; - if (coc === void 0) coc = .019; - this.fNumber = fNumber; - this.coc = coc; - this.aperture = focalLength / this.fNumber; - this.hyperFocal = focalLength * focalLength / (this.aperture * this.coc); - } - linearize(depth) { - const zfar = this.far; - const znear = this.near; - return -zfar * znear / (depth * (zfar - znear) - zfar); - } - smoothstep(near, far, depth) { - const x = this.saturate((depth - near) / (far - near)); - return x * x * (3 - 2 * x); - } - saturate(x) { - return Math.max(0, Math.min(1, x)); - } - focusAt(focusDistance) { - if (focusDistance === void 0) focusDistance = 20; - const focalLength = this.getFocalLength(); - this.focus = focusDistance; - this.nearPoint = this.hyperFocal * this.focus / (this.hyperFocal + (this.focus - focalLength)); - this.farPoint = this.hyperFocal * this.focus / (this.hyperFocal - (this.focus - focalLength)); - this.depthOfField = this.farPoint - this.nearPoint; - if (this.depthOfField < 0) this.depthOfField = 0; - this.sdistance = this.smoothstep(this.near, this.far, this.focus); - this.ldistance = this.linearize(1 - this.sdistance); - this.postprocessing.bokeh_uniforms["focalDepth"].value = this.ldistance; - } - initPostProcessing() { - if (this.postprocessing.enabled) { - this.postprocessing.scene = new Scene(); - this.postprocessing.camera = new OrthographicCamera(window.innerWidth / -2, window.innerWidth / 2, window.innerHeight / 2, window.innerHeight / -2, -1e4, 1e4); - this.postprocessing.scene.add(this.postprocessing.camera); - this.postprocessing.rtTextureDepth = new WebGLRenderTarget(window.innerWidth, window.innerHeight); - this.postprocessing.rtTextureColor = new WebGLRenderTarget(window.innerWidth, window.innerHeight); - const bokeh_shader = BokehShader2; - this.postprocessing.bokeh_uniforms = UniformsUtils.clone(bokeh_shader.uniforms); - this.postprocessing.bokeh_uniforms["tColor"].value = this.postprocessing.rtTextureColor.texture; - this.postprocessing.bokeh_uniforms["tDepth"].value = this.postprocessing.rtTextureDepth.texture; - this.postprocessing.bokeh_uniforms["manualdof"].value = 0; - this.postprocessing.bokeh_uniforms["shaderFocus"].value = 0; - this.postprocessing.bokeh_uniforms["fstop"].value = 2.8; - this.postprocessing.bokeh_uniforms["showFocus"].value = 1; - this.postprocessing.bokeh_uniforms["focalDepth"].value = .1; - this.postprocessing.bokeh_uniforms["znear"].value = this.near; - this.postprocessing.bokeh_uniforms["zfar"].value = this.near; - this.postprocessing.bokeh_uniforms["textureWidth"].value = window.innerWidth; - this.postprocessing.bokeh_uniforms["textureHeight"].value = window.innerHeight; - this.postprocessing.materialBokeh = new ShaderMaterial({ - uniforms: this.postprocessing.bokeh_uniforms, - vertexShader: bokeh_shader.vertexShader, - fragmentShader: bokeh_shader.fragmentShader, - defines: { - RINGS: this.shaderSettings.rings, - SAMPLES: this.shaderSettings.samples, - DEPTH_PACKING: 1 - } - }); - this.postprocessing.quad = new Mesh(new PlaneGeometry(window.innerWidth, window.innerHeight), this.postprocessing.materialBokeh); - this.postprocessing.quad.position.z = -500; - this.postprocessing.scene.add(this.postprocessing.quad); - } - } - renderCinematic(scene, renderer) { - if (this.postprocessing.enabled) { - const currentRenderTarget = renderer.getRenderTarget(); - renderer.clear(); - scene.overrideMaterial = null; - renderer.setRenderTarget(this.postprocessing.rtTextureColor); - renderer.clear(); - renderer.render(scene, this); - scene.overrideMaterial = this.materialDepth; - renderer.setRenderTarget(this.postprocessing.rtTextureDepth); - renderer.clear(); - renderer.render(scene, this); - renderer.setRenderTarget(null); - renderer.render(this.postprocessing.scene, this.postprocessing.camera); - renderer.setRenderTarget(currentRenderTarget); - } - } -}; -//#endregion -//#region node_modules/three-stdlib/math/MeshSurfaceSampler.js -var _face = /* @__PURE__ */ new Triangle$1(); -var _color = /* @__PURE__ */ new Vector3(); -var MeshSurfaceSampler = class { - constructor(mesh) { - let geometry = mesh.geometry; - if (geometry.index) { - console.warn("THREE.MeshSurfaceSampler: Converting geometry to non-indexed BufferGeometry."); - geometry = geometry.toNonIndexed(); - } - this.geometry = geometry; - this.randomFunction = Math.random; - this.positionAttribute = this.geometry.getAttribute("position"); - this.colorAttribute = this.geometry.getAttribute("color"); - this.weightAttribute = null; - this.distribution = null; - } - setWeightAttribute(name) { - this.weightAttribute = name ? this.geometry.getAttribute(name) : null; - return this; - } - build() { - const positionAttribute = this.positionAttribute; - const weightAttribute = this.weightAttribute; - const faceWeights = new Float32Array(positionAttribute.count / 3); - for (let i = 0; i < positionAttribute.count; i += 3) { - let faceWeight = 1; - if (weightAttribute) faceWeight = weightAttribute.getX(i) + weightAttribute.getX(i + 1) + weightAttribute.getX(i + 2); - _face.a.fromBufferAttribute(positionAttribute, i); - _face.b.fromBufferAttribute(positionAttribute, i + 1); - _face.c.fromBufferAttribute(positionAttribute, i + 2); - faceWeight *= _face.getArea(); - faceWeights[i / 3] = faceWeight; - } - this.distribution = new Float32Array(positionAttribute.count / 3); - let cumulativeTotal = 0; - for (let i = 0; i < faceWeights.length; i++) { - cumulativeTotal += faceWeights[i]; - this.distribution[i] = cumulativeTotal; - } - return this; - } - setRandomGenerator(randomFunction) { - this.randomFunction = randomFunction; - return this; - } - sample(targetPosition, targetNormal, targetColor) { - const faceIndex = this.sampleFaceIndex(); - return this.sampleFace(faceIndex, targetPosition, targetNormal, targetColor); - } - sampleFaceIndex() { - const cumulativeTotal = this.distribution[this.distribution.length - 1]; - return this.binarySearch(this.randomFunction() * cumulativeTotal); - } - binarySearch(x) { - const dist = this.distribution; - let start = 0; - let end = dist.length - 1; - let index = -1; - while (start <= end) { - const mid = Math.ceil((start + end) / 2); - if (mid === 0 || dist[mid - 1] <= x && dist[mid] > x) { - index = mid; - break; - } else if (x < dist[mid]) end = mid - 1; - else start = mid + 1; - } - return index; - } - sampleFace(faceIndex, targetPosition, targetNormal, targetColor) { - let u = this.randomFunction(); - let v = this.randomFunction(); - if (u + v > 1) { - u = 1 - u; - v = 1 - v; - } - _face.a.fromBufferAttribute(this.positionAttribute, faceIndex * 3); - _face.b.fromBufferAttribute(this.positionAttribute, faceIndex * 3 + 1); - _face.c.fromBufferAttribute(this.positionAttribute, faceIndex * 3 + 2); - targetPosition.set(0, 0, 0).addScaledVector(_face.a, u).addScaledVector(_face.b, v).addScaledVector(_face.c, 1 - (u + v)); - if (targetNormal !== void 0) _face.getNormal(targetNormal); - if (targetColor !== void 0 && this.colorAttribute !== void 0) { - _face.a.fromBufferAttribute(this.colorAttribute, faceIndex * 3); - _face.b.fromBufferAttribute(this.colorAttribute, faceIndex * 3 + 1); - _face.c.fromBufferAttribute(this.colorAttribute, faceIndex * 3 + 2); - _color.set(0, 0, 0).addScaledVector(_face.a, u).addScaledVector(_face.b, v).addScaledVector(_face.c, 1 - (u + v)); - targetColor.r = _color.x; - targetColor.g = _color.y; - targetColor.b = _color.z; - } - return this; - } -}; -//#endregion -//#region node_modules/three-stdlib/math/OBB.js -var a = { - c: null, - u: [ - /* @__PURE__ */ new Vector3(), - /* @__PURE__ */ new Vector3(), - /* @__PURE__ */ new Vector3() - ], - e: [] -}; -var b = { - c: null, - u: [ - /* @__PURE__ */ new Vector3(), - /* @__PURE__ */ new Vector3(), - /* @__PURE__ */ new Vector3() - ], - e: [] -}; -var R = [ - [], - [], - [] -]; -var AbsR = [ - [], - [], - [] -]; -var t = []; -var xAxis = /* @__PURE__ */ new Vector3(); -var yAxis = /* @__PURE__ */ new Vector3(); -var zAxis = /* @__PURE__ */ new Vector3(); -var v1 = /* @__PURE__ */ new Vector3(); -var size = /* @__PURE__ */ new Vector3(); -var closestPoint = /* @__PURE__ */ new Vector3(); -var rotationMatrix = /* @__PURE__ */ new Matrix3(); -var aabb = /* @__PURE__ */ new Box3(); -var matrix = /* @__PURE__ */ new Matrix4(); -var inverse = /* @__PURE__ */ new Matrix4(); -var localRay = /* @__PURE__ */ new Ray(); -var OBB = class { - constructor(center = new Vector3(), halfSize = new Vector3(), rotation = new Matrix3()) { - this.center = center; - this.halfSize = halfSize; - this.rotation = rotation; - } - set(center, halfSize, rotation) { - this.center = center; - this.halfSize = halfSize; - this.rotation = rotation; - return this; - } - copy(obb2) { - this.center.copy(obb2.center); - this.halfSize.copy(obb2.halfSize); - this.rotation.copy(obb2.rotation); - return this; - } - clone() { - return new this.constructor().copy(this); - } - getSize(result) { - return result.copy(this.halfSize).multiplyScalar(2); - } - /** - * Reference: Closest Point on OBB to Point in Real-Time Collision Detection - * by Christer Ericson (chapter 5.1.4) - */ - clampPoint(point, result) { - const halfSize = this.halfSize; - v1.subVectors(point, this.center); - this.rotation.extractBasis(xAxis, yAxis, zAxis); - result.copy(this.center); - const x = MathUtils.clamp(v1.dot(xAxis), -halfSize.x, halfSize.x); - result.add(xAxis.multiplyScalar(x)); - const y = MathUtils.clamp(v1.dot(yAxis), -halfSize.y, halfSize.y); - result.add(yAxis.multiplyScalar(y)); - const z = MathUtils.clamp(v1.dot(zAxis), -halfSize.z, halfSize.z); - result.add(zAxis.multiplyScalar(z)); - return result; - } - containsPoint(point) { - v1.subVectors(point, this.center); - this.rotation.extractBasis(xAxis, yAxis, zAxis); - return Math.abs(v1.dot(xAxis)) <= this.halfSize.x && Math.abs(v1.dot(yAxis)) <= this.halfSize.y && Math.abs(v1.dot(zAxis)) <= this.halfSize.z; - } - intersectsBox3(box3) { - return this.intersectsOBB(obb.fromBox3(box3)); - } - intersectsSphere(sphere) { - this.clampPoint(sphere.center, closestPoint); - return closestPoint.distanceToSquared(sphere.center) <= sphere.radius * sphere.radius; - } - /** - * Reference: OBB-OBB Intersection in Real-Time Collision Detection - * by Christer Ericson (chapter 4.4.1) - * - */ - intersectsOBB(obb2, epsilon = Number.EPSILON) { - a.c = this.center; - a.e[0] = this.halfSize.x; - a.e[1] = this.halfSize.y; - a.e[2] = this.halfSize.z; - this.rotation.extractBasis(a.u[0], a.u[1], a.u[2]); - b.c = obb2.center; - b.e[0] = obb2.halfSize.x; - b.e[1] = obb2.halfSize.y; - b.e[2] = obb2.halfSize.z; - obb2.rotation.extractBasis(b.u[0], b.u[1], b.u[2]); - for (let i = 0; i < 3; i++) for (let j = 0; j < 3; j++) R[i][j] = a.u[i].dot(b.u[j]); - v1.subVectors(b.c, a.c); - t[0] = v1.dot(a.u[0]); - t[1] = v1.dot(a.u[1]); - t[2] = v1.dot(a.u[2]); - for (let i = 0; i < 3; i++) for (let j = 0; j < 3; j++) AbsR[i][j] = Math.abs(R[i][j]) + epsilon; - let ra, rb; - for (let i = 0; i < 3; i++) { - ra = a.e[i]; - rb = b.e[0] * AbsR[i][0] + b.e[1] * AbsR[i][1] + b.e[2] * AbsR[i][2]; - if (Math.abs(t[i]) > ra + rb) return false; - } - for (let i = 0; i < 3; i++) { - ra = a.e[0] * AbsR[0][i] + a.e[1] * AbsR[1][i] + a.e[2] * AbsR[2][i]; - rb = b.e[i]; - if (Math.abs(t[0] * R[0][i] + t[1] * R[1][i] + t[2] * R[2][i]) > ra + rb) return false; - } - ra = a.e[1] * AbsR[2][0] + a.e[2] * AbsR[1][0]; - rb = b.e[1] * AbsR[0][2] + b.e[2] * AbsR[0][1]; - if (Math.abs(t[2] * R[1][0] - t[1] * R[2][0]) > ra + rb) return false; - ra = a.e[1] * AbsR[2][1] + a.e[2] * AbsR[1][1]; - rb = b.e[0] * AbsR[0][2] + b.e[2] * AbsR[0][0]; - if (Math.abs(t[2] * R[1][1] - t[1] * R[2][1]) > ra + rb) return false; - ra = a.e[1] * AbsR[2][2] + a.e[2] * AbsR[1][2]; - rb = b.e[0] * AbsR[0][1] + b.e[1] * AbsR[0][0]; - if (Math.abs(t[2] * R[1][2] - t[1] * R[2][2]) > ra + rb) return false; - ra = a.e[0] * AbsR[2][0] + a.e[2] * AbsR[0][0]; - rb = b.e[1] * AbsR[1][2] + b.e[2] * AbsR[1][1]; - if (Math.abs(t[0] * R[2][0] - t[2] * R[0][0]) > ra + rb) return false; - ra = a.e[0] * AbsR[2][1] + a.e[2] * AbsR[0][1]; - rb = b.e[0] * AbsR[1][2] + b.e[2] * AbsR[1][0]; - if (Math.abs(t[0] * R[2][1] - t[2] * R[0][1]) > ra + rb) return false; - ra = a.e[0] * AbsR[2][2] + a.e[2] * AbsR[0][2]; - rb = b.e[0] * AbsR[1][1] + b.e[1] * AbsR[1][0]; - if (Math.abs(t[0] * R[2][2] - t[2] * R[0][2]) > ra + rb) return false; - ra = a.e[0] * AbsR[1][0] + a.e[1] * AbsR[0][0]; - rb = b.e[1] * AbsR[2][2] + b.e[2] * AbsR[2][1]; - if (Math.abs(t[1] * R[0][0] - t[0] * R[1][0]) > ra + rb) return false; - ra = a.e[0] * AbsR[1][1] + a.e[1] * AbsR[0][1]; - rb = b.e[0] * AbsR[2][2] + b.e[2] * AbsR[2][0]; - if (Math.abs(t[1] * R[0][1] - t[0] * R[1][1]) > ra + rb) return false; - ra = a.e[0] * AbsR[1][2] + a.e[1] * AbsR[0][2]; - rb = b.e[0] * AbsR[2][1] + b.e[1] * AbsR[2][0]; - if (Math.abs(t[1] * R[0][2] - t[0] * R[1][2]) > ra + rb) return false; - return true; - } - /** - * Reference: Testing Box Against Plane in Real-Time Collision Detection - * by Christer Ericson (chapter 5.2.3) - */ - intersectsPlane(plane) { - this.rotation.extractBasis(xAxis, yAxis, zAxis); - const r = this.halfSize.x * Math.abs(plane.normal.dot(xAxis)) + this.halfSize.y * Math.abs(plane.normal.dot(yAxis)) + this.halfSize.z * Math.abs(plane.normal.dot(zAxis)); - const d = plane.normal.dot(this.center) - plane.constant; - return Math.abs(d) <= r; - } - /** - * Performs a ray/OBB intersection test and stores the intersection point - * to the given 3D vector. If no intersection is detected, *null* is returned. - */ - intersectRay(ray, result) { - this.getSize(size); - aabb.setFromCenterAndSize(v1.set(0, 0, 0), size); - matrix.setFromMatrix3(this.rotation); - matrix.setPosition(this.center); - inverse.copy(matrix).invert(); - localRay.copy(ray).applyMatrix4(inverse); - if (localRay.intersectBox(aabb, result)) return result.applyMatrix4(matrix); - else return null; - } - /** - * Performs a ray/OBB intersection test. Returns either true or false if - * there is a intersection or not. - */ - intersectsRay(ray) { - return this.intersectRay(ray, v1) !== null; - } - fromBox3(box3) { - box3.getCenter(this.center); - box3.getSize(this.halfSize).multiplyScalar(.5); - this.rotation.identity(); - return this; - } - equals(obb2) { - return obb2.center.equals(this.center) && obb2.halfSize.equals(this.halfSize) && obb2.rotation.equals(this.rotation); - } - applyMatrix4(matrix2) { - const e = matrix2.elements; - let sx = v1.set(e[0], e[1], e[2]).length(); - const sy = v1.set(e[4], e[5], e[6]).length(); - const sz = v1.set(e[8], e[9], e[10]).length(); - if (matrix2.determinant() < 0) sx = -sx; - rotationMatrix.setFromMatrix4(matrix2); - const invSX = 1 / sx; - const invSY = 1 / sy; - const invSZ = 1 / sz; - rotationMatrix.elements[0] *= invSX; - rotationMatrix.elements[1] *= invSX; - rotationMatrix.elements[2] *= invSX; - rotationMatrix.elements[3] *= invSY; - rotationMatrix.elements[4] *= invSY; - rotationMatrix.elements[5] *= invSY; - rotationMatrix.elements[6] *= invSZ; - rotationMatrix.elements[7] *= invSZ; - rotationMatrix.elements[8] *= invSZ; - this.rotation.multiply(rotationMatrix); - this.halfSize.x *= sx; - this.halfSize.y *= sy; - this.halfSize.z *= sz; - v1.setFromMatrixPosition(matrix2); - this.center.add(v1); - return this; - } -}; -var obb = /* @__PURE__ */ new OBB(); -//#endregion -//#region node_modules/three-stdlib/math/Capsule.js -var _v1$3 = /* @__PURE__ */ new Vector3(); -var _v2$3 = /* @__PURE__ */ new Vector3(); -var _v3 = /* @__PURE__ */ new Vector3(); -var EPS = 1e-10; -var Capsule = class Capsule { - constructor(start = new Vector3(0, 0, 0), end = new Vector3(0, 1, 0), radius = 1) { - this.start = start; - this.end = end; - this.radius = radius; - } - clone() { - return new Capsule(this.start.clone(), this.end.clone(), this.radius); - } - set(start, end, radius) { - this.start.copy(start); - this.end.copy(end); - this.radius = radius; - } - copy(capsule) { - this.start.copy(capsule.start); - this.end.copy(capsule.end); - this.radius = capsule.radius; - } - getCenter(target) { - return target.copy(this.end).add(this.start).multiplyScalar(.5); - } - translate(v) { - this.start.add(v); - this.end.add(v); - } - checkAABBAxis(p1x, p1y, p2x, p2y, minx, maxx, miny, maxy, radius) { - return (minx - p1x < radius || minx - p2x < radius) && (p1x - maxx < radius || p2x - maxx < radius) && (miny - p1y < radius || miny - p2y < radius) && (p1y - maxy < radius || p2y - maxy < radius); - } - intersectsBox(box) { - return this.checkAABBAxis(this.start.x, this.start.y, this.end.x, this.end.y, box.min.x, box.max.x, box.min.y, box.max.y, this.radius) && this.checkAABBAxis(this.start.x, this.start.z, this.end.x, this.end.z, box.min.x, box.max.x, box.min.z, box.max.z, this.radius) && this.checkAABBAxis(this.start.y, this.start.z, this.end.y, this.end.z, box.min.y, box.max.y, box.min.z, box.max.z, this.radius); - } - lineLineMinimumPoints(line1, line2) { - const r = _v1$3.copy(line1.end).sub(line1.start); - const s = _v2$3.copy(line2.end).sub(line2.start); - const w = _v3.copy(line2.start).sub(line1.start); - const a = r.dot(s), b = r.dot(r), c = s.dot(s), d = s.dot(w), e = r.dot(w); - let t1, t2; - const divisor = b * c - a * a; - if (Math.abs(divisor) < EPS) { - const d1 = -d / c; - const d2 = (a - d) / c; - if (Math.abs(d1 - .5) < Math.abs(d2 - .5)) { - t1 = 0; - t2 = d1; - } else { - t1 = 1; - t2 = d2; - } - } else { - t1 = (d * a + e * c) / divisor; - t2 = (t1 * a - d) / c; - } - t2 = Math.max(0, Math.min(1, t2)); - t1 = Math.max(0, Math.min(1, t1)); - return [r.multiplyScalar(t1).add(line1.start), s.multiplyScalar(t2).add(line2.start)]; - } -}; -//#endregion -//#region node_modules/three-stdlib/math/ColorConverter.js -var _hsl = {}; -var ColorConverter = { - setHSV(color, h, s, v) { - h = MathUtils.euclideanModulo(h, 1); - s = MathUtils.clamp(s, 0, 1); - v = MathUtils.clamp(v, 0, 1); - return color.setHSL(h, s * v / ((h = (2 - s) * v) < 1 ? h : 2 - h), h * .5); - }, - getHSV(color, target) { - color.getHSL(_hsl); - _hsl.s *= _hsl.l < .5 ? _hsl.l : 1 - _hsl.l; - target.h = _hsl.h; - target.s = 2 * _hsl.s / (_hsl.l + _hsl.s); - target.v = _hsl.l + _hsl.s; - return target; - }, - setCMYK(color, c, m, y, k) { - const r = (1 - c) * (1 - k); - const g = (1 - m) * (1 - k); - const b = (1 - y) * (1 - k); - return color.setRGB(r, g, b); - }, - getCMYK(color, target) { - const r = color.r; - const g = color.g; - const b = color.b; - const k = 1 - Math.max(r, g, b); - const c = (1 - r - k) / (1 - k); - const m = (1 - g - k) / (1 - k); - const y = (1 - b - k) / (1 - k); - target.c = c; - target.m = m; - target.y = y; - target.k = k; - return target; - } -}; -//#endregion -//#region node_modules/three-stdlib/math/ImprovedNoise.js -function init$2() { - const _p2 = [ - 151, - 160, - 137, - 91, - 90, - 15, - 131, - 13, - 201, - 95, - 96, - 53, - 194, - 233, - 7, - 225, - 140, - 36, - 103, - 30, - 69, - 142, - 8, - 99, - 37, - 240, - 21, - 10, - 23, - 190, - 6, - 148, - 247, - 120, - 234, - 75, - 0, - 26, - 197, - 62, - 94, - 252, - 219, - 203, - 117, - 35, - 11, - 32, - 57, - 177, - 33, - 88, - 237, - 149, - 56, - 87, - 174, - 20, - 125, - 136, - 171, - 168, - 68, - 175, - 74, - 165, - 71, - 134, - 139, - 48, - 27, - 166, - 77, - 146, - 158, - 231, - 83, - 111, - 229, - 122, - 60, - 211, - 133, - 230, - 220, - 105, - 92, - 41, - 55, - 46, - 245, - 40, - 244, - 102, - 143, - 54, - 65, - 25, - 63, - 161, - 1, - 216, - 80, - 73, - 209, - 76, - 132, - 187, - 208, - 89, - 18, - 169, - 200, - 196, - 135, - 130, - 116, - 188, - 159, - 86, - 164, - 100, - 109, - 198, - 173, - 186, - 3, - 64, - 52, - 217, - 226, - 250, - 124, - 123, - 5, - 202, - 38, - 147, - 118, - 126, - 255, - 82, - 85, - 212, - 207, - 206, - 59, - 227, - 47, - 16, - 58, - 17, - 182, - 189, - 28, - 42, - 223, - 183, - 170, - 213, - 119, - 248, - 152, - 2, - 44, - 154, - 163, - 70, - 221, - 153, - 101, - 155, - 167, - 43, - 172, - 9, - 129, - 22, - 39, - 253, - 19, - 98, - 108, - 110, - 79, - 113, - 224, - 232, - 178, - 185, - 112, - 104, - 218, - 246, - 97, - 228, - 251, - 34, - 242, - 193, - 238, - 210, - 144, - 12, - 191, - 179, - 162, - 241, - 81, - 51, - 145, - 235, - 249, - 14, - 239, - 107, - 49, - 192, - 214, - 31, - 181, - 199, - 106, - 157, - 184, - 84, - 204, - 176, - 115, - 121, - 50, - 45, - 127, - 4, - 150, - 254, - 138, - 236, - 205, - 93, - 222, - 114, - 67, - 29, - 24, - 72, - 243, - 141, - 128, - 195, - 78, - 66, - 215, - 61, - 156, - 180 - ]; - for (let i = 0; i < 256; i++) _p2[256 + i] = _p2[i]; - return _p2; -} -var _p = /* @__PURE__ */ init$2(); -function fade(t) { - return t * t * t * (t * (t * 6 - 15) + 10); -} -function lerp(t, a, b) { - return a + t * (b - a); -} -function grad(hash, x, y, z) { - const h = hash & 15; - const u = h < 8 ? x : y, v = h < 4 ? y : h == 12 || h == 14 ? x : z; - return ((h & 1) == 0 ? u : -u) + ((h & 2) == 0 ? v : -v); -} -var ImprovedNoise = class { - noise(x, y, z) { - const floorX = Math.floor(x), floorY = Math.floor(y), floorZ = Math.floor(z); - const X = floorX & 255, Y = floorY & 255, Z = floorZ & 255; - x -= floorX; - y -= floorY; - z -= floorZ; - const xMinus1 = x - 1, yMinus1 = y - 1, zMinus1 = z - 1; - const u = fade(x), v = fade(y), w = fade(z); - const A = _p[X] + Y, AA = _p[A] + Z, AB = _p[A + 1] + Z, B = _p[X + 1] + Y, BA = _p[B] + Z, BB = _p[B + 1] + Z; - return lerp(w, lerp(v, lerp(u, grad(_p[AA], x, y, z), grad(_p[BA], xMinus1, y, z)), lerp(u, grad(_p[AB], x, yMinus1, z), grad(_p[BB], xMinus1, yMinus1, z))), lerp(v, lerp(u, grad(_p[AA + 1], x, y, zMinus1), grad(_p[BA + 1], xMinus1, y, zMinus1)), lerp(u, grad(_p[AB + 1], x, yMinus1, zMinus1), grad(_p[BB + 1], xMinus1, yMinus1, zMinus1)))); - } -}; -//#endregion -//#region node_modules/three-stdlib/math/Octree.js -var _v1$2 = /* @__PURE__ */ new Vector3(); -var _v2$2 = /* @__PURE__ */ new Vector3(); -var _plane$1 = /* @__PURE__ */ new Plane(); -var _line1 = /* @__PURE__ */ new Line3(); -var _line2 = /* @__PURE__ */ new Line3(); -var _sphere$1 = /* @__PURE__ */ new Sphere(); -var _capsule = /* @__PURE__ */ new Capsule(); -var Octree = class Octree { - constructor(box) { - this.triangles = []; - this.box = box; - this.subTrees = []; - } - addTriangle(triangle) { - if (!this.bounds) this.bounds = new Box3(); - this.bounds.min.x = Math.min(this.bounds.min.x, triangle.a.x, triangle.b.x, triangle.c.x); - this.bounds.min.y = Math.min(this.bounds.min.y, triangle.a.y, triangle.b.y, triangle.c.y); - this.bounds.min.z = Math.min(this.bounds.min.z, triangle.a.z, triangle.b.z, triangle.c.z); - this.bounds.max.x = Math.max(this.bounds.max.x, triangle.a.x, triangle.b.x, triangle.c.x); - this.bounds.max.y = Math.max(this.bounds.max.y, triangle.a.y, triangle.b.y, triangle.c.y); - this.bounds.max.z = Math.max(this.bounds.max.z, triangle.a.z, triangle.b.z, triangle.c.z); - this.triangles.push(triangle); - return this; - } - calcBox() { - this.box = this.bounds.clone(); - this.box.min.x -= .01; - this.box.min.y -= .01; - this.box.min.z -= .01; - return this; - } - split(level) { - if (!this.box) return; - const subTrees = []; - const halfsize = _v2$2.copy(this.box.max).sub(this.box.min).multiplyScalar(.5); - for (let x = 0; x < 2; x++) for (let y = 0; y < 2; y++) for (let z = 0; z < 2; z++) { - const box = new Box3(); - const v = _v1$2.set(x, y, z); - box.min.copy(this.box.min).add(v.multiply(halfsize)); - box.max.copy(box.min).add(halfsize); - subTrees.push(new Octree(box)); - } - let triangle; - while (triangle = this.triangles.pop()) for (let i = 0; i < subTrees.length; i++) if (subTrees[i].box.intersectsTriangle(triangle)) subTrees[i].triangles.push(triangle); - for (let i = 0; i < subTrees.length; i++) { - const len = subTrees[i].triangles.length; - if (len > 8 && level < 16) subTrees[i].split(level + 1); - if (len !== 0) this.subTrees.push(subTrees[i]); - } - return this; - } - build() { - this.calcBox(); - this.split(0); - return this; - } - getRayTriangles(ray, triangles) { - for (let i = 0; i < this.subTrees.length; i++) { - const subTree = this.subTrees[i]; - if (!ray.intersectsBox(subTree.box)) continue; - if (subTree.triangles.length > 0) { - for (let j = 0; j < subTree.triangles.length; j++) if (triangles.indexOf(subTree.triangles[j]) === -1) triangles.push(subTree.triangles[j]); - } else subTree.getRayTriangles(ray, triangles); - } - return triangles; - } - triangleCapsuleIntersect(capsule, triangle) { - triangle.getPlane(_plane$1); - const d1 = _plane$1.distanceToPoint(capsule.start) - capsule.radius; - const d2 = _plane$1.distanceToPoint(capsule.end) - capsule.radius; - if (d1 > 0 && d2 > 0 || d1 < -capsule.radius && d2 < -capsule.radius) return false; - const delta = Math.abs(d1 / (Math.abs(d1) + Math.abs(d2))); - const intersectPoint = _v1$2.copy(capsule.start).lerp(capsule.end, delta); - if (triangle.containsPoint(intersectPoint)) return { - normal: _plane$1.normal.clone(), - point: intersectPoint.clone(), - depth: Math.abs(Math.min(d1, d2)) - }; - const r2 = capsule.radius * capsule.radius; - const line1 = _line1.set(capsule.start, capsule.end); - const lines = [ - [triangle.a, triangle.b], - [triangle.b, triangle.c], - [triangle.c, triangle.a] - ]; - for (let i = 0; i < lines.length; i++) { - const line2 = _line2.set(lines[i][0], lines[i][1]); - const [point1, point2] = capsule.lineLineMinimumPoints(line1, line2); - if (point1.distanceToSquared(point2) < r2) return { - normal: point1.clone().sub(point2).normalize(), - point: point2.clone(), - depth: capsule.radius - point1.distanceTo(point2) - }; - } - return false; - } - triangleSphereIntersect(sphere, triangle) { - triangle.getPlane(_plane$1); - if (!sphere.intersectsPlane(_plane$1)) return false; - const depth = Math.abs(_plane$1.distanceToSphere(sphere)); - const r2 = sphere.radius * sphere.radius - depth * depth; - const plainPoint = _plane$1.projectPoint(sphere.center, _v1$2); - if (triangle.containsPoint(sphere.center)) return { - normal: _plane$1.normal.clone(), - point: plainPoint.clone(), - depth: Math.abs(_plane$1.distanceToSphere(sphere)) - }; - const lines = [ - [triangle.a, triangle.b], - [triangle.b, triangle.c], - [triangle.c, triangle.a] - ]; - for (let i = 0; i < lines.length; i++) { - _line1.set(lines[i][0], lines[i][1]); - _line1.closestPointToPoint(plainPoint, true, _v2$2); - const d = _v2$2.distanceToSquared(sphere.center); - if (d < r2) return { - normal: sphere.center.clone().sub(_v2$2).normalize(), - point: _v2$2.clone(), - depth: sphere.radius - Math.sqrt(d) - }; - } - return false; - } - getSphereTriangles(sphere, triangles) { - for (let i = 0; i < this.subTrees.length; i++) { - const subTree = this.subTrees[i]; - if (!sphere.intersectsBox(subTree.box)) continue; - if (subTree.triangles.length > 0) { - for (let j = 0; j < subTree.triangles.length; j++) if (triangles.indexOf(subTree.triangles[j]) === -1) triangles.push(subTree.triangles[j]); - } else subTree.getSphereTriangles(sphere, triangles); - } - } - getCapsuleTriangles(capsule, triangles) { - for (let i = 0; i < this.subTrees.length; i++) { - const subTree = this.subTrees[i]; - if (!capsule.intersectsBox(subTree.box)) continue; - if (subTree.triangles.length > 0) { - for (let j = 0; j < subTree.triangles.length; j++) if (triangles.indexOf(subTree.triangles[j]) === -1) triangles.push(subTree.triangles[j]); - } else subTree.getCapsuleTriangles(capsule, triangles); - } - } - sphereIntersect(sphere) { - _sphere$1.copy(sphere); - const triangles = []; - let result, hit = false; - this.getSphereTriangles(sphere, triangles); - for (let i = 0; i < triangles.length; i++) if (result = this.triangleSphereIntersect(_sphere$1, triangles[i])) { - hit = true; - _sphere$1.center.add(result.normal.multiplyScalar(result.depth)); - } - if (hit) { - const collisionVector = _sphere$1.center.clone().sub(sphere.center); - const depth = collisionVector.length(); - return { - normal: collisionVector.normalize(), - depth - }; - } - return false; - } - capsuleIntersect(capsule) { - _capsule.copy(capsule); - const triangles = []; - let result, hit = false; - this.getCapsuleTriangles(_capsule, triangles); - for (let i = 0; i < triangles.length; i++) if (result = this.triangleCapsuleIntersect(_capsule, triangles[i])) { - hit = true; - _capsule.translate(result.normal.multiplyScalar(result.depth)); - } - if (hit) { - const collisionVector = _capsule.getCenter(new Vector3()).sub(capsule.getCenter(_v1$2)); - const depth = collisionVector.length(); - return { - normal: collisionVector.normalize(), - depth - }; - } - return false; - } - rayIntersect(ray) { - if (ray.direction.length() === 0) return; - const triangles = []; - let triangle, position, distance = 1e100; - this.getRayTriangles(ray, triangles); - for (let i = 0; i < triangles.length; i++) { - const result = ray.intersectTriangle(triangles[i].a, triangles[i].b, triangles[i].c, true, _v1$2); - if (result) { - const newdistance = result.sub(ray.origin).length(); - if (distance > newdistance) { - position = result.clone().add(ray.origin); - distance = newdistance; - triangle = triangles[i]; - } - } - } - return distance < 1e100 ? { - distance, - triangle, - position - } : false; - } - fromGraphNode(group) { - group.updateWorldMatrix(true, true); - group.traverse((obj) => { - if (obj.isMesh === true) { - let geometry, isTemp = false; - if (obj.geometry.index !== null) { - isTemp = true; - geometry = obj.geometry.toNonIndexed(); - } else geometry = obj.geometry; - const positionAttribute = geometry.getAttribute("position"); - for (let i = 0; i < positionAttribute.count; i += 3) { - const v1 = new Vector3().fromBufferAttribute(positionAttribute, i); - const v2 = new Vector3().fromBufferAttribute(positionAttribute, i + 1); - const v3 = new Vector3().fromBufferAttribute(positionAttribute, i + 2); - v1.applyMatrix4(obj.matrixWorld); - v2.applyMatrix4(obj.matrixWorld); - v3.applyMatrix4(obj.matrixWorld); - this.addTriangle(new Triangle$1(v1, v2, v3)); - } - if (isTemp) geometry.dispose(); - } - }); - this.build(); - return this; - } -}; -//#endregion -//#region node_modules/three-stdlib/math/Lut.js -var Lut = class { - constructor(colormap, count = 32) { - this.isLut = true; - this.lut = []; - this.map = []; - this.n = 0; - this.minV = 0; - this.maxV = 1; - this.setColorMap(colormap, count); - } - set(value) { - if (value.isLut === true) this.copy(value); - return this; - } - setMin(min) { - this.minV = min; - return this; - } - setMax(max) { - this.maxV = max; - return this; - } - setColorMap(colormap, count = 32) { - this.map = ColorMapKeywords[colormap] || ColorMapKeywords.rainbow; - this.n = count; - const step = 1 / this.n; - const minColor = new Color(); - const maxColor = new Color(); - this.lut.length = 0; - this.lut.push(new Color(this.map[0][1])); - for (let i = 1; i < count; i++) { - const alpha = i * step; - for (let j = 0; j < this.map.length - 1; j++) if (alpha > this.map[j][0] && alpha <= this.map[j + 1][0]) { - const min = this.map[j][0]; - const max = this.map[j + 1][0]; - minColor.setHex(this.map[j][1], "srgb-linear"); - maxColor.setHex(this.map[j + 1][1], "srgb-linear"); - const color = new Color().lerpColors(minColor, maxColor, (alpha - min) / (max - min)); - this.lut.push(color); - } - } - this.lut.push(new Color(this.map[this.map.length - 1][1])); - return this; - } - copy(lut) { - this.lut = lut.lut; - this.map = lut.map; - this.n = lut.n; - this.minV = lut.minV; - this.maxV = lut.maxV; - return this; - } - getColor(alpha) { - alpha = MathUtils.clamp(alpha, this.minV, this.maxV); - alpha = (alpha - this.minV) / (this.maxV - this.minV); - const colorPosition = Math.round(alpha * this.n); - return this.lut[colorPosition]; - } - addColorMap(name, arrayOfColors) { - ColorMapKeywords[name] = arrayOfColors; - return this; - } - createCanvas() { - const canvas = document.createElement("canvas"); - canvas.width = 1; - canvas.height = this.n; - this.updateCanvas(canvas); - return canvas; - } - updateCanvas(canvas) { - const ctx = canvas.getContext("2d", { alpha: false }); - const imageData = ctx.getImageData(0, 0, 1, this.n); - const data = imageData.data; - let k = 0; - const step = 1 / this.n; - const minColor = new Color(); - const maxColor = new Color(); - const finalColor = new Color(); - for (let i = 1; i >= 0; i -= step) for (let j = this.map.length - 1; j >= 0; j--) if (i < this.map[j][0] && i >= this.map[j - 1][0]) { - const min = this.map[j - 1][0]; - const max = this.map[j][0]; - minColor.setHex(this.map[j - 1][1], "srgb-linear"); - maxColor.setHex(this.map[j][1], "srgb-linear"); - finalColor.lerpColors(minColor, maxColor, (i - min) / (max - min)); - data[k * 4] = Math.round(finalColor.r * 255); - data[k * 4 + 1] = Math.round(finalColor.g * 255); - data[k * 4 + 2] = Math.round(finalColor.b * 255); - data[k * 4 + 3] = 255; - k += 1; - } - ctx.putImageData(imageData, 0, 0); - return canvas; - } -}; -var ColorMapKeywords = { - rainbow: [ - [0, 255], - [.2, 65535], - [.5, 65280], - [.8, 16776960], - [1, 16711680] - ], - cooltowarm: [ - [0, 3952322], - [.2, 10206463], - [.5, 14474460], - [.8, 16163717], - [1, 11797542] - ], - blackbody: [ - [0, 0], - [.2, 7864320], - [.5, 15086080], - [.8, 16776960], - [1, 16777215] - ], - grayscale: [ - [0, 0], - [.2, 4210752], - [.5, 8355712], - [.8, 12566463], - [1, 16777215] - ] -}; -//#endregion -//#region node_modules/three-stdlib/controls/EventDispatcher.js -var __defProp$38 = Object.defineProperty; -var __defNormalProp$38 = (obj, key, value) => key in obj ? __defProp$38(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$38 = (obj, key, value) => { - __defNormalProp$38(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var EventDispatcher = class { - constructor() { - __publicField$38(this, "_listeners"); - } - /** - * Adds a listener to an event type. - * @param type The type of event to listen to. - * @param listener The function that gets called when the event is fired. - */ - addEventListener(type, listener) { - if (this._listeners === void 0) this._listeners = {}; - const listeners = this._listeners; - if (listeners[type] === void 0) listeners[type] = []; - if (listeners[type].indexOf(listener) === -1) listeners[type].push(listener); - } - /** - * Checks if listener is added to an event type. - * @param type The type of event to listen to. - * @param listener The function that gets called when the event is fired. - */ - hasEventListener(type, listener) { - if (this._listeners === void 0) return false; - const listeners = this._listeners; - return listeners[type] !== void 0 && listeners[type].indexOf(listener) !== -1; - } - /** - * Removes a listener from an event type. - * @param type The type of the listener that gets removed. - * @param listener The listener function that gets removed. - */ - removeEventListener(type, listener) { - if (this._listeners === void 0) return; - const listenerArray = this._listeners[type]; - if (listenerArray !== void 0) { - const index = listenerArray.indexOf(listener); - if (index !== -1) listenerArray.splice(index, 1); - } - } - /** - * Fire an event type. - * @param event The event that gets fired. - */ - dispatchEvent(event) { - if (this._listeners === void 0) return; - const listenerArray = this._listeners[event.type]; - if (listenerArray !== void 0) { - event.target = this; - const array = listenerArray.slice(0); - for (let i = 0, l = array.length; i < l; i++) array[i].call(this, event); - event.target = null; - } - } -}; -//#endregion -//#region node_modules/three-stdlib/controls/experimental/CameraControls.js -var __defProp$37 = Object.defineProperty; -var __defNormalProp$37 = (obj, key, value) => key in obj ? __defProp$37(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$37 = (obj, key, value) => { - __defNormalProp$37(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var STATE$1 = { - NONE: -1, - ROTATE: 0, - DOLLY: 1, - PAN: 2, - TOUCH_ROTATE: 3, - TOUCH_PAN: 4, - TOUCH_DOLLY_PAN: 5, - TOUCH_DOLLY_ROTATE: 6 -}; -var CameraControls = class extends EventDispatcher { - constructor(object, domElement) { - super(); - __publicField$37(this, "object"); - __publicField$37(this, "domElement"); - /** Set to false to disable this control */ - __publicField$37(this, "enabled", true); - /** "target" sets the location of focus, where the object orbits around */ - __publicField$37(this, "target", new Vector3()); - /** Set to true to enable trackball behavior */ - __publicField$37(this, "trackball", false); - /** How far you can dolly in ( PerspectiveCamera only ) */ - __publicField$37(this, "minDistance", 0); - /** How far you can dolly out ( PerspectiveCamera only ) */ - __publicField$37(this, "maxDistance", Infinity); - __publicField$37(this, "minZoom", 0); - __publicField$37(this, "maxZoom", Infinity); - __publicField$37(this, "minPolarAngle", 0); - __publicField$37(this, "maxPolarAngle", Math.PI); - __publicField$37(this, "minAzimuthAngle", -Infinity); - __publicField$37(this, "maxAzimuthAngle", Infinity); - __publicField$37(this, "enableDamping", false); - __publicField$37(this, "dampingFactor", .05); - /** - * This option enables dollying in and out; property named as "zoom" for backwards compatibility - * Set to false to disable zooming - */ - __publicField$37(this, "enableZoom", true); - __publicField$37(this, "zoomSpeed", 1); - /** Set to false to disable rotating */ - __publicField$37(this, "enableRotate", true); - __publicField$37(this, "rotateSpeed", 1); - /** Set to false to disable panning */ - __publicField$37(this, "enablePan", true); - __publicField$37(this, "panSpeed", 1); - /** if true, pan in screen-space */ - __publicField$37(this, "screenSpacePanning", false); - /** pixels moved per arrow key push */ - __publicField$37(this, "keyPanSpeed", 7); - /** - * Set to true to automatically rotate around the target - * If auto-rotate is enabled, you must call controls.update() in your animation loop - * auto-rotate is not supported for trackball behavior - */ - __publicField$37(this, "autoRotate", false); - __publicField$37(this, "autoRotateSpeed", 2); - /** Set to false to disable use of the keys */ - __publicField$37(this, "enableKeys", true); - /** The four arrow keys */ - __publicField$37(this, "keys", { - LEFT: "ArrowLeft", - UP: "ArrowUp", - RIGHT: "ArrowRight", - BOTTOM: "ArrowDown" - }); - __publicField$37(this, "mouseButtons"); - /** Touch fingers */ - __publicField$37(this, "touches", { - ONE: TOUCH.ROTATE, - TWO: TOUCH.DOLLY_PAN - }); - __publicField$37(this, "target0"); - __publicField$37(this, "position0"); - __publicField$37(this, "quaternion0"); - __publicField$37(this, "zoom0"); - __publicField$37(this, "spherical", new Spherical()); - __publicField$37(this, "sphericalDelta", new Spherical()); - __publicField$37(this, "changeEvent", { type: "change" }); - __publicField$37(this, "startEvent", { type: "start" }); - __publicField$37(this, "endEvent", { type: "end" }); - __publicField$37(this, "state", STATE$1.NONE); - __publicField$37(this, "EPS", 1e-6); - __publicField$37(this, "scale", 1); - __publicField$37(this, "panOffset", new Vector3()); - __publicField$37(this, "zoomChanged", false); - __publicField$37(this, "rotateStart", new Vector2()); - __publicField$37(this, "rotateEnd", new Vector2()); - __publicField$37(this, "rotateDelta", new Vector2()); - __publicField$37(this, "panStart", new Vector2()); - __publicField$37(this, "panEnd", new Vector2()); - __publicField$37(this, "panDelta", new Vector2()); - __publicField$37(this, "dollyStart", new Vector2()); - __publicField$37(this, "dollyEnd", new Vector2()); - __publicField$37(this, "dollyDelta", new Vector2()); - __publicField$37(this, "offset", new Vector3()); - __publicField$37(this, "lastPosition", new Vector3()); - __publicField$37(this, "lastQuaternion", new Quaternion()); - __publicField$37(this, "q", new Quaternion()); - __publicField$37(this, "v", new Vector3()); - __publicField$37(this, "vec", new Vector3()); - __publicField$37(this, "quat"); - __publicField$37(this, "quatInverse"); - __publicField$37(this, "getPolarAngle", () => this.spherical.phi); - __publicField$37(this, "getAzimuthalAngle", () => this.spherical.theta); - __publicField$37(this, "saveState", () => { - this.target0.copy(this.target); - this.position0.copy(this.object.position); - this.quaternion0.copy(this.object.quaternion); - this.zoom0 = this.object.zoom; - }); - __publicField$37(this, "reset", () => { - this.target.copy(this.target0); - this.object.position.copy(this.position0); - this.object.quaternion.copy(this.quaternion0); - this.object.zoom = this.zoom0; - this.object.updateProjectionMatrix(); - this.dispatchEvent(this.changeEvent); - this.update(); - this.state = STATE$1.NONE; - }); - __publicField$37(this, "dispose", () => { - this.domElement.removeEventListener("contextmenu", this.onContextMenu, false); - this.domElement.removeEventListener("mousedown", this.onMouseDown, false); - this.domElement.removeEventListener("wheel", this.onMouseWheel, false); - this.domElement.removeEventListener("touchstart", this.onTouchStart, false); - this.domElement.removeEventListener("touchend", this.onTouchEnd, false); - this.domElement.removeEventListener("touchmove", this.onTouchMove, false); - document.removeEventListener("mousemove", this.onMouseMove, false); - document.removeEventListener("mouseup", this.onMouseUp, false); - this.domElement.removeEventListener("keydown", this.onKeyDown, false); - }); - __publicField$37(this, "update", () => { - const position = this.object.position; - this.offset.copy(position).sub(this.target); - if (this.trackball) { - if (this.sphericalDelta.theta) { - this.vec.set(0, 1, 0).applyQuaternion(this.object.quaternion); - const factor = this.enableDamping ? this.dampingFactor : 1; - this.q.setFromAxisAngle(this.vec, this.sphericalDelta.theta * factor); - this.object.quaternion.premultiply(this.q); - this.offset.applyQuaternion(this.q); - } - if (this.sphericalDelta.phi) { - this.vec.set(1, 0, 0).applyQuaternion(this.object.quaternion); - const factor = this.enableDamping ? this.dampingFactor : 1; - this.q.setFromAxisAngle(this.vec, this.sphericalDelta.phi * factor); - this.object.quaternion.premultiply(this.q); - this.offset.applyQuaternion(this.q); - } - this.offset.multiplyScalar(this.scale); - this.offset.clampLength(this.minDistance, this.maxDistance); - } else { - this.offset.applyQuaternion(this.quat); - if (this.autoRotate && this.state === STATE$1.NONE) this.rotateLeft(this.getAutoRotationAngle()); - this.spherical.setFromVector3(this.offset); - if (this.enableDamping) { - this.spherical.theta += this.sphericalDelta.theta * this.dampingFactor; - this.spherical.phi += this.sphericalDelta.phi * this.dampingFactor; - } else { - this.spherical.theta += this.sphericalDelta.theta; - this.spherical.phi += this.sphericalDelta.phi; - } - this.spherical.theta = Math.max(this.minAzimuthAngle, Math.min(this.maxAzimuthAngle, this.spherical.theta)); - this.spherical.phi = Math.max(this.minPolarAngle, Math.min(this.maxPolarAngle, this.spherical.phi)); - this.spherical.makeSafe(); - this.spherical.radius *= this.scale; - this.spherical.radius = Math.max(this.minDistance, Math.min(this.maxDistance, this.spherical.radius)); - this.offset.setFromSpherical(this.spherical); - this.offset.applyQuaternion(this.quatInverse); - } - if (this.enableDamping === true) this.target.addScaledVector(this.panOffset, this.dampingFactor); - else this.target.add(this.panOffset); - position.copy(this.target).add(this.offset); - if (this.trackball === false) this.object.lookAt(this.target); - if (this.enableDamping === true) { - this.sphericalDelta.theta *= 1 - this.dampingFactor; - this.sphericalDelta.phi *= 1 - this.dampingFactor; - this.panOffset.multiplyScalar(1 - this.dampingFactor); - } else { - this.sphericalDelta.set(0, 0, 0); - this.panOffset.set(0, 0, 0); - } - this.scale = 1; - if (this.zoomChanged || this.lastPosition.distanceToSquared(this.object.position) > this.EPS || 8 * (1 - this.lastQuaternion.dot(this.object.quaternion)) > this.EPS) { - this.dispatchEvent(this.changeEvent); - this.lastPosition.copy(this.object.position); - this.lastQuaternion.copy(this.object.quaternion); - this.zoomChanged = false; - return true; - } - return false; - }); - __publicField$37(this, "getAutoRotationAngle", () => 2 * Math.PI / 60 / 60 * this.autoRotateSpeed); - __publicField$37(this, "getZoomScale", () => Math.pow(.95, this.zoomSpeed)); - __publicField$37(this, "rotateLeft", (angle) => { - this.sphericalDelta.theta -= angle; - }); - __publicField$37(this, "rotateUp", (angle) => { - this.sphericalDelta.phi -= angle; - }); - __publicField$37(this, "panLeft", (distance, objectMatrix) => { - this.v.setFromMatrixColumn(objectMatrix, 0); - this.v.multiplyScalar(-distance); - this.panOffset.add(this.v); - }); - __publicField$37(this, "panUp", (distance, objectMatrix) => { - if (this.screenSpacePanning === true) this.v.setFromMatrixColumn(objectMatrix, 1); - else { - this.v.setFromMatrixColumn(objectMatrix, 0); - this.v.crossVectors(this.object.up, this.v); - } - this.v.multiplyScalar(distance); - this.panOffset.add(this.v); - }); - __publicField$37(this, "pan", (deltaX, deltaY) => { - const element = this.domElement; - if (this.object instanceof PerspectiveCamera) { - const position = this.object.position; - this.offset.copy(position).sub(this.target); - let targetDistance = this.offset.length(); - targetDistance *= Math.tan(this.object.fov / 2 * Math.PI / 180); - this.panLeft(2 * deltaX * targetDistance / element.clientHeight, this.object.matrix); - this.panUp(2 * deltaY * targetDistance / element.clientHeight, this.object.matrix); - } else if (this.object.isOrthographicCamera) { - this.panLeft(deltaX * (this.object.right - this.object.left) / this.object.zoom / element.clientWidth, this.object.matrix); - this.panUp(deltaY * (this.object.top - this.object.bottom) / this.object.zoom / element.clientHeight, this.object.matrix); - } else { - console.warn("WARNING: CameraControls.js encountered an unknown camera type - pan disabled."); - this.enablePan = false; - } - }); - __publicField$37(this, "dollyIn", (dollyScale) => { - if (this.object instanceof PerspectiveCamera) this.scale /= dollyScale; - else if (this.object instanceof OrthographicCamera) { - this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom * dollyScale)); - this.object.updateProjectionMatrix(); - this.zoomChanged = true; - } else { - console.warn("WARNING: CameraControls.js encountered an unknown camera type - dolly/zoom disabled."); - this.enableZoom = false; - } - }); - __publicField$37(this, "dollyOut", (dollyScale) => { - if (this.object instanceof PerspectiveCamera) this.scale *= dollyScale; - else if (this.object instanceof OrthographicCamera) { - this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom / dollyScale)); - this.object.updateProjectionMatrix(); - this.zoomChanged = true; - } else { - console.warn("WARNING: CameraControls.js encountered an unknown camera type - dolly/zoom disabled."); - this.enableZoom = false; - } - }); - __publicField$37(this, "handleMouseDownRotate", (event) => { - this.rotateStart.set(event.clientX, event.clientY); - }); - __publicField$37(this, "handleMouseDownDolly", (event) => { - this.dollyStart.set(event.clientX, event.clientY); - }); - __publicField$37(this, "handleMouseDownPan", (event) => { - this.panStart.set(event.clientX, event.clientY); - }); - __publicField$37(this, "handleMouseMoveRotate", (event) => { - this.rotateEnd.set(event.clientX, event.clientY); - this.rotateDelta.subVectors(this.rotateEnd, this.rotateStart).multiplyScalar(this.rotateSpeed); - const element = this.domElement; - this.rotateLeft(2 * Math.PI * this.rotateDelta.x / element.clientHeight); - this.rotateUp(2 * Math.PI * this.rotateDelta.y / element.clientHeight); - this.rotateStart.copy(this.rotateEnd); - this.update(); - }); - __publicField$37(this, "handleMouseMoveDolly", (event) => { - this.dollyEnd.set(event.clientX, event.clientY); - this.dollyDelta.subVectors(this.dollyEnd, this.dollyStart); - if (this.dollyDelta.y > 0) this.dollyIn(this.getZoomScale()); - else if (this.dollyDelta.y < 0) this.dollyOut(this.getZoomScale()); - this.dollyStart.copy(this.dollyEnd); - this.update(); - }); - __publicField$37(this, "handleMouseMovePan", (event) => { - this.panEnd.set(event.clientX, event.clientY); - this.panDelta.subVectors(this.panEnd, this.panStart).multiplyScalar(this.panSpeed); - this.pan(this.panDelta.x, this.panDelta.y); - this.panStart.copy(this.panEnd); - this.update(); - }); - __publicField$37(this, "handleMouseWheel", (event) => { - if (event.deltaY < 0) this.dollyOut(this.getZoomScale()); - else if (event.deltaY > 0) this.dollyIn(this.getZoomScale()); - this.update(); - }); - __publicField$37(this, "handleKeyDown", (event) => { - let needsUpdate = false; - switch (event.code) { - case this.keys.UP: - this.pan(0, this.keyPanSpeed); - needsUpdate = true; - break; - case this.keys.BOTTOM: - this.pan(0, -this.keyPanSpeed); - needsUpdate = true; - break; - case this.keys.LEFT: - this.pan(this.keyPanSpeed, 0); - needsUpdate = true; - break; - case this.keys.RIGHT: - this.pan(-this.keyPanSpeed, 0); - needsUpdate = true; - break; - } - if (needsUpdate) { - event.preventDefault(); - this.update(); - } - }); - __publicField$37(this, "handleTouchStartRotate", (event) => { - if (event.touches.length == 1) this.rotateStart.set(event.touches[0].pageX, event.touches[0].pageY); - else { - const x = .5 * (event.touches[0].pageX + event.touches[1].pageX); - const y = .5 * (event.touches[0].pageY + event.touches[1].pageY); - this.rotateStart.set(x, y); - } - }); - __publicField$37(this, "handleTouchStartPan", (event) => { - if (event.touches.length == 1) this.panStart.set(event.touches[0].pageX, event.touches[0].pageY); - else { - const x = .5 * (event.touches[0].pageX + event.touches[1].pageX); - const y = .5 * (event.touches[0].pageY + event.touches[1].pageY); - this.panStart.set(x, y); - } - }); - __publicField$37(this, "handleTouchStartDolly", (event) => { - const dx = event.touches[0].pageX - event.touches[1].pageX; - const dy = event.touches[0].pageY - event.touches[1].pageY; - const distance = Math.sqrt(dx * dx + dy * dy); - this.dollyStart.set(0, distance); - }); - __publicField$37(this, "handleTouchStartDollyPan", (event) => { - if (this.enableZoom) this.handleTouchStartDolly(event); - if (this.enablePan) this.handleTouchStartPan(event); - }); - __publicField$37(this, "handleTouchStartDollyRotate", (event) => { - if (this.enableZoom) this.handleTouchStartDolly(event); - if (this.enableRotate) this.handleTouchStartRotate(event); - }); - __publicField$37(this, "handleTouchMoveRotate", (event) => { - if (event.touches.length == 1) this.rotateEnd.set(event.touches[0].pageX, event.touches[0].pageY); - else { - const x = .5 * (event.touches[0].pageX + event.touches[1].pageX); - const y = .5 * (event.touches[0].pageY + event.touches[1].pageY); - this.rotateEnd.set(x, y); - } - this.rotateDelta.subVectors(this.rotateEnd, this.rotateStart).multiplyScalar(this.rotateSpeed); - const element = this.domElement; - this.rotateLeft(2 * Math.PI * this.rotateDelta.x / element.clientHeight); - this.rotateUp(2 * Math.PI * this.rotateDelta.y / element.clientHeight); - this.rotateStart.copy(this.rotateEnd); - }); - __publicField$37(this, "handleTouchMovePan", (event) => { - if (event.touches.length == 1) this.panEnd.set(event.touches[0].pageX, event.touches[0].pageY); - else { - const x = .5 * (event.touches[0].pageX + event.touches[1].pageX); - const y = .5 * (event.touches[0].pageY + event.touches[1].pageY); - this.panEnd.set(x, y); - } - this.panDelta.subVectors(this.panEnd, this.panStart).multiplyScalar(this.panSpeed); - this.pan(this.panDelta.x, this.panDelta.y); - this.panStart.copy(this.panEnd); - }); - __publicField$37(this, "handleTouchMoveDolly", (event) => { - const dx = event.touches[0].pageX - event.touches[1].pageX; - const dy = event.touches[0].pageY - event.touches[1].pageY; - const distance = Math.sqrt(dx * dx + dy * dy); - this.dollyEnd.set(0, distance); - this.dollyDelta.set(0, Math.pow(this.dollyEnd.y / this.dollyStart.y, this.zoomSpeed)); - this.dollyIn(this.dollyDelta.y); - this.dollyStart.copy(this.dollyEnd); - }); - __publicField$37(this, "handleTouchMoveDollyPan", (event) => { - if (this.enableZoom) this.handleTouchMoveDolly(event); - if (this.enablePan) this.handleTouchMovePan(event); - }); - __publicField$37(this, "handleTouchMoveDollyRotate", (event) => { - if (this.enableZoom) this.handleTouchMoveDolly(event); - if (this.enableRotate) this.handleTouchMoveRotate(event); - }); - __publicField$37(this, "onMouseDown", (event) => { - if (this.enabled === false) return; - event.preventDefault(); - this.domElement.focus ? this.domElement.focus() : window.focus(); - let mouseAction; - switch (event.button) { - case 0: - mouseAction = this.mouseButtons.LEFT; - break; - case 1: - mouseAction = this.mouseButtons.MIDDLE; - break; - case 2: - mouseAction = this.mouseButtons.RIGHT; - break; - default: mouseAction = -1; - } - switch (mouseAction) { - case MOUSE.DOLLY: - if (this.enableZoom === false) return; - this.handleMouseDownDolly(event); - this.state = STATE$1.DOLLY; - break; - case MOUSE.ROTATE: - if (event.ctrlKey || event.metaKey || event.shiftKey) { - if (this.enablePan === false) return; - this.handleMouseDownPan(event); - this.state = STATE$1.PAN; - } else { - if (this.enableRotate === false) return; - this.handleMouseDownRotate(event); - this.state = STATE$1.ROTATE; - } - break; - case MOUSE.PAN: - if (event.ctrlKey || event.metaKey || event.shiftKey) { - if (this.enableRotate === false) return; - this.handleMouseDownRotate(event); - this.state = STATE$1.ROTATE; - } else { - if (this.enablePan === false) return; - this.handleMouseDownPan(event); - this.state = STATE$1.PAN; - } - break; - default: this.state = STATE$1.NONE; - } - if (this.state !== STATE$1.NONE) { - document.addEventListener("mousemove", this.onMouseMove, false); - document.addEventListener("mouseup", this.onMouseUp, false); - this.dispatchEvent(this.startEvent); - } - }); - __publicField$37(this, "onMouseMove", (event) => { - if (this.enabled === false) return; - event.preventDefault(); - switch (this.state) { - case STATE$1.ROTATE: - if (this.enableRotate === false) return; - this.handleMouseMoveRotate(event); - break; - case STATE$1.DOLLY: - if (this.enableZoom === false) return; - this.handleMouseMoveDolly(event); - break; - case STATE$1.PAN: - if (this.enablePan === false) return; - this.handleMouseMovePan(event); - break; - } - }); - __publicField$37(this, "onMouseUp", () => { - if (this.enabled === false) return; - document.removeEventListener("mousemove", this.onMouseMove, false); - document.removeEventListener("mouseup", this.onMouseUp, false); - this.dispatchEvent(this.endEvent); - this.state = STATE$1.NONE; - }); - __publicField$37(this, "onMouseWheel", (event) => { - if (this.enabled === false || this.enableZoom === false || this.state !== STATE$1.NONE && this.state !== STATE$1.ROTATE) return; - event.preventDefault(); - this.dispatchEvent(this.startEvent); - this.handleMouseWheel(event); - this.dispatchEvent(this.endEvent); - }); - __publicField$37(this, "onKeyDown", (event) => { - if (this.enabled === false || this.enableKeys === false || this.enablePan === false) return; - this.handleKeyDown(event); - }); - __publicField$37(this, "onTouchStart", (event) => { - if (this.enabled === false) return; - event.preventDefault(); - switch (event.touches.length) { - case 1: - switch (this.touches.ONE) { - case TOUCH.ROTATE: - if (this.enableRotate === false) return; - this.handleTouchStartRotate(event); - this.state = STATE$1.TOUCH_ROTATE; - break; - case TOUCH.PAN: - if (this.enablePan === false) return; - this.handleTouchStartPan(event); - this.state = STATE$1.TOUCH_PAN; - break; - default: this.state = STATE$1.NONE; - } - break; - case 2: - switch (this.touches.TWO) { - case TOUCH.DOLLY_PAN: - if (this.enableZoom === false && this.enablePan === false) return; - this.handleTouchStartDollyPan(event); - this.state = STATE$1.TOUCH_DOLLY_PAN; - break; - case TOUCH.DOLLY_ROTATE: - if (this.enableZoom === false && this.enableRotate === false) return; - this.handleTouchStartDollyRotate(event); - this.state = STATE$1.TOUCH_DOLLY_ROTATE; - break; - default: this.state = STATE$1.NONE; - } - break; - default: this.state = STATE$1.NONE; - } - if (this.state !== STATE$1.NONE) this.dispatchEvent(this.startEvent); - }); - __publicField$37(this, "onTouchMove", (event) => { - if (this.enabled === false) return; - event.preventDefault(); - switch (this.state) { - case STATE$1.TOUCH_ROTATE: - if (this.enableRotate === false) return; - this.handleTouchMoveRotate(event); - this.update(); - break; - case STATE$1.TOUCH_PAN: - if (this.enablePan === false) return; - this.handleTouchMovePan(event); - this.update(); - break; - case STATE$1.TOUCH_DOLLY_PAN: - if (this.enableZoom === false && this.enablePan === false) return; - this.handleTouchMoveDollyPan(event); - this.update(); - break; - case STATE$1.TOUCH_DOLLY_ROTATE: - if (this.enableZoom === false && this.enableRotate === false) return; - this.handleTouchMoveDollyRotate(event); - this.update(); - break; - default: this.state = STATE$1.NONE; - } - }); - __publicField$37(this, "onTouchEnd", () => { - if (this.enabled === false) return; - this.dispatchEvent(this.endEvent); - this.state = STATE$1.NONE; - }); - __publicField$37(this, "onContextMenu", (event) => { - if (this.enabled === false) return; - event.preventDefault(); - }); - if (domElement === void 0) console.warn("THREE.CameraControls: The second parameter \"domElement\" is now mandatory."); - if (domElement instanceof Document) console.error("THREE.CameraControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead."); - this.object = object; - this.domElement = domElement; - this.mouseButtons = { - LEFT: MOUSE.ROTATE, - MIDDLE: MOUSE.DOLLY, - RIGHT: MOUSE.PAN - }; - this.target0 = this.target.clone(); - this.position0 = this.object.position.clone(); - this.quaternion0 = this.object.quaternion.clone(); - this.zoom0 = this.object.zoom; - this.quat = new Quaternion().setFromUnitVectors(this.object.up, new Vector3(0, 1, 0)); - this.quatInverse = this.quat.clone().invert(); - this.lastPosition = new Vector3(); - this.lastQuaternion = new Quaternion(); - this.domElement.addEventListener("contextmenu", this.onContextMenu, false); - this.domElement.addEventListener("mousedown", this.onMouseDown, false); - this.domElement.addEventListener("wheel", this.onMouseWheel, false); - this.domElement.addEventListener("touchstart", this.onTouchStart, false); - this.domElement.addEventListener("touchend", this.onTouchEnd, false); - this.domElement.addEventListener("touchmove", this.onTouchMove, false); - this.domElement.addEventListener("keydown", this.onKeyDown, false); - if (this.domElement.tabIndex === -1) this.domElement.tabIndex = 0; - this.object.lookAt(this.target); - this.update(); - this.saveState(); - } - handleMouseUp() {} - handleTouchEnd() {} -}; -var OrbitControlsExp = class extends CameraControls { - constructor(object, domElement) { - super(object, domElement); - __publicField$37(this, "mouseButtons"); - __publicField$37(this, "touches"); - this.mouseButtons = { - LEFT: MOUSE.ROTATE, - RIGHT: MOUSE.PAN - }; - this.touches = { - ONE: TOUCH.ROTATE, - TWO: TOUCH.DOLLY_PAN - }; - } -}; -var MapControlsExp = class extends CameraControls { - constructor(object, domElement) { - super(object, domElement); - __publicField$37(this, "mouseButtons"); - __publicField$37(this, "touches"); - this.mouseButtons = { - LEFT: MOUSE.PAN, - RIGHT: MOUSE.ROTATE - }; - this.touches = { - ONE: TOUCH.PAN, - TWO: TOUCH.DOLLY_ROTATE - }; - } -}; -var TrackballControlsExp = class extends CameraControls { - constructor(object, domElement) { - super(object, domElement); - __publicField$37(this, "trackball"); - __publicField$37(this, "screenSpacePanning"); - __publicField$37(this, "autoRotate"); - __publicField$37(this, "mouseButtons"); - __publicField$37(this, "touches"); - this.trackball = true; - this.screenSpacePanning = true; - this.autoRotate = false; - this.mouseButtons = { - LEFT: MOUSE.ROTATE, - RIGHT: MOUSE.PAN - }; - this.touches = { - ONE: TOUCH.ROTATE, - TWO: TOUCH.DOLLY_PAN - }; - } -}; -//#endregion -//#region node_modules/three-stdlib/controls/FirstPersonControls.js -var __defProp$36 = Object.defineProperty; -var __defNormalProp$36 = (obj, key, value) => key in obj ? __defProp$36(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$36 = (obj, key, value) => { - __defNormalProp$36(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var targetPosition = /* @__PURE__ */ new Vector3(); -var FirstPersonControls = class extends EventDispatcher { - constructor(object, domElement) { - super(); - __publicField$36(this, "object"); - __publicField$36(this, "domElement"); - __publicField$36(this, "enabled", true); - __publicField$36(this, "movementSpeed", 1); - __publicField$36(this, "lookSpeed", .005); - __publicField$36(this, "lookVertical", true); - __publicField$36(this, "autoForward", false); - __publicField$36(this, "activeLook", true); - __publicField$36(this, "heightSpeed", false); - __publicField$36(this, "heightCoef", 1); - __publicField$36(this, "heightMin", 0); - __publicField$36(this, "heightMax", 1); - __publicField$36(this, "constrainVertical", false); - __publicField$36(this, "verticalMin", 0); - __publicField$36(this, "verticalMax", Math.PI); - __publicField$36(this, "mouseDragOn", false); - __publicField$36(this, "autoSpeedFactor", 0); - __publicField$36(this, "mouseX", 0); - __publicField$36(this, "mouseY", 0); - __publicField$36(this, "moveForward", false); - __publicField$36(this, "moveBackward", false); - __publicField$36(this, "moveLeft", false); - __publicField$36(this, "moveRight", false); - __publicField$36(this, "moveUp", false); - __publicField$36(this, "moveDown", false); - __publicField$36(this, "viewHalfX", 0); - __publicField$36(this, "viewHalfY", 0); - __publicField$36(this, "lat", 0); - __publicField$36(this, "lon", 0); - __publicField$36(this, "lookDirection", new Vector3()); - __publicField$36(this, "spherical", new Spherical()); - __publicField$36(this, "target", new Vector3()); - __publicField$36(this, "connect", (domElement) => { - domElement.setAttribute("tabindex", "-1"); - domElement.style.touchAction = "none"; - domElement.addEventListener("contextmenu", this.contextmenu); - domElement.addEventListener("mousemove", this.onMouseMove); - domElement.addEventListener("mousedown", this.onMouseDown); - domElement.addEventListener("mouseup", this.onMouseUp); - this.domElement = domElement; - window.addEventListener("keydown", this.onKeyDown); - window.addEventListener("keyup", this.onKeyUp); - this.handleResize(); - }); - __publicField$36(this, "dispose", () => { - var _a, _b, _c, _d; - (_a = this.domElement) == null || _a.removeEventListener("contextmenu", this.contextmenu); - (_b = this.domElement) == null || _b.removeEventListener("mousedown", this.onMouseDown); - (_c = this.domElement) == null || _c.removeEventListener("mousemove", this.onMouseMove); - (_d = this.domElement) == null || _d.removeEventListener("mouseup", this.onMouseUp); - window.removeEventListener("keydown", this.onKeyDown); - window.removeEventListener("keyup", this.onKeyUp); - }); - __publicField$36(this, "handleResize", () => { - if (this.domElement) { - this.viewHalfX = this.domElement.offsetWidth / 2; - this.viewHalfY = this.domElement.offsetHeight / 2; - } - }); - __publicField$36(this, "onMouseDown", (event) => { - var _a; - (_a = this.domElement) == null || _a.focus(); - if (this.activeLook) switch (event.button) { - case 0: - this.moveForward = true; - break; - case 2: - this.moveBackward = true; - break; - } - this.mouseDragOn = true; - }); - __publicField$36(this, "onMouseUp", (event) => { - if (this.activeLook) switch (event.button) { - case 0: - this.moveForward = false; - break; - case 2: - this.moveBackward = false; - break; - } - this.mouseDragOn = false; - }); - __publicField$36(this, "onMouseMove", (event) => { - if (this.domElement) { - this.mouseX = event.pageX - this.domElement.offsetLeft - this.viewHalfX; - this.mouseY = event.pageY - this.domElement.offsetTop - this.viewHalfY; - } - }); - __publicField$36(this, "onKeyDown", (event) => { - switch (event.code) { - case "ArrowUp": - case "KeyW": - this.moveForward = true; - break; - case "ArrowLeft": - case "KeyA": - this.moveLeft = true; - break; - case "ArrowDown": - case "KeyS": - this.moveBackward = true; - break; - case "ArrowRight": - case "KeyD": - this.moveRight = true; - break; - case "KeyR": - this.moveUp = true; - break; - case "KeyF": - this.moveDown = true; - break; - } - }); - __publicField$36(this, "onKeyUp", (event) => { - switch (event.code) { - case "ArrowUp": - case "KeyW": - this.moveForward = false; - break; - case "ArrowLeft": - case "KeyA": - this.moveLeft = false; - break; - case "ArrowDown": - case "KeyS": - this.moveBackward = false; - break; - case "ArrowRight": - case "KeyD": - this.moveRight = false; - break; - case "KeyR": - this.moveUp = false; - break; - case "KeyF": - this.moveDown = false; - break; - } - }); - __publicField$36(this, "lookAt", (x, y, z) => { - if (x instanceof Vector3) this.target.copy(x); - else if (y && z) this.target.set(x, y, z); - this.object.lookAt(this.target); - this.setOrientation(); - return this; - }); - __publicField$36(this, "update", (delta) => { - if (!this.enabled) return; - if (this.heightSpeed) { - const heightDelta = MathUtils.clamp(this.object.position.y, this.heightMin, this.heightMax) - this.heightMin; - this.autoSpeedFactor = delta * (heightDelta * this.heightCoef); - } else this.autoSpeedFactor = 0; - const actualMoveSpeed = delta * this.movementSpeed; - if (this.moveForward || this.autoForward && !this.moveBackward) this.object.translateZ(-(actualMoveSpeed + this.autoSpeedFactor)); - if (this.moveBackward) this.object.translateZ(actualMoveSpeed); - if (this.moveLeft) this.object.translateX(-actualMoveSpeed); - if (this.moveRight) this.object.translateX(actualMoveSpeed); - if (this.moveUp) this.object.translateY(actualMoveSpeed); - if (this.moveDown) this.object.translateY(-actualMoveSpeed); - let actualLookSpeed = delta * this.lookSpeed; - if (!this.activeLook) actualLookSpeed = 0; - let verticalLookRatio = 1; - if (this.constrainVertical) verticalLookRatio = Math.PI / (this.verticalMax - this.verticalMin); - this.lon -= this.mouseX * actualLookSpeed; - if (this.lookVertical) this.lat -= this.mouseY * actualLookSpeed * verticalLookRatio; - this.lat = Math.max(-85, Math.min(85, this.lat)); - let phi = MathUtils.degToRad(90 - this.lat); - const theta = MathUtils.degToRad(this.lon); - if (this.constrainVertical) phi = MathUtils.mapLinear(phi, 0, Math.PI, this.verticalMin, this.verticalMax); - const position = this.object.position; - targetPosition.setFromSphericalCoords(1, phi, theta).add(position); - this.object.lookAt(targetPosition); - }); - __publicField$36(this, "contextmenu", (event) => event.preventDefault()); - __publicField$36(this, "setOrientation", () => { - this.lookDirection.set(0, 0, -1).applyQuaternion(this.object.quaternion); - this.spherical.setFromVector3(this.lookDirection); - this.lat = 90 - MathUtils.radToDeg(this.spherical.phi); - this.lon = MathUtils.radToDeg(this.spherical.theta); - }); - this.object = object; - this.domElement = domElement; - this.setOrientation(); - if (domElement) this.connect(domElement); - } -}; -//#endregion -//#region node_modules/three-stdlib/controls/TransformControls.js -var __defProp$35 = Object.defineProperty; -var __defNormalProp$35 = (obj, key, value) => key in obj ? __defProp$35(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$35 = (obj, key, value) => { - __defNormalProp$35(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var TransformControls = class extends Object3D { - constructor(camera, domElement) { - super(); - __publicField$35(this, "isTransformControls", true); - __publicField$35(this, "visible", false); - __publicField$35(this, "domElement"); - __publicField$35(this, "raycaster", new Raycaster()); - __publicField$35(this, "gizmo"); - __publicField$35(this, "plane"); - __publicField$35(this, "tempVector", new Vector3()); - __publicField$35(this, "tempVector2", new Vector3()); - __publicField$35(this, "tempQuaternion", new Quaternion()); - __publicField$35(this, "unit", { - X: new Vector3(1, 0, 0), - Y: new Vector3(0, 1, 0), - Z: new Vector3(0, 0, 1) - }); - __publicField$35(this, "pointStart", new Vector3()); - __publicField$35(this, "pointEnd", new Vector3()); - __publicField$35(this, "offset", new Vector3()); - __publicField$35(this, "rotationAxis", new Vector3()); - __publicField$35(this, "startNorm", new Vector3()); - __publicField$35(this, "endNorm", new Vector3()); - __publicField$35(this, "rotationAngle", 0); - __publicField$35(this, "cameraPosition", new Vector3()); - __publicField$35(this, "cameraQuaternion", new Quaternion()); - __publicField$35(this, "cameraScale", new Vector3()); - __publicField$35(this, "parentPosition", new Vector3()); - __publicField$35(this, "parentQuaternion", new Quaternion()); - __publicField$35(this, "parentQuaternionInv", new Quaternion()); - __publicField$35(this, "parentScale", new Vector3()); - __publicField$35(this, "worldPositionStart", new Vector3()); - __publicField$35(this, "worldQuaternionStart", new Quaternion()); - __publicField$35(this, "worldScaleStart", new Vector3()); - __publicField$35(this, "worldPosition", new Vector3()); - __publicField$35(this, "worldQuaternion", new Quaternion()); - __publicField$35(this, "worldQuaternionInv", new Quaternion()); - __publicField$35(this, "worldScale", new Vector3()); - __publicField$35(this, "eye", new Vector3()); - __publicField$35(this, "positionStart", new Vector3()); - __publicField$35(this, "quaternionStart", new Quaternion()); - __publicField$35(this, "scaleStart", new Vector3()); - __publicField$35(this, "camera"); - __publicField$35(this, "object"); - __publicField$35(this, "enabled", true); - __publicField$35(this, "axis", null); - __publicField$35(this, "mode", "translate"); - __publicField$35(this, "translationSnap", null); - __publicField$35(this, "rotationSnap", null); - __publicField$35(this, "scaleSnap", null); - __publicField$35(this, "space", "world"); - __publicField$35(this, "size", 1); - __publicField$35(this, "dragging", false); - __publicField$35(this, "showX", true); - __publicField$35(this, "showY", true); - __publicField$35(this, "showZ", true); - __publicField$35(this, "changeEvent", { type: "change" }); - __publicField$35(this, "mouseDownEvent", { - type: "mouseDown", - mode: this.mode - }); - __publicField$35(this, "mouseUpEvent", { - type: "mouseUp", - mode: this.mode - }); - __publicField$35(this, "objectChangeEvent", { type: "objectChange" }); - __publicField$35(this, "intersectObjectWithRay", (object, raycaster, includeInvisible) => { - const allIntersections = raycaster.intersectObject(object, true); - for (let i = 0; i < allIntersections.length; i++) if (allIntersections[i].object.visible || includeInvisible) return allIntersections[i]; - return false; - }); - __publicField$35(this, "attach", (object) => { - this.object = object; - this.visible = true; - return this; - }); - __publicField$35(this, "detach", () => { - this.object = void 0; - this.visible = false; - this.axis = null; - return this; - }); - __publicField$35(this, "reset", () => { - if (!this.enabled) return this; - if (this.dragging) { - if (this.object !== void 0) { - this.object.position.copy(this.positionStart); - this.object.quaternion.copy(this.quaternionStart); - this.object.scale.copy(this.scaleStart); - this.dispatchEvent(this.changeEvent); - this.dispatchEvent(this.objectChangeEvent); - this.pointStart.copy(this.pointEnd); - } - } - return this; - }); - __publicField$35(this, "updateMatrixWorld", () => { - if (this.object !== void 0) { - this.object.updateMatrixWorld(); - if (this.object.parent === null) console.error("TransformControls: The attached 3D object must be a part of the scene graph."); - else this.object.parent.matrixWorld.decompose(this.parentPosition, this.parentQuaternion, this.parentScale); - this.object.matrixWorld.decompose(this.worldPosition, this.worldQuaternion, this.worldScale); - this.parentQuaternionInv.copy(this.parentQuaternion).invert(); - this.worldQuaternionInv.copy(this.worldQuaternion).invert(); - } - this.camera.updateMatrixWorld(); - this.camera.matrixWorld.decompose(this.cameraPosition, this.cameraQuaternion, this.cameraScale); - this.eye.copy(this.cameraPosition).sub(this.worldPosition).normalize(); - super.updateMatrixWorld(); - }); - __publicField$35(this, "pointerHover", (pointer) => { - if (this.object === void 0 || this.dragging === true) return; - this.raycaster.setFromCamera(pointer, this.camera); - const intersect = this.intersectObjectWithRay(this.gizmo.picker[this.mode], this.raycaster); - if (intersect) this.axis = intersect.object.name; - else this.axis = null; - }); - __publicField$35(this, "pointerDown", (pointer) => { - if (this.object === void 0 || this.dragging === true || pointer.button !== 0) return; - if (this.axis !== null) { - this.raycaster.setFromCamera(pointer, this.camera); - const planeIntersect = this.intersectObjectWithRay(this.plane, this.raycaster, true); - if (planeIntersect) { - let space = this.space; - if (this.mode === "scale") space = "local"; - else if (this.axis === "E" || this.axis === "XYZE" || this.axis === "XYZ") space = "world"; - if (space === "local" && this.mode === "rotate") { - const snap = this.rotationSnap; - if (this.axis === "X" && snap) this.object.rotation.x = Math.round(this.object.rotation.x / snap) * snap; - if (this.axis === "Y" && snap) this.object.rotation.y = Math.round(this.object.rotation.y / snap) * snap; - if (this.axis === "Z" && snap) this.object.rotation.z = Math.round(this.object.rotation.z / snap) * snap; - } - this.object.updateMatrixWorld(); - if (this.object.parent) this.object.parent.updateMatrixWorld(); - this.positionStart.copy(this.object.position); - this.quaternionStart.copy(this.object.quaternion); - this.scaleStart.copy(this.object.scale); - this.object.matrixWorld.decompose(this.worldPositionStart, this.worldQuaternionStart, this.worldScaleStart); - this.pointStart.copy(planeIntersect.point).sub(this.worldPositionStart); - } - this.dragging = true; - this.mouseDownEvent.mode = this.mode; - this.dispatchEvent(this.mouseDownEvent); - } - }); - __publicField$35(this, "pointerMove", (pointer) => { - const axis = this.axis; - const mode = this.mode; - const object = this.object; - let space = this.space; - if (mode === "scale") space = "local"; - else if (axis === "E" || axis === "XYZE" || axis === "XYZ") space = "world"; - if (object === void 0 || axis === null || this.dragging === false || pointer.button !== -1) return; - this.raycaster.setFromCamera(pointer, this.camera); - const planeIntersect = this.intersectObjectWithRay(this.plane, this.raycaster, true); - if (!planeIntersect) return; - this.pointEnd.copy(planeIntersect.point).sub(this.worldPositionStart); - if (mode === "translate") { - this.offset.copy(this.pointEnd).sub(this.pointStart); - if (space === "local" && axis !== "XYZ") this.offset.applyQuaternion(this.worldQuaternionInv); - if (axis.indexOf("X") === -1) this.offset.x = 0; - if (axis.indexOf("Y") === -1) this.offset.y = 0; - if (axis.indexOf("Z") === -1) this.offset.z = 0; - if (space === "local" && axis !== "XYZ") this.offset.applyQuaternion(this.quaternionStart).divide(this.parentScale); - else this.offset.applyQuaternion(this.parentQuaternionInv).divide(this.parentScale); - object.position.copy(this.offset).add(this.positionStart); - if (this.translationSnap) { - if (space === "local") { - object.position.applyQuaternion(this.tempQuaternion.copy(this.quaternionStart).invert()); - if (axis.search("X") !== -1) object.position.x = Math.round(object.position.x / this.translationSnap) * this.translationSnap; - if (axis.search("Y") !== -1) object.position.y = Math.round(object.position.y / this.translationSnap) * this.translationSnap; - if (axis.search("Z") !== -1) object.position.z = Math.round(object.position.z / this.translationSnap) * this.translationSnap; - object.position.applyQuaternion(this.quaternionStart); - } - if (space === "world") { - if (object.parent) object.position.add(this.tempVector.setFromMatrixPosition(object.parent.matrixWorld)); - if (axis.search("X") !== -1) object.position.x = Math.round(object.position.x / this.translationSnap) * this.translationSnap; - if (axis.search("Y") !== -1) object.position.y = Math.round(object.position.y / this.translationSnap) * this.translationSnap; - if (axis.search("Z") !== -1) object.position.z = Math.round(object.position.z / this.translationSnap) * this.translationSnap; - if (object.parent) object.position.sub(this.tempVector.setFromMatrixPosition(object.parent.matrixWorld)); - } - } - } else if (mode === "scale") { - if (axis.search("XYZ") !== -1) { - let d = this.pointEnd.length() / this.pointStart.length(); - if (this.pointEnd.dot(this.pointStart) < 0) d *= -1; - this.tempVector2.set(d, d, d); - } else { - this.tempVector.copy(this.pointStart); - this.tempVector2.copy(this.pointEnd); - this.tempVector.applyQuaternion(this.worldQuaternionInv); - this.tempVector2.applyQuaternion(this.worldQuaternionInv); - this.tempVector2.divide(this.tempVector); - if (axis.search("X") === -1) this.tempVector2.x = 1; - if (axis.search("Y") === -1) this.tempVector2.y = 1; - if (axis.search("Z") === -1) this.tempVector2.z = 1; - } - object.scale.copy(this.scaleStart).multiply(this.tempVector2); - if (this.scaleSnap && this.object) { - if (axis.search("X") !== -1) this.object.scale.x = Math.round(object.scale.x / this.scaleSnap) * this.scaleSnap || this.scaleSnap; - if (axis.search("Y") !== -1) object.scale.y = Math.round(object.scale.y / this.scaleSnap) * this.scaleSnap || this.scaleSnap; - if (axis.search("Z") !== -1) object.scale.z = Math.round(object.scale.z / this.scaleSnap) * this.scaleSnap || this.scaleSnap; - } - } else if (mode === "rotate") { - this.offset.copy(this.pointEnd).sub(this.pointStart); - const ROTATION_SPEED = 20 / this.worldPosition.distanceTo(this.tempVector.setFromMatrixPosition(this.camera.matrixWorld)); - if (axis === "E") { - this.rotationAxis.copy(this.eye); - this.rotationAngle = this.pointEnd.angleTo(this.pointStart); - this.startNorm.copy(this.pointStart).normalize(); - this.endNorm.copy(this.pointEnd).normalize(); - this.rotationAngle *= this.endNorm.cross(this.startNorm).dot(this.eye) < 0 ? 1 : -1; - } else if (axis === "XYZE") { - this.rotationAxis.copy(this.offset).cross(this.eye).normalize(); - this.rotationAngle = this.offset.dot(this.tempVector.copy(this.rotationAxis).cross(this.eye)) * ROTATION_SPEED; - } else if (axis === "X" || axis === "Y" || axis === "Z") { - this.rotationAxis.copy(this.unit[axis]); - this.tempVector.copy(this.unit[axis]); - if (space === "local") this.tempVector.applyQuaternion(this.worldQuaternion); - this.rotationAngle = this.offset.dot(this.tempVector.cross(this.eye).normalize()) * ROTATION_SPEED; - } - if (this.rotationSnap) this.rotationAngle = Math.round(this.rotationAngle / this.rotationSnap) * this.rotationSnap; - if (space === "local" && axis !== "E" && axis !== "XYZE") { - object.quaternion.copy(this.quaternionStart); - object.quaternion.multiply(this.tempQuaternion.setFromAxisAngle(this.rotationAxis, this.rotationAngle)).normalize(); - } else { - this.rotationAxis.applyQuaternion(this.parentQuaternionInv); - object.quaternion.copy(this.tempQuaternion.setFromAxisAngle(this.rotationAxis, this.rotationAngle)); - object.quaternion.multiply(this.quaternionStart).normalize(); - } - } - this.dispatchEvent(this.changeEvent); - this.dispatchEvent(this.objectChangeEvent); - }); - __publicField$35(this, "pointerUp", (pointer) => { - if (pointer.button !== 0) return; - if (this.dragging && this.axis !== null) { - this.mouseUpEvent.mode = this.mode; - this.dispatchEvent(this.mouseUpEvent); - } - this.dragging = false; - this.axis = null; - }); - __publicField$35(this, "getPointer", (event) => { - var _a; - if (this.domElement && ((_a = this.domElement.ownerDocument) == null ? void 0 : _a.pointerLockElement)) return { - x: 0, - y: 0, - button: event.button - }; - else { - const pointer = event.changedTouches ? event.changedTouches[0] : event; - const rect = this.domElement.getBoundingClientRect(); - return { - x: (pointer.clientX - rect.left) / rect.width * 2 - 1, - y: -(pointer.clientY - rect.top) / rect.height * 2 + 1, - button: event.button - }; - } - }); - __publicField$35(this, "onPointerHover", (event) => { - if (!this.enabled) return; - switch (event.pointerType) { - case "mouse": - case "pen": - this.pointerHover(this.getPointer(event)); - break; - } - }); - __publicField$35(this, "onPointerDown", (event) => { - if (!this.enabled || !this.domElement) return; - this.domElement.style.touchAction = "none"; - this.domElement.ownerDocument.addEventListener("pointermove", this.onPointerMove); - this.pointerHover(this.getPointer(event)); - this.pointerDown(this.getPointer(event)); - }); - __publicField$35(this, "onPointerMove", (event) => { - if (!this.enabled) return; - this.pointerMove(this.getPointer(event)); - }); - __publicField$35(this, "onPointerUp", (event) => { - if (!this.enabled || !this.domElement) return; - this.domElement.style.touchAction = ""; - this.domElement.ownerDocument.removeEventListener("pointermove", this.onPointerMove); - this.pointerUp(this.getPointer(event)); - }); - __publicField$35(this, "getMode", () => this.mode); - __publicField$35(this, "setMode", (mode) => { - this.mode = mode; - }); - __publicField$35(this, "setTranslationSnap", (translationSnap) => { - this.translationSnap = translationSnap; - }); - __publicField$35(this, "setRotationSnap", (rotationSnap) => { - this.rotationSnap = rotationSnap; - }); - __publicField$35(this, "setScaleSnap", (scaleSnap) => { - this.scaleSnap = scaleSnap; - }); - __publicField$35(this, "setSize", (size) => { - this.size = size; - }); - __publicField$35(this, "setSpace", (space) => { - this.space = space; - }); - __publicField$35(this, "update", () => { - console.warn("THREE.TransformControls: update function has no more functionality and therefore has been deprecated."); - }); - __publicField$35(this, "connect", (domElement) => { - if (domElement === document) console.error("THREE.OrbitControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead."); - this.domElement = domElement; - this.domElement.addEventListener("pointerdown", this.onPointerDown); - this.domElement.addEventListener("pointermove", this.onPointerHover); - this.domElement.ownerDocument.addEventListener("pointerup", this.onPointerUp); - }); - __publicField$35(this, "dispose", () => { - var _a, _b, _c, _d, _e, _f; - (_a = this.domElement) == null || _a.removeEventListener("pointerdown", this.onPointerDown); - (_b = this.domElement) == null || _b.removeEventListener("pointermove", this.onPointerHover); - (_d = (_c = this.domElement) == null ? void 0 : _c.ownerDocument) == null || _d.removeEventListener("pointermove", this.onPointerMove); - (_f = (_e = this.domElement) == null ? void 0 : _e.ownerDocument) == null || _f.removeEventListener("pointerup", this.onPointerUp); - this.traverse((child) => { - const mesh = child; - if (mesh.geometry) mesh.geometry.dispose(); - if (mesh.material) mesh.material.dispose(); - }); - }); - this.domElement = domElement; - this.camera = camera; - this.gizmo = new TransformControlsGizmo(); - this.add(this.gizmo); - this.plane = new TransformControlsPlane(); - this.add(this.plane); - const defineProperty = (propName, defaultValue) => { - let propValue = defaultValue; - Object.defineProperty(this, propName, { - get: function() { - return propValue !== void 0 ? propValue : defaultValue; - }, - set: function(value) { - if (propValue !== value) { - propValue = value; - this.plane[propName] = value; - this.gizmo[propName] = value; - this.dispatchEvent({ - type: propName + "-changed", - value - }); - this.dispatchEvent(this.changeEvent); - } - } - }); - this[propName] = defaultValue; - this.plane[propName] = defaultValue; - this.gizmo[propName] = defaultValue; - }; - defineProperty("camera", this.camera); - defineProperty("object", this.object); - defineProperty("enabled", this.enabled); - defineProperty("axis", this.axis); - defineProperty("mode", this.mode); - defineProperty("translationSnap", this.translationSnap); - defineProperty("rotationSnap", this.rotationSnap); - defineProperty("scaleSnap", this.scaleSnap); - defineProperty("space", this.space); - defineProperty("size", this.size); - defineProperty("dragging", this.dragging); - defineProperty("showX", this.showX); - defineProperty("showY", this.showY); - defineProperty("showZ", this.showZ); - defineProperty("worldPosition", this.worldPosition); - defineProperty("worldPositionStart", this.worldPositionStart); - defineProperty("worldQuaternion", this.worldQuaternion); - defineProperty("worldQuaternionStart", this.worldQuaternionStart); - defineProperty("cameraPosition", this.cameraPosition); - defineProperty("cameraQuaternion", this.cameraQuaternion); - defineProperty("pointStart", this.pointStart); - defineProperty("pointEnd", this.pointEnd); - defineProperty("rotationAxis", this.rotationAxis); - defineProperty("rotationAngle", this.rotationAngle); - defineProperty("eye", this.eye); - if (domElement !== void 0) this.connect(domElement); - } -}; -var TransformControlsGizmo = class extends Object3D { - constructor() { - super(); - __publicField$35(this, "isTransformControlsGizmo", true); - __publicField$35(this, "type", "TransformControlsGizmo"); - __publicField$35(this, "tempVector", new Vector3(0, 0, 0)); - __publicField$35(this, "tempEuler", new Euler()); - __publicField$35(this, "alignVector", new Vector3(0, 1, 0)); - __publicField$35(this, "zeroVector", new Vector3(0, 0, 0)); - __publicField$35(this, "lookAtMatrix", new Matrix4()); - __publicField$35(this, "tempQuaternion", new Quaternion()); - __publicField$35(this, "tempQuaternion2", new Quaternion()); - __publicField$35(this, "identityQuaternion", new Quaternion()); - __publicField$35(this, "unitX", new Vector3(1, 0, 0)); - __publicField$35(this, "unitY", new Vector3(0, 1, 0)); - __publicField$35(this, "unitZ", new Vector3(0, 0, 1)); - __publicField$35(this, "gizmo"); - __publicField$35(this, "picker"); - __publicField$35(this, "helper"); - __publicField$35(this, "rotationAxis", new Vector3()); - __publicField$35(this, "cameraPosition", new Vector3()); - __publicField$35(this, "worldPositionStart", new Vector3()); - __publicField$35(this, "worldQuaternionStart", new Quaternion()); - __publicField$35(this, "worldPosition", new Vector3()); - __publicField$35(this, "worldQuaternion", new Quaternion()); - __publicField$35(this, "eye", new Vector3()); - __publicField$35(this, "camera", null); - __publicField$35(this, "enabled", true); - __publicField$35(this, "axis", null); - __publicField$35(this, "mode", "translate"); - __publicField$35(this, "space", "world"); - __publicField$35(this, "size", 1); - __publicField$35(this, "dragging", false); - __publicField$35(this, "showX", true); - __publicField$35(this, "showY", true); - __publicField$35(this, "showZ", true); - __publicField$35(this, "updateMatrixWorld", () => { - let space = this.space; - if (this.mode === "scale") space = "local"; - const quaternion = space === "local" ? this.worldQuaternion : this.identityQuaternion; - this.gizmo["translate"].visible = this.mode === "translate"; - this.gizmo["rotate"].visible = this.mode === "rotate"; - this.gizmo["scale"].visible = this.mode === "scale"; - this.helper["translate"].visible = this.mode === "translate"; - this.helper["rotate"].visible = this.mode === "rotate"; - this.helper["scale"].visible = this.mode === "scale"; - let handles = []; - handles = handles.concat(this.picker[this.mode].children); - handles = handles.concat(this.gizmo[this.mode].children); - handles = handles.concat(this.helper[this.mode].children); - for (let i = 0; i < handles.length; i++) { - const handle = handles[i]; - handle.visible = true; - handle.rotation.set(0, 0, 0); - handle.position.copy(this.worldPosition); - let factor; - if (this.camera.isOrthographicCamera) factor = (this.camera.top - this.camera.bottom) / this.camera.zoom; - else factor = this.worldPosition.distanceTo(this.cameraPosition) * Math.min(1.9 * Math.tan(Math.PI * this.camera.fov / 360) / this.camera.zoom, 7); - handle.scale.set(1, 1, 1).multiplyScalar(factor * this.size / 7); - if (handle.tag === "helper") { - handle.visible = false; - if (handle.name === "AXIS") { - handle.position.copy(this.worldPositionStart); - handle.visible = !!this.axis; - if (this.axis === "X") { - this.tempQuaternion.setFromEuler(this.tempEuler.set(0, 0, 0)); - handle.quaternion.copy(quaternion).multiply(this.tempQuaternion); - if (Math.abs(this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye)) > .9) handle.visible = false; - } - if (this.axis === "Y") { - this.tempQuaternion.setFromEuler(this.tempEuler.set(0, 0, Math.PI / 2)); - handle.quaternion.copy(quaternion).multiply(this.tempQuaternion); - if (Math.abs(this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye)) > .9) handle.visible = false; - } - if (this.axis === "Z") { - this.tempQuaternion.setFromEuler(this.tempEuler.set(0, Math.PI / 2, 0)); - handle.quaternion.copy(quaternion).multiply(this.tempQuaternion); - if (Math.abs(this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye)) > .9) handle.visible = false; - } - if (this.axis === "XYZE") { - this.tempQuaternion.setFromEuler(this.tempEuler.set(0, Math.PI / 2, 0)); - this.alignVector.copy(this.rotationAxis); - handle.quaternion.setFromRotationMatrix(this.lookAtMatrix.lookAt(this.zeroVector, this.alignVector, this.unitY)); - handle.quaternion.multiply(this.tempQuaternion); - handle.visible = this.dragging; - } - if (this.axis === "E") handle.visible = false; - } else if (handle.name === "START") { - handle.position.copy(this.worldPositionStart); - handle.visible = this.dragging; - } else if (handle.name === "END") { - handle.position.copy(this.worldPosition); - handle.visible = this.dragging; - } else if (handle.name === "DELTA") { - handle.position.copy(this.worldPositionStart); - handle.quaternion.copy(this.worldQuaternionStart); - this.tempVector.set(1e-10, 1e-10, 1e-10).add(this.worldPositionStart).sub(this.worldPosition).multiplyScalar(-1); - this.tempVector.applyQuaternion(this.worldQuaternionStart.clone().invert()); - handle.scale.copy(this.tempVector); - handle.visible = this.dragging; - } else { - handle.quaternion.copy(quaternion); - if (this.dragging) handle.position.copy(this.worldPositionStart); - else handle.position.copy(this.worldPosition); - if (this.axis) handle.visible = this.axis.search(handle.name) !== -1; - } - continue; - } - handle.quaternion.copy(quaternion); - if (this.mode === "translate" || this.mode === "scale") { - const AXIS_HIDE_TRESHOLD = .99; - const PLANE_HIDE_TRESHOLD = .2; - const AXIS_FLIP_TRESHOLD = 0; - if (handle.name === "X" || handle.name === "XYZX") { - if (Math.abs(this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_TRESHOLD) { - handle.scale.set(1e-10, 1e-10, 1e-10); - handle.visible = false; - } - } - if (handle.name === "Y" || handle.name === "XYZY") { - if (Math.abs(this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_TRESHOLD) { - handle.scale.set(1e-10, 1e-10, 1e-10); - handle.visible = false; - } - } - if (handle.name === "Z" || handle.name === "XYZZ") { - if (Math.abs(this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_TRESHOLD) { - handle.scale.set(1e-10, 1e-10, 1e-10); - handle.visible = false; - } - } - if (handle.name === "XY") { - if (Math.abs(this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_TRESHOLD) { - handle.scale.set(1e-10, 1e-10, 1e-10); - handle.visible = false; - } - } - if (handle.name === "YZ") { - if (Math.abs(this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_TRESHOLD) { - handle.scale.set(1e-10, 1e-10, 1e-10); - handle.visible = false; - } - } - if (handle.name === "XZ") { - if (Math.abs(this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_TRESHOLD) { - handle.scale.set(1e-10, 1e-10, 1e-10); - handle.visible = false; - } - } - if (handle.name.search("X") !== -1) { - if (this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye) < AXIS_FLIP_TRESHOLD) if (handle.tag === "fwd") handle.visible = false; - else handle.scale.x *= -1; - else if (handle.tag === "bwd") handle.visible = false; - } - if (handle.name.search("Y") !== -1) { - if (this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye) < AXIS_FLIP_TRESHOLD) if (handle.tag === "fwd") handle.visible = false; - else handle.scale.y *= -1; - else if (handle.tag === "bwd") handle.visible = false; - } - if (handle.name.search("Z") !== -1) { - if (this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye) < AXIS_FLIP_TRESHOLD) if (handle.tag === "fwd") handle.visible = false; - else handle.scale.z *= -1; - else if (handle.tag === "bwd") handle.visible = false; - } - } else if (this.mode === "rotate") { - this.tempQuaternion2.copy(quaternion); - this.alignVector.copy(this.eye).applyQuaternion(this.tempQuaternion.copy(quaternion).invert()); - if (handle.name.search("E") !== -1) handle.quaternion.setFromRotationMatrix(this.lookAtMatrix.lookAt(this.eye, this.zeroVector, this.unitY)); - if (handle.name === "X") { - this.tempQuaternion.setFromAxisAngle(this.unitX, Math.atan2(-this.alignVector.y, this.alignVector.z)); - this.tempQuaternion.multiplyQuaternions(this.tempQuaternion2, this.tempQuaternion); - handle.quaternion.copy(this.tempQuaternion); - } - if (handle.name === "Y") { - this.tempQuaternion.setFromAxisAngle(this.unitY, Math.atan2(this.alignVector.x, this.alignVector.z)); - this.tempQuaternion.multiplyQuaternions(this.tempQuaternion2, this.tempQuaternion); - handle.quaternion.copy(this.tempQuaternion); - } - if (handle.name === "Z") { - this.tempQuaternion.setFromAxisAngle(this.unitZ, Math.atan2(this.alignVector.y, this.alignVector.x)); - this.tempQuaternion.multiplyQuaternions(this.tempQuaternion2, this.tempQuaternion); - handle.quaternion.copy(this.tempQuaternion); - } - } - handle.visible = handle.visible && (handle.name.indexOf("X") === -1 || this.showX); - handle.visible = handle.visible && (handle.name.indexOf("Y") === -1 || this.showY); - handle.visible = handle.visible && (handle.name.indexOf("Z") === -1 || this.showZ); - handle.visible = handle.visible && (handle.name.indexOf("E") === -1 || this.showX && this.showY && this.showZ); - handle.material.tempOpacity = handle.material.tempOpacity || handle.material.opacity; - handle.material.tempColor = handle.material.tempColor || handle.material.color.clone(); - handle.material.color.copy(handle.material.tempColor); - handle.material.opacity = handle.material.tempOpacity; - if (!this.enabled) { - handle.material.opacity *= .5; - handle.material.color.lerp(new Color(1, 1, 1), .5); - } else if (this.axis) if (handle.name === this.axis) { - handle.material.opacity = 1; - handle.material.color.lerp(new Color(1, 1, 1), .5); - } else if (this.axis.split("").some(function(a) { - return handle.name === a; - })) { - handle.material.opacity = 1; - handle.material.color.lerp(new Color(1, 1, 1), .5); - } else { - handle.material.opacity *= .25; - handle.material.color.lerp(new Color(1, 1, 1), .5); - } - } - super.updateMatrixWorld(); - }); - const gizmoMaterial = new MeshBasicMaterial({ - depthTest: false, - depthWrite: false, - transparent: true, - side: 2, - fog: false, - toneMapped: false - }); - const gizmoLineMaterial = new LineBasicMaterial({ - depthTest: false, - depthWrite: false, - transparent: true, - linewidth: 1, - fog: false, - toneMapped: false - }); - const matInvisible = gizmoMaterial.clone(); - matInvisible.opacity = .15; - const matHelper = gizmoMaterial.clone(); - matHelper.opacity = .33; - const matRed = gizmoMaterial.clone(); - matRed.color.set(16711680); - const matGreen = gizmoMaterial.clone(); - matGreen.color.set(65280); - const matBlue = gizmoMaterial.clone(); - matBlue.color.set(255); - const matWhiteTransparent = gizmoMaterial.clone(); - matWhiteTransparent.opacity = .25; - const matYellowTransparent = matWhiteTransparent.clone(); - matYellowTransparent.color.set(16776960); - const matCyanTransparent = matWhiteTransparent.clone(); - matCyanTransparent.color.set(65535); - const matMagentaTransparent = matWhiteTransparent.clone(); - matMagentaTransparent.color.set(16711935); - gizmoMaterial.clone().color.set(16776960); - const matLineRed = gizmoLineMaterial.clone(); - matLineRed.color.set(16711680); - const matLineGreen = gizmoLineMaterial.clone(); - matLineGreen.color.set(65280); - const matLineBlue = gizmoLineMaterial.clone(); - matLineBlue.color.set(255); - const matLineCyan = gizmoLineMaterial.clone(); - matLineCyan.color.set(65535); - const matLineMagenta = gizmoLineMaterial.clone(); - matLineMagenta.color.set(16711935); - const matLineYellow = gizmoLineMaterial.clone(); - matLineYellow.color.set(16776960); - const matLineGray = gizmoLineMaterial.clone(); - matLineGray.color.set(7895160); - const matLineYellowTransparent = matLineYellow.clone(); - matLineYellowTransparent.opacity = .25; - const arrowGeometry = new CylinderGeometry(0, .05, .2, 12, 1, false); - const scaleHandleGeometry = new BoxGeometry(.125, .125, .125); - const lineGeometry = new BufferGeometry(); - lineGeometry.setAttribute("position", new Float32BufferAttribute([ - 0, - 0, - 0, - 1, - 0, - 0 - ], 3)); - const CircleGeometry = (radius, arc) => { - const geometry = new BufferGeometry(); - const vertices = []; - for (let i = 0; i <= 64 * arc; ++i) vertices.push(0, Math.cos(i / 32 * Math.PI) * radius, Math.sin(i / 32 * Math.PI) * radius); - geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - return geometry; - }; - const TranslateHelperGeometry = () => { - const geometry = new BufferGeometry(); - geometry.setAttribute("position", new Float32BufferAttribute([ - 0, - 0, - 0, - 1, - 1, - 1 - ], 3)); - return geometry; - }; - const gizmoTranslate = { - X: [ - [ - new Mesh(arrowGeometry, matRed), - [ - 1, - 0, - 0 - ], - [ - 0, - 0, - -Math.PI / 2 - ], - null, - "fwd" - ], - [ - new Mesh(arrowGeometry, matRed), - [ - 1, - 0, - 0 - ], - [ - 0, - 0, - Math.PI / 2 - ], - null, - "bwd" - ], - [new Line(lineGeometry, matLineRed)] - ], - Y: [ - [ - new Mesh(arrowGeometry, matGreen), - [ - 0, - 1, - 0 - ], - null, - null, - "fwd" - ], - [ - new Mesh(arrowGeometry, matGreen), - [ - 0, - 1, - 0 - ], - [ - Math.PI, - 0, - 0 - ], - null, - "bwd" - ], - [ - new Line(lineGeometry, matLineGreen), - null, - [ - 0, - 0, - Math.PI / 2 - ] - ] - ], - Z: [ - [ - new Mesh(arrowGeometry, matBlue), - [ - 0, - 0, - 1 - ], - [ - Math.PI / 2, - 0, - 0 - ], - null, - "fwd" - ], - [ - new Mesh(arrowGeometry, matBlue), - [ - 0, - 0, - 1 - ], - [ - -Math.PI / 2, - 0, - 0 - ], - null, - "bwd" - ], - [ - new Line(lineGeometry, matLineBlue), - null, - [ - 0, - -Math.PI / 2, - 0 - ] - ] - ], - XYZ: [[ - new Mesh(new OctahedronGeometry(.1, 0), matWhiteTransparent.clone()), - [ - 0, - 0, - 0 - ], - [ - 0, - 0, - 0 - ] - ]], - XY: [ - [new Mesh(new PlaneGeometry(.295, .295), matYellowTransparent.clone()), [ - .15, - .15, - 0 - ]], - [ - new Line(lineGeometry, matLineYellow), - [ - .18, - .3, - 0 - ], - null, - [ - .125, - 1, - 1 - ] - ], - [ - new Line(lineGeometry, matLineYellow), - [ - .3, - .18, - 0 - ], - [ - 0, - 0, - Math.PI / 2 - ], - [ - .125, - 1, - 1 - ] - ] - ], - YZ: [ - [ - new Mesh(new PlaneGeometry(.295, .295), matCyanTransparent.clone()), - [ - 0, - .15, - .15 - ], - [ - 0, - Math.PI / 2, - 0 - ] - ], - [ - new Line(lineGeometry, matLineCyan), - [ - 0, - .18, - .3 - ], - [ - 0, - 0, - Math.PI / 2 - ], - [ - .125, - 1, - 1 - ] - ], - [ - new Line(lineGeometry, matLineCyan), - [ - 0, - .3, - .18 - ], - [ - 0, - -Math.PI / 2, - 0 - ], - [ - .125, - 1, - 1 - ] - ] - ], - XZ: [ - [ - new Mesh(new PlaneGeometry(.295, .295), matMagentaTransparent.clone()), - [ - .15, - 0, - .15 - ], - [ - -Math.PI / 2, - 0, - 0 - ] - ], - [ - new Line(lineGeometry, matLineMagenta), - [ - .18, - 0, - .3 - ], - null, - [ - .125, - 1, - 1 - ] - ], - [ - new Line(lineGeometry, matLineMagenta), - [ - .3, - 0, - .18 - ], - [ - 0, - -Math.PI / 2, - 0 - ], - [ - .125, - 1, - 1 - ] - ] - ] - }; - const pickerTranslate = { - X: [[ - new Mesh(new CylinderGeometry(.2, 0, 1, 4, 1, false), matInvisible), - [ - .6, - 0, - 0 - ], - [ - 0, - 0, - -Math.PI / 2 - ] - ]], - Y: [[new Mesh(new CylinderGeometry(.2, 0, 1, 4, 1, false), matInvisible), [ - 0, - .6, - 0 - ]]], - Z: [[ - new Mesh(new CylinderGeometry(.2, 0, 1, 4, 1, false), matInvisible), - [ - 0, - 0, - .6 - ], - [ - Math.PI / 2, - 0, - 0 - ] - ]], - XYZ: [[new Mesh(new OctahedronGeometry(.2, 0), matInvisible)]], - XY: [[new Mesh(new PlaneGeometry(.4, .4), matInvisible), [ - .2, - .2, - 0 - ]]], - YZ: [[ - new Mesh(new PlaneGeometry(.4, .4), matInvisible), - [ - 0, - .2, - .2 - ], - [ - 0, - Math.PI / 2, - 0 - ] - ]], - XZ: [[ - new Mesh(new PlaneGeometry(.4, .4), matInvisible), - [ - .2, - 0, - .2 - ], - [ - -Math.PI / 2, - 0, - 0 - ] - ]] - }; - const helperTranslate = { - START: [[ - new Mesh(new OctahedronGeometry(.01, 2), matHelper), - null, - null, - null, - "helper" - ]], - END: [[ - new Mesh(new OctahedronGeometry(.01, 2), matHelper), - null, - null, - null, - "helper" - ]], - DELTA: [[ - new Line(TranslateHelperGeometry(), matHelper), - null, - null, - null, - "helper" - ]], - X: [[ - new Line(lineGeometry, matHelper.clone()), - [ - -1e3, - 0, - 0 - ], - null, - [ - 1e6, - 1, - 1 - ], - "helper" - ]], - Y: [[ - new Line(lineGeometry, matHelper.clone()), - [ - 0, - -1e3, - 0 - ], - [ - 0, - 0, - Math.PI / 2 - ], - [ - 1e6, - 1, - 1 - ], - "helper" - ]], - Z: [[ - new Line(lineGeometry, matHelper.clone()), - [ - 0, - 0, - -1e3 - ], - [ - 0, - -Math.PI / 2, - 0 - ], - [ - 1e6, - 1, - 1 - ], - "helper" - ]] - }; - const gizmoRotate = { - X: [[new Line(CircleGeometry(1, .5), matLineRed)], [ - new Mesh(new OctahedronGeometry(.04, 0), matRed), - [ - 0, - 0, - .99 - ], - null, - [ - 1, - 3, - 1 - ] - ]], - Y: [[ - new Line(CircleGeometry(1, .5), matLineGreen), - null, - [ - 0, - 0, - -Math.PI / 2 - ] - ], [ - new Mesh(new OctahedronGeometry(.04, 0), matGreen), - [ - 0, - 0, - .99 - ], - null, - [ - 3, - 1, - 1 - ] - ]], - Z: [[ - new Line(CircleGeometry(1, .5), matLineBlue), - null, - [ - 0, - Math.PI / 2, - 0 - ] - ], [ - new Mesh(new OctahedronGeometry(.04, 0), matBlue), - [ - .99, - 0, - 0 - ], - null, - [ - 1, - 3, - 1 - ] - ]], - E: [ - [ - new Line(CircleGeometry(1.25, 1), matLineYellowTransparent), - null, - [ - 0, - Math.PI / 2, - 0 - ] - ], - [ - new Mesh(new CylinderGeometry(.03, 0, .15, 4, 1, false), matLineYellowTransparent), - [ - 1.17, - 0, - 0 - ], - [ - 0, - 0, - -Math.PI / 2 - ], - [ - 1, - 1, - .001 - ] - ], - [ - new Mesh(new CylinderGeometry(.03, 0, .15, 4, 1, false), matLineYellowTransparent), - [ - -1.17, - 0, - 0 - ], - [ - 0, - 0, - Math.PI / 2 - ], - [ - 1, - 1, - .001 - ] - ], - [ - new Mesh(new CylinderGeometry(.03, 0, .15, 4, 1, false), matLineYellowTransparent), - [ - 0, - -1.17, - 0 - ], - [ - Math.PI, - 0, - 0 - ], - [ - 1, - 1, - .001 - ] - ], - [ - new Mesh(new CylinderGeometry(.03, 0, .15, 4, 1, false), matLineYellowTransparent), - [ - 0, - 1.17, - 0 - ], - [ - 0, - 0, - 0 - ], - [ - 1, - 1, - .001 - ] - ] - ], - XYZE: [[ - new Line(CircleGeometry(1, 1), matLineGray), - null, - [ - 0, - Math.PI / 2, - 0 - ] - ]] - }; - const helperRotate = { AXIS: [[ - new Line(lineGeometry, matHelper.clone()), - [ - -1e3, - 0, - 0 - ], - null, - [ - 1e6, - 1, - 1 - ], - "helper" - ]] }; - const pickerRotate = { - X: [[ - new Mesh(new TorusGeometry(1, .1, 4, 24), matInvisible), - [ - 0, - 0, - 0 - ], - [ - 0, - -Math.PI / 2, - -Math.PI / 2 - ] - ]], - Y: [[ - new Mesh(new TorusGeometry(1, .1, 4, 24), matInvisible), - [ - 0, - 0, - 0 - ], - [ - Math.PI / 2, - 0, - 0 - ] - ]], - Z: [[ - new Mesh(new TorusGeometry(1, .1, 4, 24), matInvisible), - [ - 0, - 0, - 0 - ], - [ - 0, - 0, - -Math.PI / 2 - ] - ]], - E: [[new Mesh(new TorusGeometry(1.25, .1, 2, 24), matInvisible)]], - XYZE: [[new Mesh(new SphereGeometry(.7, 10, 8), matInvisible)]] - }; - const gizmoScale = { - X: [[ - new Mesh(scaleHandleGeometry, matRed), - [ - .8, - 0, - 0 - ], - [ - 0, - 0, - -Math.PI / 2 - ] - ], [ - new Line(lineGeometry, matLineRed), - null, - null, - [ - .8, - 1, - 1 - ] - ]], - Y: [[new Mesh(scaleHandleGeometry, matGreen), [ - 0, - .8, - 0 - ]], [ - new Line(lineGeometry, matLineGreen), - null, - [ - 0, - 0, - Math.PI / 2 - ], - [ - .8, - 1, - 1 - ] - ]], - Z: [[ - new Mesh(scaleHandleGeometry, matBlue), - [ - 0, - 0, - .8 - ], - [ - Math.PI / 2, - 0, - 0 - ] - ], [ - new Line(lineGeometry, matLineBlue), - null, - [ - 0, - -Math.PI / 2, - 0 - ], - [ - .8, - 1, - 1 - ] - ]], - XY: [ - [ - new Mesh(scaleHandleGeometry, matYellowTransparent), - [ - .85, - .85, - 0 - ], - null, - [ - 2, - 2, - .2 - ] - ], - [ - new Line(lineGeometry, matLineYellow), - [ - .855, - .98, - 0 - ], - null, - [ - .125, - 1, - 1 - ] - ], - [ - new Line(lineGeometry, matLineYellow), - [ - .98, - .855, - 0 - ], - [ - 0, - 0, - Math.PI / 2 - ], - [ - .125, - 1, - 1 - ] - ] - ], - YZ: [ - [ - new Mesh(scaleHandleGeometry, matCyanTransparent), - [ - 0, - .85, - .85 - ], - null, - [ - .2, - 2, - 2 - ] - ], - [ - new Line(lineGeometry, matLineCyan), - [ - 0, - .855, - .98 - ], - [ - 0, - 0, - Math.PI / 2 - ], - [ - .125, - 1, - 1 - ] - ], - [ - new Line(lineGeometry, matLineCyan), - [ - 0, - .98, - .855 - ], - [ - 0, - -Math.PI / 2, - 0 - ], - [ - .125, - 1, - 1 - ] - ] - ], - XZ: [ - [ - new Mesh(scaleHandleGeometry, matMagentaTransparent), - [ - .85, - 0, - .85 - ], - null, - [ - 2, - .2, - 2 - ] - ], - [ - new Line(lineGeometry, matLineMagenta), - [ - .855, - 0, - .98 - ], - null, - [ - .125, - 1, - 1 - ] - ], - [ - new Line(lineGeometry, matLineMagenta), - [ - .98, - 0, - .855 - ], - [ - 0, - -Math.PI / 2, - 0 - ], - [ - .125, - 1, - 1 - ] - ] - ], - XYZX: [[new Mesh(new BoxGeometry(.125, .125, .125), matWhiteTransparent.clone()), [ - 1.1, - 0, - 0 - ]]], - XYZY: [[new Mesh(new BoxGeometry(.125, .125, .125), matWhiteTransparent.clone()), [ - 0, - 1.1, - 0 - ]]], - XYZZ: [[new Mesh(new BoxGeometry(.125, .125, .125), matWhiteTransparent.clone()), [ - 0, - 0, - 1.1 - ]]] - }; - const pickerScale = { - X: [[ - new Mesh(new CylinderGeometry(.2, 0, .8, 4, 1, false), matInvisible), - [ - .5, - 0, - 0 - ], - [ - 0, - 0, - -Math.PI / 2 - ] - ]], - Y: [[new Mesh(new CylinderGeometry(.2, 0, .8, 4, 1, false), matInvisible), [ - 0, - .5, - 0 - ]]], - Z: [[ - new Mesh(new CylinderGeometry(.2, 0, .8, 4, 1, false), matInvisible), - [ - 0, - 0, - .5 - ], - [ - Math.PI / 2, - 0, - 0 - ] - ]], - XY: [[ - new Mesh(scaleHandleGeometry, matInvisible), - [ - .85, - .85, - 0 - ], - null, - [ - 3, - 3, - .2 - ] - ]], - YZ: [[ - new Mesh(scaleHandleGeometry, matInvisible), - [ - 0, - .85, - .85 - ], - null, - [ - .2, - 3, - 3 - ] - ]], - XZ: [[ - new Mesh(scaleHandleGeometry, matInvisible), - [ - .85, - 0, - .85 - ], - null, - [ - 3, - .2, - 3 - ] - ]], - XYZX: [[new Mesh(new BoxGeometry(.2, .2, .2), matInvisible), [ - 1.1, - 0, - 0 - ]]], - XYZY: [[new Mesh(new BoxGeometry(.2, .2, .2), matInvisible), [ - 0, - 1.1, - 0 - ]]], - XYZZ: [[new Mesh(new BoxGeometry(.2, .2, .2), matInvisible), [ - 0, - 0, - 1.1 - ]]] - }; - const helperScale = { - X: [[ - new Line(lineGeometry, matHelper.clone()), - [ - -1e3, - 0, - 0 - ], - null, - [ - 1e6, - 1, - 1 - ], - "helper" - ]], - Y: [[ - new Line(lineGeometry, matHelper.clone()), - [ - 0, - -1e3, - 0 - ], - [ - 0, - 0, - Math.PI / 2 - ], - [ - 1e6, - 1, - 1 - ], - "helper" - ]], - Z: [[ - new Line(lineGeometry, matHelper.clone()), - [ - 0, - 0, - -1e3 - ], - [ - 0, - -Math.PI / 2, - 0 - ], - [ - 1e6, - 1, - 1 - ], - "helper" - ]] - }; - const setupGizmo = (gizmoMap) => { - const gizmo = new Object3D(); - for (let name in gizmoMap) for (let i = gizmoMap[name].length; i--;) { - const object = gizmoMap[name][i][0].clone(); - const position = gizmoMap[name][i][1]; - const rotation = gizmoMap[name][i][2]; - const scale = gizmoMap[name][i][3]; - const tag = gizmoMap[name][i][4]; - object.name = name; - object.tag = tag; - if (position) object.position.set(position[0], position[1], position[2]); - if (rotation) object.rotation.set(rotation[0], rotation[1], rotation[2]); - if (scale) object.scale.set(scale[0], scale[1], scale[2]); - object.updateMatrix(); - const tempGeometry = object.geometry.clone(); - tempGeometry.applyMatrix4(object.matrix); - object.geometry = tempGeometry; - object.renderOrder = Infinity; - object.position.set(0, 0, 0); - object.rotation.set(0, 0, 0); - object.scale.set(1, 1, 1); - gizmo.add(object); - } - return gizmo; - }; - this.gizmo = {}; - this.picker = {}; - this.helper = {}; - this.add(this.gizmo["translate"] = setupGizmo(gizmoTranslate)); - this.add(this.gizmo["rotate"] = setupGizmo(gizmoRotate)); - this.add(this.gizmo["scale"] = setupGizmo(gizmoScale)); - this.add(this.picker["translate"] = setupGizmo(pickerTranslate)); - this.add(this.picker["rotate"] = setupGizmo(pickerRotate)); - this.add(this.picker["scale"] = setupGizmo(pickerScale)); - this.add(this.helper["translate"] = setupGizmo(helperTranslate)); - this.add(this.helper["rotate"] = setupGizmo(helperRotate)); - this.add(this.helper["scale"] = setupGizmo(helperScale)); - this.picker["translate"].visible = false; - this.picker["rotate"].visible = false; - this.picker["scale"].visible = false; - } -}; -var TransformControlsPlane = class extends Mesh { - constructor() { - super(new PlaneGeometry(1e5, 1e5, 2, 2), new MeshBasicMaterial({ - visible: false, - wireframe: true, - side: 2, - transparent: true, - opacity: .1, - toneMapped: false - })); - __publicField$35(this, "isTransformControlsPlane", true); - __publicField$35(this, "type", "TransformControlsPlane"); - __publicField$35(this, "unitX", new Vector3(1, 0, 0)); - __publicField$35(this, "unitY", new Vector3(0, 1, 0)); - __publicField$35(this, "unitZ", new Vector3(0, 0, 1)); - __publicField$35(this, "tempVector", new Vector3()); - __publicField$35(this, "dirVector", new Vector3()); - __publicField$35(this, "alignVector", new Vector3()); - __publicField$35(this, "tempMatrix", new Matrix4()); - __publicField$35(this, "identityQuaternion", new Quaternion()); - __publicField$35(this, "cameraQuaternion", new Quaternion()); - __publicField$35(this, "worldPosition", new Vector3()); - __publicField$35(this, "worldQuaternion", new Quaternion()); - __publicField$35(this, "eye", new Vector3()); - __publicField$35(this, "axis", null); - __publicField$35(this, "mode", "translate"); - __publicField$35(this, "space", "world"); - __publicField$35(this, "updateMatrixWorld", () => { - let space = this.space; - this.position.copy(this.worldPosition); - if (this.mode === "scale") space = "local"; - this.unitX.set(1, 0, 0).applyQuaternion(space === "local" ? this.worldQuaternion : this.identityQuaternion); - this.unitY.set(0, 1, 0).applyQuaternion(space === "local" ? this.worldQuaternion : this.identityQuaternion); - this.unitZ.set(0, 0, 1).applyQuaternion(space === "local" ? this.worldQuaternion : this.identityQuaternion); - this.alignVector.copy(this.unitY); - switch (this.mode) { - case "translate": - case "scale": - switch (this.axis) { - case "X": - this.alignVector.copy(this.eye).cross(this.unitX); - this.dirVector.copy(this.unitX).cross(this.alignVector); - break; - case "Y": - this.alignVector.copy(this.eye).cross(this.unitY); - this.dirVector.copy(this.unitY).cross(this.alignVector); - break; - case "Z": - this.alignVector.copy(this.eye).cross(this.unitZ); - this.dirVector.copy(this.unitZ).cross(this.alignVector); - break; - case "XY": - this.dirVector.copy(this.unitZ); - break; - case "YZ": - this.dirVector.copy(this.unitX); - break; - case "XZ": - this.alignVector.copy(this.unitZ); - this.dirVector.copy(this.unitY); - break; - case "XYZ": - case "E": - this.dirVector.set(0, 0, 0); - break; - } - break; - default: this.dirVector.set(0, 0, 0); - } - if (this.dirVector.length() === 0) this.quaternion.copy(this.cameraQuaternion); - else { - this.tempMatrix.lookAt(this.tempVector.set(0, 0, 0), this.dirVector, this.alignVector); - this.quaternion.setFromRotationMatrix(this.tempMatrix); - } - super.updateMatrixWorld(); - }); - } -}; -//#endregion -//#region node_modules/three-stdlib/controls/DragControls.js -var __defProp$34 = Object.defineProperty; -var __defNormalProp$34 = (obj, key, value) => key in obj ? __defProp$34(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$34 = (obj, key, value) => { - __defNormalProp$34(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var DragControls = class extends EventDispatcher { - constructor(_objects, _camera, _domElement) { - super(); - __publicField$34(this, "enabled", true); - __publicField$34(this, "transformGroup", false); - __publicField$34(this, "_objects"); - __publicField$34(this, "_camera"); - __publicField$34(this, "_domElement"); - __publicField$34(this, "_plane", new Plane()); - __publicField$34(this, "_raycaster", new Raycaster()); - __publicField$34(this, "_mouse", new Vector2()); - __publicField$34(this, "_offset", new Vector3()); - __publicField$34(this, "_intersection", new Vector3()); - __publicField$34(this, "_worldPosition", new Vector3()); - __publicField$34(this, "_inverseMatrix", new Matrix4()); - __publicField$34(this, "_intersections", []); - __publicField$34(this, "_selected", null); - __publicField$34(this, "_hovered", null); - __publicField$34(this, "activate", () => { - this._domElement.addEventListener("pointermove", this.onPointerMove); - this._domElement.addEventListener("pointerdown", this.onPointerDown); - this._domElement.addEventListener("pointerup", this.onPointerCancel); - this._domElement.addEventListener("pointerleave", this.onPointerCancel); - this._domElement.addEventListener("touchmove", this.onTouchMove); - this._domElement.addEventListener("touchstart", this.onTouchStart); - this._domElement.addEventListener("touchend", this.onTouchEnd); - }); - __publicField$34(this, "deactivate", () => { - this._domElement.removeEventListener("pointermove", this.onPointerMove); - this._domElement.removeEventListener("pointerdown", this.onPointerDown); - this._domElement.removeEventListener("pointerup", this.onPointerCancel); - this._domElement.removeEventListener("pointerleave", this.onPointerCancel); - this._domElement.removeEventListener("touchmove", this.onTouchMove); - this._domElement.removeEventListener("touchstart", this.onTouchStart); - this._domElement.removeEventListener("touchend", this.onTouchEnd); - this._domElement.style.cursor = ""; - }); - __publicField$34(this, "dispose", () => this.deactivate()); - __publicField$34(this, "getObjects", () => this._objects); - __publicField$34(this, "getRaycaster", () => this._raycaster); - __publicField$34(this, "onMouseMove", (event) => { - const rect = this._domElement.getBoundingClientRect(); - this._mouse.x = (event.clientX - rect.left) / rect.width * 2 - 1; - this._mouse.y = -((event.clientY - rect.top) / rect.height) * 2 + 1; - this._raycaster.setFromCamera(this._mouse, this._camera); - if (this._selected && this.enabled) { - if (this._raycaster.ray.intersectPlane(this._plane, this._intersection)) this._selected.position.copy(this._intersection.sub(this._offset).applyMatrix4(this._inverseMatrix)); - this.dispatchEvent({ - type: "drag", - object: this._selected - }); - return; - } - this._intersections.length = 0; - this._raycaster.setFromCamera(this._mouse, this._camera); - this._raycaster.intersectObjects(this._objects, true, this._intersections); - if (this._intersections.length > 0) { - const object = this._intersections[0].object; - this._plane.setFromNormalAndCoplanarPoint(this._camera.getWorldDirection(this._plane.normal), this._worldPosition.setFromMatrixPosition(object.matrixWorld)); - if (this._hovered !== object) { - this.dispatchEvent({ - type: "hoveron", - object - }); - this._domElement.style.cursor = "pointer"; - this._hovered = object; - } - } else if (this._hovered !== null) { - this.dispatchEvent({ - type: "hoveroff", - object: this._hovered - }); - this._domElement.style.cursor = "auto"; - this._hovered = null; - } - }); - __publicField$34(this, "onMouseDown", () => { - this._intersections.length = 0; - this._raycaster.setFromCamera(this._mouse, this._camera); - this._raycaster.intersectObjects(this._objects, true, this._intersections); - if (this._intersections.length > 0) { - this._selected = this.transformGroup === true ? this._objects[0] : this._intersections[0].object; - if (this._raycaster.ray.intersectPlane(this._plane, this._intersection) && this._selected.parent) { - this._inverseMatrix.copy(this._selected.parent.matrixWorld).invert(); - this._offset.copy(this._intersection).sub(this._worldPosition.setFromMatrixPosition(this._selected.matrixWorld)); - } - this._domElement.style.cursor = "move"; - this.dispatchEvent({ - type: "dragstart", - object: this._selected - }); - } - }); - __publicField$34(this, "onMouseCancel", () => { - if (this._selected) { - this.dispatchEvent({ - type: "dragend", - object: this._selected - }); - this._selected = null; - } - this._domElement.style.cursor = this._hovered ? "pointer" : "auto"; - }); - __publicField$34(this, "onPointerMove", (event) => { - switch (event.pointerType) { - case "mouse": - case "pen": - this.onMouseMove(event); - break; - } - }); - __publicField$34(this, "onPointerDown", (event) => { - switch (event.pointerType) { - case "mouse": - case "pen": - this.onMouseDown(); - break; - } - }); - __publicField$34(this, "onPointerCancel", (event) => { - switch (event.pointerType) { - case "mouse": - case "pen": - this.onMouseCancel(); - break; - } - }); - __publicField$34(this, "onTouchMove", (event) => { - event.preventDefault(); - const newEvent = event.changedTouches[0]; - const rect = this._domElement.getBoundingClientRect(); - this._mouse.x = (newEvent.clientX - rect.left) / rect.width * 2 - 1; - this._mouse.y = -((newEvent.clientY - rect.top) / rect.height) * 2 + 1; - this._raycaster.setFromCamera(this._mouse, this._camera); - if (this._selected && this.enabled) { - if (this._raycaster.ray.intersectPlane(this._plane, this._intersection)) this._selected.position.copy(this._intersection.sub(this._offset).applyMatrix4(this._inverseMatrix)); - this.dispatchEvent({ - type: "drag", - object: this._selected - }); - return; - } - }); - __publicField$34(this, "onTouchStart", (event) => { - event.preventDefault(); - const newEvent = event.changedTouches[0]; - const rect = this._domElement.getBoundingClientRect(); - this._mouse.x = (newEvent.clientX - rect.left) / rect.width * 2 - 1; - this._mouse.y = -((newEvent.clientY - rect.top) / rect.height) * 2 + 1; - this._intersections.length = 0; - this._raycaster.setFromCamera(this._mouse, this._camera); - this._raycaster.intersectObjects(this._objects, true, this._intersections); - if (this._intersections.length > 0) { - this._selected = this.transformGroup === true ? this._objects[0] : this._intersections[0].object; - this._plane.setFromNormalAndCoplanarPoint(this._camera.getWorldDirection(this._plane.normal), this._worldPosition.setFromMatrixPosition(this._selected.matrixWorld)); - if (this._raycaster.ray.intersectPlane(this._plane, this._intersection) && this._selected.parent) { - this._inverseMatrix.copy(this._selected.parent.matrixWorld).invert(); - this._offset.copy(this._intersection).sub(this._worldPosition.setFromMatrixPosition(this._selected.matrixWorld)); - } - this._domElement.style.cursor = "move"; - this.dispatchEvent({ - type: "dragstart", - object: this._selected - }); - } - }); - __publicField$34(this, "onTouchEnd", (event) => { - event.preventDefault(); - if (this._selected) { - this.dispatchEvent({ - type: "dragend", - object: this._selected - }); - this._selected = null; - } - this._domElement.style.cursor = "auto"; - }); - this._objects = _objects; - this._camera = _camera; - this._domElement = _domElement; - this.activate(); - } -}; -//#endregion -//#region node_modules/three-stdlib/controls/PointerLockControls.js -var __defProp$33 = Object.defineProperty; -var __defNormalProp$33 = (obj, key, value) => key in obj ? __defProp$33(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$33 = (obj, key, value) => { - __defNormalProp$33(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var _euler = /* @__PURE__ */ new Euler(0, 0, 0, "YXZ"); -var _vector$2 = /* @__PURE__ */ new Vector3(); -var _changeEvent$1 = { type: "change" }; -var _lockEvent = { type: "lock" }; -var _unlockEvent = { type: "unlock" }; -var _MOUSE_SENSITIVITY = .002; -var _PI_2 = Math.PI / 2; -var PointerLockControls = class extends EventDispatcher { - constructor(camera, domElement) { - super(); - __publicField$33(this, "camera"); - __publicField$33(this, "domElement"); - __publicField$33(this, "isLocked"); - __publicField$33(this, "minPolarAngle"); - __publicField$33(this, "maxPolarAngle"); - __publicField$33(this, "pointerSpeed"); - __publicField$33(this, "onMouseMove", (event) => { - if (!this.domElement || this.isLocked === false) return; - _euler.setFromQuaternion(this.camera.quaternion); - _euler.y -= event.movementX * _MOUSE_SENSITIVITY * this.pointerSpeed; - _euler.x -= event.movementY * _MOUSE_SENSITIVITY * this.pointerSpeed; - _euler.x = Math.max(_PI_2 - this.maxPolarAngle, Math.min(_PI_2 - this.minPolarAngle, _euler.x)); - this.camera.quaternion.setFromEuler(_euler); - this.dispatchEvent(_changeEvent$1); - }); - __publicField$33(this, "onPointerlockChange", () => { - if (!this.domElement) return; - if (this.domElement.ownerDocument.pointerLockElement === this.domElement) { - this.dispatchEvent(_lockEvent); - this.isLocked = true; - } else { - this.dispatchEvent(_unlockEvent); - this.isLocked = false; - } - }); - __publicField$33(this, "onPointerlockError", () => { - console.error("THREE.PointerLockControls: Unable to use Pointer Lock API"); - }); - __publicField$33(this, "connect", (domElement) => { - this.domElement = domElement || this.domElement; - if (!this.domElement) return; - this.domElement.ownerDocument.addEventListener("mousemove", this.onMouseMove); - this.domElement.ownerDocument.addEventListener("pointerlockchange", this.onPointerlockChange); - this.domElement.ownerDocument.addEventListener("pointerlockerror", this.onPointerlockError); - }); - __publicField$33(this, "disconnect", () => { - if (!this.domElement) return; - this.domElement.ownerDocument.removeEventListener("mousemove", this.onMouseMove); - this.domElement.ownerDocument.removeEventListener("pointerlockchange", this.onPointerlockChange); - this.domElement.ownerDocument.removeEventListener("pointerlockerror", this.onPointerlockError); - }); - __publicField$33(this, "dispose", () => { - this.disconnect(); - }); - __publicField$33(this, "getObject", () => { - return this.camera; - }); - __publicField$33(this, "direction", new Vector3(0, 0, -1)); - __publicField$33(this, "getDirection", (v) => { - return v.copy(this.direction).applyQuaternion(this.camera.quaternion); - }); - __publicField$33(this, "moveForward", (distance) => { - _vector$2.setFromMatrixColumn(this.camera.matrix, 0); - _vector$2.crossVectors(this.camera.up, _vector$2); - this.camera.position.addScaledVector(_vector$2, distance); - }); - __publicField$33(this, "moveRight", (distance) => { - _vector$2.setFromMatrixColumn(this.camera.matrix, 0); - this.camera.position.addScaledVector(_vector$2, distance); - }); - __publicField$33(this, "lock", () => { - if (this.domElement) this.domElement.requestPointerLock(); - }); - __publicField$33(this, "unlock", () => { - if (this.domElement) this.domElement.ownerDocument.exitPointerLock(); - }); - this.camera = camera; - this.domElement = domElement; - this.isLocked = false; - this.minPolarAngle = 0; - this.maxPolarAngle = Math.PI; - this.pointerSpeed = 1; - if (domElement) this.connect(domElement); - } -}; -//#endregion -//#region node_modules/three-stdlib/controls/DeviceOrientationControls.js -var __defProp$32 = Object.defineProperty; -var __defNormalProp$32 = (obj, key, value) => key in obj ? __defProp$32(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$32 = (obj, key, value) => { - __defNormalProp$32(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var DeviceOrientationControls = class extends EventDispatcher { - constructor(object) { - super(); - __publicField$32(this, "object"); - __publicField$32(this, "changeEvent", { type: "change" }); - __publicField$32(this, "EPS", 1e-6); - __publicField$32(this, "enabled", true); - __publicField$32(this, "deviceOrientation", { - alpha: 0, - beta: 0, - gamma: 0 - }); - __publicField$32(this, "screenOrientation", 0); - __publicField$32(this, "alphaOffset", 0); - __publicField$32(this, "onDeviceOrientationChangeEvent", (event) => { - this.deviceOrientation = event; - }); - __publicField$32(this, "onScreenOrientationChangeEvent", () => { - this.screenOrientation = window.orientation || 0; - }); - __publicField$32(this, "zee", new Vector3(0, 0, 1)); - __publicField$32(this, "euler", new Euler()); - __publicField$32(this, "q0", new Quaternion()); - __publicField$32(this, "q1", new Quaternion(-Math.sqrt(.5), 0, 0, Math.sqrt(.5))); - __publicField$32(this, "setObjectQuaternion", (quaternion, alpha, beta, gamma, orient) => { - this.euler.set(beta, alpha, -gamma, "YXZ"); - quaternion.setFromEuler(this.euler); - quaternion.multiply(this.q1); - quaternion.multiply(this.q0.setFromAxisAngle(this.zee, -orient)); - }); - __publicField$32(this, "connect", () => { - this.onScreenOrientationChangeEvent(); - if (window.DeviceOrientationEvent !== void 0 && typeof window.DeviceOrientationEvent.requestPermission === "function") window.DeviceOrientationEvent.requestPermission().then((response) => { - if (response == "granted") { - window.addEventListener("orientationchange", this.onScreenOrientationChangeEvent); - window.addEventListener("deviceorientation", this.onDeviceOrientationChangeEvent); - } - }).catch((error) => { - console.error("THREE.DeviceOrientationControls: Unable to use DeviceOrientation API:", error); - }); - else { - window.addEventListener("orientationchange", this.onScreenOrientationChangeEvent); - window.addEventListener("deviceorientation", this.onDeviceOrientationChangeEvent); - } - this.enabled = true; - }); - __publicField$32(this, "disconnect", () => { - window.removeEventListener("orientationchange", this.onScreenOrientationChangeEvent); - window.removeEventListener("deviceorientation", this.onDeviceOrientationChangeEvent); - this.enabled = false; - }); - __publicField$32(this, "lastQuaternion", new Quaternion()); - __publicField$32(this, "update", () => { - if (this.enabled === false) return; - const device = this.deviceOrientation; - if (device) { - const alpha = device.alpha ? MathUtils.degToRad(device.alpha) + this.alphaOffset : 0; - const beta = device.beta ? MathUtils.degToRad(device.beta) : 0; - const gamma = device.gamma ? MathUtils.degToRad(device.gamma) : 0; - const orient = this.screenOrientation ? MathUtils.degToRad(this.screenOrientation) : 0; - this.setObjectQuaternion(this.object.quaternion, alpha, beta, gamma, orient); - if (8 * (1 - this.lastQuaternion.dot(this.object.quaternion)) > this.EPS) { - this.lastQuaternion.copy(this.object.quaternion); - this.dispatchEvent(this.changeEvent); - } - } - }); - __publicField$32(this, "dispose", () => this.disconnect()); - this.object = object; - this.object.rotation.reorder("YXZ"); - this.connect(); - } -}; -//#endregion -//#region node_modules/three-stdlib/controls/TrackballControls.js -var __defProp$31 = Object.defineProperty; -var __defNormalProp$31 = (obj, key, value) => key in obj ? __defProp$31(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$31 = (obj, key, value) => { - __defNormalProp$31(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var TrackballControls = class extends EventDispatcher { - constructor(object, domElement) { - super(); - __publicField$31(this, "enabled", true); - __publicField$31(this, "screen", { - left: 0, - top: 0, - width: 0, - height: 0 - }); - __publicField$31(this, "rotateSpeed", 1); - __publicField$31(this, "zoomSpeed", 1.2); - __publicField$31(this, "panSpeed", .3); - __publicField$31(this, "noRotate", false); - __publicField$31(this, "noZoom", false); - __publicField$31(this, "noPan", false); - __publicField$31(this, "staticMoving", false); - __publicField$31(this, "dynamicDampingFactor", .2); - __publicField$31(this, "minDistance", 0); - __publicField$31(this, "maxDistance", Infinity); - __publicField$31(this, "keys", [ - "KeyA", - "KeyS", - "KeyD" - ]); - __publicField$31(this, "mouseButtons", { - LEFT: MOUSE.ROTATE, - MIDDLE: MOUSE.DOLLY, - RIGHT: MOUSE.PAN - }); - __publicField$31(this, "object"); - __publicField$31(this, "domElement"); - __publicField$31(this, "cursorZoom", false); - __publicField$31(this, "target", new Vector3()); - __publicField$31(this, "mousePosition", new Vector2()); - __publicField$31(this, "STATE", { - NONE: -1, - ROTATE: 0, - ZOOM: 1, - PAN: 2, - TOUCH_ROTATE: 3, - TOUCH_ZOOM_PAN: 4 - }); - __publicField$31(this, "EPS", 1e-6); - __publicField$31(this, "lastZoom", 1); - __publicField$31(this, "lastPosition", new Vector3()); - __publicField$31(this, "cursorVector", new Vector3()); - __publicField$31(this, "targetVector", new Vector3()); - __publicField$31(this, "_state", this.STATE.NONE); - __publicField$31(this, "_keyState", this.STATE.NONE); - __publicField$31(this, "_eye", new Vector3()); - __publicField$31(this, "_movePrev", new Vector2()); - __publicField$31(this, "_moveCurr", new Vector2()); - __publicField$31(this, "_lastAxis", new Vector3()); - __publicField$31(this, "_lastAngle", 0); - __publicField$31(this, "_zoomStart", new Vector2()); - __publicField$31(this, "_zoomEnd", new Vector2()); - __publicField$31(this, "_touchZoomDistanceStart", 0); - __publicField$31(this, "_touchZoomDistanceEnd", 0); - __publicField$31(this, "_panStart", new Vector2()); - __publicField$31(this, "_panEnd", new Vector2()); - __publicField$31(this, "target0"); - __publicField$31(this, "position0"); - __publicField$31(this, "up0"); - __publicField$31(this, "zoom0"); - __publicField$31(this, "changeEvent", { type: "change" }); - __publicField$31(this, "startEvent", { type: "start" }); - __publicField$31(this, "endEvent", { type: "end" }); - __publicField$31(this, "onScreenVector", new Vector2()); - __publicField$31(this, "getMouseOnScreen", (pageX, pageY) => { - this.onScreenVector.set((pageX - this.screen.left) / this.screen.width, (pageY - this.screen.top) / this.screen.height); - return this.onScreenVector; - }); - __publicField$31(this, "onCircleVector", new Vector2()); - __publicField$31(this, "getMouseOnCircle", (pageX, pageY) => { - this.onCircleVector.set((pageX - this.screen.width * .5 - this.screen.left) / (this.screen.width * .5), (this.screen.height + 2 * (this.screen.top - pageY)) / this.screen.width); - return this.onCircleVector; - }); - __publicField$31(this, "axis", new Vector3()); - __publicField$31(this, "quaternion", new Quaternion()); - __publicField$31(this, "eyeDirection", new Vector3()); - __publicField$31(this, "objectUpDirection", new Vector3()); - __publicField$31(this, "objectSidewaysDirection", new Vector3()); - __publicField$31(this, "moveDirection", new Vector3()); - __publicField$31(this, "angle", 0); - __publicField$31(this, "rotateCamera", () => { - this.moveDirection.set(this._moveCurr.x - this._movePrev.x, this._moveCurr.y - this._movePrev.y, 0); - this.angle = this.moveDirection.length(); - if (this.angle) { - this._eye.copy(this.object.position).sub(this.target); - this.eyeDirection.copy(this._eye).normalize(); - this.objectUpDirection.copy(this.object.up).normalize(); - this.objectSidewaysDirection.crossVectors(this.objectUpDirection, this.eyeDirection).normalize(); - this.objectUpDirection.setLength(this._moveCurr.y - this._movePrev.y); - this.objectSidewaysDirection.setLength(this._moveCurr.x - this._movePrev.x); - this.moveDirection.copy(this.objectUpDirection.add(this.objectSidewaysDirection)); - this.axis.crossVectors(this.moveDirection, this._eye).normalize(); - this.angle *= this.rotateSpeed; - this.quaternion.setFromAxisAngle(this.axis, this.angle); - this._eye.applyQuaternion(this.quaternion); - this.object.up.applyQuaternion(this.quaternion); - this._lastAxis.copy(this.axis); - this._lastAngle = this.angle; - } else if (!this.staticMoving && this._lastAngle) { - this._lastAngle *= Math.sqrt(1 - this.dynamicDampingFactor); - this._eye.copy(this.object.position).sub(this.target); - this.quaternion.setFromAxisAngle(this._lastAxis, this._lastAngle); - this._eye.applyQuaternion(this.quaternion); - this.object.up.applyQuaternion(this.quaternion); - } - this._movePrev.copy(this._moveCurr); - }); - __publicField$31(this, "zoomCamera", () => { - let factor; - if (this._state === this.STATE.TOUCH_ZOOM_PAN) { - factor = this._touchZoomDistanceStart / this._touchZoomDistanceEnd; - this._touchZoomDistanceStart = this._touchZoomDistanceEnd; - if (this.object.isPerspectiveCamera) this._eye.multiplyScalar(factor); - else if (this.object.isOrthographicCamera) { - this.object.zoom /= factor; - this.object.updateProjectionMatrix(); - } else console.warn("THREE.TrackballControls: Unsupported camera type"); - } else { - factor = 1 + (this._zoomEnd.y - this._zoomStart.y) * this.zoomSpeed; - if (Math.abs(factor - 1) > this.EPS && factor > 0) if (this.object.isPerspectiveCamera) { - if (factor > 1 && this._eye.length() >= this.maxDistance - this.EPS) factor = 1; - this._eye.multiplyScalar(factor); - } else if (this.object.isOrthographicCamera) { - if (factor > 1 && this.object.zoom < this.maxDistance * this.maxDistance) factor = 1; - this.object.zoom /= factor; - } else console.warn("THREE.TrackballControls: Unsupported camera type"); - if (this.staticMoving) this._zoomStart.copy(this._zoomEnd); - else this._zoomStart.y += (this._zoomEnd.y - this._zoomStart.y) * this.dynamicDampingFactor; - if (this.cursorZoom) { - this.targetVector.copy(this.target).project(this.object); - let worldPos = this.cursorVector.set(this.mousePosition.x, this.mousePosition.y, this.targetVector.z).unproject(this.object); - this.target.lerpVectors(worldPos, this.target, factor); - } - if (this.object.isOrthographicCamera) this.object.updateProjectionMatrix(); - } - }); - __publicField$31(this, "mouseChange", new Vector2()); - __publicField$31(this, "objectUp", new Vector3()); - __publicField$31(this, "pan", new Vector3()); - __publicField$31(this, "panCamera", () => { - if (!this.domElement) return; - this.mouseChange.copy(this._panEnd).sub(this._panStart); - if (this.mouseChange.lengthSq() > this.EPS) { - if (this.object.isOrthographicCamera) { - const orthoObject = this.object; - const scale_x = (orthoObject.right - orthoObject.left) / this.object.zoom; - const scale_y = (orthoObject.top - orthoObject.bottom) / this.object.zoom; - this.mouseChange.x *= scale_x; - this.mouseChange.y *= scale_y; - } else this.mouseChange.multiplyScalar(this._eye.length() * this.panSpeed); - this.pan.copy(this._eye).cross(this.object.up).setLength(this.mouseChange.x); - this.pan.add(this.objectUp.copy(this.object.up).setLength(this.mouseChange.y)); - this.object.position.add(this.pan); - this.target.add(this.pan); - if (this.staticMoving) this._panStart.copy(this._panEnd); - else this._panStart.add(this.mouseChange.subVectors(this._panEnd, this._panStart).multiplyScalar(this.dynamicDampingFactor)); - } - }); - __publicField$31(this, "checkDistances", () => { - if (!this.noZoom || !this.noPan) { - if (this._eye.lengthSq() > this.maxDistance * this.maxDistance) { - this.object.position.addVectors(this.target, this._eye.setLength(this.maxDistance)); - this._zoomStart.copy(this._zoomEnd); - } - if (this._eye.lengthSq() < this.minDistance * this.minDistance) { - this.object.position.addVectors(this.target, this._eye.setLength(this.minDistance)); - this._zoomStart.copy(this._zoomEnd); - } - } - }); - __publicField$31(this, "handleResize", () => { - if (!this.domElement) return; - const box = this.domElement.getBoundingClientRect(); - const d = this.domElement.ownerDocument.documentElement; - this.screen.left = box.left + window.pageXOffset - d.clientLeft; - this.screen.top = box.top + window.pageYOffset - d.clientTop; - this.screen.width = box.width; - this.screen.height = box.height; - }); - __publicField$31(this, "update", () => { - this._eye.subVectors(this.object.position, this.target); - if (!this.noRotate) this.rotateCamera(); - if (!this.noZoom) this.zoomCamera(); - if (!this.noPan) this.panCamera(); - this.object.position.addVectors(this.target, this._eye); - if (this.object.isPerspectiveCamera) { - this.checkDistances(); - this.object.lookAt(this.target); - if (this.lastPosition.distanceToSquared(this.object.position) > this.EPS) { - this.dispatchEvent(this.changeEvent); - this.lastPosition.copy(this.object.position); - } - } else if (this.object.isOrthographicCamera) { - this.object.lookAt(this.target); - if (this.lastPosition.distanceToSquared(this.object.position) > this.EPS || this.lastZoom !== this.object.zoom) { - this.dispatchEvent(this.changeEvent); - this.lastPosition.copy(this.object.position); - this.lastZoom = this.object.zoom; - } - } else console.warn("THREE.TrackballControls: Unsupported camera type"); - }); - __publicField$31(this, "reset", () => { - this._state = this.STATE.NONE; - this._keyState = this.STATE.NONE; - this.target.copy(this.target0); - this.object.position.copy(this.position0); - this.object.up.copy(this.up0); - this.object.zoom = this.zoom0; - this.object.updateProjectionMatrix(); - this._eye.subVectors(this.object.position, this.target); - this.object.lookAt(this.target); - this.dispatchEvent(this.changeEvent); - this.lastPosition.copy(this.object.position); - this.lastZoom = this.object.zoom; - }); - __publicField$31(this, "keydown", (event) => { - if (this.enabled === false) return; - window.removeEventListener("keydown", this.keydown); - if (this._keyState !== this.STATE.NONE) return; - else if (event.code === this.keys[this.STATE.ROTATE] && !this.noRotate) this._keyState = this.STATE.ROTATE; - else if (event.code === this.keys[this.STATE.ZOOM] && !this.noZoom) this._keyState = this.STATE.ZOOM; - else if (event.code === this.keys[this.STATE.PAN] && !this.noPan) this._keyState = this.STATE.PAN; - }); - __publicField$31(this, "onPointerDown", (event) => { - if (this.enabled === false) return; - switch (event.pointerType) { - case "mouse": - case "pen": - this.onMouseDown(event); - break; - } - }); - __publicField$31(this, "onPointerMove", (event) => { - if (this.enabled === false) return; - switch (event.pointerType) { - case "mouse": - case "pen": - this.onMouseMove(event); - break; - } - }); - __publicField$31(this, "onPointerUp", (event) => { - if (this.enabled === false) return; - switch (event.pointerType) { - case "mouse": - case "pen": - this.onMouseUp(); - break; - } - }); - __publicField$31(this, "keyup", () => { - if (this.enabled === false) return; - this._keyState = this.STATE.NONE; - window.addEventListener("keydown", this.keydown); - }); - __publicField$31(this, "onMouseDown", (event) => { - if (!this.domElement) return; - if (this._state === this.STATE.NONE) switch (event.button) { - case this.mouseButtons.LEFT: - this._state = this.STATE.ROTATE; - break; - case this.mouseButtons.MIDDLE: - this._state = this.STATE.ZOOM; - break; - case this.mouseButtons.RIGHT: - this._state = this.STATE.PAN; - break; - } - const state = this._keyState !== this.STATE.NONE ? this._keyState : this._state; - if (state === this.STATE.ROTATE && !this.noRotate) { - this._moveCurr.copy(this.getMouseOnCircle(event.pageX, event.pageY)); - this._movePrev.copy(this._moveCurr); - } else if (state === this.STATE.ZOOM && !this.noZoom) { - this._zoomStart.copy(this.getMouseOnScreen(event.pageX, event.pageY)); - this._zoomEnd.copy(this._zoomStart); - } else if (state === this.STATE.PAN && !this.noPan) { - this._panStart.copy(this.getMouseOnScreen(event.pageX, event.pageY)); - this._panEnd.copy(this._panStart); - } - this.domElement.ownerDocument.addEventListener("pointermove", this.onPointerMove); - this.domElement.ownerDocument.addEventListener("pointerup", this.onPointerUp); - this.dispatchEvent(this.startEvent); - }); - __publicField$31(this, "onMouseMove", (event) => { - if (this.enabled === false) return; - const state = this._keyState !== this.STATE.NONE ? this._keyState : this._state; - if (state === this.STATE.ROTATE && !this.noRotate) { - this._movePrev.copy(this._moveCurr); - this._moveCurr.copy(this.getMouseOnCircle(event.pageX, event.pageY)); - } else if (state === this.STATE.ZOOM && !this.noZoom) this._zoomEnd.copy(this.getMouseOnScreen(event.pageX, event.pageY)); - else if (state === this.STATE.PAN && !this.noPan) this._panEnd.copy(this.getMouseOnScreen(event.pageX, event.pageY)); - }); - __publicField$31(this, "onMouseUp", () => { - if (!this.domElement) return; - if (this.enabled === false) return; - this._state = this.STATE.NONE; - this.domElement.ownerDocument.removeEventListener("pointermove", this.onPointerMove); - this.domElement.ownerDocument.removeEventListener("pointerup", this.onPointerUp); - this.dispatchEvent(this.endEvent); - }); - __publicField$31(this, "mousewheel", (event) => { - if (this.enabled === false) return; - if (this.noZoom === true) return; - event.preventDefault(); - switch (event.deltaMode) { - case 2: - this._zoomStart.y -= event.deltaY * .025; - break; - case 1: - this._zoomStart.y -= event.deltaY * .01; - break; - default: - this._zoomStart.y -= event.deltaY * 25e-5; - break; - } - this.mousePosition.x = event.offsetX / this.screen.width * 2 - 1; - this.mousePosition.y = -(event.offsetY / this.screen.height) * 2 + 1; - this.dispatchEvent(this.startEvent); - this.dispatchEvent(this.endEvent); - }); - __publicField$31(this, "touchstart", (event) => { - if (this.enabled === false) return; - event.preventDefault(); - switch (event.touches.length) { - case 1: - this._state = this.STATE.TOUCH_ROTATE; - this._moveCurr.copy(this.getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY)); - this._movePrev.copy(this._moveCurr); - break; - default: - this._state = this.STATE.TOUCH_ZOOM_PAN; - const dx = event.touches[0].pageX - event.touches[1].pageX; - const dy = event.touches[0].pageY - event.touches[1].pageY; - this._touchZoomDistanceEnd = this._touchZoomDistanceStart = Math.sqrt(dx * dx + dy * dy); - const x = (event.touches[0].pageX + event.touches[1].pageX) / 2; - const y = (event.touches[0].pageY + event.touches[1].pageY) / 2; - this._panStart.copy(this.getMouseOnScreen(x, y)); - this._panEnd.copy(this._panStart); - break; - } - this.dispatchEvent(this.startEvent); - }); - __publicField$31(this, "touchmove", (event) => { - if (this.enabled === false) return; - event.preventDefault(); - switch (event.touches.length) { - case 1: - this._movePrev.copy(this._moveCurr); - this._moveCurr.copy(this.getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY)); - break; - default: - const dx = event.touches[0].pageX - event.touches[1].pageX; - const dy = event.touches[0].pageY - event.touches[1].pageY; - this._touchZoomDistanceEnd = Math.sqrt(dx * dx + dy * dy); - const x = (event.touches[0].pageX + event.touches[1].pageX) / 2; - const y = (event.touches[0].pageY + event.touches[1].pageY) / 2; - this._panEnd.copy(this.getMouseOnScreen(x, y)); - break; - } - }); - __publicField$31(this, "touchend", (event) => { - if (this.enabled === false) return; - switch (event.touches.length) { - case 0: - this._state = this.STATE.NONE; - break; - case 1: - this._state = this.STATE.TOUCH_ROTATE; - this._moveCurr.copy(this.getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY)); - this._movePrev.copy(this._moveCurr); - break; - } - this.dispatchEvent(this.endEvent); - }); - __publicField$31(this, "contextmenu", (event) => { - if (this.enabled === false) return; - event.preventDefault(); - }); - __publicField$31(this, "connect", (domElement) => { - if (domElement === document) console.error("THREE.OrbitControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead."); - this.domElement = domElement; - this.domElement.addEventListener("contextmenu", this.contextmenu); - this.domElement.addEventListener("pointerdown", this.onPointerDown); - this.domElement.addEventListener("wheel", this.mousewheel); - this.domElement.addEventListener("touchstart", this.touchstart); - this.domElement.addEventListener("touchend", this.touchend); - this.domElement.addEventListener("touchmove", this.touchmove); - this.domElement.ownerDocument.addEventListener("pointermove", this.onPointerMove); - this.domElement.ownerDocument.addEventListener("pointerup", this.onPointerUp); - window.addEventListener("keydown", this.keydown); - window.addEventListener("keyup", this.keyup); - this.handleResize(); - }); - __publicField$31(this, "dispose", () => { - if (!this.domElement) return; - this.domElement.removeEventListener("contextmenu", this.contextmenu); - this.domElement.removeEventListener("pointerdown", this.onPointerDown); - this.domElement.removeEventListener("wheel", this.mousewheel); - this.domElement.removeEventListener("touchstart", this.touchstart); - this.domElement.removeEventListener("touchend", this.touchend); - this.domElement.removeEventListener("touchmove", this.touchmove); - this.domElement.ownerDocument.removeEventListener("pointermove", this.onPointerMove); - this.domElement.ownerDocument.removeEventListener("pointerup", this.onPointerUp); - window.removeEventListener("keydown", this.keydown); - window.removeEventListener("keyup", this.keyup); - }); - this.object = object; - this.target0 = this.target.clone(); - this.position0 = this.object.position.clone(); - this.up0 = this.object.up.clone(); - this.zoom0 = this.object.zoom; - if (domElement !== void 0) this.connect(domElement); - this.update(); - } -}; -//#endregion -//#region node_modules/three-stdlib/controls/OrbitControls.js -var __defProp$30 = Object.defineProperty; -var __defNormalProp$30 = (obj, key, value) => key in obj ? __defProp$30(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$30 = (obj, key, value) => { - __defNormalProp$30(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var _ray$2 = /* @__PURE__ */ new Ray(); -var _plane = /* @__PURE__ */ new Plane(); -var TILT_LIMIT = Math.cos(70 * (Math.PI / 180)); -var moduloWrapAround = (offset, capacity) => (offset % capacity + capacity) % capacity; -var OrbitControls = class extends EventDispatcher { - constructor(object, domElement) { - super(); - __publicField$30(this, "object"); - __publicField$30(this, "domElement"); - __publicField$30(this, "enabled", true); - __publicField$30(this, "target", new Vector3()); - __publicField$30(this, "minDistance", 0); - __publicField$30(this, "maxDistance", Infinity); - __publicField$30(this, "minZoom", 0); - __publicField$30(this, "maxZoom", Infinity); - __publicField$30(this, "minPolarAngle", 0); - __publicField$30(this, "maxPolarAngle", Math.PI); - __publicField$30(this, "minAzimuthAngle", -Infinity); - __publicField$30(this, "maxAzimuthAngle", Infinity); - __publicField$30(this, "enableDamping", false); - __publicField$30(this, "dampingFactor", .05); - __publicField$30(this, "enableZoom", true); - __publicField$30(this, "zoomSpeed", 1); - __publicField$30(this, "enableRotate", true); - __publicField$30(this, "rotateSpeed", 1); - __publicField$30(this, "enablePan", true); - __publicField$30(this, "panSpeed", 1); - __publicField$30(this, "screenSpacePanning", true); - __publicField$30(this, "keyPanSpeed", 7); - __publicField$30(this, "zoomToCursor", false); - __publicField$30(this, "autoRotate", false); - __publicField$30(this, "autoRotateSpeed", 2); - __publicField$30(this, "reverseOrbit", false); - __publicField$30(this, "reverseHorizontalOrbit", false); - __publicField$30(this, "reverseVerticalOrbit", false); - __publicField$30(this, "keys", { - LEFT: "ArrowLeft", - UP: "ArrowUp", - RIGHT: "ArrowRight", - BOTTOM: "ArrowDown" - }); - __publicField$30(this, "mouseButtons", { - LEFT: MOUSE.ROTATE, - MIDDLE: MOUSE.DOLLY, - RIGHT: MOUSE.PAN - }); - __publicField$30(this, "touches", { - ONE: TOUCH.ROTATE, - TWO: TOUCH.DOLLY_PAN - }); - __publicField$30(this, "target0"); - __publicField$30(this, "position0"); - __publicField$30(this, "zoom0"); - __publicField$30(this, "_domElementKeyEvents", null); - __publicField$30(this, "getPolarAngle"); - __publicField$30(this, "getAzimuthalAngle"); - __publicField$30(this, "setPolarAngle"); - __publicField$30(this, "setAzimuthalAngle"); - __publicField$30(this, "getDistance"); - __publicField$30(this, "getZoomScale"); - __publicField$30(this, "listenToKeyEvents"); - __publicField$30(this, "stopListenToKeyEvents"); - __publicField$30(this, "saveState"); - __publicField$30(this, "reset"); - __publicField$30(this, "update"); - __publicField$30(this, "connect"); - __publicField$30(this, "dispose"); - __publicField$30(this, "dollyIn"); - __publicField$30(this, "dollyOut"); - __publicField$30(this, "getScale"); - __publicField$30(this, "setScale"); - this.object = object; - this.domElement = domElement; - this.target0 = this.target.clone(); - this.position0 = this.object.position.clone(); - this.zoom0 = this.object.zoom; - this.getPolarAngle = () => spherical.phi; - this.getAzimuthalAngle = () => spherical.theta; - this.setPolarAngle = (value) => { - let phi = moduloWrapAround(value, 2 * Math.PI); - let currentPhi = spherical.phi; - if (currentPhi < 0) currentPhi += 2 * Math.PI; - if (phi < 0) phi += 2 * Math.PI; - let phiDist = Math.abs(phi - currentPhi); - if (2 * Math.PI - phiDist < phiDist) if (phi < currentPhi) phi += 2 * Math.PI; - else currentPhi += 2 * Math.PI; - sphericalDelta.phi = phi - currentPhi; - scope.update(); - }; - this.setAzimuthalAngle = (value) => { - let theta = moduloWrapAround(value, 2 * Math.PI); - let currentTheta = spherical.theta; - if (currentTheta < 0) currentTheta += 2 * Math.PI; - if (theta < 0) theta += 2 * Math.PI; - let thetaDist = Math.abs(theta - currentTheta); - if (2 * Math.PI - thetaDist < thetaDist) if (theta < currentTheta) theta += 2 * Math.PI; - else currentTheta += 2 * Math.PI; - sphericalDelta.theta = theta - currentTheta; - scope.update(); - }; - this.getDistance = () => scope.object.position.distanceTo(scope.target); - this.listenToKeyEvents = (domElement2) => { - domElement2.addEventListener("keydown", onKeyDown); - this._domElementKeyEvents = domElement2; - }; - this.stopListenToKeyEvents = () => { - this._domElementKeyEvents.removeEventListener("keydown", onKeyDown); - this._domElementKeyEvents = null; - }; - this.saveState = () => { - scope.target0.copy(scope.target); - scope.position0.copy(scope.object.position); - scope.zoom0 = scope.object.zoom; - }; - this.reset = () => { - scope.target.copy(scope.target0); - scope.object.position.copy(scope.position0); - scope.object.zoom = scope.zoom0; - scope.object.updateProjectionMatrix(); - scope.dispatchEvent(changeEvent); - scope.update(); - state = STATE.NONE; - }; - this.update = (() => { - const offset = new Vector3(); - const up = new Vector3(0, 1, 0); - const quat = new Quaternion().setFromUnitVectors(object.up, up); - const quatInverse = quat.clone().invert(); - const lastPosition = new Vector3(); - const lastQuaternion = new Quaternion(); - const twoPI = 2 * Math.PI; - return function update() { - const position = scope.object.position; - quat.setFromUnitVectors(object.up, up); - quatInverse.copy(quat).invert(); - offset.copy(position).sub(scope.target); - offset.applyQuaternion(quat); - spherical.setFromVector3(offset); - if (scope.autoRotate && state === STATE.NONE) rotateLeft(getAutoRotationAngle()); - if (scope.enableDamping) { - spherical.theta += sphericalDelta.theta * scope.dampingFactor; - spherical.phi += sphericalDelta.phi * scope.dampingFactor; - } else { - spherical.theta += sphericalDelta.theta; - spherical.phi += sphericalDelta.phi; - } - let min = scope.minAzimuthAngle; - let max = scope.maxAzimuthAngle; - if (isFinite(min) && isFinite(max)) { - if (min < -Math.PI) min += twoPI; - else if (min > Math.PI) min -= twoPI; - if (max < -Math.PI) max += twoPI; - else if (max > Math.PI) max -= twoPI; - if (min <= max) spherical.theta = Math.max(min, Math.min(max, spherical.theta)); - else spherical.theta = spherical.theta > (min + max) / 2 ? Math.max(min, spherical.theta) : Math.min(max, spherical.theta); - } - spherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi)); - spherical.makeSafe(); - if (scope.enableDamping === true) scope.target.addScaledVector(panOffset, scope.dampingFactor); - else scope.target.add(panOffset); - if (scope.zoomToCursor && performCursorZoom || scope.object.isOrthographicCamera) spherical.radius = clampDistance(spherical.radius); - else spherical.radius = clampDistance(spherical.radius * scale); - offset.setFromSpherical(spherical); - offset.applyQuaternion(quatInverse); - position.copy(scope.target).add(offset); - if (!scope.object.matrixAutoUpdate) scope.object.updateMatrix(); - scope.object.lookAt(scope.target); - if (scope.enableDamping === true) { - sphericalDelta.theta *= 1 - scope.dampingFactor; - sphericalDelta.phi *= 1 - scope.dampingFactor; - panOffset.multiplyScalar(1 - scope.dampingFactor); - } else { - sphericalDelta.set(0, 0, 0); - panOffset.set(0, 0, 0); - } - let zoomChanged = false; - if (scope.zoomToCursor && performCursorZoom) { - let newRadius = null; - if (scope.object instanceof PerspectiveCamera && scope.object.isPerspectiveCamera) { - const prevRadius = offset.length(); - newRadius = clampDistance(prevRadius * scale); - const radiusDelta = prevRadius - newRadius; - scope.object.position.addScaledVector(dollyDirection, radiusDelta); - scope.object.updateMatrixWorld(); - } else if (scope.object.isOrthographicCamera) { - const mouseBefore = new Vector3(mouse.x, mouse.y, 0); - mouseBefore.unproject(scope.object); - scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / scale)); - scope.object.updateProjectionMatrix(); - zoomChanged = true; - const mouseAfter = new Vector3(mouse.x, mouse.y, 0); - mouseAfter.unproject(scope.object); - scope.object.position.sub(mouseAfter).add(mouseBefore); - scope.object.updateMatrixWorld(); - newRadius = offset.length(); - } else { - console.warn("WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled."); - scope.zoomToCursor = false; - } - if (newRadius !== null) if (scope.screenSpacePanning) scope.target.set(0, 0, -1).transformDirection(scope.object.matrix).multiplyScalar(newRadius).add(scope.object.position); - else { - _ray$2.origin.copy(scope.object.position); - _ray$2.direction.set(0, 0, -1).transformDirection(scope.object.matrix); - if (Math.abs(scope.object.up.dot(_ray$2.direction)) < TILT_LIMIT) object.lookAt(scope.target); - else { - _plane.setFromNormalAndCoplanarPoint(scope.object.up, scope.target); - _ray$2.intersectPlane(_plane, scope.target); - } - } - } else if (scope.object instanceof OrthographicCamera && scope.object.isOrthographicCamera) { - zoomChanged = scale !== 1; - if (zoomChanged) { - scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / scale)); - scope.object.updateProjectionMatrix(); - } - } - scale = 1; - performCursorZoom = false; - if (zoomChanged || lastPosition.distanceToSquared(scope.object.position) > EPS || 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) { - scope.dispatchEvent(changeEvent); - lastPosition.copy(scope.object.position); - lastQuaternion.copy(scope.object.quaternion); - zoomChanged = false; - return true; - } - return false; - }; - })(); - this.connect = (domElement2) => { - scope.domElement = domElement2; - scope.domElement.style.touchAction = "none"; - scope.domElement.addEventListener("contextmenu", onContextMenu); - scope.domElement.addEventListener("pointerdown", onPointerDown); - scope.domElement.addEventListener("pointercancel", onPointerUp); - scope.domElement.addEventListener("wheel", onMouseWheel); - }; - this.dispose = () => { - var _a, _b, _c, _d, _e, _f; - if (scope.domElement) scope.domElement.style.touchAction = "auto"; - (_a = scope.domElement) == null || _a.removeEventListener("contextmenu", onContextMenu); - (_b = scope.domElement) == null || _b.removeEventListener("pointerdown", onPointerDown); - (_c = scope.domElement) == null || _c.removeEventListener("pointercancel", onPointerUp); - (_d = scope.domElement) == null || _d.removeEventListener("wheel", onMouseWheel); - (_e = scope.domElement) == null || _e.ownerDocument.removeEventListener("pointermove", onPointerMove); - (_f = scope.domElement) == null || _f.ownerDocument.removeEventListener("pointerup", onPointerUp); - if (scope._domElementKeyEvents !== null) scope._domElementKeyEvents.removeEventListener("keydown", onKeyDown); - }; - const scope = this; - const changeEvent = { type: "change" }; - const startEvent = { type: "start" }; - const endEvent = { type: "end" }; - const STATE = { - NONE: -1, - ROTATE: 0, - DOLLY: 1, - PAN: 2, - TOUCH_ROTATE: 3, - TOUCH_PAN: 4, - TOUCH_DOLLY_PAN: 5, - TOUCH_DOLLY_ROTATE: 6 - }; - let state = STATE.NONE; - const EPS = 1e-6; - const spherical = new Spherical(); - const sphericalDelta = new Spherical(); - let scale = 1; - const panOffset = new Vector3(); - const rotateStart = new Vector2(); - const rotateEnd = new Vector2(); - const rotateDelta = new Vector2(); - const panStart = new Vector2(); - const panEnd = new Vector2(); - const panDelta = new Vector2(); - const dollyStart = new Vector2(); - const dollyEnd = new Vector2(); - const dollyDelta = new Vector2(); - const dollyDirection = new Vector3(); - const mouse = new Vector2(); - let performCursorZoom = false; - const pointers = []; - const pointerPositions = {}; - function getAutoRotationAngle() { - return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed; - } - function getZoomScale() { - return Math.pow(.95, scope.zoomSpeed); - } - function rotateLeft(angle) { - if (scope.reverseOrbit || scope.reverseHorizontalOrbit) sphericalDelta.theta += angle; - else sphericalDelta.theta -= angle; - } - function rotateUp(angle) { - if (scope.reverseOrbit || scope.reverseVerticalOrbit) sphericalDelta.phi += angle; - else sphericalDelta.phi -= angle; - } - const panLeft = (() => { - const v = new Vector3(); - return function panLeft2(distance, objectMatrix) { - v.setFromMatrixColumn(objectMatrix, 0); - v.multiplyScalar(-distance); - panOffset.add(v); - }; - })(); - const panUp = (() => { - const v = new Vector3(); - return function panUp2(distance, objectMatrix) { - if (scope.screenSpacePanning === true) v.setFromMatrixColumn(objectMatrix, 1); - else { - v.setFromMatrixColumn(objectMatrix, 0); - v.crossVectors(scope.object.up, v); - } - v.multiplyScalar(distance); - panOffset.add(v); - }; - })(); - const pan = (() => { - const offset = new Vector3(); - return function pan2(deltaX, deltaY) { - const element = scope.domElement; - if (element && scope.object instanceof PerspectiveCamera && scope.object.isPerspectiveCamera) { - const position = scope.object.position; - offset.copy(position).sub(scope.target); - let targetDistance = offset.length(); - targetDistance *= Math.tan(scope.object.fov / 2 * Math.PI / 180); - panLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix); - panUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix); - } else if (element && scope.object instanceof OrthographicCamera && scope.object.isOrthographicCamera) { - panLeft(deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth, scope.object.matrix); - panUp(deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight, scope.object.matrix); - } else { - console.warn("WARNING: OrbitControls.js encountered an unknown camera type - pan disabled."); - scope.enablePan = false; - } - }; - })(); - function setScale(newScale) { - if (scope.object instanceof PerspectiveCamera && scope.object.isPerspectiveCamera || scope.object instanceof OrthographicCamera && scope.object.isOrthographicCamera) scale = newScale; - else { - console.warn("WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled."); - scope.enableZoom = false; - } - } - function dollyOut(dollyScale) { - setScale(scale / dollyScale); - } - function dollyIn(dollyScale) { - setScale(scale * dollyScale); - } - function updateMouseParameters(event) { - if (!scope.zoomToCursor || !scope.domElement) return; - performCursorZoom = true; - const rect = scope.domElement.getBoundingClientRect(); - const x = event.clientX - rect.left; - const y = event.clientY - rect.top; - const w = rect.width; - const h = rect.height; - mouse.x = x / w * 2 - 1; - mouse.y = -(y / h) * 2 + 1; - dollyDirection.set(mouse.x, mouse.y, 1).unproject(scope.object).sub(scope.object.position).normalize(); - } - function clampDistance(dist) { - return Math.max(scope.minDistance, Math.min(scope.maxDistance, dist)); - } - function handleMouseDownRotate(event) { - rotateStart.set(event.clientX, event.clientY); - } - function handleMouseDownDolly(event) { - updateMouseParameters(event); - dollyStart.set(event.clientX, event.clientY); - } - function handleMouseDownPan(event) { - panStart.set(event.clientX, event.clientY); - } - function handleMouseMoveRotate(event) { - rotateEnd.set(event.clientX, event.clientY); - rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed); - const element = scope.domElement; - if (element) { - rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); - rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight); - } - rotateStart.copy(rotateEnd); - scope.update(); - } - function handleMouseMoveDolly(event) { - dollyEnd.set(event.clientX, event.clientY); - dollyDelta.subVectors(dollyEnd, dollyStart); - if (dollyDelta.y > 0) dollyOut(getZoomScale()); - else if (dollyDelta.y < 0) dollyIn(getZoomScale()); - dollyStart.copy(dollyEnd); - scope.update(); - } - function handleMouseMovePan(event) { - panEnd.set(event.clientX, event.clientY); - panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed); - pan(panDelta.x, panDelta.y); - panStart.copy(panEnd); - scope.update(); - } - function handleMouseWheel(event) { - updateMouseParameters(event); - if (event.deltaY < 0) dollyIn(getZoomScale()); - else if (event.deltaY > 0) dollyOut(getZoomScale()); - scope.update(); - } - function handleKeyDown(event) { - let needsUpdate = false; - switch (event.code) { - case scope.keys.UP: - pan(0, scope.keyPanSpeed); - needsUpdate = true; - break; - case scope.keys.BOTTOM: - pan(0, -scope.keyPanSpeed); - needsUpdate = true; - break; - case scope.keys.LEFT: - pan(scope.keyPanSpeed, 0); - needsUpdate = true; - break; - case scope.keys.RIGHT: - pan(-scope.keyPanSpeed, 0); - needsUpdate = true; - break; - } - if (needsUpdate) { - event.preventDefault(); - scope.update(); - } - } - function handleTouchStartRotate() { - if (pointers.length == 1) rotateStart.set(pointers[0].pageX, pointers[0].pageY); - else { - const x = .5 * (pointers[0].pageX + pointers[1].pageX); - const y = .5 * (pointers[0].pageY + pointers[1].pageY); - rotateStart.set(x, y); - } - } - function handleTouchStartPan() { - if (pointers.length == 1) panStart.set(pointers[0].pageX, pointers[0].pageY); - else { - const x = .5 * (pointers[0].pageX + pointers[1].pageX); - const y = .5 * (pointers[0].pageY + pointers[1].pageY); - panStart.set(x, y); - } - } - function handleTouchStartDolly() { - const dx = pointers[0].pageX - pointers[1].pageX; - const dy = pointers[0].pageY - pointers[1].pageY; - const distance = Math.sqrt(dx * dx + dy * dy); - dollyStart.set(0, distance); - } - function handleTouchStartDollyPan() { - if (scope.enableZoom) handleTouchStartDolly(); - if (scope.enablePan) handleTouchStartPan(); - } - function handleTouchStartDollyRotate() { - if (scope.enableZoom) handleTouchStartDolly(); - if (scope.enableRotate) handleTouchStartRotate(); - } - function handleTouchMoveRotate(event) { - if (pointers.length == 1) rotateEnd.set(event.pageX, event.pageY); - else { - const position = getSecondPointerPosition(event); - const x = .5 * (event.pageX + position.x); - const y = .5 * (event.pageY + position.y); - rotateEnd.set(x, y); - } - rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed); - const element = scope.domElement; - if (element) { - rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight); - rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight); - } - rotateStart.copy(rotateEnd); - } - function handleTouchMovePan(event) { - if (pointers.length == 1) panEnd.set(event.pageX, event.pageY); - else { - const position = getSecondPointerPosition(event); - const x = .5 * (event.pageX + position.x); - const y = .5 * (event.pageY + position.y); - panEnd.set(x, y); - } - panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed); - pan(panDelta.x, panDelta.y); - panStart.copy(panEnd); - } - function handleTouchMoveDolly(event) { - const position = getSecondPointerPosition(event); - const dx = event.pageX - position.x; - const dy = event.pageY - position.y; - const distance = Math.sqrt(dx * dx + dy * dy); - dollyEnd.set(0, distance); - dollyDelta.set(0, Math.pow(dollyEnd.y / dollyStart.y, scope.zoomSpeed)); - dollyOut(dollyDelta.y); - dollyStart.copy(dollyEnd); - } - function handleTouchMoveDollyPan(event) { - if (scope.enableZoom) handleTouchMoveDolly(event); - if (scope.enablePan) handleTouchMovePan(event); - } - function handleTouchMoveDollyRotate(event) { - if (scope.enableZoom) handleTouchMoveDolly(event); - if (scope.enableRotate) handleTouchMoveRotate(event); - } - function onPointerDown(event) { - var _a, _b; - if (scope.enabled === false) return; - if (pointers.length === 0) { - (_a = scope.domElement) == null || _a.ownerDocument.addEventListener("pointermove", onPointerMove); - (_b = scope.domElement) == null || _b.ownerDocument.addEventListener("pointerup", onPointerUp); - } - addPointer(event); - if (event.pointerType === "touch") onTouchStart(event); - else onMouseDown(event); - } - function onPointerMove(event) { - if (scope.enabled === false) return; - if (event.pointerType === "touch") onTouchMove(event); - else onMouseMove(event); - } - function onPointerUp(event) { - var _a, _b, _c; - removePointer(event); - if (pointers.length === 0) { - (_a = scope.domElement) == null || _a.releasePointerCapture(event.pointerId); - (_b = scope.domElement) == null || _b.ownerDocument.removeEventListener("pointermove", onPointerMove); - (_c = scope.domElement) == null || _c.ownerDocument.removeEventListener("pointerup", onPointerUp); - } - scope.dispatchEvent(endEvent); - state = STATE.NONE; - } - function onMouseDown(event) { - let mouseAction; - switch (event.button) { - case 0: - mouseAction = scope.mouseButtons.LEFT; - break; - case 1: - mouseAction = scope.mouseButtons.MIDDLE; - break; - case 2: - mouseAction = scope.mouseButtons.RIGHT; - break; - default: mouseAction = -1; - } - switch (mouseAction) { - case MOUSE.DOLLY: - if (scope.enableZoom === false) return; - handleMouseDownDolly(event); - state = STATE.DOLLY; - break; - case MOUSE.ROTATE: - if (event.ctrlKey || event.metaKey || event.shiftKey) { - if (scope.enablePan === false) return; - handleMouseDownPan(event); - state = STATE.PAN; - } else { - if (scope.enableRotate === false) return; - handleMouseDownRotate(event); - state = STATE.ROTATE; - } - break; - case MOUSE.PAN: - if (event.ctrlKey || event.metaKey || event.shiftKey) { - if (scope.enableRotate === false) return; - handleMouseDownRotate(event); - state = STATE.ROTATE; - } else { - if (scope.enablePan === false) return; - handleMouseDownPan(event); - state = STATE.PAN; - } - break; - default: state = STATE.NONE; - } - if (state !== STATE.NONE) scope.dispatchEvent(startEvent); - } - function onMouseMove(event) { - if (scope.enabled === false) return; - switch (state) { - case STATE.ROTATE: - if (scope.enableRotate === false) return; - handleMouseMoveRotate(event); - break; - case STATE.DOLLY: - if (scope.enableZoom === false) return; - handleMouseMoveDolly(event); - break; - case STATE.PAN: - if (scope.enablePan === false) return; - handleMouseMovePan(event); - break; - } - } - function onMouseWheel(event) { - if (scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE && state !== STATE.ROTATE) return; - event.preventDefault(); - scope.dispatchEvent(startEvent); - handleMouseWheel(event); - scope.dispatchEvent(endEvent); - } - function onKeyDown(event) { - if (scope.enabled === false || scope.enablePan === false) return; - handleKeyDown(event); - } - function onTouchStart(event) { - trackPointer(event); - switch (pointers.length) { - case 1: - switch (scope.touches.ONE) { - case TOUCH.ROTATE: - if (scope.enableRotate === false) return; - handleTouchStartRotate(); - state = STATE.TOUCH_ROTATE; - break; - case TOUCH.PAN: - if (scope.enablePan === false) return; - handleTouchStartPan(); - state = STATE.TOUCH_PAN; - break; - default: state = STATE.NONE; - } - break; - case 2: - switch (scope.touches.TWO) { - case TOUCH.DOLLY_PAN: - if (scope.enableZoom === false && scope.enablePan === false) return; - handleTouchStartDollyPan(); - state = STATE.TOUCH_DOLLY_PAN; - break; - case TOUCH.DOLLY_ROTATE: - if (scope.enableZoom === false && scope.enableRotate === false) return; - handleTouchStartDollyRotate(); - state = STATE.TOUCH_DOLLY_ROTATE; - break; - default: state = STATE.NONE; - } - break; - default: state = STATE.NONE; - } - if (state !== STATE.NONE) scope.dispatchEvent(startEvent); - } - function onTouchMove(event) { - trackPointer(event); - switch (state) { - case STATE.TOUCH_ROTATE: - if (scope.enableRotate === false) return; - handleTouchMoveRotate(event); - scope.update(); - break; - case STATE.TOUCH_PAN: - if (scope.enablePan === false) return; - handleTouchMovePan(event); - scope.update(); - break; - case STATE.TOUCH_DOLLY_PAN: - if (scope.enableZoom === false && scope.enablePan === false) return; - handleTouchMoveDollyPan(event); - scope.update(); - break; - case STATE.TOUCH_DOLLY_ROTATE: - if (scope.enableZoom === false && scope.enableRotate === false) return; - handleTouchMoveDollyRotate(event); - scope.update(); - break; - default: state = STATE.NONE; - } - } - function onContextMenu(event) { - if (scope.enabled === false) return; - event.preventDefault(); - } - function addPointer(event) { - pointers.push(event); - } - function removePointer(event) { - delete pointerPositions[event.pointerId]; - for (let i = 0; i < pointers.length; i++) if (pointers[i].pointerId == event.pointerId) { - pointers.splice(i, 1); - return; - } - } - function trackPointer(event) { - let position = pointerPositions[event.pointerId]; - if (position === void 0) { - position = new Vector2(); - pointerPositions[event.pointerId] = position; - } - position.set(event.pageX, event.pageY); - } - function getSecondPointerPosition(event) { - return pointerPositions[(event.pointerId === pointers[0].pointerId ? pointers[1] : pointers[0]).pointerId]; - } - this.dollyIn = (dollyScale = getZoomScale()) => { - dollyIn(dollyScale); - scope.update(); - }; - this.dollyOut = (dollyScale = getZoomScale()) => { - dollyOut(dollyScale); - scope.update(); - }; - this.getScale = () => { - return scale; - }; - this.setScale = (newScale) => { - setScale(newScale); - scope.update(); - }; - this.getZoomScale = () => { - return getZoomScale(); - }; - if (domElement !== void 0) this.connect(domElement); - this.update(); - } -}; -var MapControls = class extends OrbitControls { - constructor(object, domElement) { - super(object, domElement); - this.screenSpacePanning = false; - this.mouseButtons.LEFT = MOUSE.PAN; - this.mouseButtons.RIGHT = MOUSE.ROTATE; - this.touches.ONE = TOUCH.PAN; - this.touches.TWO = TOUCH.DOLLY_ROTATE; - } -}; -//#endregion -//#region node_modules/three-stdlib/controls/ArcballControls.js -var __defProp$29 = Object.defineProperty; -var __defNormalProp$29 = (obj, key, value) => key in obj ? __defProp$29(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$29 = (obj, key, value) => { - __defNormalProp$29(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var STATE = { - IDLE: Symbol(), - ROTATE: Symbol(), - PAN: Symbol(), - SCALE: Symbol(), - FOV: Symbol(), - FOCUS: Symbol(), - ZROTATE: Symbol(), - TOUCH_MULTI: Symbol(), - ANIMATION_FOCUS: Symbol(), - ANIMATION_ROTATE: Symbol() -}; -var INPUT = { - NONE: Symbol(), - ONE_FINGER: Symbol(), - ONE_FINGER_SWITCHED: Symbol(), - TWO_FINGER: Symbol(), - MULT_FINGER: Symbol(), - CURSOR: Symbol() -}; -var _center$1 = { - x: 0, - y: 0 -}; -var _transformation = { - camera: /* @__PURE__ */ new Matrix4(), - gizmos: /* @__PURE__ */ new Matrix4() -}; -var _changeEvent = { type: "change" }; -var _startEvent = { type: "start" }; -var _endEvent = { type: "end" }; -var ArcballControls = class extends EventDispatcher { - constructor(camera, domElement = null, scene = null) { - super(); - __publicField$29(this, "camera"); - __publicField$29(this, "domElement"); - __publicField$29(this, "scene"); - __publicField$29(this, "mouseActions"); - __publicField$29(this, "_mouseOp"); - __publicField$29(this, "_v2_1"); - __publicField$29(this, "_v3_1"); - __publicField$29(this, "_v3_2"); - __publicField$29(this, "_m4_1"); - __publicField$29(this, "_m4_2"); - __publicField$29(this, "_quat"); - __publicField$29(this, "_translationMatrix"); - __publicField$29(this, "_rotationMatrix"); - __publicField$29(this, "_scaleMatrix"); - __publicField$29(this, "_rotationAxis"); - __publicField$29(this, "_cameraMatrixState"); - __publicField$29(this, "_cameraProjectionState"); - __publicField$29(this, "_fovState"); - __publicField$29(this, "_upState"); - __publicField$29(this, "_zoomState"); - __publicField$29(this, "_nearPos"); - __publicField$29(this, "_farPos"); - __publicField$29(this, "_gizmoMatrixState"); - __publicField$29(this, "_up0"); - __publicField$29(this, "_zoom0"); - __publicField$29(this, "_fov0"); - __publicField$29(this, "_initialNear"); - __publicField$29(this, "_nearPos0"); - __publicField$29(this, "_initialFar"); - __publicField$29(this, "_farPos0"); - __publicField$29(this, "_cameraMatrixState0"); - __publicField$29(this, "_gizmoMatrixState0"); - __publicField$29(this, "_button"); - __publicField$29(this, "_touchStart"); - __publicField$29(this, "_touchCurrent"); - __publicField$29(this, "_input"); - __publicField$29(this, "_switchSensibility"); - __publicField$29(this, "_startFingerDistance"); - __publicField$29(this, "_currentFingerDistance"); - __publicField$29(this, "_startFingerRotation"); - __publicField$29(this, "_currentFingerRotation"); - __publicField$29(this, "_devPxRatio"); - __publicField$29(this, "_downValid"); - __publicField$29(this, "_nclicks"); - __publicField$29(this, "_downEvents"); - __publicField$29(this, "_clickStart"); - __publicField$29(this, "_maxDownTime"); - __publicField$29(this, "_maxInterval"); - __publicField$29(this, "_posThreshold"); - __publicField$29(this, "_movementThreshold"); - __publicField$29(this, "_currentCursorPosition"); - __publicField$29(this, "_startCursorPosition"); - __publicField$29(this, "_grid"); - __publicField$29(this, "_gridPosition"); - __publicField$29(this, "_gizmos"); - __publicField$29(this, "_curvePts"); - __publicField$29(this, "_timeStart"); - __publicField$29(this, "_animationId"); - __publicField$29(this, "focusAnimationTime"); - __publicField$29(this, "_timePrev"); - __publicField$29(this, "_timeCurrent"); - __publicField$29(this, "_anglePrev"); - __publicField$29(this, "_angleCurrent"); - __publicField$29(this, "_cursorPosPrev"); - __publicField$29(this, "_cursorPosCurr"); - __publicField$29(this, "_wPrev"); - __publicField$29(this, "_wCurr"); - __publicField$29(this, "adjustNearFar"); - __publicField$29(this, "scaleFactor"); - __publicField$29(this, "dampingFactor"); - __publicField$29(this, "wMax"); - __publicField$29(this, "enableAnimations"); - __publicField$29(this, "enableGrid"); - __publicField$29(this, "cursorZoom"); - __publicField$29(this, "minFov"); - __publicField$29(this, "maxFov"); - __publicField$29(this, "enabled"); - __publicField$29(this, "enablePan"); - __publicField$29(this, "enableRotate"); - __publicField$29(this, "enableZoom"); - __publicField$29(this, "minDistance"); - __publicField$29(this, "maxDistance"); - __publicField$29(this, "minZoom"); - __publicField$29(this, "maxZoom"); - __publicField$29(this, "target"); - __publicField$29(this, "_currentTarget"); - __publicField$29(this, "_tbRadius"); - __publicField$29(this, "_state"); - __publicField$29(this, "onWindowResize", () => { - const scale = (this._gizmos.scale.x + this._gizmos.scale.y + this._gizmos.scale.z) / 3; - if (this.camera) { - const tbRadius = this.calculateTbRadius(this.camera); - if (tbRadius !== void 0) this._tbRadius = tbRadius; - } - const newRadius = this._tbRadius / scale; - const points = new EllipseCurve(0, 0, newRadius, newRadius).getPoints(this._curvePts); - const curveGeometry = new BufferGeometry().setFromPoints(points); - for (const gizmo in this._gizmos.children) { - const child = this._gizmos.children[gizmo]; - child.geometry = curveGeometry; - } - this.dispatchEvent(_changeEvent); - }); - __publicField$29(this, "onContextMenu", (event) => { - if (!this.enabled) return; - for (let i = 0; i < this.mouseActions.length; i++) if (this.mouseActions[i].mouse == 2) { - event.preventDefault(); - break; - } - }); - __publicField$29(this, "onPointerCancel", () => { - this._touchStart.splice(0, this._touchStart.length); - this._touchCurrent.splice(0, this._touchCurrent.length); - this._input = INPUT.NONE; - }); - __publicField$29(this, "onPointerDown", (event) => { - if (event.button == 0 && event.isPrimary) { - this._downValid = true; - this._downEvents.push(event); - } else this._downValid = false; - if (event.pointerType == "touch" && this._input != INPUT.CURSOR) { - this._touchStart.push(event); - this._touchCurrent.push(event); - switch (this._input) { - case INPUT.NONE: - this._input = INPUT.ONE_FINGER; - this.onSinglePanStart(event, "ROTATE"); - window.addEventListener("pointermove", this.onPointerMove); - window.addEventListener("pointerup", this.onPointerUp); - break; - case INPUT.ONE_FINGER: - case INPUT.ONE_FINGER_SWITCHED: - this._input = INPUT.TWO_FINGER; - this.onRotateStart(); - this.onPinchStart(); - this.onDoublePanStart(); - break; - case INPUT.TWO_FINGER: - this._input = INPUT.MULT_FINGER; - this.onTriplePanStart(); - break; - } - } else if (event.pointerType != "touch" && this._input == INPUT.NONE) { - let modifier = null; - if (event.ctrlKey || event.metaKey) modifier = "CTRL"; - else if (event.shiftKey) modifier = "SHIFT"; - this._mouseOp = this.getOpFromAction(event.button, modifier); - if (this._mouseOp) { - window.addEventListener("pointermove", this.onPointerMove); - window.addEventListener("pointerup", this.onPointerUp); - this._input = INPUT.CURSOR; - this._button = event.button; - this.onSinglePanStart(event, this._mouseOp); - } - } - }); - __publicField$29(this, "onPointerMove", (event) => { - if (event.pointerType == "touch" && this._input != INPUT.CURSOR) switch (this._input) { - case INPUT.ONE_FINGER: - this.updateTouchEvent(event); - this.onSinglePanMove(event, STATE.ROTATE); - break; - case INPUT.ONE_FINGER_SWITCHED: - if (this.calculatePointersDistance(this._touchCurrent[0], event) * this._devPxRatio >= this._switchSensibility) { - this._input = INPUT.ONE_FINGER; - this.updateTouchEvent(event); - this.onSinglePanStart(event, "ROTATE"); - break; - } - break; - case INPUT.TWO_FINGER: - this.updateTouchEvent(event); - this.onRotateMove(); - this.onPinchMove(); - this.onDoublePanMove(); - break; - case INPUT.MULT_FINGER: - this.updateTouchEvent(event); - this.onTriplePanMove(); - break; - } - else if (event.pointerType != "touch" && this._input == INPUT.CURSOR) { - let modifier = null; - if (event.ctrlKey || event.metaKey) modifier = "CTRL"; - else if (event.shiftKey) modifier = "SHIFT"; - const mouseOpState = this.getOpStateFromAction(this._button, modifier); - if (mouseOpState) this.onSinglePanMove(event, mouseOpState); - } - if (this._downValid) { - if (this.calculatePointersDistance(this._downEvents[this._downEvents.length - 1], event) * this._devPxRatio > this._movementThreshold) this._downValid = false; - } - }); - __publicField$29(this, "onPointerUp", (event) => { - if (event.pointerType == "touch" && this._input != INPUT.CURSOR) { - const nTouch = this._touchCurrent.length; - for (let i = 0; i < nTouch; i++) if (this._touchCurrent[i].pointerId == event.pointerId) { - this._touchCurrent.splice(i, 1); - this._touchStart.splice(i, 1); - break; - } - switch (this._input) { - case INPUT.ONE_FINGER: - case INPUT.ONE_FINGER_SWITCHED: - window.removeEventListener("pointermove", this.onPointerMove); - window.removeEventListener("pointerup", this.onPointerUp); - this._input = INPUT.NONE; - this.onSinglePanEnd(); - break; - case INPUT.TWO_FINGER: - this.onDoublePanEnd(); - this.onPinchEnd(); - this.onRotateEnd(); - this._input = INPUT.ONE_FINGER_SWITCHED; - break; - case INPUT.MULT_FINGER: - if (this._touchCurrent.length == 0) { - window.removeEventListener("pointermove", this.onPointerMove); - window.removeEventListener("pointerup", this.onPointerUp); - this._input = INPUT.NONE; - this.onTriplePanEnd(); - } - break; - } - } else if (event.pointerType != "touch" && this._input == INPUT.CURSOR) { - window.removeEventListener("pointermove", this.onPointerMove); - window.removeEventListener("pointerup", this.onPointerUp); - this._input = INPUT.NONE; - this.onSinglePanEnd(); - this._button = -1; - } - if (event.isPrimary) if (this._downValid) if (event.timeStamp - this._downEvents[this._downEvents.length - 1].timeStamp <= this._maxDownTime) if (this._nclicks == 0) { - this._nclicks = 1; - this._clickStart = performance.now(); - } else { - const clickInterval = event.timeStamp - this._clickStart; - const movement = this.calculatePointersDistance(this._downEvents[1], this._downEvents[0]) * this._devPxRatio; - if (clickInterval <= this._maxInterval && movement <= this._posThreshold) { - this._nclicks = 0; - this._downEvents.splice(0, this._downEvents.length); - this.onDoubleTap(event); - } else { - this._nclicks = 1; - this._downEvents.shift(); - this._clickStart = performance.now(); - } - } - else { - this._downValid = false; - this._nclicks = 0; - this._downEvents.splice(0, this._downEvents.length); - } - else { - this._nclicks = 0; - this._downEvents.splice(0, this._downEvents.length); - } - }); - __publicField$29(this, "onWheel", (event) => { - var _a, _b; - if (this.enabled && this.enableZoom && this.domElement) { - let modifier = null; - if (event.ctrlKey || event.metaKey) modifier = "CTRL"; - else if (event.shiftKey) modifier = "SHIFT"; - const mouseOp = this.getOpFromAction("WHEEL", modifier); - if (mouseOp) { - event.preventDefault(); - this.dispatchEvent(_startEvent); - const notchDeltaY = 125; - let sgn = event.deltaY / notchDeltaY; - let size = 1; - if (sgn > 0) size = 1 / this.scaleFactor; - else if (sgn < 0) size = this.scaleFactor; - switch (mouseOp) { - case "ZOOM": - this.updateTbState(STATE.SCALE, true); - if (sgn > 0) size = 1 / Math.pow(this.scaleFactor, sgn); - else if (sgn < 0) size = Math.pow(this.scaleFactor, -sgn); - if (this.cursorZoom && this.enablePan) { - let scalePoint; - if (this.camera instanceof OrthographicCamera) scalePoint = (_a = this.unprojectOnTbPlane(this.camera, event.clientX, event.clientY, this.domElement)) == null ? void 0 : _a.applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._gizmos.position); - if (this.camera instanceof PerspectiveCamera) scalePoint = (_b = this.unprojectOnTbPlane(this.camera, event.clientX, event.clientY, this.domElement)) == null ? void 0 : _b.applyQuaternion(this.camera.quaternion).add(this._gizmos.position); - if (scalePoint !== void 0) this.applyTransformMatrix(this.applyScale(size, scalePoint)); - } else this.applyTransformMatrix(this.applyScale(size, this._gizmos.position)); - if (this._grid) { - this.disposeGrid(); - this.drawGrid(); - } - this.updateTbState(STATE.IDLE, false); - this.dispatchEvent(_changeEvent); - this.dispatchEvent(_endEvent); - break; - case "FOV": - if (this.camera instanceof PerspectiveCamera) { - this.updateTbState(STATE.FOV, true); - if (event.deltaX != 0) { - sgn = event.deltaX / notchDeltaY; - size = 1; - if (sgn > 0) size = 1 / Math.pow(this.scaleFactor, sgn); - else if (sgn < 0) size = Math.pow(this.scaleFactor, -sgn); - } - this._v3_1.setFromMatrixPosition(this._cameraMatrixState); - const x = this._v3_1.distanceTo(this._gizmos.position); - let xNew = x / size; - xNew = MathUtils.clamp(xNew, this.minDistance, this.maxDistance); - const y = x * Math.tan(MathUtils.DEG2RAD * this.camera.fov * .5); - let newFov = MathUtils.RAD2DEG * (Math.atan(y / xNew) * 2); - if (newFov > this.maxFov) newFov = this.maxFov; - else if (newFov < this.minFov) newFov = this.minFov; - size = x / (y / Math.tan(MathUtils.DEG2RAD * (newFov / 2))); - this.setFov(newFov); - this.applyTransformMatrix(this.applyScale(size, this._gizmos.position, false)); - } - if (this._grid) { - this.disposeGrid(); - this.drawGrid(); - } - this.updateTbState(STATE.IDLE, false); - this.dispatchEvent(_changeEvent); - this.dispatchEvent(_endEvent); - break; - } - } - } - }); - __publicField$29(this, "onSinglePanStart", (event, operation) => { - if (this.enabled && this.domElement) { - this.dispatchEvent(_startEvent); - this.setCenter(event.clientX, event.clientY); - switch (operation) { - case "PAN": - if (!this.enablePan) return; - if (this._animationId != -1) { - cancelAnimationFrame(this._animationId); - this._animationId = -1; - this._timeStart = -1; - this.activateGizmos(false); - this.dispatchEvent(_changeEvent); - } - if (this.camera) { - this.updateTbState(STATE.PAN, true); - const rayDir = this.unprojectOnTbPlane(this.camera, _center$1.x, _center$1.y, this.domElement); - if (rayDir !== void 0) this._startCursorPosition.copy(rayDir); - if (this.enableGrid) { - this.drawGrid(); - this.dispatchEvent(_changeEvent); - } - } - break; - case "ROTATE": - if (!this.enableRotate) return; - if (this._animationId != -1) { - cancelAnimationFrame(this._animationId); - this._animationId = -1; - this._timeStart = -1; - } - if (this.camera) { - this.updateTbState(STATE.ROTATE, true); - const rayDir = this.unprojectOnTbSurface(this.camera, _center$1.x, _center$1.y, this.domElement, this._tbRadius); - if (rayDir !== void 0) this._startCursorPosition.copy(rayDir); - this.activateGizmos(true); - if (this.enableAnimations) { - this._timePrev = this._timeCurrent = performance.now(); - this._angleCurrent = this._anglePrev = 0; - this._cursorPosPrev.copy(this._startCursorPosition); - this._cursorPosCurr.copy(this._cursorPosPrev); - this._wCurr = 0; - this._wPrev = this._wCurr; - } - } - this.dispatchEvent(_changeEvent); - break; - case "FOV": - if (!this.enableZoom) return; - if (this.camera instanceof PerspectiveCamera) { - if (this._animationId != -1) { - cancelAnimationFrame(this._animationId); - this._animationId = -1; - this._timeStart = -1; - this.activateGizmos(false); - this.dispatchEvent(_changeEvent); - } - this.updateTbState(STATE.FOV, true); - this._startCursorPosition.setY(this.getCursorNDC(_center$1.x, _center$1.y, this.domElement).y * .5); - this._currentCursorPosition.copy(this._startCursorPosition); - } - break; - case "ZOOM": - if (!this.enableZoom) return; - if (this._animationId != -1) { - cancelAnimationFrame(this._animationId); - this._animationId = -1; - this._timeStart = -1; - this.activateGizmos(false); - this.dispatchEvent(_changeEvent); - } - this.updateTbState(STATE.SCALE, true); - this._startCursorPosition.setY(this.getCursorNDC(_center$1.x, _center$1.y, this.domElement).y * .5); - this._currentCursorPosition.copy(this._startCursorPosition); - break; - } - } - }); - __publicField$29(this, "onSinglePanMove", (event, opState) => { - if (this.enabled && this.domElement) { - const restart = opState != this._state; - this.setCenter(event.clientX, event.clientY); - switch (opState) { - case STATE.PAN: - if (this.enablePan && this.camera) if (restart) { - this.dispatchEvent(_endEvent); - this.dispatchEvent(_startEvent); - this.updateTbState(opState, true); - const rayDir = this.unprojectOnTbPlane(this.camera, _center$1.x, _center$1.y, this.domElement); - if (rayDir !== void 0) this._startCursorPosition.copy(rayDir); - if (this.enableGrid) this.drawGrid(); - this.activateGizmos(false); - } else { - const rayDir = this.unprojectOnTbPlane(this.camera, _center$1.x, _center$1.y, this.domElement); - if (rayDir !== void 0) this._currentCursorPosition.copy(rayDir); - this.applyTransformMatrix(this.pan(this._startCursorPosition, this._currentCursorPosition)); - } - break; - case STATE.ROTATE: - if (this.enableRotate && this.camera) if (restart) { - this.dispatchEvent(_endEvent); - this.dispatchEvent(_startEvent); - this.updateTbState(opState, true); - const rayDir = this.unprojectOnTbSurface(this.camera, _center$1.x, _center$1.y, this.domElement, this._tbRadius); - if (rayDir !== void 0) this._startCursorPosition.copy(rayDir); - if (this.enableGrid) this.disposeGrid(); - this.activateGizmos(true); - } else { - const rayDir = this.unprojectOnTbSurface(this.camera, _center$1.x, _center$1.y, this.domElement, this._tbRadius); - if (rayDir !== void 0) this._currentCursorPosition.copy(rayDir); - const distance = this._startCursorPosition.distanceTo(this._currentCursorPosition); - const angle = this._startCursorPosition.angleTo(this._currentCursorPosition); - const amount = Math.max(distance / this._tbRadius, angle); - this.applyTransformMatrix(this.rotate(this.calculateRotationAxis(this._startCursorPosition, this._currentCursorPosition), amount)); - if (this.enableAnimations) { - this._timePrev = this._timeCurrent; - this._timeCurrent = performance.now(); - this._anglePrev = this._angleCurrent; - this._angleCurrent = amount; - this._cursorPosPrev.copy(this._cursorPosCurr); - this._cursorPosCurr.copy(this._currentCursorPosition); - this._wPrev = this._wCurr; - this._wCurr = this.calculateAngularSpeed(this._anglePrev, this._angleCurrent, this._timePrev, this._timeCurrent); - } - } - break; - case STATE.SCALE: - if (this.enableZoom) if (restart) { - this.dispatchEvent(_endEvent); - this.dispatchEvent(_startEvent); - this.updateTbState(opState, true); - this._startCursorPosition.setY(this.getCursorNDC(_center$1.x, _center$1.y, this.domElement).y * .5); - this._currentCursorPosition.copy(this._startCursorPosition); - if (this.enableGrid) this.disposeGrid(); - this.activateGizmos(false); - } else { - const screenNotches = 8; - this._currentCursorPosition.setY(this.getCursorNDC(_center$1.x, _center$1.y, this.domElement).y * .5); - const movement = this._currentCursorPosition.y - this._startCursorPosition.y; - let size = 1; - if (movement < 0) size = 1 / Math.pow(this.scaleFactor, -movement * screenNotches); - else if (movement > 0) size = Math.pow(this.scaleFactor, movement * screenNotches); - this.applyTransformMatrix(this.applyScale(size, this._gizmos.position)); - } - break; - case STATE.FOV: - if (this.enableZoom && this.camera instanceof PerspectiveCamera) if (restart) { - this.dispatchEvent(_endEvent); - this.dispatchEvent(_startEvent); - this.updateTbState(opState, true); - this._startCursorPosition.setY(this.getCursorNDC(_center$1.x, _center$1.y, this.domElement).y * .5); - this._currentCursorPosition.copy(this._startCursorPosition); - if (this.enableGrid) this.disposeGrid(); - this.activateGizmos(false); - } else { - const screenNotches = 8; - this._currentCursorPosition.setY(this.getCursorNDC(_center$1.x, _center$1.y, this.domElement).y * .5); - const movement = this._currentCursorPosition.y - this._startCursorPosition.y; - let size = 1; - if (movement < 0) size = 1 / Math.pow(this.scaleFactor, -movement * screenNotches); - else if (movement > 0) size = Math.pow(this.scaleFactor, movement * screenNotches); - this._v3_1.setFromMatrixPosition(this._cameraMatrixState); - const x = this._v3_1.distanceTo(this._gizmos.position); - let xNew = x / size; - xNew = MathUtils.clamp(xNew, this.minDistance, this.maxDistance); - const y = x * Math.tan(MathUtils.DEG2RAD * this._fovState * .5); - let newFov = MathUtils.RAD2DEG * (Math.atan(y / xNew) * 2); - newFov = MathUtils.clamp(newFov, this.minFov, this.maxFov); - const newDistance = y / Math.tan(MathUtils.DEG2RAD * (newFov / 2)); - size = x / newDistance; - this._v3_2.setFromMatrixPosition(this._gizmoMatrixState); - this.setFov(newFov); - this.applyTransformMatrix(this.applyScale(size, this._v3_2, false)); - const direction = this._gizmos.position.clone().sub(this.camera.position).normalize().multiplyScalar(newDistance / x); - this._m4_1.makeTranslation(direction.x, direction.y, direction.z); - } - break; - } - this.dispatchEvent(_changeEvent); - } - }); - __publicField$29(this, "onSinglePanEnd", () => { - if (this._state == STATE.ROTATE) { - if (!this.enableRotate) return; - if (this.enableAnimations) if (performance.now() - this._timeCurrent < 120) { - const w = Math.abs((this._wPrev + this._wCurr) / 2); - const self = this; - this._animationId = window.requestAnimationFrame(function(t) { - self.updateTbState(STATE.ANIMATION_ROTATE, true); - const rotationAxis = self.calculateRotationAxis(self._cursorPosPrev, self._cursorPosCurr); - self.onRotationAnim(t, rotationAxis, Math.min(w, self.wMax)); - }); - } else { - this.updateTbState(STATE.IDLE, false); - this.activateGizmos(false); - this.dispatchEvent(_changeEvent); - } - else { - this.updateTbState(STATE.IDLE, false); - this.activateGizmos(false); - this.dispatchEvent(_changeEvent); - } - } else if (this._state == STATE.PAN || this._state == STATE.IDLE) { - this.updateTbState(STATE.IDLE, false); - if (this.enableGrid) this.disposeGrid(); - this.activateGizmos(false); - this.dispatchEvent(_changeEvent); - } - this.dispatchEvent(_endEvent); - }); - __publicField$29(this, "onDoubleTap", (event) => { - if (this.enabled && this.enablePan && this.scene && this.camera && this.domElement) { - this.dispatchEvent(_startEvent); - this.setCenter(event.clientX, event.clientY); - const hitP = this.unprojectOnObj(this.getCursorNDC(_center$1.x, _center$1.y, this.domElement), this.camera); - if (hitP && this.enableAnimations) { - const self = this; - if (this._animationId != -1) window.cancelAnimationFrame(this._animationId); - this._timeStart = -1; - this._animationId = window.requestAnimationFrame(function(t) { - self.updateTbState(STATE.ANIMATION_FOCUS, true); - self.onFocusAnim(t, hitP, self._cameraMatrixState, self._gizmoMatrixState); - }); - } else if (hitP && !this.enableAnimations) { - this.updateTbState(STATE.FOCUS, true); - this.focus(hitP, this.scaleFactor); - this.updateTbState(STATE.IDLE, false); - this.dispatchEvent(_changeEvent); - } - } - this.dispatchEvent(_endEvent); - }); - __publicField$29(this, "onDoublePanStart", () => { - if (this.enabled && this.enablePan && this.camera && this.domElement) { - this.dispatchEvent(_startEvent); - this.updateTbState(STATE.PAN, true); - this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2); - const rayDir = this.unprojectOnTbPlane(this.camera, _center$1.x, _center$1.y, this.domElement, true); - if (rayDir !== void 0) this._startCursorPosition.copy(rayDir); - this._currentCursorPosition.copy(this._startCursorPosition); - this.activateGizmos(false); - } - }); - __publicField$29(this, "onDoublePanMove", () => { - if (this.enabled && this.enablePan && this.camera && this.domElement) { - this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2); - if (this._state != STATE.PAN) { - this.updateTbState(STATE.PAN, true); - this._startCursorPosition.copy(this._currentCursorPosition); - } - const rayDir = this.unprojectOnTbPlane(this.camera, _center$1.x, _center$1.y, this.domElement, true); - if (rayDir !== void 0) this._currentCursorPosition.copy(rayDir); - this.applyTransformMatrix(this.pan(this._startCursorPosition, this._currentCursorPosition, true)); - this.dispatchEvent(_changeEvent); - } - }); - __publicField$29(this, "onDoublePanEnd", () => { - this.updateTbState(STATE.IDLE, false); - this.dispatchEvent(_endEvent); - }); - __publicField$29(this, "onRotateStart", () => { - var _a; - if (this.enabled && this.enableRotate) { - this.dispatchEvent(_startEvent); - this.updateTbState(STATE.ZROTATE, true); - this._startFingerRotation = this.getAngle(this._touchCurrent[1], this._touchCurrent[0]) + this.getAngle(this._touchStart[1], this._touchStart[0]); - this._currentFingerRotation = this._startFingerRotation; - (_a = this.camera) == null || _a.getWorldDirection(this._rotationAxis); - if (!this.enablePan && !this.enableZoom) this.activateGizmos(true); - } - }); - __publicField$29(this, "onRotateMove", () => { - var _a; - if (this.enabled && this.enableRotate && this.camera && this.domElement) { - this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2); - let rotationPoint; - if (this._state != STATE.ZROTATE) { - this.updateTbState(STATE.ZROTATE, true); - this._startFingerRotation = this._currentFingerRotation; - } - this._currentFingerRotation = this.getAngle(this._touchCurrent[1], this._touchCurrent[0]) + this.getAngle(this._touchStart[1], this._touchStart[0]); - if (!this.enablePan) rotationPoint = new Vector3().setFromMatrixPosition(this._gizmoMatrixState); - else if (this.camera) { - this._v3_2.setFromMatrixPosition(this._gizmoMatrixState); - rotationPoint = (_a = this.unprojectOnTbPlane(this.camera, _center$1.x, _center$1.y, this.domElement)) == null ? void 0 : _a.applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._v3_2); - } - const amount = MathUtils.DEG2RAD * (this._startFingerRotation - this._currentFingerRotation); - if (rotationPoint !== void 0) this.applyTransformMatrix(this.zRotate(rotationPoint, amount)); - this.dispatchEvent(_changeEvent); - } - }); - __publicField$29(this, "onRotateEnd", () => { - this.updateTbState(STATE.IDLE, false); - this.activateGizmos(false); - this.dispatchEvent(_endEvent); - }); - __publicField$29(this, "onPinchStart", () => { - if (this.enabled && this.enableZoom) { - this.dispatchEvent(_startEvent); - this.updateTbState(STATE.SCALE, true); - this._startFingerDistance = this.calculatePointersDistance(this._touchCurrent[0], this._touchCurrent[1]); - this._currentFingerDistance = this._startFingerDistance; - this.activateGizmos(false); - } - }); - __publicField$29(this, "onPinchMove", () => { - var _a, _b; - if (this.enabled && this.enableZoom && this.domElement) { - this.setCenter((this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2, (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2); - const minDistance = 12; - if (this._state != STATE.SCALE) { - this._startFingerDistance = this._currentFingerDistance; - this.updateTbState(STATE.SCALE, true); - } - this._currentFingerDistance = Math.max(this.calculatePointersDistance(this._touchCurrent[0], this._touchCurrent[1]), minDistance * this._devPxRatio); - const amount = this._currentFingerDistance / this._startFingerDistance; - let scalePoint; - if (!this.enablePan) scalePoint = this._gizmos.position; - else if (this.camera instanceof OrthographicCamera) scalePoint = (_a = this.unprojectOnTbPlane(this.camera, _center$1.x, _center$1.y, this.domElement)) == null ? void 0 : _a.applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._gizmos.position); - else if (this.camera instanceof PerspectiveCamera) scalePoint = (_b = this.unprojectOnTbPlane(this.camera, _center$1.x, _center$1.y, this.domElement)) == null ? void 0 : _b.applyQuaternion(this.camera.quaternion).add(this._gizmos.position); - if (scalePoint !== void 0) this.applyTransformMatrix(this.applyScale(amount, scalePoint)); - this.dispatchEvent(_changeEvent); - } - }); - __publicField$29(this, "onPinchEnd", () => { - this.updateTbState(STATE.IDLE, false); - this.dispatchEvent(_endEvent); - }); - __publicField$29(this, "onTriplePanStart", () => { - if (this.enabled && this.enableZoom && this.domElement) { - this.dispatchEvent(_startEvent); - this.updateTbState(STATE.SCALE, true); - let clientX = 0; - let clientY = 0; - const nFingers = this._touchCurrent.length; - for (let i = 0; i < nFingers; i++) { - clientX += this._touchCurrent[i].clientX; - clientY += this._touchCurrent[i].clientY; - } - this.setCenter(clientX / nFingers, clientY / nFingers); - this._startCursorPosition.setY(this.getCursorNDC(_center$1.x, _center$1.y, this.domElement).y * .5); - this._currentCursorPosition.copy(this._startCursorPosition); - } - }); - __publicField$29(this, "onTriplePanMove", () => { - if (this.enabled && this.enableZoom && this.camera && this.domElement) { - let clientX = 0; - let clientY = 0; - const nFingers = this._touchCurrent.length; - for (let i = 0; i < nFingers; i++) { - clientX += this._touchCurrent[i].clientX; - clientY += this._touchCurrent[i].clientY; - } - this.setCenter(clientX / nFingers, clientY / nFingers); - const screenNotches = 8; - this._currentCursorPosition.setY(this.getCursorNDC(_center$1.x, _center$1.y, this.domElement).y * .5); - const movement = this._currentCursorPosition.y - this._startCursorPosition.y; - let size = 1; - if (movement < 0) size = 1 / Math.pow(this.scaleFactor, -movement * screenNotches); - else if (movement > 0) size = Math.pow(this.scaleFactor, movement * screenNotches); - this._v3_1.setFromMatrixPosition(this._cameraMatrixState); - const x = this._v3_1.distanceTo(this._gizmos.position); - let xNew = x / size; - xNew = MathUtils.clamp(xNew, this.minDistance, this.maxDistance); - const y = x * Math.tan(MathUtils.DEG2RAD * this._fovState * .5); - let newFov = MathUtils.RAD2DEG * (Math.atan(y / xNew) * 2); - newFov = MathUtils.clamp(newFov, this.minFov, this.maxFov); - const newDistance = y / Math.tan(MathUtils.DEG2RAD * (newFov / 2)); - size = x / newDistance; - this._v3_2.setFromMatrixPosition(this._gizmoMatrixState); - this.setFov(newFov); - this.applyTransformMatrix(this.applyScale(size, this._v3_2, false)); - const direction = this._gizmos.position.clone().sub(this.camera.position).normalize().multiplyScalar(newDistance / x); - this._m4_1.makeTranslation(direction.x, direction.y, direction.z); - this.dispatchEvent(_changeEvent); - } - }); - __publicField$29(this, "onTriplePanEnd", () => { - this.updateTbState(STATE.IDLE, false); - this.dispatchEvent(_endEvent); - }); - /** - * Set _center's x/y coordinates - * @param {Number} clientX - * @param {Number} clientY - */ - __publicField$29(this, "setCenter", (clientX, clientY) => { - _center$1.x = clientX; - _center$1.y = clientY; - }); - /** - * Set default mouse actions - */ - __publicField$29(this, "initializeMouseActions", () => { - this.setMouseAction("PAN", 0, "CTRL"); - this.setMouseAction("PAN", 2); - this.setMouseAction("ROTATE", 0); - this.setMouseAction("ZOOM", "WHEEL"); - this.setMouseAction("ZOOM", 1); - this.setMouseAction("FOV", "WHEEL", "SHIFT"); - this.setMouseAction("FOV", 1, "SHIFT"); - }); - /** - * Set a new mouse action by specifying the operation to be performed and a mouse/key combination. In case of conflict, replaces the existing one - * @param {String} operation The operation to be performed ('PAN', 'ROTATE', 'ZOOM', 'FOV) - * @param {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches - * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed - * @returns {Boolean} True if the mouse action has been successfully added, false otherwise - */ - __publicField$29(this, "setMouseAction", (operation, mouse, key = null) => { - const operationInput = [ - "PAN", - "ROTATE", - "ZOOM", - "FOV" - ]; - const mouseInput = [ - 0, - 1, - 2, - "WHEEL" - ]; - const keyInput = [ - "CTRL", - "SHIFT", - null - ]; - let state; - if (!operationInput.includes(operation) || !mouseInput.includes(mouse) || !keyInput.includes(key)) return false; - if (mouse == "WHEEL") { - if (operation != "ZOOM" && operation != "FOV") return false; - } - switch (operation) { - case "PAN": - state = STATE.PAN; - break; - case "ROTATE": - state = STATE.ROTATE; - break; - case "ZOOM": - state = STATE.SCALE; - break; - case "FOV": - state = STATE.FOV; - break; - } - const action = { - operation, - mouse, - key, - state - }; - for (let i = 0; i < this.mouseActions.length; i++) if (this.mouseActions[i].mouse == action.mouse && this.mouseActions[i].key == action.key) { - this.mouseActions.splice(i, 1, action); - return true; - } - this.mouseActions.push(action); - return true; - }); - /** - * Return the operation associated to a mouse/keyboard combination - * @param {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches - * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed - * @returns The operation if it has been found, null otherwise - */ - __publicField$29(this, "getOpFromAction", (mouse, key) => { - let action; - for (let i = 0; i < this.mouseActions.length; i++) { - action = this.mouseActions[i]; - if (action.mouse == mouse && action.key == key) return action.operation; - } - if (key) for (let i = 0; i < this.mouseActions.length; i++) { - action = this.mouseActions[i]; - if (action.mouse == mouse && action.key == null) return action.operation; - } - return null; - }); - /** - * Get the operation associated to mouse and key combination and returns the corresponding FSA state - * @param {Number} mouse Mouse button - * @param {String} key Keyboard modifier - * @returns The FSA state obtained from the operation associated to mouse/keyboard combination - */ - __publicField$29(this, "getOpStateFromAction", (mouse, key) => { - let action; - for (let i = 0; i < this.mouseActions.length; i++) { - action = this.mouseActions[i]; - if (action.mouse == mouse && action.key == key) return action.state; - } - if (key) for (let i = 0; i < this.mouseActions.length; i++) { - action = this.mouseActions[i]; - if (action.mouse == mouse && action.key == null) return action.state; - } - return null; - }); - /** - * Calculate the angle between two pointers - * @param {PointerEvent} p1 - * @param {PointerEvent} p2 - * @returns {Number} The angle between two pointers in degrees - */ - __publicField$29(this, "getAngle", (p1, p2) => { - return Math.atan2(p2.clientY - p1.clientY, p2.clientX - p1.clientX) * 180 / Math.PI; - }); - /** - * Update a PointerEvent inside current pointerevents array - * @param {PointerEvent} event - */ - __publicField$29(this, "updateTouchEvent", (event) => { - for (let i = 0; i < this._touchCurrent.length; i++) if (this._touchCurrent[i].pointerId == event.pointerId) { - this._touchCurrent.splice(i, 1, event); - break; - } - }); - /** - * Calculate the angular speed - * @param {Number} p0 Position at t0 - * @param {Number} p1 Position at t1 - * @param {Number} t0 Initial time in milliseconds - * @param {Number} t1 Ending time in milliseconds - */ - __publicField$29(this, "calculateAngularSpeed", (p0, p1, t0, t1) => { - const s = p1 - p0; - const t = (t1 - t0) / 1e3; - if (t == 0) return 0; - return s / t; - }); - /** - * Calculate the distance between two pointers - * @param {PointerEvent} p0 The first pointer - * @param {PointerEvent} p1 The second pointer - * @returns {number} The distance between the two pointers - */ - __publicField$29(this, "calculatePointersDistance", (p0, p1) => { - return Math.sqrt(Math.pow(p1.clientX - p0.clientX, 2) + Math.pow(p1.clientY - p0.clientY, 2)); - }); - /** - * Calculate the rotation axis as the vector perpendicular between two vectors - * @param {Vector3} vec1 The first vector - * @param {Vector3} vec2 The second vector - * @returns {Vector3} The normalized rotation axis - */ - __publicField$29(this, "calculateRotationAxis", (vec1, vec2) => { - this._rotationMatrix.extractRotation(this._cameraMatrixState); - this._quat.setFromRotationMatrix(this._rotationMatrix); - this._rotationAxis.crossVectors(vec1, vec2).applyQuaternion(this._quat); - return this._rotationAxis.normalize().clone(); - }); - /** - * Calculate the trackball radius so that gizmo's diamater will be 2/3 of the minimum side of the camera frustum - * @param {Camera} camera - * @returns {Number} The trackball radius - */ - __publicField$29(this, "calculateTbRadius", (camera) => { - const factor = .67; - const distance = camera.position.distanceTo(this._gizmos.position); - if (camera instanceof PerspectiveCamera) { - const halfFovV = MathUtils.DEG2RAD * camera.fov * .5; - const halfFovH = Math.atan(camera.aspect * Math.tan(halfFovV)); - return Math.tan(Math.min(halfFovV, halfFovH)) * distance * factor; - } else if (camera instanceof OrthographicCamera) return Math.min(camera.top, camera.right) * factor; - }); - /** - * Focus operation consist of positioning the point of interest in front of the camera and a slightly zoom in - * @param {Vector3} point The point of interest - * @param {Number} size Scale factor - * @param {Number} amount Amount of operation to be completed (used for focus animations, default is complete full operation) - */ - __publicField$29(this, "focus", (point, size, amount = 1) => { - if (this.camera) { - const focusPoint = point.clone(); - focusPoint.sub(this._gizmos.position).multiplyScalar(amount); - this._translationMatrix.makeTranslation(focusPoint.x, focusPoint.y, focusPoint.z); - const gizmoStateTemp = this._gizmoMatrixState.clone(); - this._gizmoMatrixState.premultiply(this._translationMatrix); - this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); - const cameraStateTemp = this._cameraMatrixState.clone(); - this._cameraMatrixState.premultiply(this._translationMatrix); - this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale); - if (this.enableZoom) this.applyTransformMatrix(this.applyScale(size, this._gizmos.position)); - this._gizmoMatrixState.copy(gizmoStateTemp); - this._cameraMatrixState.copy(cameraStateTemp); - } - }); - /** - * Draw a grid and add it to the scene - */ - __publicField$29(this, "drawGrid", () => { - if (this.scene) { - const color = 8947848; - const multiplier = 3; - let size, divisions, maxLength, tick; - if (this.camera instanceof OrthographicCamera) { - const width = this.camera.right - this.camera.left; - const height = this.camera.bottom - this.camera.top; - maxLength = Math.max(width, height); - tick = maxLength / 20; - size = maxLength / this.camera.zoom * multiplier; - divisions = size / tick * this.camera.zoom; - } else if (this.camera instanceof PerspectiveCamera) { - const distance = this.camera.position.distanceTo(this._gizmos.position); - const halfFovV = MathUtils.DEG2RAD * this.camera.fov * .5; - const halfFovH = Math.atan(this.camera.aspect * Math.tan(halfFovV)); - maxLength = Math.tan(Math.max(halfFovV, halfFovH)) * distance * 2; - tick = maxLength / 20; - size = maxLength * multiplier; - divisions = size / tick; - } - if (this._grid == null && this.camera) { - this._grid = new GridHelper(size, divisions, color, color); - this._grid.position.copy(this._gizmos.position); - this._gridPosition.copy(this._grid.position); - this._grid.quaternion.copy(this.camera.quaternion); - this._grid.rotateX(Math.PI * .5); - this.scene.add(this._grid); - } - } - }); - __publicField$29(this, "connect", (domElement) => { - if (domElement === document) console.error("THREE.ArcballControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead."); - this.domElement = domElement; - this.domElement.style.touchAction = "none"; - this.domElement.addEventListener("contextmenu", this.onContextMenu); - this.domElement.addEventListener("pointerdown", this.onPointerDown); - this.domElement.addEventListener("pointercancel", this.onPointerCancel); - this.domElement.addEventListener("wheel", this.onWheel); - }); - /** - * Remove all listeners, stop animations and clean scene - */ - __publicField$29(this, "dispose", () => { - var _a, _b, _c, _d, _e; - if (this._animationId != -1) window.cancelAnimationFrame(this._animationId); - (_a = this.domElement) == null || _a.removeEventListener("pointerdown", this.onPointerDown); - (_b = this.domElement) == null || _b.removeEventListener("pointercancel", this.onPointerCancel); - (_c = this.domElement) == null || _c.removeEventListener("wheel", this.onWheel); - (_d = this.domElement) == null || _d.removeEventListener("contextmenu", this.onContextMenu); - window.removeEventListener("pointermove", this.onPointerMove); - window.removeEventListener("pointerup", this.onPointerUp); - window.removeEventListener("resize", this.onWindowResize); - (_e = this.scene) == null || _e.remove(this._gizmos); - this.disposeGrid(); - }); - /** - * remove the grid from the scene - */ - __publicField$29(this, "disposeGrid", () => { - if (this._grid && this.scene) { - this.scene.remove(this._grid); - this._grid = null; - } - }); - /** - * Compute the easing out cubic function for ease out effect in animation - * @param {Number} t The absolute progress of the animation in the bound of 0 (beginning of the) and 1 (ending of animation) - * @returns {Number} Result of easing out cubic at time t - */ - __publicField$29(this, "easeOutCubic", (t) => { - return 1 - Math.pow(1 - t, 3); - }); - /** - * Make rotation gizmos more or less visible - * @param {Boolean} isActive If true, make gizmos more visible - */ - __publicField$29(this, "activateGizmos", (isActive) => { - for (const gizmo of this._gizmos.children) gizmo.material.setValues({ opacity: isActive ? 1 : .6 }); - }); - /** - * Calculate the cursor position in NDC - * @param {number} x Cursor horizontal coordinate within the canvas - * @param {number} y Cursor vertical coordinate within the canvas - * @param {HTMLElement} canvas The canvas where the renderer draws its output - * @returns {Vector2} Cursor normalized position inside the canvas - */ - __publicField$29(this, "getCursorNDC", (cursorX, cursorY, canvas) => { - const canvasRect = canvas.getBoundingClientRect(); - this._v2_1.setX((cursorX - canvasRect.left) / canvasRect.width * 2 - 1); - this._v2_1.setY((canvasRect.bottom - cursorY) / canvasRect.height * 2 - 1); - return this._v2_1.clone(); - }); - /** - * Calculate the cursor position inside the canvas x/y coordinates with the origin being in the center of the canvas - * @param {Number} x Cursor horizontal coordinate within the canvas - * @param {Number} y Cursor vertical coordinate within the canvas - * @param {HTMLElement} canvas The canvas where the renderer draws its output - * @returns {Vector2} Cursor position inside the canvas - */ - __publicField$29(this, "getCursorPosition", (cursorX, cursorY, canvas) => { - this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas)); - if (this.camera instanceof OrthographicCamera) { - this._v2_1.x *= (this.camera.right - this.camera.left) * .5; - this._v2_1.y *= (this.camera.top - this.camera.bottom) * .5; - } - return this._v2_1.clone(); - }); - /** - * Set the camera to be controlled - * @param {Camera} camera The virtual camera to be controlled - */ - __publicField$29(this, "setCamera", (camera) => { - if (camera) { - camera.lookAt(this.target); - camera.updateMatrix(); - if (camera instanceof PerspectiveCamera) { - this._fov0 = camera.fov; - this._fovState = camera.fov; - } - this._cameraMatrixState0.copy(camera.matrix); - this._cameraMatrixState.copy(this._cameraMatrixState0); - this._cameraProjectionState.copy(camera.projectionMatrix); - this._zoom0 = camera.zoom; - this._zoomState = this._zoom0; - this._initialNear = camera.near; - this._nearPos0 = camera.position.distanceTo(this.target) - camera.near; - this._nearPos = this._initialNear; - this._initialFar = camera.far; - this._farPos0 = camera.position.distanceTo(this.target) - camera.far; - this._farPos = this._initialFar; - this._up0.copy(camera.up); - this._upState.copy(camera.up); - this.camera = camera; - this.camera.updateProjectionMatrix(); - const tbRadius = this.calculateTbRadius(camera); - if (tbRadius !== void 0) this._tbRadius = tbRadius; - this.makeGizmos(this.target, this._tbRadius); - } - }); - /** - * Creates the rotation gizmos matching trackball center and radius - * @param {Vector3} tbCenter The trackball center - * @param {number} tbRadius The trackball radius - */ - __publicField$29(this, "makeGizmos", (tbCenter, tbRadius) => { - const points = new EllipseCurve(0, 0, tbRadius, tbRadius).getPoints(this._curvePts); - const curveGeometry = new BufferGeometry().setFromPoints(points); - const curveMaterialX = new LineBasicMaterial({ - color: 16744576, - fog: false, - transparent: true, - opacity: .6 - }); - const curveMaterialY = new LineBasicMaterial({ - color: 8454016, - fog: false, - transparent: true, - opacity: .6 - }); - const curveMaterialZ = new LineBasicMaterial({ - color: 8421631, - fog: false, - transparent: true, - opacity: .6 - }); - const gizmoX = new Line(curveGeometry, curveMaterialX); - const gizmoY = new Line(curveGeometry, curveMaterialY); - const gizmoZ = new Line(curveGeometry, curveMaterialZ); - const rotation = Math.PI * .5; - gizmoX.rotation.x = rotation; - gizmoY.rotation.y = rotation; - this._gizmoMatrixState0.identity().setPosition(tbCenter); - this._gizmoMatrixState.copy(this._gizmoMatrixState0); - if (this.camera && this.camera.zoom != 1) { - const size = 1 / this.camera.zoom; - this._scaleMatrix.makeScale(size, size, size); - this._translationMatrix.makeTranslation(-tbCenter.x, -tbCenter.y, -tbCenter.z); - this._gizmoMatrixState.premultiply(this._translationMatrix).premultiply(this._scaleMatrix); - this._translationMatrix.makeTranslation(tbCenter.x, tbCenter.y, tbCenter.z); - this._gizmoMatrixState.premultiply(this._translationMatrix); - } - this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); - this._gizmos.clear(); - this._gizmos.add(gizmoX); - this._gizmos.add(gizmoY); - this._gizmos.add(gizmoZ); - }); - /** - * Perform animation for focus operation - * @param {Number} time Instant in which this function is called as performance.now() - * @param {Vector3} point Point of interest for focus operation - * @param {Matrix4} cameraMatrix Camera matrix - * @param {Matrix4} gizmoMatrix Gizmos matrix - */ - __publicField$29(this, "onFocusAnim", (time, point, cameraMatrix, gizmoMatrix) => { - if (this._timeStart == -1) this._timeStart = time; - if (this._state == STATE.ANIMATION_FOCUS) { - const animTime = (time - this._timeStart) / this.focusAnimationTime; - this._gizmoMatrixState.copy(gizmoMatrix); - if (animTime >= 1) { - this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); - this.focus(point, this.scaleFactor); - this._timeStart = -1; - this.updateTbState(STATE.IDLE, false); - this.activateGizmos(false); - this.dispatchEvent(_changeEvent); - } else { - const amount = this.easeOutCubic(animTime); - const size = 1 - amount + this.scaleFactor * amount; - this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); - this.focus(point, size, amount); - this.dispatchEvent(_changeEvent); - const self = this; - this._animationId = window.requestAnimationFrame(function(t) { - self.onFocusAnim(t, point, cameraMatrix, gizmoMatrix.clone()); - }); - } - } else { - this._animationId = -1; - this._timeStart = -1; - } - }); - /** - * Perform animation for rotation operation - * @param {Number} time Instant in which this function is called as performance.now() - * @param {Vector3} rotationAxis Rotation axis - * @param {number} w0 Initial angular velocity - */ - __publicField$29(this, "onRotationAnim", (time, rotationAxis, w0) => { - if (this._timeStart == -1) { - this._anglePrev = 0; - this._angleCurrent = 0; - this._timeStart = time; - } - if (this._state == STATE.ANIMATION_ROTATE) { - const deltaTime = (time - this._timeStart) / 1e3; - if (w0 + -this.dampingFactor * deltaTime > 0) { - this._angleCurrent = .5 * -this.dampingFactor * Math.pow(deltaTime, 2) + w0 * deltaTime + 0; - this.applyTransformMatrix(this.rotate(rotationAxis, this._angleCurrent)); - this.dispatchEvent(_changeEvent); - const self = this; - this._animationId = window.requestAnimationFrame(function(t) { - self.onRotationAnim(t, rotationAxis, w0); - }); - } else { - this._animationId = -1; - this._timeStart = -1; - this.updateTbState(STATE.IDLE, false); - this.activateGizmos(false); - this.dispatchEvent(_changeEvent); - } - } else { - this._animationId = -1; - this._timeStart = -1; - if (this._state != STATE.ROTATE) { - this.activateGizmos(false); - this.dispatchEvent(_changeEvent); - } - } - }); - /** - * Perform pan operation moving camera between two points - * @param {Vector3} p0 Initial point - * @param {Vector3} p1 Ending point - * @param {Boolean} adjust If movement should be adjusted considering camera distance (Perspective only) - */ - __publicField$29(this, "pan", (p0, p1, adjust = false) => { - if (this.camera) { - const movement = p0.clone().sub(p1); - if (this.camera instanceof OrthographicCamera) movement.multiplyScalar(1 / this.camera.zoom); - if (this.camera instanceof PerspectiveCamera && adjust) { - this._v3_1.setFromMatrixPosition(this._cameraMatrixState0); - this._v3_2.setFromMatrixPosition(this._gizmoMatrixState0); - const distanceFactor = this._v3_1.distanceTo(this._v3_2) / this.camera.position.distanceTo(this._gizmos.position); - movement.multiplyScalar(1 / distanceFactor); - } - this._v3_1.set(movement.x, movement.y, 0).applyQuaternion(this.camera.quaternion); - this._m4_1.makeTranslation(this._v3_1.x, this._v3_1.y, this._v3_1.z); - this.setTransformationMatrices(this._m4_1, this._m4_1); - } - return _transformation; - }); - /** - * Reset trackball - */ - __publicField$29(this, "reset", () => { - if (this.camera) { - this.camera.zoom = this._zoom0; - if (this.camera instanceof PerspectiveCamera) this.camera.fov = this._fov0; - this.camera.near = this._nearPos; - this.camera.far = this._farPos; - this._cameraMatrixState.copy(this._cameraMatrixState0); - this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale); - this.camera.up.copy(this._up0); - this.camera.updateMatrix(); - this.camera.updateProjectionMatrix(); - this._gizmoMatrixState.copy(this._gizmoMatrixState0); - this._gizmoMatrixState0.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); - this._gizmos.updateMatrix(); - const tbRadius = this.calculateTbRadius(this.camera); - if (tbRadius !== void 0) this._tbRadius = tbRadius; - this.makeGizmos(this._gizmos.position, this._tbRadius); - this.camera.lookAt(this._gizmos.position); - this.updateTbState(STATE.IDLE, false); - this.dispatchEvent(_changeEvent); - } - }); - /** - * Rotate the camera around an axis passing by trackball's center - * @param {Vector3} axis Rotation axis - * @param {number} angle Angle in radians - * @returns {Object} Object with 'camera' field containing transformation matrix resulting from the operation to be applied to the camera - */ - __publicField$29(this, "rotate", (axis, angle) => { - const point = this._gizmos.position; - this._translationMatrix.makeTranslation(-point.x, -point.y, -point.z); - this._rotationMatrix.makeRotationAxis(axis, -angle); - this._m4_1.makeTranslation(point.x, point.y, point.z); - this._m4_1.multiply(this._rotationMatrix); - this._m4_1.multiply(this._translationMatrix); - this.setTransformationMatrices(this._m4_1); - return _transformation; - }); - __publicField$29(this, "copyState", () => { - if (this.camera) { - const state = JSON.stringify(this.camera instanceof OrthographicCamera ? { arcballState: { - cameraFar: this.camera.far, - cameraMatrix: this.camera.matrix, - cameraNear: this.camera.near, - cameraUp: this.camera.up, - cameraZoom: this.camera.zoom, - gizmoMatrix: this._gizmos.matrix - } } : { arcballState: { - cameraFar: this.camera.far, - cameraFov: this.camera.fov, - cameraMatrix: this.camera.matrix, - cameraNear: this.camera.near, - cameraUp: this.camera.up, - cameraZoom: this.camera.zoom, - gizmoMatrix: this._gizmos.matrix - } }); - navigator.clipboard.writeText(state); - } - }); - __publicField$29(this, "pasteState", () => { - const self = this; - navigator.clipboard.readText().then(function resolved(value) { - self.setStateFromJSON(value); - }); - }); - /** - * Save the current state of the control. This can later be recovered with .reset - */ - __publicField$29(this, "saveState", () => { - if (!this.camera) return; - this._cameraMatrixState0.copy(this.camera.matrix); - this._gizmoMatrixState0.copy(this._gizmos.matrix); - this._nearPos = this.camera.near; - this._farPos = this.camera.far; - this._zoom0 = this.camera.zoom; - this._up0.copy(this.camera.up); - if (this.camera instanceof PerspectiveCamera) this._fov0 = this.camera.fov; - }); - /** - * Perform uniform scale operation around a given point - * @param {Number} size Scale factor - * @param {Vector3} point Point around which scale - * @param {Boolean} scaleGizmos If gizmos should be scaled (Perspective only) - * @returns {Object} Object with 'camera' and 'gizmo' fields containing transformation matrices resulting from the operation to be applied to the camera and gizmos - */ - __publicField$29(this, "applyScale", (size, point, scaleGizmos = true) => { - if (!this.camera) return; - const scalePoint = point.clone(); - let sizeInverse = 1 / size; - if (this.camera instanceof OrthographicCamera) { - this.camera.zoom = this._zoomState; - this.camera.zoom *= size; - if (this.camera.zoom > this.maxZoom) { - this.camera.zoom = this.maxZoom; - sizeInverse = this._zoomState / this.maxZoom; - } else if (this.camera.zoom < this.minZoom) { - this.camera.zoom = this.minZoom; - sizeInverse = this._zoomState / this.minZoom; - } - this.camera.updateProjectionMatrix(); - this._v3_1.setFromMatrixPosition(this._gizmoMatrixState); - this._scaleMatrix.makeScale(sizeInverse, sizeInverse, sizeInverse); - this._translationMatrix.makeTranslation(-this._v3_1.x, -this._v3_1.y, -this._v3_1.z); - this._m4_2.makeTranslation(this._v3_1.x, this._v3_1.y, this._v3_1.z).multiply(this._scaleMatrix); - this._m4_2.multiply(this._translationMatrix); - scalePoint.sub(this._v3_1); - const amount = scalePoint.clone().multiplyScalar(sizeInverse); - scalePoint.sub(amount); - this._m4_1.makeTranslation(scalePoint.x, scalePoint.y, scalePoint.z); - this._m4_2.premultiply(this._m4_1); - this.setTransformationMatrices(this._m4_1, this._m4_2); - return _transformation; - } - if (this.camera instanceof PerspectiveCamera) { - this._v3_1.setFromMatrixPosition(this._cameraMatrixState); - this._v3_2.setFromMatrixPosition(this._gizmoMatrixState); - let distance = this._v3_1.distanceTo(scalePoint); - let amount = distance - distance * sizeInverse; - const newDistance = distance - amount; - if (newDistance < this.minDistance) { - sizeInverse = this.minDistance / distance; - amount = distance - distance * sizeInverse; - } else if (newDistance > this.maxDistance) { - sizeInverse = this.maxDistance / distance; - amount = distance - distance * sizeInverse; - } - let direction = scalePoint.clone().sub(this._v3_1).normalize().multiplyScalar(amount); - this._m4_1.makeTranslation(direction.x, direction.y, direction.z); - if (scaleGizmos) { - const pos = this._v3_2; - distance = pos.distanceTo(scalePoint); - amount = distance - distance * sizeInverse; - direction = scalePoint.clone().sub(this._v3_2).normalize().multiplyScalar(amount); - this._translationMatrix.makeTranslation(pos.x, pos.y, pos.z); - this._scaleMatrix.makeScale(sizeInverse, sizeInverse, sizeInverse); - this._m4_2.makeTranslation(direction.x, direction.y, direction.z).multiply(this._translationMatrix); - this._m4_2.multiply(this._scaleMatrix); - this._translationMatrix.makeTranslation(-pos.x, -pos.y, -pos.z); - this._m4_2.multiply(this._translationMatrix); - this.setTransformationMatrices(this._m4_1, this._m4_2); - } else this.setTransformationMatrices(this._m4_1); - return _transformation; - } - }); - /** - * Set camera fov - * @param {Number} value fov to be setted - */ - __publicField$29(this, "setFov", (value) => { - if (this.camera instanceof PerspectiveCamera) { - this.camera.fov = MathUtils.clamp(value, this.minFov, this.maxFov); - this.camera.updateProjectionMatrix(); - } - }); - /** - * Set the trackball's center point - * @param {Number} x X coordinate - * @param {Number} y Y coordinate - * @param {Number} z Z coordinate - */ - __publicField$29(this, "setTarget", (x, y, z) => { - if (this.camera) { - this.target.set(x, y, z); - this._gizmos.position.set(x, y, z); - const tbRadius = this.calculateTbRadius(this.camera); - if (tbRadius !== void 0) this._tbRadius = tbRadius; - this.makeGizmos(this.target, this._tbRadius); - this.camera.lookAt(this.target); - } - }); - /** - * Rotate camera around its direction axis passing by a given point by a given angle - * @param {Vector3} point The point where the rotation axis is passing trough - * @param {Number} angle Angle in radians - * @returns The computed transormation matix - */ - __publicField$29(this, "zRotate", (point, angle) => { - this._rotationMatrix.makeRotationAxis(this._rotationAxis, angle); - this._translationMatrix.makeTranslation(-point.x, -point.y, -point.z); - this._m4_1.makeTranslation(point.x, point.y, point.z); - this._m4_1.multiply(this._rotationMatrix); - this._m4_1.multiply(this._translationMatrix); - this._v3_1.setFromMatrixPosition(this._gizmoMatrixState).sub(point); - this._v3_2.copy(this._v3_1).applyAxisAngle(this._rotationAxis, angle); - this._v3_2.sub(this._v3_1); - this._m4_2.makeTranslation(this._v3_2.x, this._v3_2.y, this._v3_2.z); - this.setTransformationMatrices(this._m4_1, this._m4_2); - return _transformation; - }); - /** - * Unproject the cursor on the 3D object surface - * @param {Vector2} cursor Cursor coordinates in NDC - * @param {Camera} camera Virtual camera - * @returns {Vector3} The point of intersection with the model, if exist, null otherwise - */ - __publicField$29(this, "unprojectOnObj", (cursor, camera) => { - if (!this.scene) return null; - const raycaster = new Raycaster(); - raycaster.near = camera.near; - raycaster.far = camera.far; - raycaster.setFromCamera(cursor, camera); - const intersect = raycaster.intersectObjects(this.scene.children, true); - for (let i = 0; i < intersect.length; i++) if (intersect[i].object.uuid != this._gizmos.uuid && intersect[i].face) return intersect[i].point.clone(); - return null; - }); - /** - * Unproject the cursor on the trackball surface - * @param {Camera} camera The virtual camera - * @param {Number} cursorX Cursor horizontal coordinate on screen - * @param {Number} cursorY Cursor vertical coordinate on screen - * @param {HTMLElement} canvas The canvas where the renderer draws its output - * @param {number} tbRadius The trackball radius - * @returns {Vector3} The unprojected point on the trackball surface - */ - __publicField$29(this, "unprojectOnTbSurface", (camera, cursorX, cursorY, canvas, tbRadius) => { - if (camera instanceof OrthographicCamera) { - this._v2_1.copy(this.getCursorPosition(cursorX, cursorY, canvas)); - this._v3_1.set(this._v2_1.x, this._v2_1.y, 0); - const x2 = Math.pow(this._v2_1.x, 2); - const y2 = Math.pow(this._v2_1.y, 2); - const r2 = Math.pow(this._tbRadius, 2); - if (x2 + y2 <= r2 * .5) this._v3_1.setZ(Math.sqrt(r2 - (x2 + y2))); - else this._v3_1.setZ(r2 * .5 / Math.sqrt(x2 + y2)); - return this._v3_1; - } - if (camera instanceof PerspectiveCamera) { - this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas)); - this._v3_1.set(this._v2_1.x, this._v2_1.y, -1); - this._v3_1.applyMatrix4(camera.projectionMatrixInverse); - const rayDir = this._v3_1.clone().normalize(); - const cameraGizmoDistance = camera.position.distanceTo(this._gizmos.position); - const radius2 = Math.pow(tbRadius, 2); - const h = this._v3_1.z; - const l = Math.sqrt(Math.pow(this._v3_1.x, 2) + Math.pow(this._v3_1.y, 2)); - if (l == 0) { - rayDir.set(this._v3_1.x, this._v3_1.y, tbRadius); - return rayDir; - } - const m = h / l; - const q = cameraGizmoDistance; - let a = Math.pow(m, 2) + 1; - let b = 2 * m * q; - let c = Math.pow(q, 2) - radius2; - let delta = Math.pow(b, 2) - 4 * a * c; - if (delta >= 0) { - this._v2_1.setX((-b - Math.sqrt(delta)) / (2 * a)); - this._v2_1.setY(m * this._v2_1.x + q); - if (MathUtils.RAD2DEG * this._v2_1.angle() >= 45) { - const rayLength2 = Math.sqrt(Math.pow(this._v2_1.x, 2) + Math.pow(cameraGizmoDistance - this._v2_1.y, 2)); - rayDir.multiplyScalar(rayLength2); - rayDir.z += cameraGizmoDistance; - return rayDir; - } - } - a = m; - b = q; - c = -radius2 * .5; - delta = Math.pow(b, 2) - 4 * a * c; - this._v2_1.setX((-b - Math.sqrt(delta)) / (2 * a)); - this._v2_1.setY(m * this._v2_1.x + q); - const rayLength = Math.sqrt(Math.pow(this._v2_1.x, 2) + Math.pow(cameraGizmoDistance - this._v2_1.y, 2)); - rayDir.multiplyScalar(rayLength); - rayDir.z += cameraGizmoDistance; - return rayDir; - } - }); - /** - * Unproject the cursor on the plane passing through the center of the trackball orthogonal to the camera - * @param {Camera} camera The virtual camera - * @param {Number} cursorX Cursor horizontal coordinate on screen - * @param {Number} cursorY Cursor vertical coordinate on screen - * @param {HTMLElement} canvas The canvas where the renderer draws its output - * @param {Boolean} initialDistance If initial distance between camera and gizmos should be used for calculations instead of current (Perspective only) - * @returns {Vector3} The unprojected point on the trackball plane - */ - __publicField$29(this, "unprojectOnTbPlane", (camera, cursorX, cursorY, canvas, initialDistance = false) => { - if (camera instanceof OrthographicCamera) { - this._v2_1.copy(this.getCursorPosition(cursorX, cursorY, canvas)); - this._v3_1.set(this._v2_1.x, this._v2_1.y, 0); - return this._v3_1.clone(); - } - if (camera instanceof PerspectiveCamera) { - this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas)); - this._v3_1.set(this._v2_1.x, this._v2_1.y, -1); - this._v3_1.applyMatrix4(camera.projectionMatrixInverse); - const rayDir = this._v3_1.clone().normalize(); - const h = this._v3_1.z; - const l = Math.sqrt(Math.pow(this._v3_1.x, 2) + Math.pow(this._v3_1.y, 2)); - let cameraGizmoDistance; - if (initialDistance) cameraGizmoDistance = this._v3_1.setFromMatrixPosition(this._cameraMatrixState0).distanceTo(this._v3_2.setFromMatrixPosition(this._gizmoMatrixState0)); - else cameraGizmoDistance = camera.position.distanceTo(this._gizmos.position); - if (l == 0) { - rayDir.set(0, 0, 0); - return rayDir; - } - const m = h / l; - const q = cameraGizmoDistance; - const x = -q / m; - const rayLength = Math.sqrt(Math.pow(q, 2) + Math.pow(x, 2)); - rayDir.multiplyScalar(rayLength); - rayDir.z = 0; - return rayDir; - } - }); - /** - * Update camera and gizmos state - */ - __publicField$29(this, "updateMatrixState", () => { - if (!this.camera) return; - this._cameraMatrixState.copy(this.camera.matrix); - this._gizmoMatrixState.copy(this._gizmos.matrix); - if (this.camera instanceof OrthographicCamera) { - this._cameraProjectionState.copy(this.camera.projectionMatrix); - this.camera.updateProjectionMatrix(); - this._zoomState = this.camera.zoom; - } - if (this.camera instanceof PerspectiveCamera) this._fovState = this.camera.fov; - }); - /** - * Update the trackball FSA - * @param {STATE} newState New state of the FSA - * @param {Boolean} updateMatrices If matriices state should be updated - */ - __publicField$29(this, "updateTbState", (newState, updateMatrices) => { - this._state = newState; - if (updateMatrices) this.updateMatrixState(); - }); - __publicField$29(this, "update", () => { - const EPS = 1e-6; - if (!this.target.equals(this._currentTarget) && this.camera) { - this._gizmos.position.set(this.target.x, this.target.y, this.target.z); - const tbRadius = this.calculateTbRadius(this.camera); - if (tbRadius !== void 0) this._tbRadius = tbRadius; - this.makeGizmos(this.target, this._tbRadius); - this._currentTarget.copy(this.target); - } - if (!this.camera) return; - if (this.camera instanceof OrthographicCamera) { - if (this.camera.zoom > this.maxZoom || this.camera.zoom < this.minZoom) { - const newZoom = MathUtils.clamp(this.camera.zoom, this.minZoom, this.maxZoom); - this.applyTransformMatrix(this.applyScale(newZoom / this.camera.zoom, this._gizmos.position, true)); - } - } - if (this.camera instanceof PerspectiveCamera) { - const distance = this.camera.position.distanceTo(this._gizmos.position); - if (distance > this.maxDistance + EPS || distance < this.minDistance - EPS) { - const newDistance = MathUtils.clamp(distance, this.minDistance, this.maxDistance); - this.applyTransformMatrix(this.applyScale(newDistance / distance, this._gizmos.position)); - this.updateMatrixState(); - } - if (this.camera.fov < this.minFov || this.camera.fov > this.maxFov) { - this.camera.fov = MathUtils.clamp(this.camera.fov, this.minFov, this.maxFov); - this.camera.updateProjectionMatrix(); - } - const oldRadius = this._tbRadius; - const tbRadius = this.calculateTbRadius(this.camera); - if (tbRadius !== void 0) this._tbRadius = tbRadius; - if (oldRadius < this._tbRadius - EPS || oldRadius > this._tbRadius + EPS) { - const scale = (this._gizmos.scale.x + this._gizmos.scale.y + this._gizmos.scale.z) / 3; - const newRadius = this._tbRadius / scale; - const points = new EllipseCurve(0, 0, newRadius, newRadius).getPoints(this._curvePts); - const curveGeometry = new BufferGeometry().setFromPoints(points); - for (const gizmo in this._gizmos.children) { - const child = this._gizmos.children[gizmo]; - child.geometry = curveGeometry; - } - } - } - this.camera.lookAt(this._gizmos.position); - }); - __publicField$29(this, "setStateFromJSON", (json) => { - const state = JSON.parse(json); - if (state.arcballState && this.camera) { - this._cameraMatrixState.fromArray(state.arcballState.cameraMatrix.elements); - this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale); - this.camera.up.copy(state.arcballState.cameraUp); - this.camera.near = state.arcballState.cameraNear; - this.camera.far = state.arcballState.cameraFar; - this.camera.zoom = state.arcballState.cameraZoom; - if (this.camera instanceof PerspectiveCamera) this.camera.fov = state.arcballState.cameraFov; - this._gizmoMatrixState.fromArray(state.arcballState.gizmoMatrix.elements); - this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); - this.camera.updateMatrix(); - this.camera.updateProjectionMatrix(); - this._gizmos.updateMatrix(); - const tbRadius = this.calculateTbRadius(this.camera); - if (tbRadius !== void 0) this._tbRadius = tbRadius; - const gizmoTmp = new Matrix4().copy(this._gizmoMatrixState0); - this.makeGizmos(this._gizmos.position, this._tbRadius); - this._gizmoMatrixState0.copy(gizmoTmp); - this.camera.lookAt(this._gizmos.position); - this.updateTbState(STATE.IDLE, false); - this.dispatchEvent(_changeEvent); - } - }); - this.camera = null; - this.domElement = domElement; - this.scene = scene; - this.mouseActions = []; - this._mouseOp = null; - this._v2_1 = new Vector2(); - this._v3_1 = new Vector3(); - this._v3_2 = new Vector3(); - this._m4_1 = new Matrix4(); - this._m4_2 = new Matrix4(); - this._quat = new Quaternion(); - this._translationMatrix = new Matrix4(); - this._rotationMatrix = new Matrix4(); - this._scaleMatrix = new Matrix4(); - this._rotationAxis = new Vector3(); - this._cameraMatrixState = new Matrix4(); - this._cameraProjectionState = new Matrix4(); - this._fovState = 1; - this._upState = new Vector3(); - this._zoomState = 1; - this._nearPos = 0; - this._farPos = 0; - this._gizmoMatrixState = new Matrix4(); - this._up0 = new Vector3(); - this._zoom0 = 1; - this._fov0 = 0; - this._initialNear = 0; - this._nearPos0 = 0; - this._initialFar = 0; - this._farPos0 = 0; - this._cameraMatrixState0 = new Matrix4(); - this._gizmoMatrixState0 = new Matrix4(); - this._button = -1; - this._touchStart = []; - this._touchCurrent = []; - this._input = INPUT.NONE; - this._switchSensibility = 32; - this._startFingerDistance = 0; - this._currentFingerDistance = 0; - this._startFingerRotation = 0; - this._currentFingerRotation = 0; - this._devPxRatio = 0; - this._downValid = true; - this._nclicks = 0; - this._downEvents = []; - this._clickStart = 0; - this._maxDownTime = 250; - this._maxInterval = 300; - this._posThreshold = 24; - this._movementThreshold = 24; - this._currentCursorPosition = new Vector3(); - this._startCursorPosition = new Vector3(); - this._grid = null; - this._gridPosition = new Vector3(); - this._gizmos = new Group(); - this._curvePts = 128; - this._timeStart = -1; - this._animationId = -1; - this.focusAnimationTime = 500; - this._timePrev = 0; - this._timeCurrent = 0; - this._anglePrev = 0; - this._angleCurrent = 0; - this._cursorPosPrev = new Vector3(); - this._cursorPosCurr = new Vector3(); - this._wPrev = 0; - this._wCurr = 0; - this.adjustNearFar = false; - this.scaleFactor = 1.1; - this.dampingFactor = 25; - this.wMax = 20; - this.enableAnimations = true; - this.enableGrid = false; - this.cursorZoom = false; - this.minFov = 5; - this.maxFov = 90; - this.enabled = true; - this.enablePan = true; - this.enableRotate = true; - this.enableZoom = true; - this.minDistance = 0; - this.maxDistance = Infinity; - this.minZoom = 0; - this.maxZoom = Infinity; - this.target = new Vector3(0, 0, 0); - this._currentTarget = new Vector3(0, 0, 0); - this._tbRadius = 1; - this._state = STATE.IDLE; - this.setCamera(camera); - if (this.scene) this.scene.add(this._gizmos); - this._devPxRatio = window.devicePixelRatio; - this.initializeMouseActions(); - if (this.domElement) this.connect(this.domElement); - window.addEventListener("resize", this.onWindowResize); - } - /** - * Apply a transformation matrix, to the camera and gizmos - * @param {Object} transformation Object containing matrices to apply to camera and gizmos - */ - applyTransformMatrix(transformation) { - if ((transformation == null ? void 0 : transformation.camera) && this.camera) { - this._m4_1.copy(this._cameraMatrixState).premultiply(transformation.camera); - this._m4_1.decompose(this.camera.position, this.camera.quaternion, this.camera.scale); - this.camera.updateMatrix(); - if (this._state == STATE.ROTATE || this._state == STATE.ZROTATE || this._state == STATE.ANIMATION_ROTATE) this.camera.up.copy(this._upState).applyQuaternion(this.camera.quaternion); - } - if (transformation == null ? void 0 : transformation.gizmos) { - this._m4_1.copy(this._gizmoMatrixState).premultiply(transformation.gizmos); - this._m4_1.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale); - this._gizmos.updateMatrix(); - } - if ((this._state == STATE.SCALE || this._state == STATE.FOCUS || this._state == STATE.ANIMATION_FOCUS) && this.camera) { - const tbRadius = this.calculateTbRadius(this.camera); - if (tbRadius !== void 0) this._tbRadius = tbRadius; - if (this.adjustNearFar) { - const cameraDistance = this.camera.position.distanceTo(this._gizmos.position); - const bb = new Box3(); - bb.setFromObject(this._gizmos); - const sphere = new Sphere(); - bb.getBoundingSphere(sphere); - const adjustedNearPosition = Math.max(this._nearPos0, sphere.radius + sphere.center.length()); - const regularNearPosition = cameraDistance - this._initialNear; - const minNearPos = Math.min(adjustedNearPosition, regularNearPosition); - this.camera.near = cameraDistance - minNearPos; - const adjustedFarPosition = Math.min(this._farPos0, -sphere.radius + sphere.center.length()); - const regularFarPosition = cameraDistance - this._initialFar; - const minFarPos = Math.min(adjustedFarPosition, regularFarPosition); - this.camera.far = cameraDistance - minFarPos; - this.camera.updateProjectionMatrix(); - } else { - let update = false; - if (this.camera.near != this._initialNear) { - this.camera.near = this._initialNear; - update = true; - } - if (this.camera.far != this._initialFar) { - this.camera.far = this._initialFar; - update = true; - } - if (update) this.camera.updateProjectionMatrix(); - } - } - } - /** - * Set gizmos visibility - * @param {Boolean} value Value of gizmos visibility - */ - setGizmosVisible(value) { - this._gizmos.visible = value; - this.dispatchEvent(_changeEvent); - } - /** - * Set values in transformation object - * @param {Matrix4} camera Transformation to be applied to the camera - * @param {Matrix4} gizmos Transformation to be applied to gizmos - */ - setTransformationMatrices(camera = null, gizmos = null) { - if (camera) if (_transformation.camera) _transformation.camera.copy(camera); - else _transformation.camera = camera.clone(); - else _transformation.camera = null; - if (gizmos) if (_transformation.gizmos) _transformation.gizmos.copy(gizmos); - else _transformation.gizmos = gizmos.clone(); - else _transformation.gizmos = null; - } -}; -//#endregion -//#region node_modules/three-stdlib/controls/FlyControls.js -var __defProp$28 = Object.defineProperty; -var __defNormalProp$28 = (obj, key, value) => key in obj ? __defProp$28(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$28 = (obj, key, value) => { - __defNormalProp$28(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -function contextmenu(event) { - event.preventDefault(); -} -var FlyControls = class extends EventDispatcher { - constructor(object, domElement) { - super(); - __publicField$28(this, "object"); - __publicField$28(this, "domElement", null); - __publicField$28(this, "movementSpeed", 1); - __publicField$28(this, "rollSpeed", .005); - __publicField$28(this, "dragToLook", false); - __publicField$28(this, "autoForward", false); - __publicField$28(this, "changeEvent", { type: "change" }); - __publicField$28(this, "EPS", 1e-6); - __publicField$28(this, "tmpQuaternion", new Quaternion()); - __publicField$28(this, "mouseStatus", 0); - __publicField$28(this, "movementSpeedMultiplier", 1); - __publicField$28(this, "moveState", { - up: 0, - down: 0, - left: 0, - right: 0, - forward: 0, - back: 0, - pitchUp: 0, - pitchDown: 0, - yawLeft: 0, - yawRight: 0, - rollLeft: 0, - rollRight: 0 - }); - __publicField$28(this, "moveVector", new Vector3(0, 0, 0)); - __publicField$28(this, "rotationVector", new Vector3(0, 0, 0)); - __publicField$28(this, "keydown", (event) => { - if (event.altKey) return; - switch (event.code) { - case "ShiftLeft": - case "ShiftRight": - this.movementSpeedMultiplier = .1; - break; - case "KeyW": - this.moveState.forward = 1; - break; - case "KeyS": - this.moveState.back = 1; - break; - case "KeyA": - this.moveState.left = 1; - break; - case "KeyD": - this.moveState.right = 1; - break; - case "KeyR": - this.moveState.up = 1; - break; - case "KeyF": - this.moveState.down = 1; - break; - case "ArrowUp": - this.moveState.pitchUp = 1; - break; - case "ArrowDown": - this.moveState.pitchDown = 1; - break; - case "ArrowLeft": - this.moveState.yawLeft = 1; - break; - case "ArrowRight": - this.moveState.yawRight = 1; - break; - case "KeyQ": - this.moveState.rollLeft = 1; - break; - case "KeyE": - this.moveState.rollRight = 1; - break; - } - this.updateMovementVector(); - this.updateRotationVector(); - }); - __publicField$28(this, "keyup", (event) => { - switch (event.code) { - case "ShiftLeft": - case "ShiftRight": - this.movementSpeedMultiplier = 1; - break; - case "KeyW": - this.moveState.forward = 0; - break; - case "KeyS": - this.moveState.back = 0; - break; - case "KeyA": - this.moveState.left = 0; - break; - case "KeyD": - this.moveState.right = 0; - break; - case "KeyR": - this.moveState.up = 0; - break; - case "KeyF": - this.moveState.down = 0; - break; - case "ArrowUp": - this.moveState.pitchUp = 0; - break; - case "ArrowDown": - this.moveState.pitchDown = 0; - break; - case "ArrowLeft": - this.moveState.yawLeft = 0; - break; - case "ArrowRight": - this.moveState.yawRight = 0; - break; - case "KeyQ": - this.moveState.rollLeft = 0; - break; - case "KeyE": - this.moveState.rollRight = 0; - break; - } - this.updateMovementVector(); - this.updateRotationVector(); - }); - __publicField$28(this, "pointerdown", (event) => { - if (this.dragToLook) this.mouseStatus++; - else { - switch (event.button) { - case 0: - this.moveState.forward = 1; - break; - case 2: - this.moveState.back = 1; - break; - } - this.updateMovementVector(); - } - }); - __publicField$28(this, "pointermove", (event) => { - if (!this.dragToLook || this.mouseStatus > 0) { - const container = this.getContainerDimensions(); - const halfWidth = container.size[0] / 2; - const halfHeight = container.size[1] / 2; - this.moveState.yawLeft = -(event.pageX - container.offset[0] - halfWidth) / halfWidth; - this.moveState.pitchDown = (event.pageY - container.offset[1] - halfHeight) / halfHeight; - this.updateRotationVector(); - } - }); - __publicField$28(this, "pointerup", (event) => { - if (this.dragToLook) { - this.mouseStatus--; - this.moveState.yawLeft = this.moveState.pitchDown = 0; - } else { - switch (event.button) { - case 0: - this.moveState.forward = 0; - break; - case 2: - this.moveState.back = 0; - break; - } - this.updateMovementVector(); - } - this.updateRotationVector(); - }); - __publicField$28(this, "lastQuaternion", new Quaternion()); - __publicField$28(this, "lastPosition", new Vector3()); - __publicField$28(this, "update", (delta) => { - const moveMult = delta * this.movementSpeed; - const rotMult = delta * this.rollSpeed; - this.object.translateX(this.moveVector.x * moveMult); - this.object.translateY(this.moveVector.y * moveMult); - this.object.translateZ(this.moveVector.z * moveMult); - this.tmpQuaternion.set(this.rotationVector.x * rotMult, this.rotationVector.y * rotMult, this.rotationVector.z * rotMult, 1).normalize(); - this.object.quaternion.multiply(this.tmpQuaternion); - if (this.lastPosition.distanceToSquared(this.object.position) > this.EPS || 8 * (1 - this.lastQuaternion.dot(this.object.quaternion)) > this.EPS) { - this.dispatchEvent(this.changeEvent); - this.lastQuaternion.copy(this.object.quaternion); - this.lastPosition.copy(this.object.position); - } - }); - __publicField$28(this, "updateMovementVector", () => { - const forward = this.moveState.forward || this.autoForward && !this.moveState.back ? 1 : 0; - this.moveVector.x = -this.moveState.left + this.moveState.right; - this.moveVector.y = -this.moveState.down + this.moveState.up; - this.moveVector.z = -forward + this.moveState.back; - }); - __publicField$28(this, "updateRotationVector", () => { - this.rotationVector.x = -this.moveState.pitchDown + this.moveState.pitchUp; - this.rotationVector.y = -this.moveState.yawRight + this.moveState.yawLeft; - this.rotationVector.z = -this.moveState.rollRight + this.moveState.rollLeft; - }); - __publicField$28(this, "getContainerDimensions", () => { - if (this.domElement != document && !(this.domElement instanceof Document)) return { - size: [this.domElement.offsetWidth, this.domElement.offsetHeight], - offset: [this.domElement.offsetLeft, this.domElement.offsetTop] - }; - else return { - size: [window.innerWidth, window.innerHeight], - offset: [0, 0] - }; - }); - __publicField$28(this, "connect", (domElement) => { - this.domElement = domElement; - if (!(domElement instanceof Document)) domElement.setAttribute("tabindex", -1); - this.domElement.addEventListener("contextmenu", contextmenu); - this.domElement.addEventListener("pointermove", this.pointermove); - this.domElement.addEventListener("pointerdown", this.pointerdown); - this.domElement.addEventListener("pointerup", this.pointerup); - window.addEventListener("keydown", this.keydown); - window.addEventListener("keyup", this.keyup); - }); - __publicField$28(this, "dispose", () => { - this.domElement.removeEventListener("contextmenu", contextmenu); - this.domElement.removeEventListener("pointermove", this.pointermove); - this.domElement.removeEventListener("pointerdown", this.pointerdown); - this.domElement.removeEventListener("pointerup", this.pointerup); - window.removeEventListener("keydown", this.keydown); - window.removeEventListener("keyup", this.keyup); - }); - this.object = object; - if (domElement !== void 0) this.connect(domElement); - this.updateMovementVector(); - this.updateRotationVector(); - } -}; -//#endregion -//#region node_modules/three-stdlib/postprocessing/Pass.js -var __defProp$27 = Object.defineProperty; -var __defNormalProp$27 = (obj, key, value) => key in obj ? __defProp$27(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$27 = (obj, key, value) => { - __defNormalProp$27(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var Pass = class { - constructor() { - __publicField$27(this, "enabled", true); - __publicField$27(this, "needsSwap", true); - __publicField$27(this, "clear", false); - __publicField$27(this, "renderToScreen", false); - } - setSize(width, height) {} - render(renderer, writeBuffer, readBuffer, deltaTime, maskActive) { - console.error("THREE.Pass: .render() must be implemented in derived pass."); - } - dispose() {} -}; -var FullScreenQuad = class { - constructor(material) { - __publicField$27(this, "camera", new OrthographicCamera(-1, 1, 1, -1, 0, 1)); - __publicField$27(this, "geometry", new PlaneGeometry(2, 2)); - __publicField$27(this, "mesh"); - this.mesh = new Mesh(this.geometry, material); - } - get material() { - return this.mesh.material; - } - set material(value) { - this.mesh.material = value; - } - dispose() { - this.mesh.geometry.dispose(); - } - render(renderer) { - renderer.render(this.mesh, this.camera); - } -}; -//#endregion -//#region node_modules/three-stdlib/postprocessing/ShaderPass.js -var __defProp$26 = Object.defineProperty; -var __defNormalProp$26 = (obj, key, value) => key in obj ? __defProp$26(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$26 = (obj, key, value) => { - __defNormalProp$26(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var ShaderPass = class extends Pass { - constructor(shader, textureID = "tDiffuse") { - super(); - __publicField$26(this, "textureID"); - __publicField$26(this, "uniforms"); - __publicField$26(this, "material"); - __publicField$26(this, "fsQuad"); - this.textureID = textureID; - if (shader instanceof ShaderMaterial) { - this.uniforms = shader.uniforms; - this.material = shader; - } else { - this.uniforms = UniformsUtils.clone(shader.uniforms); - this.material = new ShaderMaterial({ - defines: Object.assign({}, shader.defines), - uniforms: this.uniforms, - vertexShader: shader.vertexShader, - fragmentShader: shader.fragmentShader - }); - } - this.fsQuad = new FullScreenQuad(this.material); - } - render(renderer, writeBuffer, readBuffer) { - if (this.uniforms[this.textureID]) this.uniforms[this.textureID].value = readBuffer.texture; - this.fsQuad.material = this.material; - if (this.renderToScreen) { - renderer.setRenderTarget(null); - this.fsQuad.render(renderer); - } else { - renderer.setRenderTarget(writeBuffer); - if (this.clear) renderer.clear(renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil); - this.fsQuad.render(renderer); - } - } - dispose() { - this.fsQuad.dispose(); - this.material.dispose(); - } -}; -//#endregion -//#region node_modules/three-stdlib/postprocessing/LUTPass.js -var LUTShader = { - defines: { USE_3DTEXTURE: 1 }, - uniforms: { - lut3d: { value: null }, - lut: { value: null }, - lutSize: { value: 0 }, - tDiffuse: { value: null }, - intensity: { value: 1 } - }, - vertexShader: ` - - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - - `, - fragmentShader: ` - - uniform float lutSize; - #if USE_3DTEXTURE - precision highp sampler3D; - uniform sampler3D lut3d; - #else - uniform sampler2D lut; - - vec3 lutLookup( sampler2D tex, float size, vec3 rgb ) { - - float sliceHeight = 1.0 / size; - float yPixelHeight = 1.0 / ( size * size ); - - // Get the slices on either side of the sample - float slice = rgb.b * size; - float interp = fract( slice ); - float slice0 = slice - interp; - float centeredInterp = interp - 0.5; - - float slice1 = slice0 + sign( centeredInterp ); - - // Pull y sample in by half a pixel in each direction to avoid color - // bleeding from adjacent slices. - float greenOffset = clamp( rgb.g * sliceHeight, yPixelHeight * 0.5, sliceHeight - yPixelHeight * 0.5 ); - - vec2 uv0 = vec2( - rgb.r, - slice0 * sliceHeight + greenOffset - ); - vec2 uv1 = vec2( - rgb.r, - slice1 * sliceHeight + greenOffset - ); - - vec3 sample0 = texture2D( tex, uv0 ).rgb; - vec3 sample1 = texture2D( tex, uv1 ).rgb; - - return mix( sample0, sample1, abs( centeredInterp ) ); - - } - #endif - - varying vec2 vUv; - uniform float intensity; - uniform sampler2D tDiffuse; - void main() { - - vec4 val = texture2D( tDiffuse, vUv ); - vec4 lutVal; - - // pull the sample in by half a pixel so the sample begins - // at the center of the edge pixels. - float pixelWidth = 1.0 / lutSize; - float halfPixelWidth = 0.5 / lutSize; - vec3 uvw = vec3( halfPixelWidth ) + val.rgb * ( 1.0 - pixelWidth ); - - #if USE_3DTEXTURE - - lutVal = vec4( texture( lut3d, uvw ).rgb, val.a ); - - #else - - lutVal = vec4( lutLookup( lut, lutSize, uvw ), val.a ); - - #endif - - gl_FragColor = vec4( mix( val, lutVal, intensity ) ); - - } - - ` -}; -var LUTPass = class extends ShaderPass { - set lut(v) { - const material = this.material; - if (v !== this.lut) { - material.uniforms.lut3d.value = null; - material.uniforms.lut.value = null; - if (v) { - const is3dTextureDefine = v.isData3DTexture ? 1 : 0; - if (is3dTextureDefine !== material.defines.USE_3DTEXTURE) { - material.defines.USE_3DTEXTURE = is3dTextureDefine; - material.needsUpdate = true; - } - material.uniforms.lutSize.value = v.image.width; - if (v.isData3DTexture) material.uniforms.lut3d.value = v; - else material.uniforms.lut.value = v; - } - } - } - get lut() { - return this.material.uniforms.lut.value || this.material.uniforms.lut3d.value; - } - set intensity(v) { - this.material.uniforms.intensity.value = v; - } - get intensity() { - return this.material.uniforms.intensity.value; - } - constructor(options = {}) { - super(LUTShader); - this.lut = options.lut || null; - this.intensity = "intensity" in options ? options.intensity : 1; - } -}; -//#endregion -//#region node_modules/three-stdlib/postprocessing/ClearPass.js -var __defProp$25 = Object.defineProperty; -var __defNormalProp$25 = (obj, key, value) => key in obj ? __defProp$25(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$25 = (obj, key, value) => { - __defNormalProp$25(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var ClearPass = class extends Pass { - constructor(clearColor, clearAlpha) { - super(); - __publicField$25(this, "clearColor"); - __publicField$25(this, "clearAlpha"); - __publicField$25(this, "_oldClearColor"); - this.needsSwap = false; - this.clearColor = clearColor !== void 0 ? clearColor : 0; - this.clearAlpha = clearAlpha !== void 0 ? clearAlpha : 0; - this._oldClearColor = new Color(); - } - render(renderer, writeBuffer, readBuffer) { - let oldClearAlpha; - if (this.clearColor) { - renderer.getClearColor(this._oldClearColor); - oldClearAlpha = renderer.getClearAlpha(); - renderer.setClearColor(this.clearColor, this.clearAlpha); - } - renderer.setRenderTarget(this.renderToScreen ? null : readBuffer); - renderer.clear(); - if (this.clearColor) renderer.setClearColor(this._oldClearColor, oldClearAlpha); - } -}; -//#endregion -//#region node_modules/three-stdlib/shaders/DigitalGlitch.js -var DigitalGlitch = { - uniforms: { - tDiffuse: { value: null }, - tDisp: { value: null }, - byp: { value: 0 }, - amount: { value: .08 }, - angle: { value: .02 }, - seed: { value: .02 }, - seed_x: { value: .02 }, - seed_y: { value: .02 }, - distortion_x: { value: .5 }, - distortion_y: { value: .6 }, - col_s: { value: .05 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - } - `, - fragmentShader: ` - uniform int byp; //should we apply the glitch ? - uniform sampler2D tDiffuse; - uniform sampler2D tDisp; - uniform float amount; - uniform float angle; - uniform float seed; - uniform float seed_x; - uniform float seed_y; - uniform float distortion_x; - uniform float distortion_y; - uniform float col_s; - - varying vec2 vUv; - - float rand(vec2 co){ - return fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453); - } - - void main() { - if(byp<1) { - vec2 p = vUv; - float xs = floor(gl_FragCoord.x / 0.5); - float ys = floor(gl_FragCoord.y / 0.5); - //based on staffantans glitch shader for unity https://github.com/staffantan/unityglitch - vec4 normal = texture2D (tDisp, p*seed*seed); - if(p.y<distortion_x+col_s && p.y>distortion_x-col_s*seed) { - if(seed_x>0.){ - p.y = 1. - (p.y + distortion_y); - } - else { - p.y = distortion_y; - } - } - if(p.x<distortion_y+col_s && p.x>distortion_y-col_s*seed) { - if(seed_y>0.){ - p.x=distortion_x; - } - else { - p.x = 1. - (p.x + distortion_x); - } - } - p.x+=normal.x*seed_x*(seed/5.); - p.y+=normal.y*seed_y*(seed/5.); - //base from RGB shift shader - vec2 offset = amount * vec2( cos(angle), sin(angle)); - vec4 cr = texture2D(tDiffuse, p + offset); - vec4 cga = texture2D(tDiffuse, p); - vec4 cb = texture2D(tDiffuse, p - offset); - gl_FragColor = vec4(cr.r, cga.g, cb.b, cga.a); - //add noise - vec4 snow = 200.*amount*vec4(rand(vec2(xs * seed,ys * seed*50.))*0.2); - gl_FragColor = gl_FragColor+ snow; - } - else { - gl_FragColor=texture2D (tDiffuse, vUv); - } - } -` -}; -//#endregion -//#region node_modules/three-stdlib/postprocessing/GlitchPass.js -var __defProp$24 = Object.defineProperty; -var __defNormalProp$24 = (obj, key, value) => key in obj ? __defProp$24(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$24 = (obj, key, value) => { - __defNormalProp$24(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var GlitchPass = class extends Pass { - constructor(dt_size = 64) { - super(); - __publicField$24(this, "material"); - __publicField$24(this, "fsQuad"); - __publicField$24(this, "goWild"); - __publicField$24(this, "curF"); - __publicField$24(this, "randX"); - __publicField$24(this, "uniforms"); - this.uniforms = UniformsUtils.clone(DigitalGlitch.uniforms); - this.uniforms["tDisp"].value = this.generateHeightmap(dt_size); - this.material = new ShaderMaterial({ - uniforms: this.uniforms, - vertexShader: DigitalGlitch.vertexShader, - fragmentShader: DigitalGlitch.fragmentShader - }); - this.fsQuad = new FullScreenQuad(this.material); - this.goWild = false; - this.curF = 0; - this.generateTrigger(); - } - render(renderer, writeBuffer, readBuffer) { - this.uniforms["tDiffuse"].value = readBuffer.texture; - this.uniforms["seed"].value = Math.random(); - this.uniforms["byp"].value = 0; - if (this.curF % this.randX == 0 || this.goWild == true) { - this.uniforms["amount"].value = Math.random() / 30; - this.uniforms["angle"].value = MathUtils.randFloat(-Math.PI, Math.PI); - this.uniforms["seed_x"].value = MathUtils.randFloat(-1, 1); - this.uniforms["seed_y"].value = MathUtils.randFloat(-1, 1); - this.uniforms["distortion_x"].value = MathUtils.randFloat(0, 1); - this.uniforms["distortion_y"].value = MathUtils.randFloat(0, 1); - this.curF = 0; - this.generateTrigger(); - } else if (this.curF % this.randX < this.randX / 5) { - this.uniforms["amount"].value = Math.random() / 90; - this.uniforms["angle"].value = MathUtils.randFloat(-Math.PI, Math.PI); - this.uniforms["distortion_x"].value = MathUtils.randFloat(0, 1); - this.uniforms["distortion_y"].value = MathUtils.randFloat(0, 1); - this.uniforms["seed_x"].value = MathUtils.randFloat(-.3, .3); - this.uniforms["seed_y"].value = MathUtils.randFloat(-.3, .3); - } else if (this.goWild == false) this.uniforms["byp"].value = 1; - this.curF++; - if (this.renderToScreen) { - renderer.setRenderTarget(null); - this.fsQuad.render(renderer); - } else { - renderer.setRenderTarget(writeBuffer); - if (this.clear) renderer.clear(); - this.fsQuad.render(renderer); - } - } - generateTrigger() { - this.randX = MathUtils.randInt(120, 240); - } - generateHeightmap(dt_size) { - const data_arr = new Float32Array(dt_size * dt_size); - const length = dt_size * dt_size; - for (let i = 0; i < length; i++) data_arr[i] = MathUtils.randFloat(0, 1); - const texture = new DataTexture(data_arr, dt_size, dt_size, RedFormat, FloatType); - texture.needsUpdate = true; - return texture; - } -}; -//#endregion -//#region node_modules/three-stdlib/shaders/HalftoneShader.js -var HalftoneShader = { - uniforms: { - tDiffuse: { value: null }, - shape: { value: 1 }, - radius: { value: 4 }, - rotateR: { value: Math.PI / 12 * 1 }, - rotateG: { value: Math.PI / 12 * 2 }, - rotateB: { value: Math.PI / 12 * 3 }, - scatter: { value: 0 }, - width: { value: 1 }, - height: { value: 1 }, - blending: { value: 1 }, - blendingMode: { value: 1 }, - greyscale: { value: false }, - disable: { value: false } - }, - vertexShader: ` - varying vec2 vUV; - - void main() { - - vUV = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0); - - } - `, - fragmentShader: ` - #define SQRT2_MINUS_ONE 0.41421356 - #define SQRT2_HALF_MINUS_ONE 0.20710678 - #define PI2 6.28318531 - #define SHAPE_DOT 1 - #define SHAPE_ELLIPSE 2 - #define SHAPE_LINE 3 - #define SHAPE_SQUARE 4 - #define BLENDING_LINEAR 1 - #define BLENDING_MULTIPLY 2 - #define BLENDING_ADD 3 - #define BLENDING_LIGHTER 4 - #define BLENDING_DARKER 5 - uniform sampler2D tDiffuse; - uniform float radius; - uniform float rotateR; - uniform float rotateG; - uniform float rotateB; - uniform float scatter; - uniform float width; - uniform float height; - uniform int shape; - uniform bool disable; - uniform float blending; - uniform int blendingMode; - varying vec2 vUV; - uniform bool greyscale; - const int samples = 8; - - float blend( float a, float b, float t ) { - - // linear blend - return a * ( 1.0 - t ) + b * t; - - } - - float hypot( float x, float y ) { - - // vector magnitude - return sqrt( x * x + y * y ); - - } - - float rand( vec2 seed ){ - - // get pseudo-random number - return fract( sin( dot( seed.xy, vec2( 12.9898, 78.233 ) ) ) * 43758.5453 ); - - } - - float distanceToDotRadius( float channel, vec2 coord, vec2 normal, vec2 p, float angle, float rad_max ) { - - // apply shape-specific transforms - float dist = hypot( coord.x - p.x, coord.y - p.y ); - float rad = channel; - - if ( shape == SHAPE_DOT ) { - - rad = pow( abs( rad ), 1.125 ) * rad_max; - - } else if ( shape == SHAPE_ELLIPSE ) { - - rad = pow( abs( rad ), 1.125 ) * rad_max; - - if ( dist != 0.0 ) { - float dot_p = abs( ( p.x - coord.x ) / dist * normal.x + ( p.y - coord.y ) / dist * normal.y ); - dist = ( dist * ( 1.0 - SQRT2_HALF_MINUS_ONE ) ) + dot_p * dist * SQRT2_MINUS_ONE; - } - - } else if ( shape == SHAPE_LINE ) { - - rad = pow( abs( rad ), 1.5) * rad_max; - float dot_p = ( p.x - coord.x ) * normal.x + ( p.y - coord.y ) * normal.y; - dist = hypot( normal.x * dot_p, normal.y * dot_p ); - - } else if ( shape == SHAPE_SQUARE ) { - - float theta = atan( p.y - coord.y, p.x - coord.x ) - angle; - float sin_t = abs( sin( theta ) ); - float cos_t = abs( cos( theta ) ); - rad = pow( abs( rad ), 1.4 ); - rad = rad_max * ( rad + ( ( sin_t > cos_t ) ? rad - sin_t * rad : rad - cos_t * rad ) ); - - } - - return rad - dist; - - } - - struct Cell { - - // grid sample positions - vec2 normal; - vec2 p1; - vec2 p2; - vec2 p3; - vec2 p4; - float samp2; - float samp1; - float samp3; - float samp4; - - }; - - vec4 getSample( vec2 point ) { - - // multi-sampled point - vec4 tex = texture2D( tDiffuse, vec2( point.x / width, point.y / height ) ); - float base = rand( vec2( floor( point.x ), floor( point.y ) ) ) * PI2; - float step = PI2 / float( samples ); - float dist = radius * 0.66; - - for ( int i = 0; i < samples; ++i ) { - - float r = base + step * float( i ); - vec2 coord = point + vec2( cos( r ) * dist, sin( r ) * dist ); - tex += texture2D( tDiffuse, vec2( coord.x / width, coord.y / height ) ); - - } - - tex /= float( samples ) + 1.0; - return tex; - - } - - float getDotColour( Cell c, vec2 p, int channel, float angle, float aa ) { - - // get colour for given point - float dist_c_1, dist_c_2, dist_c_3, dist_c_4, res; - - if ( channel == 0 ) { - - c.samp1 = getSample( c.p1 ).r; - c.samp2 = getSample( c.p2 ).r; - c.samp3 = getSample( c.p3 ).r; - c.samp4 = getSample( c.p4 ).r; - - } else if (channel == 1) { - - c.samp1 = getSample( c.p1 ).g; - c.samp2 = getSample( c.p2 ).g; - c.samp3 = getSample( c.p3 ).g; - c.samp4 = getSample( c.p4 ).g; - - } else { - - c.samp1 = getSample( c.p1 ).b; - c.samp3 = getSample( c.p3 ).b; - c.samp2 = getSample( c.p2 ).b; - c.samp4 = getSample( c.p4 ).b; - - } - - dist_c_1 = distanceToDotRadius( c.samp1, c.p1, c.normal, p, angle, radius ); - dist_c_2 = distanceToDotRadius( c.samp2, c.p2, c.normal, p, angle, radius ); - dist_c_3 = distanceToDotRadius( c.samp3, c.p3, c.normal, p, angle, radius ); - dist_c_4 = distanceToDotRadius( c.samp4, c.p4, c.normal, p, angle, radius ); - res = ( dist_c_1 > 0.0 ) ? clamp( dist_c_1 / aa, 0.0, 1.0 ) : 0.0; - res += ( dist_c_2 > 0.0 ) ? clamp( dist_c_2 / aa, 0.0, 1.0 ) : 0.0; - res += ( dist_c_3 > 0.0 ) ? clamp( dist_c_3 / aa, 0.0, 1.0 ) : 0.0; - res += ( dist_c_4 > 0.0 ) ? clamp( dist_c_4 / aa, 0.0, 1.0 ) : 0.0; - res = clamp( res, 0.0, 1.0 ); - - return res; - - } - - Cell getReferenceCell( vec2 p, vec2 origin, float grid_angle, float step ) { - - // get containing cell - Cell c; - - // calc grid - vec2 n = vec2( cos( grid_angle ), sin( grid_angle ) ); - float threshold = step * 0.5; - float dot_normal = n.x * ( p.x - origin.x ) + n.y * ( p.y - origin.y ); - float dot_line = -n.y * ( p.x - origin.x ) + n.x * ( p.y - origin.y ); - vec2 offset = vec2( n.x * dot_normal, n.y * dot_normal ); - float offset_normal = mod( hypot( offset.x, offset.y ), step ); - float normal_dir = ( dot_normal < 0.0 ) ? 1.0 : -1.0; - float normal_scale = ( ( offset_normal < threshold ) ? -offset_normal : step - offset_normal ) * normal_dir; - float offset_line = mod( hypot( ( p.x - offset.x ) - origin.x, ( p.y - offset.y ) - origin.y ), step ); - float line_dir = ( dot_line < 0.0 ) ? 1.0 : -1.0; - float line_scale = ( ( offset_line < threshold ) ? -offset_line : step - offset_line ) * line_dir; - - // get closest corner - c.normal = n; - c.p1.x = p.x - n.x * normal_scale + n.y * line_scale; - c.p1.y = p.y - n.y * normal_scale - n.x * line_scale; - - // scatter - if ( scatter != 0.0 ) { - - float off_mag = scatter * threshold * 0.5; - float off_angle = rand( vec2( floor( c.p1.x ), floor( c.p1.y ) ) ) * PI2; - c.p1.x += cos( off_angle ) * off_mag; - c.p1.y += sin( off_angle ) * off_mag; - - } - - // find corners - float normal_step = normal_dir * ( ( offset_normal < threshold ) ? step : -step ); - float line_step = line_dir * ( ( offset_line < threshold ) ? step : -step ); - c.p2.x = c.p1.x - n.x * normal_step; - c.p2.y = c.p1.y - n.y * normal_step; - c.p3.x = c.p1.x + n.y * line_step; - c.p3.y = c.p1.y - n.x * line_step; - c.p4.x = c.p1.x - n.x * normal_step + n.y * line_step; - c.p4.y = c.p1.y - n.y * normal_step - n.x * line_step; - - return c; - - } - - float blendColour( float a, float b, float t ) { - - // blend colours - if ( blendingMode == BLENDING_LINEAR ) { - return blend( a, b, 1.0 - t ); - } else if ( blendingMode == BLENDING_ADD ) { - return blend( a, min( 1.0, a + b ), t ); - } else if ( blendingMode == BLENDING_MULTIPLY ) { - return blend( a, max( 0.0, a * b ), t ); - } else if ( blendingMode == BLENDING_LIGHTER ) { - return blend( a, max( a, b ), t ); - } else if ( blendingMode == BLENDING_DARKER ) { - return blend( a, min( a, b ), t ); - } else { - return blend( a, b, 1.0 - t ); - } - - } - - void main() { - - if ( ! disable ) { - - // setup - vec2 p = vec2( vUV.x * width, vUV.y * height ); - vec2 origin = vec2( 0, 0 ); - float aa = ( radius < 2.5 ) ? radius * 0.5 : 1.25; - - // get channel samples - Cell cell_r = getReferenceCell( p, origin, rotateR, radius ); - Cell cell_g = getReferenceCell( p, origin, rotateG, radius ); - Cell cell_b = getReferenceCell( p, origin, rotateB, radius ); - float r = getDotColour( cell_r, p, 0, rotateR, aa ); - float g = getDotColour( cell_g, p, 1, rotateG, aa ); - float b = getDotColour( cell_b, p, 2, rotateB, aa ); - - // blend with original - vec4 colour = texture2D( tDiffuse, vUV ); - r = blendColour( r, colour.r, blending ); - g = blendColour( g, colour.g, blending ); - b = blendColour( b, colour.b, blending ); - - if ( greyscale ) { - r = g = b = (r + b + g) / 3.0; - } - - gl_FragColor = vec4( r, g, b, 1.0 ); - - } else { - - gl_FragColor = texture2D( tDiffuse, vUV ); - - } - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/postprocessing/HalftonePass.js -var __defProp$23 = Object.defineProperty; -var __defNormalProp$23 = (obj, key, value) => key in obj ? __defProp$23(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$23 = (obj, key, value) => { - __defNormalProp$23(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var HalftonePass = class extends Pass { - constructor(width, height, params) { - super(); - __publicField$23(this, "material"); - __publicField$23(this, "fsQuad"); - __publicField$23(this, "uniforms"); - if (HalftoneShader === void 0) console.error("THREE.HalftonePass requires HalftoneShader"); - this.uniforms = UniformsUtils.clone(HalftoneShader.uniforms); - this.material = new ShaderMaterial({ - uniforms: this.uniforms, - fragmentShader: HalftoneShader.fragmentShader, - vertexShader: HalftoneShader.vertexShader - }); - this.uniforms.width.value = width; - this.uniforms.height.value = height; - for (const key in params) if (params.hasOwnProperty(key) && this.uniforms.hasOwnProperty(key)) this.uniforms[key].value = params[key]; - this.fsQuad = new FullScreenQuad(this.material); - } - render(renderer, writeBuffer, readBuffer) { - this.material.uniforms["tDiffuse"].value = readBuffer.texture; - if (this.renderToScreen) { - renderer.setRenderTarget(null); - this.fsQuad.render(renderer); - } else { - renderer.setRenderTarget(writeBuffer); - if (this.clear) renderer.clear(); - this.fsQuad.render(renderer); - } - } - setSize(width, height) { - this.uniforms.width.value = width; - this.uniforms.height.value = height; - } -}; -//#endregion -//#region node_modules/three-stdlib/shaders/SMAAShader.js -var SMAAEdgesShader = { - defines: { SMAA_THRESHOLD: "0.1" }, - uniforms: { - tDiffuse: { value: null }, - resolution: { value: /* @__PURE__ */ new Vector2(1 / 1024, 1 / 512) } - }, - vertexShader: ` - uniform vec2 resolution; - - varying vec2 vUv; - varying vec4 vOffset[ 3 ]; - - void SMAAEdgeDetectionVS( vec2 texcoord ) { - vOffset[ 0 ] = texcoord.xyxy + resolution.xyxy * vec4( -1.0, 0.0, 0.0, 1.0 ); // WebGL port note: Changed sign in W component - vOffset[ 1 ] = texcoord.xyxy + resolution.xyxy * vec4( 1.0, 0.0, 0.0, -1.0 ); // WebGL port note: Changed sign in W component - vOffset[ 2 ] = texcoord.xyxy + resolution.xyxy * vec4( -2.0, 0.0, 0.0, 2.0 ); // WebGL port note: Changed sign in W component - } - - void main() { - - vUv = uv; - - SMAAEdgeDetectionVS( vUv ); - - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform sampler2D tDiffuse; - - varying vec2 vUv; - varying vec4 vOffset[ 3 ]; - - vec4 SMAAColorEdgeDetectionPS( vec2 texcoord, vec4 offset[3], sampler2D colorTex ) { - vec2 threshold = vec2( SMAA_THRESHOLD, SMAA_THRESHOLD ); - - // Calculate color deltas: - vec4 delta; - vec3 C = texture2D( colorTex, texcoord ).rgb; - - vec3 Cleft = texture2D( colorTex, offset[0].xy ).rgb; - vec3 t = abs( C - Cleft ); - delta.x = max( max( t.r, t.g ), t.b ); - - vec3 Ctop = texture2D( colorTex, offset[0].zw ).rgb; - t = abs( C - Ctop ); - delta.y = max( max( t.r, t.g ), t.b ); - - // We do the usual threshold: - vec2 edges = step( threshold, delta.xy ); - - // Then discard if there is no edge: - if ( dot( edges, vec2( 1.0, 1.0 ) ) == 0.0 ) - discard; - - // Calculate right and bottom deltas: - vec3 Cright = texture2D( colorTex, offset[1].xy ).rgb; - t = abs( C - Cright ); - delta.z = max( max( t.r, t.g ), t.b ); - - vec3 Cbottom = texture2D( colorTex, offset[1].zw ).rgb; - t = abs( C - Cbottom ); - delta.w = max( max( t.r, t.g ), t.b ); - - // Calculate the maximum delta in the direct neighborhood: - float maxDelta = max( max( max( delta.x, delta.y ), delta.z ), delta.w ); - - // Calculate left-left and top-top deltas: - vec3 Cleftleft = texture2D( colorTex, offset[2].xy ).rgb; - t = abs( C - Cleftleft ); - delta.z = max( max( t.r, t.g ), t.b ); - - vec3 Ctoptop = texture2D( colorTex, offset[2].zw ).rgb; - t = abs( C - Ctoptop ); - delta.w = max( max( t.r, t.g ), t.b ); - - // Calculate the final maximum delta: - maxDelta = max( max( maxDelta, delta.z ), delta.w ); - - // Local contrast adaptation in action: - edges.xy *= step( 0.5 * maxDelta, delta.xy ); - - return vec4( edges, 0.0, 0.0 ); - } - - void main() { - - gl_FragColor = SMAAColorEdgeDetectionPS( vUv, vOffset, tDiffuse ); - - } - ` -}; -var SMAAWeightsShader = { - defines: { - SMAA_MAX_SEARCH_STEPS: "8", - SMAA_AREATEX_MAX_DISTANCE: "16", - SMAA_AREATEX_PIXEL_SIZE: "( 1.0 / vec2( 160.0, 560.0 ) )", - SMAA_AREATEX_SUBTEX_SIZE: "( 1.0 / 7.0 )" - }, - uniforms: { - tDiffuse: { value: null }, - tArea: { value: null }, - tSearch: { value: null }, - resolution: { value: /* @__PURE__ */ new Vector2(1 / 1024, 1 / 512) } - }, - vertexShader: ` - uniform vec2 resolution; - - varying vec2 vUv; - varying vec4 vOffset[ 3 ]; - varying vec2 vPixcoord; - - void SMAABlendingWeightCalculationVS( vec2 texcoord ) { - vPixcoord = texcoord / resolution; - - // We will use these offsets for the searches later on (see @PSEUDO_GATHER4): - vOffset[ 0 ] = texcoord.xyxy + resolution.xyxy * vec4( -0.25, 0.125, 1.25, 0.125 ); // WebGL port note: Changed sign in Y and W components - vOffset[ 1 ] = texcoord.xyxy + resolution.xyxy * vec4( -0.125, 0.25, -0.125, -1.25 ); // WebGL port note: Changed sign in Y and W components - - // And these for the searches, they indicate the ends of the loops: - vOffset[ 2 ] = vec4( vOffset[ 0 ].xz, vOffset[ 1 ].yw ) + vec4( -2.0, 2.0, -2.0, 2.0 ) * resolution.xxyy * float( SMAA_MAX_SEARCH_STEPS ); - - } - - void main() { - - vUv = uv; - - SMAABlendingWeightCalculationVS( vUv ); - - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - #define SMAASampleLevelZeroOffset( tex, coord, offset ) texture2D( tex, coord + float( offset ) * resolution, 0.0 ) - - uniform sampler2D tDiffuse; - uniform sampler2D tArea; - uniform sampler2D tSearch; - uniform vec2 resolution; - - varying vec2 vUv; - varying vec4 vOffset[3]; - varying vec2 vPixcoord; - - #if __VERSION__ == 100 - vec2 round( vec2 x ) { - return sign( x ) * floor( abs( x ) + 0.5 ); - } - #endif - - float SMAASearchLength( sampler2D searchTex, vec2 e, float bias, float scale ) { - // Not required if searchTex accesses are set to point: - // float2 SEARCH_TEX_PIXEL_SIZE = 1.0 / float2(66.0, 33.0); - // e = float2(bias, 0.0) + 0.5 * SEARCH_TEX_PIXEL_SIZE + - // e * float2(scale, 1.0) * float2(64.0, 32.0) * SEARCH_TEX_PIXEL_SIZE; - e.r = bias + e.r * scale; - return 255.0 * texture2D( searchTex, e, 0.0 ).r; - } - - float SMAASearchXLeft( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) { - /** - * @PSEUDO_GATHER4 - * This texcoord has been offset by (-0.25, -0.125) in the vertex shader to - * sample between edge, thus fetching four edges in a row. - * Sampling with different offsets in each direction allows to disambiguate - * which edges are active from the four fetched ones. - */ - vec2 e = vec2( 0.0, 1.0 ); - - for ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) { // WebGL port note: Changed while to for - e = texture2D( edgesTex, texcoord, 0.0 ).rg; - texcoord -= vec2( 2.0, 0.0 ) * resolution; - if ( ! ( texcoord.x > end && e.g > 0.8281 && e.r == 0.0 ) ) break; - } - - // We correct the previous (-0.25, -0.125) offset we applied: - texcoord.x += 0.25 * resolution.x; - - // The searches are bias by 1, so adjust the coords accordingly: - texcoord.x += resolution.x; - - // Disambiguate the length added by the last step: - texcoord.x += 2.0 * resolution.x; // Undo last step - texcoord.x -= resolution.x * SMAASearchLength(searchTex, e, 0.0, 0.5); - - return texcoord.x; - } - - float SMAASearchXRight( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) { - vec2 e = vec2( 0.0, 1.0 ); - - for ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) { // WebGL port note: Changed while to for - e = texture2D( edgesTex, texcoord, 0.0 ).rg; - texcoord += vec2( 2.0, 0.0 ) * resolution; - if ( ! ( texcoord.x < end && e.g > 0.8281 && e.r == 0.0 ) ) break; - } - - texcoord.x -= 0.25 * resolution.x; - texcoord.x -= resolution.x; - texcoord.x -= 2.0 * resolution.x; - texcoord.x += resolution.x * SMAASearchLength( searchTex, e, 0.5, 0.5 ); - - return texcoord.x; - } - - float SMAASearchYUp( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) { - vec2 e = vec2( 1.0, 0.0 ); - - for ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) { // WebGL port note: Changed while to for - e = texture2D( edgesTex, texcoord, 0.0 ).rg; - texcoord += vec2( 0.0, 2.0 ) * resolution; // WebGL port note: Changed sign - if ( ! ( texcoord.y > end && e.r > 0.8281 && e.g == 0.0 ) ) break; - } - - texcoord.y -= 0.25 * resolution.y; // WebGL port note: Changed sign - texcoord.y -= resolution.y; // WebGL port note: Changed sign - texcoord.y -= 2.0 * resolution.y; // WebGL port note: Changed sign - texcoord.y += resolution.y * SMAASearchLength( searchTex, e.gr, 0.0, 0.5 ); // WebGL port note: Changed sign - - return texcoord.y; - } - - float SMAASearchYDown( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) { - vec2 e = vec2( 1.0, 0.0 ); - - for ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) { // WebGL port note: Changed while to for - e = texture2D( edgesTex, texcoord, 0.0 ).rg; - texcoord -= vec2( 0.0, 2.0 ) * resolution; // WebGL port note: Changed sign - if ( ! ( texcoord.y < end && e.r > 0.8281 && e.g == 0.0 ) ) break; - } - - texcoord.y += 0.25 * resolution.y; // WebGL port note: Changed sign - texcoord.y += resolution.y; // WebGL port note: Changed sign - texcoord.y += 2.0 * resolution.y; // WebGL port note: Changed sign - texcoord.y -= resolution.y * SMAASearchLength( searchTex, e.gr, 0.5, 0.5 ); // WebGL port note: Changed sign - - return texcoord.y; - } - - vec2 SMAAArea( sampler2D areaTex, vec2 dist, float e1, float e2, float offset ) { - // Rounding prevents precision errors of bilinear filtering: - vec2 texcoord = float( SMAA_AREATEX_MAX_DISTANCE ) * round( 4.0 * vec2( e1, e2 ) ) + dist; - - // We do a scale and bias for mapping to texel space: - texcoord = SMAA_AREATEX_PIXEL_SIZE * texcoord + ( 0.5 * SMAA_AREATEX_PIXEL_SIZE ); - - // Move to proper place, according to the subpixel offset: - texcoord.y += SMAA_AREATEX_SUBTEX_SIZE * offset; - - return texture2D( areaTex, texcoord, 0.0 ).rg; - } - - vec4 SMAABlendingWeightCalculationPS( vec2 texcoord, vec2 pixcoord, vec4 offset[ 3 ], sampler2D edgesTex, sampler2D areaTex, sampler2D searchTex, ivec4 subsampleIndices ) { - vec4 weights = vec4( 0.0, 0.0, 0.0, 0.0 ); - - vec2 e = texture2D( edgesTex, texcoord ).rg; - - if ( e.g > 0.0 ) { // Edge at north - vec2 d; - - // Find the distance to the left: - vec2 coords; - coords.x = SMAASearchXLeft( edgesTex, searchTex, offset[ 0 ].xy, offset[ 2 ].x ); - coords.y = offset[ 1 ].y; // offset[1].y = texcoord.y - 0.25 * resolution.y (@CROSSING_OFFSET) - d.x = coords.x; - - // Now fetch the left crossing edges, two at a time using bilinear - // filtering. Sampling at -0.25 (see @CROSSING_OFFSET) enables to - // discern what value each edge has: - float e1 = texture2D( edgesTex, coords, 0.0 ).r; - - // Find the distance to the right: - coords.x = SMAASearchXRight( edgesTex, searchTex, offset[ 0 ].zw, offset[ 2 ].y ); - d.y = coords.x; - - // We want the distances to be in pixel units (doing this here allow to - // better interleave arithmetic and memory accesses): - d = d / resolution.x - pixcoord.x; - - // SMAAArea below needs a sqrt, as the areas texture is compressed - // quadratically: - vec2 sqrt_d = sqrt( abs( d ) ); - - // Fetch the right crossing edges: - coords.y -= 1.0 * resolution.y; // WebGL port note: Added - float e2 = SMAASampleLevelZeroOffset( edgesTex, coords, ivec2( 1, 0 ) ).r; - - // Ok, we know how this pattern looks like, now it is time for getting - // the actual area: - weights.rg = SMAAArea( areaTex, sqrt_d, e1, e2, float( subsampleIndices.y ) ); - } - - if ( e.r > 0.0 ) { // Edge at west - vec2 d; - - // Find the distance to the top: - vec2 coords; - - coords.y = SMAASearchYUp( edgesTex, searchTex, offset[ 1 ].xy, offset[ 2 ].z ); - coords.x = offset[ 0 ].x; // offset[1].x = texcoord.x - 0.25 * resolution.x; - d.x = coords.y; - - // Fetch the top crossing edges: - float e1 = texture2D( edgesTex, coords, 0.0 ).g; - - // Find the distance to the bottom: - coords.y = SMAASearchYDown( edgesTex, searchTex, offset[ 1 ].zw, offset[ 2 ].w ); - d.y = coords.y; - - // We want the distances to be in pixel units: - d = d / resolution.y - pixcoord.y; - - // SMAAArea below needs a sqrt, as the areas texture is compressed - // quadratically: - vec2 sqrt_d = sqrt( abs( d ) ); - - // Fetch the bottom crossing edges: - coords.y -= 1.0 * resolution.y; // WebGL port note: Added - float e2 = SMAASampleLevelZeroOffset( edgesTex, coords, ivec2( 0, 1 ) ).g; - - // Get the area for this direction: - weights.ba = SMAAArea( areaTex, sqrt_d, e1, e2, float( subsampleIndices.x ) ); - } - - return weights; - } - - void main() { - - gl_FragColor = SMAABlendingWeightCalculationPS( vUv, vPixcoord, vOffset, tDiffuse, tArea, tSearch, ivec4( 0.0 ) ); - - } - ` -}; -var SMAABlendShader = { - uniforms: { - tDiffuse: { value: null }, - tColor: { value: null }, - resolution: { value: /* @__PURE__ */ new Vector2(1 / 1024, 1 / 512) } - }, - vertexShader: ` - uniform vec2 resolution; - - varying vec2 vUv; - varying vec4 vOffset[ 2 ]; - - void SMAANeighborhoodBlendingVS( vec2 texcoord ) { - vOffset[ 0 ] = texcoord.xyxy + resolution.xyxy * vec4( -1.0, 0.0, 0.0, 1.0 ); // WebGL port note: Changed sign in W component - vOffset[ 1 ] = texcoord.xyxy + resolution.xyxy * vec4( 1.0, 0.0, 0.0, -1.0 ); // WebGL port note: Changed sign in W component - } - - void main() { - - vUv = uv; - - SMAANeighborhoodBlendingVS( vUv ); - - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform sampler2D tDiffuse; - uniform sampler2D tColor; - uniform vec2 resolution; - - varying vec2 vUv; - varying vec4 vOffset[ 2 ]; - - vec4 SMAANeighborhoodBlendingPS( vec2 texcoord, vec4 offset[ 2 ], sampler2D colorTex, sampler2D blendTex ) { - // Fetch the blending weights for current pixel: - vec4 a; - a.xz = texture2D( blendTex, texcoord ).xz; - a.y = texture2D( blendTex, offset[ 1 ].zw ).g; - a.w = texture2D( blendTex, offset[ 1 ].xy ).a; - - // Is there any blending weight with a value greater than 0.0? - if ( dot(a, vec4( 1.0, 1.0, 1.0, 1.0 )) < 1e-5 ) { - return texture2D( colorTex, texcoord, 0.0 ); - } else { - // Up to 4 lines can be crossing a pixel (one through each edge). We - // favor blending by choosing the line with the maximum weight for each - // direction: - vec2 offset; - offset.x = a.a > a.b ? a.a : -a.b; // left vs. right - offset.y = a.g > a.r ? -a.g : a.r; // top vs. bottom // WebGL port note: Changed signs - - // Then we go in the direction that has the maximum weight: - if ( abs( offset.x ) > abs( offset.y )) { // horizontal vs. vertical - offset.y = 0.0; - } else { - offset.x = 0.0; - } - - // Fetch the opposite color and lerp by hand: - vec4 C = texture2D( colorTex, texcoord, 0.0 ); - texcoord += sign( offset ) * resolution; - vec4 Cop = texture2D( colorTex, texcoord, 0.0 ); - float s = abs( offset.x ) > abs( offset.y ) ? abs( offset.x ) : abs( offset.y ); - - // WebGL port note: Added gamma correction - C.xyz = pow(C.xyz, vec3(2.2)); - Cop.xyz = pow(Cop.xyz, vec3(2.2)); - vec4 mixed = mix(C, Cop, s); - mixed.xyz = pow(mixed.xyz, vec3(1.0 / 2.2)); - - return mixed; - } - } - - void main() { - - gl_FragColor = SMAANeighborhoodBlendingPS( vUv, vOffset, tColor, tDiffuse ); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/postprocessing/SMAAPass.js -var SMAAPass = class extends Pass { - constructor(width, height) { - super(); - this.edgesRT = new WebGLRenderTarget(width, height, { depthBuffer: false }); - this.edgesRT.texture.name = "SMAAPass.edges"; - this.weightsRT = new WebGLRenderTarget(width, height, { depthBuffer: false }); - this.weightsRT.texture.name = "SMAAPass.weights"; - const scope = this; - const areaTextureImage = new Image(); - areaTextureImage.src = this.getAreaTexture(); - areaTextureImage.onload = function() { - scope.areaTexture.needsUpdate = true; - }; - this.areaTexture = new Texture(); - this.areaTexture.name = "SMAAPass.area"; - this.areaTexture.image = areaTextureImage; - this.areaTexture.minFilter = LinearFilter; - this.areaTexture.generateMipmaps = false; - this.areaTexture.flipY = false; - const searchTextureImage = new Image(); - searchTextureImage.src = this.getSearchTexture(); - searchTextureImage.onload = function() { - scope.searchTexture.needsUpdate = true; - }; - this.searchTexture = new Texture(); - this.searchTexture.name = "SMAAPass.search"; - this.searchTexture.image = searchTextureImage; - this.searchTexture.magFilter = NearestFilter; - this.searchTexture.minFilter = NearestFilter; - this.searchTexture.generateMipmaps = false; - this.searchTexture.flipY = false; - if (SMAAEdgesShader === void 0) console.error("THREE.SMAAPass relies on SMAAShader"); - this.uniformsEdges = UniformsUtils.clone(SMAAEdgesShader.uniforms); - this.uniformsEdges["resolution"].value.set(1 / width, 1 / height); - this.materialEdges = new ShaderMaterial({ - defines: Object.assign({}, SMAAEdgesShader.defines), - uniforms: this.uniformsEdges, - vertexShader: SMAAEdgesShader.vertexShader, - fragmentShader: SMAAEdgesShader.fragmentShader - }); - this.uniformsWeights = UniformsUtils.clone(SMAAWeightsShader.uniforms); - this.uniformsWeights["resolution"].value.set(1 / width, 1 / height); - this.uniformsWeights["tDiffuse"].value = this.edgesRT.texture; - this.uniformsWeights["tArea"].value = this.areaTexture; - this.uniformsWeights["tSearch"].value = this.searchTexture; - this.materialWeights = new ShaderMaterial({ - defines: Object.assign({}, SMAAWeightsShader.defines), - uniforms: this.uniformsWeights, - vertexShader: SMAAWeightsShader.vertexShader, - fragmentShader: SMAAWeightsShader.fragmentShader - }); - this.uniformsBlend = UniformsUtils.clone(SMAABlendShader.uniforms); - this.uniformsBlend["resolution"].value.set(1 / width, 1 / height); - this.uniformsBlend["tDiffuse"].value = this.weightsRT.texture; - this.materialBlend = new ShaderMaterial({ - uniforms: this.uniformsBlend, - vertexShader: SMAABlendShader.vertexShader, - fragmentShader: SMAABlendShader.fragmentShader - }); - this.needsSwap = false; - this.fsQuad = new FullScreenQuad(null); - } - render(renderer, writeBuffer, readBuffer) { - this.uniformsEdges["tDiffuse"].value = readBuffer.texture; - this.fsQuad.material = this.materialEdges; - renderer.setRenderTarget(this.edgesRT); - if (this.clear) renderer.clear(); - this.fsQuad.render(renderer); - this.fsQuad.material = this.materialWeights; - renderer.setRenderTarget(this.weightsRT); - if (this.clear) renderer.clear(); - this.fsQuad.render(renderer); - this.uniformsBlend["tColor"].value = readBuffer.texture; - this.fsQuad.material = this.materialBlend; - if (this.renderToScreen) { - renderer.setRenderTarget(null); - this.fsQuad.render(renderer); - } else { - renderer.setRenderTarget(writeBuffer); - if (this.clear) renderer.clear(); - this.fsQuad.render(renderer); - } - } - setSize(width, height) { - this.edgesRT.setSize(width, height); - this.weightsRT.setSize(width, height); - this.materialEdges.uniforms["resolution"].value.set(1 / width, 1 / height); - this.materialWeights.uniforms["resolution"].value.set(1 / width, 1 / height); - this.materialBlend.uniforms["resolution"].value.set(1 / width, 1 / height); - } - getAreaTexture() { - return "data:image/png;base64,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"; - } - getSearchTexture() { - return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAAhCAAAAABIXyLAAAAAOElEQVRIx2NgGAWjYBSMglEwEICREYRgFBZBqDCSLA2MGPUIVQETE9iNUAqLR5gIeoQKRgwXjwAAGn4AtaFeYLEAAAAASUVORK5CYII="; - } -}; -//#endregion -//#region node_modules/three-stdlib/shaders/FilmShader.js -var FilmShader = { - uniforms: { - tDiffuse: { value: null }, - time: { value: 0 }, - nIntensity: { value: .5 }, - sIntensity: { value: .05 }, - sCount: { value: 4096 }, - grayscale: { value: 1 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - #include <common> - - // control parameter - uniform float time; - - uniform bool grayscale; - - // noise effect intensity value (0 = no effect, 1 = full effect) - uniform float nIntensity; - - // scanlines effect intensity value (0 = no effect, 1 = full effect) - uniform float sIntensity; - - // scanlines effect count value (0 = no effect, 4096 = full effect) - uniform float sCount; - - uniform sampler2D tDiffuse; - - varying vec2 vUv; - - void main() { - - // sample the source - vec4 cTextureScreen = texture2D( tDiffuse, vUv ); - - // make some noise - float dx = rand( vUv + time ); - - // add noise - vec3 cResult = cTextureScreen.rgb + cTextureScreen.rgb * clamp( 0.1 + dx, 0.0, 1.0 ); - - // get us a sine and cosine - vec2 sc = vec2( sin( vUv.y * sCount ), cos( vUv.y * sCount ) ); - - // add scanlines - cResult += cTextureScreen.rgb * vec3( sc.x, sc.y, sc.x ) * sIntensity; - - // interpolate between source and result by intensity - cResult = cTextureScreen.rgb + clamp( nIntensity, 0.0,1.0 ) * ( cResult - cTextureScreen.rgb ); - - // convert to grayscale if desired - if( grayscale ) { - - cResult = vec3( cResult.r * 0.3 + cResult.g * 0.59 + cResult.b * 0.11 ); - - } - - gl_FragColor = vec4( cResult, cTextureScreen.a ); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/postprocessing/FilmPass.js -var __defProp$22 = Object.defineProperty; -var __defNormalProp$22 = (obj, key, value) => key in obj ? __defProp$22(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$22 = (obj, key, value) => { - __defNormalProp$22(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var FilmPass = class extends Pass { - constructor(noiseIntensity, scanlinesIntensity, scanlinesCount, grayscale) { - super(); - __publicField$22(this, "material"); - __publicField$22(this, "fsQuad"); - __publicField$22(this, "uniforms"); - if (FilmShader === void 0) console.error("THREE.FilmPass relies on FilmShader"); - const shader = FilmShader; - this.uniforms = UniformsUtils.clone(shader.uniforms); - this.material = new ShaderMaterial({ - uniforms: this.uniforms, - vertexShader: shader.vertexShader, - fragmentShader: shader.fragmentShader - }); - if (grayscale !== void 0) this.uniforms.grayscale.value = grayscale; - if (noiseIntensity !== void 0) this.uniforms.nIntensity.value = noiseIntensity; - if (scanlinesIntensity !== void 0) this.uniforms.sIntensity.value = scanlinesIntensity; - if (scanlinesCount !== void 0) this.uniforms.sCount.value = scanlinesCount; - this.fsQuad = new FullScreenQuad(this.material); - } - render(renderer, writeBuffer, readBuffer, deltaTime) { - this.uniforms["tDiffuse"].value = readBuffer.texture; - this.uniforms["time"].value += deltaTime; - if (this.renderToScreen) { - renderer.setRenderTarget(null); - this.fsQuad.render(renderer); - } else { - renderer.setRenderTarget(writeBuffer); - if (this.clear) renderer.clear(); - this.fsQuad.render(renderer); - } - } -}; -//#endregion -//#region node_modules/three-stdlib/shaders/CopyShader.js -var CopyShader = { - uniforms: { - tDiffuse: { value: null }, - opacity: { value: 1 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform float opacity; - - uniform sampler2D tDiffuse; - - varying vec2 vUv; - - void main() { - - vec4 texel = texture2D( tDiffuse, vUv ); - gl_FragColor = opacity * texel; - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/postprocessing/OutlinePass.js -var __defProp$21 = Object.defineProperty; -var __defNormalProp$21 = (obj, key, value) => key in obj ? __defProp$21(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$21 = (obj, key, value) => { - __defNormalProp$21(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var OutlinePass = class extends Pass { - constructor(resolution, scene, camera, selectedObjects) { - super(); - __publicField$21(this, "renderScene"); - __publicField$21(this, "renderCamera"); - __publicField$21(this, "selectedObjects"); - __publicField$21(this, "visibleEdgeColor"); - __publicField$21(this, "hiddenEdgeColor"); - __publicField$21(this, "edgeGlow"); - __publicField$21(this, "usePatternTexture"); - __publicField$21(this, "edgeThickness"); - __publicField$21(this, "edgeStrength"); - __publicField$21(this, "downSampleRatio"); - __publicField$21(this, "pulsePeriod"); - __publicField$21(this, "resolution"); - __publicField$21(this, "renderTargetMaskBuffer"); - __publicField$21(this, "depthMaterial"); - __publicField$21(this, "prepareMaskMaterial"); - __publicField$21(this, "renderTargetDepthBuffer"); - __publicField$21(this, "renderTargetMaskDownSampleBuffer"); - __publicField$21(this, "renderTargetBlurBuffer1"); - __publicField$21(this, "renderTargetBlurBuffer2"); - __publicField$21(this, "edgeDetectionMaterial"); - __publicField$21(this, "renderTargetEdgeBuffer1"); - __publicField$21(this, "renderTargetEdgeBuffer2"); - __publicField$21(this, "separableBlurMaterial1"); - __publicField$21(this, "separableBlurMaterial2"); - __publicField$21(this, "overlayMaterial"); - __publicField$21(this, "materialCopy"); - __publicField$21(this, "oldClearAlpha"); - __publicField$21(this, "fsQuad"); - __publicField$21(this, "tempPulseColor1"); - __publicField$21(this, "tempPulseColor2"); - __publicField$21(this, "textureMatrix"); - __publicField$21(this, "patternTexture"); - __publicField$21(this, "_visibilityCache"); - __publicField$21(this, "_oldClearColor"); - __publicField$21(this, "copyUniforms"); - __publicField$21(this, "BlurDirectionX", new Vector2(1, 0)); - __publicField$21(this, "BlurDirectionY", new Vector2(0, 1)); - this.renderScene = scene; - this.renderCamera = camera; - this.selectedObjects = selectedObjects !== void 0 ? selectedObjects : []; - this.visibleEdgeColor = new Color(1, 1, 1); - this.hiddenEdgeColor = new Color(.1, .04, .02); - this.edgeGlow = 0; - this.usePatternTexture = false; - this.edgeThickness = 1; - this.edgeStrength = 3; - this.downSampleRatio = 2; - this.pulsePeriod = 0; - this._visibilityCache = /* @__PURE__ */ new Map(); - this.resolution = resolution !== void 0 ? new Vector2(resolution.x, resolution.y) : new Vector2(256, 256); - const resx = Math.round(this.resolution.x / this.downSampleRatio); - const resy = Math.round(this.resolution.y / this.downSampleRatio); - this.renderTargetMaskBuffer = new WebGLRenderTarget(this.resolution.x, this.resolution.y); - this.renderTargetMaskBuffer.texture.name = "OutlinePass.mask"; - this.renderTargetMaskBuffer.texture.generateMipmaps = false; - this.depthMaterial = new MeshDepthMaterial(); - this.depthMaterial.side = 2; - this.depthMaterial.depthPacking = RGBADepthPacking; - this.depthMaterial.blending = 0; - this.prepareMaskMaterial = this.getPrepareMaskMaterial(); - this.prepareMaskMaterial.side = 2; - this.prepareMaskMaterial.fragmentShader = replaceDepthToViewZ(this.prepareMaskMaterial.fragmentShader, this.renderCamera); - this.renderTargetDepthBuffer = new WebGLRenderTarget(this.resolution.x, this.resolution.y); - this.renderTargetDepthBuffer.texture.name = "OutlinePass.depth"; - this.renderTargetDepthBuffer.texture.generateMipmaps = false; - this.renderTargetMaskDownSampleBuffer = new WebGLRenderTarget(resx, resy); - this.renderTargetMaskDownSampleBuffer.texture.name = "OutlinePass.depthDownSample"; - this.renderTargetMaskDownSampleBuffer.texture.generateMipmaps = false; - this.renderTargetBlurBuffer1 = new WebGLRenderTarget(resx, resy); - this.renderTargetBlurBuffer1.texture.name = "OutlinePass.blur1"; - this.renderTargetBlurBuffer1.texture.generateMipmaps = false; - this.renderTargetBlurBuffer2 = new WebGLRenderTarget(Math.round(resx / 2), Math.round(resy / 2)); - this.renderTargetBlurBuffer2.texture.name = "OutlinePass.blur2"; - this.renderTargetBlurBuffer2.texture.generateMipmaps = false; - this.edgeDetectionMaterial = this.getEdgeDetectionMaterial(); - this.renderTargetEdgeBuffer1 = new WebGLRenderTarget(resx, resy); - this.renderTargetEdgeBuffer1.texture.name = "OutlinePass.edge1"; - this.renderTargetEdgeBuffer1.texture.generateMipmaps = false; - this.renderTargetEdgeBuffer2 = new WebGLRenderTarget(Math.round(resx / 2), Math.round(resy / 2)); - this.renderTargetEdgeBuffer2.texture.name = "OutlinePass.edge2"; - this.renderTargetEdgeBuffer2.texture.generateMipmaps = false; - const MAX_EDGE_THICKNESS = 4; - const MAX_EDGE_GLOW = 4; - this.separableBlurMaterial1 = this.getSeperableBlurMaterial(MAX_EDGE_THICKNESS); - this.separableBlurMaterial1.uniforms["texSize"].value.set(resx, resy); - this.separableBlurMaterial1.uniforms["kernelRadius"].value = 1; - this.separableBlurMaterial2 = this.getSeperableBlurMaterial(MAX_EDGE_GLOW); - this.separableBlurMaterial2.uniforms["texSize"].value.set(Math.round(resx / 2), Math.round(resy / 2)); - this.separableBlurMaterial2.uniforms["kernelRadius"].value = MAX_EDGE_GLOW; - this.overlayMaterial = this.getOverlayMaterial(); - if (CopyShader === void 0) console.error("THREE.OutlinePass relies on CopyShader"); - const copyShader = CopyShader; - this.copyUniforms = UniformsUtils.clone(copyShader.uniforms); - this.copyUniforms["opacity"].value = 1; - this.materialCopy = new ShaderMaterial({ - uniforms: this.copyUniforms, - vertexShader: copyShader.vertexShader, - fragmentShader: copyShader.fragmentShader, - blending: 0, - depthTest: false, - depthWrite: false, - transparent: true - }); - this.enabled = true; - this.needsSwap = false; - this._oldClearColor = new Color(); - this.oldClearAlpha = 1; - this.fsQuad = new FullScreenQuad(this.materialCopy); - this.tempPulseColor1 = new Color(); - this.tempPulseColor2 = new Color(); - this.textureMatrix = new Matrix4(); - function replaceDepthToViewZ(string, camera2) { - const type = camera2.isPerspectiveCamera ? "perspective" : "orthographic"; - return string.replace(/DEPTH_TO_VIEW_Z/g, type + "DepthToViewZ"); - } - } - dispose() { - this.renderTargetMaskBuffer.dispose(); - this.renderTargetDepthBuffer.dispose(); - this.renderTargetMaskDownSampleBuffer.dispose(); - this.renderTargetBlurBuffer1.dispose(); - this.renderTargetBlurBuffer2.dispose(); - this.renderTargetEdgeBuffer1.dispose(); - this.renderTargetEdgeBuffer2.dispose(); - } - setSize(width, height) { - this.renderTargetMaskBuffer.setSize(width, height); - this.renderTargetDepthBuffer.setSize(width, height); - let resx = Math.round(width / this.downSampleRatio); - let resy = Math.round(height / this.downSampleRatio); - this.renderTargetMaskDownSampleBuffer.setSize(resx, resy); - this.renderTargetBlurBuffer1.setSize(resx, resy); - this.renderTargetEdgeBuffer1.setSize(resx, resy); - this.separableBlurMaterial1.uniforms["texSize"].value.set(resx, resy); - resx = Math.round(resx / 2); - resy = Math.round(resy / 2); - this.renderTargetBlurBuffer2.setSize(resx, resy); - this.renderTargetEdgeBuffer2.setSize(resx, resy); - this.separableBlurMaterial2.uniforms["texSize"].value.set(resx, resy); - } - changeVisibilityOfSelectedObjects(bVisible) { - const cache = this._visibilityCache; - function gatherSelectedMeshesCallBack(object) { - if (object.isMesh) if (bVisible === true) object.visible = cache.get(object); - else { - cache.set(object, object.visible); - object.visible = bVisible; - } - } - for (let i = 0; i < this.selectedObjects.length; i++) this.selectedObjects[i].traverse(gatherSelectedMeshesCallBack); - } - changeVisibilityOfNonSelectedObjects(bVisible) { - const cache = this._visibilityCache; - const selectedMeshes = []; - function gatherSelectedMeshesCallBack(object) { - if (object.isMesh) selectedMeshes.push(object); - } - for (let i = 0; i < this.selectedObjects.length; i++) this.selectedObjects[i].traverse(gatherSelectedMeshesCallBack); - function VisibilityChangeCallBack(object) { - if (object.isMesh || object.isSprite) { - let bFound = false; - for (let i = 0; i < selectedMeshes.length; i++) if (selectedMeshes[i].id === object.id) { - bFound = true; - break; - } - if (bFound === false) { - const visibility = object.visible; - if (bVisible === false || cache.get(object) === true) object.visible = bVisible; - cache.set(object, visibility); - } - } else if (object.isPoints || object.isLine) if (bVisible === true) object.visible = cache.get(object); - else { - cache.set(object, object.visible); - object.visible = bVisible; - } - } - this.renderScene.traverse(VisibilityChangeCallBack); - } - updateTextureMatrix() { - this.textureMatrix.set(.5, 0, 0, .5, 0, .5, 0, .5, 0, 0, .5, .5, 0, 0, 0, 1); - this.textureMatrix.multiply(this.renderCamera.projectionMatrix); - this.textureMatrix.multiply(this.renderCamera.matrixWorldInverse); - } - render(renderer, writeBuffer, readBuffer, deltaTime, maskActive) { - if (this.selectedObjects.length > 0) { - renderer.getClearColor(this._oldClearColor); - this.oldClearAlpha = renderer.getClearAlpha(); - const oldAutoClear = renderer.autoClear; - renderer.autoClear = false; - if (maskActive) renderer.state.buffers.stencil.setTest(false); - renderer.setClearColor(16777215, 1); - this.changeVisibilityOfSelectedObjects(false); - const currentBackground = this.renderScene.background; - this.renderScene.background = null; - this.renderScene.overrideMaterial = this.depthMaterial; - renderer.setRenderTarget(this.renderTargetDepthBuffer); - renderer.clear(); - renderer.render(this.renderScene, this.renderCamera); - this.changeVisibilityOfSelectedObjects(true); - this._visibilityCache.clear(); - this.updateTextureMatrix(); - this.changeVisibilityOfNonSelectedObjects(false); - this.renderScene.overrideMaterial = this.prepareMaskMaterial; - this.prepareMaskMaterial.uniforms["cameraNearFar"].value.set(this.renderCamera.near, this.renderCamera.far); - this.prepareMaskMaterial.uniforms["depthTexture"].value = this.renderTargetDepthBuffer.texture; - this.prepareMaskMaterial.uniforms["textureMatrix"].value = this.textureMatrix; - renderer.setRenderTarget(this.renderTargetMaskBuffer); - renderer.clear(); - renderer.render(this.renderScene, this.renderCamera); - this.renderScene.overrideMaterial = null; - this.changeVisibilityOfNonSelectedObjects(true); - this._visibilityCache.clear(); - this.renderScene.background = currentBackground; - this.fsQuad.material = this.materialCopy; - this.copyUniforms["tDiffuse"].value = this.renderTargetMaskBuffer.texture; - renderer.setRenderTarget(this.renderTargetMaskDownSampleBuffer); - renderer.clear(); - this.fsQuad.render(renderer); - this.tempPulseColor1.copy(this.visibleEdgeColor); - this.tempPulseColor2.copy(this.hiddenEdgeColor); - if (this.pulsePeriod > 0) { - const scalar = 1.25 / 2 + Math.cos(performance.now() * .01 / this.pulsePeriod) * .75 / 2; - this.tempPulseColor1.multiplyScalar(scalar); - this.tempPulseColor2.multiplyScalar(scalar); - } - this.fsQuad.material = this.edgeDetectionMaterial; - this.edgeDetectionMaterial.uniforms["maskTexture"].value = this.renderTargetMaskDownSampleBuffer.texture; - this.edgeDetectionMaterial.uniforms["texSize"].value.set(this.renderTargetMaskDownSampleBuffer.width, this.renderTargetMaskDownSampleBuffer.height); - this.edgeDetectionMaterial.uniforms["visibleEdgeColor"].value = this.tempPulseColor1; - this.edgeDetectionMaterial.uniforms["hiddenEdgeColor"].value = this.tempPulseColor2; - renderer.setRenderTarget(this.renderTargetEdgeBuffer1); - renderer.clear(); - this.fsQuad.render(renderer); - this.fsQuad.material = this.separableBlurMaterial1; - this.separableBlurMaterial1.uniforms["colorTexture"].value = this.renderTargetEdgeBuffer1.texture; - this.separableBlurMaterial1.uniforms["direction"].value = this.BlurDirectionX; - this.separableBlurMaterial1.uniforms["kernelRadius"].value = this.edgeThickness; - renderer.setRenderTarget(this.renderTargetBlurBuffer1); - renderer.clear(); - this.fsQuad.render(renderer); - this.separableBlurMaterial1.uniforms["colorTexture"].value = this.renderTargetBlurBuffer1.texture; - this.separableBlurMaterial1.uniforms["direction"].value = this.BlurDirectionY; - renderer.setRenderTarget(this.renderTargetEdgeBuffer1); - renderer.clear(); - this.fsQuad.render(renderer); - this.fsQuad.material = this.separableBlurMaterial2; - this.separableBlurMaterial2.uniforms["colorTexture"].value = this.renderTargetEdgeBuffer1.texture; - this.separableBlurMaterial2.uniforms["direction"].value = this.BlurDirectionX; - renderer.setRenderTarget(this.renderTargetBlurBuffer2); - renderer.clear(); - this.fsQuad.render(renderer); - this.separableBlurMaterial2.uniforms["colorTexture"].value = this.renderTargetBlurBuffer2.texture; - this.separableBlurMaterial2.uniforms["direction"].value = this.BlurDirectionY; - renderer.setRenderTarget(this.renderTargetEdgeBuffer2); - renderer.clear(); - this.fsQuad.render(renderer); - this.fsQuad.material = this.overlayMaterial; - this.overlayMaterial.uniforms["maskTexture"].value = this.renderTargetMaskBuffer.texture; - this.overlayMaterial.uniforms["edgeTexture1"].value = this.renderTargetEdgeBuffer1.texture; - this.overlayMaterial.uniforms["edgeTexture2"].value = this.renderTargetEdgeBuffer2.texture; - this.overlayMaterial.uniforms["patternTexture"].value = this.patternTexture; - this.overlayMaterial.uniforms["edgeStrength"].value = this.edgeStrength; - this.overlayMaterial.uniforms["edgeGlow"].value = this.edgeGlow; - this.overlayMaterial.uniforms["usePatternTexture"].value = this.usePatternTexture; - if (maskActive) renderer.state.buffers.stencil.setTest(true); - renderer.setRenderTarget(readBuffer); - this.fsQuad.render(renderer); - renderer.setClearColor(this._oldClearColor, this.oldClearAlpha); - renderer.autoClear = oldAutoClear; - } - if (this.renderToScreen) { - this.fsQuad.material = this.materialCopy; - this.copyUniforms["tDiffuse"].value = readBuffer.texture; - renderer.setRenderTarget(null); - this.fsQuad.render(renderer); - } - } - getPrepareMaskMaterial() { - return new ShaderMaterial({ - uniforms: { - depthTexture: { value: null }, - cameraNearFar: { value: new Vector2(.5, .5) }, - textureMatrix: { value: null } - }, - vertexShader: `#include <morphtarget_pars_vertex> - #include <skinning_pars_vertex> - varying vec4 projTexCoord; - varying vec4 vPosition; - uniform mat4 textureMatrix; - void main() { - #include <skinbase_vertex> - #include <begin_vertex> - #include <morphtarget_vertex> - #include <skinning_vertex> - #include <project_vertex> - vPosition = mvPosition; - vec4 worldPosition = modelMatrix * vec4( transformed, 1.0 ); - projTexCoord = textureMatrix * worldPosition; - }`, - fragmentShader: `#include <packing> - varying vec4 vPosition; - varying vec4 projTexCoord; - uniform sampler2D depthTexture; - uniform vec2 cameraNearFar; - void main() { - float depth = unpackRGBAToDepth(texture2DProj( depthTexture, projTexCoord )); - float viewZ = - DEPTH_TO_VIEW_Z( depth, cameraNearFar.x, cameraNearFar.y ); - float depthTest = (-vPosition.z > viewZ) ? 1.0 : 0.0; - gl_FragColor = vec4(0.0, depthTest, 1.0, 1.0); - }` - }); - } - getEdgeDetectionMaterial() { - return new ShaderMaterial({ - uniforms: { - maskTexture: { value: null }, - texSize: { value: new Vector2(.5, .5) }, - visibleEdgeColor: { value: new Vector3(1, 1, 1) }, - hiddenEdgeColor: { value: new Vector3(1, 1, 1) } - }, - vertexShader: `varying vec2 vUv; - void main() { - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - }`, - fragmentShader: `varying vec2 vUv; - uniform sampler2D maskTexture; - uniform vec2 texSize; - uniform vec3 visibleEdgeColor; - uniform vec3 hiddenEdgeColor; - void main() { - vec2 invSize = 1.0 / texSize; - vec4 uvOffset = vec4(1.0, 0.0, 0.0, 1.0) * vec4(invSize, invSize); - vec4 c1 = texture2D( maskTexture, vUv + uvOffset.xy); - vec4 c2 = texture2D( maskTexture, vUv - uvOffset.xy); - vec4 c3 = texture2D( maskTexture, vUv + uvOffset.yw); - vec4 c4 = texture2D( maskTexture, vUv - uvOffset.yw); - float diff1 = (c1.r - c2.r)*0.5; - float diff2 = (c3.r - c4.r)*0.5; - float d = length( vec2(diff1, diff2) ); - float a1 = min(c1.g, c2.g); - float a2 = min(c3.g, c4.g); - float visibilityFactor = min(a1, a2); - vec3 edgeColor = 1.0 - visibilityFactor > 0.001 ? visibleEdgeColor : hiddenEdgeColor; - gl_FragColor = vec4(edgeColor, 1.0) * vec4(d); - }` - }); - } - getSeperableBlurMaterial(maxRadius) { - return new ShaderMaterial({ - defines: { MAX_RADIUS: maxRadius }, - uniforms: { - colorTexture: { value: null }, - texSize: { value: new Vector2(.5, .5) }, - direction: { value: new Vector2(.5, .5) }, - kernelRadius: { value: 1 } - }, - vertexShader: `varying vec2 vUv; - void main() { - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - }`, - fragmentShader: `#include <common> - varying vec2 vUv; - uniform sampler2D colorTexture; - uniform vec2 texSize; - uniform vec2 direction; - uniform float kernelRadius; - float gaussianPdf(in float x, in float sigma) { - return 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma; - } - void main() { - vec2 invSize = 1.0 / texSize; - float weightSum = gaussianPdf(0.0, kernelRadius); - vec4 diffuseSum = texture2D( colorTexture, vUv) * weightSum; - vec2 delta = direction * invSize * kernelRadius/float(MAX_RADIUS); - vec2 uvOffset = delta; - for( int i = 1; i <= MAX_RADIUS; i ++ ) { - float w = gaussianPdf(uvOffset.x, kernelRadius); - vec4 sample1 = texture2D( colorTexture, vUv + uvOffset); - vec4 sample2 = texture2D( colorTexture, vUv - uvOffset); - diffuseSum += ((sample1 + sample2) * w); - weightSum += (2.0 * w); - uvOffset += delta; - } - gl_FragColor = diffuseSum/weightSum; - }` - }); - } - getOverlayMaterial() { - return new ShaderMaterial({ - uniforms: { - maskTexture: { value: null }, - edgeTexture1: { value: null }, - edgeTexture2: { value: null }, - patternTexture: { value: null }, - edgeStrength: { value: 1 }, - edgeGlow: { value: 1 }, - usePatternTexture: { value: 0 } - }, - vertexShader: `varying vec2 vUv; - void main() { - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - }`, - fragmentShader: `varying vec2 vUv; - uniform sampler2D maskTexture; - uniform sampler2D edgeTexture1; - uniform sampler2D edgeTexture2; - uniform sampler2D patternTexture; - uniform float edgeStrength; - uniform float edgeGlow; - uniform bool usePatternTexture; - void main() { - vec4 edgeValue1 = texture2D(edgeTexture1, vUv); - vec4 edgeValue2 = texture2D(edgeTexture2, vUv); - vec4 maskColor = texture2D(maskTexture, vUv); - vec4 patternColor = texture2D(patternTexture, 6.0 * vUv); - float visibilityFactor = 1.0 - maskColor.g > 0.0 ? 1.0 : 0.5; - vec4 edgeValue = edgeValue1 + edgeValue2 * edgeGlow; - vec4 finalColor = edgeStrength * maskColor.r * edgeValue; - if(usePatternTexture) - finalColor += + visibilityFactor * (1.0 - maskColor.r) * (1.0 - patternColor.r); - gl_FragColor = finalColor; - }`, - blending: 2, - depthTest: false, - depthWrite: false, - transparent: true - }); - } -}; -//#endregion -//#region node_modules/three-stdlib/shaders/SSAOShader.js -var SSAOShader = { - defines: { - PERSPECTIVE_CAMERA: 1, - KERNEL_SIZE: 32 - }, - uniforms: { - tDiffuse: { value: null }, - tNormal: { value: null }, - tDepth: { value: null }, - tNoise: { value: null }, - kernel: { value: null }, - cameraNear: { value: null }, - cameraFar: { value: null }, - resolution: { value: /* @__PURE__ */ new Vector2() }, - cameraProjectionMatrix: { value: /* @__PURE__ */ new Matrix4() }, - cameraInverseProjectionMatrix: { value: /* @__PURE__ */ new Matrix4() }, - kernelRadius: { value: 8 }, - minDistance: { value: .005 }, - maxDistance: { value: .05 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform sampler2D tDiffuse; - uniform sampler2D tNormal; - uniform sampler2D tDepth; - uniform sampler2D tNoise; - - uniform vec3 kernel[ KERNEL_SIZE ]; - - uniform vec2 resolution; - - uniform float cameraNear; - uniform float cameraFar; - uniform mat4 cameraProjectionMatrix; - uniform mat4 cameraInverseProjectionMatrix; - - uniform float kernelRadius; - uniform float minDistance; // avoid artifacts caused by neighbour fragments with minimal depth difference - uniform float maxDistance; // avoid the influence of fragments which are too far away - - varying vec2 vUv; - - #include <packing> - - float getDepth( const in vec2 screenPosition ) { - - return texture2D( tDepth, screenPosition ).x; - - } - - float getLinearDepth( const in vec2 screenPosition ) { - - #if PERSPECTIVE_CAMERA == 1 - - float fragCoordZ = texture2D( tDepth, screenPosition ).x; - float viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar ); - return viewZToOrthographicDepth( viewZ, cameraNear, cameraFar ); - - #else - - return texture2D( tDepth, screenPosition ).x; - - #endif - - } - - float getViewZ( const in float depth ) { - - #if PERSPECTIVE_CAMERA == 1 - - return perspectiveDepthToViewZ( depth, cameraNear, cameraFar ); - - #else - - return orthographicDepthToViewZ( depth, cameraNear, cameraFar ); - - #endif - - } - - vec3 getViewPosition( const in vec2 screenPosition, const in float depth, const in float viewZ ) { - - float clipW = cameraProjectionMatrix[2][3] * viewZ + cameraProjectionMatrix[3][3]; - - vec4 clipPosition = vec4( ( vec3( screenPosition, depth ) - 0.5 ) * 2.0, 1.0 ); - - clipPosition *= clipW; // unprojection. - - return ( cameraInverseProjectionMatrix * clipPosition ).xyz; - - } - - vec3 getViewNormal( const in vec2 screenPosition ) { - - return unpackRGBToNormal( texture2D( tNormal, screenPosition ).xyz ); - - } - - void main() { - - float depth = getDepth( vUv ); - float viewZ = getViewZ( depth ); - - vec3 viewPosition = getViewPosition( vUv, depth, viewZ ); - vec3 viewNormal = getViewNormal( vUv ); - - vec2 noiseScale = vec2( resolution.x / 4.0, resolution.y / 4.0 ); - vec3 random = texture2D( tNoise, vUv * noiseScale ).xyz; - - // compute matrix used to reorient a kernel vector - - vec3 tangent = normalize( random - viewNormal * dot( random, viewNormal ) ); - vec3 bitangent = cross( viewNormal, tangent ); - mat3 kernelMatrix = mat3( tangent, bitangent, viewNormal ); - - float occlusion = 0.0; - - for ( int i = 0; i < KERNEL_SIZE; i ++ ) { - - vec3 sampleVector = kernelMatrix * kernel[ i ]; // reorient sample vector in view space - vec3 samplePoint = viewPosition + ( sampleVector * kernelRadius ); // calculate sample point - - vec4 samplePointNDC = cameraProjectionMatrix * vec4( samplePoint, 1.0 ); // project point and calculate NDC - samplePointNDC /= samplePointNDC.w; - - vec2 samplePointUv = samplePointNDC.xy * 0.5 + 0.5; // compute uv coordinates - - float realDepth = getLinearDepth( samplePointUv ); // get linear depth from depth texture - float sampleDepth = viewZToOrthographicDepth( samplePoint.z, cameraNear, cameraFar ); // compute linear depth of the sample view Z value - float delta = sampleDepth - realDepth; - - if ( delta > minDistance && delta < maxDistance ) { // if fragment is before sample point, increase occlusion - - occlusion += 1.0; - - } - - } - - occlusion = clamp( occlusion / float( KERNEL_SIZE ), 0.0, 1.0 ); - - gl_FragColor = vec4( vec3( 1.0 - occlusion ), 1.0 ); - - } - ` -}; -var SSAODepthShader = { - defines: { PERSPECTIVE_CAMERA: 1 }, - uniforms: { - tDepth: { value: null }, - cameraNear: { value: null }, - cameraFar: { value: null } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform sampler2D tDepth; - - uniform float cameraNear; - uniform float cameraFar; - - varying vec2 vUv; - - #include <packing> - - float getLinearDepth( const in vec2 screenPosition ) { - - #if PERSPECTIVE_CAMERA == 1 - - float fragCoordZ = texture2D( tDepth, screenPosition ).x; - float viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar ); - return viewZToOrthographicDepth( viewZ, cameraNear, cameraFar ); - - #else - - return texture2D( tDepth, screenPosition ).x; - - #endif - - } - - void main() { - - float depth = getLinearDepth( vUv ); - gl_FragColor = vec4( vec3( 1.0 - depth ), 1.0 ); - - } - ` -}; -var SSAOBlurShader = { - uniforms: { - tDiffuse: { value: null }, - resolution: { value: /* @__PURE__ */ new Vector2() } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform sampler2D tDiffuse; - - uniform vec2 resolution; - - varying vec2 vUv; - - void main() { - - vec2 texelSize = ( 1.0 / resolution ); - float result = 0.0; - - for ( int i = - 2; i <= 2; i ++ ) { - - for ( int j = - 2; j <= 2; j ++ ) { - - vec2 offset = ( vec2( float( i ), float( j ) ) ) * texelSize; - result += texture2D( tDiffuse, vUv + offset ).r; - - } - - } - - gl_FragColor = vec4( vec3( result / ( 5.0 * 5.0 ) ), 1.0 ); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/postprocessing/SSAOPass.js -var __defProp$20 = Object.defineProperty; -var __defNormalProp$20 = (obj, key, value) => key in obj ? __defProp$20(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$20 = (obj, key, value) => { - __defNormalProp$20(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var SSAOPass = /* @__PURE__ */ (() => { - const _SSAOPass = class extends Pass { - constructor(scene, camera, width, height) { - super(); - this.width = width !== void 0 ? width : 512; - this.height = height !== void 0 ? height : 512; - this.clear = true; - this.camera = camera; - this.scene = scene; - this.kernelRadius = 8; - this.kernelSize = 32; - this.kernel = []; - this.noiseTexture = null; - this.output = 0; - this.minDistance = .005; - this.maxDistance = .1; - this._visibilityCache = /* @__PURE__ */ new Map(); - this.generateSampleKernel(); - this.generateRandomKernelRotations(); - const depthTexture = new DepthTexture(); - depthTexture.format = DepthStencilFormat; - depthTexture.type = UnsignedInt248Type; - this.beautyRenderTarget = new WebGLRenderTarget(this.width, this.height); - this.normalRenderTarget = new WebGLRenderTarget(this.width, this.height, { - minFilter: NearestFilter, - magFilter: NearestFilter, - depthTexture - }); - this.ssaoRenderTarget = new WebGLRenderTarget(this.width, this.height); - this.blurRenderTarget = this.ssaoRenderTarget.clone(); - if (SSAOShader === void 0) console.error("THREE.SSAOPass: The pass relies on SSAOShader."); - this.ssaoMaterial = new ShaderMaterial({ - defines: Object.assign({}, SSAOShader.defines), - uniforms: UniformsUtils.clone(SSAOShader.uniforms), - vertexShader: SSAOShader.vertexShader, - fragmentShader: SSAOShader.fragmentShader, - blending: 0 - }); - this.ssaoMaterial.uniforms["tDiffuse"].value = this.beautyRenderTarget.texture; - this.ssaoMaterial.uniforms["tNormal"].value = this.normalRenderTarget.texture; - this.ssaoMaterial.uniforms["tDepth"].value = this.normalRenderTarget.depthTexture; - this.ssaoMaterial.uniforms["tNoise"].value = this.noiseTexture; - this.ssaoMaterial.uniforms["kernel"].value = this.kernel; - this.ssaoMaterial.uniforms["cameraNear"].value = this.camera.near; - this.ssaoMaterial.uniforms["cameraFar"].value = this.camera.far; - this.ssaoMaterial.uniforms["resolution"].value.set(this.width, this.height); - this.ssaoMaterial.uniforms["cameraProjectionMatrix"].value.copy(this.camera.projectionMatrix); - this.ssaoMaterial.uniforms["cameraInverseProjectionMatrix"].value.copy(this.camera.projectionMatrixInverse); - this.normalMaterial = new MeshNormalMaterial(); - this.normalMaterial.blending = 0; - this.blurMaterial = new ShaderMaterial({ - defines: Object.assign({}, SSAOBlurShader.defines), - uniforms: UniformsUtils.clone(SSAOBlurShader.uniforms), - vertexShader: SSAOBlurShader.vertexShader, - fragmentShader: SSAOBlurShader.fragmentShader - }); - this.blurMaterial.uniforms["tDiffuse"].value = this.ssaoRenderTarget.texture; - this.blurMaterial.uniforms["resolution"].value.set(this.width, this.height); - this.depthRenderMaterial = new ShaderMaterial({ - defines: Object.assign({}, SSAODepthShader.defines), - uniforms: UniformsUtils.clone(SSAODepthShader.uniforms), - vertexShader: SSAODepthShader.vertexShader, - fragmentShader: SSAODepthShader.fragmentShader, - blending: 0 - }); - this.depthRenderMaterial.uniforms["tDepth"].value = this.normalRenderTarget.depthTexture; - this.depthRenderMaterial.uniforms["cameraNear"].value = this.camera.near; - this.depthRenderMaterial.uniforms["cameraFar"].value = this.camera.far; - this.copyMaterial = new ShaderMaterial({ - uniforms: UniformsUtils.clone(CopyShader.uniforms), - vertexShader: CopyShader.vertexShader, - fragmentShader: CopyShader.fragmentShader, - transparent: true, - depthTest: false, - depthWrite: false, - blendSrc: 208, - blendDst: 200, - blendEquation: 100, - blendSrcAlpha: 206, - blendDstAlpha: 200, - blendEquationAlpha: 100 - }); - this.fsQuad = new FullScreenQuad(null); - this.originalClearColor = new Color(); - } - dispose() { - this.beautyRenderTarget.dispose(); - this.normalRenderTarget.dispose(); - this.ssaoRenderTarget.dispose(); - this.blurRenderTarget.dispose(); - this.normalMaterial.dispose(); - this.blurMaterial.dispose(); - this.copyMaterial.dispose(); - this.depthRenderMaterial.dispose(); - this.fsQuad.dispose(); - } - render(renderer, writeBuffer) { - renderer.setRenderTarget(this.beautyRenderTarget); - renderer.clear(); - renderer.render(this.scene, this.camera); - this.overrideVisibility(); - this.renderOverride(renderer, this.normalMaterial, this.normalRenderTarget, 7829503, 1); - this.restoreVisibility(); - this.ssaoMaterial.uniforms["kernelRadius"].value = this.kernelRadius; - this.ssaoMaterial.uniforms["minDistance"].value = this.minDistance; - this.ssaoMaterial.uniforms["maxDistance"].value = this.maxDistance; - this.renderPass(renderer, this.ssaoMaterial, this.ssaoRenderTarget); - this.renderPass(renderer, this.blurMaterial, this.blurRenderTarget); - switch (this.output) { - case _SSAOPass.OUTPUT.SSAO: - this.copyMaterial.uniforms["tDiffuse"].value = this.ssaoRenderTarget.texture; - this.copyMaterial.blending = 0; - this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer); - break; - case _SSAOPass.OUTPUT.Blur: - this.copyMaterial.uniforms["tDiffuse"].value = this.blurRenderTarget.texture; - this.copyMaterial.blending = 0; - this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer); - break; - case _SSAOPass.OUTPUT.Beauty: - this.copyMaterial.uniforms["tDiffuse"].value = this.beautyRenderTarget.texture; - this.copyMaterial.blending = 0; - this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer); - break; - case _SSAOPass.OUTPUT.Depth: - this.renderPass(renderer, this.depthRenderMaterial, this.renderToScreen ? null : writeBuffer); - break; - case _SSAOPass.OUTPUT.Normal: - this.copyMaterial.uniforms["tDiffuse"].value = this.normalRenderTarget.texture; - this.copyMaterial.blending = 0; - this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer); - break; - case _SSAOPass.OUTPUT.Default: - this.copyMaterial.uniforms["tDiffuse"].value = this.beautyRenderTarget.texture; - this.copyMaterial.blending = 0; - this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer); - this.copyMaterial.uniforms["tDiffuse"].value = this.blurRenderTarget.texture; - this.copyMaterial.blending = 5; - this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer); - break; - default: console.warn("THREE.SSAOPass: Unknown output type."); - } - } - renderPass(renderer, passMaterial, renderTarget, clearColor, clearAlpha) { - renderer.getClearColor(this.originalClearColor); - const originalClearAlpha = renderer.getClearAlpha(); - const originalAutoClear = renderer.autoClear; - renderer.setRenderTarget(renderTarget); - renderer.autoClear = false; - if (clearColor !== void 0 && clearColor !== null) { - renderer.setClearColor(clearColor); - renderer.setClearAlpha(clearAlpha || 0); - renderer.clear(); - } - this.fsQuad.material = passMaterial; - this.fsQuad.render(renderer); - renderer.autoClear = originalAutoClear; - renderer.setClearColor(this.originalClearColor); - renderer.setClearAlpha(originalClearAlpha); - } - renderOverride(renderer, overrideMaterial, renderTarget, clearColor, clearAlpha) { - renderer.getClearColor(this.originalClearColor); - const originalClearAlpha = renderer.getClearAlpha(); - const originalAutoClear = renderer.autoClear; - renderer.setRenderTarget(renderTarget); - renderer.autoClear = false; - clearColor = overrideMaterial.clearColor || clearColor; - clearAlpha = overrideMaterial.clearAlpha || clearAlpha; - if (clearColor !== void 0 && clearColor !== null) { - renderer.setClearColor(clearColor); - renderer.setClearAlpha(clearAlpha || 0); - renderer.clear(); - } - this.scene.overrideMaterial = overrideMaterial; - renderer.render(this.scene, this.camera); - this.scene.overrideMaterial = null; - renderer.autoClear = originalAutoClear; - renderer.setClearColor(this.originalClearColor); - renderer.setClearAlpha(originalClearAlpha); - } - setSize(width, height) { - this.width = width; - this.height = height; - this.beautyRenderTarget.setSize(width, height); - this.ssaoRenderTarget.setSize(width, height); - this.normalRenderTarget.setSize(width, height); - this.blurRenderTarget.setSize(width, height); - this.ssaoMaterial.uniforms["resolution"].value.set(width, height); - this.ssaoMaterial.uniforms["cameraProjectionMatrix"].value.copy(this.camera.projectionMatrix); - this.ssaoMaterial.uniforms["cameraInverseProjectionMatrix"].value.copy(this.camera.projectionMatrixInverse); - this.blurMaterial.uniforms["resolution"].value.set(width, height); - } - generateSampleKernel() { - const kernelSize = this.kernelSize; - const kernel = this.kernel; - for (let i = 0; i < kernelSize; i++) { - const sample = new Vector3(); - sample.x = Math.random() * 2 - 1; - sample.y = Math.random() * 2 - 1; - sample.z = Math.random(); - sample.normalize(); - let scale = i / kernelSize; - scale = MathUtils.lerp(.1, 1, scale * scale); - sample.multiplyScalar(scale); - kernel.push(sample); - } - } - generateRandomKernelRotations() { - const width = 4, height = 4; - if (SimplexNoise === void 0) console.error("THREE.SSAOPass: The pass relies on SimplexNoise."); - const simplex = new SimplexNoise(); - const size = width * height; - const data = new Float32Array(size); - for (let i = 0; i < size; i++) { - const x = Math.random() * 2 - 1; - const y = Math.random() * 2 - 1; - data[i] = simplex.noise3d(x, y, 0); - } - this.noiseTexture = new DataTexture(data, width, height, RedFormat, FloatType); - this.noiseTexture.wrapS = RepeatWrapping; - this.noiseTexture.wrapT = RepeatWrapping; - this.noiseTexture.needsUpdate = true; - } - overrideVisibility() { - const scene = this.scene; - const cache = this._visibilityCache; - scene.traverse(function(object) { - cache.set(object, object.visible); - if (object.isPoints || object.isLine) object.visible = false; - }); - } - restoreVisibility() { - const scene = this.scene; - const cache = this._visibilityCache; - scene.traverse(function(object) { - object.visible = cache.get(object); - }); - cache.clear(); - } - }; - let SSAOPass2 = _SSAOPass; - __publicField$20(SSAOPass2, "OUTPUT", { - Default: 0, - SSAO: 1, - Blur: 2, - Beauty: 3, - Depth: 4, - Normal: 5 - }); - return SSAOPass2; -})(); -//#endregion -//#region node_modules/three-stdlib/postprocessing/SavePass.js -var SavePass = class extends Pass { - constructor(renderTarget) { - super(); - if (CopyShader === void 0) console.error("THREE.SavePass relies on CopyShader"); - const shader = CopyShader; - this.textureID = "tDiffuse"; - this.uniforms = UniformsUtils.clone(shader.uniforms); - this.material = new ShaderMaterial({ - uniforms: this.uniforms, - vertexShader: shader.vertexShader, - fragmentShader: shader.fragmentShader, - blending: 0 - }); - this.renderTarget = renderTarget; - if (this.renderTarget === void 0) { - this.renderTarget = new WebGLRenderTarget(window.innerWidth, window.innerHeight); - this.renderTarget.texture.name = "SavePass.rt"; - } - this.needsSwap = false; - this.fsQuad = new FullScreenQuad(this.material); - } - render(renderer, writeBuffer, readBuffer) { - if (this.uniforms[this.textureID]) this.uniforms[this.textureID].value = readBuffer.texture; - renderer.setRenderTarget(this.renderTarget); - if (this.clear) renderer.clear(); - this.fsQuad.render(renderer); - } -}; -//#endregion -//#region node_modules/three-stdlib/shaders/BokehShader.js -var BokehShader = { - defines: { - DEPTH_PACKING: 1, - PERSPECTIVE_CAMERA: 1 - }, - uniforms: { - tColor: { value: null }, - tDepth: { value: null }, - focus: { value: 1 }, - aspect: { value: 1 }, - aperture: { value: .025 }, - maxblur: { value: .01 }, - nearClip: { value: 1 }, - farClip: { value: 1e3 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - #include <common> - - varying vec2 vUv; - - uniform sampler2D tColor; - uniform sampler2D tDepth; - - uniform float maxblur; // max blur amount - uniform float aperture; // aperture - bigger values for shallower depth of field - - uniform float nearClip; - uniform float farClip; - - uniform float focus; - uniform float aspect; - - #include <packing> - - float getDepth( const in vec2 screenPosition ) { - #if DEPTH_PACKING == 1 - return unpackRGBAToDepth( texture2D( tDepth, screenPosition ) ); - #else - return texture2D( tDepth, screenPosition ).x; - #endif - } - - float getViewZ( const in float depth ) { - #if PERSPECTIVE_CAMERA == 1 - return perspectiveDepthToViewZ( depth, nearClip, farClip ); - #else - return orthographicDepthToViewZ( depth, nearClip, farClip ); - #endif - } - - void main() { - - vec2 aspectcorrect = vec2( 1.0, aspect ); - - float viewZ = getViewZ( getDepth( vUv ) ); - - float factor = ( focus + viewZ ); // viewZ is <= 0, so this is a difference equation - - vec2 dofblur = vec2 ( clamp( factor * aperture, -maxblur, maxblur ) ); - - vec2 dofblur9 = dofblur * 0.9; - vec2 dofblur7 = dofblur * 0.7; - vec2 dofblur4 = dofblur * 0.4; - - vec4 col = vec4( 0.0 ); - - col += texture2D( tColor, vUv.xy ); - col += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur ); - col += texture2D( tColor, vUv.xy + ( vec2( 0.15, 0.37 ) * aspectcorrect ) * dofblur ); - col += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur ); - col += texture2D( tColor, vUv.xy + ( vec2( -0.37, 0.15 ) * aspectcorrect ) * dofblur ); - col += texture2D( tColor, vUv.xy + ( vec2( 0.40, 0.0 ) * aspectcorrect ) * dofblur ); - col += texture2D( tColor, vUv.xy + ( vec2( 0.37, -0.15 ) * aspectcorrect ) * dofblur ); - col += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur ); - col += texture2D( tColor, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur ); - col += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur ); - col += texture2D( tColor, vUv.xy + ( vec2( -0.15, 0.37 ) * aspectcorrect ) * dofblur ); - col += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur ); - col += texture2D( tColor, vUv.xy + ( vec2( 0.37, 0.15 ) * aspectcorrect ) * dofblur ); - col += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur ); - col += texture2D( tColor, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur ); - col += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur ); - col += texture2D( tColor, vUv.xy + ( vec2( 0.15, -0.37 ) * aspectcorrect ) * dofblur ); - - col += texture2D( tColor, vUv.xy + ( vec2( 0.15, 0.37 ) * aspectcorrect ) * dofblur9 ); - col += texture2D( tColor, vUv.xy + ( vec2( -0.37, 0.15 ) * aspectcorrect ) * dofblur9 ); - col += texture2D( tColor, vUv.xy + ( vec2( 0.37, -0.15 ) * aspectcorrect ) * dofblur9 ); - col += texture2D( tColor, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur9 ); - col += texture2D( tColor, vUv.xy + ( vec2( -0.15, 0.37 ) * aspectcorrect ) * dofblur9 ); - col += texture2D( tColor, vUv.xy + ( vec2( 0.37, 0.15 ) * aspectcorrect ) * dofblur9 ); - col += texture2D( tColor, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur9 ); - col += texture2D( tColor, vUv.xy + ( vec2( 0.15, -0.37 ) * aspectcorrect ) * dofblur9 ); - - col += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur7 ); - col += texture2D( tColor, vUv.xy + ( vec2( 0.40, 0.0 ) * aspectcorrect ) * dofblur7 ); - col += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur7 ); - col += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur7 ); - col += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur7 ); - col += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur7 ); - col += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur7 ); - col += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur7 ); - - col += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur4 ); - col += texture2D( tColor, vUv.xy + ( vec2( 0.4, 0.0 ) * aspectcorrect ) * dofblur4 ); - col += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur4 ); - col += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur4 ); - col += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur4 ); - col += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur4 ); - col += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur4 ); - col += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur4 ); - - gl_FragColor = col / 41.0; - gl_FragColor.a = 1.0; - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/postprocessing/BokehPass.js -var __defProp$19 = Object.defineProperty; -var __defNormalProp$19 = (obj, key, value) => key in obj ? __defProp$19(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$19 = (obj, key, value) => { - __defNormalProp$19(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var BokehPass = class extends Pass { - constructor(scene, camera, params) { - super(); - __publicField$19(this, "scene"); - __publicField$19(this, "camera"); - __publicField$19(this, "renderTargetDepth"); - __publicField$19(this, "materialDepth"); - __publicField$19(this, "materialBokeh"); - __publicField$19(this, "fsQuad"); - __publicField$19(this, "_oldClearColor"); - __publicField$19(this, "uniforms"); - this.scene = scene; - this.camera = camera; - const focus = params.focus !== void 0 ? params.focus : 1; - const aspect = params.aspect !== void 0 ? params.aspect : camera.aspect; - const aperture = params.aperture !== void 0 ? params.aperture : .025; - const maxblur = params.maxblur !== void 0 ? params.maxblur : 1; - const width = params.width || window.innerWidth || 1; - const height = params.height || window.innerHeight || 1; - this.renderTargetDepth = new WebGLRenderTarget(width, height, { - minFilter: NearestFilter, - magFilter: NearestFilter - }); - this.renderTargetDepth.texture.name = "BokehPass.depth"; - this.materialDepth = new MeshDepthMaterial(); - this.materialDepth.depthPacking = RGBADepthPacking; - this.materialDepth.blending = 0; - if (BokehShader === void 0) console.error("BokehPass relies on BokehShader"); - const bokehShader = BokehShader; - const bokehUniforms = UniformsUtils.clone(bokehShader.uniforms); - bokehUniforms["tDepth"].value = this.renderTargetDepth.texture; - bokehUniforms["focus"].value = focus; - bokehUniforms["aspect"].value = aspect; - bokehUniforms["aperture"].value = aperture; - bokehUniforms["maxblur"].value = maxblur; - bokehUniforms["nearClip"].value = camera.near; - bokehUniforms["farClip"].value = camera.far; - this.materialBokeh = new ShaderMaterial({ - defines: Object.assign({}, bokehShader.defines), - uniforms: bokehUniforms, - vertexShader: bokehShader.vertexShader, - fragmentShader: bokehShader.fragmentShader - }); - this.uniforms = bokehUniforms; - this.needsSwap = false; - this.fsQuad = new FullScreenQuad(this.materialBokeh); - this._oldClearColor = new Color(); - } - render(renderer, writeBuffer, readBuffer) { - this.scene.overrideMaterial = this.materialDepth; - renderer.getClearColor(this._oldClearColor); - const oldClearAlpha = renderer.getClearAlpha(); - const oldAutoClear = renderer.autoClear; - renderer.autoClear = false; - renderer.setClearColor(16777215); - renderer.setClearAlpha(1); - renderer.setRenderTarget(this.renderTargetDepth); - renderer.clear(); - renderer.render(this.scene, this.camera); - this.uniforms["tColor"].value = readBuffer.texture; - this.uniforms["nearClip"].value = this.camera.near; - this.uniforms["farClip"].value = this.camera.far; - if (this.renderToScreen) { - renderer.setRenderTarget(null); - this.fsQuad.render(renderer); - } else { - renderer.setRenderTarget(writeBuffer); - renderer.clear(); - this.fsQuad.render(renderer); - } - this.scene.overrideMaterial = null; - renderer.setClearColor(this._oldClearColor); - renderer.setClearAlpha(oldClearAlpha); - renderer.autoClear = oldAutoClear; - } -}; -//#endregion -//#region node_modules/three-stdlib/postprocessing/TexturePass.js -var TexturePass = class extends Pass { - constructor(map, opacity) { - super(); - const shader = CopyShader; - this.map = map; - this.opacity = opacity !== void 0 ? opacity : 1; - this.uniforms = UniformsUtils.clone(shader.uniforms); - this.material = new ShaderMaterial({ - uniforms: this.uniforms, - vertexShader: shader.vertexShader, - fragmentShader: shader.fragmentShader, - depthTest: false, - depthWrite: false, - premultipliedAlpha: true - }); - this.needsSwap = false; - this.fsQuad = new FullScreenQuad(null); - } - render(renderer, writeBuffer, readBuffer) { - const oldAutoClear = renderer.autoClear; - renderer.autoClear = false; - this.fsQuad.material = this.material; - this.uniforms["opacity"].value = this.opacity; - this.uniforms["tDiffuse"].value = this.map; - this.material.transparent = this.opacity < 1; - renderer.setRenderTarget(this.renderToScreen ? null : readBuffer); - if (this.clear) renderer.clear(); - this.fsQuad.render(renderer); - renderer.autoClear = oldAutoClear; - } - dispose() { - this.material.dispose(); - this.fsQuad.dispose(); - } -}; -//#endregion -//#region node_modules/three-stdlib/shaders/LuminosityShader.js -var LuminosityShader = { - uniforms: { tDiffuse: { value: null } }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - #include <common> - - uniform sampler2D tDiffuse; - - varying vec2 vUv; - - void main() { - - vec4 texel = texture2D( tDiffuse, vUv ); - - float l = linearToRelativeLuminance( texel.rgb ); - - gl_FragColor = vec4( l, l, l, texel.w ); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/ToneMapShader.js -var ToneMapShader = { - uniforms: { - tDiffuse: { value: null }, - averageLuminance: { value: 1 }, - luminanceMap: { value: null }, - maxLuminance: { value: 16 }, - minLuminance: { value: .01 }, - middleGrey: { value: .6 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - #include <common> - - uniform sampler2D tDiffuse; - - varying vec2 vUv; - - uniform float middleGrey; - uniform float minLuminance; - uniform float maxLuminance; - #ifdef ADAPTED_LUMINANCE - uniform sampler2D luminanceMap; - #else - uniform float averageLuminance; - #endif - - vec3 ToneMap( vec3 vColor ) { - #ifdef ADAPTED_LUMINANCE - // Get the calculated average luminance - float fLumAvg = texture2D(luminanceMap, vec2(0.5, 0.5)).r; - #else - float fLumAvg = averageLuminance; - #endif - - // Calculate the luminance of the current pixel - float fLumPixel = linearToRelativeLuminance( vColor ); - - // Apply the modified operator (Eq. 4) - float fLumScaled = (fLumPixel * middleGrey) / max( minLuminance, fLumAvg ); - - float fLumCompressed = (fLumScaled * (1.0 + (fLumScaled / (maxLuminance * maxLuminance)))) / (1.0 + fLumScaled); - return fLumCompressed * vColor; - } - - void main() { - - vec4 texel = texture2D( tDiffuse, vUv ); - - gl_FragColor = vec4( ToneMap( texel.xyz ), texel.w ); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/postprocessing/AdaptiveToneMappingPass.js -var AdaptiveToneMappingPass = class extends Pass { - constructor(adaptive, resolution) { - super(); - this.resolution = resolution !== void 0 ? resolution : 256; - this.needsInit = true; - this.adaptive = adaptive !== void 0 ? !!adaptive : true; - this.luminanceRT = null; - this.previousLuminanceRT = null; - this.currentLuminanceRT = null; - const copyShader = CopyShader; - this.copyUniforms = UniformsUtils.clone(copyShader.uniforms); - this.materialCopy = new ShaderMaterial({ - uniforms: this.copyUniforms, - vertexShader: copyShader.vertexShader, - fragmentShader: copyShader.fragmentShader, - blending: 0, - depthTest: false - }); - this.materialLuminance = new ShaderMaterial({ - uniforms: UniformsUtils.clone(LuminosityShader.uniforms), - vertexShader: LuminosityShader.vertexShader, - fragmentShader: LuminosityShader.fragmentShader, - blending: 0 - }); - this.adaptLuminanceShader = { - defines: { MIP_LEVEL_1X1: (Math.log(this.resolution) / Math.log(2)).toFixed(1) }, - uniforms: { - lastLum: { value: null }, - currentLum: { value: null }, - minLuminance: { value: .01 }, - delta: { value: .016 }, - tau: { value: 1 } - }, - vertexShader: `varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - }`, - fragmentShader: `varying vec2 vUv; - - uniform sampler2D lastLum; - uniform sampler2D currentLum; - uniform float minLuminance; - uniform float delta; - uniform float tau; - - void main() { - - vec4 lastLum = texture2D( lastLum, vUv, MIP_LEVEL_1X1 ); - vec4 currentLum = texture2D( currentLum, vUv, MIP_LEVEL_1X1 ); - - float fLastLum = max( minLuminance, lastLum.r ); - float fCurrentLum = max( minLuminance, currentLum.r ); - - //The adaption seems to work better in extreme lighting differences - //if the input luminance is squared. - fCurrentLum *= fCurrentLum; - - // Adapt the luminance using Pattanaik's technique - float fAdaptedLum = fLastLum + (fCurrentLum - fLastLum) * (1.0 - exp(-delta * tau)); - // "fAdaptedLum = sqrt(fAdaptedLum); - gl_FragColor.r = fAdaptedLum; - }` - }; - this.materialAdaptiveLum = new ShaderMaterial({ - uniforms: UniformsUtils.clone(this.adaptLuminanceShader.uniforms), - vertexShader: this.adaptLuminanceShader.vertexShader, - fragmentShader: this.adaptLuminanceShader.fragmentShader, - defines: Object.assign({}, this.adaptLuminanceShader.defines), - blending: 0 - }); - this.materialToneMap = new ShaderMaterial({ - uniforms: UniformsUtils.clone(ToneMapShader.uniforms), - vertexShader: ToneMapShader.vertexShader, - fragmentShader: ToneMapShader.fragmentShader, - blending: 0 - }); - this.fsQuad = new FullScreenQuad(null); - } - render(renderer, writeBuffer, readBuffer, deltaTime) { - if (this.needsInit) { - this.reset(renderer); - this.luminanceRT.texture.type = readBuffer.texture.type; - this.previousLuminanceRT.texture.type = readBuffer.texture.type; - this.currentLuminanceRT.texture.type = readBuffer.texture.type; - this.needsInit = false; - } - if (this.adaptive) { - this.fsQuad.material = this.materialLuminance; - this.materialLuminance.uniforms.tDiffuse.value = readBuffer.texture; - renderer.setRenderTarget(this.currentLuminanceRT); - this.fsQuad.render(renderer); - this.fsQuad.material = this.materialAdaptiveLum; - this.materialAdaptiveLum.uniforms.delta.value = deltaTime; - this.materialAdaptiveLum.uniforms.lastLum.value = this.previousLuminanceRT.texture; - this.materialAdaptiveLum.uniforms.currentLum.value = this.currentLuminanceRT.texture; - renderer.setRenderTarget(this.luminanceRT); - this.fsQuad.render(renderer); - this.fsQuad.material = this.materialCopy; - this.copyUniforms.tDiffuse.value = this.luminanceRT.texture; - renderer.setRenderTarget(this.previousLuminanceRT); - this.fsQuad.render(renderer); - } - this.fsQuad.material = this.materialToneMap; - this.materialToneMap.uniforms.tDiffuse.value = readBuffer.texture; - if (this.renderToScreen) { - renderer.setRenderTarget(null); - this.fsQuad.render(renderer); - } else { - renderer.setRenderTarget(writeBuffer); - if (this.clear) renderer.clear(); - this.fsQuad.render(renderer); - } - } - reset() { - if (this.luminanceRT) this.luminanceRT.dispose(); - if (this.currentLuminanceRT) this.currentLuminanceRT.dispose(); - if (this.previousLuminanceRT) this.previousLuminanceRT.dispose(); - this.luminanceRT = new WebGLRenderTarget(this.resolution, this.resolution); - this.luminanceRT.texture.name = "AdaptiveToneMappingPass.l"; - this.luminanceRT.texture.generateMipmaps = false; - this.previousLuminanceRT = new WebGLRenderTarget(this.resolution, this.resolution); - this.previousLuminanceRT.texture.name = "AdaptiveToneMappingPass.pl"; - this.previousLuminanceRT.texture.generateMipmaps = false; - const pars = { - minFilter: LinearMipmapLinearFilter, - generateMipmaps: true - }; - this.currentLuminanceRT = new WebGLRenderTarget(this.resolution, this.resolution, pars); - this.currentLuminanceRT.texture.name = "AdaptiveToneMappingPass.cl"; - if (this.adaptive) { - this.materialToneMap.defines["ADAPTED_LUMINANCE"] = ""; - this.materialToneMap.uniforms.luminanceMap.value = this.luminanceRT.texture; - } - this.fsQuad.material = new MeshBasicMaterial({ color: 7829367 }); - this.materialLuminance.needsUpdate = true; - this.materialAdaptiveLum.needsUpdate = true; - this.materialToneMap.needsUpdate = true; - } - setAdaptive(adaptive) { - if (adaptive) { - this.adaptive = true; - this.materialToneMap.defines["ADAPTED_LUMINANCE"] = ""; - this.materialToneMap.uniforms.luminanceMap.value = this.luminanceRT.texture; - } else { - this.adaptive = false; - delete this.materialToneMap.defines["ADAPTED_LUMINANCE"]; - this.materialToneMap.uniforms.luminanceMap.value = null; - } - this.materialToneMap.needsUpdate = true; - } - setAdaptionRate(rate) { - if (rate) this.materialAdaptiveLum.uniforms.tau.value = Math.abs(rate); - } - setMinLuminance(minLum) { - if (minLum) { - this.materialToneMap.uniforms.minLuminance.value = minLum; - this.materialAdaptiveLum.uniforms.minLuminance.value = minLum; - } - } - setMaxLuminance(maxLum) { - if (maxLum) this.materialToneMap.uniforms.maxLuminance.value = maxLum; - } - setAverageLuminance(avgLum) { - if (avgLum) this.materialToneMap.uniforms.averageLuminance.value = avgLum; - } - setMiddleGrey(middleGrey) { - if (middleGrey) this.materialToneMap.uniforms.middleGrey.value = middleGrey; - } - dispose() { - if (this.luminanceRT) this.luminanceRT.dispose(); - if (this.previousLuminanceRT) this.previousLuminanceRT.dispose(); - if (this.currentLuminanceRT) this.currentLuminanceRT.dispose(); - if (this.materialLuminance) this.materialLuminance.dispose(); - if (this.materialAdaptiveLum) this.materialAdaptiveLum.dispose(); - if (this.materialCopy) this.materialCopy.dispose(); - if (this.materialToneMap) this.materialToneMap.dispose(); - } -}; -//#endregion -//#region node_modules/three-stdlib/shaders/LuminosityHighPassShader.js -var LuminosityHighPassShader = { - shaderID: "luminosityHighPass", - uniforms: { - tDiffuse: { value: null }, - luminosityThreshold: { value: 1 }, - smoothWidth: { value: 1 }, - defaultColor: { value: /* @__PURE__ */ new Color(0) }, - defaultOpacity: { value: 0 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform sampler2D tDiffuse; - uniform vec3 defaultColor; - uniform float defaultOpacity; - uniform float luminosityThreshold; - uniform float smoothWidth; - - varying vec2 vUv; - - void main() { - - vec4 texel = texture2D( tDiffuse, vUv ); - - vec3 luma = vec3( 0.299, 0.587, 0.114 ); - - float v = dot( texel.xyz, luma ); - - vec4 outputColor = vec4( defaultColor.rgb, defaultOpacity ); - - float alpha = smoothstep( luminosityThreshold, luminosityThreshold + smoothWidth, v ); - - gl_FragColor = mix( outputColor, texel, alpha ); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/postprocessing/UnrealBloomPass.js -var __defProp$18 = Object.defineProperty; -var __defNormalProp$18 = (obj, key, value) => key in obj ? __defProp$18(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$18 = (obj, key, value) => { - __defNormalProp$18(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var UnrealBloomPass = /* @__PURE__ */ (() => { - const _UnrealBloomPass = class extends Pass { - constructor(resolution, strength, radius, threshold) { - super(); - this.strength = strength !== void 0 ? strength : 1; - this.radius = radius; - this.threshold = threshold; - this.resolution = resolution !== void 0 ? new Vector2(resolution.x, resolution.y) : new Vector2(256, 256); - this.clearColor = new Color(0, 0, 0); - this.renderTargetsHorizontal = []; - this.renderTargetsVertical = []; - this.nMips = 5; - let resx = Math.round(this.resolution.x / 2); - let resy = Math.round(this.resolution.y / 2); - this.renderTargetBright = new WebGLRenderTarget(resx, resy, { type: HalfFloatType }); - this.renderTargetBright.texture.name = "UnrealBloomPass.bright"; - this.renderTargetBright.texture.generateMipmaps = false; - for (let i = 0; i < this.nMips; i++) { - const renderTargetHorizonal = new WebGLRenderTarget(resx, resy, { type: HalfFloatType }); - renderTargetHorizonal.texture.name = "UnrealBloomPass.h" + i; - renderTargetHorizonal.texture.generateMipmaps = false; - this.renderTargetsHorizontal.push(renderTargetHorizonal); - const renderTargetVertical = new WebGLRenderTarget(resx, resy, { type: HalfFloatType }); - renderTargetVertical.texture.name = "UnrealBloomPass.v" + i; - renderTargetVertical.texture.generateMipmaps = false; - this.renderTargetsVertical.push(renderTargetVertical); - resx = Math.round(resx / 2); - resy = Math.round(resy / 2); - } - const highPassShader = LuminosityHighPassShader; - this.highPassUniforms = UniformsUtils.clone(highPassShader.uniforms); - this.highPassUniforms["luminosityThreshold"].value = threshold; - this.highPassUniforms["smoothWidth"].value = .01; - this.materialHighPassFilter = new ShaderMaterial({ - uniforms: this.highPassUniforms, - vertexShader: highPassShader.vertexShader, - fragmentShader: highPassShader.fragmentShader, - defines: {} - }); - this.separableBlurMaterials = []; - const kernelSizeArray = [ - 3, - 5, - 7, - 9, - 11 - ]; - resx = Math.round(this.resolution.x / 2); - resy = Math.round(this.resolution.y / 2); - for (let i = 0; i < this.nMips; i++) { - this.separableBlurMaterials.push(this.getSeperableBlurMaterial(kernelSizeArray[i])); - this.separableBlurMaterials[i].uniforms["texSize"].value = new Vector2(resx, resy); - resx = Math.round(resx / 2); - resy = Math.round(resy / 2); - } - this.compositeMaterial = this.getCompositeMaterial(this.nMips); - this.compositeMaterial.uniforms["blurTexture1"].value = this.renderTargetsVertical[0].texture; - this.compositeMaterial.uniforms["blurTexture2"].value = this.renderTargetsVertical[1].texture; - this.compositeMaterial.uniforms["blurTexture3"].value = this.renderTargetsVertical[2].texture; - this.compositeMaterial.uniforms["blurTexture4"].value = this.renderTargetsVertical[3].texture; - this.compositeMaterial.uniforms["blurTexture5"].value = this.renderTargetsVertical[4].texture; - this.compositeMaterial.uniforms["bloomStrength"].value = strength; - this.compositeMaterial.uniforms["bloomRadius"].value = .1; - this.compositeMaterial.needsUpdate = true; - const bloomFactors = [ - 1, - .8, - .6, - .4, - .2 - ]; - this.compositeMaterial.uniforms["bloomFactors"].value = bloomFactors; - this.bloomTintColors = [ - new Vector3(1, 1, 1), - new Vector3(1, 1, 1), - new Vector3(1, 1, 1), - new Vector3(1, 1, 1), - new Vector3(1, 1, 1) - ]; - this.compositeMaterial.uniforms["bloomTintColors"].value = this.bloomTintColors; - const copyShader = CopyShader; - this.copyUniforms = UniformsUtils.clone(copyShader.uniforms); - this.copyUniforms["opacity"].value = 1; - this.materialCopy = new ShaderMaterial({ - uniforms: this.copyUniforms, - vertexShader: copyShader.vertexShader, - fragmentShader: copyShader.fragmentShader, - blending: 2, - depthTest: false, - depthWrite: false, - transparent: true - }); - this.enabled = true; - this.needsSwap = false; - this._oldClearColor = new Color(); - this.oldClearAlpha = 1; - this.basic = new MeshBasicMaterial(); - this.fsQuad = new FullScreenQuad(null); - } - dispose() { - for (let i = 0; i < this.renderTargetsHorizontal.length; i++) this.renderTargetsHorizontal[i].dispose(); - for (let i = 0; i < this.renderTargetsVertical.length; i++) this.renderTargetsVertical[i].dispose(); - this.renderTargetBright.dispose(); - for (let i = 0; i < this.separableBlurMaterials.length; i++) this.separableBlurMaterials[i].dispose(); - this.compositeMaterial.dispose(); - this.materialCopy.dispose(); - this.basic.dispose(); - this.fsQuad.dispose(); - } - setSize(width, height) { - let resx = Math.round(width / 2); - let resy = Math.round(height / 2); - this.renderTargetBright.setSize(resx, resy); - for (let i = 0; i < this.nMips; i++) { - this.renderTargetsHorizontal[i].setSize(resx, resy); - this.renderTargetsVertical[i].setSize(resx, resy); - this.separableBlurMaterials[i].uniforms["texSize"].value = new Vector2(resx, resy); - resx = Math.round(resx / 2); - resy = Math.round(resy / 2); - } - } - render(renderer, writeBuffer, readBuffer, deltaTime, maskActive) { - renderer.getClearColor(this._oldClearColor); - this.oldClearAlpha = renderer.getClearAlpha(); - const oldAutoClear = renderer.autoClear; - renderer.autoClear = false; - renderer.setClearColor(this.clearColor, 0); - if (maskActive) renderer.state.buffers.stencil.setTest(false); - if (this.renderToScreen) { - this.fsQuad.material = this.basic; - this.basic.map = readBuffer.texture; - renderer.setRenderTarget(null); - renderer.clear(); - this.fsQuad.render(renderer); - } - this.highPassUniforms["tDiffuse"].value = readBuffer.texture; - this.highPassUniforms["luminosityThreshold"].value = this.threshold; - this.fsQuad.material = this.materialHighPassFilter; - renderer.setRenderTarget(this.renderTargetBright); - renderer.clear(); - this.fsQuad.render(renderer); - let inputRenderTarget = this.renderTargetBright; - for (let i = 0; i < this.nMips; i++) { - this.fsQuad.material = this.separableBlurMaterials[i]; - this.separableBlurMaterials[i].uniforms["colorTexture"].value = inputRenderTarget.texture; - this.separableBlurMaterials[i].uniforms["direction"].value = _UnrealBloomPass.BlurDirectionX; - renderer.setRenderTarget(this.renderTargetsHorizontal[i]); - renderer.clear(); - this.fsQuad.render(renderer); - this.separableBlurMaterials[i].uniforms["colorTexture"].value = this.renderTargetsHorizontal[i].texture; - this.separableBlurMaterials[i].uniforms["direction"].value = _UnrealBloomPass.BlurDirectionY; - renderer.setRenderTarget(this.renderTargetsVertical[i]); - renderer.clear(); - this.fsQuad.render(renderer); - inputRenderTarget = this.renderTargetsVertical[i]; - } - this.fsQuad.material = this.compositeMaterial; - this.compositeMaterial.uniforms["bloomStrength"].value = this.strength; - this.compositeMaterial.uniforms["bloomRadius"].value = this.radius; - this.compositeMaterial.uniforms["bloomTintColors"].value = this.bloomTintColors; - renderer.setRenderTarget(this.renderTargetsHorizontal[0]); - renderer.clear(); - this.fsQuad.render(renderer); - this.fsQuad.material = this.materialCopy; - this.copyUniforms["tDiffuse"].value = this.renderTargetsHorizontal[0].texture; - if (maskActive) renderer.state.buffers.stencil.setTest(true); - if (this.renderToScreen) { - renderer.setRenderTarget(null); - this.fsQuad.render(renderer); - } else { - renderer.setRenderTarget(readBuffer); - this.fsQuad.render(renderer); - } - renderer.setClearColor(this._oldClearColor, this.oldClearAlpha); - renderer.autoClear = oldAutoClear; - } - getSeperableBlurMaterial(kernelRadius) { - return new ShaderMaterial({ - defines: { - KERNEL_RADIUS: kernelRadius, - SIGMA: kernelRadius - }, - uniforms: { - colorTexture: { value: null }, - texSize: { value: new Vector2(.5, .5) }, - direction: { value: new Vector2(.5, .5) } - }, - vertexShader: `varying vec2 vUv; - void main() { - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - }`, - fragmentShader: `#include <common> - varying vec2 vUv; - uniform sampler2D colorTexture; - uniform vec2 texSize; - uniform vec2 direction; - - float gaussianPdf(in float x, in float sigma) { - return 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma; - } - void main() { - vec2 invSize = 1.0 / texSize; - float fSigma = float(SIGMA); - float weightSum = gaussianPdf(0.0, fSigma); - vec3 diffuseSum = texture2D( colorTexture, vUv).rgb * weightSum; - for( int i = 1; i < KERNEL_RADIUS; i ++ ) { - float x = float(i); - float w = gaussianPdf(x, fSigma); - vec2 uvOffset = direction * invSize * x; - vec3 sample1 = texture2D( colorTexture, vUv + uvOffset).rgb; - vec3 sample2 = texture2D( colorTexture, vUv - uvOffset).rgb; - diffuseSum += (sample1 + sample2) * w; - weightSum += 2.0 * w; - } - gl_FragColor = vec4(diffuseSum/weightSum, 1.0); - }` - }); - } - getCompositeMaterial(nMips) { - return new ShaderMaterial({ - defines: { NUM_MIPS: nMips }, - uniforms: { - blurTexture1: { value: null }, - blurTexture2: { value: null }, - blurTexture3: { value: null }, - blurTexture4: { value: null }, - blurTexture5: { value: null }, - bloomStrength: { value: 1 }, - bloomFactors: { value: null }, - bloomTintColors: { value: null }, - bloomRadius: { value: 0 } - }, - vertexShader: `varying vec2 vUv; - void main() { - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - }`, - fragmentShader: `varying vec2 vUv; - uniform sampler2D blurTexture1; - uniform sampler2D blurTexture2; - uniform sampler2D blurTexture3; - uniform sampler2D blurTexture4; - uniform sampler2D blurTexture5; - uniform float bloomStrength; - uniform float bloomRadius; - uniform float bloomFactors[NUM_MIPS]; - uniform vec3 bloomTintColors[NUM_MIPS]; - - float lerpBloomFactor(const in float factor) { - float mirrorFactor = 1.2 - factor; - return mix(factor, mirrorFactor, bloomRadius); - } - - void main() { - gl_FragColor = bloomStrength * ( lerpBloomFactor(bloomFactors[0]) * vec4(bloomTintColors[0], 1.0) * texture2D(blurTexture1, vUv) + - lerpBloomFactor(bloomFactors[1]) * vec4(bloomTintColors[1], 1.0) * texture2D(blurTexture2, vUv) + - lerpBloomFactor(bloomFactors[2]) * vec4(bloomTintColors[2], 1.0) * texture2D(blurTexture3, vUv) + - lerpBloomFactor(bloomFactors[3]) * vec4(bloomTintColors[3], 1.0) * texture2D(blurTexture4, vUv) + - lerpBloomFactor(bloomFactors[4]) * vec4(bloomTintColors[4], 1.0) * texture2D(blurTexture5, vUv) ); - }` - }); - } - }; - let UnrealBloomPass2 = _UnrealBloomPass; - __publicField$18(UnrealBloomPass2, "BlurDirectionX", new Vector2(1, 0)); - __publicField$18(UnrealBloomPass2, "BlurDirectionY", new Vector2(0, 1)); - return UnrealBloomPass2; -})(); -//#endregion -//#region node_modules/three-stdlib/postprocessing/CubeTexturePass.js -var CubeTexturePass = class extends Pass { - constructor(camera, tCube, opacity = 1) { - super(); - this.camera = camera; - this.needsSwap = false; - this.cubeShader = ShaderLib["cube"]; - this.cubeMesh = new Mesh(new BoxGeometry(10, 10, 10), new ShaderMaterial({ - uniforms: UniformsUtils.clone(this.cubeShader.uniforms), - vertexShader: this.cubeShader.vertexShader, - fragmentShader: this.cubeShader.fragmentShader, - depthTest: false, - depthWrite: false, - side: 1 - })); - Object.defineProperty(this.cubeMesh.material, "envMap", { get: function() { - return this.uniforms.tCube.value; - } }); - this.tCube = tCube; - this.opacity = opacity; - this.cubeScene = new Scene(); - this.cubeCamera = new PerspectiveCamera(); - this.cubeScene.add(this.cubeMesh); - } - render(renderer, writeBuffer, readBuffer) { - const oldAutoClear = renderer.autoClear; - renderer.autoClear = false; - this.cubeCamera.projectionMatrix.copy(this.camera.projectionMatrix); - this.cubeCamera.quaternion.setFromRotationMatrix(this.camera.matrixWorld); - this.cubeMesh.material.uniforms.tCube.value = this.tCube; - this.cubeMesh.material.uniforms.tFlip.value = this.tCube.isCubeTexture && this.tCube.isRenderTargetTexture === false ? -1 : 1; - this.cubeMesh.material.uniforms.opacity.value = this.opacity; - this.cubeMesh.material.transparent = this.opacity < 1; - renderer.setRenderTarget(this.renderToScreen ? null : readBuffer); - if (this.clear) renderer.clear(); - renderer.render(this.cubeScene, this.cubeCamera); - renderer.autoClear = oldAutoClear; - } - dispose() { - this.cubeMesh.geometry.dispose(); - this.cubeMesh.material.dispose(); - } -}; -//#endregion -//#region node_modules/three-stdlib/shaders/SAOShader.js -var SAOShader = { - defines: { - NUM_SAMPLES: 7, - NUM_RINGS: 4, - NORMAL_TEXTURE: 0, - DIFFUSE_TEXTURE: 0, - DEPTH_PACKING: 1, - PERSPECTIVE_CAMERA: 1 - }, - uniforms: { - tDepth: { value: null }, - tDiffuse: { value: null }, - tNormal: { value: null }, - size: { value: /* @__PURE__ */ new Vector2(512, 512) }, - cameraNear: { value: 1 }, - cameraFar: { value: 100 }, - cameraProjectionMatrix: { value: /* @__PURE__ */ new Matrix4() }, - cameraInverseProjectionMatrix: { value: /* @__PURE__ */ new Matrix4() }, - scale: { value: 1 }, - intensity: { value: .1 }, - bias: { value: .5 }, - minResolution: { value: 0 }, - kernelRadius: { value: 100 }, - randomSeed: { value: 0 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - } - `, - fragmentShader: ` - #include <common> - - varying vec2 vUv; - - #if DIFFUSE_TEXTURE == 1 - uniform sampler2D tDiffuse; - #endif - - uniform sampler2D tDepth; - - #if NORMAL_TEXTURE == 1 - uniform sampler2D tNormal; - #endif - - uniform float cameraNear; - uniform float cameraFar; - uniform mat4 cameraProjectionMatrix; - uniform mat4 cameraInverseProjectionMatrix; - - uniform float scale; - uniform float intensity; - uniform float bias; - uniform float kernelRadius; - uniform float minResolution; - uniform vec2 size; - uniform float randomSeed; - - // RGBA depth - - #include <packing> - - vec4 getDefaultColor( const in vec2 screenPosition ) { - #if DIFFUSE_TEXTURE == 1 - return texture2D( tDiffuse, vUv ); - #else - return vec4( 1.0 ); - #endif - } - - float getDepth( const in vec2 screenPosition ) { - #if DEPTH_PACKING == 1 - return unpackRGBAToDepth( texture2D( tDepth, screenPosition ) ); - #else - return texture2D( tDepth, screenPosition ).x; - #endif - } - - float getViewZ( const in float depth ) { - #if PERSPECTIVE_CAMERA == 1 - return perspectiveDepthToViewZ( depth, cameraNear, cameraFar ); - #else - return orthographicDepthToViewZ( depth, cameraNear, cameraFar ); - #endif - } - - vec3 getViewPosition( const in vec2 screenPosition, const in float depth, const in float viewZ ) { - float clipW = cameraProjectionMatrix[2][3] * viewZ + cameraProjectionMatrix[3][3]; - vec4 clipPosition = vec4( ( vec3( screenPosition, depth ) - 0.5 ) * 2.0, 1.0 ); - clipPosition *= clipW; // unprojection. - - return ( cameraInverseProjectionMatrix * clipPosition ).xyz; - } - - vec3 getViewNormal( const in vec3 viewPosition, const in vec2 screenPosition ) { - #if NORMAL_TEXTURE == 1 - return unpackRGBToNormal( texture2D( tNormal, screenPosition ).xyz ); - #else - return normalize( cross( dFdx( viewPosition ), dFdy( viewPosition ) ) ); - #endif - } - - float scaleDividedByCameraFar; - float minResolutionMultipliedByCameraFar; - - float getOcclusion( const in vec3 centerViewPosition, const in vec3 centerViewNormal, const in vec3 sampleViewPosition ) { - vec3 viewDelta = sampleViewPosition - centerViewPosition; - float viewDistance = length( viewDelta ); - float scaledScreenDistance = scaleDividedByCameraFar * viewDistance; - - return max(0.0, (dot(centerViewNormal, viewDelta) - minResolutionMultipliedByCameraFar) / scaledScreenDistance - bias) / (1.0 + pow2( scaledScreenDistance ) ); - } - - // moving costly divides into consts - const float ANGLE_STEP = PI2 * float( NUM_RINGS ) / float( NUM_SAMPLES ); - const float INV_NUM_SAMPLES = 1.0 / float( NUM_SAMPLES ); - - float getAmbientOcclusion( const in vec3 centerViewPosition ) { - // precompute some variables require in getOcclusion. - scaleDividedByCameraFar = scale / cameraFar; - minResolutionMultipliedByCameraFar = minResolution * cameraFar; - vec3 centerViewNormal = getViewNormal( centerViewPosition, vUv ); - - // jsfiddle that shows sample pattern: https://jsfiddle.net/a16ff1p7/ - float angle = rand( vUv + randomSeed ) * PI2; - vec2 radius = vec2( kernelRadius * INV_NUM_SAMPLES ) / size; - vec2 radiusStep = radius; - - float occlusionSum = 0.0; - float weightSum = 0.0; - - for( int i = 0; i < NUM_SAMPLES; i ++ ) { - vec2 sampleUv = vUv + vec2( cos( angle ), sin( angle ) ) * radius; - radius += radiusStep; - angle += ANGLE_STEP; - - float sampleDepth = getDepth( sampleUv ); - if( sampleDepth >= ( 1.0 - EPSILON ) ) { - continue; - } - - float sampleViewZ = getViewZ( sampleDepth ); - vec3 sampleViewPosition = getViewPosition( sampleUv, sampleDepth, sampleViewZ ); - occlusionSum += getOcclusion( centerViewPosition, centerViewNormal, sampleViewPosition ); - weightSum += 1.0; - } - - if( weightSum == 0.0 ) discard; - - return occlusionSum * ( intensity / weightSum ); - } - - void main() { - float centerDepth = getDepth( vUv ); - if( centerDepth >= ( 1.0 - EPSILON ) ) { - discard; - } - - float centerViewZ = getViewZ( centerDepth ); - vec3 viewPosition = getViewPosition( vUv, centerDepth, centerViewZ ); - - float ambientOcclusion = getAmbientOcclusion( viewPosition ); - - gl_FragColor = getDefaultColor( vUv ); - gl_FragColor.xyz *= 1.0 - ambientOcclusion; - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/DepthLimitedBlurShader.js -var DepthLimitedBlurShader = { - defines: { - KERNEL_RADIUS: 4, - DEPTH_PACKING: 1, - PERSPECTIVE_CAMERA: 1 - }, - uniforms: { - tDiffuse: { value: null }, - size: { value: /* @__PURE__ */ new Vector2(512, 512) }, - sampleUvOffsets: { value: [/* @__PURE__ */ new Vector2(0, 0)] }, - sampleWeights: { value: [1] }, - tDepth: { value: null }, - cameraNear: { value: 10 }, - cameraFar: { value: 1e3 }, - depthCutoff: { value: 10 } - }, - vertexShader: ` - #include <common> - - uniform vec2 size; - - varying vec2 vUv; - varying vec2 vInvSize; - - void main() { - vUv = uv; - vInvSize = 1.0 / size; - - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - } - `, - fragmentShader: ` - #include <common> - #include <packing> - - uniform sampler2D tDiffuse; - uniform sampler2D tDepth; - - uniform float cameraNear; - uniform float cameraFar; - uniform float depthCutoff; - - uniform vec2 sampleUvOffsets[ KERNEL_RADIUS + 1 ]; - uniform float sampleWeights[ KERNEL_RADIUS + 1 ]; - - varying vec2 vUv; - varying vec2 vInvSize; - - float getDepth( const in vec2 screenPosition ) { - #if DEPTH_PACKING == 1 - return unpackRGBAToDepth( texture2D( tDepth, screenPosition ) ); - #else - return texture2D( tDepth, screenPosition ).x; - #endif - } - - float getViewZ( const in float depth ) { - #if PERSPECTIVE_CAMERA == 1 - return perspectiveDepthToViewZ( depth, cameraNear, cameraFar ); - #else - return orthographicDepthToViewZ( depth, cameraNear, cameraFar ); - #endif - } - - void main() { - float depth = getDepth( vUv ); - if( depth >= ( 1.0 - EPSILON ) ) { - discard; - } - - float centerViewZ = -getViewZ( depth ); - bool rBreak = false, lBreak = false; - - float weightSum = sampleWeights[0]; - vec4 diffuseSum = texture2D( tDiffuse, vUv ) * weightSum; - - for( int i = 1; i <= KERNEL_RADIUS; i ++ ) { - - float sampleWeight = sampleWeights[i]; - vec2 sampleUvOffset = sampleUvOffsets[i] * vInvSize; - - vec2 sampleUv = vUv + sampleUvOffset; - float viewZ = -getViewZ( getDepth( sampleUv ) ); - - if( abs( viewZ - centerViewZ ) > depthCutoff ) rBreak = true; - - if( ! rBreak ) { - diffuseSum += texture2D( tDiffuse, sampleUv ) * sampleWeight; - weightSum += sampleWeight; - } - - sampleUv = vUv - sampleUvOffset; - viewZ = -getViewZ( getDepth( sampleUv ) ); - - if( abs( viewZ - centerViewZ ) > depthCutoff ) lBreak = true; - - if( ! lBreak ) { - diffuseSum += texture2D( tDiffuse, sampleUv ) * sampleWeight; - weightSum += sampleWeight; - } - - } - - gl_FragColor = diffuseSum / weightSum; - } - ` -}; -var BlurShaderUtils = { - createSampleWeights: (kernelRadius, stdDev) => { - const gaussian = (x, stdDev2) => { - return Math.exp(-(x * x) / (2 * (stdDev2 * stdDev2))) / (Math.sqrt(2 * Math.PI) * stdDev2); - }; - const weights = []; - for (let i = 0; i <= kernelRadius; i++) weights.push(gaussian(i, stdDev)); - return weights; - }, - createSampleOffsets: (kernelRadius, uvIncrement) => { - const offsets = []; - for (let i = 0; i <= kernelRadius; i++) offsets.push(uvIncrement.clone().multiplyScalar(i)); - return offsets; - }, - configure: (shader, kernelRadius, stdDev, uvIncrement) => { - shader.defines["KERNEL_RADIUS"] = kernelRadius; - shader.uniforms["sampleUvOffsets"].value = BlurShaderUtils.createSampleOffsets(kernelRadius, uvIncrement); - shader.uniforms["sampleWeights"].value = BlurShaderUtils.createSampleWeights(kernelRadius, stdDev); - shader.needsUpdate = true; - } -}; -//#endregion -//#region node_modules/three-stdlib/postprocessing/SAOPass.js -var __defProp$17 = Object.defineProperty; -var __defNormalProp$17 = (obj, key, value) => key in obj ? __defProp$17(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$17 = (obj, key, value) => { - __defNormalProp$17(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var SAOPass = /* @__PURE__ */ (() => { - class SAOPass2 extends Pass { - constructor(scene, camera, useDepthTexture = false, useNormals = false, resolution = new Vector2(256, 256)) { - super(); - this.scene = scene; - this.camera = camera; - this.clear = true; - this.needsSwap = false; - this.supportsDepthTextureExtension = useDepthTexture; - this.supportsNormalTexture = useNormals; - this.originalClearColor = new Color(); - this._oldClearColor = new Color(); - this.oldClearAlpha = 1; - this.params = { - output: 0, - saoBias: .5, - saoIntensity: .18, - saoScale: 1, - saoKernelRadius: 100, - saoMinResolution: 0, - saoBlur: true, - saoBlurRadius: 8, - saoBlurStdDev: 4, - saoBlurDepthCutoff: .01 - }; - this.resolution = new Vector2(resolution.x, resolution.y); - this.saoRenderTarget = new WebGLRenderTarget(this.resolution.x, this.resolution.y, { type: HalfFloatType }); - this.blurIntermediateRenderTarget = this.saoRenderTarget.clone(); - this.beautyRenderTarget = this.saoRenderTarget.clone(); - this.normalRenderTarget = new WebGLRenderTarget(this.resolution.x, this.resolution.y, { - minFilter: NearestFilter, - magFilter: NearestFilter, - type: HalfFloatType - }); - this.depthRenderTarget = this.normalRenderTarget.clone(); - let depthTexture; - if (this.supportsDepthTextureExtension) { - depthTexture = new DepthTexture(); - depthTexture.type = UnsignedShortType; - this.beautyRenderTarget.depthTexture = depthTexture; - this.beautyRenderTarget.depthBuffer = true; - } - this.depthMaterial = new MeshDepthMaterial(); - this.depthMaterial.depthPacking = RGBADepthPacking; - this.depthMaterial.blending = 0; - this.normalMaterial = new MeshNormalMaterial(); - this.normalMaterial.blending = 0; - this.saoMaterial = new ShaderMaterial({ - defines: Object.assign({}, SAOShader.defines), - fragmentShader: SAOShader.fragmentShader, - vertexShader: SAOShader.vertexShader, - uniforms: UniformsUtils.clone(SAOShader.uniforms) - }); - this.saoMaterial.extensions.derivatives = true; - this.saoMaterial.defines["DEPTH_PACKING"] = this.supportsDepthTextureExtension ? 0 : 1; - this.saoMaterial.defines["NORMAL_TEXTURE"] = this.supportsNormalTexture ? 1 : 0; - this.saoMaterial.defines["PERSPECTIVE_CAMERA"] = this.camera.isPerspectiveCamera ? 1 : 0; - this.saoMaterial.uniforms["tDepth"].value = this.supportsDepthTextureExtension ? depthTexture : this.depthRenderTarget.texture; - this.saoMaterial.uniforms["tNormal"].value = this.normalRenderTarget.texture; - this.saoMaterial.uniforms["size"].value.set(this.resolution.x, this.resolution.y); - this.saoMaterial.uniforms["cameraInverseProjectionMatrix"].value.copy(this.camera.projectionMatrixInverse); - this.saoMaterial.uniforms["cameraProjectionMatrix"].value = this.camera.projectionMatrix; - this.saoMaterial.blending = 0; - this.vBlurMaterial = new ShaderMaterial({ - uniforms: UniformsUtils.clone(DepthLimitedBlurShader.uniforms), - defines: Object.assign({}, DepthLimitedBlurShader.defines), - vertexShader: DepthLimitedBlurShader.vertexShader, - fragmentShader: DepthLimitedBlurShader.fragmentShader - }); - this.vBlurMaterial.defines["DEPTH_PACKING"] = this.supportsDepthTextureExtension ? 0 : 1; - this.vBlurMaterial.defines["PERSPECTIVE_CAMERA"] = this.camera.isPerspectiveCamera ? 1 : 0; - this.vBlurMaterial.uniforms["tDiffuse"].value = this.saoRenderTarget.texture; - this.vBlurMaterial.uniforms["tDepth"].value = this.supportsDepthTextureExtension ? depthTexture : this.depthRenderTarget.texture; - this.vBlurMaterial.uniforms["size"].value.set(this.resolution.x, this.resolution.y); - this.vBlurMaterial.blending = 0; - this.hBlurMaterial = new ShaderMaterial({ - uniforms: UniformsUtils.clone(DepthLimitedBlurShader.uniforms), - defines: Object.assign({}, DepthLimitedBlurShader.defines), - vertexShader: DepthLimitedBlurShader.vertexShader, - fragmentShader: DepthLimitedBlurShader.fragmentShader - }); - this.hBlurMaterial.defines["DEPTH_PACKING"] = this.supportsDepthTextureExtension ? 0 : 1; - this.hBlurMaterial.defines["PERSPECTIVE_CAMERA"] = this.camera.isPerspectiveCamera ? 1 : 0; - this.hBlurMaterial.uniforms["tDiffuse"].value = this.blurIntermediateRenderTarget.texture; - this.hBlurMaterial.uniforms["tDepth"].value = this.supportsDepthTextureExtension ? depthTexture : this.depthRenderTarget.texture; - this.hBlurMaterial.uniforms["size"].value.set(this.resolution.x, this.resolution.y); - this.hBlurMaterial.blending = 0; - this.materialCopy = new ShaderMaterial({ - uniforms: UniformsUtils.clone(CopyShader.uniforms), - vertexShader: CopyShader.vertexShader, - fragmentShader: CopyShader.fragmentShader, - blending: 0 - }); - this.materialCopy.transparent = true; - this.materialCopy.depthTest = false; - this.materialCopy.depthWrite = false; - this.materialCopy.blending = 5; - this.materialCopy.blendSrc = 208; - this.materialCopy.blendDst = 200; - this.materialCopy.blendEquation = 100; - this.materialCopy.blendSrcAlpha = 206; - this.materialCopy.blendDstAlpha = 200; - this.materialCopy.blendEquationAlpha = 100; - this.depthCopy = new ShaderMaterial({ - uniforms: UniformsUtils.clone(UnpackDepthRGBAShader.uniforms), - vertexShader: UnpackDepthRGBAShader.vertexShader, - fragmentShader: UnpackDepthRGBAShader.fragmentShader, - blending: 0 - }); - this.fsQuad = new FullScreenQuad(null); - } - render(renderer, writeBuffer, readBuffer) { - if (this.renderToScreen) { - this.materialCopy.blending = 0; - this.materialCopy.uniforms["tDiffuse"].value = readBuffer.texture; - this.materialCopy.needsUpdate = true; - this.renderPass(renderer, this.materialCopy, null); - } - if (this.params.output === 1) return; - renderer.getClearColor(this._oldClearColor); - this.oldClearAlpha = renderer.getClearAlpha(); - const oldAutoClear = renderer.autoClear; - renderer.autoClear = false; - renderer.setRenderTarget(this.depthRenderTarget); - renderer.clear(); - this.saoMaterial.uniforms["bias"].value = this.params.saoBias; - this.saoMaterial.uniforms["intensity"].value = this.params.saoIntensity; - this.saoMaterial.uniforms["scale"].value = this.params.saoScale; - this.saoMaterial.uniforms["kernelRadius"].value = this.params.saoKernelRadius; - this.saoMaterial.uniforms["minResolution"].value = this.params.saoMinResolution; - this.saoMaterial.uniforms["cameraNear"].value = this.camera.near; - this.saoMaterial.uniforms["cameraFar"].value = this.camera.far; - const depthCutoff = this.params.saoBlurDepthCutoff * (this.camera.far - this.camera.near); - this.vBlurMaterial.uniforms["depthCutoff"].value = depthCutoff; - this.hBlurMaterial.uniforms["depthCutoff"].value = depthCutoff; - this.vBlurMaterial.uniforms["cameraNear"].value = this.camera.near; - this.vBlurMaterial.uniforms["cameraFar"].value = this.camera.far; - this.hBlurMaterial.uniforms["cameraNear"].value = this.camera.near; - this.hBlurMaterial.uniforms["cameraFar"].value = this.camera.far; - this.params.saoBlurRadius = Math.floor(this.params.saoBlurRadius); - if (this.prevStdDev !== this.params.saoBlurStdDev || this.prevNumSamples !== this.params.saoBlurRadius) { - BlurShaderUtils.configure(this.vBlurMaterial, this.params.saoBlurRadius, this.params.saoBlurStdDev, new Vector2(0, 1)); - BlurShaderUtils.configure(this.hBlurMaterial, this.params.saoBlurRadius, this.params.saoBlurStdDev, new Vector2(1, 0)); - this.prevStdDev = this.params.saoBlurStdDev; - this.prevNumSamples = this.params.saoBlurRadius; - } - renderer.setClearColor(0); - renderer.setRenderTarget(this.beautyRenderTarget); - renderer.clear(); - renderer.render(this.scene, this.camera); - if (!this.supportsDepthTextureExtension) this.renderOverride(renderer, this.depthMaterial, this.depthRenderTarget, 0, 1); - if (this.supportsNormalTexture) this.renderOverride(renderer, this.normalMaterial, this.normalRenderTarget, 7829503, 1); - this.renderPass(renderer, this.saoMaterial, this.saoRenderTarget, 16777215, 1); - if (this.params.saoBlur) { - this.renderPass(renderer, this.vBlurMaterial, this.blurIntermediateRenderTarget, 16777215, 1); - this.renderPass(renderer, this.hBlurMaterial, this.saoRenderTarget, 16777215, 1); - } - let outputMaterial = this.materialCopy; - if (this.params.output === 3) if (this.supportsDepthTextureExtension) { - this.materialCopy.uniforms["tDiffuse"].value = this.beautyRenderTarget.depthTexture; - this.materialCopy.needsUpdate = true; - } else { - this.depthCopy.uniforms["tDiffuse"].value = this.depthRenderTarget.texture; - this.depthCopy.needsUpdate = true; - outputMaterial = this.depthCopy; - } - else if (this.params.output === 4) { - this.materialCopy.uniforms["tDiffuse"].value = this.normalRenderTarget.texture; - this.materialCopy.needsUpdate = true; - } else { - this.materialCopy.uniforms["tDiffuse"].value = this.saoRenderTarget.texture; - this.materialCopy.needsUpdate = true; - } - if (this.params.output === 0) outputMaterial.blending = 5; - else outputMaterial.blending = 0; - this.renderPass(renderer, outputMaterial, this.renderToScreen ? null : readBuffer); - renderer.setClearColor(this._oldClearColor, this.oldClearAlpha); - renderer.autoClear = oldAutoClear; - } - renderPass(renderer, passMaterial, renderTarget, clearColor, clearAlpha) { - renderer.getClearColor(this.originalClearColor); - const originalClearAlpha = renderer.getClearAlpha(); - const originalAutoClear = renderer.autoClear; - renderer.setRenderTarget(renderTarget); - renderer.autoClear = false; - if (clearColor !== void 0 && clearColor !== null) { - renderer.setClearColor(clearColor); - renderer.setClearAlpha(clearAlpha || 0); - renderer.clear(); - } - this.fsQuad.material = passMaterial; - this.fsQuad.render(renderer); - renderer.autoClear = originalAutoClear; - renderer.setClearColor(this.originalClearColor); - renderer.setClearAlpha(originalClearAlpha); - } - renderOverride(renderer, overrideMaterial, renderTarget, clearColor, clearAlpha) { - renderer.getClearColor(this.originalClearColor); - const originalClearAlpha = renderer.getClearAlpha(); - const originalAutoClear = renderer.autoClear; - renderer.setRenderTarget(renderTarget); - renderer.autoClear = false; - clearColor = overrideMaterial.clearColor || clearColor; - clearAlpha = overrideMaterial.clearAlpha || clearAlpha; - if (clearColor !== void 0 && clearColor !== null) { - renderer.setClearColor(clearColor); - renderer.setClearAlpha(clearAlpha || 0); - renderer.clear(); - } - this.scene.overrideMaterial = overrideMaterial; - renderer.render(this.scene, this.camera); - this.scene.overrideMaterial = null; - renderer.autoClear = originalAutoClear; - renderer.setClearColor(this.originalClearColor); - renderer.setClearAlpha(originalClearAlpha); - } - setSize(width, height) { - this.beautyRenderTarget.setSize(width, height); - this.saoRenderTarget.setSize(width, height); - this.blurIntermediateRenderTarget.setSize(width, height); - this.normalRenderTarget.setSize(width, height); - this.depthRenderTarget.setSize(width, height); - this.saoMaterial.uniforms["size"].value.set(width, height); - this.saoMaterial.uniforms["cameraInverseProjectionMatrix"].value.copy(this.camera.projectionMatrixInverse); - this.saoMaterial.uniforms["cameraProjectionMatrix"].value = this.camera.projectionMatrix; - this.saoMaterial.needsUpdate = true; - this.vBlurMaterial.uniforms["size"].value.set(width, height); - this.vBlurMaterial.needsUpdate = true; - this.hBlurMaterial.uniforms["size"].value.set(width, height); - this.hBlurMaterial.needsUpdate = true; - } - dispose() { - this.saoRenderTarget.dispose(); - this.blurIntermediateRenderTarget.dispose(); - this.beautyRenderTarget.dispose(); - this.normalRenderTarget.dispose(); - this.depthRenderTarget.dispose(); - this.depthMaterial.dispose(); - this.normalMaterial.dispose(); - this.saoMaterial.dispose(); - this.vBlurMaterial.dispose(); - this.hBlurMaterial.dispose(); - this.materialCopy.dispose(); - this.depthCopy.dispose(); - this.fsQuad.dispose(); - } - } - __publicField$17(SAOPass2, "OUTPUT", { - Beauty: 1, - Default: 0, - SAO: 2, - Depth: 3, - Normal: 4 - }); - return SAOPass2; -})(); -//#endregion -//#region node_modules/three-stdlib/shaders/AfterimageShader.js -var AfterimageShader = { - uniforms: { - damp: { value: .96 }, - tOld: { value: null }, - tNew: { value: null } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform float damp; - - uniform sampler2D tOld; - uniform sampler2D tNew; - - varying vec2 vUv; - - vec4 when_gt( vec4 x, float y ) { - - return max( sign( x - y ), 0.0 ); - - } - - void main() { - - vec4 texelOld = texture2D( tOld, vUv ); - vec4 texelNew = texture2D( tNew, vUv ); - - texelOld *= damp * when_gt( texelOld, 0.1 ); - - gl_FragColor = max(texelNew, texelOld); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/postprocessing/AfterimagePass.js -var __defProp$16 = Object.defineProperty; -var __defNormalProp$16 = (obj, key, value) => key in obj ? __defProp$16(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$16 = (obj, key, value) => { - __defNormalProp$16(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var AfterimagePass = class extends Pass { - constructor(damp = .96, shader = AfterimageShader) { - super(); - __publicField$16(this, "shader"); - __publicField$16(this, "uniforms"); - __publicField$16(this, "textureComp"); - __publicField$16(this, "textureOld"); - __publicField$16(this, "shaderMaterial"); - __publicField$16(this, "compFsQuad"); - __publicField$16(this, "copyFsQuad"); - this.shader = shader; - this.uniforms = UniformsUtils.clone(shader.uniforms); - this.uniforms["damp"].value = damp; - this.textureComp = new WebGLRenderTarget(window.innerWidth, window.innerHeight, { - minFilter: LinearFilter, - magFilter: NearestFilter, - format: RGBAFormat - }); - this.textureOld = new WebGLRenderTarget(window.innerWidth, window.innerHeight, { - minFilter: LinearFilter, - magFilter: NearestFilter, - format: RGBAFormat - }); - this.shaderMaterial = new ShaderMaterial({ - uniforms: this.uniforms, - vertexShader: this.shader.vertexShader, - fragmentShader: this.shader.fragmentShader - }); - this.compFsQuad = new FullScreenQuad(this.shaderMaterial); - let material = new MeshBasicMaterial(); - this.copyFsQuad = new FullScreenQuad(material); - } - render(renderer, writeBuffer, readBuffer) { - this.uniforms["tOld"].value = this.textureOld.texture; - this.uniforms["tNew"].value = readBuffer.texture; - renderer.setRenderTarget(this.textureComp); - this.compFsQuad.render(renderer); - this.copyFsQuad.material.map = this.textureComp.texture; - if (this.renderToScreen) { - renderer.setRenderTarget(null); - this.copyFsQuad.render(renderer); - } else { - renderer.setRenderTarget(writeBuffer); - if (this.clear) renderer.clear(); - this.copyFsQuad.render(renderer); - } - let temp = this.textureOld; - this.textureOld = this.textureComp; - this.textureComp = temp; - } - setSize(width, height) { - this.textureComp.setSize(width, height); - this.textureOld.setSize(width, height); - } -}; -//#endregion -//#region node_modules/three-stdlib/postprocessing/MaskPass.js -var __defProp$15 = Object.defineProperty; -var __defNormalProp$15 = (obj, key, value) => key in obj ? __defProp$15(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$15 = (obj, key, value) => { - __defNormalProp$15(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var MaskPass = class extends Pass { - constructor(scene, camera) { - super(); - __publicField$15(this, "scene"); - __publicField$15(this, "camera"); - __publicField$15(this, "inverse"); - this.scene = scene; - this.camera = camera; - this.clear = true; - this.needsSwap = false; - this.inverse = false; - } - render(renderer, writeBuffer, readBuffer) { - const context = renderer.getContext(); - const state = renderer.state; - state.buffers.color.setMask(false); - state.buffers.depth.setMask(false); - state.buffers.color.setLocked(true); - state.buffers.depth.setLocked(true); - let writeValue, clearValue; - if (this.inverse) { - writeValue = 0; - clearValue = 1; - } else { - writeValue = 1; - clearValue = 0; - } - state.buffers.stencil.setTest(true); - state.buffers.stencil.setOp(context.REPLACE, context.REPLACE, context.REPLACE); - state.buffers.stencil.setFunc(context.ALWAYS, writeValue, 4294967295); - state.buffers.stencil.setClear(clearValue); - state.buffers.stencil.setLocked(true); - renderer.setRenderTarget(readBuffer); - if (this.clear) renderer.clear(); - renderer.render(this.scene, this.camera); - renderer.setRenderTarget(writeBuffer); - if (this.clear) renderer.clear(); - renderer.render(this.scene, this.camera); - state.buffers.color.setLocked(false); - state.buffers.depth.setLocked(false); - state.buffers.stencil.setLocked(false); - state.buffers.stencil.setFunc(context.EQUAL, 1, 4294967295); - state.buffers.stencil.setOp(context.KEEP, context.KEEP, context.KEEP); - state.buffers.stencil.setLocked(true); - } -}; -var ClearMaskPass = class extends Pass { - constructor() { - super(); - this.needsSwap = false; - } - render(renderer) { - renderer.state.buffers.stencil.setLocked(false); - renderer.state.buffers.stencil.setTest(false); - } -}; -//#endregion -//#region node_modules/three-stdlib/postprocessing/EffectComposer.js -var __defProp$14 = Object.defineProperty; -var __defNormalProp$14 = (obj, key, value) => key in obj ? __defProp$14(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$14 = (obj, key, value) => { - __defNormalProp$14(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var EffectComposer = class { - constructor(renderer, renderTarget) { - __publicField$14(this, "renderer"); - __publicField$14(this, "_pixelRatio"); - __publicField$14(this, "_width"); - __publicField$14(this, "_height"); - __publicField$14(this, "renderTarget1"); - __publicField$14(this, "renderTarget2"); - __publicField$14(this, "writeBuffer"); - __publicField$14(this, "readBuffer"); - __publicField$14(this, "renderToScreen"); - __publicField$14(this, "passes", []); - __publicField$14(this, "copyPass"); - __publicField$14(this, "clock"); - this.renderer = renderer; - if (renderTarget === void 0) { - const parameters = { - minFilter: LinearFilter, - magFilter: LinearFilter, - format: RGBAFormat - }; - const size = renderer.getSize(new Vector2()); - this._pixelRatio = renderer.getPixelRatio(); - this._width = size.width; - this._height = size.height; - renderTarget = new WebGLRenderTarget(this._width * this._pixelRatio, this._height * this._pixelRatio, parameters); - renderTarget.texture.name = "EffectComposer.rt1"; - } else { - this._pixelRatio = 1; - this._width = renderTarget.width; - this._height = renderTarget.height; - } - this.renderTarget1 = renderTarget; - this.renderTarget2 = renderTarget.clone(); - this.renderTarget2.texture.name = "EffectComposer.rt2"; - this.writeBuffer = this.renderTarget1; - this.readBuffer = this.renderTarget2; - this.renderToScreen = true; - if (CopyShader === void 0) console.error("THREE.EffectComposer relies on CopyShader"); - if (ShaderPass === void 0) console.error("THREE.EffectComposer relies on ShaderPass"); - this.copyPass = new ShaderPass(CopyShader); - this.copyPass.material.blending = 0; - this.clock = new Clock(); - } - swapBuffers() { - const tmp = this.readBuffer; - this.readBuffer = this.writeBuffer; - this.writeBuffer = tmp; - } - addPass(pass) { - this.passes.push(pass); - pass.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio); - } - insertPass(pass, index) { - this.passes.splice(index, 0, pass); - pass.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio); - } - removePass(pass) { - const index = this.passes.indexOf(pass); - if (index !== -1) this.passes.splice(index, 1); - } - isLastEnabledPass(passIndex) { - for (let i = passIndex + 1; i < this.passes.length; i++) if (this.passes[i].enabled) return false; - return true; - } - render(deltaTime) { - if (deltaTime === void 0) deltaTime = this.clock.getDelta(); - const currentRenderTarget = this.renderer.getRenderTarget(); - let maskActive = false; - const il = this.passes.length; - for (let i = 0; i < il; i++) { - const pass = this.passes[i]; - if (pass.enabled === false) continue; - pass.renderToScreen = this.renderToScreen && this.isLastEnabledPass(i); - pass.render(this.renderer, this.writeBuffer, this.readBuffer, deltaTime, maskActive); - if (pass.needsSwap) { - if (maskActive) { - const context = this.renderer.getContext(); - const stencil = this.renderer.state.buffers.stencil; - stencil.setFunc(context.NOTEQUAL, 1, 4294967295); - this.copyPass.render(this.renderer, this.writeBuffer, this.readBuffer, deltaTime); - stencil.setFunc(context.EQUAL, 1, 4294967295); - } - this.swapBuffers(); - } - if (MaskPass !== void 0) { - if (pass instanceof MaskPass) maskActive = true; - else if (pass instanceof ClearMaskPass) maskActive = false; - } - } - this.renderer.setRenderTarget(currentRenderTarget); - } - reset(renderTarget) { - if (renderTarget === void 0) { - const size = this.renderer.getSize(new Vector2()); - this._pixelRatio = this.renderer.getPixelRatio(); - this._width = size.width; - this._height = size.height; - renderTarget = this.renderTarget1.clone(); - renderTarget.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio); - } - this.renderTarget1.dispose(); - this.renderTarget2.dispose(); - this.renderTarget1 = renderTarget; - this.renderTarget2 = renderTarget.clone(); - this.writeBuffer = this.renderTarget1; - this.readBuffer = this.renderTarget2; - } - setSize(width, height) { - this._width = width; - this._height = height; - const effectiveWidth = this._width * this._pixelRatio; - const effectiveHeight = this._height * this._pixelRatio; - this.renderTarget1.setSize(effectiveWidth, effectiveHeight); - this.renderTarget2.setSize(effectiveWidth, effectiveHeight); - for (let i = 0; i < this.passes.length; i++) this.passes[i].setSize(effectiveWidth, effectiveHeight); - } - setPixelRatio(pixelRatio) { - this._pixelRatio = pixelRatio; - this.setSize(this._width, this._height); - } - dispose() { - this.renderTarget1.dispose(); - this.renderTarget2.dispose(); - this.copyPass.dispose(); - } -}; -//#endregion -//#region node_modules/three-stdlib/shaders/DotScreenShader.js -var DotScreenShader = { - uniforms: { - tDiffuse: { value: null }, - tSize: { value: /* @__PURE__ */ new Vector2(256, 256) }, - center: { value: /* @__PURE__ */ new Vector2(.5, .5) }, - angle: { value: 1.57 }, - scale: { value: 1 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform vec2 center; - uniform float angle; - uniform float scale; - uniform vec2 tSize; - - uniform sampler2D tDiffuse; - - varying vec2 vUv; - - float pattern() { - - float s = sin( angle ), c = cos( angle ); - - vec2 tex = vUv * tSize - center; - vec2 point = vec2( c * tex.x - s * tex.y, s * tex.x + c * tex.y ) * scale; - - return ( sin( point.x ) * sin( point.y ) ) * 4.0; - - } - - void main() { - - vec4 color = texture2D( tDiffuse, vUv ); - - float average = ( color.r + color.g + color.b ) / 3.0; - - gl_FragColor = vec4( vec3( average * 10.0 - 5.0 + pattern() ), color.a ); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/postprocessing/DotScreenPass.js -var __defProp$13 = Object.defineProperty; -var __defNormalProp$13 = (obj, key, value) => key in obj ? __defProp$13(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$13 = (obj, key, value) => { - __defNormalProp$13(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var DotScreenPass = class extends Pass { - constructor(center, angle, scale) { - super(); - __publicField$13(this, "material"); - __publicField$13(this, "fsQuad"); - __publicField$13(this, "uniforms"); - if (DotScreenShader === void 0) console.error("THREE.DotScreenPass relies on THREE.DotScreenShader"); - const shader = DotScreenShader; - this.uniforms = UniformsUtils.clone(shader.uniforms); - if (center !== void 0) this.uniforms["center"].value.copy(center); - if (angle !== void 0) this.uniforms["angle"].value = angle; - if (scale !== void 0) this.uniforms["scale"].value = scale; - this.material = new ShaderMaterial({ - uniforms: this.uniforms, - vertexShader: shader.vertexShader, - fragmentShader: shader.fragmentShader - }); - this.fsQuad = new FullScreenQuad(this.material); - } - render(renderer, writeBuffer, readBuffer) { - this.uniforms["tDiffuse"].value = readBuffer.texture; - this.uniforms["tSize"].value.set(readBuffer.width, readBuffer.height); - if (this.renderToScreen) { - renderer.setRenderTarget(null); - this.fsQuad.render(renderer); - } else { - renderer.setRenderTarget(writeBuffer); - if (this.clear) renderer.clear(); - this.fsQuad.render(renderer); - } - } -}; -//#endregion -//#region node_modules/three-stdlib/shaders/SSRShader.js -var SSRShader = { - defines: { - MAX_STEP: 0, - isPerspectiveCamera: true, - isDistanceAttenuation: true, - isFresnel: true, - isInfiniteThick: false, - isSelective: false - }, - uniforms: { - tDiffuse: { value: null }, - tNormal: { value: null }, - tMetalness: { value: null }, - tDepth: { value: null }, - cameraNear: { value: null }, - cameraFar: { value: null }, - resolution: { value: /* @__PURE__ */ new Vector2() }, - cameraProjectionMatrix: { value: /* @__PURE__ */ new Matrix4() }, - cameraInverseProjectionMatrix: { value: /* @__PURE__ */ new Matrix4() }, - opacity: { value: .5 }, - maxDistance: { value: 180 }, - cameraRange: { value: 0 }, - surfDist: { value: .007 }, - thickTolerance: { value: .03 } - }, - vertexShader: ` - - varying vec2 vUv; - - void main() { - - vUv = uv; - - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - - `, - fragmentShader: ` - // precision highp float; - precision highp sampler2D; - varying vec2 vUv; - uniform sampler2D tDepth; - uniform sampler2D tNormal; - uniform sampler2D tMetalness; - uniform sampler2D tDiffuse; - uniform float cameraRange; - uniform vec2 resolution; - uniform float opacity; - uniform float cameraNear; - uniform float cameraFar; - uniform float maxDistance; - uniform float surfDist; - uniform mat4 cameraProjectionMatrix; - uniform mat4 cameraInverseProjectionMatrix; - uniform float thickTolerance; - #include <packing> - float pointToLineDistance(vec3 x0, vec3 x1, vec3 x2) { - //x0: point, x1: linePointA, x2: linePointB - //https://mathworld.wolfram.com/Point-LineDistance3-Dimensional.html - return length(cross(x0-x1,x0-x2))/length(x2-x1); - } - float pointPlaneDistance(vec3 point,vec3 planePoint,vec3 planeNormal){ - // https://mathworld.wolfram.com/Point-PlaneDistance.html - //// https://en.wikipedia.org/wiki/Plane_(geometry) - //// http://paulbourke.net/geometry/pointlineplane/ - float a=planeNormal.x,b=planeNormal.y,c=planeNormal.z; - float x0=point.x,y0=point.y,z0=point.z; - float x=planePoint.x,y=planePoint.y,z=planePoint.z; - float d=-(a*x+b*y+c*z); - float distance=(a*x0+b*y0+c*z0+d)/sqrt(a*a+b*b+c*c); - return distance; - } - float getDepth( const in vec2 uv ) { - return texture2D( tDepth, uv ).x; - } - float getViewZ( const in float depth ) { - #ifdef isPerspectiveCamera - return perspectiveDepthToViewZ( depth, cameraNear, cameraFar ); - #else - return orthographicDepthToViewZ( depth, cameraNear, cameraFar ); - #endif - } - vec3 getViewPosition( const in vec2 uv, const in float depth/*clip space*/, const in float clipW ) { - vec4 clipPosition = vec4( ( vec3( uv, depth ) - 0.5 ) * 2.0, 1.0 );//ndc - clipPosition *= clipW; //clip - return ( cameraInverseProjectionMatrix * clipPosition ).xyz;//view - } - vec3 getViewNormal( const in vec2 uv ) { - return unpackRGBToNormal( texture2D( tNormal, uv ).xyz ); - } - vec2 viewPositionToXY(vec3 viewPosition){ - vec2 xy; - vec4 clip=cameraProjectionMatrix*vec4(viewPosition,1); - xy=clip.xy;//clip - float clipW=clip.w; - xy/=clipW;//NDC - xy=(xy+1.)/2.;//uv - xy*=resolution;//screen - return xy; - } - void main(){ - #ifdef isSelective - float metalness=texture2D(tMetalness,vUv).r; - if(metalness==0.) return; - #endif - - float depth = getDepth( vUv ); - float viewZ = getViewZ( depth ); - if(-viewZ>=cameraFar) return; - - float clipW = cameraProjectionMatrix[2][3] * viewZ+cameraProjectionMatrix[3][3]; - vec3 viewPosition=getViewPosition( vUv, depth, clipW ); - - vec2 d0=gl_FragCoord.xy; - vec2 d1; - - vec3 viewNormal=getViewNormal( vUv ); - - #ifdef isPerspectiveCamera - vec3 viewIncidenceDir=normalize(viewPosition); - vec3 viewReflectDir=reflect(viewIncidenceDir,viewNormal); - #else - vec3 viewIncidenceDir=vec3(0,0,-1); - vec3 viewReflectDir=reflect(viewIncidenceDir,viewNormal); - #endif - - float maxReflectRayLen=maxDistance/dot(-viewIncidenceDir,viewNormal); - // dot(a,b)==length(a)*length(b)*cos(theta) // https://www.mathsisfun.com/algebra/vectors-dot-product.html - // if(a.isNormalized&&b.isNormalized) dot(a,b)==cos(theta) - // maxDistance/maxReflectRayLen=cos(theta) - // maxDistance/maxReflectRayLen==dot(a,b) - // maxReflectRayLen==maxDistance/dot(a,b) - - vec3 d1viewPosition=viewPosition+viewReflectDir*maxReflectRayLen; - #ifdef isPerspectiveCamera - if(d1viewPosition.z>-cameraNear){ - //https://tutorial.math.lamar.edu/Classes/CalcIII/EqnsOfLines.aspx - float t=(-cameraNear-viewPosition.z)/viewReflectDir.z; - d1viewPosition=viewPosition+viewReflectDir*t; - } - #endif - d1=viewPositionToXY(d1viewPosition); - - float totalLen=length(d1-d0); - float xLen=d1.x-d0.x; - float yLen=d1.y-d0.y; - float totalStep=max(abs(xLen),abs(yLen)); - float xSpan=xLen/totalStep; - float ySpan=yLen/totalStep; - for(float i=0.;i<MAX_STEP;i++){ - if(i>=totalStep) break; - vec2 xy=vec2(d0.x+i*xSpan,d0.y+i*ySpan); - if(xy.x<0.||xy.x>resolution.x||xy.y<0.||xy.y>resolution.y) break; - float s=length(xy-d0)/totalLen; - vec2 uv=xy/resolution; - - float d = getDepth(uv); - float vZ = getViewZ( d ); - if(-vZ>=cameraFar) continue; - float cW = cameraProjectionMatrix[2][3] * vZ+cameraProjectionMatrix[3][3]; - vec3 vP=getViewPosition( uv, d, cW ); - - #ifdef isPerspectiveCamera - // https://www.comp.nus.edu.sg/~lowkl/publications/lowk_persp_interp_techrep.pdf - float recipVPZ=1./viewPosition.z; - float viewReflectRayZ=1./(recipVPZ+s*(1./d1viewPosition.z-recipVPZ)); - float sD=surfDist*cW; - #else - float viewReflectRayZ=viewPosition.z+s*(d1viewPosition.z-viewPosition.z); - float sD=surfDist; - #endif - if(viewReflectRayZ-sD>vZ) continue; - - #ifdef isInfiniteThick - if(viewReflectRayZ+thickTolerance*clipW<vP.z) break; - #endif - float away=pointToLineDistance(vP,viewPosition,d1viewPosition); - - float op=opacity; - - if(away<sD){ - vec3 vN=getViewNormal( uv ); - if(dot(viewReflectDir,vN)>=0.) continue; - float distance=pointPlaneDistance(vP,viewPosition,viewNormal); - if(distance>maxDistance) break; - #ifdef isDistanceAttenuation - float ratio=1.-(distance/maxDistance); - float attenuation=ratio*ratio; - op=opacity*attenuation; - #endif - #ifdef isFresnel - float fresnel=(dot(viewIncidenceDir,viewReflectDir)+1.)/2.; - op*=fresnel; - #endif - vec4 reflectColor=texture2D(tDiffuse,uv); - gl_FragColor.xyz=reflectColor.xyz; - gl_FragColor.a=op; - break; - } - } - } - ` -}; -var SSRDepthShader = { - defines: { PERSPECTIVE_CAMERA: 1 }, - uniforms: { - tDepth: { value: null }, - cameraNear: { value: null }, - cameraFar: { value: null } - }, - vertexShader: ` - - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - - `, - fragmentShader: ` - - uniform sampler2D tDepth; - - uniform float cameraNear; - uniform float cameraFar; - - varying vec2 vUv; - - #include <packing> - - float getLinearDepth( const in vec2 uv ) { - - #if PERSPECTIVE_CAMERA == 1 - - float fragCoordZ = texture2D( tDepth, uv ).x; - float viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar ); - return viewZToOrthographicDepth( viewZ, cameraNear, cameraFar ); - - #else - - return texture2D( tDepth, uv ).x; - - #endif - - } - - void main() { - - float depth = getLinearDepth( vUv ); - float d = 1.0 - depth; - // d=(d-.999)*1000.; - gl_FragColor = vec4( vec3( d ), 1.0 ); - - } - - ` -}; -var SSRBlurShader = { - uniforms: { - tDiffuse: { value: null }, - resolution: { value: /* @__PURE__ */ new Vector2() }, - opacity: { value: .5 } - }, - vertexShader: ` - - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - - `, - fragmentShader: ` - - uniform sampler2D tDiffuse; - uniform vec2 resolution; - varying vec2 vUv; - void main() { - //reverse engineering from PhotoShop blur filter, then change coefficient - - vec2 texelSize = ( 1.0 / resolution ); - - vec4 c=texture2D(tDiffuse,vUv); - - vec2 offset; - - offset=(vec2(-1,0))*texelSize; - vec4 cl=texture2D(tDiffuse,vUv+offset); - - offset=(vec2(1,0))*texelSize; - vec4 cr=texture2D(tDiffuse,vUv+offset); - - offset=(vec2(0,-1))*texelSize; - vec4 cb=texture2D(tDiffuse,vUv+offset); - - offset=(vec2(0,1))*texelSize; - vec4 ct=texture2D(tDiffuse,vUv+offset); - - // float coeCenter=.5; - // float coeSide=.125; - float coeCenter=.2; - float coeSide=.2; - float a=c.a*coeCenter+cl.a*coeSide+cr.a*coeSide+cb.a*coeSide+ct.a*coeSide; - vec3 rgb=(c.rgb*c.a*coeCenter+cl.rgb*cl.a*coeSide+cr.rgb*cr.a*coeSide+cb.rgb*cb.a*coeSide+ct.rgb*ct.a*coeSide)/a; - gl_FragColor=vec4(rgb,a); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/postprocessing/SSRPass.js -var __defProp$12 = Object.defineProperty; -var __defNormalProp$12 = (obj, key, value) => key in obj ? __defProp$12(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$12 = (obj, key, value) => { - __defNormalProp$12(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var SSRPass = /* @__PURE__ */ (() => { - const _SSRPass = class extends Pass { - constructor({ renderer, scene, camera, width, height, selects, bouncing = false, groundReflector }) { - super(); - this.width = width !== void 0 ? width : 512; - this.height = height !== void 0 ? height : 512; - this.clear = true; - this.renderer = renderer; - this.scene = scene; - this.camera = camera; - this.groundReflector = groundReflector; - this.opacity = SSRShader.uniforms.opacity.value; - this.output = 0; - this.maxDistance = SSRShader.uniforms.maxDistance.value; - this.thickness = SSRShader.uniforms.thickness.value; - this.tempColor = new Color(); - this._selects = selects; - this.selective = Array.isArray(this._selects); - Object.defineProperty(this, "selects", { - get() { - return this._selects; - }, - set(val) { - if (this._selects === val) return; - this._selects = val; - if (Array.isArray(val)) { - this.selective = true; - this.ssrMaterial.defines.SELECTIVE = true; - this.ssrMaterial.needsUpdate = true; - } else { - this.selective = false; - this.ssrMaterial.defines.SELECTIVE = false; - this.ssrMaterial.needsUpdate = true; - } - } - }); - this._bouncing = bouncing; - Object.defineProperty(this, "bouncing", { - get() { - return this._bouncing; - }, - set(val) { - if (this._bouncing === val) return; - this._bouncing = val; - if (val) this.ssrMaterial.uniforms["tDiffuse"].value = this.prevRenderTarget.texture; - else this.ssrMaterial.uniforms["tDiffuse"].value = this.beautyRenderTarget.texture; - } - }); - this.blur = true; - this._distanceAttenuation = SSRShader.defines.DISTANCE_ATTENUATION; - Object.defineProperty(this, "distanceAttenuation", { - get() { - return this._distanceAttenuation; - }, - set(val) { - if (this._distanceAttenuation === val) return; - this._distanceAttenuation = val; - this.ssrMaterial.defines.DISTANCE_ATTENUATION = val; - this.ssrMaterial.needsUpdate = true; - } - }); - this._fresnel = SSRShader.defines.FRESNEL; - Object.defineProperty(this, "fresnel", { - get() { - return this._fresnel; - }, - set(val) { - if (this._fresnel === val) return; - this._fresnel = val; - this.ssrMaterial.defines.FRESNEL = val; - this.ssrMaterial.needsUpdate = true; - } - }); - this._infiniteThick = SSRShader.defines.INFINITE_THICK; - Object.defineProperty(this, "infiniteThick", { - get() { - return this._infiniteThick; - }, - set(val) { - if (this._infiniteThick === val) return; - this._infiniteThick = val; - this.ssrMaterial.defines.INFINITE_THICK = val; - this.ssrMaterial.needsUpdate = true; - } - }); - const depthTexture = new DepthTexture(); - depthTexture.type = UnsignedShortType; - depthTexture.minFilter = NearestFilter; - depthTexture.magFilter = NearestFilter; - this.beautyRenderTarget = new WebGLRenderTarget(this.width, this.height, { - minFilter: NearestFilter, - magFilter: NearestFilter, - type: HalfFloatType, - depthTexture, - depthBuffer: true - }); - this.prevRenderTarget = new WebGLRenderTarget(this.width, this.height, { - minFilter: NearestFilter, - magFilter: NearestFilter - }); - this.normalRenderTarget = new WebGLRenderTarget(this.width, this.height, { - minFilter: NearestFilter, - magFilter: NearestFilter, - type: HalfFloatType - }); - this.metalnessRenderTarget = new WebGLRenderTarget(this.width, this.height, { - minFilter: NearestFilter, - magFilter: NearestFilter, - type: HalfFloatType - }); - this.ssrRenderTarget = new WebGLRenderTarget(this.width, this.height, { - minFilter: NearestFilter, - magFilter: NearestFilter - }); - this.blurRenderTarget = this.ssrRenderTarget.clone(); - this.blurRenderTarget2 = this.ssrRenderTarget.clone(); - this.ssrMaterial = new ShaderMaterial({ - defines: Object.assign({}, SSRShader.defines, { MAX_STEP: Math.sqrt(this.width * this.width + this.height * this.height) }), - uniforms: UniformsUtils.clone(SSRShader.uniforms), - vertexShader: SSRShader.vertexShader, - fragmentShader: SSRShader.fragmentShader, - blending: 0 - }); - this.ssrMaterial.uniforms["tDiffuse"].value = this.beautyRenderTarget.texture; - this.ssrMaterial.uniforms["tNormal"].value = this.normalRenderTarget.texture; - this.ssrMaterial.defines.SELECTIVE = this.selective; - this.ssrMaterial.needsUpdate = true; - this.ssrMaterial.uniforms["tMetalness"].value = this.metalnessRenderTarget.texture; - this.ssrMaterial.uniforms["tDepth"].value = this.beautyRenderTarget.depthTexture; - this.ssrMaterial.uniforms["cameraNear"].value = this.camera.near; - this.ssrMaterial.uniforms["cameraFar"].value = this.camera.far; - this.ssrMaterial.uniforms["thickness"].value = this.thickness; - this.ssrMaterial.uniforms["resolution"].value.set(this.width, this.height); - this.ssrMaterial.uniforms["cameraProjectionMatrix"].value.copy(this.camera.projectionMatrix); - this.ssrMaterial.uniforms["cameraInverseProjectionMatrix"].value.copy(this.camera.projectionMatrixInverse); - this.normalMaterial = new MeshNormalMaterial(); - this.normalMaterial.blending = 0; - this.metalnessOnMaterial = new MeshBasicMaterial({ color: "white" }); - this.metalnessOffMaterial = new MeshBasicMaterial({ color: "black" }); - this.blurMaterial = new ShaderMaterial({ - defines: Object.assign({}, SSRBlurShader.defines), - uniforms: UniformsUtils.clone(SSRBlurShader.uniforms), - vertexShader: SSRBlurShader.vertexShader, - fragmentShader: SSRBlurShader.fragmentShader - }); - this.blurMaterial.uniforms["tDiffuse"].value = this.ssrRenderTarget.texture; - this.blurMaterial.uniforms["resolution"].value.set(this.width, this.height); - this.blurMaterial2 = new ShaderMaterial({ - defines: Object.assign({}, SSRBlurShader.defines), - uniforms: UniformsUtils.clone(SSRBlurShader.uniforms), - vertexShader: SSRBlurShader.vertexShader, - fragmentShader: SSRBlurShader.fragmentShader - }); - this.blurMaterial2.uniforms["tDiffuse"].value = this.blurRenderTarget.texture; - this.blurMaterial2.uniforms["resolution"].value.set(this.width, this.height); - this.depthRenderMaterial = new ShaderMaterial({ - defines: Object.assign({}, SSRDepthShader.defines), - uniforms: UniformsUtils.clone(SSRDepthShader.uniforms), - vertexShader: SSRDepthShader.vertexShader, - fragmentShader: SSRDepthShader.fragmentShader, - blending: 0 - }); - this.depthRenderMaterial.uniforms["tDepth"].value = this.beautyRenderTarget.depthTexture; - this.depthRenderMaterial.uniforms["cameraNear"].value = this.camera.near; - this.depthRenderMaterial.uniforms["cameraFar"].value = this.camera.far; - this.copyMaterial = new ShaderMaterial({ - uniforms: UniformsUtils.clone(CopyShader.uniforms), - vertexShader: CopyShader.vertexShader, - fragmentShader: CopyShader.fragmentShader, - transparent: true, - depthTest: false, - depthWrite: false, - blendSrc: 204, - blendDst: 205, - blendEquation: 100, - blendSrcAlpha: 204, - blendDstAlpha: 205, - blendEquationAlpha: 100 - }); - this.fsQuad = new FullScreenQuad(null); - this.originalClearColor = new Color(); - } - dispose() { - this.beautyRenderTarget.dispose(); - this.prevRenderTarget.dispose(); - this.normalRenderTarget.dispose(); - this.metalnessRenderTarget.dispose(); - this.ssrRenderTarget.dispose(); - this.blurRenderTarget.dispose(); - this.blurRenderTarget2.dispose(); - this.normalMaterial.dispose(); - this.metalnessOnMaterial.dispose(); - this.metalnessOffMaterial.dispose(); - this.blurMaterial.dispose(); - this.blurMaterial2.dispose(); - this.copyMaterial.dispose(); - this.depthRenderMaterial.dispose(); - this.fsQuad.dispose(); - } - render(renderer, writeBuffer) { - renderer.setRenderTarget(this.beautyRenderTarget); - renderer.clear(); - if (this.groundReflector) { - this.groundReflector.visible = false; - this.groundReflector.doRender(this.renderer, this.scene, this.camera); - this.groundReflector.visible = true; - } - renderer.render(this.scene, this.camera); - if (this.groundReflector) this.groundReflector.visible = false; - this.renderOverride(renderer, this.normalMaterial, this.normalRenderTarget, 0, 0); - if (this.selective) this.renderMetalness(renderer, this.metalnessOnMaterial, this.metalnessRenderTarget, 0, 0); - this.ssrMaterial.uniforms["opacity"].value = this.opacity; - this.ssrMaterial.uniforms["maxDistance"].value = this.maxDistance; - this.ssrMaterial.uniforms["thickness"].value = this.thickness; - this.renderPass(renderer, this.ssrMaterial, this.ssrRenderTarget); - if (this.blur) { - this.renderPass(renderer, this.blurMaterial, this.blurRenderTarget); - this.renderPass(renderer, this.blurMaterial2, this.blurRenderTarget2); - } - switch (this.output) { - case _SSRPass.OUTPUT.Default: - if (this.bouncing) { - this.copyMaterial.uniforms["tDiffuse"].value = this.beautyRenderTarget.texture; - this.copyMaterial.blending = 0; - this.renderPass(renderer, this.copyMaterial, this.prevRenderTarget); - if (this.blur) this.copyMaterial.uniforms["tDiffuse"].value = this.blurRenderTarget2.texture; - else this.copyMaterial.uniforms["tDiffuse"].value = this.ssrRenderTarget.texture; - this.copyMaterial.blending = 1; - this.renderPass(renderer, this.copyMaterial, this.prevRenderTarget); - this.copyMaterial.uniforms["tDiffuse"].value = this.prevRenderTarget.texture; - this.copyMaterial.blending = 0; - this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer); - } else { - this.copyMaterial.uniforms["tDiffuse"].value = this.beautyRenderTarget.texture; - this.copyMaterial.blending = 0; - this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer); - if (this.blur) this.copyMaterial.uniforms["tDiffuse"].value = this.blurRenderTarget2.texture; - else this.copyMaterial.uniforms["tDiffuse"].value = this.ssrRenderTarget.texture; - this.copyMaterial.blending = 1; - this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer); - } - break; - case _SSRPass.OUTPUT.SSR: - if (this.blur) this.copyMaterial.uniforms["tDiffuse"].value = this.blurRenderTarget2.texture; - else this.copyMaterial.uniforms["tDiffuse"].value = this.ssrRenderTarget.texture; - this.copyMaterial.blending = 0; - this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer); - if (this.bouncing) { - if (this.blur) this.copyMaterial.uniforms["tDiffuse"].value = this.blurRenderTarget2.texture; - else this.copyMaterial.uniforms["tDiffuse"].value = this.beautyRenderTarget.texture; - this.copyMaterial.blending = 0; - this.renderPass(renderer, this.copyMaterial, this.prevRenderTarget); - this.copyMaterial.uniforms["tDiffuse"].value = this.ssrRenderTarget.texture; - this.copyMaterial.blending = 1; - this.renderPass(renderer, this.copyMaterial, this.prevRenderTarget); - } - break; - case _SSRPass.OUTPUT.Beauty: - this.copyMaterial.uniforms["tDiffuse"].value = this.beautyRenderTarget.texture; - this.copyMaterial.blending = 0; - this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer); - break; - case _SSRPass.OUTPUT.Depth: - this.renderPass(renderer, this.depthRenderMaterial, this.renderToScreen ? null : writeBuffer); - break; - case _SSRPass.OUTPUT.Normal: - this.copyMaterial.uniforms["tDiffuse"].value = this.normalRenderTarget.texture; - this.copyMaterial.blending = 0; - this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer); - break; - case _SSRPass.OUTPUT.Metalness: - this.copyMaterial.uniforms["tDiffuse"].value = this.metalnessRenderTarget.texture; - this.copyMaterial.blending = 0; - this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer); - break; - default: console.warn("THREE.SSRPass: Unknown output type."); - } - } - renderPass(renderer, passMaterial, renderTarget, clearColor, clearAlpha) { - this.originalClearColor.copy(renderer.getClearColor(this.tempColor)); - const originalClearAlpha = renderer.getClearAlpha(this.tempColor); - const originalAutoClear = renderer.autoClear; - renderer.setRenderTarget(renderTarget); - renderer.autoClear = false; - if (clearColor !== void 0 && clearColor !== null) { - renderer.setClearColor(clearColor); - renderer.setClearAlpha(clearAlpha || 0); - renderer.clear(); - } - this.fsQuad.material = passMaterial; - this.fsQuad.render(renderer); - renderer.autoClear = originalAutoClear; - renderer.setClearColor(this.originalClearColor); - renderer.setClearAlpha(originalClearAlpha); - } - renderOverride(renderer, overrideMaterial, renderTarget, clearColor, clearAlpha) { - this.originalClearColor.copy(renderer.getClearColor(this.tempColor)); - const originalClearAlpha = renderer.getClearAlpha(this.tempColor); - const originalAutoClear = renderer.autoClear; - renderer.setRenderTarget(renderTarget); - renderer.autoClear = false; - clearColor = overrideMaterial.clearColor || clearColor; - clearAlpha = overrideMaterial.clearAlpha || clearAlpha; - if (clearColor !== void 0 && clearColor !== null) { - renderer.setClearColor(clearColor); - renderer.setClearAlpha(clearAlpha || 0); - renderer.clear(); - } - this.scene.overrideMaterial = overrideMaterial; - renderer.render(this.scene, this.camera); - this.scene.overrideMaterial = null; - renderer.autoClear = originalAutoClear; - renderer.setClearColor(this.originalClearColor); - renderer.setClearAlpha(originalClearAlpha); - } - renderMetalness(renderer, overrideMaterial, renderTarget, clearColor, clearAlpha) { - this.originalClearColor.copy(renderer.getClearColor(this.tempColor)); - const originalClearAlpha = renderer.getClearAlpha(this.tempColor); - const originalAutoClear = renderer.autoClear; - renderer.setRenderTarget(renderTarget); - renderer.autoClear = false; - clearColor = overrideMaterial.clearColor || clearColor; - clearAlpha = overrideMaterial.clearAlpha || clearAlpha; - if (clearColor !== void 0 && clearColor !== null) { - renderer.setClearColor(clearColor); - renderer.setClearAlpha(clearAlpha || 0); - renderer.clear(); - } - this.scene.traverseVisible((child) => { - child._SSRPassBackupMaterial = child.material; - if (this._selects.includes(child)) child.material = this.metalnessOnMaterial; - else child.material = this.metalnessOffMaterial; - }); - renderer.render(this.scene, this.camera); - this.scene.traverseVisible((child) => { - child.material = child._SSRPassBackupMaterial; - }); - renderer.autoClear = originalAutoClear; - renderer.setClearColor(this.originalClearColor); - renderer.setClearAlpha(originalClearAlpha); - } - setSize(width, height) { - this.width = width; - this.height = height; - this.ssrMaterial.defines.MAX_STEP = Math.sqrt(width * width + height * height); - this.ssrMaterial.needsUpdate = true; - this.beautyRenderTarget.setSize(width, height); - this.prevRenderTarget.setSize(width, height); - this.ssrRenderTarget.setSize(width, height); - this.normalRenderTarget.setSize(width, height); - this.metalnessRenderTarget.setSize(width, height); - this.blurRenderTarget.setSize(width, height); - this.blurRenderTarget2.setSize(width, height); - this.ssrMaterial.uniforms["resolution"].value.set(width, height); - this.ssrMaterial.uniforms["cameraProjectionMatrix"].value.copy(this.camera.projectionMatrix); - this.ssrMaterial.uniforms["cameraInverseProjectionMatrix"].value.copy(this.camera.projectionMatrixInverse); - this.blurMaterial.uniforms["resolution"].value.set(width, height); - this.blurMaterial2.uniforms["resolution"].value.set(width, height); - } - }; - let SSRPass2 = _SSRPass; - __publicField$12(SSRPass2, "OUTPUT", { - Default: 0, - SSR: 1, - Beauty: 3, - Depth: 4, - Normal: 5, - Metalness: 7 - }); - return SSRPass2; -})(); -//#endregion -//#region node_modules/three-stdlib/postprocessing/SSAARenderPass.js -var SSAARenderPass = class extends Pass { - constructor(scene, camera, clearColor, clearAlpha) { - super(); - this.scene = scene; - this.camera = camera; - this.sampleLevel = 4; - this.unbiased = true; - this.clearColor = clearColor !== void 0 ? clearColor : 0; - this.clearAlpha = clearAlpha !== void 0 ? clearAlpha : 0; - this._oldClearColor = new Color(); - const copyShader = CopyShader; - this.copyUniforms = UniformsUtils.clone(copyShader.uniforms); - this.copyMaterial = new ShaderMaterial({ - uniforms: this.copyUniforms, - vertexShader: copyShader.vertexShader, - fragmentShader: copyShader.fragmentShader, - transparent: true, - depthTest: false, - depthWrite: false, - premultipliedAlpha: true, - blending: 2 - }); - this.fsQuad = new FullScreenQuad(this.copyMaterial); - } - dispose() { - if (this.sampleRenderTarget) { - this.sampleRenderTarget.dispose(); - this.sampleRenderTarget = null; - } - this.copyMaterial.dispose(); - this.fsQuad.dispose(); - } - setSize(width, height) { - if (this.sampleRenderTarget) this.sampleRenderTarget.setSize(width, height); - } - render(renderer, writeBuffer, readBuffer) { - if (!this.sampleRenderTarget) { - this.sampleRenderTarget = new WebGLRenderTarget(readBuffer.width, readBuffer.height, { type: HalfFloatType }); - this.sampleRenderTarget.texture.name = "SSAARenderPass.sample"; - } - const jitterOffsets = _JitterVectors$1[Math.max(0, Math.min(this.sampleLevel, 5))]; - const autoClear = renderer.autoClear; - renderer.autoClear = false; - renderer.getClearColor(this._oldClearColor); - const oldClearAlpha = renderer.getClearAlpha(); - const baseSampleWeight = 1 / jitterOffsets.length; - const roundingRange = 1 / 32; - this.copyUniforms["tDiffuse"].value = this.sampleRenderTarget.texture; - const viewOffset = { - fullWidth: readBuffer.width, - fullHeight: readBuffer.height, - offsetX: 0, - offsetY: 0, - width: readBuffer.width, - height: readBuffer.height - }; - const originalViewOffset = Object.assign({}, this.camera.view); - if (originalViewOffset.enabled) Object.assign(viewOffset, originalViewOffset); - for (let i = 0; i < jitterOffsets.length; i++) { - const jitterOffset = jitterOffsets[i]; - if (this.camera.setViewOffset) this.camera.setViewOffset(viewOffset.fullWidth, viewOffset.fullHeight, viewOffset.offsetX + jitterOffset[0] * .0625, viewOffset.offsetY + jitterOffset[1] * .0625, viewOffset.width, viewOffset.height); - let sampleWeight = baseSampleWeight; - if (this.unbiased) { - const uniformCenteredDistribution = -.5 + (i + .5) / jitterOffsets.length; - sampleWeight += roundingRange * uniformCenteredDistribution; - } - this.copyUniforms["opacity"].value = sampleWeight; - renderer.setClearColor(this.clearColor, this.clearAlpha); - renderer.setRenderTarget(this.sampleRenderTarget); - renderer.clear(); - renderer.render(this.scene, this.camera); - renderer.setRenderTarget(this.renderToScreen ? null : writeBuffer); - if (i === 0) { - renderer.setClearColor(0, 0); - renderer.clear(); - } - this.fsQuad.render(renderer); - } - if (this.camera.setViewOffset && originalViewOffset.enabled) this.camera.setViewOffset(originalViewOffset.fullWidth, originalViewOffset.fullHeight, originalViewOffset.offsetX, originalViewOffset.offsetY, originalViewOffset.width, originalViewOffset.height); - else if (this.camera.clearViewOffset) this.camera.clearViewOffset(); - renderer.autoClear = autoClear; - renderer.setClearColor(this._oldClearColor, oldClearAlpha); - } -}; -var _JitterVectors$1 = [ - [[0, 0]], - [[4, 4], [-4, -4]], - [ - [-2, -6], - [6, -2], - [-6, 2], - [2, 6] - ], - [ - [1, -3], - [-1, 3], - [5, 1], - [-3, -5], - [-5, 5], - [-7, -1], - [3, 7], - [7, -7] - ], - [ - [1, 1], - [-1, -3], - [-3, 2], - [4, -1], - [-5, -2], - [2, 5], - [5, 3], - [3, -5], - [-2, 6], - [0, -7], - [-4, -6], - [-6, 4], - [-8, 0], - [7, -4], - [6, 7], - [-7, -8] - ], - [ - [-4, -7], - [-7, -5], - [-3, -5], - [-5, -4], - [-1, -4], - [-2, -2], - [-6, -1], - [-4, 0], - [-7, 1], - [-1, 2], - [-6, 3], - [-3, 3], - [-7, 6], - [-3, 6], - [-5, 7], - [-1, 7], - [5, -7], - [1, -6], - [6, -5], - [4, -4], - [2, -3], - [7, -2], - [1, -1], - [4, -1], - [2, 1], - [6, 2], - [0, 4], - [4, 4], - [2, 5], - [7, 5], - [5, 6], - [3, 7] - ] -]; -//#endregion -//#region node_modules/three-stdlib/postprocessing/TAARenderPass.js -var TAARenderPass = class extends SSAARenderPass { - constructor(scene, camera, clearColor, clearAlpha) { - super(scene, camera, clearColor, clearAlpha); - this.sampleLevel = 0; - this.accumulate = false; - this.accumulateIndex = -1; - } - render(renderer, writeBuffer, readBuffer, deltaTime) { - if (this.accumulate === false) { - super.render(renderer, writeBuffer, readBuffer, deltaTime); - this.accumulateIndex = -1; - return; - } - const jitterOffsets = _JitterVectors[5]; - if (this.sampleRenderTarget === void 0) { - this.sampleRenderTarget = new WebGLRenderTarget(readBuffer.width, readBuffer.height, { type: HalfFloatType }); - this.sampleRenderTarget.texture.name = "TAARenderPass.sample"; - } - if (this.holdRenderTarget === void 0) { - this.holdRenderTarget = new WebGLRenderTarget(readBuffer.width, readBuffer.height, { type: HalfFloatType }); - this.holdRenderTarget.texture.name = "TAARenderPass.hold"; - } - if (this.accumulateIndex === -1) { - super.render(renderer, this.holdRenderTarget, readBuffer, deltaTime); - this.accumulateIndex = 0; - } - const autoClear = renderer.autoClear; - renderer.autoClear = false; - renderer.getClearColor(this._oldClearColor); - const oldClearAlpha = renderer.getClearAlpha(); - const sampleWeight = 1 / jitterOffsets.length; - if (this.accumulateIndex >= 0 && this.accumulateIndex < jitterOffsets.length) { - this.copyUniforms["opacity"].value = sampleWeight; - this.copyUniforms["tDiffuse"].value = writeBuffer.texture; - const numSamplesPerFrame = Math.pow(2, this.sampleLevel); - for (let i = 0; i < numSamplesPerFrame; i++) { - const jitterOffset = jitterOffsets[this.accumulateIndex]; - if (this.camera.setViewOffset) this.camera.setViewOffset(readBuffer.width, readBuffer.height, jitterOffset[0] * .0625, jitterOffset[1] * .0625, readBuffer.width, readBuffer.height); - renderer.setRenderTarget(writeBuffer); - renderer.setClearColor(this.clearColor, this.clearAlpha); - renderer.clear(); - renderer.render(this.scene, this.camera); - renderer.setRenderTarget(this.sampleRenderTarget); - if (this.accumulateIndex === 0) { - renderer.setClearColor(0, 0); - renderer.clear(); - } - this.fsQuad.render(renderer); - this.accumulateIndex++; - if (this.accumulateIndex >= jitterOffsets.length) break; - } - if (this.camera.clearViewOffset) this.camera.clearViewOffset(); - } - renderer.setClearColor(this.clearColor, this.clearAlpha); - const accumulationWeight = this.accumulateIndex * sampleWeight; - if (accumulationWeight > 0) { - this.copyUniforms["opacity"].value = 1; - this.copyUniforms["tDiffuse"].value = this.sampleRenderTarget.texture; - renderer.setRenderTarget(writeBuffer); - renderer.clear(); - this.fsQuad.render(renderer); - } - if (accumulationWeight < 1) { - this.copyUniforms["opacity"].value = 1 - accumulationWeight; - this.copyUniforms["tDiffuse"].value = this.holdRenderTarget.texture; - renderer.setRenderTarget(writeBuffer); - this.fsQuad.render(renderer); - } - renderer.autoClear = autoClear; - renderer.setClearColor(this._oldClearColor, oldClearAlpha); - } - dispose() { - super.dispose(); - if (this.sampleRenderTarget !== void 0) this.sampleRenderTarget.dispose(); - if (this.holdRenderTarget !== void 0) this.holdRenderTarget.dispose(); - } -}; -var _JitterVectors = [ - [[0, 0]], - [[4, 4], [-4, -4]], - [ - [-2, -6], - [6, -2], - [-6, 2], - [2, 6] - ], - [ - [1, -3], - [-1, 3], - [5, 1], - [-3, -5], - [-5, 5], - [-7, -1], - [3, 7], - [7, -7] - ], - [ - [1, 1], - [-1, -3], - [-3, 2], - [4, -1], - [-5, -2], - [2, 5], - [5, 3], - [3, -5], - [-2, 6], - [0, -7], - [-4, -6], - [-6, 4], - [-8, 0], - [7, -4], - [6, 7], - [-7, -8] - ], - [ - [-4, -7], - [-7, -5], - [-3, -5], - [-5, -4], - [-1, -4], - [-2, -2], - [-6, -1], - [-4, 0], - [-7, 1], - [-1, 2], - [-6, 3], - [-3, 3], - [-7, 6], - [-3, 6], - [-5, 7], - [-1, 7], - [5, -7], - [1, -6], - [6, -5], - [4, -4], - [2, -3], - [7, -2], - [1, -1], - [4, -1], - [2, 1], - [6, 2], - [0, 4], - [4, 4], - [2, 5], - [7, 5], - [5, 6], - [3, 7] - ] -]; -//#endregion -//#region node_modules/three-stdlib/postprocessing/RenderPass.js -var __defProp$11 = Object.defineProperty; -var __defNormalProp$11 = (obj, key, value) => key in obj ? __defProp$11(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$11 = (obj, key, value) => { - __defNormalProp$11(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var RenderPass = class extends Pass { - constructor(scene, camera, overrideMaterial, clearColor, clearAlpha = 0) { - super(); - __publicField$11(this, "scene"); - __publicField$11(this, "camera"); - __publicField$11(this, "overrideMaterial"); - __publicField$11(this, "clearColor"); - __publicField$11(this, "clearAlpha"); - __publicField$11(this, "clearDepth", false); - __publicField$11(this, "_oldClearColor", new Color()); - this.scene = scene; - this.camera = camera; - this.overrideMaterial = overrideMaterial; - this.clearColor = clearColor; - this.clearAlpha = clearAlpha; - this.clear = true; - this.needsSwap = false; - } - render(renderer, writeBuffer, readBuffer) { - let oldAutoClear = renderer.autoClear; - renderer.autoClear = false; - let oldClearAlpha; - let oldOverrideMaterial = null; - if (this.overrideMaterial !== void 0) { - oldOverrideMaterial = this.scene.overrideMaterial; - this.scene.overrideMaterial = this.overrideMaterial; - } - if (this.clearColor) { - renderer.getClearColor(this._oldClearColor); - oldClearAlpha = renderer.getClearAlpha(); - renderer.setClearColor(this.clearColor, this.clearAlpha); - } - if (this.clearDepth) renderer.clearDepth(); - renderer.setRenderTarget(this.renderToScreen ? null : readBuffer); - if (this.clear) renderer.clear(renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil); - renderer.render(this.scene, this.camera); - if (this.clearColor) renderer.setClearColor(this._oldClearColor, oldClearAlpha); - if (this.overrideMaterial !== void 0) this.scene.overrideMaterial = oldOverrideMaterial; - renderer.autoClear = oldAutoClear; - } -}; -//#endregion -//#region node_modules/three-stdlib/postprocessing/RenderPixelatedPass.js -var RenderPixelatedPass = class extends Pass { - constructor(resolution, pixelSize, scene, camera, options = {}) { - var _a, _b; - super(); - this.pixelSize = pixelSize; - this.resolution = new Vector2(); - this.renderResolution = new Vector2(); - this.setSize(resolution.x, resolution.y); - this.fsQuad = new FullScreenQuad(this.material()); - this.scene = scene; - this.camera = camera; - this.normalEdgeStrength = (_a = options.normalEdgeStrength) != null ? _a : .3; - this.depthEdgeStrength = (_b = options.depthEdgeStrength) != null ? _b : .4; - this.rgbRenderTarget = pixelRenderTarget(this.renderResolution, RGBAFormat, true); - this.normalRenderTarget = pixelRenderTarget(this.renderResolution, RGBAFormat, false); - this.normalMaterial = new MeshNormalMaterial(); - } - dispose() { - this.rgbRenderTarget.dispose(); - this.normalRenderTarget.dispose(); - this.fsQuad.dispose(); - } - setSize(width, height) { - var _a, _b, _c; - this.resolution.set(width, height); - this.renderResolution.set(width / this.pixelSize | 0, height / this.pixelSize | 0); - const { x, y } = this.renderResolution; - (_a = this.rgbRenderTarget) == null || _a.setSize(x, y); - (_b = this.normalRenderTarget) == null || _b.setSize(x, y); - (_c = this.fsQuad) == null || _c.material.uniforms.resolution.value.set(x, y, 1 / x, 1 / y); - } - setPixelSize(pixelSize) { - this.pixelSize = pixelSize; - this.setSize(this.resolution.x, this.resolution.y); - } - render(renderer, writeBuffer) { - const uniforms = this.fsQuad.material.uniforms; - uniforms.normalEdgeStrength.value = this.normalEdgeStrength; - uniforms.depthEdgeStrength.value = this.depthEdgeStrength; - renderer.setRenderTarget(this.rgbRenderTarget); - renderer.render(this.scene, this.camera); - const overrideMaterial_old = this.scene.overrideMaterial; - renderer.setRenderTarget(this.normalRenderTarget); - this.scene.overrideMaterial = this.normalMaterial; - renderer.render(this.scene, this.camera); - this.scene.overrideMaterial = overrideMaterial_old; - uniforms.tDiffuse.value = this.rgbRenderTarget.texture; - uniforms.tDepth.value = this.rgbRenderTarget.depthTexture; - uniforms.tNormal.value = this.normalRenderTarget.texture; - if (this.renderToScreen) renderer.setRenderTarget(null); - else { - renderer.setRenderTarget(writeBuffer); - if (this.clear) renderer.clear(); - } - this.fsQuad.render(renderer); - } - material() { - return new ShaderMaterial({ - uniforms: { - tDiffuse: { value: null }, - tDepth: { value: null }, - tNormal: { value: null }, - resolution: { value: new Vector4(this.renderResolution.x, this.renderResolution.y, 1 / this.renderResolution.x, 1 / this.renderResolution.y) }, - normalEdgeStrength: { value: 0 }, - depthEdgeStrength: { value: 0 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform sampler2D tDiffuse; - uniform sampler2D tDepth; - uniform sampler2D tNormal; - uniform vec4 resolution; - uniform float normalEdgeStrength; - uniform float depthEdgeStrength; - varying vec2 vUv; - - float getDepth(int x, int y) { - - return texture2D( tDepth, vUv + vec2(x, y) * resolution.zw ).r; - - } - - vec3 getNormal(int x, int y) { - - return texture2D( tNormal, vUv + vec2(x, y) * resolution.zw ).rgb * 2.0 - 1.0; - - } - - float depthEdgeIndicator(float depth, vec3 normal) { - - float diff = 0.0; - diff += clamp(getDepth(1, 0) - depth, 0.0, 1.0); - diff += clamp(getDepth(-1, 0) - depth, 0.0, 1.0); - diff += clamp(getDepth(0, 1) - depth, 0.0, 1.0); - diff += clamp(getDepth(0, -1) - depth, 0.0, 1.0); - return floor(smoothstep(0.01, 0.02, diff) * 2.) / 2.; - - } - - float neighborNormalEdgeIndicator(int x, int y, float depth, vec3 normal) { - - float depthDiff = getDepth(x, y) - depth; - vec3 neighborNormal = getNormal(x, y); - - // Edge pixels should yield to faces who's normals are closer to the bias normal. - vec3 normalEdgeBias = vec3(1., 1., 1.); // This should probably be a parameter. - float normalDiff = dot(normal - neighborNormal, normalEdgeBias); - float normalIndicator = clamp(smoothstep(-.01, .01, normalDiff), 0.0, 1.0); - - // Only the shallower pixel should detect the normal edge. - float depthIndicator = clamp(sign(depthDiff * .25 + .0025), 0.0, 1.0); - - return (1.0 - dot(normal, neighborNormal)) * depthIndicator * normalIndicator; - - } - - float normalEdgeIndicator(float depth, vec3 normal) { - - float indicator = 0.0; - - indicator += neighborNormalEdgeIndicator(0, -1, depth, normal); - indicator += neighborNormalEdgeIndicator(0, 1, depth, normal); - indicator += neighborNormalEdgeIndicator(-1, 0, depth, normal); - indicator += neighborNormalEdgeIndicator(1, 0, depth, normal); - - return step(0.1, indicator); - - } - - void main() { - - vec4 texel = texture2D( tDiffuse, vUv ); - - float depth = 0.0; - vec3 normal = vec3(0.0); - - if (depthEdgeStrength > 0.0 || normalEdgeStrength > 0.0) { - - depth = getDepth(0, 0); - normal = getNormal(0, 0); - - } - - float dei = 0.0; - if (depthEdgeStrength > 0.0) - dei = depthEdgeIndicator(depth, normal); - - float nei = 0.0; - if (normalEdgeStrength > 0.0) - nei = normalEdgeIndicator(depth, normal); - - float Strength = dei > 0.0 ? (1.0 - depthEdgeStrength * dei) : (1.0 + normalEdgeStrength * nei); - - gl_FragColor = texel * Strength; - - } - ` - }); - } -}; -function pixelRenderTarget(resolution, pixelFormat, useDepthTexture) { - const renderTarget = new WebGLRenderTarget(resolution.x, resolution.y, !useDepthTexture ? void 0 : { - depthTexture: new DepthTexture(resolution.x, resolution.y), - depthBuffer: true - }); - renderTarget.texture.format = pixelFormat; - renderTarget.texture.minFilter = NearestFilter; - renderTarget.texture.magFilter = NearestFilter; - renderTarget.texture.generateMipmaps = false; - renderTarget.stencilBuffer = false; - return renderTarget; -} -//#endregion -//#region node_modules/three-stdlib/shaders/ConvolutionShader.js -var ConvolutionShader = { - defines: { - KERNEL_SIZE_FLOAT: "25.0", - KERNEL_SIZE_INT: "25" - }, - uniforms: { - tDiffuse: { value: null }, - uImageIncrement: { value: /* @__PURE__ */ new Vector2(.001953125, 0) }, - cKernel: { value: [] } - }, - vertexShader: ` - uniform vec2 uImageIncrement; - - varying vec2 vUv; - - void main() { - - vUv = uv - ( ( KERNEL_SIZE_FLOAT - 1.0 ) / 2.0 ) * uImageIncrement; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform float cKernel[ KERNEL_SIZE_INT ]; - - uniform sampler2D tDiffuse; - uniform vec2 uImageIncrement; - - varying vec2 vUv; - - void main() { - - vec2 imageCoord = vUv; - vec4 sum = vec4( 0.0, 0.0, 0.0, 0.0 ); - - for( int i = 0; i < KERNEL_SIZE_INT; i ++ ) { - - sum += texture2D( tDiffuse, imageCoord ) * cKernel[ i ]; - imageCoord += uImageIncrement; - - } - - gl_FragColor = sum; - - } - `, - buildKernel: function(sigma) { - function gauss(x, sigma2) { - return Math.exp(-(x * x) / (2 * sigma2 * sigma2)); - } - const kernelSize = Math.min(2 * Math.ceil(sigma * 3) + 1, 25); - const halfWidth = (kernelSize - 1) * .5; - const values = new Array(kernelSize); - let sum = 0; - for (let i = 0; i < kernelSize; ++i) { - values[i] = gauss(i - halfWidth, sigma); - sum += values[i]; - } - for (let i = 0; i < kernelSize; ++i) values[i] /= sum; - return values; - } -}; -//#endregion -//#region node_modules/three-stdlib/postprocessing/BloomPass.js -var __defProp$10 = Object.defineProperty; -var __defNormalProp$10 = (obj, key, value) => key in obj ? __defProp$10(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$10 = (obj, key, value) => { - __defNormalProp$10(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var BloomPass = class extends Pass { - constructor(strength = 1, kernelSize = 25, sigma = 4, resolution = 256) { - super(); - __publicField$10(this, "renderTargetX"); - __publicField$10(this, "renderTargetY"); - __publicField$10(this, "materialCombine"); - __publicField$10(this, "materialConvolution"); - __publicField$10(this, "fsQuad"); - __publicField$10(this, "combineUniforms"); - __publicField$10(this, "convolutionUniforms"); - __publicField$10(this, "blurX", new Vector2(.001953125, 0)); - __publicField$10(this, "blurY", new Vector2(0, .001953125)); - this.renderTargetX = new WebGLRenderTarget(resolution, resolution); - this.renderTargetX.texture.name = "BloomPass.x"; - this.renderTargetY = new WebGLRenderTarget(resolution, resolution); - this.renderTargetY.texture.name = "BloomPass.y"; - this.combineUniforms = UniformsUtils.clone(CombineShader.uniforms); - this.combineUniforms["strength"].value = strength; - this.materialCombine = new ShaderMaterial({ - uniforms: this.combineUniforms, - vertexShader: CombineShader.vertexShader, - fragmentShader: CombineShader.fragmentShader, - blending: 2, - transparent: true - }); - if (ConvolutionShader === void 0) console.error("BloomPass relies on ConvolutionShader"); - const convolutionShader = ConvolutionShader; - this.convolutionUniforms = UniformsUtils.clone(convolutionShader.uniforms); - this.convolutionUniforms["uImageIncrement"].value = this.blurX; - this.convolutionUniforms["cKernel"].value = ConvolutionShader.buildKernel(sigma); - this.materialConvolution = new ShaderMaterial({ - uniforms: this.convolutionUniforms, - vertexShader: convolutionShader.vertexShader, - fragmentShader: convolutionShader.fragmentShader, - defines: { - KERNEL_SIZE_FLOAT: kernelSize.toFixed(1), - KERNEL_SIZE_INT: kernelSize.toFixed(0) - } - }); - this.needsSwap = false; - this.fsQuad = new FullScreenQuad(this.materialConvolution); - } - render(renderer, writeBuffer, readBuffer, deltaTime, maskActive) { - if (maskActive) renderer.state.buffers.stencil.setTest(false); - this.fsQuad.material = this.materialConvolution; - this.convolutionUniforms["tDiffuse"].value = readBuffer.texture; - this.convolutionUniforms["uImageIncrement"].value = this.blurX; - renderer.setRenderTarget(this.renderTargetX); - renderer.clear(); - this.fsQuad.render(renderer); - this.convolutionUniforms["tDiffuse"].value = this.renderTargetX.texture; - this.convolutionUniforms["uImageIncrement"].value = this.blurY; - renderer.setRenderTarget(this.renderTargetY); - renderer.clear(); - this.fsQuad.render(renderer); - this.fsQuad.material = this.materialCombine; - this.combineUniforms["tDiffuse"].value = this.renderTargetY.texture; - if (maskActive) renderer.state.buffers.stencil.setTest(true); - renderer.setRenderTarget(readBuffer); - if (this.clear) renderer.clear(); - this.fsQuad.render(renderer); - } -}; -var CombineShader = { - uniforms: { - tDiffuse: { value: null }, - strength: { value: 1 } - }, - vertexShader: ` - varying vec2 vUv; - void main() { - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - }`, - fragmentShader: ` - uniform float strength; - uniform sampler2D tDiffuse; - varying vec2 vUv; - void main() { - vec4 texel = texture2D( tDiffuse, vUv ); - gl_FragColor = strength * texel; - }` -}; -//#endregion -//#region node_modules/three-stdlib/postprocessing/WaterPass.js -var __defProp$9 = Object.defineProperty; -var __defNormalProp$9 = (obj, key, value) => key in obj ? __defProp$9(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$9 = (obj, key, value) => { - __defNormalProp$9(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var WaterPass = class extends Pass { - constructor() { - super(); - __publicField$9(this, "material"); - __publicField$9(this, "fsQuad"); - __publicField$9(this, "factor"); - __publicField$9(this, "time"); - __publicField$9(this, "uniforms"); - this.uniforms = { - tex: { value: null }, - time: { value: 0 }, - factor: { value: 0 }, - resolution: { value: new Vector2(64, 64) } - }; - this.material = new ShaderMaterial({ - uniforms: this.uniforms, - vertexShader: ` - varying vec2 vUv; - void main(){ - vUv = uv; - vec4 modelViewPosition = modelViewMatrix * vec4(position, 1.0); - gl_Position = projectionMatrix * modelViewPosition; - }`, - fragmentShader: ` - uniform float time; - uniform float factor; - uniform vec2 resolution; - uniform sampler2D tex; - varying vec2 vUv; - void main() { - vec2 uv1 = vUv; - vec2 uv = gl_FragCoord.xy/resolution.xy; - float frequency = 6.0 * factor; - float amplitude = 0.015 * factor; - float x = uv1.y * frequency + time * .7; - float y = uv1.x * frequency + time * .3; - uv1.x += cos(x+y) * amplitude * cos(y); - uv1.y += sin(x-y) * amplitude * cos(y); - vec4 rgba = texture2D(tex, uv1); - gl_FragColor = rgba; - }` - }); - this.fsQuad = new FullScreenQuad(this.material); - this.factor = 0; - this.time = 0; - } - render(renderer, writeBuffer, readBuffer) { - this.uniforms["tex"].value = readBuffer.texture; - this.uniforms["time"].value = this.time; - this.uniforms["factor"].value = this.factor; - if (this.renderToScreen) { - renderer.setRenderTarget(null); - this.fsQuad.render(renderer); - } else { - renderer.setRenderTarget(writeBuffer); - if (this.clear) renderer.clear(); - this.fsQuad.render(renderer); - } - } -}; -//#endregion -//#region node_modules/three-stdlib/webxr/ARButton.js -var ARButton = { createButton(renderer, sessionInit = {}) { - const button = document.createElement("button"); - function showStartAR() { - if (sessionInit.domOverlay === void 0) { - const overlay = document.createElement("div"); - overlay.style.display = "none"; - document.body.appendChild(overlay); - const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg"); - svg.setAttribute("width", "38px"); - svg.setAttribute("height", "38px"); - svg.style.position = "absolute"; - svg.style.right = "20px"; - svg.style.top = "20px"; - svg.addEventListener("click", function() { - currentSession?.end(); - }); - overlay.appendChild(svg); - const path = document.createElementNS("http://www.w3.org/2000/svg", "path"); - path.setAttribute("d", "M 12,12 L 28,28 M 28,12 12,28"); - path.setAttribute("stroke", "#fff"); - path.setAttribute("stroke-width", "2px"); - svg.appendChild(path); - if (sessionInit.optionalFeatures === void 0) sessionInit.optionalFeatures = []; - sessionInit.optionalFeatures.push("dom-overlay"); - sessionInit.domOverlay = { root: overlay }; - } - let currentSession = null; - async function onSessionStarted(session) { - session.addEventListener("end", onSessionEnded); - renderer.xr.setReferenceSpaceType("local"); - await renderer.xr.setSession(session); - button.textContent = "STOP AR"; - sessionInit.domOverlay.root.style.display = ""; - currentSession = session; - } - function onSessionEnded() { - currentSession.removeEventListener("end", onSessionEnded); - button.textContent = "START AR"; - sessionInit.domOverlay.root.style.display = "none"; - currentSession = null; - } - button.style.display = ""; - button.style.cursor = "pointer"; - button.style.left = "calc(50% - 50px)"; - button.style.width = "100px"; - button.textContent = "START AR"; - button.onmouseenter = () => { - button.style.opacity = "1.0"; - }; - button.onmouseleave = () => { - button.style.opacity = "0.5"; - }; - button.onclick = () => { - if (currentSession === null) navigator.xr.requestSession("immersive-ar", sessionInit).then(onSessionStarted); - else currentSession.end(); - }; - } - function disableButton() { - button.style.display = ""; - button.style.cursor = "auto"; - button.style.left = "calc(50% - 75px)"; - button.style.width = "150px"; - button.onmouseenter = null; - button.onmouseleave = null; - button.onclick = null; - } - function showARNotSupported() { - disableButton(); - button.textContent = "AR NOT SUPPORTED"; - } - function stylizeElement(element) { - element.style.position = "absolute"; - element.style.bottom = "20px"; - element.style.padding = "12px 6px"; - element.style.border = "1px solid #fff"; - element.style.borderRadius = "4px"; - element.style.background = "rgba(0,0,0,0.1)"; - element.style.color = "#fff"; - element.style.font = "normal 13px sans-serif"; - element.style.textAlign = "center"; - element.style.opacity = "0.5"; - element.style.outline = "none"; - element.style.zIndex = "999"; - } - if ("xr" in navigator) { - button.id = "ARButton"; - button.style.display = "none"; - stylizeElement(button); - navigator.xr.isSessionSupported("immersive-ar").then(function(supported) { - supported ? showStartAR() : showARNotSupported(); - }).catch(showARNotSupported); - return button; - } else { - const message = document.createElement("a"); - if (window.isSecureContext === false) { - message.href = document.location.href.replace(/^http:/, "https:"); - message.innerHTML = "WEBXR NEEDS HTTPS"; - } else { - message.href = "https://immersiveweb.dev/"; - message.innerHTML = "WEBXR NOT AVAILABLE"; - } - message.style.left = "calc(50% - 90px)"; - message.style.width = "180px"; - message.style.textDecoration = "none"; - stylizeElement(message); - return message; - } -} }; -//#endregion -//#region node_modules/three-stdlib/_polyfill/LoaderUtils.js -function decodeText$1(array) { - if (typeof TextDecoder !== "undefined") return new TextDecoder().decode(array); - let s = ""; - for (let i = 0, il = array.length; i < il; i++) s += String.fromCharCode(array[i]); - try { - return decodeURIComponent(escape(s)); - } catch (e) { - return s; - } -} -//#endregion -//#region node_modules/three-stdlib/loaders/GLTFLoader.js -var SRGBColorSpace$1 = "srgb"; -var LinearSRGBColorSpace$1 = "srgb-linear"; -var sRGBEncoding$1 = 3001; -var LinearEncoding$1 = 3e3; -var GLTFLoader = class extends Loader { - constructor(manager) { - super(manager); - this.dracoLoader = null; - this.ktx2Loader = null; - this.meshoptDecoder = null; - this.pluginCallbacks = []; - this.register(function(parser) { - return new GLTFMaterialsClearcoatExtension(parser); - }); - this.register(function(parser) { - return new GLTFMaterialsDispersionExtension(parser); - }); - this.register(function(parser) { - return new GLTFTextureBasisUExtension(parser); - }); - this.register(function(parser) { - return new GLTFTextureWebPExtension(parser); - }); - this.register(function(parser) { - return new GLTFTextureAVIFExtension(parser); - }); - this.register(function(parser) { - return new GLTFMaterialsSheenExtension(parser); - }); - this.register(function(parser) { - return new GLTFMaterialsTransmissionExtension(parser); - }); - this.register(function(parser) { - return new GLTFMaterialsVolumeExtension(parser); - }); - this.register(function(parser) { - return new GLTFMaterialsIorExtension(parser); - }); - this.register(function(parser) { - return new GLTFMaterialsEmissiveStrengthExtension(parser); - }); - this.register(function(parser) { - return new GLTFMaterialsSpecularExtension(parser); - }); - this.register(function(parser) { - return new GLTFMaterialsIridescenceExtension(parser); - }); - this.register(function(parser) { - return new GLTFMaterialsAnisotropyExtension(parser); - }); - this.register(function(parser) { - return new GLTFMaterialsBumpExtension(parser); - }); - this.register(function(parser) { - return new GLTFLightsExtension(parser); - }); - this.register(function(parser) { - return new GLTFMeshoptCompression(parser); - }); - this.register(function(parser) { - return new GLTFMeshGpuInstancing(parser); - }); - } - load(url, onLoad, onProgress, onError) { - const scope = this; - let resourcePath; - if (this.resourcePath !== "") resourcePath = this.resourcePath; - else if (this.path !== "") { - const relativeUrl = LoaderUtils.extractUrlBase(url); - resourcePath = LoaderUtils.resolveURL(relativeUrl, this.path); - } else resourcePath = LoaderUtils.extractUrlBase(url); - this.manager.itemStart(url); - const _onError = function(e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - scope.manager.itemEnd(url); - }; - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setResponseType("arraybuffer"); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - loader.load(url, function(data) { - try { - scope.parse(data, resourcePath, function(gltf) { - onLoad(gltf); - scope.manager.itemEnd(url); - }, _onError); - } catch (e) { - _onError(e); - } - }, onProgress, _onError); - } - setDRACOLoader(dracoLoader) { - this.dracoLoader = dracoLoader; - return this; - } - setDDSLoader() { - throw new Error("THREE.GLTFLoader: \"MSFT_texture_dds\" no longer supported. Please update to \"KHR_texture_basisu\"."); - } - setKTX2Loader(ktx2Loader) { - this.ktx2Loader = ktx2Loader; - return this; - } - setMeshoptDecoder(meshoptDecoder) { - this.meshoptDecoder = meshoptDecoder; - return this; - } - register(callback) { - if (this.pluginCallbacks.indexOf(callback) === -1) this.pluginCallbacks.push(callback); - return this; - } - unregister(callback) { - if (this.pluginCallbacks.indexOf(callback) !== -1) this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(callback), 1); - return this; - } - parse(data, path, onLoad, onError) { - let json; - const extensions = {}; - const plugins = {}; - if (typeof data === "string") json = JSON.parse(data); - else if (data instanceof ArrayBuffer) if (decodeText$1(new Uint8Array(data.slice(0, 4))) === BINARY_EXTENSION_HEADER_MAGIC) { - try { - extensions[EXTENSIONS.KHR_BINARY_GLTF] = new GLTFBinaryExtension(data); - } catch (error) { - if (onError) onError(error); - return; - } - json = JSON.parse(extensions[EXTENSIONS.KHR_BINARY_GLTF].content); - } else json = JSON.parse(decodeText$1(new Uint8Array(data))); - else json = data; - if (json.asset === void 0 || json.asset.version[0] < 2) { - if (onError) onError(/* @__PURE__ */ new Error("THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.")); - return; - } - const parser = new GLTFParser(json, { - path: path || this.resourcePath || "", - crossOrigin: this.crossOrigin, - requestHeader: this.requestHeader, - manager: this.manager, - ktx2Loader: this.ktx2Loader, - meshoptDecoder: this.meshoptDecoder - }); - parser.fileLoader.setRequestHeader(this.requestHeader); - for (let i = 0; i < this.pluginCallbacks.length; i++) { - const plugin = this.pluginCallbacks[i](parser); - if (!plugin.name) console.error("THREE.GLTFLoader: Invalid plugin found: missing name"); - plugins[plugin.name] = plugin; - extensions[plugin.name] = true; - } - if (json.extensionsUsed) for (let i = 0; i < json.extensionsUsed.length; ++i) { - const extensionName = json.extensionsUsed[i]; - const extensionsRequired = json.extensionsRequired || []; - switch (extensionName) { - case EXTENSIONS.KHR_MATERIALS_UNLIT: - extensions[extensionName] = new GLTFMaterialsUnlitExtension(); - break; - case EXTENSIONS.KHR_DRACO_MESH_COMPRESSION: - extensions[extensionName] = new GLTFDracoMeshCompressionExtension(json, this.dracoLoader); - break; - case EXTENSIONS.KHR_TEXTURE_TRANSFORM: - extensions[extensionName] = new GLTFTextureTransformExtension(); - break; - case EXTENSIONS.KHR_MESH_QUANTIZATION: - extensions[extensionName] = new GLTFMeshQuantizationExtension(); - break; - default: if (extensionsRequired.indexOf(extensionName) >= 0 && plugins[extensionName] === void 0) console.warn("THREE.GLTFLoader: Unknown extension \"" + extensionName + "\"."); - } - } - parser.setExtensions(extensions); - parser.setPlugins(plugins); - parser.parse(onLoad, onError); - } - parseAsync(data, path) { - const scope = this; - return new Promise(function(resolve, reject) { - scope.parse(data, path, resolve, reject); - }); - } -}; -function GLTFRegistry() { - let objects = {}; - return { - get: function(key) { - return objects[key]; - }, - add: function(key, object) { - objects[key] = object; - }, - remove: function(key) { - delete objects[key]; - }, - removeAll: function() { - objects = {}; - } - }; -} -var EXTENSIONS = { - KHR_BINARY_GLTF: "KHR_binary_glTF", - KHR_DRACO_MESH_COMPRESSION: "KHR_draco_mesh_compression", - KHR_LIGHTS_PUNCTUAL: "KHR_lights_punctual", - KHR_MATERIALS_CLEARCOAT: "KHR_materials_clearcoat", - KHR_MATERIALS_DISPERSION: "KHR_materials_dispersion", - KHR_MATERIALS_IOR: "KHR_materials_ior", - KHR_MATERIALS_SHEEN: "KHR_materials_sheen", - KHR_MATERIALS_SPECULAR: "KHR_materials_specular", - KHR_MATERIALS_TRANSMISSION: "KHR_materials_transmission", - KHR_MATERIALS_IRIDESCENCE: "KHR_materials_iridescence", - KHR_MATERIALS_ANISOTROPY: "KHR_materials_anisotropy", - KHR_MATERIALS_UNLIT: "KHR_materials_unlit", - KHR_MATERIALS_VOLUME: "KHR_materials_volume", - KHR_TEXTURE_BASISU: "KHR_texture_basisu", - KHR_TEXTURE_TRANSFORM: "KHR_texture_transform", - KHR_MESH_QUANTIZATION: "KHR_mesh_quantization", - KHR_MATERIALS_EMISSIVE_STRENGTH: "KHR_materials_emissive_strength", - EXT_MATERIALS_BUMP: "EXT_materials_bump", - EXT_TEXTURE_WEBP: "EXT_texture_webp", - EXT_TEXTURE_AVIF: "EXT_texture_avif", - EXT_MESHOPT_COMPRESSION: "EXT_meshopt_compression", - EXT_MESH_GPU_INSTANCING: "EXT_mesh_gpu_instancing" -}; -var GLTFLightsExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL; - this.cache = { - refs: {}, - uses: {} - }; - } - _markDefs() { - const parser = this.parser; - const nodeDefs = this.parser.json.nodes || []; - for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) { - const nodeDef = nodeDefs[nodeIndex]; - if (nodeDef.extensions && nodeDef.extensions[this.name] && nodeDef.extensions[this.name].light !== void 0) parser._addNodeRef(this.cache, nodeDef.extensions[this.name].light); - } - } - _loadLight(lightIndex) { - const parser = this.parser; - const cacheKey = "light:" + lightIndex; - let dependency = parser.cache.get(cacheKey); - if (dependency) return dependency; - const json = parser.json; - const lightDef = ((json.extensions && json.extensions[this.name] || {}).lights || [])[lightIndex]; - let lightNode; - const color = new Color(16777215); - if (lightDef.color !== void 0) color.setRGB(lightDef.color[0], lightDef.color[1], lightDef.color[2], LinearSRGBColorSpace$1); - const range = lightDef.range !== void 0 ? lightDef.range : 0; - switch (lightDef.type) { - case "directional": - lightNode = new DirectionalLight(color); - lightNode.target.position.set(0, 0, -1); - lightNode.add(lightNode.target); - break; - case "point": - lightNode = new PointLight(color); - lightNode.distance = range; - break; - case "spot": - lightNode = new SpotLight(color); - lightNode.distance = range; - lightDef.spot = lightDef.spot || {}; - lightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== void 0 ? lightDef.spot.innerConeAngle : 0; - lightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== void 0 ? lightDef.spot.outerConeAngle : Math.PI / 4; - lightNode.angle = lightDef.spot.outerConeAngle; - lightNode.penumbra = 1 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle; - lightNode.target.position.set(0, 0, -1); - lightNode.add(lightNode.target); - break; - default: throw new Error("THREE.GLTFLoader: Unexpected light type: " + lightDef.type); - } - lightNode.position.set(0, 0, 0); - lightNode.decay = 2; - assignExtrasToUserData(lightNode, lightDef); - if (lightDef.intensity !== void 0) lightNode.intensity = lightDef.intensity; - lightNode.name = parser.createUniqueName(lightDef.name || "light_" + lightIndex); - dependency = Promise.resolve(lightNode); - parser.cache.add(cacheKey, dependency); - return dependency; - } - getDependency(type, index) { - if (type !== "light") return; - return this._loadLight(index); - } - createNodeAttachment(nodeIndex) { - const self2 = this; - const parser = this.parser; - const nodeDef = parser.json.nodes[nodeIndex]; - const lightIndex = (nodeDef.extensions && nodeDef.extensions[this.name] || {}).light; - if (lightIndex === void 0) return null; - return this._loadLight(lightIndex).then(function(light) { - return parser._getNodeRef(self2.cache, lightIndex, light); - }); - } -}; -var GLTFMaterialsUnlitExtension = class { - constructor() { - this.name = EXTENSIONS.KHR_MATERIALS_UNLIT; - } - getMaterialType() { - return MeshBasicMaterial; - } - extendParams(materialParams, materialDef, parser) { - const pending = []; - materialParams.color = new Color(1, 1, 1); - materialParams.opacity = 1; - const metallicRoughness = materialDef.pbrMetallicRoughness; - if (metallicRoughness) { - if (Array.isArray(metallicRoughness.baseColorFactor)) { - const array = metallicRoughness.baseColorFactor; - materialParams.color.setRGB(array[0], array[1], array[2], LinearSRGBColorSpace$1); - materialParams.opacity = array[3]; - } - if (metallicRoughness.baseColorTexture !== void 0) pending.push(parser.assignTexture(materialParams, "map", metallicRoughness.baseColorTexture, SRGBColorSpace$1)); - } - return Promise.all(pending); - } -}; -var GLTFMaterialsEmissiveStrengthExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_MATERIALS_EMISSIVE_STRENGTH; - } - extendMaterialParams(materialIndex, materialParams) { - const materialDef = this.parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return Promise.resolve(); - const emissiveStrength = materialDef.extensions[this.name].emissiveStrength; - if (emissiveStrength !== void 0) materialParams.emissiveIntensity = emissiveStrength; - return Promise.resolve(); - } -}; -var GLTFMaterialsClearcoatExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT; - } - getMaterialType(materialIndex) { - const materialDef = this.parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; - return MeshPhysicalMaterial; - } - extendMaterialParams(materialIndex, materialParams) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return Promise.resolve(); - const pending = []; - const extension = materialDef.extensions[this.name]; - if (extension.clearcoatFactor !== void 0) materialParams.clearcoat = extension.clearcoatFactor; - if (extension.clearcoatTexture !== void 0) pending.push(parser.assignTexture(materialParams, "clearcoatMap", extension.clearcoatTexture)); - if (extension.clearcoatRoughnessFactor !== void 0) materialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor; - if (extension.clearcoatRoughnessTexture !== void 0) pending.push(parser.assignTexture(materialParams, "clearcoatRoughnessMap", extension.clearcoatRoughnessTexture)); - if (extension.clearcoatNormalTexture !== void 0) { - pending.push(parser.assignTexture(materialParams, "clearcoatNormalMap", extension.clearcoatNormalTexture)); - if (extension.clearcoatNormalTexture.scale !== void 0) { - const scale = extension.clearcoatNormalTexture.scale; - materialParams.clearcoatNormalScale = new Vector2(scale, scale); - } - } - return Promise.all(pending); - } -}; -var GLTFMaterialsDispersionExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_MATERIALS_DISPERSION; - } - getMaterialType(materialIndex) { - const materialDef = this.parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; - return MeshPhysicalMaterial; - } - extendMaterialParams(materialIndex, materialParams) { - const materialDef = this.parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return Promise.resolve(); - const extension = materialDef.extensions[this.name]; - materialParams.dispersion = extension.dispersion !== void 0 ? extension.dispersion : 0; - return Promise.resolve(); - } -}; -var GLTFMaterialsIridescenceExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_MATERIALS_IRIDESCENCE; - } - getMaterialType(materialIndex) { - const materialDef = this.parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; - return MeshPhysicalMaterial; - } - extendMaterialParams(materialIndex, materialParams) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return Promise.resolve(); - const pending = []; - const extension = materialDef.extensions[this.name]; - if (extension.iridescenceFactor !== void 0) materialParams.iridescence = extension.iridescenceFactor; - if (extension.iridescenceTexture !== void 0) pending.push(parser.assignTexture(materialParams, "iridescenceMap", extension.iridescenceTexture)); - if (extension.iridescenceIor !== void 0) materialParams.iridescenceIOR = extension.iridescenceIor; - if (materialParams.iridescenceThicknessRange === void 0) materialParams.iridescenceThicknessRange = [100, 400]; - if (extension.iridescenceThicknessMinimum !== void 0) materialParams.iridescenceThicknessRange[0] = extension.iridescenceThicknessMinimum; - if (extension.iridescenceThicknessMaximum !== void 0) materialParams.iridescenceThicknessRange[1] = extension.iridescenceThicknessMaximum; - if (extension.iridescenceThicknessTexture !== void 0) pending.push(parser.assignTexture(materialParams, "iridescenceThicknessMap", extension.iridescenceThicknessTexture)); - return Promise.all(pending); - } -}; -var GLTFMaterialsSheenExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_MATERIALS_SHEEN; - } - getMaterialType(materialIndex) { - const materialDef = this.parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; - return MeshPhysicalMaterial; - } - extendMaterialParams(materialIndex, materialParams) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return Promise.resolve(); - const pending = []; - materialParams.sheenColor = new Color(0, 0, 0); - materialParams.sheenRoughness = 0; - materialParams.sheen = 1; - const extension = materialDef.extensions[this.name]; - if (extension.sheenColorFactor !== void 0) { - const colorFactor = extension.sheenColorFactor; - materialParams.sheenColor.setRGB(colorFactor[0], colorFactor[1], colorFactor[2], LinearSRGBColorSpace$1); - } - if (extension.sheenRoughnessFactor !== void 0) materialParams.sheenRoughness = extension.sheenRoughnessFactor; - if (extension.sheenColorTexture !== void 0) pending.push(parser.assignTexture(materialParams, "sheenColorMap", extension.sheenColorTexture, SRGBColorSpace$1)); - if (extension.sheenRoughnessTexture !== void 0) pending.push(parser.assignTexture(materialParams, "sheenRoughnessMap", extension.sheenRoughnessTexture)); - return Promise.all(pending); - } -}; -var GLTFMaterialsTransmissionExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION; - } - getMaterialType(materialIndex) { - const materialDef = this.parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; - return MeshPhysicalMaterial; - } - extendMaterialParams(materialIndex, materialParams) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return Promise.resolve(); - const pending = []; - const extension = materialDef.extensions[this.name]; - if (extension.transmissionFactor !== void 0) materialParams.transmission = extension.transmissionFactor; - if (extension.transmissionTexture !== void 0) pending.push(parser.assignTexture(materialParams, "transmissionMap", extension.transmissionTexture)); - return Promise.all(pending); - } -}; -var GLTFMaterialsVolumeExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_MATERIALS_VOLUME; - } - getMaterialType(materialIndex) { - const materialDef = this.parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; - return MeshPhysicalMaterial; - } - extendMaterialParams(materialIndex, materialParams) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return Promise.resolve(); - const pending = []; - const extension = materialDef.extensions[this.name]; - materialParams.thickness = extension.thicknessFactor !== void 0 ? extension.thicknessFactor : 0; - if (extension.thicknessTexture !== void 0) pending.push(parser.assignTexture(materialParams, "thicknessMap", extension.thicknessTexture)); - materialParams.attenuationDistance = extension.attenuationDistance || Infinity; - const colorArray = extension.attenuationColor || [ - 1, - 1, - 1 - ]; - materialParams.attenuationColor = new Color().setRGB(colorArray[0], colorArray[1], colorArray[2], LinearSRGBColorSpace$1); - return Promise.all(pending); - } -}; -var GLTFMaterialsIorExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_MATERIALS_IOR; - } - getMaterialType(materialIndex) { - const materialDef = this.parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; - return MeshPhysicalMaterial; - } - extendMaterialParams(materialIndex, materialParams) { - const materialDef = this.parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return Promise.resolve(); - const extension = materialDef.extensions[this.name]; - materialParams.ior = extension.ior !== void 0 ? extension.ior : 1.5; - return Promise.resolve(); - } -}; -var GLTFMaterialsSpecularExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_MATERIALS_SPECULAR; - } - getMaterialType(materialIndex) { - const materialDef = this.parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; - return MeshPhysicalMaterial; - } - extendMaterialParams(materialIndex, materialParams) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return Promise.resolve(); - const pending = []; - const extension = materialDef.extensions[this.name]; - materialParams.specularIntensity = extension.specularFactor !== void 0 ? extension.specularFactor : 1; - if (extension.specularTexture !== void 0) pending.push(parser.assignTexture(materialParams, "specularIntensityMap", extension.specularTexture)); - const colorArray = extension.specularColorFactor || [ - 1, - 1, - 1 - ]; - materialParams.specularColor = new Color().setRGB(colorArray[0], colorArray[1], colorArray[2], LinearSRGBColorSpace$1); - if (extension.specularColorTexture !== void 0) pending.push(parser.assignTexture(materialParams, "specularColorMap", extension.specularColorTexture, SRGBColorSpace$1)); - return Promise.all(pending); - } -}; -var GLTFMaterialsBumpExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.EXT_MATERIALS_BUMP; - } - getMaterialType(materialIndex) { - const materialDef = this.parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; - return MeshPhysicalMaterial; - } - extendMaterialParams(materialIndex, materialParams) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return Promise.resolve(); - const pending = []; - const extension = materialDef.extensions[this.name]; - materialParams.bumpScale = extension.bumpFactor !== void 0 ? extension.bumpFactor : 1; - if (extension.bumpTexture !== void 0) pending.push(parser.assignTexture(materialParams, "bumpMap", extension.bumpTexture)); - return Promise.all(pending); - } -}; -var GLTFMaterialsAnisotropyExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_MATERIALS_ANISOTROPY; - } - getMaterialType(materialIndex) { - const materialDef = this.parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return null; - return MeshPhysicalMaterial; - } - extendMaterialParams(materialIndex, materialParams) { - const parser = this.parser; - const materialDef = parser.json.materials[materialIndex]; - if (!materialDef.extensions || !materialDef.extensions[this.name]) return Promise.resolve(); - const pending = []; - const extension = materialDef.extensions[this.name]; - if (extension.anisotropyStrength !== void 0) materialParams.anisotropy = extension.anisotropyStrength; - if (extension.anisotropyRotation !== void 0) materialParams.anisotropyRotation = extension.anisotropyRotation; - if (extension.anisotropyTexture !== void 0) pending.push(parser.assignTexture(materialParams, "anisotropyMap", extension.anisotropyTexture)); - return Promise.all(pending); - } -}; -var GLTFTextureBasisUExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.KHR_TEXTURE_BASISU; - } - loadTexture(textureIndex) { - const parser = this.parser; - const json = parser.json; - const textureDef = json.textures[textureIndex]; - if (!textureDef.extensions || !textureDef.extensions[this.name]) return null; - const extension = textureDef.extensions[this.name]; - const loader = parser.options.ktx2Loader; - if (!loader) if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) throw new Error("THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures"); - else return null; - return parser.loadTextureImage(textureIndex, extension.source, loader); - } -}; -var GLTFTextureWebPExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.EXT_TEXTURE_WEBP; - this.isSupported = null; - } - loadTexture(textureIndex) { - const name = this.name; - const parser = this.parser; - const json = parser.json; - const textureDef = json.textures[textureIndex]; - if (!textureDef.extensions || !textureDef.extensions[name]) return null; - const extension = textureDef.extensions[name]; - const source = json.images[extension.source]; - let loader = parser.textureLoader; - if (source.uri) { - const handler = parser.options.manager.getHandler(source.uri); - if (handler !== null) loader = handler; - } - return this.detectSupport().then(function(isSupported) { - if (isSupported) return parser.loadTextureImage(textureIndex, extension.source, loader); - if (json.extensionsRequired && json.extensionsRequired.indexOf(name) >= 0) throw new Error("THREE.GLTFLoader: WebP required by asset but unsupported."); - return parser.loadTexture(textureIndex); - }); - } - detectSupport() { - if (!this.isSupported) this.isSupported = new Promise(function(resolve) { - const image = new Image(); - image.src = "data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA"; - image.onload = image.onerror = function() { - resolve(image.height === 1); - }; - }); - return this.isSupported; - } -}; -var GLTFTextureAVIFExtension = class { - constructor(parser) { - this.parser = parser; - this.name = EXTENSIONS.EXT_TEXTURE_AVIF; - this.isSupported = null; - } - loadTexture(textureIndex) { - const name = this.name; - const parser = this.parser; - const json = parser.json; - const textureDef = json.textures[textureIndex]; - if (!textureDef.extensions || !textureDef.extensions[name]) return null; - const extension = textureDef.extensions[name]; - const source = json.images[extension.source]; - let loader = parser.textureLoader; - if (source.uri) { - const handler = parser.options.manager.getHandler(source.uri); - if (handler !== null) loader = handler; - } - return this.detectSupport().then(function(isSupported) { - if (isSupported) return parser.loadTextureImage(textureIndex, extension.source, loader); - if (json.extensionsRequired && json.extensionsRequired.indexOf(name) >= 0) throw new Error("THREE.GLTFLoader: AVIF required by asset but unsupported."); - return parser.loadTexture(textureIndex); - }); - } - detectSupport() { - if (!this.isSupported) this.isSupported = new Promise(function(resolve) { - const image = new Image(); - image.src = "data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI="; - image.onload = image.onerror = function() { - resolve(image.height === 1); - }; - }); - return this.isSupported; - } -}; -var GLTFMeshoptCompression = class { - constructor(parser) { - this.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION; - this.parser = parser; - } - loadBufferView(index) { - const json = this.parser.json; - const bufferView = json.bufferViews[index]; - if (bufferView.extensions && bufferView.extensions[this.name]) { - const extensionDef = bufferView.extensions[this.name]; - const buffer = this.parser.getDependency("buffer", extensionDef.buffer); - const decoder = this.parser.options.meshoptDecoder; - if (!decoder || !decoder.supported) if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) throw new Error("THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files"); - else return null; - return buffer.then(function(res) { - const byteOffset = extensionDef.byteOffset || 0; - const byteLength = extensionDef.byteLength || 0; - const count = extensionDef.count; - const stride = extensionDef.byteStride; - const source = new Uint8Array(res, byteOffset, byteLength); - if (decoder.decodeGltfBufferAsync) return decoder.decodeGltfBufferAsync(count, stride, source, extensionDef.mode, extensionDef.filter).then(function(res2) { - return res2.buffer; - }); - else return decoder.ready.then(function() { - const result = new ArrayBuffer(count * stride); - decoder.decodeGltfBuffer(new Uint8Array(result), count, stride, source, extensionDef.mode, extensionDef.filter); - return result; - }); - }); - } else return null; - } -}; -var GLTFMeshGpuInstancing = class { - constructor(parser) { - this.name = EXTENSIONS.EXT_MESH_GPU_INSTANCING; - this.parser = parser; - } - createNodeMesh(nodeIndex) { - const json = this.parser.json; - const nodeDef = json.nodes[nodeIndex]; - if (!nodeDef.extensions || !nodeDef.extensions[this.name] || nodeDef.mesh === void 0) return null; - const meshDef = json.meshes[nodeDef.mesh]; - for (const primitive of meshDef.primitives) if (primitive.mode !== WEBGL_CONSTANTS.TRIANGLES && primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_STRIP && primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_FAN && primitive.mode !== void 0) return null; - const attributesDef = nodeDef.extensions[this.name].attributes; - const pending = []; - const attributes = {}; - for (const key in attributesDef) pending.push(this.parser.getDependency("accessor", attributesDef[key]).then((accessor) => { - attributes[key] = accessor; - return attributes[key]; - })); - if (pending.length < 1) return null; - pending.push(this.parser.createNodeMesh(nodeIndex)); - return Promise.all(pending).then((results) => { - const nodeObject = results.pop(); - const meshes = nodeObject.isGroup ? nodeObject.children : [nodeObject]; - const count = results[0].count; - const instancedMeshes = []; - for (const mesh of meshes) { - const m = new Matrix4(); - const p = new Vector3(); - const q = new Quaternion(); - const s = new Vector3(1, 1, 1); - const instancedMesh = new InstancedMesh(mesh.geometry, mesh.material, count); - for (let i = 0; i < count; i++) { - if (attributes.TRANSLATION) p.fromBufferAttribute(attributes.TRANSLATION, i); - if (attributes.ROTATION) q.fromBufferAttribute(attributes.ROTATION, i); - if (attributes.SCALE) s.fromBufferAttribute(attributes.SCALE, i); - instancedMesh.setMatrixAt(i, m.compose(p, q, s)); - } - for (const attributeName in attributes) if (attributeName === "_COLOR_0") { - const attr = attributes[attributeName]; - instancedMesh.instanceColor = new InstancedBufferAttribute(attr.array, attr.itemSize, attr.normalized); - } else if (attributeName !== "TRANSLATION" && attributeName !== "ROTATION" && attributeName !== "SCALE") mesh.geometry.setAttribute(attributeName, attributes[attributeName]); - Object3D.prototype.copy.call(instancedMesh, mesh); - this.parser.assignFinalMaterial(instancedMesh); - instancedMeshes.push(instancedMesh); - } - if (nodeObject.isGroup) { - nodeObject.clear(); - nodeObject.add(...instancedMeshes); - return nodeObject; - } - return instancedMeshes[0]; - }); - } -}; -var BINARY_EXTENSION_HEADER_MAGIC = "glTF"; -var BINARY_EXTENSION_HEADER_LENGTH = 12; -var BINARY_EXTENSION_CHUNK_TYPES = { - JSON: 1313821514, - BIN: 5130562 -}; -var GLTFBinaryExtension = class { - constructor(data) { - this.name = EXTENSIONS.KHR_BINARY_GLTF; - this.content = null; - this.body = null; - const headerView = new DataView(data, 0, BINARY_EXTENSION_HEADER_LENGTH); - this.header = { - magic: decodeText$1(new Uint8Array(data.slice(0, 4))), - version: headerView.getUint32(4, true), - length: headerView.getUint32(8, true) - }; - if (this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC) throw new Error("THREE.GLTFLoader: Unsupported glTF-Binary header."); - else if (this.header.version < 2) throw new Error("THREE.GLTFLoader: Legacy binary file detected."); - const chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH; - const chunkView = new DataView(data, BINARY_EXTENSION_HEADER_LENGTH); - let chunkIndex = 0; - while (chunkIndex < chunkContentsLength) { - const chunkLength = chunkView.getUint32(chunkIndex, true); - chunkIndex += 4; - const chunkType = chunkView.getUint32(chunkIndex, true); - chunkIndex += 4; - if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON) { - const contentArray = new Uint8Array(data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength); - this.content = decodeText$1(contentArray); - } else if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN) { - const byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex; - this.body = data.slice(byteOffset, byteOffset + chunkLength); - } - chunkIndex += chunkLength; - } - if (this.content === null) throw new Error("THREE.GLTFLoader: JSON content not found."); - } -}; -var GLTFDracoMeshCompressionExtension = class { - constructor(json, dracoLoader) { - if (!dracoLoader) throw new Error("THREE.GLTFLoader: No DRACOLoader instance provided."); - this.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION; - this.json = json; - this.dracoLoader = dracoLoader; - this.dracoLoader.preload(); - } - decodePrimitive(primitive, parser) { - const json = this.json; - const dracoLoader = this.dracoLoader; - const bufferViewIndex = primitive.extensions[this.name].bufferView; - const gltfAttributeMap = primitive.extensions[this.name].attributes; - const threeAttributeMap = {}; - const attributeNormalizedMap = {}; - const attributeTypeMap = {}; - for (const attributeName in gltfAttributeMap) { - const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase(); - threeAttributeMap[threeAttributeName] = gltfAttributeMap[attributeName]; - } - for (const attributeName in primitive.attributes) { - const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase(); - if (gltfAttributeMap[attributeName] !== void 0) { - const accessorDef = json.accessors[primitive.attributes[attributeName]]; - attributeTypeMap[threeAttributeName] = WEBGL_COMPONENT_TYPES[accessorDef.componentType].name; - attributeNormalizedMap[threeAttributeName] = accessorDef.normalized === true; - } - } - return parser.getDependency("bufferView", bufferViewIndex).then(function(bufferView) { - return new Promise(function(resolve, reject) { - dracoLoader.decodeDracoFile(bufferView, function(geometry) { - for (const attributeName in geometry.attributes) { - const attribute = geometry.attributes[attributeName]; - const normalized = attributeNormalizedMap[attributeName]; - if (normalized !== void 0) attribute.normalized = normalized; - } - resolve(geometry); - }, threeAttributeMap, attributeTypeMap, LinearSRGBColorSpace$1, reject); - }); - }); - } -}; -var GLTFTextureTransformExtension = class { - constructor() { - this.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM; - } - extendTexture(texture, transform) { - if ((transform.texCoord === void 0 || transform.texCoord === texture.channel) && transform.offset === void 0 && transform.rotation === void 0 && transform.scale === void 0) return texture; - texture = texture.clone(); - if (transform.texCoord !== void 0) texture.channel = transform.texCoord; - if (transform.offset !== void 0) texture.offset.fromArray(transform.offset); - if (transform.rotation !== void 0) texture.rotation = transform.rotation; - if (transform.scale !== void 0) texture.repeat.fromArray(transform.scale); - texture.needsUpdate = true; - return texture; - } -}; -var GLTFMeshQuantizationExtension = class { - constructor() { - this.name = EXTENSIONS.KHR_MESH_QUANTIZATION; - } -}; -var GLTFCubicSplineInterpolant = class extends Interpolant { - constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) { - super(parameterPositions, sampleValues, sampleSize, resultBuffer); - } - copySampleValue_(index) { - const result = this.resultBuffer, values = this.sampleValues, valueSize = this.valueSize, offset = index * valueSize * 3 + valueSize; - for (let i = 0; i !== valueSize; i++) result[i] = values[offset + i]; - return result; - } - interpolate_(i1, t0, t, t1) { - const result = this.resultBuffer; - const values = this.sampleValues; - const stride = this.valueSize; - const stride2 = stride * 2; - const stride3 = stride * 3; - const td = t1 - t0; - const p = (t - t0) / td; - const pp = p * p; - const ppp = pp * p; - const offset1 = i1 * stride3; - const offset0 = offset1 - stride3; - const s2 = -2 * ppp + 3 * pp; - const s3 = ppp - pp; - const s0 = 1 - s2; - const s1 = s3 - pp + p; - for (let i = 0; i !== stride; i++) { - const p0 = values[offset0 + i + stride]; - const m0 = values[offset0 + i + stride2] * td; - const p1 = values[offset1 + i + stride]; - const m1 = values[offset1 + i] * td; - result[i] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1; - } - return result; - } -}; -var _q = /* @__PURE__ */ new Quaternion(); -var GLTFCubicSplineQuaternionInterpolant = class extends GLTFCubicSplineInterpolant { - interpolate_(i1, t0, t, t1) { - const result = super.interpolate_(i1, t0, t, t1); - _q.fromArray(result).normalize().toArray(result); - return result; - } -}; -var WEBGL_CONSTANTS = { - FLOAT: 5126, - FLOAT_MAT3: 35675, - FLOAT_MAT4: 35676, - FLOAT_VEC2: 35664, - FLOAT_VEC3: 35665, - FLOAT_VEC4: 35666, - LINEAR: 9729, - REPEAT: 10497, - SAMPLER_2D: 35678, - POINTS: 0, - LINES: 1, - LINE_LOOP: 2, - LINE_STRIP: 3, - TRIANGLES: 4, - TRIANGLE_STRIP: 5, - TRIANGLE_FAN: 6, - UNSIGNED_BYTE: 5121, - UNSIGNED_SHORT: 5123 -}; -var WEBGL_COMPONENT_TYPES = { - 5120: Int8Array, - 5121: Uint8Array, - 5122: Int16Array, - 5123: Uint16Array, - 5125: Uint32Array, - 5126: Float32Array -}; -var WEBGL_FILTERS = { - 9728: NearestFilter, - 9729: LinearFilter, - 9984: NearestMipmapNearestFilter, - 9985: LinearMipmapNearestFilter, - 9986: NearestMipmapLinearFilter, - 9987: LinearMipmapLinearFilter -}; -var WEBGL_WRAPPINGS = { - 33071: ClampToEdgeWrapping, - 33648: MirroredRepeatWrapping, - 10497: RepeatWrapping -}; -var WEBGL_TYPE_SIZES = { - SCALAR: 1, - VEC2: 2, - VEC3: 3, - VEC4: 4, - MAT2: 4, - MAT3: 9, - MAT4: 16 -}; -var ATTRIBUTES = { - POSITION: "position", - NORMAL: "normal", - TANGENT: "tangent", - ...version >= 152 ? { - TEXCOORD_0: "uv", - TEXCOORD_1: "uv1", - TEXCOORD_2: "uv2", - TEXCOORD_3: "uv3" - } : { - TEXCOORD_0: "uv", - TEXCOORD_1: "uv2" - }, - COLOR_0: "color", - WEIGHTS_0: "skinWeight", - JOINTS_0: "skinIndex" -}; -var PATH_PROPERTIES = { - scale: "scale", - translation: "position", - rotation: "quaternion", - weights: "morphTargetInfluences" -}; -var INTERPOLATION = { - CUBICSPLINE: void 0, - LINEAR: InterpolateLinear, - STEP: InterpolateDiscrete -}; -var ALPHA_MODES = { - OPAQUE: "OPAQUE", - MASK: "MASK", - BLEND: "BLEND" -}; -function createDefaultMaterial(cache) { - if (cache["DefaultMaterial"] === void 0) cache["DefaultMaterial"] = new MeshStandardMaterial({ - color: 16777215, - emissive: 0, - metalness: 1, - roughness: 1, - transparent: false, - depthTest: true, - side: 0 - }); - return cache["DefaultMaterial"]; -} -function addUnknownExtensionsToUserData(knownExtensions, object, objectDef) { - for (const name in objectDef.extensions) if (knownExtensions[name] === void 0) { - object.userData.gltfExtensions = object.userData.gltfExtensions || {}; - object.userData.gltfExtensions[name] = objectDef.extensions[name]; - } -} -function assignExtrasToUserData(object, gltfDef) { - if (gltfDef.extras !== void 0) if (typeof gltfDef.extras === "object") Object.assign(object.userData, gltfDef.extras); - else console.warn("THREE.GLTFLoader: Ignoring primitive type .extras, " + gltfDef.extras); -} -function addMorphTargets(geometry, targets, parser) { - let hasMorphPosition = false; - let hasMorphNormal = false; - let hasMorphColor = false; - for (let i = 0, il = targets.length; i < il; i++) { - const target = targets[i]; - if (target.POSITION !== void 0) hasMorphPosition = true; - if (target.NORMAL !== void 0) hasMorphNormal = true; - if (target.COLOR_0 !== void 0) hasMorphColor = true; - if (hasMorphPosition && hasMorphNormal && hasMorphColor) break; - } - if (!hasMorphPosition && !hasMorphNormal && !hasMorphColor) return Promise.resolve(geometry); - const pendingPositionAccessors = []; - const pendingNormalAccessors = []; - const pendingColorAccessors = []; - for (let i = 0, il = targets.length; i < il; i++) { - const target = targets[i]; - if (hasMorphPosition) { - const pendingAccessor = target.POSITION !== void 0 ? parser.getDependency("accessor", target.POSITION) : geometry.attributes.position; - pendingPositionAccessors.push(pendingAccessor); - } - if (hasMorphNormal) { - const pendingAccessor = target.NORMAL !== void 0 ? parser.getDependency("accessor", target.NORMAL) : geometry.attributes.normal; - pendingNormalAccessors.push(pendingAccessor); - } - if (hasMorphColor) { - const pendingAccessor = target.COLOR_0 !== void 0 ? parser.getDependency("accessor", target.COLOR_0) : geometry.attributes.color; - pendingColorAccessors.push(pendingAccessor); - } - } - return Promise.all([ - Promise.all(pendingPositionAccessors), - Promise.all(pendingNormalAccessors), - Promise.all(pendingColorAccessors) - ]).then(function(accessors) { - const morphPositions = accessors[0]; - const morphNormals = accessors[1]; - const morphColors = accessors[2]; - if (hasMorphPosition) geometry.morphAttributes.position = morphPositions; - if (hasMorphNormal) geometry.morphAttributes.normal = morphNormals; - if (hasMorphColor) geometry.morphAttributes.color = morphColors; - geometry.morphTargetsRelative = true; - return geometry; - }); -} -function updateMorphTargets(mesh, meshDef) { - mesh.updateMorphTargets(); - if (meshDef.weights !== void 0) for (let i = 0, il = meshDef.weights.length; i < il; i++) mesh.morphTargetInfluences[i] = meshDef.weights[i]; - if (meshDef.extras && Array.isArray(meshDef.extras.targetNames)) { - const targetNames = meshDef.extras.targetNames; - if (mesh.morphTargetInfluences.length === targetNames.length) { - mesh.morphTargetDictionary = {}; - for (let i = 0, il = targetNames.length; i < il; i++) mesh.morphTargetDictionary[targetNames[i]] = i; - } else console.warn("THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names."); - } -} -function createPrimitiveKey(primitiveDef) { - let geometryKey; - const dracoExtension = primitiveDef.extensions && primitiveDef.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION]; - if (dracoExtension) geometryKey = "draco:" + dracoExtension.bufferView + ":" + dracoExtension.indices + ":" + createAttributesKey(dracoExtension.attributes); - else geometryKey = primitiveDef.indices + ":" + createAttributesKey(primitiveDef.attributes) + ":" + primitiveDef.mode; - if (primitiveDef.targets !== void 0) for (let i = 0, il = primitiveDef.targets.length; i < il; i++) geometryKey += ":" + createAttributesKey(primitiveDef.targets[i]); - return geometryKey; -} -function createAttributesKey(attributes) { - let attributesKey = ""; - const keys = Object.keys(attributes).sort(); - for (let i = 0, il = keys.length; i < il; i++) attributesKey += keys[i] + ":" + attributes[keys[i]] + ";"; - return attributesKey; -} -function getNormalizedComponentScale(constructor) { - switch (constructor) { - case Int8Array: return 1 / 127; - case Uint8Array: return 1 / 255; - case Int16Array: return 1 / 32767; - case Uint16Array: return 1 / 65535; - default: throw new Error("THREE.GLTFLoader: Unsupported normalized accessor component type."); - } -} -function getImageURIMimeType(uri) { - if (uri.search(/\.jpe?g($|\?)/i) > 0 || uri.search(/^data\:image\/jpeg/) === 0) return "image/jpeg"; - if (uri.search(/\.webp($|\?)/i) > 0 || uri.search(/^data\:image\/webp/) === 0) return "image/webp"; - return "image/png"; -} -var _identityMatrix = /* @__PURE__ */ new Matrix4(); -var GLTFParser = class { - constructor(json = {}, options = {}) { - this.json = json; - this.extensions = {}; - this.plugins = {}; - this.options = options; - this.cache = new GLTFRegistry(); - this.associations = /* @__PURE__ */ new Map(); - this.primitiveCache = {}; - this.nodeCache = {}; - this.meshCache = { - refs: {}, - uses: {} - }; - this.cameraCache = { - refs: {}, - uses: {} - }; - this.lightCache = { - refs: {}, - uses: {} - }; - this.sourceCache = {}; - this.textureCache = {}; - this.nodeNamesUsed = {}; - let isSafari = false; - let isFirefox = false; - let firefoxVersion = -1; - if (typeof navigator !== "undefined" && typeof navigator.userAgent !== "undefined") { - isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent) === true; - isFirefox = navigator.userAgent.indexOf("Firefox") > -1; - firefoxVersion = isFirefox ? navigator.userAgent.match(/Firefox\/([0-9]+)\./)[1] : -1; - } - if (typeof createImageBitmap === "undefined" || isSafari || isFirefox && firefoxVersion < 98) this.textureLoader = new TextureLoader(this.options.manager); - else this.textureLoader = new ImageBitmapLoader(this.options.manager); - this.textureLoader.setCrossOrigin(this.options.crossOrigin); - this.textureLoader.setRequestHeader(this.options.requestHeader); - this.fileLoader = new FileLoader(this.options.manager); - this.fileLoader.setResponseType("arraybuffer"); - if (this.options.crossOrigin === "use-credentials") this.fileLoader.setWithCredentials(true); - } - setExtensions(extensions) { - this.extensions = extensions; - } - setPlugins(plugins) { - this.plugins = plugins; - } - parse(onLoad, onError) { - const parser = this; - const json = this.json; - const extensions = this.extensions; - this.cache.removeAll(); - this.nodeCache = {}; - this._invokeAll(function(ext) { - return ext._markDefs && ext._markDefs(); - }); - Promise.all(this._invokeAll(function(ext) { - return ext.beforeRoot && ext.beforeRoot(); - })).then(function() { - return Promise.all([ - parser.getDependencies("scene"), - parser.getDependencies("animation"), - parser.getDependencies("camera") - ]); - }).then(function(dependencies) { - const result = { - scene: dependencies[0][json.scene || 0], - scenes: dependencies[0], - animations: dependencies[1], - cameras: dependencies[2], - asset: json.asset, - parser, - userData: {} - }; - addUnknownExtensionsToUserData(extensions, result, json); - assignExtrasToUserData(result, json); - return Promise.all(parser._invokeAll(function(ext) { - return ext.afterRoot && ext.afterRoot(result); - })).then(function() { - for (const scene of result.scenes) scene.updateMatrixWorld(); - onLoad(result); - }); - }).catch(onError); - } - /** - * Marks the special nodes/meshes in json for efficient parse. - */ - _markDefs() { - const nodeDefs = this.json.nodes || []; - const skinDefs = this.json.skins || []; - const meshDefs = this.json.meshes || []; - for (let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex++) { - const joints = skinDefs[skinIndex].joints; - for (let i = 0, il = joints.length; i < il; i++) nodeDefs[joints[i]].isBone = true; - } - for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) { - const nodeDef = nodeDefs[nodeIndex]; - if (nodeDef.mesh !== void 0) { - this._addNodeRef(this.meshCache, nodeDef.mesh); - if (nodeDef.skin !== void 0) meshDefs[nodeDef.mesh].isSkinnedMesh = true; - } - if (nodeDef.camera !== void 0) this._addNodeRef(this.cameraCache, nodeDef.camera); - } - } - /** - * Counts references to shared node / Object3D resources. These resources - * can be reused, or "instantiated", at multiple nodes in the scene - * hierarchy. Mesh, Camera, and Light instances are instantiated and must - * be marked. Non-scenegraph resources (like Materials, Geometries, and - * Textures) can be reused directly and are not marked here. - * - * Example: CesiumMilkTruck sample model reuses "Wheel" meshes. - */ - _addNodeRef(cache, index) { - if (index === void 0) return; - if (cache.refs[index] === void 0) cache.refs[index] = cache.uses[index] = 0; - cache.refs[index]++; - } - /** Returns a reference to a shared resource, cloning it if necessary. */ - _getNodeRef(cache, index, object) { - if (cache.refs[index] <= 1) return object; - const ref = object.clone(); - const updateMappings = (original, clone) => { - const mappings = this.associations.get(original); - if (mappings != null) this.associations.set(clone, mappings); - for (const [i, child] of original.children.entries()) updateMappings(child, clone.children[i]); - }; - updateMappings(object, ref); - ref.name += "_instance_" + cache.uses[index]++; - return ref; - } - _invokeOne(func) { - const extensions = Object.values(this.plugins); - extensions.push(this); - for (let i = 0; i < extensions.length; i++) { - const result = func(extensions[i]); - if (result) return result; - } - return null; - } - _invokeAll(func) { - const extensions = Object.values(this.plugins); - extensions.unshift(this); - const pending = []; - for (let i = 0; i < extensions.length; i++) { - const result = func(extensions[i]); - if (result) pending.push(result); - } - return pending; - } - /** - * Requests the specified dependency asynchronously, with caching. - * @param {string} type - * @param {number} index - * @return {Promise<Object3D|Material|THREE.Texture|AnimationClip|ArrayBuffer|Object>} - */ - getDependency(type, index) { - const cacheKey = type + ":" + index; - let dependency = this.cache.get(cacheKey); - if (!dependency) { - switch (type) { - case "scene": - dependency = this.loadScene(index); - break; - case "node": - dependency = this._invokeOne(function(ext) { - return ext.loadNode && ext.loadNode(index); - }); - break; - case "mesh": - dependency = this._invokeOne(function(ext) { - return ext.loadMesh && ext.loadMesh(index); - }); - break; - case "accessor": - dependency = this.loadAccessor(index); - break; - case "bufferView": - dependency = this._invokeOne(function(ext) { - return ext.loadBufferView && ext.loadBufferView(index); - }); - break; - case "buffer": - dependency = this.loadBuffer(index); - break; - case "material": - dependency = this._invokeOne(function(ext) { - return ext.loadMaterial && ext.loadMaterial(index); - }); - break; - case "texture": - dependency = this._invokeOne(function(ext) { - return ext.loadTexture && ext.loadTexture(index); - }); - break; - case "skin": - dependency = this.loadSkin(index); - break; - case "animation": - dependency = this._invokeOne(function(ext) { - return ext.loadAnimation && ext.loadAnimation(index); - }); - break; - case "camera": - dependency = this.loadCamera(index); - break; - default: - dependency = this._invokeOne(function(ext) { - return ext != this && ext.getDependency && ext.getDependency(type, index); - }); - if (!dependency) throw new Error("Unknown type: " + type); - break; - } - this.cache.add(cacheKey, dependency); - } - return dependency; - } - /** - * Requests all dependencies of the specified type asynchronously, with caching. - * @param {string} type - * @return {Promise<Array<Object>>} - */ - getDependencies(type) { - let dependencies = this.cache.get(type); - if (!dependencies) { - const parser = this; - const defs = this.json[type + (type === "mesh" ? "es" : "s")] || []; - dependencies = Promise.all(defs.map(function(def, index) { - return parser.getDependency(type, index); - })); - this.cache.add(type, dependencies); - } - return dependencies; - } - /** - * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views - * @param {number} bufferIndex - * @return {Promise<ArrayBuffer>} - */ - loadBuffer(bufferIndex) { - const bufferDef = this.json.buffers[bufferIndex]; - const loader = this.fileLoader; - if (bufferDef.type && bufferDef.type !== "arraybuffer") throw new Error("THREE.GLTFLoader: " + bufferDef.type + " buffer type is not supported."); - if (bufferDef.uri === void 0 && bufferIndex === 0) return Promise.resolve(this.extensions[EXTENSIONS.KHR_BINARY_GLTF].body); - const options = this.options; - return new Promise(function(resolve, reject) { - loader.load(LoaderUtils.resolveURL(bufferDef.uri, options.path), resolve, void 0, function() { - reject(/* @__PURE__ */ new Error("THREE.GLTFLoader: Failed to load buffer \"" + bufferDef.uri + "\".")); - }); - }); - } - /** - * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views - * @param {number} bufferViewIndex - * @return {Promise<ArrayBuffer>} - */ - loadBufferView(bufferViewIndex) { - const bufferViewDef = this.json.bufferViews[bufferViewIndex]; - return this.getDependency("buffer", bufferViewDef.buffer).then(function(buffer) { - const byteLength = bufferViewDef.byteLength || 0; - const byteOffset = bufferViewDef.byteOffset || 0; - return buffer.slice(byteOffset, byteOffset + byteLength); - }); - } - /** - * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors - * @param {number} accessorIndex - * @return {Promise<BufferAttribute|InterleavedBufferAttribute>} - */ - loadAccessor(accessorIndex) { - const parser = this; - const json = this.json; - const accessorDef = this.json.accessors[accessorIndex]; - if (accessorDef.bufferView === void 0 && accessorDef.sparse === void 0) { - const itemSize = WEBGL_TYPE_SIZES[accessorDef.type]; - const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType]; - const normalized = accessorDef.normalized === true; - const array = new TypedArray(accessorDef.count * itemSize); - return Promise.resolve(new BufferAttribute(array, itemSize, normalized)); - } - const pendingBufferViews = []; - if (accessorDef.bufferView !== void 0) pendingBufferViews.push(this.getDependency("bufferView", accessorDef.bufferView)); - else pendingBufferViews.push(null); - if (accessorDef.sparse !== void 0) { - pendingBufferViews.push(this.getDependency("bufferView", accessorDef.sparse.indices.bufferView)); - pendingBufferViews.push(this.getDependency("bufferView", accessorDef.sparse.values.bufferView)); - } - return Promise.all(pendingBufferViews).then(function(bufferViews) { - const bufferView = bufferViews[0]; - const itemSize = WEBGL_TYPE_SIZES[accessorDef.type]; - const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType]; - const elementBytes = TypedArray.BYTES_PER_ELEMENT; - const itemBytes = elementBytes * itemSize; - const byteOffset = accessorDef.byteOffset || 0; - const byteStride = accessorDef.bufferView !== void 0 ? json.bufferViews[accessorDef.bufferView].byteStride : void 0; - const normalized = accessorDef.normalized === true; - let array, bufferAttribute; - if (byteStride && byteStride !== itemBytes) { - const ibSlice = Math.floor(byteOffset / byteStride); - const ibCacheKey = "InterleavedBuffer:" + accessorDef.bufferView + ":" + accessorDef.componentType + ":" + ibSlice + ":" + accessorDef.count; - let ib = parser.cache.get(ibCacheKey); - if (!ib) { - array = new TypedArray(bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes); - ib = new InterleavedBuffer(array, byteStride / elementBytes); - parser.cache.add(ibCacheKey, ib); - } - bufferAttribute = new InterleavedBufferAttribute(ib, itemSize, byteOffset % byteStride / elementBytes, normalized); - } else { - if (bufferView === null) array = new TypedArray(accessorDef.count * itemSize); - else array = new TypedArray(bufferView, byteOffset, accessorDef.count * itemSize); - bufferAttribute = new BufferAttribute(array, itemSize, normalized); - } - if (accessorDef.sparse !== void 0) { - const itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR; - const TypedArrayIndices = WEBGL_COMPONENT_TYPES[accessorDef.sparse.indices.componentType]; - const byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0; - const byteOffsetValues = accessorDef.sparse.values.byteOffset || 0; - const sparseIndices = new TypedArrayIndices(bufferViews[1], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices); - const sparseValues = new TypedArray(bufferViews[2], byteOffsetValues, accessorDef.sparse.count * itemSize); - if (bufferView !== null) bufferAttribute = new BufferAttribute(bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized); - for (let i = 0, il = sparseIndices.length; i < il; i++) { - const index = sparseIndices[i]; - bufferAttribute.setX(index, sparseValues[i * itemSize]); - if (itemSize >= 2) bufferAttribute.setY(index, sparseValues[i * itemSize + 1]); - if (itemSize >= 3) bufferAttribute.setZ(index, sparseValues[i * itemSize + 2]); - if (itemSize >= 4) bufferAttribute.setW(index, sparseValues[i * itemSize + 3]); - if (itemSize >= 5) throw new Error("THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute."); - } - } - return bufferAttribute; - }); - } - /** - * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures - * @param {number} textureIndex - * @return {Promise<THREE.Texture|null>} - */ - loadTexture(textureIndex) { - const json = this.json; - const options = this.options; - const sourceIndex = json.textures[textureIndex].source; - const sourceDef = json.images[sourceIndex]; - let loader = this.textureLoader; - if (sourceDef.uri) { - const handler = options.manager.getHandler(sourceDef.uri); - if (handler !== null) loader = handler; - } - return this.loadTextureImage(textureIndex, sourceIndex, loader); - } - loadTextureImage(textureIndex, sourceIndex, loader) { - const parser = this; - const json = this.json; - const textureDef = json.textures[textureIndex]; - const sourceDef = json.images[sourceIndex]; - const cacheKey = (sourceDef.uri || sourceDef.bufferView) + ":" + textureDef.sampler; - if (this.textureCache[cacheKey]) return this.textureCache[cacheKey]; - const promise = this.loadImageSource(sourceIndex, loader).then(function(texture) { - texture.flipY = false; - texture.name = textureDef.name || sourceDef.name || ""; - if (texture.name === "" && typeof sourceDef.uri === "string" && sourceDef.uri.startsWith("data:image/") === false) texture.name = sourceDef.uri; - const sampler = (json.samplers || {})[textureDef.sampler] || {}; - texture.magFilter = WEBGL_FILTERS[sampler.magFilter] || 1006; - texture.minFilter = WEBGL_FILTERS[sampler.minFilter] || 1008; - texture.wrapS = WEBGL_WRAPPINGS[sampler.wrapS] || 1e3; - texture.wrapT = WEBGL_WRAPPINGS[sampler.wrapT] || 1e3; - parser.associations.set(texture, { textures: textureIndex }); - return texture; - }).catch(function() { - return null; - }); - this.textureCache[cacheKey] = promise; - return promise; - } - loadImageSource(sourceIndex, loader) { - const parser = this; - const json = this.json; - const options = this.options; - if (this.sourceCache[sourceIndex] !== void 0) return this.sourceCache[sourceIndex].then((texture) => texture.clone()); - const sourceDef = json.images[sourceIndex]; - const URL = self.URL || self.webkitURL; - let sourceURI = sourceDef.uri || ""; - let isObjectURL = false; - if (sourceDef.bufferView !== void 0) sourceURI = parser.getDependency("bufferView", sourceDef.bufferView).then(function(bufferView) { - isObjectURL = true; - const blob = new Blob([bufferView], { type: sourceDef.mimeType }); - sourceURI = URL.createObjectURL(blob); - return sourceURI; - }); - else if (sourceDef.uri === void 0) throw new Error("THREE.GLTFLoader: Image " + sourceIndex + " is missing URI and bufferView"); - const promise = Promise.resolve(sourceURI).then(function(sourceURI2) { - return new Promise(function(resolve, reject) { - let onLoad = resolve; - if (loader.isImageBitmapLoader === true) onLoad = function(imageBitmap) { - const texture = new Texture(imageBitmap); - texture.needsUpdate = true; - resolve(texture); - }; - loader.load(LoaderUtils.resolveURL(sourceURI2, options.path), onLoad, void 0, reject); - }); - }).then(function(texture) { - if (isObjectURL === true) URL.revokeObjectURL(sourceURI); - assignExtrasToUserData(texture, sourceDef); - texture.userData.mimeType = sourceDef.mimeType || getImageURIMimeType(sourceDef.uri); - return texture; - }).catch(function(error) { - console.error("THREE.GLTFLoader: Couldn't load texture", sourceURI); - throw error; - }); - this.sourceCache[sourceIndex] = promise; - return promise; - } - /** - * Asynchronously assigns a texture to the given material parameters. - * @param {Object} materialParams - * @param {string} mapName - * @param {Object} mapDef - * @return {Promise<Texture>} - */ - assignTexture(materialParams, mapName, mapDef, colorSpace) { - const parser = this; - return this.getDependency("texture", mapDef.index).then(function(texture) { - if (!texture) return null; - if (mapDef.texCoord !== void 0 && mapDef.texCoord > 0) { - texture = texture.clone(); - texture.channel = mapDef.texCoord; - } - if (parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM]) { - const transform = mapDef.extensions !== void 0 ? mapDef.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM] : void 0; - if (transform) { - const gltfReference = parser.associations.get(texture); - texture = parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM].extendTexture(texture, transform); - parser.associations.set(texture, gltfReference); - } - } - if (colorSpace !== void 0) { - if (typeof colorSpace === "number") colorSpace = colorSpace === sRGBEncoding$1 ? SRGBColorSpace$1 : LinearSRGBColorSpace$1; - if ("colorSpace" in texture) texture.colorSpace = colorSpace; - else texture.encoding = colorSpace === SRGBColorSpace$1 ? sRGBEncoding$1 : LinearEncoding$1; - } - materialParams[mapName] = texture; - return texture; - }); - } - /** - * Assigns final material to a Mesh, Line, or Points instance. The instance - * already has a material (generated from the glTF material options alone) - * but reuse of the same glTF material may require multiple threejs materials - * to accommodate different primitive types, defines, etc. New materials will - * be created if necessary, and reused from a cache. - * @param {Object3D} mesh Mesh, Line, or Points instance. - */ - assignFinalMaterial(mesh) { - const geometry = mesh.geometry; - let material = mesh.material; - const useDerivativeTangents = geometry.attributes.tangent === void 0; - const useVertexColors = geometry.attributes.color !== void 0; - const useFlatShading = geometry.attributes.normal === void 0; - if (mesh.isPoints) { - const cacheKey = "PointsMaterial:" + material.uuid; - let pointsMaterial = this.cache.get(cacheKey); - if (!pointsMaterial) { - pointsMaterial = new PointsMaterial(); - Material.prototype.copy.call(pointsMaterial, material); - pointsMaterial.color.copy(material.color); - pointsMaterial.map = material.map; - pointsMaterial.sizeAttenuation = false; - this.cache.add(cacheKey, pointsMaterial); - } - material = pointsMaterial; - } else if (mesh.isLine) { - const cacheKey = "LineBasicMaterial:" + material.uuid; - let lineMaterial = this.cache.get(cacheKey); - if (!lineMaterial) { - lineMaterial = new LineBasicMaterial(); - Material.prototype.copy.call(lineMaterial, material); - lineMaterial.color.copy(material.color); - lineMaterial.map = material.map; - this.cache.add(cacheKey, lineMaterial); - } - material = lineMaterial; - } - if (useDerivativeTangents || useVertexColors || useFlatShading) { - let cacheKey = "ClonedMaterial:" + material.uuid + ":"; - if (useDerivativeTangents) cacheKey += "derivative-tangents:"; - if (useVertexColors) cacheKey += "vertex-colors:"; - if (useFlatShading) cacheKey += "flat-shading:"; - let cachedMaterial = this.cache.get(cacheKey); - if (!cachedMaterial) { - cachedMaterial = material.clone(); - if (useVertexColors) cachedMaterial.vertexColors = true; - if (useFlatShading) cachedMaterial.flatShading = true; - if (useDerivativeTangents) { - if (cachedMaterial.normalScale) cachedMaterial.normalScale.y *= -1; - if (cachedMaterial.clearcoatNormalScale) cachedMaterial.clearcoatNormalScale.y *= -1; - } - this.cache.add(cacheKey, cachedMaterial); - this.associations.set(cachedMaterial, this.associations.get(material)); - } - material = cachedMaterial; - } - mesh.material = material; - } - getMaterialType() { - return MeshStandardMaterial; - } - /** - * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials - * @param {number} materialIndex - * @return {Promise<Material>} - */ - loadMaterial(materialIndex) { - const parser = this; - const json = this.json; - const extensions = this.extensions; - const materialDef = json.materials[materialIndex]; - let materialType; - const materialParams = {}; - const materialExtensions = materialDef.extensions || {}; - const pending = []; - if (materialExtensions[EXTENSIONS.KHR_MATERIALS_UNLIT]) { - const kmuExtension = extensions[EXTENSIONS.KHR_MATERIALS_UNLIT]; - materialType = kmuExtension.getMaterialType(); - pending.push(kmuExtension.extendParams(materialParams, materialDef, parser)); - } else { - const metallicRoughness = materialDef.pbrMetallicRoughness || {}; - materialParams.color = new Color(1, 1, 1); - materialParams.opacity = 1; - if (Array.isArray(metallicRoughness.baseColorFactor)) { - const array = metallicRoughness.baseColorFactor; - materialParams.color.setRGB(array[0], array[1], array[2], LinearSRGBColorSpace$1); - materialParams.opacity = array[3]; - } - if (metallicRoughness.baseColorTexture !== void 0) pending.push(parser.assignTexture(materialParams, "map", metallicRoughness.baseColorTexture, SRGBColorSpace$1)); - materialParams.metalness = metallicRoughness.metallicFactor !== void 0 ? metallicRoughness.metallicFactor : 1; - materialParams.roughness = metallicRoughness.roughnessFactor !== void 0 ? metallicRoughness.roughnessFactor : 1; - if (metallicRoughness.metallicRoughnessTexture !== void 0) { - pending.push(parser.assignTexture(materialParams, "metalnessMap", metallicRoughness.metallicRoughnessTexture)); - pending.push(parser.assignTexture(materialParams, "roughnessMap", metallicRoughness.metallicRoughnessTexture)); - } - materialType = this._invokeOne(function(ext) { - return ext.getMaterialType && ext.getMaterialType(materialIndex); - }); - pending.push(Promise.all(this._invokeAll(function(ext) { - return ext.extendMaterialParams && ext.extendMaterialParams(materialIndex, materialParams); - }))); - } - if (materialDef.doubleSided === true) materialParams.side = 2; - const alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE; - if (alphaMode === ALPHA_MODES.BLEND) { - materialParams.transparent = true; - materialParams.depthWrite = false; - } else { - materialParams.transparent = false; - if (alphaMode === ALPHA_MODES.MASK) materialParams.alphaTest = materialDef.alphaCutoff !== void 0 ? materialDef.alphaCutoff : .5; - } - if (materialDef.normalTexture !== void 0 && materialType !== MeshBasicMaterial) { - pending.push(parser.assignTexture(materialParams, "normalMap", materialDef.normalTexture)); - materialParams.normalScale = new Vector2(1, 1); - if (materialDef.normalTexture.scale !== void 0) { - const scale = materialDef.normalTexture.scale; - materialParams.normalScale.set(scale, scale); - } - } - if (materialDef.occlusionTexture !== void 0 && materialType !== MeshBasicMaterial) { - pending.push(parser.assignTexture(materialParams, "aoMap", materialDef.occlusionTexture)); - if (materialDef.occlusionTexture.strength !== void 0) materialParams.aoMapIntensity = materialDef.occlusionTexture.strength; - } - if (materialDef.emissiveFactor !== void 0 && materialType !== MeshBasicMaterial) { - const emissiveFactor = materialDef.emissiveFactor; - materialParams.emissive = new Color().setRGB(emissiveFactor[0], emissiveFactor[1], emissiveFactor[2], LinearSRGBColorSpace$1); - } - if (materialDef.emissiveTexture !== void 0 && materialType !== MeshBasicMaterial) pending.push(parser.assignTexture(materialParams, "emissiveMap", materialDef.emissiveTexture, SRGBColorSpace$1)); - return Promise.all(pending).then(function() { - const material = new materialType(materialParams); - if (materialDef.name) material.name = materialDef.name; - assignExtrasToUserData(material, materialDef); - parser.associations.set(material, { materials: materialIndex }); - if (materialDef.extensions) addUnknownExtensionsToUserData(extensions, material, materialDef); - return material; - }); - } - /** When Object3D instances are targeted by animation, they need unique names. */ - createUniqueName(originalName) { - const sanitizedName = PropertyBinding.sanitizeNodeName(originalName || ""); - if (sanitizedName in this.nodeNamesUsed) return sanitizedName + "_" + ++this.nodeNamesUsed[sanitizedName]; - else { - this.nodeNamesUsed[sanitizedName] = 0; - return sanitizedName; - } - } - /** - * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry - * - * Creates BufferGeometries from primitives. - * - * @param {Array<GLTF.Primitive>} primitives - * @return {Promise<Array<BufferGeometry>>} - */ - loadGeometries(primitives) { - const parser = this; - const extensions = this.extensions; - const cache = this.primitiveCache; - function createDracoPrimitive(primitive) { - return extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(primitive, parser).then(function(geometry) { - return addPrimitiveAttributes(geometry, primitive, parser); - }); - } - const pending = []; - for (let i = 0, il = primitives.length; i < il; i++) { - const primitive = primitives[i]; - const cacheKey = createPrimitiveKey(primitive); - const cached = cache[cacheKey]; - if (cached) pending.push(cached.promise); - else { - let geometryPromise; - if (primitive.extensions && primitive.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION]) geometryPromise = createDracoPrimitive(primitive); - else geometryPromise = addPrimitiveAttributes(new BufferGeometry(), primitive, parser); - cache[cacheKey] = { - primitive, - promise: geometryPromise - }; - pending.push(geometryPromise); - } - } - return Promise.all(pending); - } - /** - * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes - * @param {number} meshIndex - * @return {Promise<Group|Mesh|SkinnedMesh>} - */ - loadMesh(meshIndex) { - const parser = this; - const json = this.json; - const extensions = this.extensions; - const meshDef = json.meshes[meshIndex]; - const primitives = meshDef.primitives; - const pending = []; - for (let i = 0, il = primitives.length; i < il; i++) { - const material = primitives[i].material === void 0 ? createDefaultMaterial(this.cache) : this.getDependency("material", primitives[i].material); - pending.push(material); - } - pending.push(parser.loadGeometries(primitives)); - return Promise.all(pending).then(function(results) { - const materials = results.slice(0, results.length - 1); - const geometries = results[results.length - 1]; - const meshes = []; - for (let i = 0, il = geometries.length; i < il; i++) { - const geometry = geometries[i]; - const primitive = primitives[i]; - let mesh; - const material = materials[i]; - if (primitive.mode === WEBGL_CONSTANTS.TRIANGLES || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN || primitive.mode === void 0) { - mesh = meshDef.isSkinnedMesh === true ? new SkinnedMesh(geometry, material) : new Mesh(geometry, material); - if (mesh.isSkinnedMesh === true) mesh.normalizeSkinWeights(); - if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP) mesh.geometry = toTrianglesDrawMode(mesh.geometry, 1); - else if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN) mesh.geometry = toTrianglesDrawMode(mesh.geometry, 2); - } else if (primitive.mode === WEBGL_CONSTANTS.LINES) mesh = new LineSegments(geometry, material); - else if (primitive.mode === WEBGL_CONSTANTS.LINE_STRIP) mesh = new Line(geometry, material); - else if (primitive.mode === WEBGL_CONSTANTS.LINE_LOOP) mesh = new LineLoop(geometry, material); - else if (primitive.mode === WEBGL_CONSTANTS.POINTS) mesh = new Points(geometry, material); - else throw new Error("THREE.GLTFLoader: Primitive mode unsupported: " + primitive.mode); - if (Object.keys(mesh.geometry.morphAttributes).length > 0) updateMorphTargets(mesh, meshDef); - mesh.name = parser.createUniqueName(meshDef.name || "mesh_" + meshIndex); - assignExtrasToUserData(mesh, meshDef); - if (primitive.extensions) addUnknownExtensionsToUserData(extensions, mesh, primitive); - parser.assignFinalMaterial(mesh); - meshes.push(mesh); - } - for (let i = 0, il = meshes.length; i < il; i++) parser.associations.set(meshes[i], { - meshes: meshIndex, - primitives: i - }); - if (meshes.length === 1) { - if (meshDef.extensions) addUnknownExtensionsToUserData(extensions, meshes[0], meshDef); - return meshes[0]; - } - const group = new Group(); - if (meshDef.extensions) addUnknownExtensionsToUserData(extensions, group, meshDef); - parser.associations.set(group, { meshes: meshIndex }); - for (let i = 0, il = meshes.length; i < il; i++) group.add(meshes[i]); - return group; - }); - } - /** - * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras - * @param {number} cameraIndex - * @return {Promise<THREE.Camera>} - */ - loadCamera(cameraIndex) { - let camera; - const cameraDef = this.json.cameras[cameraIndex]; - const params = cameraDef[cameraDef.type]; - if (!params) { - console.warn("THREE.GLTFLoader: Missing camera parameters."); - return; - } - if (cameraDef.type === "perspective") camera = new PerspectiveCamera(MathUtils.radToDeg(params.yfov), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6); - else if (cameraDef.type === "orthographic") camera = new OrthographicCamera(-params.xmag, params.xmag, params.ymag, -params.ymag, params.znear, params.zfar); - if (cameraDef.name) camera.name = this.createUniqueName(cameraDef.name); - assignExtrasToUserData(camera, cameraDef); - return Promise.resolve(camera); - } - /** - * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins - * @param {number} skinIndex - * @return {Promise<Skeleton>} - */ - loadSkin(skinIndex) { - const skinDef = this.json.skins[skinIndex]; - const pending = []; - for (let i = 0, il = skinDef.joints.length; i < il; i++) pending.push(this._loadNodeShallow(skinDef.joints[i])); - if (skinDef.inverseBindMatrices !== void 0) pending.push(this.getDependency("accessor", skinDef.inverseBindMatrices)); - else pending.push(null); - return Promise.all(pending).then(function(results) { - const inverseBindMatrices = results.pop(); - const jointNodes = results; - const bones = []; - const boneInverses = []; - for (let i = 0, il = jointNodes.length; i < il; i++) { - const jointNode = jointNodes[i]; - if (jointNode) { - bones.push(jointNode); - const mat = new Matrix4(); - if (inverseBindMatrices !== null) mat.fromArray(inverseBindMatrices.array, i * 16); - boneInverses.push(mat); - } else console.warn("THREE.GLTFLoader: Joint \"%s\" could not be found.", skinDef.joints[i]); - } - return new Skeleton(bones, boneInverses); - }); - } - /** - * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations - * @param {number} animationIndex - * @return {Promise<AnimationClip>} - */ - loadAnimation(animationIndex) { - const json = this.json; - const parser = this; - const animationDef = json.animations[animationIndex]; - const animationName = animationDef.name ? animationDef.name : "animation_" + animationIndex; - const pendingNodes = []; - const pendingInputAccessors = []; - const pendingOutputAccessors = []; - const pendingSamplers = []; - const pendingTargets = []; - for (let i = 0, il = animationDef.channels.length; i < il; i++) { - const channel = animationDef.channels[i]; - const sampler = animationDef.samplers[channel.sampler]; - const target = channel.target; - const name = target.node; - const input = animationDef.parameters !== void 0 ? animationDef.parameters[sampler.input] : sampler.input; - const output = animationDef.parameters !== void 0 ? animationDef.parameters[sampler.output] : sampler.output; - if (target.node === void 0) continue; - pendingNodes.push(this.getDependency("node", name)); - pendingInputAccessors.push(this.getDependency("accessor", input)); - pendingOutputAccessors.push(this.getDependency("accessor", output)); - pendingSamplers.push(sampler); - pendingTargets.push(target); - } - return Promise.all([ - Promise.all(pendingNodes), - Promise.all(pendingInputAccessors), - Promise.all(pendingOutputAccessors), - Promise.all(pendingSamplers), - Promise.all(pendingTargets) - ]).then(function(dependencies) { - const nodes = dependencies[0]; - const inputAccessors = dependencies[1]; - const outputAccessors = dependencies[2]; - const samplers = dependencies[3]; - const targets = dependencies[4]; - const tracks = []; - for (let i = 0, il = nodes.length; i < il; i++) { - const node = nodes[i]; - const inputAccessor = inputAccessors[i]; - const outputAccessor = outputAccessors[i]; - const sampler = samplers[i]; - const target = targets[i]; - if (node === void 0) continue; - if (node.updateMatrix) node.updateMatrix(); - const createdTracks = parser._createAnimationTracks(node, inputAccessor, outputAccessor, sampler, target); - if (createdTracks) for (let k = 0; k < createdTracks.length; k++) tracks.push(createdTracks[k]); - } - return new AnimationClip(animationName, void 0, tracks); - }); - } - createNodeMesh(nodeIndex) { - const json = this.json; - const parser = this; - const nodeDef = json.nodes[nodeIndex]; - if (nodeDef.mesh === void 0) return null; - return parser.getDependency("mesh", nodeDef.mesh).then(function(mesh) { - const node = parser._getNodeRef(parser.meshCache, nodeDef.mesh, mesh); - if (nodeDef.weights !== void 0) node.traverse(function(o) { - if (!o.isMesh) return; - for (let i = 0, il = nodeDef.weights.length; i < il; i++) o.morphTargetInfluences[i] = nodeDef.weights[i]; - }); - return node; - }); - } - /** - * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy - * @param {number} nodeIndex - * @return {Promise<Object3D>} - */ - loadNode(nodeIndex) { - const json = this.json; - const parser = this; - const nodeDef = json.nodes[nodeIndex]; - const nodePending = parser._loadNodeShallow(nodeIndex); - const childPending = []; - const childrenDef = nodeDef.children || []; - for (let i = 0, il = childrenDef.length; i < il; i++) childPending.push(parser.getDependency("node", childrenDef[i])); - const skeletonPending = nodeDef.skin === void 0 ? Promise.resolve(null) : parser.getDependency("skin", nodeDef.skin); - return Promise.all([ - nodePending, - Promise.all(childPending), - skeletonPending - ]).then(function(results) { - const node = results[0]; - const children = results[1]; - const skeleton = results[2]; - if (skeleton !== null) node.traverse(function(mesh) { - if (!mesh.isSkinnedMesh) return; - mesh.bind(skeleton, _identityMatrix); - }); - for (let i = 0, il = children.length; i < il; i++) node.add(children[i]); - return node; - }); - } - _loadNodeShallow(nodeIndex) { - const json = this.json; - const extensions = this.extensions; - const parser = this; - if (this.nodeCache[nodeIndex] !== void 0) return this.nodeCache[nodeIndex]; - const nodeDef = json.nodes[nodeIndex]; - const nodeName = nodeDef.name ? parser.createUniqueName(nodeDef.name) : ""; - const pending = []; - const meshPromise = parser._invokeOne(function(ext) { - return ext.createNodeMesh && ext.createNodeMesh(nodeIndex); - }); - if (meshPromise) pending.push(meshPromise); - if (nodeDef.camera !== void 0) pending.push(parser.getDependency("camera", nodeDef.camera).then(function(camera) { - return parser._getNodeRef(parser.cameraCache, nodeDef.camera, camera); - })); - parser._invokeAll(function(ext) { - return ext.createNodeAttachment && ext.createNodeAttachment(nodeIndex); - }).forEach(function(promise) { - pending.push(promise); - }); - this.nodeCache[nodeIndex] = Promise.all(pending).then(function(objects) { - let node; - if (nodeDef.isBone === true) node = new Bone(); - else if (objects.length > 1) node = new Group(); - else if (objects.length === 1) node = objects[0]; - else node = new Object3D(); - if (node !== objects[0]) for (let i = 0, il = objects.length; i < il; i++) node.add(objects[i]); - if (nodeDef.name) { - node.userData.name = nodeDef.name; - node.name = nodeName; - } - assignExtrasToUserData(node, nodeDef); - if (nodeDef.extensions) addUnknownExtensionsToUserData(extensions, node, nodeDef); - if (nodeDef.matrix !== void 0) { - const matrix = new Matrix4(); - matrix.fromArray(nodeDef.matrix); - node.applyMatrix4(matrix); - } else { - if (nodeDef.translation !== void 0) node.position.fromArray(nodeDef.translation); - if (nodeDef.rotation !== void 0) node.quaternion.fromArray(nodeDef.rotation); - if (nodeDef.scale !== void 0) node.scale.fromArray(nodeDef.scale); - } - if (!parser.associations.has(node)) parser.associations.set(node, {}); - parser.associations.get(node).nodes = nodeIndex; - return node; - }); - return this.nodeCache[nodeIndex]; - } - /** - * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes - * @param {number} sceneIndex - * @return {Promise<Group>} - */ - loadScene(sceneIndex) { - const extensions = this.extensions; - const sceneDef = this.json.scenes[sceneIndex]; - const parser = this; - const scene = new Group(); - if (sceneDef.name) scene.name = parser.createUniqueName(sceneDef.name); - assignExtrasToUserData(scene, sceneDef); - if (sceneDef.extensions) addUnknownExtensionsToUserData(extensions, scene, sceneDef); - const nodeIds = sceneDef.nodes || []; - const pending = []; - for (let i = 0, il = nodeIds.length; i < il; i++) pending.push(parser.getDependency("node", nodeIds[i])); - return Promise.all(pending).then(function(nodes) { - for (let i = 0, il = nodes.length; i < il; i++) scene.add(nodes[i]); - const reduceAssociations = (node) => { - const reducedAssociations = /* @__PURE__ */ new Map(); - for (const [key, value] of parser.associations) if (key instanceof Material || key instanceof Texture) reducedAssociations.set(key, value); - node.traverse((node2) => { - const mappings = parser.associations.get(node2); - if (mappings != null) reducedAssociations.set(node2, mappings); - }); - return reducedAssociations; - }; - parser.associations = reduceAssociations(scene); - return scene; - }); - } - _createAnimationTracks(node, inputAccessor, outputAccessor, sampler, target) { - const tracks = []; - const targetName = node.name ? node.name : node.uuid; - const targetNames = []; - if (PATH_PROPERTIES[target.path] === PATH_PROPERTIES.weights) node.traverse(function(object) { - if (object.morphTargetInfluences) targetNames.push(object.name ? object.name : object.uuid); - }); - else targetNames.push(targetName); - let TypedKeyframeTrack; - switch (PATH_PROPERTIES[target.path]) { - case PATH_PROPERTIES.weights: - TypedKeyframeTrack = NumberKeyframeTrack; - break; - case PATH_PROPERTIES.rotation: - TypedKeyframeTrack = QuaternionKeyframeTrack; - break; - case PATH_PROPERTIES.position: - case PATH_PROPERTIES.scale: - TypedKeyframeTrack = VectorKeyframeTrack; - break; - default: - switch (outputAccessor.itemSize) { - case 1: - TypedKeyframeTrack = NumberKeyframeTrack; - break; - default: - TypedKeyframeTrack = VectorKeyframeTrack; - break; - } - break; - } - const interpolation = sampler.interpolation !== void 0 ? INTERPOLATION[sampler.interpolation] : InterpolateLinear; - const outputArray = this._getArrayFromAccessor(outputAccessor); - for (let j = 0, jl = targetNames.length; j < jl; j++) { - const track = new TypedKeyframeTrack(targetNames[j] + "." + PATH_PROPERTIES[target.path], inputAccessor.array, outputArray, interpolation); - if (sampler.interpolation === "CUBICSPLINE") this._createCubicSplineTrackInterpolant(track); - tracks.push(track); - } - return tracks; - } - _getArrayFromAccessor(accessor) { - let outputArray = accessor.array; - if (accessor.normalized) { - const scale = getNormalizedComponentScale(outputArray.constructor); - const scaled = new Float32Array(outputArray.length); - for (let j = 0, jl = outputArray.length; j < jl; j++) scaled[j] = outputArray[j] * scale; - outputArray = scaled; - } - return outputArray; - } - _createCubicSplineTrackInterpolant(track) { - track.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline(result) { - return new (this instanceof QuaternionKeyframeTrack ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant)(this.times, this.values, this.getValueSize() / 3, result); - }; - track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true; - } -}; -function computeBounds(geometry, primitiveDef, parser) { - const attributes = primitiveDef.attributes; - const box = new Box3(); - if (attributes.POSITION !== void 0) { - const accessor = parser.json.accessors[attributes.POSITION]; - const min = accessor.min; - const max = accessor.max; - if (min !== void 0 && max !== void 0) { - box.set(new Vector3(min[0], min[1], min[2]), new Vector3(max[0], max[1], max[2])); - if (accessor.normalized) { - const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]); - box.min.multiplyScalar(boxScale); - box.max.multiplyScalar(boxScale); - } - } else { - console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION."); - return; - } - } else return; - const targets = primitiveDef.targets; - if (targets !== void 0) { - const maxDisplacement = new Vector3(); - const vector = new Vector3(); - for (let i = 0, il = targets.length; i < il; i++) { - const target = targets[i]; - if (target.POSITION !== void 0) { - const accessor = parser.json.accessors[target.POSITION]; - const min = accessor.min; - const max = accessor.max; - if (min !== void 0 && max !== void 0) { - vector.setX(Math.max(Math.abs(min[0]), Math.abs(max[0]))); - vector.setY(Math.max(Math.abs(min[1]), Math.abs(max[1]))); - vector.setZ(Math.max(Math.abs(min[2]), Math.abs(max[2]))); - if (accessor.normalized) { - const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]); - vector.multiplyScalar(boxScale); - } - maxDisplacement.max(vector); - } else console.warn("THREE.GLTFLoader: Missing min/max properties for accessor POSITION."); - } - } - box.expandByVector(maxDisplacement); - } - geometry.boundingBox = box; - const sphere = new Sphere(); - box.getCenter(sphere.center); - sphere.radius = box.min.distanceTo(box.max) / 2; - geometry.boundingSphere = sphere; -} -function addPrimitiveAttributes(geometry, primitiveDef, parser) { - const attributes = primitiveDef.attributes; - const pending = []; - function assignAttributeAccessor(accessorIndex, attributeName) { - return parser.getDependency("accessor", accessorIndex).then(function(accessor) { - geometry.setAttribute(attributeName, accessor); - }); - } - for (const gltfAttributeName in attributes) { - const threeAttributeName = ATTRIBUTES[gltfAttributeName] || gltfAttributeName.toLowerCase(); - if (threeAttributeName in geometry.attributes) continue; - pending.push(assignAttributeAccessor(attributes[gltfAttributeName], threeAttributeName)); - } - if (primitiveDef.indices !== void 0 && !geometry.index) { - const accessor = parser.getDependency("accessor", primitiveDef.indices).then(function(accessor2) { - geometry.setIndex(accessor2); - }); - pending.push(accessor); - } - assignExtrasToUserData(geometry, primitiveDef); - computeBounds(geometry, primitiveDef, parser); - return Promise.all(pending).then(function() { - return primitiveDef.targets !== void 0 ? addMorphTargets(geometry, primitiveDef.targets, parser) : geometry; - }); -} -//#endregion -//#region node_modules/three-stdlib/webxr/XRHandMeshModel.js -var __defProp$8 = Object.defineProperty; -var __defNormalProp$8 = (obj, key, value) => key in obj ? __defProp$8(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$8 = (obj, key, value) => { - __defNormalProp$8(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var DEFAULT_HAND_PROFILE_PATH = "https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/"; -var XRHandMeshModel = class { - constructor(handModel, controller, path = DEFAULT_HAND_PROFILE_PATH, handedness, customModelPath) { - __publicField$8(this, "controller"); - __publicField$8(this, "handModel"); - __publicField$8(this, "bones"); - this.controller = controller; - this.handModel = handModel; - this.bones = []; - const loader = new GLTFLoader(); - if (!customModelPath) loader.setPath(path); - loader.load(customModelPath != null ? customModelPath : `${handedness}.glb`, (gltf) => { - const object = gltf.scene.children[0]; - this.handModel.add(object); - const mesh = object.getObjectByProperty("type", "SkinnedMesh"); - mesh.frustumCulled = false; - mesh.castShadow = true; - mesh.receiveShadow = true; - [ - "wrist", - "thumb-metacarpal", - "thumb-phalanx-proximal", - "thumb-phalanx-distal", - "thumb-tip", - "index-finger-metacarpal", - "index-finger-phalanx-proximal", - "index-finger-phalanx-intermediate", - "index-finger-phalanx-distal", - "index-finger-tip", - "middle-finger-metacarpal", - "middle-finger-phalanx-proximal", - "middle-finger-phalanx-intermediate", - "middle-finger-phalanx-distal", - "middle-finger-tip", - "ring-finger-metacarpal", - "ring-finger-phalanx-proximal", - "ring-finger-phalanx-intermediate", - "ring-finger-phalanx-distal", - "ring-finger-tip", - "pinky-finger-metacarpal", - "pinky-finger-phalanx-proximal", - "pinky-finger-phalanx-intermediate", - "pinky-finger-phalanx-distal", - "pinky-finger-tip" - ].forEach((jointName) => { - const bone = object.getObjectByName(jointName); - if (bone !== void 0) bone.jointName = jointName; - else console.warn(`Couldn't find ${jointName} in ${handedness} hand mesh`); - this.bones.push(bone); - }); - }); - } - updateMesh() { - const XRJoints = this.controller.joints; - for (let i = 0; i < this.bones.length; i++) { - const bone = this.bones[i]; - if (bone) { - const XRJoint = XRJoints[bone.jointName]; - if (XRJoint.visible) { - const position = XRJoint.position; - bone.position.copy(position); - bone.quaternion.copy(XRJoint.quaternion); - } - } - } - } -}; -//#endregion -//#region node_modules/three-stdlib/webxr/OculusHandModel.js -var __defProp$7 = Object.defineProperty; -var __defNormalProp$7 = (obj, key, value) => key in obj ? __defProp$7(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$7 = (obj, key, value) => { - __defNormalProp$7(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var TOUCH_RADIUS = .01; -var POINTING_JOINT = "index-finger-tip"; -var OculusHandModel = class extends Object3D { - constructor(controller, leftModelPath, rightModelPath) { - super(); - __publicField$7(this, "controller"); - __publicField$7(this, "motionController"); - __publicField$7(this, "envMap"); - __publicField$7(this, "mesh"); - __publicField$7(this, "xrInputSource"); - this.controller = controller; - this.motionController = null; - this.envMap = null; - this.mesh = null; - this.xrInputSource = null; - controller.addEventListener("connected", (event) => { - const xrInputSource = event.data; - if (xrInputSource.hand && !this.motionController) { - this.xrInputSource = xrInputSource; - this.motionController = new XRHandMeshModel(this, controller, void 0, xrInputSource.handedness, xrInputSource.handedness === "left" ? leftModelPath : rightModelPath); - } - }); - controller.addEventListener("disconnected", () => { - this.dispose(); - }); - } - updateMatrixWorld(force) { - super.updateMatrixWorld(force); - if (this.motionController) this.motionController.updateMesh(); - } - getPointerPosition() { - const indexFingerTip = this.controller.joints[POINTING_JOINT]; - if (indexFingerTip) return indexFingerTip.position; - else return null; - } - intersectBoxObject(boxObject) { - const pointerPosition = this.getPointerPosition(); - if (pointerPosition) { - const indexSphere = new Sphere(pointerPosition, TOUCH_RADIUS); - const box = new Box3().setFromObject(boxObject); - return indexSphere.intersectsBox(box); - } else return false; - } - checkButton(button) { - if (this.intersectBoxObject(button)) button.onPress(); - else button.onClear(); - if (button.isPressed()) button.whilePressed(); - } - dispose() { - this.clear(); - this.motionController = null; - } -}; -//#endregion -//#region node_modules/three-stdlib/webxr/OculusHandPointerModel.js -var PINCH_MAX = .05; -var PINCH_THRESHOLD = .02; -var PINCH_MIN = .01; -var POINTER_ADVANCE_MAX = .02; -var POINTER_OPACITY_MAX = 1; -var POINTER_OPACITY_MIN = .4; -var POINTER_FRONT_RADIUS = .002; -var POINTER_REAR_RADIUS = .01; -var POINTER_REAR_RADIUS_MIN = .003; -var POINTER_LENGTH = .035; -var POINTER_SEGMENTS = 16; -var POINTER_RINGS = 12; -var POINTER_HEMISPHERE_ANGLE = 110; -var YAXIS = /* @__PURE__ */ new Vector3(0, 1, 0); -var ZAXIS = /* @__PURE__ */ new Vector3(0, 0, 1); -var CURSOR_RADIUS = .02; -var CURSOR_MAX_DISTANCE = 1.5; -var OculusHandPointerModel = class extends Object3D { - constructor(hand, controller) { - super(); - this.hand = hand; - this.controller = controller; - this.motionController = null; - this.envMap = null; - this.mesh = null; - this.pointerGeometry = null; - this.pointerMesh = null; - this.pointerObject = null; - this.pinched = false; - this.attached = false; - this.cursorObject = null; - this.raycaster = null; - this._onConnected = this._onConnected.bind(this); - this._onDisconnected = this._onDisconnected.bind(this); - this.hand.addEventListener("connected", this._onConnected); - this.hand.addEventListener("disconnected", this._onDisconnected); - } - _onConnected(event) { - const xrInputSource = event.data; - if (xrInputSource.hand) { - this.visible = true; - this.xrInputSource = xrInputSource; - this.createPointer(); - } - } - _onDisconnected() { - var _a, _b; - this.visible = false; - this.xrInputSource = null; - (_a = this.pointerGeometry) == null || _a.dispose(); - (_b = this.pointerMesh) == null || _b.material.dispose(); - this.clear(); - } - _drawVerticesRing(vertices, baseVector, ringIndex) { - const segmentVector = baseVector.clone(); - for (var i = 0; i < POINTER_SEGMENTS; i++) { - segmentVector.applyAxisAngle(ZAXIS, Math.PI * 2 / POINTER_SEGMENTS); - const vid = ringIndex * POINTER_SEGMENTS + i; - vertices[3 * vid] = segmentVector.x; - vertices[3 * vid + 1] = segmentVector.y; - vertices[3 * vid + 2] = segmentVector.z; - } - } - _updatePointerVertices(rearRadius) { - const vertices = this.pointerGeometry.attributes.position.array; - const frontFaceBase = new Vector3(POINTER_FRONT_RADIUS, 0, -1 * (POINTER_LENGTH - rearRadius)); - this._drawVerticesRing(vertices, frontFaceBase, 0); - const rearBase = new Vector3(Math.sin(Math.PI * POINTER_HEMISPHERE_ANGLE / 180) * rearRadius, Math.cos(Math.PI * POINTER_HEMISPHERE_ANGLE / 180) * rearRadius, 0); - for (var i = 0; i < POINTER_RINGS; i++) { - this._drawVerticesRing(vertices, rearBase, i + 1); - rearBase.applyAxisAngle(YAXIS, Math.PI * POINTER_HEMISPHERE_ANGLE / 180 / (POINTER_RINGS * -2)); - } - const frontCenterIndex = POINTER_SEGMENTS * 13; - const rearCenterIndex = 209; - const frontCenter = new Vector3(0, 0, -1 * (POINTER_LENGTH - rearRadius)); - vertices[frontCenterIndex * 3] = frontCenter.x; - vertices[625] = frontCenter.y; - vertices[626] = frontCenter.z; - const rearCenter = new Vector3(0, 0, rearRadius); - vertices[rearCenterIndex * 3] = rearCenter.x; - vertices[628] = rearCenter.y; - vertices[629] = rearCenter.z; - this.pointerGeometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - } - createPointer() { - var i, j; - const vertices = new Array(630).fill(0); - const indices = []; - this.pointerGeometry = new BufferGeometry(); - this.pointerGeometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - this._updatePointerVertices(POINTER_REAR_RADIUS); - for (i = 0; i < POINTER_RINGS; i++) { - for (j = 0; j < POINTER_SEGMENTS - 1; j++) { - indices.push(i * POINTER_SEGMENTS + j, i * POINTER_SEGMENTS + j + 1, (i + 1) * POINTER_SEGMENTS + j); - indices.push(i * POINTER_SEGMENTS + j + 1, (i + 1) * POINTER_SEGMENTS + j + 1, (i + 1) * POINTER_SEGMENTS + j); - } - indices.push((i + 1) * POINTER_SEGMENTS - 1, i * POINTER_SEGMENTS, (i + 2) * POINTER_SEGMENTS - 1); - indices.push(i * POINTER_SEGMENTS, (i + 1) * POINTER_SEGMENTS, (i + 2) * POINTER_SEGMENTS - 1); - } - const frontCenterIndex = POINTER_SEGMENTS * 13; - const rearCenterIndex = 209; - for (i = 0; i < POINTER_SEGMENTS - 1; i++) { - indices.push(frontCenterIndex, i + 1, i); - indices.push(rearCenterIndex, i + POINTER_SEGMENTS * POINTER_RINGS, i + POINTER_SEGMENTS * POINTER_RINGS + 1); - } - indices.push(frontCenterIndex, 0, POINTER_SEGMENTS - 1); - indices.push(rearCenterIndex, POINTER_SEGMENTS * 13 - 1, POINTER_SEGMENTS * POINTER_RINGS); - const material = new MeshBasicMaterial(); - material.transparent = true; - material.opacity = POINTER_OPACITY_MIN; - this.pointerGeometry.setIndex(indices); - this.pointerMesh = new Mesh(this.pointerGeometry, material); - this.pointerMesh.position.set(0, 0, -1 * POINTER_REAR_RADIUS); - this.pointerObject = new Object3D(); - this.pointerObject.add(this.pointerMesh); - this.raycaster = new Raycaster(); - const cursorGeometry = new SphereGeometry(CURSOR_RADIUS, 10, 10); - const cursorMaterial = new MeshBasicMaterial(); - cursorMaterial.transparent = true; - cursorMaterial.opacity = POINTER_OPACITY_MIN; - this.cursorObject = new Mesh(cursorGeometry, cursorMaterial); - this.pointerObject.add(this.cursorObject); - this.add(this.pointerObject); - } - _updateRaycaster() { - if (this.raycaster) { - const pointerMatrix = this.pointerObject.matrixWorld; - const tempMatrix = new Matrix4(); - tempMatrix.identity().extractRotation(pointerMatrix); - this.raycaster.ray.origin.setFromMatrixPosition(pointerMatrix); - this.raycaster.ray.direction.set(0, 0, -1).applyMatrix4(tempMatrix); - } - } - _updatePointer() { - this.pointerObject.visible = this.controller.visible; - const indexTip = this.hand.joints["index-finger-tip"]; - const thumbTip = this.hand.joints["thumb-tip"]; - const distance = indexTip.position.distanceTo(thumbTip.position); - const position = indexTip.position.clone().add(thumbTip.position).multiplyScalar(.5); - this.pointerObject.position.copy(position); - this.pointerObject.quaternion.copy(this.controller.quaternion); - this.pinched = distance <= PINCH_THRESHOLD; - const pinchScale = (distance - PINCH_MIN) / (PINCH_MAX - PINCH_MIN); - const focusScale = (distance - PINCH_MIN) / (PINCH_THRESHOLD - PINCH_MIN); - if (pinchScale > 1) { - this._updatePointerVertices(POINTER_REAR_RADIUS); - this.pointerMesh.position.set(0, 0, -1 * POINTER_REAR_RADIUS); - this.pointerMesh.material.opacity = POINTER_OPACITY_MIN; - } else if (pinchScale > 0) { - const rearRadius = (POINTER_REAR_RADIUS - POINTER_REAR_RADIUS_MIN) * pinchScale + POINTER_REAR_RADIUS_MIN; - this._updatePointerVertices(rearRadius); - if (focusScale < 1) { - this.pointerMesh.position.set(0, 0, -1 * rearRadius - (1 - focusScale) * POINTER_ADVANCE_MAX); - this.pointerMesh.material.opacity = POINTER_OPACITY_MIN + (1 - focusScale) * (POINTER_OPACITY_MAX - POINTER_OPACITY_MIN); - } else { - this.pointerMesh.position.set(0, 0, -1 * rearRadius); - this.pointerMesh.material.opacity = POINTER_OPACITY_MIN; - } - } else { - this._updatePointerVertices(POINTER_REAR_RADIUS_MIN); - this.pointerMesh.position.set(0, 0, -1 * POINTER_REAR_RADIUS_MIN - POINTER_ADVANCE_MAX); - this.pointerMesh.material.opacity = POINTER_OPACITY_MAX; - } - this.cursorObject.material.opacity = this.pointerMesh.material.opacity; - } - updateMatrixWorld(force) { - super.updateMatrixWorld(force); - if (this.pointerGeometry) { - this._updatePointer(); - this._updateRaycaster(); - } - } - isPinched() { - return this.pinched; - } - setAttached(attached) { - this.attached = attached; - } - isAttached() { - return this.attached; - } - intersectObject(object, recursive = true) { - if (this.raycaster) return this.raycaster.intersectObject(object, recursive); - } - intersectObjects(objects, recursive = true) { - if (this.raycaster) return this.raycaster.intersectObjects(objects, recursive); - } - checkIntersections(objects, recursive = false) { - if (this.raycaster && !this.attached) { - const intersections = this.raycaster.intersectObjects(objects, recursive); - const direction = new Vector3(0, 0, -1); - if (intersections.length > 0) { - const distance = intersections[0].distance; - this.cursorObject.position.copy(direction.multiplyScalar(distance)); - } else this.cursorObject.position.copy(direction.multiplyScalar(CURSOR_MAX_DISTANCE)); - } - } - setCursor(distance) { - const direction = new Vector3(0, 0, -1); - if (this.raycaster && !this.attached) this.cursorObject.position.copy(direction.multiplyScalar(distance)); - } - dispose() { - this._onDisconnected(); - this.hand.removeEventListener("connected", this._onConnected); - this.hand.removeEventListener("disconnected", this._onDisconnected); - } -}; -//#endregion -//#region node_modules/three-stdlib/webxr/Text2D.js -function createText(message, height) { - const canvas = document.createElement("canvas"); - const context = canvas.getContext("2d"); - let metrics = null; - const textHeight = 100; - context.font = "normal 100px Arial"; - metrics = context.measureText(message); - const textWidth = metrics.width; - canvas.width = textWidth; - canvas.height = textHeight; - context.font = "normal 100px Arial"; - context.textAlign = "center"; - context.textBaseline = "middle"; - context.fillStyle = "#ffffff"; - context.fillText(message, textWidth / 2, textHeight / 2); - const texture = new Texture(canvas); - texture.needsUpdate = true; - const material = new MeshBasicMaterial({ - color: 16777215, - side: 2, - map: texture, - transparent: true - }); - return new Mesh(new PlaneGeometry(height * textWidth / textHeight, height), material); -} -//#endregion -//#region node_modules/three-stdlib/webxr/VRButton.js -var __defProp$6 = Object.defineProperty; -var __defNormalProp$6 = (obj, key, value) => key in obj ? __defProp$6(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$6 = (obj, key, value) => { - __defNormalProp$6(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var VRButton = /* @__PURE__ */ (() => { - const _VRButton = class { - static createButton(renderer, sessionInit = {}) { - const button = document.createElement("button"); - function showEnterVR() { - let currentSession = null; - async function onSessionStarted(session) { - session.addEventListener("end", onSessionEnded); - await renderer.xr.setSession(session); - button.textContent = "EXIT VR"; - currentSession = session; - } - function onSessionEnded() { - currentSession.removeEventListener("end", onSessionEnded); - button.textContent = "ENTER VR"; - currentSession = null; - } - button.style.display = ""; - button.style.cursor = "pointer"; - button.style.left = "calc(50% - 50px)"; - button.style.width = "100px"; - button.textContent = "ENTER VR"; - button.onmouseenter = () => { - button.style.opacity = "1.0"; - }; - button.onmouseleave = () => { - button.style.opacity = "0.5"; - }; - button.onclick = () => { - var _a; - if (currentSession === null) { - const optionalFeatures = [ - sessionInit.optionalFeatures, - "local-floor", - "bounded-floor", - "hand-tracking" - ].flat().filter(Boolean); - (_a = navigator.xr) == null || _a.requestSession("immersive-vr", { - ...sessionInit, - optionalFeatures - }).then(onSessionStarted); - } else currentSession.end(); - }; - } - function disableButton() { - button.style.display = ""; - button.style.cursor = "auto"; - button.style.left = "calc(50% - 75px)"; - button.style.width = "150px"; - button.onmouseenter = null; - button.onmouseleave = null; - button.onclick = null; - } - function showWebXRNotFound() { - disableButton(); - button.textContent = "VR NOT SUPPORTED"; - } - function stylizeElement(element) { - element.style.position = "absolute"; - element.style.bottom = "20px"; - element.style.padding = "12px 6px"; - element.style.border = "1px solid #fff"; - element.style.borderRadius = "4px"; - element.style.background = "rgba(0,0,0,0.1)"; - element.style.color = "#fff"; - element.style.font = "normal 13px sans-serif"; - element.style.textAlign = "center"; - element.style.opacity = "0.5"; - element.style.outline = "none"; - element.style.zIndex = "999"; - } - if ("xr" in navigator) { - stylizeElement(button); - button.id = "VRButton"; - button.style.display = "none"; - navigator.xr.isSessionSupported("immersive-vr").then((supported) => { - supported ? showEnterVR() : showWebXRNotFound(); - if (supported && _VRButton.xrSessionIsGranted) button.click(); - }); - return button; - } else { - const message = document.createElement("a"); - if (window.isSecureContext === false) { - message.href = document.location.href.replace(/^http:/, "https:"); - message.innerHTML = "WEBXR NEEDS HTTPS"; - } else { - message.href = "https://immersiveweb.dev/"; - message.innerHTML = "WEBXR NOT AVAILABLE"; - } - message.style.left = "calc(50% - 90px)"; - message.style.width = "180px"; - message.style.textDecoration = "none"; - stylizeElement(message); - return message; - } - } - static registerSessionGrantedListener() { - if (typeof navigator !== "undefined" && "xr" in navigator) navigator.xr.addEventListener("sessiongranted", () => { - _VRButton.xrSessionIsGranted = true; - }); - } - }; - let VRButton2 = _VRButton; - __publicField$6(VRButton2, "xrSessionIsGranted", false); - VRButton2.registerSessionGrantedListener(); - return VRButton2; -})(); -//#endregion -//#region node_modules/three-stdlib/libs/MotionControllers.js -var __defProp$5 = Object.defineProperty; -var __defNormalProp$5 = (obj, key, value) => key in obj ? __defProp$5(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$5 = (obj, key, value) => { - __defNormalProp$5(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var MotionControllerConstants = { - Handedness: { - NONE: "none", - LEFT: "left", - RIGHT: "right" - }, - ComponentState: { - DEFAULT: "default", - TOUCHED: "touched", - PRESSED: "pressed" - }, - ComponentProperty: { - BUTTON: "button", - X_AXIS: "xAxis", - Y_AXIS: "yAxis", - STATE: "state" - }, - ComponentType: { - TRIGGER: "trigger", - SQUEEZE: "squeeze", - TOUCHPAD: "touchpad", - THUMBSTICK: "thumbstick", - BUTTON: "button" - }, - ButtonTouchThreshold: .05, - AxisTouchThreshold: .1, - VisualResponseProperty: { - TRANSFORM: "transform", - VISIBILITY: "visibility" - } -}; -async function fetchJsonFile(path) { - const response = await fetch(path); - if (!response.ok) throw new Error(response.statusText); - else return response.json(); -} -async function fetchProfilesList(basePath) { - if (!basePath) throw new Error("No basePath supplied"); - return await fetchJsonFile(`${basePath}/profilesList.json`); -} -async function fetchProfile(xrInputSource, basePath, defaultProfile = null, getAssetPath = true) { - if (!xrInputSource) throw new Error("No xrInputSource supplied"); - if (!basePath) throw new Error("No basePath supplied"); - const supportedProfilesList = await fetchProfilesList(basePath); - let match = void 0; - xrInputSource.profiles.some((profileId) => { - const supportedProfile = supportedProfilesList[profileId]; - if (supportedProfile) match = { - profileId, - profilePath: `${basePath}/${supportedProfile.path}`, - deprecated: !!supportedProfile.deprecated - }; - return !!match; - }); - if (!match) { - if (!defaultProfile) throw new Error("No matching profile name found"); - const supportedProfile = supportedProfilesList[defaultProfile]; - if (!supportedProfile) throw new Error(`No matching profile name found and default profile "${defaultProfile}" missing.`); - match = { - profileId: defaultProfile, - profilePath: `${basePath}/${supportedProfile.path}`, - deprecated: !!supportedProfile.deprecated - }; - } - const profile = await fetchJsonFile(match.profilePath); - let assetPath = void 0; - if (getAssetPath) { - let layout; - if (xrInputSource.handedness === "any") layout = profile.layouts[Object.keys(profile.layouts)[0]]; - else layout = profile.layouts[xrInputSource.handedness]; - if (!layout) throw new Error(`No matching handedness, ${xrInputSource.handedness}, in profile ${match.profileId}`); - if (layout.assetPath) assetPath = match.profilePath.replace("profile.json", layout.assetPath); - } - return { - profile, - assetPath - }; -} -var defaultComponentValues = { - xAxis: 0, - yAxis: 0, - button: 0, - state: MotionControllerConstants.ComponentState.DEFAULT -}; -function normalizeAxes(x = 0, y = 0) { - let xAxis = x; - let yAxis = y; - if (Math.sqrt(x * x + y * y) > 1) { - const theta = Math.atan2(y, x); - xAxis = Math.cos(theta); - yAxis = Math.sin(theta); - } - return { - normalizedXAxis: xAxis * .5 + .5, - normalizedYAxis: yAxis * .5 + .5 - }; -} -var VisualResponse = class { - constructor(visualResponseDescription) { - __publicField$5(this, "value"); - __publicField$5(this, "componentProperty"); - __publicField$5(this, "states"); - __publicField$5(this, "valueNodeName"); - __publicField$5(this, "valueNodeProperty"); - __publicField$5(this, "minNodeName"); - __publicField$5(this, "maxNodeName"); - __publicField$5(this, "valueNode"); - __publicField$5(this, "minNode"); - __publicField$5(this, "maxNode"); - this.componentProperty = visualResponseDescription.componentProperty; - this.states = visualResponseDescription.states; - this.valueNodeName = visualResponseDescription.valueNodeName; - this.valueNodeProperty = visualResponseDescription.valueNodeProperty; - if (this.valueNodeProperty === MotionControllerConstants.VisualResponseProperty.TRANSFORM) { - this.minNodeName = visualResponseDescription.minNodeName; - this.maxNodeName = visualResponseDescription.maxNodeName; - } - this.value = 0; - this.updateFromComponent(defaultComponentValues); - } - /** - * Computes the visual response's interpolation weight based on component state - * @param {Object} componentValues - The component from which to update - * @param {number | undefined} xAxis - The reported X axis value of the component - * @param {number | undefined} yAxis - The reported Y axis value of the component - * @param {number | undefined} button - The reported value of the component's button - * @param {string} state - The component's active state - */ - updateFromComponent({ xAxis, yAxis, button, state }) { - const { normalizedXAxis, normalizedYAxis } = normalizeAxes(xAxis, yAxis); - switch (this.componentProperty) { - case MotionControllerConstants.ComponentProperty.X_AXIS: - this.value = this.states.includes(state) ? normalizedXAxis : .5; - break; - case MotionControllerConstants.ComponentProperty.Y_AXIS: - this.value = this.states.includes(state) ? normalizedYAxis : .5; - break; - case MotionControllerConstants.ComponentProperty.BUTTON: - this.value = this.states.includes(state) && button ? button : 0; - break; - case MotionControllerConstants.ComponentProperty.STATE: - if (this.valueNodeProperty === MotionControllerConstants.VisualResponseProperty.VISIBILITY) this.value = this.states.includes(state); - else this.value = this.states.includes(state) ? 1 : 0; - break; - default: throw new Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`); - } - } -}; -var Component = class { - /** - * @param {string} componentId - Id of the component - * @param {InputProfileComponent} componentDescription - Description of the component to be created - */ - constructor(componentId, componentDescription) { - __publicField$5(this, "id"); - __publicField$5(this, "values"); - __publicField$5(this, "type"); - __publicField$5(this, "gamepadIndices"); - __publicField$5(this, "rootNodeName"); - __publicField$5(this, "visualResponses"); - __publicField$5(this, "touchPointNodeName"); - __publicField$5(this, "touchPointNode"); - if (!componentId || !componentDescription || !componentDescription.visualResponses || !componentDescription.gamepadIndices || Object.keys(componentDescription.gamepadIndices).length === 0) throw new Error("Invalid arguments supplied"); - this.id = componentId; - this.type = componentDescription.type; - this.rootNodeName = componentDescription.rootNodeName; - this.touchPointNodeName = componentDescription.touchPointNodeName; - this.visualResponses = {}; - Object.keys(componentDescription.visualResponses).forEach((responseName) => { - const visualResponse = new VisualResponse(componentDescription.visualResponses[responseName]); - this.visualResponses[responseName] = visualResponse; - }); - this.gamepadIndices = Object.assign({}, componentDescription.gamepadIndices); - this.values = { - state: MotionControllerConstants.ComponentState.DEFAULT, - button: this.gamepadIndices.button !== void 0 ? 0 : void 0, - xAxis: this.gamepadIndices.xAxis !== void 0 ? 0 : void 0, - yAxis: this.gamepadIndices.yAxis !== void 0 ? 0 : void 0 - }; - } - get data() { - return { - id: this.id, - ...this.values - }; - } - /** - * @description Poll for updated data based on current gamepad state - * @param {Object} gamepad - The gamepad object from which the component data should be polled - */ - updateFromGamepad(gamepad) { - this.values.state = MotionControllerConstants.ComponentState.DEFAULT; - if (this.gamepadIndices.button !== void 0 && gamepad.buttons.length > this.gamepadIndices.button) { - const gamepadButton = gamepad.buttons[this.gamepadIndices.button]; - this.values.button = gamepadButton.value; - this.values.button = this.values.button < 0 ? 0 : this.values.button; - this.values.button = this.values.button > 1 ? 1 : this.values.button; - if (gamepadButton.pressed || this.values.button === 1) this.values.state = MotionControllerConstants.ComponentState.PRESSED; - else if (gamepadButton.touched || this.values.button > MotionControllerConstants.ButtonTouchThreshold) this.values.state = MotionControllerConstants.ComponentState.TOUCHED; - } - if (this.gamepadIndices.xAxis !== void 0 && gamepad.axes.length > this.gamepadIndices.xAxis) { - this.values.xAxis = gamepad.axes[this.gamepadIndices.xAxis]; - this.values.xAxis = this.values.xAxis < -1 ? -1 : this.values.xAxis; - this.values.xAxis = this.values.xAxis > 1 ? 1 : this.values.xAxis; - if (this.values.state === MotionControllerConstants.ComponentState.DEFAULT && Math.abs(this.values.xAxis) > MotionControllerConstants.AxisTouchThreshold) this.values.state = MotionControllerConstants.ComponentState.TOUCHED; - } - if (this.gamepadIndices.yAxis !== void 0 && gamepad.axes.length > this.gamepadIndices.yAxis) { - this.values.yAxis = gamepad.axes[this.gamepadIndices.yAxis]; - this.values.yAxis = this.values.yAxis < -1 ? -1 : this.values.yAxis; - this.values.yAxis = this.values.yAxis > 1 ? 1 : this.values.yAxis; - if (this.values.state === MotionControllerConstants.ComponentState.DEFAULT && Math.abs(this.values.yAxis) > MotionControllerConstants.AxisTouchThreshold) this.values.state = MotionControllerConstants.ComponentState.TOUCHED; - } - Object.values(this.visualResponses).forEach((visualResponse) => { - visualResponse.updateFromComponent(this.values); - }); - } -}; -var MotionController = class { - /** - * @param {XRInputSource} xrInputSource - The XRInputSource to build the MotionController around - * @param {Profile} profile - The best matched profile description for the supplied xrInputSource - * @param {string} assetUrl - */ - constructor(xrInputSource, profile, assetUrl) { - __publicField$5(this, "xrInputSource"); - __publicField$5(this, "assetUrl"); - __publicField$5(this, "layoutDescription"); - __publicField$5(this, "id"); - __publicField$5(this, "components"); - if (!xrInputSource) throw new Error("No xrInputSource supplied"); - if (!profile) throw new Error("No profile supplied"); - if (!profile.layouts[xrInputSource.handedness]) throw new Error("No layout for " + xrInputSource.handedness + " handedness"); - this.xrInputSource = xrInputSource; - this.assetUrl = assetUrl; - this.id = profile.profileId; - this.layoutDescription = profile.layouts[xrInputSource.handedness]; - this.components = {}; - Object.keys(this.layoutDescription.components).forEach((componentId) => { - const componentDescription = this.layoutDescription.components[componentId]; - this.components[componentId] = new Component(componentId, componentDescription); - }); - this.updateFromGamepad(); - } - get gripSpace() { - return this.xrInputSource.gripSpace; - } - get targetRaySpace() { - return this.xrInputSource.targetRaySpace; - } - /** - * @description Returns a subset of component data for simplified debugging - */ - get data() { - const data = []; - Object.values(this.components).forEach((component) => { - data.push(component.data); - }); - return data; - } - /** - * @description Poll for updated data based on current gamepad state - */ - updateFromGamepad() { - Object.values(this.components).forEach((component) => { - component.updateFromGamepad(this.xrInputSource.gamepad); - }); - } -}; -//#endregion -//#region node_modules/three-stdlib/webxr/XRControllerModelFactory.js -var __defProp$4 = Object.defineProperty; -var __defNormalProp$4 = (obj, key, value) => key in obj ? __defProp$4(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$4 = (obj, key, value) => { - __defNormalProp$4(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var DEFAULT_PROFILES_PATH = "https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles"; -var DEFAULT_PROFILE = "generic-trigger"; -var applyEnvironmentMap = (envMap, obj) => { - obj.traverse((child) => { - if (child instanceof Mesh && "envMap" in child.material) { - child.material.envMap = envMap; - child.material.needsUpdate = true; - } - }); -}; -var XRControllerModel = class extends Object3D { - constructor() { - super(); - __publicField$4(this, "envMap"); - __publicField$4(this, "motionController"); - this.motionController = null; - this.envMap = null; - } - setEnvironmentMap(envMap) { - if (this.envMap == envMap) return this; - this.envMap = envMap; - applyEnvironmentMap(this.envMap, this); - return this; - } - /** - * Polls data from the XRInputSource and updates the model's components to match - * the real world data - */ - updateMatrixWorld(force) { - super.updateMatrixWorld(force); - if (!this.motionController) return; - this.motionController.updateFromGamepad(); - Object.values(this.motionController.components).forEach((component) => { - Object.values(component.visualResponses).forEach((visualResponse) => { - const { valueNode, minNode, maxNode, value, valueNodeProperty } = visualResponse; - if (!valueNode) return; - if (valueNodeProperty === MotionControllerConstants.VisualResponseProperty.VISIBILITY && typeof value === "boolean") valueNode.visible = value; - else if (valueNodeProperty === MotionControllerConstants.VisualResponseProperty.TRANSFORM && minNode && maxNode && typeof value === "number") { - valueNode.quaternion.slerpQuaternions(minNode.quaternion, maxNode.quaternion, value); - valueNode.position.lerpVectors(minNode.position, maxNode.position, value); - } - }); - }); - } -}; -function findNodes(motionController, scene) { - Object.values(motionController.components).forEach((component) => { - const { type, touchPointNodeName, visualResponses } = component; - if (type === MotionControllerConstants.ComponentType.TOUCHPAD && touchPointNodeName) { - component.touchPointNode = scene.getObjectByName(touchPointNodeName); - if (component.touchPointNode) { - const sphere = new Mesh(new SphereGeometry(.001), new MeshBasicMaterial({ color: 255 })); - component.touchPointNode.add(sphere); - } else console.warn(`Could not find touch dot, ${component.touchPointNodeName}, in touchpad component ${component.id}`); - } - Object.values(visualResponses).forEach((visualResponse) => { - const { valueNodeName, minNodeName, maxNodeName, valueNodeProperty } = visualResponse; - if (valueNodeProperty === MotionControllerConstants.VisualResponseProperty.TRANSFORM && minNodeName && maxNodeName) { - visualResponse.minNode = scene.getObjectByName(minNodeName); - visualResponse.maxNode = scene.getObjectByName(maxNodeName); - if (!visualResponse.minNode) { - console.warn(`Could not find ${minNodeName} in the model`); - return; - } - if (!visualResponse.maxNode) { - console.warn(`Could not find ${maxNodeName} in the model`); - return; - } - } - visualResponse.valueNode = scene.getObjectByName(valueNodeName); - if (!visualResponse.valueNode) console.warn(`Could not find ${valueNodeName} in the model`); - }); - }); -} -function addAssetSceneToControllerModel(controllerModel, scene) { - findNodes(controllerModel.motionController, scene); - if (controllerModel.envMap) applyEnvironmentMap(controllerModel.envMap, scene); - controllerModel.add(scene); -} -var XRControllerModelFactory = class { - constructor(gltfLoader = null) { - __publicField$4(this, "gltfLoader"); - __publicField$4(this, "path"); - __publicField$4(this, "_assetCache"); - this.gltfLoader = gltfLoader; - this.path = DEFAULT_PROFILES_PATH; - this._assetCache = {}; - if (!this.gltfLoader) this.gltfLoader = new GLTFLoader(); - } - createControllerModel(controller) { - const controllerModel = new XRControllerModel(); - let scene = null; - const onConnected = (event) => { - const xrInputSource = event.data; - if (xrInputSource.targetRayMode !== "tracked-pointer" || !xrInputSource.gamepad) return; - fetchProfile(xrInputSource, this.path, DEFAULT_PROFILE).then(({ profile, assetPath }) => { - if (!assetPath) throw new Error("no asset path"); - controllerModel.motionController = new MotionController(xrInputSource, profile, assetPath); - const assetUrl = controllerModel.motionController.assetUrl; - const cachedAsset = this._assetCache[assetUrl]; - if (cachedAsset) { - scene = cachedAsset.scene.clone(); - addAssetSceneToControllerModel(controllerModel, scene); - } else { - if (!this.gltfLoader) throw new Error("GLTFLoader not set."); - this.gltfLoader.setPath(""); - this.gltfLoader.load(controllerModel.motionController.assetUrl, (asset) => { - if (!controllerModel.motionController) { - console.warn("motionController gone while gltf load, bailing..."); - return; - } - this._assetCache[assetUrl] = asset; - scene = asset.scene.clone(); - addAssetSceneToControllerModel(controllerModel, scene); - }, () => {}, () => { - throw new Error(`Asset ${assetUrl} missing or malformed.`); - }); - } - }).catch((err) => { - console.warn(err); - }); - }; - controller.addEventListener("connected", onConnected); - const onDisconnected = () => { - controller.removeEventListener("connected", onConnected); - controller.removeEventListener("disconnected", onDisconnected); - controllerModel.motionController = null; - if (scene) controllerModel.remove(scene); - scene = null; - }; - controller.addEventListener("disconnected", onDisconnected); - return controllerModel; - } -}; -//#endregion -//#region node_modules/three-stdlib/webxr/XREstimatedLight.js -var SessionLightProbe = class { - constructor(xrLight, renderer, lightProbe, environmentEstimation, estimationStartCallback) { - this.xrLight = xrLight; - this.renderer = renderer; - this.lightProbe = lightProbe; - this.xrWebGLBinding = null; - this.estimationStartCallback = estimationStartCallback; - this.frameCallback = this.onXRFrame.bind(this); - const session = renderer.xr.getSession(); - if (environmentEstimation && "XRWebGLBinding" in window) { - xrLight.environment = new WebGLCubeRenderTarget(16).texture; - const gl = renderer.getContext(); - switch (session.preferredReflectionFormat) { - case "srgba8": - gl.getExtension("EXT_sRGB"); - break; - case "rgba16f": - gl.getExtension("OES_texture_half_float"); - break; - } - this.xrWebGLBinding = new XRWebGLBinding(session, gl); - this.lightProbe.addEventListener("reflectionchange", () => { - this.updateReflection(); - }); - } - session.requestAnimationFrame(this.frameCallback); - } - updateReflection() { - const textureProperties = this.renderer.properties.get(this.xrLight.environment); - if (textureProperties) { - const cubeMap = this.xrWebGLBinding.getReflectionCubeMap(this.lightProbe); - if (cubeMap) { - textureProperties.__webglTexture = cubeMap; - this.xrLight.environment.needsPMREMUpdate = true; - } - } - } - onXRFrame(time, xrFrame) { - if (!this.xrLight) return; - xrFrame.session.requestAnimationFrame(this.frameCallback); - const lightEstimate = xrFrame.getLightEstimate(this.lightProbe); - if (lightEstimate) { - this.xrLight.lightProbe.sh.fromArray(lightEstimate.sphericalHarmonicsCoefficients); - this.xrLight.lightProbe.intensity = 1; - const intensityScalar = Math.max(1, Math.max(lightEstimate.primaryLightIntensity.x, Math.max(lightEstimate.primaryLightIntensity.y, lightEstimate.primaryLightIntensity.z))); - this.xrLight.directionalLight.color.setRGB(lightEstimate.primaryLightIntensity.x / intensityScalar, lightEstimate.primaryLightIntensity.y / intensityScalar, lightEstimate.primaryLightIntensity.z / intensityScalar); - this.xrLight.directionalLight.intensity = intensityScalar; - this.xrLight.directionalLight.position.copy(lightEstimate.primaryLightDirection); - if (this.estimationStartCallback) { - this.estimationStartCallback(); - this.estimationStartCallback = null; - } - } - } - dispose() { - this.xrLight = null; - this.renderer = null; - this.lightProbe = null; - this.xrWebGLBinding = null; - } -}; -var XREstimatedLight = class extends Group { - constructor(renderer, environmentEstimation = true) { - super(); - this.lightProbe = new LightProbe(); - this.lightProbe.intensity = 0; - this.add(this.lightProbe); - this.directionalLight = new DirectionalLight(); - this.directionalLight.intensity = 0; - this.add(this.directionalLight); - this.environment = null; - let sessionLightProbe = null; - let estimationStarted = false; - renderer.xr.addEventListener("sessionstart", () => { - const session = renderer.xr.getSession(); - if ("requestLightProbe" in session) session.requestLightProbe({ reflectionFormat: session.preferredReflectionFormat }).then((probe) => { - sessionLightProbe = new SessionLightProbe(this, renderer, probe, environmentEstimation, () => { - estimationStarted = true; - this.dispatchEvent({ type: "estimationstart" }); - }); - }); - }); - renderer.xr.addEventListener("sessionend", () => { - if (sessionLightProbe) { - sessionLightProbe.dispose(); - sessionLightProbe = null; - } - if (estimationStarted) this.dispatchEvent({ type: "estimationend" }); - }); - this.dispose = () => { - if (sessionLightProbe) { - sessionLightProbe.dispose(); - sessionLightProbe = null; - } - this.remove(this.lightProbe); - this.lightProbe = null; - this.remove(this.directionalLight); - this.directionalLight = null; - this.environment = null; - }; - } -}; -//#endregion -//#region node_modules/three-stdlib/webxr/XRHandPrimitiveModel.js -var _matrix = /* @__PURE__ */ new Matrix4(); -var _vector$1 = /* @__PURE__ */ new Vector3(); -var XRHandPrimitiveModel = class { - constructor(handModel, controller, path, handedness, options) { - this.controller = controller; - this.handModel = handModel; - this.envMap = null; - let geometry; - if (!options || !options.primitive || options.primitive === "sphere") geometry = new SphereGeometry(1, 10, 10); - else if (options.primitive === "box") geometry = new BoxGeometry(1, 1, 1); - const material = new MeshStandardMaterial(); - this.handMesh = new InstancedMesh(geometry, material, 30); - this.handMesh.instanceMatrix.setUsage(DynamicDrawUsage); - this.handMesh.castShadow = true; - this.handMesh.receiveShadow = true; - this.handModel.add(this.handMesh); - this.joints = [ - "wrist", - "thumb-metacarpal", - "thumb-phalanx-proximal", - "thumb-phalanx-distal", - "thumb-tip", - "index-finger-metacarpal", - "index-finger-phalanx-proximal", - "index-finger-phalanx-intermediate", - "index-finger-phalanx-distal", - "index-finger-tip", - "middle-finger-metacarpal", - "middle-finger-phalanx-proximal", - "middle-finger-phalanx-intermediate", - "middle-finger-phalanx-distal", - "middle-finger-tip", - "ring-finger-metacarpal", - "ring-finger-phalanx-proximal", - "ring-finger-phalanx-intermediate", - "ring-finger-phalanx-distal", - "ring-finger-tip", - "pinky-finger-metacarpal", - "pinky-finger-phalanx-proximal", - "pinky-finger-phalanx-intermediate", - "pinky-finger-phalanx-distal", - "pinky-finger-tip" - ]; - } - updateMesh() { - const defaultRadius = .008; - const joints = this.controller.joints; - let count = 0; - for (let i = 0; i < this.joints.length; i++) { - const joint = joints[this.joints[i]]; - if (joint.visible) { - _vector$1.setScalar(joint.jointRadius || defaultRadius); - _matrix.compose(joint.position, joint.quaternion, _vector$1); - this.handMesh.setMatrixAt(i, _matrix); - count++; - } - } - this.handMesh.count = count; - this.handMesh.instanceMatrix.needsUpdate = true; - } -}; -//#endregion -//#region node_modules/three-stdlib/webxr/XRHandModelFactory.js -var XRHandModel = class extends Object3D { - constructor(controller) { - super(); - this.controller = controller; - this.motionController = null; - this.envMap = null; - this.mesh = null; - } - updateMatrixWorld(force) { - super.updateMatrixWorld(force); - if (this.motionController) this.motionController.updateMesh(); - } -}; -var XRHandModelFactory = class { - constructor() { - this.path = null; - } - setPath(path) { - this.path = path; - return this; - } - createHandModel(controller, profile) { - const handModel = new XRHandModel(controller); - controller.addEventListener("connected", (event) => { - const xrInputSource = event.data; - if (xrInputSource.hand && !handModel.motionController) { - handModel.xrInputSource = xrInputSource; - if (profile === void 0 || profile === "spheres") handModel.motionController = new XRHandPrimitiveModel(handModel, controller, this.path, xrInputSource.handedness, { primitive: "sphere" }); - else if (profile === "boxes") handModel.motionController = new XRHandPrimitiveModel(handModel, controller, this.path, xrInputSource.handedness, { primitive: "box" }); - else if (profile === "mesh") handModel.motionController = new XRHandMeshModel(handModel, controller, this.path, xrInputSource.handedness); - } - }); - controller.addEventListener("disconnected", () => {}); - return handModel; - } -}; -//#endregion -//#region node_modules/three-stdlib/geometries/ParametricGeometry.js -var ParametricGeometry = class extends BufferGeometry { - constructor(func = (u, v, target) => target.set(u, v, Math.cos(u) * Math.sin(v)), slices = 8, stacks = 8) { - super(); - this.type = "ParametricGeometry"; - this.parameters = { - func, - slices, - stacks - }; - const indices = []; - const vertices = []; - const normals = []; - const uvs = []; - const EPS = 1e-5; - const normal = new Vector3(); - const p0 = new Vector3(), p1 = new Vector3(); - const pu = new Vector3(), pv = new Vector3(); - const sliceCount = slices + 1; - for (let i = 0; i <= stacks; i++) { - const v = i / stacks; - for (let j = 0; j <= slices; j++) { - const u = j / slices; - func(u, v, p0); - vertices.push(p0.x, p0.y, p0.z); - if (u - EPS >= 0) { - func(u - EPS, v, p1); - pu.subVectors(p0, p1); - } else { - func(u + EPS, v, p1); - pu.subVectors(p1, p0); - } - if (v - EPS >= 0) { - func(u, v - EPS, p1); - pv.subVectors(p0, p1); - } else { - func(u, v + EPS, p1); - pv.subVectors(p1, p0); - } - normal.crossVectors(pu, pv).normalize(); - normals.push(normal.x, normal.y, normal.z); - uvs.push(u, v); - } - } - for (let i = 0; i < stacks; i++) for (let j = 0; j < slices; j++) { - const a = i * sliceCount + j; - const b = i * sliceCount + j + 1; - const c = (i + 1) * sliceCount + j + 1; - const d = (i + 1) * sliceCount + j; - indices.push(a, b, d); - indices.push(b, c, d); - } - this.setIndex(indices); - this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); - this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); - } -}; -//#endregion -//#region node_modules/three-stdlib/geometries/ParametricGeometries.js -var TubeGeometry = class extends ParametricGeometry { - constructor(path, segments = 64, radius = 1, segmentsRadius = 8, closed = false) { - const numpoints = segments + 1; - const frames = path.computeFrenetFrames(segments, closed), tangents = frames.tangents, normals = frames.normals, binormals = frames.binormals; - const position = new Vector3(); - function ParametricTube(u, v, target) { - v *= 2 * Math.PI; - const i = Math.floor(u * (numpoints - 1)); - path.getPointAt(u, position); - const normal = normals[i]; - const binormal = binormals[i]; - const cx = -radius * Math.cos(v); - const cy = radius * Math.sin(v); - position.x += cx * normal.x + cy * binormal.x; - position.y += cx * normal.y + cy * binormal.y; - position.z += cx * normal.z + cy * binormal.z; - target.copy(position); - } - super(ParametricTube, segments, segmentsRadius); - this.tangents = tangents; - this.normals = normals; - this.binormals = binormals; - this.path = path; - this.segments = segments; - this.radius = radius; - this.segmentsRadius = segmentsRadius; - this.closed = closed; - } -}; -var ParametricGeometries = { - klein: function(v, u, target) { - u *= Math.PI; - v *= 2 * Math.PI; - u = u * 2; - let x, z; - if (u < Math.PI) { - x = 3 * Math.cos(u) * (1 + Math.sin(u)) + 2 * (1 - Math.cos(u) / 2) * Math.cos(u) * Math.cos(v); - z = -8 * Math.sin(u) - 2 * (1 - Math.cos(u) / 2) * Math.sin(u) * Math.cos(v); - } else { - x = 3 * Math.cos(u) * (1 + Math.sin(u)) + 2 * (1 - Math.cos(u) / 2) * Math.cos(v + Math.PI); - z = -8 * Math.sin(u); - } - const y = -2 * (1 - Math.cos(u) / 2) * Math.sin(v); - target.set(x, y, z); - }, - plane: function(width, height) { - return function(u, v, target) { - const x = u * width; - const y = 0; - const z = v * height; - target.set(x, y, z); - }; - }, - mobius: function(u, t, target) { - u = u - .5; - const v = 2 * Math.PI * t; - const a = 2; - const x = Math.cos(v) * (a + u * Math.cos(v / 2)); - const y = Math.sin(v) * (a + u * Math.cos(v / 2)); - const z = u * Math.sin(v / 2); - target.set(x, y, z); - }, - mobius3d: function(u, t, target) { - u *= Math.PI; - t *= 2 * Math.PI; - u = u * 2; - const phi = u / 2; - const major = 2.25, a = .125, b = .65; - let x = a * Math.cos(t) * Math.cos(phi) - b * Math.sin(t) * Math.sin(phi); - const z = a * Math.cos(t) * Math.sin(phi) + b * Math.sin(t) * Math.cos(phi); - const y = (major + x) * Math.sin(u); - x = (major + x) * Math.cos(u); - target.set(x, y, z); - }, - TubeGeometry, - TorusKnotGeometry: class TorusKnotGeometry extends TubeGeometry { - constructor(radius = 200, tube = 40, segmentsT = 64, segmentsR = 8, p = 2, q = 3) { - class TorusKnotCurve extends Curve { - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - t *= Math.PI * 2; - const r = .5; - const x = (1 + r * Math.cos(q * t)) * Math.cos(p * t); - const y = (1 + r * Math.cos(q * t)) * Math.sin(p * t); - const z = r * Math.sin(q * t); - return point.set(x, y, z).multiplyScalar(radius); - } - } - const segments = segmentsT; - const radiusSegments = segmentsR; - const extrudePath = new TorusKnotCurve(); - super(extrudePath, segments, tube, radiusSegments, true, false); - this.radius = radius; - this.tube = tube; - this.segmentsT = segmentsT; - this.segmentsR = segmentsR; - this.p = p; - this.q = q; - } - }, - SphereGeometry: class SphereGeometry extends ParametricGeometry { - constructor(size, u, v) { - function sphere(u2, v2, target) { - u2 *= Math.PI; - v2 *= 2 * Math.PI; - const x = size * Math.sin(u2) * Math.cos(v2); - const y = size * Math.sin(u2) * Math.sin(v2); - const z = size * Math.cos(u2); - target.set(x, y, z); - } - super(sphere, u, v); - } - }, - PlaneGeometry: class PlaneGeometry extends ParametricGeometry { - constructor(width, depth, segmentsWidth, segmentsDepth) { - function plane(u, v, target) { - const x = u * width; - const y = 0; - const z = v * depth; - target.set(x, y, z); - } - super(plane, segmentsWidth, segmentsDepth); - } - } -}; -//#endregion -//#region node_modules/three-stdlib/geometries/RoundedBoxGeometry.js -var tempNormal = /* @__PURE__ */ new Vector3(); -function getUv(faceDirVector, normal, uvAxis, projectionAxis, radius, sideLength) { - const totArcLength = 2 * Math.PI * radius / 4; - const centerLength = Math.max(sideLength - 2 * radius, 0); - const halfArc = Math.PI / 4; - tempNormal.copy(normal); - tempNormal[projectionAxis] = 0; - tempNormal.normalize(); - const arcUvRatio = .5 * totArcLength / (totArcLength + centerLength); - const arcAngleRatio = 1 - tempNormal.angleTo(faceDirVector) / halfArc; - if (Math.sign(tempNormal[uvAxis]) === 1) return arcAngleRatio * arcUvRatio; - else return centerLength / (totArcLength + centerLength) + arcUvRatio + arcUvRatio * (1 - arcAngleRatio); -} -var RoundedBoxGeometry = class extends BoxGeometry { - constructor(width = 1, height = 1, depth = 1, segments = 2, radius = .1) { - segments = segments * 2 + 1; - radius = Math.min(width / 2, height / 2, depth / 2, radius); - super(1, 1, 1, segments, segments, segments); - if (segments === 1) return; - const geometry2 = this.toNonIndexed(); - this.index = null; - this.attributes.position = geometry2.attributes.position; - this.attributes.normal = geometry2.attributes.normal; - this.attributes.uv = geometry2.attributes.uv; - const position = new Vector3(); - const normal = new Vector3(); - const box = new Vector3(width, height, depth).divideScalar(2).subScalar(radius); - const positions = this.attributes.position.array; - const normals = this.attributes.normal.array; - const uvs = this.attributes.uv.array; - const faceTris = positions.length / 6; - const faceDirVector = new Vector3(); - const halfSegmentSize = .5 / segments; - for (let i = 0, j = 0; i < positions.length; i += 3, j += 2) { - position.fromArray(positions, i); - normal.copy(position); - normal.x -= Math.sign(normal.x) * halfSegmentSize; - normal.y -= Math.sign(normal.y) * halfSegmentSize; - normal.z -= Math.sign(normal.z) * halfSegmentSize; - normal.normalize(); - positions[i + 0] = box.x * Math.sign(position.x) + normal.x * radius; - positions[i + 1] = box.y * Math.sign(position.y) + normal.y * radius; - positions[i + 2] = box.z * Math.sign(position.z) + normal.z * radius; - normals[i + 0] = normal.x; - normals[i + 1] = normal.y; - normals[i + 2] = normal.z; - switch (Math.floor(i / faceTris)) { - case 0: - faceDirVector.set(1, 0, 0); - uvs[j + 0] = getUv(faceDirVector, normal, "z", "y", radius, depth); - uvs[j + 1] = 1 - getUv(faceDirVector, normal, "y", "z", radius, height); - break; - case 1: - faceDirVector.set(-1, 0, 0); - uvs[j + 0] = 1 - getUv(faceDirVector, normal, "z", "y", radius, depth); - uvs[j + 1] = 1 - getUv(faceDirVector, normal, "y", "z", radius, height); - break; - case 2: - faceDirVector.set(0, 1, 0); - uvs[j + 0] = 1 - getUv(faceDirVector, normal, "x", "z", radius, width); - uvs[j + 1] = getUv(faceDirVector, normal, "z", "x", radius, depth); - break; - case 3: - faceDirVector.set(0, -1, 0); - uvs[j + 0] = 1 - getUv(faceDirVector, normal, "x", "z", radius, width); - uvs[j + 1] = 1 - getUv(faceDirVector, normal, "z", "x", radius, depth); - break; - case 4: - faceDirVector.set(0, 0, 1); - uvs[j + 0] = 1 - getUv(faceDirVector, normal, "x", "y", radius, width); - uvs[j + 1] = 1 - getUv(faceDirVector, normal, "y", "x", radius, height); - break; - case 5: - faceDirVector.set(0, 0, -1); - uvs[j + 0] = getUv(faceDirVector, normal, "x", "y", radius, width); - uvs[j + 1] = 1 - getUv(faceDirVector, normal, "y", "x", radius, height); - break; - } - } - } -}; -//#endregion -//#region node_modules/three-stdlib/geometries/BoxLineGeometry.js -var BoxLineGeometry = class extends BufferGeometry { - constructor(width, height, depth, widthSegments, heightSegments, depthSegments) { - super(); - width = width || 1; - height = height || 1; - depth = depth || 1; - widthSegments = Math.floor(widthSegments) || 1; - heightSegments = Math.floor(heightSegments) || 1; - depthSegments = Math.floor(depthSegments) || 1; - const widthHalf = width / 2; - const heightHalf = height / 2; - const depthHalf = depth / 2; - const segmentWidth = width / widthSegments; - const segmentHeight = height / heightSegments; - const segmentDepth = depth / depthSegments; - const vertices = []; - let x = -widthHalf, y = -heightHalf, z = -depthHalf; - for (let i = 0; i <= widthSegments; i++) { - vertices.push(x, -heightHalf, -depthHalf, x, heightHalf, -depthHalf); - vertices.push(x, heightHalf, -depthHalf, x, heightHalf, depthHalf); - vertices.push(x, heightHalf, depthHalf, x, -heightHalf, depthHalf); - vertices.push(x, -heightHalf, depthHalf, x, -heightHalf, -depthHalf); - x += segmentWidth; - } - for (let i = 0; i <= heightSegments; i++) { - vertices.push(-widthHalf, y, -depthHalf, widthHalf, y, -depthHalf); - vertices.push(widthHalf, y, -depthHalf, widthHalf, y, depthHalf); - vertices.push(widthHalf, y, depthHalf, -widthHalf, y, depthHalf); - vertices.push(-widthHalf, y, depthHalf, -widthHalf, y, -depthHalf); - y += segmentHeight; - } - for (let i = 0; i <= depthSegments; i++) { - vertices.push(-widthHalf, -heightHalf, z, -widthHalf, heightHalf, z); - vertices.push(-widthHalf, heightHalf, z, widthHalf, heightHalf, z); - vertices.push(widthHalf, heightHalf, z, widthHalf, -heightHalf, z); - vertices.push(widthHalf, -heightHalf, z, -widthHalf, -heightHalf, z); - z += segmentDepth; - } - this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - } -}; -//#endregion -//#region node_modules/three-stdlib/geometries/DecalGeometry.js -var DecalGeometry = class extends BufferGeometry { - constructor(mesh, position, orientation, size) { - super(); - const vertices = []; - const normals = []; - const uvs = []; - const plane = new Vector3(); - const projectorMatrix = new Matrix4(); - projectorMatrix.makeRotationFromEuler(orientation); - projectorMatrix.setPosition(position); - const projectorMatrixInverse = new Matrix4(); - projectorMatrixInverse.copy(projectorMatrix).invert(); - generate(); - this.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - this.setAttribute("normal", new Float32BufferAttribute(normals, 3)); - this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); - function generate() { - let i; - let decalVertices = []; - const vertex = new Vector3(); - const normal = new Vector3(); - if (mesh.geometry.isGeometry === true) { - console.error("THREE.DecalGeometry no longer supports THREE.Geometry. Use BufferGeometry instead."); - return; - } - const geometry = mesh.geometry; - const positionAttribute = geometry.attributes.position; - const normalAttribute = geometry.attributes.normal; - if (geometry.index !== null) { - const index = geometry.index; - for (i = 0; i < index.count; i++) { - vertex.fromBufferAttribute(positionAttribute, index.getX(i)); - normal.fromBufferAttribute(normalAttribute, index.getX(i)); - pushDecalVertex(decalVertices, vertex, normal); - } - } else for (i = 0; i < positionAttribute.count; i++) { - vertex.fromBufferAttribute(positionAttribute, i); - normal.fromBufferAttribute(normalAttribute, i); - pushDecalVertex(decalVertices, vertex, normal); - } - decalVertices = clipGeometry(decalVertices, plane.set(1, 0, 0)); - decalVertices = clipGeometry(decalVertices, plane.set(-1, 0, 0)); - decalVertices = clipGeometry(decalVertices, plane.set(0, 1, 0)); - decalVertices = clipGeometry(decalVertices, plane.set(0, -1, 0)); - decalVertices = clipGeometry(decalVertices, plane.set(0, 0, 1)); - decalVertices = clipGeometry(decalVertices, plane.set(0, 0, -1)); - for (i = 0; i < decalVertices.length; i++) { - const decalVertex = decalVertices[i]; - uvs.push(.5 + decalVertex.position.x / size.x, .5 + decalVertex.position.y / size.y); - decalVertex.position.applyMatrix4(projectorMatrix); - vertices.push(decalVertex.position.x, decalVertex.position.y, decalVertex.position.z); - normals.push(decalVertex.normal.x, decalVertex.normal.y, decalVertex.normal.z); - } - } - function pushDecalVertex(decalVertices, vertex, normal) { - vertex.applyMatrix4(mesh.matrixWorld); - vertex.applyMatrix4(projectorMatrixInverse); - normal.transformDirection(mesh.matrixWorld); - decalVertices.push(new DecalVertex(vertex.clone(), normal.clone())); - } - function clipGeometry(inVertices, plane2) { - const outVertices = []; - const s = .5 * Math.abs(size.dot(plane2)); - for (let i = 0; i < inVertices.length; i += 3) { - let v1Out, v2Out, v3Out, total = 0; - let nV1, nV2, nV3, nV4; - const d1 = inVertices[i + 0].position.dot(plane2) - s; - const d2 = inVertices[i + 1].position.dot(plane2) - s; - const d3 = inVertices[i + 2].position.dot(plane2) - s; - v1Out = d1 > 0; - v2Out = d2 > 0; - v3Out = d3 > 0; - total = (v1Out ? 1 : 0) + (v2Out ? 1 : 0) + (v3Out ? 1 : 0); - switch (total) { - case 0: - outVertices.push(inVertices[i]); - outVertices.push(inVertices[i + 1]); - outVertices.push(inVertices[i + 2]); - break; - case 1: - if (v1Out) { - nV1 = inVertices[i + 1]; - nV2 = inVertices[i + 2]; - nV3 = clip(inVertices[i], nV1, plane2, s); - nV4 = clip(inVertices[i], nV2, plane2, s); - } - if (v2Out) { - nV1 = inVertices[i]; - nV2 = inVertices[i + 2]; - nV3 = clip(inVertices[i + 1], nV1, plane2, s); - nV4 = clip(inVertices[i + 1], nV2, plane2, s); - outVertices.push(nV3); - outVertices.push(nV2.clone()); - outVertices.push(nV1.clone()); - outVertices.push(nV2.clone()); - outVertices.push(nV3.clone()); - outVertices.push(nV4); - break; - } - if (v3Out) { - nV1 = inVertices[i]; - nV2 = inVertices[i + 1]; - nV3 = clip(inVertices[i + 2], nV1, plane2, s); - nV4 = clip(inVertices[i + 2], nV2, plane2, s); - } - outVertices.push(nV1.clone()); - outVertices.push(nV2.clone()); - outVertices.push(nV3); - outVertices.push(nV4); - outVertices.push(nV3.clone()); - outVertices.push(nV2.clone()); - break; - case 2: - if (!v1Out) { - nV1 = inVertices[i].clone(); - nV2 = clip(nV1, inVertices[i + 1], plane2, s); - nV3 = clip(nV1, inVertices[i + 2], plane2, s); - outVertices.push(nV1); - outVertices.push(nV2); - outVertices.push(nV3); - } - if (!v2Out) { - nV1 = inVertices[i + 1].clone(); - nV2 = clip(nV1, inVertices[i + 2], plane2, s); - nV3 = clip(nV1, inVertices[i], plane2, s); - outVertices.push(nV1); - outVertices.push(nV2); - outVertices.push(nV3); - } - if (!v3Out) { - nV1 = inVertices[i + 2].clone(); - nV2 = clip(nV1, inVertices[i], plane2, s); - nV3 = clip(nV1, inVertices[i + 1], plane2, s); - outVertices.push(nV1); - outVertices.push(nV2); - outVertices.push(nV3); - } - break; - } - } - return outVertices; - } - function clip(v0, v1, p, s) { - const d0 = v0.position.dot(p) - s; - const s0 = d0 / (d0 - (v1.position.dot(p) - s)); - return new DecalVertex(new Vector3(v0.position.x + s0 * (v1.position.x - v0.position.x), v0.position.y + s0 * (v1.position.y - v0.position.y), v0.position.z + s0 * (v1.position.z - v0.position.z)), new Vector3(v0.normal.x + s0 * (v1.normal.x - v0.normal.x), v0.normal.y + s0 * (v1.normal.y - v0.normal.y), v0.normal.z + s0 * (v1.normal.z - v0.normal.z))); - } - } -}; -var DecalVertex = class { - constructor(position, normal) { - this.position = position; - this.normal = normal; - } - clone() { - return new this.constructor(this.position.clone(), this.normal.clone()); - } -}; -//#endregion -//#region node_modules/three-stdlib/geometries/TeapotGeometry.js -var TeapotGeometry = class extends BufferGeometry { - constructor(size, segments, bottom, lid, body, fitLid, blinn) { - const teapotPatches = [ - 0, - 1, - 2, - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 12, - 13, - 14, - 15, - 3, - 16, - 17, - 18, - 7, - 19, - 20, - 21, - 11, - 22, - 23, - 24, - 15, - 25, - 26, - 27, - 18, - 28, - 29, - 30, - 21, - 31, - 32, - 33, - 24, - 34, - 35, - 36, - 27, - 37, - 38, - 39, - 30, - 40, - 41, - 0, - 33, - 42, - 43, - 4, - 36, - 44, - 45, - 8, - 39, - 46, - 47, - 12, - 12, - 13, - 14, - 15, - 48, - 49, - 50, - 51, - 52, - 53, - 54, - 55, - 56, - 57, - 58, - 59, - 15, - 25, - 26, - 27, - 51, - 60, - 61, - 62, - 55, - 63, - 64, - 65, - 59, - 66, - 67, - 68, - 27, - 37, - 38, - 39, - 62, - 69, - 70, - 71, - 65, - 72, - 73, - 74, - 68, - 75, - 76, - 77, - 39, - 46, - 47, - 12, - 71, - 78, - 79, - 48, - 74, - 80, - 81, - 52, - 77, - 82, - 83, - 56, - 56, - 57, - 58, - 59, - 84, - 85, - 86, - 87, - 88, - 89, - 90, - 91, - 92, - 93, - 94, - 95, - 59, - 66, - 67, - 68, - 87, - 96, - 97, - 98, - 91, - 99, - 100, - 101, - 95, - 102, - 103, - 104, - 68, - 75, - 76, - 77, - 98, - 105, - 106, - 107, - 101, - 108, - 109, - 110, - 104, - 111, - 112, - 113, - 77, - 82, - 83, - 56, - 107, - 114, - 115, - 84, - 110, - 116, - 117, - 88, - 113, - 118, - 119, - 92, - 120, - 121, - 122, - 123, - 124, - 125, - 126, - 127, - 128, - 129, - 130, - 131, - 132, - 133, - 134, - 135, - 123, - 136, - 137, - 120, - 127, - 138, - 139, - 124, - 131, - 140, - 141, - 128, - 135, - 142, - 143, - 132, - 132, - 133, - 134, - 135, - 144, - 145, - 146, - 147, - 148, - 149, - 150, - 151, - 68, - 152, - 153, - 154, - 135, - 142, - 143, - 132, - 147, - 155, - 156, - 144, - 151, - 157, - 158, - 148, - 154, - 159, - 160, - 68, - 161, - 162, - 163, - 164, - 165, - 166, - 167, - 168, - 169, - 170, - 171, - 172, - 173, - 174, - 175, - 176, - 164, - 177, - 178, - 161, - 168, - 179, - 180, - 165, - 172, - 181, - 182, - 169, - 176, - 183, - 184, - 173, - 173, - 174, - 175, - 176, - 185, - 186, - 187, - 188, - 189, - 190, - 191, - 192, - 193, - 194, - 195, - 196, - 176, - 183, - 184, - 173, - 188, - 197, - 198, - 185, - 192, - 199, - 200, - 189, - 196, - 201, - 202, - 193, - 203, - 203, - 203, - 203, - 204, - 205, - 206, - 207, - 208, - 208, - 208, - 208, - 209, - 210, - 211, - 212, - 203, - 203, - 203, - 203, - 207, - 213, - 214, - 215, - 208, - 208, - 208, - 208, - 212, - 216, - 217, - 218, - 203, - 203, - 203, - 203, - 215, - 219, - 220, - 221, - 208, - 208, - 208, - 208, - 218, - 222, - 223, - 224, - 203, - 203, - 203, - 203, - 221, - 225, - 226, - 204, - 208, - 208, - 208, - 208, - 224, - 227, - 228, - 209, - 209, - 210, - 211, - 212, - 229, - 230, - 231, - 232, - 233, - 234, - 235, - 236, - 237, - 238, - 239, - 240, - 212, - 216, - 217, - 218, - 232, - 241, - 242, - 243, - 236, - 244, - 245, - 246, - 240, - 247, - 248, - 249, - 218, - 222, - 223, - 224, - 243, - 250, - 251, - 252, - 246, - 253, - 254, - 255, - 249, - 256, - 257, - 258, - 224, - 227, - 228, - 209, - 252, - 259, - 260, - 229, - 255, - 261, - 262, - 233, - 258, - 263, - 264, - 237, - 265, - 265, - 265, - 265, - 266, - 267, - 268, - 269, - 270, - 271, - 272, - 273, - 92, - 119, - 118, - 113, - 265, - 265, - 265, - 265, - 269, - 274, - 275, - 276, - 273, - 277, - 278, - 279, - 113, - 112, - 111, - 104, - 265, - 265, - 265, - 265, - 276, - 280, - 281, - 282, - 279, - 283, - 284, - 285, - 104, - 103, - 102, - 95, - 265, - 265, - 265, - 265, - 282, - 286, - 287, - 266, - 285, - 288, - 289, - 270, - 95, - 94, - 93, - 92 - ]; - const teapotVertices = [ - 1.4, - 0, - 2.4, - 1.4, - -.784, - 2.4, - .784, - -1.4, - 2.4, - 0, - -1.4, - 2.4, - 1.3375, - 0, - 2.53125, - 1.3375, - -.749, - 2.53125, - .749, - -1.3375, - 2.53125, - 0, - -1.3375, - 2.53125, - 1.4375, - 0, - 2.53125, - 1.4375, - -.805, - 2.53125, - .805, - -1.4375, - 2.53125, - 0, - -1.4375, - 2.53125, - 1.5, - 0, - 2.4, - 1.5, - -.84, - 2.4, - .84, - -1.5, - 2.4, - 0, - -1.5, - 2.4, - -.784, - -1.4, - 2.4, - -1.4, - -.784, - 2.4, - -1.4, - 0, - 2.4, - -.749, - -1.3375, - 2.53125, - -1.3375, - -.749, - 2.53125, - -1.3375, - 0, - 2.53125, - -.805, - -1.4375, - 2.53125, - -1.4375, - -.805, - 2.53125, - -1.4375, - 0, - 2.53125, - -.84, - -1.5, - 2.4, - -1.5, - -.84, - 2.4, - -1.5, - 0, - 2.4, - -1.4, - .784, - 2.4, - -.784, - 1.4, - 2.4, - 0, - 1.4, - 2.4, - -1.3375, - .749, - 2.53125, - -.749, - 1.3375, - 2.53125, - 0, - 1.3375, - 2.53125, - -1.4375, - .805, - 2.53125, - -.805, - 1.4375, - 2.53125, - 0, - 1.4375, - 2.53125, - -1.5, - .84, - 2.4, - -.84, - 1.5, - 2.4, - 0, - 1.5, - 2.4, - .784, - 1.4, - 2.4, - 1.4, - .784, - 2.4, - .749, - 1.3375, - 2.53125, - 1.3375, - .749, - 2.53125, - .805, - 1.4375, - 2.53125, - 1.4375, - .805, - 2.53125, - .84, - 1.5, - 2.4, - 1.5, - .84, - 2.4, - 1.75, - 0, - 1.875, - 1.75, - -.98, - 1.875, - .98, - -1.75, - 1.875, - 0, - -1.75, - 1.875, - 2, - 0, - 1.35, - 2, - -1.12, - 1.35, - 1.12, - -2, - 1.35, - 0, - -2, - 1.35, - 2, - 0, - .9, - 2, - -1.12, - .9, - 1.12, - -2, - .9, - 0, - -2, - .9, - -.98, - -1.75, - 1.875, - -1.75, - -.98, - 1.875, - -1.75, - 0, - 1.875, - -1.12, - -2, - 1.35, - -2, - -1.12, - 1.35, - -2, - 0, - 1.35, - -1.12, - -2, - .9, - -2, - -1.12, - .9, - -2, - 0, - .9, - -1.75, - .98, - 1.875, - -.98, - 1.75, - 1.875, - 0, - 1.75, - 1.875, - -2, - 1.12, - 1.35, - -1.12, - 2, - 1.35, - 0, - 2, - 1.35, - -2, - 1.12, - .9, - -1.12, - 2, - .9, - 0, - 2, - .9, - .98, - 1.75, - 1.875, - 1.75, - .98, - 1.875, - 1.12, - 2, - 1.35, - 2, - 1.12, - 1.35, - 1.12, - 2, - .9, - 2, - 1.12, - .9, - 2, - 0, - .45, - 2, - -1.12, - .45, - 1.12, - -2, - .45, - 0, - -2, - .45, - 1.5, - 0, - .225, - 1.5, - -.84, - .225, - .84, - -1.5, - .225, - 0, - -1.5, - .225, - 1.5, - 0, - .15, - 1.5, - -.84, - .15, - .84, - -1.5, - .15, - 0, - -1.5, - .15, - -1.12, - -2, - .45, - -2, - -1.12, - .45, - -2, - 0, - .45, - -.84, - -1.5, - .225, - -1.5, - -.84, - .225, - -1.5, - 0, - .225, - -.84, - -1.5, - .15, - -1.5, - -.84, - .15, - -1.5, - 0, - .15, - -2, - 1.12, - .45, - -1.12, - 2, - .45, - 0, - 2, - .45, - -1.5, - .84, - .225, - -.84, - 1.5, - .225, - 0, - 1.5, - .225, - -1.5, - .84, - .15, - -.84, - 1.5, - .15, - 0, - 1.5, - .15, - 1.12, - 2, - .45, - 2, - 1.12, - .45, - .84, - 1.5, - .225, - 1.5, - .84, - .225, - .84, - 1.5, - .15, - 1.5, - .84, - .15, - -1.6, - 0, - 2.025, - -1.6, - -.3, - 2.025, - -1.5, - -.3, - 2.25, - -1.5, - 0, - 2.25, - -2.3, - 0, - 2.025, - -2.3, - -.3, - 2.025, - -2.5, - -.3, - 2.25, - -2.5, - 0, - 2.25, - -2.7, - 0, - 2.025, - -2.7, - -.3, - 2.025, - -3, - -.3, - 2.25, - -3, - 0, - 2.25, - -2.7, - 0, - 1.8, - -2.7, - -.3, - 1.8, - -3, - -.3, - 1.8, - -3, - 0, - 1.8, - -1.5, - .3, - 2.25, - -1.6, - .3, - 2.025, - -2.5, - .3, - 2.25, - -2.3, - .3, - 2.025, - -3, - .3, - 2.25, - -2.7, - .3, - 2.025, - -3, - .3, - 1.8, - -2.7, - .3, - 1.8, - -2.7, - 0, - 1.575, - -2.7, - -.3, - 1.575, - -3, - -.3, - 1.35, - -3, - 0, - 1.35, - -2.5, - 0, - 1.125, - -2.5, - -.3, - 1.125, - -2.65, - -.3, - .9375, - -2.65, - 0, - .9375, - -2, - -.3, - .9, - -1.9, - -.3, - .6, - -1.9, - 0, - .6, - -3, - .3, - 1.35, - -2.7, - .3, - 1.575, - -2.65, - .3, - .9375, - -2.5, - .3, - 1.125, - -1.9, - .3, - .6, - -2, - .3, - .9, - 1.7, - 0, - 1.425, - 1.7, - -.66, - 1.425, - 1.7, - -.66, - .6, - 1.7, - 0, - .6, - 2.6, - 0, - 1.425, - 2.6, - -.66, - 1.425, - 3.1, - -.66, - .825, - 3.1, - 0, - .825, - 2.3, - 0, - 2.1, - 2.3, - -.25, - 2.1, - 2.4, - -.25, - 2.025, - 2.4, - 0, - 2.025, - 2.7, - 0, - 2.4, - 2.7, - -.25, - 2.4, - 3.3, - -.25, - 2.4, - 3.3, - 0, - 2.4, - 1.7, - .66, - .6, - 1.7, - .66, - 1.425, - 3.1, - .66, - .825, - 2.6, - .66, - 1.425, - 2.4, - .25, - 2.025, - 2.3, - .25, - 2.1, - 3.3, - .25, - 2.4, - 2.7, - .25, - 2.4, - 2.8, - 0, - 2.475, - 2.8, - -.25, - 2.475, - 3.525, - -.25, - 2.49375, - 3.525, - 0, - 2.49375, - 2.9, - 0, - 2.475, - 2.9, - -.15, - 2.475, - 3.45, - -.15, - 2.5125, - 3.45, - 0, - 2.5125, - 2.8, - 0, - 2.4, - 2.8, - -.15, - 2.4, - 3.2, - -.15, - 2.4, - 3.2, - 0, - 2.4, - 3.525, - .25, - 2.49375, - 2.8, - .25, - 2.475, - 3.45, - .15, - 2.5125, - 2.9, - .15, - 2.475, - 3.2, - .15, - 2.4, - 2.8, - .15, - 2.4, - 0, - 0, - 3.15, - .8, - 0, - 3.15, - .8, - -.45, - 3.15, - .45, - -.8, - 3.15, - 0, - -.8, - 3.15, - 0, - 0, - 2.85, - .2, - 0, - 2.7, - .2, - -.112, - 2.7, - .112, - -.2, - 2.7, - 0, - -.2, - 2.7, - -.45, - -.8, - 3.15, - -.8, - -.45, - 3.15, - -.8, - 0, - 3.15, - -.112, - -.2, - 2.7, - -.2, - -.112, - 2.7, - -.2, - 0, - 2.7, - -.8, - .45, - 3.15, - -.45, - .8, - 3.15, - 0, - .8, - 3.15, - -.2, - .112, - 2.7, - -.112, - .2, - 2.7, - 0, - .2, - 2.7, - .45, - .8, - 3.15, - .8, - .45, - 3.15, - .112, - .2, - 2.7, - .2, - .112, - 2.7, - .4, - 0, - 2.55, - .4, - -.224, - 2.55, - .224, - -.4, - 2.55, - 0, - -.4, - 2.55, - 1.3, - 0, - 2.55, - 1.3, - -.728, - 2.55, - .728, - -1.3, - 2.55, - 0, - -1.3, - 2.55, - 1.3, - 0, - 2.4, - 1.3, - -.728, - 2.4, - .728, - -1.3, - 2.4, - 0, - -1.3, - 2.4, - -.224, - -.4, - 2.55, - -.4, - -.224, - 2.55, - -.4, - 0, - 2.55, - -.728, - -1.3, - 2.55, - -1.3, - -.728, - 2.55, - -1.3, - 0, - 2.55, - -.728, - -1.3, - 2.4, - -1.3, - -.728, - 2.4, - -1.3, - 0, - 2.4, - -.4, - .224, - 2.55, - -.224, - .4, - 2.55, - 0, - .4, - 2.55, - -1.3, - .728, - 2.55, - -.728, - 1.3, - 2.55, - 0, - 1.3, - 2.55, - -1.3, - .728, - 2.4, - -.728, - 1.3, - 2.4, - 0, - 1.3, - 2.4, - .224, - .4, - 2.55, - .4, - .224, - 2.55, - .728, - 1.3, - 2.55, - 1.3, - .728, - 2.55, - .728, - 1.3, - 2.4, - 1.3, - .728, - 2.4, - 0, - 0, - 0, - 1.425, - 0, - 0, - 1.425, - .798, - 0, - .798, - 1.425, - 0, - 0, - 1.425, - 0, - 1.5, - 0, - .075, - 1.5, - .84, - .075, - .84, - 1.5, - .075, - 0, - 1.5, - .075, - -.798, - 1.425, - 0, - -1.425, - .798, - 0, - -1.425, - 0, - 0, - -.84, - 1.5, - .075, - -1.5, - .84, - .075, - -1.5, - 0, - .075, - -1.425, - -.798, - 0, - -.798, - -1.425, - 0, - 0, - -1.425, - 0, - -1.5, - -.84, - .075, - -.84, - -1.5, - .075, - 0, - -1.5, - .075, - .798, - -1.425, - 0, - 1.425, - -.798, - 0, - .84, - -1.5, - .075, - 1.5, - -.84, - .075 - ]; - super(); - size = size || 50; - segments = segments !== void 0 ? Math.max(2, Math.floor(segments) || 10) : 10; - bottom = bottom === void 0 ? true : bottom; - lid = lid === void 0 ? true : lid; - body = body === void 0 ? true : body; - fitLid = fitLid === void 0 ? true : fitLid; - const blinnScale = 1.3; - blinn = blinn === void 0 ? true : blinn; - const maxHeight2 = 3.15 * (blinn ? 1 : blinnScale) / 2; - const trueSize = size / maxHeight2; - let numTriangles = bottom ? (8 * segments - 4) * segments : 0; - numTriangles += lid ? (16 * segments - 4) * segments : 0; - numTriangles += body ? 40 * segments * segments : 0; - const indices = new Uint32Array(numTriangles * 3); - let numVertices = bottom ? 4 : 0; - numVertices += lid ? 8 : 0; - numVertices += body ? 20 : 0; - numVertices *= (segments + 1) * (segments + 1); - const vertices = new Float32Array(numVertices * 3); - const normals = new Float32Array(numVertices * 3); - const uvs = new Float32Array(numVertices * 2); - const ms = new Matrix4(); - ms.set(-1, 3, -3, 1, 3, -6, 3, 0, -3, 3, 0, 0, 1, 0, 0, 0); - const g = []; - let i, r, c; - const sp = []; - const tp = []; - const dsp = []; - const dtp = []; - const mgm = []; - const vert = []; - const sdir = []; - const tdir = []; - const norm = new Vector3(); - let tcoord; - let sstep, tstep; - let vertPerRow; - let s, t, sval, tval, p; - let dsval = 0; - let dtval = 0; - const normOut = new Vector3(); - let v1, v2, v3, v4; - const gmx = new Matrix4(); - const tmtx = new Matrix4(); - const vsp = new Vector4(); - const vtp = new Vector4(); - const vdsp = new Vector4(); - const vdtp = new Vector4(); - const vsdir = new Vector3(); - const vtdir = new Vector3(); - const mst = ms.clone(); - mst.transpose(); - const notDegenerate = (vtx1, vtx2, vtx3) => !(vertices[vtx1 * 3] === vertices[vtx2 * 3] && vertices[vtx1 * 3 + 1] === vertices[vtx2 * 3 + 1] && vertices[vtx1 * 3 + 2] === vertices[vtx2 * 3 + 2] || vertices[vtx1 * 3] === vertices[vtx3 * 3] && vertices[vtx1 * 3 + 1] === vertices[vtx3 * 3 + 1] && vertices[vtx1 * 3 + 2] === vertices[vtx3 * 3 + 2] || vertices[vtx2 * 3] === vertices[vtx3 * 3] && vertices[vtx2 * 3 + 1] === vertices[vtx3 * 3 + 1] && vertices[vtx2 * 3 + 2] === vertices[vtx3 * 3 + 2]); - for (i = 0; i < 3; i++) mgm[i] = new Matrix4(); - const minPatches = body ? 0 : 20; - const maxPatches = bottom ? 32 : 28; - vertPerRow = segments + 1; - let surfCount = 0; - let vertCount = 0; - let normCount = 0; - let uvCount = 0; - let indexCount = 0; - for (let surf = minPatches; surf < maxPatches; surf++) if (lid || surf < 20 || surf >= 28) { - for (i = 0; i < 3; i++) { - for (r = 0; r < 4; r++) for (c = 0; c < 4; c++) { - g[c * 4 + r] = teapotVertices[teapotPatches[surf * 16 + r * 4 + c] * 3 + i]; - if (fitLid && surf >= 20 && surf < 28 && i !== 2) g[c * 4 + r] *= 1.077; - if (!blinn && i === 2) g[c * 4 + r] *= blinnScale; - } - gmx.set(g[0], g[1], g[2], g[3], g[4], g[5], g[6], g[7], g[8], g[9], g[10], g[11], g[12], g[13], g[14], g[15]); - tmtx.multiplyMatrices(gmx, ms); - mgm[i].multiplyMatrices(mst, tmtx); - } - for (sstep = 0; sstep <= segments; sstep++) { - s = sstep / segments; - for (tstep = 0; tstep <= segments; tstep++) { - t = tstep / segments; - for (p = 4, sval = tval = 1; p--;) { - sp[p] = sval; - tp[p] = tval; - sval *= s; - tval *= t; - if (p === 3) { - dsp[p] = dtp[p] = 0; - dsval = dtval = 1; - } else { - dsp[p] = dsval * (3 - p); - dtp[p] = dtval * (3 - p); - dsval *= s; - dtval *= t; - } - } - vsp.fromArray(sp); - vtp.fromArray(tp); - vdsp.fromArray(dsp); - vdtp.fromArray(dtp); - for (i = 0; i < 3; i++) { - tcoord = vsp.clone(); - tcoord.applyMatrix4(mgm[i]); - vert[i] = tcoord.dot(vtp); - tcoord = vdsp.clone(); - tcoord.applyMatrix4(mgm[i]); - sdir[i] = tcoord.dot(vtp); - tcoord = vsp.clone(); - tcoord.applyMatrix4(mgm[i]); - tdir[i] = tcoord.dot(vdtp); - } - vsdir.fromArray(sdir); - vtdir.fromArray(tdir); - norm.crossVectors(vtdir, vsdir); - norm.normalize(); - if (vert[0] === 0 && vert[1] === 0) normOut.set(0, vert[2] > maxHeight2 ? 1 : -1, 0); - else normOut.set(norm.x, norm.z, -norm.y); - vertices[vertCount++] = trueSize * vert[0]; - vertices[vertCount++] = trueSize * (vert[2] - maxHeight2); - vertices[vertCount++] = -trueSize * vert[1]; - normals[normCount++] = normOut.x; - normals[normCount++] = normOut.y; - normals[normCount++] = normOut.z; - uvs[uvCount++] = 1 - t; - uvs[uvCount++] = 1 - s; - } - } - for (sstep = 0; sstep < segments; sstep++) for (tstep = 0; tstep < segments; tstep++) { - v1 = surfCount * vertPerRow * vertPerRow + sstep * vertPerRow + tstep; - v2 = v1 + 1; - v3 = v2 + vertPerRow; - v4 = v1 + vertPerRow; - if (notDegenerate(v1, v2, v3)) { - indices[indexCount++] = v1; - indices[indexCount++] = v2; - indices[indexCount++] = v3; - } - if (notDegenerate(v1, v3, v4)) { - indices[indexCount++] = v1; - indices[indexCount++] = v3; - indices[indexCount++] = v4; - } - } - surfCount++; - } - this.setIndex(new BufferAttribute(indices, 1)); - this.setAttribute("position", new BufferAttribute(vertices, 3)); - this.setAttribute("normal", new BufferAttribute(normals, 3)); - this.setAttribute("uv", new BufferAttribute(uvs, 2)); - this.computeBoundingSphere(); - } -}; -//#endregion -//#region node_modules/three-stdlib/geometries/TextGeometry.js -var TextGeometry = class extends ExtrudeGeometry { - constructor(text, parameters = {}) { - const { bevelEnabled = false, bevelSize = 8, bevelThickness = 10, font, height = 50, size = 100, lineHeight = 1, letterSpacing = 0, ...rest } = parameters; - if (font === void 0) super(); - else { - const shapes = font.generateShapes(text, size, { - lineHeight, - letterSpacing - }); - super(shapes, { - ...rest, - bevelEnabled, - bevelSize, - bevelThickness, - depth: height - }); - } - this.type = "TextGeometry"; - } -}; -//#endregion -//#region node_modules/three-stdlib/csm/CSMFrustum.js -var inverseProjectionMatrix = /* @__PURE__ */ new Matrix4(); -var CSMFrustum = class CSMFrustum { - constructor(data) { - data = data || {}; - this.vertices = { - near: [ - new Vector3(), - new Vector3(), - new Vector3(), - new Vector3() - ], - far: [ - new Vector3(), - new Vector3(), - new Vector3(), - new Vector3() - ] - }; - if (data.projectionMatrix !== void 0) this.setFromProjectionMatrix(data.projectionMatrix, data.maxFar || 1e4); - } - setFromProjectionMatrix(projectionMatrix, maxFar) { - const isOrthographic = projectionMatrix.elements[11] === 0; - inverseProjectionMatrix.copy(projectionMatrix).invert(); - this.vertices.near[0].set(1, 1, -1); - this.vertices.near[1].set(1, -1, -1); - this.vertices.near[2].set(-1, -1, -1); - this.vertices.near[3].set(-1, 1, -1); - this.vertices.near.forEach(function(v) { - v.applyMatrix4(inverseProjectionMatrix); - }); - this.vertices.far[0].set(1, 1, 1); - this.vertices.far[1].set(1, -1, 1); - this.vertices.far[2].set(-1, -1, 1); - this.vertices.far[3].set(-1, 1, 1); - this.vertices.far.forEach(function(v) { - v.applyMatrix4(inverseProjectionMatrix); - const absZ = Math.abs(v.z); - if (isOrthographic) v.z *= Math.min(maxFar / absZ, 1); - else v.multiplyScalar(Math.min(maxFar / absZ, 1)); - }); - return this.vertices; - } - split(breaks, target) { - while (breaks.length > target.length) target.push(new CSMFrustum()); - target.length = breaks.length; - for (let i = 0; i < breaks.length; i++) { - const cascade = target[i]; - if (i === 0) for (let j = 0; j < 4; j++) cascade.vertices.near[j].copy(this.vertices.near[j]); - else for (let j = 0; j < 4; j++) cascade.vertices.near[j].lerpVectors(this.vertices.near[j], this.vertices.far[j], breaks[i - 1]); - if (i === breaks.length - 1) for (let j = 0; j < 4; j++) cascade.vertices.far[j].copy(this.vertices.far[j]); - else for (let j = 0; j < 4; j++) cascade.vertices.far[j].lerpVectors(this.vertices.near[j], this.vertices.far[j], breaks[i]); - } - } - toSpace(cameraMatrix, target) { - for (let i = 0; i < 4; i++) { - target.vertices.near[i].copy(this.vertices.near[i]).applyMatrix4(cameraMatrix); - target.vertices.far[i].copy(this.vertices.far[i]).applyMatrix4(cameraMatrix); - } - } -}; -//#endregion -//#region node_modules/three-stdlib/csm/CSMShader.js -var CSMShader = { - lights_fragment_begin: ` -GeometricContext geometry; - -geometry.position = - vViewPosition; -geometry.normal = normal; -geometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition ); - -#ifdef CLEARCOAT - - geometry.clearcoatNormal = clearcoatNormal; - -#endif - -IncidentLight directLight; - -#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct ) - - PointLight pointLight; - #if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0 - PointLightShadow pointLightShadow; - #endif - - #pragma unroll_loop_start - for ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) { - - pointLight = pointLights[ i ]; - - getPointLightInfo( pointLight, geometry, directLight ); - - #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS ) - pointLightShadow = pointLightShadows[ i ]; - directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0; - #endif - - RE_Direct( directLight, geometry, material, reflectedLight ); - - } - #pragma unroll_loop_end - -#endif - -#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct ) - - SpotLight spotLight; - #if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0 - SpotLightShadow spotLightShadow; - #endif - - #pragma unroll_loop_start - for ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) { - - spotLight = spotLights[ i ]; - - getSpotLightInfo( spotLight, geometry, directLight ); - - #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS ) - spotLightShadow = spotLightShadows[ i ]; - directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0; - #endif - - RE_Direct( directLight, geometry, material, reflectedLight ); - - } - #pragma unroll_loop_end - -#endif - -#if ( NUM_DIR_LIGHTS > 0) && defined( RE_Direct ) && defined( USE_CSM ) && defined( CSM_CASCADES ) - - DirectionalLight directionalLight; - float linearDepth = (vViewPosition.z) / (shadowFar - cameraNear); - #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0 - DirectionalLightShadow directionalLightShadow; - #endif - - #if defined( USE_SHADOWMAP ) && defined( CSM_FADE ) - vec2 cascade; - float cascadeCenter; - float closestEdge; - float margin; - float csmx; - float csmy; - - #pragma unroll_loop_start - for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) { - - directionalLight = directionalLights[ i ]; - getDirectionalLightInfo( directionalLight, geometry, directLight ); - - #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS ) - // NOTE: Depth gets larger away from the camera. - // cascade.x is closer, cascade.y is further - cascade = CSM_cascades[ i ]; - cascadeCenter = ( cascade.x + cascade.y ) / 2.0; - closestEdge = linearDepth < cascadeCenter ? cascade.x : cascade.y; - margin = 0.25 * pow( closestEdge, 2.0 ); - csmx = cascade.x - margin / 2.0; - csmy = cascade.y + margin / 2.0; - if( linearDepth >= csmx && ( linearDepth < csmy || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 ) ) { - - float dist = min( linearDepth - csmx, csmy - linearDepth ); - float ratio = clamp( dist / margin, 0.0, 1.0 ); - - vec3 prevColor = directLight.color; - directionalLightShadow = directionalLightShadows[ i ]; - directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; - - bool shouldFadeLastCascade = UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 && linearDepth > cascadeCenter; - directLight.color = mix( prevColor, directLight.color, shouldFadeLastCascade ? ratio : 1.0 ); - - ReflectedLight prevLight = reflectedLight; - RE_Direct( directLight, geometry, material, reflectedLight ); - - bool shouldBlend = UNROLLED_LOOP_INDEX != CSM_CASCADES - 1 || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 && linearDepth < cascadeCenter; - float blendRatio = shouldBlend ? ratio : 1.0; - - reflectedLight.directDiffuse = mix( prevLight.directDiffuse, reflectedLight.directDiffuse, blendRatio ); - reflectedLight.directSpecular = mix( prevLight.directSpecular, reflectedLight.directSpecular, blendRatio ); - reflectedLight.indirectDiffuse = mix( prevLight.indirectDiffuse, reflectedLight.indirectDiffuse, blendRatio ); - reflectedLight.indirectSpecular = mix( prevLight.indirectSpecular, reflectedLight.indirectSpecular, blendRatio ); - - } - #endif - - } - #pragma unroll_loop_end - #else - - #pragma unroll_loop_start - for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) { - - directionalLight = directionalLights[ i ]; - getDirectionalLightInfo( directionalLight, geometry, directLight ); - - #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS ) - - directionalLightShadow = directionalLightShadows[ i ]; - if(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y) directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; - - if(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && (linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1)) RE_Direct( directLight, geometry, material, reflectedLight ); - - #endif - - } - #pragma unroll_loop_end - - #endif - - #if ( NUM_DIR_LIGHTS > NUM_DIR_LIGHT_SHADOWS) - // compute the lights not casting shadows (if any) - - #pragma unroll_loop_start - for ( int i = NUM_DIR_LIGHT_SHADOWS; i < NUM_DIR_LIGHTS; i ++ ) { - - directionalLight = directionalLights[ i ]; - - getDirectionalLightInfo( directionalLight, geometry, directLight ); - - RE_Direct( directLight, geometry, material, reflectedLight ); - - } - #pragma unroll_loop_end - - #endif - -#endif - - -#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) && !defined( USE_CSM ) && !defined( CSM_CASCADES ) - - DirectionalLight directionalLight; - #if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0 - DirectionalLightShadow directionalLightShadow; - #endif - - #pragma unroll_loop_start - for ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) { - - directionalLight = directionalLights[ i ]; - - getDirectionalLightInfo( directionalLight, geometry, directLight ); - - #if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS ) - directionalLightShadow = directionalLightShadows[ i ]; - directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0; - #endif - - RE_Direct( directLight, geometry, material, reflectedLight ); - - } - #pragma unroll_loop_end - -#endif - -#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea ) - - RectAreaLight rectAreaLight; - - #pragma unroll_loop_start - for ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) { - - rectAreaLight = rectAreaLights[ i ]; - RE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight ); - - } - #pragma unroll_loop_end - -#endif - -#if defined( RE_IndirectDiffuse ) - - vec3 iblIrradiance = vec3( 0.0 ); - - vec3 irradiance = getAmbientLightIrradiance( ambientLightColor ); - - irradiance += getLightProbeIrradiance( lightProbe, geometry.normal ); - - #if ( NUM_HEMI_LIGHTS > 0 ) - - #pragma unroll_loop_start - for ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) { - - irradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal ); - - } - #pragma unroll_loop_end - - #endif - -#endif - -#if defined( RE_IndirectSpecular ) - - vec3 radiance = vec3( 0.0 ); - vec3 clearcoatRadiance = vec3( 0.0 ); - -#endif -`, - getlights_pars_begin() { - return ` - #if defined( USE_CSM ) && defined( CSM_CASCADES ) - uniform vec2 CSM_cascades[CSM_CASCADES]; - uniform float cameraNear; - uniform float shadowFar; - #endif - - ${ShaderChunk.lights_pars_begin} - `; - } -}; -//#endregion -//#region node_modules/three-stdlib/csm/CSM.js -var _cameraToLightMatrix = /* @__PURE__ */ new Matrix4(); -var _lightSpaceFrustum = /* @__PURE__ */ new CSMFrustum(); -var _center = /* @__PURE__ */ new Vector3(); -var _bbox = /* @__PURE__ */ new Box3(); -var _uniformArray = []; -var _logArray = []; -var CSM = class { - constructor(data) { - data = data || {}; - this.camera = data.camera; - this.parent = data.parent; - this.cascades = data.cascades || 3; - this.maxFar = data.maxFar || 1e5; - this.mode = data.mode || "practical"; - this.shadowMapSize = data.shadowMapSize || 2048; - this.shadowBias = data.shadowBias || 1e-6; - this.lightDirection = data.lightDirection || new Vector3(1, -1, 1).normalize(); - this.lightIntensity = data.lightIntensity || 1; - this.lightNear = data.lightNear || 1; - this.lightFar = data.lightFar || 2e3; - this.lightMargin = data.lightMargin || 200; - this.customSplitsCallback = data.customSplitsCallback; - this.fade = false; - this.mainFrustum = new CSMFrustum(); - this.frustums = []; - this.breaks = []; - this.lights = []; - this.shaders = /* @__PURE__ */ new Map(); - this.createLights(); - this.updateFrustums(); - this.injectInclude(); - } - createLights() { - for (let i = 0; i < this.cascades; i++) { - const light = new DirectionalLight(16777215, this.lightIntensity); - light.castShadow = true; - light.shadow.mapSize.width = this.shadowMapSize; - light.shadow.mapSize.height = this.shadowMapSize; - light.shadow.camera.near = this.lightNear; - light.shadow.camera.far = this.lightFar; - light.shadow.bias = this.shadowBias; - this.parent.add(light); - this.parent.add(light.target); - this.lights.push(light); - } - } - initCascades() { - const camera = this.camera; - camera.updateProjectionMatrix(); - this.mainFrustum.setFromProjectionMatrix(camera.projectionMatrix, this.maxFar); - this.mainFrustum.split(this.breaks, this.frustums); - } - updateShadowBounds() { - const frustums = this.frustums; - for (let i = 0; i < frustums.length; i++) { - const shadowCam = this.lights[i].shadow.camera; - const frustum = this.frustums[i]; - const nearVerts = frustum.vertices.near; - const farVerts = frustum.vertices.far; - const point1 = farVerts[0]; - let point2; - if (point1.distanceTo(farVerts[2]) > point1.distanceTo(nearVerts[2])) point2 = farVerts[2]; - else point2 = nearVerts[2]; - let squaredBBWidth = point1.distanceTo(point2); - if (this.fade) { - const camera = this.camera; - const far = Math.max(camera.far, this.maxFar); - const linearDepth = frustum.vertices.far[0].z / (far - camera.near); - const margin = .25 * Math.pow(linearDepth, 2) * (far - camera.near); - squaredBBWidth += margin; - } - shadowCam.left = -squaredBBWidth / 2; - shadowCam.right = squaredBBWidth / 2; - shadowCam.top = squaredBBWidth / 2; - shadowCam.bottom = -squaredBBWidth / 2; - shadowCam.updateProjectionMatrix(); - } - } - getBreaks() { - const camera = this.camera; - const far = Math.min(camera.far, this.maxFar); - this.breaks.length = 0; - switch (this.mode) { - case "uniform": - uniformSplit(this.cascades, camera.near, far, this.breaks); - break; - case "logarithmic": - logarithmicSplit(this.cascades, camera.near, far, this.breaks); - break; - case "practical": - practicalSplit(this.cascades, camera.near, far, .5, this.breaks); - break; - case "custom": - if (this.customSplitsCallback === void 0) console.error("CSM: Custom split scheme callback not defined."); - this.customSplitsCallback(this.cascades, camera.near, far, this.breaks); - break; - } - function uniformSplit(amount, near, far2, target) { - for (let i = 1; i < amount; i++) target.push((near + (far2 - near) * i / amount) / far2); - target.push(1); - } - function logarithmicSplit(amount, near, far2, target) { - for (let i = 1; i < amount; i++) target.push(near * (far2 / near) ** (i / amount) / far2); - target.push(1); - } - function practicalSplit(amount, near, far2, lambda, target) { - _uniformArray.length = 0; - _logArray.length = 0; - logarithmicSplit(amount, near, far2, _logArray); - uniformSplit(amount, near, far2, _uniformArray); - for (let i = 1; i < amount; i++) target.push(MathUtils.lerp(_uniformArray[i - 1], _logArray[i - 1], lambda)); - target.push(1); - } - } - update() { - const camera = this.camera; - const frustums = this.frustums; - for (let i = 0; i < frustums.length; i++) { - const light = this.lights[i]; - const shadowCam = light.shadow.camera; - const texelWidth = (shadowCam.right - shadowCam.left) / this.shadowMapSize; - const texelHeight = (shadowCam.top - shadowCam.bottom) / this.shadowMapSize; - light.shadow.camera.updateMatrixWorld(true); - _cameraToLightMatrix.multiplyMatrices(light.shadow.camera.matrixWorldInverse, camera.matrixWorld); - frustums[i].toSpace(_cameraToLightMatrix, _lightSpaceFrustum); - const nearVerts = _lightSpaceFrustum.vertices.near; - const farVerts = _lightSpaceFrustum.vertices.far; - _bbox.makeEmpty(); - for (let j = 0; j < 4; j++) { - _bbox.expandByPoint(nearVerts[j]); - _bbox.expandByPoint(farVerts[j]); - } - _bbox.getCenter(_center); - _center.z = _bbox.max.z + this.lightMargin; - _center.x = Math.floor(_center.x / texelWidth) * texelWidth; - _center.y = Math.floor(_center.y / texelHeight) * texelHeight; - _center.applyMatrix4(light.shadow.camera.matrixWorld); - light.position.copy(_center); - light.target.position.copy(_center); - light.target.position.x += this.lightDirection.x; - light.target.position.y += this.lightDirection.y; - light.target.position.z += this.lightDirection.z; - } - } - injectInclude() { - ShaderChunk.lights_fragment_begin = CSMShader.lights_fragment_begin; - ShaderChunk.lights_pars_begin = CSMShader.lights_pars_begin; - } - setupMaterial(material) { - material.defines = material.defines || {}; - material.defines.USE_CSM = 1; - material.defines.CSM_CASCADES = this.cascades; - if (this.fade) material.defines.CSM_FADE = ""; - const breaksVec2 = []; - const scope = this; - const shaders = this.shaders; - material.onBeforeCompile = function(shader) { - const far = Math.min(scope.camera.far, scope.maxFar); - scope.getExtendedBreaks(breaksVec2); - shader.uniforms.CSM_cascades = { value: breaksVec2 }; - shader.uniforms.cameraNear = { value: scope.camera.near }; - shader.uniforms.shadowFar = { value: far }; - shaders.set(material, shader); - }; - shaders.set(material, null); - } - updateUniforms() { - const far = Math.min(this.camera.far, this.maxFar); - this.shaders.forEach(function(shader, material) { - if (shader !== null) { - const uniforms = shader.uniforms; - this.getExtendedBreaks(uniforms.CSM_cascades.value); - uniforms.cameraNear.value = this.camera.near; - uniforms.shadowFar.value = far; - } - if (!this.fade && "CSM_FADE" in material.defines) { - delete material.defines.CSM_FADE; - material.needsUpdate = true; - } else if (this.fade && !("CSM_FADE" in material.defines)) { - material.defines.CSM_FADE = ""; - material.needsUpdate = true; - } - }, this); - } - getExtendedBreaks(target) { - while (target.length < this.breaks.length) target.push(new Vector2()); - target.length = this.breaks.length; - for (let i = 0; i < this.cascades; i++) { - const amount = this.breaks[i]; - const prev = this.breaks[i - 1] || 0; - target[i].x = prev; - target[i].y = amount; - } - } - updateFrustums() { - this.getBreaks(); - this.initCascades(); - this.updateShadowBounds(); - this.updateUniforms(); - } - remove() { - for (let i = 0; i < this.lights.length; i++) this.parent.remove(this.lights[i]); - } - dispose() { - const shaders = this.shaders; - shaders.forEach(function(shader, material) { - delete material.onBeforeCompile; - delete material.defines.USE_CSM; - delete material.defines.CSM_CASCADES; - delete material.defines.CSM_FADE; - if (shader !== null) { - delete shader.uniforms.CSM_cascades; - delete shader.uniforms.cameraNear; - delete shader.uniforms.shadowFar; - } - material.needsUpdate = true; - }); - shaders.clear(); - } -}; -//#endregion -//#region node_modules/three-stdlib/csm/CSMHelper.js -var CSMHelper = class extends Group { - constructor(csm) { - super(); - this.csm = csm; - this.displayFrustum = true; - this.displayPlanes = true; - this.displayShadowBounds = true; - const indices = 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 - ]); - const positions = new Float32Array(24); - const frustumGeometry = new BufferGeometry(); - frustumGeometry.setIndex(new BufferAttribute(indices, 1)); - frustumGeometry.setAttribute("position", new BufferAttribute(positions, 3, false)); - const frustumLines = new LineSegments(frustumGeometry, new LineBasicMaterial()); - this.add(frustumLines); - this.frustumLines = frustumLines; - this.cascadeLines = []; - this.cascadePlanes = []; - this.shadowLines = []; - } - updateVisibility() { - const displayFrustum = this.displayFrustum; - const displayPlanes = this.displayPlanes; - const displayShadowBounds = this.displayShadowBounds; - const frustumLines = this.frustumLines; - const cascadeLines = this.cascadeLines; - const cascadePlanes = this.cascadePlanes; - const shadowLines = this.shadowLines; - for (let i = 0, l = cascadeLines.length; i < l; i++) { - const cascadeLine = cascadeLines[i]; - const cascadePlane = cascadePlanes[i]; - const shadowLineGroup = shadowLines[i]; - cascadeLine.visible = displayFrustum; - cascadePlane.visible = displayFrustum && displayPlanes; - shadowLineGroup.visible = displayShadowBounds; - } - frustumLines.visible = displayFrustum; - } - update() { - const csm = this.csm; - const camera = csm.camera; - const cascades = csm.cascades; - const mainFrustum = csm.mainFrustum; - const frustums = csm.frustums; - const lights = csm.lights; - const frustumLinePositions = this.frustumLines.geometry.getAttribute("position"); - const cascadeLines = this.cascadeLines; - const cascadePlanes = this.cascadePlanes; - const shadowLines = this.shadowLines; - this.position.copy(camera.position); - this.quaternion.copy(camera.quaternion); - this.scale.copy(camera.scale); - this.updateMatrixWorld(true); - while (cascadeLines.length > cascades) { - this.remove(cascadeLines.pop()); - this.remove(cascadePlanes.pop()); - this.remove(shadowLines.pop()); - } - while (cascadeLines.length < cascades) { - const cascadeLine = new Box3Helper(new Box3(), 16777215); - const planeMat = new MeshBasicMaterial({ - transparent: true, - opacity: .1, - depthWrite: false, - side: 2 - }); - const cascadePlane = new Mesh(new PlaneGeometry(), planeMat); - const shadowLineGroup = new Group(); - const shadowLine = new Box3Helper(new Box3(), 16776960); - shadowLineGroup.add(shadowLine); - this.add(cascadeLine); - this.add(cascadePlane); - this.add(shadowLineGroup); - cascadeLines.push(cascadeLine); - cascadePlanes.push(cascadePlane); - shadowLines.push(shadowLineGroup); - } - for (let i = 0; i < cascades; i++) { - const frustum = frustums[i]; - const shadowCam = lights[i].shadow.camera; - const farVerts2 = frustum.vertices.far; - const cascadeLine = cascadeLines[i]; - const cascadePlane = cascadePlanes[i]; - const shadowLineGroup = shadowLines[i]; - const shadowLine = shadowLineGroup.children[0]; - cascadeLine.box.min.copy(farVerts2[2]); - cascadeLine.box.max.copy(farVerts2[0]); - cascadeLine.box.max.z += 1e-4; - cascadePlane.position.addVectors(farVerts2[0], farVerts2[2]); - cascadePlane.position.multiplyScalar(.5); - cascadePlane.scale.subVectors(farVerts2[0], farVerts2[2]); - cascadePlane.scale.z = 1e-4; - this.remove(shadowLineGroup); - shadowLineGroup.position.copy(shadowCam.position); - shadowLineGroup.quaternion.copy(shadowCam.quaternion); - shadowLineGroup.scale.copy(shadowCam.scale); - shadowLineGroup.updateMatrixWorld(true); - this.attach(shadowLineGroup); - shadowLine.box.min.set(shadowCam.bottom, shadowCam.left, -shadowCam.far); - shadowLine.box.max.set(shadowCam.top, shadowCam.right, -shadowCam.near); - } - const nearVerts = mainFrustum.vertices.near; - const farVerts = mainFrustum.vertices.far; - frustumLinePositions.setXYZ(0, farVerts[0].x, farVerts[0].y, farVerts[0].z); - frustumLinePositions.setXYZ(1, farVerts[3].x, farVerts[3].y, farVerts[3].z); - frustumLinePositions.setXYZ(2, farVerts[2].x, farVerts[2].y, farVerts[2].z); - frustumLinePositions.setXYZ(3, farVerts[1].x, farVerts[1].y, farVerts[1].z); - frustumLinePositions.setXYZ(4, nearVerts[0].x, nearVerts[0].y, nearVerts[0].z); - frustumLinePositions.setXYZ(5, nearVerts[3].x, nearVerts[3].y, nearVerts[3].z); - frustumLinePositions.setXYZ(6, nearVerts[2].x, nearVerts[2].y, nearVerts[2].z); - frustumLinePositions.setXYZ(7, nearVerts[1].x, nearVerts[1].y, nearVerts[1].z); - frustumLinePositions.needsUpdate = true; - } -}; -//#endregion -//#region node_modules/three-stdlib/shaders/ACESFilmicToneMappingShader.js -var ACESFilmicToneMappingShader = { - uniforms: { - tDiffuse: { value: null }, - exposure: { value: 1 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - #define saturate(a) clamp( a, 0.0, 1.0 ) - - uniform sampler2D tDiffuse; - - uniform float exposure; - - varying vec2 vUv; - - vec3 RRTAndODTFit( vec3 v ) { - - vec3 a = v * ( v + 0.0245786 ) - 0.000090537; - vec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081; - return a / b; - - } - - vec3 ACESFilmicToneMapping( vec3 color ) { - - // sRGB => XYZ => D65_2_D60 => AP1 => RRT_SAT - const mat3 ACESInputMat = mat3( - vec3( 0.59719, 0.07600, 0.02840 ), // transposed from source - vec3( 0.35458, 0.90834, 0.13383 ), - vec3( 0.04823, 0.01566, 0.83777 ) - ); - - // ODT_SAT => XYZ => D60_2_D65 => sRGB - const mat3 ACESOutputMat = mat3( - vec3( 1.60475, -0.10208, -0.00327 ), // transposed from source - vec3( -0.53108, 1.10813, -0.07276 ), - vec3( -0.07367, -0.00605, 1.07602 ) - ); - - color = ACESInputMat * color; - - // Apply RRT and ODT - color = RRTAndODTFit( color ); - - color = ACESOutputMat * color; - - // Clamp to [0, 1] - return saturate( color ); - - } - - void main() { - - vec4 tex = texture2D( tDiffuse, vUv ); - - tex.rgb *= exposure / 0.6; // pre-exposed, outside of the tone mapping function - - gl_FragColor = vec4( ACESFilmicToneMapping( tex.rgb ), tex.a ); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/BasicShader.js -var BasicShader = { - uniforms: {}, - vertexShader: ` - void main() { - - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - void main() { - - gl_FragColor = vec4( 1.0, 0.0, 0.0, 0.5 ); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/BleachBypassShader.js -var BleachBypassShader = { - uniforms: { - tDiffuse: { value: null }, - opacity: { value: 1 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform float opacity; - - uniform sampler2D tDiffuse; - - varying vec2 vUv; - - void main() { - - vec4 base = texture2D( tDiffuse, vUv ); - - vec3 lumCoeff = vec3( 0.25, 0.65, 0.1 ); - float lum = dot( lumCoeff, base.rgb ); - vec3 blend = vec3( lum ); - - float L = min( 1.0, max( 0.0, 10.0 * ( lum - 0.45 ) ) ); - - vec3 result1 = 2.0 * base.rgb * blend; - vec3 result2 = 1.0 - 2.0 * ( 1.0 - blend ) * ( 1.0 - base.rgb ); - - vec3 newColor = mix( result1, result2, L ); - - float A2 = opacity * base.a; - vec3 mixRGB = A2 * newColor.rgb; - mixRGB += ( ( 1.0 - A2 ) * base.rgb ); - - gl_FragColor = vec4( mixRGB, base.a ); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/BlendShader.js -var BlendShader = { - uniforms: { - tDiffuse1: { value: null }, - tDiffuse2: { value: null }, - mixRatio: { value: .5 }, - opacity: { value: 1 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform float opacity; - uniform float mixRatio; - - uniform sampler2D tDiffuse1; - uniform sampler2D tDiffuse2; - - varying vec2 vUv; - - void main() { - - vec4 texel1 = texture2D( tDiffuse1, vUv ); - vec4 texel2 = texture2D( tDiffuse2, vUv ); - gl_FragColor = opacity * mix( texel1, texel2, mixRatio ); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/BrightnessContrastShader.js -var BrightnessContrastShader = { - uniforms: { - tDiffuse: { value: null }, - brightness: { value: 0 }, - contrast: { value: 0 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform sampler2D tDiffuse; - uniform float brightness; - uniform float contrast; - - varying vec2 vUv; - - void main() { - - gl_FragColor = texture2D( tDiffuse, vUv ); - - gl_FragColor.rgb += brightness; - - if (contrast > 0.0) { - gl_FragColor.rgb = (gl_FragColor.rgb - 0.5) / (1.0 - contrast) + 0.5; - } else { - gl_FragColor.rgb = (gl_FragColor.rgb - 0.5) * (1.0 + contrast) + 0.5; - } - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/ColorCorrectionShader.js -var ColorCorrectionShader = { - uniforms: { - tDiffuse: { value: null }, - powRGB: { value: /* @__PURE__ */ new Vector3(2, 2, 2) }, - mulRGB: { value: /* @__PURE__ */ new Vector3(1, 1, 1) }, - addRGB: { value: /* @__PURE__ */ new Vector3(0, 0, 0) } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform sampler2D tDiffuse; - uniform vec3 powRGB; - uniform vec3 mulRGB; - uniform vec3 addRGB; - - varying vec2 vUv; - - void main() { - - gl_FragColor = texture2D( tDiffuse, vUv ); - gl_FragColor.rgb = mulRGB * pow( ( gl_FragColor.rgb + addRGB ), powRGB ); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/ColorifyShader.js -var ColorifyShader = { - uniforms: { - tDiffuse: { value: null }, - color: { value: /* @__PURE__ */ new Color(16777215) } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform vec3 color; - uniform sampler2D tDiffuse; - - varying vec2 vUv; - - void main() { - - vec4 texel = texture2D( tDiffuse, vUv ); - - vec3 luma = vec3( 0.299, 0.587, 0.114 ); - float v = dot( texel.xyz, luma ); - - gl_FragColor = vec4( v * color, texel.w ); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/DOFMipMapShader.js -var DOFMipMapShader = { - uniforms: { - tColor: { value: null }, - tDepth: { value: null }, - focus: { value: 1 }, - maxblur: { value: 1 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform float focus; - uniform float maxblur; - - uniform sampler2D tColor; - uniform sampler2D tDepth; - - varying vec2 vUv; - - void main() { - - vec4 depth = texture2D( tDepth, vUv ); - - float factor = depth.x - focus; - - vec4 col = texture2D( tColor, vUv, 2.0 * maxblur * abs( focus - depth.x ) ); - - gl_FragColor = col; - gl_FragColor.a = 1.0; - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/FXAAShader.js -var FXAAShader = { - uniforms: { - tDiffuse: { value: null }, - resolution: { value: /* @__PURE__ */ new Vector2(1 / 1024, 1 / 512) } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - precision highp float; - - uniform sampler2D tDiffuse; - - uniform vec2 resolution; - - varying vec2 vUv; - - // FXAA 3.11 implementation by NVIDIA, ported to WebGL by Agost Biro (biro@archilogic.com) - - //---------------------------------------------------------------------------------- - // File: es3-keplerFXAAassetsshaders/FXAA_DefaultES.frag - // SDK Version: v3.00 - // Email: gameworks@nvidia.com - // Site: http://developer.nvidia.com/ - // - // Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved. - // - // Redistribution and use in source and binary forms, with or without - // modification, are permitted provided that the following conditions - // are met: - // * Redistributions of source code must retain the above copyright - // notice, this list of conditions and the following disclaimer. - // * Redistributions in binary form must reproduce the above copyright - // notice, this list of conditions and the following disclaimer in the - // documentation and/or other materials provided with the distribution. - // * Neither the name of NVIDIA CORPORATION nor the names of its - // contributors may be used to endorse or promote products derived - // from this software without specific prior written permission. - // - // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AS IS AND ANY - // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY - // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - // - //---------------------------------------------------------------------------------- - - #define FXAA_PC 1 - #define FXAA_GLSL_100 1 - #define FXAA_QUALITY_PRESET 12 - - #define FXAA_GREEN_AS_LUMA 1 - - /*--------------------------------------------------------------------------*/ - #ifndef FXAA_PC_CONSOLE - // - // The console algorithm for PC is included - // for developers targeting really low spec machines. - // Likely better to just run FXAA_PC, and use a really low preset. - // - #define FXAA_PC_CONSOLE 0 - #endif - /*--------------------------------------------------------------------------*/ - #ifndef FXAA_GLSL_120 - #define FXAA_GLSL_120 0 - #endif - /*--------------------------------------------------------------------------*/ - #ifndef FXAA_GLSL_130 - #define FXAA_GLSL_130 0 - #endif - /*--------------------------------------------------------------------------*/ - #ifndef FXAA_HLSL_3 - #define FXAA_HLSL_3 0 - #endif - /*--------------------------------------------------------------------------*/ - #ifndef FXAA_HLSL_4 - #define FXAA_HLSL_4 0 - #endif - /*--------------------------------------------------------------------------*/ - #ifndef FXAA_HLSL_5 - #define FXAA_HLSL_5 0 - #endif - /*==========================================================================*/ - #ifndef FXAA_GREEN_AS_LUMA - // - // For those using non-linear color, - // and either not able to get luma in alpha, or not wanting to, - // this enables FXAA to run using green as a proxy for luma. - // So with this enabled, no need to pack luma in alpha. - // - // This will turn off AA on anything which lacks some amount of green. - // Pure red and blue or combination of only R and B, will get no AA. - // - // Might want to lower the settings for both, - // fxaaConsoleEdgeThresholdMin - // fxaaQualityEdgeThresholdMin - // In order to insure AA does not get turned off on colors - // which contain a minor amount of green. - // - // 1 = On. - // 0 = Off. - // - #define FXAA_GREEN_AS_LUMA 0 - #endif - /*--------------------------------------------------------------------------*/ - #ifndef FXAA_EARLY_EXIT - // - // Controls algorithms early exit path. - // On PS3 turning this ON adds 2 cycles to the shader. - // On 360 turning this OFF adds 10ths of a millisecond to the shader. - // Turning this off on console will result in a more blurry image. - // So this defaults to on. - // - // 1 = On. - // 0 = Off. - // - #define FXAA_EARLY_EXIT 1 - #endif - /*--------------------------------------------------------------------------*/ - #ifndef FXAA_DISCARD - // - // Only valid for PC OpenGL currently. - // Probably will not work when FXAA_GREEN_AS_LUMA = 1. - // - // 1 = Use discard on pixels which dont need AA. - // For APIs which enable concurrent TEX+ROP from same surface. - // 0 = Return unchanged color on pixels which dont need AA. - // - #define FXAA_DISCARD 0 - #endif - /*--------------------------------------------------------------------------*/ - #ifndef FXAA_FAST_PIXEL_OFFSET - // - // Used for GLSL 120 only. - // - // 1 = GL API supports fast pixel offsets - // 0 = do not use fast pixel offsets - // - #ifdef GL_EXT_gpu_shader4 - #define FXAA_FAST_PIXEL_OFFSET 1 - #endif - #ifdef GL_NV_gpu_shader5 - #define FXAA_FAST_PIXEL_OFFSET 1 - #endif - #ifdef GL_ARB_gpu_shader5 - #define FXAA_FAST_PIXEL_OFFSET 1 - #endif - #ifndef FXAA_FAST_PIXEL_OFFSET - #define FXAA_FAST_PIXEL_OFFSET 0 - #endif - #endif - /*--------------------------------------------------------------------------*/ - #ifndef FXAA_GATHER4_ALPHA - // - // 1 = API supports gather4 on alpha channel. - // 0 = API does not support gather4 on alpha channel. - // - #if (FXAA_HLSL_5 == 1) - #define FXAA_GATHER4_ALPHA 1 - #endif - #ifdef GL_ARB_gpu_shader5 - #define FXAA_GATHER4_ALPHA 1 - #endif - #ifdef GL_NV_gpu_shader5 - #define FXAA_GATHER4_ALPHA 1 - #endif - #ifndef FXAA_GATHER4_ALPHA - #define FXAA_GATHER4_ALPHA 0 - #endif - #endif - - - /*============================================================================ - FXAA QUALITY - TUNING KNOBS - ------------------------------------------------------------------------------ - NOTE the other tuning knobs are now in the shader function inputs! - ============================================================================*/ - #ifndef FXAA_QUALITY_PRESET - // - // Choose the quality preset. - // This needs to be compiled into the shader as it effects code. - // Best option to include multiple presets is to - // in each shader define the preset, then include this file. - // - // OPTIONS - // ----------------------------------------------------------------------- - // 10 to 15 - default medium dither (10=fastest, 15=highest quality) - // 20 to 29 - less dither, more expensive (20=fastest, 29=highest quality) - // 39 - no dither, very expensive - // - // NOTES - // ----------------------------------------------------------------------- - // 12 = slightly faster then FXAA 3.9 and higher edge quality (default) - // 13 = about same speed as FXAA 3.9 and better than 12 - // 23 = closest to FXAA 3.9 visually and performance wise - // _ = the lowest digit is directly related to performance - // _ = the highest digit is directly related to style - // - #define FXAA_QUALITY_PRESET 12 - #endif - - - /*============================================================================ - - FXAA QUALITY - PRESETS - - ============================================================================*/ - - /*============================================================================ - FXAA QUALITY - MEDIUM DITHER PRESETS - ============================================================================*/ - #if (FXAA_QUALITY_PRESET == 10) - #define FXAA_QUALITY_PS 3 - #define FXAA_QUALITY_P0 1.5 - #define FXAA_QUALITY_P1 3.0 - #define FXAA_QUALITY_P2 12.0 - #endif - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PRESET == 11) - #define FXAA_QUALITY_PS 4 - #define FXAA_QUALITY_P0 1.0 - #define FXAA_QUALITY_P1 1.5 - #define FXAA_QUALITY_P2 3.0 - #define FXAA_QUALITY_P3 12.0 - #endif - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PRESET == 12) - #define FXAA_QUALITY_PS 5 - #define FXAA_QUALITY_P0 1.0 - #define FXAA_QUALITY_P1 1.5 - #define FXAA_QUALITY_P2 2.0 - #define FXAA_QUALITY_P3 4.0 - #define FXAA_QUALITY_P4 12.0 - #endif - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PRESET == 13) - #define FXAA_QUALITY_PS 6 - #define FXAA_QUALITY_P0 1.0 - #define FXAA_QUALITY_P1 1.5 - #define FXAA_QUALITY_P2 2.0 - #define FXAA_QUALITY_P3 2.0 - #define FXAA_QUALITY_P4 4.0 - #define FXAA_QUALITY_P5 12.0 - #endif - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PRESET == 14) - #define FXAA_QUALITY_PS 7 - #define FXAA_QUALITY_P0 1.0 - #define FXAA_QUALITY_P1 1.5 - #define FXAA_QUALITY_P2 2.0 - #define FXAA_QUALITY_P3 2.0 - #define FXAA_QUALITY_P4 2.0 - #define FXAA_QUALITY_P5 4.0 - #define FXAA_QUALITY_P6 12.0 - #endif - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PRESET == 15) - #define FXAA_QUALITY_PS 8 - #define FXAA_QUALITY_P0 1.0 - #define FXAA_QUALITY_P1 1.5 - #define FXAA_QUALITY_P2 2.0 - #define FXAA_QUALITY_P3 2.0 - #define FXAA_QUALITY_P4 2.0 - #define FXAA_QUALITY_P5 2.0 - #define FXAA_QUALITY_P6 4.0 - #define FXAA_QUALITY_P7 12.0 - #endif - - /*============================================================================ - FXAA QUALITY - LOW DITHER PRESETS - ============================================================================*/ - #if (FXAA_QUALITY_PRESET == 20) - #define FXAA_QUALITY_PS 3 - #define FXAA_QUALITY_P0 1.5 - #define FXAA_QUALITY_P1 2.0 - #define FXAA_QUALITY_P2 8.0 - #endif - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PRESET == 21) - #define FXAA_QUALITY_PS 4 - #define FXAA_QUALITY_P0 1.0 - #define FXAA_QUALITY_P1 1.5 - #define FXAA_QUALITY_P2 2.0 - #define FXAA_QUALITY_P3 8.0 - #endif - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PRESET == 22) - #define FXAA_QUALITY_PS 5 - #define FXAA_QUALITY_P0 1.0 - #define FXAA_QUALITY_P1 1.5 - #define FXAA_QUALITY_P2 2.0 - #define FXAA_QUALITY_P3 2.0 - #define FXAA_QUALITY_P4 8.0 - #endif - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PRESET == 23) - #define FXAA_QUALITY_PS 6 - #define FXAA_QUALITY_P0 1.0 - #define FXAA_QUALITY_P1 1.5 - #define FXAA_QUALITY_P2 2.0 - #define FXAA_QUALITY_P3 2.0 - #define FXAA_QUALITY_P4 2.0 - #define FXAA_QUALITY_P5 8.0 - #endif - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PRESET == 24) - #define FXAA_QUALITY_PS 7 - #define FXAA_QUALITY_P0 1.0 - #define FXAA_QUALITY_P1 1.5 - #define FXAA_QUALITY_P2 2.0 - #define FXAA_QUALITY_P3 2.0 - #define FXAA_QUALITY_P4 2.0 - #define FXAA_QUALITY_P5 3.0 - #define FXAA_QUALITY_P6 8.0 - #endif - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PRESET == 25) - #define FXAA_QUALITY_PS 8 - #define FXAA_QUALITY_P0 1.0 - #define FXAA_QUALITY_P1 1.5 - #define FXAA_QUALITY_P2 2.0 - #define FXAA_QUALITY_P3 2.0 - #define FXAA_QUALITY_P4 2.0 - #define FXAA_QUALITY_P5 2.0 - #define FXAA_QUALITY_P6 4.0 - #define FXAA_QUALITY_P7 8.0 - #endif - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PRESET == 26) - #define FXAA_QUALITY_PS 9 - #define FXAA_QUALITY_P0 1.0 - #define FXAA_QUALITY_P1 1.5 - #define FXAA_QUALITY_P2 2.0 - #define FXAA_QUALITY_P3 2.0 - #define FXAA_QUALITY_P4 2.0 - #define FXAA_QUALITY_P5 2.0 - #define FXAA_QUALITY_P6 2.0 - #define FXAA_QUALITY_P7 4.0 - #define FXAA_QUALITY_P8 8.0 - #endif - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PRESET == 27) - #define FXAA_QUALITY_PS 10 - #define FXAA_QUALITY_P0 1.0 - #define FXAA_QUALITY_P1 1.5 - #define FXAA_QUALITY_P2 2.0 - #define FXAA_QUALITY_P3 2.0 - #define FXAA_QUALITY_P4 2.0 - #define FXAA_QUALITY_P5 2.0 - #define FXAA_QUALITY_P6 2.0 - #define FXAA_QUALITY_P7 2.0 - #define FXAA_QUALITY_P8 4.0 - #define FXAA_QUALITY_P9 8.0 - #endif - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PRESET == 28) - #define FXAA_QUALITY_PS 11 - #define FXAA_QUALITY_P0 1.0 - #define FXAA_QUALITY_P1 1.5 - #define FXAA_QUALITY_P2 2.0 - #define FXAA_QUALITY_P3 2.0 - #define FXAA_QUALITY_P4 2.0 - #define FXAA_QUALITY_P5 2.0 - #define FXAA_QUALITY_P6 2.0 - #define FXAA_QUALITY_P7 2.0 - #define FXAA_QUALITY_P8 2.0 - #define FXAA_QUALITY_P9 4.0 - #define FXAA_QUALITY_P10 8.0 - #endif - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PRESET == 29) - #define FXAA_QUALITY_PS 12 - #define FXAA_QUALITY_P0 1.0 - #define FXAA_QUALITY_P1 1.5 - #define FXAA_QUALITY_P2 2.0 - #define FXAA_QUALITY_P3 2.0 - #define FXAA_QUALITY_P4 2.0 - #define FXAA_QUALITY_P5 2.0 - #define FXAA_QUALITY_P6 2.0 - #define FXAA_QUALITY_P7 2.0 - #define FXAA_QUALITY_P8 2.0 - #define FXAA_QUALITY_P9 2.0 - #define FXAA_QUALITY_P10 4.0 - #define FXAA_QUALITY_P11 8.0 - #endif - - /*============================================================================ - FXAA QUALITY - EXTREME QUALITY - ============================================================================*/ - #if (FXAA_QUALITY_PRESET == 39) - #define FXAA_QUALITY_PS 12 - #define FXAA_QUALITY_P0 1.0 - #define FXAA_QUALITY_P1 1.0 - #define FXAA_QUALITY_P2 1.0 - #define FXAA_QUALITY_P3 1.0 - #define FXAA_QUALITY_P4 1.0 - #define FXAA_QUALITY_P5 1.5 - #define FXAA_QUALITY_P6 2.0 - #define FXAA_QUALITY_P7 2.0 - #define FXAA_QUALITY_P8 2.0 - #define FXAA_QUALITY_P9 2.0 - #define FXAA_QUALITY_P10 4.0 - #define FXAA_QUALITY_P11 8.0 - #endif - - - - /*============================================================================ - - API PORTING - - ============================================================================*/ - #if (FXAA_GLSL_100 == 1) || (FXAA_GLSL_120 == 1) || (FXAA_GLSL_130 == 1) - #define FxaaBool bool - #define FxaaDiscard discard - #define FxaaFloat float - #define FxaaFloat2 vec2 - #define FxaaFloat3 vec3 - #define FxaaFloat4 vec4 - #define FxaaHalf float - #define FxaaHalf2 vec2 - #define FxaaHalf3 vec3 - #define FxaaHalf4 vec4 - #define FxaaInt2 ivec2 - #define FxaaSat(x) clamp(x, 0.0, 1.0) - #define FxaaTex sampler2D - #else - #define FxaaBool bool - #define FxaaDiscard clip(-1) - #define FxaaFloat float - #define FxaaFloat2 float2 - #define FxaaFloat3 float3 - #define FxaaFloat4 float4 - #define FxaaHalf half - #define FxaaHalf2 half2 - #define FxaaHalf3 half3 - #define FxaaHalf4 half4 - #define FxaaSat(x) saturate(x) - #endif - /*--------------------------------------------------------------------------*/ - #if (FXAA_GLSL_100 == 1) - #define FxaaTexTop(t, p) texture2D(t, p, 0.0) - #define FxaaTexOff(t, p, o, r) texture2D(t, p + (o * r), 0.0) - #endif - /*--------------------------------------------------------------------------*/ - #if (FXAA_GLSL_120 == 1) - // Requires, - // #version 120 - // And at least, - // #extension GL_EXT_gpu_shader4 : enable - // (or set FXAA_FAST_PIXEL_OFFSET 1 to work like DX9) - #define FxaaTexTop(t, p) texture2DLod(t, p, 0.0) - #if (FXAA_FAST_PIXEL_OFFSET == 1) - #define FxaaTexOff(t, p, o, r) texture2DLodOffset(t, p, 0.0, o) - #else - #define FxaaTexOff(t, p, o, r) texture2DLod(t, p + (o * r), 0.0) - #endif - #if (FXAA_GATHER4_ALPHA == 1) - // use #extension GL_ARB_gpu_shader5 : enable - #define FxaaTexAlpha4(t, p) textureGather(t, p, 3) - #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3) - #define FxaaTexGreen4(t, p) textureGather(t, p, 1) - #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1) - #endif - #endif - /*--------------------------------------------------------------------------*/ - #if (FXAA_GLSL_130 == 1) - // Requires "#version 130" or better - #define FxaaTexTop(t, p) textureLod(t, p, 0.0) - #define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o) - #if (FXAA_GATHER4_ALPHA == 1) - // use #extension GL_ARB_gpu_shader5 : enable - #define FxaaTexAlpha4(t, p) textureGather(t, p, 3) - #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3) - #define FxaaTexGreen4(t, p) textureGather(t, p, 1) - #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1) - #endif - #endif - /*--------------------------------------------------------------------------*/ - #if (FXAA_HLSL_3 == 1) - #define FxaaInt2 float2 - #define FxaaTex sampler2D - #define FxaaTexTop(t, p) tex2Dlod(t, float4(p, 0.0, 0.0)) - #define FxaaTexOff(t, p, o, r) tex2Dlod(t, float4(p + (o * r), 0, 0)) - #endif - /*--------------------------------------------------------------------------*/ - #if (FXAA_HLSL_4 == 1) - #define FxaaInt2 int2 - struct FxaaTex { SamplerState smpl; Texture2D tex; }; - #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0) - #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o) - #endif - /*--------------------------------------------------------------------------*/ - #if (FXAA_HLSL_5 == 1) - #define FxaaInt2 int2 - struct FxaaTex { SamplerState smpl; Texture2D tex; }; - #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0) - #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o) - #define FxaaTexAlpha4(t, p) t.tex.GatherAlpha(t.smpl, p) - #define FxaaTexOffAlpha4(t, p, o) t.tex.GatherAlpha(t.smpl, p, o) - #define FxaaTexGreen4(t, p) t.tex.GatherGreen(t.smpl, p) - #define FxaaTexOffGreen4(t, p, o) t.tex.GatherGreen(t.smpl, p, o) - #endif - - - /*============================================================================ - GREEN AS LUMA OPTION SUPPORT FUNCTION - ============================================================================*/ - #if (FXAA_GREEN_AS_LUMA == 0) - FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.w; } - #else - FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; } - #endif - - - - - /*============================================================================ - - FXAA3 QUALITY - PC - - ============================================================================*/ - #if (FXAA_PC == 1) - /*--------------------------------------------------------------------------*/ - FxaaFloat4 FxaaPixelShader( - // - // Use noperspective interpolation here (turn off perspective interpolation). - // {xy} = center of pixel - FxaaFloat2 pos, - // - // Used only for FXAA Console, and not used on the 360 version. - // Use noperspective interpolation here (turn off perspective interpolation). - // {xy_} = upper left of pixel - // {_zw} = lower right of pixel - FxaaFloat4 fxaaConsolePosPos, - // - // Input color texture. - // {rgb_} = color in linear or perceptual color space - // if (FXAA_GREEN_AS_LUMA == 0) - // {__a} = luma in perceptual color space (not linear) - FxaaTex tex, - // - // Only used on the optimized 360 version of FXAA Console. - // For everything but 360, just use the same input here as for "tex". - // For 360, same texture, just alias with a 2nd sampler. - // This sampler needs to have an exponent bias of -1. - FxaaTex fxaaConsole360TexExpBiasNegOne, - // - // Only used on the optimized 360 version of FXAA Console. - // For everything but 360, just use the same input here as for "tex". - // For 360, same texture, just alias with a 3nd sampler. - // This sampler needs to have an exponent bias of -2. - FxaaTex fxaaConsole360TexExpBiasNegTwo, - // - // Only used on FXAA Quality. - // This must be from a constant/uniform. - // {x_} = 1.0/screenWidthInPixels - // {_y} = 1.0/screenHeightInPixels - FxaaFloat2 fxaaQualityRcpFrame, - // - // Only used on FXAA Console. - // This must be from a constant/uniform. - // This effects sub-pixel AA quality and inversely sharpness. - // Where N ranges between, - // N = 0.50 (default) - // N = 0.33 (sharper) - // {x__} = -N/screenWidthInPixels - // {_y_} = -N/screenHeightInPixels - // {_z_} = N/screenWidthInPixels - // {__w} = N/screenHeightInPixels - FxaaFloat4 fxaaConsoleRcpFrameOpt, - // - // Only used on FXAA Console. - // Not used on 360, but used on PS3 and PC. - // This must be from a constant/uniform. - // {x__} = -2.0/screenWidthInPixels - // {_y_} = -2.0/screenHeightInPixels - // {_z_} = 2.0/screenWidthInPixels - // {__w} = 2.0/screenHeightInPixels - FxaaFloat4 fxaaConsoleRcpFrameOpt2, - // - // Only used on FXAA Console. - // Only used on 360 in place of fxaaConsoleRcpFrameOpt2. - // This must be from a constant/uniform. - // {x__} = 8.0/screenWidthInPixels - // {_y_} = 8.0/screenHeightInPixels - // {_z_} = -4.0/screenWidthInPixels - // {__w} = -4.0/screenHeightInPixels - FxaaFloat4 fxaaConsole360RcpFrameOpt2, - // - // Only used on FXAA Quality. - // This used to be the FXAA_QUALITY_SUBPIX define. - // It is here now to allow easier tuning. - // Choose the amount of sub-pixel aliasing removal. - // This can effect sharpness. - // 1.00 - upper limit (softer) - // 0.75 - default amount of filtering - // 0.50 - lower limit (sharper, less sub-pixel aliasing removal) - // 0.25 - almost off - // 0.00 - completely off - FxaaFloat fxaaQualitySubpix, - // - // Only used on FXAA Quality. - // This used to be the FXAA_QUALITY_EDGE_THRESHOLD define. - // It is here now to allow easier tuning. - // The minimum amount of local contrast required to apply algorithm. - // 0.333 - too little (faster) - // 0.250 - low quality - // 0.166 - default - // 0.125 - high quality - // 0.063 - overkill (slower) - FxaaFloat fxaaQualityEdgeThreshold, - // - // Only used on FXAA Quality. - // This used to be the FXAA_QUALITY_EDGE_THRESHOLD_MIN define. - // It is here now to allow easier tuning. - // Trims the algorithm from processing darks. - // 0.0833 - upper limit (default, the start of visible unfiltered edges) - // 0.0625 - high quality (faster) - // 0.0312 - visible limit (slower) - // Special notes when using FXAA_GREEN_AS_LUMA, - // Likely want to set this to zero. - // As colors that are mostly not-green - // will appear very dark in the green channel! - // Tune by looking at mostly non-green content, - // then start at zero and increase until aliasing is a problem. - FxaaFloat fxaaQualityEdgeThresholdMin, - // - // Only used on FXAA Console. - // This used to be the FXAA_CONSOLE_EDGE_SHARPNESS define. - // It is here now to allow easier tuning. - // This does not effect PS3, as this needs to be compiled in. - // Use FXAA_CONSOLE_PS3_EDGE_SHARPNESS for PS3. - // Due to the PS3 being ALU bound, - // there are only three safe values here: 2 and 4 and 8. - // These options use the shaders ability to a free *|/ by 2|4|8. - // For all other platforms can be a non-power of two. - // 8.0 is sharper (default!!!) - // 4.0 is softer - // 2.0 is really soft (good only for vector graphics inputs) - FxaaFloat fxaaConsoleEdgeSharpness, - // - // Only used on FXAA Console. - // This used to be the FXAA_CONSOLE_EDGE_THRESHOLD define. - // It is here now to allow easier tuning. - // This does not effect PS3, as this needs to be compiled in. - // Use FXAA_CONSOLE_PS3_EDGE_THRESHOLD for PS3. - // Due to the PS3 being ALU bound, - // there are only two safe values here: 1/4 and 1/8. - // These options use the shaders ability to a free *|/ by 2|4|8. - // The console setting has a different mapping than the quality setting. - // Other platforms can use other values. - // 0.125 leaves less aliasing, but is softer (default!!!) - // 0.25 leaves more aliasing, and is sharper - FxaaFloat fxaaConsoleEdgeThreshold, - // - // Only used on FXAA Console. - // This used to be the FXAA_CONSOLE_EDGE_THRESHOLD_MIN define. - // It is here now to allow easier tuning. - // Trims the algorithm from processing darks. - // The console setting has a different mapping than the quality setting. - // This only applies when FXAA_EARLY_EXIT is 1. - // This does not apply to PS3, - // PS3 was simplified to avoid more shader instructions. - // 0.06 - faster but more aliasing in darks - // 0.05 - default - // 0.04 - slower and less aliasing in darks - // Special notes when using FXAA_GREEN_AS_LUMA, - // Likely want to set this to zero. - // As colors that are mostly not-green - // will appear very dark in the green channel! - // Tune by looking at mostly non-green content, - // then start at zero and increase until aliasing is a problem. - FxaaFloat fxaaConsoleEdgeThresholdMin, - // - // Extra constants for 360 FXAA Console only. - // Use zeros or anything else for other platforms. - // These must be in physical constant registers and NOT immediates. - // Immediates will result in compiler un-optimizing. - // {xyzw} = float4(1.0, -1.0, 0.25, -0.25) - FxaaFloat4 fxaaConsole360ConstDir - ) { - /*--------------------------------------------------------------------------*/ - FxaaFloat2 posM; - posM.x = pos.x; - posM.y = pos.y; - #if (FXAA_GATHER4_ALPHA == 1) - #if (FXAA_DISCARD == 0) - FxaaFloat4 rgbyM = FxaaTexTop(tex, posM); - #if (FXAA_GREEN_AS_LUMA == 0) - #define lumaM rgbyM.w - #else - #define lumaM rgbyM.y - #endif - #endif - #if (FXAA_GREEN_AS_LUMA == 0) - FxaaFloat4 luma4A = FxaaTexAlpha4(tex, posM); - FxaaFloat4 luma4B = FxaaTexOffAlpha4(tex, posM, FxaaInt2(-1, -1)); - #else - FxaaFloat4 luma4A = FxaaTexGreen4(tex, posM); - FxaaFloat4 luma4B = FxaaTexOffGreen4(tex, posM, FxaaInt2(-1, -1)); - #endif - #if (FXAA_DISCARD == 1) - #define lumaM luma4A.w - #endif - #define lumaE luma4A.z - #define lumaS luma4A.x - #define lumaSE luma4A.y - #define lumaNW luma4B.w - #define lumaN luma4B.z - #define lumaW luma4B.x - #else - FxaaFloat4 rgbyM = FxaaTexTop(tex, posM); - #if (FXAA_GREEN_AS_LUMA == 0) - #define lumaM rgbyM.w - #else - #define lumaM rgbyM.y - #endif - #if (FXAA_GLSL_100 == 1) - FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0, 1.0), fxaaQualityRcpFrame.xy)); - FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 0.0), fxaaQualityRcpFrame.xy)); - FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0,-1.0), fxaaQualityRcpFrame.xy)); - FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 0.0), fxaaQualityRcpFrame.xy)); - #else - FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0, 1), fxaaQualityRcpFrame.xy)); - FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 0), fxaaQualityRcpFrame.xy)); - FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0,-1), fxaaQualityRcpFrame.xy)); - FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy)); - #endif - #endif - /*--------------------------------------------------------------------------*/ - FxaaFloat maxSM = max(lumaS, lumaM); - FxaaFloat minSM = min(lumaS, lumaM); - FxaaFloat maxESM = max(lumaE, maxSM); - FxaaFloat minESM = min(lumaE, minSM); - FxaaFloat maxWN = max(lumaN, lumaW); - FxaaFloat minWN = min(lumaN, lumaW); - FxaaFloat rangeMax = max(maxWN, maxESM); - FxaaFloat rangeMin = min(minWN, minESM); - FxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold; - FxaaFloat range = rangeMax - rangeMin; - FxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled); - FxaaBool earlyExit = range < rangeMaxClamped; - /*--------------------------------------------------------------------------*/ - if(earlyExit) - #if (FXAA_DISCARD == 1) - FxaaDiscard; - #else - return rgbyM; - #endif - /*--------------------------------------------------------------------------*/ - #if (FXAA_GATHER4_ALPHA == 0) - #if (FXAA_GLSL_100 == 1) - FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0,-1.0), fxaaQualityRcpFrame.xy)); - FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 1.0), fxaaQualityRcpFrame.xy)); - FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0,-1.0), fxaaQualityRcpFrame.xy)); - FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 1.0), fxaaQualityRcpFrame.xy)); - #else - FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1,-1), fxaaQualityRcpFrame.xy)); - FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 1), fxaaQualityRcpFrame.xy)); - FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1,-1), fxaaQualityRcpFrame.xy)); - FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy)); - #endif - #else - FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, -1), fxaaQualityRcpFrame.xy)); - FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy)); - #endif - /*--------------------------------------------------------------------------*/ - FxaaFloat lumaNS = lumaN + lumaS; - FxaaFloat lumaWE = lumaW + lumaE; - FxaaFloat subpixRcpRange = 1.0/range; - FxaaFloat subpixNSWE = lumaNS + lumaWE; - FxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS; - FxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE; - /*--------------------------------------------------------------------------*/ - FxaaFloat lumaNESE = lumaNE + lumaSE; - FxaaFloat lumaNWNE = lumaNW + lumaNE; - FxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE; - FxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE; - /*--------------------------------------------------------------------------*/ - FxaaFloat lumaNWSW = lumaNW + lumaSW; - FxaaFloat lumaSWSE = lumaSW + lumaSE; - FxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2); - FxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2); - FxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW; - FxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE; - FxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4; - FxaaFloat edgeVert = abs(edgeVert3) + edgeVert4; - /*--------------------------------------------------------------------------*/ - FxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE; - FxaaFloat lengthSign = fxaaQualityRcpFrame.x; - FxaaBool horzSpan = edgeHorz >= edgeVert; - FxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE; - /*--------------------------------------------------------------------------*/ - if(!horzSpan) lumaN = lumaW; - if(!horzSpan) lumaS = lumaE; - if(horzSpan) lengthSign = fxaaQualityRcpFrame.y; - FxaaFloat subpixB = (subpixA * (1.0/12.0)) - lumaM; - /*--------------------------------------------------------------------------*/ - FxaaFloat gradientN = lumaN - lumaM; - FxaaFloat gradientS = lumaS - lumaM; - FxaaFloat lumaNN = lumaN + lumaM; - FxaaFloat lumaSS = lumaS + lumaM; - FxaaBool pairN = abs(gradientN) >= abs(gradientS); - FxaaFloat gradient = max(abs(gradientN), abs(gradientS)); - if(pairN) lengthSign = -lengthSign; - FxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange); - /*--------------------------------------------------------------------------*/ - FxaaFloat2 posB; - posB.x = posM.x; - posB.y = posM.y; - FxaaFloat2 offNP; - offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x; - offNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y; - if(!horzSpan) posB.x += lengthSign * 0.5; - if( horzSpan) posB.y += lengthSign * 0.5; - /*--------------------------------------------------------------------------*/ - FxaaFloat2 posN; - posN.x = posB.x - offNP.x * FXAA_QUALITY_P0; - posN.y = posB.y - offNP.y * FXAA_QUALITY_P0; - FxaaFloat2 posP; - posP.x = posB.x + offNP.x * FXAA_QUALITY_P0; - posP.y = posB.y + offNP.y * FXAA_QUALITY_P0; - FxaaFloat subpixD = ((-2.0)*subpixC) + 3.0; - FxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN)); - FxaaFloat subpixE = subpixC * subpixC; - FxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP)); - /*--------------------------------------------------------------------------*/ - if(!pairN) lumaNN = lumaSS; - FxaaFloat gradientScaled = gradient * 1.0/4.0; - FxaaFloat lumaMM = lumaM - lumaNN * 0.5; - FxaaFloat subpixF = subpixD * subpixE; - FxaaBool lumaMLTZero = lumaMM < 0.0; - /*--------------------------------------------------------------------------*/ - lumaEndN -= lumaNN * 0.5; - lumaEndP -= lumaNN * 0.5; - FxaaBool doneN = abs(lumaEndN) >= gradientScaled; - FxaaBool doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P1; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P1; - FxaaBool doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P1; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P1; - /*--------------------------------------------------------------------------*/ - if(doneNP) { - if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); - if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); - if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; - if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; - doneN = abs(lumaEndN) >= gradientScaled; - doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P2; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P2; - doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P2; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P2; - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PS > 3) - if(doneNP) { - if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); - if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); - if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; - if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; - doneN = abs(lumaEndN) >= gradientScaled; - doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P3; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P3; - doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P3; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P3; - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PS > 4) - if(doneNP) { - if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); - if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); - if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; - if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; - doneN = abs(lumaEndN) >= gradientScaled; - doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P4; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P4; - doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P4; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P4; - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PS > 5) - if(doneNP) { - if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); - if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); - if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; - if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; - doneN = abs(lumaEndN) >= gradientScaled; - doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P5; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P5; - doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P5; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P5; - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PS > 6) - if(doneNP) { - if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); - if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); - if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; - if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; - doneN = abs(lumaEndN) >= gradientScaled; - doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P6; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P6; - doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P6; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P6; - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PS > 7) - if(doneNP) { - if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); - if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); - if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; - if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; - doneN = abs(lumaEndN) >= gradientScaled; - doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P7; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P7; - doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P7; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P7; - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PS > 8) - if(doneNP) { - if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); - if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); - if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; - if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; - doneN = abs(lumaEndN) >= gradientScaled; - doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P8; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P8; - doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P8; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P8; - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PS > 9) - if(doneNP) { - if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); - if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); - if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; - if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; - doneN = abs(lumaEndN) >= gradientScaled; - doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P9; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P9; - doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P9; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P9; - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PS > 10) - if(doneNP) { - if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); - if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); - if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; - if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; - doneN = abs(lumaEndN) >= gradientScaled; - doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P10; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P10; - doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P10; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P10; - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PS > 11) - if(doneNP) { - if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); - if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); - if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; - if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; - doneN = abs(lumaEndN) >= gradientScaled; - doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P11; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P11; - doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P11; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P11; - /*--------------------------------------------------------------------------*/ - #if (FXAA_QUALITY_PS > 12) - if(doneNP) { - if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy)); - if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy)); - if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5; - if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5; - doneN = abs(lumaEndN) >= gradientScaled; - doneP = abs(lumaEndP) >= gradientScaled; - if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P12; - if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P12; - doneNP = (!doneN) || (!doneP); - if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P12; - if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P12; - /*--------------------------------------------------------------------------*/ - } - #endif - /*--------------------------------------------------------------------------*/ - } - #endif - /*--------------------------------------------------------------------------*/ - } - #endif - /*--------------------------------------------------------------------------*/ - } - #endif - /*--------------------------------------------------------------------------*/ - } - #endif - /*--------------------------------------------------------------------------*/ - } - #endif - /*--------------------------------------------------------------------------*/ - } - #endif - /*--------------------------------------------------------------------------*/ - } - #endif - /*--------------------------------------------------------------------------*/ - } - #endif - /*--------------------------------------------------------------------------*/ - } - #endif - /*--------------------------------------------------------------------------*/ - } - /*--------------------------------------------------------------------------*/ - FxaaFloat dstN = posM.x - posN.x; - FxaaFloat dstP = posP.x - posM.x; - if(!horzSpan) dstN = posM.y - posN.y; - if(!horzSpan) dstP = posP.y - posM.y; - /*--------------------------------------------------------------------------*/ - FxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero; - FxaaFloat spanLength = (dstP + dstN); - FxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero; - FxaaFloat spanLengthRcp = 1.0/spanLength; - /*--------------------------------------------------------------------------*/ - FxaaBool directionN = dstN < dstP; - FxaaFloat dst = min(dstN, dstP); - FxaaBool goodSpan = directionN ? goodSpanN : goodSpanP; - FxaaFloat subpixG = subpixF * subpixF; - FxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5; - FxaaFloat subpixH = subpixG * fxaaQualitySubpix; - /*--------------------------------------------------------------------------*/ - FxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0; - FxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH); - if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign; - if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign; - #if (FXAA_DISCARD == 1) - return FxaaTexTop(tex, posM); - #else - return FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM); - #endif - } - /*==========================================================================*/ - #endif - - void main() { - gl_FragColor = FxaaPixelShader( - vUv, - vec4(0.0), - tDiffuse, - tDiffuse, - tDiffuse, - resolution, - vec4(0.0), - vec4(0.0), - vec4(0.0), - 0.75, - 0.166, - 0.0833, - 0.0, - 0.0, - 0.0, - vec4(0.0) - ); - - // TODO avoid querying texture twice for same texel - gl_FragColor.a = texture2D(tDiffuse, vUv).a; - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/FocusShader.js -var FocusShader = { - uniforms: { - tDiffuse: { value: null }, - screenWidth: { value: 1024 }, - screenHeight: { value: 1024 }, - sampleDistance: { value: .94 }, - waveFactor: { value: .00125 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform float screenWidth; - uniform float screenHeight; - uniform float sampleDistance; - uniform float waveFactor; - - uniform sampler2D tDiffuse; - - varying vec2 vUv; - - void main() { - - vec4 color, org, tmp, add; - float sample_dist, f; - vec2 vin; - vec2 uv = vUv; - - add = color = org = texture2D( tDiffuse, uv ); - - vin = ( uv - vec2( 0.5 ) ) * vec2( 1.4 ); - sample_dist = dot( vin, vin ) * 2.0; - - f = ( waveFactor * 100.0 + sample_dist ) * sampleDistance * 4.0; - - vec2 sampleSize = vec2( 1.0 / screenWidth, 1.0 / screenHeight ) * vec2( f ); - - add += tmp = texture2D( tDiffuse, uv + vec2( 0.111964, 0.993712 ) * sampleSize ); - if( tmp.b < color.b ) color = tmp; - - add += tmp = texture2D( tDiffuse, uv + vec2( 0.846724, 0.532032 ) * sampleSize ); - if( tmp.b < color.b ) color = tmp; - - add += tmp = texture2D( tDiffuse, uv + vec2( 0.943883, -0.330279 ) * sampleSize ); - if( tmp.b < color.b ) color = tmp; - - add += tmp = texture2D( tDiffuse, uv + vec2( 0.330279, -0.943883 ) * sampleSize ); - if( tmp.b < color.b ) color = tmp; - - add += tmp = texture2D( tDiffuse, uv + vec2( -0.532032, -0.846724 ) * sampleSize ); - if( tmp.b < color.b ) color = tmp; - - add += tmp = texture2D( tDiffuse, uv + vec2( -0.993712, -0.111964 ) * sampleSize ); - if( tmp.b < color.b ) color = tmp; - - add += tmp = texture2D( tDiffuse, uv + vec2( -0.707107, 0.707107 ) * sampleSize ); - if( tmp.b < color.b ) color = tmp; - - color = color * vec4( 2.0 ) - ( add / vec4( 8.0 ) ); - color = color + ( add / vec4( 8.0 ) - color ) * ( vec4( 1.0 ) - vec4( sample_dist * 0.5 ) ); - - gl_FragColor = vec4( color.rgb * color.rgb * vec3( 0.95 ) + color.rgb, 1.0 ); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/FreiChenShader.js -var FreiChenShader = { - uniforms: { - tDiffuse: { value: null }, - aspect: { value: /* @__PURE__ */ new Vector2(512, 512) } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform sampler2D tDiffuse; - varying vec2 vUv; - - uniform vec2 aspect; - - vec2 texel = vec2(1.0 / aspect.x, 1.0 / aspect.y); - - mat3 G[9]; - - // hard coded matrix values!!!! as suggested in https://github.com/neilmendoza/ofxPostProcessing/blob/master/src/EdgePass.cpp#L45 - - const mat3 g0 = mat3( 0.3535533845424652, 0, -0.3535533845424652, 0.5, 0, -0.5, 0.3535533845424652, 0, -0.3535533845424652 ); - const mat3 g1 = mat3( 0.3535533845424652, 0.5, 0.3535533845424652, 0, 0, 0, -0.3535533845424652, -0.5, -0.3535533845424652 ); - const mat3 g2 = mat3( 0, 0.3535533845424652, -0.5, -0.3535533845424652, 0, 0.3535533845424652, 0.5, -0.3535533845424652, 0 ); - const mat3 g3 = mat3( 0.5, -0.3535533845424652, 0, -0.3535533845424652, 0, 0.3535533845424652, 0, 0.3535533845424652, -0.5 ); - const mat3 g4 = mat3( 0, -0.5, 0, 0.5, 0, 0.5, 0, -0.5, 0 ); - const mat3 g5 = mat3( -0.5, 0, 0.5, 0, 0, 0, 0.5, 0, -0.5 ); - const mat3 g6 = mat3( 0.1666666716337204, -0.3333333432674408, 0.1666666716337204, -0.3333333432674408, 0.6666666865348816, -0.3333333432674408, 0.1666666716337204, -0.3333333432674408, 0.1666666716337204 ); - const mat3 g7 = mat3( -0.3333333432674408, 0.1666666716337204, -0.3333333432674408, 0.1666666716337204, 0.6666666865348816, 0.1666666716337204, -0.3333333432674408, 0.1666666716337204, -0.3333333432674408 ); - const mat3 g8 = mat3( 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408 ); - - void main(void) - { - - G[0] = g0, - G[1] = g1, - G[2] = g2, - G[3] = g3, - G[4] = g4, - G[5] = g5, - G[6] = g6, - G[7] = g7, - G[8] = g8; - - mat3 I; - float cnv[9]; - vec3 sample; - - /* fetch the 3x3 neighbourhood and use the RGB vectors length as intensity value */ - for (float i=0.0; i<3.0; i++) { - for (float j=0.0; j<3.0; j++) { - sample = texture2D(tDiffuse, vUv + texel * vec2(i-1.0,j-1.0) ).rgb; - I[int(i)][int(j)] = length(sample); - } - } - - /* calculate the convolution values for all the masks */ - for (int i=0; i<9; i++) { - float dp3 = dot(G[i][0], I[0]) + dot(G[i][1], I[1]) + dot(G[i][2], I[2]); - cnv[i] = dp3 * dp3; - } - - float M = (cnv[0] + cnv[1]) + (cnv[2] + cnv[3]); - float S = (cnv[4] + cnv[5]) + (cnv[6] + cnv[7]) + (cnv[8] + M); - - gl_FragColor = vec4(vec3(sqrt(M/S)), 1.0); - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/FresnelShader.js -var FresnelShader = { - uniforms: { - mRefractionRatio: { value: 1.02 }, - mFresnelBias: { value: .1 }, - mFresnelPower: { value: 2 }, - mFresnelScale: { value: 1 }, - tCube: { value: null } - }, - vertexShader: ` - uniform float mRefractionRatio; - uniform float mFresnelBias; - uniform float mFresnelScale; - uniform float mFresnelPower; - - varying vec3 vReflect; - varying vec3 vRefract[3]; - varying float vReflectionFactor; - - void main() { - - vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 ); - vec4 worldPosition = modelMatrix * vec4( position, 1.0 ); - - vec3 worldNormal = normalize( mat3( modelMatrix[0].xyz, modelMatrix[1].xyz, modelMatrix[2].xyz ) * normal ); - - vec3 I = worldPosition.xyz - cameraPosition; - - vReflect = reflect( I, worldNormal ); - vRefract[0] = refract( normalize( I ), worldNormal, mRefractionRatio ); - vRefract[1] = refract( normalize( I ), worldNormal, mRefractionRatio * 0.99 ); - vRefract[2] = refract( normalize( I ), worldNormal, mRefractionRatio * 0.98 ); - vReflectionFactor = mFresnelBias + mFresnelScale * pow( 1.0 + dot( normalize( I ), worldNormal ), mFresnelPower ); - - gl_Position = projectionMatrix * mvPosition; - - } - `, - fragmentShader: ` - uniform samplerCube tCube; - - varying vec3 vReflect; - varying vec3 vRefract[3]; - varying float vReflectionFactor; - - void main() { - - vec4 reflectedColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) ); - vec4 refractedColor = vec4( 1.0 ); - - refractedColor.r = textureCube( tCube, vec3( -vRefract[0].x, vRefract[0].yz ) ).r; - refractedColor.g = textureCube( tCube, vec3( -vRefract[1].x, vRefract[1].yz ) ).g; - refractedColor.b = textureCube( tCube, vec3( -vRefract[2].x, vRefract[2].yz ) ).b; - - gl_FragColor = mix( refractedColor, reflectedColor, clamp( vReflectionFactor, 0.0, 1.0 ) ); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/GammaCorrectionShader.js -var GammaCorrectionShader = { - uniforms: { tDiffuse: { value: null } }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform sampler2D tDiffuse; - - varying vec2 vUv; - - void main() { - - vec4 tex = texture2D( tDiffuse, vUv ); - - #ifdef LinearTosRGB - gl_FragColor = LinearTosRGB( tex ); - #else - gl_FragColor = sRGBTransferOETF( tex ); - #endif - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/GodRaysShader.js -var GodRaysDepthMaskShader = { - uniforms: { tInput: { value: null } }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - varying vec2 vUv; - - uniform sampler2D tInput; - - void main() { - - gl_FragColor = vec4( 1.0 ) - texture2D( tInput, vUv ); - - } - ` -}; -var GodRaysGenerateShader = { - uniforms: { - tInput: { value: null }, - fStepSize: { value: 1 }, - vSunPositionScreenSpace: { value: /* @__PURE__ */ new Vector3() } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - #define TAPS_PER_PASS 6.0 - - varying vec2 vUv; - - uniform sampler2D tInput; - - uniform vec3 vSunPositionScreenSpace; - uniform float fStepSize; // filter step size - - void main() { - - // delta from current pixel to "sun" position - - vec2 delta = vSunPositionScreenSpace.xy - vUv; - float dist = length( delta ); - - // Step vector (uv space) - - vec2 stepv = fStepSize * delta / dist; - - // Number of iterations between pixel and sun - - float iters = dist/fStepSize; - - vec2 uv = vUv.xy; - float col = 0.0; - - // This breaks ANGLE in Chrome 22 - // - see http://code.google.com/p/chromium/issues/detail?id=153105 - - /* - // Unrolling didnt do much on my hardware (ATI Mobility Radeon 3450), - // so ive just left the loop - - for ( float i = 0.0; i < TAPS_PER_PASS; i += 1.0 ) { - - // Accumulate samples, making sure we dont walk past the light source. - - // The check for uv.y < 1 would not be necessary with "border" UV wrap - // mode, with a black border color. I dont think this is currently - // exposed by three.js. As a result there might be artifacts when the - // sun is to the left, right or bottom of screen as these cases are - // not specifically handled. - - col += ( i <= iters && uv.y < 1.0 ? texture2D( tInput, uv ).r : 0.0 ); - uv += stepv; - - } - */ - - // Unrolling loop manually makes it work in ANGLE - - float f = min( 1.0, max( vSunPositionScreenSpace.z / 1000.0, 0.0 ) ); // used to fade out godrays - - if ( 0.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f; - uv += stepv; - - if ( 1.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f; - uv += stepv; - - if ( 2.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f; - uv += stepv; - - if ( 3.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f; - uv += stepv; - - if ( 4.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f; - uv += stepv; - - if ( 5.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f; - uv += stepv; - - // Should technically be dividing by iters but TAPS_PER_PASS smooths out - // objectionable artifacts, in particular near the sun position. The side - // effect is that the result is darker than it should be around the sun, as - // TAPS_PER_PASS is greater than the number of samples actually accumulated. - // When the result is inverted (in the shader godrays_combine this produces - // a slight bright spot at the position of the sun, even when it is occluded. - - gl_FragColor = vec4( col/TAPS_PER_PASS ); - gl_FragColor.a = 1.0; - - } - ` -}; -var GodRaysCombineShader = { - uniforms: { - tColors: { value: null }, - tGodRays: { value: null }, - fGodRayIntensity: { value: .69 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - varying vec2 vUv; - - uniform sampler2D tColors; - uniform sampler2D tGodRays; - - uniform float fGodRayIntensity; - - void main() { - - // Since THREE.MeshDepthMaterial renders foreground objects white and background - // objects black, the god-rays will be white streaks. Therefore value is inverted - // before being combined with tColors - - gl_FragColor = texture2D( tColors, vUv ) + fGodRayIntensity * vec4( 1.0 - texture2D( tGodRays, vUv ).r ); - gl_FragColor.a = 1.0; - - } - ` -}; -var GodRaysFakeSunShader = { - uniforms: { - vSunPositionScreenSpace: { value: /* @__PURE__ */ new Vector3() }, - fAspect: { value: 1 }, - sunColor: { value: /* @__PURE__ */ new Color(16772608) }, - bgColor: { value: /* @__PURE__ */ new Color(0) } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - varying vec2 vUv; - - uniform vec3 vSunPositionScreenSpace; - uniform float fAspect; - - uniform vec3 sunColor; - uniform vec3 bgColor; - - void main() { - - vec2 diff = vUv - vSunPositionScreenSpace.xy; - - // Correct for aspect ratio - - diff.x *= fAspect; - - float prop = clamp( length( diff ) / 0.5, 0.0, 1.0 ); - prop = 0.35 * pow( 1.0 - prop, 3.0 ); - - gl_FragColor.xyz = ( vSunPositionScreenSpace.z > 0.0 ) ? mix( sunColor, bgColor, 1.0 - prop ) : bgColor; - gl_FragColor.w = 1.0; - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/HorizontalBlurShader.js -var HorizontalBlurShader = { - uniforms: { - tDiffuse: { value: null }, - h: { value: 1 / 512 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform sampler2D tDiffuse; - uniform float h; - - varying vec2 vUv; - - void main() { - - vec4 sum = vec4( 0.0 ); - - sum += texture2D( tDiffuse, vec2( vUv.x - 4.0 * h, vUv.y ) ) * 0.051; - sum += texture2D( tDiffuse, vec2( vUv.x - 3.0 * h, vUv.y ) ) * 0.0918; - sum += texture2D( tDiffuse, vec2( vUv.x - 2.0 * h, vUv.y ) ) * 0.12245; - sum += texture2D( tDiffuse, vec2( vUv.x - 1.0 * h, vUv.y ) ) * 0.1531; - sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633; - sum += texture2D( tDiffuse, vec2( vUv.x + 1.0 * h, vUv.y ) ) * 0.1531; - sum += texture2D( tDiffuse, vec2( vUv.x + 2.0 * h, vUv.y ) ) * 0.12245; - sum += texture2D( tDiffuse, vec2( vUv.x + 3.0 * h, vUv.y ) ) * 0.0918; - sum += texture2D( tDiffuse, vec2( vUv.x + 4.0 * h, vUv.y ) ) * 0.051; - - gl_FragColor = sum; - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/HorizontalTiltShiftShader.js -var HorizontalTiltShiftShader = { - uniforms: { - tDiffuse: { value: null }, - h: { value: 1 / 512 }, - r: { value: .35 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform sampler2D tDiffuse; - uniform float h; - uniform float r; - - varying vec2 vUv; - - void main() { - - vec4 sum = vec4( 0.0 ); - - float hh = h * abs( r - vUv.y ); - - sum += texture2D( tDiffuse, vec2( vUv.x - 4.0 * hh, vUv.y ) ) * 0.051; - sum += texture2D( tDiffuse, vec2( vUv.x - 3.0 * hh, vUv.y ) ) * 0.0918; - sum += texture2D( tDiffuse, vec2( vUv.x - 2.0 * hh, vUv.y ) ) * 0.12245; - sum += texture2D( tDiffuse, vec2( vUv.x - 1.0 * hh, vUv.y ) ) * 0.1531; - sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633; - sum += texture2D( tDiffuse, vec2( vUv.x + 1.0 * hh, vUv.y ) ) * 0.1531; - sum += texture2D( tDiffuse, vec2( vUv.x + 2.0 * hh, vUv.y ) ) * 0.12245; - sum += texture2D( tDiffuse, vec2( vUv.x + 3.0 * hh, vUv.y ) ) * 0.0918; - sum += texture2D( tDiffuse, vec2( vUv.x + 4.0 * hh, vUv.y ) ) * 0.051; - - gl_FragColor = sum; - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/HueSaturationShader.js -var HueSaturationShader = { - uniforms: { - tDiffuse: { value: null }, - hue: { value: 0 }, - saturation: { value: 0 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform sampler2D tDiffuse; - uniform float hue; - uniform float saturation; - - varying vec2 vUv; - - void main() { - - gl_FragColor = texture2D( tDiffuse, vUv ); - - // hue - float angle = hue * 3.14159265; - float s = sin(angle), c = cos(angle); - vec3 weights = (vec3(2.0 * c, -sqrt(3.0) * s - c, sqrt(3.0) * s - c) + 1.0) / 3.0; - float len = length(gl_FragColor.rgb); - gl_FragColor.rgb = vec3( - dot(gl_FragColor.rgb, weights.xyz), - dot(gl_FragColor.rgb, weights.zxy), - dot(gl_FragColor.rgb, weights.yzx) - ); - - // saturation - float average = (gl_FragColor.r + gl_FragColor.g + gl_FragColor.b) / 3.0; - if (saturation > 0.0) { - gl_FragColor.rgb += (average - gl_FragColor.rgb) * (1.0 - 1.0 / (1.001 - saturation)); - } else { - gl_FragColor.rgb += (average - gl_FragColor.rgb) * (-saturation); - } - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/KaleidoShader.js -var KaleidoShader = { - uniforms: { - tDiffuse: { value: null }, - sides: { value: 6 }, - angle: { value: 0 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform sampler2D tDiffuse; - uniform float sides; - uniform float angle; - - varying vec2 vUv; - - void main() { - - vec2 p = vUv - 0.5; - float r = length(p); - float a = atan(p.y, p.x) + angle; - float tau = 2. * 3.1416 ; - a = mod(a, tau/sides); - a = abs(a - tau/sides/2.) ; - p = r * vec2(cos(a), sin(a)); - vec4 color = texture2D(tDiffuse, p + 0.5); - gl_FragColor = color; - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/MirrorShader.js -var MirrorShader = { - uniforms: { - tDiffuse: { value: null }, - side: { value: 1 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform sampler2D tDiffuse; - uniform int side; - - varying vec2 vUv; - - void main() { - - vec2 p = vUv; - if (side == 0){ - if (p.x > 0.5) p.x = 1.0 - p.x; - }else if (side == 1){ - if (p.x < 0.5) p.x = 1.0 - p.x; - }else if (side == 2){ - if (p.y < 0.5) p.y = 1.0 - p.y; - }else if (side == 3){ - if (p.y > 0.5) p.y = 1.0 - p.y; - } - vec4 color = texture2D(tDiffuse, p); - gl_FragColor = color; - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/NormalMapShader.js -var NormalMapShader = { - uniforms: { - heightMap: { value: null }, - resolution: { value: /* @__PURE__ */ new Vector2(512, 512) }, - scale: { value: /* @__PURE__ */ new Vector2(1, 1) }, - height: { value: .05 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform float height; - uniform vec2 resolution; - uniform sampler2D heightMap; - - varying vec2 vUv; - - void main() { - - float val = texture2D( heightMap, vUv ).x; - - float valU = texture2D( heightMap, vUv + vec2( 1.0 / resolution.x, 0.0 ) ).x; - float valV = texture2D( heightMap, vUv + vec2( 0.0, 1.0 / resolution.y ) ).x; - - gl_FragColor = vec4( ( 0.5 * normalize( vec3( val - valU, val - valV, height ) ) + 0.5 ), 1.0 ); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/ParallaxShader.js -var ParallaxShader = { - modes: { - none: "NO_PARALLAX", - basic: "USE_BASIC_PARALLAX", - steep: "USE_STEEP_PARALLAX", - occlusion: "USE_OCLUSION_PARALLAX", - relief: "USE_RELIEF_PARALLAX" - }, - uniforms: { - bumpMap: { value: null }, - map: { value: null }, - parallaxScale: { value: null }, - parallaxMinLayers: { value: null }, - parallaxMaxLayers: { value: null } - }, - vertexShader: ` - varying vec2 vUv; - varying vec3 vViewPosition; - varying vec3 vNormal; - - void main() { - - vUv = uv; - vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 ); - vViewPosition = -mvPosition.xyz; - vNormal = normalize( normalMatrix * normal ); - gl_Position = projectionMatrix * mvPosition; - - } - `, - fragmentShader: ` - uniform sampler2D bumpMap; - uniform sampler2D map; - - uniform float parallaxScale; - uniform float parallaxMinLayers; - uniform float parallaxMaxLayers; - - varying vec2 vUv; - varying vec3 vViewPosition; - varying vec3 vNormal; - - #ifdef USE_BASIC_PARALLAX - - vec2 parallaxMap( in vec3 V ) { - - float initialHeight = texture2D( bumpMap, vUv ).r; - - // No Offset Limitting: messy, floating output at grazing angles. - //vec2 texCoordOffset = parallaxScale * V.xy / V.z * initialHeight; - - // Offset Limiting - vec2 texCoordOffset = parallaxScale * V.xy * initialHeight; - return vUv - texCoordOffset; - - } - - #else - - vec2 parallaxMap( in vec3 V ) { - - // Determine number of layers from angle between V and N - float numLayers = mix( parallaxMaxLayers, parallaxMinLayers, abs( dot( vec3( 0.0, 0.0, 1.0 ), V ) ) ); - - float layerHeight = 1.0 / numLayers; - float currentLayerHeight = 0.0; - // Shift of texture coordinates for each iteration - vec2 dtex = parallaxScale * V.xy / V.z / numLayers; - - vec2 currentTextureCoords = vUv; - - float heightFromTexture = texture2D( bumpMap, currentTextureCoords ).r; - - // while ( heightFromTexture > currentLayerHeight ) - // Infinite loops are not well supported. Do a "large" finite - // loop, but not too large, as it slows down some compilers. - for ( int i = 0; i < 30; i += 1 ) { - if ( heightFromTexture <= currentLayerHeight ) { - break; - } - currentLayerHeight += layerHeight; - // Shift texture coordinates along vector V - currentTextureCoords -= dtex; - heightFromTexture = texture2D( bumpMap, currentTextureCoords ).r; - } - - #ifdef USE_STEEP_PARALLAX - - return currentTextureCoords; - - #elif defined( USE_RELIEF_PARALLAX ) - - vec2 deltaTexCoord = dtex / 2.0; - float deltaHeight = layerHeight / 2.0; - - // Return to the mid point of previous layer - currentTextureCoords += deltaTexCoord; - currentLayerHeight -= deltaHeight; - - // Binary search to increase precision of Steep Parallax Mapping - const int numSearches = 5; - for ( int i = 0; i < numSearches; i += 1 ) { - - deltaTexCoord /= 2.0; - deltaHeight /= 2.0; - heightFromTexture = texture2D( bumpMap, currentTextureCoords ).r; - // Shift along or against vector V - if( heightFromTexture > currentLayerHeight ) { // Below the surface - - currentTextureCoords -= deltaTexCoord; - currentLayerHeight += deltaHeight; - - } else { // above the surface - - currentTextureCoords += deltaTexCoord; - currentLayerHeight -= deltaHeight; - - } - - } - return currentTextureCoords; - - #elif defined( USE_OCLUSION_PARALLAX ) - - vec2 prevTCoords = currentTextureCoords + dtex; - - // Heights for linear interpolation - float nextH = heightFromTexture - currentLayerHeight; - float prevH = texture2D( bumpMap, prevTCoords ).r - currentLayerHeight + layerHeight; - - // Proportions for linear interpolation - float weight = nextH / ( nextH - prevH ); - - // Interpolation of texture coordinates - return prevTCoords * weight + currentTextureCoords * ( 1.0 - weight ); - - #else // NO_PARALLAX - - return vUv; - - #endif - - } - #endif - - vec2 perturbUv( vec3 surfPosition, vec3 surfNormal, vec3 viewPosition ) { - - vec2 texDx = dFdx( vUv ); - vec2 texDy = dFdy( vUv ); - - vec3 vSigmaX = dFdx( surfPosition ); - vec3 vSigmaY = dFdy( surfPosition ); - vec3 vR1 = cross( vSigmaY, surfNormal ); - vec3 vR2 = cross( surfNormal, vSigmaX ); - float fDet = dot( vSigmaX, vR1 ); - - vec2 vProjVscr = ( 1.0 / fDet ) * vec2( dot( vR1, viewPosition ), dot( vR2, viewPosition ) ); - vec3 vProjVtex; - vProjVtex.xy = texDx * vProjVscr.x + texDy * vProjVscr.y; - vProjVtex.z = dot( surfNormal, viewPosition ); - - return parallaxMap( vProjVtex ); - } - - void main() { - - vec2 mapUv = perturbUv( -vViewPosition, normalize( vNormal ), normalize( vViewPosition ) ); - gl_FragColor = texture2D( map, mapUv ); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/PixelShader.js -var PixelShader = { - uniforms: { - tDiffuse: { value: null }, - resolution: { value: null }, - pixelSize: { value: 1 } - }, - vertexShader: ` - varying highp vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform sampler2D tDiffuse; - uniform float pixelSize; - uniform vec2 resolution; - - varying highp vec2 vUv; - - void main(){ - - vec2 dxy = pixelSize / resolution; - vec2 coord = dxy * floor( vUv / dxy ); - gl_FragColor = texture2D(tDiffuse, coord); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/RGBShiftShader.js -var RGBShiftShader = { - uniforms: { - tDiffuse: { value: null }, - amount: { value: .005 }, - angle: { value: 0 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform sampler2D tDiffuse; - uniform float amount; - uniform float angle; - - varying vec2 vUv; - - void main() { - - vec2 offset = amount * vec2( cos(angle), sin(angle)); - vec4 cr = texture2D(tDiffuse, vUv + offset); - vec4 cga = texture2D(tDiffuse, vUv); - vec4 cb = texture2D(tDiffuse, vUv - offset); - gl_FragColor = vec4(cr.r, cga.g, cb.b, cga.a); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/SepiaShader.js -var SepiaShader = { - uniforms: { - tDiffuse: { value: null }, - amount: { value: 1 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform float amount; - - uniform sampler2D tDiffuse; - - varying vec2 vUv; - - void main() { - - vec4 color = texture2D( tDiffuse, vUv ); - vec3 c = color.rgb; - - color.r = dot( c, vec3( 1.0 - 0.607 * amount, 0.769 * amount, 0.189 * amount ) ); - color.g = dot( c, vec3( 0.349 * amount, 1.0 - 0.314 * amount, 0.168 * amount ) ); - color.b = dot( c, vec3( 0.272 * amount, 0.534 * amount, 1.0 - 0.869 * amount ) ); - - gl_FragColor = vec4( min( vec3( 1.0 ), color.rgb ), color.a ); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/SobelOperatorShader.js -var SobelOperatorShader = { - uniforms: { - tDiffuse: { value: null }, - resolution: { value: /* @__PURE__ */ new Vector2() } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform sampler2D tDiffuse; - uniform vec2 resolution; - varying vec2 vUv; - - void main() { - - vec2 texel = vec2( 1.0 / resolution.x, 1.0 / resolution.y ); - - // kernel definition (in glsl matrices are filled in column-major order) - - const mat3 Gx = mat3( -1, -2, -1, 0, 0, 0, 1, 2, 1 ); // x direction kernel - const mat3 Gy = mat3( -1, 0, 1, -2, 0, 2, -1, 0, 1 ); // y direction kernel - - // fetch the 3x3 neighbourhood of a fragment - - // first column - - float tx0y0 = texture2D( tDiffuse, vUv + texel * vec2( -1, -1 ) ).r; - float tx0y1 = texture2D( tDiffuse, vUv + texel * vec2( -1, 0 ) ).r; - float tx0y2 = texture2D( tDiffuse, vUv + texel * vec2( -1, 1 ) ).r; - - // second column - - float tx1y0 = texture2D( tDiffuse, vUv + texel * vec2( 0, -1 ) ).r; - float tx1y1 = texture2D( tDiffuse, vUv + texel * vec2( 0, 0 ) ).r; - float tx1y2 = texture2D( tDiffuse, vUv + texel * vec2( 0, 1 ) ).r; - - // third column - - float tx2y0 = texture2D( tDiffuse, vUv + texel * vec2( 1, -1 ) ).r; - float tx2y1 = texture2D( tDiffuse, vUv + texel * vec2( 1, 0 ) ).r; - float tx2y2 = texture2D( tDiffuse, vUv + texel * vec2( 1, 1 ) ).r; - - // gradient value in x direction - - float valueGx = Gx[0][0] * tx0y0 + Gx[1][0] * tx1y0 + Gx[2][0] * tx2y0 + - Gx[0][1] * tx0y1 + Gx[1][1] * tx1y1 + Gx[2][1] * tx2y1 + - Gx[0][2] * tx0y2 + Gx[1][2] * tx1y2 + Gx[2][2] * tx2y2; - - // gradient value in y direction - - float valueGy = Gy[0][0] * tx0y0 + Gy[1][0] * tx1y0 + Gy[2][0] * tx2y0 + - Gy[0][1] * tx0y1 + Gy[1][1] * tx1y1 + Gy[2][1] * tx2y1 + - Gy[0][2] * tx0y2 + Gy[1][2] * tx1y2 + Gy[2][2] * tx2y2; - - // magnitute of the total gradient - - float G = sqrt( ( valueGx * valueGx ) + ( valueGy * valueGy ) ); - - gl_FragColor = vec4( vec3( G ), 1 ); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/SubsurfaceScatteringShader.js -var _SubsurfaceScatteringShader; -function get() { - if (_SubsurfaceScatteringShader) return _SubsurfaceScatteringShader; - const meshphong_frag_head = ShaderChunk["meshphong_frag"].slice(0, ShaderChunk["meshphong_frag"].indexOf("void main() {")); - const meshphong_frag_body = ShaderChunk["meshphong_frag"].slice(ShaderChunk["meshphong_frag"].indexOf("void main() {")); - _SubsurfaceScatteringShader = { - uniforms: UniformsUtils.merge([ShaderLib["phong"].uniforms, { - thicknessMap: { value: null }, - thicknessColor: { value: new Color(16777215) }, - thicknessDistortion: { value: .1 }, - thicknessAmbient: { value: 0 }, - thicknessAttenuation: { value: .1 }, - thicknessPower: { value: 2 }, - thicknessScale: { value: 10 } - }]), - vertexShader: ` - #define USE_UV - ${ShaderChunk["meshphong_vert"]} - `, - fragmentShader: ` - #define USE_UV', - #define SUBSURFACE', - - ${meshphong_frag_head} - - uniform sampler2D thicknessMap; - uniform float thicknessPower; - uniform float thicknessScale; - uniform float thicknessDistortion; - uniform float thicknessAmbient; - uniform float thicknessAttenuation; - uniform vec3 thicknessColor; - - void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in GeometricContext geometry, inout ReflectedLight reflectedLight) { - vec3 thickness = thicknessColor * texture2D(thicknessMap, uv).r; - vec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * thicknessDistortion)); - float scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), thicknessPower) * thicknessScale; - vec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness; - reflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color; - } - - ${meshphong_frag_body.replace("#include <lights_fragment_begin>", ShaderChunk["lights_fragment_begin"].replace(/RE_Direct\( directLight, geometry, material, reflectedLight \);/g, ` - RE_Direct( directLight, geometry, material, reflectedLight ); - - #if defined( SUBSURFACE ) && defined( USE_UV ) - RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight); - #endif - `))} - ` - }; - return _SubsurfaceScatteringShader; -} -var SubsurfaceScatteringShader = { - get uniforms() { - return get().uniforms; - }, - set uniforms(value) { - get().uniforms = value; - }, - get vertexShader() { - return get().vertexShader; - }, - set vertexShader(value) { - get().vertexShader = value; - }, - get fragmentShader() { - return get().vertexShader; - }, - set fragmentShader(value) { - get().vertexShader = value; - } -}; -//#endregion -//#region node_modules/three-stdlib/shaders/TechnicolorShader.js -var TechnicolorShader = { - uniforms: { tDiffuse: { value: null } }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform sampler2D tDiffuse; - varying vec2 vUv; - - void main() { - - vec4 tex = texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ); - vec4 newTex = vec4(tex.r, (tex.g + tex.b) * .5, (tex.g + tex.b) * .5, 1.0); - - gl_FragColor = newTex; - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/ToonShader.js -var ToonShader1 = { - uniforms: { - uDirLightPos: { value: /* @__PURE__ */ new Vector3() }, - uDirLightColor: { value: /* @__PURE__ */ new Color(15658734) }, - uAmbientLightColor: { value: /* @__PURE__ */ new Color(328965) }, - uBaseColor: { value: /* @__PURE__ */ new Color(16777215) } - }, - vertexShader: ` - varying vec3 vNormal; - varying vec3 vRefract; - - void main() { - - vec4 worldPosition = modelMatrix * vec4( position, 1.0 ); - vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 ); - vec3 worldNormal = normalize ( mat3( modelMatrix[0].xyz, modelMatrix[1].xyz, modelMatrix[2].xyz ) * normal ); - - vNormal = normalize( normalMatrix * normal ); - - vec3 I = worldPosition.xyz - cameraPosition; - vRefract = refract( normalize( I ), worldNormal, 1.02 ); - - gl_Position = projectionMatrix * mvPosition; - - } - `, - fragmentShader: ` - uniform vec3 uBaseColor; - - uniform vec3 uDirLightPos; - uniform vec3 uDirLightColor; - - uniform vec3 uAmbientLightColor; - - varying vec3 vNormal; - - varying vec3 vRefract; - - void main() { - - float directionalLightWeighting = max( dot( normalize( vNormal ), uDirLightPos ), 0.0); - vec3 lightWeighting = uAmbientLightColor + uDirLightColor * directionalLightWeighting; - - float intensity = smoothstep( - 0.5, 1.0, pow( length(lightWeighting), 20.0 ) ); - intensity += length(lightWeighting) * 0.2; - - float cameraWeighting = dot( normalize( vNormal ), vRefract ); - intensity += pow( 1.0 - length( cameraWeighting ), 6.0 ); - intensity = intensity * 0.2 + 0.3; - - if ( intensity < 0.50 ) { - - gl_FragColor = vec4( 2.0 * intensity * uBaseColor, 1.0 ); - - } else { - - gl_FragColor = vec4( 1.0 - 2.0 * ( 1.0 - intensity ) * ( 1.0 - uBaseColor ), 1.0 ); - - } - - } - ` -}; -var ToonShader2 = { - uniforms: { - uDirLightPos: { value: /* @__PURE__ */ new Vector3() }, - uDirLightColor: { value: /* @__PURE__ */ new Color(15658734) }, - uAmbientLightColor: { value: /* @__PURE__ */ new Color(328965) }, - uBaseColor: { value: /* @__PURE__ */ new Color(15658734) }, - uLineColor1: { value: /* @__PURE__ */ new Color(8421504) }, - uLineColor2: { value: /* @__PURE__ */ new Color(0) }, - uLineColor3: { value: /* @__PURE__ */ new Color(0) }, - uLineColor4: { value: /* @__PURE__ */ new Color(0) } - }, - vertexShader: ` - varying vec3 vNormal; - - void main() { - - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - vNormal = normalize( normalMatrix * normal ); - - } - `, - fragmentShader: ` - uniform vec3 uBaseColor; - uniform vec3 uLineColor1; - uniform vec3 uLineColor2; - uniform vec3 uLineColor3; - uniform vec3 uLineColor4; - - uniform vec3 uDirLightPos; - uniform vec3 uDirLightColor; - - uniform vec3 uAmbientLightColor; - - varying vec3 vNormal; - - void main() { - - float camera = max( dot( normalize( vNormal ), vec3( 0.0, 0.0, 1.0 ) ), 0.4); - float light = max( dot( normalize( vNormal ), uDirLightPos ), 0.0); - - gl_FragColor = vec4( uBaseColor, 1.0 ); - - if ( length(uAmbientLightColor + uDirLightColor * light) < 1.00 ) { - - gl_FragColor *= vec4( uLineColor1, 1.0 ); - - } - - if ( length(uAmbientLightColor + uDirLightColor * camera) < 0.50 ) { - - gl_FragColor *= vec4( uLineColor2, 1.0 ); - - } - - } - ` -}; -var ToonShaderHatching = { - uniforms: { - uDirLightPos: { value: /* @__PURE__ */ new Vector3() }, - uDirLightColor: { value: /* @__PURE__ */ new Color(15658734) }, - uAmbientLightColor: { value: /* @__PURE__ */ new Color(328965) }, - uBaseColor: { value: /* @__PURE__ */ new Color(16777215) }, - uLineColor1: { value: /* @__PURE__ */ new Color(0) }, - uLineColor2: { value: /* @__PURE__ */ new Color(0) }, - uLineColor3: { value: /* @__PURE__ */ new Color(0) }, - uLineColor4: { value: /* @__PURE__ */ new Color(0) } - }, - vertexShader: ` - varying vec3 vNormal; - - void main() { - - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - vNormal = normalize( normalMatrix * normal ); - - } - `, - fragmentShader: ` - uniform vec3 uBaseColor; - uniform vec3 uLineColor1; - uniform vec3 uLineColor2; - uniform vec3 uLineColor3; - uniform vec3 uLineColor4; - - uniform vec3 uDirLightPos; - uniform vec3 uDirLightColor; - - uniform vec3 uAmbientLightColor; - - varying vec3 vNormal; - - void main() { - - float directionalLightWeighting = max( dot( normalize(vNormal), uDirLightPos ), 0.0); - vec3 lightWeighting = uAmbientLightColor + uDirLightColor * directionalLightWeighting; - - gl_FragColor = vec4( uBaseColor, 1.0 ); - - if ( length(lightWeighting) < 1.00 ) { - - if ( mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0) { - - gl_FragColor = vec4( uLineColor1, 1.0 ); - - } - - } - - if ( length(lightWeighting) < 0.75 ) { - - if (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0) { - - gl_FragColor = vec4( uLineColor2, 1.0 ); - - } - - } - - if ( length(lightWeighting) < 0.50 ) { - - if (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0) { - - gl_FragColor = vec4( uLineColor3, 1.0 ); - - } - - } - - if ( length(lightWeighting) < 0.3465 ) { - - if (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0) { - - gl_FragColor = vec4( uLineColor4, 1.0 ); - - } - - } - - } - ` -}; -var ToonShaderDotted = { - uniforms: { - uDirLightPos: { value: /* @__PURE__ */ new Vector3() }, - uDirLightColor: { value: /* @__PURE__ */ new Color(15658734) }, - uAmbientLightColor: { value: /* @__PURE__ */ new Color(328965) }, - uBaseColor: { value: /* @__PURE__ */ new Color(16777215) }, - uLineColor1: { value: /* @__PURE__ */ new Color(0) } - }, - vertexShader: ` - varying vec3 vNormal; - - void main() { - - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - vNormal = normalize( normalMatrix * normal ); - - } - `, - fragmentShader: ` - uniform vec3 uBaseColor; - uniform vec3 uLineColor1; - uniform vec3 uLineColor2; - uniform vec3 uLineColor3; - uniform vec3 uLineColor4; - - uniform vec3 uDirLightPos; - uniform vec3 uDirLightColor; - - uniform vec3 uAmbientLightColor; - - varying vec3 vNormal; - - void main() { - - float directionalLightWeighting = max( dot( normalize(vNormal), uDirLightPos ), 0.0); - vec3 lightWeighting = uAmbientLightColor + uDirLightColor * directionalLightWeighting; - - gl_FragColor = vec4( uBaseColor, 1.0 ); - - if ( length(lightWeighting) < 1.00 ) { - - if ( ( mod(gl_FragCoord.x, 4.001) + mod(gl_FragCoord.y, 4.0) ) > 6.00 ) { - - gl_FragColor = vec4( uLineColor1, 1.0 ); - - } - - } - - if ( length(lightWeighting) < 0.50 ) { - - if ( ( mod(gl_FragCoord.x + 2.0, 4.001) + mod(gl_FragCoord.y + 2.0, 4.0) ) > 6.00 ) { - - gl_FragColor = vec4( uLineColor1, 1.0 ); - - } - - } - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/TriangleBlurShader.js -var TriangleBlurShader = { - uniforms: { - texture: { value: null }, - delta: { value: /* @__PURE__ */ new Vector2(1, 1) } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - #include <common> - - #define ITERATIONS 10.0 - - uniform sampler2D texture; - uniform vec2 delta; - - varying vec2 vUv; - - void main() { - - vec4 color = vec4( 0.0 ); - - float total = 0.0; - - // randomize the lookup values to hide the fixed number of samples - - float offset = rand( vUv ); - - for ( float t = -ITERATIONS; t <= ITERATIONS; t ++ ) { - - float percent = ( t + offset - 0.5 ) / ITERATIONS; - float weight = 1.0 - abs( percent ); - - color += texture2D( texture, vUv + delta * percent ) * weight; - total += weight; - - } - - gl_FragColor = color / total; - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/VerticalBlurShader.js -var VerticalBlurShader = { - uniforms: { - tDiffuse: { value: null }, - v: { value: 1 / 512 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - - uniform sampler2D tDiffuse; - uniform float v; - - varying vec2 vUv; - - void main() { - - vec4 sum = vec4( 0.0 ); - - sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 4.0 * v ) ) * 0.051; - sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 3.0 * v ) ) * 0.0918; - sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 2.0 * v ) ) * 0.12245; - sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 1.0 * v ) ) * 0.1531; - sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633; - sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 1.0 * v ) ) * 0.1531; - sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 2.0 * v ) ) * 0.12245; - sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 3.0 * v ) ) * 0.0918; - sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 4.0 * v ) ) * 0.051; - - gl_FragColor = sum; - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/VerticalTiltShiftShader.js -var VerticalTiltShiftShader = { - uniforms: { - tDiffuse: { value: null }, - v: { value: 1 / 512 }, - r: { value: .35 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform sampler2D tDiffuse; - uniform float v; - uniform float r; - - varying vec2 vUv; - - void main() { - - vec4 sum = vec4( 0.0 ); - - float vv = v * abs( r - vUv.y ); - - sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 4.0 * vv ) ) * 0.051; - sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 3.0 * vv ) ) * 0.0918; - sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 2.0 * vv ) ) * 0.12245; - sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 1.0 * vv ) ) * 0.1531; - sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633; - sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 1.0 * vv ) ) * 0.1531; - sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 2.0 * vv ) ) * 0.12245; - sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 3.0 * vv ) ) * 0.0918; - sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 4.0 * vv ) ) * 0.051; - - gl_FragColor = sum; - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/VignetteShader.js -var VignetteShader = { - uniforms: { - tDiffuse: { value: null }, - offset: { value: 1 }, - darkness: { value: 1 } - }, - vertexShader: ` - varying vec2 vUv; - - void main() { - - vUv = uv; - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform float offset; - uniform float darkness; - - uniform sampler2D tDiffuse; - - varying vec2 vUv; - - void main() { - - // Eskils vignette - - vec4 texel = texture2D( tDiffuse, vUv ); - vec2 uv = ( vUv - vec2( 0.5 ) ) * vec2( offset ); - gl_FragColor = vec4( mix( texel.rgb, vec3( 1.0 - darkness ), dot( uv, uv ) ), texel.a ); - - /* - // alternative version from glfx.js - // this one makes more "dusty" look (as opposed to "burned") - - vec4 color = texture2D( tDiffuse, vUv ); - float dist = distance( vUv, vec2( 0.5 ) ); - color.rgb *= smoothstep( 0.8, offset * 0.799, dist *( darkness + offset ) ); - gl_FragColor = color; - */ - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/VolumeShader.js -var VolumeRenderShader1 = { - uniforms: { - u_size: { value: /* @__PURE__ */ new Vector3(1, 1, 1) }, - u_renderstyle: { value: 0 }, - u_renderthreshold: { value: .5 }, - u_clim: { value: /* @__PURE__ */ new Vector2(1, 1) }, - u_data: { value: null }, - u_cmdata: { value: null } - }, - vertexShader: ` - varying vec4 v_nearpos; - varying vec4 v_farpos; - varying vec3 v_position; - - void main() { - // Prepare transforms to map to "camera view". See also: - // https://threejs.org/docs/#api/renderers/webgl/WebGLProgram - mat4 viewtransformf = modelViewMatrix; - mat4 viewtransformi = inverse(modelViewMatrix); - - // Project local vertex coordinate to camera position. Then do a step - // backward (in cam coords) to the near clipping plane, and project back. Do - // the same for the far clipping plane. This gives us all the information we - // need to calculate the ray and truncate it to the viewing cone. - vec4 position4 = vec4(position, 1.0); - vec4 pos_in_cam = viewtransformf * position4; - - // Intersection of ray and near clipping plane (z = -1 in clip coords) - pos_in_cam.z = -pos_in_cam.w; - v_nearpos = viewtransformi * pos_in_cam; - - // Intersection of ray and far clipping plane (z = +1 in clip coords) - pos_in_cam.z = pos_in_cam.w; - v_farpos = viewtransformi * pos_in_cam; - - // Set varyings and output pos - v_position = position; - gl_Position = projectionMatrix * viewMatrix * modelMatrix * position4; - } - `, - fragmentShader: ` - precision highp float; - precision mediump sampler3D; - - uniform vec3 u_size; - uniform int u_renderstyle; - uniform float u_renderthreshold; - uniform vec2 u_clim; - - uniform sampler3D u_data; - uniform sampler2D u_cmdata; - - varying vec3 v_position; - varying vec4 v_nearpos; - varying vec4 v_farpos; - - // The maximum distance through our rendering volume is sqrt(3). - const int MAX_STEPS = 887; // 887 for 512^3, 1774 for 1024^3 - const int REFINEMENT_STEPS = 4; - const float relative_step_size = 1.0; - const vec4 ambient_color = vec4(0.2, 0.4, 0.2, 1.0); - const vec4 diffuse_color = vec4(0.8, 0.2, 0.2, 1.0); - const vec4 specular_color = vec4(1.0, 1.0, 1.0, 1.0); - const float shininess = 40.0; - - void cast_mip(vec3 start_loc, vec3 step, int nsteps, vec3 view_ray); - void cast_iso(vec3 start_loc, vec3 step, int nsteps, vec3 view_ray); - - float sample1(vec3 texcoords); - vec4 apply_colormap(float val); - vec4 add_lighting(float val, vec3 loc, vec3 step, vec3 view_ray); - - void main() { - // Normalize clipping plane info - vec3 farpos = v_farpos.xyz / v_farpos.w; - vec3 nearpos = v_nearpos.xyz / v_nearpos.w; - - // Calculate unit vector pointing in the view direction through this fragment. - vec3 view_ray = normalize(nearpos.xyz - farpos.xyz); - - // Compute the (negative) distance to the front surface or near clipping plane. - // v_position is the back face of the cuboid, so the initial distance calculated in the dot - // product below is the distance from near clip plane to the back of the cuboid - float distance = dot(nearpos - v_position, view_ray); - distance = max(distance, min((-0.5 - v_position.x) / view_ray.x, - (u_size.x - 0.5 - v_position.x) / view_ray.x)); - distance = max(distance, min((-0.5 - v_position.y) / view_ray.y, - (u_size.y - 0.5 - v_position.y) / view_ray.y)); - distance = max(distance, min((-0.5 - v_position.z) / view_ray.z, - (u_size.z - 0.5 - v_position.z) / view_ray.z)); - - // Now we have the starting position on the front surface - vec3 front = v_position + view_ray * distance; - - // Decide how many steps to take - int nsteps = int(-distance / relative_step_size + 0.5); - if ( nsteps < 1 ) - discard; - - // Get starting location and step vector in texture coordinates - vec3 step = ((v_position - front) / u_size) / float(nsteps); - vec3 start_loc = front / u_size; - - // For testing: show the number of steps. This helps to establish - // whether the rays are correctly oriented - //gl_FragColor = vec4(0.0, float(nsteps) / 1.0 / u_size.x, 1.0, 1.0); - //return; - - if (u_renderstyle == 0) - cast_mip(start_loc, step, nsteps, view_ray); - else if (u_renderstyle == 1) - cast_iso(start_loc, step, nsteps, view_ray); - - if (gl_FragColor.a < 0.05) - discard; - } - - float sample1(vec3 texcoords) { - /* Sample float value from a 3D texture. Assumes intensity data. */ - return texture(u_data, texcoords.xyz).r; - } - - vec4 apply_colormap(float val) { - val = (val - u_clim[0]) / (u_clim[1] - u_clim[0]); - return texture2D(u_cmdata, vec2(val, 0.5)); - } - - void cast_mip(vec3 start_loc, vec3 step, int nsteps, vec3 view_ray) { - - float max_val = -1e6; - int max_i = 100; - vec3 loc = start_loc; - - // Enter the raycasting loop. In WebGL 1 the loop index cannot be compared with - // non-constant expression. So we use a hard-coded max, and an additional condition - // inside the loop. - for (int iter=0; iter<MAX_STEPS; iter++) { - if (iter >= nsteps) - break; - // Sample from the 3D texture - float val = sample1(loc); - // Apply MIP operation - if (val > max_val) { - max_val = val; - max_i = iter; - } - // Advance location deeper into the volume - loc += step; - } - - // Refine location, gives crispier images - vec3 iloc = start_loc + step * (float(max_i) - 0.5); - vec3 istep = step / float(REFINEMENT_STEPS); - for (int i=0; i<REFINEMENT_STEPS; i++) { - max_val = max(max_val, sample1(iloc)); - iloc += istep; - } - - // Resolve final color - gl_FragColor = apply_colormap(max_val); - } - - void cast_iso(vec3 start_loc, vec3 step, int nsteps, vec3 view_ray) { - - gl_FragColor = vec4(0.0); // init transparent - vec4 color3 = vec4(0.0); // final color - vec3 dstep = 1.5 / u_size; // step to sample derivative - vec3 loc = start_loc; - - float low_threshold = u_renderthreshold - 0.02 * (u_clim[1] - u_clim[0]); - - // Enter the raycasting loop. In WebGL 1 the loop index cannot be compared with - // non-constant expression. So we use a hard-coded max, and an additional condition - // inside the loop. - for (int iter=0; iter<MAX_STEPS; iter++) { - if (iter >= nsteps) - break; - - // Sample from the 3D texture - float val = sample1(loc); - - if (val > low_threshold) { - // Take the last interval in smaller steps - vec3 iloc = loc - 0.5 * step; - vec3 istep = step / float(REFINEMENT_STEPS); - for (int i=0; i<REFINEMENT_STEPS; i++) { - val = sample1(iloc); - if (val > u_renderthreshold) { - gl_FragColor = add_lighting(val, iloc, dstep, view_ray); - return; - } - iloc += istep; - } - } - - // Advance location deeper into the volume - loc += step; - } - } - - vec4 add_lighting(float val, vec3 loc, vec3 step, vec3 view_ray) - { - // Calculate color by incorporating lighting - - // View direction - vec3 V = normalize(view_ray); - - // calculate normal vector from gradient - vec3 N; - float val1, val2; - val1 = sample1(loc + vec3(-step[0], 0.0, 0.0)); - val2 = sample1(loc + vec3(+step[0], 0.0, 0.0)); - N[0] = val1 - val2; - val = max(max(val1, val2), val); - val1 = sample1(loc + vec3(0.0, -step[1], 0.0)); - val2 = sample1(loc + vec3(0.0, +step[1], 0.0)); - N[1] = val1 - val2; - val = max(max(val1, val2), val); - val1 = sample1(loc + vec3(0.0, 0.0, -step[2])); - val2 = sample1(loc + vec3(0.0, 0.0, +step[2])); - N[2] = val1 - val2; - val = max(max(val1, val2), val); - - float gm = length(N); // gradient magnitude - N = normalize(N); - - // Flip normal so it points towards viewer - float Nselect = float(dot(N, V) > 0.0); - N = (2.0 * Nselect - 1.0) * N; // == Nselect * N - (1.0-Nselect)*N; - - // Init colors - vec4 ambient_color = vec4(0.0, 0.0, 0.0, 0.0); - vec4 diffuse_color = vec4(0.0, 0.0, 0.0, 0.0); - vec4 specular_color = vec4(0.0, 0.0, 0.0, 0.0); - - // note: could allow multiple lights - for (int i=0; i<1; i++) - { - // Get light direction (make sure to prevent zero devision) - vec3 L = normalize(view_ray); //lightDirs[i]; - float lightEnabled = float( length(L) > 0.0 ); - L = normalize(L + (1.0 - lightEnabled)); - - // Calculate lighting properties - float lambertTerm = clamp(dot(N, L), 0.0, 1.0); - vec3 H = normalize(L+V); // Halfway vector - float specularTerm = pow(max(dot(H, N), 0.0), shininess); - - // Calculate mask - float mask1 = lightEnabled; - - // Calculate colors - ambient_color += mask1 * ambient_color; // * gl_LightSource[i].ambient; - diffuse_color += mask1 * lambertTerm; - specular_color += mask1 * specularTerm * specular_color; - } - - // Calculate final color by componing different components - vec4 final_color; - vec4 color = apply_colormap(val); - final_color = color * (ambient_color + diffuse_color) + specular_color; - final_color.a = color.a; - return final_color; - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/shaders/WaterRefractionShader.js -var WaterRefractionShader = { - uniforms: { - color: { value: null }, - time: { value: 0 }, - tDiffuse: { value: null }, - tDudv: { value: null }, - textureMatrix: { value: null } - }, - vertexShader: ` - uniform mat4 textureMatrix; - - varying vec2 vUv; - varying vec4 vUvRefraction; - - void main() { - - vUv = uv; - - vUvRefraction = textureMatrix * vec4( position, 1.0 ); - - gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 ); - - } - `, - fragmentShader: ` - uniform vec3 color; - uniform float time; - uniform sampler2D tDiffuse; - uniform sampler2D tDudv; - - varying vec2 vUv; - varying vec4 vUvRefraction; - - float blendOverlay( float base, float blend ) { - - return( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) ); - - } - - vec3 blendOverlay( vec3 base, vec3 blend ) { - - return vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ),blendOverlay( base.b, blend.b ) ); - - } - - void main() { - - float waveStrength = 0.1; - float waveSpeed = 0.03; - - // simple distortion (ripple) via dudv map (see https://www.youtube.com/watch?v=6B7IF6GOu7s) - - vec2 distortedUv = texture2D( tDudv, vec2( vUv.x + time * waveSpeed, vUv.y ) ).rg * waveStrength; - distortedUv = vUv.xy + vec2( distortedUv.x, distortedUv.y + time * waveSpeed ); - vec2 distortion = ( texture2D( tDudv, distortedUv ).rg * 2.0 - 1.0 ) * waveStrength; - - // new uv coords - - vec4 uv = vec4( vUvRefraction ); - uv.xy += distortion; - - vec4 base = texture2DProj( tDiffuse, uv ); - - gl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 ); - - } - ` -}; -//#endregion -//#region node_modules/three-stdlib/interactive/HTMLMesh.js -var HTMLMesh = class extends Mesh { - constructor(dom) { - const texture = new HTMLTexture(dom); - const geometry = new PlaneGeometry(texture.image.width * .001, texture.image.height * .001); - const material = new MeshBasicMaterial({ - map: texture, - toneMapped: false, - transparent: true - }); - super(geometry, material); - function onEvent(event) { - material.map.dispatchDOMEvent(event); - } - this.addEventListener("mousedown", onEvent); - this.addEventListener("mousemove", onEvent); - this.addEventListener("mouseup", onEvent); - this.addEventListener("click", onEvent); - this.dispose = function() { - geometry.dispose(); - material.dispose(); - material.map.dispose(); - canvases.delete(dom); - this.removeEventListener("mousedown", onEvent); - this.removeEventListener("mousemove", onEvent); - this.removeEventListener("mouseup", onEvent); - this.removeEventListener("click", onEvent); - }; - } -}; -var HTMLTexture = class extends CanvasTexture { - constructor(dom) { - super(html2canvas(dom)); - this.dom = dom; - this.anisotropy = 16; - if ("colorSpace" in this) this.colorSpace = "srgb"; - else this.encoding = 3001; - this.minFilter = LinearFilter; - this.magFilter = LinearFilter; - const observer = new MutationObserver(() => { - if (!this.scheduleUpdate) this.scheduleUpdate = setTimeout(() => this.update(), 16); - }); - observer.observe(dom, { - attributes: true, - childList: true, - subtree: true, - characterData: true - }); - this.observer = observer; - } - dispatchDOMEvent(event) { - if (event.data) htmlevent(this.dom, event.type, event.data.x, event.data.y); - } - update() { - this.image = html2canvas(this.dom); - this.needsUpdate = true; - this.scheduleUpdate = null; - } - dispose() { - if (this.observer) this.observer.disconnect(); - this.scheduleUpdate = clearTimeout(this.scheduleUpdate); - super.dispose(); - } -}; -var canvases = /* @__PURE__ */ new WeakMap(); -function html2canvas(element) { - const range = document.createRange(); - const color = new Color(); - function Clipper(context2) { - const clips = []; - let isClipping = false; - function doClip() { - if (isClipping) { - isClipping = false; - context2.restore(); - } - if (clips.length === 0) return; - let minX = -Infinity, minY = -Infinity; - let maxX = Infinity, maxY = Infinity; - for (let i = 0; i < clips.length; i++) { - const clip = clips[i]; - minX = Math.max(minX, clip.x); - minY = Math.max(minY, clip.y); - maxX = Math.min(maxX, clip.x + clip.width); - maxY = Math.min(maxY, clip.y + clip.height); - } - context2.save(); - context2.beginPath(); - context2.rect(minX, minY, maxX - minX, maxY - minY); - context2.clip(); - isClipping = true; - } - return { - add: function(clip) { - clips.push(clip); - doClip(); - }, - remove: function() { - clips.pop(); - doClip(); - } - }; - } - function drawText(style, x, y, string) { - if (string !== "") { - if (style.textTransform === "uppercase") string = string.toUpperCase(); - context.font = style.fontWeight + " " + style.fontSize + " " + style.fontFamily; - context.textBaseline = "top"; - context.fillStyle = style.color; - context.fillText(string, x, y + parseFloat(style.fontSize) * .1); - } - } - function buildRectPath(x, y, w, h, r) { - if (w < 2 * r) r = w / 2; - if (h < 2 * r) r = h / 2; - context.beginPath(); - context.moveTo(x + r, y); - context.arcTo(x + w, y, x + w, y + h, r); - context.arcTo(x + w, y + h, x, y + h, r); - context.arcTo(x, y + h, x, y, r); - context.arcTo(x, y, x + w, y, r); - context.closePath(); - } - function drawBorder(style, which, x, y, width, height) { - const borderWidth = style[which + "Width"]; - const borderStyle = style[which + "Style"]; - const borderColor = style[which + "Color"]; - if (borderWidth !== "0px" && borderStyle !== "none" && borderColor !== "transparent" && borderColor !== "rgba(0, 0, 0, 0)") { - context.strokeStyle = borderColor; - context.lineWidth = parseFloat(borderWidth); - context.beginPath(); - context.moveTo(x, y); - context.lineTo(x + width, y + height); - context.stroke(); - } - } - function drawElement(element2, style) { - let x = 0, y = 0, width = 0, height = 0; - if (element2.nodeType === Node.TEXT_NODE) { - range.selectNode(element2); - const rect = range.getBoundingClientRect(); - x = rect.left - offset.left - .5; - y = rect.top - offset.top - .5; - width = rect.width; - height = rect.height; - drawText(style, x, y, element2.nodeValue.trim()); - } else if (element2.nodeType === Node.COMMENT_NODE) return; - else if (element2 instanceof HTMLCanvasElement) { - if (element2.style.display === "none") return; - context.save(); - const dpr = window.devicePixelRatio; - context.scale(1 / dpr, 1 / dpr); - context.drawImage(element2, 0, 0); - context.restore(); - } else { - if (element2.style.display === "none") return; - const rect = element2.getBoundingClientRect(); - x = rect.left - offset.left - .5; - y = rect.top - offset.top - .5; - width = rect.width; - height = rect.height; - style = window.getComputedStyle(element2); - buildRectPath(x, y, width, height, parseFloat(style.borderRadius)); - const backgroundColor = style.backgroundColor; - if (backgroundColor !== "transparent" && backgroundColor !== "rgba(0, 0, 0, 0)") { - context.fillStyle = backgroundColor; - context.fill(); - } - const borders = [ - "borderTop", - "borderLeft", - "borderBottom", - "borderRight" - ]; - let match = true; - let prevBorder = null; - for (const border of borders) { - if (prevBorder !== null) match = style[border + "Width"] === style[prevBorder + "Width"] && style[border + "Color"] === style[prevBorder + "Color"] && style[border + "Style"] === style[prevBorder + "Style"]; - if (match === false) break; - prevBorder = border; - } - if (match === true) { - const width2 = parseFloat(style.borderTopWidth); - if (style.borderTopWidth !== "0px" && style.borderTopStyle !== "none" && style.borderTopColor !== "transparent" && style.borderTopColor !== "rgba(0, 0, 0, 0)") { - context.strokeStyle = style.borderTopColor; - context.lineWidth = width2; - context.stroke(); - } - } else { - drawBorder(style, "borderTop", x, y, width, 0); - drawBorder(style, "borderLeft", x, y, 0, height); - drawBorder(style, "borderBottom", x, y + height, width, 0); - drawBorder(style, "borderRight", x + width, y, 0, height); - } - if (element2 instanceof HTMLInputElement) { - let accentColor = style.accentColor; - if (accentColor === void 0 || accentColor === "auto") accentColor = style.color; - color.set(accentColor); - const accentTextColor = Math.sqrt(.299 * color.r ** 2 + .587 * color.g ** 2 + .114 * color.b ** 2) < .5 ? "white" : "#111111"; - if (element2.type === "radio") { - buildRectPath(x, y, width, height, height); - context.fillStyle = "white"; - context.strokeStyle = accentColor; - context.lineWidth = 1; - context.fill(); - context.stroke(); - if (element2.checked) { - buildRectPath(x + 2, y + 2, width - 4, height - 4, height); - context.fillStyle = accentColor; - context.strokeStyle = accentTextColor; - context.lineWidth = 2; - context.fill(); - context.stroke(); - } - } - if (element2.type === "checkbox") { - buildRectPath(x, y, width, height, 2); - context.fillStyle = element2.checked ? accentColor : "white"; - context.strokeStyle = element2.checked ? accentTextColor : accentColor; - context.lineWidth = 1; - context.stroke(); - context.fill(); - if (element2.checked) { - const currentTextAlign = context.textAlign; - context.textAlign = "center"; - drawText({ - color: accentTextColor, - fontFamily: style.fontFamily, - fontSize: height + "px", - fontWeight: "bold" - }, x + width / 2, y, "✔"); - context.textAlign = currentTextAlign; - } - } - if (element2.type === "range") { - const [min, max, value] = [ - "min", - "max", - "value" - ].map((property) => parseFloat(element2[property])); - const position = (value - min) / (max - min) * (width - height); - buildRectPath(x, y + height / 4, width, height / 2, height / 4); - context.fillStyle = accentTextColor; - context.strokeStyle = accentColor; - context.lineWidth = 1; - context.fill(); - context.stroke(); - buildRectPath(x, y + height / 4, position + height / 2, height / 2, height / 4); - context.fillStyle = accentColor; - context.fill(); - buildRectPath(x + position, y, height, height, height / 2); - context.fillStyle = accentColor; - context.fill(); - } - if (element2.type === "color" || element2.type === "text" || element2.type === "number") { - clipper.add({ - x, - y, - width, - height - }); - drawText(style, x + parseInt(style.paddingLeft), y + parseInt(style.paddingTop), element2.value); - clipper.remove(); - } - } - } - const isClipping = style.overflow === "auto" || style.overflow === "hidden"; - if (isClipping) clipper.add({ - x, - y, - width, - height - }); - for (let i = 0; i < element2.childNodes.length; i++) drawElement(element2.childNodes[i], style); - if (isClipping) clipper.remove(); - } - const offset = element.getBoundingClientRect(); - let canvas = canvases.get(element); - if (canvas === void 0) { - canvas = document.createElement("canvas"); - canvas.width = offset.width; - canvas.height = offset.height; - canvases.set(element, canvas); - } - const context = canvas.getContext("2d"); - const clipper = new Clipper(context); - drawElement(element); - return canvas; -} -function htmlevent(element, event, x, y) { - const mouseEventInit = { - clientX: x * element.offsetWidth + element.offsetLeft, - clientY: y * element.offsetHeight + element.offsetTop, - view: element.ownerDocument.defaultView - }; - window.dispatchEvent(new MouseEvent(event, mouseEventInit)); - const rect = element.getBoundingClientRect(); - x = x * rect.width + rect.left; - y = y * rect.height + rect.top; - function traverse(element2) { - if (element2.nodeType !== Node.TEXT_NODE && element2.nodeType !== Node.COMMENT_NODE) { - const rect2 = element2.getBoundingClientRect(); - if (x > rect2.left && x < rect2.right && y > rect2.top && y < rect2.bottom) { - element2.dispatchEvent(new MouseEvent(event, mouseEventInit)); - if (element2 instanceof HTMLInputElement && element2.type === "range" && (event === "mousedown" || event === "click")) { - const [min, max] = ["min", "max"].map((property) => parseFloat(element2[property])); - const width = rect2.width; - const proportion = (x - rect2.x) / width; - element2.value = min + (max - min) * proportion; - element2.dispatchEvent(new InputEvent("input", { bubbles: true })); - } - } - for (let i = 0; i < element2.childNodes.length; i++) traverse(element2.childNodes[i]); - } - } - traverse(element); -} -//#endregion -//#region node_modules/three-stdlib/interactive/InteractiveGroup.js -var _pointer = /* @__PURE__ */ new Vector2(); -var _event = { - type: "", - data: _pointer -}; -var InteractiveGroup = class extends Group { - constructor(renderer, camera) { - super(); - const scope = this; - const raycaster = new Raycaster(); - const tempMatrix = new Matrix4(); - const element = renderer.domElement; - function onPointerEvent(event) { - event.stopPropagation(); - _pointer.x = event.clientX / element.clientWidth * 2 - 1; - _pointer.y = -(event.clientY / element.clientHeight) * 2 + 1; - raycaster.setFromCamera(_pointer, camera); - const intersects = raycaster.intersectObjects(scope.children, false); - if (intersects.length > 0) { - const intersection = intersects[0]; - const object = intersection.object; - const uv = intersection.uv; - _event.type = event.type; - _event.data.set(uv.x, 1 - uv.y); - object.dispatchEvent(_event); - } - } - element.addEventListener("pointerdown", onPointerEvent); - element.addEventListener("pointerup", onPointerEvent); - element.addEventListener("pointermove", onPointerEvent); - element.addEventListener("mousedown", onPointerEvent); - element.addEventListener("mouseup", onPointerEvent); - element.addEventListener("mousemove", onPointerEvent); - element.addEventListener("click", onPointerEvent); - const events = { - move: "mousemove", - select: "click", - selectstart: "mousedown", - selectend: "mouseup" - }; - function onXRControllerEvent(event) { - const controller = event.target; - tempMatrix.identity().extractRotation(controller.matrixWorld); - raycaster.ray.origin.setFromMatrixPosition(controller.matrixWorld); - raycaster.ray.direction.set(0, 0, -1).applyMatrix4(tempMatrix); - const intersections = raycaster.intersectObjects(scope.children, false); - if (intersections.length > 0) { - const intersection = intersections[0]; - const object = intersection.object; - const uv = intersection.uv; - _event.type = events[event.type]; - _event.data.set(uv.x, 1 - uv.y); - object.dispatchEvent(_event); - } - } - const controller1 = renderer.xr.getController(0); - controller1.addEventListener("move", onXRControllerEvent); - controller1.addEventListener("select", onXRControllerEvent); - controller1.addEventListener("selectstart", onXRControllerEvent); - controller1.addEventListener("selectend", onXRControllerEvent); - const controller2 = renderer.xr.getController(1); - controller2.addEventListener("move", onXRControllerEvent); - controller2.addEventListener("select", onXRControllerEvent); - controller2.addEventListener("selectstart", onXRControllerEvent); - controller2.addEventListener("selectend", onXRControllerEvent); - } -}; -//#endregion -//#region node_modules/three-stdlib/interactive/SelectionHelper.js -var SelectionHelper = class { - constructor(selectionBox, renderer, cssClassName) { - this.element = document.createElement("div"); - this.element.classList.add(cssClassName); - this.element.style.pointerEvents = "none"; - this.renderer = renderer; - this.startPoint = new Vector2(); - this.pointTopLeft = new Vector2(); - this.pointBottomRight = new Vector2(); - this.isDown = false; - this.renderer.domElement.addEventListener("pointerdown", (event) => { - this.isDown = true; - this.onSelectStart(event); - }); - this.renderer.domElement.addEventListener("pointermove", (event) => { - if (this.isDown) this.onSelectMove(event); - }); - this.renderer.domElement.addEventListener("pointerup", (event) => { - this.isDown = false; - this.onSelectOver(event); - }); - } - onSelectStart(event) { - this.renderer.domElement.parentElement.appendChild(this.element); - this.element.style.left = `${event.clientX}px`; - this.element.style.top = `${event.clientY}px`; - this.element.style.width = "0px"; - this.element.style.height = "0px"; - this.startPoint.x = event.clientX; - this.startPoint.y = event.clientY; - } - onSelectMove(event) { - this.pointBottomRight.x = Math.max(this.startPoint.x, event.clientX); - this.pointBottomRight.y = Math.max(this.startPoint.y, event.clientY); - this.pointTopLeft.x = Math.min(this.startPoint.x, event.clientX); - this.pointTopLeft.y = Math.min(this.startPoint.y, event.clientY); - this.element.style.left = `${this.pointTopLeft.x}px`; - this.element.style.top = `${this.pointTopLeft.y}px`; - this.element.style.width = `${this.pointBottomRight.x - this.pointTopLeft.x}px`; - this.element.style.height = `${this.pointBottomRight.y - this.pointTopLeft.y}px`; - } - onSelectOver() { - this.element.parentElement.removeChild(this.element); - } -}; -//#endregion -//#region node_modules/three-stdlib/interactive/SelectionBox.js -var frustum = /* @__PURE__ */ new Frustum(); -var center = /* @__PURE__ */ new Vector3(); -var tmpPoint = /* @__PURE__ */ new Vector3(); -var vecNear = /* @__PURE__ */ new Vector3(); -var vecTopLeft = /* @__PURE__ */ new Vector3(); -var vecTopRight = /* @__PURE__ */ new Vector3(); -var vecDownRight = /* @__PURE__ */ new Vector3(); -var vecDownLeft = /* @__PURE__ */ new Vector3(); -var vecFarTopLeft = /* @__PURE__ */ new Vector3(); -var vecFarTopRight = /* @__PURE__ */ new Vector3(); -var vecFarDownRight = /* @__PURE__ */ new Vector3(); -var vecFarDownLeft = /* @__PURE__ */ new Vector3(); -var vectemp1 = /* @__PURE__ */ new Vector3(); -var vectemp2 = /* @__PURE__ */ new Vector3(); -var vectemp3 = /* @__PURE__ */ new Vector3(); -var SelectionBox = class { - constructor(camera, scene, deep) { - this.camera = camera; - this.scene = scene; - this.startPoint = new Vector3(); - this.endPoint = new Vector3(); - this.collection = []; - this.deep = deep || Number.MAX_VALUE; - } - select(startPoint, endPoint) { - this.startPoint = startPoint || this.startPoint; - this.endPoint = endPoint || this.endPoint; - this.collection = []; - this.updateFrustum(this.startPoint, this.endPoint); - this.searchChildInFrustum(frustum, this.scene); - return this.collection; - } - updateFrustum(startPoint, endPoint) { - startPoint = startPoint || this.startPoint; - endPoint = endPoint || this.endPoint; - if (startPoint.x === endPoint.x) endPoint.x += Number.EPSILON; - if (startPoint.y === endPoint.y) endPoint.y += Number.EPSILON; - this.camera.updateProjectionMatrix(); - this.camera.updateMatrixWorld(); - if (this.camera.isPerspectiveCamera) { - tmpPoint.copy(startPoint); - tmpPoint.x = Math.min(startPoint.x, endPoint.x); - tmpPoint.y = Math.max(startPoint.y, endPoint.y); - endPoint.x = Math.max(startPoint.x, endPoint.x); - endPoint.y = Math.min(startPoint.y, endPoint.y); - vecNear.setFromMatrixPosition(this.camera.matrixWorld); - vecTopLeft.copy(tmpPoint); - vecTopRight.set(endPoint.x, tmpPoint.y, 0); - vecDownRight.copy(endPoint); - vecDownLeft.set(tmpPoint.x, endPoint.y, 0); - vecTopLeft.unproject(this.camera); - vecTopRight.unproject(this.camera); - vecDownRight.unproject(this.camera); - vecDownLeft.unproject(this.camera); - vectemp1.copy(vecTopLeft).sub(vecNear); - vectemp2.copy(vecTopRight).sub(vecNear); - vectemp3.copy(vecDownRight).sub(vecNear); - vectemp1.normalize(); - vectemp2.normalize(); - vectemp3.normalize(); - vectemp1.multiplyScalar(this.deep); - vectemp2.multiplyScalar(this.deep); - vectemp3.multiplyScalar(this.deep); - vectemp1.add(vecNear); - vectemp2.add(vecNear); - vectemp3.add(vecNear); - var planes = frustum.planes; - planes[0].setFromCoplanarPoints(vecNear, vecTopLeft, vecTopRight); - planes[1].setFromCoplanarPoints(vecNear, vecTopRight, vecDownRight); - planes[2].setFromCoplanarPoints(vecDownRight, vecDownLeft, vecNear); - planes[3].setFromCoplanarPoints(vecDownLeft, vecTopLeft, vecNear); - planes[4].setFromCoplanarPoints(vecTopRight, vecDownRight, vecDownLeft); - planes[5].setFromCoplanarPoints(vectemp3, vectemp2, vectemp1); - planes[5].normal.multiplyScalar(-1); - } else if (this.camera.isOrthographicCamera) { - const left = Math.min(startPoint.x, endPoint.x); - const top = Math.max(startPoint.y, endPoint.y); - const right = Math.max(startPoint.x, endPoint.x); - const down = Math.min(startPoint.y, endPoint.y); - vecTopLeft.set(left, top, -1); - vecTopRight.set(right, top, -1); - vecDownRight.set(right, down, -1); - vecDownLeft.set(left, down, -1); - vecFarTopLeft.set(left, top, 1); - vecFarTopRight.set(right, top, 1); - vecFarDownRight.set(right, down, 1); - vecFarDownLeft.set(left, down, 1); - vecTopLeft.unproject(this.camera); - vecTopRight.unproject(this.camera); - vecDownRight.unproject(this.camera); - vecDownLeft.unproject(this.camera); - vecFarTopLeft.unproject(this.camera); - vecFarTopRight.unproject(this.camera); - vecFarDownRight.unproject(this.camera); - vecFarDownLeft.unproject(this.camera); - var planes = frustum.planes; - planes[0].setFromCoplanarPoints(vecTopLeft, vecFarTopLeft, vecFarTopRight); - planes[1].setFromCoplanarPoints(vecTopRight, vecFarTopRight, vecFarDownRight); - planes[2].setFromCoplanarPoints(vecFarDownRight, vecFarDownLeft, vecDownLeft); - planes[3].setFromCoplanarPoints(vecFarDownLeft, vecFarTopLeft, vecTopLeft); - planes[4].setFromCoplanarPoints(vecTopRight, vecDownRight, vecDownLeft); - planes[5].setFromCoplanarPoints(vecFarDownRight, vecFarTopRight, vecFarTopLeft); - planes[5].normal.multiplyScalar(-1); - } else console.error("THREE.SelectionBox: Unsupported camera type."); - } - searchChildInFrustum(frustum2, object) { - if (object.isMesh || object.isLine || object.isPoints) { - if (object.material !== void 0) { - if (object.geometry.boundingSphere === null) object.geometry.computeBoundingSphere(); - center.copy(object.geometry.boundingSphere.center); - center.applyMatrix4(object.matrixWorld); - if (frustum2.containsPoint(center)) this.collection.push(object); - } - } - if (object.children.length > 0) for (let x = 0; x < object.children.length; x++) this.searchChildInFrustum(frustum2, object.children[x]); - } -}; -//#endregion -//#region node_modules/three-stdlib/physics/AmmoPhysics.js -async function AmmoPhysics() { - if ("Ammo" in window === false) { - console.error("AmmoPhysics: Couldn't find Ammo.js"); - return; - } - const AmmoLib = await Ammo(); - const frameRate = 60; - const collisionConfiguration = new AmmoLib.btDefaultCollisionConfiguration(); - const dispatcher = new AmmoLib.btCollisionDispatcher(collisionConfiguration); - const broadphase = new AmmoLib.btDbvtBroadphase(); - const solver = new AmmoLib.btSequentialImpulseConstraintSolver(); - const world = new AmmoLib.btDiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConfiguration); - world.setGravity(new AmmoLib.btVector3(0, -9.8, 0)); - const worldTransform = new AmmoLib.btTransform(); - function getShape(geometry) { - const parameters = geometry.parameters; - if (geometry.type === "BoxGeometry") { - const sx = parameters.width !== void 0 ? parameters.width / 2 : .5; - const sy = parameters.height !== void 0 ? parameters.height / 2 : .5; - const sz = parameters.depth !== void 0 ? parameters.depth / 2 : .5; - const shape = new AmmoLib.btBoxShape(new AmmoLib.btVector3(sx, sy, sz)); - shape.setMargin(.05); - return shape; - } else if (geometry.type === "SphereGeometry" || geometry.type === "IcosahedronGeometry") { - const radius = parameters.radius !== void 0 ? parameters.radius : 1; - const shape = new AmmoLib.btSphereShape(radius); - shape.setMargin(.05); - return shape; - } - return null; - } - const meshes = []; - const meshMap = /* @__PURE__ */ new WeakMap(); - function addMesh(mesh, mass = 0) { - const shape = getShape(mesh.geometry); - if (shape !== null) { - if (mesh.isInstancedMesh) handleInstancedMesh(mesh, mass, shape); - else if (mesh.isMesh) handleMesh(mesh, mass, shape); - } - } - function handleMesh(mesh, mass, shape) { - const position = mesh.position; - const quaternion = mesh.quaternion; - const transform = new AmmoLib.btTransform(); - transform.setIdentity(); - transform.setOrigin(new AmmoLib.btVector3(position.x, position.y, position.z)); - transform.setRotation(new AmmoLib.btQuaternion(quaternion.x, quaternion.y, quaternion.z, quaternion.w)); - const motionState = new AmmoLib.btDefaultMotionState(transform); - const localInertia = new AmmoLib.btVector3(0, 0, 0); - shape.calculateLocalInertia(mass, localInertia); - const rbInfo = new AmmoLib.btRigidBodyConstructionInfo(mass, motionState, shape, localInertia); - const body = new AmmoLib.btRigidBody(rbInfo); - world.addRigidBody(body); - if (mass > 0) { - meshes.push(mesh); - meshMap.set(mesh, body); - } - } - function handleInstancedMesh(mesh, mass, shape) { - const array = mesh.instanceMatrix.array; - const bodies = []; - for (let i = 0; i < mesh.count; i++) { - const index = i * 16; - const transform = new AmmoLib.btTransform(); - transform.setFromOpenGLMatrix(array.slice(index, index + 16)); - const motionState = new AmmoLib.btDefaultMotionState(transform); - const localInertia = new AmmoLib.btVector3(0, 0, 0); - shape.calculateLocalInertia(mass, localInertia); - const rbInfo = new AmmoLib.btRigidBodyConstructionInfo(mass, motionState, shape, localInertia); - const body = new AmmoLib.btRigidBody(rbInfo); - world.addRigidBody(body); - bodies.push(body); - } - if (mass > 0) { - mesh.instanceMatrix.setUsage(35048); - meshes.push(mesh); - meshMap.set(mesh, bodies); - } - } - function setMeshPosition(mesh, position, index = 0) { - if (mesh.isInstancedMesh) { - const body = meshMap.get(mesh)[index]; - body.setAngularVelocity(new AmmoLib.btVector3(0, 0, 0)); - body.setLinearVelocity(new AmmoLib.btVector3(0, 0, 0)); - worldTransform.setIdentity(); - worldTransform.setOrigin(new AmmoLib.btVector3(position.x, position.y, position.z)); - body.setWorldTransform(worldTransform); - } else if (mesh.isMesh) { - const body = meshMap.get(mesh); - body.setAngularVelocity(new AmmoLib.btVector3(0, 0, 0)); - body.setLinearVelocity(new AmmoLib.btVector3(0, 0, 0)); - worldTransform.setIdentity(); - worldTransform.setOrigin(new AmmoLib.btVector3(position.x, position.y, position.z)); - body.setWorldTransform(worldTransform); - } - } - let lastTime = 0; - function step() { - const time = performance.now(); - if (lastTime > 0) { - const delta = (time - lastTime) / 1e3; - world.stepSimulation(delta, 10); - } - lastTime = time; - for (let i = 0, l = meshes.length; i < l; i++) { - const mesh = meshes[i]; - if (mesh.isInstancedMesh) { - const array = mesh.instanceMatrix.array; - const bodies = meshMap.get(mesh); - for (let j = 0; j < bodies.length; j++) { - bodies[j].getMotionState().getWorldTransform(worldTransform); - compose(worldTransform.getOrigin(), worldTransform.getRotation(), array, j * 16); - } - mesh.instanceMatrix.needsUpdate = true; - } else if (mesh.isMesh) { - meshMap.get(mesh).getMotionState().getWorldTransform(worldTransform); - const position = worldTransform.getOrigin(); - const quaternion = worldTransform.getRotation(); - mesh.position.set(position.x(), position.y(), position.z()); - mesh.quaternion.set(quaternion.x(), quaternion.y(), quaternion.z(), quaternion.w()); - } - } - } - setInterval(step, 1e3 / frameRate); - return { - addMesh, - setMeshPosition - }; -} -function compose(position, quaternion, array, index) { - const x = quaternion.x(), y = quaternion.y(), z = quaternion.z(), w = quaternion.w(); - const x2 = x + x, y2 = y + y, z2 = z + z; - const xx = x * x2, xy = x * y2, xz = x * z2; - const yy = y * y2, yz = y * z2, zz = z * z2; - const wx = w * x2, wy = w * y2, wz = w * z2; - array[index + 0] = 1 - (yy + zz); - array[index + 1] = xy + wz; - array[index + 2] = xz - wy; - array[index + 3] = 0; - array[index + 4] = xy - wz; - array[index + 5] = 1 - (xx + zz); - array[index + 6] = yz + wx; - array[index + 7] = 0; - array[index + 8] = xz + wy; - array[index + 9] = yz - wx; - array[index + 10] = 1 - (xx + yy); - array[index + 11] = 0; - array[index + 12] = position.x(); - array[index + 13] = position.y(); - array[index + 14] = position.z(); - array[index + 15] = 1; -} -//#endregion -//#region node_modules/three-stdlib/effects/ParallaxBarrierEffect.js -var ParallaxBarrierEffect = class { - constructor(renderer) { - const _camera = new OrthographicCamera(-1, 1, 1, -1, 0, 1); - const _scene = new Scene(); - const _stereo = new StereoCamera(); - const _params = { - minFilter: LinearFilter, - magFilter: NearestFilter, - format: RGBAFormat - }; - const _renderTargetL = new WebGLRenderTarget(512, 512, _params); - const _renderTargetR = new WebGLRenderTarget(512, 512, _params); - const _material = new ShaderMaterial({ - uniforms: { - mapLeft: { value: _renderTargetL.texture }, - mapRight: { value: _renderTargetR.texture } - }, - vertexShader: [ - "varying vec2 vUv;", - "void main() {", - " vUv = vec2( uv.x, uv.y );", - " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", - "}" - ].join("\n"), - fragmentShader: [ - "uniform sampler2D mapLeft;", - "uniform sampler2D mapRight;", - "varying vec2 vUv;", - "void main() {", - " vec2 uv = vUv;", - " if ( ( mod( gl_FragCoord.y, 2.0 ) ) > 1.00 ) {", - " gl_FragColor = texture2D( mapLeft, uv );", - " } else {", - " gl_FragColor = texture2D( mapRight, uv );", - " }", - " #include <tonemapping_fragment>", - ` #include <${version >= 154 ? "colorspace_fragment" : "encodings_fragment"}>`, - "}" - ].join("\n") - }); - const mesh = new Mesh(new PlaneGeometry(2, 2), _material); - _scene.add(mesh); - this.setSize = function(width, height) { - renderer.setSize(width, height); - const pixelRatio = renderer.getPixelRatio(); - _renderTargetL.setSize(width * pixelRatio, height * pixelRatio); - _renderTargetR.setSize(width * pixelRatio, height * pixelRatio); - }; - this.render = function(scene, camera) { - if (scene.matrixWorldAutoUpdate === true) scene.updateMatrixWorld(); - if (camera.parent === null && camera.matrixWorldAutoUpdate === true) camera.updateMatrixWorld(); - _stereo.update(camera); - renderer.setRenderTarget(_renderTargetL); - renderer.clear(); - renderer.render(scene, _stereo.cameraL); - renderer.setRenderTarget(_renderTargetR); - renderer.clear(); - renderer.render(scene, _stereo.cameraR); - renderer.setRenderTarget(null); - renderer.render(_scene, _camera); - }; - } -}; -//#endregion -//#region node_modules/three-stdlib/effects/PeppersGhostEffect.js -var PeppersGhostEffect = class { - constructor(renderer) { - const scope = this; - scope.cameraDistance = 15; - scope.reflectFromAbove = false; - let _halfWidth, _width, _height; - const _cameraF = new PerspectiveCamera(); - const _cameraB = new PerspectiveCamera(); - const _cameraL = new PerspectiveCamera(); - const _cameraR = new PerspectiveCamera(); - const _position = new Vector3(); - const _quaternion = new Quaternion(); - const _scale = new Vector3(); - renderer.autoClear = false; - this.setSize = function(width, height) { - _halfWidth = width / 2; - if (width < height) { - _width = width / 3; - _height = width / 3; - } else { - _width = height / 3; - _height = height / 3; - } - renderer.setSize(width, height); - }; - this.render = function(scene, camera) { - if (scene.matrixWorldAutoUpdate === true) scene.updateMatrixWorld(); - if (camera.parent === null && camera.matrixWorldAutoUpdate === true) camera.updateMatrixWorld(); - camera.matrixWorld.decompose(_position, _quaternion, _scale); - _cameraF.position.copy(_position); - _cameraF.quaternion.copy(_quaternion); - _cameraF.translateZ(scope.cameraDistance); - _cameraF.lookAt(scene.position); - _cameraB.position.copy(_position); - _cameraB.quaternion.copy(_quaternion); - _cameraB.translateZ(-scope.cameraDistance); - _cameraB.lookAt(scene.position); - _cameraB.rotation.z += 180 * (Math.PI / 180); - _cameraL.position.copy(_position); - _cameraL.quaternion.copy(_quaternion); - _cameraL.translateX(-scope.cameraDistance); - _cameraL.lookAt(scene.position); - _cameraL.rotation.x += 90 * (Math.PI / 180); - _cameraR.position.copy(_position); - _cameraR.quaternion.copy(_quaternion); - _cameraR.translateX(scope.cameraDistance); - _cameraR.lookAt(scene.position); - _cameraR.rotation.x += 90 * (Math.PI / 180); - renderer.clear(); - renderer.setScissorTest(true); - renderer.setScissor(_halfWidth - _width / 2, _height * 2, _width, _height); - renderer.setViewport(_halfWidth - _width / 2, _height * 2, _width, _height); - if (scope.reflectFromAbove) renderer.render(scene, _cameraB); - else renderer.render(scene, _cameraF); - renderer.setScissor(_halfWidth - _width / 2, 0, _width, _height); - renderer.setViewport(_halfWidth - _width / 2, 0, _width, _height); - if (scope.reflectFromAbove) renderer.render(scene, _cameraF); - else renderer.render(scene, _cameraB); - renderer.setScissor(_halfWidth - _width / 2 - _width, _height, _width, _height); - renderer.setViewport(_halfWidth - _width / 2 - _width, _height, _width, _height); - if (scope.reflectFromAbove) renderer.render(scene, _cameraR); - else renderer.render(scene, _cameraL); - renderer.setScissor(_halfWidth + _width / 2, _height, _width, _height); - renderer.setViewport(_halfWidth + _width / 2, _height, _width, _height); - if (scope.reflectFromAbove) renderer.render(scene, _cameraL); - else renderer.render(scene, _cameraR); - renderer.setScissorTest(false); - }; - } -}; -//#endregion -//#region node_modules/three-stdlib/effects/OutlineEffect.js -var OutlineEffect = class { - constructor(renderer, parameters = {}) { - this.enabled = true; - const defaultThickness = parameters.defaultThickness !== void 0 ? parameters.defaultThickness : .003; - const defaultColor = new Color().fromArray(parameters.defaultColor !== void 0 ? parameters.defaultColor : [ - 0, - 0, - 0 - ]); - const defaultAlpha = parameters.defaultAlpha !== void 0 ? parameters.defaultAlpha : 1; - const defaultKeepAlive = parameters.defaultKeepAlive !== void 0 ? parameters.defaultKeepAlive : false; - const cache = {}; - const removeThresholdCount = 60; - const originalMaterials = {}; - const originalOnBeforeRenders = {}; - const uniformsOutline = { - outlineThickness: { value: defaultThickness }, - outlineColor: { value: defaultColor }, - outlineAlpha: { value: defaultAlpha } - }; - const vertexShader = [ - "#include <common>", - "#include <uv_pars_vertex>", - "#include <displacementmap_pars_vertex>", - "#include <fog_pars_vertex>", - "#include <morphtarget_pars_vertex>", - "#include <skinning_pars_vertex>", - "#include <logdepthbuf_pars_vertex>", - "#include <clipping_planes_pars_vertex>", - "uniform float outlineThickness;", - "vec4 calculateOutline( vec4 pos, vec3 normal, vec4 skinned ) {", - " float thickness = outlineThickness;", - " const float ratio = 1.0;", - " vec4 pos2 = projectionMatrix * modelViewMatrix * vec4( skinned.xyz + normal, 1.0 );", - " vec4 norm = normalize( pos - pos2 );", - " return pos + norm * thickness * pos.w * ratio;", - "}", - "void main() {", - " #include <uv_vertex>", - " #include <beginnormal_vertex>", - " #include <morphnormal_vertex>", - " #include <skinbase_vertex>", - " #include <skinnormal_vertex>", - " #include <begin_vertex>", - " #include <morphtarget_vertex>", - " #include <skinning_vertex>", - " #include <displacementmap_vertex>", - " #include <project_vertex>", - " vec3 outlineNormal = - objectNormal;", - " gl_Position = calculateOutline( gl_Position, outlineNormal, vec4( transformed, 1.0 ) );", - " #include <logdepthbuf_vertex>", - " #include <clipping_planes_vertex>", - " #include <fog_vertex>", - "}" - ].join("\n"); - const fragmentShader = [ - "#include <common>", - "#include <fog_pars_fragment>", - "#include <logdepthbuf_pars_fragment>", - "#include <clipping_planes_pars_fragment>", - "uniform vec3 outlineColor;", - "uniform float outlineAlpha;", - "void main() {", - " #include <clipping_planes_fragment>", - " #include <logdepthbuf_fragment>", - " gl_FragColor = vec4( outlineColor, outlineAlpha );", - " #include <tonemapping_fragment>", - ` #include <${version >= 154 ? "colorspace_fragment" : "encodings_fragment"}>`, - " #include <fog_fragment>", - " #include <premultiplied_alpha_fragment>", - "}" - ].join("\n"); - function createMaterial() { - return new ShaderMaterial({ - type: "OutlineEffect", - uniforms: UniformsUtils.merge([ - UniformsLib["fog"], - UniformsLib["displacementmap"], - uniformsOutline - ]), - vertexShader, - fragmentShader, - side: 1 - }); - } - function getOutlineMaterialFromCache(originalMaterial) { - let data = cache[originalMaterial.uuid]; - if (data === void 0) { - data = { - material: createMaterial(), - used: true, - keepAlive: defaultKeepAlive, - count: 0 - }; - cache[originalMaterial.uuid] = data; - } - data.used = true; - return data.material; - } - function getOutlineMaterial(originalMaterial) { - const outlineMaterial = getOutlineMaterialFromCache(originalMaterial); - originalMaterials[outlineMaterial.uuid] = originalMaterial; - updateOutlineMaterial(outlineMaterial, originalMaterial); - return outlineMaterial; - } - function isCompatible(object) { - const geometry = object.geometry; - const hasNormals = geometry !== void 0 && geometry.attributes.normal !== void 0; - return object.isMesh === true && object.material !== void 0 && hasNormals === true; - } - function setOutlineMaterial(object) { - if (isCompatible(object) === false) return; - if (Array.isArray(object.material)) for (let i = 0, il = object.material.length; i < il; i++) object.material[i] = getOutlineMaterial(object.material[i]); - else object.material = getOutlineMaterial(object.material); - originalOnBeforeRenders[object.uuid] = object.onBeforeRender; - object.onBeforeRender = onBeforeRender; - } - function restoreOriginalMaterial(object) { - if (isCompatible(object) === false) return; - if (Array.isArray(object.material)) for (let i = 0, il = object.material.length; i < il; i++) object.material[i] = originalMaterials[object.material[i].uuid]; - else object.material = originalMaterials[object.material.uuid]; - object.onBeforeRender = originalOnBeforeRenders[object.uuid]; - } - function onBeforeRender(renderer2, scene, camera, geometry, material) { - const originalMaterial = originalMaterials[material.uuid]; - if (originalMaterial === void 0) return; - updateUniforms(material, originalMaterial); - } - function updateUniforms(material, originalMaterial) { - const outlineParameters = originalMaterial.userData.outlineParameters; - material.uniforms.outlineAlpha.value = originalMaterial.opacity; - if (outlineParameters !== void 0) { - if (outlineParameters.thickness !== void 0) material.uniforms.outlineThickness.value = outlineParameters.thickness; - if (outlineParameters.color !== void 0) material.uniforms.outlineColor.value.fromArray(outlineParameters.color); - if (outlineParameters.alpha !== void 0) material.uniforms.outlineAlpha.value = outlineParameters.alpha; - } - if (originalMaterial.displacementMap) { - material.uniforms.displacementMap.value = originalMaterial.displacementMap; - material.uniforms.displacementScale.value = originalMaterial.displacementScale; - material.uniforms.displacementBias.value = originalMaterial.displacementBias; - } - } - function updateOutlineMaterial(material, originalMaterial) { - if (material.name === "invisible") return; - const outlineParameters = originalMaterial.userData.outlineParameters; - material.fog = originalMaterial.fog; - material.toneMapped = originalMaterial.toneMapped; - material.premultipliedAlpha = originalMaterial.premultipliedAlpha; - material.displacementMap = originalMaterial.displacementMap; - if (outlineParameters !== void 0) { - if (originalMaterial.visible === false) material.visible = false; - else material.visible = outlineParameters.visible !== void 0 ? outlineParameters.visible : true; - material.transparent = outlineParameters.alpha !== void 0 && outlineParameters.alpha < 1 ? true : originalMaterial.transparent; - if (outlineParameters.keepAlive !== void 0) cache[originalMaterial.uuid].keepAlive = outlineParameters.keepAlive; - } else { - material.transparent = originalMaterial.transparent; - material.visible = originalMaterial.visible; - } - if (originalMaterial.wireframe === true || originalMaterial.depthTest === false) material.visible = false; - if (originalMaterial.clippingPlanes) { - material.clipping = true; - material.clippingPlanes = originalMaterial.clippingPlanes; - material.clipIntersection = originalMaterial.clipIntersection; - material.clipShadows = originalMaterial.clipShadows; - } - material.version = originalMaterial.version; - } - function cleanupCache() { - let keys; - keys = Object.keys(originalMaterials); - for (let i = 0, il = keys.length; i < il; i++) originalMaterials[keys[i]] = void 0; - keys = Object.keys(originalOnBeforeRenders); - for (let i = 0, il = keys.length; i < il; i++) originalOnBeforeRenders[keys[i]] = void 0; - keys = Object.keys(cache); - for (let i = 0, il = keys.length; i < il; i++) { - const key = keys[i]; - if (cache[key].used === false) { - cache[key].count++; - if (cache[key].keepAlive === false && cache[key].count > removeThresholdCount) delete cache[key]; - } else { - cache[key].used = false; - cache[key].count = 0; - } - } - } - this.render = function(scene, camera) { - if (this.enabled === false) { - renderer.render(scene, camera); - return; - } - const currentAutoClear = renderer.autoClear; - renderer.autoClear = this.autoClear; - renderer.render(scene, camera); - renderer.autoClear = currentAutoClear; - this.renderOutline(scene, camera); - }; - this.renderOutline = function(scene, camera) { - const currentAutoClear = renderer.autoClear; - const currentSceneAutoUpdate = scene.matrixWorldAutoUpdate; - const currentSceneBackground = scene.background; - const currentShadowMapEnabled = renderer.shadowMap.enabled; - scene.matrixWorldAutoUpdate = false; - scene.background = null; - renderer.autoClear = false; - renderer.shadowMap.enabled = false; - scene.traverse(setOutlineMaterial); - renderer.render(scene, camera); - scene.traverse(restoreOriginalMaterial); - cleanupCache(); - scene.matrixWorldAutoUpdate = currentSceneAutoUpdate; - scene.background = currentSceneBackground; - renderer.autoClear = currentAutoClear; - renderer.shadowMap.enabled = currentShadowMapEnabled; - }; - this.autoClear = renderer.autoClear; - this.domElement = renderer.domElement; - this.shadowMap = renderer.shadowMap; - this.clear = function(color, depth, stencil) { - renderer.clear(color, depth, stencil); - }; - this.getPixelRatio = function() { - return renderer.getPixelRatio(); - }; - this.setPixelRatio = function(value) { - renderer.setPixelRatio(value); - }; - this.getSize = function(target) { - return renderer.getSize(target); - }; - this.setSize = function(width, height, updateStyle) { - renderer.setSize(width, height, updateStyle); - }; - this.setViewport = function(x, y, width, height) { - renderer.setViewport(x, y, width, height); - }; - this.setScissor = function(x, y, width, height) { - renderer.setScissor(x, y, width, height); - }; - this.setScissorTest = function(boolean) { - renderer.setScissorTest(boolean); - }; - this.setRenderTarget = function(renderTarget) { - renderer.setRenderTarget(renderTarget); - }; - } -}; -//#endregion -//#region node_modules/three-stdlib/effects/AnaglyphEffect.js -var AnaglyphEffect = class { - constructor(renderer, width = 512, height = 512) { - this.colorMatrixLeft = new Matrix3().fromArray([ - .4561, - -.0400822, - -.0152161, - .500484, - -.0378246, - -.0205971, - .176381, - -.0157589, - -.00546856 - ]); - this.colorMatrixRight = new Matrix3().fromArray([ - -.0434706, - .378476, - -.0721527, - -.0879388, - .73364, - -.112961, - -.00155529, - -.0184503, - 1.2264 - ]); - const _camera = new OrthographicCamera(-1, 1, 1, -1, 0, 1); - const _scene = new Scene(); - const _stereo = new StereoCamera(); - const _params = { - minFilter: LinearFilter, - magFilter: NearestFilter, - format: RGBAFormat - }; - const _renderTargetL = new WebGLRenderTarget(width, height, _params); - const _renderTargetR = new WebGLRenderTarget(width, height, _params); - const _material = new ShaderMaterial({ - uniforms: { - mapLeft: { value: _renderTargetL.texture }, - mapRight: { value: _renderTargetR.texture }, - colorMatrixLeft: { value: this.colorMatrixLeft }, - colorMatrixRight: { value: this.colorMatrixRight } - }, - vertexShader: [ - "varying vec2 vUv;", - "void main() {", - " vUv = vec2( uv.x, uv.y );", - " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", - "}" - ].join("\n"), - fragmentShader: [ - "uniform sampler2D mapLeft;", - "uniform sampler2D mapRight;", - "varying vec2 vUv;", - "uniform mat3 colorMatrixLeft;", - "uniform mat3 colorMatrixRight;", - "void main() {", - " vec2 uv = vUv;", - " vec4 colorL = texture2D( mapLeft, uv );", - " vec4 colorR = texture2D( mapRight, uv );", - " vec3 color = clamp(", - " colorMatrixLeft * colorL.rgb +", - " colorMatrixRight * colorR.rgb, 0., 1. );", - " gl_FragColor = vec4(", - " color.r, color.g, color.b,", - " max( colorL.a, colorR.a ) );", - " #include <tonemapping_fragment>", - ` #include <${version >= 154 ? "colorspace_fragment" : "encodings_fragment"}>`, - "}" - ].join("\n") - }); - const _mesh = new Mesh(new PlaneGeometry(2, 2), _material); - _scene.add(_mesh); - this.setSize = function(width2, height2) { - renderer.setSize(width2, height2); - const pixelRatio = renderer.getPixelRatio(); - _renderTargetL.setSize(width2 * pixelRatio, height2 * pixelRatio); - _renderTargetR.setSize(width2 * pixelRatio, height2 * pixelRatio); - }; - this.render = function(scene, camera) { - const currentRenderTarget = renderer.getRenderTarget(); - if (scene.matrixWorldAutoUpdate === true) scene.updateMatrixWorld(); - if (camera.parent === null && camera.matrixWorldAutoUpdate === true) camera.updateMatrixWorld(); - _stereo.update(camera); - renderer.setRenderTarget(_renderTargetL); - renderer.clear(); - renderer.render(scene, _stereo.cameraL); - renderer.setRenderTarget(_renderTargetR); - renderer.clear(); - renderer.render(scene, _stereo.cameraR); - renderer.setRenderTarget(null); - renderer.render(_scene, _camera); - renderer.setRenderTarget(currentRenderTarget); - }; - this.dispose = function() { - _renderTargetL.dispose(); - _renderTargetR.dispose(); - _mesh.geometry.dispose(); - _mesh.material.dispose(); - }; - } -}; -//#endregion -//#region node_modules/three-stdlib/effects/AsciiEffect.js -var AsciiEffect = class { - constructor(renderer, charSet = " .:-=+*#%@", options = {}) { - const fResolution = options["resolution"] || .15; - const iScale = options["scale"] || 1; - const bColor = options["color"] || false; - const bAlpha = options["alpha"] || false; - const bBlock = options["block"] || false; - const bInvert = options["invert"] || false; - const strResolution = options["strResolution"] || "low"; - let width, height; - const domElement = document.createElement("div"); - domElement.style.cursor = "default"; - const oAscii = document.createElement("table"); - domElement.appendChild(oAscii); - let iWidth, iHeight; - let oImg; - this.setSize = function(w, h) { - width = w; - height = h; - renderer.setSize(w, h); - initAsciiSize(); - }; - this.render = function(scene, camera) { - renderer.render(scene, camera); - asciifyImage(oAscii); - }; - this.domElement = domElement; - function initAsciiSize() { - iWidth = Math.floor(width * fResolution); - iHeight = Math.floor(height * fResolution); - oCanvas.width = iWidth; - oCanvas.height = iHeight; - oImg = renderer.domElement; - if (oImg.style.backgroundColor) { - oAscii.rows[0].cells[0].style.backgroundColor = oImg.style.backgroundColor; - oAscii.rows[0].cells[0].style.color = oImg.style.color; - } - oAscii.cellSpacing = 0; - oAscii.cellPadding = 0; - const oStyle = oAscii.style; - oStyle.whiteSpace = "pre"; - oStyle.margin = "0px"; - oStyle.padding = "0px"; - oStyle.letterSpacing = fLetterSpacing + "px"; - oStyle.fontFamily = strFont; - oStyle.fontSize = fFontSize + "px"; - oStyle.lineHeight = fLineHeight + "px"; - oStyle.textAlign = "left"; - oStyle.textDecoration = "none"; - } - const aDefaultCharList = " .,:;i1tfLCG08@".split(""); - const aDefaultColorCharList = " CGO08@".split(""); - const strFont = "courier new, monospace"; - const oCanvasImg = renderer.domElement; - const oCanvas = document.createElement("canvas"); - if (!oCanvas.getContext) return; - const oCtx = oCanvas.getContext("2d"); - if (!oCtx.getImageData) return; - let aCharList = bColor ? aDefaultColorCharList : aDefaultCharList; - if (charSet) aCharList = charSet; - const fFontSize = 2 / fResolution * iScale; - const fLineHeight = 2 / fResolution * iScale; - let fLetterSpacing = 0; - if (strResolution == "low") switch (iScale) { - case 1: - fLetterSpacing = -1; - break; - case 2: - case 3: - fLetterSpacing = -2.1; - break; - case 4: - fLetterSpacing = -3.1; - break; - case 5: - fLetterSpacing = -4.15; - break; - } - if (strResolution == "medium") switch (iScale) { - case 1: - fLetterSpacing = 0; - break; - case 2: - fLetterSpacing = -1; - break; - case 3: - fLetterSpacing = -1.04; - break; - case 4: - case 5: - fLetterSpacing = -2.1; - break; - } - if (strResolution == "high") switch (iScale) { - case 1: - case 2: - fLetterSpacing = 0; - break; - case 3: - case 4: - case 5: - fLetterSpacing = -1; - break; - } - function asciifyImage(oAscii2) { - oCtx.clearRect(0, 0, iWidth, iHeight); - oCtx.drawImage(oCanvasImg, 0, 0, iWidth, iHeight); - const oImgData = oCtx.getImageData(0, 0, iWidth, iHeight).data; - let strChars = ""; - for (let y = 0; y < iHeight; y += 2) { - for (let x = 0; x < iWidth; x++) { - const iOffset = (y * iWidth + x) * 4; - const iRed = oImgData[iOffset]; - const iGreen = oImgData[iOffset + 1]; - const iBlue = oImgData[iOffset + 2]; - const iAlpha = oImgData[iOffset + 3]; - let iCharIdx; - let fBrightness; - fBrightness = (.3 * iRed + .59 * iGreen + .11 * iBlue) / 255; - if (iAlpha == 0) fBrightness = 1; - iCharIdx = Math.floor((1 - fBrightness) * (aCharList.length - 1)); - if (bInvert) iCharIdx = aCharList.length - iCharIdx - 1; - let strThisChar = aCharList[iCharIdx]; - if (strThisChar === void 0 || strThisChar == " ") strThisChar = " "; - if (bColor) strChars += "<span style='color:rgb(" + iRed + "," + iGreen + "," + iBlue + ");" + (bBlock ? "background-color:rgb(" + iRed + "," + iGreen + "," + iBlue + ");" : "") + (bAlpha ? "opacity:" + iAlpha / 255 + ";" : "") + "'>" + strThisChar + "</span>"; - else strChars += strThisChar; - } - strChars += "<br/>"; - } - oAscii2.innerHTML = `<tr><td style="display:block;width:${width}px;height:${height}px;overflow:hidden">${strChars}</td></tr>`; - } - } -}; -//#endregion -//#region node_modules/three-stdlib/effects/StereoEffect.js -var StereoEffect = class { - constructor(renderer) { - const _stereo = new StereoCamera(); - _stereo.aspect = .5; - const size = new Vector2(); - this.setEyeSeparation = function(eyeSep) { - _stereo.eyeSep = eyeSep; - }; - this.setSize = function(width, height) { - renderer.setSize(width, height); - }; - this.render = function(scene, camera) { - if (scene.matrixWorldAutoUpdate === true) scene.updateMatrixWorld(); - if (camera.parent === null && camera.matrixWorldAutoUpdate === true) camera.updateMatrixWorld(); - _stereo.update(camera); - renderer.getSize(size); - if (renderer.autoClear) renderer.clear(); - renderer.setScissorTest(true); - renderer.setScissor(0, 0, size.width / 2, size.height); - renderer.setViewport(0, 0, size.width / 2, size.height); - renderer.render(scene, _stereo.cameraL); - renderer.setScissor(size.width / 2, 0, size.width / 2, size.height); - renderer.setViewport(size.width / 2, 0, size.width / 2, size.height); - renderer.render(scene, _stereo.cameraR); - renderer.setScissorTest(false); - }; - } -}; -//#endregion -//#region node_modules/three-stdlib/curves/NURBSUtils.js -function findSpan(p, u, U) { - const n = U.length - p - 1; - if (u >= U[n]) return n - 1; - if (u <= U[p]) return p; - let low = p; - let high = n; - let mid = Math.floor((low + high) / 2); - while (u < U[mid] || u >= U[mid + 1]) { - if (u < U[mid]) high = mid; - else low = mid; - mid = Math.floor((low + high) / 2); - } - return mid; -} -function calcBasisFunctions(span, u, p, U) { - const N = []; - const left = []; - const right = []; - N[0] = 1; - for (let j = 1; j <= p; ++j) { - left[j] = u - U[span + 1 - j]; - right[j] = U[span + j] - u; - let saved = 0; - for (let r = 0; r < j; ++r) { - const rv = right[r + 1]; - const lv = left[j - r]; - const temp = N[r] / (rv + lv); - N[r] = saved + rv * temp; - saved = lv * temp; - } - N[j] = saved; - } - return N; -} -function calcBSplinePoint(p, U, P, u) { - const span = findSpan(p, u, U); - const N = calcBasisFunctions(span, u, p, U); - const C = new Vector4(0, 0, 0, 0); - for (let j = 0; j <= p; ++j) { - const point = P[span - p + j]; - const Nj = N[j]; - const wNj = point.w * Nj; - C.x += point.x * wNj; - C.y += point.y * wNj; - C.z += point.z * wNj; - C.w += point.w * Nj; - } - return C; -} -function calcBasisFunctionDerivatives(span, u, p, n, U) { - const zeroArr = []; - for (let i = 0; i <= p; ++i) zeroArr[i] = 0; - const ders = []; - for (let i = 0; i <= n; ++i) ders[i] = zeroArr.slice(0); - const ndu = []; - for (let i = 0; i <= p; ++i) ndu[i] = zeroArr.slice(0); - ndu[0][0] = 1; - const left = zeroArr.slice(0); - const right = zeroArr.slice(0); - for (let j = 1; j <= p; ++j) { - left[j] = u - U[span + 1 - j]; - right[j] = U[span + j] - u; - let saved = 0; - for (let r2 = 0; r2 < j; ++r2) { - const rv = right[r2 + 1]; - const lv = left[j - r2]; - ndu[j][r2] = rv + lv; - const temp = ndu[r2][j - 1] / ndu[j][r2]; - ndu[r2][j] = saved + rv * temp; - saved = lv * temp; - } - ndu[j][j] = saved; - } - for (let j = 0; j <= p; ++j) ders[0][j] = ndu[j][p]; - for (let r2 = 0; r2 <= p; ++r2) { - let s1 = 0; - let s2 = 1; - const a = []; - for (let i = 0; i <= p; ++i) a[i] = zeroArr.slice(0); - a[0][0] = 1; - for (let k = 1; k <= n; ++k) { - let d = 0; - const rk = r2 - k; - const pk = p - k; - if (r2 >= k) { - a[s2][0] = a[s1][0] / ndu[pk + 1][rk]; - d = a[s2][0] * ndu[rk][pk]; - } - const j1 = rk >= -1 ? 1 : -rk; - const j2 = r2 - 1 <= pk ? k - 1 : p - r2; - for (let j3 = j1; j3 <= j2; ++j3) { - a[s2][j3] = (a[s1][j3] - a[s1][j3 - 1]) / ndu[pk + 1][rk + j3]; - d += a[s2][j3] * ndu[rk + j3][pk]; - } - if (r2 <= pk) { - a[s2][k] = -a[s1][k - 1] / ndu[pk + 1][r2]; - d += a[s2][k] * ndu[r2][pk]; - } - ders[k][r2] = d; - const j = s1; - s1 = s2; - s2 = j; - } - } - let r = p; - for (let k = 1; k <= n; ++k) { - for (let j = 0; j <= p; ++j) ders[k][j] *= r; - r *= p - k; - } - return ders; -} -function calcBSplineDerivatives(p, U, P, u, nd) { - const du = nd < p ? nd : p; - const CK = []; - const span = findSpan(p, u, U); - const nders = calcBasisFunctionDerivatives(span, u, p, du, U); - const Pw = []; - for (let i = 0; i < P.length; ++i) { - const point = P[i].clone(); - const w = point.w; - point.x *= w; - point.y *= w; - point.z *= w; - Pw[i] = point; - } - for (let k = 0; k <= du; ++k) { - const point = Pw[span - p].clone().multiplyScalar(nders[k][0]); - for (let j = 1; j <= p; ++j) point.add(Pw[span - p + j].clone().multiplyScalar(nders[k][j])); - CK[k] = point; - } - for (let k = du + 1; k <= nd + 1; ++k) CK[k] = new Vector4(0, 0, 0); - return CK; -} -function calcKoverI(k, i) { - let nom = 1; - for (let j = 2; j <= k; ++j) nom *= j; - let denom = 1; - for (let j = 2; j <= i; ++j) denom *= j; - for (let j = 2; j <= k - i; ++j) denom *= j; - return nom / denom; -} -function calcRationalCurveDerivatives(Pders) { - const nd = Pders.length; - const Aders = []; - const wders = []; - for (let i = 0; i < nd; ++i) { - const point = Pders[i]; - Aders[i] = new Vector3(point.x, point.y, point.z); - wders[i] = point.w; - } - const CK = []; - for (let k = 0; k < nd; ++k) { - const v = Aders[k].clone(); - for (let i = 1; i <= k; ++i) v.sub(CK[k - i].clone().multiplyScalar(calcKoverI(k, i) * wders[i])); - CK[k] = v.divideScalar(wders[0]); - } - return CK; -} -function calcNURBSDerivatives(p, U, P, u, nd) { - return calcRationalCurveDerivatives(calcBSplineDerivatives(p, U, P, u, nd)); -} -function calcSurfacePoint(p, q, U, V, P, u, v, target) { - const uspan = findSpan(p, u, U); - const vspan = findSpan(q, v, V); - const Nu = calcBasisFunctions(uspan, u, p, U); - const Nv = calcBasisFunctions(vspan, v, q, V); - const temp = []; - for (let l = 0; l <= q; ++l) { - temp[l] = new Vector4(0, 0, 0, 0); - for (let k = 0; k <= p; ++k) { - const point = P[uspan - p + k][vspan - q + l].clone(); - const w = point.w; - point.x *= w; - point.y *= w; - point.z *= w; - temp[l].add(point.multiplyScalar(Nu[k])); - } - } - const Sw = new Vector4(0, 0, 0, 0); - for (let l = 0; l <= q; ++l) Sw.add(temp[l].multiplyScalar(Nv[l])); - Sw.divideScalar(Sw.w); - target.set(Sw.x, Sw.y, Sw.z); -} -//#endregion -//#region node_modules/three-stdlib/curves/NURBSCurve.js -var NURBSCurve = class extends Curve { - constructor(degree, knots, controlPoints, startKnot, endKnot) { - super(); - this.degree = degree; - this.knots = knots; - this.controlPoints = []; - this.startKnot = startKnot || 0; - this.endKnot = endKnot || this.knots.length - 1; - for (let i = 0; i < controlPoints.length; ++i) { - const point = controlPoints[i]; - this.controlPoints[i] = new Vector4(point.x, point.y, point.z, point.w); - } - } - getPoint(t, optionalTarget) { - const point = optionalTarget || new Vector3(); - const u = this.knots[this.startKnot] + t * (this.knots[this.endKnot] - this.knots[this.startKnot]); - const hpoint = calcBSplinePoint(this.degree, this.knots, this.controlPoints, u); - if (hpoint.w != 1) hpoint.divideScalar(hpoint.w); - return point.set(hpoint.x, hpoint.y, hpoint.z); - } - getTangent(t, optionalTarget) { - const tangent = optionalTarget || new Vector3(); - const u = this.knots[0] + t * (this.knots[this.knots.length - 1] - this.knots[0]); - const ders = calcNURBSDerivatives(this.degree, this.knots, this.controlPoints, u, 1); - tangent.copy(ders[1]).normalize(); - return tangent; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/FBXLoader.js -var fbxTree; -var connections; -var sceneGraph; -var FBXLoader = class extends Loader { - constructor(manager) { - super(manager); - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const path = scope.path === "" ? LoaderUtils.extractUrlBase(url) : scope.path; - const loader = new FileLoader(this.manager); - loader.setPath(scope.path); - loader.setResponseType("arraybuffer"); - loader.setRequestHeader(scope.requestHeader); - loader.setWithCredentials(scope.withCredentials); - loader.load(url, function(buffer) { - try { - onLoad(scope.parse(buffer, path)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(FBXBuffer, path) { - if (isFbxFormatBinary(FBXBuffer)) fbxTree = new BinaryParser().parse(FBXBuffer); - else { - const FBXText = convertArrayBufferToString(FBXBuffer); - if (!isFbxFormatASCII(FBXText)) throw new Error("THREE.FBXLoader: Unknown format."); - if (getFbxVersion(FBXText) < 7e3) throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: " + getFbxVersion(FBXText)); - fbxTree = new TextParser().parse(FBXText); - } - return new FBXTreeParser(new TextureLoader(this.manager).setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin), this.manager).parse(fbxTree); - } -}; -var FBXTreeParser = class { - constructor(textureLoader, manager) { - this.textureLoader = textureLoader; - this.manager = manager; - } - parse() { - connections = this.parseConnections(); - const images = this.parseImages(); - const textures = this.parseTextures(images); - const materials = this.parseMaterials(textures); - const deformers = this.parseDeformers(); - const geometryMap = new GeometryParser$1().parse(deformers); - this.parseScene(deformers, geometryMap, materials); - return sceneGraph; - } - parseConnections() { - const connectionMap = /* @__PURE__ */ new Map(); - if ("Connections" in fbxTree) fbxTree.Connections.connections.forEach(function(rawConnection) { - const fromID = rawConnection[0]; - const toID = rawConnection[1]; - const relationship = rawConnection[2]; - if (!connectionMap.has(fromID)) connectionMap.set(fromID, { - parents: [], - children: [] - }); - const parentRelationship = { - ID: toID, - relationship - }; - connectionMap.get(fromID).parents.push(parentRelationship); - if (!connectionMap.has(toID)) connectionMap.set(toID, { - parents: [], - children: [] - }); - const childRelationship = { - ID: fromID, - relationship - }; - connectionMap.get(toID).children.push(childRelationship); - }); - return connectionMap; - } - parseImages() { - const images = {}; - const blobs = {}; - if ("Video" in fbxTree.Objects) { - const videoNodes = fbxTree.Objects.Video; - for (const nodeID in videoNodes) { - const videoNode = videoNodes[nodeID]; - const id = parseInt(nodeID); - images[id] = videoNode.RelativeFilename || videoNode.Filename; - if ("Content" in videoNode) { - const arrayBufferContent = videoNode.Content instanceof ArrayBuffer && videoNode.Content.byteLength > 0; - const base64Content = typeof videoNode.Content === "string" && videoNode.Content !== ""; - if (arrayBufferContent || base64Content) { - const image = this.parseImage(videoNodes[nodeID]); - blobs[videoNode.RelativeFilename || videoNode.Filename] = image; - } - } - } - } - for (const id in images) { - const filename = images[id]; - if (blobs[filename] !== void 0) images[id] = blobs[filename]; - else images[id] = images[id].split("\\").pop(); - } - return images; - } - parseImage(videoNode) { - const content = videoNode.Content; - const fileName = videoNode.RelativeFilename || videoNode.Filename; - const extension = fileName.slice(fileName.lastIndexOf(".") + 1).toLowerCase(); - let type; - switch (extension) { - case "bmp": - type = "image/bmp"; - break; - case "jpg": - case "jpeg": - type = "image/jpeg"; - break; - case "png": - type = "image/png"; - break; - case "tif": - type = "image/tiff"; - break; - case "tga": - if (this.manager.getHandler(".tga") === null) console.warn("FBXLoader: TGA loader not found, skipping ", fileName); - type = "image/tga"; - break; - default: - console.warn("FBXLoader: Image type \"" + extension + "\" is not supported."); - return; - } - if (typeof content === "string") return "data:" + type + ";base64," + content; - else { - const array = new Uint8Array(content); - return window.URL.createObjectURL(new Blob([array], { type })); - } - } - parseTextures(images) { - const textureMap = /* @__PURE__ */ new Map(); - if ("Texture" in fbxTree.Objects) { - const textureNodes = fbxTree.Objects.Texture; - for (const nodeID in textureNodes) { - const texture = this.parseTexture(textureNodes[nodeID], images); - textureMap.set(parseInt(nodeID), texture); - } - } - return textureMap; - } - parseTexture(textureNode, images) { - const texture = this.loadTexture(textureNode, images); - texture.ID = textureNode.id; - texture.name = textureNode.attrName; - const wrapModeU = textureNode.WrapModeU; - const wrapModeV = textureNode.WrapModeV; - const valueU = wrapModeU !== void 0 ? wrapModeU.value : 0; - const valueV = wrapModeV !== void 0 ? wrapModeV.value : 0; - texture.wrapS = valueU === 0 ? RepeatWrapping : ClampToEdgeWrapping; - texture.wrapT = valueV === 0 ? RepeatWrapping : ClampToEdgeWrapping; - if ("Scaling" in textureNode) { - const values = textureNode.Scaling.value; - texture.repeat.x = values[0]; - texture.repeat.y = values[1]; - } - return texture; - } - loadTexture(textureNode, images) { - let fileName; - const currentPath = this.textureLoader.path; - const children = connections.get(textureNode.id).children; - if (children !== void 0 && children.length > 0 && images[children[0].ID] !== void 0) { - fileName = images[children[0].ID]; - if (fileName.indexOf("blob:") === 0 || fileName.indexOf("data:") === 0) this.textureLoader.setPath(void 0); - } - let texture; - const extension = textureNode.FileName.slice(-3).toLowerCase(); - if (extension === "tga") { - const loader = this.manager.getHandler(".tga"); - if (loader === null) { - console.warn("FBXLoader: TGA loader not found, creating placeholder texture for", textureNode.RelativeFilename); - texture = new Texture(); - } else { - loader.setPath(this.textureLoader.path); - texture = loader.load(fileName); - } - } else if (extension === "psd") { - console.warn("FBXLoader: PSD textures are not supported, creating placeholder texture for", textureNode.RelativeFilename); - texture = new Texture(); - } else texture = this.textureLoader.load(fileName); - this.textureLoader.setPath(currentPath); - return texture; - } - parseMaterials(textureMap) { - const materialMap = /* @__PURE__ */ new Map(); - if ("Material" in fbxTree.Objects) { - const materialNodes = fbxTree.Objects.Material; - for (const nodeID in materialNodes) { - const material = this.parseMaterial(materialNodes[nodeID], textureMap); - if (material !== null) materialMap.set(parseInt(nodeID), material); - } - } - return materialMap; - } - parseMaterial(materialNode, textureMap) { - const ID = materialNode.id; - const name = materialNode.attrName; - let type = materialNode.ShadingModel; - if (typeof type === "object") type = type.value; - if (!connections.has(ID)) return null; - const parameters = this.parseParameters(materialNode, textureMap, ID); - let material; - switch (type.toLowerCase()) { - case "phong": - material = new MeshPhongMaterial(); - break; - case "lambert": - material = new MeshLambertMaterial(); - break; - default: - console.warn("THREE.FBXLoader: unknown material type \"%s\". Defaulting to MeshPhongMaterial.", type); - material = new MeshPhongMaterial(); - break; - } - material.setValues(parameters); - material.name = name; - return material; - } - parseParameters(materialNode, textureMap, ID) { - const parameters = {}; - if (materialNode.BumpFactor) parameters.bumpScale = materialNode.BumpFactor.value; - if (materialNode.Diffuse) parameters.color = new Color().fromArray(materialNode.Diffuse.value); - else if (materialNode.DiffuseColor && (materialNode.DiffuseColor.type === "Color" || materialNode.DiffuseColor.type === "ColorRGB")) parameters.color = new Color().fromArray(materialNode.DiffuseColor.value); - if (materialNode.DisplacementFactor) parameters.displacementScale = materialNode.DisplacementFactor.value; - if (materialNode.Emissive) parameters.emissive = new Color().fromArray(materialNode.Emissive.value); - else if (materialNode.EmissiveColor && (materialNode.EmissiveColor.type === "Color" || materialNode.EmissiveColor.type === "ColorRGB")) parameters.emissive = new Color().fromArray(materialNode.EmissiveColor.value); - if (materialNode.EmissiveFactor) parameters.emissiveIntensity = parseFloat(materialNode.EmissiveFactor.value); - if (materialNode.Opacity) parameters.opacity = parseFloat(materialNode.Opacity.value); - if (parameters.opacity < 1) parameters.transparent = true; - if (materialNode.ReflectionFactor) parameters.reflectivity = materialNode.ReflectionFactor.value; - if (materialNode.Shininess) parameters.shininess = materialNode.Shininess.value; - if (materialNode.Specular) parameters.specular = new Color().fromArray(materialNode.Specular.value); - else if (materialNode.SpecularColor && materialNode.SpecularColor.type === "Color") parameters.specular = new Color().fromArray(materialNode.SpecularColor.value); - const scope = this; - connections.get(ID).children.forEach(function(child) { - const type = child.relationship; - switch (type) { - case "Bump": - parameters.bumpMap = scope.getTexture(textureMap, child.ID); - break; - case "Maya|TEX_ao_map": - parameters.aoMap = scope.getTexture(textureMap, child.ID); - break; - case "DiffuseColor": - case "Maya|TEX_color_map": - parameters.map = scope.getTexture(textureMap, child.ID); - if (parameters.map !== void 0) if ("colorSpace" in parameters.map) parameters.map.colorSpace = "srgb"; - else parameters.map.encoding = 3001; - break; - case "DisplacementColor": - parameters.displacementMap = scope.getTexture(textureMap, child.ID); - break; - case "EmissiveColor": - parameters.emissiveMap = scope.getTexture(textureMap, child.ID); - if (parameters.emissiveMap !== void 0) if ("colorSpace" in parameters.emissiveMap) parameters.emissiveMap.colorSpace = "srgb"; - else parameters.emissiveMap.encoding = 3001; - break; - case "NormalMap": - case "Maya|TEX_normal_map": - parameters.normalMap = scope.getTexture(textureMap, child.ID); - break; - case "ReflectionColor": - parameters.envMap = scope.getTexture(textureMap, child.ID); - if (parameters.envMap !== void 0) { - parameters.envMap.mapping = 303; - if ("colorSpace" in parameters.envMap) parameters.envMap.colorSpace = "srgb"; - else parameters.envMap.encoding = 3001; - } - break; - case "SpecularColor": - parameters.specularMap = scope.getTexture(textureMap, child.ID); - if (parameters.specularMap !== void 0) if ("colorSpace" in parameters.specularMap) parameters.specularMap.colorSpace = "srgb"; - else parameters.specularMap.encoding = 3001; - break; - case "TransparentColor": - case "TransparencyFactor": - parameters.alphaMap = scope.getTexture(textureMap, child.ID); - parameters.transparent = true; - break; - default: - console.warn("THREE.FBXLoader: %s map is not supported in three.js, skipping texture.", type); - break; - } - }); - return parameters; - } - getTexture(textureMap, id) { - if ("LayeredTexture" in fbxTree.Objects && id in fbxTree.Objects.LayeredTexture) { - console.warn("THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer."); - id = connections.get(id).children[0].ID; - } - return textureMap.get(id); - } - parseDeformers() { - const skeletons = {}; - const morphTargets = {}; - if ("Deformer" in fbxTree.Objects) { - const DeformerNodes = fbxTree.Objects.Deformer; - for (const nodeID in DeformerNodes) { - const deformerNode = DeformerNodes[nodeID]; - const relationships = connections.get(parseInt(nodeID)); - if (deformerNode.attrType === "Skin") { - const skeleton = this.parseSkeleton(relationships, DeformerNodes); - skeleton.ID = nodeID; - if (relationships.parents.length > 1) console.warn("THREE.FBXLoader: skeleton attached to more than one geometry is not supported."); - skeleton.geometryID = relationships.parents[0].ID; - skeletons[nodeID] = skeleton; - } else if (deformerNode.attrType === "BlendShape") { - const morphTarget = { id: nodeID }; - morphTarget.rawTargets = this.parseMorphTargets(relationships, DeformerNodes); - morphTarget.id = nodeID; - if (relationships.parents.length > 1) console.warn("THREE.FBXLoader: morph target attached to more than one geometry is not supported."); - morphTargets[nodeID] = morphTarget; - } - } - } - return { - skeletons, - morphTargets - }; - } - parseSkeleton(relationships, deformerNodes) { - const rawBones = []; - relationships.children.forEach(function(child) { - const boneNode = deformerNodes[child.ID]; - if (boneNode.attrType !== "Cluster") return; - const rawBone = { - ID: child.ID, - indices: [], - weights: [], - transformLink: new Matrix4().fromArray(boneNode.TransformLink.a) - }; - if ("Indexes" in boneNode) { - rawBone.indices = boneNode.Indexes.a; - rawBone.weights = boneNode.Weights.a; - } - rawBones.push(rawBone); - }); - return { - rawBones, - bones: [] - }; - } - parseMorphTargets(relationships, deformerNodes) { - const rawMorphTargets = []; - for (let i = 0; i < relationships.children.length; i++) { - const child = relationships.children[i]; - const morphTargetNode = deformerNodes[child.ID]; - const rawMorphTarget = { - name: morphTargetNode.attrName, - initialWeight: morphTargetNode.DeformPercent, - id: morphTargetNode.id, - fullWeights: morphTargetNode.FullWeights.a - }; - if (morphTargetNode.attrType !== "BlendShapeChannel") return; - rawMorphTarget.geoID = connections.get(parseInt(child.ID)).children.filter(function(child2) { - return child2.relationship === void 0; - })[0].ID; - rawMorphTargets.push(rawMorphTarget); - } - return rawMorphTargets; - } - parseScene(deformers, geometryMap, materialMap) { - sceneGraph = new Group(); - const modelMap = this.parseModels(deformers.skeletons, geometryMap, materialMap); - const modelNodes = fbxTree.Objects.Model; - const scope = this; - modelMap.forEach(function(model) { - const modelNode = modelNodes[model.ID]; - scope.setLookAtProperties(model, modelNode); - connections.get(model.ID).parents.forEach(function(connection) { - const parent = modelMap.get(connection.ID); - if (parent !== void 0) parent.add(model); - }); - if (model.parent === null) sceneGraph.add(model); - }); - this.bindSkeleton(deformers.skeletons, geometryMap, modelMap); - this.createAmbientLight(); - sceneGraph.traverse(function(node) { - if (node.userData.transformData) { - if (node.parent) { - node.userData.transformData.parentMatrix = node.parent.matrix; - node.userData.transformData.parentMatrixWorld = node.parent.matrixWorld; - } - const transform = generateTransform(node.userData.transformData); - node.applyMatrix4(transform); - node.updateWorldMatrix(); - } - }); - const animations = new AnimationParser().parse(); - if (sceneGraph.children.length === 1 && sceneGraph.children[0].isGroup) { - sceneGraph.children[0].animations = animations; - sceneGraph = sceneGraph.children[0]; - } - sceneGraph.animations = animations; - } - parseModels(skeletons, geometryMap, materialMap) { - const modelMap = /* @__PURE__ */ new Map(); - const modelNodes = fbxTree.Objects.Model; - for (const nodeID in modelNodes) { - const id = parseInt(nodeID); - const node = modelNodes[nodeID]; - const relationships = connections.get(id); - let model = this.buildSkeleton(relationships, skeletons, id, node.attrName); - if (!model) { - switch (node.attrType) { - case "Camera": - model = this.createCamera(relationships); - break; - case "Light": - model = this.createLight(relationships); - break; - case "Mesh": - model = this.createMesh(relationships, geometryMap, materialMap); - break; - case "NurbsCurve": - model = this.createCurve(relationships, geometryMap); - break; - case "LimbNode": - case "Root": - model = new Bone(); - break; - default: - model = new Group(); - break; - } - model.name = node.attrName ? PropertyBinding.sanitizeNodeName(node.attrName) : ""; - model.ID = id; - } - this.getTransformData(model, node); - modelMap.set(id, model); - } - return modelMap; - } - buildSkeleton(relationships, skeletons, id, name) { - let bone = null; - relationships.parents.forEach(function(parent) { - for (const ID in skeletons) { - const skeleton = skeletons[ID]; - skeleton.rawBones.forEach(function(rawBone, i) { - if (rawBone.ID === parent.ID) { - const subBone = bone; - bone = new Bone(); - bone.matrixWorld.copy(rawBone.transformLink); - bone.name = name ? PropertyBinding.sanitizeNodeName(name) : ""; - bone.ID = id; - skeleton.bones[i] = bone; - if (subBone !== null) bone.add(subBone); - } - }); - } - }); - return bone; - } - createCamera(relationships) { - let model; - let cameraAttribute; - relationships.children.forEach(function(child) { - const attr = fbxTree.Objects.NodeAttribute[child.ID]; - if (attr !== void 0) cameraAttribute = attr; - }); - if (cameraAttribute === void 0) model = new Object3D(); - else { - let type = 0; - if (cameraAttribute.CameraProjectionType !== void 0 && cameraAttribute.CameraProjectionType.value === 1) type = 1; - let nearClippingPlane = 1; - if (cameraAttribute.NearPlane !== void 0) nearClippingPlane = cameraAttribute.NearPlane.value / 1e3; - let farClippingPlane = 1e3; - if (cameraAttribute.FarPlane !== void 0) farClippingPlane = cameraAttribute.FarPlane.value / 1e3; - let width = window.innerWidth; - let height = window.innerHeight; - if (cameraAttribute.AspectWidth !== void 0 && cameraAttribute.AspectHeight !== void 0) { - width = cameraAttribute.AspectWidth.value; - height = cameraAttribute.AspectHeight.value; - } - const aspect = width / height; - let fov = 45; - if (cameraAttribute.FieldOfView !== void 0) fov = cameraAttribute.FieldOfView.value; - const focalLength = cameraAttribute.FocalLength ? cameraAttribute.FocalLength.value : null; - switch (type) { - case 0: - model = new PerspectiveCamera(fov, aspect, nearClippingPlane, farClippingPlane); - if (focalLength !== null) model.setFocalLength(focalLength); - break; - case 1: - model = new OrthographicCamera(-width / 2, width / 2, height / 2, -height / 2, nearClippingPlane, farClippingPlane); - break; - default: - console.warn("THREE.FBXLoader: Unknown camera type " + type + "."); - model = new Object3D(); - break; - } - } - return model; - } - createLight(relationships) { - let model; - let lightAttribute; - relationships.children.forEach(function(child) { - const attr = fbxTree.Objects.NodeAttribute[child.ID]; - if (attr !== void 0) lightAttribute = attr; - }); - if (lightAttribute === void 0) model = new Object3D(); - else { - let type; - if (lightAttribute.LightType === void 0) type = 0; - else type = lightAttribute.LightType.value; - let color = 16777215; - if (lightAttribute.Color !== void 0) color = new Color().fromArray(lightAttribute.Color.value); - let intensity = lightAttribute.Intensity === void 0 ? 1 : lightAttribute.Intensity.value / 100; - if (lightAttribute.CastLightOnObject !== void 0 && lightAttribute.CastLightOnObject.value === 0) intensity = 0; - let distance = 0; - if (lightAttribute.FarAttenuationEnd !== void 0) if (lightAttribute.EnableFarAttenuation !== void 0 && lightAttribute.EnableFarAttenuation.value === 0) distance = 0; - else distance = lightAttribute.FarAttenuationEnd.value; - const decay = 1; - switch (type) { - case 0: - model = new PointLight(color, intensity, distance, decay); - break; - case 1: - model = new DirectionalLight(color, intensity); - break; - case 2: - let angle = Math.PI / 3; - if (lightAttribute.InnerAngle !== void 0) angle = MathUtils.degToRad(lightAttribute.InnerAngle.value); - let penumbra = 0; - if (lightAttribute.OuterAngle !== void 0) { - penumbra = MathUtils.degToRad(lightAttribute.OuterAngle.value); - penumbra = Math.max(penumbra, 1); - } - model = new SpotLight(color, intensity, distance, angle, penumbra, decay); - break; - default: - console.warn("THREE.FBXLoader: Unknown light type " + lightAttribute.LightType.value + ", defaulting to a PointLight."); - model = new PointLight(color, intensity); - break; - } - if (lightAttribute.CastShadows !== void 0 && lightAttribute.CastShadows.value === 1) model.castShadow = true; - } - return model; - } - createMesh(relationships, geometryMap, materialMap) { - let model; - let geometry = null; - let material = null; - const materials = []; - relationships.children.forEach(function(child) { - if (geometryMap.has(child.ID)) geometry = geometryMap.get(child.ID); - if (materialMap.has(child.ID)) materials.push(materialMap.get(child.ID)); - }); - if (materials.length > 1) material = materials; - else if (materials.length > 0) material = materials[0]; - else { - material = new MeshPhongMaterial({ color: 13421772 }); - materials.push(material); - } - if ("color" in geometry.attributes) materials.forEach(function(material2) { - material2.vertexColors = true; - }); - if (geometry.FBX_Deformer) { - model = new SkinnedMesh(geometry, material); - model.normalizeSkinWeights(); - } else model = new Mesh(geometry, material); - return model; - } - createCurve(relationships, geometryMap) { - return new Line(relationships.children.reduce(function(geo, child) { - if (geometryMap.has(child.ID)) geo = geometryMap.get(child.ID); - return geo; - }, null), new LineBasicMaterial({ - color: 3342591, - linewidth: 1 - })); - } - getTransformData(model, modelNode) { - const transformData = {}; - if ("InheritType" in modelNode) transformData.inheritType = parseInt(modelNode.InheritType.value); - if ("RotationOrder" in modelNode) transformData.eulerOrder = getEulerOrder(modelNode.RotationOrder.value); - else transformData.eulerOrder = "ZYX"; - if ("Lcl_Translation" in modelNode) transformData.translation = modelNode.Lcl_Translation.value; - if ("PreRotation" in modelNode) transformData.preRotation = modelNode.PreRotation.value; - if ("Lcl_Rotation" in modelNode) transformData.rotation = modelNode.Lcl_Rotation.value; - if ("PostRotation" in modelNode) transformData.postRotation = modelNode.PostRotation.value; - if ("Lcl_Scaling" in modelNode) transformData.scale = modelNode.Lcl_Scaling.value; - if ("ScalingOffset" in modelNode) transformData.scalingOffset = modelNode.ScalingOffset.value; - if ("ScalingPivot" in modelNode) transformData.scalingPivot = modelNode.ScalingPivot.value; - if ("RotationOffset" in modelNode) transformData.rotationOffset = modelNode.RotationOffset.value; - if ("RotationPivot" in modelNode) transformData.rotationPivot = modelNode.RotationPivot.value; - model.userData.transformData = transformData; - } - setLookAtProperties(model, modelNode) { - if ("LookAtProperty" in modelNode) connections.get(model.ID).children.forEach(function(child) { - if (child.relationship === "LookAtProperty") { - const lookAtTarget = fbxTree.Objects.Model[child.ID]; - if ("Lcl_Translation" in lookAtTarget) { - const pos = lookAtTarget.Lcl_Translation.value; - if (model.target !== void 0) { - model.target.position.fromArray(pos); - sceneGraph.add(model.target); - } else model.lookAt(new Vector3().fromArray(pos)); - } - } - }); - } - bindSkeleton(skeletons, geometryMap, modelMap) { - const bindMatrices = this.parsePoseNodes(); - for (const ID in skeletons) { - const skeleton = skeletons[ID]; - connections.get(parseInt(skeleton.ID)).parents.forEach(function(parent) { - if (geometryMap.has(parent.ID)) { - const geoID = parent.ID; - connections.get(geoID).parents.forEach(function(geoConnParent) { - if (modelMap.has(geoConnParent.ID)) modelMap.get(geoConnParent.ID).bind(new Skeleton(skeleton.bones), bindMatrices[geoConnParent.ID]); - }); - } - }); - } - } - parsePoseNodes() { - const bindMatrices = {}; - if ("Pose" in fbxTree.Objects) { - const BindPoseNode = fbxTree.Objects.Pose; - for (const nodeID in BindPoseNode) if (BindPoseNode[nodeID].attrType === "BindPose" && BindPoseNode[nodeID].NbPoseNodes > 0) { - const poseNodes = BindPoseNode[nodeID].PoseNode; - if (Array.isArray(poseNodes)) poseNodes.forEach(function(poseNode) { - bindMatrices[poseNode.Node] = new Matrix4().fromArray(poseNode.Matrix.a); - }); - else bindMatrices[poseNodes.Node] = new Matrix4().fromArray(poseNodes.Matrix.a); - } - } - return bindMatrices; - } - createAmbientLight() { - if ("GlobalSettings" in fbxTree && "AmbientColor" in fbxTree.GlobalSettings) { - const ambientColor = fbxTree.GlobalSettings.AmbientColor.value; - const r = ambientColor[0]; - const g = ambientColor[1]; - const b = ambientColor[2]; - if (r !== 0 || g !== 0 || b !== 0) { - const color = new Color(r, g, b); - sceneGraph.add(new AmbientLight(color, 1)); - } - } - } -}; -var GeometryParser$1 = class { - parse(deformers) { - const geometryMap = /* @__PURE__ */ new Map(); - if ("Geometry" in fbxTree.Objects) { - const geoNodes = fbxTree.Objects.Geometry; - for (const nodeID in geoNodes) { - const relationships = connections.get(parseInt(nodeID)); - const geo = this.parseGeometry(relationships, geoNodes[nodeID], deformers); - geometryMap.set(parseInt(nodeID), geo); - } - } - return geometryMap; - } - parseGeometry(relationships, geoNode, deformers) { - switch (geoNode.attrType) { - case "Mesh": return this.parseMeshGeometry(relationships, geoNode, deformers); - case "NurbsCurve": return this.parseNurbsGeometry(geoNode); - } - } - parseMeshGeometry(relationships, geoNode, deformers) { - const skeletons = deformers.skeletons; - const morphTargets = []; - const modelNodes = relationships.parents.map(function(parent) { - return fbxTree.Objects.Model[parent.ID]; - }); - if (modelNodes.length === 0) return; - const skeleton = relationships.children.reduce(function(skeleton2, child) { - if (skeletons[child.ID] !== void 0) skeleton2 = skeletons[child.ID]; - return skeleton2; - }, null); - relationships.children.forEach(function(child) { - if (deformers.morphTargets[child.ID] !== void 0) morphTargets.push(deformers.morphTargets[child.ID]); - }); - const modelNode = modelNodes[0]; - const transformData = {}; - if ("RotationOrder" in modelNode) transformData.eulerOrder = getEulerOrder(modelNode.RotationOrder.value); - if ("InheritType" in modelNode) transformData.inheritType = parseInt(modelNode.InheritType.value); - if ("GeometricTranslation" in modelNode) transformData.translation = modelNode.GeometricTranslation.value; - if ("GeometricRotation" in modelNode) transformData.rotation = modelNode.GeometricRotation.value; - if ("GeometricScaling" in modelNode) transformData.scale = modelNode.GeometricScaling.value; - const transform = generateTransform(transformData); - return this.genGeometry(geoNode, skeleton, morphTargets, transform); - } - genGeometry(geoNode, skeleton, morphTargets, preTransform) { - const geo = new BufferGeometry(); - if (geoNode.attrName) geo.name = geoNode.attrName; - const geoInfo = this.parseGeoNode(geoNode, skeleton); - const buffers = this.genBuffers(geoInfo); - const positionAttribute = new Float32BufferAttribute(buffers.vertex, 3); - positionAttribute.applyMatrix4(preTransform); - geo.setAttribute("position", positionAttribute); - if (buffers.colors.length > 0) geo.setAttribute("color", new Float32BufferAttribute(buffers.colors, 3)); - if (skeleton) { - geo.setAttribute("skinIndex", new Uint16BufferAttribute(buffers.weightsIndices, 4)); - geo.setAttribute("skinWeight", new Float32BufferAttribute(buffers.vertexWeights, 4)); - geo.FBX_Deformer = skeleton; - } - if (buffers.normal.length > 0) { - const normalMatrix = new Matrix3().getNormalMatrix(preTransform); - const normalAttribute = new Float32BufferAttribute(buffers.normal, 3); - normalAttribute.applyNormalMatrix(normalMatrix); - geo.setAttribute("normal", normalAttribute); - } - buffers.uvs.forEach(function(uvBuffer, i) { - if (UV1 === "uv2") i++; - const name = i === 0 ? "uv" : `uv${i}`; - geo.setAttribute(name, new Float32BufferAttribute(buffers.uvs[i], 2)); - }); - if (geoInfo.material && geoInfo.material.mappingType !== "AllSame") { - let prevMaterialIndex = buffers.materialIndex[0]; - let startIndex = 0; - buffers.materialIndex.forEach(function(currentIndex, i) { - if (currentIndex !== prevMaterialIndex) { - geo.addGroup(startIndex, i - startIndex, prevMaterialIndex); - prevMaterialIndex = currentIndex; - startIndex = i; - } - }); - if (geo.groups.length > 0) { - const lastGroup = geo.groups[geo.groups.length - 1]; - const lastIndex = lastGroup.start + lastGroup.count; - if (lastIndex !== buffers.materialIndex.length) geo.addGroup(lastIndex, buffers.materialIndex.length - lastIndex, prevMaterialIndex); - } - if (geo.groups.length === 0) geo.addGroup(0, buffers.materialIndex.length, buffers.materialIndex[0]); - } - this.addMorphTargets(geo, geoNode, morphTargets, preTransform); - return geo; - } - parseGeoNode(geoNode, skeleton) { - const geoInfo = {}; - geoInfo.vertexPositions = geoNode.Vertices !== void 0 ? geoNode.Vertices.a : []; - geoInfo.vertexIndices = geoNode.PolygonVertexIndex !== void 0 ? geoNode.PolygonVertexIndex.a : []; - if (geoNode.LayerElementColor) geoInfo.color = this.parseVertexColors(geoNode.LayerElementColor[0]); - if (geoNode.LayerElementMaterial) geoInfo.material = this.parseMaterialIndices(geoNode.LayerElementMaterial[0]); - if (geoNode.LayerElementNormal) geoInfo.normal = this.parseNormals(geoNode.LayerElementNormal[0]); - if (geoNode.LayerElementUV) { - geoInfo.uv = []; - let i = 0; - while (geoNode.LayerElementUV[i]) { - if (geoNode.LayerElementUV[i].UV) geoInfo.uv.push(this.parseUVs(geoNode.LayerElementUV[i])); - i++; - } - } - geoInfo.weightTable = {}; - if (skeleton !== null) { - geoInfo.skeleton = skeleton; - skeleton.rawBones.forEach(function(rawBone, i) { - rawBone.indices.forEach(function(index, j) { - if (geoInfo.weightTable[index] === void 0) geoInfo.weightTable[index] = []; - geoInfo.weightTable[index].push({ - id: i, - weight: rawBone.weights[j] - }); - }); - }); - } - return geoInfo; - } - genBuffers(geoInfo) { - const buffers = { - vertex: [], - normal: [], - colors: [], - uvs: [], - materialIndex: [], - vertexWeights: [], - weightsIndices: [] - }; - let polygonIndex = 0; - let faceLength = 0; - let displayedWeightsWarning = false; - let facePositionIndexes = []; - let faceNormals = []; - let faceColors = []; - let faceUVs = []; - let faceWeights = []; - let faceWeightIndices = []; - const scope = this; - geoInfo.vertexIndices.forEach(function(vertexIndex, polygonVertexIndex) { - let materialIndex; - let endOfFace = false; - if (vertexIndex < 0) { - vertexIndex = vertexIndex ^ -1; - endOfFace = true; - } - let weightIndices = []; - let weights = []; - facePositionIndexes.push(vertexIndex * 3, vertexIndex * 3 + 1, vertexIndex * 3 + 2); - if (geoInfo.color) { - const data = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.color); - faceColors.push(data[0], data[1], data[2]); - } - if (geoInfo.skeleton) { - if (geoInfo.weightTable[vertexIndex] !== void 0) geoInfo.weightTable[vertexIndex].forEach(function(wt) { - weights.push(wt.weight); - weightIndices.push(wt.id); - }); - if (weights.length > 4) { - if (!displayedWeightsWarning) { - console.warn("THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights."); - displayedWeightsWarning = true; - } - const wIndex = [ - 0, - 0, - 0, - 0 - ]; - const Weight = [ - 0, - 0, - 0, - 0 - ]; - weights.forEach(function(weight, weightIndex) { - let currentWeight = weight; - let currentIndex = weightIndices[weightIndex]; - Weight.forEach(function(comparedWeight, comparedWeightIndex, comparedWeightArray) { - if (currentWeight > comparedWeight) { - comparedWeightArray[comparedWeightIndex] = currentWeight; - currentWeight = comparedWeight; - const tmp = wIndex[comparedWeightIndex]; - wIndex[comparedWeightIndex] = currentIndex; - currentIndex = tmp; - } - }); - }); - weightIndices = wIndex; - weights = Weight; - } - while (weights.length < 4) { - weights.push(0); - weightIndices.push(0); - } - for (let i = 0; i < 4; ++i) { - faceWeights.push(weights[i]); - faceWeightIndices.push(weightIndices[i]); - } - } - if (geoInfo.normal) { - const data = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.normal); - faceNormals.push(data[0], data[1], data[2]); - } - if (geoInfo.material && geoInfo.material.mappingType !== "AllSame") materialIndex = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.material)[0]; - if (geoInfo.uv) geoInfo.uv.forEach(function(uv, i) { - const data = getData(polygonVertexIndex, polygonIndex, vertexIndex, uv); - if (faceUVs[i] === void 0) faceUVs[i] = []; - faceUVs[i].push(data[0]); - faceUVs[i].push(data[1]); - }); - faceLength++; - if (endOfFace) { - scope.genFace(buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength); - polygonIndex++; - faceLength = 0; - facePositionIndexes = []; - faceNormals = []; - faceColors = []; - faceUVs = []; - faceWeights = []; - faceWeightIndices = []; - } - }); - return buffers; - } - genFace(buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength) { - for (let i = 2; i < faceLength; i++) { - buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[0]]); - buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[1]]); - buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[2]]); - buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[(i - 1) * 3]]); - buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[(i - 1) * 3 + 1]]); - buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[(i - 1) * 3 + 2]]); - buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i * 3]]); - buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i * 3 + 1]]); - buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i * 3 + 2]]); - if (geoInfo.skeleton) { - buffers.vertexWeights.push(faceWeights[0]); - buffers.vertexWeights.push(faceWeights[1]); - buffers.vertexWeights.push(faceWeights[2]); - buffers.vertexWeights.push(faceWeights[3]); - buffers.vertexWeights.push(faceWeights[(i - 1) * 4]); - buffers.vertexWeights.push(faceWeights[(i - 1) * 4 + 1]); - buffers.vertexWeights.push(faceWeights[(i - 1) * 4 + 2]); - buffers.vertexWeights.push(faceWeights[(i - 1) * 4 + 3]); - buffers.vertexWeights.push(faceWeights[i * 4]); - buffers.vertexWeights.push(faceWeights[i * 4 + 1]); - buffers.vertexWeights.push(faceWeights[i * 4 + 2]); - buffers.vertexWeights.push(faceWeights[i * 4 + 3]); - buffers.weightsIndices.push(faceWeightIndices[0]); - buffers.weightsIndices.push(faceWeightIndices[1]); - buffers.weightsIndices.push(faceWeightIndices[2]); - buffers.weightsIndices.push(faceWeightIndices[3]); - buffers.weightsIndices.push(faceWeightIndices[(i - 1) * 4]); - buffers.weightsIndices.push(faceWeightIndices[(i - 1) * 4 + 1]); - buffers.weightsIndices.push(faceWeightIndices[(i - 1) * 4 + 2]); - buffers.weightsIndices.push(faceWeightIndices[(i - 1) * 4 + 3]); - buffers.weightsIndices.push(faceWeightIndices[i * 4]); - buffers.weightsIndices.push(faceWeightIndices[i * 4 + 1]); - buffers.weightsIndices.push(faceWeightIndices[i * 4 + 2]); - buffers.weightsIndices.push(faceWeightIndices[i * 4 + 3]); - } - if (geoInfo.color) { - buffers.colors.push(faceColors[0]); - buffers.colors.push(faceColors[1]); - buffers.colors.push(faceColors[2]); - buffers.colors.push(faceColors[(i - 1) * 3]); - buffers.colors.push(faceColors[(i - 1) * 3 + 1]); - buffers.colors.push(faceColors[(i - 1) * 3 + 2]); - buffers.colors.push(faceColors[i * 3]); - buffers.colors.push(faceColors[i * 3 + 1]); - buffers.colors.push(faceColors[i * 3 + 2]); - } - if (geoInfo.material && geoInfo.material.mappingType !== "AllSame") { - buffers.materialIndex.push(materialIndex); - buffers.materialIndex.push(materialIndex); - buffers.materialIndex.push(materialIndex); - } - if (geoInfo.normal) { - buffers.normal.push(faceNormals[0]); - buffers.normal.push(faceNormals[1]); - buffers.normal.push(faceNormals[2]); - buffers.normal.push(faceNormals[(i - 1) * 3]); - buffers.normal.push(faceNormals[(i - 1) * 3 + 1]); - buffers.normal.push(faceNormals[(i - 1) * 3 + 2]); - buffers.normal.push(faceNormals[i * 3]); - buffers.normal.push(faceNormals[i * 3 + 1]); - buffers.normal.push(faceNormals[i * 3 + 2]); - } - if (geoInfo.uv) geoInfo.uv.forEach(function(uv, j) { - if (buffers.uvs[j] === void 0) buffers.uvs[j] = []; - buffers.uvs[j].push(faceUVs[j][0]); - buffers.uvs[j].push(faceUVs[j][1]); - buffers.uvs[j].push(faceUVs[j][(i - 1) * 2]); - buffers.uvs[j].push(faceUVs[j][(i - 1) * 2 + 1]); - buffers.uvs[j].push(faceUVs[j][i * 2]); - buffers.uvs[j].push(faceUVs[j][i * 2 + 1]); - }); - } - } - addMorphTargets(parentGeo, parentGeoNode, morphTargets, preTransform) { - if (morphTargets.length === 0) return; - parentGeo.morphTargetsRelative = true; - parentGeo.morphAttributes.position = []; - const scope = this; - morphTargets.forEach(function(morphTarget) { - morphTarget.rawTargets.forEach(function(rawTarget) { - const morphGeoNode = fbxTree.Objects.Geometry[rawTarget.geoID]; - if (morphGeoNode !== void 0) scope.genMorphGeometry(parentGeo, parentGeoNode, morphGeoNode, preTransform, rawTarget.name); - }); - }); - } - genMorphGeometry(parentGeo, parentGeoNode, morphGeoNode, preTransform, name) { - const vertexIndices = parentGeoNode.PolygonVertexIndex !== void 0 ? parentGeoNode.PolygonVertexIndex.a : []; - const morphPositionsSparse = morphGeoNode.Vertices !== void 0 ? morphGeoNode.Vertices.a : []; - const indices = morphGeoNode.Indexes !== void 0 ? morphGeoNode.Indexes.a : []; - const length = parentGeo.attributes.position.count * 3; - const morphPositions = new Float32Array(length); - for (let i = 0; i < indices.length; i++) { - const morphIndex = indices[i] * 3; - morphPositions[morphIndex] = morphPositionsSparse[i * 3]; - morphPositions[morphIndex + 1] = morphPositionsSparse[i * 3 + 1]; - morphPositions[morphIndex + 2] = morphPositionsSparse[i * 3 + 2]; - } - const morphGeoInfo = { - vertexIndices, - vertexPositions: morphPositions - }; - const positionAttribute = new Float32BufferAttribute(this.genBuffers(morphGeoInfo).vertex, 3); - positionAttribute.name = name || morphGeoNode.attrName; - positionAttribute.applyMatrix4(preTransform); - parentGeo.morphAttributes.position.push(positionAttribute); - } - parseNormals(NormalNode) { - const mappingType = NormalNode.MappingInformationType; - const referenceType = NormalNode.ReferenceInformationType; - const buffer = NormalNode.Normals.a; - let indexBuffer = []; - if (referenceType === "IndexToDirect") { - if ("NormalIndex" in NormalNode) indexBuffer = NormalNode.NormalIndex.a; - else if ("NormalsIndex" in NormalNode) indexBuffer = NormalNode.NormalsIndex.a; - } - return { - dataSize: 3, - buffer, - indices: indexBuffer, - mappingType, - referenceType - }; - } - parseUVs(UVNode) { - const mappingType = UVNode.MappingInformationType; - const referenceType = UVNode.ReferenceInformationType; - const buffer = UVNode.UV.a; - let indexBuffer = []; - if (referenceType === "IndexToDirect") indexBuffer = UVNode.UVIndex.a; - return { - dataSize: 2, - buffer, - indices: indexBuffer, - mappingType, - referenceType - }; - } - parseVertexColors(ColorNode) { - const mappingType = ColorNode.MappingInformationType; - const referenceType = ColorNode.ReferenceInformationType; - const buffer = ColorNode.Colors.a; - let indexBuffer = []; - if (referenceType === "IndexToDirect") indexBuffer = ColorNode.ColorIndex.a; - return { - dataSize: 4, - buffer, - indices: indexBuffer, - mappingType, - referenceType - }; - } - parseMaterialIndices(MaterialNode) { - const mappingType = MaterialNode.MappingInformationType; - const referenceType = MaterialNode.ReferenceInformationType; - if (mappingType === "NoMappingInformation") return { - dataSize: 1, - buffer: [0], - indices: [0], - mappingType: "AllSame", - referenceType - }; - const materialIndexBuffer = MaterialNode.Materials.a; - const materialIndices = []; - for (let i = 0; i < materialIndexBuffer.length; ++i) materialIndices.push(i); - return { - dataSize: 1, - buffer: materialIndexBuffer, - indices: materialIndices, - mappingType, - referenceType - }; - } - parseNurbsGeometry(geoNode) { - if (NURBSCurve === void 0) { - console.error("THREE.FBXLoader: The loader relies on NURBSCurve for any nurbs present in the model. Nurbs will show up as empty geometry."); - return new BufferGeometry(); - } - const order = parseInt(geoNode.Order); - if (isNaN(order)) { - console.error("THREE.FBXLoader: Invalid Order %s given for geometry ID: %s", geoNode.Order, geoNode.id); - return new BufferGeometry(); - } - const degree = order - 1; - const knots = geoNode.KnotVector.a; - const controlPoints = []; - const pointsValues = geoNode.Points.a; - for (let i = 0, l = pointsValues.length; i < l; i += 4) controlPoints.push(new Vector4().fromArray(pointsValues, i)); - let startKnot, endKnot; - if (geoNode.Form === "Closed") controlPoints.push(controlPoints[0]); - else if (geoNode.Form === "Periodic") { - startKnot = degree; - endKnot = knots.length - 1 - startKnot; - for (let i = 0; i < degree; ++i) controlPoints.push(controlPoints[i]); - } - const points = new NURBSCurve(degree, knots, controlPoints, startKnot, endKnot).getPoints(controlPoints.length * 12); - return new BufferGeometry().setFromPoints(points); - } -}; -var AnimationParser = class { - parse() { - const animationClips = []; - const rawClips = this.parseClips(); - if (rawClips !== void 0) for (const key in rawClips) { - const rawClip = rawClips[key]; - const clip = this.addClip(rawClip); - animationClips.push(clip); - } - return animationClips; - } - parseClips() { - if (fbxTree.Objects.AnimationCurve === void 0) return void 0; - const curveNodesMap = this.parseAnimationCurveNodes(); - this.parseAnimationCurves(curveNodesMap); - const layersMap = this.parseAnimationLayers(curveNodesMap); - return this.parseAnimStacks(layersMap); - } - parseAnimationCurveNodes() { - const rawCurveNodes = fbxTree.Objects.AnimationCurveNode; - const curveNodesMap = /* @__PURE__ */ new Map(); - for (const nodeID in rawCurveNodes) { - const rawCurveNode = rawCurveNodes[nodeID]; - if (rawCurveNode.attrName.match(/S|R|T|DeformPercent/) !== null) { - const curveNode = { - id: rawCurveNode.id, - attr: rawCurveNode.attrName, - curves: {} - }; - curveNodesMap.set(curveNode.id, curveNode); - } - } - return curveNodesMap; - } - parseAnimationCurves(curveNodesMap) { - const rawCurves = fbxTree.Objects.AnimationCurve; - for (const nodeID in rawCurves) { - const animationCurve = { - id: rawCurves[nodeID].id, - times: rawCurves[nodeID].KeyTime.a.map(convertFBXTimeToSeconds), - values: rawCurves[nodeID].KeyValueFloat.a - }; - const relationships = connections.get(animationCurve.id); - if (relationships !== void 0) { - const animationCurveID = relationships.parents[0].ID; - const animationCurveRelationship = relationships.parents[0].relationship; - if (animationCurveRelationship.match(/X/)) curveNodesMap.get(animationCurveID).curves["x"] = animationCurve; - else if (animationCurveRelationship.match(/Y/)) curveNodesMap.get(animationCurveID).curves["y"] = animationCurve; - else if (animationCurveRelationship.match(/Z/)) curveNodesMap.get(animationCurveID).curves["z"] = animationCurve; - else if (animationCurveRelationship.match(/d|DeformPercent/) && curveNodesMap.has(animationCurveID)) curveNodesMap.get(animationCurveID).curves["morph"] = animationCurve; - } - } - } - parseAnimationLayers(curveNodesMap) { - const rawLayers = fbxTree.Objects.AnimationLayer; - const layersMap = /* @__PURE__ */ new Map(); - for (const nodeID in rawLayers) { - const layerCurveNodes = []; - const connection = connections.get(parseInt(nodeID)); - if (connection !== void 0) { - connection.children.forEach(function(child, i) { - if (curveNodesMap.has(child.ID)) { - const curveNode = curveNodesMap.get(child.ID); - if (curveNode.curves.x !== void 0 || curveNode.curves.y !== void 0 || curveNode.curves.z !== void 0) { - if (layerCurveNodes[i] === void 0) { - const modelID = connections.get(child.ID).parents.filter(function(parent) { - return parent.relationship !== void 0; - })[0].ID; - if (modelID !== void 0) { - const rawModel = fbxTree.Objects.Model[modelID.toString()]; - if (rawModel === void 0) { - console.warn("THREE.FBXLoader: Encountered a unused curve.", child); - return; - } - const node = { - modelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName(rawModel.attrName) : "", - ID: rawModel.id, - initialPosition: [ - 0, - 0, - 0 - ], - initialRotation: [ - 0, - 0, - 0 - ], - initialScale: [ - 1, - 1, - 1 - ] - }; - sceneGraph.traverse(function(child2) { - if (child2.ID === rawModel.id) { - node.transform = child2.matrix; - if (child2.userData.transformData) node.eulerOrder = child2.userData.transformData.eulerOrder; - } - }); - if (!node.transform) node.transform = new Matrix4(); - if ("PreRotation" in rawModel) node.preRotation = rawModel.PreRotation.value; - if ("PostRotation" in rawModel) node.postRotation = rawModel.PostRotation.value; - layerCurveNodes[i] = node; - } - } - if (layerCurveNodes[i]) layerCurveNodes[i][curveNode.attr] = curveNode; - } else if (curveNode.curves.morph !== void 0) { - if (layerCurveNodes[i] === void 0) { - const deformerID = connections.get(child.ID).parents.filter(function(parent) { - return parent.relationship !== void 0; - })[0].ID; - const morpherID = connections.get(deformerID).parents[0].ID; - const geoID = connections.get(morpherID).parents[0].ID; - const modelID = connections.get(geoID).parents[0].ID; - const rawModel = fbxTree.Objects.Model[modelID]; - layerCurveNodes[i] = { - modelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName(rawModel.attrName) : "", - morphName: fbxTree.Objects.Deformer[deformerID].attrName - }; - } - layerCurveNodes[i][curveNode.attr] = curveNode; - } - } - }); - layersMap.set(parseInt(nodeID), layerCurveNodes); - } - } - return layersMap; - } - parseAnimStacks(layersMap) { - const rawStacks = fbxTree.Objects.AnimationStack; - const rawClips = {}; - for (const nodeID in rawStacks) { - const children = connections.get(parseInt(nodeID)).children; - if (children.length > 1) console.warn("THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers."); - const layer = layersMap.get(children[0].ID); - rawClips[nodeID] = { - name: rawStacks[nodeID].attrName, - layer - }; - } - return rawClips; - } - addClip(rawClip) { - let tracks = []; - const scope = this; - rawClip.layer.forEach(function(rawTracks) { - tracks = tracks.concat(scope.generateTracks(rawTracks)); - }); - return new AnimationClip(rawClip.name, -1, tracks); - } - generateTracks(rawTracks) { - const tracks = []; - let initialPosition = new Vector3(); - let initialRotation = new Quaternion(); - let initialScale = new Vector3(); - if (rawTracks.transform) rawTracks.transform.decompose(initialPosition, initialRotation, initialScale); - initialPosition = initialPosition.toArray(); - initialRotation = new Euler().setFromQuaternion(initialRotation, rawTracks.eulerOrder).toArray(); - initialScale = initialScale.toArray(); - if (rawTracks.T !== void 0 && Object.keys(rawTracks.T.curves).length > 0) { - const positionTrack = this.generateVectorTrack(rawTracks.modelName, rawTracks.T.curves, initialPosition, "position"); - if (positionTrack !== void 0) tracks.push(positionTrack); - } - if (rawTracks.R !== void 0 && Object.keys(rawTracks.R.curves).length > 0) { - const rotationTrack = this.generateRotationTrack(rawTracks.modelName, rawTracks.R.curves, initialRotation, rawTracks.preRotation, rawTracks.postRotation, rawTracks.eulerOrder); - if (rotationTrack !== void 0) tracks.push(rotationTrack); - } - if (rawTracks.S !== void 0 && Object.keys(rawTracks.S.curves).length > 0) { - const scaleTrack = this.generateVectorTrack(rawTracks.modelName, rawTracks.S.curves, initialScale, "scale"); - if (scaleTrack !== void 0) tracks.push(scaleTrack); - } - if (rawTracks.DeformPercent !== void 0) { - const morphTrack = this.generateMorphTrack(rawTracks); - if (morphTrack !== void 0) tracks.push(morphTrack); - } - return tracks; - } - generateVectorTrack(modelName, curves, initialValue, type) { - const times = this.getTimesForAllAxes(curves); - const values = this.getKeyframeTrackValues(times, curves, initialValue); - return new VectorKeyframeTrack(modelName + "." + type, times, values); - } - generateRotationTrack(modelName, curves, initialValue, preRotation, postRotation, eulerOrder) { - if (curves.x !== void 0) { - this.interpolateRotations(curves.x); - curves.x.values = curves.x.values.map(MathUtils.degToRad); - } - if (curves.y !== void 0) { - this.interpolateRotations(curves.y); - curves.y.values = curves.y.values.map(MathUtils.degToRad); - } - if (curves.z !== void 0) { - this.interpolateRotations(curves.z); - curves.z.values = curves.z.values.map(MathUtils.degToRad); - } - const times = this.getTimesForAllAxes(curves); - const values = this.getKeyframeTrackValues(times, curves, initialValue); - if (preRotation !== void 0) { - preRotation = preRotation.map(MathUtils.degToRad); - preRotation.push(eulerOrder); - preRotation = new Euler().fromArray(preRotation); - preRotation = new Quaternion().setFromEuler(preRotation); - } - if (postRotation !== void 0) { - postRotation = postRotation.map(MathUtils.degToRad); - postRotation.push(eulerOrder); - postRotation = new Euler().fromArray(postRotation); - postRotation = new Quaternion().setFromEuler(postRotation).invert(); - } - const quaternion = new Quaternion(); - const euler = new Euler(); - const quaternionValues = []; - for (let i = 0; i < values.length; i += 3) { - euler.set(values[i], values[i + 1], values[i + 2], eulerOrder); - quaternion.setFromEuler(euler); - if (preRotation !== void 0) quaternion.premultiply(preRotation); - if (postRotation !== void 0) quaternion.multiply(postRotation); - quaternion.toArray(quaternionValues, i / 3 * 4); - } - return new QuaternionKeyframeTrack(modelName + ".quaternion", times, quaternionValues); - } - generateMorphTrack(rawTracks) { - const curves = rawTracks.DeformPercent.curves.morph; - const values = curves.values.map(function(val) { - return val / 100; - }); - const morphNum = sceneGraph.getObjectByName(rawTracks.modelName).morphTargetDictionary[rawTracks.morphName]; - return new NumberKeyframeTrack(rawTracks.modelName + ".morphTargetInfluences[" + morphNum + "]", curves.times, values); - } - getTimesForAllAxes(curves) { - let times = []; - if (curves.x !== void 0) times = times.concat(curves.x.times); - if (curves.y !== void 0) times = times.concat(curves.y.times); - if (curves.z !== void 0) times = times.concat(curves.z.times); - times = times.sort(function(a, b) { - return a - b; - }); - if (times.length > 1) { - let targetIndex = 1; - let lastValue = times[0]; - for (let i = 1; i < times.length; i++) { - const currentValue = times[i]; - if (currentValue !== lastValue) { - times[targetIndex] = currentValue; - lastValue = currentValue; - targetIndex++; - } - } - times = times.slice(0, targetIndex); - } - return times; - } - getKeyframeTrackValues(times, curves, initialValue) { - const prevValue = initialValue; - const values = []; - let xIndex = -1; - let yIndex = -1; - let zIndex = -1; - times.forEach(function(time) { - if (curves.x) xIndex = curves.x.times.indexOf(time); - if (curves.y) yIndex = curves.y.times.indexOf(time); - if (curves.z) zIndex = curves.z.times.indexOf(time); - if (xIndex !== -1) { - const xValue = curves.x.values[xIndex]; - values.push(xValue); - prevValue[0] = xValue; - } else values.push(prevValue[0]); - if (yIndex !== -1) { - const yValue = curves.y.values[yIndex]; - values.push(yValue); - prevValue[1] = yValue; - } else values.push(prevValue[1]); - if (zIndex !== -1) { - const zValue = curves.z.values[zIndex]; - values.push(zValue); - prevValue[2] = zValue; - } else values.push(prevValue[2]); - }); - return values; - } - interpolateRotations(curve) { - for (let i = 1; i < curve.values.length; i++) { - const initialValue = curve.values[i - 1]; - const valuesSpan = curve.values[i] - initialValue; - const absoluteSpan = Math.abs(valuesSpan); - if (absoluteSpan >= 180) { - const numSubIntervals = absoluteSpan / 180; - const step = valuesSpan / numSubIntervals; - let nextValue = initialValue + step; - const initialTime = curve.times[i - 1]; - const interval = (curve.times[i] - initialTime) / numSubIntervals; - let nextTime = initialTime + interval; - const interpolatedTimes = []; - const interpolatedValues = []; - while (nextTime < curve.times[i]) { - interpolatedTimes.push(nextTime); - nextTime += interval; - interpolatedValues.push(nextValue); - nextValue += step; - } - curve.times = inject(curve.times, i, interpolatedTimes); - curve.values = inject(curve.values, i, interpolatedValues); - } - } - } -}; -var TextParser = class { - getPrevNode() { - return this.nodeStack[this.currentIndent - 2]; - } - getCurrentNode() { - return this.nodeStack[this.currentIndent - 1]; - } - getCurrentProp() { - return this.currentProp; - } - pushStack(node) { - this.nodeStack.push(node); - this.currentIndent += 1; - } - popStack() { - this.nodeStack.pop(); - this.currentIndent -= 1; - } - setCurrentProp(val, name) { - this.currentProp = val; - this.currentPropName = name; - } - parse(text) { - this.currentIndent = 0; - this.allNodes = new FBXTree(); - this.nodeStack = []; - this.currentProp = []; - this.currentPropName = ""; - const scope = this; - const split = text.split(/[\r\n]+/); - split.forEach(function(line, i) { - const matchComment = line.match(/^[\s\t]*;/); - const matchEmpty = line.match(/^[\s\t]*$/); - if (matchComment || matchEmpty) return; - const matchBeginning = line.match("^\\t{" + scope.currentIndent + "}(\\w+):(.*){", ""); - const matchProperty = line.match("^\\t{" + scope.currentIndent + "}(\\w+):[\\s\\t\\r\\n](.*)"); - const matchEnd = line.match("^\\t{" + (scope.currentIndent - 1) + "}}"); - if (matchBeginning) scope.parseNodeBegin(line, matchBeginning); - else if (matchProperty) scope.parseNodeProperty(line, matchProperty, split[++i]); - else if (matchEnd) scope.popStack(); - else if (line.match(/^[^\s\t}]/)) scope.parseNodePropertyContinued(line); - }); - return this.allNodes; - } - parseNodeBegin(line, property) { - const nodeName = property[1].trim().replace(/^"/, "").replace(/"$/, ""); - const nodeAttrs = property[2].split(",").map(function(attr) { - return attr.trim().replace(/^"/, "").replace(/"$/, ""); - }); - const node = { name: nodeName }; - const attrs = this.parseNodeAttr(nodeAttrs); - const currentNode = this.getCurrentNode(); - if (this.currentIndent === 0) this.allNodes.add(nodeName, node); - else if (nodeName in currentNode) { - if (nodeName === "PoseNode") currentNode.PoseNode.push(node); - else if (currentNode[nodeName].id !== void 0) { - currentNode[nodeName] = {}; - currentNode[nodeName][currentNode[nodeName].id] = currentNode[nodeName]; - } - if (attrs.id !== "") currentNode[nodeName][attrs.id] = node; - } else if (typeof attrs.id === "number") { - currentNode[nodeName] = {}; - currentNode[nodeName][attrs.id] = node; - } else if (nodeName !== "Properties70") if (nodeName === "PoseNode") currentNode[nodeName] = [node]; - else currentNode[nodeName] = node; - if (typeof attrs.id === "number") node.id = attrs.id; - if (attrs.name !== "") node.attrName = attrs.name; - if (attrs.type !== "") node.attrType = attrs.type; - this.pushStack(node); - } - parseNodeAttr(attrs) { - let id = attrs[0]; - if (attrs[0] !== "") { - id = parseInt(attrs[0]); - if (isNaN(id)) id = attrs[0]; - } - let name = "", type = ""; - if (attrs.length > 1) { - name = attrs[1].replace(/^(\w+)::/, ""); - type = attrs[2]; - } - return { - id, - name, - type - }; - } - parseNodeProperty(line, property, contentLine) { - let propName = property[1].replace(/^"/, "").replace(/"$/, "").trim(); - let propValue = property[2].replace(/^"/, "").replace(/"$/, "").trim(); - if (propName === "Content" && propValue === ",") propValue = contentLine.replace(/"/g, "").replace(/,$/, "").trim(); - const currentNode = this.getCurrentNode(); - if (currentNode.name === "Properties70") { - this.parseNodeSpecialProperty(line, propName, propValue); - return; - } - if (propName === "C") { - const connProps = propValue.split(",").slice(1); - const from = parseInt(connProps[0]); - const to = parseInt(connProps[1]); - let rest = propValue.split(",").slice(3); - rest = rest.map(function(elem) { - return elem.trim().replace(/^"/, ""); - }); - propName = "connections"; - propValue = [from, to]; - append(propValue, rest); - if (currentNode[propName] === void 0) currentNode[propName] = []; - } - if (propName === "Node") currentNode.id = propValue; - if (propName in currentNode && Array.isArray(currentNode[propName])) currentNode[propName].push(propValue); - else if (propName !== "a") currentNode[propName] = propValue; - else currentNode.a = propValue; - this.setCurrentProp(currentNode, propName); - if (propName === "a" && propValue.slice(-1) !== ",") currentNode.a = parseNumberArray(propValue); - } - parseNodePropertyContinued(line) { - const currentNode = this.getCurrentNode(); - currentNode.a += line; - if (line.slice(-1) !== ",") currentNode.a = parseNumberArray(currentNode.a); - } - parseNodeSpecialProperty(line, propName, propValue) { - const props = propValue.split("\",").map(function(prop) { - return prop.trim().replace(/^\"/, "").replace(/\s/, "_"); - }); - const innerPropName = props[0]; - const innerPropType1 = props[1]; - const innerPropType2 = props[2]; - const innerPropFlag = props[3]; - let innerPropValue = props[4]; - switch (innerPropType1) { - case "int": - case "enum": - case "bool": - case "ULongLong": - case "double": - case "Number": - case "FieldOfView": - innerPropValue = parseFloat(innerPropValue); - break; - case "Color": - case "ColorRGB": - case "Vector3D": - case "Lcl_Translation": - case "Lcl_Rotation": - case "Lcl_Scaling": - innerPropValue = parseNumberArray(innerPropValue); - break; - } - this.getPrevNode()[innerPropName] = { - type: innerPropType1, - type2: innerPropType2, - flag: innerPropFlag, - value: innerPropValue - }; - this.setCurrentProp(this.getPrevNode(), innerPropName); - } -}; -var BinaryParser = class { - parse(buffer) { - const reader = new BinaryReader(buffer); - reader.skip(23); - const version = reader.getUint32(); - if (version < 6400) throw new Error("THREE.FBXLoader: FBX version not supported, FileVersion: " + version); - const allNodes = new FBXTree(); - while (!this.endOfContent(reader)) { - const node = this.parseNode(reader, version); - if (node !== null) allNodes.add(node.name, node); - } - return allNodes; - } - endOfContent(reader) { - if (reader.size() % 16 === 0) return (reader.getOffset() + 160 + 16 & -16) >= reader.size(); - else return reader.getOffset() + 160 + 16 >= reader.size(); - } - parseNode(reader, version) { - const node = {}; - const endOffset = version >= 7500 ? reader.getUint64() : reader.getUint32(); - const numProperties = version >= 7500 ? reader.getUint64() : reader.getUint32(); - version >= 7500 ? reader.getUint64() : reader.getUint32(); - const nameLen = reader.getUint8(); - const name = reader.getString(nameLen); - if (endOffset === 0) return null; - const propertyList = []; - for (let i = 0; i < numProperties; i++) propertyList.push(this.parseProperty(reader)); - const id = propertyList.length > 0 ? propertyList[0] : ""; - const attrName = propertyList.length > 1 ? propertyList[1] : ""; - const attrType = propertyList.length > 2 ? propertyList[2] : ""; - node.singleProperty = numProperties === 1 && reader.getOffset() === endOffset ? true : false; - while (endOffset > reader.getOffset()) { - const subNode = this.parseNode(reader, version); - if (subNode !== null) this.parseSubNode(name, node, subNode); - } - node.propertyList = propertyList; - if (typeof id === "number") node.id = id; - if (attrName !== "") node.attrName = attrName; - if (attrType !== "") node.attrType = attrType; - if (name !== "") node.name = name; - return node; - } - parseSubNode(name, node, subNode) { - if (subNode.singleProperty === true) { - const value = subNode.propertyList[0]; - if (Array.isArray(value)) { - node[subNode.name] = subNode; - subNode.a = value; - } else node[subNode.name] = value; - } else if (name === "Connections" && subNode.name === "C") { - const array = []; - subNode.propertyList.forEach(function(property, i) { - if (i !== 0) array.push(property); - }); - if (node.connections === void 0) node.connections = []; - node.connections.push(array); - } else if (subNode.name === "Properties70") Object.keys(subNode).forEach(function(key) { - node[key] = subNode[key]; - }); - else if (name === "Properties70" && subNode.name === "P") { - let innerPropName = subNode.propertyList[0]; - let innerPropType1 = subNode.propertyList[1]; - const innerPropType2 = subNode.propertyList[2]; - const innerPropFlag = subNode.propertyList[3]; - let innerPropValue; - if (innerPropName.indexOf("Lcl ") === 0) innerPropName = innerPropName.replace("Lcl ", "Lcl_"); - if (innerPropType1.indexOf("Lcl ") === 0) innerPropType1 = innerPropType1.replace("Lcl ", "Lcl_"); - if (innerPropType1 === "Color" || innerPropType1 === "ColorRGB" || innerPropType1 === "Vector" || innerPropType1 === "Vector3D" || innerPropType1.indexOf("Lcl_") === 0) innerPropValue = [ - subNode.propertyList[4], - subNode.propertyList[5], - subNode.propertyList[6] - ]; - else innerPropValue = subNode.propertyList[4]; - node[innerPropName] = { - type: innerPropType1, - type2: innerPropType2, - flag: innerPropFlag, - value: innerPropValue - }; - } else if (node[subNode.name] === void 0) if (typeof subNode.id === "number") { - node[subNode.name] = {}; - node[subNode.name][subNode.id] = subNode; - } else node[subNode.name] = subNode; - else if (subNode.name === "PoseNode") { - if (!Array.isArray(node[subNode.name])) node[subNode.name] = [node[subNode.name]]; - node[subNode.name].push(subNode); - } else if (node[subNode.name][subNode.id] === void 0) node[subNode.name][subNode.id] = subNode; - } - parseProperty(reader) { - const type = reader.getString(1); - let length; - switch (type) { - case "C": return reader.getBoolean(); - case "D": return reader.getFloat64(); - case "F": return reader.getFloat32(); - case "I": return reader.getInt32(); - case "L": return reader.getInt64(); - case "R": - length = reader.getUint32(); - return reader.getArrayBuffer(length); - case "S": - length = reader.getUint32(); - return reader.getString(length); - case "Y": return reader.getInt16(); - case "b": - case "c": - case "d": - case "f": - case "i": - case "l": - const arrayLength = reader.getUint32(); - const encoding = reader.getUint32(); - const compressedLength = reader.getUint32(); - if (encoding === 0) switch (type) { - case "b": - case "c": return reader.getBooleanArray(arrayLength); - case "d": return reader.getFloat64Array(arrayLength); - case "f": return reader.getFloat32Array(arrayLength); - case "i": return reader.getInt32Array(arrayLength); - case "l": return reader.getInt64Array(arrayLength); - } - const reader2 = new BinaryReader(unzlibSync(new Uint8Array(reader.getArrayBuffer(compressedLength))).buffer); - switch (type) { - case "b": - case "c": return reader2.getBooleanArray(arrayLength); - case "d": return reader2.getFloat64Array(arrayLength); - case "f": return reader2.getFloat32Array(arrayLength); - case "i": return reader2.getInt32Array(arrayLength); - case "l": return reader2.getInt64Array(arrayLength); - } - default: throw new Error("THREE.FBXLoader: Unknown property type " + type); - } - } -}; -var BinaryReader = class { - constructor(buffer, littleEndian) { - this.dv = new DataView(buffer); - this.offset = 0; - this.littleEndian = littleEndian !== void 0 ? littleEndian : true; - } - getOffset() { - return this.offset; - } - size() { - return this.dv.buffer.byteLength; - } - skip(length) { - this.offset += length; - } - getBoolean() { - return (this.getUint8() & 1) === 1; - } - getBooleanArray(size) { - const a = []; - for (let i = 0; i < size; i++) a.push(this.getBoolean()); - return a; - } - getUint8() { - const value = this.dv.getUint8(this.offset); - this.offset += 1; - return value; - } - getInt16() { - const value = this.dv.getInt16(this.offset, this.littleEndian); - this.offset += 2; - return value; - } - getInt32() { - const value = this.dv.getInt32(this.offset, this.littleEndian); - this.offset += 4; - return value; - } - getInt32Array(size) { - const a = []; - for (let i = 0; i < size; i++) a.push(this.getInt32()); - return a; - } - getUint32() { - const value = this.dv.getUint32(this.offset, this.littleEndian); - this.offset += 4; - return value; - } - getInt64() { - let low, high; - if (this.littleEndian) { - low = this.getUint32(); - high = this.getUint32(); - } else { - high = this.getUint32(); - low = this.getUint32(); - } - if (high & 2147483648) { - high = ~high & 4294967295; - low = ~low & 4294967295; - if (low === 4294967295) high = high + 1 & 4294967295; - low = low + 1 & 4294967295; - return -(high * 4294967296 + low); - } - return high * 4294967296 + low; - } - getInt64Array(size) { - const a = []; - for (let i = 0; i < size; i++) a.push(this.getInt64()); - return a; - } - getUint64() { - let low, high; - if (this.littleEndian) { - low = this.getUint32(); - high = this.getUint32(); - } else { - high = this.getUint32(); - low = this.getUint32(); - } - return high * 4294967296 + low; - } - getFloat32() { - const value = this.dv.getFloat32(this.offset, this.littleEndian); - this.offset += 4; - return value; - } - getFloat32Array(size) { - const a = []; - for (let i = 0; i < size; i++) a.push(this.getFloat32()); - return a; - } - getFloat64() { - const value = this.dv.getFloat64(this.offset, this.littleEndian); - this.offset += 8; - return value; - } - getFloat64Array(size) { - const a = []; - for (let i = 0; i < size; i++) a.push(this.getFloat64()); - return a; - } - getArrayBuffer(size) { - const value = this.dv.buffer.slice(this.offset, this.offset + size); - this.offset += size; - return value; - } - getString(size) { - let a = []; - for (let i = 0; i < size; i++) a[i] = this.getUint8(); - const nullByte = a.indexOf(0); - if (nullByte >= 0) a = a.slice(0, nullByte); - return decodeText$1(new Uint8Array(a)); - } -}; -var FBXTree = class { - add(key, val) { - this[key] = val; - } -}; -function isFbxFormatBinary(buffer) { - return buffer.byteLength >= 21 && "Kaydara FBX Binary \0" === convertArrayBufferToString(buffer, 0, 21); -} -function isFbxFormatASCII(text) { - const CORRECT = [ - "K", - "a", - "y", - "d", - "a", - "r", - "a", - "\\", - "F", - "B", - "X", - "\\", - "B", - "i", - "n", - "a", - "r", - "y", - "\\", - "\\" - ]; - let cursor = 0; - function read(offset) { - const result = text[offset - 1]; - text = text.slice(cursor + offset); - cursor++; - return result; - } - for (let i = 0; i < CORRECT.length; ++i) if (read(1) === CORRECT[i]) return false; - return true; -} -function getFbxVersion(text) { - const match = text.match(/FBXVersion: (\d+)/); - if (match) return parseInt(match[1]); - throw new Error("THREE.FBXLoader: Cannot find the version number for the file given."); -} -function convertFBXTimeToSeconds(time) { - return time / 46186158e3; -} -var dataArray = []; -function getData(polygonVertexIndex, polygonIndex, vertexIndex, infoObject) { - let index; - switch (infoObject.mappingType) { - case "ByPolygonVertex": - index = polygonVertexIndex; - break; - case "ByPolygon": - index = polygonIndex; - break; - case "ByVertice": - index = vertexIndex; - break; - case "AllSame": - index = infoObject.indices[0]; - break; - default: console.warn("THREE.FBXLoader: unknown attribute mapping type " + infoObject.mappingType); - } - if (infoObject.referenceType === "IndexToDirect") index = infoObject.indices[index]; - const from = index * infoObject.dataSize; - const to = from + infoObject.dataSize; - return slice(dataArray, infoObject.buffer, from, to); -} -var tempEuler = /* @__PURE__ */ new Euler(); -var tempVec = /* @__PURE__ */ new Vector3(); -function generateTransform(transformData) { - const lTranslationM = new Matrix4(); - const lPreRotationM = new Matrix4(); - const lRotationM = new Matrix4(); - const lPostRotationM = new Matrix4(); - const lScalingM = new Matrix4(); - const lScalingPivotM = new Matrix4(); - const lScalingOffsetM = new Matrix4(); - const lRotationOffsetM = new Matrix4(); - const lRotationPivotM = new Matrix4(); - const lParentGX = new Matrix4(); - const lParentLX = new Matrix4(); - const lGlobalT = new Matrix4(); - const inheritType = transformData.inheritType ? transformData.inheritType : 0; - if (transformData.translation) lTranslationM.setPosition(tempVec.fromArray(transformData.translation)); - if (transformData.preRotation) { - const array = transformData.preRotation.map(MathUtils.degToRad); - array.push(transformData.eulerOrder); - lPreRotationM.makeRotationFromEuler(tempEuler.fromArray(array)); - } - if (transformData.rotation) { - const array = transformData.rotation.map(MathUtils.degToRad); - array.push(transformData.eulerOrder); - lRotationM.makeRotationFromEuler(tempEuler.fromArray(array)); - } - if (transformData.postRotation) { - const array = transformData.postRotation.map(MathUtils.degToRad); - array.push(transformData.eulerOrder); - lPostRotationM.makeRotationFromEuler(tempEuler.fromArray(array)); - lPostRotationM.invert(); - } - if (transformData.scale) lScalingM.scale(tempVec.fromArray(transformData.scale)); - if (transformData.scalingOffset) lScalingOffsetM.setPosition(tempVec.fromArray(transformData.scalingOffset)); - if (transformData.scalingPivot) lScalingPivotM.setPosition(tempVec.fromArray(transformData.scalingPivot)); - if (transformData.rotationOffset) lRotationOffsetM.setPosition(tempVec.fromArray(transformData.rotationOffset)); - if (transformData.rotationPivot) lRotationPivotM.setPosition(tempVec.fromArray(transformData.rotationPivot)); - if (transformData.parentMatrixWorld) { - lParentLX.copy(transformData.parentMatrix); - lParentGX.copy(transformData.parentMatrixWorld); - } - const lLRM = lPreRotationM.clone().multiply(lRotationM).multiply(lPostRotationM); - const lParentGRM = new Matrix4(); - lParentGRM.extractRotation(lParentGX); - const lParentTM = new Matrix4(); - lParentTM.copyPosition(lParentGX); - const lParentGRSM = lParentTM.clone().invert().multiply(lParentGX); - const lParentGSM = lParentGRM.clone().invert().multiply(lParentGRSM); - const lLSM = lScalingM; - const lGlobalRS = new Matrix4(); - if (inheritType === 0) lGlobalRS.copy(lParentGRM).multiply(lLRM).multiply(lParentGSM).multiply(lLSM); - else if (inheritType === 1) lGlobalRS.copy(lParentGRM).multiply(lParentGSM).multiply(lLRM).multiply(lLSM); - else { - const lParentLSM_inv = new Matrix4().scale(new Vector3().setFromMatrixScale(lParentLX)).clone().invert(); - const lParentGSM_noLocal = lParentGSM.clone().multiply(lParentLSM_inv); - lGlobalRS.copy(lParentGRM).multiply(lLRM).multiply(lParentGSM_noLocal).multiply(lLSM); - } - const lRotationPivotM_inv = lRotationPivotM.clone().invert(); - const lScalingPivotM_inv = lScalingPivotM.clone().invert(); - let lTransform = lTranslationM.clone().multiply(lRotationOffsetM).multiply(lRotationPivotM).multiply(lPreRotationM).multiply(lRotationM).multiply(lPostRotationM).multiply(lRotationPivotM_inv).multiply(lScalingOffsetM).multiply(lScalingPivotM).multiply(lScalingM).multiply(lScalingPivotM_inv); - const lLocalTWithAllPivotAndOffsetInfo = new Matrix4().copyPosition(lTransform); - const lGlobalTranslation = lParentGX.clone().multiply(lLocalTWithAllPivotAndOffsetInfo); - lGlobalT.copyPosition(lGlobalTranslation); - lTransform = lGlobalT.clone().multiply(lGlobalRS); - lTransform.premultiply(lParentGX.invert()); - return lTransform; -} -function getEulerOrder(order) { - order = order || 0; - const enums = [ - "ZYX", - "YZX", - "XZY", - "ZXY", - "YXZ", - "XYZ" - ]; - if (order === 6) { - console.warn("THREE.FBXLoader: unsupported Euler Order: Spherical XYZ. Animations and rotations may be incorrect."); - return enums[0]; - } - return enums[order]; -} -function parseNumberArray(value) { - return value.split(",").map(function(val) { - return parseFloat(val); - }); -} -function convertArrayBufferToString(buffer, from, to) { - if (from === void 0) from = 0; - if (to === void 0) to = buffer.byteLength; - return decodeText$1(new Uint8Array(buffer, from, to)); -} -function append(a, b) { - for (let i = 0, j = a.length, l = b.length; i < l; i++, j++) a[j] = b[i]; -} -function slice(a, b, from, to) { - for (let i = from, j = 0; i < to; i++, j++) a[j] = b[i]; - return a; -} -function inject(a1, index, a2) { - return a1.slice(0, index).concat(a2).concat(a1.slice(index)); -} -//#endregion -//#region node_modules/three-stdlib/loaders/FontLoader.js -var __defProp$3 = Object.defineProperty; -var __defNormalProp$3 = (obj, key, value) => key in obj ? __defProp$3(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$3 = (obj, key, value) => { - __defNormalProp$3(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var FontLoader = class extends Loader { - constructor(manager) { - super(manager); - } - load(url, onLoad, onProgress, onError) { - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - loader.load(url, (response) => { - if (typeof response !== "string") throw new Error("unsupported data type"); - const json = JSON.parse(response); - const font = this.parse(json); - if (onLoad) onLoad(font); - }, onProgress, onError); - } - loadAsync(url, onProgress) { - return super.loadAsync(url, onProgress); - } - parse(json) { - return new Font(json); - } -}; -var Font = class { - constructor(data) { - __publicField$3(this, "data"); - __publicField$3(this, "isFont", true); - __publicField$3(this, "type", "Font"); - this.data = data; - } - generateShapes(text, size = 100, _options) { - const shapes = []; - const options = { - letterSpacing: 0, - lineHeight: 1, - ..._options - }; - const paths = createPaths(text, size, this.data, options); - for (let p = 0, pl = paths.length; p < pl; p++) Array.prototype.push.apply(shapes, paths[p].toShapes(false)); - return shapes; - } -}; -function createPaths(text, size, data, options) { - const chars = Array.from(text); - const scale = size / data.resolution; - const line_height = (data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness) * scale; - const paths = []; - let offsetX = 0, offsetY = 0; - for (let i = 0; i < chars.length; i++) { - const char = chars[i]; - if (char === "\n") { - offsetX = 0; - offsetY -= line_height * options.lineHeight; - } else { - const ret = createPath(char, scale, offsetX, offsetY, data); - if (ret) { - offsetX += ret.offsetX + options.letterSpacing; - paths.push(ret.path); - } - } - } - return paths; -} -function createPath(char, scale, offsetX, offsetY, data) { - const glyph = data.glyphs[char] || data.glyphs["?"]; - if (!glyph) { - console.error("THREE.Font: character \"" + char + "\" does not exists in font family " + data.familyName + "."); - return; - } - const path = new ShapePath(); - let x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2; - if (glyph.o) { - const outline = glyph._cachedOutline || (glyph._cachedOutline = glyph.o.split(" ")); - for (let i = 0, l = outline.length; i < l;) switch (outline[i++]) { - case "m": - x = parseInt(outline[i++]) * scale + offsetX; - y = parseInt(outline[i++]) * scale + offsetY; - path.moveTo(x, y); - break; - case "l": - x = parseInt(outline[i++]) * scale + offsetX; - y = parseInt(outline[i++]) * scale + offsetY; - path.lineTo(x, y); - break; - case "q": - cpx = parseInt(outline[i++]) * scale + offsetX; - cpy = parseInt(outline[i++]) * scale + offsetY; - cpx1 = parseInt(outline[i++]) * scale + offsetX; - cpy1 = parseInt(outline[i++]) * scale + offsetY; - path.quadraticCurveTo(cpx1, cpy1, cpx, cpy); - break; - case "b": - cpx = parseInt(outline[i++]) * scale + offsetX; - cpy = parseInt(outline[i++]) * scale + offsetY; - cpx1 = parseInt(outline[i++]) * scale + offsetX; - cpy1 = parseInt(outline[i++]) * scale + offsetY; - cpx2 = parseInt(outline[i++]) * scale + offsetX; - cpy2 = parseInt(outline[i++]) * scale + offsetY; - path.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, cpx, cpy); - break; - } - } - return { - offsetX: glyph.ha * scale, - path - }; -} -//#endregion -//#region node_modules/three-stdlib/loaders/TGALoader.js -var TGALoader = class extends DataTextureLoader { - constructor(manager) { - super(manager); - } - parse(buffer) { - function tgaCheckHeader(header2) { - switch (header2.image_type) { - case TGA_TYPE_INDEXED: - case TGA_TYPE_RLE_INDEXED: - if (header2.colormap_length > 256 || header2.colormap_size !== 24 || header2.colormap_type !== 1) console.error("THREE.TGALoader: Invalid type colormap data for indexed type."); - break; - case TGA_TYPE_RGB: - case TGA_TYPE_GREY: - case TGA_TYPE_RLE_RGB: - case TGA_TYPE_RLE_GREY: - if (header2.colormap_type) console.error("THREE.TGALoader: Invalid type colormap data for colormap type."); - break; - case TGA_TYPE_NO_DATA: console.error("THREE.TGALoader: No data."); - default: console.error("THREE.TGALoader: Invalid type \"%s\".", header2.image_type); - } - if (header2.width <= 0 || header2.height <= 0) console.error("THREE.TGALoader: Invalid image size."); - if (header2.pixel_size !== 8 && header2.pixel_size !== 16 && header2.pixel_size !== 24 && header2.pixel_size !== 32) console.error("THREE.TGALoader: Invalid pixel size \"%s\".", header2.pixel_size); - } - function tgaParse(use_rle2, use_pal2, header2, offset2, data) { - let pixel_data, palettes; - const pixel_size = header2.pixel_size >> 3; - const pixel_total = header2.width * header2.height * pixel_size; - if (use_pal2) palettes = data.subarray(offset2, offset2 += header2.colormap_length * (header2.colormap_size >> 3)); - if (use_rle2) { - pixel_data = new Uint8Array(pixel_total); - let c, count, i; - let shift = 0; - const pixels = new Uint8Array(pixel_size); - while (shift < pixel_total) { - c = data[offset2++]; - count = (c & 127) + 1; - if (c & 128) { - for (i = 0; i < pixel_size; ++i) pixels[i] = data[offset2++]; - for (i = 0; i < count; ++i) pixel_data.set(pixels, shift + i * pixel_size); - shift += pixel_size * count; - } else { - count *= pixel_size; - for (i = 0; i < count; ++i) pixel_data[shift + i] = data[offset2++]; - shift += count; - } - } - } else pixel_data = data.subarray(offset2, offset2 += use_pal2 ? header2.width * header2.height : pixel_total); - return { - pixel_data, - palettes - }; - } - function tgaGetImageData8bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image, palettes) { - const colormap = palettes; - let color, i = 0, x, y; - const width = header.width; - for (y = y_start; y !== y_end; y += y_step) for (x = x_start; x !== x_end; x += x_step, i++) { - color = image[i]; - imageData2[(x + width * y) * 4 + 3] = 255; - imageData2[(x + width * y) * 4 + 2] = colormap[color * 3 + 0]; - imageData2[(x + width * y) * 4 + 1] = colormap[color * 3 + 1]; - imageData2[(x + width * y) * 4 + 0] = colormap[color * 3 + 2]; - } - return imageData2; - } - function tgaGetImageData16bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) { - let color, i = 0, x, y; - const width = header.width; - for (y = y_start; y !== y_end; y += y_step) for (x = x_start; x !== x_end; x += x_step, i += 2) { - color = image[i + 0] + (image[i + 1] << 8); - imageData2[(x + width * y) * 4 + 0] = (color & 31744) >> 7; - imageData2[(x + width * y) * 4 + 1] = (color & 992) >> 2; - imageData2[(x + width * y) * 4 + 2] = (color & 31) >> 3; - imageData2[(x + width * y) * 4 + 3] = color & 32768 ? 0 : 255; - } - return imageData2; - } - function tgaGetImageData24bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) { - let i = 0, x, y; - const width = header.width; - for (y = y_start; y !== y_end; y += y_step) for (x = x_start; x !== x_end; x += x_step, i += 3) { - imageData2[(x + width * y) * 4 + 3] = 255; - imageData2[(x + width * y) * 4 + 2] = image[i + 0]; - imageData2[(x + width * y) * 4 + 1] = image[i + 1]; - imageData2[(x + width * y) * 4 + 0] = image[i + 2]; - } - return imageData2; - } - function tgaGetImageData32bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) { - let i = 0, x, y; - const width = header.width; - for (y = y_start; y !== y_end; y += y_step) for (x = x_start; x !== x_end; x += x_step, i += 4) { - imageData2[(x + width * y) * 4 + 2] = image[i + 0]; - imageData2[(x + width * y) * 4 + 1] = image[i + 1]; - imageData2[(x + width * y) * 4 + 0] = image[i + 2]; - imageData2[(x + width * y) * 4 + 3] = image[i + 3]; - } - return imageData2; - } - function tgaGetImageDataGrey8bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) { - let color, i = 0, x, y; - const width = header.width; - for (y = y_start; y !== y_end; y += y_step) for (x = x_start; x !== x_end; x += x_step, i++) { - color = image[i]; - imageData2[(x + width * y) * 4 + 0] = color; - imageData2[(x + width * y) * 4 + 1] = color; - imageData2[(x + width * y) * 4 + 2] = color; - imageData2[(x + width * y) * 4 + 3] = 255; - } - return imageData2; - } - function tgaGetImageDataGrey16bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) { - let i = 0, x, y; - const width = header.width; - for (y = y_start; y !== y_end; y += y_step) for (x = x_start; x !== x_end; x += x_step, i += 2) { - imageData2[(x + width * y) * 4 + 0] = image[i + 0]; - imageData2[(x + width * y) * 4 + 1] = image[i + 0]; - imageData2[(x + width * y) * 4 + 2] = image[i + 0]; - imageData2[(x + width * y) * 4 + 3] = image[i + 1]; - } - return imageData2; - } - function getTgaRGBA(data, width, height, image, palette) { - let x_start, y_start, x_step, y_step, x_end, y_end; - switch ((header.flags & TGA_ORIGIN_MASK) >> TGA_ORIGIN_SHIFT) { - default: - case TGA_ORIGIN_UL: - x_start = 0; - x_step = 1; - x_end = width; - y_start = 0; - y_step = 1; - y_end = height; - break; - case TGA_ORIGIN_BL: - x_start = 0; - x_step = 1; - x_end = width; - y_start = height - 1; - y_step = -1; - y_end = -1; - break; - case TGA_ORIGIN_UR: - x_start = width - 1; - x_step = -1; - x_end = -1; - y_start = 0; - y_step = 1; - y_end = height; - break; - case TGA_ORIGIN_BR: - x_start = width - 1; - x_step = -1; - x_end = -1; - y_start = height - 1; - y_step = -1; - y_end = -1; - break; - } - if (use_grey) switch (header.pixel_size) { - case 8: - tgaGetImageDataGrey8bits(data, y_start, y_step, y_end, x_start, x_step, x_end, image); - break; - case 16: - tgaGetImageDataGrey16bits(data, y_start, y_step, y_end, x_start, x_step, x_end, image); - break; - default: - console.error("THREE.TGALoader: Format not supported."); - break; - } - else switch (header.pixel_size) { - case 8: - tgaGetImageData8bits(data, y_start, y_step, y_end, x_start, x_step, x_end, image, palette); - break; - case 16: - tgaGetImageData16bits(data, y_start, y_step, y_end, x_start, x_step, x_end, image); - break; - case 24: - tgaGetImageData24bits(data, y_start, y_step, y_end, x_start, x_step, x_end, image); - break; - case 32: - tgaGetImageData32bits(data, y_start, y_step, y_end, x_start, x_step, x_end, image); - break; - default: - console.error("THREE.TGALoader: Format not supported."); - break; - } - return data; - } - const TGA_TYPE_NO_DATA = 0, TGA_TYPE_INDEXED = 1, TGA_TYPE_RGB = 2, TGA_TYPE_GREY = 3, TGA_TYPE_RLE_INDEXED = 9, TGA_TYPE_RLE_RGB = 10, TGA_TYPE_RLE_GREY = 11, TGA_ORIGIN_MASK = 48, TGA_ORIGIN_SHIFT = 4, TGA_ORIGIN_BL = 0, TGA_ORIGIN_BR = 1, TGA_ORIGIN_UL = 2, TGA_ORIGIN_UR = 3; - if (buffer.length < 19) console.error("THREE.TGALoader: Not enough data to contain header."); - let offset = 0; - const content = new Uint8Array(buffer), header = { - id_length: content[offset++], - colormap_type: content[offset++], - image_type: content[offset++], - colormap_index: content[offset++] | content[offset++] << 8, - colormap_length: content[offset++] | content[offset++] << 8, - colormap_size: content[offset++], - origin: [content[offset++] | content[offset++] << 8, content[offset++] | content[offset++] << 8], - width: content[offset++] | content[offset++] << 8, - height: content[offset++] | content[offset++] << 8, - pixel_size: content[offset++], - flags: content[offset++] - }; - tgaCheckHeader(header); - if (header.id_length + offset > buffer.length) console.error("THREE.TGALoader: No data."); - offset += header.id_length; - let use_rle = false, use_pal = false, use_grey = false; - switch (header.image_type) { - case TGA_TYPE_RLE_INDEXED: - use_rle = true; - use_pal = true; - break; - case TGA_TYPE_INDEXED: - use_pal = true; - break; - case TGA_TYPE_RLE_RGB: - use_rle = true; - break; - case TGA_TYPE_RGB: break; - case TGA_TYPE_RLE_GREY: - use_rle = true; - use_grey = true; - break; - case TGA_TYPE_GREY: - use_grey = true; - break; - } - const imageData = new Uint8Array(header.width * header.height * 4); - const result = tgaParse(use_rle, use_pal, header, offset, content); - getTgaRGBA(imageData, header.width, header.height, result.pixel_data, result.palettes); - return { - data: imageData, - width: header.width, - height: header.height, - flipY: true, - generateMipmaps: true, - minFilter: LinearMipmapLinearFilter - }; - } -}; -//#endregion -//#region node_modules/three-stdlib/_polyfill/Data3DTexture.js -var Data3DTexture = class extends Texture { - constructor(data = null, width = 1, height = 1, depth = 1) { - super(null); - this.isData3DTexture = true; - this.image = { - data, - width, - height, - depth - }; - this.magFilter = NearestFilter; - this.minFilter = NearestFilter; - this.wrapR = ClampToEdgeWrapping; - this.generateMipmaps = false; - this.flipY = false; - this.unpackAlignment = 1; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/LUTCubeLoader.js -var LUTCubeLoader = class extends Loader { - load(url, onLoad, onProgress, onError) { - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setResponseType("text"); - loader.load(url, (text) => { - try { - onLoad(this.parse(text)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - this.manager.itemError(url); - } - }, onProgress, onError); - } - parse(str) { - str = str.replace(/^#.*?(\n|\r)/gm, "").replace(/^\s*?(\n|\r)/gm, "").trim(); - let title = null; - let size = null; - const domainMin = new Vector3(0, 0, 0); - const domainMax = new Vector3(1, 1, 1); - const lines = str.split(/[\n\r]+/g); - let data = null; - let currIndex = 0; - for (let i = 0, l = lines.length; i < l; i++) { - const line = lines[i].trim(); - const split = line.split(/\s/g); - switch (split[0]) { - case "TITLE": - title = line.substring(7, line.length - 1); - break; - case "LUT_3D_SIZE": - const sizeToken = split[1]; - size = parseFloat(sizeToken); - data = new Uint8Array(size * size * size * 4); - break; - case "DOMAIN_MIN": - domainMin.x = parseFloat(split[1]); - domainMin.y = parseFloat(split[2]); - domainMin.z = parseFloat(split[3]); - break; - case "DOMAIN_MAX": - domainMax.x = parseFloat(split[1]); - domainMax.y = parseFloat(split[2]); - domainMax.z = parseFloat(split[3]); - break; - default: - const r = parseFloat(split[0]); - const g = parseFloat(split[1]); - const b = parseFloat(split[2]); - if (r > 1 || r < 0 || g > 1 || g < 0 || b > 1 || b < 0) throw new Error("LUTCubeLoader : Non normalized values not supported."); - data[currIndex + 0] = r * 255; - data[currIndex + 1] = g * 255; - data[currIndex + 2] = b * 255; - data[currIndex + 3] = 255; - currIndex += 4; - } - } - const texture = new DataTexture(); - texture.image.data = data; - texture.image.width = size; - texture.image.height = size * size; - texture.type = UnsignedByteType; - texture.magFilter = LinearFilter; - texture.minFilter = LinearFilter; - texture.wrapS = ClampToEdgeWrapping; - texture.wrapT = ClampToEdgeWrapping; - texture.generateMipmaps = false; - texture.needsUpdate = true; - const texture3D = new Data3DTexture(); - texture3D.image.data = data; - texture3D.image.width = size; - texture3D.image.height = size; - texture3D.image.depth = size; - texture3D.type = UnsignedByteType; - texture3D.magFilter = LinearFilter; - texture3D.minFilter = LinearFilter; - texture3D.wrapS = ClampToEdgeWrapping; - texture3D.wrapT = ClampToEdgeWrapping; - texture3D.wrapR = ClampToEdgeWrapping; - texture3D.generateMipmaps = false; - texture3D.needsUpdate = true; - return { - title, - size, - domainMin, - domainMax, - texture, - texture3D - }; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/NRRDLoader.js -var NRRDLoader = class extends Loader { - constructor(manager) { - super(manager); - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(scope.manager); - loader.setPath(scope.path); - loader.setResponseType("arraybuffer"); - loader.setRequestHeader(scope.requestHeader); - loader.setWithCredentials(scope.withCredentials); - loader.load(url, function(data) { - try { - onLoad(scope.parse(data)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(data) { - let _data = data; - let _dataPointer = 0; - const _nativeLittleEndian = new Int8Array(new Int16Array([1]).buffer)[0] > 0; - const _littleEndian = true; - const headerObject = {}; - function scan(type, chunks) { - if (chunks === void 0 || chunks === null) chunks = 1; - let _chunkSize = 1; - let _array_type = Uint8Array; - switch (type) { - case "uchar": break; - case "schar": - _array_type = Int8Array; - break; - case "ushort": - _array_type = Uint16Array; - _chunkSize = 2; - break; - case "sshort": - _array_type = Int16Array; - _chunkSize = 2; - break; - case "uint": - _array_type = Uint32Array; - _chunkSize = 4; - break; - case "sint": - _array_type = Int32Array; - _chunkSize = 4; - break; - case "float": - _array_type = Float32Array; - _chunkSize = 4; - break; - case "complex": - _array_type = Float64Array; - _chunkSize = 8; - break; - case "double": - _array_type = Float64Array; - _chunkSize = 8; - break; - } - let _bytes2 = new _array_type(_data.slice(_dataPointer, _dataPointer += chunks * _chunkSize)); - if (_nativeLittleEndian != _littleEndian) _bytes2 = flipEndianness(_bytes2, _chunkSize); - if (chunks == 1) return _bytes2[0]; - return _bytes2; - } - function flipEndianness(array, chunkSize) { - const u8 = new Uint8Array(array.buffer, array.byteOffset, array.byteLength); - for (let i2 = 0; i2 < array.byteLength; i2 += chunkSize) for (let j = i2 + chunkSize - 1, k = i2; j > k; j--, k++) { - const tmp = u8[k]; - u8[k] = u8[j]; - u8[j] = tmp; - } - return array; - } - function parseHeader(header) { - let data2, field, fn, i2, l, m, _i, _len; - const lines = header.split(/\r?\n/); - for (_i = 0, _len = lines.length; _i < _len; _i++) { - l = lines[_i]; - if (l.match(/NRRD\d+/)) headerObject.isNrrd = true; - else if (l.match(/^#/)); - else if (m = l.match(/(.*):(.*)/)) { - field = m[1].trim(); - data2 = m[2].trim(); - fn = _fieldFunctions[field]; - if (fn) fn.call(headerObject, data2); - else headerObject[field] = data2; - } - } - if (!headerObject.isNrrd) throw new Error("Not an NRRD file"); - if (headerObject.encoding === "bz2" || headerObject.encoding === "bzip2") throw new Error("Bzip is not supported"); - if (!headerObject.vectors) { - headerObject.vectors = [ - new Vector3(1, 0, 0), - new Vector3(0, 1, 0), - new Vector3(0, 0, 1) - ]; - if (headerObject.spacings) { - for (i2 = 0; i2 <= 2; i2++) if (!isNaN(headerObject.spacings[i2])) headerObject.vectors[i2].multiplyScalar(headerObject.spacings[i2]); - } - } - } - function parseDataAsText(data2, start, end) { - let number = ""; - start = start || 0; - end = end || data2.length; - let value; - const lengthOfTheResult = headerObject.sizes.reduce(function(previous, current) { - return previous * current; - }, 1); - let base = 10; - if (headerObject.encoding === "hex") base = 16; - const result = new headerObject.__array(lengthOfTheResult); - let resultIndex = 0; - let parsingFunction = parseInt; - if (headerObject.__array === Float32Array || headerObject.__array === Float64Array) parsingFunction = parseFloat; - for (let i2 = start; i2 < end; i2++) { - value = data2[i2]; - if ((value < 9 || value > 13) && value !== 32) number += String.fromCharCode(value); - else { - if (number !== "") { - result[resultIndex] = parsingFunction(number, base); - resultIndex++; - } - number = ""; - } - } - if (number !== "") { - result[resultIndex] = parsingFunction(number, base); - resultIndex++; - } - return result; - } - const _bytes = scan("uchar", data.byteLength); - const _length = _bytes.length; - let _header = null; - let _data_start = 0; - let i; - for (i = 1; i < _length; i++) if (_bytes[i - 1] == 10 && _bytes[i] == 10) { - _header = this.parseChars(_bytes, 0, i - 2); - _data_start = i + 1; - break; - } - parseHeader(_header); - _data = _bytes.subarray(_data_start); - if (headerObject.encoding.substring(0, 2) === "gz") _data = gunzipSync(new Uint8Array(_data)); - else if (headerObject.encoding === "ascii" || headerObject.encoding === "text" || headerObject.encoding === "txt" || headerObject.encoding === "hex") _data = parseDataAsText(_data); - else if (headerObject.encoding === "raw") { - const _copy = new Uint8Array(_data.length); - for (let i2 = 0; i2 < _data.length; i2++) _copy[i2] = _data[i2]; - _data = _copy; - } - _data = _data.buffer; - const volume = new Volume(); - volume.header = headerObject; - volume.data = new headerObject.__array(_data); - const min_max = volume.computeMinMax(); - const min = min_max[0]; - const max = min_max[1]; - volume.windowLow = min; - volume.windowHigh = max; - volume.dimensions = [ - headerObject.sizes[0], - headerObject.sizes[1], - headerObject.sizes[2] - ]; - volume.xLength = volume.dimensions[0]; - volume.yLength = volume.dimensions[1]; - volume.zLength = volume.dimensions[2]; - volume.spacing = [ - new Vector3(headerObject.vectors[0][0], headerObject.vectors[0][1], headerObject.vectors[0][2]).length(), - new Vector3(headerObject.vectors[1][0], headerObject.vectors[1][1], headerObject.vectors[1][2]).length(), - new Vector3(headerObject.vectors[2][0], headerObject.vectors[2][1], headerObject.vectors[2][2]).length() - ]; - volume.matrix = new Matrix4(); - let _spaceX = 1; - let _spaceY = 1; - const _spaceZ = 1; - if (headerObject.space == "left-posterior-superior") { - _spaceX = -1; - _spaceY = -1; - } else if (headerObject.space === "left-anterior-superior") _spaceX = -1; - if (!headerObject.vectors) volume.matrix.set(_spaceX, 0, 0, 0, 0, _spaceY, 0, 0, 0, 0, _spaceZ, 0, 0, 0, 0, 1); - else { - const v = headerObject.vectors; - volume.matrix.set(_spaceX * v[0][0], _spaceX * v[1][0], _spaceX * v[2][0], 0, _spaceY * v[0][1], _spaceY * v[1][1], _spaceY * v[2][1], 0, _spaceZ * v[0][2], _spaceZ * v[1][2], _spaceZ * v[2][2], 0, 0, 0, 0, 1); - } - volume.inverseMatrix = new Matrix4(); - volume.inverseMatrix.copy(volume.matrix).invert(); - volume.RASDimensions = new Vector3(volume.xLength, volume.yLength, volume.zLength).applyMatrix4(volume.matrix).round().toArray().map(Math.abs); - if (volume.lowerThreshold === -Infinity) volume.lowerThreshold = min; - if (volume.upperThreshold === Infinity) volume.upperThreshold = max; - return volume; - } - parseChars(array, start, end) { - if (start === void 0) start = 0; - if (end === void 0) end = array.length; - let output = ""; - let i = 0; - for (i = start; i < end; ++i) output += String.fromCharCode(array[i]); - return output; - } -}; -var _fieldFunctions = { - type: function(data) { - switch (data) { - case "uchar": - case "unsigned char": - case "uint8": - case "uint8_t": - this.__array = Uint8Array; - break; - case "signed char": - case "int8": - case "int8_t": - this.__array = Int8Array; - break; - case "short": - case "short int": - case "signed short": - case "signed short int": - case "int16": - case "int16_t": - this.__array = Int16Array; - break; - case "ushort": - case "unsigned short": - case "unsigned short int": - case "uint16": - case "uint16_t": - this.__array = Uint16Array; - break; - case "int": - case "signed int": - case "int32": - case "int32_t": - this.__array = Int32Array; - break; - case "uint": - case "unsigned int": - case "uint32": - case "uint32_t": - this.__array = Uint32Array; - break; - case "float": - this.__array = Float32Array; - break; - case "double": - this.__array = Float64Array; - break; - default: throw new Error("Unsupported NRRD data type: " + data); - } - return this.type = data; - }, - endian: function(data) { - return this.endian = data; - }, - encoding: function(data) { - return this.encoding = data; - }, - dimension: function(data) { - return this.dim = parseInt(data, 10); - }, - sizes: function(data) { - let i; - return this.sizes = function() { - const _ref = data.split(/\s+/); - const _results = []; - for (let _i = 0, _len = _ref.length; _i < _len; _i++) { - i = _ref[_i]; - _results.push(parseInt(i, 10)); - } - return _results; - }(); - }, - space: function(data) { - return this.space = data; - }, - "space origin": function(data) { - return this.space_origin = data.split("(")[1].split(")")[0].split(","); - }, - "space directions": function(data) { - let f, v; - const parts = data.match(/\(.*?\)/g); - return this.vectors = function() { - const _results = []; - for (let _i = 0, _len = parts.length; _i < _len; _i++) { - v = parts[_i]; - _results.push(function() { - const _ref = v.slice(1, -1).split(/,/); - const _results2 = []; - for (let _j = 0, _len2 = _ref.length; _j < _len2; _j++) { - f = _ref[_j]; - _results2.push(parseFloat(f)); - } - return _results2; - }()); - } - return _results; - }(); - }, - spacings: function(data) { - let f; - const parts = data.split(/\s+/); - return this.spacings = function() { - const _results = []; - for (let _i = 0, _len = parts.length; _i < _len; _i++) { - f = parts[_i]; - _results.push(parseFloat(f)); - } - return _results; - }(); - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/STLLoader.js -var STLLoader = class extends Loader { - constructor(manager) { - super(manager); - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setResponseType("arraybuffer"); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - loader.load(url, function(text) { - try { - onLoad(scope.parse(text)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(data) { - function isBinary(data2) { - const reader = new DataView(data2); - if (84 + reader.getUint32(80, true) * 50 === reader.byteLength) return true; - const solid = [ - 115, - 111, - 108, - 105, - 100 - ]; - for (let off = 0; off < 5; off++) if (matchDataViewAt(solid, reader, off)) return false; - return true; - } - function matchDataViewAt(query, reader, offset) { - for (let i = 0, il = query.length; i < il; i++) if (query[i] !== reader.getUint8(offset + i, false)) return false; - return true; - } - function parseBinary(data2) { - const reader = new DataView(data2); - const faces = reader.getUint32(80, true); - let r, g, b, hasColors = false, colors; - let defaultR, defaultG, defaultB, alpha; - for (let index = 0; index < 70; index++) if (reader.getUint32(index, false) == 1129270351 && reader.getUint8(index + 4) == 82 && reader.getUint8(index + 5) == 61) { - hasColors = true; - colors = new Float32Array(faces * 3 * 3); - defaultR = reader.getUint8(index + 6) / 255; - defaultG = reader.getUint8(index + 7) / 255; - defaultB = reader.getUint8(index + 8) / 255; - alpha = reader.getUint8(index + 9) / 255; - } - const dataOffset = 84; - const faceLength = 50; - const geometry = new BufferGeometry(); - const vertices = new Float32Array(faces * 3 * 3); - const normals = new Float32Array(faces * 3 * 3); - for (let face = 0; face < faces; face++) { - const start = dataOffset + face * faceLength; - const normalX = reader.getFloat32(start, true); - const normalY = reader.getFloat32(start + 4, true); - const normalZ = reader.getFloat32(start + 8, true); - if (hasColors) { - const packedColor = reader.getUint16(start + 48, true); - if ((packedColor & 32768) === 0) { - r = (packedColor & 31) / 31; - g = (packedColor >> 5 & 31) / 31; - b = (packedColor >> 10 & 31) / 31; - } else { - r = defaultR; - g = defaultG; - b = defaultB; - } - } - for (let i = 1; i <= 3; i++) { - const vertexstart = start + i * 12; - const componentIdx = face * 3 * 3 + (i - 1) * 3; - vertices[componentIdx] = reader.getFloat32(vertexstart, true); - vertices[componentIdx + 1] = reader.getFloat32(vertexstart + 4, true); - vertices[componentIdx + 2] = reader.getFloat32(vertexstart + 8, true); - normals[componentIdx] = normalX; - normals[componentIdx + 1] = normalY; - normals[componentIdx + 2] = normalZ; - if (hasColors) { - colors[componentIdx] = r; - colors[componentIdx + 1] = g; - colors[componentIdx + 2] = b; - } - } - } - geometry.setAttribute("position", new BufferAttribute(vertices, 3)); - geometry.setAttribute("normal", new BufferAttribute(normals, 3)); - if (hasColors) { - geometry.setAttribute("color", new BufferAttribute(colors, 3)); - geometry.hasColors = true; - geometry.alpha = alpha; - } - return geometry; - } - function parseASCII(data2) { - const geometry = new BufferGeometry(); - const patternSolid = /solid([\s\S]*?)endsolid/g; - const patternFace = /facet([\s\S]*?)endfacet/g; - let faceCounter = 0; - const patternFloat = /[\s]+([+-]?(?:\d*)(?:\.\d*)?(?:[eE][+-]?\d+)?)/.source; - const patternVertex = new RegExp("vertex" + patternFloat + patternFloat + patternFloat, "g"); - const patternNormal = new RegExp("normal" + patternFloat + patternFloat + patternFloat, "g"); - const vertices = []; - const normals = []; - const normal = new Vector3(); - let result; - let groupCount = 0; - let startVertex = 0; - let endVertex = 0; - while ((result = patternSolid.exec(data2)) !== null) { - startVertex = endVertex; - const solid = result[0]; - while ((result = patternFace.exec(solid)) !== null) { - let vertexCountPerFace = 0; - let normalCountPerFace = 0; - const text = result[0]; - while ((result = patternNormal.exec(text)) !== null) { - normal.x = parseFloat(result[1]); - normal.y = parseFloat(result[2]); - normal.z = parseFloat(result[3]); - normalCountPerFace++; - } - while ((result = patternVertex.exec(text)) !== null) { - vertices.push(parseFloat(result[1]), parseFloat(result[2]), parseFloat(result[3])); - normals.push(normal.x, normal.y, normal.z); - vertexCountPerFace++; - endVertex++; - } - if (normalCountPerFace !== 1) console.error("THREE.STLLoader: Something isn't right with the normal of face number " + faceCounter); - if (vertexCountPerFace !== 3) console.error("THREE.STLLoader: Something isn't right with the vertices of face number " + faceCounter); - faceCounter++; - } - const start = startVertex; - const count = endVertex - startVertex; - geometry.addGroup(start, count, groupCount); - groupCount++; - } - geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - geometry.setAttribute("normal", new Float32BufferAttribute(normals, 3)); - return geometry; - } - function ensureString(buffer) { - if (typeof buffer !== "string") return decodeText$1(new Uint8Array(buffer)); - return buffer; - } - function ensureBinary(buffer) { - if (typeof buffer === "string") { - const array_buffer = new Uint8Array(buffer.length); - for (let i = 0; i < buffer.length; i++) array_buffer[i] = buffer.charCodeAt(i) & 255; - return array_buffer.buffer || array_buffer; - } else return buffer; - } - const binData = ensureBinary(data); - return isBinary(binData) ? parseBinary(binData) : parseASCII(ensureString(data)); - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/MTLLoader.js -var MTLLoader = class extends Loader { - constructor(manager) { - super(manager); - } - /** - * Loads and parses a MTL asset from a URL. - * - * @param {String} url - URL to the MTL file. - * @param {Function} [onLoad] - Callback invoked with the loaded object. - * @param {Function} [onProgress] - Callback for download progress. - * @param {Function} [onError] - Callback for download errors. - * - * @see setPath setResourcePath - * - * @note In order for relative texture references to resolve correctly - * you must call setResourcePath() explicitly prior to load. - */ - load(url, onLoad, onProgress, onError) { - const scope = this; - const path = this.path === "" ? LoaderUtils.extractUrlBase(url) : this.path; - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - loader.load(url, function(text) { - try { - onLoad(scope.parse(text, path)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - setMaterialOptions(value) { - this.materialOptions = value; - return this; - } - /** - * Parses a MTL file. - * - * @param {String} text - Content of MTL file - * @return {MaterialCreator} - * - * @see setPath setResourcePath - * - * @note In order for relative texture references to resolve correctly - * you must call setResourcePath() explicitly prior to parse. - */ - parse(text, path) { - const lines = text.split("\n"); - let info = {}; - const delimiter_pattern = /\s+/; - const materialsInfo = {}; - for (let i = 0; i < lines.length; i++) { - let line = lines[i]; - line = line.trim(); - if (line.length === 0 || line.charAt(0) === "#") continue; - const pos = line.indexOf(" "); - let key = pos >= 0 ? line.substring(0, pos) : line; - key = key.toLowerCase(); - let value = pos >= 0 ? line.substring(pos + 1) : ""; - value = value.trim(); - if (key === "newmtl") { - info = { name: value }; - materialsInfo[value] = info; - } else if (key === "ka" || key === "kd" || key === "ks" || key === "ke") { - const ss = value.split(delimiter_pattern, 3); - info[key] = [ - parseFloat(ss[0]), - parseFloat(ss[1]), - parseFloat(ss[2]) - ]; - } else info[key] = value; - } - const materialCreator = new MaterialCreator(this.resourcePath || path, this.materialOptions); - materialCreator.setCrossOrigin(this.crossOrigin); - materialCreator.setManager(this.manager); - materialCreator.setMaterials(materialsInfo); - return materialCreator; - } -}; -var MaterialCreator = class { - constructor(baseUrl = "", options = {}) { - this.baseUrl = baseUrl; - this.options = options; - this.materialsInfo = {}; - this.materials = {}; - this.materialsArray = []; - this.nameLookup = {}; - this.crossOrigin = "anonymous"; - this.side = this.options.side !== void 0 ? this.options.side : 0; - this.wrap = this.options.wrap !== void 0 ? this.options.wrap : RepeatWrapping; - } - setCrossOrigin(value) { - this.crossOrigin = value; - return this; - } - setManager(value) { - this.manager = value; - } - setMaterials(materialsInfo) { - this.materialsInfo = this.convert(materialsInfo); - this.materials = {}; - this.materialsArray = []; - this.nameLookup = {}; - } - convert(materialsInfo) { - if (!this.options) return materialsInfo; - const converted = {}; - for (const mn in materialsInfo) { - const mat = materialsInfo[mn]; - const covmat = {}; - converted[mn] = covmat; - for (const prop in mat) { - let save = true; - let value = mat[prop]; - const lprop = prop.toLowerCase(); - switch (lprop) { - case "kd": - case "ka": - case "ks": - if (this.options && this.options.normalizeRGB) value = [ - value[0] / 255, - value[1] / 255, - value[2] / 255 - ]; - if (this.options && this.options.ignoreZeroRGBs) { - if (value[0] === 0 && value[1] === 0 && value[2] === 0) save = false; - } - break; - } - if (save) covmat[lprop] = value; - } - } - return converted; - } - preload() { - for (const mn in this.materialsInfo) this.create(mn); - } - getIndex(materialName) { - return this.nameLookup[materialName]; - } - getAsArray() { - let index = 0; - for (const mn in this.materialsInfo) { - this.materialsArray[index] = this.create(mn); - this.nameLookup[mn] = index; - index++; - } - return this.materialsArray; - } - create(materialName) { - if (this.materials[materialName] === void 0) this.createMaterial_(materialName); - return this.materials[materialName]; - } - createMaterial_(materialName) { - const scope = this; - const mat = this.materialsInfo[materialName]; - const params = { - name: materialName, - side: this.side - }; - function resolveURL(baseUrl, url) { - if (typeof url !== "string" || url === "") return ""; - if (/^https?:\/\//i.test(url)) return url; - return baseUrl + url; - } - function setMapForType(mapType, value) { - if (params[mapType]) return; - const texParams = scope.getTextureParams(value, params); - const map = scope.loadTexture(resolveURL(scope.baseUrl, texParams.url)); - map.repeat.copy(texParams.scale); - map.offset.copy(texParams.offset); - map.wrapS = scope.wrap; - map.wrapT = scope.wrap; - params[mapType] = map; - } - for (const prop in mat) { - const value = mat[prop]; - let n; - if (value === "") continue; - switch (prop.toLowerCase()) { - case "kd": - params.color = new Color().fromArray(value); - break; - case "ks": - params.specular = new Color().fromArray(value); - break; - case "ke": - params.emissive = new Color().fromArray(value); - break; - case "map_kd": - setMapForType("map", value); - break; - case "map_ks": - setMapForType("specularMap", value); - break; - case "map_ke": - setMapForType("emissiveMap", value); - break; - case "norm": - setMapForType("normalMap", value); - break; - case "map_bump": - case "bump": - setMapForType("bumpMap", value); - break; - case "map_d": - setMapForType("alphaMap", value); - params.transparent = true; - break; - case "ns": - params.shininess = parseFloat(value); - break; - case "d": - n = parseFloat(value); - if (n < 1) { - params.opacity = n; - params.transparent = true; - } - break; - case "tr": - n = parseFloat(value); - if (this.options && this.options.invertTrProperty) n = 1 - n; - if (n > 0) { - params.opacity = 1 - n; - params.transparent = true; - } - break; - } - } - this.materials[materialName] = new MeshPhongMaterial(params); - return this.materials[materialName]; - } - getTextureParams(value, matParams) { - const texParams = { - scale: new Vector2(1, 1), - offset: new Vector2(0, 0) - }; - const items = value.split(/\s+/); - let pos; - pos = items.indexOf("-bm"); - if (pos >= 0) { - matParams.bumpScale = parseFloat(items[pos + 1]); - items.splice(pos, 2); - } - pos = items.indexOf("-s"); - if (pos >= 0) { - texParams.scale.set(parseFloat(items[pos + 1]), parseFloat(items[pos + 2])); - items.splice(pos, 4); - } - pos = items.indexOf("-o"); - if (pos >= 0) { - texParams.offset.set(parseFloat(items[pos + 1]), parseFloat(items[pos + 2])); - items.splice(pos, 4); - } - texParams.url = items.join(" ").trim(); - return texParams; - } - loadTexture(url, mapping, onLoad, onProgress, onError) { - const manager = this.manager !== void 0 ? this.manager : DefaultLoadingManager; - let loader = manager.getHandler(url); - if (loader === null) loader = new TextureLoader(manager); - if (loader.setCrossOrigin) loader.setCrossOrigin(this.crossOrigin); - const texture = loader.load(url, onLoad, onProgress, onError); - if (mapping !== void 0) texture.mapping = mapping; - return texture; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/XLoader.js -var XLoader = /* @__PURE__ */ function() { - var classCallCheck = function(instance, Constructor) { - if (!(instance instanceof Constructor)) throw new TypeError("Cannot call a class as a function"); - }; - var createClass = function() { - function defineProperties(target, props) { - for (let i2 = 0; i2 < props.length; i2++) { - var descriptor = props[i2]; - descriptor.enumerable = descriptor.enumerable || false; - descriptor.configurable = true; - if ("value" in descriptor) descriptor.writable = true; - Object.defineProperty(target, descriptor.key, descriptor); - } - } - return function(Constructor, protoProps, staticProps) { - if (protoProps) defineProperties(Constructor.prototype, protoProps); - if (staticProps) defineProperties(Constructor, staticProps); - return Constructor; - }; - }(); - var XboneInf = function XboneInf2() { - classCallCheck(this, XboneInf2); - this.boneName = ""; - this.BoneIndex = 0; - this.Indeces = []; - this.Weights = []; - this.initMatrix = null; - this.OffsetMatrix = null; - }; - var XAnimationInfo = function XAnimationInfo2() { - classCallCheck(this, XAnimationInfo2); - this.animeName = ""; - this.boneName = ""; - this.targetBone = null; - this.keyType = 4; - this.frameStartLv = 0; - this.keyFrames = []; - this.InverseMx = null; - }; - var XAnimationObj = function() { - function XAnimationObj2(_flags) { - classCallCheck(this, XAnimationObj2); - this.fps = 30; - this.name = "xanimation"; - this.length = 0; - this.hierarchy = []; - this.putFlags = _flags; - if (this.putFlags.putPos === void 0) this.putFlags.putPos = true; - if (this.putFlags.putRot === void 0) this.putFlags.putRot = true; - if (this.putFlags.putScl === void 0) this.putFlags.putScl = true; - } - createClass(XAnimationObj2, [ - { - key: "make", - value: function make(XAnimationInfoArray) { - for (let i2 = 0; i2 < XAnimationInfoArray.length; i2++) this.hierarchy.push(this.makeBonekeys(XAnimationInfoArray[i2])); - this.length = this.hierarchy[0].keys[this.hierarchy[0].keys.length - 1].time; - } - }, - { - key: "clone", - value: function clone() { - return Object.assign({}, this); - } - }, - { - key: "makeBonekeys", - value: function makeBonekeys(XAnimationInfo2) { - var refObj = {}; - refObj.name = XAnimationInfo2.boneName; - refObj.parent = ""; - refObj.keys = this.keyFrameRefactor(XAnimationInfo2); - refObj.copy = function() { - return Object.assign({}, this); - }; - return refObj; - } - }, - { - key: "keyFrameRefactor", - value: function keyFrameRefactor(XAnimationInfo2) { - var keys = []; - for (let i2 = 0; i2 < XAnimationInfo2.keyFrames.length; i2++) { - var keyframe = {}; - keyframe.time = XAnimationInfo2.keyFrames[i2].time * this.fps; - if (XAnimationInfo2.keyFrames[i2].pos && this.putFlags.putPos) keyframe.pos = XAnimationInfo2.keyFrames[i2].pos; - if (XAnimationInfo2.keyFrames[i2].rot && this.putFlags.putRot) keyframe.rot = XAnimationInfo2.keyFrames[i2].rot; - if (XAnimationInfo2.keyFrames[i2].scl && this.putFlags.putScl) keyframe.scl = XAnimationInfo2.keyFrames[i2].scl; - if (XAnimationInfo2.keyFrames[i2].matrix) { - keyframe.matrix = XAnimationInfo2.keyFrames[i2].matrix; - if (this.putFlags.putPos) keyframe.pos = new Vector3().setFromMatrixPosition(keyframe.matrix); - if (this.putFlags.putRot) keyframe.rot = new Quaternion().setFromRotationMatrix(keyframe.matrix); - if (this.putFlags.putScl) keyframe.scl = new Vector3().setFromMatrixScale(keyframe.matrix); - } - keys.push(keyframe); - } - return keys; - } - } - ]); - return XAnimationObj2; - }(); - var XKeyFrameInfo = function XKeyFrameInfo2() { - classCallCheck(this, XKeyFrameInfo2); - this.index = 0; - this.Frame = 0; - this.time = 0; - this.matrix = null; - }; - return function() { - function XLoader3(manager) { - Loader.call(this, manager); - classCallCheck(this, XLoader3); - this.debug = false; - this.texloader = new TextureLoader(this.manager); - this.url = ""; - this._putMatLength = 0; - this._nowMat = null; - this._nowFrameName = ""; - this.frameHierarchie = []; - this.Hierarchies = {}; - this.HieStack = []; - this._currentObject = {}; - this._currentFrame = {}; - this._data = null; - this.onLoad = null; - this.IsUvYReverse = true; - this.Meshes = []; - this.animations = []; - this.animTicksPerSecond = 30; - this._currentGeo = null; - this._currentAnime = null; - this._currentAnimeFrames = null; - } - createClass(XLoader3, [ - { - key: "_setArgOption", - value: function _setArgOption(_arg) { - var _start = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0; - if (!_arg) return; - for (let i2 = _start; i2 < _arg.length; i2++) switch (i2) { - case 0: - this.url = _arg[i2]; - break; - case 1: - this.options = _arg[i2]; - break; - } - if (this.options === void 0) this.options = {}; - } - }, - { - key: "load", - value: function load(_arg, onLoad, onProgress, onError) { - var _this = this; - this._setArgOption(_arg); - var loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setResponseType("arraybuffer"); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - loader.load(this.url, function(response) { - try { - _this.parse(response, onLoad); - } catch (e) { - if (onError) onError(e); - else console.error(e); - _this.manager.itemError(_this.url); - } - }, onProgress, onError); - } - }, - { - key: "_readLine", - value: function _readLine(line) { - var readed = 0; - while (true) { - var find = -1; - find = line.indexOf("//", readed); - if (find === -1) find = line.indexOf("#", readed); - if (find > -1 && find < 2) { - var foundNewLine = -1; - foundNewLine = line.indexOf("\r\n", readed); - if (foundNewLine > 0) readed = foundNewLine + 2; - else { - foundNewLine = line.indexOf("\r", readed); - if (foundNewLine > 0) readed = foundNewLine + 1; - else readed = line.indexOf("\n", readed) + 1; - } - } else break; - } - return line.substr(readed); - } - }, - { - key: "_readLine", - value: function _readLine(line) { - var readed = 0; - while (true) { - var find = -1; - find = line.indexOf("//", readed); - if (find === -1) find = line.indexOf("#", readed); - if (find > -1 && find < 2) { - var foundNewLine = -1; - foundNewLine = line.indexOf("\r\n", readed); - if (foundNewLine > 0) readed = foundNewLine + 2; - else { - foundNewLine = line.indexOf("\r", readed); - if (foundNewLine > 0) readed = foundNewLine + 1; - else readed = line.indexOf("\n", readed) + 1; - } - } else break; - } - return line.substr(readed); - } - }, - { - key: "_isBinary", - value: function _isBinary(binData) { - var reader = new DataView(binData); - if (84 + reader.getUint32(80, true) * 50 === reader.byteLength) return true; - var fileLength = reader.byteLength; - for (let index = 0; index < fileLength; index++) if (reader.getUint8(index, false) > 127) return true; - return false; - } - }, - { - key: "_ensureBinary", - value: function _ensureBinary(buf) { - if (typeof buf === "string") { - var array_buffer = new Uint8Array(buf.length); - for (let i2 = 0; i2 < buf.length; i2++) array_buffer[i2] = buf.charCodeAt(i2) & 255; - return array_buffer.buffer || array_buffer; - } else return buf; - } - }, - { - key: "_ensureString", - value: function _ensureString(buf) { - if (typeof buf !== "string") return decodeText$1(new Uint8Array(buf)); - else return buf; - } - }, - { - key: "parse", - value: function _parse(data, onLoad) { - var binData = this._ensureBinary(data); - this._data = this._ensureString(data); - this.onLoad = onLoad; - return this._isBinary(binData) ? this._parseBinary(binData) : this._parseASCII(); - } - }, - { - key: "_parseBinary", - value: function _parseBinary(data) { - return this._parseASCII(decodeText$1(new Uint8Array(data))); - } - }, - { - key: "_parseASCII", - value: function _parseASCII() { - var path; - if (this.resourcePath !== "") path = this.resourcePath; - else if (this.path !== "") path = this.path; - else path = LoaderUtils.extractUrlBase(this.url); - this.texloader.setPath(path).setCrossOrigin(this.crossOrigin); - var endRead = 16; - this.Hierarchies.children = []; - this._hierarchieParse(this.Hierarchies, endRead); - this._changeRoot(); - this._currentObject = this.Hierarchies.children.shift(); - this._mainloop(); - } - }, - { - key: "_hierarchieParse", - value: function _hierarchieParse(_parent, _end) { - var endRead = _end; - while (true) { - var find1 = this._data.indexOf("{", endRead) + 1; - var findEnd = this._data.indexOf("}", endRead); - var findNext = this._data.indexOf("{", find1) + 1; - if (find1 > 0 && findEnd > find1) { - var _currentObject = {}; - _currentObject.children = []; - var nameData = this._readLine(this._data.substr(endRead, find1 - endRead - 1)).trim(); - var word = nameData.split(/ /g); - if (word.length > 0) { - _currentObject.type = word[0]; - if (word.length >= 2) _currentObject.name = word[1]; - else _currentObject.name = word[0] + this.Hierarchies.children.length; - } else { - _currentObject.name = nameData; - _currentObject.type = ""; - } - if (_currentObject.type === "Animation") { - _currentObject.data = this._data.substr(findNext, findEnd - findNext).trim(); - var refs = this._hierarchieParse(_currentObject, findEnd + 1); - endRead = refs.end; - _currentObject.children = refs.parent.children; - } else { - var DataEnder = this._data.lastIndexOf(";", findNext > 0 ? Math.min(findNext, findEnd) : findEnd); - _currentObject.data = this._data.substr(find1, DataEnder - find1).trim(); - if (findNext <= 0 || findEnd < findNext) endRead = findEnd + 1; - else { - var nextStart = Math.max(DataEnder + 1, find1); - var _refs = this._hierarchieParse(_currentObject, nextStart); - endRead = _refs.end; - _currentObject.children = _refs.parent.children; - } - } - _currentObject.parent = _parent; - if (_currentObject.type != "template") _parent.children.push(_currentObject); - } else { - endRead = find1 === -1 ? this._data.length : findEnd + 1; - break; - } - } - return { - parent: _parent, - end: endRead - }; - } - }, - { - key: "_mainloop", - value: function _mainloop() { - var _this2 = this; - this._mainProc(); - if (this._currentObject.parent || this._currentObject.children.length > 0 || !this._currentObject.worked) setTimeout(function() { - _this2._mainloop(); - }, 1); - else setTimeout(function() { - _this2.onLoad({ - models: _this2.Meshes, - animations: _this2.animations - }); - }, 1); - } - }, - { - key: "_mainProc", - value: function _mainProc() { - var breakFlag = false; - while (true) { - if (!this._currentObject.worked) { - switch (this._currentObject.type) { - case "template": break; - case "AnimTicksPerSecond": - this.animTicksPerSecond = parseInt(this._currentObject.data); - break; - case "Frame": - this._setFrame(); - break; - case "FrameTransformMatrix": - this._setFrameTransformMatrix(); - break; - case "Mesh": - this._changeRoot(); - this._currentGeo = {}; - this._currentGeo.name = this._currentObject.name.trim(); - this._currentGeo.parentName = this._getParentName(this._currentObject).trim(); - this._currentGeo.VertexSetedBoneCount = []; - this._currentGeo.GeometryData = { - vertices: [], - normals: [], - uvs: [], - skinIndices: [], - skinWeights: [], - indices: [], - materialIndices: [] - }; - this._currentGeo.Materials = []; - this._currentGeo.normalVectors = []; - this._currentGeo.BoneInfs = []; - this._currentGeo.baseFrame = this._currentFrame; - this._makeBoneFrom_CurrentFrame(); - this._readVertexDatas(); - breakFlag = true; - break; - case "MeshNormals": - this._readVertexDatas(); - break; - case "MeshTextureCoords": - this._setMeshTextureCoords(); - break; - case "VertexDuplicationIndices": break; - case "MeshMaterialList": - this._setMeshMaterialList(); - break; - case "Material": - this._setMaterial(); - break; - case "SkinWeights": - this._setSkinWeights(); - break; - case "AnimationSet": - this._changeRoot(); - this._currentAnime = {}; - this._currentAnime.name = this._currentObject.name.trim(); - this._currentAnime.AnimeFrames = []; - break; - case "Animation": - if (this._currentAnimeFrames) this._currentAnime.AnimeFrames.push(this._currentAnimeFrames); - this._currentAnimeFrames = new XAnimationInfo(); - this._currentAnimeFrames.boneName = this._currentObject.data.trim(); - break; - case "AnimationKey": - this._readAnimationKey(); - breakFlag = true; - break; - } - this._currentObject.worked = true; - } - if (this._currentObject.children.length > 0) { - this._currentObject = this._currentObject.children.shift(); - if (this.debug) console.log("processing " + this._currentObject.name); - if (breakFlag) break; - } else { - if (this._currentObject.worked) { - if (this._currentObject.parent && !this._currentObject.parent.parent) this._changeRoot(); - } - if (this._currentObject.parent) this._currentObject = this._currentObject.parent; - else breakFlag = true; - if (breakFlag) break; - } - } - } - }, - { - key: "_changeRoot", - value: function _changeRoot() { - if (this._currentGeo != null && this._currentGeo.name) this._makeOutputGeometry(); - this._currentGeo = {}; - if (this._currentAnime != null && this._currentAnime.name) { - if (this._currentAnimeFrames) { - this._currentAnime.AnimeFrames.push(this._currentAnimeFrames); - this._currentAnimeFrames = null; - } - this._makeOutputAnimation(); - } - this._currentAnime = {}; - } - }, - { - key: "_getParentName", - value: function _getParentName(_obj) { - if (_obj.parent) if (_obj.parent.name) return _obj.parent.name; - else return this._getParentName(_obj.parent); - else return ""; - } - }, - { - key: "_setFrame", - value: function _setFrame() { - this._nowFrameName = this._currentObject.name.trim(); - this._currentFrame = {}; - this._currentFrame.name = this._nowFrameName; - this._currentFrame.children = []; - if (this._currentObject.parent && this._currentObject.parent.name) this._currentFrame.parentName = this._currentObject.parent.name; - this.frameHierarchie.push(this._nowFrameName); - this.HieStack[this._nowFrameName] = this._currentFrame; - } - }, - { - key: "_setFrameTransformMatrix", - value: function _setFrameTransformMatrix() { - this._currentFrame.FrameTransformMatrix = new Matrix4(); - var data = this._currentObject.data.split(","); - this._ParseMatrixData(this._currentFrame.FrameTransformMatrix, data); - this._makeBoneFrom_CurrentFrame(); - } - }, - { - key: "_makeBoneFrom_CurrentFrame", - value: function _makeBoneFrom_CurrentFrame() { - if (!this._currentFrame.FrameTransformMatrix) return; - var b = new Bone(); - b.name = this._currentFrame.name; - b.applyMatrix4(this._currentFrame.FrameTransformMatrix); - b.matrixWorld = b.matrix; - b.FrameTransformMatrix = this._currentFrame.FrameTransformMatrix; - this._currentFrame.putBone = b; - if (this._currentFrame.parentName) { - for (let frame in this.HieStack) if (this.HieStack[frame].name === this._currentFrame.parentName) this.HieStack[frame].putBone.add(this._currentFrame.putBone); - } - } - }, - { - key: "_readVertexDatas", - value: function _readVertexDatas() { - var endRead = 0; - var mode = 0; - var mode_local = 0; - var maxLength = 0; - while (true) { - var changeMode = false; - if (mode_local === 0) { - endRead = this._readInt1(endRead).endRead; - mode_local = 1; - maxLength = this._currentObject.data.indexOf(";;", endRead) + 1; - if (maxLength <= 0) maxLength = this._currentObject.data.length; - } else { - var find = 0; - switch (mode) { - case 0: - find = this._currentObject.data.indexOf(",", endRead) + 1; - break; - case 1: - find = this._currentObject.data.indexOf(";,", endRead) + 1; - break; - } - if (find === 0 || find > maxLength) { - find = maxLength; - mode_local = 0; - changeMode = true; - } - switch (this._currentObject.type) { - case "Mesh": - switch (mode) { - case 0: - this._readVertex1(this._currentObject.data.substr(endRead, find - endRead)); - break; - case 1: - this._readFace1(this._currentObject.data.substr(endRead, find - endRead)); - break; - } - break; - case "MeshNormals": - switch (mode) { - case 0: - this._readNormalVector1(this._currentObject.data.substr(endRead, find - endRead)); - break; - } - break; - } - endRead = find + 1; - if (changeMode) mode++; - } - if (endRead >= this._currentObject.data.length) break; - } - } - }, - { - key: "_readInt1", - value: function _readInt1(start) { - var find = this._currentObject.data.indexOf(";", start); - return { - refI: parseInt(this._currentObject.data.substr(start, find - start)), - endRead: find + 1 - }; - } - }, - { - key: "_readVertex1", - value: function _readVertex1(line) { - var data = this._readLine(line.trim()).substr(0, line.length - 2).split(";"); - this._currentGeo.GeometryData.vertices.push(parseFloat(data[0]), parseFloat(data[1]), parseFloat(data[2])); - this._currentGeo.GeometryData.skinIndices.push(0, 0, 0, 0); - this._currentGeo.GeometryData.skinWeights.push(1, 0, 0, 0); - this._currentGeo.VertexSetedBoneCount.push(0); - } - }, - { - key: "_readFace1", - value: function _readFace1(line) { - var data = this._readLine(line.trim()).substr(2, line.length - 4).split(","); - this._currentGeo.GeometryData.indices.push(parseInt(data[0], 10), parseInt(data[1], 10), parseInt(data[2], 10)); - } - }, - { - key: "_readNormalVector1", - value: function _readNormalVector1(line) { - var data = this._readLine(line.trim()).substr(0, line.length - 2).split(";"); - this._currentGeo.GeometryData.normals.push(parseFloat(data[0]), parseFloat(data[1]), parseFloat(data[2])); - } - }, - { - key: "_buildGeometry", - value: function _buildGeometry() { - var bufferGeometry = new BufferGeometry(); - var position = []; - var normals = []; - var uvs = []; - var skinIndices = []; - var skinWeights = []; - var data = this._currentGeo.GeometryData; - for (let i2 = 0, l = data.indices.length; i2 < l; i2++) { - var stride2 = data.indices[i2] * 2; - var stride3 = data.indices[i2] * 3; - var stride4 = data.indices[i2] * 4; - position.push(data.vertices[stride3], data.vertices[stride3 + 1], data.vertices[stride3 + 2]); - normals.push(data.normals[stride3], data.normals[stride3 + 1], data.normals[stride3 + 2]); - skinIndices.push(data.skinIndices[stride4], data.skinIndices[stride4 + 1], data.skinIndices[stride4 + 2], data.skinIndices[stride4 + 3]); - skinWeights.push(data.skinWeights[stride4], data.skinWeights[stride4 + 1], data.skinWeights[stride4 + 2], data.skinWeights[stride4 + 3]); - uvs.push(data.uvs[stride2], data.uvs[stride2 + 1]); - } - bufferGeometry.setAttribute("position", new Float32BufferAttribute(position, 3)); - bufferGeometry.setAttribute("normal", new Float32BufferAttribute(normals, 3)); - bufferGeometry.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); - bufferGeometry.setAttribute("skinIndex", new Uint16BufferAttribute(skinIndices, 4)); - bufferGeometry.setAttribute("skinWeight", new Float32BufferAttribute(skinWeights, 4)); - this._computeGroups(bufferGeometry, data.materialIndices); - return bufferGeometry; - } - }, - { - key: "_computeGroups", - value: function _computeGroups(bufferGeometry, materialIndices) { - var group; - var groups = []; - var materialIndex = void 0; - for (let i2 = 0; i2 < materialIndices.length; i2++) { - var currentMaterialIndex = materialIndices[i2]; - if (currentMaterialIndex !== materialIndex) { - materialIndex = currentMaterialIndex; - if (group !== void 0) { - group.count = i2 * 3 - group.start; - groups.push(group); - } - group = { - start: i2 * 3, - materialIndex - }; - } - } - if (group !== void 0) { - group.count = i * 3 - group.start; - groups.push(group); - } - bufferGeometry.groups = groups; - } - }, - { - key: "_setMeshTextureCoords", - value: function _setMeshTextureCoords() { - var endRead = 0; - var mode = 0; - var mode_local = 0; - while (true) { - switch (mode) { - case 0: - if (mode_local === 0) { - endRead = this._readInt1(0).endRead; - mode_local = 1; - } else { - var find = this._currentObject.data.indexOf(",", endRead) + 1; - if (find === 0) { - find = this._currentObject.data.length; - mode = 2; - mode_local = 0; - } - var line = this._currentObject.data.substr(endRead, find - endRead); - var data = this._readLine(line.trim()).split(";"); - if (this.IsUvYReverse) this._currentGeo.GeometryData.uvs.push(parseFloat(data[0]), 1 - parseFloat(data[1])); - else this._currentGeo.GeometryData.uvs.push(parseFloat(data[0]), parseFloat(data[1])); - endRead = find + 1; - } - break; - } - if (endRead >= this._currentObject.data.length) break; - } - } - }, - { - key: "_setMeshMaterialList", - value: function _setMeshMaterialList() { - var endRead = 0; - var mode = 0; - var mode_local = 0; - while (true) { - if (mode_local < 2) { - endRead = this._readInt1(endRead).endRead; - mode_local++; - } else { - var find = this._currentObject.data.indexOf(";", endRead); - if (find === -1) { - find = this._currentObject.data.length; - mode = 3; - mode_local = 0; - } - var line = this._currentObject.data.substr(endRead, find - endRead); - var data = this._readLine(line.trim()).split(","); - for (let i2 = 0; i2 < data.length; i2++) this._currentGeo.GeometryData.materialIndices[i2] = parseInt(data[i2]); - endRead = this._currentObject.data.length; - } - if (endRead >= this._currentObject.data.length || mode >= 3) break; - } - } - }, - { - key: "_setMaterial", - value: function _setMaterial() { - var _nowMat = new MeshPhongMaterial({ color: Math.random() * 16777215 }); - _nowMat.side = 0; - _nowMat.name = this._currentObject.name; - var endRead = 0; - var find = this._currentObject.data.indexOf(";;", endRead); - var line = this._currentObject.data.substr(endRead, find - endRead); - var data = this._readLine(line.trim()).split(";"); - _nowMat.color.r = parseFloat(data[0]); - _nowMat.color.g = parseFloat(data[1]); - _nowMat.color.b = parseFloat(data[2]); - endRead = find + 2; - find = this._currentObject.data.indexOf(";", endRead); - line = this._currentObject.data.substr(endRead, find - endRead); - _nowMat.shininess = parseFloat(this._readLine(line)); - endRead = find + 1; - find = this._currentObject.data.indexOf(";;", endRead); - line = this._currentObject.data.substr(endRead, find - endRead); - var data2 = this._readLine(line.trim()).split(";"); - _nowMat.specular.r = parseFloat(data2[0]); - _nowMat.specular.g = parseFloat(data2[1]); - _nowMat.specular.b = parseFloat(data2[2]); - endRead = find + 2; - find = this._currentObject.data.indexOf(";;", endRead); - if (find === -1) find = this._currentObject.data.length; - line = this._currentObject.data.substr(endRead, find - endRead); - var data3 = this._readLine(line.trim()).split(";"); - _nowMat.emissive.r = parseFloat(data3[0]); - _nowMat.emissive.g = parseFloat(data3[1]); - _nowMat.emissive.b = parseFloat(data3[2]); - var localObject = null; - while (true) if (this._currentObject.children.length > 0) { - localObject = this._currentObject.children.shift(); - if (this.debug) console.log("processing " + localObject.name); - var fileName = localObject.data.substr(1, localObject.data.length - 2); - switch (localObject.type) { - case "TextureFilename": - _nowMat.map = this.texloader.load(fileName); - break; - case "BumpMapFilename": - _nowMat.bumpMap = this.texloader.load(fileName); - _nowMat.bumpScale = .05; - break; - case "NormalMapFilename": - _nowMat.normalMap = this.texloader.load(fileName); - _nowMat.normalScale = new Vector2(2, 2); - break; - case "EmissiveMapFilename": - _nowMat.emissiveMap = this.texloader.load(fileName); - break; - case "LightMapFilename": - _nowMat.lightMap = this.texloader.load(fileName); - break; - } - } else break; - this._currentGeo.Materials.push(_nowMat); - } - }, - { - key: "_setSkinWeights", - value: function _setSkinWeights() { - var boneInf = new XboneInf(); - var endRead = 0; - var find = this._currentObject.data.indexOf(";", endRead); - var line = this._currentObject.data.substr(endRead, find - endRead); - endRead = find + 1; - boneInf.boneName = line.substr(1, line.length - 2); - boneInf.BoneIndex = this._currentGeo.BoneInfs.length; - find = this._currentObject.data.indexOf(";", endRead); - endRead = find + 1; - find = this._currentObject.data.indexOf(";", endRead); - line = this._currentObject.data.substr(endRead, find - endRead); - var data = this._readLine(line.trim()).split(","); - for (let i2 = 0; i2 < data.length; i2++) boneInf.Indeces.push(parseInt(data[i2])); - endRead = find + 1; - find = this._currentObject.data.indexOf(";", endRead); - line = this._currentObject.data.substr(endRead, find - endRead); - var data2 = this._readLine(line.trim()).split(","); - for (let _i = 0; _i < data2.length; _i++) boneInf.Weights.push(parseFloat(data2[_i])); - endRead = find + 1; - find = this._currentObject.data.indexOf(";", endRead); - if (find <= 0) find = this._currentObject.data.length; - line = this._currentObject.data.substr(endRead, find - endRead); - var data3 = this._readLine(line.trim()).split(","); - boneInf.OffsetMatrix = new Matrix4(); - this._ParseMatrixData(boneInf.OffsetMatrix, data3); - this._currentGeo.BoneInfs.push(boneInf); - } - }, - { - key: "_makePutBoneList", - value: function _makePutBoneList(_RootName, _bones) { - var putting = false; - for (let frame in this.HieStack) if (this.HieStack[frame].name === _RootName || putting) { - putting = true; - var b = new Bone(); - b.name = this.HieStack[frame].name; - b.applyMatrix4(this.HieStack[frame].FrameTransformMatrix); - b.matrixWorld = b.matrix; - b.FrameTransformMatrix = this.HieStack[frame].FrameTransformMatrix; - b.pos = new Vector3().setFromMatrixPosition(b.FrameTransformMatrix).toArray(); - b.rotq = new Quaternion().setFromRotationMatrix(b.FrameTransformMatrix).toArray(); - b.scl = new Vector3().setFromMatrixScale(b.FrameTransformMatrix).toArray(); - if (this.HieStack[frame].parentName && this.HieStack[frame].parentName.length > 0) { - for (let i2 = 0; i2 < _bones.length; i2++) if (this.HieStack[frame].parentName === _bones[i2].name) { - _bones[i2].add(b); - b.parent = i2; - break; - } - } - _bones.push(b); - } - } - }, - { - key: "_makeOutputGeometry", - value: function _makeOutputGeometry() { - var mesh = null; - if (this._currentGeo.BoneInfs.length > 0) { - var putBones = []; - this._makePutBoneList(this._currentGeo.baseFrame.parentName, putBones); - for (let bi = 0; bi < this._currentGeo.BoneInfs.length; bi++) { - var boneIndex = 0; - for (let bb = 0; bb < putBones.length; bb++) if (putBones[bb].name === this._currentGeo.BoneInfs[bi].boneName) { - boneIndex = bb; - putBones[bb].OffsetMatrix = new Matrix4(); - putBones[bb].OffsetMatrix.copy(this._currentGeo.BoneInfs[bi].OffsetMatrix); - break; - } - for (let vi = 0; vi < this._currentGeo.BoneInfs[bi].Indeces.length; vi++) { - var nowVertexID = this._currentGeo.BoneInfs[bi].Indeces[vi]; - var nowVal = this._currentGeo.BoneInfs[bi].Weights[vi]; - var stride = nowVertexID * 4; - switch (this._currentGeo.VertexSetedBoneCount[nowVertexID]) { - case 0: - this._currentGeo.GeometryData.skinIndices[stride] = boneIndex; - this._currentGeo.GeometryData.skinWeights[stride] = nowVal; - break; - case 1: - this._currentGeo.GeometryData.skinIndices[stride + 1] = boneIndex; - this._currentGeo.GeometryData.skinWeights[stride + 1] = nowVal; - break; - case 2: - this._currentGeo.GeometryData.skinIndices[stride + 2] = boneIndex; - this._currentGeo.GeometryData.skinWeights[stride + 2] = nowVal; - break; - case 3: - this._currentGeo.GeometryData.skinIndices[stride + 3] = boneIndex; - this._currentGeo.GeometryData.skinWeights[stride + 3] = nowVal; - break; - } - this._currentGeo.VertexSetedBoneCount[nowVertexID]++; - if (this._currentGeo.VertexSetedBoneCount[nowVertexID] > 4) console.log("warn! over 4 bone weight! :" + nowVertexID); - } - } - for (let sk = 0; sk < this._currentGeo.Materials.length; sk++) this._currentGeo.Materials[sk].skinning = true; - var offsetList = []; - for (let _bi = 0; _bi < putBones.length; _bi++) if (putBones[_bi].OffsetMatrix) offsetList.push(putBones[_bi].OffsetMatrix); - else offsetList.push(new Matrix4()); - mesh = new SkinnedMesh(this._buildGeometry(), this._currentGeo.Materials.length === 1 ? this._currentGeo.Materials[0] : this._currentGeo.Materials); - this._initSkeleton(mesh, putBones, offsetList); - } else mesh = new Mesh(this._buildGeometry(), this._currentGeo.Materials.length === 1 ? this._currentGeo.Materials[0] : this._currentGeo.Materials); - mesh.name = this._currentGeo.name; - var worldBaseMx = new Matrix4(); - var currentMxFrame = this._currentGeo.baseFrame.putBone; - if (currentMxFrame && currentMxFrame.parent) { - while (true) { - currentMxFrame = currentMxFrame.parent; - if (currentMxFrame) worldBaseMx.multiply(currentMxFrame.FrameTransformMatrix); - else break; - } - mesh.applyMatrix4(worldBaseMx); - } - this.Meshes.push(mesh); - } - }, - { - key: "_initSkeleton", - value: function _initSkeleton(mesh, boneList, boneInverses) { - var bones = [], bone, gbone; - var i2, il; - for (i2 = 0, il = boneList.length; i2 < il; i2++) { - gbone = boneList[i2]; - bone = new Bone(); - bones.push(bone); - bone.name = gbone.name; - bone.position.fromArray(gbone.pos); - bone.quaternion.fromArray(gbone.rotq); - if (gbone.scl !== void 0) bone.scale.fromArray(gbone.scl); - } - for (i2 = 0, il = boneList.length; i2 < il; i2++) { - gbone = boneList[i2]; - if (gbone.parent !== -1 && gbone.parent !== null && bones[gbone.parent] !== void 0) bones[gbone.parent].add(bones[i2]); - else mesh.add(bones[i2]); - } - mesh.updateMatrixWorld(true); - var skeleton = new Skeleton(bones, boneInverses); - mesh.bind(skeleton, mesh.matrixWorld); - } - }, - { - key: "_readAnimationKey", - value: function _readAnimationKey() { - var endRead = 0; - var find = this._currentObject.data.indexOf(";", endRead); - var line = this._currentObject.data.substr(endRead, find - endRead); - endRead = find + 1; - var nowKeyType = parseInt(this._readLine(line)); - find = this._currentObject.data.indexOf(";", endRead); - endRead = find + 1; - line = this._currentObject.data.substr(endRead); - var data = this._readLine(line.trim()).split(";;,"); - for (let i2 = 0; i2 < data.length; i2++) { - var data2 = data[i2].split(";"); - var keyInfo = new XKeyFrameInfo(); - keyInfo.type = nowKeyType; - keyInfo.Frame = parseInt(data2[0]); - keyInfo.index = this._currentAnimeFrames.keyFrames.length; - keyInfo.time = keyInfo.Frame; - if (nowKeyType != 4) { - var frameFound = false; - for (let mm = 0; mm < this._currentAnimeFrames.keyFrames.length; mm++) if (this._currentAnimeFrames.keyFrames[mm].Frame === keyInfo.Frame) { - keyInfo = this._currentAnimeFrames.keyFrames[mm]; - frameFound = true; - break; - } - var frameValue = data2[2].split(","); - switch (nowKeyType) { - case 0: - keyInfo.rot = new Quaternion(parseFloat(frameValue[1]), parseFloat(frameValue[2]), parseFloat(frameValue[3]), parseFloat(frameValue[0]) * -1); - break; - case 1: - keyInfo.scl = new Vector3(parseFloat(frameValue[0]), parseFloat(frameValue[1]), parseFloat(frameValue[2])); - break; - case 2: - keyInfo.pos = new Vector3(parseFloat(frameValue[0]), parseFloat(frameValue[1]), parseFloat(frameValue[2])); - break; - } - if (!frameFound) this._currentAnimeFrames.keyFrames.push(keyInfo); - } else { - keyInfo.matrix = new Matrix4(); - this._ParseMatrixData(keyInfo.matrix, data2[2].split(",")); - this._currentAnimeFrames.keyFrames.push(keyInfo); - } - } - } - }, - { - key: "_makeOutputAnimation", - value: function _makeOutputAnimation() { - var animationObj = new XAnimationObj(this.options); - animationObj.fps = this.animTicksPerSecond; - animationObj.name = this._currentAnime.name; - animationObj.make(this._currentAnime.AnimeFrames); - this.animations.push(animationObj); - } - }, - { - key: "assignAnimation", - value: function assignAnimation(_model, _animation) { - var model = _model; - var animation = _animation; - if (!model) model = this.Meshes[0]; - if (!animation) animation = this.animations[0]; - if (!model || !animation) return null; - var put = {}; - put.fps = animation.fps; - put.name = animation.name; - put.length = animation.length; - put.hierarchy = []; - for (let b = 0; b < model.skeleton.bones.length; b++) { - var findAnimation = false; - for (let i2 = 0; i2 < animation.hierarchy.length; i2++) if (model.skeleton.bones[b].name === animation.hierarchy[i2].name) { - findAnimation = true; - var c_key = animation.hierarchy[i2].copy(); - c_key.parent = -1; - if (model.skeleton.bones[b].parent && model.skeleton.bones[b].parent.type === "Bone") { - for (let bb = 0; bb < put.hierarchy.length; bb++) if (put.hierarchy[bb].name === model.skeleton.bones[b].parent.name) { - c_key.parent = bb; - c_key.parentName = model.skeleton.bones[b].parent.name; - } - } - put.hierarchy.push(c_key); - break; - } - if (!findAnimation) { - var _c_key = animation.hierarchy[0].copy(); - _c_key.name = model.skeleton.bones[b].name; - _c_key.parent = -1; - for (let k = 0; k < _c_key.keys.length; k++) { - if (_c_key.keys[k].pos) _c_key.keys[k].pos.set(0, 0, 0); - if (_c_key.keys[k].scl) _c_key.keys[k].scl.set(1, 1, 1); - if (_c_key.keys[k].rot) _c_key.keys[k].rot.set(0, 0, 0, 1); - } - put.hierarchy.push(_c_key); - } - } - if (!model.geometry.animations) model.geometry.animations = []; - model.geometry.animations.push(AnimationClip.parseAnimation(put, model.skeleton.bones)); - if (!model.animationMixer) model.animationMixer = new AnimationMixer(model); - return put; - } - }, - { - key: "_ParseMatrixData", - value: function _ParseMatrixData(targetMatrix, data) { - targetMatrix.set(parseFloat(data[0]), parseFloat(data[4]), parseFloat(data[8]), parseFloat(data[12]), parseFloat(data[1]), parseFloat(data[5]), parseFloat(data[9]), parseFloat(data[13]), parseFloat(data[2]), parseFloat(data[6]), parseFloat(data[10]), parseFloat(data[14]), parseFloat(data[3]), parseFloat(data[7]), parseFloat(data[11]), parseFloat(data[15])); - } - } - ]); - return XLoader3; - }(); -}(); -//#endregion -//#region node_modules/three-stdlib/loaders/BVHLoader.js -var BVHLoader = class extends Loader { - constructor(manager) { - super(manager); - this.animateBonePositions = true; - this.animateBoneRotations = true; - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(scope.manager); - loader.setPath(scope.path); - loader.setRequestHeader(scope.requestHeader); - loader.setWithCredentials(scope.withCredentials); - loader.load(url, function(text) { - try { - onLoad(scope.parse(text)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(text) { - function readBvh(lines2) { - if (nextLine(lines2) !== "HIERARCHY") console.error("THREE.BVHLoader: HIERARCHY expected."); - const list = []; - const root = readNode(lines2, nextLine(lines2), list); - if (nextLine(lines2) !== "MOTION") console.error("THREE.BVHLoader: MOTION expected."); - let tokens = nextLine(lines2).split(/[\s]+/); - const numFrames = parseInt(tokens[1]); - if (isNaN(numFrames)) console.error("THREE.BVHLoader: Failed to read number of frames."); - tokens = nextLine(lines2).split(/[\s]+/); - const frameTime = parseFloat(tokens[2]); - if (isNaN(frameTime)) console.error("THREE.BVHLoader: Failed to read frame time."); - for (let i = 0; i < numFrames; i++) { - tokens = nextLine(lines2).split(/[\s]+/); - readFrameData(tokens, i * frameTime, root); - } - return list; - } - function readFrameData(data, frameTime, bone) { - if (bone.type === "ENDSITE") return; - const keyframe = { - time: frameTime, - position: new Vector3(), - rotation: new Quaternion() - }; - bone.frames.push(keyframe); - const quat = new Quaternion(); - const vx = new Vector3(1, 0, 0); - const vy = new Vector3(0, 1, 0); - const vz = new Vector3(0, 0, 1); - for (let i = 0; i < bone.channels.length; i++) switch (bone.channels[i]) { - case "Xposition": - keyframe.position.x = parseFloat(data.shift().trim()); - break; - case "Yposition": - keyframe.position.y = parseFloat(data.shift().trim()); - break; - case "Zposition": - keyframe.position.z = parseFloat(data.shift().trim()); - break; - case "Xrotation": - quat.setFromAxisAngle(vx, parseFloat(data.shift().trim()) * Math.PI / 180); - keyframe.rotation.multiply(quat); - break; - case "Yrotation": - quat.setFromAxisAngle(vy, parseFloat(data.shift().trim()) * Math.PI / 180); - keyframe.rotation.multiply(quat); - break; - case "Zrotation": - quat.setFromAxisAngle(vz, parseFloat(data.shift().trim()) * Math.PI / 180); - keyframe.rotation.multiply(quat); - break; - default: console.warn("THREE.BVHLoader: Invalid channel type."); - } - for (let i = 0; i < bone.children.length; i++) readFrameData(data, frameTime, bone.children[i]); - } - function readNode(lines2, firstline, list) { - const node = { - name: "", - type: "", - frames: [] - }; - list.push(node); - let tokens = firstline.split(/[\s]+/); - if (tokens[0].toUpperCase() === "END" && tokens[1].toUpperCase() === "SITE") { - node.type = "ENDSITE"; - node.name = "ENDSITE"; - } else { - node.name = tokens[1]; - node.type = tokens[0].toUpperCase(); - } - if (nextLine(lines2) !== "{") console.error("THREE.BVHLoader: Expected opening { after type & name"); - tokens = nextLine(lines2).split(/[\s]+/); - if (tokens[0] !== "OFFSET") console.error("THREE.BVHLoader: Expected OFFSET but got: " + tokens[0]); - if (tokens.length !== 4) console.error("THREE.BVHLoader: Invalid number of values for OFFSET."); - const offset = new Vector3(parseFloat(tokens[1]), parseFloat(tokens[2]), parseFloat(tokens[3])); - if (isNaN(offset.x) || isNaN(offset.y) || isNaN(offset.z)) console.error("THREE.BVHLoader: Invalid values of OFFSET."); - node.offset = offset; - if (node.type !== "ENDSITE") { - tokens = nextLine(lines2).split(/[\s]+/); - if (tokens[0] !== "CHANNELS") console.error("THREE.BVHLoader: Expected CHANNELS definition."); - const numChannels = parseInt(tokens[1]); - node.channels = tokens.splice(2, numChannels); - node.children = []; - } - while (true) { - const line = nextLine(lines2); - if (line === "}") return node; - else node.children.push(readNode(lines2, line, list)); - } - } - function toTHREEBone(source, list) { - const bone = new Bone(); - list.push(bone); - bone.position.add(source.offset); - bone.name = source.name; - if (source.type !== "ENDSITE") for (let i = 0; i < source.children.length; i++) bone.add(toTHREEBone(source.children[i], list)); - return bone; - } - function toTHREEAnimation(bones2) { - const tracks = []; - for (let i = 0; i < bones2.length; i++) { - const bone = bones2[i]; - if (bone.type === "ENDSITE") continue; - const times = []; - const positions = []; - const rotations = []; - for (let j = 0; j < bone.frames.length; j++) { - const frame = bone.frames[j]; - times.push(frame.time); - positions.push(frame.position.x + bone.offset.x); - positions.push(frame.position.y + bone.offset.y); - positions.push(frame.position.z + bone.offset.z); - rotations.push(frame.rotation.x); - rotations.push(frame.rotation.y); - rotations.push(frame.rotation.z); - rotations.push(frame.rotation.w); - } - if (scope.animateBonePositions) tracks.push(new VectorKeyframeTrack(".bones[" + bone.name + "].position", times, positions)); - if (scope.animateBoneRotations) tracks.push(new QuaternionKeyframeTrack(".bones[" + bone.name + "].quaternion", times, rotations)); - } - return new AnimationClip("animation", -1, tracks); - } - function nextLine(lines2) { - let line; - while ((line = lines2.shift().trim()).length === 0); - return line; - } - const scope = this; - const bones = readBvh(text.split(/[\r\n]+/g)); - const threeBones = []; - toTHREEBone(bones[0], threeBones); - const threeClip = toTHREEAnimation(bones); - return { - skeleton: new Skeleton(threeBones), - clip: threeClip - }; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/ColladaLoader.js -var ColladaLoader = class extends Loader { - constructor(manager) { - super(manager); - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const path = scope.path === "" ? LoaderUtils.extractUrlBase(url) : scope.path; - const loader = new FileLoader(scope.manager); - loader.setPath(scope.path); - loader.setRequestHeader(scope.requestHeader); - loader.setWithCredentials(scope.withCredentials); - loader.load(url, function(text) { - try { - onLoad(scope.parse(text, path)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(text, path) { - function getElementsByTagName(xml2, name) { - const array = []; - const childNodes = xml2.childNodes; - for (let i = 0, l = childNodes.length; i < l; i++) { - const child = childNodes[i]; - if (child.nodeName === name) array.push(child); - } - return array; - } - function parseStrings(text2) { - if (text2.length === 0) return []; - const parts = text2.trim().split(/\s+/); - const array = new Array(parts.length); - for (let i = 0, l = parts.length; i < l; i++) array[i] = parts[i]; - return array; - } - function parseFloats(text2) { - if (text2.length === 0) return []; - const parts = text2.trim().split(/\s+/); - const array = new Array(parts.length); - for (let i = 0, l = parts.length; i < l; i++) array[i] = parseFloat(parts[i]); - return array; - } - function parseInts(text2) { - if (text2.length === 0) return []; - const parts = text2.trim().split(/\s+/); - const array = new Array(parts.length); - for (let i = 0, l = parts.length; i < l; i++) array[i] = parseInt(parts[i]); - return array; - } - function parseId(text2) { - return text2.substring(1); - } - function generateId() { - return "three_default_" + count++; - } - function isEmpty(object) { - return Object.keys(object).length === 0; - } - function parseAsset(xml2) { - return { - unit: parseAssetUnit(getElementsByTagName(xml2, "unit")[0]), - upAxis: parseAssetUpAxis(getElementsByTagName(xml2, "up_axis")[0]) - }; - } - function parseAssetUnit(xml2) { - if (xml2 !== void 0 && xml2.hasAttribute("meter") === true) return parseFloat(xml2.getAttribute("meter")); - else return 1; - } - function parseAssetUpAxis(xml2) { - return xml2 !== void 0 ? xml2.textContent : "Y_UP"; - } - function parseLibrary(xml2, libraryName, nodeName, parser) { - const library2 = getElementsByTagName(xml2, libraryName)[0]; - if (library2 !== void 0) { - const elements = getElementsByTagName(library2, nodeName); - for (let i = 0; i < elements.length; i++) parser(elements[i]); - } - } - function buildLibrary(data, builder) { - for (const name in data) { - const object = data[name]; - object.build = builder(data[name]); - } - } - function getBuild(data, builder) { - if (data.build !== void 0) return data.build; - data.build = builder(data); - return data.build; - } - function parseAnimation(xml2) { - const data = { - sources: {}, - samplers: {}, - channels: {} - }; - let hasChildren = false; - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - let id; - switch (child.nodeName) { - case "source": - id = child.getAttribute("id"); - data.sources[id] = parseSource(child); - break; - case "sampler": - id = child.getAttribute("id"); - data.samplers[id] = parseAnimationSampler(child); - break; - case "channel": - id = child.getAttribute("target"); - data.channels[id] = parseAnimationChannel(child); - break; - case "animation": - parseAnimation(child); - hasChildren = true; - break; - default: console.log(child); - } - } - if (hasChildren === false) library.animations[xml2.getAttribute("id") || MathUtils.generateUUID()] = data; - } - function parseAnimationSampler(xml2) { - const data = { inputs: {} }; - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "input": - const id = parseId(child.getAttribute("source")); - const semantic = child.getAttribute("semantic"); - data.inputs[semantic] = id; - break; - } - } - return data; - } - function parseAnimationChannel(xml2) { - const data = {}; - let parts = xml2.getAttribute("target").split("/"); - const id = parts.shift(); - let sid = parts.shift(); - const arraySyntax = sid.indexOf("(") !== -1; - const memberSyntax = sid.indexOf(".") !== -1; - if (memberSyntax) { - parts = sid.split("."); - sid = parts.shift(); - data.member = parts.shift(); - } else if (arraySyntax) { - const indices = sid.split("("); - sid = indices.shift(); - for (let i = 0; i < indices.length; i++) indices[i] = parseInt(indices[i].replace(/\)/, "")); - data.indices = indices; - } - data.id = id; - data.sid = sid; - data.arraySyntax = arraySyntax; - data.memberSyntax = memberSyntax; - data.sampler = parseId(xml2.getAttribute("source")); - return data; - } - function buildAnimation(data) { - const tracks = []; - const channels = data.channels; - const samplers = data.samplers; - const sources = data.sources; - for (const target in channels) if (channels.hasOwnProperty(target)) { - const channel = channels[target]; - const sampler = samplers[channel.sampler]; - const inputId = sampler.inputs.INPUT; - const outputId = sampler.inputs.OUTPUT; - const inputSource = sources[inputId]; - const outputSource = sources[outputId]; - createKeyframeTracks(buildAnimationChannel(channel, inputSource, outputSource), tracks); - } - return tracks; - } - function getAnimation(id) { - return getBuild(library.animations[id], buildAnimation); - } - function buildAnimationChannel(channel, inputSource, outputSource) { - const node = library.nodes[channel.id]; - const object3D = getNode(node.id); - const transform = node.transforms[channel.sid]; - const defaultMatrix = node.matrix.clone().transpose(); - let time, stride; - let i, il, j, jl; - const data = {}; - switch (transform) { - case "matrix": - for (i = 0, il = inputSource.array.length; i < il; i++) { - time = inputSource.array[i]; - stride = i * outputSource.stride; - if (data[time] === void 0) data[time] = {}; - if (channel.arraySyntax === true) { - const value = outputSource.array[stride]; - const index = channel.indices[0] + 4 * channel.indices[1]; - data[time][index] = value; - } else for (j = 0, jl = outputSource.stride; j < jl; j++) data[time][j] = outputSource.array[stride + j]; - } - break; - case "translate": - console.warn("THREE.ColladaLoader: Animation transform type \"%s\" not yet implemented.", transform); - break; - case "rotate": - console.warn("THREE.ColladaLoader: Animation transform type \"%s\" not yet implemented.", transform); - break; - case "scale": - console.warn("THREE.ColladaLoader: Animation transform type \"%s\" not yet implemented.", transform); - break; - } - const keyframes = prepareAnimationData(data, defaultMatrix); - return { - name: object3D.uuid, - keyframes - }; - } - function prepareAnimationData(data, defaultMatrix) { - const keyframes = []; - for (const time in data) keyframes.push({ - time: parseFloat(time), - value: data[time] - }); - keyframes.sort(ascending); - for (let i = 0; i < 16; i++) transformAnimationData(keyframes, i, defaultMatrix.elements[i]); - return keyframes; - function ascending(a, b) { - return a.time - b.time; - } - } - const position = new Vector3(); - const scale = new Vector3(); - const quaternion = new Quaternion(); - function createKeyframeTracks(animation, tracks) { - const keyframes = animation.keyframes; - const name = animation.name; - const times = []; - const positionData = []; - const quaternionData = []; - const scaleData = []; - for (let i = 0, l = keyframes.length; i < l; i++) { - const keyframe = keyframes[i]; - const time = keyframe.time; - const value = keyframe.value; - matrix.fromArray(value).transpose(); - matrix.decompose(position, quaternion, scale); - times.push(time); - positionData.push(position.x, position.y, position.z); - quaternionData.push(quaternion.x, quaternion.y, quaternion.z, quaternion.w); - scaleData.push(scale.x, scale.y, scale.z); - } - if (positionData.length > 0) tracks.push(new VectorKeyframeTrack(name + ".position", times, positionData)); - if (quaternionData.length > 0) tracks.push(new QuaternionKeyframeTrack(name + ".quaternion", times, quaternionData)); - if (scaleData.length > 0) tracks.push(new VectorKeyframeTrack(name + ".scale", times, scaleData)); - return tracks; - } - function transformAnimationData(keyframes, property, defaultValue) { - let keyframe; - let empty = true; - let i, l; - for (i = 0, l = keyframes.length; i < l; i++) { - keyframe = keyframes[i]; - if (keyframe.value[property] === void 0) keyframe.value[property] = null; - else empty = false; - } - if (empty === true) for (i = 0, l = keyframes.length; i < l; i++) { - keyframe = keyframes[i]; - keyframe.value[property] = defaultValue; - } - else createMissingKeyframes(keyframes, property); - } - function createMissingKeyframes(keyframes, property) { - let prev, next; - for (let i = 0, l = keyframes.length; i < l; i++) { - const keyframe = keyframes[i]; - if (keyframe.value[property] === null) { - prev = getPrev(keyframes, i, property); - next = getNext(keyframes, i, property); - if (prev === null) { - keyframe.value[property] = next.value[property]; - continue; - } - if (next === null) { - keyframe.value[property] = prev.value[property]; - continue; - } - interpolate(keyframe, prev, next, property); - } - } - } - function getPrev(keyframes, i, property) { - while (i >= 0) { - const keyframe = keyframes[i]; - if (keyframe.value[property] !== null) return keyframe; - i--; - } - return null; - } - function getNext(keyframes, i, property) { - while (i < keyframes.length) { - const keyframe = keyframes[i]; - if (keyframe.value[property] !== null) return keyframe; - i++; - } - return null; - } - function interpolate(key, prev, next, property) { - if (next.time - prev.time === 0) { - key.value[property] = prev.value[property]; - return; - } - key.value[property] = (key.time - prev.time) * (next.value[property] - prev.value[property]) / (next.time - prev.time) + prev.value[property]; - } - function parseAnimationClip(xml2) { - const data = { - name: xml2.getAttribute("id") || "default", - start: parseFloat(xml2.getAttribute("start") || 0), - end: parseFloat(xml2.getAttribute("end") || 0), - animations: [] - }; - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "instance_animation": - data.animations.push(parseId(child.getAttribute("url"))); - break; - } - } - library.clips[xml2.getAttribute("id")] = data; - } - function buildAnimationClip(data) { - const tracks = []; - const name = data.name; - const duration = data.end - data.start || -1; - const animations2 = data.animations; - for (let i = 0, il = animations2.length; i < il; i++) { - const animationTracks = getAnimation(animations2[i]); - for (let j = 0, jl = animationTracks.length; j < jl; j++) tracks.push(animationTracks[j]); - } - return new AnimationClip(name, duration, tracks); - } - function getAnimationClip(id) { - return getBuild(library.clips[id], buildAnimationClip); - } - function parseController(xml2) { - const data = {}; - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "skin": - data.id = parseId(child.getAttribute("source")); - data.skin = parseSkin(child); - break; - case "morph": - data.id = parseId(child.getAttribute("source")); - console.warn("THREE.ColladaLoader: Morph target animation not supported yet."); - break; - } - } - library.controllers[xml2.getAttribute("id")] = data; - } - function parseSkin(xml2) { - const data = { sources: {} }; - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "bind_shape_matrix": - data.bindShapeMatrix = parseFloats(child.textContent); - break; - case "source": - const id = child.getAttribute("id"); - data.sources[id] = parseSource(child); - break; - case "joints": - data.joints = parseJoints(child); - break; - case "vertex_weights": - data.vertexWeights = parseVertexWeights(child); - break; - } - } - return data; - } - function parseJoints(xml2) { - const data = { inputs: {} }; - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "input": - const semantic = child.getAttribute("semantic"); - const id = parseId(child.getAttribute("source")); - data.inputs[semantic] = id; - break; - } - } - return data; - } - function parseVertexWeights(xml2) { - const data = { inputs: {} }; - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "input": - const semantic = child.getAttribute("semantic"); - const id = parseId(child.getAttribute("source")); - const offset = parseInt(child.getAttribute("offset")); - data.inputs[semantic] = { - id, - offset - }; - break; - case "vcount": - data.vcount = parseInts(child.textContent); - break; - case "v": - data.v = parseInts(child.textContent); - break; - } - } - return data; - } - function buildController(data) { - const build = { id: data.id }; - const geometry = library.geometries[build.id]; - if (data.skin !== void 0) { - build.skin = buildSkin(data.skin); - geometry.sources.skinIndices = build.skin.indices; - geometry.sources.skinWeights = build.skin.weights; - } - return build; - } - function buildSkin(data) { - const BONE_LIMIT = 4; - const build = { - joints: [], - indices: { - array: [], - stride: BONE_LIMIT - }, - weights: { - array: [], - stride: BONE_LIMIT - } - }; - const sources = data.sources; - const vertexWeights = data.vertexWeights; - const vcount = vertexWeights.vcount; - const v = vertexWeights.v; - const jointOffset = vertexWeights.inputs.JOINT.offset; - const weightOffset = vertexWeights.inputs.WEIGHT.offset; - const jointSource = data.sources[data.joints.inputs.JOINT]; - const inverseSource = data.sources[data.joints.inputs.INV_BIND_MATRIX]; - const weights = sources[vertexWeights.inputs.WEIGHT.id].array; - let stride = 0; - let i, j, l; - for (i = 0, l = vcount.length; i < l; i++) { - const jointCount = vcount[i]; - const vertexSkinData = []; - for (j = 0; j < jointCount; j++) { - const skinIndex = v[stride + jointOffset]; - const skinWeight = weights[v[stride + weightOffset]]; - vertexSkinData.push({ - index: skinIndex, - weight: skinWeight - }); - stride += 2; - } - vertexSkinData.sort(descending); - for (j = 0; j < BONE_LIMIT; j++) { - const d = vertexSkinData[j]; - if (d !== void 0) { - build.indices.array.push(d.index); - build.weights.array.push(d.weight); - } else { - build.indices.array.push(0); - build.weights.array.push(0); - } - } - } - if (data.bindShapeMatrix) build.bindMatrix = new Matrix4().fromArray(data.bindShapeMatrix).transpose(); - else build.bindMatrix = new Matrix4().identity(); - for (i = 0, l = jointSource.array.length; i < l; i++) { - const name = jointSource.array[i]; - const boneInverse = new Matrix4().fromArray(inverseSource.array, i * inverseSource.stride).transpose(); - build.joints.push({ - name, - boneInverse - }); - } - return build; - function descending(a, b) { - return b.weight - a.weight; - } - } - function getController(id) { - return getBuild(library.controllers[id], buildController); - } - function parseImage(xml2) { - const data = { init_from: getElementsByTagName(xml2, "init_from")[0].textContent }; - library.images[xml2.getAttribute("id")] = data; - } - function buildImage(data) { - if (data.build !== void 0) return data.build; - return data.init_from; - } - function getImage(id) { - const data = library.images[id]; - if (data !== void 0) return getBuild(data, buildImage); - console.warn("THREE.ColladaLoader: Couldn't find image with ID:", id); - return null; - } - function parseEffect(xml2) { - const data = {}; - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "profile_COMMON": - data.profile = parseEffectProfileCOMMON(child); - break; - } - } - library.effects[xml2.getAttribute("id")] = data; - } - function parseEffectProfileCOMMON(xml2) { - const data = { - surfaces: {}, - samplers: {} - }; - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "newparam": - parseEffectNewparam(child, data); - break; - case "technique": - data.technique = parseEffectTechnique(child); - break; - case "extra": - data.extra = parseEffectExtra(child); - break; - } - } - return data; - } - function parseEffectNewparam(xml2, data) { - const sid = xml2.getAttribute("sid"); - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "surface": - data.surfaces[sid] = parseEffectSurface(child); - break; - case "sampler2D": - data.samplers[sid] = parseEffectSampler(child); - break; - } - } - } - function parseEffectSurface(xml2) { - const data = {}; - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "init_from": - data.init_from = child.textContent; - break; - } - } - return data; - } - function parseEffectSampler(xml2) { - const data = {}; - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "source": - data.source = child.textContent; - break; - } - } - return data; - } - function parseEffectTechnique(xml2) { - const data = {}; - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "constant": - case "lambert": - case "blinn": - case "phong": - data.type = child.nodeName; - data.parameters = parseEffectParameters(child); - break; - case "extra": - data.extra = parseEffectExtra(child); - break; - } - } - return data; - } - function parseEffectParameters(xml2) { - const data = {}; - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "emission": - case "diffuse": - case "specular": - case "bump": - case "ambient": - case "shininess": - case "transparency": - data[child.nodeName] = parseEffectParameter(child); - break; - case "transparent": - data[child.nodeName] = { - opaque: child.hasAttribute("opaque") ? child.getAttribute("opaque") : "A_ONE", - data: parseEffectParameter(child) - }; - break; - } - } - return data; - } - function parseEffectParameter(xml2) { - const data = {}; - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "color": - data[child.nodeName] = parseFloats(child.textContent); - break; - case "float": - data[child.nodeName] = parseFloat(child.textContent); - break; - case "texture": - data[child.nodeName] = { - id: child.getAttribute("texture"), - extra: parseEffectParameterTexture(child) - }; - break; - } - } - return data; - } - function parseEffectParameterTexture(xml2) { - const data = { technique: {} }; - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "extra": - parseEffectParameterTextureExtra(child, data); - break; - } - } - return data; - } - function parseEffectParameterTextureExtra(xml2, data) { - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "technique": - parseEffectParameterTextureExtraTechnique(child, data); - break; - } - } - } - function parseEffectParameterTextureExtraTechnique(xml2, data) { - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "repeatU": - case "repeatV": - case "offsetU": - case "offsetV": - data.technique[child.nodeName] = parseFloat(child.textContent); - break; - case "wrapU": - case "wrapV": - if (child.textContent.toUpperCase() === "TRUE") data.technique[child.nodeName] = 1; - else if (child.textContent.toUpperCase() === "FALSE") data.technique[child.nodeName] = 0; - else data.technique[child.nodeName] = parseInt(child.textContent); - break; - case "bump": - data[child.nodeName] = parseEffectExtraTechniqueBump(child); - break; - } - } - } - function parseEffectExtra(xml2) { - const data = {}; - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "technique": - data.technique = parseEffectExtraTechnique(child); - break; - } - } - return data; - } - function parseEffectExtraTechnique(xml2) { - const data = {}; - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "double_sided": - data[child.nodeName] = parseInt(child.textContent); - break; - case "bump": - data[child.nodeName] = parseEffectExtraTechniqueBump(child); - break; - } - } - return data; - } - function parseEffectExtraTechniqueBump(xml2) { - var data = {}; - for (var i = 0, l = xml2.childNodes.length; i < l; i++) { - var child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "texture": - data[child.nodeName] = { - id: child.getAttribute("texture"), - texcoord: child.getAttribute("texcoord"), - extra: parseEffectParameterTexture(child) - }; - break; - } - } - return data; - } - function buildEffect(data) { - return data; - } - function getEffect(id) { - return getBuild(library.effects[id], buildEffect); - } - function parseMaterial(xml2) { - const data = { name: xml2.getAttribute("name") }; - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "instance_effect": - data.url = parseId(child.getAttribute("url")); - break; - } - } - library.materials[xml2.getAttribute("id")] = data; - } - function getTextureLoader(image) { - let loader; - let extension = image.slice((image.lastIndexOf(".") - 1 >>> 0) + 2); - extension = extension.toLowerCase(); - switch (extension) { - case "tga": - loader = tgaLoader; - break; - default: loader = textureLoader; - } - return loader; - } - function buildMaterial(data) { - const effect = getEffect(data.url); - const technique = effect.profile.technique; - let material; - switch (technique.type) { - case "phong": - case "blinn": - material = new MeshPhongMaterial(); - break; - case "lambert": - material = new MeshLambertMaterial(); - break; - default: - material = new MeshBasicMaterial(); - break; - } - material.name = data.name || ""; - function getTexture(textureObject) { - const sampler = effect.profile.samplers[textureObject.id]; - let image = null; - if (sampler !== void 0) { - const surface = effect.profile.surfaces[sampler.source]; - image = getImage(surface.init_from); - } else { - console.warn("THREE.ColladaLoader: Undefined sampler. Access image directly (see #12530)."); - image = getImage(textureObject.id); - } - if (image !== null) { - const loader = getTextureLoader(image); - if (loader !== void 0) { - const texture = loader.load(image); - const extra = textureObject.extra; - if (extra !== void 0 && extra.technique !== void 0 && isEmpty(extra.technique) === false) { - const technique2 = extra.technique; - texture.wrapS = technique2.wrapU ? RepeatWrapping : ClampToEdgeWrapping; - texture.wrapT = technique2.wrapV ? RepeatWrapping : ClampToEdgeWrapping; - texture.offset.set(technique2.offsetU || 0, technique2.offsetV || 0); - texture.repeat.set(technique2.repeatU || 1, technique2.repeatV || 1); - } else { - texture.wrapS = RepeatWrapping; - texture.wrapT = RepeatWrapping; - } - return texture; - } else { - console.warn("THREE.ColladaLoader: Loader for texture %s not found.", image); - return null; - } - } else { - console.warn("THREE.ColladaLoader: Couldn't create texture with ID:", textureObject.id); - return null; - } - } - const parameters = technique.parameters; - for (const key in parameters) { - const parameter = parameters[key]; - switch (key) { - case "diffuse": - if (parameter.color) material.color.fromArray(parameter.color); - if (parameter.texture) material.map = getTexture(parameter.texture); - break; - case "specular": - if (parameter.color && material.specular) material.specular.fromArray(parameter.color); - if (parameter.texture) material.specularMap = getTexture(parameter.texture); - break; - case "bump": - if (parameter.texture) material.normalMap = getTexture(parameter.texture); - break; - case "ambient": - if (parameter.texture) material.lightMap = getTexture(parameter.texture); - break; - case "shininess": - if (parameter.float && material.shininess) material.shininess = parameter.float; - break; - case "emission": - if (parameter.color && material.emissive) material.emissive.fromArray(parameter.color); - if (parameter.texture) material.emissiveMap = getTexture(parameter.texture); - break; - } - } - let transparent = parameters["transparent"]; - let transparency = parameters["transparency"]; - if (transparency === void 0 && transparent) transparency = { float: 1 }; - if (transparent === void 0 && transparency) transparent = { - opaque: "A_ONE", - data: { color: [ - 1, - 1, - 1, - 1 - ] } - }; - if (transparent && transparency) if (transparent.data.texture) material.transparent = true; - else { - const color = transparent.data.color; - switch (transparent.opaque) { - case "A_ONE": - material.opacity = color[3] * transparency.float; - break; - case "RGB_ZERO": - material.opacity = 1 - color[0] * transparency.float; - break; - case "A_ZERO": - material.opacity = 1 - color[3] * transparency.float; - break; - case "RGB_ONE": - material.opacity = color[0] * transparency.float; - break; - default: console.warn("THREE.ColladaLoader: Invalid opaque type \"%s\" of transparent tag.", transparent.opaque); - } - if (material.opacity < 1) material.transparent = true; - } - if (technique.extra !== void 0 && technique.extra.technique !== void 0) { - const techniques = technique.extra.technique; - for (const k in techniques) { - const v = techniques[k]; - switch (k) { - case "double_sided": - material.side = v === 1 ? 2 : 0; - break; - case "bump": - material.normalMap = getTexture(v.texture); - material.normalScale = new Vector2(1, 1); - break; - } - } - } - return material; - } - function getMaterial(id) { - return getBuild(library.materials[id], buildMaterial); - } - function parseCamera(xml2) { - const data = { name: xml2.getAttribute("name") }; - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "optics": - data.optics = parseCameraOptics(child); - break; - } - } - library.cameras[xml2.getAttribute("id")] = data; - } - function parseCameraOptics(xml2) { - for (let i = 0; i < xml2.childNodes.length; i++) { - const child = xml2.childNodes[i]; - switch (child.nodeName) { - case "technique_common": return parseCameraTechnique(child); - } - } - return {}; - } - function parseCameraTechnique(xml2) { - const data = {}; - for (let i = 0; i < xml2.childNodes.length; i++) { - const child = xml2.childNodes[i]; - switch (child.nodeName) { - case "perspective": - case "orthographic": - data.technique = child.nodeName; - data.parameters = parseCameraParameters(child); - break; - } - } - return data; - } - function parseCameraParameters(xml2) { - const data = {}; - for (let i = 0; i < xml2.childNodes.length; i++) { - const child = xml2.childNodes[i]; - switch (child.nodeName) { - case "xfov": - case "yfov": - case "xmag": - case "ymag": - case "znear": - case "zfar": - case "aspect_ratio": - data[child.nodeName] = parseFloat(child.textContent); - break; - } - } - return data; - } - function buildCamera(data) { - let camera; - switch (data.optics.technique) { - case "perspective": - camera = new PerspectiveCamera(data.optics.parameters.yfov, data.optics.parameters.aspect_ratio, data.optics.parameters.znear, data.optics.parameters.zfar); - break; - case "orthographic": - let ymag = data.optics.parameters.ymag; - let xmag = data.optics.parameters.xmag; - const aspectRatio = data.optics.parameters.aspect_ratio; - xmag = xmag === void 0 ? ymag * aspectRatio : xmag; - ymag = ymag === void 0 ? xmag / aspectRatio : ymag; - xmag *= .5; - ymag *= .5; - camera = new OrthographicCamera(-xmag, xmag, ymag, -ymag, data.optics.parameters.znear, data.optics.parameters.zfar); - break; - default: - camera = new PerspectiveCamera(); - break; - } - camera.name = data.name || ""; - return camera; - } - function getCamera(id) { - const data = library.cameras[id]; - if (data !== void 0) return getBuild(data, buildCamera); - console.warn("THREE.ColladaLoader: Couldn't find camera with ID:", id); - return null; - } - function parseLight(xml2) { - let data = {}; - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "technique_common": - data = parseLightTechnique(child); - break; - } - } - library.lights[xml2.getAttribute("id")] = data; - } - function parseLightTechnique(xml2) { - const data = {}; - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "directional": - case "point": - case "spot": - case "ambient": - data.technique = child.nodeName; - data.parameters = parseLightParameters(child); - } - } - return data; - } - function parseLightParameters(xml2) { - const data = {}; - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "color": - const array = parseFloats(child.textContent); - data.color = new Color().fromArray(array); - break; - case "falloff_angle": - data.falloffAngle = parseFloat(child.textContent); - break; - case "quadratic_attenuation": - const f = parseFloat(child.textContent); - data.distance = f ? Math.sqrt(1 / f) : 0; - break; - } - } - return data; - } - function buildLight(data) { - let light; - switch (data.technique) { - case "directional": - light = new DirectionalLight(); - break; - case "point": - light = new PointLight(); - break; - case "spot": - light = new SpotLight(); - break; - case "ambient": - light = new AmbientLight(); - break; - } - if (data.parameters.color) light.color.copy(data.parameters.color); - if (data.parameters.distance) light.distance = data.parameters.distance; - return light; - } - function getLight(id) { - const data = library.lights[id]; - if (data !== void 0) return getBuild(data, buildLight); - console.warn("THREE.ColladaLoader: Couldn't find light with ID:", id); - return null; - } - function parseGeometry(xml2) { - const data = { - name: xml2.getAttribute("name"), - sources: {}, - vertices: {}, - primitives: [] - }; - const mesh = getElementsByTagName(xml2, "mesh")[0]; - if (mesh === void 0) return; - for (let i = 0; i < mesh.childNodes.length; i++) { - const child = mesh.childNodes[i]; - if (child.nodeType !== 1) continue; - const id = child.getAttribute("id"); - switch (child.nodeName) { - case "source": - data.sources[id] = parseSource(child); - break; - case "vertices": - data.vertices = parseGeometryVertices(child); - break; - case "polygons": - console.warn("THREE.ColladaLoader: Unsupported primitive type: ", child.nodeName); - break; - case "lines": - case "linestrips": - case "polylist": - case "triangles": - data.primitives.push(parseGeometryPrimitive(child)); - break; - default: console.log(child); - } - } - library.geometries[xml2.getAttribute("id")] = data; - } - function parseSource(xml2) { - const data = { - array: [], - stride: 3 - }; - for (let i = 0; i < xml2.childNodes.length; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "float_array": - data.array = parseFloats(child.textContent); - break; - case "Name_array": - data.array = parseStrings(child.textContent); - break; - case "technique_common": - const accessor = getElementsByTagName(child, "accessor")[0]; - if (accessor !== void 0) data.stride = parseInt(accessor.getAttribute("stride")); - break; - } - } - return data; - } - function parseGeometryVertices(xml2) { - const data = {}; - for (let i = 0; i < xml2.childNodes.length; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - data[child.getAttribute("semantic")] = parseId(child.getAttribute("source")); - } - return data; - } - function parseGeometryPrimitive(xml2) { - const primitive = { - type: xml2.nodeName, - material: xml2.getAttribute("material"), - count: parseInt(xml2.getAttribute("count")), - inputs: {}, - stride: 0, - hasUV: false - }; - for (let i = 0, l = xml2.childNodes.length; i < l; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "input": - const id = parseId(child.getAttribute("source")); - const semantic = child.getAttribute("semantic"); - const offset = parseInt(child.getAttribute("offset")); - const set = parseInt(child.getAttribute("set")); - const inputname = set > 0 ? semantic + set : semantic; - primitive.inputs[inputname] = { - id, - offset - }; - primitive.stride = Math.max(primitive.stride, offset + 1); - if (semantic === "TEXCOORD") primitive.hasUV = true; - break; - case "vcount": - primitive.vcount = parseInts(child.textContent); - break; - case "p": - primitive.p = parseInts(child.textContent); - break; - } - } - return primitive; - } - function groupPrimitives(primitives) { - const build = {}; - for (let i = 0; i < primitives.length; i++) { - const primitive = primitives[i]; - if (build[primitive.type] === void 0) build[primitive.type] = []; - build[primitive.type].push(primitive); - } - return build; - } - function checkUVCoordinates(primitives) { - let count2 = 0; - for (let i = 0, l = primitives.length; i < l; i++) if (primitives[i].hasUV === true) count2++; - if (count2 > 0 && count2 < primitives.length) primitives.uvsNeedsFix = true; - } - function buildGeometry(data) { - const build = {}; - const sources = data.sources; - const vertices = data.vertices; - const primitives = data.primitives; - if (primitives.length === 0) return {}; - const groupedPrimitives = groupPrimitives(primitives); - for (const type in groupedPrimitives) { - const primitiveType = groupedPrimitives[type]; - checkUVCoordinates(primitiveType); - build[type] = buildGeometryType(primitiveType, sources, vertices); - } - return build; - } - function buildGeometryType(primitives, sources, vertices) { - const build = {}; - const position2 = { - array: [], - stride: 0 - }; - const normal = { - array: [], - stride: 0 - }; - const uv = { - array: [], - stride: 0 - }; - const uv1 = { - array: [], - stride: 0 - }; - const color = { - array: [], - stride: 0 - }; - const skinIndex = { - array: [], - stride: 4 - }; - const skinWeight = { - array: [], - stride: 4 - }; - const geometry = new BufferGeometry(); - const materialKeys = []; - let start = 0; - for (let p = 0; p < primitives.length; p++) { - const primitive = primitives[p]; - const inputs = primitive.inputs; - let count2 = 0; - switch (primitive.type) { - case "lines": - case "linestrips": - count2 = primitive.count * 2; - break; - case "triangles": - count2 = primitive.count * 3; - break; - case "polylist": - for (let g = 0; g < primitive.count; g++) { - const vc = primitive.vcount[g]; - switch (vc) { - case 3: - count2 += 3; - break; - case 4: - count2 += 6; - break; - default: - count2 += (vc - 2) * 3; - break; - } - } - break; - default: console.warn("THREE.ColladaLoader: Unknow primitive type:", primitive.type); - } - geometry.addGroup(start, count2, p); - start += count2; - if (primitive.material) materialKeys.push(primitive.material); - for (const name in inputs) { - const input = inputs[name]; - switch (name) { - case "VERTEX": - for (const key in vertices) { - const id = vertices[key]; - switch (key) { - case "POSITION": - const prevLength = position2.array.length; - buildGeometryData(primitive, sources[id], input.offset, position2.array); - position2.stride = sources[id].stride; - if (sources.skinWeights && sources.skinIndices) { - buildGeometryData(primitive, sources.skinIndices, input.offset, skinIndex.array); - buildGeometryData(primitive, sources.skinWeights, input.offset, skinWeight.array); - } - if (primitive.hasUV === false && primitives.uvsNeedsFix === true) { - const count3 = (position2.array.length - prevLength) / position2.stride; - for (let i = 0; i < count3; i++) uv.array.push(0, 0); - } - break; - case "NORMAL": - buildGeometryData(primitive, sources[id], input.offset, normal.array); - normal.stride = sources[id].stride; - break; - case "COLOR": - buildGeometryData(primitive, sources[id], input.offset, color.array); - color.stride = sources[id].stride; - break; - case "TEXCOORD": - buildGeometryData(primitive, sources[id], input.offset, uv.array); - uv.stride = sources[id].stride; - break; - case "TEXCOORD1": - buildGeometryData(primitive, sources[id], input.offset, uv1.array); - uv.stride = sources[id].stride; - break; - default: console.warn("THREE.ColladaLoader: Semantic \"%s\" not handled in geometry build process.", key); - } - } - break; - case "NORMAL": - buildGeometryData(primitive, sources[input.id], input.offset, normal.array); - normal.stride = sources[input.id].stride; - break; - case "COLOR": - buildGeometryData(primitive, sources[input.id], input.offset, color.array); - color.stride = sources[input.id].stride; - break; - case "TEXCOORD": - buildGeometryData(primitive, sources[input.id], input.offset, uv.array); - uv.stride = sources[input.id].stride; - break; - case "TEXCOORD1": - buildGeometryData(primitive, sources[input.id], input.offset, uv1.array); - uv1.stride = sources[input.id].stride; - break; - } - } - } - if (position2.array.length > 0) geometry.setAttribute("position", new Float32BufferAttribute(position2.array, position2.stride)); - if (normal.array.length > 0) geometry.setAttribute("normal", new Float32BufferAttribute(normal.array, normal.stride)); - if (color.array.length > 0) geometry.setAttribute("color", new Float32BufferAttribute(color.array, color.stride)); - if (uv.array.length > 0) geometry.setAttribute("uv", new Float32BufferAttribute(uv.array, uv.stride)); - if (uv1.array.length > 0) geometry.setAttribute(UV1, new Float32BufferAttribute(uv1.array, uv1.stride)); - if (skinIndex.array.length > 0) geometry.setAttribute("skinIndex", new Float32BufferAttribute(skinIndex.array, skinIndex.stride)); - if (skinWeight.array.length > 0) geometry.setAttribute("skinWeight", new Float32BufferAttribute(skinWeight.array, skinWeight.stride)); - build.data = geometry; - build.type = primitives[0].type; - build.materialKeys = materialKeys; - return build; - } - function buildGeometryData(primitive, source, offset, array) { - const indices = primitive.p; - const stride = primitive.stride; - const vcount = primitive.vcount; - function pushVector(i) { - let index = indices[i + offset] * sourceStride; - const length = index + sourceStride; - for (; index < length; index++) array.push(sourceArray[index]); - } - const sourceArray = source.array; - const sourceStride = source.stride; - if (primitive.vcount !== void 0) { - let index = 0; - for (let i = 0, l = vcount.length; i < l; i++) { - const count2 = vcount[i]; - if (count2 === 4) { - const a = index + stride * 0; - const b = index + stride * 1; - const c = index + stride * 2; - const d = index + stride * 3; - pushVector(a); - pushVector(b); - pushVector(d); - pushVector(b); - pushVector(c); - pushVector(d); - } else if (count2 === 3) { - const a = index + stride * 0; - const b = index + stride * 1; - const c = index + stride * 2; - pushVector(a); - pushVector(b); - pushVector(c); - } else if (count2 > 4) for (let k = 1, kl = count2 - 2; k <= kl; k++) { - const a = index + stride * 0; - const b = index + stride * k; - const c = index + stride * (k + 1); - pushVector(a); - pushVector(b); - pushVector(c); - } - index += stride * count2; - } - } else for (let i = 0, l = indices.length; i < l; i += stride) pushVector(i); - } - function getGeometry(id) { - return getBuild(library.geometries[id], buildGeometry); - } - function parseKinematicsModel(xml2) { - const data = { - name: xml2.getAttribute("name") || "", - joints: {}, - links: [] - }; - for (let i = 0; i < xml2.childNodes.length; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "technique_common": - parseKinematicsTechniqueCommon(child, data); - break; - } - } - library.kinematicsModels[xml2.getAttribute("id")] = data; - } - function buildKinematicsModel(data) { - if (data.build !== void 0) return data.build; - return data; - } - function getKinematicsModel(id) { - return getBuild(library.kinematicsModels[id], buildKinematicsModel); - } - function parseKinematicsTechniqueCommon(xml2, data) { - for (let i = 0; i < xml2.childNodes.length; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "joint": - data.joints[child.getAttribute("sid")] = parseKinematicsJoint(child); - break; - case "link": - data.links.push(parseKinematicsLink(child)); - break; - } - } - } - function parseKinematicsJoint(xml2) { - let data; - for (let i = 0; i < xml2.childNodes.length; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "prismatic": - case "revolute": - data = parseKinematicsJointParameter(child); - break; - } - } - return data; - } - function parseKinematicsJointParameter(xml2) { - const data = { - sid: xml2.getAttribute("sid"), - name: xml2.getAttribute("name") || "", - axis: new Vector3(), - limits: { - min: 0, - max: 0 - }, - type: xml2.nodeName, - static: false, - zeroPosition: 0, - middlePosition: 0 - }; - for (let i = 0; i < xml2.childNodes.length; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "axis": - const array = parseFloats(child.textContent); - data.axis.fromArray(array); - break; - case "limits": - const max = child.getElementsByTagName("max")[0]; - const min = child.getElementsByTagName("min")[0]; - data.limits.max = parseFloat(max.textContent); - data.limits.min = parseFloat(min.textContent); - break; - } - } - if (data.limits.min >= data.limits.max) data.static = true; - data.middlePosition = (data.limits.min + data.limits.max) / 2; - return data; - } - function parseKinematicsLink(xml2) { - const data = { - sid: xml2.getAttribute("sid"), - name: xml2.getAttribute("name") || "", - attachments: [], - transforms: [] - }; - for (let i = 0; i < xml2.childNodes.length; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "attachment_full": - data.attachments.push(parseKinematicsAttachment(child)); - break; - case "matrix": - case "translate": - case "rotate": - data.transforms.push(parseKinematicsTransform(child)); - break; - } - } - return data; - } - function parseKinematicsAttachment(xml2) { - const data = { - joint: xml2.getAttribute("joint").split("/").pop(), - transforms: [], - links: [] - }; - for (let i = 0; i < xml2.childNodes.length; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "link": - data.links.push(parseKinematicsLink(child)); - break; - case "matrix": - case "translate": - case "rotate": - data.transforms.push(parseKinematicsTransform(child)); - break; - } - } - return data; - } - function parseKinematicsTransform(xml2) { - const data = { type: xml2.nodeName }; - const array = parseFloats(xml2.textContent); - switch (data.type) { - case "matrix": - data.obj = new Matrix4(); - data.obj.fromArray(array).transpose(); - break; - case "translate": - data.obj = new Vector3(); - data.obj.fromArray(array); - break; - case "rotate": - data.obj = new Vector3(); - data.obj.fromArray(array); - data.angle = MathUtils.degToRad(array[3]); - break; - } - return data; - } - function parsePhysicsModel(xml2) { - const data = { - name: xml2.getAttribute("name") || "", - rigidBodies: {} - }; - for (let i = 0; i < xml2.childNodes.length; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "rigid_body": - data.rigidBodies[child.getAttribute("name")] = {}; - parsePhysicsRigidBody(child, data.rigidBodies[child.getAttribute("name")]); - break; - } - } - library.physicsModels[xml2.getAttribute("id")] = data; - } - function parsePhysicsRigidBody(xml2, data) { - for (let i = 0; i < xml2.childNodes.length; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "technique_common": - parsePhysicsTechniqueCommon(child, data); - break; - } - } - } - function parsePhysicsTechniqueCommon(xml2, data) { - for (let i = 0; i < xml2.childNodes.length; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "inertia": - data.inertia = parseFloats(child.textContent); - break; - case "mass": - data.mass = parseFloats(child.textContent)[0]; - break; - } - } - } - function parseKinematicsScene(xml2) { - const data = { bindJointAxis: [] }; - for (let i = 0; i < xml2.childNodes.length; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "bind_joint_axis": - data.bindJointAxis.push(parseKinematicsBindJointAxis(child)); - break; - } - } - library.kinematicsScenes[parseId(xml2.getAttribute("url"))] = data; - } - function parseKinematicsBindJointAxis(xml2) { - const data = { target: xml2.getAttribute("target").split("/").pop() }; - for (let i = 0; i < xml2.childNodes.length; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - switch (child.nodeName) { - case "axis": - data.axis = child.getElementsByTagName("param")[0].textContent; - const tmpJointIndex = data.axis.split("inst_").pop().split("axis")[0]; - data.jointIndex = tmpJointIndex.substr(0, tmpJointIndex.length - 1); - break; - } - } - return data; - } - function buildKinematicsScene(data) { - if (data.build !== void 0) return data.build; - return data; - } - function getKinematicsScene(id) { - return getBuild(library.kinematicsScenes[id], buildKinematicsScene); - } - function setupKinematics() { - const kinematicsModelId = Object.keys(library.kinematicsModels)[0]; - const kinematicsSceneId = Object.keys(library.kinematicsScenes)[0]; - const visualSceneId = Object.keys(library.visualScenes)[0]; - if (kinematicsModelId === void 0 || kinematicsSceneId === void 0) return; - const kinematicsModel = getKinematicsModel(kinematicsModelId); - const kinematicsScene = getKinematicsScene(kinematicsSceneId); - const visualScene = getVisualScene(visualSceneId); - const bindJointAxis = kinematicsScene.bindJointAxis; - const jointMap = {}; - for (let i = 0, l = bindJointAxis.length; i < l; i++) { - const axis = bindJointAxis[i]; - const targetElement = collada.querySelector("[sid=\"" + axis.target + "\"]"); - if (targetElement) { - const parentVisualElement = targetElement.parentElement; - connect(axis.jointIndex, parentVisualElement); - } - } - function connect(jointIndex, visualElement) { - const visualElementName = visualElement.getAttribute("name"); - const joint = kinematicsModel.joints[jointIndex]; - visualScene.traverse(function(object) { - if (object.name === visualElementName) jointMap[jointIndex] = { - object, - transforms: buildTransformList(visualElement), - joint, - position: joint.zeroPosition - }; - }); - } - const m0 = new Matrix4(); - kinematics = { - joints: kinematicsModel && kinematicsModel.joints, - getJointValue: function(jointIndex) { - const jointData = jointMap[jointIndex]; - if (jointData) return jointData.position; - else console.warn("THREE.ColladaLoader: Joint " + jointIndex + " doesn't exist."); - }, - setJointValue: function(jointIndex, value) { - const jointData = jointMap[jointIndex]; - if (jointData) { - const joint = jointData.joint; - if (value > joint.limits.max || value < joint.limits.min) console.warn("THREE.ColladaLoader: Joint " + jointIndex + " value " + value + " outside of limits (min: " + joint.limits.min + ", max: " + joint.limits.max + ")."); - else if (joint.static) console.warn("THREE.ColladaLoader: Joint " + jointIndex + " is static."); - else { - const object = jointData.object; - const axis = joint.axis; - const transforms = jointData.transforms; - matrix.identity(); - for (let i = 0; i < transforms.length; i++) { - const transform = transforms[i]; - if (transform.sid && transform.sid.indexOf(jointIndex) !== -1) switch (joint.type) { - case "revolute": - matrix.multiply(m0.makeRotationAxis(axis, MathUtils.degToRad(value))); - break; - case "prismatic": - matrix.multiply(m0.makeTranslation(axis.x * value, axis.y * value, axis.z * value)); - break; - default: - console.warn("THREE.ColladaLoader: Unknown joint type: " + joint.type); - break; - } - else switch (transform.type) { - case "matrix": - matrix.multiply(transform.obj); - break; - case "translate": - matrix.multiply(m0.makeTranslation(transform.obj.x, transform.obj.y, transform.obj.z)); - break; - case "scale": - matrix.scale(transform.obj); - break; - case "rotate": - matrix.multiply(m0.makeRotationAxis(transform.obj, transform.angle)); - break; - } - } - object.matrix.copy(matrix); - object.matrix.decompose(object.position, object.quaternion, object.scale); - jointMap[jointIndex].position = value; - } - } else console.log("THREE.ColladaLoader: " + jointIndex + " does not exist."); - } - }; - } - function buildTransformList(node) { - const transforms = []; - const xml2 = collada.querySelector("[id=\"" + node.id + "\"]"); - for (let i = 0; i < xml2.childNodes.length; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - let array, vector2; - switch (child.nodeName) { - case "matrix": - array = parseFloats(child.textContent); - const matrix2 = new Matrix4().fromArray(array).transpose(); - transforms.push({ - sid: child.getAttribute("sid"), - type: child.nodeName, - obj: matrix2 - }); - break; - case "translate": - case "scale": - array = parseFloats(child.textContent); - vector2 = new Vector3().fromArray(array); - transforms.push({ - sid: child.getAttribute("sid"), - type: child.nodeName, - obj: vector2 - }); - break; - case "rotate": - array = parseFloats(child.textContent); - vector2 = new Vector3().fromArray(array); - const angle = MathUtils.degToRad(array[3]); - transforms.push({ - sid: child.getAttribute("sid"), - type: child.nodeName, - obj: vector2, - angle - }); - break; - } - } - return transforms; - } - function prepareNodes(xml2) { - const elements = xml2.getElementsByTagName("node"); - for (let i = 0; i < elements.length; i++) { - const element = elements[i]; - if (element.hasAttribute("id") === false) element.setAttribute("id", generateId()); - } - } - const matrix = new Matrix4(); - const vector = new Vector3(); - function parseNode(xml2) { - const data = { - name: xml2.getAttribute("name") || "", - type: xml2.getAttribute("type"), - id: xml2.getAttribute("id"), - sid: xml2.getAttribute("sid"), - matrix: new Matrix4(), - nodes: [], - instanceCameras: [], - instanceControllers: [], - instanceLights: [], - instanceGeometries: [], - instanceNodes: [], - transforms: {} - }; - for (let i = 0; i < xml2.childNodes.length; i++) { - const child = xml2.childNodes[i]; - if (child.nodeType !== 1) continue; - let array; - switch (child.nodeName) { - case "node": - data.nodes.push(child.getAttribute("id")); - parseNode(child); - break; - case "instance_camera": - data.instanceCameras.push(parseId(child.getAttribute("url"))); - break; - case "instance_controller": - data.instanceControllers.push(parseNodeInstance(child)); - break; - case "instance_light": - data.instanceLights.push(parseId(child.getAttribute("url"))); - break; - case "instance_geometry": - data.instanceGeometries.push(parseNodeInstance(child)); - break; - case "instance_node": - data.instanceNodes.push(parseId(child.getAttribute("url"))); - break; - case "matrix": - array = parseFloats(child.textContent); - data.matrix.multiply(matrix.fromArray(array).transpose()); - data.transforms[child.getAttribute("sid")] = child.nodeName; - break; - case "translate": - array = parseFloats(child.textContent); - vector.fromArray(array); - data.matrix.multiply(matrix.makeTranslation(vector.x, vector.y, vector.z)); - data.transforms[child.getAttribute("sid")] = child.nodeName; - break; - case "rotate": - array = parseFloats(child.textContent); - const angle = MathUtils.degToRad(array[3]); - data.matrix.multiply(matrix.makeRotationAxis(vector.fromArray(array), angle)); - data.transforms[child.getAttribute("sid")] = child.nodeName; - break; - case "scale": - array = parseFloats(child.textContent); - data.matrix.scale(vector.fromArray(array)); - data.transforms[child.getAttribute("sid")] = child.nodeName; - break; - case "extra": break; - default: console.log(child); - } - } - if (hasNode(data.id)) console.warn("THREE.ColladaLoader: There is already a node with ID %s. Exclude current node from further processing.", data.id); - else library.nodes[data.id] = data; - return data; - } - function parseNodeInstance(xml2) { - const data = { - id: parseId(xml2.getAttribute("url")), - materials: {}, - skeletons: [] - }; - for (let i = 0; i < xml2.childNodes.length; i++) { - const child = xml2.childNodes[i]; - switch (child.nodeName) { - case "bind_material": - const instances = child.getElementsByTagName("instance_material"); - for (let j = 0; j < instances.length; j++) { - const instance = instances[j]; - const symbol = instance.getAttribute("symbol"); - const target = instance.getAttribute("target"); - data.materials[symbol] = parseId(target); - } - break; - case "skeleton": - data.skeletons.push(parseId(child.textContent)); - break; - } - } - return data; - } - function buildSkeleton(skeletons, joints) { - const boneData = []; - const sortedBoneData = []; - let i, j, data; - for (i = 0; i < skeletons.length; i++) { - const skeleton = skeletons[i]; - let root; - if (hasNode(skeleton)) { - root = getNode(skeleton); - buildBoneHierarchy(root, joints, boneData); - } else if (hasVisualScene(skeleton)) { - const children = library.visualScenes[skeleton].children; - for (let j2 = 0; j2 < children.length; j2++) { - const child = children[j2]; - if (child.type === "JOINT") buildBoneHierarchy(getNode(child.id), joints, boneData); - } - } else console.error("THREE.ColladaLoader: Unable to find root bone of skeleton with ID:", skeleton); - } - for (i = 0; i < joints.length; i++) for (j = 0; j < boneData.length; j++) { - data = boneData[j]; - if (data.bone.name === joints[i].name) { - sortedBoneData[i] = data; - data.processed = true; - break; - } - } - for (i = 0; i < boneData.length; i++) { - data = boneData[i]; - if (data.processed === false) { - sortedBoneData.push(data); - data.processed = true; - } - } - const bones = []; - const boneInverses = []; - for (i = 0; i < sortedBoneData.length; i++) { - data = sortedBoneData[i]; - bones.push(data.bone); - boneInverses.push(data.boneInverse); - } - return new Skeleton(bones, boneInverses); - } - function buildBoneHierarchy(root, joints, boneData) { - root.traverse(function(object) { - if (object.isBone === true) { - let boneInverse; - for (let i = 0; i < joints.length; i++) { - const joint = joints[i]; - if (joint.name === object.name) { - boneInverse = joint.boneInverse; - break; - } - } - if (boneInverse === void 0) boneInverse = new Matrix4(); - boneData.push({ - bone: object, - boneInverse, - processed: false - }); - } - }); - } - function buildNode(data) { - const objects = []; - const matrix2 = data.matrix; - const nodes = data.nodes; - const type = data.type; - const instanceCameras = data.instanceCameras; - const instanceControllers = data.instanceControllers; - const instanceLights = data.instanceLights; - const instanceGeometries = data.instanceGeometries; - const instanceNodes = data.instanceNodes; - for (let i = 0, l = nodes.length; i < l; i++) objects.push(getNode(nodes[i])); - for (let i = 0, l = instanceCameras.length; i < l; i++) { - const instanceCamera = getCamera(instanceCameras[i]); - if (instanceCamera !== null) objects.push(instanceCamera.clone()); - } - for (let i = 0, l = instanceControllers.length; i < l; i++) { - const instance = instanceControllers[i]; - const controller = getController(instance.id); - const newObjects = buildObjects(getGeometry(controller.id), instance.materials); - const skeletons = instance.skeletons; - const joints = controller.skin.joints; - const skeleton = buildSkeleton(skeletons, joints); - for (let j = 0, jl = newObjects.length; j < jl; j++) { - const object2 = newObjects[j]; - if (object2.isSkinnedMesh) { - object2.bind(skeleton, controller.skin.bindMatrix); - object2.normalizeSkinWeights(); - } - objects.push(object2); - } - } - for (let i = 0, l = instanceLights.length; i < l; i++) { - const instanceLight = getLight(instanceLights[i]); - if (instanceLight !== null) objects.push(instanceLight.clone()); - } - for (let i = 0, l = instanceGeometries.length; i < l; i++) { - const instance = instanceGeometries[i]; - const newObjects = buildObjects(getGeometry(instance.id), instance.materials); - for (let j = 0, jl = newObjects.length; j < jl; j++) objects.push(newObjects[j]); - } - for (let i = 0, l = instanceNodes.length; i < l; i++) objects.push(getNode(instanceNodes[i]).clone()); - let object; - if (nodes.length === 0 && objects.length === 1) object = objects[0]; - else { - object = type === "JOINT" ? new Bone() : new Group(); - for (let i = 0; i < objects.length; i++) object.add(objects[i]); - } - object.name = type === "JOINT" ? data.sid : data.name; - object.matrix.copy(matrix2); - object.matrix.decompose(object.position, object.quaternion, object.scale); - return object; - } - const fallbackMaterial = new MeshBasicMaterial({ color: 16711935 }); - function resolveMaterialBinding(keys, instanceMaterials) { - const materials = []; - for (let i = 0, l = keys.length; i < l; i++) { - const id = instanceMaterials[keys[i]]; - if (id === void 0) { - console.warn("THREE.ColladaLoader: Material with key %s not found. Apply fallback material.", keys[i]); - materials.push(fallbackMaterial); - } else materials.push(getMaterial(id)); - } - return materials; - } - function buildObjects(geometries, instanceMaterials) { - const objects = []; - for (const type in geometries) { - const geometry = geometries[type]; - const materials = resolveMaterialBinding(geometry.materialKeys, instanceMaterials); - if (materials.length === 0) if (type === "lines" || type === "linestrips") materials.push(new LineBasicMaterial()); - else materials.push(new MeshPhongMaterial()); - const skinning = geometry.data.attributes.skinIndex !== void 0; - const material = materials.length === 1 ? materials[0] : materials; - let object; - switch (type) { - case "lines": - object = new LineSegments(geometry.data, material); - break; - case "linestrips": - object = new Line(geometry.data, material); - break; - case "triangles": - case "polylist": - if (skinning) object = new SkinnedMesh(geometry.data, material); - else object = new Mesh(geometry.data, material); - break; - } - objects.push(object); - } - return objects; - } - function hasNode(id) { - return library.nodes[id] !== void 0; - } - function getNode(id) { - return getBuild(library.nodes[id], buildNode); - } - function parseVisualScene(xml2) { - const data = { - name: xml2.getAttribute("name"), - children: [] - }; - prepareNodes(xml2); - const elements = getElementsByTagName(xml2, "node"); - for (let i = 0; i < elements.length; i++) data.children.push(parseNode(elements[i])); - library.visualScenes[xml2.getAttribute("id")] = data; - } - function buildVisualScene(data) { - const group = new Group(); - group.name = data.name; - const children = data.children; - for (let i = 0; i < children.length; i++) { - const child = children[i]; - group.add(getNode(child.id)); - } - return group; - } - function hasVisualScene(id) { - return library.visualScenes[id] !== void 0; - } - function getVisualScene(id) { - return getBuild(library.visualScenes[id], buildVisualScene); - } - function parseScene(xml2) { - const instance = getElementsByTagName(xml2, "instance_visual_scene")[0]; - return getVisualScene(parseId(instance.getAttribute("url"))); - } - function setupAnimations() { - const clips = library.clips; - if (isEmpty(clips) === true) { - if (isEmpty(library.animations) === false) { - const tracks = []; - for (const id in library.animations) { - const animationTracks = getAnimation(id); - for (let i = 0, l = animationTracks.length; i < l; i++) tracks.push(animationTracks[i]); - } - animations.push(new AnimationClip("default", -1, tracks)); - } - } else for (const id in clips) animations.push(getAnimationClip(id)); - } - function parserErrorToText(parserError2) { - let result = ""; - const stack = [parserError2]; - while (stack.length) { - const node = stack.shift(); - if (node.nodeType === Node.TEXT_NODE) result += node.textContent; - else { - result += "\n"; - stack.push.apply(stack, node.childNodes); - } - } - return result.trim(); - } - if (text.length === 0) return { scene: new Scene() }; - const xml = new DOMParser().parseFromString(text, "application/xml"); - const collada = getElementsByTagName(xml, "COLLADA")[0]; - const parserError = xml.getElementsByTagName("parsererror")[0]; - if (parserError !== void 0) { - const errorElement = getElementsByTagName(parserError, "div")[0]; - let errorText; - if (errorElement) errorText = errorElement.textContent; - else errorText = parserErrorToText(parserError); - console.error("THREE.ColladaLoader: Failed to parse collada file.\n", errorText); - return null; - } - const version = collada.getAttribute("version"); - console.log("THREE.ColladaLoader: File version", version); - const asset = parseAsset(getElementsByTagName(collada, "asset")[0]); - const textureLoader = new TextureLoader(this.manager); - textureLoader.setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin); - let tgaLoader; - if (TGALoader) { - tgaLoader = new TGALoader(this.manager); - tgaLoader.setPath(this.resourcePath || path); - } - const animations = []; - let kinematics = {}; - let count = 0; - const library = { - animations: {}, - clips: {}, - controllers: {}, - images: {}, - effects: {}, - materials: {}, - cameras: {}, - lights: {}, - geometries: {}, - nodes: {}, - visualScenes: {}, - kinematicsModels: {}, - physicsModels: {}, - kinematicsScenes: {} - }; - parseLibrary(collada, "library_animations", "animation", parseAnimation); - parseLibrary(collada, "library_animation_clips", "animation_clip", parseAnimationClip); - parseLibrary(collada, "library_controllers", "controller", parseController); - parseLibrary(collada, "library_images", "image", parseImage); - parseLibrary(collada, "library_effects", "effect", parseEffect); - parseLibrary(collada, "library_materials", "material", parseMaterial); - parseLibrary(collada, "library_cameras", "camera", parseCamera); - parseLibrary(collada, "library_lights", "light", parseLight); - parseLibrary(collada, "library_geometries", "geometry", parseGeometry); - parseLibrary(collada, "library_nodes", "node", parseNode); - parseLibrary(collada, "library_visual_scenes", "visual_scene", parseVisualScene); - parseLibrary(collada, "library_kinematics_models", "kinematics_model", parseKinematicsModel); - parseLibrary(collada, "library_physics_models", "physics_model", parsePhysicsModel); - parseLibrary(collada, "scene", "instance_kinematics_scene", parseKinematicsScene); - buildLibrary(library.animations, buildAnimation); - buildLibrary(library.clips, buildAnimationClip); - buildLibrary(library.controllers, buildController); - buildLibrary(library.images, buildImage); - buildLibrary(library.effects, buildEffect); - buildLibrary(library.materials, buildMaterial); - buildLibrary(library.cameras, buildCamera); - buildLibrary(library.lights, buildLight); - buildLibrary(library.geometries, buildGeometry); - buildLibrary(library.visualScenes, buildVisualScene); - setupAnimations(); - setupKinematics(); - const scene = parseScene(getElementsByTagName(collada, "scene")[0]); - scene.animations = animations; - if (asset.upAxis === "Z_UP") scene.quaternion.setFromEuler(new Euler(-Math.PI / 2, 0, 0)); - scene.scale.multiplyScalar(asset.unit); - return { - get animations() { - console.warn("THREE.ColladaLoader: Please access animations over scene.animations now."); - return animations; - }, - kinematics, - library, - scene - }; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/KMZLoader.js -var KMZLoader = class extends Loader { - constructor(manager) { - super(manager); - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(scope.manager); - loader.setPath(scope.path); - loader.setResponseType("arraybuffer"); - loader.setRequestHeader(scope.requestHeader); - loader.setWithCredentials(scope.withCredentials); - loader.load(url, function(text) { - try { - onLoad(scope.parse(text)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(data) { - function findFile(url) { - for (const path in zip) if (path.substr(-url.length) === url) return zip[path]; - } - const manager = new LoadingManager(); - manager.setURLModifier(function(url) { - const image = findFile(url); - if (image) { - console.log("Loading", url); - const blob = new Blob([image.buffer], { type: "application/octet-stream" }); - return URL.createObjectURL(blob); - } - return url; - }); - const zip = unzipSync(new Uint8Array(data)); - if (zip["doc.kml"]) { - const model = new DOMParser().parseFromString(fflate.strFromU8(zip["doc.kml"]), "application/xml").querySelector("Placemark Model Link href"); - if (model) return new ColladaLoader(manager).parse(fflate.strFromU8(zip[model.textContent])); - } else { - console.warn("KMZLoader: Missing doc.kml file."); - for (const path in zip) if (path.split(".").pop().toLowerCase() === "dae") return new ColladaLoader(manager).parse(fflate.strFromU8(zip[path])); - } - console.error("KMZLoader: Couldn't find .dae file."); - return { scene: new Group() }; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/VRMLoader.js -var VRMLoader = class extends Loader { - constructor(manager) { - super(manager); - this.gltfLoader = new GLTFLoader(manager); - } - load(url, onLoad, onProgress, onError) { - const scope = this; - this.gltfLoader.load(url, function(gltf) { - try { - scope.parse(gltf, onLoad); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - setDRACOLoader(dracoLoader) { - this.gltfLoader.setDRACOLoader(dracoLoader); - return this; - } - parse(gltf, onLoad) { - onLoad(gltf); - } -}; -//#endregion -//#region node_modules/three-stdlib/libs/chevrotain.js -var { CstParser, Lexer, createToken } = /* @__PURE__ */ (() => { - const freeGlobal$1 = typeof global == "object" && global && global.Object === Object && global; - var freeSelf = typeof self == "object" && self && self.Object === Object && self; - const root$1 = freeGlobal$1 || freeSelf || Function("return this")(); - const Symbol$2 = root$1.Symbol; - var objectProto$j = Object.prototype; - var hasOwnProperty$g = objectProto$j.hasOwnProperty; - var nativeObjectToString$1 = objectProto$j.toString; - var symToStringTag$1 = Symbol$2 ? Symbol$2.toStringTag : void 0; - function getRawTag(value) { - var isOwn = hasOwnProperty$g.call(value, symToStringTag$1), tag = value[symToStringTag$1]; - try { - value[symToStringTag$1] = void 0; - var unmasked = true; - } catch (e) {} - var result = nativeObjectToString$1.call(value); - if (unmasked) if (isOwn) value[symToStringTag$1] = tag; - else delete value[symToStringTag$1]; - return result; - } - var nativeObjectToString = Object.prototype.toString; - function objectToString(value) { - return nativeObjectToString.call(value); - } - var nullTag = "[object Null]", undefinedTag = "[object Undefined]"; - var symToStringTag = Symbol$2 ? Symbol$2.toStringTag : void 0; - function baseGetTag(value) { - if (value == null) return value === void 0 ? undefinedTag : nullTag; - return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value); - } - function isObjectLike(value) { - return value != null && typeof value == "object"; - } - var symbolTag$3 = "[object Symbol]"; - function isSymbol(value) { - return typeof value == "symbol" || isObjectLike(value) && baseGetTag(value) == symbolTag$3; - } - function arrayMap(array, iteratee) { - var index = -1, length = array == null ? 0 : array.length, result = Array(length); - while (++index < length) result[index] = iteratee(array[index], index, array); - return result; - } - const isArray$1 = Array.isArray; - var INFINITY$3 = Infinity; - var symbolProto$2 = Symbol$2 ? Symbol$2.prototype : void 0, symbolToString = symbolProto$2 ? symbolProto$2.toString : void 0; - function baseToString(value) { - if (typeof value == "string") return value; - if (isArray$1(value)) return arrayMap(value, baseToString) + ""; - if (isSymbol(value)) return symbolToString ? symbolToString.call(value) : ""; - var result = value + ""; - return result == "0" && 1 / value == -INFINITY$3 ? "-0" : result; - } - var reWhitespace = /\s/; - function trimmedEndIndex(string) { - var index = string.length; - while (index-- && reWhitespace.test(string.charAt(index))); - return index; - } - var reTrimStart = /^\s+/; - function baseTrim(string) { - return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, "") : string; - } - function isObject(value) { - var type = typeof value; - return value != null && (type == "object" || type == "function"); - } - var NAN = NaN; - var reIsBadHex = /^[-+]0x[0-9a-f]+$/i; - var reIsBinary = /^0b[01]+$/i; - var reIsOctal = /^0o[0-7]+$/i; - var freeParseInt = parseInt; - function toNumber(value) { - if (typeof value == "number") return value; - if (isSymbol(value)) return NAN; - if (isObject(value)) { - var other = typeof value.valueOf == "function" ? value.valueOf() : value; - value = isObject(other) ? other + "" : other; - } - if (typeof value != "string") return value === 0 ? value : +value; - value = baseTrim(value); - var isBinary = reIsBinary.test(value); - return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value; - } - var INFINITY$2 = Infinity, MAX_INTEGER = 17976931348623157e292; - function toFinite(value) { - if (!value) return value === 0 ? value : 0; - value = toNumber(value); - if (value === INFINITY$2 || value === -INFINITY$2) return (value < 0 ? -1 : 1) * MAX_INTEGER; - return value === value ? value : 0; - } - function toInteger(value) { - var result = toFinite(value), remainder = result % 1; - return result === result ? remainder ? result - remainder : result : 0; - } - function identity(value) { - return value; - } - var asyncTag = "[object AsyncFunction]", funcTag$2 = "[object Function]", genTag$1 = "[object GeneratorFunction]", proxyTag = "[object Proxy]"; - function isFunction(value) { - if (!isObject(value)) return false; - var tag = baseGetTag(value); - return tag == funcTag$2 || tag == genTag$1 || tag == asyncTag || tag == proxyTag; - } - const coreJsData$1 = root$1["__core-js_shared__"]; - var maskSrcKey = function() { - var uid = /[^.]+$/.exec(coreJsData$1 && coreJsData$1.keys && coreJsData$1.keys.IE_PROTO || ""); - return uid ? "Symbol(src)_1." + uid : ""; - }(); - function isMasked(func) { - return !!maskSrcKey && maskSrcKey in func; - } - var funcToString$1 = Function.prototype.toString; - function toSource(func) { - if (func != null) { - try { - return funcToString$1.call(func); - } catch (e) {} - try { - return func + ""; - } catch (e) {} - } - return ""; - } - var reRegExpChar = /[\\^$.*+?()[\]{}|]/g; - var reIsHostCtor = /^\[object .+?Constructor\]$/; - var funcProto = Function.prototype, objectProto$h = Object.prototype; - var funcToString = funcProto.toString; - var hasOwnProperty$f = objectProto$h.hasOwnProperty; - var reIsNative = RegExp("^" + funcToString.call(hasOwnProperty$f).replace(reRegExpChar, "\\$&").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$"); - function baseIsNative(value) { - if (!isObject(value) || isMasked(value)) return false; - return (isFunction(value) ? reIsNative : reIsHostCtor).test(toSource(value)); - } - function getValue(object, key) { - return object == null ? void 0 : object[key]; - } - function getNative(object, key) { - var value = getValue(object, key); - return baseIsNative(value) ? value : void 0; - } - const WeakMap$1 = getNative(root$1, "WeakMap"); - var objectCreate = Object.create; - const baseCreate$1 = function() { - function object() {} - return function(proto) { - if (!isObject(proto)) return {}; - if (objectCreate) return objectCreate(proto); - object.prototype = proto; - var result = new object(); - object.prototype = void 0; - return result; - }; - }(); - function apply(func, thisArg, args) { - switch (args.length) { - case 0: return func.call(thisArg); - case 1: return func.call(thisArg, args[0]); - case 2: return func.call(thisArg, args[0], args[1]); - case 3: return func.call(thisArg, args[0], args[1], args[2]); - } - return func.apply(thisArg, args); - } - function noop() {} - function copyArray(source, array) { - var index = -1, length = source.length; - array || (array = Array(length)); - while (++index < length) array[index] = source[index]; - return array; - } - var HOT_COUNT = 800, HOT_SPAN = 16; - var nativeNow = Date.now; - function shortOut(func) { - var count = 0, lastCalled = 0; - return function() { - var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled); - lastCalled = stamp; - if (remaining > 0) { - if (++count >= HOT_COUNT) return arguments[0]; - } else count = 0; - return func.apply(void 0, arguments); - }; - } - function constant(value) { - return function() { - return value; - }; - } - const defineProperty$1 = function() { - try { - var func = getNative(Object, "defineProperty"); - func({}, "", {}); - return func; - } catch (e) {} - }(); - const setToString$1 = shortOut(!defineProperty$1 ? identity : function(func, string) { - return defineProperty$1(func, "toString", { - configurable: true, - enumerable: false, - value: constant(string), - writable: true - }); - }); - function arrayEach(array, iteratee) { - var index = -1, length = array == null ? 0 : array.length; - while (++index < length) if (iteratee(array[index], index, array) === false) break; - return array; - } - function baseFindIndex(array, predicate, fromIndex, fromRight) { - var length = array.length, index = fromIndex + (fromRight ? 1 : -1); - while (fromRight ? index-- : ++index < length) if (predicate(array[index], index, array)) return index; - return -1; - } - function baseIsNaN(value) { - return value !== value; - } - function strictIndexOf(array, value, fromIndex) { - var index = fromIndex - 1, length = array.length; - while (++index < length) if (array[index] === value) return index; - return -1; - } - function baseIndexOf(array, value, fromIndex) { - return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex); - } - function arrayIncludes(array, value) { - return !!(array == null ? 0 : array.length) && baseIndexOf(array, value, 0) > -1; - } - var MAX_SAFE_INTEGER$1 = 9007199254740991; - var reIsUint = /^(?:0|[1-9]\d*)$/; - function isIndex(value, length) { - var type = typeof value; - length = length == null ? MAX_SAFE_INTEGER$1 : length; - return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length; - } - function baseAssignValue(object, key, value) { - if (key == "__proto__" && defineProperty$1) defineProperty$1(object, key, { - configurable: true, - enumerable: true, - value, - writable: true - }); - else object[key] = value; - } - function eq(value, other) { - return value === other || value !== value && other !== other; - } - var hasOwnProperty$e = Object.prototype.hasOwnProperty; - function assignValue(object, key, value) { - var objValue = object[key]; - if (!(hasOwnProperty$e.call(object, key) && eq(objValue, value)) || value === void 0 && !(key in object)) baseAssignValue(object, key, value); - } - function copyObject(source, props, object, customizer) { - var isNew = !object; - object || (object = {}); - var index = -1, length = props.length; - while (++index < length) { - var key = props[index]; - var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0; - if (newValue === void 0) newValue = source[key]; - if (isNew) baseAssignValue(object, key, newValue); - else assignValue(object, key, newValue); - } - return object; - } - var nativeMax$3 = Math.max; - function overRest(func, start, transform) { - start = nativeMax$3(start === void 0 ? func.length - 1 : start, 0); - return function() { - var args = arguments, index = -1, length = nativeMax$3(args.length - start, 0), array = Array(length); - while (++index < length) array[index] = args[start + index]; - index = -1; - var otherArgs = Array(start + 1); - while (++index < start) otherArgs[index] = args[index]; - otherArgs[start] = transform(array); - return apply(func, this, otherArgs); - }; - } - function baseRest(func, start) { - return setToString$1(overRest(func, start, identity), func + ""); - } - var MAX_SAFE_INTEGER = 9007199254740991; - function isLength(value) { - return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } - function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); - } - function isIterateeCall(value, index, object) { - if (!isObject(object)) return false; - var type = typeof index; - if (type == "number" ? isArrayLike(object) && isIndex(index, object.length) : type == "string" && index in object) return eq(object[index], value); - return false; - } - function createAssigner(assigner) { - return baseRest(function(object, sources) { - var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0; - customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : void 0; - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - customizer = length < 3 ? void 0 : customizer; - length = 1; - } - object = Object(object); - while (++index < length) { - var source = sources[index]; - if (source) assigner(object, source, index, customizer); - } - return object; - }); - } - var objectProto$f = Object.prototype; - function isPrototype(value) { - var Ctor = value && value.constructor; - return value === (typeof Ctor == "function" && Ctor.prototype || objectProto$f); - } - function baseTimes(n, iteratee) { - var index = -1, result = Array(n); - while (++index < n) result[index] = iteratee(index); - return result; - } - var argsTag$3 = "[object Arguments]"; - function baseIsArguments(value) { - return isObjectLike(value) && baseGetTag(value) == argsTag$3; - } - var objectProto$e = Object.prototype; - var hasOwnProperty$d = objectProto$e.hasOwnProperty; - var propertyIsEnumerable$1 = objectProto$e.propertyIsEnumerable; - const isArguments$1 = baseIsArguments(function() { - return arguments; - }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty$d.call(value, "callee") && !propertyIsEnumerable$1.call(value, "callee"); - }; - function stubFalse() { - return false; - } - var freeExports$2 = typeof exports == "object" && exports && !exports.nodeType && exports; - var freeModule$2 = freeExports$2 && typeof module == "object" && module && !module.nodeType && module; - var Buffer$1 = freeModule$2 && freeModule$2.exports === freeExports$2 ? root$1.Buffer : void 0; - const isBuffer$1 = (Buffer$1 ? Buffer$1.isBuffer : void 0) || stubFalse; - var argsTag$2 = "[object Arguments]", arrayTag$2 = "[object Array]", boolTag$3 = "[object Boolean]", dateTag$3 = "[object Date]", errorTag$2 = "[object Error]", funcTag$1 = "[object Function]", mapTag$6 = "[object Map]", numberTag$3 = "[object Number]", objectTag$3 = "[object Object]", regexpTag$4 = "[object RegExp]", setTag$6 = "[object Set]", stringTag$4 = "[object String]", weakMapTag$2 = "[object WeakMap]"; - var arrayBufferTag$3 = "[object ArrayBuffer]", dataViewTag$4 = "[object DataView]", float32Tag$2 = "[object Float32Array]", float64Tag$2 = "[object Float64Array]", int8Tag$2 = "[object Int8Array]", int16Tag$2 = "[object Int16Array]", int32Tag$2 = "[object Int32Array]", uint8Tag$2 = "[object Uint8Array]", uint8ClampedTag$2 = "[object Uint8ClampedArray]", uint16Tag$2 = "[object Uint16Array]", uint32Tag$2 = "[object Uint32Array]"; - var typedArrayTags = {}; - typedArrayTags[float32Tag$2] = typedArrayTags[float64Tag$2] = typedArrayTags[int8Tag$2] = typedArrayTags[int16Tag$2] = typedArrayTags[int32Tag$2] = typedArrayTags[uint8Tag$2] = typedArrayTags[uint8ClampedTag$2] = typedArrayTags[uint16Tag$2] = typedArrayTags[uint32Tag$2] = true; - typedArrayTags[argsTag$2] = typedArrayTags[arrayTag$2] = typedArrayTags[arrayBufferTag$3] = typedArrayTags[boolTag$3] = typedArrayTags[dataViewTag$4] = typedArrayTags[dateTag$3] = typedArrayTags[errorTag$2] = typedArrayTags[funcTag$1] = typedArrayTags[mapTag$6] = typedArrayTags[numberTag$3] = typedArrayTags[objectTag$3] = typedArrayTags[regexpTag$4] = typedArrayTags[setTag$6] = typedArrayTags[stringTag$4] = typedArrayTags[weakMapTag$2] = false; - function baseIsTypedArray(value) { - return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)]; - } - function baseUnary(func) { - return function(value) { - return func(value); - }; - } - var freeExports$1 = typeof exports == "object" && exports && !exports.nodeType && exports; - var freeModule$1 = freeExports$1 && typeof module == "object" && module && !module.nodeType && module; - var freeProcess = freeModule$1 && freeModule$1.exports === freeExports$1 && freeGlobal$1.process; - const nodeUtil$1 = function() { - try { - var types = freeModule$1 && freeModule$1.require && freeModule$1.require("util").types; - if (types) return types; - return freeProcess && freeProcess.binding && freeProcess.binding("util"); - } catch (e) {} - }(); - var nodeIsTypedArray = nodeUtil$1 && nodeUtil$1.isTypedArray; - const isTypedArray$1 = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - var hasOwnProperty$c = Object.prototype.hasOwnProperty; - function arrayLikeKeys(value, inherited) { - var isArr = isArray$1(value), isArg = !isArr && isArguments$1(value), isBuff = !isArr && !isArg && isBuffer$1(value), isType = !isArr && !isArg && !isBuff && isTypedArray$1(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length; - for (var key in value) if ((inherited || hasOwnProperty$c.call(value, key)) && !(skipIndexes && (key == "length" || isBuff && (key == "offset" || key == "parent") || isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || isIndex(key, length)))) result.push(key); - return result; - } - function overArg(func, transform) { - return function(arg) { - return func(transform(arg)); - }; - } - const nativeKeys$1 = overArg(Object.keys, Object); - var hasOwnProperty$b = Object.prototype.hasOwnProperty; - function baseKeys(object) { - if (!isPrototype(object)) return nativeKeys$1(object); - var result = []; - for (var key in Object(object)) if (hasOwnProperty$b.call(object, key) && key != "constructor") result.push(key); - return result; - } - function keys(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); - } - var hasOwnProperty$a = Object.prototype.hasOwnProperty; - const assign$1 = createAssigner(function(object, source) { - if (isPrototype(source) || isArrayLike(source)) { - copyObject(source, keys(source), object); - return; - } - for (var key in source) if (hasOwnProperty$a.call(source, key)) assignValue(object, key, source[key]); - }); - function nativeKeysIn(object) { - var result = []; - if (object != null) for (var key in Object(object)) result.push(key); - return result; - } - var hasOwnProperty$9 = Object.prototype.hasOwnProperty; - function baseKeysIn(object) { - if (!isObject(object)) return nativeKeysIn(object); - var isProto = isPrototype(object), result = []; - for (var key in object) if (!(key == "constructor" && (isProto || !hasOwnProperty$9.call(object, key)))) result.push(key); - return result; - } - function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); - } - var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/, reIsPlainProp = /^\w*$/; - function isKey(value, object) { - if (isArray$1(value)) return false; - var type = typeof value; - if (type == "number" || type == "symbol" || type == "boolean" || value == null || isSymbol(value)) return true; - return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object); - } - const nativeCreate$1 = getNative(Object, "create"); - function hashClear() { - this.__data__ = nativeCreate$1 ? nativeCreate$1(null) : {}; - this.size = 0; - } - function hashDelete(key) { - var result = this.has(key) && delete this.__data__[key]; - this.size -= result ? 1 : 0; - return result; - } - var HASH_UNDEFINED$2 = "__lodash_hash_undefined__"; - var hasOwnProperty$8 = Object.prototype.hasOwnProperty; - function hashGet(key) { - var data = this.__data__; - if (nativeCreate$1) { - var result = data[key]; - return result === HASH_UNDEFINED$2 ? void 0 : result; - } - return hasOwnProperty$8.call(data, key) ? data[key] : void 0; - } - var hasOwnProperty$7 = Object.prototype.hasOwnProperty; - function hashHas(key) { - var data = this.__data__; - return nativeCreate$1 ? data[key] !== void 0 : hasOwnProperty$7.call(data, key); - } - var HASH_UNDEFINED$1 = "__lodash_hash_undefined__"; - function hashSet(key, value) { - var data = this.__data__; - this.size += this.has(key) ? 0 : 1; - data[key] = nativeCreate$1 && value === void 0 ? HASH_UNDEFINED$1 : value; - return this; - } - function Hash(entries) { - var index = -1, length = entries == null ? 0 : entries.length; - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - Hash.prototype.clear = hashClear; - Hash.prototype["delete"] = hashDelete; - Hash.prototype.get = hashGet; - Hash.prototype.has = hashHas; - Hash.prototype.set = hashSet; - function listCacheClear() { - this.__data__ = []; - this.size = 0; - } - function assocIndexOf(array, key) { - var length = array.length; - while (length--) if (eq(array[length][0], key)) return length; - return -1; - } - var splice = Array.prototype.splice; - function listCacheDelete(key) { - var data = this.__data__, index = assocIndexOf(data, key); - if (index < 0) return false; - if (index == data.length - 1) data.pop(); - else splice.call(data, index, 1); - --this.size; - return true; - } - function listCacheGet(key) { - var data = this.__data__, index = assocIndexOf(data, key); - return index < 0 ? void 0 : data[index][1]; - } - function listCacheHas(key) { - return assocIndexOf(this.__data__, key) > -1; - } - function listCacheSet(key, value) { - var data = this.__data__, index = assocIndexOf(data, key); - if (index < 0) { - ++this.size; - data.push([key, value]); - } else data[index][1] = value; - return this; - } - function ListCache(entries) { - var index = -1, length = entries == null ? 0 : entries.length; - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - ListCache.prototype.clear = listCacheClear; - ListCache.prototype["delete"] = listCacheDelete; - ListCache.prototype.get = listCacheGet; - ListCache.prototype.has = listCacheHas; - ListCache.prototype.set = listCacheSet; - const Map$2 = getNative(root$1, "Map"); - function mapCacheClear() { - this.size = 0; - this.__data__ = { - hash: new Hash(), - map: new (Map$2 || ListCache)(), - string: new Hash() - }; - } - function isKeyable(value) { - var type = typeof value; - return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null; - } - function getMapData(map2, key) { - var data = map2.__data__; - return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map; - } - function mapCacheDelete(key) { - var result = getMapData(this, key)["delete"](key); - this.size -= result ? 1 : 0; - return result; - } - function mapCacheGet(key) { - return getMapData(this, key).get(key); - } - function mapCacheHas(key) { - return getMapData(this, key).has(key); - } - function mapCacheSet(key, value) { - var data = getMapData(this, key), size = data.size; - data.set(key, value); - this.size += data.size == size ? 0 : 1; - return this; - } - function MapCache(entries) { - var index = -1, length = entries == null ? 0 : entries.length; - this.clear(); - while (++index < length) { - var entry = entries[index]; - this.set(entry[0], entry[1]); - } - } - MapCache.prototype.clear = mapCacheClear; - MapCache.prototype["delete"] = mapCacheDelete; - MapCache.prototype.get = mapCacheGet; - MapCache.prototype.has = mapCacheHas; - MapCache.prototype.set = mapCacheSet; - var FUNC_ERROR_TEXT$1 = "Expected a function"; - function memoize(func, resolver) { - if (typeof func != "function" || resolver != null && typeof resolver != "function") throw new TypeError(FUNC_ERROR_TEXT$1); - var memoized = function() { - var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache; - if (cache.has(key)) return cache.get(key); - var result = func.apply(this, args); - memoized.cache = cache.set(key, result) || cache; - return result; - }; - memoized.cache = new (memoize.Cache || MapCache)(); - return memoized; - } - memoize.Cache = MapCache; - var MAX_MEMOIZE_SIZE = 500; - function memoizeCapped(func) { - var result = memoize(func, function(key) { - if (cache.size === MAX_MEMOIZE_SIZE) cache.clear(); - return key; - }); - var cache = result.cache; - return result; - } - var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g; - var reEscapeChar = /\\(\\)?/g; - const stringToPath$1 = memoizeCapped(function(string) { - var result = []; - if (string.charCodeAt(0) === 46) result.push(""); - string.replace(rePropName, function(match, number, quote, subString) { - result.push(quote ? subString.replace(reEscapeChar, "$1") : number || match); - }); - return result; - }); - function toString(value) { - return value == null ? "" : baseToString(value); - } - function castPath(value, object) { - if (isArray$1(value)) return value; - return isKey(value, object) ? [value] : stringToPath$1(toString(value)); - } - var INFINITY$1 = Infinity; - function toKey(value) { - if (typeof value == "string" || isSymbol(value)) return value; - var result = value + ""; - return result == "0" && 1 / value == -INFINITY$1 ? "-0" : result; - } - function baseGet(object, path) { - path = castPath(path, object); - var index = 0, length = path.length; - while (object != null && index < length) object = object[toKey(path[index++])]; - return index && index == length ? object : void 0; - } - function get(object, path, defaultValue) { - var result = object == null ? void 0 : baseGet(object, path); - return result === void 0 ? defaultValue : result; - } - function arrayPush(array, values2) { - var index = -1, length = values2.length, offset = array.length; - while (++index < length) array[offset + index] = values2[index]; - return array; - } - var spreadableSymbol = Symbol$2 ? Symbol$2.isConcatSpreadable : void 0; - function isFlattenable(value) { - return isArray$1(value) || isArguments$1(value) || !!(spreadableSymbol && value && value[spreadableSymbol]); - } - function baseFlatten(array, depth, predicate, isStrict, result) { - var index = -1, length = array.length; - predicate || (predicate = isFlattenable); - result || (result = []); - while (++index < length) { - var value = array[index]; - if (depth > 0 && predicate(value)) if (depth > 1) baseFlatten(value, depth - 1, predicate, isStrict, result); - else arrayPush(result, value); - else if (!isStrict) result[result.length] = value; - } - return result; - } - function flatten(array) { - return (array == null ? 0 : array.length) ? baseFlatten(array, 1) : []; - } - const getPrototype$1 = overArg(Object.getPrototypeOf, Object); - function baseSlice(array, start, end) { - var index = -1, length = array.length; - if (start < 0) start = -start > length ? 0 : length + start; - end = end > length ? length : end; - if (end < 0) end += length; - length = start > end ? 0 : end - start >>> 0; - start >>>= 0; - var result = Array(length); - while (++index < length) result[index] = array[index + start]; - return result; - } - function arrayReduce(array, iteratee, accumulator, initAccum) { - var index = -1, length = array == null ? 0 : array.length; - if (initAccum && length) accumulator = array[++index]; - while (++index < length) accumulator = iteratee(accumulator, array[index], index, array); - return accumulator; - } - function stackClear() { - this.__data__ = new ListCache(); - this.size = 0; - } - function stackDelete(key) { - var data = this.__data__, result = data["delete"](key); - this.size = data.size; - return result; - } - function stackGet(key) { - return this.__data__.get(key); - } - function stackHas(key) { - return this.__data__.has(key); - } - var LARGE_ARRAY_SIZE$2 = 200; - function stackSet(key, value) { - var data = this.__data__; - if (data instanceof ListCache) { - var pairs = data.__data__; - if (!Map$2 || pairs.length < LARGE_ARRAY_SIZE$2 - 1) { - pairs.push([key, value]); - this.size = ++data.size; - return this; - } - data = this.__data__ = new MapCache(pairs); - } - data.set(key, value); - this.size = data.size; - return this; - } - function Stack(entries) { - var data = this.__data__ = new ListCache(entries); - this.size = data.size; - } - Stack.prototype.clear = stackClear; - Stack.prototype["delete"] = stackDelete; - Stack.prototype.get = stackGet; - Stack.prototype.has = stackHas; - Stack.prototype.set = stackSet; - function baseAssign(object, source) { - return object && copyObject(source, keys(source), object); - } - function baseAssignIn(object, source) { - return object && copyObject(source, keysIn(source), object); - } - var freeExports = typeof exports == "object" && exports && !exports.nodeType && exports; - var freeModule = freeExports && typeof module == "object" && module && !module.nodeType && module; - var Buffer = freeModule && freeModule.exports === freeExports ? root$1.Buffer : void 0, allocUnsafe = Buffer ? Buffer.allocUnsafe : void 0; - function cloneBuffer(buffer, isDeep) { - if (isDeep) return buffer.slice(); - var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length); - buffer.copy(result); - return result; - } - function arrayFilter(array, predicate) { - var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; - while (++index < length) { - var value = array[index]; - if (predicate(value, index, array)) result[resIndex++] = value; - } - return result; - } - function stubArray() { - return []; - } - var propertyIsEnumerable = Object.prototype.propertyIsEnumerable; - var nativeGetSymbols$1 = Object.getOwnPropertySymbols; - const getSymbols$1 = !nativeGetSymbols$1 ? stubArray : function(object) { - if (object == null) return []; - object = Object(object); - return arrayFilter(nativeGetSymbols$1(object), function(symbol) { - return propertyIsEnumerable.call(object, symbol); - }); - }; - function copySymbols(source, object) { - return copyObject(source, getSymbols$1(source), object); - } - const getSymbolsIn$1 = !Object.getOwnPropertySymbols ? stubArray : function(object) { - var result = []; - while (object) { - arrayPush(result, getSymbols$1(object)); - object = getPrototype$1(object); - } - return result; - }; - function copySymbolsIn(source, object) { - return copyObject(source, getSymbolsIn$1(source), object); - } - function baseGetAllKeys(object, keysFunc, symbolsFunc) { - var result = keysFunc(object); - return isArray$1(object) ? result : arrayPush(result, symbolsFunc(object)); - } - function getAllKeys(object) { - return baseGetAllKeys(object, keys, getSymbols$1); - } - function getAllKeysIn(object) { - return baseGetAllKeys(object, keysIn, getSymbolsIn$1); - } - const DataView$1 = getNative(root$1, "DataView"); - const Promise$2 = getNative(root$1, "Promise"); - const Set$1 = getNative(root$1, "Set"); - var mapTag$5 = "[object Map]", objectTag$2 = "[object Object]", promiseTag = "[object Promise]", setTag$5 = "[object Set]", weakMapTag$1 = "[object WeakMap]"; - var dataViewTag$3 = "[object DataView]"; - var dataViewCtorString = toSource(DataView$1), mapCtorString = toSource(Map$2), promiseCtorString = toSource(Promise$2), setCtorString = toSource(Set$1), weakMapCtorString = toSource(WeakMap$1); - var getTag = baseGetTag; - if (DataView$1 && getTag(new DataView$1(/* @__PURE__ */ new ArrayBuffer(1))) != dataViewTag$3 || Map$2 && getTag(new Map$2()) != mapTag$5 || Promise$2 && getTag(Promise$2.resolve()) != promiseTag || Set$1 && getTag(new Set$1()) != setTag$5 || WeakMap$1 && getTag(new WeakMap$1()) != weakMapTag$1) getTag = function(value) { - var result = baseGetTag(value), Ctor = result == objectTag$2 ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : ""; - if (ctorString) switch (ctorString) { - case dataViewCtorString: return dataViewTag$3; - case mapCtorString: return mapTag$5; - case promiseCtorString: return promiseTag; - case setCtorString: return setTag$5; - case weakMapCtorString: return weakMapTag$1; - } - return result; - }; - const getTag$1 = getTag; - var hasOwnProperty$6 = Object.prototype.hasOwnProperty; - function initCloneArray(array) { - var length = array.length, result = new array.constructor(length); - if (length && typeof array[0] == "string" && hasOwnProperty$6.call(array, "index")) { - result.index = array.index; - result.input = array.input; - } - return result; - } - const Uint8Array$1 = root$1.Uint8Array; - function cloneArrayBuffer(arrayBuffer) { - var result = new arrayBuffer.constructor(arrayBuffer.byteLength); - new Uint8Array$1(result).set(new Uint8Array$1(arrayBuffer)); - return result; - } - function cloneDataView(dataView, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer; - return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength); - } - var reFlags = /\w*$/; - function cloneRegExp(regexp) { - var result = new regexp.constructor(regexp.source, reFlags.exec(regexp)); - result.lastIndex = regexp.lastIndex; - return result; - } - var symbolProto$1 = Symbol$2 ? Symbol$2.prototype : void 0, symbolValueOf$1 = symbolProto$1 ? symbolProto$1.valueOf : void 0; - function cloneSymbol(symbol) { - return symbolValueOf$1 ? Object(symbolValueOf$1.call(symbol)) : {}; - } - function cloneTypedArray(typedArray, isDeep) { - var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer; - return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length); - } - var boolTag$2 = "[object Boolean]", dateTag$2 = "[object Date]", mapTag$4 = "[object Map]", numberTag$2 = "[object Number]", regexpTag$3 = "[object RegExp]", setTag$4 = "[object Set]", stringTag$3 = "[object String]", symbolTag$2 = "[object Symbol]"; - var arrayBufferTag$2 = "[object ArrayBuffer]", dataViewTag$2 = "[object DataView]", float32Tag$1 = "[object Float32Array]", float64Tag$1 = "[object Float64Array]", int8Tag$1 = "[object Int8Array]", int16Tag$1 = "[object Int16Array]", int32Tag$1 = "[object Int32Array]", uint8Tag$1 = "[object Uint8Array]", uint8ClampedTag$1 = "[object Uint8ClampedArray]", uint16Tag$1 = "[object Uint16Array]", uint32Tag$1 = "[object Uint32Array]"; - function initCloneByTag(object, tag, isDeep) { - var Ctor = object.constructor; - switch (tag) { - case arrayBufferTag$2: return cloneArrayBuffer(object); - case boolTag$2: - case dateTag$2: return new Ctor(+object); - case dataViewTag$2: return cloneDataView(object, isDeep); - case float32Tag$1: - case float64Tag$1: - case int8Tag$1: - case int16Tag$1: - case int32Tag$1: - case uint8Tag$1: - case uint8ClampedTag$1: - case uint16Tag$1: - case uint32Tag$1: return cloneTypedArray(object, isDeep); - case mapTag$4: return new Ctor(); - case numberTag$2: - case stringTag$3: return new Ctor(object); - case regexpTag$3: return cloneRegExp(object); - case setTag$4: return new Ctor(); - case symbolTag$2: return cloneSymbol(object); - } - } - function initCloneObject(object) { - return typeof object.constructor == "function" && !isPrototype(object) ? baseCreate$1(getPrototype$1(object)) : {}; - } - var mapTag$3 = "[object Map]"; - function baseIsMap(value) { - return isObjectLike(value) && getTag$1(value) == mapTag$3; - } - var nodeIsMap = nodeUtil$1 && nodeUtil$1.isMap; - const isMap$1 = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; - var setTag$3 = "[object Set]"; - function baseIsSet(value) { - return isObjectLike(value) && getTag$1(value) == setTag$3; - } - var nodeIsSet = nodeUtil$1 && nodeUtil$1.isSet; - const isSet$1 = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; - var CLONE_DEEP_FLAG = 1, CLONE_FLAT_FLAG = 2, CLONE_SYMBOLS_FLAG$1 = 4; - var argsTag$1 = "[object Arguments]", arrayTag$1 = "[object Array]", boolTag$1 = "[object Boolean]", dateTag$1 = "[object Date]", errorTag$1 = "[object Error]", funcTag = "[object Function]", genTag = "[object GeneratorFunction]", mapTag$2 = "[object Map]", numberTag$1 = "[object Number]", objectTag$1 = "[object Object]", regexpTag$2 = "[object RegExp]", setTag$2 = "[object Set]", stringTag$2 = "[object String]", symbolTag$1 = "[object Symbol]", weakMapTag = "[object WeakMap]"; - var arrayBufferTag$1 = "[object ArrayBuffer]", dataViewTag$1 = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]"; - var cloneableTags = {}; - cloneableTags[argsTag$1] = cloneableTags[arrayTag$1] = cloneableTags[arrayBufferTag$1] = cloneableTags[dataViewTag$1] = cloneableTags[boolTag$1] = cloneableTags[dateTag$1] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag$2] = cloneableTags[numberTag$1] = cloneableTags[objectTag$1] = cloneableTags[regexpTag$2] = cloneableTags[setTag$2] = cloneableTags[stringTag$2] = cloneableTags[symbolTag$1] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true; - cloneableTags[errorTag$1] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false; - function baseClone(value, bitmask, customizer, key, object, stack) { - var result, isDeep = bitmask & CLONE_DEEP_FLAG, isFlat = bitmask & CLONE_FLAT_FLAG, isFull = bitmask & CLONE_SYMBOLS_FLAG$1; - if (customizer) result = object ? customizer(value, key, object, stack) : customizer(value); - if (result !== void 0) return result; - if (!isObject(value)) return value; - var isArr = isArray$1(value); - if (isArr) { - result = initCloneArray(value); - if (!isDeep) return copyArray(value, result); - } else { - var tag = getTag$1(value), isFunc = tag == funcTag || tag == genTag; - if (isBuffer$1(value)) return cloneBuffer(value, isDeep); - if (tag == objectTag$1 || tag == argsTag$1 || isFunc && !object) { - result = isFlat || isFunc ? {} : initCloneObject(value); - if (!isDeep) return isFlat ? copySymbolsIn(value, baseAssignIn(result, value)) : copySymbols(value, baseAssign(result, value)); - } else { - if (!cloneableTags[tag]) return object ? value : {}; - result = initCloneByTag(value, tag, isDeep); - } - } - stack || (stack = new Stack()); - var stacked = stack.get(value); - if (stacked) return stacked; - stack.set(value, result); - if (isSet$1(value)) value.forEach(function(subValue) { - result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack)); - }); - else if (isMap$1(value)) value.forEach(function(subValue, key2) { - result.set(key2, baseClone(subValue, bitmask, customizer, key2, value, stack)); - }); - var props = isArr ? void 0 : (isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys)(value); - arrayEach(props || value, function(subValue, key2) { - if (props) { - key2 = subValue; - subValue = value[key2]; - } - assignValue(result, key2, baseClone(subValue, bitmask, customizer, key2, value, stack)); - }); - return result; - } - var CLONE_SYMBOLS_FLAG = 4; - function clone(value) { - return baseClone(value, CLONE_SYMBOLS_FLAG); - } - function compact(array) { - var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = []; - while (++index < length) { - var value = array[index]; - if (value) result[resIndex++] = value; - } - return result; - } - var HASH_UNDEFINED = "__lodash_hash_undefined__"; - function setCacheAdd(value) { - this.__data__.set(value, HASH_UNDEFINED); - return this; - } - function setCacheHas(value) { - return this.__data__.has(value); - } - function SetCache(values2) { - var index = -1, length = values2 == null ? 0 : values2.length; - this.__data__ = new MapCache(); - while (++index < length) this.add(values2[index]); - } - SetCache.prototype.add = SetCache.prototype.push = setCacheAdd; - SetCache.prototype.has = setCacheHas; - function arraySome(array, predicate) { - var index = -1, length = array == null ? 0 : array.length; - while (++index < length) if (predicate(array[index], index, array)) return true; - return false; - } - function cacheHas(cache, key) { - return cache.has(key); - } - var COMPARE_PARTIAL_FLAG$5 = 1, COMPARE_UNORDERED_FLAG$3 = 2; - function equalArrays(array, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG$5, arrLength = array.length, othLength = other.length; - if (arrLength != othLength && !(isPartial && othLength > arrLength)) return false; - var arrStacked = stack.get(array); - var othStacked = stack.get(other); - if (arrStacked && othStacked) return arrStacked == other && othStacked == array; - var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG$3 ? new SetCache() : void 0; - stack.set(array, other); - stack.set(other, array); - while (++index < arrLength) { - var arrValue = array[index], othValue = other[index]; - if (customizer) var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack); - if (compared !== void 0) { - if (compared) continue; - result = false; - break; - } - if (seen) { - if (!arraySome(other, function(othValue2, othIndex) { - if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) return seen.push(othIndex); - })) { - result = false; - break; - } - } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) { - result = false; - break; - } - } - stack["delete"](array); - stack["delete"](other); - return result; - } - function mapToArray(map2) { - var index = -1, result = Array(map2.size); - map2.forEach(function(value, key) { - result[++index] = [key, value]; - }); - return result; - } - function setToArray(set) { - var index = -1, result = Array(set.size); - set.forEach(function(value) { - result[++index] = value; - }); - return result; - } - var COMPARE_PARTIAL_FLAG$4 = 1, COMPARE_UNORDERED_FLAG$2 = 2; - var boolTag = "[object Boolean]", dateTag = "[object Date]", errorTag = "[object Error]", mapTag$1 = "[object Map]", numberTag = "[object Number]", regexpTag$1 = "[object RegExp]", setTag$1 = "[object Set]", stringTag$1 = "[object String]", symbolTag = "[object Symbol]"; - var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]"; - var symbolProto = Symbol$2 ? Symbol$2.prototype : void 0, symbolValueOf = symbolProto ? symbolProto.valueOf : void 0; - function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) { - switch (tag) { - case dataViewTag: - if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) return false; - object = object.buffer; - other = other.buffer; - case arrayBufferTag: - if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array$1(object), new Uint8Array$1(other))) return false; - return true; - case boolTag: - case dateTag: - case numberTag: return eq(+object, +other); - case errorTag: return object.name == other.name && object.message == other.message; - case regexpTag$1: - case stringTag$1: return object == other + ""; - case mapTag$1: var convert = mapToArray; - case setTag$1: - var isPartial = bitmask & COMPARE_PARTIAL_FLAG$4; - convert || (convert = setToArray); - if (object.size != other.size && !isPartial) return false; - var stacked = stack.get(object); - if (stacked) return stacked == other; - bitmask |= COMPARE_UNORDERED_FLAG$2; - stack.set(object, other); - var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack); - stack["delete"](object); - return result; - case symbolTag: if (symbolValueOf) return symbolValueOf.call(object) == symbolValueOf.call(other); - } - return false; - } - var COMPARE_PARTIAL_FLAG$3 = 1; - var hasOwnProperty$5 = Object.prototype.hasOwnProperty; - function equalObjects(object, other, bitmask, customizer, equalFunc, stack) { - var isPartial = bitmask & COMPARE_PARTIAL_FLAG$3, objProps = getAllKeys(object), objLength = objProps.length; - if (objLength != getAllKeys(other).length && !isPartial) return false; - var index = objLength; - while (index--) { - var key = objProps[index]; - if (!(isPartial ? key in other : hasOwnProperty$5.call(other, key))) return false; - } - var objStacked = stack.get(object); - var othStacked = stack.get(other); - if (objStacked && othStacked) return objStacked == other && othStacked == object; - var result = true; - stack.set(object, other); - stack.set(other, object); - var skipCtor = isPartial; - while (++index < objLength) { - key = objProps[index]; - var objValue = object[key], othValue = other[key]; - if (customizer) var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack); - if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) { - result = false; - break; - } - skipCtor || (skipCtor = key == "constructor"); - } - if (result && !skipCtor) { - var objCtor = object.constructor, othCtor = other.constructor; - if (objCtor != othCtor && "constructor" in object && "constructor" in other && !(typeof objCtor == "function" && objCtor instanceof objCtor && typeof othCtor == "function" && othCtor instanceof othCtor)) result = false; - } - stack["delete"](object); - stack["delete"](other); - return result; - } - var COMPARE_PARTIAL_FLAG$2 = 1; - var argsTag = "[object Arguments]", arrayTag = "[object Array]", objectTag = "[object Object]"; - var hasOwnProperty$4 = Object.prototype.hasOwnProperty; - function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) { - var objIsArr = isArray$1(object), othIsArr = isArray$1(other), objTag = objIsArr ? arrayTag : getTag$1(object), othTag = othIsArr ? arrayTag : getTag$1(other); - objTag = objTag == argsTag ? objectTag : objTag; - othTag = othTag == argsTag ? objectTag : othTag; - var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag; - if (isSameTag && isBuffer$1(object)) { - if (!isBuffer$1(other)) return false; - objIsArr = true; - objIsObj = false; - } - if (isSameTag && !objIsObj) { - stack || (stack = new Stack()); - return objIsArr || isTypedArray$1(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack); - } - if (!(bitmask & COMPARE_PARTIAL_FLAG$2)) { - var objIsWrapped = objIsObj && hasOwnProperty$4.call(object, "__wrapped__"), othIsWrapped = othIsObj && hasOwnProperty$4.call(other, "__wrapped__"); - if (objIsWrapped || othIsWrapped) { - var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other; - stack || (stack = new Stack()); - return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack); - } - } - if (!isSameTag) return false; - stack || (stack = new Stack()); - return equalObjects(object, other, bitmask, customizer, equalFunc, stack); - } - function baseIsEqual(value, other, bitmask, customizer, stack) { - if (value === other) return true; - if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) return value !== value && other !== other; - return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack); - } - var COMPARE_PARTIAL_FLAG$1 = 1, COMPARE_UNORDERED_FLAG$1 = 2; - function baseIsMatch(object, source, matchData, customizer) { - var index = matchData.length, length = index, noCustomizer = !customizer; - if (object == null) return !length; - object = Object(object); - while (index--) { - var data = matchData[index]; - if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) return false; - } - while (++index < length) { - data = matchData[index]; - var key = data[0], objValue = object[key], srcValue = data[1]; - if (noCustomizer && data[2]) { - if (objValue === void 0 && !(key in object)) return false; - } else { - var stack = new Stack(); - if (customizer) var result = customizer(objValue, srcValue, key, object, source, stack); - if (!(result === void 0 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG$1 | COMPARE_UNORDERED_FLAG$1, customizer, stack) : result)) return false; - } - } - return true; - } - function isStrictComparable(value) { - return value === value && !isObject(value); - } - function getMatchData(object) { - var result = keys(object), length = result.length; - while (length--) { - var key = result[length], value = object[key]; - result[length] = [ - key, - value, - isStrictComparable(value) - ]; - } - return result; - } - function matchesStrictComparable(key, srcValue) { - return function(object) { - if (object == null) return false; - return object[key] === srcValue && (srcValue !== void 0 || key in Object(object)); - }; - } - function baseMatches(source) { - var matchData = getMatchData(source); - if (matchData.length == 1 && matchData[0][2]) return matchesStrictComparable(matchData[0][0], matchData[0][1]); - return function(object) { - return object === source || baseIsMatch(object, source, matchData); - }; - } - function baseHasIn(object, key) { - return object != null && key in Object(object); - } - function hasPath(object, path, hasFunc) { - path = castPath(path, object); - var index = -1, length = path.length, result = false; - while (++index < length) { - var key = toKey(path[index]); - if (!(result = object != null && hasFunc(object, key))) break; - object = object[key]; - } - if (result || ++index != length) return result; - length = object == null ? 0 : object.length; - return !!length && isLength(length) && isIndex(key, length) && (isArray$1(object) || isArguments$1(object)); - } - function hasIn(object, path) { - return object != null && hasPath(object, path, baseHasIn); - } - var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2; - function baseMatchesProperty(path, srcValue) { - if (isKey(path) && isStrictComparable(srcValue)) return matchesStrictComparable(toKey(path), srcValue); - return function(object) { - var objValue = get(object, path); - return objValue === void 0 && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG); - }; - } - function baseProperty(key) { - return function(object) { - return object == null ? void 0 : object[key]; - }; - } - function basePropertyDeep(path) { - return function(object) { - return baseGet(object, path); - }; - } - function property(path) { - return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path); - } - function baseIteratee(value) { - if (typeof value == "function") return value; - if (value == null) return identity; - if (typeof value == "object") return isArray$1(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value); - return property(value); - } - function arrayAggregator(array, setter, iteratee, accumulator) { - var index = -1, length = array == null ? 0 : array.length; - while (++index < length) { - var value = array[index]; - setter(accumulator, value, iteratee(value), array); - } - return accumulator; - } - function createBaseFor(fromRight) { - return function(object, iteratee, keysFunc) { - var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length; - while (length--) { - var key = props[fromRight ? length : ++index]; - if (iteratee(iterable[key], key, iterable) === false) break; - } - return object; - }; - } - const baseFor$1 = createBaseFor(); - function baseForOwn(object, iteratee) { - return object && baseFor$1(object, iteratee, keys); - } - function createBaseEach(eachFunc, fromRight) { - return function(collection, iteratee) { - if (collection == null) return collection; - if (!isArrayLike(collection)) return eachFunc(collection, iteratee); - var length = collection.length, index = fromRight ? length : -1, iterable = Object(collection); - while (fromRight ? index-- : ++index < length) if (iteratee(iterable[index], index, iterable) === false) break; - return collection; - }; - } - const baseEach$1 = createBaseEach(baseForOwn); - function baseAggregator(collection, setter, iteratee, accumulator) { - baseEach$1(collection, function(value, key, collection2) { - setter(accumulator, value, iteratee(value), collection2); - }); - return accumulator; - } - function createAggregator(setter, initializer) { - return function(collection, iteratee) { - var func = isArray$1(collection) ? arrayAggregator : baseAggregator, accumulator = initializer ? initializer() : {}; - return func(collection, setter, baseIteratee(iteratee), accumulator); - }; - } - var objectProto$3 = Object.prototype; - var hasOwnProperty$3 = objectProto$3.hasOwnProperty; - const defaults$1 = baseRest(function(object, sources) { - object = Object(object); - var index = -1; - var length = sources.length; - var guard = length > 2 ? sources[2] : void 0; - if (guard && isIterateeCall(sources[0], sources[1], guard)) length = 1; - while (++index < length) { - var source = sources[index]; - var props = keysIn(source); - var propsIndex = -1; - var propsLength = props.length; - while (++propsIndex < propsLength) { - var key = props[propsIndex]; - var value = object[key]; - if (value === void 0 || eq(value, objectProto$3[key]) && !hasOwnProperty$3.call(object, key)) object[key] = source[key]; - } - } - return object; - }); - function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); - } - function arrayIncludesWith(array, value, comparator) { - var index = -1, length = array == null ? 0 : array.length; - while (++index < length) if (comparator(value, array[index])) return true; - return false; - } - var LARGE_ARRAY_SIZE$1 = 200; - function baseDifference(array, values2, iteratee, comparator) { - var index = -1, includes2 = arrayIncludes, isCommon = true, length = array.length, result = [], valuesLength = values2.length; - if (!length) return result; - if (iteratee) values2 = arrayMap(values2, baseUnary(iteratee)); - if (comparator) { - includes2 = arrayIncludesWith; - isCommon = false; - } else if (values2.length >= LARGE_ARRAY_SIZE$1) { - includes2 = cacheHas; - isCommon = false; - values2 = new SetCache(values2); - } - outer: while (++index < length) { - var value = array[index], computed = iteratee == null ? value : iteratee(value); - value = comparator || value !== 0 ? value : 0; - if (isCommon && computed === computed) { - var valuesIndex = valuesLength; - while (valuesIndex--) if (values2[valuesIndex] === computed) continue outer; - result.push(value); - } else if (!includes2(values2, computed, comparator)) result.push(value); - } - return result; - } - const difference$1 = baseRest(function(array, values2) { - return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values2, 1, isArrayLikeObject, true)) : []; - }); - function last(array) { - var length = array == null ? 0 : array.length; - return length ? array[length - 1] : void 0; - } - function drop(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) return []; - n = guard || n === void 0 ? 1 : toInteger(n); - return baseSlice(array, n < 0 ? 0 : n, length); - } - function dropRight(array, n, guard) { - var length = array == null ? 0 : array.length; - if (!length) return []; - n = guard || n === void 0 ? 1 : toInteger(n); - n = length - n; - return baseSlice(array, 0, n < 0 ? 0 : n); - } - function castFunction(value) { - return typeof value == "function" ? value : identity; - } - function forEach(collection, iteratee) { - return (isArray$1(collection) ? arrayEach : baseEach$1)(collection, castFunction(iteratee)); - } - function arrayEvery(array, predicate) { - var index = -1, length = array == null ? 0 : array.length; - while (++index < length) if (!predicate(array[index], index, array)) return false; - return true; - } - function baseEvery(collection, predicate) { - var result = true; - baseEach$1(collection, function(value, index, collection2) { - result = !!predicate(value, index, collection2); - return result; - }); - return result; - } - function every(collection, predicate, guard) { - var func = isArray$1(collection) ? arrayEvery : baseEvery; - if (guard && isIterateeCall(collection, predicate, guard)) predicate = void 0; - return func(collection, baseIteratee(predicate)); - } - function baseFilter(collection, predicate) { - var result = []; - baseEach$1(collection, function(value, index, collection2) { - if (predicate(value, index, collection2)) result.push(value); - }); - return result; - } - function filter(collection, predicate) { - return (isArray$1(collection) ? arrayFilter : baseFilter)(collection, baseIteratee(predicate)); - } - function createFind(findIndexFunc) { - return function(collection, predicate, fromIndex) { - var iterable = Object(collection); - if (!isArrayLike(collection)) { - var iteratee = baseIteratee(predicate); - collection = keys(collection); - predicate = function(key) { - return iteratee(iterable[key], key, iterable); - }; - } - var index = findIndexFunc(collection, predicate, fromIndex); - return index > -1 ? iterable[iteratee ? collection[index] : index] : void 0; - }; - } - var nativeMax$2 = Math.max; - function findIndex(array, predicate, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) return -1; - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) index = nativeMax$2(length + index, 0); - return baseFindIndex(array, baseIteratee(predicate), index); - } - const find$1 = createFind(findIndex); - function head(array) { - return array && array.length ? array[0] : void 0; - } - function baseMap(collection, iteratee) { - var index = -1, result = isArrayLike(collection) ? Array(collection.length) : []; - baseEach$1(collection, function(value, key, collection2) { - result[++index] = iteratee(value, key, collection2); - }); - return result; - } - function map(collection, iteratee) { - return (isArray$1(collection) ? arrayMap : baseMap)(collection, baseIteratee(iteratee)); - } - function flatMap(collection, iteratee) { - return baseFlatten(map(collection, iteratee), 1); - } - var hasOwnProperty$2 = Object.prototype.hasOwnProperty; - const groupBy$1 = createAggregator(function(result, value, key) { - if (hasOwnProperty$2.call(result, key)) result[key].push(value); - else baseAssignValue(result, key, [value]); - }); - var hasOwnProperty$1 = Object.prototype.hasOwnProperty; - function baseHas(object, key) { - return object != null && hasOwnProperty$1.call(object, key); - } - function has(object, path) { - return object != null && hasPath(object, path, baseHas); - } - var stringTag = "[object String]"; - function isString(value) { - return typeof value == "string" || !isArray$1(value) && isObjectLike(value) && baseGetTag(value) == stringTag; - } - function baseValues(object, props) { - return arrayMap(props, function(key) { - return object[key]; - }); - } - function values(object) { - return object == null ? [] : baseValues(object, keys(object)); - } - var nativeMax$1 = Math.max; - function includes(collection, value, fromIndex, guard) { - collection = isArrayLike(collection) ? collection : values(collection); - fromIndex = fromIndex && !guard ? toInteger(fromIndex) : 0; - var length = collection.length; - if (fromIndex < 0) fromIndex = nativeMax$1(length + fromIndex, 0); - return isString(collection) ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1 : !!length && baseIndexOf(collection, value, fromIndex) > -1; - } - var nativeMax = Math.max; - function indexOf(array, value, fromIndex) { - var length = array == null ? 0 : array.length; - if (!length) return -1; - var index = fromIndex == null ? 0 : toInteger(fromIndex); - if (index < 0) index = nativeMax(length + index, 0); - return baseIndexOf(array, value, index); - } - var mapTag = "[object Map]", setTag = "[object Set]"; - var hasOwnProperty = Object.prototype.hasOwnProperty; - function isEmpty(value) { - if (value == null) return true; - if (isArrayLike(value) && (isArray$1(value) || typeof value == "string" || typeof value.splice == "function" || isBuffer$1(value) || isTypedArray$1(value) || isArguments$1(value))) return !value.length; - var tag = getTag$1(value); - if (tag == mapTag || tag == setTag) return !value.size; - if (isPrototype(value)) return !baseKeys(value).length; - for (var key in value) if (hasOwnProperty.call(value, key)) return false; - return true; - } - var regexpTag = "[object RegExp]"; - function baseIsRegExp(value) { - return isObjectLike(value) && baseGetTag(value) == regexpTag; - } - var nodeIsRegExp = nodeUtil$1 && nodeUtil$1.isRegExp; - const isRegExp$1 = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; - function isUndefined(value) { - return value === void 0; - } - var FUNC_ERROR_TEXT = "Expected a function"; - function negate(predicate) { - if (typeof predicate != "function") throw new TypeError(FUNC_ERROR_TEXT); - return function() { - var args = arguments; - switch (args.length) { - case 0: return !predicate.call(this); - case 1: return !predicate.call(this, args[0]); - case 2: return !predicate.call(this, args[0], args[1]); - case 3: return !predicate.call(this, args[0], args[1], args[2]); - } - return !predicate.apply(this, args); - }; - } - function baseSet(object, path, value, customizer) { - if (!isObject(object)) return object; - path = castPath(path, object); - var index = -1, length = path.length, lastIndex = length - 1, nested = object; - while (nested != null && ++index < length) { - var key = toKey(path[index]), newValue = value; - if (key === "__proto__" || key === "constructor" || key === "prototype") return object; - if (index != lastIndex) { - var objValue = nested[key]; - newValue = customizer ? customizer(objValue, key, nested) : void 0; - if (newValue === void 0) newValue = isObject(objValue) ? objValue : isIndex(path[index + 1]) ? [] : {}; - } - assignValue(nested, key, newValue); - nested = nested[key]; - } - return object; - } - function basePickBy(object, paths, predicate) { - var index = -1, length = paths.length, result = {}; - while (++index < length) { - var path = paths[index], value = baseGet(object, path); - if (predicate(value, path)) baseSet(result, castPath(path, object), value); - } - return result; - } - function pickBy(object, predicate) { - if (object == null) return {}; - var props = arrayMap(getAllKeysIn(object), function(prop) { - return [prop]; - }); - predicate = baseIteratee(predicate); - return basePickBy(object, props, function(value, path) { - return predicate(value, path[0]); - }); - } - function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) { - eachFunc(collection, function(value, index, collection2) { - accumulator = initAccum ? (initAccum = false, value) : iteratee(accumulator, value, index, collection2); - }); - return accumulator; - } - function reduce(collection, iteratee, accumulator) { - var func = isArray$1(collection) ? arrayReduce : baseReduce, initAccum = arguments.length < 3; - return func(collection, baseIteratee(iteratee), accumulator, initAccum, baseEach$1); - } - function reject(collection, predicate) { - return (isArray$1(collection) ? arrayFilter : baseFilter)(collection, negate(baseIteratee(predicate))); - } - function baseSome(collection, predicate) { - var result; - baseEach$1(collection, function(value, index, collection2) { - result = predicate(value, index, collection2); - return !result; - }); - return !!result; - } - function some(collection, predicate, guard) { - var func = isArray$1(collection) ? arraySome : baseSome; - if (guard && isIterateeCall(collection, predicate, guard)) predicate = void 0; - return func(collection, baseIteratee(predicate)); - } - const createSet$1 = !(Set$1 && 1 / setToArray(new Set$1([, -0]))[1] == Infinity) ? noop : function(values2) { - return new Set$1(values2); - }; - var LARGE_ARRAY_SIZE = 200; - function baseUniq(array, iteratee, comparator) { - var index = -1, includes2 = arrayIncludes, length = array.length, isCommon = true, result = [], seen = result; - if (comparator) { - isCommon = false; - includes2 = arrayIncludesWith; - } else if (length >= LARGE_ARRAY_SIZE) { - var set = iteratee ? null : createSet$1(array); - if (set) return setToArray(set); - isCommon = false; - includes2 = cacheHas; - seen = new SetCache(); - } else seen = iteratee ? [] : result; - outer: while (++index < length) { - var value = array[index], computed = iteratee ? iteratee(value) : value; - value = comparator || value !== 0 ? value : 0; - if (isCommon && computed === computed) { - var seenIndex = seen.length; - while (seenIndex--) if (seen[seenIndex] === computed) continue outer; - if (iteratee) seen.push(computed); - result.push(value); - } else if (!includes2(seen, computed, comparator)) { - if (seen !== result) seen.push(computed); - result.push(value); - } - } - return result; - } - function uniq(array) { - return array && array.length ? baseUniq(array) : []; - } - function PRINT_ERROR(msg) { - if (console && console.error) console.error(`Error: ${msg}`); - } - function PRINT_WARNING(msg) { - if (console && console.warn) console.warn(`Warning: ${msg}`); - } - function timer(func) { - const start = (/* @__PURE__ */ new Date()).getTime(); - const val = func(); - return { - time: (/* @__PURE__ */ new Date()).getTime() - start, - value: val - }; - } - function toFastProperties(toBecomeFast) { - function FakeConstructor() {} - FakeConstructor.prototype = toBecomeFast; - const fakeInstance = new FakeConstructor(); - function fakeAccess() { - return typeof fakeInstance.bar; - } - fakeAccess(); - fakeAccess(); - return toBecomeFast; - } - function tokenLabel$1(tokType) { - if (hasTokenLabel$1(tokType)) return tokType.LABEL; - else return tokType.name; - } - function hasTokenLabel$1(obj) { - return isString(obj.LABEL) && obj.LABEL !== ""; - } - class AbstractProduction { - get definition() { - return this._definition; - } - set definition(value) { - this._definition = value; - } - constructor(_definition) { - this._definition = _definition; - } - accept(visitor) { - visitor.visit(this); - forEach(this.definition, (prod) => { - prod.accept(visitor); - }); - } - } - class NonTerminal extends AbstractProduction { - constructor(options) { - super([]); - this.idx = 1; - assign$1(this, pickBy(options, (v) => v !== void 0)); - } - set definition(definition) {} - get definition() { - if (this.referencedRule !== void 0) return this.referencedRule.definition; - return []; - } - accept(visitor) { - visitor.visit(this); - } - } - class Rule extends AbstractProduction { - constructor(options) { - super(options.definition); - this.orgText = ""; - assign$1(this, pickBy(options, (v) => v !== void 0)); - } - } - class Alternative extends AbstractProduction { - constructor(options) { - super(options.definition); - this.ignoreAmbiguities = false; - assign$1(this, pickBy(options, (v) => v !== void 0)); - } - } - class Option extends AbstractProduction { - constructor(options) { - super(options.definition); - this.idx = 1; - assign$1(this, pickBy(options, (v) => v !== void 0)); - } - } - class RepetitionMandatory extends AbstractProduction { - constructor(options) { - super(options.definition); - this.idx = 1; - assign$1(this, pickBy(options, (v) => v !== void 0)); - } - } - class RepetitionMandatoryWithSeparator extends AbstractProduction { - constructor(options) { - super(options.definition); - this.idx = 1; - assign$1(this, pickBy(options, (v) => v !== void 0)); - } - } - class Repetition extends AbstractProduction { - constructor(options) { - super(options.definition); - this.idx = 1; - assign$1(this, pickBy(options, (v) => v !== void 0)); - } - } - class RepetitionWithSeparator extends AbstractProduction { - constructor(options) { - super(options.definition); - this.idx = 1; - assign$1(this, pickBy(options, (v) => v !== void 0)); - } - } - class Alternation extends AbstractProduction { - get definition() { - return this._definition; - } - set definition(value) { - this._definition = value; - } - constructor(options) { - super(options.definition); - this.idx = 1; - this.ignoreAmbiguities = false; - this.hasPredicates = false; - assign$1(this, pickBy(options, (v) => v !== void 0)); - } - } - class Terminal { - constructor(options) { - this.idx = 1; - assign$1(this, pickBy(options, (v) => v !== void 0)); - } - accept(visitor) { - visitor.visit(this); - } - } - function serializeGrammar(topRules) { - return map(topRules, serializeProduction); - } - function serializeProduction(node) { - function convertDefinition(definition) { - return map(definition, serializeProduction); - } - if (node instanceof NonTerminal) { - const serializedNonTerminal = { - type: "NonTerminal", - name: node.nonTerminalName, - idx: node.idx - }; - if (isString(node.label)) serializedNonTerminal.label = node.label; - return serializedNonTerminal; - } else if (node instanceof Alternative) return { - type: "Alternative", - definition: convertDefinition(node.definition) - }; - else if (node instanceof Option) return { - type: "Option", - idx: node.idx, - definition: convertDefinition(node.definition) - }; - else if (node instanceof RepetitionMandatory) return { - type: "RepetitionMandatory", - idx: node.idx, - definition: convertDefinition(node.definition) - }; - else if (node instanceof RepetitionMandatoryWithSeparator) return { - type: "RepetitionMandatoryWithSeparator", - idx: node.idx, - separator: serializeProduction(new Terminal({ terminalType: node.separator })), - definition: convertDefinition(node.definition) - }; - else if (node instanceof RepetitionWithSeparator) return { - type: "RepetitionWithSeparator", - idx: node.idx, - separator: serializeProduction(new Terminal({ terminalType: node.separator })), - definition: convertDefinition(node.definition) - }; - else if (node instanceof Repetition) return { - type: "Repetition", - idx: node.idx, - definition: convertDefinition(node.definition) - }; - else if (node instanceof Alternation) return { - type: "Alternation", - idx: node.idx, - definition: convertDefinition(node.definition) - }; - else if (node instanceof Terminal) { - const serializedTerminal = { - type: "Terminal", - name: node.terminalType.name, - label: tokenLabel$1(node.terminalType), - idx: node.idx - }; - if (isString(node.label)) serializedTerminal.terminalLabel = node.label; - const pattern = node.terminalType.PATTERN; - if (node.terminalType.PATTERN) serializedTerminal.pattern = isRegExp$1(pattern) ? pattern.source : pattern; - return serializedTerminal; - } else if (node instanceof Rule) return { - type: "Rule", - name: node.name, - orgText: node.orgText, - definition: convertDefinition(node.definition) - }; - else throw Error("non exhaustive match"); - } - class GAstVisitor { - visit(node) { - const nodeAny = node; - switch (nodeAny.constructor) { - case NonTerminal: return this.visitNonTerminal(nodeAny); - case Alternative: return this.visitAlternative(nodeAny); - case Option: return this.visitOption(nodeAny); - case RepetitionMandatory: return this.visitRepetitionMandatory(nodeAny); - case RepetitionMandatoryWithSeparator: return this.visitRepetitionMandatoryWithSeparator(nodeAny); - case RepetitionWithSeparator: return this.visitRepetitionWithSeparator(nodeAny); - case Repetition: return this.visitRepetition(nodeAny); - case Alternation: return this.visitAlternation(nodeAny); - case Terminal: return this.visitTerminal(nodeAny); - case Rule: return this.visitRule(nodeAny); - default: throw Error("non exhaustive match"); - } - } - /* c8 ignore next */ - visitNonTerminal(node) {} - /* c8 ignore next */ - visitAlternative(node) {} - /* c8 ignore next */ - visitOption(node) {} - /* c8 ignore next */ - visitRepetition(node) {} - /* c8 ignore next */ - visitRepetitionMandatory(node) {} - /* c8 ignore next 3 */ - visitRepetitionMandatoryWithSeparator(node) {} - /* c8 ignore next */ - visitRepetitionWithSeparator(node) {} - /* c8 ignore next */ - visitAlternation(node) {} - /* c8 ignore next */ - visitTerminal(node) {} - /* c8 ignore next */ - visitRule(node) {} - } - function isSequenceProd(prod) { - return prod instanceof Alternative || prod instanceof Option || prod instanceof Repetition || prod instanceof RepetitionMandatory || prod instanceof RepetitionMandatoryWithSeparator || prod instanceof RepetitionWithSeparator || prod instanceof Terminal || prod instanceof Rule; - } - function isOptionalProd(prod, alreadyVisited = []) { - if (prod instanceof Option || prod instanceof Repetition || prod instanceof RepetitionWithSeparator) return true; - if (prod instanceof Alternation) return some(prod.definition, (subProd) => { - return isOptionalProd(subProd, alreadyVisited); - }); - else if (prod instanceof NonTerminal && includes(alreadyVisited, prod)) return false; - else if (prod instanceof AbstractProduction) { - if (prod instanceof NonTerminal) alreadyVisited.push(prod); - return every(prod.definition, (subProd) => { - return isOptionalProd(subProd, alreadyVisited); - }); - } else return false; - } - function isBranchingProd(prod) { - return prod instanceof Alternation; - } - function getProductionDslName(prod) { - if (prod instanceof NonTerminal) return "SUBRULE"; - else if (prod instanceof Option) return "OPTION"; - else if (prod instanceof Alternation) return "OR"; - else if (prod instanceof RepetitionMandatory) return "AT_LEAST_ONE"; - else if (prod instanceof RepetitionMandatoryWithSeparator) return "AT_LEAST_ONE_SEP"; - else if (prod instanceof RepetitionWithSeparator) return "MANY_SEP"; - else if (prod instanceof Repetition) return "MANY"; - else if (prod instanceof Terminal) return "CONSUME"; - else throw Error("non exhaustive match"); - } - class RestWalker { - walk(prod, prevRest = []) { - forEach(prod.definition, (subProd, index) => { - const currRest = drop(prod.definition, index + 1); - if (subProd instanceof NonTerminal) this.walkProdRef(subProd, currRest, prevRest); - else if (subProd instanceof Terminal) this.walkTerminal(subProd, currRest, prevRest); - else if (subProd instanceof Alternative) this.walkFlat(subProd, currRest, prevRest); - else if (subProd instanceof Option) this.walkOption(subProd, currRest, prevRest); - else if (subProd instanceof RepetitionMandatory) this.walkAtLeastOne(subProd, currRest, prevRest); - else if (subProd instanceof RepetitionMandatoryWithSeparator) this.walkAtLeastOneSep(subProd, currRest, prevRest); - else if (subProd instanceof RepetitionWithSeparator) this.walkManySep(subProd, currRest, prevRest); - else if (subProd instanceof Repetition) this.walkMany(subProd, currRest, prevRest); - else if (subProd instanceof Alternation) this.walkOr(subProd, currRest, prevRest); - else throw Error("non exhaustive match"); - }); - } - walkTerminal(terminal, currRest, prevRest) {} - walkProdRef(refProd, currRest, prevRest) {} - walkFlat(flatProd, currRest, prevRest) { - const fullOrRest = currRest.concat(prevRest); - this.walk(flatProd, fullOrRest); - } - walkOption(optionProd, currRest, prevRest) { - const fullOrRest = currRest.concat(prevRest); - this.walk(optionProd, fullOrRest); - } - walkAtLeastOne(atLeastOneProd, currRest, prevRest) { - const fullAtLeastOneRest = [new Option({ definition: atLeastOneProd.definition })].concat(currRest, prevRest); - this.walk(atLeastOneProd, fullAtLeastOneRest); - } - walkAtLeastOneSep(atLeastOneSepProd, currRest, prevRest) { - const fullAtLeastOneSepRest = restForRepetitionWithSeparator(atLeastOneSepProd, currRest, prevRest); - this.walk(atLeastOneSepProd, fullAtLeastOneSepRest); - } - walkMany(manyProd, currRest, prevRest) { - const fullManyRest = [new Option({ definition: manyProd.definition })].concat(currRest, prevRest); - this.walk(manyProd, fullManyRest); - } - walkManySep(manySepProd, currRest, prevRest) { - const fullManySepRest = restForRepetitionWithSeparator(manySepProd, currRest, prevRest); - this.walk(manySepProd, fullManySepRest); - } - walkOr(orProd, currRest, prevRest) { - const fullOrRest = currRest.concat(prevRest); - forEach(orProd.definition, (alt) => { - const prodWrapper = new Alternative({ definition: [alt] }); - this.walk(prodWrapper, fullOrRest); - }); - } - } - function restForRepetitionWithSeparator(repSepProd, currRest, prevRest) { - return [new Option({ definition: [new Terminal({ terminalType: repSepProd.separator })].concat(repSepProd.definition) })].concat(currRest, prevRest); - } - function first(prod) { - if (prod instanceof NonTerminal) return first(prod.referencedRule); - else if (prod instanceof Terminal) return firstForTerminal(prod); - else if (isSequenceProd(prod)) return firstForSequence(prod); - else if (isBranchingProd(prod)) return firstForBranching(prod); - else throw Error("non exhaustive match"); - } - function firstForSequence(prod) { - let firstSet = []; - const seq = prod.definition; - let nextSubProdIdx = 0; - let hasInnerProdsRemaining = seq.length > nextSubProdIdx; - let currSubProd; - let isLastInnerProdOptional = true; - while (hasInnerProdsRemaining && isLastInnerProdOptional) { - currSubProd = seq[nextSubProdIdx]; - isLastInnerProdOptional = isOptionalProd(currSubProd); - firstSet = firstSet.concat(first(currSubProd)); - nextSubProdIdx = nextSubProdIdx + 1; - hasInnerProdsRemaining = seq.length > nextSubProdIdx; - } - return uniq(firstSet); - } - function firstForBranching(prod) { - return uniq(flatten(map(prod.definition, (innerProd) => { - return first(innerProd); - }))); - } - function firstForTerminal(terminal) { - return [terminal.terminalType]; - } - const IN = "_~IN~_"; - class ResyncFollowsWalker extends RestWalker { - constructor(topProd) { - super(); - this.topProd = topProd; - this.follows = {}; - } - startWalking() { - this.walk(this.topProd); - return this.follows; - } - walkTerminal(terminal, currRest, prevRest) {} - walkProdRef(refProd, currRest, prevRest) { - const followName = buildBetweenProdsFollowPrefix(refProd.referencedRule, refProd.idx) + this.topProd.name; - const t_in_topProd_follows = first(new Alternative({ definition: currRest.concat(prevRest) })); - this.follows[followName] = t_in_topProd_follows; - } - } - function computeAllProdsFollows(topProductions) { - const reSyncFollows = {}; - forEach(topProductions, (topProd) => { - assign$1(reSyncFollows, new ResyncFollowsWalker(topProd).startWalking()); - }); - return reSyncFollows; - } - function buildBetweenProdsFollowPrefix(inner, occurenceInParent) { - return inner.name + occurenceInParent + IN; - } - function cc(char) { - return char.charCodeAt(0); - } - function insertToSet(item, set) { - if (Array.isArray(item)) item.forEach(function(subItem) { - set.push(subItem); - }); - else set.push(item); - } - function addFlag(flagObj, flagKey) { - if (flagObj[flagKey] === true) throw "duplicate flag " + flagKey; - flagObj[flagKey]; - flagObj[flagKey] = true; - } - function ASSERT_EXISTS(obj) { - if (obj === void 0) throw Error("Internal Error - Should never get here!"); - return true; - } - function ASSERT_NEVER_REACH_HERE() { - throw Error("Internal Error - Should never get here!"); - } - function isCharacter(obj) { - return obj["type"] === "Character"; - } - const digitsCharCodes = []; - for (let i = cc("0"); i <= cc("9"); i++) digitsCharCodes.push(i); - const wordCharCodes = [cc("_")].concat(digitsCharCodes); - for (let i = cc("a"); i <= cc("z"); i++) wordCharCodes.push(i); - for (let i = cc("A"); i <= cc("Z"); i++) wordCharCodes.push(i); - const whitespaceCodes = [ - cc(" "), - cc("\f"), - cc("\n"), - cc("\r"), - cc(" "), - cc("\v"), - cc(" "), - cc("\xA0"), - cc(" "), - cc(" "), - cc(" "), - cc(" "), - cc(" "), - cc(" "), - cc(" "), - cc(" "), - cc(" "), - cc(" "), - cc(" "), - cc(" "), - cc("\u2028"), - cc("\u2029"), - cc(" "), - cc(" "), - cc(" "), - cc("") - ]; - const hexDigitPattern = /[0-9a-fA-F]/; - const decimalPattern = /[0-9]/; - const decimalPatternNoZero = /[1-9]/; - class RegExpParser { - constructor() { - this.idx = 0; - this.input = ""; - this.groupIdx = 0; - } - saveState() { - return { - idx: this.idx, - input: this.input, - groupIdx: this.groupIdx - }; - } - restoreState(newState) { - this.idx = newState.idx; - this.input = newState.input; - this.groupIdx = newState.groupIdx; - } - pattern(input) { - this.idx = 0; - this.input = input; - this.groupIdx = 0; - this.consumeChar("/"); - const value = this.disjunction(); - this.consumeChar("/"); - const flags = { - type: "Flags", - loc: { - begin: this.idx, - end: input.length - }, - global: false, - ignoreCase: false, - multiLine: false, - unicode: false, - sticky: false - }; - while (this.isRegExpFlag()) switch (this.popChar()) { - case "g": - addFlag(flags, "global"); - break; - case "i": - addFlag(flags, "ignoreCase"); - break; - case "m": - addFlag(flags, "multiLine"); - break; - case "u": - addFlag(flags, "unicode"); - break; - case "y": - addFlag(flags, "sticky"); - break; - } - if (this.idx !== this.input.length) throw Error("Redundant input: " + this.input.substring(this.idx)); - return { - type: "Pattern", - flags, - value, - loc: this.loc(0) - }; - } - disjunction() { - const alts = []; - const begin = this.idx; - alts.push(this.alternative()); - while (this.peekChar() === "|") { - this.consumeChar("|"); - alts.push(this.alternative()); - } - return { - type: "Disjunction", - value: alts, - loc: this.loc(begin) - }; - } - alternative() { - const terms = []; - const begin = this.idx; - while (this.isTerm()) terms.push(this.term()); - return { - type: "Alternative", - value: terms, - loc: this.loc(begin) - }; - } - term() { - if (this.isAssertion()) return this.assertion(); - else return this.atom(); - } - assertion() { - const begin = this.idx; - switch (this.popChar()) { - case "^": return { - type: "StartAnchor", - loc: this.loc(begin) - }; - case "$": return { - type: "EndAnchor", - loc: this.loc(begin) - }; - case "\\": - switch (this.popChar()) { - case "b": return { - type: "WordBoundary", - loc: this.loc(begin) - }; - case "B": return { - type: "NonWordBoundary", - loc: this.loc(begin) - }; - } - throw Error("Invalid Assertion Escape"); - case "(": - this.consumeChar("?"); - let type; - switch (this.popChar()) { - case "=": - type = "Lookahead"; - break; - case "!": - type = "NegativeLookahead"; - break; - } - ASSERT_EXISTS(type); - const disjunction = this.disjunction(); - this.consumeChar(")"); - return { - type, - value: disjunction, - loc: this.loc(begin) - }; - } - return ASSERT_NEVER_REACH_HERE(); - } - quantifier(isBacktracking = false) { - let range = void 0; - const begin = this.idx; - switch (this.popChar()) { - case "*": - range = { - atLeast: 0, - atMost: Infinity - }; - break; - case "+": - range = { - atLeast: 1, - atMost: Infinity - }; - break; - case "?": - range = { - atLeast: 0, - atMost: 1 - }; - break; - case "{": - const atLeast = this.integerIncludingZero(); - switch (this.popChar()) { - case "}": - range = { - atLeast, - atMost: atLeast - }; - break; - case ",": - let atMost; - if (this.isDigit()) { - atMost = this.integerIncludingZero(); - range = { - atLeast, - atMost - }; - } else range = { - atLeast, - atMost: Infinity - }; - this.consumeChar("}"); - break; - } - if (isBacktracking === true && range === void 0) return; - ASSERT_EXISTS(range); - break; - } - if (isBacktracking === true && range === void 0) return; - if (ASSERT_EXISTS(range)) { - if (this.peekChar(0) === "?") { - this.consumeChar("?"); - range.greedy = false; - } else range.greedy = true; - range.type = "Quantifier"; - range.loc = this.loc(begin); - return range; - } - } - atom() { - let atom; - const begin = this.idx; - switch (this.peekChar()) { - case ".": - atom = this.dotAll(); - break; - case "\\": - atom = this.atomEscape(); - break; - case "[": - atom = this.characterClass(); - break; - case "(": - atom = this.group(); - break; - } - if (atom === void 0 && this.isPatternCharacter()) atom = this.patternCharacter(); - if (ASSERT_EXISTS(atom)) { - atom.loc = this.loc(begin); - if (this.isQuantifier()) atom.quantifier = this.quantifier(); - return atom; - } - } - dotAll() { - this.consumeChar("."); - return { - type: "Set", - complement: true, - value: [ - cc("\n"), - cc("\r"), - cc("\u2028"), - cc("\u2029") - ] - }; - } - atomEscape() { - this.consumeChar("\\"); - switch (this.peekChar()) { - case "1": - case "2": - case "3": - case "4": - case "5": - case "6": - case "7": - case "8": - case "9": return this.decimalEscapeAtom(); - case "d": - case "D": - case "s": - case "S": - case "w": - case "W": return this.characterClassEscape(); - case "f": - case "n": - case "r": - case "t": - case "v": return this.controlEscapeAtom(); - case "c": return this.controlLetterEscapeAtom(); - case "0": return this.nulCharacterAtom(); - case "x": return this.hexEscapeSequenceAtom(); - case "u": return this.regExpUnicodeEscapeSequenceAtom(); - default: return this.identityEscapeAtom(); - } - } - decimalEscapeAtom() { - return { - type: "GroupBackReference", - value: this.positiveInteger() - }; - } - characterClassEscape() { - let set; - let complement = false; - switch (this.popChar()) { - case "d": - set = digitsCharCodes; - break; - case "D": - set = digitsCharCodes; - complement = true; - break; - case "s": - set = whitespaceCodes; - break; - case "S": - set = whitespaceCodes; - complement = true; - break; - case "w": - set = wordCharCodes; - break; - case "W": - set = wordCharCodes; - complement = true; - break; - } - if (ASSERT_EXISTS(set)) return { - type: "Set", - value: set, - complement - }; - } - controlEscapeAtom() { - let escapeCode; - switch (this.popChar()) { - case "f": - escapeCode = cc("\f"); - break; - case "n": - escapeCode = cc("\n"); - break; - case "r": - escapeCode = cc("\r"); - break; - case "t": - escapeCode = cc(" "); - break; - case "v": - escapeCode = cc("\v"); - break; - } - if (ASSERT_EXISTS(escapeCode)) return { - type: "Character", - value: escapeCode - }; - } - controlLetterEscapeAtom() { - this.consumeChar("c"); - const letter = this.popChar(); - if (/[a-zA-Z]/.test(letter) === false) throw Error("Invalid "); - return { - type: "Character", - value: letter.toUpperCase().charCodeAt(0) - 64 - }; - } - nulCharacterAtom() { - this.consumeChar("0"); - return { - type: "Character", - value: cc("\0") - }; - } - hexEscapeSequenceAtom() { - this.consumeChar("x"); - return this.parseHexDigits(2); - } - regExpUnicodeEscapeSequenceAtom() { - this.consumeChar("u"); - return this.parseHexDigits(4); - } - identityEscapeAtom() { - return { - type: "Character", - value: cc(this.popChar()) - }; - } - classPatternCharacterAtom() { - switch (this.peekChar()) { - case "\n": - case "\r": - case "\u2028": - case "\u2029": - case "\\": - case "]": throw Error("TBD"); - default: return { - type: "Character", - value: cc(this.popChar()) - }; - } - } - characterClass() { - const set = []; - let complement = false; - this.consumeChar("["); - if (this.peekChar(0) === "^") { - this.consumeChar("^"); - complement = true; - } - while (this.isClassAtom()) { - const from = this.classAtom(); - from.type; - if (isCharacter(from) && this.isRangeDash()) { - this.consumeChar("-"); - const to = this.classAtom(); - to.type; - if (isCharacter(to)) { - if (to.value < from.value) throw Error("Range out of order in character class"); - set.push({ - from: from.value, - to: to.value - }); - } else { - insertToSet(from.value, set); - set.push(cc("-")); - insertToSet(to.value, set); - } - } else insertToSet(from.value, set); - } - this.consumeChar("]"); - return { - type: "Set", - complement, - value: set - }; - } - classAtom() { - switch (this.peekChar()) { - case "]": - case "\n": - case "\r": - case "\u2028": - case "\u2029": throw Error("TBD"); - case "\\": return this.classEscape(); - default: return this.classPatternCharacterAtom(); - } - } - classEscape() { - this.consumeChar("\\"); - switch (this.peekChar()) { - case "b": - this.consumeChar("b"); - return { - type: "Character", - value: cc("\b") - }; - case "d": - case "D": - case "s": - case "S": - case "w": - case "W": return this.characterClassEscape(); - case "f": - case "n": - case "r": - case "t": - case "v": return this.controlEscapeAtom(); - case "c": return this.controlLetterEscapeAtom(); - case "0": return this.nulCharacterAtom(); - case "x": return this.hexEscapeSequenceAtom(); - case "u": return this.regExpUnicodeEscapeSequenceAtom(); - default: return this.identityEscapeAtom(); - } - } - group() { - let capturing = true; - this.consumeChar("("); - switch (this.peekChar(0)) { - case "?": - this.consumeChar("?"); - this.consumeChar(":"); - capturing = false; - break; - default: - this.groupIdx++; - break; - } - const value = this.disjunction(); - this.consumeChar(")"); - const groupAst = { - type: "Group", - capturing, - value - }; - if (capturing) groupAst["idx"] = this.groupIdx; - return groupAst; - } - positiveInteger() { - let number = this.popChar(); - if (decimalPatternNoZero.test(number) === false) throw Error("Expecting a positive integer"); - while (decimalPattern.test(this.peekChar(0))) number += this.popChar(); - return parseInt(number, 10); - } - integerIncludingZero() { - let number = this.popChar(); - if (decimalPattern.test(number) === false) throw Error("Expecting an integer"); - while (decimalPattern.test(this.peekChar(0))) number += this.popChar(); - return parseInt(number, 10); - } - patternCharacter() { - const nextChar = this.popChar(); - switch (nextChar) { - case "\n": - case "\r": - case "\u2028": - case "\u2029": - case "^": - case "$": - case "\\": - case ".": - case "*": - case "+": - case "?": - case "(": - case ")": - case "[": - case "|": throw Error("TBD"); - default: return { - type: "Character", - value: cc(nextChar) - }; - } - } - isRegExpFlag() { - switch (this.peekChar(0)) { - case "g": - case "i": - case "m": - case "u": - case "y": return true; - default: return false; - } - } - isRangeDash() { - return this.peekChar() === "-" && this.isClassAtom(1); - } - isDigit() { - return decimalPattern.test(this.peekChar(0)); - } - isClassAtom(howMuch = 0) { - switch (this.peekChar(howMuch)) { - case "]": - case "\n": - case "\r": - case "\u2028": - case "\u2029": return false; - default: return true; - } - } - isTerm() { - return this.isAtom() || this.isAssertion(); - } - isAtom() { - if (this.isPatternCharacter()) return true; - switch (this.peekChar(0)) { - case ".": - case "\\": - case "[": - case "(": return true; - default: return false; - } - } - isAssertion() { - switch (this.peekChar(0)) { - case "^": - case "$": return true; - case "\\": switch (this.peekChar(1)) { - case "b": - case "B": return true; - default: return false; - } - case "(": return this.peekChar(1) === "?" && (this.peekChar(2) === "=" || this.peekChar(2) === "!"); - default: return false; - } - } - isQuantifier() { - const prevState = this.saveState(); - try { - return this.quantifier(true) !== void 0; - } catch (e) { - return false; - } finally { - this.restoreState(prevState); - } - } - isPatternCharacter() { - switch (this.peekChar()) { - case "^": - case "$": - case "\\": - case ".": - case "*": - case "+": - case "?": - case "(": - case ")": - case "[": - case "|": - case "/": - case "\n": - case "\r": - case "\u2028": - case "\u2029": return false; - default: return true; - } - } - parseHexDigits(howMany) { - let hexString = ""; - for (let i = 0; i < howMany; i++) { - const hexChar = this.popChar(); - if (hexDigitPattern.test(hexChar) === false) throw Error("Expecting a HexDecimal digits"); - hexString += hexChar; - } - return { - type: "Character", - value: parseInt(hexString, 16) - }; - } - peekChar(howMuch = 0) { - return this.input[this.idx + howMuch]; - } - popChar() { - const nextChar = this.peekChar(0); - this.consumeChar(void 0); - return nextChar; - } - consumeChar(char) { - if (char !== void 0 && this.input[this.idx] !== char) throw Error("Expected: '" + char + "' but found: '" + this.input[this.idx] + "' at offset: " + this.idx); - if (this.idx >= this.input.length) throw Error("Unexpected end of input"); - this.idx++; - } - loc(begin) { - return { - begin, - end: this.idx - }; - } - } - class BaseRegExpVisitor { - visitChildren(node) { - for (const key in node) { - const child = node[key]; - if (node.hasOwnProperty(key)) { - if (child.type !== void 0) this.visit(child); - else if (Array.isArray(child)) child.forEach((subChild) => { - this.visit(subChild); - }, this); - } - } - } - visit(node) { - switch (node.type) { - case "Pattern": - this.visitPattern(node); - break; - case "Flags": - this.visitFlags(node); - break; - case "Disjunction": - this.visitDisjunction(node); - break; - case "Alternative": - this.visitAlternative(node); - break; - case "StartAnchor": - this.visitStartAnchor(node); - break; - case "EndAnchor": - this.visitEndAnchor(node); - break; - case "WordBoundary": - this.visitWordBoundary(node); - break; - case "NonWordBoundary": - this.visitNonWordBoundary(node); - break; - case "Lookahead": - this.visitLookahead(node); - break; - case "NegativeLookahead": - this.visitNegativeLookahead(node); - break; - case "Character": - this.visitCharacter(node); - break; - case "Set": - this.visitSet(node); - break; - case "Group": - this.visitGroup(node); - break; - case "GroupBackReference": - this.visitGroupBackReference(node); - break; - case "Quantifier": - this.visitQuantifier(node); - break; - } - this.visitChildren(node); - } - visitPattern(node) {} - visitFlags(node) {} - visitDisjunction(node) {} - visitAlternative(node) {} - visitStartAnchor(node) {} - visitEndAnchor(node) {} - visitWordBoundary(node) {} - visitNonWordBoundary(node) {} - visitLookahead(node) {} - visitNegativeLookahead(node) {} - visitCharacter(node) {} - visitSet(node) {} - visitGroup(node) {} - visitGroupBackReference(node) {} - visitQuantifier(node) {} - } - let regExpAstCache = {}; - const regExpParser = new RegExpParser(); - function getRegExpAst(regExp) { - const regExpStr = regExp.toString(); - if (regExpAstCache.hasOwnProperty(regExpStr)) return regExpAstCache[regExpStr]; - else { - const regExpAst = regExpParser.pattern(regExpStr); - regExpAstCache[regExpStr] = regExpAst; - return regExpAst; - } - } - function clearRegExpParserCache() { - regExpAstCache = {}; - } - const complementErrorMessage = "Complement Sets are not supported for first char optimization"; - const failedOptimizationPrefixMsg = "Unable to use \"first char\" lexer optimizations:\n"; - function getOptimizedStartCodesIndices(regExp, ensureOptimizations = false) { - try { - const ast = getRegExpAst(regExp); - return firstCharOptimizedIndices(ast.value, {}, ast.flags.ignoreCase); - } catch (e) { - if (e.message === complementErrorMessage) { - if (ensureOptimizations) PRINT_WARNING(`${failedOptimizationPrefixMsg} Unable to optimize: < ${regExp.toString()} > - Complement Sets cannot be automatically optimized. - This will disable the lexer's first char optimizations. - See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`); - } else { - let msgSuffix = ""; - if (ensureOptimizations) msgSuffix = "\n This will disable the lexer's first char optimizations.\n See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details."; - PRINT_ERROR(`${failedOptimizationPrefixMsg} - Failed parsing: < ${regExp.toString()} > - Using the @chevrotain/regexp-to-ast library - Please open an issue at: https://github.com/chevrotain/chevrotain/issues` + msgSuffix); - } - } - return []; - } - function firstCharOptimizedIndices(ast, result, ignoreCase) { - switch (ast.type) { - case "Disjunction": - for (let i = 0; i < ast.value.length; i++) firstCharOptimizedIndices(ast.value[i], result, ignoreCase); - break; - case "Alternative": - const terms = ast.value; - for (let i = 0; i < terms.length; i++) { - const term = terms[i]; - switch (term.type) { - case "EndAnchor": - case "GroupBackReference": - case "Lookahead": - case "NegativeLookahead": - case "StartAnchor": - case "WordBoundary": - case "NonWordBoundary": continue; - } - const atom = term; - switch (atom.type) { - case "Character": - addOptimizedIdxToResult(atom.value, result, ignoreCase); - break; - case "Set": - if (atom.complement === true) throw Error(complementErrorMessage); - forEach(atom.value, (code) => { - if (typeof code === "number") addOptimizedIdxToResult(code, result, ignoreCase); - else { - const range = code; - if (ignoreCase === true) for (let rangeCode = range.from; rangeCode <= range.to; rangeCode++) addOptimizedIdxToResult(rangeCode, result, ignoreCase); - else { - for (let rangeCode = range.from; rangeCode <= range.to && rangeCode < minOptimizationVal; rangeCode++) addOptimizedIdxToResult(rangeCode, result, ignoreCase); - if (range.to >= minOptimizationVal) { - const minUnOptVal = range.from >= minOptimizationVal ? range.from : minOptimizationVal; - const maxUnOptVal = range.to; - const minOptIdx = charCodeToOptimizedIndex(minUnOptVal); - const maxOptIdx = charCodeToOptimizedIndex(maxUnOptVal); - for (let currOptIdx = minOptIdx; currOptIdx <= maxOptIdx; currOptIdx++) result[currOptIdx] = currOptIdx; - } - } - } - }); - break; - case "Group": - firstCharOptimizedIndices(atom.value, result, ignoreCase); - break; - default: throw Error("Non Exhaustive Match"); - } - const isOptionalQuantifier = atom.quantifier !== void 0 && atom.quantifier.atLeast === 0; - if (atom.type === "Group" && isWholeOptional(atom) === false || atom.type !== "Group" && isOptionalQuantifier === false) break; - } - break; - default: throw Error("non exhaustive match!"); - } - return values(result); - } - function addOptimizedIdxToResult(code, result, ignoreCase) { - const optimizedCharIdx = charCodeToOptimizedIndex(code); - result[optimizedCharIdx] = optimizedCharIdx; - if (ignoreCase === true) handleIgnoreCase(code, result); - } - function handleIgnoreCase(code, result) { - const char = String.fromCharCode(code); - const upperChar = char.toUpperCase(); - if (upperChar !== char) { - const optimizedCharIdx = charCodeToOptimizedIndex(upperChar.charCodeAt(0)); - result[optimizedCharIdx] = optimizedCharIdx; - } else { - const lowerChar = char.toLowerCase(); - if (lowerChar !== char) { - const optimizedCharIdx = charCodeToOptimizedIndex(lowerChar.charCodeAt(0)); - result[optimizedCharIdx] = optimizedCharIdx; - } - } - } - function findCode(setNode, targetCharCodes) { - return find$1(setNode.value, (codeOrRange) => { - if (typeof codeOrRange === "number") return includes(targetCharCodes, codeOrRange); - else { - const range = codeOrRange; - return find$1(targetCharCodes, (targetCode) => range.from <= targetCode && targetCode <= range.to) !== void 0; - } - }); - } - function isWholeOptional(ast) { - const quantifier = ast.quantifier; - if (quantifier && quantifier.atLeast === 0) return true; - if (!ast.value) return false; - return isArray$1(ast.value) ? every(ast.value, isWholeOptional) : isWholeOptional(ast.value); - } - class CharCodeFinder extends BaseRegExpVisitor { - constructor(targetCharCodes) { - super(); - this.targetCharCodes = targetCharCodes; - this.found = false; - } - visitChildren(node) { - if (this.found === true) return; - switch (node.type) { - case "Lookahead": - this.visitLookahead(node); - return; - case "NegativeLookahead": - this.visitNegativeLookahead(node); - return; - } - super.visitChildren(node); - } - visitCharacter(node) { - if (includes(this.targetCharCodes, node.value)) this.found = true; - } - visitSet(node) { - if (node.complement) { - if (findCode(node, this.targetCharCodes) === void 0) this.found = true; - } else if (findCode(node, this.targetCharCodes) !== void 0) this.found = true; - } - } - function canMatchCharCode(charCodes, pattern) { - if (pattern instanceof RegExp) { - const ast = getRegExpAst(pattern); - const charCodeFinder = new CharCodeFinder(charCodes); - charCodeFinder.visit(ast); - return charCodeFinder.found; - } else return find$1(pattern, (char) => { - return includes(charCodes, char.charCodeAt(0)); - }) !== void 0; - } - const PATTERN = "PATTERN"; - const DEFAULT_MODE = "defaultMode"; - const MODES = "modes"; - let SUPPORT_STICKY = typeof (/* @__PURE__ */ new RegExp("(?:)")).sticky === "boolean"; - function analyzeTokenTypes(tokenTypes, options) { - options = defaults$1(options, { - useSticky: SUPPORT_STICKY, - debug: false, - safeMode: false, - positionTracking: "full", - lineTerminatorCharacters: ["\r", "\n"], - tracer: (msg, action) => action() - }); - const tracer = options.tracer; - tracer("initCharCodeToOptimizedIndexMap", () => { - initCharCodeToOptimizedIndexMap(); - }); - let onlyRelevantTypes; - tracer("Reject Lexer.NA", () => { - onlyRelevantTypes = reject(tokenTypes, (currType) => { - return currType[PATTERN] === Lexer2.NA; - }); - }); - let hasCustom = false; - let allTransformedPatterns; - tracer("Transform Patterns", () => { - hasCustom = false; - allTransformedPatterns = map(onlyRelevantTypes, (currType) => { - const currPattern = currType[PATTERN]; - if (isRegExp$1(currPattern)) { - const regExpSource = currPattern.source; - if (regExpSource.length === 1 && regExpSource !== "^" && regExpSource !== "$" && regExpSource !== "." && !currPattern.ignoreCase) return regExpSource; - else if (regExpSource.length === 2 && regExpSource[0] === "\\" && !includes([ - "d", - "D", - "s", - "S", - "t", - "r", - "n", - "t", - "0", - "c", - "b", - "B", - "f", - "v", - "w", - "W" - ], regExpSource[1])) return regExpSource[1]; - else return options.useSticky ? addStickyFlag(currPattern) : addStartOfInput(currPattern); - } else if (isFunction(currPattern)) { - hasCustom = true; - return { exec: currPattern }; - } else if (typeof currPattern === "object") { - hasCustom = true; - return currPattern; - } else if (typeof currPattern === "string") if (currPattern.length === 1) return currPattern; - else { - const escapedRegExpString = currPattern.replace(/[\\^$.*+?()[\]{}|]/g, "\\$&"); - const wrappedRegExp = new RegExp(escapedRegExpString); - return options.useSticky ? addStickyFlag(wrappedRegExp) : addStartOfInput(wrappedRegExp); - } - else throw Error("non exhaustive match"); - }); - }); - let patternIdxToType; - let patternIdxToGroup; - let patternIdxToLongerAltIdxArr; - let patternIdxToPushMode; - let patternIdxToPopMode; - tracer("misc mapping", () => { - patternIdxToType = map(onlyRelevantTypes, (currType) => currType.tokenTypeIdx); - patternIdxToGroup = map(onlyRelevantTypes, (clazz) => { - const groupName = clazz.GROUP; - if (groupName === Lexer2.SKIPPED) return; - else if (isString(groupName)) return groupName; - else if (isUndefined(groupName)) return false; - else throw Error("non exhaustive match"); - }); - patternIdxToLongerAltIdxArr = map(onlyRelevantTypes, (clazz) => { - const longerAltType = clazz.LONGER_ALT; - if (longerAltType) return isArray$1(longerAltType) ? map(longerAltType, (type) => indexOf(onlyRelevantTypes, type)) : [indexOf(onlyRelevantTypes, longerAltType)]; - }); - patternIdxToPushMode = map(onlyRelevantTypes, (clazz) => clazz.PUSH_MODE); - patternIdxToPopMode = map(onlyRelevantTypes, (clazz) => has(clazz, "POP_MODE")); - }); - let patternIdxToCanLineTerminator; - tracer("Line Terminator Handling", () => { - const lineTerminatorCharCodes = getCharCodes(options.lineTerminatorCharacters); - patternIdxToCanLineTerminator = map(onlyRelevantTypes, (tokType) => false); - if (options.positionTracking !== "onlyOffset") patternIdxToCanLineTerminator = map(onlyRelevantTypes, (tokType) => { - if (has(tokType, "LINE_BREAKS")) return !!tokType.LINE_BREAKS; - else return checkLineBreaksIssues(tokType, lineTerminatorCharCodes) === false && canMatchCharCode(lineTerminatorCharCodes, tokType.PATTERN); - }); - }); - let patternIdxToIsCustom; - let patternIdxToShort; - let emptyGroups; - let patternIdxToConfig; - tracer("Misc Mapping #2", () => { - patternIdxToIsCustom = map(onlyRelevantTypes, isCustomPattern); - patternIdxToShort = map(allTransformedPatterns, isShortPattern); - emptyGroups = reduce(onlyRelevantTypes, (acc, clazz) => { - const groupName = clazz.GROUP; - if (isString(groupName) && !(groupName === Lexer2.SKIPPED)) acc[groupName] = []; - return acc; - }, {}); - patternIdxToConfig = map(allTransformedPatterns, (x, idx) => { - return { - pattern: allTransformedPatterns[idx], - longerAlt: patternIdxToLongerAltIdxArr[idx], - canLineTerminator: patternIdxToCanLineTerminator[idx], - isCustom: patternIdxToIsCustom[idx], - short: patternIdxToShort[idx], - group: patternIdxToGroup[idx], - push: patternIdxToPushMode[idx], - pop: patternIdxToPopMode[idx], - tokenTypeIdx: patternIdxToType[idx], - tokenType: onlyRelevantTypes[idx] - }; - }); - }); - let canBeOptimized = true; - let charCodeToPatternIdxToConfig = []; - if (!options.safeMode) tracer("First Char Optimization", () => { - charCodeToPatternIdxToConfig = reduce(onlyRelevantTypes, (result, currTokType, idx) => { - if (typeof currTokType.PATTERN === "string") addToMapOfArrays(result, charCodeToOptimizedIndex(currTokType.PATTERN.charCodeAt(0)), patternIdxToConfig[idx]); - else if (isArray$1(currTokType.START_CHARS_HINT)) { - let lastOptimizedIdx; - forEach(currTokType.START_CHARS_HINT, (charOrInt) => { - const currOptimizedIdx = charCodeToOptimizedIndex(typeof charOrInt === "string" ? charOrInt.charCodeAt(0) : charOrInt); - if (lastOptimizedIdx !== currOptimizedIdx) { - lastOptimizedIdx = currOptimizedIdx; - addToMapOfArrays(result, currOptimizedIdx, patternIdxToConfig[idx]); - } - }); - } else if (isRegExp$1(currTokType.PATTERN)) if (currTokType.PATTERN.unicode) { - canBeOptimized = false; - if (options.ensureOptimizations) PRINT_ERROR(`${failedOptimizationPrefixMsg} Unable to analyze < ${currTokType.PATTERN.toString()} > pattern. - The regexp unicode flag is not currently supported by the regexp-to-ast library. - This will disable the lexer's first char optimizations. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`); - } else { - const optimizedCodes = getOptimizedStartCodesIndices(currTokType.PATTERN, options.ensureOptimizations); - if (isEmpty(optimizedCodes)) canBeOptimized = false; - forEach(optimizedCodes, (code) => { - addToMapOfArrays(result, code, patternIdxToConfig[idx]); - }); - } - else { - if (options.ensureOptimizations) PRINT_ERROR(`${failedOptimizationPrefixMsg} TokenType: <${currTokType.name}> is using a custom token pattern without providing <start_chars_hint> parameter. - This will disable the lexer's first char optimizations. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`); - canBeOptimized = false; - } - return result; - }, []); - }); - return { - emptyGroups, - patternIdxToConfig, - charCodeToPatternIdxToConfig, - hasCustom, - canBeOptimized - }; - } - function validatePatterns(tokenTypes, validModesNames) { - let errors = []; - const missingResult = findMissingPatterns(tokenTypes); - errors = errors.concat(missingResult.errors); - const invalidResult = findInvalidPatterns(missingResult.valid); - const validTokenTypes = invalidResult.valid; - errors = errors.concat(invalidResult.errors); - errors = errors.concat(validateRegExpPattern(validTokenTypes)); - errors = errors.concat(findInvalidGroupType(validTokenTypes)); - errors = errors.concat(findModesThatDoNotExist(validTokenTypes, validModesNames)); - errors = errors.concat(findUnreachablePatterns(validTokenTypes)); - return errors; - } - function validateRegExpPattern(tokenTypes) { - let errors = []; - const withRegExpPatterns = filter(tokenTypes, (currTokType) => isRegExp$1(currTokType[PATTERN])); - errors = errors.concat(findEndOfInputAnchor(withRegExpPatterns)); - errors = errors.concat(findStartOfInputAnchor(withRegExpPatterns)); - errors = errors.concat(findUnsupportedFlags(withRegExpPatterns)); - errors = errors.concat(findDuplicatePatterns(withRegExpPatterns)); - errors = errors.concat(findEmptyMatchRegExps(withRegExpPatterns)); - return errors; - } - function findMissingPatterns(tokenTypes) { - const tokenTypesWithMissingPattern = filter(tokenTypes, (currType) => { - return !has(currType, PATTERN); - }); - return { - errors: map(tokenTypesWithMissingPattern, (currType) => { - return { - message: "Token Type: ->" + currType.name + "<- missing static 'PATTERN' property", - type: LexerDefinitionErrorType.MISSING_PATTERN, - tokenTypes: [currType] - }; - }), - valid: difference$1(tokenTypes, tokenTypesWithMissingPattern) - }; - } - function findInvalidPatterns(tokenTypes) { - const tokenTypesWithInvalidPattern = filter(tokenTypes, (currType) => { - const pattern = currType[PATTERN]; - return !isRegExp$1(pattern) && !isFunction(pattern) && !has(pattern, "exec") && !isString(pattern); - }); - return { - errors: map(tokenTypesWithInvalidPattern, (currType) => { - return { - message: "Token Type: ->" + currType.name + "<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.", - type: LexerDefinitionErrorType.INVALID_PATTERN, - tokenTypes: [currType] - }; - }), - valid: difference$1(tokenTypes, tokenTypesWithInvalidPattern) - }; - } - const end_of_input = /[^\\][$]/; - function findEndOfInputAnchor(tokenTypes) { - class EndAnchorFinder extends BaseRegExpVisitor { - constructor() { - super(...arguments); - this.found = false; - } - visitEndAnchor(node) { - this.found = true; - } - } - return map(filter(tokenTypes, (currType) => { - const pattern = currType.PATTERN; - try { - const regexpAst = getRegExpAst(pattern); - const endAnchorVisitor = new EndAnchorFinder(); - endAnchorVisitor.visit(regexpAst); - return endAnchorVisitor.found; - } catch (e) { - return end_of_input.test(pattern.source); - } - }), (currType) => { - return { - message: "Unexpected RegExp Anchor Error:\n Token Type: ->" + currType.name + "<- static 'PATTERN' cannot contain end of input anchor '$'\n See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.", - type: LexerDefinitionErrorType.EOI_ANCHOR_FOUND, - tokenTypes: [currType] - }; - }); - } - function findEmptyMatchRegExps(tokenTypes) { - return map(filter(tokenTypes, (currType) => { - return currType.PATTERN.test(""); - }), (currType) => { - return { - message: "Token Type: ->" + currType.name + "<- static 'PATTERN' must not match an empty string", - type: LexerDefinitionErrorType.EMPTY_MATCH_PATTERN, - tokenTypes: [currType] - }; - }); - } - const start_of_input = /[^\\[][\^]|^\^/; - function findStartOfInputAnchor(tokenTypes) { - class StartAnchorFinder extends BaseRegExpVisitor { - constructor() { - super(...arguments); - this.found = false; - } - visitStartAnchor(node) { - this.found = true; - } - } - return map(filter(tokenTypes, (currType) => { - const pattern = currType.PATTERN; - try { - const regexpAst = getRegExpAst(pattern); - const startAnchorVisitor = new StartAnchorFinder(); - startAnchorVisitor.visit(regexpAst); - return startAnchorVisitor.found; - } catch (e) { - return start_of_input.test(pattern.source); - } - }), (currType) => { - return { - message: "Unexpected RegExp Anchor Error:\n Token Type: ->" + currType.name + "<- static 'PATTERN' cannot contain start of input anchor '^'\n See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.", - type: LexerDefinitionErrorType.SOI_ANCHOR_FOUND, - tokenTypes: [currType] - }; - }); - } - function findUnsupportedFlags(tokenTypes) { - return map(filter(tokenTypes, (currType) => { - const pattern = currType[PATTERN]; - return pattern instanceof RegExp && (pattern.multiline || pattern.global); - }), (currType) => { - return { - message: "Token Type: ->" + currType.name + "<- static 'PATTERN' may NOT contain global('g') or multiline('m')", - type: LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND, - tokenTypes: [currType] - }; - }); - } - function findDuplicatePatterns(tokenTypes) { - const found = []; - let identicalPatterns = map(tokenTypes, (outerType) => { - return reduce(tokenTypes, (result, innerType) => { - if (outerType.PATTERN.source === innerType.PATTERN.source && !includes(found, innerType) && innerType.PATTERN !== Lexer2.NA) { - found.push(innerType); - result.push(innerType); - return result; - } - return result; - }, []); - }); - identicalPatterns = compact(identicalPatterns); - return map(filter(identicalPatterns, (currIdenticalSet) => { - return currIdenticalSet.length > 1; - }), (setOfIdentical) => { - const tokenTypeNames = map(setOfIdentical, (currType) => { - return currType.name; - }); - return { - message: `The same RegExp pattern ->${head(setOfIdentical).PATTERN}<-has been used in all of the following Token Types: ${tokenTypeNames.join(", ")} <-`, - type: LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND, - tokenTypes: setOfIdentical - }; - }); - } - function findInvalidGroupType(tokenTypes) { - return map(filter(tokenTypes, (clazz) => { - if (!has(clazz, "GROUP")) return false; - const group = clazz.GROUP; - return group !== Lexer2.SKIPPED && group !== Lexer2.NA && !isString(group); - }), (currType) => { - return { - message: "Token Type: ->" + currType.name + "<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String", - type: LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND, - tokenTypes: [currType] - }; - }); - } - function findModesThatDoNotExist(tokenTypes, validModes) { - return map(filter(tokenTypes, (clazz) => { - return clazz.PUSH_MODE !== void 0 && !includes(validModes, clazz.PUSH_MODE); - }), (tokType) => { - return { - message: `Token Type: ->${tokType.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${tokType.PUSH_MODE}<-which does not exist`, - type: LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST, - tokenTypes: [tokType] - }; - }); - } - function findUnreachablePatterns(tokenTypes) { - const errors = []; - const canBeTested = reduce(tokenTypes, (result, tokType, idx) => { - const pattern = tokType.PATTERN; - if (pattern === Lexer2.NA) return result; - if (isString(pattern)) result.push({ - str: pattern, - idx, - tokenType: tokType - }); - else if (isRegExp$1(pattern) && noMetaChar(pattern)) result.push({ - str: pattern.source, - idx, - tokenType: tokType - }); - return result; - }, []); - forEach(tokenTypes, (tokType, testIdx) => { - forEach(canBeTested, ({ str, idx, tokenType }) => { - if (testIdx < idx && testTokenType(str, tokType.PATTERN)) { - const msg = `Token: ->${tokenType.name}<- can never be matched. -Because it appears AFTER the Token Type ->${tokType.name}<-in the lexer's definition. -See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`; - errors.push({ - message: msg, - type: LexerDefinitionErrorType.UNREACHABLE_PATTERN, - tokenTypes: [tokType, tokenType] - }); - } - }); - }); - return errors; - } - function testTokenType(str, pattern) { - if (isRegExp$1(pattern)) { - const regExpArray = pattern.exec(str); - return regExpArray !== null && regExpArray.index === 0; - } else if (isFunction(pattern)) return pattern(str, 0, [], {}); - else if (has(pattern, "exec")) return pattern.exec(str, 0, [], {}); - else if (typeof pattern === "string") return pattern === str; - else throw Error("non exhaustive match"); - } - function noMetaChar(regExp) { - return find$1([ - ".", - "\\", - "[", - "]", - "|", - "^", - "$", - "(", - ")", - "?", - "*", - "+", - "{" - ], (char) => regExp.source.indexOf(char) !== -1) === void 0; - } - function addStartOfInput(pattern) { - const flags = pattern.ignoreCase ? "i" : ""; - return new RegExp(`^(?:${pattern.source})`, flags); - } - function addStickyFlag(pattern) { - const flags = pattern.ignoreCase ? "iy" : "y"; - return new RegExp(`${pattern.source}`, flags); - } - function performRuntimeChecks(lexerDefinition, trackLines, lineTerminatorCharacters) { - const errors = []; - if (!has(lexerDefinition, DEFAULT_MODE)) errors.push({ - message: "A MultiMode Lexer cannot be initialized without a <defaultMode> property in its definition\n", - type: LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE - }); - if (!has(lexerDefinition, MODES)) errors.push({ - message: "A MultiMode Lexer cannot be initialized without a <modes> property in its definition\n", - type: LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY - }); - if (has(lexerDefinition, MODES) && has(lexerDefinition, DEFAULT_MODE) && !has(lexerDefinition.modes, lexerDefinition.defaultMode)) errors.push({ - message: `A MultiMode Lexer cannot be initialized with a ${DEFAULT_MODE}: <${lexerDefinition.defaultMode}>which does not exist -`, - type: LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST - }); - if (has(lexerDefinition, MODES)) forEach(lexerDefinition.modes, (currModeValue, currModeName) => { - forEach(currModeValue, (currTokType, currIdx) => { - if (isUndefined(currTokType)) errors.push({ - message: `A Lexer cannot be initialized using an undefined Token Type. Mode:<${currModeName}> at index: <${currIdx}> -`, - type: LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED - }); - else if (has(currTokType, "LONGER_ALT")) forEach(isArray$1(currTokType.LONGER_ALT) ? currTokType.LONGER_ALT : [currTokType.LONGER_ALT], (currLongerAlt) => { - if (!isUndefined(currLongerAlt) && !includes(currModeValue, currLongerAlt)) errors.push({ - message: `A MultiMode Lexer cannot be initialized with a longer_alt <${currLongerAlt.name}> on token <${currTokType.name}> outside of mode <${currModeName}> -`, - type: LexerDefinitionErrorType.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE - }); - }); - }); - }); - return errors; - } - function performWarningRuntimeChecks(lexerDefinition, trackLines, lineTerminatorCharacters) { - const warnings = []; - let hasAnyLineBreak = false; - const concreteTokenTypes = reject(compact(flatten(values(lexerDefinition.modes))), (currType) => currType[PATTERN] === Lexer2.NA); - const terminatorCharCodes = getCharCodes(lineTerminatorCharacters); - if (trackLines) forEach(concreteTokenTypes, (tokType) => { - const currIssue = checkLineBreaksIssues(tokType, terminatorCharCodes); - if (currIssue !== false) { - const warningDescriptor = { - message: buildLineBreakIssueMessage(tokType, currIssue), - type: currIssue.issue, - tokenType: tokType - }; - warnings.push(warningDescriptor); - } else if (has(tokType, "LINE_BREAKS")) { - if (tokType.LINE_BREAKS === true) hasAnyLineBreak = true; - } else if (canMatchCharCode(terminatorCharCodes, tokType.PATTERN)) hasAnyLineBreak = true; - }); - if (trackLines && !hasAnyLineBreak) warnings.push({ - message: "Warning: No LINE_BREAKS Found.\n This Lexer has been defined to track line and column information,\n But none of the Token Types can be identified as matching a line terminator.\n See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS \n for details.", - type: LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS - }); - return warnings; - } - function cloneEmptyGroups(emptyGroups) { - const clonedResult = {}; - forEach(keys(emptyGroups), (currKey) => { - const currGroupValue = emptyGroups[currKey]; - if (isArray$1(currGroupValue)) clonedResult[currKey] = []; - else throw Error("non exhaustive match"); - }); - return clonedResult; - } - function isCustomPattern(tokenType) { - const pattern = tokenType.PATTERN; - if (isRegExp$1(pattern)) return false; - else if (isFunction(pattern)) return true; - else if (has(pattern, "exec")) return true; - else if (isString(pattern)) return false; - else throw Error("non exhaustive match"); - } - function isShortPattern(pattern) { - if (isString(pattern) && pattern.length === 1) return pattern.charCodeAt(0); - else return false; - } - const LineTerminatorOptimizedTester = { - test: function(text) { - const len = text.length; - for (let i = this.lastIndex; i < len; i++) { - const c = text.charCodeAt(i); - if (c === 10) { - this.lastIndex = i + 1; - return true; - } else if (c === 13) { - if (text.charCodeAt(i + 1) === 10) this.lastIndex = i + 2; - else this.lastIndex = i + 1; - return true; - } - } - return false; - }, - lastIndex: 0 - }; - function checkLineBreaksIssues(tokType, lineTerminatorCharCodes) { - if (has(tokType, "LINE_BREAKS")) return false; - else if (isRegExp$1(tokType.PATTERN)) { - try { - canMatchCharCode(lineTerminatorCharCodes, tokType.PATTERN); - } catch (e) { - return { - issue: LexerDefinitionErrorType.IDENTIFY_TERMINATOR, - errMsg: e.message - }; - } - return false; - } else if (isString(tokType.PATTERN)) return false; - else if (isCustomPattern(tokType)) return { issue: LexerDefinitionErrorType.CUSTOM_LINE_BREAK }; - else throw Error("non exhaustive match"); - } - function buildLineBreakIssueMessage(tokType, details) { - if (details.issue === LexerDefinitionErrorType.IDENTIFY_TERMINATOR) return `Warning: unable to identify line terminator usage in pattern. - The problem is in the <${tokType.name}> Token Type - Root cause: ${details.errMsg}. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR`; - else if (details.issue === LexerDefinitionErrorType.CUSTOM_LINE_BREAK) return `Warning: A Custom Token Pattern should specify the <line_breaks> option. - The problem is in the <${tokType.name}> Token Type - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK`; - else throw Error("non exhaustive match"); - } - function getCharCodes(charsOrCodes) { - return map(charsOrCodes, (numOrString) => { - if (isString(numOrString)) return numOrString.charCodeAt(0); - else return numOrString; - }); - } - function addToMapOfArrays(map2, key, value) { - if (map2[key] === void 0) map2[key] = [value]; - else map2[key].push(value); - } - const minOptimizationVal = 256; - let charCodeToOptimizedIdxMap = []; - function charCodeToOptimizedIndex(charCode) { - return charCode < minOptimizationVal ? charCode : charCodeToOptimizedIdxMap[charCode]; - } - function initCharCodeToOptimizedIndexMap() { - if (isEmpty(charCodeToOptimizedIdxMap)) { - charCodeToOptimizedIdxMap = new Array(65536); - for (let i = 0; i < 65536; i++) charCodeToOptimizedIdxMap[i] = i > 255 ? 255 + ~~(i / 255) : i; - } - } - function tokenStructuredMatcher(tokInstance, tokConstructor) { - const instanceType = tokInstance.tokenTypeIdx; - if (instanceType === tokConstructor.tokenTypeIdx) return true; - else return tokConstructor.isParent === true && tokConstructor.categoryMatchesMap[instanceType] === true; - } - function tokenStructuredMatcherNoCategories(token, tokType) { - return token.tokenTypeIdx === tokType.tokenTypeIdx; - } - let tokenShortNameIdx = 1; - const tokenIdxToClass = {}; - function augmentTokenTypes(tokenTypes) { - const tokenTypesAndParents = expandCategories(tokenTypes); - assignTokenDefaultProps(tokenTypesAndParents); - assignCategoriesMapProp(tokenTypesAndParents); - assignCategoriesTokensProp(tokenTypesAndParents); - forEach(tokenTypesAndParents, (tokType) => { - tokType.isParent = tokType.categoryMatches.length > 0; - }); - } - function expandCategories(tokenTypes) { - let result = clone(tokenTypes); - let categories = tokenTypes; - let searching = true; - while (searching) { - categories = compact(flatten(map(categories, (currTokType) => currTokType.CATEGORIES))); - const newCategories = difference$1(categories, result); - result = result.concat(newCategories); - if (isEmpty(newCategories)) searching = false; - else categories = newCategories; - } - return result; - } - function assignTokenDefaultProps(tokenTypes) { - forEach(tokenTypes, (currTokType) => { - if (!hasShortKeyProperty(currTokType)) { - tokenIdxToClass[tokenShortNameIdx] = currTokType; - currTokType.tokenTypeIdx = tokenShortNameIdx++; - } - if (hasCategoriesProperty(currTokType) && !isArray$1(currTokType.CATEGORIES)) currTokType.CATEGORIES = [currTokType.CATEGORIES]; - if (!hasCategoriesProperty(currTokType)) currTokType.CATEGORIES = []; - if (!hasExtendingTokensTypesProperty(currTokType)) currTokType.categoryMatches = []; - if (!hasExtendingTokensTypesMapProperty(currTokType)) currTokType.categoryMatchesMap = {}; - }); - } - function assignCategoriesTokensProp(tokenTypes) { - forEach(tokenTypes, (currTokType) => { - currTokType.categoryMatches = []; - forEach(currTokType.categoryMatchesMap, (val, key) => { - currTokType.categoryMatches.push(tokenIdxToClass[key].tokenTypeIdx); - }); - }); - } - function assignCategoriesMapProp(tokenTypes) { - forEach(tokenTypes, (currTokType) => { - singleAssignCategoriesToksMap([], currTokType); - }); - } - function singleAssignCategoriesToksMap(path, nextNode) { - forEach(path, (pathNode) => { - nextNode.categoryMatchesMap[pathNode.tokenTypeIdx] = true; - }); - forEach(nextNode.CATEGORIES, (nextCategory) => { - const newPath = path.concat(nextNode); - if (!includes(newPath, nextCategory)) singleAssignCategoriesToksMap(newPath, nextCategory); - }); - } - function hasShortKeyProperty(tokType) { - return has(tokType, "tokenTypeIdx"); - } - function hasCategoriesProperty(tokType) { - return has(tokType, "CATEGORIES"); - } - function hasExtendingTokensTypesProperty(tokType) { - return has(tokType, "categoryMatches"); - } - function hasExtendingTokensTypesMapProperty(tokType) { - return has(tokType, "categoryMatchesMap"); - } - function isTokenType(tokType) { - return has(tokType, "tokenTypeIdx"); - } - const defaultLexerErrorProvider = { - buildUnableToPopLexerModeMessage(token) { - return `Unable to pop Lexer Mode after encountering Token ->${token.image}<- The Mode Stack is empty`; - }, - buildUnexpectedCharactersMessage(fullText, startOffset, length, line, column) { - return `unexpected character: ->${fullText.charAt(startOffset)}<- at offset: ${startOffset}, skipped ${length} characters.`; - } - }; - var LexerDefinitionErrorType; - (function(LexerDefinitionErrorType2) { - LexerDefinitionErrorType2[LexerDefinitionErrorType2["MISSING_PATTERN"] = 0] = "MISSING_PATTERN"; - LexerDefinitionErrorType2[LexerDefinitionErrorType2["INVALID_PATTERN"] = 1] = "INVALID_PATTERN"; - LexerDefinitionErrorType2[LexerDefinitionErrorType2["EOI_ANCHOR_FOUND"] = 2] = "EOI_ANCHOR_FOUND"; - LexerDefinitionErrorType2[LexerDefinitionErrorType2["UNSUPPORTED_FLAGS_FOUND"] = 3] = "UNSUPPORTED_FLAGS_FOUND"; - LexerDefinitionErrorType2[LexerDefinitionErrorType2["DUPLICATE_PATTERNS_FOUND"] = 4] = "DUPLICATE_PATTERNS_FOUND"; - LexerDefinitionErrorType2[LexerDefinitionErrorType2["INVALID_GROUP_TYPE_FOUND"] = 5] = "INVALID_GROUP_TYPE_FOUND"; - LexerDefinitionErrorType2[LexerDefinitionErrorType2["PUSH_MODE_DOES_NOT_EXIST"] = 6] = "PUSH_MODE_DOES_NOT_EXIST"; - LexerDefinitionErrorType2[LexerDefinitionErrorType2["MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE"] = 7] = "MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE"; - LexerDefinitionErrorType2[LexerDefinitionErrorType2["MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY"] = 8] = "MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY"; - LexerDefinitionErrorType2[LexerDefinitionErrorType2["MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST"] = 9] = "MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST"; - LexerDefinitionErrorType2[LexerDefinitionErrorType2["LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED"] = 10] = "LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED"; - LexerDefinitionErrorType2[LexerDefinitionErrorType2["SOI_ANCHOR_FOUND"] = 11] = "SOI_ANCHOR_FOUND"; - LexerDefinitionErrorType2[LexerDefinitionErrorType2["EMPTY_MATCH_PATTERN"] = 12] = "EMPTY_MATCH_PATTERN"; - LexerDefinitionErrorType2[LexerDefinitionErrorType2["NO_LINE_BREAKS_FLAGS"] = 13] = "NO_LINE_BREAKS_FLAGS"; - LexerDefinitionErrorType2[LexerDefinitionErrorType2["UNREACHABLE_PATTERN"] = 14] = "UNREACHABLE_PATTERN"; - LexerDefinitionErrorType2[LexerDefinitionErrorType2["IDENTIFY_TERMINATOR"] = 15] = "IDENTIFY_TERMINATOR"; - LexerDefinitionErrorType2[LexerDefinitionErrorType2["CUSTOM_LINE_BREAK"] = 16] = "CUSTOM_LINE_BREAK"; - LexerDefinitionErrorType2[LexerDefinitionErrorType2["MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE"] = 17] = "MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE"; - })(LexerDefinitionErrorType || (LexerDefinitionErrorType = {})); - const DEFAULT_LEXER_CONFIG = { - deferDefinitionErrorsHandling: false, - positionTracking: "full", - lineTerminatorsPattern: /\n|\r\n?/g, - lineTerminatorCharacters: ["\n", "\r"], - ensureOptimizations: false, - safeMode: false, - errorMessageProvider: defaultLexerErrorProvider, - traceInitPerf: false, - skipValidations: false, - recoveryEnabled: true - }; - Object.freeze(DEFAULT_LEXER_CONFIG); - class Lexer2 { - constructor(lexerDefinition, config = DEFAULT_LEXER_CONFIG) { - this.lexerDefinition = lexerDefinition; - this.lexerDefinitionErrors = []; - this.lexerDefinitionWarning = []; - this.patternIdxToConfig = {}; - this.charCodeToPatternIdxToConfig = {}; - this.modes = []; - this.emptyGroups = {}; - this.trackStartLines = true; - this.trackEndLines = true; - this.hasCustom = false; - this.canModeBeOptimized = {}; - this.TRACE_INIT = (phaseDesc, phaseImpl) => { - if (this.traceInitPerf === true) { - this.traceInitIndent++; - const indent = new Array(this.traceInitIndent + 1).join(" "); - if (this.traceInitIndent < this.traceInitMaxIdent) console.log(`${indent}--> <${phaseDesc}>`); - const { time, value } = timer(phaseImpl); - const traceMethod = time > 10 ? console.warn : console.log; - if (this.traceInitIndent < this.traceInitMaxIdent) traceMethod(`${indent}<-- <${phaseDesc}> time: ${time}ms`); - this.traceInitIndent--; - return value; - } else return phaseImpl(); - }; - if (typeof config === "boolean") throw Error("The second argument to the Lexer constructor is now an ILexerConfig Object.\na boolean 2nd argument is no longer supported"); - this.config = assign$1({}, DEFAULT_LEXER_CONFIG, config); - const traceInitVal = this.config.traceInitPerf; - if (traceInitVal === true) { - this.traceInitMaxIdent = Infinity; - this.traceInitPerf = true; - } else if (typeof traceInitVal === "number") { - this.traceInitMaxIdent = traceInitVal; - this.traceInitPerf = true; - } - this.traceInitIndent = -1; - this.TRACE_INIT("Lexer Constructor", () => { - let actualDefinition; - let hasOnlySingleMode = true; - this.TRACE_INIT("Lexer Config handling", () => { - if (this.config.lineTerminatorsPattern === DEFAULT_LEXER_CONFIG.lineTerminatorsPattern) this.config.lineTerminatorsPattern = LineTerminatorOptimizedTester; - else if (this.config.lineTerminatorCharacters === DEFAULT_LEXER_CONFIG.lineTerminatorCharacters) throw Error("Error: Missing <lineTerminatorCharacters> property on the Lexer config.\n For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS"); - if (config.safeMode && config.ensureOptimizations) throw Error("\"safeMode\" and \"ensureOptimizations\" flags are mutually exclusive."); - this.trackStartLines = /full|onlyStart/i.test(this.config.positionTracking); - this.trackEndLines = /full/i.test(this.config.positionTracking); - if (isArray$1(lexerDefinition)) actualDefinition = { - modes: { defaultMode: clone(lexerDefinition) }, - defaultMode: DEFAULT_MODE - }; - else { - hasOnlySingleMode = false; - actualDefinition = clone(lexerDefinition); - } - }); - if (this.config.skipValidations === false) { - this.TRACE_INIT("performRuntimeChecks", () => { - this.lexerDefinitionErrors = this.lexerDefinitionErrors.concat(performRuntimeChecks(actualDefinition, this.trackStartLines, this.config.lineTerminatorCharacters)); - }); - this.TRACE_INIT("performWarningRuntimeChecks", () => { - this.lexerDefinitionWarning = this.lexerDefinitionWarning.concat(performWarningRuntimeChecks(actualDefinition, this.trackStartLines, this.config.lineTerminatorCharacters)); - }); - } - actualDefinition.modes = actualDefinition.modes ? actualDefinition.modes : {}; - forEach(actualDefinition.modes, (currModeValue, currModeName) => { - actualDefinition.modes[currModeName] = reject(currModeValue, (currTokType) => isUndefined(currTokType)); - }); - const allModeNames = keys(actualDefinition.modes); - forEach(actualDefinition.modes, (currModDef, currModName) => { - this.TRACE_INIT(`Mode: <${currModName}> processing`, () => { - this.modes.push(currModName); - if (this.config.skipValidations === false) this.TRACE_INIT(`validatePatterns`, () => { - this.lexerDefinitionErrors = this.lexerDefinitionErrors.concat(validatePatterns(currModDef, allModeNames)); - }); - if (isEmpty(this.lexerDefinitionErrors)) { - augmentTokenTypes(currModDef); - let currAnalyzeResult; - this.TRACE_INIT(`analyzeTokenTypes`, () => { - currAnalyzeResult = analyzeTokenTypes(currModDef, { - lineTerminatorCharacters: this.config.lineTerminatorCharacters, - positionTracking: config.positionTracking, - ensureOptimizations: config.ensureOptimizations, - safeMode: config.safeMode, - tracer: this.TRACE_INIT - }); - }); - this.patternIdxToConfig[currModName] = currAnalyzeResult.patternIdxToConfig; - this.charCodeToPatternIdxToConfig[currModName] = currAnalyzeResult.charCodeToPatternIdxToConfig; - this.emptyGroups = assign$1({}, this.emptyGroups, currAnalyzeResult.emptyGroups); - this.hasCustom = currAnalyzeResult.hasCustom || this.hasCustom; - this.canModeBeOptimized[currModName] = currAnalyzeResult.canBeOptimized; - } - }); - }); - this.defaultMode = actualDefinition.defaultMode; - if (!isEmpty(this.lexerDefinitionErrors) && !this.config.deferDefinitionErrorsHandling) { - const allErrMessagesString = map(this.lexerDefinitionErrors, (error) => { - return error.message; - }).join("-----------------------\n"); - throw new Error("Errors detected in definition of Lexer:\n" + allErrMessagesString); - } - forEach(this.lexerDefinitionWarning, (warningDescriptor) => { - PRINT_WARNING(warningDescriptor.message); - }); - this.TRACE_INIT("Choosing sub-methods implementations", () => { - if (SUPPORT_STICKY) { - this.chopInput = identity; - this.match = this.matchWithTest; - } else { - this.updateLastIndex = noop; - this.match = this.matchWithExec; - } - if (hasOnlySingleMode) this.handleModes = noop; - if (this.trackStartLines === false) this.computeNewColumn = identity; - if (this.trackEndLines === false) this.updateTokenEndLineColumnLocation = noop; - if (/full/i.test(this.config.positionTracking)) this.createTokenInstance = this.createFullToken; - else if (/onlyStart/i.test(this.config.positionTracking)) this.createTokenInstance = this.createStartOnlyToken; - else if (/onlyOffset/i.test(this.config.positionTracking)) this.createTokenInstance = this.createOffsetOnlyToken; - else throw Error(`Invalid <positionTracking> config option: "${this.config.positionTracking}"`); - if (this.hasCustom) { - this.addToken = this.addTokenUsingPush; - this.handlePayload = this.handlePayloadWithCustom; - } else { - this.addToken = this.addTokenUsingMemberAccess; - this.handlePayload = this.handlePayloadNoCustom; - } - }); - this.TRACE_INIT("Failed Optimization Warnings", () => { - const unOptimizedModes = reduce(this.canModeBeOptimized, (cannotBeOptimized, canBeOptimized, modeName) => { - if (canBeOptimized === false) cannotBeOptimized.push(modeName); - return cannotBeOptimized; - }, []); - if (config.ensureOptimizations && !isEmpty(unOptimizedModes)) throw Error(`Lexer Modes: < ${unOptimizedModes.join(", ")} > cannot be optimized. - Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. - Or inspect the console log for details on how to resolve these issues.`); - }); - this.TRACE_INIT("clearRegExpParserCache", () => { - clearRegExpParserCache(); - }); - this.TRACE_INIT("toFastProperties", () => { - toFastProperties(this); - }); - }); - } - tokenize(text, initialMode = this.defaultMode) { - if (!isEmpty(this.lexerDefinitionErrors)) { - const allErrMessagesString = map(this.lexerDefinitionErrors, (error) => { - return error.message; - }).join("-----------------------\n"); - throw new Error("Unable to Tokenize because Errors detected in definition of Lexer:\n" + allErrMessagesString); - } - return this.tokenizeInternal(text, initialMode); - } - tokenizeInternal(text, initialMode) { - let i, j, k, matchAltImage, longerAlt, matchedImage, payload, altPayload, imageLength, group, tokType, newToken, errLength, msg, match; - const orgText = text; - const orgLength = orgText.length; - let offset = 0; - let matchedTokensIndex = 0; - const guessedNumberOfTokens = this.hasCustom ? 0 : Math.floor(text.length / 10); - const matchedTokens = new Array(guessedNumberOfTokens); - const errors = []; - let line = this.trackStartLines ? 1 : void 0; - let column = this.trackStartLines ? 1 : void 0; - const groups = cloneEmptyGroups(this.emptyGroups); - const trackLines = this.trackStartLines; - const lineTerminatorPattern = this.config.lineTerminatorsPattern; - let currModePatternsLength = 0; - let patternIdxToConfig = []; - let currCharCodeToPatternIdxToConfig = []; - const modeStack = []; - const emptyArray = []; - Object.freeze(emptyArray); - let getPossiblePatterns; - function getPossiblePatternsSlow() { - return patternIdxToConfig; - } - function getPossiblePatternsOptimized(charCode) { - const optimizedCharIdx = charCodeToOptimizedIndex(charCode); - const possiblePatterns = currCharCodeToPatternIdxToConfig[optimizedCharIdx]; - if (possiblePatterns === void 0) return emptyArray; - else return possiblePatterns; - } - const pop_mode = (popToken) => { - if (modeStack.length === 1 && popToken.tokenType.PUSH_MODE === void 0) { - const msg2 = this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(popToken); - errors.push({ - offset: popToken.startOffset, - line: popToken.startLine, - column: popToken.startColumn, - length: popToken.image.length, - message: msg2 - }); - } else { - modeStack.pop(); - const newMode = last(modeStack); - patternIdxToConfig = this.patternIdxToConfig[newMode]; - currCharCodeToPatternIdxToConfig = this.charCodeToPatternIdxToConfig[newMode]; - currModePatternsLength = patternIdxToConfig.length; - const modeCanBeOptimized = this.canModeBeOptimized[newMode] && this.config.safeMode === false; - if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) getPossiblePatterns = getPossiblePatternsOptimized; - else getPossiblePatterns = getPossiblePatternsSlow; - } - }; - function push_mode(newMode) { - modeStack.push(newMode); - currCharCodeToPatternIdxToConfig = this.charCodeToPatternIdxToConfig[newMode]; - patternIdxToConfig = this.patternIdxToConfig[newMode]; - currModePatternsLength = patternIdxToConfig.length; - currModePatternsLength = patternIdxToConfig.length; - const modeCanBeOptimized = this.canModeBeOptimized[newMode] && this.config.safeMode === false; - if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) getPossiblePatterns = getPossiblePatternsOptimized; - else getPossiblePatterns = getPossiblePatternsSlow; - } - push_mode.call(this, initialMode); - let currConfig; - const recoveryEnabled = this.config.recoveryEnabled; - while (offset < orgLength) { - matchedImage = null; - const nextCharCode = orgText.charCodeAt(offset); - const chosenPatternIdxToConfig = getPossiblePatterns(nextCharCode); - const chosenPatternsLength = chosenPatternIdxToConfig.length; - for (i = 0; i < chosenPatternsLength; i++) { - currConfig = chosenPatternIdxToConfig[i]; - const currPattern = currConfig.pattern; - payload = null; - const singleCharCode = currConfig.short; - if (singleCharCode !== false) { - if (nextCharCode === singleCharCode) matchedImage = currPattern; - } else if (currConfig.isCustom === true) { - match = currPattern.exec(orgText, offset, matchedTokens, groups); - if (match !== null) { - matchedImage = match[0]; - if (match.payload !== void 0) payload = match.payload; - } else matchedImage = null; - } else { - this.updateLastIndex(currPattern, offset); - matchedImage = this.match(currPattern, text, offset); - } - if (matchedImage !== null) { - longerAlt = currConfig.longerAlt; - if (longerAlt !== void 0) { - const longerAltLength = longerAlt.length; - for (k = 0; k < longerAltLength; k++) { - const longerAltConfig = patternIdxToConfig[longerAlt[k]]; - const longerAltPattern = longerAltConfig.pattern; - altPayload = null; - if (longerAltConfig.isCustom === true) { - match = longerAltPattern.exec(orgText, offset, matchedTokens, groups); - if (match !== null) { - matchAltImage = match[0]; - if (match.payload !== void 0) altPayload = match.payload; - } else matchAltImage = null; - } else { - this.updateLastIndex(longerAltPattern, offset); - matchAltImage = this.match(longerAltPattern, text, offset); - } - if (matchAltImage && matchAltImage.length > matchedImage.length) { - matchedImage = matchAltImage; - payload = altPayload; - currConfig = longerAltConfig; - break; - } - } - } - break; - } - } - if (matchedImage !== null) { - imageLength = matchedImage.length; - group = currConfig.group; - if (group !== void 0) { - tokType = currConfig.tokenTypeIdx; - newToken = this.createTokenInstance(matchedImage, offset, tokType, currConfig.tokenType, line, column, imageLength); - this.handlePayload(newToken, payload); - if (group === false) matchedTokensIndex = this.addToken(matchedTokens, matchedTokensIndex, newToken); - else groups[group].push(newToken); - } - text = this.chopInput(text, imageLength); - offset = offset + imageLength; - column = this.computeNewColumn(column, imageLength); - if (trackLines === true && currConfig.canLineTerminator === true) { - let numOfLTsInMatch = 0; - let foundTerminator; - let lastLTEndOffset; - lineTerminatorPattern.lastIndex = 0; - do { - foundTerminator = lineTerminatorPattern.test(matchedImage); - if (foundTerminator === true) { - lastLTEndOffset = lineTerminatorPattern.lastIndex - 1; - numOfLTsInMatch++; - } - } while (foundTerminator === true); - if (numOfLTsInMatch !== 0) { - line = line + numOfLTsInMatch; - column = imageLength - lastLTEndOffset; - this.updateTokenEndLineColumnLocation(newToken, group, lastLTEndOffset, numOfLTsInMatch, line, column, imageLength); - } - } - this.handleModes(currConfig, pop_mode, push_mode, newToken); - } else { - const errorStartOffset = offset; - const errorLine = line; - const errorColumn = column; - let foundResyncPoint = recoveryEnabled === false; - while (foundResyncPoint === false && offset < orgLength) { - text = this.chopInput(text, 1); - offset++; - for (j = 0; j < currModePatternsLength; j++) { - const currConfig2 = patternIdxToConfig[j]; - const currPattern = currConfig2.pattern; - const singleCharCode = currConfig2.short; - if (singleCharCode !== false) { - if (orgText.charCodeAt(offset) === singleCharCode) foundResyncPoint = true; - } else if (currConfig2.isCustom === true) foundResyncPoint = currPattern.exec(orgText, offset, matchedTokens, groups) !== null; - else { - this.updateLastIndex(currPattern, offset); - foundResyncPoint = currPattern.exec(text) !== null; - } - if (foundResyncPoint === true) break; - } - } - errLength = offset - errorStartOffset; - column = this.computeNewColumn(column, errLength); - msg = this.config.errorMessageProvider.buildUnexpectedCharactersMessage(orgText, errorStartOffset, errLength, errorLine, errorColumn); - errors.push({ - offset: errorStartOffset, - line: errorLine, - column: errorColumn, - length: errLength, - message: msg - }); - if (recoveryEnabled === false) break; - } - } - if (!this.hasCustom) matchedTokens.length = matchedTokensIndex; - return { - tokens: matchedTokens, - groups, - errors - }; - } - handleModes(config, pop_mode, push_mode, newToken) { - if (config.pop === true) { - const pushMode = config.push; - pop_mode(newToken); - if (pushMode !== void 0) push_mode.call(this, pushMode); - } else if (config.push !== void 0) push_mode.call(this, config.push); - } - chopInput(text, length) { - return text.substring(length); - } - updateLastIndex(regExp, newLastIndex) { - regExp.lastIndex = newLastIndex; - } - updateTokenEndLineColumnLocation(newToken, group, lastLTIdx, numOfLTsInMatch, line, column, imageLength) { - let lastCharIsLT, fixForEndingInLT; - if (group !== void 0) { - lastCharIsLT = lastLTIdx === imageLength - 1; - fixForEndingInLT = lastCharIsLT ? -1 : 0; - if (!(numOfLTsInMatch === 1 && lastCharIsLT === true)) { - newToken.endLine = line + fixForEndingInLT; - newToken.endColumn = column - 1 + -fixForEndingInLT; - } - } - } - computeNewColumn(oldColumn, imageLength) { - return oldColumn + imageLength; - } - createOffsetOnlyToken(image, startOffset, tokenTypeIdx, tokenType) { - return { - image, - startOffset, - tokenTypeIdx, - tokenType - }; - } - createStartOnlyToken(image, startOffset, tokenTypeIdx, tokenType, startLine, startColumn) { - return { - image, - startOffset, - startLine, - startColumn, - tokenTypeIdx, - tokenType - }; - } - createFullToken(image, startOffset, tokenTypeIdx, tokenType, startLine, startColumn, imageLength) { - return { - image, - startOffset, - endOffset: startOffset + imageLength - 1, - startLine, - endLine: startLine, - startColumn, - endColumn: startColumn + imageLength - 1, - tokenTypeIdx, - tokenType - }; - } - addTokenUsingPush(tokenVector, index, tokenToAdd) { - tokenVector.push(tokenToAdd); - return index; - } - addTokenUsingMemberAccess(tokenVector, index, tokenToAdd) { - tokenVector[index] = tokenToAdd; - index++; - return index; - } - handlePayloadNoCustom(token, payload) {} - handlePayloadWithCustom(token, payload) { - if (payload !== null) token.payload = payload; - } - matchWithTest(pattern, text, offset) { - if (pattern.test(text) === true) return text.substring(offset, pattern.lastIndex); - return null; - } - matchWithExec(pattern, text) { - const regExpArray = pattern.exec(text); - return regExpArray !== null ? regExpArray[0] : null; - } - } - Lexer2.SKIPPED = "This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace."; - Lexer2.NA = /NOT_APPLICABLE/; - function tokenLabel(tokType) { - if (hasTokenLabel(tokType)) return tokType.LABEL; - else return tokType.name; - } - function hasTokenLabel(obj) { - return isString(obj.LABEL) && obj.LABEL !== ""; - } - const PARENT = "parent"; - const CATEGORIES = "categories"; - const LABEL = "label"; - const GROUP = "group"; - const PUSH_MODE = "push_mode"; - const POP_MODE = "pop_mode"; - const LONGER_ALT = "longer_alt"; - const LINE_BREAKS = "line_breaks"; - const START_CHARS_HINT = "start_chars_hint"; - function createToken2(config) { - return createTokenInternal(config); - } - function createTokenInternal(config) { - const pattern = config.pattern; - const tokenType = {}; - tokenType.name = config.name; - if (!isUndefined(pattern)) tokenType.PATTERN = pattern; - if (has(config, PARENT)) throw "The parent property is no longer supported.\nSee: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details."; - if (has(config, CATEGORIES)) tokenType.CATEGORIES = config[CATEGORIES]; - augmentTokenTypes([tokenType]); - if (has(config, LABEL)) tokenType.LABEL = config[LABEL]; - if (has(config, GROUP)) tokenType.GROUP = config[GROUP]; - if (has(config, POP_MODE)) tokenType.POP_MODE = config[POP_MODE]; - if (has(config, PUSH_MODE)) tokenType.PUSH_MODE = config[PUSH_MODE]; - if (has(config, LONGER_ALT)) tokenType.LONGER_ALT = config[LONGER_ALT]; - if (has(config, LINE_BREAKS)) tokenType.LINE_BREAKS = config[LINE_BREAKS]; - if (has(config, START_CHARS_HINT)) tokenType.START_CHARS_HINT = config[START_CHARS_HINT]; - return tokenType; - } - const EOF = createToken2({ - name: "EOF", - pattern: Lexer2.NA - }); - augmentTokenTypes([EOF]); - function createTokenInstance(tokType, image, startOffset, endOffset, startLine, endLine, startColumn, endColumn) { - return { - image, - startOffset, - endOffset, - startLine, - endLine, - startColumn, - endColumn, - tokenTypeIdx: tokType.tokenTypeIdx, - tokenType: tokType - }; - } - function tokenMatcher(token, tokType) { - return tokenStructuredMatcher(token, tokType); - } - const defaultParserErrorProvider = { - buildMismatchTokenMessage({ expected, actual, previous, ruleName }) { - return `Expecting ${hasTokenLabel(expected) ? `--> ${tokenLabel(expected)} <--` : `token of type --> ${expected.name} <--`} but found --> '${actual.image}' <--`; - }, - buildNotAllInputParsedMessage({ firstRedundant, ruleName }) { - return "Redundant input, expecting EOF but found: " + firstRedundant.image; - }, - buildNoViableAltMessage({ expectedPathsPerAlt, actual, previous, customUserDescription, ruleName }) { - const errPrefix = "Expecting: "; - const errSuffix = "\nbut found: '" + head(actual).image + "'"; - if (customUserDescription) return errPrefix + customUserDescription + errSuffix; - else return `Expecting: one of these possible Token sequences: -${map(map(reduce(expectedPathsPerAlt, (result, currAltPaths) => result.concat(currAltPaths), []), (currPath) => `[${map(currPath, (currTokenType) => tokenLabel(currTokenType)).join(", ")}]`), (itemMsg, idx) => ` ${idx + 1}. ${itemMsg}`).join("\n")}` + errSuffix; - }, - buildEarlyExitMessage({ expectedIterationPaths, actual, customUserDescription, ruleName }) { - const errPrefix = "Expecting: "; - const errSuffix = "\nbut found: '" + head(actual).image + "'"; - if (customUserDescription) return errPrefix + customUserDescription + errSuffix; - else return `Expecting: expecting at least one iteration which starts with one of these possible Token sequences:: - <${map(expectedIterationPaths, (currPath) => `[${map(currPath, (currTokenType) => tokenLabel(currTokenType)).join(",")}]`).join(" ,")}>` + errSuffix; - } - }; - Object.freeze(defaultParserErrorProvider); - const defaultGrammarResolverErrorProvider = { buildRuleNotFoundError(topLevelRule, undefinedRule) { - return "Invalid grammar, reference to a rule which is not defined: ->" + undefinedRule.nonTerminalName + "<-\ninside top level rule: ->" + topLevelRule.name + "<-"; - } }; - const defaultGrammarValidatorErrorProvider = { - buildDuplicateFoundError(topLevelRule, duplicateProds) { - function getExtraProductionArgument2(prod) { - if (prod instanceof Terminal) return prod.terminalType.name; - else if (prod instanceof NonTerminal) return prod.nonTerminalName; - else return ""; - } - const topLevelName = topLevelRule.name; - const duplicateProd = head(duplicateProds); - const index = duplicateProd.idx; - const dslName = getProductionDslName(duplicateProd); - const extraArgument = getExtraProductionArgument2(duplicateProd); - let msg = `->${dslName}${index > 0 ? index : ""}<- ${extraArgument ? `with argument: ->${extraArgument}<-` : ""} - appears more than once (${duplicateProds.length} times) in the top level rule: ->${topLevelName}<-. - For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES - `; - msg = msg.replace(/[ \t]+/g, " "); - msg = msg.replace(/\s\s+/g, "\n"); - return msg; - }, - buildNamespaceConflictError(rule) { - return `Namespace conflict found in grammar. -The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${rule.name}>. -To resolve this make sure each Terminal and Non-Terminal names are unique -This is easy to accomplish by using the convention that Terminal names start with an uppercase letter -and Non-Terminal names start with a lower case letter.`; - }, - buildAlternationPrefixAmbiguityError(options) { - const pathMsg = map(options.prefixPath, (currTok) => tokenLabel(currTok)).join(", "); - const occurrence = options.alternation.idx === 0 ? "" : options.alternation.idx; - return `Ambiguous alternatives: <${options.ambiguityIndices.join(" ,")}> due to common lookahead prefix -in <OR${occurrence}> inside <${options.topLevelRule.name}> Rule, -<${pathMsg}> may appears as a prefix path in all these alternatives. -See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX -For Further details.`; - }, - buildAlternationAmbiguityError(options) { - const pathMsg = map(options.prefixPath, (currtok) => tokenLabel(currtok)).join(", "); - const occurrence = options.alternation.idx === 0 ? "" : options.alternation.idx; - let currMessage = `Ambiguous Alternatives Detected: <${options.ambiguityIndices.join(" ,")}> in <OR${occurrence}> inside <${options.topLevelRule.name}> Rule, -<${pathMsg}> may appears as a prefix path in all these alternatives. -`; - currMessage = currMessage + `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES -For Further details.`; - return currMessage; - }, - buildEmptyRepetitionError(options) { - let dslName = getProductionDslName(options.repetition); - if (options.repetition.idx !== 0) dslName += options.repetition.idx; - return `The repetition <${dslName}> within Rule <${options.topLevelRule.name}> can never consume any tokens. -This could lead to an infinite loop.`; - }, - buildTokenNameError(options) { - return "deprecated"; - }, - buildEmptyAlternationError(options) { - return `Ambiguous empty alternative: <${options.emptyChoiceIdx + 1}> in <OR${options.alternation.idx}> inside <${options.topLevelRule.name}> Rule. -Only the last alternative may be an empty alternative.`; - }, - buildTooManyAlternativesError(options) { - return `An Alternation cannot have more than 256 alternatives: -<OR${options.alternation.idx}> inside <${options.topLevelRule.name}> Rule. - has ${options.alternation.definition.length + 1} alternatives.`; - }, - buildLeftRecursionError(options) { - const ruleName = options.topLevelRule.name; - return `Left Recursion found in grammar. -rule: <${ruleName}> can be invoked from itself (directly or indirectly) -without consuming any Tokens. The grammar path that causes this is: - ${`${ruleName} --> ${map(options.leftRecursionPath, (currRule) => currRule.name).concat([ruleName]).join(" --> ")}`} - To fix this refactor your grammar to remove the left recursion. -see: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`; - }, - buildInvalidRuleNameError(options) { - return "deprecated"; - }, - buildDuplicateRuleNameError(options) { - let ruleName; - if (options.topLevelRule instanceof Rule) ruleName = options.topLevelRule.name; - else ruleName = options.topLevelRule; - return `Duplicate definition, rule: ->${ruleName}<- is already defined in the grammar: ->${options.grammarName}<-`; - } - }; - function resolveGrammar$1(topLevels, errMsgProvider) { - const refResolver = new GastRefResolverVisitor(topLevels, errMsgProvider); - refResolver.resolveRefs(); - return refResolver.errors; - } - class GastRefResolverVisitor extends GAstVisitor { - constructor(nameToTopRule, errMsgProvider) { - super(); - this.nameToTopRule = nameToTopRule; - this.errMsgProvider = errMsgProvider; - this.errors = []; - } - resolveRefs() { - forEach(values(this.nameToTopRule), (prod) => { - this.currTopLevel = prod; - prod.accept(this); - }); - } - visitNonTerminal(node) { - const ref = this.nameToTopRule[node.nonTerminalName]; - if (!ref) { - const msg = this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel, node); - this.errors.push({ - message: msg, - type: ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF, - ruleName: this.currTopLevel.name, - unresolvedRefName: node.nonTerminalName - }); - } else node.referencedRule = ref; - } - } - class AbstractNextPossibleTokensWalker extends RestWalker { - constructor(topProd, path) { - super(); - this.topProd = topProd; - this.path = path; - this.possibleTokTypes = []; - this.nextProductionName = ""; - this.nextProductionOccurrence = 0; - this.found = false; - this.isAtEndOfPath = false; - } - startWalking() { - this.found = false; - if (this.path.ruleStack[0] !== this.topProd.name) throw Error("The path does not start with the walker's top Rule!"); - this.ruleStack = clone(this.path.ruleStack).reverse(); - this.occurrenceStack = clone(this.path.occurrenceStack).reverse(); - this.ruleStack.pop(); - this.occurrenceStack.pop(); - this.updateExpectedNext(); - this.walk(this.topProd); - return this.possibleTokTypes; - } - walk(prod, prevRest = []) { - if (!this.found) super.walk(prod, prevRest); - } - walkProdRef(refProd, currRest, prevRest) { - if (refProd.referencedRule.name === this.nextProductionName && refProd.idx === this.nextProductionOccurrence) { - const fullRest = currRest.concat(prevRest); - this.updateExpectedNext(); - this.walk(refProd.referencedRule, fullRest); - } - } - updateExpectedNext() { - if (isEmpty(this.ruleStack)) { - this.nextProductionName = ""; - this.nextProductionOccurrence = 0; - this.isAtEndOfPath = true; - } else { - this.nextProductionName = this.ruleStack.pop(); - this.nextProductionOccurrence = this.occurrenceStack.pop(); - } - } - } - class NextAfterTokenWalker extends AbstractNextPossibleTokensWalker { - constructor(topProd, path) { - super(topProd, path); - this.path = path; - this.nextTerminalName = ""; - this.nextTerminalOccurrence = 0; - this.nextTerminalName = this.path.lastTok.name; - this.nextTerminalOccurrence = this.path.lastTokOccurrence; - } - walkTerminal(terminal, currRest, prevRest) { - if (this.isAtEndOfPath && terminal.terminalType.name === this.nextTerminalName && terminal.idx === this.nextTerminalOccurrence && !this.found) { - const restProd = new Alternative({ definition: currRest.concat(prevRest) }); - this.possibleTokTypes = first(restProd); - this.found = true; - } - } - } - class AbstractNextTerminalAfterProductionWalker extends RestWalker { - constructor(topRule, occurrence) { - super(); - this.topRule = topRule; - this.occurrence = occurrence; - this.result = { - token: void 0, - occurrence: void 0, - isEndOfRule: void 0 - }; - } - startWalking() { - this.walk(this.topRule); - return this.result; - } - } - class NextTerminalAfterManyWalker extends AbstractNextTerminalAfterProductionWalker { - walkMany(manyProd, currRest, prevRest) { - if (manyProd.idx === this.occurrence) { - const firstAfterMany = head(currRest.concat(prevRest)); - this.result.isEndOfRule = firstAfterMany === void 0; - if (firstAfterMany instanceof Terminal) { - this.result.token = firstAfterMany.terminalType; - this.result.occurrence = firstAfterMany.idx; - } - } else super.walkMany(manyProd, currRest, prevRest); - } - } - class NextTerminalAfterManySepWalker extends AbstractNextTerminalAfterProductionWalker { - walkManySep(manySepProd, currRest, prevRest) { - if (manySepProd.idx === this.occurrence) { - const firstAfterManySep = head(currRest.concat(prevRest)); - this.result.isEndOfRule = firstAfterManySep === void 0; - if (firstAfterManySep instanceof Terminal) { - this.result.token = firstAfterManySep.terminalType; - this.result.occurrence = firstAfterManySep.idx; - } - } else super.walkManySep(manySepProd, currRest, prevRest); - } - } - class NextTerminalAfterAtLeastOneWalker extends AbstractNextTerminalAfterProductionWalker { - walkAtLeastOne(atLeastOneProd, currRest, prevRest) { - if (atLeastOneProd.idx === this.occurrence) { - const firstAfterAtLeastOne = head(currRest.concat(prevRest)); - this.result.isEndOfRule = firstAfterAtLeastOne === void 0; - if (firstAfterAtLeastOne instanceof Terminal) { - this.result.token = firstAfterAtLeastOne.terminalType; - this.result.occurrence = firstAfterAtLeastOne.idx; - } - } else super.walkAtLeastOne(atLeastOneProd, currRest, prevRest); - } - } - class NextTerminalAfterAtLeastOneSepWalker extends AbstractNextTerminalAfterProductionWalker { - walkAtLeastOneSep(atleastOneSepProd, currRest, prevRest) { - if (atleastOneSepProd.idx === this.occurrence) { - const firstAfterfirstAfterAtLeastOneSep = head(currRest.concat(prevRest)); - this.result.isEndOfRule = firstAfterfirstAfterAtLeastOneSep === void 0; - if (firstAfterfirstAfterAtLeastOneSep instanceof Terminal) { - this.result.token = firstAfterfirstAfterAtLeastOneSep.terminalType; - this.result.occurrence = firstAfterfirstAfterAtLeastOneSep.idx; - } - } else super.walkAtLeastOneSep(atleastOneSepProd, currRest, prevRest); - } - } - function possiblePathsFrom(targetDef, maxLength, currPath = []) { - currPath = clone(currPath); - let result = []; - let i = 0; - function remainingPathWith(nextDef) { - return nextDef.concat(drop(targetDef, i + 1)); - } - function getAlternativesForProd(definition) { - const alternatives = possiblePathsFrom(remainingPathWith(definition), maxLength, currPath); - return result.concat(alternatives); - } - while (currPath.length < maxLength && i < targetDef.length) { - const prod = targetDef[i]; - if (prod instanceof Alternative) return getAlternativesForProd(prod.definition); - else if (prod instanceof NonTerminal) return getAlternativesForProd(prod.definition); - else if (prod instanceof Option) result = getAlternativesForProd(prod.definition); - else if (prod instanceof RepetitionMandatory) return getAlternativesForProd(prod.definition.concat([new Repetition({ definition: prod.definition })])); - else if (prod instanceof RepetitionMandatoryWithSeparator) return getAlternativesForProd([new Alternative({ definition: prod.definition }), new Repetition({ definition: [new Terminal({ terminalType: prod.separator })].concat(prod.definition) })]); - else if (prod instanceof RepetitionWithSeparator) result = getAlternativesForProd(prod.definition.concat([new Repetition({ definition: [new Terminal({ terminalType: prod.separator })].concat(prod.definition) })])); - else if (prod instanceof Repetition) result = getAlternativesForProd(prod.definition.concat([new Repetition({ definition: prod.definition })])); - else if (prod instanceof Alternation) { - forEach(prod.definition, (currAlt) => { - if (isEmpty(currAlt.definition) === false) result = getAlternativesForProd(currAlt.definition); - }); - return result; - } else if (prod instanceof Terminal) currPath.push(prod.terminalType); - else throw Error("non exhaustive match"); - i++; - } - result.push({ - partialPath: currPath, - suffixDef: drop(targetDef, i) - }); - return result; - } - function nextPossibleTokensAfter(initialDef, tokenVector, tokMatcher, maxLookAhead) { - const EXIT_NON_TERMINAL = "EXIT_NONE_TERMINAL"; - const EXIT_NON_TERMINAL_ARR = [EXIT_NON_TERMINAL]; - const EXIT_ALTERNATIVE = "EXIT_ALTERNATIVE"; - let foundCompletePath = false; - const tokenVectorLength = tokenVector.length; - const minimalAlternativesIndex = tokenVectorLength - maxLookAhead - 1; - const result = []; - const possiblePaths = []; - possiblePaths.push({ - idx: -1, - def: initialDef, - ruleStack: [], - occurrenceStack: [] - }); - while (!isEmpty(possiblePaths)) { - const currPath = possiblePaths.pop(); - if (currPath === EXIT_ALTERNATIVE) { - if (foundCompletePath && last(possiblePaths).idx <= minimalAlternativesIndex) possiblePaths.pop(); - continue; - } - const currDef = currPath.def; - const currIdx = currPath.idx; - const currRuleStack = currPath.ruleStack; - const currOccurrenceStack = currPath.occurrenceStack; - if (isEmpty(currDef)) continue; - const prod = currDef[0]; - if (prod === EXIT_NON_TERMINAL) { - const nextPath = { - idx: currIdx, - def: drop(currDef), - ruleStack: dropRight(currRuleStack), - occurrenceStack: dropRight(currOccurrenceStack) - }; - possiblePaths.push(nextPath); - } else if (prod instanceof Terminal) if (currIdx < tokenVectorLength - 1) { - const nextIdx = currIdx + 1; - const actualToken = tokenVector[nextIdx]; - if (tokMatcher(actualToken, prod.terminalType)) { - const nextPath = { - idx: nextIdx, - def: drop(currDef), - ruleStack: currRuleStack, - occurrenceStack: currOccurrenceStack - }; - possiblePaths.push(nextPath); - } - } else if (currIdx === tokenVectorLength - 1) { - result.push({ - nextTokenType: prod.terminalType, - nextTokenOccurrence: prod.idx, - ruleStack: currRuleStack, - occurrenceStack: currOccurrenceStack - }); - foundCompletePath = true; - } else throw Error("non exhaustive match"); - else if (prod instanceof NonTerminal) { - const newRuleStack = clone(currRuleStack); - newRuleStack.push(prod.nonTerminalName); - const newOccurrenceStack = clone(currOccurrenceStack); - newOccurrenceStack.push(prod.idx); - const nextPath = { - idx: currIdx, - def: prod.definition.concat(EXIT_NON_TERMINAL_ARR, drop(currDef)), - ruleStack: newRuleStack, - occurrenceStack: newOccurrenceStack - }; - possiblePaths.push(nextPath); - } else if (prod instanceof Option) { - const nextPathWithout = { - idx: currIdx, - def: drop(currDef), - ruleStack: currRuleStack, - occurrenceStack: currOccurrenceStack - }; - possiblePaths.push(nextPathWithout); - possiblePaths.push(EXIT_ALTERNATIVE); - const nextPathWith = { - idx: currIdx, - def: prod.definition.concat(drop(currDef)), - ruleStack: currRuleStack, - occurrenceStack: currOccurrenceStack - }; - possiblePaths.push(nextPathWith); - } else if (prod instanceof RepetitionMandatory) { - const secondIteration = new Repetition({ - definition: prod.definition, - idx: prod.idx - }); - const nextPath = { - idx: currIdx, - def: prod.definition.concat([secondIteration], drop(currDef)), - ruleStack: currRuleStack, - occurrenceStack: currOccurrenceStack - }; - possiblePaths.push(nextPath); - } else if (prod instanceof RepetitionMandatoryWithSeparator) { - const secondIteration = new Repetition({ - definition: [new Terminal({ terminalType: prod.separator })].concat(prod.definition), - idx: prod.idx - }); - const nextPath = { - idx: currIdx, - def: prod.definition.concat([secondIteration], drop(currDef)), - ruleStack: currRuleStack, - occurrenceStack: currOccurrenceStack - }; - possiblePaths.push(nextPath); - } else if (prod instanceof RepetitionWithSeparator) { - const nextPathWithout = { - idx: currIdx, - def: drop(currDef), - ruleStack: currRuleStack, - occurrenceStack: currOccurrenceStack - }; - possiblePaths.push(nextPathWithout); - possiblePaths.push(EXIT_ALTERNATIVE); - const nthRepetition = new Repetition({ - definition: [new Terminal({ terminalType: prod.separator })].concat(prod.definition), - idx: prod.idx - }); - const nextPathWith = { - idx: currIdx, - def: prod.definition.concat([nthRepetition], drop(currDef)), - ruleStack: currRuleStack, - occurrenceStack: currOccurrenceStack - }; - possiblePaths.push(nextPathWith); - } else if (prod instanceof Repetition) { - const nextPathWithout = { - idx: currIdx, - def: drop(currDef), - ruleStack: currRuleStack, - occurrenceStack: currOccurrenceStack - }; - possiblePaths.push(nextPathWithout); - possiblePaths.push(EXIT_ALTERNATIVE); - const nthRepetition = new Repetition({ - definition: prod.definition, - idx: prod.idx - }); - const nextPathWith = { - idx: currIdx, - def: prod.definition.concat([nthRepetition], drop(currDef)), - ruleStack: currRuleStack, - occurrenceStack: currOccurrenceStack - }; - possiblePaths.push(nextPathWith); - } else if (prod instanceof Alternation) for (let i = prod.definition.length - 1; i >= 0; i--) { - const currAltPath = { - idx: currIdx, - def: prod.definition[i].definition.concat(drop(currDef)), - ruleStack: currRuleStack, - occurrenceStack: currOccurrenceStack - }; - possiblePaths.push(currAltPath); - possiblePaths.push(EXIT_ALTERNATIVE); - } - else if (prod instanceof Alternative) possiblePaths.push({ - idx: currIdx, - def: prod.definition.concat(drop(currDef)), - ruleStack: currRuleStack, - occurrenceStack: currOccurrenceStack - }); - else if (prod instanceof Rule) possiblePaths.push(expandTopLevelRule(prod, currIdx, currRuleStack, currOccurrenceStack)); - else throw Error("non exhaustive match"); - } - return result; - } - function expandTopLevelRule(topRule, currIdx, currRuleStack, currOccurrenceStack) { - const newRuleStack = clone(currRuleStack); - newRuleStack.push(topRule.name); - const newCurrOccurrenceStack = clone(currOccurrenceStack); - newCurrOccurrenceStack.push(1); - return { - idx: currIdx, - def: topRule.definition, - ruleStack: newRuleStack, - occurrenceStack: newCurrOccurrenceStack - }; - } - var PROD_TYPE; - (function(PROD_TYPE2) { - PROD_TYPE2[PROD_TYPE2["OPTION"] = 0] = "OPTION"; - PROD_TYPE2[PROD_TYPE2["REPETITION"] = 1] = "REPETITION"; - PROD_TYPE2[PROD_TYPE2["REPETITION_MANDATORY"] = 2] = "REPETITION_MANDATORY"; - PROD_TYPE2[PROD_TYPE2["REPETITION_MANDATORY_WITH_SEPARATOR"] = 3] = "REPETITION_MANDATORY_WITH_SEPARATOR"; - PROD_TYPE2[PROD_TYPE2["REPETITION_WITH_SEPARATOR"] = 4] = "REPETITION_WITH_SEPARATOR"; - PROD_TYPE2[PROD_TYPE2["ALTERNATION"] = 5] = "ALTERNATION"; - })(PROD_TYPE || (PROD_TYPE = {})); - function getProdType(prod) { - if (prod instanceof Option || prod === "Option") return PROD_TYPE.OPTION; - else if (prod instanceof Repetition || prod === "Repetition") return PROD_TYPE.REPETITION; - else if (prod instanceof RepetitionMandatory || prod === "RepetitionMandatory") return PROD_TYPE.REPETITION_MANDATORY; - else if (prod instanceof RepetitionMandatoryWithSeparator || prod === "RepetitionMandatoryWithSeparator") return PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR; - else if (prod instanceof RepetitionWithSeparator || prod === "RepetitionWithSeparator") return PROD_TYPE.REPETITION_WITH_SEPARATOR; - else if (prod instanceof Alternation || prod === "Alternation") return PROD_TYPE.ALTERNATION; - else throw Error("non exhaustive match"); - } - function buildLookaheadFuncForOr(occurrence, ruleGrammar, maxLookahead, hasPredicates, dynamicTokensEnabled, laFuncBuilder) { - const lookAheadPaths = getLookaheadPathsForOr(occurrence, ruleGrammar, maxLookahead); - return laFuncBuilder(lookAheadPaths, hasPredicates, areTokenCategoriesNotUsed(lookAheadPaths) ? tokenStructuredMatcherNoCategories : tokenStructuredMatcher, dynamicTokensEnabled); - } - function buildLookaheadFuncForOptionalProd(occurrence, ruleGrammar, k, dynamicTokensEnabled, prodType, lookaheadBuilder) { - const lookAheadPaths = getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, k); - const tokenMatcher2 = areTokenCategoriesNotUsed(lookAheadPaths) ? tokenStructuredMatcherNoCategories : tokenStructuredMatcher; - return lookaheadBuilder(lookAheadPaths[0], tokenMatcher2, dynamicTokensEnabled); - } - function buildAlternativesLookAheadFunc(alts, hasPredicates, tokenMatcher2, dynamicTokensEnabled) { - const numOfAlts = alts.length; - const areAllOneTokenLookahead = every(alts, (currAlt) => { - return every(currAlt, (currPath) => { - return currPath.length === 1; - }); - }); - if (hasPredicates) return function(orAlts) { - const predicates = map(orAlts, (currAlt) => currAlt.GATE); - for (let t = 0; t < numOfAlts; t++) { - const currAlt = alts[t]; - const currNumOfPaths = currAlt.length; - const currPredicate = predicates[t]; - if (currPredicate !== void 0 && currPredicate.call(this) === false) continue; - nextPath: for (let j = 0; j < currNumOfPaths; j++) { - const currPath = currAlt[j]; - const currPathLength = currPath.length; - for (let i = 0; i < currPathLength; i++) if (tokenMatcher2(this.LA(i + 1), currPath[i]) === false) continue nextPath; - return t; - } - } - }; - else if (areAllOneTokenLookahead && !dynamicTokensEnabled) { - const choiceToAlt = reduce(map(alts, (currAlt) => { - return flatten(currAlt); - }), (result, currAlt, idx) => { - forEach(currAlt, (currTokType) => { - if (!has(result, currTokType.tokenTypeIdx)) result[currTokType.tokenTypeIdx] = idx; - forEach(currTokType.categoryMatches, (currExtendingType) => { - if (!has(result, currExtendingType)) result[currExtendingType] = idx; - }); - }); - return result; - }, {}); - return function() { - return choiceToAlt[this.LA(1).tokenTypeIdx]; - }; - } else return function() { - for (let t = 0; t < numOfAlts; t++) { - const currAlt = alts[t]; - const currNumOfPaths = currAlt.length; - nextPath: for (let j = 0; j < currNumOfPaths; j++) { - const currPath = currAlt[j]; - const currPathLength = currPath.length; - for (let i = 0; i < currPathLength; i++) if (tokenMatcher2(this.LA(i + 1), currPath[i]) === false) continue nextPath; - return t; - } - } - }; - } - function buildSingleAlternativeLookaheadFunction(alt, tokenMatcher2, dynamicTokensEnabled) { - const areAllOneTokenLookahead = every(alt, (currPath) => { - return currPath.length === 1; - }); - const numOfPaths = alt.length; - if (areAllOneTokenLookahead && !dynamicTokensEnabled) { - const singleTokensTypes = flatten(alt); - if (singleTokensTypes.length === 1 && isEmpty(singleTokensTypes[0].categoryMatches)) { - const expectedTokenUniqueKey = singleTokensTypes[0].tokenTypeIdx; - return function() { - return this.LA(1).tokenTypeIdx === expectedTokenUniqueKey; - }; - } else { - const choiceToAlt = reduce(singleTokensTypes, (result, currTokType, idx) => { - result[currTokType.tokenTypeIdx] = true; - forEach(currTokType.categoryMatches, (currExtendingType) => { - result[currExtendingType] = true; - }); - return result; - }, []); - return function() { - return choiceToAlt[this.LA(1).tokenTypeIdx] === true; - }; - } - } else return function() { - nextPath: for (let j = 0; j < numOfPaths; j++) { - const currPath = alt[j]; - const currPathLength = currPath.length; - for (let i = 0; i < currPathLength; i++) if (tokenMatcher2(this.LA(i + 1), currPath[i]) === false) continue nextPath; - return true; - } - return false; - }; - } - class RestDefinitionFinderWalker extends RestWalker { - constructor(topProd, targetOccurrence, targetProdType) { - super(); - this.topProd = topProd; - this.targetOccurrence = targetOccurrence; - this.targetProdType = targetProdType; - } - startWalking() { - this.walk(this.topProd); - return this.restDef; - } - checkIsTarget(node, expectedProdType, currRest, prevRest) { - if (node.idx === this.targetOccurrence && this.targetProdType === expectedProdType) { - this.restDef = currRest.concat(prevRest); - return true; - } - return false; - } - walkOption(optionProd, currRest, prevRest) { - if (!this.checkIsTarget(optionProd, PROD_TYPE.OPTION, currRest, prevRest)) super.walkOption(optionProd, currRest, prevRest); - } - walkAtLeastOne(atLeastOneProd, currRest, prevRest) { - if (!this.checkIsTarget(atLeastOneProd, PROD_TYPE.REPETITION_MANDATORY, currRest, prevRest)) super.walkOption(atLeastOneProd, currRest, prevRest); - } - walkAtLeastOneSep(atLeastOneSepProd, currRest, prevRest) { - if (!this.checkIsTarget(atLeastOneSepProd, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR, currRest, prevRest)) super.walkOption(atLeastOneSepProd, currRest, prevRest); - } - walkMany(manyProd, currRest, prevRest) { - if (!this.checkIsTarget(manyProd, PROD_TYPE.REPETITION, currRest, prevRest)) super.walkOption(manyProd, currRest, prevRest); - } - walkManySep(manySepProd, currRest, prevRest) { - if (!this.checkIsTarget(manySepProd, PROD_TYPE.REPETITION_WITH_SEPARATOR, currRest, prevRest)) super.walkOption(manySepProd, currRest, prevRest); - } - } - class InsideDefinitionFinderVisitor extends GAstVisitor { - constructor(targetOccurrence, targetProdType, targetRef) { - super(); - this.targetOccurrence = targetOccurrence; - this.targetProdType = targetProdType; - this.targetRef = targetRef; - this.result = []; - } - checkIsTarget(node, expectedProdName) { - if (node.idx === this.targetOccurrence && this.targetProdType === expectedProdName && (this.targetRef === void 0 || node === this.targetRef)) this.result = node.definition; - } - visitOption(node) { - this.checkIsTarget(node, PROD_TYPE.OPTION); - } - visitRepetition(node) { - this.checkIsTarget(node, PROD_TYPE.REPETITION); - } - visitRepetitionMandatory(node) { - this.checkIsTarget(node, PROD_TYPE.REPETITION_MANDATORY); - } - visitRepetitionMandatoryWithSeparator(node) { - this.checkIsTarget(node, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR); - } - visitRepetitionWithSeparator(node) { - this.checkIsTarget(node, PROD_TYPE.REPETITION_WITH_SEPARATOR); - } - visitAlternation(node) { - this.checkIsTarget(node, PROD_TYPE.ALTERNATION); - } - } - function initializeArrayOfArrays(size) { - const result = new Array(size); - for (let i = 0; i < size; i++) result[i] = []; - return result; - } - function pathToHashKeys(path) { - let keys2 = [""]; - for (let i = 0; i < path.length; i++) { - const tokType = path[i]; - const longerKeys = []; - for (let j = 0; j < keys2.length; j++) { - const currShorterKey = keys2[j]; - longerKeys.push(currShorterKey + "_" + tokType.tokenTypeIdx); - for (let t = 0; t < tokType.categoryMatches.length; t++) { - const categoriesKeySuffix = "_" + tokType.categoryMatches[t]; - longerKeys.push(currShorterKey + categoriesKeySuffix); - } - } - keys2 = longerKeys; - } - return keys2; - } - function isUniquePrefixHash(altKnownPathsKeys, searchPathKeys, idx) { - for (let currAltIdx = 0; currAltIdx < altKnownPathsKeys.length; currAltIdx++) { - if (currAltIdx === idx) continue; - const otherAltKnownPathsKeys = altKnownPathsKeys[currAltIdx]; - for (let searchIdx = 0; searchIdx < searchPathKeys.length; searchIdx++) if (otherAltKnownPathsKeys[searchPathKeys[searchIdx]] === true) return false; - } - return true; - } - function lookAheadSequenceFromAlternatives(altsDefs, k) { - const partialAlts = map(altsDefs, (currAlt) => possiblePathsFrom([currAlt], 1)); - const finalResult = initializeArrayOfArrays(partialAlts.length); - const altsHashes = map(partialAlts, (currAltPaths) => { - const dict = {}; - forEach(currAltPaths, (item) => { - forEach(pathToHashKeys(item.partialPath), (currKey) => { - dict[currKey] = true; - }); - }); - return dict; - }); - let newData = partialAlts; - for (let pathLength = 1; pathLength <= k; pathLength++) { - const currDataset = newData; - newData = initializeArrayOfArrays(currDataset.length); - for (let altIdx = 0; altIdx < currDataset.length; altIdx++) { - const currAltPathsAndSuffixes = currDataset[altIdx]; - for (let currPathIdx = 0; currPathIdx < currAltPathsAndSuffixes.length; currPathIdx++) { - const currPathPrefix = currAltPathsAndSuffixes[currPathIdx].partialPath; - const suffixDef = currAltPathsAndSuffixes[currPathIdx].suffixDef; - const prefixKeys = pathToHashKeys(currPathPrefix); - if (isUniquePrefixHash(altsHashes, prefixKeys, altIdx) || isEmpty(suffixDef) || currPathPrefix.length === k) { - const currAltResult = finalResult[altIdx]; - if (containsPath(currAltResult, currPathPrefix) === false) { - currAltResult.push(currPathPrefix); - for (let j = 0; j < prefixKeys.length; j++) { - const currKey = prefixKeys[j]; - altsHashes[altIdx][currKey] = true; - } - } - } else { - const newPartialPathsAndSuffixes = possiblePathsFrom(suffixDef, pathLength + 1, currPathPrefix); - newData[altIdx] = newData[altIdx].concat(newPartialPathsAndSuffixes); - forEach(newPartialPathsAndSuffixes, (item) => { - forEach(pathToHashKeys(item.partialPath), (key) => { - altsHashes[altIdx][key] = true; - }); - }); - } - } - } - } - return finalResult; - } - function getLookaheadPathsForOr(occurrence, ruleGrammar, k, orProd) { - const visitor = new InsideDefinitionFinderVisitor(occurrence, PROD_TYPE.ALTERNATION, orProd); - ruleGrammar.accept(visitor); - return lookAheadSequenceFromAlternatives(visitor.result, k); - } - function getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, k) { - const insideDefVisitor = new InsideDefinitionFinderVisitor(occurrence, prodType); - ruleGrammar.accept(insideDefVisitor); - const insideDef = insideDefVisitor.result; - const afterDef = new RestDefinitionFinderWalker(ruleGrammar, occurrence, prodType).startWalking(); - return lookAheadSequenceFromAlternatives([new Alternative({ definition: insideDef }), new Alternative({ definition: afterDef })], k); - } - function containsPath(alternative, searchPath) { - compareOtherPath: for (let i = 0; i < alternative.length; i++) { - const otherPath = alternative[i]; - if (otherPath.length !== searchPath.length) continue; - for (let j = 0; j < otherPath.length; j++) { - const searchTok = searchPath[j]; - const otherTok = otherPath[j]; - if ((searchTok === otherTok || otherTok.categoryMatchesMap[searchTok.tokenTypeIdx] !== void 0) === false) continue compareOtherPath; - } - return true; - } - return false; - } - function isStrictPrefixOfPath(prefix, other) { - return prefix.length < other.length && every(prefix, (tokType, idx) => { - const otherTokType = other[idx]; - return tokType === otherTokType || otherTokType.categoryMatchesMap[tokType.tokenTypeIdx]; - }); - } - function areTokenCategoriesNotUsed(lookAheadPaths) { - return every(lookAheadPaths, (singleAltPaths) => every(singleAltPaths, (singlePath) => every(singlePath, (token) => isEmpty(token.categoryMatches)))); - } - function validateLookahead(options) { - return map(options.lookaheadStrategy.validate({ - rules: options.rules, - tokenTypes: options.tokenTypes, - grammarName: options.grammarName - }), (errorMessage) => Object.assign({ type: ParserDefinitionErrorType.CUSTOM_LOOKAHEAD_VALIDATION }, errorMessage)); - } - function validateGrammar$1(topLevels, tokenTypes, errMsgProvider, grammarName) { - const duplicateErrors = flatMap(topLevels, (currTopLevel) => validateDuplicateProductions(currTopLevel, errMsgProvider)); - const termsNamespaceConflictErrors = checkTerminalAndNoneTerminalsNameSpace(topLevels, tokenTypes, errMsgProvider); - const tooManyAltsErrors = flatMap(topLevels, (curRule) => validateTooManyAlts(curRule, errMsgProvider)); - const duplicateRulesError = flatMap(topLevels, (curRule) => validateRuleDoesNotAlreadyExist(curRule, topLevels, grammarName, errMsgProvider)); - return duplicateErrors.concat(termsNamespaceConflictErrors, tooManyAltsErrors, duplicateRulesError); - } - function validateDuplicateProductions(topLevelRule, errMsgProvider) { - const collectorVisitor2 = new OccurrenceValidationCollector(); - topLevelRule.accept(collectorVisitor2); - const allRuleProductions = collectorVisitor2.allProductions; - return map(values(pickBy(groupBy$1(allRuleProductions, identifyProductionForDuplicates), (currGroup) => { - return currGroup.length > 1; - })), (currDuplicates) => { - const firstProd = head(currDuplicates); - const msg = errMsgProvider.buildDuplicateFoundError(topLevelRule, currDuplicates); - const dslName = getProductionDslName(firstProd); - const defError = { - message: msg, - type: ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS, - ruleName: topLevelRule.name, - dslName, - occurrence: firstProd.idx - }; - const param = getExtraProductionArgument(firstProd); - if (param) defError.parameter = param; - return defError; - }); - } - function identifyProductionForDuplicates(prod) { - return `${getProductionDslName(prod)}_#_${prod.idx}_#_${getExtraProductionArgument(prod)}`; - } - function getExtraProductionArgument(prod) { - if (prod instanceof Terminal) return prod.terminalType.name; - else if (prod instanceof NonTerminal) return prod.nonTerminalName; - else return ""; - } - class OccurrenceValidationCollector extends GAstVisitor { - constructor() { - super(...arguments); - this.allProductions = []; - } - visitNonTerminal(subrule) { - this.allProductions.push(subrule); - } - visitOption(option) { - this.allProductions.push(option); - } - visitRepetitionWithSeparator(manySep) { - this.allProductions.push(manySep); - } - visitRepetitionMandatory(atLeastOne) { - this.allProductions.push(atLeastOne); - } - visitRepetitionMandatoryWithSeparator(atLeastOneSep) { - this.allProductions.push(atLeastOneSep); - } - visitRepetition(many) { - this.allProductions.push(many); - } - visitAlternation(or) { - this.allProductions.push(or); - } - visitTerminal(terminal) { - this.allProductions.push(terminal); - } - } - function validateRuleDoesNotAlreadyExist(rule, allRules, className, errMsgProvider) { - const errors = []; - if (reduce(allRules, (result, curRule) => { - if (curRule.name === rule.name) return result + 1; - return result; - }, 0) > 1) { - const errMsg = errMsgProvider.buildDuplicateRuleNameError({ - topLevelRule: rule, - grammarName: className - }); - errors.push({ - message: errMsg, - type: ParserDefinitionErrorType.DUPLICATE_RULE_NAME, - ruleName: rule.name - }); - } - return errors; - } - function validateRuleIsOverridden(ruleName, definedRulesNames, className) { - const errors = []; - let errMsg; - if (!includes(definedRulesNames, ruleName)) { - errMsg = `Invalid rule override, rule: ->${ruleName}<- cannot be overridden in the grammar: ->${className}<-as it is not defined in any of the super grammars `; - errors.push({ - message: errMsg, - type: ParserDefinitionErrorType.INVALID_RULE_OVERRIDE, - ruleName - }); - } - return errors; - } - function validateNoLeftRecursion(topRule, currRule, errMsgProvider, path = []) { - const errors = []; - const nextNonTerminals = getFirstNoneTerminal(currRule.definition); - if (isEmpty(nextNonTerminals)) return []; - else { - const ruleName = topRule.name; - if (includes(nextNonTerminals, topRule)) errors.push({ - message: errMsgProvider.buildLeftRecursionError({ - topLevelRule: topRule, - leftRecursionPath: path - }), - type: ParserDefinitionErrorType.LEFT_RECURSION, - ruleName - }); - const errorsFromNextSteps = flatMap(difference$1(nextNonTerminals, path.concat([topRule])), (currRefRule) => { - const newPath = clone(path); - newPath.push(currRefRule); - return validateNoLeftRecursion(topRule, currRefRule, errMsgProvider, newPath); - }); - return errors.concat(errorsFromNextSteps); - } - } - function getFirstNoneTerminal(definition) { - let result = []; - if (isEmpty(definition)) return result; - const firstProd = head(definition); - if (firstProd instanceof NonTerminal) result.push(firstProd.referencedRule); - else if (firstProd instanceof Alternative || firstProd instanceof Option || firstProd instanceof RepetitionMandatory || firstProd instanceof RepetitionMandatoryWithSeparator || firstProd instanceof RepetitionWithSeparator || firstProd instanceof Repetition) result = result.concat(getFirstNoneTerminal(firstProd.definition)); - else if (firstProd instanceof Alternation) result = flatten(map(firstProd.definition, (currSubDef) => getFirstNoneTerminal(currSubDef.definition))); - else if (firstProd instanceof Terminal); - else throw Error("non exhaustive match"); - const isFirstOptional = isOptionalProd(firstProd); - const hasMore = definition.length > 1; - if (isFirstOptional && hasMore) { - const rest = drop(definition); - return result.concat(getFirstNoneTerminal(rest)); - } else return result; - } - class OrCollector extends GAstVisitor { - constructor() { - super(...arguments); - this.alternations = []; - } - visitAlternation(node) { - this.alternations.push(node); - } - } - function validateEmptyOrAlternative(topLevelRule, errMsgProvider) { - const orCollector = new OrCollector(); - topLevelRule.accept(orCollector); - const ors = orCollector.alternations; - return flatMap(ors, (currOr) => { - return flatMap(dropRight(currOr.definition), (currAlternative, currAltIdx) => { - if (isEmpty(nextPossibleTokensAfter([currAlternative], [], tokenStructuredMatcher, 1))) return [{ - message: errMsgProvider.buildEmptyAlternationError({ - topLevelRule, - alternation: currOr, - emptyChoiceIdx: currAltIdx - }), - type: ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT, - ruleName: topLevelRule.name, - occurrence: currOr.idx, - alternative: currAltIdx + 1 - }]; - else return []; - }); - }); - } - function validateAmbiguousAlternationAlternatives(topLevelRule, globalMaxLookahead, errMsgProvider) { - const orCollector = new OrCollector(); - topLevelRule.accept(orCollector); - let ors = orCollector.alternations; - ors = reject(ors, (currOr) => currOr.ignoreAmbiguities === true); - return flatMap(ors, (currOr) => { - const currOccurrence = currOr.idx; - const alternatives = getLookaheadPathsForOr(currOccurrence, topLevelRule, currOr.maxLookahead || globalMaxLookahead, currOr); - const altsAmbiguityErrors = checkAlternativesAmbiguities(alternatives, currOr, topLevelRule, errMsgProvider); - const altsPrefixAmbiguityErrors = checkPrefixAlternativesAmbiguities(alternatives, currOr, topLevelRule, errMsgProvider); - return altsAmbiguityErrors.concat(altsPrefixAmbiguityErrors); - }); - } - class RepetitionCollector extends GAstVisitor { - constructor() { - super(...arguments); - this.allProductions = []; - } - visitRepetitionWithSeparator(manySep) { - this.allProductions.push(manySep); - } - visitRepetitionMandatory(atLeastOne) { - this.allProductions.push(atLeastOne); - } - visitRepetitionMandatoryWithSeparator(atLeastOneSep) { - this.allProductions.push(atLeastOneSep); - } - visitRepetition(many) { - this.allProductions.push(many); - } - } - function validateTooManyAlts(topLevelRule, errMsgProvider) { - const orCollector = new OrCollector(); - topLevelRule.accept(orCollector); - const ors = orCollector.alternations; - return flatMap(ors, (currOr) => { - if (currOr.definition.length > 255) return [{ - message: errMsgProvider.buildTooManyAlternativesError({ - topLevelRule, - alternation: currOr - }), - type: ParserDefinitionErrorType.TOO_MANY_ALTS, - ruleName: topLevelRule.name, - occurrence: currOr.idx - }]; - else return []; - }); - } - function validateSomeNonEmptyLookaheadPath(topLevelRules, maxLookahead, errMsgProvider) { - const errors = []; - forEach(topLevelRules, (currTopRule) => { - const collectorVisitor2 = new RepetitionCollector(); - currTopRule.accept(collectorVisitor2); - const allRuleProductions = collectorVisitor2.allProductions; - forEach(allRuleProductions, (currProd) => { - const prodType = getProdType(currProd); - const actualMaxLookahead = currProd.maxLookahead || maxLookahead; - const currOccurrence = currProd.idx; - const pathsInsideProduction = getLookaheadPathsForOptionalProd(currOccurrence, currTopRule, prodType, actualMaxLookahead)[0]; - if (isEmpty(flatten(pathsInsideProduction))) { - const errMsg = errMsgProvider.buildEmptyRepetitionError({ - topLevelRule: currTopRule, - repetition: currProd - }); - errors.push({ - message: errMsg, - type: ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD, - ruleName: currTopRule.name - }); - } - }); - }); - return errors; - } - function checkAlternativesAmbiguities(alternatives, alternation, rule, errMsgProvider) { - const foundAmbiguousPaths = []; - return map(reduce(alternatives, (result, currAlt, currAltIdx) => { - if (alternation.definition[currAltIdx].ignoreAmbiguities === true) return result; - forEach(currAlt, (currPath) => { - const altsCurrPathAppearsIn = [currAltIdx]; - forEach(alternatives, (currOtherAlt, currOtherAltIdx) => { - if (currAltIdx !== currOtherAltIdx && containsPath(currOtherAlt, currPath) && alternation.definition[currOtherAltIdx].ignoreAmbiguities !== true) altsCurrPathAppearsIn.push(currOtherAltIdx); - }); - if (altsCurrPathAppearsIn.length > 1 && !containsPath(foundAmbiguousPaths, currPath)) { - foundAmbiguousPaths.push(currPath); - result.push({ - alts: altsCurrPathAppearsIn, - path: currPath - }); - } - }); - return result; - }, []), (currAmbDescriptor) => { - const ambgIndices = map(currAmbDescriptor.alts, (currAltIdx) => currAltIdx + 1); - return { - message: errMsgProvider.buildAlternationAmbiguityError({ - topLevelRule: rule, - alternation, - ambiguityIndices: ambgIndices, - prefixPath: currAmbDescriptor.path - }), - type: ParserDefinitionErrorType.AMBIGUOUS_ALTS, - ruleName: rule.name, - occurrence: alternation.idx, - alternatives: currAmbDescriptor.alts - }; - }); - } - function checkPrefixAlternativesAmbiguities(alternatives, alternation, rule, errMsgProvider) { - const pathsAndIndices = reduce(alternatives, (result, currAlt, idx) => { - const currPathsAndIdx = map(currAlt, (currPath) => { - return { - idx, - path: currPath - }; - }); - return result.concat(currPathsAndIdx); - }, []); - return compact(flatMap(pathsAndIndices, (currPathAndIdx) => { - if (alternation.definition[currPathAndIdx.idx].ignoreAmbiguities === true) return []; - const targetIdx = currPathAndIdx.idx; - const targetPath = currPathAndIdx.path; - return map(filter(pathsAndIndices, (searchPathAndIdx) => { - return alternation.definition[searchPathAndIdx.idx].ignoreAmbiguities !== true && searchPathAndIdx.idx < targetIdx && isStrictPrefixOfPath(searchPathAndIdx.path, targetPath); - }), (currAmbPathAndIdx) => { - const ambgIndices = [currAmbPathAndIdx.idx + 1, targetIdx + 1]; - const occurrence = alternation.idx === 0 ? "" : alternation.idx; - return { - message: errMsgProvider.buildAlternationPrefixAmbiguityError({ - topLevelRule: rule, - alternation, - ambiguityIndices: ambgIndices, - prefixPath: currAmbPathAndIdx.path - }), - type: ParserDefinitionErrorType.AMBIGUOUS_PREFIX_ALTS, - ruleName: rule.name, - occurrence, - alternatives: ambgIndices - }; - }); - })); - } - function checkTerminalAndNoneTerminalsNameSpace(topLevels, tokenTypes, errMsgProvider) { - const errors = []; - const tokenNames = map(tokenTypes, (currToken) => currToken.name); - forEach(topLevels, (currRule) => { - const currRuleName = currRule.name; - if (includes(tokenNames, currRuleName)) { - const errMsg = errMsgProvider.buildNamespaceConflictError(currRule); - errors.push({ - message: errMsg, - type: ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE, - ruleName: currRuleName - }); - } - }); - return errors; - } - function resolveGrammar(options) { - const actualOptions = defaults$1(options, { errMsgProvider: defaultGrammarResolverErrorProvider }); - const topRulesTable = {}; - forEach(options.rules, (rule) => { - topRulesTable[rule.name] = rule; - }); - return resolveGrammar$1(topRulesTable, actualOptions.errMsgProvider); - } - function validateGrammar(options) { - options = defaults$1(options, { errMsgProvider: defaultGrammarValidatorErrorProvider }); - return validateGrammar$1(options.rules, options.tokenTypes, options.errMsgProvider, options.grammarName); - } - const MISMATCHED_TOKEN_EXCEPTION = "MismatchedTokenException"; - const NO_VIABLE_ALT_EXCEPTION = "NoViableAltException"; - const EARLY_EXIT_EXCEPTION = "EarlyExitException"; - const NOT_ALL_INPUT_PARSED_EXCEPTION = "NotAllInputParsedException"; - const RECOGNITION_EXCEPTION_NAMES = [ - MISMATCHED_TOKEN_EXCEPTION, - NO_VIABLE_ALT_EXCEPTION, - EARLY_EXIT_EXCEPTION, - NOT_ALL_INPUT_PARSED_EXCEPTION - ]; - Object.freeze(RECOGNITION_EXCEPTION_NAMES); - function isRecognitionException(error) { - return includes(RECOGNITION_EXCEPTION_NAMES, error.name); - } - class RecognitionException extends Error { - constructor(message, token) { - super(message); - this.token = token; - this.resyncedTokens = []; - Object.setPrototypeOf(this, new.target.prototype); - if (Error.captureStackTrace) Error.captureStackTrace(this, this.constructor); - } - } - class MismatchedTokenException extends RecognitionException { - constructor(message, token, previousToken) { - super(message, token); - this.previousToken = previousToken; - this.name = MISMATCHED_TOKEN_EXCEPTION; - } - } - class NoViableAltException extends RecognitionException { - constructor(message, token, previousToken) { - super(message, token); - this.previousToken = previousToken; - this.name = NO_VIABLE_ALT_EXCEPTION; - } - } - class NotAllInputParsedException extends RecognitionException { - constructor(message, token) { - super(message, token); - this.name = NOT_ALL_INPUT_PARSED_EXCEPTION; - } - } - class EarlyExitException extends RecognitionException { - constructor(message, token, previousToken) { - super(message, token); - this.previousToken = previousToken; - this.name = EARLY_EXIT_EXCEPTION; - } - } - const EOF_FOLLOW_KEY = {}; - const IN_RULE_RECOVERY_EXCEPTION = "InRuleRecoveryException"; - class InRuleRecoveryException extends Error { - constructor(message) { - super(message); - this.name = IN_RULE_RECOVERY_EXCEPTION; - } - } - class Recoverable { - initRecoverable(config) { - this.firstAfterRepMap = {}; - this.resyncFollows = {}; - this.recoveryEnabled = has(config, "recoveryEnabled") ? config.recoveryEnabled : DEFAULT_PARSER_CONFIG.recoveryEnabled; - if (this.recoveryEnabled) this.attemptInRepetitionRecovery = attemptInRepetitionRecovery; - } - getTokenToInsert(tokType) { - const tokToInsert = createTokenInstance(tokType, "", NaN, NaN, NaN, NaN, NaN, NaN); - tokToInsert.isInsertedInRecovery = true; - return tokToInsert; - } - canTokenTypeBeInsertedInRecovery(tokType) { - return true; - } - canTokenTypeBeDeletedInRecovery(tokType) { - return true; - } - tryInRepetitionRecovery(grammarRule, grammarRuleArgs, lookAheadFunc, expectedTokType) { - const reSyncTokType = this.findReSyncTokenType(); - const savedLexerState = this.exportLexerState(); - const resyncedTokens = []; - let passedResyncPoint = false; - const nextTokenWithoutResync = this.LA(1); - let currToken = this.LA(1); - const generateErrorMessage = () => { - const previousToken = this.LA(0); - const error = new MismatchedTokenException(this.errorMessageProvider.buildMismatchTokenMessage({ - expected: expectedTokType, - actual: nextTokenWithoutResync, - previous: previousToken, - ruleName: this.getCurrRuleFullName() - }), nextTokenWithoutResync, this.LA(0)); - error.resyncedTokens = dropRight(resyncedTokens); - this.SAVE_ERROR(error); - }; - while (!passedResyncPoint) if (this.tokenMatcher(currToken, expectedTokType)) { - generateErrorMessage(); - return; - } else if (lookAheadFunc.call(this)) { - generateErrorMessage(); - grammarRule.apply(this, grammarRuleArgs); - return; - } else if (this.tokenMatcher(currToken, reSyncTokType)) passedResyncPoint = true; - else { - currToken = this.SKIP_TOKEN(); - this.addToResyncTokens(currToken, resyncedTokens); - } - this.importLexerState(savedLexerState); - } - shouldInRepetitionRecoveryBeTried(expectTokAfterLastMatch, nextTokIdx, notStuck) { - if (notStuck === false) return false; - if (this.tokenMatcher(this.LA(1), expectTokAfterLastMatch)) return false; - if (this.isBackTracking()) return false; - if (this.canPerformInRuleRecovery(expectTokAfterLastMatch, this.getFollowsForInRuleRecovery(expectTokAfterLastMatch, nextTokIdx))) return false; - return true; - } - getFollowsForInRuleRecovery(tokType, tokIdxInRule) { - const grammarPath = this.getCurrentGrammarPath(tokType, tokIdxInRule); - return this.getNextPossibleTokenTypes(grammarPath); - } - tryInRuleRecovery(expectedTokType, follows) { - if (this.canRecoverWithSingleTokenInsertion(expectedTokType, follows)) return this.getTokenToInsert(expectedTokType); - if (this.canRecoverWithSingleTokenDeletion(expectedTokType)) { - const nextTok = this.SKIP_TOKEN(); - this.consumeToken(); - return nextTok; - } - throw new InRuleRecoveryException("sad sad panda"); - } - canPerformInRuleRecovery(expectedToken, follows) { - return this.canRecoverWithSingleTokenInsertion(expectedToken, follows) || this.canRecoverWithSingleTokenDeletion(expectedToken); - } - canRecoverWithSingleTokenInsertion(expectedTokType, follows) { - if (!this.canTokenTypeBeInsertedInRecovery(expectedTokType)) return false; - if (isEmpty(follows)) return false; - const mismatchedTok = this.LA(1); - return find$1(follows, (possibleFollowsTokType) => { - return this.tokenMatcher(mismatchedTok, possibleFollowsTokType); - }) !== void 0; - } - canRecoverWithSingleTokenDeletion(expectedTokType) { - if (!this.canTokenTypeBeDeletedInRecovery(expectedTokType)) return false; - return this.tokenMatcher(this.LA(2), expectedTokType); - } - isInCurrentRuleReSyncSet(tokenTypeIdx) { - const followKey = this.getCurrFollowKey(); - return includes(this.getFollowSetFromFollowKey(followKey), tokenTypeIdx); - } - findReSyncTokenType() { - const allPossibleReSyncTokTypes = this.flattenFollowSet(); - let nextToken = this.LA(1); - let k = 2; - while (true) { - const foundMatch = find$1(allPossibleReSyncTokTypes, (resyncTokType) => { - return tokenMatcher(nextToken, resyncTokType); - }); - if (foundMatch !== void 0) return foundMatch; - nextToken = this.LA(k); - k++; - } - } - getCurrFollowKey() { - if (this.RULE_STACK.length === 1) return EOF_FOLLOW_KEY; - const currRuleShortName = this.getLastExplicitRuleShortName(); - const currRuleIdx = this.getLastExplicitRuleOccurrenceIndex(); - const prevRuleShortName = this.getPreviousExplicitRuleShortName(); - return { - ruleName: this.shortRuleNameToFullName(currRuleShortName), - idxInCallingRule: currRuleIdx, - inRule: this.shortRuleNameToFullName(prevRuleShortName) - }; - } - buildFullFollowKeyStack() { - const explicitRuleStack = this.RULE_STACK; - const explicitOccurrenceStack = this.RULE_OCCURRENCE_STACK; - return map(explicitRuleStack, (ruleName, idx) => { - if (idx === 0) return EOF_FOLLOW_KEY; - return { - ruleName: this.shortRuleNameToFullName(ruleName), - idxInCallingRule: explicitOccurrenceStack[idx], - inRule: this.shortRuleNameToFullName(explicitRuleStack[idx - 1]) - }; - }); - } - flattenFollowSet() { - return flatten(map(this.buildFullFollowKeyStack(), (currKey) => { - return this.getFollowSetFromFollowKey(currKey); - })); - } - getFollowSetFromFollowKey(followKey) { - if (followKey === EOF_FOLLOW_KEY) return [EOF]; - const followName = followKey.ruleName + followKey.idxInCallingRule + IN + followKey.inRule; - return this.resyncFollows[followName]; - } - addToResyncTokens(token, resyncTokens) { - if (!this.tokenMatcher(token, EOF)) resyncTokens.push(token); - return resyncTokens; - } - reSyncTo(tokType) { - const resyncedTokens = []; - let nextTok = this.LA(1); - while (this.tokenMatcher(nextTok, tokType) === false) { - nextTok = this.SKIP_TOKEN(); - this.addToResyncTokens(nextTok, resyncedTokens); - } - return dropRight(resyncedTokens); - } - attemptInRepetitionRecovery(prodFunc, args, lookaheadFunc, dslMethodIdx, prodOccurrence, nextToksWalker, notStuck) {} - getCurrentGrammarPath(tokType, tokIdxInRule) { - return { - ruleStack: this.getHumanReadableRuleStack(), - occurrenceStack: clone(this.RULE_OCCURRENCE_STACK), - lastTok: tokType, - lastTokOccurrence: tokIdxInRule - }; - } - getHumanReadableRuleStack() { - return map(this.RULE_STACK, (currShortName) => this.shortRuleNameToFullName(currShortName)); - } - } - function attemptInRepetitionRecovery(prodFunc, args, lookaheadFunc, dslMethodIdx, prodOccurrence, nextToksWalker, notStuck) { - const key = this.getKeyForAutomaticLookahead(dslMethodIdx, prodOccurrence); - let firstAfterRepInfo = this.firstAfterRepMap[key]; - if (firstAfterRepInfo === void 0) { - const currRuleName = this.getCurrRuleFullName(); - const ruleGrammar = this.getGAstProductions()[currRuleName]; - firstAfterRepInfo = new nextToksWalker(ruleGrammar, prodOccurrence).startWalking(); - this.firstAfterRepMap[key] = firstAfterRepInfo; - } - let expectTokAfterLastMatch = firstAfterRepInfo.token; - let nextTokIdx = firstAfterRepInfo.occurrence; - const isEndOfRule = firstAfterRepInfo.isEndOfRule; - if (this.RULE_STACK.length === 1 && isEndOfRule && expectTokAfterLastMatch === void 0) { - expectTokAfterLastMatch = EOF; - nextTokIdx = 1; - } - if (expectTokAfterLastMatch === void 0 || nextTokIdx === void 0) return; - if (this.shouldInRepetitionRecoveryBeTried(expectTokAfterLastMatch, nextTokIdx, notStuck)) this.tryInRepetitionRecovery(prodFunc, args, lookaheadFunc, expectTokAfterLastMatch); - } - const BITS_FOR_OCCURRENCE_IDX = 8; - const OR_IDX = 1 << BITS_FOR_OCCURRENCE_IDX; - const OPTION_IDX = 2 << BITS_FOR_OCCURRENCE_IDX; - const MANY_IDX = 3 << BITS_FOR_OCCURRENCE_IDX; - const AT_LEAST_ONE_IDX = 4 << BITS_FOR_OCCURRENCE_IDX; - const MANY_SEP_IDX = 5 << BITS_FOR_OCCURRENCE_IDX; - const AT_LEAST_ONE_SEP_IDX = 6 << BITS_FOR_OCCURRENCE_IDX; - function getKeyForAutomaticLookahead(ruleIdx, dslMethodIdx, occurrence) { - return occurrence | dslMethodIdx | ruleIdx; - } - class LLkLookaheadStrategy { - constructor(options) { - var _a; - this.maxLookahead = (_a = options === null || options === void 0 ? void 0 : options.maxLookahead) !== null && _a !== void 0 ? _a : DEFAULT_PARSER_CONFIG.maxLookahead; - } - validate(options) { - const leftRecursionErrors = this.validateNoLeftRecursion(options.rules); - if (isEmpty(leftRecursionErrors)) { - const emptyAltErrors = this.validateEmptyOrAlternatives(options.rules); - const ambiguousAltsErrors = this.validateAmbiguousAlternationAlternatives(options.rules, this.maxLookahead); - const emptyRepetitionErrors = this.validateSomeNonEmptyLookaheadPath(options.rules, this.maxLookahead); - return [ - ...leftRecursionErrors, - ...emptyAltErrors, - ...ambiguousAltsErrors, - ...emptyRepetitionErrors - ]; - } - return leftRecursionErrors; - } - validateNoLeftRecursion(rules) { - return flatMap(rules, (currTopRule) => validateNoLeftRecursion(currTopRule, currTopRule, defaultGrammarValidatorErrorProvider)); - } - validateEmptyOrAlternatives(rules) { - return flatMap(rules, (currTopRule) => validateEmptyOrAlternative(currTopRule, defaultGrammarValidatorErrorProvider)); - } - validateAmbiguousAlternationAlternatives(rules, maxLookahead) { - return flatMap(rules, (currTopRule) => validateAmbiguousAlternationAlternatives(currTopRule, maxLookahead, defaultGrammarValidatorErrorProvider)); - } - validateSomeNonEmptyLookaheadPath(rules, maxLookahead) { - return validateSomeNonEmptyLookaheadPath(rules, maxLookahead, defaultGrammarValidatorErrorProvider); - } - buildLookaheadForAlternation(options) { - return buildLookaheadFuncForOr(options.prodOccurrence, options.rule, options.maxLookahead, options.hasPredicates, options.dynamicTokensEnabled, buildAlternativesLookAheadFunc); - } - buildLookaheadForOptional(options) { - return buildLookaheadFuncForOptionalProd(options.prodOccurrence, options.rule, options.maxLookahead, options.dynamicTokensEnabled, getProdType(options.prodType), buildSingleAlternativeLookaheadFunction); - } - } - class LooksAhead { - initLooksAhead(config) { - this.dynamicTokensEnabled = has(config, "dynamicTokensEnabled") ? config.dynamicTokensEnabled : DEFAULT_PARSER_CONFIG.dynamicTokensEnabled; - this.maxLookahead = has(config, "maxLookahead") ? config.maxLookahead : DEFAULT_PARSER_CONFIG.maxLookahead; - this.lookaheadStrategy = has(config, "lookaheadStrategy") ? config.lookaheadStrategy : new LLkLookaheadStrategy({ maxLookahead: this.maxLookahead }); - this.lookAheadFuncsCache = /* @__PURE__ */ new Map(); - } - preComputeLookaheadFunctions(rules) { - forEach(rules, (currRule) => { - this.TRACE_INIT(`${currRule.name} Rule Lookahead`, () => { - const { alternation, repetition, option, repetitionMandatory, repetitionMandatoryWithSeparator, repetitionWithSeparator } = collectMethods(currRule); - forEach(alternation, (currProd) => { - const prodIdx = currProd.idx === 0 ? "" : currProd.idx; - this.TRACE_INIT(`${getProductionDslName(currProd)}${prodIdx}`, () => { - const laFunc = this.lookaheadStrategy.buildLookaheadForAlternation({ - prodOccurrence: currProd.idx, - rule: currRule, - maxLookahead: currProd.maxLookahead || this.maxLookahead, - hasPredicates: currProd.hasPredicates, - dynamicTokensEnabled: this.dynamicTokensEnabled - }); - const key = getKeyForAutomaticLookahead(this.fullRuleNameToShort[currRule.name], OR_IDX, currProd.idx); - this.setLaFuncCache(key, laFunc); - }); - }); - forEach(repetition, (currProd) => { - this.computeLookaheadFunc(currRule, currProd.idx, MANY_IDX, "Repetition", currProd.maxLookahead, getProductionDslName(currProd)); - }); - forEach(option, (currProd) => { - this.computeLookaheadFunc(currRule, currProd.idx, OPTION_IDX, "Option", currProd.maxLookahead, getProductionDslName(currProd)); - }); - forEach(repetitionMandatory, (currProd) => { - this.computeLookaheadFunc(currRule, currProd.idx, AT_LEAST_ONE_IDX, "RepetitionMandatory", currProd.maxLookahead, getProductionDslName(currProd)); - }); - forEach(repetitionMandatoryWithSeparator, (currProd) => { - this.computeLookaheadFunc(currRule, currProd.idx, AT_LEAST_ONE_SEP_IDX, "RepetitionMandatoryWithSeparator", currProd.maxLookahead, getProductionDslName(currProd)); - }); - forEach(repetitionWithSeparator, (currProd) => { - this.computeLookaheadFunc(currRule, currProd.idx, MANY_SEP_IDX, "RepetitionWithSeparator", currProd.maxLookahead, getProductionDslName(currProd)); - }); - }); - }); - } - computeLookaheadFunc(rule, prodOccurrence, prodKey, prodType, prodMaxLookahead, dslMethodName) { - this.TRACE_INIT(`${dslMethodName}${prodOccurrence === 0 ? "" : prodOccurrence}`, () => { - const laFunc = this.lookaheadStrategy.buildLookaheadForOptional({ - prodOccurrence, - rule, - maxLookahead: prodMaxLookahead || this.maxLookahead, - dynamicTokensEnabled: this.dynamicTokensEnabled, - prodType - }); - const key = getKeyForAutomaticLookahead(this.fullRuleNameToShort[rule.name], prodKey, prodOccurrence); - this.setLaFuncCache(key, laFunc); - }); - } - getKeyForAutomaticLookahead(dslMethodIdx, occurrence) { - return getKeyForAutomaticLookahead(this.getLastExplicitRuleShortName(), dslMethodIdx, occurrence); - } - getLaFuncFromCache(key) { - return this.lookAheadFuncsCache.get(key); - } - /* istanbul ignore next */ - setLaFuncCache(key, value) { - this.lookAheadFuncsCache.set(key, value); - } - } - class DslMethodsCollectorVisitor extends GAstVisitor { - constructor() { - super(...arguments); - this.dslMethods = { - option: [], - alternation: [], - repetition: [], - repetitionWithSeparator: [], - repetitionMandatory: [], - repetitionMandatoryWithSeparator: [] - }; - } - reset() { - this.dslMethods = { - option: [], - alternation: [], - repetition: [], - repetitionWithSeparator: [], - repetitionMandatory: [], - repetitionMandatoryWithSeparator: [] - }; - } - visitOption(option) { - this.dslMethods.option.push(option); - } - visitRepetitionWithSeparator(manySep) { - this.dslMethods.repetitionWithSeparator.push(manySep); - } - visitRepetitionMandatory(atLeastOne) { - this.dslMethods.repetitionMandatory.push(atLeastOne); - } - visitRepetitionMandatoryWithSeparator(atLeastOneSep) { - this.dslMethods.repetitionMandatoryWithSeparator.push(atLeastOneSep); - } - visitRepetition(many) { - this.dslMethods.repetition.push(many); - } - visitAlternation(or) { - this.dslMethods.alternation.push(or); - } - } - const collectorVisitor = new DslMethodsCollectorVisitor(); - function collectMethods(rule) { - collectorVisitor.reset(); - rule.accept(collectorVisitor); - const dslMethods = collectorVisitor.dslMethods; - collectorVisitor.reset(); - return dslMethods; - } - function setNodeLocationOnlyOffset(currNodeLocation, newLocationInfo) { - if (isNaN(currNodeLocation.startOffset) === true) { - currNodeLocation.startOffset = newLocationInfo.startOffset; - currNodeLocation.endOffset = newLocationInfo.endOffset; - } else if (currNodeLocation.endOffset < newLocationInfo.endOffset === true) currNodeLocation.endOffset = newLocationInfo.endOffset; - } - function setNodeLocationFull(currNodeLocation, newLocationInfo) { - if (isNaN(currNodeLocation.startOffset) === true) { - currNodeLocation.startOffset = newLocationInfo.startOffset; - currNodeLocation.startColumn = newLocationInfo.startColumn; - currNodeLocation.startLine = newLocationInfo.startLine; - currNodeLocation.endOffset = newLocationInfo.endOffset; - currNodeLocation.endColumn = newLocationInfo.endColumn; - currNodeLocation.endLine = newLocationInfo.endLine; - } else if (currNodeLocation.endOffset < newLocationInfo.endOffset === true) { - currNodeLocation.endOffset = newLocationInfo.endOffset; - currNodeLocation.endColumn = newLocationInfo.endColumn; - currNodeLocation.endLine = newLocationInfo.endLine; - } - } - function addTerminalToCst(node, token, tokenTypeName) { - if (node.children[tokenTypeName] === void 0) node.children[tokenTypeName] = [token]; - else node.children[tokenTypeName].push(token); - } - function addNoneTerminalToCst(node, ruleName, ruleResult) { - if (node.children[ruleName] === void 0) node.children[ruleName] = [ruleResult]; - else node.children[ruleName].push(ruleResult); - } - const NAME = "name"; - function defineNameProp(obj, nameValue) { - Object.defineProperty(obj, NAME, { - enumerable: false, - configurable: true, - writable: false, - value: nameValue - }); - } - function defaultVisit(ctx, param) { - const childrenNames = keys(ctx); - const childrenNamesLength = childrenNames.length; - for (let i = 0; i < childrenNamesLength; i++) { - const currChildArray = ctx[childrenNames[i]]; - const currChildArrayLength = currChildArray.length; - for (let j = 0; j < currChildArrayLength; j++) { - const currChild = currChildArray[j]; - if (currChild.tokenTypeIdx === void 0) this[currChild.name](currChild.children, param); - } - } - } - function createBaseSemanticVisitorConstructor(grammarName, ruleNames) { - const derivedConstructor = function() {}; - defineNameProp(derivedConstructor, grammarName + "BaseSemantics"); - derivedConstructor.prototype = { - visit: function(cstNode, param) { - if (isArray$1(cstNode)) cstNode = cstNode[0]; - if (isUndefined(cstNode)) return; - return this[cstNode.name](cstNode.children, param); - }, - validateVisitor: function() { - const semanticDefinitionErrors = validateVisitor(this, ruleNames); - if (!isEmpty(semanticDefinitionErrors)) { - const errorMessages = map(semanticDefinitionErrors, (currDefError) => currDefError.msg); - throw Error(`Errors Detected in CST Visitor <${this.constructor.name}>: - ${errorMessages.join("\n\n").replace(/\n/g, "\n ")}`); - } - } - }; - derivedConstructor.prototype.constructor = derivedConstructor; - derivedConstructor._RULE_NAMES = ruleNames; - return derivedConstructor; - } - function createBaseVisitorConstructorWithDefaults(grammarName, ruleNames, baseConstructor) { - const derivedConstructor = function() {}; - defineNameProp(derivedConstructor, grammarName + "BaseSemanticsWithDefaults"); - const withDefaultsProto = Object.create(baseConstructor.prototype); - forEach(ruleNames, (ruleName) => { - withDefaultsProto[ruleName] = defaultVisit; - }); - derivedConstructor.prototype = withDefaultsProto; - derivedConstructor.prototype.constructor = derivedConstructor; - return derivedConstructor; - } - var CstVisitorDefinitionError; - (function(CstVisitorDefinitionError2) { - CstVisitorDefinitionError2[CstVisitorDefinitionError2["REDUNDANT_METHOD"] = 0] = "REDUNDANT_METHOD"; - CstVisitorDefinitionError2[CstVisitorDefinitionError2["MISSING_METHOD"] = 1] = "MISSING_METHOD"; - })(CstVisitorDefinitionError || (CstVisitorDefinitionError = {})); - function validateVisitor(visitorInstance, ruleNames) { - return validateMissingCstMethods(visitorInstance, ruleNames); - } - function validateMissingCstMethods(visitorInstance, ruleNames) { - return compact(map(filter(ruleNames, (currRuleName) => { - return isFunction(visitorInstance[currRuleName]) === false; - }), (currRuleName) => { - return { - msg: `Missing visitor method: <${currRuleName}> on ${visitorInstance.constructor.name} CST Visitor.`, - type: CstVisitorDefinitionError.MISSING_METHOD, - methodName: currRuleName - }; - })); - } - class TreeBuilder { - initTreeBuilder(config) { - this.CST_STACK = []; - this.outputCst = config.outputCst; - this.nodeLocationTracking = has(config, "nodeLocationTracking") ? config.nodeLocationTracking : DEFAULT_PARSER_CONFIG.nodeLocationTracking; - if (!this.outputCst) { - this.cstInvocationStateUpdate = noop; - this.cstFinallyStateUpdate = noop; - this.cstPostTerminal = noop; - this.cstPostNonTerminal = noop; - this.cstPostRule = noop; - } else if (/full/i.test(this.nodeLocationTracking)) if (this.recoveryEnabled) { - this.setNodeLocationFromToken = setNodeLocationFull; - this.setNodeLocationFromNode = setNodeLocationFull; - this.cstPostRule = noop; - this.setInitialNodeLocation = this.setInitialNodeLocationFullRecovery; - } else { - this.setNodeLocationFromToken = noop; - this.setNodeLocationFromNode = noop; - this.cstPostRule = this.cstPostRuleFull; - this.setInitialNodeLocation = this.setInitialNodeLocationFullRegular; - } - else if (/onlyOffset/i.test(this.nodeLocationTracking)) if (this.recoveryEnabled) { - this.setNodeLocationFromToken = setNodeLocationOnlyOffset; - this.setNodeLocationFromNode = setNodeLocationOnlyOffset; - this.cstPostRule = noop; - this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRecovery; - } else { - this.setNodeLocationFromToken = noop; - this.setNodeLocationFromNode = noop; - this.cstPostRule = this.cstPostRuleOnlyOffset; - this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRegular; - } - else if (/none/i.test(this.nodeLocationTracking)) { - this.setNodeLocationFromToken = noop; - this.setNodeLocationFromNode = noop; - this.cstPostRule = noop; - this.setInitialNodeLocation = noop; - } else throw Error(`Invalid <nodeLocationTracking> config option: "${config.nodeLocationTracking}"`); - } - setInitialNodeLocationOnlyOffsetRecovery(cstNode) { - cstNode.location = { - startOffset: NaN, - endOffset: NaN - }; - } - setInitialNodeLocationOnlyOffsetRegular(cstNode) { - cstNode.location = { - startOffset: this.LA(1).startOffset, - endOffset: NaN - }; - } - setInitialNodeLocationFullRecovery(cstNode) { - cstNode.location = { - startOffset: NaN, - startLine: NaN, - startColumn: NaN, - endOffset: NaN, - endLine: NaN, - endColumn: NaN - }; - } - /** - * @see setInitialNodeLocationOnlyOffsetRegular for explanation why this work - - * @param cstNode - */ - setInitialNodeLocationFullRegular(cstNode) { - const nextToken = this.LA(1); - cstNode.location = { - startOffset: nextToken.startOffset, - startLine: nextToken.startLine, - startColumn: nextToken.startColumn, - endOffset: NaN, - endLine: NaN, - endColumn: NaN - }; - } - cstInvocationStateUpdate(fullRuleName) { - const cstNode = { - name: fullRuleName, - children: /* @__PURE__ */ Object.create(null) - }; - this.setInitialNodeLocation(cstNode); - this.CST_STACK.push(cstNode); - } - cstFinallyStateUpdate() { - this.CST_STACK.pop(); - } - cstPostRuleFull(ruleCstNode) { - const prevToken = this.LA(0); - const loc = ruleCstNode.location; - if (loc.startOffset <= prevToken.startOffset === true) { - loc.endOffset = prevToken.endOffset; - loc.endLine = prevToken.endLine; - loc.endColumn = prevToken.endColumn; - } else { - loc.startOffset = NaN; - loc.startLine = NaN; - loc.startColumn = NaN; - } - } - cstPostRuleOnlyOffset(ruleCstNode) { - const prevToken = this.LA(0); - const loc = ruleCstNode.location; - if (loc.startOffset <= prevToken.startOffset === true) loc.endOffset = prevToken.endOffset; - else loc.startOffset = NaN; - } - cstPostTerminal(key, consumedToken) { - const rootCst = this.CST_STACK[this.CST_STACK.length - 1]; - addTerminalToCst(rootCst, consumedToken, key); - this.setNodeLocationFromToken(rootCst.location, consumedToken); - } - cstPostNonTerminal(ruleCstResult, ruleName) { - const preCstNode = this.CST_STACK[this.CST_STACK.length - 1]; - addNoneTerminalToCst(preCstNode, ruleName, ruleCstResult); - this.setNodeLocationFromNode(preCstNode.location, ruleCstResult.location); - } - getBaseCstVisitorConstructor() { - if (isUndefined(this.baseCstVisitorConstructor)) { - const newBaseCstVisitorConstructor = createBaseSemanticVisitorConstructor(this.className, keys(this.gastProductionsCache)); - this.baseCstVisitorConstructor = newBaseCstVisitorConstructor; - return newBaseCstVisitorConstructor; - } - return this.baseCstVisitorConstructor; - } - getBaseCstVisitorConstructorWithDefaults() { - if (isUndefined(this.baseCstVisitorWithDefaultsConstructor)) { - const newConstructor = createBaseVisitorConstructorWithDefaults(this.className, keys(this.gastProductionsCache), this.getBaseCstVisitorConstructor()); - this.baseCstVisitorWithDefaultsConstructor = newConstructor; - return newConstructor; - } - return this.baseCstVisitorWithDefaultsConstructor; - } - getLastExplicitRuleShortName() { - const ruleStack = this.RULE_STACK; - return ruleStack[ruleStack.length - 1]; - } - getPreviousExplicitRuleShortName() { - const ruleStack = this.RULE_STACK; - return ruleStack[ruleStack.length - 2]; - } - getLastExplicitRuleOccurrenceIndex() { - const occurrenceStack = this.RULE_OCCURRENCE_STACK; - return occurrenceStack[occurrenceStack.length - 1]; - } - } - class LexerAdapter { - initLexerAdapter() { - this.tokVector = []; - this.tokVectorLength = 0; - this.currIdx = -1; - } - set input(newInput) { - if (this.selfAnalysisDone !== true) throw Error(`Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.`); - this.reset(); - this.tokVector = newInput; - this.tokVectorLength = newInput.length; - } - get input() { - return this.tokVector; - } - SKIP_TOKEN() { - if (this.currIdx <= this.tokVector.length - 2) { - this.consumeToken(); - return this.LA(1); - } else return END_OF_FILE; - } - LA(howMuch) { - const soughtIdx = this.currIdx + howMuch; - if (soughtIdx < 0 || this.tokVectorLength <= soughtIdx) return END_OF_FILE; - else return this.tokVector[soughtIdx]; - } - consumeToken() { - this.currIdx++; - } - exportLexerState() { - return this.currIdx; - } - importLexerState(newState) { - this.currIdx = newState; - } - resetLexerState() { - this.currIdx = -1; - } - moveToTerminatedState() { - this.currIdx = this.tokVector.length - 1; - } - getLexerPosition() { - return this.exportLexerState(); - } - } - class RecognizerApi { - ACTION(impl) { - return impl.call(this); - } - consume(idx, tokType, options) { - return this.consumeInternal(tokType, idx, options); - } - subrule(idx, ruleToCall, options) { - return this.subruleInternal(ruleToCall, idx, options); - } - option(idx, actionORMethodDef) { - return this.optionInternal(actionORMethodDef, idx); - } - or(idx, altsOrOpts) { - return this.orInternal(altsOrOpts, idx); - } - many(idx, actionORMethodDef) { - return this.manyInternal(idx, actionORMethodDef); - } - atLeastOne(idx, actionORMethodDef) { - return this.atLeastOneInternal(idx, actionORMethodDef); - } - CONSUME(tokType, options) { - return this.consumeInternal(tokType, 0, options); - } - CONSUME1(tokType, options) { - return this.consumeInternal(tokType, 1, options); - } - CONSUME2(tokType, options) { - return this.consumeInternal(tokType, 2, options); - } - CONSUME3(tokType, options) { - return this.consumeInternal(tokType, 3, options); - } - CONSUME4(tokType, options) { - return this.consumeInternal(tokType, 4, options); - } - CONSUME5(tokType, options) { - return this.consumeInternal(tokType, 5, options); - } - CONSUME6(tokType, options) { - return this.consumeInternal(tokType, 6, options); - } - CONSUME7(tokType, options) { - return this.consumeInternal(tokType, 7, options); - } - CONSUME8(tokType, options) { - return this.consumeInternal(tokType, 8, options); - } - CONSUME9(tokType, options) { - return this.consumeInternal(tokType, 9, options); - } - SUBRULE(ruleToCall, options) { - return this.subruleInternal(ruleToCall, 0, options); - } - SUBRULE1(ruleToCall, options) { - return this.subruleInternal(ruleToCall, 1, options); - } - SUBRULE2(ruleToCall, options) { - return this.subruleInternal(ruleToCall, 2, options); - } - SUBRULE3(ruleToCall, options) { - return this.subruleInternal(ruleToCall, 3, options); - } - SUBRULE4(ruleToCall, options) { - return this.subruleInternal(ruleToCall, 4, options); - } - SUBRULE5(ruleToCall, options) { - return this.subruleInternal(ruleToCall, 5, options); - } - SUBRULE6(ruleToCall, options) { - return this.subruleInternal(ruleToCall, 6, options); - } - SUBRULE7(ruleToCall, options) { - return this.subruleInternal(ruleToCall, 7, options); - } - SUBRULE8(ruleToCall, options) { - return this.subruleInternal(ruleToCall, 8, options); - } - SUBRULE9(ruleToCall, options) { - return this.subruleInternal(ruleToCall, 9, options); - } - OPTION(actionORMethodDef) { - return this.optionInternal(actionORMethodDef, 0); - } - OPTION1(actionORMethodDef) { - return this.optionInternal(actionORMethodDef, 1); - } - OPTION2(actionORMethodDef) { - return this.optionInternal(actionORMethodDef, 2); - } - OPTION3(actionORMethodDef) { - return this.optionInternal(actionORMethodDef, 3); - } - OPTION4(actionORMethodDef) { - return this.optionInternal(actionORMethodDef, 4); - } - OPTION5(actionORMethodDef) { - return this.optionInternal(actionORMethodDef, 5); - } - OPTION6(actionORMethodDef) { - return this.optionInternal(actionORMethodDef, 6); - } - OPTION7(actionORMethodDef) { - return this.optionInternal(actionORMethodDef, 7); - } - OPTION8(actionORMethodDef) { - return this.optionInternal(actionORMethodDef, 8); - } - OPTION9(actionORMethodDef) { - return this.optionInternal(actionORMethodDef, 9); - } - OR(altsOrOpts) { - return this.orInternal(altsOrOpts, 0); - } - OR1(altsOrOpts) { - return this.orInternal(altsOrOpts, 1); - } - OR2(altsOrOpts) { - return this.orInternal(altsOrOpts, 2); - } - OR3(altsOrOpts) { - return this.orInternal(altsOrOpts, 3); - } - OR4(altsOrOpts) { - return this.orInternal(altsOrOpts, 4); - } - OR5(altsOrOpts) { - return this.orInternal(altsOrOpts, 5); - } - OR6(altsOrOpts) { - return this.orInternal(altsOrOpts, 6); - } - OR7(altsOrOpts) { - return this.orInternal(altsOrOpts, 7); - } - OR8(altsOrOpts) { - return this.orInternal(altsOrOpts, 8); - } - OR9(altsOrOpts) { - return this.orInternal(altsOrOpts, 9); - } - MANY(actionORMethodDef) { - this.manyInternal(0, actionORMethodDef); - } - MANY1(actionORMethodDef) { - this.manyInternal(1, actionORMethodDef); - } - MANY2(actionORMethodDef) { - this.manyInternal(2, actionORMethodDef); - } - MANY3(actionORMethodDef) { - this.manyInternal(3, actionORMethodDef); - } - MANY4(actionORMethodDef) { - this.manyInternal(4, actionORMethodDef); - } - MANY5(actionORMethodDef) { - this.manyInternal(5, actionORMethodDef); - } - MANY6(actionORMethodDef) { - this.manyInternal(6, actionORMethodDef); - } - MANY7(actionORMethodDef) { - this.manyInternal(7, actionORMethodDef); - } - MANY8(actionORMethodDef) { - this.manyInternal(8, actionORMethodDef); - } - MANY9(actionORMethodDef) { - this.manyInternal(9, actionORMethodDef); - } - MANY_SEP(options) { - this.manySepFirstInternal(0, options); - } - MANY_SEP1(options) { - this.manySepFirstInternal(1, options); - } - MANY_SEP2(options) { - this.manySepFirstInternal(2, options); - } - MANY_SEP3(options) { - this.manySepFirstInternal(3, options); - } - MANY_SEP4(options) { - this.manySepFirstInternal(4, options); - } - MANY_SEP5(options) { - this.manySepFirstInternal(5, options); - } - MANY_SEP6(options) { - this.manySepFirstInternal(6, options); - } - MANY_SEP7(options) { - this.manySepFirstInternal(7, options); - } - MANY_SEP8(options) { - this.manySepFirstInternal(8, options); - } - MANY_SEP9(options) { - this.manySepFirstInternal(9, options); - } - AT_LEAST_ONE(actionORMethodDef) { - this.atLeastOneInternal(0, actionORMethodDef); - } - AT_LEAST_ONE1(actionORMethodDef) { - return this.atLeastOneInternal(1, actionORMethodDef); - } - AT_LEAST_ONE2(actionORMethodDef) { - this.atLeastOneInternal(2, actionORMethodDef); - } - AT_LEAST_ONE3(actionORMethodDef) { - this.atLeastOneInternal(3, actionORMethodDef); - } - AT_LEAST_ONE4(actionORMethodDef) { - this.atLeastOneInternal(4, actionORMethodDef); - } - AT_LEAST_ONE5(actionORMethodDef) { - this.atLeastOneInternal(5, actionORMethodDef); - } - AT_LEAST_ONE6(actionORMethodDef) { - this.atLeastOneInternal(6, actionORMethodDef); - } - AT_LEAST_ONE7(actionORMethodDef) { - this.atLeastOneInternal(7, actionORMethodDef); - } - AT_LEAST_ONE8(actionORMethodDef) { - this.atLeastOneInternal(8, actionORMethodDef); - } - AT_LEAST_ONE9(actionORMethodDef) { - this.atLeastOneInternal(9, actionORMethodDef); - } - AT_LEAST_ONE_SEP(options) { - this.atLeastOneSepFirstInternal(0, options); - } - AT_LEAST_ONE_SEP1(options) { - this.atLeastOneSepFirstInternal(1, options); - } - AT_LEAST_ONE_SEP2(options) { - this.atLeastOneSepFirstInternal(2, options); - } - AT_LEAST_ONE_SEP3(options) { - this.atLeastOneSepFirstInternal(3, options); - } - AT_LEAST_ONE_SEP4(options) { - this.atLeastOneSepFirstInternal(4, options); - } - AT_LEAST_ONE_SEP5(options) { - this.atLeastOneSepFirstInternal(5, options); - } - AT_LEAST_ONE_SEP6(options) { - this.atLeastOneSepFirstInternal(6, options); - } - AT_LEAST_ONE_SEP7(options) { - this.atLeastOneSepFirstInternal(7, options); - } - AT_LEAST_ONE_SEP8(options) { - this.atLeastOneSepFirstInternal(8, options); - } - AT_LEAST_ONE_SEP9(options) { - this.atLeastOneSepFirstInternal(9, options); - } - RULE(name, implementation, config = DEFAULT_RULE_CONFIG) { - if (includes(this.definedRulesNames, name)) { - const error = { - message: defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({ - topLevelRule: name, - grammarName: this.className - }), - type: ParserDefinitionErrorType.DUPLICATE_RULE_NAME, - ruleName: name - }; - this.definitionErrors.push(error); - } - this.definedRulesNames.push(name); - const ruleImplementation = this.defineRule(name, implementation, config); - this[name] = ruleImplementation; - return ruleImplementation; - } - OVERRIDE_RULE(name, impl, config = DEFAULT_RULE_CONFIG) { - const ruleErrors = validateRuleIsOverridden(name, this.definedRulesNames, this.className); - this.definitionErrors = this.definitionErrors.concat(ruleErrors); - const ruleImplementation = this.defineRule(name, impl, config); - this[name] = ruleImplementation; - return ruleImplementation; - } - BACKTRACK(grammarRule, args) { - return function() { - this.isBackTrackingStack.push(1); - const orgState = this.saveRecogState(); - try { - grammarRule.apply(this, args); - return true; - } catch (e) { - if (isRecognitionException(e)) return false; - else throw e; - } finally { - this.reloadRecogState(orgState); - this.isBackTrackingStack.pop(); - } - }; - } - getGAstProductions() { - return this.gastProductionsCache; - } - getSerializedGastProductions() { - return serializeGrammar(values(this.gastProductionsCache)); - } - } - class RecognizerEngine { - initRecognizerEngine(tokenVocabulary, config) { - this.className = this.constructor.name; - this.shortRuleNameToFull = {}; - this.fullRuleNameToShort = {}; - this.ruleShortNameIdx = 256; - this.tokenMatcher = tokenStructuredMatcherNoCategories; - this.subruleIdx = 0; - this.definedRulesNames = []; - this.tokensMap = {}; - this.isBackTrackingStack = []; - this.RULE_STACK = []; - this.RULE_OCCURRENCE_STACK = []; - this.gastProductionsCache = {}; - if (has(config, "serializedGrammar")) throw Error("The Parser's configuration can no longer contain a <serializedGrammar> property.\n See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0\n For Further details."); - if (isArray$1(tokenVocabulary)) { - if (isEmpty(tokenVocabulary)) throw Error("A Token Vocabulary cannot be empty.\n Note that the first argument for the parser constructor\n is no longer a Token vector (since v4.0)."); - if (typeof tokenVocabulary[0].startOffset === "number") throw Error("The Parser constructor no longer accepts a token vector as the first argument.\n See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0\n For Further details."); - } - if (isArray$1(tokenVocabulary)) this.tokensMap = reduce(tokenVocabulary, (acc, tokType) => { - acc[tokType.name] = tokType; - return acc; - }, {}); - else if (has(tokenVocabulary, "modes") && every(flatten(values(tokenVocabulary.modes)), isTokenType)) { - const uniqueTokens = uniq(flatten(values(tokenVocabulary.modes))); - this.tokensMap = reduce(uniqueTokens, (acc, tokType) => { - acc[tokType.name] = tokType; - return acc; - }, {}); - } else if (isObject(tokenVocabulary)) this.tokensMap = clone(tokenVocabulary); - else throw new Error("<tokensDictionary> argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition"); - this.tokensMap["EOF"] = EOF; - const noTokenCategoriesUsed = every(has(tokenVocabulary, "modes") ? flatten(values(tokenVocabulary.modes)) : values(tokenVocabulary), (tokenConstructor) => isEmpty(tokenConstructor.categoryMatches)); - this.tokenMatcher = noTokenCategoriesUsed ? tokenStructuredMatcherNoCategories : tokenStructuredMatcher; - augmentTokenTypes(values(this.tokensMap)); - } - defineRule(ruleName, impl, config) { - if (this.selfAnalysisDone) throw Error(`Grammar rule <${ruleName}> may not be defined after the 'performSelfAnalysis' method has been called' -Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`); - const resyncEnabled = has(config, "resyncEnabled") ? config.resyncEnabled : DEFAULT_RULE_CONFIG.resyncEnabled; - const recoveryValueFunc = has(config, "recoveryValueFunc") ? config.recoveryValueFunc : DEFAULT_RULE_CONFIG.recoveryValueFunc; - const shortName = this.ruleShortNameIdx << 12; - this.ruleShortNameIdx++; - this.shortRuleNameToFull[shortName] = ruleName; - this.fullRuleNameToShort[ruleName] = shortName; - let invokeRuleWithTry; - if (this.outputCst === true) invokeRuleWithTry = function invokeRuleWithTry2(...args) { - try { - this.ruleInvocationStateUpdate(shortName, ruleName, this.subruleIdx); - impl.apply(this, args); - const cst = this.CST_STACK[this.CST_STACK.length - 1]; - this.cstPostRule(cst); - return cst; - } catch (e) { - return this.invokeRuleCatch(e, resyncEnabled, recoveryValueFunc); - } finally { - this.ruleFinallyStateUpdate(); - } - }; - else invokeRuleWithTry = function invokeRuleWithTryCst(...args) { - try { - this.ruleInvocationStateUpdate(shortName, ruleName, this.subruleIdx); - return impl.apply(this, args); - } catch (e) { - return this.invokeRuleCatch(e, resyncEnabled, recoveryValueFunc); - } finally { - this.ruleFinallyStateUpdate(); - } - }; - return Object.assign(invokeRuleWithTry, { - ruleName, - originalGrammarAction: impl - }); - } - invokeRuleCatch(e, resyncEnabledConfig, recoveryValueFunc) { - const isFirstInvokedRule = this.RULE_STACK.length === 1; - const reSyncEnabled = resyncEnabledConfig && !this.isBackTracking() && this.recoveryEnabled; - if (isRecognitionException(e)) { - const recogError = e; - if (reSyncEnabled) { - const reSyncTokType = this.findReSyncTokenType(); - if (this.isInCurrentRuleReSyncSet(reSyncTokType)) { - recogError.resyncedTokens = this.reSyncTo(reSyncTokType); - if (this.outputCst) { - const partialCstResult = this.CST_STACK[this.CST_STACK.length - 1]; - partialCstResult.recoveredNode = true; - return partialCstResult; - } else return recoveryValueFunc(e); - } else { - if (this.outputCst) { - const partialCstResult = this.CST_STACK[this.CST_STACK.length - 1]; - partialCstResult.recoveredNode = true; - recogError.partialCstResult = partialCstResult; - } - throw recogError; - } - } else if (isFirstInvokedRule) { - this.moveToTerminatedState(); - return recoveryValueFunc(e); - } else throw recogError; - } else throw e; - } - optionInternal(actionORMethodDef, occurrence) { - const key = this.getKeyForAutomaticLookahead(OPTION_IDX, occurrence); - return this.optionInternalLogic(actionORMethodDef, occurrence, key); - } - optionInternalLogic(actionORMethodDef, occurrence, key) { - let lookAheadFunc = this.getLaFuncFromCache(key); - let action; - if (typeof actionORMethodDef !== "function") { - action = actionORMethodDef.DEF; - const predicate = actionORMethodDef.GATE; - if (predicate !== void 0) { - const orgLookaheadFunction = lookAheadFunc; - lookAheadFunc = () => { - return predicate.call(this) && orgLookaheadFunction.call(this); - }; - } - } else action = actionORMethodDef; - if (lookAheadFunc.call(this) === true) return action.call(this); - } - atLeastOneInternal(prodOccurrence, actionORMethodDef) { - const laKey = this.getKeyForAutomaticLookahead(AT_LEAST_ONE_IDX, prodOccurrence); - return this.atLeastOneInternalLogic(prodOccurrence, actionORMethodDef, laKey); - } - atLeastOneInternalLogic(prodOccurrence, actionORMethodDef, key) { - let lookAheadFunc = this.getLaFuncFromCache(key); - let action; - if (typeof actionORMethodDef !== "function") { - action = actionORMethodDef.DEF; - const predicate = actionORMethodDef.GATE; - if (predicate !== void 0) { - const orgLookaheadFunction = lookAheadFunc; - lookAheadFunc = () => { - return predicate.call(this) && orgLookaheadFunction.call(this); - }; - } - } else action = actionORMethodDef; - if (lookAheadFunc.call(this) === true) { - let notStuck = this.doSingleRepetition(action); - while (lookAheadFunc.call(this) === true && notStuck === true) notStuck = this.doSingleRepetition(action); - } else throw this.raiseEarlyExitException(prodOccurrence, PROD_TYPE.REPETITION_MANDATORY, actionORMethodDef.ERR_MSG); - this.attemptInRepetitionRecovery(this.atLeastOneInternal, [prodOccurrence, actionORMethodDef], lookAheadFunc, AT_LEAST_ONE_IDX, prodOccurrence, NextTerminalAfterAtLeastOneWalker); - } - atLeastOneSepFirstInternal(prodOccurrence, options) { - const laKey = this.getKeyForAutomaticLookahead(AT_LEAST_ONE_SEP_IDX, prodOccurrence); - this.atLeastOneSepFirstInternalLogic(prodOccurrence, options, laKey); - } - atLeastOneSepFirstInternalLogic(prodOccurrence, options, key) { - const action = options.DEF; - const separator = options.SEP; - if (this.getLaFuncFromCache(key).call(this) === true) { - action.call(this); - const separatorLookAheadFunc = () => { - return this.tokenMatcher(this.LA(1), separator); - }; - while (this.tokenMatcher(this.LA(1), separator) === true) { - this.CONSUME(separator); - action.call(this); - } - this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [ - prodOccurrence, - separator, - separatorLookAheadFunc, - action, - NextTerminalAfterAtLeastOneSepWalker - ], separatorLookAheadFunc, AT_LEAST_ONE_SEP_IDX, prodOccurrence, NextTerminalAfterAtLeastOneSepWalker); - } else throw this.raiseEarlyExitException(prodOccurrence, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR, options.ERR_MSG); - } - manyInternal(prodOccurrence, actionORMethodDef) { - const laKey = this.getKeyForAutomaticLookahead(MANY_IDX, prodOccurrence); - return this.manyInternalLogic(prodOccurrence, actionORMethodDef, laKey); - } - manyInternalLogic(prodOccurrence, actionORMethodDef, key) { - let lookaheadFunction = this.getLaFuncFromCache(key); - let action; - if (typeof actionORMethodDef !== "function") { - action = actionORMethodDef.DEF; - const predicate = actionORMethodDef.GATE; - if (predicate !== void 0) { - const orgLookaheadFunction = lookaheadFunction; - lookaheadFunction = () => { - return predicate.call(this) && orgLookaheadFunction.call(this); - }; - } - } else action = actionORMethodDef; - let notStuck = true; - while (lookaheadFunction.call(this) === true && notStuck === true) notStuck = this.doSingleRepetition(action); - this.attemptInRepetitionRecovery(this.manyInternal, [prodOccurrence, actionORMethodDef], lookaheadFunction, MANY_IDX, prodOccurrence, NextTerminalAfterManyWalker, notStuck); - } - manySepFirstInternal(prodOccurrence, options) { - const laKey = this.getKeyForAutomaticLookahead(MANY_SEP_IDX, prodOccurrence); - this.manySepFirstInternalLogic(prodOccurrence, options, laKey); - } - manySepFirstInternalLogic(prodOccurrence, options, key) { - const action = options.DEF; - const separator = options.SEP; - if (this.getLaFuncFromCache(key).call(this) === true) { - action.call(this); - const separatorLookAheadFunc = () => { - return this.tokenMatcher(this.LA(1), separator); - }; - while (this.tokenMatcher(this.LA(1), separator) === true) { - this.CONSUME(separator); - action.call(this); - } - this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [ - prodOccurrence, - separator, - separatorLookAheadFunc, - action, - NextTerminalAfterManySepWalker - ], separatorLookAheadFunc, MANY_SEP_IDX, prodOccurrence, NextTerminalAfterManySepWalker); - } - } - repetitionSepSecondInternal(prodOccurrence, separator, separatorLookAheadFunc, action, nextTerminalAfterWalker) { - while (separatorLookAheadFunc()) { - this.CONSUME(separator); - action.call(this); - } - this.attemptInRepetitionRecovery(this.repetitionSepSecondInternal, [ - prodOccurrence, - separator, - separatorLookAheadFunc, - action, - nextTerminalAfterWalker - ], separatorLookAheadFunc, AT_LEAST_ONE_SEP_IDX, prodOccurrence, nextTerminalAfterWalker); - } - doSingleRepetition(action) { - const beforeIteration = this.getLexerPosition(); - action.call(this); - return this.getLexerPosition() > beforeIteration; - } - orInternal(altsOrOpts, occurrence) { - const laKey = this.getKeyForAutomaticLookahead(OR_IDX, occurrence); - const alts = isArray$1(altsOrOpts) ? altsOrOpts : altsOrOpts.DEF; - const altIdxToTake = this.getLaFuncFromCache(laKey).call(this, alts); - if (altIdxToTake !== void 0) return alts[altIdxToTake].ALT.call(this); - this.raiseNoAltException(occurrence, altsOrOpts.ERR_MSG); - } - ruleFinallyStateUpdate() { - this.RULE_STACK.pop(); - this.RULE_OCCURRENCE_STACK.pop(); - this.cstFinallyStateUpdate(); - if (this.RULE_STACK.length === 0 && this.isAtEndOfInput() === false) { - const firstRedundantTok = this.LA(1); - const errMsg = this.errorMessageProvider.buildNotAllInputParsedMessage({ - firstRedundant: firstRedundantTok, - ruleName: this.getCurrRuleFullName() - }); - this.SAVE_ERROR(new NotAllInputParsedException(errMsg, firstRedundantTok)); - } - } - subruleInternal(ruleToCall, idx, options) { - let ruleResult; - try { - const args = options !== void 0 ? options.ARGS : void 0; - this.subruleIdx = idx; - ruleResult = ruleToCall.apply(this, args); - this.cstPostNonTerminal(ruleResult, options !== void 0 && options.LABEL !== void 0 ? options.LABEL : ruleToCall.ruleName); - return ruleResult; - } catch (e) { - throw this.subruleInternalError(e, options, ruleToCall.ruleName); - } - } - subruleInternalError(e, options, ruleName) { - if (isRecognitionException(e) && e.partialCstResult !== void 0) { - this.cstPostNonTerminal(e.partialCstResult, options !== void 0 && options.LABEL !== void 0 ? options.LABEL : ruleName); - delete e.partialCstResult; - } - throw e; - } - consumeInternal(tokType, idx, options) { - let consumedToken; - try { - const nextToken = this.LA(1); - if (this.tokenMatcher(nextToken, tokType) === true) { - this.consumeToken(); - consumedToken = nextToken; - } else this.consumeInternalError(tokType, nextToken, options); - } catch (eFromConsumption) { - consumedToken = this.consumeInternalRecovery(tokType, idx, eFromConsumption); - } - this.cstPostTerminal(options !== void 0 && options.LABEL !== void 0 ? options.LABEL : tokType.name, consumedToken); - return consumedToken; - } - consumeInternalError(tokType, nextToken, options) { - let msg; - const previousToken = this.LA(0); - if (options !== void 0 && options.ERR_MSG) msg = options.ERR_MSG; - else msg = this.errorMessageProvider.buildMismatchTokenMessage({ - expected: tokType, - actual: nextToken, - previous: previousToken, - ruleName: this.getCurrRuleFullName() - }); - throw this.SAVE_ERROR(new MismatchedTokenException(msg, nextToken, previousToken)); - } - consumeInternalRecovery(tokType, idx, eFromConsumption) { - if (this.recoveryEnabled && eFromConsumption.name === "MismatchedTokenException" && !this.isBackTracking()) { - const follows = this.getFollowsForInRuleRecovery(tokType, idx); - try { - return this.tryInRuleRecovery(tokType, follows); - } catch (eFromInRuleRecovery) { - if (eFromInRuleRecovery.name === IN_RULE_RECOVERY_EXCEPTION) throw eFromConsumption; - else throw eFromInRuleRecovery; - } - } else throw eFromConsumption; - } - saveRecogState() { - const savedErrors = this.errors; - const savedRuleStack = clone(this.RULE_STACK); - return { - errors: savedErrors, - lexerState: this.exportLexerState(), - RULE_STACK: savedRuleStack, - CST_STACK: this.CST_STACK - }; - } - reloadRecogState(newState) { - this.errors = newState.errors; - this.importLexerState(newState.lexerState); - this.RULE_STACK = newState.RULE_STACK; - } - ruleInvocationStateUpdate(shortName, fullName, idxInCallingRule) { - this.RULE_OCCURRENCE_STACK.push(idxInCallingRule); - this.RULE_STACK.push(shortName); - this.cstInvocationStateUpdate(fullName); - } - isBackTracking() { - return this.isBackTrackingStack.length !== 0; - } - getCurrRuleFullName() { - const shortName = this.getLastExplicitRuleShortName(); - return this.shortRuleNameToFull[shortName]; - } - shortRuleNameToFullName(shortName) { - return this.shortRuleNameToFull[shortName]; - } - isAtEndOfInput() { - return this.tokenMatcher(this.LA(1), EOF); - } - reset() { - this.resetLexerState(); - this.subruleIdx = 0; - this.isBackTrackingStack = []; - this.errors = []; - this.RULE_STACK = []; - this.CST_STACK = []; - this.RULE_OCCURRENCE_STACK = []; - } - } - class ErrorHandler { - initErrorHandler(config) { - this._errors = []; - this.errorMessageProvider = has(config, "errorMessageProvider") ? config.errorMessageProvider : DEFAULT_PARSER_CONFIG.errorMessageProvider; - } - SAVE_ERROR(error) { - if (isRecognitionException(error)) { - error.context = { - ruleStack: this.getHumanReadableRuleStack(), - ruleOccurrenceStack: clone(this.RULE_OCCURRENCE_STACK) - }; - this._errors.push(error); - return error; - } else throw Error("Trying to save an Error which is not a RecognitionException"); - } - get errors() { - return clone(this._errors); - } - set errors(newErrors) { - this._errors = newErrors; - } - raiseEarlyExitException(occurrence, prodType, userDefinedErrMsg) { - const ruleName = this.getCurrRuleFullName(); - const ruleGrammar = this.getGAstProductions()[ruleName]; - const insideProdPaths = getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, this.maxLookahead)[0]; - const actualTokens = []; - for (let i = 1; i <= this.maxLookahead; i++) actualTokens.push(this.LA(i)); - const msg = this.errorMessageProvider.buildEarlyExitMessage({ - expectedIterationPaths: insideProdPaths, - actual: actualTokens, - previous: this.LA(0), - customUserDescription: userDefinedErrMsg, - ruleName - }); - throw this.SAVE_ERROR(new EarlyExitException(msg, this.LA(1), this.LA(0))); - } - raiseNoAltException(occurrence, errMsgTypes) { - const ruleName = this.getCurrRuleFullName(); - const ruleGrammar = this.getGAstProductions()[ruleName]; - const lookAheadPathsPerAlternative = getLookaheadPathsForOr(occurrence, ruleGrammar, this.maxLookahead); - const actualTokens = []; - for (let i = 1; i <= this.maxLookahead; i++) actualTokens.push(this.LA(i)); - const previousToken = this.LA(0); - const errMsg = this.errorMessageProvider.buildNoViableAltMessage({ - expectedPathsPerAlt: lookAheadPathsPerAlternative, - actual: actualTokens, - previous: previousToken, - customUserDescription: errMsgTypes, - ruleName: this.getCurrRuleFullName() - }); - throw this.SAVE_ERROR(new NoViableAltException(errMsg, this.LA(1), previousToken)); - } - } - class ContentAssist { - initContentAssist() {} - computeContentAssist(startRuleName, precedingInput) { - const startRuleGast = this.gastProductionsCache[startRuleName]; - if (isUndefined(startRuleGast)) throw Error(`Rule ->${startRuleName}<- does not exist in this grammar.`); - return nextPossibleTokensAfter([startRuleGast], precedingInput, this.tokenMatcher, this.maxLookahead); - } - getNextPossibleTokenTypes(grammarPath) { - const topRuleName = head(grammarPath.ruleStack); - const topProduction = this.getGAstProductions()[topRuleName]; - return new NextAfterTokenWalker(topProduction, grammarPath).startWalking(); - } - } - const RECORDING_NULL_OBJECT = { description: "This Object indicates the Parser is during Recording Phase" }; - Object.freeze(RECORDING_NULL_OBJECT); - const HANDLE_SEPARATOR = true; - const MAX_METHOD_IDX = Math.pow(2, BITS_FOR_OCCURRENCE_IDX) - 1; - const RFT = createToken2({ - name: "RECORDING_PHASE_TOKEN", - pattern: Lexer2.NA - }); - augmentTokenTypes([RFT]); - const RECORDING_PHASE_TOKEN = createTokenInstance(RFT, "This IToken indicates the Parser is in Recording Phase\n See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details", -1, -1, -1, -1, -1, -1); - Object.freeze(RECORDING_PHASE_TOKEN); - const RECORDING_PHASE_CSTNODE = { - name: "This CSTNode indicates the Parser is in Recording Phase\n See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details", - children: {} - }; - class GastRecorder { - initGastRecorder(config) { - this.recordingProdStack = []; - this.RECORDING_PHASE = false; - } - enableRecording() { - this.RECORDING_PHASE = true; - this.TRACE_INIT("Enable Recording", () => { - for (let i = 0; i < 10; i++) { - const idx = i > 0 ? i : ""; - this[`CONSUME${idx}`] = function(arg1, arg2) { - return this.consumeInternalRecord(arg1, i, arg2); - }; - this[`SUBRULE${idx}`] = function(arg1, arg2) { - return this.subruleInternalRecord(arg1, i, arg2); - }; - this[`OPTION${idx}`] = function(arg1) { - return this.optionInternalRecord(arg1, i); - }; - this[`OR${idx}`] = function(arg1) { - return this.orInternalRecord(arg1, i); - }; - this[`MANY${idx}`] = function(arg1) { - this.manyInternalRecord(i, arg1); - }; - this[`MANY_SEP${idx}`] = function(arg1) { - this.manySepFirstInternalRecord(i, arg1); - }; - this[`AT_LEAST_ONE${idx}`] = function(arg1) { - this.atLeastOneInternalRecord(i, arg1); - }; - this[`AT_LEAST_ONE_SEP${idx}`] = function(arg1) { - this.atLeastOneSepFirstInternalRecord(i, arg1); - }; - } - this[`consume`] = function(idx, arg1, arg2) { - return this.consumeInternalRecord(arg1, idx, arg2); - }; - this[`subrule`] = function(idx, arg1, arg2) { - return this.subruleInternalRecord(arg1, idx, arg2); - }; - this[`option`] = function(idx, arg1) { - return this.optionInternalRecord(arg1, idx); - }; - this[`or`] = function(idx, arg1) { - return this.orInternalRecord(arg1, idx); - }; - this[`many`] = function(idx, arg1) { - this.manyInternalRecord(idx, arg1); - }; - this[`atLeastOne`] = function(idx, arg1) { - this.atLeastOneInternalRecord(idx, arg1); - }; - this.ACTION = this.ACTION_RECORD; - this.BACKTRACK = this.BACKTRACK_RECORD; - this.LA = this.LA_RECORD; - }); - } - disableRecording() { - this.RECORDING_PHASE = false; - this.TRACE_INIT("Deleting Recording methods", () => { - const that = this; - for (let i = 0; i < 10; i++) { - const idx = i > 0 ? i : ""; - delete that[`CONSUME${idx}`]; - delete that[`SUBRULE${idx}`]; - delete that[`OPTION${idx}`]; - delete that[`OR${idx}`]; - delete that[`MANY${idx}`]; - delete that[`MANY_SEP${idx}`]; - delete that[`AT_LEAST_ONE${idx}`]; - delete that[`AT_LEAST_ONE_SEP${idx}`]; - } - delete that[`consume`]; - delete that[`subrule`]; - delete that[`option`]; - delete that[`or`]; - delete that[`many`]; - delete that[`atLeastOne`]; - delete that.ACTION; - delete that.BACKTRACK; - delete that.LA; - }); - } - ACTION_RECORD(impl) {} - BACKTRACK_RECORD(grammarRule, args) { - return () => true; - } - LA_RECORD(howMuch) { - return END_OF_FILE; - } - topLevelRuleRecord(name, def) { - try { - const newTopLevelRule = new Rule({ - definition: [], - name - }); - newTopLevelRule.name = name; - this.recordingProdStack.push(newTopLevelRule); - def.call(this); - this.recordingProdStack.pop(); - return newTopLevelRule; - } catch (originalError) { - if (originalError.KNOWN_RECORDER_ERROR !== true) try { - originalError.message = originalError.message + "\n This error was thrown during the \"grammar recording phase\" For more info see:\n https://chevrotain.io/docs/guide/internals.html#grammar-recording"; - } catch (mutabilityError) { - throw originalError; - } - throw originalError; - } - } - optionInternalRecord(actionORMethodDef, occurrence) { - return recordProd.call(this, Option, actionORMethodDef, occurrence); - } - atLeastOneInternalRecord(occurrence, actionORMethodDef) { - recordProd.call(this, RepetitionMandatory, actionORMethodDef, occurrence); - } - atLeastOneSepFirstInternalRecord(occurrence, options) { - recordProd.call(this, RepetitionMandatoryWithSeparator, options, occurrence, HANDLE_SEPARATOR); - } - manyInternalRecord(occurrence, actionORMethodDef) { - recordProd.call(this, Repetition, actionORMethodDef, occurrence); - } - manySepFirstInternalRecord(occurrence, options) { - recordProd.call(this, RepetitionWithSeparator, options, occurrence, HANDLE_SEPARATOR); - } - orInternalRecord(altsOrOpts, occurrence) { - return recordOrProd.call(this, altsOrOpts, occurrence); - } - subruleInternalRecord(ruleToCall, occurrence, options) { - assertMethodIdxIsValid(occurrence); - if (!ruleToCall || has(ruleToCall, "ruleName") === false) { - const error = /* @__PURE__ */ new Error(`<SUBRULE${getIdxSuffix(occurrence)}> argument is invalid expecting a Parser method reference but got: <${JSON.stringify(ruleToCall)}> - inside top level rule: <${this.recordingProdStack[0].name}>`); - error.KNOWN_RECORDER_ERROR = true; - throw error; - } - const prevProd = last(this.recordingProdStack); - const ruleName = ruleToCall.ruleName; - const newNoneTerminal = new NonTerminal({ - idx: occurrence, - nonTerminalName: ruleName, - label: options === null || options === void 0 ? void 0 : options.LABEL, - referencedRule: void 0 - }); - prevProd.definition.push(newNoneTerminal); - return this.outputCst ? RECORDING_PHASE_CSTNODE : RECORDING_NULL_OBJECT; - } - consumeInternalRecord(tokType, occurrence, options) { - assertMethodIdxIsValid(occurrence); - if (!hasShortKeyProperty(tokType)) { - const error = /* @__PURE__ */ new Error(`<CONSUME${getIdxSuffix(occurrence)}> argument is invalid expecting a TokenType reference but got: <${JSON.stringify(tokType)}> - inside top level rule: <${this.recordingProdStack[0].name}>`); - error.KNOWN_RECORDER_ERROR = true; - throw error; - } - const prevProd = last(this.recordingProdStack); - const newNoneTerminal = new Terminal({ - idx: occurrence, - terminalType: tokType, - label: options === null || options === void 0 ? void 0 : options.LABEL - }); - prevProd.definition.push(newNoneTerminal); - return RECORDING_PHASE_TOKEN; - } - } - function recordProd(prodConstructor, mainProdArg, occurrence, handleSep = false) { - assertMethodIdxIsValid(occurrence); - const prevProd = last(this.recordingProdStack); - const grammarAction = isFunction(mainProdArg) ? mainProdArg : mainProdArg.DEF; - const newProd = new prodConstructor({ - definition: [], - idx: occurrence - }); - if (handleSep) newProd.separator = mainProdArg.SEP; - if (has(mainProdArg, "MAX_LOOKAHEAD")) newProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD; - this.recordingProdStack.push(newProd); - grammarAction.call(this); - prevProd.definition.push(newProd); - this.recordingProdStack.pop(); - return RECORDING_NULL_OBJECT; - } - function recordOrProd(mainProdArg, occurrence) { - assertMethodIdxIsValid(occurrence); - const prevProd = last(this.recordingProdStack); - const hasOptions = isArray$1(mainProdArg) === false; - const alts = hasOptions === false ? mainProdArg : mainProdArg.DEF; - const newOrProd = new Alternation({ - definition: [], - idx: occurrence, - ignoreAmbiguities: hasOptions && mainProdArg.IGNORE_AMBIGUITIES === true - }); - if (has(mainProdArg, "MAX_LOOKAHEAD")) newOrProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD; - newOrProd.hasPredicates = some(alts, (currAlt) => isFunction(currAlt.GATE)); - prevProd.definition.push(newOrProd); - forEach(alts, (currAlt) => { - const currAltFlat = new Alternative({ definition: [] }); - newOrProd.definition.push(currAltFlat); - if (has(currAlt, "IGNORE_AMBIGUITIES")) currAltFlat.ignoreAmbiguities = currAlt.IGNORE_AMBIGUITIES; - else if (has(currAlt, "GATE")) currAltFlat.ignoreAmbiguities = true; - this.recordingProdStack.push(currAltFlat); - currAlt.ALT.call(this); - this.recordingProdStack.pop(); - }); - return RECORDING_NULL_OBJECT; - } - function getIdxSuffix(idx) { - return idx === 0 ? "" : `${idx}`; - } - function assertMethodIdxIsValid(idx) { - if (idx < 0 || idx > MAX_METHOD_IDX) { - const error = /* @__PURE__ */ new Error(`Invalid DSL Method idx value: <${idx}> - Idx value must be a none negative value smaller than ${MAX_METHOD_IDX + 1}`); - error.KNOWN_RECORDER_ERROR = true; - throw error; - } - } - class PerformanceTracer { - initPerformanceTracer(config) { - if (has(config, "traceInitPerf")) { - const userTraceInitPerf = config.traceInitPerf; - const traceIsNumber = typeof userTraceInitPerf === "number"; - this.traceInitMaxIdent = traceIsNumber ? userTraceInitPerf : Infinity; - this.traceInitPerf = traceIsNumber ? userTraceInitPerf > 0 : userTraceInitPerf; - } else { - this.traceInitMaxIdent = 0; - this.traceInitPerf = DEFAULT_PARSER_CONFIG.traceInitPerf; - } - this.traceInitIndent = -1; - } - TRACE_INIT(phaseDesc, phaseImpl) { - if (this.traceInitPerf === true) { - this.traceInitIndent++; - const indent = new Array(this.traceInitIndent + 1).join(" "); - if (this.traceInitIndent < this.traceInitMaxIdent) console.log(`${indent}--> <${phaseDesc}>`); - const { time, value } = timer(phaseImpl); - const traceMethod = time > 10 ? console.warn : console.log; - if (this.traceInitIndent < this.traceInitMaxIdent) traceMethod(`${indent}<-- <${phaseDesc}> time: ${time}ms`); - this.traceInitIndent--; - return value; - } else return phaseImpl(); - } - } - function applyMixins(derivedCtor, baseCtors) { - baseCtors.forEach((baseCtor) => { - const baseProto = baseCtor.prototype; - Object.getOwnPropertyNames(baseProto).forEach((propName) => { - if (propName === "constructor") return; - const basePropDescriptor = Object.getOwnPropertyDescriptor(baseProto, propName); - if (basePropDescriptor && (basePropDescriptor.get || basePropDescriptor.set)) Object.defineProperty(derivedCtor.prototype, propName, basePropDescriptor); - else derivedCtor.prototype[propName] = baseCtor.prototype[propName]; - }); - }); - } - const END_OF_FILE = createTokenInstance(EOF, "", NaN, NaN, NaN, NaN, NaN, NaN); - Object.freeze(END_OF_FILE); - const DEFAULT_PARSER_CONFIG = Object.freeze({ - recoveryEnabled: false, - maxLookahead: 3, - dynamicTokensEnabled: false, - outputCst: true, - errorMessageProvider: defaultParserErrorProvider, - nodeLocationTracking: "none", - traceInitPerf: false, - skipValidations: false - }); - const DEFAULT_RULE_CONFIG = Object.freeze({ - recoveryValueFunc: () => void 0, - resyncEnabled: true - }); - var ParserDefinitionErrorType; - (function(ParserDefinitionErrorType2) { - ParserDefinitionErrorType2[ParserDefinitionErrorType2["INVALID_RULE_NAME"] = 0] = "INVALID_RULE_NAME"; - ParserDefinitionErrorType2[ParserDefinitionErrorType2["DUPLICATE_RULE_NAME"] = 1] = "DUPLICATE_RULE_NAME"; - ParserDefinitionErrorType2[ParserDefinitionErrorType2["INVALID_RULE_OVERRIDE"] = 2] = "INVALID_RULE_OVERRIDE"; - ParserDefinitionErrorType2[ParserDefinitionErrorType2["DUPLICATE_PRODUCTIONS"] = 3] = "DUPLICATE_PRODUCTIONS"; - ParserDefinitionErrorType2[ParserDefinitionErrorType2["UNRESOLVED_SUBRULE_REF"] = 4] = "UNRESOLVED_SUBRULE_REF"; - ParserDefinitionErrorType2[ParserDefinitionErrorType2["LEFT_RECURSION"] = 5] = "LEFT_RECURSION"; - ParserDefinitionErrorType2[ParserDefinitionErrorType2["NONE_LAST_EMPTY_ALT"] = 6] = "NONE_LAST_EMPTY_ALT"; - ParserDefinitionErrorType2[ParserDefinitionErrorType2["AMBIGUOUS_ALTS"] = 7] = "AMBIGUOUS_ALTS"; - ParserDefinitionErrorType2[ParserDefinitionErrorType2["CONFLICT_TOKENS_RULES_NAMESPACE"] = 8] = "CONFLICT_TOKENS_RULES_NAMESPACE"; - ParserDefinitionErrorType2[ParserDefinitionErrorType2["INVALID_TOKEN_NAME"] = 9] = "INVALID_TOKEN_NAME"; - ParserDefinitionErrorType2[ParserDefinitionErrorType2["NO_NON_EMPTY_LOOKAHEAD"] = 10] = "NO_NON_EMPTY_LOOKAHEAD"; - ParserDefinitionErrorType2[ParserDefinitionErrorType2["AMBIGUOUS_PREFIX_ALTS"] = 11] = "AMBIGUOUS_PREFIX_ALTS"; - ParserDefinitionErrorType2[ParserDefinitionErrorType2["TOO_MANY_ALTS"] = 12] = "TOO_MANY_ALTS"; - ParserDefinitionErrorType2[ParserDefinitionErrorType2["CUSTOM_LOOKAHEAD_VALIDATION"] = 13] = "CUSTOM_LOOKAHEAD_VALIDATION"; - })(ParserDefinitionErrorType || (ParserDefinitionErrorType = {})); - class Parser { - /** - * @deprecated use the **instance** method with the same name instead - */ - static performSelfAnalysis(parserInstance) { - throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead."); - } - performSelfAnalysis() { - this.TRACE_INIT("performSelfAnalysis", () => { - let defErrorsMsgs; - this.selfAnalysisDone = true; - const className = this.className; - this.TRACE_INIT("toFastProps", () => { - toFastProperties(this); - }); - this.TRACE_INIT("Grammar Recording", () => { - try { - this.enableRecording(); - forEach(this.definedRulesNames, (currRuleName) => { - const originalGrammarAction = this[currRuleName]["originalGrammarAction"]; - let recordedRuleGast; - this.TRACE_INIT(`${currRuleName} Rule`, () => { - recordedRuleGast = this.topLevelRuleRecord(currRuleName, originalGrammarAction); - }); - this.gastProductionsCache[currRuleName] = recordedRuleGast; - }); - } finally { - this.disableRecording(); - } - }); - let resolverErrors = []; - this.TRACE_INIT("Grammar Resolving", () => { - resolverErrors = resolveGrammar({ rules: values(this.gastProductionsCache) }); - this.definitionErrors = this.definitionErrors.concat(resolverErrors); - }); - this.TRACE_INIT("Grammar Validations", () => { - if (isEmpty(resolverErrors) && this.skipValidations === false) { - const validationErrors = validateGrammar({ - rules: values(this.gastProductionsCache), - tokenTypes: values(this.tokensMap), - errMsgProvider: defaultGrammarValidatorErrorProvider, - grammarName: className - }); - const lookaheadValidationErrors = validateLookahead({ - lookaheadStrategy: this.lookaheadStrategy, - rules: values(this.gastProductionsCache), - tokenTypes: values(this.tokensMap), - grammarName: className - }); - this.definitionErrors = this.definitionErrors.concat(validationErrors, lookaheadValidationErrors); - } - }); - if (isEmpty(this.definitionErrors)) { - if (this.recoveryEnabled) this.TRACE_INIT("computeAllProdsFollows", () => { - const allFollows = computeAllProdsFollows(values(this.gastProductionsCache)); - this.resyncFollows = allFollows; - }); - this.TRACE_INIT("ComputeLookaheadFunctions", () => { - var _a, _b; - (_b = (_a = this.lookaheadStrategy).initialize) === null || _b === void 0 || _b.call(_a, { rules: values(this.gastProductionsCache) }); - this.preComputeLookaheadFunctions(values(this.gastProductionsCache)); - }); - } - if (!Parser.DEFER_DEFINITION_ERRORS_HANDLING && !isEmpty(this.definitionErrors)) { - defErrorsMsgs = map(this.definitionErrors, (defError) => defError.message); - throw new Error(`Parser Definition Errors detected: - ${defErrorsMsgs.join("\n-------------------------------\n")}`); - } - }); - } - constructor(tokenVocabulary, config) { - this.definitionErrors = []; - this.selfAnalysisDone = false; - const that = this; - that.initErrorHandler(config); - that.initLexerAdapter(); - that.initLooksAhead(config); - that.initRecognizerEngine(tokenVocabulary, config); - that.initRecoverable(config); - that.initTreeBuilder(config); - that.initContentAssist(); - that.initGastRecorder(config); - that.initPerformanceTracer(config); - if (has(config, "ignoredIssues")) throw new Error("The <ignoredIssues> IParserConfig property has been deprecated.\n Please use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead.\n See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES\n For further details."); - this.skipValidations = has(config, "skipValidations") ? config.skipValidations : DEFAULT_PARSER_CONFIG.skipValidations; - } - } - Parser.DEFER_DEFINITION_ERRORS_HANDLING = false; - applyMixins(Parser, [ - Recoverable, - LooksAhead, - TreeBuilder, - LexerAdapter, - RecognizerEngine, - RecognizerApi, - ErrorHandler, - ContentAssist, - GastRecorder, - PerformanceTracer - ]); - class CstParser2 extends Parser { - constructor(tokenVocabulary, config = DEFAULT_PARSER_CONFIG) { - const configClone = clone(config); - configClone.outputCst = true; - super(tokenVocabulary, configClone); - } - } - return { - CstParser: CstParser2, - Lexer: Lexer2, - createToken: createToken2 - }; -})(); -//#endregion -//#region node_modules/three-stdlib/loaders/VRMLLoader.js -var VRMLLoader = class extends Loader { - constructor(manager) { - super(manager); - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const path = scope.path === "" ? LoaderUtils.extractUrlBase(url) : scope.path; - const loader = new FileLoader(scope.manager); - loader.setPath(scope.path); - loader.setRequestHeader(scope.requestHeader); - loader.setWithCredentials(scope.withCredentials); - loader.load(url, function(text) { - try { - onLoad(scope.parse(text, path)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(data, path) { - const nodeMap = {}; - function generateVRMLTree(data2) { - const tokenData = createTokens(); - const lexer = new VRMLLexer(tokenData.tokens); - const parser = new VRMLParser(tokenData.tokenVocabulary); - const visitor = createVisitor(parser.getBaseCstVisitorConstructor()); - parser.input = lexer.lex(data2).tokens; - const cstOutput = parser.vrml(); - if (parser.errors.length > 0) { - console.error(parser.errors); - throw Error("THREE.VRMLLoader: Parsing errors detected."); - } - return visitor.visit(cstOutput); - } - function createTokens() { - const RouteIdentifier = createToken({ - name: "RouteIdentifier", - pattern: /[^\x30-\x39\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d][^\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d]*[\.][^\x30-\x39\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d][^\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d]*/ - }); - const Identifier = createToken({ - name: "Identifier", - pattern: /[^\x30-\x39\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d][^\0-\x20\x22\x27\x23\x2b\x2c\x2d\x2e\x5b\x5d\x5c\x7b\x7d]*/, - longer_alt: RouteIdentifier - }); - const nodeTypes = [ - "Anchor", - "Billboard", - "Collision", - "Group", - "Transform", - "Inline", - "LOD", - "Switch", - "AudioClip", - "DirectionalLight", - "PointLight", - "Script", - "Shape", - "Sound", - "SpotLight", - "WorldInfo", - "CylinderSensor", - "PlaneSensor", - "ProximitySensor", - "SphereSensor", - "TimeSensor", - "TouchSensor", - "VisibilitySensor", - "Box", - "Cone", - "Cylinder", - "ElevationGrid", - "Extrusion", - "IndexedFaceSet", - "IndexedLineSet", - "PointSet", - "Sphere", - "Color", - "Coordinate", - "Normal", - "TextureCoordinate", - "Appearance", - "FontStyle", - "ImageTexture", - "Material", - "MovieTexture", - "PixelTexture", - "TextureTransform", - "ColorInterpolator", - "CoordinateInterpolator", - "NormalInterpolator", - "OrientationInterpolator", - "PositionInterpolator", - "ScalarInterpolator", - "Background", - "Fog", - "NavigationInfo", - "Viewpoint", - "Text" - ]; - const Version = createToken({ - name: "Version", - pattern: /#VRML.*/, - longer_alt: Identifier - }); - const NodeName = createToken({ - name: "NodeName", - pattern: new RegExp(nodeTypes.join("|")), - longer_alt: Identifier - }); - const DEF = createToken({ - name: "DEF", - pattern: /DEF/, - longer_alt: Identifier - }); - const USE = createToken({ - name: "USE", - pattern: /USE/, - longer_alt: Identifier - }); - const ROUTE = createToken({ - name: "ROUTE", - pattern: /ROUTE/, - longer_alt: Identifier - }); - const TO = createToken({ - name: "TO", - pattern: /TO/, - longer_alt: Identifier - }); - const StringLiteral = createToken({ - name: "StringLiteral", - pattern: /"(?:[^\\"\n\r]|\\[bfnrtv"\\/]|\\u[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F])*"/ - }); - const HexLiteral = createToken({ - name: "HexLiteral", - pattern: /0[xX][0-9a-fA-F]+/ - }); - const NumberLiteral = createToken({ - name: "NumberLiteral", - pattern: /[-+]?[0-9]*\.?[0-9]+([eE][-+]?[0-9]+)?/ - }); - const TrueLiteral = createToken({ - name: "TrueLiteral", - pattern: /TRUE/ - }); - const FalseLiteral = createToken({ - name: "FalseLiteral", - pattern: /FALSE/ - }); - const NullLiteral = createToken({ - name: "NullLiteral", - pattern: /NULL/ - }); - const LSquare = createToken({ - name: "LSquare", - pattern: /\[/ - }); - const RSquare = createToken({ - name: "RSquare", - pattern: /]/ - }); - const LCurly = createToken({ - name: "LCurly", - pattern: /{/ - }); - const RCurly = createToken({ - name: "RCurly", - pattern: /}/ - }); - const Comment = createToken({ - name: "Comment", - pattern: /#.*/, - group: Lexer.SKIPPED - }); - const tokens = [ - createToken({ - name: "WhiteSpace", - pattern: /[ ,\s]/, - group: Lexer.SKIPPED - }), - NodeName, - DEF, - USE, - ROUTE, - TO, - TrueLiteral, - FalseLiteral, - NullLiteral, - Version, - Identifier, - RouteIdentifier, - StringLiteral, - HexLiteral, - NumberLiteral, - LSquare, - RSquare, - LCurly, - RCurly, - Comment - ]; - const tokenVocabulary = {}; - for (let i = 0, l = tokens.length; i < l; i++) { - const token = tokens[i]; - tokenVocabulary[token.name] = token; - } - return { - tokens, - tokenVocabulary - }; - } - function createVisitor(BaseVRMLVisitor) { - function VRMLToASTVisitor() { - BaseVRMLVisitor.call(this); - this.validateVisitor(); - } - VRMLToASTVisitor.prototype = Object.assign(Object.create(BaseVRMLVisitor.prototype), { - constructor: VRMLToASTVisitor, - vrml: function(ctx) { - const data2 = { - version: this.visit(ctx.version), - nodes: [], - routes: [] - }; - for (let i = 0, l = ctx.node.length; i < l; i++) { - const node = ctx.node[i]; - data2.nodes.push(this.visit(node)); - } - if (ctx.route) for (let i = 0, l = ctx.route.length; i < l; i++) { - const route = ctx.route[i]; - data2.routes.push(this.visit(route)); - } - return data2; - }, - version: function(ctx) { - return ctx.Version[0].image; - }, - node: function(ctx) { - const data2 = { - name: ctx.NodeName[0].image, - fields: [] - }; - if (ctx.field) for (let i = 0, l = ctx.field.length; i < l; i++) { - const field = ctx.field[i]; - data2.fields.push(this.visit(field)); - } - if (ctx.def) data2.DEF = this.visit(ctx.def[0]); - return data2; - }, - field: function(ctx) { - const data2 = { - name: ctx.Identifier[0].image, - type: null, - values: null - }; - let result; - if (ctx.singleFieldValue) result = this.visit(ctx.singleFieldValue[0]); - if (ctx.multiFieldValue) result = this.visit(ctx.multiFieldValue[0]); - data2.type = result.type; - data2.values = result.values; - return data2; - }, - def: function(ctx) { - return (ctx.Identifier || ctx.NodeName)[0].image; - }, - use: function(ctx) { - return { USE: (ctx.Identifier || ctx.NodeName)[0].image }; - }, - singleFieldValue: function(ctx) { - return processField(this, ctx); - }, - multiFieldValue: function(ctx) { - return processField(this, ctx); - }, - route: function(ctx) { - return { - FROM: ctx.RouteIdentifier[0].image, - TO: ctx.RouteIdentifier[1].image - }; - } - }); - function processField(scope, ctx) { - const field = { - type: null, - values: [] - }; - if (ctx.node) { - field.type = "node"; - for (let i = 0, l = ctx.node.length; i < l; i++) { - const node = ctx.node[i]; - field.values.push(scope.visit(node)); - } - } - if (ctx.use) { - field.type = "use"; - for (let i = 0, l = ctx.use.length; i < l; i++) { - const use = ctx.use[i]; - field.values.push(scope.visit(use)); - } - } - if (ctx.StringLiteral) { - field.type = "string"; - for (let i = 0, l = ctx.StringLiteral.length; i < l; i++) { - const stringLiteral = ctx.StringLiteral[i]; - field.values.push(stringLiteral.image.replace(/'|"/g, "")); - } - } - if (ctx.NumberLiteral) { - field.type = "number"; - for (let i = 0, l = ctx.NumberLiteral.length; i < l; i++) { - const numberLiteral = ctx.NumberLiteral[i]; - field.values.push(parseFloat(numberLiteral.image)); - } - } - if (ctx.HexLiteral) { - field.type = "hex"; - for (let i = 0, l = ctx.HexLiteral.length; i < l; i++) { - const hexLiteral = ctx.HexLiteral[i]; - field.values.push(hexLiteral.image); - } - } - if (ctx.TrueLiteral) { - field.type = "boolean"; - for (let i = 0, l = ctx.TrueLiteral.length; i < l; i++) if (ctx.TrueLiteral[i].image === "TRUE") field.values.push(true); - } - if (ctx.FalseLiteral) { - field.type = "boolean"; - for (let i = 0, l = ctx.FalseLiteral.length; i < l; i++) if (ctx.FalseLiteral[i].image === "FALSE") field.values.push(false); - } - if (ctx.NullLiteral) { - field.type = "null"; - ctx.NullLiteral.forEach(function() { - field.values.push(null); - }); - } - return field; - } - return new VRMLToASTVisitor(); - } - function parseTree(tree2) { - const nodes = tree2.nodes; - const scene2 = new Scene(); - for (let i = 0, l = nodes.length; i < l; i++) { - const node = nodes[i]; - buildNodeMap(node); - } - for (let i = 0, l = nodes.length; i < l; i++) { - const node = nodes[i]; - const object = getNode(node); - if (object instanceof Object3D) scene2.add(object); - if (node.name === "WorldInfo") scene2.userData.worldInfo = object; - } - return scene2; - } - function buildNodeMap(node) { - if (node.DEF) nodeMap[node.DEF] = node; - const fields = node.fields; - for (let i = 0, l = fields.length; i < l; i++) { - const field = fields[i]; - if (field.type === "node") { - const fieldValues = field.values; - for (let j = 0, jl = fieldValues.length; j < jl; j++) buildNodeMap(fieldValues[j]); - } - } - } - function getNode(node) { - if (node.USE) return resolveUSE(node.USE); - if (node.build !== void 0) return node.build; - node.build = buildNode(node); - return node.build; - } - function buildNode(node) { - const nodeName = node.name; - let build; - switch (nodeName) { - case "Group": - case "Transform": - case "Collision": - build = buildGroupingNode(node); - break; - case "Background": - build = buildBackgroundNode(node); - break; - case "Shape": - build = buildShapeNode(node); - break; - case "Appearance": - build = buildAppearanceNode(node); - break; - case "Material": - build = buildMaterialNode(node); - break; - case "ImageTexture": - build = buildImageTextureNode(node); - break; - case "PixelTexture": - build = buildPixelTextureNode(node); - break; - case "TextureTransform": - build = buildTextureTransformNode(node); - break; - case "IndexedFaceSet": - build = buildIndexedFaceSetNode(node); - break; - case "IndexedLineSet": - build = buildIndexedLineSetNode(node); - break; - case "PointSet": - build = buildPointSetNode(node); - break; - case "Box": - build = buildBoxNode(node); - break; - case "Cone": - build = buildConeNode(node); - break; - case "Cylinder": - build = buildCylinderNode(node); - break; - case "Sphere": - build = buildSphereNode(node); - break; - case "ElevationGrid": - build = buildElevationGridNode(node); - break; - case "Extrusion": - build = buildExtrusionNode(node); - break; - case "Color": - case "Coordinate": - case "Normal": - case "TextureCoordinate": - build = buildGeometricNode(node); - break; - case "WorldInfo": - build = buildWorldInfoNode(node); - break; - case "Anchor": - case "Billboard": - case "Inline": - case "LOD": - case "Switch": - case "AudioClip": - case "DirectionalLight": - case "PointLight": - case "Script": - case "Sound": - case "SpotLight": - case "CylinderSensor": - case "PlaneSensor": - case "ProximitySensor": - case "SphereSensor": - case "TimeSensor": - case "TouchSensor": - case "VisibilitySensor": - case "Text": - case "FontStyle": - case "MovieTexture": - case "ColorInterpolator": - case "CoordinateInterpolator": - case "NormalInterpolator": - case "OrientationInterpolator": - case "PositionInterpolator": - case "ScalarInterpolator": - case "Fog": - case "NavigationInfo": - case "Viewpoint": break; - default: - console.warn("THREE.VRMLLoader: Unknown node:", nodeName); - break; - } - if (build !== void 0 && node.DEF !== void 0 && build.hasOwnProperty("name") === true) build.name = node.DEF; - return build; - } - function buildGroupingNode(node) { - const object = new Group(); - const fields = node.fields; - for (let i = 0, l = fields.length; i < l; i++) { - const field = fields[i]; - const fieldName = field.name; - const fieldValues = field.values; - switch (fieldName) { - case "bboxCenter": break; - case "bboxSize": break; - case "center": break; - case "children": - parseFieldChildren(fieldValues, object); - break; - case "collide": break; - case "rotation": - const axis = new Vector3(fieldValues[0], fieldValues[1], fieldValues[2]).normalize(); - const angle = fieldValues[3]; - object.quaternion.setFromAxisAngle(axis, angle); - break; - case "scale": - object.scale.set(fieldValues[0], fieldValues[1], fieldValues[2]); - break; - case "scaleOrientation": break; - case "translation": - object.position.set(fieldValues[0], fieldValues[1], fieldValues[2]); - break; - case "proxy": break; - default: - console.warn("THREE.VRMLLoader: Unknown field:", fieldName); - break; - } - } - return object; - } - function buildBackgroundNode(node) { - const group = new Group(); - let groundAngle, groundColor; - let skyAngle, skyColor; - const fields = node.fields; - for (let i = 0, l = fields.length; i < l; i++) { - const field = fields[i]; - const fieldName = field.name; - const fieldValues = field.values; - switch (fieldName) { - case "groundAngle": - groundAngle = fieldValues; - break; - case "groundColor": - groundColor = fieldValues; - break; - case "backUrl": break; - case "bottomUrl": break; - case "frontUrl": break; - case "leftUrl": break; - case "rightUrl": break; - case "topUrl": break; - case "skyAngle": - skyAngle = fieldValues; - break; - case "skyColor": - skyColor = fieldValues; - break; - default: - console.warn("THREE.VRMLLoader: Unknown field:", fieldName); - break; - } - } - const radius = 1e4; - if (skyColor) { - const skyGeometry = new SphereGeometry(radius, 32, 16); - const skyMaterial = new MeshBasicMaterial({ - fog: false, - side: 1, - depthWrite: false, - depthTest: false - }); - if (skyColor.length > 3) { - paintFaces(skyGeometry, radius, skyAngle, toColorArray(skyColor), true); - skyMaterial.vertexColors = true; - } else skyMaterial.color.setRGB(skyColor[0], skyColor[1], skyColor[2]); - const sky = new Mesh(skyGeometry, skyMaterial); - group.add(sky); - } - if (groundColor) { - if (groundColor.length > 0) { - const groundGeometry = new SphereGeometry(radius, 32, 16, 0, 2 * Math.PI, .5 * Math.PI, 1.5 * Math.PI); - const groundMaterial = new MeshBasicMaterial({ - fog: false, - side: 1, - vertexColors: true, - depthWrite: false, - depthTest: false - }); - paintFaces(groundGeometry, radius, groundAngle, toColorArray(groundColor), false); - const ground = new Mesh(groundGeometry, groundMaterial); - group.add(ground); - } - } - group.renderOrder = -Infinity; - return group; - } - function buildShapeNode(node) { - const fields = node.fields; - let material = new MeshBasicMaterial({ color: 0 }); - let geometry; - for (let i = 0, l = fields.length; i < l; i++) { - const field = fields[i]; - const fieldName = field.name; - const fieldValues = field.values; - switch (fieldName) { - case "appearance": - if (fieldValues[0] !== null) material = getNode(fieldValues[0]); - break; - case "geometry": - if (fieldValues[0] !== null) geometry = getNode(fieldValues[0]); - break; - default: - console.warn("THREE.VRMLLoader: Unknown field:", fieldName); - break; - } - } - let object; - if (geometry && geometry.attributes.position) { - const type = geometry._type; - if (type === "points") { - const pointsMaterial = new PointsMaterial({ color: 16777215 }); - if (geometry.attributes.color !== void 0) pointsMaterial.vertexColors = true; - else if (material.isMeshPhongMaterial) pointsMaterial.color.copy(material.emissive); - object = new Points(geometry, pointsMaterial); - } else if (type === "line") { - const lineMaterial = new LineBasicMaterial({ color: 16777215 }); - if (geometry.attributes.color !== void 0) lineMaterial.vertexColors = true; - else if (material.isMeshPhongMaterial) lineMaterial.color.copy(material.emissive); - object = new LineSegments(geometry, lineMaterial); - } else { - if (geometry._solid !== void 0) material.side = geometry._solid ? 0 : 2; - if (geometry.attributes.color !== void 0) material.vertexColors = true; - object = new Mesh(geometry, material); - } - } else { - object = new Object3D(); - object.visible = false; - } - return object; - } - function buildAppearanceNode(node) { - let material = new MeshPhongMaterial(); - let transformData; - const fields = node.fields; - for (let i = 0, l = fields.length; i < l; i++) { - const field = fields[i]; - const fieldName = field.name; - const fieldValues = field.values; - switch (fieldName) { - case "material": - if (fieldValues[0] !== null) { - const materialData = getNode(fieldValues[0]); - if (materialData.diffuseColor) material.color.copy(materialData.diffuseColor); - if (materialData.emissiveColor) material.emissive.copy(materialData.emissiveColor); - if (materialData.shininess) material.shininess = materialData.shininess; - if (materialData.specularColor) material.specular.copy(materialData.specularColor); - if (materialData.transparency) material.opacity = 1 - materialData.transparency; - if (materialData.transparency > 0) material.transparent = true; - } else material = new MeshBasicMaterial({ color: 0 }); - break; - case "texture": - const textureNode = fieldValues[0]; - if (textureNode !== null) { - if (textureNode.name === "ImageTexture" || textureNode.name === "PixelTexture") material.map = getNode(textureNode); - } - break; - case "textureTransform": - if (fieldValues[0] !== null) transformData = getNode(fieldValues[0]); - break; - default: - console.warn("THREE.VRMLLoader: Unknown field:", fieldName); - break; - } - } - if (material.map) { - if (material.map.__type) { - switch (material.map.__type) { - case TEXTURE_TYPE.INTENSITY_ALPHA: - material.opacity = 1; - break; - case TEXTURE_TYPE.RGB: - material.color.set(16777215); - break; - case TEXTURE_TYPE.RGBA: - material.color.set(16777215); - material.opacity = 1; - break; - } - delete material.map.__type; - } - if (transformData) { - material.map.center.copy(transformData.center); - material.map.rotation = transformData.rotation; - material.map.repeat.copy(transformData.scale); - material.map.offset.copy(transformData.translation); - } - } - return material; - } - function buildMaterialNode(node) { - const materialData = {}; - const fields = node.fields; - for (let i = 0, l = fields.length; i < l; i++) { - const field = fields[i]; - const fieldName = field.name; - const fieldValues = field.values; - switch (fieldName) { - case "ambientIntensity": break; - case "diffuseColor": - materialData.diffuseColor = new Color(fieldValues[0], fieldValues[1], fieldValues[2]); - break; - case "emissiveColor": - materialData.emissiveColor = new Color(fieldValues[0], fieldValues[1], fieldValues[2]); - break; - case "shininess": - materialData.shininess = fieldValues[0]; - break; - case "specularColor": - materialData.emissiveColor = new Color(fieldValues[0], fieldValues[1], fieldValues[2]); - break; - case "transparency": - materialData.transparency = fieldValues[0]; - break; - default: - console.warn("THREE.VRMLLoader: Unknown field:", fieldName); - break; - } - } - return materialData; - } - function parseHexColor(hex, textureType, color) { - let value; - switch (textureType) { - case TEXTURE_TYPE.INTENSITY: - value = parseInt(hex); - color.r = value; - color.g = value; - color.b = value; - color.a = 1; - break; - case TEXTURE_TYPE.INTENSITY_ALPHA: - value = parseInt("0x" + hex.substring(2, 4)); - color.r = value; - color.g = value; - color.b = value; - color.a = parseInt("0x" + hex.substring(4, 6)); - break; - case TEXTURE_TYPE.RGB: - color.r = parseInt("0x" + hex.substring(2, 4)); - color.g = parseInt("0x" + hex.substring(4, 6)); - color.b = parseInt("0x" + hex.substring(6, 8)); - color.a = 1; - break; - case TEXTURE_TYPE.RGBA: - color.r = parseInt("0x" + hex.substring(2, 4)); - color.g = parseInt("0x" + hex.substring(4, 6)); - color.b = parseInt("0x" + hex.substring(6, 8)); - color.a = parseInt("0x" + hex.substring(8, 10)); - break; - } - } - function getTextureType(num_components) { - let type; - switch (num_components) { - case 1: - type = TEXTURE_TYPE.INTENSITY; - break; - case 2: - type = TEXTURE_TYPE.INTENSITY_ALPHA; - break; - case 3: - type = TEXTURE_TYPE.RGB; - break; - case 4: - type = TEXTURE_TYPE.RGBA; - break; - } - return type; - } - function buildPixelTextureNode(node) { - let texture; - let wrapS = RepeatWrapping; - let wrapT = RepeatWrapping; - const fields = node.fields; - for (let i = 0, l = fields.length; i < l; i++) { - const field = fields[i]; - const fieldName = field.name; - const fieldValues = field.values; - switch (fieldName) { - case "image": - const width = fieldValues[0]; - const height = fieldValues[1]; - const num_components = fieldValues[2]; - const textureType = getTextureType(num_components); - const data2 = new Uint8Array(4 * width * height); - const color = { - r: 0, - g: 0, - b: 0, - a: 0 - }; - for (let j = 3, k = 0, jl = fieldValues.length; j < jl; j++, k++) { - parseHexColor(fieldValues[j], textureType, color); - const stride = k * 4; - data2[stride + 0] = color.r; - data2[stride + 1] = color.g; - data2[stride + 2] = color.b; - data2[stride + 3] = color.a; - } - texture = new DataTexture(data2, width, height); - texture.needsUpdate = true; - texture.__type = textureType; - break; - case "repeatS": - if (fieldValues[0] === false) wrapS = ClampToEdgeWrapping; - break; - case "repeatT": - if (fieldValues[0] === false) wrapT = ClampToEdgeWrapping; - break; - default: - console.warn("THREE.VRMLLoader: Unknown field:", fieldName); - break; - } - } - if (texture) { - texture.wrapS = wrapS; - texture.wrapT = wrapT; - } - return texture; - } - function buildImageTextureNode(node) { - let texture; - let wrapS = RepeatWrapping; - let wrapT = RepeatWrapping; - const fields = node.fields; - for (let i = 0, l = fields.length; i < l; i++) { - const field = fields[i]; - const fieldName = field.name; - const fieldValues = field.values; - switch (fieldName) { - case "url": - const url = fieldValues[0]; - if (url) texture = textureLoader.load(url); - break; - case "repeatS": - if (fieldValues[0] === false) wrapS = ClampToEdgeWrapping; - break; - case "repeatT": - if (fieldValues[0] === false) wrapT = ClampToEdgeWrapping; - break; - default: - console.warn("THREE.VRMLLoader: Unknown field:", fieldName); - break; - } - } - if (texture) { - texture.wrapS = wrapS; - texture.wrapT = wrapT; - } - return texture; - } - function buildTextureTransformNode(node) { - const transformData = { - center: new Vector2(), - rotation: new Vector2(), - scale: new Vector2(), - translation: new Vector2() - }; - const fields = node.fields; - for (let i = 0, l = fields.length; i < l; i++) { - const field = fields[i]; - const fieldName = field.name; - const fieldValues = field.values; - switch (fieldName) { - case "center": - transformData.center.set(fieldValues[0], fieldValues[1]); - break; - case "rotation": - transformData.rotation = fieldValues[0]; - break; - case "scale": - transformData.scale.set(fieldValues[0], fieldValues[1]); - break; - case "translation": - transformData.translation.set(fieldValues[0], fieldValues[1]); - break; - default: - console.warn("THREE.VRMLLoader: Unknown field:", fieldName); - break; - } - } - return transformData; - } - function buildGeometricNode(node) { - return node.fields[0].values; - } - function buildWorldInfoNode(node) { - const worldInfo = {}; - const fields = node.fields; - for (let i = 0, l = fields.length; i < l; i++) { - const field = fields[i]; - const fieldName = field.name; - const fieldValues = field.values; - switch (fieldName) { - case "title": - worldInfo.title = fieldValues[0]; - break; - case "info": - worldInfo.info = fieldValues; - break; - default: - console.warn("THREE.VRMLLoader: Unknown field:", fieldName); - break; - } - } - return worldInfo; - } - function buildIndexedFaceSetNode(node) { - let color, coord, normal, texCoord; - let ccw = true, solid = true, creaseAngle = 0; - let colorIndex, coordIndex, normalIndex, texCoordIndex; - let colorPerVertex = true, normalPerVertex = true; - const fields = node.fields; - for (let i = 0, l = fields.length; i < l; i++) { - const field = fields[i]; - const fieldName = field.name; - const fieldValues = field.values; - switch (fieldName) { - case "color": - const colorNode = fieldValues[0]; - if (colorNode !== null) color = getNode(colorNode); - break; - case "coord": - const coordNode = fieldValues[0]; - if (coordNode !== null) coord = getNode(coordNode); - break; - case "normal": - const normalNode = fieldValues[0]; - if (normalNode !== null) normal = getNode(normalNode); - break; - case "texCoord": - const texCoordNode = fieldValues[0]; - if (texCoordNode !== null) texCoord = getNode(texCoordNode); - break; - case "ccw": - ccw = fieldValues[0]; - break; - case "colorIndex": - colorIndex = fieldValues; - break; - case "colorPerVertex": - colorPerVertex = fieldValues[0]; - break; - case "convex": break; - case "coordIndex": - coordIndex = fieldValues; - break; - case "creaseAngle": - creaseAngle = fieldValues[0]; - break; - case "normalIndex": - normalIndex = fieldValues; - break; - case "normalPerVertex": - normalPerVertex = fieldValues[0]; - break; - case "solid": - solid = fieldValues[0]; - break; - case "texCoordIndex": - texCoordIndex = fieldValues; - break; - default: - console.warn("THREE.VRMLLoader: Unknown field:", fieldName); - break; - } - } - if (coordIndex === void 0) { - console.warn("THREE.VRMLLoader: Missing coordIndex."); - return new BufferGeometry(); - } - const triangulatedCoordIndex = triangulateFaceIndex(coordIndex, ccw); - let colorAttribute; - let normalAttribute; - let uvAttribute; - if (color) if (colorPerVertex === true) if (colorIndex && colorIndex.length > 0) colorAttribute = computeAttributeFromIndexedData(triangulatedCoordIndex, triangulateFaceIndex(colorIndex, ccw), color, 3); - else colorAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new Float32BufferAttribute(color, 3)); - else if (colorIndex && colorIndex.length > 0) colorAttribute = computeAttributeFromFaceData(triangulatedCoordIndex, triangulateFaceData(flattenData(color, colorIndex), coordIndex)); - else colorAttribute = computeAttributeFromFaceData(triangulatedCoordIndex, triangulateFaceData(color, coordIndex)); - if (normal) if (normalPerVertex === true) if (normalIndex && normalIndex.length > 0) normalAttribute = computeAttributeFromIndexedData(triangulatedCoordIndex, triangulateFaceIndex(normalIndex, ccw), normal, 3); - else normalAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new Float32BufferAttribute(normal, 3)); - else if (normalIndex && normalIndex.length > 0) normalAttribute = computeAttributeFromFaceData(triangulatedCoordIndex, triangulateFaceData(flattenData(normal, normalIndex), coordIndex)); - else normalAttribute = computeAttributeFromFaceData(triangulatedCoordIndex, triangulateFaceData(normal, coordIndex)); - else normalAttribute = computeNormalAttribute(triangulatedCoordIndex, coord, creaseAngle); - if (texCoord) if (texCoordIndex && texCoordIndex.length > 0) uvAttribute = computeAttributeFromIndexedData(triangulatedCoordIndex, triangulateFaceIndex(texCoordIndex, ccw), texCoord, 2); - else uvAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new Float32BufferAttribute(texCoord, 2)); - const geometry = new BufferGeometry(); - const positionAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new Float32BufferAttribute(coord, 3)); - geometry.setAttribute("position", positionAttribute); - geometry.setAttribute("normal", normalAttribute); - if (colorAttribute) geometry.setAttribute("color", colorAttribute); - if (uvAttribute) geometry.setAttribute("uv", uvAttribute); - geometry._solid = solid; - geometry._type = "mesh"; - return geometry; - } - function buildIndexedLineSetNode(node) { - let color, coord; - let colorIndex, coordIndex; - let colorPerVertex = true; - const fields = node.fields; - for (let i = 0, l = fields.length; i < l; i++) { - const field = fields[i]; - const fieldName = field.name; - const fieldValues = field.values; - switch (fieldName) { - case "color": - const colorNode = fieldValues[0]; - if (colorNode !== null) color = getNode(colorNode); - break; - case "coord": - const coordNode = fieldValues[0]; - if (coordNode !== null) coord = getNode(coordNode); - break; - case "colorIndex": - colorIndex = fieldValues; - break; - case "colorPerVertex": - colorPerVertex = fieldValues[0]; - break; - case "coordIndex": - coordIndex = fieldValues; - break; - default: - console.warn("THREE.VRMLLoader: Unknown field:", fieldName); - break; - } - } - let colorAttribute; - const expandedLineIndex = expandLineIndex(coordIndex); - if (color) if (colorPerVertex === true) if (colorIndex.length > 0) colorAttribute = computeAttributeFromIndexedData(expandedLineIndex, expandLineIndex(colorIndex), color, 3); - else colorAttribute = toNonIndexedAttribute(expandedLineIndex, new Float32BufferAttribute(color, 3)); - else if (colorIndex.length > 0) colorAttribute = computeAttributeFromLineData(expandedLineIndex, expandLineData(flattenData(color, colorIndex), coordIndex)); - else colorAttribute = computeAttributeFromLineData(expandedLineIndex, expandLineData(color, coordIndex)); - const geometry = new BufferGeometry(); - const positionAttribute = toNonIndexedAttribute(expandedLineIndex, new Float32BufferAttribute(coord, 3)); - geometry.setAttribute("position", positionAttribute); - if (colorAttribute) geometry.setAttribute("color", colorAttribute); - geometry._type = "line"; - return geometry; - } - function buildPointSetNode(node) { - let color, coord; - const fields = node.fields; - for (let i = 0, l = fields.length; i < l; i++) { - const field = fields[i]; - const fieldName = field.name; - const fieldValues = field.values; - switch (fieldName) { - case "color": - const colorNode = fieldValues[0]; - if (colorNode !== null) color = getNode(colorNode); - break; - case "coord": - const coordNode = fieldValues[0]; - if (coordNode !== null) coord = getNode(coordNode); - break; - default: - console.warn("THREE.VRMLLoader: Unknown field:", fieldName); - break; - } - } - const geometry = new BufferGeometry(); - geometry.setAttribute("position", new Float32BufferAttribute(coord, 3)); - if (color) geometry.setAttribute("color", new Float32BufferAttribute(color, 3)); - geometry._type = "points"; - return geometry; - } - function buildBoxNode(node) { - const size = new Vector3(2, 2, 2); - const fields = node.fields; - for (let i = 0, l = fields.length; i < l; i++) { - const field = fields[i]; - const fieldName = field.name; - const fieldValues = field.values; - switch (fieldName) { - case "size": - size.x = fieldValues[0]; - size.y = fieldValues[1]; - size.z = fieldValues[2]; - break; - default: - console.warn("THREE.VRMLLoader: Unknown field:", fieldName); - break; - } - } - return new BoxGeometry(size.x, size.y, size.z); - } - function buildConeNode(node) { - let radius = 1, height = 2, openEnded = false; - const fields = node.fields; - for (let i = 0, l = fields.length; i < l; i++) { - const field = fields[i]; - const fieldName = field.name; - const fieldValues = field.values; - switch (fieldName) { - case "bottom": - openEnded = !fieldValues[0]; - break; - case "bottomRadius": - radius = fieldValues[0]; - break; - case "height": - height = fieldValues[0]; - break; - case "side": break; - default: - console.warn("THREE.VRMLLoader: Unknown field:", fieldName); - break; - } - } - return new ConeGeometry(radius, height, 16, 1, openEnded); - } - function buildCylinderNode(node) { - let radius = 1, height = 2; - const fields = node.fields; - for (let i = 0, l = fields.length; i < l; i++) { - const field = fields[i]; - const fieldName = field.name; - const fieldValues = field.values; - switch (fieldName) { - case "bottom": break; - case "radius": - radius = fieldValues[0]; - break; - case "height": - height = fieldValues[0]; - break; - case "side": break; - case "top": break; - default: - console.warn("THREE.VRMLLoader: Unknown field:", fieldName); - break; - } - } - return new CylinderGeometry(radius, radius, height, 16, 1); - } - function buildSphereNode(node) { - let radius = 1; - const fields = node.fields; - for (let i = 0, l = fields.length; i < l; i++) { - const field = fields[i]; - const fieldName = field.name; - const fieldValues = field.values; - switch (fieldName) { - case "radius": - radius = fieldValues[0]; - break; - default: - console.warn("THREE.VRMLLoader: Unknown field:", fieldName); - break; - } - } - return new SphereGeometry(radius, 16, 16); - } - function buildElevationGridNode(node) { - let color; - let normal; - let texCoord; - let height; - let colorPerVertex = true; - let normalPerVertex = true; - let solid = true; - let ccw = true; - let creaseAngle = 0; - let xDimension = 2; - let zDimension = 2; - let xSpacing = 1; - let zSpacing = 1; - const fields = node.fields; - for (let i = 0, l = fields.length; i < l; i++) { - const field = fields[i]; - const fieldName = field.name; - const fieldValues = field.values; - switch (fieldName) { - case "color": - const colorNode = fieldValues[0]; - if (colorNode !== null) color = getNode(colorNode); - break; - case "normal": - const normalNode = fieldValues[0]; - if (normalNode !== null) normal = getNode(normalNode); - break; - case "texCoord": - const texCoordNode = fieldValues[0]; - if (texCoordNode !== null) texCoord = getNode(texCoordNode); - break; - case "height": - height = fieldValues; - break; - case "ccw": - ccw = fieldValues[0]; - break; - case "colorPerVertex": - colorPerVertex = fieldValues[0]; - break; - case "creaseAngle": - creaseAngle = fieldValues[0]; - break; - case "normalPerVertex": - normalPerVertex = fieldValues[0]; - break; - case "solid": - solid = fieldValues[0]; - break; - case "xDimension": - xDimension = fieldValues[0]; - break; - case "xSpacing": - xSpacing = fieldValues[0]; - break; - case "zDimension": - zDimension = fieldValues[0]; - break; - case "zSpacing": - zSpacing = fieldValues[0]; - break; - default: - console.warn("THREE.VRMLLoader: Unknown field:", fieldName); - break; - } - } - const vertices = []; - const normals = []; - const colors = []; - const uvs = []; - for (let i = 0; i < zDimension; i++) for (let j = 0; j < xDimension; j++) { - const index = i * xDimension + j; - const x = xSpacing * i; - const y = height[index]; - const z = zSpacing * j; - vertices.push(x, y, z); - if (color && colorPerVertex === true) { - const r = color[index * 3 + 0]; - const g = color[index * 3 + 1]; - const b = color[index * 3 + 2]; - colors.push(r, g, b); - } - if (normal && normalPerVertex === true) { - const xn = normal[index * 3 + 0]; - const yn = normal[index * 3 + 1]; - const zn = normal[index * 3 + 2]; - normals.push(xn, yn, zn); - } - if (texCoord) { - const s = texCoord[index * 2 + 0]; - const t = texCoord[index * 2 + 1]; - uvs.push(s, t); - } else uvs.push(i / (xDimension - 1), j / (zDimension - 1)); - } - const indices = []; - for (let i = 0; i < xDimension - 1; i++) for (let j = 0; j < zDimension - 1; j++) { - const a = i + j * xDimension; - const b = i + (j + 1) * xDimension; - const c = i + 1 + (j + 1) * xDimension; - const d = i + 1 + j * xDimension; - if (ccw === true) { - indices.push(a, c, b); - indices.push(c, a, d); - } else { - indices.push(a, b, c); - indices.push(c, d, a); - } - } - const positionAttribute = toNonIndexedAttribute(indices, new Float32BufferAttribute(vertices, 3)); - const uvAttribute = toNonIndexedAttribute(indices, new Float32BufferAttribute(uvs, 2)); - let colorAttribute; - let normalAttribute; - if (color) if (colorPerVertex === false) { - for (let i = 0; i < xDimension - 1; i++) for (let j = 0; j < zDimension - 1; j++) { - const index = i + j * (xDimension - 1); - const r = color[index * 3 + 0]; - const g = color[index * 3 + 1]; - const b = color[index * 3 + 2]; - colors.push(r, g, b); - colors.push(r, g, b); - colors.push(r, g, b); - colors.push(r, g, b); - colors.push(r, g, b); - colors.push(r, g, b); - } - colorAttribute = new Float32BufferAttribute(colors, 3); - } else colorAttribute = toNonIndexedAttribute(indices, new Float32BufferAttribute(colors, 3)); - if (normal) if (normalPerVertex === false) { - for (let i = 0; i < xDimension - 1; i++) for (let j = 0; j < zDimension - 1; j++) { - const index = i + j * (xDimension - 1); - const xn = normal[index * 3 + 0]; - const yn = normal[index * 3 + 1]; - const zn = normal[index * 3 + 2]; - normals.push(xn, yn, zn); - normals.push(xn, yn, zn); - normals.push(xn, yn, zn); - normals.push(xn, yn, zn); - normals.push(xn, yn, zn); - normals.push(xn, yn, zn); - } - normalAttribute = new Float32BufferAttribute(normals, 3); - } else normalAttribute = toNonIndexedAttribute(indices, new Float32BufferAttribute(normals, 3)); - else normalAttribute = computeNormalAttribute(indices, vertices, creaseAngle); - const geometry = new BufferGeometry(); - geometry.setAttribute("position", positionAttribute); - geometry.setAttribute("normal", normalAttribute); - geometry.setAttribute("uv", uvAttribute); - if (colorAttribute) geometry.setAttribute("color", colorAttribute); - geometry._solid = solid; - geometry._type = "mesh"; - return geometry; - } - function buildExtrusionNode(node) { - let crossSection = [ - 1, - 1, - 1, - -1, - -1, - -1, - -1, - 1, - 1, - 1 - ]; - let spine = [ - 0, - 0, - 0, - 0, - 1, - 0 - ]; - let scale; - let orientation; - let beginCap = true; - let ccw = true; - let creaseAngle = 0; - let endCap = true; - let solid = true; - const fields = node.fields; - for (let i = 0, l = fields.length; i < l; i++) { - const field = fields[i]; - const fieldName = field.name; - const fieldValues = field.values; - switch (fieldName) { - case "beginCap": - beginCap = fieldValues[0]; - break; - case "ccw": - ccw = fieldValues[0]; - break; - case "convex": break; - case "creaseAngle": - creaseAngle = fieldValues[0]; - break; - case "crossSection": - crossSection = fieldValues; - break; - case "endCap": - endCap = fieldValues[0]; - break; - case "orientation": - orientation = fieldValues; - break; - case "scale": - scale = fieldValues; - break; - case "solid": - solid = fieldValues[0]; - break; - case "spine": - spine = fieldValues; - break; - default: - console.warn("THREE.VRMLLoader: Unknown field:", fieldName); - break; - } - } - const crossSectionClosed = crossSection[0] === crossSection[crossSection.length - 2] && crossSection[1] === crossSection[crossSection.length - 1]; - const vertices = []; - const spineVector = new Vector3(); - const scaling = new Vector3(); - const axis = new Vector3(); - const vertex = new Vector3(); - const quaternion = new Quaternion(); - for (let i = 0, j = 0, o = 0, il = spine.length; i < il; i += 3, j += 2, o += 4) { - spineVector.fromArray(spine, i); - scaling.x = scale ? scale[j + 0] : 1; - scaling.y = 1; - scaling.z = scale ? scale[j + 1] : 1; - axis.x = orientation ? orientation[o + 0] : 0; - axis.y = orientation ? orientation[o + 1] : 0; - axis.z = orientation ? orientation[o + 2] : 1; - const angle = orientation ? orientation[o + 3] : 0; - for (let k = 0, kl = crossSection.length; k < kl; k += 2) { - vertex.x = crossSection[k + 0]; - vertex.y = 0; - vertex.z = crossSection[k + 1]; - vertex.multiply(scaling); - quaternion.setFromAxisAngle(axis, angle); - vertex.applyQuaternion(quaternion); - vertex.add(spineVector); - vertices.push(vertex.x, vertex.y, vertex.z); - } - } - const indices = []; - const spineCount = spine.length / 3; - const crossSectionCount = crossSection.length / 2; - for (let i = 0; i < spineCount - 1; i++) for (let j = 0; j < crossSectionCount - 1; j++) { - const a = j + i * crossSectionCount; - let b = j + 1 + i * crossSectionCount; - const c = j + (i + 1) * crossSectionCount; - let d = j + 1 + (i + 1) * crossSectionCount; - if (j === crossSectionCount - 2 && crossSectionClosed === true) { - b = i * crossSectionCount; - d = (i + 1) * crossSectionCount; - } - if (ccw === true) { - indices.push(a, b, c); - indices.push(c, b, d); - } else { - indices.push(a, c, b); - indices.push(c, d, b); - } - } - if (beginCap === true || endCap === true) { - const contour = []; - for (let i = 0, l = crossSection.length; i < l; i += 2) contour.push(new Vector2(crossSection[i], crossSection[i + 1])); - const faces = ShapeUtils.triangulateShape(contour, []); - const capIndices = []; - for (let i = 0, l = faces.length; i < l; i++) { - const face = faces[i]; - capIndices.push(face[0], face[1], face[2]); - } - if (beginCap === true) for (let i = 0, l = capIndices.length; i < l; i += 3) if (ccw === true) indices.push(capIndices[i + 0], capIndices[i + 1], capIndices[i + 2]); - else indices.push(capIndices[i + 0], capIndices[i + 2], capIndices[i + 1]); - if (endCap === true) { - const indexOffset = crossSectionCount * (spineCount - 1); - for (let i = 0, l = capIndices.length; i < l; i += 3) if (ccw === true) indices.push(indexOffset + capIndices[i + 0], indexOffset + capIndices[i + 2], indexOffset + capIndices[i + 1]); - else indices.push(indexOffset + capIndices[i + 0], indexOffset + capIndices[i + 1], indexOffset + capIndices[i + 2]); - } - } - const positionAttribute = toNonIndexedAttribute(indices, new Float32BufferAttribute(vertices, 3)); - const normalAttribute = computeNormalAttribute(indices, vertices, creaseAngle); - const geometry = new BufferGeometry(); - geometry.setAttribute("position", positionAttribute); - geometry.setAttribute("normal", normalAttribute); - geometry._solid = solid; - geometry._type = "mesh"; - return geometry; - } - function resolveUSE(identifier) { - const node = nodeMap[identifier]; - const build = getNode(node); - return build.isObject3D || build.isMaterial ? build.clone() : build; - } - function parseFieldChildren(children, owner) { - for (let i = 0, l = children.length; i < l; i++) { - const object = getNode(children[i]); - if (object instanceof Object3D) owner.add(object); - } - } - function triangulateFaceIndex(index, ccw) { - const indices = []; - let start = 0; - for (let i = 0, l = index.length; i < l; i++) { - const i1 = index[start]; - const i2 = index[i + (ccw ? 1 : 2)]; - const i3 = index[i + (ccw ? 2 : 1)]; - indices.push(i1, i2, i3); - if (index[i + 3] === -1 || i + 3 >= l) { - i += 3; - start = i + 1; - } - } - return indices; - } - function triangulateFaceData(data2, index) { - const triangulatedData = []; - let start = 0; - for (let i = 0, l = index.length; i < l; i++) { - const stride = start * 3; - const x = data2[stride]; - const y = data2[stride + 1]; - const z = data2[stride + 2]; - triangulatedData.push(x, y, z); - if (index[i + 3] === -1 || i + 3 >= l) { - i += 3; - start++; - } - } - return triangulatedData; - } - function flattenData(data2, index) { - const flattenData2 = []; - for (let i = 0, l = index.length; i < l; i++) { - const stride = index[i] * 3; - const x = data2[stride]; - const y = data2[stride + 1]; - const z = data2[stride + 2]; - flattenData2.push(x, y, z); - } - return flattenData2; - } - function expandLineIndex(index) { - const indices = []; - for (let i = 0, l = index.length; i < l; i++) { - const i1 = index[i]; - const i2 = index[i + 1]; - indices.push(i1, i2); - if (index[i + 2] === -1 || i + 2 >= l) i += 2; - } - return indices; - } - function expandLineData(data2, index) { - const triangulatedData = []; - let start = 0; - for (let i = 0, l = index.length; i < l; i++) { - const stride = start * 3; - const x = data2[stride]; - const y = data2[stride + 1]; - const z = data2[stride + 2]; - triangulatedData.push(x, y, z); - if (index[i + 2] === -1 || i + 2 >= l) { - i += 2; - start++; - } - } - return triangulatedData; - } - const vA = new Vector3(); - const vB = new Vector3(); - const vC = new Vector3(); - const uvA = new Vector2(); - const uvB = new Vector2(); - const uvC = new Vector2(); - function computeAttributeFromIndexedData(coordIndex, index, data2, itemSize) { - const array = []; - for (let i = 0, l = coordIndex.length; i < l; i += 3) { - const a = index[i]; - const b = index[i + 1]; - const c = index[i + 2]; - if (itemSize === 2) { - uvA.fromArray(data2, a * itemSize); - uvB.fromArray(data2, b * itemSize); - uvC.fromArray(data2, c * itemSize); - array.push(uvA.x, uvA.y); - array.push(uvB.x, uvB.y); - array.push(uvC.x, uvC.y); - } else { - vA.fromArray(data2, a * itemSize); - vB.fromArray(data2, b * itemSize); - vC.fromArray(data2, c * itemSize); - array.push(vA.x, vA.y, vA.z); - array.push(vB.x, vB.y, vB.z); - array.push(vC.x, vC.y, vC.z); - } - } - return new Float32BufferAttribute(array, itemSize); - } - function computeAttributeFromFaceData(index, faceData) { - const array = []; - for (let i = 0, j = 0, l = index.length; i < l; i += 3, j++) { - vA.fromArray(faceData, j * 3); - array.push(vA.x, vA.y, vA.z); - array.push(vA.x, vA.y, vA.z); - array.push(vA.x, vA.y, vA.z); - } - return new Float32BufferAttribute(array, 3); - } - function computeAttributeFromLineData(index, lineData) { - const array = []; - for (let i = 0, j = 0, l = index.length; i < l; i += 2, j++) { - vA.fromArray(lineData, j * 3); - array.push(vA.x, vA.y, vA.z); - array.push(vA.x, vA.y, vA.z); - } - return new Float32BufferAttribute(array, 3); - } - function toNonIndexedAttribute(indices, attribute) { - const array = attribute.array; - const itemSize = attribute.itemSize; - const array2 = new array.constructor(indices.length * itemSize); - let index = 0, index2 = 0; - for (let i = 0, l = indices.length; i < l; i++) { - index = indices[i] * itemSize; - for (let j = 0; j < itemSize; j++) array2[index2++] = array[index++]; - } - return new Float32BufferAttribute(array2, itemSize); - } - const ab = new Vector3(); - const cb = new Vector3(); - function computeNormalAttribute(index, coord, creaseAngle) { - const faces = []; - const vertexNormals = {}; - for (let i = 0, l = index.length; i < l; i += 3) { - const a = index[i]; - const b = index[i + 1]; - const c = index[i + 2]; - const face = new Face(a, b, c); - vA.fromArray(coord, a * 3); - vB.fromArray(coord, b * 3); - vC.fromArray(coord, c * 3); - cb.subVectors(vC, vB); - ab.subVectors(vA, vB); - cb.cross(ab); - cb.normalize(); - face.normal.copy(cb); - if (vertexNormals[a] === void 0) vertexNormals[a] = []; - if (vertexNormals[b] === void 0) vertexNormals[b] = []; - if (vertexNormals[c] === void 0) vertexNormals[c] = []; - vertexNormals[a].push(face.normal); - vertexNormals[b].push(face.normal); - vertexNormals[c].push(face.normal); - faces.push(face); - } - const normals = []; - for (let i = 0, l = faces.length; i < l; i++) { - const face = faces[i]; - const nA = weightedNormal(vertexNormals[face.a], face.normal, creaseAngle); - const nB = weightedNormal(vertexNormals[face.b], face.normal, creaseAngle); - const nC = weightedNormal(vertexNormals[face.c], face.normal, creaseAngle); - vA.fromArray(coord, face.a * 3); - vB.fromArray(coord, face.b * 3); - vC.fromArray(coord, face.c * 3); - normals.push(nA.x, nA.y, nA.z); - normals.push(nB.x, nB.y, nB.z); - normals.push(nC.x, nC.y, nC.z); - } - return new Float32BufferAttribute(normals, 3); - } - function weightedNormal(normals, vector, creaseAngle) { - const normal = new Vector3(); - if (creaseAngle === 0) normal.copy(vector); - else for (let i = 0, l = normals.length; i < l; i++) if (normals[i].angleTo(vector) < creaseAngle) normal.add(normals[i]); - return normal.normalize(); - } - function toColorArray(colors) { - const array = []; - for (let i = 0, l = colors.length; i < l; i += 3) array.push(new Color(colors[i], colors[i + 1], colors[i + 2])); - return array; - } - function paintFaces(geometry, radius, angles, colors, topDown) { - const thresholds = []; - const startAngle = topDown === true ? 0 : Math.PI; - for (let i = 0, l = colors.length; i < l; i++) { - let angle = i === 0 ? 0 : angles[i - 1]; - angle = topDown === true ? angle : startAngle - angle; - const point = new Vector3(); - point.setFromSphericalCoords(radius, angle, 0); - thresholds.push(point); - } - const indices = geometry.index; - const positionAttribute = geometry.attributes.position; - const colorAttribute = new BufferAttribute(new Float32Array(geometry.attributes.position.count * 3), 3); - const position = new Vector3(); - const color = new Color(); - for (let i = 0; i < indices.count; i++) { - const index = indices.getX(i); - position.fromBufferAttribute(positionAttribute, index); - let thresholdIndexA, thresholdIndexB; - let t = 1; - for (let j = 1; j < thresholds.length; j++) { - thresholdIndexA = j - 1; - thresholdIndexB = j; - const thresholdA = thresholds[thresholdIndexA]; - const thresholdB = thresholds[thresholdIndexB]; - if (topDown === true) { - if (position.y <= thresholdA.y && position.y > thresholdB.y) { - t = Math.abs(thresholdA.y - position.y) / Math.abs(thresholdA.y - thresholdB.y); - break; - } - } else if (position.y >= thresholdA.y && position.y < thresholdB.y) { - t = Math.abs(thresholdA.y - position.y) / Math.abs(thresholdA.y - thresholdB.y); - break; - } - } - const colorA = colors[thresholdIndexA]; - const colorB = colors[thresholdIndexB]; - color.copy(colorA).lerp(colorB, t); - colorAttribute.setXYZ(index, color.r, color.g, color.b); - } - geometry.setAttribute("color", colorAttribute); - } - const textureLoader = new TextureLoader(this.manager); - textureLoader.setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin); - if (data.indexOf("#VRML V2.0") === -1) throw Error("THREE.VRMLLexer: Version of VRML asset not supported."); - return parseTree(generateVRMLTree(data)); - } -}; -var VRMLLexer = class { - constructor(tokens) { - this.lexer = new Lexer(tokens); - } - lex(inputText) { - const lexingResult = this.lexer.tokenize(inputText); - if (lexingResult.errors.length > 0) { - console.error(lexingResult.errors); - throw Error("THREE.VRMLLexer: Lexing errors detected."); - } - return lexingResult; - } -}; -var VRMLParser = class extends CstParser { - constructor(tokenVocabulary) { - super(tokenVocabulary); - const $ = this; - const Version = tokenVocabulary["Version"]; - const LCurly = tokenVocabulary["LCurly"]; - const RCurly = tokenVocabulary["RCurly"]; - const LSquare = tokenVocabulary["LSquare"]; - const RSquare = tokenVocabulary["RSquare"]; - const Identifier = tokenVocabulary["Identifier"]; - const RouteIdentifier = tokenVocabulary["RouteIdentifier"]; - const StringLiteral = tokenVocabulary["StringLiteral"]; - const HexLiteral = tokenVocabulary["HexLiteral"]; - const NumberLiteral = tokenVocabulary["NumberLiteral"]; - const TrueLiteral = tokenVocabulary["TrueLiteral"]; - const FalseLiteral = tokenVocabulary["FalseLiteral"]; - const NullLiteral = tokenVocabulary["NullLiteral"]; - const DEF = tokenVocabulary["DEF"]; - const USE = tokenVocabulary["USE"]; - const ROUTE = tokenVocabulary["ROUTE"]; - const TO = tokenVocabulary["TO"]; - const NodeName = tokenVocabulary["NodeName"]; - $.RULE("vrml", function() { - $.SUBRULE($.version); - $.AT_LEAST_ONE(function() { - $.SUBRULE($.node); - }); - $.MANY(function() { - $.SUBRULE($.route); - }); - }); - $.RULE("version", function() { - $.CONSUME(Version); - }); - $.RULE("node", function() { - $.OPTION(function() { - $.SUBRULE($.def); - }); - $.CONSUME(NodeName); - $.CONSUME(LCurly); - $.MANY(function() { - $.SUBRULE($.field); - }); - $.CONSUME(RCurly); - }); - $.RULE("field", function() { - $.CONSUME(Identifier); - $.OR2([{ ALT: function() { - $.SUBRULE($.singleFieldValue); - } }, { ALT: function() { - $.SUBRULE($.multiFieldValue); - } }]); - }); - $.RULE("def", function() { - $.CONSUME(DEF); - $.OR([{ ALT: function() { - $.CONSUME(Identifier); - } }, { ALT: function() { - $.CONSUME(NodeName); - } }]); - }); - $.RULE("use", function() { - $.CONSUME(USE); - $.OR([{ ALT: function() { - $.CONSUME(Identifier); - } }, { ALT: function() { - $.CONSUME(NodeName); - } }]); - }); - $.RULE("singleFieldValue", function() { - $.AT_LEAST_ONE(function() { - $.OR([ - { ALT: function() { - $.SUBRULE($.node); - } }, - { ALT: function() { - $.SUBRULE($.use); - } }, - { ALT: function() { - $.CONSUME(StringLiteral); - } }, - { ALT: function() { - $.CONSUME(HexLiteral); - } }, - { ALT: function() { - $.CONSUME(NumberLiteral); - } }, - { ALT: function() { - $.CONSUME(TrueLiteral); - } }, - { ALT: function() { - $.CONSUME(FalseLiteral); - } }, - { ALT: function() { - $.CONSUME(NullLiteral); - } } - ]); - }); - }); - $.RULE("multiFieldValue", function() { - $.CONSUME(LSquare); - $.MANY(function() { - $.OR([ - { ALT: function() { - $.SUBRULE($.node); - } }, - { ALT: function() { - $.SUBRULE($.use); - } }, - { ALT: function() { - $.CONSUME(StringLiteral); - } }, - { ALT: function() { - $.CONSUME(HexLiteral); - } }, - { ALT: function() { - $.CONSUME(NumberLiteral); - } }, - { ALT: function() { - $.CONSUME(NullLiteral); - } } - ]); - }); - $.CONSUME(RSquare); - }); - $.RULE("route", function() { - $.CONSUME(ROUTE); - $.CONSUME(RouteIdentifier); - $.CONSUME(TO); - $.CONSUME2(RouteIdentifier); - }); - this.performSelfAnalysis(); - } -}; -var Face = class { - constructor(a, b, c) { - this.a = a; - this.b = b; - this.c = c; - this.normal = new Vector3(); - } -}; -var TEXTURE_TYPE = { - INTENSITY: 1, - INTENSITY_ALPHA: 2, - RGB: 3, - RGBA: 4 -}; -//#endregion -//#region node_modules/three-stdlib/utils/WorkerPool.js -var WorkerPool = class { - constructor(pool = 4) { - this.pool = pool; - this.queue = []; - this.workers = []; - this.workersResolve = []; - this.workerStatus = 0; - } - _initWorker(workerId) { - if (!this.workers[workerId]) { - const worker = this.workerCreator(); - worker.addEventListener("message", this._onMessage.bind(this, workerId)); - this.workers[workerId] = worker; - } - } - _getIdleWorker() { - for (let i = 0; i < this.pool; i++) if (!(this.workerStatus & 1 << i)) return i; - return -1; - } - _onMessage(workerId, msg) { - const resolve = this.workersResolve[workerId]; - resolve && resolve(msg); - if (this.queue.length) { - const { resolve: resolve2, msg: msg2, transfer } = this.queue.shift(); - this.workersResolve[workerId] = resolve2; - this.workers[workerId].postMessage(msg2, transfer); - } else this.workerStatus ^= 1 << workerId; - } - setWorkerCreator(workerCreator) { - this.workerCreator = workerCreator; - } - setWorkerLimit(pool) { - this.pool = pool; - } - postMessage(msg, transfer) { - return new Promise((resolve) => { - const workerId = this._getIdleWorker(); - if (workerId !== -1) { - this._initWorker(workerId); - this.workerStatus |= 1 << workerId; - this.workersResolve[workerId] = resolve; - this.workers[workerId].postMessage(msg, transfer); - } else this.queue.push({ - resolve, - msg, - transfer - }); - }); - } - dispose() { - this.workers.forEach((worker) => worker.terminate()); - this.workersResolve.length = 0; - this.workers.length = 0; - this.queue.length = 0; - this.workerStatus = 0; - } -}; -var KTX2Container = class { - constructor() { - this.vkFormat = 0; - this.typeSize = 1; - this.pixelWidth = 0; - this.pixelHeight = 0; - this.pixelDepth = 0; - this.layerCount = 0; - this.faceCount = 1; - this.supercompressionScheme = 0; - this.levels = []; - this.dataFormatDescriptor = [{ - vendorId: 0, - descriptorType: 0, - descriptorBlockSize: 0, - versionNumber: 2, - colorModel: 0, - colorPrimaries: 1, - transferFunction: 2, - flags: 0, - texelBlockDimension: [ - 0, - 0, - 0, - 0 - ], - bytesPlane: [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ], - samples: [] - }]; - this.keyValue = {}; - this.globalData = null; - } -}; -var BufferReader = class { - constructor(data, byteOffset, byteLength, littleEndian) { - this._dataView = void 0; - this._littleEndian = void 0; - this._offset = void 0; - this._dataView = new DataView(data.buffer, data.byteOffset + byteOffset, byteLength); - this._littleEndian = littleEndian; - this._offset = 0; - } - _nextUint8() { - const value = this._dataView.getUint8(this._offset); - this._offset += 1; - return value; - } - _nextUint16() { - const value = this._dataView.getUint16(this._offset, this._littleEndian); - this._offset += 2; - return value; - } - _nextUint32() { - const value = this._dataView.getUint32(this._offset, this._littleEndian); - this._offset += 4; - return value; - } - _nextUint64() { - const value = this._dataView.getUint32(this._offset, this._littleEndian) + 2 ** 32 * this._dataView.getUint32(this._offset + 4, this._littleEndian); - this._offset += 8; - return value; - } - _nextInt32() { - const value = this._dataView.getInt32(this._offset, this._littleEndian); - this._offset += 4; - return value; - } - _nextUint8Array(len) { - const value = new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + this._offset, len); - this._offset += len; - return value; - } - _skip(bytes) { - this._offset += bytes; - return this; - } - _scan(maxByteLength, term) { - if (term === void 0) term = 0; - const byteOffset = this._offset; - let byteLength = 0; - while (this._dataView.getUint8(this._offset) !== term && byteLength < maxByteLength) { - byteLength++; - this._offset++; - } - if (byteLength < maxByteLength) this._offset++; - return new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + byteOffset, byteLength); - } -}; -var KTX2_ID = [ - 171, - 75, - 84, - 88, - 32, - 50, - 48, - 187, - 13, - 10, - 26, - 10 -]; -function decodeText(buffer) { - if (typeof TextDecoder !== "undefined") return new TextDecoder().decode(buffer); - return Buffer.from(buffer).toString("utf8"); -} -function read(data) { - const id = new Uint8Array(data.buffer, data.byteOffset, KTX2_ID.length); - if (id[0] !== KTX2_ID[0] || id[1] !== KTX2_ID[1] || id[2] !== KTX2_ID[2] || id[3] !== KTX2_ID[3] || id[4] !== KTX2_ID[4] || id[5] !== KTX2_ID[5] || id[6] !== KTX2_ID[6] || id[7] !== KTX2_ID[7] || id[8] !== KTX2_ID[8] || id[9] !== KTX2_ID[9] || id[10] !== KTX2_ID[10] || id[11] !== KTX2_ID[11]) throw new Error("Missing KTX 2.0 identifier."); - const container = new KTX2Container(); - const headerByteLength = 17 * Uint32Array.BYTES_PER_ELEMENT; - const headerReader = new BufferReader(data, KTX2_ID.length, headerByteLength, true); - container.vkFormat = headerReader._nextUint32(); - container.typeSize = headerReader._nextUint32(); - container.pixelWidth = headerReader._nextUint32(); - container.pixelHeight = headerReader._nextUint32(); - container.pixelDepth = headerReader._nextUint32(); - container.layerCount = headerReader._nextUint32(); - container.faceCount = headerReader._nextUint32(); - const levelCount = headerReader._nextUint32(); - container.supercompressionScheme = headerReader._nextUint32(); - const dfdByteOffset = headerReader._nextUint32(); - const dfdByteLength = headerReader._nextUint32(); - const kvdByteOffset = headerReader._nextUint32(); - const kvdByteLength = headerReader._nextUint32(); - const sgdByteOffset = headerReader._nextUint64(); - const sgdByteLength = headerReader._nextUint64(); - const levelByteLength = levelCount * 3 * 8; - const levelReader = new BufferReader(data, KTX2_ID.length + headerByteLength, levelByteLength, true); - for (let i = 0; i < levelCount; i++) container.levels.push({ - levelData: new Uint8Array(data.buffer, data.byteOffset + levelReader._nextUint64(), levelReader._nextUint64()), - uncompressedByteLength: levelReader._nextUint64() - }); - const dfdReader = new BufferReader(data, dfdByteOffset, dfdByteLength, true); - const dfd = { - vendorId: dfdReader._skip(4)._nextUint16(), - descriptorType: dfdReader._nextUint16(), - versionNumber: dfdReader._nextUint16(), - descriptorBlockSize: dfdReader._nextUint16(), - colorModel: dfdReader._nextUint8(), - colorPrimaries: dfdReader._nextUint8(), - transferFunction: dfdReader._nextUint8(), - flags: dfdReader._nextUint8(), - texelBlockDimension: [ - dfdReader._nextUint8(), - dfdReader._nextUint8(), - dfdReader._nextUint8(), - dfdReader._nextUint8() - ], - bytesPlane: [ - dfdReader._nextUint8(), - dfdReader._nextUint8(), - dfdReader._nextUint8(), - dfdReader._nextUint8(), - dfdReader._nextUint8(), - dfdReader._nextUint8(), - dfdReader._nextUint8(), - dfdReader._nextUint8() - ], - samples: [] - }; - const numSamples = (dfd.descriptorBlockSize / 4 - 6) / 4; - for (let i = 0; i < numSamples; i++) { - const sample = { - bitOffset: dfdReader._nextUint16(), - bitLength: dfdReader._nextUint8(), - channelType: dfdReader._nextUint8(), - samplePosition: [ - dfdReader._nextUint8(), - dfdReader._nextUint8(), - dfdReader._nextUint8(), - dfdReader._nextUint8() - ], - sampleLower: -Infinity, - sampleUpper: Infinity - }; - if (sample.channelType & 64) { - sample.sampleLower = dfdReader._nextInt32(); - sample.sampleUpper = dfdReader._nextInt32(); - } else { - sample.sampleLower = dfdReader._nextUint32(); - sample.sampleUpper = dfdReader._nextUint32(); - } - dfd.samples[i] = sample; - } - container.dataFormatDescriptor.length = 0; - container.dataFormatDescriptor.push(dfd); - const kvdReader = new BufferReader(data, kvdByteOffset, kvdByteLength, true); - while (kvdReader._offset < kvdByteLength) { - const keyValueByteLength = kvdReader._nextUint32(); - const keyData = kvdReader._scan(keyValueByteLength); - const key = decodeText(keyData); - container.keyValue[key] = kvdReader._nextUint8Array(keyValueByteLength - keyData.byteLength - 1); - if (key.match(/^ktx/i)) { - const text = decodeText(container.keyValue[key]); - container.keyValue[key] = text.substring(0, text.lastIndexOf("\0")); - } - const kvPadding = keyValueByteLength % 4 ? 4 - keyValueByteLength % 4 : 0; - kvdReader._skip(kvPadding); - } - if (sgdByteLength <= 0) return container; - const sgdReader = new BufferReader(data, sgdByteOffset, sgdByteLength, true); - const endpointCount = sgdReader._nextUint16(); - const selectorCount = sgdReader._nextUint16(); - const endpointsByteLength = sgdReader._nextUint32(); - const selectorsByteLength = sgdReader._nextUint32(); - const tablesByteLength = sgdReader._nextUint32(); - const extendedByteLength = sgdReader._nextUint32(); - const imageDescs = []; - for (let i = 0; i < levelCount; i++) imageDescs.push({ - imageFlags: sgdReader._nextUint32(), - rgbSliceByteOffset: sgdReader._nextUint32(), - rgbSliceByteLength: sgdReader._nextUint32(), - alphaSliceByteOffset: sgdReader._nextUint32(), - alphaSliceByteLength: sgdReader._nextUint32() - }); - const endpointsByteOffset = sgdByteOffset + sgdReader._offset; - const selectorsByteOffset = endpointsByteOffset + endpointsByteLength; - const tablesByteOffset = selectorsByteOffset + selectorsByteLength; - const extendedByteOffset = tablesByteOffset + tablesByteLength; - container.globalData = { - endpointCount, - selectorCount, - imageDescs, - endpointsData: new Uint8Array(data.buffer, data.byteOffset + endpointsByteOffset, endpointsByteLength), - selectorsData: new Uint8Array(data.buffer, data.byteOffset + selectorsByteOffset, selectorsByteLength), - tablesData: new Uint8Array(data.buffer, data.byteOffset + tablesByteOffset, tablesByteLength), - extendedData: new Uint8Array(data.buffer, data.byteOffset + extendedByteOffset, extendedByteLength) - }; - return container; -} -//#endregion -//#region node_modules/three-stdlib/libs/zstddec.js -var init$1; -var instance; -var heap; -var IMPORT_OBJECT = { env: { emscripten_notify_memory_growth: function(index) { - heap = new Uint8Array(instance.exports.memory.buffer); -} } }; -var ZSTDDecoder = class { - init() { - if (init$1) return init$1; - if (typeof fetch !== "undefined") init$1 = fetch("data:application/wasm;base64," + wasm).then((response) => response.arrayBuffer()).then((arrayBuffer) => WebAssembly.instantiate(arrayBuffer, IMPORT_OBJECT)).then(this._init); - else init$1 = WebAssembly.instantiate(Buffer.from(wasm, "base64"), IMPORT_OBJECT).then(this._init); - return init$1; - } - _init(result) { - instance = result.instance; - IMPORT_OBJECT.env.emscripten_notify_memory_growth(0); - } - decode(array, uncompressedSize = 0) { - if (!instance) throw new Error(`ZSTDDecoder: Await .init() before decoding.`); - const compressedSize = array.byteLength; - const compressedPtr = instance.exports.malloc(compressedSize); - heap.set(array, compressedPtr); - uncompressedSize = uncompressedSize || Number(instance.exports.ZSTD_findDecompressedSize(compressedPtr, compressedSize)); - const uncompressedPtr = instance.exports.malloc(uncompressedSize); - const actualSize = instance.exports.ZSTD_decompress(uncompressedPtr, uncompressedSize, compressedPtr, compressedSize); - const dec = heap.slice(uncompressedPtr, uncompressedPtr + actualSize); - instance.exports.free(compressedPtr); - instance.exports.free(uncompressedPtr); - return dec; - } -}; -var wasm = "AGFzbQEAAAABpQEVYAF/AX9gAn9/AGADf39/AX9gBX9/f39/AX9gAX8AYAJ/fwF/YAR/f39/AX9gA39/fwBgBn9/f39/fwF/YAd/f39/f39/AX9gAn9/AX5gAn5+AX5gAABgBX9/f39/AGAGf39/f39/AGAIf39/f39/f38AYAl/f39/f39/f38AYAABf2AIf39/f39/f38Bf2ANf39/f39/f39/f39/fwF/YAF/AX4CJwEDZW52H2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgABANpaAEFAAAFAgEFCwACAQABAgIFBQcAAwABDgsBAQcAEhMHAAUBDAQEAAANBwQCAgYCBAgDAwMDBgEACQkHBgICAAYGAgQUBwYGAwIGAAMCAQgBBwUGCgoEEQAEBAEIAwgDBQgDEA8IAAcABAUBcAECAgUEAQCAAgYJAX8BQaCgwAILB2AHBm1lbW9yeQIABm1hbGxvYwAoBGZyZWUAJgxaU1REX2lzRXJyb3IAaBlaU1REX2ZpbmREZWNvbXByZXNzZWRTaXplAFQPWlNURF9kZWNvbXByZXNzAEoGX3N0YXJ0ACQJBwEAQQELASQKussBaA8AIAAgACgCBCABajYCBAsZACAAKAIAIAAoAgRBH3F0QQAgAWtBH3F2CwgAIABBiH9LC34BBH9BAyEBIAAoAgQiA0EgTQRAIAAoAggiASAAKAIQTwRAIAAQDQ8LIAAoAgwiAiABRgRAQQFBAiADQSBJGw8LIAAgASABIAJrIANBA3YiBCABIARrIAJJIgEbIgJrIgQ2AgggACADIAJBA3RrNgIEIAAgBCgAADYCAAsgAQsUAQF/IAAgARACIQIgACABEAEgAgv3AQECfyACRQRAIABCADcCACAAQQA2AhAgAEIANwIIQbh/DwsgACABNgIMIAAgAUEEajYCECACQQRPBEAgACABIAJqIgFBfGoiAzYCCCAAIAMoAAA2AgAgAUF/ai0AACIBBEAgAEEIIAEQFGs2AgQgAg8LIABBADYCBEF/DwsgACABNgIIIAAgAS0AACIDNgIAIAJBfmoiBEEBTQRAIARBAWtFBEAgACABLQACQRB0IANyIgM2AgALIAAgAS0AAUEIdCADajYCAAsgASACakF/ai0AACIBRQRAIABBADYCBEFsDwsgAEEoIAEQFCACQQN0ams2AgQgAgsWACAAIAEpAAA3AAAgACABKQAINwAICy8BAX8gAUECdEGgHWooAgAgACgCAEEgIAEgACgCBGprQR9xdnEhAiAAIAEQASACCyEAIAFCz9bTvtLHq9lCfiAAfEIfiUKHla+vmLbem55/fgsdAQF/IAAoAgggACgCDEYEfyAAKAIEQSBGBUEACwuCBAEDfyACQYDAAE8EQCAAIAEgAhBnIAAPCyAAIAJqIQMCQCAAIAFzQQNxRQRAAkAgAkEBSARAIAAhAgwBCyAAQQNxRQRAIAAhAgwBCyAAIQIDQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADTw0BIAJBA3ENAAsLAkAgA0F8cSIEQcAASQ0AIAIgBEFAaiIFSw0AA0AgAiABKAIANgIAIAIgASgCBDYCBCACIAEoAgg2AgggAiABKAIMNgIMIAIgASgCEDYCECACIAEoAhQ2AhQgAiABKAIYNgIYIAIgASgCHDYCHCACIAEoAiA2AiAgAiABKAIkNgIkIAIgASgCKDYCKCACIAEoAiw2AiwgAiABKAIwNgIwIAIgASgCNDYCNCACIAEoAjg2AjggAiABKAI8NgI8IAFBQGshASACQUBrIgIgBU0NAAsLIAIgBE8NAQNAIAIgASgCADYCACABQQRqIQEgAkEEaiICIARJDQALDAELIANBBEkEQCAAIQIMAQsgA0F8aiIEIABJBEAgACECDAELIAAhAgNAIAIgAS0AADoAACACIAEtAAE6AAEgAiABLQACOgACIAIgAS0AAzoAAyABQQRqIQEgAkEEaiICIARNDQALCyACIANJBEADQCACIAEtAAA6AAAgAUEBaiEBIAJBAWoiAiADRw0ACwsgAAsMACAAIAEpAAA3AAALQQECfyAAKAIIIgEgACgCEEkEQEEDDwsgACAAKAIEIgJBB3E2AgQgACABIAJBA3ZrIgE2AgggACABKAAANgIAQQALDAAgACABKAIANgAAC/cCAQJ/AkAgACABRg0AAkAgASACaiAASwRAIAAgAmoiBCABSw0BCyAAIAEgAhALDwsgACABc0EDcSEDAkACQCAAIAFJBEAgAwRAIAAhAwwDCyAAQQNxRQRAIAAhAwwCCyAAIQMDQCACRQ0EIAMgAS0AADoAACABQQFqIQEgAkF/aiECIANBAWoiA0EDcQ0ACwwBCwJAIAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigC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C0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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"; -//#endregion -//#region node_modules/three-stdlib/_polyfill/CompressedCubeTexture.js -var CompressedCubeTexture = class extends CompressedTexture { - constructor(images, format, type) { - super(void 0, images[0].width, images[0].height, format, type, 301); - this.isCompressedCubeTexture = true; - this.isCubeTexture = true; - this.image = images; - } -}; -//#endregion -//#region node_modules/three-stdlib/_polyfill/CompressedArrayTexture.js -var CompressedArrayTexture = class extends CompressedTexture { - constructor(mipmaps, width, height, depth, format, type) { - super(mipmaps, width, height, format, type); - this.isCompressedArrayTexture = true; - this.image.depth = depth; - this.wrapR = ClampToEdgeWrapping; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/KTX2Loader.js -var __defProp$2 = Object.defineProperty; -var __defNormalProp$2 = (obj, key, value) => key in obj ? __defProp$2(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$2 = (obj, key, value) => { - __defNormalProp$2(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var LinearEncoding = 3e3; -var sRGBEncoding = 3001; -var NoColorSpace = ""; -var DisplayP3ColorSpace = "display-p3"; -var LinearDisplayP3ColorSpace = "display-p3-linear"; -var LinearSRGBColorSpace = "srgb-linear"; -var SRGBColorSpace = "srgb"; -var _taskCache$3 = /* @__PURE__ */ new WeakMap(); -var _activeLoaders = 0; -var _zstd; -var KTX2Loader = /* @__PURE__ */ (() => { - const _KTX2Loader = class extends Loader { - constructor(manager) { - super(manager); - this.transcoderPath = ""; - this.transcoderBinary = null; - this.transcoderPending = null; - this.workerPool = new WorkerPool(); - this.workerSourceURL = ""; - this.workerConfig = null; - if (typeof MSC_TRANSCODER !== "undefined") console.warn("THREE.KTX2Loader: Please update to latest \"basis_transcoder\". \"msc_basis_transcoder\" is no longer supported in three.js r125+."); - } - setTranscoderPath(path) { - this.transcoderPath = path; - return this; - } - setWorkerLimit(num) { - this.workerPool.setWorkerLimit(num); - return this; - } - detectSupport(renderer) { - this.workerConfig = { - astcSupported: renderer.extensions.has("WEBGL_compressed_texture_astc"), - etc1Supported: renderer.extensions.has("WEBGL_compressed_texture_etc1"), - etc2Supported: renderer.extensions.has("WEBGL_compressed_texture_etc"), - dxtSupported: renderer.extensions.has("WEBGL_compressed_texture_s3tc"), - bptcSupported: renderer.extensions.has("EXT_texture_compression_bptc"), - pvrtcSupported: renderer.extensions.has("WEBGL_compressed_texture_pvrtc") || renderer.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc") - }; - if (renderer.capabilities.isWebGL2) this.workerConfig.etc1Supported = false; - return this; - } - init() { - if (!this.transcoderPending) { - const jsLoader = new FileLoader(this.manager); - jsLoader.setPath(this.transcoderPath); - jsLoader.setWithCredentials(this.withCredentials); - const jsContent = jsLoader.loadAsync("basis_transcoder.js"); - const binaryLoader = new FileLoader(this.manager); - binaryLoader.setPath(this.transcoderPath); - binaryLoader.setResponseType("arraybuffer"); - binaryLoader.setWithCredentials(this.withCredentials); - const binaryContent = binaryLoader.loadAsync("basis_transcoder.wasm"); - this.transcoderPending = Promise.all([jsContent, binaryContent]).then(([jsContent2, binaryContent2]) => { - const fn = _KTX2Loader.BasisWorker.toString(); - const body = [ - "/* constants */", - "let _EngineFormat = " + JSON.stringify(_KTX2Loader.EngineFormat), - "let _TranscoderFormat = " + JSON.stringify(_KTX2Loader.TranscoderFormat), - "let _BasisFormat = " + JSON.stringify(_KTX2Loader.BasisFormat), - "/* basis_transcoder.js */", - jsContent2, - "/* worker */", - fn.substring(fn.indexOf("{") + 1, fn.lastIndexOf("}")) - ].join("\n"); - this.workerSourceURL = URL.createObjectURL(new Blob([body])); - this.transcoderBinary = binaryContent2; - this.workerPool.setWorkerCreator(() => { - const worker = new Worker(this.workerSourceURL); - const transcoderBinary = this.transcoderBinary.slice(0); - worker.postMessage({ - type: "init", - config: this.workerConfig, - transcoderBinary - }, [transcoderBinary]); - return worker; - }); - }); - if (_activeLoaders > 0) console.warn("THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances."); - _activeLoaders++; - } - return this.transcoderPending; - } - load(url, onLoad, onProgress, onError) { - if (this.workerConfig === null) throw new Error("THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`."); - const loader = new FileLoader(this.manager); - loader.setResponseType("arraybuffer"); - loader.setWithCredentials(this.withCredentials); - loader.load(url, (buffer) => { - if (_taskCache$3.has(buffer)) return _taskCache$3.get(buffer).promise.then(onLoad).catch(onError); - this._createTexture(buffer).then((texture) => onLoad ? onLoad(texture) : null).catch(onError); - }, onProgress, onError); - } - _createTextureFrom(transcodeResult, container) { - const { faces, width, height, format, type, error, dfdFlags } = transcodeResult; - if (type === "error") return Promise.reject(error); - let texture; - if (container.faceCount === 6) texture = new CompressedCubeTexture(faces, format, UnsignedByteType); - else { - const mipmaps = faces[0].mipmaps; - texture = container.layerCount > 1 ? new CompressedArrayTexture(mipmaps, width, height, container.layerCount, format, UnsignedByteType) : new CompressedTexture(mipmaps, width, height, format, UnsignedByteType); - } - texture.minFilter = faces[0].mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter; - texture.magFilter = LinearFilter; - texture.generateMipmaps = false; - texture.needsUpdate = true; - const colorSpace = parseColorSpace(container); - if ("colorSpace" in texture) texture.colorSpace = colorSpace; - else texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding; - texture.premultiplyAlpha = !!(dfdFlags & 1); - return texture; - } - /** - * @param {ArrayBuffer} buffer - * @param {object?} config - * @return {Promise<CompressedTexture|CompressedArrayTexture|DataTexture|Data3DTexture>} - */ - async _createTexture(buffer, config = {}) { - const container = read(new Uint8Array(buffer)); - if (container.vkFormat !== 0) return createRawTexture(container); - const taskConfig = config; - const texturePending = this.init().then(() => { - return this.workerPool.postMessage({ - type: "transcode", - buffer, - taskConfig - }, [buffer]); - }).then((e) => this._createTextureFrom(e.data, container)); - _taskCache$3.set(buffer, { promise: texturePending }); - return texturePending; - } - dispose() { - this.workerPool.dispose(); - if (this.workerSourceURL) URL.revokeObjectURL(this.workerSourceURL); - _activeLoaders--; - return this; - } - }; - let KTX2Loader2 = _KTX2Loader; - __publicField$2(KTX2Loader2, "BasisFormat", { - ETC1S: 0, - UASTC_4x4: 1 - }); - __publicField$2(KTX2Loader2, "TranscoderFormat", { - ETC1: 0, - ETC2: 1, - BC1: 2, - BC3: 3, - BC4: 4, - BC5: 5, - BC7_M6_OPAQUE_ONLY: 6, - BC7_M5: 7, - PVRTC1_4_RGB: 8, - PVRTC1_4_RGBA: 9, - ASTC_4x4: 10, - ATC_RGB: 11, - ATC_RGBA_INTERPOLATED_ALPHA: 12, - RGBA32: 13, - RGB565: 14, - BGR565: 15, - RGBA4444: 16 - }); - __publicField$2(KTX2Loader2, "EngineFormat", { - RGBAFormat, - RGBA_ASTC_4x4_Format, - RGBA_BPTC_Format, - RGBA_ETC2_EAC_Format, - RGBA_PVRTC_4BPPV1_Format, - RGBA_S3TC_DXT5_Format, - RGB_ETC1_Format, - RGB_ETC2_Format, - RGB_PVRTC_4BPPV1_Format, - RGB_S3TC_DXT1_Format - }); - __publicField$2(KTX2Loader2, "BasisWorker", function() { - let config; - let transcoderPending; - let BasisModule; - const EngineFormat = _EngineFormat; - const TranscoderFormat = _TranscoderFormat; - const BasisFormat = _BasisFormat; - self.addEventListener("message", function(e) { - const message = e.data; - switch (message.type) { - case "init": - config = message.config; - init(message.transcoderBinary); - break; - case "transcode": - transcoderPending.then(() => { - try { - const { faces, buffers, width, height, hasAlpha, format, dfdFlags } = transcode(message.buffer); - self.postMessage({ - type: "transcode", - id: message.id, - faces, - width, - height, - hasAlpha, - format, - dfdFlags - }, buffers); - } catch (error) { - console.error(error); - self.postMessage({ - type: "error", - id: message.id, - error: error.message - }); - } - }); - break; - } - }); - function init(wasmBinary) { - transcoderPending = new Promise((resolve) => { - BasisModule = { - wasmBinary, - onRuntimeInitialized: resolve - }; - BASIS(BasisModule); - }).then(() => { - BasisModule.initializeBasis(); - if (BasisModule.KTX2File === void 0) console.warn("THREE.KTX2Loader: Please update Basis Universal transcoder."); - }); - } - function transcode(buffer) { - const ktx2File = new BasisModule.KTX2File(new Uint8Array(buffer)); - function cleanup() { - ktx2File.close(); - ktx2File.delete(); - } - if (!ktx2File.isValid()) { - cleanup(); - throw new Error("THREE.KTX2Loader: Invalid or unsupported .ktx2 file"); - } - const basisFormat = ktx2File.isUASTC() ? BasisFormat.UASTC_4x4 : BasisFormat.ETC1S; - const width = ktx2File.getWidth(); - const height = ktx2File.getHeight(); - const layerCount = ktx2File.getLayers() || 1; - const levelCount = ktx2File.getLevels(); - const faceCount = ktx2File.getFaces(); - const hasAlpha = ktx2File.getHasAlpha(); - const dfdFlags = ktx2File.getDFDFlags(); - const { transcoderFormat, engineFormat } = getTranscoderFormat(basisFormat, width, height, hasAlpha); - if (!width || !height || !levelCount) { - cleanup(); - throw new Error("THREE.KTX2Loader: Invalid texture"); - } - if (!ktx2File.startTranscoding()) { - cleanup(); - throw new Error("THREE.KTX2Loader: .startTranscoding failed"); - } - const faces = []; - const buffers = []; - for (let face = 0; face < faceCount; face++) { - const mipmaps = []; - for (let mip = 0; mip < levelCount; mip++) { - const layerMips = []; - let mipWidth, mipHeight; - for (let layer = 0; layer < layerCount; layer++) { - const levelInfo = ktx2File.getImageLevelInfo(mip, layer, face); - if (face === 0 && mip === 0 && layer === 0 && (levelInfo.origWidth % 4 !== 0 || levelInfo.origHeight % 4 !== 0)) console.warn("THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions."); - if (levelCount > 1) { - mipWidth = levelInfo.origWidth; - mipHeight = levelInfo.origHeight; - } else { - mipWidth = levelInfo.width; - mipHeight = levelInfo.height; - } - const dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, transcoderFormat)); - if (!ktx2File.transcodeImage(dst, mip, layer, face, transcoderFormat, 0, -1, -1)) { - cleanup(); - throw new Error("THREE.KTX2Loader: .transcodeImage failed."); - } - layerMips.push(dst); - } - const mipData = concat(layerMips); - mipmaps.push({ - data: mipData, - width: mipWidth, - height: mipHeight - }); - buffers.push(mipData.buffer); - } - faces.push({ - mipmaps, - width, - height, - format: engineFormat - }); - } - cleanup(); - return { - faces, - buffers, - width, - height, - hasAlpha, - format: engineFormat, - dfdFlags - }; - } - const FORMAT_OPTIONS = [ - { - if: "astcSupported", - basisFormat: [BasisFormat.UASTC_4x4], - transcoderFormat: [TranscoderFormat.ASTC_4x4, TranscoderFormat.ASTC_4x4], - engineFormat: [EngineFormat.RGBA_ASTC_4x4_Format, EngineFormat.RGBA_ASTC_4x4_Format], - priorityETC1S: Infinity, - priorityUASTC: 1, - needsPowerOfTwo: false - }, - { - if: "bptcSupported", - basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], - transcoderFormat: [TranscoderFormat.BC7_M5, TranscoderFormat.BC7_M5], - engineFormat: [EngineFormat.RGBA_BPTC_Format, EngineFormat.RGBA_BPTC_Format], - priorityETC1S: 3, - priorityUASTC: 2, - needsPowerOfTwo: false - }, - { - if: "dxtSupported", - basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], - transcoderFormat: [TranscoderFormat.BC1, TranscoderFormat.BC3], - engineFormat: [EngineFormat.RGB_S3TC_DXT1_Format, EngineFormat.RGBA_S3TC_DXT5_Format], - priorityETC1S: 4, - priorityUASTC: 5, - needsPowerOfTwo: false - }, - { - if: "etc2Supported", - basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], - transcoderFormat: [TranscoderFormat.ETC1, TranscoderFormat.ETC2], - engineFormat: [EngineFormat.RGB_ETC2_Format, EngineFormat.RGBA_ETC2_EAC_Format], - priorityETC1S: 1, - priorityUASTC: 3, - needsPowerOfTwo: false - }, - { - if: "etc1Supported", - basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], - transcoderFormat: [TranscoderFormat.ETC1], - engineFormat: [EngineFormat.RGB_ETC1_Format], - priorityETC1S: 2, - priorityUASTC: 4, - needsPowerOfTwo: false - }, - { - if: "pvrtcSupported", - basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], - transcoderFormat: [TranscoderFormat.PVRTC1_4_RGB, TranscoderFormat.PVRTC1_4_RGBA], - engineFormat: [EngineFormat.RGB_PVRTC_4BPPV1_Format, EngineFormat.RGBA_PVRTC_4BPPV1_Format], - priorityETC1S: 5, - priorityUASTC: 6, - needsPowerOfTwo: true - } - ]; - const ETC1S_OPTIONS = FORMAT_OPTIONS.sort(function(a, b) { - return a.priorityETC1S - b.priorityETC1S; - }); - const UASTC_OPTIONS = FORMAT_OPTIONS.sort(function(a, b) { - return a.priorityUASTC - b.priorityUASTC; - }); - function getTranscoderFormat(basisFormat, width, height, hasAlpha) { - let transcoderFormat; - let engineFormat; - const options = basisFormat === BasisFormat.ETC1S ? ETC1S_OPTIONS : UASTC_OPTIONS; - for (let i = 0; i < options.length; i++) { - const opt = options[i]; - if (!config[opt.if]) continue; - if (!opt.basisFormat.includes(basisFormat)) continue; - if (hasAlpha && opt.transcoderFormat.length < 2) continue; - if (opt.needsPowerOfTwo && !(isPowerOfTwo(width) && isPowerOfTwo(height))) continue; - transcoderFormat = opt.transcoderFormat[hasAlpha ? 1 : 0]; - engineFormat = opt.engineFormat[hasAlpha ? 1 : 0]; - return { - transcoderFormat, - engineFormat - }; - } - console.warn("THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32."); - transcoderFormat = TranscoderFormat.RGBA32; - engineFormat = EngineFormat.RGBAFormat; - return { - transcoderFormat, - engineFormat - }; - } - function isPowerOfTwo(value) { - if (value <= 2) return true; - return (value & value - 1) === 0 && value !== 0; - } - function concat(arrays) { - if (arrays.length === 1) return arrays[0]; - let totalByteLength = 0; - for (let i = 0; i < arrays.length; i++) { - const array = arrays[i]; - totalByteLength += array.byteLength; - } - const result = new Uint8Array(totalByteLength); - let byteOffset = 0; - for (let i = 0; i < arrays.length; i++) { - const array = arrays[i]; - result.set(array, byteOffset); - byteOffset += array.byteLength; - } - return result; - } - }); - return KTX2Loader2; -})(); -var UNCOMPRESSED_FORMATS = /* @__PURE__ */ new Set([ - RGBAFormat, - RGFormat, - RedFormat -]); -var FORMAT_MAP = { - [109]: RGBAFormat, - [97]: RGBAFormat, - [37]: RGBAFormat, - [43]: RGBAFormat, - [103]: RGFormat, - [83]: RGFormat, - [16]: RGFormat, - [22]: RGFormat, - [100]: RedFormat, - [76]: RedFormat, - [15]: RedFormat, - [9]: RedFormat, - [166]: RGBA_ASTC_6x6_Format, - [165]: RGBA_ASTC_6x6_Format -}; -var TYPE_MAP = { - [109]: FloatType, - [97]: HalfFloatType, - [37]: UnsignedByteType, - [43]: UnsignedByteType, - [103]: FloatType, - [83]: HalfFloatType, - [16]: UnsignedByteType, - [22]: UnsignedByteType, - [100]: FloatType, - [76]: HalfFloatType, - [15]: UnsignedByteType, - [9]: UnsignedByteType, - [166]: UnsignedByteType, - [165]: UnsignedByteType -}; -async function createRawTexture(container) { - const { vkFormat } = container; - if (FORMAT_MAP[vkFormat] === void 0) throw new Error("THREE.KTX2Loader: Unsupported vkFormat."); - let zstd; - if (container.supercompressionScheme === 2) { - if (!_zstd) _zstd = new Promise(async (resolve) => { - const zstd2 = new ZSTDDecoder(); - await zstd2.init(); - resolve(zstd2); - }); - zstd = await _zstd; - } - const mipmaps = []; - for (let levelIndex = 0; levelIndex < container.levels.length; levelIndex++) { - const levelWidth = Math.max(1, container.pixelWidth >> levelIndex); - const levelHeight = Math.max(1, container.pixelHeight >> levelIndex); - const levelDepth = container.pixelDepth ? Math.max(1, container.pixelDepth >> levelIndex) : 0; - const level = container.levels[levelIndex]; - let levelData; - if (container.supercompressionScheme === 0) levelData = level.levelData; - else if (container.supercompressionScheme === 2) levelData = zstd.decode(level.levelData, level.uncompressedByteLength); - else throw new Error("THREE.KTX2Loader: Unsupported supercompressionScheme."); - let data; - if (TYPE_MAP[vkFormat] === 1015) data = new Float32Array(levelData.buffer, levelData.byteOffset, levelData.byteLength / Float32Array.BYTES_PER_ELEMENT); - else if (TYPE_MAP[vkFormat] === 1016) data = new Uint16Array(levelData.buffer, levelData.byteOffset, levelData.byteLength / Uint16Array.BYTES_PER_ELEMENT); - else data = levelData; - mipmaps.push({ - data, - width: levelWidth, - height: levelHeight, - depth: levelDepth - }); - } - let texture; - if (UNCOMPRESSED_FORMATS.has(FORMAT_MAP[vkFormat])) texture = container.pixelDepth === 0 ? new DataTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight) : new Data3DTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight, container.pixelDepth); - else { - if (container.pixelDepth > 0) throw new Error("THREE.KTX2Loader: Unsupported pixelDepth."); - texture = new CompressedTexture(mipmaps, container.pixelWidth, container.pixelHeight); - } - texture.mipmaps = mipmaps; - texture.type = TYPE_MAP[vkFormat]; - texture.format = FORMAT_MAP[vkFormat]; - texture.needsUpdate = true; - const colorSpace = parseColorSpace(container); - if ("colorSpace" in texture) texture.colorSpace = colorSpace; - else texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding; - return Promise.resolve(texture); -} -function parseColorSpace(container) { - const dfd = container.dataFormatDescriptor[0]; - if (dfd.colorPrimaries === 1) return dfd.transferFunction === 2 ? SRGBColorSpace : LinearSRGBColorSpace; - else if (dfd.colorPrimaries === 10) return dfd.transferFunction === 2 ? DisplayP3ColorSpace : LinearDisplayP3ColorSpace; - else if (dfd.colorPrimaries === 0) return NoColorSpace; - else { - console.warn(`THREE.KTX2Loader: Unsupported color primaries, "${dfd.colorPrimaries}"`); - return NoColorSpace; - } -} -//#endregion -//#region node_modules/three-stdlib/libs/lottie.js -var lottie = /* @__PURE__ */ (() => { - if (typeof navigator === "undefined" || navigator.product === "ReactNative" || typeof document === "undefined" || typeof document.getElementsByTagName !== "function" || typeof document.createElement !== "function" || typeof CanvasRenderingContext2D === "undefined") return {}; - const svgNS = "http://www.w3.org/2000/svg"; - let locationHref = ""; - let _useWebWorker = false; - const initialDefaultFrame = -999999; - const setWebWorker = (flag) => { - _useWebWorker = !!flag; - }; - const getWebWorker = () => _useWebWorker; - const setLocationHref = (value) => { - locationHref = value; - }; - const getLocationHref = () => locationHref; - function createTag(type) { - return document.createElement(type); - } - function extendPrototype(sources, destination) { - var i; - var len = sources.length; - var sourcePrototype; - for (i = 0; i < len; i += 1) { - sourcePrototype = sources[i].prototype; - for (var attr in sourcePrototype) if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr)) destination.prototype[attr] = sourcePrototype[attr]; - } - } - function getDescriptor(object, prop) { - return Object.getOwnPropertyDescriptor(object, prop); - } - function createProxyFunction(prototype) { - function ProxyFunction() {} - ProxyFunction.prototype = prototype; - return ProxyFunction; - } - const audioControllerFactory = function() { - function AudioController(audioFactory) { - this.audios = []; - this.audioFactory = audioFactory; - this._volume = 1; - this._isMuted = false; - } - AudioController.prototype = { - addAudio: function(audio) { - this.audios.push(audio); - }, - pause: function() { - var i; - var len = this.audios.length; - for (i = 0; i < len; i += 1) this.audios[i].pause(); - }, - resume: function() { - var i; - var len = this.audios.length; - for (i = 0; i < len; i += 1) this.audios[i].resume(); - }, - setRate: function(rateValue) { - var i; - var len = this.audios.length; - for (i = 0; i < len; i += 1) this.audios[i].setRate(rateValue); - }, - createAudio: function(assetPath) { - if (this.audioFactory) return this.audioFactory(assetPath); - if (window.Howl) return new window.Howl({ src: [assetPath] }); - return { - isPlaying: false, - play: function() { - this.isPlaying = true; - }, - seek: function() { - this.isPlaying = false; - }, - playing: function() {}, - rate: function() {}, - setVolume: function() {} - }; - }, - setAudioFactory: function(audioFactory) { - this.audioFactory = audioFactory; - }, - setVolume: function(value) { - this._volume = value; - this._updateVolume(); - }, - mute: function() { - this._isMuted = true; - this._updateVolume(); - }, - unmute: function() { - this._isMuted = false; - this._updateVolume(); - }, - getVolume: function() { - return this._volume; - }, - _updateVolume: function() { - var i; - var len = this.audios.length; - for (i = 0; i < len; i += 1) this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1)); - } - }; - return function() { - return new AudioController(); - }; - }(); - const createTypedArray = function() { - function createRegularArray(type, len) { - var i = 0; - var arr = []; - var value; - switch (type) { - case "int16": - case "uint8c": - value = 1; - break; - default: - value = 1.1; - break; - } - for (i = 0; i < len; i += 1) arr.push(value); - return arr; - } - function createTypedArrayFactory(type, len) { - if (type === "float32") return new Float32Array(len); - if (type === "int16") return new Int16Array(len); - if (type === "uint8c") return new Uint8ClampedArray(len); - return createRegularArray(type, len); - } - if (typeof Uint8ClampedArray === "function" && typeof Float32Array === "function") return createTypedArrayFactory; - return createRegularArray; - }(); - function createSizedArray(len) { - return Array.apply(null, { length: len }); - } - let subframeEnabled = true; - let expressionsPlugin = null; - let idPrefix$1 = ""; - const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent); - const bmPow = Math.pow; - const bmSqrt = Math.sqrt; - const bmFloor = Math.floor; - const bmMin = Math.min; - const BMMath = {}; - (function() { - var propertyNames = [ - "abs", - "acos", - "acosh", - "asin", - "asinh", - "atan", - "atanh", - "atan2", - "ceil", - "cbrt", - "expm1", - "clz32", - "cos", - "cosh", - "exp", - "floor", - "fround", - "hypot", - "imul", - "log", - "log1p", - "log2", - "log10", - "max", - "min", - "pow", - "random", - "round", - "sign", - "sin", - "sinh", - "sqrt", - "tan", - "tanh", - "trunc", - "E", - "LN10", - "LN2", - "LOG10E", - "LOG2E", - "PI", - "SQRT1_2", - "SQRT2" - ]; - var i; - var len = propertyNames.length; - for (i = 0; i < len; i += 1) BMMath[propertyNames[i]] = Math[propertyNames[i]]; - })(); - BMMath.random = Math.random; - BMMath.abs = function(val) { - if (typeof val === "object" && val.length) { - var absArr = createSizedArray(val.length); - var i; - var len = val.length; - for (i = 0; i < len; i += 1) absArr[i] = Math.abs(val[i]); - return absArr; - } - return Math.abs(val); - }; - let defaultCurveSegments = 150; - const degToRads = Math.PI / 180; - const roundCorner = .5519; - function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) { - this.type = type; - this.currentTime = currentTime; - this.totalTime = totalTime; - this.direction = frameMultiplier < 0 ? -1 : 1; - } - function BMCompleteEvent(type, frameMultiplier) { - this.type = type; - this.direction = frameMultiplier < 0 ? -1 : 1; - } - function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) { - this.type = type; - this.currentLoop = currentLoop; - this.totalLoops = totalLoops; - this.direction = frameMultiplier < 0 ? -1 : 1; - } - function BMSegmentStartEvent(type, firstFrame, totalFrames) { - this.type = type; - this.firstFrame = firstFrame; - this.totalFrames = totalFrames; - } - function BMDestroyEvent(type, target) { - this.type = type; - this.target = target; - } - function BMRenderFrameErrorEvent(nativeError, currentTime) { - this.type = "renderFrameError"; - this.nativeError = nativeError; - this.currentTime = currentTime; - } - function BMConfigErrorEvent(nativeError) { - this.type = "configError"; - this.nativeError = nativeError; - } - const createElementID = function() { - var _count = 0; - return function createID() { - _count += 1; - return idPrefix$1 + "__lottie_element_" + _count; - }; - }(); - function HSVtoRGB(h, s, v) { - var r; - var g; - var b; - var i; - var f; - var p; - var q; - var t; - i = Math.floor(h * 6); - f = h * 6 - i; - p = v * (1 - s); - q = v * (1 - f * s); - t = v * (1 - (1 - f) * s); - switch (i % 6) { - case 0: - r = v; - g = t; - b = p; - break; - case 1: - r = q; - g = v; - b = p; - break; - case 2: - r = p; - g = v; - b = t; - break; - case 3: - r = p; - g = q; - b = v; - break; - case 4: - r = t; - g = p; - b = v; - break; - case 5: - r = v; - g = p; - b = q; - break; - } - return [ - r, - g, - b - ]; - } - function RGBtoHSV(r, g, b) { - var max = Math.max(r, g, b); - var min = Math.min(r, g, b); - var d = max - min; - var h; - var s = max === 0 ? 0 : d / max; - var v = max / 255; - switch (max) { - case min: - h = 0; - break; - case r: - h = g - b + d * (g < b ? 6 : 0); - h /= 6 * d; - break; - case g: - h = b - r + d * 2; - h /= 6 * d; - break; - case b: - h = r - g + d * 4; - h /= 6 * d; - break; - } - return [ - h, - s, - v - ]; - } - function addSaturationToRGB(color, offset) { - var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255); - hsv[1] += offset; - if (hsv[1] > 1) hsv[1] = 1; - else if (hsv[1] <= 0) hsv[1] = 0; - return HSVtoRGB(hsv[0], hsv[1], hsv[2]); - } - function addBrightnessToRGB(color, offset) { - var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255); - hsv[2] += offset; - if (hsv[2] > 1) hsv[2] = 1; - else if (hsv[2] < 0) hsv[2] = 0; - return HSVtoRGB(hsv[0], hsv[1], hsv[2]); - } - function addHueToRGB(color, offset) { - var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255); - hsv[0] += offset / 360; - if (hsv[0] > 1) hsv[0] -= 1; - else if (hsv[0] < 0) hsv[0] += 1; - return HSVtoRGB(hsv[0], hsv[1], hsv[2]); - } - (function() { - var colorMap = []; - var i; - var hex; - for (i = 0; i < 256; i += 1) { - hex = i.toString(16); - colorMap[i] = hex.length === 1 ? "0" + hex : hex; - } - return function(r, g, b) { - if (r < 0) r = 0; - if (g < 0) g = 0; - if (b < 0) b = 0; - return "#" + colorMap[r] + colorMap[g] + colorMap[b]; - }; - })(); - const setSubframeEnabled = (flag) => { - subframeEnabled = !!flag; - }; - const getSubframeEnabled = () => subframeEnabled; - const setExpressionsPlugin = (value) => { - expressionsPlugin = value; - }; - const getExpressionsPlugin = () => expressionsPlugin; - const setDefaultCurveSegments = (value) => { - defaultCurveSegments = value; - }; - const getDefaultCurveSegments = () => defaultCurveSegments; - const setIdPrefix = (value) => { - idPrefix$1 = value; - }; - function createNS(type) { - return document.createElementNS(svgNS, type); - } - const dataManager = function() { - var _counterId = 1; - var processes = []; - var workerFn; - var workerInstance; - var workerProxy = { - onmessage: function() {}, - postMessage: function(path) { - workerFn({ data: path }); - } - }; - var _workerSelf = { postMessage: function(data) { - workerProxy.onmessage({ data }); - } }; - function createWorker(fn) { - if (window.Worker && window.Blob && getWebWorker()) { - var blob = new Blob(["var _workerSelf = self; self.onmessage = ", fn.toString()], { type: "text/javascript" }); - var url = URL.createObjectURL(blob); - return new Worker(url); - } - workerFn = fn; - return workerProxy; - } - function setupWorker() { - if (!workerInstance) { - workerInstance = createWorker(function workerStart(e) { - function dataFunctionManager() { - function completeLayers(layers, comps) { - var layerData; - var i; - var len = layers.length; - var j; - var jLen; - var k; - var kLen; - for (i = 0; i < len; i += 1) { - layerData = layers[i]; - if ("ks" in layerData && !layerData.completed) { - layerData.completed = true; - if (layerData.tt) layers[i - 1].td = layerData.tt; - if (layerData.hasMask) { - var maskProps = layerData.masksProperties; - jLen = maskProps.length; - for (j = 0; j < jLen; j += 1) if (maskProps[j].pt.k.i) convertPathsToAbsoluteValues(maskProps[j].pt.k); - else { - kLen = maskProps[j].pt.k.length; - for (k = 0; k < kLen; k += 1) { - if (maskProps[j].pt.k[k].s) convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]); - if (maskProps[j].pt.k[k].e) convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]); - } - } - } - if (layerData.ty === 0) { - layerData.layers = findCompLayers(layerData.refId, comps); - completeLayers(layerData.layers, comps); - } else if (layerData.ty === 4) completeShapes(layerData.shapes); - else if (layerData.ty === 5) completeText(layerData); - } - } - } - function completeChars(chars, assets) { - if (chars) { - var i = 0; - var len = chars.length; - for (i = 0; i < len; i += 1) if (chars[i].t === 1) { - chars[i].data.layers = findCompLayers(chars[i].data.refId, assets); - completeLayers(chars[i].data.layers, assets); - } - } - } - function findComp(id, comps) { - var i = 0; - var len = comps.length; - while (i < len) { - if (comps[i].id === id) return comps[i]; - i += 1; - } - return null; - } - function findCompLayers(id, comps) { - var comp = findComp(id, comps); - if (comp) { - if (!comp.layers.__used) { - comp.layers.__used = true; - return comp.layers; - } - return JSON.parse(JSON.stringify(comp.layers)); - } - return null; - } - function completeShapes(arr) { - var i; - var len = arr.length; - var j; - var jLen; - for (i = len - 1; i >= 0; i -= 1) if (arr[i].ty === "sh") if (arr[i].ks.k.i) convertPathsToAbsoluteValues(arr[i].ks.k); - else { - jLen = arr[i].ks.k.length; - for (j = 0; j < jLen; j += 1) { - if (arr[i].ks.k[j].s) convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]); - if (arr[i].ks.k[j].e) convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]); - } - } - else if (arr[i].ty === "gr") completeShapes(arr[i].it); - } - function convertPathsToAbsoluteValues(path) { - var i; - var len = path.i.length; - for (i = 0; i < len; i += 1) { - path.i[i][0] += path.v[i][0]; - path.i[i][1] += path.v[i][1]; - path.o[i][0] += path.v[i][0]; - path.o[i][1] += path.v[i][1]; - } - } - function checkVersion(minimum, animVersionString) { - var animVersion = animVersionString ? animVersionString.split(".") : [ - 100, - 100, - 100 - ]; - if (minimum[0] > animVersion[0]) return true; - if (animVersion[0] > minimum[0]) return false; - if (minimum[1] > animVersion[1]) return true; - if (animVersion[1] > minimum[1]) return false; - if (minimum[2] > animVersion[2]) return true; - if (animVersion[2] > minimum[2]) return false; - return null; - } - var checkText = function() { - var minimumVersion = [ - 4, - 4, - 14 - ]; - function updateTextLayer(textLayer) { - var documentData = textLayer.t.d; - textLayer.t.d = { k: [{ - s: documentData, - t: 0 - }] }; - } - function iterateLayers(layers) { - var i; - var len = layers.length; - for (i = 0; i < len; i += 1) if (layers[i].ty === 5) updateTextLayer(layers[i]); - } - return function(animationData) { - if (checkVersion(minimumVersion, animationData.v)) { - iterateLayers(animationData.layers); - if (animationData.assets) { - var i; - var len = animationData.assets.length; - for (i = 0; i < len; i += 1) if (animationData.assets[i].layers) iterateLayers(animationData.assets[i].layers); - } - } - }; - }(); - var checkChars = function() { - var minimumVersion = [ - 4, - 7, - 99 - ]; - return function(animationData) { - if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) { - var i; - var len = animationData.chars.length; - for (i = 0; i < len; i += 1) { - var charData = animationData.chars[i]; - if (charData.data && charData.data.shapes) { - completeShapes(charData.data.shapes); - charData.data.ip = 0; - charData.data.op = 99999; - charData.data.st = 0; - charData.data.sr = 1; - charData.data.ks = { - p: { - k: [0, 0], - a: 0 - }, - s: { - k: [100, 100], - a: 0 - }, - a: { - k: [0, 0], - a: 0 - }, - r: { - k: 0, - a: 0 - }, - o: { - k: 100, - a: 0 - } - }; - if (!animationData.chars[i].t) { - charData.data.shapes.push({ ty: "no" }); - charData.data.shapes[0].it.push({ - p: { - k: [0, 0], - a: 0 - }, - s: { - k: [100, 100], - a: 0 - }, - a: { - k: [0, 0], - a: 0 - }, - r: { - k: 0, - a: 0 - }, - o: { - k: 100, - a: 0 - }, - sk: { - k: 0, - a: 0 - }, - sa: { - k: 0, - a: 0 - }, - ty: "tr" - }); - } - } - } - } - }; - }(); - var checkPathProperties = function() { - var minimumVersion = [ - 5, - 7, - 15 - ]; - function updateTextLayer(textLayer) { - var pathData = textLayer.t.p; - if (typeof pathData.a === "number") pathData.a = { - a: 0, - k: pathData.a - }; - if (typeof pathData.p === "number") pathData.p = { - a: 0, - k: pathData.p - }; - if (typeof pathData.r === "number") pathData.r = { - a: 0, - k: pathData.r - }; - } - function iterateLayers(layers) { - var i; - var len = layers.length; - for (i = 0; i < len; i += 1) if (layers[i].ty === 5) updateTextLayer(layers[i]); - } - return function(animationData) { - if (checkVersion(minimumVersion, animationData.v)) { - iterateLayers(animationData.layers); - if (animationData.assets) { - var i; - var len = animationData.assets.length; - for (i = 0; i < len; i += 1) if (animationData.assets[i].layers) iterateLayers(animationData.assets[i].layers); - } - } - }; - }(); - var checkColors = function() { - var minimumVersion = [ - 4, - 1, - 9 - ]; - function iterateShapes(shapes) { - var i; - var len = shapes.length; - var j; - var jLen; - for (i = 0; i < len; i += 1) if (shapes[i].ty === "gr") iterateShapes(shapes[i].it); - else if (shapes[i].ty === "fl" || shapes[i].ty === "st") if (shapes[i].c.k && shapes[i].c.k[0].i) { - jLen = shapes[i].c.k.length; - for (j = 0; j < jLen; j += 1) { - if (shapes[i].c.k[j].s) { - shapes[i].c.k[j].s[0] /= 255; - shapes[i].c.k[j].s[1] /= 255; - shapes[i].c.k[j].s[2] /= 255; - shapes[i].c.k[j].s[3] /= 255; - } - if (shapes[i].c.k[j].e) { - shapes[i].c.k[j].e[0] /= 255; - shapes[i].c.k[j].e[1] /= 255; - shapes[i].c.k[j].e[2] /= 255; - shapes[i].c.k[j].e[3] /= 255; - } - } - } else { - shapes[i].c.k[0] /= 255; - shapes[i].c.k[1] /= 255; - shapes[i].c.k[2] /= 255; - shapes[i].c.k[3] /= 255; - } - } - function iterateLayers(layers) { - var i; - var len = layers.length; - for (i = 0; i < len; i += 1) if (layers[i].ty === 4) iterateShapes(layers[i].shapes); - } - return function(animationData) { - if (checkVersion(minimumVersion, animationData.v)) { - iterateLayers(animationData.layers); - if (animationData.assets) { - var i; - var len = animationData.assets.length; - for (i = 0; i < len; i += 1) if (animationData.assets[i].layers) iterateLayers(animationData.assets[i].layers); - } - } - }; - }(); - var checkShapes = function() { - var minimumVersion = [ - 4, - 4, - 18 - ]; - function completeClosingShapes(arr) { - var i; - var len = arr.length; - var j; - var jLen; - for (i = len - 1; i >= 0; i -= 1) if (arr[i].ty === "sh") if (arr[i].ks.k.i) arr[i].ks.k.c = arr[i].closed; - else { - jLen = arr[i].ks.k.length; - for (j = 0; j < jLen; j += 1) { - if (arr[i].ks.k[j].s) arr[i].ks.k[j].s[0].c = arr[i].closed; - if (arr[i].ks.k[j].e) arr[i].ks.k[j].e[0].c = arr[i].closed; - } - } - else if (arr[i].ty === "gr") completeClosingShapes(arr[i].it); - } - function iterateLayers(layers) { - var layerData; - var i; - var len = layers.length; - var j; - var jLen; - var k; - var kLen; - for (i = 0; i < len; i += 1) { - layerData = layers[i]; - if (layerData.hasMask) { - var maskProps = layerData.masksProperties; - jLen = maskProps.length; - for (j = 0; j < jLen; j += 1) if (maskProps[j].pt.k.i) maskProps[j].pt.k.c = maskProps[j].cl; - else { - kLen = maskProps[j].pt.k.length; - for (k = 0; k < kLen; k += 1) { - if (maskProps[j].pt.k[k].s) maskProps[j].pt.k[k].s[0].c = maskProps[j].cl; - if (maskProps[j].pt.k[k].e) maskProps[j].pt.k[k].e[0].c = maskProps[j].cl; - } - } - } - if (layerData.ty === 4) completeClosingShapes(layerData.shapes); - } - } - return function(animationData) { - if (checkVersion(minimumVersion, animationData.v)) { - iterateLayers(animationData.layers); - if (animationData.assets) { - var i; - var len = animationData.assets.length; - for (i = 0; i < len; i += 1) if (animationData.assets[i].layers) iterateLayers(animationData.assets[i].layers); - } - } - }; - }(); - function completeData(animationData) { - if (animationData.__complete) return; - checkColors(animationData); - checkText(animationData); - checkChars(animationData); - checkPathProperties(animationData); - checkShapes(animationData); - completeLayers(animationData.layers, animationData.assets); - completeChars(animationData.chars, animationData.assets); - animationData.__complete = true; - } - function completeText(data) { - if (data.t.a.length === 0 && !("m" in data.t.p)); - } - var moduleOb = {}; - moduleOb.completeData = completeData; - moduleOb.checkColors = checkColors; - moduleOb.checkChars = checkChars; - moduleOb.checkPathProperties = checkPathProperties; - moduleOb.checkShapes = checkShapes; - moduleOb.completeLayers = completeLayers; - return moduleOb; - } - if (!_workerSelf.dataManager) _workerSelf.dataManager = dataFunctionManager(); - if (!_workerSelf.assetLoader) _workerSelf.assetLoader = function() { - function formatResponse(xhr) { - var contentTypeHeader = xhr.getResponseHeader("content-type"); - if (contentTypeHeader && xhr.responseType === "json" && contentTypeHeader.indexOf("json") !== -1) return xhr.response; - if (xhr.response && typeof xhr.response === "object") return xhr.response; - if (xhr.response && typeof xhr.response === "string") return JSON.parse(xhr.response); - if (xhr.responseText) return JSON.parse(xhr.responseText); - return null; - } - function loadAsset(path, fullPath, callback, errorCallback) { - var response; - var xhr = new XMLHttpRequest(); - try { - xhr.responseType = "json"; - } catch (err) {} - xhr.onreadystatechange = function() { - if (xhr.readyState === 4) if (xhr.status === 200) { - response = formatResponse(xhr); - callback(response); - } else try { - response = formatResponse(xhr); - callback(response); - } catch (err) { - if (errorCallback) errorCallback(err); - } - }; - try { - xhr.open("GET", path, true); - } catch (error) { - xhr.open("GET", fullPath + "/" + path, true); - } - xhr.send(); - } - return { load: loadAsset }; - }(); - if (e.data.type === "loadAnimation") _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function(data) { - _workerSelf.dataManager.completeData(data); - _workerSelf.postMessage({ - id: e.data.id, - payload: data, - status: "success" - }); - }, function() { - _workerSelf.postMessage({ - id: e.data.id, - status: "error" - }); - }); - else if (e.data.type === "complete") { - var animation = e.data.animation; - _workerSelf.dataManager.completeData(animation); - _workerSelf.postMessage({ - id: e.data.id, - payload: animation, - status: "success" - }); - } else if (e.data.type === "loadData") _workerSelf.assetLoader.load(e.data.path, e.data.fullPath, function(data) { - _workerSelf.postMessage({ - id: e.data.id, - payload: data, - status: "success" - }); - }, function() { - _workerSelf.postMessage({ - id: e.data.id, - status: "error" - }); - }); - }); - workerInstance.onmessage = function(event) { - var data = event.data; - var id = data.id; - var process = processes[id]; - processes[id] = null; - if (data.status === "success") process.onComplete(data.payload); - else if (process.onError) process.onError(); - }; - } - } - function createProcess(onComplete, onError) { - _counterId += 1; - var id = "processId_" + _counterId; - processes[id] = { - onComplete, - onError - }; - return id; - } - function loadAnimation2(path, onComplete, onError) { - setupWorker(); - var processId = createProcess(onComplete, onError); - workerInstance.postMessage({ - type: "loadAnimation", - path, - fullPath: window.location.origin + window.location.pathname, - id: processId - }); - } - function loadData(path, onComplete, onError) { - setupWorker(); - var processId = createProcess(onComplete, onError); - workerInstance.postMessage({ - type: "loadData", - path, - fullPath: window.location.origin + window.location.pathname, - id: processId - }); - } - function completeAnimation(anim, onComplete, onError) { - setupWorker(); - var processId = createProcess(onComplete, onError); - workerInstance.postMessage({ - type: "complete", - animation: anim, - id: processId - }); - } - return { - loadAnimation: loadAnimation2, - loadData, - completeAnimation - }; - }(); - const ImagePreloader = function() { - var proxyImage = function() { - var canvas = createTag("canvas"); - canvas.width = 1; - canvas.height = 1; - var ctx = canvas.getContext("2d"); - ctx.fillStyle = "rgba(0,0,0,0)"; - ctx.fillRect(0, 0, 1, 1); - return canvas; - }(); - function imageLoaded() { - this.loadedAssets += 1; - if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) { - if (this.imagesLoadedCb) this.imagesLoadedCb(null); - } - } - function footageLoaded() { - this.loadedFootagesCount += 1; - if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) { - if (this.imagesLoadedCb) this.imagesLoadedCb(null); - } - } - function getAssetsPath(assetData, assetsPath, originalPath) { - var path = ""; - if (assetData.e) path = assetData.p; - else if (assetsPath) { - var imagePath = assetData.p; - if (imagePath.indexOf("images/") !== -1) imagePath = imagePath.split("/")[1]; - path = assetsPath + imagePath; - } else { - path = originalPath; - path += assetData.u ? assetData.u : ""; - path += assetData.p; - } - return path; - } - function testImageLoaded(img) { - var _count = 0; - var intervalId = setInterval(function() { - if (img.getBBox().width || _count > 500) { - this._imageLoaded(); - clearInterval(intervalId); - } - _count += 1; - }.bind(this), 50); - } - function createImageData(assetData) { - var path = getAssetsPath(assetData, this.assetsPath, this.path); - var img = createNS("image"); - if (isSafari) this.testImageLoaded(img); - else img.addEventListener("load", this._imageLoaded, false); - img.addEventListener("error", function() { - ob.img = proxyImage; - this._imageLoaded(); - }.bind(this), false); - img.setAttributeNS("http://www.w3.org/1999/xlink", "href", path); - if (this._elementHelper.append) this._elementHelper.append(img); - else this._elementHelper.appendChild(img); - var ob = { - img, - assetData - }; - return ob; - } - function createImgData(assetData) { - var path = getAssetsPath(assetData, this.assetsPath, this.path); - var img = createTag("img"); - img.crossOrigin = "anonymous"; - img.addEventListener("load", this._imageLoaded, false); - img.addEventListener("error", function() { - ob.img = proxyImage; - this._imageLoaded(); - }.bind(this), false); - img.src = path; - var ob = { - img, - assetData - }; - return ob; - } - function createFootageData(data) { - var ob = { assetData: data }; - var path = getAssetsPath(data, this.assetsPath, this.path); - dataManager.loadData(path, function(footageData) { - ob.img = footageData; - this._footageLoaded(); - }.bind(this), function() { - ob.img = {}; - this._footageLoaded(); - }.bind(this)); - return ob; - } - function loadAssets(assets, cb) { - this.imagesLoadedCb = cb; - var i; - var len = assets.length; - for (i = 0; i < len; i += 1) if (!assets[i].layers) { - if (!assets[i].t || assets[i].t === "seq") { - this.totalImages += 1; - this.images.push(this._createImageData(assets[i])); - } else if (assets[i].t === 3) { - this.totalFootages += 1; - this.images.push(this.createFootageData(assets[i])); - } - } - } - function setPath(path) { - this.path = path || ""; - } - function setAssetsPath(path) { - this.assetsPath = path || ""; - } - function getAsset(assetData) { - var i = 0; - var len = this.images.length; - while (i < len) { - if (this.images[i].assetData === assetData) return this.images[i].img; - i += 1; - } - return null; - } - function destroy() { - this.imagesLoadedCb = null; - this.images.length = 0; - } - function loadedImages() { - return this.totalImages === this.loadedAssets; - } - function loadedFootages() { - return this.totalFootages === this.loadedFootagesCount; - } - function setCacheType(type, elementHelper) { - if (type === "svg") { - this._elementHelper = elementHelper; - this._createImageData = this.createImageData.bind(this); - } else this._createImageData = this.createImgData.bind(this); - } - function ImagePreloaderFactory() { - this._imageLoaded = imageLoaded.bind(this); - this._footageLoaded = footageLoaded.bind(this); - this.testImageLoaded = testImageLoaded.bind(this); - this.createFootageData = createFootageData.bind(this); - this.assetsPath = ""; - this.path = ""; - this.totalImages = 0; - this.totalFootages = 0; - this.loadedAssets = 0; - this.loadedFootagesCount = 0; - this.imagesLoadedCb = null; - this.images = []; - } - ImagePreloaderFactory.prototype = { - loadAssets, - setAssetsPath, - setPath, - loadedImages, - loadedFootages, - destroy, - getAsset, - createImgData, - createImageData, - imageLoaded, - footageLoaded, - setCacheType - }; - return ImagePreloaderFactory; - }(); - function BaseEvent() {} - BaseEvent.prototype = { - triggerEvent: function(eventName, args) { - if (this._cbs[eventName]) { - var callbacks = this._cbs[eventName]; - for (var i = 0; i < callbacks.length; i += 1) callbacks[i](args); - } - }, - addEventListener: function(eventName, callback) { - if (!this._cbs[eventName]) this._cbs[eventName] = []; - this._cbs[eventName].push(callback); - return function() { - this.removeEventListener(eventName, callback); - }.bind(this); - }, - removeEventListener: function(eventName, callback) { - if (!callback) this._cbs[eventName] = null; - else if (this._cbs[eventName]) { - var i = 0; - var len = this._cbs[eventName].length; - while (i < len) { - if (this._cbs[eventName][i] === callback) { - this._cbs[eventName].splice(i, 1); - i -= 1; - len -= 1; - } - i += 1; - } - if (!this._cbs[eventName].length) this._cbs[eventName] = null; - } - } - }; - const markerParser = function() { - function parsePayloadLines(payload) { - var lines = payload.split("\r\n"); - var keys = {}; - var line; - var keysCount = 0; - for (var i = 0; i < lines.length; i += 1) { - line = lines[i].split(":"); - if (line.length === 2) { - keys[line[0]] = line[1].trim(); - keysCount += 1; - } - } - if (keysCount === 0) throw new Error(); - return keys; - } - return function(_markers) { - var markers = []; - for (var i = 0; i < _markers.length; i += 1) { - var _marker = _markers[i]; - var markerData = { - time: _marker.tm, - duration: _marker.dr - }; - try { - markerData.payload = JSON.parse(_markers[i].cm); - } catch (_) { - try { - markerData.payload = parsePayloadLines(_markers[i].cm); - } catch (__) { - markerData.payload = { name: _markers[i].cm }; - } - } - markers.push(markerData); - } - return markers; - }; - }(); - const ProjectInterface = function() { - function registerComposition(comp) { - this.compositions.push(comp); - } - return function() { - function _thisProjectFunction(name) { - var i = 0; - var len = this.compositions.length; - while (i < len) { - if (this.compositions[i].data && this.compositions[i].data.nm === name) { - if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) this.compositions[i].prepareFrame(this.currentFrame); - return this.compositions[i].compInterface; - } - i += 1; - } - return null; - } - _thisProjectFunction.compositions = []; - _thisProjectFunction.currentFrame = 0; - _thisProjectFunction.registerComposition = registerComposition; - return _thisProjectFunction; - }; - }(); - const renderers = {}; - const registerRenderer = (key, value) => { - renderers[key] = value; - }; - function getRenderer(key) { - return renderers[key]; - } - const AnimationItem = function() { - this._cbs = []; - this.name = ""; - this.path = ""; - this.isLoaded = false; - this.currentFrame = 0; - this.currentRawFrame = 0; - this.firstFrame = 0; - this.totalFrames = 0; - this.frameRate = 0; - this.frameMult = 0; - this.playSpeed = 1; - this.playDirection = 1; - this.playCount = 0; - this.animationData = {}; - this.assets = []; - this.isPaused = true; - this.autoplay = false; - this.loop = true; - this.renderer = null; - this.animationID = createElementID(); - this.assetsPath = ""; - this.timeCompleted = 0; - this.segmentPos = 0; - this.isSubframeEnabled = getSubframeEnabled(); - this.segments = []; - this._idle = true; - this._completedLoop = false; - this.projectInterface = ProjectInterface(); - this.imagePreloader = new ImagePreloader(); - this.audioController = audioControllerFactory(); - this.markers = []; - this.configAnimation = this.configAnimation.bind(this); - this.onSetupError = this.onSetupError.bind(this); - this.onSegmentComplete = this.onSegmentComplete.bind(this); - this.drawnFrameEvent = new BMEnterFrameEvent("drawnFrame", 0, 0, 0); - }; - extendPrototype([BaseEvent], AnimationItem); - AnimationItem.prototype.setParams = function(params) { - if (params.wrapper || params.container) this.wrapper = params.wrapper || params.container; - var animType = "svg"; - if (params.animType) animType = params.animType; - else if (params.renderer) animType = params.renderer; - const RendererClass = getRenderer(animType); - this.renderer = new RendererClass(this, params.rendererSettings); - this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs); - this.renderer.setProjectInterface(this.projectInterface); - this.animType = animType; - if (params.loop === "" || params.loop === null || params.loop === void 0 || params.loop === true) this.loop = true; - else if (params.loop === false) this.loop = false; - else this.loop = parseInt(params.loop, 10); - this.autoplay = "autoplay" in params ? params.autoplay : true; - this.name = params.name ? params.name : ""; - this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, "autoloadSegments") ? params.autoloadSegments : true; - this.assetsPath = params.assetsPath; - this.initialSegment = params.initialSegment; - if (params.audioFactory) this.audioController.setAudioFactory(params.audioFactory); - if (params.animationData) this.setupAnimation(params.animationData); - else if (params.path) { - if (params.path.lastIndexOf("\\") !== -1) this.path = params.path.substr(0, params.path.lastIndexOf("\\") + 1); - else this.path = params.path.substr(0, params.path.lastIndexOf("/") + 1); - this.fileName = params.path.substr(params.path.lastIndexOf("/") + 1); - this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf(".json")); - dataManager.loadAnimation(params.path, this.configAnimation, this.onSetupError); - } - }; - AnimationItem.prototype.onSetupError = function() { - this.trigger("data_failed"); - }; - AnimationItem.prototype.setupAnimation = function(data) { - dataManager.completeAnimation(data, this.configAnimation); - }; - AnimationItem.prototype.setData = function(wrapper, animationData) { - if (animationData) { - if (typeof animationData !== "object") animationData = JSON.parse(animationData); - } - var params = { - wrapper, - animationData - }; - var wrapperAttributes = wrapper.attributes; - params.path = wrapperAttributes.getNamedItem("data-animation-path") ? wrapperAttributes.getNamedItem("data-animation-path").value : wrapperAttributes.getNamedItem("data-bm-path") ? wrapperAttributes.getNamedItem("data-bm-path").value : wrapperAttributes.getNamedItem("bm-path") ? wrapperAttributes.getNamedItem("bm-path").value : ""; - params.animType = wrapperAttributes.getNamedItem("data-anim-type") ? wrapperAttributes.getNamedItem("data-anim-type").value : wrapperAttributes.getNamedItem("data-bm-type") ? wrapperAttributes.getNamedItem("data-bm-type").value : wrapperAttributes.getNamedItem("bm-type") ? wrapperAttributes.getNamedItem("bm-type").value : wrapperAttributes.getNamedItem("data-bm-renderer") ? wrapperAttributes.getNamedItem("data-bm-renderer").value : wrapperAttributes.getNamedItem("bm-renderer") ? wrapperAttributes.getNamedItem("bm-renderer").value : "canvas"; - var loop = wrapperAttributes.getNamedItem("data-anim-loop") ? wrapperAttributes.getNamedItem("data-anim-loop").value : wrapperAttributes.getNamedItem("data-bm-loop") ? wrapperAttributes.getNamedItem("data-bm-loop").value : wrapperAttributes.getNamedItem("bm-loop") ? wrapperAttributes.getNamedItem("bm-loop").value : ""; - if (loop === "false") params.loop = false; - else if (loop === "true") params.loop = true; - else if (loop !== "") params.loop = parseInt(loop, 10); - params.autoplay = (wrapperAttributes.getNamedItem("data-anim-autoplay") ? wrapperAttributes.getNamedItem("data-anim-autoplay").value : wrapperAttributes.getNamedItem("data-bm-autoplay") ? wrapperAttributes.getNamedItem("data-bm-autoplay").value : wrapperAttributes.getNamedItem("bm-autoplay") ? wrapperAttributes.getNamedItem("bm-autoplay").value : true) !== "false"; - params.name = wrapperAttributes.getNamedItem("data-name") ? wrapperAttributes.getNamedItem("data-name").value : wrapperAttributes.getNamedItem("data-bm-name") ? wrapperAttributes.getNamedItem("data-bm-name").value : wrapperAttributes.getNamedItem("bm-name") ? wrapperAttributes.getNamedItem("bm-name").value : ""; - if ((wrapperAttributes.getNamedItem("data-anim-prerender") ? wrapperAttributes.getNamedItem("data-anim-prerender").value : wrapperAttributes.getNamedItem("data-bm-prerender") ? wrapperAttributes.getNamedItem("data-bm-prerender").value : wrapperAttributes.getNamedItem("bm-prerender") ? wrapperAttributes.getNamedItem("bm-prerender").value : "") === "false") params.prerender = false; - this.setParams(params); - }; - AnimationItem.prototype.includeLayers = function(data) { - if (data.op > this.animationData.op) { - this.animationData.op = data.op; - this.totalFrames = Math.floor(data.op - this.animationData.ip); - } - var layers = this.animationData.layers; - var i; - var len = layers.length; - var newLayers = data.layers; - var j; - var jLen = newLayers.length; - for (j = 0; j < jLen; j += 1) { - i = 0; - while (i < len) { - if (layers[i].id === newLayers[j].id) { - layers[i] = newLayers[j]; - break; - } - i += 1; - } - } - if (data.chars || data.fonts) { - this.renderer.globalData.fontManager.addChars(data.chars); - this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs); - } - if (data.assets) { - len = data.assets.length; - for (i = 0; i < len; i += 1) this.animationData.assets.push(data.assets[i]); - } - this.animationData.__complete = false; - dataManager.completeAnimation(this.animationData, this.onSegmentComplete); - }; - AnimationItem.prototype.onSegmentComplete = function(data) { - this.animationData = data; - var expressionsPlugin2 = getExpressionsPlugin(); - if (expressionsPlugin2) expressionsPlugin2.initExpressions(this); - this.loadNextSegment(); - }; - AnimationItem.prototype.loadNextSegment = function() { - var segments = this.animationData.segments; - if (!segments || segments.length === 0 || !this.autoloadSegments) { - this.trigger("data_ready"); - this.timeCompleted = this.totalFrames; - return; - } - var segment = segments.shift(); - this.timeCompleted = segment.time * this.frameRate; - var segmentPath = this.path + this.fileName + "_" + this.segmentPos + ".json"; - this.segmentPos += 1; - dataManager.loadData(segmentPath, this.includeLayers.bind(this), function() { - this.trigger("data_failed"); - }.bind(this)); - }; - AnimationItem.prototype.loadSegments = function() { - if (!this.animationData.segments) this.timeCompleted = this.totalFrames; - this.loadNextSegment(); - }; - AnimationItem.prototype.imagesLoaded = function() { - this.trigger("loaded_images"); - this.checkLoaded(); - }; - AnimationItem.prototype.preloadImages = function() { - this.imagePreloader.setAssetsPath(this.assetsPath); - this.imagePreloader.setPath(this.path); - this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this)); - }; - AnimationItem.prototype.configAnimation = function(animData) { - if (!this.renderer) return; - try { - this.animationData = animData; - if (this.initialSegment) { - this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]); - this.firstFrame = Math.round(this.initialSegment[0]); - } else { - this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip); - this.firstFrame = Math.round(this.animationData.ip); - } - this.renderer.configAnimation(animData); - if (!animData.assets) animData.assets = []; - this.assets = this.animationData.assets; - this.frameRate = this.animationData.fr; - this.frameMult = this.animationData.fr / 1e3; - this.renderer.searchExtraCompositions(animData.assets); - this.markers = markerParser(animData.markers || []); - this.trigger("config_ready"); - this.preloadImages(); - this.loadSegments(); - this.updaFrameModifier(); - this.waitForFontsLoaded(); - if (this.isPaused) this.audioController.pause(); - } catch (error) { - this.triggerConfigError(error); - } - }; - AnimationItem.prototype.waitForFontsLoaded = function() { - if (!this.renderer) return; - if (this.renderer.globalData.fontManager.isLoaded) this.checkLoaded(); - else setTimeout(this.waitForFontsLoaded.bind(this), 20); - }; - AnimationItem.prototype.checkLoaded = function() { - if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== "canvas") && this.imagePreloader.loadedFootages()) { - this.isLoaded = true; - var expressionsPlugin2 = getExpressionsPlugin(); - if (expressionsPlugin2) expressionsPlugin2.initExpressions(this); - this.renderer.initItems(); - setTimeout(function() { - this.trigger("DOMLoaded"); - }.bind(this), 0); - this.gotoFrame(); - if (this.autoplay) this.play(); - } - }; - AnimationItem.prototype.resize = function() { - this.renderer.updateContainerSize(); - }; - AnimationItem.prototype.setSubframe = function(flag) { - this.isSubframeEnabled = !!flag; - }; - AnimationItem.prototype.gotoFrame = function() { - this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame; - if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) this.currentFrame = this.timeCompleted; - this.trigger("enterFrame"); - this.renderFrame(); - this.trigger("drawnFrame"); - }; - AnimationItem.prototype.renderFrame = function() { - if (this.isLoaded === false || !this.renderer) return; - try { - this.renderer.renderFrame(this.currentFrame + this.firstFrame); - } catch (error) { - this.triggerRenderFrameError(error); - } - }; - AnimationItem.prototype.play = function(name) { - if (name && this.name !== name) return; - if (this.isPaused === true) { - this.isPaused = false; - this.trigger("_pause"); - this.audioController.resume(); - if (this._idle) { - this._idle = false; - this.trigger("_active"); - } - } - }; - AnimationItem.prototype.pause = function(name) { - if (name && this.name !== name) return; - if (this.isPaused === false) { - this.isPaused = true; - this.trigger("_play"); - this._idle = true; - this.trigger("_idle"); - this.audioController.pause(); - } - }; - AnimationItem.prototype.togglePause = function(name) { - if (name && this.name !== name) return; - if (this.isPaused === true) this.play(); - else this.pause(); - }; - AnimationItem.prototype.stop = function(name) { - if (name && this.name !== name) return; - this.pause(); - this.playCount = 0; - this._completedLoop = false; - this.setCurrentRawFrameValue(0); - }; - AnimationItem.prototype.getMarkerData = function(markerName) { - var marker; - for (var i = 0; i < this.markers.length; i += 1) { - marker = this.markers[i]; - if (marker.payload && marker.payload.name === markerName) return marker; - } - return null; - }; - AnimationItem.prototype.goToAndStop = function(value, isFrame, name) { - if (name && this.name !== name) return; - var numValue = Number(value); - if (isNaN(numValue)) { - var marker = this.getMarkerData(value); - if (marker) this.goToAndStop(marker.time, true); - } else if (isFrame) this.setCurrentRawFrameValue(value); - else this.setCurrentRawFrameValue(value * this.frameModifier); - this.pause(); - }; - AnimationItem.prototype.goToAndPlay = function(value, isFrame, name) { - if (name && this.name !== name) return; - var numValue = Number(value); - if (isNaN(numValue)) { - var marker = this.getMarkerData(value); - if (marker) if (!marker.duration) this.goToAndStop(marker.time, true); - else this.playSegments([marker.time, marker.time + marker.duration], true); - } else this.goToAndStop(numValue, isFrame, name); - this.play(); - }; - AnimationItem.prototype.advanceTime = function(value) { - if (this.isPaused === true || this.isLoaded === false) return; - var nextValue = this.currentRawFrame + value * this.frameModifier; - var _isComplete = false; - if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) if (!this.loop || this.playCount === this.loop) { - if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) { - _isComplete = true; - nextValue = this.totalFrames - 1; - } - } else if (nextValue >= this.totalFrames) { - this.playCount += 1; - if (!this.checkSegments(nextValue % this.totalFrames)) { - this.setCurrentRawFrameValue(nextValue % this.totalFrames); - this._completedLoop = true; - this.trigger("loopComplete"); - } - } else this.setCurrentRawFrameValue(nextValue); - else if (nextValue < 0) { - if (!this.checkSegments(nextValue % this.totalFrames)) if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) { - this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames); - if (!this._completedLoop) this._completedLoop = true; - else this.trigger("loopComplete"); - } else { - _isComplete = true; - nextValue = 0; - } - } else this.setCurrentRawFrameValue(nextValue); - if (_isComplete) { - this.setCurrentRawFrameValue(nextValue); - this.pause(); - this.trigger("complete"); - } - }; - AnimationItem.prototype.adjustSegment = function(arr, offset) { - this.playCount = 0; - if (arr[1] < arr[0]) { - if (this.frameModifier > 0) if (this.playSpeed < 0) this.setSpeed(-this.playSpeed); - else this.setDirection(-1); - this.totalFrames = arr[0] - arr[1]; - this.timeCompleted = this.totalFrames; - this.firstFrame = arr[1]; - this.setCurrentRawFrameValue(this.totalFrames - .001 - offset); - } else if (arr[1] > arr[0]) { - if (this.frameModifier < 0) if (this.playSpeed < 0) this.setSpeed(-this.playSpeed); - else this.setDirection(1); - this.totalFrames = arr[1] - arr[0]; - this.timeCompleted = this.totalFrames; - this.firstFrame = arr[0]; - this.setCurrentRawFrameValue(.001 + offset); - } - this.trigger("segmentStart"); - }; - AnimationItem.prototype.setSegment = function(init, end) { - var pendingFrame = -1; - if (this.isPaused) { - if (this.currentRawFrame + this.firstFrame < init) pendingFrame = init; - else if (this.currentRawFrame + this.firstFrame > end) pendingFrame = end - init; - } - this.firstFrame = init; - this.totalFrames = end - init; - this.timeCompleted = this.totalFrames; - if (pendingFrame !== -1) this.goToAndStop(pendingFrame, true); - }; - AnimationItem.prototype.playSegments = function(arr, forceFlag) { - if (forceFlag) this.segments.length = 0; - if (typeof arr[0] === "object") { - var i; - var len = arr.length; - for (i = 0; i < len; i += 1) this.segments.push(arr[i]); - } else this.segments.push(arr); - if (this.segments.length && forceFlag) this.adjustSegment(this.segments.shift(), 0); - if (this.isPaused) this.play(); - }; - AnimationItem.prototype.resetSegments = function(forceFlag) { - this.segments.length = 0; - this.segments.push([this.animationData.ip, this.animationData.op]); - if (forceFlag) this.checkSegments(0); - }; - AnimationItem.prototype.checkSegments = function(offset) { - if (this.segments.length) { - this.adjustSegment(this.segments.shift(), offset); - return true; - } - return false; - }; - AnimationItem.prototype.destroy = function(name) { - if (name && this.name !== name || !this.renderer) return; - this.renderer.destroy(); - this.imagePreloader.destroy(); - this.trigger("destroy"); - this._cbs = null; - this.onEnterFrame = null; - this.onLoopComplete = null; - this.onComplete = null; - this.onSegmentStart = null; - this.onDestroy = null; - this.renderer = null; - this.renderer = null; - this.imagePreloader = null; - this.projectInterface = null; - }; - AnimationItem.prototype.setCurrentRawFrameValue = function(value) { - this.currentRawFrame = value; - this.gotoFrame(); - }; - AnimationItem.prototype.setSpeed = function(val) { - this.playSpeed = val; - this.updaFrameModifier(); - }; - AnimationItem.prototype.setDirection = function(val) { - this.playDirection = val < 0 ? -1 : 1; - this.updaFrameModifier(); - }; - AnimationItem.prototype.setVolume = function(val, name) { - if (name && this.name !== name) return; - this.audioController.setVolume(val); - }; - AnimationItem.prototype.getVolume = function() { - return this.audioController.getVolume(); - }; - AnimationItem.prototype.mute = function(name) { - if (name && this.name !== name) return; - this.audioController.mute(); - }; - AnimationItem.prototype.unmute = function(name) { - if (name && this.name !== name) return; - this.audioController.unmute(); - }; - AnimationItem.prototype.updaFrameModifier = function() { - this.frameModifier = this.frameMult * this.playSpeed * this.playDirection; - this.audioController.setRate(this.playSpeed * this.playDirection); - }; - AnimationItem.prototype.getPath = function() { - return this.path; - }; - AnimationItem.prototype.getAssetsPath = function(assetData) { - var path = ""; - if (assetData.e) path = assetData.p; - else if (this.assetsPath) { - var imagePath = assetData.p; - if (imagePath.indexOf("images/") !== -1) imagePath = imagePath.split("/")[1]; - path = this.assetsPath + imagePath; - } else { - path = this.path; - path += assetData.u ? assetData.u : ""; - path += assetData.p; - } - return path; - }; - AnimationItem.prototype.getAssetData = function(id) { - var i = 0; - var len = this.assets.length; - while (i < len) { - if (id === this.assets[i].id) return this.assets[i]; - i += 1; - } - return null; - }; - AnimationItem.prototype.hide = function() { - this.renderer.hide(); - }; - AnimationItem.prototype.show = function() { - this.renderer.show(); - }; - AnimationItem.prototype.getDuration = function(isFrame) { - return isFrame ? this.totalFrames : this.totalFrames / this.frameRate; - }; - AnimationItem.prototype.updateDocumentData = function(path, documentData, index2) { - try { - this.renderer.getElementByPath(path).updateDocumentData(documentData, index2); - } catch (error) {} - }; - AnimationItem.prototype.trigger = function(name) { - if (this._cbs && this._cbs[name]) switch (name) { - case "enterFrame": - this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier)); - break; - case "drawnFrame": - this.drawnFrameEvent.currentTime = this.currentFrame; - this.drawnFrameEvent.totalTime = this.totalFrames; - this.drawnFrameEvent.direction = this.frameModifier; - this.triggerEvent(name, this.drawnFrameEvent); - break; - case "loopComplete": - this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult)); - break; - case "complete": - this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult)); - break; - case "segmentStart": - this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames)); - break; - case "destroy": - this.triggerEvent(name, new BMDestroyEvent(name, this)); - break; - default: this.triggerEvent(name); - } - if (name === "enterFrame" && this.onEnterFrame) this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult)); - if (name === "loopComplete" && this.onLoopComplete) this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult)); - if (name === "complete" && this.onComplete) this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult)); - if (name === "segmentStart" && this.onSegmentStart) this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames)); - if (name === "destroy" && this.onDestroy) this.onDestroy.call(this, new BMDestroyEvent(name, this)); - }; - AnimationItem.prototype.triggerRenderFrameError = function(nativeError) { - var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame); - this.triggerEvent("error", error); - if (this.onError) this.onError.call(this, error); - }; - AnimationItem.prototype.triggerConfigError = function(nativeError) { - var error = new BMConfigErrorEvent(nativeError, this.currentFrame); - this.triggerEvent("error", error); - if (this.onError) this.onError.call(this, error); - }; - const animationManager = function() { - var moduleOb = {}; - var registeredAnimations = []; - var initTime = 0; - var len = 0; - var playingAnimationsNum = 0; - var _stopped = true; - var _isFrozen = false; - function removeElement(ev) { - var i = 0; - var animItem = ev.target; - while (i < len) { - if (registeredAnimations[i].animation === animItem) { - registeredAnimations.splice(i, 1); - i -= 1; - len -= 1; - if (!animItem.isPaused) subtractPlayingCount(); - } - i += 1; - } - } - function registerAnimation(element, animationData) { - if (!element) return null; - var i = 0; - while (i < len) { - if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) return registeredAnimations[i].animation; - i += 1; - } - var animItem = new AnimationItem(); - setupAnimation(animItem, element); - animItem.setData(element, animationData); - return animItem; - } - function getRegisteredAnimations() { - var i; - var lenAnims = registeredAnimations.length; - var animations = []; - for (i = 0; i < lenAnims; i += 1) animations.push(registeredAnimations[i].animation); - return animations; - } - function addPlayingCount() { - playingAnimationsNum += 1; - activate(); - } - function subtractPlayingCount() { - playingAnimationsNum -= 1; - } - function setupAnimation(animItem, element) { - animItem.addEventListener("destroy", removeElement); - animItem.addEventListener("_active", addPlayingCount); - animItem.addEventListener("_idle", subtractPlayingCount); - registeredAnimations.push({ - elem: element, - animation: animItem - }); - len += 1; - } - function loadAnimation2(params) { - var animItem = new AnimationItem(); - setupAnimation(animItem, null); - animItem.setParams(params); - return animItem; - } - function setSpeed(val, animation) { - var i; - for (i = 0; i < len; i += 1) registeredAnimations[i].animation.setSpeed(val, animation); - } - function setDirection(val, animation) { - var i; - for (i = 0; i < len; i += 1) registeredAnimations[i].animation.setDirection(val, animation); - } - function play(animation) { - var i; - for (i = 0; i < len; i += 1) registeredAnimations[i].animation.play(animation); - } - function resume(nowTime) { - var elapsedTime = nowTime - initTime; - var i; - for (i = 0; i < len; i += 1) registeredAnimations[i].animation.advanceTime(elapsedTime); - initTime = nowTime; - if (playingAnimationsNum && !_isFrozen) window.requestAnimationFrame(resume); - else _stopped = true; - } - function first(nowTime) { - initTime = nowTime; - window.requestAnimationFrame(resume); - } - function pause(animation) { - var i; - for (i = 0; i < len; i += 1) registeredAnimations[i].animation.pause(animation); - } - function goToAndStop(value, isFrame, animation) { - var i; - for (i = 0; i < len; i += 1) registeredAnimations[i].animation.goToAndStop(value, isFrame, animation); - } - function stop(animation) { - var i; - for (i = 0; i < len; i += 1) registeredAnimations[i].animation.stop(animation); - } - function togglePause(animation) { - var i; - for (i = 0; i < len; i += 1) registeredAnimations[i].animation.togglePause(animation); - } - function destroy(animation) { - var i; - for (i = len - 1; i >= 0; i -= 1) registeredAnimations[i].animation.destroy(animation); - } - function searchAnimations2(animationData, standalone, renderer) { - var animElements = [].concat([].slice.call(document.getElementsByClassName("lottie")), [].slice.call(document.getElementsByClassName("bodymovin"))); - var i; - var lenAnims = animElements.length; - for (i = 0; i < lenAnims; i += 1) { - if (renderer) animElements[i].setAttribute("data-bm-type", renderer); - registerAnimation(animElements[i], animationData); - } - if (standalone && lenAnims === 0) { - if (!renderer) renderer = "svg"; - var body = document.getElementsByTagName("body")[0]; - body.innerText = ""; - var div = createTag("div"); - div.style.width = "100%"; - div.style.height = "100%"; - div.setAttribute("data-bm-type", renderer); - body.appendChild(div); - registerAnimation(div, animationData); - } - } - function resize() { - var i; - for (i = 0; i < len; i += 1) registeredAnimations[i].animation.resize(); - } - function activate() { - if (!_isFrozen && playingAnimationsNum) { - if (_stopped) { - window.requestAnimationFrame(first); - _stopped = false; - } - } - } - function freeze() { - _isFrozen = true; - } - function unfreeze() { - _isFrozen = false; - activate(); - } - function setVolume(val, animation) { - var i; - for (i = 0; i < len; i += 1) registeredAnimations[i].animation.setVolume(val, animation); - } - function mute(animation) { - var i; - for (i = 0; i < len; i += 1) registeredAnimations[i].animation.mute(animation); - } - function unmute(animation) { - var i; - for (i = 0; i < len; i += 1) registeredAnimations[i].animation.unmute(animation); - } - moduleOb.registerAnimation = registerAnimation; - moduleOb.loadAnimation = loadAnimation2; - moduleOb.setSpeed = setSpeed; - moduleOb.setDirection = setDirection; - moduleOb.play = play; - moduleOb.pause = pause; - moduleOb.stop = stop; - moduleOb.togglePause = togglePause; - moduleOb.searchAnimations = searchAnimations2; - moduleOb.resize = resize; - moduleOb.goToAndStop = goToAndStop; - moduleOb.destroy = destroy; - moduleOb.freeze = freeze; - moduleOb.unfreeze = unfreeze; - moduleOb.setVolume = setVolume; - moduleOb.mute = mute; - moduleOb.unmute = unmute; - moduleOb.getRegisteredAnimations = getRegisteredAnimations; - return moduleOb; - }(); - const BezierFactory = function() { - var ob = {}; - ob.getBezierEasing = getBezierEasing; - var beziers = {}; - function getBezierEasing(a, b, c, d, nm) { - var str = nm || ("bez_" + a + "_" + b + "_" + c + "_" + d).replace(/\./g, "p"); - if (beziers[str]) return beziers[str]; - var bezEasing = new BezierEasing([ - a, - b, - c, - d - ]); - beziers[str] = bezEasing; - return bezEasing; - } - var NEWTON_ITERATIONS = 4; - var NEWTON_MIN_SLOPE = .001; - var SUBDIVISION_PRECISION = 1e-7; - var SUBDIVISION_MAX_ITERATIONS = 10; - var kSplineTableSize = 11; - var kSampleStepSize = 1 / (kSplineTableSize - 1); - var float32ArraySupported = typeof Float32Array === "function"; - function A(aA1, aA2) { - return 1 - 3 * aA2 + 3 * aA1; - } - function B(aA1, aA2) { - return 3 * aA2 - 6 * aA1; - } - function C(aA1) { - return 3 * aA1; - } - function calcBezier(aT, aA1, aA2) { - return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; - } - function getSlope(aT, aA1, aA2) { - return 3 * A(aA1, aA2) * aT * aT + 2 * B(aA1, aA2) * aT + C(aA1); - } - function binarySubdivide(aX, aA, aB, mX1, mX2) { - var currentX, currentT, i = 0; - do { - currentT = aA + (aB - aA) / 2; - currentX = calcBezier(currentT, mX1, mX2) - aX; - if (currentX > 0) aB = currentT; - else aA = currentT; - } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS); - return currentT; - } - function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) { - for (var i = 0; i < NEWTON_ITERATIONS; ++i) { - var currentSlope = getSlope(aGuessT, mX1, mX2); - if (currentSlope === 0) return aGuessT; - var currentX = calcBezier(aGuessT, mX1, mX2) - aX; - aGuessT -= currentX / currentSlope; - } - return aGuessT; - } - function BezierEasing(points) { - this._p = points; - this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize); - this._precomputed = false; - this.get = this.get.bind(this); - } - BezierEasing.prototype = { - get: function(x) { - var mX1 = this._p[0], mY1 = this._p[1], mX2 = this._p[2], mY2 = this._p[3]; - if (!this._precomputed) this._precompute(); - if (mX1 === mY1 && mX2 === mY2) return x; - if (x === 0) return 0; - if (x === 1) return 1; - return calcBezier(this._getTForX(x), mY1, mY2); - }, - _precompute: function() { - var mX1 = this._p[0], mY1 = this._p[1], mX2 = this._p[2], mY2 = this._p[3]; - this._precomputed = true; - if (mX1 !== mY1 || mX2 !== mY2) this._calcSampleValues(); - }, - _calcSampleValues: function() { - var mX1 = this._p[0], mX2 = this._p[2]; - for (var i = 0; i < kSplineTableSize; ++i) this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2); - }, - /** - * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection. - */ - _getTForX: function(aX) { - var mX1 = this._p[0], mX2 = this._p[2], mSampleValues = this._mSampleValues; - var intervalStart = 0; - var currentSample = 1; - var lastSample = kSplineTableSize - 1; - for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) intervalStart += kSampleStepSize; - --currentSample; - var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]); - var guessForT = intervalStart + dist * kSampleStepSize; - var initialSlope = getSlope(guessForT, mX1, mX2); - if (initialSlope >= NEWTON_MIN_SLOPE) return newtonRaphsonIterate(aX, guessForT, mX1, mX2); - if (initialSlope === 0) return guessForT; - return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2); - } - }; - return ob; - }(); - const pooling = function() { - function double(arr) { - return arr.concat(createSizedArray(arr.length)); - } - return { double }; - }(); - const poolFactory = function() { - return function(initialLength, _create, _release) { - var _length = 0; - var _maxLength = initialLength; - var pool = createSizedArray(_maxLength); - var ob = { - newElement, - release - }; - function newElement() { - var element; - if (_length) { - _length -= 1; - element = pool[_length]; - } else element = _create(); - return element; - } - function release(element) { - if (_length === _maxLength) { - pool = pooling.double(pool); - _maxLength *= 2; - } - if (_release) _release(element); - pool[_length] = element; - _length += 1; - } - return ob; - }; - }(); - const bezierLengthPool = function() { - function create() { - return { - addedLength: 0, - percents: createTypedArray("float32", getDefaultCurveSegments()), - lengths: createTypedArray("float32", getDefaultCurveSegments()) - }; - } - return poolFactory(8, create); - }(); - const segmentsLengthPool = function() { - function create() { - return { - lengths: [], - totalLength: 0 - }; - } - function release(element) { - var i; - var len = element.lengths.length; - for (i = 0; i < len; i += 1) bezierLengthPool.release(element.lengths[i]); - element.lengths.length = 0; - } - return poolFactory(8, create, release); - }(); - function bezFunction() { - var math = Math; - function pointOnLine2D(x1, y1, x2, y2, x3, y3) { - var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1; - return det1 > -.001 && det1 < .001; - } - function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) { - if (z1 === 0 && z2 === 0 && z3 === 0) return pointOnLine2D(x1, y1, x2, y2, x3, y3); - var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2)); - var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2)); - var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2)); - var diffDist; - if (dist1 > dist2) if (dist1 > dist3) diffDist = dist1 - dist2 - dist3; - else diffDist = dist3 - dist2 - dist1; - else if (dist3 > dist2) diffDist = dist3 - dist2 - dist1; - else diffDist = dist2 - dist1 - dist3; - return diffDist > -1e-4 && diffDist < 1e-4; - } - var getBezierLength = function() { - return function(pt1, pt2, pt3, pt4) { - var curveSegments = getDefaultCurveSegments(); - var k; - var i; - var len; - var ptCoord; - var perc; - var addedLength = 0; - var ptDistance; - var point = []; - var lastPoint = []; - var lengthData = bezierLengthPool.newElement(); - len = pt3.length; - for (k = 0; k < curveSegments; k += 1) { - perc = k / (curveSegments - 1); - ptDistance = 0; - for (i = 0; i < len; i += 1) { - ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i]; - point[i] = ptCoord; - if (lastPoint[i] !== null) ptDistance += bmPow(point[i] - lastPoint[i], 2); - lastPoint[i] = point[i]; - } - if (ptDistance) { - ptDistance = bmSqrt(ptDistance); - addedLength += ptDistance; - } - lengthData.percents[k] = perc; - lengthData.lengths[k] = addedLength; - } - lengthData.addedLength = addedLength; - return lengthData; - }; - }(); - function getSegmentsLength(shapeData) { - var segmentsLength = segmentsLengthPool.newElement(); - var closed = shapeData.c; - var pathV = shapeData.v; - var pathO = shapeData.o; - var pathI = shapeData.i; - var i; - var len = shapeData._length; - var lengths = segmentsLength.lengths; - var totalLength = 0; - for (i = 0; i < len - 1; i += 1) { - lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]); - totalLength += lengths[i].addedLength; - } - if (closed && len) { - lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]); - totalLength += lengths[i].addedLength; - } - segmentsLength.totalLength = totalLength; - return segmentsLength; - } - function BezierData(length) { - this.segmentLength = 0; - this.points = new Array(length); - } - function PointData(partial, point) { - this.partialLength = partial; - this.point = point; - } - var buildBezierData = function() { - var storedData = {}; - return function(pt1, pt2, pt3, pt4) { - var bezierName = (pt1[0] + "_" + pt1[1] + "_" + pt2[0] + "_" + pt2[1] + "_" + pt3[0] + "_" + pt3[1] + "_" + pt4[0] + "_" + pt4[1]).replace(/\./g, "p"); - if (!storedData[bezierName]) { - var curveSegments = getDefaultCurveSegments(); - var k; - var i; - var len; - var ptCoord; - var perc; - var addedLength = 0; - var ptDistance; - var point; - var lastPoint = null; - if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) curveSegments = 2; - var bezierData = new BezierData(curveSegments); - len = pt3.length; - for (k = 0; k < curveSegments; k += 1) { - point = createSizedArray(len); - perc = k / (curveSegments - 1); - ptDistance = 0; - for (i = 0; i < len; i += 1) { - ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i]; - point[i] = ptCoord; - if (lastPoint !== null) ptDistance += bmPow(point[i] - lastPoint[i], 2); - } - ptDistance = bmSqrt(ptDistance); - addedLength += ptDistance; - bezierData.points[k] = new PointData(ptDistance, point); - lastPoint = point; - } - bezierData.segmentLength = addedLength; - storedData[bezierName] = bezierData; - } - return storedData[bezierName]; - }; - }(); - function getDistancePerc(perc, bezierData) { - var percents = bezierData.percents; - var lengths = bezierData.lengths; - var len = percents.length; - var initPos = bmFloor((len - 1) * perc); - var lengthPos = perc * bezierData.addedLength; - var lPerc = 0; - if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) return percents[initPos]; - var dir = lengths[initPos] > lengthPos ? -1 : 1; - var flag = true; - while (flag) { - if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) { - lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]); - flag = false; - } else initPos += dir; - if (initPos < 0 || initPos >= len - 1) { - if (initPos === len - 1) return percents[initPos]; - flag = false; - } - } - return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc; - } - function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) { - var t1 = getDistancePerc(percent, bezierData); - var u1 = 1 - t1; - return [math.round((u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1e3) / 1e3, math.round((u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1e3) / 1e3]; - } - var bezierSegmentPoints = createTypedArray("float32", 8); - function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) { - if (startPerc < 0) startPerc = 0; - else if (startPerc > 1) startPerc = 1; - var t0 = getDistancePerc(startPerc, bezierData); - endPerc = endPerc > 1 ? 1 : endPerc; - var t1 = getDistancePerc(endPerc, bezierData); - var i; - var len = pt1.length; - var u0 = 1 - t0; - var u1 = 1 - t1; - var u0u0u0 = u0 * u0 * u0; - var t0u0u0_3 = t0 * u0 * u0 * 3; - var t0t0u0_3 = t0 * t0 * u0 * 3; - var t0t0t0 = t0 * t0 * t0; - var u0u0u1 = u0 * u0 * u1; - var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1; - var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1; - var t0t0t1 = t0 * t0 * t1; - var u0u1u1 = u0 * u1 * u1; - var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1; - var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1; - var t0t1t1 = t0 * t1 * t1; - var u1u1u1 = u1 * u1 * u1; - var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1; - var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1; - var t1t1t1 = t1 * t1 * t1; - for (i = 0; i < len; i += 1) { - bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1e3) / 1e3; - bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1e3) / 1e3; - bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1e3) / 1e3; - bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1e3) / 1e3; - } - return bezierSegmentPoints; - } - return { - getSegmentsLength, - getNewSegment, - getPointInSegment, - buildBezierData, - pointOnLine2D, - pointOnLine3D - }; - } - const bez = bezFunction(); - const PropertyFactory = function() { - var initFrame = initialDefaultFrame; - var mathAbs = Math.abs; - function interpolateValue(frameNum, caching) { - var offsetTime = this.offsetTime; - var newValue; - if (this.propType === "multidimensional") newValue = createTypedArray("float32", this.pv.length); - var iterationIndex = caching.lastIndex; - var i = iterationIndex; - var len = this.keyframes.length - 1; - var flag = true; - var keyData; - var nextKeyData; - var keyframeMetadata; - while (flag) { - keyData = this.keyframes[i]; - nextKeyData = this.keyframes[i + 1]; - if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) { - if (keyData.h) keyData = nextKeyData; - iterationIndex = 0; - break; - } - if (nextKeyData.t - offsetTime > frameNum) { - iterationIndex = i; - break; - } - if (i < len - 1) i += 1; - else { - iterationIndex = 0; - flag = false; - } - } - keyframeMetadata = this.keyframesMetadata[i] || {}; - var k; - var kLen; - var perc; - var jLen; - var j; - var fnc; - var nextKeyTime = nextKeyData.t - offsetTime; - var keyTime = keyData.t - offsetTime; - var endValue; - if (keyData.to) { - if (!keyframeMetadata.bezierData) keyframeMetadata.bezierData = bez.buildBezierData(keyData.s, nextKeyData.s || keyData.e, keyData.to, keyData.ti); - var bezierData = keyframeMetadata.bezierData; - if (frameNum >= nextKeyTime || frameNum < keyTime) { - var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0; - kLen = bezierData.points[ind].point.length; - for (k = 0; k < kLen; k += 1) newValue[k] = bezierData.points[ind].point[k]; - } else { - if (keyframeMetadata.__fnct) fnc = keyframeMetadata.__fnct; - else { - fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get; - keyframeMetadata.__fnct = fnc; - } - perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime)); - var distanceInLine = bezierData.segmentLength * perc; - var segmentPerc; - var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0; - j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0; - flag = true; - jLen = bezierData.points.length; - while (flag) { - addedLength += bezierData.points[j].partialLength; - if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) { - kLen = bezierData.points[j].point.length; - for (k = 0; k < kLen; k += 1) newValue[k] = bezierData.points[j].point[k]; - break; - } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) { - segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength; - kLen = bezierData.points[j].point.length; - for (k = 0; k < kLen; k += 1) newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc; - break; - } - if (j < jLen - 1) j += 1; - else flag = false; - } - caching._lastPoint = j; - caching._lastAddedLength = addedLength - bezierData.points[j].partialLength; - caching._lastKeyframeIndex = i; - } - } else { - var outX; - var outY; - var inX; - var inY; - var keyValue; - len = keyData.s.length; - endValue = nextKeyData.s || keyData.e; - if (this.sh && keyData.h !== 1) if (frameNum >= nextKeyTime) { - newValue[0] = endValue[0]; - newValue[1] = endValue[1]; - newValue[2] = endValue[2]; - } else if (frameNum <= keyTime) { - newValue[0] = keyData.s[0]; - newValue[1] = keyData.s[1]; - newValue[2] = keyData.s[2]; - } else { - var quatStart = createQuaternion(keyData.s); - var quatEnd = createQuaternion(endValue); - var time = (frameNum - keyTime) / (nextKeyTime - keyTime); - quaternionToEuler(newValue, slerp(quatStart, quatEnd, time)); - } - else for (i = 0; i < len; i += 1) { - if (keyData.h !== 1) if (frameNum >= nextKeyTime) perc = 1; - else if (frameNum < keyTime) perc = 0; - else { - if (keyData.o.x.constructor === Array) { - if (!keyframeMetadata.__fnct) keyframeMetadata.__fnct = []; - if (!keyframeMetadata.__fnct[i]) { - outX = keyData.o.x[i] === void 0 ? keyData.o.x[0] : keyData.o.x[i]; - outY = keyData.o.y[i] === void 0 ? keyData.o.y[0] : keyData.o.y[i]; - inX = keyData.i.x[i] === void 0 ? keyData.i.x[0] : keyData.i.x[i]; - inY = keyData.i.y[i] === void 0 ? keyData.i.y[0] : keyData.i.y[i]; - fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get; - keyframeMetadata.__fnct[i] = fnc; - } else fnc = keyframeMetadata.__fnct[i]; - } else if (!keyframeMetadata.__fnct) { - outX = keyData.o.x; - outY = keyData.o.y; - inX = keyData.i.x; - inY = keyData.i.y; - fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get; - keyData.keyframeMetadata = fnc; - } else fnc = keyframeMetadata.__fnct; - perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime)); - } - endValue = nextKeyData.s || keyData.e; - keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc; - if (this.propType === "multidimensional") newValue[i] = keyValue; - else newValue = keyValue; - } - } - caching.lastIndex = iterationIndex; - return newValue; - } - function slerp(a, b, t) { - var out = []; - var ax = a[0]; - var ay = a[1]; - var az = a[2]; - var aw = a[3]; - var bx = b[0]; - var by = b[1]; - var bz = b[2]; - var bw = b[3]; - var omega; - var cosom; - var sinom; - var scale0; - var scale1; - cosom = ax * bx + ay * by + az * bz + aw * bw; - if (cosom < 0) { - cosom = -cosom; - bx = -bx; - by = -by; - bz = -bz; - bw = -bw; - } - if (1 - cosom > 1e-6) { - omega = Math.acos(cosom); - sinom = Math.sin(omega); - scale0 = Math.sin((1 - t) * omega) / sinom; - scale1 = Math.sin(t * omega) / sinom; - } else { - scale0 = 1 - t; - scale1 = t; - } - out[0] = scale0 * ax + scale1 * bx; - out[1] = scale0 * ay + scale1 * by; - out[2] = scale0 * az + scale1 * bz; - out[3] = scale0 * aw + scale1 * bw; - return out; - } - function quaternionToEuler(out, quat) { - var qx = quat[0]; - var qy = quat[1]; - var qz = quat[2]; - var qw = quat[3]; - var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz); - var attitude = Math.asin(2 * qx * qy + 2 * qz * qw); - var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz); - out[0] = heading / degToRads; - out[1] = attitude / degToRads; - out[2] = bank / degToRads; - } - function createQuaternion(values) { - var heading = values[0] * degToRads; - var attitude = values[1] * degToRads; - var bank = values[2] * degToRads; - var c1 = Math.cos(heading / 2); - var c2 = Math.cos(attitude / 2); - var c3 = Math.cos(bank / 2); - var s1 = Math.sin(heading / 2); - var s2 = Math.sin(attitude / 2); - var s3 = Math.sin(bank / 2); - var w = c1 * c2 * c3 - s1 * s2 * s3; - return [ - s1 * s2 * c3 + c1 * c2 * s3, - s1 * c2 * c3 + c1 * s2 * s3, - c1 * s2 * c3 - s1 * c2 * s3, - w - ]; - } - function getValueAtCurrentTime() { - var frameNum = this.comp.renderedFrame - this.offsetTime; - var initTime = this.keyframes[0].t - this.offsetTime; - var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime; - if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) { - if (this._caching.lastFrame >= frameNum) { - this._caching._lastKeyframeIndex = -1; - this._caching.lastIndex = 0; - } - var renderResult = this.interpolateValue(frameNum, this._caching); - this.pv = renderResult; - } - this._caching.lastFrame = frameNum; - return this.pv; - } - function setVValue(val) { - var multipliedValue; - if (this.propType === "unidimensional") { - multipliedValue = val * this.mult; - if (mathAbs(this.v - multipliedValue) > 1e-5) { - this.v = multipliedValue; - this._mdf = true; - } - } else { - var i = 0; - var len = this.v.length; - while (i < len) { - multipliedValue = val[i] * this.mult; - if (mathAbs(this.v[i] - multipliedValue) > 1e-5) { - this.v[i] = multipliedValue; - this._mdf = true; - } - i += 1; - } - } - } - function processEffectsSequence() { - if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) return; - if (this.lock) { - this.setVValue(this.pv); - return; - } - this.lock = true; - this._mdf = this._isFirstFrame; - var i; - var len = this.effectsSequence.length; - var finalValue = this.kf ? this.pv : this.data.k; - for (i = 0; i < len; i += 1) finalValue = this.effectsSequence[i](finalValue); - this.setVValue(finalValue); - this._isFirstFrame = false; - this.lock = false; - this.frameId = this.elem.globalData.frameId; - } - function addEffect(effectFunction) { - this.effectsSequence.push(effectFunction); - this.container.addDynamicProperty(this); - } - function ValueProperty(elem, data, mult, container) { - this.propType = "unidimensional"; - this.mult = mult || 1; - this.data = data; - this.v = mult ? data.k * mult : data.k; - this.pv = data.k; - this._mdf = false; - this.elem = elem; - this.container = container; - this.comp = elem.comp; - this.k = false; - this.kf = false; - this.vel = 0; - this.effectsSequence = []; - this._isFirstFrame = true; - this.getValue = processEffectsSequence; - this.setVValue = setVValue; - this.addEffect = addEffect; - } - function MultiDimensionalProperty(elem, data, mult, container) { - this.propType = "multidimensional"; - this.mult = mult || 1; - this.data = data; - this._mdf = false; - this.elem = elem; - this.container = container; - this.comp = elem.comp; - this.k = false; - this.kf = false; - this.frameId = -1; - var i; - var len = data.k.length; - this.v = createTypedArray("float32", len); - this.pv = createTypedArray("float32", len); - this.vel = createTypedArray("float32", len); - for (i = 0; i < len; i += 1) { - this.v[i] = data.k[i] * this.mult; - this.pv[i] = data.k[i]; - } - this._isFirstFrame = true; - this.effectsSequence = []; - this.getValue = processEffectsSequence; - this.setVValue = setVValue; - this.addEffect = addEffect; - } - function KeyframedValueProperty(elem, data, mult, container) { - this.propType = "unidimensional"; - this.keyframes = data.k; - this.keyframesMetadata = []; - this.offsetTime = elem.data.st; - this.frameId = -1; - this._caching = { - lastFrame: initFrame, - lastIndex: 0, - value: 0, - _lastKeyframeIndex: -1 - }; - this.k = true; - this.kf = true; - this.data = data; - this.mult = mult || 1; - this.elem = elem; - this.container = container; - this.comp = elem.comp; - this.v = initFrame; - this.pv = initFrame; - this._isFirstFrame = true; - this.getValue = processEffectsSequence; - this.setVValue = setVValue; - this.interpolateValue = interpolateValue; - this.effectsSequence = [getValueAtCurrentTime.bind(this)]; - this.addEffect = addEffect; - } - function KeyframedMultidimensionalProperty(elem, data, mult, container) { - this.propType = "multidimensional"; - var i; - var len = data.k.length; - var s; - var e; - var to; - var ti; - for (i = 0; i < len - 1; i += 1) if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) { - s = data.k[i].s; - e = data.k[i + 1].s; - to = data.k[i].to; - ti = data.k[i].ti; - if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) { - data.k[i].to = null; - data.k[i].ti = null; - } - if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) { - if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) { - data.k[i].to = null; - data.k[i].ti = null; - } - } - } - this.effectsSequence = [getValueAtCurrentTime.bind(this)]; - this.data = data; - this.keyframes = data.k; - this.keyframesMetadata = []; - this.offsetTime = elem.data.st; - this.k = true; - this.kf = true; - this._isFirstFrame = true; - this.mult = mult || 1; - this.elem = elem; - this.container = container; - this.comp = elem.comp; - this.getValue = processEffectsSequence; - this.setVValue = setVValue; - this.interpolateValue = interpolateValue; - this.frameId = -1; - var arrLen = data.k[0].s.length; - this.v = createTypedArray("float32", arrLen); - this.pv = createTypedArray("float32", arrLen); - for (i = 0; i < arrLen; i += 1) { - this.v[i] = initFrame; - this.pv[i] = initFrame; - } - this._caching = { - lastFrame: initFrame, - lastIndex: 0, - value: createTypedArray("float32", arrLen) - }; - this.addEffect = addEffect; - } - function getProp(elem, data, type, mult, container) { - var p; - if (!data.k.length) p = new ValueProperty(elem, data, mult, container); - else if (typeof data.k[0] === "number") p = new MultiDimensionalProperty(elem, data, mult, container); - else switch (type) { - case 0: - p = new KeyframedValueProperty(elem, data, mult, container); - break; - case 1: - p = new KeyframedMultidimensionalProperty(elem, data, mult, container); - break; - } - if (p.effectsSequence.length) container.addDynamicProperty(p); - return p; - } - return { getProp }; - }(); - function DynamicPropertyContainer() {} - DynamicPropertyContainer.prototype = { - addDynamicProperty: function(prop) { - if (this.dynamicProperties.indexOf(prop) === -1) { - this.dynamicProperties.push(prop); - this.container.addDynamicProperty(this); - this._isAnimated = true; - } - }, - iterateDynamicProperties: function() { - this._mdf = false; - var i; - var len = this.dynamicProperties.length; - for (i = 0; i < len; i += 1) { - this.dynamicProperties[i].getValue(); - if (this.dynamicProperties[i]._mdf) this._mdf = true; - } - }, - initDynamicPropertyContainer: function(container) { - this.container = container; - this.dynamicProperties = []; - this._mdf = false; - this._isAnimated = false; - } - }; - const pointPool = function() { - function create() { - return createTypedArray("float32", 2); - } - return poolFactory(8, create); - }(); - function ShapePath() { - this.c = false; - this._length = 0; - this._maxLength = 8; - this.v = createSizedArray(this._maxLength); - this.o = createSizedArray(this._maxLength); - this.i = createSizedArray(this._maxLength); - } - ShapePath.prototype.setPathData = function(closed, len) { - this.c = closed; - this.setLength(len); - var i = 0; - while (i < len) { - this.v[i] = pointPool.newElement(); - this.o[i] = pointPool.newElement(); - this.i[i] = pointPool.newElement(); - i += 1; - } - }; - ShapePath.prototype.setLength = function(len) { - while (this._maxLength < len) this.doubleArrayLength(); - this._length = len; - }; - ShapePath.prototype.doubleArrayLength = function() { - this.v = this.v.concat(createSizedArray(this._maxLength)); - this.i = this.i.concat(createSizedArray(this._maxLength)); - this.o = this.o.concat(createSizedArray(this._maxLength)); - this._maxLength *= 2; - }; - ShapePath.prototype.setXYAt = function(x, y, type, pos, replace) { - var arr; - this._length = Math.max(this._length, pos + 1); - if (this._length >= this._maxLength) this.doubleArrayLength(); - switch (type) { - case "v": - arr = this.v; - break; - case "i": - arr = this.i; - break; - case "o": - arr = this.o; - break; - default: - arr = []; - break; - } - if (!arr[pos] || arr[pos] && !replace) arr[pos] = pointPool.newElement(); - arr[pos][0] = x; - arr[pos][1] = y; - }; - ShapePath.prototype.setTripleAt = function(vX, vY, oX, oY, iX, iY, pos, replace) { - this.setXYAt(vX, vY, "v", pos, replace); - this.setXYAt(oX, oY, "o", pos, replace); - this.setXYAt(iX, iY, "i", pos, replace); - }; - ShapePath.prototype.reverse = function() { - var newPath = new ShapePath(); - newPath.setPathData(this.c, this._length); - var vertices = this.v; - var outPoints = this.o; - var inPoints = this.i; - var init = 0; - if (this.c) { - newPath.setTripleAt(vertices[0][0], vertices[0][1], inPoints[0][0], inPoints[0][1], outPoints[0][0], outPoints[0][1], 0, false); - init = 1; - } - var cnt = this._length - 1; - var len = this._length; - var i; - for (i = init; i < len; i += 1) { - newPath.setTripleAt(vertices[cnt][0], vertices[cnt][1], inPoints[cnt][0], inPoints[cnt][1], outPoints[cnt][0], outPoints[cnt][1], i, false); - cnt -= 1; - } - return newPath; - }; - const shapePool = function() { - function create() { - return new ShapePath(); - } - function release(shapePath) { - var len = shapePath._length; - var i; - for (i = 0; i < len; i += 1) { - pointPool.release(shapePath.v[i]); - pointPool.release(shapePath.i[i]); - pointPool.release(shapePath.o[i]); - shapePath.v[i] = null; - shapePath.i[i] = null; - shapePath.o[i] = null; - } - shapePath._length = 0; - shapePath.c = false; - } - function clone(shape) { - var cloned = factory.newElement(); - var i; - var len = shape._length === void 0 ? shape.v.length : shape._length; - cloned.setLength(len); - cloned.c = shape.c; - for (i = 0; i < len; i += 1) cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i); - return cloned; - } - var factory = poolFactory(4, create, release); - factory.clone = clone; - return factory; - }(); - function ShapeCollection() { - this._length = 0; - this._maxLength = 4; - this.shapes = createSizedArray(this._maxLength); - } - ShapeCollection.prototype.addShape = function(shapeData) { - if (this._length === this._maxLength) { - this.shapes = this.shapes.concat(createSizedArray(this._maxLength)); - this._maxLength *= 2; - } - this.shapes[this._length] = shapeData; - this._length += 1; - }; - ShapeCollection.prototype.releaseShapes = function() { - var i; - for (i = 0; i < this._length; i += 1) shapePool.release(this.shapes[i]); - this._length = 0; - }; - const shapeCollectionPool = function() { - var ob = { - newShapeCollection, - release - }; - var _length = 0; - var _maxLength = 4; - var pool = createSizedArray(_maxLength); - function newShapeCollection() { - var shapeCollection; - if (_length) { - _length -= 1; - shapeCollection = pool[_length]; - } else shapeCollection = new ShapeCollection(); - return shapeCollection; - } - function release(shapeCollection) { - var i; - var len = shapeCollection._length; - for (i = 0; i < len; i += 1) shapePool.release(shapeCollection.shapes[i]); - shapeCollection._length = 0; - if (_length === _maxLength) { - pool = pooling.double(pool); - _maxLength *= 2; - } - pool[_length] = shapeCollection; - _length += 1; - } - return ob; - }(); - const ShapePropertyFactory = function() { - var initFrame = -999999; - function interpolateShape(frameNum, previousValue, caching) { - var iterationIndex = caching.lastIndex; - var keyPropS; - var keyPropE; - var isHold; - var j; - var k; - var jLen; - var kLen; - var perc; - var vertexValue; - var kf = this.keyframes; - if (frameNum < kf[0].t - this.offsetTime) { - keyPropS = kf[0].s[0]; - isHold = true; - iterationIndex = 0; - } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) { - keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0]; - isHold = true; - } else { - var i = iterationIndex; - var len = kf.length - 1; - var flag = true; - var keyData; - var nextKeyData; - var keyframeMetadata; - while (flag) { - keyData = kf[i]; - nextKeyData = kf[i + 1]; - if (nextKeyData.t - this.offsetTime > frameNum) break; - if (i < len - 1) i += 1; - else flag = false; - } - keyframeMetadata = this.keyframesMetadata[i] || {}; - isHold = keyData.h === 1; - iterationIndex = i; - if (!isHold) { - if (frameNum >= nextKeyData.t - this.offsetTime) perc = 1; - else if (frameNum < keyData.t - this.offsetTime) perc = 0; - else { - var fnc; - if (keyframeMetadata.__fnct) fnc = keyframeMetadata.__fnct; - else { - fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get; - keyframeMetadata.__fnct = fnc; - } - perc = fnc((frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime))); - } - keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0]; - } - keyPropS = keyData.s[0]; - } - jLen = previousValue._length; - kLen = keyPropS.i[0].length; - caching.lastIndex = iterationIndex; - for (j = 0; j < jLen; j += 1) for (k = 0; k < kLen; k += 1) { - vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc; - previousValue.i[j][k] = vertexValue; - vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc; - previousValue.o[j][k] = vertexValue; - vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc; - previousValue.v[j][k] = vertexValue; - } - } - function interpolateShapeCurrentTime() { - var frameNum = this.comp.renderedFrame - this.offsetTime; - var initTime = this.keyframes[0].t - this.offsetTime; - var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime; - var lastFrame = this._caching.lastFrame; - if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) { - this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0; - this.interpolateShape(frameNum, this.pv, this._caching); - } - this._caching.lastFrame = frameNum; - return this.pv; - } - function resetShape() { - this.paths = this.localShapeCollection; - } - function shapesEqual(shape1, shape2) { - if (shape1._length !== shape2._length || shape1.c !== shape2.c) return false; - var i; - var len = shape1._length; - for (i = 0; i < len; i += 1) if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) return false; - return true; - } - function setVValue(newPath) { - if (!shapesEqual(this.v, newPath)) { - this.v = shapePool.clone(newPath); - this.localShapeCollection.releaseShapes(); - this.localShapeCollection.addShape(this.v); - this._mdf = true; - this.paths = this.localShapeCollection; - } - } - function processEffectsSequence() { - if (this.elem.globalData.frameId === this.frameId) return; - if (!this.effectsSequence.length) { - this._mdf = false; - return; - } - if (this.lock) { - this.setVValue(this.pv); - return; - } - this.lock = true; - this._mdf = false; - var finalValue; - if (this.kf) finalValue = this.pv; - else if (this.data.ks) finalValue = this.data.ks.k; - else finalValue = this.data.pt.k; - var i; - var len = this.effectsSequence.length; - for (i = 0; i < len; i += 1) finalValue = this.effectsSequence[i](finalValue); - this.setVValue(finalValue); - this.lock = false; - this.frameId = this.elem.globalData.frameId; - } - function ShapeProperty(elem, data, type) { - this.propType = "shape"; - this.comp = elem.comp; - this.container = elem; - this.elem = elem; - this.data = data; - this.k = false; - this.kf = false; - this._mdf = false; - var pathData = type === 3 ? data.pt.k : data.ks.k; - this.v = shapePool.clone(pathData); - this.pv = shapePool.clone(this.v); - this.localShapeCollection = shapeCollectionPool.newShapeCollection(); - this.paths = this.localShapeCollection; - this.paths.addShape(this.v); - this.reset = resetShape; - this.effectsSequence = []; - } - function addEffect(effectFunction) { - this.effectsSequence.push(effectFunction); - this.container.addDynamicProperty(this); - } - ShapeProperty.prototype.interpolateShape = interpolateShape; - ShapeProperty.prototype.getValue = processEffectsSequence; - ShapeProperty.prototype.setVValue = setVValue; - ShapeProperty.prototype.addEffect = addEffect; - function KeyframedShapeProperty(elem, data, type) { - this.propType = "shape"; - this.comp = elem.comp; - this.elem = elem; - this.container = elem; - this.offsetTime = elem.data.st; - this.keyframes = type === 3 ? data.pt.k : data.ks.k; - this.keyframesMetadata = []; - this.k = true; - this.kf = true; - var len = this.keyframes[0].s[0].i.length; - this.v = shapePool.newElement(); - this.v.setPathData(this.keyframes[0].s[0].c, len); - this.pv = shapePool.clone(this.v); - this.localShapeCollection = shapeCollectionPool.newShapeCollection(); - this.paths = this.localShapeCollection; - this.paths.addShape(this.v); - this.lastFrame = initFrame; - this.reset = resetShape; - this._caching = { - lastFrame: initFrame, - lastIndex: 0 - }; - this.effectsSequence = [interpolateShapeCurrentTime.bind(this)]; - } - KeyframedShapeProperty.prototype.getValue = processEffectsSequence; - KeyframedShapeProperty.prototype.interpolateShape = interpolateShape; - KeyframedShapeProperty.prototype.setVValue = setVValue; - KeyframedShapeProperty.prototype.addEffect = addEffect; - var EllShapeProperty = function() { - var cPoint = roundCorner; - function EllShapePropertyFactory(elem, data) { - this.v = shapePool.newElement(); - this.v.setPathData(true, 4); - this.localShapeCollection = shapeCollectionPool.newShapeCollection(); - this.paths = this.localShapeCollection; - this.localShapeCollection.addShape(this.v); - this.d = data.d; - this.elem = elem; - this.comp = elem.comp; - this.frameId = -1; - this.initDynamicPropertyContainer(elem); - this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this); - this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this); - if (this.dynamicProperties.length) this.k = true; - else { - this.k = false; - this.convertEllToPath(); - } - } - EllShapePropertyFactory.prototype = { - reset: resetShape, - getValue: function() { - if (this.elem.globalData.frameId === this.frameId) return; - this.frameId = this.elem.globalData.frameId; - this.iterateDynamicProperties(); - if (this._mdf) this.convertEllToPath(); - }, - convertEllToPath: function() { - var p0 = this.p.v[0]; - var p1 = this.p.v[1]; - var s0 = this.s.v[0] / 2; - var s1 = this.s.v[1] / 2; - var _cw = this.d !== 3; - var _v = this.v; - _v.v[0][0] = p0; - _v.v[0][1] = p1 - s1; - _v.v[1][0] = _cw ? p0 + s0 : p0 - s0; - _v.v[1][1] = p1; - _v.v[2][0] = p0; - _v.v[2][1] = p1 + s1; - _v.v[3][0] = _cw ? p0 - s0 : p0 + s0; - _v.v[3][1] = p1; - _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint; - _v.i[0][1] = p1 - s1; - _v.i[1][0] = _cw ? p0 + s0 : p0 - s0; - _v.i[1][1] = p1 - s1 * cPoint; - _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint; - _v.i[2][1] = p1 + s1; - _v.i[3][0] = _cw ? p0 - s0 : p0 + s0; - _v.i[3][1] = p1 + s1 * cPoint; - _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint; - _v.o[0][1] = p1 - s1; - _v.o[1][0] = _cw ? p0 + s0 : p0 - s0; - _v.o[1][1] = p1 + s1 * cPoint; - _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint; - _v.o[2][1] = p1 + s1; - _v.o[3][0] = _cw ? p0 - s0 : p0 + s0; - _v.o[3][1] = p1 - s1 * cPoint; - } - }; - extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory); - return EllShapePropertyFactory; - }(); - var StarShapeProperty = function() { - function StarShapePropertyFactory(elem, data) { - this.v = shapePool.newElement(); - this.v.setPathData(true, 0); - this.elem = elem; - this.comp = elem.comp; - this.data = data; - this.frameId = -1; - this.d = data.d; - this.initDynamicPropertyContainer(elem); - if (data.sy === 1) { - this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this); - this.is = PropertyFactory.getProp(elem, data.is, 0, .01, this); - this.convertToPath = this.convertStarToPath; - } else this.convertToPath = this.convertPolygonToPath; - this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this); - this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this); - this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this); - this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this); - this.os = PropertyFactory.getProp(elem, data.os, 0, .01, this); - this.localShapeCollection = shapeCollectionPool.newShapeCollection(); - this.localShapeCollection.addShape(this.v); - this.paths = this.localShapeCollection; - if (this.dynamicProperties.length) this.k = true; - else { - this.k = false; - this.convertToPath(); - } - } - StarShapePropertyFactory.prototype = { - reset: resetShape, - getValue: function() { - if (this.elem.globalData.frameId === this.frameId) return; - this.frameId = this.elem.globalData.frameId; - this.iterateDynamicProperties(); - if (this._mdf) this.convertToPath(); - }, - convertStarToPath: function() { - var numPts = Math.floor(this.pt.v) * 2; - var angle = Math.PI * 2 / numPts; - var longFlag = true; - var longRad = this.or.v; - var shortRad = this.ir.v; - var longRound = this.os.v; - var shortRound = this.is.v; - var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2); - var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2); - var i; - var rad; - var roundness; - var perimSegment; - var currentAng = -Math.PI / 2; - currentAng += this.r.v; - var dir = this.data.d === 3 ? -1 : 1; - this.v._length = 0; - for (i = 0; i < numPts; i += 1) { - rad = longFlag ? longRad : shortRad; - roundness = longFlag ? longRound : shortRound; - perimSegment = longFlag ? longPerimSegment : shortPerimSegment; - var x = rad * Math.cos(currentAng); - var y = rad * Math.sin(currentAng); - var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y); - var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y); - x += +this.p.v[0]; - y += +this.p.v[1]; - this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true); - longFlag = !longFlag; - currentAng += angle * dir; - } - }, - convertPolygonToPath: function() { - var numPts = Math.floor(this.pt.v); - var angle = Math.PI * 2 / numPts; - var rad = this.or.v; - var roundness = this.os.v; - var perimSegment = 2 * Math.PI * rad / (numPts * 4); - var i; - var currentAng = -Math.PI * .5; - var dir = this.data.d === 3 ? -1 : 1; - currentAng += this.r.v; - this.v._length = 0; - for (i = 0; i < numPts; i += 1) { - var x = rad * Math.cos(currentAng); - var y = rad * Math.sin(currentAng); - var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y); - var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y); - x += +this.p.v[0]; - y += +this.p.v[1]; - this.v.setTripleAt(x, y, x - ox * perimSegment * roundness * dir, y - oy * perimSegment * roundness * dir, x + ox * perimSegment * roundness * dir, y + oy * perimSegment * roundness * dir, i, true); - currentAng += angle * dir; - } - this.paths.length = 0; - this.paths[0] = this.v; - } - }; - extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory); - return StarShapePropertyFactory; - }(); - var RectShapeProperty = function() { - function RectShapePropertyFactory(elem, data) { - this.v = shapePool.newElement(); - this.v.c = true; - this.localShapeCollection = shapeCollectionPool.newShapeCollection(); - this.localShapeCollection.addShape(this.v); - this.paths = this.localShapeCollection; - this.elem = elem; - this.comp = elem.comp; - this.frameId = -1; - this.d = data.d; - this.initDynamicPropertyContainer(elem); - this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this); - this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this); - this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this); - if (this.dynamicProperties.length) this.k = true; - else { - this.k = false; - this.convertRectToPath(); - } - } - RectShapePropertyFactory.prototype = { - convertRectToPath: function() { - var p0 = this.p.v[0]; - var p1 = this.p.v[1]; - var v0 = this.s.v[0] / 2; - var v1 = this.s.v[1] / 2; - var round = bmMin(v0, v1, this.r.v); - var cPoint = round * (1 - roundCorner); - this.v._length = 0; - if (this.d === 2 || this.d === 1) { - this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true); - this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true); - if (round !== 0) { - this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true); - this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true); - this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true); - this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true); - this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true); - this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true); - } else { - this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2); - this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3); - } - } else { - this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true); - if (round !== 0) { - this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true); - this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true); - this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true); - this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true); - this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true); - this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true); - this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true); - } else { - this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true); - this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true); - this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true); - } - } - }, - getValue: function() { - if (this.elem.globalData.frameId === this.frameId) return; - this.frameId = this.elem.globalData.frameId; - this.iterateDynamicProperties(); - if (this._mdf) this.convertRectToPath(); - }, - reset: resetShape - }; - extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory); - return RectShapePropertyFactory; - }(); - function getShapeProp(elem, data, type) { - var prop; - if (type === 3 || type === 4) if ((type === 3 ? data.pt : data.ks).k.length) prop = new KeyframedShapeProperty(elem, data, type); - else prop = new ShapeProperty(elem, data, type); - else if (type === 5) prop = new RectShapeProperty(elem, data); - else if (type === 6) prop = new EllShapeProperty(elem, data); - else if (type === 7) prop = new StarShapeProperty(elem, data); - if (prop.k) elem.addDynamicProperty(prop); - return prop; - } - function getConstructorFunction() { - return ShapeProperty; - } - function getKeyframedConstructorFunction() { - return KeyframedShapeProperty; - } - var ob = {}; - ob.getShapeProp = getShapeProp; - ob.getConstructorFunction = getConstructorFunction; - ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction; - return ob; - }(); - /*! - Transformation Matrix v2.0 - (c) Epistemex 2014-2015 - www.epistemex.com - By Ken Fyrstenberg - Contributions by leeoniya. - License: MIT, header required. - */ - const Matrix = function() { - var _cos = Math.cos; - var _sin = Math.sin; - var _tan = Math.tan; - var _rnd = Math.round; - function reset() { - this.props[0] = 1; - this.props[1] = 0; - this.props[2] = 0; - this.props[3] = 0; - this.props[4] = 0; - this.props[5] = 1; - this.props[6] = 0; - this.props[7] = 0; - this.props[8] = 0; - this.props[9] = 0; - this.props[10] = 1; - this.props[11] = 0; - this.props[12] = 0; - this.props[13] = 0; - this.props[14] = 0; - this.props[15] = 1; - return this; - } - function rotate(angle) { - if (angle === 0) return this; - var mCos = _cos(angle); - var mSin = _sin(angle); - return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - function rotateX(angle) { - if (angle === 0) return this; - var mCos = _cos(angle); - var mSin = _sin(angle); - return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1); - } - function rotateY(angle) { - if (angle === 0) return this; - var mCos = _cos(angle); - var mSin = _sin(angle); - return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1); - } - function rotateZ(angle) { - if (angle === 0) return this; - var mCos = _cos(angle); - var mSin = _sin(angle); - return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - function shear(sx, sy) { - return this._t(1, sy, sx, 1, 0, 0); - } - function skew(ax, ay) { - return this.shear(_tan(ax), _tan(ay)); - } - function skewFromAxis(ax, angle) { - var mCos = _cos(angle); - var mSin = _sin(angle); - return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1); - } - function scale(sx, sy, sz) { - if (!sz && sz !== 0) sz = 1; - if (sx === 1 && sy === 1 && sz === 1) return this; - return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1); - } - function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) { - this.props[0] = a; - this.props[1] = b; - this.props[2] = c; - this.props[3] = d; - this.props[4] = e; - this.props[5] = f; - this.props[6] = g; - this.props[7] = h; - this.props[8] = i; - this.props[9] = j; - this.props[10] = k; - this.props[11] = l; - this.props[12] = m; - this.props[13] = n; - this.props[14] = o; - this.props[15] = p; - return this; - } - function translate(tx, ty, tz) { - tz = tz || 0; - if (tx !== 0 || ty !== 0 || tz !== 0) return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1); - return this; - } - function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) { - var _p = this.props; - if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) { - _p[12] = _p[12] * a2 + _p[15] * m2; - _p[13] = _p[13] * f2 + _p[15] * n2; - _p[14] = _p[14] * k2 + _p[15] * o2; - _p[15] *= p2; - this._identityCalculated = false; - return this; - } - var a1 = _p[0]; - var b1 = _p[1]; - var c1 = _p[2]; - var d1 = _p[3]; - var e1 = _p[4]; - var f1 = _p[5]; - var g1 = _p[6]; - var h1 = _p[7]; - var i1 = _p[8]; - var j1 = _p[9]; - var k1 = _p[10]; - var l1 = _p[11]; - var m1 = _p[12]; - var n1 = _p[13]; - var o1 = _p[14]; - var p1 = _p[15]; - _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2; - _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2; - _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2; - _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2; - _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2; - _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2; - _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2; - _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2; - _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2; - _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2; - _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2; - _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2; - _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2; - _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2; - _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2; - _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2; - this._identityCalculated = false; - return this; - } - function isIdentity() { - if (!this._identityCalculated) { - this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1); - this._identityCalculated = true; - } - return this._identity; - } - function equals(matr) { - var i = 0; - while (i < 16) { - if (matr.props[i] !== this.props[i]) return false; - i += 1; - } - return true; - } - function clone(matr) { - var i; - for (i = 0; i < 16; i += 1) matr.props[i] = this.props[i]; - return matr; - } - function cloneFromProps(props) { - var i; - for (i = 0; i < 16; i += 1) this.props[i] = props[i]; - } - function applyToPoint(x, y, z) { - return { - x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], - y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], - z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14] - }; - } - function applyToX(x, y, z) { - return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12]; - } - function applyToY(x, y, z) { - return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13]; - } - function applyToZ(x, y, z) { - return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]; - } - function getInverseMatrix() { - var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4]; - var a = this.props[5] / determinant; - var b = -this.props[1] / determinant; - var c = -this.props[4] / determinant; - var d = this.props[0] / determinant; - var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant; - var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant; - var inverseMatrix = new Matrix(); - inverseMatrix.props[0] = a; - inverseMatrix.props[1] = b; - inverseMatrix.props[4] = c; - inverseMatrix.props[5] = d; - inverseMatrix.props[12] = e; - inverseMatrix.props[13] = f; - return inverseMatrix; - } - function inversePoint(pt) { - return this.getInverseMatrix().applyToPointArray(pt[0], pt[1], pt[2] || 0); - } - function inversePoints(pts) { - var i; - var len = pts.length; - var retPts = []; - for (i = 0; i < len; i += 1) retPts[i] = inversePoint(pts[i]); - return retPts; - } - function applyToTriplePoints(pt1, pt2, pt3) { - var arr = createTypedArray("float32", 6); - if (this.isIdentity()) { - arr[0] = pt1[0]; - arr[1] = pt1[1]; - arr[2] = pt2[0]; - arr[3] = pt2[1]; - arr[4] = pt3[0]; - arr[5] = pt3[1]; - } else { - var p0 = this.props[0]; - var p1 = this.props[1]; - var p4 = this.props[4]; - var p5 = this.props[5]; - var p12 = this.props[12]; - var p13 = this.props[13]; - arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12; - arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13; - arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12; - arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13; - arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12; - arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13; - } - return arr; - } - function applyToPointArray(x, y, z) { - var arr; - if (this.isIdentity()) arr = [ - x, - y, - z - ]; - else arr = [ - x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12], - x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13], - x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14] - ]; - return arr; - } - function applyToPointStringified(x, y) { - if (this.isIdentity()) return x + "," + y; - var _p = this.props; - return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + "," + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100; - } - function toCSS() { - var i = 0; - var props = this.props; - var cssValue = "matrix3d("; - var v = 1e4; - while (i < 16) { - cssValue += _rnd(props[i] * v) / v; - cssValue += i === 15 ? ")" : ","; - i += 1; - } - return cssValue; - } - function roundMatrixProperty(val) { - var v = 1e4; - if (val < 1e-6 && val > 0 || val > -1e-6 && val < 0) return _rnd(val * v) / v; - return val; - } - function to2dCSS() { - var props = this.props; - var _a = roundMatrixProperty(props[0]); - var _b = roundMatrixProperty(props[1]); - var _c = roundMatrixProperty(props[4]); - var _d = roundMatrixProperty(props[5]); - var _e = roundMatrixProperty(props[12]); - var _f = roundMatrixProperty(props[13]); - return "matrix(" + _a + "," + _b + "," + _c + "," + _d + "," + _e + "," + _f + ")"; - } - return function() { - this.reset = reset; - this.rotate = rotate; - this.rotateX = rotateX; - this.rotateY = rotateY; - this.rotateZ = rotateZ; - this.skew = skew; - this.skewFromAxis = skewFromAxis; - this.shear = shear; - this.scale = scale; - this.setTransform = setTransform; - this.translate = translate; - this.transform = transform; - this.applyToPoint = applyToPoint; - this.applyToX = applyToX; - this.applyToY = applyToY; - this.applyToZ = applyToZ; - this.applyToPointArray = applyToPointArray; - this.applyToTriplePoints = applyToTriplePoints; - this.applyToPointStringified = applyToPointStringified; - this.toCSS = toCSS; - this.to2dCSS = to2dCSS; - this.clone = clone; - this.cloneFromProps = cloneFromProps; - this.equals = equals; - this.inversePoints = inversePoints; - this.inversePoint = inversePoint; - this.getInverseMatrix = getInverseMatrix; - this._t = this.transform; - this.isIdentity = isIdentity; - this._identity = true; - this._identityCalculated = false; - this.props = createTypedArray("float32", 16); - this.reset(); - }; - }(); - const lottie2 = {}; - function setLocation(href) { - setLocationHref(href); - } - function searchAnimations() { - animationManager.searchAnimations(); - } - function setSubframeRendering(flag) { - setSubframeEnabled(flag); - } - function setPrefix(prefix) { - setIdPrefix(prefix); - } - function loadAnimation(params) { - return animationManager.loadAnimation(params); - } - function setQuality(value) { - if (typeof value === "string") switch (value) { - case "high": - setDefaultCurveSegments(200); - break; - default: - case "medium": - setDefaultCurveSegments(50); - break; - case "low": - setDefaultCurveSegments(10); - break; - } - else if (!isNaN(value) && value > 1) setDefaultCurveSegments(value); - } - function inBrowser() { - return typeof navigator !== "undefined"; - } - function installPlugin(type, plugin) { - if (type === "expressions") setExpressionsPlugin(plugin); - } - function getFactory(name) { - switch (name) { - case "propertyFactory": return PropertyFactory; - case "shapePropertyFactory": return ShapePropertyFactory; - case "matrix": return Matrix; - default: return null; - } - } - lottie2.play = animationManager.play; - lottie2.pause = animationManager.pause; - lottie2.setLocationHref = setLocation; - lottie2.togglePause = animationManager.togglePause; - lottie2.setSpeed = animationManager.setSpeed; - lottie2.setDirection = animationManager.setDirection; - lottie2.stop = animationManager.stop; - lottie2.searchAnimations = searchAnimations; - lottie2.registerAnimation = animationManager.registerAnimation; - lottie2.loadAnimation = loadAnimation; - lottie2.setSubframeRendering = setSubframeRendering; - lottie2.resize = animationManager.resize; - lottie2.goToAndStop = animationManager.goToAndStop; - lottie2.destroy = animationManager.destroy; - lottie2.setQuality = setQuality; - lottie2.inBrowser = inBrowser; - lottie2.installPlugin = installPlugin; - lottie2.freeze = animationManager.freeze; - lottie2.unfreeze = animationManager.unfreeze; - lottie2.setVolume = animationManager.setVolume; - lottie2.mute = animationManager.mute; - lottie2.unmute = animationManager.unmute; - lottie2.getRegisteredAnimations = animationManager.getRegisteredAnimations; - lottie2.useWebWorker = setWebWorker; - lottie2.setIDPrefix = setPrefix; - lottie2.__getFactory = getFactory; - lottie2.version = "[[BM_VERSION]]"; - function checkReady() { - if (document.readyState === "complete") { - clearInterval(readyStateCheckInterval); - searchAnimations(); - } - } - function getQueryVariable(variable) { - var vars = queryString.split("&"); - for (var i = 0; i < vars.length; i += 1) { - var pair = vars[i].split("="); - if (decodeURIComponent(pair[0]) == variable) return decodeURIComponent(pair[1]); - } - return null; - } - var queryString = ""; - var scripts = document.getElementsByTagName("script"); - var myScript = scripts[scripts.length - 1] || { src: "" }; - queryString = myScript.src ? myScript.src.replace(/^[^\?]+\??/, "") : ""; - getQueryVariable("renderer"); - var readyStateCheckInterval = setInterval(checkReady, 100); - try { - if (!(typeof exports === "object" && typeof module !== "undefined") && !(typeof define === "function" && define.amd)) window.bodymovin = lottie2; - } catch (err) {} - const ShapeModifiers = function() { - var ob = {}; - var modifiers = {}; - ob.registerModifier = registerModifier; - ob.getModifier = getModifier; - function registerModifier(nm, factory) { - if (!modifiers[nm]) modifiers[nm] = factory; - } - function getModifier(nm, elem, data) { - return new modifiers[nm](elem, data); - } - return ob; - }(); - function ShapeModifier() {} - ShapeModifier.prototype.initModifierProperties = function() {}; - ShapeModifier.prototype.addShapeToModifier = function() {}; - ShapeModifier.prototype.addShape = function(data) { - if (!this.closed) { - data.sh.container.addDynamicProperty(data.sh); - var shapeData = { - shape: data.sh, - data, - localShapeCollection: shapeCollectionPool.newShapeCollection() - }; - this.shapes.push(shapeData); - this.addShapeToModifier(shapeData); - if (this._isAnimated) data.setAsAnimated(); - } - }; - ShapeModifier.prototype.init = function(elem, data) { - this.shapes = []; - this.elem = elem; - this.initDynamicPropertyContainer(elem); - this.initModifierProperties(elem, data); - this.frameId = initialDefaultFrame; - this.closed = false; - this.k = false; - if (this.dynamicProperties.length) this.k = true; - else this.getValue(true); - }; - ShapeModifier.prototype.processKeys = function() { - if (this.elem.globalData.frameId === this.frameId) return; - this.frameId = this.elem.globalData.frameId; - this.iterateDynamicProperties(); - }; - extendPrototype([DynamicPropertyContainer], ShapeModifier); - function TrimModifier() {} - extendPrototype([ShapeModifier], TrimModifier); - TrimModifier.prototype.initModifierProperties = function(elem, data) { - this.s = PropertyFactory.getProp(elem, data.s, 0, .01, this); - this.e = PropertyFactory.getProp(elem, data.e, 0, .01, this); - this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this); - this.sValue = 0; - this.eValue = 0; - this.getValue = this.processKeys; - this.m = data.m; - this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length; - }; - TrimModifier.prototype.addShapeToModifier = function(shapeData) { - shapeData.pathsData = []; - }; - TrimModifier.prototype.calculateShapeEdges = function(s, e, shapeLength, addedLength, totalModifierLength) { - var segments = []; - if (e <= 1) segments.push({ - s, - e - }); - else if (s >= 1) segments.push({ - s: s - 1, - e: e - 1 - }); - else { - segments.push({ - s, - e: 1 - }); - segments.push({ - s: 0, - e: e - 1 - }); - } - var shapeSegments = []; - var i; - var len = segments.length; - var segmentOb; - for (i = 0; i < len; i += 1) { - segmentOb = segments[i]; - if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) { - var shapeS; - var shapeE; - if (segmentOb.s * totalModifierLength <= addedLength) shapeS = 0; - else shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength; - if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) shapeE = 1; - else shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength; - shapeSegments.push([shapeS, shapeE]); - } - } - if (!shapeSegments.length) shapeSegments.push([0, 0]); - return shapeSegments; - }; - TrimModifier.prototype.releasePathsData = function(pathsData) { - var i; - var len = pathsData.length; - for (i = 0; i < len; i += 1) segmentsLengthPool.release(pathsData[i]); - pathsData.length = 0; - return pathsData; - }; - TrimModifier.prototype.processShapes = function(_isFirstFrame) { - var s; - var e; - if (this._mdf || _isFirstFrame) { - var o = this.o.v % 360 / 360; - if (o < 0) o += 1; - if (this.s.v > 1) s = 1 + o; - else if (this.s.v < 0) s = 0 + o; - else s = this.s.v + o; - if (this.e.v > 1) e = 1 + o; - else if (this.e.v < 0) e = 0 + o; - else e = this.e.v + o; - if (s > e) { - var _s = s; - s = e; - e = _s; - } - s = Math.round(s * 1e4) * 1e-4; - e = Math.round(e * 1e4) * 1e-4; - this.sValue = s; - this.eValue = e; - } else { - s = this.sValue; - e = this.eValue; - } - var shapePaths; - var i; - var len = this.shapes.length; - var j; - var jLen; - var pathsData; - var pathData; - var totalShapeLength; - var totalModifierLength = 0; - if (e === s) for (i = 0; i < len; i += 1) { - this.shapes[i].localShapeCollection.releaseShapes(); - this.shapes[i].shape._mdf = true; - this.shapes[i].shape.paths = this.shapes[i].localShapeCollection; - if (this._mdf) this.shapes[i].pathsData.length = 0; - } - else if (!(e === 1 && s === 0 || e === 0 && s === 1)) { - var segments = []; - var shapeData; - var localShapeCollection; - for (i = 0; i < len; i += 1) { - shapeData = this.shapes[i]; - if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) shapeData.shape.paths = shapeData.localShapeCollection; - else { - shapePaths = shapeData.shape.paths; - jLen = shapePaths._length; - totalShapeLength = 0; - if (!shapeData.shape._mdf && shapeData.pathsData.length) totalShapeLength = shapeData.totalShapeLength; - else { - pathsData = this.releasePathsData(shapeData.pathsData); - for (j = 0; j < jLen; j += 1) { - pathData = bez.getSegmentsLength(shapePaths.shapes[j]); - pathsData.push(pathData); - totalShapeLength += pathData.totalLength; - } - shapeData.totalShapeLength = totalShapeLength; - shapeData.pathsData = pathsData; - } - totalModifierLength += totalShapeLength; - shapeData.shape._mdf = true; - } - } - var shapeS = s; - var shapeE = e; - var addedLength = 0; - var edges; - for (i = len - 1; i >= 0; i -= 1) { - shapeData = this.shapes[i]; - if (shapeData.shape._mdf) { - localShapeCollection = shapeData.localShapeCollection; - localShapeCollection.releaseShapes(); - if (this.m === 2 && len > 1) { - edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength); - addedLength += shapeData.totalShapeLength; - } else edges = [[shapeS, shapeE]]; - jLen = edges.length; - for (j = 0; j < jLen; j += 1) { - shapeS = edges[j][0]; - shapeE = edges[j][1]; - segments.length = 0; - if (shapeE <= 1) segments.push({ - s: shapeData.totalShapeLength * shapeS, - e: shapeData.totalShapeLength * shapeE - }); - else if (shapeS >= 1) segments.push({ - s: shapeData.totalShapeLength * (shapeS - 1), - e: shapeData.totalShapeLength * (shapeE - 1) - }); - else { - segments.push({ - s: shapeData.totalShapeLength * shapeS, - e: shapeData.totalShapeLength - }); - segments.push({ - s: 0, - e: shapeData.totalShapeLength * (shapeE - 1) - }); - } - var newShapesData = this.addShapes(shapeData, segments[0]); - if (segments[0].s !== segments[0].e) { - if (segments.length > 1) if (shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1].c) { - var lastShape = newShapesData.pop(); - this.addPaths(newShapesData, localShapeCollection); - newShapesData = this.addShapes(shapeData, segments[1], lastShape); - } else { - this.addPaths(newShapesData, localShapeCollection); - newShapesData = this.addShapes(shapeData, segments[1]); - } - this.addPaths(newShapesData, localShapeCollection); - } - } - shapeData.shape.paths = localShapeCollection; - } - } - } else if (this._mdf) for (i = 0; i < len; i += 1) { - this.shapes[i].pathsData.length = 0; - this.shapes[i].shape._mdf = true; - } - }; - TrimModifier.prototype.addPaths = function(newPaths, localShapeCollection) { - var i; - var len = newPaths.length; - for (i = 0; i < len; i += 1) localShapeCollection.addShape(newPaths[i]); - }; - TrimModifier.prototype.addSegment = function(pt1, pt2, pt3, pt4, shapePath, pos, newShape) { - shapePath.setXYAt(pt2[0], pt2[1], "o", pos); - shapePath.setXYAt(pt3[0], pt3[1], "i", pos + 1); - if (newShape) shapePath.setXYAt(pt1[0], pt1[1], "v", pos); - shapePath.setXYAt(pt4[0], pt4[1], "v", pos + 1); - }; - TrimModifier.prototype.addSegmentFromArray = function(points, shapePath, pos, newShape) { - shapePath.setXYAt(points[1], points[5], "o", pos); - shapePath.setXYAt(points[2], points[6], "i", pos + 1); - if (newShape) shapePath.setXYAt(points[0], points[4], "v", pos); - shapePath.setXYAt(points[3], points[7], "v", pos + 1); - }; - TrimModifier.prototype.addShapes = function(shapeData, shapeSegment, shapePath) { - var pathsData = shapeData.pathsData; - var shapePaths = shapeData.shape.paths.shapes; - var i; - var len = shapeData.shape.paths._length; - var j; - var jLen; - var addedLength = 0; - var currentLengthData; - var segmentCount; - var lengths; - var segment; - var shapes = []; - var initPos; - var newShape = true; - if (!shapePath) { - shapePath = shapePool.newElement(); - segmentCount = 0; - initPos = 0; - } else { - segmentCount = shapePath._length; - initPos = shapePath._length; - } - shapes.push(shapePath); - for (i = 0; i < len; i += 1) { - lengths = pathsData[i].lengths; - shapePath.c = shapePaths[i].c; - jLen = shapePaths[i].c ? lengths.length : lengths.length + 1; - for (j = 1; j < jLen; j += 1) { - currentLengthData = lengths[j - 1]; - if (addedLength + currentLengthData.addedLength < shapeSegment.s) { - addedLength += currentLengthData.addedLength; - shapePath.c = false; - } else if (addedLength > shapeSegment.e) { - shapePath.c = false; - break; - } else { - if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) { - this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[j], shapePaths[i].v[j], shapePath, segmentCount, newShape); - newShape = false; - } else { - segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[j], shapePaths[i].o[j - 1], shapePaths[i].i[j], (shapeSegment.s - addedLength) / currentLengthData.addedLength, (shapeSegment.e - addedLength) / currentLengthData.addedLength, lengths[j - 1]); - this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); - newShape = false; - shapePath.c = false; - } - addedLength += currentLengthData.addedLength; - segmentCount += 1; - } - } - if (shapePaths[i].c && lengths.length) { - currentLengthData = lengths[j - 1]; - if (addedLength <= shapeSegment.e) { - var segmentLength = lengths[j - 1].addedLength; - if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) { - this.addSegment(shapePaths[i].v[j - 1], shapePaths[i].o[j - 1], shapePaths[i].i[0], shapePaths[i].v[0], shapePath, segmentCount, newShape); - newShape = false; - } else { - segment = bez.getNewSegment(shapePaths[i].v[j - 1], shapePaths[i].v[0], shapePaths[i].o[j - 1], shapePaths[i].i[0], (shapeSegment.s - addedLength) / segmentLength, (shapeSegment.e - addedLength) / segmentLength, lengths[j - 1]); - this.addSegmentFromArray(segment, shapePath, segmentCount, newShape); - newShape = false; - shapePath.c = false; - } - } else shapePath.c = false; - addedLength += currentLengthData.addedLength; - segmentCount += 1; - } - if (shapePath._length) { - shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], "i", initPos); - shapePath.setXYAt(shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1], "o", shapePath._length - 1); - } - if (addedLength > shapeSegment.e) break; - if (i < len - 1) { - shapePath = shapePool.newElement(); - newShape = true; - shapes.push(shapePath); - segmentCount = 0; - } - } - return shapes; - }; - function PuckerAndBloatModifier() {} - extendPrototype([ShapeModifier], PuckerAndBloatModifier); - PuckerAndBloatModifier.prototype.initModifierProperties = function(elem, data) { - this.getValue = this.processKeys; - this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this); - this._isAnimated = !!this.amount.effectsSequence.length; - }; - PuckerAndBloatModifier.prototype.processPath = function(path, amount) { - var percent = amount / 100; - var centerPoint = [0, 0]; - var pathLength = path._length; - var i = 0; - for (i = 0; i < pathLength; i += 1) { - centerPoint[0] += path.v[i][0]; - centerPoint[1] += path.v[i][1]; - } - centerPoint[0] /= pathLength; - centerPoint[1] /= pathLength; - var clonedPath = shapePool.newElement(); - clonedPath.c = path.c; - var vX; - var vY; - var oX; - var oY; - var iX; - var iY; - for (i = 0; i < pathLength; i += 1) { - vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent; - vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent; - oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent; - oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent; - iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent; - iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent; - clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i); - } - return clonedPath; - }; - PuckerAndBloatModifier.prototype.processShapes = function(_isFirstFrame) { - var shapePaths; - var i; - var len = this.shapes.length; - var j; - var jLen; - var amount = this.amount.v; - if (amount !== 0) { - var shapeData; - var localShapeCollection; - for (i = 0; i < len; i += 1) { - shapeData = this.shapes[i]; - localShapeCollection = shapeData.localShapeCollection; - if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) { - localShapeCollection.releaseShapes(); - shapeData.shape._mdf = true; - shapePaths = shapeData.shape.paths.shapes; - jLen = shapeData.shape.paths._length; - for (j = 0; j < jLen; j += 1) localShapeCollection.addShape(this.processPath(shapePaths[j], amount)); - } - shapeData.shape.paths = shapeData.localShapeCollection; - } - } - if (!this.dynamicProperties.length) this._mdf = false; - }; - const TransformPropertyFactory = function() { - var defaultVector = [0, 0]; - function applyToMatrix(mat) { - var _mdf = this._mdf; - this.iterateDynamicProperties(); - this._mdf = this._mdf || _mdf; - if (this.a) mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]); - if (this.s) mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]); - if (this.sk) mat.skewFromAxis(-this.sk.v, this.sa.v); - if (this.r) mat.rotate(-this.r.v); - else mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]); - if (this.data.p.s) if (this.data.p.z) mat.translate(this.px.v, this.py.v, -this.pz.v); - else mat.translate(this.px.v, this.py.v, 0); - else mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]); - } - function processKeys(forceRender) { - if (this.elem.globalData.frameId === this.frameId) return; - if (this._isDirty) { - this.precalculateMatrix(); - this._isDirty = false; - } - this.iterateDynamicProperties(); - if (this._mdf || forceRender) { - var frameRate; - this.v.cloneFromProps(this.pre.props); - if (this.appliedTransformations < 1) this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]); - if (this.appliedTransformations < 2) this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]); - if (this.sk && this.appliedTransformations < 3) this.v.skewFromAxis(-this.sk.v, this.sa.v); - if (this.r && this.appliedTransformations < 4) this.v.rotate(-this.r.v); - else if (!this.r && this.appliedTransformations < 4) this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]); - if (this.autoOriented) { - var v1; - var v2; - frameRate = this.elem.globalData.frameRate; - if (this.p && this.p.keyframes && this.p.getValueAtTime) if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) { - v1 = this.p.getValueAtTime((this.p.keyframes[0].t + .01) / frameRate, 0); - v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0); - } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) { - v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0); - v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - .05) / frameRate, 0); - } else { - v1 = this.p.pv; - v2 = this.p.getValueAtTime((this.p._caching.lastFrame + this.p.offsetTime - .01) / frameRate, this.p.offsetTime); - } - else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) { - v1 = []; - v2 = []; - var px = this.px; - var py = this.py; - if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) { - v1[0] = px.getValueAtTime((px.keyframes[0].t + .01) / frameRate, 0); - v1[1] = py.getValueAtTime((py.keyframes[0].t + .01) / frameRate, 0); - v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0); - v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0); - } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) { - v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0); - v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0); - v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - .01) / frameRate, 0); - v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - .01) / frameRate, 0); - } else { - v1 = [px.pv, py.pv]; - v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - .01) / frameRate, px.offsetTime); - v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - .01) / frameRate, py.offsetTime); - } - } else { - v2 = defaultVector; - v1 = v2; - } - this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0])); - } - if (this.data.p && this.data.p.s) if (this.data.p.z) this.v.translate(this.px.v, this.py.v, -this.pz.v); - else this.v.translate(this.px.v, this.py.v, 0); - else this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]); - } - this.frameId = this.elem.globalData.frameId; - } - function precalculateMatrix() { - if (!this.a.k) { - this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]); - this.appliedTransformations = 1; - } else return; - if (!this.s.effectsSequence.length) { - this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]); - this.appliedTransformations = 2; - } else return; - if (this.sk) if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) { - this.pre.skewFromAxis(-this.sk.v, this.sa.v); - this.appliedTransformations = 3; - } else return; - if (this.r) { - if (!this.r.effectsSequence.length) { - this.pre.rotate(-this.r.v); - this.appliedTransformations = 4; - } - } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) { - this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]); - this.appliedTransformations = 4; - } - } - function autoOrient() {} - function addDynamicProperty(prop) { - this._addDynamicProperty(prop); - this.elem.addDynamicProperty(prop); - this._isDirty = true; - } - function TransformProperty(elem, data, container) { - this.elem = elem; - this.frameId = -1; - this.propType = "transform"; - this.data = data; - this.v = new Matrix(); - this.pre = new Matrix(); - this.appliedTransformations = 0; - this.initDynamicPropertyContainer(container || elem); - if (data.p && data.p.s) { - this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this); - this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this); - if (data.p.z) this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this); - } else this.p = PropertyFactory.getProp(elem, data.p || { k: [ - 0, - 0, - 0 - ] }, 1, 0, this); - if (data.rx) { - this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this); - this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this); - this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this); - if (data.or.k[0].ti) { - var i; - var len = data.or.k.length; - for (i = 0; i < len; i += 1) { - data.or.k[i].to = null; - data.or.k[i].ti = null; - } - } - this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this); - this.or.sh = true; - } else this.r = PropertyFactory.getProp(elem, data.r || { k: 0 }, 0, degToRads, this); - if (data.sk) { - this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this); - this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this); - } - this.a = PropertyFactory.getProp(elem, data.a || { k: [ - 0, - 0, - 0 - ] }, 1, 0, this); - this.s = PropertyFactory.getProp(elem, data.s || { k: [ - 100, - 100, - 100 - ] }, 1, .01, this); - if (data.o) this.o = PropertyFactory.getProp(elem, data.o, 0, .01, elem); - else this.o = { - _mdf: false, - v: 1 - }; - this._isDirty = true; - if (!this.dynamicProperties.length) this.getValue(true); - } - TransformProperty.prototype = { - applyToMatrix, - getValue: processKeys, - precalculateMatrix, - autoOrient - }; - extendPrototype([DynamicPropertyContainer], TransformProperty); - TransformProperty.prototype.addDynamicProperty = addDynamicProperty; - TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty; - function getTransformProperty(elem, data, container) { - return new TransformProperty(elem, data, container); - } - return { getTransformProperty }; - }(); - function RepeaterModifier() {} - extendPrototype([ShapeModifier], RepeaterModifier); - RepeaterModifier.prototype.initModifierProperties = function(elem, data) { - this.getValue = this.processKeys; - this.c = PropertyFactory.getProp(elem, data.c, 0, null, this); - this.o = PropertyFactory.getProp(elem, data.o, 0, null, this); - this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this); - this.so = PropertyFactory.getProp(elem, data.tr.so, 0, .01, this); - this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, .01, this); - this.data = data; - if (!this.dynamicProperties.length) this.getValue(true); - this._isAnimated = !!this.dynamicProperties.length; - this.pMatrix = new Matrix(); - this.rMatrix = new Matrix(); - this.sMatrix = new Matrix(); - this.tMatrix = new Matrix(); - this.matrix = new Matrix(); - }; - RepeaterModifier.prototype.applyTransforms = function(pMatrix, rMatrix, sMatrix, transform, perc, inv) { - var dir = inv ? -1 : 1; - var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc); - var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc); - pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]); - rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]); - rMatrix.rotate(-transform.r.v * dir * perc); - rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]); - sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]); - sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY); - sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]); - }; - RepeaterModifier.prototype.init = function(elem, arr, pos, elemsData) { - this.elem = elem; - this.arr = arr; - this.pos = pos; - this.elemsData = elemsData; - this._currentCopies = 0; - this._elements = []; - this._groups = []; - this.frameId = -1; - this.initDynamicPropertyContainer(elem); - this.initModifierProperties(elem, arr[pos]); - while (pos > 0) { - pos -= 1; - this._elements.unshift(arr[pos]); - } - if (this.dynamicProperties.length) this.k = true; - else this.getValue(true); - }; - RepeaterModifier.prototype.resetElements = function(elements) { - var i; - var len = elements.length; - for (i = 0; i < len; i += 1) { - elements[i]._processed = false; - if (elements[i].ty === "gr") this.resetElements(elements[i].it); - } - }; - RepeaterModifier.prototype.cloneElements = function(elements) { - var newElements = JSON.parse(JSON.stringify(elements)); - this.resetElements(newElements); - return newElements; - }; - RepeaterModifier.prototype.changeGroupRender = function(elements, renderFlag) { - var i; - var len = elements.length; - for (i = 0; i < len; i += 1) { - elements[i]._render = renderFlag; - if (elements[i].ty === "gr") this.changeGroupRender(elements[i].it, renderFlag); - } - }; - RepeaterModifier.prototype.processShapes = function(_isFirstFrame) { - var items; - var itemsTransform; - var i; - var dir; - var cont; - var hasReloaded = false; - if (this._mdf || _isFirstFrame) { - var copies = Math.ceil(this.c.v); - if (this._groups.length < copies) { - while (this._groups.length < copies) { - var group = { - it: this.cloneElements(this._elements), - ty: "gr" - }; - group.it.push({ - a: { - a: 0, - ix: 1, - k: [0, 0] - }, - nm: "Transform", - o: { - a: 0, - ix: 7, - k: 100 - }, - p: { - a: 0, - ix: 2, - k: [0, 0] - }, - r: { - a: 1, - ix: 6, - k: [{ - s: 0, - e: 0, - t: 0 - }, { - s: 0, - e: 0, - t: 1 - }] - }, - s: { - a: 0, - ix: 3, - k: [100, 100] - }, - sa: { - a: 0, - ix: 5, - k: 0 - }, - sk: { - a: 0, - ix: 4, - k: 0 - }, - ty: "tr" - }); - this.arr.splice(0, 0, group); - this._groups.splice(0, 0, group); - this._currentCopies += 1; - } - this.elem.reloadShapes(); - hasReloaded = true; - } - cont = 0; - var renderFlag; - for (i = 0; i <= this._groups.length - 1; i += 1) { - renderFlag = cont < copies; - this._groups[i]._render = renderFlag; - this.changeGroupRender(this._groups[i].it, renderFlag); - if (!renderFlag) { - var elems = this.elemsData[i].it; - var transformData = elems[elems.length - 1]; - if (transformData.transform.op.v !== 0) { - transformData.transform.op._mdf = true; - transformData.transform.op.v = 0; - } else transformData.transform.op._mdf = false; - } - cont += 1; - } - this._currentCopies = copies; - var offset = this.o.v; - var offsetModulo = offset % 1; - var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset); - var pProps = this.pMatrix.props; - var rProps = this.rMatrix.props; - var sProps = this.sMatrix.props; - this.pMatrix.reset(); - this.rMatrix.reset(); - this.sMatrix.reset(); - this.tMatrix.reset(); - this.matrix.reset(); - var iteration = 0; - if (offset > 0) { - while (iteration < roundOffset) { - this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false); - iteration += 1; - } - if (offsetModulo) { - this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false); - iteration += offsetModulo; - } - } else if (offset < 0) { - while (iteration > roundOffset) { - this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true); - iteration -= 1; - } - if (offsetModulo) { - this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true); - iteration -= offsetModulo; - } - } - i = this.data.m === 1 ? 0 : this._currentCopies - 1; - dir = this.data.m === 1 ? 1 : -1; - cont = this._currentCopies; - var j; - var jLen; - while (cont) { - items = this.elemsData[i].it; - itemsTransform = items[items.length - 1].transform.mProps.v.props; - jLen = itemsTransform.length; - items[items.length - 1].transform.mProps._mdf = true; - items[items.length - 1].transform.op._mdf = true; - items[items.length - 1].transform.op.v = this._currentCopies === 1 ? this.so.v : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1)); - if (iteration !== 0) { - if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false); - this.matrix.transform(rProps[0], rProps[1], rProps[2], rProps[3], rProps[4], rProps[5], rProps[6], rProps[7], rProps[8], rProps[9], rProps[10], rProps[11], rProps[12], rProps[13], rProps[14], rProps[15]); - this.matrix.transform(sProps[0], sProps[1], sProps[2], sProps[3], sProps[4], sProps[5], sProps[6], sProps[7], sProps[8], sProps[9], sProps[10], sProps[11], sProps[12], sProps[13], sProps[14], sProps[15]); - this.matrix.transform(pProps[0], pProps[1], pProps[2], pProps[3], pProps[4], pProps[5], pProps[6], pProps[7], pProps[8], pProps[9], pProps[10], pProps[11], pProps[12], pProps[13], pProps[14], pProps[15]); - for (j = 0; j < jLen; j += 1) itemsTransform[j] = this.matrix.props[j]; - this.matrix.reset(); - } else { - this.matrix.reset(); - for (j = 0; j < jLen; j += 1) itemsTransform[j] = this.matrix.props[j]; - } - iteration += 1; - cont -= 1; - i += dir; - } - } else { - cont = this._currentCopies; - i = 0; - dir = 1; - while (cont) { - items = this.elemsData[i].it; - itemsTransform = items[items.length - 1].transform.mProps.v.props; - items[items.length - 1].transform.mProps._mdf = false; - items[items.length - 1].transform.op._mdf = false; - cont -= 1; - i += dir; - } - } - return hasReloaded; - }; - RepeaterModifier.prototype.addShape = function() {}; - function RoundCornersModifier() {} - extendPrototype([ShapeModifier], RoundCornersModifier); - RoundCornersModifier.prototype.initModifierProperties = function(elem, data) { - this.getValue = this.processKeys; - this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this); - this._isAnimated = !!this.rd.effectsSequence.length; - }; - RoundCornersModifier.prototype.processPath = function(path, round) { - var clonedPath = shapePool.newElement(); - clonedPath.c = path.c; - var i; - var len = path._length; - var currentV; - var currentI; - var currentO; - var closerV; - var distance; - var newPosPerc; - var index2 = 0; - var vX; - var vY; - var oX; - var oY; - var iX; - var iY; - for (i = 0; i < len; i += 1) { - currentV = path.v[i]; - currentO = path.o[i]; - currentI = path.i[i]; - if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) if ((i === 0 || i === len - 1) && !path.c) { - clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index2); - index2 += 1; - } else { - if (i === 0) closerV = path.v[len - 1]; - else closerV = path.v[i - 1]; - distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2)); - newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0; - iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc; - vX = iX; - iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc; - vY = iY; - oX = vX - (vX - currentV[0]) * roundCorner; - oY = vY - (vY - currentV[1]) * roundCorner; - clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index2); - index2 += 1; - if (i === len - 1) closerV = path.v[0]; - else closerV = path.v[i + 1]; - distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2)); - newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0; - oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc; - vX = oX; - oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc; - vY = oY; - iX = vX - (vX - currentV[0]) * roundCorner; - iY = vY - (vY - currentV[1]) * roundCorner; - clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index2); - index2 += 1; - } - else { - clonedPath.setTripleAt(path.v[i][0], path.v[i][1], path.o[i][0], path.o[i][1], path.i[i][0], path.i[i][1], index2); - index2 += 1; - } - } - return clonedPath; - }; - RoundCornersModifier.prototype.processShapes = function(_isFirstFrame) { - var shapePaths; - var i; - var len = this.shapes.length; - var j; - var jLen; - var rd = this.rd.v; - if (rd !== 0) { - var shapeData; - var localShapeCollection; - for (i = 0; i < len; i += 1) { - shapeData = this.shapes[i]; - localShapeCollection = shapeData.localShapeCollection; - if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) { - localShapeCollection.releaseShapes(); - shapeData.shape._mdf = true; - shapePaths = shapeData.shape.paths.shapes; - jLen = shapeData.shape.paths._length; - for (j = 0; j < jLen; j += 1) localShapeCollection.addShape(this.processPath(shapePaths[j], rd)); - } - shapeData.shape.paths = shapeData.localShapeCollection; - } - } - if (!this.dynamicProperties.length) this._mdf = false; - }; - function getFontProperties(fontData) { - var styles = fontData.fStyle ? fontData.fStyle.split(" ") : []; - var fWeight = "normal"; - var fStyle = "normal"; - var len = styles.length; - var styleName; - for (var i = 0; i < len; i += 1) { - styleName = styles[i].toLowerCase(); - switch (styleName) { - case "italic": - fStyle = "italic"; - break; - case "bold": - fWeight = "700"; - break; - case "black": - fWeight = "900"; - break; - case "medium": - fWeight = "500"; - break; - case "regular": - case "normal": - fWeight = "400"; - break; - case "light": - case "thin": - fWeight = "200"; - break; - } - } - return { - style: fStyle, - weight: fontData.fWeight || fWeight - }; - } - const FontManager = function() { - var maxWaitingTime = 5e3; - var emptyChar = { - w: 0, - size: 0, - shapes: [], - data: { shapes: [] } - }; - var combinedCharacters = []; - combinedCharacters = combinedCharacters.concat([ - 2304, - 2305, - 2306, - 2307, - 2362, - 2363, - 2364, - 2364, - 2366, - 2367, - 2368, - 2369, - 2370, - 2371, - 2372, - 2373, - 2374, - 2375, - 2376, - 2377, - 2378, - 2379, - 2380, - 2381, - 2382, - 2383, - 2387, - 2388, - 2389, - 2390, - 2391, - 2402, - 2403 - ]); - var surrogateModifiers = [ - "d83cdffb", - "d83cdffc", - "d83cdffd", - "d83cdffe", - "d83cdfff" - ]; - var zeroWidthJoiner = [65039, 8205]; - function trimFontOptions(font) { - var familyArray = font.split(","); - var i; - var len = familyArray.length; - var enabledFamilies = []; - for (i = 0; i < len; i += 1) if (familyArray[i] !== "sans-serif" && familyArray[i] !== "monospace") enabledFamilies.push(familyArray[i]); - return enabledFamilies.join(","); - } - function setUpNode(font, family) { - var parentNode = createTag("span"); - parentNode.setAttribute("aria-hidden", true); - parentNode.style.fontFamily = family; - var node = createTag("span"); - node.innerText = "giItT1WQy@!-/#"; - parentNode.style.position = "absolute"; - parentNode.style.left = "-10000px"; - parentNode.style.top = "-10000px"; - parentNode.style.fontSize = "300px"; - parentNode.style.fontVariant = "normal"; - parentNode.style.fontStyle = "normal"; - parentNode.style.fontWeight = "normal"; - parentNode.style.letterSpacing = "0"; - parentNode.appendChild(node); - document.body.appendChild(parentNode); - var width = node.offsetWidth; - node.style.fontFamily = trimFontOptions(font) + ", " + family; - return { - node, - w: width, - parent: parentNode - }; - } - function checkLoadedFonts() { - var i; - var len = this.fonts.length; - var node; - var w; - var loadedCount = len; - for (i = 0; i < len; i += 1) if (this.fonts[i].loaded) loadedCount -= 1; - else if (this.fonts[i].fOrigin === "n" || this.fonts[i].origin === 0) this.fonts[i].loaded = true; - else { - node = this.fonts[i].monoCase.node; - w = this.fonts[i].monoCase.w; - if (node.offsetWidth !== w) { - loadedCount -= 1; - this.fonts[i].loaded = true; - } else { - node = this.fonts[i].sansCase.node; - w = this.fonts[i].sansCase.w; - if (node.offsetWidth !== w) { - loadedCount -= 1; - this.fonts[i].loaded = true; - } - } - if (this.fonts[i].loaded) { - this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent); - this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent); - } - } - if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) setTimeout(this.checkLoadedFontsBinded, 20); - else setTimeout(this.setIsLoadedBinded, 10); - } - function createHelper(fontData, def) { - var engine = document.body && def ? "svg" : "canvas"; - var helper; - var fontProps = getFontProperties(fontData); - if (engine === "svg") { - var tHelper = createNS("text"); - tHelper.style.fontSize = "100px"; - tHelper.setAttribute("font-family", fontData.fFamily); - tHelper.setAttribute("font-style", fontProps.style); - tHelper.setAttribute("font-weight", fontProps.weight); - tHelper.textContent = "1"; - if (fontData.fClass) { - tHelper.style.fontFamily = "inherit"; - tHelper.setAttribute("class", fontData.fClass); - } else tHelper.style.fontFamily = fontData.fFamily; - def.appendChild(tHelper); - helper = tHelper; - } else { - var tCanvasHelper = new OffscreenCanvas(500, 500).getContext("2d"); - tCanvasHelper.font = fontProps.style + " " + fontProps.weight + " 100px " + fontData.fFamily; - helper = tCanvasHelper; - } - function measure(text) { - if (engine === "svg") { - helper.textContent = text; - return helper.getComputedTextLength(); - } - return helper.measureText(text).width; - } - return { measureText: measure }; - } - function addFonts(fontData, defs) { - if (!fontData) { - this.isLoaded = true; - return; - } - if (this.chars) { - this.isLoaded = true; - this.fonts = fontData.list; - return; - } - if (!document.body) { - this.isLoaded = true; - fontData.list.forEach((data) => { - data.helper = createHelper(data); - data.cache = {}; - }); - this.fonts = fontData.list; - return; - } - var fontArr = fontData.list; - var i; - var len = fontArr.length; - var _pendingFonts = len; - for (i = 0; i < len; i += 1) { - var shouldLoadFont = true; - var loadedSelector; - var j; - fontArr[i].loaded = false; - fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, "monospace"); - fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, "sans-serif"); - if (!fontArr[i].fPath) { - fontArr[i].loaded = true; - _pendingFonts -= 1; - } else if (fontArr[i].fOrigin === "p" || fontArr[i].origin === 3) { - loadedSelector = document.querySelectorAll("style[f-forigin=\"p\"][f-family=\"" + fontArr[i].fFamily + "\"], style[f-origin=\"3\"][f-family=\"" + fontArr[i].fFamily + "\"]"); - if (loadedSelector.length > 0) shouldLoadFont = false; - if (shouldLoadFont) { - var s = createTag("style"); - s.setAttribute("f-forigin", fontArr[i].fOrigin); - s.setAttribute("f-origin", fontArr[i].origin); - s.setAttribute("f-family", fontArr[i].fFamily); - s.type = "text/css"; - s.innerText = "@font-face {font-family: " + fontArr[i].fFamily + "; font-style: normal; src: url('" + fontArr[i].fPath + "');}"; - defs.appendChild(s); - } - } else if (fontArr[i].fOrigin === "g" || fontArr[i].origin === 1) { - loadedSelector = document.querySelectorAll("link[f-forigin=\"g\"], link[f-origin=\"1\"]"); - for (j = 0; j < loadedSelector.length; j += 1) if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) shouldLoadFont = false; - if (shouldLoadFont) { - var l = createTag("link"); - l.setAttribute("f-forigin", fontArr[i].fOrigin); - l.setAttribute("f-origin", fontArr[i].origin); - l.type = "text/css"; - l.rel = "stylesheet"; - l.href = fontArr[i].fPath; - document.body.appendChild(l); - } - } else if (fontArr[i].fOrigin === "t" || fontArr[i].origin === 2) { - loadedSelector = document.querySelectorAll("script[f-forigin=\"t\"], script[f-origin=\"2\"]"); - for (j = 0; j < loadedSelector.length; j += 1) if (fontArr[i].fPath === loadedSelector[j].src) shouldLoadFont = false; - if (shouldLoadFont) { - var sc = createTag("link"); - sc.setAttribute("f-forigin", fontArr[i].fOrigin); - sc.setAttribute("f-origin", fontArr[i].origin); - sc.setAttribute("rel", "stylesheet"); - sc.setAttribute("href", fontArr[i].fPath); - defs.appendChild(sc); - } - } - fontArr[i].helper = createHelper(fontArr[i], defs); - fontArr[i].cache = {}; - this.fonts.push(fontArr[i]); - } - if (_pendingFonts === 0) this.isLoaded = true; - else setTimeout(this.checkLoadedFonts.bind(this), 100); - } - function addChars(chars) { - if (!chars) return; - if (!this.chars) this.chars = []; - var i; - var len = chars.length; - var j; - var jLen = this.chars.length; - var found; - for (i = 0; i < len; i += 1) { - j = 0; - found = false; - while (j < jLen) { - if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) found = true; - j += 1; - } - if (!found) { - this.chars.push(chars[i]); - jLen += 1; - } - } - } - function getCharData(char, style, font) { - var i = 0; - var len = this.chars.length; - while (i < len) { - if (this.chars[i].ch === char && this.chars[i].style === style && this.chars[i].fFamily === font) return this.chars[i]; - i += 1; - } - if ((typeof char === "string" && char.charCodeAt(0) !== 13 || !char) && console && console.warn && !this._warned) { - this._warned = true; - console.warn("Missing character from exported characters list: ", char, style, font); - } - return emptyChar; - } - function measureText(char, fontName, size) { - var fontData = this.getFontByName(fontName); - var index2 = char.charCodeAt(0); - if (!fontData.cache[index2 + 1]) { - var tHelper = fontData.helper; - if (char === " ") { - var doubleSize = tHelper.measureText("|" + char + "|"); - var singleSize = tHelper.measureText("||"); - fontData.cache[index2 + 1] = (doubleSize - singleSize) / 100; - } else fontData.cache[index2 + 1] = tHelper.measureText(char) / 100; - } - return fontData.cache[index2 + 1] * size; - } - function getFontByName(name) { - var i = 0; - var len = this.fonts.length; - while (i < len) { - if (this.fonts[i].fName === name) return this.fonts[i]; - i += 1; - } - return this.fonts[0]; - } - function isModifier(firstCharCode, secondCharCode) { - var sum = firstCharCode.toString(16) + secondCharCode.toString(16); - return surrogateModifiers.indexOf(sum) !== -1; - } - function isZeroWidthJoiner(firstCharCode, secondCharCode) { - if (!secondCharCode) return firstCharCode === zeroWidthJoiner[1]; - return firstCharCode === zeroWidthJoiner[0] && secondCharCode === zeroWidthJoiner[1]; - } - function isCombinedCharacter(char) { - return combinedCharacters.indexOf(char) !== -1; - } - function setIsLoaded() { - this.isLoaded = true; - } - var Font = function() { - this.fonts = []; - this.chars = null; - this.typekitLoaded = 0; - this.isLoaded = false; - this._warned = false; - this.initTime = Date.now(); - this.setIsLoadedBinded = this.setIsLoaded.bind(this); - this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this); - }; - Font.isModifier = isModifier; - Font.isZeroWidthJoiner = isZeroWidthJoiner; - Font.isCombinedCharacter = isCombinedCharacter; - Font.prototype = { - addChars, - addFonts, - getCharData, - getFontByName, - measureText, - checkLoadedFonts, - setIsLoaded - }; - return Font; - }(); - function RenderableElement() {} - RenderableElement.prototype = { - initRenderable: function() { - this.isInRange = false; - this.hidden = false; - this.isTransparent = false; - this.renderableComponents = []; - }, - addRenderableComponent: function(component) { - if (this.renderableComponents.indexOf(component) === -1) this.renderableComponents.push(component); - }, - removeRenderableComponent: function(component) { - if (this.renderableComponents.indexOf(component) !== -1) this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1); - }, - prepareRenderableFrame: function(num) { - this.checkLayerLimits(num); - }, - checkTransparency: function() { - if (this.finalTransform.mProp.o.v <= 0) { - if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) { - this.isTransparent = true; - this.hide(); - } - } else if (this.isTransparent) { - this.isTransparent = false; - this.show(); - } - }, - /** - * @function - * Initializes frame related properties. - * - * @param {number} num - * current frame number in Layer's time - * - */ - checkLayerLimits: function(num) { - if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) { - if (this.isInRange !== true) { - this.globalData._mdf = true; - this._mdf = true; - this.isInRange = true; - this.show(); - } - } else if (this.isInRange !== false) { - this.globalData._mdf = true; - this.isInRange = false; - this.hide(); - } - }, - renderRenderable: function() { - var i; - var len = this.renderableComponents.length; - for (i = 0; i < len; i += 1) this.renderableComponents[i].renderFrame(this._isFirstFrame); - }, - sourceRectAtTime: function() { - return { - top: 0, - left: 0, - width: 100, - height: 100 - }; - }, - getLayerSize: function() { - if (this.data.ty === 5) return { - w: this.data.textData.width, - h: this.data.textData.height - }; - return { - w: this.data.width, - h: this.data.height - }; - } - }; - const MaskManagerInterface = function() { - function MaskInterface(mask, data) { - this._mask = mask; - this._data = data; - } - Object.defineProperty(MaskInterface.prototype, "maskPath", { get: function() { - if (this._mask.prop.k) this._mask.prop.getValue(); - return this._mask.prop; - } }); - Object.defineProperty(MaskInterface.prototype, "maskOpacity", { get: function() { - if (this._mask.op.k) this._mask.op.getValue(); - return this._mask.op.v * 100; - } }); - var MaskManager = function(maskManager) { - var _masksInterfaces = createSizedArray(maskManager.viewData.length); - var i; - var len = maskManager.viewData.length; - for (i = 0; i < len; i += 1) _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]); - var maskFunction = function(name) { - i = 0; - while (i < len) { - if (maskManager.masksProperties[i].nm === name) return _masksInterfaces[i]; - i += 1; - } - return null; - }; - return maskFunction; - }; - return MaskManager; - }(); - const ExpressionPropertyInterface = function() { - var defaultUnidimensionalValue = { - pv: 0, - v: 0, - mult: 1 - }; - var defaultMultidimensionalValue = { - pv: [ - 0, - 0, - 0 - ], - v: [ - 0, - 0, - 0 - ], - mult: 1 - }; - function completeProperty(expressionValue, property, type) { - Object.defineProperty(expressionValue, "velocity", { get: function() { - return property.getVelocityAtTime(property.comp.currentFrame); - } }); - expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0; - expressionValue.key = function(pos) { - if (!expressionValue.numKeys) return 0; - var value = ""; - if ("s" in property.keyframes[pos - 1]) value = property.keyframes[pos - 1].s; - else if ("e" in property.keyframes[pos - 2]) value = property.keyframes[pos - 2].e; - else value = property.keyframes[pos - 2].s; - var valueProp = type === "unidimensional" ? new Number(value) : Object.assign({}, value); - valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate; - valueProp.value = type === "unidimensional" ? value[0] : value; - return valueProp; - }; - expressionValue.valueAtTime = property.getValueAtTime; - expressionValue.speedAtTime = property.getSpeedAtTime; - expressionValue.velocityAtTime = property.getVelocityAtTime; - expressionValue.propertyGroup = property.propertyGroup; - } - function UnidimensionalPropertyInterface(property) { - if (!property || !("pv" in property)) property = defaultUnidimensionalValue; - var mult = 1 / property.mult; - var val = property.pv * mult; - var expressionValue = new Number(val); - expressionValue.value = val; - completeProperty(expressionValue, property, "unidimensional"); - return function() { - if (property.k) property.getValue(); - val = property.v * mult; - if (expressionValue.value !== val) { - expressionValue = new Number(val); - expressionValue.value = val; - completeProperty(expressionValue, property, "unidimensional"); - } - return expressionValue; - }; - } - function MultidimensionalPropertyInterface(property) { - if (!property || !("pv" in property)) property = defaultMultidimensionalValue; - var mult = 1 / property.mult; - var len = property.data && property.data.l || property.pv.length; - var expressionValue = createTypedArray("float32", len); - var arrValue = createTypedArray("float32", len); - expressionValue.value = arrValue; - completeProperty(expressionValue, property, "multidimensional"); - return function() { - if (property.k) property.getValue(); - for (var i = 0; i < len; i += 1) { - arrValue[i] = property.v[i] * mult; - expressionValue[i] = arrValue[i]; - } - return expressionValue; - }; - } - function defaultGetter() { - return defaultUnidimensionalValue; - } - return function(property) { - if (!property) return defaultGetter; - if (property.propType === "unidimensional") return UnidimensionalPropertyInterface(property); - return MultidimensionalPropertyInterface(property); - }; - }(); - const TransformExpressionInterface = function() { - return function(transform) { - function _thisFunction(name) { - switch (name) { - case "scale": - case "Scale": - case "ADBE Scale": - case 6: return _thisFunction.scale; - case "rotation": - case "Rotation": - case "ADBE Rotation": - case "ADBE Rotate Z": - case 10: return _thisFunction.rotation; - case "ADBE Rotate X": return _thisFunction.xRotation; - case "ADBE Rotate Y": return _thisFunction.yRotation; - case "position": - case "Position": - case "ADBE Position": - case 2: return _thisFunction.position; - case "ADBE Position_0": return _thisFunction.xPosition; - case "ADBE Position_1": return _thisFunction.yPosition; - case "ADBE Position_2": return _thisFunction.zPosition; - case "anchorPoint": - case "AnchorPoint": - case "Anchor Point": - case "ADBE AnchorPoint": - case 1: return _thisFunction.anchorPoint; - case "opacity": - case "Opacity": - case 11: return _thisFunction.opacity; - default: return null; - } - } - Object.defineProperty(_thisFunction, "rotation", { get: ExpressionPropertyInterface(transform.r || transform.rz) }); - Object.defineProperty(_thisFunction, "zRotation", { get: ExpressionPropertyInterface(transform.rz || transform.r) }); - Object.defineProperty(_thisFunction, "xRotation", { get: ExpressionPropertyInterface(transform.rx) }); - Object.defineProperty(_thisFunction, "yRotation", { get: ExpressionPropertyInterface(transform.ry) }); - Object.defineProperty(_thisFunction, "scale", { get: ExpressionPropertyInterface(transform.s) }); - var _px; - var _py; - var _pz; - var _transformFactory; - if (transform.p) _transformFactory = ExpressionPropertyInterface(transform.p); - else { - _px = ExpressionPropertyInterface(transform.px); - _py = ExpressionPropertyInterface(transform.py); - if (transform.pz) _pz = ExpressionPropertyInterface(transform.pz); - } - Object.defineProperty(_thisFunction, "position", { get: function() { - if (transform.p) return _transformFactory(); - return [ - _px(), - _py(), - _pz ? _pz() : 0 - ]; - } }); - Object.defineProperty(_thisFunction, "xPosition", { get: ExpressionPropertyInterface(transform.px) }); - Object.defineProperty(_thisFunction, "yPosition", { get: ExpressionPropertyInterface(transform.py) }); - Object.defineProperty(_thisFunction, "zPosition", { get: ExpressionPropertyInterface(transform.pz) }); - Object.defineProperty(_thisFunction, "anchorPoint", { get: ExpressionPropertyInterface(transform.a) }); - Object.defineProperty(_thisFunction, "opacity", { get: ExpressionPropertyInterface(transform.o) }); - Object.defineProperty(_thisFunction, "skew", { get: ExpressionPropertyInterface(transform.sk) }); - Object.defineProperty(_thisFunction, "skewAxis", { get: ExpressionPropertyInterface(transform.sa) }); - Object.defineProperty(_thisFunction, "orientation", { get: ExpressionPropertyInterface(transform.or) }); - return _thisFunction; - }; - }(); - const LayerExpressionInterface = function() { - function getMatrix(time) { - var toWorldMat = new Matrix(); - if (time !== void 0) this._elem.finalTransform.mProp.getValueAtTime(time).clone(toWorldMat); - else this._elem.finalTransform.mProp.applyToMatrix(toWorldMat); - return toWorldMat; - } - function toWorldVec(arr, time) { - var toWorldMat = this.getMatrix(time); - toWorldMat.props[12] = 0; - toWorldMat.props[13] = 0; - toWorldMat.props[14] = 0; - return this.applyPoint(toWorldMat, arr); - } - function toWorld(arr, time) { - var toWorldMat = this.getMatrix(time); - return this.applyPoint(toWorldMat, arr); - } - function fromWorldVec(arr, time) { - var toWorldMat = this.getMatrix(time); - toWorldMat.props[12] = 0; - toWorldMat.props[13] = 0; - toWorldMat.props[14] = 0; - return this.invertPoint(toWorldMat, arr); - } - function fromWorld(arr, time) { - var toWorldMat = this.getMatrix(time); - return this.invertPoint(toWorldMat, arr); - } - function applyPoint(matrix, arr) { - if (this._elem.hierarchy && this._elem.hierarchy.length) { - var i; - var len = this._elem.hierarchy.length; - for (i = 0; i < len; i += 1) this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix); - } - return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0); - } - function invertPoint(matrix, arr) { - if (this._elem.hierarchy && this._elem.hierarchy.length) { - var i; - var len = this._elem.hierarchy.length; - for (i = 0; i < len; i += 1) this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix); - } - return matrix.inversePoint(arr); - } - function fromComp(arr) { - var toWorldMat = new Matrix(); - toWorldMat.reset(); - this._elem.finalTransform.mProp.applyToMatrix(toWorldMat); - if (this._elem.hierarchy && this._elem.hierarchy.length) { - var i; - var len = this._elem.hierarchy.length; - for (i = 0; i < len; i += 1) this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat); - return toWorldMat.inversePoint(arr); - } - return toWorldMat.inversePoint(arr); - } - function sampleImage() { - return [ - 1, - 1, - 1, - 1 - ]; - } - return function(elem) { - var transformInterface; - function _registerMaskInterface(maskManager) { - _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem); - } - function _registerEffectsInterface(effects) { - _thisLayerFunction.effect = effects; - } - function _thisLayerFunction(name) { - switch (name) { - case "ADBE Root Vectors Group": - case "Contents": - case 2: return _thisLayerFunction.shapeInterface; - case 1: - case 6: - case "Transform": - case "transform": - case "ADBE Transform Group": return transformInterface; - case 4: - case "ADBE Effect Parade": - case "effects": - case "Effects": return _thisLayerFunction.effect; - case "ADBE Text Properties": return _thisLayerFunction.textInterface; - default: return null; - } - } - _thisLayerFunction.getMatrix = getMatrix; - _thisLayerFunction.invertPoint = invertPoint; - _thisLayerFunction.applyPoint = applyPoint; - _thisLayerFunction.toWorld = toWorld; - _thisLayerFunction.toWorldVec = toWorldVec; - _thisLayerFunction.fromWorld = fromWorld; - _thisLayerFunction.fromWorldVec = fromWorldVec; - _thisLayerFunction.toComp = toWorld; - _thisLayerFunction.fromComp = fromComp; - _thisLayerFunction.sampleImage = sampleImage; - _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem); - _thisLayerFunction._elem = elem; - transformInterface = TransformExpressionInterface(elem.finalTransform.mProp); - var anchorPointDescriptor = getDescriptor(transformInterface, "anchorPoint"); - Object.defineProperties(_thisLayerFunction, { - hasParent: { get: function() { - return elem.hierarchy.length; - } }, - parent: { get: function() { - return elem.hierarchy[0].layerInterface; - } }, - rotation: getDescriptor(transformInterface, "rotation"), - scale: getDescriptor(transformInterface, "scale"), - position: getDescriptor(transformInterface, "position"), - opacity: getDescriptor(transformInterface, "opacity"), - anchorPoint: anchorPointDescriptor, - anchor_point: anchorPointDescriptor, - transform: { get: function() { - return transformInterface; - } }, - active: { get: function() { - return elem.isInRange; - } } - }); - _thisLayerFunction.startTime = elem.data.st; - _thisLayerFunction.index = elem.data.ind; - _thisLayerFunction.source = elem.data.refId; - _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100; - _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100; - _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate; - _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate; - _thisLayerFunction._name = elem.data.nm; - _thisLayerFunction.registerMaskInterface = _registerMaskInterface; - _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface; - return _thisLayerFunction; - }; - }(); - const propertyGroupFactory = function() { - return function(interfaceFunction, parentPropertyGroup) { - return function(val) { - val = val === void 0 ? 1 : val; - if (val <= 0) return interfaceFunction; - return parentPropertyGroup(val - 1); - }; - }; - }(); - const PropertyInterface = function() { - return function(propertyName, propertyGroup) { - var interfaceFunction = { _name: propertyName }; - function _propertyGroup(val) { - val = val === void 0 ? 1 : val; - if (val <= 0) return interfaceFunction; - return propertyGroup(val - 1); - } - return _propertyGroup; - }; - }(); - const EffectsExpressionInterface = function() { - var ob = { createEffectsInterface }; - function createEffectsInterface(elem, propertyGroup) { - if (elem.effectsManager) { - var effectElements = []; - var effectsData = elem.data.ef; - var i; - var len = elem.effectsManager.effectElements.length; - for (i = 0; i < len; i += 1) effectElements.push(createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem)); - var effects = elem.data.ef || []; - var groupInterface = function(name) { - i = 0; - len = effects.length; - while (i < len) { - if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) return effectElements[i]; - i += 1; - } - return null; - }; - Object.defineProperty(groupInterface, "numProperties", { get: function() { - return effects.length; - } }); - return groupInterface; - } - return null; - } - function createGroupInterface(data, elements, propertyGroup, elem) { - function groupInterface(name) { - var effects = data.ef; - var i2 = 0; - var len2 = effects.length; - while (i2 < len2) { - if (name === effects[i2].nm || name === effects[i2].mn || name === effects[i2].ix) { - if (effects[i2].ty === 5) return effectElements[i2]; - return effectElements[i2](); - } - i2 += 1; - } - throw new Error(); - } - var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup); - var effectElements = []; - var i; - var len = data.ef.length; - for (i = 0; i < len; i += 1) if (data.ef[i].ty === 5) effectElements.push(createGroupInterface(data.ef[i], elements.effectElements[i], elements.effectElements[i].propertyGroup, elem)); - else effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup)); - if (data.mn === "ADBE Color Control") Object.defineProperty(groupInterface, "color", { get: function() { - return effectElements[0](); - } }); - Object.defineProperties(groupInterface, { - numProperties: { get: function() { - return data.np; - } }, - _name: { value: data.nm }, - propertyGroup: { value: _propertyGroup } - }); - groupInterface.enabled = data.en !== 0; - groupInterface.active = groupInterface.enabled; - return groupInterface; - } - function createValueInterface(element, type, elem, propertyGroup) { - var expressionProperty = ExpressionPropertyInterface(element.p); - function interfaceFunction() { - if (type === 10) return elem.comp.compInterface(element.p.v); - return expressionProperty(); - } - if (element.p.setGroupProperty) element.p.setGroupProperty(PropertyInterface("", propertyGroup)); - return interfaceFunction; - } - return ob; - }(); - const CompExpressionInterface = function() { - return function(comp) { - function _thisLayerFunction(name) { - var i = 0; - var len = comp.layers.length; - while (i < len) { - if (comp.layers[i].nm === name || comp.layers[i].ind === name) return comp.elements[i].layerInterface; - i += 1; - } - return null; - } - Object.defineProperty(_thisLayerFunction, "_name", { value: comp.data.nm }); - _thisLayerFunction.layer = _thisLayerFunction; - _thisLayerFunction.pixelAspect = 1; - _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h; - _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w; - _thisLayerFunction.pixelAspect = 1; - _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate; - _thisLayerFunction.displayStartTime = 0; - _thisLayerFunction.numLayers = comp.layers.length; - return _thisLayerFunction; - }; - }(); - const ShapePathInterface = function() { - return function pathInterfaceFactory(shape, view, propertyGroup) { - var prop = view.sh; - function interfaceFunction(val) { - if (val === "Shape" || val === "shape" || val === "Path" || val === "path" || val === "ADBE Vector Shape" || val === 2) return interfaceFunction.path; - return null; - } - var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); - prop.setGroupProperty(PropertyInterface("Path", _propertyGroup)); - Object.defineProperties(interfaceFunction, { - path: { get: function() { - if (prop.k) prop.getValue(); - return prop; - } }, - shape: { get: function() { - if (prop.k) prop.getValue(); - return prop; - } }, - _name: { value: shape.nm }, - ix: { value: shape.ix }, - propertyIndex: { value: shape.ix }, - mn: { value: shape.mn }, - propertyGroup: { value: propertyGroup } - }); - return interfaceFunction; - }; - }(); - const ShapeExpressionInterface = function() { - function iterateElements(shapes, view, propertyGroup) { - var arr = []; - var i; - var len = shapes ? shapes.length : 0; - for (i = 0; i < len; i += 1) if (shapes[i].ty === "gr") arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup)); - else if (shapes[i].ty === "fl") arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup)); - else if (shapes[i].ty === "st") arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup)); - else if (shapes[i].ty === "tm") arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup)); - else if (shapes[i].ty === "tr"); - else if (shapes[i].ty === "el") arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup)); - else if (shapes[i].ty === "sr") arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup)); - else if (shapes[i].ty === "sh") arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup)); - else if (shapes[i].ty === "rc") arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup)); - else if (shapes[i].ty === "rd") arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup)); - else if (shapes[i].ty === "rp") arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup)); - else if (shapes[i].ty === "gf") arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup)); - else arr.push(defaultInterfaceFactory(shapes[i], view[i])); - return arr; - } - function contentsInterfaceFactory(shape, view, propertyGroup) { - var interfaces; - var interfaceFunction = function _interfaceFunction(value) { - var i = 0; - var len = interfaces.length; - while (i < len) { - if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) return interfaces[i]; - i += 1; - } - if (typeof value === "number") return interfaces[value - 1]; - return null; - }; - interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); - interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup); - interfaceFunction.numProperties = interfaces.length; - interfaceFunction.transform = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup); - interfaceFunction.propertyIndex = shape.cix; - interfaceFunction._name = shape.nm; - return interfaceFunction; - } - function groupInterfaceFactory(shape, view, propertyGroup) { - var interfaceFunction = function _interfaceFunction(value) { - switch (value) { - case "ADBE Vectors Group": - case "Contents": - case 2: return interfaceFunction.content; - default: return interfaceFunction.transform; - } - }; - interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); - var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup); - var transformInterface = transformInterfaceFactory(shape.it[shape.it.length - 1], view.it[view.it.length - 1], interfaceFunction.propertyGroup); - interfaceFunction.content = content; - interfaceFunction.transform = transformInterface; - Object.defineProperty(interfaceFunction, "_name", { get: function() { - return shape.nm; - } }); - interfaceFunction.numProperties = shape.np; - interfaceFunction.propertyIndex = shape.ix; - interfaceFunction.nm = shape.nm; - interfaceFunction.mn = shape.mn; - return interfaceFunction; - } - function fillInterfaceFactory(shape, view, propertyGroup) { - function interfaceFunction(val) { - if (val === "Color" || val === "color") return interfaceFunction.color; - if (val === "Opacity" || val === "opacity") return interfaceFunction.opacity; - return null; - } - Object.defineProperties(interfaceFunction, { - color: { get: ExpressionPropertyInterface(view.c) }, - opacity: { get: ExpressionPropertyInterface(view.o) }, - _name: { value: shape.nm }, - mn: { value: shape.mn } - }); - view.c.setGroupProperty(PropertyInterface("Color", propertyGroup)); - view.o.setGroupProperty(PropertyInterface("Opacity", propertyGroup)); - return interfaceFunction; - } - function gradientFillInterfaceFactory(shape, view, propertyGroup) { - function interfaceFunction(val) { - if (val === "Start Point" || val === "start point") return interfaceFunction.startPoint; - if (val === "End Point" || val === "end point") return interfaceFunction.endPoint; - if (val === "Opacity" || val === "opacity") return interfaceFunction.opacity; - return null; - } - Object.defineProperties(interfaceFunction, { - startPoint: { get: ExpressionPropertyInterface(view.s) }, - endPoint: { get: ExpressionPropertyInterface(view.e) }, - opacity: { get: ExpressionPropertyInterface(view.o) }, - type: { get: function() { - return "a"; - } }, - _name: { value: shape.nm }, - mn: { value: shape.mn } - }); - view.s.setGroupProperty(PropertyInterface("Start Point", propertyGroup)); - view.e.setGroupProperty(PropertyInterface("End Point", propertyGroup)); - view.o.setGroupProperty(PropertyInterface("Opacity", propertyGroup)); - return interfaceFunction; - } - function defaultInterfaceFactory() { - function interfaceFunction() { - return null; - } - return interfaceFunction; - } - function strokeInterfaceFactory(shape, view, propertyGroup) { - var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); - var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup); - function addPropertyToDashOb(i2) { - Object.defineProperty(dashOb, shape.d[i2].nm, { get: ExpressionPropertyInterface(view.d.dataProps[i2].p) }); - } - var i; - var len = shape.d ? shape.d.length : 0; - var dashOb = {}; - for (i = 0; i < len; i += 1) { - addPropertyToDashOb(i); - view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup); - } - function interfaceFunction(val) { - if (val === "Color" || val === "color") return interfaceFunction.color; - if (val === "Opacity" || val === "opacity") return interfaceFunction.opacity; - if (val === "Stroke Width" || val === "stroke width") return interfaceFunction.strokeWidth; - return null; - } - Object.defineProperties(interfaceFunction, { - color: { get: ExpressionPropertyInterface(view.c) }, - opacity: { get: ExpressionPropertyInterface(view.o) }, - strokeWidth: { get: ExpressionPropertyInterface(view.w) }, - dash: { get: function() { - return dashOb; - } }, - _name: { value: shape.nm }, - mn: { value: shape.mn } - }); - view.c.setGroupProperty(PropertyInterface("Color", _propertyGroup)); - view.o.setGroupProperty(PropertyInterface("Opacity", _propertyGroup)); - view.w.setGroupProperty(PropertyInterface("Stroke Width", _propertyGroup)); - return interfaceFunction; - } - function trimInterfaceFactory(shape, view, propertyGroup) { - function interfaceFunction(val) { - if (val === shape.e.ix || val === "End" || val === "end") return interfaceFunction.end; - if (val === shape.s.ix) return interfaceFunction.start; - if (val === shape.o.ix) return interfaceFunction.offset; - return null; - } - var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); - interfaceFunction.propertyIndex = shape.ix; - view.s.setGroupProperty(PropertyInterface("Start", _propertyGroup)); - view.e.setGroupProperty(PropertyInterface("End", _propertyGroup)); - view.o.setGroupProperty(PropertyInterface("Offset", _propertyGroup)); - interfaceFunction.propertyIndex = shape.ix; - interfaceFunction.propertyGroup = propertyGroup; - Object.defineProperties(interfaceFunction, { - start: { get: ExpressionPropertyInterface(view.s) }, - end: { get: ExpressionPropertyInterface(view.e) }, - offset: { get: ExpressionPropertyInterface(view.o) }, - _name: { value: shape.nm } - }); - interfaceFunction.mn = shape.mn; - return interfaceFunction; - } - function transformInterfaceFactory(shape, view, propertyGroup) { - function interfaceFunction(value) { - if (shape.a.ix === value || value === "Anchor Point") return interfaceFunction.anchorPoint; - if (shape.o.ix === value || value === "Opacity") return interfaceFunction.opacity; - if (shape.p.ix === value || value === "Position") return interfaceFunction.position; - if (shape.r.ix === value || value === "Rotation" || value === "ADBE Vector Rotation") return interfaceFunction.rotation; - if (shape.s.ix === value || value === "Scale") return interfaceFunction.scale; - if (shape.sk && shape.sk.ix === value || value === "Skew") return interfaceFunction.skew; - if (shape.sa && shape.sa.ix === value || value === "Skew Axis") return interfaceFunction.skewAxis; - return null; - } - var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); - view.transform.mProps.o.setGroupProperty(PropertyInterface("Opacity", _propertyGroup)); - view.transform.mProps.p.setGroupProperty(PropertyInterface("Position", _propertyGroup)); - view.transform.mProps.a.setGroupProperty(PropertyInterface("Anchor Point", _propertyGroup)); - view.transform.mProps.s.setGroupProperty(PropertyInterface("Scale", _propertyGroup)); - view.transform.mProps.r.setGroupProperty(PropertyInterface("Rotation", _propertyGroup)); - if (view.transform.mProps.sk) { - view.transform.mProps.sk.setGroupProperty(PropertyInterface("Skew", _propertyGroup)); - view.transform.mProps.sa.setGroupProperty(PropertyInterface("Skew Angle", _propertyGroup)); - } - view.transform.op.setGroupProperty(PropertyInterface("Opacity", _propertyGroup)); - Object.defineProperties(interfaceFunction, { - opacity: { get: ExpressionPropertyInterface(view.transform.mProps.o) }, - position: { get: ExpressionPropertyInterface(view.transform.mProps.p) }, - anchorPoint: { get: ExpressionPropertyInterface(view.transform.mProps.a) }, - scale: { get: ExpressionPropertyInterface(view.transform.mProps.s) }, - rotation: { get: ExpressionPropertyInterface(view.transform.mProps.r) }, - skew: { get: ExpressionPropertyInterface(view.transform.mProps.sk) }, - skewAxis: { get: ExpressionPropertyInterface(view.transform.mProps.sa) }, - _name: { value: shape.nm } - }); - interfaceFunction.ty = "tr"; - interfaceFunction.mn = shape.mn; - interfaceFunction.propertyGroup = propertyGroup; - return interfaceFunction; - } - function ellipseInterfaceFactory(shape, view, propertyGroup) { - function interfaceFunction(value) { - if (shape.p.ix === value) return interfaceFunction.position; - if (shape.s.ix === value) return interfaceFunction.size; - return null; - } - var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); - interfaceFunction.propertyIndex = shape.ix; - var prop = view.sh.ty === "tm" ? view.sh.prop : view.sh; - prop.s.setGroupProperty(PropertyInterface("Size", _propertyGroup)); - prop.p.setGroupProperty(PropertyInterface("Position", _propertyGroup)); - Object.defineProperties(interfaceFunction, { - size: { get: ExpressionPropertyInterface(prop.s) }, - position: { get: ExpressionPropertyInterface(prop.p) }, - _name: { value: shape.nm } - }); - interfaceFunction.mn = shape.mn; - return interfaceFunction; - } - function starInterfaceFactory(shape, view, propertyGroup) { - function interfaceFunction(value) { - if (shape.p.ix === value) return interfaceFunction.position; - if (shape.r.ix === value) return interfaceFunction.rotation; - if (shape.pt.ix === value) return interfaceFunction.points; - if (shape.or.ix === value || value === "ADBE Vector Star Outer Radius") return interfaceFunction.outerRadius; - if (shape.os.ix === value) return interfaceFunction.outerRoundness; - if (shape.ir && (shape.ir.ix === value || value === "ADBE Vector Star Inner Radius")) return interfaceFunction.innerRadius; - if (shape.is && shape.is.ix === value) return interfaceFunction.innerRoundness; - return null; - } - var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); - var prop = view.sh.ty === "tm" ? view.sh.prop : view.sh; - interfaceFunction.propertyIndex = shape.ix; - prop.or.setGroupProperty(PropertyInterface("Outer Radius", _propertyGroup)); - prop.os.setGroupProperty(PropertyInterface("Outer Roundness", _propertyGroup)); - prop.pt.setGroupProperty(PropertyInterface("Points", _propertyGroup)); - prop.p.setGroupProperty(PropertyInterface("Position", _propertyGroup)); - prop.r.setGroupProperty(PropertyInterface("Rotation", _propertyGroup)); - if (shape.ir) { - prop.ir.setGroupProperty(PropertyInterface("Inner Radius", _propertyGroup)); - prop.is.setGroupProperty(PropertyInterface("Inner Roundness", _propertyGroup)); - } - Object.defineProperties(interfaceFunction, { - position: { get: ExpressionPropertyInterface(prop.p) }, - rotation: { get: ExpressionPropertyInterface(prop.r) }, - points: { get: ExpressionPropertyInterface(prop.pt) }, - outerRadius: { get: ExpressionPropertyInterface(prop.or) }, - outerRoundness: { get: ExpressionPropertyInterface(prop.os) }, - innerRadius: { get: ExpressionPropertyInterface(prop.ir) }, - innerRoundness: { get: ExpressionPropertyInterface(prop.is) }, - _name: { value: shape.nm } - }); - interfaceFunction.mn = shape.mn; - return interfaceFunction; - } - function rectInterfaceFactory(shape, view, propertyGroup) { - function interfaceFunction(value) { - if (shape.p.ix === value) return interfaceFunction.position; - if (shape.r.ix === value) return interfaceFunction.roundness; - if (shape.s.ix === value || value === "Size" || value === "ADBE Vector Rect Size") return interfaceFunction.size; - return null; - } - var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); - var prop = view.sh.ty === "tm" ? view.sh.prop : view.sh; - interfaceFunction.propertyIndex = shape.ix; - prop.p.setGroupProperty(PropertyInterface("Position", _propertyGroup)); - prop.s.setGroupProperty(PropertyInterface("Size", _propertyGroup)); - prop.r.setGroupProperty(PropertyInterface("Rotation", _propertyGroup)); - Object.defineProperties(interfaceFunction, { - position: { get: ExpressionPropertyInterface(prop.p) }, - roundness: { get: ExpressionPropertyInterface(prop.r) }, - size: { get: ExpressionPropertyInterface(prop.s) }, - _name: { value: shape.nm } - }); - interfaceFunction.mn = shape.mn; - return interfaceFunction; - } - function roundedInterfaceFactory(shape, view, propertyGroup) { - function interfaceFunction(value) { - if (shape.r.ix === value || value === "Round Corners 1") return interfaceFunction.radius; - return null; - } - var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); - var prop = view; - interfaceFunction.propertyIndex = shape.ix; - prop.rd.setGroupProperty(PropertyInterface("Radius", _propertyGroup)); - Object.defineProperties(interfaceFunction, { - radius: { get: ExpressionPropertyInterface(prop.rd) }, - _name: { value: shape.nm } - }); - interfaceFunction.mn = shape.mn; - return interfaceFunction; - } - function repeaterInterfaceFactory(shape, view, propertyGroup) { - function interfaceFunction(value) { - if (shape.c.ix === value || value === "Copies") return interfaceFunction.copies; - if (shape.o.ix === value || value === "Offset") return interfaceFunction.offset; - return null; - } - var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup); - var prop = view; - interfaceFunction.propertyIndex = shape.ix; - prop.c.setGroupProperty(PropertyInterface("Copies", _propertyGroup)); - prop.o.setGroupProperty(PropertyInterface("Offset", _propertyGroup)); - Object.defineProperties(interfaceFunction, { - copies: { get: ExpressionPropertyInterface(prop.c) }, - offset: { get: ExpressionPropertyInterface(prop.o) }, - _name: { value: shape.nm } - }); - interfaceFunction.mn = shape.mn; - return interfaceFunction; - } - return function(shapes, view, propertyGroup) { - var interfaces; - function _interfaceFunction(value) { - if (typeof value === "number") { - value = value === void 0 ? 1 : value; - if (value === 0) return propertyGroup; - return interfaces[value - 1]; - } - var i = 0; - var len = interfaces.length; - while (i < len) { - if (interfaces[i]._name === value) return interfaces[i]; - i += 1; - } - return null; - } - function parentGroupWrapper() { - return propertyGroup; - } - _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper); - interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup); - _interfaceFunction.numProperties = interfaces.length; - _interfaceFunction._name = "Contents"; - return _interfaceFunction; - }; - }(); - const TextExpressionInterface = function() { - return function(elem) { - var _prevValue; - var _sourceText; - function _thisLayerFunction(name) { - switch (name) { - case "ADBE Text Document": return _thisLayerFunction.sourceText; - default: return null; - } - } - Object.defineProperty(_thisLayerFunction, "sourceText", { get: function() { - elem.textProperty.getValue(); - var stringValue = elem.textProperty.currentData.t; - if (stringValue !== _prevValue) { - elem.textProperty.currentData.t = _prevValue; - _sourceText = new String(stringValue); - _sourceText.value = stringValue || new String(stringValue); - } - return _sourceText; - } }); - return _thisLayerFunction; - }; - }(); - const getBlendMode = function() { - var blendModeEnums = { - 0: "source-over", - 1: "multiply", - 2: "screen", - 3: "overlay", - 4: "darken", - 5: "lighten", - 6: "color-dodge", - 7: "color-burn", - 8: "hard-light", - 9: "soft-light", - 10: "difference", - 11: "exclusion", - 12: "hue", - 13: "saturation", - 14: "color", - 15: "luminosity" - }; - return function(mode) { - return blendModeEnums[mode] || ""; - }; - }(); - function SliderEffect(data, elem, container) { - this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container); - } - function AngleEffect(data, elem, container) { - this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container); - } - function ColorEffect(data, elem, container) { - this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container); - } - function PointEffect(data, elem, container) { - this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container); - } - function LayerIndexEffect(data, elem, container) { - this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container); - } - function MaskIndexEffect(data, elem, container) { - this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container); - } - function CheckboxEffect(data, elem, container) { - this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container); - } - function NoValueEffect() { - this.p = {}; - } - function EffectsManager(data, element) { - var effects = data.ef || []; - this.effectElements = []; - var i; - var len = effects.length; - var effectItem; - for (i = 0; i < len; i += 1) { - effectItem = new GroupEffect(effects[i], element); - this.effectElements.push(effectItem); - } - } - function GroupEffect(data, element) { - this.init(data, element); - } - extendPrototype([DynamicPropertyContainer], GroupEffect); - GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties; - GroupEffect.prototype.init = function(data, element) { - this.data = data; - this.effectElements = []; - this.initDynamicPropertyContainer(element); - var i; - var len = this.data.ef.length; - var eff; - var effects = this.data.ef; - for (i = 0; i < len; i += 1) { - eff = null; - switch (effects[i].ty) { - case 0: - eff = new SliderEffect(effects[i], element, this); - break; - case 1: - eff = new AngleEffect(effects[i], element, this); - break; - case 2: - eff = new ColorEffect(effects[i], element, this); - break; - case 3: - eff = new PointEffect(effects[i], element, this); - break; - case 4: - case 7: - eff = new CheckboxEffect(effects[i], element, this); - break; - case 10: - eff = new LayerIndexEffect(effects[i], element, this); - break; - case 11: - eff = new MaskIndexEffect(effects[i], element, this); - break; - case 5: - eff = new EffectsManager(effects[i], element); - break; - default: - eff = new NoValueEffect(effects[i]); - break; - } - if (eff) this.effectElements.push(eff); - } - }; - function BaseElement() {} - BaseElement.prototype = { - checkMasks: function() { - if (!this.data.hasMask) return false; - var i = 0; - var len = this.data.masksProperties.length; - while (i < len) { - if (this.data.masksProperties[i].mode !== "n" && this.data.masksProperties[i].cl !== false) return true; - i += 1; - } - return false; - }, - initExpressions: function() { - this.layerInterface = LayerExpressionInterface(this); - if (this.data.hasMask && this.maskManager) this.layerInterface.registerMaskInterface(this.maskManager); - var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface); - this.layerInterface.registerEffectsInterface(effectsInterface); - if (this.data.ty === 0 || this.data.xt) this.compInterface = CompExpressionInterface(this); - else if (this.data.ty === 4) { - this.layerInterface.shapeInterface = ShapeExpressionInterface(this.shapesData, this.itemsData, this.layerInterface); - this.layerInterface.content = this.layerInterface.shapeInterface; - } else if (this.data.ty === 5) { - this.layerInterface.textInterface = TextExpressionInterface(this); - this.layerInterface.text = this.layerInterface.textInterface; - } - }, - setBlendMode: function() { - var blendModeValue = getBlendMode(this.data.bm); - var elem = this.baseElement || this.layerElement; - elem.style["mix-blend-mode"] = blendModeValue; - }, - initBaseData: function(data, globalData, comp) { - this.globalData = globalData; - this.comp = comp; - this.data = data; - this.layerId = createElementID(); - if (!this.data.sr) this.data.sr = 1; - this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties); - }, - getType: function() { - return this.type; - }, - sourceRectAtTime: function() {} - }; - function FrameElement() {} - FrameElement.prototype = { - /** - * @function - * Initializes frame related properties. - * - */ - initFrame: function() { - this._isFirstFrame = false; - this.dynamicProperties = []; - this._mdf = false; - }, - /** - * @function - * Calculates all dynamic values - * - * @param {number} num - * current frame number in Layer's time - * @param {boolean} isVisible - * if layers is currently in range - * - */ - prepareProperties: function(num, isVisible) { - var i; - var len = this.dynamicProperties.length; - for (i = 0; i < len; i += 1) if (isVisible || this._isParent && this.dynamicProperties[i].propType === "transform") { - this.dynamicProperties[i].getValue(); - if (this.dynamicProperties[i]._mdf) { - this.globalData._mdf = true; - this._mdf = true; - } - } - }, - addDynamicProperty: function(prop) { - if (this.dynamicProperties.indexOf(prop) === -1) this.dynamicProperties.push(prop); - } - }; - const FootageInterface = function() { - var outlineInterfaceFactory = function(elem) { - var currentPropertyName = ""; - var currentProperty = elem.getFootageData(); - function init() { - currentPropertyName = ""; - currentProperty = elem.getFootageData(); - return searchProperty; - } - function searchProperty(value) { - if (currentProperty[value]) { - currentPropertyName = value; - currentProperty = currentProperty[value]; - if (typeof currentProperty === "object") return searchProperty; - return currentProperty; - } - var propertyNameIndex = value.indexOf(currentPropertyName); - if (propertyNameIndex !== -1) { - var index2 = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10); - currentProperty = currentProperty[index2]; - if (typeof currentProperty === "object") return searchProperty; - return currentProperty; - } - return ""; - } - return init; - }; - var dataInterfaceFactory = function(elem) { - function interfaceFunction(value) { - if (value === "Outline") return interfaceFunction.outlineInterface(); - return null; - } - interfaceFunction._name = "Outline"; - interfaceFunction.outlineInterface = outlineInterfaceFactory(elem); - return interfaceFunction; - }; - return function(elem) { - function _interfaceFunction(value) { - if (value === "Data") return _interfaceFunction.dataInterface; - return null; - } - _interfaceFunction._name = "Data"; - _interfaceFunction.dataInterface = dataInterfaceFactory(elem); - return _interfaceFunction; - }; - }(); - function FootageElement(data, globalData, comp) { - this.initFrame(); - this.initRenderable(); - this.assetData = globalData.getAssetData(data.refId); - this.footageData = globalData.imageLoader.getAsset(this.assetData); - this.initBaseData(data, globalData, comp); - } - FootageElement.prototype.prepareFrame = function() {}; - extendPrototype([ - RenderableElement, - BaseElement, - FrameElement - ], FootageElement); - FootageElement.prototype.getBaseElement = function() { - return null; - }; - FootageElement.prototype.renderFrame = function() {}; - FootageElement.prototype.destroy = function() {}; - FootageElement.prototype.initExpressions = function() { - this.layerInterface = FootageInterface(this); - }; - FootageElement.prototype.getFootageData = function() { - return this.footageData; - }; - function AudioElement(data, globalData, comp) { - this.initFrame(); - this.initRenderable(); - this.assetData = globalData.getAssetData(data.refId); - this.initBaseData(data, globalData, comp); - this._isPlaying = false; - this._canPlay = false; - var assetPath = this.globalData.getAssetsPath(this.assetData); - this.audio = this.globalData.audioController.createAudio(assetPath); - this._currentTime = 0; - this.globalData.audioController.addAudio(this); - this._volumeMultiplier = 1; - this._volume = 1; - this._previousVolume = null; - this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true }; - this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : { k: [100] }, 1, .01, this); - } - AudioElement.prototype.prepareFrame = function(num) { - this.prepareRenderableFrame(num, true); - this.prepareProperties(num, true); - if (!this.tm._placeholder) { - var timeRemapped = this.tm.v; - this._currentTime = timeRemapped; - } else this._currentTime = num / this.data.sr; - this._volume = this.lv.v[0]; - var totalVolume = this._volume * this._volumeMultiplier; - if (this._previousVolume !== totalVolume) { - this._previousVolume = totalVolume; - this.audio.volume(totalVolume); - } - }; - extendPrototype([ - RenderableElement, - BaseElement, - FrameElement - ], AudioElement); - AudioElement.prototype.renderFrame = function() { - if (this.isInRange && this._canPlay) { - if (!this._isPlaying) { - this.audio.play(); - this.audio.seek(this._currentTime / this.globalData.frameRate); - this._isPlaying = true; - } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > .1) this.audio.seek(this._currentTime / this.globalData.frameRate); - } - }; - AudioElement.prototype.show = function() {}; - AudioElement.prototype.hide = function() { - this.audio.pause(); - this._isPlaying = false; - }; - AudioElement.prototype.pause = function() { - this.audio.pause(); - this._isPlaying = false; - this._canPlay = false; - }; - AudioElement.prototype.resume = function() { - this._canPlay = true; - }; - AudioElement.prototype.setRate = function(rateValue) { - this.audio.rate(rateValue); - }; - AudioElement.prototype.volume = function(volumeValue) { - this._volumeMultiplier = volumeValue; - this._previousVolume = volumeValue * this._volume; - this.audio.volume(this._previousVolume); - }; - AudioElement.prototype.getBaseElement = function() { - return null; - }; - AudioElement.prototype.destroy = function() {}; - AudioElement.prototype.sourceRectAtTime = function() {}; - AudioElement.prototype.initExpressions = function() {}; - function BaseRenderer() {} - BaseRenderer.prototype.checkLayers = function(num) { - var i; - var len = this.layers.length; - var data; - this.completeLayers = true; - for (i = len - 1; i >= 0; i -= 1) { - if (!this.elements[i]) { - data = this.layers[i]; - if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) this.buildItem(i); - } - this.completeLayers = this.elements[i] ? this.completeLayers : false; - } - this.checkPendingElements(); - }; - BaseRenderer.prototype.createItem = function(layer) { - switch (layer.ty) { - case 2: return this.createImage(layer); - case 0: return this.createComp(layer); - case 1: return this.createSolid(layer); - case 3: return this.createNull(layer); - case 4: return this.createShape(layer); - case 5: return this.createText(layer); - case 6: return this.createAudio(layer); - case 13: return this.createCamera(layer); - case 15: return this.createFootage(layer); - default: return this.createNull(layer); - } - }; - BaseRenderer.prototype.createCamera = function() { - throw new Error("You're using a 3d camera. Try the html renderer."); - }; - BaseRenderer.prototype.createAudio = function(data) { - return new AudioElement(data, this.globalData, this); - }; - BaseRenderer.prototype.createFootage = function(data) { - return new FootageElement(data, this.globalData, this); - }; - BaseRenderer.prototype.buildAllItems = function() { - var i; - var len = this.layers.length; - for (i = 0; i < len; i += 1) this.buildItem(i); - this.checkPendingElements(); - }; - BaseRenderer.prototype.includeLayers = function(newLayers) { - this.completeLayers = false; - var i; - var len = newLayers.length; - var j; - var jLen = this.layers.length; - for (i = 0; i < len; i += 1) { - j = 0; - while (j < jLen) { - if (this.layers[j].id === newLayers[i].id) { - this.layers[j] = newLayers[i]; - break; - } - j += 1; - } - } - }; - BaseRenderer.prototype.setProjectInterface = function(pInterface) { - this.globalData.projectInterface = pInterface; - }; - BaseRenderer.prototype.initItems = function() { - if (!this.globalData.progressiveLoad) this.buildAllItems(); - }; - BaseRenderer.prototype.buildElementParenting = function(element, parentName, hierarchy) { - var elements = this.elements; - var layers = this.layers; - var i = 0; - var len = layers.length; - while (i < len) { - if (layers[i].ind == parentName) if (!elements[i] || elements[i] === true) { - this.buildItem(i); - this.addPendingElement(element); - } else { - hierarchy.push(elements[i]); - elements[i].setAsParent(); - if (layers[i].parent !== void 0) this.buildElementParenting(element, layers[i].parent, hierarchy); - else element.setHierarchy(hierarchy); - } - i += 1; - } - }; - BaseRenderer.prototype.addPendingElement = function(element) { - this.pendingElements.push(element); - }; - BaseRenderer.prototype.searchExtraCompositions = function(assets) { - var i; - var len = assets.length; - for (i = 0; i < len; i += 1) if (assets[i].xt) { - var comp = this.createComp(assets[i]); - comp.initExpressions(); - this.globalData.projectInterface.registerComposition(comp); - } - }; - BaseRenderer.prototype.getElementByPath = function(path) { - var pathValue = path.shift(); - var element; - if (typeof pathValue === "number") element = this.elements[pathValue]; - else { - var i; - var len = this.elements.length; - for (i = 0; i < len; i += 1) if (this.elements[i].data.nm === pathValue) { - element = this.elements[i]; - break; - } - } - if (path.length === 0) return element; - return element.getElementByPath(path); - }; - BaseRenderer.prototype.setupGlobalData = function(animData, fontsContainer) { - this.globalData.fontManager = new FontManager(); - this.globalData.fontManager.addChars(animData.chars); - this.globalData.fontManager.addFonts(animData.fonts, fontsContainer); - this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem); - this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem); - this.globalData.imageLoader = this.animationItem.imagePreloader; - this.globalData.audioController = this.animationItem.audioController; - this.globalData.frameId = 0; - this.globalData.frameRate = animData.fr; - this.globalData.nm = animData.nm; - this.globalData.compSize = { - w: animData.w, - h: animData.h - }; - }; - function TransformElement() {} - TransformElement.prototype = { - initTransform: function() { - this.finalTransform = { - mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : { o: 0 }, - _matMdf: false, - _opMdf: false, - mat: new Matrix() - }; - if (this.data.ao) this.finalTransform.mProp.autoOriented = true; - if (this.data.ty !== 11); - }, - renderTransform: function() { - this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame; - this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame; - if (this.hierarchy) { - var mat; - var finalMat = this.finalTransform.mat; - var i = 0; - var len = this.hierarchy.length; - if (!this.finalTransform._matMdf) while (i < len) { - if (this.hierarchy[i].finalTransform.mProp._mdf) { - this.finalTransform._matMdf = true; - break; - } - i += 1; - } - if (this.finalTransform._matMdf) { - mat = this.finalTransform.mProp.v.props; - finalMat.cloneFromProps(mat); - for (i = 0; i < len; i += 1) { - mat = this.hierarchy[i].finalTransform.mProp.v.props; - finalMat.transform(mat[0], mat[1], mat[2], mat[3], mat[4], mat[5], mat[6], mat[7], mat[8], mat[9], mat[10], mat[11], mat[12], mat[13], mat[14], mat[15]); - } - } - } - }, - globalToLocal: function(pt) { - var transforms = []; - transforms.push(this.finalTransform); - var flag = true; - var comp = this.comp; - while (flag) if (comp.finalTransform) { - if (comp.data.hasMask) transforms.splice(0, 0, comp.finalTransform); - comp = comp.comp; - } else flag = false; - var i; - var len = transforms.length; - var ptNew; - for (i = 0; i < len; i += 1) { - ptNew = transforms[i].mat.applyToPointArray(0, 0, 0); - pt = [ - pt[0] - ptNew[0], - pt[1] - ptNew[1], - 0 - ]; - } - return pt; - }, - mHelper: new Matrix() - }; - function MaskElement(data, element, globalData) { - this.data = data; - this.element = element; - this.globalData = globalData; - this.storedData = []; - this.masksProperties = this.data.masksProperties || []; - this.maskElement = null; - var defs = this.globalData.defs; - var i; - var len = this.masksProperties ? this.masksProperties.length : 0; - this.viewData = createSizedArray(len); - this.solidPath = ""; - var path; - var properties = this.masksProperties; - var count = 0; - var currentMasks = []; - var j; - var jLen; - var layerId = createElementID(); - var rect; - var expansor; - var feMorph; - var x; - var maskType = "clipPath"; - var maskRef = "clip-path"; - for (i = 0; i < len; i += 1) { - if (properties[i].mode !== "a" && properties[i].mode !== "n" || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) { - maskType = "mask"; - maskRef = "mask"; - } - if ((properties[i].mode === "s" || properties[i].mode === "i") && count === 0) { - rect = createNS("rect"); - rect.setAttribute("fill", "#ffffff"); - rect.setAttribute("width", this.element.comp.data.w || 0); - rect.setAttribute("height", this.element.comp.data.h || 0); - currentMasks.push(rect); - } else rect = null; - path = createNS("path"); - if (properties[i].mode === "n") { - this.viewData[i] = { - op: PropertyFactory.getProp(this.element, properties[i].o, 0, .01, this.element), - prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3), - elem: path, - lastPath: "" - }; - defs.appendChild(path); - } else { - count += 1; - path.setAttribute("fill", properties[i].mode === "s" ? "#000000" : "#ffffff"); - path.setAttribute("clip-rule", "nonzero"); - var filterID; - if (properties[i].x.k !== 0) { - maskType = "mask"; - maskRef = "mask"; - x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element); - filterID = createElementID(); - expansor = createNS("filter"); - expansor.setAttribute("id", filterID); - feMorph = createNS("feMorphology"); - feMorph.setAttribute("operator", "erode"); - feMorph.setAttribute("in", "SourceGraphic"); - feMorph.setAttribute("radius", "0"); - expansor.appendChild(feMorph); - defs.appendChild(expansor); - path.setAttribute("stroke", properties[i].mode === "s" ? "#000000" : "#ffffff"); - } else { - feMorph = null; - x = null; - } - this.storedData[i] = { - elem: path, - x, - expan: feMorph, - lastPath: "", - lastOperator: "", - filterId: filterID, - lastRadius: 0 - }; - if (properties[i].mode === "i") { - jLen = currentMasks.length; - var g = createNS("g"); - for (j = 0; j < jLen; j += 1) g.appendChild(currentMasks[j]); - var mask = createNS("mask"); - mask.setAttribute("mask-type", "alpha"); - mask.setAttribute("id", layerId + "_" + count); - mask.appendChild(path); - defs.appendChild(mask); - g.setAttribute("mask", "url(" + getLocationHref() + "#" + layerId + "_" + count + ")"); - currentMasks.length = 0; - currentMasks.push(g); - } else currentMasks.push(path); - if (properties[i].inv && !this.solidPath) this.solidPath = this.createLayerSolidPath(); - this.viewData[i] = { - elem: path, - lastPath: "", - op: PropertyFactory.getProp(this.element, properties[i].o, 0, .01, this.element), - prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3), - invRect: rect - }; - if (!this.viewData[i].prop.k) this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]); - } - } - this.maskElement = createNS(maskType); - len = currentMasks.length; - for (i = 0; i < len; i += 1) this.maskElement.appendChild(currentMasks[i]); - if (count > 0) { - this.maskElement.setAttribute("id", layerId); - this.element.maskedElement.setAttribute(maskRef, "url(" + getLocationHref() + "#" + layerId + ")"); - defs.appendChild(this.maskElement); - } - if (this.viewData.length) this.element.addRenderableComponent(this); - } - MaskElement.prototype.getMaskProperty = function(pos) { - return this.viewData[pos].prop; - }; - MaskElement.prototype.renderFrame = function(isFirstFrame) { - var finalMat = this.element.finalTransform.mat; - var i; - var len = this.masksProperties.length; - for (i = 0; i < len; i += 1) { - if (this.viewData[i].prop._mdf || isFirstFrame) this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]); - if (this.viewData[i].op._mdf || isFirstFrame) this.viewData[i].elem.setAttribute("fill-opacity", this.viewData[i].op.v); - if (this.masksProperties[i].mode !== "n") { - if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) this.viewData[i].invRect.setAttribute("transform", finalMat.getInverseMatrix().to2dCSS()); - if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) { - var feMorph = this.storedData[i].expan; - if (this.storedData[i].x.v < 0) { - if (this.storedData[i].lastOperator !== "erode") { - this.storedData[i].lastOperator = "erode"; - this.storedData[i].elem.setAttribute("filter", "url(" + getLocationHref() + "#" + this.storedData[i].filterId + ")"); - } - feMorph.setAttribute("radius", -this.storedData[i].x.v); - } else { - if (this.storedData[i].lastOperator !== "dilate") { - this.storedData[i].lastOperator = "dilate"; - this.storedData[i].elem.setAttribute("filter", null); - } - this.storedData[i].elem.setAttribute("stroke-width", this.storedData[i].x.v * 2); - } - } - } - } - }; - MaskElement.prototype.getMaskelement = function() { - return this.maskElement; - }; - MaskElement.prototype.createLayerSolidPath = function() { - var path = "M0,0 "; - path += " h" + this.globalData.compSize.w; - path += " v" + this.globalData.compSize.h; - path += " h-" + this.globalData.compSize.w; - path += " v-" + this.globalData.compSize.h + " "; - return path; - }; - MaskElement.prototype.drawPath = function(pathData, pathNodes, viewData) { - var pathString = " M" + pathNodes.v[0][0] + "," + pathNodes.v[0][1]; - var i; - var len = pathNodes._length; - for (i = 1; i < len; i += 1) pathString += " C" + pathNodes.o[i - 1][0] + "," + pathNodes.o[i - 1][1] + " " + pathNodes.i[i][0] + "," + pathNodes.i[i][1] + " " + pathNodes.v[i][0] + "," + pathNodes.v[i][1]; - if (pathNodes.c && len > 1) pathString += " C" + pathNodes.o[i - 1][0] + "," + pathNodes.o[i - 1][1] + " " + pathNodes.i[0][0] + "," + pathNodes.i[0][1] + " " + pathNodes.v[0][0] + "," + pathNodes.v[0][1]; - if (viewData.lastPath !== pathString) { - var pathShapeValue = ""; - if (viewData.elem) { - if (pathNodes.c) pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString; - viewData.elem.setAttribute("d", pathShapeValue); - } - viewData.lastPath = pathString; - } - }; - MaskElement.prototype.destroy = function() { - this.element = null; - this.globalData = null; - this.maskElement = null; - this.data = null; - this.masksProperties = null; - }; - const filtersFactory = function() { - var ob = {}; - ob.createFilter = createFilter; - ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter; - function createFilter(filId, skipCoordinates) { - var fil = createNS("filter"); - fil.setAttribute("id", filId); - if (skipCoordinates !== true) { - fil.setAttribute("filterUnits", "objectBoundingBox"); - fil.setAttribute("x", "0%"); - fil.setAttribute("y", "0%"); - fil.setAttribute("width", "100%"); - fil.setAttribute("height", "100%"); - } - return fil; - } - function createAlphaToLuminanceFilter() { - var feColorMatrix = createNS("feColorMatrix"); - feColorMatrix.setAttribute("type", "matrix"); - feColorMatrix.setAttribute("color-interpolation-filters", "sRGB"); - feColorMatrix.setAttribute("values", "0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1"); - return feColorMatrix; - } - return ob; - }(); - const featureSupport = function() { - var ob = { maskType: true }; - if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\/\d./i.test(navigator.userAgent)) ob.maskType = false; - return ob; - }(); - var registeredEffects = {}; - var idPrefix = "filter_result_"; - function SVGEffects(elem) { - var i; - var source = "SourceGraphic"; - var len = elem.data.ef ? elem.data.ef.length : 0; - var filId = createElementID(); - var fil = filtersFactory.createFilter(filId, true); - var count = 0; - this.filters = []; - var filterManager; - for (i = 0; i < len; i += 1) { - filterManager = null; - var type = elem.data.ef[i].ty; - if (registeredEffects[type]) { - var Effect = registeredEffects[type].effect; - filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source); - source = idPrefix + count; - if (registeredEffects[type].countsAsEffect) count += 1; - } - if (filterManager) this.filters.push(filterManager); - } - if (count) { - elem.globalData.defs.appendChild(fil); - elem.layerElement.setAttribute("filter", "url(" + getLocationHref() + "#" + filId + ")"); - } - if (this.filters.length) elem.addRenderableComponent(this); - } - SVGEffects.prototype.renderFrame = function(_isFirstFrame) { - var i; - var len = this.filters.length; - for (i = 0; i < len; i += 1) this.filters[i].renderFrame(_isFirstFrame); - }; - function SVGBaseElement() {} - SVGBaseElement.prototype = { - initRendererElement: function() { - this.layerElement = createNS("g"); - }, - createContainerElements: function() { - this.matteElement = createNS("g"); - this.transformedElement = this.layerElement; - this.maskedElement = this.layerElement; - this._sizeChanged = false; - var layerElementParent = null; - var filId; - var fil; - var gg; - if (this.data.td) { - if (this.data.td == 3 || this.data.td == 1) { - var masker = createNS("mask"); - masker.setAttribute("id", this.layerId); - masker.setAttribute("mask-type", this.data.td == 3 ? "luminance" : "alpha"); - masker.appendChild(this.layerElement); - layerElementParent = masker; - this.globalData.defs.appendChild(masker); - if (!featureSupport.maskType && this.data.td == 1) { - masker.setAttribute("mask-type", "luminance"); - filId = createElementID(); - fil = filtersFactory.createFilter(filId); - this.globalData.defs.appendChild(fil); - fil.appendChild(filtersFactory.createAlphaToLuminanceFilter()); - gg = createNS("g"); - gg.appendChild(this.layerElement); - layerElementParent = gg; - masker.appendChild(gg); - gg.setAttribute("filter", "url(" + getLocationHref() + "#" + filId + ")"); - } - } else if (this.data.td == 2) { - var maskGroup = createNS("mask"); - maskGroup.setAttribute("id", this.layerId); - maskGroup.setAttribute("mask-type", "alpha"); - var maskGrouper = createNS("g"); - maskGroup.appendChild(maskGrouper); - filId = createElementID(); - fil = filtersFactory.createFilter(filId); - var feCTr = createNS("feComponentTransfer"); - feCTr.setAttribute("in", "SourceGraphic"); - fil.appendChild(feCTr); - var feFunc = createNS("feFuncA"); - feFunc.setAttribute("type", "table"); - feFunc.setAttribute("tableValues", "1.0 0.0"); - feCTr.appendChild(feFunc); - this.globalData.defs.appendChild(fil); - var alphaRect = createNS("rect"); - alphaRect.setAttribute("width", this.comp.data.w); - alphaRect.setAttribute("height", this.comp.data.h); - alphaRect.setAttribute("x", "0"); - alphaRect.setAttribute("y", "0"); - alphaRect.setAttribute("fill", "#ffffff"); - alphaRect.setAttribute("opacity", "0"); - maskGrouper.setAttribute("filter", "url(" + getLocationHref() + "#" + filId + ")"); - maskGrouper.appendChild(alphaRect); - maskGrouper.appendChild(this.layerElement); - layerElementParent = maskGrouper; - if (!featureSupport.maskType) { - maskGroup.setAttribute("mask-type", "luminance"); - fil.appendChild(filtersFactory.createAlphaToLuminanceFilter()); - gg = createNS("g"); - maskGrouper.appendChild(alphaRect); - gg.appendChild(this.layerElement); - layerElementParent = gg; - maskGrouper.appendChild(gg); - } - this.globalData.defs.appendChild(maskGroup); - } - } else if (this.data.tt) { - this.matteElement.appendChild(this.layerElement); - layerElementParent = this.matteElement; - this.baseElement = this.matteElement; - } else this.baseElement = this.layerElement; - if (this.data.ln) this.layerElement.setAttribute("id", this.data.ln); - if (this.data.cl) this.layerElement.setAttribute("class", this.data.cl); - if (this.data.ty === 0 && !this.data.hd) { - var cp = createNS("clipPath"); - var pt = createNS("path"); - pt.setAttribute("d", "M0,0 L" + this.data.w + ",0 L" + this.data.w + "," + this.data.h + " L0," + this.data.h + "z"); - var clipId = createElementID(); - cp.setAttribute("id", clipId); - cp.appendChild(pt); - this.globalData.defs.appendChild(cp); - if (this.checkMasks()) { - var cpGroup = createNS("g"); - cpGroup.setAttribute("clip-path", "url(" + getLocationHref() + "#" + clipId + ")"); - cpGroup.appendChild(this.layerElement); - this.transformedElement = cpGroup; - if (layerElementParent) layerElementParent.appendChild(this.transformedElement); - else this.baseElement = this.transformedElement; - } else this.layerElement.setAttribute("clip-path", "url(" + getLocationHref() + "#" + clipId + ")"); - } - if (this.data.bm !== 0) this.setBlendMode(); - }, - renderElement: function() { - if (this.finalTransform._matMdf) this.transformedElement.setAttribute("transform", this.finalTransform.mat.to2dCSS()); - if (this.finalTransform._opMdf) this.transformedElement.setAttribute("opacity", this.finalTransform.mProp.o.v); - }, - destroyBaseElement: function() { - this.layerElement = null; - this.matteElement = null; - this.maskManager.destroy(); - }, - getBaseElement: function() { - if (this.data.hd) return null; - return this.baseElement; - }, - createRenderableComponents: function() { - this.maskManager = new MaskElement(this.data, this, this.globalData); - this.renderableEffectsManager = new SVGEffects(this); - }, - setMatte: function(id) { - if (!this.matteElement) return; - this.matteElement.setAttribute("mask", "url(" + getLocationHref() + "#" + id + ")"); - } - }; - function HierarchyElement() {} - HierarchyElement.prototype = { - /** - * @function - * Initializes hierarchy properties - * - */ - initHierarchy: function() { - this.hierarchy = []; - this._isParent = false; - this.checkParenting(); - }, - /** - * @function - * Sets layer's hierarchy. - * @param {array} hierarch - * layer's parent list - * - */ - setHierarchy: function(hierarchy) { - this.hierarchy = hierarchy; - }, - /** - * @function - * Sets layer as parent. - * - */ - setAsParent: function() { - this._isParent = true; - }, - /** - * @function - * Searches layer's parenting chain - * - */ - checkParenting: function() { - if (this.data.parent !== void 0) this.comp.buildElementParenting(this, this.data.parent, []); - } - }; - function RenderableDOMElement() {} - (function() { - extendPrototype([RenderableElement, createProxyFunction({ - initElement: function(data, globalData, comp) { - this.initFrame(); - this.initBaseData(data, globalData, comp); - this.initTransform(data, globalData, comp); - this.initHierarchy(); - this.initRenderable(); - this.initRendererElement(); - this.createContainerElements(); - this.createRenderableComponents(); - this.createContent(); - this.hide(); - }, - hide: function() { - if (!this.hidden && (!this.isInRange || this.isTransparent)) { - var elem = this.baseElement || this.layerElement; - elem.style.display = "none"; - this.hidden = true; - } - }, - show: function() { - if (this.isInRange && !this.isTransparent) { - if (!this.data.hd) { - var elem = this.baseElement || this.layerElement; - elem.style.display = "block"; - } - this.hidden = false; - this._isFirstFrame = true; - } - }, - renderFrame: function() { - if (this.data.hd || this.hidden) return; - this.renderTransform(); - this.renderRenderable(); - this.renderElement(); - this.renderInnerContent(); - if (this._isFirstFrame) this._isFirstFrame = false; - }, - renderInnerContent: function() {}, - prepareFrame: function(num) { - this._mdf = false; - this.prepareRenderableFrame(num); - this.prepareProperties(num, this.isInRange); - this.checkTransparency(); - }, - destroy: function() { - this.innerElem = null; - this.destroyBaseElement(); - } - })], RenderableDOMElement); - })(); - function IImageElement(data, globalData, comp) { - this.assetData = globalData.getAssetData(data.refId); - this.initElement(data, globalData, comp); - this.sourceRect = { - top: 0, - left: 0, - width: this.assetData.w, - height: this.assetData.h - }; - } - extendPrototype([ - BaseElement, - TransformElement, - SVGBaseElement, - HierarchyElement, - FrameElement, - RenderableDOMElement - ], IImageElement); - IImageElement.prototype.createContent = function() { - var assetPath = this.globalData.getAssetsPath(this.assetData); - this.innerElem = createNS("image"); - this.innerElem.setAttribute("width", this.assetData.w + "px"); - this.innerElem.setAttribute("height", this.assetData.h + "px"); - this.innerElem.setAttribute("preserveAspectRatio", this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio); - this.innerElem.setAttributeNS("http://www.w3.org/1999/xlink", "href", assetPath); - this.layerElement.appendChild(this.innerElem); - }; - IImageElement.prototype.sourceRectAtTime = function() { - return this.sourceRect; - }; - function ProcessedElement(element, position) { - this.elem = element; - this.pos = position; - } - function IShapeElement() {} - IShapeElement.prototype = { - addShapeToModifiers: function(data) { - var i; - var len = this.shapeModifiers.length; - for (i = 0; i < len; i += 1) this.shapeModifiers[i].addShape(data); - }, - isShapeInAnimatedModifiers: function(data) { - var i = 0; - var len = this.shapeModifiers.length; - while (i < len) if (this.shapeModifiers[i].isAnimatedWithShape(data)) return true; - return false; - }, - renderModifiers: function() { - if (!this.shapeModifiers.length) return; - var i; - var len = this.shapes.length; - for (i = 0; i < len; i += 1) this.shapes[i].sh.reset(); - len = this.shapeModifiers.length; - var shouldBreakProcess; - for (i = len - 1; i >= 0; i -= 1) { - shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame); - if (shouldBreakProcess) break; - } - }, - searchProcessedElement: function(elem) { - var elements = this.processedElements; - var i = 0; - var len = elements.length; - while (i < len) { - if (elements[i].elem === elem) return elements[i].pos; - i += 1; - } - return 0; - }, - addProcessedElement: function(elem, pos) { - var elements = this.processedElements; - var i = elements.length; - while (i) { - i -= 1; - if (elements[i].elem === elem) { - elements[i].pos = pos; - return; - } - } - elements.push(new ProcessedElement(elem, pos)); - }, - prepareFrame: function(num) { - this.prepareRenderableFrame(num); - this.prepareProperties(num, this.isInRange); - } - }; - const lineCapEnum = { - 1: "butt", - 2: "round", - 3: "square" - }; - const lineJoinEnum = { - 1: "miter", - 2: "round", - 3: "bevel" - }; - function SVGShapeData(transformers, level, shape) { - this.caches = []; - this.styles = []; - this.transformers = transformers; - this.lStr = ""; - this.sh = shape; - this.lvl = level; - this._isAnimated = !!shape.k; - var i = 0; - var len = transformers.length; - while (i < len) { - if (transformers[i].mProps.dynamicProperties.length) { - this._isAnimated = true; - break; - } - i += 1; - } - } - SVGShapeData.prototype.setAsAnimated = function() { - this._isAnimated = true; - }; - function SVGStyleData(data, level) { - this.data = data; - this.type = data.ty; - this.d = ""; - this.lvl = level; - this._mdf = false; - this.closed = data.hd === true; - this.pElem = createNS("path"); - this.msElem = null; - } - SVGStyleData.prototype.reset = function() { - this.d = ""; - this._mdf = false; - }; - function DashProperty(elem, data, renderer, container) { - this.elem = elem; - this.frameId = -1; - this.dataProps = createSizedArray(data.length); - this.renderer = renderer; - this.k = false; - this.dashStr = ""; - this.dashArray = createTypedArray("float32", data.length ? data.length - 1 : 0); - this.dashoffset = createTypedArray("float32", 1); - this.initDynamicPropertyContainer(container); - var i; - var len = data.length || 0; - var prop; - for (i = 0; i < len; i += 1) { - prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this); - this.k = prop.k || this.k; - this.dataProps[i] = { - n: data[i].n, - p: prop - }; - } - if (!this.k) this.getValue(true); - this._isAnimated = this.k; - } - DashProperty.prototype.getValue = function(forceRender) { - if (this.elem.globalData.frameId === this.frameId && !forceRender) return; - this.frameId = this.elem.globalData.frameId; - this.iterateDynamicProperties(); - this._mdf = this._mdf || forceRender; - if (this._mdf) { - var i = 0; - var len = this.dataProps.length; - if (this.renderer === "svg") this.dashStr = ""; - for (i = 0; i < len; i += 1) if (this.dataProps[i].n !== "o") if (this.renderer === "svg") this.dashStr += " " + this.dataProps[i].p.v; - else this.dashArray[i] = this.dataProps[i].p.v; - else this.dashoffset[0] = this.dataProps[i].p.v; - } - }; - extendPrototype([DynamicPropertyContainer], DashProperty); - function SVGStrokeStyleData(elem, data, styleOb) { - this.initDynamicPropertyContainer(elem); - this.getValue = this.iterateDynamicProperties; - this.o = PropertyFactory.getProp(elem, data.o, 0, .01, this); - this.w = PropertyFactory.getProp(elem, data.w, 0, null, this); - this.d = new DashProperty(elem, data.d || {}, "svg", this); - this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this); - this.style = styleOb; - this._isAnimated = !!this._isAnimated; - } - extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData); - function SVGFillStyleData(elem, data, styleOb) { - this.initDynamicPropertyContainer(elem); - this.getValue = this.iterateDynamicProperties; - this.o = PropertyFactory.getProp(elem, data.o, 0, .01, this); - this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this); - this.style = styleOb; - } - extendPrototype([DynamicPropertyContainer], SVGFillStyleData); - function SVGNoStyleData(elem, data, styleOb) { - this.initDynamicPropertyContainer(elem); - this.getValue = this.iterateDynamicProperties; - this.style = styleOb; - } - extendPrototype([DynamicPropertyContainer], SVGNoStyleData); - function GradientProperty(elem, data, container) { - this.data = data; - this.c = createTypedArray("uint8c", data.p * 4); - var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4; - this.o = createTypedArray("float32", cLength); - this._cmdf = false; - this._omdf = false; - this._collapsable = this.checkCollapsable(); - this._hasOpacity = cLength; - this.initDynamicPropertyContainer(container); - this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this); - this.k = this.prop.k; - this.getValue(true); - } - GradientProperty.prototype.comparePoints = function(values, points) { - var i = 0; - var len = this.o.length / 2; - var diff; - while (i < len) { - diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]); - if (diff > .01) return false; - i += 1; - } - return true; - }; - GradientProperty.prototype.checkCollapsable = function() { - if (this.o.length / 2 !== this.c.length / 4) return false; - if (this.data.k.k[0].s) { - var i = 0; - var len = this.data.k.k.length; - while (i < len) { - if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) return false; - i += 1; - } - } else if (!this.comparePoints(this.data.k.k, this.data.p)) return false; - return true; - }; - GradientProperty.prototype.getValue = function(forceRender) { - this.prop.getValue(); - this._mdf = false; - this._cmdf = false; - this._omdf = false; - if (this.prop._mdf || forceRender) { - var i; - var len = this.data.p * 4; - var mult; - var val; - for (i = 0; i < len; i += 1) { - mult = i % 4 === 0 ? 100 : 255; - val = Math.round(this.prop.v[i] * mult); - if (this.c[i] !== val) { - this.c[i] = val; - this._cmdf = !forceRender; - } - } - if (this.o.length) { - len = this.prop.v.length; - for (i = this.data.p * 4; i < len; i += 1) { - mult = i % 2 === 0 ? 100 : 1; - val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i]; - if (this.o[i - this.data.p * 4] !== val) { - this.o[i - this.data.p * 4] = val; - this._omdf = !forceRender; - } - } - } - this._mdf = !forceRender; - } - }; - extendPrototype([DynamicPropertyContainer], GradientProperty); - function SVGGradientFillStyleData(elem, data, styleOb) { - this.initDynamicPropertyContainer(elem); - this.getValue = this.iterateDynamicProperties; - this.initGradientData(elem, data, styleOb); - } - SVGGradientFillStyleData.prototype.initGradientData = function(elem, data, styleOb) { - this.o = PropertyFactory.getProp(elem, data.o, 0, .01, this); - this.s = PropertyFactory.getProp(elem, data.s, 1, null, this); - this.e = PropertyFactory.getProp(elem, data.e, 1, null, this); - this.h = PropertyFactory.getProp(elem, data.h || { k: 0 }, 0, .01, this); - this.a = PropertyFactory.getProp(elem, data.a || { k: 0 }, 0, degToRads, this); - this.g = new GradientProperty(elem, data.g, this); - this.style = styleOb; - this.stops = []; - this.setGradientData(styleOb.pElem, data); - this.setGradientOpacity(data, styleOb); - this._isAnimated = !!this._isAnimated; - }; - SVGGradientFillStyleData.prototype.setGradientData = function(pathElement, data) { - var gradientId = createElementID(); - var gfill = createNS(data.t === 1 ? "linearGradient" : "radialGradient"); - gfill.setAttribute("id", gradientId); - gfill.setAttribute("spreadMethod", "pad"); - gfill.setAttribute("gradientUnits", "userSpaceOnUse"); - var stops = []; - var stop; - var j; - var jLen = data.g.p * 4; - for (j = 0; j < jLen; j += 4) { - stop = createNS("stop"); - gfill.appendChild(stop); - stops.push(stop); - } - pathElement.setAttribute(data.ty === "gf" ? "fill" : "stroke", "url(" + getLocationHref() + "#" + gradientId + ")"); - this.gf = gfill; - this.cst = stops; - }; - SVGGradientFillStyleData.prototype.setGradientOpacity = function(data, styleOb) { - if (this.g._hasOpacity && !this.g._collapsable) { - var stop; - var j; - var jLen; - var mask = createNS("mask"); - var maskElement = createNS("path"); - mask.appendChild(maskElement); - var opacityId = createElementID(); - var maskId = createElementID(); - mask.setAttribute("id", maskId); - var opFill = createNS(data.t === 1 ? "linearGradient" : "radialGradient"); - opFill.setAttribute("id", opacityId); - opFill.setAttribute("spreadMethod", "pad"); - opFill.setAttribute("gradientUnits", "userSpaceOnUse"); - jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length; - var stops = this.stops; - for (j = data.g.p * 4; j < jLen; j += 2) { - stop = createNS("stop"); - stop.setAttribute("stop-color", "rgb(255,255,255)"); - opFill.appendChild(stop); - stops.push(stop); - } - maskElement.setAttribute(data.ty === "gf" ? "fill" : "stroke", "url(" + getLocationHref() + "#" + opacityId + ")"); - if (data.ty === "gs") { - maskElement.setAttribute("stroke-linecap", lineCapEnum[data.lc || 2]); - maskElement.setAttribute("stroke-linejoin", lineJoinEnum[data.lj || 2]); - if (data.lj === 1) maskElement.setAttribute("stroke-miterlimit", data.ml); - } - this.of = opFill; - this.ms = mask; - this.ost = stops; - this.maskId = maskId; - styleOb.msElem = maskElement; - } - }; - extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData); - function SVGGradientStrokeStyleData(elem, data, styleOb) { - this.initDynamicPropertyContainer(elem); - this.getValue = this.iterateDynamicProperties; - this.w = PropertyFactory.getProp(elem, data.w, 0, null, this); - this.d = new DashProperty(elem, data.d || {}, "svg", this); - this.initGradientData(elem, data, styleOb); - this._isAnimated = !!this._isAnimated; - } - extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData); - function ShapeGroupData() { - this.it = []; - this.prevViewData = []; - this.gr = createNS("g"); - } - function SVGTransformData(mProps, op, container) { - this.transform = { - mProps, - op, - container - }; - this.elements = []; - this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length; - } - const buildShapeString = function(pathNodes, length, closed, mat) { - if (length === 0) return ""; - var _o = pathNodes.o; - var _i = pathNodes.i; - var _v = pathNodes.v; - var i; - var shapeString = " M" + mat.applyToPointStringified(_v[0][0], _v[0][1]); - for (i = 1; i < length; i += 1) shapeString += " C" + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + " " + mat.applyToPointStringified(_i[i][0], _i[i][1]) + " " + mat.applyToPointStringified(_v[i][0], _v[i][1]); - if (closed && length) { - shapeString += " C" + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + " " + mat.applyToPointStringified(_i[0][0], _i[0][1]) + " " + mat.applyToPointStringified(_v[0][0], _v[0][1]); - shapeString += "z"; - } - return shapeString; - }; - const SVGElementsRenderer = function() { - var _identityMatrix = new Matrix(); - var _matrixHelper = new Matrix(); - var ob = { createRenderFunction }; - function createRenderFunction(data) { - switch (data.ty) { - case "fl": return renderFill; - case "gf": return renderGradient; - case "gs": return renderGradientStroke; - case "st": return renderStroke; - case "sh": - case "el": - case "rc": - case "sr": return renderPath; - case "tr": return renderContentTransform; - case "no": return renderNoop; - default: return null; - } - } - function renderContentTransform(styleData, itemData, isFirstFrame) { - if (isFirstFrame || itemData.transform.op._mdf) itemData.transform.container.setAttribute("opacity", itemData.transform.op.v); - if (isFirstFrame || itemData.transform.mProps._mdf) itemData.transform.container.setAttribute("transform", itemData.transform.mProps.v.to2dCSS()); - } - function renderNoop() {} - function renderPath(styleData, itemData, isFirstFrame) { - var j; - var jLen; - var pathStringTransformed; - var redraw; - var pathNodes; - var l; - var lLen = itemData.styles.length; - var lvl = itemData.lvl; - var paths; - var mat; - var props; - var iterations; - var k; - for (l = 0; l < lLen; l += 1) { - redraw = itemData.sh._mdf || isFirstFrame; - if (itemData.styles[l].lvl < lvl) { - mat = _matrixHelper.reset(); - iterations = lvl - itemData.styles[l].lvl; - k = itemData.transformers.length - 1; - while (!redraw && iterations > 0) { - redraw = itemData.transformers[k].mProps._mdf || redraw; - iterations -= 1; - k -= 1; - } - if (redraw) { - iterations = lvl - itemData.styles[l].lvl; - k = itemData.transformers.length - 1; - while (iterations > 0) { - props = itemData.transformers[k].mProps.v.props; - mat.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]); - iterations -= 1; - k -= 1; - } - } - } else mat = _identityMatrix; - paths = itemData.sh.paths; - jLen = paths._length; - if (redraw) { - pathStringTransformed = ""; - for (j = 0; j < jLen; j += 1) { - pathNodes = paths.shapes[j]; - if (pathNodes && pathNodes._length) pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat); - } - itemData.caches[l] = pathStringTransformed; - } else pathStringTransformed = itemData.caches[l]; - itemData.styles[l].d += styleData.hd === true ? "" : pathStringTransformed; - itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf; - } - } - function renderFill(styleData, itemData, isFirstFrame) { - var styleElem = itemData.style; - if (itemData.c._mdf || isFirstFrame) styleElem.pElem.setAttribute("fill", "rgb(" + bmFloor(itemData.c.v[0]) + "," + bmFloor(itemData.c.v[1]) + "," + bmFloor(itemData.c.v[2]) + ")"); - if (itemData.o._mdf || isFirstFrame) styleElem.pElem.setAttribute("fill-opacity", itemData.o.v); - } - function renderGradientStroke(styleData, itemData, isFirstFrame) { - renderGradient(styleData, itemData, isFirstFrame); - renderStroke(styleData, itemData, isFirstFrame); - } - function renderGradient(styleData, itemData, isFirstFrame) { - var gfill = itemData.gf; - var hasOpacity = itemData.g._hasOpacity; - var pt1 = itemData.s.v; - var pt2 = itemData.e.v; - if (itemData.o._mdf || isFirstFrame) { - var attr = styleData.ty === "gf" ? "fill-opacity" : "stroke-opacity"; - itemData.style.pElem.setAttribute(attr, itemData.o.v); - } - if (itemData.s._mdf || isFirstFrame) { - var attr1 = styleData.t === 1 ? "x1" : "cx"; - var attr2 = attr1 === "x1" ? "y1" : "cy"; - gfill.setAttribute(attr1, pt1[0]); - gfill.setAttribute(attr2, pt1[1]); - if (hasOpacity && !itemData.g._collapsable) { - itemData.of.setAttribute(attr1, pt1[0]); - itemData.of.setAttribute(attr2, pt1[1]); - } - } - var stops; - var i; - var len; - var stop; - if (itemData.g._cmdf || isFirstFrame) { - stops = itemData.cst; - var cValues = itemData.g.c; - len = stops.length; - for (i = 0; i < len; i += 1) { - stop = stops[i]; - stop.setAttribute("offset", cValues[i * 4] + "%"); - stop.setAttribute("stop-color", "rgb(" + cValues[i * 4 + 1] + "," + cValues[i * 4 + 2] + "," + cValues[i * 4 + 3] + ")"); - } - } - if (hasOpacity && (itemData.g._omdf || isFirstFrame)) { - var oValues = itemData.g.o; - if (itemData.g._collapsable) stops = itemData.cst; - else stops = itemData.ost; - len = stops.length; - for (i = 0; i < len; i += 1) { - stop = stops[i]; - if (!itemData.g._collapsable) stop.setAttribute("offset", oValues[i * 2] + "%"); - stop.setAttribute("stop-opacity", oValues[i * 2 + 1]); - } - } - if (styleData.t === 1) { - if (itemData.e._mdf || isFirstFrame) { - gfill.setAttribute("x2", pt2[0]); - gfill.setAttribute("y2", pt2[1]); - if (hasOpacity && !itemData.g._collapsable) { - itemData.of.setAttribute("x2", pt2[0]); - itemData.of.setAttribute("y2", pt2[1]); - } - } - } else { - var rad; - if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) { - rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2)); - gfill.setAttribute("r", rad); - if (hasOpacity && !itemData.g._collapsable) itemData.of.setAttribute("r", rad); - } - if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) { - if (!rad) rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2)); - var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]); - var percent = itemData.h.v; - if (percent >= 1) percent = .99; - else if (percent <= -1) percent = -.99; - var dist = rad * percent; - var x = Math.cos(ang + itemData.a.v) * dist + pt1[0]; - var y = Math.sin(ang + itemData.a.v) * dist + pt1[1]; - gfill.setAttribute("fx", x); - gfill.setAttribute("fy", y); - if (hasOpacity && !itemData.g._collapsable) { - itemData.of.setAttribute("fx", x); - itemData.of.setAttribute("fy", y); - } - } - } - } - function renderStroke(styleData, itemData, isFirstFrame) { - var styleElem = itemData.style; - var d = itemData.d; - if (d && (d._mdf || isFirstFrame) && d.dashStr) { - styleElem.pElem.setAttribute("stroke-dasharray", d.dashStr); - styleElem.pElem.setAttribute("stroke-dashoffset", d.dashoffset[0]); - } - if (itemData.c && (itemData.c._mdf || isFirstFrame)) styleElem.pElem.setAttribute("stroke", "rgb(" + bmFloor(itemData.c.v[0]) + "," + bmFloor(itemData.c.v[1]) + "," + bmFloor(itemData.c.v[2]) + ")"); - if (itemData.o._mdf || isFirstFrame) styleElem.pElem.setAttribute("stroke-opacity", itemData.o.v); - if (itemData.w._mdf || isFirstFrame) { - styleElem.pElem.setAttribute("stroke-width", itemData.w.v); - if (styleElem.msElem) styleElem.msElem.setAttribute("stroke-width", itemData.w.v); - } - } - return ob; - }(); - function SVGShapeElement(data, globalData, comp) { - this.shapes = []; - this.shapesData = data.shapes; - this.stylesList = []; - this.shapeModifiers = []; - this.itemsData = []; - this.processedElements = []; - this.animatedContents = []; - this.initElement(data, globalData, comp); - this.prevViewData = []; - } - extendPrototype([ - BaseElement, - TransformElement, - SVGBaseElement, - IShapeElement, - HierarchyElement, - FrameElement, - RenderableDOMElement - ], SVGShapeElement); - SVGShapeElement.prototype.initSecondaryElement = function() {}; - SVGShapeElement.prototype.identityMatrix = new Matrix(); - SVGShapeElement.prototype.buildExpressionInterface = function() {}; - SVGShapeElement.prototype.createContent = function() { - this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true); - this.filterUniqueShapes(); - }; - SVGShapeElement.prototype.filterUniqueShapes = function() { - var i; - var len = this.shapes.length; - var shape; - var j; - var jLen = this.stylesList.length; - var style; - var tempShapes = []; - var areAnimated = false; - for (j = 0; j < jLen; j += 1) { - style = this.stylesList[j]; - areAnimated = false; - tempShapes.length = 0; - for (i = 0; i < len; i += 1) { - shape = this.shapes[i]; - if (shape.styles.indexOf(style) !== -1) { - tempShapes.push(shape); - areAnimated = shape._isAnimated || areAnimated; - } - } - if (tempShapes.length > 1 && areAnimated) this.setShapesAsAnimated(tempShapes); - } - }; - SVGShapeElement.prototype.setShapesAsAnimated = function(shapes) { - var i; - var len = shapes.length; - for (i = 0; i < len; i += 1) shapes[i].setAsAnimated(); - }; - SVGShapeElement.prototype.createStyleElement = function(data, level) { - var elementData; - var styleOb = new SVGStyleData(data, level); - var pathElement = styleOb.pElem; - if (data.ty === "st") elementData = new SVGStrokeStyleData(this, data, styleOb); - else if (data.ty === "fl") elementData = new SVGFillStyleData(this, data, styleOb); - else if (data.ty === "gf" || data.ty === "gs") { - elementData = new (data.ty === "gf" ? SVGGradientFillStyleData : SVGGradientStrokeStyleData)(this, data, styleOb); - this.globalData.defs.appendChild(elementData.gf); - if (elementData.maskId) { - this.globalData.defs.appendChild(elementData.ms); - this.globalData.defs.appendChild(elementData.of); - pathElement.setAttribute("mask", "url(" + getLocationHref() + "#" + elementData.maskId + ")"); - } - } else if (data.ty === "no") elementData = new SVGNoStyleData(this, data, styleOb); - if (data.ty === "st" || data.ty === "gs") { - pathElement.setAttribute("stroke-linecap", lineCapEnum[data.lc || 2]); - pathElement.setAttribute("stroke-linejoin", lineJoinEnum[data.lj || 2]); - pathElement.setAttribute("fill-opacity", "0"); - if (data.lj === 1) pathElement.setAttribute("stroke-miterlimit", data.ml); - } - if (data.r === 2) pathElement.setAttribute("fill-rule", "evenodd"); - if (data.ln) pathElement.setAttribute("id", data.ln); - if (data.cl) pathElement.setAttribute("class", data.cl); - if (data.bm) pathElement.style["mix-blend-mode"] = getBlendMode(data.bm); - this.stylesList.push(styleOb); - this.addToAnimatedContents(data, elementData); - return elementData; - }; - SVGShapeElement.prototype.createGroupElement = function(data) { - var elementData = new ShapeGroupData(); - if (data.ln) elementData.gr.setAttribute("id", data.ln); - if (data.cl) elementData.gr.setAttribute("class", data.cl); - if (data.bm) elementData.gr.style["mix-blend-mode"] = getBlendMode(data.bm); - return elementData; - }; - SVGShapeElement.prototype.createTransformElement = function(data, container) { - var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this); - var elementData = new SVGTransformData(transformProperty, transformProperty.o, container); - this.addToAnimatedContents(data, elementData); - return elementData; - }; - SVGShapeElement.prototype.createShapeElement = function(data, ownTransformers, level) { - var ty = 4; - if (data.ty === "rc") ty = 5; - else if (data.ty === "el") ty = 6; - else if (data.ty === "sr") ty = 7; - var elementData = new SVGShapeData(ownTransformers, level, ShapePropertyFactory.getShapeProp(this, data, ty, this)); - this.shapes.push(elementData); - this.addShapeToModifiers(elementData); - this.addToAnimatedContents(data, elementData); - return elementData; - }; - SVGShapeElement.prototype.addToAnimatedContents = function(data, element) { - var i = 0; - var len = this.animatedContents.length; - while (i < len) { - if (this.animatedContents[i].element === element) return; - i += 1; - } - this.animatedContents.push({ - fn: SVGElementsRenderer.createRenderFunction(data), - element, - data - }); - }; - SVGShapeElement.prototype.setElementStyles = function(elementData) { - var arr = elementData.styles; - var j; - var jLen = this.stylesList.length; - for (j = 0; j < jLen; j += 1) if (!this.stylesList[j].closed) arr.push(this.stylesList[j]); - }; - SVGShapeElement.prototype.reloadShapes = function() { - this._isFirstFrame = true; - var i; - var len = this.itemsData.length; - for (i = 0; i < len; i += 1) this.prevViewData[i] = this.itemsData[i]; - this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true); - this.filterUniqueShapes(); - len = this.dynamicProperties.length; - for (i = 0; i < len; i += 1) this.dynamicProperties[i].getValue(); - this.renderModifiers(); - }; - SVGShapeElement.prototype.searchShapes = function(arr, itemsData, prevViewData, container, level, transformers, render) { - var ownTransformers = [].concat(transformers); - var i; - var len = arr.length - 1; - var j; - var jLen; - var ownStyles = []; - var ownModifiers = []; - var currentTransform; - var modifier; - var processedPos; - for (i = len; i >= 0; i -= 1) { - processedPos = this.searchProcessedElement(arr[i]); - if (!processedPos) arr[i]._render = render; - else itemsData[i] = prevViewData[processedPos - 1]; - if (arr[i].ty === "fl" || arr[i].ty === "st" || arr[i].ty === "gf" || arr[i].ty === "gs" || arr[i].ty === "no") { - if (!processedPos) itemsData[i] = this.createStyleElement(arr[i], level); - else itemsData[i].style.closed = false; - if (arr[i]._render) { - if (itemsData[i].style.pElem.parentNode !== container) container.appendChild(itemsData[i].style.pElem); - } - ownStyles.push(itemsData[i].style); - } else if (arr[i].ty === "gr") { - if (!processedPos) itemsData[i] = this.createGroupElement(arr[i]); - else { - jLen = itemsData[i].it.length; - for (j = 0; j < jLen; j += 1) itemsData[i].prevViewData[j] = itemsData[i].it[j]; - } - this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, itemsData[i].gr, level + 1, ownTransformers, render); - if (arr[i]._render) { - if (itemsData[i].gr.parentNode !== container) container.appendChild(itemsData[i].gr); - } - } else if (arr[i].ty === "tr") { - if (!processedPos) itemsData[i] = this.createTransformElement(arr[i], container); - currentTransform = itemsData[i].transform; - ownTransformers.push(currentTransform); - } else if (arr[i].ty === "sh" || arr[i].ty === "rc" || arr[i].ty === "el" || arr[i].ty === "sr") { - if (!processedPos) itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level); - this.setElementStyles(itemsData[i]); - } else if (arr[i].ty === "tm" || arr[i].ty === "rd" || arr[i].ty === "ms" || arr[i].ty === "pb") { - if (!processedPos) { - modifier = ShapeModifiers.getModifier(arr[i].ty); - modifier.init(this, arr[i]); - itemsData[i] = modifier; - this.shapeModifiers.push(modifier); - } else { - modifier = itemsData[i]; - modifier.closed = false; - } - ownModifiers.push(modifier); - } else if (arr[i].ty === "rp") { - if (!processedPos) { - modifier = ShapeModifiers.getModifier(arr[i].ty); - itemsData[i] = modifier; - modifier.init(this, arr, i, itemsData); - this.shapeModifiers.push(modifier); - render = false; - } else { - modifier = itemsData[i]; - modifier.closed = true; - } - ownModifiers.push(modifier); - } - this.addProcessedElement(arr[i], i + 1); - } - len = ownStyles.length; - for (i = 0; i < len; i += 1) ownStyles[i].closed = true; - len = ownModifiers.length; - for (i = 0; i < len; i += 1) ownModifiers[i].closed = true; - }; - SVGShapeElement.prototype.renderInnerContent = function() { - this.renderModifiers(); - var i; - var len = this.stylesList.length; - for (i = 0; i < len; i += 1) this.stylesList[i].reset(); - this.renderShape(); - for (i = 0; i < len; i += 1) if (this.stylesList[i]._mdf || this._isFirstFrame) { - if (this.stylesList[i].msElem) { - this.stylesList[i].msElem.setAttribute("d", this.stylesList[i].d); - this.stylesList[i].d = "M0 0" + this.stylesList[i].d; - } - this.stylesList[i].pElem.setAttribute("d", this.stylesList[i].d || "M0 0"); - } - }; - SVGShapeElement.prototype.renderShape = function() { - var i; - var len = this.animatedContents.length; - var animatedContent; - for (i = 0; i < len; i += 1) { - animatedContent = this.animatedContents[i]; - if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame); - } - }; - SVGShapeElement.prototype.destroy = function() { - this.destroyBaseElement(); - this.shapesData = null; - this.itemsData = null; - }; - function LetterProps(o, sw, sc, fc, m, p) { - this.o = o; - this.sw = sw; - this.sc = sc; - this.fc = fc; - this.m = m; - this.p = p; - this._mdf = { - o: true, - sw: !!sw, - sc: !!sc, - fc: !!fc, - m: true, - p: true - }; - } - LetterProps.prototype.update = function(o, sw, sc, fc, m, p) { - this._mdf.o = false; - this._mdf.sw = false; - this._mdf.sc = false; - this._mdf.fc = false; - this._mdf.m = false; - this._mdf.p = false; - var updated = false; - if (this.o !== o) { - this.o = o; - this._mdf.o = true; - updated = true; - } - if (this.sw !== sw) { - this.sw = sw; - this._mdf.sw = true; - updated = true; - } - if (this.sc !== sc) { - this.sc = sc; - this._mdf.sc = true; - updated = true; - } - if (this.fc !== fc) { - this.fc = fc; - this._mdf.fc = true; - updated = true; - } - if (this.m !== m) { - this.m = m; - this._mdf.m = true; - updated = true; - } - if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) { - this.p = p; - this._mdf.p = true; - updated = true; - } - return updated; - }; - function TextProperty(elem, data) { - this._frameId = initialDefaultFrame; - this.pv = ""; - this.v = ""; - this.kf = false; - this._isFirstFrame = true; - this._mdf = false; - this.data = data; - this.elem = elem; - this.comp = this.elem.comp; - this.keysIndex = 0; - this.canResize = false; - this.minimumFontSize = 1; - this.effectsSequence = []; - this.currentData = { - ascent: 0, - boxWidth: this.defaultBoxWidth, - f: "", - fStyle: "", - fWeight: "", - fc: "", - j: "", - justifyOffset: "", - l: [], - lh: 0, - lineWidths: [], - ls: "", - of: "", - s: "", - sc: "", - sw: 0, - t: 0, - tr: 0, - sz: 0, - ps: null, - fillColorAnim: false, - strokeColorAnim: false, - strokeWidthAnim: false, - yOffset: 0, - finalSize: 0, - finalText: [], - finalLineHeight: 0, - __complete: false - }; - this.copyData(this.currentData, this.data.d.k[0].s); - if (!this.searchProperty()) this.completeTextData(this.currentData); - } - TextProperty.prototype.defaultBoxWidth = [0, 0]; - TextProperty.prototype.copyData = function(obj, data) { - for (var s in data) if (Object.prototype.hasOwnProperty.call(data, s)) obj[s] = data[s]; - return obj; - }; - TextProperty.prototype.setCurrentData = function(data) { - if (!data.__complete) this.completeTextData(data); - this.currentData = data; - this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth; - this._mdf = true; - }; - TextProperty.prototype.searchProperty = function() { - return this.searchKeyframes(); - }; - TextProperty.prototype.searchKeyframes = function() { - this.kf = this.data.d.k.length > 1; - if (this.kf) this.addEffect(this.getKeyframeValue.bind(this)); - return this.kf; - }; - TextProperty.prototype.addEffect = function(effectFunction) { - this.effectsSequence.push(effectFunction); - this.elem.addDynamicProperty(this); - }; - TextProperty.prototype.getValue = function(_finalValue) { - if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) return; - this.currentData.t = this.data.d.k[this.keysIndex].s.t; - var currentValue = this.currentData; - var currentIndex = this.keysIndex; - if (this.lock) { - this.setCurrentData(this.currentData); - return; - } - this.lock = true; - this._mdf = false; - var i; - var len = this.effectsSequence.length; - var finalValue = _finalValue || this.data.d.k[this.keysIndex].s; - for (i = 0; i < len; i += 1) if (currentIndex !== this.keysIndex) finalValue = this.effectsSequence[i](finalValue, finalValue.t); - else finalValue = this.effectsSequence[i](this.currentData, finalValue.t); - if (currentValue !== finalValue) this.setCurrentData(finalValue); - this.v = this.currentData; - this.pv = this.v; - this.lock = false; - this.frameId = this.elem.globalData.frameId; - }; - TextProperty.prototype.getKeyframeValue = function() { - var textKeys = this.data.d.k; - var frameNum = this.elem.comp.renderedFrame; - var i = 0; - var len = textKeys.length; - while (i <= len - 1) { - if (i === len - 1 || textKeys[i + 1].t > frameNum) break; - i += 1; - } - if (this.keysIndex !== i) this.keysIndex = i; - return this.data.d.k[this.keysIndex].s; - }; - TextProperty.prototype.buildFinalText = function(text) { - var charactersArray = []; - var i = 0; - var len = text.length; - var charCode; - var secondCharCode; - var shouldCombine = false; - while (i < len) { - charCode = text.charCodeAt(i); - if (FontManager.isCombinedCharacter(charCode)) charactersArray[charactersArray.length - 1] += text.charAt(i); - else if (charCode >= 55296 && charCode <= 56319) { - secondCharCode = text.charCodeAt(i + 1); - if (secondCharCode >= 56320 && secondCharCode <= 57343) { - if (shouldCombine || FontManager.isModifier(charCode, secondCharCode)) { - charactersArray[charactersArray.length - 1] += text.substr(i, 2); - shouldCombine = false; - } else charactersArray.push(text.substr(i, 2)); - i += 1; - } else charactersArray.push(text.charAt(i)); - } else if (charCode > 56319) { - secondCharCode = text.charCodeAt(i + 1); - if (FontManager.isZeroWidthJoiner(charCode, secondCharCode)) { - shouldCombine = true; - charactersArray[charactersArray.length - 1] += text.substr(i, 2); - i += 1; - } else charactersArray.push(text.charAt(i)); - } else if (FontManager.isZeroWidthJoiner(charCode)) { - charactersArray[charactersArray.length - 1] += text.charAt(i); - shouldCombine = true; - } else charactersArray.push(text.charAt(i)); - i += 1; - } - return charactersArray; - }; - TextProperty.prototype.completeTextData = function(documentData) { - documentData.__complete = true; - var fontManager = this.elem.globalData.fontManager; - var data = this.data; - var letters = []; - var i; - var len; - var newLineFlag; - var index2 = 0; - var val; - var anchorGrouping = data.m.g; - var currentSize = 0; - var currentPos = 0; - var currentLine = 0; - var lineWidths = []; - var lineWidth = 0; - var maxLineWidth = 0; - var j; - var jLen; - var fontData = fontManager.getFontByName(documentData.f); - var charData; - var cLength = 0; - var fontProps = getFontProperties(fontData); - documentData.fWeight = fontProps.weight; - documentData.fStyle = fontProps.style; - documentData.finalSize = documentData.s; - documentData.finalText = this.buildFinalText(documentData.t); - len = documentData.finalText.length; - documentData.finalLineHeight = documentData.lh; - var trackingOffset = documentData.tr / 1e3 * documentData.finalSize; - var charCode; - if (documentData.sz) { - var flag = true; - var boxWidth = documentData.sz[0]; - var boxHeight = documentData.sz[1]; - var currentHeight; - var finalText; - while (flag) { - finalText = this.buildFinalText(documentData.t); - currentHeight = 0; - lineWidth = 0; - len = finalText.length; - trackingOffset = documentData.tr / 1e3 * documentData.finalSize; - var lastSpaceIndex = -1; - for (i = 0; i < len; i += 1) { - charCode = finalText[i].charCodeAt(0); - newLineFlag = false; - if (finalText[i] === " ") lastSpaceIndex = i; - else if (charCode === 13 || charCode === 3) { - lineWidth = 0; - newLineFlag = true; - currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2; - } - if (fontManager.chars) { - charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily); - cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100; - } else cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize); - if (lineWidth + cLength > boxWidth && finalText[i] !== " ") { - if (lastSpaceIndex === -1) len += 1; - else i = lastSpaceIndex; - currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2; - finalText.splice(i, lastSpaceIndex === i ? 1 : 0, "\r"); - lastSpaceIndex = -1; - lineWidth = 0; - } else { - lineWidth += cLength; - lineWidth += trackingOffset; - } - } - currentHeight += fontData.ascent * documentData.finalSize / 100; - if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) { - documentData.finalSize -= 1; - documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s; - } else { - documentData.finalText = finalText; - len = documentData.finalText.length; - flag = false; - } - } - } - lineWidth = -trackingOffset; - cLength = 0; - var uncollapsedSpaces = 0; - var currentChar; - for (i = 0; i < len; i += 1) { - newLineFlag = false; - currentChar = documentData.finalText[i]; - charCode = currentChar.charCodeAt(0); - if (charCode === 13 || charCode === 3) { - uncollapsedSpaces = 0; - lineWidths.push(lineWidth); - maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth; - lineWidth = -2 * trackingOffset; - val = ""; - newLineFlag = true; - currentLine += 1; - } else val = currentChar; - if (fontManager.chars) { - charData = fontManager.getCharData(currentChar, fontData.fStyle, fontManager.getFontByName(documentData.f).fFamily); - cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100; - } else cLength = fontManager.measureText(val, documentData.f, documentData.finalSize); - if (currentChar === " ") uncollapsedSpaces += cLength + trackingOffset; - else { - lineWidth += cLength + trackingOffset + uncollapsedSpaces; - uncollapsedSpaces = 0; - } - letters.push({ - l: cLength, - an: cLength, - add: currentSize, - n: newLineFlag, - anIndexes: [], - val, - line: currentLine, - animatorJustifyOffset: 0 - }); - if (anchorGrouping == 2) { - currentSize += cLength; - if (val === "" || val === " " || i === len - 1) { - if (val === "" || val === " ") currentSize -= cLength; - while (currentPos <= i) { - letters[currentPos].an = currentSize; - letters[currentPos].ind = index2; - letters[currentPos].extra = cLength; - currentPos += 1; - } - index2 += 1; - currentSize = 0; - } - } else if (anchorGrouping == 3) { - currentSize += cLength; - if (val === "" || i === len - 1) { - if (val === "") currentSize -= cLength; - while (currentPos <= i) { - letters[currentPos].an = currentSize; - letters[currentPos].ind = index2; - letters[currentPos].extra = cLength; - currentPos += 1; - } - currentSize = 0; - index2 += 1; - } - } else { - letters[index2].ind = index2; - letters[index2].extra = 0; - index2 += 1; - } - } - documentData.l = letters; - maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth; - lineWidths.push(lineWidth); - if (documentData.sz) { - documentData.boxWidth = documentData.sz[0]; - documentData.justifyOffset = 0; - } else { - documentData.boxWidth = maxLineWidth; - switch (documentData.j) { - case 1: - documentData.justifyOffset = -documentData.boxWidth; - break; - case 2: - documentData.justifyOffset = -documentData.boxWidth / 2; - break; - default: documentData.justifyOffset = 0; - } - } - documentData.lineWidths = lineWidths; - var animators = data.a; - var animatorData; - var letterData; - jLen = animators.length; - var based; - var ind; - var indexes = []; - for (j = 0; j < jLen; j += 1) { - animatorData = animators[j]; - if (animatorData.a.sc) documentData.strokeColorAnim = true; - if (animatorData.a.sw) documentData.strokeWidthAnim = true; - if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) documentData.fillColorAnim = true; - ind = 0; - based = animatorData.s.b; - for (i = 0; i < len; i += 1) { - letterData = letters[i]; - letterData.anIndexes[j] = ind; - if (based == 1 && letterData.val !== "" || based == 2 && letterData.val !== "" && letterData.val !== " " || based == 3 && (letterData.n || letterData.val == " " || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) { - if (animatorData.s.rn === 1) indexes.push(ind); - ind += 1; - } - } - data.a[j].s.totalChars = ind; - var currentInd = -1; - var newInd; - if (animatorData.s.rn === 1) for (i = 0; i < len; i += 1) { - letterData = letters[i]; - if (currentInd != letterData.anIndexes[j]) { - currentInd = letterData.anIndexes[j]; - newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0]; - } - letterData.anIndexes[j] = newInd; - } - } - documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2; - documentData.ls = documentData.ls || 0; - documentData.ascent = fontData.ascent * documentData.finalSize / 100; - }; - TextProperty.prototype.updateDocumentData = function(newData, index2) { - index2 = index2 === void 0 ? this.keysIndex : index2; - var dData = this.copyData({}, this.data.d.k[index2].s); - dData = this.copyData(dData, newData); - this.data.d.k[index2].s = dData; - this.recalculate(index2); - this.elem.addDynamicProperty(this); - }; - TextProperty.prototype.recalculate = function(index2) { - var dData = this.data.d.k[index2].s; - dData.__complete = false; - this.keysIndex = 0; - this._isFirstFrame = true; - this.getValue(dData); - }; - TextProperty.prototype.canResizeFont = function(_canResize) { - this.canResize = _canResize; - this.recalculate(this.keysIndex); - this.elem.addDynamicProperty(this); - }; - TextProperty.prototype.setMinimumFontSize = function(_fontValue) { - this.minimumFontSize = Math.floor(_fontValue) || 1; - this.recalculate(this.keysIndex); - this.elem.addDynamicProperty(this); - }; - const TextSelectorProp = function() { - var max = Math.max; - var min = Math.min; - var floor = Math.floor; - function TextSelectorPropFactory(elem, data) { - this._currentTextLength = -1; - this.k = false; - this.data = data; - this.elem = elem; - this.comp = elem.comp; - this.finalS = 0; - this.finalE = 0; - this.initDynamicPropertyContainer(elem); - this.s = PropertyFactory.getProp(elem, data.s || { k: 0 }, 0, 0, this); - if ("e" in data) this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this); - else this.e = { v: 100 }; - this.o = PropertyFactory.getProp(elem, data.o || { k: 0 }, 0, 0, this); - this.xe = PropertyFactory.getProp(elem, data.xe || { k: 0 }, 0, 0, this); - this.ne = PropertyFactory.getProp(elem, data.ne || { k: 0 }, 0, 0, this); - this.sm = PropertyFactory.getProp(elem, data.sm || { k: 100 }, 0, 0, this); - this.a = PropertyFactory.getProp(elem, data.a, 0, .01, this); - if (!this.dynamicProperties.length) this.getValue(); - } - TextSelectorPropFactory.prototype = { - getMult: function(ind) { - if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) this.getValue(); - var x1 = 0; - var y1 = 0; - var x2 = 1; - var y2 = 1; - if (this.ne.v > 0) x1 = this.ne.v / 100; - else y1 = -this.ne.v / 100; - if (this.xe.v > 0) x2 = 1 - this.xe.v / 100; - else y2 = 1 + this.xe.v / 100; - var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get; - var mult = 0; - var s = this.finalS; - var e = this.finalE; - var type = this.data.sh; - if (type === 2) { - if (e === s) mult = ind >= e ? 1 : 0; - else mult = max(0, min(.5 / (e - s) + (ind - s) / (e - s), 1)); - mult = easer(mult); - } else if (type === 3) { - if (e === s) mult = ind >= e ? 0 : 1; - else mult = 1 - max(0, min(.5 / (e - s) + (ind - s) / (e - s), 1)); - mult = easer(mult); - } else if (type === 4) { - if (e === s) mult = 0; - else { - mult = max(0, min(.5 / (e - s) + (ind - s) / (e - s), 1)); - if (mult < .5) mult *= 2; - else mult = 1 - 2 * (mult - .5); - } - mult = easer(mult); - } else if (type === 5) { - if (e === s) mult = 0; - else { - var tot = e - s; - ind = min(max(0, ind + .5 - s), e - s); - var x = -tot / 2 + ind; - var a = tot / 2; - mult = Math.sqrt(1 - x * x / (a * a)); - } - mult = easer(mult); - } else if (type === 6) { - if (e === s) mult = 0; - else { - ind = min(max(0, ind + .5 - s), e - s); - mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2; - } - mult = easer(mult); - } else { - if (ind >= floor(s)) if (ind - s < 0) mult = max(0, min(min(e, 1) - (s - ind), 1)); - else mult = max(0, min(e - ind, 1)); - mult = easer(mult); - } - if (this.sm.v !== 100) { - var smoothness = this.sm.v * .01; - if (smoothness === 0) smoothness = 1e-8; - var threshold = .5 - smoothness * .5; - if (mult < threshold) mult = 0; - else { - mult = (mult - threshold) / smoothness; - if (mult > 1) mult = 1; - } - } - return mult * this.a.v; - }, - getValue: function(newCharsFlag) { - this.iterateDynamicProperties(); - this._mdf = newCharsFlag || this._mdf; - this._currentTextLength = this.elem.textProperty.currentData.l.length || 0; - if (newCharsFlag && this.data.r === 2) this.e.v = this._currentTextLength; - var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars; - var o = this.o.v / divisor; - var s = this.s.v / divisor + o; - var e = this.e.v / divisor + o; - if (s > e) { - var _s = s; - s = e; - e = _s; - } - this.finalS = s; - this.finalE = e; - } - }; - extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory); - function getTextSelectorProp(elem, data, arr) { - return new TextSelectorPropFactory(elem, data); - } - return { getTextSelectorProp }; - }(); - function TextAnimatorDataProperty(elem, animatorProps, container) { - var defaultData = { propType: false }; - var getProp = PropertyFactory.getProp; - var textAnimatorAnimatables = animatorProps.a; - this.a = { - r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData, - rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData, - ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData, - sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData, - sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData, - s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, .01, container) : defaultData, - a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData, - o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, .01, container) : defaultData, - p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData, - sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData, - sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData, - fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData, - fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData, - fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, .01, container) : defaultData, - fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, .01, container) : defaultData, - t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData - }; - this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container); - this.s.t = animatorProps.s.t; - } - function TextAnimatorProperty(textData, renderType, elem) { - this._isFirstFrame = true; - this._hasMaskedPath = false; - this._frameId = -1; - this._textData = textData; - this._renderType = renderType; - this._elem = elem; - this._animatorsData = createSizedArray(this._textData.a.length); - this._pathData = {}; - this._moreOptions = { alignment: {} }; - this.renderedLetters = []; - this.lettersChangedFlag = false; - this.initDynamicPropertyContainer(elem); - } - TextAnimatorProperty.prototype.searchProperties = function() { - var i; - var len = this._textData.a.length; - var animatorProps; - var getProp = PropertyFactory.getProp; - for (i = 0; i < len; i += 1) { - animatorProps = this._textData.a[i]; - this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this); - } - if (this._textData.p && "m" in this._textData.p) { - this._pathData = { - a: getProp(this._elem, this._textData.p.a, 0, 0, this), - f: getProp(this._elem, this._textData.p.f, 0, 0, this), - l: getProp(this._elem, this._textData.p.l, 0, 0, this), - r: getProp(this._elem, this._textData.p.r, 0, 0, this), - p: getProp(this._elem, this._textData.p.p, 0, 0, this), - m: this._elem.maskManager.getMaskProperty(this._textData.p.m) - }; - this._hasMaskedPath = true; - } else this._hasMaskedPath = false; - this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this); - }; - TextAnimatorProperty.prototype.getMeasures = function(documentData, lettersChangedFlag) { - this.lettersChangedFlag = lettersChangedFlag; - if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) return; - this._isFirstFrame = false; - var alignment = this._moreOptions.alignment.v; - var animators = this._animatorsData; - var textData = this._textData; - var matrixHelper = this.mHelper; - var renderType = this._renderType; - var renderedLettersCount = this.renderedLetters.length; - var xPos; - var yPos; - var i; - var len; - var letters = documentData.l; - var pathInfo; - var currentLength; - var currentPoint; - var segmentLength; - var flag; - var pointInd; - var segmentInd; - var prevPoint; - var points; - var segments; - var partialLength; - var totalLength; - var perc; - var tanAngle; - var mask; - if (this._hasMaskedPath) { - mask = this._pathData.m; - if (!this._pathData.n || this._pathData._mdf) { - var paths = mask.v; - if (this._pathData.r.v) paths = paths.reverse(); - pathInfo = { - tLength: 0, - segments: [] - }; - len = paths._length - 1; - var bezierData; - totalLength = 0; - for (i = 0; i < len; i += 1) { - bezierData = bez.buildBezierData(paths.v[i], paths.v[i + 1], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]); - pathInfo.tLength += bezierData.segmentLength; - pathInfo.segments.push(bezierData); - totalLength += bezierData.segmentLength; - } - i = len; - if (mask.v.c) { - bezierData = bez.buildBezierData(paths.v[i], paths.v[0], [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]], [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]); - pathInfo.tLength += bezierData.segmentLength; - pathInfo.segments.push(bezierData); - totalLength += bezierData.segmentLength; - } - this._pathData.pi = pathInfo; - } - pathInfo = this._pathData.pi; - currentLength = this._pathData.f.v; - segmentInd = 0; - pointInd = 1; - segmentLength = 0; - flag = true; - segments = pathInfo.segments; - if (currentLength < 0 && mask.v.c) { - if (pathInfo.tLength < Math.abs(currentLength)) currentLength = -Math.abs(currentLength) % pathInfo.tLength; - segmentInd = segments.length - 1; - points = segments[segmentInd].points; - pointInd = points.length - 1; - while (currentLength < 0) { - currentLength += points[pointInd].partialLength; - pointInd -= 1; - if (pointInd < 0) { - segmentInd -= 1; - points = segments[segmentInd].points; - pointInd = points.length - 1; - } - } - } - points = segments[segmentInd].points; - prevPoint = points[pointInd - 1]; - currentPoint = points[pointInd]; - partialLength = currentPoint.partialLength; - } - len = letters.length; - xPos = 0; - yPos = 0; - var yOff = documentData.finalSize * 1.2 * .714; - var firstLine = true; - var animatorProps; - var animatorSelector; - var j; - var jLen; - var letterValue; - jLen = animators.length; - var mult; - var ind = -1; - var offf; - var xPathPos; - var yPathPos; - var initPathPos = currentLength; - var initSegmentInd = segmentInd; - var initPointInd = pointInd; - var currentLine = -1; - var elemOpacity; - var sc; - var sw; - var fc; - var k; - var letterSw; - var letterSc; - var letterFc; - var letterM = ""; - var letterP = this.defaultPropsArray; - var letterO; - if (documentData.j === 2 || documentData.j === 1) { - var animatorJustifyOffset = 0; - var animatorFirstCharOffset = 0; - var justifyOffsetMult = documentData.j === 2 ? -.5 : -1; - var lastIndex = 0; - var isNewLine = true; - for (i = 0; i < len; i += 1) if (letters[i].n) { - if (animatorJustifyOffset) animatorJustifyOffset += animatorFirstCharOffset; - while (lastIndex < i) { - letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset; - lastIndex += 1; - } - animatorJustifyOffset = 0; - isNewLine = true; - } else { - for (j = 0; j < jLen; j += 1) { - animatorProps = animators[j].a; - if (animatorProps.t.propType) { - if (isNewLine && documentData.j === 2) animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult; - animatorSelector = animators[j].s; - mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); - if (mult.length) animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult; - else animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult; - } - } - isNewLine = false; - } - if (animatorJustifyOffset) animatorJustifyOffset += animatorFirstCharOffset; - while (lastIndex < i) { - letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset; - lastIndex += 1; - } - } - for (i = 0; i < len; i += 1) { - matrixHelper.reset(); - elemOpacity = 1; - if (letters[i].n) { - xPos = 0; - yPos += documentData.yOffset; - yPos += firstLine ? 1 : 0; - currentLength = initPathPos; - firstLine = false; - if (this._hasMaskedPath) { - segmentInd = initSegmentInd; - pointInd = initPointInd; - points = segments[segmentInd].points; - prevPoint = points[pointInd - 1]; - currentPoint = points[pointInd]; - partialLength = currentPoint.partialLength; - segmentLength = 0; - } - letterM = ""; - letterFc = ""; - letterSw = ""; - letterO = ""; - letterP = this.defaultPropsArray; - } else { - if (this._hasMaskedPath) { - if (currentLine !== letters[i].line) { - switch (documentData.j) { - case 1: - currentLength += totalLength - documentData.lineWidths[letters[i].line]; - break; - case 2: - currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2; - break; - } - currentLine = letters[i].line; - } - if (ind !== letters[i].ind) { - if (letters[ind]) currentLength += letters[ind].extra; - currentLength += letters[i].an / 2; - ind = letters[i].ind; - } - currentLength += alignment[0] * letters[i].an * .005; - var animatorOffset = 0; - for (j = 0; j < jLen; j += 1) { - animatorProps = animators[j].a; - if (animatorProps.p.propType) { - animatorSelector = animators[j].s; - mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); - if (mult.length) animatorOffset += animatorProps.p.v[0] * mult[0]; - else animatorOffset += animatorProps.p.v[0] * mult; - } - if (animatorProps.a.propType) { - animatorSelector = animators[j].s; - mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); - if (mult.length) animatorOffset += animatorProps.a.v[0] * mult[0]; - else animatorOffset += animatorProps.a.v[0] * mult; - } - } - flag = true; - if (this._pathData.a.v) { - currentLength = letters[0].an * .5 + (totalLength - this._pathData.f.v - letters[0].an * .5 - letters[letters.length - 1].an * .5) * ind / (len - 1); - currentLength += this._pathData.f.v; - } - while (flag) if (segmentLength + partialLength >= currentLength + animatorOffset || !points) { - perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength; - xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc; - yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc; - matrixHelper.translate(-alignment[0] * letters[i].an * .005, -(alignment[1] * yOff) * .01); - flag = false; - } else if (points) { - segmentLength += currentPoint.partialLength; - pointInd += 1; - if (pointInd >= points.length) { - pointInd = 0; - segmentInd += 1; - if (!segments[segmentInd]) if (mask.v.c) { - pointInd = 0; - segmentInd = 0; - points = segments[segmentInd].points; - } else { - segmentLength -= currentPoint.partialLength; - points = null; - } - else points = segments[segmentInd].points; - } - if (points) { - prevPoint = currentPoint; - currentPoint = points[pointInd]; - partialLength = currentPoint.partialLength; - } - } - offf = letters[i].an / 2 - letters[i].add; - matrixHelper.translate(-offf, 0, 0); - } else { - offf = letters[i].an / 2 - letters[i].add; - matrixHelper.translate(-offf, 0, 0); - matrixHelper.translate(-alignment[0] * letters[i].an * .005, -alignment[1] * yOff * .01, 0); - } - for (j = 0; j < jLen; j += 1) { - animatorProps = animators[j].a; - if (animatorProps.t.propType) { - animatorSelector = animators[j].s; - mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); - if (xPos !== 0 || documentData.j !== 0) if (this._hasMaskedPath) if (mult.length) currentLength += animatorProps.t.v * mult[0]; - else currentLength += animatorProps.t.v * mult; - else if (mult.length) xPos += animatorProps.t.v * mult[0]; - else xPos += animatorProps.t.v * mult; - } - } - if (documentData.strokeWidthAnim) sw = documentData.sw || 0; - if (documentData.strokeColorAnim) if (documentData.sc) sc = [ - documentData.sc[0], - documentData.sc[1], - documentData.sc[2] - ]; - else sc = [ - 0, - 0, - 0 - ]; - if (documentData.fillColorAnim && documentData.fc) fc = [ - documentData.fc[0], - documentData.fc[1], - documentData.fc[2] - ]; - for (j = 0; j < jLen; j += 1) { - animatorProps = animators[j].a; - if (animatorProps.a.propType) { - animatorSelector = animators[j].s; - mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); - if (mult.length) matrixHelper.translate(-animatorProps.a.v[0] * mult[0], -animatorProps.a.v[1] * mult[1], animatorProps.a.v[2] * mult[2]); - else matrixHelper.translate(-animatorProps.a.v[0] * mult, -animatorProps.a.v[1] * mult, animatorProps.a.v[2] * mult); - } - } - for (j = 0; j < jLen; j += 1) { - animatorProps = animators[j].a; - if (animatorProps.s.propType) { - animatorSelector = animators[j].s; - mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); - if (mult.length) matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1); - else matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1); - } - } - for (j = 0; j < jLen; j += 1) { - animatorProps = animators[j].a; - animatorSelector = animators[j].s; - mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); - if (animatorProps.sk.propType) if (mult.length) matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]); - else matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult); - if (animatorProps.r.propType) if (mult.length) matrixHelper.rotateZ(-animatorProps.r.v * mult[2]); - else matrixHelper.rotateZ(-animatorProps.r.v * mult); - if (animatorProps.ry.propType) if (mult.length) matrixHelper.rotateY(animatorProps.ry.v * mult[1]); - else matrixHelper.rotateY(animatorProps.ry.v * mult); - if (animatorProps.rx.propType) if (mult.length) matrixHelper.rotateX(animatorProps.rx.v * mult[0]); - else matrixHelper.rotateX(animatorProps.rx.v * mult); - if (animatorProps.o.propType) if (mult.length) elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0]; - else elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult; - if (documentData.strokeWidthAnim && animatorProps.sw.propType) if (mult.length) sw += animatorProps.sw.v * mult[0]; - else sw += animatorProps.sw.v * mult; - if (documentData.strokeColorAnim && animatorProps.sc.propType) for (k = 0; k < 3; k += 1) if (mult.length) sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0]; - else sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult; - if (documentData.fillColorAnim && documentData.fc) { - if (animatorProps.fc.propType) for (k = 0; k < 3; k += 1) if (mult.length) fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0]; - else fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult; - if (animatorProps.fh.propType) if (mult.length) fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]); - else fc = addHueToRGB(fc, animatorProps.fh.v * mult); - if (animatorProps.fs.propType) if (mult.length) fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]); - else fc = addSaturationToRGB(fc, animatorProps.fs.v * mult); - if (animatorProps.fb.propType) if (mult.length) fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]); - else fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult); - } - } - for (j = 0; j < jLen; j += 1) { - animatorProps = animators[j].a; - if (animatorProps.p.propType) { - animatorSelector = animators[j].s; - mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars); - if (this._hasMaskedPath) if (mult.length) matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]); - else matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult); - else if (mult.length) matrixHelper.translate(animatorProps.p.v[0] * mult[0], animatorProps.p.v[1] * mult[1], -animatorProps.p.v[2] * mult[2]); - else matrixHelper.translate(animatorProps.p.v[0] * mult, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult); - } - } - if (documentData.strokeWidthAnim) letterSw = sw < 0 ? 0 : sw; - if (documentData.strokeColorAnim) letterSc = "rgb(" + Math.round(sc[0] * 255) + "," + Math.round(sc[1] * 255) + "," + Math.round(sc[2] * 255) + ")"; - if (documentData.fillColorAnim && documentData.fc) letterFc = "rgb(" + Math.round(fc[0] * 255) + "," + Math.round(fc[1] * 255) + "," + Math.round(fc[2] * 255) + ")"; - if (this._hasMaskedPath) { - matrixHelper.translate(0, -documentData.ls); - matrixHelper.translate(0, alignment[1] * yOff * .01 + yPos, 0); - if (this._pathData.p.v) { - tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]); - var rot = Math.atan(tanAngle) * 180 / Math.PI; - if (currentPoint.point[0] < prevPoint.point[0]) rot += 180; - matrixHelper.rotate(-rot * Math.PI / 180); - } - matrixHelper.translate(xPathPos, yPathPos, 0); - currentLength -= alignment[0] * letters[i].an * .005; - if (letters[i + 1] && ind !== letters[i + 1].ind) { - currentLength += letters[i].an / 2; - currentLength += documentData.tr * .001 * documentData.finalSize; - } - } else { - matrixHelper.translate(xPos, yPos, 0); - if (documentData.ps) matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0); - switch (documentData.j) { - case 1: - matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]), 0, 0); - break; - case 2: - matrixHelper.translate(letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2, 0, 0); - break; - } - matrixHelper.translate(0, -documentData.ls); - matrixHelper.translate(offf, 0, 0); - matrixHelper.translate(alignment[0] * letters[i].an * .005, alignment[1] * yOff * .01, 0); - xPos += letters[i].l + documentData.tr * .001 * documentData.finalSize; - } - if (renderType === "html") letterM = matrixHelper.toCSS(); - else if (renderType === "svg") letterM = matrixHelper.to2dCSS(); - else letterP = [ - matrixHelper.props[0], - matrixHelper.props[1], - matrixHelper.props[2], - matrixHelper.props[3], - matrixHelper.props[4], - matrixHelper.props[5], - matrixHelper.props[6], - matrixHelper.props[7], - matrixHelper.props[8], - matrixHelper.props[9], - matrixHelper.props[10], - matrixHelper.props[11], - matrixHelper.props[12], - matrixHelper.props[13], - matrixHelper.props[14], - matrixHelper.props[15] - ]; - letterO = elemOpacity; - } - if (renderedLettersCount <= i) { - letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP); - this.renderedLetters.push(letterValue); - renderedLettersCount += 1; - this.lettersChangedFlag = true; - } else { - letterValue = this.renderedLetters[i]; - this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag; - } - } - }; - TextAnimatorProperty.prototype.getValue = function() { - if (this._elem.globalData.frameId === this._frameId) return; - this._frameId = this._elem.globalData.frameId; - this.iterateDynamicProperties(); - }; - TextAnimatorProperty.prototype.mHelper = new Matrix(); - TextAnimatorProperty.prototype.defaultPropsArray = []; - extendPrototype([DynamicPropertyContainer], TextAnimatorProperty); - function ITextElement() {} - ITextElement.prototype.initElement = function(data, globalData, comp) { - this.lettersChangedFlag = true; - this.initFrame(); - this.initBaseData(data, globalData, comp); - this.textProperty = new TextProperty(this, data.t, this.dynamicProperties); - this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this); - this.initTransform(data, globalData, comp); - this.initHierarchy(); - this.initRenderable(); - this.initRendererElement(); - this.createContainerElements(); - this.createRenderableComponents(); - this.createContent(); - this.hide(); - this.textAnimator.searchProperties(this.dynamicProperties); - }; - ITextElement.prototype.prepareFrame = function(num) { - this._mdf = false; - this.prepareRenderableFrame(num); - this.prepareProperties(num, this.isInRange); - if (this.textProperty._mdf || this.textProperty._isFirstFrame) { - this.buildNewText(); - this.textProperty._isFirstFrame = false; - this.textProperty._mdf = false; - } - }; - ITextElement.prototype.createPathShape = function(matrixHelper, shapes) { - var j; - var jLen = shapes.length; - var pathNodes; - var shapeStr = ""; - for (j = 0; j < jLen; j += 1) if (shapes[j].ty === "sh") { - pathNodes = shapes[j].ks.k; - shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper); - } - return shapeStr; - }; - ITextElement.prototype.updateDocumentData = function(newData, index2) { - this.textProperty.updateDocumentData(newData, index2); - }; - ITextElement.prototype.canResizeFont = function(_canResize) { - this.textProperty.canResizeFont(_canResize); - }; - ITextElement.prototype.setMinimumFontSize = function(_fontSize) { - this.textProperty.setMinimumFontSize(_fontSize); - }; - ITextElement.prototype.applyTextPropertiesToMatrix = function(documentData, matrixHelper, lineNumber, xPos, yPos) { - if (documentData.ps) matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0); - matrixHelper.translate(0, -documentData.ls, 0); - switch (documentData.j) { - case 1: - matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]), 0, 0); - break; - case 2: - matrixHelper.translate(documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2, 0, 0); - break; - } - matrixHelper.translate(xPos, yPos, 0); - }; - ITextElement.prototype.buildColor = function(colorData) { - return "rgb(" + Math.round(colorData[0] * 255) + "," + Math.round(colorData[1] * 255) + "," + Math.round(colorData[2] * 255) + ")"; - }; - ITextElement.prototype.emptyProp = new LetterProps(); - ITextElement.prototype.destroy = function() {}; - var emptyShapeData = { shapes: [] }; - function SVGTextLottieElement(data, globalData, comp) { - this.textSpans = []; - this.renderType = "svg"; - this.initElement(data, globalData, comp); - } - extendPrototype([ - BaseElement, - TransformElement, - SVGBaseElement, - HierarchyElement, - FrameElement, - RenderableDOMElement, - ITextElement - ], SVGTextLottieElement); - SVGTextLottieElement.prototype.createContent = function() { - if (this.data.singleShape && !this.globalData.fontManager.chars) this.textContainer = createNS("text"); - }; - SVGTextLottieElement.prototype.buildTextContents = function(textArray) { - var i = 0; - var len = textArray.length; - var textContents = []; - var currentTextContent = ""; - while (i < len) { - if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) { - textContents.push(currentTextContent); - currentTextContent = ""; - } else currentTextContent += textArray[i]; - i += 1; - } - textContents.push(currentTextContent); - return textContents; - }; - SVGTextLottieElement.prototype.buildShapeData = function(data, scale) { - if (data.shapes && data.shapes.length) { - var shape = data.shapes[0]; - if (shape.it) { - var shapeItem = shape.it[shape.it.length - 1]; - if (shapeItem.s) { - shapeItem.s.k[0] = scale; - shapeItem.s.k[1] = scale; - } - } - } - return data; - }; - SVGTextLottieElement.prototype.buildNewText = function() { - this.addDynamicProperty(this); - var i; - var len; - var documentData = this.textProperty.currentData; - this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0); - if (documentData.fc) this.layerElement.setAttribute("fill", this.buildColor(documentData.fc)); - else this.layerElement.setAttribute("fill", "rgba(0,0,0,0)"); - if (documentData.sc) { - this.layerElement.setAttribute("stroke", this.buildColor(documentData.sc)); - this.layerElement.setAttribute("stroke-width", documentData.sw); - } - this.layerElement.setAttribute("font-size", documentData.finalSize); - var fontData = this.globalData.fontManager.getFontByName(documentData.f); - if (fontData.fClass) this.layerElement.setAttribute("class", fontData.fClass); - else { - this.layerElement.setAttribute("font-family", fontData.fFamily); - var fWeight = documentData.fWeight; - var fStyle = documentData.fStyle; - this.layerElement.setAttribute("font-style", fStyle); - this.layerElement.setAttribute("font-weight", fWeight); - } - this.layerElement.setAttribute("aria-label", documentData.t); - var letters = documentData.l || []; - var usesGlyphs = !!this.globalData.fontManager.chars; - len = letters.length; - var tSpan; - var matrixHelper = this.mHelper; - var shapeStr = ""; - var singleShape = this.data.singleShape; - var xPos = 0; - var yPos = 0; - var firstLine = true; - var trackingOffset = documentData.tr * .001 * documentData.finalSize; - if (singleShape && !usesGlyphs && !documentData.sz) { - var tElement = this.textContainer; - var justify = "start"; - switch (documentData.j) { - case 1: - justify = "end"; - break; - case 2: - justify = "middle"; - break; - default: - justify = "start"; - break; - } - tElement.setAttribute("text-anchor", justify); - tElement.setAttribute("letter-spacing", trackingOffset); - var textContent = this.buildTextContents(documentData.finalText); - len = textContent.length; - yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0; - for (i = 0; i < len; i += 1) { - tSpan = this.textSpans[i].span || createNS("tspan"); - tSpan.textContent = textContent[i]; - tSpan.setAttribute("x", 0); - tSpan.setAttribute("y", yPos); - tSpan.style.display = "inherit"; - tElement.appendChild(tSpan); - if (!this.textSpans[i]) this.textSpans[i] = { - span: null, - glyph: null - }; - this.textSpans[i].span = tSpan; - yPos += documentData.finalLineHeight; - } - this.layerElement.appendChild(tElement); - } else { - var cachedSpansLength = this.textSpans.length; - var charData; - for (i = 0; i < len; i += 1) { - if (!this.textSpans[i]) this.textSpans[i] = { - span: null, - childSpan: null, - glyph: null - }; - if (!usesGlyphs || !singleShape || i === 0) { - tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? "g" : "text"); - if (cachedSpansLength <= i) { - tSpan.setAttribute("stroke-linecap", "butt"); - tSpan.setAttribute("stroke-linejoin", "round"); - tSpan.setAttribute("stroke-miterlimit", "4"); - this.textSpans[i].span = tSpan; - if (usesGlyphs) { - var childSpan = createNS("g"); - tSpan.appendChild(childSpan); - this.textSpans[i].childSpan = childSpan; - } - this.textSpans[i].span = tSpan; - this.layerElement.appendChild(tSpan); - } - tSpan.style.display = "inherit"; - } - matrixHelper.reset(); - if (singleShape) { - if (letters[i].n) { - xPos = -trackingOffset; - yPos += documentData.yOffset; - yPos += firstLine ? 1 : 0; - firstLine = false; - } - this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos); - xPos += letters[i].l || 0; - xPos += trackingOffset; - } - if (usesGlyphs) { - charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily); - var glyphElement; - if (charData.t === 1) glyphElement = new SVGCompElement(charData.data, this.globalData, this); - else { - var data = emptyShapeData; - if (charData.data && charData.data.shapes) data = this.buildShapeData(charData.data, documentData.finalSize); - glyphElement = new SVGShapeElement(data, this.globalData, this); - } - if (this.textSpans[i].glyph) { - var glyph = this.textSpans[i].glyph; - this.textSpans[i].childSpan.removeChild(glyph.layerElement); - glyph.destroy(); - } - this.textSpans[i].glyph = glyphElement; - glyphElement._debug = true; - glyphElement.prepareFrame(0); - glyphElement.renderFrame(); - this.textSpans[i].childSpan.appendChild(glyphElement.layerElement); - if (charData.t === 1) this.textSpans[i].childSpan.setAttribute("transform", "scale(" + documentData.finalSize / 100 + "," + documentData.finalSize / 100 + ")"); - } else { - if (singleShape) tSpan.setAttribute("transform", "translate(" + matrixHelper.props[12] + "," + matrixHelper.props[13] + ")"); - tSpan.textContent = letters[i].val; - tSpan.setAttributeNS("http://www.w3.org/XML/1998/namespace", "xml:space", "preserve"); - } - } - if (singleShape && tSpan) tSpan.setAttribute("d", shapeStr); - } - while (i < this.textSpans.length) { - this.textSpans[i].span.style.display = "none"; - i += 1; - } - this._sizeChanged = true; - }; - SVGTextLottieElement.prototype.sourceRectAtTime = function() { - this.prepareFrame(this.comp.renderedFrame - this.data.st); - this.renderInnerContent(); - if (this._sizeChanged) { - this._sizeChanged = false; - var textBox = this.layerElement.getBBox(); - this.bbox = { - top: textBox.y, - left: textBox.x, - width: textBox.width, - height: textBox.height - }; - } - return this.bbox; - }; - SVGTextLottieElement.prototype.getValue = function() { - var i; - var len = this.textSpans.length; - var glyphElement; - this.renderedFrame = this.comp.renderedFrame; - for (i = 0; i < len; i += 1) { - glyphElement = this.textSpans[i].glyph; - if (glyphElement) { - glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st); - if (glyphElement._mdf) this._mdf = true; - } - } - }; - SVGTextLottieElement.prototype.renderInnerContent = function() { - if (!this.data.singleShape || this._mdf) { - this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag); - if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) { - this._sizeChanged = true; - var i; - var len; - var renderedLetters = this.textAnimator.renderedLetters; - var letters = this.textProperty.currentData.l; - len = letters.length; - var renderedLetter; - var textSpan; - var glyphElement; - for (i = 0; i < len; i += 1) if (!letters[i].n) { - renderedLetter = renderedLetters[i]; - textSpan = this.textSpans[i].span; - glyphElement = this.textSpans[i].glyph; - if (glyphElement) glyphElement.renderFrame(); - if (renderedLetter._mdf.m) textSpan.setAttribute("transform", renderedLetter.m); - if (renderedLetter._mdf.o) textSpan.setAttribute("opacity", renderedLetter.o); - if (renderedLetter._mdf.sw) textSpan.setAttribute("stroke-width", renderedLetter.sw); - if (renderedLetter._mdf.sc) textSpan.setAttribute("stroke", renderedLetter.sc); - if (renderedLetter._mdf.fc) textSpan.setAttribute("fill", renderedLetter.fc); - } - } - } - }; - function ISolidElement(data, globalData, comp) { - this.initElement(data, globalData, comp); - } - extendPrototype([IImageElement], ISolidElement); - ISolidElement.prototype.createContent = function() { - var rect = createNS("rect"); - rect.setAttribute("width", this.data.sw); - rect.setAttribute("height", this.data.sh); - rect.setAttribute("fill", this.data.sc); - this.layerElement.appendChild(rect); - }; - function NullElement(data, globalData, comp) { - this.initFrame(); - this.initBaseData(data, globalData, comp); - this.initFrame(); - this.initTransform(data, globalData, comp); - this.initHierarchy(); - } - NullElement.prototype.prepareFrame = function(num) { - this.prepareProperties(num, true); - }; - NullElement.prototype.renderFrame = function() {}; - NullElement.prototype.getBaseElement = function() { - return null; - }; - NullElement.prototype.destroy = function() {}; - NullElement.prototype.sourceRectAtTime = function() {}; - NullElement.prototype.hide = function() {}; - extendPrototype([ - BaseElement, - TransformElement, - HierarchyElement, - FrameElement - ], NullElement); - function SVGRendererBase() {} - extendPrototype([BaseRenderer], SVGRendererBase); - SVGRendererBase.prototype.createNull = function(data) { - return new NullElement(data, this.globalData, this); - }; - SVGRendererBase.prototype.createShape = function(data) { - return new SVGShapeElement(data, this.globalData, this); - }; - SVGRendererBase.prototype.createText = function(data) { - return new SVGTextLottieElement(data, this.globalData, this); - }; - SVGRendererBase.prototype.createImage = function(data) { - return new IImageElement(data, this.globalData, this); - }; - SVGRendererBase.prototype.createSolid = function(data) { - return new ISolidElement(data, this.globalData, this); - }; - SVGRendererBase.prototype.configAnimation = function(animData) { - this.svgElement.setAttribute("xmlns", "http://www.w3.org/2000/svg"); - if (this.renderConfig.viewBoxSize) this.svgElement.setAttribute("viewBox", this.renderConfig.viewBoxSize); - else this.svgElement.setAttribute("viewBox", "0 0 " + animData.w + " " + animData.h); - if (!this.renderConfig.viewBoxOnly) { - this.svgElement.setAttribute("width", animData.w); - this.svgElement.setAttribute("height", animData.h); - this.svgElement.style.width = "100%"; - this.svgElement.style.height = "100%"; - this.svgElement.style.transform = "translate3d(0,0,0)"; - this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility; - } - if (this.renderConfig.width) this.svgElement.setAttribute("width", this.renderConfig.width); - if (this.renderConfig.height) this.svgElement.setAttribute("height", this.renderConfig.height); - if (this.renderConfig.className) this.svgElement.setAttribute("class", this.renderConfig.className); - if (this.renderConfig.id) this.svgElement.setAttribute("id", this.renderConfig.id); - if (this.renderConfig.focusable !== void 0) this.svgElement.setAttribute("focusable", this.renderConfig.focusable); - this.svgElement.setAttribute("preserveAspectRatio", this.renderConfig.preserveAspectRatio); - this.animationItem.wrapper.appendChild(this.svgElement); - var defs = this.globalData.defs; - this.setupGlobalData(animData, defs); - this.globalData.progressiveLoad = this.renderConfig.progressiveLoad; - this.data = animData; - var maskElement = createNS("clipPath"); - var rect = createNS("rect"); - rect.setAttribute("width", animData.w); - rect.setAttribute("height", animData.h); - rect.setAttribute("x", 0); - rect.setAttribute("y", 0); - var maskId = createElementID(); - maskElement.setAttribute("id", maskId); - maskElement.appendChild(rect); - this.layerElement.setAttribute("clip-path", "url(" + getLocationHref() + "#" + maskId + ")"); - defs.appendChild(maskElement); - this.layers = animData.layers; - this.elements = createSizedArray(animData.layers.length); - }; - SVGRendererBase.prototype.destroy = function() { - if (this.animationItem.wrapper) this.animationItem.wrapper.innerText = ""; - this.layerElement = null; - this.globalData.defs = null; - var i; - var len = this.layers ? this.layers.length : 0; - for (i = 0; i < len; i += 1) if (this.elements[i]) this.elements[i].destroy(); - this.elements.length = 0; - this.destroyed = true; - this.animationItem = null; - }; - SVGRendererBase.prototype.updateContainerSize = function() {}; - SVGRendererBase.prototype.buildItem = function(pos) { - var elements = this.elements; - if (elements[pos] || this.layers[pos].ty === 99) return; - elements[pos] = true; - var element = this.createItem(this.layers[pos]); - elements[pos] = element; - if (getExpressionsPlugin()) { - if (this.layers[pos].ty === 0) this.globalData.projectInterface.registerComposition(element); - element.initExpressions(); - } - this.appendElementInPos(element, pos); - if (this.layers[pos].tt) if (!this.elements[pos - 1] || this.elements[pos - 1] === true) { - this.buildItem(pos - 1); - this.addPendingElement(element); - } else element.setMatte(elements[pos - 1].layerId); - }; - SVGRendererBase.prototype.checkPendingElements = function() { - while (this.pendingElements.length) { - var element = this.pendingElements.pop(); - element.checkParenting(); - if (element.data.tt) { - var i = 0; - var len = this.elements.length; - while (i < len) { - if (this.elements[i] === element) { - element.setMatte(this.elements[i - 1].layerId); - break; - } - i += 1; - } - } - } - }; - SVGRendererBase.prototype.renderFrame = function(num) { - if (this.renderedFrame === num || this.destroyed) return; - if (num === null) num = this.renderedFrame; - else this.renderedFrame = num; - this.globalData.frameNum = num; - this.globalData.frameId += 1; - this.globalData.projectInterface.currentFrame = num; - this.globalData._mdf = false; - var i; - var len = this.layers.length; - if (!this.completeLayers) this.checkLayers(num); - for (i = len - 1; i >= 0; i -= 1) if (this.completeLayers || this.elements[i]) this.elements[i].prepareFrame(num - this.layers[i].st); - if (this.globalData._mdf) { - for (i = 0; i < len; i += 1) if (this.completeLayers || this.elements[i]) this.elements[i].renderFrame(); - } - }; - SVGRendererBase.prototype.appendElementInPos = function(element, pos) { - var newElement = element.getBaseElement(); - if (!newElement) return; - var i = 0; - var nextElement; - while (i < pos) { - if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) nextElement = this.elements[i].getBaseElement(); - i += 1; - } - if (nextElement) this.layerElement.insertBefore(newElement, nextElement); - else this.layerElement.appendChild(newElement); - }; - SVGRendererBase.prototype.hide = function() { - this.layerElement.style.display = "none"; - }; - SVGRendererBase.prototype.show = function() { - this.layerElement.style.display = "block"; - }; - function ICompElement() {} - extendPrototype([ - BaseElement, - TransformElement, - HierarchyElement, - FrameElement, - RenderableDOMElement - ], ICompElement); - ICompElement.prototype.initElement = function(data, globalData, comp) { - this.initFrame(); - this.initBaseData(data, globalData, comp); - this.initTransform(data, globalData, comp); - this.initRenderable(); - this.initHierarchy(); - this.initRendererElement(); - this.createContainerElements(); - this.createRenderableComponents(); - if (this.data.xt || !globalData.progressiveLoad) this.buildAllItems(); - this.hide(); - }; - ICompElement.prototype.prepareFrame = function(num) { - this._mdf = false; - this.prepareRenderableFrame(num); - this.prepareProperties(num, this.isInRange); - if (!this.isInRange && !this.data.xt) return; - if (!this.tm._placeholder) { - var timeRemapped = this.tm.v; - if (timeRemapped === this.data.op) timeRemapped = this.data.op - 1; - this.renderedFrame = timeRemapped; - } else this.renderedFrame = num / this.data.sr; - var i; - var len = this.elements.length; - if (!this.completeLayers) this.checkLayers(this.renderedFrame); - for (i = len - 1; i >= 0; i -= 1) if (this.completeLayers || this.elements[i]) { - this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st); - if (this.elements[i]._mdf) this._mdf = true; - } - }; - ICompElement.prototype.renderInnerContent = function() { - var i; - var len = this.layers.length; - for (i = 0; i < len; i += 1) if (this.completeLayers || this.elements[i]) this.elements[i].renderFrame(); - }; - ICompElement.prototype.setElements = function(elems) { - this.elements = elems; - }; - ICompElement.prototype.getElements = function() { - return this.elements; - }; - ICompElement.prototype.destroyElements = function() { - var i; - var len = this.layers.length; - for (i = 0; i < len; i += 1) if (this.elements[i]) this.elements[i].destroy(); - }; - ICompElement.prototype.destroy = function() { - this.destroyElements(); - this.destroyBaseElement(); - }; - function SVGCompElement(data, globalData, comp) { - this.layers = data.layers; - this.supports3d = true; - this.completeLayers = false; - this.pendingElements = []; - this.elements = this.layers ? createSizedArray(this.layers.length) : []; - this.initElement(data, globalData, comp); - this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true }; - } - extendPrototype([ - SVGRendererBase, - ICompElement, - SVGBaseElement - ], SVGCompElement); - SVGCompElement.prototype.createComp = function(data) { - return new SVGCompElement(data, this.globalData, this); - }; - function SVGRenderer(animationItem, config) { - this.animationItem = animationItem; - this.layers = null; - this.renderedFrame = -1; - this.svgElement = createNS("svg"); - var ariaLabel = ""; - if (config && config.title) { - var titleElement = createNS("title"); - var titleId = createElementID(); - titleElement.setAttribute("id", titleId); - titleElement.textContent = config.title; - this.svgElement.appendChild(titleElement); - ariaLabel += titleId; - } - if (config && config.description) { - var descElement = createNS("desc"); - var descId = createElementID(); - descElement.setAttribute("id", descId); - descElement.textContent = config.description; - this.svgElement.appendChild(descElement); - ariaLabel += " " + descId; - } - if (ariaLabel) this.svgElement.setAttribute("aria-labelledby", ariaLabel); - var defs = createNS("defs"); - this.svgElement.appendChild(defs); - var maskElement = createNS("g"); - this.svgElement.appendChild(maskElement); - this.layerElement = maskElement; - this.renderConfig = { - preserveAspectRatio: config && config.preserveAspectRatio || "xMidYMid meet", - imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || "xMidYMid slice", - contentVisibility: config && config.contentVisibility || "visible", - progressiveLoad: config && config.progressiveLoad || false, - hideOnTransparent: !(config && config.hideOnTransparent === false), - viewBoxOnly: config && config.viewBoxOnly || false, - viewBoxSize: config && config.viewBoxSize || false, - className: config && config.className || "", - id: config && config.id || "", - focusable: config && config.focusable, - filterSize: { - width: config && config.filterSize && config.filterSize.width || "100%", - height: config && config.filterSize && config.filterSize.height || "100%", - x: config && config.filterSize && config.filterSize.x || "0%", - y: config && config.filterSize && config.filterSize.y || "0%" - }, - width: config && config.width, - height: config && config.height - }; - this.globalData = { - _mdf: false, - frameNum: -1, - defs, - renderConfig: this.renderConfig - }; - this.elements = []; - this.pendingElements = []; - this.destroyed = false; - this.rendererType = "svg"; - } - extendPrototype([SVGRendererBase], SVGRenderer); - SVGRenderer.prototype.createComp = function(data) { - return new SVGCompElement(data, this.globalData, this); - }; - function CVContextData() { - this.saved = []; - this.cArrPos = 0; - this.cTr = new Matrix(); - this.cO = 1; - var i; - var len = 15; - this.savedOp = createTypedArray("float32", len); - for (i = 0; i < len; i += 1) this.saved[i] = createTypedArray("float32", 16); - this._length = len; - } - CVContextData.prototype.duplicate = function() { - var newLength = this._length * 2; - var currentSavedOp = this.savedOp; - this.savedOp = createTypedArray("float32", newLength); - this.savedOp.set(currentSavedOp); - var i = 0; - for (i = this._length; i < newLength; i += 1) this.saved[i] = createTypedArray("float32", 16); - this._length = newLength; - }; - CVContextData.prototype.reset = function() { - this.cArrPos = 0; - this.cTr.reset(); - this.cO = 1; - }; - function ShapeTransformManager() { - this.sequences = {}; - this.sequenceList = []; - this.transform_key_count = 0; - } - ShapeTransformManager.prototype = { - addTransformSequence: function(transforms) { - var i; - var len = transforms.length; - var key = "_"; - for (i = 0; i < len; i += 1) key += transforms[i].transform.key + "_"; - var sequence = this.sequences[key]; - if (!sequence) { - sequence = { - transforms: [].concat(transforms), - finalTransform: new Matrix(), - _mdf: false - }; - this.sequences[key] = sequence; - this.sequenceList.push(sequence); - } - return sequence; - }, - processSequence: function(sequence, isFirstFrame) { - var i = 0; - var len = sequence.transforms.length; - var _mdf = isFirstFrame; - while (i < len && !isFirstFrame) { - if (sequence.transforms[i].transform.mProps._mdf) { - _mdf = true; - break; - } - i += 1; - } - if (_mdf) { - var props; - sequence.finalTransform.reset(); - for (i = len - 1; i >= 0; i -= 1) { - props = sequence.transforms[i].transform.mProps.v.props; - sequence.finalTransform.transform(props[0], props[1], props[2], props[3], props[4], props[5], props[6], props[7], props[8], props[9], props[10], props[11], props[12], props[13], props[14], props[15]); - } - } - sequence._mdf = _mdf; - }, - processSequences: function(isFirstFrame) { - var i; - var len = this.sequenceList.length; - for (i = 0; i < len; i += 1) this.processSequence(this.sequenceList[i], isFirstFrame); - }, - getNewKey: function() { - this.transform_key_count += 1; - return "_" + this.transform_key_count; - } - }; - function CVEffects() {} - CVEffects.prototype.renderFrame = function() {}; - function CVMaskElement(data, element) { - this.data = data; - this.element = element; - this.masksProperties = this.data.masksProperties || []; - this.viewData = createSizedArray(this.masksProperties.length); - var i; - var len = this.masksProperties.length; - var hasMasks = false; - for (i = 0; i < len; i += 1) { - if (this.masksProperties[i].mode !== "n") hasMasks = true; - this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3); - } - this.hasMasks = hasMasks; - if (hasMasks) this.element.addRenderableComponent(this); - } - CVMaskElement.prototype.renderFrame = function() { - if (!this.hasMasks) return; - var transform = this.element.finalTransform.mat; - var ctx = this.element.canvasContext; - var i; - var len = this.masksProperties.length; - var pt; - var pts; - var data; - ctx.beginPath(); - for (i = 0; i < len; i += 1) if (this.masksProperties[i].mode !== "n") { - if (this.masksProperties[i].inv) { - ctx.moveTo(0, 0); - ctx.lineTo(this.element.globalData.compSize.w, 0); - ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h); - ctx.lineTo(0, this.element.globalData.compSize.h); - ctx.lineTo(0, 0); - } - data = this.viewData[i].v; - pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0); - ctx.moveTo(pt[0], pt[1]); - var j; - var jLen = data._length; - for (j = 1; j < jLen; j += 1) { - pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]); - ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]); - } - pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]); - ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]); - } - this.element.globalData.renderer.save(true); - ctx.clip(); - }; - CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty; - CVMaskElement.prototype.destroy = function() { - this.element = null; - }; - function CVBaseElement() {} - CVBaseElement.prototype = { - createElements: function() {}, - initRendererElement: function() {}, - createContainerElements: function() { - this.canvasContext = this.globalData.canvasContext; - this.renderableEffectsManager = new CVEffects(); - }, - createContent: function() {}, - setBlendMode: function() { - var globalData = this.globalData; - if (globalData.blendMode !== this.data.bm) { - globalData.blendMode = this.data.bm; - var blendModeValue = getBlendMode(this.data.bm); - globalData.canvasContext.globalCompositeOperation = blendModeValue; - } - }, - createRenderableComponents: function() { - this.maskManager = new CVMaskElement(this.data, this); - }, - hideElement: function() { - if (!this.hidden && (!this.isInRange || this.isTransparent)) this.hidden = true; - }, - showElement: function() { - if (this.isInRange && !this.isTransparent) { - this.hidden = false; - this._isFirstFrame = true; - this.maskManager._isFirstFrame = true; - } - }, - renderFrame: function() { - if (this.hidden || this.data.hd) return; - this.renderTransform(); - this.renderRenderable(); - this.setBlendMode(); - var forceRealStack = this.data.ty === 0; - this.globalData.renderer.save(forceRealStack); - this.globalData.renderer.ctxTransform(this.finalTransform.mat.props); - this.globalData.renderer.ctxOpacity(this.finalTransform.mProp.o.v); - this.renderInnerContent(); - this.globalData.renderer.restore(forceRealStack); - if (this.maskManager.hasMasks) this.globalData.renderer.restore(true); - if (this._isFirstFrame) this._isFirstFrame = false; - }, - destroy: function() { - this.canvasContext = null; - this.data = null; - this.globalData = null; - this.maskManager.destroy(); - }, - mHelper: new Matrix() - }; - CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement; - CVBaseElement.prototype.show = CVBaseElement.prototype.showElement; - function CVShapeData(element, data, styles, transformsManager) { - this.styledShapes = []; - this.tr = [ - 0, - 0, - 0, - 0, - 0, - 0 - ]; - var ty = 4; - if (data.ty === "rc") ty = 5; - else if (data.ty === "el") ty = 6; - else if (data.ty === "sr") ty = 7; - this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element); - var i; - var len = styles.length; - var styledShape; - for (i = 0; i < len; i += 1) if (!styles[i].closed) { - styledShape = { - transforms: transformsManager.addTransformSequence(styles[i].transforms), - trNodes: [] - }; - this.styledShapes.push(styledShape); - styles[i].elements.push(styledShape); - } - } - CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated; - function CVShapeElement(data, globalData, comp) { - this.shapes = []; - this.shapesData = data.shapes; - this.stylesList = []; - this.itemsData = []; - this.prevViewData = []; - this.shapeModifiers = []; - this.processedElements = []; - this.transformsManager = new ShapeTransformManager(); - this.initElement(data, globalData, comp); - } - extendPrototype([ - BaseElement, - TransformElement, - CVBaseElement, - IShapeElement, - HierarchyElement, - FrameElement, - RenderableElement - ], CVShapeElement); - CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement; - CVShapeElement.prototype.transformHelper = { - opacity: 1, - _opMdf: false - }; - CVShapeElement.prototype.dashResetter = []; - CVShapeElement.prototype.createContent = function() { - this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []); - }; - CVShapeElement.prototype.createStyleElement = function(data, transforms) { - var styleElem = { - data, - type: data.ty, - preTransforms: this.transformsManager.addTransformSequence(transforms), - transforms: [], - elements: [], - closed: data.hd === true - }; - var elementData = {}; - if (data.ty === "fl" || data.ty === "st") { - elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this); - if (!elementData.c.k) styleElem.co = "rgb(" + bmFloor(elementData.c.v[0]) + "," + bmFloor(elementData.c.v[1]) + "," + bmFloor(elementData.c.v[2]) + ")"; - } else if (data.ty === "gf" || data.ty === "gs") { - elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this); - elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this); - elementData.h = PropertyFactory.getProp(this, data.h || { k: 0 }, 0, .01, this); - elementData.a = PropertyFactory.getProp(this, data.a || { k: 0 }, 0, degToRads, this); - elementData.g = new GradientProperty(this, data.g, this); - } - elementData.o = PropertyFactory.getProp(this, data.o, 0, .01, this); - if (data.ty === "st" || data.ty === "gs") { - styleElem.lc = lineCapEnum[data.lc || 2]; - styleElem.lj = lineJoinEnum[data.lj || 2]; - if (data.lj == 1) styleElem.ml = data.ml; - elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this); - if (!elementData.w.k) styleElem.wi = elementData.w.v; - if (data.d) { - elementData.d = new DashProperty(this, data.d, "canvas", this); - if (!elementData.d.k) { - styleElem.da = elementData.d.dashArray; - styleElem.do = elementData.d.dashoffset[0]; - } - } - } else styleElem.r = data.r === 2 ? "evenodd" : "nonzero"; - this.stylesList.push(styleElem); - elementData.style = styleElem; - return elementData; - }; - CVShapeElement.prototype.createGroupElement = function() { - return { - it: [], - prevViewData: [] - }; - }; - CVShapeElement.prototype.createTransformElement = function(data) { - return { transform: { - opacity: 1, - _opMdf: false, - key: this.transformsManager.getNewKey(), - op: PropertyFactory.getProp(this, data.o, 0, .01, this), - mProps: TransformPropertyFactory.getTransformProperty(this, data, this) - } }; - }; - CVShapeElement.prototype.createShapeElement = function(data) { - var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager); - this.shapes.push(elementData); - this.addShapeToModifiers(elementData); - return elementData; - }; - CVShapeElement.prototype.reloadShapes = function() { - this._isFirstFrame = true; - var i; - var len = this.itemsData.length; - for (i = 0; i < len; i += 1) this.prevViewData[i] = this.itemsData[i]; - this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []); - len = this.dynamicProperties.length; - for (i = 0; i < len; i += 1) this.dynamicProperties[i].getValue(); - this.renderModifiers(); - this.transformsManager.processSequences(this._isFirstFrame); - }; - CVShapeElement.prototype.addTransformToStyleList = function(transform) { - var i; - var len = this.stylesList.length; - for (i = 0; i < len; i += 1) if (!this.stylesList[i].closed) this.stylesList[i].transforms.push(transform); - }; - CVShapeElement.prototype.removeTransformFromStyleList = function() { - var i; - var len = this.stylesList.length; - for (i = 0; i < len; i += 1) if (!this.stylesList[i].closed) this.stylesList[i].transforms.pop(); - }; - CVShapeElement.prototype.closeStyles = function(styles) { - var i; - var len = styles.length; - for (i = 0; i < len; i += 1) styles[i].closed = true; - }; - CVShapeElement.prototype.searchShapes = function(arr, itemsData, prevViewData, shouldRender, transforms) { - var i; - var len = arr.length - 1; - var j; - var jLen; - var ownStyles = []; - var ownModifiers = []; - var processedPos; - var modifier; - var currentTransform; - var ownTransforms = [].concat(transforms); - for (i = len; i >= 0; i -= 1) { - processedPos = this.searchProcessedElement(arr[i]); - if (!processedPos) arr[i]._shouldRender = shouldRender; - else itemsData[i] = prevViewData[processedPos - 1]; - if (arr[i].ty === "fl" || arr[i].ty === "st" || arr[i].ty === "gf" || arr[i].ty === "gs") { - if (!processedPos) itemsData[i] = this.createStyleElement(arr[i], ownTransforms); - else itemsData[i].style.closed = false; - ownStyles.push(itemsData[i].style); - } else if (arr[i].ty === "gr") { - if (!processedPos) itemsData[i] = this.createGroupElement(arr[i]); - else { - jLen = itemsData[i].it.length; - for (j = 0; j < jLen; j += 1) itemsData[i].prevViewData[j] = itemsData[i].it[j]; - } - this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms); - } else if (arr[i].ty === "tr") { - if (!processedPos) { - currentTransform = this.createTransformElement(arr[i]); - itemsData[i] = currentTransform; - } - ownTransforms.push(itemsData[i]); - this.addTransformToStyleList(itemsData[i]); - } else if (arr[i].ty === "sh" || arr[i].ty === "rc" || arr[i].ty === "el" || arr[i].ty === "sr") { - if (!processedPos) itemsData[i] = this.createShapeElement(arr[i]); - } else if (arr[i].ty === "tm" || arr[i].ty === "rd" || arr[i].ty === "pb") { - if (!processedPos) { - modifier = ShapeModifiers.getModifier(arr[i].ty); - modifier.init(this, arr[i]); - itemsData[i] = modifier; - this.shapeModifiers.push(modifier); - } else { - modifier = itemsData[i]; - modifier.closed = false; - } - ownModifiers.push(modifier); - } else if (arr[i].ty === "rp") { - if (!processedPos) { - modifier = ShapeModifiers.getModifier(arr[i].ty); - itemsData[i] = modifier; - modifier.init(this, arr, i, itemsData); - this.shapeModifiers.push(modifier); - shouldRender = false; - } else { - modifier = itemsData[i]; - modifier.closed = true; - } - ownModifiers.push(modifier); - } - this.addProcessedElement(arr[i], i + 1); - } - this.removeTransformFromStyleList(); - this.closeStyles(ownStyles); - len = ownModifiers.length; - for (i = 0; i < len; i += 1) ownModifiers[i].closed = true; - }; - CVShapeElement.prototype.renderInnerContent = function() { - this.transformHelper.opacity = 1; - this.transformHelper._opMdf = false; - this.renderModifiers(); - this.transformsManager.processSequences(this._isFirstFrame); - this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true); - }; - CVShapeElement.prototype.renderShapeTransform = function(parentTransform, groupTransform) { - if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) { - groupTransform.opacity = parentTransform.opacity; - groupTransform.opacity *= groupTransform.op.v; - groupTransform._opMdf = true; - } - }; - CVShapeElement.prototype.drawLayer = function() { - var i; - var len = this.stylesList.length; - var j; - var jLen; - var k; - var kLen; - var elems; - var nodes; - var renderer = this.globalData.renderer; - var ctx = this.globalData.canvasContext; - var type; - var currentStyle; - for (i = 0; i < len; i += 1) { - currentStyle = this.stylesList[i]; - type = currentStyle.type; - if (!((type === "st" || type === "gs") && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) { - renderer.save(); - elems = currentStyle.elements; - if (type === "st" || type === "gs") { - ctx.strokeStyle = type === "st" ? currentStyle.co : currentStyle.grd; - ctx.lineWidth = currentStyle.wi; - ctx.lineCap = currentStyle.lc; - ctx.lineJoin = currentStyle.lj; - ctx.miterLimit = currentStyle.ml || 0; - } else ctx.fillStyle = type === "fl" ? currentStyle.co : currentStyle.grd; - renderer.ctxOpacity(currentStyle.coOp); - if (type !== "st" && type !== "gs") ctx.beginPath(); - renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props); - jLen = elems.length; - for (j = 0; j < jLen; j += 1) { - if (type === "st" || type === "gs") { - ctx.beginPath(); - if (currentStyle.da) { - ctx.setLineDash(currentStyle.da); - ctx.lineDashOffset = currentStyle.do; - } - } - nodes = elems[j].trNodes; - kLen = nodes.length; - for (k = 0; k < kLen; k += 1) if (nodes[k].t === "m") ctx.moveTo(nodes[k].p[0], nodes[k].p[1]); - else if (nodes[k].t === "c") ctx.bezierCurveTo(nodes[k].pts[0], nodes[k].pts[1], nodes[k].pts[2], nodes[k].pts[3], nodes[k].pts[4], nodes[k].pts[5]); - else ctx.closePath(); - if (type === "st" || type === "gs") { - ctx.stroke(); - if (currentStyle.da) ctx.setLineDash(this.dashResetter); - } - } - if (type !== "st" && type !== "gs") ctx.fill(currentStyle.r); - renderer.restore(); - } - } - }; - CVShapeElement.prototype.renderShape = function(parentTransform, items, data, isMain) { - var i; - var len = items.length - 1; - var groupTransform = parentTransform; - for (i = len; i >= 0; i -= 1) if (items[i].ty === "tr") { - groupTransform = data[i].transform; - this.renderShapeTransform(parentTransform, groupTransform); - } else if (items[i].ty === "sh" || items[i].ty === "el" || items[i].ty === "rc" || items[i].ty === "sr") this.renderPath(items[i], data[i]); - else if (items[i].ty === "fl") this.renderFill(items[i], data[i], groupTransform); - else if (items[i].ty === "st") this.renderStroke(items[i], data[i], groupTransform); - else if (items[i].ty === "gf" || items[i].ty === "gs") this.renderGradientFill(items[i], data[i], groupTransform); - else if (items[i].ty === "gr") this.renderShape(groupTransform, items[i].it, data[i].it); - else if (items[i].ty === "tm"); - if (isMain) this.drawLayer(); - }; - CVShapeElement.prototype.renderStyledShape = function(styledShape, shape) { - if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) { - var shapeNodes = styledShape.trNodes; - var paths = shape.paths; - var i; - var len; - var j; - var jLen = paths._length; - shapeNodes.length = 0; - var groupTransformMat = styledShape.transforms.finalTransform; - for (j = 0; j < jLen; j += 1) { - var pathNodes = paths.shapes[j]; - if (pathNodes && pathNodes.v) { - len = pathNodes._length; - for (i = 1; i < len; i += 1) { - if (i === 1) shapeNodes.push({ - t: "m", - p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0) - }); - shapeNodes.push({ - t: "c", - pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i]) - }); - } - if (len === 1) shapeNodes.push({ - t: "m", - p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0) - }); - if (pathNodes.c && len) { - shapeNodes.push({ - t: "c", - pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0]) - }); - shapeNodes.push({ t: "z" }); - } - } - } - styledShape.trNodes = shapeNodes; - } - }; - CVShapeElement.prototype.renderPath = function(pathData, itemData) { - if (pathData.hd !== true && pathData._shouldRender) { - var i; - var len = itemData.styledShapes.length; - for (i = 0; i < len; i += 1) this.renderStyledShape(itemData.styledShapes[i], itemData.sh); - } - }; - CVShapeElement.prototype.renderFill = function(styleData, itemData, groupTransform) { - var styleElem = itemData.style; - if (itemData.c._mdf || this._isFirstFrame) styleElem.co = "rgb(" + bmFloor(itemData.c.v[0]) + "," + bmFloor(itemData.c.v[1]) + "," + bmFloor(itemData.c.v[2]) + ")"; - if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) styleElem.coOp = itemData.o.v * groupTransform.opacity; - }; - CVShapeElement.prototype.renderGradientFill = function(styleData, itemData, groupTransform) { - var styleElem = itemData.style; - var grd; - if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) { - var ctx = this.globalData.canvasContext; - var pt1 = itemData.s.v; - var pt2 = itemData.e.v; - if (styleData.t === 1) grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]); - else { - var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2)); - var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]); - var percent = itemData.h.v; - if (percent >= 1) percent = .99; - else if (percent <= -1) percent = -.99; - var dist = rad * percent; - var x = Math.cos(ang + itemData.a.v) * dist + pt1[0]; - var y = Math.sin(ang + itemData.a.v) * dist + pt1[1]; - grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad); - } - var i; - var len = styleData.g.p; - var cValues = itemData.g.c; - var opacity = 1; - for (i = 0; i < len; i += 1) { - if (itemData.g._hasOpacity && itemData.g._collapsable) opacity = itemData.g.o[i * 2 + 1]; - grd.addColorStop(cValues[i * 4] / 100, "rgba(" + cValues[i * 4 + 1] + "," + cValues[i * 4 + 2] + "," + cValues[i * 4 + 3] + "," + opacity + ")"); - } - styleElem.grd = grd; - } - styleElem.coOp = itemData.o.v * groupTransform.opacity; - }; - CVShapeElement.prototype.renderStroke = function(styleData, itemData, groupTransform) { - var styleElem = itemData.style; - var d = itemData.d; - if (d && (d._mdf || this._isFirstFrame)) { - styleElem.da = d.dashArray; - styleElem.do = d.dashoffset[0]; - } - if (itemData.c._mdf || this._isFirstFrame) styleElem.co = "rgb(" + bmFloor(itemData.c.v[0]) + "," + bmFloor(itemData.c.v[1]) + "," + bmFloor(itemData.c.v[2]) + ")"; - if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) styleElem.coOp = itemData.o.v * groupTransform.opacity; - if (itemData.w._mdf || this._isFirstFrame) styleElem.wi = itemData.w.v; - }; - CVShapeElement.prototype.destroy = function() { - this.shapesData = null; - this.globalData = null; - this.canvasContext = null; - this.stylesList.length = 0; - this.itemsData.length = 0; - }; - function CVTextElement(data, globalData, comp) { - this.textSpans = []; - this.yOffset = 0; - this.fillColorAnim = false; - this.strokeColorAnim = false; - this.strokeWidthAnim = false; - this.stroke = false; - this.fill = false; - this.justifyOffset = 0; - this.currentRender = null; - this.renderType = "canvas"; - this.values = { - fill: "rgba(0,0,0,0)", - stroke: "rgba(0,0,0,0)", - sWidth: 0, - fValue: "" - }; - this.initElement(data, globalData, comp); - } - extendPrototype([ - BaseElement, - TransformElement, - CVBaseElement, - HierarchyElement, - FrameElement, - RenderableElement, - ITextElement - ], CVTextElement); - CVTextElement.prototype.tHelper = createTag("canvas").getContext("2d"); - CVTextElement.prototype.buildNewText = function() { - var documentData = this.textProperty.currentData; - this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0); - var hasFill = false; - if (documentData.fc) { - hasFill = true; - this.values.fill = this.buildColor(documentData.fc); - } else this.values.fill = "rgba(0,0,0,0)"; - this.fill = hasFill; - var hasStroke = false; - if (documentData.sc) { - hasStroke = true; - this.values.stroke = this.buildColor(documentData.sc); - this.values.sWidth = documentData.sw; - } - var fontData = this.globalData.fontManager.getFontByName(documentData.f); - var i; - var len; - var letters = documentData.l; - var matrixHelper = this.mHelper; - this.stroke = hasStroke; - this.values.fValue = documentData.finalSize + "px " + this.globalData.fontManager.getFontByName(documentData.f).fFamily; - len = documentData.finalText.length; - var charData; - var shapeData; - var k; - var kLen; - var shapes; - var j; - var jLen; - var pathNodes; - var commands; - var pathArr; - var singleShape = this.data.singleShape; - var trackingOffset = documentData.tr * .001 * documentData.finalSize; - var xPos = 0; - var yPos = 0; - var firstLine = true; - var cnt = 0; - for (i = 0; i < len; i += 1) { - charData = this.globalData.fontManager.getCharData(documentData.finalText[i], fontData.fStyle, this.globalData.fontManager.getFontByName(documentData.f).fFamily); - shapeData = charData && charData.data || {}; - matrixHelper.reset(); - if (singleShape && letters[i].n) { - xPos = -trackingOffset; - yPos += documentData.yOffset; - yPos += firstLine ? 1 : 0; - firstLine = false; - } - shapes = shapeData.shapes ? shapeData.shapes[0].it : []; - jLen = shapes.length; - matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100); - if (singleShape) this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos); - commands = createSizedArray(jLen - 1); - var commandsCounter = 0; - for (j = 0; j < jLen; j += 1) if (shapes[j].ty === "sh") { - kLen = shapes[j].ks.k.i.length; - pathNodes = shapes[j].ks.k; - pathArr = []; - for (k = 1; k < kLen; k += 1) { - if (k === 1) pathArr.push(matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0)); - pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0), matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0), matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0)); - } - pathArr.push(matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0), matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0), matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0), matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0)); - commands[commandsCounter] = pathArr; - commandsCounter += 1; - } - if (singleShape) { - xPos += letters[i].l; - xPos += trackingOffset; - } - if (this.textSpans[cnt]) this.textSpans[cnt].elem = commands; - else this.textSpans[cnt] = { elem: commands }; - cnt += 1; - } - }; - CVTextElement.prototype.renderInnerContent = function() { - var ctx = this.canvasContext; - ctx.font = this.values.fValue; - ctx.lineCap = "butt"; - ctx.lineJoin = "miter"; - ctx.miterLimit = 4; - if (!this.data.singleShape) this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag); - var i; - var len; - var j; - var jLen; - var k; - var kLen; - var renderedLetters = this.textAnimator.renderedLetters; - var letters = this.textProperty.currentData.l; - len = letters.length; - var renderedLetter; - var lastFill = null; - var lastStroke = null; - var lastStrokeW = null; - var commands; - var pathArr; - for (i = 0; i < len; i += 1) if (!letters[i].n) { - renderedLetter = renderedLetters[i]; - if (renderedLetter) { - this.globalData.renderer.save(); - this.globalData.renderer.ctxTransform(renderedLetter.p); - this.globalData.renderer.ctxOpacity(renderedLetter.o); - } - if (this.fill) { - if (renderedLetter && renderedLetter.fc) { - if (lastFill !== renderedLetter.fc) { - lastFill = renderedLetter.fc; - ctx.fillStyle = renderedLetter.fc; - } - } else if (lastFill !== this.values.fill) { - lastFill = this.values.fill; - ctx.fillStyle = this.values.fill; - } - commands = this.textSpans[i].elem; - jLen = commands.length; - this.globalData.canvasContext.beginPath(); - for (j = 0; j < jLen; j += 1) { - pathArr = commands[j]; - kLen = pathArr.length; - this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]); - for (k = 2; k < kLen; k += 6) this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]); - } - this.globalData.canvasContext.closePath(); - this.globalData.canvasContext.fill(); - } - if (this.stroke) { - if (renderedLetter && renderedLetter.sw) { - if (lastStrokeW !== renderedLetter.sw) { - lastStrokeW = renderedLetter.sw; - ctx.lineWidth = renderedLetter.sw; - } - } else if (lastStrokeW !== this.values.sWidth) { - lastStrokeW = this.values.sWidth; - ctx.lineWidth = this.values.sWidth; - } - if (renderedLetter && renderedLetter.sc) { - if (lastStroke !== renderedLetter.sc) { - lastStroke = renderedLetter.sc; - ctx.strokeStyle = renderedLetter.sc; - } - } else if (lastStroke !== this.values.stroke) { - lastStroke = this.values.stroke; - ctx.strokeStyle = this.values.stroke; - } - commands = this.textSpans[i].elem; - jLen = commands.length; - this.globalData.canvasContext.beginPath(); - for (j = 0; j < jLen; j += 1) { - pathArr = commands[j]; - kLen = pathArr.length; - this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]); - for (k = 2; k < kLen; k += 6) this.globalData.canvasContext.bezierCurveTo(pathArr[k], pathArr[k + 1], pathArr[k + 2], pathArr[k + 3], pathArr[k + 4], pathArr[k + 5]); - } - this.globalData.canvasContext.closePath(); - this.globalData.canvasContext.stroke(); - } - if (renderedLetter) this.globalData.renderer.restore(); - } - }; - function CVImageElement(data, globalData, comp) { - this.assetData = globalData.getAssetData(data.refId); - this.img = globalData.imageLoader.getAsset(this.assetData); - this.initElement(data, globalData, comp); - } - extendPrototype([ - BaseElement, - TransformElement, - CVBaseElement, - HierarchyElement, - FrameElement, - RenderableElement - ], CVImageElement); - CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement; - CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame; - CVImageElement.prototype.createContent = function() { - if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) { - var canvas = createTag("canvas"); - canvas.width = this.assetData.w; - canvas.height = this.assetData.h; - var ctx = canvas.getContext("2d"); - var imgW = this.img.width; - var imgH = this.img.height; - var imgRel = imgW / imgH; - var canvasRel = this.assetData.w / this.assetData.h; - var widthCrop; - var heightCrop; - var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio; - if (imgRel > canvasRel && par === "xMidYMid slice" || imgRel < canvasRel && par !== "xMidYMid slice") { - heightCrop = imgH; - widthCrop = heightCrop * canvasRel; - } else { - widthCrop = imgW; - heightCrop = widthCrop / canvasRel; - } - ctx.drawImage(this.img, (imgW - widthCrop) / 2, (imgH - heightCrop) / 2, widthCrop, heightCrop, 0, 0, this.assetData.w, this.assetData.h); - this.img = canvas; - } - }; - CVImageElement.prototype.renderInnerContent = function() { - this.canvasContext.drawImage(this.img, 0, 0); - }; - CVImageElement.prototype.destroy = function() { - this.img = null; - }; - function CVSolidElement(data, globalData, comp) { - this.initElement(data, globalData, comp); - } - extendPrototype([ - BaseElement, - TransformElement, - CVBaseElement, - HierarchyElement, - FrameElement, - RenderableElement - ], CVSolidElement); - CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement; - CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame; - CVSolidElement.prototype.renderInnerContent = function() { - var ctx = this.canvasContext; - ctx.fillStyle = this.data.sc; - ctx.fillRect(0, 0, this.data.sw, this.data.sh); - }; - function CanvasRendererBase(animationItem, config) { - this.animationItem = animationItem; - this.renderConfig = { - clearCanvas: config && config.clearCanvas !== void 0 ? config.clearCanvas : true, - context: config && config.context || null, - progressiveLoad: config && config.progressiveLoad || false, - preserveAspectRatio: config && config.preserveAspectRatio || "xMidYMid meet", - imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || "xMidYMid slice", - contentVisibility: config && config.contentVisibility || "visible", - className: config && config.className || "", - id: config && config.id || "" - }; - this.renderConfig.dpr = config && config.dpr || 1; - if (this.animationItem.wrapper) this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1; - this.renderedFrame = -1; - this.globalData = { - frameNum: -1, - _mdf: false, - renderConfig: this.renderConfig, - currentGlobalAlpha: -1 - }; - this.contextData = new CVContextData(); - this.elements = []; - this.pendingElements = []; - this.transformMat = new Matrix(); - this.completeLayers = false; - this.rendererType = "canvas"; - } - extendPrototype([BaseRenderer], CanvasRendererBase); - CanvasRendererBase.prototype.createShape = function(data) { - return new CVShapeElement(data, this.globalData, this); - }; - CanvasRendererBase.prototype.createText = function(data) { - return new CVTextElement(data, this.globalData, this); - }; - CanvasRendererBase.prototype.createImage = function(data) { - return new CVImageElement(data, this.globalData, this); - }; - CanvasRendererBase.prototype.createSolid = function(data) { - return new CVSolidElement(data, this.globalData, this); - }; - CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull; - CanvasRendererBase.prototype.ctxTransform = function(props) { - if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) return; - if (!this.renderConfig.clearCanvas) { - this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]); - return; - } - this.transformMat.cloneFromProps(props); - var cProps = this.contextData.cTr.props; - this.transformMat.transform(cProps[0], cProps[1], cProps[2], cProps[3], cProps[4], cProps[5], cProps[6], cProps[7], cProps[8], cProps[9], cProps[10], cProps[11], cProps[12], cProps[13], cProps[14], cProps[15]); - this.contextData.cTr.cloneFromProps(this.transformMat.props); - var trProps = this.contextData.cTr.props; - this.canvasContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]); - }; - CanvasRendererBase.prototype.ctxOpacity = function(op) { - if (!this.renderConfig.clearCanvas) { - this.canvasContext.globalAlpha *= op < 0 ? 0 : op; - this.globalData.currentGlobalAlpha = this.contextData.cO; - return; - } - this.contextData.cO *= op < 0 ? 0 : op; - if (this.globalData.currentGlobalAlpha !== this.contextData.cO) { - this.canvasContext.globalAlpha = this.contextData.cO; - this.globalData.currentGlobalAlpha = this.contextData.cO; - } - }; - CanvasRendererBase.prototype.reset = function() { - if (!this.renderConfig.clearCanvas) { - this.canvasContext.restore(); - return; - } - this.contextData.reset(); - }; - CanvasRendererBase.prototype.save = function(actionFlag) { - if (!this.renderConfig.clearCanvas) { - this.canvasContext.save(); - return; - } - if (actionFlag) this.canvasContext.save(); - var props = this.contextData.cTr.props; - if (this.contextData._length <= this.contextData.cArrPos) this.contextData.duplicate(); - var i; - var arr = this.contextData.saved[this.contextData.cArrPos]; - for (i = 0; i < 16; i += 1) arr[i] = props[i]; - this.contextData.savedOp[this.contextData.cArrPos] = this.contextData.cO; - this.contextData.cArrPos += 1; - }; - CanvasRendererBase.prototype.restore = function(actionFlag) { - if (!this.renderConfig.clearCanvas) { - this.canvasContext.restore(); - return; - } - if (actionFlag) { - this.canvasContext.restore(); - this.globalData.blendMode = "source-over"; - } - this.contextData.cArrPos -= 1; - var popped = this.contextData.saved[this.contextData.cArrPos]; - var i; - var arr = this.contextData.cTr.props; - for (i = 0; i < 16; i += 1) arr[i] = popped[i]; - this.canvasContext.setTransform(popped[0], popped[1], popped[4], popped[5], popped[12], popped[13]); - popped = this.contextData.savedOp[this.contextData.cArrPos]; - this.contextData.cO = popped; - if (this.globalData.currentGlobalAlpha !== popped) { - this.canvasContext.globalAlpha = popped; - this.globalData.currentGlobalAlpha = popped; - } - }; - CanvasRendererBase.prototype.configAnimation = function(animData) { - if (this.animationItem.wrapper) { - this.animationItem.container = createTag("canvas"); - var containerStyle = this.animationItem.container.style; - containerStyle.width = "100%"; - containerStyle.height = "100%"; - var origin = "0px 0px 0px"; - containerStyle.transformOrigin = origin; - containerStyle.mozTransformOrigin = origin; - containerStyle.webkitTransformOrigin = origin; - containerStyle["-webkit-transform"] = origin; - containerStyle.contentVisibility = this.renderConfig.contentVisibility; - this.animationItem.wrapper.appendChild(this.animationItem.container); - this.canvasContext = this.animationItem.container.getContext("2d"); - if (this.renderConfig.className) this.animationItem.container.setAttribute("class", this.renderConfig.className); - if (this.renderConfig.id) this.animationItem.container.setAttribute("id", this.renderConfig.id); - } else this.canvasContext = this.renderConfig.context; - this.data = animData; - this.layers = animData.layers; - this.transformCanvas = { - w: animData.w, - h: animData.h, - sx: 0, - sy: 0, - tx: 0, - ty: 0 - }; - this.setupGlobalData(animData, document.body); - this.globalData.canvasContext = this.canvasContext; - this.globalData.renderer = this; - this.globalData.isDashed = false; - this.globalData.progressiveLoad = this.renderConfig.progressiveLoad; - this.globalData.transformCanvas = this.transformCanvas; - this.elements = createSizedArray(animData.layers.length); - this.updateContainerSize(); - }; - CanvasRendererBase.prototype.updateContainerSize = function() { - this.reset(); - var elementWidth; - var elementHeight; - if (this.animationItem.wrapper && this.animationItem.container) { - elementWidth = this.animationItem.wrapper.offsetWidth; - elementHeight = this.animationItem.wrapper.offsetHeight; - this.animationItem.container.setAttribute("width", elementWidth * this.renderConfig.dpr); - this.animationItem.container.setAttribute("height", elementHeight * this.renderConfig.dpr); - } else { - elementWidth = this.canvasContext.canvas.width * this.renderConfig.dpr; - elementHeight = this.canvasContext.canvas.height * this.renderConfig.dpr; - } - var elementRel; - var animationRel; - if (this.renderConfig.preserveAspectRatio.indexOf("meet") !== -1 || this.renderConfig.preserveAspectRatio.indexOf("slice") !== -1) { - var par = this.renderConfig.preserveAspectRatio.split(" "); - var fillType = par[1] || "meet"; - var pos = par[0] || "xMidYMid"; - var xPos = pos.substr(0, 4); - var yPos = pos.substr(4); - elementRel = elementWidth / elementHeight; - animationRel = this.transformCanvas.w / this.transformCanvas.h; - if (animationRel > elementRel && fillType === "meet" || animationRel < elementRel && fillType === "slice") { - this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr); - this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr); - } else { - this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr); - this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr); - } - if (xPos === "xMid" && (animationRel < elementRel && fillType === "meet" || animationRel > elementRel && fillType === "slice")) this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr; - else if (xPos === "xMax" && (animationRel < elementRel && fillType === "meet" || animationRel > elementRel && fillType === "slice")) this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr; - else this.transformCanvas.tx = 0; - if (yPos === "YMid" && (animationRel > elementRel && fillType === "meet" || animationRel < elementRel && fillType === "slice")) this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr; - else if (yPos === "YMax" && (animationRel > elementRel && fillType === "meet" || animationRel < elementRel && fillType === "slice")) this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr; - else this.transformCanvas.ty = 0; - } else if (this.renderConfig.preserveAspectRatio === "none") { - this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr); - this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr); - this.transformCanvas.tx = 0; - this.transformCanvas.ty = 0; - } else { - this.transformCanvas.sx = this.renderConfig.dpr; - this.transformCanvas.sy = this.renderConfig.dpr; - this.transformCanvas.tx = 0; - this.transformCanvas.ty = 0; - } - this.transformCanvas.props = [ - this.transformCanvas.sx, - 0, - 0, - 0, - 0, - this.transformCanvas.sy, - 0, - 0, - 0, - 0, - 1, - 0, - this.transformCanvas.tx, - this.transformCanvas.ty, - 0, - 1 - ]; - this.ctxTransform(this.transformCanvas.props); - this.canvasContext.beginPath(); - this.canvasContext.rect(0, 0, this.transformCanvas.w, this.transformCanvas.h); - this.canvasContext.closePath(); - this.canvasContext.clip(); - this.renderFrame(this.renderedFrame, true); - }; - CanvasRendererBase.prototype.destroy = function() { - if (this.renderConfig.clearCanvas && this.animationItem.wrapper) this.animationItem.wrapper.innerText = ""; - var i; - for (i = (this.layers ? this.layers.length : 0) - 1; i >= 0; i -= 1) if (this.elements[i]) this.elements[i].destroy(); - this.elements.length = 0; - this.globalData.canvasContext = null; - this.animationItem.container = null; - this.destroyed = true; - }; - CanvasRendererBase.prototype.renderFrame = function(num, forceRender) { - if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) return; - this.renderedFrame = num; - this.globalData.frameNum = num - this.animationItem._isFirstFrame; - this.globalData.frameId += 1; - this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender; - this.globalData.projectInterface.currentFrame = num; - var i; - var len = this.layers.length; - if (!this.completeLayers) this.checkLayers(num); - for (i = 0; i < len; i += 1) if (this.completeLayers || this.elements[i]) this.elements[i].prepareFrame(num - this.layers[i].st); - if (this.globalData._mdf) { - if (this.renderConfig.clearCanvas === true) this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h); - else this.save(); - for (i = len - 1; i >= 0; i -= 1) if (this.completeLayers || this.elements[i]) this.elements[i].renderFrame(); - if (this.renderConfig.clearCanvas !== true) this.restore(); - } - }; - CanvasRendererBase.prototype.buildItem = function(pos) { - var elements = this.elements; - if (elements[pos] || this.layers[pos].ty === 99) return; - var element = this.createItem(this.layers[pos], this, this.globalData); - elements[pos] = element; - element.initExpressions(); - }; - CanvasRendererBase.prototype.checkPendingElements = function() { - while (this.pendingElements.length) this.pendingElements.pop().checkParenting(); - }; - CanvasRendererBase.prototype.hide = function() { - this.animationItem.container.style.display = "none"; - }; - CanvasRendererBase.prototype.show = function() { - this.animationItem.container.style.display = "block"; - }; - function CVCompElement(data, globalData, comp) { - this.completeLayers = false; - this.layers = data.layers; - this.pendingElements = []; - this.elements = createSizedArray(this.layers.length); - this.initElement(data, globalData, comp); - this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true }; - } - extendPrototype([ - CanvasRendererBase, - ICompElement, - CVBaseElement - ], CVCompElement); - CVCompElement.prototype.renderInnerContent = function() { - var ctx = this.canvasContext; - ctx.beginPath(); - ctx.moveTo(0, 0); - ctx.lineTo(this.data.w, 0); - ctx.lineTo(this.data.w, this.data.h); - ctx.lineTo(0, this.data.h); - ctx.lineTo(0, 0); - ctx.clip(); - var i; - for (i = this.layers.length - 1; i >= 0; i -= 1) if (this.completeLayers || this.elements[i]) this.elements[i].renderFrame(); - }; - CVCompElement.prototype.destroy = function() { - var i; - for (i = this.layers.length - 1; i >= 0; i -= 1) if (this.elements[i]) this.elements[i].destroy(); - this.layers = null; - this.elements = null; - }; - CVCompElement.prototype.createComp = function(data) { - return new CVCompElement(data, this.globalData, this); - }; - function CanvasRenderer(animationItem, config) { - this.animationItem = animationItem; - this.renderConfig = { - clearCanvas: config && config.clearCanvas !== void 0 ? config.clearCanvas : true, - context: config && config.context || null, - progressiveLoad: config && config.progressiveLoad || false, - preserveAspectRatio: config && config.preserveAspectRatio || "xMidYMid meet", - imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || "xMidYMid slice", - contentVisibility: config && config.contentVisibility || "visible", - className: config && config.className || "", - id: config && config.id || "" - }; - this.renderConfig.dpr = config && config.dpr || 1; - if (this.animationItem.wrapper) this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1; - this.renderedFrame = -1; - this.globalData = { - frameNum: -1, - _mdf: false, - renderConfig: this.renderConfig, - currentGlobalAlpha: -1 - }; - this.contextData = new CVContextData(); - this.elements = []; - this.pendingElements = []; - this.transformMat = new Matrix(); - this.completeLayers = false; - this.rendererType = "canvas"; - } - extendPrototype([CanvasRendererBase], CanvasRenderer); - CanvasRenderer.prototype.createComp = function(data) { - return new CVCompElement(data, this.globalData, this); - }; - registerRenderer("canvas", CanvasRenderer); - ShapeModifiers.registerModifier("tm", TrimModifier); - ShapeModifiers.registerModifier("pb", PuckerAndBloatModifier); - ShapeModifiers.registerModifier("rp", RepeaterModifier); - ShapeModifiers.registerModifier("rd", RoundCornersModifier); - const Expressions = function() { - var ob = {}; - ob.initExpressions = initExpressions; - function initExpressions(animation) { - var stackCount = 0; - var registers = []; - function pushExpression() { - stackCount += 1; - } - function popExpression() { - stackCount -= 1; - if (stackCount === 0) releaseInstances(); - } - function registerExpressionProperty(expression) { - if (registers.indexOf(expression) === -1) registers.push(expression); - } - function releaseInstances() { - var i; - var len = registers.length; - for (i = 0; i < len; i += 1) registers[i].release(); - registers.length = 0; - } - animation.renderer.compInterface = CompExpressionInterface(animation.renderer); - animation.renderer.globalData.projectInterface.registerComposition(animation.renderer); - animation.renderer.globalData.pushExpression = pushExpression; - animation.renderer.globalData.popExpression = popExpression; - animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty; - } - return ob; - }(); - function seedRandom(pool, math) { - var global = this, width = 256, chunks = 6, digits = 52, rngname = "random", startdenom = math.pow(width, chunks), significance = math.pow(2, digits), overflow = significance * 2, mask = width - 1, nodecrypto; - function seedrandom(seed, options, callback) { - var key = []; - options = options === true ? { entropy: true } : options || {}; - var shortseed = mixkey(flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3), key); - var arc4 = new ARC4(key); - var prng = function() { - var n = arc4.g(chunks), d = startdenom, x = 0; - while (n < significance) { - n = (n + x) * width; - d *= width; - x = arc4.g(1); - } - while (n >= overflow) { - n /= 2; - d /= 2; - x >>>= 1; - } - return (n + x) / d; - }; - prng.int32 = function() { - return arc4.g(4) | 0; - }; - prng.quick = function() { - return arc4.g(4) / 4294967296; - }; - prng.double = prng; - mixkey(tostring(arc4.S), pool); - return (options.pass || callback || function(prng2, seed2, is_math_call, state) { - if (state) { - if (state.S) copy(state, arc4); - prng2.state = function() { - return copy(arc4, {}); - }; - } - if (is_math_call) { - math[rngname] = prng2; - return seed2; - } else return prng2; - })(prng, shortseed, "global" in options ? options.global : this == math, options.state); - } - math["seed" + rngname] = seedrandom; - function ARC4(key) { - var t, keylen = key.length, me = this, i = 0, j = me.i = me.j = 0, s = me.S = []; - if (!keylen) key = [keylen++]; - while (i < width) s[i] = i++; - for (i = 0; i < width; i++) { - s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])]; - s[j] = t; - } - me.g = function(count) { - var t2, r = 0, i2 = me.i, j2 = me.j, s2 = me.S; - while (count--) { - t2 = s2[i2 = mask & i2 + 1]; - r = r * width + s2[mask & (s2[i2] = s2[j2 = mask & j2 + t2]) + (s2[j2] = t2)]; - } - me.i = i2; - me.j = j2; - return r; - }; - } - function copy(f, t) { - t.i = f.i; - t.j = f.j; - t.S = f.S.slice(); - return t; - } - function flatten(obj, depth) { - var result = [], typ = typeof obj, prop; - if (depth && typ == "object") for (prop in obj) try { - result.push(flatten(obj[prop], depth - 1)); - } catch (e) {} - return result.length ? result : typ == "string" ? obj : obj + "\0"; - } - function mixkey(seed, key) { - var stringseed = seed + "", smear, j = 0; - while (j < stringseed.length) key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++); - return tostring(key); - } - function autoseed() { - try { - if (nodecrypto); - var out = new Uint8Array(width); - (global.crypto || global.msCrypto).getRandomValues(out); - return tostring(out); - } catch (e) { - var browser = global.navigator, plugins = browser && browser.plugins; - return [ - +/* @__PURE__ */ new Date(), - global, - plugins, - global.screen, - tostring(pool) - ]; - } - } - function tostring(a) { - return String.fromCharCode.apply(0, a); - } - mixkey(math.random(), pool); - } - function initialize$2(BMMath2) { - seedRandom([], BMMath2); - } - const ExpressionManager = function() { - var ob = {}; - var Math2 = BMMath; - var window2 = null; - var document2 = null; - var XMLHttpRequest2 = null; - var fetch = null; - var frames = null; - initialize$2(BMMath); - function $bm_isInstanceOfArray(arr) { - return arr.constructor === Array || arr.constructor === Float32Array; - } - function isNumerable(tOfV, v) { - return tOfV === "number" || tOfV === "boolean" || tOfV === "string" || v instanceof Number; - } - function $bm_neg(a) { - var tOfA = typeof a; - if (tOfA === "number" || tOfA === "boolean" || a instanceof Number) return -a; - if ($bm_isInstanceOfArray(a)) { - var i; - var lenA = a.length; - var retArr = []; - for (i = 0; i < lenA; i += 1) retArr[i] = -a[i]; - return retArr; - } - if (a.propType) return a.v; - return -a; - } - BezierFactory.getBezierEasing(.333, 0, .833, .833, "easeIn").get; - BezierFactory.getBezierEasing(.167, .167, .667, 1, "easeOut").get; - BezierFactory.getBezierEasing(.33, 0, .667, 1, "easeInOut").get; - function sum(a, b) { - var tOfA = typeof a; - var tOfB = typeof b; - if (tOfA === "string" || tOfB === "string") return a + b; - if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) return a + b; - if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) { - a = a.slice(0); - a[0] += b; - return a; - } - if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) { - b = b.slice(0); - b[0] = a + b[0]; - return b; - } - if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) { - var i = 0; - var lenA = a.length; - var lenB = b.length; - var retArr = []; - while (i < lenA || i < lenB) { - if ((typeof a[i] === "number" || a[i] instanceof Number) && (typeof b[i] === "number" || b[i] instanceof Number)) retArr[i] = a[i] + b[i]; - else retArr[i] = b[i] === void 0 ? a[i] : a[i] || b[i]; - i += 1; - } - return retArr; - } - return 0; - } - var add = sum; - function sub(a, b) { - var tOfA = typeof a; - var tOfB = typeof b; - if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) { - if (tOfA === "string") a = parseInt(a, 10); - if (tOfB === "string") b = parseInt(b, 10); - return a - b; - } - if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) { - a = a.slice(0); - a[0] -= b; - return a; - } - if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) { - b = b.slice(0); - b[0] = a - b[0]; - return b; - } - if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) { - var i = 0; - var lenA = a.length; - var lenB = b.length; - var retArr = []; - while (i < lenA || i < lenB) { - if ((typeof a[i] === "number" || a[i] instanceof Number) && (typeof b[i] === "number" || b[i] instanceof Number)) retArr[i] = a[i] - b[i]; - else retArr[i] = b[i] === void 0 ? a[i] : a[i] || b[i]; - i += 1; - } - return retArr; - } - return 0; - } - function mul(a, b) { - var tOfA = typeof a; - var tOfB = typeof b; - var arr; - if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) return a * b; - var i; - var len; - if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) { - len = a.length; - arr = createTypedArray("float32", len); - for (i = 0; i < len; i += 1) arr[i] = a[i] * b; - return arr; - } - if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) { - len = b.length; - arr = createTypedArray("float32", len); - for (i = 0; i < len; i += 1) arr[i] = a * b[i]; - return arr; - } - return 0; - } - function div(a, b) { - var tOfA = typeof a; - var tOfB = typeof b; - var arr; - if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) return a / b; - var i; - var len; - if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) { - len = a.length; - arr = createTypedArray("float32", len); - for (i = 0; i < len; i += 1) arr[i] = a[i] / b; - return arr; - } - if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) { - len = b.length; - arr = createTypedArray("float32", len); - for (i = 0; i < len; i += 1) arr[i] = a / b[i]; - return arr; - } - return 0; - } - function mod(a, b) { - if (typeof a === "string") a = parseInt(a, 10); - if (typeof b === "string") b = parseInt(b, 10); - return a % b; - } - var $bm_sum = sum; - var $bm_sub = sub; - var $bm_mul = mul; - var $bm_div = div; - var $bm_mod = mod; - function clamp(num, min, max) { - if (min > max) { - var mm = max; - max = min; - min = mm; - } - return Math2.min(Math2.max(num, min), max); - } - function radiansToDegrees(val) { - return val / degToRads; - } - var radians_to_degrees = radiansToDegrees; - function degreesToRadians(val) { - return val * degToRads; - } - var degrees_to_radians = radiansToDegrees; - var helperLengthArray = [ - 0, - 0, - 0, - 0, - 0, - 0 - ]; - function length(arr1, arr2) { - if (typeof arr1 === "number" || arr1 instanceof Number) { - arr2 = arr2 || 0; - return Math2.abs(arr1 - arr2); - } - if (!arr2) arr2 = helperLengthArray; - var i; - var len = Math2.min(arr1.length, arr2.length); - var addedLength = 0; - for (i = 0; i < len; i += 1) addedLength += Math2.pow(arr2[i] - arr1[i], 2); - return Math2.sqrt(addedLength); - } - function normalize(vec) { - return div(vec, length(vec)); - } - function rgbToHsl(val) { - var r = val[0]; - var g = val[1]; - var b = val[2]; - var max = Math2.max(r, g, b); - var min = Math2.min(r, g, b); - var h; - var s; - var l = (max + min) / 2; - if (max === min) { - h = 0; - s = 0; - } else { - var d = max - min; - s = l > .5 ? d / (2 - max - min) : d / (max + min); - switch (max) { - case r: - h = (g - b) / d + (g < b ? 6 : 0); - break; - case g: - h = (b - r) / d + 2; - break; - case b: - h = (r - g) / d + 4; - break; - } - h /= 6; - } - return [ - h, - s, - l, - val[3] - ]; - } - function hue2rgb(p, q, t) { - if (t < 0) t += 1; - if (t > 1) t -= 1; - if (t < 1 / 6) return p + (q - p) * 6 * t; - if (t < 1 / 2) return q; - if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6; - return p; - } - function hslToRgb(val) { - var h = val[0]; - var s = val[1]; - var l = val[2]; - var r; - var g; - var b; - if (s === 0) { - r = l; - b = l; - g = l; - } else { - var q = l < .5 ? l * (1 + s) : l + s - l * s; - var p = 2 * l - q; - r = hue2rgb(p, q, h + 1 / 3); - g = hue2rgb(p, q, h); - b = hue2rgb(p, q, h - 1 / 3); - } - return [ - r, - g, - b, - val[3] - ]; - } - function linear(t, tMin, tMax, value1, value2) { - if (value1 === void 0 || value2 === void 0) { - value1 = tMin; - value2 = tMax; - tMin = 0; - tMax = 1; - } - if (tMax < tMin) { - var _tMin = tMax; - tMax = tMin; - tMin = _tMin; - } - if (t <= tMin) return value1; - if (t >= tMax) return value2; - var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin); - if (!value1.length) return value1 + (value2 - value1) * perc; - var i; - var len = value1.length; - var arr = createTypedArray("float32", len); - for (i = 0; i < len; i += 1) arr[i] = value1[i] + (value2[i] - value1[i]) * perc; - return arr; - } - function random(min, max) { - if (max === void 0) if (min === void 0) { - min = 0; - max = 1; - } else { - max = min; - min = void 0; - } - if (max.length) { - var i; - var len = max.length; - if (!min) min = createTypedArray("float32", len); - var arr = createTypedArray("float32", len); - var rnd = BMMath.random(); - for (i = 0; i < len; i += 1) arr[i] = min[i] + rnd * (max[i] - min[i]); - return arr; - } - if (min === void 0) min = 0; - var rndm = BMMath.random(); - return min + rndm * (max - min); - } - function createPath(points, inTangents, outTangents, closed) { - var i; - var len = points.length; - var path = shapePool.newElement(); - path.setPathData(!!closed, len); - var arrPlaceholder = [0, 0]; - var inVertexPoint; - var outVertexPoint; - for (i = 0; i < len; i += 1) { - inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder; - outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder; - path.setTripleAt(points[i][0], points[i][1], outVertexPoint[0] + points[i][0], outVertexPoint[1] + points[i][1], inVertexPoint[0] + points[i][0], inVertexPoint[1] + points[i][1], i, true); - } - return path; - } - function noOp(_value) { - return _value; - } - function initiateExpression(elem, data, property) { - return noOp; - } - ob.initiateExpression = initiateExpression; - ob.__preventDeadCodeRemoval = [ - window2, - document2, - XMLHttpRequest2, - fetch, - frames, - $bm_neg, - add, - $bm_sum, - $bm_sub, - $bm_mul, - $bm_div, - $bm_mod, - clamp, - radians_to_degrees, - degreesToRadians, - degrees_to_radians, - normalize, - rgbToHsl, - hslToRgb, - linear, - random, - createPath - ]; - return ob; - }(); - const expressionHelpers = function() { - function searchExpressions(elem, data, prop) { - if (data.x) { - prop.k = true; - prop.x = true; - prop.initiateExpression = ExpressionManager.initiateExpression; - prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop)); - } - } - function getValueAtTime(frameNum) { - frameNum *= this.elem.globalData.frameRate; - frameNum -= this.offsetTime; - if (frameNum !== this._cachingAtTime.lastFrame) { - this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0; - this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime); - this._cachingAtTime.lastFrame = frameNum; - } - return this._cachingAtTime.value; - } - function getSpeedAtTime(frameNum) { - var delta = -.01; - var v1 = this.getValueAtTime(frameNum); - var v2 = this.getValueAtTime(frameNum + delta); - var speed = 0; - if (v1.length) { - var i; - for (i = 0; i < v1.length; i += 1) speed += Math.pow(v2[i] - v1[i], 2); - speed = Math.sqrt(speed) * 100; - } else speed = 0; - return speed; - } - function getVelocityAtTime(frameNum) { - if (this.vel !== void 0) return this.vel; - var delta = -.001; - var v1 = this.getValueAtTime(frameNum); - var v2 = this.getValueAtTime(frameNum + delta); - var velocity; - if (v1.length) { - velocity = createTypedArray("float32", v1.length); - var i; - for (i = 0; i < v1.length; i += 1) velocity[i] = (v2[i] - v1[i]) / delta; - } else velocity = (v2 - v1) / delta; - return velocity; - } - function getStaticValueAtTime() { - return this.pv; - } - function setGroupProperty(propertyGroup) { - this.propertyGroup = propertyGroup; - } - return { - searchExpressions, - getSpeedAtTime, - getVelocityAtTime, - getValueAtTime, - getStaticValueAtTime, - setGroupProperty - }; - }(); - function addPropertyDecorator() { - function loopOut(type, duration, durationFlag) { - if (!this.k || !this.keyframes) return this.pv; - type = type ? type.toLowerCase() : ""; - var currentFrame = this.comp.renderedFrame; - var keyframes = this.keyframes; - var lastKeyFrame = keyframes[keyframes.length - 1].t; - if (currentFrame <= lastKeyFrame) return this.pv; - var cycleDuration; - var firstKeyFrame; - if (!durationFlag) { - if (!duration || duration > keyframes.length - 1) duration = keyframes.length - 1; - firstKeyFrame = keyframes[keyframes.length - 1 - duration].t; - cycleDuration = lastKeyFrame - firstKeyFrame; - } else { - if (!duration) cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip); - else cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration); - firstKeyFrame = lastKeyFrame - cycleDuration; - } - var i; - var len; - var ret; - if (type === "pingpong") { - if (Math.floor((currentFrame - firstKeyFrame) / cycleDuration) % 2 !== 0) return this.getValueAtTime((cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); - } else if (type === "offset") { - var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0); - var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0); - var current = this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); - var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration); - if (this.pv.length) { - ret = new Array(initV.length); - len = ret.length; - for (i = 0; i < len; i += 1) ret[i] = (endV[i] - initV[i]) * repeats + current[i]; - return ret; - } - return (endV - initV) * repeats + current; - } else if (type === "continue") { - var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0); - var nextLastValue = this.getValueAtTime((lastKeyFrame - .001) / this.comp.globalData.frameRate, 0); - if (this.pv.length) { - ret = new Array(lastValue.length); - len = ret.length; - for (i = 0; i < len; i += 1) ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 5e-4; - return ret; - } - return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / .001); - } - return this.getValueAtTime(((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); - } - function loopIn(type, duration, durationFlag) { - if (!this.k) return this.pv; - type = type ? type.toLowerCase() : ""; - var currentFrame = this.comp.renderedFrame; - var keyframes = this.keyframes; - var firstKeyFrame = keyframes[0].t; - if (currentFrame >= firstKeyFrame) return this.pv; - var cycleDuration; - var lastKeyFrame; - if (!durationFlag) { - if (!duration || duration > keyframes.length - 1) duration = keyframes.length - 1; - lastKeyFrame = keyframes[duration].t; - cycleDuration = lastKeyFrame - firstKeyFrame; - } else { - if (!duration) cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame); - else cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration); - lastKeyFrame = firstKeyFrame + cycleDuration; - } - var i; - var len; - var ret; - if (type === "pingpong") { - if (Math.floor((firstKeyFrame - currentFrame) / cycleDuration) % 2 === 0) return this.getValueAtTime(((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); - } else if (type === "offset") { - var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0); - var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0); - var current = this.getValueAtTime((cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate, 0); - var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1; - if (this.pv.length) { - ret = new Array(initV.length); - len = ret.length; - for (i = 0; i < len; i += 1) ret[i] = current[i] - (endV[i] - initV[i]) * repeats; - return ret; - } - return current - (endV - initV) * repeats; - } else if (type === "continue") { - var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0); - var nextFirstValue = this.getValueAtTime((firstKeyFrame + .001) / this.comp.globalData.frameRate, 0); - if (this.pv.length) { - ret = new Array(firstValue.length); - len = ret.length; - for (i = 0; i < len; i += 1) ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / .001; - return ret; - } - return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / .001; - } - return this.getValueAtTime((cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate, 0); - } - function smooth(width, samples) { - if (!this.k) return this.pv; - width = (width || .4) * .5; - samples = Math.floor(samples || 5); - if (samples <= 1) return this.pv; - var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate; - var initFrame = currentTime - width; - var endFrame = currentTime + width; - var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1; - var i = 0; - var j = 0; - var value; - if (this.pv.length) value = createTypedArray("float32", this.pv.length); - else value = 0; - var sampleValue; - while (i < samples) { - sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency); - if (this.pv.length) for (j = 0; j < this.pv.length; j += 1) value[j] += sampleValue[j]; - else value += sampleValue; - i += 1; - } - if (this.pv.length) for (j = 0; j < this.pv.length; j += 1) value[j] /= samples; - else value /= samples; - return value; - } - function getTransformValueAtTime(time) { - if (!this._transformCachingAtTime) this._transformCachingAtTime = { v: new Matrix() }; - var matrix = this._transformCachingAtTime.v; - matrix.cloneFromProps(this.pre.props); - if (this.appliedTransformations < 1) { - var anchor = this.a.getValueAtTime(time); - matrix.translate(-anchor[0] * this.a.mult, -anchor[1] * this.a.mult, anchor[2] * this.a.mult); - } - if (this.appliedTransformations < 2) { - var scale = this.s.getValueAtTime(time); - matrix.scale(scale[0] * this.s.mult, scale[1] * this.s.mult, scale[2] * this.s.mult); - } - if (this.sk && this.appliedTransformations < 3) { - var skew = this.sk.getValueAtTime(time); - var skewAxis = this.sa.getValueAtTime(time); - matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult); - } - if (this.r && this.appliedTransformations < 4) { - var rotation = this.r.getValueAtTime(time); - matrix.rotate(-rotation * this.r.mult); - } else if (!this.r && this.appliedTransformations < 4) { - var rotationZ = this.rz.getValueAtTime(time); - var rotationY = this.ry.getValueAtTime(time); - var rotationX = this.rx.getValueAtTime(time); - var orientation = this.or.getValueAtTime(time); - matrix.rotateZ(-rotationZ * this.rz.mult).rotateY(rotationY * this.ry.mult).rotateX(rotationX * this.rx.mult).rotateZ(-orientation[2] * this.or.mult).rotateY(orientation[1] * this.or.mult).rotateX(orientation[0] * this.or.mult); - } - if (this.data.p && this.data.p.s) { - var positionX = this.px.getValueAtTime(time); - var positionY = this.py.getValueAtTime(time); - if (this.data.p.z) { - var positionZ = this.pz.getValueAtTime(time); - matrix.translate(positionX * this.px.mult, positionY * this.py.mult, -positionZ * this.pz.mult); - } else matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0); - } else { - var position = this.p.getValueAtTime(time); - matrix.translate(position[0] * this.p.mult, position[1] * this.p.mult, -position[2] * this.p.mult); - } - return matrix; - } - function getTransformStaticValueAtTime() { - return this.v.clone(new Matrix()); - } - var getTransformProperty = TransformPropertyFactory.getTransformProperty; - TransformPropertyFactory.getTransformProperty = function(elem, data, container) { - var prop = getTransformProperty(elem, data, container); - if (prop.dynamicProperties.length) prop.getValueAtTime = getTransformValueAtTime.bind(prop); - else prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop); - prop.setGroupProperty = expressionHelpers.setGroupProperty; - return prop; - }; - var propertyGetProp = PropertyFactory.getProp; - PropertyFactory.getProp = function(elem, data, type, mult, container) { - var prop = propertyGetProp(elem, data, type, mult, container); - if (prop.kf) prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop); - else prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop); - prop.setGroupProperty = expressionHelpers.setGroupProperty; - prop.loopOut = loopOut; - prop.loopIn = loopIn; - prop.smooth = smooth; - prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop); - prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop); - prop.numKeys = data.a === 1 ? data.k.length : 0; - prop.propertyIndex = data.ix; - var value = 0; - if (type !== 0) value = createTypedArray("float32", data.a === 1 ? data.k[0].s.length : data.k.length); - prop._cachingAtTime = { - lastFrame: initialDefaultFrame, - lastIndex: 0, - value - }; - expressionHelpers.searchExpressions(elem, data, prop); - if (prop.k) container.addDynamicProperty(prop); - return prop; - }; - function getShapeValueAtTime(frameNum) { - if (!this._cachingAtTime) this._cachingAtTime = { - shapeValue: shapePool.clone(this.pv), - lastIndex: 0, - lastTime: initialDefaultFrame - }; - frameNum *= this.elem.globalData.frameRate; - frameNum -= this.offsetTime; - if (frameNum !== this._cachingAtTime.lastTime) { - this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0; - this._cachingAtTime.lastTime = frameNum; - this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime); - } - return this._cachingAtTime.shapeValue; - } - var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction(); - var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction(); - function ShapeExpressions() {} - ShapeExpressions.prototype = { - vertices: function(prop, time) { - if (this.k) this.getValue(); - var shapePath = this.v; - if (time !== void 0) shapePath = this.getValueAtTime(time, 0); - var i; - var len = shapePath._length; - var vertices = shapePath[prop]; - var points = shapePath.v; - var arr = createSizedArray(len); - for (i = 0; i < len; i += 1) if (prop === "i" || prop === "o") arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]]; - else arr[i] = [vertices[i][0], vertices[i][1]]; - return arr; - }, - points: function(time) { - return this.vertices("v", time); - }, - inTangents: function(time) { - return this.vertices("i", time); - }, - outTangents: function(time) { - return this.vertices("o", time); - }, - isClosed: function() { - return this.v.c; - }, - pointOnPath: function(perc, time) { - var shapePath = this.v; - if (time !== void 0) shapePath = this.getValueAtTime(time, 0); - if (!this._segmentsLength) this._segmentsLength = bez.getSegmentsLength(shapePath); - var segmentsLength = this._segmentsLength; - var lengths = segmentsLength.lengths; - var lengthPos = segmentsLength.totalLength * perc; - var i = 0; - var len = lengths.length; - var accumulatedLength = 0; - var pt; - while (i < len) { - if (accumulatedLength + lengths[i].addedLength > lengthPos) { - var initIndex = i; - var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1; - var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength; - pt = bez.getPointInSegment(shapePath.v[initIndex], shapePath.v[endIndex], shapePath.o[initIndex], shapePath.i[endIndex], segmentPerc, lengths[i]); - break; - } else accumulatedLength += lengths[i].addedLength; - i += 1; - } - if (!pt) pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]]; - return pt; - }, - vectorOnPath: function(perc, time, vectorType) { - if (perc == 1) perc = this.v.c; - else if (perc == 0) perc = .999; - var pt1 = this.pointOnPath(perc, time); - var pt2 = this.pointOnPath(perc + .001, time); - var xLength = pt2[0] - pt1[0]; - var yLength = pt2[1] - pt1[1]; - var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2)); - if (magnitude === 0) return [0, 0]; - return vectorType === "tangent" ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude]; - }, - tangentOnPath: function(perc, time) { - return this.vectorOnPath(perc, time, "tangent"); - }, - normalOnPath: function(perc, time) { - return this.vectorOnPath(perc, time, "normal"); - }, - setGroupProperty: expressionHelpers.setGroupProperty, - getValueAtTime: expressionHelpers.getStaticValueAtTime - }; - extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction); - extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction); - KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime; - KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression; - var propertyGetShapeProp = ShapePropertyFactory.getShapeProp; - ShapePropertyFactory.getShapeProp = function(elem, data, type, arr, trims) { - var prop = propertyGetShapeProp(elem, data, type, arr, trims); - prop.propertyIndex = data.ix; - prop.lock = false; - if (type === 3) expressionHelpers.searchExpressions(elem, data.pt, prop); - else if (type === 4) expressionHelpers.searchExpressions(elem, data.ks, prop); - if (prop.k) elem.addDynamicProperty(prop); - return prop; - }; - } - function initialize$1() { - addPropertyDecorator(); - } - function addDecorator() { - function searchExpressions() { - if (this.data.d.x) { - this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this); - this.addEffect(this.getExpressionValue.bind(this)); - return true; - } - return null; - } - TextProperty.prototype.getExpressionValue = function(currentValue, text) { - var newValue = this.calculateExpression(text); - if (currentValue.t !== newValue) { - var newData = {}; - this.copyData(newData, currentValue); - newData.t = newValue.toString(); - newData.__complete = false; - return newData; - } - return currentValue; - }; - TextProperty.prototype.searchProperty = function() { - var isKeyframed = this.searchKeyframes(); - var hasExpressions = this.searchExpressions(); - this.kf = isKeyframed || hasExpressions; - return this.kf; - }; - TextProperty.prototype.searchExpressions = searchExpressions; - } - function initialize() { - addDecorator(); - } - setExpressionsPlugin(Expressions); - initialize$1(); - initialize(); - return lottie2; -})(); -//#endregion -//#region node_modules/three-stdlib/loaders/LottieLoader.js -var LottieLoader = class extends Loader { - setQuality(value) { - this._quality = value; - } - load(url, onLoad, onProgress, onError) { - const quality = this._quality || 1; - const texture = new CanvasTexture(); - texture.minFilter = NearestFilter; - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setWithCredentials(this.withCredentials); - loader.load(url, function(text) { - const data = JSON.parse(text); - const container = document.createElement("div"); - container.style.width = data.w + "px"; - container.style.height = data.h + "px"; - document.body.appendChild(container); - const animation = lottie.loadAnimation({ - container, - animType: "canvas", - loop: true, - autoplay: true, - animationData: data, - rendererSettings: { dpr: quality } - }); - texture.animation = animation; - texture.image = animation.container; - animation.addEventListener("enterFrame", function() { - texture.needsUpdate = true; - }); - container.style.display = "none"; - if (onLoad !== void 0) onLoad(texture); - }, onProgress, onError); - return texture; - } -}; -//#endregion -//#region node_modules/three-stdlib/libs/opentype.js -var { parseBuffer } = /* @__PURE__ */ (() => { - var TINF_OK = 0; - var TINF_DATA_ERROR = -3; - function Tree() { - this.table = new Uint16Array(16); - this.trans = new Uint16Array(288); - } - function Data(source, dest) { - this.source = source; - this.sourceIndex = 0; - this.tag = 0; - this.bitcount = 0; - this.dest = dest; - this.destLen = 0; - this.ltree = new Tree(); - this.dtree = new Tree(); - } - var sltree = new Tree(); - var sdtree = new Tree(); - var length_bits = new Uint8Array(30); - var length_base = new Uint16Array(30); - var dist_bits = new Uint8Array(30); - var dist_base = new Uint16Array(30); - var clcidx = new Uint8Array([ - 16, - 17, - 18, - 0, - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15 - ]); - var code_tree = new Tree(); - var lengths = new Uint8Array(320); - function tinf_build_bits_base(bits, base, delta, first) { - var i, sum; - for (i = 0; i < delta; ++i) bits[i] = 0; - for (i = 0; i < 30 - delta; ++i) bits[i + delta] = i / delta | 0; - for (sum = first, i = 0; i < 30; ++i) { - base[i] = sum; - sum += 1 << bits[i]; - } - } - function tinf_build_fixed_trees(lt, dt) { - var i; - for (i = 0; i < 7; ++i) lt.table[i] = 0; - lt.table[7] = 24; - lt.table[8] = 152; - lt.table[9] = 112; - for (i = 0; i < 24; ++i) lt.trans[i] = 256 + i; - for (i = 0; i < 144; ++i) lt.trans[24 + i] = i; - for (i = 0; i < 8; ++i) lt.trans[168 + i] = 280 + i; - for (i = 0; i < 112; ++i) lt.trans[176 + i] = 144 + i; - for (i = 0; i < 5; ++i) dt.table[i] = 0; - dt.table[5] = 32; - for (i = 0; i < 32; ++i) dt.trans[i] = i; - } - var offs = new Uint16Array(16); - function tinf_build_tree(t, lengths2, off, num) { - var i, sum; - for (i = 0; i < 16; ++i) t.table[i] = 0; - for (i = 0; i < num; ++i) t.table[lengths2[off + i]]++; - t.table[0] = 0; - for (sum = 0, i = 0; i < 16; ++i) { - offs[i] = sum; - sum += t.table[i]; - } - for (i = 0; i < num; ++i) if (lengths2[off + i]) t.trans[offs[lengths2[off + i]]++] = i; - } - function tinf_getbit(d) { - if (!d.bitcount--) { - d.tag = d.source[d.sourceIndex++]; - d.bitcount = 7; - } - var bit = d.tag & 1; - d.tag >>>= 1; - return bit; - } - function tinf_read_bits(d, num, base) { - if (!num) return base; - while (d.bitcount < 24) { - d.tag |= d.source[d.sourceIndex++] << d.bitcount; - d.bitcount += 8; - } - var val = d.tag & 65535 >>> 16 - num; - d.tag >>>= num; - d.bitcount -= num; - return val + base; - } - function tinf_decode_symbol(d, t) { - while (d.bitcount < 24) { - d.tag |= d.source[d.sourceIndex++] << d.bitcount; - d.bitcount += 8; - } - var sum = 0, cur = 0, len = 0; - var tag = d.tag; - do { - cur = 2 * cur + (tag & 1); - tag >>>= 1; - ++len; - sum += t.table[len]; - cur -= t.table[len]; - } while (cur >= 0); - d.tag = tag; - d.bitcount -= len; - return t.trans[sum + cur]; - } - function tinf_decode_trees(d, lt, dt) { - var hlit, hdist, hclen; - var i, num, length; - hlit = tinf_read_bits(d, 5, 257); - hdist = tinf_read_bits(d, 5, 1); - hclen = tinf_read_bits(d, 4, 4); - for (i = 0; i < 19; ++i) lengths[i] = 0; - for (i = 0; i < hclen; ++i) { - var clen = tinf_read_bits(d, 3, 0); - lengths[clcidx[i]] = clen; - } - tinf_build_tree(code_tree, lengths, 0, 19); - for (num = 0; num < hlit + hdist;) { - var sym = tinf_decode_symbol(d, code_tree); - switch (sym) { - case 16: - var prev = lengths[num - 1]; - for (length = tinf_read_bits(d, 2, 3); length; --length) lengths[num++] = prev; - break; - case 17: - for (length = tinf_read_bits(d, 3, 3); length; --length) lengths[num++] = 0; - break; - case 18: - for (length = tinf_read_bits(d, 7, 11); length; --length) lengths[num++] = 0; - break; - default: - lengths[num++] = sym; - break; - } - } - tinf_build_tree(lt, lengths, 0, hlit); - tinf_build_tree(dt, lengths, hlit, hdist); - } - function tinf_inflate_block_data(d, lt, dt) { - while (1) { - var sym = tinf_decode_symbol(d, lt); - if (sym === 256) return TINF_OK; - if (sym < 256) d.dest[d.destLen++] = sym; - else { - var length, dist, offs2; - var i; - sym -= 257; - length = tinf_read_bits(d, length_bits[sym], length_base[sym]); - dist = tinf_decode_symbol(d, dt); - offs2 = d.destLen - tinf_read_bits(d, dist_bits[dist], dist_base[dist]); - for (i = offs2; i < offs2 + length; ++i) d.dest[d.destLen++] = d.dest[i]; - } - } - } - function tinf_inflate_uncompressed_block(d) { - var length, invlength; - var i; - while (d.bitcount > 8) { - d.sourceIndex--; - d.bitcount -= 8; - } - length = d.source[d.sourceIndex + 1]; - length = 256 * length + d.source[d.sourceIndex]; - invlength = d.source[d.sourceIndex + 3]; - invlength = 256 * invlength + d.source[d.sourceIndex + 2]; - if (length !== (~invlength & 65535)) return TINF_DATA_ERROR; - d.sourceIndex += 4; - for (i = length; i; --i) d.dest[d.destLen++] = d.source[d.sourceIndex++]; - d.bitcount = 0; - return TINF_OK; - } - function tinf_uncompress(source, dest) { - var d = new Data(source, dest); - var bfinal, btype, res; - do { - bfinal = tinf_getbit(d); - btype = tinf_read_bits(d, 2, 0); - switch (btype) { - case 0: - res = tinf_inflate_uncompressed_block(d); - break; - case 1: - res = tinf_inflate_block_data(d, sltree, sdtree); - break; - case 2: - tinf_decode_trees(d, d.ltree, d.dtree); - res = tinf_inflate_block_data(d, d.ltree, d.dtree); - break; - default: res = TINF_DATA_ERROR; - } - if (res !== TINF_OK) throw new Error("Data error"); - } while (!bfinal); - if (d.destLen < d.dest.length) if (typeof d.dest.slice === "function") return d.dest.slice(0, d.destLen); - else return d.dest.subarray(0, d.destLen); - return d.dest; - } - tinf_build_fixed_trees(sltree, sdtree); - tinf_build_bits_base(length_bits, length_base, 4, 3); - tinf_build_bits_base(dist_bits, dist_base, 2, 1); - length_bits[28] = 0; - length_base[28] = 258; - var tinyInflate = tinf_uncompress; - function derive(v0, v1, v2, v3, t) { - return Math.pow(1 - t, 3) * v0 + 3 * Math.pow(1 - t, 2) * t * v1 + 3 * (1 - t) * Math.pow(t, 2) * v2 + Math.pow(t, 3) * v3; - } - function BoundingBox() { - this.x1 = NaN; - this.y1 = NaN; - this.x2 = NaN; - this.y2 = NaN; - } - BoundingBox.prototype.isEmpty = function() { - return isNaN(this.x1) || isNaN(this.y1) || isNaN(this.x2) || isNaN(this.y2); - }; - BoundingBox.prototype.addPoint = function(x, y) { - if (typeof x === "number") { - if (isNaN(this.x1) || isNaN(this.x2)) { - this.x1 = x; - this.x2 = x; - } - if (x < this.x1) this.x1 = x; - if (x > this.x2) this.x2 = x; - } - if (typeof y === "number") { - if (isNaN(this.y1) || isNaN(this.y2)) { - this.y1 = y; - this.y2 = y; - } - if (y < this.y1) this.y1 = y; - if (y > this.y2) this.y2 = y; - } - }; - BoundingBox.prototype.addX = function(x) { - this.addPoint(x, null); - }; - BoundingBox.prototype.addY = function(y) { - this.addPoint(null, y); - }; - BoundingBox.prototype.addBezier = function(x0, y0, x1, y1, x2, y2, x, y) { - var p0 = [x0, y0]; - var p1 = [x1, y1]; - var p2 = [x2, y2]; - var p3 = [x, y]; - this.addPoint(x0, y0); - this.addPoint(x, y); - for (var i = 0; i <= 1; i++) { - var b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i]; - var a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i]; - var c = 3 * p1[i] - 3 * p0[i]; - if (a === 0) { - if (b === 0) continue; - var t = -c / b; - if (0 < t && t < 1) { - if (i === 0) this.addX(derive(p0[i], p1[i], p2[i], p3[i], t)); - if (i === 1) this.addY(derive(p0[i], p1[i], p2[i], p3[i], t)); - } - continue; - } - var b2ac = Math.pow(b, 2) - 4 * c * a; - if (b2ac < 0) continue; - var t1 = (-b + Math.sqrt(b2ac)) / (2 * a); - if (0 < t1 && t1 < 1) { - if (i === 0) this.addX(derive(p0[i], p1[i], p2[i], p3[i], t1)); - if (i === 1) this.addY(derive(p0[i], p1[i], p2[i], p3[i], t1)); - } - var t2 = (-b - Math.sqrt(b2ac)) / (2 * a); - if (0 < t2 && t2 < 1) { - if (i === 0) this.addX(derive(p0[i], p1[i], p2[i], p3[i], t2)); - if (i === 1) this.addY(derive(p0[i], p1[i], p2[i], p3[i], t2)); - } - } - }; - BoundingBox.prototype.addQuad = function(x0, y0, x1, y1, x, y) { - var cp1x = x0 + 2 / 3 * (x1 - x0); - var cp1y = y0 + 2 / 3 * (y1 - y0); - var cp2x = cp1x + 1 / 3 * (x - x0); - var cp2y = cp1y + 1 / 3 * (y - y0); - this.addBezier(x0, y0, cp1x, cp1y, cp2x, cp2y, x, y); - }; - function Path() { - this.commands = []; - this.fill = "black"; - this.stroke = null; - this.strokeWidth = 1; - } - Path.prototype.moveTo = function(x, y) { - this.commands.push({ - type: "M", - x, - y - }); - }; - Path.prototype.lineTo = function(x, y) { - this.commands.push({ - type: "L", - x, - y - }); - }; - Path.prototype.curveTo = Path.prototype.bezierCurveTo = function(x1, y1, x2, y2, x, y) { - this.commands.push({ - type: "C", - x1, - y1, - x2, - y2, - x, - y - }); - }; - Path.prototype.quadTo = Path.prototype.quadraticCurveTo = function(x1, y1, x, y) { - this.commands.push({ - type: "Q", - x1, - y1, - x, - y - }); - }; - Path.prototype.close = Path.prototype.closePath = function() { - this.commands.push({ type: "Z" }); - }; - Path.prototype.extend = function(pathOrCommands) { - if (pathOrCommands.commands) pathOrCommands = pathOrCommands.commands; - else if (pathOrCommands instanceof BoundingBox) { - var box = pathOrCommands; - this.moveTo(box.x1, box.y1); - this.lineTo(box.x2, box.y1); - this.lineTo(box.x2, box.y2); - this.lineTo(box.x1, box.y2); - this.close(); - return; - } - Array.prototype.push.apply(this.commands, pathOrCommands); - }; - Path.prototype.getBoundingBox = function() { - var box = new BoundingBox(); - var startX = 0; - var startY = 0; - var prevX = 0; - var prevY = 0; - for (var i = 0; i < this.commands.length; i++) { - var cmd = this.commands[i]; - switch (cmd.type) { - case "M": - box.addPoint(cmd.x, cmd.y); - startX = prevX = cmd.x; - startY = prevY = cmd.y; - break; - case "L": - box.addPoint(cmd.x, cmd.y); - prevX = cmd.x; - prevY = cmd.y; - break; - case "Q": - box.addQuad(prevX, prevY, cmd.x1, cmd.y1, cmd.x, cmd.y); - prevX = cmd.x; - prevY = cmd.y; - break; - case "C": - box.addBezier(prevX, prevY, cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y); - prevX = cmd.x; - prevY = cmd.y; - break; - case "Z": - prevX = startX; - prevY = startY; - break; - default: throw new Error("Unexpected path command " + cmd.type); - } - } - if (box.isEmpty()) box.addPoint(0, 0); - return box; - }; - Path.prototype.draw = function(ctx) { - ctx.beginPath(); - for (var i = 0; i < this.commands.length; i += 1) { - var cmd = this.commands[i]; - if (cmd.type === "M") ctx.moveTo(cmd.x, cmd.y); - else if (cmd.type === "L") ctx.lineTo(cmd.x, cmd.y); - else if (cmd.type === "C") ctx.bezierCurveTo(cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y); - else if (cmd.type === "Q") ctx.quadraticCurveTo(cmd.x1, cmd.y1, cmd.x, cmd.y); - else if (cmd.type === "Z") ctx.closePath(); - } - if (this.fill) { - ctx.fillStyle = this.fill; - ctx.fill(); - } - if (this.stroke) { - ctx.strokeStyle = this.stroke; - ctx.lineWidth = this.strokeWidth; - ctx.stroke(); - } - }; - Path.prototype.toPathData = function(decimalPlaces) { - decimalPlaces = decimalPlaces !== void 0 ? decimalPlaces : 2; - function floatToString(v) { - if (Math.round(v) === v) return "" + Math.round(v); - else return v.toFixed(decimalPlaces); - } - function packValues() { - var arguments$1 = arguments; - var s = ""; - for (var i2 = 0; i2 < arguments.length; i2 += 1) { - var v = arguments$1[i2]; - if (v >= 0 && i2 > 0) s += " "; - s += floatToString(v); - } - return s; - } - var d = ""; - for (var i = 0; i < this.commands.length; i += 1) { - var cmd = this.commands[i]; - if (cmd.type === "M") d += "M" + packValues(cmd.x, cmd.y); - else if (cmd.type === "L") d += "L" + packValues(cmd.x, cmd.y); - else if (cmd.type === "C") d += "C" + packValues(cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y); - else if (cmd.type === "Q") d += "Q" + packValues(cmd.x1, cmd.y1, cmd.x, cmd.y); - else if (cmd.type === "Z") d += "Z"; - } - return d; - }; - Path.prototype.toSVG = function(decimalPlaces) { - var svg = "<path d=\""; - svg += this.toPathData(decimalPlaces); - svg += "\""; - if (this.fill && this.fill !== "black") if (this.fill === null) svg += " fill=\"none\""; - else svg += " fill=\"" + this.fill + "\""; - if (this.stroke) svg += " stroke=\"" + this.stroke + "\" stroke-width=\"" + this.strokeWidth + "\""; - svg += "/>"; - return svg; - }; - Path.prototype.toDOMElement = function(decimalPlaces) { - var temporaryPath = this.toPathData(decimalPlaces); - var newPath = document.createElementNS("http://www.w3.org/2000/svg", "path"); - newPath.setAttribute("d", temporaryPath); - return newPath; - }; - function fail(message) { - throw new Error(message); - } - function argument(predicate, message) { - if (!predicate) fail(message); - } - var check = { - fail, - argument, - assert: argument - }; - var LIMIT16 = 32768; - var LIMIT32 = 2147483648; - var decode = {}; - var encode = {}; - var sizeOf = {}; - function constant(v) { - return function() { - return v; - }; - } - encode.BYTE = function(v) { - check.argument(v >= 0 && v <= 255, "Byte value should be between 0 and 255."); - return [v]; - }; - sizeOf.BYTE = constant(1); - encode.CHAR = function(v) { - return [v.charCodeAt(0)]; - }; - sizeOf.CHAR = constant(1); - encode.CHARARRAY = function(v) { - if (typeof v === "undefined") { - v = ""; - console.warn("Undefined CHARARRAY encountered and treated as an empty string. This is probably caused by a missing glyph name."); - } - var b = []; - for (var i = 0; i < v.length; i += 1) b[i] = v.charCodeAt(i); - return b; - }; - sizeOf.CHARARRAY = function(v) { - if (typeof v === "undefined") return 0; - return v.length; - }; - encode.USHORT = function(v) { - return [v >> 8 & 255, v & 255]; - }; - sizeOf.USHORT = constant(2); - encode.SHORT = function(v) { - if (v >= LIMIT16) v = -(2 * LIMIT16 - v); - return [v >> 8 & 255, v & 255]; - }; - sizeOf.SHORT = constant(2); - encode.UINT24 = function(v) { - return [ - v >> 16 & 255, - v >> 8 & 255, - v & 255 - ]; - }; - sizeOf.UINT24 = constant(3); - encode.ULONG = function(v) { - return [ - v >> 24 & 255, - v >> 16 & 255, - v >> 8 & 255, - v & 255 - ]; - }; - sizeOf.ULONG = constant(4); - encode.LONG = function(v) { - if (v >= LIMIT32) v = -(2 * LIMIT32 - v); - return [ - v >> 24 & 255, - v >> 16 & 255, - v >> 8 & 255, - v & 255 - ]; - }; - sizeOf.LONG = constant(4); - encode.FIXED = encode.ULONG; - sizeOf.FIXED = sizeOf.ULONG; - encode.FWORD = encode.SHORT; - sizeOf.FWORD = sizeOf.SHORT; - encode.UFWORD = encode.USHORT; - sizeOf.UFWORD = sizeOf.USHORT; - encode.LONGDATETIME = function(v) { - return [ - 0, - 0, - 0, - 0, - v >> 24 & 255, - v >> 16 & 255, - v >> 8 & 255, - v & 255 - ]; - }; - sizeOf.LONGDATETIME = constant(8); - encode.TAG = function(v) { - check.argument(v.length === 4, "Tag should be exactly 4 ASCII characters."); - return [ - v.charCodeAt(0), - v.charCodeAt(1), - v.charCodeAt(2), - v.charCodeAt(3) - ]; - }; - sizeOf.TAG = constant(4); - encode.Card8 = encode.BYTE; - sizeOf.Card8 = sizeOf.BYTE; - encode.Card16 = encode.USHORT; - sizeOf.Card16 = sizeOf.USHORT; - encode.OffSize = encode.BYTE; - sizeOf.OffSize = sizeOf.BYTE; - encode.SID = encode.USHORT; - sizeOf.SID = sizeOf.USHORT; - encode.NUMBER = function(v) { - if (v >= -107 && v <= 107) return [v + 139]; - else if (v >= 108 && v <= 1131) { - v = v - 108; - return [(v >> 8) + 247, v & 255]; - } else if (v >= -1131 && v <= -108) { - v = -v - 108; - return [(v >> 8) + 251, v & 255]; - } else if (v >= -32768 && v <= 32767) return encode.NUMBER16(v); - else return encode.NUMBER32(v); - }; - sizeOf.NUMBER = function(v) { - return encode.NUMBER(v).length; - }; - encode.NUMBER16 = function(v) { - return [ - 28, - v >> 8 & 255, - v & 255 - ]; - }; - sizeOf.NUMBER16 = constant(3); - encode.NUMBER32 = function(v) { - return [ - 29, - v >> 24 & 255, - v >> 16 & 255, - v >> 8 & 255, - v & 255 - ]; - }; - sizeOf.NUMBER32 = constant(5); - encode.REAL = function(v) { - var value = v.toString(); - var m = /\.(\d*?)(?:9{5,20}|0{5,20})\d{0,2}(?:e(.+)|$)/.exec(value); - if (m) { - var epsilon = parseFloat("1e" + ((m[2] ? +m[2] : 0) + m[1].length)); - value = (Math.round(v * epsilon) / epsilon).toString(); - } - var nibbles = ""; - for (var i = 0, ii = value.length; i < ii; i += 1) { - var c = value[i]; - if (c === "e") nibbles += value[++i] === "-" ? "c" : "b"; - else if (c === ".") nibbles += "a"; - else if (c === "-") nibbles += "e"; - else nibbles += c; - } - nibbles += nibbles.length & 1 ? "f" : "ff"; - var out = [30]; - for (var i$1 = 0, ii$1 = nibbles.length; i$1 < ii$1; i$1 += 2) out.push(parseInt(nibbles.substr(i$1, 2), 16)); - return out; - }; - sizeOf.REAL = function(v) { - return encode.REAL(v).length; - }; - encode.NAME = encode.CHARARRAY; - sizeOf.NAME = sizeOf.CHARARRAY; - encode.STRING = encode.CHARARRAY; - sizeOf.STRING = sizeOf.CHARARRAY; - decode.UTF8 = function(data, offset, numBytes) { - var codePoints = []; - var numChars = numBytes; - for (var j = 0; j < numChars; j++, offset += 1) codePoints[j] = data.getUint8(offset); - return String.fromCharCode.apply(null, codePoints); - }; - decode.UTF16 = function(data, offset, numBytes) { - var codePoints = []; - var numChars = numBytes / 2; - for (var j = 0; j < numChars; j++, offset += 2) codePoints[j] = data.getUint16(offset); - return String.fromCharCode.apply(null, codePoints); - }; - encode.UTF16 = function(v) { - var b = []; - for (var i = 0; i < v.length; i += 1) { - var codepoint = v.charCodeAt(i); - b[b.length] = codepoint >> 8 & 255; - b[b.length] = codepoint & 255; - } - return b; - }; - sizeOf.UTF16 = function(v) { - return v.length * 2; - }; - var eightBitMacEncodings = { - "x-mac-croatian": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ", - "x-mac-cyrillic": "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю", - "x-mac-gaelic": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ", - "x-mac-greek": "Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ­", - "x-mac-icelandic": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ", - "x-mac-inuit": "ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł", - "x-mac-ce": "ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ", - macintosh: "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ", - "x-mac-romanian": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ", - "x-mac-turkish": "ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ" - }; - decode.MACSTRING = function(dataView, offset, dataLength, encoding) { - var table2 = eightBitMacEncodings[encoding]; - if (table2 === void 0) return; - var result = ""; - for (var i = 0; i < dataLength; i++) { - var c = dataView.getUint8(offset + i); - if (c <= 127) result += String.fromCharCode(c); - else result += table2[c & 127]; - } - return result; - }; - var macEncodingTableCache = typeof WeakMap === "function" && /* @__PURE__ */ new WeakMap(); - var macEncodingCacheKeys; - var getMacEncodingTable = function(encoding) { - if (!macEncodingCacheKeys) { - macEncodingCacheKeys = {}; - for (var e in eightBitMacEncodings) macEncodingCacheKeys[e] = new String(e); - } - var cacheKey = macEncodingCacheKeys[encoding]; - if (cacheKey === void 0) return; - if (macEncodingTableCache) { - var cachedTable = macEncodingTableCache.get(cacheKey); - if (cachedTable !== void 0) return cachedTable; - } - var decodingTable = eightBitMacEncodings[encoding]; - if (decodingTable === void 0) return; - var encodingTable = {}; - for (var i = 0; i < decodingTable.length; i++) encodingTable[decodingTable.charCodeAt(i)] = i + 128; - if (macEncodingTableCache) macEncodingTableCache.set(cacheKey, encodingTable); - return encodingTable; - }; - encode.MACSTRING = function(str, encoding) { - var table2 = getMacEncodingTable(encoding); - if (table2 === void 0) return; - var result = []; - for (var i = 0; i < str.length; i++) { - var c = str.charCodeAt(i); - if (c >= 128) { - c = table2[c]; - if (c === void 0) return; - } - result[i] = c; - } - return result; - }; - sizeOf.MACSTRING = function(str, encoding) { - var b = encode.MACSTRING(str, encoding); - if (b !== void 0) return b.length; - else return 0; - }; - function isByteEncodable(value) { - return value >= -128 && value <= 127; - } - function encodeVarDeltaRunAsZeroes(deltas, pos, result) { - var runLength = 0; - var numDeltas = deltas.length; - while (pos < numDeltas && runLength < 64 && deltas[pos] === 0) { - ++pos; - ++runLength; - } - result.push(128 | runLength - 1); - return pos; - } - function encodeVarDeltaRunAsBytes(deltas, offset, result) { - var runLength = 0; - var numDeltas = deltas.length; - var pos = offset; - while (pos < numDeltas && runLength < 64) { - var value = deltas[pos]; - if (!isByteEncodable(value)) break; - if (value === 0 && pos + 1 < numDeltas && deltas[pos + 1] === 0) break; - ++pos; - ++runLength; - } - result.push(runLength - 1); - for (var i = offset; i < pos; ++i) result.push(deltas[i] + 256 & 255); - return pos; - } - function encodeVarDeltaRunAsWords(deltas, offset, result) { - var runLength = 0; - var numDeltas = deltas.length; - var pos = offset; - while (pos < numDeltas && runLength < 64) { - var value = deltas[pos]; - if (value === 0) break; - if (isByteEncodable(value) && pos + 1 < numDeltas && isByteEncodable(deltas[pos + 1])) break; - ++pos; - ++runLength; - } - result.push(64 | runLength - 1); - for (var i = offset; i < pos; ++i) { - var val = deltas[i]; - result.push(val + 65536 >> 8 & 255, val + 256 & 255); - } - return pos; - } - encode.VARDELTAS = function(deltas) { - var pos = 0; - var result = []; - while (pos < deltas.length) { - var value = deltas[pos]; - if (value === 0) pos = encodeVarDeltaRunAsZeroes(deltas, pos, result); - else if (value >= -128 && value <= 127) pos = encodeVarDeltaRunAsBytes(deltas, pos, result); - else pos = encodeVarDeltaRunAsWords(deltas, pos, result); - } - return result; - }; - encode.INDEX = function(l) { - var offset = 1; - var offsets = [offset]; - var data = []; - for (var i = 0; i < l.length; i += 1) { - var v = encode.OBJECT(l[i]); - Array.prototype.push.apply(data, v); - offset += v.length; - offsets.push(offset); - } - if (data.length === 0) return [0, 0]; - var encodedOffsets = []; - var offSize = 1 + Math.floor(Math.log(offset) / Math.log(2)) / 8 | 0; - var offsetEncoder = [ - void 0, - encode.BYTE, - encode.USHORT, - encode.UINT24, - encode.ULONG - ][offSize]; - for (var i$1 = 0; i$1 < offsets.length; i$1 += 1) { - var encodedOffset = offsetEncoder(offsets[i$1]); - Array.prototype.push.apply(encodedOffsets, encodedOffset); - } - return Array.prototype.concat(encode.Card16(l.length), encode.OffSize(offSize), encodedOffsets, data); - }; - sizeOf.INDEX = function(v) { - return encode.INDEX(v).length; - }; - encode.DICT = function(m) { - var d = []; - var keys = Object.keys(m); - var length = keys.length; - for (var i = 0; i < length; i += 1) { - var k = parseInt(keys[i], 0); - var v = m[k]; - d = d.concat(encode.OPERAND(v.value, v.type)); - d = d.concat(encode.OPERATOR(k)); - } - return d; - }; - sizeOf.DICT = function(m) { - return encode.DICT(m).length; - }; - encode.OPERATOR = function(v) { - if (v < 1200) return [v]; - else return [12, v - 1200]; - }; - encode.OPERAND = function(v, type) { - var d = []; - if (Array.isArray(type)) for (var i = 0; i < type.length; i += 1) { - check.argument(v.length === type.length, "Not enough arguments given for type" + type); - d = d.concat(encode.OPERAND(v[i], type[i])); - } - else if (type === "SID") d = d.concat(encode.NUMBER(v)); - else if (type === "offset") d = d.concat(encode.NUMBER32(v)); - else if (type === "number") d = d.concat(encode.NUMBER(v)); - else if (type === "real") d = d.concat(encode.REAL(v)); - else throw new Error("Unknown operand type " + type); - return d; - }; - encode.OP = encode.BYTE; - sizeOf.OP = sizeOf.BYTE; - var wmm = typeof WeakMap === "function" && /* @__PURE__ */ new WeakMap(); - encode.CHARSTRING = function(ops) { - if (wmm) { - var cachedValue = wmm.get(ops); - if (cachedValue !== void 0) return cachedValue; - } - var d = []; - var length = ops.length; - for (var i = 0; i < length; i += 1) { - var op = ops[i]; - d = d.concat(encode[op.type](op.value)); - } - if (wmm) wmm.set(ops, d); - return d; - }; - sizeOf.CHARSTRING = function(ops) { - return encode.CHARSTRING(ops).length; - }; - encode.OBJECT = function(v) { - var encodingFunction = encode[v.type]; - check.argument(encodingFunction !== void 0, "No encoding function for type " + v.type); - return encodingFunction(v.value); - }; - sizeOf.OBJECT = function(v) { - var sizeOfFunction = sizeOf[v.type]; - check.argument(sizeOfFunction !== void 0, "No sizeOf function for type " + v.type); - return sizeOfFunction(v.value); - }; - encode.TABLE = function(table2) { - var d = []; - var length = table2.fields.length; - var subtables = []; - var subtableOffsets = []; - for (var i = 0; i < length; i += 1) { - var field = table2.fields[i]; - var encodingFunction = encode[field.type]; - check.argument(encodingFunction !== void 0, "No encoding function for field type " + field.type + " (" + field.name + ")"); - var value = table2[field.name]; - if (value === void 0) value = field.value; - var bytes = encodingFunction(value); - if (field.type === "TABLE") { - subtableOffsets.push(d.length); - d = d.concat([0, 0]); - subtables.push(bytes); - } else d = d.concat(bytes); - } - for (var i$1 = 0; i$1 < subtables.length; i$1 += 1) { - var o = subtableOffsets[i$1]; - var offset = d.length; - check.argument(offset < 65536, "Table " + table2.tableName + " too big."); - d[o] = offset >> 8; - d[o + 1] = offset & 255; - d = d.concat(subtables[i$1]); - } - return d; - }; - sizeOf.TABLE = function(table2) { - var numBytes = 0; - var length = table2.fields.length; - for (var i = 0; i < length; i += 1) { - var field = table2.fields[i]; - var sizeOfFunction = sizeOf[field.type]; - check.argument(sizeOfFunction !== void 0, "No sizeOf function for field type " + field.type + " (" + field.name + ")"); - var value = table2[field.name]; - if (value === void 0) value = field.value; - numBytes += sizeOfFunction(value); - if (field.type === "TABLE") numBytes += 2; - } - return numBytes; - }; - encode.RECORD = encode.TABLE; - sizeOf.RECORD = sizeOf.TABLE; - encode.LITERAL = function(v) { - return v; - }; - sizeOf.LITERAL = function(v) { - return v.length; - }; - function Table(tableName, fields, options) { - if (fields.length && (fields[0].name !== "coverageFormat" || fields[0].value === 1)) for (var i = 0; i < fields.length; i += 1) { - var field = fields[i]; - this[field.name] = field.value; - } - this.tableName = tableName; - this.fields = fields; - if (options) { - var optionKeys = Object.keys(options); - for (var i$1 = 0; i$1 < optionKeys.length; i$1 += 1) { - var k = optionKeys[i$1]; - var v = options[k]; - if (this[k] !== void 0) this[k] = v; - } - } - } - Table.prototype.encode = function() { - return encode.TABLE(this); - }; - Table.prototype.sizeOf = function() { - return sizeOf.TABLE(this); - }; - function ushortList(itemName, list, count) { - if (count === void 0) count = list.length; - var fields = new Array(list.length + 1); - fields[0] = { - name: itemName + "Count", - type: "USHORT", - value: count - }; - for (var i = 0; i < list.length; i++) fields[i + 1] = { - name: itemName + i, - type: "USHORT", - value: list[i] - }; - return fields; - } - function tableList(itemName, records, itemCallback) { - var count = records.length; - var fields = new Array(count + 1); - fields[0] = { - name: itemName + "Count", - type: "USHORT", - value: count - }; - for (var i = 0; i < count; i++) fields[i + 1] = { - name: itemName + i, - type: "TABLE", - value: itemCallback(records[i], i) - }; - return fields; - } - function recordList(itemName, records, itemCallback) { - var count = records.length; - var fields = []; - fields[0] = { - name: itemName + "Count", - type: "USHORT", - value: count - }; - for (var i = 0; i < count; i++) fields = fields.concat(itemCallback(records[i], i)); - return fields; - } - function Coverage(coverageTable) { - if (coverageTable.format === 1) Table.call(this, "coverageTable", [{ - name: "coverageFormat", - type: "USHORT", - value: 1 - }].concat(ushortList("glyph", coverageTable.glyphs))); - else if (coverageTable.format === 2) Table.call(this, "coverageTable", [{ - name: "coverageFormat", - type: "USHORT", - value: 2 - }].concat(recordList("rangeRecord", coverageTable.ranges, function(RangeRecord) { - return [ - { - name: "startGlyphID", - type: "USHORT", - value: RangeRecord.start - }, - { - name: "endGlyphID", - type: "USHORT", - value: RangeRecord.end - }, - { - name: "startCoverageIndex", - type: "USHORT", - value: RangeRecord.index - } - ]; - }))); - else check.assert(false, "Coverage format must be 1 or 2."); - } - Coverage.prototype = Object.create(Table.prototype); - Coverage.prototype.constructor = Coverage; - function ScriptList(scriptListTable) { - Table.call(this, "scriptListTable", recordList("scriptRecord", scriptListTable, function(scriptRecord, i) { - var script = scriptRecord.script; - var defaultLangSys = script.defaultLangSys; - check.assert(!!defaultLangSys, "Unable to write GSUB: script " + scriptRecord.tag + " has no default language system."); - return [{ - name: "scriptTag" + i, - type: "TAG", - value: scriptRecord.tag - }, { - name: "script" + i, - type: "TABLE", - value: new Table("scriptTable", [{ - name: "defaultLangSys", - type: "TABLE", - value: new Table("defaultLangSys", [{ - name: "lookupOrder", - type: "USHORT", - value: 0 - }, { - name: "reqFeatureIndex", - type: "USHORT", - value: defaultLangSys.reqFeatureIndex - }].concat(ushortList("featureIndex", defaultLangSys.featureIndexes))) - }].concat(recordList("langSys", script.langSysRecords, function(langSysRecord, i2) { - var langSys = langSysRecord.langSys; - return [{ - name: "langSysTag" + i2, - type: "TAG", - value: langSysRecord.tag - }, { - name: "langSys" + i2, - type: "TABLE", - value: new Table("langSys", [{ - name: "lookupOrder", - type: "USHORT", - value: 0 - }, { - name: "reqFeatureIndex", - type: "USHORT", - value: langSys.reqFeatureIndex - }].concat(ushortList("featureIndex", langSys.featureIndexes))) - }]; - }))) - }]; - })); - } - ScriptList.prototype = Object.create(Table.prototype); - ScriptList.prototype.constructor = ScriptList; - function FeatureList(featureListTable) { - Table.call(this, "featureListTable", recordList("featureRecord", featureListTable, function(featureRecord, i) { - var feature = featureRecord.feature; - return [{ - name: "featureTag" + i, - type: "TAG", - value: featureRecord.tag - }, { - name: "feature" + i, - type: "TABLE", - value: new Table("featureTable", [{ - name: "featureParams", - type: "USHORT", - value: feature.featureParams - }].concat(ushortList("lookupListIndex", feature.lookupListIndexes))) - }]; - })); - } - FeatureList.prototype = Object.create(Table.prototype); - FeatureList.prototype.constructor = FeatureList; - function LookupList(lookupListTable, subtableMakers2) { - Table.call(this, "lookupListTable", tableList("lookup", lookupListTable, function(lookupTable) { - var subtableCallback = subtableMakers2[lookupTable.lookupType]; - check.assert(!!subtableCallback, "Unable to write GSUB lookup type " + lookupTable.lookupType + " tables."); - return new Table("lookupTable", [{ - name: "lookupType", - type: "USHORT", - value: lookupTable.lookupType - }, { - name: "lookupFlag", - type: "USHORT", - value: lookupTable.lookupFlag - }].concat(tableList("subtable", lookupTable.subtables, subtableCallback))); - })); - } - LookupList.prototype = Object.create(Table.prototype); - LookupList.prototype.constructor = LookupList; - var table = { - Table, - Record: Table, - Coverage, - ScriptList, - FeatureList, - LookupList, - ushortList, - tableList, - recordList - }; - function getByte(dataView, offset) { - return dataView.getUint8(offset); - } - function getUShort(dataView, offset) { - return dataView.getUint16(offset, false); - } - function getShort(dataView, offset) { - return dataView.getInt16(offset, false); - } - function getULong(dataView, offset) { - return dataView.getUint32(offset, false); - } - function getFixed(dataView, offset) { - return dataView.getInt16(offset, false) + dataView.getUint16(offset + 2, false) / 65535; - } - function getTag(dataView, offset) { - var tag = ""; - for (var i = offset; i < offset + 4; i += 1) tag += String.fromCharCode(dataView.getInt8(i)); - return tag; - } - function getOffset(dataView, offset, offSize) { - var v = 0; - for (var i = 0; i < offSize; i += 1) { - v <<= 8; - v += dataView.getUint8(offset + i); - } - return v; - } - function getBytes(dataView, startOffset, endOffset) { - var bytes = []; - for (var i = startOffset; i < endOffset; i += 1) bytes.push(dataView.getUint8(i)); - return bytes; - } - function bytesToString(bytes) { - var s = ""; - for (var i = 0; i < bytes.length; i += 1) s += String.fromCharCode(bytes[i]); - return s; - } - var typeOffsets = { - byte: 1, - uShort: 2, - short: 2, - uLong: 4, - fixed: 4, - longDateTime: 8, - tag: 4 - }; - function Parser(data, offset) { - this.data = data; - this.offset = offset; - this.relativeOffset = 0; - } - Parser.prototype.parseByte = function() { - var v = this.data.getUint8(this.offset + this.relativeOffset); - this.relativeOffset += 1; - return v; - }; - Parser.prototype.parseChar = function() { - var v = this.data.getInt8(this.offset + this.relativeOffset); - this.relativeOffset += 1; - return v; - }; - Parser.prototype.parseCard8 = Parser.prototype.parseByte; - Parser.prototype.parseUShort = function() { - var v = this.data.getUint16(this.offset + this.relativeOffset); - this.relativeOffset += 2; - return v; - }; - Parser.prototype.parseCard16 = Parser.prototype.parseUShort; - Parser.prototype.parseSID = Parser.prototype.parseUShort; - Parser.prototype.parseOffset16 = Parser.prototype.parseUShort; - Parser.prototype.parseShort = function() { - var v = this.data.getInt16(this.offset + this.relativeOffset); - this.relativeOffset += 2; - return v; - }; - Parser.prototype.parseF2Dot14 = function() { - var v = this.data.getInt16(this.offset + this.relativeOffset) / 16384; - this.relativeOffset += 2; - return v; - }; - Parser.prototype.parseULong = function() { - var v = getULong(this.data, this.offset + this.relativeOffset); - this.relativeOffset += 4; - return v; - }; - Parser.prototype.parseOffset32 = Parser.prototype.parseULong; - Parser.prototype.parseFixed = function() { - var v = getFixed(this.data, this.offset + this.relativeOffset); - this.relativeOffset += 4; - return v; - }; - Parser.prototype.parseString = function(length) { - var dataView = this.data; - var offset = this.offset + this.relativeOffset; - var string = ""; - this.relativeOffset += length; - for (var i = 0; i < length; i++) string += String.fromCharCode(dataView.getUint8(offset + i)); - return string; - }; - Parser.prototype.parseTag = function() { - return this.parseString(4); - }; - Parser.prototype.parseLongDateTime = function() { - var v = getULong(this.data, this.offset + this.relativeOffset + 4); - v -= 2082844800; - this.relativeOffset += 8; - return v; - }; - Parser.prototype.parseVersion = function(minorBase) { - var major = getUShort(this.data, this.offset + this.relativeOffset); - var minor = getUShort(this.data, this.offset + this.relativeOffset + 2); - this.relativeOffset += 4; - if (minorBase === void 0) minorBase = 4096; - return major + minor / minorBase / 10; - }; - Parser.prototype.skip = function(type, amount) { - if (amount === void 0) amount = 1; - this.relativeOffset += typeOffsets[type] * amount; - }; - Parser.prototype.parseULongList = function(count) { - if (count === void 0) count = this.parseULong(); - var offsets = new Array(count); - var dataView = this.data; - var offset = this.offset + this.relativeOffset; - for (var i = 0; i < count; i++) { - offsets[i] = dataView.getUint32(offset); - offset += 4; - } - this.relativeOffset += count * 4; - return offsets; - }; - Parser.prototype.parseOffset16List = Parser.prototype.parseUShortList = function(count) { - if (count === void 0) count = this.parseUShort(); - var offsets = new Array(count); - var dataView = this.data; - var offset = this.offset + this.relativeOffset; - for (var i = 0; i < count; i++) { - offsets[i] = dataView.getUint16(offset); - offset += 2; - } - this.relativeOffset += count * 2; - return offsets; - }; - Parser.prototype.parseShortList = function(count) { - var list = new Array(count); - var dataView = this.data; - var offset = this.offset + this.relativeOffset; - for (var i = 0; i < count; i++) { - list[i] = dataView.getInt16(offset); - offset += 2; - } - this.relativeOffset += count * 2; - return list; - }; - Parser.prototype.parseByteList = function(count) { - var list = new Array(count); - var dataView = this.data; - var offset = this.offset + this.relativeOffset; - for (var i = 0; i < count; i++) list[i] = dataView.getUint8(offset++); - this.relativeOffset += count; - return list; - }; - Parser.prototype.parseList = function(count, itemCallback) { - if (!itemCallback) { - itemCallback = count; - count = this.parseUShort(); - } - var list = new Array(count); - for (var i = 0; i < count; i++) list[i] = itemCallback.call(this); - return list; - }; - Parser.prototype.parseList32 = function(count, itemCallback) { - if (!itemCallback) { - itemCallback = count; - count = this.parseULong(); - } - var list = new Array(count); - for (var i = 0; i < count; i++) list[i] = itemCallback.call(this); - return list; - }; - Parser.prototype.parseRecordList = function(count, recordDescription) { - if (!recordDescription) { - recordDescription = count; - count = this.parseUShort(); - } - var records = new Array(count); - var fields = Object.keys(recordDescription); - for (var i = 0; i < count; i++) { - var rec = {}; - for (var j = 0; j < fields.length; j++) { - var fieldName = fields[j]; - rec[fieldName] = recordDescription[fieldName].call(this); - } - records[i] = rec; - } - return records; - }; - Parser.prototype.parseRecordList32 = function(count, recordDescription) { - if (!recordDescription) { - recordDescription = count; - count = this.parseULong(); - } - var records = new Array(count); - var fields = Object.keys(recordDescription); - for (var i = 0; i < count; i++) { - var rec = {}; - for (var j = 0; j < fields.length; j++) { - var fieldName = fields[j]; - rec[fieldName] = recordDescription[fieldName].call(this); - } - records[i] = rec; - } - return records; - }; - Parser.prototype.parseStruct = function(description) { - if (typeof description === "function") return description.call(this); - else { - var fields = Object.keys(description); - var struct = {}; - for (var j = 0; j < fields.length; j++) { - var fieldName = fields[j]; - struct[fieldName] = description[fieldName].call(this); - } - return struct; - } - }; - Parser.prototype.parseValueRecord = function(valueFormat) { - if (valueFormat === void 0) valueFormat = this.parseUShort(); - if (valueFormat === 0) return; - var valueRecord = {}; - if (valueFormat & 1) valueRecord.xPlacement = this.parseShort(); - if (valueFormat & 2) valueRecord.yPlacement = this.parseShort(); - if (valueFormat & 4) valueRecord.xAdvance = this.parseShort(); - if (valueFormat & 8) valueRecord.yAdvance = this.parseShort(); - if (valueFormat & 16) { - valueRecord.xPlaDevice = void 0; - this.parseShort(); - } - if (valueFormat & 32) { - valueRecord.yPlaDevice = void 0; - this.parseShort(); - } - if (valueFormat & 64) { - valueRecord.xAdvDevice = void 0; - this.parseShort(); - } - if (valueFormat & 128) { - valueRecord.yAdvDevice = void 0; - this.parseShort(); - } - return valueRecord; - }; - Parser.prototype.parseValueRecordList = function() { - var valueFormat = this.parseUShort(); - var valueCount = this.parseUShort(); - var values = new Array(valueCount); - for (var i = 0; i < valueCount; i++) values[i] = this.parseValueRecord(valueFormat); - return values; - }; - Parser.prototype.parsePointer = function(description) { - var structOffset = this.parseOffset16(); - if (structOffset > 0) return new Parser(this.data, this.offset + structOffset).parseStruct(description); - }; - Parser.prototype.parsePointer32 = function(description) { - var structOffset = this.parseOffset32(); - if (structOffset > 0) return new Parser(this.data, this.offset + structOffset).parseStruct(description); - }; - Parser.prototype.parseListOfLists = function(itemCallback) { - var offsets = this.parseOffset16List(); - var count = offsets.length; - var relativeOffset = this.relativeOffset; - var list = new Array(count); - for (var i = 0; i < count; i++) { - var start = offsets[i]; - if (start === 0) { - list[i] = void 0; - continue; - } - this.relativeOffset = start; - if (itemCallback) { - var subOffsets = this.parseOffset16List(); - var subList = new Array(subOffsets.length); - for (var j = 0; j < subOffsets.length; j++) { - this.relativeOffset = start + subOffsets[j]; - subList[j] = itemCallback.call(this); - } - list[i] = subList; - } else list[i] = this.parseUShortList(); - } - this.relativeOffset = relativeOffset; - return list; - }; - Parser.prototype.parseCoverage = function() { - var startOffset = this.offset + this.relativeOffset; - var format = this.parseUShort(); - var count = this.parseUShort(); - if (format === 1) return { - format: 1, - glyphs: this.parseUShortList(count) - }; - else if (format === 2) { - var ranges = new Array(count); - for (var i = 0; i < count; i++) ranges[i] = { - start: this.parseUShort(), - end: this.parseUShort(), - index: this.parseUShort() - }; - return { - format: 2, - ranges - }; - } - throw new Error("0x" + startOffset.toString(16) + ": Coverage format must be 1 or 2."); - }; - Parser.prototype.parseClassDef = function() { - var startOffset = this.offset + this.relativeOffset; - var format = this.parseUShort(); - if (format === 1) return { - format: 1, - startGlyph: this.parseUShort(), - classes: this.parseUShortList() - }; - else if (format === 2) return { - format: 2, - ranges: this.parseRecordList({ - start: Parser.uShort, - end: Parser.uShort, - classId: Parser.uShort - }) - }; - throw new Error("0x" + startOffset.toString(16) + ": ClassDef format must be 1 or 2."); - }; - Parser.list = function(count, itemCallback) { - return function() { - return this.parseList(count, itemCallback); - }; - }; - Parser.list32 = function(count, itemCallback) { - return function() { - return this.parseList32(count, itemCallback); - }; - }; - Parser.recordList = function(count, recordDescription) { - return function() { - return this.parseRecordList(count, recordDescription); - }; - }; - Parser.recordList32 = function(count, recordDescription) { - return function() { - return this.parseRecordList32(count, recordDescription); - }; - }; - Parser.pointer = function(description) { - return function() { - return this.parsePointer(description); - }; - }; - Parser.pointer32 = function(description) { - return function() { - return this.parsePointer32(description); - }; - }; - Parser.tag = Parser.prototype.parseTag; - Parser.byte = Parser.prototype.parseByte; - Parser.uShort = Parser.offset16 = Parser.prototype.parseUShort; - Parser.uShortList = Parser.prototype.parseUShortList; - Parser.uLong = Parser.offset32 = Parser.prototype.parseULong; - Parser.uLongList = Parser.prototype.parseULongList; - Parser.struct = Parser.prototype.parseStruct; - Parser.coverage = Parser.prototype.parseCoverage; - Parser.classDef = Parser.prototype.parseClassDef; - var langSysTable = { - reserved: Parser.uShort, - reqFeatureIndex: Parser.uShort, - featureIndexes: Parser.uShortList - }; - Parser.prototype.parseScriptList = function() { - return this.parsePointer(Parser.recordList({ - tag: Parser.tag, - script: Parser.pointer({ - defaultLangSys: Parser.pointer(langSysTable), - langSysRecords: Parser.recordList({ - tag: Parser.tag, - langSys: Parser.pointer(langSysTable) - }) - }) - })) || []; - }; - Parser.prototype.parseFeatureList = function() { - return this.parsePointer(Parser.recordList({ - tag: Parser.tag, - feature: Parser.pointer({ - featureParams: Parser.offset16, - lookupListIndexes: Parser.uShortList - }) - })) || []; - }; - Parser.prototype.parseLookupList = function(lookupTableParsers) { - return this.parsePointer(Parser.list(Parser.pointer(function() { - var lookupType = this.parseUShort(); - check.argument(1 <= lookupType && lookupType <= 9, "GPOS/GSUB lookup type " + lookupType + " unknown."); - var lookupFlag = this.parseUShort(); - var useMarkFilteringSet = lookupFlag & 16; - return { - lookupType, - lookupFlag, - subtables: this.parseList(Parser.pointer(lookupTableParsers[lookupType])), - markFilteringSet: useMarkFilteringSet ? this.parseUShort() : void 0 - }; - }))) || []; - }; - Parser.prototype.parseFeatureVariationsList = function() { - return this.parsePointer32(function() { - var majorVersion = this.parseUShort(); - var minorVersion = this.parseUShort(); - check.argument(majorVersion === 1 && minorVersion < 1, "GPOS/GSUB feature variations table unknown."); - return this.parseRecordList32({ - conditionSetOffset: Parser.offset32, - featureTableSubstitutionOffset: Parser.offset32 - }); - }) || []; - }; - var parse = { - getByte, - getCard8: getByte, - getUShort, - getCard16: getUShort, - getShort, - getULong, - getFixed, - getTag, - getOffset, - getBytes, - bytesToString, - Parser - }; - function parseCmapTableFormat12(cmap2, p) { - p.parseUShort(); - cmap2.length = p.parseULong(); - cmap2.language = p.parseULong(); - var groupCount; - cmap2.groupCount = groupCount = p.parseULong(); - cmap2.glyphIndexMap = {}; - for (var i = 0; i < groupCount; i += 1) { - var startCharCode = p.parseULong(); - var endCharCode = p.parseULong(); - var startGlyphId = p.parseULong(); - for (var c = startCharCode; c <= endCharCode; c += 1) { - cmap2.glyphIndexMap[c] = startGlyphId; - startGlyphId++; - } - } - } - function parseCmapTableFormat4(cmap2, p, data, start, offset) { - cmap2.length = p.parseUShort(); - cmap2.language = p.parseUShort(); - var segCount; - cmap2.segCount = segCount = p.parseUShort() >> 1; - p.skip("uShort", 3); - cmap2.glyphIndexMap = {}; - var endCountParser = new parse.Parser(data, start + offset + 14); - var startCountParser = new parse.Parser(data, start + offset + 16 + segCount * 2); - var idDeltaParser = new parse.Parser(data, start + offset + 16 + segCount * 4); - var idRangeOffsetParser = new parse.Parser(data, start + offset + 16 + segCount * 6); - var glyphIndexOffset = start + offset + 16 + segCount * 8; - for (var i = 0; i < segCount - 1; i += 1) { - var glyphIndex = void 0; - var endCount = endCountParser.parseUShort(); - var startCount = startCountParser.parseUShort(); - var idDelta = idDeltaParser.parseShort(); - var idRangeOffset = idRangeOffsetParser.parseUShort(); - for (var c = startCount; c <= endCount; c += 1) { - if (idRangeOffset !== 0) { - glyphIndexOffset = idRangeOffsetParser.offset + idRangeOffsetParser.relativeOffset - 2; - glyphIndexOffset += idRangeOffset; - glyphIndexOffset += (c - startCount) * 2; - glyphIndex = parse.getUShort(data, glyphIndexOffset); - if (glyphIndex !== 0) glyphIndex = glyphIndex + idDelta & 65535; - } else glyphIndex = c + idDelta & 65535; - cmap2.glyphIndexMap[c] = glyphIndex; - } - } - } - function parseCmapTable(data, start) { - var cmap2 = {}; - cmap2.version = parse.getUShort(data, start); - check.argument(cmap2.version === 0, "cmap table version should be 0."); - cmap2.numTables = parse.getUShort(data, start + 2); - var offset = -1; - for (var i = cmap2.numTables - 1; i >= 0; i -= 1) { - var platformId = parse.getUShort(data, start + 4 + i * 8); - var encodingId = parse.getUShort(data, start + 4 + i * 8 + 2); - if (platformId === 3 && (encodingId === 0 || encodingId === 1 || encodingId === 10) || platformId === 0 && (encodingId === 0 || encodingId === 1 || encodingId === 2 || encodingId === 3 || encodingId === 4)) { - offset = parse.getULong(data, start + 4 + i * 8 + 4); - break; - } - } - if (offset === -1) throw new Error("No valid cmap sub-tables found."); - var p = new parse.Parser(data, start + offset); - cmap2.format = p.parseUShort(); - if (cmap2.format === 12) parseCmapTableFormat12(cmap2, p); - else if (cmap2.format === 4) parseCmapTableFormat4(cmap2, p, data, start, offset); - else throw new Error("Only format 4 and 12 cmap tables are supported (found format " + cmap2.format + ")."); - return cmap2; - } - function addSegment(t, code, glyphIndex) { - t.segments.push({ - end: code, - start: code, - delta: -(code - glyphIndex), - offset: 0, - glyphIndex - }); - } - function addTerminatorSegment(t) { - t.segments.push({ - end: 65535, - start: 65535, - delta: 1, - offset: 0 - }); - } - function makeCmapTable(glyphs) { - var isPlan0Only = true; - var i; - for (i = glyphs.length - 1; i > 0; i -= 1) if (glyphs.get(i).unicode > 65535) { - console.log("Adding CMAP format 12 (needed!)"); - isPlan0Only = false; - break; - } - var cmapTable = [ - { - name: "version", - type: "USHORT", - value: 0 - }, - { - name: "numTables", - type: "USHORT", - value: isPlan0Only ? 1 : 2 - }, - { - name: "platformID", - type: "USHORT", - value: 3 - }, - { - name: "encodingID", - type: "USHORT", - value: 1 - }, - { - name: "offset", - type: "ULONG", - value: isPlan0Only ? 12 : 20 - } - ]; - if (!isPlan0Only) cmapTable = cmapTable.concat([ - { - name: "cmap12PlatformID", - type: "USHORT", - value: 3 - }, - { - name: "cmap12EncodingID", - type: "USHORT", - value: 10 - }, - { - name: "cmap12Offset", - type: "ULONG", - value: 0 - } - ]); - cmapTable = cmapTable.concat([ - { - name: "format", - type: "USHORT", - value: 4 - }, - { - name: "cmap4Length", - type: "USHORT", - value: 0 - }, - { - name: "language", - type: "USHORT", - value: 0 - }, - { - name: "segCountX2", - type: "USHORT", - value: 0 - }, - { - name: "searchRange", - type: "USHORT", - value: 0 - }, - { - name: "entrySelector", - type: "USHORT", - value: 0 - }, - { - name: "rangeShift", - type: "USHORT", - value: 0 - } - ]); - var t = new table.Table("cmap", cmapTable); - t.segments = []; - for (i = 0; i < glyphs.length; i += 1) { - var glyph = glyphs.get(i); - for (var j = 0; j < glyph.unicodes.length; j += 1) addSegment(t, glyph.unicodes[j], i); - t.segments = t.segments.sort(function(a, b) { - return a.start - b.start; - }); - } - addTerminatorSegment(t); - var segCount = t.segments.length; - var segCountToRemove = 0; - var endCounts = []; - var startCounts = []; - var idDeltas = []; - var idRangeOffsets = []; - var glyphIds = []; - var cmap12Groups = []; - for (i = 0; i < segCount; i += 1) { - var segment = t.segments[i]; - if (segment.end <= 65535 && segment.start <= 65535) { - endCounts = endCounts.concat({ - name: "end_" + i, - type: "USHORT", - value: segment.end - }); - startCounts = startCounts.concat({ - name: "start_" + i, - type: "USHORT", - value: segment.start - }); - idDeltas = idDeltas.concat({ - name: "idDelta_" + i, - type: "SHORT", - value: segment.delta - }); - idRangeOffsets = idRangeOffsets.concat({ - name: "idRangeOffset_" + i, - type: "USHORT", - value: segment.offset - }); - if (segment.glyphId !== void 0) glyphIds = glyphIds.concat({ - name: "glyph_" + i, - type: "USHORT", - value: segment.glyphId - }); - } else segCountToRemove += 1; - if (!isPlan0Only && segment.glyphIndex !== void 0) { - cmap12Groups = cmap12Groups.concat({ - name: "cmap12Start_" + i, - type: "ULONG", - value: segment.start - }); - cmap12Groups = cmap12Groups.concat({ - name: "cmap12End_" + i, - type: "ULONG", - value: segment.end - }); - cmap12Groups = cmap12Groups.concat({ - name: "cmap12Glyph_" + i, - type: "ULONG", - value: segment.glyphIndex - }); - } - } - t.segCountX2 = (segCount - segCountToRemove) * 2; - t.searchRange = Math.pow(2, Math.floor(Math.log(segCount - segCountToRemove) / Math.log(2))) * 2; - t.entrySelector = Math.log(t.searchRange / 2) / Math.log(2); - t.rangeShift = t.segCountX2 - t.searchRange; - t.fields = t.fields.concat(endCounts); - t.fields.push({ - name: "reservedPad", - type: "USHORT", - value: 0 - }); - t.fields = t.fields.concat(startCounts); - t.fields = t.fields.concat(idDeltas); - t.fields = t.fields.concat(idRangeOffsets); - t.fields = t.fields.concat(glyphIds); - t.cmap4Length = 14 + endCounts.length * 2 + 2 + startCounts.length * 2 + idDeltas.length * 2 + idRangeOffsets.length * 2 + glyphIds.length * 2; - if (!isPlan0Only) { - var cmap12Length = 16 + cmap12Groups.length * 4; - t.cmap12Offset = 20 + t.cmap4Length; - t.fields = t.fields.concat([ - { - name: "cmap12Format", - type: "USHORT", - value: 12 - }, - { - name: "cmap12Reserved", - type: "USHORT", - value: 0 - }, - { - name: "cmap12Length", - type: "ULONG", - value: cmap12Length - }, - { - name: "cmap12Language", - type: "ULONG", - value: 0 - }, - { - name: "cmap12nGroups", - type: "ULONG", - value: cmap12Groups.length / 3 - } - ]); - t.fields = t.fields.concat(cmap12Groups); - } - return t; - } - var cmap = { - parse: parseCmapTable, - make: makeCmapTable - }; - var cffStandardStrings = [ - ".notdef", - "space", - "exclam", - "quotedbl", - "numbersign", - "dollar", - "percent", - "ampersand", - "quoteright", - "parenleft", - "parenright", - "asterisk", - "plus", - "comma", - "hyphen", - "period", - "slash", - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - "colon", - "semicolon", - "less", - "equal", - "greater", - "question", - "at", - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - "N", - "O", - "P", - "Q", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z", - "bracketleft", - "backslash", - "bracketright", - "asciicircum", - "underscore", - "quoteleft", - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - "j", - "k", - "l", - "m", - "n", - "o", - "p", - "q", - "r", - "s", - "t", - "u", - "v", - "w", - "x", - "y", - "z", - "braceleft", - "bar", - "braceright", - "asciitilde", - "exclamdown", - "cent", - "sterling", - "fraction", - "yen", - "florin", - "section", - "currency", - "quotesingle", - "quotedblleft", - "guillemotleft", - "guilsinglleft", - "guilsinglright", - "fi", - "fl", - "endash", - "dagger", - "daggerdbl", - "periodcentered", - "paragraph", - "bullet", - "quotesinglbase", - "quotedblbase", - "quotedblright", - "guillemotright", - "ellipsis", - "perthousand", - "questiondown", - "grave", - "acute", - "circumflex", - "tilde", - "macron", - "breve", - "dotaccent", - "dieresis", - "ring", - "cedilla", - "hungarumlaut", - "ogonek", - "caron", - "emdash", - "AE", - "ordfeminine", - "Lslash", - "Oslash", - "OE", - "ordmasculine", - "ae", - "dotlessi", - "lslash", - "oslash", - "oe", - "germandbls", - "onesuperior", - "logicalnot", - "mu", - "trademark", - "Eth", - "onehalf", - "plusminus", - "Thorn", - "onequarter", - "divide", - "brokenbar", - "degree", - "thorn", - "threequarters", - "twosuperior", - "registered", - "minus", - "eth", - "multiply", - "threesuperior", - "copyright", - "Aacute", - "Acircumflex", - "Adieresis", - "Agrave", - "Aring", - "Atilde", - "Ccedilla", - "Eacute", - "Ecircumflex", - "Edieresis", - "Egrave", - "Iacute", - "Icircumflex", - "Idieresis", - "Igrave", - "Ntilde", - "Oacute", - "Ocircumflex", - "Odieresis", - "Ograve", - "Otilde", - "Scaron", - "Uacute", - "Ucircumflex", - "Udieresis", - "Ugrave", - "Yacute", - "Ydieresis", - "Zcaron", - "aacute", - "acircumflex", - "adieresis", - "agrave", - "aring", - "atilde", - "ccedilla", - "eacute", - "ecircumflex", - "edieresis", - "egrave", - "iacute", - "icircumflex", - "idieresis", - "igrave", - "ntilde", - "oacute", - "ocircumflex", - "odieresis", - "ograve", - "otilde", - "scaron", - "uacute", - "ucircumflex", - "udieresis", - "ugrave", - "yacute", - "ydieresis", - "zcaron", - "exclamsmall", - "Hungarumlautsmall", - "dollaroldstyle", - "dollarsuperior", - "ampersandsmall", - "Acutesmall", - "parenleftsuperior", - "parenrightsuperior", - "266 ff", - "onedotenleader", - "zerooldstyle", - "oneoldstyle", - "twooldstyle", - "threeoldstyle", - "fouroldstyle", - "fiveoldstyle", - "sixoldstyle", - "sevenoldstyle", - "eightoldstyle", - "nineoldstyle", - "commasuperior", - "threequartersemdash", - "periodsuperior", - "questionsmall", - "asuperior", - "bsuperior", - "centsuperior", - "dsuperior", - "esuperior", - "isuperior", - "lsuperior", - "msuperior", - "nsuperior", - "osuperior", - "rsuperior", - "ssuperior", - "tsuperior", - "ff", - "ffi", - "ffl", - "parenleftinferior", - "parenrightinferior", - "Circumflexsmall", - "hyphensuperior", - "Gravesmall", - "Asmall", - "Bsmall", - "Csmall", - "Dsmall", - "Esmall", - "Fsmall", - "Gsmall", - "Hsmall", - "Ismall", - "Jsmall", - "Ksmall", - "Lsmall", - "Msmall", - "Nsmall", - "Osmall", - "Psmall", - "Qsmall", - "Rsmall", - "Ssmall", - "Tsmall", - "Usmall", - "Vsmall", - "Wsmall", - "Xsmall", - "Ysmall", - "Zsmall", - "colonmonetary", - "onefitted", - "rupiah", - "Tildesmall", - "exclamdownsmall", - "centoldstyle", - "Lslashsmall", - "Scaronsmall", - "Zcaronsmall", - "Dieresissmall", - "Brevesmall", - "Caronsmall", - "Dotaccentsmall", - "Macronsmall", - "figuredash", - "hypheninferior", - "Ogoneksmall", - "Ringsmall", - "Cedillasmall", - "questiondownsmall", - "oneeighth", - "threeeighths", - "fiveeighths", - "seveneighths", - "onethird", - "twothirds", - "zerosuperior", - "foursuperior", - "fivesuperior", - "sixsuperior", - "sevensuperior", - "eightsuperior", - "ninesuperior", - "zeroinferior", - "oneinferior", - "twoinferior", - "threeinferior", - "fourinferior", - "fiveinferior", - "sixinferior", - "seveninferior", - "eightinferior", - "nineinferior", - "centinferior", - "dollarinferior", - "periodinferior", - "commainferior", - "Agravesmall", - "Aacutesmall", - "Acircumflexsmall", - "Atildesmall", - "Adieresissmall", - "Aringsmall", - "AEsmall", - "Ccedillasmall", - "Egravesmall", - "Eacutesmall", - "Ecircumflexsmall", - "Edieresissmall", - "Igravesmall", - "Iacutesmall", - "Icircumflexsmall", - "Idieresissmall", - "Ethsmall", - "Ntildesmall", - "Ogravesmall", - "Oacutesmall", - "Ocircumflexsmall", - "Otildesmall", - "Odieresissmall", - "OEsmall", - "Oslashsmall", - "Ugravesmall", - "Uacutesmall", - "Ucircumflexsmall", - "Udieresissmall", - "Yacutesmall", - "Thornsmall", - "Ydieresissmall", - "001.000", - "001.001", - "001.002", - "001.003", - "Black", - "Bold", - "Book", - "Light", - "Medium", - "Regular", - "Roman", - "Semibold" - ]; - var cffStandardEncoding = [ - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "space", - "exclam", - "quotedbl", - "numbersign", - "dollar", - "percent", - "ampersand", - "quoteright", - "parenleft", - "parenright", - "asterisk", - "plus", - "comma", - "hyphen", - "period", - "slash", - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - "colon", - "semicolon", - "less", - "equal", - "greater", - "question", - "at", - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - "N", - "O", - "P", - "Q", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z", - "bracketleft", - "backslash", - "bracketright", - "asciicircum", - "underscore", - "quoteleft", - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - "j", - "k", - "l", - "m", - "n", - "o", - "p", - "q", - "r", - "s", - "t", - "u", - "v", - "w", - "x", - "y", - "z", - "braceleft", - "bar", - "braceright", - "asciitilde", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "exclamdown", - "cent", - "sterling", - "fraction", - "yen", - "florin", - "section", - "currency", - "quotesingle", - "quotedblleft", - "guillemotleft", - "guilsinglleft", - "guilsinglright", - "fi", - "fl", - "", - "endash", - "dagger", - "daggerdbl", - "periodcentered", - "", - "paragraph", - "bullet", - "quotesinglbase", - "quotedblbase", - "quotedblright", - "guillemotright", - "ellipsis", - "perthousand", - "", - "questiondown", - "", - "grave", - "acute", - "circumflex", - "tilde", - "macron", - "breve", - "dotaccent", - "dieresis", - "", - "ring", - "cedilla", - "", - "hungarumlaut", - "ogonek", - "caron", - "emdash", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "AE", - "", - "ordfeminine", - "", - "", - "", - "", - "Lslash", - "Oslash", - "OE", - "ordmasculine", - "", - "", - "", - "", - "", - "ae", - "", - "", - "", - "dotlessi", - "", - "", - "lslash", - "oslash", - "oe", - "germandbls" - ]; - var cffExpertEncoding = [ - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "space", - "exclamsmall", - "Hungarumlautsmall", - "", - "dollaroldstyle", - "dollarsuperior", - "ampersandsmall", - "Acutesmall", - "parenleftsuperior", - "parenrightsuperior", - "twodotenleader", - "onedotenleader", - "comma", - "hyphen", - "period", - "fraction", - "zerooldstyle", - "oneoldstyle", - "twooldstyle", - "threeoldstyle", - "fouroldstyle", - "fiveoldstyle", - "sixoldstyle", - "sevenoldstyle", - "eightoldstyle", - "nineoldstyle", - "colon", - "semicolon", - "commasuperior", - "threequartersemdash", - "periodsuperior", - "questionsmall", - "", - "asuperior", - "bsuperior", - "centsuperior", - "dsuperior", - "esuperior", - "", - "", - "isuperior", - "", - "", - "lsuperior", - "msuperior", - "nsuperior", - "osuperior", - "", - "", - "rsuperior", - "ssuperior", - "tsuperior", - "", - "ff", - "fi", - "fl", - "ffi", - "ffl", - "parenleftinferior", - "", - "parenrightinferior", - "Circumflexsmall", - "hyphensuperior", - "Gravesmall", - "Asmall", - "Bsmall", - "Csmall", - "Dsmall", - "Esmall", - "Fsmall", - "Gsmall", - "Hsmall", - "Ismall", - "Jsmall", - "Ksmall", - "Lsmall", - "Msmall", - "Nsmall", - "Osmall", - "Psmall", - "Qsmall", - "Rsmall", - "Ssmall", - "Tsmall", - "Usmall", - "Vsmall", - "Wsmall", - "Xsmall", - "Ysmall", - "Zsmall", - "colonmonetary", - "onefitted", - "rupiah", - "Tildesmall", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "", - "exclamdownsmall", - "centoldstyle", - "Lslashsmall", - "", - "", - "Scaronsmall", - "Zcaronsmall", - "Dieresissmall", - "Brevesmall", - "Caronsmall", - "", - "Dotaccentsmall", - "", - "", - "Macronsmall", - "", - "", - "figuredash", - "hypheninferior", - "", - "", - "Ogoneksmall", - "Ringsmall", - "Cedillasmall", - "", - "", - "", - "onequarter", - "onehalf", - "threequarters", - "questiondownsmall", - "oneeighth", - "threeeighths", - "fiveeighths", - "seveneighths", - "onethird", - "twothirds", - "", - "", - "zerosuperior", - "onesuperior", - "twosuperior", - "threesuperior", - "foursuperior", - "fivesuperior", - "sixsuperior", - "sevensuperior", - "eightsuperior", - "ninesuperior", - "zeroinferior", - "oneinferior", - "twoinferior", - "threeinferior", - "fourinferior", - "fiveinferior", - "sixinferior", - "seveninferior", - "eightinferior", - "nineinferior", - "centinferior", - "dollarinferior", - "periodinferior", - "commainferior", - "Agravesmall", - "Aacutesmall", - "Acircumflexsmall", - "Atildesmall", - "Adieresissmall", - "Aringsmall", - "AEsmall", - "Ccedillasmall", - "Egravesmall", - "Eacutesmall", - "Ecircumflexsmall", - "Edieresissmall", - "Igravesmall", - "Iacutesmall", - "Icircumflexsmall", - "Idieresissmall", - "Ethsmall", - "Ntildesmall", - "Ogravesmall", - "Oacutesmall", - "Ocircumflexsmall", - "Otildesmall", - "Odieresissmall", - "OEsmall", - "Oslashsmall", - "Ugravesmall", - "Uacutesmall", - "Ucircumflexsmall", - "Udieresissmall", - "Yacutesmall", - "Thornsmall", - "Ydieresissmall" - ]; - var standardNames = [ - ".notdef", - ".null", - "nonmarkingreturn", - "space", - "exclam", - "quotedbl", - "numbersign", - "dollar", - "percent", - "ampersand", - "quotesingle", - "parenleft", - "parenright", - "asterisk", - "plus", - "comma", - "hyphen", - "period", - "slash", - "zero", - "one", - "two", - "three", - "four", - "five", - "six", - "seven", - "eight", - "nine", - "colon", - "semicolon", - "less", - "equal", - "greater", - "question", - "at", - "A", - "B", - "C", - "D", - "E", - "F", - "G", - "H", - "I", - "J", - "K", - "L", - "M", - "N", - "O", - "P", - "Q", - "R", - "S", - "T", - "U", - "V", - "W", - "X", - "Y", - "Z", - "bracketleft", - "backslash", - "bracketright", - "asciicircum", - "underscore", - "grave", - "a", - "b", - "c", - "d", - "e", - "f", - "g", - "h", - "i", - "j", - "k", - "l", - "m", - "n", - "o", - "p", - "q", - "r", - "s", - "t", - "u", - "v", - "w", - "x", - "y", - "z", - "braceleft", - "bar", - "braceright", - "asciitilde", - "Adieresis", - "Aring", - "Ccedilla", - "Eacute", - "Ntilde", - "Odieresis", - "Udieresis", - "aacute", - "agrave", - "acircumflex", - "adieresis", - "atilde", - "aring", - "ccedilla", - "eacute", - "egrave", - "ecircumflex", - "edieresis", - "iacute", - "igrave", - "icircumflex", - "idieresis", - "ntilde", - "oacute", - "ograve", - "ocircumflex", - "odieresis", - "otilde", - "uacute", - "ugrave", - "ucircumflex", - "udieresis", - "dagger", - "degree", - "cent", - "sterling", - "section", - "bullet", - "paragraph", - "germandbls", - "registered", - "copyright", - "trademark", - "acute", - "dieresis", - "notequal", - "AE", - "Oslash", - "infinity", - "plusminus", - "lessequal", - "greaterequal", - "yen", - "mu", - "partialdiff", - "summation", - "product", - "pi", - "integral", - "ordfeminine", - "ordmasculine", - "Omega", - "ae", - "oslash", - "questiondown", - "exclamdown", - "logicalnot", - "radical", - "florin", - "approxequal", - "Delta", - "guillemotleft", - "guillemotright", - "ellipsis", - "nonbreakingspace", - "Agrave", - "Atilde", - "Otilde", - "OE", - "oe", - "endash", - "emdash", - "quotedblleft", - "quotedblright", - "quoteleft", - "quoteright", - "divide", - "lozenge", - "ydieresis", - "Ydieresis", - "fraction", - "currency", - "guilsinglleft", - "guilsinglright", - "fi", - "fl", - "daggerdbl", - "periodcentered", - "quotesinglbase", - "quotedblbase", - "perthousand", - "Acircumflex", - "Ecircumflex", - "Aacute", - "Edieresis", - "Egrave", - "Iacute", - "Icircumflex", - "Idieresis", - "Igrave", - "Oacute", - "Ocircumflex", - "apple", - "Ograve", - "Uacute", - "Ucircumflex", - "Ugrave", - "dotlessi", - "circumflex", - "tilde", - "macron", - "breve", - "dotaccent", - "ring", - "cedilla", - "hungarumlaut", - "ogonek", - "caron", - "Lslash", - "lslash", - "Scaron", - "scaron", - "Zcaron", - "zcaron", - "brokenbar", - "Eth", - "eth", - "Yacute", - "yacute", - "Thorn", - "thorn", - "minus", - "multiply", - "onesuperior", - "twosuperior", - "threesuperior", - "onehalf", - "onequarter", - "threequarters", - "franc", - "Gbreve", - "gbreve", - "Idotaccent", - "Scedilla", - "scedilla", - "Cacute", - "cacute", - "Ccaron", - "ccaron", - "dcroat" - ]; - function DefaultEncoding(font) { - this.font = font; - } - DefaultEncoding.prototype.charToGlyphIndex = function(c) { - var code = c.codePointAt(0); - var glyphs = this.font.glyphs; - if (glyphs) for (var i = 0; i < glyphs.length; i += 1) { - var glyph = glyphs.get(i); - for (var j = 0; j < glyph.unicodes.length; j += 1) if (glyph.unicodes[j] === code) return i; - } - return null; - }; - function CmapEncoding(cmap2) { - this.cmap = cmap2; - } - CmapEncoding.prototype.charToGlyphIndex = function(c) { - return this.cmap.glyphIndexMap[c.codePointAt(0)] || 0; - }; - function CffEncoding(encoding, charset) { - this.encoding = encoding; - this.charset = charset; - } - CffEncoding.prototype.charToGlyphIndex = function(s) { - var code = s.codePointAt(0); - var charName = this.encoding[code]; - return this.charset.indexOf(charName); - }; - function GlyphNames(post2) { - switch (post2.version) { - case 1: - this.names = standardNames.slice(); - break; - case 2: - this.names = new Array(post2.numberOfGlyphs); - for (var i = 0; i < post2.numberOfGlyphs; i++) if (post2.glyphNameIndex[i] < standardNames.length) this.names[i] = standardNames[post2.glyphNameIndex[i]]; - else this.names[i] = post2.names[post2.glyphNameIndex[i] - standardNames.length]; - break; - case 2.5: - this.names = new Array(post2.numberOfGlyphs); - for (var i$1 = 0; i$1 < post2.numberOfGlyphs; i$1++) this.names[i$1] = standardNames[i$1 + post2.glyphNameIndex[i$1]]; - break; - case 3: - this.names = []; - break; - default: - this.names = []; - break; - } - } - GlyphNames.prototype.nameToGlyphIndex = function(name) { - return this.names.indexOf(name); - }; - GlyphNames.prototype.glyphIndexToName = function(gid) { - return this.names[gid]; - }; - function addGlyphNamesAll(font) { - var glyph; - var glyphIndexMap = font.tables.cmap.glyphIndexMap; - var charCodes = Object.keys(glyphIndexMap); - for (var i = 0; i < charCodes.length; i += 1) { - var c = charCodes[i]; - var glyphIndex = glyphIndexMap[c]; - glyph = font.glyphs.get(glyphIndex); - glyph.addUnicode(parseInt(c)); - } - for (var i$1 = 0; i$1 < font.glyphs.length; i$1 += 1) { - glyph = font.glyphs.get(i$1); - if (font.cffEncoding) if (font.isCIDFont) glyph.name = "gid" + i$1; - else glyph.name = font.cffEncoding.charset[i$1]; - else if (font.glyphNames.names) glyph.name = font.glyphNames.glyphIndexToName(i$1); - } - } - function addGlyphNamesToUnicodeMap(font) { - font._IndexToUnicodeMap = {}; - var glyphIndexMap = font.tables.cmap.glyphIndexMap; - var charCodes = Object.keys(glyphIndexMap); - for (var i = 0; i < charCodes.length; i += 1) { - var c = charCodes[i]; - var glyphIndex = glyphIndexMap[c]; - if (font._IndexToUnicodeMap[glyphIndex] === void 0) font._IndexToUnicodeMap[glyphIndex] = { unicodes: [parseInt(c)] }; - else font._IndexToUnicodeMap[glyphIndex].unicodes.push(parseInt(c)); - } - } - function addGlyphNames(font, opt) { - if (opt.lowMemory) addGlyphNamesToUnicodeMap(font); - else addGlyphNamesAll(font); - } - function line(ctx, x1, y1, x2, y2) { - ctx.beginPath(); - ctx.moveTo(x1, y1); - ctx.lineTo(x2, y2); - ctx.stroke(); - } - var draw = { line }; - function getPathDefinition(glyph, path) { - var _path = path || new Path(); - return { - configurable: true, - get: function() { - if (typeof _path === "function") _path = _path(); - return _path; - }, - set: function(p) { - _path = p; - } - }; - } - function Glyph(options) { - this.bindConstructorValues(options); - } - Glyph.prototype.bindConstructorValues = function(options) { - this.index = options.index || 0; - this.name = options.name || null; - this.unicode = options.unicode || void 0; - this.unicodes = options.unicodes || options.unicode !== void 0 ? [options.unicode] : []; - if ("xMin" in options) this.xMin = options.xMin; - if ("yMin" in options) this.yMin = options.yMin; - if ("xMax" in options) this.xMax = options.xMax; - if ("yMax" in options) this.yMax = options.yMax; - if ("advanceWidth" in options) this.advanceWidth = options.advanceWidth; - Object.defineProperty(this, "path", getPathDefinition(this, options.path)); - }; - Glyph.prototype.addUnicode = function(unicode) { - if (this.unicodes.length === 0) this.unicode = unicode; - this.unicodes.push(unicode); - }; - Glyph.prototype.getBoundingBox = function() { - return this.path.getBoundingBox(); - }; - Glyph.prototype.getPath = function(x, y, fontSize, options, font) { - x = x !== void 0 ? x : 0; - y = y !== void 0 ? y : 0; - fontSize = fontSize !== void 0 ? fontSize : 72; - var commands; - var hPoints; - if (!options) options = {}; - var xScale = options.xScale; - var yScale = options.yScale; - if (options.hinting && font && font.hinting) hPoints = this.path && font.hinting.exec(this, fontSize); - if (hPoints) { - commands = font.hinting.getCommands(hPoints); - x = Math.round(x); - y = Math.round(y); - xScale = yScale = 1; - } else { - commands = this.path.commands; - var scale = 1 / (this.path.unitsPerEm || 1e3) * fontSize; - if (xScale === void 0) xScale = scale; - if (yScale === void 0) yScale = scale; - } - var p = new Path(); - for (var i = 0; i < commands.length; i += 1) { - var cmd = commands[i]; - if (cmd.type === "M") p.moveTo(x + cmd.x * xScale, y + -cmd.y * yScale); - else if (cmd.type === "L") p.lineTo(x + cmd.x * xScale, y + -cmd.y * yScale); - else if (cmd.type === "Q") p.quadraticCurveTo(x + cmd.x1 * xScale, y + -cmd.y1 * yScale, x + cmd.x * xScale, y + -cmd.y * yScale); - else if (cmd.type === "C") p.curveTo(x + cmd.x1 * xScale, y + -cmd.y1 * yScale, x + cmd.x2 * xScale, y + -cmd.y2 * yScale, x + cmd.x * xScale, y + -cmd.y * yScale); - else if (cmd.type === "Z") p.closePath(); - } - return p; - }; - Glyph.prototype.getContours = function() { - if (this.points === void 0) return []; - var contours = []; - var currentContour = []; - for (var i = 0; i < this.points.length; i += 1) { - var pt = this.points[i]; - currentContour.push(pt); - if (pt.lastPointOfContour) { - contours.push(currentContour); - currentContour = []; - } - } - check.argument(currentContour.length === 0, "There are still points left in the current contour."); - return contours; - }; - Glyph.prototype.getMetrics = function() { - var commands = this.path.commands; - var xCoords = []; - var yCoords = []; - for (var i = 0; i < commands.length; i += 1) { - var cmd = commands[i]; - if (cmd.type !== "Z") { - xCoords.push(cmd.x); - yCoords.push(cmd.y); - } - if (cmd.type === "Q" || cmd.type === "C") { - xCoords.push(cmd.x1); - yCoords.push(cmd.y1); - } - if (cmd.type === "C") { - xCoords.push(cmd.x2); - yCoords.push(cmd.y2); - } - } - var metrics = { - xMin: Math.min.apply(null, xCoords), - yMin: Math.min.apply(null, yCoords), - xMax: Math.max.apply(null, xCoords), - yMax: Math.max.apply(null, yCoords), - leftSideBearing: this.leftSideBearing - }; - if (!isFinite(metrics.xMin)) metrics.xMin = 0; - if (!isFinite(metrics.xMax)) metrics.xMax = this.advanceWidth; - if (!isFinite(metrics.yMin)) metrics.yMin = 0; - if (!isFinite(metrics.yMax)) metrics.yMax = 0; - metrics.rightSideBearing = this.advanceWidth - metrics.leftSideBearing - (metrics.xMax - metrics.xMin); - return metrics; - }; - Glyph.prototype.draw = function(ctx, x, y, fontSize, options) { - this.getPath(x, y, fontSize, options).draw(ctx); - }; - Glyph.prototype.drawPoints = function(ctx, x, y, fontSize) { - function drawCircles(l, x2, y2, scale2) { - ctx.beginPath(); - for (var j = 0; j < l.length; j += 1) { - ctx.moveTo(x2 + l[j].x * scale2, y2 + l[j].y * scale2); - ctx.arc(x2 + l[j].x * scale2, y2 + l[j].y * scale2, 2, 0, Math.PI * 2, false); - } - ctx.closePath(); - ctx.fill(); - } - x = x !== void 0 ? x : 0; - y = y !== void 0 ? y : 0; - fontSize = fontSize !== void 0 ? fontSize : 24; - var scale = 1 / this.path.unitsPerEm * fontSize; - var blueCircles = []; - var redCircles = []; - var path = this.path; - for (var i = 0; i < path.commands.length; i += 1) { - var cmd = path.commands[i]; - if (cmd.x !== void 0) blueCircles.push({ - x: cmd.x, - y: -cmd.y - }); - if (cmd.x1 !== void 0) redCircles.push({ - x: cmd.x1, - y: -cmd.y1 - }); - if (cmd.x2 !== void 0) redCircles.push({ - x: cmd.x2, - y: -cmd.y2 - }); - } - ctx.fillStyle = "blue"; - drawCircles(blueCircles, x, y, scale); - ctx.fillStyle = "red"; - drawCircles(redCircles, x, y, scale); - }; - Glyph.prototype.drawMetrics = function(ctx, x, y, fontSize) { - var scale; - x = x !== void 0 ? x : 0; - y = y !== void 0 ? y : 0; - fontSize = fontSize !== void 0 ? fontSize : 24; - scale = 1 / this.path.unitsPerEm * fontSize; - ctx.lineWidth = 1; - ctx.strokeStyle = "black"; - draw.line(ctx, x, -1e4, x, 1e4); - draw.line(ctx, -1e4, y, 1e4, y); - var xMin = this.xMin || 0; - var yMin = this.yMin || 0; - var xMax = this.xMax || 0; - var yMax = this.yMax || 0; - var advanceWidth = this.advanceWidth || 0; - ctx.strokeStyle = "blue"; - draw.line(ctx, x + xMin * scale, -1e4, x + xMin * scale, 1e4); - draw.line(ctx, x + xMax * scale, -1e4, x + xMax * scale, 1e4); - draw.line(ctx, -1e4, y + -yMin * scale, 1e4, y + -yMin * scale); - draw.line(ctx, -1e4, y + -yMax * scale, 1e4, y + -yMax * scale); - ctx.strokeStyle = "green"; - draw.line(ctx, x + advanceWidth * scale, -1e4, x + advanceWidth * scale, 1e4); - }; - function defineDependentProperty(glyph, externalName, internalName) { - Object.defineProperty(glyph, externalName, { - get: function() { - glyph.path; - return glyph[internalName]; - }, - set: function(newValue) { - glyph[internalName] = newValue; - }, - enumerable: true, - configurable: true - }); - } - function GlyphSet(font, glyphs) { - this.font = font; - this.glyphs = {}; - if (Array.isArray(glyphs)) for (var i = 0; i < glyphs.length; i++) { - var glyph = glyphs[i]; - glyph.path.unitsPerEm = font.unitsPerEm; - this.glyphs[i] = glyph; - } - this.length = glyphs && glyphs.length || 0; - } - GlyphSet.prototype.get = function(index) { - if (this.glyphs[index] === void 0) { - this.font._push(index); - if (typeof this.glyphs[index] === "function") this.glyphs[index] = this.glyphs[index](); - var glyph = this.glyphs[index]; - var unicodeObj = this.font._IndexToUnicodeMap[index]; - if (unicodeObj) for (var j = 0; j < unicodeObj.unicodes.length; j++) glyph.addUnicode(unicodeObj.unicodes[j]); - if (this.font.cffEncoding) if (this.font.isCIDFont) glyph.name = "gid" + index; - else glyph.name = this.font.cffEncoding.charset[index]; - else if (this.font.glyphNames.names) glyph.name = this.font.glyphNames.glyphIndexToName(index); - this.glyphs[index].advanceWidth = this.font._hmtxTableData[index].advanceWidth; - this.glyphs[index].leftSideBearing = this.font._hmtxTableData[index].leftSideBearing; - } else if (typeof this.glyphs[index] === "function") this.glyphs[index] = this.glyphs[index](); - return this.glyphs[index]; - }; - GlyphSet.prototype.push = function(index, loader) { - this.glyphs[index] = loader; - this.length++; - }; - function glyphLoader(font, index) { - return new Glyph({ - index, - font - }); - } - function ttfGlyphLoader(font, index, parseGlyph2, data, position, buildPath2) { - return function() { - var glyph = new Glyph({ - index, - font - }); - glyph.path = function() { - parseGlyph2(glyph, data, position); - var path = buildPath2(font.glyphs, glyph); - path.unitsPerEm = font.unitsPerEm; - return path; - }; - defineDependentProperty(glyph, "xMin", "_xMin"); - defineDependentProperty(glyph, "xMax", "_xMax"); - defineDependentProperty(glyph, "yMin", "_yMin"); - defineDependentProperty(glyph, "yMax", "_yMax"); - return glyph; - }; - } - function cffGlyphLoader(font, index, parseCFFCharstring2, charstring) { - return function() { - var glyph = new Glyph({ - index, - font - }); - glyph.path = function() { - var path = parseCFFCharstring2(font, glyph, charstring); - path.unitsPerEm = font.unitsPerEm; - return path; - }; - return glyph; - }; - } - var glyphset = { - GlyphSet, - glyphLoader, - ttfGlyphLoader, - cffGlyphLoader - }; - function equals(a, b) { - if (a === b) return true; - else if (Array.isArray(a) && Array.isArray(b)) { - if (a.length !== b.length) return false; - for (var i = 0; i < a.length; i += 1) if (!equals(a[i], b[i])) return false; - return true; - } else return false; - } - function calcCFFSubroutineBias(subrs) { - var bias; - if (subrs.length < 1240) bias = 107; - else if (subrs.length < 33900) bias = 1131; - else bias = 32768; - return bias; - } - function parseCFFIndex(data, start, conversionFn) { - var offsets = []; - var objects = []; - var count = parse.getCard16(data, start); - var objectOffset; - var endOffset; - if (count !== 0) { - var offsetSize = parse.getByte(data, start + 2); - objectOffset = start + (count + 1) * offsetSize + 2; - var pos = start + 3; - for (var i = 0; i < count + 1; i += 1) { - offsets.push(parse.getOffset(data, pos, offsetSize)); - pos += offsetSize; - } - endOffset = objectOffset + offsets[count]; - } else endOffset = start + 2; - for (var i$1 = 0; i$1 < offsets.length - 1; i$1 += 1) { - var value = parse.getBytes(data, objectOffset + offsets[i$1], objectOffset + offsets[i$1 + 1]); - if (conversionFn) value = conversionFn(value); - objects.push(value); - } - return { - objects, - startOffset: start, - endOffset - }; - } - function parseCFFIndexLowMemory(data, start) { - var offsets = []; - var count = parse.getCard16(data, start); - var objectOffset; - var endOffset; - if (count !== 0) { - var offsetSize = parse.getByte(data, start + 2); - objectOffset = start + (count + 1) * offsetSize + 2; - var pos = start + 3; - for (var i = 0; i < count + 1; i += 1) { - offsets.push(parse.getOffset(data, pos, offsetSize)); - pos += offsetSize; - } - endOffset = objectOffset + offsets[count]; - } else endOffset = start + 2; - return { - offsets, - startOffset: start, - endOffset - }; - } - function getCffIndexObject(i, offsets, data, start, conversionFn) { - var count = parse.getCard16(data, start); - var objectOffset = 0; - if (count !== 0) { - var offsetSize = parse.getByte(data, start + 2); - objectOffset = start + (count + 1) * offsetSize + 2; - } - var value = parse.getBytes(data, objectOffset + offsets[i], objectOffset + offsets[i + 1]); - if (conversionFn) value = conversionFn(value); - return value; - } - function parseFloatOperand(parser) { - var s = ""; - var eof = 15; - var lookup = [ - "0", - "1", - "2", - "3", - "4", - "5", - "6", - "7", - "8", - "9", - ".", - "E", - "E-", - null, - "-" - ]; - while (true) { - var b = parser.parseByte(); - var n1 = b >> 4; - var n2 = b & 15; - if (n1 === eof) break; - s += lookup[n1]; - if (n2 === eof) break; - s += lookup[n2]; - } - return parseFloat(s); - } - function parseOperand(parser, b0) { - var b1; - var b2; - var b3; - var b4; - if (b0 === 28) { - b1 = parser.parseByte(); - b2 = parser.parseByte(); - return b1 << 8 | b2; - } - if (b0 === 29) { - b1 = parser.parseByte(); - b2 = parser.parseByte(); - b3 = parser.parseByte(); - b4 = parser.parseByte(); - return b1 << 24 | b2 << 16 | b3 << 8 | b4; - } - if (b0 === 30) return parseFloatOperand(parser); - if (b0 >= 32 && b0 <= 246) return b0 - 139; - if (b0 >= 247 && b0 <= 250) { - b1 = parser.parseByte(); - return (b0 - 247) * 256 + b1 + 108; - } - if (b0 >= 251 && b0 <= 254) { - b1 = parser.parseByte(); - return -(b0 - 251) * 256 - b1 - 108; - } - throw new Error("Invalid b0 " + b0); - } - function entriesToObject(entries) { - var o = {}; - for (var i = 0; i < entries.length; i += 1) { - var key = entries[i][0]; - var values = entries[i][1]; - var value = void 0; - if (values.length === 1) value = values[0]; - else value = values; - if (o.hasOwnProperty(key) && !isNaN(o[key])) throw new Error("Object " + o + " already has key " + key); - o[key] = value; - } - return o; - } - function parseCFFDict(data, start, size) { - start = start !== void 0 ? start : 0; - var parser = new parse.Parser(data, start); - var entries = []; - var operands = []; - size = size !== void 0 ? size : data.length; - while (parser.relativeOffset < size) { - var op = parser.parseByte(); - if (op <= 21) { - if (op === 12) op = 1200 + parser.parseByte(); - entries.push([op, operands]); - operands = []; - } else operands.push(parseOperand(parser, op)); - } - return entriesToObject(entries); - } - function getCFFString(strings, index) { - if (index <= 390) index = cffStandardStrings[index]; - else index = strings[index - 391]; - return index; - } - function interpretDict(dict, meta2, strings) { - var newDict = {}; - var value; - for (var i = 0; i < meta2.length; i += 1) { - var m = meta2[i]; - if (Array.isArray(m.type)) { - var values = []; - values.length = m.type.length; - for (var j = 0; j < m.type.length; j++) { - value = dict[m.op] !== void 0 ? dict[m.op][j] : void 0; - if (value === void 0) value = m.value !== void 0 && m.value[j] !== void 0 ? m.value[j] : null; - if (m.type[j] === "SID") value = getCFFString(strings, value); - values[j] = value; - } - newDict[m.name] = values; - } else { - value = dict[m.op]; - if (value === void 0) value = m.value !== void 0 ? m.value : null; - if (m.type === "SID") value = getCFFString(strings, value); - newDict[m.name] = value; - } - } - return newDict; - } - function parseCFFHeader(data, start) { - var header = {}; - header.formatMajor = parse.getCard8(data, start); - header.formatMinor = parse.getCard8(data, start + 1); - header.size = parse.getCard8(data, start + 2); - header.offsetSize = parse.getCard8(data, start + 3); - header.startOffset = start; - header.endOffset = start + 4; - return header; - } - var TOP_DICT_META = [ - { - name: "version", - op: 0, - type: "SID" - }, - { - name: "notice", - op: 1, - type: "SID" - }, - { - name: "copyright", - op: 1200, - type: "SID" - }, - { - name: "fullName", - op: 2, - type: "SID" - }, - { - name: "familyName", - op: 3, - type: "SID" - }, - { - name: "weight", - op: 4, - type: "SID" - }, - { - name: "isFixedPitch", - op: 1201, - type: "number", - value: 0 - }, - { - name: "italicAngle", - op: 1202, - type: "number", - value: 0 - }, - { - name: "underlinePosition", - op: 1203, - type: "number", - value: -100 - }, - { - name: "underlineThickness", - op: 1204, - type: "number", - value: 50 - }, - { - name: "paintType", - op: 1205, - type: "number", - value: 0 - }, - { - name: "charstringType", - op: 1206, - type: "number", - value: 2 - }, - { - name: "fontMatrix", - op: 1207, - type: [ - "real", - "real", - "real", - "real", - "real", - "real" - ], - value: [ - .001, - 0, - 0, - .001, - 0, - 0 - ] - }, - { - name: "uniqueId", - op: 13, - type: "number" - }, - { - name: "fontBBox", - op: 5, - type: [ - "number", - "number", - "number", - "number" - ], - value: [ - 0, - 0, - 0, - 0 - ] - }, - { - name: "strokeWidth", - op: 1208, - type: "number", - value: 0 - }, - { - name: "xuid", - op: 14, - type: [], - value: null - }, - { - name: "charset", - op: 15, - type: "offset", - value: 0 - }, - { - name: "encoding", - op: 16, - type: "offset", - value: 0 - }, - { - name: "charStrings", - op: 17, - type: "offset", - value: 0 - }, - { - name: "private", - op: 18, - type: ["number", "offset"], - value: [0, 0] - }, - { - name: "ros", - op: 1230, - type: [ - "SID", - "SID", - "number" - ] - }, - { - name: "cidFontVersion", - op: 1231, - type: "number", - value: 0 - }, - { - name: "cidFontRevision", - op: 1232, - type: "number", - value: 0 - }, - { - name: "cidFontType", - op: 1233, - type: "number", - value: 0 - }, - { - name: "cidCount", - op: 1234, - type: "number", - value: 8720 - }, - { - name: "uidBase", - op: 1235, - type: "number" - }, - { - name: "fdArray", - op: 1236, - type: "offset" - }, - { - name: "fdSelect", - op: 1237, - type: "offset" - }, - { - name: "fontName", - op: 1238, - type: "SID" - } - ]; - var PRIVATE_DICT_META = [ - { - name: "subrs", - op: 19, - type: "offset", - value: 0 - }, - { - name: "defaultWidthX", - op: 20, - type: "number", - value: 0 - }, - { - name: "nominalWidthX", - op: 21, - type: "number", - value: 0 - } - ]; - function parseCFFTopDict(data, strings) { - return interpretDict(parseCFFDict(data, 0, data.byteLength), TOP_DICT_META, strings); - } - function parseCFFPrivateDict(data, start, size, strings) { - return interpretDict(parseCFFDict(data, start, size), PRIVATE_DICT_META, strings); - } - function gatherCFFTopDicts(data, start, cffIndex, strings) { - var topDictArray = []; - for (var iTopDict = 0; iTopDict < cffIndex.length; iTopDict += 1) { - var topDict = parseCFFTopDict(new DataView(new Uint8Array(cffIndex[iTopDict]).buffer), strings); - topDict._subrs = []; - topDict._subrsBias = 0; - topDict._defaultWidthX = 0; - topDict._nominalWidthX = 0; - var privateSize = topDict.private[0]; - var privateOffset = topDict.private[1]; - if (privateSize !== 0 && privateOffset !== 0) { - var privateDict = parseCFFPrivateDict(data, privateOffset + start, privateSize, strings); - topDict._defaultWidthX = privateDict.defaultWidthX; - topDict._nominalWidthX = privateDict.nominalWidthX; - if (privateDict.subrs !== 0) { - topDict._subrs = parseCFFIndex(data, privateOffset + privateDict.subrs + start).objects; - topDict._subrsBias = calcCFFSubroutineBias(topDict._subrs); - } - topDict._privateDict = privateDict; - } - topDictArray.push(topDict); - } - return topDictArray; - } - function parseCFFCharset(data, start, nGlyphs, strings) { - var sid; - var count; - var parser = new parse.Parser(data, start); - nGlyphs -= 1; - var charset = [".notdef"]; - var format = parser.parseCard8(); - if (format === 0) for (var i = 0; i < nGlyphs; i += 1) { - sid = parser.parseSID(); - charset.push(getCFFString(strings, sid)); - } - else if (format === 1) while (charset.length <= nGlyphs) { - sid = parser.parseSID(); - count = parser.parseCard8(); - for (var i$1 = 0; i$1 <= count; i$1 += 1) { - charset.push(getCFFString(strings, sid)); - sid += 1; - } - } - else if (format === 2) while (charset.length <= nGlyphs) { - sid = parser.parseSID(); - count = parser.parseCard16(); - for (var i$2 = 0; i$2 <= count; i$2 += 1) { - charset.push(getCFFString(strings, sid)); - sid += 1; - } - } - else throw new Error("Unknown charset format " + format); - return charset; - } - function parseCFFEncoding(data, start, charset) { - var code; - var enc = {}; - var parser = new parse.Parser(data, start); - var format = parser.parseCard8(); - if (format === 0) { - var nCodes = parser.parseCard8(); - for (var i = 0; i < nCodes; i += 1) { - code = parser.parseCard8(); - enc[code] = i; - } - } else if (format === 1) { - var nRanges = parser.parseCard8(); - code = 1; - for (var i$1 = 0; i$1 < nRanges; i$1 += 1) { - var first = parser.parseCard8(); - var nLeft = parser.parseCard8(); - for (var j = first; j <= first + nLeft; j += 1) { - enc[j] = code; - code += 1; - } - } - } else throw new Error("Unknown encoding format " + format); - return new CffEncoding(enc, charset); - } - function parseCFFCharstring(font, glyph, code) { - var c1x; - var c1y; - var c2x; - var c2y; - var p = new Path(); - var stack = []; - var nStems = 0; - var haveWidth = false; - var open = false; - var x = 0; - var y = 0; - var subrs; - var subrsBias; - var defaultWidthX; - var nominalWidthX; - if (font.isCIDFont) { - var fdIndex = font.tables.cff.topDict._fdSelect[glyph.index]; - var fdDict = font.tables.cff.topDict._fdArray[fdIndex]; - subrs = fdDict._subrs; - subrsBias = fdDict._subrsBias; - defaultWidthX = fdDict._defaultWidthX; - nominalWidthX = fdDict._nominalWidthX; - } else { - subrs = font.tables.cff.topDict._subrs; - subrsBias = font.tables.cff.topDict._subrsBias; - defaultWidthX = font.tables.cff.topDict._defaultWidthX; - nominalWidthX = font.tables.cff.topDict._nominalWidthX; - } - var width = defaultWidthX; - function newContour(x2, y2) { - if (open) p.closePath(); - p.moveTo(x2, y2); - open = true; - } - function parseStems() { - if (stack.length % 2 !== 0 && !haveWidth) width = stack.shift() + nominalWidthX; - nStems += stack.length >> 1; - stack.length = 0; - haveWidth = true; - } - function parse2(code2) { - var b1; - var b2; - var b3; - var b4; - var codeIndex; - var subrCode; - var jpx; - var jpy; - var c3x; - var c3y; - var c4x; - var c4y; - var i = 0; - while (i < code2.length) { - var v = code2[i]; - i += 1; - switch (v) { - case 1: - parseStems(); - break; - case 3: - parseStems(); - break; - case 4: - if (stack.length > 1 && !haveWidth) { - width = stack.shift() + nominalWidthX; - haveWidth = true; - } - y += stack.pop(); - newContour(x, y); - break; - case 5: - while (stack.length > 0) { - x += stack.shift(); - y += stack.shift(); - p.lineTo(x, y); - } - break; - case 6: - while (stack.length > 0) { - x += stack.shift(); - p.lineTo(x, y); - if (stack.length === 0) break; - y += stack.shift(); - p.lineTo(x, y); - } - break; - case 7: - while (stack.length > 0) { - y += stack.shift(); - p.lineTo(x, y); - if (stack.length === 0) break; - x += stack.shift(); - p.lineTo(x, y); - } - break; - case 8: - while (stack.length > 0) { - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + stack.shift(); - p.curveTo(c1x, c1y, c2x, c2y, x, y); - } - break; - case 10: - codeIndex = stack.pop() + subrsBias; - subrCode = subrs[codeIndex]; - if (subrCode) parse2(subrCode); - break; - case 11: return; - case 12: - v = code2[i]; - i += 1; - switch (v) { - case 35: - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - jpx = c2x + stack.shift(); - jpy = c2y + stack.shift(); - c3x = jpx + stack.shift(); - c3y = jpy + stack.shift(); - c4x = c3x + stack.shift(); - c4y = c3y + stack.shift(); - x = c4x + stack.shift(); - y = c4y + stack.shift(); - stack.shift(); - p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy); - p.curveTo(c3x, c3y, c4x, c4y, x, y); - break; - case 34: - c1x = x + stack.shift(); - c1y = y; - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - jpx = c2x + stack.shift(); - jpy = c2y; - c3x = jpx + stack.shift(); - c3y = c2y; - c4x = c3x + stack.shift(); - c4y = y; - x = c4x + stack.shift(); - p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy); - p.curveTo(c3x, c3y, c4x, c4y, x, y); - break; - case 36: - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - jpx = c2x + stack.shift(); - jpy = c2y; - c3x = jpx + stack.shift(); - c3y = c2y; - c4x = c3x + stack.shift(); - c4y = c3y + stack.shift(); - x = c4x + stack.shift(); - p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy); - p.curveTo(c3x, c3y, c4x, c4y, x, y); - break; - case 37: - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - jpx = c2x + stack.shift(); - jpy = c2y + stack.shift(); - c3x = jpx + stack.shift(); - c3y = jpy + stack.shift(); - c4x = c3x + stack.shift(); - c4y = c3y + stack.shift(); - if (Math.abs(c4x - x) > Math.abs(c4y - y)) x = c4x + stack.shift(); - else y = c4y + stack.shift(); - p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy); - p.curveTo(c3x, c3y, c4x, c4y, x, y); - break; - default: - console.log("Glyph " + glyph.index + ": unknown operator 1200" + v); - stack.length = 0; - } - break; - case 14: - if (stack.length > 0 && !haveWidth) { - width = stack.shift() + nominalWidthX; - haveWidth = true; - } - if (open) { - p.closePath(); - open = false; - } - break; - case 18: - parseStems(); - break; - case 19: - case 20: - parseStems(); - i += nStems + 7 >> 3; - break; - case 21: - if (stack.length > 2 && !haveWidth) { - width = stack.shift() + nominalWidthX; - haveWidth = true; - } - y += stack.pop(); - x += stack.pop(); - newContour(x, y); - break; - case 22: - if (stack.length > 1 && !haveWidth) { - width = stack.shift() + nominalWidthX; - haveWidth = true; - } - x += stack.pop(); - newContour(x, y); - break; - case 23: - parseStems(); - break; - case 24: - while (stack.length > 2) { - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + stack.shift(); - p.curveTo(c1x, c1y, c2x, c2y, x, y); - } - x += stack.shift(); - y += stack.shift(); - p.lineTo(x, y); - break; - case 25: - while (stack.length > 6) { - x += stack.shift(); - y += stack.shift(); - p.lineTo(x, y); - } - c1x = x + stack.shift(); - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + stack.shift(); - p.curveTo(c1x, c1y, c2x, c2y, x, y); - break; - case 26: - if (stack.length % 2) x += stack.shift(); - while (stack.length > 0) { - c1x = x; - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x; - y = c2y + stack.shift(); - p.curveTo(c1x, c1y, c2x, c2y, x, y); - } - break; - case 27: - if (stack.length % 2) y += stack.shift(); - while (stack.length > 0) { - c1x = x + stack.shift(); - c1y = y; - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y; - p.curveTo(c1x, c1y, c2x, c2y, x, y); - } - break; - case 28: - b1 = code2[i]; - b2 = code2[i + 1]; - stack.push((b1 << 24 | b2 << 16) >> 16); - i += 2; - break; - case 29: - codeIndex = stack.pop() + font.gsubrsBias; - subrCode = font.gsubrs[codeIndex]; - if (subrCode) parse2(subrCode); - break; - case 30: - while (stack.length > 0) { - c1x = x; - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + (stack.length === 1 ? stack.shift() : 0); - p.curveTo(c1x, c1y, c2x, c2y, x, y); - if (stack.length === 0) break; - c1x = x + stack.shift(); - c1y = y; - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - y = c2y + stack.shift(); - x = c2x + (stack.length === 1 ? stack.shift() : 0); - p.curveTo(c1x, c1y, c2x, c2y, x, y); - } - break; - case 31: - while (stack.length > 0) { - c1x = x + stack.shift(); - c1y = y; - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - y = c2y + stack.shift(); - x = c2x + (stack.length === 1 ? stack.shift() : 0); - p.curveTo(c1x, c1y, c2x, c2y, x, y); - if (stack.length === 0) break; - c1x = x; - c1y = y + stack.shift(); - c2x = c1x + stack.shift(); - c2y = c1y + stack.shift(); - x = c2x + stack.shift(); - y = c2y + (stack.length === 1 ? stack.shift() : 0); - p.curveTo(c1x, c1y, c2x, c2y, x, y); - } - break; - default: if (v < 32) console.log("Glyph " + glyph.index + ": unknown operator " + v); - else if (v < 247) stack.push(v - 139); - else if (v < 251) { - b1 = code2[i]; - i += 1; - stack.push((v - 247) * 256 + b1 + 108); - } else if (v < 255) { - b1 = code2[i]; - i += 1; - stack.push(-(v - 251) * 256 - b1 - 108); - } else { - b1 = code2[i]; - b2 = code2[i + 1]; - b3 = code2[i + 2]; - b4 = code2[i + 3]; - i += 4; - stack.push((b1 << 24 | b2 << 16 | b3 << 8 | b4) / 65536); - } - } - } - } - parse2(code); - glyph.advanceWidth = width; - return p; - } - function parseCFFFDSelect(data, start, nGlyphs, fdArrayCount) { - var fdSelect = []; - var fdIndex; - var parser = new parse.Parser(data, start); - var format = parser.parseCard8(); - if (format === 0) for (var iGid = 0; iGid < nGlyphs; iGid++) { - fdIndex = parser.parseCard8(); - if (fdIndex >= fdArrayCount) throw new Error("CFF table CID Font FDSelect has bad FD index value " + fdIndex + " (FD count " + fdArrayCount + ")"); - fdSelect.push(fdIndex); - } - else if (format === 3) { - var nRanges = parser.parseCard16(); - var first = parser.parseCard16(); - if (first !== 0) throw new Error("CFF Table CID Font FDSelect format 3 range has bad initial GID " + first); - var next; - for (var iRange = 0; iRange < nRanges; iRange++) { - fdIndex = parser.parseCard8(); - next = parser.parseCard16(); - if (fdIndex >= fdArrayCount) throw new Error("CFF table CID Font FDSelect has bad FD index value " + fdIndex + " (FD count " + fdArrayCount + ")"); - if (next > nGlyphs) throw new Error("CFF Table CID Font FDSelect format 3 range has bad GID " + next); - for (; first < next; first++) fdSelect.push(fdIndex); - first = next; - } - if (next !== nGlyphs) throw new Error("CFF Table CID Font FDSelect format 3 range has bad final GID " + next); - } else throw new Error("CFF Table CID Font FDSelect table has unsupported format " + format); - return fdSelect; - } - function parseCFFTable(data, start, font, opt) { - font.tables.cff = {}; - var topDictIndex = parseCFFIndex(data, parseCFFIndex(data, parseCFFHeader(data, start).endOffset, parse.bytesToString).endOffset); - var stringIndex = parseCFFIndex(data, topDictIndex.endOffset, parse.bytesToString); - font.gsubrs = parseCFFIndex(data, stringIndex.endOffset).objects; - font.gsubrsBias = calcCFFSubroutineBias(font.gsubrs); - var topDictArray = gatherCFFTopDicts(data, start, topDictIndex.objects, stringIndex.objects); - if (topDictArray.length !== 1) throw new Error("CFF table has too many fonts in 'FontSet' - count of fonts NameIndex.length = " + topDictArray.length); - var topDict = topDictArray[0]; - font.tables.cff.topDict = topDict; - if (topDict._privateDict) { - font.defaultWidthX = topDict._privateDict.defaultWidthX; - font.nominalWidthX = topDict._privateDict.nominalWidthX; - } - if (topDict.ros[0] !== void 0 && topDict.ros[1] !== void 0) font.isCIDFont = true; - if (font.isCIDFont) { - var fdArrayOffset = topDict.fdArray; - var fdSelectOffset = topDict.fdSelect; - if (fdArrayOffset === 0 || fdSelectOffset === 0) throw new Error("Font is marked as a CID font, but FDArray and/or FDSelect information is missing"); - fdArrayOffset += start; - var fdArray = gatherCFFTopDicts(data, start, parseCFFIndex(data, fdArrayOffset).objects, stringIndex.objects); - topDict._fdArray = fdArray; - fdSelectOffset += start; - topDict._fdSelect = parseCFFFDSelect(data, fdSelectOffset, font.numGlyphs, fdArray.length); - } - var privateDictOffset = start + topDict.private[1]; - var privateDict = parseCFFPrivateDict(data, privateDictOffset, topDict.private[0], stringIndex.objects); - font.defaultWidthX = privateDict.defaultWidthX; - font.nominalWidthX = privateDict.nominalWidthX; - if (privateDict.subrs !== 0) { - font.subrs = parseCFFIndex(data, privateDictOffset + privateDict.subrs).objects; - font.subrsBias = calcCFFSubroutineBias(font.subrs); - } else { - font.subrs = []; - font.subrsBias = 0; - } - var charStringsIndex; - if (opt.lowMemory) { - charStringsIndex = parseCFFIndexLowMemory(data, start + topDict.charStrings); - font.nGlyphs = charStringsIndex.offsets.length; - } else { - charStringsIndex = parseCFFIndex(data, start + topDict.charStrings); - font.nGlyphs = charStringsIndex.objects.length; - } - var charset = parseCFFCharset(data, start + topDict.charset, font.nGlyphs, stringIndex.objects); - if (topDict.encoding === 0) font.cffEncoding = new CffEncoding(cffStandardEncoding, charset); - else if (topDict.encoding === 1) font.cffEncoding = new CffEncoding(cffExpertEncoding, charset); - else font.cffEncoding = parseCFFEncoding(data, start + topDict.encoding, charset); - font.encoding = font.encoding || font.cffEncoding; - font.glyphs = new glyphset.GlyphSet(font); - if (opt.lowMemory) font._push = function(i2) { - var charString2 = getCffIndexObject(i2, charStringsIndex.offsets, data, start + topDict.charStrings); - font.glyphs.push(i2, glyphset.cffGlyphLoader(font, i2, parseCFFCharstring, charString2)); - }; - else for (var i = 0; i < font.nGlyphs; i += 1) { - var charString = charStringsIndex.objects[i]; - font.glyphs.push(i, glyphset.cffGlyphLoader(font, i, parseCFFCharstring, charString)); - } - } - function encodeString(s, strings) { - var sid; - var i = cffStandardStrings.indexOf(s); - if (i >= 0) sid = i; - i = strings.indexOf(s); - if (i >= 0) sid = i + cffStandardStrings.length; - else { - sid = cffStandardStrings.length + strings.length; - strings.push(s); - } - return sid; - } - function makeHeader() { - return new table.Record("Header", [ - { - name: "major", - type: "Card8", - value: 1 - }, - { - name: "minor", - type: "Card8", - value: 0 - }, - { - name: "hdrSize", - type: "Card8", - value: 4 - }, - { - name: "major", - type: "Card8", - value: 1 - } - ]); - } - function makeNameIndex(fontNames) { - var t = new table.Record("Name INDEX", [{ - name: "names", - type: "INDEX", - value: [] - }]); - t.names = []; - for (var i = 0; i < fontNames.length; i += 1) t.names.push({ - name: "name_" + i, - type: "NAME", - value: fontNames[i] - }); - return t; - } - function makeDict(meta2, attrs, strings) { - var m = {}; - for (var i = 0; i < meta2.length; i += 1) { - var entry = meta2[i]; - var value = attrs[entry.name]; - if (value !== void 0 && !equals(value, entry.value)) { - if (entry.type === "SID") value = encodeString(value, strings); - m[entry.op] = { - name: entry.name, - type: entry.type, - value - }; - } - } - return m; - } - function makeTopDict(attrs, strings) { - var t = new table.Record("Top DICT", [{ - name: "dict", - type: "DICT", - value: {} - }]); - t.dict = makeDict(TOP_DICT_META, attrs, strings); - return t; - } - function makeTopDictIndex(topDict) { - var t = new table.Record("Top DICT INDEX", [{ - name: "topDicts", - type: "INDEX", - value: [] - }]); - t.topDicts = [{ - name: "topDict_0", - type: "TABLE", - value: topDict - }]; - return t; - } - function makeStringIndex(strings) { - var t = new table.Record("String INDEX", [{ - name: "strings", - type: "INDEX", - value: [] - }]); - t.strings = []; - for (var i = 0; i < strings.length; i += 1) t.strings.push({ - name: "string_" + i, - type: "STRING", - value: strings[i] - }); - return t; - } - function makeGlobalSubrIndex() { - return new table.Record("Global Subr INDEX", [{ - name: "subrs", - type: "INDEX", - value: [] - }]); - } - function makeCharsets(glyphNames, strings) { - var t = new table.Record("Charsets", [{ - name: "format", - type: "Card8", - value: 0 - }]); - for (var i = 0; i < glyphNames.length; i += 1) { - var glyphName = glyphNames[i]; - var glyphSID = encodeString(glyphName, strings); - t.fields.push({ - name: "glyph_" + i, - type: "SID", - value: glyphSID - }); - } - return t; - } - function glyphToOps(glyph) { - var ops = []; - var path = glyph.path; - ops.push({ - name: "width", - type: "NUMBER", - value: glyph.advanceWidth - }); - var x = 0; - var y = 0; - for (var i = 0; i < path.commands.length; i += 1) { - var dx = void 0; - var dy = void 0; - var cmd = path.commands[i]; - if (cmd.type === "Q") { - var _13 = 1 / 3; - var _23 = 2 / 3; - cmd = { - type: "C", - x: cmd.x, - y: cmd.y, - x1: Math.round(_13 * x + _23 * cmd.x1), - y1: Math.round(_13 * y + _23 * cmd.y1), - x2: Math.round(_13 * cmd.x + _23 * cmd.x1), - y2: Math.round(_13 * cmd.y + _23 * cmd.y1) - }; - } - if (cmd.type === "M") { - dx = Math.round(cmd.x - x); - dy = Math.round(cmd.y - y); - ops.push({ - name: "dx", - type: "NUMBER", - value: dx - }); - ops.push({ - name: "dy", - type: "NUMBER", - value: dy - }); - ops.push({ - name: "rmoveto", - type: "OP", - value: 21 - }); - x = Math.round(cmd.x); - y = Math.round(cmd.y); - } else if (cmd.type === "L") { - dx = Math.round(cmd.x - x); - dy = Math.round(cmd.y - y); - ops.push({ - name: "dx", - type: "NUMBER", - value: dx - }); - ops.push({ - name: "dy", - type: "NUMBER", - value: dy - }); - ops.push({ - name: "rlineto", - type: "OP", - value: 5 - }); - x = Math.round(cmd.x); - y = Math.round(cmd.y); - } else if (cmd.type === "C") { - var dx1 = Math.round(cmd.x1 - x); - var dy1 = Math.round(cmd.y1 - y); - var dx2 = Math.round(cmd.x2 - cmd.x1); - var dy2 = Math.round(cmd.y2 - cmd.y1); - dx = Math.round(cmd.x - cmd.x2); - dy = Math.round(cmd.y - cmd.y2); - ops.push({ - name: "dx1", - type: "NUMBER", - value: dx1 - }); - ops.push({ - name: "dy1", - type: "NUMBER", - value: dy1 - }); - ops.push({ - name: "dx2", - type: "NUMBER", - value: dx2 - }); - ops.push({ - name: "dy2", - type: "NUMBER", - value: dy2 - }); - ops.push({ - name: "dx", - type: "NUMBER", - value: dx - }); - ops.push({ - name: "dy", - type: "NUMBER", - value: dy - }); - ops.push({ - name: "rrcurveto", - type: "OP", - value: 8 - }); - x = Math.round(cmd.x); - y = Math.round(cmd.y); - } - } - ops.push({ - name: "endchar", - type: "OP", - value: 14 - }); - return ops; - } - function makeCharStringsIndex(glyphs) { - var t = new table.Record("CharStrings INDEX", [{ - name: "charStrings", - type: "INDEX", - value: [] - }]); - for (var i = 0; i < glyphs.length; i += 1) { - var glyph = glyphs.get(i); - var ops = glyphToOps(glyph); - t.charStrings.push({ - name: glyph.name, - type: "CHARSTRING", - value: ops - }); - } - return t; - } - function makePrivateDict(attrs, strings) { - var t = new table.Record("Private DICT", [{ - name: "dict", - type: "DICT", - value: {} - }]); - t.dict = makeDict(PRIVATE_DICT_META, attrs, strings); - return t; - } - function makeCFFTable(glyphs, options) { - var t = new table.Table("CFF ", [ - { - name: "header", - type: "RECORD" - }, - { - name: "nameIndex", - type: "RECORD" - }, - { - name: "topDictIndex", - type: "RECORD" - }, - { - name: "stringIndex", - type: "RECORD" - }, - { - name: "globalSubrIndex", - type: "RECORD" - }, - { - name: "charsets", - type: "RECORD" - }, - { - name: "charStringsIndex", - type: "RECORD" - }, - { - name: "privateDict", - type: "RECORD" - } - ]); - var fontScale = 1 / options.unitsPerEm; - var attrs = { - version: options.version, - fullName: options.fullName, - familyName: options.familyName, - weight: options.weightName, - fontBBox: options.fontBBox || [ - 0, - 0, - 0, - 0 - ], - fontMatrix: [ - fontScale, - 0, - 0, - fontScale, - 0, - 0 - ], - charset: 999, - encoding: 0, - charStrings: 999, - private: [0, 999] - }; - var privateAttrs = {}; - var glyphNames = []; - var glyph; - for (var i = 1; i < glyphs.length; i += 1) { - glyph = glyphs.get(i); - glyphNames.push(glyph.name); - } - var strings = []; - t.header = makeHeader(); - t.nameIndex = makeNameIndex([options.postScriptName]); - var topDict = makeTopDict(attrs, strings); - t.topDictIndex = makeTopDictIndex(topDict); - t.globalSubrIndex = makeGlobalSubrIndex(); - t.charsets = makeCharsets(glyphNames, strings); - t.charStringsIndex = makeCharStringsIndex(glyphs); - t.privateDict = makePrivateDict(privateAttrs, strings); - t.stringIndex = makeStringIndex(strings); - attrs.charset = t.header.sizeOf() + t.nameIndex.sizeOf() + t.topDictIndex.sizeOf() + t.stringIndex.sizeOf() + t.globalSubrIndex.sizeOf(); - attrs.encoding = 0; - attrs.charStrings = attrs.charset + t.charsets.sizeOf(); - attrs.private[1] = attrs.charStrings + t.charStringsIndex.sizeOf(); - topDict = makeTopDict(attrs, strings); - t.topDictIndex = makeTopDictIndex(topDict); - return t; - } - var cff = { - parse: parseCFFTable, - make: makeCFFTable - }; - function parseHeadTable(data, start) { - var head2 = {}; - var p = new parse.Parser(data, start); - head2.version = p.parseVersion(); - head2.fontRevision = Math.round(p.parseFixed() * 1e3) / 1e3; - head2.checkSumAdjustment = p.parseULong(); - head2.magicNumber = p.parseULong(); - check.argument(head2.magicNumber === 1594834165, "Font header has wrong magic number."); - head2.flags = p.parseUShort(); - head2.unitsPerEm = p.parseUShort(); - head2.created = p.parseLongDateTime(); - head2.modified = p.parseLongDateTime(); - head2.xMin = p.parseShort(); - head2.yMin = p.parseShort(); - head2.xMax = p.parseShort(); - head2.yMax = p.parseShort(); - head2.macStyle = p.parseUShort(); - head2.lowestRecPPEM = p.parseUShort(); - head2.fontDirectionHint = p.parseShort(); - head2.indexToLocFormat = p.parseShort(); - head2.glyphDataFormat = p.parseShort(); - return head2; - } - function makeHeadTable(options) { - var timestamp = Math.round((/* @__PURE__ */ new Date()).getTime() / 1e3) + 2082844800; - var createdTimestamp = timestamp; - if (options.createdTimestamp) createdTimestamp = options.createdTimestamp + 2082844800; - return new table.Table("head", [ - { - name: "version", - type: "FIXED", - value: 65536 - }, - { - name: "fontRevision", - type: "FIXED", - value: 65536 - }, - { - name: "checkSumAdjustment", - type: "ULONG", - value: 0 - }, - { - name: "magicNumber", - type: "ULONG", - value: 1594834165 - }, - { - name: "flags", - type: "USHORT", - value: 0 - }, - { - name: "unitsPerEm", - type: "USHORT", - value: 1e3 - }, - { - name: "created", - type: "LONGDATETIME", - value: createdTimestamp - }, - { - name: "modified", - type: "LONGDATETIME", - value: timestamp - }, - { - name: "xMin", - type: "SHORT", - value: 0 - }, - { - name: "yMin", - type: "SHORT", - value: 0 - }, - { - name: "xMax", - type: "SHORT", - value: 0 - }, - { - name: "yMax", - type: "SHORT", - value: 0 - }, - { - name: "macStyle", - type: "USHORT", - value: 0 - }, - { - name: "lowestRecPPEM", - type: "USHORT", - value: 0 - }, - { - name: "fontDirectionHint", - type: "SHORT", - value: 2 - }, - { - name: "indexToLocFormat", - type: "SHORT", - value: 0 - }, - { - name: "glyphDataFormat", - type: "SHORT", - value: 0 - } - ], options); - } - var head = { - parse: parseHeadTable, - make: makeHeadTable - }; - function parseHheaTable(data, start) { - var hhea2 = {}; - var p = new parse.Parser(data, start); - hhea2.version = p.parseVersion(); - hhea2.ascender = p.parseShort(); - hhea2.descender = p.parseShort(); - hhea2.lineGap = p.parseShort(); - hhea2.advanceWidthMax = p.parseUShort(); - hhea2.minLeftSideBearing = p.parseShort(); - hhea2.minRightSideBearing = p.parseShort(); - hhea2.xMaxExtent = p.parseShort(); - hhea2.caretSlopeRise = p.parseShort(); - hhea2.caretSlopeRun = p.parseShort(); - hhea2.caretOffset = p.parseShort(); - p.relativeOffset += 8; - hhea2.metricDataFormat = p.parseShort(); - hhea2.numberOfHMetrics = p.parseUShort(); - return hhea2; - } - function makeHheaTable(options) { - return new table.Table("hhea", [ - { - name: "version", - type: "FIXED", - value: 65536 - }, - { - name: "ascender", - type: "FWORD", - value: 0 - }, - { - name: "descender", - type: "FWORD", - value: 0 - }, - { - name: "lineGap", - type: "FWORD", - value: 0 - }, - { - name: "advanceWidthMax", - type: "UFWORD", - value: 0 - }, - { - name: "minLeftSideBearing", - type: "FWORD", - value: 0 - }, - { - name: "minRightSideBearing", - type: "FWORD", - value: 0 - }, - { - name: "xMaxExtent", - type: "FWORD", - value: 0 - }, - { - name: "caretSlopeRise", - type: "SHORT", - value: 1 - }, - { - name: "caretSlopeRun", - type: "SHORT", - value: 0 - }, - { - name: "caretOffset", - type: "SHORT", - value: 0 - }, - { - name: "reserved1", - type: "SHORT", - value: 0 - }, - { - name: "reserved2", - type: "SHORT", - value: 0 - }, - { - name: "reserved3", - type: "SHORT", - value: 0 - }, - { - name: "reserved4", - type: "SHORT", - value: 0 - }, - { - name: "metricDataFormat", - type: "SHORT", - value: 0 - }, - { - name: "numberOfHMetrics", - type: "USHORT", - value: 0 - } - ], options); - } - var hhea = { - parse: parseHheaTable, - make: makeHheaTable - }; - function parseHmtxTableAll(data, start, numMetrics, numGlyphs, glyphs) { - var advanceWidth; - var leftSideBearing; - var p = new parse.Parser(data, start); - for (var i = 0; i < numGlyphs; i += 1) { - if (i < numMetrics) { - advanceWidth = p.parseUShort(); - leftSideBearing = p.parseShort(); - } - var glyph = glyphs.get(i); - glyph.advanceWidth = advanceWidth; - glyph.leftSideBearing = leftSideBearing; - } - } - function parseHmtxTableOnLowMemory(font, data, start, numMetrics, numGlyphs) { - font._hmtxTableData = {}; - var advanceWidth; - var leftSideBearing; - var p = new parse.Parser(data, start); - for (var i = 0; i < numGlyphs; i += 1) { - if (i < numMetrics) { - advanceWidth = p.parseUShort(); - leftSideBearing = p.parseShort(); - } - font._hmtxTableData[i] = { - advanceWidth, - leftSideBearing - }; - } - } - function parseHmtxTable(font, data, start, numMetrics, numGlyphs, glyphs, opt) { - if (opt.lowMemory) parseHmtxTableOnLowMemory(font, data, start, numMetrics, numGlyphs); - else parseHmtxTableAll(data, start, numMetrics, numGlyphs, glyphs); - } - function makeHmtxTable(glyphs) { - var t = new table.Table("hmtx", []); - for (var i = 0; i < glyphs.length; i += 1) { - var glyph = glyphs.get(i); - var advanceWidth = glyph.advanceWidth || 0; - var leftSideBearing = glyph.leftSideBearing || 0; - t.fields.push({ - name: "advanceWidth_" + i, - type: "USHORT", - value: advanceWidth - }); - t.fields.push({ - name: "leftSideBearing_" + i, - type: "SHORT", - value: leftSideBearing - }); - } - return t; - } - var hmtx = { - parse: parseHmtxTable, - make: makeHmtxTable - }; - function makeLtagTable(tags) { - var result = new table.Table("ltag", [ - { - name: "version", - type: "ULONG", - value: 1 - }, - { - name: "flags", - type: "ULONG", - value: 0 - }, - { - name: "numTags", - type: "ULONG", - value: tags.length - } - ]); - var stringPool = ""; - var stringPoolOffset = 12 + tags.length * 4; - for (var i = 0; i < tags.length; ++i) { - var pos = stringPool.indexOf(tags[i]); - if (pos < 0) { - pos = stringPool.length; - stringPool += tags[i]; - } - result.fields.push({ - name: "offset " + i, - type: "USHORT", - value: stringPoolOffset + pos - }); - result.fields.push({ - name: "length " + i, - type: "USHORT", - value: tags[i].length - }); - } - result.fields.push({ - name: "stringPool", - type: "CHARARRAY", - value: stringPool - }); - return result; - } - function parseLtagTable(data, start) { - var p = new parse.Parser(data, start); - var tableVersion = p.parseULong(); - check.argument(tableVersion === 1, "Unsupported ltag table version."); - p.skip("uLong", 1); - var numTags = p.parseULong(); - var tags = []; - for (var i = 0; i < numTags; i++) { - var tag = ""; - var offset = start + p.parseUShort(); - var length = p.parseUShort(); - for (var j = offset; j < offset + length; ++j) tag += String.fromCharCode(data.getInt8(j)); - tags.push(tag); - } - return tags; - } - var ltag = { - make: makeLtagTable, - parse: parseLtagTable - }; - function parseMaxpTable(data, start) { - var maxp2 = {}; - var p = new parse.Parser(data, start); - maxp2.version = p.parseVersion(); - maxp2.numGlyphs = p.parseUShort(); - if (maxp2.version === 1) { - maxp2.maxPoints = p.parseUShort(); - maxp2.maxContours = p.parseUShort(); - maxp2.maxCompositePoints = p.parseUShort(); - maxp2.maxCompositeContours = p.parseUShort(); - maxp2.maxZones = p.parseUShort(); - maxp2.maxTwilightPoints = p.parseUShort(); - maxp2.maxStorage = p.parseUShort(); - maxp2.maxFunctionDefs = p.parseUShort(); - maxp2.maxInstructionDefs = p.parseUShort(); - maxp2.maxStackElements = p.parseUShort(); - maxp2.maxSizeOfInstructions = p.parseUShort(); - maxp2.maxComponentElements = p.parseUShort(); - maxp2.maxComponentDepth = p.parseUShort(); - } - return maxp2; - } - function makeMaxpTable(numGlyphs) { - return new table.Table("maxp", [{ - name: "version", - type: "FIXED", - value: 20480 - }, { - name: "numGlyphs", - type: "USHORT", - value: numGlyphs - }]); - } - var maxp = { - parse: parseMaxpTable, - make: makeMaxpTable - }; - var nameTableNames = [ - "copyright", - "fontFamily", - "fontSubfamily", - "uniqueID", - "fullName", - "version", - "postScriptName", - "trademark", - "manufacturer", - "designer", - "description", - "manufacturerURL", - "designerURL", - "license", - "licenseURL", - "reserved", - "preferredFamily", - "preferredSubfamily", - "compatibleFullName", - "sampleText", - "postScriptFindFontName", - "wwsFamily", - "wwsSubfamily" - ]; - var macLanguages = { - 0: "en", - 1: "fr", - 2: "de", - 3: "it", - 4: "nl", - 5: "sv", - 6: "es", - 7: "da", - 8: "pt", - 9: "no", - 10: "he", - 11: "ja", - 12: "ar", - 13: "fi", - 14: "el", - 15: "is", - 16: "mt", - 17: "tr", - 18: "hr", - 19: "zh-Hant", - 20: "ur", - 21: "hi", - 22: "th", - 23: "ko", - 24: "lt", - 25: "pl", - 26: "hu", - 27: "es", - 28: "lv", - 29: "se", - 30: "fo", - 31: "fa", - 32: "ru", - 33: "zh", - 34: "nl-BE", - 35: "ga", - 36: "sq", - 37: "ro", - 38: "cz", - 39: "sk", - 40: "si", - 41: "yi", - 42: "sr", - 43: "mk", - 44: "bg", - 45: "uk", - 46: "be", - 47: "uz", - 48: "kk", - 49: "az-Cyrl", - 50: "az-Arab", - 51: "hy", - 52: "ka", - 53: "mo", - 54: "ky", - 55: "tg", - 56: "tk", - 57: "mn-CN", - 58: "mn", - 59: "ps", - 60: "ks", - 61: "ku", - 62: "sd", - 63: "bo", - 64: "ne", - 65: "sa", - 66: "mr", - 67: "bn", - 68: "as", - 69: "gu", - 70: "pa", - 71: "or", - 72: "ml", - 73: "kn", - 74: "ta", - 75: "te", - 76: "si", - 77: "my", - 78: "km", - 79: "lo", - 80: "vi", - 81: "id", - 82: "tl", - 83: "ms", - 84: "ms-Arab", - 85: "am", - 86: "ti", - 87: "om", - 88: "so", - 89: "sw", - 90: "rw", - 91: "rn", - 92: "ny", - 93: "mg", - 94: "eo", - 128: "cy", - 129: "eu", - 130: "ca", - 131: "la", - 132: "qu", - 133: "gn", - 134: "ay", - 135: "tt", - 136: "ug", - 137: "dz", - 138: "jv", - 139: "su", - 140: "gl", - 141: "af", - 142: "br", - 143: "iu", - 144: "gd", - 145: "gv", - 146: "ga", - 147: "to", - 148: "el-polyton", - 149: "kl", - 150: "az", - 151: "nn" - }; - var macLanguageToScript = { - 0: 0, - 1: 0, - 2: 0, - 3: 0, - 4: 0, - 5: 0, - 6: 0, - 7: 0, - 8: 0, - 9: 0, - 10: 5, - 11: 1, - 12: 4, - 13: 0, - 14: 6, - 15: 0, - 16: 0, - 17: 0, - 18: 0, - 19: 2, - 20: 4, - 21: 9, - 22: 21, - 23: 3, - 24: 29, - 25: 29, - 26: 29, - 27: 29, - 28: 29, - 29: 0, - 30: 0, - 31: 4, - 32: 7, - 33: 25, - 34: 0, - 35: 0, - 36: 0, - 37: 0, - 38: 29, - 39: 29, - 40: 0, - 41: 5, - 42: 7, - 43: 7, - 44: 7, - 45: 7, - 46: 7, - 47: 7, - 48: 7, - 49: 7, - 50: 4, - 51: 24, - 52: 23, - 53: 7, - 54: 7, - 55: 7, - 56: 7, - 57: 27, - 58: 7, - 59: 4, - 60: 4, - 61: 4, - 62: 4, - 63: 26, - 64: 9, - 65: 9, - 66: 9, - 67: 13, - 68: 13, - 69: 11, - 70: 10, - 71: 12, - 72: 17, - 73: 16, - 74: 14, - 75: 15, - 76: 18, - 77: 19, - 78: 20, - 79: 22, - 80: 30, - 81: 0, - 82: 0, - 83: 0, - 84: 4, - 85: 28, - 86: 28, - 87: 28, - 88: 0, - 89: 0, - 90: 0, - 91: 0, - 92: 0, - 93: 0, - 94: 0, - 128: 0, - 129: 0, - 130: 0, - 131: 0, - 132: 0, - 133: 0, - 134: 0, - 135: 7, - 136: 4, - 137: 26, - 138: 0, - 139: 0, - 140: 0, - 141: 0, - 142: 0, - 143: 28, - 144: 0, - 145: 0, - 146: 0, - 147: 0, - 148: 6, - 149: 0, - 150: 0, - 151: 0 - }; - var windowsLanguages = { - 1078: "af", - 1052: "sq", - 1156: "gsw", - 1118: "am", - 5121: "ar-DZ", - 15361: "ar-BH", - 3073: "ar", - 2049: "ar-IQ", - 11265: "ar-JO", - 13313: "ar-KW", - 12289: "ar-LB", - 4097: "ar-LY", - 6145: "ary", - 8193: "ar-OM", - 16385: "ar-QA", - 1025: "ar-SA", - 10241: "ar-SY", - 7169: "aeb", - 14337: "ar-AE", - 9217: "ar-YE", - 1067: "hy", - 1101: "as", - 2092: "az-Cyrl", - 1068: "az", - 1133: "ba", - 1069: "eu", - 1059: "be", - 2117: "bn", - 1093: "bn-IN", - 8218: "bs-Cyrl", - 5146: "bs", - 1150: "br", - 1026: "bg", - 1027: "ca", - 3076: "zh-HK", - 5124: "zh-MO", - 2052: "zh", - 4100: "zh-SG", - 1028: "zh-TW", - 1155: "co", - 1050: "hr", - 4122: "hr-BA", - 1029: "cs", - 1030: "da", - 1164: "prs", - 1125: "dv", - 2067: "nl-BE", - 1043: "nl", - 3081: "en-AU", - 10249: "en-BZ", - 4105: "en-CA", - 9225: "en-029", - 16393: "en-IN", - 6153: "en-IE", - 8201: "en-JM", - 17417: "en-MY", - 5129: "en-NZ", - 13321: "en-PH", - 18441: "en-SG", - 7177: "en-ZA", - 11273: "en-TT", - 2057: "en-GB", - 1033: "en", - 12297: "en-ZW", - 1061: "et", - 1080: "fo", - 1124: "fil", - 1035: "fi", - 2060: "fr-BE", - 3084: "fr-CA", - 1036: "fr", - 5132: "fr-LU", - 6156: "fr-MC", - 4108: "fr-CH", - 1122: "fy", - 1110: "gl", - 1079: "ka", - 3079: "de-AT", - 1031: "de", - 5127: "de-LI", - 4103: "de-LU", - 2055: "de-CH", - 1032: "el", - 1135: "kl", - 1095: "gu", - 1128: "ha", - 1037: "he", - 1081: "hi", - 1038: "hu", - 1039: "is", - 1136: "ig", - 1057: "id", - 1117: "iu", - 2141: "iu-Latn", - 2108: "ga", - 1076: "xh", - 1077: "zu", - 1040: "it", - 2064: "it-CH", - 1041: "ja", - 1099: "kn", - 1087: "kk", - 1107: "km", - 1158: "quc", - 1159: "rw", - 1089: "sw", - 1111: "kok", - 1042: "ko", - 1088: "ky", - 1108: "lo", - 1062: "lv", - 1063: "lt", - 2094: "dsb", - 1134: "lb", - 1071: "mk", - 2110: "ms-BN", - 1086: "ms", - 1100: "ml", - 1082: "mt", - 1153: "mi", - 1146: "arn", - 1102: "mr", - 1148: "moh", - 1104: "mn", - 2128: "mn-CN", - 1121: "ne", - 1044: "nb", - 2068: "nn", - 1154: "oc", - 1096: "or", - 1123: "ps", - 1045: "pl", - 1046: "pt", - 2070: "pt-PT", - 1094: "pa", - 1131: "qu-BO", - 2155: "qu-EC", - 3179: "qu", - 1048: "ro", - 1047: "rm", - 1049: "ru", - 9275: "smn", - 4155: "smj-NO", - 5179: "smj", - 3131: "se-FI", - 1083: "se", - 2107: "se-SE", - 8251: "sms", - 6203: "sma-NO", - 7227: "sms", - 1103: "sa", - 7194: "sr-Cyrl-BA", - 3098: "sr", - 6170: "sr-Latn-BA", - 2074: "sr-Latn", - 1132: "nso", - 1074: "tn", - 1115: "si", - 1051: "sk", - 1060: "sl", - 11274: "es-AR", - 16394: "es-BO", - 13322: "es-CL", - 9226: "es-CO", - 5130: "es-CR", - 7178: "es-DO", - 12298: "es-EC", - 17418: "es-SV", - 4106: "es-GT", - 18442: "es-HN", - 2058: "es-MX", - 19466: "es-NI", - 6154: "es-PA", - 15370: "es-PY", - 10250: "es-PE", - 20490: "es-PR", - 3082: "es", - 1034: "es", - 21514: "es-US", - 14346: "es-UY", - 8202: "es-VE", - 2077: "sv-FI", - 1053: "sv", - 1114: "syr", - 1064: "tg", - 2143: "tzm", - 1097: "ta", - 1092: "tt", - 1098: "te", - 1054: "th", - 1105: "bo", - 1055: "tr", - 1090: "tk", - 1152: "ug", - 1058: "uk", - 1070: "hsb", - 1056: "ur", - 2115: "uz-Cyrl", - 1091: "uz", - 1066: "vi", - 1106: "cy", - 1160: "wo", - 1157: "sah", - 1144: "ii", - 1130: "yo" - }; - function getLanguageCode(platformID, languageID, ltag2) { - switch (platformID) { - case 0: - if (languageID === 65535) return "und"; - else if (ltag2) return ltag2[languageID]; - break; - case 1: return macLanguages[languageID]; - case 3: return windowsLanguages[languageID]; - } - } - var utf16 = "utf-16"; - var macScriptEncodings = { - 0: "macintosh", - 1: "x-mac-japanese", - 2: "x-mac-chinesetrad", - 3: "x-mac-korean", - 6: "x-mac-greek", - 7: "x-mac-cyrillic", - 9: "x-mac-devanagai", - 10: "x-mac-gurmukhi", - 11: "x-mac-gujarati", - 12: "x-mac-oriya", - 13: "x-mac-bengali", - 14: "x-mac-tamil", - 15: "x-mac-telugu", - 16: "x-mac-kannada", - 17: "x-mac-malayalam", - 18: "x-mac-sinhalese", - 19: "x-mac-burmese", - 20: "x-mac-khmer", - 21: "x-mac-thai", - 22: "x-mac-lao", - 23: "x-mac-georgian", - 24: "x-mac-armenian", - 25: "x-mac-chinesesimp", - 26: "x-mac-tibetan", - 27: "x-mac-mongolian", - 28: "x-mac-ethiopic", - 29: "x-mac-ce", - 30: "x-mac-vietnamese", - 31: "x-mac-extarabic" - }; - var macLanguageEncodings = { - 15: "x-mac-icelandic", - 17: "x-mac-turkish", - 18: "x-mac-croatian", - 24: "x-mac-ce", - 25: "x-mac-ce", - 26: "x-mac-ce", - 27: "x-mac-ce", - 28: "x-mac-ce", - 30: "x-mac-icelandic", - 37: "x-mac-romanian", - 38: "x-mac-ce", - 39: "x-mac-ce", - 40: "x-mac-ce", - 143: "x-mac-inuit", - 146: "x-mac-gaelic" - }; - function getEncoding(platformID, encodingID, languageID) { - switch (platformID) { - case 0: return utf16; - case 1: return macLanguageEncodings[languageID] || macScriptEncodings[encodingID]; - case 3: - if (encodingID === 1 || encodingID === 10) return utf16; - break; - } - } - function parseNameTable(data, start, ltag2) { - var name = {}; - var p = new parse.Parser(data, start); - var format = p.parseUShort(); - var count = p.parseUShort(); - var stringOffset = p.offset + p.parseUShort(); - for (var i = 0; i < count; i++) { - var platformID = p.parseUShort(); - var encodingID = p.parseUShort(); - var languageID = p.parseUShort(); - var nameID = p.parseUShort(); - var property = nameTableNames[nameID] || nameID; - var byteLength = p.parseUShort(); - var offset = p.parseUShort(); - var language = getLanguageCode(platformID, languageID, ltag2); - var encoding = getEncoding(platformID, encodingID, languageID); - if (encoding !== void 0 && language !== void 0) { - var text = void 0; - if (encoding === utf16) text = decode.UTF16(data, stringOffset + offset, byteLength); - else text = decode.MACSTRING(data, stringOffset + offset, byteLength, encoding); - if (text) { - var translations = name[property]; - if (translations === void 0) translations = name[property] = {}; - translations[language] = text; - } - } - } - if (format === 1) p.parseUShort(); - return name; - } - function reverseDict(dict) { - var result = {}; - for (var key in dict) result[dict[key]] = parseInt(key); - return result; - } - function makeNameRecord(platformID, encodingID, languageID, nameID, length, offset) { - return new table.Record("NameRecord", [ - { - name: "platformID", - type: "USHORT", - value: platformID - }, - { - name: "encodingID", - type: "USHORT", - value: encodingID - }, - { - name: "languageID", - type: "USHORT", - value: languageID - }, - { - name: "nameID", - type: "USHORT", - value: nameID - }, - { - name: "length", - type: "USHORT", - value: length - }, - { - name: "offset", - type: "USHORT", - value: offset - } - ]); - } - function findSubArray(needle, haystack) { - var needleLength = needle.length; - var limit = haystack.length - needleLength + 1; - loop: for (var pos = 0; pos < limit; pos++) for (; pos < limit; pos++) { - for (var k = 0; k < needleLength; k++) if (haystack[pos + k] !== needle[k]) continue loop; - return pos; - } - return -1; - } - function addStringToPool(s, pool) { - var offset = findSubArray(s, pool); - if (offset < 0) { - offset = pool.length; - var i = 0; - var len = s.length; - for (; i < len; ++i) pool.push(s[i]); - } - return offset; - } - function makeNameTable(names, ltag2) { - var nameID; - var nameIDs = []; - var namesWithNumericKeys = {}; - var nameTableIds = reverseDict(nameTableNames); - for (var key in names) { - var id = nameTableIds[key]; - if (id === void 0) id = key; - nameID = parseInt(id); - if (isNaN(nameID)) throw new Error("Name table entry \"" + key + "\" does not exist, see nameTableNames for complete list."); - namesWithNumericKeys[nameID] = names[key]; - nameIDs.push(nameID); - } - var macLanguageIds = reverseDict(macLanguages); - var windowsLanguageIds = reverseDict(windowsLanguages); - var nameRecords = []; - var stringPool = []; - for (var i = 0; i < nameIDs.length; i++) { - nameID = nameIDs[i]; - var translations = namesWithNumericKeys[nameID]; - for (var lang in translations) { - var text = translations[lang]; - var macPlatform = 1; - var macLanguage = macLanguageIds[lang]; - var macScript = macLanguageToScript[macLanguage]; - var macEncoding = getEncoding(macPlatform, macScript, macLanguage); - var macName = encode.MACSTRING(text, macEncoding); - if (macName === void 0) { - macPlatform = 0; - macLanguage = ltag2.indexOf(lang); - if (macLanguage < 0) { - macLanguage = ltag2.length; - ltag2.push(lang); - } - macScript = 4; - macName = encode.UTF16(text); - } - var macNameOffset = addStringToPool(macName, stringPool); - nameRecords.push(makeNameRecord(macPlatform, macScript, macLanguage, nameID, macName.length, macNameOffset)); - var winLanguage = windowsLanguageIds[lang]; - if (winLanguage !== void 0) { - var winName = encode.UTF16(text); - var winNameOffset = addStringToPool(winName, stringPool); - nameRecords.push(makeNameRecord(3, 1, winLanguage, nameID, winName.length, winNameOffset)); - } - } - } - nameRecords.sort(function(a, b) { - return a.platformID - b.platformID || a.encodingID - b.encodingID || a.languageID - b.languageID || a.nameID - b.nameID; - }); - var t = new table.Table("name", [ - { - name: "format", - type: "USHORT", - value: 0 - }, - { - name: "count", - type: "USHORT", - value: nameRecords.length - }, - { - name: "stringOffset", - type: "USHORT", - value: 6 + nameRecords.length * 12 - } - ]); - for (var r = 0; r < nameRecords.length; r++) t.fields.push({ - name: "record_" + r, - type: "RECORD", - value: nameRecords[r] - }); - t.fields.push({ - name: "strings", - type: "LITERAL", - value: stringPool - }); - return t; - } - var _name = { - parse: parseNameTable, - make: makeNameTable - }; - var unicodeRanges = [ - { - begin: 0, - end: 127 - }, - { - begin: 128, - end: 255 - }, - { - begin: 256, - end: 383 - }, - { - begin: 384, - end: 591 - }, - { - begin: 592, - end: 687 - }, - { - begin: 688, - end: 767 - }, - { - begin: 768, - end: 879 - }, - { - begin: 880, - end: 1023 - }, - { - begin: 11392, - end: 11519 - }, - { - begin: 1024, - end: 1279 - }, - { - begin: 1328, - end: 1423 - }, - { - begin: 1424, - end: 1535 - }, - { - begin: 42240, - end: 42559 - }, - { - begin: 1536, - end: 1791 - }, - { - begin: 1984, - end: 2047 - }, - { - begin: 2304, - end: 2431 - }, - { - begin: 2432, - end: 2559 - }, - { - begin: 2560, - end: 2687 - }, - { - begin: 2688, - end: 2815 - }, - { - begin: 2816, - end: 2943 - }, - { - begin: 2944, - end: 3071 - }, - { - begin: 3072, - end: 3199 - }, - { - begin: 3200, - end: 3327 - }, - { - begin: 3328, - end: 3455 - }, - { - begin: 3584, - end: 3711 - }, - { - begin: 3712, - end: 3839 - }, - { - begin: 4256, - end: 4351 - }, - { - begin: 6912, - end: 7039 - }, - { - begin: 4352, - end: 4607 - }, - { - begin: 7680, - end: 7935 - }, - { - begin: 7936, - end: 8191 - }, - { - begin: 8192, - end: 8303 - }, - { - begin: 8304, - end: 8351 - }, - { - begin: 8352, - end: 8399 - }, - { - begin: 8400, - end: 8447 - }, - { - begin: 8448, - end: 8527 - }, - { - begin: 8528, - end: 8591 - }, - { - begin: 8592, - end: 8703 - }, - { - begin: 8704, - end: 8959 - }, - { - begin: 8960, - end: 9215 - }, - { - begin: 9216, - end: 9279 - }, - { - begin: 9280, - end: 9311 - }, - { - begin: 9312, - end: 9471 - }, - { - begin: 9472, - end: 9599 - }, - { - begin: 9600, - end: 9631 - }, - { - begin: 9632, - end: 9727 - }, - { - begin: 9728, - end: 9983 - }, - { - begin: 9984, - end: 10175 - }, - { - begin: 12288, - end: 12351 - }, - { - begin: 12352, - end: 12447 - }, - { - begin: 12448, - end: 12543 - }, - { - begin: 12544, - end: 12591 - }, - { - begin: 12592, - end: 12687 - }, - { - begin: 43072, - end: 43135 - }, - { - begin: 12800, - end: 13055 - }, - { - begin: 13056, - end: 13311 - }, - { - begin: 44032, - end: 55215 - }, - { - begin: 55296, - end: 57343 - }, - { - begin: 67840, - end: 67871 - }, - { - begin: 19968, - end: 40959 - }, - { - begin: 57344, - end: 63743 - }, - { - begin: 12736, - end: 12783 - }, - { - begin: 64256, - end: 64335 - }, - { - begin: 64336, - end: 65023 - }, - { - begin: 65056, - end: 65071 - }, - { - begin: 65040, - end: 65055 - }, - { - begin: 65104, - end: 65135 - }, - { - begin: 65136, - end: 65279 - }, - { - begin: 65280, - end: 65519 - }, - { - begin: 65520, - end: 65535 - }, - { - begin: 3840, - end: 4095 - }, - { - begin: 1792, - end: 1871 - }, - { - begin: 1920, - end: 1983 - }, - { - begin: 3456, - end: 3583 - }, - { - begin: 4096, - end: 4255 - }, - { - begin: 4608, - end: 4991 - }, - { - begin: 5024, - end: 5119 - }, - { - begin: 5120, - end: 5759 - }, - { - begin: 5760, - end: 5791 - }, - { - begin: 5792, - end: 5887 - }, - { - begin: 6016, - end: 6143 - }, - { - begin: 6144, - end: 6319 - }, - { - begin: 10240, - end: 10495 - }, - { - begin: 40960, - end: 42127 - }, - { - begin: 5888, - end: 5919 - }, - { - begin: 66304, - end: 66351 - }, - { - begin: 66352, - end: 66383 - }, - { - begin: 66560, - end: 66639 - }, - { - begin: 118784, - end: 119039 - }, - { - begin: 119808, - end: 120831 - }, - { - begin: 1044480, - end: 1048573 - }, - { - begin: 65024, - end: 65039 - }, - { - begin: 917504, - end: 917631 - }, - { - begin: 6400, - end: 6479 - }, - { - begin: 6480, - end: 6527 - }, - { - begin: 6528, - end: 6623 - }, - { - begin: 6656, - end: 6687 - }, - { - begin: 11264, - end: 11359 - }, - { - begin: 11568, - end: 11647 - }, - { - begin: 19904, - end: 19967 - }, - { - begin: 43008, - end: 43055 - }, - { - begin: 65536, - end: 65663 - }, - { - begin: 65856, - end: 65935 - }, - { - begin: 66432, - end: 66463 - }, - { - begin: 66464, - end: 66527 - }, - { - begin: 66640, - end: 66687 - }, - { - begin: 66688, - end: 66735 - }, - { - begin: 67584, - end: 67647 - }, - { - begin: 68096, - end: 68191 - }, - { - begin: 119552, - end: 119647 - }, - { - begin: 73728, - end: 74751 - }, - { - begin: 119648, - end: 119679 - }, - { - begin: 7040, - end: 7103 - }, - { - begin: 7168, - end: 7247 - }, - { - begin: 7248, - end: 7295 - }, - { - begin: 43136, - end: 43231 - }, - { - begin: 43264, - end: 43311 - }, - { - begin: 43312, - end: 43359 - }, - { - begin: 43520, - end: 43615 - }, - { - begin: 65936, - end: 65999 - }, - { - begin: 66e3, - end: 66047 - }, - { - begin: 66208, - end: 66271 - }, - { - begin: 127024, - end: 127135 - } - ]; - function getUnicodeRange(unicode) { - for (var i = 0; i < unicodeRanges.length; i += 1) { - var range = unicodeRanges[i]; - if (unicode >= range.begin && unicode < range.end) return i; - } - return -1; - } - function parseOS2Table(data, start) { - var os22 = {}; - var p = new parse.Parser(data, start); - os22.version = p.parseUShort(); - os22.xAvgCharWidth = p.parseShort(); - os22.usWeightClass = p.parseUShort(); - os22.usWidthClass = p.parseUShort(); - os22.fsType = p.parseUShort(); - os22.ySubscriptXSize = p.parseShort(); - os22.ySubscriptYSize = p.parseShort(); - os22.ySubscriptXOffset = p.parseShort(); - os22.ySubscriptYOffset = p.parseShort(); - os22.ySuperscriptXSize = p.parseShort(); - os22.ySuperscriptYSize = p.parseShort(); - os22.ySuperscriptXOffset = p.parseShort(); - os22.ySuperscriptYOffset = p.parseShort(); - os22.yStrikeoutSize = p.parseShort(); - os22.yStrikeoutPosition = p.parseShort(); - os22.sFamilyClass = p.parseShort(); - os22.panose = []; - for (var i = 0; i < 10; i++) os22.panose[i] = p.parseByte(); - os22.ulUnicodeRange1 = p.parseULong(); - os22.ulUnicodeRange2 = p.parseULong(); - os22.ulUnicodeRange3 = p.parseULong(); - os22.ulUnicodeRange4 = p.parseULong(); - os22.achVendID = String.fromCharCode(p.parseByte(), p.parseByte(), p.parseByte(), p.parseByte()); - os22.fsSelection = p.parseUShort(); - os22.usFirstCharIndex = p.parseUShort(); - os22.usLastCharIndex = p.parseUShort(); - os22.sTypoAscender = p.parseShort(); - os22.sTypoDescender = p.parseShort(); - os22.sTypoLineGap = p.parseShort(); - os22.usWinAscent = p.parseUShort(); - os22.usWinDescent = p.parseUShort(); - if (os22.version >= 1) { - os22.ulCodePageRange1 = p.parseULong(); - os22.ulCodePageRange2 = p.parseULong(); - } - if (os22.version >= 2) { - os22.sxHeight = p.parseShort(); - os22.sCapHeight = p.parseShort(); - os22.usDefaultChar = p.parseUShort(); - os22.usBreakChar = p.parseUShort(); - os22.usMaxContent = p.parseUShort(); - } - return os22; - } - function makeOS2Table(options) { - return new table.Table("OS/2", [ - { - name: "version", - type: "USHORT", - value: 3 - }, - { - name: "xAvgCharWidth", - type: "SHORT", - value: 0 - }, - { - name: "usWeightClass", - type: "USHORT", - value: 0 - }, - { - name: "usWidthClass", - type: "USHORT", - value: 0 - }, - { - name: "fsType", - type: "USHORT", - value: 0 - }, - { - name: "ySubscriptXSize", - type: "SHORT", - value: 650 - }, - { - name: "ySubscriptYSize", - type: "SHORT", - value: 699 - }, - { - name: "ySubscriptXOffset", - type: "SHORT", - value: 0 - }, - { - name: "ySubscriptYOffset", - type: "SHORT", - value: 140 - }, - { - name: "ySuperscriptXSize", - type: "SHORT", - value: 650 - }, - { - name: "ySuperscriptYSize", - type: "SHORT", - value: 699 - }, - { - name: "ySuperscriptXOffset", - type: "SHORT", - value: 0 - }, - { - name: "ySuperscriptYOffset", - type: "SHORT", - value: 479 - }, - { - name: "yStrikeoutSize", - type: "SHORT", - value: 49 - }, - { - name: "yStrikeoutPosition", - type: "SHORT", - value: 258 - }, - { - name: "sFamilyClass", - type: "SHORT", - value: 0 - }, - { - name: "bFamilyType", - type: "BYTE", - value: 0 - }, - { - name: "bSerifStyle", - type: "BYTE", - value: 0 - }, - { - name: "bWeight", - type: "BYTE", - value: 0 - }, - { - name: "bProportion", - type: "BYTE", - value: 0 - }, - { - name: "bContrast", - type: "BYTE", - value: 0 - }, - { - name: "bStrokeVariation", - type: "BYTE", - value: 0 - }, - { - name: "bArmStyle", - type: "BYTE", - value: 0 - }, - { - name: "bLetterform", - type: "BYTE", - value: 0 - }, - { - name: "bMidline", - type: "BYTE", - value: 0 - }, - { - name: "bXHeight", - type: "BYTE", - value: 0 - }, - { - name: "ulUnicodeRange1", - type: "ULONG", - value: 0 - }, - { - name: "ulUnicodeRange2", - type: "ULONG", - value: 0 - }, - { - name: "ulUnicodeRange3", - type: "ULONG", - value: 0 - }, - { - name: "ulUnicodeRange4", - type: "ULONG", - value: 0 - }, - { - name: "achVendID", - type: "CHARARRAY", - value: "XXXX" - }, - { - name: "fsSelection", - type: "USHORT", - value: 0 - }, - { - name: "usFirstCharIndex", - type: "USHORT", - value: 0 - }, - { - name: "usLastCharIndex", - type: "USHORT", - value: 0 - }, - { - name: "sTypoAscender", - type: "SHORT", - value: 0 - }, - { - name: "sTypoDescender", - type: "SHORT", - value: 0 - }, - { - name: "sTypoLineGap", - type: "SHORT", - value: 0 - }, - { - name: "usWinAscent", - type: "USHORT", - value: 0 - }, - { - name: "usWinDescent", - type: "USHORT", - value: 0 - }, - { - name: "ulCodePageRange1", - type: "ULONG", - value: 0 - }, - { - name: "ulCodePageRange2", - type: "ULONG", - value: 0 - }, - { - name: "sxHeight", - type: "SHORT", - value: 0 - }, - { - name: "sCapHeight", - type: "SHORT", - value: 0 - }, - { - name: "usDefaultChar", - type: "USHORT", - value: 0 - }, - { - name: "usBreakChar", - type: "USHORT", - value: 0 - }, - { - name: "usMaxContext", - type: "USHORT", - value: 0 - } - ], options); - } - var os2 = { - parse: parseOS2Table, - make: makeOS2Table, - unicodeRanges, - getUnicodeRange - }; - function parsePostTable(data, start) { - var post2 = {}; - var p = new parse.Parser(data, start); - post2.version = p.parseVersion(); - post2.italicAngle = p.parseFixed(); - post2.underlinePosition = p.parseShort(); - post2.underlineThickness = p.parseShort(); - post2.isFixedPitch = p.parseULong(); - post2.minMemType42 = p.parseULong(); - post2.maxMemType42 = p.parseULong(); - post2.minMemType1 = p.parseULong(); - post2.maxMemType1 = p.parseULong(); - switch (post2.version) { - case 1: - post2.names = standardNames.slice(); - break; - case 2: - post2.numberOfGlyphs = p.parseUShort(); - post2.glyphNameIndex = new Array(post2.numberOfGlyphs); - for (var i = 0; i < post2.numberOfGlyphs; i++) post2.glyphNameIndex[i] = p.parseUShort(); - post2.names = []; - for (var i$1 = 0; i$1 < post2.numberOfGlyphs; i$1++) if (post2.glyphNameIndex[i$1] >= standardNames.length) { - var nameLength = p.parseChar(); - post2.names.push(p.parseString(nameLength)); - } - break; - case 2.5: - post2.numberOfGlyphs = p.parseUShort(); - post2.offset = new Array(post2.numberOfGlyphs); - for (var i$2 = 0; i$2 < post2.numberOfGlyphs; i$2++) post2.offset[i$2] = p.parseChar(); - break; - } - return post2; - } - function makePostTable() { - return new table.Table("post", [ - { - name: "version", - type: "FIXED", - value: 196608 - }, - { - name: "italicAngle", - type: "FIXED", - value: 0 - }, - { - name: "underlinePosition", - type: "FWORD", - value: 0 - }, - { - name: "underlineThickness", - type: "FWORD", - value: 0 - }, - { - name: "isFixedPitch", - type: "ULONG", - value: 0 - }, - { - name: "minMemType42", - type: "ULONG", - value: 0 - }, - { - name: "maxMemType42", - type: "ULONG", - value: 0 - }, - { - name: "minMemType1", - type: "ULONG", - value: 0 - }, - { - name: "maxMemType1", - type: "ULONG", - value: 0 - } - ]); - } - var post = { - parse: parsePostTable, - make: makePostTable - }; - var subtableParsers = new Array(9); - subtableParsers[1] = function parseLookup1() { - var start = this.offset + this.relativeOffset; - var substFormat = this.parseUShort(); - if (substFormat === 1) return { - substFormat: 1, - coverage: this.parsePointer(Parser.coverage), - deltaGlyphId: this.parseUShort() - }; - else if (substFormat === 2) return { - substFormat: 2, - coverage: this.parsePointer(Parser.coverage), - substitute: this.parseOffset16List() - }; - check.assert(false, "0x" + start.toString(16) + ": lookup type 1 format must be 1 or 2."); - }; - subtableParsers[2] = function parseLookup2() { - var substFormat = this.parseUShort(); - check.argument(substFormat === 1, "GSUB Multiple Substitution Subtable identifier-format must be 1"); - return { - substFormat, - coverage: this.parsePointer(Parser.coverage), - sequences: this.parseListOfLists() - }; - }; - subtableParsers[3] = function parseLookup3() { - var substFormat = this.parseUShort(); - check.argument(substFormat === 1, "GSUB Alternate Substitution Subtable identifier-format must be 1"); - return { - substFormat, - coverage: this.parsePointer(Parser.coverage), - alternateSets: this.parseListOfLists() - }; - }; - subtableParsers[4] = function parseLookup4() { - var substFormat = this.parseUShort(); - check.argument(substFormat === 1, "GSUB ligature table identifier-format must be 1"); - return { - substFormat, - coverage: this.parsePointer(Parser.coverage), - ligatureSets: this.parseListOfLists(function() { - return { - ligGlyph: this.parseUShort(), - components: this.parseUShortList(this.parseUShort() - 1) - }; - }) - }; - }; - var lookupRecordDesc = { - sequenceIndex: Parser.uShort, - lookupListIndex: Parser.uShort - }; - subtableParsers[5] = function parseLookup5() { - var start = this.offset + this.relativeOffset; - var substFormat = this.parseUShort(); - if (substFormat === 1) return { - substFormat, - coverage: this.parsePointer(Parser.coverage), - ruleSets: this.parseListOfLists(function() { - var glyphCount2 = this.parseUShort(); - var substCount2 = this.parseUShort(); - return { - input: this.parseUShortList(glyphCount2 - 1), - lookupRecords: this.parseRecordList(substCount2, lookupRecordDesc) - }; - }) - }; - else if (substFormat === 2) return { - substFormat, - coverage: this.parsePointer(Parser.coverage), - classDef: this.parsePointer(Parser.classDef), - classSets: this.parseListOfLists(function() { - var glyphCount2 = this.parseUShort(); - var substCount2 = this.parseUShort(); - return { - classes: this.parseUShortList(glyphCount2 - 1), - lookupRecords: this.parseRecordList(substCount2, lookupRecordDesc) - }; - }) - }; - else if (substFormat === 3) { - var glyphCount = this.parseUShort(); - var substCount = this.parseUShort(); - return { - substFormat, - coverages: this.parseList(glyphCount, Parser.pointer(Parser.coverage)), - lookupRecords: this.parseRecordList(substCount, lookupRecordDesc) - }; - } - check.assert(false, "0x" + start.toString(16) + ": lookup type 5 format must be 1, 2 or 3."); - }; - subtableParsers[6] = function parseLookup6() { - var start = this.offset + this.relativeOffset; - var substFormat = this.parseUShort(); - if (substFormat === 1) return { - substFormat: 1, - coverage: this.parsePointer(Parser.coverage), - chainRuleSets: this.parseListOfLists(function() { - return { - backtrack: this.parseUShortList(), - input: this.parseUShortList(this.parseShort() - 1), - lookahead: this.parseUShortList(), - lookupRecords: this.parseRecordList(lookupRecordDesc) - }; - }) - }; - else if (substFormat === 2) return { - substFormat: 2, - coverage: this.parsePointer(Parser.coverage), - backtrackClassDef: this.parsePointer(Parser.classDef), - inputClassDef: this.parsePointer(Parser.classDef), - lookaheadClassDef: this.parsePointer(Parser.classDef), - chainClassSet: this.parseListOfLists(function() { - return { - backtrack: this.parseUShortList(), - input: this.parseUShortList(this.parseShort() - 1), - lookahead: this.parseUShortList(), - lookupRecords: this.parseRecordList(lookupRecordDesc) - }; - }) - }; - else if (substFormat === 3) return { - substFormat: 3, - backtrackCoverage: this.parseList(Parser.pointer(Parser.coverage)), - inputCoverage: this.parseList(Parser.pointer(Parser.coverage)), - lookaheadCoverage: this.parseList(Parser.pointer(Parser.coverage)), - lookupRecords: this.parseRecordList(lookupRecordDesc) - }; - check.assert(false, "0x" + start.toString(16) + ": lookup type 6 format must be 1, 2 or 3."); - }; - subtableParsers[7] = function parseLookup7() { - var substFormat = this.parseUShort(); - check.argument(substFormat === 1, "GSUB Extension Substitution subtable identifier-format must be 1"); - var extensionLookupType = this.parseUShort(); - var extensionParser = new Parser(this.data, this.offset + this.parseULong()); - return { - substFormat: 1, - lookupType: extensionLookupType, - extension: subtableParsers[extensionLookupType].call(extensionParser) - }; - }; - subtableParsers[8] = function parseLookup8() { - var substFormat = this.parseUShort(); - check.argument(substFormat === 1, "GSUB Reverse Chaining Contextual Single Substitution Subtable identifier-format must be 1"); - return { - substFormat, - coverage: this.parsePointer(Parser.coverage), - backtrackCoverage: this.parseList(Parser.pointer(Parser.coverage)), - lookaheadCoverage: this.parseList(Parser.pointer(Parser.coverage)), - substitutes: this.parseUShortList() - }; - }; - function parseGsubTable(data, start) { - start = start || 0; - var p = new Parser(data, start); - var tableVersion = p.parseVersion(1); - check.argument(tableVersion === 1 || tableVersion === 1.1, "Unsupported GSUB table version."); - if (tableVersion === 1) return { - version: tableVersion, - scripts: p.parseScriptList(), - features: p.parseFeatureList(), - lookups: p.parseLookupList(subtableParsers) - }; - else return { - version: tableVersion, - scripts: p.parseScriptList(), - features: p.parseFeatureList(), - lookups: p.parseLookupList(subtableParsers), - variations: p.parseFeatureVariationsList() - }; - } - var subtableMakers = new Array(9); - subtableMakers[1] = function makeLookup1(subtable) { - if (subtable.substFormat === 1) return new table.Table("substitutionTable", [ - { - name: "substFormat", - type: "USHORT", - value: 1 - }, - { - name: "coverage", - type: "TABLE", - value: new table.Coverage(subtable.coverage) - }, - { - name: "deltaGlyphID", - type: "USHORT", - value: subtable.deltaGlyphId - } - ]); - else return new table.Table("substitutionTable", [{ - name: "substFormat", - type: "USHORT", - value: 2 - }, { - name: "coverage", - type: "TABLE", - value: new table.Coverage(subtable.coverage) - }].concat(table.ushortList("substitute", subtable.substitute))); - }; - subtableMakers[2] = function makeLookup2(subtable) { - check.assert(subtable.substFormat === 1, "Lookup type 2 substFormat must be 1."); - return new table.Table("substitutionTable", [{ - name: "substFormat", - type: "USHORT", - value: 1 - }, { - name: "coverage", - type: "TABLE", - value: new table.Coverage(subtable.coverage) - }].concat(table.tableList("seqSet", subtable.sequences, function(sequenceSet) { - return new table.Table("sequenceSetTable", table.ushortList("sequence", sequenceSet)); - }))); - }; - subtableMakers[3] = function makeLookup3(subtable) { - check.assert(subtable.substFormat === 1, "Lookup type 3 substFormat must be 1."); - return new table.Table("substitutionTable", [{ - name: "substFormat", - type: "USHORT", - value: 1 - }, { - name: "coverage", - type: "TABLE", - value: new table.Coverage(subtable.coverage) - }].concat(table.tableList("altSet", subtable.alternateSets, function(alternateSet) { - return new table.Table("alternateSetTable", table.ushortList("alternate", alternateSet)); - }))); - }; - subtableMakers[4] = function makeLookup4(subtable) { - check.assert(subtable.substFormat === 1, "Lookup type 4 substFormat must be 1."); - return new table.Table("substitutionTable", [{ - name: "substFormat", - type: "USHORT", - value: 1 - }, { - name: "coverage", - type: "TABLE", - value: new table.Coverage(subtable.coverage) - }].concat(table.tableList("ligSet", subtable.ligatureSets, function(ligatureSet) { - return new table.Table("ligatureSetTable", table.tableList("ligature", ligatureSet, function(ligature) { - return new table.Table("ligatureTable", [{ - name: "ligGlyph", - type: "USHORT", - value: ligature.ligGlyph - }].concat(table.ushortList("component", ligature.components, ligature.components.length + 1))); - })); - }))); - }; - subtableMakers[6] = function makeLookup6(subtable) { - if (subtable.substFormat === 1) return new table.Table("chainContextTable", [{ - name: "substFormat", - type: "USHORT", - value: subtable.substFormat - }, { - name: "coverage", - type: "TABLE", - value: new table.Coverage(subtable.coverage) - }].concat(table.tableList("chainRuleSet", subtable.chainRuleSets, function(chainRuleSet) { - return new table.Table("chainRuleSetTable", table.tableList("chainRule", chainRuleSet, function(chainRule) { - var tableData2 = table.ushortList("backtrackGlyph", chainRule.backtrack, chainRule.backtrack.length).concat(table.ushortList("inputGlyph", chainRule.input, chainRule.input.length + 1)).concat(table.ushortList("lookaheadGlyph", chainRule.lookahead, chainRule.lookahead.length)).concat(table.ushortList("substitution", [], chainRule.lookupRecords.length)); - chainRule.lookupRecords.forEach(function(record, i) { - tableData2 = tableData2.concat({ - name: "sequenceIndex" + i, - type: "USHORT", - value: record.sequenceIndex - }).concat({ - name: "lookupListIndex" + i, - type: "USHORT", - value: record.lookupListIndex - }); - }); - return new table.Table("chainRuleTable", tableData2); - })); - }))); - else if (subtable.substFormat === 2) check.assert(false, "lookup type 6 format 2 is not yet supported."); - else if (subtable.substFormat === 3) { - var tableData = [{ - name: "substFormat", - type: "USHORT", - value: subtable.substFormat - }]; - tableData.push({ - name: "backtrackGlyphCount", - type: "USHORT", - value: subtable.backtrackCoverage.length - }); - subtable.backtrackCoverage.forEach(function(coverage, i) { - tableData.push({ - name: "backtrackCoverage" + i, - type: "TABLE", - value: new table.Coverage(coverage) - }); - }); - tableData.push({ - name: "inputGlyphCount", - type: "USHORT", - value: subtable.inputCoverage.length - }); - subtable.inputCoverage.forEach(function(coverage, i) { - tableData.push({ - name: "inputCoverage" + i, - type: "TABLE", - value: new table.Coverage(coverage) - }); - }); - tableData.push({ - name: "lookaheadGlyphCount", - type: "USHORT", - value: subtable.lookaheadCoverage.length - }); - subtable.lookaheadCoverage.forEach(function(coverage, i) { - tableData.push({ - name: "lookaheadCoverage" + i, - type: "TABLE", - value: new table.Coverage(coverage) - }); - }); - tableData.push({ - name: "substitutionCount", - type: "USHORT", - value: subtable.lookupRecords.length - }); - subtable.lookupRecords.forEach(function(record, i) { - tableData = tableData.concat({ - name: "sequenceIndex" + i, - type: "USHORT", - value: record.sequenceIndex - }).concat({ - name: "lookupListIndex" + i, - type: "USHORT", - value: record.lookupListIndex - }); - }); - return new table.Table("chainContextTable", tableData); - } - check.assert(false, "lookup type 6 format must be 1, 2 or 3."); - }; - function makeGsubTable(gsub2) { - return new table.Table("GSUB", [ - { - name: "version", - type: "ULONG", - value: 65536 - }, - { - name: "scripts", - type: "TABLE", - value: new table.ScriptList(gsub2.scripts) - }, - { - name: "features", - type: "TABLE", - value: new table.FeatureList(gsub2.features) - }, - { - name: "lookups", - type: "TABLE", - value: new table.LookupList(gsub2.lookups, subtableMakers) - } - ]); - } - var gsub = { - parse: parseGsubTable, - make: makeGsubTable - }; - function parseMetaTable(data, start) { - var p = new parse.Parser(data, start); - var tableVersion = p.parseULong(); - check.argument(tableVersion === 1, "Unsupported META table version."); - p.parseULong(); - p.parseULong(); - var numDataMaps = p.parseULong(); - var tags = {}; - for (var i = 0; i < numDataMaps; i++) { - var tag = p.parseTag(); - var dataOffset = p.parseULong(); - var dataLength = p.parseULong(); - tags[tag] = decode.UTF8(data, start + dataOffset, dataLength); - } - return tags; - } - function makeMetaTable(tags) { - var numTags = Object.keys(tags).length; - var stringPool = ""; - var stringPoolOffset = 16 + numTags * 12; - var result = new table.Table("meta", [ - { - name: "version", - type: "ULONG", - value: 1 - }, - { - name: "flags", - type: "ULONG", - value: 0 - }, - { - name: "offset", - type: "ULONG", - value: stringPoolOffset - }, - { - name: "numTags", - type: "ULONG", - value: numTags - } - ]); - for (var tag in tags) { - var pos = stringPool.length; - stringPool += tags[tag]; - result.fields.push({ - name: "tag " + tag, - type: "TAG", - value: tag - }); - result.fields.push({ - name: "offset " + tag, - type: "ULONG", - value: stringPoolOffset + pos - }); - result.fields.push({ - name: "length " + tag, - type: "ULONG", - value: tags[tag].length - }); - } - result.fields.push({ - name: "stringPool", - type: "CHARARRAY", - value: stringPool - }); - return result; - } - var meta = { - parse: parseMetaTable, - make: makeMetaTable - }; - function log2(v) { - return Math.log(v) / Math.log(2) | 0; - } - function computeCheckSum(bytes) { - while (bytes.length % 4 !== 0) bytes.push(0); - var sum = 0; - for (var i = 0; i < bytes.length; i += 4) sum += (bytes[i] << 24) + (bytes[i + 1] << 16) + (bytes[i + 2] << 8) + bytes[i + 3]; - sum %= Math.pow(2, 32); - return sum; - } - function makeTableRecord(tag, checkSum, offset, length) { - return new table.Record("Table Record", [ - { - name: "tag", - type: "TAG", - value: tag !== void 0 ? tag : "" - }, - { - name: "checkSum", - type: "ULONG", - value: checkSum !== void 0 ? checkSum : 0 - }, - { - name: "offset", - type: "ULONG", - value: offset !== void 0 ? offset : 0 - }, - { - name: "length", - type: "ULONG", - value: length !== void 0 ? length : 0 - } - ]); - } - function makeSfntTable(tables) { - var sfnt2 = new table.Table("sfnt", [ - { - name: "version", - type: "TAG", - value: "OTTO" - }, - { - name: "numTables", - type: "USHORT", - value: 0 - }, - { - name: "searchRange", - type: "USHORT", - value: 0 - }, - { - name: "entrySelector", - type: "USHORT", - value: 0 - }, - { - name: "rangeShift", - type: "USHORT", - value: 0 - } - ]); - sfnt2.tables = tables; - sfnt2.numTables = tables.length; - var highestPowerOf2 = Math.pow(2, log2(sfnt2.numTables)); - sfnt2.searchRange = 16 * highestPowerOf2; - sfnt2.entrySelector = log2(highestPowerOf2); - sfnt2.rangeShift = sfnt2.numTables * 16 - sfnt2.searchRange; - var recordFields = []; - var tableFields = []; - var offset = sfnt2.sizeOf() + makeTableRecord().sizeOf() * sfnt2.numTables; - while (offset % 4 !== 0) { - offset += 1; - tableFields.push({ - name: "padding", - type: "BYTE", - value: 0 - }); - } - for (var i = 0; i < tables.length; i += 1) { - var t = tables[i]; - check.argument(t.tableName.length === 4, "Table name" + t.tableName + " is invalid."); - var tableLength = t.sizeOf(); - var tableRecord = makeTableRecord(t.tableName, computeCheckSum(t.encode()), offset, tableLength); - recordFields.push({ - name: tableRecord.tag + " Table Record", - type: "RECORD", - value: tableRecord - }); - tableFields.push({ - name: t.tableName + " table", - type: "RECORD", - value: t - }); - offset += tableLength; - check.argument(!isNaN(offset), "Something went wrong calculating the offset."); - while (offset % 4 !== 0) { - offset += 1; - tableFields.push({ - name: "padding", - type: "BYTE", - value: 0 - }); - } - } - recordFields.sort(function(r1, r2) { - if (r1.value.tag > r2.value.tag) return 1; - else return -1; - }); - sfnt2.fields = sfnt2.fields.concat(recordFields); - sfnt2.fields = sfnt2.fields.concat(tableFields); - return sfnt2; - } - function metricsForChar(font, chars, notFoundMetrics) { - for (var i = 0; i < chars.length; i += 1) { - var glyphIndex = font.charToGlyphIndex(chars[i]); - if (glyphIndex > 0) return font.glyphs.get(glyphIndex).getMetrics(); - } - return notFoundMetrics; - } - function average(vs) { - var sum = 0; - for (var i = 0; i < vs.length; i += 1) sum += vs[i]; - return sum / vs.length; - } - function fontToSfntTable(font) { - var xMins = []; - var yMins = []; - var xMaxs = []; - var yMaxs = []; - var advanceWidths = []; - var leftSideBearings = []; - var rightSideBearings = []; - var firstCharIndex; - var lastCharIndex = 0; - var ulUnicodeRange1 = 0; - var ulUnicodeRange2 = 0; - var ulUnicodeRange3 = 0; - var ulUnicodeRange4 = 0; - for (var i = 0; i < font.glyphs.length; i += 1) { - var glyph = font.glyphs.get(i); - var unicode = glyph.unicode | 0; - if (isNaN(glyph.advanceWidth)) throw new Error("Glyph " + glyph.name + " (" + i + "): advanceWidth is not a number."); - if (firstCharIndex > unicode || firstCharIndex === void 0) { - if (unicode > 0) firstCharIndex = unicode; - } - if (lastCharIndex < unicode) lastCharIndex = unicode; - var position = os2.getUnicodeRange(unicode); - if (position < 32) ulUnicodeRange1 |= 1 << position; - else if (position < 64) ulUnicodeRange2 |= 1 << position - 32; - else if (position < 96) ulUnicodeRange3 |= 1 << position - 64; - else if (position < 123) ulUnicodeRange4 |= 1 << position - 96; - else throw new Error("Unicode ranges bits > 123 are reserved for internal usage"); - if (glyph.name === ".notdef") continue; - var metrics = glyph.getMetrics(); - xMins.push(metrics.xMin); - yMins.push(metrics.yMin); - xMaxs.push(metrics.xMax); - yMaxs.push(metrics.yMax); - leftSideBearings.push(metrics.leftSideBearing); - rightSideBearings.push(metrics.rightSideBearing); - advanceWidths.push(glyph.advanceWidth); - } - var globals = { - xMin: Math.min.apply(null, xMins), - yMin: Math.min.apply(null, yMins), - xMax: Math.max.apply(null, xMaxs), - yMax: Math.max.apply(null, yMaxs), - advanceWidthMax: Math.max.apply(null, advanceWidths), - advanceWidthAvg: average(advanceWidths), - minLeftSideBearing: Math.min.apply(null, leftSideBearings), - maxLeftSideBearing: Math.max.apply(null, leftSideBearings), - minRightSideBearing: Math.min.apply(null, rightSideBearings) - }; - globals.ascender = font.ascender; - globals.descender = font.descender; - var headTable = head.make({ - flags: 3, - unitsPerEm: font.unitsPerEm, - xMin: globals.xMin, - yMin: globals.yMin, - xMax: globals.xMax, - yMax: globals.yMax, - lowestRecPPEM: 3, - createdTimestamp: font.createdTimestamp - }); - var hheaTable = hhea.make({ - ascender: globals.ascender, - descender: globals.descender, - advanceWidthMax: globals.advanceWidthMax, - minLeftSideBearing: globals.minLeftSideBearing, - minRightSideBearing: globals.minRightSideBearing, - xMaxExtent: globals.maxLeftSideBearing + (globals.xMax - globals.xMin), - numberOfHMetrics: font.glyphs.length - }); - var maxpTable = maxp.make(font.glyphs.length); - var os2Table = os2.make(Object.assign({ - xAvgCharWidth: Math.round(globals.advanceWidthAvg), - usFirstCharIndex: firstCharIndex, - usLastCharIndex: lastCharIndex, - ulUnicodeRange1, - ulUnicodeRange2, - ulUnicodeRange3, - ulUnicodeRange4, - sTypoAscender: globals.ascender, - sTypoDescender: globals.descender, - sTypoLineGap: 0, - usWinAscent: globals.yMax, - usWinDescent: Math.abs(globals.yMin), - ulCodePageRange1: 1, - sxHeight: metricsForChar(font, "xyvw", { yMax: Math.round(globals.ascender / 2) }).yMax, - sCapHeight: metricsForChar(font, "HIKLEFJMNTZBDPRAGOQSUVWXY", globals).yMax, - usDefaultChar: font.hasChar(" ") ? 32 : 0, - usBreakChar: font.hasChar(" ") ? 32 : 0 - }, font.tables.os2)); - var hmtxTable = hmtx.make(font.glyphs); - var cmapTable = cmap.make(font.glyphs); - var englishFamilyName = font.getEnglishName("fontFamily"); - var englishStyleName = font.getEnglishName("fontSubfamily"); - var englishFullName = englishFamilyName + " " + englishStyleName; - var postScriptName = font.getEnglishName("postScriptName"); - if (!postScriptName) postScriptName = englishFamilyName.replace(/\s/g, "") + "-" + englishStyleName; - var names = {}; - for (var n in font.names) names[n] = font.names[n]; - if (!names.uniqueID) names.uniqueID = { en: font.getEnglishName("manufacturer") + ":" + englishFullName }; - if (!names.postScriptName) names.postScriptName = { en: postScriptName }; - if (!names.preferredFamily) names.preferredFamily = font.names.fontFamily; - if (!names.preferredSubfamily) names.preferredSubfamily = font.names.fontSubfamily; - var languageTags = []; - var nameTable = _name.make(names, languageTags); - var ltagTable = languageTags.length > 0 ? ltag.make(languageTags) : void 0; - var postTable = post.make(); - var cffTable = cff.make(font.glyphs, { - version: font.getEnglishName("version"), - fullName: englishFullName, - familyName: englishFamilyName, - weightName: englishStyleName, - postScriptName, - unitsPerEm: font.unitsPerEm, - fontBBox: [ - 0, - globals.yMin, - globals.ascender, - globals.advanceWidthMax - ] - }); - var metaTable = font.metas && Object.keys(font.metas).length > 0 ? meta.make(font.metas) : void 0; - var tables = [ - headTable, - hheaTable, - maxpTable, - os2Table, - nameTable, - cmapTable, - postTable, - cffTable, - hmtxTable - ]; - if (ltagTable) tables.push(ltagTable); - if (font.tables.gsub) tables.push(gsub.make(font.tables.gsub)); - if (metaTable) tables.push(metaTable); - var sfntTable = makeSfntTable(tables); - var checkSum = computeCheckSum(sfntTable.encode()); - var tableFields = sfntTable.fields; - var checkSumAdjusted = false; - for (var i$1 = 0; i$1 < tableFields.length; i$1 += 1) if (tableFields[i$1].name === "head table") { - tableFields[i$1].value.checkSumAdjustment = 2981146554 - checkSum; - checkSumAdjusted = true; - break; - } - if (!checkSumAdjusted) throw new Error("Could not find head table with checkSum to adjust."); - return sfntTable; - } - var sfnt = { - make: makeSfntTable, - fontToTable: fontToSfntTable, - computeCheckSum - }; - function searchTag(arr, tag) { - var imin = 0; - var imax = arr.length - 1; - while (imin <= imax) { - var imid = imin + imax >>> 1; - var val = arr[imid].tag; - if (val === tag) return imid; - else if (val < tag) imin = imid + 1; - else imax = imid - 1; - } - return -imin - 1; - } - function binSearch(arr, value) { - var imin = 0; - var imax = arr.length - 1; - while (imin <= imax) { - var imid = imin + imax >>> 1; - var val = arr[imid]; - if (val === value) return imid; - else if (val < value) imin = imid + 1; - else imax = imid - 1; - } - return -imin - 1; - } - function searchRange(ranges, value) { - var range; - var imin = 0; - var imax = ranges.length - 1; - while (imin <= imax) { - var imid = imin + imax >>> 1; - range = ranges[imid]; - var start = range.start; - if (start === value) return range; - else if (start < value) imin = imid + 1; - else imax = imid - 1; - } - if (imin > 0) { - range = ranges[imin - 1]; - if (value > range.end) return 0; - return range; - } - } - function Layout(font, tableName) { - this.font = font; - this.tableName = tableName; - } - Layout.prototype = { - /** - * Binary search an object by "tag" property - * @instance - * @function searchTag - * @memberof opentype.Layout - * @param {Array} arr - * @param {string} tag - * @return {number} - */ - searchTag, - /** - * Binary search in a list of numbers - * @instance - * @function binSearch - * @memberof opentype.Layout - * @param {Array} arr - * @param {number} value - * @return {number} - */ - binSearch, - /** - * Get or create the Layout table (GSUB, GPOS etc). - * @param {boolean} create - Whether to create a new one. - * @return {Object} The GSUB or GPOS table. - */ - getTable: function(create) { - var layout = this.font.tables[this.tableName]; - if (!layout && create) layout = this.font.tables[this.tableName] = this.createDefaultTable(); - return layout; - }, - /** - * Returns all scripts in the substitution table. - * @instance - * @return {Array} - */ - getScriptNames: function() { - var layout = this.getTable(); - if (!layout) return []; - return layout.scripts.map(function(script) { - return script.tag; - }); - }, - /** - * Returns the best bet for a script name. - * Returns 'DFLT' if it exists. - * If not, returns 'latn' if it exists. - * If neither exist, returns undefined. - */ - getDefaultScriptName: function() { - var layout = this.getTable(); - if (!layout) return; - var hasLatn = false; - for (var i = 0; i < layout.scripts.length; i++) { - var name = layout.scripts[i].tag; - if (name === "DFLT") return name; - if (name === "latn") hasLatn = true; - } - if (hasLatn) return "latn"; - }, - /** - * Returns all LangSysRecords in the given script. - * @instance - * @param {string} [script='DFLT'] - * @param {boolean} create - forces the creation of this script table if it doesn't exist. - * @return {Object} An object with tag and script properties. - */ - getScriptTable: function(script, create) { - var layout = this.getTable(create); - if (layout) { - script = script || "DFLT"; - var scripts = layout.scripts; - var pos = searchTag(layout.scripts, script); - if (pos >= 0) return scripts[pos].script; - else if (create) { - var scr = { - tag: script, - script: { - defaultLangSys: { - reserved: 0, - reqFeatureIndex: 65535, - featureIndexes: [] - }, - langSysRecords: [] - } - }; - scripts.splice(-1 - pos, 0, scr); - return scr.script; - } - } - }, - /** - * Returns a language system table - * @instance - * @param {string} [script='DFLT'] - * @param {string} [language='dlft'] - * @param {boolean} create - forces the creation of this langSysTable if it doesn't exist. - * @return {Object} - */ - getLangSysTable: function(script, language, create) { - var scriptTable = this.getScriptTable(script, create); - if (scriptTable) { - if (!language || language === "dflt" || language === "DFLT") return scriptTable.defaultLangSys; - var pos = searchTag(scriptTable.langSysRecords, language); - if (pos >= 0) return scriptTable.langSysRecords[pos].langSys; - else if (create) { - var langSysRecord = { - tag: language, - langSys: { - reserved: 0, - reqFeatureIndex: 65535, - featureIndexes: [] - } - }; - scriptTable.langSysRecords.splice(-1 - pos, 0, langSysRecord); - return langSysRecord.langSys; - } - } - }, - /** - * Get a specific feature table. - * @instance - * @param {string} [script='DFLT'] - * @param {string} [language='dlft'] - * @param {string} feature - One of the codes listed at https://www.microsoft.com/typography/OTSPEC/featurelist.htm - * @param {boolean} create - forces the creation of the feature table if it doesn't exist. - * @return {Object} - */ - getFeatureTable: function(script, language, feature, create) { - var langSysTable2 = this.getLangSysTable(script, language, create); - if (langSysTable2) { - var featureRecord; - var featIndexes = langSysTable2.featureIndexes; - var allFeatures = this.font.tables[this.tableName].features; - for (var i = 0; i < featIndexes.length; i++) { - featureRecord = allFeatures[featIndexes[i]]; - if (featureRecord.tag === feature) return featureRecord.feature; - } - if (create) { - var index = allFeatures.length; - check.assert(index === 0 || feature >= allFeatures[index - 1].tag, "Features must be added in alphabetical order."); - featureRecord = { - tag: feature, - feature: { - params: 0, - lookupListIndexes: [] - } - }; - allFeatures.push(featureRecord); - featIndexes.push(index); - return featureRecord.feature; - } - } - }, - /** - * Get the lookup tables of a given type for a script/language/feature. - * @instance - * @param {string} [script='DFLT'] - * @param {string} [language='dlft'] - * @param {string} feature - 4-letter feature code - * @param {number} lookupType - 1 to 9 - * @param {boolean} create - forces the creation of the lookup table if it doesn't exist, with no subtables. - * @return {Object[]} - */ - getLookupTables: function(script, language, feature, lookupType, create) { - var featureTable = this.getFeatureTable(script, language, feature, create); - var tables = []; - if (featureTable) { - var lookupTable; - var lookupListIndexes = featureTable.lookupListIndexes; - var allLookups = this.font.tables[this.tableName].lookups; - for (var i = 0; i < lookupListIndexes.length; i++) { - lookupTable = allLookups[lookupListIndexes[i]]; - if (lookupTable.lookupType === lookupType) tables.push(lookupTable); - } - if (tables.length === 0 && create) { - lookupTable = { - lookupType, - lookupFlag: 0, - subtables: [], - markFilteringSet: void 0 - }; - var index = allLookups.length; - allLookups.push(lookupTable); - lookupListIndexes.push(index); - return [lookupTable]; - } - } - return tables; - }, - /** - * Find a glyph in a class definition table - * https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#class-definition-table - * @param {object} classDefTable - an OpenType Layout class definition table - * @param {number} glyphIndex - the index of the glyph to find - * @returns {number} -1 if not found - */ - getGlyphClass: function(classDefTable, glyphIndex) { - switch (classDefTable.format) { - case 1: - if (classDefTable.startGlyph <= glyphIndex && glyphIndex < classDefTable.startGlyph + classDefTable.classes.length) return classDefTable.classes[glyphIndex - classDefTable.startGlyph]; - return 0; - case 2: - var range = searchRange(classDefTable.ranges, glyphIndex); - return range ? range.classId : 0; - } - }, - /** - * Find a glyph in a coverage table - * https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#coverage-table - * @param {object} coverageTable - an OpenType Layout coverage table - * @param {number} glyphIndex - the index of the glyph to find - * @returns {number} -1 if not found - */ - getCoverageIndex: function(coverageTable, glyphIndex) { - switch (coverageTable.format) { - case 1: - var index = binSearch(coverageTable.glyphs, glyphIndex); - return index >= 0 ? index : -1; - case 2: - var range = searchRange(coverageTable.ranges, glyphIndex); - return range ? range.index + glyphIndex - range.start : -1; - } - }, - /** - * Returns the list of glyph indexes of a coverage table. - * Format 1: the list is stored raw - * Format 2: compact list as range records. - * @instance - * @param {Object} coverageTable - * @return {Array} - */ - expandCoverage: function(coverageTable) { - if (coverageTable.format === 1) return coverageTable.glyphs; - else { - var glyphs = []; - var ranges = coverageTable.ranges; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - var start = range.start; - var end = range.end; - for (var j = start; j <= end; j++) glyphs.push(j); - } - return glyphs; - } - } - }; - function Position(font) { - Layout.call(this, font, "gpos"); - } - Position.prototype = Layout.prototype; - Position.prototype.init = function() { - var script = this.getDefaultScriptName(); - this.defaultKerningTables = this.getKerningTables(script); - }; - Position.prototype.getKerningValue = function(kerningLookups, leftIndex, rightIndex) { - for (var i = 0; i < kerningLookups.length; i++) { - var subtables = kerningLookups[i].subtables; - for (var j = 0; j < subtables.length; j++) { - var subtable = subtables[j]; - var covIndex = this.getCoverageIndex(subtable.coverage, leftIndex); - if (covIndex < 0) continue; - switch (subtable.posFormat) { - case 1: - var pairSet = subtable.pairSets[covIndex]; - for (var k = 0; k < pairSet.length; k++) { - var pair = pairSet[k]; - if (pair.secondGlyph === rightIndex) return pair.value1 && pair.value1.xAdvance || 0; - } - break; - case 2: - var class1 = this.getGlyphClass(subtable.classDef1, leftIndex); - var class2 = this.getGlyphClass(subtable.classDef2, rightIndex); - var pair$1 = subtable.classRecords[class1][class2]; - return pair$1.value1 && pair$1.value1.xAdvance || 0; - } - } - } - return 0; - }; - Position.prototype.getKerningTables = function(script, language) { - if (this.font.tables.gpos) return this.getLookupTables(script, language, "kern", 2); - }; - function Substitution(font) { - Layout.call(this, font, "gsub"); - } - function arraysEqual(ar1, ar2) { - var n = ar1.length; - if (n !== ar2.length) return false; - for (var i = 0; i < n; i++) if (ar1[i] !== ar2[i]) return false; - return true; - } - function getSubstFormat(lookupTable, format, defaultSubtable) { - var subtables = lookupTable.subtables; - for (var i = 0; i < subtables.length; i++) { - var subtable = subtables[i]; - if (subtable.substFormat === format) return subtable; - } - if (defaultSubtable) { - subtables.push(defaultSubtable); - return defaultSubtable; - } - } - Substitution.prototype = Layout.prototype; - Substitution.prototype.createDefaultTable = function() { - return { - version: 1, - scripts: [{ - tag: "DFLT", - script: { - defaultLangSys: { - reserved: 0, - reqFeatureIndex: 65535, - featureIndexes: [] - }, - langSysRecords: [] - } - }], - features: [], - lookups: [] - }; - }; - Substitution.prototype.getSingle = function(feature, script, language) { - var substitutions = []; - var lookupTables = this.getLookupTables(script, language, feature, 1); - for (var idx = 0; idx < lookupTables.length; idx++) { - var subtables = lookupTables[idx].subtables; - for (var i = 0; i < subtables.length; i++) { - var subtable = subtables[i]; - var glyphs = this.expandCoverage(subtable.coverage); - var j = void 0; - if (subtable.substFormat === 1) { - var delta = subtable.deltaGlyphId; - for (j = 0; j < glyphs.length; j++) { - var glyph = glyphs[j]; - substitutions.push({ - sub: glyph, - by: glyph + delta - }); - } - } else { - var substitute = subtable.substitute; - for (j = 0; j < glyphs.length; j++) substitutions.push({ - sub: glyphs[j], - by: substitute[j] - }); - } - } - } - return substitutions; - }; - Substitution.prototype.getMultiple = function(feature, script, language) { - var substitutions = []; - var lookupTables = this.getLookupTables(script, language, feature, 2); - for (var idx = 0; idx < lookupTables.length; idx++) { - var subtables = lookupTables[idx].subtables; - for (var i = 0; i < subtables.length; i++) { - var subtable = subtables[i]; - var glyphs = this.expandCoverage(subtable.coverage); - var j = void 0; - for (j = 0; j < glyphs.length; j++) { - var glyph = glyphs[j]; - var replacements = subtable.sequences[j]; - substitutions.push({ - sub: glyph, - by: replacements - }); - } - } - } - return substitutions; - }; - Substitution.prototype.getAlternates = function(feature, script, language) { - var alternates = []; - var lookupTables = this.getLookupTables(script, language, feature, 3); - for (var idx = 0; idx < lookupTables.length; idx++) { - var subtables = lookupTables[idx].subtables; - for (var i = 0; i < subtables.length; i++) { - var subtable = subtables[i]; - var glyphs = this.expandCoverage(subtable.coverage); - var alternateSets = subtable.alternateSets; - for (var j = 0; j < glyphs.length; j++) alternates.push({ - sub: glyphs[j], - by: alternateSets[j] - }); - } - } - return alternates; - }; - Substitution.prototype.getLigatures = function(feature, script, language) { - var ligatures = []; - var lookupTables = this.getLookupTables(script, language, feature, 4); - for (var idx = 0; idx < lookupTables.length; idx++) { - var subtables = lookupTables[idx].subtables; - for (var i = 0; i < subtables.length; i++) { - var subtable = subtables[i]; - var glyphs = this.expandCoverage(subtable.coverage); - var ligatureSets = subtable.ligatureSets; - for (var j = 0; j < glyphs.length; j++) { - var startGlyph = glyphs[j]; - var ligSet = ligatureSets[j]; - for (var k = 0; k < ligSet.length; k++) { - var lig = ligSet[k]; - ligatures.push({ - sub: [startGlyph].concat(lig.components), - by: lig.ligGlyph - }); - } - } - } - } - return ligatures; - }; - Substitution.prototype.addSingle = function(feature, substitution, script, language) { - var lookupTable = this.getLookupTables(script, language, feature, 1, true)[0]; - var subtable = getSubstFormat(lookupTable, 2, { - substFormat: 2, - coverage: { - format: 1, - glyphs: [] - }, - substitute: [] - }); - check.assert(subtable.coverage.format === 1, "Single: unable to modify coverage table format " + subtable.coverage.format); - var coverageGlyph = substitution.sub; - var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph); - if (pos < 0) { - pos = -1 - pos; - subtable.coverage.glyphs.splice(pos, 0, coverageGlyph); - subtable.substitute.splice(pos, 0, 0); - } - subtable.substitute[pos] = substitution.by; - }; - Substitution.prototype.addMultiple = function(feature, substitution, script, language) { - check.assert(substitution.by instanceof Array && substitution.by.length > 1, "Multiple: \"by\" must be an array of two or more ids"); - var lookupTable = this.getLookupTables(script, language, feature, 2, true)[0]; - var subtable = getSubstFormat(lookupTable, 1, { - substFormat: 1, - coverage: { - format: 1, - glyphs: [] - }, - sequences: [] - }); - check.assert(subtable.coverage.format === 1, "Multiple: unable to modify coverage table format " + subtable.coverage.format); - var coverageGlyph = substitution.sub; - var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph); - if (pos < 0) { - pos = -1 - pos; - subtable.coverage.glyphs.splice(pos, 0, coverageGlyph); - subtable.sequences.splice(pos, 0, 0); - } - subtable.sequences[pos] = substitution.by; - }; - Substitution.prototype.addAlternate = function(feature, substitution, script, language) { - var lookupTable = this.getLookupTables(script, language, feature, 3, true)[0]; - var subtable = getSubstFormat(lookupTable, 1, { - substFormat: 1, - coverage: { - format: 1, - glyphs: [] - }, - alternateSets: [] - }); - check.assert(subtable.coverage.format === 1, "Alternate: unable to modify coverage table format " + subtable.coverage.format); - var coverageGlyph = substitution.sub; - var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph); - if (pos < 0) { - pos = -1 - pos; - subtable.coverage.glyphs.splice(pos, 0, coverageGlyph); - subtable.alternateSets.splice(pos, 0, 0); - } - subtable.alternateSets[pos] = substitution.by; - }; - Substitution.prototype.addLigature = function(feature, ligature, script, language) { - var lookupTable = this.getLookupTables(script, language, feature, 4, true)[0]; - var subtable = lookupTable.subtables[0]; - if (!subtable) { - subtable = { - substFormat: 1, - coverage: { - format: 1, - glyphs: [] - }, - ligatureSets: [] - }; - lookupTable.subtables[0] = subtable; - } - check.assert(subtable.coverage.format === 1, "Ligature: unable to modify coverage table format " + subtable.coverage.format); - var coverageGlyph = ligature.sub[0]; - var ligComponents = ligature.sub.slice(1); - var ligatureTable = { - ligGlyph: ligature.by, - components: ligComponents - }; - var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph); - if (pos >= 0) { - var ligatureSet = subtable.ligatureSets[pos]; - for (var i = 0; i < ligatureSet.length; i++) if (arraysEqual(ligatureSet[i].components, ligComponents)) return; - ligatureSet.push(ligatureTable); - } else { - pos = -1 - pos; - subtable.coverage.glyphs.splice(pos, 0, coverageGlyph); - subtable.ligatureSets.splice(pos, 0, [ligatureTable]); - } - }; - Substitution.prototype.getFeature = function(feature, script, language) { - if (/ss\d\d/.test(feature)) return this.getSingle(feature, script, language); - switch (feature) { - case "aalt": - case "salt": return this.getSingle(feature, script, language).concat(this.getAlternates(feature, script, language)); - case "dlig": - case "liga": - case "rlig": return this.getLigatures(feature, script, language); - case "ccmp": return this.getMultiple(feature, script, language).concat(this.getLigatures(feature, script, language)); - case "stch": return this.getMultiple(feature, script, language); - } - }; - Substitution.prototype.add = function(feature, sub, script, language) { - if (/ss\d\d/.test(feature)) return this.addSingle(feature, sub, script, language); - switch (feature) { - case "aalt": - case "salt": - if (typeof sub.by === "number") return this.addSingle(feature, sub, script, language); - return this.addAlternate(feature, sub, script, language); - case "dlig": - case "liga": - case "rlig": return this.addLigature(feature, sub, script, language); - case "ccmp": - if (sub.by instanceof Array) return this.addMultiple(feature, sub, script, language); - return this.addLigature(feature, sub, script, language); - } - }; - function checkArgument(expression, message) { - if (!expression) throw message; - } - function parseGlyphCoordinate(p, flag, previousValue, shortVectorBitMask, sameBitMask) { - var v; - if ((flag & shortVectorBitMask) > 0) { - v = p.parseByte(); - if ((flag & sameBitMask) === 0) v = -v; - v = previousValue + v; - } else if ((flag & sameBitMask) > 0) v = previousValue; - else v = previousValue + p.parseShort(); - return v; - } - function parseGlyph(glyph, data, start) { - var p = new parse.Parser(data, start); - glyph.numberOfContours = p.parseShort(); - glyph._xMin = p.parseShort(); - glyph._yMin = p.parseShort(); - glyph._xMax = p.parseShort(); - glyph._yMax = p.parseShort(); - var flags; - var flag; - if (glyph.numberOfContours > 0) { - var endPointIndices = glyph.endPointIndices = []; - for (var i = 0; i < glyph.numberOfContours; i += 1) endPointIndices.push(p.parseUShort()); - glyph.instructionLength = p.parseUShort(); - glyph.instructions = []; - for (var i$1 = 0; i$1 < glyph.instructionLength; i$1 += 1) glyph.instructions.push(p.parseByte()); - var numberOfCoordinates = endPointIndices[endPointIndices.length - 1] + 1; - flags = []; - for (var i$2 = 0; i$2 < numberOfCoordinates; i$2 += 1) { - flag = p.parseByte(); - flags.push(flag); - if ((flag & 8) > 0) { - var repeatCount = p.parseByte(); - for (var j = 0; j < repeatCount; j += 1) { - flags.push(flag); - i$2 += 1; - } - } - } - check.argument(flags.length === numberOfCoordinates, "Bad flags."); - if (endPointIndices.length > 0) { - var points = []; - var point; - if (numberOfCoordinates > 0) { - for (var i$3 = 0; i$3 < numberOfCoordinates; i$3 += 1) { - flag = flags[i$3]; - point = {}; - point.onCurve = !!(flag & 1); - point.lastPointOfContour = endPointIndices.indexOf(i$3) >= 0; - points.push(point); - } - var px = 0; - for (var i$4 = 0; i$4 < numberOfCoordinates; i$4 += 1) { - flag = flags[i$4]; - point = points[i$4]; - point.x = parseGlyphCoordinate(p, flag, px, 2, 16); - px = point.x; - } - var py = 0; - for (var i$5 = 0; i$5 < numberOfCoordinates; i$5 += 1) { - flag = flags[i$5]; - point = points[i$5]; - point.y = parseGlyphCoordinate(p, flag, py, 4, 32); - py = point.y; - } - } - glyph.points = points; - } else glyph.points = []; - } else if (glyph.numberOfContours === 0) glyph.points = []; - else { - glyph.isComposite = true; - glyph.points = []; - glyph.components = []; - var moreComponents = true; - while (moreComponents) { - flags = p.parseUShort(); - var component = { - glyphIndex: p.parseUShort(), - xScale: 1, - scale01: 0, - scale10: 0, - yScale: 1, - dx: 0, - dy: 0 - }; - if ((flags & 1) > 0) if ((flags & 2) > 0) { - component.dx = p.parseShort(); - component.dy = p.parseShort(); - } else component.matchedPoints = [p.parseUShort(), p.parseUShort()]; - else if ((flags & 2) > 0) { - component.dx = p.parseChar(); - component.dy = p.parseChar(); - } else component.matchedPoints = [p.parseByte(), p.parseByte()]; - if ((flags & 8) > 0) component.xScale = component.yScale = p.parseF2Dot14(); - else if ((flags & 64) > 0) { - component.xScale = p.parseF2Dot14(); - component.yScale = p.parseF2Dot14(); - } else if ((flags & 128) > 0) { - component.xScale = p.parseF2Dot14(); - component.scale01 = p.parseF2Dot14(); - component.scale10 = p.parseF2Dot14(); - component.yScale = p.parseF2Dot14(); - } - glyph.components.push(component); - moreComponents = !!(flags & 32); - } - if (flags & 256) { - glyph.instructionLength = p.parseUShort(); - glyph.instructions = []; - for (var i$6 = 0; i$6 < glyph.instructionLength; i$6 += 1) glyph.instructions.push(p.parseByte()); - } - } - } - function transformPoints(points, transform) { - var newPoints = []; - for (var i = 0; i < points.length; i += 1) { - var pt = points[i]; - var newPt = { - x: transform.xScale * pt.x + transform.scale01 * pt.y + transform.dx, - y: transform.scale10 * pt.x + transform.yScale * pt.y + transform.dy, - onCurve: pt.onCurve, - lastPointOfContour: pt.lastPointOfContour - }; - newPoints.push(newPt); - } - return newPoints; - } - function getContours(points) { - var contours = []; - var currentContour = []; - for (var i = 0; i < points.length; i += 1) { - var pt = points[i]; - currentContour.push(pt); - if (pt.lastPointOfContour) { - contours.push(currentContour); - currentContour = []; - } - } - check.argument(currentContour.length === 0, "There are still points left in the current contour."); - return contours; - } - function getPath(points) { - var p = new Path(); - if (!points) return p; - var contours = getContours(points); - for (var contourIndex = 0; contourIndex < contours.length; ++contourIndex) { - var contour = contours[contourIndex]; - var prev = null; - var curr = contour[contour.length - 1]; - var next = contour[0]; - if (curr.onCurve) p.moveTo(curr.x, curr.y); - else if (next.onCurve) p.moveTo(next.x, next.y); - else { - var start = { - x: (curr.x + next.x) * .5, - y: (curr.y + next.y) * .5 - }; - p.moveTo(start.x, start.y); - } - for (var i = 0; i < contour.length; ++i) { - prev = curr; - curr = next; - next = contour[(i + 1) % contour.length]; - if (curr.onCurve) p.lineTo(curr.x, curr.y); - else { - var next2 = next; - if (!prev.onCurve) (curr.x + prev.x) * .5, (curr.y + prev.y) * .5; - if (!next.onCurve) next2 = { - x: (curr.x + next.x) * .5, - y: (curr.y + next.y) * .5 - }; - p.quadraticCurveTo(curr.x, curr.y, next2.x, next2.y); - } - } - p.closePath(); - } - return p; - } - function buildPath(glyphs, glyph) { - if (glyph.isComposite) for (var j = 0; j < glyph.components.length; j += 1) { - var component = glyph.components[j]; - var componentGlyph = glyphs.get(component.glyphIndex); - componentGlyph.getPath(); - if (componentGlyph.points) { - var transformedPoints = void 0; - if (component.matchedPoints === void 0) transformedPoints = transformPoints(componentGlyph.points, component); - else { - if (component.matchedPoints[0] > glyph.points.length - 1 || component.matchedPoints[1] > componentGlyph.points.length - 1) throw Error("Matched points out of range in " + glyph.name); - var firstPt = glyph.points[component.matchedPoints[0]]; - var secondPt = componentGlyph.points[component.matchedPoints[1]]; - var transform = { - xScale: component.xScale, - scale01: component.scale01, - scale10: component.scale10, - yScale: component.yScale, - dx: 0, - dy: 0 - }; - secondPt = transformPoints([secondPt], transform)[0]; - transform.dx = firstPt.x - secondPt.x; - transform.dy = firstPt.y - secondPt.y; - transformedPoints = transformPoints(componentGlyph.points, transform); - } - glyph.points = glyph.points.concat(transformedPoints); - } - } - return getPath(glyph.points); - } - function parseGlyfTableAll(data, start, loca2, font) { - var glyphs = new glyphset.GlyphSet(font); - for (var i = 0; i < loca2.length - 1; i += 1) { - var offset = loca2[i]; - if (offset !== loca2[i + 1]) glyphs.push(i, glyphset.ttfGlyphLoader(font, i, parseGlyph, data, start + offset, buildPath)); - else glyphs.push(i, glyphset.glyphLoader(font, i)); - } - return glyphs; - } - function parseGlyfTableOnLowMemory(data, start, loca2, font) { - var glyphs = new glyphset.GlyphSet(font); - font._push = function(i) { - var offset = loca2[i]; - if (offset !== loca2[i + 1]) glyphs.push(i, glyphset.ttfGlyphLoader(font, i, parseGlyph, data, start + offset, buildPath)); - else glyphs.push(i, glyphset.glyphLoader(font, i)); - }; - return glyphs; - } - function parseGlyfTable(data, start, loca2, font, opt) { - if (opt.lowMemory) return parseGlyfTableOnLowMemory(data, start, loca2, font); - else return parseGlyfTableAll(data, start, loca2, font); - } - var glyf = { - getPath, - parse: parseGlyfTable - }; - var instructionTable; - var exec; - var execGlyph; - var execComponent; - function Hinting(font) { - this.font = font; - this.getCommands = function(hPoints) { - return glyf.getPath(hPoints).commands; - }; - this._fpgmState = this._prepState = void 0; - this._errorState = 0; - } - function roundOff(v) { - return v; - } - function roundToGrid(v) { - return Math.sign(v) * Math.round(Math.abs(v)); - } - function roundToDoubleGrid(v) { - return Math.sign(v) * Math.round(Math.abs(v * 2)) / 2; - } - function roundToHalfGrid(v) { - return Math.sign(v) * (Math.round(Math.abs(v) + .5) - .5); - } - function roundUpToGrid(v) { - return Math.sign(v) * Math.ceil(Math.abs(v)); - } - function roundDownToGrid(v) { - return Math.sign(v) * Math.floor(Math.abs(v)); - } - var roundSuper = function(v) { - var period = this.srPeriod; - var phase = this.srPhase; - var threshold = this.srThreshold; - var sign = 1; - if (v < 0) { - v = -v; - sign = -1; - } - v += threshold - phase; - v = Math.trunc(v / period) * period; - v += phase; - if (v < 0) return phase * sign; - return v * sign; - }; - var xUnitVector = { - x: 1, - y: 0, - axis: "x", - distance: function(p1, p2, o1, o2) { - return (o1 ? p1.xo : p1.x) - (o2 ? p2.xo : p2.x); - }, - interpolate: function(p, rp1, rp2, pv) { - var do1; - var do2; - var doa1; - var doa2; - var dm1; - var dm2; - var dt; - if (!pv || pv === this) { - do1 = p.xo - rp1.xo; - do2 = p.xo - rp2.xo; - dm1 = rp1.x - rp1.xo; - dm2 = rp2.x - rp2.xo; - doa1 = Math.abs(do1); - doa2 = Math.abs(do2); - dt = doa1 + doa2; - if (dt === 0) { - p.x = p.xo + (dm1 + dm2) / 2; - return; - } - p.x = p.xo + (dm1 * doa2 + dm2 * doa1) / dt; - return; - } - do1 = pv.distance(p, rp1, true, true); - do2 = pv.distance(p, rp2, true, true); - dm1 = pv.distance(rp1, rp1, false, true); - dm2 = pv.distance(rp2, rp2, false, true); - doa1 = Math.abs(do1); - doa2 = Math.abs(do2); - dt = doa1 + doa2; - if (dt === 0) { - xUnitVector.setRelative(p, p, (dm1 + dm2) / 2, pv, true); - return; - } - xUnitVector.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true); - }, - normalSlope: Number.NEGATIVE_INFINITY, - setRelative: function(p, rp, d, pv, org) { - if (!pv || pv === this) { - p.x = (org ? rp.xo : rp.x) + d; - return; - } - var rpx = org ? rp.xo : rp.x; - var rpy = org ? rp.yo : rp.y; - var rpdx = rpx + d * pv.x; - var rpdy = rpy + d * pv.y; - p.x = rpdx + (p.y - rpdy) / pv.normalSlope; - }, - slope: 0, - touch: function(p) { - p.xTouched = true; - }, - touched: function(p) { - return p.xTouched; - }, - untouch: function(p) { - p.xTouched = false; - } - }; - var yUnitVector = { - x: 0, - y: 1, - axis: "y", - distance: function(p1, p2, o1, o2) { - return (o1 ? p1.yo : p1.y) - (o2 ? p2.yo : p2.y); - }, - interpolate: function(p, rp1, rp2, pv) { - var do1; - var do2; - var doa1; - var doa2; - var dm1; - var dm2; - var dt; - if (!pv || pv === this) { - do1 = p.yo - rp1.yo; - do2 = p.yo - rp2.yo; - dm1 = rp1.y - rp1.yo; - dm2 = rp2.y - rp2.yo; - doa1 = Math.abs(do1); - doa2 = Math.abs(do2); - dt = doa1 + doa2; - if (dt === 0) { - p.y = p.yo + (dm1 + dm2) / 2; - return; - } - p.y = p.yo + (dm1 * doa2 + dm2 * doa1) / dt; - return; - } - do1 = pv.distance(p, rp1, true, true); - do2 = pv.distance(p, rp2, true, true); - dm1 = pv.distance(rp1, rp1, false, true); - dm2 = pv.distance(rp2, rp2, false, true); - doa1 = Math.abs(do1); - doa2 = Math.abs(do2); - dt = doa1 + doa2; - if (dt === 0) { - yUnitVector.setRelative(p, p, (dm1 + dm2) / 2, pv, true); - return; - } - yUnitVector.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true); - }, - normalSlope: 0, - setRelative: function(p, rp, d, pv, org) { - if (!pv || pv === this) { - p.y = (org ? rp.yo : rp.y) + d; - return; - } - var rpx = org ? rp.xo : rp.x; - var rpy = org ? rp.yo : rp.y; - var rpdx = rpx + d * pv.x; - p.y = rpy + d * pv.y + pv.normalSlope * (p.x - rpdx); - }, - slope: Number.POSITIVE_INFINITY, - touch: function(p) { - p.yTouched = true; - }, - touched: function(p) { - return p.yTouched; - }, - untouch: function(p) { - p.yTouched = false; - } - }; - Object.freeze(xUnitVector); - Object.freeze(yUnitVector); - function UnitVector(x, y) { - this.x = x; - this.y = y; - this.axis = void 0; - this.slope = y / x; - this.normalSlope = -x / y; - Object.freeze(this); - } - UnitVector.prototype.distance = function(p1, p2, o1, o2) { - return this.x * xUnitVector.distance(p1, p2, o1, o2) + this.y * yUnitVector.distance(p1, p2, o1, o2); - }; - UnitVector.prototype.interpolate = function(p, rp1, rp2, pv) { - var dm1; - var dm2; - var do1; - var do2; - var doa1; - var doa2; - var dt; - do1 = pv.distance(p, rp1, true, true); - do2 = pv.distance(p, rp2, true, true); - dm1 = pv.distance(rp1, rp1, false, true); - dm2 = pv.distance(rp2, rp2, false, true); - doa1 = Math.abs(do1); - doa2 = Math.abs(do2); - dt = doa1 + doa2; - if (dt === 0) { - this.setRelative(p, p, (dm1 + dm2) / 2, pv, true); - return; - } - this.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true); - }; - UnitVector.prototype.setRelative = function(p, rp, d, pv, org) { - pv = pv || this; - var rpx = org ? rp.xo : rp.x; - var rpy = org ? rp.yo : rp.y; - var rpdx = rpx + d * pv.x; - var rpdy = rpy + d * pv.y; - var pvns = pv.normalSlope; - var fvs = this.slope; - var px = p.x; - var py = p.y; - p.x = (fvs * px - pvns * rpdx + rpdy - py) / (fvs - pvns); - p.y = fvs * (p.x - px) + py; - }; - UnitVector.prototype.touch = function(p) { - p.xTouched = true; - p.yTouched = true; - }; - function getUnitVector(x, y) { - var d = Math.sqrt(x * x + y * y); - x /= d; - y /= d; - if (x === 1 && y === 0) return xUnitVector; - else if (x === 0 && y === 1) return yUnitVector; - else return new UnitVector(x, y); - } - function HPoint(x, y, lastPointOfContour, onCurve) { - this.x = this.xo = Math.round(x * 64) / 64; - this.y = this.yo = Math.round(y * 64) / 64; - this.lastPointOfContour = lastPointOfContour; - this.onCurve = onCurve; - this.prevPointOnContour = void 0; - this.nextPointOnContour = void 0; - this.xTouched = false; - this.yTouched = false; - Object.preventExtensions(this); - } - HPoint.prototype.nextTouched = function(v) { - var p = this.nextPointOnContour; - while (!v.touched(p) && p !== this) p = p.nextPointOnContour; - return p; - }; - HPoint.prototype.prevTouched = function(v) { - var p = this.prevPointOnContour; - while (!v.touched(p) && p !== this) p = p.prevPointOnContour; - return p; - }; - var HPZero = Object.freeze(new HPoint(0, 0)); - var defaultState = { - cvCutIn: 17 / 16, - deltaBase: 9, - deltaShift: .125, - loop: 1, - minDis: 1, - autoFlip: true - }; - function State(env, prog) { - this.env = env; - this.stack = []; - this.prog = prog; - switch (env) { - case "glyf": - this.zp0 = this.zp1 = this.zp2 = 1; - this.rp0 = this.rp1 = this.rp2 = 0; - case "prep": - this.fv = this.pv = this.dpv = xUnitVector; - this.round = roundToGrid; - } - } - Hinting.prototype.exec = function(glyph, ppem) { - if (typeof ppem !== "number") throw new Error("Point size is not a number!"); - if (this._errorState > 2) return; - var font = this.font; - var prepState = this._prepState; - if (!prepState || prepState.ppem !== ppem) { - var fpgmState = this._fpgmState; - if (!fpgmState) { - State.prototype = defaultState; - fpgmState = this._fpgmState = new State("fpgm", font.tables.fpgm); - fpgmState.funcs = []; - fpgmState.font = font; - if (exports.DEBUG) { - console.log("---EXEC FPGM---"); - fpgmState.step = -1; - } - try { - exec(fpgmState); - } catch (e) { - console.log("Hinting error in FPGM:" + e); - this._errorState = 3; - return; - } - } - State.prototype = fpgmState; - prepState = this._prepState = new State("prep", font.tables.prep); - prepState.ppem = ppem; - var oCvt = font.tables.cvt; - if (oCvt) { - var cvt = prepState.cvt = new Array(oCvt.length); - var scale = ppem / font.unitsPerEm; - for (var c = 0; c < oCvt.length; c++) cvt[c] = oCvt[c] * scale; - } else prepState.cvt = []; - if (exports.DEBUG) { - console.log("---EXEC PREP---"); - prepState.step = -1; - } - try { - exec(prepState); - } catch (e) { - if (this._errorState < 2) console.log("Hinting error in PREP:" + e); - this._errorState = 2; - } - } - if (this._errorState > 1) return; - try { - return execGlyph(glyph, prepState); - } catch (e) { - if (this._errorState < 1) { - console.log("Hinting error:" + e); - console.log("Note: further hinting errors are silenced"); - } - this._errorState = 1; - return; - } - }; - execGlyph = function(glyph, prepState) { - var xScale = prepState.ppem / prepState.font.unitsPerEm; - var yScale = xScale; - var components = glyph.components; - var contours; - var gZone; - var state; - State.prototype = prepState; - if (!components) { - state = new State("glyf", glyph.instructions); - if (exports.DEBUG) { - console.log("---EXEC GLYPH---"); - state.step = -1; - } - execComponent(glyph, state, xScale, yScale); - gZone = state.gZone; - } else { - var font = prepState.font; - gZone = []; - contours = []; - for (var i = 0; i < components.length; i++) { - var c = components[i]; - var cg = font.glyphs.get(c.glyphIndex); - state = new State("glyf", cg.instructions); - if (exports.DEBUG) { - console.log("---EXEC COMP " + i + "---"); - state.step = -1; - } - execComponent(cg, state, xScale, yScale); - var dx = Math.round(c.dx * xScale); - var dy = Math.round(c.dy * yScale); - var gz = state.gZone; - var cc = state.contours; - for (var pi = 0; pi < gz.length; pi++) { - var p = gz[pi]; - p.xTouched = p.yTouched = false; - p.xo = p.x = p.x + dx; - p.yo = p.y = p.y + dy; - } - var gLen = gZone.length; - gZone.push.apply(gZone, gz); - for (var j = 0; j < cc.length; j++) contours.push(cc[j] + gLen); - } - if (glyph.instructions && !state.inhibitGridFit) { - state = new State("glyf", glyph.instructions); - state.gZone = state.z0 = state.z1 = state.z2 = gZone; - state.contours = contours; - gZone.push(new HPoint(0, 0), new HPoint(Math.round(glyph.advanceWidth * xScale), 0)); - if (exports.DEBUG) { - console.log("---EXEC COMPOSITE---"); - state.step = -1; - } - exec(state); - gZone.length -= 2; - } - } - return gZone; - }; - execComponent = function(glyph, state, xScale, yScale) { - var points = glyph.points || []; - var pLen = points.length; - var gZone = state.gZone = state.z0 = state.z1 = state.z2 = []; - var contours = state.contours = []; - var cp; - for (var i = 0; i < pLen; i++) { - cp = points[i]; - gZone[i] = new HPoint(cp.x * xScale, cp.y * yScale, cp.lastPointOfContour, cp.onCurve); - } - var sp; - var np; - for (var i$1 = 0; i$1 < pLen; i$1++) { - cp = gZone[i$1]; - if (!sp) { - sp = cp; - contours.push(i$1); - } - if (cp.lastPointOfContour) { - cp.nextPointOnContour = sp; - sp.prevPointOnContour = cp; - sp = void 0; - } else { - np = gZone[i$1 + 1]; - cp.nextPointOnContour = np; - np.prevPointOnContour = cp; - } - } - if (state.inhibitGridFit) return; - if (exports.DEBUG) { - console.log("PROCESSING GLYPH", state.stack); - for (var i$2 = 0; i$2 < pLen; i$2++) console.log(i$2, gZone[i$2].x, gZone[i$2].y); - } - gZone.push(new HPoint(0, 0), new HPoint(Math.round(glyph.advanceWidth * xScale), 0)); - exec(state); - gZone.length -= 2; - if (exports.DEBUG) { - console.log("FINISHED GLYPH", state.stack); - for (var i$3 = 0; i$3 < pLen; i$3++) console.log(i$3, gZone[i$3].x, gZone[i$3].y); - } - }; - exec = function(state) { - var prog = state.prog; - if (!prog) return; - var pLen = prog.length; - var ins; - for (state.ip = 0; state.ip < pLen; state.ip++) { - if (exports.DEBUG) state.step++; - ins = instructionTable[prog[state.ip]]; - if (!ins) throw new Error("unknown instruction: 0x" + Number(prog[state.ip]).toString(16)); - ins(state); - } - }; - function initTZone(state) { - var tZone = state.tZone = new Array(state.gZone.length); - for (var i = 0; i < tZone.length; i++) tZone[i] = new HPoint(0, 0); - } - function skip(state, handleElse) { - var prog = state.prog; - var ip = state.ip; - var nesting = 1; - var ins; - do { - ins = prog[++ip]; - if (ins === 88) nesting++; - else if (ins === 89) nesting--; - else if (ins === 64) ip += prog[ip + 1] + 1; - else if (ins === 65) ip += 2 * prog[ip + 1] + 1; - else if (ins >= 176 && ins <= 183) ip += ins - 176 + 1; - else if (ins >= 184 && ins <= 191) ip += (ins - 184 + 1) * 2; - else if (handleElse && nesting === 1 && ins === 27) break; - } while (nesting > 0); - state.ip = ip; - } - function SVTCA(v, state) { - if (exports.DEBUG) console.log(state.step, "SVTCA[" + v.axis + "]"); - state.fv = state.pv = state.dpv = v; - } - function SPVTCA(v, state) { - if (exports.DEBUG) console.log(state.step, "SPVTCA[" + v.axis + "]"); - state.pv = state.dpv = v; - } - function SFVTCA(v, state) { - if (exports.DEBUG) console.log(state.step, "SFVTCA[" + v.axis + "]"); - state.fv = v; - } - function SPVTL(a, state) { - var stack = state.stack; - var p2i = stack.pop(); - var p1i = stack.pop(); - var p2 = state.z2[p2i]; - var p1 = state.z1[p1i]; - if (exports.DEBUG) console.log("SPVTL[" + a + "]", p2i, p1i); - var dx; - var dy; - if (!a) { - dx = p1.x - p2.x; - dy = p1.y - p2.y; - } else { - dx = p2.y - p1.y; - dy = p1.x - p2.x; - } - state.pv = state.dpv = getUnitVector(dx, dy); - } - function SFVTL(a, state) { - var stack = state.stack; - var p2i = stack.pop(); - var p1i = stack.pop(); - var p2 = state.z2[p2i]; - var p1 = state.z1[p1i]; - if (exports.DEBUG) console.log("SFVTL[" + a + "]", p2i, p1i); - var dx; - var dy; - if (!a) { - dx = p1.x - p2.x; - dy = p1.y - p2.y; - } else { - dx = p2.y - p1.y; - dy = p1.x - p2.x; - } - state.fv = getUnitVector(dx, dy); - } - function SPVFS(state) { - var stack = state.stack; - var y = stack.pop(); - var x = stack.pop(); - if (exports.DEBUG) console.log(state.step, "SPVFS[]", y, x); - state.pv = state.dpv = getUnitVector(x, y); - } - function SFVFS(state) { - var stack = state.stack; - var y = stack.pop(); - var x = stack.pop(); - if (exports.DEBUG) console.log(state.step, "SPVFS[]", y, x); - state.fv = getUnitVector(x, y); - } - function GPV(state) { - var stack = state.stack; - var pv = state.pv; - if (exports.DEBUG) console.log(state.step, "GPV[]"); - stack.push(pv.x * 16384); - stack.push(pv.y * 16384); - } - function GFV(state) { - var stack = state.stack; - var fv = state.fv; - if (exports.DEBUG) console.log(state.step, "GFV[]"); - stack.push(fv.x * 16384); - stack.push(fv.y * 16384); - } - function SFVTPV(state) { - state.fv = state.pv; - if (exports.DEBUG) console.log(state.step, "SFVTPV[]"); - } - function ISECT(state) { - var stack = state.stack; - var pa0i = stack.pop(); - var pa1i = stack.pop(); - var pb0i = stack.pop(); - var pb1i = stack.pop(); - var pi = stack.pop(); - var z0 = state.z0; - var z1 = state.z1; - var pa0 = z0[pa0i]; - var pa1 = z0[pa1i]; - var pb0 = z1[pb0i]; - var pb1 = z1[pb1i]; - var p = state.z2[pi]; - if (exports.DEBUG) console.log("ISECT[], ", pa0i, pa1i, pb0i, pb1i, pi); - var x1 = pa0.x; - var y1 = pa0.y; - var x2 = pa1.x; - var y2 = pa1.y; - var x3 = pb0.x; - var y3 = pb0.y; - var x4 = pb1.x; - var y4 = pb1.y; - var div = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4); - var f1 = x1 * y2 - y1 * x2; - var f2 = x3 * y4 - y3 * x4; - p.x = (f1 * (x3 - x4) - f2 * (x1 - x2)) / div; - p.y = (f1 * (y3 - y4) - f2 * (y1 - y2)) / div; - } - function SRP0(state) { - state.rp0 = state.stack.pop(); - if (exports.DEBUG) console.log(state.step, "SRP0[]", state.rp0); - } - function SRP1(state) { - state.rp1 = state.stack.pop(); - if (exports.DEBUG) console.log(state.step, "SRP1[]", state.rp1); - } - function SRP2(state) { - state.rp2 = state.stack.pop(); - if (exports.DEBUG) console.log(state.step, "SRP2[]", state.rp2); - } - function SZP0(state) { - var n = state.stack.pop(); - if (exports.DEBUG) console.log(state.step, "SZP0[]", n); - state.zp0 = n; - switch (n) { - case 0: - if (!state.tZone) initTZone(state); - state.z0 = state.tZone; - break; - case 1: - state.z0 = state.gZone; - break; - default: throw new Error("Invalid zone pointer"); - } - } - function SZP1(state) { - var n = state.stack.pop(); - if (exports.DEBUG) console.log(state.step, "SZP1[]", n); - state.zp1 = n; - switch (n) { - case 0: - if (!state.tZone) initTZone(state); - state.z1 = state.tZone; - break; - case 1: - state.z1 = state.gZone; - break; - default: throw new Error("Invalid zone pointer"); - } - } - function SZP2(state) { - var n = state.stack.pop(); - if (exports.DEBUG) console.log(state.step, "SZP2[]", n); - state.zp2 = n; - switch (n) { - case 0: - if (!state.tZone) initTZone(state); - state.z2 = state.tZone; - break; - case 1: - state.z2 = state.gZone; - break; - default: throw new Error("Invalid zone pointer"); - } - } - function SZPS(state) { - var n = state.stack.pop(); - if (exports.DEBUG) console.log(state.step, "SZPS[]", n); - state.zp0 = state.zp1 = state.zp2 = n; - switch (n) { - case 0: - if (!state.tZone) initTZone(state); - state.z0 = state.z1 = state.z2 = state.tZone; - break; - case 1: - state.z0 = state.z1 = state.z2 = state.gZone; - break; - default: throw new Error("Invalid zone pointer"); - } - } - function SLOOP(state) { - state.loop = state.stack.pop(); - if (exports.DEBUG) console.log(state.step, "SLOOP[]", state.loop); - } - function RTG(state) { - if (exports.DEBUG) console.log(state.step, "RTG[]"); - state.round = roundToGrid; - } - function RTHG(state) { - if (exports.DEBUG) console.log(state.step, "RTHG[]"); - state.round = roundToHalfGrid; - } - function SMD(state) { - var d = state.stack.pop(); - if (exports.DEBUG) console.log(state.step, "SMD[]", d); - state.minDis = d / 64; - } - function ELSE(state) { - if (exports.DEBUG) console.log(state.step, "ELSE[]"); - skip(state, false); - } - function JMPR(state) { - var o = state.stack.pop(); - if (exports.DEBUG) console.log(state.step, "JMPR[]", o); - state.ip += o - 1; - } - function SCVTCI(state) { - var n = state.stack.pop(); - if (exports.DEBUG) console.log(state.step, "SCVTCI[]", n); - state.cvCutIn = n / 64; - } - function DUP(state) { - var stack = state.stack; - if (exports.DEBUG) console.log(state.step, "DUP[]"); - stack.push(stack[stack.length - 1]); - } - function POP(state) { - if (exports.DEBUG) console.log(state.step, "POP[]"); - state.stack.pop(); - } - function CLEAR(state) { - if (exports.DEBUG) console.log(state.step, "CLEAR[]"); - state.stack.length = 0; - } - function SWAP(state) { - var stack = state.stack; - var a = stack.pop(); - var b = stack.pop(); - if (exports.DEBUG) console.log(state.step, "SWAP[]"); - stack.push(a); - stack.push(b); - } - function DEPTH(state) { - var stack = state.stack; - if (exports.DEBUG) console.log(state.step, "DEPTH[]"); - stack.push(stack.length); - } - function LOOPCALL(state) { - var stack = state.stack; - var fn = stack.pop(); - var c = stack.pop(); - if (exports.DEBUG) console.log(state.step, "LOOPCALL[]", fn, c); - var cip = state.ip; - var cprog = state.prog; - state.prog = state.funcs[fn]; - for (var i = 0; i < c; i++) { - exec(state); - if (exports.DEBUG) console.log(++state.step, i + 1 < c ? "next loopcall" : "done loopcall", i); - } - state.ip = cip; - state.prog = cprog; - } - function CALL(state) { - var fn = state.stack.pop(); - if (exports.DEBUG) console.log(state.step, "CALL[]", fn); - var cip = state.ip; - var cprog = state.prog; - state.prog = state.funcs[fn]; - exec(state); - state.ip = cip; - state.prog = cprog; - if (exports.DEBUG) console.log(++state.step, "returning from", fn); - } - function CINDEX(state) { - var stack = state.stack; - var k = stack.pop(); - if (exports.DEBUG) console.log(state.step, "CINDEX[]", k); - stack.push(stack[stack.length - k]); - } - function MINDEX(state) { - var stack = state.stack; - var k = stack.pop(); - if (exports.DEBUG) console.log(state.step, "MINDEX[]", k); - stack.push(stack.splice(stack.length - k, 1)[0]); - } - function FDEF(state) { - if (state.env !== "fpgm") throw new Error("FDEF not allowed here"); - var stack = state.stack; - var prog = state.prog; - var ip = state.ip; - var fn = stack.pop(); - var ipBegin = ip; - if (exports.DEBUG) console.log(state.step, "FDEF[]", fn); - while (prog[++ip] !== 45); - state.ip = ip; - state.funcs[fn] = prog.slice(ipBegin + 1, ip); - } - function MDAP(round, state) { - var pi = state.stack.pop(); - var p = state.z0[pi]; - var fv = state.fv; - var pv = state.pv; - if (exports.DEBUG) console.log(state.step, "MDAP[" + round + "]", pi); - var d = pv.distance(p, HPZero); - if (round) d = state.round(d); - fv.setRelative(p, HPZero, d, pv); - fv.touch(p); - state.rp0 = state.rp1 = pi; - } - function IUP(v, state) { - var z2 = state.z2; - var pLen = z2.length - 2; - var cp; - var pp; - var np; - if (exports.DEBUG) console.log(state.step, "IUP[" + v.axis + "]"); - for (var i = 0; i < pLen; i++) { - cp = z2[i]; - if (v.touched(cp)) continue; - pp = cp.prevTouched(v); - if (pp === cp) continue; - np = cp.nextTouched(v); - if (pp === np) v.setRelative(cp, cp, v.distance(pp, pp, false, true), v, true); - v.interpolate(cp, pp, np, v); - } - } - function SHP(a, state) { - var stack = state.stack; - var rpi = a ? state.rp1 : state.rp2; - var rp = (a ? state.z0 : state.z1)[rpi]; - var fv = state.fv; - var pv = state.pv; - var loop = state.loop; - var z2 = state.z2; - while (loop--) { - var pi = stack.pop(); - var p = z2[pi]; - var d = pv.distance(rp, rp, false, true); - fv.setRelative(p, p, d, pv); - fv.touch(p); - if (exports.DEBUG) console.log(state.step, (state.loop > 1 ? "loop " + (state.loop - loop) + ": " : "") + "SHP[" + (a ? "rp1" : "rp2") + "]", pi); - } - state.loop = 1; - } - function SHC(a, state) { - var stack = state.stack; - var rpi = a ? state.rp1 : state.rp2; - var rp = (a ? state.z0 : state.z1)[rpi]; - var fv = state.fv; - var pv = state.pv; - var ci = stack.pop(); - var sp = state.z2[state.contours[ci]]; - var p = sp; - if (exports.DEBUG) console.log(state.step, "SHC[" + a + "]", ci); - var d = pv.distance(rp, rp, false, true); - do { - if (p !== rp) fv.setRelative(p, p, d, pv); - p = p.nextPointOnContour; - } while (p !== sp); - } - function SHZ(a, state) { - var stack = state.stack; - var rpi = a ? state.rp1 : state.rp2; - var rp = (a ? state.z0 : state.z1)[rpi]; - var fv = state.fv; - var pv = state.pv; - var e = stack.pop(); - if (exports.DEBUG) console.log(state.step, "SHZ[" + a + "]", e); - var z; - switch (e) { - case 0: - z = state.tZone; - break; - case 1: - z = state.gZone; - break; - default: throw new Error("Invalid zone"); - } - var p; - var d = pv.distance(rp, rp, false, true); - var pLen = z.length - 2; - for (var i = 0; i < pLen; i++) { - p = z[i]; - fv.setRelative(p, p, d, pv); - } - } - function SHPIX(state) { - var stack = state.stack; - var loop = state.loop; - var fv = state.fv; - var d = stack.pop() / 64; - var z2 = state.z2; - while (loop--) { - var pi = stack.pop(); - var p = z2[pi]; - if (exports.DEBUG) console.log(state.step, (state.loop > 1 ? "loop " + (state.loop - loop) + ": " : "") + "SHPIX[]", pi, d); - fv.setRelative(p, p, d); - fv.touch(p); - } - state.loop = 1; - } - function IP(state) { - var stack = state.stack; - var rp1i = state.rp1; - var rp2i = state.rp2; - var loop = state.loop; - var rp1 = state.z0[rp1i]; - var rp2 = state.z1[rp2i]; - var fv = state.fv; - var pv = state.dpv; - var z2 = state.z2; - while (loop--) { - var pi = stack.pop(); - var p = z2[pi]; - if (exports.DEBUG) console.log(state.step, (state.loop > 1 ? "loop " + (state.loop - loop) + ": " : "") + "IP[]", pi, rp1i, "<->", rp2i); - fv.interpolate(p, rp1, rp2, pv); - fv.touch(p); - } - state.loop = 1; - } - function MSIRP(a, state) { - var stack = state.stack; - var d = stack.pop() / 64; - var pi = stack.pop(); - var p = state.z1[pi]; - var rp0 = state.z0[state.rp0]; - var fv = state.fv; - var pv = state.pv; - fv.setRelative(p, rp0, d, pv); - fv.touch(p); - if (exports.DEBUG) console.log(state.step, "MSIRP[" + a + "]", d, pi); - state.rp1 = state.rp0; - state.rp2 = pi; - if (a) state.rp0 = pi; - } - function ALIGNRP(state) { - var stack = state.stack; - var rp0i = state.rp0; - var rp0 = state.z0[rp0i]; - var loop = state.loop; - var fv = state.fv; - var pv = state.pv; - var z1 = state.z1; - while (loop--) { - var pi = stack.pop(); - var p = z1[pi]; - if (exports.DEBUG) console.log(state.step, (state.loop > 1 ? "loop " + (state.loop - loop) + ": " : "") + "ALIGNRP[]", pi); - fv.setRelative(p, rp0, 0, pv); - fv.touch(p); - } - state.loop = 1; - } - function RTDG(state) { - if (exports.DEBUG) console.log(state.step, "RTDG[]"); - state.round = roundToDoubleGrid; - } - function MIAP(round, state) { - var stack = state.stack; - var n = stack.pop(); - var pi = stack.pop(); - var p = state.z0[pi]; - var fv = state.fv; - var pv = state.pv; - var cv = state.cvt[n]; - if (exports.DEBUG) console.log(state.step, "MIAP[" + round + "]", n, "(", cv, ")", pi); - var d = pv.distance(p, HPZero); - if (round) { - if (Math.abs(d - cv) < state.cvCutIn) d = cv; - d = state.round(d); - } - fv.setRelative(p, HPZero, d, pv); - if (state.zp0 === 0) { - p.xo = p.x; - p.yo = p.y; - } - fv.touch(p); - state.rp0 = state.rp1 = pi; - } - function NPUSHB(state) { - var prog = state.prog; - var ip = state.ip; - var stack = state.stack; - var n = prog[++ip]; - if (exports.DEBUG) console.log(state.step, "NPUSHB[]", n); - for (var i = 0; i < n; i++) stack.push(prog[++ip]); - state.ip = ip; - } - function NPUSHW(state) { - var ip = state.ip; - var prog = state.prog; - var stack = state.stack; - var n = prog[++ip]; - if (exports.DEBUG) console.log(state.step, "NPUSHW[]", n); - for (var i = 0; i < n; i++) { - var w = prog[++ip] << 8 | prog[++ip]; - if (w & 32768) w = -((w ^ 65535) + 1); - stack.push(w); - } - state.ip = ip; - } - function WS(state) { - var stack = state.stack; - var store = state.store; - if (!store) store = state.store = []; - var v = stack.pop(); - var l = stack.pop(); - if (exports.DEBUG) console.log(state.step, "WS", v, l); - store[l] = v; - } - function RS(state) { - var stack = state.stack; - var store = state.store; - var l = stack.pop(); - if (exports.DEBUG) console.log(state.step, "RS", l); - var v = store && store[l] || 0; - stack.push(v); - } - function WCVTP(state) { - var stack = state.stack; - var v = stack.pop(); - var l = stack.pop(); - if (exports.DEBUG) console.log(state.step, "WCVTP", v, l); - state.cvt[l] = v / 64; - } - function RCVT(state) { - var stack = state.stack; - var cvte = stack.pop(); - if (exports.DEBUG) console.log(state.step, "RCVT", cvte); - stack.push(state.cvt[cvte] * 64); - } - function GC(a, state) { - var stack = state.stack; - var pi = stack.pop(); - var p = state.z2[pi]; - if (exports.DEBUG) console.log(state.step, "GC[" + a + "]", pi); - stack.push(state.dpv.distance(p, HPZero, a, false) * 64); - } - function MD(a, state) { - var stack = state.stack; - var pi2 = stack.pop(); - var pi1 = stack.pop(); - var p2 = state.z1[pi2]; - var p1 = state.z0[pi1]; - var d = state.dpv.distance(p1, p2, a, a); - if (exports.DEBUG) console.log(state.step, "MD[" + a + "]", pi2, pi1, "->", d); - state.stack.push(Math.round(d * 64)); - } - function MPPEM(state) { - if (exports.DEBUG) console.log(state.step, "MPPEM[]"); - state.stack.push(state.ppem); - } - function FLIPON(state) { - if (exports.DEBUG) console.log(state.step, "FLIPON[]"); - state.autoFlip = true; - } - function LT(state) { - var stack = state.stack; - var e2 = stack.pop(); - var e1 = stack.pop(); - if (exports.DEBUG) console.log(state.step, "LT[]", e2, e1); - stack.push(e1 < e2 ? 1 : 0); - } - function LTEQ(state) { - var stack = state.stack; - var e2 = stack.pop(); - var e1 = stack.pop(); - if (exports.DEBUG) console.log(state.step, "LTEQ[]", e2, e1); - stack.push(e1 <= e2 ? 1 : 0); - } - function GT(state) { - var stack = state.stack; - var e2 = stack.pop(); - var e1 = stack.pop(); - if (exports.DEBUG) console.log(state.step, "GT[]", e2, e1); - stack.push(e1 > e2 ? 1 : 0); - } - function GTEQ(state) { - var stack = state.stack; - var e2 = stack.pop(); - var e1 = stack.pop(); - if (exports.DEBUG) console.log(state.step, "GTEQ[]", e2, e1); - stack.push(e1 >= e2 ? 1 : 0); - } - function EQ(state) { - var stack = state.stack; - var e2 = stack.pop(); - var e1 = stack.pop(); - if (exports.DEBUG) console.log(state.step, "EQ[]", e2, e1); - stack.push(e2 === e1 ? 1 : 0); - } - function NEQ(state) { - var stack = state.stack; - var e2 = stack.pop(); - var e1 = stack.pop(); - if (exports.DEBUG) console.log(state.step, "NEQ[]", e2, e1); - stack.push(e2 !== e1 ? 1 : 0); - } - function ODD(state) { - var stack = state.stack; - var n = stack.pop(); - if (exports.DEBUG) console.log(state.step, "ODD[]", n); - stack.push(Math.trunc(n) % 2 ? 1 : 0); - } - function EVEN(state) { - var stack = state.stack; - var n = stack.pop(); - if (exports.DEBUG) console.log(state.step, "EVEN[]", n); - stack.push(Math.trunc(n) % 2 ? 0 : 1); - } - function IF(state) { - var test = state.stack.pop(); - if (exports.DEBUG) console.log(state.step, "IF[]", test); - if (!test) { - skip(state, true); - if (exports.DEBUG) console.log(state.step, "EIF[]"); - } - } - function EIF(state) { - if (exports.DEBUG) console.log(state.step, "EIF[]"); - } - function AND(state) { - var stack = state.stack; - var e2 = stack.pop(); - var e1 = stack.pop(); - if (exports.DEBUG) console.log(state.step, "AND[]", e2, e1); - stack.push(e2 && e1 ? 1 : 0); - } - function OR(state) { - var stack = state.stack; - var e2 = stack.pop(); - var e1 = stack.pop(); - if (exports.DEBUG) console.log(state.step, "OR[]", e2, e1); - stack.push(e2 || e1 ? 1 : 0); - } - function NOT(state) { - var stack = state.stack; - var e = stack.pop(); - if (exports.DEBUG) console.log(state.step, "NOT[]", e); - stack.push(e ? 0 : 1); - } - function DELTAP123(b, state) { - var stack = state.stack; - var n = stack.pop(); - var fv = state.fv; - var pv = state.pv; - var ppem = state.ppem; - var base = state.deltaBase + (b - 1) * 16; - var ds = state.deltaShift; - var z0 = state.z0; - if (exports.DEBUG) console.log(state.step, "DELTAP[" + b + "]", n, stack); - for (var i = 0; i < n; i++) { - var pi = stack.pop(); - var arg = stack.pop(); - if (base + ((arg & 240) >> 4) !== ppem) continue; - var mag = (arg & 15) - 8; - if (mag >= 0) mag++; - if (exports.DEBUG) console.log(state.step, "DELTAPFIX", pi, "by", mag * ds); - var p = z0[pi]; - fv.setRelative(p, p, mag * ds, pv); - } - } - function SDB(state) { - var n = state.stack.pop(); - if (exports.DEBUG) console.log(state.step, "SDB[]", n); - state.deltaBase = n; - } - function SDS(state) { - var n = state.stack.pop(); - if (exports.DEBUG) console.log(state.step, "SDS[]", n); - state.deltaShift = Math.pow(.5, n); - } - function ADD(state) { - var stack = state.stack; - var n2 = stack.pop(); - var n1 = stack.pop(); - if (exports.DEBUG) console.log(state.step, "ADD[]", n2, n1); - stack.push(n1 + n2); - } - function SUB(state) { - var stack = state.stack; - var n2 = stack.pop(); - var n1 = stack.pop(); - if (exports.DEBUG) console.log(state.step, "SUB[]", n2, n1); - stack.push(n1 - n2); - } - function DIV(state) { - var stack = state.stack; - var n2 = stack.pop(); - var n1 = stack.pop(); - if (exports.DEBUG) console.log(state.step, "DIV[]", n2, n1); - stack.push(n1 * 64 / n2); - } - function MUL(state) { - var stack = state.stack; - var n2 = stack.pop(); - var n1 = stack.pop(); - if (exports.DEBUG) console.log(state.step, "MUL[]", n2, n1); - stack.push(n1 * n2 / 64); - } - function ABS(state) { - var stack = state.stack; - var n = stack.pop(); - if (exports.DEBUG) console.log(state.step, "ABS[]", n); - stack.push(Math.abs(n)); - } - function NEG(state) { - var stack = state.stack; - var n = stack.pop(); - if (exports.DEBUG) console.log(state.step, "NEG[]", n); - stack.push(-n); - } - function FLOOR(state) { - var stack = state.stack; - var n = stack.pop(); - if (exports.DEBUG) console.log(state.step, "FLOOR[]", n); - stack.push(Math.floor(n / 64) * 64); - } - function CEILING(state) { - var stack = state.stack; - var n = stack.pop(); - if (exports.DEBUG) console.log(state.step, "CEILING[]", n); - stack.push(Math.ceil(n / 64) * 64); - } - function ROUND(dt, state) { - var stack = state.stack; - var n = stack.pop(); - if (exports.DEBUG) console.log(state.step, "ROUND[]"); - stack.push(state.round(n / 64) * 64); - } - function WCVTF(state) { - var stack = state.stack; - var v = stack.pop(); - var l = stack.pop(); - if (exports.DEBUG) console.log(state.step, "WCVTF[]", v, l); - state.cvt[l] = v * state.ppem / state.font.unitsPerEm; - } - function DELTAC123(b, state) { - var stack = state.stack; - var n = stack.pop(); - var ppem = state.ppem; - var base = state.deltaBase + (b - 1) * 16; - var ds = state.deltaShift; - if (exports.DEBUG) console.log(state.step, "DELTAC[" + b + "]", n, stack); - for (var i = 0; i < n; i++) { - var c = stack.pop(); - var arg = stack.pop(); - if (base + ((arg & 240) >> 4) !== ppem) continue; - var mag = (arg & 15) - 8; - if (mag >= 0) mag++; - var delta = mag * ds; - if (exports.DEBUG) console.log(state.step, "DELTACFIX", c, "by", delta); - state.cvt[c] += delta; - } - } - function SROUND(state) { - var n = state.stack.pop(); - if (exports.DEBUG) console.log(state.step, "SROUND[]", n); - state.round = roundSuper; - var period; - switch (n & 192) { - case 0: - period = .5; - break; - case 64: - period = 1; - break; - case 128: - period = 2; - break; - default: throw new Error("invalid SROUND value"); - } - state.srPeriod = period; - switch (n & 48) { - case 0: - state.srPhase = 0; - break; - case 16: - state.srPhase = .25 * period; - break; - case 32: - state.srPhase = .5 * period; - break; - case 48: - state.srPhase = .75 * period; - break; - default: throw new Error("invalid SROUND value"); - } - n &= 15; - if (n === 0) state.srThreshold = 0; - else state.srThreshold = (n / 8 - .5) * period; - } - function S45ROUND(state) { - var n = state.stack.pop(); - if (exports.DEBUG) console.log(state.step, "S45ROUND[]", n); - state.round = roundSuper; - var period; - switch (n & 192) { - case 0: - period = Math.sqrt(2) / 2; - break; - case 64: - period = Math.sqrt(2); - break; - case 128: - period = 2 * Math.sqrt(2); - break; - default: throw new Error("invalid S45ROUND value"); - } - state.srPeriod = period; - switch (n & 48) { - case 0: - state.srPhase = 0; - break; - case 16: - state.srPhase = .25 * period; - break; - case 32: - state.srPhase = .5 * period; - break; - case 48: - state.srPhase = .75 * period; - break; - default: throw new Error("invalid S45ROUND value"); - } - n &= 15; - if (n === 0) state.srThreshold = 0; - else state.srThreshold = (n / 8 - .5) * period; - } - function ROFF(state) { - if (exports.DEBUG) console.log(state.step, "ROFF[]"); - state.round = roundOff; - } - function RUTG(state) { - if (exports.DEBUG) console.log(state.step, "RUTG[]"); - state.round = roundUpToGrid; - } - function RDTG(state) { - if (exports.DEBUG) console.log(state.step, "RDTG[]"); - state.round = roundDownToGrid; - } - function SCANCTRL(state) { - var n = state.stack.pop(); - if (exports.DEBUG) console.log(state.step, "SCANCTRL[]", n); - } - function SDPVTL(a, state) { - var stack = state.stack; - var p2i = stack.pop(); - var p1i = stack.pop(); - var p2 = state.z2[p2i]; - var p1 = state.z1[p1i]; - if (exports.DEBUG) console.log(state.step, "SDPVTL[" + a + "]", p2i, p1i); - var dx; - var dy; - if (!a) { - dx = p1.x - p2.x; - dy = p1.y - p2.y; - } else { - dx = p2.y - p1.y; - dy = p1.x - p2.x; - } - state.dpv = getUnitVector(dx, dy); - } - function GETINFO(state) { - var stack = state.stack; - var sel = stack.pop(); - var r = 0; - if (exports.DEBUG) console.log(state.step, "GETINFO[]", sel); - if (sel & 1) r = 35; - if (sel & 32) r |= 4096; - stack.push(r); - } - function ROLL(state) { - var stack = state.stack; - var a = stack.pop(); - var b = stack.pop(); - var c = stack.pop(); - if (exports.DEBUG) console.log(state.step, "ROLL[]"); - stack.push(b); - stack.push(a); - stack.push(c); - } - function MAX(state) { - var stack = state.stack; - var e2 = stack.pop(); - var e1 = stack.pop(); - if (exports.DEBUG) console.log(state.step, "MAX[]", e2, e1); - stack.push(Math.max(e1, e2)); - } - function MIN(state) { - var stack = state.stack; - var e2 = stack.pop(); - var e1 = stack.pop(); - if (exports.DEBUG) console.log(state.step, "MIN[]", e2, e1); - stack.push(Math.min(e1, e2)); - } - function SCANTYPE(state) { - var n = state.stack.pop(); - if (exports.DEBUG) console.log(state.step, "SCANTYPE[]", n); - } - function INSTCTRL(state) { - var s = state.stack.pop(); - var v = state.stack.pop(); - if (exports.DEBUG) console.log(state.step, "INSTCTRL[]", s, v); - switch (s) { - case 1: - state.inhibitGridFit = !!v; - return; - case 2: - state.ignoreCvt = !!v; - return; - default: throw new Error("invalid INSTCTRL[] selector"); - } - } - function PUSHB(n, state) { - var stack = state.stack; - var prog = state.prog; - var ip = state.ip; - if (exports.DEBUG) console.log(state.step, "PUSHB[" + n + "]"); - for (var i = 0; i < n; i++) stack.push(prog[++ip]); - state.ip = ip; - } - function PUSHW(n, state) { - var ip = state.ip; - var prog = state.prog; - var stack = state.stack; - if (exports.DEBUG) console.log(state.ip, "PUSHW[" + n + "]"); - for (var i = 0; i < n; i++) { - var w = prog[++ip] << 8 | prog[++ip]; - if (w & 32768) w = -((w ^ 65535) + 1); - stack.push(w); - } - state.ip = ip; - } - function MDRP_MIRP(indirect, setRp0, keepD, ro, dt, state) { - var stack = state.stack; - var cvte = indirect && stack.pop(); - var pi = stack.pop(); - var rp0i = state.rp0; - var rp = state.z0[rp0i]; - var p = state.z1[pi]; - var md = state.minDis; - var fv = state.fv; - var pv = state.dpv; - var od; - var d; - var sign; - var cv; - d = od = pv.distance(p, rp, true, true); - sign = d >= 0 ? 1 : -1; - d = Math.abs(d); - if (indirect) { - cv = state.cvt[cvte]; - if (ro && Math.abs(d - cv) < state.cvCutIn) d = cv; - } - if (keepD && d < md) d = md; - if (ro) d = state.round(d); - fv.setRelative(p, rp, sign * d, pv); - fv.touch(p); - if (exports.DEBUG) console.log(state.step, (indirect ? "MIRP[" : "MDRP[") + (setRp0 ? "M" : "m") + (keepD ? ">" : "_") + (ro ? "R" : "_") + (dt === 0 ? "Gr" : dt === 1 ? "Bl" : dt === 2 ? "Wh" : "") + "]", indirect ? cvte + "(" + state.cvt[cvte] + "," + cv + ")" : "", pi, "(d =", od, "->", sign * d, ")"); - state.rp1 = state.rp0; - state.rp2 = pi; - if (setRp0) state.rp0 = pi; - } - instructionTable = [ - SVTCA.bind(void 0, yUnitVector), - SVTCA.bind(void 0, xUnitVector), - SPVTCA.bind(void 0, yUnitVector), - SPVTCA.bind(void 0, xUnitVector), - SFVTCA.bind(void 0, yUnitVector), - SFVTCA.bind(void 0, xUnitVector), - SPVTL.bind(void 0, 0), - SPVTL.bind(void 0, 1), - SFVTL.bind(void 0, 0), - SFVTL.bind(void 0, 1), - SPVFS, - SFVFS, - GPV, - GFV, - SFVTPV, - ISECT, - SRP0, - SRP1, - SRP2, - SZP0, - SZP1, - SZP2, - SZPS, - SLOOP, - RTG, - RTHG, - SMD, - ELSE, - JMPR, - SCVTCI, - void 0, - void 0, - DUP, - POP, - CLEAR, - SWAP, - DEPTH, - CINDEX, - MINDEX, - void 0, - void 0, - void 0, - LOOPCALL, - CALL, - FDEF, - void 0, - MDAP.bind(void 0, 0), - MDAP.bind(void 0, 1), - IUP.bind(void 0, yUnitVector), - IUP.bind(void 0, xUnitVector), - SHP.bind(void 0, 0), - SHP.bind(void 0, 1), - SHC.bind(void 0, 0), - SHC.bind(void 0, 1), - SHZ.bind(void 0, 0), - SHZ.bind(void 0, 1), - SHPIX, - IP, - MSIRP.bind(void 0, 0), - MSIRP.bind(void 0, 1), - ALIGNRP, - RTDG, - MIAP.bind(void 0, 0), - MIAP.bind(void 0, 1), - NPUSHB, - NPUSHW, - WS, - RS, - WCVTP, - RCVT, - GC.bind(void 0, 0), - GC.bind(void 0, 1), - void 0, - MD.bind(void 0, 0), - MD.bind(void 0, 1), - MPPEM, - void 0, - FLIPON, - void 0, - void 0, - LT, - LTEQ, - GT, - GTEQ, - EQ, - NEQ, - ODD, - EVEN, - IF, - EIF, - AND, - OR, - NOT, - DELTAP123.bind(void 0, 1), - SDB, - SDS, - ADD, - SUB, - DIV, - MUL, - ABS, - NEG, - FLOOR, - CEILING, - ROUND.bind(void 0, 0), - ROUND.bind(void 0, 1), - ROUND.bind(void 0, 2), - ROUND.bind(void 0, 3), - void 0, - void 0, - void 0, - void 0, - WCVTF, - DELTAP123.bind(void 0, 2), - DELTAP123.bind(void 0, 3), - DELTAC123.bind(void 0, 1), - DELTAC123.bind(void 0, 2), - DELTAC123.bind(void 0, 3), - SROUND, - S45ROUND, - void 0, - void 0, - ROFF, - void 0, - RUTG, - RDTG, - POP, - POP, - void 0, - void 0, - void 0, - void 0, - void 0, - SCANCTRL, - SDPVTL.bind(void 0, 0), - SDPVTL.bind(void 0, 1), - GETINFO, - void 0, - ROLL, - MAX, - MIN, - SCANTYPE, - INSTCTRL, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - void 0, - PUSHB.bind(void 0, 1), - PUSHB.bind(void 0, 2), - PUSHB.bind(void 0, 3), - PUSHB.bind(void 0, 4), - PUSHB.bind(void 0, 5), - PUSHB.bind(void 0, 6), - PUSHB.bind(void 0, 7), - PUSHB.bind(void 0, 8), - PUSHW.bind(void 0, 1), - PUSHW.bind(void 0, 2), - PUSHW.bind(void 0, 3), - PUSHW.bind(void 0, 4), - PUSHW.bind(void 0, 5), - PUSHW.bind(void 0, 6), - PUSHW.bind(void 0, 7), - PUSHW.bind(void 0, 8), - MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 0), - MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 1), - MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 2), - MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 3), - MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 0), - MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 1), - MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 2), - MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 3), - MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 0), - MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 1), - MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 2), - MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 3), - MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 0), - MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 1), - MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 2), - MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 3), - MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 0), - MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 1), - MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 2), - MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 3), - MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 0), - MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 1), - MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 2), - MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 3), - MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 0), - MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 1), - MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 2), - MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 3), - MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 0), - MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 1), - MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 2), - MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 3), - MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 0), - MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 1), - MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 2), - MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 3), - MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 0), - MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 1), - MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 2), - MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 3), - MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 0), - MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 1), - MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 2), - MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 3), - MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 0), - MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 1), - MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 2), - MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 3), - MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 0), - MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 1), - MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 2), - MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 3), - MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 0), - MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 1), - MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 2), - MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 3), - MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 0), - MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 1), - MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 2), - MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 3), - MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 0), - MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 1), - MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 2), - MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 3) - ]; - function Token(char) { - this.char = char; - this.state = {}; - this.activeState = null; - } - function ContextRange(startIndex, endOffset, contextName) { - this.contextName = contextName; - this.startIndex = startIndex; - this.endOffset = endOffset; - } - function ContextChecker(contextName, checkStart, checkEnd) { - this.contextName = contextName; - this.openRange = null; - this.ranges = []; - this.checkStart = checkStart; - this.checkEnd = checkEnd; - } - function ContextParams(context, currentIndex) { - this.context = context; - this.index = currentIndex; - this.length = context.length; - this.current = context[currentIndex]; - this.backtrack = context.slice(0, currentIndex); - this.lookahead = context.slice(currentIndex + 1); - } - function Event(eventId) { - this.eventId = eventId; - this.subscribers = []; - } - function initializeCoreEvents(events) { - var this$1$1 = this; - var coreEvents = [ - "start", - "end", - "next", - "newToken", - "contextStart", - "contextEnd", - "insertToken", - "removeToken", - "removeRange", - "replaceToken", - "replaceRange", - "composeRUD", - "updateContextsRanges" - ]; - coreEvents.forEach(function(eventId) { - Object.defineProperty(this$1$1.events, eventId, { value: new Event(eventId) }); - }); - if (!!events) coreEvents.forEach(function(eventId) { - var event = events[eventId]; - if (typeof event === "function") this$1$1.events[eventId].subscribe(event); - }); - [ - "insertToken", - "removeToken", - "removeRange", - "replaceToken", - "replaceRange", - "composeRUD" - ].forEach(function(eventId) { - this$1$1.events[eventId].subscribe(this$1$1.updateContextsRanges); - }); - } - function Tokenizer(events) { - this.tokens = []; - this.registeredContexts = {}; - this.contextCheckers = []; - this.events = {}; - this.registeredModifiers = []; - initializeCoreEvents.call(this, events); - } - Token.prototype.setState = function(key, value) { - this.state[key] = value; - this.activeState = { - key, - value: this.state[key] - }; - return this.activeState; - }; - Token.prototype.getState = function(stateId) { - return this.state[stateId] || null; - }; - Tokenizer.prototype.inboundIndex = function(index) { - return index >= 0 && index < this.tokens.length; - }; - Tokenizer.prototype.composeRUD = function(RUDs) { - var this$1$1 = this; - var silent = true; - var state = RUDs.map(function(RUD) { - return this$1$1[RUD[0]].apply(this$1$1, RUD.slice(1).concat(silent)); - }); - var hasFAILObject = function(obj) { - return typeof obj === "object" && obj.hasOwnProperty("FAIL"); - }; - if (state.every(hasFAILObject)) return { - FAIL: "composeRUD: one or more operations hasn't completed successfully", - report: state.filter(hasFAILObject) - }; - this.dispatch("composeRUD", [state.filter(function(op) { - return !hasFAILObject(op); - })]); - }; - Tokenizer.prototype.replaceRange = function(startIndex, offset, tokens, silent) { - offset = offset !== null ? offset : this.tokens.length; - var isTokenType = tokens.every(function(token) { - return token instanceof Token; - }); - if (!isNaN(startIndex) && this.inboundIndex(startIndex) && isTokenType) { - var replaced = this.tokens.splice.apply(this.tokens, [startIndex, offset].concat(tokens)); - if (!silent) this.dispatch("replaceToken", [ - startIndex, - offset, - tokens - ]); - return [replaced, tokens]; - } else return { FAIL: "replaceRange: invalid tokens or startIndex." }; - }; - Tokenizer.prototype.replaceToken = function(index, token, silent) { - if (!isNaN(index) && this.inboundIndex(index) && token instanceof Token) { - var replaced = this.tokens.splice(index, 1, token); - if (!silent) this.dispatch("replaceToken", [index, token]); - return [replaced[0], token]; - } else return { FAIL: "replaceToken: invalid token or index." }; - }; - Tokenizer.prototype.removeRange = function(startIndex, offset, silent) { - offset = !isNaN(offset) ? offset : this.tokens.length; - var tokens = this.tokens.splice(startIndex, offset); - if (!silent) this.dispatch("removeRange", [ - tokens, - startIndex, - offset - ]); - return tokens; - }; - Tokenizer.prototype.removeToken = function(index, silent) { - if (!isNaN(index) && this.inboundIndex(index)) { - var token = this.tokens.splice(index, 1); - if (!silent) this.dispatch("removeToken", [token, index]); - return token; - } else return { FAIL: "removeToken: invalid token index." }; - }; - Tokenizer.prototype.insertToken = function(tokens, index, silent) { - if (tokens.every(function(token) { - return token instanceof Token; - })) { - this.tokens.splice.apply(this.tokens, [index, 0].concat(tokens)); - if (!silent) this.dispatch("insertToken", [tokens, index]); - return tokens; - } else return { FAIL: "insertToken: invalid token(s)." }; - }; - Tokenizer.prototype.registerModifier = function(modifierId, condition, modifier) { - this.events.newToken.subscribe(function(token, contextParams) { - var conditionParams = [token, contextParams]; - var canApplyModifier = condition === null || condition.apply(this, conditionParams) === true; - var modifierParams = [token, contextParams]; - if (canApplyModifier) { - var newStateValue = modifier.apply(this, modifierParams); - token.setState(modifierId, newStateValue); - } - }); - this.registeredModifiers.push(modifierId); - }; - Event.prototype.subscribe = function(eventHandler) { - if (typeof eventHandler === "function") return this.subscribers.push(eventHandler) - 1; - else return { FAIL: "invalid '" + this.eventId + "' event handler" }; - }; - Event.prototype.unsubscribe = function(subsId) { - this.subscribers.splice(subsId, 1); - }; - ContextParams.prototype.setCurrentIndex = function(index) { - this.index = index; - this.current = this.context[index]; - this.backtrack = this.context.slice(0, index); - this.lookahead = this.context.slice(index + 1); - }; - ContextParams.prototype.get = function(offset) { - switch (true) { - case offset === 0: return this.current; - case offset < 0 && Math.abs(offset) <= this.backtrack.length: return this.backtrack.slice(offset)[0]; - case offset > 0 && offset <= this.lookahead.length: return this.lookahead[offset - 1]; - default: return null; - } - }; - Tokenizer.prototype.rangeToText = function(range) { - if (range instanceof ContextRange) return this.getRangeTokens(range).map(function(token) { - return token.char; - }).join(""); - }; - Tokenizer.prototype.getText = function() { - return this.tokens.map(function(token) { - return token.char; - }).join(""); - }; - Tokenizer.prototype.getContext = function(contextName) { - var context = this.registeredContexts[contextName]; - return !!context ? context : null; - }; - Tokenizer.prototype.on = function(eventName, eventHandler) { - var event = this.events[eventName]; - if (!!event) return event.subscribe(eventHandler); - else return null; - }; - Tokenizer.prototype.dispatch = function(eventName, args) { - var this$1$1 = this; - var event = this.events[eventName]; - if (event instanceof Event) event.subscribers.forEach(function(subscriber) { - subscriber.apply(this$1$1, args || []); - }); - }; - Tokenizer.prototype.registerContextChecker = function(contextName, contextStartCheck, contextEndCheck) { - if (!!this.getContext(contextName)) return { FAIL: "context name '" + contextName + "' is already registered." }; - if (typeof contextStartCheck !== "function") return { FAIL: "missing context start check." }; - if (typeof contextEndCheck !== "function") return { FAIL: "missing context end check." }; - var contextCheckers = new ContextChecker(contextName, contextStartCheck, contextEndCheck); - this.registeredContexts[contextName] = contextCheckers; - this.contextCheckers.push(contextCheckers); - return contextCheckers; - }; - Tokenizer.prototype.getRangeTokens = function(range) { - var endIndex = range.startIndex + range.endOffset; - return [].concat(this.tokens.slice(range.startIndex, endIndex)); - }; - Tokenizer.prototype.getContextRanges = function(contextName) { - var context = this.getContext(contextName); - if (!!context) return context.ranges; - else return { FAIL: "context checker '" + contextName + "' is not registered." }; - }; - Tokenizer.prototype.resetContextsRanges = function() { - var registeredContexts = this.registeredContexts; - for (var contextName in registeredContexts) if (registeredContexts.hasOwnProperty(contextName)) { - var context = registeredContexts[contextName]; - context.ranges = []; - } - }; - Tokenizer.prototype.updateContextsRanges = function() { - this.resetContextsRanges(); - var chars = this.tokens.map(function(token) { - return token.char; - }); - for (var i = 0; i < chars.length; i++) { - var contextParams = new ContextParams(chars, i); - this.runContextCheck(contextParams); - } - this.dispatch("updateContextsRanges", [this.registeredContexts]); - }; - Tokenizer.prototype.setEndOffset = function(offset, contextName) { - var startIndex = this.getContext(contextName).openRange.startIndex; - var range = new ContextRange(startIndex, offset, contextName); - var ranges = this.getContext(contextName).ranges; - range.rangeId = contextName + "." + ranges.length; - ranges.push(range); - this.getContext(contextName).openRange = null; - return range; - }; - Tokenizer.prototype.runContextCheck = function(contextParams) { - var this$1$1 = this; - var index = contextParams.index; - this.contextCheckers.forEach(function(contextChecker) { - var contextName = contextChecker.contextName; - var openRange = this$1$1.getContext(contextName).openRange; - if (!openRange && contextChecker.checkStart(contextParams)) { - openRange = new ContextRange(index, null, contextName); - this$1$1.getContext(contextName).openRange = openRange; - this$1$1.dispatch("contextStart", [contextName, index]); - } - if (!!openRange && contextChecker.checkEnd(contextParams)) { - var offset = index - openRange.startIndex + 1; - var range = this$1$1.setEndOffset(offset, contextName); - this$1$1.dispatch("contextEnd", [contextName, range]); - } - }); - }; - Tokenizer.prototype.tokenize = function(text) { - this.tokens = []; - this.resetContextsRanges(); - var chars = Array.from(text); - this.dispatch("start"); - for (var i = 0; i < chars.length; i++) { - var char = chars[i]; - var contextParams = new ContextParams(chars, i); - this.dispatch("next", [contextParams]); - this.runContextCheck(contextParams); - var token = new Token(char); - this.tokens.push(token); - this.dispatch("newToken", [token, contextParams]); - } - this.dispatch("end", [this.tokens]); - return this.tokens; - }; - function isArabicChar(c) { - return /[\u0600-\u065F\u066A-\u06D2\u06FA-\u06FF]/.test(c); - } - function isIsolatedArabicChar(char) { - return /[\u0630\u0690\u0621\u0631\u0661\u0671\u0622\u0632\u0672\u0692\u06C2\u0623\u0673\u0693\u06C3\u0624\u0694\u06C4\u0625\u0675\u0695\u06C5\u06E5\u0676\u0696\u06C6\u0627\u0677\u0697\u06C7\u0648\u0688\u0698\u06C8\u0689\u0699\u06C9\u068A\u06CA\u066B\u068B\u06CB\u068C\u068D\u06CD\u06FD\u068E\u06EE\u06FE\u062F\u068F\u06CF\u06EF]/.test(char); - } - function isTashkeelArabicChar(char) { - return /[\u0600-\u0605\u060C-\u060E\u0610-\u061B\u061E\u064B-\u065F\u0670\u06D6-\u06DC\u06DF-\u06E4\u06E7\u06E8\u06EA-\u06ED]/.test(char); - } - function isLatinChar(c) { - return /[A-z]/.test(c); - } - function isWhiteSpace(c) { - return /\s/.test(c); - } - function FeatureQuery(font) { - this.font = font; - this.features = {}; - } - function SubstitutionAction(action) { - this.id = action.id; - this.tag = action.tag; - this.substitution = action.substitution; - } - function lookupCoverage(glyphIndex, coverage) { - if (!glyphIndex) return -1; - switch (coverage.format) { - case 1: return coverage.glyphs.indexOf(glyphIndex); - case 2: - var ranges = coverage.ranges; - for (var i = 0; i < ranges.length; i++) { - var range = ranges[i]; - if (glyphIndex >= range.start && glyphIndex <= range.end) { - var offset = glyphIndex - range.start; - return range.index + offset; - } - } - break; - default: return -1; - } - return -1; - } - function singleSubstitutionFormat1(glyphIndex, subtable) { - if (lookupCoverage(glyphIndex, subtable.coverage) === -1) return null; - return glyphIndex + subtable.deltaGlyphId; - } - function singleSubstitutionFormat2(glyphIndex, subtable) { - var substituteIndex = lookupCoverage(glyphIndex, subtable.coverage); - if (substituteIndex === -1) return null; - return subtable.substitute[substituteIndex]; - } - function lookupCoverageList(coverageList, contextParams) { - var lookupList = []; - for (var i = 0; i < coverageList.length; i++) { - var coverage = coverageList[i]; - var glyphIndex = contextParams.current; - glyphIndex = Array.isArray(glyphIndex) ? glyphIndex[0] : glyphIndex; - var lookupIndex = lookupCoverage(glyphIndex, coverage); - if (lookupIndex !== -1) lookupList.push(lookupIndex); - } - if (lookupList.length !== coverageList.length) return -1; - return lookupList; - } - function chainingSubstitutionFormat3(contextParams, subtable) { - var lookupsCount = subtable.inputCoverage.length + subtable.lookaheadCoverage.length + subtable.backtrackCoverage.length; - if (contextParams.context.length < lookupsCount) return []; - var inputLookups = lookupCoverageList(subtable.inputCoverage, contextParams); - if (inputLookups === -1) return []; - var lookaheadOffset = subtable.inputCoverage.length - 1; - if (contextParams.lookahead.length < subtable.lookaheadCoverage.length) return []; - var lookaheadContext = contextParams.lookahead.slice(lookaheadOffset); - while (lookaheadContext.length && isTashkeelArabicChar(lookaheadContext[0].char)) lookaheadContext.shift(); - var lookaheadParams = new ContextParams(lookaheadContext, 0); - var lookaheadLookups = lookupCoverageList(subtable.lookaheadCoverage, lookaheadParams); - var backtrackContext = [].concat(contextParams.backtrack); - backtrackContext.reverse(); - while (backtrackContext.length && isTashkeelArabicChar(backtrackContext[0].char)) backtrackContext.shift(); - if (backtrackContext.length < subtable.backtrackCoverage.length) return []; - var backtrackParams = new ContextParams(backtrackContext, 0); - var backtrackLookups = lookupCoverageList(subtable.backtrackCoverage, backtrackParams); - var contextRulesMatch = inputLookups.length === subtable.inputCoverage.length && lookaheadLookups.length === subtable.lookaheadCoverage.length && backtrackLookups.length === subtable.backtrackCoverage.length; - var substitutions = []; - if (contextRulesMatch) for (var i = 0; i < subtable.lookupRecords.length; i++) { - var lookupListIndex = subtable.lookupRecords[i].lookupListIndex; - var lookupTable = this.getLookupByIndex(lookupListIndex); - for (var s = 0; s < lookupTable.subtables.length; s++) { - var subtable$1 = lookupTable.subtables[s]; - var lookup = this.getLookupMethod(lookupTable, subtable$1); - if (this.getSubstitutionType(lookupTable, subtable$1) === "12") for (var n = 0; n < inputLookups.length; n++) { - var substitution = lookup(contextParams.get(n)); - if (substitution) substitutions.push(substitution); - } - } - } - return substitutions; - } - function ligatureSubstitutionFormat1(contextParams, subtable) { - var glyphIndex = contextParams.current; - var ligSetIndex = lookupCoverage(glyphIndex, subtable.coverage); - if (ligSetIndex === -1) return null; - var ligature; - var ligatureSet = subtable.ligatureSets[ligSetIndex]; - for (var s = 0; s < ligatureSet.length; s++) { - ligature = ligatureSet[s]; - for (var l = 0; l < ligature.components.length; l++) { - if (contextParams.lookahead[l] !== ligature.components[l]) break; - if (l === ligature.components.length - 1) return ligature; - } - } - return null; - } - function decompositionSubstitutionFormat1(glyphIndex, subtable) { - var substituteIndex = lookupCoverage(glyphIndex, subtable.coverage); - if (substituteIndex === -1) return null; - return subtable.sequences[substituteIndex]; - } - FeatureQuery.prototype.getDefaultScriptFeaturesIndexes = function() { - var scripts = this.font.tables.gsub.scripts; - for (var s = 0; s < scripts.length; s++) { - var script = scripts[s]; - if (script.tag === "DFLT") return script.script.defaultLangSys.featureIndexes; - } - return []; - }; - FeatureQuery.prototype.getScriptFeaturesIndexes = function(scriptTag) { - if (!this.font.tables.gsub) return []; - if (!scriptTag) return this.getDefaultScriptFeaturesIndexes(); - var scripts = this.font.tables.gsub.scripts; - for (var i = 0; i < scripts.length; i++) { - var script = scripts[i]; - if (script.tag === scriptTag && script.script.defaultLangSys) return script.script.defaultLangSys.featureIndexes; - else { - var langSysRecords = script.langSysRecords; - if (!!langSysRecords) for (var j = 0; j < langSysRecords.length; j++) { - var langSysRecord = langSysRecords[j]; - if (langSysRecord.tag === scriptTag) return langSysRecord.langSys.featureIndexes; - } - } - } - return this.getDefaultScriptFeaturesIndexes(); - }; - FeatureQuery.prototype.mapTagsToFeatures = function(features, scriptTag) { - var tags = {}; - for (var i = 0; i < features.length; i++) { - var tag = features[i].tag; - tags[tag] = features[i].feature; - } - this.features[scriptTag].tags = tags; - }; - FeatureQuery.prototype.getScriptFeatures = function(scriptTag) { - var features = this.features[scriptTag]; - if (this.features.hasOwnProperty(scriptTag)) return features; - var featuresIndexes = this.getScriptFeaturesIndexes(scriptTag); - if (!featuresIndexes) return null; - var gsub2 = this.font.tables.gsub; - features = featuresIndexes.map(function(index) { - return gsub2.features[index]; - }); - this.features[scriptTag] = features; - this.mapTagsToFeatures(features, scriptTag); - return features; - }; - FeatureQuery.prototype.getSubstitutionType = function(lookupTable, subtable) { - return lookupTable.lookupType.toString() + subtable.substFormat.toString(); - }; - FeatureQuery.prototype.getLookupMethod = function(lookupTable, subtable) { - var this$1$1 = this; - switch (this.getSubstitutionType(lookupTable, subtable)) { - case "11": return function(glyphIndex) { - return singleSubstitutionFormat1.apply(this$1$1, [glyphIndex, subtable]); - }; - case "12": return function(glyphIndex) { - return singleSubstitutionFormat2.apply(this$1$1, [glyphIndex, subtable]); - }; - case "63": return function(contextParams) { - return chainingSubstitutionFormat3.apply(this$1$1, [contextParams, subtable]); - }; - case "41": return function(contextParams) { - return ligatureSubstitutionFormat1.apply(this$1$1, [contextParams, subtable]); - }; - case "21": return function(glyphIndex) { - return decompositionSubstitutionFormat1.apply(this$1$1, [glyphIndex, subtable]); - }; - default: throw new Error("lookupType: " + lookupTable.lookupType + " - substFormat: " + subtable.substFormat + " is not yet supported"); - } - }; - FeatureQuery.prototype.lookupFeature = function(query) { - var contextParams = query.contextParams; - var currentIndex = contextParams.index; - var feature = this.getFeature({ - tag: query.tag, - script: query.script - }); - if (!feature) return /* @__PURE__ */ new Error("font '" + this.font.names.fullName.en + "' doesn't support feature '" + query.tag + "' for script '" + query.script + "'."); - var lookups = this.getFeatureLookups(feature); - var substitutions = [].concat(contextParams.context); - for (var l = 0; l < lookups.length; l++) { - var lookupTable = lookups[l]; - var subtables = this.getLookupSubtables(lookupTable); - for (var s = 0; s < subtables.length; s++) { - var subtable = subtables[s]; - var substType = this.getSubstitutionType(lookupTable, subtable); - var lookup = this.getLookupMethod(lookupTable, subtable); - var substitution = void 0; - switch (substType) { - case "11": - substitution = lookup(contextParams.current); - if (substitution) substitutions.splice(currentIndex, 1, new SubstitutionAction({ - id: 11, - tag: query.tag, - substitution - })); - break; - case "12": - substitution = lookup(contextParams.current); - if (substitution) substitutions.splice(currentIndex, 1, new SubstitutionAction({ - id: 12, - tag: query.tag, - substitution - })); - break; - case "63": - substitution = lookup(contextParams); - if (Array.isArray(substitution) && substitution.length) substitutions.splice(currentIndex, 1, new SubstitutionAction({ - id: 63, - tag: query.tag, - substitution - })); - break; - case "41": - substitution = lookup(contextParams); - if (substitution) substitutions.splice(currentIndex, 1, new SubstitutionAction({ - id: 41, - tag: query.tag, - substitution - })); - break; - case "21": - substitution = lookup(contextParams.current); - if (substitution) substitutions.splice(currentIndex, 1, new SubstitutionAction({ - id: 21, - tag: query.tag, - substitution - })); - break; - } - contextParams = new ContextParams(substitutions, currentIndex); - if (Array.isArray(substitution) && !substitution.length) continue; - substitution = null; - } - } - return substitutions.length ? substitutions : null; - }; - FeatureQuery.prototype.supports = function(query) { - if (!query.script) return false; - this.getScriptFeatures(query.script); - var supportedScript = this.features.hasOwnProperty(query.script); - if (!query.tag) return supportedScript; - var supportedFeature = this.features[query.script].some(function(feature) { - return feature.tag === query.tag; - }); - return supportedScript && supportedFeature; - }; - FeatureQuery.prototype.getLookupSubtables = function(lookupTable) { - return lookupTable.subtables || null; - }; - FeatureQuery.prototype.getLookupByIndex = function(index) { - return this.font.tables.gsub.lookups[index] || null; - }; - FeatureQuery.prototype.getFeatureLookups = function(feature) { - return feature.lookupListIndexes.map(this.getLookupByIndex.bind(this)); - }; - FeatureQuery.prototype.getFeature = function getFeature(query) { - if (!this.font) return { FAIL: "No font was found" }; - if (!this.features.hasOwnProperty(query.script)) this.getScriptFeatures(query.script); - var scriptFeatures = this.features[query.script]; - if (!scriptFeatures) return { FAIL: "No feature for script " + query.script }; - if (!scriptFeatures.tags[query.tag]) return null; - return this.features[query.script].tags[query.tag]; - }; - function arabicWordStartCheck(contextParams) { - var char = contextParams.current; - var prevChar = contextParams.get(-1); - return prevChar === null && isArabicChar(char) || !isArabicChar(prevChar) && isArabicChar(char); - } - function arabicWordEndCheck(contextParams) { - var nextChar = contextParams.get(1); - return nextChar === null || !isArabicChar(nextChar); - } - var arabicWordCheck = { - startCheck: arabicWordStartCheck, - endCheck: arabicWordEndCheck - }; - function arabicSentenceStartCheck(contextParams) { - var char = contextParams.current; - var prevChar = contextParams.get(-1); - return (isArabicChar(char) || isTashkeelArabicChar(char)) && !isArabicChar(prevChar); - } - function arabicSentenceEndCheck(contextParams) { - var nextChar = contextParams.get(1); - switch (true) { - case nextChar === null: return true; - case !isArabicChar(nextChar) && !isTashkeelArabicChar(nextChar): - var nextIsWhitespace = isWhiteSpace(nextChar); - if (!nextIsWhitespace) return true; - if (nextIsWhitespace) { - var arabicCharAhead = false; - arabicCharAhead = contextParams.lookahead.some(function(c) { - return isArabicChar(c) || isTashkeelArabicChar(c); - }); - if (!arabicCharAhead) return true; - } - break; - default: return false; - } - } - var arabicSentenceCheck = { - startCheck: arabicSentenceStartCheck, - endCheck: arabicSentenceEndCheck - }; - function singleSubstitutionFormat1$1(action, tokens, index) { - tokens[index].setState(action.tag, action.substitution); - } - function singleSubstitutionFormat2$1(action, tokens, index) { - tokens[index].setState(action.tag, action.substitution); - } - function chainingSubstitutionFormat3$1(action, tokens, index) { - action.substitution.forEach(function(subst, offset) { - tokens[index + offset].setState(action.tag, subst); - }); - } - function ligatureSubstitutionFormat1$1(action, tokens, index) { - var token = tokens[index]; - token.setState(action.tag, action.substitution.ligGlyph); - var compsCount = action.substitution.components.length; - for (var i = 0; i < compsCount; i++) { - token = tokens[index + i + 1]; - token.setState("deleted", true); - } - } - var SUBSTITUTIONS = { - 11: singleSubstitutionFormat1$1, - 12: singleSubstitutionFormat2$1, - 63: chainingSubstitutionFormat3$1, - 41: ligatureSubstitutionFormat1$1 - }; - function applySubstitution(action, tokens, index) { - if (action instanceof SubstitutionAction && SUBSTITUTIONS[action.id]) SUBSTITUTIONS[action.id](action, tokens, index); - } - function willConnectPrev(charContextParams) { - var backtrack = [].concat(charContextParams.backtrack); - for (var i = backtrack.length - 1; i >= 0; i--) { - var prevChar = backtrack[i]; - var isolated = isIsolatedArabicChar(prevChar); - var tashkeel = isTashkeelArabicChar(prevChar); - if (!isolated && !tashkeel) return true; - if (isolated) return false; - } - return false; - } - function willConnectNext(charContextParams) { - if (isIsolatedArabicChar(charContextParams.current)) return false; - for (var i = 0; i < charContextParams.lookahead.length; i++) { - var nextChar = charContextParams.lookahead[i]; - if (!isTashkeelArabicChar(nextChar)) return true; - } - return false; - } - function arabicPresentationForms(range) { - var this$1$1 = this; - var script = "arab"; - var tags = this.featuresTags[script]; - var tokens = this.tokenizer.getRangeTokens(range); - if (tokens.length === 1) return; - var contextParams = new ContextParams(tokens.map(function(token) { - return token.getState("glyphIndex"); - }), 0); - var charContextParams = new ContextParams(tokens.map(function(token) { - return token.char; - }), 0); - tokens.forEach(function(token, index) { - if (isTashkeelArabicChar(token.char)) return; - contextParams.setCurrentIndex(index); - charContextParams.setCurrentIndex(index); - var CONNECT = 0; - if (willConnectPrev(charContextParams)) CONNECT |= 1; - if (willConnectNext(charContextParams)) CONNECT |= 2; - var tag; - switch (CONNECT) { - case 1: - tag = "fina"; - break; - case 2: - tag = "init"; - break; - case 3: - tag = "medi"; - break; - } - if (tags.indexOf(tag) === -1) return; - var substitutions = this$1$1.query.lookupFeature({ - tag, - script, - contextParams - }); - if (substitutions instanceof Error) return console.info(substitutions.message); - substitutions.forEach(function(action, index2) { - if (action instanceof SubstitutionAction) { - applySubstitution(action, tokens, index2); - contextParams.context[index2] = action.substitution; - } - }); - }); - } - function getContextParams(tokens, index) { - return new ContextParams(tokens.map(function(token) { - return token.activeState.value; - }), index || 0); - } - function arabicRequiredLigatures(range) { - var this$1$1 = this; - var script = "arab"; - var tokens = this.tokenizer.getRangeTokens(range); - var contextParams = getContextParams(tokens); - contextParams.context.forEach(function(glyphIndex, index) { - contextParams.setCurrentIndex(index); - var substitutions = this$1$1.query.lookupFeature({ - tag: "rlig", - script, - contextParams - }); - if (substitutions.length) { - substitutions.forEach(function(action) { - return applySubstitution(action, tokens, index); - }); - contextParams = getContextParams(tokens); - } - }); - } - function latinWordStartCheck(contextParams) { - var char = contextParams.current; - var prevChar = contextParams.get(-1); - return prevChar === null && isLatinChar(char) || !isLatinChar(prevChar) && isLatinChar(char); - } - function latinWordEndCheck(contextParams) { - var nextChar = contextParams.get(1); - return nextChar === null || !isLatinChar(nextChar); - } - var latinWordCheck = { - startCheck: latinWordStartCheck, - endCheck: latinWordEndCheck - }; - function getContextParams$1(tokens, index) { - return new ContextParams(tokens.map(function(token) { - return token.activeState.value; - }), index || 0); - } - function latinLigature(range) { - var this$1$1 = this; - var script = "latn"; - var tokens = this.tokenizer.getRangeTokens(range); - var contextParams = getContextParams$1(tokens); - contextParams.context.forEach(function(glyphIndex, index) { - contextParams.setCurrentIndex(index); - var substitutions = this$1$1.query.lookupFeature({ - tag: "liga", - script, - contextParams - }); - if (substitutions.length) { - substitutions.forEach(function(action) { - return applySubstitution(action, tokens, index); - }); - contextParams = getContextParams$1(tokens); - } - }); - } - function Bidi(baseDir) { - this.baseDir = baseDir || "ltr"; - this.tokenizer = new Tokenizer(); - this.featuresTags = {}; - } - Bidi.prototype.setText = function(text) { - this.text = text; - }; - Bidi.prototype.contextChecks = { - latinWordCheck, - arabicWordCheck, - arabicSentenceCheck - }; - function registerContextChecker(checkId) { - var check2 = this.contextChecks[checkId + "Check"]; - return this.tokenizer.registerContextChecker(checkId, check2.startCheck, check2.endCheck); - } - function tokenizeText() { - registerContextChecker.call(this, "latinWord"); - registerContextChecker.call(this, "arabicWord"); - registerContextChecker.call(this, "arabicSentence"); - return this.tokenizer.tokenize(this.text); - } - function reverseArabicSentences() { - var this$1$1 = this; - this.tokenizer.getContextRanges("arabicSentence").forEach(function(range) { - var rangeTokens = this$1$1.tokenizer.getRangeTokens(range); - this$1$1.tokenizer.replaceRange(range.startIndex, range.endOffset, rangeTokens.reverse()); - }); - } - Bidi.prototype.registerFeatures = function(script, tags) { - var this$1$1 = this; - var supportedTags = tags.filter(function(tag) { - return this$1$1.query.supports({ - script, - tag - }); - }); - if (!this.featuresTags.hasOwnProperty(script)) this.featuresTags[script] = supportedTags; - else this.featuresTags[script] = this.featuresTags[script].concat(supportedTags); - }; - Bidi.prototype.applyFeatures = function(font, features) { - if (!font) throw new Error("No valid font was provided to apply features"); - if (!this.query) this.query = new FeatureQuery(font); - for (var f = 0; f < features.length; f++) { - var feature = features[f]; - if (!this.query.supports({ script: feature.script })) continue; - this.registerFeatures(feature.script, feature.tags); - } - }; - Bidi.prototype.registerModifier = function(modifierId, condition, modifier) { - this.tokenizer.registerModifier(modifierId, condition, modifier); - }; - function checkGlyphIndexStatus() { - if (this.tokenizer.registeredModifiers.indexOf("glyphIndex") === -1) throw new Error("glyphIndex modifier is required to apply arabic presentation features."); - } - function applyArabicPresentationForms() { - var this$1$1 = this; - if (!this.featuresTags.hasOwnProperty("arab")) return; - checkGlyphIndexStatus.call(this); - this.tokenizer.getContextRanges("arabicWord").forEach(function(range) { - arabicPresentationForms.call(this$1$1, range); - }); - } - function applyArabicRequireLigatures() { - var this$1$1 = this; - var script = "arab"; - if (!this.featuresTags.hasOwnProperty(script)) return; - if (this.featuresTags[script].indexOf("rlig") === -1) return; - checkGlyphIndexStatus.call(this); - this.tokenizer.getContextRanges("arabicWord").forEach(function(range) { - arabicRequiredLigatures.call(this$1$1, range); - }); - } - function applyLatinLigatures() { - var this$1$1 = this; - var script = "latn"; - if (!this.featuresTags.hasOwnProperty(script)) return; - if (this.featuresTags[script].indexOf("liga") === -1) return; - checkGlyphIndexStatus.call(this); - this.tokenizer.getContextRanges("latinWord").forEach(function(range) { - latinLigature.call(this$1$1, range); - }); - } - Bidi.prototype.checkContextReady = function(contextId) { - return !!this.tokenizer.getContext(contextId); - }; - Bidi.prototype.applyFeaturesToContexts = function() { - if (this.checkContextReady("arabicWord")) { - applyArabicPresentationForms.call(this); - applyArabicRequireLigatures.call(this); - } - if (this.checkContextReady("latinWord")) applyLatinLigatures.call(this); - if (this.checkContextReady("arabicSentence")) reverseArabicSentences.call(this); - }; - Bidi.prototype.processText = function(text) { - if (!this.text || this.text !== text) { - this.setText(text); - tokenizeText.call(this); - this.applyFeaturesToContexts(); - } - }; - Bidi.prototype.getBidiText = function(text) { - this.processText(text); - return this.tokenizer.getText(); - }; - Bidi.prototype.getTextGlyphs = function(text) { - this.processText(text); - var indexes = []; - for (var i = 0; i < this.tokenizer.tokens.length; i++) { - var token = this.tokenizer.tokens[i]; - if (token.state.deleted) continue; - var index = token.activeState.value; - indexes.push(Array.isArray(index) ? index[0] : index); - } - return indexes; - }; - function Font(options) { - options = options || {}; - options.tables = options.tables || {}; - if (!options.empty) { - checkArgument(options.familyName, "When creating a new Font object, familyName is required."); - checkArgument(options.styleName, "When creating a new Font object, styleName is required."); - checkArgument(options.unitsPerEm, "When creating a new Font object, unitsPerEm is required."); - checkArgument(options.ascender, "When creating a new Font object, ascender is required."); - checkArgument(options.descender <= 0, "When creating a new Font object, negative descender value is required."); - this.names = { - fontFamily: { en: options.familyName || " " }, - fontSubfamily: { en: options.styleName || " " }, - fullName: { en: options.fullName || options.familyName + " " + options.styleName }, - postScriptName: { en: options.postScriptName || (options.familyName + options.styleName).replace(/\s/g, "") }, - designer: { en: options.designer || " " }, - designerURL: { en: options.designerURL || " " }, - manufacturer: { en: options.manufacturer || " " }, - manufacturerURL: { en: options.manufacturerURL || " " }, - license: { en: options.license || " " }, - licenseURL: { en: options.licenseURL || " " }, - version: { en: options.version || "Version 0.1" }, - description: { en: options.description || " " }, - copyright: { en: options.copyright || " " }, - trademark: { en: options.trademark || " " } - }; - this.unitsPerEm = options.unitsPerEm || 1e3; - this.ascender = options.ascender; - this.descender = options.descender; - this.createdTimestamp = options.createdTimestamp; - this.tables = Object.assign(options.tables, { os2: Object.assign({ - usWeightClass: options.weightClass || this.usWeightClasses.MEDIUM, - usWidthClass: options.widthClass || this.usWidthClasses.MEDIUM, - fsSelection: options.fsSelection || this.fsSelectionValues.REGULAR - }, options.tables.os2) }); - } - this.supported = true; - this.glyphs = new glyphset.GlyphSet(this, options.glyphs || []); - this.encoding = new DefaultEncoding(this); - this.position = new Position(this); - this.substitution = new Substitution(this); - this.tables = this.tables || {}; - this._push = null; - this._hmtxTableData = {}; - Object.defineProperty(this, "hinting", { get: function() { - if (this._hinting) return this._hinting; - if (this.outlinesFormat === "truetype") return this._hinting = new Hinting(this); - } }); - } - Font.prototype.hasChar = function(c) { - return this.encoding.charToGlyphIndex(c) !== null; - }; - Font.prototype.charToGlyphIndex = function(s) { - return this.encoding.charToGlyphIndex(s); - }; - Font.prototype.charToGlyph = function(c) { - var glyphIndex = this.charToGlyphIndex(c); - var glyph = this.glyphs.get(glyphIndex); - if (!glyph) glyph = this.glyphs.get(0); - return glyph; - }; - Font.prototype.updateFeatures = function(options) { - return this.defaultRenderOptions.features.map(function(feature) { - if (feature.script === "latn") return { - script: "latn", - tags: feature.tags.filter(function(tag) { - return options[tag]; - }) - }; - else return feature; - }); - }; - Font.prototype.stringToGlyphs = function(s, options) { - var this$1$1 = this; - var bidi = new Bidi(); - var charToGlyphIndexMod = function(token) { - return this$1$1.charToGlyphIndex(token.char); - }; - bidi.registerModifier("glyphIndex", null, charToGlyphIndexMod); - var features = options ? this.updateFeatures(options.features) : this.defaultRenderOptions.features; - bidi.applyFeatures(this, features); - var indexes = bidi.getTextGlyphs(s); - var length = indexes.length; - var glyphs = new Array(length); - var notdef = this.glyphs.get(0); - for (var i = 0; i < length; i += 1) glyphs[i] = this.glyphs.get(indexes[i]) || notdef; - return glyphs; - }; - Font.prototype.nameToGlyphIndex = function(name) { - return this.glyphNames.nameToGlyphIndex(name); - }; - Font.prototype.nameToGlyph = function(name) { - var glyphIndex = this.nameToGlyphIndex(name); - var glyph = this.glyphs.get(glyphIndex); - if (!glyph) glyph = this.glyphs.get(0); - return glyph; - }; - Font.prototype.glyphIndexToName = function(gid) { - if (!this.glyphNames.glyphIndexToName) return ""; - return this.glyphNames.glyphIndexToName(gid); - }; - Font.prototype.getKerningValue = function(leftGlyph, rightGlyph) { - leftGlyph = leftGlyph.index || leftGlyph; - rightGlyph = rightGlyph.index || rightGlyph; - var gposKerning = this.position.defaultKerningTables; - if (gposKerning) return this.position.getKerningValue(gposKerning, leftGlyph, rightGlyph); - return this.kerningPairs[leftGlyph + "," + rightGlyph] || 0; - }; - Font.prototype.defaultRenderOptions = { - kerning: true, - features: [( - /** - * these 4 features are required to render Arabic text properly - * and shouldn't be turned off when rendering arabic text. - */ - { - script: "arab", - tags: [ - "init", - "medi", - "fina", - "rlig" - ] - }), { - script: "latn", - tags: ["liga", "rlig"] - }] - }; - Font.prototype.forEachGlyph = function(text, x, y, fontSize, options, callback) { - x = x !== void 0 ? x : 0; - y = y !== void 0 ? y : 0; - fontSize = fontSize !== void 0 ? fontSize : 72; - options = Object.assign({}, this.defaultRenderOptions, options); - var fontScale = 1 / this.unitsPerEm * fontSize; - var glyphs = this.stringToGlyphs(text, options); - var kerningLookups; - if (options.kerning) { - var script = options.script || this.position.getDefaultScriptName(); - kerningLookups = this.position.getKerningTables(script, options.language); - } - for (var i = 0; i < glyphs.length; i += 1) { - var glyph = glyphs[i]; - callback.call(this, glyph, x, y, fontSize, options); - if (glyph.advanceWidth) x += glyph.advanceWidth * fontScale; - if (options.kerning && i < glyphs.length - 1) { - var kerningValue = kerningLookups ? this.position.getKerningValue(kerningLookups, glyph.index, glyphs[i + 1].index) : this.getKerningValue(glyph, glyphs[i + 1]); - x += kerningValue * fontScale; - } - if (options.letterSpacing) x += options.letterSpacing * fontSize; - else if (options.tracking) x += options.tracking / 1e3 * fontSize; - } - return x; - }; - Font.prototype.getPath = function(text, x, y, fontSize, options) { - var fullPath = new Path(); - this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) { - var glyphPath = glyph.getPath(gX, gY, gFontSize, options, this); - fullPath.extend(glyphPath); - }); - return fullPath; - }; - Font.prototype.getPaths = function(text, x, y, fontSize, options) { - var glyphPaths = []; - this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) { - var glyphPath = glyph.getPath(gX, gY, gFontSize, options, this); - glyphPaths.push(glyphPath); - }); - return glyphPaths; - }; - Font.prototype.getAdvanceWidth = function(text, fontSize, options) { - return this.forEachGlyph(text, 0, 0, fontSize, options, function() {}); - }; - Font.prototype.draw = function(ctx, text, x, y, fontSize, options) { - this.getPath(text, x, y, fontSize, options).draw(ctx); - }; - Font.prototype.drawPoints = function(ctx, text, x, y, fontSize, options) { - this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) { - glyph.drawPoints(ctx, gX, gY, gFontSize); - }); - }; - Font.prototype.drawMetrics = function(ctx, text, x, y, fontSize, options) { - this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) { - glyph.drawMetrics(ctx, gX, gY, gFontSize); - }); - }; - Font.prototype.getEnglishName = function(name) { - var translations = this.names[name]; - if (translations) return translations.en; - }; - Font.prototype.validate = function() { - var _this = this; - function assertNamePresent(name) { - var englishName = _this.getEnglishName(name); - englishName && englishName.trim().length; - } - assertNamePresent("fontFamily"); - assertNamePresent("weightName"); - assertNamePresent("manufacturer"); - assertNamePresent("copyright"); - assertNamePresent("version"); - this.unitsPerEm; - }; - Font.prototype.toTables = function() { - return sfnt.fontToTable(this); - }; - Font.prototype.toBuffer = function() { - console.warn("Font.toBuffer is deprecated. Use Font.toArrayBuffer instead."); - return this.toArrayBuffer(); - }; - Font.prototype.toArrayBuffer = function() { - var bytes = this.toTables().encode(); - var buffer = new ArrayBuffer(bytes.length); - var intArray = new Uint8Array(buffer); - for (var i = 0; i < bytes.length; i++) intArray[i] = bytes[i]; - return buffer; - }; - Font.prototype.fsSelectionValues = { - ITALIC: 1, - UNDERSCORE: 2, - NEGATIVE: 4, - OUTLINED: 8, - STRIKEOUT: 16, - BOLD: 32, - REGULAR: 64, - USER_TYPO_METRICS: 128, - WWS: 256, - OBLIQUE: 512 - }; - Font.prototype.usWidthClasses = { - ULTRA_CONDENSED: 1, - EXTRA_CONDENSED: 2, - CONDENSED: 3, - SEMI_CONDENSED: 4, - MEDIUM: 5, - SEMI_EXPANDED: 6, - EXPANDED: 7, - EXTRA_EXPANDED: 8, - ULTRA_EXPANDED: 9 - }; - Font.prototype.usWeightClasses = { - THIN: 100, - EXTRA_LIGHT: 200, - LIGHT: 300, - NORMAL: 400, - MEDIUM: 500, - SEMI_BOLD: 600, - BOLD: 700, - EXTRA_BOLD: 800, - BLACK: 900 - }; - function addName(name, names) { - var nameString = JSON.stringify(name); - var nameID = 256; - for (var nameKey in names) { - var n = parseInt(nameKey); - if (!n || n < 256) continue; - if (JSON.stringify(names[nameKey]) === nameString) return n; - if (nameID <= n) nameID = n + 1; - } - names[nameID] = name; - return nameID; - } - function makeFvarAxis(n, axis, names) { - var nameID = addName(axis.name, names); - return [ - { - name: "tag_" + n, - type: "TAG", - value: axis.tag - }, - { - name: "minValue_" + n, - type: "FIXED", - value: axis.minValue << 16 - }, - { - name: "defaultValue_" + n, - type: "FIXED", - value: axis.defaultValue << 16 - }, - { - name: "maxValue_" + n, - type: "FIXED", - value: axis.maxValue << 16 - }, - { - name: "flags_" + n, - type: "USHORT", - value: 0 - }, - { - name: "nameID_" + n, - type: "USHORT", - value: nameID - } - ]; - } - function parseFvarAxis(data, start, names) { - var axis = {}; - var p = new parse.Parser(data, start); - axis.tag = p.parseTag(); - axis.minValue = p.parseFixed(); - axis.defaultValue = p.parseFixed(); - axis.maxValue = p.parseFixed(); - p.skip("uShort", 1); - axis.name = names[p.parseUShort()] || {}; - return axis; - } - function makeFvarInstance(n, inst, axes, names) { - var nameID = addName(inst.name, names); - var fields = [{ - name: "nameID_" + n, - type: "USHORT", - value: nameID - }, { - name: "flags_" + n, - type: "USHORT", - value: 0 - }]; - for (var i = 0; i < axes.length; ++i) { - var axisTag = axes[i].tag; - fields.push({ - name: "axis_" + n + " " + axisTag, - type: "FIXED", - value: inst.coordinates[axisTag] << 16 - }); - } - return fields; - } - function parseFvarInstance(data, start, axes, names) { - var inst = {}; - var p = new parse.Parser(data, start); - inst.name = names[p.parseUShort()] || {}; - p.skip("uShort", 1); - inst.coordinates = {}; - for (var i = 0; i < axes.length; ++i) inst.coordinates[axes[i].tag] = p.parseFixed(); - return inst; - } - function makeFvarTable(fvar2, names) { - var result = new table.Table("fvar", [ - { - name: "version", - type: "ULONG", - value: 65536 - }, - { - name: "offsetToData", - type: "USHORT", - value: 0 - }, - { - name: "countSizePairs", - type: "USHORT", - value: 2 - }, - { - name: "axisCount", - type: "USHORT", - value: fvar2.axes.length - }, - { - name: "axisSize", - type: "USHORT", - value: 20 - }, - { - name: "instanceCount", - type: "USHORT", - value: fvar2.instances.length - }, - { - name: "instanceSize", - type: "USHORT", - value: 4 + fvar2.axes.length * 4 - } - ]); - result.offsetToData = result.sizeOf(); - for (var i = 0; i < fvar2.axes.length; i++) result.fields = result.fields.concat(makeFvarAxis(i, fvar2.axes[i], names)); - for (var j = 0; j < fvar2.instances.length; j++) result.fields = result.fields.concat(makeFvarInstance(j, fvar2.instances[j], fvar2.axes, names)); - return result; - } - function parseFvarTable(data, start, names) { - var p = new parse.Parser(data, start); - var tableVersion = p.parseULong(); - check.argument(tableVersion === 65536, "Unsupported fvar table version."); - var offsetToData = p.parseOffset16(); - p.skip("uShort", 1); - var axisCount = p.parseUShort(); - var axisSize = p.parseUShort(); - var instanceCount = p.parseUShort(); - var instanceSize = p.parseUShort(); - var axes = []; - for (var i = 0; i < axisCount; i++) axes.push(parseFvarAxis(data, start + offsetToData + i * axisSize, names)); - var instances = []; - var instanceStart = start + offsetToData + axisCount * axisSize; - for (var j = 0; j < instanceCount; j++) instances.push(parseFvarInstance(data, instanceStart + j * instanceSize, axes, names)); - return { - axes, - instances - }; - } - var fvar = { - make: makeFvarTable, - parse: parseFvarTable - }; - var attachList = function() { - return { - coverage: this.parsePointer(Parser.coverage), - attachPoints: this.parseList(Parser.pointer(Parser.uShortList)) - }; - }; - var caretValue = function() { - var format = this.parseUShort(); - check.argument(format === 1 || format === 2 || format === 3, "Unsupported CaretValue table version."); - if (format === 1) return { coordinate: this.parseShort() }; - else if (format === 2) return { pointindex: this.parseShort() }; - else if (format === 3) return { coordinate: this.parseShort() }; - }; - var ligGlyph = function() { - return this.parseList(Parser.pointer(caretValue)); - }; - var ligCaretList = function() { - return { - coverage: this.parsePointer(Parser.coverage), - ligGlyphs: this.parseList(Parser.pointer(ligGlyph)) - }; - }; - var markGlyphSets = function() { - this.parseUShort(); - return this.parseList(Parser.pointer(Parser.coverage)); - }; - function parseGDEFTable(data, start) { - start = start || 0; - var p = new Parser(data, start); - var tableVersion = p.parseVersion(1); - check.argument(tableVersion === 1 || tableVersion === 1.2 || tableVersion === 1.3, "Unsupported GDEF table version."); - var gdef2 = { - version: tableVersion, - classDef: p.parsePointer(Parser.classDef), - attachList: p.parsePointer(attachList), - ligCaretList: p.parsePointer(ligCaretList), - markAttachClassDef: p.parsePointer(Parser.classDef) - }; - if (tableVersion >= 1.2) gdef2.markGlyphSets = p.parsePointer(markGlyphSets); - return gdef2; - } - var gdef = { parse: parseGDEFTable }; - var subtableParsers$1 = new Array(10); - subtableParsers$1[1] = function parseLookup1() { - var start = this.offset + this.relativeOffset; - var posformat = this.parseUShort(); - if (posformat === 1) return { - posFormat: 1, - coverage: this.parsePointer(Parser.coverage), - value: this.parseValueRecord() - }; - else if (posformat === 2) return { - posFormat: 2, - coverage: this.parsePointer(Parser.coverage), - values: this.parseValueRecordList() - }; - check.assert(false, "0x" + start.toString(16) + ": GPOS lookup type 1 format must be 1 or 2."); - }; - subtableParsers$1[2] = function parseLookup2() { - var start = this.offset + this.relativeOffset; - var posFormat = this.parseUShort(); - check.assert(posFormat === 1 || posFormat === 2, "0x" + start.toString(16) + ": GPOS lookup type 2 format must be 1 or 2."); - var coverage = this.parsePointer(Parser.coverage); - var valueFormat1 = this.parseUShort(); - var valueFormat2 = this.parseUShort(); - if (posFormat === 1) return { - posFormat, - coverage, - valueFormat1, - valueFormat2, - pairSets: this.parseList(Parser.pointer(Parser.list(function() { - return { - secondGlyph: this.parseUShort(), - value1: this.parseValueRecord(valueFormat1), - value2: this.parseValueRecord(valueFormat2) - }; - }))) - }; - else if (posFormat === 2) { - var classDef1 = this.parsePointer(Parser.classDef); - var classDef2 = this.parsePointer(Parser.classDef); - var class1Count = this.parseUShort(); - var class2Count = this.parseUShort(); - return { - posFormat, - coverage, - valueFormat1, - valueFormat2, - classDef1, - classDef2, - class1Count, - class2Count, - classRecords: this.parseList(class1Count, Parser.list(class2Count, function() { - return { - value1: this.parseValueRecord(valueFormat1), - value2: this.parseValueRecord(valueFormat2) - }; - })) - }; - } - }; - subtableParsers$1[3] = function parseLookup3() { - return { error: "GPOS Lookup 3 not supported" }; - }; - subtableParsers$1[4] = function parseLookup4() { - return { error: "GPOS Lookup 4 not supported" }; - }; - subtableParsers$1[5] = function parseLookup5() { - return { error: "GPOS Lookup 5 not supported" }; - }; - subtableParsers$1[6] = function parseLookup6() { - return { error: "GPOS Lookup 6 not supported" }; - }; - subtableParsers$1[7] = function parseLookup7() { - return { error: "GPOS Lookup 7 not supported" }; - }; - subtableParsers$1[8] = function parseLookup8() { - return { error: "GPOS Lookup 8 not supported" }; - }; - subtableParsers$1[9] = function parseLookup9() { - return { error: "GPOS Lookup 9 not supported" }; - }; - function parseGposTable(data, start) { - start = start || 0; - var p = new Parser(data, start); - var tableVersion = p.parseVersion(1); - check.argument(tableVersion === 1 || tableVersion === 1.1, "Unsupported GPOS table version " + tableVersion); - if (tableVersion === 1) return { - version: tableVersion, - scripts: p.parseScriptList(), - features: p.parseFeatureList(), - lookups: p.parseLookupList(subtableParsers$1) - }; - else return { - version: tableVersion, - scripts: p.parseScriptList(), - features: p.parseFeatureList(), - lookups: p.parseLookupList(subtableParsers$1), - variations: p.parseFeatureVariationsList() - }; - } - var subtableMakers$1 = new Array(10); - function makeGposTable(gpos2) { - return new table.Table("GPOS", [ - { - name: "version", - type: "ULONG", - value: 65536 - }, - { - name: "scripts", - type: "TABLE", - value: new table.ScriptList(gpos2.scripts) - }, - { - name: "features", - type: "TABLE", - value: new table.FeatureList(gpos2.features) - }, - { - name: "lookups", - type: "TABLE", - value: new table.LookupList(gpos2.lookups, subtableMakers$1) - } - ]); - } - var gpos = { - parse: parseGposTable, - make: makeGposTable - }; - function parseWindowsKernTable(p) { - var pairs = {}; - p.skip("uShort"); - var subtableVersion = p.parseUShort(); - check.argument(subtableVersion === 0, "Unsupported kern sub-table version."); - p.skip("uShort", 2); - var nPairs = p.parseUShort(); - p.skip("uShort", 3); - for (var i = 0; i < nPairs; i += 1) { - var leftIndex = p.parseUShort(); - var rightIndex = p.parseUShort(); - var value = p.parseShort(); - pairs[leftIndex + "," + rightIndex] = value; - } - return pairs; - } - function parseMacKernTable(p) { - var pairs = {}; - p.skip("uShort"); - if (p.parseULong() > 1) console.warn("Only the first kern subtable is supported."); - p.skip("uLong"); - var subtableVersion = p.parseUShort() & 255; - p.skip("uShort"); - if (subtableVersion === 0) { - var nPairs = p.parseUShort(); - p.skip("uShort", 3); - for (var i = 0; i < nPairs; i += 1) { - var leftIndex = p.parseUShort(); - var rightIndex = p.parseUShort(); - var value = p.parseShort(); - pairs[leftIndex + "," + rightIndex] = value; - } - } - return pairs; - } - function parseKernTable(data, start) { - var p = new parse.Parser(data, start); - var tableVersion = p.parseUShort(); - if (tableVersion === 0) return parseWindowsKernTable(p); - else if (tableVersion === 1) return parseMacKernTable(p); - else throw new Error("Unsupported kern table version (" + tableVersion + ")."); - } - var kern = { parse: parseKernTable }; - function parseLocaTable(data, start, numGlyphs, shortVersion) { - var p = new parse.Parser(data, start); - var parseFn = shortVersion ? p.parseUShort : p.parseULong; - var glyphOffsets = []; - for (var i = 0; i < numGlyphs + 1; i += 1) { - var glyphOffset = parseFn.call(p); - if (shortVersion) glyphOffset *= 2; - glyphOffsets.push(glyphOffset); - } - return glyphOffsets; - } - var loca = { parse: parseLocaTable }; - function parseOpenTypeTableEntries(data, numTables) { - var tableEntries = []; - var p = 12; - for (var i = 0; i < numTables; i += 1) { - var tag = parse.getTag(data, p); - var checksum = parse.getULong(data, p + 4); - var offset = parse.getULong(data, p + 8); - var length = parse.getULong(data, p + 12); - tableEntries.push({ - tag, - checksum, - offset, - length, - compression: false - }); - p += 16; - } - return tableEntries; - } - function parseWOFFTableEntries(data, numTables) { - var tableEntries = []; - var p = 44; - for (var i = 0; i < numTables; i += 1) { - var tag = parse.getTag(data, p); - var offset = parse.getULong(data, p + 4); - var compLength = parse.getULong(data, p + 8); - var origLength = parse.getULong(data, p + 12); - var compression = void 0; - if (compLength < origLength) compression = "WOFF"; - else compression = false; - tableEntries.push({ - tag, - offset, - compression, - compressedLength: compLength, - length: origLength - }); - p += 20; - } - return tableEntries; - } - function uncompressTable(data, tableEntry) { - if (tableEntry.compression === "WOFF") { - var inBuffer = new Uint8Array(data.buffer, tableEntry.offset + 2, tableEntry.compressedLength - 2); - var outBuffer = new Uint8Array(tableEntry.length); - tinyInflate(inBuffer, outBuffer); - if (outBuffer.byteLength !== tableEntry.length) throw new Error("Decompression error: " + tableEntry.tag + " decompressed length doesn't match recorded length"); - return { - data: new DataView(outBuffer.buffer, 0), - offset: 0 - }; - } else return { - data, - offset: tableEntry.offset - }; - } - function parseBuffer2(buffer, opt) { - opt = opt === void 0 || opt === null ? {} : opt; - var indexToLocFormat; - var ltagTable; - var font = new Font({ empty: true }); - var data = new DataView(buffer, 0); - var numTables; - var tableEntries = []; - var signature = parse.getTag(data, 0); - if (signature === String.fromCharCode(0, 1, 0, 0) || signature === "true" || signature === "typ1") { - font.outlinesFormat = "truetype"; - numTables = parse.getUShort(data, 4); - tableEntries = parseOpenTypeTableEntries(data, numTables); - } else if (signature === "OTTO") { - font.outlinesFormat = "cff"; - numTables = parse.getUShort(data, 4); - tableEntries = parseOpenTypeTableEntries(data, numTables); - } else if (signature === "wOFF") { - var flavor = parse.getTag(data, 4); - if (flavor === String.fromCharCode(0, 1, 0, 0)) font.outlinesFormat = "truetype"; - else if (flavor === "OTTO") font.outlinesFormat = "cff"; - else throw new Error("Unsupported OpenType flavor " + signature); - numTables = parse.getUShort(data, 12); - tableEntries = parseWOFFTableEntries(data, numTables); - } else throw new Error("Unsupported OpenType signature " + signature); - var cffTableEntry; - var fvarTableEntry; - var glyfTableEntry; - var gdefTableEntry; - var gposTableEntry; - var gsubTableEntry; - var hmtxTableEntry; - var kernTableEntry; - var locaTableEntry; - var nameTableEntry; - var metaTableEntry; - var p; - for (var i = 0; i < numTables; i += 1) { - var tableEntry = tableEntries[i]; - var table2 = void 0; - switch (tableEntry.tag) { - case "cmap": - table2 = uncompressTable(data, tableEntry); - font.tables.cmap = cmap.parse(table2.data, table2.offset); - font.encoding = new CmapEncoding(font.tables.cmap); - break; - case "cvt ": - table2 = uncompressTable(data, tableEntry); - p = new parse.Parser(table2.data, table2.offset); - font.tables.cvt = p.parseShortList(tableEntry.length / 2); - break; - case "fvar": - fvarTableEntry = tableEntry; - break; - case "fpgm": - table2 = uncompressTable(data, tableEntry); - p = new parse.Parser(table2.data, table2.offset); - font.tables.fpgm = p.parseByteList(tableEntry.length); - break; - case "head": - table2 = uncompressTable(data, tableEntry); - font.tables.head = head.parse(table2.data, table2.offset); - font.unitsPerEm = font.tables.head.unitsPerEm; - indexToLocFormat = font.tables.head.indexToLocFormat; - break; - case "hhea": - table2 = uncompressTable(data, tableEntry); - font.tables.hhea = hhea.parse(table2.data, table2.offset); - font.ascender = font.tables.hhea.ascender; - font.descender = font.tables.hhea.descender; - font.numberOfHMetrics = font.tables.hhea.numberOfHMetrics; - break; - case "hmtx": - hmtxTableEntry = tableEntry; - break; - case "ltag": - table2 = uncompressTable(data, tableEntry); - ltagTable = ltag.parse(table2.data, table2.offset); - break; - case "maxp": - table2 = uncompressTable(data, tableEntry); - font.tables.maxp = maxp.parse(table2.data, table2.offset); - font.numGlyphs = font.tables.maxp.numGlyphs; - break; - case "name": - nameTableEntry = tableEntry; - break; - case "OS/2": - table2 = uncompressTable(data, tableEntry); - font.tables.os2 = os2.parse(table2.data, table2.offset); - break; - case "post": - table2 = uncompressTable(data, tableEntry); - font.tables.post = post.parse(table2.data, table2.offset); - font.glyphNames = new GlyphNames(font.tables.post); - break; - case "prep": - table2 = uncompressTable(data, tableEntry); - p = new parse.Parser(table2.data, table2.offset); - font.tables.prep = p.parseByteList(tableEntry.length); - break; - case "glyf": - glyfTableEntry = tableEntry; - break; - case "loca": - locaTableEntry = tableEntry; - break; - case "CFF ": - cffTableEntry = tableEntry; - break; - case "kern": - kernTableEntry = tableEntry; - break; - case "GDEF": - gdefTableEntry = tableEntry; - break; - case "GPOS": - gposTableEntry = tableEntry; - break; - case "GSUB": - gsubTableEntry = tableEntry; - break; - case "meta": - metaTableEntry = tableEntry; - break; - } - } - var nameTable = uncompressTable(data, nameTableEntry); - font.tables.name = _name.parse(nameTable.data, nameTable.offset, ltagTable); - font.names = font.tables.name; - if (glyfTableEntry && locaTableEntry) { - var shortVersion = indexToLocFormat === 0; - var locaTable = uncompressTable(data, locaTableEntry); - var locaOffsets = loca.parse(locaTable.data, locaTable.offset, font.numGlyphs, shortVersion); - var glyfTable = uncompressTable(data, glyfTableEntry); - font.glyphs = glyf.parse(glyfTable.data, glyfTable.offset, locaOffsets, font, opt); - } else if (cffTableEntry) { - var cffTable = uncompressTable(data, cffTableEntry); - cff.parse(cffTable.data, cffTable.offset, font, opt); - } else throw new Error("Font doesn't contain TrueType or CFF outlines."); - var hmtxTable = uncompressTable(data, hmtxTableEntry); - hmtx.parse(font, hmtxTable.data, hmtxTable.offset, font.numberOfHMetrics, font.numGlyphs, font.glyphs, opt); - addGlyphNames(font, opt); - if (kernTableEntry) { - var kernTable = uncompressTable(data, kernTableEntry); - font.kerningPairs = kern.parse(kernTable.data, kernTable.offset); - } else font.kerningPairs = {}; - if (gdefTableEntry) { - var gdefTable = uncompressTable(data, gdefTableEntry); - font.tables.gdef = gdef.parse(gdefTable.data, gdefTable.offset); - } - if (gposTableEntry) { - var gposTable = uncompressTable(data, gposTableEntry); - font.tables.gpos = gpos.parse(gposTable.data, gposTable.offset); - font.position.init(); - } - if (gsubTableEntry) { - var gsubTable = uncompressTable(data, gsubTableEntry); - font.tables.gsub = gsub.parse(gsubTable.data, gsubTable.offset); - } - if (fvarTableEntry) { - var fvarTable = uncompressTable(data, fvarTableEntry); - font.tables.fvar = fvar.parse(fvarTable.data, fvarTable.offset, font.names); - } - if (metaTableEntry) { - var metaTable = uncompressTable(data, metaTableEntry); - font.tables.meta = meta.parse(metaTable.data, metaTable.offset); - font.metas = font.tables.meta; - } - return font; - } - return { parseBuffer: parseBuffer2 }; -})(); -//#endregion -//#region node_modules/three-stdlib/loaders/TTFLoader.js -var TTFLoader = class extends Loader { - constructor(manager) { - super(manager); - this.reversed = false; - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setResponseType("arraybuffer"); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - loader.load(url, function(buffer) { - try { - onLoad(parseBuffer(buffer)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(arraybuffer) { - function convert(font, reversed) { - const round = Math.round; - const glyphs = {}; - const scale = 1e5 / ((font.unitsPerEm || 2048) * 72); - const glyphIndexMap = font.encoding.cmap.glyphIndexMap; - const unicodes = Object.keys(glyphIndexMap); - for (let i = 0; i < unicodes.length; i++) { - const unicode = unicodes[i]; - const glyph = font.glyphs.glyphs[glyphIndexMap[unicode]]; - if (unicode !== void 0) { - const token = { - ha: round(glyph.advanceWidth * scale), - x_min: round(glyph.xMin * scale), - x_max: round(glyph.xMax * scale), - o: "" - }; - if (reversed) glyph.path.commands = reverseCommands(glyph.path.commands); - glyph.path.commands.forEach(function(command) { - if (command.type.toLowerCase() === "c") command.type = "b"; - token.o += command.type.toLowerCase() + " "; - if (command.x !== void 0 && command.y !== void 0) token.o += round(command.x * scale) + " " + round(command.y * scale) + " "; - if (command.x1 !== void 0 && command.y1 !== void 0) token.o += round(command.x1 * scale) + " " + round(command.y1 * scale) + " "; - if (command.x2 !== void 0 && command.y2 !== void 0) token.o += round(command.x2 * scale) + " " + round(command.y2 * scale) + " "; - }); - glyphs[String.fromCodePoint(glyph.unicode)] = token; - } - } - return { - glyphs, - familyName: font.getEnglishName("fullName"), - ascender: round(font.ascender * scale), - descender: round(font.descender * scale), - underlinePosition: font.tables.post.underlinePosition, - underlineThickness: font.tables.post.underlineThickness, - boundingBox: { - xMin: font.tables.head.xMin, - xMax: font.tables.head.xMax, - yMin: font.tables.head.yMin, - yMax: font.tables.head.yMax - }, - resolution: 1e3, - original_font_information: font.tables.name - }; - } - function reverseCommands(commands) { - const paths = []; - let path; - commands.forEach(function(c) { - if (c.type.toLowerCase() === "m") { - path = [c]; - paths.push(path); - } else if (c.type.toLowerCase() !== "z") path.push(c); - }); - const reversed = []; - paths.forEach(function(p) { - const result = { - type: "m", - x: p[p.length - 1].x, - y: p[p.length - 1].y - }; - reversed.push(result); - for (let i = p.length - 1; i > 0; i--) { - const command = p[i]; - const result2 = { type: command.type }; - if (command.x2 !== void 0 && command.y2 !== void 0) { - result2.x1 = command.x2; - result2.y1 = command.y2; - result2.x2 = command.x1; - result2.y2 = command.y1; - } else if (command.x1 !== void 0 && command.y1 !== void 0) { - result2.x1 = command.x1; - result2.y1 = command.y1; - } - result2.x = p[i - 1].x; - result2.y = p[i - 1].y; - reversed.push(result2); - } - }); - return reversed; - } - return convert(parseBuffer(arraybuffer), this.reversed); - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/RGBELoader.js -var RGBELoader = class extends DataTextureLoader { - constructor(manager) { - super(manager); - this.type = HalfFloatType; - } - parse(buffer) { - const rgbe_read_error = 1, rgbe_write_error = 2, rgbe_format_error = 3, rgbe_memory_error = 4, rgbe_error = function(rgbe_error_code, msg) { - switch (rgbe_error_code) { - case rgbe_read_error: throw new Error("THREE.RGBELoader: Read Error: " + (msg || "")); - case rgbe_write_error: throw new Error("THREE.RGBELoader: Write Error: " + (msg || "")); - case rgbe_format_error: throw new Error("THREE.RGBELoader: Bad File Format: " + (msg || "")); - default: - case rgbe_memory_error: throw new Error("THREE.RGBELoader: Memory Error: " + (msg || "")); - } - }, RGBE_VALID_PROGRAMTYPE = 1, RGBE_VALID_FORMAT = 2, RGBE_VALID_DIMENSIONS = 4, NEWLINE = "\n", fgets = function(buffer2, lineLimit, consume) { - const chunkSize = 128; - lineLimit = !lineLimit ? 1024 : lineLimit; - let p = buffer2.pos, i = -1, len = 0, s = "", chunk = String.fromCharCode.apply(null, new Uint16Array(buffer2.subarray(p, p + chunkSize))); - while (0 > (i = chunk.indexOf(NEWLINE)) && len < lineLimit && p < buffer2.byteLength) { - s += chunk; - len += chunk.length; - p += chunkSize; - chunk += String.fromCharCode.apply(null, new Uint16Array(buffer2.subarray(p, p + chunkSize))); - } - if (-1 < i) { - if (false !== consume) buffer2.pos += len + i + 1; - return s + chunk.slice(0, i); - } - return false; - }, RGBE_ReadHeader = function(buffer2) { - const magic_token_re = /^#\?(\S+)/, gamma_re = /^\s*GAMMA\s*=\s*(\d+(\.\d+)?)\s*$/, exposure_re = /^\s*EXPOSURE\s*=\s*(\d+(\.\d+)?)\s*$/, format_re = /^\s*FORMAT=(\S+)\s*$/, dimensions_re = /^\s*\-Y\s+(\d+)\s+\+X\s+(\d+)\s*$/, header = { - valid: 0, - string: "", - comments: "", - programtype: "RGBE", - format: "", - gamma: 1, - exposure: 1, - width: 0, - height: 0 - }; - let line, match; - if (buffer2.pos >= buffer2.byteLength || !(line = fgets(buffer2))) rgbe_error(rgbe_read_error, "no header found"); - if (!(match = line.match(magic_token_re))) rgbe_error(rgbe_format_error, "bad initial token"); - header.valid |= RGBE_VALID_PROGRAMTYPE; - header.programtype = match[1]; - header.string += line + "\n"; - while (true) { - line = fgets(buffer2); - if (false === line) break; - header.string += line + "\n"; - if ("#" === line.charAt(0)) { - header.comments += line + "\n"; - continue; - } - if (match = line.match(gamma_re)) header.gamma = parseFloat(match[1]); - if (match = line.match(exposure_re)) header.exposure = parseFloat(match[1]); - if (match = line.match(format_re)) { - header.valid |= RGBE_VALID_FORMAT; - header.format = match[1]; - } - if (match = line.match(dimensions_re)) { - header.valid |= RGBE_VALID_DIMENSIONS; - header.height = parseInt(match[1], 10); - header.width = parseInt(match[2], 10); - } - if (header.valid & RGBE_VALID_FORMAT && header.valid & RGBE_VALID_DIMENSIONS) break; - } - if (!(header.valid & RGBE_VALID_FORMAT)) rgbe_error(rgbe_format_error, "missing format specifier"); - if (!(header.valid & RGBE_VALID_DIMENSIONS)) rgbe_error(rgbe_format_error, "missing image size specifier"); - return header; - }, RGBE_ReadPixels_RLE = function(buffer2, w2, h2) { - const scanline_width = w2; - if (scanline_width < 8 || scanline_width > 32767 || 2 !== buffer2[0] || 2 !== buffer2[1] || buffer2[2] & 128) return new Uint8Array(buffer2); - if (scanline_width !== (buffer2[2] << 8 | buffer2[3])) rgbe_error(rgbe_format_error, "wrong scanline width"); - const data_rgba = new Uint8Array(4 * w2 * h2); - if (!data_rgba.length) rgbe_error(rgbe_memory_error, "unable to allocate buffer space"); - let offset = 0, pos = 0; - const ptr_end = 4 * scanline_width; - const rgbeStart = new Uint8Array(4); - const scanline_buffer = new Uint8Array(ptr_end); - let num_scanlines = h2; - while (num_scanlines > 0 && pos < buffer2.byteLength) { - if (pos + 4 > buffer2.byteLength) rgbe_error(rgbe_read_error); - rgbeStart[0] = buffer2[pos++]; - rgbeStart[1] = buffer2[pos++]; - rgbeStart[2] = buffer2[pos++]; - rgbeStart[3] = buffer2[pos++]; - if (2 != rgbeStart[0] || 2 != rgbeStart[1] || (rgbeStart[2] << 8 | rgbeStart[3]) != scanline_width) rgbe_error(rgbe_format_error, "bad rgbe scanline format"); - let ptr = 0, count; - while (ptr < ptr_end && pos < buffer2.byteLength) { - count = buffer2[pos++]; - const isEncodedRun = count > 128; - if (isEncodedRun) count -= 128; - if (0 === count || ptr + count > ptr_end) rgbe_error(rgbe_format_error, "bad scanline data"); - if (isEncodedRun) { - const byteValue = buffer2[pos++]; - for (let i = 0; i < count; i++) scanline_buffer[ptr++] = byteValue; - } else { - scanline_buffer.set(buffer2.subarray(pos, pos + count), ptr); - ptr += count; - pos += count; - } - } - const l = scanline_width; - for (let i = 0; i < l; i++) { - let off = 0; - data_rgba[offset] = scanline_buffer[i + off]; - off += scanline_width; - data_rgba[offset + 1] = scanline_buffer[i + off]; - off += scanline_width; - data_rgba[offset + 2] = scanline_buffer[i + off]; - off += scanline_width; - data_rgba[offset + 3] = scanline_buffer[i + off]; - offset += 4; - } - num_scanlines--; - } - return data_rgba; - }; - const RGBEByteToRGBFloat = function(sourceArray, sourceOffset, destArray, destOffset) { - const e = sourceArray[sourceOffset + 3]; - const scale = Math.pow(2, e - 128) / 255; - destArray[destOffset + 0] = sourceArray[sourceOffset + 0] * scale; - destArray[destOffset + 1] = sourceArray[sourceOffset + 1] * scale; - destArray[destOffset + 2] = sourceArray[sourceOffset + 2] * scale; - destArray[destOffset + 3] = 1; - }; - const RGBEByteToRGBHalf = function(sourceArray, sourceOffset, destArray, destOffset) { - const e = sourceArray[sourceOffset + 3]; - const scale = Math.pow(2, e - 128) / 255; - destArray[destOffset + 0] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 0] * scale, 65504)); - destArray[destOffset + 1] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 1] * scale, 65504)); - destArray[destOffset + 2] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 2] * scale, 65504)); - destArray[destOffset + 3] = DataUtils.toHalfFloat(1); - }; - const byteArray = new Uint8Array(buffer); - byteArray.pos = 0; - const rgbe_header_info = RGBE_ReadHeader(byteArray); - const w = rgbe_header_info.width, h = rgbe_header_info.height, image_rgba_data = RGBE_ReadPixels_RLE(byteArray.subarray(byteArray.pos), w, h); - let data, type; - let numElements; - switch (this.type) { - case FloatType: - numElements = image_rgba_data.length / 4; - const floatArray = new Float32Array(numElements * 4); - for (let j = 0; j < numElements; j++) RGBEByteToRGBFloat(image_rgba_data, j * 4, floatArray, j * 4); - data = floatArray; - type = FloatType; - break; - case HalfFloatType: - numElements = image_rgba_data.length / 4; - const halfArray = new Uint16Array(numElements * 4); - for (let j = 0; j < numElements; j++) RGBEByteToRGBHalf(image_rgba_data, j * 4, halfArray, j * 4); - data = halfArray; - type = HalfFloatType; - break; - default: throw new Error("THREE.RGBELoader: Unsupported type: " + this.type); - } - return { - width: w, - height: h, - data, - header: rgbe_header_info.string, - gamma: rgbe_header_info.gamma, - exposure: rgbe_header_info.exposure, - type - }; - } - setDataType(value) { - this.type = value; - return this; - } - load(url, onLoad, onProgress, onError) { - function onLoadCallback(texture, texData) { - switch (texture.type) { - case FloatType: - case HalfFloatType: - if ("colorSpace" in texture) texture.colorSpace = "srgb-linear"; - else texture.encoding = 3e3; - texture.minFilter = LinearFilter; - texture.magFilter = LinearFilter; - texture.generateMipmaps = false; - texture.flipY = true; - break; - } - if (onLoad) onLoad(texture, texData); - } - return super.load(url, onLoadCallback, onProgress, onError); - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/AssimpLoader.js -var AssimpLoader = class extends Loader { - load(url, onLoad, onProgress, onError) { - var scope = this; - var path = scope.path === "" ? LoaderUtils.extractUrlBase(url) : scope.path; - var loader = new FileLoader(scope.manager); - loader.setPath(scope.path); - loader.setResponseType("arraybuffer"); - loader.setRequestHeader(scope.requestHeader); - loader.setWithCredentials(scope.withCredentials); - loader.load(url, function(buffer) { - try { - onLoad(scope.parse(buffer, path)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(buffer, path) { - var textureLoader = new TextureLoader(this.manager); - textureLoader.setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin); - var Virtulous = {}; - Virtulous.KeyFrame = class { - constructor(time, matrix) { - this.time = time; - this.matrix = matrix.clone(); - this.position = new Vector3(); - this.quaternion = new Quaternion(); - this.scale = new Vector3(1, 1, 1); - this.matrix.decompose(this.position, this.quaternion, this.scale); - this.clone = function() { - return new Virtulous.KeyFrame(this.time, this.matrix); - }; - this.lerp = function(nextKey, time2) { - time2 -= this.time; - var dist = nextKey.time - this.time; - var l = time2 / dist; - var l2 = 1 - l; - var keypos = this.position; - var keyrot = this.quaternion; - var key2pos = nextKey.position; - var key2rot = nextKey.quaternion; - Virtulous.KeyFrame.tempAniPos.x = keypos.x * l2 + key2pos.x * l; - Virtulous.KeyFrame.tempAniPos.y = keypos.y * l2 + key2pos.y * l; - Virtulous.KeyFrame.tempAniPos.z = keypos.z * l2 + key2pos.z * l; - Virtulous.KeyFrame.tempAniQuat.set(keyrot.x, keyrot.y, keyrot.z, keyrot.w); - Virtulous.KeyFrame.tempAniQuat.slerp(key2rot, l); - return Virtulous.KeyFrame.tempAniMatrix.compose(Virtulous.KeyFrame.tempAniPos, Virtulous.KeyFrame.tempAniQuat, Virtulous.KeyFrame.tempAniScale); - }; - } - }; - Virtulous.KeyFrame.tempAniPos = new Vector3(); - Virtulous.KeyFrame.tempAniQuat = new Quaternion(); - Virtulous.KeyFrame.tempAniScale = new Vector3(1, 1, 1); - Virtulous.KeyFrame.tempAniMatrix = new Matrix4(); - Virtulous.KeyFrameTrack = function() { - this.keys = []; - this.target = null; - this.time = 0; - this.length = 0; - this._accelTable = {}; - this.fps = 20; - this.addKey = function(key) { - this.keys.push(key); - }; - this.init = function() { - this.sortKeys(); - if (this.keys.length > 0) this.length = this.keys[this.keys.length - 1].time; - else this.length = 0; - if (!this.fps) return; - for (let j = 0; j < this.length * this.fps; j++) for (let i = 0; i < this.keys.length; i++) if (this.keys[i].time == j) { - this._accelTable[j] = i; - break; - } else if (this.keys[i].time < j / this.fps && this.keys[i + 1] && this.keys[i + 1].time >= j / this.fps) { - this._accelTable[j] = i; - break; - } - }; - this.parseFromThree = function(data) { - var fps = data.fps; - this.target = data.node; - var track = data.hierarchy[0].keys; - for (let i = 0; i < track.length; i++) this.addKey(new Virtulous.KeyFrame(i / fps || track[i].time, track[i].targets[0].data)); - this.init(); - }; - this.parseFromCollada = function(data) { - var track = data.keys; - var fps = this.fps; - for (let i = 0; i < track.length; i++) this.addKey(new Virtulous.KeyFrame(i / fps || track[i].time, track[i].matrix)); - this.init(); - }; - this.sortKeys = function() { - this.keys.sort(this.keySortFunc); - }; - this.keySortFunc = function(a, b) { - return a.time - b.time; - }; - this.clone = function() { - var t = new Virtulous.KeyFrameTrack(); - t.target = this.target; - t.time = this.time; - t.length = this.length; - for (let i = 0; i < this.keys.length; i++) t.addKey(this.keys[i].clone()); - t.init(); - return t; - }; - this.reTarget = function(root, compareitor) { - if (!compareitor) compareitor = Virtulous.TrackTargetNodeNameCompare; - this.target = compareitor(root, this.target); - }; - this.keySearchAccel = function(time) { - time *= this.fps; - time = Math.floor(time); - return this._accelTable[time] || 0; - }; - this.setTime = function(time) { - time = Math.abs(time); - if (this.length) time = time % this.length + .05; - var key0 = null; - var key1 = null; - for (let i = this.keySearchAccel(time); i < this.keys.length; i++) if (this.keys[i].time == time) { - key0 = this.keys[i]; - key1 = this.keys[i]; - break; - } else if (this.keys[i].time < time && this.keys[i + 1] && this.keys[i + 1].time > time) { - key0 = this.keys[i]; - key1 = this.keys[i + 1]; - break; - } else if (this.keys[i].time < time && i == this.keys.length - 1) { - key0 = this.keys[i]; - key1 = this.keys[0].clone(); - key1.time += this.length + .05; - break; - } - if (key0 && key1 && key0 !== key1) { - this.target.matrixAutoUpdate = false; - this.target.matrix.copy(key0.lerp(key1, time)); - this.target.matrixWorldNeedsUpdate = true; - return; - } - if (key0 && key1 && key0 == key1) { - this.target.matrixAutoUpdate = false; - this.target.matrix.copy(key0.matrix); - this.target.matrixWorldNeedsUpdate = true; - return; - } - }; - }; - Virtulous.TrackTargetNodeNameCompare = function(root, target) { - function find(node, name) { - if (node.name == name) return node; - for (let i = 0; i < node.children.length; i++) { - var r = find(node.children[i], name); - if (r) return r; - } - return null; - } - return find(root, target.name); - }; - Virtulous.Animation = function() { - this.tracks = []; - this.length = 0; - this.addTrack = function(track) { - this.tracks.push(track); - this.length = Math.max(track.length, this.length); - }; - this.setTime = function(time) { - this.time = time; - for (let i = 0; i < this.tracks.length; i++) this.tracks[i].setTime(time); - }; - this.clone = function(target, compareitor) { - if (!compareitor) compareitor = Virtulous.TrackTargetNodeNameCompare; - var n = new Virtulous.Animation(); - n.target = target; - for (let i = 0; i < this.tracks.length; i++) { - var track = this.tracks[i].clone(); - track.reTarget(target, compareitor); - n.addTrack(track); - } - return n; - }; - }; - var ASSBIN_CHUNK_AICAMERA = 4660; - var ASSBIN_CHUNK_AILIGHT = 4661; - var ASSBIN_CHUNK_AITEXTURE = 4662; - var ASSBIN_CHUNK_AIMESH = 4663; - var ASSBIN_CHUNK_AINODEANIM = 4664; - var ASSBIN_CHUNK_AISCENE = 4665; - var ASSBIN_CHUNK_AIBONE = 4666; - var ASSBIN_CHUNK_AIANIMATION = 4667; - var ASSBIN_CHUNK_AINODE = 4668; - var ASSBIN_CHUNK_AIMATERIAL = 4669; - var ASSBIN_CHUNK_AIMATERIALPROPERTY = 4670; - var ASSBIN_MESH_HAS_POSITIONS = 1; - var ASSBIN_MESH_HAS_NORMALS = 2; - var ASSBIN_MESH_HAS_TANGENTS_AND_BITANGENTS = 4; - var ASSBIN_MESH_HAS_TEXCOORD_BASE = 256; - var ASSBIN_MESH_HAS_COLOR_BASE = 65536; - var AI_MAX_NUMBER_OF_COLOR_SETS = 1; - var AI_MAX_NUMBER_OF_TEXTURECOORDS = 4; - //! A directional light source has a well-defined direction - //! but is infinitely far away. That's quite a good - //! approximation for sun light. - var aiLightSource_DIRECTIONAL = 1; - //! A point light source has a well-defined position - //! in space but no direction - it emits light in all - //! directions. A normal bulb is a point light. - //! A spot light source emits light in a specific - //! angle. It has a position and a direction it is pointing to. - //! A good example for a spot light is a light spot in - //! sport arenas. - var aiLightSource_SPOT = 3; - //! The generic light level of the world, including the bounces - //! of all other lightsources. - //! Typically, there's at most one ambient light in a scene. - //! This light type doesn't have a valid position, direction, or - //! other properties, just a color. - var aiTextureType_DIFFUSE = 1; - var aiTextureType_NORMALS = 6; - var aiTextureType_OPACITY = 8; - var aiTextureType_LIGHTMAP = 10; - var BONESPERVERT = 4; - function ASSBIN_MESH_HAS_TEXCOORD(n) { - return ASSBIN_MESH_HAS_TEXCOORD_BASE << n; - } - function ASSBIN_MESH_HAS_COLOR(n) { - return ASSBIN_MESH_HAS_COLOR_BASE << n; - } - function markBones(scene) { - for (let i in scene.mMeshes) { - var mesh = scene.mMeshes[i]; - for (let k in mesh.mBones) { - var boneNode = scene.findNode(mesh.mBones[k].mName); - if (boneNode) boneNode.isBone = true; - } - } - } - function cloneTreeToBones(root, scene) { - var rootBone = new Bone(); - rootBone.matrix.copy(root.matrix); - rootBone.matrixWorld.copy(root.matrixWorld); - rootBone.position.copy(root.position); - rootBone.quaternion.copy(root.quaternion); - rootBone.scale.copy(root.scale); - scene.nodeCount++; - rootBone.name = "bone_" + root.name + scene.nodeCount.toString(); - if (!scene.nodeToBoneMap[root.name]) scene.nodeToBoneMap[root.name] = []; - scene.nodeToBoneMap[root.name].push(rootBone); - for (let i in root.children) { - var child = cloneTreeToBones(root.children[i], scene); - rootBone.add(child); - } - return rootBone; - } - function sortWeights(indexes, weights) { - var pairs = []; - for (let i = 0; i < indexes.length; i++) pairs.push({ - i: indexes[i], - w: weights[i] - }); - pairs.sort(function(a, b) { - return b.w - a.w; - }); - while (pairs.length < 4) pairs.push({ - i: 0, - w: 0 - }); - if (pairs.length > 4) pairs.length = 4; - var sum = 0; - for (let i = 0; i < 4; i++) sum += pairs[i].w * pairs[i].w; - sum = Math.sqrt(sum); - for (let i = 0; i < 4; i++) { - pairs[i].w = pairs[i].w / sum; - indexes[i] = pairs[i].i; - weights[i] = pairs[i].w; - } - } - function findMatchingBone(root, name) { - if (root.name.indexOf("bone_" + name) == 0) return root; - for (let i in root.children) { - var ret = findMatchingBone(root.children[i], name); - if (ret) return ret; - } - } - class aiMesh { - constructor() { - this.mPrimitiveTypes = 0; - this.mNumVertices = 0; - this.mNumFaces = 0; - this.mNumBones = 0; - this.mMaterialIndex = 0; - this.mVertices = []; - this.mNormals = []; - this.mTangents = []; - this.mBitangents = []; - this.mColors = [[]]; - this.mTextureCoords = [[]]; - this.mFaces = []; - this.mBones = []; - this.hookupSkeletons = function(scene) { - if (this.mBones.length == 0) return; - var allBones = []; - var offsetMatrix = []; - var skeletonRoot = scene.findNode(this.mBones[0].mName); - while (skeletonRoot.mParent && skeletonRoot.mParent.isBone) skeletonRoot = skeletonRoot.mParent; - var threeSkeletonRoot = skeletonRoot.toTHREE(scene); - var threeSkeletonRootBone = cloneTreeToBones(threeSkeletonRoot, scene); - this.threeNode.add(threeSkeletonRootBone); - for (let i = 0; i < this.mBones.length; i++) { - var bone = findMatchingBone(threeSkeletonRootBone, this.mBones[i].mName); - if (bone) { - var tbone = bone; - allBones.push(tbone); - offsetMatrix.push(this.mBones[i].mOffsetMatrix.toTHREE()); - } else { - var skeletonRoot = scene.findNode(this.mBones[i].mName); - if (!skeletonRoot) return; - var threeSkeletonRoot = skeletonRoot.toTHREE(scene); - var threeSkeletonRootBone = cloneTreeToBones(threeSkeletonRoot, scene); - this.threeNode.add(threeSkeletonRootBone); - var bone = findMatchingBone(threeSkeletonRootBone, this.mBones[i].mName); - var tbone = bone; - allBones.push(tbone); - offsetMatrix.push(this.mBones[i].mOffsetMatrix.toTHREE()); - } - } - var skeleton = new Skeleton(allBones, offsetMatrix); - this.threeNode.bind(skeleton, new Matrix4()); - this.threeNode.material.skinning = true; - }; - this.toTHREE = function(scene) { - if (this.threeNode) return this.threeNode; - var geometry = new BufferGeometry(); - var mat; - if (scene.mMaterials[this.mMaterialIndex]) mat = scene.mMaterials[this.mMaterialIndex].toTHREE(scene); - else mat = new MeshLambertMaterial(); - geometry.setIndex(new BufferAttribute(new Uint32Array(this.mIndexArray), 1)); - geometry.setAttribute("position", new BufferAttribute(this.mVertexBuffer, 3)); - if (this.mNormalBuffer && this.mNormalBuffer.length > 0) geometry.setAttribute("normal", new BufferAttribute(this.mNormalBuffer, 3)); - if (this.mColorBuffer && this.mColorBuffer.length > 0) geometry.setAttribute("color", new BufferAttribute(this.mColorBuffer, 4)); - if (this.mTexCoordsBuffers[0] && this.mTexCoordsBuffers[0].length > 0) geometry.setAttribute("uv", new BufferAttribute(new Float32Array(this.mTexCoordsBuffers[0]), 2)); - if (this.mTexCoordsBuffers[1] && this.mTexCoordsBuffers[1].length > 0) geometry.setAttribute("uv1", new BufferAttribute(new Float32Array(this.mTexCoordsBuffers[1]), 2)); - if (this.mTangentBuffer && this.mTangentBuffer.length > 0) geometry.setAttribute("tangents", new BufferAttribute(this.mTangentBuffer, 3)); - if (this.mBitangentBuffer && this.mBitangentBuffer.length > 0) geometry.setAttribute("bitangents", new BufferAttribute(this.mBitangentBuffer, 3)); - if (this.mBones.length > 0) { - var weights = []; - var bones = []; - for (let i = 0; i < this.mBones.length; i++) for (let j = 0; j < this.mBones[i].mWeights.length; j++) { - var weight = this.mBones[i].mWeights[j]; - if (weight) { - if (!weights[weight.mVertexId]) weights[weight.mVertexId] = []; - if (!bones[weight.mVertexId]) bones[weight.mVertexId] = []; - weights[weight.mVertexId].push(weight.mWeight); - bones[weight.mVertexId].push(parseInt(i)); - } - } - for (let i in bones) sortWeights(bones[i], weights[i]); - var _weights = []; - var _bones = []; - for (let i = 0; i < weights.length; i++) for (let j = 0; j < 4; j++) if (weights[i] && bones[i]) { - _weights.push(weights[i][j]); - _bones.push(bones[i][j]); - } else { - _weights.push(0); - _bones.push(0); - } - geometry.setAttribute("skinWeight", new BufferAttribute(new Float32Array(_weights), BONESPERVERT)); - geometry.setAttribute("skinIndex", new BufferAttribute(new Float32Array(_bones), BONESPERVERT)); - } - var mesh; - if (this.mBones.length == 0) mesh = new Mesh(geometry, mat); - if (this.mBones.length > 0) { - mesh = new SkinnedMesh(geometry, mat); - mesh.normalizeSkinWeights(); - } - this.threeNode = mesh; - return mesh; - }; - } - } - class aiFace { - constructor() { - this.mNumIndices = 0; - this.mIndices = []; - } - } - class aiVector3D { - constructor() { - this.x = 0; - this.y = 0; - this.z = 0; - this.toTHREE = function() { - return new Vector3(this.x, this.y, this.z); - }; - } - } - class aiColor3D { - constructor() { - this.r = 0; - this.g = 0; - this.b = 0; - this.a = 0; - this.toTHREE = function() { - return new Color(this.r, this.g, this.b); - }; - } - } - class aiQuaternion { - constructor() { - this.x = 0; - this.y = 0; - this.z = 0; - this.w = 0; - this.toTHREE = function() { - return new Quaternion(this.x, this.y, this.z, this.w); - }; - } - } - class aiVertexWeight { - constructor() { - this.mVertexId = 0; - this.mWeight = 0; - } - } - class aiString { - constructor() { - this.data = []; - this.toString = function() { - var str = ""; - this.data.forEach(function(i) { - str += String.fromCharCode(i); - }); - return str.replace(/[^\x20-\x7E]+/g, ""); - }; - } - } - class aiVectorKey { - constructor() { - this.mTime = 0; - this.mValue = null; - } - } - class aiQuatKey { - constructor() { - this.mTime = 0; - this.mValue = null; - } - } - class aiNode { - constructor() { - this.mName = ""; - this.mTransformation = []; - this.mNumChildren = 0; - this.mNumMeshes = 0; - this.mMeshes = []; - this.mChildren = []; - this.toTHREE = function(scene) { - if (this.threeNode) return this.threeNode; - var o = new Object3D(); - o.name = this.mName; - o.matrix = this.mTransformation.toTHREE(); - for (let i = 0; i < this.mChildren.length; i++) o.add(this.mChildren[i].toTHREE(scene)); - for (let i = 0; i < this.mMeshes.length; i++) o.add(scene.mMeshes[this.mMeshes[i]].toTHREE(scene)); - this.threeNode = o; - o.matrix.decompose(o.position, o.quaternion, o.scale); - return o; - }; - } - } - class aiBone { - constructor() { - this.mName = ""; - this.mNumWeights = 0; - this.mOffsetMatrix = 0; - } - } - class aiMaterialProperty { - constructor() { - this.mKey = ""; - this.mSemantic = 0; - this.mIndex = 0; - this.mData = []; - this.mDataLength = 0; - this.mType = 0; - this.dataAsColor = function() { - var array = new Uint8Array(this.mData).buffer; - var reader = new DataView(array); - return new Color(reader.getFloat32(0, true), reader.getFloat32(4, true), reader.getFloat32(8, true)); - }; - this.dataAsFloat = function() { - var array = new Uint8Array(this.mData).buffer; - return new DataView(array).getFloat32(0, true); - }; - this.dataAsBool = function() { - var array = new Uint8Array(this.mData).buffer; - return !!new DataView(array).getFloat32(0, true); - }; - this.dataAsString = function() { - var s = new aiString(); - s.data = this.mData; - return s.toString(); - }; - this.dataAsMap = function() { - var s = new aiString(); - s.data = this.mData; - var path2 = s.toString(); - path2 = path2.replace(/\\/g, "/"); - if (path2.indexOf("/") != -1) path2 = path2.substr(path2.lastIndexOf("/") + 1); - return textureLoader.load(path2); - }; - } - } - var namePropMapping = { - "?mat.name": "name", - "$mat.shadingm": "shading", - "$mat.twosided": "twoSided", - "$mat.wireframe": "wireframe", - "$clr.ambient": "ambient", - "$clr.diffuse": "color", - "$clr.specular": "specular", - "$clr.emissive": "emissive", - "$clr.transparent": "transparent", - "$clr.reflective": "reflect", - "$mat.shininess": "shininess", - "$mat.reflectivity": "reflectivity", - "$mat.refracti": "refraction", - "$tex.file": "map" - }; - var nameTypeMapping = { - "?mat.name": "string", - "$mat.shadingm": "bool", - "$mat.twosided": "bool", - "$mat.wireframe": "bool", - "$clr.ambient": "color", - "$clr.diffuse": "color", - "$clr.specular": "color", - "$clr.emissive": "color", - "$clr.transparent": "color", - "$clr.reflective": "color", - "$mat.shininess": "float", - "$mat.reflectivity": "float", - "$mat.refracti": "float", - "$tex.file": "map" - }; - class aiMaterial { - constructor() { - this.mNumAllocated = 0; - this.mNumProperties = 0; - this.mProperties = []; - this.toTHREE = function() { - var mat = new MeshPhongMaterial(); - for (let i = 0; i < this.mProperties.length; i++) { - if (nameTypeMapping[this.mProperties[i].mKey] == "float") mat[namePropMapping[this.mProperties[i].mKey]] = this.mProperties[i].dataAsFloat(); - if (nameTypeMapping[this.mProperties[i].mKey] == "color") mat[namePropMapping[this.mProperties[i].mKey]] = this.mProperties[i].dataAsColor(); - if (nameTypeMapping[this.mProperties[i].mKey] == "bool") mat[namePropMapping[this.mProperties[i].mKey]] = this.mProperties[i].dataAsBool(); - if (nameTypeMapping[this.mProperties[i].mKey] == "string") mat[namePropMapping[this.mProperties[i].mKey]] = this.mProperties[i].dataAsString(); - if (nameTypeMapping[this.mProperties[i].mKey] == "map") { - var prop = this.mProperties[i]; - if (prop.mSemantic == aiTextureType_DIFFUSE) mat.map = this.mProperties[i].dataAsMap(); - if (prop.mSemantic == aiTextureType_NORMALS) mat.normalMap = this.mProperties[i].dataAsMap(); - if (prop.mSemantic == aiTextureType_LIGHTMAP) mat.lightMap = this.mProperties[i].dataAsMap(); - if (prop.mSemantic == aiTextureType_OPACITY) mat.alphaMap = this.mProperties[i].dataAsMap(); - } - } - mat.ambient.r = .53; - mat.ambient.g = .53; - mat.ambient.b = .53; - mat.color.r = 1; - mat.color.g = 1; - mat.color.b = 1; - return mat; - }; - } - } - function veclerp(v1, v2, l) { - var v = new Vector3(); - var lm1 = 1 - l; - v.x = v1.x * l + v2.x * lm1; - v.y = v1.y * l + v2.y * lm1; - v.z = v1.z * l + v2.z * lm1; - return v; - } - function quatlerp(q1, q2, l) { - return q1.clone().slerp(q2, 1 - l); - } - function sampleTrack(keys, time, lne, lerp) { - if (keys.length == 1) return keys[0].mValue.toTHREE(); - var dist = Infinity; - var key = null; - var nextKey = null; - for (let i = 0; i < keys.length; i++) { - var timeDist = Math.abs(keys[i].mTime - time); - if (timeDist < dist && keys[i].mTime <= time) { - dist = timeDist; - key = keys[i]; - nextKey = keys[i + 1]; - } - } - if (!key) return null; - else if (nextKey) { - var dT = nextKey.mTime - key.mTime; - var T = key.mTime - time; - var l = T / dT; - return lerp(key.mValue.toTHREE(), nextKey.mValue.toTHREE(), l); - } else { - nextKey = keys[0].clone(); - nextKey.mTime += lne; - var dT = nextKey.mTime - key.mTime; - var T = key.mTime - time; - var l = T / dT; - return lerp(key.mValue.toTHREE(), nextKey.mValue.toTHREE(), l); - } - } - class aiNodeAnim { - constructor() { - this.mNodeName = ""; - this.mNumPositionKeys = 0; - this.mNumRotationKeys = 0; - this.mNumScalingKeys = 0; - this.mPositionKeys = []; - this.mRotationKeys = []; - this.mScalingKeys = []; - this.mPreState = ""; - this.mPostState = ""; - this.init = function(tps) { - if (!tps) tps = 1; - function t(t2) { - t2.mTime /= tps; - } - this.mPositionKeys.forEach(t); - this.mRotationKeys.forEach(t); - this.mScalingKeys.forEach(t); - }; - this.sortKeys = function() { - function comp(a, b) { - return a.mTime - b.mTime; - } - this.mPositionKeys.sort(comp); - this.mRotationKeys.sort(comp); - this.mScalingKeys.sort(comp); - }; - this.getLength = function() { - return Math.max(Math.max.apply(null, this.mPositionKeys.map(function(a) { - return a.mTime; - })), Math.max.apply(null, this.mRotationKeys.map(function(a) { - return a.mTime; - })), Math.max.apply(null, this.mScalingKeys.map(function(a) { - return a.mTime; - }))); - }; - this.toTHREE = function(o) { - this.sortKeys(); - var length = this.getLength(); - var track = new Virtulous.KeyFrameTrack(); - for (let i = 0; i < length; i += .05) { - var matrix = new Matrix4(); - var time = i; - var pos = sampleTrack(this.mPositionKeys, time, length, veclerp); - var scale = sampleTrack(this.mScalingKeys, time, length, veclerp); - var rotation = sampleTrack(this.mRotationKeys, time, length, quatlerp); - matrix.compose(pos, rotation, scale); - var key = new Virtulous.KeyFrame(time, matrix); - track.addKey(key); - } - track.target = o.findNode(this.mNodeName).toTHREE(); - var tracks = [track]; - if (o.nodeToBoneMap[this.mNodeName]) for (let i = 0; i < o.nodeToBoneMap[this.mNodeName].length; i++) { - var t2 = track.clone(); - t2.target = o.nodeToBoneMap[this.mNodeName][i]; - tracks.push(t2); - } - return tracks; - }; - } - } - class aiAnimation { - constructor() { - this.mName = ""; - this.mDuration = 0; - this.mTicksPerSecond = 0; - this.mNumChannels = 0; - this.mChannels = []; - this.toTHREE = function(root) { - var animationHandle = new Virtulous.Animation(); - for (let i in this.mChannels) { - this.mChannels[i].init(this.mTicksPerSecond); - var tracks = this.mChannels[i].toTHREE(root); - for (let j in tracks) { - tracks[j].init(); - animationHandle.addTrack(tracks[j]); - } - } - animationHandle.length = Math.max.apply(null, animationHandle.tracks.map(function(e) { - return e.length; - })); - return animationHandle; - }; - } - } - class aiTexture { - constructor() { - this.mWidth = 0; - this.mHeight = 0; - this.texAchFormatHint = []; - this.pcData = []; - } - } - class aiLight { - constructor() { - this.mName = ""; - this.mType = 0; - this.mAttenuationConstant = 0; - this.mAttenuationLinear = 0; - this.mAttenuationQuadratic = 0; - this.mAngleInnerCone = 0; - this.mAngleOuterCone = 0; - this.mColorDiffuse = null; - this.mColorSpecular = null; - this.mColorAmbient = null; - } - } - class aiCamera { - constructor() { - this.mName = ""; - this.mPosition = null; - this.mLookAt = null; - this.mUp = null; - this.mHorizontalFOV = 0; - this.mClipPlaneNear = 0; - this.mClipPlaneFar = 0; - this.mAspect = 0; - } - } - class aiScene { - constructor() { - this.versionMajor = 0; - this.versionMinor = 0; - this.versionRevision = 0; - this.compileFlags = 0; - this.mFlags = 0; - this.mNumMeshes = 0; - this.mNumMaterials = 0; - this.mNumAnimations = 0; - this.mNumTextures = 0; - this.mNumLights = 0; - this.mNumCameras = 0; - this.mRootNode = null; - this.mMeshes = []; - this.mMaterials = []; - this.mAnimations = []; - this.mLights = []; - this.mCameras = []; - this.nodeToBoneMap = {}; - this.findNode = function(name, root) { - if (!root) root = this.mRootNode; - if (root.mName == name) return root; - for (let i = 0; i < root.mChildren.length; i++) { - var ret = this.findNode(name, root.mChildren[i]); - if (ret) return ret; - } - return null; - }; - this.toTHREE = function() { - this.nodeCount = 0; - markBones(this); - var o = this.mRootNode.toTHREE(this); - for (let i in this.mMeshes) this.mMeshes[i].hookupSkeletons(this); - if (this.mAnimations.length > 0) var a = this.mAnimations[0].toTHREE(this); - return { - object: o, - animation: a - }; - }; - } - } - class aiMatrix4 { - constructor() { - this.elements = [ - [], - [], - [], - [] - ]; - this.toTHREE = function() { - var m = new Matrix4(); - for (let i = 0; i < 4; ++i) for (let i2 = 0; i2 < 4; ++i2) m.elements[i * 4 + i2] = this.elements[i2][i]; - return m; - }; - } - } - var littleEndian = true; - function readFloat(dataview) { - var val = dataview.getFloat32(dataview.readOffset, littleEndian); - dataview.readOffset += 4; - return val; - } - function Read_double(dataview) { - var val = dataview.getFloat64(dataview.readOffset, littleEndian); - dataview.readOffset += 8; - return val; - } - function Read_uint8_t(dataview) { - var val = dataview.getUint8(dataview.readOffset); - dataview.readOffset += 1; - return val; - } - function Read_uint16_t(dataview) { - var val = dataview.getUint16(dataview.readOffset, littleEndian); - dataview.readOffset += 2; - return val; - } - function Read_unsigned_int(dataview) { - var val = dataview.getUint32(dataview.readOffset, littleEndian); - dataview.readOffset += 4; - return val; - } - function Read_uint32_t(dataview) { - var val = dataview.getUint32(dataview.readOffset, littleEndian); - dataview.readOffset += 4; - return val; - } - function Read_aiVector3D(stream) { - var v = new aiVector3D(); - v.x = readFloat(stream); - v.y = readFloat(stream); - v.z = readFloat(stream); - return v; - } - function Read_aiColor3D(stream) { - var c = new aiColor3D(); - c.r = readFloat(stream); - c.g = readFloat(stream); - c.b = readFloat(stream); - return c; - } - function Read_aiQuaternion(stream) { - var v = new aiQuaternion(); - v.w = readFloat(stream); - v.x = readFloat(stream); - v.y = readFloat(stream); - v.z = readFloat(stream); - return v; - } - function Read_aiString(stream) { - var s = new aiString(); - var stringlengthbytes = Read_unsigned_int(stream); - stream.ReadBytes(s.data, 1, stringlengthbytes); - return s.toString(); - } - function Read_aiVertexWeight(stream) { - var w = new aiVertexWeight(); - w.mVertexId = Read_unsigned_int(stream); - w.mWeight = readFloat(stream); - return w; - } - function Read_aiMatrix4x4(stream) { - var m = new aiMatrix4(); - for (let i = 0; i < 4; ++i) for (let i2 = 0; i2 < 4; ++i2) m.elements[i][i2] = readFloat(stream); - return m; - } - function Read_aiVectorKey(stream) { - var v = new aiVectorKey(); - v.mTime = Read_double(stream); - v.mValue = Read_aiVector3D(stream); - return v; - } - function Read_aiQuatKey(stream) { - var v = new aiQuatKey(); - v.mTime = Read_double(stream); - v.mValue = Read_aiQuaternion(stream); - return v; - } - function ReadArray_aiVertexWeight(stream, data, size) { - for (let i = 0; i < size; i++) data[i] = Read_aiVertexWeight(stream); - } - function ReadArray_aiVectorKey(stream, data, size) { - for (let i = 0; i < size; i++) data[i] = Read_aiVectorKey(stream); - } - function ReadArray_aiQuatKey(stream, data, size) { - for (let i = 0; i < size; i++) data[i] = Read_aiQuatKey(stream); - } - function ReadBounds(stream, T, n) { - return stream.Seek(sizeof(T) * n, aiOrigin_CUR); - } - function ai_assert(bool) { - if (!bool) throw "asset failed"; - } - function ReadBinaryNode(stream, parent, depth) { - ai_assert(Read_uint32_t(stream) == ASSBIN_CHUNK_AINODE); - Read_uint32_t(stream); - var node = new aiNode(); - node.mParent = parent; - node.mDepth = depth; - node.mName = Read_aiString(stream); - node.mTransformation = Read_aiMatrix4x4(stream); - node.mNumChildren = Read_unsigned_int(stream); - node.mNumMeshes = Read_unsigned_int(stream); - if (node.mNumMeshes) { - node.mMeshes = []; - for (let i = 0; i < node.mNumMeshes; ++i) node.mMeshes[i] = Read_unsigned_int(stream); - } - if (node.mNumChildren) { - node.mChildren = []; - for (let i = 0; i < node.mNumChildren; ++i) { - var node2 = ReadBinaryNode(stream, node, depth++); - node.mChildren[i] = node2; - } - } - return node; - } - function ReadBinaryBone(stream, b) { - ai_assert(Read_uint32_t(stream) == ASSBIN_CHUNK_AIBONE); - Read_uint32_t(stream); - b.mName = Read_aiString(stream); - b.mNumWeights = Read_unsigned_int(stream); - b.mOffsetMatrix = Read_aiMatrix4x4(stream); - if (shortened) ReadBounds(stream, b.mWeights, b.mNumWeights); - else { - b.mWeights = []; - ReadArray_aiVertexWeight(stream, b.mWeights, b.mNumWeights); - } - return b; - } - function ReadBinaryMesh(stream, mesh) { - ai_assert(Read_uint32_t(stream) == ASSBIN_CHUNK_AIMESH); - Read_uint32_t(stream); - mesh.mPrimitiveTypes = Read_unsigned_int(stream); - mesh.mNumVertices = Read_unsigned_int(stream); - mesh.mNumFaces = Read_unsigned_int(stream); - mesh.mNumBones = Read_unsigned_int(stream); - mesh.mMaterialIndex = Read_unsigned_int(stream); - mesh.mNumUVComponents = []; - var c = Read_unsigned_int(stream); - if (c & ASSBIN_MESH_HAS_POSITIONS) if (shortened) ReadBounds(stream, mesh.mVertices, mesh.mNumVertices); - else { - mesh.mVertices = []; - mesh.mVertexBuffer = stream.subArray32(stream.readOffset, stream.readOffset + mesh.mNumVertices * 3 * 4); - stream.Seek(mesh.mNumVertices * 3 * 4, aiOrigin_CUR); - } - if (c & ASSBIN_MESH_HAS_NORMALS) if (shortened) ReadBounds(stream, mesh.mNormals, mesh.mNumVertices); - else { - mesh.mNormals = []; - mesh.mNormalBuffer = stream.subArray32(stream.readOffset, stream.readOffset + mesh.mNumVertices * 3 * 4); - stream.Seek(mesh.mNumVertices * 3 * 4, aiOrigin_CUR); - } - if (c & ASSBIN_MESH_HAS_TANGENTS_AND_BITANGENTS) if (shortened) { - ReadBounds(stream, mesh.mTangents, mesh.mNumVertices); - ReadBounds(stream, mesh.mBitangents, mesh.mNumVertices); - } else { - mesh.mTangents = []; - mesh.mTangentBuffer = stream.subArray32(stream.readOffset, stream.readOffset + mesh.mNumVertices * 3 * 4); - stream.Seek(mesh.mNumVertices * 3 * 4, aiOrigin_CUR); - mesh.mBitangents = []; - mesh.mBitangentBuffer = stream.subArray32(stream.readOffset, stream.readOffset + mesh.mNumVertices * 3 * 4); - stream.Seek(mesh.mNumVertices * 3 * 4, aiOrigin_CUR); - } - for (let n = 0; n < AI_MAX_NUMBER_OF_COLOR_SETS; ++n) { - if (!(c & ASSBIN_MESH_HAS_COLOR(n))) break; - if (shortened) ReadBounds(stream, mesh.mColors[n], mesh.mNumVertices); - else { - mesh.mColors[n] = []; - mesh.mColorBuffer = stream.subArray32(stream.readOffset, stream.readOffset + mesh.mNumVertices * 4 * 4); - stream.Seek(mesh.mNumVertices * 4 * 4, aiOrigin_CUR); - } - } - mesh.mTexCoordsBuffers = []; - for (let n = 0; n < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++n) { - if (!(c & ASSBIN_MESH_HAS_TEXCOORD(n))) break; - mesh.mNumUVComponents[n] = Read_unsigned_int(stream); - if (shortened) ReadBounds(stream, mesh.mTextureCoords[n], mesh.mNumVertices); - else { - mesh.mTextureCoords[n] = []; - mesh.mTexCoordsBuffers[n] = []; - for (let uv = 0; uv < mesh.mNumVertices; uv++) { - mesh.mTexCoordsBuffers[n].push(readFloat(stream)); - mesh.mTexCoordsBuffers[n].push(readFloat(stream)); - readFloat(stream); - } - } - } - if (shortened) Read_unsigned_int(stream); - else { - mesh.mFaces = []; - mesh.mIndexArray = []; - for (let i = 0; i < mesh.mNumFaces; ++i) { - var f = mesh.mFaces[i] = new aiFace(); - f.mNumIndices = Read_uint16_t(stream); - f.mIndices = []; - for (let a = 0; a < f.mNumIndices; ++a) if (mesh.mNumVertices < 65536) f.mIndices[a] = Read_uint16_t(stream); - else f.mIndices[a] = Read_unsigned_int(stream); - if (f.mNumIndices === 3) { - mesh.mIndexArray.push(f.mIndices[0]); - mesh.mIndexArray.push(f.mIndices[1]); - mesh.mIndexArray.push(f.mIndices[2]); - } else if (f.mNumIndices === 4) { - mesh.mIndexArray.push(f.mIndices[0]); - mesh.mIndexArray.push(f.mIndices[1]); - mesh.mIndexArray.push(f.mIndices[2]); - mesh.mIndexArray.push(f.mIndices[2]); - mesh.mIndexArray.push(f.mIndices[3]); - mesh.mIndexArray.push(f.mIndices[0]); - } else throw new Error("Sorry, can't currently triangulate polys. Use the triangulate preprocessor in Assimp."); - } - } - if (mesh.mNumBones) { - mesh.mBones = []; - for (let a = 0; a < mesh.mNumBones; ++a) { - mesh.mBones[a] = new aiBone(); - ReadBinaryBone(stream, mesh.mBones[a]); - } - } - } - function ReadBinaryMaterialProperty(stream, prop) { - ai_assert(Read_uint32_t(stream) == ASSBIN_CHUNK_AIMATERIALPROPERTY); - Read_uint32_t(stream); - prop.mKey = Read_aiString(stream); - prop.mSemantic = Read_unsigned_int(stream); - prop.mIndex = Read_unsigned_int(stream); - prop.mDataLength = Read_unsigned_int(stream); - prop.mType = Read_unsigned_int(stream); - prop.mData = []; - stream.ReadBytes(prop.mData, 1, prop.mDataLength); - } - function ReadBinaryMaterial(stream, mat) { - ai_assert(Read_uint32_t(stream) == ASSBIN_CHUNK_AIMATERIAL); - Read_uint32_t(stream); - mat.mNumAllocated = mat.mNumProperties = Read_unsigned_int(stream); - if (mat.mNumProperties) { - if (mat.mProperties) delete mat.mProperties; - mat.mProperties = []; - for (let i = 0; i < mat.mNumProperties; ++i) { - mat.mProperties[i] = new aiMaterialProperty(); - ReadBinaryMaterialProperty(stream, mat.mProperties[i]); - } - } - } - function ReadBinaryNodeAnim(stream, nd) { - ai_assert(Read_uint32_t(stream) == ASSBIN_CHUNK_AINODEANIM); - Read_uint32_t(stream); - nd.mNodeName = Read_aiString(stream); - nd.mNumPositionKeys = Read_unsigned_int(stream); - nd.mNumRotationKeys = Read_unsigned_int(stream); - nd.mNumScalingKeys = Read_unsigned_int(stream); - nd.mPreState = Read_unsigned_int(stream); - nd.mPostState = Read_unsigned_int(stream); - if (nd.mNumPositionKeys) if (shortened) ReadBounds(stream, nd.mPositionKeys, nd.mNumPositionKeys); - else { - nd.mPositionKeys = []; - ReadArray_aiVectorKey(stream, nd.mPositionKeys, nd.mNumPositionKeys); - } - if (nd.mNumRotationKeys) if (shortened) ReadBounds(stream, nd.mRotationKeys, nd.mNumRotationKeys); - else { - nd.mRotationKeys = []; - ReadArray_aiQuatKey(stream, nd.mRotationKeys, nd.mNumRotationKeys); - } - if (nd.mNumScalingKeys) if (shortened) ReadBounds(stream, nd.mScalingKeys, nd.mNumScalingKeys); - else { - nd.mScalingKeys = []; - ReadArray_aiVectorKey(stream, nd.mScalingKeys, nd.mNumScalingKeys); - } - } - function ReadBinaryAnim(stream, anim) { - ai_assert(Read_uint32_t(stream) == ASSBIN_CHUNK_AIANIMATION); - Read_uint32_t(stream); - anim.mName = Read_aiString(stream); - anim.mDuration = Read_double(stream); - anim.mTicksPerSecond = Read_double(stream); - anim.mNumChannels = Read_unsigned_int(stream); - if (anim.mNumChannels) { - anim.mChannels = []; - for (let a = 0; a < anim.mNumChannels; ++a) { - anim.mChannels[a] = new aiNodeAnim(); - ReadBinaryNodeAnim(stream, anim.mChannels[a]); - } - } - } - function ReadBinaryTexture(stream, tex) { - ai_assert(Read_uint32_t(stream) == ASSBIN_CHUNK_AITEXTURE); - Read_uint32_t(stream); - tex.mWidth = Read_unsigned_int(stream); - tex.mHeight = Read_unsigned_int(stream); - stream.ReadBytes(tex.achFormatHint, 1, 4); - if (!shortened) if (!tex.mHeight) { - tex.pcData = []; - stream.ReadBytes(tex.pcData, 1, tex.mWidth); - } else { - tex.pcData = []; - stream.ReadBytes(tex.pcData, 1, tex.mWidth * tex.mHeight * 4); - } - } - function ReadBinaryLight(stream, l) { - ai_assert(Read_uint32_t(stream) == ASSBIN_CHUNK_AILIGHT); - Read_uint32_t(stream); - l.mName = Read_aiString(stream); - l.mType = Read_unsigned_int(stream); - if (l.mType != aiLightSource_DIRECTIONAL) { - l.mAttenuationConstant = readFloat(stream); - l.mAttenuationLinear = readFloat(stream); - l.mAttenuationQuadratic = readFloat(stream); - } - l.mColorDiffuse = Read_aiColor3D(stream); - l.mColorSpecular = Read_aiColor3D(stream); - l.mColorAmbient = Read_aiColor3D(stream); - if (l.mType == aiLightSource_SPOT) { - l.mAngleInnerCone = readFloat(stream); - l.mAngleOuterCone = readFloat(stream); - } - } - function ReadBinaryCamera(stream, cam) { - ai_assert(Read_uint32_t(stream) == ASSBIN_CHUNK_AICAMERA); - Read_uint32_t(stream); - cam.mName = Read_aiString(stream); - cam.mPosition = Read_aiVector3D(stream); - cam.mLookAt = Read_aiVector3D(stream); - cam.mUp = Read_aiVector3D(stream); - cam.mHorizontalFOV = readFloat(stream); - cam.mClipPlaneNear = readFloat(stream); - cam.mClipPlaneFar = readFloat(stream); - cam.mAspect = readFloat(stream); - } - function ReadBinaryScene(stream, scene) { - ai_assert(Read_uint32_t(stream) == ASSBIN_CHUNK_AISCENE); - Read_uint32_t(stream); - scene.mFlags = Read_unsigned_int(stream); - scene.mNumMeshes = Read_unsigned_int(stream); - scene.mNumMaterials = Read_unsigned_int(stream); - scene.mNumAnimations = Read_unsigned_int(stream); - scene.mNumTextures = Read_unsigned_int(stream); - scene.mNumLights = Read_unsigned_int(stream); - scene.mNumCameras = Read_unsigned_int(stream); - scene.mRootNode = new aiNode(); - scene.mRootNode = ReadBinaryNode(stream, null, 0); - if (scene.mNumMeshes) { - scene.mMeshes = []; - for (let i = 0; i < scene.mNumMeshes; ++i) { - scene.mMeshes[i] = new aiMesh(); - ReadBinaryMesh(stream, scene.mMeshes[i]); - } - } - if (scene.mNumMaterials) { - scene.mMaterials = []; - for (let i = 0; i < scene.mNumMaterials; ++i) { - scene.mMaterials[i] = new aiMaterial(); - ReadBinaryMaterial(stream, scene.mMaterials[i]); - } - } - if (scene.mNumAnimations) { - scene.mAnimations = []; - for (let i = 0; i < scene.mNumAnimations; ++i) { - scene.mAnimations[i] = new aiAnimation(); - ReadBinaryAnim(stream, scene.mAnimations[i]); - } - } - if (scene.mNumTextures) { - scene.mTextures = []; - for (let i = 0; i < scene.mNumTextures; ++i) { - scene.mTextures[i] = new aiTexture(); - ReadBinaryTexture(stream, scene.mTextures[i]); - } - } - if (scene.mNumLights) { - scene.mLights = []; - for (let i = 0; i < scene.mNumLights; ++i) { - scene.mLights[i] = new aiLight(); - ReadBinaryLight(stream, scene.mLights[i]); - } - } - if (scene.mNumCameras) { - scene.mCameras = []; - for (let i = 0; i < scene.mNumCameras; ++i) { - scene.mCameras[i] = new aiCamera(); - ReadBinaryCamera(stream, scene.mCameras[i]); - } - } - } - var aiOrigin_CUR = 0; - var aiOrigin_BEG = 1; - function extendStream(stream) { - stream.readOffset = 0; - stream.Seek = function(off, ori) { - if (ori == aiOrigin_CUR) stream.readOffset += off; - if (ori == aiOrigin_BEG) stream.readOffset = off; - }; - stream.ReadBytes = function(buff, size, n) { - var bytes = size * n; - for (let i = 0; i < bytes; i++) buff[i] = Read_uint8_t(this); - }; - stream.subArray32 = function(start, end) { - var newbuff = this.buffer.slice(start, end); - return new Float32Array(newbuff); - }; - stream.subArrayUint16 = function(start, end) { - var newbuff = this.buffer.slice(start, end); - return new Uint16Array(newbuff); - }; - stream.subArrayUint8 = function(start, end) { - var newbuff = this.buffer.slice(start, end); - return new Uint8Array(newbuff); - }; - stream.subArrayUint32 = function(start, end) { - var newbuff = this.buffer.slice(start, end); - return new Uint32Array(newbuff); - }; - } - var shortened, compressed; - function InternReadFile(pFiledata) { - var pScene = new aiScene(); - var stream = new DataView(pFiledata); - extendStream(stream); - stream.Seek(44, aiOrigin_CUR); - pScene.versionMajor = Read_unsigned_int(stream); - pScene.versionMinor = Read_unsigned_int(stream); - pScene.versionRevision = Read_unsigned_int(stream); - pScene.compileFlags = Read_unsigned_int(stream); - shortened = Read_uint16_t(stream) > 0; - compressed = Read_uint16_t(stream) > 0; - if (shortened) throw "Shortened binaries are not supported!"; - stream.Seek(256, aiOrigin_CUR); - stream.Seek(128, aiOrigin_CUR); - stream.Seek(64, aiOrigin_CUR); - if (compressed) { - var uncompressedSize = Read_uint32_t(stream); - var compressedSize = stream.FileSize() - stream.Tell(); - var compressedData = []; - stream.Read(compressedData, 1, compressedSize); - var uncompressedData = []; - uncompress(uncompressedData, uncompressedSize, compressedData, compressedSize); - ReadBinaryScene(new ArrayBuffer(uncompressedData), pScene); - } else ReadBinaryScene(stream, pScene); - return pScene.toTHREE(); - } - return InternReadFile(buffer); - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/MDDLoader.js -var MDDLoader = class extends Loader { - constructor(manager) { - super(manager); - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setResponseType("arraybuffer"); - loader.load(url, function(data) { - onLoad(scope.parse(data)); - }, onProgress, onError); - } - parse(data) { - const view = new DataView(data); - const totalFrames = view.getUint32(0); - const totalPoints = view.getUint32(4); - let offset = 8; - const times = new Float32Array(totalFrames); - const values = new Float32Array(totalFrames * totalFrames).fill(0); - for (let i = 0; i < totalFrames; i++) { - times[i] = view.getFloat32(offset); - offset += 4; - values[totalFrames * i + i] = 1; - } - const track = new NumberKeyframeTrack(".morphTargetInfluences", times, values); - const clip = new AnimationClip("default", times[times.length - 1], [track]); - const morphTargets = []; - for (let i = 0; i < totalFrames; i++) { - const morphTarget = new Float32Array(totalPoints * 3); - for (let j = 0; j < totalPoints; j++) { - const stride = j * 3; - morphTarget[stride + 0] = view.getFloat32(offset); - offset += 4; - morphTarget[stride + 1] = view.getFloat32(offset); - offset += 4; - morphTarget[stride + 2] = view.getFloat32(offset); - offset += 4; - } - const attribute = new BufferAttribute(morphTarget, 3); - attribute.name = "morph_" + i; - morphTargets.push(attribute); - } - return { - morphTargets, - clip - }; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/EXRLoader.js -var hasColorSpace = version >= 152; -var EXRLoader = class extends DataTextureLoader { - constructor(manager) { - super(manager); - this.type = HalfFloatType; - } - parse(buffer) { - const USHORT_RANGE = 65536; - const BITMAP_SIZE = 8192; - const HUF_DECBITS = 14; - const HUF_ENCSIZE = 65537; - const HUF_DECSIZE = 1 << HUF_DECBITS; - const HUF_DECMASK = HUF_DECSIZE - 1; - const NBITS = 16; - const A_OFFSET = 1 << NBITS - 1; - const MOD_MASK = (1 << NBITS) - 1; - const SHORT_ZEROCODE_RUN = 59; - const LONG_ZEROCODE_RUN = 63; - const SHORTEST_LONG_RUN = 65 - SHORT_ZEROCODE_RUN; - const ULONG_SIZE = 8; - const FLOAT32_SIZE = 4; - const INT32_SIZE = 4; - const INT16_SIZE = 2; - const INT8_SIZE = 1; - const STATIC_HUFFMAN = 0; - const DEFLATE = 1; - const UNKNOWN = 0; - const LOSSY_DCT = 1; - const RLE = 2; - const logBase = Math.pow(2.7182818, 2.2); - function reverseLutFromBitmap(bitmap, lut) { - var k = 0; - for (var i = 0; i < USHORT_RANGE; ++i) if (i == 0 || bitmap[i >> 3] & 1 << (i & 7)) lut[k++] = i; - var n = k - 1; - while (k < USHORT_RANGE) lut[k++] = 0; - return n; - } - function hufClearDecTable(hdec) { - for (var i = 0; i < HUF_DECSIZE; i++) { - hdec[i] = {}; - hdec[i].len = 0; - hdec[i].lit = 0; - hdec[i].p = null; - } - } - const getBitsReturn = { - l: 0, - c: 0, - lc: 0 - }; - function getBits(nBits, c, lc, uInt8Array2, inOffset) { - while (lc < nBits) { - c = c << 8 | parseUint8Array(uInt8Array2, inOffset); - lc += 8; - } - lc -= nBits; - getBitsReturn.l = c >> lc & (1 << nBits) - 1; - getBitsReturn.c = c; - getBitsReturn.lc = lc; - } - const hufTableBuffer = new Array(59); - function hufCanonicalCodeTable(hcode) { - for (var i = 0; i <= 58; ++i) hufTableBuffer[i] = 0; - for (var i = 0; i < HUF_ENCSIZE; ++i) hufTableBuffer[hcode[i]] += 1; - var c = 0; - for (var i = 58; i > 0; --i) { - var nc = c + hufTableBuffer[i] >> 1; - hufTableBuffer[i] = c; - c = nc; - } - for (var i = 0; i < HUF_ENCSIZE; ++i) { - var l = hcode[i]; - if (l > 0) hcode[i] = l | hufTableBuffer[l]++ << 6; - } - } - function hufUnpackEncTable(uInt8Array2, inDataView, inOffset, ni, im, iM, hcode) { - var p = inOffset; - var c = 0; - var lc = 0; - for (; im <= iM; im++) { - if (p.value - inOffset.value > ni) return false; - getBits(6, c, lc, uInt8Array2, p); - var l = getBitsReturn.l; - c = getBitsReturn.c; - lc = getBitsReturn.lc; - hcode[im] = l; - if (l == LONG_ZEROCODE_RUN) { - if (p.value - inOffset.value > ni) throw "Something wrong with hufUnpackEncTable"; - getBits(8, c, lc, uInt8Array2, p); - var zerun = getBitsReturn.l + SHORTEST_LONG_RUN; - c = getBitsReturn.c; - lc = getBitsReturn.lc; - if (im + zerun > iM + 1) throw "Something wrong with hufUnpackEncTable"; - while (zerun--) hcode[im++] = 0; - im--; - } else if (l >= SHORT_ZEROCODE_RUN) { - var zerun = l - SHORT_ZEROCODE_RUN + 2; - if (im + zerun > iM + 1) throw "Something wrong with hufUnpackEncTable"; - while (zerun--) hcode[im++] = 0; - im--; - } - } - hufCanonicalCodeTable(hcode); - } - function hufLength(code) { - return code & 63; - } - function hufCode(code) { - return code >> 6; - } - function hufBuildDecTable(hcode, im, iM, hdecod) { - for (; im <= iM; im++) { - var c = hufCode(hcode[im]); - var l = hufLength(hcode[im]); - if (c >> l) throw "Invalid table entry"; - if (l > HUF_DECBITS) { - var pl = hdecod[c >> l - HUF_DECBITS]; - if (pl.len) throw "Invalid table entry"; - pl.lit++; - if (pl.p) { - var p = pl.p; - pl.p = new Array(pl.lit); - for (var i = 0; i < pl.lit - 1; ++i) pl.p[i] = p[i]; - } else pl.p = new Array(1); - pl.p[pl.lit - 1] = im; - } else if (l) { - var plOffset = 0; - for (var i = 1 << HUF_DECBITS - l; i > 0; i--) { - var pl = hdecod[(c << HUF_DECBITS - l) + plOffset]; - if (pl.len || pl.p) throw "Invalid table entry"; - pl.len = l; - pl.lit = im; - plOffset++; - } - } - } - return true; - } - const getCharReturn = { - c: 0, - lc: 0 - }; - function getChar(c, lc, uInt8Array2, inOffset) { - c = c << 8 | parseUint8Array(uInt8Array2, inOffset); - lc += 8; - getCharReturn.c = c; - getCharReturn.lc = lc; - } - const getCodeReturn = { - c: 0, - lc: 0 - }; - function getCode(po, rlc, c, lc, uInt8Array2, inDataView, inOffset, outBuffer, outBufferOffset, outBufferEndOffset) { - if (po == rlc) { - if (lc < 8) { - getChar(c, lc, uInt8Array2, inOffset); - c = getCharReturn.c; - lc = getCharReturn.lc; - } - lc -= 8; - var cs = c >> lc; - var cs = new Uint8Array([cs])[0]; - if (outBufferOffset.value + cs > outBufferEndOffset) return false; - var s = outBuffer[outBufferOffset.value - 1]; - while (cs-- > 0) outBuffer[outBufferOffset.value++] = s; - } else if (outBufferOffset.value < outBufferEndOffset) outBuffer[outBufferOffset.value++] = po; - else return false; - getCodeReturn.c = c; - getCodeReturn.lc = lc; - } - function UInt16(value) { - return value & 65535; - } - function Int16(value) { - var ref = UInt16(value); - return ref > 32767 ? ref - 65536 : ref; - } - const wdec14Return = { - a: 0, - b: 0 - }; - function wdec14(l, h) { - var ls = Int16(l); - var hi = Int16(h); - var ai = ls + (hi & 1) + (hi >> 1); - var as = ai; - var bs = ai - hi; - wdec14Return.a = as; - wdec14Return.b = bs; - } - function wdec16(l, h) { - var m = UInt16(l); - var d = UInt16(h); - var bb = m - (d >> 1) & MOD_MASK; - wdec14Return.a = d + bb - A_OFFSET & MOD_MASK; - wdec14Return.b = bb; - } - function wav2Decode(buffer2, j, nx, ox, ny, oy, mx) { - var w14 = mx < 16384; - var n = nx > ny ? ny : nx; - var p = 1; - var p2; - while (p <= n) p <<= 1; - p >>= 1; - p2 = p; - p >>= 1; - while (p >= 1) { - var py = 0; - var ey = py + oy * (ny - p2); - var oy1 = oy * p; - var oy2 = oy * p2; - var ox1 = ox * p; - var ox2 = ox * p2; - var i00, i01, i10, i11; - for (; py <= ey; py += oy2) { - var px = py; - var ex = py + ox * (nx - p2); - for (; px <= ex; px += ox2) { - var p01 = px + ox1; - var p10 = px + oy1; - var p11 = p10 + ox1; - if (w14) { - wdec14(buffer2[px + j], buffer2[p10 + j]); - i00 = wdec14Return.a; - i10 = wdec14Return.b; - wdec14(buffer2[p01 + j], buffer2[p11 + j]); - i01 = wdec14Return.a; - i11 = wdec14Return.b; - wdec14(i00, i01); - buffer2[px + j] = wdec14Return.a; - buffer2[p01 + j] = wdec14Return.b; - wdec14(i10, i11); - buffer2[p10 + j] = wdec14Return.a; - buffer2[p11 + j] = wdec14Return.b; - } else { - wdec16(buffer2[px + j], buffer2[p10 + j]); - i00 = wdec14Return.a; - i10 = wdec14Return.b; - wdec16(buffer2[p01 + j], buffer2[p11 + j]); - i01 = wdec14Return.a; - i11 = wdec14Return.b; - wdec16(i00, i01); - buffer2[px + j] = wdec14Return.a; - buffer2[p01 + j] = wdec14Return.b; - wdec16(i10, i11); - buffer2[p10 + j] = wdec14Return.a; - buffer2[p11 + j] = wdec14Return.b; - } - } - if (nx & p) { - var p10 = px + oy1; - if (w14) wdec14(buffer2[px + j], buffer2[p10 + j]); - else wdec16(buffer2[px + j], buffer2[p10 + j]); - i00 = wdec14Return.a; - buffer2[p10 + j] = wdec14Return.b; - buffer2[px + j] = i00; - } - } - if (ny & p) { - var px = py; - var ex = py + ox * (nx - p2); - for (; px <= ex; px += ox2) { - var p01 = px + ox1; - if (w14) wdec14(buffer2[px + j], buffer2[p01 + j]); - else wdec16(buffer2[px + j], buffer2[p01 + j]); - i00 = wdec14Return.a; - buffer2[p01 + j] = wdec14Return.b; - buffer2[px + j] = i00; - } - } - p2 = p; - p >>= 1; - } - return py; - } - function hufDecode(encodingTable, decodingTable, uInt8Array2, inDataView, inOffset, ni, rlc, no, outBuffer, outOffset) { - var c = 0; - var lc = 0; - var outBufferEndOffset = no; - var inOffsetEnd = Math.trunc(inOffset.value + (ni + 7) / 8); - while (inOffset.value < inOffsetEnd) { - getChar(c, lc, uInt8Array2, inOffset); - c = getCharReturn.c; - lc = getCharReturn.lc; - while (lc >= HUF_DECBITS) { - var pl = decodingTable[c >> lc - HUF_DECBITS & HUF_DECMASK]; - if (pl.len) { - lc -= pl.len; - getCode(pl.lit, rlc, c, lc, uInt8Array2, inDataView, inOffset, outBuffer, outOffset, outBufferEndOffset); - c = getCodeReturn.c; - lc = getCodeReturn.lc; - } else { - if (!pl.p) throw "hufDecode issues"; - var j; - for (j = 0; j < pl.lit; j++) { - var l = hufLength(encodingTable[pl.p[j]]); - while (lc < l && inOffset.value < inOffsetEnd) { - getChar(c, lc, uInt8Array2, inOffset); - c = getCharReturn.c; - lc = getCharReturn.lc; - } - if (lc >= l) { - if (hufCode(encodingTable[pl.p[j]]) == (c >> lc - l & (1 << l) - 1)) { - lc -= l; - getCode(pl.p[j], rlc, c, lc, uInt8Array2, inDataView, inOffset, outBuffer, outOffset, outBufferEndOffset); - c = getCodeReturn.c; - lc = getCodeReturn.lc; - break; - } - } - } - if (j == pl.lit) throw "hufDecode issues"; - } - } - } - var i = 8 - ni & 7; - c >>= i; - lc -= i; - while (lc > 0) { - var pl = decodingTable[c << HUF_DECBITS - lc & HUF_DECMASK]; - if (pl.len) { - lc -= pl.len; - getCode(pl.lit, rlc, c, lc, uInt8Array2, inDataView, inOffset, outBuffer, outOffset, outBufferEndOffset); - c = getCodeReturn.c; - lc = getCodeReturn.lc; - } else throw "hufDecode issues"; - } - return true; - } - function hufUncompress(uInt8Array2, inDataView, inOffset, nCompressed, outBuffer, nRaw) { - var outOffset = { value: 0 }; - var initialInOffset = inOffset.value; - var im = parseUint32(inDataView, inOffset); - var iM = parseUint32(inDataView, inOffset); - inOffset.value += 4; - var nBits = parseUint32(inDataView, inOffset); - inOffset.value += 4; - if (im < 0 || im >= HUF_ENCSIZE || iM < 0 || iM >= HUF_ENCSIZE) throw "Something wrong with HUF_ENCSIZE"; - var freq = new Array(HUF_ENCSIZE); - var hdec = new Array(HUF_DECSIZE); - hufClearDecTable(hdec); - hufUnpackEncTable(uInt8Array2, inDataView, inOffset, nCompressed - (inOffset.value - initialInOffset), im, iM, freq); - if (nBits > 8 * (nCompressed - (inOffset.value - initialInOffset))) throw "Something wrong with hufUncompress"; - hufBuildDecTable(freq, im, iM, hdec); - hufDecode(freq, hdec, uInt8Array2, inDataView, inOffset, nBits, iM, nRaw, outBuffer, outOffset); - } - function applyLut(lut, data, nData) { - for (var i = 0; i < nData; ++i) data[i] = lut[data[i]]; - } - function predictor(source) { - for (var t = 1; t < source.length; t++) source[t] = source[t - 1] + source[t] - 128; - } - function interleaveScalar(source, out) { - var t1 = 0; - var t2 = Math.floor((source.length + 1) / 2); - var s = 0; - var stop = source.length - 1; - while (true) { - if (s > stop) break; - out[s++] = source[t1++]; - if (s > stop) break; - out[s++] = source[t2++]; - } - } - function decodeRunLength(source) { - var size = source.byteLength; - var out = new Array(); - var p = 0; - var reader = new DataView(source); - while (size > 0) { - var l = reader.getInt8(p++); - if (l < 0) { - var count = -l; - size -= count + 1; - for (var i = 0; i < count; i++) out.push(reader.getUint8(p++)); - } else { - var count = l; - size -= 2; - var value = reader.getUint8(p++); - for (var i = 0; i < count + 1; i++) out.push(value); - } - } - return out; - } - function lossyDctDecode(cscSet, rowPtrs, channelData, acBuffer, dcBuffer, outBuffer) { - var dataView = new DataView(outBuffer.buffer); - var width = channelData[cscSet.idx[0]].width; - var height = channelData[cscSet.idx[0]].height; - var numComp = 3; - var numFullBlocksX = Math.floor(width / 8); - var numBlocksX = Math.ceil(width / 8); - var numBlocksY = Math.ceil(height / 8); - var leftoverX = width - (numBlocksX - 1) * 8; - var leftoverY = height - (numBlocksY - 1) * 8; - var currAcComp = { value: 0 }; - var currDcComp = new Array(numComp); - var dctData = new Array(numComp); - var halfZigBlock = new Array(numComp); - var rowBlock = new Array(numComp); - var rowOffsets = new Array(numComp); - for (let comp2 = 0; comp2 < numComp; ++comp2) { - rowOffsets[comp2] = rowPtrs[cscSet.idx[comp2]]; - currDcComp[comp2] = comp2 < 1 ? 0 : currDcComp[comp2 - 1] + numBlocksX * numBlocksY; - dctData[comp2] = new Float32Array(64); - halfZigBlock[comp2] = new Uint16Array(64); - rowBlock[comp2] = new Uint16Array(numBlocksX * 64); - } - for (let blocky = 0; blocky < numBlocksY; ++blocky) { - var maxY = 8; - if (blocky == numBlocksY - 1) maxY = leftoverY; - var maxX = 8; - for (let blockx = 0; blockx < numBlocksX; ++blockx) { - if (blockx == numBlocksX - 1) maxX = leftoverX; - for (let comp2 = 0; comp2 < numComp; ++comp2) { - halfZigBlock[comp2].fill(0); - halfZigBlock[comp2][0] = dcBuffer[currDcComp[comp2]++]; - unRleAC(currAcComp, acBuffer, halfZigBlock[comp2]); - unZigZag(halfZigBlock[comp2], dctData[comp2]); - dctInverse(dctData[comp2]); - } - csc709Inverse(dctData); - for (let comp2 = 0; comp2 < numComp; ++comp2) convertToHalf(dctData[comp2], rowBlock[comp2], blockx * 64); - } - let offset2 = 0; - for (let comp2 = 0; comp2 < numComp; ++comp2) { - const type2 = channelData[cscSet.idx[comp2]].type; - for (let y2 = 8 * blocky; y2 < 8 * blocky + maxY; ++y2) { - offset2 = rowOffsets[comp2][y2]; - for (let blockx = 0; blockx < numFullBlocksX; ++blockx) { - const src = blockx * 64 + (y2 & 7) * 8; - dataView.setUint16(offset2 + 0 * INT16_SIZE * type2, rowBlock[comp2][src + 0], true); - dataView.setUint16(offset2 + 1 * INT16_SIZE * type2, rowBlock[comp2][src + 1], true); - dataView.setUint16(offset2 + 2 * INT16_SIZE * type2, rowBlock[comp2][src + 2], true); - dataView.setUint16(offset2 + 3 * INT16_SIZE * type2, rowBlock[comp2][src + 3], true); - dataView.setUint16(offset2 + 4 * INT16_SIZE * type2, rowBlock[comp2][src + 4], true); - dataView.setUint16(offset2 + 5 * INT16_SIZE * type2, rowBlock[comp2][src + 5], true); - dataView.setUint16(offset2 + 6 * INT16_SIZE * type2, rowBlock[comp2][src + 6], true); - dataView.setUint16(offset2 + 7 * INT16_SIZE * type2, rowBlock[comp2][src + 7], true); - offset2 += 8 * INT16_SIZE * type2; - } - } - if (numFullBlocksX != numBlocksX) for (let y2 = 8 * blocky; y2 < 8 * blocky + maxY; ++y2) { - const offset3 = rowOffsets[comp2][y2] + 8 * numFullBlocksX * INT16_SIZE * type2; - const src = numFullBlocksX * 64 + (y2 & 7) * 8; - for (let x2 = 0; x2 < maxX; ++x2) dataView.setUint16(offset3 + x2 * INT16_SIZE * type2, rowBlock[comp2][src + x2], true); - } - } - } - var halfRow = new Uint16Array(width); - var dataView = new DataView(outBuffer.buffer); - for (var comp = 0; comp < numComp; ++comp) { - channelData[cscSet.idx[comp]].decoded = true; - var type = channelData[cscSet.idx[comp]].type; - if (channelData[comp].type != 2) continue; - for (var y = 0; y < height; ++y) { - const offset2 = rowOffsets[comp][y]; - for (var x = 0; x < width; ++x) halfRow[x] = dataView.getUint16(offset2 + x * INT16_SIZE * type, true); - for (var x = 0; x < width; ++x) dataView.setFloat32(offset2 + x * INT16_SIZE * type, decodeFloat16(halfRow[x]), true); - } - } - } - function unRleAC(currAcComp, acBuffer, halfZigBlock) { - var acValue; - var dctComp = 1; - while (dctComp < 64) { - acValue = acBuffer[currAcComp.value]; - if (acValue == 65280) dctComp = 64; - else if (acValue >> 8 == 255) dctComp += acValue & 255; - else { - halfZigBlock[dctComp] = acValue; - dctComp++; - } - currAcComp.value++; - } - } - function unZigZag(src, dst) { - dst[0] = decodeFloat16(src[0]); - dst[1] = decodeFloat16(src[1]); - dst[2] = decodeFloat16(src[5]); - dst[3] = decodeFloat16(src[6]); - dst[4] = decodeFloat16(src[14]); - dst[5] = decodeFloat16(src[15]); - dst[6] = decodeFloat16(src[27]); - dst[7] = decodeFloat16(src[28]); - dst[8] = decodeFloat16(src[2]); - dst[9] = decodeFloat16(src[4]); - dst[10] = decodeFloat16(src[7]); - dst[11] = decodeFloat16(src[13]); - dst[12] = decodeFloat16(src[16]); - dst[13] = decodeFloat16(src[26]); - dst[14] = decodeFloat16(src[29]); - dst[15] = decodeFloat16(src[42]); - dst[16] = decodeFloat16(src[3]); - dst[17] = decodeFloat16(src[8]); - dst[18] = decodeFloat16(src[12]); - dst[19] = decodeFloat16(src[17]); - dst[20] = decodeFloat16(src[25]); - dst[21] = decodeFloat16(src[30]); - dst[22] = decodeFloat16(src[41]); - dst[23] = decodeFloat16(src[43]); - dst[24] = decodeFloat16(src[9]); - dst[25] = decodeFloat16(src[11]); - dst[26] = decodeFloat16(src[18]); - dst[27] = decodeFloat16(src[24]); - dst[28] = decodeFloat16(src[31]); - dst[29] = decodeFloat16(src[40]); - dst[30] = decodeFloat16(src[44]); - dst[31] = decodeFloat16(src[53]); - dst[32] = decodeFloat16(src[10]); - dst[33] = decodeFloat16(src[19]); - dst[34] = decodeFloat16(src[23]); - dst[35] = decodeFloat16(src[32]); - dst[36] = decodeFloat16(src[39]); - dst[37] = decodeFloat16(src[45]); - dst[38] = decodeFloat16(src[52]); - dst[39] = decodeFloat16(src[54]); - dst[40] = decodeFloat16(src[20]); - dst[41] = decodeFloat16(src[22]); - dst[42] = decodeFloat16(src[33]); - dst[43] = decodeFloat16(src[38]); - dst[44] = decodeFloat16(src[46]); - dst[45] = decodeFloat16(src[51]); - dst[46] = decodeFloat16(src[55]); - dst[47] = decodeFloat16(src[60]); - dst[48] = decodeFloat16(src[21]); - dst[49] = decodeFloat16(src[34]); - dst[50] = decodeFloat16(src[37]); - dst[51] = decodeFloat16(src[47]); - dst[52] = decodeFloat16(src[50]); - dst[53] = decodeFloat16(src[56]); - dst[54] = decodeFloat16(src[59]); - dst[55] = decodeFloat16(src[61]); - dst[56] = decodeFloat16(src[35]); - dst[57] = decodeFloat16(src[36]); - dst[58] = decodeFloat16(src[48]); - dst[59] = decodeFloat16(src[49]); - dst[60] = decodeFloat16(src[57]); - dst[61] = decodeFloat16(src[58]); - dst[62] = decodeFloat16(src[62]); - dst[63] = decodeFloat16(src[63]); - } - function dctInverse(data) { - const a = .5 * Math.cos(3.14159 / 4); - const b = .5 * Math.cos(3.14159 / 16); - const c = .5 * Math.cos(3.14159 / 8); - const d = .5 * Math.cos(3 * 3.14159 / 16); - const e = .5 * Math.cos(5 * 3.14159 / 16); - const f = .5 * Math.cos(3 * 3.14159 / 8); - const g = .5 * Math.cos(7 * 3.14159 / 16); - var alpha = new Array(4); - var beta = new Array(4); - var theta = new Array(4); - var gamma = new Array(4); - for (var row = 0; row < 8; ++row) { - var rowPtr = row * 8; - alpha[0] = c * data[rowPtr + 2]; - alpha[1] = f * data[rowPtr + 2]; - alpha[2] = c * data[rowPtr + 6]; - alpha[3] = f * data[rowPtr + 6]; - beta[0] = b * data[rowPtr + 1] + d * data[rowPtr + 3] + e * data[rowPtr + 5] + g * data[rowPtr + 7]; - beta[1] = d * data[rowPtr + 1] - g * data[rowPtr + 3] - b * data[rowPtr + 5] - e * data[rowPtr + 7]; - beta[2] = e * data[rowPtr + 1] - b * data[rowPtr + 3] + g * data[rowPtr + 5] + d * data[rowPtr + 7]; - beta[3] = g * data[rowPtr + 1] - e * data[rowPtr + 3] + d * data[rowPtr + 5] - b * data[rowPtr + 7]; - theta[0] = a * (data[rowPtr + 0] + data[rowPtr + 4]); - theta[3] = a * (data[rowPtr + 0] - data[rowPtr + 4]); - theta[1] = alpha[0] + alpha[3]; - theta[2] = alpha[1] - alpha[2]; - gamma[0] = theta[0] + theta[1]; - gamma[1] = theta[3] + theta[2]; - gamma[2] = theta[3] - theta[2]; - gamma[3] = theta[0] - theta[1]; - data[rowPtr + 0] = gamma[0] + beta[0]; - data[rowPtr + 1] = gamma[1] + beta[1]; - data[rowPtr + 2] = gamma[2] + beta[2]; - data[rowPtr + 3] = gamma[3] + beta[3]; - data[rowPtr + 4] = gamma[3] - beta[3]; - data[rowPtr + 5] = gamma[2] - beta[2]; - data[rowPtr + 6] = gamma[1] - beta[1]; - data[rowPtr + 7] = gamma[0] - beta[0]; - } - for (var column = 0; column < 8; ++column) { - alpha[0] = c * data[16 + column]; - alpha[1] = f * data[16 + column]; - alpha[2] = c * data[48 + column]; - alpha[3] = f * data[48 + column]; - beta[0] = b * data[8 + column] + d * data[24 + column] + e * data[40 + column] + g * data[56 + column]; - beta[1] = d * data[8 + column] - g * data[24 + column] - b * data[40 + column] - e * data[56 + column]; - beta[2] = e * data[8 + column] - b * data[24 + column] + g * data[40 + column] + d * data[56 + column]; - beta[3] = g * data[8 + column] - e * data[24 + column] + d * data[40 + column] - b * data[56 + column]; - theta[0] = a * (data[column] + data[32 + column]); - theta[3] = a * (data[column] - data[32 + column]); - theta[1] = alpha[0] + alpha[3]; - theta[2] = alpha[1] - alpha[2]; - gamma[0] = theta[0] + theta[1]; - gamma[1] = theta[3] + theta[2]; - gamma[2] = theta[3] - theta[2]; - gamma[3] = theta[0] - theta[1]; - data[0 + column] = gamma[0] + beta[0]; - data[8 + column] = gamma[1] + beta[1]; - data[16 + column] = gamma[2] + beta[2]; - data[24 + column] = gamma[3] + beta[3]; - data[32 + column] = gamma[3] - beta[3]; - data[40 + column] = gamma[2] - beta[2]; - data[48 + column] = gamma[1] - beta[1]; - data[56 + column] = gamma[0] - beta[0]; - } - } - function csc709Inverse(data) { - for (var i = 0; i < 64; ++i) { - var y = data[0][i]; - var cb = data[1][i]; - var cr = data[2][i]; - data[0][i] = y + 1.5747 * cr; - data[1][i] = y - .1873 * cb - .4682 * cr; - data[2][i] = y + 1.8556 * cb; - } - } - function convertToHalf(src, dst, idx) { - for (var i = 0; i < 64; ++i) dst[idx + i] = DataUtils.toHalfFloat(toLinear(src[i])); - } - function toLinear(float) { - if (float <= 1) return Math.sign(float) * Math.pow(Math.abs(float), 2.2); - else return Math.sign(float) * Math.pow(logBase, Math.abs(float) - 1); - } - function uncompressRAW(info) { - return new DataView(info.array.buffer, info.offset.value, info.size); - } - function uncompressRLE(info) { - var compressed = info.viewer.buffer.slice(info.offset.value, info.offset.value + info.size); - var rawBuffer = new Uint8Array(decodeRunLength(compressed)); - var tmpBuffer = new Uint8Array(rawBuffer.length); - predictor(rawBuffer); - interleaveScalar(rawBuffer, tmpBuffer); - return new DataView(tmpBuffer.buffer); - } - function uncompressZIP(info) { - var rawBuffer = unzlibSync(info.array.slice(info.offset.value, info.offset.value + info.size)); - var tmpBuffer = new Uint8Array(rawBuffer.length); - predictor(rawBuffer); - interleaveScalar(rawBuffer, tmpBuffer); - return new DataView(tmpBuffer.buffer); - } - function uncompressPIZ(info) { - var inDataView = info.viewer; - var inOffset = { value: info.offset.value }; - var outBuffer = new Uint16Array(info.width * info.scanlineBlockSize * (info.channels * info.type)); - var bitmap = new Uint8Array(BITMAP_SIZE); - var outBufferEnd = 0; - var pizChannelData = new Array(info.channels); - for (var i = 0; i < info.channels; i++) { - pizChannelData[i] = {}; - pizChannelData[i]["start"] = outBufferEnd; - pizChannelData[i]["end"] = pizChannelData[i]["start"]; - pizChannelData[i]["nx"] = info.width; - pizChannelData[i]["ny"] = info.lines; - pizChannelData[i]["size"] = info.type; - outBufferEnd += pizChannelData[i].nx * pizChannelData[i].ny * pizChannelData[i].size; - } - var minNonZero = parseUint16(inDataView, inOffset); - var maxNonZero = parseUint16(inDataView, inOffset); - if (maxNonZero >= BITMAP_SIZE) throw "Something is wrong with PIZ_COMPRESSION BITMAP_SIZE"; - if (minNonZero <= maxNonZero) for (var i = 0; i < maxNonZero - minNonZero + 1; i++) bitmap[i + minNonZero] = parseUint8(inDataView, inOffset); - var lut = new Uint16Array(USHORT_RANGE); - var maxValue = reverseLutFromBitmap(bitmap, lut); - var length = parseUint32(inDataView, inOffset); - hufUncompress(info.array, inDataView, inOffset, length, outBuffer, outBufferEnd); - for (var i = 0; i < info.channels; ++i) { - var cd = pizChannelData[i]; - for (var j = 0; j < pizChannelData[i].size; ++j) wav2Decode(outBuffer, cd.start + j, cd.nx, cd.size, cd.ny, cd.nx * cd.size, maxValue); - } - applyLut(lut, outBuffer, outBufferEnd); - var tmpOffset2 = 0; - var tmpBuffer = new Uint8Array(outBuffer.buffer.byteLength); - for (var y = 0; y < info.lines; y++) for (var c = 0; c < info.channels; c++) { - var cd = pizChannelData[c]; - var n = cd.nx * cd.size; - var cp = new Uint8Array(outBuffer.buffer, cd.end * INT16_SIZE, n * INT16_SIZE); - tmpBuffer.set(cp, tmpOffset2); - tmpOffset2 += n * INT16_SIZE; - cd.end += n; - } - return new DataView(tmpBuffer.buffer); - } - function uncompressPXR(info) { - var rawBuffer = unzlibSync(info.array.slice(info.offset.value, info.offset.value + info.size)); - const sz = info.lines * info.channels * info.width; - const tmpBuffer = info.type == 1 ? new Uint16Array(sz) : new Uint32Array(sz); - let tmpBufferEnd = 0; - let writePtr = 0; - const ptr = new Array(4); - for (let y = 0; y < info.lines; y++) for (let c = 0; c < info.channels; c++) { - let pixel = 0; - switch (info.type) { - case 1: - ptr[0] = tmpBufferEnd; - ptr[1] = ptr[0] + info.width; - tmpBufferEnd = ptr[1] + info.width; - for (let j = 0; j < info.width; ++j) { - const diff = rawBuffer[ptr[0]++] << 8 | rawBuffer[ptr[1]++]; - pixel += diff; - tmpBuffer[writePtr] = pixel; - writePtr++; - } - break; - case 2: - ptr[0] = tmpBufferEnd; - ptr[1] = ptr[0] + info.width; - ptr[2] = ptr[1] + info.width; - tmpBufferEnd = ptr[2] + info.width; - for (let j = 0; j < info.width; ++j) { - const diff = rawBuffer[ptr[0]++] << 24 | rawBuffer[ptr[1]++] << 16 | rawBuffer[ptr[2]++] << 8; - pixel += diff; - tmpBuffer[writePtr] = pixel; - writePtr++; - } - break; - } - } - return new DataView(tmpBuffer.buffer); - } - function uncompressDWA(info) { - var inDataView = info.viewer; - var inOffset = { value: info.offset.value }; - var outBuffer = new Uint8Array(info.width * info.lines * (info.channels * info.type * INT16_SIZE)); - var dwaHeader = { - version: parseInt64(inDataView, inOffset), - unknownUncompressedSize: parseInt64(inDataView, inOffset), - unknownCompressedSize: parseInt64(inDataView, inOffset), - acCompressedSize: parseInt64(inDataView, inOffset), - dcCompressedSize: parseInt64(inDataView, inOffset), - rleCompressedSize: parseInt64(inDataView, inOffset), - rleUncompressedSize: parseInt64(inDataView, inOffset), - rleRawSize: parseInt64(inDataView, inOffset), - totalAcUncompressedCount: parseInt64(inDataView, inOffset), - totalDcUncompressedCount: parseInt64(inDataView, inOffset), - acCompression: parseInt64(inDataView, inOffset) - }; - if (dwaHeader.version < 2) throw "EXRLoader.parse: " + EXRHeader.compression + " version " + dwaHeader.version + " is unsupported"; - var channelRules = new Array(); - var ruleSize = parseUint16(inDataView, inOffset) - INT16_SIZE; - while (ruleSize > 0) { - var name = parseNullTerminatedString(inDataView.buffer, inOffset); - var value = parseUint8(inDataView, inOffset); - var compression = value >> 2 & 3; - var csc = (value >> 4) - 1; - var index = new Int8Array([csc])[0]; - var type = parseUint8(inDataView, inOffset); - channelRules.push({ - name, - index, - type, - compression - }); - ruleSize -= name.length + 3; - } - var channels = EXRHeader.channels; - var channelData = new Array(info.channels); - for (var i = 0; i < info.channels; ++i) { - var cd = channelData[i] = {}; - var channel = channels[i]; - cd.name = channel.name; - cd.compression = UNKNOWN; - cd.decoded = false; - cd.type = channel.pixelType; - cd.pLinear = channel.pLinear; - cd.width = info.width; - cd.height = info.lines; - } - var cscSet = { idx: new Array(3) }; - for (var offset2 = 0; offset2 < info.channels; ++offset2) { - var cd = channelData[offset2]; - for (var i = 0; i < channelRules.length; ++i) { - var rule = channelRules[i]; - if (cd.name == rule.name) { - cd.compression = rule.compression; - if (rule.index >= 0) cscSet.idx[rule.index] = offset2; - cd.offset = offset2; - } - } - } - if (dwaHeader.acCompressedSize > 0) switch (dwaHeader.acCompression) { - case STATIC_HUFFMAN: - var acBuffer = new Uint16Array(dwaHeader.totalAcUncompressedCount); - hufUncompress(info.array, inDataView, inOffset, dwaHeader.acCompressedSize, acBuffer, dwaHeader.totalAcUncompressedCount); - break; - case DEFLATE: - var compressed = info.array.slice(inOffset.value, inOffset.value + dwaHeader.totalAcUncompressedCount); - var data = unzlibSync(compressed); - var acBuffer = new Uint16Array(data.buffer); - inOffset.value += dwaHeader.totalAcUncompressedCount; - break; - } - if (dwaHeader.dcCompressedSize > 0) { - var zlibInfo = { - array: info.array, - offset: inOffset, - size: dwaHeader.dcCompressedSize - }; - var dcBuffer = new Uint16Array(uncompressZIP(zlibInfo).buffer); - inOffset.value += dwaHeader.dcCompressedSize; - } - if (dwaHeader.rleRawSize > 0) { - var compressed = info.array.slice(inOffset.value, inOffset.value + dwaHeader.rleCompressedSize); - var data = unzlibSync(compressed); - var rleBuffer = decodeRunLength(data.buffer); - inOffset.value += dwaHeader.rleCompressedSize; - } - var outBufferEnd = 0; - var rowOffsets = new Array(channelData.length); - for (var i = 0; i < rowOffsets.length; ++i) rowOffsets[i] = new Array(); - for (var y = 0; y < info.lines; ++y) for (var chan = 0; chan < channelData.length; ++chan) { - rowOffsets[chan].push(outBufferEnd); - outBufferEnd += channelData[chan].width * info.type * INT16_SIZE; - } - lossyDctDecode(cscSet, rowOffsets, channelData, acBuffer, dcBuffer, outBuffer); - for (var i = 0; i < channelData.length; ++i) { - var cd = channelData[i]; - if (cd.decoded) continue; - switch (cd.compression) { - case RLE: - var row = 0; - var rleOffset = 0; - for (var y = 0; y < info.lines; ++y) { - var rowOffsetBytes = rowOffsets[i][row]; - for (var x = 0; x < cd.width; ++x) { - for (var byte = 0; byte < INT16_SIZE * cd.type; ++byte) outBuffer[rowOffsetBytes++] = rleBuffer[rleOffset + byte * cd.width * cd.height]; - rleOffset++; - } - row++; - } - break; - case LOSSY_DCT: - default: throw "EXRLoader.parse: unsupported channel compression"; - } - } - return new DataView(outBuffer.buffer); - } - function parseNullTerminatedString(buffer2, offset2) { - var uintBuffer = new Uint8Array(buffer2); - var endOffset = 0; - while (uintBuffer[offset2.value + endOffset] != 0) endOffset += 1; - var stringValue = new TextDecoder().decode(uintBuffer.slice(offset2.value, offset2.value + endOffset)); - offset2.value = offset2.value + endOffset + 1; - return stringValue; - } - function parseFixedLengthString(buffer2, offset2, size) { - var stringValue = new TextDecoder().decode(new Uint8Array(buffer2).slice(offset2.value, offset2.value + size)); - offset2.value = offset2.value + size; - return stringValue; - } - function parseRational(dataView, offset2) { - return [parseInt32(dataView, offset2), parseUint32(dataView, offset2)]; - } - function parseTimecode(dataView, offset2) { - return [parseUint32(dataView, offset2), parseUint32(dataView, offset2)]; - } - function parseInt32(dataView, offset2) { - var Int32 = dataView.getInt32(offset2.value, true); - offset2.value = offset2.value + INT32_SIZE; - return Int32; - } - function parseUint32(dataView, offset2) { - var Uint32 = dataView.getUint32(offset2.value, true); - offset2.value = offset2.value + INT32_SIZE; - return Uint32; - } - function parseUint8Array(uInt8Array2, offset2) { - var Uint8 = uInt8Array2[offset2.value]; - offset2.value = offset2.value + INT8_SIZE; - return Uint8; - } - function parseUint8(dataView, offset2) { - var Uint8 = dataView.getUint8(offset2.value); - offset2.value = offset2.value + INT8_SIZE; - return Uint8; - } - const parseInt64 = function(dataView, offset2) { - let int; - if ("getBigInt64" in DataView.prototype) int = Number(dataView.getBigInt64(offset2.value, true)); - else int = dataView.getUint32(offset2.value + 4, true) + Number(dataView.getUint32(offset2.value, true) << 32); - offset2.value += ULONG_SIZE; - return int; - }; - function parseFloat32(dataView, offset2) { - var float = dataView.getFloat32(offset2.value, true); - offset2.value += FLOAT32_SIZE; - return float; - } - function decodeFloat32(dataView, offset2) { - return DataUtils.toHalfFloat(parseFloat32(dataView, offset2)); - } - function decodeFloat16(binary) { - var exponent = (binary & 31744) >> 10, fraction = binary & 1023; - return (binary >> 15 ? -1 : 1) * (exponent ? exponent === 31 ? fraction ? NaN : Infinity : Math.pow(2, exponent - 15) * (1 + fraction / 1024) : 6103515625e-14 * (fraction / 1024)); - } - function parseUint16(dataView, offset2) { - var Uint16 = dataView.getUint16(offset2.value, true); - offset2.value += INT16_SIZE; - return Uint16; - } - function parseFloat16(buffer2, offset2) { - return decodeFloat16(parseUint16(buffer2, offset2)); - } - function parseChlist(dataView, buffer2, offset2, size) { - var startOffset = offset2.value; - var channels = []; - while (offset2.value < startOffset + size - 1) { - var name = parseNullTerminatedString(buffer2, offset2); - var pixelType = parseInt32(dataView, offset2); - var pLinear = parseUint8(dataView, offset2); - offset2.value += 3; - var xSampling = parseInt32(dataView, offset2); - var ySampling = parseInt32(dataView, offset2); - channels.push({ - name, - pixelType, - pLinear, - xSampling, - ySampling - }); - } - offset2.value += 1; - return channels; - } - function parseChromaticities(dataView, offset2) { - return { - redX: parseFloat32(dataView, offset2), - redY: parseFloat32(dataView, offset2), - greenX: parseFloat32(dataView, offset2), - greenY: parseFloat32(dataView, offset2), - blueX: parseFloat32(dataView, offset2), - blueY: parseFloat32(dataView, offset2), - whiteX: parseFloat32(dataView, offset2), - whiteY: parseFloat32(dataView, offset2) - }; - } - function parseCompression(dataView, offset2) { - return [ - "NO_COMPRESSION", - "RLE_COMPRESSION", - "ZIPS_COMPRESSION", - "ZIP_COMPRESSION", - "PIZ_COMPRESSION", - "PXR24_COMPRESSION", - "B44_COMPRESSION", - "B44A_COMPRESSION", - "DWAA_COMPRESSION", - "DWAB_COMPRESSION" - ][parseUint8(dataView, offset2)]; - } - function parseBox2i(dataView, offset2) { - return { - xMin: parseUint32(dataView, offset2), - yMin: parseUint32(dataView, offset2), - xMax: parseUint32(dataView, offset2), - yMax: parseUint32(dataView, offset2) - }; - } - function parseLineOrder(dataView, offset2) { - return ["INCREASING_Y"][parseUint8(dataView, offset2)]; - } - function parseV2f(dataView, offset2) { - return [parseFloat32(dataView, offset2), parseFloat32(dataView, offset2)]; - } - function parseV3f(dataView, offset2) { - return [ - parseFloat32(dataView, offset2), - parseFloat32(dataView, offset2), - parseFloat32(dataView, offset2) - ]; - } - function parseValue(dataView, buffer2, offset2, type, size) { - if (type === "string" || type === "stringvector" || type === "iccProfile") return parseFixedLengthString(buffer2, offset2, size); - else if (type === "chlist") return parseChlist(dataView, buffer2, offset2, size); - else if (type === "chromaticities") return parseChromaticities(dataView, offset2); - else if (type === "compression") return parseCompression(dataView, offset2); - else if (type === "box2i") return parseBox2i(dataView, offset2); - else if (type === "lineOrder") return parseLineOrder(dataView, offset2); - else if (type === "float") return parseFloat32(dataView, offset2); - else if (type === "v2f") return parseV2f(dataView, offset2); - else if (type === "v3f") return parseV3f(dataView, offset2); - else if (type === "int") return parseInt32(dataView, offset2); - else if (type === "rational") return parseRational(dataView, offset2); - else if (type === "timecode") return parseTimecode(dataView, offset2); - else if (type === "preview") { - offset2.value += size; - return "skipped"; - } else { - offset2.value += size; - return; - } - } - function parseHeader(dataView, buffer2, offset2) { - const EXRHeader2 = {}; - if (dataView.getUint32(0, true) != 20000630) throw "THREE.EXRLoader: provided file doesn't appear to be in OpenEXR format."; - EXRHeader2.version = dataView.getUint8(4); - const spec = dataView.getUint8(5); - EXRHeader2.spec = { - singleTile: !!(spec & 2), - longName: !!(spec & 4), - deepFormat: !!(spec & 8), - multiPart: !!(spec & 16) - }; - offset2.value = 8; - var keepReading = true; - while (keepReading) { - var attributeName = parseNullTerminatedString(buffer2, offset2); - if (attributeName == 0) keepReading = false; - else { - var attributeType = parseNullTerminatedString(buffer2, offset2); - var attributeValue = parseValue(dataView, buffer2, offset2, attributeType, parseUint32(dataView, offset2)); - if (attributeValue === void 0) console.warn(`EXRLoader.parse: skipped unknown header attribute type '${attributeType}'.`); - else EXRHeader2[attributeName] = attributeValue; - } - } - if ((spec & -5) != 0) { - console.error("EXRHeader:", EXRHeader2); - throw "THREE.EXRLoader: provided file is currently unsupported."; - } - return EXRHeader2; - } - function setupDecoder(EXRHeader2, dataView, uInt8Array2, offset2, outputType) { - const EXRDecoder2 = { - size: 0, - viewer: dataView, - array: uInt8Array2, - offset: offset2, - width: EXRHeader2.dataWindow.xMax - EXRHeader2.dataWindow.xMin + 1, - height: EXRHeader2.dataWindow.yMax - EXRHeader2.dataWindow.yMin + 1, - channels: EXRHeader2.channels.length, - bytesPerLine: null, - lines: null, - inputSize: null, - type: EXRHeader2.channels[0].pixelType, - uncompress: null, - getter: null, - format: null, - [hasColorSpace ? "colorSpace" : "encoding"]: null - }; - switch (EXRHeader2.compression) { - case "NO_COMPRESSION": - EXRDecoder2.lines = 1; - EXRDecoder2.uncompress = uncompressRAW; - break; - case "RLE_COMPRESSION": - EXRDecoder2.lines = 1; - EXRDecoder2.uncompress = uncompressRLE; - break; - case "ZIPS_COMPRESSION": - EXRDecoder2.lines = 1; - EXRDecoder2.uncompress = uncompressZIP; - break; - case "ZIP_COMPRESSION": - EXRDecoder2.lines = 16; - EXRDecoder2.uncompress = uncompressZIP; - break; - case "PIZ_COMPRESSION": - EXRDecoder2.lines = 32; - EXRDecoder2.uncompress = uncompressPIZ; - break; - case "PXR24_COMPRESSION": - EXRDecoder2.lines = 16; - EXRDecoder2.uncompress = uncompressPXR; - break; - case "DWAA_COMPRESSION": - EXRDecoder2.lines = 32; - EXRDecoder2.uncompress = uncompressDWA; - break; - case "DWAB_COMPRESSION": - EXRDecoder2.lines = 256; - EXRDecoder2.uncompress = uncompressDWA; - break; - default: throw "EXRLoader.parse: " + EXRHeader2.compression + " is unsupported"; - } - EXRDecoder2.scanlineBlockSize = EXRDecoder2.lines; - if (EXRDecoder2.type == 1) switch (outputType) { - case FloatType: - EXRDecoder2.getter = parseFloat16; - EXRDecoder2.inputSize = INT16_SIZE; - break; - case HalfFloatType: - EXRDecoder2.getter = parseUint16; - EXRDecoder2.inputSize = INT16_SIZE; - break; - } - else if (EXRDecoder2.type == 2) switch (outputType) { - case FloatType: - EXRDecoder2.getter = parseFloat32; - EXRDecoder2.inputSize = FLOAT32_SIZE; - break; - case HalfFloatType: - EXRDecoder2.getter = decodeFloat32; - EXRDecoder2.inputSize = FLOAT32_SIZE; - } - else throw "EXRLoader.parse: unsupported pixelType " + EXRDecoder2.type + " for " + EXRHeader2.compression + "."; - EXRDecoder2.blockCount = (EXRHeader2.dataWindow.yMax + 1) / EXRDecoder2.scanlineBlockSize; - for (var i = 0; i < EXRDecoder2.blockCount; i++) parseInt64(dataView, offset2); - EXRDecoder2.outputChannels = EXRDecoder2.channels == 3 ? 4 : EXRDecoder2.channels; - const size = EXRDecoder2.width * EXRDecoder2.height * EXRDecoder2.outputChannels; - switch (outputType) { - case FloatType: - EXRDecoder2.byteArray = new Float32Array(size); - if (EXRDecoder2.channels < EXRDecoder2.outputChannels) EXRDecoder2.byteArray.fill(1, 0, size); - break; - case HalfFloatType: - EXRDecoder2.byteArray = new Uint16Array(size); - if (EXRDecoder2.channels < EXRDecoder2.outputChannels) EXRDecoder2.byteArray.fill(15360, 0, size); - break; - default: - console.error("THREE.EXRLoader: unsupported type: ", outputType); - break; - } - EXRDecoder2.bytesPerLine = EXRDecoder2.width * EXRDecoder2.inputSize * EXRDecoder2.channels; - if (EXRDecoder2.outputChannels == 4) EXRDecoder2.format = RGBAFormat; - else EXRDecoder2.format = RedFormat; - if (hasColorSpace) EXRDecoder2.colorSpace = "srgb-linear"; - else EXRDecoder2.encoding = 3e3; - return EXRDecoder2; - } - const bufferDataView = new DataView(buffer); - const uInt8Array = new Uint8Array(buffer); - const offset = { value: 0 }; - const EXRHeader = parseHeader(bufferDataView, buffer, offset); - const EXRDecoder = setupDecoder(EXRHeader, bufferDataView, uInt8Array, offset, this.type); - const tmpOffset = { value: 0 }; - const channelOffsets = { - R: 0, - G: 1, - B: 2, - A: 3, - Y: 0 - }; - for (let scanlineBlockIdx = 0; scanlineBlockIdx < EXRDecoder.height / EXRDecoder.scanlineBlockSize; scanlineBlockIdx++) { - const line = parseUint32(bufferDataView, offset); - EXRDecoder.size = parseUint32(bufferDataView, offset); - EXRDecoder.lines = line + EXRDecoder.scanlineBlockSize > EXRDecoder.height ? EXRDecoder.height - line : EXRDecoder.scanlineBlockSize; - const viewer = EXRDecoder.size < EXRDecoder.lines * EXRDecoder.bytesPerLine ? EXRDecoder.uncompress(EXRDecoder) : uncompressRAW(EXRDecoder); - offset.value += EXRDecoder.size; - for (let line_y = 0; line_y < EXRDecoder.scanlineBlockSize; line_y++) { - const true_y = line_y + scanlineBlockIdx * EXRDecoder.scanlineBlockSize; - if (true_y >= EXRDecoder.height) break; - for (let channelID = 0; channelID < EXRDecoder.channels; channelID++) { - const cOff = channelOffsets[EXRHeader.channels[channelID].name]; - for (let x = 0; x < EXRDecoder.width; x++) { - tmpOffset.value = (line_y * (EXRDecoder.channels * EXRDecoder.width) + channelID * EXRDecoder.width + x) * EXRDecoder.inputSize; - const outIndex = (EXRDecoder.height - 1 - true_y) * (EXRDecoder.width * EXRDecoder.outputChannels) + x * EXRDecoder.outputChannels + cOff; - EXRDecoder.byteArray[outIndex] = EXRDecoder.getter(viewer, tmpOffset); - } - } - } - } - return { - header: EXRHeader, - width: EXRDecoder.width, - height: EXRDecoder.height, - data: EXRDecoder.byteArray, - format: EXRDecoder.format, - [hasColorSpace ? "colorSpace" : "encoding"]: EXRDecoder[hasColorSpace ? "colorSpace" : "encoding"], - type: this.type - }; - } - setDataType(value) { - this.type = value; - return this; - } - load(url, onLoad, onProgress, onError) { - function onLoadCallback(texture, texData) { - if (hasColorSpace) texture.colorSpace = texData.colorSpace; - else texture.encoding = texData.encoding; - texture.minFilter = LinearFilter; - texture.magFilter = LinearFilter; - texture.generateMipmaps = false; - texture.flipY = false; - if (onLoad) onLoad(texture, texData); - } - return super.load(url, onLoadCallback, onProgress, onError); - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/3MFLoader.js -var ThreeMFLoader = class extends Loader { - constructor(manager) { - super(manager); - this.availableExtensions = []; - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(scope.manager); - loader.setPath(scope.path); - loader.setResponseType("arraybuffer"); - loader.setRequestHeader(scope.requestHeader); - loader.setWithCredentials(scope.withCredentials); - loader.load(url, function(buffer) { - try { - onLoad(scope.parse(buffer)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(data) { - const scope = this; - const textureLoader = new TextureLoader(this.manager); - function loadDocument(data2) { - let zip = null; - let file = null; - let relsName; - let modelRelsName; - const modelPartNames = []; - const texturesPartNames = []; - let modelRels; - const modelParts = {}; - const printTicketParts = {}; - const texturesParts = {}; - const otherParts = {}; - try { - zip = unzipSync(new Uint8Array(data2)); - } catch (e) { - if (e instanceof ReferenceError) { - console.error("THREE.3MFLoader: fflate missing and file is compressed."); - return null; - } - } - for (file in zip) if (file.match(/\_rels\/.rels$/)) relsName = file; - else if (file.match(/3D\/_rels\/.*\.model\.rels$/)) modelRelsName = file; - else if (file.match(/^3D\/.*\.model$/)) modelPartNames.push(file); - else if (file.match(/^3D\/Metadata\/.*\.xml$/)); - else if (file.match(/^3D\/Textures?\/.*/)) texturesPartNames.push(file); - else if (file.match(/^3D\/Other\/.*/)); - const relsView = zip[relsName]; - const rels = parseRelsXml(decodeText$1(relsView)); - if (modelRelsName) { - const relsView2 = zip[modelRelsName]; - modelRels = parseRelsXml(decodeText$1(relsView2)); - } - for (let i = 0; i < modelPartNames.length; i++) { - const modelPart = modelPartNames[i]; - const view = zip[modelPart]; - const fileText = decodeText$1(view); - const xmlData = new DOMParser().parseFromString(fileText, "application/xml"); - if (xmlData.documentElement.nodeName.toLowerCase() !== "model") console.error("THREE.3MFLoader: Error loading 3MF - no 3MF document found: ", modelPart); - const modelNode = xmlData.querySelector("model"); - const extensions = {}; - for (let i2 = 0; i2 < modelNode.attributes.length; i2++) { - const attr = modelNode.attributes[i2]; - if (attr.name.match(/^xmlns:(.+)$/)) extensions[attr.value] = RegExp.$1; - } - const modelData = parseModelNode(modelNode); - modelData["xml"] = modelNode; - if (0 < Object.keys(extensions).length) modelData["extensions"] = extensions; - modelParts[modelPart] = modelData; - } - for (let i = 0; i < texturesPartNames.length; i++) { - const texturesPartName = texturesPartNames[i]; - texturesParts[texturesPartName] = zip[texturesPartName].buffer; - } - return { - rels, - modelRels, - model: modelParts, - printTicket: printTicketParts, - texture: texturesParts, - other: otherParts - }; - } - function parseRelsXml(relsFileText) { - const relationships = []; - const relsNodes = new DOMParser().parseFromString(relsFileText, "application/xml").querySelectorAll("Relationship"); - for (let i = 0; i < relsNodes.length; i++) { - const relsNode = relsNodes[i]; - const relationship = { - target: relsNode.getAttribute("Target"), - id: relsNode.getAttribute("Id"), - type: relsNode.getAttribute("Type") - }; - relationships.push(relationship); - } - return relationships; - } - function parseMetadataNodes(metadataNodes) { - const metadataData = {}; - for (let i = 0; i < metadataNodes.length; i++) { - const metadataNode = metadataNodes[i]; - const name = metadataNode.getAttribute("name"); - if (0 <= [ - "Title", - "Designer", - "Description", - "Copyright", - "LicenseTerms", - "Rating", - "CreationDate", - "ModificationDate" - ].indexOf(name)) metadataData[name] = metadataNode.textContent; - } - return metadataData; - } - function parseBasematerialsNode(basematerialsNode) { - const basematerialsData = { - id: basematerialsNode.getAttribute("id"), - basematerials: [] - }; - const basematerialNodes = basematerialsNode.querySelectorAll("base"); - for (let i = 0; i < basematerialNodes.length; i++) { - const basematerialNode = basematerialNodes[i]; - const basematerialData = parseBasematerialNode(basematerialNode); - basematerialData.index = i; - basematerialsData.basematerials.push(basematerialData); - } - return basematerialsData; - } - function parseTexture2DNode(texture2DNode) { - return { - id: texture2DNode.getAttribute("id"), - path: texture2DNode.getAttribute("path"), - contenttype: texture2DNode.getAttribute("contenttype"), - tilestyleu: texture2DNode.getAttribute("tilestyleu"), - tilestylev: texture2DNode.getAttribute("tilestylev"), - filter: texture2DNode.getAttribute("filter") - }; - } - function parseTextures2DGroupNode(texture2DGroupNode) { - const texture2DGroupData = { - id: texture2DGroupNode.getAttribute("id"), - texid: texture2DGroupNode.getAttribute("texid"), - displaypropertiesid: texture2DGroupNode.getAttribute("displaypropertiesid") - }; - const tex2coordNodes = texture2DGroupNode.querySelectorAll("tex2coord"); - const uvs = []; - for (let i = 0; i < tex2coordNodes.length; i++) { - const tex2coordNode = tex2coordNodes[i]; - const u = tex2coordNode.getAttribute("u"); - const v = tex2coordNode.getAttribute("v"); - uvs.push(parseFloat(u), parseFloat(v)); - } - texture2DGroupData["uvs"] = new Float32Array(uvs); - return texture2DGroupData; - } - function parseColorGroupNode(colorGroupNode) { - const colorGroupData = { - id: colorGroupNode.getAttribute("id"), - displaypropertiesid: colorGroupNode.getAttribute("displaypropertiesid") - }; - const colorNodes = colorGroupNode.querySelectorAll("color"); - const colors = []; - const colorObject = new Color(); - for (let i = 0; i < colorNodes.length; i++) { - const color = colorNodes[i].getAttribute("color"); - colorObject.setStyle(color.substring(0, 7)); - colorObject.convertSRGBToLinear(); - colors.push(colorObject.r, colorObject.g, colorObject.b); - } - colorGroupData["colors"] = new Float32Array(colors); - return colorGroupData; - } - function parseMetallicDisplaypropertiesNode(metallicDisplaypropetiesNode) { - const metallicDisplaypropertiesData = { id: metallicDisplaypropetiesNode.getAttribute("id") }; - const metallicNodes = metallicDisplaypropetiesNode.querySelectorAll("pbmetallic"); - const metallicData = []; - for (let i = 0; i < metallicNodes.length; i++) { - const metallicNode = metallicNodes[i]; - metallicData.push({ - name: metallicNode.getAttribute("name"), - metallicness: parseFloat(metallicNode.getAttribute("metallicness")), - roughness: parseFloat(metallicNode.getAttribute("roughness")) - }); - } - metallicDisplaypropertiesData.data = metallicData; - return metallicDisplaypropertiesData; - } - function parseBasematerialNode(basematerialNode) { - const basematerialData = {}; - basematerialData["name"] = basematerialNode.getAttribute("name"); - basematerialData["displaycolor"] = basematerialNode.getAttribute("displaycolor"); - basematerialData["displaypropertiesid"] = basematerialNode.getAttribute("displaypropertiesid"); - return basematerialData; - } - function parseMeshNode(meshNode) { - const meshData = {}; - const vertices = []; - const vertexNodes = meshNode.querySelectorAll("vertices vertex"); - for (let i = 0; i < vertexNodes.length; i++) { - const vertexNode = vertexNodes[i]; - const x = vertexNode.getAttribute("x"); - const y = vertexNode.getAttribute("y"); - const z = vertexNode.getAttribute("z"); - vertices.push(parseFloat(x), parseFloat(y), parseFloat(z)); - } - meshData["vertices"] = new Float32Array(vertices); - const triangleProperties = []; - const triangles = []; - const triangleNodes = meshNode.querySelectorAll("triangles triangle"); - for (let i = 0; i < triangleNodes.length; i++) { - const triangleNode = triangleNodes[i]; - const v1 = triangleNode.getAttribute("v1"); - const v2 = triangleNode.getAttribute("v2"); - const v3 = triangleNode.getAttribute("v3"); - const p1 = triangleNode.getAttribute("p1"); - const p2 = triangleNode.getAttribute("p2"); - const p3 = triangleNode.getAttribute("p3"); - const pid = triangleNode.getAttribute("pid"); - const triangleProperty = {}; - triangleProperty["v1"] = parseInt(v1, 10); - triangleProperty["v2"] = parseInt(v2, 10); - triangleProperty["v3"] = parseInt(v3, 10); - triangles.push(triangleProperty["v1"], triangleProperty["v2"], triangleProperty["v3"]); - if (p1) triangleProperty["p1"] = parseInt(p1, 10); - if (p2) triangleProperty["p2"] = parseInt(p2, 10); - if (p3) triangleProperty["p3"] = parseInt(p3, 10); - if (pid) triangleProperty["pid"] = pid; - if (0 < Object.keys(triangleProperty).length) triangleProperties.push(triangleProperty); - } - meshData["triangleProperties"] = triangleProperties; - meshData["triangles"] = new Uint32Array(triangles); - return meshData; - } - function parseComponentsNode(componentsNode) { - const components = []; - const componentNodes = componentsNode.querySelectorAll("component"); - for (let i = 0; i < componentNodes.length; i++) { - const componentNode = componentNodes[i]; - const componentData = parseComponentNode(componentNode); - components.push(componentData); - } - return components; - } - function parseComponentNode(componentNode) { - const componentData = {}; - componentData["objectId"] = componentNode.getAttribute("objectid"); - const transform = componentNode.getAttribute("transform"); - if (transform) componentData["transform"] = parseTransform(transform); - return componentData; - } - function parseTransform(transform) { - const t = []; - transform.split(" ").forEach(function(s) { - t.push(parseFloat(s)); - }); - const matrix = new Matrix4(); - matrix.set(t[0], t[3], t[6], t[9], t[1], t[4], t[7], t[10], t[2], t[5], t[8], t[11], 0, 0, 0, 1); - return matrix; - } - function parseObjectNode(objectNode) { - const objectData = { type: objectNode.getAttribute("type") }; - const id = objectNode.getAttribute("id"); - if (id) objectData["id"] = id; - const pid = objectNode.getAttribute("pid"); - if (pid) objectData["pid"] = pid; - const pindex = objectNode.getAttribute("pindex"); - if (pindex) objectData["pindex"] = pindex; - const thumbnail = objectNode.getAttribute("thumbnail"); - if (thumbnail) objectData["thumbnail"] = thumbnail; - const partnumber = objectNode.getAttribute("partnumber"); - if (partnumber) objectData["partnumber"] = partnumber; - const name = objectNode.getAttribute("name"); - if (name) objectData["name"] = name; - const meshNode = objectNode.querySelector("mesh"); - if (meshNode) objectData["mesh"] = parseMeshNode(meshNode); - const componentsNode = objectNode.querySelector("components"); - if (componentsNode) objectData["components"] = parseComponentsNode(componentsNode); - return objectData; - } - function parseResourcesNode(resourcesNode) { - const resourcesData = {}; - resourcesData["basematerials"] = {}; - const basematerialsNodes = resourcesNode.querySelectorAll("basematerials"); - for (let i = 0; i < basematerialsNodes.length; i++) { - const basematerialsNode = basematerialsNodes[i]; - const basematerialsData = parseBasematerialsNode(basematerialsNode); - resourcesData["basematerials"][basematerialsData["id"]] = basematerialsData; - } - resourcesData["texture2d"] = {}; - const textures2DNodes = resourcesNode.querySelectorAll("texture2d"); - for (let i = 0; i < textures2DNodes.length; i++) { - const textures2DNode = textures2DNodes[i]; - const texture2DData = parseTexture2DNode(textures2DNode); - resourcesData["texture2d"][texture2DData["id"]] = texture2DData; - } - resourcesData["colorgroup"] = {}; - const colorGroupNodes = resourcesNode.querySelectorAll("colorgroup"); - for (let i = 0; i < colorGroupNodes.length; i++) { - const colorGroupNode = colorGroupNodes[i]; - const colorGroupData = parseColorGroupNode(colorGroupNode); - resourcesData["colorgroup"][colorGroupData["id"]] = colorGroupData; - } - resourcesData["pbmetallicdisplayproperties"] = {}; - const pbmetallicdisplaypropertiesNodes = resourcesNode.querySelectorAll("pbmetallicdisplayproperties"); - for (let i = 0; i < pbmetallicdisplaypropertiesNodes.length; i++) { - const pbmetallicdisplaypropertiesNode = pbmetallicdisplaypropertiesNodes[i]; - const pbmetallicdisplaypropertiesData = parseMetallicDisplaypropertiesNode(pbmetallicdisplaypropertiesNode); - resourcesData["pbmetallicdisplayproperties"][pbmetallicdisplaypropertiesData["id"]] = pbmetallicdisplaypropertiesData; - } - resourcesData["texture2dgroup"] = {}; - const textures2DGroupNodes = resourcesNode.querySelectorAll("texture2dgroup"); - for (let i = 0; i < textures2DGroupNodes.length; i++) { - const textures2DGroupNode = textures2DGroupNodes[i]; - const textures2DGroupData = parseTextures2DGroupNode(textures2DGroupNode); - resourcesData["texture2dgroup"][textures2DGroupData["id"]] = textures2DGroupData; - } - resourcesData["object"] = {}; - const objectNodes = resourcesNode.querySelectorAll("object"); - for (let i = 0; i < objectNodes.length; i++) { - const objectNode = objectNodes[i]; - const objectData = parseObjectNode(objectNode); - resourcesData["object"][objectData["id"]] = objectData; - } - return resourcesData; - } - function parseBuildNode(buildNode) { - const buildData = []; - const itemNodes = buildNode.querySelectorAll("item"); - for (let i = 0; i < itemNodes.length; i++) { - const itemNode = itemNodes[i]; - const buildItem = { objectId: itemNode.getAttribute("objectid") }; - const transform = itemNode.getAttribute("transform"); - if (transform) buildItem["transform"] = parseTransform(transform); - buildData.push(buildItem); - } - return buildData; - } - function parseModelNode(modelNode) { - const modelData = { unit: modelNode.getAttribute("unit") || "millimeter" }; - const metadataNodes = modelNode.querySelectorAll("metadata"); - if (metadataNodes) modelData["metadata"] = parseMetadataNodes(metadataNodes); - const resourcesNode = modelNode.querySelector("resources"); - if (resourcesNode) modelData["resources"] = parseResourcesNode(resourcesNode); - const buildNode = modelNode.querySelector("build"); - if (buildNode) modelData["build"] = parseBuildNode(buildNode); - return modelData; - } - function buildTexture(texture2dgroup, objects2, modelData, textureData) { - const texid = texture2dgroup.texid; - const texture2d = modelData.resources.texture2d[texid]; - if (texture2d) { - const data2 = textureData[texture2d.path]; - const type = texture2d.contenttype; - const blob = new Blob([data2], { type }); - const sourceURI = URL.createObjectURL(blob); - const texture = textureLoader.load(sourceURI, function() { - URL.revokeObjectURL(sourceURI); - }); - if ("colorSpace" in texture) texture.colorSpace = "srgb"; - else texture.encoding = 3001; - switch (texture2d.tilestyleu) { - case "wrap": - texture.wrapS = RepeatWrapping; - break; - case "mirror": - texture.wrapS = MirroredRepeatWrapping; - break; - case "none": - case "clamp": - texture.wrapS = ClampToEdgeWrapping; - break; - default: texture.wrapS = RepeatWrapping; - } - switch (texture2d.tilestylev) { - case "wrap": - texture.wrapT = RepeatWrapping; - break; - case "mirror": - texture.wrapT = MirroredRepeatWrapping; - break; - case "none": - case "clamp": - texture.wrapT = ClampToEdgeWrapping; - break; - default: texture.wrapT = RepeatWrapping; - } - switch (texture2d.filter) { - case "auto": - texture.magFilter = LinearFilter; - texture.minFilter = LinearMipmapLinearFilter; - break; - case "linear": - texture.magFilter = LinearFilter; - texture.minFilter = LinearFilter; - break; - case "nearest": - texture.magFilter = NearestFilter; - texture.minFilter = NearestFilter; - break; - default: - texture.magFilter = LinearFilter; - texture.minFilter = LinearMipmapLinearFilter; - } - return texture; - } else return null; - } - function buildBasematerialsMeshes(basematerials, triangleProperties, meshData, objects2, modelData, textureData, objectData) { - const objectPindex = objectData.pindex; - const materialMap = {}; - for (let i = 0, l = triangleProperties.length; i < l; i++) { - const triangleProperty = triangleProperties[i]; - const pindex = triangleProperty.p1 !== void 0 ? triangleProperty.p1 : objectPindex; - if (materialMap[pindex] === void 0) materialMap[pindex] = []; - materialMap[pindex].push(triangleProperty); - } - const keys = Object.keys(materialMap); - const meshes = []; - for (let i = 0, l = keys.length; i < l; i++) { - const materialIndex = keys[i]; - const trianglePropertiesProps = materialMap[materialIndex]; - const basematerialData = basematerials.basematerials[materialIndex]; - const material = getBuild(basematerialData, objects2, modelData, textureData, objectData, buildBasematerial); - const geometry = new BufferGeometry(); - const positionData = []; - const vertices = meshData.vertices; - for (let j = 0, jl = trianglePropertiesProps.length; j < jl; j++) { - const triangleProperty = trianglePropertiesProps[j]; - positionData.push(vertices[triangleProperty.v1 * 3 + 0]); - positionData.push(vertices[triangleProperty.v1 * 3 + 1]); - positionData.push(vertices[triangleProperty.v1 * 3 + 2]); - positionData.push(vertices[triangleProperty.v2 * 3 + 0]); - positionData.push(vertices[triangleProperty.v2 * 3 + 1]); - positionData.push(vertices[triangleProperty.v2 * 3 + 2]); - positionData.push(vertices[triangleProperty.v3 * 3 + 0]); - positionData.push(vertices[triangleProperty.v3 * 3 + 1]); - positionData.push(vertices[triangleProperty.v3 * 3 + 2]); - } - geometry.setAttribute("position", new Float32BufferAttribute(positionData, 3)); - const mesh = new Mesh(geometry, material); - meshes.push(mesh); - } - return meshes; - } - function buildTexturedMesh(texture2dgroup, triangleProperties, meshData, objects2, modelData, textureData, objectData) { - const geometry = new BufferGeometry(); - const positionData = []; - const uvData = []; - const vertices = meshData.vertices; - const uvs = texture2dgroup.uvs; - for (let i = 0, l = triangleProperties.length; i < l; i++) { - const triangleProperty = triangleProperties[i]; - positionData.push(vertices[triangleProperty.v1 * 3 + 0]); - positionData.push(vertices[triangleProperty.v1 * 3 + 1]); - positionData.push(vertices[triangleProperty.v1 * 3 + 2]); - positionData.push(vertices[triangleProperty.v2 * 3 + 0]); - positionData.push(vertices[triangleProperty.v2 * 3 + 1]); - positionData.push(vertices[triangleProperty.v2 * 3 + 2]); - positionData.push(vertices[triangleProperty.v3 * 3 + 0]); - positionData.push(vertices[triangleProperty.v3 * 3 + 1]); - positionData.push(vertices[triangleProperty.v3 * 3 + 2]); - uvData.push(uvs[triangleProperty.p1 * 2 + 0]); - uvData.push(uvs[triangleProperty.p1 * 2 + 1]); - uvData.push(uvs[triangleProperty.p2 * 2 + 0]); - uvData.push(uvs[triangleProperty.p2 * 2 + 1]); - uvData.push(uvs[triangleProperty.p3 * 2 + 0]); - uvData.push(uvs[triangleProperty.p3 * 2 + 1]); - } - geometry.setAttribute("position", new Float32BufferAttribute(positionData, 3)); - geometry.setAttribute("uv", new Float32BufferAttribute(uvData, 2)); - return new Mesh(geometry, new MeshPhongMaterial({ - map: getBuild(texture2dgroup, objects2, modelData, textureData, objectData, buildTexture), - flatShading: true - })); - } - function buildVertexColorMesh(colorgroup, triangleProperties, meshData, objects2, modelData, objectData) { - const geometry = new BufferGeometry(); - const positionData = []; - const colorData = []; - const vertices = meshData.vertices; - const colors = colorgroup.colors; - for (let i = 0, l = triangleProperties.length; i < l; i++) { - const triangleProperty = triangleProperties[i]; - const v1 = triangleProperty.v1; - const v2 = triangleProperty.v2; - const v3 = triangleProperty.v3; - positionData.push(vertices[v1 * 3 + 0]); - positionData.push(vertices[v1 * 3 + 1]); - positionData.push(vertices[v1 * 3 + 2]); - positionData.push(vertices[v2 * 3 + 0]); - positionData.push(vertices[v2 * 3 + 1]); - positionData.push(vertices[v2 * 3 + 2]); - positionData.push(vertices[v3 * 3 + 0]); - positionData.push(vertices[v3 * 3 + 1]); - positionData.push(vertices[v3 * 3 + 2]); - const p1 = triangleProperty.p1 !== void 0 ? triangleProperty.p1 : objectData.pindex; - const p2 = triangleProperty.p2 !== void 0 ? triangleProperty.p2 : p1; - const p3 = triangleProperty.p3 !== void 0 ? triangleProperty.p3 : p1; - colorData.push(colors[p1 * 3 + 0]); - colorData.push(colors[p1 * 3 + 1]); - colorData.push(colors[p1 * 3 + 2]); - colorData.push(colors[p2 * 3 + 0]); - colorData.push(colors[p2 * 3 + 1]); - colorData.push(colors[p2 * 3 + 2]); - colorData.push(colors[p3 * 3 + 0]); - colorData.push(colors[p3 * 3 + 1]); - colorData.push(colors[p3 * 3 + 2]); - } - geometry.setAttribute("position", new Float32BufferAttribute(positionData, 3)); - geometry.setAttribute("color", new Float32BufferAttribute(colorData, 3)); - return new Mesh(geometry, new MeshPhongMaterial({ - vertexColors: true, - flatShading: true - })); - } - function buildDefaultMesh(meshData) { - const geometry = new BufferGeometry(); - geometry.setIndex(new BufferAttribute(meshData["triangles"], 1)); - geometry.setAttribute("position", new BufferAttribute(meshData["vertices"], 3)); - return new Mesh(geometry, new MeshPhongMaterial({ - color: 11184895, - flatShading: true - })); - } - function buildMeshes(resourceMap, meshData, objects2, modelData, textureData, objectData) { - const keys = Object.keys(resourceMap); - const meshes = []; - for (let i = 0, il = keys.length; i < il; i++) { - const resourceId = keys[i]; - const triangleProperties = resourceMap[resourceId]; - switch (getResourceType(resourceId, modelData)) { - case "material": - const basematerials = modelData.resources.basematerials[resourceId]; - const newMeshes = buildBasematerialsMeshes(basematerials, triangleProperties, meshData, objects2, modelData, textureData, objectData); - for (let j = 0, jl = newMeshes.length; j < jl; j++) meshes.push(newMeshes[j]); - break; - case "texture": - const texture2dgroup = modelData.resources.texture2dgroup[resourceId]; - meshes.push(buildTexturedMesh(texture2dgroup, triangleProperties, meshData, objects2, modelData, textureData, objectData)); - break; - case "vertexColors": - const colorgroup = modelData.resources.colorgroup[resourceId]; - meshes.push(buildVertexColorMesh(colorgroup, triangleProperties, meshData, objects2, modelData, objectData)); - break; - case "default": - meshes.push(buildDefaultMesh(meshData)); - break; - default: console.error("THREE.3MFLoader: Unsupported resource type."); - } - } - return meshes; - } - function getResourceType(pid, modelData) { - if (modelData.resources.texture2dgroup[pid] !== void 0) return "texture"; - else if (modelData.resources.basematerials[pid] !== void 0) return "material"; - else if (modelData.resources.colorgroup[pid] !== void 0) return "vertexColors"; - else if (pid === "default") return "default"; - else return; - } - function analyzeObject(modelData, meshData, objectData) { - const resourceMap = {}; - const triangleProperties = meshData["triangleProperties"]; - const objectPid = objectData.pid; - for (let i = 0, l = triangleProperties.length; i < l; i++) { - const triangleProperty = triangleProperties[i]; - let pid = triangleProperty.pid !== void 0 ? triangleProperty.pid : objectPid; - if (pid === void 0) pid = "default"; - if (resourceMap[pid] === void 0) resourceMap[pid] = []; - resourceMap[pid].push(triangleProperty); - } - return resourceMap; - } - function buildGroup(meshData, objects2, modelData, textureData, objectData) { - const group = new Group(); - const meshes = buildMeshes(analyzeObject(modelData, meshData, objectData), meshData, objects2, modelData, textureData, objectData); - for (let i = 0, l = meshes.length; i < l; i++) group.add(meshes[i]); - return group; - } - function applyExtensions(extensions, meshData, modelXml) { - if (!extensions) return; - const availableExtensions = []; - const keys = Object.keys(extensions); - for (let i = 0; i < keys.length; i++) { - const ns = keys[i]; - for (let j = 0; j < scope.availableExtensions.length; j++) { - const extension = scope.availableExtensions[j]; - if (extension.ns === ns) availableExtensions.push(extension); - } - } - for (let i = 0; i < availableExtensions.length; i++) { - const extension = availableExtensions[i]; - extension.apply(modelXml, extensions[extension["ns"]], meshData); - } - } - function getBuild(data2, objects2, modelData, textureData, objectData, builder) { - if (data2.build !== void 0) return data2.build; - data2.build = builder(data2, objects2, modelData, textureData, objectData); - return data2.build; - } - function buildBasematerial(materialData, objects2, modelData) { - let material; - const displaypropertiesid = materialData.displaypropertiesid; - const pbmetallicdisplayproperties = modelData.resources.pbmetallicdisplayproperties; - if (displaypropertiesid !== null && pbmetallicdisplayproperties[displaypropertiesid] !== void 0) { - const metallicData = pbmetallicdisplayproperties[displaypropertiesid].data[materialData.index]; - material = new MeshStandardMaterial({ - flatShading: true, - roughness: metallicData.roughness, - metalness: metallicData.metallicness - }); - } else material = new MeshPhongMaterial({ flatShading: true }); - material.name = materialData.name; - const displaycolor = materialData.displaycolor; - const color = displaycolor.substring(0, 7); - material.color.setStyle(color); - material.color.convertSRGBToLinear(); - if (displaycolor.length === 9) material.opacity = parseInt(displaycolor.charAt(7) + displaycolor.charAt(8), 16) / 255; - return material; - } - function buildComposite(compositeData, objects2, modelData, textureData) { - const composite = new Group(); - for (let j = 0; j < compositeData.length; j++) { - const component = compositeData[j]; - let build2 = objects2[component.objectId]; - if (build2 === void 0) { - buildObject(component.objectId, objects2, modelData, textureData); - build2 = objects2[component.objectId]; - } - const object3D = build2.clone(); - const transform = component.transform; - if (transform) object3D.applyMatrix4(transform); - composite.add(object3D); - } - return composite; - } - function buildObject(objectId, objects2, modelData, textureData) { - const objectData = modelData["resources"]["object"][objectId]; - if (objectData["mesh"]) { - const meshData = objectData["mesh"]; - const extensions = modelData["extensions"]; - const modelXml = modelData["xml"]; - applyExtensions(extensions, meshData, modelXml); - objects2[objectData.id] = getBuild(meshData, objects2, modelData, textureData, objectData, buildGroup); - } else { - const compositeData = objectData["components"]; - objects2[objectData.id] = getBuild(compositeData, objects2, modelData, textureData, objectData, buildComposite); - } - } - function buildObjects(data3mf2) { - const modelsData = data3mf2.model; - const modelRels = data3mf2.modelRels; - const objects2 = {}; - const modelsKeys = Object.keys(modelsData); - const textureData = {}; - if (modelRels) for (let i = 0, l = modelRels.length; i < l; i++) { - const modelRel = modelRels[i]; - const textureKey = modelRel.target.substring(1); - if (data3mf2.texture[textureKey]) textureData[modelRel.target] = data3mf2.texture[textureKey]; - } - for (let i = 0; i < modelsKeys.length; i++) { - const modelData = modelsData[modelsKeys[i]]; - const objectIds = Object.keys(modelData["resources"]["object"]); - for (let j = 0; j < objectIds.length; j++) { - const objectId = objectIds[j]; - buildObject(objectId, objects2, modelData, textureData); - } - } - return objects2; - } - function fetch3DModelPart(rels) { - for (let i = 0; i < rels.length; i++) { - const rel = rels[i]; - if (rel.target.split(".").pop().toLowerCase() === "model") return rel; - } - } - function build(objects2, data3mf2) { - const group = new Group(); - const relationship = fetch3DModelPart(data3mf2["rels"]); - const buildData = data3mf2.model[relationship["target"].substring(1)]["build"]; - for (let i = 0; i < buildData.length; i++) { - const buildItem = buildData[i]; - const object3D = objects2[buildItem["objectId"]]; - const transform = buildItem["transform"]; - if (transform) object3D.applyMatrix4(transform); - group.add(object3D); - } - return group; - } - const data3mf = loadDocument(data); - return build(buildObjects(data3mf), data3mf); - } - addExtension(extension) { - this.availableExtensions.push(extension); - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/XYZLoader.js -var XYZLoader = class extends Loader { - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - loader.load(url, function(text) { - try { - onLoad(scope.parse(text)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(text) { - const lines = text.split("\n"); - const vertices = []; - const colors = []; - for (let line of lines) { - line = line.trim(); - if (line.charAt(0) === "#") continue; - const lineValues = line.split(/\s+/); - if (lineValues.length === 3) { - vertices.push(parseFloat(lineValues[0])); - vertices.push(parseFloat(lineValues[1])); - vertices.push(parseFloat(lineValues[2])); - } - if (lineValues.length === 6) { - vertices.push(parseFloat(lineValues[0])); - vertices.push(parseFloat(lineValues[1])); - vertices.push(parseFloat(lineValues[2])); - colors.push(parseFloat(lineValues[3]) / 255); - colors.push(parseFloat(lineValues[4]) / 255); - colors.push(parseFloat(lineValues[5]) / 255); - } - } - const geometry = new BufferGeometry(); - geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - if (colors.length > 0) geometry.setAttribute("color", new Float32BufferAttribute(colors, 3)); - return geometry; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/VTKLoader.js -var VTKLoader = class extends Loader { - constructor(manager) { - super(manager); - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(scope.manager); - loader.setPath(scope.path); - loader.setResponseType("arraybuffer"); - loader.setRequestHeader(scope.requestHeader); - loader.setWithCredentials(scope.withCredentials); - loader.load(url, function(text) { - try { - onLoad(scope.parse(text)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(data) { - function parseASCII(data2) { - var indices = []; - var positions = []; - var colors = []; - var normals = []; - var result; - var patWord = /^[^\d.\s-]+/; - var pat3Floats = /(\-?\d+\.?[\d\-\+e]*)\s+(\-?\d+\.?[\d\-\+e]*)\s+(\-?\d+\.?[\d\-\+e]*)/g; - var patConnectivity = /^(\d+)\s+([\s\d]*)/; - var patPOINTS = /^POINTS /; - var patPOLYGONS = /^POLYGONS /; - var patTRIANGLE_STRIPS = /^TRIANGLE_STRIPS /; - var patPOINT_DATA = /^POINT_DATA[ ]+(\d+)/; - var patCELL_DATA = /^CELL_DATA[ ]+(\d+)/; - var patCOLOR_SCALARS = /^COLOR_SCALARS[ ]+(\w+)[ ]+3/; - var patNORMALS = /^NORMALS[ ]+(\w+)[ ]+(\w+)/; - var inPointsSection = false; - var inPolygonsSection = false; - var inTriangleStripSection = false; - var inPointDataSection = false; - var inCellDataSection = false; - var inColorSection = false; - var inNormalsSection = false; - var lines = data2.split("\n"); - for (var i in lines) { - var line = lines[i].trim(); - if (line.indexOf("DATASET") === 0) { - var dataset = line.split(" ")[1]; - if (dataset !== "POLYDATA") throw new Error("Unsupported DATASET type: " + dataset); - } else if (inPointsSection) while ((result = pat3Floats.exec(line)) !== null) { - if (patWord.exec(line) !== null) break; - var x = parseFloat(result[1]); - var y = parseFloat(result[2]); - var z = parseFloat(result[3]); - positions.push(x, y, z); - } - else if (inPolygonsSection) { - if ((result = patConnectivity.exec(line)) !== null) { - var numVertices = parseInt(result[1]); - var inds = result[2].split(/\s+/); - if (numVertices >= 3) { - var i0 = parseInt(inds[0]); - var i1, i2; - var k = 1; - for (var j = 0; j < numVertices - 2; ++j) { - i1 = parseInt(inds[k]); - i2 = parseInt(inds[k + 1]); - indices.push(i0, i1, i2); - k++; - } - } - } - } else if (inTriangleStripSection) { - if ((result = patConnectivity.exec(line)) !== null) { - var numVertices = parseInt(result[1]); - var inds = result[2].split(/\s+/); - if (numVertices >= 3) { - var i0, i1, i2; - for (var j = 0; j < numVertices - 2; j++) if (j % 2 === 1) { - i0 = parseInt(inds[j]); - i1 = parseInt(inds[j + 2]); - i2 = parseInt(inds[j + 1]); - indices.push(i0, i1, i2); - } else { - i0 = parseInt(inds[j]); - i1 = parseInt(inds[j + 1]); - i2 = parseInt(inds[j + 2]); - indices.push(i0, i1, i2); - } - } - } - } else if (inPointDataSection || inCellDataSection) { - if (inColorSection) while ((result = pat3Floats.exec(line)) !== null) { - if (patWord.exec(line) !== null) break; - var r = parseFloat(result[1]); - var g = parseFloat(result[2]); - var b = parseFloat(result[3]); - colors.push(r, g, b); - } - else if (inNormalsSection) while ((result = pat3Floats.exec(line)) !== null) { - if (patWord.exec(line) !== null) break; - var nx = parseFloat(result[1]); - var ny = parseFloat(result[2]); - var nz = parseFloat(result[3]); - normals.push(nx, ny, nz); - } - } - if (patPOLYGONS.exec(line) !== null) { - inPolygonsSection = true; - inPointsSection = false; - inTriangleStripSection = false; - } else if (patPOINTS.exec(line) !== null) { - inPolygonsSection = false; - inPointsSection = true; - inTriangleStripSection = false; - } else if (patTRIANGLE_STRIPS.exec(line) !== null) { - inPolygonsSection = false; - inPointsSection = false; - inTriangleStripSection = true; - } else if (patPOINT_DATA.exec(line) !== null) { - inPointDataSection = true; - inPointsSection = false; - inPolygonsSection = false; - inTriangleStripSection = false; - } else if (patCELL_DATA.exec(line) !== null) { - inCellDataSection = true; - inPointsSection = false; - inPolygonsSection = false; - inTriangleStripSection = false; - } else if (patCOLOR_SCALARS.exec(line) !== null) { - inColorSection = true; - inNormalsSection = false; - inPointsSection = false; - inPolygonsSection = false; - inTriangleStripSection = false; - } else if (patNORMALS.exec(line) !== null) { - inNormalsSection = true; - inColorSection = false; - inPointsSection = false; - inPolygonsSection = false; - inTriangleStripSection = false; - } - } - var geometry = new BufferGeometry(); - geometry.setIndex(indices); - geometry.setAttribute("position", new Float32BufferAttribute(positions, 3)); - if (normals.length === positions.length) geometry.setAttribute("normal", new Float32BufferAttribute(normals, 3)); - if (colors.length !== indices.length) { - if (colors.length === positions.length) geometry.setAttribute("color", new Float32BufferAttribute(colors, 3)); - } else { - geometry = geometry.toNonIndexed(); - var numTriangles = geometry.attributes.position.count / 3; - if (colors.length === numTriangles * 3) { - var newColors = []; - for (var i = 0; i < numTriangles; i++) { - var r = colors[3 * i + 0]; - var g = colors[3 * i + 1]; - var b = colors[3 * i + 2]; - newColors.push(r, g, b); - newColors.push(r, g, b); - newColors.push(r, g, b); - } - geometry.setAttribute("color", new Float32BufferAttribute(newColors, 3)); - } - } - return geometry; - } - function parseBinary(data2) { - var count, pointIndex, i, numberOfPoints, s; - var buffer = new Uint8Array(data2); - var dataView = new DataView(data2); - var points = []; - var normals = []; - var indices = []; - var index = 0; - function findString(buffer2, start) { - var index2 = start; - var c = buffer2[index2]; - var s2 = []; - while (c !== 10) { - s2.push(String.fromCharCode(c)); - index2++; - c = buffer2[index2]; - } - return { - start, - end: index2, - next: index2 + 1, - parsedString: s2.join("") - }; - } - var state, line; - while (true) { - state = findString(buffer, index); - line = state.parsedString; - if (line.indexOf("DATASET") === 0) { - var dataset = line.split(" ")[1]; - if (dataset !== "POLYDATA") throw new Error("Unsupported DATASET type: " + dataset); - } else if (line.indexOf("POINTS") === 0) { - numberOfPoints = parseInt(line.split(" ")[1], 10); - count = numberOfPoints * 4 * 3; - points = new Float32Array(numberOfPoints * 3); - pointIndex = state.next; - for (i = 0; i < numberOfPoints; i++) { - points[3 * i] = dataView.getFloat32(pointIndex, false); - points[3 * i + 1] = dataView.getFloat32(pointIndex + 4, false); - points[3 * i + 2] = dataView.getFloat32(pointIndex + 8, false); - pointIndex = pointIndex + 12; - } - state.next = state.next + count + 1; - } else if (line.indexOf("TRIANGLE_STRIPS") === 0) { - var numberOfStrips = parseInt(line.split(" ")[1], 10); - var size = parseInt(line.split(" ")[2], 10); - count = size * 4; - indices = new Uint32Array(3 * size - 9 * numberOfStrips); - var indicesIndex = 0; - pointIndex = state.next; - for (i = 0; i < numberOfStrips; i++) { - var indexCount = dataView.getInt32(pointIndex, false); - var strip = []; - pointIndex += 4; - for (s = 0; s < indexCount; s++) { - strip.push(dataView.getInt32(pointIndex, false)); - pointIndex += 4; - } - for (var j = 0; j < indexCount - 2; j++) if (j % 2) { - indices[indicesIndex++] = strip[j]; - indices[indicesIndex++] = strip[j + 2]; - indices[indicesIndex++] = strip[j + 1]; - } else { - indices[indicesIndex++] = strip[j]; - indices[indicesIndex++] = strip[j + 1]; - indices[indicesIndex++] = strip[j + 2]; - } - } - state.next = state.next + count + 1; - } else if (line.indexOf("POLYGONS") === 0) { - var numberOfStrips = parseInt(line.split(" ")[1], 10); - var size = parseInt(line.split(" ")[2], 10); - count = size * 4; - indices = new Uint32Array(3 * size - 9 * numberOfStrips); - var indicesIndex = 0; - pointIndex = state.next; - for (i = 0; i < numberOfStrips; i++) { - var indexCount = dataView.getInt32(pointIndex, false); - var strip = []; - pointIndex += 4; - for (s = 0; s < indexCount; s++) { - strip.push(dataView.getInt32(pointIndex, false)); - pointIndex += 4; - } - for (var j = 1; j < indexCount - 1; j++) { - indices[indicesIndex++] = strip[0]; - indices[indicesIndex++] = strip[j]; - indices[indicesIndex++] = strip[j + 1]; - } - } - state.next = state.next + count + 1; - } else if (line.indexOf("POINT_DATA") === 0) { - numberOfPoints = parseInt(line.split(" ")[1], 10); - state = findString(buffer, state.next); - count = numberOfPoints * 4 * 3; - normals = new Float32Array(numberOfPoints * 3); - pointIndex = state.next; - for (i = 0; i < numberOfPoints; i++) { - normals[3 * i] = dataView.getFloat32(pointIndex, false); - normals[3 * i + 1] = dataView.getFloat32(pointIndex + 4, false); - normals[3 * i + 2] = dataView.getFloat32(pointIndex + 8, false); - pointIndex += 12; - } - state.next = state.next + count; - } - index = state.next; - if (index >= buffer.byteLength) break; - } - var geometry = new BufferGeometry(); - geometry.setIndex(new BufferAttribute(indices, 1)); - geometry.setAttribute("position", new BufferAttribute(points, 3)); - if (normals.length === points.length) geometry.setAttribute("normal", new BufferAttribute(normals, 3)); - return geometry; - } - function Float32Concat(first, second) { - const firstLength = first.length, result = new Float32Array(firstLength + second.length); - result.set(first); - result.set(second, firstLength); - return result; - } - function Int32Concat(first, second) { - var firstLength = first.length, result = new Int32Array(firstLength + second.length); - result.set(first); - result.set(second, firstLength); - return result; - } - function parseXML(stringFile) { - function xmlToJson(xml) { - var obj = {}; - if (xml.nodeType === 1) { - if (xml.attributes) { - if (xml.attributes.length > 0) { - obj["attributes"] = {}; - for (var j2 = 0; j2 < xml.attributes.length; j2++) { - var attribute = xml.attributes.item(j2); - obj["attributes"][attribute.nodeName] = attribute.nodeValue.trim(); - } - } - } - } else if (xml.nodeType === 3) obj = xml.nodeValue.trim(); - if (xml.hasChildNodes()) for (var i2 = 0; i2 < xml.childNodes.length; i2++) { - var item = xml.childNodes.item(i2); - var nodeName = item.nodeName; - if (typeof obj[nodeName] === "undefined") { - var tmp = xmlToJson(item); - if (tmp !== "") obj[nodeName] = tmp; - } else { - if (typeof obj[nodeName].push === "undefined") { - var old = obj[nodeName]; - obj[nodeName] = [old]; - } - var tmp = xmlToJson(item); - if (tmp !== "") obj[nodeName].push(tmp); - } - } - return obj; - } - function Base64toByteArray(b64) { - var Arr = typeof Uint8Array !== "undefined" ? Uint8Array : Array; - var i2; - var revLookup = []; - var code = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - var len2 = code.length; - for (i2 = 0; i2 < len2; i2++); - for (i2 = 0; i2 < len2; ++i2) revLookup[code.charCodeAt(i2)] = i2; - revLookup["-".charCodeAt(0)] = 62; - revLookup["_".charCodeAt(0)] = 63; - var j2, l, tmp, placeHolders, arr2; - var len2 = b64.length; - if (len2 % 4 > 0) throw new Error("Invalid string. Length must be a multiple of 4"); - placeHolders = b64[len2 - 2] === "=" ? 2 : b64[len2 - 1] === "=" ? 1 : 0; - arr2 = new Arr(len2 * 3 / 4 - placeHolders); - l = placeHolders > 0 ? len2 - 4 : len2; - var L = 0; - for (i2 = 0, j2 = 0; i2 < l; i2 += 4, j2 += 3) { - tmp = revLookup[b64.charCodeAt(i2)] << 18 | revLookup[b64.charCodeAt(i2 + 1)] << 12 | revLookup[b64.charCodeAt(i2 + 2)] << 6 | revLookup[b64.charCodeAt(i2 + 3)]; - arr2[L++] = (tmp & 16711680) >> 16; - arr2[L++] = (tmp & 65280) >> 8; - arr2[L++] = tmp & 255; - } - if (placeHolders === 2) { - tmp = revLookup[b64.charCodeAt(i2)] << 2 | revLookup[b64.charCodeAt(i2 + 1)] >> 4; - arr2[L++] = tmp & 255; - } else if (placeHolders === 1) { - tmp = revLookup[b64.charCodeAt(i2)] << 10 | revLookup[b64.charCodeAt(i2 + 1)] << 4 | revLookup[b64.charCodeAt(i2 + 2)] >> 2; - arr2[L++] = tmp >> 8 & 255; - arr2[L++] = tmp & 255; - } - return arr2; - } - function parseDataArray(ele, compressed2) { - var numBytes = 0; - if (json.attributes.header_type === "UInt64") numBytes = 8; - else if (json.attributes.header_type === "UInt32") numBytes = 4; - if (ele.attributes.format === "binary" && compressed2) { - var rawData, content, byteData, blocks, cSizeStart, headerSize, padding, dataOffsets, currentOffset; - if (ele.attributes.type === "Float32") var txt = new Float32Array(); - else if (ele.attributes.type === "Int64") var txt = new Int32Array(); - rawData = ele["#text"]; - byteData = Base64toByteArray(rawData); - blocks = byteData[0]; - for (var i2 = 1; i2 < numBytes - 1; i2++) blocks = blocks | byteData[i2] << i2 * numBytes; - headerSize = (blocks + 3) * numBytes; - padding = headerSize % 3 > 0 ? 3 - headerSize % 3 : 0; - headerSize = headerSize + padding; - dataOffsets = []; - currentOffset = headerSize; - dataOffsets.push(currentOffset); - cSizeStart = 3 * numBytes; - for (var i2 = 0; i2 < blocks; i2++) { - var currentBlockSize = byteData[i2 * numBytes + cSizeStart]; - for (var j2 = 1; j2 < numBytes - 1; j2++) currentBlockSize = currentBlockSize | byteData[i2 * numBytes + cSizeStart + j2] << j2 * 8; - currentOffset = currentOffset + currentBlockSize; - dataOffsets.push(currentOffset); - } - for (var i2 = 0; i2 < dataOffsets.length - 1; i2++) { - content = unzlibSync(byteData.slice(dataOffsets[i2], dataOffsets[i2 + 1])).buffer; - if (ele.attributes.type === "Float32") { - content = new Float32Array(content); - txt = Float32Concat(txt, content); - } else if (ele.attributes.type === "Int64") { - content = new Int32Array(content); - txt = Int32Concat(txt, content); - } - } - delete ele["#text"]; - if (ele.attributes.type === "Int64") { - if (ele.attributes.format === "binary") txt = txt.filter(function(el, idx) { - if (idx % 2 !== 1) return true; - }); - } - } else { - if (ele.attributes.format === "binary" && !compressed2) { - var content = Base64toByteArray(ele["#text"]); - content = content.slice(numBytes).buffer; - } else if (ele["#text"]) var content = ele["#text"].split(/\s+/).filter(function(el) { - if (el !== "") return el; - }); - else var content = new Int32Array(0).buffer; - delete ele["#text"]; - if (ele.attributes.type === "Float32") var txt = new Float32Array(content); - else if (ele.attributes.type === "Int32") var txt = new Int32Array(content); - else if (ele.attributes.type === "Int64") { - var txt = new Int32Array(content); - if (ele.attributes.format === "binary") txt = txt.filter(function(el, idx) { - if (idx % 2 !== 1) return true; - }); - } - } - return txt; - } - var dom = null; - if (window.DOMParser) try { - dom = new DOMParser().parseFromString(stringFile, "text/xml"); - } catch (e) { - dom = null; - } - else if (window.ActiveXObject) try { - dom = new ActiveXObject("Microsoft.XMLDOM"); - dom.async = false; - if (!dom.loadXML()) throw new Error(dom.parseError.reason + dom.parseError.srcText); - } catch (e) { - dom = null; - } - else throw new Error("Cannot parse xml string!"); - var doc = dom.documentElement; - var json = xmlToJson(doc); - var points = []; - var normals = []; - var indices = []; - if (json.PolyData) { - var piece = json.PolyData.Piece; - var compressed = json.attributes.hasOwnProperty("compressor"); - var sections = [ - "PointData", - "Points", - "Strips", - "Polys" - ]; - var sectionIndex = 0, numberOfSections = sections.length; - while (sectionIndex < numberOfSections) { - var section = piece[sections[sectionIndex]]; - if (section && section.DataArray) { - if (Object.prototype.toString.call(section.DataArray) === "[object Array]") var arr = section.DataArray; - else var arr = [section.DataArray]; - var dataArrayIndex = 0, numberOfDataArrays = arr.length; - while (dataArrayIndex < numberOfDataArrays) { - if ("#text" in arr[dataArrayIndex] && arr[dataArrayIndex]["#text"].length > 0) arr[dataArrayIndex].text = parseDataArray(arr[dataArrayIndex], compressed); - dataArrayIndex++; - } - switch (sections[sectionIndex]) { - case "PointData": - var numberOfPoints = parseInt(piece.attributes.NumberOfPoints); - var normalsName = section.attributes.Normals; - if (numberOfPoints > 0) { - for (var i = 0, len = arr.length; i < len; i++) if (normalsName === arr[i].attributes.Name) { - var components = arr[i].attributes.NumberOfComponents; - normals = new Float32Array(numberOfPoints * components); - normals.set(arr[i].text, 0); - } - } - break; - case "Points": - var numberOfPoints = parseInt(piece.attributes.NumberOfPoints); - if (numberOfPoints > 0) { - var components = section.DataArray.attributes.NumberOfComponents; - points = new Float32Array(numberOfPoints * components); - points.set(section.DataArray.text, 0); - } - break; - case "Strips": - var numberOfStrips = parseInt(piece.attributes.NumberOfStrips); - if (numberOfStrips > 0) { - var connectivity = new Int32Array(section.DataArray[0].text.length); - var offset = new Int32Array(section.DataArray[1].text.length); - connectivity.set(section.DataArray[0].text, 0); - offset.set(section.DataArray[1].text, 0); - var size = numberOfStrips + connectivity.length; - indices = new Uint32Array(3 * size - 9 * numberOfStrips); - var indicesIndex = 0; - for (var i = 0, len = numberOfStrips; i < len; i++) { - var strip = []; - for (var s = 0, len1 = offset[i], len0 = 0; s < len1 - len0; s++) { - strip.push(connectivity[s]); - if (i > 0) len0 = offset[i - 1]; - } - for (var j = 0, len1 = offset[i], len0 = 0; j < len1 - len0 - 2; j++) { - if (j % 2) { - indices[indicesIndex++] = strip[j]; - indices[indicesIndex++] = strip[j + 2]; - indices[indicesIndex++] = strip[j + 1]; - } else { - indices[indicesIndex++] = strip[j]; - indices[indicesIndex++] = strip[j + 1]; - indices[indicesIndex++] = strip[j + 2]; - } - if (i > 0) len0 = offset[i - 1]; - } - } - } - break; - case "Polys": - var numberOfPolys = parseInt(piece.attributes.NumberOfPolys); - if (numberOfPolys > 0) { - var connectivity = new Int32Array(section.DataArray[0].text.length); - var offset = new Int32Array(section.DataArray[1].text.length); - connectivity.set(section.DataArray[0].text, 0); - offset.set(section.DataArray[1].text, 0); - var size = numberOfPolys + connectivity.length; - indices = new Uint32Array(3 * size - 9 * numberOfPolys); - var indicesIndex = 0, connectivityIndex = 0; - var i = 0, len = numberOfPolys, len0 = 0; - while (i < len) { - var poly = []; - var s = 0, len1 = offset[i]; - while (s < len1 - len0) { - poly.push(connectivity[connectivityIndex++]); - s++; - } - var j = 1; - while (j < len1 - len0 - 1) { - indices[indicesIndex++] = poly[0]; - indices[indicesIndex++] = poly[j]; - indices[indicesIndex++] = poly[j + 1]; - j++; - } - i++; - len0 = offset[i - 1]; - } - } - break; - } - } - sectionIndex++; - } - var geometry = new BufferGeometry(); - geometry.setIndex(new BufferAttribute(indices, 1)); - geometry.setAttribute("position", new BufferAttribute(points, 3)); - if (normals.length === points.length) geometry.setAttribute("normal", new BufferAttribute(normals, 3)); - return geometry; - } else throw new Error("Unsupported DATASET type"); - } - var meta = decodeText$1(new Uint8Array(data, 0, 250)).split("\n"); - if (meta[0].indexOf("xml") !== -1) return parseXML(decodeText$1(data)); - else if (meta[2].includes("ASCII")) return parseASCII(decodeText$1(data)); - else return parseBinary(data); - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/LUT3dlLoader.js -var LUT3dlLoader = class extends Loader { - load(url, onLoad, onProgress, onError) { - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setResponseType("text"); - loader.load(url, (text) => { - try { - onLoad(this.parse(text)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - this.manager.itemError(url); - } - }, onProgress, onError); - } - parse(str) { - str = str.replace(/^#.*?(\n|\r)/gm, "").replace(/^\s*?(\n|\r)/gm, "").trim(); - const lines = str.split(/[\n\r]+/g); - const gridLines = lines[0].trim().split(/\s+/g).map((e) => parseFloat(e)); - const gridStep = gridLines[1] - gridLines[0]; - const size = gridLines.length; - for (let i = 1, l = gridLines.length; i < l; i++) if (gridStep !== gridLines[i] - gridLines[i - 1]) throw new Error("LUT3dlLoader: Inconsistent grid size not supported."); - const dataArray = new Array(size * size * size * 4); - let index = 0; - let maxOutputValue = 0; - for (let i = 1, l = lines.length; i < l; i++) { - const split = lines[i].trim().split(/\s/g); - const r = parseFloat(split[0]); - const g = parseFloat(split[1]); - const b = parseFloat(split[2]); - maxOutputValue = Math.max(maxOutputValue, r, g, b); - const bLayer = index % size; - const gLayer = Math.floor(index / size) % size; - const rLayer = Math.floor(index / (size * size)) % size; - const pixelIndex = bLayer * size * size + gLayer * size + rLayer; - dataArray[4 * pixelIndex + 0] = r; - dataArray[4 * pixelIndex + 1] = g; - dataArray[4 * pixelIndex + 2] = b; - dataArray[4 * pixelIndex + 3] = 1; - index += 1; - } - const maxBitValue = Math.pow(2, Math.ceil(Math.log2(maxOutputValue))); - for (let i = 0, l = dataArray.length; i < l; i += 4) { - const r = dataArray[i + 0]; - const g = dataArray[i + 1]; - const b = dataArray[i + 2]; - dataArray[i + 0] = 255 * r / maxBitValue; - dataArray[i + 1] = 255 * g / maxBitValue; - dataArray[i + 2] = 255 * b / maxBitValue; - } - const data = new Uint8Array(dataArray); - const texture = new DataTexture(); - texture.image.data = data; - texture.image.width = size; - texture.image.height = size * size; - texture.format = RGBAFormat; - texture.type = UnsignedByteType; - texture.magFilter = LinearFilter; - texture.minFilter = LinearFilter; - texture.wrapS = ClampToEdgeWrapping; - texture.wrapT = ClampToEdgeWrapping; - texture.generateMipmaps = false; - texture.needsUpdate = true; - const texture3D = new Data3DTexture(); - texture3D.image.data = data; - texture3D.image.width = size; - texture3D.image.height = size; - texture3D.image.depth = size; - texture3D.format = RGBAFormat; - texture3D.type = UnsignedByteType; - texture3D.magFilter = LinearFilter; - texture3D.minFilter = LinearFilter; - texture3D.wrapS = ClampToEdgeWrapping; - texture3D.wrapT = ClampToEdgeWrapping; - texture3D.wrapR = ClampToEdgeWrapping; - texture3D.generateMipmaps = false; - texture3D.needsUpdate = true; - return { - size, - texture, - texture3D - }; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/DDSLoader.js -var DDSLoader = class extends CompressedTextureLoader { - constructor(manager) { - super(manager); - } - parse(buffer, loadMipmaps) { - const dds = { - mipmaps: [], - width: 0, - height: 0, - format: null, - mipmapCount: 1 - }; - const DDS_MAGIC = 542327876; - const DDSD_MIPMAPCOUNT = 131072; - const DDSCAPS2_CUBEMAP = 512; - const DDSCAPS2_CUBEMAP_POSITIVEX = 1024; - const DDSCAPS2_CUBEMAP_NEGATIVEX = 2048; - const DDSCAPS2_CUBEMAP_POSITIVEY = 4096; - const DDSCAPS2_CUBEMAP_NEGATIVEY = 8192; - const DDSCAPS2_CUBEMAP_POSITIVEZ = 16384; - const DDSCAPS2_CUBEMAP_NEGATIVEZ = 32768; - const DDPF_FOURCC = 4; - function fourCCToInt32(value) { - return value.charCodeAt(0) + (value.charCodeAt(1) << 8) + (value.charCodeAt(2) << 16) + (value.charCodeAt(3) << 24); - } - function int32ToFourCC(value) { - return String.fromCharCode(value & 255, value >> 8 & 255, value >> 16 & 255, value >> 24 & 255); - } - function loadARGBMip(buffer2, dataOffset2, width, height) { - const dataLength = width * height * 4; - const srcBuffer = new Uint8Array(buffer2, dataOffset2, dataLength); - const byteArray = new Uint8Array(dataLength); - let dst = 0; - let src = 0; - for (let y = 0; y < height; y++) for (let x = 0; x < width; x++) { - const b = srcBuffer[src]; - src++; - const g = srcBuffer[src]; - src++; - const r = srcBuffer[src]; - src++; - const a = srcBuffer[src]; - src++; - byteArray[dst] = r; - dst++; - byteArray[dst] = g; - dst++; - byteArray[dst] = b; - dst++; - byteArray[dst] = a; - dst++; - } - return byteArray; - } - const FOURCC_DXT1 = fourCCToInt32("DXT1"); - const FOURCC_DXT3 = fourCCToInt32("DXT3"); - const FOURCC_DXT5 = fourCCToInt32("DXT5"); - const FOURCC_ETC1 = fourCCToInt32("ETC1"); - const headerLengthInt = 31; - const off_magic = 0; - const off_size = 1; - const off_flags = 2; - const off_height = 3; - const off_width = 4; - const off_mipmapCount = 7; - const off_pfFlags = 20; - const off_pfFourCC = 21; - const off_RGBBitCount = 22; - const off_RBitMask = 23; - const off_GBitMask = 24; - const off_BBitMask = 25; - const off_ABitMask = 26; - const off_caps2 = 28; - const header = new Int32Array(buffer, 0, headerLengthInt); - if (header[off_magic] !== DDS_MAGIC) { - console.error("THREE.DDSLoader.parse: Invalid magic number in DDS header."); - return dds; - } - if (!header[off_pfFlags] & DDPF_FOURCC) { - console.error("THREE.DDSLoader.parse: Unsupported format, must contain a FourCC code."); - return dds; - } - let blockBytes; - const fourCC = header[off_pfFourCC]; - let isRGBAUncompressed = false; - switch (fourCC) { - case FOURCC_DXT1: - blockBytes = 8; - dds.format = RGB_S3TC_DXT1_Format; - break; - case FOURCC_DXT3: - blockBytes = 16; - dds.format = RGBA_S3TC_DXT3_Format; - break; - case FOURCC_DXT5: - blockBytes = 16; - dds.format = RGBA_S3TC_DXT5_Format; - break; - case FOURCC_ETC1: - blockBytes = 8; - dds.format = RGB_ETC1_Format; - break; - default: if (header[off_RGBBitCount] === 32 && header[off_RBitMask] & 16711680 && header[off_GBitMask] & 65280 && header[off_BBitMask] & 255 && header[off_ABitMask] & 4278190080) { - isRGBAUncompressed = true; - blockBytes = 64; - dds.format = RGBAFormat; - } else { - console.error("THREE.DDSLoader.parse: Unsupported FourCC code ", int32ToFourCC(fourCC)); - return dds; - } - } - dds.mipmapCount = 1; - if (header[off_flags] & DDSD_MIPMAPCOUNT && loadMipmaps !== false) dds.mipmapCount = Math.max(1, header[off_mipmapCount]); - const caps2 = header[off_caps2]; - dds.isCubemap = caps2 & DDSCAPS2_CUBEMAP ? true : false; - if (dds.isCubemap && (!(caps2 & DDSCAPS2_CUBEMAP_POSITIVEX) || !(caps2 & DDSCAPS2_CUBEMAP_NEGATIVEX) || !(caps2 & DDSCAPS2_CUBEMAP_POSITIVEY) || !(caps2 & DDSCAPS2_CUBEMAP_NEGATIVEY) || !(caps2 & DDSCAPS2_CUBEMAP_POSITIVEZ) || !(caps2 & DDSCAPS2_CUBEMAP_NEGATIVEZ))) { - console.error("THREE.DDSLoader.parse: Incomplete cubemap faces"); - return dds; - } - dds.width = header[off_width]; - dds.height = header[off_height]; - let dataOffset = header[off_size] + 4; - const faces = dds.isCubemap ? 6 : 1; - for (let face = 0; face < faces; face++) { - let width = dds.width; - let height = dds.height; - for (let i = 0; i < dds.mipmapCount; i++) { - let byteArray, dataLength; - if (isRGBAUncompressed) { - byteArray = loadARGBMip(buffer, dataOffset, width, height); - dataLength = byteArray.length; - } else { - dataLength = Math.max(4, width) / 4 * Math.max(4, height) / 4 * blockBytes; - byteArray = new Uint8Array(buffer, dataOffset, dataLength); - } - const mipmap = { - data: byteArray, - width, - height - }; - dds.mipmaps.push(mipmap); - dataOffset += dataLength; - width = Math.max(width >> 1, 1); - height = Math.max(height >> 1, 1); - } - } - return dds; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/PVRLoader.js -var PVRLoader = class extends CompressedTextureLoader { - constructor(manager) { - super(manager); - } - parse(buffer, loadMipmaps) { - const header = new Uint32Array(buffer, 0, 13); - const pvrDatas = { - buffer, - header, - loadMipmaps - }; - if (header[0] === 55727696) return _parseV3(pvrDatas); - else if (header[11] === 559044176) return _parseV2(pvrDatas); - else console.error("THREE.PVRLoader: Unknown PVR format."); - } -}; -function _parseV3(pvrDatas) { - const header = pvrDatas.header; - let bpp, format; - const metaLen = header[12], pixelFormat = header[2], height = header[6], width = header[7], numFaces = header[10], numMipmaps = header[11]; - switch (pixelFormat) { - case 0: - bpp = 2; - format = RGB_PVRTC_2BPPV1_Format; - break; - case 1: - bpp = 2; - format = RGBA_PVRTC_2BPPV1_Format; - break; - case 2: - bpp = 4; - format = RGB_PVRTC_4BPPV1_Format; - break; - case 3: - bpp = 4; - format = RGBA_PVRTC_4BPPV1_Format; - break; - default: console.error("THREE.PVRLoader: Unsupported PVR format:", pixelFormat); - } - pvrDatas.dataPtr = 52 + metaLen; - pvrDatas.bpp = bpp; - pvrDatas.format = format; - pvrDatas.width = width; - pvrDatas.height = height; - pvrDatas.numSurfaces = numFaces; - pvrDatas.numMipmaps = numMipmaps; - pvrDatas.isCubemap = numFaces === 6; - return _extract(pvrDatas); -} -function _parseV2(pvrDatas) { - const header = pvrDatas.header; - const headerLength = header[0], height = header[1], width = header[2], numMipmaps = header[3], flags = header[4], bitmaskAlpha = header[10], numSurfs = header[12]; - const TYPE_MASK = 255; - const PVRTC_2 = 24, PVRTC_4 = 25; - const formatFlags = flags & TYPE_MASK; - let bpp, format; - const _hasAlpha = bitmaskAlpha > 0; - if (formatFlags === PVRTC_4) { - format = _hasAlpha ? RGBA_PVRTC_4BPPV1_Format : RGB_PVRTC_4BPPV1_Format; - bpp = 4; - } else if (formatFlags === PVRTC_2) { - format = _hasAlpha ? RGBA_PVRTC_2BPPV1_Format : RGB_PVRTC_2BPPV1_Format; - bpp = 2; - } else console.error("THREE.PVRLoader: Unknown PVR format:", formatFlags); - pvrDatas.dataPtr = headerLength; - pvrDatas.bpp = bpp; - pvrDatas.format = format; - pvrDatas.width = width; - pvrDatas.height = height; - pvrDatas.numSurfaces = numSurfs; - pvrDatas.numMipmaps = numMipmaps + 1; - pvrDatas.isCubemap = numSurfs === 6; - return _extract(pvrDatas); -} -function _extract(pvrDatas) { - const pvr = { - mipmaps: [], - width: pvrDatas.width, - height: pvrDatas.height, - format: pvrDatas.format, - mipmapCount: pvrDatas.numMipmaps, - isCubemap: pvrDatas.isCubemap - }; - const buffer = pvrDatas.buffer; - let dataOffset = pvrDatas.dataPtr, dataSize = 0, blockSize = 0, blockWidth = 0, blockHeight = 0, widthBlocks = 0, heightBlocks = 0; - const bpp = pvrDatas.bpp, numSurfs = pvrDatas.numSurfaces; - if (bpp === 2) { - blockWidth = 8; - blockHeight = 4; - } else { - blockWidth = 4; - blockHeight = 4; - } - blockSize = blockWidth * blockHeight * bpp / 8; - pvr.mipmaps.length = pvrDatas.numMipmaps * numSurfs; - let mipLevel = 0; - while (mipLevel < pvrDatas.numMipmaps) { - const sWidth = pvrDatas.width >> mipLevel, sHeight = pvrDatas.height >> mipLevel; - widthBlocks = sWidth / blockWidth; - heightBlocks = sHeight / blockHeight; - if (widthBlocks < 2) widthBlocks = 2; - if (heightBlocks < 2) heightBlocks = 2; - dataSize = widthBlocks * heightBlocks * blockSize; - for (let surfIndex = 0; surfIndex < numSurfs; surfIndex++) { - const mipmap = { - data: new Uint8Array(buffer, dataOffset, dataSize), - width: sWidth, - height: sHeight - }; - pvr.mipmaps[surfIndex * pvrDatas.numMipmaps + mipLevel] = mipmap; - dataOffset += dataSize; - } - mipLevel++; - } - return pvr; -} -//#endregion -//#region node_modules/three-stdlib/loaders/GCodeLoader.js -var GCodeLoader = class extends Loader { - constructor(manager) { - super(manager); - this.splitLayer = false; - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(scope.manager); - loader.setPath(scope.path); - loader.setRequestHeader(scope.requestHeader); - loader.setWithCredentials(scope.withCredentials); - loader.load(url, function(text) { - try { - onLoad(scope.parse(text)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(data) { - let state = { - x: 0, - y: 0, - z: 0, - e: 0, - f: 0, - extruding: false, - relative: false - }; - let layers = []; - let currentLayer = void 0; - const pathMaterial = new LineBasicMaterial({ color: 16711680 }); - pathMaterial.name = "path"; - const extrudingMaterial = new LineBasicMaterial({ color: 65280 }); - extrudingMaterial.name = "extruded"; - function newLayer(line) { - currentLayer = { - vertex: [], - pathVertex: [], - z: line.z - }; - layers.push(currentLayer); - } - function addSegment(p1, p2) { - if (currentLayer === void 0) newLayer(p1); - if (state.extruding) { - currentLayer.vertex.push(p1.x, p1.y, p1.z); - currentLayer.vertex.push(p2.x, p2.y, p2.z); - } else { - currentLayer.pathVertex.push(p1.x, p1.y, p1.z); - currentLayer.pathVertex.push(p2.x, p2.y, p2.z); - } - } - function delta(v1, v2) { - return state.relative ? v2 : v2 - v1; - } - function absolute(v1, v2) { - return state.relative ? v1 + v2 : v2; - } - let lines = data.replace(/;.+/g, "").split("\n"); - for (let i = 0; i < lines.length; i++) { - let tokens = lines[i].split(" "); - let cmd = tokens[0].toUpperCase(); - let args = {}; - tokens.splice(1).forEach(function(token) { - if (token[0] !== void 0) { - let key = token[0].toLowerCase(); - args[key] = parseFloat(token.substring(1)); - } - }); - if (cmd === "G0" || cmd === "G1") { - let line = { - x: args.x !== void 0 ? absolute(state.x, args.x) : state.x, - y: args.y !== void 0 ? absolute(state.y, args.y) : state.y, - z: args.z !== void 0 ? absolute(state.z, args.z) : state.z, - e: args.e !== void 0 ? absolute(state.e, args.e) : state.e, - f: args.f !== void 0 ? absolute(state.f, args.f) : state.f - }; - if (delta(state.e, line.e) > 0) { - line.extruding = delta(state.e, line.e) > 0; - if (currentLayer == void 0 || line.z != currentLayer.z) newLayer(line); - } - addSegment(state, line); - state = line; - } else if (cmd === "G2" || cmd === "G3"); - else if (cmd === "G90") state.relative = false; - else if (cmd === "G91") state.relative = true; - else if (cmd === "G92") { - let line = state; - line.x = args.x !== void 0 ? args.x : line.x; - line.y = args.y !== void 0 ? args.y : line.y; - line.z = args.z !== void 0 ? args.z : line.z; - line.e = args.e !== void 0 ? args.e : line.e; - state = line; - } - } - function addObject(vertex, extruding, i) { - let geometry = new BufferGeometry(); - geometry.setAttribute("position", new Float32BufferAttribute(vertex, 3)); - let segments = new LineSegments(geometry, extruding ? extrudingMaterial : pathMaterial); - segments.name = "layer" + i; - object.add(segments); - } - const object = new Group(); - object.name = "gcode"; - if (this.splitLayer) for (let i = 0; i < layers.length; i++) { - let layer = layers[i]; - addObject(layer.vertex, true, i); - addObject(layer.pathVertex, false, i); - } - else { - const vertex = [], pathVertex = []; - for (let i = 0; i < layers.length; i++) { - let layer = layers[i]; - let layerVertex = layer.vertex; - let layerPathVertex = layer.pathVertex; - for (let j = 0; j < layerVertex.length; j++) vertex.push(layerVertex[j]); - for (let j = 0; j < layerPathVertex.length; j++) pathVertex.push(layerPathVertex[j]); - } - addObject(vertex, true, layers.length); - addObject(pathVertex, false, layers.length); - } - object.quaternion.setFromEuler(new Euler(-Math.PI / 2, 0, 0)); - return object; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/BasisTextureLoader.js -var __defProp$1 = Object.defineProperty; -var __defNormalProp$1 = (obj, key, value) => key in obj ? __defProp$1(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField$1 = (obj, key, value) => { - __defNormalProp$1(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var _taskCache$2 = /* @__PURE__ */ new WeakMap(); -var BasisTextureLoader = /* @__PURE__ */ (() => { - const _BasisTextureLoader = class extends Loader { - constructor(manager) { - super(manager); - this.transcoderPath = ""; - this.transcoderBinary = null; - this.transcoderPending = null; - this.workerLimit = 4; - this.workerPool = []; - this.workerNextTaskID = 1; - this.workerSourceURL = ""; - this.workerConfig = null; - } - setTranscoderPath(path) { - this.transcoderPath = path; - return this; - } - setWorkerLimit(workerLimit) { - this.workerLimit = workerLimit; - return this; - } - detectSupport(renderer) { - this.workerConfig = { - astcSupported: renderer.extensions.has("WEBGL_compressed_texture_astc"), - etc1Supported: renderer.extensions.has("WEBGL_compressed_texture_etc1"), - etc2Supported: renderer.extensions.has("WEBGL_compressed_texture_etc"), - dxtSupported: renderer.extensions.has("WEBGL_compressed_texture_s3tc"), - bptcSupported: renderer.extensions.has("EXT_texture_compression_bptc"), - pvrtcSupported: renderer.extensions.has("WEBGL_compressed_texture_pvrtc") || renderer.extensions.has("WEBKIT_WEBGL_compressed_texture_pvrtc") - }; - return this; - } - load(url, onLoad, onProgress, onError) { - const loader = new FileLoader(this.manager); - loader.setResponseType("arraybuffer"); - loader.setWithCredentials(this.withCredentials); - const texture = new CompressedTexture(); - loader.load(url, (buffer) => { - if (_taskCache$2.has(buffer)) return _taskCache$2.get(buffer).promise.then(onLoad).catch(onError); - this._createTexture([buffer]).then(function(_texture) { - texture.copy(_texture); - texture.needsUpdate = true; - if (onLoad) onLoad(texture); - }).catch(onError); - }, onProgress, onError); - return texture; - } - /** Low-level transcoding API, exposed for use by KTX2Loader. */ - parseInternalAsync(options) { - const { levels } = options; - const buffers = /* @__PURE__ */ new Set(); - for (let i = 0; i < levels.length; i++) buffers.add(levels[i].data.buffer); - return this._createTexture(Array.from(buffers), { - ...options, - lowLevel: true - }); - } - /** - * @param {ArrayBuffer[]} buffers - * @param {object?} config - * @return {Promise<CompressedTexture>} - */ - _createTexture(buffers, config = {}) { - let worker; - let taskID; - const taskConfig = config; - let taskCost = 0; - for (let i = 0; i < buffers.length; i++) taskCost += buffers[i].byteLength; - const texturePending = this._allocateWorker(taskCost).then((_worker) => { - worker = _worker; - taskID = this.workerNextTaskID++; - return new Promise((resolve, reject) => { - worker._callbacks[taskID] = { - resolve, - reject - }; - worker.postMessage({ - type: "transcode", - id: taskID, - buffers, - taskConfig - }, buffers); - }); - }).then((message) => { - const { mipmaps, width, height, format } = message; - const texture = new CompressedTexture(mipmaps, width, height, format, UnsignedByteType); - texture.minFilter = mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter; - texture.magFilter = LinearFilter; - texture.generateMipmaps = false; - texture.needsUpdate = true; - return texture; - }); - texturePending.catch(() => true).then(() => { - if (worker && taskID) { - worker._taskLoad -= taskCost; - delete worker._callbacks[taskID]; - } - }); - _taskCache$2.set(buffers[0], { promise: texturePending }); - return texturePending; - } - _initTranscoder() { - if (!this.transcoderPending) { - const jsLoader = new FileLoader(this.manager); - jsLoader.setPath(this.transcoderPath); - jsLoader.setWithCredentials(this.withCredentials); - const jsContent = new Promise((resolve, reject) => { - jsLoader.load("basis_transcoder.js", resolve, void 0, reject); - }); - const binaryLoader = new FileLoader(this.manager); - binaryLoader.setPath(this.transcoderPath); - binaryLoader.setResponseType("arraybuffer"); - binaryLoader.setWithCredentials(this.withCredentials); - const binaryContent = new Promise((resolve, reject) => { - binaryLoader.load("basis_transcoder.wasm", resolve, void 0, reject); - }); - this.transcoderPending = Promise.all([jsContent, binaryContent]).then(([jsContent2, binaryContent2]) => { - const fn = _BasisTextureLoader.BasisWorker.toString(); - const body = [ - "/* constants */", - "let _EngineFormat = " + JSON.stringify(_BasisTextureLoader.EngineFormat), - "let _TranscoderFormat = " + JSON.stringify(_BasisTextureLoader.TranscoderFormat), - "let _BasisFormat = " + JSON.stringify(_BasisTextureLoader.BasisFormat), - "/* basis_transcoder.js */", - jsContent2, - "/* worker */", - fn.substring(fn.indexOf("{") + 1, fn.lastIndexOf("}")) - ].join("\n"); - this.workerSourceURL = URL.createObjectURL(new Blob([body])); - this.transcoderBinary = binaryContent2; - }); - } - return this.transcoderPending; - } - _allocateWorker(taskCost) { - return this._initTranscoder().then(() => { - if (this.workerPool.length < this.workerLimit) { - const worker2 = new Worker(this.workerSourceURL); - worker2._callbacks = {}; - worker2._taskLoad = 0; - worker2.postMessage({ - type: "init", - config: this.workerConfig, - transcoderBinary: this.transcoderBinary - }); - worker2.onmessage = function(e) { - const message = e.data; - switch (message.type) { - case "transcode": - worker2._callbacks[message.id].resolve(message); - break; - case "error": - worker2._callbacks[message.id].reject(message); - break; - default: console.error("THREE.BasisTextureLoader: Unexpected message, \"" + message.type + "\""); - } - }; - this.workerPool.push(worker2); - } else this.workerPool.sort(function(a, b) { - return a._taskLoad > b._taskLoad ? -1 : 1; - }); - const worker = this.workerPool[this.workerPool.length - 1]; - worker._taskLoad += taskCost; - return worker; - }); - } - dispose() { - for (let i = 0; i < this.workerPool.length; i++) this.workerPool[i].terminate(); - this.workerPool.length = 0; - return this; - } - }; - let BasisTextureLoader2 = _BasisTextureLoader; - __publicField$1(BasisTextureLoader2, "BasisFormat", { - ETC1S: 0, - UASTC_4x4: 1 - }); - __publicField$1(BasisTextureLoader2, "TranscoderFormat", { - ETC1: 0, - ETC2: 1, - BC1: 2, - BC3: 3, - BC4: 4, - BC5: 5, - BC7_M6_OPAQUE_ONLY: 6, - BC7_M5: 7, - PVRTC1_4_RGB: 8, - PVRTC1_4_RGBA: 9, - ASTC_4x4: 10, - ATC_RGB: 11, - ATC_RGBA_INTERPOLATED_ALPHA: 12, - RGBA32: 13, - RGB565: 14, - BGR565: 15, - RGBA4444: 16 - }); - __publicField$1(BasisTextureLoader2, "EngineFormat", { - RGBAFormat, - RGBA_ASTC_4x4_Format, - RGBA_BPTC_Format, - RGBA_ETC2_EAC_Format, - RGBA_PVRTC_4BPPV1_Format, - RGBA_S3TC_DXT5_Format, - RGB_ETC1_Format, - RGB_ETC2_Format, - RGB_PVRTC_4BPPV1_Format, - RGB_S3TC_DXT1_Format - }); - __publicField$1(BasisTextureLoader2, "BasisWorker", function() { - let config; - let transcoderPending; - let BasisModule; - const EngineFormat = _EngineFormat; - const TranscoderFormat = _TranscoderFormat; - const BasisFormat = _BasisFormat; - onmessage = function(e) { - const message = e.data; - switch (message.type) { - case "init": - config = message.config; - init(message.transcoderBinary); - break; - case "transcode": - transcoderPending.then(() => { - try { - const { width, height, hasAlpha, mipmaps, format } = message.taskConfig.lowLevel ? transcodeLowLevel(message.taskConfig) : transcode(message.buffers[0]); - const buffers = []; - for (let i = 0; i < mipmaps.length; ++i) buffers.push(mipmaps[i].data.buffer); - self.postMessage({ - type: "transcode", - id: message.id, - width, - height, - hasAlpha, - mipmaps, - format - }, buffers); - } catch (error) { - console.error(error); - self.postMessage({ - type: "error", - id: message.id, - error: error.message - }); - } - }); - break; - } - }; - function init(wasmBinary) { - transcoderPending = new Promise((resolve) => { - BasisModule = { - wasmBinary, - onRuntimeInitialized: resolve - }; - BASIS(BasisModule); - }).then(() => { - BasisModule.initializeBasis(); - }); - } - function transcodeLowLevel(taskConfig) { - const { basisFormat, width, height, hasAlpha } = taskConfig; - const { transcoderFormat, engineFormat } = getTranscoderFormat(basisFormat, width, height, hasAlpha); - const blockByteLength = BasisModule.getBytesPerBlockOrPixel(transcoderFormat); - assert(BasisModule.isFormatSupported(transcoderFormat), "THREE.BasisTextureLoader: Unsupported format."); - const mipmaps = []; - if (basisFormat === BasisFormat.ETC1S) { - const transcoder = new BasisModule.LowLevelETC1SImageTranscoder(); - const { endpointCount, endpointsData, selectorCount, selectorsData, tablesData } = taskConfig.globalData; - try { - let ok; - ok = transcoder.decodePalettes(endpointCount, endpointsData, selectorCount, selectorsData); - assert(ok, "THREE.BasisTextureLoader: decodePalettes() failed."); - ok = transcoder.decodeTables(tablesData); - assert(ok, "THREE.BasisTextureLoader: decodeTables() failed."); - for (let i = 0; i < taskConfig.levels.length; i++) { - const level = taskConfig.levels[i]; - const imageDesc = taskConfig.globalData.imageDescs[i]; - const dstByteLength = getTranscodedImageByteLength(transcoderFormat, level.width, level.height); - const dst = new Uint8Array(dstByteLength); - ok = transcoder.transcodeImage(transcoderFormat, dst, dstByteLength / blockByteLength, level.data, getWidthInBlocks(transcoderFormat, level.width), getHeightInBlocks(transcoderFormat, level.height), level.width, level.height, level.index, imageDesc.rgbSliceByteOffset, imageDesc.rgbSliceByteLength, imageDesc.alphaSliceByteOffset, imageDesc.alphaSliceByteLength, imageDesc.imageFlags, hasAlpha, false, 0, 0); - assert(ok, "THREE.BasisTextureLoader: transcodeImage() failed for level " + level.index + "."); - mipmaps.push({ - data: dst, - width: level.width, - height: level.height - }); - } - } finally { - transcoder.delete(); - } - } else for (let i = 0; i < taskConfig.levels.length; i++) { - const level = taskConfig.levels[i]; - const dstByteLength = getTranscodedImageByteLength(transcoderFormat, level.width, level.height); - const dst = new Uint8Array(dstByteLength); - assert(BasisModule.transcodeUASTCImage(transcoderFormat, dst, dstByteLength / blockByteLength, level.data, getWidthInBlocks(transcoderFormat, level.width), getHeightInBlocks(transcoderFormat, level.height), level.width, level.height, level.index, 0, level.data.byteLength, 0, hasAlpha, false, 0, 0, -1, -1), "THREE.BasisTextureLoader: transcodeUASTCImage() failed for level " + level.index + "."); - mipmaps.push({ - data: dst, - width: level.width, - height: level.height - }); - } - return { - width, - height, - hasAlpha, - mipmaps, - format: engineFormat - }; - } - function transcode(buffer) { - const basisFile = new BasisModule.BasisFile(new Uint8Array(buffer)); - const basisFormat = basisFile.isUASTC() ? BasisFormat.UASTC_4x4 : BasisFormat.ETC1S; - const width = basisFile.getImageWidth(0, 0); - const height = basisFile.getImageHeight(0, 0); - const levels = basisFile.getNumLevels(0); - const hasAlpha = basisFile.getHasAlpha(); - function cleanup() { - basisFile.close(); - basisFile.delete(); - } - const { transcoderFormat, engineFormat } = getTranscoderFormat(basisFormat, width, height, hasAlpha); - if (!width || !height || !levels) { - cleanup(); - throw new Error("THREE.BasisTextureLoader: Invalid texture"); - } - if (!basisFile.startTranscoding()) { - cleanup(); - throw new Error("THREE.BasisTextureLoader: .startTranscoding failed"); - } - const mipmaps = []; - for (let mip = 0; mip < levels; mip++) { - const mipWidth = basisFile.getImageWidth(0, mip); - const mipHeight = basisFile.getImageHeight(0, mip); - const dst = new Uint8Array(basisFile.getImageTranscodedSizeInBytes(0, mip, transcoderFormat)); - if (!basisFile.transcodeImage(dst, 0, mip, transcoderFormat, 0, hasAlpha)) { - cleanup(); - throw new Error("THREE.BasisTextureLoader: .transcodeImage failed."); - } - mipmaps.push({ - data: dst, - width: mipWidth, - height: mipHeight - }); - } - cleanup(); - return { - width, - height, - hasAlpha, - mipmaps, - format: engineFormat - }; - } - const FORMAT_OPTIONS = [ - { - if: "astcSupported", - basisFormat: [BasisFormat.UASTC_4x4], - transcoderFormat: [TranscoderFormat.ASTC_4x4, TranscoderFormat.ASTC_4x4], - engineFormat: [EngineFormat.RGBA_ASTC_4x4_Format, EngineFormat.RGBA_ASTC_4x4_Format], - priorityETC1S: Infinity, - priorityUASTC: 1, - needsPowerOfTwo: false - }, - { - if: "bptcSupported", - basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], - transcoderFormat: [TranscoderFormat.BC7_M5, TranscoderFormat.BC7_M5], - engineFormat: [EngineFormat.RGBA_BPTC_Format, EngineFormat.RGBA_BPTC_Format], - priorityETC1S: 3, - priorityUASTC: 2, - needsPowerOfTwo: false - }, - { - if: "dxtSupported", - basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], - transcoderFormat: [TranscoderFormat.BC1, TranscoderFormat.BC3], - engineFormat: [EngineFormat.RGB_S3TC_DXT1_Format, EngineFormat.RGBA_S3TC_DXT5_Format], - priorityETC1S: 4, - priorityUASTC: 5, - needsPowerOfTwo: false - }, - { - if: "etc2Supported", - basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], - transcoderFormat: [TranscoderFormat.ETC1, TranscoderFormat.ETC2], - engineFormat: [EngineFormat.RGB_ETC2_Format, EngineFormat.RGBA_ETC2_EAC_Format], - priorityETC1S: 1, - priorityUASTC: 3, - needsPowerOfTwo: false - }, - { - if: "etc1Supported", - basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], - transcoderFormat: [TranscoderFormat.ETC1, TranscoderFormat.ETC1], - engineFormat: [EngineFormat.RGB_ETC1_Format, EngineFormat.RGB_ETC1_Format], - priorityETC1S: 2, - priorityUASTC: 4, - needsPowerOfTwo: false - }, - { - if: "pvrtcSupported", - basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4], - transcoderFormat: [TranscoderFormat.PVRTC1_4_RGB, TranscoderFormat.PVRTC1_4_RGBA], - engineFormat: [EngineFormat.RGB_PVRTC_4BPPV1_Format, EngineFormat.RGBA_PVRTC_4BPPV1_Format], - priorityETC1S: 5, - priorityUASTC: 6, - needsPowerOfTwo: true - } - ]; - const ETC1S_OPTIONS = FORMAT_OPTIONS.sort(function(a, b) { - return a.priorityETC1S - b.priorityETC1S; - }); - const UASTC_OPTIONS = FORMAT_OPTIONS.sort(function(a, b) { - return a.priorityUASTC - b.priorityUASTC; - }); - function getTranscoderFormat(basisFormat, width, height, hasAlpha) { - let transcoderFormat; - let engineFormat; - const options = basisFormat === BasisFormat.ETC1S ? ETC1S_OPTIONS : UASTC_OPTIONS; - for (let i = 0; i < options.length; i++) { - const opt = options[i]; - if (!config[opt.if]) continue; - if (!opt.basisFormat.includes(basisFormat)) continue; - if (opt.needsPowerOfTwo && !(isPowerOfTwo(width) && isPowerOfTwo(height))) continue; - transcoderFormat = opt.transcoderFormat[hasAlpha ? 1 : 0]; - engineFormat = opt.engineFormat[hasAlpha ? 1 : 0]; - return { - transcoderFormat, - engineFormat - }; - } - console.warn("THREE.BasisTextureLoader: No suitable compressed texture format found. Decoding to RGBA32."); - transcoderFormat = TranscoderFormat.RGBA32; - engineFormat = EngineFormat.RGBAFormat; - return { - transcoderFormat, - engineFormat - }; - } - function assert(ok, message) { - if (!ok) throw new Error(message); - } - function getWidthInBlocks(transcoderFormat, width) { - return Math.ceil(width / BasisModule.getFormatBlockWidth(transcoderFormat)); - } - function getHeightInBlocks(transcoderFormat, height) { - return Math.ceil(height / BasisModule.getFormatBlockHeight(transcoderFormat)); - } - function getTranscodedImageByteLength(transcoderFormat, width, height) { - const blockByteLength = BasisModule.getBytesPerBlockOrPixel(transcoderFormat); - if (BasisModule.formatIsUncompressed(transcoderFormat)) return width * height * blockByteLength; - if (transcoderFormat === TranscoderFormat.PVRTC1_4_RGB || transcoderFormat === TranscoderFormat.PVRTC1_4_RGBA) { - const paddedWidth = width + 3 & -4; - const paddedHeight = height + 3 & -4; - return (Math.max(8, paddedWidth) * Math.max(8, paddedHeight) * 4 + 7) / 8; - } - return getWidthInBlocks(transcoderFormat, width) * getHeightInBlocks(transcoderFormat, height) * blockByteLength; - } - function isPowerOfTwo(value) { - if (value <= 2) return true; - return (value & value - 1) === 0 && value !== 0; - } - }); - return BasisTextureLoader2; -})(); -//#endregion -//#region node_modules/three-stdlib/loaders/TDSLoader.js -var TDSLoader = class extends Loader { - constructor(manager) { - super(manager); - this.debug = false; - this.group = null; - this.position = 0; - this.materials = []; - this.meshes = []; - } - /** - * Load 3ds file from url. - * - * @method load - * @param {[type]} url URL for the file. - * @param {Function} onLoad onLoad callback, receives group Object3D as argument. - * @param {Function} onProgress onProgress callback. - * @param {Function} onError onError callback. - */ - load(url, onLoad, onProgress, onError) { - const scope = this; - const path = this.path === "" ? LoaderUtils.extractUrlBase(url) : this.path; - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setResponseType("arraybuffer"); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - loader.load(url, function(data) { - try { - onLoad(scope.parse(data, path)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - /** - * Parse arraybuffer data and load 3ds file. - * - * @method parse - * @param {ArrayBuffer} arraybuffer Arraybuffer data to be loaded. - * @param {String} path Path for external resources. - * @return {Group} Group loaded from 3ds file. - */ - parse(arraybuffer, path) { - this.group = new Group(); - this.position = 0; - this.materials = []; - this.meshes = []; - this.readFile(arraybuffer, path); - for (let i = 0; i < this.meshes.length; i++) this.group.add(this.meshes[i]); - return this.group; - } - /** - * Decode file content to read 3ds data. - * - * @method readFile - * @param {ArrayBuffer} arraybuffer Arraybuffer data to be loaded. - * @param {String} path Path for external resources. - */ - readFile(arraybuffer, path) { - const data = new DataView(arraybuffer); - const chunk = this.readChunk(data); - if (chunk.id === MLIBMAGIC || chunk.id === CMAGIC || chunk.id === M3DMAGIC) { - let next = this.nextChunk(data, chunk); - while (next !== 0) { - if (next === M3D_VERSION) { - const version = this.readDWord(data); - this.debugMessage("3DS file version: " + version); - } else if (next === MDATA) { - this.resetPosition(data); - this.readMeshData(data, path); - } else this.debugMessage("Unknown main chunk: " + next.toString(16)); - next = this.nextChunk(data, chunk); - } - } - this.debugMessage("Parsed " + this.meshes.length + " meshes"); - } - /** - * Read mesh data chunk. - * - * @method readMeshData - * @param {Dataview} data Dataview in use. - * @param {String} path Path for external resources. - */ - readMeshData(data, path) { - const chunk = this.readChunk(data); - let next = this.nextChunk(data, chunk); - while (next !== 0) { - if (next === MESH_VERSION) { - const version = +this.readDWord(data); - this.debugMessage("Mesh Version: " + version); - } else if (next === MASTER_SCALE) { - const scale = this.readFloat(data); - this.debugMessage("Master scale: " + scale); - this.group.scale.set(scale, scale, scale); - } else if (next === NAMED_OBJECT) { - this.debugMessage("Named Object"); - this.resetPosition(data); - this.readNamedObject(data); - } else if (next === MAT_ENTRY) { - this.debugMessage("Material"); - this.resetPosition(data); - this.readMaterialEntry(data, path); - } else this.debugMessage("Unknown MDATA chunk: " + next.toString(16)); - next = this.nextChunk(data, chunk); - } - } - /** - * Read named object chunk. - * - * @method readNamedObject - * @param {Dataview} data Dataview in use. - */ - readNamedObject(data) { - const chunk = this.readChunk(data); - const name = this.readString(data, 64); - chunk.cur = this.position; - let next = this.nextChunk(data, chunk); - while (next !== 0) { - if (next === N_TRI_OBJECT) { - this.resetPosition(data); - const mesh = this.readMesh(data); - mesh.name = name; - this.meshes.push(mesh); - } else this.debugMessage("Unknown named object chunk: " + next.toString(16)); - next = this.nextChunk(data, chunk); - } - this.endChunk(chunk); - } - /** - * Read material data chunk and add it to the material list. - * - * @method readMaterialEntry - * @param {Dataview} data Dataview in use. - * @param {String} path Path for external resources. - */ - readMaterialEntry(data, path) { - const chunk = this.readChunk(data); - let next = this.nextChunk(data, chunk); - const material = new MeshPhongMaterial(); - while (next !== 0) { - if (next === MAT_NAME) { - material.name = this.readString(data, 64); - this.debugMessage(" Name: " + material.name); - } else if (next === MAT_WIRE) { - this.debugMessage(" Wireframe"); - material.wireframe = true; - } else if (next === MAT_WIRE_SIZE) { - const value = this.readByte(data); - material.wireframeLinewidth = value; - this.debugMessage(" Wireframe Thickness: " + value); - } else if (next === MAT_TWO_SIDE) { - material.side = 2; - this.debugMessage(" DoubleSided"); - } else if (next === MAT_ADDITIVE) { - this.debugMessage(" Additive Blending"); - material.blending = 2; - } else if (next === MAT_DIFFUSE) { - this.debugMessage(" Diffuse Color"); - material.color = this.readColor(data); - } else if (next === MAT_SPECULAR) { - this.debugMessage(" Specular Color"); - material.specular = this.readColor(data); - } else if (next === MAT_AMBIENT) { - this.debugMessage(" Ambient color"); - material.color = this.readColor(data); - } else if (next === MAT_SHININESS) { - const shininess = this.readPercentage(data); - material.shininess = shininess * 100; - this.debugMessage(" Shininess : " + shininess); - } else if (next === MAT_TRANSPARENCY) { - const transparency = this.readPercentage(data); - material.opacity = 1 - transparency; - this.debugMessage(" Transparency : " + transparency); - material.transparent = material.opacity < 1 ? true : false; - } else if (next === MAT_TEXMAP) { - this.debugMessage(" ColorMap"); - this.resetPosition(data); - material.map = this.readMap(data, path); - } else if (next === MAT_BUMPMAP) { - this.debugMessage(" BumpMap"); - this.resetPosition(data); - material.bumpMap = this.readMap(data, path); - } else if (next === MAT_OPACMAP) { - this.debugMessage(" OpacityMap"); - this.resetPosition(data); - material.alphaMap = this.readMap(data, path); - } else if (next === MAT_SPECMAP) { - this.debugMessage(" SpecularMap"); - this.resetPosition(data); - material.specularMap = this.readMap(data, path); - } else this.debugMessage(" Unknown material chunk: " + next.toString(16)); - next = this.nextChunk(data, chunk); - } - this.endChunk(chunk); - this.materials[material.name] = material; - } - /** - * Read mesh data chunk. - * - * @method readMesh - * @param {Dataview} data Dataview in use. - * @return {Mesh} The parsed mesh. - */ - readMesh(data) { - const chunk = this.readChunk(data); - let next = this.nextChunk(data, chunk); - const geometry = new BufferGeometry(); - const mesh = new Mesh(geometry, new MeshPhongMaterial()); - mesh.name = "mesh"; - while (next !== 0) { - if (next === POINT_ARRAY) { - const points = this.readWord(data); - this.debugMessage(" Vertex: " + points); - const vertices = []; - for (let i = 0; i < points; i++) { - vertices.push(this.readFloat(data)); - vertices.push(this.readFloat(data)); - vertices.push(this.readFloat(data)); - } - geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - } else if (next === FACE_ARRAY) { - this.resetPosition(data); - this.readFaceArray(data, mesh); - } else if (next === TEX_VERTS) { - const texels = this.readWord(data); - this.debugMessage(" UV: " + texels); - const uvs = []; - for (let i = 0; i < texels; i++) { - uvs.push(this.readFloat(data)); - uvs.push(this.readFloat(data)); - } - geometry.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); - } else if (next === MESH_MATRIX) { - this.debugMessage(" Tranformation Matrix (TODO)"); - const values = []; - for (let i = 0; i < 12; i++) values[i] = this.readFloat(data); - const matrix = new Matrix4(); - matrix.elements[0] = values[0]; - matrix.elements[1] = values[6]; - matrix.elements[2] = values[3]; - matrix.elements[3] = values[9]; - matrix.elements[4] = values[2]; - matrix.elements[5] = values[8]; - matrix.elements[6] = values[5]; - matrix.elements[7] = values[11]; - matrix.elements[8] = values[1]; - matrix.elements[9] = values[7]; - matrix.elements[10] = values[4]; - matrix.elements[11] = values[10]; - matrix.elements[12] = 0; - matrix.elements[13] = 0; - matrix.elements[14] = 0; - matrix.elements[15] = 1; - matrix.transpose(); - const inverse = new Matrix4(); - inverse.copy(matrix).invert(); - geometry.applyMatrix4(inverse); - matrix.decompose(mesh.position, mesh.quaternion, mesh.scale); - } else this.debugMessage(" Unknown mesh chunk: " + next.toString(16)); - next = this.nextChunk(data, chunk); - } - this.endChunk(chunk); - geometry.computeVertexNormals(); - return mesh; - } - /** - * Read face array data chunk. - * - * @method readFaceArray - * @param {Dataview} data Dataview in use. - * @param {Mesh} mesh Mesh to be filled with the data read. - */ - readFaceArray(data, mesh) { - const chunk = this.readChunk(data); - const faces = this.readWord(data); - this.debugMessage(" Faces: " + faces); - const index = []; - for (let i = 0; i < faces; ++i) { - index.push(this.readWord(data), this.readWord(data), this.readWord(data)); - this.readWord(data); - } - mesh.geometry.setIndex(index); - let materialIndex = 0; - let start = 0; - while (this.position < chunk.end) { - const subchunk = this.readChunk(data); - if (subchunk.id === MSH_MAT_GROUP) { - this.debugMessage(" Material Group"); - this.resetPosition(data); - const group = this.readMaterialGroup(data); - const count = group.index.length * 3; - mesh.geometry.addGroup(start, count, materialIndex); - start += count; - materialIndex++; - const material = this.materials[group.name]; - if (Array.isArray(mesh.material) === false) mesh.material = []; - if (material !== void 0) mesh.material.push(material); - } else this.debugMessage(" Unknown face array chunk: " + subchunk.toString(16)); - this.endChunk(subchunk); - } - if (mesh.material.length === 1) mesh.material = mesh.material[0]; - this.endChunk(chunk); - } - /** - * Read texture map data chunk. - * - * @method readMap - * @param {Dataview} data Dataview in use. - * @param {String} path Path for external resources. - * @return {Texture} Texture read from this data chunk. - */ - readMap(data, path) { - const chunk = this.readChunk(data); - let next = this.nextChunk(data, chunk); - let texture = {}; - const loader = new TextureLoader(this.manager); - loader.setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin); - while (next !== 0) { - if (next === MAT_MAPNAME) { - const name = this.readString(data, 128); - texture = loader.load(name); - this.debugMessage(" File: " + path + name); - } else if (next === MAT_MAP_UOFFSET) { - texture.offset.x = this.readFloat(data); - this.debugMessage(" OffsetX: " + texture.offset.x); - } else if (next === MAT_MAP_VOFFSET) { - texture.offset.y = this.readFloat(data); - this.debugMessage(" OffsetY: " + texture.offset.y); - } else if (next === MAT_MAP_USCALE) { - texture.repeat.x = this.readFloat(data); - this.debugMessage(" RepeatX: " + texture.repeat.x); - } else if (next === MAT_MAP_VSCALE) { - texture.repeat.y = this.readFloat(data); - this.debugMessage(" RepeatY: " + texture.repeat.y); - } else this.debugMessage(" Unknown map chunk: " + next.toString(16)); - next = this.nextChunk(data, chunk); - } - this.endChunk(chunk); - return texture; - } - /** - * Read material group data chunk. - * - * @method readMaterialGroup - * @param {Dataview} data Dataview in use. - * @return {Object} Object with name and index of the object. - */ - readMaterialGroup(data) { - this.readChunk(data); - const name = this.readString(data, 64); - const numFaces = this.readWord(data); - this.debugMessage(" Name: " + name); - this.debugMessage(" Faces: " + numFaces); - const index = []; - for (let i = 0; i < numFaces; ++i) index.push(this.readWord(data)); - return { - name, - index - }; - } - /** - * Read a color value. - * - * @method readColor - * @param {DataView} data Dataview. - * @return {Color} Color value read.. - */ - readColor(data) { - const chunk = this.readChunk(data); - const color = new Color(); - if (chunk.id === COLOR_24 || chunk.id === LIN_COLOR_24) { - const r = this.readByte(data); - const g = this.readByte(data); - const b = this.readByte(data); - color.setRGB(r / 255, g / 255, b / 255); - this.debugMessage(" Color: " + color.r + ", " + color.g + ", " + color.b); - } else if (chunk.id === COLOR_F || chunk.id === LIN_COLOR_F) { - const r = this.readFloat(data); - const g = this.readFloat(data); - const b = this.readFloat(data); - color.setRGB(r, g, b); - this.debugMessage(" Color: " + color.r + ", " + color.g + ", " + color.b); - } else this.debugMessage(" Unknown color chunk: " + chunk.toString(16)); - this.endChunk(chunk); - return color; - } - /** - * Read next chunk of data. - * - * @method readChunk - * @param {DataView} data Dataview. - * @return {Object} Chunk of data read. - */ - readChunk(data) { - const chunk = {}; - chunk.cur = this.position; - chunk.id = this.readWord(data); - chunk.size = this.readDWord(data); - chunk.end = chunk.cur + chunk.size; - chunk.cur += 6; - return chunk; - } - /** - * Set position to the end of the current chunk of data. - * - * @method endChunk - * @param {Object} chunk Data chunk. - */ - endChunk(chunk) { - this.position = chunk.end; - } - /** - * Move to the next data chunk. - * - * @method nextChunk - * @param {DataView} data Dataview. - * @param {Object} chunk Data chunk. - */ - nextChunk(data, chunk) { - if (chunk.cur >= chunk.end) return 0; - this.position = chunk.cur; - try { - const next = this.readChunk(data); - chunk.cur += next.size; - return next.id; - } catch (e) { - this.debugMessage("Unable to read chunk at " + this.position); - return 0; - } - } - /** - * Reset dataview position. - * - * @method resetPosition - */ - resetPosition() { - this.position -= 6; - } - /** - * Read byte value. - * - * @method readByte - * @param {DataView} data Dataview to read data from. - * @return {Number} Data read from the dataview. - */ - readByte(data) { - const v = data.getUint8(this.position, true); - this.position += 1; - return v; - } - /** - * Read 32 bit float value. - * - * @method readFloat - * @param {DataView} data Dataview to read data from. - * @return {Number} Data read from the dataview. - */ - readFloat(data) { - try { - const v = data.getFloat32(this.position, true); - this.position += 4; - return v; - } catch (e) { - this.debugMessage(e + " " + this.position + " " + data.byteLength); - } - } - /** - * Read 32 bit signed integer value. - * - * @method readInt - * @param {DataView} data Dataview to read data from. - * @return {Number} Data read from the dataview. - */ - readInt(data) { - const v = data.getInt32(this.position, true); - this.position += 4; - return v; - } - /** - * Read 16 bit signed integer value. - * - * @method readShort - * @param {DataView} data Dataview to read data from. - * @return {Number} Data read from the dataview. - */ - readShort(data) { - const v = data.getInt16(this.position, true); - this.position += 2; - return v; - } - /** - * Read 64 bit unsigned integer value. - * - * @method readDWord - * @param {DataView} data Dataview to read data from. - * @return {Number} Data read from the dataview. - */ - readDWord(data) { - const v = data.getUint32(this.position, true); - this.position += 4; - return v; - } - /** - * Read 32 bit unsigned integer value. - * - * @method readWord - * @param {DataView} data Dataview to read data from. - * @return {Number} Data read from the dataview. - */ - readWord(data) { - const v = data.getUint16(this.position, true); - this.position += 2; - return v; - } - /** - * Read string value. - * - * @method readString - * @param {DataView} data Dataview to read data from. - * @param {Number} maxLength Max size of the string to be read. - * @return {String} Data read from the dataview. - */ - readString(data, maxLength) { - let s = ""; - for (let i = 0; i < maxLength; i++) { - const c = this.readByte(data); - if (!c) break; - s += String.fromCharCode(c); - } - return s; - } - /** - * Read percentage value. - * - * @method readPercentage - * @param {DataView} data Dataview to read data from. - * @return {Number} Data read from the dataview. - */ - readPercentage(data) { - const chunk = this.readChunk(data); - let value; - switch (chunk.id) { - case INT_PERCENTAGE: - value = this.readShort(data) / 100; - break; - case FLOAT_PERCENTAGE: - value = this.readFloat(data); - break; - default: this.debugMessage(" Unknown percentage chunk: " + chunk.toString(16)); - } - this.endChunk(chunk); - return value; - } - /** - * Print debug message to the console. - * - * Is controlled by a flag to show or hide debug messages. - * - * @method debugMessage - * @param {Object} message Debug message to print to the console. - */ - debugMessage(message) { - if (this.debug) console.log(message); - } -}; -var M3DMAGIC = 19789; -var MLIBMAGIC = 15786; -var CMAGIC = 49725; -var M3D_VERSION = 2; -var COLOR_F = 16; -var COLOR_24 = 17; -var LIN_COLOR_24 = 18; -var LIN_COLOR_F = 19; -var INT_PERCENTAGE = 48; -var FLOAT_PERCENTAGE = 49; -var MDATA = 15677; -var MESH_VERSION = 15678; -var MASTER_SCALE = 256; -var MAT_ENTRY = 45055; -var MAT_NAME = 40960; -var MAT_AMBIENT = 40976; -var MAT_DIFFUSE = 40992; -var MAT_SPECULAR = 41008; -var MAT_SHININESS = 41024; -var MAT_TRANSPARENCY = 41040; -var MAT_TWO_SIDE = 41089; -var MAT_ADDITIVE = 41091; -var MAT_WIRE = 41093; -var MAT_WIRE_SIZE = 41095; -var MAT_TEXMAP = 41472; -var MAT_OPACMAP = 41488; -var MAT_BUMPMAP = 41520; -var MAT_SPECMAP = 41476; -var MAT_MAPNAME = 41728; -var MAT_MAP_USCALE = 41812; -var MAT_MAP_VSCALE = 41814; -var MAT_MAP_UOFFSET = 41816; -var MAT_MAP_VOFFSET = 41818; -var NAMED_OBJECT = 16384; -var N_TRI_OBJECT = 16640; -var POINT_ARRAY = 16656; -var FACE_ARRAY = 16672; -var MSH_MAT_GROUP = 16688; -var TEX_VERTS = 16704; -var MESH_MATRIX = 16736; -//#endregion -//#region node_modules/three-stdlib/loaders/LDrawLoader.js -var FINISH_TYPE_DEFAULT = 0; -var FINISH_TYPE_CHROME = 1; -var FINISH_TYPE_PEARLESCENT = 2; -var FINISH_TYPE_RUBBER = 3; -var FINISH_TYPE_MATTE_METALLIC = 4; -var FINISH_TYPE_METAL = 5; -var FILE_LOCATION_AS_IS = 0; -var FILE_LOCATION_TRY_PARTS = 1; -var FILE_LOCATION_TRY_P = 2; -var FILE_LOCATION_TRY_MODELS = 3; -var FILE_LOCATION_TRY_RELATIVE = 4; -var FILE_LOCATION_TRY_ABSOLUTE = 5; -var FILE_LOCATION_NOT_FOUND = 6; -var MAIN_COLOUR_CODE = "16"; -var MAIN_EDGE_COLOUR_CODE = "24"; -var _tempVec0 = /* @__PURE__ */ new Vector3(); -var _tempVec1 = /* @__PURE__ */ new Vector3(); -var LDrawConditionalLineMaterial = class extends ShaderMaterial { - constructor(parameters) { - super({ - uniforms: UniformsUtils.merge([UniformsLib.fog, { - diffuse: { value: new Color() }, - opacity: { value: 1 } - }]), - vertexShader: ` - attribute vec3 control0; - attribute vec3 control1; - attribute vec3 direction; - varying float discardFlag; - - #include <common> - #include <color_pars_vertex> - #include <fog_pars_vertex> - #include <logdepthbuf_pars_vertex> - #include <clipping_planes_pars_vertex> - - void main() { - #include <color_vertex> - - vec4 mvPosition = modelViewMatrix * vec4(position, 1.0); - gl_Position = projectionMatrix * mvPosition; - - // Transform the line segment ends and control points into camera clip space - vec4 c0 = projectionMatrix * modelViewMatrix * vec4(control0, 1.0); - vec4 c1 = projectionMatrix * modelViewMatrix * vec4(control1, 1.0); - vec4 p0 = projectionMatrix * modelViewMatrix * vec4(position, 1.0); - vec4 p1 = projectionMatrix * modelViewMatrix * vec4(position + direction, 1.0); - - c0.xy /= c0.w; - c1.xy /= c1.w; - p0.xy /= p0.w; - p1.xy /= p1.w; - - // Get the direction of the segment and an orthogonal vector - vec2 dir = p1.xy - p0.xy; - vec2 norm = vec2(-dir.y, dir.x); - - // Get control point directions from the line - vec2 c0dir = c0.xy - p1.xy; - vec2 c1dir = c1.xy - p1.xy; - - // If the vectors to the controls points are pointed in different directions away - // from the line segment then the line should not be drawn. - float d0 = dot(normalize(norm), normalize(c0dir)); - float d1 = dot(normalize(norm), normalize(c1dir)); - discardFlag = float(sign(d0) != sign(d1)); - - #include <logdepthbuf_vertex> - #include <clipping_planes_vertex> - #include <fog_vertex> - } - `, - fragmentShader: ` - uniform vec3 diffuse; - uniform float opacity; - varying float discardFlag; - - #include <common> - #include <color_pars_fragment> - #include <fog_pars_fragment> - #include <logdepthbuf_pars_fragment> - #include <clipping_planes_pars_fragment> - - void main() { - if (discardFlag > 0.5) discard; - - #include <clipping_planes_fragment> - vec3 outgoingLight = vec3(0.0); - vec4 diffuseColor = vec4(diffuse, opacity); - #include <logdepthbuf_fragment> - #include <color_fragment> - outgoingLight = diffuseColor.rgb; // simple shader - gl_FragColor = vec4(outgoingLight, diffuseColor.a); - #include <tonemapping_fragment> - #include <${version >= 154 ? "colorspace_fragment" : "encodings_fragment"}> - #include <fog_fragment> - #include <premultiplied_alpha_fragment> - } - ` - }); - Object.defineProperties(this, { - opacity: { - get: function() { - return this.uniforms.opacity.value; - }, - set: function(value) { - this.uniforms.opacity.value = value; - } - }, - color: { get: function() { - return this.uniforms.diffuse.value; - } } - }); - this.setValues(parameters); - this.isLDrawConditionalLineMaterial = true; - } -}; -var ConditionalLineSegments = class extends LineSegments { - constructor(geometry, material) { - super(geometry, material); - this.isConditionalLine = true; - } -}; -function generateFaceNormals(faces) { - for (let i = 0, l = faces.length; i < l; i++) { - const face = faces[i]; - const vertices = face.vertices; - const v0 = vertices[0]; - const v1 = vertices[1]; - const v2 = vertices[2]; - _tempVec0.subVectors(v1, v0); - _tempVec1.subVectors(v2, v1); - face.faceNormal = new Vector3().crossVectors(_tempVec0, _tempVec1).normalize(); - } -} -var _ray$1 = /* @__PURE__ */ new Ray(); -function smoothNormals(faces, lineSegments, checkSubSegments = false) { - const hashMultiplier = 1.0000000001 * 100; - function hashVertex(v) { - return `${~~(v.x * hashMultiplier)},${~~(v.y * hashMultiplier)},${~~(v.z * hashMultiplier)}`; - } - function hashEdge(v0, v1) { - return `${hashVertex(v0)}_${hashVertex(v1)}`; - } - function toNormalizedRay(v0, v1, targetRay) { - targetRay.direction.subVectors(v1, v0).normalize(); - const scalar = v0.dot(targetRay.direction); - targetRay.origin.copy(v0).addScaledVector(targetRay.direction, -scalar); - return targetRay; - } - function hashRay(ray) { - return hashEdge(ray.origin, ray.direction); - } - const hardEdges = /* @__PURE__ */ new Set(); - const hardEdgeRays = /* @__PURE__ */ new Map(); - const halfEdgeList = {}; - const normals = []; - for (let i = 0, l = lineSegments.length; i < l; i++) { - const vertices = lineSegments[i].vertices; - const v0 = vertices[0]; - const v1 = vertices[1]; - hardEdges.add(hashEdge(v0, v1)); - hardEdges.add(hashEdge(v1, v0)); - if (checkSubSegments) { - const ray = toNormalizedRay(v0, v1, new Ray()); - const rh1 = hashRay(ray); - if (!hardEdgeRays.has(rh1)) { - toNormalizedRay(v1, v0, ray); - const rh2 = hashRay(ray); - const info2 = { - ray, - distances: [] - }; - hardEdgeRays.set(rh1, info2); - hardEdgeRays.set(rh2, info2); - } - const info = hardEdgeRays.get(rh1); - let d0 = info.ray.direction.dot(v0); - let d1 = info.ray.direction.dot(v1); - if (d0 > d1) [d0, d1] = [d1, d0]; - info.distances.push(d0, d1); - } - } - for (let i = 0, l = faces.length; i < l; i++) { - const tri = faces[i]; - const vertices = tri.vertices; - const vertCount = vertices.length; - for (let i2 = 0; i2 < vertCount; i2++) { - const index = i2; - const next = (i2 + 1) % vertCount; - const v0 = vertices[index]; - const v1 = vertices[next]; - const hash = hashEdge(v0, v1); - if (hardEdges.has(hash)) continue; - if (checkSubSegments) { - toNormalizedRay(v0, v1, _ray$1); - const rayHash = hashRay(_ray$1); - if (hardEdgeRays.has(rayHash)) { - const { ray, distances } = hardEdgeRays.get(rayHash); - let d0 = ray.direction.dot(v0); - let d1 = ray.direction.dot(v1); - if (d0 > d1) [d0, d1] = [d1, d0]; - let found = false; - for (let i3 = 0, l2 = distances.length; i3 < l2; i3 += 2) if (d0 >= distances[i3] && d1 <= distances[i3 + 1]) { - found = true; - break; - } - if (found) continue; - } - } - halfEdgeList[hash] = { - index, - tri - }; - } - } - while (true) { - let halfEdge = null; - for (const key in halfEdgeList) { - halfEdge = halfEdgeList[key]; - break; - } - if (halfEdge === null) break; - const queue = [halfEdge]; - while (queue.length > 0) { - const tri = queue.pop().tri; - const vertices = tri.vertices; - const vertNormals = tri.normals; - const faceNormal = tri.faceNormal; - const vertCount = vertices.length; - for (let i2 = 0; i2 < vertCount; i2++) { - const index = i2; - const next = (i2 + 1) % vertCount; - const v0 = vertices[index]; - const v1 = vertices[next]; - const hash = hashEdge(v0, v1); - delete halfEdgeList[hash]; - const reverseHash = hashEdge(v1, v0); - const otherInfo = halfEdgeList[reverseHash]; - if (otherInfo) { - const otherTri = otherInfo.tri; - const otherIndex = otherInfo.index; - const otherNormals = otherTri.normals; - const otherVertCount = otherNormals.length; - const otherFaceNormal = otherTri.faceNormal; - if (Math.abs(otherTri.faceNormal.dot(tri.faceNormal)) < .25) continue; - if (reverseHash in halfEdgeList) { - queue.push(otherInfo); - delete halfEdgeList[reverseHash]; - } - const otherNext = (otherIndex + 1) % otherVertCount; - if (vertNormals[index] && otherNormals[otherNext] && vertNormals[index] !== otherNormals[otherNext]) { - otherNormals[otherNext].norm.add(vertNormals[index].norm); - vertNormals[index].norm = otherNormals[otherNext].norm; - } - let sharedNormal1 = vertNormals[index] || otherNormals[otherNext]; - if (sharedNormal1 === null) { - sharedNormal1 = { norm: new Vector3() }; - normals.push(sharedNormal1.norm); - } - if (vertNormals[index] === null) { - vertNormals[index] = sharedNormal1; - sharedNormal1.norm.add(faceNormal); - } - if (otherNormals[otherNext] === null) { - otherNormals[otherNext] = sharedNormal1; - sharedNormal1.norm.add(otherFaceNormal); - } - if (vertNormals[next] && otherNormals[otherIndex] && vertNormals[next] !== otherNormals[otherIndex]) { - otherNormals[otherIndex].norm.add(vertNormals[next].norm); - vertNormals[next].norm = otherNormals[otherIndex].norm; - } - let sharedNormal2 = vertNormals[next] || otherNormals[otherIndex]; - if (sharedNormal2 === null) { - sharedNormal2 = { norm: new Vector3() }; - normals.push(sharedNormal2.norm); - } - if (vertNormals[next] === null) { - vertNormals[next] = sharedNormal2; - sharedNormal2.norm.add(faceNormal); - } - if (otherNormals[otherIndex] === null) { - otherNormals[otherIndex] = sharedNormal2; - sharedNormal2.norm.add(otherFaceNormal); - } - } - } - } - } - for (let i = 0, l = normals.length; i < l; i++) normals[i].normalize(); -} -function isPartType(type) { - return type === "Part" || type === "Unofficial_Part"; -} -function isPrimitiveType(type) { - return /primitive/i.test(type) || type === "Subpart"; -} -var LineParser = class { - constructor(line, lineNumber) { - this.line = line; - this.lineLength = line.length; - this.currentCharIndex = 0; - this.currentChar = " "; - this.lineNumber = lineNumber; - } - seekNonSpace() { - while (this.currentCharIndex < this.lineLength) { - this.currentChar = this.line.charAt(this.currentCharIndex); - if (this.currentChar !== " " && this.currentChar !== " ") return; - this.currentCharIndex++; - } - } - getToken() { - const pos0 = this.currentCharIndex++; - while (this.currentCharIndex < this.lineLength) { - this.currentChar = this.line.charAt(this.currentCharIndex); - if (this.currentChar === " " || this.currentChar === " ") break; - this.currentCharIndex++; - } - const pos1 = this.currentCharIndex; - this.seekNonSpace(); - return this.line.substring(pos0, pos1); - } - getVector() { - return new Vector3(parseFloat(this.getToken()), parseFloat(this.getToken()), parseFloat(this.getToken())); - } - getRemainingString() { - return this.line.substring(this.currentCharIndex, this.lineLength); - } - isAtTheEnd() { - return this.currentCharIndex >= this.lineLength; - } - setToEnd() { - this.currentCharIndex = this.lineLength; - } - getLineNumberString() { - return this.lineNumber >= 0 ? " at line " + this.lineNumber : ""; - } -}; -var LDrawParsedCache = class { - constructor(loader) { - this.loader = loader; - this._cache = {}; - } - cloneResult(original) { - const result = {}; - result.faces = original.faces.map((face) => { - return { - colorCode: face.colorCode, - material: face.material, - vertices: face.vertices.map((v) => v.clone()), - normals: face.normals.map(() => null), - faceNormal: null - }; - }); - result.conditionalSegments = original.conditionalSegments.map((face) => { - return { - colorCode: face.colorCode, - material: face.material, - vertices: face.vertices.map((v) => v.clone()), - controlPoints: face.controlPoints.map((v) => v.clone()) - }; - }); - result.lineSegments = original.lineSegments.map((face) => { - return { - colorCode: face.colorCode, - material: face.material, - vertices: face.vertices.map((v) => v.clone()) - }; - }); - result.type = original.type; - result.category = original.category; - result.keywords = original.keywords; - result.subobjects = original.subobjects; - result.totalFaces = original.totalFaces; - result.startingConstructionStep = original.startingConstructionStep; - result.materials = original.materials; - result.group = null; - return result; - } - async fetchData(fileName) { - let triedLowerCase = false; - let locationState = FILE_LOCATION_AS_IS; - while (locationState !== FILE_LOCATION_NOT_FOUND) { - let subobjectURL = fileName; - switch (locationState) { - case FILE_LOCATION_AS_IS: - locationState = locationState + 1; - break; - case FILE_LOCATION_TRY_PARTS: - subobjectURL = "parts/" + subobjectURL; - locationState = locationState + 1; - break; - case FILE_LOCATION_TRY_P: - subobjectURL = "p/" + subobjectURL; - locationState = locationState + 1; - break; - case FILE_LOCATION_TRY_MODELS: - subobjectURL = "models/" + subobjectURL; - locationState = locationState + 1; - break; - case FILE_LOCATION_TRY_RELATIVE: - subobjectURL = fileName.substring(0, fileName.lastIndexOf("/") + 1) + subobjectURL; - locationState = locationState + 1; - break; - case FILE_LOCATION_TRY_ABSOLUTE: - if (triedLowerCase) locationState = FILE_LOCATION_NOT_FOUND; - else { - fileName = fileName.toLowerCase(); - subobjectURL = fileName; - triedLowerCase = true; - locationState = FILE_LOCATION_AS_IS; - } - break; - } - const loader = this.loader; - const fileLoader = new FileLoader(loader.manager); - fileLoader.setPath(loader.partsLibraryPath); - fileLoader.setRequestHeader(loader.requestHeader); - fileLoader.setWithCredentials(loader.withCredentials); - try { - return await fileLoader.loadAsync(subobjectURL); - } catch (e) { - continue; - } - } - throw new Error("LDrawLoader: Subobject \"" + fileName + "\" could not be loaded."); - } - parse(text, fileName = null) { - const loader = this.loader; - const faces = []; - const lineSegments = []; - const conditionalSegments = []; - const subobjects = []; - const materials = {}; - const getLocalMaterial = (colorCode) => { - return materials[colorCode] || null; - }; - let type = "Model"; - let category = null; - let keywords = null; - let totalFaces = 0; - if (text.indexOf("\r\n") !== -1) text = text.replace(/\r\n/g, "\n"); - const lines = text.split("\n"); - const numLines = lines.length; - let parsingEmbeddedFiles = false; - let currentEmbeddedFileName = null; - let currentEmbeddedText = null; - let bfcCertified = false; - let bfcCCW = true; - let bfcInverted = false; - let bfcCull = true; - let startingConstructionStep = false; - for (let lineIndex = 0; lineIndex < numLines; lineIndex++) { - const line = lines[lineIndex]; - if (line.length === 0) continue; - if (parsingEmbeddedFiles) { - if (line.startsWith("0 FILE ")) { - this.setData(currentEmbeddedFileName, currentEmbeddedText); - currentEmbeddedFileName = line.substring(7); - currentEmbeddedText = ""; - } else currentEmbeddedText += line + "\n"; - continue; - } - const lp = new LineParser(line, lineIndex + 1); - lp.seekNonSpace(); - if (lp.isAtTheEnd()) continue; - const lineType = lp.getToken(); - let material; - let colorCode; - let segment; - let ccw; - let doubleSided; - let v0, v1, v2, v3, c0, c1; - switch (lineType) { - case "0": - const meta = lp.getToken(); - if (meta) switch (meta) { - case "!LDRAW_ORG": - type = lp.getToken(); - break; - case "!COLOUR": - material = loader.parseColorMetaDirective(lp); - if (material) materials[material.userData.code] = material; - else console.warn("LDrawLoader: Error parsing material" + lp.getLineNumberString()); - break; - case "!CATEGORY": - category = lp.getToken(); - break; - case "!KEYWORDS": - const newKeywords = lp.getRemainingString().split(","); - if (newKeywords.length > 0) { - if (!keywords) keywords = []; - newKeywords.forEach(function(keyword) { - keywords.push(keyword.trim()); - }); - } - break; - case "FILE": - if (lineIndex > 0) { - parsingEmbeddedFiles = true; - currentEmbeddedFileName = lp.getRemainingString(); - currentEmbeddedText = ""; - bfcCertified = false; - bfcCCW = true; - } - break; - case "BFC": - while (!lp.isAtTheEnd()) { - const token = lp.getToken(); - switch (token) { - case "CERTIFY": - case "NOCERTIFY": - bfcCertified = token === "CERTIFY"; - bfcCCW = true; - break; - case "CW": - case "CCW": - bfcCCW = token === "CCW"; - break; - case "INVERTNEXT": - bfcInverted = true; - break; - case "CLIP": - case "NOCLIP": - bfcCull = token === "CLIP"; - break; - default: - console.warn("THREE.LDrawLoader: BFC directive \"" + token + "\" is unknown."); - break; - } - } - break; - case "STEP": - startingConstructionStep = true; - break; - } - break; - case "1": - colorCode = lp.getToken(); - material = getLocalMaterial(colorCode); - const posX = parseFloat(lp.getToken()); - const posY = parseFloat(lp.getToken()); - const posZ = parseFloat(lp.getToken()); - const m0 = parseFloat(lp.getToken()); - const m1 = parseFloat(lp.getToken()); - const m2 = parseFloat(lp.getToken()); - const m3 = parseFloat(lp.getToken()); - const m4 = parseFloat(lp.getToken()); - const m5 = parseFloat(lp.getToken()); - const m6 = parseFloat(lp.getToken()); - const m7 = parseFloat(lp.getToken()); - const m8 = parseFloat(lp.getToken()); - const matrix = new Matrix4().set(m0, m1, m2, posX, m3, m4, m5, posY, m6, m7, m8, posZ, 0, 0, 0, 1); - let fileName2 = lp.getRemainingString().trim().replace(/\\/g, "/"); - if (loader.fileMap[fileName2]) fileName2 = loader.fileMap[fileName2]; - else if (fileName2.startsWith("s/")) fileName2 = "parts/" + fileName2; - else if (fileName2.startsWith("48/")) fileName2 = "p/" + fileName2; - subobjects.push({ - material, - colorCode, - matrix, - fileName: fileName2, - inverted: bfcInverted, - startingConstructionStep - }); - bfcInverted = false; - break; - case "2": - colorCode = lp.getToken(); - material = getLocalMaterial(colorCode); - v0 = lp.getVector(); - v1 = lp.getVector(); - segment = { - material, - colorCode, - vertices: [v0, v1] - }; - lineSegments.push(segment); - break; - case "5": - colorCode = lp.getToken(); - material = getLocalMaterial(colorCode); - v0 = lp.getVector(); - v1 = lp.getVector(); - c0 = lp.getVector(); - c1 = lp.getVector(); - segment = { - material, - colorCode, - vertices: [v0, v1], - controlPoints: [c0, c1] - }; - conditionalSegments.push(segment); - break; - case "3": - colorCode = lp.getToken(); - material = getLocalMaterial(colorCode); - ccw = bfcCCW; - doubleSided = !bfcCertified || !bfcCull; - if (ccw === true) { - v0 = lp.getVector(); - v1 = lp.getVector(); - v2 = lp.getVector(); - } else { - v2 = lp.getVector(); - v1 = lp.getVector(); - v0 = lp.getVector(); - } - faces.push({ - material, - colorCode, - faceNormal: null, - vertices: [ - v0, - v1, - v2 - ], - normals: [ - null, - null, - null - ] - }); - totalFaces++; - if (doubleSided === true) { - faces.push({ - material, - colorCode, - faceNormal: null, - vertices: [ - v2, - v1, - v0 - ], - normals: [ - null, - null, - null - ] - }); - totalFaces++; - } - break; - case "4": - colorCode = lp.getToken(); - material = getLocalMaterial(colorCode); - ccw = bfcCCW; - doubleSided = !bfcCertified || !bfcCull; - if (ccw === true) { - v0 = lp.getVector(); - v1 = lp.getVector(); - v2 = lp.getVector(); - v3 = lp.getVector(); - } else { - v3 = lp.getVector(); - v2 = lp.getVector(); - v1 = lp.getVector(); - v0 = lp.getVector(); - } - faces.push({ - material, - colorCode, - faceNormal: null, - vertices: [ - v0, - v1, - v2, - v3 - ], - normals: [ - null, - null, - null, - null - ] - }); - totalFaces += 2; - if (doubleSided === true) { - faces.push({ - material, - colorCode, - faceNormal: null, - vertices: [ - v3, - v2, - v1, - v0 - ], - normals: [ - null, - null, - null, - null - ] - }); - totalFaces += 2; - } - break; - default: throw new Error("LDrawLoader: Unknown line type \"" + lineType + "\"" + lp.getLineNumberString() + "."); - } - } - if (parsingEmbeddedFiles) this.setData(currentEmbeddedFileName, currentEmbeddedText); - return { - faces, - conditionalSegments, - lineSegments, - type, - category, - keywords, - subobjects, - totalFaces, - startingConstructionStep, - materials, - fileName, - group: null - }; - } - getData(fileName, clone = true) { - const key = fileName.toLowerCase(); - const result = this._cache[key]; - if (result === null || result instanceof Promise) return null; - if (clone) return this.cloneResult(result); - else return result; - } - async ensureDataLoaded(fileName) { - const key = fileName.toLowerCase(); - if (!(key in this._cache)) this._cache[key] = this.fetchData(fileName).then((text) => { - const info = this.parse(text, fileName); - this._cache[key] = info; - return info; - }); - await this._cache[key]; - } - setData(fileName, text) { - const key = fileName.toLowerCase(); - this._cache[key] = this.parse(text, fileName); - } -}; -function getMaterialFromCode(colorCode, parentColorCode, materialHierarchy, forEdge) { - if (!forEdge && colorCode === MAIN_COLOUR_CODE || forEdge && colorCode === MAIN_EDGE_COLOUR_CODE) colorCode = parentColorCode; - return materialHierarchy[colorCode] || null; -} -var LDrawPartsGeometryCache = class { - constructor(loader) { - this.loader = loader; - this.parseCache = new LDrawParsedCache(loader); - this._cache = {}; - } - async processIntoMesh(info) { - const loader = this.loader; - const parseCache = this.parseCache; - const faceMaterials = /* @__PURE__ */ new Set(); - const processInfoSubobjects = async (info2, subobject = null) => { - const subobjects = info2.subobjects; - const promises = []; - for (let i = 0, l = subobjects.length; i < l; i++) { - const subobject2 = subobjects[i]; - const promise = parseCache.ensureDataLoaded(subobject2.fileName).then(() => { - if (!isPrimitiveType(parseCache.getData(subobject2.fileName, false).type)) return this.loadModel(subobject2.fileName).catch((error) => { - console.warn(error); - return null; - }); - return processInfoSubobjects(parseCache.getData(subobject2.fileName), subobject2); - }); - promises.push(promise); - } - const group2 = new Group(); - group2.userData.category = info2.category; - group2.userData.keywords = info2.keywords; - info2.group = group2; - const subobjectInfos = await Promise.all(promises); - for (let i = 0, l = subobjectInfos.length; i < l; i++) { - const subobject2 = info2.subobjects[i]; - const subobjectInfo = subobjectInfos[i]; - if (subobjectInfo === null) continue; - if (subobjectInfo.isGroup) { - const subobjectGroup = subobjectInfo; - subobject2.matrix.decompose(subobjectGroup.position, subobjectGroup.quaternion, subobjectGroup.scale); - subobjectGroup.userData.startingConstructionStep = subobject2.startingConstructionStep; - subobjectGroup.name = subobject2.fileName; - loader.applyMaterialsToMesh(subobjectGroup, subobject2.colorCode, info2.materials); - group2.add(subobjectGroup); - continue; - } - if (subobjectInfo.group.children.length) group2.add(subobjectInfo.group); - const parentLineSegments = info2.lineSegments; - const parentConditionalSegments = info2.conditionalSegments; - const parentFaces = info2.faces; - const lineSegments = subobjectInfo.lineSegments; - const conditionalSegments = subobjectInfo.conditionalSegments; - const faces = subobjectInfo.faces; - const matrix = subobject2.matrix; - const inverted = subobject2.inverted; - const matrixScaleInverted = matrix.determinant() < 0; - const colorCode = subobject2.colorCode; - const lineColorCode = colorCode === MAIN_COLOUR_CODE ? MAIN_EDGE_COLOUR_CODE : colorCode; - for (let i2 = 0, l2 = lineSegments.length; i2 < l2; i2++) { - const ls = lineSegments[i2]; - const vertices = ls.vertices; - vertices[0].applyMatrix4(matrix); - vertices[1].applyMatrix4(matrix); - ls.colorCode = ls.colorCode === MAIN_EDGE_COLOUR_CODE ? lineColorCode : ls.colorCode; - ls.material = ls.material || getMaterialFromCode(ls.colorCode, ls.colorCode, info2.materials, true); - parentLineSegments.push(ls); - } - for (let i2 = 0, l2 = conditionalSegments.length; i2 < l2; i2++) { - const os = conditionalSegments[i2]; - const vertices = os.vertices; - const controlPoints = os.controlPoints; - vertices[0].applyMatrix4(matrix); - vertices[1].applyMatrix4(matrix); - controlPoints[0].applyMatrix4(matrix); - controlPoints[1].applyMatrix4(matrix); - os.colorCode = os.colorCode === MAIN_EDGE_COLOUR_CODE ? lineColorCode : os.colorCode; - os.material = os.material || getMaterialFromCode(os.colorCode, os.colorCode, info2.materials, true); - parentConditionalSegments.push(os); - } - for (let i2 = 0, l2 = faces.length; i2 < l2; i2++) { - const tri = faces[i2]; - const vertices = tri.vertices; - for (let i3 = 0, l3 = vertices.length; i3 < l3; i3++) vertices[i3].applyMatrix4(matrix); - tri.colorCode = tri.colorCode === MAIN_COLOUR_CODE ? colorCode : tri.colorCode; - tri.material = tri.material || getMaterialFromCode(tri.colorCode, colorCode, info2.materials, false); - faceMaterials.add(tri.colorCode); - if (matrixScaleInverted !== inverted) vertices.reverse(); - parentFaces.push(tri); - } - info2.totalFaces += subobjectInfo.totalFaces; - } - if (subobject) loader.applyMaterialsToMesh(group2, subobject.colorCode, info2.materials); - return info2; - }; - for (let i = 0, l = info.faces; i < l; i++) faceMaterials.add(info.faces[i].colorCode); - await processInfoSubobjects(info); - if (loader.smoothNormals) { - const checkSubSegments = faceMaterials.size > 1; - generateFaceNormals(info.faces); - smoothNormals(info.faces, info.lineSegments, checkSubSegments); - } - const group = info.group; - if (info.faces.length > 0) group.add(createObject(info.faces, 3, false, info.totalFaces)); - if (info.lineSegments.length > 0) group.add(createObject(info.lineSegments, 2)); - if (info.conditionalSegments.length > 0) group.add(createObject(info.conditionalSegments, 2, true)); - return group; - } - hasCachedModel(fileName) { - return fileName !== null && fileName.toLowerCase() in this._cache; - } - async getCachedModel(fileName) { - if (fileName !== null && this.hasCachedModel(fileName)) { - const key = fileName.toLowerCase(); - return (await this._cache[key]).clone(); - } else return null; - } - async loadModel(fileName) { - const parseCache = this.parseCache; - const key = fileName.toLowerCase(); - if (this.hasCachedModel(fileName)) return this.getCachedModel(fileName); - else { - await parseCache.ensureDataLoaded(fileName); - const info = parseCache.getData(fileName); - const promise = this.processIntoMesh(info); - if (this.hasCachedModel(fileName)) return this.getCachedModel(fileName); - if (isPartType(info.type)) this._cache[key] = promise; - return (await promise).clone(); - } - } - async parseModel(text) { - const info = this.parseCache.parse(text); - if (isPartType(info.type) && this.hasCachedModel(info.fileName)) return this.getCachedModel(info.fileName); - return this.processIntoMesh(info); - } -}; -function sortByMaterial(a, b) { - if (a.colorCode === b.colorCode) return 0; - if (a.colorCode < b.colorCode) return -1; - return 1; -} -function createObject(elements, elementSize, isConditionalSegments = false, totalElements = null) { - elements.sort(sortByMaterial); - if (totalElements === null) totalElements = elements.length; - const positions = new Float32Array(elementSize * totalElements * 3); - const normals = elementSize === 3 ? new Float32Array(elementSize * totalElements * 3) : null; - const materials = []; - const quadArray = new Array(6); - const bufferGeometry = new BufferGeometry(); - let prevMaterial = null; - let index0 = 0; - let numGroupVerts = 0; - let offset = 0; - for (let iElem = 0, nElem = elements.length; iElem < nElem; iElem++) { - const elem = elements[iElem]; - let vertices = elem.vertices; - if (vertices.length === 4) { - quadArray[0] = vertices[0]; - quadArray[1] = vertices[1]; - quadArray[2] = vertices[2]; - quadArray[3] = vertices[0]; - quadArray[4] = vertices[2]; - quadArray[5] = vertices[3]; - vertices = quadArray; - } - for (let j = 0, l = vertices.length; j < l; j++) { - const v = vertices[j]; - const index = offset + j * 3; - positions[index + 0] = v.x; - positions[index + 1] = v.y; - positions[index + 2] = v.z; - } - if (elementSize === 3) { - if (!elem.faceNormal) { - const v0 = vertices[0]; - const v1 = vertices[1]; - const v2 = vertices[2]; - _tempVec0.subVectors(v1, v0); - _tempVec1.subVectors(v2, v1); - elem.faceNormal = new Vector3().crossVectors(_tempVec0, _tempVec1).normalize(); - } - let elemNormals = elem.normals; - if (elemNormals.length === 4) { - quadArray[0] = elemNormals[0]; - quadArray[1] = elemNormals[1]; - quadArray[2] = elemNormals[2]; - quadArray[3] = elemNormals[0]; - quadArray[4] = elemNormals[2]; - quadArray[5] = elemNormals[3]; - elemNormals = quadArray; - } - for (let j = 0, l = elemNormals.length; j < l; j++) { - let n = elem.faceNormal; - if (elemNormals[j]) n = elemNormals[j].norm; - const index = offset + j * 3; - normals[index + 0] = n.x; - normals[index + 1] = n.y; - normals[index + 2] = n.z; - } - } - if (prevMaterial !== elem.colorCode) { - if (prevMaterial !== null) bufferGeometry.addGroup(index0, numGroupVerts, materials.length - 1); - const material = elem.material; - if (material !== null) { - if (elementSize === 3) materials.push(material); - else if (elementSize === 2) if (material !== null) if (isConditionalSegments) materials.push(material.userData.edgeMaterial.userData.conditionalEdgeMaterial); - else materials.push(material.userData.edgeMaterial); - else materials.push(null); - } else materials.push(elem.colorCode); - prevMaterial = elem.colorCode; - index0 = offset / 3; - numGroupVerts = vertices.length; - } else numGroupVerts += vertices.length; - offset += 3 * vertices.length; - } - if (numGroupVerts > 0) bufferGeometry.addGroup(index0, Infinity, materials.length - 1); - bufferGeometry.setAttribute("position", new BufferAttribute(positions, 3)); - if (normals !== null) bufferGeometry.setAttribute("normal", new BufferAttribute(normals, 3)); - let object3d = null; - if (elementSize === 2) if (isConditionalSegments) object3d = new ConditionalLineSegments(bufferGeometry, materials.length === 1 ? materials[0] : materials); - else object3d = new LineSegments(bufferGeometry, materials.length === 1 ? materials[0] : materials); - else if (elementSize === 3) object3d = new Mesh(bufferGeometry, materials.length === 1 ? materials[0] : materials); - if (isConditionalSegments) { - object3d.isConditionalLine = true; - const controlArray0 = new Float32Array(elements.length * 3 * 2); - const controlArray1 = new Float32Array(elements.length * 3 * 2); - const directionArray = new Float32Array(elements.length * 3 * 2); - for (let i = 0, l = elements.length; i < l; i++) { - const os = elements[i]; - const vertices = os.vertices; - const controlPoints = os.controlPoints; - const c0 = controlPoints[0]; - const c1 = controlPoints[1]; - const v0 = vertices[0]; - const v1 = vertices[1]; - const index = i * 3 * 2; - controlArray0[index + 0] = c0.x; - controlArray0[index + 1] = c0.y; - controlArray0[index + 2] = c0.z; - controlArray0[index + 3] = c0.x; - controlArray0[index + 4] = c0.y; - controlArray0[index + 5] = c0.z; - controlArray1[index + 0] = c1.x; - controlArray1[index + 1] = c1.y; - controlArray1[index + 2] = c1.z; - controlArray1[index + 3] = c1.x; - controlArray1[index + 4] = c1.y; - controlArray1[index + 5] = c1.z; - directionArray[index + 0] = v1.x - v0.x; - directionArray[index + 1] = v1.y - v0.y; - directionArray[index + 2] = v1.z - v0.z; - directionArray[index + 3] = v1.x - v0.x; - directionArray[index + 4] = v1.y - v0.y; - directionArray[index + 5] = v1.z - v0.z; - } - bufferGeometry.setAttribute("control0", new BufferAttribute(controlArray0, 3, false)); - bufferGeometry.setAttribute("control1", new BufferAttribute(controlArray1, 3, false)); - bufferGeometry.setAttribute("direction", new BufferAttribute(directionArray, 3, false)); - } - return object3d; -} -var LDrawLoader = class extends Loader { - constructor(manager) { - super(manager); - this.materials = []; - this.materialLibrary = {}; - this.partsCache = new LDrawPartsGeometryCache(this); - this.fileMap = {}; - this.setMaterials([]); - this.smoothNormals = true; - this.partsLibraryPath = ""; - } - setPartsLibraryPath(path) { - this.partsLibraryPath = path; - return this; - } - async preloadMaterials(url) { - const fileLoader = new FileLoader(this.manager); - fileLoader.setPath(this.path); - fileLoader.setRequestHeader(this.requestHeader); - fileLoader.setWithCredentials(this.withCredentials); - const text = await fileLoader.loadAsync(url); - const colorLineRegex = /^0 !COLOUR/; - const lines = text.split(/[\n\r]/g); - const materials = []; - for (let i = 0, l = lines.length; i < l; i++) { - const line = lines[i]; - if (colorLineRegex.test(line)) { - const directive = line.replace(colorLineRegex, ""); - const material = this.parseColorMetaDirective(new LineParser(directive)); - materials.push(material); - } - } - this.setMaterials(materials); - } - load(url, onLoad, onProgress, onError) { - const fileLoader = new FileLoader(this.manager); - fileLoader.setPath(this.path); - fileLoader.setRequestHeader(this.requestHeader); - fileLoader.setWithCredentials(this.withCredentials); - fileLoader.load(url, (text) => { - this.partsCache.parseModel(text, this.materialLibrary).then((group) => { - this.applyMaterialsToMesh(group, MAIN_COLOUR_CODE, this.materialLibrary, true); - this.computeConstructionSteps(group); - onLoad(group); - }).catch(onError); - }, onProgress, onError); - } - parse(text, onLoad) { - this.partsCache.parseModel(text, this.materialLibrary).then((group) => { - this.computeConstructionSteps(group); - onLoad(group); - }); - } - setMaterials(materials) { - this.materialLibrary = {}; - this.materials = []; - for (let i = 0, l = materials.length; i < l; i++) this.addMaterial(materials[i]); - this.addMaterial(this.parseColorMetaDirective(new LineParser("Main_Colour CODE 16 VALUE #FF8080 EDGE #333333"))); - this.addMaterial(this.parseColorMetaDirective(new LineParser("Edge_Colour CODE 24 VALUE #A0A0A0 EDGE #333333"))); - return this; - } - setFileMap(fileMap) { - this.fileMap = fileMap; - return this; - } - addMaterial(material) { - const matLib = this.materialLibrary; - if (!matLib[material.userData.code]) { - this.materials.push(material); - matLib[material.userData.code] = material; - } - return this; - } - getMaterial(colorCode) { - if (colorCode.startsWith("0x2")) { - const color = colorCode.substring(3); - return this.parseColorMetaDirective(new LineParser("Direct_Color_" + color + " CODE -1 VALUE #" + color + " EDGE #" + color)); - } - return this.materialLibrary[colorCode] || null; - } - applyMaterialsToMesh(group, parentColorCode, materialHierarchy, finalMaterialPass = false) { - const loader = this; - const parentIsPassthrough = parentColorCode === MAIN_COLOUR_CODE; - group.traverse((c) => { - if (c.isMesh || c.isLineSegments) { - if (Array.isArray(c.material)) { - for (let i = 0, l = c.material.length; i < l; i++) if (!c.material[i].isMaterial) c.material[i] = getMaterial(c, c.material[i]); - } else if (!c.material.isMaterial) c.material = getMaterial(c, c.material); - } - }); - function getMaterial(c, colorCode) { - if (parentIsPassthrough && !(colorCode in materialHierarchy) && !finalMaterialPass) return colorCode; - const forEdge = c.isLineSegments || c.isConditionalLine; - if (!forEdge && colorCode === MAIN_COLOUR_CODE || forEdge && colorCode === MAIN_EDGE_COLOUR_CODE) colorCode = parentColorCode; - let material = null; - if (colorCode in materialHierarchy) material = materialHierarchy[colorCode]; - else if (finalMaterialPass) { - material = loader.getMaterial(colorCode); - if (material === null) throw new Error(`LDrawLoader: Material properties for code ${colorCode} not available.`); - } else return colorCode; - if (c.isLineSegments) { - material = material.userData.edgeMaterial; - if (c.isConditionalLine) material = material.userData.conditionalEdgeMaterial; - } - return material; - } - } - getMainMaterial() { - return this.getMaterial(MAIN_COLOUR_CODE); - } - getMainEdgeMaterial() { - return this.getMaterial(MAIN_EDGE_COLOUR_CODE); - } - parseColorMetaDirective(lineParser) { - let code = null; - let color = 16711935; - let edgeColor = 16711935; - let alpha = 1; - let isTransparent = false; - let luminance = 0; - let finishType = FINISH_TYPE_DEFAULT; - let edgeMaterial = null; - const name = lineParser.getToken(); - if (!name) throw new Error("LDrawLoader: Material name was expected after \"!COLOUR tag" + lineParser.getLineNumberString() + "."); - let token = null; - while (true) { - token = lineParser.getToken(); - if (!token) break; - switch (token.toUpperCase()) { - case "CODE": - code = lineParser.getToken(); - break; - case "VALUE": - color = lineParser.getToken(); - if (color.startsWith("0x")) color = "#" + color.substring(2); - else if (!color.startsWith("#")) throw new Error("LDrawLoader: Invalid color while parsing material" + lineParser.getLineNumberString() + "."); - break; - case "EDGE": - edgeColor = lineParser.getToken(); - if (edgeColor.startsWith("0x")) edgeColor = "#" + edgeColor.substring(2); - else if (!edgeColor.startsWith("#")) { - edgeMaterial = this.getMaterial(edgeColor); - if (!edgeMaterial) throw new Error("LDrawLoader: Invalid edge color while parsing material" + lineParser.getLineNumberString() + "."); - edgeMaterial = edgeMaterial.userData.edgeMaterial; - } - break; - case "ALPHA": - alpha = parseInt(lineParser.getToken()); - if (isNaN(alpha)) throw new Error("LDrawLoader: Invalid alpha value in material definition" + lineParser.getLineNumberString() + "."); - alpha = Math.max(0, Math.min(1, alpha / 255)); - if (alpha < 1) isTransparent = true; - break; - case "LUMINANCE": - luminance = parseInt(lineParser.getToken()); - if (isNaN(luminance)) throw new Error("LDrawLoader: Invalid luminance value in material definition" + LineParser.getLineNumberString() + "."); - luminance = Math.max(0, Math.min(1, luminance / 255)); - break; - case "CHROME": - finishType = FINISH_TYPE_CHROME; - break; - case "PEARLESCENT": - finishType = FINISH_TYPE_PEARLESCENT; - break; - case "RUBBER": - finishType = FINISH_TYPE_RUBBER; - break; - case "MATTE_METALLIC": - finishType = FINISH_TYPE_MATTE_METALLIC; - break; - case "METAL": - finishType = FINISH_TYPE_METAL; - break; - case "MATERIAL": - lineParser.setToEnd(); - break; - default: throw new Error("LDrawLoader: Unknown token \"" + token + "\" while parsing material" + lineParser.getLineNumberString() + "."); - } - } - let material = null; - switch (finishType) { - case FINISH_TYPE_DEFAULT: - material = new MeshStandardMaterial({ - color, - roughness: .3, - metalness: 0 - }); - break; - case FINISH_TYPE_PEARLESCENT: - material = new MeshStandardMaterial({ - color, - roughness: .3, - metalness: .25 - }); - break; - case FINISH_TYPE_CHROME: - material = new MeshStandardMaterial({ - color, - roughness: 0, - metalness: 1 - }); - break; - case FINISH_TYPE_RUBBER: - material = new MeshStandardMaterial({ - color, - roughness: .9, - metalness: 0 - }); - break; - case FINISH_TYPE_MATTE_METALLIC: - material = new MeshStandardMaterial({ - color, - roughness: .8, - metalness: .4 - }); - break; - case FINISH_TYPE_METAL: - material = new MeshStandardMaterial({ - color, - roughness: .2, - metalness: .85 - }); - break; - } - material.transparent = isTransparent; - material.premultipliedAlpha = true; - material.opacity = alpha; - material.depthWrite = !isTransparent; - material.polygonOffset = true; - material.polygonOffsetFactor = 1; - if (luminance !== 0) material.emissive.set(material.color).multiplyScalar(luminance); - if (!edgeMaterial) { - edgeMaterial = new LineBasicMaterial({ - color: edgeColor, - transparent: isTransparent, - opacity: alpha, - depthWrite: !isTransparent - }); - edgeMaterial.userData.code = code; - edgeMaterial.name = name + " - Edge"; - edgeMaterial.userData.conditionalEdgeMaterial = new LDrawConditionalLineMaterial({ - fog: true, - transparent: isTransparent, - depthWrite: !isTransparent, - color: edgeColor, - opacity: alpha - }); - } - material.userData.code = code; - material.name = name; - material.userData.edgeMaterial = edgeMaterial; - this.addMaterial(material); - return material; - } - computeConstructionSteps(model) { - let stepNumber = 0; - model.traverse((c) => { - if (c.isGroup) { - if (c.userData.startingConstructionStep) stepNumber++; - c.userData.constructionStep = stepNumber; - } - }); - model.userData.numConstructionSteps = stepNumber + 1; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/SVGLoader.js -var COLOR_SPACE_SVG = "srgb"; -var SVGLoader = /* @__PURE__ */ (() => { - class SVGLoader2 extends Loader { - constructor(manager) { - super(manager); - this.defaultDPI = 90; - this.defaultUnit = "px"; - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(scope.manager); - loader.setPath(scope.path); - loader.setRequestHeader(scope.requestHeader); - loader.setWithCredentials(scope.withCredentials); - loader.load(url, function(text) { - try { - onLoad(scope.parse(text)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(text) { - const scope = this; - function parseNode(node, style) { - if (node.nodeType !== 1) return; - const transform = getNodeTransform(node); - let isDefsNode = false; - let path = null; - switch (node.nodeName) { - case "svg": - style = parseStyle(node, style); - break; - case "style": - parseCSSStylesheet(node); - break; - case "g": - style = parseStyle(node, style); - break; - case "path": - style = parseStyle(node, style); - if (node.hasAttribute("d")) path = parsePathNode(node); - break; - case "rect": - style = parseStyle(node, style); - path = parseRectNode(node); - break; - case "polygon": - style = parseStyle(node, style); - path = parsePolygonNode(node); - break; - case "polyline": - style = parseStyle(node, style); - path = parsePolylineNode(node); - break; - case "circle": - style = parseStyle(node, style); - path = parseCircleNode(node); - break; - case "ellipse": - style = parseStyle(node, style); - path = parseEllipseNode(node); - break; - case "line": - style = parseStyle(node, style); - path = parseLineNode(node); - break; - case "defs": - isDefsNode = true; - break; - case "use": - style = parseStyle(node, style); - const usedNodeId = (node.getAttributeNS("http://www.w3.org/1999/xlink", "href") || "").substring(1); - const usedNode = node.viewportElement.getElementById(usedNodeId); - if (usedNode) parseNode(usedNode, style); - else console.warn("SVGLoader: 'use node' references non-existent node id: " + usedNodeId); - break; - } - if (path) { - if (style.fill !== void 0 && style.fill !== "none") path.color.setStyle(style.fill, COLOR_SPACE_SVG); - transformPath(path, currentTransform); - paths.push(path); - path.userData = { - node, - style - }; - } - const childNodes = node.childNodes; - for (let i = 0; i < childNodes.length; i++) { - const node2 = childNodes[i]; - if (isDefsNode && node2.nodeName !== "style" && node2.nodeName !== "defs") continue; - parseNode(node2, style); - } - if (transform) { - transformStack.pop(); - if (transformStack.length > 0) currentTransform.copy(transformStack[transformStack.length - 1]); - else currentTransform.identity(); - } - } - function parsePathNode(node) { - const path = new ShapePath(); - const point = new Vector2(); - const control = new Vector2(); - const firstPoint = new Vector2(); - let isFirstPoint = true; - let doSetFirstPoint = false; - const d = node.getAttribute("d"); - if (d === "" || d === "none") return null; - const commands = d.match(/[a-df-z][^a-df-z]*/gi); - for (let i = 0, l = commands.length; i < l; i++) { - const command = commands[i]; - const type = command.charAt(0); - const data2 = command.slice(1).trim(); - if (isFirstPoint === true) { - doSetFirstPoint = true; - isFirstPoint = false; - } - let numbers; - switch (type) { - case "M": - numbers = parseFloats(data2); - for (let j = 0, jl = numbers.length; j < jl; j += 2) { - point.x = numbers[j + 0]; - point.y = numbers[j + 1]; - control.x = point.x; - control.y = point.y; - if (j === 0) path.moveTo(point.x, point.y); - else path.lineTo(point.x, point.y); - if (j === 0) firstPoint.copy(point); - } - break; - case "H": - numbers = parseFloats(data2); - for (let j = 0, jl = numbers.length; j < jl; j++) { - point.x = numbers[j]; - control.x = point.x; - control.y = point.y; - path.lineTo(point.x, point.y); - if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); - } - break; - case "V": - numbers = parseFloats(data2); - for (let j = 0, jl = numbers.length; j < jl; j++) { - point.y = numbers[j]; - control.x = point.x; - control.y = point.y; - path.lineTo(point.x, point.y); - if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); - } - break; - case "L": - numbers = parseFloats(data2); - for (let j = 0, jl = numbers.length; j < jl; j += 2) { - point.x = numbers[j + 0]; - point.y = numbers[j + 1]; - control.x = point.x; - control.y = point.y; - path.lineTo(point.x, point.y); - if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); - } - break; - case "C": - numbers = parseFloats(data2); - for (let j = 0, jl = numbers.length; j < jl; j += 6) { - path.bezierCurveTo(numbers[j + 0], numbers[j + 1], numbers[j + 2], numbers[j + 3], numbers[j + 4], numbers[j + 5]); - control.x = numbers[j + 2]; - control.y = numbers[j + 3]; - point.x = numbers[j + 4]; - point.y = numbers[j + 5]; - if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); - } - break; - case "S": - numbers = parseFloats(data2); - for (let j = 0, jl = numbers.length; j < jl; j += 4) { - path.bezierCurveTo(getReflection(point.x, control.x), getReflection(point.y, control.y), numbers[j + 0], numbers[j + 1], numbers[j + 2], numbers[j + 3]); - control.x = numbers[j + 0]; - control.y = numbers[j + 1]; - point.x = numbers[j + 2]; - point.y = numbers[j + 3]; - if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); - } - break; - case "Q": - numbers = parseFloats(data2); - for (let j = 0, jl = numbers.length; j < jl; j += 4) { - path.quadraticCurveTo(numbers[j + 0], numbers[j + 1], numbers[j + 2], numbers[j + 3]); - control.x = numbers[j + 0]; - control.y = numbers[j + 1]; - point.x = numbers[j + 2]; - point.y = numbers[j + 3]; - if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); - } - break; - case "T": - numbers = parseFloats(data2); - for (let j = 0, jl = numbers.length; j < jl; j += 2) { - const rx = getReflection(point.x, control.x); - const ry = getReflection(point.y, control.y); - path.quadraticCurveTo(rx, ry, numbers[j + 0], numbers[j + 1]); - control.x = rx; - control.y = ry; - point.x = numbers[j + 0]; - point.y = numbers[j + 1]; - if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); - } - break; - case "A": - numbers = parseFloats(data2, [3, 4], 7); - for (let j = 0, jl = numbers.length; j < jl; j += 7) { - if (numbers[j + 5] == point.x && numbers[j + 6] == point.y) continue; - const start = point.clone(); - point.x = numbers[j + 5]; - point.y = numbers[j + 6]; - control.x = point.x; - control.y = point.y; - parseArcCommand(path, numbers[j], numbers[j + 1], numbers[j + 2], numbers[j + 3], numbers[j + 4], start, point); - if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); - } - break; - case "m": - numbers = parseFloats(data2); - for (let j = 0, jl = numbers.length; j < jl; j += 2) { - point.x += numbers[j + 0]; - point.y += numbers[j + 1]; - control.x = point.x; - control.y = point.y; - if (j === 0) path.moveTo(point.x, point.y); - else path.lineTo(point.x, point.y); - if (j === 0) firstPoint.copy(point); - } - break; - case "h": - numbers = parseFloats(data2); - for (let j = 0, jl = numbers.length; j < jl; j++) { - point.x += numbers[j]; - control.x = point.x; - control.y = point.y; - path.lineTo(point.x, point.y); - if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); - } - break; - case "v": - numbers = parseFloats(data2); - for (let j = 0, jl = numbers.length; j < jl; j++) { - point.y += numbers[j]; - control.x = point.x; - control.y = point.y; - path.lineTo(point.x, point.y); - if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); - } - break; - case "l": - numbers = parseFloats(data2); - for (let j = 0, jl = numbers.length; j < jl; j += 2) { - point.x += numbers[j + 0]; - point.y += numbers[j + 1]; - control.x = point.x; - control.y = point.y; - path.lineTo(point.x, point.y); - if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); - } - break; - case "c": - numbers = parseFloats(data2); - for (let j = 0, jl = numbers.length; j < jl; j += 6) { - path.bezierCurveTo(point.x + numbers[j + 0], point.y + numbers[j + 1], point.x + numbers[j + 2], point.y + numbers[j + 3], point.x + numbers[j + 4], point.y + numbers[j + 5]); - control.x = point.x + numbers[j + 2]; - control.y = point.y + numbers[j + 3]; - point.x += numbers[j + 4]; - point.y += numbers[j + 5]; - if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); - } - break; - case "s": - numbers = parseFloats(data2); - for (let j = 0, jl = numbers.length; j < jl; j += 4) { - path.bezierCurveTo(getReflection(point.x, control.x), getReflection(point.y, control.y), point.x + numbers[j + 0], point.y + numbers[j + 1], point.x + numbers[j + 2], point.y + numbers[j + 3]); - control.x = point.x + numbers[j + 0]; - control.y = point.y + numbers[j + 1]; - point.x += numbers[j + 2]; - point.y += numbers[j + 3]; - if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); - } - break; - case "q": - numbers = parseFloats(data2); - for (let j = 0, jl = numbers.length; j < jl; j += 4) { - path.quadraticCurveTo(point.x + numbers[j + 0], point.y + numbers[j + 1], point.x + numbers[j + 2], point.y + numbers[j + 3]); - control.x = point.x + numbers[j + 0]; - control.y = point.y + numbers[j + 1]; - point.x += numbers[j + 2]; - point.y += numbers[j + 3]; - if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); - } - break; - case "t": - numbers = parseFloats(data2); - for (let j = 0, jl = numbers.length; j < jl; j += 2) { - const rx = getReflection(point.x, control.x); - const ry = getReflection(point.y, control.y); - path.quadraticCurveTo(rx, ry, point.x + numbers[j + 0], point.y + numbers[j + 1]); - control.x = rx; - control.y = ry; - point.x = point.x + numbers[j + 0]; - point.y = point.y + numbers[j + 1]; - if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); - } - break; - case "a": - numbers = parseFloats(data2, [3, 4], 7); - for (let j = 0, jl = numbers.length; j < jl; j += 7) { - if (numbers[j + 5] == 0 && numbers[j + 6] == 0) continue; - const start = point.clone(); - point.x += numbers[j + 5]; - point.y += numbers[j + 6]; - control.x = point.x; - control.y = point.y; - parseArcCommand(path, numbers[j], numbers[j + 1], numbers[j + 2], numbers[j + 3], numbers[j + 4], start, point); - if (j === 0 && doSetFirstPoint === true) firstPoint.copy(point); - } - break; - case "Z": - case "z": - path.currentPath.autoClose = true; - if (path.currentPath.curves.length > 0) { - point.copy(firstPoint); - path.currentPath.currentPoint.copy(point); - isFirstPoint = true; - } - break; - default: console.warn(command); - } - doSetFirstPoint = false; - } - return path; - } - function parseCSSStylesheet(node) { - if (!node.sheet || !node.sheet.cssRules || !node.sheet.cssRules.length) return; - for (let i = 0; i < node.sheet.cssRules.length; i++) { - const stylesheet = node.sheet.cssRules[i]; - if (stylesheet.type !== 1) continue; - const selectorList = stylesheet.selectorText.split(/,/gm).filter(Boolean).map((i2) => i2.trim()); - for (let j = 0; j < selectorList.length; j++) { - const definitions = Object.fromEntries(Object.entries(stylesheet.style).filter(([, v]) => v !== "")); - stylesheets[selectorList[j]] = Object.assign(stylesheets[selectorList[j]] || {}, definitions); - } - } - } - function parseArcCommand(path, rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, start, end) { - if (rx == 0 || ry == 0) { - path.lineTo(end.x, end.y); - return; - } - x_axis_rotation = x_axis_rotation * Math.PI / 180; - rx = Math.abs(rx); - ry = Math.abs(ry); - const dx2 = (start.x - end.x) / 2; - const dy2 = (start.y - end.y) / 2; - const x1p = Math.cos(x_axis_rotation) * dx2 + Math.sin(x_axis_rotation) * dy2; - const y1p = -Math.sin(x_axis_rotation) * dx2 + Math.cos(x_axis_rotation) * dy2; - let rxs = rx * rx; - let rys = ry * ry; - const x1ps = x1p * x1p; - const y1ps = y1p * y1p; - const cr = x1ps / rxs + y1ps / rys; - if (cr > 1) { - const s = Math.sqrt(cr); - rx = s * rx; - ry = s * ry; - rxs = rx * rx; - rys = ry * ry; - } - const dq = rxs * y1ps + rys * x1ps; - const pq = (rxs * rys - dq) / dq; - let q = Math.sqrt(Math.max(0, pq)); - if (large_arc_flag === sweep_flag) q = -q; - const cxp = q * rx * y1p / ry; - const cyp = -q * ry * x1p / rx; - const cx = Math.cos(x_axis_rotation) * cxp - Math.sin(x_axis_rotation) * cyp + (start.x + end.x) / 2; - const cy = Math.sin(x_axis_rotation) * cxp + Math.cos(x_axis_rotation) * cyp + (start.y + end.y) / 2; - const theta = svgAngle(1, 0, (x1p - cxp) / rx, (y1p - cyp) / ry); - const delta = svgAngle((x1p - cxp) / rx, (y1p - cyp) / ry, (-x1p - cxp) / rx, (-y1p - cyp) / ry) % (Math.PI * 2); - path.currentPath.absellipse(cx, cy, rx, ry, theta, theta + delta, sweep_flag === 0, x_axis_rotation); - } - function svgAngle(ux, uy, vx, vy) { - const dot = ux * vx + uy * vy; - const len = Math.sqrt(ux * ux + uy * uy) * Math.sqrt(vx * vx + vy * vy); - let ang = Math.acos(Math.max(-1, Math.min(1, dot / len))); - if (ux * vy - uy * vx < 0) ang = -ang; - return ang; - } - function parseRectNode(node) { - const x = parseFloatWithUnits(node.getAttribute("x") || 0); - const y = parseFloatWithUnits(node.getAttribute("y") || 0); - const rx = parseFloatWithUnits(node.getAttribute("rx") || node.getAttribute("ry") || 0); - const ry = parseFloatWithUnits(node.getAttribute("ry") || node.getAttribute("rx") || 0); - const w = parseFloatWithUnits(node.getAttribute("width")); - const h = parseFloatWithUnits(node.getAttribute("height")); - const bci = .448084975506; - const path = new ShapePath(); - path.moveTo(x + rx, y); - path.lineTo(x + w - rx, y); - if (rx !== 0 || ry !== 0) path.bezierCurveTo(x + w - rx * bci, y, x + w, y + ry * bci, x + w, y + ry); - path.lineTo(x + w, y + h - ry); - if (rx !== 0 || ry !== 0) path.bezierCurveTo(x + w, y + h - ry * bci, x + w - rx * bci, y + h, x + w - rx, y + h); - path.lineTo(x + rx, y + h); - if (rx !== 0 || ry !== 0) path.bezierCurveTo(x + rx * bci, y + h, x, y + h - ry * bci, x, y + h - ry); - path.lineTo(x, y + ry); - if (rx !== 0 || ry !== 0) path.bezierCurveTo(x, y + ry * bci, x + rx * bci, y, x + rx, y); - return path; - } - function parsePolygonNode(node) { - function iterator(match, a, b) { - const x = parseFloatWithUnits(a); - const y = parseFloatWithUnits(b); - if (index === 0) path.moveTo(x, y); - else path.lineTo(x, y); - index++; - } - const regex = /([+-]?\d*\.?\d+(?:e[+-]?\d+)?)(?:,|\s)([+-]?\d*\.?\d+(?:e[+-]?\d+)?)/g; - const path = new ShapePath(); - let index = 0; - node.getAttribute("points").replace(regex, iterator); - path.currentPath.autoClose = true; - return path; - } - function parsePolylineNode(node) { - function iterator(match, a, b) { - const x = parseFloatWithUnits(a); - const y = parseFloatWithUnits(b); - if (index === 0) path.moveTo(x, y); - else path.lineTo(x, y); - index++; - } - const regex = /([+-]?\d*\.?\d+(?:e[+-]?\d+)?)(?:,|\s)([+-]?\d*\.?\d+(?:e[+-]?\d+)?)/g; - const path = new ShapePath(); - let index = 0; - node.getAttribute("points").replace(regex, iterator); - path.currentPath.autoClose = false; - return path; - } - function parseCircleNode(node) { - const x = parseFloatWithUnits(node.getAttribute("cx") || 0); - const y = parseFloatWithUnits(node.getAttribute("cy") || 0); - const r = parseFloatWithUnits(node.getAttribute("r") || 0); - const subpath = new Path(); - subpath.absarc(x, y, r, 0, Math.PI * 2); - const path = new ShapePath(); - path.subPaths.push(subpath); - return path; - } - function parseEllipseNode(node) { - const x = parseFloatWithUnits(node.getAttribute("cx") || 0); - const y = parseFloatWithUnits(node.getAttribute("cy") || 0); - const rx = parseFloatWithUnits(node.getAttribute("rx") || 0); - const ry = parseFloatWithUnits(node.getAttribute("ry") || 0); - const subpath = new Path(); - subpath.absellipse(x, y, rx, ry, 0, Math.PI * 2); - const path = new ShapePath(); - path.subPaths.push(subpath); - return path; - } - function parseLineNode(node) { - const x1 = parseFloatWithUnits(node.getAttribute("x1") || 0); - const y1 = parseFloatWithUnits(node.getAttribute("y1") || 0); - const x2 = parseFloatWithUnits(node.getAttribute("x2") || 0); - const y2 = parseFloatWithUnits(node.getAttribute("y2") || 0); - const path = new ShapePath(); - path.moveTo(x1, y1); - path.lineTo(x2, y2); - path.currentPath.autoClose = false; - return path; - } - function parseStyle(node, style) { - style = Object.assign({}, style); - let stylesheetStyles = {}; - if (node.hasAttribute("class")) { - const classSelectors = node.getAttribute("class").split(/\s/).filter(Boolean).map((i) => i.trim()); - for (let i = 0; i < classSelectors.length; i++) stylesheetStyles = Object.assign(stylesheetStyles, stylesheets["." + classSelectors[i]]); - } - if (node.hasAttribute("id")) stylesheetStyles = Object.assign(stylesheetStyles, stylesheets["#" + node.getAttribute("id")]); - function addStyle(svgName, jsName, adjustFunction) { - if (adjustFunction === void 0) adjustFunction = function copy(v) { - if (v.startsWith("url")) console.warn("SVGLoader: url access in attributes is not implemented."); - return v; - }; - if (node.hasAttribute(svgName)) style[jsName] = adjustFunction(node.getAttribute(svgName)); - if (stylesheetStyles[svgName]) style[jsName] = adjustFunction(stylesheetStyles[svgName]); - if (node.style && node.style[svgName] !== "") style[jsName] = adjustFunction(node.style[svgName]); - } - function clamp(v) { - return Math.max(0, Math.min(1, parseFloatWithUnits(v))); - } - function positive(v) { - return Math.max(0, parseFloatWithUnits(v)); - } - addStyle("fill", "fill"); - addStyle("fill-opacity", "fillOpacity", clamp); - addStyle("fill-rule", "fillRule"); - addStyle("opacity", "opacity", clamp); - addStyle("stroke", "stroke"); - addStyle("stroke-opacity", "strokeOpacity", clamp); - addStyle("stroke-width", "strokeWidth", positive); - addStyle("stroke-linejoin", "strokeLineJoin"); - addStyle("stroke-linecap", "strokeLineCap"); - addStyle("stroke-miterlimit", "strokeMiterLimit", positive); - addStyle("visibility", "visibility"); - return style; - } - function getReflection(a, b) { - return a - (b - a); - } - function parseFloats(input, flags, stride) { - if (typeof input !== "string") throw new TypeError("Invalid input: " + typeof input); - const RE = { - SEPARATOR: /[ \t\r\n\,.\-+]/, - WHITESPACE: /[ \t\r\n]/, - DIGIT: /[\d]/, - SIGN: /[-+]/, - POINT: /\./, - COMMA: /,/, - EXP: /e/i, - FLAGS: /[01]/ - }; - const SEP = 0; - const INT = 1; - const FLOAT = 2; - const EXP = 3; - let state = SEP; - let seenComma = true; - let number = "", exponent = ""; - const result = []; - function throwSyntaxError(current2, i, partial) { - const error = /* @__PURE__ */ new SyntaxError("Unexpected character \"" + current2 + "\" at index " + i + "."); - error.partial = partial; - throw error; - } - function newNumber() { - if (number !== "") if (exponent === "") result.push(Number(number)); - else result.push(Number(number) * Math.pow(10, Number(exponent))); - number = ""; - exponent = ""; - } - let current; - const length = input.length; - for (let i = 0; i < length; i++) { - current = input[i]; - if (Array.isArray(flags) && flags.includes(result.length % stride) && RE.FLAGS.test(current)) { - state = INT; - number = current; - newNumber(); - continue; - } - if (state === SEP) { - if (RE.WHITESPACE.test(current)) continue; - if (RE.DIGIT.test(current) || RE.SIGN.test(current)) { - state = INT; - number = current; - continue; - } - if (RE.POINT.test(current)) { - state = FLOAT; - number = current; - continue; - } - if (RE.COMMA.test(current)) { - if (seenComma) throwSyntaxError(current, i, result); - seenComma = true; - } - } - if (state === INT) { - if (RE.DIGIT.test(current)) { - number += current; - continue; - } - if (RE.POINT.test(current)) { - number += current; - state = FLOAT; - continue; - } - if (RE.EXP.test(current)) { - state = EXP; - continue; - } - if (RE.SIGN.test(current) && number.length === 1 && RE.SIGN.test(number[0])) throwSyntaxError(current, i, result); - } - if (state === FLOAT) { - if (RE.DIGIT.test(current)) { - number += current; - continue; - } - if (RE.EXP.test(current)) { - state = EXP; - continue; - } - if (RE.POINT.test(current) && number[number.length - 1] === ".") throwSyntaxError(current, i, result); - } - if (state === EXP) { - if (RE.DIGIT.test(current)) { - exponent += current; - continue; - } - if (RE.SIGN.test(current)) { - if (exponent === "") { - exponent += current; - continue; - } - if (exponent.length === 1 && RE.SIGN.test(exponent)) throwSyntaxError(current, i, result); - } - } - if (RE.WHITESPACE.test(current)) { - newNumber(); - state = SEP; - seenComma = false; - } else if (RE.COMMA.test(current)) { - newNumber(); - state = SEP; - seenComma = true; - } else if (RE.SIGN.test(current)) { - newNumber(); - state = INT; - number = current; - } else if (RE.POINT.test(current)) { - newNumber(); - state = FLOAT; - number = current; - } else throwSyntaxError(current, i, result); - } - newNumber(); - return result; - } - const units = [ - "mm", - "cm", - "in", - "pt", - "pc", - "px" - ]; - const unitConversion = { - mm: { - mm: 1, - cm: .1, - in: 1 / 25.4, - pt: 72 / 25.4, - pc: 6 / 25.4, - px: -1 - }, - cm: { - mm: 10, - cm: 1, - in: 1 / 2.54, - pt: 72 / 2.54, - pc: 6 / 2.54, - px: -1 - }, - in: { - mm: 25.4, - cm: 2.54, - in: 1, - pt: 72, - pc: 6, - px: -1 - }, - pt: { - mm: 25.4 / 72, - cm: 2.54 / 72, - in: 1 / 72, - pt: 1, - pc: 6 / 72, - px: -1 - }, - pc: { - mm: 25.4 / 6, - cm: 2.54 / 6, - in: 1 / 6, - pt: 72 / 6, - pc: 1, - px: -1 - }, - px: { px: 1 } - }; - function parseFloatWithUnits(string) { - let theUnit = "px"; - if (typeof string === "string" || string instanceof String) for (let i = 0, n = units.length; i < n; i++) { - const u = units[i]; - if (string.endsWith(u)) { - theUnit = u; - string = string.substring(0, string.length - u.length); - break; - } - } - let scale = void 0; - if (theUnit === "px" && scope.defaultUnit !== "px") scale = unitConversion["in"][scope.defaultUnit] / scope.defaultDPI; - else { - scale = unitConversion[theUnit][scope.defaultUnit]; - if (scale < 0) scale = unitConversion[theUnit]["in"] * scope.defaultDPI; - } - return scale * parseFloat(string); - } - function getNodeTransform(node) { - if (!(node.hasAttribute("transform") || node.nodeName === "use" && (node.hasAttribute("x") || node.hasAttribute("y")))) return null; - const transform = parseNodeTransform(node); - if (transformStack.length > 0) transform.premultiply(transformStack[transformStack.length - 1]); - currentTransform.copy(transform); - transformStack.push(transform); - return transform; - } - function parseNodeTransform(node) { - const transform = new Matrix3(); - const currentTransform2 = tempTransform0; - if (node.nodeName === "use" && (node.hasAttribute("x") || node.hasAttribute("y"))) { - const tx = parseFloatWithUnits(node.getAttribute("x")); - const ty = parseFloatWithUnits(node.getAttribute("y")); - transform.translate(tx, ty); - } - if (node.hasAttribute("transform")) { - const transformsTexts = node.getAttribute("transform").split(")"); - for (let tIndex = transformsTexts.length - 1; tIndex >= 0; tIndex--) { - const transformText = transformsTexts[tIndex].trim(); - if (transformText === "") continue; - const openParPos = transformText.indexOf("("); - const closeParPos = transformText.length; - if (openParPos > 0 && openParPos < closeParPos) { - const transformType = transformText.slice(0, openParPos); - const array = parseFloats(transformText.slice(openParPos + 1)); - currentTransform2.identity(); - switch (transformType) { - case "translate": - if (array.length >= 1) { - const tx = array[0]; - let ty = 0; - if (array.length >= 2) ty = array[1]; - currentTransform2.translate(tx, ty); - } - break; - case "rotate": - if (array.length >= 1) { - let angle = 0; - let cx = 0; - let cy = 0; - angle = array[0] * Math.PI / 180; - if (array.length >= 3) { - cx = array[1]; - cy = array[2]; - } - tempTransform1.makeTranslation(-cx, -cy); - tempTransform2.makeRotation(angle); - tempTransform3.multiplyMatrices(tempTransform2, tempTransform1); - tempTransform1.makeTranslation(cx, cy); - currentTransform2.multiplyMatrices(tempTransform1, tempTransform3); - } - break; - case "scale": - if (array.length >= 1) { - const scaleX = array[0]; - let scaleY = scaleX; - if (array.length >= 2) scaleY = array[1]; - currentTransform2.scale(scaleX, scaleY); - } - break; - case "skewX": - if (array.length === 1) currentTransform2.set(1, Math.tan(array[0] * Math.PI / 180), 0, 0, 1, 0, 0, 0, 1); - break; - case "skewY": - if (array.length === 1) currentTransform2.set(1, 0, 0, Math.tan(array[0] * Math.PI / 180), 1, 0, 0, 0, 1); - break; - case "matrix": - if (array.length === 6) currentTransform2.set(array[0], array[2], array[4], array[1], array[3], array[5], 0, 0, 1); - break; - } - } - transform.premultiply(currentTransform2); - } - } - return transform; - } - function transformPath(path, m) { - function transfVec2(v2) { - tempV3.set(v2.x, v2.y, 1).applyMatrix3(m); - v2.set(tempV3.x, tempV3.y); - } - function transfEllipseGeneric(curve) { - const a = curve.xRadius; - const b = curve.yRadius; - const cosTheta = Math.cos(curve.aRotation); - const sinTheta = Math.sin(curve.aRotation); - const v1 = new Vector3(a * cosTheta, a * sinTheta, 0); - const v2 = new Vector3(-b * sinTheta, b * cosTheta, 0); - const f1 = v1.applyMatrix3(m); - const f2 = v2.applyMatrix3(m); - const mF = tempTransform0.set(f1.x, f2.x, 0, f1.y, f2.y, 0, 0, 0, 1); - const mFInv = tempTransform1.copy(mF).invert(); - const mQe = tempTransform2.copy(mFInv).transpose().multiply(mFInv).elements; - const ed = eigenDecomposition(mQe[0], mQe[1], mQe[4]); - const rt1sqrt = Math.sqrt(ed.rt1); - const rt2sqrt = Math.sqrt(ed.rt2); - curve.xRadius = 1 / rt1sqrt; - curve.yRadius = 1 / rt2sqrt; - curve.aRotation = Math.atan2(ed.sn, ed.cs); - if (!((curve.aEndAngle - curve.aStartAngle) % (2 * Math.PI) < Number.EPSILON)) { - const mDsqrt = tempTransform1.set(rt1sqrt, 0, 0, 0, rt2sqrt, 0, 0, 0, 1); - const mRT = tempTransform2.set(ed.cs, ed.sn, 0, -ed.sn, ed.cs, 0, 0, 0, 1); - const mDRF = mDsqrt.multiply(mRT).multiply(mF); - const transformAngle = (phi) => { - const { x: cosR, y: sinR } = new Vector3(Math.cos(phi), Math.sin(phi), 0).applyMatrix3(mDRF); - return Math.atan2(sinR, cosR); - }; - curve.aStartAngle = transformAngle(curve.aStartAngle); - curve.aEndAngle = transformAngle(curve.aEndAngle); - if (isTransformFlipped(m)) curve.aClockwise = !curve.aClockwise; - } - } - function transfEllipseNoSkew(curve) { - const sx = getTransformScaleX(m); - const sy = getTransformScaleY(m); - curve.xRadius *= sx; - curve.yRadius *= sy; - const theta = sx > Number.EPSILON ? Math.atan2(m.elements[1], m.elements[0]) : Math.atan2(-m.elements[3], m.elements[4]); - curve.aRotation += theta; - if (isTransformFlipped(m)) { - curve.aStartAngle *= -1; - curve.aEndAngle *= -1; - curve.aClockwise = !curve.aClockwise; - } - } - const subPaths = path.subPaths; - for (let i = 0, n = subPaths.length; i < n; i++) { - const curves = subPaths[i].curves; - for (let j = 0; j < curves.length; j++) { - const curve = curves[j]; - if (curve.isLineCurve) { - transfVec2(curve.v1); - transfVec2(curve.v2); - } else if (curve.isCubicBezierCurve) { - transfVec2(curve.v0); - transfVec2(curve.v1); - transfVec2(curve.v2); - transfVec2(curve.v3); - } else if (curve.isQuadraticBezierCurve) { - transfVec2(curve.v0); - transfVec2(curve.v1); - transfVec2(curve.v2); - } else if (curve.isEllipseCurve) { - tempV2.set(curve.aX, curve.aY); - transfVec2(tempV2); - curve.aX = tempV2.x; - curve.aY = tempV2.y; - if (isTransformSkewed(m)) transfEllipseGeneric(curve); - else transfEllipseNoSkew(curve); - } - } - } - } - function isTransformFlipped(m) { - const te = m.elements; - return te[0] * te[4] - te[1] * te[3] < 0; - } - function isTransformSkewed(m) { - const te = m.elements; - const basisDot = te[0] * te[3] + te[1] * te[4]; - if (basisDot === 0) return false; - const sx = getTransformScaleX(m); - const sy = getTransformScaleY(m); - return Math.abs(basisDot / (sx * sy)) > Number.EPSILON; - } - function getTransformScaleX(m) { - const te = m.elements; - return Math.sqrt(te[0] * te[0] + te[1] * te[1]); - } - function getTransformScaleY(m) { - const te = m.elements; - return Math.sqrt(te[3] * te[3] + te[4] * te[4]); - } - function eigenDecomposition(A, B, C) { - let rt1, rt2, cs, sn, t; - const sm = A + C; - const df = A - C; - const rt = Math.sqrt(df * df + 4 * B * B); - if (sm > 0) { - rt1 = .5 * (sm + rt); - t = 1 / rt1; - rt2 = A * t * C - B * t * B; - } else if (sm < 0) rt2 = .5 * (sm - rt); - else { - rt1 = .5 * rt; - rt2 = -.5 * rt; - } - if (df > 0) cs = df + rt; - else cs = df - rt; - if (Math.abs(cs) > 2 * Math.abs(B)) { - t = -2 * B / cs; - sn = 1 / Math.sqrt(1 + t * t); - cs = t * sn; - } else if (Math.abs(B) === 0) { - cs = 1; - sn = 0; - } else { - t = -.5 * cs / B; - cs = 1 / Math.sqrt(1 + t * t); - sn = t * cs; - } - if (df > 0) { - t = cs; - cs = -sn; - sn = t; - } - return { - rt1, - rt2, - cs, - sn - }; - } - const paths = []; - const stylesheets = {}; - const transformStack = []; - const tempTransform0 = new Matrix3(); - const tempTransform1 = new Matrix3(); - const tempTransform2 = new Matrix3(); - const tempTransform3 = new Matrix3(); - const tempV2 = new Vector2(); - const tempV3 = new Vector3(); - const currentTransform = new Matrix3(); - const xml = new DOMParser().parseFromString(text, "image/svg+xml"); - parseNode(xml.documentElement, { - fill: "#000", - fillOpacity: 1, - strokeOpacity: 1, - strokeWidth: 1, - strokeLineJoin: "miter", - strokeLineCap: "butt", - strokeMiterLimit: 4 - }); - return { - paths, - xml: xml.documentElement - }; - } - static createShapes(shapePath) { - const BIGNUMBER = 999999999; - const IntersectionLocationType = { - ORIGIN: 0, - DESTINATION: 1, - BETWEEN: 2, - LEFT: 3, - RIGHT: 4, - BEHIND: 5, - BEYOND: 6 - }; - const classifyResult = { - loc: IntersectionLocationType.ORIGIN, - t: 0 - }; - function findEdgeIntersection(a0, a1, b0, b1) { - const x1 = a0.x; - const x2 = a1.x; - const x3 = b0.x; - const x4 = b1.x; - const y1 = a0.y; - const y2 = a1.y; - const y3 = b0.y; - const y4 = b1.y; - const nom1 = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3); - const nom2 = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3); - const denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1); - const t1 = nom1 / denom; - const t2 = nom2 / denom; - if (denom === 0 && nom1 !== 0 || t1 <= 0 || t1 >= 1 || t2 < 0 || t2 > 1) return null; - else if (nom1 === 0 && denom === 0) { - for (let i = 0; i < 2; i++) { - classifyPoint(i === 0 ? b0 : b1, a0, a1); - if (classifyResult.loc == IntersectionLocationType.ORIGIN) { - const point = i === 0 ? b0 : b1; - return { - x: point.x, - y: point.y, - t: classifyResult.t - }; - } else if (classifyResult.loc == IntersectionLocationType.BETWEEN) return { - x: +(x1 + classifyResult.t * (x2 - x1)).toPrecision(10), - y: +(y1 + classifyResult.t * (y2 - y1)).toPrecision(10), - t: classifyResult.t - }; - } - return null; - } else { - for (let i = 0; i < 2; i++) { - classifyPoint(i === 0 ? b0 : b1, a0, a1); - if (classifyResult.loc == IntersectionLocationType.ORIGIN) { - const point = i === 0 ? b0 : b1; - return { - x: point.x, - y: point.y, - t: classifyResult.t - }; - } - } - return { - x: +(x1 + t1 * (x2 - x1)).toPrecision(10), - y: +(y1 + t1 * (y2 - y1)).toPrecision(10), - t: t1 - }; - } - } - function classifyPoint(p, edgeStart, edgeEnd) { - const ax = edgeEnd.x - edgeStart.x; - const ay = edgeEnd.y - edgeStart.y; - const bx = p.x - edgeStart.x; - const by = p.y - edgeStart.y; - const sa = ax * by - bx * ay; - if (p.x === edgeStart.x && p.y === edgeStart.y) { - classifyResult.loc = IntersectionLocationType.ORIGIN; - classifyResult.t = 0; - return; - } - if (p.x === edgeEnd.x && p.y === edgeEnd.y) { - classifyResult.loc = IntersectionLocationType.DESTINATION; - classifyResult.t = 1; - return; - } - if (sa < -Number.EPSILON) { - classifyResult.loc = IntersectionLocationType.LEFT; - return; - } - if (sa > Number.EPSILON) { - classifyResult.loc = IntersectionLocationType.RIGHT; - return; - } - if (ax * bx < 0 || ay * by < 0) { - classifyResult.loc = IntersectionLocationType.BEHIND; - return; - } - if (Math.sqrt(ax * ax + ay * ay) < Math.sqrt(bx * bx + by * by)) { - classifyResult.loc = IntersectionLocationType.BEYOND; - return; - } - let t; - if (ax !== 0) t = bx / ax; - else t = by / ay; - classifyResult.loc = IntersectionLocationType.BETWEEN; - classifyResult.t = t; - } - function getIntersections(path1, path2) { - const intersectionsRaw = []; - const intersections = []; - for (let index = 1; index < path1.length; index++) { - const path1EdgeStart = path1[index - 1]; - const path1EdgeEnd = path1[index]; - for (let index2 = 1; index2 < path2.length; index2++) { - const path2EdgeStart = path2[index2 - 1]; - const path2EdgeEnd = path2[index2]; - const intersection = findEdgeIntersection(path1EdgeStart, path1EdgeEnd, path2EdgeStart, path2EdgeEnd); - if (intersection !== null && intersectionsRaw.find((i) => i.t <= intersection.t + Number.EPSILON && i.t >= intersection.t - Number.EPSILON) === void 0) { - intersectionsRaw.push(intersection); - intersections.push(new Vector2(intersection.x, intersection.y)); - } - } - } - return intersections; - } - function getScanlineIntersections(scanline, boundingBox, paths) { - const center = new Vector2(); - boundingBox.getCenter(center); - const allIntersections = []; - paths.forEach((path) => { - if (path.boundingBox.containsPoint(center)) getIntersections(scanline, path.points).forEach((p) => { - allIntersections.push({ - identifier: path.identifier, - isCW: path.isCW, - point: p - }); - }); - }); - allIntersections.sort((i1, i2) => { - return i1.point.x - i2.point.x; - }); - return allIntersections; - } - function isHoleTo(simplePath, allPaths, scanlineMinX2, scanlineMaxX2, _fillRule) { - if (_fillRule === null || _fillRule === void 0 || _fillRule === "") _fillRule = "nonzero"; - const centerBoundingBox = new Vector2(); - simplePath.boundingBox.getCenter(centerBoundingBox); - const scanlineIntersections = getScanlineIntersections([new Vector2(scanlineMinX2, centerBoundingBox.y), new Vector2(scanlineMaxX2, centerBoundingBox.y)], simplePath.boundingBox, allPaths); - scanlineIntersections.sort((i1, i2) => { - return i1.point.x - i2.point.x; - }); - const baseIntersections = []; - const otherIntersections = []; - scanlineIntersections.forEach((i2) => { - if (i2.identifier === simplePath.identifier) baseIntersections.push(i2); - else otherIntersections.push(i2); - }); - const firstXOfPath = baseIntersections[0].point.x; - const stack = []; - let i = 0; - while (i < otherIntersections.length && otherIntersections[i].point.x < firstXOfPath) { - if (stack.length > 0 && stack[stack.length - 1] === otherIntersections[i].identifier) stack.pop(); - else stack.push(otherIntersections[i].identifier); - i++; - } - stack.push(simplePath.identifier); - if (_fillRule === "evenodd") { - const isHole = stack.length % 2 === 0 ? true : false; - const isHoleFor = stack[stack.length - 2]; - return { - identifier: simplePath.identifier, - isHole, - for: isHoleFor - }; - } else if (_fillRule === "nonzero") { - let isHole = true; - let isHoleFor = null; - let lastCWValue = null; - for (let i2 = 0; i2 < stack.length; i2++) { - const identifier = stack[i2]; - if (isHole) { - lastCWValue = allPaths[identifier].isCW; - isHole = false; - isHoleFor = identifier; - } else if (lastCWValue !== allPaths[identifier].isCW) { - lastCWValue = allPaths[identifier].isCW; - isHole = true; - } - } - return { - identifier: simplePath.identifier, - isHole, - for: isHoleFor - }; - } else console.warn("fill-rule: \"" + _fillRule + "\" is currently not implemented."); - } - let scanlineMinX = BIGNUMBER; - let scanlineMaxX = -999999999; - let simplePaths = shapePath.subPaths.map((p) => { - const points = p.getPoints(); - let maxY = -999999999; - let minY = BIGNUMBER; - let maxX = -999999999; - let minX = BIGNUMBER; - for (let i = 0; i < points.length; i++) { - const p2 = points[i]; - if (p2.y > maxY) maxY = p2.y; - if (p2.y < minY) minY = p2.y; - if (p2.x > maxX) maxX = p2.x; - if (p2.x < minX) minX = p2.x; - } - if (scanlineMaxX <= maxX) scanlineMaxX = maxX + 1; - if (scanlineMinX >= minX) scanlineMinX = minX - 1; - return { - curves: p.curves, - points, - isCW: ShapeUtils.isClockWise(points), - identifier: -1, - boundingBox: new Box2(new Vector2(minX, minY), new Vector2(maxX, maxY)) - }; - }); - simplePaths = simplePaths.filter((sp) => sp.points.length > 1); - for (let identifier = 0; identifier < simplePaths.length; identifier++) simplePaths[identifier].identifier = identifier; - const isAHole = simplePaths.map((p) => isHoleTo(p, simplePaths, scanlineMinX, scanlineMaxX, shapePath.userData ? shapePath.userData.style.fillRule : void 0)); - const shapesToReturn = []; - simplePaths.forEach((p) => { - if (!isAHole[p.identifier].isHole) { - const shape = new Shape(); - shape.curves = p.curves; - isAHole.filter((h) => h.isHole && h.for === p.identifier).forEach((h) => { - const hole = simplePaths[h.identifier]; - const path = new Path(); - path.curves = hole.curves; - shape.holes.push(path); - }); - shapesToReturn.push(shape); - } - }); - return shapesToReturn; - } - static getStrokeStyle(width, color, lineJoin, lineCap, miterLimit) { - width = width !== void 0 ? width : 1; - color = color !== void 0 ? color : "#000"; - lineJoin = lineJoin !== void 0 ? lineJoin : "miter"; - lineCap = lineCap !== void 0 ? lineCap : "butt"; - miterLimit = miterLimit !== void 0 ? miterLimit : 4; - return { - strokeColor: color, - strokeWidth: width, - strokeLineJoin: lineJoin, - strokeLineCap: lineCap, - strokeMiterLimit: miterLimit - }; - } - static pointsToStroke(points, style, arcDivisions, minDistance) { - const vertices = []; - const normals = []; - const uvs = []; - if (SVGLoader2.pointsToStrokeWithBuffers(points, style, arcDivisions, minDistance, vertices, normals, uvs) === 0) return null; - const geometry = new BufferGeometry(); - geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - geometry.setAttribute("normal", new Float32BufferAttribute(normals, 3)); - geometry.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); - return geometry; - } - static pointsToStrokeWithBuffers(points, style, arcDivisions, minDistance, vertices, normals, uvs, vertexOffset) { - const tempV2_1 = new Vector2(); - const tempV2_2 = new Vector2(); - const tempV2_3 = new Vector2(); - const tempV2_4 = new Vector2(); - const tempV2_5 = new Vector2(); - const tempV2_6 = new Vector2(); - const tempV2_7 = new Vector2(); - const lastPointL = new Vector2(); - const lastPointR = new Vector2(); - const point0L = new Vector2(); - const point0R = new Vector2(); - const currentPointL = new Vector2(); - const currentPointR = new Vector2(); - const nextPointL = new Vector2(); - const nextPointR = new Vector2(); - const innerPoint = new Vector2(); - const outerPoint = new Vector2(); - arcDivisions = arcDivisions !== void 0 ? arcDivisions : 12; - minDistance = minDistance !== void 0 ? minDistance : .001; - vertexOffset = vertexOffset !== void 0 ? vertexOffset : 0; - points = removeDuplicatedPoints(points); - const numPoints = points.length; - if (numPoints < 2) return 0; - const isClosed = points[0].equals(points[numPoints - 1]); - let currentPoint; - let previousPoint = points[0]; - let nextPoint; - const strokeWidth2 = style.strokeWidth / 2; - const deltaU = 1 / (numPoints - 1); - let u0 = 0, u1; - let innerSideModified; - let joinIsOnLeftSide; - let isMiter; - let initialJoinIsOnLeftSide = false; - let numVertices = 0; - let currentCoordinate = vertexOffset * 3; - let currentCoordinateUV = vertexOffset * 2; - getNormal(points[0], points[1], tempV2_1).multiplyScalar(strokeWidth2); - lastPointL.copy(points[0]).sub(tempV2_1); - lastPointR.copy(points[0]).add(tempV2_1); - point0L.copy(lastPointL); - point0R.copy(lastPointR); - for (let iPoint = 1; iPoint < numPoints; iPoint++) { - currentPoint = points[iPoint]; - if (iPoint === numPoints - 1) if (isClosed) nextPoint = points[1]; - else nextPoint = void 0; - else nextPoint = points[iPoint + 1]; - const normal1 = tempV2_1; - getNormal(previousPoint, currentPoint, normal1); - tempV2_3.copy(normal1).multiplyScalar(strokeWidth2); - currentPointL.copy(currentPoint).sub(tempV2_3); - currentPointR.copy(currentPoint).add(tempV2_3); - u1 = u0 + deltaU; - innerSideModified = false; - if (nextPoint !== void 0) { - getNormal(currentPoint, nextPoint, tempV2_2); - tempV2_3.copy(tempV2_2).multiplyScalar(strokeWidth2); - nextPointL.copy(currentPoint).sub(tempV2_3); - nextPointR.copy(currentPoint).add(tempV2_3); - joinIsOnLeftSide = true; - tempV2_3.subVectors(nextPoint, previousPoint); - if (normal1.dot(tempV2_3) < 0) joinIsOnLeftSide = false; - if (iPoint === 1) initialJoinIsOnLeftSide = joinIsOnLeftSide; - tempV2_3.subVectors(nextPoint, currentPoint); - tempV2_3.normalize(); - const dot = Math.abs(normal1.dot(tempV2_3)); - if (dot > Number.EPSILON) { - const miterSide = strokeWidth2 / dot; - tempV2_3.multiplyScalar(-miterSide); - tempV2_4.subVectors(currentPoint, previousPoint); - tempV2_5.copy(tempV2_4).setLength(miterSide).add(tempV2_3); - innerPoint.copy(tempV2_5).negate(); - const miterLength2 = tempV2_5.length(); - const segmentLengthPrev = tempV2_4.length(); - tempV2_4.divideScalar(segmentLengthPrev); - tempV2_6.subVectors(nextPoint, currentPoint); - const segmentLengthNext = tempV2_6.length(); - tempV2_6.divideScalar(segmentLengthNext); - if (tempV2_4.dot(innerPoint) < segmentLengthPrev && tempV2_6.dot(innerPoint) < segmentLengthNext) innerSideModified = true; - outerPoint.copy(tempV2_5).add(currentPoint); - innerPoint.add(currentPoint); - isMiter = false; - if (innerSideModified) if (joinIsOnLeftSide) { - nextPointR.copy(innerPoint); - currentPointR.copy(innerPoint); - } else { - nextPointL.copy(innerPoint); - currentPointL.copy(innerPoint); - } - else makeSegmentTriangles(); - switch (style.strokeLineJoin) { - case "bevel": - makeSegmentWithBevelJoin(joinIsOnLeftSide, innerSideModified, u1); - break; - case "round": - createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide, innerSideModified); - if (joinIsOnLeftSide) makeCircularSector(currentPoint, currentPointL, nextPointL, u1, 0); - else makeCircularSector(currentPoint, nextPointR, currentPointR, u1, 1); - break; - default: - const miterFraction = strokeWidth2 * style.strokeMiterLimit / miterLength2; - if (miterFraction < 1) if (style.strokeLineJoin !== "miter-clip") { - makeSegmentWithBevelJoin(joinIsOnLeftSide, innerSideModified, u1); - break; - } else { - createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide, innerSideModified); - if (joinIsOnLeftSide) { - tempV2_6.subVectors(outerPoint, currentPointL).multiplyScalar(miterFraction).add(currentPointL); - tempV2_7.subVectors(outerPoint, nextPointL).multiplyScalar(miterFraction).add(nextPointL); - addVertex(currentPointL, u1, 0); - addVertex(tempV2_6, u1, 0); - addVertex(currentPoint, u1, .5); - addVertex(currentPoint, u1, .5); - addVertex(tempV2_6, u1, 0); - addVertex(tempV2_7, u1, 0); - addVertex(currentPoint, u1, .5); - addVertex(tempV2_7, u1, 0); - addVertex(nextPointL, u1, 0); - } else { - tempV2_6.subVectors(outerPoint, currentPointR).multiplyScalar(miterFraction).add(currentPointR); - tempV2_7.subVectors(outerPoint, nextPointR).multiplyScalar(miterFraction).add(nextPointR); - addVertex(currentPointR, u1, 1); - addVertex(tempV2_6, u1, 1); - addVertex(currentPoint, u1, .5); - addVertex(currentPoint, u1, .5); - addVertex(tempV2_6, u1, 1); - addVertex(tempV2_7, u1, 1); - addVertex(currentPoint, u1, .5); - addVertex(tempV2_7, u1, 1); - addVertex(nextPointR, u1, 1); - } - } - else { - if (innerSideModified) { - if (joinIsOnLeftSide) { - addVertex(lastPointR, u0, 1); - addVertex(lastPointL, u0, 0); - addVertex(outerPoint, u1, 0); - addVertex(lastPointR, u0, 1); - addVertex(outerPoint, u1, 0); - addVertex(innerPoint, u1, 1); - } else { - addVertex(lastPointR, u0, 1); - addVertex(lastPointL, u0, 0); - addVertex(outerPoint, u1, 1); - addVertex(lastPointL, u0, 0); - addVertex(innerPoint, u1, 0); - addVertex(outerPoint, u1, 1); - } - if (joinIsOnLeftSide) nextPointL.copy(outerPoint); - else nextPointR.copy(outerPoint); - } else if (joinIsOnLeftSide) { - addVertex(currentPointL, u1, 0); - addVertex(outerPoint, u1, 0); - addVertex(currentPoint, u1, .5); - addVertex(currentPoint, u1, .5); - addVertex(outerPoint, u1, 0); - addVertex(nextPointL, u1, 0); - } else { - addVertex(currentPointR, u1, 1); - addVertex(outerPoint, u1, 1); - addVertex(currentPoint, u1, .5); - addVertex(currentPoint, u1, .5); - addVertex(outerPoint, u1, 1); - addVertex(nextPointR, u1, 1); - } - isMiter = true; - } - break; - } - } else makeSegmentTriangles(); - } else makeSegmentTriangles(); - if (!isClosed && iPoint === numPoints - 1) addCapGeometry(points[0], point0L, point0R, joinIsOnLeftSide, true, u0); - u0 = u1; - previousPoint = currentPoint; - lastPointL.copy(nextPointL); - lastPointR.copy(nextPointR); - } - if (!isClosed) addCapGeometry(currentPoint, currentPointL, currentPointR, joinIsOnLeftSide, false, u1); - else if (innerSideModified && vertices) { - let lastOuter = outerPoint; - let lastInner = innerPoint; - if (initialJoinIsOnLeftSide !== joinIsOnLeftSide) { - lastOuter = innerPoint; - lastInner = outerPoint; - } - if (joinIsOnLeftSide) { - if (isMiter || initialJoinIsOnLeftSide) { - lastInner.toArray(vertices, 0); - lastInner.toArray(vertices, 9); - if (isMiter) lastOuter.toArray(vertices, 3); - } - } else if (isMiter || !initialJoinIsOnLeftSide) { - lastInner.toArray(vertices, 3); - lastInner.toArray(vertices, 9); - if (isMiter) lastOuter.toArray(vertices, 0); - } - } - return numVertices; - function getNormal(p1, p2, result) { - result.subVectors(p2, p1); - return result.set(-result.y, result.x).normalize(); - } - function addVertex(position, u, v) { - if (vertices) { - vertices[currentCoordinate] = position.x; - vertices[currentCoordinate + 1] = position.y; - vertices[currentCoordinate + 2] = 0; - if (normals) { - normals[currentCoordinate] = 0; - normals[currentCoordinate + 1] = 0; - normals[currentCoordinate + 2] = 1; - } - currentCoordinate += 3; - if (uvs) { - uvs[currentCoordinateUV] = u; - uvs[currentCoordinateUV + 1] = v; - currentCoordinateUV += 2; - } - } - numVertices += 3; - } - function makeCircularSector(center, p1, p2, u, v) { - tempV2_1.copy(p1).sub(center).normalize(); - tempV2_2.copy(p2).sub(center).normalize(); - let angle = Math.PI; - const dot = tempV2_1.dot(tempV2_2); - if (Math.abs(dot) < 1) angle = Math.abs(Math.acos(dot)); - angle /= arcDivisions; - tempV2_3.copy(p1); - for (let i = 0, il = arcDivisions - 1; i < il; i++) { - tempV2_4.copy(tempV2_3).rotateAround(center, angle); - addVertex(tempV2_3, u, v); - addVertex(tempV2_4, u, v); - addVertex(center, u, .5); - tempV2_3.copy(tempV2_4); - } - addVertex(tempV2_4, u, v); - addVertex(p2, u, v); - addVertex(center, u, .5); - } - function makeSegmentTriangles() { - addVertex(lastPointR, u0, 1); - addVertex(lastPointL, u0, 0); - addVertex(currentPointL, u1, 0); - addVertex(lastPointR, u0, 1); - addVertex(currentPointL, u1, 0); - addVertex(currentPointR, u1, 1); - } - function makeSegmentWithBevelJoin(joinIsOnLeftSide2, innerSideModified2, u) { - if (innerSideModified2) if (joinIsOnLeftSide2) { - addVertex(lastPointR, u0, 1); - addVertex(lastPointL, u0, 0); - addVertex(currentPointL, u1, 0); - addVertex(lastPointR, u0, 1); - addVertex(currentPointL, u1, 0); - addVertex(innerPoint, u1, 1); - addVertex(currentPointL, u, 0); - addVertex(nextPointL, u, 0); - addVertex(innerPoint, u, .5); - } else { - addVertex(lastPointR, u0, 1); - addVertex(lastPointL, u0, 0); - addVertex(currentPointR, u1, 1); - addVertex(lastPointL, u0, 0); - addVertex(innerPoint, u1, 0); - addVertex(currentPointR, u1, 1); - addVertex(currentPointR, u, 1); - addVertex(innerPoint, u, 0); - addVertex(nextPointR, u, 1); - } - else if (joinIsOnLeftSide2) { - addVertex(currentPointL, u, 0); - addVertex(nextPointL, u, 0); - addVertex(currentPoint, u, .5); - } else { - addVertex(currentPointR, u, 1); - addVertex(nextPointR, u, 0); - addVertex(currentPoint, u, .5); - } - } - function createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide2, innerSideModified2) { - if (innerSideModified2) if (joinIsOnLeftSide2) { - addVertex(lastPointR, u0, 1); - addVertex(lastPointL, u0, 0); - addVertex(currentPointL, u1, 0); - addVertex(lastPointR, u0, 1); - addVertex(currentPointL, u1, 0); - addVertex(innerPoint, u1, 1); - addVertex(currentPointL, u0, 0); - addVertex(currentPoint, u1, .5); - addVertex(innerPoint, u1, 1); - addVertex(currentPoint, u1, .5); - addVertex(nextPointL, u0, 0); - addVertex(innerPoint, u1, 1); - } else { - addVertex(lastPointR, u0, 1); - addVertex(lastPointL, u0, 0); - addVertex(currentPointR, u1, 1); - addVertex(lastPointL, u0, 0); - addVertex(innerPoint, u1, 0); - addVertex(currentPointR, u1, 1); - addVertex(currentPointR, u0, 1); - addVertex(innerPoint, u1, 0); - addVertex(currentPoint, u1, .5); - addVertex(currentPoint, u1, .5); - addVertex(innerPoint, u1, 0); - addVertex(nextPointR, u0, 1); - } - } - function addCapGeometry(center, p1, p2, joinIsOnLeftSide2, start, u) { - switch (style.strokeLineCap) { - case "round": - if (start) makeCircularSector(center, p2, p1, u, .5); - else makeCircularSector(center, p1, p2, u, .5); - break; - case "square": - if (start) { - tempV2_1.subVectors(p1, center); - tempV2_2.set(tempV2_1.y, -tempV2_1.x); - tempV2_3.addVectors(tempV2_1, tempV2_2).add(center); - tempV2_4.subVectors(tempV2_2, tempV2_1).add(center); - if (joinIsOnLeftSide2) { - tempV2_3.toArray(vertices, 3); - tempV2_4.toArray(vertices, 0); - tempV2_4.toArray(vertices, 9); - } else { - tempV2_3.toArray(vertices, 3); - uvs[7] === 1 ? tempV2_4.toArray(vertices, 9) : tempV2_3.toArray(vertices, 9); - tempV2_4.toArray(vertices, 0); - } - } else { - tempV2_1.subVectors(p2, center); - tempV2_2.set(tempV2_1.y, -tempV2_1.x); - tempV2_3.addVectors(tempV2_1, tempV2_2).add(center); - tempV2_4.subVectors(tempV2_2, tempV2_1).add(center); - const vl = vertices.length; - if (joinIsOnLeftSide2) { - tempV2_3.toArray(vertices, vl - 3); - tempV2_4.toArray(vertices, vl - 6); - tempV2_4.toArray(vertices, vl - 12); - } else { - tempV2_4.toArray(vertices, vl - 6); - tempV2_3.toArray(vertices, vl - 3); - tempV2_4.toArray(vertices, vl - 12); - } - } - break; - } - } - function removeDuplicatedPoints(points2) { - let dupPoints = false; - for (let i = 1, n = points2.length - 1; i < n; i++) if (points2[i].distanceTo(points2[i + 1]) < minDistance) { - dupPoints = true; - break; - } - if (!dupPoints) return points2; - const newPoints = []; - newPoints.push(points2[0]); - for (let i = 1, n = points2.length - 1; i < n; i++) if (points2[i].distanceTo(points2[i + 1]) >= minDistance) newPoints.push(points2[i]); - newPoints.push(points2[points2.length - 1]); - return newPoints; - } - } - } - return SVGLoader2; -})(); -//#endregion -//#region node_modules/three-stdlib/loaders/3DMLoader.js -var _taskCache$1 = /* @__PURE__ */ new WeakMap(); -var Rhino3dmLoader = class extends Loader { - constructor(manager) { - super(manager); - this.libraryPath = ""; - this.libraryPending = null; - this.libraryBinary = null; - this.libraryConfig = {}; - this.url = ""; - this.workerLimit = 4; - this.workerPool = []; - this.workerNextTaskID = 1; - this.workerSourceURL = ""; - this.workerConfig = {}; - this.materials = []; - } - setLibraryPath(path) { - this.libraryPath = path; - return this; - } - setWorkerLimit(workerLimit) { - this.workerLimit = workerLimit; - return this; - } - load(url, onLoad, onProgress, onError) { - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setResponseType("arraybuffer"); - loader.setRequestHeader(this.requestHeader); - this.url = url; - loader.load(url, (buffer) => { - if (_taskCache$1.has(buffer)) return _taskCache$1.get(buffer).promise.then(onLoad).catch(onError); - this.decodeObjects(buffer, url).then(onLoad).catch(onError); - }, onProgress, onError); - } - debug() { - console.log("Task load: ", this.workerPool.map((worker) => worker._taskLoad)); - } - decodeObjects(buffer, url) { - let worker; - let taskID; - const taskCost = buffer.byteLength; - const objectPending = this._getWorker(taskCost).then((_worker) => { - worker = _worker; - taskID = this.workerNextTaskID++; - return new Promise((resolve, reject) => { - worker._callbacks[taskID] = { - resolve, - reject - }; - worker.postMessage({ - type: "decode", - id: taskID, - buffer - }, [buffer]); - }); - }).then((message) => this._createGeometry(message.data)); - objectPending.catch(() => true).then(() => { - if (worker && taskID) this._releaseTask(worker, taskID); - }); - _taskCache$1.set(buffer, { - url, - promise: objectPending - }); - return objectPending; - } - parse(data, onLoad, onError) { - this.decodeObjects(data, "").then(onLoad).catch(onError); - } - _compareMaterials(material) { - const mat = {}; - mat.name = material.name; - mat.color = {}; - mat.color.r = material.color.r; - mat.color.g = material.color.g; - mat.color.b = material.color.b; - mat.type = material.type; - for (let i = 0; i < this.materials.length; i++) { - const m = this.materials[i]; - const _mat = {}; - _mat.name = m.name; - _mat.color = {}; - _mat.color.r = m.color.r; - _mat.color.g = m.color.g; - _mat.color.b = m.color.b; - _mat.type = m.type; - if (JSON.stringify(mat) === JSON.stringify(_mat)) return m; - } - this.materials.push(material); - return material; - } - _createMaterial(material) { - if (material === void 0) return new MeshStandardMaterial({ - color: new Color(1, 1, 1), - metalness: .8, - name: "default", - side: 2 - }); - const _diffuseColor = material.diffuseColor; - const diffusecolor = new Color(_diffuseColor.r / 255, _diffuseColor.g / 255, _diffuseColor.b / 255); - if (_diffuseColor.r === 0 && _diffuseColor.g === 0 && _diffuseColor.b === 0) { - diffusecolor.r = 1; - diffusecolor.g = 1; - diffusecolor.b = 1; - } - const mat = new MeshStandardMaterial({ - color: diffusecolor, - name: material.name, - side: 2, - transparent: material.transparency > 0 ? true : false, - opacity: 1 - material.transparency - }); - const textureLoader = new TextureLoader(); - for (let i = 0; i < material.textures.length; i++) { - const texture = material.textures[i]; - if (texture.image !== null) { - const map = textureLoader.load(texture.image); - switch (texture.type) { - case "Diffuse": - mat.map = map; - break; - case "Bump": - mat.bumpMap = map; - break; - case "Transparency": - mat.alphaMap = map; - mat.transparent = true; - break; - case "Emap": - mat.envMap = map; - break; - } - } - } - return mat; - } - _createGeometry(data) { - const object = new Object3D(); - const instanceDefinitionObjects = []; - const instanceDefinitions = []; - const instanceReferences = []; - object.userData["layers"] = data.layers; - object.userData["groups"] = data.groups; - object.userData["settings"] = data.settings; - object.userData["objectType"] = "File3dm"; - object.userData["materials"] = null; - object.name = this.url; - let objects = data.objects; - const materials = data.materials; - for (let i = 0; i < objects.length; i++) { - const obj = objects[i]; - const attributes = obj.attributes; - switch (obj.objectType) { - case "InstanceDefinition": - instanceDefinitions.push(obj); - break; - case "InstanceReference": - instanceReferences.push(obj); - break; - default: - let _object; - if (attributes.materialIndex >= 0) { - const rMaterial = materials[attributes.materialIndex]; - let material = this._createMaterial(rMaterial); - material = this._compareMaterials(material); - _object = this._createObject(obj, material); - } else { - const material = this._createMaterial(); - _object = this._createObject(obj, material); - } - if (_object === void 0) continue; - const layer = data.layers[attributes.layerIndex]; - _object.visible = layer ? data.layers[attributes.layerIndex].visible : true; - if (attributes.isInstanceDefinitionObject) instanceDefinitionObjects.push(_object); - else object.add(_object); - break; - } - } - for (let i = 0; i < instanceDefinitions.length; i++) { - const iDef = instanceDefinitions[i]; - objects = []; - for (let j = 0; j < iDef.attributes.objectIds.length; j++) { - const objId = iDef.attributes.objectIds[j]; - for (let p = 0; p < instanceDefinitionObjects.length; p++) if (objId === instanceDefinitionObjects[p].userData.attributes.id) objects.push(instanceDefinitionObjects[p]); - } - for (let j = 0; j < instanceReferences.length; j++) { - const iRef = instanceReferences[j]; - if (iRef.geometry.parentIdefId === iDef.attributes.id) { - const iRefObject = new Object3D(); - const xf = iRef.geometry.xform.array; - const matrix = new Matrix4(); - matrix.set(xf[0], xf[1], xf[2], xf[3], xf[4], xf[5], xf[6], xf[7], xf[8], xf[9], xf[10], xf[11], xf[12], xf[13], xf[14], xf[15]); - iRefObject.applyMatrix4(matrix); - for (let p = 0; p < objects.length; p++) iRefObject.add(objects[p].clone(true)); - object.add(iRefObject); - } - } - } - object.userData["materials"] = this.materials; - return object; - } - _createObject(obj, mat) { - const loader = new BufferGeometryLoader(); - const attributes = obj.attributes; - let geometry, material, _color, color; - switch (obj.objectType) { - case "Point": - case "PointSet": - geometry = loader.parse(obj.geometry); - if (geometry.attributes.hasOwnProperty("color")) material = new PointsMaterial({ - vertexColors: true, - sizeAttenuation: false, - size: 2 - }); - else { - _color = attributes.drawColor; - color = new Color(_color.r / 255, _color.g / 255, _color.b / 255); - material = new PointsMaterial({ - color, - sizeAttenuation: false, - size: 2 - }); - } - material = this._compareMaterials(material); - const points = new Points(geometry, material); - points.userData["attributes"] = attributes; - points.userData["objectType"] = obj.objectType; - if (attributes.name) points.name = attributes.name; - return points; - case "Mesh": - case "Extrusion": - case "SubD": - case "Brep": - if (obj.geometry === null) return; - geometry = loader.parse(obj.geometry); - if (geometry.attributes.hasOwnProperty("color")) mat.vertexColors = true; - if (mat === null) { - mat = this._createMaterial(); - mat = this._compareMaterials(mat); - } - const mesh = new Mesh(geometry, mat); - mesh.castShadow = attributes.castsShadows; - mesh.receiveShadow = attributes.receivesShadows; - mesh.userData["attributes"] = attributes; - mesh.userData["objectType"] = obj.objectType; - if (attributes.name) mesh.name = attributes.name; - return mesh; - case "Curve": - geometry = loader.parse(obj.geometry); - _color = attributes.drawColor; - color = new Color(_color.r / 255, _color.g / 255, _color.b / 255); - material = new LineBasicMaterial({ color }); - material = this._compareMaterials(material); - const lines = new Line(geometry, material); - lines.userData["attributes"] = attributes; - lines.userData["objectType"] = obj.objectType; - if (attributes.name) lines.name = attributes.name; - return lines; - case "TextDot": - geometry = obj.geometry; - const ctx = document.createElement("canvas").getContext("2d"); - const font = `${geometry.fontHeight}px ${geometry.fontFace}`; - ctx.font = font; - const width = ctx.measureText(geometry.text).width + 10; - const height = geometry.fontHeight + 10; - const r = window.devicePixelRatio; - ctx.canvas.width = width * r; - ctx.canvas.height = height * r; - ctx.canvas.style.width = width + "px"; - ctx.canvas.style.height = height + "px"; - ctx.setTransform(r, 0, 0, r, 0, 0); - ctx.font = font; - ctx.textBaseline = "middle"; - ctx.textAlign = "center"; - color = attributes.drawColor; - ctx.fillStyle = `rgba(${color.r},${color.g},${color.b},${color.a})`; - ctx.fillRect(0, 0, width, height); - ctx.fillStyle = "white"; - ctx.fillText(geometry.text, width / 2, height / 2); - const texture = new CanvasTexture(ctx.canvas); - texture.minFilter = LinearFilter; - texture.wrapS = ClampToEdgeWrapping; - texture.wrapT = ClampToEdgeWrapping; - material = new SpriteMaterial({ - map: texture, - depthTest: false - }); - const sprite = new Sprite(material); - sprite.position.set(geometry.point[0], geometry.point[1], geometry.point[2]); - sprite.scale.set(width / 10, height / 10, 1); - sprite.userData["attributes"] = attributes; - sprite.userData["objectType"] = obj.objectType; - if (attributes.name) sprite.name = attributes.name; - return sprite; - case "Light": - geometry = obj.geometry; - let light; - if (geometry.isDirectionalLight) { - light = new DirectionalLight(); - light.castShadow = attributes.castsShadows; - light.position.set(geometry.location[0], geometry.location[1], geometry.location[2]); - light.target.position.set(geometry.direction[0], geometry.direction[1], geometry.direction[2]); - light.shadow.normalBias = .1; - } else if (geometry.isPointLight) { - light = new PointLight(); - light.castShadow = attributes.castsShadows; - light.position.set(geometry.location[0], geometry.location[1], geometry.location[2]); - light.shadow.normalBias = .1; - } else if (geometry.isRectangularLight) { - light = new RectAreaLight(); - const width2 = Math.abs(geometry.width[2]); - const height2 = Math.abs(geometry.length[0]); - light.position.set(geometry.location[0] - height2 / 2, geometry.location[1], geometry.location[2] - width2 / 2); - light.height = height2; - light.width = width2; - light.lookAt(new Vector3(geometry.direction[0], geometry.direction[1], geometry.direction[2])); - } else if (geometry.isSpotLight) { - light = new SpotLight(); - light.castShadow = attributes.castsShadows; - light.position.set(geometry.location[0], geometry.location[1], geometry.location[2]); - light.target.position.set(geometry.direction[0], geometry.direction[1], geometry.direction[2]); - light.angle = geometry.spotAngleRadians; - light.shadow.normalBias = .1; - } else if (geometry.isLinearLight) { - console.warn("THREE.3DMLoader: No conversion exists for linear lights."); - return; - } - if (light) { - light.intensity = geometry.intensity; - _color = geometry.diffuse; - color = new Color(_color.r / 255, _color.g / 255, _color.b / 255); - light.color = color; - light.userData["attributes"] = attributes; - light.userData["objectType"] = obj.objectType; - } - return light; - } - } - _initLibrary() { - if (!this.libraryPending) { - const jsLoader = new FileLoader(this.manager); - jsLoader.setPath(this.libraryPath); - const jsContent = new Promise((resolve, reject) => { - jsLoader.load("rhino3dm.js", resolve, void 0, reject); - }); - const binaryLoader = new FileLoader(this.manager); - binaryLoader.setPath(this.libraryPath); - binaryLoader.setResponseType("arraybuffer"); - const binaryContent = new Promise((resolve, reject) => { - binaryLoader.load("rhino3dm.wasm", resolve, void 0, reject); - }); - this.libraryPending = Promise.all([jsContent, binaryContent]).then(([jsContent2, binaryContent2]) => { - this.libraryConfig.wasmBinary = binaryContent2; - const fn = Rhino3dmWorker.toString(); - const body = [ - "/* rhino3dm.js */", - jsContent2, - "/* worker */", - fn.substring(fn.indexOf("{") + 1, fn.lastIndexOf("}")) - ].join("\n"); - this.workerSourceURL = URL.createObjectURL(new Blob([body])); - }); - } - return this.libraryPending; - } - _getWorker(taskCost) { - return this._initLibrary().then(() => { - if (this.workerPool.length < this.workerLimit) { - const worker2 = new Worker(this.workerSourceURL); - worker2._callbacks = {}; - worker2._taskCosts = {}; - worker2._taskLoad = 0; - worker2.postMessage({ - type: "init", - libraryConfig: this.libraryConfig - }); - worker2.onmessage = function(e) { - const message = e.data; - switch (message.type) { - case "decode": - worker2._callbacks[message.id].resolve(message); - break; - case "error": - worker2._callbacks[message.id].reject(message); - break; - default: console.error("THREE.Rhino3dmLoader: Unexpected message, \"" + message.type + "\""); - } - }; - this.workerPool.push(worker2); - } else this.workerPool.sort(function(a, b) { - return a._taskLoad > b._taskLoad ? -1 : 1; - }); - const worker = this.workerPool[this.workerPool.length - 1]; - worker._taskLoad += taskCost; - return worker; - }); - } - _releaseTask(worker, taskID) { - worker._taskLoad -= worker._taskCosts[taskID]; - delete worker._callbacks[taskID]; - delete worker._taskCosts[taskID]; - } - dispose() { - for (let i = 0; i < this.workerPool.length; ++i) this.workerPool[i].terminate(); - this.workerPool.length = 0; - return this; - } -}; -function Rhino3dmWorker() { - let libraryPending; - let libraryConfig; - let rhino; - onmessage = function(e) { - const message = e.data; - switch (message.type) { - case "init": - libraryConfig = message.libraryConfig; - const wasmBinary = libraryConfig.wasmBinary; - let RhinoModule; - libraryPending = new Promise(function(resolve) { - RhinoModule = { - wasmBinary, - onRuntimeInitialized: resolve - }; - rhino3dm(RhinoModule); - }).then(() => { - rhino = RhinoModule; - }); - break; - case "decode": - const buffer = message.buffer; - libraryPending.then(() => { - const data = decodeObjects(rhino, buffer); - self.postMessage({ - type: "decode", - id: message.id, - data - }); - }); - break; - } - }; - function decodeObjects(rhino2, buffer) { - const arr = new Uint8Array(buffer); - const doc = rhino2.File3dm.fromByteArray(arr); - const objects = []; - const materials = []; - const layers = []; - const views = []; - const namedViews = []; - const groups = []; - const objs = doc.objects(); - const cnt = objs.count; - for (let i = 0; i < cnt; i++) { - const _object = objs.get(i); - const object = extractObjectData(_object, doc); - _object.delete(); - if (object) objects.push(object); - } - for (let i = 0; i < doc.instanceDefinitions().count(); i++) { - const idef = doc.instanceDefinitions().get(i); - const idefAttributes = extractProperties(idef); - idefAttributes.objectIds = idef.getObjectIds(); - objects.push({ - geometry: null, - attributes: idefAttributes, - objectType: "InstanceDefinition" - }); - } - const textureTypes = [ - rhino2.TextureType.Diffuse, - rhino2.TextureType.Bump, - rhino2.TextureType.Transparency, - rhino2.TextureType.Opacity, - rhino2.TextureType.Emap - ]; - const pbrTextureTypes = [ - rhino2.TextureType.PBR_BaseColor, - rhino2.TextureType.PBR_Subsurface, - rhino2.TextureType.PBR_SubsurfaceScattering, - rhino2.TextureType.PBR_SubsurfaceScatteringRadius, - rhino2.TextureType.PBR_Metallic, - rhino2.TextureType.PBR_Specular, - rhino2.TextureType.PBR_SpecularTint, - rhino2.TextureType.PBR_Roughness, - rhino2.TextureType.PBR_Anisotropic, - rhino2.TextureType.PBR_Anisotropic_Rotation, - rhino2.TextureType.PBR_Sheen, - rhino2.TextureType.PBR_SheenTint, - rhino2.TextureType.PBR_Clearcoat, - rhino2.TextureType.PBR_ClearcoatBump, - rhino2.TextureType.PBR_ClearcoatRoughness, - rhino2.TextureType.PBR_OpacityIor, - rhino2.TextureType.PBR_OpacityRoughness, - rhino2.TextureType.PBR_Emission, - rhino2.TextureType.PBR_AmbientOcclusion, - rhino2.TextureType.PBR_Displacement - ]; - for (let i = 0; i < doc.materials().count(); i++) { - const _material = doc.materials().get(i); - const _pbrMaterial = _material.physicallyBased(); - let material = extractProperties(_material); - const textures = []; - for (let j = 0; j < textureTypes.length; j++) { - const _texture = _material.getTexture(textureTypes[j]); - if (_texture) { - let textureType = textureTypes[j].constructor.name; - textureType = textureType.substring(12, textureType.length); - const texture = { type: textureType }; - const image = doc.getEmbeddedFileAsBase64(_texture.fileName); - if (image) texture.image = "data:image/png;base64," + image; - else { - console.warn(`THREE.3DMLoader: Image for ${textureType} texture not embedded in file.`); - texture.image = null; - } - textures.push(texture); - _texture.delete(); - } - } - material.textures = textures; - if (_pbrMaterial.supported) { - console.log("pbr true"); - for (let j = 0; j < pbrTextureTypes.length; j++) { - const _texture = _material.getTexture(textureTypes[j]); - if (_texture) { - const image = doc.getEmbeddedFileAsBase64(_texture.fileName); - let textureType = textureTypes[j].constructor.name; - textureType = textureType.substring(12, textureType.length); - const texture = { - type: textureType, - image: "data:image/png;base64," + image - }; - textures.push(texture); - _texture.delete(); - } - } - const pbMaterialProperties = extractProperties(_material.physicallyBased()); - material = Object.assign(pbMaterialProperties, material); - } - materials.push(material); - _material.delete(); - _pbrMaterial.delete(); - } - for (let i = 0; i < doc.layers().count(); i++) { - const _layer = doc.layers().get(i); - const layer = extractProperties(_layer); - layers.push(layer); - _layer.delete(); - } - for (let i = 0; i < doc.views().count(); i++) { - const _view = doc.views().get(i); - const view = extractProperties(_view); - views.push(view); - _view.delete(); - } - for (let i = 0; i < doc.namedViews().count(); i++) { - const _namedView = doc.namedViews().get(i); - const namedView = extractProperties(_namedView); - namedViews.push(namedView); - _namedView.delete(); - } - for (let i = 0; i < doc.groups().count(); i++) { - const _group = doc.groups().get(i); - const group = extractProperties(_group); - groups.push(group); - _group.delete(); - } - const settings = extractProperties(doc.settings()); - doc.delete(); - return { - objects, - materials, - layers, - views, - namedViews, - groups, - settings - }; - } - function extractObjectData(object, doc) { - const _geometry = object.geometry(); - const _attributes = object.attributes(); - let objectType = _geometry.objectType; - let geometry, attributes, position, data, mesh; - switch (objectType) { - case rhino.ObjectType.Curve: - const pts = curveToPoints(_geometry, 100); - position = {}; - attributes = {}; - data = {}; - position.itemSize = 3; - position.type = "Float32Array"; - position.array = []; - for (let j = 0; j < pts.length; j++) { - position.array.push(pts[j][0]); - position.array.push(pts[j][1]); - position.array.push(pts[j][2]); - } - attributes.position = position; - data.attributes = attributes; - geometry = { data }; - break; - case rhino.ObjectType.Point: - const pt = _geometry.location; - position = {}; - const color = {}; - attributes = {}; - data = {}; - position.itemSize = 3; - position.type = "Float32Array"; - position.array = [ - pt[0], - pt[1], - pt[2] - ]; - const _color = _attributes.drawColor(doc); - color.itemSize = 3; - color.type = "Float32Array"; - color.array = [ - _color.r / 255, - _color.g / 255, - _color.b / 255 - ]; - attributes.position = position; - attributes.color = color; - data.attributes = attributes; - geometry = { data }; - break; - case rhino.ObjectType.PointSet: - case rhino.ObjectType.Mesh: - geometry = _geometry.toThreejsJSON(); - break; - case rhino.ObjectType.Brep: - const faces = _geometry.faces(); - mesh = new rhino.Mesh(); - for (let faceIndex = 0; faceIndex < faces.count; faceIndex++) { - const face = faces.get(faceIndex); - const _mesh = face.getMesh(rhino.MeshType.Any); - if (_mesh) { - mesh.append(_mesh); - _mesh.delete(); - } - face.delete(); - } - if (mesh.faces().count > 0) { - mesh.compact(); - geometry = mesh.toThreejsJSON(); - faces.delete(); - } - mesh.delete(); - break; - case rhino.ObjectType.Extrusion: - mesh = _geometry.getMesh(rhino.MeshType.Any); - if (mesh) { - geometry = mesh.toThreejsJSON(); - mesh.delete(); - } - break; - case rhino.ObjectType.TextDot: - geometry = extractProperties(_geometry); - break; - case rhino.ObjectType.Light: - geometry = extractProperties(_geometry); - break; - case rhino.ObjectType.InstanceReference: - geometry = extractProperties(_geometry); - geometry.xform = extractProperties(_geometry.xform); - geometry.xform.array = _geometry.xform.toFloatArray(true); - break; - case rhino.ObjectType.SubD: - _geometry.subdivide(3); - mesh = rhino.Mesh.createFromSubDControlNet(_geometry); - if (mesh) { - geometry = mesh.toThreejsJSON(); - mesh.delete(); - } - break; - default: - console.warn(`THREE.3DMLoader: TODO: Implement ${objectType.constructor.name}`); - break; - } - if (geometry) { - attributes = extractProperties(_attributes); - attributes.geometry = extractProperties(_geometry); - if (_attributes.groupCount > 0) attributes.groupIds = _attributes.getGroupList(); - if (_attributes.userStringCount > 0) attributes.userStrings = _attributes.getUserStrings(); - if (_geometry.userStringCount > 0) attributes.geometry.userStrings = _geometry.getUserStrings(); - attributes.drawColor = _attributes.drawColor(doc); - objectType = objectType.constructor.name; - objectType = objectType.substring(11, objectType.length); - return { - geometry, - attributes, - objectType - }; - } else console.warn(`THREE.3DMLoader: ${objectType.constructor.name} has no associated mesh geometry.`); - } - function extractProperties(object) { - const result = {}; - for (const property in object) { - const value = object[property]; - if (typeof value !== "function") if (typeof value === "object" && value !== null && value.hasOwnProperty("constructor")) result[property] = { - name: value.constructor.name, - value: value.value - }; - else result[property] = value; - } - return result; - } - function curveToPoints(curve, pointLimit) { - let pointCount = pointLimit; - let rc = []; - const ts = []; - if (curve instanceof rhino.LineCurve) return [curve.pointAtStart, curve.pointAtEnd]; - if (curve instanceof rhino.PolylineCurve) { - pointCount = curve.pointCount; - for (let i = 0; i < pointCount; i++) rc.push(curve.point(i)); - return rc; - } - if (curve instanceof rhino.PolyCurve) { - const segmentCount = curve.segmentCount; - for (let i = 0; i < segmentCount; i++) { - const segment = curve.segmentCurve(i); - const segmentArray = curveToPoints(segment, pointCount); - rc = rc.concat(segmentArray); - segment.delete(); - } - return rc; - } - if (curve instanceof rhino.ArcCurve) { - pointCount = Math.floor(curve.angleDegrees / 5); - pointCount = pointCount < 2 ? 2 : pointCount; - } - if (curve instanceof rhino.NurbsCurve && curve.degree === 1) { - const pLine = curve.tryGetPolyline(); - for (let i = 0; i < pLine.count; i++) rc.push(pLine.get(i)); - pLine.delete(); - return rc; - } - const domain = curve.domain; - const divisions = pointCount - 1; - for (let j = 0; j < pointCount; j++) { - const t = domain[0] + j / divisions * (domain[1] - domain[0]); - if (t === domain[0] || t === domain[1]) { - ts.push(t); - continue; - } - const tan = curve.tangentAt(t); - const prevTan = curve.tangentAt(ts.slice(-1)[0]); - const tS = tan[0] * tan[0] + tan[1] * tan[1] + tan[2] * tan[2]; - const ptS = prevTan[0] * prevTan[0] + prevTan[1] * prevTan[1] + prevTan[2] * prevTan[2]; - const denominator = Math.sqrt(tS * ptS); - let angle; - if (denominator === 0) angle = Math.PI / 2; - else { - const theta = (tan.x * prevTan.x + tan.y * prevTan.y + tan.z * prevTan.z) / denominator; - angle = Math.acos(Math.max(-1, Math.min(1, theta))); - } - if (angle < .1) continue; - ts.push(t); - } - rc = ts.map((t) => curve.pointAt(t)); - return rc; - } -} -//#endregion -//#region node_modules/three-stdlib/loaders/OBJLoader.js -var _object_pattern = /^[og]\s*(.+)?/; -var _material_library_pattern = /^mtllib /; -var _material_use_pattern = /^usemtl /; -var _map_use_pattern = /^usemap /; -var _vA = /* @__PURE__ */ new Vector3(); -var _vB = /* @__PURE__ */ new Vector3(); -var _vC = /* @__PURE__ */ new Vector3(); -var _ab = /* @__PURE__ */ new Vector3(); -var _cb = /* @__PURE__ */ new Vector3(); -function ParserState() { - const state = { - objects: [], - object: {}, - vertices: [], - normals: [], - colors: [], - uvs: [], - materials: {}, - materialLibraries: [], - startObject: function(name, fromDeclaration) { - if (this.object && this.object.fromDeclaration === false) { - this.object.name = name; - this.object.fromDeclaration = fromDeclaration !== false; - return; - } - const previousMaterial = this.object && typeof this.object.currentMaterial === "function" ? this.object.currentMaterial() : void 0; - if (this.object && typeof this.object._finalize === "function") this.object._finalize(true); - this.object = { - name: name || "", - fromDeclaration: fromDeclaration !== false, - geometry: { - vertices: [], - normals: [], - colors: [], - uvs: [], - hasUVIndices: false - }, - materials: [], - smooth: true, - startMaterial: function(name2, libraries) { - const previous = this._finalize(false); - if (previous && (previous.inherited || previous.groupCount <= 0)) this.materials.splice(previous.index, 1); - const material = { - index: this.materials.length, - name: name2 || "", - mtllib: Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : "", - smooth: previous !== void 0 ? previous.smooth : this.smooth, - groupStart: previous !== void 0 ? previous.groupEnd : 0, - groupEnd: -1, - groupCount: -1, - inherited: false, - clone: function(index) { - const cloned = { - index: typeof index === "number" ? index : this.index, - name: this.name, - mtllib: this.mtllib, - smooth: this.smooth, - groupStart: 0, - groupEnd: -1, - groupCount: -1, - inherited: false - }; - cloned.clone = this.clone.bind(cloned); - return cloned; - } - }; - this.materials.push(material); - return material; - }, - currentMaterial: function() { - if (this.materials.length > 0) return this.materials[this.materials.length - 1]; - }, - _finalize: function(end) { - const lastMultiMaterial = this.currentMaterial(); - if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) { - lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3; - lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart; - lastMultiMaterial.inherited = false; - } - if (end && this.materials.length > 1) { - for (let mi = this.materials.length - 1; mi >= 0; mi--) if (this.materials[mi].groupCount <= 0) this.materials.splice(mi, 1); - } - if (end && this.materials.length === 0) this.materials.push({ - name: "", - smooth: this.smooth - }); - return lastMultiMaterial; - } - }; - if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === "function") { - const declared = previousMaterial.clone(0); - declared.inherited = true; - this.object.materials.push(declared); - } - this.objects.push(this.object); - }, - finalize: function() { - if (this.object && typeof this.object._finalize === "function") this.object._finalize(true); - }, - parseVertexIndex: function(value, len) { - const index = parseInt(value, 10); - return (index >= 0 ? index - 1 : index + len / 3) * 3; - }, - parseNormalIndex: function(value, len) { - const index = parseInt(value, 10); - return (index >= 0 ? index - 1 : index + len / 3) * 3; - }, - parseUVIndex: function(value, len) { - const index = parseInt(value, 10); - return (index >= 0 ? index - 1 : index + len / 2) * 2; - }, - addVertex: function(a, b, c) { - const src = this.vertices; - const dst = this.object.geometry.vertices; - dst.push(src[a + 0], src[a + 1], src[a + 2]); - dst.push(src[b + 0], src[b + 1], src[b + 2]); - dst.push(src[c + 0], src[c + 1], src[c + 2]); - }, - addVertexPoint: function(a) { - const src = this.vertices; - this.object.geometry.vertices.push(src[a + 0], src[a + 1], src[a + 2]); - }, - addVertexLine: function(a) { - const src = this.vertices; - this.object.geometry.vertices.push(src[a + 0], src[a + 1], src[a + 2]); - }, - addNormal: function(a, b, c) { - const src = this.normals; - const dst = this.object.geometry.normals; - dst.push(src[a + 0], src[a + 1], src[a + 2]); - dst.push(src[b + 0], src[b + 1], src[b + 2]); - dst.push(src[c + 0], src[c + 1], src[c + 2]); - }, - addFaceNormal: function(a, b, c) { - const src = this.vertices; - const dst = this.object.geometry.normals; - _vA.fromArray(src, a); - _vB.fromArray(src, b); - _vC.fromArray(src, c); - _cb.subVectors(_vC, _vB); - _ab.subVectors(_vA, _vB); - _cb.cross(_ab); - _cb.normalize(); - dst.push(_cb.x, _cb.y, _cb.z); - dst.push(_cb.x, _cb.y, _cb.z); - dst.push(_cb.x, _cb.y, _cb.z); - }, - addColor: function(a, b, c) { - const src = this.colors; - const dst = this.object.geometry.colors; - if (src[a] !== void 0) dst.push(src[a + 0], src[a + 1], src[a + 2]); - if (src[b] !== void 0) dst.push(src[b + 0], src[b + 1], src[b + 2]); - if (src[c] !== void 0) dst.push(src[c + 0], src[c + 1], src[c + 2]); - }, - addUV: function(a, b, c) { - const src = this.uvs; - const dst = this.object.geometry.uvs; - dst.push(src[a + 0], src[a + 1]); - dst.push(src[b + 0], src[b + 1]); - dst.push(src[c + 0], src[c + 1]); - }, - addDefaultUV: function() { - const dst = this.object.geometry.uvs; - dst.push(0, 0); - dst.push(0, 0); - dst.push(0, 0); - }, - addUVLine: function(a) { - const src = this.uvs; - this.object.geometry.uvs.push(src[a + 0], src[a + 1]); - }, - addFace: function(a, b, c, ua, ub, uc, na, nb, nc) { - const vLen = this.vertices.length; - let ia = this.parseVertexIndex(a, vLen); - let ib = this.parseVertexIndex(b, vLen); - let ic = this.parseVertexIndex(c, vLen); - this.addVertex(ia, ib, ic); - this.addColor(ia, ib, ic); - if (na !== void 0 && na !== "") { - const nLen = this.normals.length; - ia = this.parseNormalIndex(na, nLen); - ib = this.parseNormalIndex(nb, nLen); - ic = this.parseNormalIndex(nc, nLen); - this.addNormal(ia, ib, ic); - } else this.addFaceNormal(ia, ib, ic); - if (ua !== void 0 && ua !== "") { - const uvLen = this.uvs.length; - ia = this.parseUVIndex(ua, uvLen); - ib = this.parseUVIndex(ub, uvLen); - ic = this.parseUVIndex(uc, uvLen); - this.addUV(ia, ib, ic); - this.object.geometry.hasUVIndices = true; - } else this.addDefaultUV(); - }, - addPointGeometry: function(vertices) { - this.object.geometry.type = "Points"; - const vLen = this.vertices.length; - for (let vi = 0, l = vertices.length; vi < l; vi++) { - const index = this.parseVertexIndex(vertices[vi], vLen); - this.addVertexPoint(index); - this.addColor(index); - } - }, - addLineGeometry: function(vertices, uvs) { - this.object.geometry.type = "Line"; - const vLen = this.vertices.length; - const uvLen = this.uvs.length; - for (let vi = 0, l = vertices.length; vi < l; vi++) this.addVertexLine(this.parseVertexIndex(vertices[vi], vLen)); - for (let uvi = 0, l = uvs.length; uvi < l; uvi++) this.addUVLine(this.parseUVIndex(uvs[uvi], uvLen)); - } - }; - state.startObject("", false); - return state; -} -var OBJLoader = class extends Loader { - constructor(manager) { - super(manager); - this.materials = null; - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - loader.load(url, function(text) { - try { - onLoad(scope.parse(text)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - setMaterials(materials) { - this.materials = materials; - return this; - } - parse(text) { - const state = new ParserState(); - if (text.indexOf("\r\n") !== -1) text = text.replace(/\r\n/g, "\n"); - if (text.indexOf("\\\n") !== -1) text = text.replace(/\\\n/g, ""); - const lines = text.split("\n"); - let line = "", lineFirstChar = ""; - let lineLength = 0; - let result = []; - const trimLeft = typeof "".trimLeft === "function"; - for (let i = 0, l = lines.length; i < l; i++) { - line = lines[i]; - line = trimLeft ? line.trimLeft() : line.trim(); - lineLength = line.length; - if (lineLength === 0) continue; - lineFirstChar = line.charAt(0); - if (lineFirstChar === "#") continue; - if (lineFirstChar === "v") { - const data = line.split(/\s+/); - switch (data[0]) { - case "v": - state.vertices.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3])); - if (data.length >= 7) state.colors.push(parseFloat(data[4]), parseFloat(data[5]), parseFloat(data[6])); - else state.colors.push(void 0, void 0, void 0); - break; - case "vn": - state.normals.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3])); - break; - case "vt": - state.uvs.push(parseFloat(data[1]), parseFloat(data[2])); - break; - } - } else if (lineFirstChar === "f") { - const vertexData = line.substr(1).trim().split(/\s+/); - const faceVertices = []; - for (let j = 0, jl = vertexData.length; j < jl; j++) { - const vertex = vertexData[j]; - if (vertex.length > 0) { - const vertexParts = vertex.split("/"); - faceVertices.push(vertexParts); - } - } - const v1 = faceVertices[0]; - for (let j = 1, jl = faceVertices.length - 1; j < jl; j++) { - const v2 = faceVertices[j]; - const v3 = faceVertices[j + 1]; - state.addFace(v1[0], v2[0], v3[0], v1[1], v2[1], v3[1], v1[2], v2[2], v3[2]); - } - } else if (lineFirstChar === "l") { - const lineParts = line.substring(1).trim().split(" "); - let lineVertices = []; - const lineUVs = []; - if (line.indexOf("/") === -1) lineVertices = lineParts; - else for (let li = 0, llen = lineParts.length; li < llen; li++) { - const parts = lineParts[li].split("/"); - if (parts[0] !== "") lineVertices.push(parts[0]); - if (parts[1] !== "") lineUVs.push(parts[1]); - } - state.addLineGeometry(lineVertices, lineUVs); - } else if (lineFirstChar === "p") { - const pointData = line.substr(1).trim().split(" "); - state.addPointGeometry(pointData); - } else if ((result = _object_pattern.exec(line)) !== null) { - const name = (" " + result[0].substr(1).trim()).substr(1); - state.startObject(name); - } else if (_material_use_pattern.test(line)) state.object.startMaterial(line.substring(7).trim(), state.materialLibraries); - else if (_material_library_pattern.test(line)) state.materialLibraries.push(line.substring(7).trim()); - else if (_map_use_pattern.test(line)) console.warn("THREE.OBJLoader: Rendering identifier \"usemap\" not supported. Textures must be defined in MTL files."); - else if (lineFirstChar === "s") { - result = line.split(" "); - if (result.length > 1) { - const value = result[1].trim().toLowerCase(); - state.object.smooth = value !== "0" && value !== "off"; - } else state.object.smooth = true; - const material = state.object.currentMaterial(); - if (material) material.smooth = state.object.smooth; - } else { - if (line === "\0") continue; - console.warn("THREE.OBJLoader: Unexpected line: \"" + line + "\""); - } - } - state.finalize(); - const container = new Group(); - container.materialLibraries = [].concat(state.materialLibraries); - if (!(state.objects.length === 1 && state.objects[0].geometry.vertices.length === 0) === true) for (let i = 0, l = state.objects.length; i < l; i++) { - const object = state.objects[i]; - const geometry = object.geometry; - const materials = object.materials; - const isLine = geometry.type === "Line"; - const isPoints = geometry.type === "Points"; - let hasVertexColors = false; - if (geometry.vertices.length === 0) continue; - const buffergeometry = new BufferGeometry(); - buffergeometry.setAttribute("position", new Float32BufferAttribute(geometry.vertices, 3)); - if (geometry.normals.length > 0) buffergeometry.setAttribute("normal", new Float32BufferAttribute(geometry.normals, 3)); - if (geometry.colors.length > 0) { - hasVertexColors = true; - buffergeometry.setAttribute("color", new Float32BufferAttribute(geometry.colors, 3)); - } - if (geometry.hasUVIndices === true) buffergeometry.setAttribute("uv", new Float32BufferAttribute(geometry.uvs, 2)); - const createdMaterials = []; - for (let mi = 0, miLen = materials.length; mi < miLen; mi++) { - const sourceMaterial = materials[mi]; - const materialHash = sourceMaterial.name + "_" + sourceMaterial.smooth + "_" + hasVertexColors; - let material = state.materials[materialHash]; - if (this.materials !== null) { - material = this.materials.create(sourceMaterial.name); - if (isLine && material && !(material instanceof LineBasicMaterial)) { - const materialLine = new LineBasicMaterial(); - Material.prototype.copy.call(materialLine, material); - materialLine.color.copy(material.color); - material = materialLine; - } else if (isPoints && material && !(material instanceof PointsMaterial)) { - const materialPoints = new PointsMaterial({ - size: 10, - sizeAttenuation: false - }); - Material.prototype.copy.call(materialPoints, material); - materialPoints.color.copy(material.color); - materialPoints.map = material.map; - material = materialPoints; - } - } - if (material === void 0) { - if (isLine) material = new LineBasicMaterial(); - else if (isPoints) material = new PointsMaterial({ - size: 1, - sizeAttenuation: false - }); - else material = new MeshPhongMaterial(); - material.name = sourceMaterial.name; - material.flatShading = sourceMaterial.smooth ? false : true; - material.vertexColors = hasVertexColors; - state.materials[materialHash] = material; - } - createdMaterials.push(material); - } - let mesh; - if (createdMaterials.length > 1) { - for (let mi = 0, miLen = materials.length; mi < miLen; mi++) { - const sourceMaterial = materials[mi]; - buffergeometry.addGroup(sourceMaterial.groupStart, sourceMaterial.groupCount, mi); - } - if (isLine) mesh = new LineSegments(buffergeometry, createdMaterials); - else if (isPoints) mesh = new Points(buffergeometry, createdMaterials); - else mesh = new Mesh(buffergeometry, createdMaterials); - } else if (isLine) mesh = new LineSegments(buffergeometry, createdMaterials[0]); - else if (isPoints) mesh = new Points(buffergeometry, createdMaterials[0]); - else mesh = new Mesh(buffergeometry, createdMaterials[0]); - mesh.name = object.name; - container.add(mesh); - } - else if (state.vertices.length > 0) { - const material = new PointsMaterial({ - size: 1, - sizeAttenuation: false - }); - const buffergeometry = new BufferGeometry(); - buffergeometry.setAttribute("position", new Float32BufferAttribute(state.vertices, 3)); - if (state.colors.length > 0 && state.colors[0] !== void 0) { - buffergeometry.setAttribute("color", new Float32BufferAttribute(state.colors, 3)); - material.vertexColors = true; - } - const points = new Points(buffergeometry, material); - container.add(points); - } - return container; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/AMFLoader.js -var AMFLoader = class extends Loader { - constructor(manager) { - super(manager); - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(scope.manager); - loader.setPath(scope.path); - loader.setResponseType("arraybuffer"); - loader.setRequestHeader(scope.requestHeader); - loader.setWithCredentials(scope.withCredentials); - loader.load(url, function(text) { - try { - onLoad(scope.parse(text)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(data) { - function loadDocument(data2) { - let view = new DataView(data2); - if (String.fromCharCode(view.getUint8(0), view.getUint8(1)) === "PK") { - let zip = null; - let file = null; - console.log("THREE.AMFLoader: Loading Zip"); - try { - zip = unzipSync(new Uint8Array(data2)); - } catch (e) { - if (e instanceof ReferenceError) { - console.log("THREE.AMFLoader: fflate missing and file is compressed."); - return null; - } - } - for (file in zip) if (file.toLowerCase().substr(-4) === ".amf") break; - console.log("THREE.AMFLoader: Trying to load file asset: " + file); - view = new DataView(zip[file].buffer); - } - const fileText = decodeText$1(view); - const xmlData2 = new DOMParser().parseFromString(fileText, "application/xml"); - if (xmlData2.documentElement.nodeName.toLowerCase() !== "amf") { - console.log("THREE.AMFLoader: Error loading AMF - no AMF document found."); - return null; - } - return xmlData2; - } - function loadDocumentScale(node) { - let scale = 1; - let unit = "millimeter"; - if (node.documentElement.attributes.unit !== void 0) unit = node.documentElement.attributes.unit.value.toLowerCase(); - const scaleUnits = { - millimeter: 1, - inch: 25.4, - feet: 304.8, - meter: 1e3, - micron: .001 - }; - if (scaleUnits[unit] !== void 0) scale = scaleUnits[unit]; - console.log("THREE.AMFLoader: Unit scale: " + scale); - return scale; - } - function loadMaterials(node) { - let matName = "AMF Material"; - const matId = node.attributes.id.textContent; - let color = { - r: 1, - g: 1, - b: 1, - a: 1 - }; - let loadedMaterial = null; - for (let i2 = 0; i2 < node.childNodes.length; i2++) { - const matChildEl = node.childNodes[i2]; - if (matChildEl.nodeName === "metadata" && matChildEl.attributes.type !== void 0) { - if (matChildEl.attributes.type.value === "name") matName = matChildEl.textContent; - } else if (matChildEl.nodeName === "color") color = loadColor(matChildEl); - } - loadedMaterial = new MeshPhongMaterial({ - flatShading: true, - color: new Color(color.r, color.g, color.b), - name: matName - }); - if (color.a !== 1) { - loadedMaterial.transparent = true; - loadedMaterial.opacity = color.a; - } - return { - id: matId, - material: loadedMaterial - }; - } - function loadColor(node) { - const color = { - r: 1, - g: 1, - b: 1, - a: 1 - }; - for (let i2 = 0; i2 < node.childNodes.length; i2++) { - const matColor = node.childNodes[i2]; - if (matColor.nodeName === "r") color.r = matColor.textContent; - else if (matColor.nodeName === "g") color.g = matColor.textContent; - else if (matColor.nodeName === "b") color.b = matColor.textContent; - else if (matColor.nodeName === "a") color.a = matColor.textContent; - } - return color; - } - function loadMeshVolume(node) { - const volume = { - name: "", - triangles: [], - materialid: null - }; - let currVolumeNode = node.firstElementChild; - if (node.attributes.materialid !== void 0) volume.materialId = node.attributes.materialid.nodeValue; - while (currVolumeNode) { - if (currVolumeNode.nodeName === "metadata") { - if (currVolumeNode.attributes.type !== void 0) { - if (currVolumeNode.attributes.type.value === "name") volume.name = currVolumeNode.textContent; - } - } else if (currVolumeNode.nodeName === "triangle") { - const v1 = currVolumeNode.getElementsByTagName("v1")[0].textContent; - const v2 = currVolumeNode.getElementsByTagName("v2")[0].textContent; - const v3 = currVolumeNode.getElementsByTagName("v3")[0].textContent; - volume.triangles.push(v1, v2, v3); - } - currVolumeNode = currVolumeNode.nextElementSibling; - } - return volume; - } - function loadMeshVertices(node) { - const vertArray = []; - const normalArray = []; - let currVerticesNode = node.firstElementChild; - while (currVerticesNode) { - if (currVerticesNode.nodeName === "vertex") { - let vNode = currVerticesNode.firstElementChild; - while (vNode) { - if (vNode.nodeName === "coordinates") { - const x = vNode.getElementsByTagName("x")[0].textContent; - const y = vNode.getElementsByTagName("y")[0].textContent; - const z = vNode.getElementsByTagName("z")[0].textContent; - vertArray.push(x, y, z); - } else if (vNode.nodeName === "normal") { - const nx = vNode.getElementsByTagName("nx")[0].textContent; - const ny = vNode.getElementsByTagName("ny")[0].textContent; - const nz = vNode.getElementsByTagName("nz")[0].textContent; - normalArray.push(nx, ny, nz); - } - vNode = vNode.nextElementSibling; - } - } - currVerticesNode = currVerticesNode.nextElementSibling; - } - return { - vertices: vertArray, - normals: normalArray - }; - } - function loadObject(node) { - const objId = node.attributes.id.textContent; - const loadedObject = { - name: "amfobject", - meshes: [] - }; - let currColor = null; - let currObjNode = node.firstElementChild; - while (currObjNode) { - if (currObjNode.nodeName === "metadata") { - if (currObjNode.attributes.type !== void 0) { - if (currObjNode.attributes.type.value === "name") loadedObject.name = currObjNode.textContent; - } - } else if (currObjNode.nodeName === "color") currColor = loadColor(currObjNode); - else if (currObjNode.nodeName === "mesh") { - let currMeshNode = currObjNode.firstElementChild; - const mesh = { - vertices: [], - normals: [], - volumes: [], - color: currColor - }; - while (currMeshNode) { - if (currMeshNode.nodeName === "vertices") { - const loadedVertices = loadMeshVertices(currMeshNode); - mesh.normals = mesh.normals.concat(loadedVertices.normals); - mesh.vertices = mesh.vertices.concat(loadedVertices.vertices); - } else if (currMeshNode.nodeName === "volume") mesh.volumes.push(loadMeshVolume(currMeshNode)); - currMeshNode = currMeshNode.nextElementSibling; - } - loadedObject.meshes.push(mesh); - } - currObjNode = currObjNode.nextElementSibling; - } - return { - id: objId, - obj: loadedObject - }; - } - const xmlData = loadDocument(data); - let amfName = ""; - let amfAuthor = ""; - const amfScale = loadDocumentScale(xmlData); - const amfMaterials = {}; - const amfObjects = {}; - const childNodes = xmlData.documentElement.childNodes; - let i, j; - for (i = 0; i < childNodes.length; i++) { - const child = childNodes[i]; - if (child.nodeName === "metadata") { - if (child.attributes.type !== void 0) { - if (child.attributes.type.value === "name") amfName = child.textContent; - else if (child.attributes.type.value === "author") amfAuthor = child.textContent; - } - } else if (child.nodeName === "material") { - const loadedMaterial = loadMaterials(child); - amfMaterials[loadedMaterial.id] = loadedMaterial.material; - } else if (child.nodeName === "object") { - const loadedObject = loadObject(child); - amfObjects[loadedObject.id] = loadedObject.obj; - } - } - const sceneObject = new Group(); - const defaultMaterial = new MeshPhongMaterial({ - color: 11184895, - flatShading: true - }); - sceneObject.name = amfName; - sceneObject.userData.author = amfAuthor; - sceneObject.userData.loader = "AMF"; - for (const id in amfObjects) { - const part = amfObjects[id]; - const meshes = part.meshes; - const newObject = new Group(); - newObject.name = part.name || ""; - for (i = 0; i < meshes.length; i++) { - let objDefaultMaterial = defaultMaterial; - const mesh = meshes[i]; - const vertices = new Float32BufferAttribute(mesh.vertices, 3); - let normals = null; - if (mesh.normals.length) normals = new Float32BufferAttribute(mesh.normals, 3); - if (mesh.color) { - const color = mesh.color; - objDefaultMaterial = defaultMaterial.clone(); - objDefaultMaterial.color = new Color(color.r, color.g, color.b); - if (color.a !== 1) { - objDefaultMaterial.transparent = true; - objDefaultMaterial.opacity = color.a; - } - } - const volumes = mesh.volumes; - for (j = 0; j < volumes.length; j++) { - const volume = volumes[j]; - const newGeometry = new BufferGeometry(); - let material = objDefaultMaterial; - newGeometry.setIndex(volume.triangles); - newGeometry.setAttribute("position", vertices.clone()); - if (normals) newGeometry.setAttribute("normal", normals.clone()); - if (amfMaterials[volume.materialId] !== void 0) material = amfMaterials[volume.materialId]; - newGeometry.scale(amfScale, amfScale, amfScale); - newObject.add(new Mesh(newGeometry, material.clone())); - } - } - sceneObject.add(newObject); - } - return sceneObject; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/MMDLoader.js -var MMDLoader = class extends Loader { - constructor(manager) { - super(manager); - this.loader = new FileLoader(this.manager); - this.parser = null; - this.meshBuilder = new MeshBuilder(this.manager); - this.animationBuilder = new AnimationBuilder(); - } - /** - * @param {string} animationPath - * @return {MMDLoader} - */ - setAnimationPath(animationPath) { - this.animationPath = animationPath; - return this; - } - /** - * Loads Model file (.pmd or .pmx) as a SkinnedMesh. - * - * @param {string} url - url to Model(.pmd or .pmx) file - * @param {function} onLoad - * @param {function} onProgress - * @param {function} onError - */ - load(url, onLoad, onProgress, onError) { - const builder = this.meshBuilder.setCrossOrigin(this.crossOrigin); - let resourcePath; - if (this.resourcePath !== "") resourcePath = this.resourcePath; - else if (this.path !== "") resourcePath = this.path; - else resourcePath = LoaderUtils.extractUrlBase(url); - const modelExtension = this._extractExtension(url).toLowerCase(); - if (modelExtension !== "pmd" && modelExtension !== "pmx") { - if (onError) onError(/* @__PURE__ */ new Error("THREE.MMDLoader: Unknown model file extension ." + modelExtension + ".")); - return; - } - this[modelExtension === "pmd" ? "loadPMD" : "loadPMX"](url, function(data) { - onLoad(builder.build(data, resourcePath, onProgress, onError)); - }, onProgress, onError); - } - /** - * Loads Motion file(s) (.vmd) as a AnimationClip. - * If two or more files are specified, they'll be merged. - * - * @param {string|Array<string>} url - url(s) to animation(.vmd) file(s) - * @param {SkinnedMesh|THREE.Camera} object - tracks will be fitting to this object - * @param {function} onLoad - * @param {function} onProgress - * @param {function} onError - */ - loadAnimation(url, object, onLoad, onProgress, onError) { - const builder = this.animationBuilder; - this.loadVMD(url, function(vmd) { - onLoad(object.isCamera ? builder.buildCameraAnimation(vmd) : builder.build(vmd, object)); - }, onProgress, onError); - } - /** - * Loads mode file and motion file(s) as an object containing - * a SkinnedMesh and a AnimationClip. - * Tracks of AnimationClip are fitting to the model. - * - * @param {string} modelUrl - url to Model(.pmd or .pmx) file - * @param {string|Array{string}} vmdUrl - url(s) to animation(.vmd) file - * @param {function} onLoad - * @param {function} onProgress - * @param {function} onError - */ - loadWithAnimation(modelUrl, vmdUrl, onLoad, onProgress, onError) { - const scope = this; - this.load(modelUrl, function(mesh) { - scope.loadAnimation(vmdUrl, mesh, function(animation) { - onLoad({ - mesh, - animation - }); - }, onProgress, onError); - }, onProgress, onError); - } - /** - * Loads .pmd file as an Object. - * - * @param {string} url - url to .pmd file - * @param {function} onLoad - * @param {function} onProgress - * @param {function} onError - */ - loadPMD(url, onLoad, onProgress, onError) { - const parser = this._getParser(); - this.loader.setMimeType(void 0).setPath(this.path).setResponseType("arraybuffer").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(url, function(buffer) { - onLoad(parser.parsePmd(buffer, true)); - }, onProgress, onError); - } - /** - * Loads .pmx file as an Object. - * - * @param {string} url - url to .pmx file - * @param {function} onLoad - * @param {function} onProgress - * @param {function} onError - */ - loadPMX(url, onLoad, onProgress, onError) { - const parser = this._getParser(); - this.loader.setMimeType(void 0).setPath(this.path).setResponseType("arraybuffer").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(url, function(buffer) { - onLoad(parser.parsePmx(buffer, true)); - }, onProgress, onError); - } - /** - * Loads .vmd file as an Object. If two or more files are specified - * they'll be merged. - * - * @param {string|Array<string>} url - url(s) to .vmd file(s) - * @param {function} onLoad - * @param {function} onProgress - * @param {function} onError - */ - loadVMD(url, onLoad, onProgress, onError) { - const urls = Array.isArray(url) ? url : [url]; - const vmds = []; - const vmdNum = urls.length; - const parser = this._getParser(); - this.loader.setMimeType(void 0).setPath(this.animationPath).setResponseType("arraybuffer").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials); - for (let i = 0, il = urls.length; i < il; i++) this.loader.load(urls[i], function(buffer) { - vmds.push(parser.parseVmd(buffer, true)); - if (vmds.length === vmdNum) onLoad(parser.mergeVmds(vmds)); - }, onProgress, onError); - } - /** - * Loads .vpd file as an Object. - * - * @param {string} url - url to .vpd file - * @param {boolean} isUnicode - * @param {function} onLoad - * @param {function} onProgress - * @param {function} onError - */ - loadVPD(url, isUnicode, onLoad, onProgress, onError) { - const parser = this._getParser(); - this.loader.setMimeType(isUnicode ? void 0 : "text/plain; charset=shift_jis").setPath(this.animationPath).setResponseType("text").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(url, function(text) { - onLoad(parser.parseVpd(text, true)); - }, onProgress, onError); - } - _extractExtension(url) { - const index = url.lastIndexOf("."); - return index < 0 ? "" : url.slice(index + 1); - } - _getParser() { - if (this.parser === null) this.parser = new Parser(); - return this.parser; - } -}; -var DEFAULT_TOON_TEXTURES = [ - "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=", - "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/bWiiMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh8aBHZBl14e8wAAAABJRU5ErkJggg==", - "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOUlEQVRYR+3WMREAMAwDsYY/yoDI7MLwIiP40+RJklfcCCBAgAABAgTqArfb/QMCCBAgQIAAgbbAB3z/e0F3js2cAAAAAElFTkSuQmCC", - "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/B5ilMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh81dWyx0gFwKAAAAABJRU5ErkJggg==", - "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOklEQVRYR+3WoREAMAwDsWb/UQtCy9wxTOQJ/oQ8SXKKGwEECBAgQIBAXeDt7f4BAQQIECBAgEBb4AOz8Hzx7WLY4wAAAABJRU5ErkJggg==", - "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABPUlEQVRYR+1XwW7CMAy1+f9fZOMysSEOEweEOPRNdm3HbdOyIhAcklPrOs/PLy9RygBALxzcCDQFmgJNgaZAU6Ap0BR4PwX8gsRMVLssMRH5HcpzJEaWL7EVg9F1IHRlyqQohgVr4FGUlUcMJSjcUlDw0zvjeun70cLWmneoyf7NgBTQSniBTQQSuJAZsOnnaczjIMb5hCiuHKxokCrJfVnrctyZL0PkJAJe1HMil4nxeyi3Ypfn1kX51jpPvo/JeCNC4PhVdHdJw2XjBR8brF8PEIhNVn12AgP7uHsTBguBn53MUZCqv7Lp07Pn5k1Ro+uWmUNn7D+M57rtk7aG0Vo73xyF/fbFf0bPJjDXngnGocDTdFhygZjwUQrMNrDcmZlQT50VJ/g/UwNyHpu778+yW+/ksOz/BFo54P4AsUXMfRq7XWsAAAAASUVORK5CYII=", - "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACMElEQVRYR+2Xv4pTQRTGf2dubhLdICiii2KnYKHVolhauKWPoGAnNr6BD6CvIVaihYuI2i1ia0BY0MZGRHQXjZj/mSPnnskfNWiWZUlzJ5k7M2cm833nO5Mziej2DWWJRUoCpQKlAntSQCqgw39/iUWAGmh37jrRnVsKlgpiqmkoGVABA7E57fvY+pJDdgKqF6HzFCSADkDq+F6AHABtQ+UMVE5D7zXod7fFNhTEckTbj5XQgHzNN+5tQvc5NG7C6BNkp6D3EmpXHDR+dQAjFLchW3VS9rlw3JBh+B7ys5Cf9z0GW1C/7P32AyBAOAz1q4jGliIH3YPuBnSfQX4OGreTIgEYQb/pBDtPnEQ4CivXYPAWBk13oHrB54yA9QuSn2H4AcKRpEILDt0BUzj+RLR1V5EqjD66NPRBVpLcQwjHoHYJOhsQv6U4mnzmrIXJCFr4LDwm/xBUoboG9XX4cc9VKdYoSA2yk5NQLJaKDUjTBoveG3Z2TElTxwjNK4M3LEZgUdDdruvcXzKBpStgp2NPiWi3ks9ZXxIoFVi+AvHLdc9TqtjL3/aYjpPlrzOcEnK62Szhimdd7xX232zFDTgtxezOu3WNMRLjiKgjtOhHVMd1loynVHvOgjuIIJMaELEqhJAV/RCSLbWTcfPFakFgFlALTRRvx+ok6Hlp/Q+v3fmx90bMyUzaEAhmM3KvHlXTL5DxnbGf/1M8RNNACLL5MNtPxP/mypJAqcDSFfgFhpYqWUzhTEAAAAAASUVORK5CYII=", - "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=", - "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=", - "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=", - "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=" -]; -var MeshBuilder = class { - constructor(manager) { - this.crossOrigin = "anonymous"; - this.geometryBuilder = new GeometryBuilder(); - this.materialBuilder = new MaterialBuilder(manager); - } - /** - * @param {string} crossOrigin - * @return {MeshBuilder} - */ - setCrossOrigin(crossOrigin) { - this.crossOrigin = crossOrigin; - return this; - } - /** - * @param {Object} data - parsed PMD/PMX data - * @param {string} resourcePath - * @param {function} onProgress - * @param {function} onError - * @return {SkinnedMesh} - */ - build(data, resourcePath, onProgress, onError) { - const geometry = this.geometryBuilder.build(data); - const mesh = new SkinnedMesh(geometry, this.materialBuilder.setCrossOrigin(this.crossOrigin).setResourcePath(resourcePath).build(data, geometry, onProgress, onError)); - const skeleton = new Skeleton(initBones(mesh)); - mesh.bind(skeleton); - return mesh; - } -}; -function initBones(mesh) { - const geometry = mesh.geometry; - const bones = []; - if (geometry && geometry.bones !== void 0) { - for (let i = 0, il = geometry.bones.length; i < il; i++) { - const gbone = geometry.bones[i]; - const bone = new Bone(); - bones.push(bone); - bone.name = gbone.name; - bone.position.fromArray(gbone.pos); - bone.quaternion.fromArray(gbone.rotq); - if (gbone.scl !== void 0) bone.scale.fromArray(gbone.scl); - } - for (let i = 0, il = geometry.bones.length; i < il; i++) { - const gbone = geometry.bones[i]; - if (gbone.parent !== -1 && gbone.parent !== null && bones[gbone.parent] !== void 0) bones[gbone.parent].add(bones[i]); - else mesh.add(bones[i]); - } - } - mesh.updateMatrixWorld(true); - return bones; -} -var GeometryBuilder = class { - /** - * @param {Object} data - parsed PMD/PMX data - * @return {BufferGeometry} - */ - build(data) { - const positions = []; - const uvs = []; - const normals = []; - const indices = []; - const groups = []; - const bones = []; - const skinIndices = []; - const skinWeights = []; - const morphTargets = []; - const morphPositions = []; - const iks = []; - const grants = []; - const rigidBodies = []; - const constraints = []; - let offset = 0; - const boneTypeTable = {}; - for (let i = 0; i < data.metadata.vertexCount; i++) { - const v = data.vertices[i]; - for (let j = 0, jl = v.position.length; j < jl; j++) positions.push(v.position[j]); - for (let j = 0, jl = v.normal.length; j < jl; j++) normals.push(v.normal[j]); - for (let j = 0, jl = v.uv.length; j < jl; j++) uvs.push(v.uv[j]); - for (let j = 0; j < 4; j++) skinIndices.push(v.skinIndices.length - 1 >= j ? v.skinIndices[j] : 0); - for (let j = 0; j < 4; j++) skinWeights.push(v.skinWeights.length - 1 >= j ? v.skinWeights[j] : 0); - } - for (let i = 0; i < data.metadata.faceCount; i++) { - const face = data.faces[i]; - for (let j = 0, jl = face.indices.length; j < jl; j++) indices.push(face.indices[j]); - } - for (let i = 0; i < data.metadata.materialCount; i++) { - const material = data.materials[i]; - groups.push({ - offset: offset * 3, - count: material.faceCount * 3 - }); - offset += material.faceCount; - } - for (let i = 0; i < data.metadata.rigidBodyCount; i++) { - const body = data.rigidBodies[i]; - let value = boneTypeTable[body.boneIndex]; - value = value === void 0 ? body.type : Math.max(body.type, value); - boneTypeTable[body.boneIndex] = value; - } - for (let i = 0; i < data.metadata.boneCount; i++) { - const boneData = data.bones[i]; - const bone = { - index: i, - transformationClass: boneData.transformationClass, - parent: boneData.parentIndex, - name: boneData.name, - pos: boneData.position.slice(0, 3), - rotq: [ - 0, - 0, - 0, - 1 - ], - scl: [ - 1, - 1, - 1 - ], - rigidBodyType: boneTypeTable[i] !== void 0 ? boneTypeTable[i] : -1 - }; - if (bone.parent !== -1) { - bone.pos[0] -= data.bones[bone.parent].position[0]; - bone.pos[1] -= data.bones[bone.parent].position[1]; - bone.pos[2] -= data.bones[bone.parent].position[2]; - } - bones.push(bone); - } - if (data.metadata.format === "pmd") for (let i = 0; i < data.metadata.ikCount; i++) { - const ik = data.iks[i]; - const param = { - target: ik.target, - effector: ik.effector, - iteration: ik.iteration, - maxAngle: ik.maxAngle * 4, - links: [] - }; - for (let j = 0, jl = ik.links.length; j < jl; j++) { - const link = {}; - link.index = ik.links[j].index; - link.enabled = true; - if (data.bones[link.index].name.indexOf("ひざ") >= 0) link.limitation = new Vector3(1, 0, 0); - param.links.push(link); - } - iks.push(param); - } - else for (let i = 0; i < data.metadata.boneCount; i++) { - const ik = data.bones[i].ik; - if (ik === void 0) continue; - const param = { - target: i, - effector: ik.effector, - iteration: ik.iteration, - maxAngle: ik.maxAngle, - links: [] - }; - for (let j = 0, jl = ik.links.length; j < jl; j++) { - const link = {}; - link.index = ik.links[j].index; - link.enabled = true; - if (ik.links[j].angleLimitation === 1) { - const rotationMin = ik.links[j].lowerLimitationAngle; - const rotationMax = ik.links[j].upperLimitationAngle; - const tmp1 = -rotationMax[0]; - const tmp2 = -rotationMax[1]; - rotationMax[0] = -rotationMin[0]; - rotationMax[1] = -rotationMin[1]; - rotationMin[0] = tmp1; - rotationMin[1] = tmp2; - link.rotationMin = new Vector3().fromArray(rotationMin); - link.rotationMax = new Vector3().fromArray(rotationMax); - } - param.links.push(link); - } - iks.push(param); - bones[i].ik = param; - } - if (data.metadata.format === "pmx") { - let traverse = function(entry) { - if (entry.param) { - grants.push(entry.param); - bones[entry.param.index].grant = entry.param; - } - entry.visited = true; - for (let i = 0, il = entry.children.length; i < il; i++) { - const child = entry.children[i]; - if (!child.visited) traverse(child); - } - }; - const grantEntryMap = {}; - for (let i = 0; i < data.metadata.boneCount; i++) { - const boneData = data.bones[i]; - const grant = boneData.grant; - if (grant === void 0) continue; - grantEntryMap[i] = { - parent: null, - children: [], - param: { - index: i, - parentIndex: grant.parentIndex, - ratio: grant.ratio, - isLocal: grant.isLocal, - affectRotation: grant.affectRotation, - affectPosition: grant.affectPosition, - transformationClass: boneData.transformationClass - }, - visited: false - }; - } - const rootEntry = { - parent: null, - children: [], - param: null, - visited: false - }; - for (const boneIndex in grantEntryMap) { - const grantEntry = grantEntryMap[boneIndex]; - const parentGrantEntry = grantEntryMap[grantEntry.parentIndex] || rootEntry; - grantEntry.parent = parentGrantEntry; - parentGrantEntry.children.push(grantEntry); - } - traverse(rootEntry); - } - function updateAttributes(attribute, morph, ratio) { - for (let i = 0; i < morph.elementCount; i++) { - const element = morph.elements[i]; - let index; - if (data.metadata.format === "pmd") index = data.morphs[0].elements[element.index].index; - else index = element.index; - attribute.array[index * 3 + 0] += element.position[0] * ratio; - attribute.array[index * 3 + 1] += element.position[1] * ratio; - attribute.array[index * 3 + 2] += element.position[2] * ratio; - } - } - for (let i = 0; i < data.metadata.morphCount; i++) { - const morph = data.morphs[i]; - const params = { name: morph.name }; - const attribute = new Float32BufferAttribute(data.metadata.vertexCount * 3, 3); - attribute.name = morph.name; - for (let j = 0; j < data.metadata.vertexCount * 3; j++) attribute.array[j] = positions[j]; - if (data.metadata.format === "pmd") { - if (i !== 0) updateAttributes(attribute, morph, 1); - } else if (morph.type === 0) for (let j = 0; j < morph.elementCount; j++) { - const morph2 = data.morphs[morph.elements[j].index]; - const ratio = morph.elements[j].ratio; - if (morph2.type === 1) updateAttributes(attribute, morph2, ratio); - } - else if (morph.type === 1) updateAttributes(attribute, morph, 1); - else if (morph.type === 2); - else if (morph.type === 3); - else if (morph.type === 4); - else if (morph.type === 5); - else if (morph.type === 6); - else if (morph.type === 7); - else if (morph.type === 8); - morphTargets.push(params); - morphPositions.push(attribute); - } - for (let i = 0; i < data.metadata.rigidBodyCount; i++) { - const rigidBody = data.rigidBodies[i]; - const params = {}; - for (const key in rigidBody) params[key] = rigidBody[key]; - if (data.metadata.format === "pmx") { - if (params.boneIndex !== -1) { - const bone = data.bones[params.boneIndex]; - params.position[0] -= bone.position[0]; - params.position[1] -= bone.position[1]; - params.position[2] -= bone.position[2]; - } - } - rigidBodies.push(params); - } - for (let i = 0; i < data.metadata.constraintCount; i++) { - const constraint = data.constraints[i]; - const params = {}; - for (const key in constraint) params[key] = constraint[key]; - const bodyA = rigidBodies[params.rigidBodyIndex1]; - const bodyB = rigidBodies[params.rigidBodyIndex2]; - if (bodyA.type !== 0 && bodyB.type === 2) { - if (bodyA.boneIndex !== -1 && bodyB.boneIndex !== -1 && data.bones[bodyB.boneIndex].parentIndex === bodyA.boneIndex) bodyB.type = 1; - } - constraints.push(params); - } - const geometry = new BufferGeometry(); - geometry.setAttribute("position", new Float32BufferAttribute(positions, 3)); - geometry.setAttribute("normal", new Float32BufferAttribute(normals, 3)); - geometry.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); - geometry.setAttribute("skinIndex", new Uint16BufferAttribute(skinIndices, 4)); - geometry.setAttribute("skinWeight", new Float32BufferAttribute(skinWeights, 4)); - geometry.setIndex(indices); - for (let i = 0, il = groups.length; i < il; i++) geometry.addGroup(groups[i].offset, groups[i].count, i); - geometry.bones = bones; - geometry.morphTargets = morphTargets; - geometry.morphAttributes.position = morphPositions; - geometry.morphTargetsRelative = false; - geometry.userData.MMD = { - bones, - iks, - grants, - rigidBodies, - constraints, - format: data.metadata.format - }; - geometry.computeBoundingSphere(); - return geometry; - } -}; -var MaterialBuilder = class { - constructor(manager) { - this.manager = manager; - this.textureLoader = new TextureLoader(this.manager); - this.tgaLoader = null; - this.crossOrigin = "anonymous"; - this.resourcePath = void 0; - } - /** - * @param {string} crossOrigin - * @return {MaterialBuilder} - */ - setCrossOrigin(crossOrigin) { - this.crossOrigin = crossOrigin; - return this; - } - /** - * @param {string} resourcePath - * @return {MaterialBuilder} - */ - setResourcePath(resourcePath) { - this.resourcePath = resourcePath; - return this; - } - /** - * @param {Object} data - parsed PMD/PMX data - * @param {BufferGeometry} geometry - some properties are dependend on geometry - * @param {function} onProgress - * @param {function} onError - * @return {Array<MeshToonMaterial>} - */ - build(data, geometry) { - const materials = []; - const textures = {}; - this.textureLoader.setCrossOrigin(this.crossOrigin); - for (let i = 0; i < data.metadata.materialCount; i++) { - const material = data.materials[i]; - const params = { userData: {} }; - if (material.name !== void 0) params.name = material.name; - params.color = new Color().fromArray(material.diffuse); - params.opacity = material.diffuse[3]; - params.emissive = new Color().fromArray(material.ambient); - params.transparent = params.opacity !== 1; - params.skinning = geometry.bones.length > 0 ? true : false; - params.morphTargets = geometry.morphTargets.length > 0 ? true : false; - params.fog = true; - params.blending = 5; - params.blendSrc = 204; - params.blendDst = 205; - params.blendSrcAlpha = 204; - params.blendDstAlpha = 206; - if (data.metadata.format === "pmx" && (material.flag & 1) === 1) params.side = 2; - else params.side = params.opacity === 1 ? 0 : 2; - if (data.metadata.format === "pmd") { - if (material.fileName) { - const fileNames = material.fileName.split("*"); - params.map = this._loadTexture(fileNames[0], textures); - if (fileNames.length > 1) { - const extension = fileNames[1].slice(-4).toLowerCase(); - params.envMap = this._loadTexture(fileNames[1], textures); - params.combine = extension === ".sph" ? 0 : 2; - } - } - const toonFileName = material.toonIndex === -1 ? "toon00.bmp" : data.toonTextures[material.toonIndex].fileName; - params.gradientMap = this._loadTexture(toonFileName, textures, { - isToonTexture: true, - isDefaultToonTexture: this._isDefaultToonTexture(toonFileName) - }); - params.userData.outlineParameters = { - thickness: material.edgeFlag === 1 ? .003 : 0, - color: [ - 0, - 0, - 0 - ], - alpha: 1, - visible: material.edgeFlag === 1 - }; - } else { - if (material.textureIndex !== -1) params.map = this._loadTexture(data.textures[material.textureIndex], textures); - if (material.envTextureIndex !== -1 && (material.envFlag === 1 || material.envFlag == 2)) { - params.envMap = this._loadTexture(data.textures[material.envTextureIndex], textures); - params.combine = material.envFlag === 1 ? 0 : 2; - } - let toonFileName, isDefaultToon; - if (material.toonIndex === -1 || material.toonFlag !== 0) { - toonFileName = "toon" + ("0" + (material.toonIndex + 1)).slice(-2) + ".bmp"; - isDefaultToon = true; - } else { - toonFileName = data.textures[material.toonIndex]; - isDefaultToon = false; - } - params.gradientMap = this._loadTexture(toonFileName, textures, { - isToonTexture: true, - isDefaultToonTexture: isDefaultToon - }); - params.userData.outlineParameters = { - thickness: material.edgeSize / 300, - color: material.edgeColor.slice(0, 3), - alpha: material.edgeColor[3], - visible: (material.flag & 16) !== 0 && material.edgeSize > 0 - }; - } - if (params.map !== void 0) { - if (!params.transparent) this._checkImageTransparency(params.map, geometry, i); - params.emissive.multiplyScalar(.2); - } - materials.push(new MeshToonMaterial(params)); - } - if (data.metadata.format === "pmx") { - let checkAlphaMorph = function(elements, materials2) { - for (let i = 0, il = elements.length; i < il; i++) { - const element = elements[i]; - if (element.index === -1) continue; - const material = materials2[element.index]; - if (material.opacity !== element.diffuse[3]) material.transparent = true; - } - }; - for (let i = 0, il = data.morphs.length; i < il; i++) { - const morph = data.morphs[i]; - const elements = morph.elements; - if (morph.type === 0) for (let j = 0, jl = elements.length; j < jl; j++) { - const morph2 = data.morphs[elements[j].index]; - if (morph2.type !== 8) continue; - checkAlphaMorph(morph2.elements, materials); - } - else if (morph.type === 8) checkAlphaMorph(elements, materials); - } - } - return materials; - } - _getTGALoader() { - if (this.tgaLoader === null) { - if (TGALoader === void 0) throw new Error("THREE.MMDLoader: Import TGALoader"); - this.tgaLoader = new TGALoader(this.manager); - } - return this.tgaLoader; - } - _isDefaultToonTexture(name) { - if (name.length !== 10) return false; - return /toon(10|0[0-9])\.bmp/.test(name); - } - _loadTexture(filePath, textures, params, onProgress, onError) { - params = params || {}; - const scope = this; - let fullPath; - if (params.isDefaultToonTexture === true) { - let index; - try { - index = parseInt(filePath.match(/toon([0-9]{2})\.bmp$/)[1]); - } catch (e) { - console.warn("THREE.MMDLoader: " + filePath + " seems like a not right default texture path. Using toon00.bmp instead."); - index = 0; - } - fullPath = DEFAULT_TOON_TEXTURES[index]; - } else fullPath = this.resourcePath + filePath; - if (textures[fullPath] !== void 0) return textures[fullPath]; - let loader = this.manager.getHandler(fullPath); - if (loader === null) loader = filePath.slice(-4).toLowerCase() === ".tga" ? this._getTGALoader() : this.textureLoader; - const texture = loader.load(fullPath, function(t) { - if (params.isToonTexture === true) { - t.image = scope._getRotatedImage(t.image); - t.magFilter = NearestFilter; - t.minFilter = NearestFilter; - } - t.flipY = false; - t.wrapS = RepeatWrapping; - t.wrapT = RepeatWrapping; - for (let i = 0; i < texture.readyCallbacks.length; i++) texture.readyCallbacks[i](texture); - delete texture.readyCallbacks; - }, onProgress, onError); - texture.readyCallbacks = []; - textures[fullPath] = texture; - return texture; - } - _getRotatedImage(image) { - const canvas = document.createElement("canvas"); - const context = canvas.getContext("2d"); - const width = image.width; - const height = image.height; - canvas.width = width; - canvas.height = height; - context.clearRect(0, 0, width, height); - context.translate(width / 2, height / 2); - context.rotate(.5 * Math.PI); - context.translate(-width / 2, -height / 2); - context.drawImage(image, 0, 0); - return context.getImageData(0, 0, width, height); - } - _checkImageTransparency(map, geometry, groupIndex) { - map.readyCallbacks.push(function(texture) { - function createImageData(image) { - const canvas = document.createElement("canvas"); - canvas.width = image.width; - canvas.height = image.height; - const context = canvas.getContext("2d"); - context.drawImage(image, 0, 0); - return context.getImageData(0, 0, canvas.width, canvas.height); - } - function detectImageTransparency(image, uvs, indices) { - const width = image.width; - const height = image.height; - const data = image.data; - const threshold = 253; - if (data.length / (width * height) !== 4) return false; - for (let i = 0; i < indices.length; i += 3) { - const centerUV = { - x: 0, - y: 0 - }; - for (let j = 0; j < 3; j++) { - const index = indices[i * 3 + j]; - const uv = { - x: uvs[index * 2 + 0], - y: uvs[index * 2 + 1] - }; - if (getAlphaByUv(image, uv) < threshold) return true; - centerUV.x += uv.x; - centerUV.y += uv.y; - } - centerUV.x /= 3; - centerUV.y /= 3; - if (getAlphaByUv(image, centerUV) < threshold) return true; - } - return false; - } - function getAlphaByUv(image, uv) { - const width = image.width; - const height = image.height; - let x = Math.round(uv.x * width) % width; - let y = Math.round(uv.y * height) % height; - if (x < 0) x += width; - if (y < 0) y += height; - const index = y * width + x; - return image.data[index * 4 + 3]; - } - const imageData = texture.image.data !== void 0 ? texture.image : createImageData(texture.image); - const group = geometry.groups[groupIndex]; - if (detectImageTransparency(imageData, geometry.attributes.uv.array, geometry.index.array.slice(group.start, group.start + group.count))) map.transparent = true; - }); - } -}; -var AnimationBuilder = class { - /** - * @param {Object} vmd - parsed VMD data - * @param {SkinnedMesh} mesh - tracks will be fitting to mesh - * @return {AnimationClip} - */ - build(vmd, mesh) { - const tracks = this.buildSkeletalAnimation(vmd, mesh).tracks; - const tracks2 = this.buildMorphAnimation(vmd, mesh).tracks; - for (let i = 0, il = tracks2.length; i < il; i++) tracks.push(tracks2[i]); - return new AnimationClip("", -1, tracks); - } - /** - * @param {Object} vmd - parsed VMD data - * @param {SkinnedMesh} mesh - tracks will be fitting to mesh - * @return {AnimationClip} - */ - buildSkeletalAnimation(vmd, mesh) { - function pushInterpolation(array, interpolation, index) { - array.push(interpolation[index + 0] / 127); - array.push(interpolation[index + 8] / 127); - array.push(interpolation[index + 4] / 127); - array.push(interpolation[index + 12] / 127); - } - const tracks = []; - const motions = {}; - const bones = mesh.skeleton.bones; - const boneNameDictionary = {}; - for (let i = 0, il = bones.length; i < il; i++) boneNameDictionary[bones[i].name] = true; - for (let i = 0; i < vmd.metadata.motionCount; i++) { - const motion = vmd.motions[i]; - const boneName = motion.boneName; - if (boneNameDictionary[boneName] === void 0) continue; - motions[boneName] = motions[boneName] || []; - motions[boneName].push(motion); - } - for (const key in motions) { - const array = motions[key]; - array.sort(function(a, b) { - return a.frameNum - b.frameNum; - }); - const times = []; - const positions = []; - const rotations = []; - const pInterpolations = []; - const rInterpolations = []; - const basePosition = mesh.skeleton.getBoneByName(key).position.toArray(); - for (let i = 0, il = array.length; i < il; i++) { - const time = array[i].frameNum / 30; - const position = array[i].position; - const rotation = array[i].rotation; - const interpolation = array[i].interpolation; - times.push(time); - for (let j = 0; j < 3; j++) positions.push(basePosition[j] + position[j]); - for (let j = 0; j < 4; j++) rotations.push(rotation[j]); - for (let j = 0; j < 3; j++) pushInterpolation(pInterpolations, interpolation, j); - pushInterpolation(rInterpolations, interpolation, 3); - } - const targetName = ".bones[" + key + "]"; - tracks.push(this._createTrack(targetName + ".position", VectorKeyframeTrack, times, positions, pInterpolations)); - tracks.push(this._createTrack(targetName + ".quaternion", QuaternionKeyframeTrack, times, rotations, rInterpolations)); - } - return new AnimationClip("", -1, tracks); - } - /** - * @param {Object} vmd - parsed VMD data - * @param {SkinnedMesh} mesh - tracks will be fitting to mesh - * @return {AnimationClip} - */ - buildMorphAnimation(vmd, mesh) { - const tracks = []; - const morphs = {}; - const morphTargetDictionary = mesh.morphTargetDictionary; - for (let i = 0; i < vmd.metadata.morphCount; i++) { - const morph = vmd.morphs[i]; - const morphName = morph.morphName; - if (morphTargetDictionary[morphName] === void 0) continue; - morphs[morphName] = morphs[morphName] || []; - morphs[morphName].push(morph); - } - for (const key in morphs) { - const array = morphs[key]; - array.sort(function(a, b) { - return a.frameNum - b.frameNum; - }); - const times = []; - const values = []; - for (let i = 0, il = array.length; i < il; i++) { - times.push(array[i].frameNum / 30); - values.push(array[i].weight); - } - tracks.push(new NumberKeyframeTrack(".morphTargetInfluences[" + morphTargetDictionary[key] + "]", times, values)); - } - return new AnimationClip("", -1, tracks); - } - /** - * @param {Object} vmd - parsed VMD data - * @return {AnimationClip} - */ - buildCameraAnimation(vmd) { - function pushVector3(array, vec) { - array.push(vec.x); - array.push(vec.y); - array.push(vec.z); - } - function pushQuaternion(array, q) { - array.push(q.x); - array.push(q.y); - array.push(q.z); - array.push(q.w); - } - function pushInterpolation(array, interpolation, index) { - array.push(interpolation[index * 4 + 0] / 127); - array.push(interpolation[index * 4 + 1] / 127); - array.push(interpolation[index * 4 + 2] / 127); - array.push(interpolation[index * 4 + 3] / 127); - } - const cameras = vmd.cameras === void 0 ? [] : vmd.cameras.slice(); - cameras.sort(function(a, b) { - return a.frameNum - b.frameNum; - }); - const times = []; - const centers = []; - const quaternions = []; - const positions = []; - const fovs = []; - const cInterpolations = []; - const qInterpolations = []; - const pInterpolations = []; - const fInterpolations = []; - const quaternion = new Quaternion(); - const euler = new Euler(); - const position = new Vector3(); - const center = new Vector3(); - for (let i = 0, il = cameras.length; i < il; i++) { - const motion = cameras[i]; - const time = motion.frameNum / 30; - const pos = motion.position; - const rot = motion.rotation; - const distance = motion.distance; - const fov = motion.fov; - const interpolation = motion.interpolation; - times.push(time); - position.set(0, 0, -distance); - center.set(pos[0], pos[1], pos[2]); - euler.set(-rot[0], -rot[1], -rot[2]); - quaternion.setFromEuler(euler); - position.add(center); - position.applyQuaternion(quaternion); - pushVector3(centers, center); - pushQuaternion(quaternions, quaternion); - pushVector3(positions, position); - fovs.push(fov); - for (let j = 0; j < 3; j++) pushInterpolation(cInterpolations, interpolation, j); - pushInterpolation(qInterpolations, interpolation, 3); - for (let j = 0; j < 3; j++) pushInterpolation(pInterpolations, interpolation, 4); - pushInterpolation(fInterpolations, interpolation, 5); - } - const tracks = []; - tracks.push(this._createTrack("target.position", VectorKeyframeTrack, times, centers, cInterpolations)); - tracks.push(this._createTrack(".quaternion", QuaternionKeyframeTrack, times, quaternions, qInterpolations)); - tracks.push(this._createTrack(".position", VectorKeyframeTrack, times, positions, pInterpolations)); - tracks.push(this._createTrack(".fov", NumberKeyframeTrack, times, fovs, fInterpolations)); - return new AnimationClip("", -1, tracks); - } - _createTrack(node, typedKeyframeTrack, times, values, interpolations) { - if (times.length > 2) { - times = times.slice(); - values = values.slice(); - interpolations = interpolations.slice(); - const stride = values.length / times.length; - const interpolateStride = interpolations.length / times.length; - let index = 1; - for (let aheadIndex = 2, endIndex = times.length; aheadIndex < endIndex; aheadIndex++) { - for (let i = 0; i < stride; i++) if (values[index * stride + i] !== values[(index - 1) * stride + i] || values[index * stride + i] !== values[aheadIndex * stride + i]) { - index++; - break; - } - if (aheadIndex > index) { - times[index] = times[aheadIndex]; - for (let i = 0; i < stride; i++) values[index * stride + i] = values[aheadIndex * stride + i]; - for (let i = 0; i < interpolateStride; i++) interpolations[index * interpolateStride + i] = interpolations[aheadIndex * interpolateStride + i]; - } - } - times.length = index + 1; - values.length = (index + 1) * stride; - interpolations.length = (index + 1) * interpolateStride; - } - const track = new typedKeyframeTrack(node, times, values); - track.createInterpolant = function InterpolantFactoryMethodCubicBezier(result) { - return new CubicBezierInterpolation(this.times, this.values, this.getValueSize(), result, new Float32Array(interpolations)); - }; - return track; - } -}; -var CubicBezierInterpolation = class extends Interpolant { - constructor(parameterPositions, sampleValues, sampleSize, resultBuffer, params) { - super(parameterPositions, sampleValues, sampleSize, resultBuffer); - this.interpolationParams = params; - } - interpolate_(i1, t0, t, t1) { - const result = this.resultBuffer; - const values = this.sampleValues; - const stride = this.valueSize; - const params = this.interpolationParams; - const offset1 = i1 * stride; - const offset0 = offset1 - stride; - const weight1 = t1 - t0 < 1 / 30 * 1.5 ? 0 : (t - t0) / (t1 - t0); - if (stride === 4) { - const x1 = params[i1 * 4 + 0]; - const x2 = params[i1 * 4 + 1]; - const y1 = params[i1 * 4 + 2]; - const y2 = params[i1 * 4 + 3]; - const ratio = this._calculate(x1, x2, y1, y2, weight1); - Quaternion.slerpFlat(result, 0, values, offset0, values, offset1, ratio); - } else if (stride === 3) for (let i = 0; i !== stride; ++i) { - const x1 = params[i1 * 12 + i * 4 + 0]; - const x2 = params[i1 * 12 + i * 4 + 1]; - const y1 = params[i1 * 12 + i * 4 + 2]; - const y2 = params[i1 * 12 + i * 4 + 3]; - const ratio = this._calculate(x1, x2, y1, y2, weight1); - result[i] = values[offset0 + i] * (1 - ratio) + values[offset1 + i] * ratio; - } - else { - const x1 = params[i1 * 4 + 0]; - const x2 = params[i1 * 4 + 1]; - const y1 = params[i1 * 4 + 2]; - const y2 = params[i1 * 4 + 3]; - const ratio = this._calculate(x1, x2, y1, y2, weight1); - result[0] = values[offset0] * (1 - ratio) + values[offset1] * ratio; - } - return result; - } - _calculate(x1, x2, y1, y2, x) { - let c = .5; - let t = c; - let s = 1 - t; - const loop = 15; - const eps = 1e-5; - const math = Math; - let sst3, stt3, ttt; - for (let i = 0; i < loop; i++) { - sst3 = 3 * s * s * t; - stt3 = 3 * s * t * t; - ttt = t * t * t; - const ft = sst3 * x1 + stt3 * x2 + ttt - x; - if (math.abs(ft) < eps) break; - c /= 2; - t += ft < 0 ? c : -c; - s = 1 - t; - } - return sst3 * y1 + stt3 * y2 + ttt; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/KTXLoader.js -var KTXLoader = class extends CompressedTextureLoader { - constructor(manager) { - super(manager); - } - parse(buffer, loadMipmaps) { - const ktx = new KhronosTextureContainer(buffer, 1); - return { - mipmaps: ktx.mipmaps(loadMipmaps), - width: ktx.pixelWidth, - height: ktx.pixelHeight, - format: ktx.glInternalFormat, - isCubemap: ktx.numberOfFaces === 6, - mipmapCount: ktx.numberOfMipmapLevels - }; - } -}; -var HEADER_LEN = 64; -var COMPRESSED_2D = 0; -var KhronosTextureContainer = class { - /** - * @param {ArrayBuffer} arrayBuffer- contents of the KTX container file - * @param {number} facesExpected- should be either 1 or 6, based whether a cube texture or or - * @param {boolean} threeDExpected- provision for indicating that data should be a 3D texture, not implemented - * @param {boolean} textureArrayExpected- provision for indicating that data should be a texture array, not implemented - */ - constructor(arrayBuffer, facesExpected) { - this.arrayBuffer = arrayBuffer; - const identifier = new Uint8Array(this.arrayBuffer, 0, 12); - if (identifier[0] !== 171 || identifier[1] !== 75 || identifier[2] !== 84 || identifier[3] !== 88 || identifier[4] !== 32 || identifier[5] !== 49 || identifier[6] !== 49 || identifier[7] !== 187 || identifier[8] !== 13 || identifier[9] !== 10 || identifier[10] !== 26 || identifier[11] !== 10) { - console.error("texture missing KTX identifier"); - return; - } - const dataSize = Uint32Array.BYTES_PER_ELEMENT; - const headerDataView = new DataView(this.arrayBuffer, 12, 13 * dataSize); - const littleEndian = headerDataView.getUint32(0, true) === 67305985; - this.glType = headerDataView.getUint32(1 * dataSize, littleEndian); - this.glTypeSize = headerDataView.getUint32(2 * dataSize, littleEndian); - this.glFormat = headerDataView.getUint32(3 * dataSize, littleEndian); - this.glInternalFormat = headerDataView.getUint32(4 * dataSize, littleEndian); - this.glBaseInternalFormat = headerDataView.getUint32(5 * dataSize, littleEndian); - this.pixelWidth = headerDataView.getUint32(6 * dataSize, littleEndian); - this.pixelHeight = headerDataView.getUint32(7 * dataSize, littleEndian); - this.pixelDepth = headerDataView.getUint32(8 * dataSize, littleEndian); - this.numberOfArrayElements = headerDataView.getUint32(9 * dataSize, littleEndian); - this.numberOfFaces = headerDataView.getUint32(10 * dataSize, littleEndian); - this.numberOfMipmapLevels = headerDataView.getUint32(11 * dataSize, littleEndian); - this.bytesOfKeyValueData = headerDataView.getUint32(12 * dataSize, littleEndian); - if (this.glType !== 0) { - console.warn("only compressed formats currently supported"); - return; - } else this.numberOfMipmapLevels = Math.max(1, this.numberOfMipmapLevels); - if (this.pixelHeight === 0 || this.pixelDepth !== 0) { - console.warn("only 2D textures currently supported"); - return; - } - if (this.numberOfArrayElements !== 0) { - console.warn("texture arrays not currently supported"); - return; - } - if (this.numberOfFaces !== facesExpected) { - console.warn("number of faces expected" + facesExpected + ", but found " + this.numberOfFaces); - return; - } - this.loadType = COMPRESSED_2D; - } - mipmaps(loadMipmaps) { - const mipmaps = []; - let dataOffset = HEADER_LEN + this.bytesOfKeyValueData; - let width = this.pixelWidth; - let height = this.pixelHeight; - const mipmapCount = loadMipmaps ? this.numberOfMipmapLevels : 1; - for (let level = 0; level < mipmapCount; level++) { - const imageSize = new Int32Array(this.arrayBuffer, dataOffset, 1)[0]; - dataOffset += 4; - for (let face = 0; face < this.numberOfFaces; face++) { - const byteArray = new Uint8Array(this.arrayBuffer, dataOffset, imageSize); - mipmaps.push({ - data: byteArray, - width, - height - }); - dataOffset += imageSize; - dataOffset += 3 - (imageSize + 3) % 4; - } - width = Math.max(1, width * .5); - height = Math.max(1, height * .5); - } - return mipmaps; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/TiltLoader.js -var TiltLoader = class extends Loader { - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setResponseType("arraybuffer"); - loader.setWithCredentials(this.withCredentials); - loader.load(url, function(buffer) { - try { - onLoad(scope.parse(buffer)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(buffer) { - const group = new Group(); - const zip = unzipSync(new Uint8Array(buffer.slice(16))); - const metadata = JSON.parse(strFromU8(zip["metadata.json"])); - const data = new DataView(zip["data.sketch"].buffer); - const num_strokes = data.getInt32(16, true); - const brushes = {}; - let offset = 20; - for (let i = 0; i < num_strokes; i++) { - const brush_index = data.getInt32(offset, true); - const brush_color = [ - data.getFloat32(offset + 4, true), - data.getFloat32(offset + 8, true), - data.getFloat32(offset + 12, true), - data.getFloat32(offset + 16, true) - ]; - const brush_size = data.getFloat32(offset + 20, true); - const stroke_mask = data.getUint32(offset + 24, true); - const controlpoint_mask = data.getUint32(offset + 28, true); - let offset_stroke_mask = 0; - let offset_controlpoint_mask = 0; - for (let j = 0; j < 4; j++) { - const byte = 1 << j; - if ((stroke_mask & byte) > 0) offset_stroke_mask += 4; - if ((controlpoint_mask & byte) > 0) offset_controlpoint_mask += 4; - } - offset = offset + 28 + offset_stroke_mask + 4; - const num_control_points = data.getInt32(offset, true); - const positions = new Float32Array(num_control_points * 3); - const quaternions = new Float32Array(num_control_points * 4); - offset = offset + 4; - for (let j = 0, k = 0; j < positions.length; j += 3, k += 4) { - positions[j + 0] = data.getFloat32(offset + 0, true); - positions[j + 1] = data.getFloat32(offset + 4, true); - positions[j + 2] = data.getFloat32(offset + 8, true); - quaternions[k + 0] = data.getFloat32(offset + 12, true); - quaternions[k + 1] = data.getFloat32(offset + 16, true); - quaternions[k + 2] = data.getFloat32(offset + 20, true); - quaternions[k + 3] = data.getFloat32(offset + 24, true); - offset = offset + 28 + offset_controlpoint_mask; - } - if (brush_index in brushes === false) brushes[brush_index] = []; - brushes[brush_index].push([ - positions, - quaternions, - brush_size, - brush_color - ]); - } - for (const brush_index in brushes) { - const geometry = new StrokeGeometry(brushes[brush_index]); - const material = getMaterial(metadata.BrushIndex[brush_index]); - group.add(new Mesh(geometry, material)); - } - return group; - } -}; -var StrokeGeometry = class extends BufferGeometry { - constructor(strokes) { - super(); - const vertices = []; - const colors = []; - const uvs = []; - const position = new Vector3(); - const prevPosition = new Vector3(); - const quaternion = new Quaternion(); - const prevQuaternion = new Quaternion(); - const vector1 = new Vector3(); - const vector2 = new Vector3(); - const vector3 = new Vector3(); - const vector4 = new Vector3(); - for (const k in strokes) { - const stroke = strokes[k]; - const positions = stroke[0]; - const quaternions = stroke[1]; - const size = stroke[2]; - const color = stroke[3]; - prevPosition.fromArray(positions, 0); - prevQuaternion.fromArray(quaternions, 0); - for (let i = 3, j = 4, l = positions.length; i < l; i += 3, j += 4) { - position.fromArray(positions, i); - quaternion.fromArray(quaternions, j); - vector1.set(-size, 0, 0); - vector1.applyQuaternion(quaternion); - vector1.add(position); - vector2.set(size, 0, 0); - vector2.applyQuaternion(quaternion); - vector2.add(position); - vector3.set(size, 0, 0); - vector3.applyQuaternion(prevQuaternion); - vector3.add(prevPosition); - vector4.set(-size, 0, 0); - vector4.applyQuaternion(prevQuaternion); - vector4.add(prevPosition); - vertices.push(vector1.x, vector1.y, -vector1.z); - vertices.push(vector2.x, vector2.y, -vector2.z); - vertices.push(vector4.x, vector4.y, -vector4.z); - vertices.push(vector2.x, vector2.y, -vector2.z); - vertices.push(vector3.x, vector3.y, -vector3.z); - vertices.push(vector4.x, vector4.y, -vector4.z); - prevPosition.copy(position); - prevQuaternion.copy(quaternion); - colors.push(...color); - colors.push(...color); - colors.push(...color); - colors.push(...color); - colors.push(...color); - colors.push(...color); - const p1 = i / l; - const p2 = (i - 3) / l; - uvs.push(p1, 0); - uvs.push(p1, 1); - uvs.push(p2, 0); - uvs.push(p1, 1); - uvs.push(p2, 1); - uvs.push(p2, 0); - } - } - this.setAttribute("position", new BufferAttribute(new Float32Array(vertices), 3)); - this.setAttribute("color", new BufferAttribute(new Float32Array(colors), 4)); - this.setAttribute("uv", new BufferAttribute(new Float32Array(uvs), 2)); - } -}; -var BRUSH_LIST_ARRAY = { - "89d104cd-d012-426b-b5b3-bbaee63ac43c": "Bubbles", - "700f3aa8-9a7c-2384-8b8a-ea028905dd8c": "CelVinyl", - "0f0ff7b2-a677-45eb-a7d6-0cd7206f4816": "ChromaticWave", - "1161af82-50cf-47db-9706-0c3576d43c43": "CoarseBristles", - "79168f10-6961-464a-8be1-57ed364c5600": "CoarseBristlesSingleSided", - "1caa6d7d-f015-3f54-3a4b-8b5354d39f81": "Comet", - "c8313697-2563-47fc-832e-290f4c04b901": "DiamondHull", - "4391aaaa-df73-4396-9e33-31e4e4930b27": "Disco", - "d1d991f2-e7a0-4cf1-b328-f57e915e6260": "DotMarker", - "6a1cf9f9-032c-45ec-9b1d-a6680bee30f7": "Dots", - "0d3889f3-3ede-470c-8af4-f44813306126": "DoubleTaperedFlat", - "0d3889f3-3ede-470c-8af4-de4813306126": "DoubleTaperedMarker", - "d0262945-853c-4481-9cbd-88586bed93cb": "DuctTape", - "3ca16e2f-bdcd-4da2-8631-dcef342f40f1": "DuctTapeSingleSided", - "f6e85de3-6dcc-4e7f-87fd-cee8c3d25d51": "Electricity", - "02ffb866-7fb2-4d15-b761-1012cefb1360": "Embers", - "cb92b597-94ca-4255-b017-0e3f42f12f9e": "Fire", - "2d35bcf0-e4d8-452c-97b1-3311be063130": "Flat", - "55303bc4-c749-4a72-98d9-d23e68e76e18": "FlatDeprecated", - "280c0a7a-aad8-416c-a7d2-df63d129ca70": "FlatSingleSided", - "cf019139-d41c-4eb0-a1d0-5cf54b0a42f3": "Highlighter", - "6a1cf9f9-032c-45ec-9b6e-a6680bee32e9": "HyperGrid", - "dce872c2-7b49-4684-b59b-c45387949c5c": "Hypercolor", - "e8ef32b1-baa8-460a-9c2c-9cf8506794f5": "HypercolorSingleSided", - "2f212815-f4d3-c1a4-681a-feeaf9c6dc37": "Icing", - "f5c336cf-5108-4b40-ade9-c687504385ab": "Ink", - "c0012095-3ffd-4040-8ee1-fc180d346eaa": "InkSingleSided", - "4a76a27a-44d8-4bfe-9a8c-713749a499b0": "Leaves", - "ea19de07-d0c0-4484-9198-18489a3c1487": "LeavesSingleSided", - "2241cd32-8ba2-48a5-9ee7-2caef7e9ed62": "Light", - "4391aaaa-df81-4396-9e33-31e4e4930b27": "LightWire", - "d381e0f5-3def-4a0d-8853-31e9200bcbda": "Lofted", - "429ed64a-4e97-4466-84d3-145a861ef684": "Marker", - "79348357-432d-4746-8e29-0e25c112e3aa": "MatteHull", - "b2ffef01-eaaa-4ab5-aa64-95a2c4f5dbc6": "NeonPulse", - "f72ec0e7-a844-4e38-82e3-140c44772699": "OilPaint", - "c515dad7-4393-4681-81ad-162ef052241b": "OilPaintSingleSided", - "f1114e2e-eb8d-4fde-915a-6e653b54e9f5": "Paper", - "759f1ebd-20cd-4720-8d41-234e0da63716": "PaperSingleSided", - "e0abbc80-0f80-e854-4970-8924a0863dcc": "Petal", - "c33714d1-b2f9-412e-bd50-1884c9d46336": "Plasma", - "ad1ad437-76e2-450d-a23a-e17f8310b960": "Rainbow", - "faaa4d44-fcfb-4177-96be-753ac0421ba3": "ShinyHull", - "70d79cca-b159-4f35-990c-f02193947fe8": "Smoke", - "d902ed8b-d0d1-476c-a8de-878a79e3a34c": "Snow", - "accb32f5-4509-454f-93f8-1df3fd31df1b": "SoftHighlighter", - "cf7f0059-7aeb-53a4-2b67-c83d863a9ffa": "Spikes", - "8dc4a70c-d558-4efd-a5ed-d4e860f40dc3": "Splatter", - "7a1c8107-50c5-4b70-9a39-421576d6617e": "SplatterSingleSided", - "0eb4db27-3f82-408d-b5a1-19ebd7d5b711": "Stars", - "44bb800a-fbc3-4592-8426-94ecb05ddec3": "Streamers", - "0077f88c-d93a-42f3-b59b-b31c50cdb414": "Taffy", - "b468c1fb-f254-41ed-8ec9-57030bc5660c": "TaperedFlat", - "c8ccb53d-ae13-45ef-8afb-b730d81394eb": "TaperedFlatSingleSided", - "d90c6ad8-af0f-4b54-b422-e0f92abe1b3c": "TaperedMarker", - "1a26b8c0-8a07-4f8a-9fac-d2ef36e0cad0": "TaperedMarker_Flat", - "75b32cf0-fdd6-4d89-a64b-e2a00b247b0f": "ThickPaint", - "fdf0326a-c0d1-4fed-b101-9db0ff6d071f": "ThickPaintSingleSided", - "4391385a-df73-4396-9e33-31e4e4930b27": "Toon", - "a8fea537-da7c-4d4b-817f-24f074725d6d": "UnlitHull", - "d229d335-c334-495a-a801-660ac8a87360": "VelvetInk", - "10201aa3-ebc2-42d8-84b7-2e63f6eeb8ab": "Waveform", - "b67c0e81-ce6d-40a8-aeb0-ef036b081aa3": "WetPaint", - "dea67637-cd1a-27e4-c9b1-52f4bbcb84e5": "WetPaintSingleSided", - "5347acf0-a8e2-47b6-8346-30c70719d763": "WigglyGraphite", - "e814fef1-97fd-7194-4a2f-50c2bb918be2": "WigglyGraphiteSingleSided", - "4391385a-cf83-4396-9e33-31e4e4930b27": "Wire" -}; -var common = { colors: { - BloomColor: ` - vec3 BloomColor(vec3 color, float gain) { - // Guarantee that there's at least a little bit of all 3 channels. - // This makes fully-saturated strokes (which only have 2 non-zero - // color channels) eventually clip to white rather than to a secondary. - float cmin = length(color.rgb) * .05; - color.rgb = max(color.rgb, vec3(cmin, cmin, cmin)); - // If we try to remove this pow() from .a, it brightens up - // pressure-sensitive strokes; looks better as-is. - color = pow(color, vec3(2.2)); - color.rgb *= 2. * exp(gain * 10.); - return color; - } - `, - LinearToSrgb: ` - vec3 LinearToSrgb(vec3 color) { - // Approximation http://chilliant.blogspot.com/2012/08/srgb-approximations-for-hlsl.html - vec3 linearColor = color.rgb; - vec3 S1 = sqrt(linearColor); - vec3 S2 = sqrt(S1); - vec3 S3 = sqrt(S2); - color.rgb = 0.662002687 * S1 + 0.684122060 * S2 - 0.323583601 * S3 - 0.0225411470 * linearColor; - return color; - } - `, - hsv: ` - // uniform sampler2D lookupTex; - vec4 lookup(vec4 textureColor) { - return textureColor; - } - - vec3 lookup(vec3 textureColor) { - return textureColor; - } - - vec3 hsv2rgb( vec3 hsv ) { - vec3 rgb = clamp( abs(mod(hsv.x*6.0+vec3(0.0,4.0,2.0),6.0)-3.0)-1.0, 0.0, 1.0 ); - return hsv.z * mix( vec3(1.0), rgb, hsv.y); - } - - vec3 rgb2hsv( vec3 rgb ) { - vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); - vec4 p = mix(vec4(rgb.bg, K.wz), vec4(rgb.gb, K.xy), step(rgb.b, rgb.g)); - vec4 q = mix(vec4(p.xyw, rgb.r), vec4(rgb.r, p.yzx), step(p.x, rgb.r)); - - float d = q.x - min(q.w, q.y); - float e = 1.0e-10; - - return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); - } - `, - SrgbToLinear: ` - vec3 SrgbToLinear(vec3 color) { - // Approximation http://chilliant.blogspot.com/2012/08/srgb-approximations-for-hlsl.html - vec3 sRGB = color.rgb; - color.rgb = sRGB * (sRGB * (sRGB * 0.305306011 + 0.682171111) + 0.012522878); - return color; - } - ` -} }; -var shaders = () => ({ Light: { - uniforms: { - mainTex: { value: new TextureLoader().setPath("./textures/tiltbrush/").loader.load("Light.webp") }, - alphaTest: { value: .067 }, - emission_gain: { value: .45 }, - alpha: { value: 1 } - }, - vertexShader: ` - precision highp float; - precision highp int; - - attribute vec2 uv; - attribute vec4 color; - attribute vec3 position; - - uniform mat4 modelMatrix; - uniform mat4 modelViewMatrix; - uniform mat4 projectionMatrix; - uniform mat4 viewMatrix; - uniform mat3 normalMatrix; - uniform vec3 cameraPosition; - - varying vec2 vUv; - varying vec3 vColor; - - ${common.colors.LinearToSrgb} - ${common.colors.hsv} - - void main() { - - vUv = uv; - - vColor = lookup(color.rgb); - - vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 ); - - gl_Position = projectionMatrix * mvPosition; - - } - `, - fragmentShader: ` - precision highp float; - precision highp int; - - uniform float emission_gain; - - uniform sampler2D mainTex; - uniform float alphaTest; - - varying vec2 vUv; - varying vec3 vColor; - - ${common.colors.BloomColor} - ${common.colors.SrgbToLinear} - - void main(){ - vec4 col = texture2D(mainTex, vUv); - vec3 color = vColor; - color = BloomColor(color, emission_gain); - color = color * col.rgb; - color = color * col.a; - color = SrgbToLinear(color); - gl_FragColor = vec4(color, 1.0); - } - `, - side: 2, - transparent: true, - depthFunc: 2, - depthWrite: true, - depthTest: false, - blending: 5, - blendDst: 201, - blendDstAlpha: 201, - blendEquation: 100, - blendEquationAlpha: 100, - blendSrc: 201, - blendSrcAlpha: 201 -} }); -function getMaterial(GUID) { - switch (BRUSH_LIST_ARRAY[GUID]) { - case "Light": return new RawShaderMaterial(shaders().Light); - default: return new MeshBasicMaterial({ - vertexColors: true, - side: 2 - }); - } -} -//#endregion -//#region node_modules/three-stdlib/loaders/DRACOLoader.js -var _taskCache = /* @__PURE__ */ new WeakMap(); -var DRACOLoader = class extends Loader { - constructor(manager) { - super(manager); - 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(path) { - this.decoderPath = path; - return this; - } - setDecoderConfig(config) { - this.decoderConfig = config; - return this; - } - setWorkerLimit(workerLimit) { - this.workerLimit = workerLimit; - return this; - } - load(url, onLoad, onProgress, onError) { - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setResponseType("arraybuffer"); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - loader.load(url, (buffer) => { - const taskConfig = { - attributeIDs: this.defaultAttributeIDs, - attributeTypes: this.defaultAttributeTypes, - useUniqueIDs: false - }; - this.decodeGeometry(buffer, taskConfig).then(onLoad).catch(onError); - }, onProgress, onError); - } - /** @deprecated Kept for backward-compatibility with previous DRACOLoader versions. */ - decodeDracoFile(buffer, callback, attributeIDs, attributeTypes) { - const taskConfig = { - attributeIDs: attributeIDs || this.defaultAttributeIDs, - attributeTypes: attributeTypes || this.defaultAttributeTypes, - useUniqueIDs: !!attributeIDs - }; - this.decodeGeometry(buffer, taskConfig).then(callback); - } - decodeGeometry(buffer, taskConfig) { - for (const attribute in taskConfig.attributeTypes) { - const type = taskConfig.attributeTypes[attribute]; - if (type.BYTES_PER_ELEMENT !== void 0) taskConfig.attributeTypes[attribute] = type.name; - } - const taskKey = JSON.stringify(taskConfig); - if (_taskCache.has(buffer)) { - const cachedTask = _taskCache.get(buffer); - if (cachedTask.key === taskKey) return cachedTask.promise; - else if (buffer.byteLength === 0) throw new Error("THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred."); - } - let worker; - const taskID = this.workerNextTaskID++; - const taskCost = buffer.byteLength; - const geometryPending = this._getWorker(taskID, taskCost).then((_worker) => { - worker = _worker; - return new Promise((resolve, reject) => { - worker._callbacks[taskID] = { - resolve, - reject - }; - worker.postMessage({ - type: "decode", - id: taskID, - taskConfig, - buffer - }, [buffer]); - }); - }).then((message) => this._createGeometry(message.geometry)); - geometryPending.catch(() => true).then(() => { - if (worker && taskID) this._releaseTask(worker, taskID); - }); - _taskCache.set(buffer, { - key: taskKey, - promise: geometryPending - }); - return geometryPending; - } - _createGeometry(geometryData) { - const geometry = new BufferGeometry(); - if (geometryData.index) geometry.setIndex(new BufferAttribute(geometryData.index.array, 1)); - for (let i = 0; i < geometryData.attributes.length; i++) { - const attribute = geometryData.attributes[i]; - const name = attribute.name; - const array = attribute.array; - const itemSize = attribute.itemSize; - geometry.setAttribute(name, new BufferAttribute(array, itemSize)); - } - return geometry; - } - _loadLibrary(url, responseType) { - const loader = new FileLoader(this.manager); - loader.setPath(this.decoderPath); - loader.setResponseType(responseType); - loader.setWithCredentials(this.withCredentials); - return new Promise((resolve, reject) => { - loader.load(url, resolve, void 0, reject); - }); - } - preload() { - this._initDecoder(); - return this; - } - _initDecoder() { - if (this.decoderPending) return this.decoderPending; - const useJS = typeof WebAssembly !== "object" || this.decoderConfig.type === "js"; - const librariesPending = []; - if (useJS) librariesPending.push(this._loadLibrary("draco_decoder.js", "text")); - else { - librariesPending.push(this._loadLibrary("draco_wasm_wrapper.js", "text")); - librariesPending.push(this._loadLibrary("draco_decoder.wasm", "arraybuffer")); - } - this.decoderPending = Promise.all(librariesPending).then((libraries) => { - const jsContent = libraries[0]; - if (!useJS) this.decoderConfig.wasmBinary = libraries[1]; - const fn = DRACOWorker.toString(); - const body = [ - "/* draco decoder */", - jsContent, - "", - "/* worker */", - fn.substring(fn.indexOf("{") + 1, fn.lastIndexOf("}")) - ].join("\n"); - this.workerSourceURL = URL.createObjectURL(new Blob([body])); - }); - return this.decoderPending; - } - _getWorker(taskID, taskCost) { - return this._initDecoder().then(() => { - if (this.workerPool.length < this.workerLimit) { - const worker2 = new Worker(this.workerSourceURL); - worker2._callbacks = {}; - worker2._taskCosts = {}; - worker2._taskLoad = 0; - worker2.postMessage({ - type: "init", - decoderConfig: this.decoderConfig - }); - worker2.onmessage = function(e) { - const message = e.data; - switch (message.type) { - case "decode": - worker2._callbacks[message.id].resolve(message); - break; - case "error": - worker2._callbacks[message.id].reject(message); - break; - default: console.error("THREE.DRACOLoader: Unexpected message, \"" + message.type + "\""); - } - }; - this.workerPool.push(worker2); - } else this.workerPool.sort(function(a, b) { - return a._taskLoad > b._taskLoad ? -1 : 1; - }); - const worker = this.workerPool[this.workerPool.length - 1]; - worker._taskCosts[taskID] = taskCost; - worker._taskLoad += taskCost; - return worker; - }); - } - _releaseTask(worker, taskID) { - worker._taskLoad -= worker._taskCosts[taskID]; - delete worker._callbacks[taskID]; - delete worker._taskCosts[taskID]; - } - debug() { - console.log("Task load: ", this.workerPool.map((worker) => worker._taskLoad)); - } - dispose() { - for (let i = 0; i < this.workerPool.length; ++i) this.workerPool[i].terminate(); - this.workerPool.length = 0; - return this; - } -}; -function DRACOWorker() { - let decoderConfig; - let decoderPending; - onmessage = function(e) { - const message = e.data; - switch (message.type) { - case "init": - decoderConfig = message.decoderConfig; - decoderPending = new Promise(function(resolve) { - decoderConfig.onModuleLoaded = function(draco) { - resolve({ draco }); - }; - DracoDecoderModule(decoderConfig); - }); - break; - case "decode": - const buffer = message.buffer; - const taskConfig = message.taskConfig; - decoderPending.then((module) => { - const draco = module.draco; - const decoder = new draco.Decoder(); - const decoderBuffer = new draco.DecoderBuffer(); - decoderBuffer.Init(new Int8Array(buffer), buffer.byteLength); - try { - const geometry = decodeGeometry(draco, decoder, decoderBuffer, taskConfig); - const buffers = geometry.attributes.map((attr) => attr.array.buffer); - if (geometry.index) buffers.push(geometry.index.array.buffer); - self.postMessage({ - type: "decode", - id: message.id, - geometry - }, buffers); - } catch (error) { - console.error(error); - self.postMessage({ - type: "error", - id: message.id, - error: error.message - }); - } finally { - draco.destroy(decoderBuffer); - draco.destroy(decoder); - } - }); - break; - } - }; - function decodeGeometry(draco, decoder, decoderBuffer, taskConfig) { - const attributeIDs = taskConfig.attributeIDs; - const attributeTypes = taskConfig.attributeTypes; - let dracoGeometry; - let decodingStatus; - const geometryType = decoder.GetEncodedGeometryType(decoderBuffer); - if (geometryType === draco.TRIANGULAR_MESH) { - dracoGeometry = new draco.Mesh(); - decodingStatus = decoder.DecodeBufferToMesh(decoderBuffer, dracoGeometry); - } else if (geometryType === draco.POINT_CLOUD) { - dracoGeometry = new draco.PointCloud(); - decodingStatus = decoder.DecodeBufferToPointCloud(decoderBuffer, dracoGeometry); - } else throw new Error("THREE.DRACOLoader: Unexpected geometry type."); - if (!decodingStatus.ok() || dracoGeometry.ptr === 0) throw new Error("THREE.DRACOLoader: Decoding failed: " + decodingStatus.error_msg()); - const geometry = { - index: null, - attributes: [] - }; - for (const attributeName in attributeIDs) { - const attributeType = self[attributeTypes[attributeName]]; - let attribute; - let attributeID; - if (taskConfig.useUniqueIDs) { - attributeID = attributeIDs[attributeName]; - attribute = decoder.GetAttributeByUniqueId(dracoGeometry, attributeID); - } else { - attributeID = decoder.GetAttributeId(dracoGeometry, draco[attributeIDs[attributeName]]); - if (attributeID === -1) continue; - attribute = decoder.GetAttribute(dracoGeometry, attributeID); - } - geometry.attributes.push(decodeAttribute(draco, decoder, dracoGeometry, attributeName, attributeType, attribute)); - } - if (geometryType === draco.TRIANGULAR_MESH) geometry.index = decodeIndex(draco, decoder, dracoGeometry); - draco.destroy(dracoGeometry); - return geometry; - } - function decodeIndex(draco, decoder, dracoGeometry) { - const numIndices = dracoGeometry.num_faces() * 3; - const byteLength = numIndices * 4; - const ptr = draco._malloc(byteLength); - decoder.GetTrianglesUInt32Array(dracoGeometry, byteLength, ptr); - const index = new Uint32Array(draco.HEAPF32.buffer, ptr, numIndices).slice(); - draco._free(ptr); - return { - array: index, - itemSize: 1 - }; - } - function decodeAttribute(draco, decoder, dracoGeometry, attributeName, attributeType, attribute) { - const numComponents = attribute.num_components(); - const numValues = dracoGeometry.num_points() * numComponents; - const byteLength = numValues * attributeType.BYTES_PER_ELEMENT; - const dataType = getDracoDataType(draco, attributeType); - const ptr = draco._malloc(byteLength); - decoder.GetAttributeDataArrayForAllPoints(dracoGeometry, attribute, dataType, byteLength, ptr); - const array = new attributeType(draco.HEAPF32.buffer, ptr, numValues).slice(); - draco._free(ptr); - return { - name: attributeName, - array, - itemSize: numComponents - }; - } - function getDracoDataType(draco, attributeType) { - switch (attributeType) { - case Float32Array: return draco.DT_FLOAT32; - case Int8Array: return draco.DT_INT8; - case Int16Array: return draco.DT_INT16; - case Int32Array: return draco.DT_INT32; - case Uint8Array: return draco.DT_UINT8; - case Uint16Array: return draco.DT_UINT16; - case Uint32Array: return draco.DT_UINT32; - } - } -} -//#endregion -//#region node_modules/three-stdlib/loaders/HDRCubeTextureLoader.js -var HDRCubeTextureLoader = class extends Loader { - constructor(manager) { - super(manager); - this.hdrLoader = new RGBELoader(); - this.type = HalfFloatType; - } - load(urls, onLoad, onProgress, onError) { - if (typeof urls === "string") urls = [urls]; - else if (!Array.isArray(urls)) { - console.warn("THREE.HDRCubeTextureLoader signature has changed. Use .setDataType() instead."); - this.setDataType(urls); - urls = onLoad; - onLoad = onProgress; - onProgress = onError; - onError = arguments[4]; - } - const texture = new CubeTexture(); - texture.type = this.type; - switch (texture.type) { - case FloatType: - case HalfFloatType: - if ("colorSpace" in texture) texture.colorSpace = "srgb-linear"; - else texture.encoding = 3e3; - texture.minFilter = LinearFilter; - texture.magFilter = LinearFilter; - texture.generateMipmaps = false; - break; - } - const scope = this; - let loaded = 0; - function loadHDRData(i, onLoad2, onProgress2, onError2) { - new FileLoader(scope.manager).setPath(scope.path).setResponseType("arraybuffer").setWithCredentials(scope.withCredentials).load(urls[i], function(buffer) { - loaded++; - const texData = scope.hdrLoader.parse(buffer); - if (!texData) return; - if (texData.data !== void 0) { - const dataTexture = new DataTexture(texData.data, texData.width, texData.height); - dataTexture.type = texture.type; - if ("colorSpace" in dataTexture) dataTexture.colorSpace = texture.SRGBColorSpace; - else dataTexture.encoding = texture.encoding; - dataTexture.format = texture.format; - dataTexture.minFilter = texture.minFilter; - dataTexture.magFilter = texture.magFilter; - dataTexture.generateMipmaps = texture.generateMipmaps; - texture.images[i] = dataTexture; - } - if (loaded === 6) { - texture.needsUpdate = true; - if (onLoad2) onLoad2(texture); - } - }, onProgress2, onError2); - } - for (let i = 0; i < urls.length; i++) loadHDRData(i, onLoad, onProgress, onError); - return texture; - } - setDataType(value) { - this.type = value; - this.hdrLoader.setDataType(value); - return this; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/PDBLoader.js -var PDBLoader = class extends Loader { - constructor(manager) { - super(manager); - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(scope.manager); - loader.setPath(scope.path); - loader.setRequestHeader(scope.requestHeader); - loader.setWithCredentials(scope.withCredentials); - loader.load(url, function(text) { - try { - onLoad(scope.parse(text)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(text) { - function trim(text2) { - return text2.replace(/^\s\s*/, "").replace(/\s\s*$/, ""); - } - function capitalize(text2) { - return text2.charAt(0).toUpperCase() + text2.substr(1).toLowerCase(); - } - function hash(s, e) { - return "s" + Math.min(s, e) + "e" + Math.max(s, e); - } - function parseBond(start, length, satom, i) { - const eatom = parseInt(lines[i].substr(start, length)); - if (eatom) { - const h = hash(satom, eatom); - if (_bhash[h] === void 0) { - _bonds.push([ - satom - 1, - eatom - 1, - 1 - ]); - _bhash[h] = _bonds.length - 1; - } - } - } - function buildGeometry() { - const build = { - geometryAtoms: new BufferGeometry(), - geometryBonds: new BufferGeometry(), - json: { atoms } - }; - const geometryAtoms = build.geometryAtoms; - const geometryBonds = build.geometryBonds; - const verticesAtoms = []; - const colorsAtoms = []; - const verticesBonds = []; - for (let i = 0, l = atoms.length; i < l; i++) { - const atom = atoms[i]; - const x = atom[0]; - const y = atom[1]; - const z = atom[2]; - verticesAtoms.push(x, y, z); - const r = atom[3][0] / 255; - const g = atom[3][1] / 255; - const b = atom[3][2] / 255; - colorsAtoms.push(r, g, b); - } - for (let i = 0, l = _bonds.length; i < l; i++) { - const bond = _bonds[i]; - const start = bond[0]; - const end = bond[1]; - const startAtom = _atomMap[start]; - const endAtom = _atomMap[end]; - let x = startAtom[0]; - let y = startAtom[1]; - let z = startAtom[2]; - verticesBonds.push(x, y, z); - x = endAtom[0]; - y = endAtom[1]; - z = endAtom[2]; - verticesBonds.push(x, y, z); - } - geometryAtoms.setAttribute("position", new Float32BufferAttribute(verticesAtoms, 3)); - geometryAtoms.setAttribute("color", new Float32BufferAttribute(colorsAtoms, 3)); - geometryBonds.setAttribute("position", new Float32BufferAttribute(verticesBonds, 3)); - return build; - } - const CPK = { - h: [ - 255, - 255, - 255 - ], - he: [ - 217, - 255, - 255 - ], - li: [ - 204, - 128, - 255 - ], - be: [ - 194, - 255, - 0 - ], - b: [ - 255, - 181, - 181 - ], - c: [ - 144, - 144, - 144 - ], - n: [ - 48, - 80, - 248 - ], - o: [ - 255, - 13, - 13 - ], - f: [ - 144, - 224, - 80 - ], - ne: [ - 179, - 227, - 245 - ], - na: [ - 171, - 92, - 242 - ], - mg: [ - 138, - 255, - 0 - ], - al: [ - 191, - 166, - 166 - ], - si: [ - 240, - 200, - 160 - ], - p: [ - 255, - 128, - 0 - ], - s: [ - 255, - 255, - 48 - ], - cl: [ - 31, - 240, - 31 - ], - ar: [ - 128, - 209, - 227 - ], - k: [ - 143, - 64, - 212 - ], - ca: [ - 61, - 255, - 0 - ], - sc: [ - 230, - 230, - 230 - ], - ti: [ - 191, - 194, - 199 - ], - v: [ - 166, - 166, - 171 - ], - cr: [ - 138, - 153, - 199 - ], - mn: [ - 156, - 122, - 199 - ], - fe: [ - 224, - 102, - 51 - ], - co: [ - 240, - 144, - 160 - ], - ni: [ - 80, - 208, - 80 - ], - cu: [ - 200, - 128, - 51 - ], - zn: [ - 125, - 128, - 176 - ], - ga: [ - 194, - 143, - 143 - ], - ge: [ - 102, - 143, - 143 - ], - as: [ - 189, - 128, - 227 - ], - se: [ - 255, - 161, - 0 - ], - br: [ - 166, - 41, - 41 - ], - kr: [ - 92, - 184, - 209 - ], - rb: [ - 112, - 46, - 176 - ], - sr: [ - 0, - 255, - 0 - ], - y: [ - 148, - 255, - 255 - ], - zr: [ - 148, - 224, - 224 - ], - nb: [ - 115, - 194, - 201 - ], - mo: [ - 84, - 181, - 181 - ], - tc: [ - 59, - 158, - 158 - ], - ru: [ - 36, - 143, - 143 - ], - rh: [ - 10, - 125, - 140 - ], - pd: [ - 0, - 105, - 133 - ], - ag: [ - 192, - 192, - 192 - ], - cd: [ - 255, - 217, - 143 - ], - in: [ - 166, - 117, - 115 - ], - sn: [ - 102, - 128, - 128 - ], - sb: [ - 158, - 99, - 181 - ], - te: [ - 212, - 122, - 0 - ], - i: [ - 148, - 0, - 148 - ], - xe: [ - 66, - 158, - 176 - ], - cs: [ - 87, - 23, - 143 - ], - ba: [ - 0, - 201, - 0 - ], - la: [ - 112, - 212, - 255 - ], - ce: [ - 255, - 255, - 199 - ], - pr: [ - 217, - 255, - 199 - ], - nd: [ - 199, - 255, - 199 - ], - pm: [ - 163, - 255, - 199 - ], - sm: [ - 143, - 255, - 199 - ], - eu: [ - 97, - 255, - 199 - ], - gd: [ - 69, - 255, - 199 - ], - tb: [ - 48, - 255, - 199 - ], - dy: [ - 31, - 255, - 199 - ], - ho: [ - 0, - 255, - 156 - ], - er: [ - 0, - 230, - 117 - ], - tm: [ - 0, - 212, - 82 - ], - yb: [ - 0, - 191, - 56 - ], - lu: [ - 0, - 171, - 36 - ], - hf: [ - 77, - 194, - 255 - ], - ta: [ - 77, - 166, - 255 - ], - w: [ - 33, - 148, - 214 - ], - re: [ - 38, - 125, - 171 - ], - os: [ - 38, - 102, - 150 - ], - ir: [ - 23, - 84, - 135 - ], - pt: [ - 208, - 208, - 224 - ], - au: [ - 255, - 209, - 35 - ], - hg: [ - 184, - 184, - 208 - ], - tl: [ - 166, - 84, - 77 - ], - pb: [ - 87, - 89, - 97 - ], - bi: [ - 158, - 79, - 181 - ], - po: [ - 171, - 92, - 0 - ], - at: [ - 117, - 79, - 69 - ], - rn: [ - 66, - 130, - 150 - ], - fr: [ - 66, - 0, - 102 - ], - ra: [ - 0, - 125, - 0 - ], - ac: [ - 112, - 171, - 250 - ], - th: [ - 0, - 186, - 255 - ], - pa: [ - 0, - 161, - 255 - ], - u: [ - 0, - 143, - 255 - ], - np: [ - 0, - 128, - 255 - ], - pu: [ - 0, - 107, - 255 - ], - am: [ - 84, - 92, - 242 - ], - cm: [ - 120, - 92, - 227 - ], - bk: [ - 138, - 79, - 227 - ], - cf: [ - 161, - 54, - 212 - ], - es: [ - 179, - 31, - 212 - ], - fm: [ - 179, - 31, - 186 - ], - md: [ - 179, - 13, - 166 - ], - no: [ - 189, - 13, - 135 - ], - lr: [ - 199, - 0, - 102 - ], - rf: [ - 204, - 0, - 89 - ], - db: [ - 209, - 0, - 79 - ], - sg: [ - 217, - 0, - 69 - ], - bh: [ - 224, - 0, - 56 - ], - hs: [ - 230, - 0, - 46 - ], - mt: [ - 235, - 0, - 38 - ], - ds: [ - 235, - 0, - 38 - ], - rg: [ - 235, - 0, - 38 - ], - cn: [ - 235, - 0, - 38 - ], - uut: [ - 235, - 0, - 38 - ], - uuq: [ - 235, - 0, - 38 - ], - uup: [ - 235, - 0, - 38 - ], - uuh: [ - 235, - 0, - 38 - ], - uus: [ - 235, - 0, - 38 - ], - uuo: [ - 235, - 0, - 38 - ] - }; - const atoms = []; - const _bonds = []; - const _bhash = {}; - const _atomMap = {}; - const lines = text.split("\n"); - for (let i = 0, l = lines.length; i < l; i++) if (lines[i].substr(0, 4) === "ATOM" || lines[i].substr(0, 6) === "HETATM") { - const x = parseFloat(lines[i].substr(30, 7)); - const y = parseFloat(lines[i].substr(38, 7)); - const z = parseFloat(lines[i].substr(46, 7)); - const index = parseInt(lines[i].substr(6, 5)) - 1; - let e = trim(lines[i].substr(76, 2)).toLowerCase(); - if (e === "") e = trim(lines[i].substr(12, 2)).toLowerCase(); - const atomData = [ - x, - y, - z, - CPK[e], - capitalize(e) - ]; - atoms.push(atomData); - _atomMap[index] = atomData; - } else if (lines[i].substr(0, 6) === "CONECT") { - const satom = parseInt(lines[i].substr(6, 5)); - parseBond(11, 5, satom, i); - parseBond(16, 5, satom, i); - parseBond(21, 5, satom, i); - parseBond(26, 5, satom, i); - } - return buildGeometry(); - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/PRWMLoader.js -var bigEndianPlatform = null; -function isBigEndianPlatform() { - if (bigEndianPlatform === null) { - const buffer = /* @__PURE__ */ new ArrayBuffer(2), uint8Array = new Uint8Array(buffer), uint16Array = new Uint16Array(buffer); - uint8Array[0] = 170; - uint8Array[1] = 187; - bigEndianPlatform = uint16Array[0] === 43707; - } - return bigEndianPlatform; -} -var InvertedEncodingTypes = [ - null, - Float32Array, - null, - Int8Array, - Int16Array, - null, - Int32Array, - Uint8Array, - Uint16Array, - null, - Uint32Array -]; -var getMethods = { - Uint16Array: "getUint16", - Uint32Array: "getUint32", - Int16Array: "getInt16", - Int32Array: "getInt32", - Float32Array: "getFloat32", - Float64Array: "getFloat64" -}; -function copyFromBuffer(sourceArrayBuffer, viewType, position, length, fromBigEndian) { - const bytesPerElement = viewType.BYTES_PER_ELEMENT; - let result; - if (fromBigEndian === isBigEndianPlatform() || bytesPerElement === 1) result = new viewType(sourceArrayBuffer, position, length); - else { - const readView = new DataView(sourceArrayBuffer, position, length * bytesPerElement), getMethod = getMethods[viewType.name], littleEndian = !fromBigEndian; - result = new viewType(length); - for (let i = 0; i < length; i++) result[i] = readView[getMethod](i * bytesPerElement, littleEndian); - } - return result; -} -function decodePrwm(buffer) { - const array = new Uint8Array(buffer), version = array[0]; - let flags = array[1]; - const indexedGeometry = !!(flags >> 7 & 1), indicesType = flags >> 6 & 1, bigEndian = (flags >> 5 & 1) === 1, attributesNumber = flags & 31; - let valuesNumber = 0, indicesNumber = 0; - if (bigEndian) { - valuesNumber = (array[2] << 16) + (array[3] << 8) + array[4]; - indicesNumber = (array[5] << 16) + (array[6] << 8) + array[7]; - } else { - valuesNumber = array[2] + (array[3] << 8) + (array[4] << 16); - indicesNumber = array[5] + (array[6] << 8) + (array[7] << 16); - } - if (version === 0) throw new Error("PRWM decoder: Invalid format version: 0"); - else if (version !== 1) throw new Error("PRWM decoder: Unsupported format version: " + version); - if (!indexedGeometry) { - if (indicesType !== 0) throw new Error("PRWM decoder: Indices type must be set to 0 for non-indexed geometries"); - else if (indicesNumber !== 0) throw new Error("PRWM decoder: Number of indices must be set to 0 for non-indexed geometries"); - } - let pos = 8; - const attributes = {}; - for (let i = 0; i < attributesNumber; i++) { - let attributeName = ""; - while (pos < array.length) { - const char = array[pos]; - pos++; - if (char === 0) break; - else attributeName += String.fromCharCode(char); - } - flags = array[pos]; - const attributeType = flags >> 7 & 1; - const cardinality = (flags >> 4 & 3) + 1; - const arrayType = InvertedEncodingTypes[flags & 15]; - pos++; - pos = Math.ceil(pos / 4) * 4; - const values = copyFromBuffer(buffer, arrayType, pos, cardinality * valuesNumber, bigEndian); - pos += arrayType.BYTES_PER_ELEMENT * cardinality * valuesNumber; - attributes[attributeName] = { - type: attributeType, - cardinality, - values - }; - } - pos = Math.ceil(pos / 4) * 4; - let indices = null; - if (indexedGeometry) indices = copyFromBuffer(buffer, indicesType === 1 ? Uint32Array : Uint16Array, pos, indicesNumber, bigEndian); - return { - version, - attributes, - indices - }; -} -var PRWMLoader = /* @__PURE__ */ (() => { - class PRWMLoader2 extends Loader { - constructor(manager) { - super(manager); - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(scope.manager); - loader.setPath(scope.path); - loader.setResponseType("arraybuffer"); - loader.setRequestHeader(scope.requestHeader); - loader.setWithCredentials(scope.withCredentials); - url = url.replace(/\*/g, isBigEndianPlatform() ? "be" : "le"); - loader.load(url, function(arrayBuffer) { - try { - onLoad(scope.parse(arrayBuffer)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(arrayBuffer) { - const data = decodePrwm(arrayBuffer), attributesKey = Object.keys(data.attributes), bufferGeometry = new BufferGeometry(); - for (let i = 0; i < attributesKey.length; i++) { - const attribute = data.attributes[attributesKey[i]]; - bufferGeometry.setAttribute(attributesKey[i], new BufferAttribute(attribute.values, attribute.cardinality, attribute.normalized)); - } - if (data.indices !== null) bufferGeometry.setIndex(new BufferAttribute(data.indices, 1)); - return bufferGeometry; - } - static isBigEndianPlatform() { - return isBigEndianPlatform(); - } - } - return PRWMLoader2; -})(); -//#endregion -//#region node_modules/three-stdlib/loaders/RGBMLoader.js -var UPNG; -function init() { - if (UPNG) return UPNG; - UPNG = {}; - UPNG.toRGBA8 = function(out) { - var w = out.width, h = out.height; - if (out.tabs.acTL == null) return [UPNG.toRGBA8.decodeImage(out.data, w, h, out).buffer]; - var frms = []; - if (out.frames[0].data == null) out.frames[0].data = out.data; - var len = w * h * 4, img = new Uint8Array(len), empty = new Uint8Array(len), prev = new Uint8Array(len); - for (var i = 0; i < out.frames.length; i++) { - var frm = out.frames[i]; - var fx = frm.rect.x, fy = frm.rect.y, fw = frm.rect.width, fh = frm.rect.height; - var fdata = UPNG.toRGBA8.decodeImage(frm.data, fw, fh, out); - if (i != 0) for (var j = 0; j < len; j++) prev[j] = img[j]; - if (frm.blend == 0) UPNG._copyTile(fdata, fw, fh, img, w, h, fx, fy, 0); - else if (frm.blend == 1) UPNG._copyTile(fdata, fw, fh, img, w, h, fx, fy, 1); - frms.push(img.buffer.slice(0)); - if (frm.dispose == 1) UPNG._copyTile(empty, fw, fh, img, w, h, fx, fy, 0); - else if (frm.dispose == 2) for (var j = 0; j < len; j++) img[j] = prev[j]; - } - return frms; - }; - UPNG.toRGBA8.decodeImage = function(data, w, h, out) { - var area = w * h, bpp = UPNG.decode._getBPP(out); - var bpl = Math.ceil(w * bpp / 8); - var bf = new Uint8Array(area * 4), bf32 = new Uint32Array(bf.buffer); - var ctype = out.ctype, depth = out.depth; - var rs = UPNG._bin.readUshort; - if (ctype == 6) { - var qarea = area << 2; - if (depth == 8) for (var i = 0; i < qarea; i += 4) { - bf[i] = data[i]; - bf[i + 1] = data[i + 1]; - bf[i + 2] = data[i + 2]; - bf[i + 3] = data[i + 3]; - } - if (depth == 16) for (var i = 0; i < qarea; i++) bf[i] = data[i << 1]; - } else if (ctype == 2) { - var ts = out.tabs["tRNS"]; - if (ts == null) { - if (depth == 8) for (var i = 0; i < area; i++) { - var ti = i * 3; - bf32[i] = 255 << 24 | data[ti + 2] << 16 | data[ti + 1] << 8 | data[ti]; - } - if (depth == 16) for (var i = 0; i < area; i++) { - var ti = i * 6; - bf32[i] = 255 << 24 | data[ti + 4] << 16 | data[ti + 2] << 8 | data[ti]; - } - } else { - var tr = ts[0], tg = ts[1], tb = ts[2]; - if (depth == 8) for (var i = 0; i < area; i++) { - var qi = i << 2, ti = i * 3; - bf32[i] = 255 << 24 | data[ti + 2] << 16 | data[ti + 1] << 8 | data[ti]; - if (data[ti] == tr && data[ti + 1] == tg && data[ti + 2] == tb) bf[qi + 3] = 0; - } - if (depth == 16) for (var i = 0; i < area; i++) { - var qi = i << 2, ti = i * 6; - bf32[i] = 255 << 24 | data[ti + 4] << 16 | data[ti + 2] << 8 | data[ti]; - if (rs(data, ti) == tr && rs(data, ti + 2) == tg && rs(data, ti + 4) == tb) bf[qi + 3] = 0; - } - } - } else if (ctype == 3) { - var p = out.tabs["PLTE"], ap = out.tabs["tRNS"], tl = ap ? ap.length : 0; - if (depth == 1) for (var y = 0; y < h; y++) { - var s0 = y * bpl, t0 = y * w; - for (var i = 0; i < w; i++) { - var qi = t0 + i << 2, j = data[s0 + (i >> 3)] >> 7 - ((i & 7) << 0) & 1, cj = 3 * j; - bf[qi] = p[cj]; - bf[qi + 1] = p[cj + 1]; - bf[qi + 2] = p[cj + 2]; - bf[qi + 3] = j < tl ? ap[j] : 255; - } - } - if (depth == 2) for (var y = 0; y < h; y++) { - var s0 = y * bpl, t0 = y * w; - for (var i = 0; i < w; i++) { - var qi = t0 + i << 2, j = data[s0 + (i >> 2)] >> 6 - ((i & 3) << 1) & 3, cj = 3 * j; - bf[qi] = p[cj]; - bf[qi + 1] = p[cj + 1]; - bf[qi + 2] = p[cj + 2]; - bf[qi + 3] = j < tl ? ap[j] : 255; - } - } - if (depth == 4) for (var y = 0; y < h; y++) { - var s0 = y * bpl, t0 = y * w; - for (var i = 0; i < w; i++) { - var qi = t0 + i << 2, j = data[s0 + (i >> 1)] >> 4 - ((i & 1) << 2) & 15, cj = 3 * j; - bf[qi] = p[cj]; - bf[qi + 1] = p[cj + 1]; - bf[qi + 2] = p[cj + 2]; - bf[qi + 3] = j < tl ? ap[j] : 255; - } - } - if (depth == 8) for (var i = 0; i < area; i++) { - var qi = i << 2, j = data[i], cj = 3 * j; - bf[qi] = p[cj]; - bf[qi + 1] = p[cj + 1]; - bf[qi + 2] = p[cj + 2]; - bf[qi + 3] = j < tl ? ap[j] : 255; - } - } else if (ctype == 4) { - if (depth == 8) for (var i = 0; i < area; i++) { - var qi = i << 2, di = i << 1, gr = data[di]; - bf[qi] = gr; - bf[qi + 1] = gr; - bf[qi + 2] = gr; - bf[qi + 3] = data[di + 1]; - } - if (depth == 16) for (var i = 0; i < area; i++) { - var qi = i << 2, di = i << 2, gr = data[di]; - bf[qi] = gr; - bf[qi + 1] = gr; - bf[qi + 2] = gr; - bf[qi + 3] = data[di + 2]; - } - } else if (ctype == 0) { - var tr = out.tabs["tRNS"] ? out.tabs["tRNS"] : -1; - for (var y = 0; y < h; y++) { - var off = y * bpl, to = y * w; - if (depth == 1) for (var x = 0; x < w; x++) { - var gr = 255 * (data[off + (x >>> 3)] >>> 7 - (x & 7) & 1), al = gr == tr * 255 ? 0 : 255; - bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr; - } - else if (depth == 2) for (var x = 0; x < w; x++) { - var gr = 85 * (data[off + (x >>> 2)] >>> 6 - ((x & 3) << 1) & 3), al = gr == tr * 85 ? 0 : 255; - bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr; - } - else if (depth == 4) for (var x = 0; x < w; x++) { - var gr = 17 * (data[off + (x >>> 1)] >>> 4 - ((x & 1) << 2) & 15), al = gr == tr * 17 ? 0 : 255; - bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr; - } - else if (depth == 8) for (var x = 0; x < w; x++) { - var gr = data[off + x], al = gr == tr ? 0 : 255; - bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr; - } - else if (depth == 16) for (var x = 0; x < w; x++) { - var gr = data[off + (x << 1)], al = rs(data, off + (x << 1)) == tr ? 0 : 255; - bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr; - } - } - } - return bf; - }; - UPNG.decode = function(buff) { - var data = new Uint8Array(buff), offset = 8, bin = UPNG._bin, rUs = bin.readUshort, rUi = bin.readUint; - var out = { - tabs: {}, - frames: [] - }; - var dd = new Uint8Array(data.length), doff = 0; - var fd, foff = 0; - var text, keyw, bfr; - var mgck = [ - 137, - 80, - 78, - 71, - 13, - 10, - 26, - 10 - ]; - for (var i = 0; i < 8; i++) if (data[i] != mgck[i]) throw new Error("The input is not a PNG file!"); - while (offset < data.length) { - var len = bin.readUint(data, offset); - offset += 4; - var type = bin.readASCII(data, offset, 4); - offset += 4; - if (type == "IHDR") UPNG.decode._IHDR(data, offset, out); - else if (type == "CgBI") out.tabs[type] = data.slice(offset, offset + 4); - else if (type == "IDAT") { - for (var i = 0; i < len; i++) dd[doff + i] = data[offset + i]; - doff += len; - } else if (type == "acTL") { - out.tabs[type] = { - num_frames: rUi(data, offset), - num_plays: rUi(data, offset + 4) - }; - fd = new Uint8Array(data.length); - } else if (type == "fcTL") { - if (foff != 0) { - var fr = out.frames[out.frames.length - 1]; - fr.data = UPNG.decode._decompress(out, fd.slice(0, foff), fr.rect.width, fr.rect.height); - foff = 0; - } - var rct = { - x: rUi(data, offset + 12), - y: rUi(data, offset + 16), - width: rUi(data, offset + 4), - height: rUi(data, offset + 8) - }; - var del = rUs(data, offset + 22); - del = rUs(data, offset + 20) / (del == 0 ? 100 : del); - var frm = { - rect: rct, - delay: Math.round(del * 1e3), - dispose: data[offset + 24], - blend: data[offset + 25] - }; - out.frames.push(frm); - } else if (type == "fdAT") { - for (var i = 0; i < len - 4; i++) fd[foff + i] = data[offset + i + 4]; - foff += len - 4; - } else if (type == "pHYs") out.tabs[type] = [ - bin.readUint(data, offset), - bin.readUint(data, offset + 4), - data[offset + 8] - ]; - else if (type == "cHRM") { - out.tabs[type] = []; - for (var i = 0; i < 8; i++) out.tabs[type].push(bin.readUint(data, offset + i * 4)); - } else if (type == "tEXt" || type == "zTXt") { - if (out.tabs[type] == null) out.tabs[type] = {}; - var nz = bin.nextZero(data, offset); - keyw = bin.readASCII(data, offset, nz - offset); - var tl = offset + len - nz - 1; - if (type == "tEXt") text = bin.readASCII(data, nz + 1, tl); - else { - bfr = UPNG.decode._inflate(data.slice(nz + 2, nz + 2 + tl)); - text = bin.readUTF8(bfr, 0, bfr.length); - } - out.tabs[type][keyw] = text; - } else if (type == "iTXt") { - if (out.tabs[type] == null) out.tabs[type] = {}; - var nz = 0, off = offset; - nz = bin.nextZero(data, off); - keyw = bin.readASCII(data, off, nz - off); - off = nz + 1; - var cflag = data[off]; - off += 2; - nz = bin.nextZero(data, off); - bin.readASCII(data, off, nz - off); - off = nz + 1; - nz = bin.nextZero(data, off); - bin.readUTF8(data, off, nz - off); - off = nz + 1; - var tl = len - (off - offset); - if (cflag == 0) text = bin.readUTF8(data, off, tl); - else { - bfr = UPNG.decode._inflate(data.slice(off, off + tl)); - text = bin.readUTF8(bfr, 0, bfr.length); - } - out.tabs[type][keyw] = text; - } else if (type == "PLTE") out.tabs[type] = bin.readBytes(data, offset, len); - else if (type == "hIST") { - var pl = out.tabs["PLTE"].length / 3; - out.tabs[type] = []; - for (var i = 0; i < pl; i++) out.tabs[type].push(rUs(data, offset + i * 2)); - } else if (type == "tRNS") { - if (out.ctype == 3) out.tabs[type] = bin.readBytes(data, offset, len); - else if (out.ctype == 0) out.tabs[type] = rUs(data, offset); - else if (out.ctype == 2) out.tabs[type] = [ - rUs(data, offset), - rUs(data, offset + 2), - rUs(data, offset + 4) - ]; - } else if (type == "gAMA") out.tabs[type] = bin.readUint(data, offset) / 1e5; - else if (type == "sRGB") out.tabs[type] = data[offset]; - else if (type == "bKGD") { - if (out.ctype == 0 || out.ctype == 4) out.tabs[type] = [rUs(data, offset)]; - else if (out.ctype == 2 || out.ctype == 6) out.tabs[type] = [ - rUs(data, offset), - rUs(data, offset + 2), - rUs(data, offset + 4) - ]; - else if (out.ctype == 3) out.tabs[type] = data[offset]; - } else if (type == "IEND") break; - offset += len; - bin.readUint(data, offset); - offset += 4; - } - if (foff != 0) { - var fr = out.frames[out.frames.length - 1]; - fr.data = UPNG.decode._decompress(out, fd.slice(0, foff), fr.rect.width, fr.rect.height); - } - out.data = UPNG.decode._decompress(out, dd, out.width, out.height); - delete out.compress; - delete out.interlace; - delete out.filter; - return out; - }; - UPNG.decode._decompress = function(out, dd, w, h) { - var bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w * bpp / 8), buff = new Uint8Array((bpl + 1 + out.interlace) * h); - if (out.tabs["CgBI"]) dd = UPNG.inflateRaw(dd, buff); - else dd = UPNG.decode._inflate(dd, buff); - if (out.interlace == 0) dd = UPNG.decode._filterZero(dd, out, 0, w, h); - else if (out.interlace == 1) dd = UPNG.decode._readInterlace(dd, out); - return dd; - }; - UPNG.decode._inflate = function(data, buff) { - return UPNG["inflateRaw"](new Uint8Array(data.buffer, 2, data.length - 6), buff); - }; - UPNG.inflateRaw = function() { - var H = {}; - H.H = {}; - H.H.N = function(N, W) { - var R = Uint8Array, i = 0, m = 0, J = 0, h = 0, Q = 0, X = 0, u = 0, w = 0, d = 0, v, C; - if (N[0] == 3 && N[1] == 0) return W ? W : new R(0); - var V = H.H, n = V.b, A = V.e, l = V.R, M = V.n, I = V.A, e = V.Z, b = V.m, Z = W == null; - if (Z) W = new R(N.length >>> 2 << 5); - while (i == 0) { - i = n(N, d, 1); - m = n(N, d + 1, 2); - d += 3; - if (m == 0) { - if ((d & 7) != 0) d += 8 - (d & 7); - var D = (d >>> 3) + 4, q = N[D - 4] | N[D - 3] << 8; - if (Z) W = H.H.W(W, w + q); - W.set(new R(N.buffer, N.byteOffset + D, q), w); - d = D + q << 3; - w += q; - continue; - } - if (Z) W = H.H.W(W, w + (1 << 17)); - if (m == 1) { - v = b.J; - C = b.h; - X = 511; - u = 31; - } - if (m == 2) { - J = A(N, d, 5) + 257; - h = A(N, d + 5, 5) + 1; - Q = A(N, d + 10, 4) + 4; - d += 14; - var j = 1; - for (var c = 0; c < 38; c += 2) { - b.Q[c] = 0; - b.Q[c + 1] = 0; - } - for (var c = 0; c < Q; c++) { - var K = A(N, d + c * 3, 3); - b.Q[(b.X[c] << 1) + 1] = K; - if (K > j) j = K; - } - d += 3 * Q; - M(b.Q, j); - I(b.Q, j, b.u); - v = b.w; - C = b.d; - d = l(b.u, (1 << j) - 1, J + h, N, d, b.v); - var r = V.V(b.v, 0, J, b.C); - X = (1 << r) - 1; - var S = V.V(b.v, J, h, b.D); - u = (1 << S) - 1; - M(b.C, r); - I(b.C, r, v); - M(b.D, S); - I(b.D, S, C); - } - while (true) { - var T = v[e(N, d) & X]; - d += T & 15; - var p = T >>> 4; - if (p >>> 8 == 0) W[w++] = p; - else if (p == 256) break; - else { - var z = w + p - 254; - if (p > 264) { - var _ = b.q[p - 257]; - z = w + (_ >>> 3) + A(N, d, _ & 7); - d += _ & 7; - } - var $ = C[e(N, d) & u]; - d += $ & 15; - var s = $ >>> 4, Y = b.c[s], a = (Y >>> 4) + n(N, d, Y & 15); - d += Y & 15; - while (w < z) { - W[w] = W[w++ - a]; - W[w] = W[w++ - a]; - W[w] = W[w++ - a]; - W[w] = W[w++ - a]; - } - w = z; - } - } - } - return W.length == w ? W : W.slice(0, w); - }; - H.H.W = function(N, W) { - var R = N.length; - if (W <= R) return N; - var V = new Uint8Array(R << 1); - V.set(N, 0); - return V; - }; - H.H.R = function(N, W, R, V, n, A) { - var l = H.H.e, M = H.H.Z, I = 0; - while (I < R) { - var e = N[M(V, n) & W]; - n += e & 15; - var b = e >>> 4; - if (b <= 15) { - A[I] = b; - I++; - } else { - var Z = 0, m = 0; - if (b == 16) { - m = 3 + l(V, n, 2); - n += 2; - Z = A[I - 1]; - } else if (b == 17) { - m = 3 + l(V, n, 3); - n += 3; - } else if (b == 18) { - m = 11 + l(V, n, 7); - n += 7; - } - var J = I + m; - while (I < J) { - A[I] = Z; - I++; - } - } - } - return n; - }; - H.H.V = function(N, W, R, V) { - var n = 0, A = 0, l = V.length >>> 1; - while (A < R) { - var M = N[A + W]; - V[A << 1] = 0; - V[(A << 1) + 1] = M; - if (M > n) n = M; - A++; - } - while (A < l) { - V[A << 1] = 0; - V[(A << 1) + 1] = 0; - A++; - } - return n; - }; - H.H.n = function(N, W) { - var R = H.H.m, V = N.length, n, A, l, M, I, e = R.j; - for (var M = 0; M <= W; M++) e[M] = 0; - for (M = 1; M < V; M += 2) e[N[M]]++; - var b = R.K; - n = 0; - e[0] = 0; - for (A = 1; A <= W; A++) { - n = n + e[A - 1] << 1; - b[A] = n; - } - for (l = 0; l < V; l += 2) { - I = N[l + 1]; - if (I != 0) { - N[l] = b[I]; - b[I]++; - } - } - }; - H.H.A = function(N, W, R) { - var V = N.length, A = H.H.m.r; - for (var l = 0; l < V; l += 2) if (N[l + 1] != 0) { - var M = l >> 1, I = N[l + 1], e = M << 4 | I, b = W - I, Z = N[l] << b, m = Z + (1 << b); - while (Z != m) { - var J = A[Z] >>> 15 - W; - R[J] = e; - Z++; - } - } - }; - H.H.l = function(N, W) { - var R = H.H.m.r, V = 15 - W; - for (var n = 0; n < N.length; n += 2) N[n] = R[N[n] << W - N[n + 1]] >>> V; - }; - H.H.M = function(N, W, R) { - R = R << (W & 7); - var V = W >>> 3; - N[V] |= R; - N[V + 1] |= R >>> 8; - }; - H.H.I = function(N, W, R) { - R = R << (W & 7); - var V = W >>> 3; - N[V] |= R; - N[V + 1] |= R >>> 8; - N[V + 2] |= R >>> 16; - }; - H.H.e = function(N, W, R) { - return (N[W >>> 3] | N[(W >>> 3) + 1] << 8) >>> (W & 7) & (1 << R) - 1; - }; - H.H.b = function(N, W, R) { - return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16) >>> (W & 7) & (1 << R) - 1; - }; - H.H.Z = function(N, W) { - return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16) >>> (W & 7); - }; - H.H.i = function(N, W) { - return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16 | N[(W >>> 3) + 3] << 24) >>> (W & 7); - }; - H.H.m = function() { - var N = Uint16Array, W = Uint32Array; - return { - K: new N(16), - j: new N(16), - X: [ - 16, - 17, - 18, - 0, - 8, - 7, - 9, - 6, - 10, - 5, - 11, - 4, - 12, - 3, - 13, - 2, - 14, - 1, - 15 - ], - S: [ - 3, - 4, - 5, - 6, - 7, - 8, - 9, - 10, - 11, - 13, - 15, - 17, - 19, - 23, - 27, - 31, - 35, - 43, - 51, - 59, - 67, - 83, - 99, - 115, - 131, - 163, - 195, - 227, - 258, - 999, - 999, - 999 - ], - T: [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 1, - 1, - 1, - 1, - 2, - 2, - 2, - 2, - 3, - 3, - 3, - 3, - 4, - 4, - 4, - 4, - 5, - 5, - 5, - 5, - 0, - 0, - 0, - 0 - ], - q: new N(32), - p: [ - 1, - 2, - 3, - 4, - 5, - 7, - 9, - 13, - 17, - 25, - 33, - 49, - 65, - 97, - 129, - 193, - 257, - 385, - 513, - 769, - 1025, - 1537, - 2049, - 3073, - 4097, - 6145, - 8193, - 12289, - 16385, - 24577, - 65535, - 65535 - ], - z: [ - 0, - 0, - 0, - 0, - 1, - 1, - 2, - 2, - 3, - 3, - 4, - 4, - 5, - 5, - 6, - 6, - 7, - 7, - 8, - 8, - 9, - 9, - 10, - 10, - 11, - 11, - 12, - 12, - 13, - 13, - 0, - 0 - ], - c: new W(32), - J: new N(512), - _: [], - h: new N(32), - $: [], - w: new N(32768), - C: [], - v: [], - d: new N(32768), - D: [], - u: new N(512), - Q: [], - r: new N(32768), - s: new W(286), - Y: new W(30), - a: new W(19), - t: new W(15e3), - k: new N(65536), - g: new N(32768) - }; - }(); - (function() { - var N = H.H.m, W = 32768; - for (var R = 0; R < W; R++) { - var V = R; - V = (V & 2863311530) >>> 1 | (V & 1431655765) << 1; - V = (V & 3435973836) >>> 2 | (V & 858993459) << 2; - V = (V & 4042322160) >>> 4 | (V & 252645135) << 4; - V = (V & 4278255360) >>> 8 | (V & 16711935) << 8; - N.r[R] = (V >>> 16 | V << 16) >>> 17; - } - function n(A, l, M) { - while (l-- != 0) A.push(0, M); - } - for (var R = 0; R < 32; R++) { - N.q[R] = N.S[R] << 3 | N.T[R]; - N.c[R] = N.p[R] << 4 | N.z[R]; - } - n(N._, 144, 8); - n(N._, 112, 9); - n(N._, 24, 7); - n(N._, 8, 8); - H.H.n(N._, 9); - H.H.A(N._, 9, N.J); - H.H.l(N._, 9); - n(N.$, 32, 5); - H.H.n(N.$, 5); - H.H.A(N.$, 5, N.h); - H.H.l(N.$, 5); - n(N.Q, 19, 0); - n(N.C, 286, 0); - n(N.D, 30, 0); - n(N.v, 320, 0); - })(); - return H.H.N; - }(); - UPNG.decode._readInterlace = function(data, out) { - var w = out.width, h = out.height; - var bpp = UPNG.decode._getBPP(out), cbpp = bpp >> 3, bpl = Math.ceil(w * bpp / 8); - var img = new Uint8Array(h * bpl); - var di = 0; - var starting_row = [ - 0, - 0, - 4, - 0, - 2, - 0, - 1 - ]; - var starting_col = [ - 0, - 4, - 0, - 2, - 0, - 1, - 0 - ]; - var row_increment = [ - 8, - 8, - 8, - 4, - 4, - 2, - 2 - ]; - var col_increment = [ - 8, - 8, - 4, - 4, - 2, - 2, - 1 - ]; - var pass = 0; - while (pass < 7) { - var ri = row_increment[pass], ci = col_increment[pass]; - var sw = 0, sh = 0; - var cr = starting_row[pass]; - while (cr < h) { - cr += ri; - sh++; - } - var cc = starting_col[pass]; - while (cc < w) { - cc += ci; - sw++; - } - var bpll = Math.ceil(sw * bpp / 8); - UPNG.decode._filterZero(data, out, di, sw, sh); - var y = 0, row = starting_row[pass]; - var val; - while (row < h) { - var col = starting_col[pass]; - var cdi = di + y * bpll << 3; - while (col < w) { - if (bpp == 1) { - val = data[cdi >> 3]; - val = val >> 7 - (cdi & 7) & 1; - img[row * bpl + (col >> 3)] |= val << 7 - ((col & 7) << 0); - } - if (bpp == 2) { - val = data[cdi >> 3]; - val = val >> 6 - (cdi & 7) & 3; - img[row * bpl + (col >> 2)] |= val << 6 - ((col & 3) << 1); - } - if (bpp == 4) { - val = data[cdi >> 3]; - val = val >> 4 - (cdi & 7) & 15; - img[row * bpl + (col >> 1)] |= val << 4 - ((col & 1) << 2); - } - if (bpp >= 8) { - var ii = row * bpl + col * cbpp; - for (var j = 0; j < cbpp; j++) img[ii + j] = data[(cdi >> 3) + j]; - } - cdi += bpp; - col += ci; - } - y++; - row += ri; - } - if (sw * sh != 0) di += sh * (1 + bpll); - pass = pass + 1; - } - return img; - }; - UPNG.decode._getBPP = function(out) { - return [ - 1, - null, - 3, - 1, - 2, - null, - 4 - ][out.ctype] * out.depth; - }; - UPNG.decode._filterZero = function(data, out, off, w, h) { - var bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w * bpp / 8), paeth = UPNG.decode._paeth; - bpp = Math.ceil(bpp / 8); - var i, di, type = data[off], x = 0; - if (type > 1) data[off] = [ - 0, - 0, - 1 - ][type - 2]; - if (type == 3) for (x = bpp; x < bpl; x++) data[x + 1] = data[x + 1] + (data[x + 1 - bpp] >>> 1) & 255; - for (var y = 0; y < h; y++) { - i = off + y * bpl; - di = i + y + 1; - type = data[di - 1]; - x = 0; - if (type == 0) for (; x < bpl; x++) data[i + x] = data[di + x]; - else if (type == 1) { - for (; x < bpp; x++) data[i + x] = data[di + x]; - for (; x < bpl; x++) data[i + x] = data[di + x] + data[i + x - bpp]; - } else if (type == 2) for (; x < bpl; x++) data[i + x] = data[di + x] + data[i + x - bpl]; - else if (type == 3) { - for (; x < bpp; x++) data[i + x] = data[di + x] + (data[i + x - bpl] >>> 1); - for (; x < bpl; x++) data[i + x] = data[di + x] + (data[i + x - bpl] + data[i + x - bpp] >>> 1); - } else { - for (; x < bpp; x++) data[i + x] = data[di + x] + paeth(0, data[i + x - bpl], 0); - for (; x < bpl; x++) data[i + x] = data[di + x] + paeth(data[i + x - bpp], data[i + x - bpl], data[i + x - bpp - bpl]); - } - } - return data; - }; - UPNG.decode._paeth = function(a, b, c) { - var p = a + b - c, pa = p - a, pb = p - b, pc = p - c; - if (pa * pa <= pb * pb && pa * pa <= pc * pc) return a; - else if (pb * pb <= pc * pc) return b; - return c; - }; - UPNG.decode._IHDR = function(data, offset, out) { - var bin = UPNG._bin; - out.width = bin.readUint(data, offset); - offset += 4; - out.height = bin.readUint(data, offset); - offset += 4; - out.depth = data[offset]; - offset++; - out.ctype = data[offset]; - offset++; - out.compress = data[offset]; - offset++; - out.filter = data[offset]; - offset++; - out.interlace = data[offset]; - offset++; - }; - UPNG._bin = { - nextZero: function(data, p) { - while (data[p] != 0) p++; - return p; - }, - readUshort: function(buff, p) { - return buff[p] << 8 | buff[p + 1]; - }, - writeUshort: function(buff, p, n) { - buff[p] = n >> 8 & 255; - buff[p + 1] = n & 255; - }, - readUint: function(buff, p) { - return buff[p] * (256 * 256 * 256) + (buff[p + 1] << 16 | buff[p + 2] << 8 | buff[p + 3]); - }, - writeUint: function(buff, p, n) { - buff[p] = n >> 24 & 255; - buff[p + 1] = n >> 16 & 255; - buff[p + 2] = n >> 8 & 255; - buff[p + 3] = n & 255; - }, - readASCII: function(buff, p, l) { - var s = ""; - for (var i = 0; i < l; i++) s += String.fromCharCode(buff[p + i]); - return s; - }, - writeASCII: function(data, p, s) { - for (var i = 0; i < s.length; i++) data[p + i] = s.charCodeAt(i); - }, - readBytes: function(buff, p, l) { - var arr = []; - for (var i = 0; i < l; i++) arr.push(buff[p + i]); - return arr; - }, - pad: function(n) { - return n.length < 2 ? "0" + n : n; - }, - readUTF8: function(buff, p, l) { - var s = "", ns; - for (var i = 0; i < l; i++) s += "%" + UPNG._bin.pad(buff[p + i].toString(16)); - try { - ns = decodeURIComponent(s); - } catch (e) { - return UPNG._bin.readASCII(buff, p, l); - } - return ns; - } - }; - UPNG._copyTile = function(sb, sw, sh, tb, tw, th, xoff, yoff, mode) { - var w = Math.min(sw, tw), h = Math.min(sh, th); - var si = 0, ti = 0; - for (var y = 0; y < h; y++) for (var x = 0; x < w; x++) { - if (xoff >= 0 && yoff >= 0) { - si = y * sw + x << 2; - ti = (yoff + y) * tw + xoff + x << 2; - } else { - si = (-yoff + y) * sw - xoff + x << 2; - ti = y * tw + x << 2; - } - if (mode == 0) { - tb[ti] = sb[si]; - tb[ti + 1] = sb[si + 1]; - tb[ti + 2] = sb[si + 2]; - tb[ti + 3] = sb[si + 3]; - } else if (mode == 1) { - var fa = sb[si + 3] * (1 / 255), fr = sb[si] * fa, fg = sb[si + 1] * fa, fb = sb[si + 2] * fa; - var ba = tb[ti + 3] * (1 / 255), br = tb[ti] * ba, bg = tb[ti + 1] * ba, bb = tb[ti + 2] * ba; - var ifa = 1 - fa, oa = fa + ba * ifa, ioa = oa == 0 ? 0 : 1 / oa; - tb[ti + 3] = 255 * oa; - tb[ti + 0] = (fr + br * ifa) * ioa; - tb[ti + 1] = (fg + bg * ifa) * ioa; - tb[ti + 2] = (fb + bb * ifa) * ioa; - } else if (mode == 2) { - var fa = sb[si + 3], fr = sb[si], fg = sb[si + 1], fb = sb[si + 2]; - var ba = tb[ti + 3], br = tb[ti], bg = tb[ti + 1], bb = tb[ti + 2]; - if (fa == ba && fr == br && fg == bg && fb == bb) { - tb[ti] = 0; - tb[ti + 1] = 0; - tb[ti + 2] = 0; - tb[ti + 3] = 0; - } else { - tb[ti] = fr; - tb[ti + 1] = fg; - tb[ti + 2] = fb; - tb[ti + 3] = fa; - } - } else if (mode == 3) { - var fa = sb[si + 3], fr = sb[si], fg = sb[si + 1], fb = sb[si + 2]; - var ba = tb[ti + 3], br = tb[ti], bg = tb[ti + 1], bb = tb[ti + 2]; - if (fa == ba && fr == br && fg == bg && fb == bb) continue; - if (fa < 220 && ba > 20) return false; - } - } - return true; - }; -} -var RGBMLoader = class extends DataTextureLoader { - constructor(manager) { - super(manager); - this.type = HalfFloatType; - this.maxRange = 7; - } - setDataType(value) { - this.type = value; - return this; - } - setMaxRange(value) { - this.maxRange = value; - return this; - } - loadCubemap(urls, onLoad, onProgress, onError) { - const texture = new CubeTexture(); - let loaded = 0; - const scope = this; - function loadTexture(i) { - scope.load(urls[i], function(image) { - texture.images[i] = image; - loaded++; - if (loaded === 6) { - texture.needsUpdate = true; - if (onLoad) onLoad(texture); - } - }, void 0, onError); - } - for (let i = 0; i < urls.length; ++i) loadTexture(i); - texture.type = this.type; - texture.format = RGBAFormat; - texture.minFilter = LinearFilter; - texture.generateMipmaps = false; - return texture; - } - parse(buffer) { - init(); - const img = UPNG.decode(buffer); - const rgba = UPNG.toRGBA8(img)[0]; - const data = new Uint8Array(rgba); - const size = img.width * img.height * 4; - const output = this.type === 1016 ? new Uint16Array(size) : new Float32Array(size); - for (let i = 0; i < data.length; i += 4) { - const r = data[i + 0] / 255; - const g = data[i + 1] / 255; - const b = data[i + 2] / 255; - const a = data[i + 3] / 255; - if (this.type === 1016) { - output[i + 0] = DataUtils.toHalfFloat(Math.min(r * a * this.maxRange, 65504)); - output[i + 1] = DataUtils.toHalfFloat(Math.min(g * a * this.maxRange, 65504)); - output[i + 2] = DataUtils.toHalfFloat(Math.min(b * a * this.maxRange, 65504)); - output[i + 3] = DataUtils.toHalfFloat(1); - } else { - output[i + 0] = r * a * this.maxRange; - output[i + 1] = g * a * this.maxRange; - output[i + 2] = b * a * this.maxRange; - output[i + 3] = 1; - } - } - return { - width: img.width, - height: img.height, - data: output, - format: RGBAFormat, - type: this.type, - flipY: true - }; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/VOXLoader.js -var VOXLoader = class extends Loader { - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(scope.manager); - loader.setPath(scope.path); - loader.setResponseType("arraybuffer"); - loader.setRequestHeader(scope.requestHeader); - loader.load(url, function(buffer) { - try { - onLoad(scope.parse(buffer)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(buffer) { - const data = new DataView(buffer); - const id = data.getUint32(0, true); - const version = data.getUint32(4, true); - if (id !== 542658390 || version !== 150) { - console.error("Not a valid VOX file"); - return; - } - const DEFAULT_PALETTE = [ - 0, - 4294967295, - 4291624959, - 4288282623, - 4284940287, - 4281597951, - 4278255615, - 4294954239, - 4291611903, - 4288269567, - 4284927231, - 4281584895, - 4278242559, - 4294941183, - 4291598847, - 4288256511, - 4284914175, - 4281571839, - 4278229503, - 4294928127, - 4291585791, - 4288243455, - 4284901119, - 4281558783, - 4278216447, - 4294915071, - 4291572735, - 4288230399, - 4284888063, - 4281545727, - 4278203391, - 4294902015, - 4291559679, - 4288217343, - 4284875007, - 4281532671, - 4278190335, - 4294967244, - 4291624908, - 4288282572, - 4284940236, - 4281597900, - 4278255564, - 4294954188, - 4291611852, - 4288269516, - 4284927180, - 4281584844, - 4278242508, - 4294941132, - 4291598796, - 4288256460, - 4284914124, - 4281571788, - 4278229452, - 4294928076, - 4291585740, - 4288243404, - 4284901068, - 4281558732, - 4278216396, - 4294915020, - 4291572684, - 4288230348, - 4284888012, - 4281545676, - 4278203340, - 4294901964, - 4291559628, - 4288217292, - 4284874956, - 4281532620, - 4278190284, - 4294967193, - 4291624857, - 4288282521, - 4284940185, - 4281597849, - 4278255513, - 4294954137, - 4291611801, - 4288269465, - 4284927129, - 4281584793, - 4278242457, - 4294941081, - 4291598745, - 4288256409, - 4284914073, - 4281571737, - 4278229401, - 4294928025, - 4291585689, - 4288243353, - 4284901017, - 4281558681, - 4278216345, - 4294914969, - 4291572633, - 4288230297, - 4284887961, - 4281545625, - 4278203289, - 4294901913, - 4291559577, - 4288217241, - 4284874905, - 4281532569, - 4278190233, - 4294967142, - 4291624806, - 4288282470, - 4284940134, - 4281597798, - 4278255462, - 4294954086, - 4291611750, - 4288269414, - 4284927078, - 4281584742, - 4278242406, - 4294941030, - 4291598694, - 4288256358, - 4284914022, - 4281571686, - 4278229350, - 4294927974, - 4291585638, - 4288243302, - 4284900966, - 4281558630, - 4278216294, - 4294914918, - 4291572582, - 4288230246, - 4284887910, - 4281545574, - 4278203238, - 4294901862, - 4291559526, - 4288217190, - 4284874854, - 4281532518, - 4278190182, - 4294967091, - 4291624755, - 4288282419, - 4284940083, - 4281597747, - 4278255411, - 4294954035, - 4291611699, - 4288269363, - 4284927027, - 4281584691, - 4278242355, - 4294940979, - 4291598643, - 4288256307, - 4284913971, - 4281571635, - 4278229299, - 4294927923, - 4291585587, - 4288243251, - 4284900915, - 4281558579, - 4278216243, - 4294914867, - 4291572531, - 4288230195, - 4284887859, - 4281545523, - 4278203187, - 4294901811, - 4291559475, - 4288217139, - 4284874803, - 4281532467, - 4278190131, - 4294967040, - 4291624704, - 4288282368, - 4284940032, - 4281597696, - 4278255360, - 4294953984, - 4291611648, - 4288269312, - 4284926976, - 4281584640, - 4278242304, - 4294940928, - 4291598592, - 4288256256, - 4284913920, - 4281571584, - 4278229248, - 4294927872, - 4291585536, - 4288243200, - 4284900864, - 4281558528, - 4278216192, - 4294914816, - 4291572480, - 4288230144, - 4284887808, - 4281545472, - 4278203136, - 4294901760, - 4291559424, - 4288217088, - 4284874752, - 4281532416, - 4278190318, - 4278190301, - 4278190267, - 4278190250, - 4278190216, - 4278190199, - 4278190165, - 4278190148, - 4278190114, - 4278190097, - 4278251008, - 4278246656, - 4278237952, - 4278233600, - 4278224896, - 4278220544, - 4278211840, - 4278207488, - 4278198784, - 4278194432, - 4293787648, - 4292673536, - 4290445312, - 4289331200, - 4287102976, - 4285988864, - 4283760640, - 4282646528, - 4280418304, - 4279304192, - 4293848814, - 4292730333, - 4290493371, - 4289374890, - 4287137928, - 4286019447, - 4283782485, - 4282664004, - 4280427042, - 4279308561 - ]; - let i = 8; - let chunk; - const chunks = []; - while (i < data.byteLength) { - let id2 = ""; - for (let j = 0; j < 4; j++) id2 += String.fromCharCode(data.getUint8(i++)); - const chunkSize = data.getUint32(i, true); - i += 4; - i += 4; - if (id2 === "SIZE") { - const x = data.getUint32(i, true); - i += 4; - const y = data.getUint32(i, true); - i += 4; - const z = data.getUint32(i, true); - i += 4; - chunk = { - palette: DEFAULT_PALETTE, - size: { - x, - y, - z - } - }; - chunks.push(chunk); - i += chunkSize - 12; - } else if (id2 === "XYZI") { - const numVoxels = data.getUint32(i, true); - i += 4; - chunk.data = new Uint8Array(buffer, i, numVoxels * 4); - i += numVoxels * 4; - } else if (id2 === "RGBA") { - const palette = [0]; - for (let j = 0; j < 256; j++) { - palette[j + 1] = data.getUint32(i, true); - i += 4; - } - chunk.palette = palette; - } else i += chunkSize; - } - return chunks; - } -}; -var VOXMesh = class extends Mesh { - constructor(chunk) { - const data = chunk.data; - const size = chunk.size; - const palette = chunk.palette; - const vertices = []; - const colors = []; - const nx = [ - 0, - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 1, - 1, - 0, - 1, - 0, - 0, - 0, - 1 - ]; - const px = [ - 1, - 0, - 0, - 1, - 1, - 0, - 1, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 1, - 1, - 1, - 0 - ]; - const py = [ - 0, - 0, - 1, - 1, - 0, - 1, - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 1, - 1, - 1, - 0, - 1 - ]; - const ny = [ - 0, - 0, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 1, - 1, - 0, - 1, - 0, - 0, - 0, - 1, - 0 - ]; - const nz = [ - 0, - 0, - 1, - 0, - 0, - 0, - 1, - 0, - 1, - 1, - 0, - 0, - 1, - 0, - 1, - 0, - 0, - 0 - ]; - const pz = [ - 0, - 1, - 1, - 1, - 1, - 1, - 0, - 1, - 0, - 1, - 1, - 0, - 0, - 1, - 0, - 1, - 1, - 1 - ]; - function add(tile, x, y, z, r, g, b) { - x -= size.x / 2; - y -= size.z / 2; - z += size.y / 2; - for (let i = 0; i < 18; i += 3) { - vertices.push(tile[i + 0] + x, tile[i + 1] + y, tile[i + 2] + z); - colors.push(r, g, b); - } - } - const offsety = size.x; - const offsetz = size.x * size.y; - const array = new Uint8Array(size.x * size.y * size.z); - for (let j = 0; j < data.length; j += 4) { - const x = data[j + 0]; - const y = data[j + 1]; - const z = data[j + 2]; - const index = x + y * offsety + z * offsetz; - array[index] = 255; - } - let hasColors = false; - for (let j = 0; j < data.length; j += 4) { - const x = data[j + 0]; - const y = data[j + 1]; - const z = data[j + 2]; - const hex = palette[data[j + 3]]; - const r = (hex >> 0 & 255) / 255; - const g = (hex >> 8 & 255) / 255; - const b = (hex >> 16 & 255) / 255; - if (r > 0 || g > 0 || b > 0) hasColors = true; - const index = x + y * offsety + z * offsetz; - if (array[index + 1] === 0 || x === size.x - 1) add(px, x, z, -y, r, g, b); - if (array[index - 1] === 0 || x === 0) add(nx, x, z, -y, r, g, b); - if (array[index + offsety] === 0 || y === size.y - 1) add(ny, x, z, -y, r, g, b); - if (array[index - offsety] === 0 || y === 0) add(py, x, z, -y, r, g, b); - if (array[index + offsetz] === 0 || z === size.z - 1) add(pz, x, z, -y, r, g, b); - if (array[index - offsetz] === 0 || z === 0) add(nz, x, z, -y, r, g, b); - } - const geometry = new BufferGeometry(); - geometry.setAttribute("position", new Float32BufferAttribute(vertices, 3)); - geometry.computeVertexNormals(); - const material = new MeshStandardMaterial(); - if (hasColors) { - geometry.setAttribute("color", new Float32BufferAttribute(colors, 3)); - material.vertexColors = true; - } - super(geometry, material); - } -}; -var VOXData3DTexture = class extends Data3DTexture { - constructor(chunk) { - const data = chunk.data; - const size = chunk.size; - const offsety = size.x; - const offsetz = size.x * size.y; - const array = new Uint8Array(size.x * size.y * size.z); - for (let j = 0; j < data.length; j += 4) { - const x = data[j + 0]; - const y = data[j + 1]; - const z = data[j + 2]; - const index = x + y * offsety + z * offsetz; - array[index] = 255; - } - super(array, size.x, size.y, size.z); - this.format = RedFormat; - this.minFilter = NearestFilter; - this.magFilter = LinearFilter; - this.unpackAlignment = 1; - this.needsUpdate = true; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/PCDLoader.js -var PCDLoader = class extends Loader { - constructor(manager) { - super(manager); - this.littleEndian = true; - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(scope.manager); - loader.setPath(scope.path); - loader.setResponseType("arraybuffer"); - loader.setRequestHeader(scope.requestHeader); - loader.setWithCredentials(scope.withCredentials); - loader.load(url, function(data) { - try { - onLoad(scope.parse(data, url)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(data, url) { - function decompressLZF(inData, outLength) { - const inLength = inData.length; - const outData = new Uint8Array(outLength); - let inPtr = 0; - let outPtr = 0; - let ctrl; - let len; - let ref; - do { - ctrl = inData[inPtr++]; - if (ctrl < 32) { - ctrl++; - if (outPtr + ctrl > outLength) throw new Error("Output buffer is not large enough"); - if (inPtr + ctrl > inLength) throw new Error("Invalid compressed data"); - do - outData[outPtr++] = inData[inPtr++]; - while (--ctrl); - } else { - len = ctrl >> 5; - ref = outPtr - ((ctrl & 31) << 8) - 1; - if (inPtr >= inLength) throw new Error("Invalid compressed data"); - if (len === 7) { - len += inData[inPtr++]; - if (inPtr >= inLength) throw new Error("Invalid compressed data"); - } - ref -= inData[inPtr++]; - if (outPtr + len + 2 > outLength) throw new Error("Output buffer is not large enough"); - if (ref < 0) throw new Error("Invalid compressed data"); - if (ref >= outPtr) throw new Error("Invalid compressed data"); - do - outData[outPtr++] = outData[ref++]; - while (--len + 2); - } - } while (inPtr < inLength); - return outData; - } - function parseHeader(data2) { - const PCDheader2 = {}; - const result1 = data2.search(/[\r\n]DATA\s(\S*)\s/i); - const result2 = /[\r\n]DATA\s(\S*)\s/i.exec(data2.substr(result1 - 1)); - PCDheader2.data = result2[1]; - PCDheader2.headerLen = result2[0].length + result1; - PCDheader2.str = data2.substr(0, PCDheader2.headerLen); - PCDheader2.str = PCDheader2.str.replace(/\#.*/gi, ""); - PCDheader2.version = /VERSION (.*)/i.exec(PCDheader2.str); - PCDheader2.fields = /FIELDS (.*)/i.exec(PCDheader2.str); - PCDheader2.size = /SIZE (.*)/i.exec(PCDheader2.str); - PCDheader2.type = /TYPE (.*)/i.exec(PCDheader2.str); - PCDheader2.count = /COUNT (.*)/i.exec(PCDheader2.str); - PCDheader2.width = /WIDTH (.*)/i.exec(PCDheader2.str); - PCDheader2.height = /HEIGHT (.*)/i.exec(PCDheader2.str); - PCDheader2.viewpoint = /VIEWPOINT (.*)/i.exec(PCDheader2.str); - PCDheader2.points = /POINTS (.*)/i.exec(PCDheader2.str); - if (PCDheader2.version !== null) PCDheader2.version = parseFloat(PCDheader2.version[1]); - if (PCDheader2.fields !== null) PCDheader2.fields = PCDheader2.fields[1].split(" "); - if (PCDheader2.type !== null) PCDheader2.type = PCDheader2.type[1].split(" "); - if (PCDheader2.width !== null) PCDheader2.width = parseInt(PCDheader2.width[1]); - if (PCDheader2.height !== null) PCDheader2.height = parseInt(PCDheader2.height[1]); - if (PCDheader2.viewpoint !== null) PCDheader2.viewpoint = PCDheader2.viewpoint[1]; - if (PCDheader2.points !== null) PCDheader2.points = parseInt(PCDheader2.points[1], 10); - if (PCDheader2.points === null) PCDheader2.points = PCDheader2.width * PCDheader2.height; - if (PCDheader2.size !== null) PCDheader2.size = PCDheader2.size[1].split(" ").map(function(x) { - return parseInt(x, 10); - }); - if (PCDheader2.count !== null) PCDheader2.count = PCDheader2.count[1].split(" ").map(function(x) { - return parseInt(x, 10); - }); - else { - PCDheader2.count = []; - for (let i = 0, l = PCDheader2.fields.length; i < l; i++) PCDheader2.count.push(1); - } - PCDheader2.offset = {}; - let sizeSum = 0; - for (let i = 0, l = PCDheader2.fields.length; i < l; i++) if (PCDheader2.data === "ascii") PCDheader2.offset[PCDheader2.fields[i]] = i; - else { - PCDheader2.offset[PCDheader2.fields[i]] = sizeSum; - sizeSum += PCDheader2.size[i] * PCDheader2.count[i]; - } - PCDheader2.rowSize = sizeSum; - return PCDheader2; - } - const textData = decodeText$1(new Uint8Array(data)); - const PCDheader = parseHeader(textData); - const position = []; - const normal = []; - const color = []; - if (PCDheader.data === "ascii") { - const offset = PCDheader.offset; - const lines = textData.substr(PCDheader.headerLen).split("\n"); - for (let i = 0, l = lines.length; i < l; i++) { - if (lines[i] === "") continue; - const line = lines[i].split(" "); - if (offset.x !== void 0) { - position.push(parseFloat(line[offset.x])); - position.push(parseFloat(line[offset.y])); - position.push(parseFloat(line[offset.z])); - } - if (offset.rgb !== void 0) { - const rgb = parseFloat(line[offset.rgb]); - const r = rgb >> 16 & 255; - const g = rgb >> 8 & 255; - const b = rgb >> 0 & 255; - color.push(r / 255, g / 255, b / 255); - } - if (offset.normal_x !== void 0) { - normal.push(parseFloat(line[offset.normal_x])); - normal.push(parseFloat(line[offset.normal_y])); - normal.push(parseFloat(line[offset.normal_z])); - } - } - } - if (PCDheader.data === "binary_compressed") { - const sizes = new Uint32Array(data.slice(PCDheader.headerLen, PCDheader.headerLen + 8)); - const compressedSize = sizes[0]; - const decompressedSize = sizes[1]; - const decompressed = decompressLZF(new Uint8Array(data, PCDheader.headerLen + 8, compressedSize), decompressedSize); - const dataview = new DataView(decompressed.buffer); - const offset = PCDheader.offset; - for (let i = 0; i < PCDheader.points; i++) { - if (offset.x !== void 0) { - position.push(dataview.getFloat32(PCDheader.points * offset.x + PCDheader.size[0] * i, this.littleEndian)); - position.push(dataview.getFloat32(PCDheader.points * offset.y + PCDheader.size[1] * i, this.littleEndian)); - position.push(dataview.getFloat32(PCDheader.points * offset.z + PCDheader.size[2] * i, this.littleEndian)); - } - if (offset.rgb !== void 0) { - color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 2) / 255); - color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 1) / 255); - color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 0) / 255); - } - if (offset.normal_x !== void 0) { - normal.push(dataview.getFloat32(PCDheader.points * offset.normal_x + PCDheader.size[4] * i, this.littleEndian)); - normal.push(dataview.getFloat32(PCDheader.points * offset.normal_y + PCDheader.size[5] * i, this.littleEndian)); - normal.push(dataview.getFloat32(PCDheader.points * offset.normal_z + PCDheader.size[6] * i, this.littleEndian)); - } - } - } - if (PCDheader.data === "binary") { - const dataview = new DataView(data, PCDheader.headerLen); - const offset = PCDheader.offset; - for (let i = 0, row = 0; i < PCDheader.points; i++, row += PCDheader.rowSize) { - if (offset.x !== void 0) { - position.push(dataview.getFloat32(row + offset.x, this.littleEndian)); - position.push(dataview.getFloat32(row + offset.y, this.littleEndian)); - position.push(dataview.getFloat32(row + offset.z, this.littleEndian)); - } - if (offset.rgb !== void 0) { - color.push(dataview.getUint8(row + offset.rgb + 2) / 255); - color.push(dataview.getUint8(row + offset.rgb + 1) / 255); - color.push(dataview.getUint8(row + offset.rgb + 0) / 255); - } - if (offset.normal_x !== void 0) { - normal.push(dataview.getFloat32(row + offset.normal_x, this.littleEndian)); - normal.push(dataview.getFloat32(row + offset.normal_y, this.littleEndian)); - normal.push(dataview.getFloat32(row + offset.normal_z, this.littleEndian)); - } - } - } - const geometry = new BufferGeometry(); - if (position.length > 0) geometry.setAttribute("position", new Float32BufferAttribute(position, 3)); - if (normal.length > 0) geometry.setAttribute("normal", new Float32BufferAttribute(normal, 3)); - if (color.length > 0) geometry.setAttribute("color", new Float32BufferAttribute(color, 3)); - geometry.computeBoundingSphere(); - const material = new PointsMaterial({ size: .005 }); - if (color.length > 0) material.vertexColors = true; - else material.color.setHex(Math.random() * 16777215); - const mesh = new Points(geometry, material); - let name = url.split("").reverse().join(""); - name = /([^\/]*)/.exec(name); - name = name[1].split("").reverse().join(""); - mesh.name = name; - return mesh; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/lwo/LWO2Parser.js -var LWO2Parser = class { - constructor(IFFParser) { - this.IFF = IFFParser; - } - parseBlock() { - this.IFF.debugger.offset = this.IFF.reader.offset; - this.IFF.debugger.closeForms(); - const blockID = this.IFF.reader.getIDTag(); - let length = this.IFF.reader.getUint32(); - if (length > this.IFF.reader.dv.byteLength - this.IFF.reader.offset) { - this.IFF.reader.offset -= 4; - length = this.IFF.reader.getUint16(); - } - this.IFF.debugger.dataOffset = this.IFF.reader.offset; - this.IFF.debugger.length = length; - switch (blockID) { - case "FORM": - this.IFF.parseForm(length); - break; - case "ICON": - case "VMPA": - case "BBOX": - case "NORM": - case "PRE ": - case "POST": - case "KEY ": - case "SPAN": - case "TIME": - case "CLRS": - case "CLRA": - case "FILT": - case "DITH": - case "CONT": - case "BRIT": - case "SATR": - case "HUE ": - case "GAMM": - case "NEGA": - case "IFLT": - case "PFLT": - case "PROJ": - case "AXIS": - case "AAST": - case "PIXB": - case "AUVO": - case "STCK": - case "PROC": - case "VALU": - case "FUNC": - case "PNAM": - case "INAM": - case "GRST": - case "GREN": - case "GRPT": - case "FKEY": - case "IKEY": - case "CSYS": - case "OPAQ": - case "CMAP": - case "NLOC": - case "NZOM": - case "NVER": - case "NSRV": - case "NVSK": - case "NCRD": - case "WRPW": - case "WRPH": - case "NMOD": - case "NSEL": - case "NPRW": - case "NPLA": - case "NODS": - case "VERS": - case "ENUM": - case "TAG ": - case "OPAC": - case "CGMD": - case "CGTY": - case "CGST": - case "CGEN": - case "CGTS": - case "CGTE": - case "OSMP": - case "OMDE": - case "OUTR": - case "FLAG": - case "TRNL": - case "GLOW": - case "GVAL": - case "SHRP": - case "RFOP": - case "RSAN": - case "TROP": - case "RBLR": - case "TBLR": - case "CLRH": - case "CLRF": - case "ADTR": - case "LINE": - case "ALPH": - case "VCOL": - case "ENAB": - this.IFF.debugger.skipped = true; - this.IFF.reader.skip(length); - break; - case "SURF": - this.IFF.parseSurfaceLwo2(length); - break; - case "CLIP": - this.IFF.parseClipLwo2(length); - break; - case "IPIX": - case "IMIP": - case "IMOD": - case "AMOD": - case "IINV": - case "INCR": - case "IAXS": - case "IFOT": - case "ITIM": - case "IWRL": - case "IUTI": - case "IINX": - case "IINY": - case "IINZ": - case "IREF": - if (length === 4) this.IFF.currentNode[blockID] = this.IFF.reader.getInt32(); - else this.IFF.reader.skip(length); - break; - case "OTAG": - this.IFF.parseObjectTag(); - break; - case "LAYR": - this.IFF.parseLayer(length); - break; - case "PNTS": - this.IFF.parsePoints(length); - break; - case "VMAP": - this.IFF.parseVertexMapping(length); - break; - case "AUVU": - case "AUVN": - this.IFF.reader.skip(length - 1); - this.IFF.reader.getVariableLengthIndex(); - break; - case "POLS": - this.IFF.parsePolygonList(length); - break; - case "TAGS": - this.IFF.parseTagStrings(length); - break; - case "PTAG": - this.IFF.parsePolygonTagMapping(length); - break; - case "VMAD": - this.IFF.parseVertexMapping(length, true); - break; - case "DESC": - this.IFF.currentForm.description = this.IFF.reader.getString(); - break; - case "TEXT": - case "CMNT": - case "NCOM": - this.IFF.currentForm.comment = this.IFF.reader.getString(); - break; - case "NAME": - this.IFF.currentForm.channelName = this.IFF.reader.getString(); - break; - case "WRAP": - this.IFF.currentForm.wrap = { - w: this.IFF.reader.getUint16(), - h: this.IFF.reader.getUint16() - }; - break; - case "IMAG": - const index = this.IFF.reader.getVariableLengthIndex(); - this.IFF.currentForm.imageIndex = index; - break; - case "OREF": - this.IFF.currentForm.referenceObject = this.IFF.reader.getString(); - break; - case "ROID": - this.IFF.currentForm.referenceObjectID = this.IFF.reader.getUint32(); - break; - case "SSHN": - this.IFF.currentSurface.surfaceShaderName = this.IFF.reader.getString(); - break; - case "AOVN": - this.IFF.currentSurface.surfaceCustomAOVName = this.IFF.reader.getString(); - break; - case "NSTA": - this.IFF.currentForm.disabled = this.IFF.reader.getUint16(); - break; - case "NRNM": - this.IFF.currentForm.realName = this.IFF.reader.getString(); - break; - case "NNME": - this.IFF.currentForm.refName = this.IFF.reader.getString(); - this.IFF.currentSurface.nodes[this.IFF.currentForm.refName] = this.IFF.currentForm; - break; - case "INME": - if (!this.IFF.currentForm.nodeName) this.IFF.currentForm.nodeName = []; - this.IFF.currentForm.nodeName.push(this.IFF.reader.getString()); - break; - case "IINN": - if (!this.IFF.currentForm.inputNodeName) this.IFF.currentForm.inputNodeName = []; - this.IFF.currentForm.inputNodeName.push(this.IFF.reader.getString()); - break; - case "IINM": - if (!this.IFF.currentForm.inputName) this.IFF.currentForm.inputName = []; - this.IFF.currentForm.inputName.push(this.IFF.reader.getString()); - break; - case "IONM": - if (!this.IFF.currentForm.inputOutputName) this.IFF.currentForm.inputOutputName = []; - this.IFF.currentForm.inputOutputName.push(this.IFF.reader.getString()); - break; - case "FNAM": - this.IFF.currentForm.fileName = this.IFF.reader.getString(); - break; - case "CHAN": - if (length === 4) this.IFF.currentForm.textureChannel = this.IFF.reader.getIDTag(); - else this.IFF.reader.skip(length); - break; - case "SMAN": - const maxSmoothingAngle = this.IFF.reader.getFloat32(); - this.IFF.currentSurface.attributes.smooth = maxSmoothingAngle < 0 ? false : true; - break; - case "COLR": - this.IFF.currentSurface.attributes.Color = { value: this.IFF.reader.getFloat32Array(3) }; - this.IFF.reader.skip(2); - break; - case "LUMI": - this.IFF.currentSurface.attributes.Luminosity = { value: this.IFF.reader.getFloat32() }; - this.IFF.reader.skip(2); - break; - case "SPEC": - this.IFF.currentSurface.attributes.Specular = { value: this.IFF.reader.getFloat32() }; - this.IFF.reader.skip(2); - break; - case "DIFF": - this.IFF.currentSurface.attributes.Diffuse = { value: this.IFF.reader.getFloat32() }; - this.IFF.reader.skip(2); - break; - case "REFL": - this.IFF.currentSurface.attributes.Reflection = { value: this.IFF.reader.getFloat32() }; - this.IFF.reader.skip(2); - break; - case "GLOS": - this.IFF.currentSurface.attributes.Glossiness = { value: this.IFF.reader.getFloat32() }; - this.IFF.reader.skip(2); - break; - case "TRAN": - this.IFF.currentSurface.attributes.opacity = this.IFF.reader.getFloat32(); - this.IFF.reader.skip(2); - break; - case "BUMP": - this.IFF.currentSurface.attributes.bumpStrength = this.IFF.reader.getFloat32(); - this.IFF.reader.skip(2); - break; - case "SIDE": - this.IFF.currentSurface.attributes.side = this.IFF.reader.getUint16(); - break; - case "RIMG": - this.IFF.currentSurface.attributes.reflectionMap = this.IFF.reader.getVariableLengthIndex(); - break; - case "RIND": - this.IFF.currentSurface.attributes.refractiveIndex = this.IFF.reader.getFloat32(); - this.IFF.reader.skip(2); - break; - case "TIMG": - this.IFF.currentSurface.attributes.refractionMap = this.IFF.reader.getVariableLengthIndex(); - break; - case "IMAP": - this.IFF.reader.skip(2); - break; - case "TMAP": - this.IFF.debugger.skipped = true; - this.IFF.reader.skip(length); - break; - case "IUVI": - this.IFF.currentNode.UVChannel = this.IFF.reader.getString(length); - break; - case "IUTL": - this.IFF.currentNode.widthWrappingMode = this.IFF.reader.getUint32(); - break; - case "IVTL": - this.IFF.currentNode.heightWrappingMode = this.IFF.reader.getUint32(); - break; - case "BLOK": break; - default: this.IFF.parseUnknownCHUNK(blockID, length); - } - if (blockID != "FORM") { - this.IFF.debugger.node = 1; - this.IFF.debugger.nodeID = blockID; - this.IFF.debugger.log(); - } - if (this.IFF.reader.offset >= this.IFF.currentFormEnd) this.IFF.currentForm = this.IFF.parentForm; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/lwo/LWO3Parser.js -var LWO3Parser = class { - constructor(IFFParser) { - this.IFF = IFFParser; - } - parseBlock() { - this.IFF.debugger.offset = this.IFF.reader.offset; - this.IFF.debugger.closeForms(); - const blockID = this.IFF.reader.getIDTag(); - const length = this.IFF.reader.getUint32(); - this.IFF.debugger.dataOffset = this.IFF.reader.offset; - this.IFF.debugger.length = length; - switch (blockID) { - case "FORM": - this.IFF.parseForm(length); - break; - case "ICON": - case "VMPA": - case "BBOX": - case "NORM": - case "PRE ": - case "POST": - case "KEY ": - case "SPAN": - case "TIME": - case "CLRS": - case "CLRA": - case "FILT": - case "DITH": - case "CONT": - case "BRIT": - case "SATR": - case "HUE ": - case "GAMM": - case "NEGA": - case "IFLT": - case "PFLT": - case "PROJ": - case "AXIS": - case "AAST": - case "PIXB": - case "STCK": - case "VALU": - case "PNAM": - case "INAM": - case "GRST": - case "GREN": - case "GRPT": - case "FKEY": - case "IKEY": - case "CSYS": - case "OPAQ": - case "CMAP": - case "NLOC": - case "NZOM": - case "NVER": - case "NSRV": - case "NCRD": - case "NMOD": - case "NSEL": - case "NPRW": - case "NPLA": - case "VERS": - case "ENUM": - case "TAG ": - case "CGMD": - case "CGTY": - case "CGST": - case "CGEN": - case "CGTS": - case "CGTE": - case "OSMP": - case "OMDE": - case "OUTR": - case "FLAG": - case "TRNL": - case "SHRP": - case "RFOP": - case "RSAN": - case "TROP": - case "RBLR": - case "TBLR": - case "CLRH": - case "CLRF": - case "ADTR": - case "GLOW": - case "LINE": - case "ALPH": - case "VCOL": - case "ENAB": - this.IFF.debugger.skipped = true; - this.IFF.reader.skip(length); - break; - case "IPIX": - case "IMIP": - case "IMOD": - case "AMOD": - case "IINV": - case "INCR": - case "IAXS": - case "IFOT": - case "ITIM": - case "IWRL": - case "IUTI": - case "IINX": - case "IINY": - case "IINZ": - case "IREF": - if (length === 4) this.IFF.currentNode[blockID] = this.IFF.reader.getInt32(); - else this.IFF.reader.skip(length); - break; - case "OTAG": - this.IFF.parseObjectTag(); - break; - case "LAYR": - this.IFF.parseLayer(length); - break; - case "PNTS": - this.IFF.parsePoints(length); - break; - case "VMAP": - this.IFF.parseVertexMapping(length); - break; - case "POLS": - this.IFF.parsePolygonList(length); - break; - case "TAGS": - this.IFF.parseTagStrings(length); - break; - case "PTAG": - this.IFF.parsePolygonTagMapping(length); - break; - case "VMAD": - this.IFF.parseVertexMapping(length, true); - break; - case "DESC": - this.IFF.currentForm.description = this.IFF.reader.getString(); - break; - case "TEXT": - case "CMNT": - case "NCOM": - this.IFF.currentForm.comment = this.IFF.reader.getString(); - break; - case "NAME": - this.IFF.currentForm.channelName = this.IFF.reader.getString(); - break; - case "WRAP": - this.IFF.currentForm.wrap = { - w: this.IFF.reader.getUint16(), - h: this.IFF.reader.getUint16() - }; - break; - case "IMAG": - const index = this.IFF.reader.getVariableLengthIndex(); - this.IFF.currentForm.imageIndex = index; - break; - case "OREF": - this.IFF.currentForm.referenceObject = this.IFF.reader.getString(); - break; - case "ROID": - this.IFF.currentForm.referenceObjectID = this.IFF.reader.getUint32(); - break; - case "SSHN": - this.IFF.currentSurface.surfaceShaderName = this.IFF.reader.getString(); - break; - case "AOVN": - this.IFF.currentSurface.surfaceCustomAOVName = this.IFF.reader.getString(); - break; - case "NSTA": - this.IFF.currentForm.disabled = this.IFF.reader.getUint16(); - break; - case "NRNM": - this.IFF.currentForm.realName = this.IFF.reader.getString(); - break; - case "NNME": - this.IFF.currentForm.refName = this.IFF.reader.getString(); - this.IFF.currentSurface.nodes[this.IFF.currentForm.refName] = this.IFF.currentForm; - break; - case "INME": - if (!this.IFF.currentForm.nodeName) this.IFF.currentForm.nodeName = []; - this.IFF.currentForm.nodeName.push(this.IFF.reader.getString()); - break; - case "IINN": - if (!this.IFF.currentForm.inputNodeName) this.IFF.currentForm.inputNodeName = []; - this.IFF.currentForm.inputNodeName.push(this.IFF.reader.getString()); - break; - case "IINM": - if (!this.IFF.currentForm.inputName) this.IFF.currentForm.inputName = []; - this.IFF.currentForm.inputName.push(this.IFF.reader.getString()); - break; - case "IONM": - if (!this.IFF.currentForm.inputOutputName) this.IFF.currentForm.inputOutputName = []; - this.IFF.currentForm.inputOutputName.push(this.IFF.reader.getString()); - break; - case "FNAM": - this.IFF.currentForm.fileName = this.IFF.reader.getString(); - break; - case "CHAN": - if (length === 4) this.IFF.currentForm.textureChannel = this.IFF.reader.getIDTag(); - else this.IFF.reader.skip(length); - break; - case "SMAN": - const maxSmoothingAngle = this.IFF.reader.getFloat32(); - this.IFF.currentSurface.attributes.smooth = maxSmoothingAngle < 0 ? false : true; - break; - case "COLR": - this.IFF.currentSurface.attributes.Color = { value: this.IFF.reader.getFloat32Array(3) }; - this.IFF.reader.skip(2); - break; - case "LUMI": - this.IFF.currentSurface.attributes.Luminosity = { value: this.IFF.reader.getFloat32() }; - this.IFF.reader.skip(2); - break; - case "SPEC": - this.IFF.currentSurface.attributes.Specular = { value: this.IFF.reader.getFloat32() }; - this.IFF.reader.skip(2); - break; - case "DIFF": - this.IFF.currentSurface.attributes.Diffuse = { value: this.IFF.reader.getFloat32() }; - this.IFF.reader.skip(2); - break; - case "REFL": - this.IFF.currentSurface.attributes.Reflection = { value: this.IFF.reader.getFloat32() }; - this.IFF.reader.skip(2); - break; - case "GLOS": - this.IFF.currentSurface.attributes.Glossiness = { value: this.IFF.reader.getFloat32() }; - this.IFF.reader.skip(2); - break; - case "TRAN": - this.IFF.currentSurface.attributes.opacity = this.IFF.reader.getFloat32(); - this.IFF.reader.skip(2); - break; - case "BUMP": - this.IFF.currentSurface.attributes.bumpStrength = this.IFF.reader.getFloat32(); - this.IFF.reader.skip(2); - break; - case "SIDE": - this.IFF.currentSurface.attributes.side = this.IFF.reader.getUint16(); - break; - case "RIMG": - this.IFF.currentSurface.attributes.reflectionMap = this.IFF.reader.getVariableLengthIndex(); - break; - case "RIND": - this.IFF.currentSurface.attributes.refractiveIndex = this.IFF.reader.getFloat32(); - this.IFF.reader.skip(2); - break; - case "TIMG": - this.IFF.currentSurface.attributes.refractionMap = this.IFF.reader.getVariableLengthIndex(); - break; - case "IMAP": - this.IFF.currentSurface.attributes.imageMapIndex = this.IFF.reader.getUint32(); - break; - case "IUVI": - this.IFF.currentNode.UVChannel = this.IFF.reader.getString(length); - break; - case "IUTL": - this.IFF.currentNode.widthWrappingMode = this.IFF.reader.getUint32(); - break; - case "IVTL": - this.IFF.currentNode.heightWrappingMode = this.IFF.reader.getUint32(); - break; - default: this.IFF.parseUnknownCHUNK(blockID, length); - } - if (blockID != "FORM") { - this.IFF.debugger.node = 1; - this.IFF.debugger.nodeID = blockID; - this.IFF.debugger.log(); - } - if (this.IFF.reader.offset >= this.IFF.currentFormEnd) this.IFF.currentForm = this.IFF.parentForm; - } -}; -//#endregion -//#region node_modules/three-stdlib/loaders/lwo/IFFParser.js -var IFFParser = class { - constructor() { - this.debugger = new Debugger(); - } - parse(buffer) { - this.reader = new DataViewReader(buffer); - this.tree = { - materials: {}, - layers: [], - tags: [], - textures: [] - }; - this.currentLayer = this.tree; - this.currentForm = this.tree; - this.parseTopForm(); - if (this.tree.format === void 0) return; - if (this.tree.format === "LWO2") { - this.parser = new LWO2Parser(this); - while (!this.reader.endOfFile()) this.parser.parseBlock(); - } else if (this.tree.format === "LWO3") { - this.parser = new LWO3Parser(this); - while (!this.reader.endOfFile()) this.parser.parseBlock(); - } - this.debugger.offset = this.reader.offset; - this.debugger.closeForms(); - return this.tree; - } - parseTopForm() { - this.debugger.offset = this.reader.offset; - if (this.reader.getIDTag() !== "FORM") { - console.warn("LWOLoader: Top-level FORM missing."); - return; - } - var length = this.reader.getUint32(); - this.debugger.dataOffset = this.reader.offset; - this.debugger.length = length; - var type = this.reader.getIDTag(); - if (type === "LWO2") this.tree.format = type; - else if (type === "LWO3") this.tree.format = type; - this.debugger.node = 0; - this.debugger.nodeID = type; - this.debugger.log(); - } - parseForm(length) { - var type = this.reader.getIDTag(); - switch (type) { - case "ISEQ": - case "ANIM": - case "STCC": - case "VPVL": - case "VPRM": - case "NROT": - case "WRPW": - case "WRPH": - case "FUNC": - case "FALL": - case "OPAC": - case "GRAD": - case "ENVS": - case "VMOP": - case "VMBG": - case "OMAX": - case "STEX": - case "CKBG": - case "CKEY": - case "VMLA": - case "VMLB": - this.debugger.skipped = true; - this.skipForm(length); - break; - case "META": - case "NNDS": - case "NODS": - case "NDTA": - case "ADAT": - case "AOVS": - case "BLOK": - case "IBGC": - case "IOPC": - case "IIMG": - case "TXTR": - this.debugger.length = 4; - this.debugger.skipped = true; - break; - case "IFAL": - case "ISCL": - case "IPOS": - case "IROT": - case "IBMP": - case "IUTD": - case "IVTD": - this.parseTextureNodeAttribute(type); - break; - case "ENVL": - this.parseEnvelope(length); - break; - case "CLIP": - if (this.tree.format === "LWO2") this.parseForm(length); - else this.parseClip(length); - break; - case "STIL": - this.parseImage(); - break; - case "XREF": - this.reader.skip(8); - this.currentForm.referenceTexture = { - index: this.reader.getUint32(), - refName: this.reader.getString() - }; - break; - case "IMST": - this.parseImageStateForm(length); - break; - case "SURF": - this.parseSurfaceForm(length); - break; - case "VALU": - this.parseValueForm(length); - break; - case "NTAG": - this.parseSubNode(length); - break; - case "ATTR": - case "SATR": - this.setupForm("attributes", length); - break; - case "NCON": - this.parseConnections(length); - break; - case "SSHA": - this.parentForm = this.currentForm; - this.currentForm = this.currentSurface; - this.setupForm("surfaceShader", length); - break; - case "SSHD": - this.setupForm("surfaceShaderData", length); - break; - case "ENTR": - this.parseEntryForm(length); - break; - case "IMAP": - this.parseImageMap(length); - break; - case "TAMP": - this.parseXVAL("amplitude", length); - break; - case "TMAP": - this.setupForm("textureMap", length); - break; - case "CNTR": - this.parseXVAL3("center", length); - break; - case "SIZE": - this.parseXVAL3("scale", length); - break; - case "ROTA": - this.parseXVAL3("rotation", length); - break; - default: this.parseUnknownForm(type, length); - } - this.debugger.node = 0; - this.debugger.nodeID = type; - this.debugger.log(); - } - setupForm(type, length) { - if (!this.currentForm) this.currentForm = this.currentNode; - this.currentFormEnd = this.reader.offset + length; - this.parentForm = this.currentForm; - if (!this.currentForm[type]) { - this.currentForm[type] = {}; - this.currentForm = this.currentForm[type]; - } else { - console.warn("LWOLoader: form already exists on parent: ", type, this.currentForm); - this.currentForm = this.currentForm[type]; - } - } - skipForm(length) { - this.reader.skip(length - 4); - } - parseUnknownForm(type, length) { - console.warn("LWOLoader: unknown FORM encountered: " + type, length); - printBuffer(this.reader.dv.buffer, this.reader.offset, length - 4); - this.reader.skip(length - 4); - } - parseSurfaceForm(length) { - this.reader.skip(8); - var name = this.reader.getString(); - var surface = { - attributes: {}, - connections: {}, - name, - inputName: name, - nodes: {}, - source: this.reader.getString() - }; - this.tree.materials[name] = surface; - this.currentSurface = surface; - this.parentForm = this.tree.materials; - this.currentForm = surface; - this.currentFormEnd = this.reader.offset + length; - } - parseSurfaceLwo2(length) { - var name = this.reader.getString(); - var surface = { - attributes: {}, - connections: {}, - name, - nodes: {}, - source: this.reader.getString() - }; - this.tree.materials[name] = surface; - this.currentSurface = surface; - this.parentForm = this.tree.materials; - this.currentForm = surface; - this.currentFormEnd = this.reader.offset + length; - } - parseSubNode(length) { - this.reader.skip(8); - var node = { name: this.reader.getString() }; - this.currentForm = node; - this.currentNode = node; - this.currentFormEnd = this.reader.offset + length; - } - parseConnections(length) { - this.currentFormEnd = this.reader.offset + length; - this.parentForm = this.currentForm; - this.currentForm = this.currentSurface.connections; - } - parseEntryForm(length) { - this.reader.skip(8); - var name = this.reader.getString(); - this.currentForm = this.currentNode.attributes; - this.setupForm(name, length); - } - parseValueForm() { - this.reader.skip(8); - var valueType = this.reader.getString(); - if (valueType === "double") this.currentForm.value = this.reader.getUint64(); - else if (valueType === "int") this.currentForm.value = this.reader.getUint32(); - else if (valueType === "vparam") { - this.reader.skip(24); - this.currentForm.value = this.reader.getFloat64(); - } else if (valueType === "vparam3") { - this.reader.skip(24); - this.currentForm.value = this.reader.getFloat64Array(3); - } - } - parseImageStateForm() { - this.reader.skip(8); - this.currentForm.mipMapLevel = this.reader.getFloat32(); - } - parseImageMap(length) { - this.currentFormEnd = this.reader.offset + length; - this.parentForm = this.currentForm; - if (!this.currentForm.maps) this.currentForm.maps = []; - var map = {}; - this.currentForm.maps.push(map); - this.currentForm = map; - this.reader.skip(10); - } - parseTextureNodeAttribute(type) { - this.reader.skip(28); - this.reader.skip(20); - switch (type) { - case "ISCL": - this.currentNode.scale = this.reader.getFloat32Array(3); - break; - case "IPOS": - this.currentNode.position = this.reader.getFloat32Array(3); - break; - case "IROT": - this.currentNode.rotation = this.reader.getFloat32Array(3); - break; - case "IFAL": - this.currentNode.falloff = this.reader.getFloat32Array(3); - break; - case "IBMP": - this.currentNode.amplitude = this.reader.getFloat32(); - break; - case "IUTD": - this.currentNode.uTiles = this.reader.getFloat32(); - break; - case "IVTD": - this.currentNode.vTiles = this.reader.getFloat32(); - break; - } - this.reader.skip(2); - } - parseEnvelope(length) { - this.reader.skip(length - 4); - } - parseClip(length) { - if (this.reader.getIDTag() === "FORM") { - this.reader.skip(16); - this.currentNode.fileName = this.reader.getString(); - return; - } - this.reader.setOffset(this.reader.offset - 4); - this.currentFormEnd = this.reader.offset + length; - this.parentForm = this.currentForm; - this.reader.skip(8); - var texture = { index: this.reader.getUint32() }; - this.tree.textures.push(texture); - this.currentForm = texture; - } - parseClipLwo2(length) { - var texture = { - index: this.reader.getUint32(), - fileName: "" - }; - while (true) { - var tag = this.reader.getIDTag(); - var n_length = this.reader.getUint16(); - if (tag === "STIL") { - texture.fileName = this.reader.getString(); - break; - } - if (n_length >= length) break; - } - this.tree.textures.push(texture); - this.currentForm = texture; - } - parseImage() { - this.reader.skip(8); - this.currentForm.fileName = this.reader.getString(); - } - parseXVAL(type, length) { - var endOffset = this.reader.offset + length - 4; - this.reader.skip(8); - this.currentForm[type] = this.reader.getFloat32(); - this.reader.setOffset(endOffset); - } - parseXVAL3(type, length) { - var endOffset = this.reader.offset + length - 4; - this.reader.skip(8); - this.currentForm[type] = { - x: this.reader.getFloat32(), - y: this.reader.getFloat32(), - z: this.reader.getFloat32() - }; - this.reader.setOffset(endOffset); - } - parseObjectTag() { - if (!this.tree.objectTags) this.tree.objectTags = {}; - this.tree.objectTags[this.reader.getIDTag()] = { tagString: this.reader.getString() }; - } - parseLayer(length) { - var layer = { - number: this.reader.getUint16(), - flags: this.reader.getUint16(), - pivot: this.reader.getFloat32Array(3), - name: this.reader.getString() - }; - this.tree.layers.push(layer); - this.currentLayer = layer; - var parsedLength = 16 + stringOffset(this.currentLayer.name); - this.currentLayer.parent = parsedLength < length ? this.reader.getUint16() : -1; - } - parsePoints(length) { - this.currentPoints = []; - for (var i = 0; i < length / 4; i += 3) this.currentPoints.push(this.reader.getFloat32(), this.reader.getFloat32(), -this.reader.getFloat32()); - } - parseVertexMapping(length, discontinuous) { - var finalOffset = this.reader.offset + length; - var channelName = this.reader.getString(); - if (this.reader.offset === finalOffset) { - this.currentForm.UVChannel = channelName; - return; - } - this.reader.setOffset(this.reader.offset - stringOffset(channelName)); - var type = this.reader.getIDTag(); - this.reader.getUint16(); - var name = this.reader.getString(); - var remainingLength = length - 6 - stringOffset(name); - switch (type) { - case "TXUV": - this.parseUVMapping(name, finalOffset, discontinuous); - break; - case "MORF": - case "SPOT": - this.parseMorphTargets(name, finalOffset, type); - break; - case "APSL": - case "NORM": - case "WGHT": - case "MNVW": - case "PICK": - case "RGB ": - case "RGBA": - this.reader.skip(remainingLength); - break; - default: - console.warn("LWOLoader: unknown vertex map type: " + type); - this.reader.skip(remainingLength); - } - } - parseUVMapping(name, finalOffset, discontinuous) { - var uvIndices = []; - var polyIndices = []; - var uvs = []; - while (this.reader.offset < finalOffset) { - uvIndices.push(this.reader.getVariableLengthIndex()); - if (discontinuous) polyIndices.push(this.reader.getVariableLengthIndex()); - uvs.push(this.reader.getFloat32(), this.reader.getFloat32()); - } - if (discontinuous) { - if (!this.currentLayer.discontinuousUVs) this.currentLayer.discontinuousUVs = {}; - this.currentLayer.discontinuousUVs[name] = { - uvIndices, - polyIndices, - uvs - }; - } else { - if (!this.currentLayer.uvs) this.currentLayer.uvs = {}; - this.currentLayer.uvs[name] = { - uvIndices, - uvs - }; - } - } - parseMorphTargets(name, finalOffset, type) { - var indices = []; - var points = []; - type = type === "MORF" ? "relative" : "absolute"; - while (this.reader.offset < finalOffset) { - indices.push(this.reader.getVariableLengthIndex()); - points.push(this.reader.getFloat32(), this.reader.getFloat32(), -this.reader.getFloat32()); - } - if (!this.currentLayer.morphTargets) this.currentLayer.morphTargets = {}; - this.currentLayer.morphTargets[name] = { - indices, - points, - type - }; - } - parsePolygonList(length) { - var finalOffset = this.reader.offset + length; - var type = this.reader.getIDTag(); - var indices = []; - var polygonDimensions = []; - while (this.reader.offset < finalOffset) { - var numverts = this.reader.getUint16(); - numverts = numverts & 1023; - polygonDimensions.push(numverts); - for (var j = 0; j < numverts; j++) indices.push(this.reader.getVariableLengthIndex()); - } - var geometryData = { - type, - vertexIndices: indices, - polygonDimensions, - points: this.currentPoints - }; - if (polygonDimensions[0] === 1) geometryData.type = "points"; - else if (polygonDimensions[0] === 2) geometryData.type = "lines"; - this.currentLayer.geometry = geometryData; - } - parseTagStrings(length) { - this.tree.tags = this.reader.getStringArray(length); - } - parsePolygonTagMapping(length) { - var finalOffset = this.reader.offset + length; - if (this.reader.getIDTag() === "SURF") this.parseMaterialIndices(finalOffset); - else this.reader.skip(length - 4); - } - parseMaterialIndices(finalOffset) { - this.currentLayer.geometry.materialIndices = []; - while (this.reader.offset < finalOffset) { - var polygonIndex = this.reader.getVariableLengthIndex(); - var materialIndex = this.reader.getUint16(); - this.currentLayer.geometry.materialIndices.push(polygonIndex, materialIndex); - } - } - parseUnknownCHUNK(blockID, length) { - console.warn("LWOLoader: unknown chunk type: " + blockID + " length: " + length); - var data = this.reader.getString(length); - this.currentForm[blockID] = data; - } -}; -var DataViewReader = class { - constructor(buffer) { - this.dv = new DataView(buffer); - this.offset = 0; - this._textDecoder = new TextDecoder(); - this._bytes = new Uint8Array(buffer); - } - size() { - return this.dv.buffer.byteLength; - } - setOffset(offset) { - if (offset > 0 && offset < this.dv.buffer.byteLength) this.offset = offset; - else console.error("LWOLoader: invalid buffer offset"); - } - endOfFile() { - if (this.offset >= this.size()) return true; - return false; - } - skip(length) { - this.offset += length; - } - getUint8() { - var value = this.dv.getUint8(this.offset); - this.offset += 1; - return value; - } - getUint16() { - var value = this.dv.getUint16(this.offset); - this.offset += 2; - return value; - } - getInt32() { - var value = this.dv.getInt32(this.offset, false); - this.offset += 4; - return value; - } - getUint32() { - var value = this.dv.getUint32(this.offset, false); - this.offset += 4; - return value; - } - getUint64() { - var low, high = this.getUint32(); - low = this.getUint32(); - return high * 4294967296 + low; - } - getFloat32() { - var value = this.dv.getFloat32(this.offset, false); - this.offset += 4; - return value; - } - getFloat32Array(size) { - var a = []; - for (var i = 0; i < size; i++) a.push(this.getFloat32()); - return a; - } - getFloat64() { - var value = this.dv.getFloat64(this.offset, this.littleEndian); - this.offset += 8; - return value; - } - getFloat64Array(size) { - var a = []; - for (var i = 0; i < size; i++) a.push(this.getFloat64()); - return a; - } - getVariableLengthIndex() { - var firstByte = this.getUint8(); - if (firstByte === 255) return this.getUint8() * 65536 + this.getUint8() * 256 + this.getUint8(); - return firstByte * 256 + this.getUint8(); - } - getIDTag() { - return this.getString(4); - } - getString(size) { - if (size === 0) return; - const start = this.offset; - let result; - let length; - if (size) { - length = size; - result = this._textDecoder.decode(new Uint8Array(this.dv.buffer, start, size)); - } else { - length = this._bytes.indexOf(0, start) - start; - result = this._textDecoder.decode(new Uint8Array(this.dv.buffer, start, length)); - length++; - length += length % 2; - } - this.skip(length); - return result; - } - getStringArray(size) { - var a = this.getString(size); - a = a.split("\0"); - return a.filter(Boolean); - } -}; -var Debugger = class { - constructor() { - this.active = false; - this.depth = 0; - this.formList = []; - } - enable() { - this.active = true; - } - log() { - if (!this.active) return; - var nodeType; - switch (this.node) { - case 0: - nodeType = "FORM"; - break; - case 1: - nodeType = "CHK"; - break; - case 2: - nodeType = "S-CHK"; - break; - } - console.log("| ".repeat(this.depth) + nodeType, this.nodeID, `( ${this.offset} ) -> ( ${this.dataOffset + this.length} )`, this.node == 0 ? " {" : "", this.skipped ? "SKIPPED" : "", this.node == 0 && this.skipped ? "}" : ""); - if (this.node == 0 && !this.skipped) { - this.depth += 1; - this.formList.push(this.dataOffset + this.length); - } - this.skipped = false; - } - closeForms() { - if (!this.active) return; - for (var i = this.formList.length - 1; i >= 0; i--) if (this.offset >= this.formList[i]) { - this.depth -= 1; - console.log("| ".repeat(this.depth) + "}"); - this.formList.splice(-1, 1); - } - } -}; -function isEven(num) { - return num % 2; -} -function stringOffset(string) { - return string.length + 1 + (isEven(string.length + 1) ? 1 : 0); -} -function printBuffer(buffer, from, to) { - console.log(new TextDecoder().decode(new Uint8Array(buffer, from, to))); -} -//#endregion -//#region node_modules/three-stdlib/loaders/LWOLoader.js -var _lwoTree; -var LWOLoader = class extends Loader { - constructor(manager, parameters = {}) { - super(manager); - this.resourcePath = parameters.resourcePath !== void 0 ? parameters.resourcePath : ""; - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const path = scope.path === "" ? extractParentUrl(url, "Objects") : scope.path; - const modelName = url.split(path).pop().split(".")[0]; - const loader = new FileLoader(this.manager); - loader.setPath(scope.path); - loader.setResponseType("arraybuffer"); - loader.load(url, function(buffer) { - try { - onLoad(scope.parse(buffer, path, modelName)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - parse(iffBuffer, path, modelName) { - _lwoTree = new IFFParser().parse(iffBuffer); - return new LWOTreeParser(new TextureLoader(this.manager).setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin)).parse(modelName); - } -}; -var LWOTreeParser = class { - constructor(textureLoader) { - this.textureLoader = textureLoader; - } - parse(modelName) { - this.materials = new MaterialParser(this.textureLoader).parse(); - this.defaultLayerName = modelName; - this.meshes = this.parseLayers(); - return { - materials: this.materials, - meshes: this.meshes - }; - } - parseLayers() { - const meshes = []; - const finalMeshes = []; - const geometryParser = new GeometryParser(); - const scope = this; - _lwoTree.layers.forEach(function(layer) { - const geometry = geometryParser.parse(layer.geometry, layer); - const mesh = scope.parseMesh(geometry, layer); - meshes[layer.number] = mesh; - if (layer.parent === -1) finalMeshes.push(mesh); - else meshes[layer.parent].add(mesh); - }); - this.applyPivots(finalMeshes); - return finalMeshes; - } - parseMesh(geometry, layer) { - let mesh; - const materials = this.getMaterials(geometry.userData.matNames, layer.geometry.type); - if (UV1 === "uv2") this.duplicateUVs(geometry, materials); - if (layer.geometry.type === "points") mesh = new Points(geometry, materials); - else if (layer.geometry.type === "lines") mesh = new LineSegments(geometry, materials); - else mesh = new Mesh(geometry, materials); - if (layer.name) mesh.name = layer.name; - else mesh.name = this.defaultLayerName + "_layer_" + layer.number; - mesh.userData.pivot = layer.pivot; - return mesh; - } - applyPivots(meshes) { - meshes.forEach(function(mesh) { - mesh.traverse(function(child) { - const pivot = child.userData.pivot; - child.position.x += pivot[0]; - child.position.y += pivot[1]; - child.position.z += pivot[2]; - if (child.parent) { - const parentPivot = child.parent.userData.pivot; - child.position.x -= parentPivot[0]; - child.position.y -= parentPivot[1]; - child.position.z -= parentPivot[2]; - } - }); - }); - } - getMaterials(namesArray, type) { - const materials = []; - const scope = this; - namesArray.forEach(function(name, i) { - materials[i] = scope.getMaterialByName(name); - }); - if (type === "points" || type === "lines") materials.forEach(function(mat, i) { - const spec = { color: mat.color }; - if (type === "points") { - spec.size = .1; - spec.map = mat.map; - spec.morphTargets = mat.morphTargets; - materials[i] = new PointsMaterial(spec); - } else if (type === "lines") materials[i] = new LineBasicMaterial(spec); - }); - const filtered = materials.filter(Boolean); - if (filtered.length === 1) return filtered[0]; - return materials; - } - getMaterialByName(name) { - return this.materials.filter(function(m) { - return m.name === name; - })[0]; - } - duplicateUVs(geometry, materials) { - let duplicateUVs = false; - if (!Array.isArray(materials)) { - if (materials.aoMap) duplicateUVs = true; - } else materials.forEach(function(material) { - if (material.aoMap) duplicateUVs = true; - }); - if (!duplicateUVs) return; - geometry.setAttribute("uv2", new BufferAttribute(geometry.attributes.uv.array, 2)); - } -}; -var MaterialParser = class { - constructor(textureLoader) { - this.textureLoader = textureLoader; - } - parse() { - const materials = []; - this.textures = {}; - for (const name in _lwoTree.materials) if (_lwoTree.format === "LWO3") materials.push(this.parseMaterial(_lwoTree.materials[name], name, _lwoTree.textures)); - else if (_lwoTree.format === "LWO2") materials.push(this.parseMaterialLwo2(_lwoTree.materials[name], name, _lwoTree.textures)); - return materials; - } - parseMaterial(materialData, name, textures) { - let params = { - name, - side: this.getSide(materialData.attributes), - flatShading: this.getSmooth(materialData.attributes) - }; - const connections = this.parseConnections(materialData.connections, materialData.nodes); - const maps = this.parseTextureNodes(connections.maps); - this.parseAttributeImageMaps(connections.attributes, textures, maps, materialData.maps); - const attributes = this.parseAttributes(connections.attributes, maps); - this.parseEnvMap(connections, maps, attributes); - params = Object.assign(maps, params); - params = Object.assign(params, attributes); - return new (this.getMaterialType(connections.attributes))(params); - } - parseMaterialLwo2(materialData, name) { - let params = { - name, - side: this.getSide(materialData.attributes), - flatShading: this.getSmooth(materialData.attributes) - }; - const attributes = this.parseAttributes(materialData.attributes, {}); - params = Object.assign(params, attributes); - return new MeshPhongMaterial(params); - } - getSide(attributes) { - if (!attributes.side) return 1; - switch (attributes.side) { - case 0: - case 1: return 1; - case 2: return 0; - case 3: return 2; - } - } - getSmooth(attributes) { - if (!attributes.smooth) return true; - return !attributes.smooth; - } - parseConnections(connections, nodes) { - const materialConnections = { maps: {} }; - const inputName = connections.inputName; - const inputNodeName = connections.inputNodeName; - const nodeName = connections.nodeName; - const scope = this; - inputName.forEach(function(name, index) { - if (name === "Material") { - const matNode = scope.getNodeByRefName(inputNodeName[index], nodes); - materialConnections.attributes = matNode.attributes; - materialConnections.envMap = matNode.fileName; - materialConnections.name = inputNodeName[index]; - } - }); - nodeName.forEach(function(name, index) { - if (name === materialConnections.name) materialConnections.maps[inputName[index]] = scope.getNodeByRefName(inputNodeName[index], nodes); - }); - return materialConnections; - } - getNodeByRefName(refName, nodes) { - for (const name in nodes) if (nodes[name].refName === refName) return nodes[name]; - } - parseTextureNodes(textureNodes) { - const maps = {}; - for (const name in textureNodes) { - const node = textureNodes[name]; - const path = node.fileName; - if (!path) return; - const texture = this.loadTexture(path); - if (node.widthWrappingMode !== void 0) texture.wrapS = this.getWrappingType(node.widthWrappingMode); - if (node.heightWrappingMode !== void 0) texture.wrapT = this.getWrappingType(node.heightWrappingMode); - switch (name) { - case "Color": - maps.map = texture; - break; - case "Roughness": - maps.roughnessMap = texture; - maps.roughness = .5; - break; - case "Specular": - maps.specularMap = texture; - maps.specular = 16777215; - break; - case "Luminous": - maps.emissiveMap = texture; - maps.emissive = 8421504; - break; - case "Luminous Color": - maps.emissive = 8421504; - break; - case "Metallic": - maps.metalnessMap = texture; - maps.metalness = .5; - break; - case "Transparency": - case "Alpha": - maps.alphaMap = texture; - maps.transparent = true; - break; - case "Normal": - maps.normalMap = texture; - if (node.amplitude !== void 0) maps.normalScale = new Vector2(node.amplitude, node.amplitude); - break; - case "Bump": - maps.bumpMap = texture; - break; - } - } - if (maps.roughnessMap && maps.specularMap) delete maps.specularMap; - return maps; - } - parseAttributeImageMaps(attributes, textures, maps) { - for (const name in attributes) { - const attribute = attributes[name]; - if (attribute.maps) { - const mapData = attribute.maps[0]; - const path = this.getTexturePathByIndex(mapData.imageIndex, textures); - if (!path) return; - const texture = this.loadTexture(path); - if (mapData.wrap !== void 0) texture.wrapS = this.getWrappingType(mapData.wrap.w); - if (mapData.wrap !== void 0) texture.wrapT = this.getWrappingType(mapData.wrap.h); - switch (name) { - case "Color": - maps.map = texture; - break; - case "Diffuse": - maps.aoMap = texture; - break; - case "Roughness": - maps.roughnessMap = texture; - maps.roughness = 1; - break; - case "Specular": - maps.specularMap = texture; - maps.specular = 16777215; - break; - case "Luminosity": - maps.emissiveMap = texture; - maps.emissive = 8421504; - break; - case "Metallic": - maps.metalnessMap = texture; - maps.metalness = 1; - break; - case "Transparency": - case "Alpha": - maps.alphaMap = texture; - maps.transparent = true; - break; - case "Normal": - maps.normalMap = texture; - break; - case "Bump": - maps.bumpMap = texture; - break; - } - } - } - } - parseAttributes(attributes, maps) { - const params = {}; - if (attributes.Color && !maps.map) params.color = new Color().fromArray(attributes.Color.value); - else params.color = new Color(); - if (attributes.Transparency && attributes.Transparency.value !== 0) { - params.opacity = 1 - attributes.Transparency.value; - params.transparent = true; - } - if (attributes["Bump Height"]) params.bumpScale = attributes["Bump Height"].value * .1; - if (attributes["Refraction Index"]) params.refractionRatio = 1 / attributes["Refraction Index"].value; - this.parsePhysicalAttributes(params, attributes, maps); - this.parseStandardAttributes(params, attributes, maps); - this.parsePhongAttributes(params, attributes, maps); - return params; - } - parsePhysicalAttributes(params, attributes) { - if (attributes.Clearcoat && attributes.Clearcoat.value > 0) { - params.clearcoat = attributes.Clearcoat.value; - if (attributes["Clearcoat Gloss"]) params.clearcoatRoughness = .5 * (1 - attributes["Clearcoat Gloss"].value); - } - } - parseStandardAttributes(params, attributes, maps) { - if (attributes.Luminous) { - params.emissiveIntensity = attributes.Luminous.value; - if (attributes["Luminous Color"] && !maps.emissive) params.emissive = new Color().fromArray(attributes["Luminous Color"].value); - else params.emissive = new Color(8421504); - } - if (attributes.Roughness && !maps.roughnessMap) params.roughness = attributes.Roughness.value; - if (attributes.Metallic && !maps.metalnessMap) params.metalness = attributes.Metallic.value; - } - parsePhongAttributes(params, attributes, maps) { - if (attributes.Diffuse) params.color.multiplyScalar(attributes.Diffuse.value); - if (attributes.Reflection) { - params.reflectivity = attributes.Reflection.value; - params.combine = 2; - } - if (attributes.Luminosity) { - params.emissiveIntensity = attributes.Luminosity.value; - if (!maps.emissiveMap && !maps.map) params.emissive = params.color; - else params.emissive = new Color(8421504); - } - if (!attributes.Roughness && attributes.Specular && !maps.specularMap) if (attributes["Color Highlight"]) params.specular = new Color().setScalar(attributes.Specular.value).lerp(params.color.clone().multiplyScalar(attributes.Specular.value), attributes["Color Highlight"].value); - else params.specular = new Color().setScalar(attributes.Specular.value); - if (params.specular && attributes.Glossiness) params.shininess = 7 + Math.pow(2, attributes.Glossiness.value * 12 + 2); - } - parseEnvMap(connections, maps, attributes) { - if (connections.envMap) { - const envMap = this.loadTexture(connections.envMap); - if (attributes.transparent && attributes.opacity < .999) { - envMap.mapping = 304; - if (attributes.reflectivity !== void 0) { - delete attributes.reflectivity; - delete attributes.combine; - } - if (attributes.metalness !== void 0) delete attributes.metalness; - } else envMap.mapping = 303; - maps.envMap = envMap; - } - } - getTexturePathByIndex(index) { - let fileName = ""; - if (!_lwoTree.textures) return fileName; - _lwoTree.textures.forEach(function(texture) { - if (texture.index === index) fileName = texture.fileName; - }); - return fileName; - } - loadTexture(path) { - if (!path) return null; - return this.textureLoader.load(path, void 0, void 0, function() { - console.warn("LWOLoader: non-standard resource hierarchy. Use `resourcePath` parameter to specify root content directory."); - }); - } - getWrappingType(num) { - switch (num) { - case 0: - console.warn("LWOLoader: \"Reset\" texture wrapping type is not supported in three.js"); - return ClampToEdgeWrapping; - case 1: return RepeatWrapping; - case 2: return MirroredRepeatWrapping; - case 3: return ClampToEdgeWrapping; - } - } - getMaterialType(nodeData) { - if (nodeData.Clearcoat && nodeData.Clearcoat.value > 0) return MeshPhysicalMaterial; - if (nodeData.Roughness) return MeshStandardMaterial; - return MeshPhongMaterial; - } -}; -var GeometryParser = class { - parse(geoData, layer) { - const geometry = new BufferGeometry(); - geometry.setAttribute("position", new Float32BufferAttribute(geoData.points, 3)); - const indices = this.splitIndices(geoData.vertexIndices, geoData.polygonDimensions); - geometry.setIndex(indices); - this.parseGroups(geometry, geoData); - geometry.computeVertexNormals(); - this.parseUVs(geometry, layer, indices); - this.parseMorphTargets(geometry, layer, indices); - geometry.translate(-layer.pivot[0], -layer.pivot[1], -layer.pivot[2]); - return geometry; - } - splitIndices(indices, polygonDimensions) { - const remappedIndices = []; - let i = 0; - polygonDimensions.forEach(function(dim) { - if (dim < 4) for (let k = 0; k < dim; k++) remappedIndices.push(indices[i + k]); - else if (dim === 4) remappedIndices.push(indices[i], indices[i + 1], indices[i + 2], indices[i], indices[i + 2], indices[i + 3]); - else if (dim > 4) { - for (let k = 1; k < dim - 1; k++) remappedIndices.push(indices[i], indices[i + k], indices[i + k + 1]); - console.warn("LWOLoader: polygons with greater than 4 sides are not supported"); - } - i += dim; - }); - return remappedIndices; - } - parseGroups(geometry, geoData) { - const tags = _lwoTree.tags; - const matNames = []; - let elemSize = 3; - if (geoData.type === "lines") elemSize = 2; - if (geoData.type === "points") elemSize = 1; - const remappedIndices = this.splitMaterialIndices(geoData.polygonDimensions, geoData.materialIndices); - let indexNum = 0; - const indexPairs = {}; - let prevMaterialIndex; - let materialIndex; - let prevStart = 0; - let currentCount = 0; - for (let i = 0; i < remappedIndices.length; i += 2) { - materialIndex = remappedIndices[i + 1]; - if (i === 0) matNames[indexNum] = tags[materialIndex]; - if (prevMaterialIndex === void 0) prevMaterialIndex = materialIndex; - if (materialIndex !== prevMaterialIndex) { - let currentIndex; - if (indexPairs[tags[prevMaterialIndex]]) currentIndex = indexPairs[tags[prevMaterialIndex]]; - else { - currentIndex = indexNum; - indexPairs[tags[prevMaterialIndex]] = indexNum; - matNames[indexNum] = tags[prevMaterialIndex]; - indexNum++; - } - geometry.addGroup(prevStart, currentCount, currentIndex); - prevStart += currentCount; - prevMaterialIndex = materialIndex; - currentCount = 0; - } - currentCount += elemSize; - } - if (geometry.groups.length > 0) { - let currentIndex; - if (indexPairs[tags[materialIndex]]) currentIndex = indexPairs[tags[materialIndex]]; - else { - currentIndex = indexNum; - indexPairs[tags[materialIndex]] = indexNum; - matNames[indexNum] = tags[materialIndex]; - } - geometry.addGroup(prevStart, currentCount, currentIndex); - } - geometry.userData.matNames = matNames; - } - splitMaterialIndices(polygonDimensions, indices) { - const remappedIndices = []; - polygonDimensions.forEach(function(dim, i) { - if (dim <= 3) remappedIndices.push(indices[i * 2], indices[i * 2 + 1]); - else if (dim === 4) remappedIndices.push(indices[i * 2], indices[i * 2 + 1], indices[i * 2], indices[i * 2 + 1]); - else for (let k = 0; k < dim - 2; k++) remappedIndices.push(indices[i * 2], indices[i * 2 + 1]); - }); - return remappedIndices; - } - parseUVs(geometry, layer) { - const remappedUVs = Array.from(Array(geometry.attributes.position.count * 2), function() { - return 0; - }); - for (const name in layer.uvs) { - const uvs = layer.uvs[name].uvs; - layer.uvs[name].uvIndices.forEach(function(i, j) { - remappedUVs[i * 2] = uvs[j * 2]; - remappedUVs[i * 2 + 1] = uvs[j * 2 + 1]; - }); - } - geometry.setAttribute("uv", new Float32BufferAttribute(remappedUVs, 2)); - } - parseMorphTargets(geometry, layer) { - let num = 0; - for (const name in layer.morphTargets) { - const remappedPoints = geometry.attributes.position.array.slice(); - if (!geometry.morphAttributes.position) geometry.morphAttributes.position = []; - const morphPoints = layer.morphTargets[name].points; - const morphIndices = layer.morphTargets[name].indices; - const type = layer.morphTargets[name].type; - morphIndices.forEach(function(i, j) { - if (type === "relative") { - remappedPoints[i * 3] += morphPoints[j * 3]; - remappedPoints[i * 3 + 1] += morphPoints[j * 3 + 1]; - remappedPoints[i * 3 + 2] += morphPoints[j * 3 + 2]; - } else { - remappedPoints[i * 3] = morphPoints[j * 3]; - remappedPoints[i * 3 + 1] = morphPoints[j * 3 + 1]; - remappedPoints[i * 3 + 2] = morphPoints[j * 3 + 2]; - } - }); - geometry.morphAttributes.position[num] = new Float32BufferAttribute(remappedPoints, 3); - geometry.morphAttributes.position[num].name = name; - num++; - } - geometry.morphTargetsRelative = false; - } -}; -function extractParentUrl(url, dir) { - const index = url.indexOf(dir); - if (index === -1) return "./"; - return url.substr(0, index); -} -//#endregion -//#region node_modules/three-stdlib/loaders/PLYLoader.js -var PLYLoader = class extends Loader { - constructor(manager) { - super(manager); - this.propertyNameMapping = {}; - } - load(url, onLoad, onProgress, onError) { - const scope = this; - const loader = new FileLoader(this.manager); - loader.setPath(this.path); - loader.setResponseType("arraybuffer"); - loader.setRequestHeader(this.requestHeader); - loader.setWithCredentials(this.withCredentials); - loader.load(url, function(text) { - try { - onLoad(scope.parse(text)); - } catch (e) { - if (onError) onError(e); - else console.error(e); - scope.manager.itemError(url); - } - }, onProgress, onError); - } - setPropertyNameMapping(mapping) { - this.propertyNameMapping = mapping; - } - parse(data) { - function parseHeader(data2) { - const patternHeader = /ply([\s\S]*)end_header\r?\n/; - let headerText = ""; - let headerLength = 0; - const result = patternHeader.exec(data2); - if (result !== null) { - headerText = result[1]; - headerLength = new Blob([result[0]]).size; - } - const header = { - comments: [], - elements: [], - headerLength, - objInfo: "" - }; - const lines = headerText.split("\n"); - let currentElement; - function make_ply_element_property(propertValues, propertyNameMapping) { - const property = { type: propertValues[0] }; - if (property.type === "list") { - property.name = propertValues[3]; - property.countType = propertValues[1]; - property.itemType = propertValues[2]; - } else property.name = propertValues[1]; - if (property.name in propertyNameMapping) property.name = propertyNameMapping[property.name]; - return property; - } - for (let i = 0; i < lines.length; i++) { - let line = lines[i]; - line = line.trim(); - if (line === "") continue; - const lineValues = line.split(/\s+/); - const lineType = lineValues.shift(); - line = lineValues.join(" "); - switch (lineType) { - case "format": - header.format = lineValues[0]; - header.version = lineValues[1]; - break; - case "comment": - header.comments.push(line); - break; - case "element": - if (currentElement !== void 0) header.elements.push(currentElement); - currentElement = {}; - currentElement.name = lineValues[0]; - currentElement.count = parseInt(lineValues[1]); - currentElement.properties = []; - break; - case "property": - currentElement.properties.push(make_ply_element_property(lineValues, scope.propertyNameMapping)); - break; - case "obj_info": - header.objInfo = line; - break; - default: console.log("unhandled", lineType, lineValues); - } - } - if (currentElement !== void 0) header.elements.push(currentElement); - return header; - } - function parseASCIINumber(n, type) { - switch (type) { - case "char": - case "uchar": - case "short": - case "ushort": - case "int": - case "uint": - case "int8": - case "uint8": - case "int16": - case "uint16": - case "int32": - case "uint32": return parseInt(n); - case "float": - case "double": - case "float32": - case "float64": return parseFloat(n); - } - } - function parseASCIIElement(properties, line) { - const values = line.split(/\s+/); - const element = {}; - for (let i = 0; i < properties.length; i++) if (properties[i].type === "list") { - const list = []; - const n = parseASCIINumber(values.shift(), properties[i].countType); - for (let j = 0; j < n; j++) list.push(parseASCIINumber(values.shift(), properties[i].itemType)); - element[properties[i].name] = list; - } else element[properties[i].name] = parseASCIINumber(values.shift(), properties[i].type); - return element; - } - function parseASCII(data2, header) { - const buffer = { - indices: [], - vertices: [], - normals: [], - uvs: [], - faceVertexUvs: [], - colors: [] - }; - let result; - const patternBody = /end_header\s([\s\S]*)$/; - let body = ""; - if ((result = patternBody.exec(data2)) !== null) body = result[1]; - const lines = body.split("\n"); - let currentElement = 0; - let currentElementCount = 0; - for (let i = 0; i < lines.length; i++) { - let line = lines[i]; - line = line.trim(); - if (line === "") continue; - if (currentElementCount >= header.elements[currentElement].count) { - currentElement++; - currentElementCount = 0; - } - const element = parseASCIIElement(header.elements[currentElement].properties, line); - handleElement(buffer, header.elements[currentElement].name, element); - currentElementCount++; - } - return postProcess(buffer); - } - function postProcess(buffer) { - let geometry2 = new BufferGeometry(); - if (buffer.indices.length > 0) geometry2.setIndex(buffer.indices); - geometry2.setAttribute("position", new Float32BufferAttribute(buffer.vertices, 3)); - if (buffer.normals.length > 0) geometry2.setAttribute("normal", new Float32BufferAttribute(buffer.normals, 3)); - if (buffer.uvs.length > 0) geometry2.setAttribute("uv", new Float32BufferAttribute(buffer.uvs, 2)); - if (buffer.colors.length > 0) geometry2.setAttribute("color", new Float32BufferAttribute(buffer.colors, 3)); - if (buffer.faceVertexUvs.length > 0) { - geometry2 = geometry2.toNonIndexed(); - geometry2.setAttribute("uv", new Float32BufferAttribute(buffer.faceVertexUvs, 2)); - } - geometry2.computeBoundingSphere(); - return geometry2; - } - function handleElement(buffer, elementName, element) { - if (elementName === "vertex") { - buffer.vertices.push(element.x, element.y, element.z); - if ("nx" in element && "ny" in element && "nz" in element) buffer.normals.push(element.nx, element.ny, element.nz); - if ("s" in element && "t" in element) buffer.uvs.push(element.s, element.t); - if ("red" in element && "green" in element && "blue" in element) buffer.colors.push(element.red / 255, element.green / 255, element.blue / 255); - } else if (elementName === "face") { - const vertex_indices = element.vertex_indices || element.vertex_index; - const texcoord = element.texcoord; - if (vertex_indices.length === 3) { - buffer.indices.push(vertex_indices[0], vertex_indices[1], vertex_indices[2]); - if (texcoord && texcoord.length === 6) { - buffer.faceVertexUvs.push(texcoord[0], texcoord[1]); - buffer.faceVertexUvs.push(texcoord[2], texcoord[3]); - buffer.faceVertexUvs.push(texcoord[4], texcoord[5]); - } - } else if (vertex_indices.length === 4) { - buffer.indices.push(vertex_indices[0], vertex_indices[1], vertex_indices[3]); - buffer.indices.push(vertex_indices[1], vertex_indices[2], vertex_indices[3]); - } - } - } - function binaryRead(dataview, at, type, little_endian) { - switch (type) { - case "int8": - case "char": return [dataview.getInt8(at), 1]; - case "uint8": - case "uchar": return [dataview.getUint8(at), 1]; - case "int16": - case "short": return [dataview.getInt16(at, little_endian), 2]; - case "uint16": - case "ushort": return [dataview.getUint16(at, little_endian), 2]; - case "int32": - case "int": return [dataview.getInt32(at, little_endian), 4]; - case "uint32": - case "uint": return [dataview.getUint32(at, little_endian), 4]; - case "float32": - case "float": return [dataview.getFloat32(at, little_endian), 4]; - case "float64": - case "double": return [dataview.getFloat64(at, little_endian), 8]; - } - } - function binaryReadElement(dataview, at, properties, little_endian) { - const element = {}; - let result, read = 0; - for (let i = 0; i < properties.length; i++) if (properties[i].type === "list") { - const list = []; - result = binaryRead(dataview, at + read, properties[i].countType, little_endian); - const n = result[0]; - read += result[1]; - for (let j = 0; j < n; j++) { - result = binaryRead(dataview, at + read, properties[i].itemType, little_endian); - list.push(result[0]); - read += result[1]; - } - element[properties[i].name] = list; - } else { - result = binaryRead(dataview, at + read, properties[i].type, little_endian); - element[properties[i].name] = result[0]; - read += result[1]; - } - return [element, read]; - } - function parseBinary(data2, header) { - const buffer = { - indices: [], - vertices: [], - normals: [], - uvs: [], - faceVertexUvs: [], - colors: [] - }; - const little_endian = header.format === "binary_little_endian"; - const body = new DataView(data2, header.headerLength); - let result, loc = 0; - for (let currentElement = 0; currentElement < header.elements.length; currentElement++) for (let currentElementCount = 0; currentElementCount < header.elements[currentElement].count; currentElementCount++) { - result = binaryReadElement(body, loc, header.elements[currentElement].properties, little_endian); - loc += result[1]; - const element = result[0]; - handleElement(buffer, header.elements[currentElement].name, element); - } - return postProcess(buffer); - } - let geometry; - const scope = this; - if (data instanceof ArrayBuffer) { - const text = decodeText$1(new Uint8Array(data)); - const header = parseHeader(text); - geometry = header.format === "ascii" ? parseASCII(text, header) : parseBinary(data, header); - } else geometry = parseASCII(data, parseHeader(data)); - return geometry; - } -}; -//#endregion -//#region node_modules/three-stdlib/lines/LineSegmentsGeometry.js -var _box$1 = /* @__PURE__ */ new Box3(); -var _vector = /* @__PURE__ */ new Vector3(); -var LineSegmentsGeometry = class extends InstancedBufferGeometry { - constructor() { - super(); - this.isLineSegmentsGeometry = true; - this.type = "LineSegmentsGeometry"; - const positions = [ - -1, - 2, - 0, - 1, - 2, - 0, - -1, - 1, - 0, - 1, - 1, - 0, - -1, - 0, - 0, - 1, - 0, - 0, - -1, - -1, - 0, - 1, - -1, - 0 - ]; - const uvs = [ - -1, - 2, - 1, - 2, - -1, - 1, - 1, - 1, - -1, - -1, - 1, - -1, - -1, - -2, - 1, - -2 - ]; - this.setIndex([ - 0, - 2, - 1, - 2, - 3, - 1, - 2, - 4, - 3, - 4, - 5, - 3, - 4, - 6, - 5, - 6, - 7, - 5 - ]); - this.setAttribute("position", new Float32BufferAttribute(positions, 3)); - this.setAttribute("uv", new Float32BufferAttribute(uvs, 2)); - } - applyMatrix4(matrix) { - const start = this.attributes.instanceStart; - const end = this.attributes.instanceEnd; - if (start !== void 0) { - start.applyMatrix4(matrix); - end.applyMatrix4(matrix); - start.needsUpdate = true; - } - if (this.boundingBox !== null) this.computeBoundingBox(); - if (this.boundingSphere !== null) this.computeBoundingSphere(); - return this; - } - setPositions(array) { - let lineSegments; - if (array instanceof Float32Array) lineSegments = array; - else if (Array.isArray(array)) lineSegments = new Float32Array(array); - const instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1); - this.setAttribute("instanceStart", new InterleavedBufferAttribute(instanceBuffer, 3, 0)); - this.setAttribute("instanceEnd", new InterleavedBufferAttribute(instanceBuffer, 3, 3)); - this.computeBoundingBox(); - this.computeBoundingSphere(); - return this; - } - setColors(array, itemSize = 3) { - let colors; - if (array instanceof Float32Array) colors = array; - else if (Array.isArray(array)) colors = new Float32Array(array); - const instanceColorBuffer = new InstancedInterleavedBuffer(colors, itemSize * 2, 1); - this.setAttribute("instanceColorStart", new InterleavedBufferAttribute(instanceColorBuffer, itemSize, 0)); - this.setAttribute("instanceColorEnd", new InterleavedBufferAttribute(instanceColorBuffer, itemSize, itemSize)); - return this; - } - fromWireframeGeometry(geometry) { - this.setPositions(geometry.attributes.position.array); - return this; - } - fromEdgesGeometry(geometry) { - this.setPositions(geometry.attributes.position.array); - return this; - } - fromMesh(mesh) { - this.fromWireframeGeometry(new WireframeGeometry(mesh.geometry)); - return this; - } - fromLineSegments(lineSegments) { - const geometry = lineSegments.geometry; - this.setPositions(geometry.attributes.position.array); - return this; - } - computeBoundingBox() { - if (this.boundingBox === null) this.boundingBox = new Box3(); - const start = this.attributes.instanceStart; - const end = this.attributes.instanceEnd; - if (start !== void 0 && end !== void 0) { - this.boundingBox.setFromBufferAttribute(start); - _box$1.setFromBufferAttribute(end); - this.boundingBox.union(_box$1); - } - } - computeBoundingSphere() { - if (this.boundingSphere === null) this.boundingSphere = new Sphere(); - if (this.boundingBox === null) this.computeBoundingBox(); - const start = this.attributes.instanceStart; - const end = this.attributes.instanceEnd; - if (start !== void 0 && end !== void 0) { - const center = this.boundingSphere.center; - this.boundingBox.getCenter(center); - let maxRadiusSq = 0; - for (let i = 0, il = start.count; i < il; i++) { - _vector.fromBufferAttribute(start, i); - maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector)); - _vector.fromBufferAttribute(end, i); - maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector)); - } - this.boundingSphere.radius = Math.sqrt(maxRadiusSq); - if (isNaN(this.boundingSphere.radius)) console.error("THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.", this); - } - } - toJSON() {} - applyMatrix(matrix) { - console.warn("THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4()."); - return this.applyMatrix4(matrix); - } -}; -//#endregion -//#region node_modules/three-stdlib/lines/LineGeometry.js -var LineGeometry = class extends LineSegmentsGeometry { - constructor() { - super(); - this.isLineGeometry = true; - this.type = "LineGeometry"; - } - setPositions(array) { - const length = array.length - 3; - const points = new Float32Array(2 * length); - for (let i = 0; i < length; i += 3) { - points[2 * i] = array[i]; - points[2 * i + 1] = array[i + 1]; - points[2 * i + 2] = array[i + 2]; - points[2 * i + 3] = array[i + 3]; - points[2 * i + 4] = array[i + 4]; - points[2 * i + 5] = array[i + 5]; - } - super.setPositions(points); - return this; - } - setColors(array, itemSize = 3) { - const length = array.length - itemSize; - const colors = new Float32Array(2 * length); - if (itemSize === 3) for (let i = 0; i < length; i += itemSize) { - colors[2 * i] = array[i]; - colors[2 * i + 1] = array[i + 1]; - colors[2 * i + 2] = array[i + 2]; - colors[2 * i + 3] = array[i + 3]; - colors[2 * i + 4] = array[i + 4]; - colors[2 * i + 5] = array[i + 5]; - } - else for (let i = 0; i < length; i += itemSize) { - colors[2 * i] = array[i]; - colors[2 * i + 1] = array[i + 1]; - colors[2 * i + 2] = array[i + 2]; - colors[2 * i + 3] = array[i + 3]; - colors[2 * i + 4] = array[i + 4]; - colors[2 * i + 5] = array[i + 5]; - colors[2 * i + 6] = array[i + 6]; - colors[2 * i + 7] = array[i + 7]; - } - super.setColors(colors, itemSize); - return this; - } - fromLine(line) { - const geometry = line.geometry; - this.setPositions(geometry.attributes.position.array); - return this; - } -}; -//#endregion -//#region node_modules/three-stdlib/lines/LineMaterial.js -var LineMaterial = class extends ShaderMaterial { - constructor(parameters) { - super({ - type: "LineMaterial", - uniforms: UniformsUtils.clone(UniformsUtils.merge([ - UniformsLib.common, - UniformsLib.fog, - { - worldUnits: { value: 1 }, - linewidth: { value: 1 }, - resolution: { value: new Vector2(1, 1) }, - dashOffset: { value: 0 }, - dashScale: { value: 1 }, - dashSize: { value: 1 }, - gapSize: { value: 1 } - } - ])), - vertexShader: ` - #include <common> - #include <fog_pars_vertex> - #include <logdepthbuf_pars_vertex> - #include <clipping_planes_pars_vertex> - - uniform float linewidth; - uniform vec2 resolution; - - attribute vec3 instanceStart; - attribute vec3 instanceEnd; - - #ifdef USE_COLOR - #ifdef USE_LINE_COLOR_ALPHA - varying vec4 vLineColor; - attribute vec4 instanceColorStart; - attribute vec4 instanceColorEnd; - #else - varying vec3 vLineColor; - attribute vec3 instanceColorStart; - attribute vec3 instanceColorEnd; - #endif - #endif - - #ifdef WORLD_UNITS - - varying vec4 worldPos; - varying vec3 worldStart; - varying vec3 worldEnd; - - #ifdef USE_DASH - - varying vec2 vUv; - - #endif - - #else - - varying vec2 vUv; - - #endif - - #ifdef USE_DASH - - uniform float dashScale; - attribute float instanceDistanceStart; - attribute float instanceDistanceEnd; - varying float vLineDistance; - - #endif - - void trimSegment( const in vec4 start, inout vec4 end ) { - - // trim end segment so it terminates between the camera plane and the near plane - - // conservative estimate of the near plane - float a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column - float b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column - float nearEstimate = - 0.5 * b / a; - - float alpha = ( nearEstimate - start.z ) / ( end.z - start.z ); - - end.xyz = mix( start.xyz, end.xyz, alpha ); - - } - - void main() { - - #ifdef USE_COLOR - - vLineColor = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd; - - #endif - - #ifdef USE_DASH - - vLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd; - vUv = uv; - - #endif - - float aspect = resolution.x / resolution.y; - - // camera space - vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 ); - vec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 ); - - #ifdef WORLD_UNITS - - worldStart = start.xyz; - worldEnd = end.xyz; - - #else - - vUv = uv; - - #endif - - // special case for perspective projection, and segments that terminate either in, or behind, the camera plane - // clearly the gpu firmware has a way of addressing this issue when projecting into ndc space - // but we need to perform ndc-space calculations in the shader, so we must address this issue directly - // perhaps there is a more elegant solution -- WestLangley - - bool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column - - if ( perspective ) { - - if ( start.z < 0.0 && end.z >= 0.0 ) { - - trimSegment( start, end ); - - } else if ( end.z < 0.0 && start.z >= 0.0 ) { - - trimSegment( end, start ); - - } - - } - - // clip space - vec4 clipStart = projectionMatrix * start; - vec4 clipEnd = projectionMatrix * end; - - // ndc space - vec3 ndcStart = clipStart.xyz / clipStart.w; - vec3 ndcEnd = clipEnd.xyz / clipEnd.w; - - // direction - vec2 dir = ndcEnd.xy - ndcStart.xy; - - // account for clip-space aspect ratio - dir.x *= aspect; - dir = normalize( dir ); - - #ifdef WORLD_UNITS - - // get the offset direction as perpendicular to the view vector - vec3 worldDir = normalize( end.xyz - start.xyz ); - vec3 offset; - if ( position.y < 0.5 ) { - - offset = normalize( cross( start.xyz, worldDir ) ); - - } else { - - offset = normalize( cross( end.xyz, worldDir ) ); - - } - - // sign flip - if ( position.x < 0.0 ) offset *= - 1.0; - - float forwardOffset = dot( worldDir, vec3( 0.0, 0.0, 1.0 ) ); - - // don't extend the line if we're rendering dashes because we - // won't be rendering the endcaps - #ifndef USE_DASH - - // extend the line bounds to encompass endcaps - start.xyz += - worldDir * linewidth * 0.5; - end.xyz += worldDir * linewidth * 0.5; - - // shift the position of the quad so it hugs the forward edge of the line - offset.xy -= dir * forwardOffset; - offset.z += 0.5; - - #endif - - // endcaps - if ( position.y > 1.0 || position.y < 0.0 ) { - - offset.xy += dir * 2.0 * forwardOffset; - - } - - // adjust for linewidth - offset *= linewidth * 0.5; - - // set the world position - worldPos = ( position.y < 0.5 ) ? start : end; - worldPos.xyz += offset; - - // project the worldpos - vec4 clip = projectionMatrix * worldPos; - - // shift the depth of the projected points so the line - // segments overlap neatly - vec3 clipPose = ( position.y < 0.5 ) ? ndcStart : ndcEnd; - clip.z = clipPose.z * clip.w; - - #else - - vec2 offset = vec2( dir.y, - dir.x ); - // undo aspect ratio adjustment - dir.x /= aspect; - offset.x /= aspect; - - // sign flip - if ( position.x < 0.0 ) offset *= - 1.0; - - // endcaps - if ( position.y < 0.0 ) { - - offset += - dir; - - } else if ( position.y > 1.0 ) { - - offset += dir; - - } - - // adjust for linewidth - offset *= linewidth; - - // adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ... - offset /= resolution.y; - - // select end - vec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd; - - // back to clip space - offset *= clip.w; - - clip.xy += offset; - - #endif - - gl_Position = clip; - - vec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation - - #include <logdepthbuf_vertex> - #include <clipping_planes_vertex> - #include <fog_vertex> - - } - `, - fragmentShader: ` - uniform vec3 diffuse; - uniform float opacity; - uniform float linewidth; - - #ifdef USE_DASH - - uniform float dashOffset; - uniform float dashSize; - uniform float gapSize; - - #endif - - varying float vLineDistance; - - #ifdef WORLD_UNITS - - varying vec4 worldPos; - varying vec3 worldStart; - varying vec3 worldEnd; - - #ifdef USE_DASH - - varying vec2 vUv; - - #endif - - #else - - varying vec2 vUv; - - #endif - - #include <common> - #include <fog_pars_fragment> - #include <logdepthbuf_pars_fragment> - #include <clipping_planes_pars_fragment> - - #ifdef USE_COLOR - #ifdef USE_LINE_COLOR_ALPHA - varying vec4 vLineColor; - #else - varying vec3 vLineColor; - #endif - #endif - - vec2 closestLineToLine(vec3 p1, vec3 p2, vec3 p3, vec3 p4) { - - float mua; - float mub; - - vec3 p13 = p1 - p3; - vec3 p43 = p4 - p3; - - vec3 p21 = p2 - p1; - - float d1343 = dot( p13, p43 ); - float d4321 = dot( p43, p21 ); - float d1321 = dot( p13, p21 ); - float d4343 = dot( p43, p43 ); - float d2121 = dot( p21, p21 ); - - float denom = d2121 * d4343 - d4321 * d4321; - - float numer = d1343 * d4321 - d1321 * d4343; - - mua = numer / denom; - mua = clamp( mua, 0.0, 1.0 ); - mub = ( d1343 + d4321 * ( mua ) ) / d4343; - mub = clamp( mub, 0.0, 1.0 ); - - return vec2( mua, mub ); - - } - - void main() { - - #include <clipping_planes_fragment> - - #ifdef USE_DASH - - if ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps - - if ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX - - #endif - - float alpha = opacity; - - #ifdef WORLD_UNITS - - // Find the closest points on the view ray and the line segment - vec3 rayEnd = normalize( worldPos.xyz ) * 1e5; - vec3 lineDir = worldEnd - worldStart; - vec2 params = closestLineToLine( worldStart, worldEnd, vec3( 0.0, 0.0, 0.0 ), rayEnd ); - - vec3 p1 = worldStart + lineDir * params.x; - vec3 p2 = rayEnd * params.y; - vec3 delta = p1 - p2; - float len = length( delta ); - float norm = len / linewidth; - - #ifndef USE_DASH - - #ifdef USE_ALPHA_TO_COVERAGE - - float dnorm = fwidth( norm ); - alpha = 1.0 - smoothstep( 0.5 - dnorm, 0.5 + dnorm, norm ); - - #else - - if ( norm > 0.5 ) { - - discard; - - } - - #endif - - #endif - - #else - - #ifdef USE_ALPHA_TO_COVERAGE - - // artifacts appear on some hardware if a derivative is taken within a conditional - float a = vUv.x; - float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0; - float len2 = a * a + b * b; - float dlen = fwidth( len2 ); - - if ( abs( vUv.y ) > 1.0 ) { - - alpha = 1.0 - smoothstep( 1.0 - dlen, 1.0 + dlen, len2 ); - - } - - #else - - if ( abs( vUv.y ) > 1.0 ) { - - float a = vUv.x; - float b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0; - float len2 = a * a + b * b; - - if ( len2 > 1.0 ) discard; - - } - - #endif - - #endif - - vec4 diffuseColor = vec4( diffuse, alpha ); - #ifdef USE_COLOR - #ifdef USE_LINE_COLOR_ALPHA - diffuseColor *= vLineColor; - #else - diffuseColor.rgb *= vLineColor; - #endif - #endif - - #include <logdepthbuf_fragment> - - gl_FragColor = diffuseColor; - - #include <tonemapping_fragment> - #include <${version >= 154 ? "colorspace_fragment" : "encodings_fragment"}> - #include <fog_fragment> - #include <premultiplied_alpha_fragment> - - } - `, - clipping: true - }); - this.isLineMaterial = true; - this.onBeforeCompile = function() { - if (this.transparent) this.defines.USE_LINE_COLOR_ALPHA = "1"; - else delete this.defines.USE_LINE_COLOR_ALPHA; - }; - Object.defineProperties(this, { - color: { - enumerable: true, - get: function() { - return this.uniforms.diffuse.value; - }, - set: function(value) { - this.uniforms.diffuse.value = value; - } - }, - worldUnits: { - enumerable: true, - get: function() { - return "WORLD_UNITS" in this.defines; - }, - set: function(value) { - if (value === true) this.defines.WORLD_UNITS = ""; - else delete this.defines.WORLD_UNITS; - } - }, - linewidth: { - enumerable: true, - get: function() { - return this.uniforms.linewidth.value; - }, - set: function(value) { - this.uniforms.linewidth.value = value; - } - }, - dashed: { - enumerable: true, - get: function() { - return Boolean("USE_DASH" in this.defines); - }, - set(value) { - if (Boolean(value) !== Boolean("USE_DASH" in this.defines)) this.needsUpdate = true; - if (value === true) this.defines.USE_DASH = ""; - else delete this.defines.USE_DASH; - } - }, - dashScale: { - enumerable: true, - get: function() { - return this.uniforms.dashScale.value; - }, - set: function(value) { - this.uniforms.dashScale.value = value; - } - }, - dashSize: { - enumerable: true, - get: function() { - return this.uniforms.dashSize.value; - }, - set: function(value) { - this.uniforms.dashSize.value = value; - } - }, - dashOffset: { - enumerable: true, - get: function() { - return this.uniforms.dashOffset.value; - }, - set: function(value) { - this.uniforms.dashOffset.value = value; - } - }, - gapSize: { - enumerable: true, - get: function() { - return this.uniforms.gapSize.value; - }, - set: function(value) { - this.uniforms.gapSize.value = value; - } - }, - opacity: { - enumerable: true, - get: function() { - return this.uniforms.opacity.value; - }, - set: function(value) { - this.uniforms.opacity.value = value; - } - }, - resolution: { - enumerable: true, - get: function() { - return this.uniforms.resolution.value; - }, - set: function(value) { - this.uniforms.resolution.value.copy(value); - } - }, - alphaToCoverage: { - enumerable: true, - get: function() { - return Boolean("USE_ALPHA_TO_COVERAGE" in this.defines); - }, - set: function(value) { - if (Boolean(value) !== Boolean("USE_ALPHA_TO_COVERAGE" in this.defines)) this.needsUpdate = true; - if (value === true) { - this.defines.USE_ALPHA_TO_COVERAGE = ""; - this.extensions.derivatives = true; - } else { - delete this.defines.USE_ALPHA_TO_COVERAGE; - this.extensions.derivatives = false; - } - } - } - }); - this.setValues(parameters); - } -}; -//#endregion -//#region node_modules/three-stdlib/lines/Wireframe.js -var _start$1 = /* @__PURE__ */ new Vector3(); -var _end$1 = /* @__PURE__ */ new Vector3(); -var _viewport$1 = /* @__PURE__ */ new Vector4(); -var Wireframe = class extends Mesh { - constructor(geometry = new LineSegmentsGeometry(), material = new LineMaterial({ color: Math.random() * 16777215 })) { - super(geometry, material); - this.isWireframe = true; - this.type = "Wireframe"; - } - computeLineDistances() { - const geometry = this.geometry; - const instanceStart = geometry.attributes.instanceStart; - const instanceEnd = geometry.attributes.instanceEnd; - const lineDistances = new Float32Array(2 * instanceStart.count); - for (let i = 0, j = 0, l = instanceStart.count; i < l; i++, j += 2) { - _start$1.fromBufferAttribute(instanceStart, i); - _end$1.fromBufferAttribute(instanceEnd, i); - lineDistances[j] = j === 0 ? 0 : lineDistances[j - 1]; - lineDistances[j + 1] = lineDistances[j] + _start$1.distanceTo(_end$1); - } - const instanceDistanceBuffer = new InstancedInterleavedBuffer(lineDistances, 2, 1); - geometry.setAttribute("instanceDistanceStart", new InterleavedBufferAttribute(instanceDistanceBuffer, 1, 0)); - geometry.setAttribute("instanceDistanceEnd", new InterleavedBufferAttribute(instanceDistanceBuffer, 1, 1)); - return this; - } - onBeforeRender(renderer) { - const uniforms = this.material.uniforms; - if (uniforms && uniforms.resolution) { - renderer.getViewport(_viewport$1); - this.material.uniforms.resolution.value.set(_viewport$1.z, _viewport$1.w); - } - } -}; -//#endregion -//#region node_modules/three-stdlib/lines/WireframeGeometry2.js -var WireframeGeometry2 = class extends LineSegmentsGeometry { - constructor(geometry) { - super(); - this.isWireframeGeometry2 = true; - this.type = "WireframeGeometry2"; - this.fromWireframeGeometry(new WireframeGeometry(geometry)); - } -}; -//#endregion -//#region node_modules/three-stdlib/lines/LineSegments2.js -var _viewport = /* @__PURE__ */ new Vector4(); -var _start = /* @__PURE__ */ new Vector3(); -var _end = /* @__PURE__ */ new Vector3(); -var _start4 = /* @__PURE__ */ new Vector4(); -var _end4 = /* @__PURE__ */ new Vector4(); -var _ssOrigin = /* @__PURE__ */ new Vector4(); -var _ssOrigin3 = /* @__PURE__ */ new Vector3(); -var _mvMatrix = /* @__PURE__ */ new Matrix4(); -var _line = /* @__PURE__ */ new Line3(); -var _closestPoint = /* @__PURE__ */ new Vector3(); -var _box = /* @__PURE__ */ new Box3(); -var _sphere = /* @__PURE__ */ new Sphere(); -var _clipToWorldVector = /* @__PURE__ */ new Vector4(); -var _ray, _lineWidth; -function getWorldSpaceHalfWidth(camera, distance, resolution) { - _clipToWorldVector.set(0, 0, -distance, 1).applyMatrix4(camera.projectionMatrix); - _clipToWorldVector.multiplyScalar(1 / _clipToWorldVector.w); - _clipToWorldVector.x = _lineWidth / resolution.width; - _clipToWorldVector.y = _lineWidth / resolution.height; - _clipToWorldVector.applyMatrix4(camera.projectionMatrixInverse); - _clipToWorldVector.multiplyScalar(1 / _clipToWorldVector.w); - return Math.abs(Math.max(_clipToWorldVector.x, _clipToWorldVector.y)); -} -function raycastWorldUnits(lineSegments, intersects) { - const matrixWorld = lineSegments.matrixWorld; - const geometry = lineSegments.geometry; - const instanceStart = geometry.attributes.instanceStart; - const instanceEnd = geometry.attributes.instanceEnd; - const segmentCount = Math.min(geometry.instanceCount, instanceStart.count); - for (let i = 0, l = segmentCount; i < l; i++) { - _line.start.fromBufferAttribute(instanceStart, i); - _line.end.fromBufferAttribute(instanceEnd, i); - _line.applyMatrix4(matrixWorld); - const pointOnLine = new Vector3(); - const point = new Vector3(); - _ray.distanceSqToSegment(_line.start, _line.end, point, pointOnLine); - if (point.distanceTo(pointOnLine) < _lineWidth * .5) intersects.push({ - point, - pointOnLine, - distance: _ray.origin.distanceTo(point), - object: lineSegments, - face: null, - faceIndex: i, - uv: null, - [UV1]: null - }); - } -} -function raycastScreenSpace(lineSegments, camera, intersects) { - const projectionMatrix = camera.projectionMatrix; - const resolution = lineSegments.material.resolution; - const matrixWorld = lineSegments.matrixWorld; - const geometry = lineSegments.geometry; - const instanceStart = geometry.attributes.instanceStart; - const instanceEnd = geometry.attributes.instanceEnd; - const segmentCount = Math.min(geometry.instanceCount, instanceStart.count); - const near = -camera.near; - _ray.at(1, _ssOrigin); - _ssOrigin.w = 1; - _ssOrigin.applyMatrix4(camera.matrixWorldInverse); - _ssOrigin.applyMatrix4(projectionMatrix); - _ssOrigin.multiplyScalar(1 / _ssOrigin.w); - _ssOrigin.x *= resolution.x / 2; - _ssOrigin.y *= resolution.y / 2; - _ssOrigin.z = 0; - _ssOrigin3.copy(_ssOrigin); - _mvMatrix.multiplyMatrices(camera.matrixWorldInverse, matrixWorld); - for (let i = 0, l = segmentCount; i < l; i++) { - _start4.fromBufferAttribute(instanceStart, i); - _end4.fromBufferAttribute(instanceEnd, i); - _start4.w = 1; - _end4.w = 1; - _start4.applyMatrix4(_mvMatrix); - _end4.applyMatrix4(_mvMatrix); - if (_start4.z > near && _end4.z > near) continue; - if (_start4.z > near) { - const deltaDist = _start4.z - _end4.z; - const t = (_start4.z - near) / deltaDist; - _start4.lerp(_end4, t); - } else if (_end4.z > near) { - const deltaDist = _end4.z - _start4.z; - const t = (_end4.z - near) / deltaDist; - _end4.lerp(_start4, t); - } - _start4.applyMatrix4(projectionMatrix); - _end4.applyMatrix4(projectionMatrix); - _start4.multiplyScalar(1 / _start4.w); - _end4.multiplyScalar(1 / _end4.w); - _start4.x *= resolution.x / 2; - _start4.y *= resolution.y / 2; - _end4.x *= resolution.x / 2; - _end4.y *= resolution.y / 2; - _line.start.copy(_start4); - _line.start.z = 0; - _line.end.copy(_end4); - _line.end.z = 0; - const param = _line.closestPointToPointParameter(_ssOrigin3, true); - _line.at(param, _closestPoint); - const zPos = MathUtils.lerp(_start4.z, _end4.z, param); - const isInClipSpace = zPos >= -1 && zPos <= 1; - const isInside = _ssOrigin3.distanceTo(_closestPoint) < _lineWidth * .5; - if (isInClipSpace && isInside) { - _line.start.fromBufferAttribute(instanceStart, i); - _line.end.fromBufferAttribute(instanceEnd, i); - _line.start.applyMatrix4(matrixWorld); - _line.end.applyMatrix4(matrixWorld); - const pointOnLine = new Vector3(); - const point = new Vector3(); - _ray.distanceSqToSegment(_line.start, _line.end, point, pointOnLine); - intersects.push({ - point, - pointOnLine, - distance: _ray.origin.distanceTo(point), - object: lineSegments, - face: null, - faceIndex: i, - uv: null, - [UV1]: null - }); - } - } -} -var LineSegments2 = class extends Mesh { - constructor(geometry = new LineSegmentsGeometry(), material = new LineMaterial({ color: Math.random() * 16777215 })) { - super(geometry, material); - this.isLineSegments2 = true; - this.type = "LineSegments2"; - } - computeLineDistances() { - const geometry = this.geometry; - const instanceStart = geometry.attributes.instanceStart; - const instanceEnd = geometry.attributes.instanceEnd; - const lineDistances = new Float32Array(2 * instanceStart.count); - for (let i = 0, j = 0, l = instanceStart.count; i < l; i++, j += 2) { - _start.fromBufferAttribute(instanceStart, i); - _end.fromBufferAttribute(instanceEnd, i); - lineDistances[j] = j === 0 ? 0 : lineDistances[j - 1]; - lineDistances[j + 1] = lineDistances[j] + _start.distanceTo(_end); - } - const instanceDistanceBuffer = new InstancedInterleavedBuffer(lineDistances, 2, 1); - geometry.setAttribute("instanceDistanceStart", new InterleavedBufferAttribute(instanceDistanceBuffer, 1, 0)); - geometry.setAttribute("instanceDistanceEnd", new InterleavedBufferAttribute(instanceDistanceBuffer, 1, 1)); - return this; - } - raycast(raycaster, intersects) { - const worldUnits = this.material.worldUnits; - const camera = raycaster.camera; - if (camera === null && !worldUnits) console.error("LineSegments2: \"Raycaster.camera\" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false."); - const threshold = raycaster.params.Line2 !== void 0 ? raycaster.params.Line2.threshold || 0 : 0; - _ray = raycaster.ray; - const matrixWorld = this.matrixWorld; - const geometry = this.geometry; - const material = this.material; - _lineWidth = material.linewidth + threshold; - if (geometry.boundingSphere === null) geometry.computeBoundingSphere(); - _sphere.copy(geometry.boundingSphere).applyMatrix4(matrixWorld); - let sphereMargin; - if (worldUnits) sphereMargin = _lineWidth * .5; - else sphereMargin = getWorldSpaceHalfWidth(camera, Math.max(camera.near, _sphere.distanceToPoint(_ray.origin)), material.resolution); - _sphere.radius += sphereMargin; - if (_ray.intersectsSphere(_sphere) === false) return; - if (geometry.boundingBox === null) geometry.computeBoundingBox(); - _box.copy(geometry.boundingBox).applyMatrix4(matrixWorld); - let boxMargin; - if (worldUnits) boxMargin = _lineWidth * .5; - else boxMargin = getWorldSpaceHalfWidth(camera, Math.max(camera.near, _box.distanceToPoint(_ray.origin)), material.resolution); - _box.expandByScalar(boxMargin); - if (_ray.intersectsBox(_box) === false) return; - if (worldUnits) raycastWorldUnits(this, intersects); - else raycastScreenSpace(this, camera, intersects); - } - onBeforeRender(renderer) { - const uniforms = this.material.uniforms; - if (uniforms && uniforms.resolution) { - renderer.getViewport(_viewport); - this.material.uniforms.resolution.value.set(_viewport.z, _viewport.w); - } - } -}; -//#endregion -//#region node_modules/three-stdlib/lines/Line2.js -var Line2 = class extends LineSegments2 { - constructor(geometry = new LineGeometry(), material = new LineMaterial({ color: Math.random() * 16777215 })) { - super(geometry, material); - this.isLine2 = true; - this.type = "Line2"; - } -}; -//#endregion -//#region node_modules/three-stdlib/helpers/LightProbeHelper.js -var LightProbeHelper = class extends Mesh { - constructor(lightProbe, size) { - const material = new ShaderMaterial({ - type: "LightProbeHelperMaterial", - uniforms: { - sh: { value: lightProbe.sh.coefficients }, - intensity: { value: lightProbe.intensity } - }, - vertexShader: [ - "varying vec3 vNormal;", - "void main() {", - " vNormal = normalize( normalMatrix * normal );", - " gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );", - "}" - ].join("\n"), - fragmentShader: [ - "#define RECIPROCAL_PI 0.318309886", - "vec3 inverseTransformDirection( in vec3 normal, in mat4 matrix ) {", - " // matrix is assumed to be orthogonal", - " return normalize( ( vec4( normal, 0.0 ) * matrix ).xyz );", - "}", - "// source: https://graphics.stanford.edu/papers/envmap/envmap.pdf", - "vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {", - " // normal is assumed to have unit length", - " float x = normal.x, y = normal.y, z = normal.z;", - " // band 0", - " vec3 result = shCoefficients[ 0 ] * 0.886227;", - " // band 1", - " result += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;", - " result += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;", - " result += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;", - " // band 2", - " result += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;", - " result += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;", - " result += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );", - " result += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;", - " result += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );", - " return result;", - "}", - "uniform vec3 sh[ 9 ]; // sh coefficients", - "uniform float intensity; // light probe intensity", - "varying vec3 vNormal;", - "void main() {", - " vec3 normal = normalize( vNormal );", - " vec3 worldNormal = inverseTransformDirection( normal, viewMatrix );", - " vec3 irradiance = shGetIrradianceAt( worldNormal, sh );", - " vec3 outgoingLight = RECIPROCAL_PI * irradiance * intensity;", - " gl_FragColor = linearToOutputTexel( vec4( outgoingLight, 1.0 ) );", - "}" - ].join("\n") - }); - const geometry = new SphereGeometry(1, 32, 16); - super(geometry, material); - this.lightProbe = lightProbe; - this.size = size; - this.type = "LightProbeHelper"; - this.onBeforeRender(); - } - dispose() { - this.geometry.dispose(); - this.material.dispose(); - } - onBeforeRender() { - this.position.copy(this.lightProbe.position); - this.scale.set(1, 1, 1).multiplyScalar(this.size); - this.material.uniforms.intensity.value = this.lightProbe.intensity; - } -}; -//#endregion -//#region node_modules/three-stdlib/helpers/RaycasterHelper.js -var __defProp = Object.defineProperty; -var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { - enumerable: true, - configurable: true, - writable: true, - value -}) : obj[key] = value; -var __publicField = (obj, key, value) => { - __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value); - return value; -}; -var _o = /* @__PURE__ */ new Object3D(); -var _v = /* @__PURE__ */ new Vector3(); -var RaycasterHelper = class extends Object3D { - constructor(raycaster, numberOfHitsToVisualize = 20) { - super(); - __publicField(this, "raycaster"); - __publicField(this, "hits"); - __publicField(this, "origin"); - __publicField(this, "near"); - __publicField(this, "far"); - __publicField(this, "nearToFar"); - __publicField(this, "originToNear"); - __publicField(this, "hitPoints"); - __publicField(this, "colors", { - near: 16777215, - far: 16777215, - originToNear: 3355443, - nearToFar: 16777215, - origin: [978050, 16711771] - }); - __publicField(this, "setColors", (colors) => { - const _colors = { - ...this.colors, - ...colors - }; - this.near.material.color.set(_colors.near); - this.far.material.color.set(_colors.far); - this.nearToFar.material.color.set(_colors.nearToFar); - this.originToNear.material.color.set(_colors.originToNear); - }); - __publicField(this, "update", () => { - var _a; - const origin = this.raycaster.ray.origin; - const direction = this.raycaster.ray.direction; - this.origin.position.copy(origin); - this.near.position.copy(origin).add(direction.clone().multiplyScalar(this.raycaster.near)); - this.far.position.copy(origin).add(direction.clone().multiplyScalar(this.raycaster.far)); - this.far.lookAt(origin); - this.near.lookAt(origin); - let pos = this.nearToFar.geometry.getAttribute("position"); - pos.set([...this.near.position.toArray(), ...this.far.position.toArray()]); - pos.needsUpdate = true; - pos = this.originToNear.geometry.getAttribute("position"); - pos.set([...origin.toArray(), ...this.near.position.toArray()]); - pos.needsUpdate = true; - for (let i = 0; i < this.numberOfHitsToVisualize; i++) { - const hit = (_a = this.hits) == null ? void 0 : _a[i]; - if (hit) { - const { point } = hit; - _o.position.copy(point); - _o.scale.setScalar(1); - } else _o.scale.setScalar(0); - _o.updateMatrix(); - this.hitPoints.setMatrixAt(i, _o.matrix); - } - this.hitPoints.instanceMatrix.needsUpdate = true; - this.origin.material.color.set(this.hits.length > 0 ? this.colors.origin[0] : this.colors.origin[1]); - }); - __publicField(this, "dispose", () => { - this.origin.geometry.dispose(); - this.origin.material.dispose(); - this.near.geometry.dispose(); - this.near.material.dispose(); - this.far.geometry.dispose(); - this.far.material.dispose(); - this.nearToFar.geometry.dispose(); - this.nearToFar.material.dispose(); - this.originToNear.geometry.dispose(); - this.originToNear.material.dispose(); - this.hitPoints.dispose(); - }); - this.numberOfHitsToVisualize = numberOfHitsToVisualize; - this.raycaster = raycaster; - this.hits = []; - this.origin = new Mesh(new SphereGeometry(.04, 32), new MeshBasicMaterial()); - this.origin.name = "RaycasterHelper_origin"; - this.origin.raycast = () => null; - const size = .1; - let geometry = new BufferGeometry(); - geometry.setAttribute("position", new Float32BufferAttribute([ - -.1, - size, - 0, - size, - size, - 0, - size, - -.1, - 0, - -.1, - -.1, - 0, - -.1, - size, - 0 - ], 3)); - this.near = new Line(geometry, new LineBasicMaterial()); - this.near.name = "RaycasterHelper_near"; - this.near.raycast = () => null; - this.far = new Line(geometry, new LineBasicMaterial()); - this.far.name = "RaycasterHelper_far"; - this.far.raycast = () => null; - this.nearToFar = new Line(new BufferGeometry(), new LineBasicMaterial()); - this.nearToFar.name = "RaycasterHelper_nearToFar"; - this.nearToFar.raycast = () => null; - this.nearToFar.geometry.setFromPoints([_v, _v]); - this.originToNear = new Line(this.nearToFar.geometry.clone(), new LineBasicMaterial()); - this.originToNear.name = "RaycasterHelper_originToNear"; - this.originToNear.raycast = () => null; - this.hitPoints = new InstancedMesh(new SphereGeometry(.04), new MeshBasicMaterial(), this.numberOfHitsToVisualize); - this.hitPoints.name = "RaycasterHelper_hits"; - this.hitPoints.raycast = () => null; - this.add(this.nearToFar); - this.add(this.originToNear); - this.add(this.near); - this.add(this.far); - this.add(this.origin); - this.add(this.hitPoints); - this.setColors(); - } -}; -//#endregion -//#region node_modules/three-stdlib/helpers/VertexTangentsHelper.js -var _v1$1 = /* @__PURE__ */ new Vector3(); -var _v2$1 = /* @__PURE__ */ new Vector3(); -var VertexTangentsHelper = class extends LineSegments { - constructor(object, size = 1, color = 65535) { - const geometry = new BufferGeometry(); - const nTangents = object.geometry.attributes.tangent.count; - const positions = new Float32BufferAttribute(nTangents * 2 * 3, 3); - geometry.setAttribute("position", positions); - super(geometry, new LineBasicMaterial({ - color, - toneMapped: false - })); - this.object = object; - this.size = size; - this.type = "VertexTangentsHelper"; - this.matrixAutoUpdate = false; - this.update(); - } - update() { - this.object.updateMatrixWorld(true); - const matrixWorld = this.object.matrixWorld; - const position = this.geometry.attributes.position; - const objGeometry = this.object.geometry; - const objPos = objGeometry.attributes.position; - const objTan = objGeometry.attributes.tangent; - let idx = 0; - for (let j = 0, jl = objPos.count; j < jl; j++) { - _v1$1.fromBufferAttribute(objPos, j).applyMatrix4(matrixWorld); - _v2$1.fromBufferAttribute(objTan, j); - _v2$1.transformDirection(matrixWorld).multiplyScalar(this.size).add(_v1$1); - position.setXYZ(idx, _v1$1.x, _v1$1.y, _v1$1.z); - idx = idx + 1; - position.setXYZ(idx, _v2$1.x, _v2$1.y, _v2$1.z); - idx = idx + 1; - } - position.needsUpdate = true; - } - dispose() { - this.geometry.dispose(); - this.material.dispose(); - } -}; -//#endregion -//#region node_modules/three-stdlib/helpers/PositionalAudioHelper.js -var PositionalAudioHelper = class extends Line { - constructor(audio, range = 1, divisionsInnerAngle = 16, divisionsOuterAngle = 2) { - const geometry = new BufferGeometry(); - const divisions = divisionsInnerAngle + divisionsOuterAngle * 2; - const positions = new Float32Array((divisions * 3 + 3) * 3); - geometry.setAttribute("position", new BufferAttribute(positions, 3)); - const materialInnerAngle = new LineBasicMaterial({ color: 65280 }); - const materialOuterAngle = new LineBasicMaterial({ color: 16776960 }); - super(geometry, [materialOuterAngle, materialInnerAngle]); - this.type = "PositionalAudioHelper"; - this.audio = audio; - this.range = range; - this.divisionsInnerAngle = divisionsInnerAngle; - this.divisionsOuterAngle = divisionsOuterAngle; - this.update(); - } - update() { - const audio = this.audio; - const range = this.range; - const divisionsInnerAngle = this.divisionsInnerAngle; - const divisionsOuterAngle = this.divisionsOuterAngle; - const coneInnerAngle = MathUtils.degToRad(audio.panner.coneInnerAngle); - const coneOuterAngle = MathUtils.degToRad(audio.panner.coneOuterAngle); - const halfConeInnerAngle = coneInnerAngle / 2; - const halfConeOuterAngle = coneOuterAngle / 2; - let start = 0; - let count = 0; - let i, stride; - const geometry = this.geometry; - const positionAttribute = geometry.attributes.position; - geometry.clearGroups(); - function generateSegment(from, to, divisions, materialIndex) { - const step = (to - from) / divisions; - positionAttribute.setXYZ(start, 0, 0, 0); - count++; - for (i = from; i < to; i += step) { - stride = start + count; - positionAttribute.setXYZ(stride, Math.sin(i) * range, 0, Math.cos(i) * range); - positionAttribute.setXYZ(stride + 1, Math.sin(Math.min(i + step, to)) * range, 0, Math.cos(Math.min(i + step, to)) * range); - positionAttribute.setXYZ(stride + 2, 0, 0, 0); - count += 3; - } - geometry.addGroup(start, count, materialIndex); - start += count; - count = 0; - } - generateSegment(-halfConeOuterAngle, -halfConeInnerAngle, divisionsOuterAngle, 0); - generateSegment(-halfConeInnerAngle, halfConeInnerAngle, divisionsInnerAngle, 1); - generateSegment(halfConeInnerAngle, halfConeOuterAngle, divisionsOuterAngle, 0); - positionAttribute.needsUpdate = true; - if (coneInnerAngle === coneOuterAngle) this.material[0].visible = false; - } - dispose() { - this.geometry.dispose(); - this.material[0].dispose(); - this.material[1].dispose(); - } -}; -//#endregion -//#region node_modules/three-stdlib/helpers/VertexNormalsHelper.js -var _v1 = /* @__PURE__ */ new Vector3(); -var _v2 = /* @__PURE__ */ new Vector3(); -var _normalMatrix = /* @__PURE__ */ new Matrix3(); -var VertexNormalsHelper = class extends LineSegments { - constructor(object, size = 1, color = 16711680) { - const geometry = new BufferGeometry(); - const nNormals = object.geometry.attributes.normal.count; - const positions = new Float32BufferAttribute(nNormals * 2 * 3, 3); - geometry.setAttribute("position", positions); - super(geometry, new LineBasicMaterial({ - color, - toneMapped: false - })); - this.object = object; - this.size = size; - this.type = "VertexNormalsHelper"; - this.matrixAutoUpdate = false; - this.update(); - } - update() { - this.object.updateMatrixWorld(true); - _normalMatrix.getNormalMatrix(this.object.matrixWorld); - const matrixWorld = this.object.matrixWorld; - const position = this.geometry.attributes.position; - const objGeometry = this.object.geometry; - if (objGeometry) { - const objPos = objGeometry.attributes.position; - const objNorm = objGeometry.attributes.normal; - let idx = 0; - for (let j = 0, jl = objPos.count; j < jl; j++) { - _v1.fromBufferAttribute(objPos, j).applyMatrix4(matrixWorld); - _v2.fromBufferAttribute(objNorm, j); - _v2.applyMatrix3(_normalMatrix).normalize().multiplyScalar(this.size).add(_v1); - position.setXYZ(idx, _v1.x, _v1.y, _v1.z); - idx = idx + 1; - position.setXYZ(idx, _v2.x, _v2.y, _v2.z); - idx = idx + 1; - } - } - position.needsUpdate = true; - } - dispose() { - this.geometry.dispose(); - this.material.dispose(); - } -}; -//#endregion -//#region node_modules/three-stdlib/helpers/RectAreaLightHelper.js -var RectAreaLightHelper = class extends Line { - constructor(light, color) { - const positions = [ - 1, - 1, - 0, - -1, - 1, - 0, - -1, - -1, - 0, - 1, - -1, - 0, - 1, - 1, - 0 - ]; - const geometry = new BufferGeometry(); - geometry.setAttribute("position", new Float32BufferAttribute(positions, 3)); - geometry.computeBoundingSphere(); - const material = new LineBasicMaterial({ fog: false }); - super(geometry, material); - this.light = light; - this.color = color; - this.type = "RectAreaLightHelper"; - const positions2 = [ - 1, - 1, - 0, - -1, - 1, - 0, - -1, - -1, - 0, - 1, - 1, - 0, - -1, - -1, - 0, - 1, - -1, - 0 - ]; - const geometry2 = new BufferGeometry(); - geometry2.setAttribute("position", new Float32BufferAttribute(positions2, 3)); - geometry2.computeBoundingSphere(); - this.add(new Mesh(geometry2, new MeshBasicMaterial({ - side: 1, - fog: false - }))); - } - updateMatrixWorld() { - this.scale.set(.5 * this.light.width, .5 * this.light.height, 1); - if (this.color !== void 0) { - this.material.color.set(this.color); - this.children[0].material.color.set(this.color); - } else { - this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity); - const c = this.material.color; - const max = Math.max(c.r, c.g, c.b); - if (max > 1) c.multiplyScalar(1 / max); - this.children[0].material.color.copy(this.material.color); - } - this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld); - this.children[0].matrixWorld.copy(this.matrixWorld); - } - dispose() { - this.geometry.dispose(); - this.material.dispose(); - this.children[0].geometry.dispose(); - this.children[0].material.dispose(); - } -}; -//#endregion -//#region node_modules/three-stdlib/lights/RectAreaLightUniformsLib.js -var RectAreaLightUniformsLib = { init() { - const LTC_MAT_1 = [ - 1, - 0, - 0, - 2e-5, - 1, - 0, - 0, - 503905e-9, - 1, - 0, - 0, - .00201562, - 1, - 0, - 0, - .00453516, - 1, - 0, - 0, - .00806253, - 1, - 0, - 0, - .0125978, - 1, - 0, - 0, - .018141, - 1, - 0, - 0, - .0246924, - 1, - 0, - 0, - .0322525, - 1, - 0, - 0, - .0408213, - 1, - 0, - 0, - .0503999, - 1, - 0, - 0, - .0609894, - 1, - 0, - 0, - .0725906, - 1, - 0, - 0, - .0852058, - 1, - 0, - 0, - .0988363, - 1, - 0, - 0, - .113484, - 1, - 0, - 0, - .129153, - 1, - 0, - 0, - .145839, - 1, - 0, - 0, - .163548, - 1, - 0, - 0, - .182266, - 1, - 0, - 0, - .201942, - 1, - 0, - 0, - .222314, - 1, - 0, - 0, - .241906, - 1, - 0, - 0, - .262314, - 1, - 0, - 0, - .285754, - 1, - 0, - 0, - .310159, - 1, - 0, - 0, - .335426, - 1, - 0, - 0, - .361341, - 1, - 0, - 0, - .387445, - 1, - 0, - 0, - .412784, - 1, - 0, - 0, - .438197, - 1, - 0, - 0, - .466966, - 1, - 0, - 0, - .49559, - 1, - 0, - 0, - .523448, - 1, - 0, - 0, - .549938, - 1, - 0, - 0, - .57979, - 1, - 0, - 0, - .608746, - 1, - 0, - 0, - .636185, - 1, - 0, - 0, - .664748, - 1, - 0, - 0, - .69313, - 1, - 0, - 0, - .71966, - 1, - 0, - 0, - .747662, - 1, - 0, - 0, - .774023, - 1, - 0, - 0, - .799775, - 1, - 0, - 0, - .825274, - 1, - 0, - 0, - .849156, - 1, - 0, - 0, - .873248, - 1, - 0, - 0, - .89532, - 1, - 0, - 0, - .917565, - 1, - 0, - 0, - .937863, - 1, - 0, - 0, - .958139, - 1, - 0, - 0, - .976563, - 1, - 0, - 0, - .994658, - 1, - 0, - 0, - 1.0112, - 1, - 0, - 0, - 1.02712, - 1, - 0, - 0, - 1.04189, - 1, - 0, - 0, - 1.05568, - 1, - 0, - 0, - 1.06877, - 1, - 0, - 0, - 1.08058, - 1, - 0, - 0, - 1.09194, - 1, - 0, - 0, - 1.10191, - 1, - 0, - 0, - 1.11161, - 1, - 0, - 0, - 1.1199, - 1, - 0, - 0, - 1.12813, - .999547, - -4.48815e-7, - .0224417, - 199902e-10, - .999495, - -113079e-10, - .0224406, - 503651e-9, - .999496, - -452317e-10, - .0224406, - .00201461, - .999496, - -101772e-9, - .0224406, - .00453287, - .999495, - -180928e-9, - .0224406, - .00805845, - .999497, - -282702e-9, - .0224406, - .0125914, - .999496, - -407096e-9, - .0224406, - .0181319, - .999498, - -554114e-9, - .0224406, - .02468, - .999499, - -723768e-9, - .0224406, - .0322363, - .999495, - -916058e-9, - .0224405, - .0408009, - .999499, - -.00113101, - .0224408, - .050375, - .999494, - -.00136863, - .0224405, - .0609586, - .999489, - -.00162896, - .0224401, - .0725537, - .999489, - -.00191201, - .0224414, - .0851619, - .999498, - -.00221787, - .0224413, - .0987867, - .999492, - -.00254642, - .0224409, - .113426, - .999507, - -.00289779, - .0224417, - .129088, - .999494, - -.0032716, - .0224386, - .145767, - .999546, - -.0036673, - .0224424, - .163472, - .999543, - -.00408166, - .0224387, - .182182, - .999499, - -.00450056, - .0224338, - .201843, - .999503, - -.00483661, - .0224203, - .222198, - .999546, - -.00452928, - .022315, - .241714, - .999508, - -.00587403, - .0224329, - .262184, - .999509, - -.00638806, - .0224271, - .285609, - .999501, - -.00691028, - .0224166, - .309998, - .999539, - -.00741979, - .0223989, - .335262, - .999454, - -.00786282, - .0223675, - .361154, - .999529, - -.00811928, - .0222828, - .387224, - .999503, - -.00799941, - .0221063, - .41252, - .999561, - -.00952753, - .0223057, - .438006, - .999557, - -.0099134, - .0222065, - .466735, - .999541, - -.0100935, - .0220402, - .495332, - .999562, - -.00996821, - .0218067, - .523197, - .999556, - -.0105031, - .0217096, - .550223, - .999561, - -.0114191, - .0217215, - .579498, - .999588, - -.0111818, - .0213357, - .608416, - .999633, - -.0107725, - .0208689, - .635965, - .999527, - -.0121671, - .0210149, - .664476, - .999508, - -.0116005, - .020431, - .692786, - .999568, - -.0115604, - .0199791, - .719709, - .999671, - -.0121117, - .0197415, - .74737, - .999688, - -.0110769, - .0188846, - .773692, - .99962, - -.0122368, - .0188452, - .799534, - .999823, - -.0110325, - .0178001, - .825046, - .999599, - -.0114923, - .0174221, - .849075, - .999619, - -.0105923, - .0164345, - .872999, - .999613, - -.0105988, - .0158227, - .895371, - .99964, - -.00979861, - .0148131, - .917364, - .99977, - -.00967238, - .0140721, - .938002, - .999726, - -.00869175, - .0129543, - .957917, - .99973, - -.00866872, - .0122329, - .976557, - .999773, - -.00731956, - .0108958, - .994459, - .999811, - -.00756027, - .0102715, - 1.01118, - .999862, - -.00583732, - .00878781, - 1.02701, - .999835, - -.00631438, - .00827529, - 1.04186, - .999871, - -.00450785, - .00674583, - 1.05569, - .999867, - -.00486079, - .00621041, - 1.06861, - .999939, - -.00322072, - .00478301, - 1.08064, - .999918, - -.00318199, - .00406395, - 1.09181, - 1.00003, - -.00193348, - .00280682, - 1.10207, - .999928, - -.00153729, - .00198741, - 1.11152, - .999933, - -623666e-9, - 917714e-9, - 1.12009, - 1, - -102387e-11, - 9.07581e-7, - 1.12813, - .997866, - -8.96716e-7, - .0448334, - 199584e-10, - .997987, - -225945e-10, - .0448389, - 502891e-9, - .997987, - -903781e-10, - .0448388, - .00201156, - .997985, - -203351e-9, - .0448388, - .00452602, - .997986, - -361514e-9, - .0448388, - .00804629, - .997987, - -56487e-8, - .0448389, - .0125724, - .997988, - -813423e-9, - .0448389, - .0181045, - .997984, - -.00110718, - .0448387, - .0246427, - .997985, - -.00144616, - .0448388, - .0321875, - .997987, - -.00183038, - .044839, - .0407392, - .997983, - -.00225987, - .0448387, - .0502986, - .997991, - -.00273467, - .0448389, - .0608667, - .997984, - -.00325481, - .0448384, - .0724444, - .998002, - -.00382043, - .044839, - .0850348, - .997997, - -.00443145, - .0448396, - .0986372, - .998007, - -.00508796, - .0448397, - .113255, - .998008, - -.00578985, - .04484, - .128891, - .998003, - -.00653683, - .0448384, - .145548, - .997983, - -.00732713, - .0448358, - .163221, - .997985, - -.00815454, - .0448358, - .181899, - .998005, - -.00898985, - .0448286, - .201533, - .998026, - -.00964404, - .0447934, - .221821, - .998055, - -.00922677, - .044611, - .241282, - .99804, - -.0117361, - .0448245, - .261791, - .998048, - -.0127628, - .0448159, - .285181, - .998088, - -.0138055, - .0447996, - .30954, - .998058, - -.0148206, - .0447669, - .334751, - .998099, - -.0156998, - .044697, - .36061, - .998116, - -.0161976, - .0445122, - .386603, - .998195, - -.015945, - .0441711, - .411844, - .998168, - -.0183947, - .0444255, - .43773, - .998184, - -.0197913, - .0443809, - .466009, - .998251, - -.0201426, - .0440689, - .494574, - .998305, - -.0198847, - .0435632, - .522405, - .998273, - -.0210577, - .043414, - .549967, - .998254, - -.0227901, - .0433943, - .578655, - .998349, - -.0223108, - .0426529, - .60758, - .99843, - -.0223088, - .042, - .635524, - .998373, - -.0241141, - .0418987, - .663621, - .998425, - -.0231446, - .0408118, - .691906, - .998504, - -.0233684, - .0400565, - .719339, - .998443, - -.0241652, - .0394634, - .74643, - .99848, - -.0228715, - .0380002, - .773086, - .998569, - -.023519, - .0372322, - .798988, - .998619, - -.0223108, - .0356468, - .824249, - .998594, - -.0223105, - .034523, - .848808, - .998622, - -.0213426, - .0328887, - .87227, - .998669, - -.0207912, - .0314374, - .895157, - .998705, - -.0198416, - .0296925, - .916769, - .998786, - -.0189168, - .0279634, - .937773, - .998888, - -.0178811, - .0261597, - .957431, - .99906, - -.0166845, - .0242159, - .976495, - .999038, - -.0155464, - .0222638, - .994169, - .999237, - -.0141349, - .0201967, - 1.01112, - .999378, - -.0129324, - .0181744, - 1.02692, - .999433, - -.0113192, - .0159898, - 1.04174, - .999439, - -.0101244, - .0140385, - 1.05559, - .999614, - -.00837456, - .0117826, - 1.06852, - .999722, - -.00721769, - .00983745, - 1.08069, - .999817, - -.00554067, - .00769002, - 1.09176, - .99983, - -.00426961, - .005782, - 1.10211, - .999964, - -.00273904, - .00374503, - 1.11152, - 1.00001, - -.00136739, - .00187176, - 1.12031, - .999946, - 393227e-10, - -28919e-9, - 1.12804, - .995847, - -13435e-10, - .0671785, - 19916e-9, - .995464, - -338387e-10, - .0671527, - 501622e-9, - .99547, - -135355e-9, - .0671531, - .00200649, - .995471, - -30455e-8, - .0671532, - .00451461, - .99547, - -541423e-9, - .0671531, - .008026, - .995471, - -84598e-8, - .0671531, - .0125407, - .99547, - -.00121823, - .0671531, - .0180589, - .99547, - -.00165817, - .0671531, - .0245806, - .995463, - -.00216583, - .0671526, - .0321062, - .995468, - -.00274127, - .0671527, - .0406366, - .995474, - -.00338447, - .0671534, - .0501717, - .995473, - -.00409554, - .0671533, - .0607131, - .995478, - -.00487451, - .0671531, - .0722618, - .995476, - -.00572148, - .0671532, - .0848191, - .995477, - -.00663658, - .0671539, - .0983882, - .995498, - -.00761986, - .0671541, - .112972, - .995509, - -.00867094, - .0671542, - .128568, - .995509, - -.00978951, - .0671531, - .145183, - .995503, - -.0109725, - .0671491, - .162808, - .995501, - -.012211, - .0671465, - .181441, - .99553, - -.0134565, - .0671371, - .201015, - .99555, - -.014391, - .0670831, - .221206, - .99558, - -.014351, - .0668883, - .240813, - .995577, - -.0173997, - .0671055, - .261257, - .995602, - -.0191111, - .0671178, - .284467, - .995623, - -.0206705, - .0670946, - .308765, - .995658, - -.022184, - .0670472, - .333905, - .995705, - -.0234832, - .0669417, - .359677, - .995719, - -.0241933, - .0666714, - .385554, - .995786, - -.0243539, - .066266, - .410951, - .995887, - -.0271866, - .0664367, - .437163, - .995944, - -.0296012, - .0664931, - .464842, - .996004, - -.0301045, - .0660105, - .49332, - .996128, - -.0298311, - .0652694, - .521131, - .996253, - -.0316426, - .0650739, - .549167, - .996244, - -.0339043, - .0649433, - .57737, - .996309, - -.033329, - .0638926, - .606073, - .996417, - -.0338935, - .0630849, - .634527, - .996372, - -.0353104, - .0625083, - .66256, - .996542, - -.0348942, - .0611986, - .690516, - .996568, - -.0351614, - .060069, - .718317, - .996711, - -.0354317, - .0588522, - .74528, - .996671, - -.0349513, - .0571902, - .772061, - .996865, - -.0345622, - .0555321, - .798089, - .996802, - -.0342566, - .0537816, - .823178, - .996992, - -.0330862, - .0516095, - .847949, - .996944, - -.0324666, - .0495537, - .871431, - .997146, - -.0309544, - .0470302, - .894357, - .997189, - -.0299372, - .0446043, - .916142, - .997471, - -.0281389, - .0418812, - .937193, - .997515, - -.0268702, - .0391823, - .957, - .997812, - -.0247166, - .0361338, - .975936, - .998027, - -.0233525, - .0333945, - .99391, - .998233, - -.0209839, - .0301917, - 1.01075, - .998481, - -.0194309, - .027271, - 1.02669, - .998859, - -.0169728, - .0240162, - 1.04173, - .99894, - -.0152322, - .0210517, - 1.05551, - .999132, - -.0127497, - .0178632, - 1.06856, - .999369, - -.0108282, - .014787, - 1.08054, - .999549, - -.00845886, - .0116185, - 1.09185, - .999805, - -.0063937, - .00867209, - 1.10207, - .99985, - -.00414582, - .00566823, - 1.1117, - .999912, - -.00207443, - .00277562, - 1.12022, - 1.00001, - 870226e-10, - -53766e-9, - 1.12832, - .991943, - -178672e-11, - .0893382, - 198384e-10, - .991952, - -450183e-10, - .089339, - 499849e-9, - .991956, - -180074e-9, - .0893394, - .0019994, - .991955, - -405167e-9, - .0893393, - .00449867, - .991953, - -720298e-9, - .0893391, - .00799764, - .991955, - -.00112548, - .0893393, - .0124964, - .991957, - -.0016207, - .0893395, - .0179951, - .991958, - -.00220601, - .0893396, - .0244939, - .991947, - -.00288137, - .0893385, - .0319929, - .991962, - -.00364693, - .0893399, - .0404933, - .991965, - -.00450264, - .0893399, - .049995, - .99198, - -.00544862, - .0893411, - .0604995, - .99197, - -.00648491, - .0893397, - .0720074, - .991976, - -.00761164, - .089341, - .0845207, - .99198, - -.00882891, - .0893405, - .0980413, - .991982, - -.0101367, - .0893396, - .112571, - .992008, - -.011535, - .0893415, - .128115, - .992026, - -.0130228, - .0893414, - .144672, - .992064, - -.0145966, - .0893418, - .162241, - .992041, - -.0162421, - .0893359, - .180801, - .992086, - -.0178888, - .0893214, - .200302, - .992157, - -.0190368, - .0892401, - .220332, - .992181, - -.0195584, - .0890525, - .240144, - .992175, - -.0227257, - .0892153, - .260728, - .99221, - -.0254195, - .089304, - .283473, - .99222, - -.0274883, - .0892703, - .307673, - .992317, - -.0294905, - .0892027, - .332729, - .992374, - -.0311861, - .0890577, - .358387, - .992505, - -.0320656, - .0886994, - .384102, - .992568, - -.0329715, - .0883198, - .409767, - .992675, - -.036006, - .0883602, - .436145, - .992746, - -.0392897, - .0884591, - .463217, - .992873, - -.0399337, - .0878287, - .491557, - .992934, - -.040231, - .0870108, - .519516, - .993091, - -.0422013, - .0865857, - .547741, - .993259, - -.0443503, - .0861937, - .575792, - .993455, - -.0446368, - .0851187, - .604233, - .993497, - -.0454299, - .0840576, - .632925, - .993694, - -.0463296, - .0829671, - .660985, - .993718, - -.0470619, - .0817185, - .688714, - .993973, - -.0468838, - .0800294, - .716743, - .994207, - -.046705, - .0781286, - .74377, - .994168, - -.0469698, - .0763337, - .77042, - .9945, - -.0456816, - .0738184, - .796659, - .994356, - -.0455518, - .0715545, - .821868, - .994747, - -.0439488, - .0686085, - .846572, - .994937, - -.0430056, - .065869, - .870435, - .995142, - -.0413414, - .0626446, - .893272, - .995451, - -.0396521, - .05929, - .915376, - .995445, - -.0378453, - .0558503, - .936196, - .995967, - -.0355219, - .0520949, - .956376, - .996094, - -.0335146, - .048377, - .975327, - .996622, - -.030682, - .0442575, - .993471, - .996938, - -.0285504, - .0404693, - 1.01052, - .997383, - -.0253399, - .0360903, - 1.02637, - .997714, - -.0231651, - .0322176, - 1.04139, - .998249, - -.0198138, - .0278433, - 1.05542, - .998596, - -.0174337, - .0238759, - 1.06846, - .998946, - -.0141349, - .0195944, - 1.08056, - .99928, - -.0115603, - .0156279, - 1.09181, - .999507, - -.00839065, - .0114607, - 1.10213, - .999697, - -.005666, - .00763325, - 1.11169, - .999869, - -.00269902, - .00364946, - 1.12042, - 1.00001, - 623836e-10, - -319288e-10, - 1.12832, - .987221, - -222675e-11, - .111332, - 197456e-10, - .98739, - -561116e-10, - .111351, - 497563e-9, - .987448, - -224453e-9, - .111357, - .00199031, - .987441, - -505019e-9, - .111357, - .0044782, - .987442, - -897816e-9, - .111357, - .00796129, - .987442, - -.00140284, - .111357, - .0124396, - .987444, - -.00202012, - .111357, - .0179132, - .987442, - -.00274964, - .111357, - .0243824, - .987446, - -.00359147, - .111357, - .0318474, - .987435, - -.00454562, - .111356, - .0403086, - .987461, - -.00561225, - .111358, - .0497678, - .987458, - -.00679125, - .111358, - .0602239, - .987443, - -.0080828, - .111356, - .0716792, - .987476, - -.0094872, - .111358, - .0841364, - .98749, - -.0110044, - .111361, - .097597, - .987508, - -.0126344, - .111362, - .112062, - .987494, - -.0143767, - .111357, - .127533, - .987526, - -.0162307, - .111359, - .144015, - .987558, - -.0181912, - .111361, - .161502, - .987602, - -.0202393, - .111355, - .179979, - .987692, - -.022273, - .111346, - .199386, - .987702, - -.0235306, - .111215, - .219183, - .987789, - -.0247628, - .111061, - .239202, - .987776, - -.0280668, - .111171, - .259957, - .987856, - -.0316751, - .111327, - .282198, - .987912, - -.0342468, - .111282, - .306294, - .988, - -.0367205, - .111198, - .331219, - .988055, - -.0387766, - .110994, - .356708, - .988241, - -.0397722, - .110547, - .382234, - .988399, - -.0416076, - .110198, - .408227, - .988539, - -.0448192, - .110137, - .434662, - .988661, - -.0483793, - .110143, - .461442, - .988967, - -.0495895, - .109453, - .489318, - .989073, - -.0506797, - .108628, - .517516, - .989274, - -.0526953, - .108003, - .545844, - .989528, - -.054578, - .107255, - .573823, - .989709, - -.0561503, - .106294, - .601944, - .989991, - -.056866, - .104896, - .630855, - .990392, - -.0572914, - .103336, - .658925, - .990374, - -.0586224, - .10189, - .686661, - .990747, - -.0584764, - .099783, - .714548, - .991041, - -.0582662, - .0974309, - .74186, - .991236, - -.0584118, - .0951678, - .768422, - .991585, - -.0573055, - .0921581, - .794817, - .991984, - -.0564241, - .0891167, - .820336, - .9921, - -.0553608, - .085805, - .84493, - .992749, - -.0533816, - .0820354, - .868961, - .99288, - -.0518661, - .0782181, - .891931, - .993511, - -.0492492, - .0738935, - .914186, - .993617, - -.0471956, - .0696402, - .93532, - .99411, - -.044216, - .0649659, - .95543, - .994595, - -.0416654, - .0603177, - .974685, - .994976, - -.0384314, - .0553493, - .992807, - .995579, - -.0353491, - .0503942, - 1.00996, - .996069, - -.0319787, - .0452123, - 1.02606, - .996718, - -.028472, - .0400112, - 1.04114, - .997173, - -.0250789, - .0349456, - 1.05517, - .997818, - -.0213326, - .029653, - 1.0683, - .998318, - -.0178509, - .024549, - 1.0805, - .998853, - -.0141118, - .0194197, - 1.09177, - .999218, - -.0105914, - .0143869, - 1.1022, - .999594, - -.00693474, - .00943517, - 1.11175, - .99975, - -.00340478, - .00464051, - 1.12056, - 1.00001, - 109172e-9, - -112821e-9, - 1.12853, - .983383, - -266524e-11, - .133358, - 196534e-10, - .981942, - -671009e-10, - .133162, - 494804e-9, - .981946, - -268405e-9, - .133163, - .00197923, - .981944, - -603912e-9, - .133163, - .00445326, - .981941, - -.00107362, - .133162, - .00791693, - .981946, - -.00167755, - .133163, - .0123703, - .981944, - -.00241569, - .133162, - .0178135, - .981945, - -.00328807, - .133163, - .0242466, - .981945, - -.00429472, - .133162, - .03167, - .981955, - -.00543573, - .133164, - .0400846, - .981951, - -.00671105, - .133163, - .0494901, - .981968, - -.00812092, - .133165, - .0598886, - .981979, - -.00966541, - .133166, - .0712811, - .981996, - -.0113446, - .133168, - .083669, - .982014, - -.0131585, - .133169, - .0970533, - .982011, - -.0151073, - .133167, - .111438, - .982062, - -.0171906, - .133172, - .126826, - .9821, - -.0194067, - .133175, - .143215, - .982149, - -.0217502, - .133176, - .160609, - .982163, - -.0241945, - .133173, - .178981, - .982247, - -.0265907, - .133148, - .198249, - .982291, - -.027916, - .132974, - .217795, - .982396, - -.0299663, - .132868, - .238042, - .982456, - -.0334544, - .132934, - .258901, - .982499, - -.0378636, - .133137, - .280639, - .982617, - -.0409274, - .133085, - .304604, - .98274, - -.0438523, - .132985, - .329376, - .982944, - -.0462288, - .132728, - .354697, - .98308, - -.0475995, - .132228, - .380102, - .983391, - -.0501901, - .131924, - .406256, - .983514, - -.0535899, - .131737, - .432735, - .98373, - -.0571858, - .131567, - .459359, - .984056, - -.0592353, - .130932, - .486637, - .984234, - -.0610488, - .130092, - .51509, - .984748, - -.0630758, - .12923, - .543461, - .985073, - -.0647398, - .128174, - .571376, - .985195, - -.0671941, - .127133, - .599414, - .985734, - -.0681345, - .125576, - .628134, - .986241, - -.0686089, - .123639, - .656399, - .986356, - -.0698511, - .121834, - .684258, - .986894, - -.0700931, - .119454, - .711818, - .987382, - -.0698321, - .116718, - .739511, - .988109, - -.0693975, - .113699, - .766267, - .988363, - -.0689584, - .110454, - .792456, - .989112, - -.0672353, - .106602, - .81813, - .989241, - -.0662034, - .10267, - .842889, - .990333, - -.0638938, - .0981381, - .867204, - .990591, - -.0618534, - .0935388, - .89038, - .991106, - -.0593117, - .088553, - .912576, - .991919, - -.0562676, - .0832187, - .934118, - .992111, - -.0534085, - .0778302, - .954254, - .992997, - -.0495459, - .0720453, - .973722, - .993317, - -.0463707, - .0663458, - .991949, - .994133, - -.0421245, - .0601883, - 1.00936, - .994705, - -.0384977, - .0542501, - 1.02559, - .995495, - -.0340956, - .0479862, - 1.04083, - .996206, - -.030105, - .041887, - 1.05497, - .996971, - -.0256095, - .0355355, - 1.06824, - .997796, - -.0213932, - .0293655, - 1.08056, - .998272, - -.0169612, - .0232926, - 1.09182, - .998857, - -.0126756, - .0172786, - 1.10219, - .99939, - -.00832486, - .0113156, - 1.11192, - .999752, - -.00410826, - .00557892, - 1.12075, - 1, - 150957e-9, - -119101e-9, - 1.12885, - .975169, - -309397e-11, - .154669, - 195073e-10, - .975439, - -779608e-10, - .154712, - 491534e-9, - .975464, - -311847e-9, - .154716, - .00196617, - .975464, - -701656e-9, - .154716, - .00442387, - .975462, - -.0012474, - .154715, - .0078647, - .975461, - -.00194906, - .154715, - .0122886, - .975464, - -.00280667, - .154715, - .0176959, - .975468, - -.00382025, - .154716, - .0240867, - .975471, - -.00498985, - .154716, - .0314612, - .975472, - -.00631541, - .154717, - .0398199, - .975486, - -.00779719, - .154718, - .0491639, - .975489, - -.00943505, - .154718, - .0594932, - .975509, - -.0112295, - .154721, - .0708113, - .97554, - -.0131802, - .154724, - .0831176, - .975557, - -.0152876, - .154726, - .096415, - .975585, - -.0175512, - .154728, - .110705, - .975605, - -.0199713, - .154729, - .125992, - .975645, - -.0225447, - .154729, - .142272, - .975711, - -.0252649, - .154735, - .159549, - .975788, - -.0280986, - .154736, - .177805, - .975872, - -.0308232, - .154704, - .196911, - .975968, - -.0324841, - .154525, - .216324, - .976063, - -.0351281, - .154432, - .236628, - .976157, - -.0388618, - .15446, - .257539, - .976204, - -.0437704, - .154665, - .278975, - .976358, - -.047514, - .154652, - .302606, - .976571, - -.0508638, - .154535, - .327204, - .976725, - -.0534995, - .154221, - .352276, - .977013, - -.0555547, - .153737, - .377696, - .977294, - -.0586728, - .153403, - .403855, - .977602, - -.0622715, - .15312, - .430333, - .977932, - -.0658166, - .152755, - .456855, - .978241, - -.0689877, - .152233, - .483668, - .978602, - -.0712805, - .15132, - .512097, - .979234, - -.0732775, - .150235, - .540455, - .97977, - -.075163, - .148978, - .568486, - .979995, - -.0778026, - .147755, - .596524, - .98078, - -.0791854, - .146019, - .624825, - .981628, - -.0799666, - .143906, - .653403, - .982067, - -.0808532, - .141561, - .681445, - .98271, - -.0816024, - .139025, - .708918, - .983734, - -.0812511, - .135764, - .736594, - .98431, - -.0806201, - .132152, - .763576, - .985071, - -.0801605, - .12846, - .789797, - .98618, - -.0784208, - .124084, - .815804, - .986886, - -.0766643, - .1193, - .840869, - .987485, - -.0747744, - .114236, - .864952, - .988431, - -.0716701, - .108654, - .888431, - .988886, - -.0691609, - .102994, - .910963, - .990024, - -.0654048, - .0967278, - .932629, - .990401, - -.0619765, - .090384, - .95313, - .991093, - -.0579296, - .0837885, - .972587, - .992018, - -.0536576, - .0770171, - .991184, - .992536, - -.0493719, - .0701486, - 1.00863, - .993421, - -.0444813, - .062953, - 1.02494, - .993928, - -.040008, - .0560455, - 1.04017, - .994994, - -.0347982, - .04856, - 1.05463, - .995866, - -.0301017, - .0416152, - 1.06807, - .996916, - -.0248225, - .0342597, - 1.08039, - .997766, - -.0199229, - .0271668, - 1.09177, - .998479, - -.0147422, - .0201387, - 1.10235, - .99921, - -.00980173, - .0131944, - 1.11206, - .999652, - -.0047426, - .00640712, - 1.12104, - .999998, - 891673e-10, - -10379e-8, - 1.12906, - .967868, - -351885e-11, - .175947, - 193569e-10, - .968001, - -886733e-10, - .175972, - 487782e-9, - .96801, - -354697e-9, - .175973, - .00195115, - .968012, - -798063e-9, - .175974, - .00439006, - .968011, - -.00141879, - .175973, - .00780461, - .968011, - -.00221686, - .175973, - .0121948, - .968016, - -.00319231, - .175974, - .0175607, - .968019, - -.00434515, - .175974, - .0239027, - .968018, - -.00567538, - .175974, - .0312208, - .968033, - -.00718308, - .175977, - .0395158, - .968049, - -.00886836, - .175979, - .0487885, - .968047, - -.0107312, - .175978, - .0590394, - .968072, - -.0127719, - .175981, - .0702705, - .968108, - -.0149905, - .175986, - .0824836, - .968112, - -.0173866, - .175985, - .0956783, - .968173, - -.0199611, - .175993, - .109862, - .96827, - -.0227128, - .176008, - .125033, - .968292, - -.025639, - .17601, - .141193, - .968339, - -.0287299, - .176007, - .158336, - .968389, - -.0319399, - .176001, - .176441, - .968501, - -.034941, - .175962, - .195359, - .968646, - -.0370812, - .175793, - .214686, - .968789, - -.0402329, - .175708, - .234973, - .96886, - -.0442601, - .1757, - .255871, - .969013, - -.049398, - .175876, - .277238, - .969242, - -.0539932, - .17594, - .300326, - .969419, - -.0577299, - .175781, - .324702, - .969763, - -.0605643, - .175432, - .349527, - .970093, - -.0634488, - .174992, - .374976, - .970361, - -.0670589, - .174611, - .401097, - .970825, - -.0708246, - .174226, - .427496, - .971214, - -.0742871, - .173684, - .453858, - .971622, - -.0782608, - .173186, - .480637, - .972175, - -.0813151, - .172288, - .508655, - .972944, - -.0832678, - .170979, - .536973, - .973595, - -.0855964, - .169573, - .565138, - .974345, - -.0882163, - .168152, - .593222, - .975233, - -.0901671, - .166314, - .621201, - .976239, - -.0912111, - .163931, - .649919, - .977289, - -.0916959, - .161106, - .678011, - .978076, - -.0927061, - .158272, - .705717, - .979533, - -.0925562, - .15475, - .733228, - .980335, - -.0918159, - .150638, - .760454, - .981808, - -.0908508, - .146201, - .786918, - .983061, - -.0896172, - .141386, - .812953, - .984148, - -.0871588, - .135837, - .838281, - .985047, - -.0850624, - .130135, - .862594, - .986219, - -.0818541, - .123882, - .88633, - .987043, - -.0784523, - .117126, - .908952, - .988107, - -.0749601, - .110341, - .930744, - .988955, - -.0703548, - .102885, - .951728, - .989426, - -.0662798, - .0954167, - .971166, - .990421, - -.0610834, - .0876331, - .989984, - .991032, - -.0562936, - .0797785, - 1.00765, - .992041, - -.0508154, - .0718166, - 1.02434, - .992794, - -.0454045, - .0637125, - 1.03976, - .993691, - -.0398194, - .0555338, - 1.05418, - .994778, - -.0341482, - .0473388, - 1.06772, - .995915, - -.028428, - .0391016, - 1.08028, - .997109, - -.022642, - .0309953, - 1.09185, - .998095, - -.0168738, - .0230288, - 1.10247, - .998985, - -.0111274, - .0150722, - 1.11229, - .999581, - -.00543881, - .00740605, - 1.12131, - 1.00003, - 162239e-9, - -105549e-9, - 1.12946, - .959505, - -393734e-11, - .196876, - 191893e-10, - .959599, - -992157e-10, - .196895, - 483544e-9, - .959641, - -396868e-9, - .196903, - .0019342, - .959599, - -892948e-9, - .196895, - .00435193, - .959603, - -.00158747, - .196896, - .0077368, - .959604, - -.00248042, - .196896, - .0120888, - .959605, - -.00357184, - .196896, - .0174082, - .959605, - -.00486169, - .196896, - .0236949, - .959613, - -.00635008, - .196897, - .0309497, - .959619, - -.00803696, - .196898, - .0391725, - .959636, - -.00992255, - .196901, - .0483649, - .959634, - -.0120067, - .1969, - .0585266, - .959675, - -.0142898, - .196906, - .0696609, - .959712, - -.0167717, - .196911, - .0817678, - .959752, - -.0194524, - .196918, - .0948494, - .959807, - -.0223321, - .196925, - .10891, - .959828, - -.0254091, - .196924, - .123947, - .959906, - -.0286815, - .196934, - .139968, - .960005, - -.0321371, - .196944, - .156968, - .960071, - -.0357114, - .196936, - .17491, - .960237, - -.0389064, - .196882, - .193597, - .960367, - -.041623, - .196731, - .21285, - .960562, - -.0452655, - .196654, - .233075, - .960735, - -.0496207, - .196643, - .253941, - .960913, - -.0549379, - .196774, - .275278, - .961121, - -.0603414, - .196893, - .297733, - .96139, - -.0644244, - .196717, - .321877, - .961818, - -.067556, - .196314, - .346476, - .962175, - -.0712709, - .195917, - .371907, - .96255, - -.0752848, - .1955, - .397916, - .963164, - -.0792073, - .195026, - .424229, - .963782, - -.0828225, - .194424, - .450637, - .964306, - -.0873119, - .193831, - .477288, - .964923, - -.0911051, - .192973, - .504716, - .966048, - -.093251, - .19151, - .533053, - .967024, - -.0958983, - .190013, - .561366, - .968038, - -.09835, - .188253, - .589464, - .969152, - -.100754, - .186257, - .617433, - .970557, - -.102239, - .183775, - .645801, - .972104, - -.102767, - .180645, - .674278, - .973203, - -.103492, - .177242, - .702004, - .975123, - -.103793, - .17345, - .729529, - .97641, - -.102839, - .168886, - .756712, - .978313, - -.101687, - .163892, - .783801, - .980036, - -.100314, - .158439, - .809671, - .981339, - -.097836, - .152211, - .835402, - .982794, - -.0950006, - .145679, - .860081, - .984123, - -.0920994, - .138949, - .883757, - .984918, - -.0878641, - .131283, - .90685, - .985999, - -.083939, - .123464, - .928786, - .987151, - -.0791234, - .115324, - .94983, - .987827, - -.0739332, - .106854, - .96962, - .988806, - -.0688088, - .0982691, - .98861, - .989588, - -.0628962, - .0893456, - 1.00667, - .990438, - -.0573146, - .0805392, - 1.02344, - .991506, - -.0509433, - .0713725, - 1.03933, - .992492, - -.0448724, - .0623732, - 1.05378, - .993663, - -.0383497, - .0530838, - 1.06747, - .994956, - -.0319593, - .0439512, - 1.08007, - .99634, - -.025401, - .0347803, - 1.09182, - .99761, - -.0189687, - .0257954, - 1.1025, - .99863, - -.0124441, - .0169893, - 1.11247, - .99947, - -.00614003, - .00829498, - 1.12151, - 1.00008, - 216624e-9, - -146107e-9, - 1.12993, - .950129, - -434955e-11, - .217413, - 190081e-10, - .950264, - -10957e-8, - .217444, - 47884e-8, - .9503, - -438299e-9, - .217451, - .00191543, - .950246, - -986124e-9, - .21744, - .00430951, - .950246, - -.00175311, - .21744, - .00766137, - .950245, - -.00273923, - .21744, - .011971, - .950253, - -.00394453, - .217441, - .0172385, - .950258, - -.00536897, - .217442, - .0234641, - .950267, - -.00701262, - .217444, - .030648, - .950277, - -.00887551, - .217446, - .038791, - .950284, - -.0109576, - .217446, - .0478931, - .950312, - -.0132591, - .217451, - .0579568, - .950334, - -.01578, - .217454, - .0689821, - .950378, - -.0185204, - .217462, - .0809714, - .950417, - -.0214803, - .217467, - .0939265, - .950488, - -.0246594, - .217479, - .10785, - .950534, - -.0280565, - .217483, - .122743, - .950633, - -.0316685, - .217498, - .138611, - .950698, - -.0354787, - .217499, - .155442, - .950844, - -.0394003, - .217507, - .173208, - .950999, - -.0426812, - .217419, - .191605, - .951221, - -.0461302, - .217317, - .21084, - .951412, - -.0502131, - .217238, - .230945, - .951623, - -.0549183, - .21722, - .251745, - .951867, - -.0604493, - .217306, - .273001, - .952069, - -.0665189, - .217466, - .294874, - .952459, - -.0709179, - .217266, - .318732, - .952996, - -.0746112, - .216891, - .34318, - .953425, - -.0789252, - .216503, - .36849, - .953885, - -.0833293, - .216042, - .394373, - .954617, - -.087371, - .215469, - .420505, - .955429, - -.0914054, - .214802, - .446907, - .956068, - -.0961671, - .214146, - .473522, - .957094, - -.10048, - .213286, - .50052, - .958372, - -.103248, - .211796, - .528715, - .959654, - -.106033, - .21016, - .557065, - .961305, - -.108384, - .208149, - .585286, - .962785, - -.111122, - .206024, - .613334, - .964848, - -.112981, - .203442, - .641334, - .966498, - -.113717, - .19996, - .669955, - .968678, - -.114121, - .196105, - .698094, - .970489, - -.114524, - .191906, - .725643, - .972903, - -.113792, - .186963, - .752856, - .974701, - -.112406, - .181343, - .780013, - .976718, - -.110685, - .175185, - .806268, - .978905, - -.108468, - .168535, - .832073, - .980267, - -.105061, - .161106, - .857149, - .981967, - -.101675, - .153387, - .881145, - .983063, - -.0974492, - .145199, - .904255, - .984432, - -.0925815, - .136527, - .926686, - .985734, - -.0877983, - .127584, - .947901, - .986228, - -.081884, - .118125, - .968111, - .98719, - -.0761208, - .108594, - .98719, - .988228, - -.0698196, - .0989996, - 1.00559, - .989046, - -.0632739, - .0890074, - 1.02246, - .990242, - -.056522, - .0790832, - 1.03841, - .991252, - -.0495272, - .0689182, - 1.05347, - .992542, - -.0425373, - .0588592, - 1.06724, - .994096, - -.0353198, - .0486833, - 1.08009, - .995593, - -.028235, - .0385977, - 1.09177, - .99711, - -.0209511, - .0286457, - 1.10274, - .998263, - -.0139289, - .0188497, - 1.11262, - .999254, - -.0067359, - .009208, - 1.12191, - .999967, - 141846e-9, - -657764e-10, - 1.13024, - .935608, - -474692e-11, - .236466, - 187817e-10, - .93996, - -11971e-8, - .237568, - 473646e-9, - .939959, - -478845e-9, - .237567, - .0018946, - .939954, - -.0010774, - .237566, - .00426284, - .939956, - -.00191538, - .237566, - .00757842, - .939954, - -.00299277, - .237566, - .0118413, - .93996, - -.00430961, - .237567, - .0170518, - .939969, - -.00586589, - .237569, - .02321, - .939982, - -.00766166, - .237572, - .0303164, - .939987, - -.00969686, - .237572, - .0383711, - .939997, - -.0119715, - .237574, - .0473751, - .940031, - -.0144858, - .237581, - .0573298, - .940073, - -.0172399, - .237589, - .0682366, - .94012, - -.0202335, - .237598, - .080097, - .940162, - -.0234663, - .237604, - .0929116, - .940237, - -.0269387, - .237615, - .106686, - .940328, - -.0306489, - .237632, - .121421, - .940419, - -.0345917, - .237645, - .137115, - .940522, - -.0387481, - .237654, - .153766, - .940702, - -.0429906, - .237661, - .17133, - .940871, - -.0465089, - .237561, - .189502, - .941103, - -.050531, - .23748, - .208616, - .941369, - -.0550657, - .237423, - .228595, - .941641, - -.0601337, - .237399, - .249287, - .941903, - -.0658804, - .237443, - .270467, - .942224, - -.0722674, - .237597, - .292024, - .942633, - -.0771788, - .237419, - .315272, - .943172, - -.0815623, - .237068, - .339579, - .943691, - -.0863973, - .236682, - .364717, - .944382, - -.0911536, - .236213, - .390435, - .945392, - -.0952967, - .235562, - .416425, - .946185, - -.0998948, - .234832, - .442772, - .947212, - -.104796, - .234114, - .469347, - .948778, - -.10928, - .233222, - .496162, - .950149, - -.113081, - .231845, - .523978, - .951989, - -.115893, - .230005, - .552295, - .953921, - -.11846, - .227862, - .580569, - .955624, - -.12115, - .225439, - .608698, - .958234, - -.123373, - .222635, - .636696, - .960593, - -.124519, - .219093, - .665208, - .963201, - -.124736, - .214749, - .693557, - .965642, - -.125012, - .210059, - .721334, - .968765, - -.124661, - .204935, - .748613, - .971753, - -.122996, - .198661, - .776224, - .973751, - -.120998, - .191823, - .802461, - .976709, - -.118583, - .184359, - .828399, - .977956, - -.115102, - .176437, - .853693, - .979672, - -.111077, - .167681, - .877962, - .981816, - -.10688, - .158872, - .901564, - .98238, - -.101469, - .149398, - .924057, - .983964, - -.0960013, - .139436, - .945751, - .984933, - -.0899626, - .12943, - .966272, - .985694, - -.0832973, - .11894, - .985741, - .986822, - -.0767082, - .108349, - 1.00407, - .987725, - -.0693614, - .0976026, - 1.02154, - .98877, - -.06211, - .086652, - 1.03757, - .990129, - -.0544143, - .0756182, - 1.05296, - .991337, - -.046744, - .0645753, - 1.06683, - .992978, - -.0387931, - .0534683, - 1.0798, - .994676, - -.030973, - .0424137, - 1.09181, - .99645, - -.0230311, - .0314035, - 1.10286, - .997967, - -.0152065, - .0206869, - 1.11291, - .99922, - -.00744837, - .010155, - 1.12237, - 1.00002, - 240209e-9, - -752767e-10, - 1.13089, - .922948, - -515351e-11, - .255626, - 186069e-10, - .928785, - -129623e-9, - .257244, - 468009e-9, - .928761, - -51849e-8, - .257237, - .00187202, - .928751, - -.0011666, - .257235, - .00421204, - .928751, - -.00207395, - .257234, - .0074881, - .928754, - -.00324055, - .257235, - .0117002, - .92876, - -.00466639, - .257236, - .0168486, - .928763, - -.00635149, - .257237, - .0229334, - .928774, - -.00829584, - .257239, - .029955, - .928791, - -.0104995, - .257243, - .0379139, - .928804, - -.0129623, - .257245, - .0468108, - .928847, - -.0156846, - .257255, - .0566473, - .92889, - -.0186661, - .257263, - .0674246, - .928924, - -.0219067, - .257268, - .0791433, - .928989, - -.0254066, - .257282, - .0918076, - .92909, - -.0291651, - .257301, - .105419, - .92918, - -.0331801, - .257316, - .119978, - .92929, - -.0374469, - .257332, - .135491, - .929453, - -.041939, - .257357, - .151948, - .929586, - -.0464612, - .257347, - .169275, - .929858, - -.0503426, - .257269, - .187257, - .930125, - -.0548409, - .257199, - .206204, - .930403, - -.0598063, - .257149, - .22601, - .930726, - -.0652437, - .257122, - .246561, - .931098, - -.0712376, - .257153, - .267618, - .931396, - -.0777506, - .257237, - .288993, - .931947, - -.0832374, - .257124, - .311527, - .932579, - -.0883955, - .25683, - .335697, - .933194, - -.0937037, - .256444, - .360634, - .934013, - -.0987292, - .255939, - .386126, - .935307, - -.103215, - .255282, - .412018, - .936374, - -.108234, - .254538, - .438292, - .93776, - -.113234, - .253728, - .464805, - .939599, - -.118013, - .25275, - .491464, - .941036, - -.122661, - .251404, - .518751, - .94337, - -.125477, - .249435, - .547133, - .945318, - -.128374, - .247113, - .575456, - .947995, - -.130996, - .244441, - .60372, - .950818, - -.133438, - .241352, - .63174, - .954378, - -.135004, - .237849, - .659971, - .957151, - -.135313, - .233188, - .688478, - .960743, - -.13521, - .228001, - .716767, - .964352, - -.135007, - .222249, - .744349, - .967273, - -.133523, - .21542, - .771786, - .969767, - -.131155, - .208039, - .798639, - .973195, - -.128492, - .200076, - .824774, - .975557, - -.125094, - .191451, - .850222, - .977692, - -.120578, - .18184, - .874761, - .98026, - -.115882, - .172102, - .898497, - .981394, - -.110372, - .161859, - .921636, - .982386, - -.10415, - .15108, - .943467, - .983783, - -.0978128, - .140407, - .964045, - .98422, - -.0906171, - .129058, - .98398, - .985447, - -.0832921, - .117614, - 1.00276, - .986682, - -.0754412, - .10585, - 1.02047, - .987326, - -.0673885, - .0940943, - 1.03678, - .988707, - -.0592565, - .0822093, - 1.05218, - .990185, - -.050717, - .070192, - 1.06652, - .991866, - -.0423486, - .0582081, - 1.07965, - .993897, - -.0336118, - .0460985, - 1.09188, - .995841, - -.0252178, - .0342737, - 1.10307, - .997605, - -.0164893, - .0224829, - 1.11324, - .999037, - -.00817112, - .0110647, - 1.12262, - 1.00003, - 291686e-9, - -168673e-9, - 1.13139, - .915304, - -552675e-11, - .275999, - 183285e-10, - .91668, - -139285e-9, - .276414, - 461914e-9, - .916664, - -55713e-8, - .276409, - .00184763, - .916653, - -.00125354, - .276406, - .00415715, - .916651, - -.00222851, - .276405, - .00739053, - .916655, - -.00348205, - .276406, - .0115478, - .916653, - -.00501414, - .276405, - .0166291, - .916667, - -.00682478, - .276409, - .0226346, - .91668, - -.00891398, - .276412, - .0295648, - .91669, - -.0112817, - .276413, - .0374199, - .916727, - -.013928, - .276422, - .0462016, - .916759, - -.0168528, - .276429, - .0559101, - .916793, - -.0200558, - .276436, - .0665466, - .916849, - -.0235373, - .276448, - .0781139, - .916964, - -.0272973, - .276474, - .0906156, - .917047, - -.0313344, - .276491, - .104051, - .917152, - -.0356465, - .276511, - .118424, - .917286, - -.0402271, - .276533, - .133736, - .917469, - -.0450408, - .276564, - .149978, - .917686, - -.0497872, - .276563, - .167057, - .917953, - -.0540937, - .276493, - .184846, - .918228, - -.0590709, - .276437, - .203614, - .918572, - -.0644277, - .276398, - .223212, - .918918, - -.0702326, - .276362, - .243584, - .919356, - -.076484, - .276383, - .264465, - .919842, - -.0830808, - .276434, - .285701, - .920451, - -.0892972, - .276407, - .307559, - .921113, - -.095016, - .276128, - .331501, - .921881, - -.100771, - .275754, - .356207, - .923027, - -.106029, - .275254, - .381477, - .924364, - -.111029, - .274595, - .40722, - .925818, - -.116345, - .273841, - .433385, - .92746, - -.121424, - .272913, - .459848, - .929167, - -.12657, - .271837, - .486493, - .931426, - -.131581, - .270575, - .513432, - .934001, - -.135038, - .268512, - .541502, - .936296, - -.138039, - .266135, - .569658, - .939985, - -.140687, - .263271, - .598375, - .943516, - -.143247, - .260058, - .626563, - .94782, - -.145135, - .256138, - .654711, - .951023, - -.145733, - .251154, - .683285, - .955338, - -.145554, - .245562, - .711831, - .959629, - -.145008, - .239265, - .739573, - .963123, - -.144003, - .232064, - .767027, - .966742, - -.141289, - .224036, - .794359, - .969991, - -.138247, - .215305, - .820361, - .973403, - -.134786, - .206051, - .846548, - .975317, - -.129966, - .195914, - .871541, - .977647, - -.12471, - .185184, - .895313, - .980137, - -.119086, - .174161, - .918398, - .981031, - -.112297, - .162792, - .940679, - .982037, - -.105372, - .150952, - .961991, - .983164, - -.097821, - .138921, - .981913, - .983757, - -.0897245, - .126611, - 1.00109, - .985036, - -.0815974, - .114228, - 1.01902, - .986289, - -.0727725, - .101389, - 1.03604, - .987329, - -.0639323, - .0886476, - 1.05149, - .989193, - -.0548109, - .0756837, - 1.06619, - .990716, - -.045687, - .0627581, - 1.07948, - .992769, - -.0364315, - .0498337, - 1.09172, - .99524, - -.0271761, - .0370305, - 1.1033, - .997154, - -.0179609, - .0243959, - 1.11353, - .998845, - -.00878063, - .0119567, - 1.12319, - 1.00002, - 259038e-9, - -108146e-9, - 1.13177, - .903945, - -591681e-11, - .295126, - 181226e-10, - .903668, - -148672e-9, - .295037, - 455367e-9, - .903677, - -594683e-9, - .29504, - .00182145, - .903673, - -.00133805, - .295039, - .00409831, - .903666, - -.00237872, - .295036, - .00728584, - .903668, - -.00371676, - .295037, - .0113842, - .903679, - -.00535212, - .29504, - .0163936, - .903684, - -.00728479, - .295041, - .0223141, - .903698, - -.00951473, - .295044, - .0291462, - .903718, - -.0120419, - .295049, - .0368904, - .903754, - -.0148664, - .295058, - .0455477, - .903801, - -.017988, - .29507, - .0551194, - .903851, - -.0214064, - .295082, - .0656058, - .903921, - -.0251219, - .295097, - .0770109, - .904002, - -.0291337, - .295116, - .0893354, - .904111, - -.033441, - .29514, - .102583, - .904246, - -.0380415, - .295169, - .116755, - .904408, - -.0429258, - .295202, - .131853, - .904637, - -.0480468, - .295245, - .147869, - .904821, - -.0529208, - .295214, - .164658, - .905163, - -.0577748, - .295185, - .182274, - .905469, - -.0631763, - .295143, - .200828, - .905851, - -.068917, - .295112, - .2202, - .906322, - -.0750861, - .295104, - .240372, - .906761, - -.0815855, - .295086, - .261082, - .90735, - -.0882138, - .295095, - .282123, - .908087, - -.095082, - .295139, - .303563, - .908826, - -.101488, - .29492, - .327028, - .909832, - -.107577, - .294577, - .351464, - .911393, - -.113033, - .294115, - .376497, - .912804, - -.118629, - .293446, - .402115, - .914081, - -.124232, - .292581, - .428111, - .91637, - -.129399, - .29166, - .454442, - .91814, - -.134892, - .290422, - .481024, - .921179, - -.140069, - .289194, - .507924, - .924544, - -.144431, - .287421, - .535557, - .927995, - -.147498, - .284867, - .563984, - .931556, - -.150197, - .281722, - .5923, - .935777, - -.152711, - .278207, - .620832, - .940869, - -.154836, - .274148, - .649069, - .945994, - -.155912, - .269057, - .677746, - .949634, - -.155641, - .262799, - .706293, - .955032, - -.154809, - .256097, - .734278, - .95917, - -.153678, - .248618, - .761751, - .962931, - -.151253, - .239794, - .789032, - .966045, - -.147625, - .230281, - .815422, - .96971, - -.143964, - .220382, - .841787, - .972747, - -.139464, - .209846, - .867446, - .975545, - -.133459, - .198189, - .892004, - .978381, - -.127424, - .186362, - .915458, - .979935, - -.120506, - .173964, - .937948, - .980948, - -.11282, - .161429, - .959732, - .982234, - -.104941, - .148557, - .980118, - .982767, - -.0962905, - .135508, - .999463, - .983544, - -.0873625, - .122338, - 1.01756, - .984965, - -.0783447, - .108669, - 1.03492, - .986233, - -.0684798, - .0949911, - 1.05087, - .987796, - -.0590867, - .0811386, - 1.0656, - .989885, - -.0489145, - .0673099, - 1.0794, - .991821, - -.0391, - .0535665, - 1.09174, - .99448, - -.029087, - .0397529, - 1.10341, - .996769, - -.019114, - .0261463, - 1.11383, - .998641, - -.00947007, - .0128731, - 1.1237, - .999978, - 446316e-9, - -169093e-9, - 1.13253, - .888362, - -627064e-11, - .312578, - 178215e-10, - .889988, - -157791e-9, - .313148, - 448451e-9, - .889825, - -631076e-9, - .313092, - .00179356, - .88984, - -.00141994, - .313097, - .00403554, - .889828, - -.0025243, - .313092, - .00717429, - .889831, - -.00394421, - .313093, - .0112099, - .889831, - -.00567962, - .313093, - .0161425, - .889844, - -.00773051, - .313096, - .0219724, - .889858, - -.0100968, - .3131, - .0286999, - .889882, - -.0127786, - .313106, - .0363256, - .889918, - -.0157757, - .313116, - .0448509, - .889967, - -.0190878, - .313129, - .0542758, - .89003, - -.022715, - .313145, - .0646032, - .890108, - -.0266566, - .313165, - .0758339, - .890218, - -.0309131, - .313193, - .0879729, - .890351, - -.0354819, - .313226, - .101019, - .89051, - -.0403613, - .313263, - .114979, - .890672, - -.0455385, - .313294, - .129848, - .890882, - -.0509444, - .313333, - .145616, - .891189, - -.0559657, - .313324, - .162122, - .891457, - -.0613123, - .313281, - .179524, - .891856, - -.0671488, - .313281, - .197855, - .892312, - -.0732732, - .313268, - .216991, - .892819, - -.0797865, - .313263, - .236924, - .893369, - -.0865269, - .313247, - .257433, - .894045, - -.0931592, - .313205, - .278215, - .894884, - -.100532, - .313276, - .299467, - .895832, - -.107716, - .313205, - .322276, - .897043, - -.114099, - .312873, - .34642, - .898515, - -.119941, - .312331, - .371187, - .900191, - -.126044, - .311731, - .396656, - .90188, - -.131808, - .310859, - .422488, - .904359, - -.137289, - .309857, - .448744, - .906923, - -.142991, - .308714, - .475239, - .910634, - -.148253, - .307465, - .501983, - .914502, - -.153332, - .305774, - .529254, - .919046, - -.156646, - .303156, - .557709, - .923194, - -.159612, - .299928, - .586267, - .928858, - -.162027, - .296245, - .614925, - .934464, - -.164203, - .291832, - .643187, - .939824, - -.165602, - .286565, - .671601, - .944582, - -.165383, - .280073, - .700213, - .949257, - -.164439, - .272891, - .728432, - .954389, - -.162953, - .264771, - .756082, - .958595, - -.161007, - .255927, - .78369, - .962138, - -.157243, - .245769, - .810769, - .966979, - -.152872, - .235127, - .836999, - .969566, - -.148209, - .22347, - .862684, - .972372, - -.142211, - .211147, - .887847, - .975916, - -.135458, - .198606, - .911843, - .978026, - -.128398, - .185498, - .934795, - .979686, - -.120313, - .17171, - .956787, - .980748, - -.11166, - .158159, - .978046, - .981622, - -.103035, - .144399, - .997693, - .982356, - -.0930328, - .13001, - 1.01642, - .983308, - -.0834627, - .115778, - 1.03366, - .985037, - -.0732249, - .101327, - 1.05014, - .986493, - -.0628145, - .086554, - 1.06507, - .988484, - -.0526556, - .0720413, - 1.07907, - .991051, - -.0415744, - .0571151, - 1.09189, - .993523, - -.0314275, - .0426643, - 1.10369, - .99628, - -.0203603, - .0279325, - 1.11423, - .998344, - -.0102446, - .0138182, - 1.12421, - .999997, - 42612e-8, - -193628e-9, - 1.1333, - .871555, - -660007e-11, - .329176, - 174749e-10, - .875255, - -166579e-9, - .330571, - 441051e-9, - .875644, - -666394e-9, - .330718, - .00176441, - .875159, - -.00149903, - .330536, - .00396899, - .87516, - -.00266493, - .330536, - .007056, - .875158, - -.00416393, - .330535, - .0110251, - .87516, - -.00599598, - .330535, - .0158764, - .875163, - -.00816108, - .330536, - .0216101, - .875174, - -.0106591, - .330538, - .0282266, - .875199, - -.0134899, - .330545, - .0357266, - .875257, - -.0166538, - .330563, - .0441117, - .875304, - -.0201501, - .330575, - .0533821, - .875373, - -.0239785, - .330595, - .0635395, - .875464, - -.0281389, - .330619, - .0745872, - .875565, - -.0326301, - .330645, - .0865255, - .875691, - -.0374516, - .330676, - .0993599, - .875897, - -.0425993, - .330733, - .113093, - .876091, - -.0480576, - .330776, - .127722, - .876353, - -.0537216, - .330826, - .143227, - .876649, - -.0589807, - .330809, - .159462, - .877034, - -.0647865, - .330819, - .176642, - .877443, - -.0709789, - .330817, - .194702, - .877956, - -.0774782, - .330832, - .213577, - .878499, - -.0843175, - .330822, - .233246, - .879144, - -.0912714, - .330804, - .253512, - .879982, - -.0980824, - .330766, - .274137, - .88097, - -.105823, - .330864, - .295209, - .882051, - -.113671, - .330896, - .317226, - .883397, - -.120303, - .330545, - .341068, - .884987, - -.12667, - .330068, - .365613, - .886789, - -.133118, - .329418, - .390807, - .889311, - -.139024, - .328683, - .416494, - .891995, - -.144971, - .327729, - .442618, - .895106, - -.150747, - .326521, - .469131, - .899527, - -.156283, - .325229, - .495921, - .90504, - -.161707, - .32378, - .523162, - .909875, - -.165661, - .32122, - .55092, - .91561, - -.168755, - .317942, - .579928, - .921225, - -.171193, - .313983, - .608539, - .927308, - -.17319, - .309636, - .636854, - .933077, - -.174819, - .304262, - .66523, - .938766, - -.175002, - .297563, - .693609, - .943667, - -.173946, - .289613, - .722157, - .949033, - -.172221, - .281227, - .750021, - .953765, - -.169869, - .271545, - .777466, - .95804, - -.166578, - .261034, - .804853, - .962302, - -.161761, - .249434, - .831569, - .966544, - -.156636, - .237484, - .857779, - .969372, - -.150784, - .224395, - .883051, - .972486, - -.143672, - .210786, - .907864, - .975853, - -.135772, - .196556, - .931223, - .977975, - -.127942, - .182307, - .954061, - .979122, - -.118347, - .167607, - .97531, - .980719, - -.109112, - .152739, - .995666, - .981223, - -.0991789, - .137932, - 1.01475, - .98216, - -.0883553, - .122692, - 1.03253, - .983379, - -.0780825, - .107493, - 1.04917, - .985434, - -.0665646, - .0917791, - 1.06464, - .987332, - -.0557714, - .0764949, - 1.07896, - .990004, - -.0442805, - .060721, - 1.09199, - .992975, - -.0331676, - .0452284, - 1.10393, - .995811, - -.0219547, - .0297934, - 1.11476, - .9982, - -.0107613, - .0146415, - 1.12484, - 1.00002, - 248678e-9, - -14555e-8, - 1.13413, - .859519, - -693595e-11, - .347264, - 171673e-10, - .859843, - -17503e-8, - .347394, - 433219e-9, - .859656, - -700076e-9, - .347319, - .00173277, - .859671, - -.00157517, - .347325, - .00389875, - .859669, - -.00280028, - .347324, - .00693112, - .85967, - -.0043754, - .347324, - .01083, - .859665, - -.00630049, - .347321, - .0155954, - .859685, - -.0085755, - .347328, - .0212278, - .859694, - -.0112003, - .347329, - .0277273, - .859718, - -.0141747, - .347336, - .0350946, - .85976, - -.0174988, - .347348, - .0433314, - .85982, - -.0211722, - .347366, - .0524384, - .859892, - -.0251941, - .347387, - .0624168, - .860006, - -.0295649, - .347422, - .0732708, - .860122, - -.0342825, - .347453, - .0849999, - .860282, - -.0393462, - .347499, - .0976102, - .860482, - -.0447513, - .347554, - .111104, - .860719, - -.0504775, - .347614, - .125479, - .860998, - -.0563577, - .347666, - .140703, - .861322, - -.0619473, - .347662, - .156681, - .861724, - -.0681277, - .347684, - .173597, - .862198, - -.0746567, - .347709, - .191371, - .862733, - -.0815234, - .347727, - .209976, - .863371, - -.0886643, - .347744, - .229351, - .86414, - -.0957908, - .347734, - .24934, - .865138, - -.102912, - .34772, - .269797, - .866182, - -.110924, - .3478, - .290654, - .867436, - -.119223, - .347911, - .312074, - .869087, - -.126197, - .347649, - .335438, - .870859, - -.133145, - .347222, - .359732, - .872997, - -.139869, - .346645, - .38467, - .875939, - -.146089, - .345935, - .41019, - .879012, - -.152334, - .345012, - .436218, - .883353, - -.15821, - .343924, - .462641, - .888362, - -.164097, - .342636, - .489449, - .895026, - -.169528, - .341351, - .516629, - .900753, - -.174408, - .339115, - .544109, - .906814, - -.17751, - .335809, - .572857, - .912855, - -.180101, - .331597, - .601554, - .919438, - -.182116, - .32698, - .630198, - .925962, - -.183494, - .321449, - .658404, - .931734, - -.184159, - .314595, - .686625, - .93762, - -.18304, - .306462, - .71531, - .943858, - -.181323, - .297514, - .744272, - .948662, - -.178683, - .287447, - .771462, - .953299, - -.175379, - .276166, - .798593, - .957346, - -.170395, - .263758, - .8256, - .962565, - -.165042, - .251019, - .852575, - .966075, - -.158655, - .237011, - .878316, - .969048, - -.151707, - .222518, - .90329, - .972423, - -.143271, - .207848, - .927745, - .975833, - -.134824, - .192463, - .950859, - .977629, - -.125444, - .1768, - .972947, - .978995, - -.114949, - .161033, - .993263, - .980533, - -.104936, - .145523, - 1.01337, - .980745, - -.0935577, - .129799, - 1.03128, - .981814, - -.0822956, - .113486, - 1.04825, - .983943, - -.0710082, - .0972925, - 1.06405, - .986141, - -.0587931, - .0808138, - 1.0785, - .988878, - -.0472755, - .0644915, - 1.09204, - .992132, - -.0349128, - .0478128, - 1.10413, - .9953, - -.0232407, - .031621, - 1.11527, - .998117, - -.0112713, - .0154935, - 1.12551, - 1.00003, - 339743e-9, - -195763e-9, - 1.13504, - .845441, - -729126e-11, - .364305, - 169208e-10, - .843588, - -183164e-9, - .363506, - 425067e-9, - .843412, - -73253e-8, - .36343, - .00169999, - .843401, - -.00164818, - .363426, - .00382495, - .843399, - -.00293008, - .363425, - .00679993, - .843401, - -.00457822, - .363425, - .010625, - .843394, - -.00659249, - .363421, - .0153002, - .843398, - -.00897282, - .363421, - .0208258, - .843415, - -.0117191, - .363426, - .0272024, - .843438, - -.0148312, - .363432, - .0344305, - .843483, - -.018309, - .363447, - .0425116, - .84356, - -.0221521, - .363472, - .0514471, - .843646, - -.0263597, - .363499, - .061238, - .843743, - -.0309315, - .363527, - .0718873, - .84388, - -.0358658, - .363569, - .0833969, - .844079, - -.0411624, - .363631, - .0957742, - .844279, - -.0468128, - .363688, - .109015, - .844549, - -.0527923, - .363761, - .123124, - .844858, - -.0588204, - .363817, - .138044, - .84522, - -.0647573, - .36383, - .153755, - .845669, - -.0713181, - .363879, - .170394, - .846155, - -.0781697, - .363908, - .187861, - .846789, - -.0853913, - .363969, - .206176, - .847502, - -.0928086, - .363999, - .225244, - .8484, - -.10005, - .363997, - .244926, - .849461, - -.107615, - .364008, - .265188, - .850562, - -.115814, - .364055, - .28587, - .851962, - -.124334, - .364179, - .306926, - .854326, - -.131995, - .364233, - .329605, - .856295, - -.139338, - .363856, - .35359, - .858857, - -.146346, - .363347, - .37831, - .862428, - -.152994, - .362807, - .403722, - .866203, - -.159463, - .361963, - .429537, - .871629, - -.165623, - .36112, - .456, - .877365, - -.171649, - .359917, - .482773, - .883744, - -.177151, - .35848, - .509705, - .890693, - -.182381, - .356523, - .537215, - .897278, - -.186076, - .3533, - .565493, - .903958, - -.188602, - .349095, - .594293, - .910908, - -.190755, - .344215, - .623165, - .918117, - -.192063, - .338606, - .651573, - .924644, - -.192758, - .331544, - .679869, - .931054, - -.192238, - .323163, - .708668, - .937303, - -.190035, - .313529, - .737201, - .943387, - -.187162, - .303152, - .764977, - .948494, - -.183876, - .29146, - .792683, - .952546, - -.178901, - .277917, - .819228, - .958077, - -.173173, - .264753, - .846559, - .962462, - -.16645, - .25002, - .872962, - .966569, - -.159452, - .234873, - .898729, - .969108, - -.15074, - .218752, - .923126, - .973072, - -.141523, - .202673, - .947278, - .975452, - -.132075, - .186326, - .969938, - .977784, - -.121257, - .169396, - .991325, - .97899, - -.110182, - .153044, - 1.01123, - .979777, - -.0989634, - .136485, - 1.0299, - .980865, - -.0865894, - .119343, - 1.04727, - .982432, - -.0746115, - .102452, - 1.06341, - .984935, - -.0621822, - .0852423, - 1.07834, - .987776, - -.0495694, - .0678546, - 1.092, - .99103, - -.0372386, - .0506917, - 1.1043, - .99474, - -.0244353, - .0333316, - 1.11576, - .997768, - -.0121448, - .0164348, - 1.12617, - 1.00003, - 31774e-8, - -169504e-9, - 1.13598, - .825551, - -756799e-11, - .378425, - 165099e-10, - .82664, - -190922e-9, - .378923, - 416504e-9, - .826323, - -763495e-9, - .378779, - .0016656, - .826359, - -.00171789, - .378795, - .00374768, - .82636, - -.00305402, - .378795, - .00666259, - .826368, - -.00477185, - .378798, - .0104104, - .826364, - -.00687131, - .378795, - .0149912, - .826368, - -.00935232, - .378795, - .0204054, - .826376, - -.0122146, - .378797, - .0266532, - .826399, - -.0154581, - .378803, - .0337355, - .82646, - -.0190825, - .378824, - .0416537, - .826525, - -.0230873, - .378846, - .0504091, - .826614, - -.0274719, - .378876, - .0600032, - .82674, - -.0322355, - .378917, - .0704393, - .826888, - -.0373766, - .378964, - .0817195, - .827078, - -.0428936, - .379024, - .0938492, - .827318, - -.0487778, - .379099, - .106828, - .82764, - -.0549935, - .379199, - .120659, - .827926, - -.0611058, - .379227, - .13526, - .828325, - -.0675054, - .379275, - .150713, - .828801, - -.0743455, - .379332, - .167034, - .8294, - -.0815523, - .379415, - .184209, - .830094, - -.0890779, - .379495, - .202203, - .8309, - -.096736, - .379555, - .220945, - .831943, - -.104135, - .379577, - .240306, - .833037, - -.112106, - .379604, - .260317, - .834278, - -.120554, - .379668, - .2808, - .836192, - -.129128, - .3799, - .301654, - .838671, - -.137541, - .380109, - .323502, - .840939, - -.14523, - .379809, - .347176, - .844575, - -.15248, - .379593, - .371706, - .848379, - -.159607, - .37909, - .39688, - .853616, - -.166267, - .378617, - .422702, - .858921, - -.172698, - .377746, - .448919, - .865324, - -.178823, - .376749, - .475661, - .872207, - -.184542, - .375363, - .502599, - .880018, - -.189836, - .373657, - .529914, - .88694, - -.194294, - .370673, - .557683, - .894779, - -.197022, - .36662, - .586848, - .902242, - -.199108, - .36138, - .615831, - .909914, - -.200398, - .355434, - .644478, - .917088, - -.20094, - .348173, - .672905, - .923888, - -.200671, - .339482, - .701327, - .930495, - -.198773, - .32956, - .730101, - .937247, - -.195394, - .318363, - .758383, - .943108, - -.191956, - .306323, - .786539, - .948296, - -.187227, - .292576, - .813637, - .953472, - -.181165, - .278234, - .840793, - .958485, - -.174119, - .263054, - .867712, - .962714, - -.166564, - .246756, - .893635, - .966185, - -.158181, - .229945, - .919028, - .970146, - -.148275, - .212633, - .943413, - .973491, - -.138157, - .195229, - .966627, - .975741, - -.127574, - .178048, - .988817, - .977238, - -.11554, - .160312, - 1.00924, - .978411, - -.10364, - .142857, - 1.02845, - .979811, - -.0913122, - .125317, - 1.04648, - .98116, - -.0782558, - .107627, - 1.06284, - .983543, - -.0655957, - .0895862, - 1.07798, - .986789, - -.0520411, - .0713756, - 1.092, - .990292, - -.0389727, - .053228, - 1.10484, - .994187, - -.025808, - .0351945, - 1.11642, - .997499, - -.0126071, - .0173198, - 1.12703, - .999999, - 275604e-9, - -148602e-9, - 1.13674, - .81075, - -78735e-10, - .394456, - 161829e-10, - .808692, - -198293e-9, - .393453, - 407564e-9, - .80846, - -792877e-9, - .39334, - .00162965, - .808595, - -.00178416, - .393407, - .00366711, - .808597, - -.00317182, - .393408, - .00651934, - .808598, - -.00495589, - .393408, - .0101866, - .808591, - -.00713627, - .393403, - .0146689, - .808592, - -.00971285, - .393402, - .0199667, - .80861, - -.0126855, - .393407, - .0260803, - .808633, - -.0160538, - .393413, - .0330107, - .80868, - -.0198175, - .393429, - .0407589, - .808748, - -.0239758, - .393453, - .0493264, - .808854, - -.0285286, - .39349, - .0587161, - .808992, - -.0334748, - .39354, - .0689304, - .809141, - -.0388116, - .393588, - .0799707, - .809352, - -.0445375, - .39366, - .0918432, - .809608, - -.0506427, - .393742, - .104549, - .809915, - -.0570708, - .393834, - .118085, - .810253, - -.0633526, - .393885, - .132377, - .810687, - -.0700966, - .393953, - .147537, - .811233, - -.0772274, - .394047, - .163543, - .811865, - -.0847629, - .394148, - .180394, - .812648, - -.0925663, - .394265, - .198051, - .813583, - -.100416, - .394363, - .216443, - .814683, - -.108119, - .394402, - .235502, - .815948, - -.11644, - .394489, - .255242, - .817278, - -.125036, - .394542, - .275441, - .819605, - -.133655, - .39486, - .296094, - .822256, - -.142682, - .395248, - .317309, - .825349, - -.150756, - .395241, - .340516, - .829605, - -.158392, - .395285, - .364819, - .83391, - -.165801, - .394922, - .389736, - .839808, - -.172677, - .394691, - .415409, - .845708, - -.179448, - .394006, - .441546, - .853025, - -.185746, - .393279, - .46832, - .859666, - -.191684, - .391655, - .495302, - .86789, - -.197146, - .390068, - .52262, - .875845, - -.201904, - .38727, - .550336, - .882634, - -.205023, - .382688, - .578825, - .891076, - -.207098, - .377543, - .608103, - .900589, - -.208474, - .371752, - .63723, - .90791, - -.209068, - .364016, - .665769, - .915971, - -.208655, - .355593, - .694428, - .923455, - -.20729, - .345439, - .723224, - .931514, - -.203821, - .334099, - .751925, - .937885, - -.19986, - .321069, - .780249, - .943136, - -.194993, - .306571, - .8077, - .948818, - -.189132, - .291556, - .83497, - .954433, - -.181617, - .275745, - .86188, - .959078, - -.173595, - .258695, - .888562, - .962705, - -.164855, - .240825, - .914008, - .966753, - -.155129, - .22268, - .939145, - .970704, - -.144241, - .204542, - .963393, - .973367, - -.133188, - .185927, - .985983, - .975984, - -.121146, - .167743, - 1.00704, - .976994, - -.108366, - .149218, - 1.02715, - .978485, - -.0956746, - .13131, - 1.0455, - .980074, - -.0820733, - .112513, - 1.06221, - .98225, - -.0684061, - .0938323, - 1.07782, - .98553, - -.0549503, - .0749508, - 1.09199, - .989529, - -.0407857, - .055848, - 1.10508, - .993536, - -.0271978, - .0368581, - 1.11684, - .997247, - -.0132716, - .0181845, - 1.12789, - 1, - 431817e-9, - -198809e-9, - 1.13792, - .785886, - -812608e-11, - .405036, - 157669e-10, - .790388, - -205278e-9, - .407355, - 398297e-9, - .790145, - -820824e-9, - .407231, - .00159263, - .790135, - -.00184681, - .407226, - .00358336, - .790119, - -.00328316, - .407218, - .00637039, - .790126, - -.00512988, - .40722, - .0099539, - .79013, - -.00738684, - .407221, - .0143339, - .790135, - -.0100538, - .407221, - .0195107, - .790134, - -.0131306, - .407217, - .0254848, - .79016, - -.0166169, - .407224, - .0322572, - .790197, - -.020512, - .407236, - .0398284, - .790273, - -.0248157, - .407263, - .0482014, - .790381, - -.029527, - .407304, - .0573777, - .790521, - -.0346446, - .407355, - .0673602, - .790704, - -.0401665, - .40742, - .0781522, - .790925, - -.0460896, - .407499, - .0897582, - .791195, - -.0524017, - .407589, - .10218, - .791522, - -.0590121, - .407691, - .11541, - .791878, - -.0654876, - .407748, - .12939, - .792361, - -.0725207, - .407849, - .144237, - .792942, - -.0799844, - .407963, - .159924, - .79362, - -.0877896, - .408087, - .176425, - .794529, - -.0958451, - .408259, - .193733, - .795521, - -.103827, - .408362, - .211756, - .796778, - -.111937, - .408482, - .230524, - .798027, - -.120521, - .408547, - .249967, - .799813, - -.129242, - .408721, - .269926, - .802387, - -.138048, - .409148, - .290338, - .805279, - -.147301, - .409641, - .311193, - .809251, - -.155895, - .410154, - .333611, - .813733, - -.163942, - .410297, - .357615, - .819081, - -.171666, - .410373, - .382339, - .825427, - -.178905, - .410348, - .407828, - .83172, - -.185812, - .409486, - .434034, - .83877, - -.192318, - .408776, - .460493, - .845817, - -.198249, - .407176, - .487346, - .854664, - -.204034, - .405719, - .514832, - .863495, - -.208908, - .403282, - .542401, - .871883, - -.212765, - .399293, - .570683, - .88065, - -.214911, - .393803, - .599947, - .89004, - -.216214, - .387536, - .62932, - .898476, - -.216745, - .379846, - .658319, - .906738, - -.216387, - .370625, - .687138, - .914844, - -.215053, - .360139, - .71601, - .923877, - -.212007, - .348849, - .745124, - .931925, - -.207481, - .335639, - .773366, - .938054, - -.202418, - .320798, - .801636, - .943895, - -.196507, - .304772, - .829055, - .949468, - -.189009, - .288033, - .856097, - .955152, - -.180539, - .270532, - .88301, - .959403, - -.171437, - .251639, - .909296, - .963309, - -.161661, - .232563, - .934868, - .967399, - -.150425, - .213231, - .959662, - .972009, - -.138659, - .194247, - .98302, - .97433, - -.126595, - .174718, - 1.00517, - .975823, - -.113205, - .155518, - 1.02566, - .976371, - -.0996096, - .136709, - 1.04418, - .978705, - -.0860754, - .117571, - 1.06146, - .981477, - -.0714438, - .0980046, - 1.07777, - .984263, - -.0572304, - .0782181, - 1.09214, - .988423, - -.0428875, - .0584052, - 1.10553, - .993, - -.0282442, - .038522, - 1.11758, - .99704, - -.0140183, - .0190148, - 1.12864, - .999913, - 369494e-9, - -145203e-9, - 1.13901, - .777662, - -84153e-10, - .423844, - 154403e-10, - .770458, - -211714e-9, - .419915, - 38845e-8, - .770716, - -846888e-9, - .420055, - .00155386, - .770982, - -.00190567, - .420202, - .00349653, - .770981, - -.00338782, - .420201, - .00621606, - .77098, - -.00529338, - .4202, - .00971274, - .770983, - -.00762223, - .4202, - .0139867, - .770985, - -.0103741, - .420198, - .0190381, - .770996, - -.0135489, - .4202, - .0248677, - .771029, - -.0171461, - .420212, - .0314764, - .771052, - -.0211647, - .420215, - .0388648, - .771131, - -.0256048, - .420245, - .047036, - .771235, - -.0304647, - .420284, - .0559911, - .771383, - -.0357436, - .420341, - .0657346, - .771591, - -.0414392, - .420423, - .0762694, - .771819, - -.0475462, - .420506, - .0875984, - .772123, - -.0540506, - .420617, - .099727, - .772464, - -.060797, - .42072, - .112637, - .772855, - -.0675393, - .420799, - .126313, - .773317, - -.0748323, - .420893, - .140824, - .773981, - -.0825681, - .421058, - .15617, - .774746, - -.0906307, - .421226, - .172322, - .77566, - -.0988982, - .421397, - .189253, - .776837, - -.106994, - .421569, - .206912, - .778097, - -.115528, - .421704, - .225359, - .779588, - -.124317, - .421849, - .24447, - .781574, - -.133139, - .422097, - .264156, - .784451, - -.142179, - .422615, - .284318, - .787682, - -.15165, - .423269, - .304902, - .792433, - -.160771, - .424396, - .3265, - .797359, - -.169166, - .424772, - .35014, - .803986, - -.177149, - .425475, - .374768, - .809504, - -.184745, - .424996, - .399928, - .815885, - -.19173, - .424247, - .425796, - .823513, - -.198525, - .423515, - .452287, - .832549, - -.204709, - .422787, - .479321, - .841653, - -.210447, - .421187, - .506718, - .850401, - -.215501, - .418519, - .53432, - .859854, - -.219752, - .414715, - .56242, - .869364, - -.222305, - .409462, - .591558, - .878837, - -.223744, - .402926, - .621074, - .888636, - -.224065, - .395043, - .650538, - .898132, - -.223742, - .38564, - .679538, - .907181, - -.222308, - .375378, - .708674, - .915621, - -.219837, - .363212, - .737714, - .9239, - -.215233, - .349313, - .767014, - .931644, - -.209592, - .334162, - .795133, - .938887, - -.203644, - .317943, - .823228, - .945282, - -.196349, - .300581, - .850822, - .950758, - -.18742, - .282195, - .877594, - .956146, - -.177879, - .262481, - .904564, - .960355, - -.167643, - .242487, - .930741, - .965256, - -.156671, - .222668, - .955868, - .968029, - -.144123, - .201907, - .979869, - .97251, - -.131305, - .18202, - 1.00291, - .974925, - -.118335, - .161909, - 1.02392, - .975402, - -.103714, - .142129, - 1.0433, - .976987, - -.089415, - .122447, - 1.06089, - .979677, - -.0748858, - .102248, - 1.07713, - .983184, - -.0596086, - .0814851, - 1.09218, - .987466, - -.0447671, - .0609484, - 1.10585, - .992348, - -.0295217, - .0401835, - 1.11829, - .996674, - -.0143917, - .0198163, - 1.12966, - 1.00003, - 321364e-9, - -149983e-9, - 1.1402, - .757901, - -869074e-11, - .436176, - 151011e-10, - .751195, - -217848e-9, - .432317, - 378533e-9, - .751178, - -871373e-9, - .432307, - .0015141, - .751195, - -.00196061, - .432317, - .0034068, - .751198, - -.00348552, - .432318, - .00605659, - .751195, - -.00544599, - .432315, - .00946353, - .751207, - -.00784203, - .43232, - .013628, - .751213, - -.0106732, - .43232, - .0185499, - .751221, - -.0139393, - .432319, - .0242302, - .751244, - -.0176398, - .432325, - .0306694, - .7513, - -.0217743, - .432348, - .0378698, - .751358, - -.0263412, - .432367, - .0458321, - .751458, - -.0313396, - .432404, - .0545587, - .751608, - -.0367682, - .432464, - .0640543, - .7518, - -.0426246, - .43254, - .0743222, - .752065, - -.0489031, - .432645, - .0853668, - .752376, - -.0555828, - .432762, - .0971911, - .752715, - -.0623861, - .432859, - .109768, - .753137, - -.069415, - .432958, - .123126, - .753676, - -.0770039, - .433099, - .137308, - .754345, - -.084971, - .433272, - .15229, - .755235, - -.0932681, - .433504, - .168075, - .756186, - -.10171, - .433693, - .184625, - .757363, - -.110019, - .433857, - .201897, - .75884, - -.11887, - .434102, - .220014, - .760467, - -.127881, - .434306, - .238778, - .762969, - -.136766, - .434751, - .258172, - .765823, - -.14612, - .43529, - .278062, - .769676, - -.15566, - .436236, - .298437, - .774909, - -.165177, - .437754, - .319532, - .77994, - -.17402, - .438343, - .342505, - .785757, - -.182201, - .438609, - .366693, - .792487, - -.190104, - .438762, - .391668, - .80038, - -.197438, - .438795, - .417494, - .808494, - -.204365, - .438226, - .443933, - .817695, - -.210714, - .437283, - .470929, - .828111, - -.216651, - .436087, - .498569, - .837901, - -.221804, - .433717, - .526165, - .847813, - -.226318, - .430133, - .554155, - .858314, - -.229297, - .425213, - .582822, - .868891, - -.230999, - .418576, - .612847, - .878941, - -.231155, - .410405, - .642445, - .888809, - -.230935, - .400544, - .672024, - .898089, - -.229343, - .389613, - .701366, - .908081, - -.226886, - .377197, - .730763, - .916819, - -.222676, - .363397, - .759642, - .924968, - -.216835, - .347437, - .788775, - .932906, - -.210245, - .32995, - .817135, - .940025, - -.202992, - .312262, - .844912, - .946101, - -.19436, - .293313, - .872164, - .952835, - -.184125, - .273638, - .899443, - .957347, - -.173657, - .252385, - .926389, - .961434, - -.162204, - .231038, - .951947, - .965522, - -.14979, - .209834, - .976751, - .969412, - -.136307, - .188821, - 1.00022, - .973902, - -.122527, - .168013, - 1.02229, - .974045, - -.108213, - .147634, - 1.04199, - .975775, - -.0927397, - .12705, - 1.06019, - .978383, - -.0778212, - .106309, - 1.07711, - .98211, - -.0621216, - .0849279, - 1.09245, - .986517, - -.0463847, - .0633519, - 1.10651, - .991696, - -.0309353, - .0419698, - 1.11903, - .996349, - -.0150914, - .0206272, - 1.13073, - 1.00003, - 442449e-9, - -231396e-9, - 1.14146, - .727498, - -885074e-11, - .441528, - 145832e-10, - .730897, - -223525e-9, - .443589, - 368298e-9, - .730796, - -893996e-9, - .443528, - .00147303, - .730805, - -.00201149, - .443533, - .00331433, - .730814, - -.00357596, - .443538, - .00589222, - .730815, - -.00558734, - .443538, - .00920678, - .730822, - -.00804544, - .44354, - .0132582, - .730836, - -.0109501, - .443545, - .0180468, - .730848, - -.0143008, - .443546, - .0235732, - .730871, - -.0180969, - .443552, - .0298382, - .730915, - -.022338, - .443567, - .0368438, - .730982, - -.0270225, - .443591, - .044591, - .731076, - -.0321491, - .443627, - .0530831, - .731245, - -.0377166, - .443699, - .0623243, - .73144, - -.0437216, - .443777, - .0723181, - .7317, - -.0501576, - .443881, - .0830691, - .732034, - -.0569942, - .444014, - .0945809, - .732388, - -.0638756, - .444113, - .106825, - .732853, - -.071203, - .444247, - .119859, - .733473, - -.0790076, - .444442, - .13369, - .734195, - -.0871937, - .444645, - .148304, - .735069, - -.095696, - .444877, - .163702, - .736169, - -.10426, - .445133, - .179861, - .73747, - -.112853, - .44537, - .196778, - .738991, - -.12199, - .445651, - .214496, - .740865, - -.131153, - .445958, - .232913, - .743637, - -.140245, - .446548, - .251977, - .746797, - -.149722, - .447246, - .271551, - .751517, - -.159341, - .448656, - .291774, - .756156, - -.169106, - .449866, - .312455, - .761519, - -.178436, - .450919, - .334552, - .768295, - -.186904, - .451776, - .358491, - .776613, - -.195117, - .452832, - .383446, - .783966, - -.202695, - .45249, - .408945, - .793542, - -.20985, - .452587, - .435364, - .803192, - -.216403, - .451852, - .462336, - .813892, - -.22251, - .450708, - .48987, - .824968, - -.227676, - .4486, - .517697, - .835859, - -.232443, - .445156, - .545975, - .846825, - -.235775, - .440351, - .574483, - .858085, - -.237897, - .433641, - .604246, - .868825, - -.238074, - .425354, - .634101, - .879638, - -.237661, - .415383, - .664201, - .889966, - -.236186, - .404136, - .693918, - .899479, - -.233599, - .390917, - .723481, - .908769, - -.229737, - .376352, - .75258, - .917966, - -.223836, - .360372, - .781764, - .926304, - -.217067, - .342551, - .811139, - .934626, - -.209309, - .324238, - .839585, - .941841, - -.20071, - .304484, - .867044, - .94789, - -.190602, - .283607, - .894579, - .954196, - -.179253, - .262205, - .921743, - .958383, - -.167646, - .239847, - .948026, - .963119, - -.155073, - .218078, - .973296, - .966941, - -.141426, - .195899, - .998135, - .970836, - -.126849, - .174121, - 1.02021, - .973301, - -.112296, - .153052, - 1.04085, - .97448, - -.0964965, - .131733, - 1.05946, - .977045, - -.080489, - .10997, - 1.07693, - .980751, - -.064844, - .0881657, - 1.09254, - .985475, - -.0481938, - .0657987, - 1.10697, - .991089, - -.0319185, - .0435215, - 1.12004, - .996122, - -.0158088, - .0214779, - 1.13173, - 1.00001, - 372455e-9, - -200295e-9, - 1.14291, - .708622, - -907597e-11, - .45304, - 141962e-10, - .711162, - -228911e-9, - .454662, - 358052e-9, - .709812, - -914446e-9, - .453797, - .00143034, - .709865, - -.00205819, - .453834, - .00321935, - .709864, - -.00365894, - .453833, - .00572331, - .709855, - -.00571692, - .453826, - .00894278, - .709862, - -.00823201, - .453828, - .012878, - .709875, - -.011204, - .453832, - .0175295, - .709896, - -.0146323, - .453839, - .0228978, - .709925, - -.0185163, - .453847, - .0289839, - .709974, - -.0228551, - .453866, - .0357894, - .710045, - -.0276473, - .453892, - .0433161, - .710133, - -.032891, - .453924, - .0515665, - .710292, - -.0385851, - .453992, - .0605458, - .710485, - -.0447254, - .45407, - .0702574, - .710769, - -.0513051, - .454192, - .0807077, - .711106, - -.0582733, - .454329, - .091896, - .711516, - -.0652866, - .45446, - .103814, - .712071, - -.0728426, - .454653, - .116508, - .712676, - -.0808307, - .45484, - .129968, - .713476, - -.0892216, - .455096, - .144206, - .714377, - -.0979047, - .455346, - .159212, - .715579, - -.106531, - .455647, - .174973, - .716977, - -.115492, - .455961, - .191504, - .71862, - -.124821, - .456315, - .208835, - .72084, - -.134079, - .4568, - .226869, - .723786, - -.143427, - .457521, - .245582, - .727464, - -.153061, - .458475, - .264957, - .732771, - -.162768, - .460239, - .284948, - .736515, - -.172627, - .460899, - .30522, - .743519, - -.182487, - .463225, - .326717, - .750041, - -.191295, - .464027, - .350113, - .758589, - -.199746, - .465227, - .374782, - .767703, - -.207584, - .465877, - .400226, - .777484, - -.214973, - .465996, - .426442, - .788792, - -.221796, - .466019, - .453688, - .800194, - -.228038, - .465083, - .481246, - .811234, - -.233346, - .462506, - .509086, - .822859, - -.238073, - .459257, - .537338, - .835082, - -.241764, - .454863, - .566108, - .846332, - -.244241, - .448163, - .595126, - .858355, - -.244736, - .439709, - .625574, - .87034, - -.244278, - .429837, - .65617, - .881027, - -.24255, - .418002, - .686029, - .891007, - -.239912, - .404325, - .716039, - .900874, - -.236133, - .389222, - .745518, - .911072, - -.230672, - .373269, - .775026, - .920359, - -.22356, - .355083, - .804521, - .928604, - -.215591, - .335533, - .834045, - .937175, - -.206503, - .315278, - .861612, - .942825, - -.196684, - .293653, - .889131, - .949805, - -.185116, - .271503, - .916853, - .955535, - -.172703, - .248821, - .943541, - .959843, - -.159978, - .225591, - .970132, - .964393, - -.146375, - .202719, - .994709, - .968008, - -.131269, - .179928, - 1.0186, - .971013, - -.11569, - .158007, - 1.03928, - .973334, - -.1003, - .13624, - 1.05887, - .975775, - -.0833352, - .1138, - 1.07652, - .979579, - -.0668981, - .0913141, - 1.09297, - .984323, - -.0500902, - .0683051, - 1.10734, - .990351, - -.0332377, - .0451771, - 1.12084, - .995823, - -.0161491, - .0221705, - 1.13296, - 1.0001, - 234083e-9, - -108712e-9, - 1.14441, - .683895, - -924677e-11, - .46015, - 137429e-10, - .68833, - -233383e-9, - .463134, - 346865e-9, - .688368, - -933547e-9, - .463159, - .00138748, - .688367, - -.00210049, - .463159, - .00312187, - .688369, - -.00373415, - .463159, - .00555004, - .688377, - -.00583449, - .463163, - .00867216, - .688386, - -.00840128, - .463166, - .0124884, - .688398, - -.0114343, - .463169, - .0169993, - .688418, - -.0149329, - .463175, - .0222054, - .688453, - -.0188964, - .463188, - .028108, - .688515, - -.0233239, - .463214, - .0347085, - .68857, - -.0282136, - .463231, - .0420091, - .688679, - -.033564, - .463276, - .0500132, - .688854, - -.0393733, - .463356, - .0587255, - .689038, - -.0456354, - .46343, - .0681476, - .689321, - -.0523433, - .463553, - .0782897, - .689662, - -.059412, - .463693, - .0891501, - .690188, - -.0665736, - .4639, - .100735, - .690755, - -.0743106, - .464107, - .113074, - .691405, - -.0824722, - .464329, - .126161, - .692198, - -.0910484, - .464585, - .140007, - .693196, - -.0998778, - .464893, - .154612, - .69454, - -.108651, - .465285, - .169984, - .695921, - -.117855, - .465596, - .186106, - .697749, - -.12734, - .466056, - .203034, - .700375, - -.136714, - .466771, - .220703, - .703395, - -.146386, - .467579, - .239062, - .707904, - -.156096, - .469067, - .258188, - .711673, - -.165904, - .469851, - .277759, - .717489, - -.175812, - .471815, - .297935, - .724051, - -.185931, - .47389, - .318916, - .731965, - -.195238, - .47587, - .341591, - .741151, - -.204021, - .477523, - .366062, - .751416, - -.212113, - .478881, - .391396, - .761848, - -.21979, - .479226, - .417599, - .771886, - -.2267, - .478495, - .444401, - .783998, - -.232991, - .477622, - .472084, - .796523, - -.238645, - .475833, - .500193, - .808851, - -.243396, - .472568, - .52865, - .821191, - -.247226, - .467857, - .557362, - .834261, - -.250102, - .461871, - .586768, - .846762, - -.251056, - .453543, - .617085, - .859867, - -.250604, - .443494, - .647659, - .871948, - -.248783, - .431711, - .678119, - .882967, - -.245855, - .417911, - .708399, - .892826, - -.242168, - .401993, - .738256, - .90332, - -.237062, - .385371, - .767999, - .913633, - -.22997, - .366837, - .798191, - .922774, - -.221687, - .346372, - .827756, - .931371, - -.212345, - .325682, - .856425, - .938929, - -.20206, - .303665, - .884299, - .944821, - -.190981, - .280786, - .912023, - .951792, - -.178065, - .2573, - .939669, - .957712, - -.164634, - .233448, - .96655, - .961912, - -.150863, - .209504, - .992366, - .966382, - -.13577, - .18597, - 1.01633, - .969588, - -.119593, - .162905, - 1.03843, - .971777, - -.103203, - .14053, - 1.05841, - .97433, - -.0865888, - .117909, - 1.07632, - .978686, - -.0690829, - .0944101, - 1.09326, - .983281, - -.0516568, - .0705671, - 1.10796, - .989562, - -.034558, - .0468592, - 1.12182, - .995465, - -.0167808, - .0229846, - 1.1342, - .999991, - 373016e-9, - -235606e-9, - 1.1459, - .662251, - -939016e-11, - .468575, - 132714e-10, - .666634, - -237624e-9, - .471675, - 335842e-9, - .666411, - -950385e-9, - .471516, - .00134321, - .666399, - -.00213833, - .471509, - .00302221, - .666386, - -.0038014, - .471499, - .00537283, - .666405, - -.00593958, - .471511, - .00839533, - .666406, - -.00855253, - .471508, - .0120898, - .666428, - -.0116401, - .471519, - .0164569, - .666444, - -.0152015, - .471522, - .0214971, - .66649, - -.0192362, - .471543, - .027212, - .666537, - -.0237428, - .471558, - .033603, - .666617, - -.0287198, - .471591, - .0406728, - .666718, - -.0341647, - .471631, - .0484238, - .666889, - -.0400759, - .47171, - .0568621, - .667104, - -.0464479, - .471805, - .0659915, - .667374, - -.0532677, - .471923, - .0758178, - .667772, - -.0603805, - .472098, - .0863425, - .668371, - -.0677392, - .472363, - .0975917, - .668971, - -.0756028, - .472596, - .109567, - .669696, - -.0839293, - .472869, - .122272, - .670481, - -.0926683, - .473126, - .135718, - .6715, - -.1016, - .473442, - .149914, - .672911, - -.110566, - .47389, - .164882, - .674512, - -.119984, - .474354, - .180602, - .67651, - -.129574, - .474922, - .19711, - .679292, - -.139106, - .475764, - .214371, - .682798, - -.148993, - .476886, - .232405, - .686955, - -.158737, - .478179, - .251153, - .691406, - -.168754, - .479432, - .270436, - .697438, - -.178703, - .481481, - .290374, - .704761, - -.188955, - .484143, - .311044, - .713599, - -.198814, - .487007, - .333003, - .723194, - -.207869, - .488962, - .357144, - .732601, - -.216189, - .489815, - .382169, - .744193, - -.22398, - .490888, - .408227, - .754907, - -.231156, - .490355, - .434928, - .767403, - -.23747, - .489548, - .462599, - .78107, - -.243503, - .488274, - .490908, - .793893, - -.248114, - .484843, - .519421, - .807296, - -.25222, - .4803, - .548561, - .820529, - -.255265, - .474097, - .577772, - .833716, - -.256741, - .466041, - .607782, - .848403, - -.25637, - .456547, - .638807, - .860755, - -.254804, - .443946, - .670058, - .874012, - -.251834, - .430852, - .700749, - .885619, - -.247867, - .414903, - .731446, - .896069, - -.242634, - .397276, - .761191, - .906266, - -.236093, - .378535, - .791053, - .916759, - -.227543, - .358038, - .821298, - .92523, - -.21783, - .335705, - .850747, - .93436, - -.207534, - .313797, - .879258, - .941631, - -.195983, - .289671, - .907734, - .947564, - -.183567, - .265319, - .935206, - .953681, - -.169345, - .240815, - .962739, - .960008, - -.154909, - .216119, - .989227, - .964145, - -.140161, - .192096, - 1.01465, - .968171, - -.123411, - .167855, - 1.03737, - .969859, - -.106525, - .144817, - 1.05767, - .972666, - -.0891023, - .12149, - 1.0761, - .977055, - -.0718094, - .0975306, - 1.09336, - .982527, - -.0534213, - .0730217, - 1.10878, - .989001, - -.0355579, - .0483366, - 1.12285, - .99512, - -.0176383, - .023938, - 1.13548, - 1.00007, - 368831e-9, - -211581e-9, - 1.14744, - .651047, - -960845e-11, - .484101, - 12922e-9, - .644145, - -241347e-9, - .478968, - 324578e-9, - .64396, - -965142e-9, - .478831, - .00129798, - .64396, - -.00217154, - .47883, - .00292046, - .643968, - -.00386049, - .478835, - .00519202, - .643974, - -.00603186, - .478838, - .0081128, - .643977, - -.0086854, - .478836, - .011683, - .643982, - -.0118207, - .478834, - .0159031, - .644024, - -.0154374, - .478856, - .0207743, - .644059, - -.0195343, - .478868, - .0262975, - .644122, - -.0241103, - .478896, - .0324747, - .644207, - -.0291638, - .478933, - .039309, - .64432, - -.0346919, - .478981, - .0468029, - .644481, - -.0406919, - .479053, - .0549614, - .644722, - -.047159, - .479169, - .0637909, - .645013, - -.0540748, - .479302, - .0732974, - .645503, - -.0612001, - .479541, - .0834898, - .646117, - -.0687303, - .479829, - .0943873, - .646707, - -.0767846, - .480061, - .105991, - .647431, - -.0852465, - .480343, - .11831, - .64831, - -.0940719, - .48066, - .131348, - .649486, - -.103056, - .481083, - .14514, - .650864, - -.112261, - .481528, - .159676, - .652604, - -.121852, - .482102, - .174979, - .654825, - -.131505, - .482813, - .191079, - .657876, - -.141189, - .483876, - .207927, - .661339, - -.151239, - .48499, - .225586, - .665463, - -.161091, - .486279, - .243947, - .670542, - -.171235, - .487968, - .262957, - .677361, - -.181347, - .49053, - .282781, - .685672, - -.191679, - .493862, - .303311, - .694551, - -.201781, - .49699, - .324607, - .703753, - -.211164, - .498884, - .347916, - .713703, - -.219675, - .500086, - .372628, - .725911, - -.227836, - .501554, - .398694, - .73862, - -.23533, - .502193, - .425529, - .752118, - -.241786, - .501811, - .453209, - .76579, - -.247865, - .500185, - .481381, - .779568, - -.252696, - .497159, - .51011, - .793991, - -.256802, - .492765, - .539322, - .808182, - -.259942, - .486827, - .569078, - .821698, - -.261703, - .478386, - .598818, - .836009, - -.262006, - .468772, - .629762, - .849824, - -.260333, - .456352, - .661366, - .863888, - -.257398, - .442533, - .69295, - .876585, - -.253264, - .426573, - .723608, - .888665, - -.248026, - .408964, - .754378, - .899537, - -.241487, - .389677, - .784761, - .9094, - -.233463, - .368516, - .814688, - .920166, - -.223397, - .346624, - .845009, - .928899, - -.21255, - .322717, - .874431, - .937156, - -.200869, - .298698, - .902922, - .943861, - -.188387, - .273491, - .931356, - .949557, - -.174341, - .247866, - .958854, - .955862, - -.158994, - .222496, - .986098, - .961721, - -.143664, - .197522, - 1.01229, - .965976, - -.127412, - .17302, - 1.03571, - .968652, - -.109798, - .148954, - 1.05699, - .971084, - -.0916787, - .125044, - 1.07587, - .975584, - -.0739634, - .100577, - 1.09372, - .98122, - -.055322, - .0753666, - 1.10948, - .988253, - -.0366825, - .0498899, - 1.12394, - .99482, - -.0180389, - .024611, - 1.13694, - 1.00001, - 229839e-9, - -188283e-9, - 1.14919, - .613867, - -964198e-11, - .479449, - 123452e-10, - .621485, - -244534e-9, - .485399, - 313091e-9, - .621429, - -978202e-9, - .485353, - .00125245, - .62112, - -.00220004, - .485114, - .00281687, - .621119, - -.0039111, - .485112, - .00500783, - .621122, - -.00611091, - .485112, - .00782498, - .621133, - -.00879922, - .485117, - .0112687, - .621152, - -.0119756, - .485125, - .0153394, - .621183, - -.0156396, - .485139, - .0200382, - .621227, - -.0197898, - .485158, - .0253663, - .621298, - -.0244253, - .485192, - .0313261, - .621388, - -.0295441, - .485233, - .0379204, - .621507, - -.0351432, - .485286, - .0451523, - .621693, - -.0412198, - .485378, - .0530277, - .621933, - -.0477673, - .485495, - .0615522, - .622232, - -.0547574, - .485635, - .0707316, - .622809, - -.0619417, - .485943, - .0805883, - .623407, - -.069625, - .486232, - .0911267, - .62406, - -.077796, - .486516, - .102354, - .624835, - -.0863731, - .486838, - .114279, - .625758, - -.095251, - .487188, - .126902, - .627043, - -.104299, - .487695, - .140285, - .628438, - -.113724, - .488163, - .154397, - .630325, - -.123417, - .488858, - .169267, - .632801, - -.133137, - .489754, - .184941, - .635784, - -.143052, - .490815, - .20136, - .639406, - -.153132, - .492048, - .218643, - .643872, - -.163143, - .49363, - .236615, - .6499, - -.17333, - .496009, - .255449, - .657201, - -.183622, - .498994, - .275006, - .666221, - -.194019, - .502888, - .295354, - .674419, - -.204192, - .505459, - .316244, - .683729, - -.21406, - .507771, - .33849, - .695584, - -.222854, - .510245, - .363166, - .708583, - -.231315, - .512293, - .389071, - .721233, - -.238911, - .512747, - .415737, - .735134, - -.245657, - .512482, - .443331, - .750179, - -.251879, - .511526, - .471891, - .765073, - -.256911, - .508935, - .500892, - .779794, - -.261144, - .504341, - .530294, - .794801, - -.264316, - .498515, - .560144, - .810339, - -.266276, - .491015, - .590213, - .824818, - -.266981, - .481126, - .620865, - .839375, - -.265778, - .468685, - .652687, - .853043, - -.262748, - .453925, - .684759, - .867335, - -.258474, - .437912, - .716209, - .88037, - -.253187, - .419648, - .747508, - .891711, - -.246476, - .39982, - .77797, - .902896, - -.238735, - .37879, - .808586, - .913601, - -.22885, - .355891, - .838843, - .923019, - -.217656, - .331773, - .869014, - .933432, - -.205539, - .307356, - .898512, - .939691, - -.192595, - .281321, - .9269, - .946938, - -.178945, - .255441, - .955297, - .952372, - -.163587, - .229013, - .983231, - .95909, - -.147214, - .203179, - 1.00971, - .963675, - -.13064, - .17792, - 1.03438, - .968247, - -.113121, - .152898, - 1.05625, - .97001, - -.0945824, - .128712, - 1.07598, - .974458, - -.0755648, - .103349, - 1.094, - .980168, - -.0571998, - .0776731, - 1.1104, - .987295, - -.0377994, - .0514445, - 1.12491, - .994432, - -.0186417, - .025429, - 1.13851, - .999975, - 542714e-9, - -282356e-9, - 1.15108, - .592656, - -980249e-11, - .486018, - 119532e-10, - .598467, - -247275e-9, - .490781, - 301531e-9, - .597934, - -988317e-9, - .490343, - .00120517, - .597903, - -.00222366, - .490319, - .0027116, - .597913, - -.00395315, - .490327, - .00482077, - .597919, - -.00617653, - .490329, - .00753264, - .597936, - -.00889375, - .490339, - .0108478, - .597956, - -.0121043, - .490347, - .0147668, - .597992, - -.0158073, - .490365, - .0192905, - .598032, - -.0200017, - .490382, - .0244204, - .598109, - -.0246865, - .49042, - .0301593, - .598215, - -.0298594, - .490474, - .03651, - .59833, - -.0355167, - .490524, - .0434757, - .598525, - -.0416559, - .490624, - .0510629, - .598778, - -.0482692, - .490753, - .0592781, - .599135, - -.0553114, - .49094, - .0681304, - .599802, - -.062542, - .491328, - .0776467, - .600361, - -.0703638, - .491598, - .0878184, - .60101, - -.0786256, - .491882, - .0986573, - .601811, - -.0872962, - .492232, - .11018, - .602861, - -.0962284, - .492684, - .1224, - .604167, - -.10538, - .493213, - .135354, - .605693, - -.114896, - .493799, - .149034, - .607682, - -.124654, - .494576, - .163469, - .610672, - -.13456, - .4959, - .178747, - .613313, - -.144581, - .496713, - .194723, - .617603, - -.154703, - .498499, - .211617, - .622174, - -.16489, - .500188, - .229183, - .628855, - -.175164, - .503072, - .247786, - .636963, - -.185565, - .506798, - .267116, - .644866, - -.195911, - .509719, - .28702, - .653741, - -.206104, - .512776, - .307763, - .664942, - -.216447, - .516812, - .329631, - .67633, - -.22552, - .519181, - .353515, - .690012, - -.234316, - .521681, - .379226, - .704243, - -.242032, - .523129, - .405901, - .719396, - -.249172, - .523768, - .433585, - .734471, - -.255543, - .522541, - .462085, - .750539, - -.260697, - .520217, - .491233, - .766365, - -.26501, - .516293, - .521094, - .781677, - -.268409, - .509708, - .551014, - .797132, - -.270399, - .501944, - .581463, - .812655, - -.271247, - .492025, - .612402, - .828592, - -.270708, - .480424, - .643798, - .844044, - -.268085, - .465955, - .67682, - .857305, - -.263459, - .448425, - .708496, - .87114, - -.258151, - .430243, - .74046, - .884936, - -.251171, - .410578, - .771583, - .895772, - -.243305, - .38862, - .802234, - .906961, - -.234037, - .365214, - .833179, - .917775, - -.222714, - .34116, - .86353, - .927883, - -.210175, - .31572, - .893557, - .936617, - -.196925, - .289159, - .922976, - .943384, - -.182788, - .261996, - .951606, - .949713, - -.167965, - .235324, - .979958, - .955818, - -.151109, - .208408, - 1.00765, - .961344, - -.133834, - .182591, - 1.03329, - .965469, - -.115987, - .156958, - 1.0557, - .968693, - -.09746, - .132239, - 1.07583, - .973165, - -.0778514, - .106195, - 1.09451, - .979387, - -.0585067, - .0797669, - 1.11137, - .98671, - -.0390409, - .0530263, - 1.12643, - .994093, - -.019408, - .0263163, - 1.14016, - 1.00002, - 540029e-9, - -194487e-9, - 1.15299, - .574483, - -989066e-11, - .494533, - 114896e-10, - .574478, - -249127e-9, - .494528, - 289403e-9, - .574607, - -996811e-9, - .494637, - .00115797, - .574396, - -.00224241, - .494458, - .00260498, - .574377, - -.00398632, - .49444, - .00463102, - .574386, - -.00622836, - .494445, - .00723623, - .574401, - -.0089683, - .494453, - .010421, - .574419, - -.0122056, - .49446, - .0141859, - .574459, - -.0159396, - .494481, - .0185322, - .574525, - -.0201692, - .49452, - .0234617, - .574587, - -.0248924, - .494547, - .0289762, - .574697, - -.0301074, - .494604, - .0350797, - .574853, - -.0358114, - .494688, - .0417767, - .575027, - -.041999, - .494772, - .0490718, - .575294, - -.0486618, - .494915, - .0569728, - .575733, - -.0557148, - .495173, - .0654955, - .576356, - -.0630489, - .495537, - .0746612, - .576944, - -.0709285, - .495836, - .0844615, - .57765, - -.0792723, - .496177, - .0949142, - .578491, - -.0880167, - .496563, - .10603, - .579639, - -.0969462, - .497096, - .117841, - .580989, - -.10622, - .497684, - .130367, - .582587, - -.115861, - .498337, - .143609, - .584951, - -.125605, - .499414, - .157625, - .587602, - -.135608, - .500518, - .172413, - .59076, - -.145742, - .501767, - .187999, - .594992, - -.155934, - .503542, - .20445, - .600656, - -.166303, - .506135, - .221764, - .607816, - -.176681, - .509542, - .24002, - .61522, - -.187071, - .51263, - .258992, - .623702, - -.197465, - .516021, - .278773, - .634192, - -.207816, - .520422, - .299377, - .644936, - -.218183, - .524073, - .320802, - .657888, - -.2278, - .528049, - .34384, - .670666, - -.236747, - .52986, - .36916, - .685626, - -.24484, - .531892, - .395867, - .701304, - -.252071, - .532727, - .423488, - .717727, - -.258714, - .532146, - .452201, - .733914, - -.264211, - .529883, - .481579, - .750529, - -.26859, - .5259, - .511558, - .76747, - -.272046, - .51999, - .542042, - .785189, - -.274225, - .513083, - .572799, - .800954, - -.275189, - .502936, - .603816, - .816962, - -.274946, - .490921, - .635461, - .83336, - -.272695, - .47684, - .6676, - .848143, - -.268223, - .459405, - .70051, - .861818, - -.262768, - .440319, - .732902, - .876828, - -.255872, - .420123, - .765084, - .889312, - -.247703, - .398379, - .796391, - .900412, - -.238381, - .374496, - .827333, - .912251, - -.227783, - .349874, - .858385, - .921792, - -.214832, - .323181, - .888652, - .931273, - -.200949, - .296624, - .917763, - .940295, - -.186537, - .269211, - .947878, - .946812, - -.171538, - .241447, - .977016, - .953588, - -.155254, - .213829, - 1.00501, - .958841, - -.137156, - .186807, - 1.03179, - .963746, - -.118699, - .160706, - 1.05502, - .966468, - -.0998358, - .135504, - 1.07568, - .971178, - -.0805186, - .109131, - 1.09479, - .97831, - -.0599348, - .0818293, - 1.1123, - .985886, - -.0399661, - .0545872, - 1.12771, - .994021, - -.0198682, - .0269405, - 1.14186, - 1.00009, - 271022e-9, - -12989e-8, - 1.15514, - .538716, - -990918e-11, - .486732, - 109675e-10, - .550656, - -250642e-9, - .497518, - 277412e-9, - .55057, - -.00100265, - .497441, - .00110974, - .550903, - -.00225672, - .497733, - .00249779, - .550568, - -.00401046, - .497438, - .00443906, - .550574, - -.00626613, - .49744, - .00693637, - .550591, - -.0090226, - .497449, - .00998921, - .550623, - -.0122795, - .497469, - .0135984, - .550667, - -.0160361, - .497495, - .0177654, - .550724, - -.0202908, - .497526, - .0224915, - .550792, - -.0250421, - .497557, - .0277795, - .550918, - -.0302878, - .49763, - .0336334, - .551058, - -.0360241, - .497701, - .0400573, - .551276, - -.0422473, - .497824, - .0470585, - .551551, - -.0489441, - .497977, - .0546433, - .552074, - -.0559596, - .498312, - .0628367, - .552681, - -.0633978, - .498679, - .071646, - .553324, - -.0713176, - .499031, - .0810746, - .554011, - -.0797268, - .499365, - .091129, - .55488, - -.0885238, - .499779, - .101837, - .556171, - -.0974417, - .500444, - .113239, - .557498, - -.106841, - .501025, - .125316, - .559299, - -.116533, - .501864, - .138128, - .561647, - -.126298, - .502967, - .151695, - .564347, - -.136388, - .504129, - .16604, - .567863, - -.146576, - .505713, - .181207, - .572569, - -.156832, - .507953, - .197259, - .578919, - -.167323, - .511186, - .214258, - .585387, - -.177712, - .514042, - .232038, - .593134, - -.188184, - .517484, - .250733, - .603295, - -.198717, - .522345, - .270454, - .613854, - -.209177, - .526751, - .290807, - .626092, - -.219644, - .531595, - .312202, - .637868, - -.229494, - .534721, - .334435, - .652458, - -.238718, - .538304, - .359184, - .666985, - -.247061, - .539875, - .385637, - .683301, - -.254652, - .541042, - .41328, - .69998, - -.261376, - .540735, - .441903, - .717824, - -.267085, - .539139, - .471609, - .734617, - -.271465, - .534958, - .501446, - .753663, - -.27528, - .53032, - .532571, - .770512, - -.277617, - .522134, - .563641, - .787356, - -.278525, - .51206, - .595067, - .806252, - -.278512, - .50119, - .627226, - .822061, - -.277023, - .486791, - .659402, - .838959, - -.273175, - .470467, - .692874, - .85379, - -.267238, - .450688, - .725702, - .868268, - -.260327, - .429741, - .75832, - .881994, - -.251946, - .407223, - .790189, - .893885, - -.242432, - .383214, - .821625, - .905118, - -.231904, - .357297, - .853011, - .916045, - -.219545, - .330733, - .883773, - .927614, - -.205378, - .303916, - .914435, - .936005, - -.190388, - .275941, - .944502, - .944533, - -.1749, - .247493, - .974439, - .950758, - -.158588, - .218996, - 1.00286, - .957078, - -.141027, - .191559, - 1.0304, - .962448, - -.121507, - .164457, - 1.05466, - .964993, - -.102068, - .138636, - 1.0761, - .970017, - -.0822598, - .111861, - 1.09541, - .97661, - -.062033, - .0843438, - 1.11317, - .985073, - -.0409832, - .0558496, - 1.12911, - .993515, - -.020146, - .0275331, - 1.1438, - 1.00006, - 27329e-8, - -107883e-9, - 1.15736, - .525324, - -999341e-11, - .498153, - 105385e-10, - .526513, - -251605e-9, - .499277, - 265329e-9, - .526517, - -.00100641, - .499282, - .0010613, - .526588, - -.00226466, - .499337, - .00238823, - .526539, - -.0040255, - .499302, - .00424535, - .526547, - -.00628954, - .499306, - .00663364, - .526561, - -.00905628, - .499313, - .00955337, - .526593, - -.0123253, - .499334, - .0130054, - .526642, - -.0160957, - .499365, - .0169911, - .5267, - -.0203661, - .499396, - .0215122, - .526792, - -.0251347, - .499451, - .0265718, - .526904, - -.0303985, - .499511, - .0321732, - .527079, - -.0361554, - .499617, - .0383231, - .527285, - -.0423982, - .499731, - .045026, - .527602, - -.0491121, - .499924, - .0522936, - .528166, - -.0561127, - .500306, - .0601528, - .52879, - -.0635988, - .5007, - .0686059, - .529421, - -.071581, - .501048, - .0776518, - .530144, - -.0799854, - .501421, - .0873148, - .531062, - -.0888032, - .501884, - .0976084, - .532374, - -.0977643, - .50259, - .108588, - .533828, - -.107197, - .50329, - .120234, - .53581, - -.116887, - .504312, - .132602, - .538063, - -.126755, - .505365, - .145721, - .5409, - -.136819, - .506668, - .159617, - .544882, - -.147117, - .508731, - .174369, - .550238, - -.157446, - .511601, - .190028, - .556038, - -.167988, - .514431, - .206587, - .563031, - -.178364, - .517808, - .224046, - .571543, - -.189007, - .521937, - .242503, - .582255, - -.199546, - .527415, - .261977, - .59272, - -.210084, - .531682, - .282162, - .605648, - -.220448, - .537123, - .303426, - .61785, - -.230593, - .540664, - .325323, - .632223, - -.240238, - .544467, - .348993, - .648819, - -.24887, - .547594, - .375462, - .665825, - -.256657, - .54912, - .403024, - .683389, - -.263711, - .549294, - .431773, - .701495, - -.269666, - .547649, - .461494, - .719197, - -.274169, - .543786, - .491623, - .737906, - -.278124, - .538644, - .522994, - .756652, - -.280632, - .531057, - .554775, - .775279, - -.281741, - .521972, - .586441, - .792688, - -.281652, - .509613, - .618596, - .811894, - -.280345, - .496497, - .651462, - .827938, - -.277128, - .47968, - .684023, - .844837, - -.271646, - .460688, - .718024, - .859239, - -.264397, - .438872, - .751207, - .874088, - -.256144, - .41577, - .784232, - .887693, - -.246311, - .391369, - .816191, - .899402, - -.235497, - .365872, - .847828, - .910973, - -.223631, - .338618, - .87934, - .92204, - -.209874, - .310803, - .910325, - .930987, - -.194265, - .281802, - .940695, - .94, - -.178125, - .252836, - .970958, - .948018, - -.161479, - .224239, - 1.00078, - .955141, - -.144038, - .195857, - 1.0288, - .960513, - -.124915, - .168487, - 1.05371, - .963964, - -.104284, - .141495, - 1.07596, - .968713, - -.0838732, - .114437, - 1.09628, - .975524, - -.0635579, - .0863105, - 1.11448, - .98431, - -.042291, - .0574774, - 1.13069, - .992916, - -.0209131, - .0284343, - 1.14568, - .999926, - 743097e-9, - -379265e-9, - 1.15955, - .501042, - -998428e-11, - .498726, - 100306e-10, - .502992, - -252112e-9, - .500665, - 253283e-9, - .502417, - -.00100791, - .500092, - .00101259, - .502965, - -.00226919, - .500621, - .00227978, - .502318, - -.00403109, - .499994, - .00405011, - .502333, - -.00629832, - .500005, - .00632868, - .502362, - -.00906907, - .500027, - .00911446, - .502369, - -.0123423, - .500023, - .0124078, - .50243, - -.0161178, - .500066, - .016211, - .502493, - -.0203937, - .500103, - .0205256, - .502592, - -.0251684, - .500166, - .0253548, - .502707, - -.0304389, - .50023, - .0307029, - .502881, - -.0362015, - .500335, - .0365753, - .503124, - -.0424507, - .500488, - .0429798, - .503443, - -.0491582, - .500686, - .0499268, - .504083, - -.0561476, - .501155, - .0574541, - .504668, - -.0636846, - .501524, - .0655408, - .505319, - -.0716834, - .501904, - .0742072, - .50609, - -.0800925, - .502321, - .0834699, - .507122, - -.0888425, - .502896, - .0933603, - .508414, - -.097855, - .503603, - .10391, - .509955, - -.107304, - .504416, - .115113, - .512061, - -.116921, - .505565, - .127054, - .514419, - -.12689, - .506732, - .139709, - .517529, - -.136934, - .508338, - .153173, - .522085, - -.147327, - .510987, - .167528, - .526986, - -.157612, - .513527, - .182708, - .533122, - -.168213, - .516717, - .198881, - .540807, - -.178688, - .520832, - .215986, - .550687, - -.189511, - .52632, - .234335, - .560567, - -.199998, - .531009, - .253375, - .571698, - -.210652, - .535839, - .273499, - .584364, - -.220917, - .541091, - .294355, - .599066, - -.23137, - .546875, - .316525, - .614148, - -.241206, - .551306, - .339671, - .631157, - -.250379, - .555187, - .36531, - .647919, - -.258397, - .556595, - .392767, - .666112, - -.265528, - .556949, - .421397, - .686158, - -.271827, - .556617, - .451433, - .704838, - -.27674, - .552975, - .482131, - .723957, - -.280733, - .547814, - .513458, - .74262, - -.283359, - .53997, - .545446, - .762009, - -.284541, - .530422, - .57775, - .781314, - -.284507, - .518546, - .610434, - .799116, - -.283309, - .504178, - .643178, - .817604, - -.280378, - .48843, - .676248, - .83459, - -.275619, - .469457, - .709698, - .850974, - -.26856, - .447698, - .744245, - .866747, - -.260094, - .424791, - .777695, - .881412, - -.249929, - .399913, - .810392, - .8936, - -.239137, - .37308, - .842872, - .905943, - -.226818, - .345705, - .874677, - .916408, - -.213699, - .31706, - .906257, - .927215, - -.198428, - .288444, - .936881, - .935625, - -.181643, - .258329, - .96795, - .944076, - -.164386, - .228488, - .998216, - .951229, - -.146339, - .199763, - 1.02689, - .958793, - -.127709, - .172153, - 1.0535, - .963219, - -.107244, - .144989, - 1.07646, - .967562, - -.0857764, - .11685, - 1.09675, - .974866, - -.0645377, - .0880571, - 1.11576, - .983353, - -.0431732, - .0587352, - 1.13227, - .992503, - -.0218356, - .0294181, - 1.1478, - 1.00003, - 605203e-9, - -231013e-9, - 1.16207, - .482935, - -101177e-10, - .504695, - 968142e-11, - .477554, - -251521e-9, - .499071, - 240676e-9, - .477904, - -.00100683, - .499436, - 96342e-8, - .478368, - -.00226636, - .499899, - .0021687, - .477977, - -.00402719, - .499513, - .00385384, - .477993, - -.00629226, - .499525, - .0060221, - .478011, - -.00906011, - .499536, - .00867289, - .478051, - -.0123305, - .499566, - .0118074, - .478089, - -.016102, - .499587, - .0154269, - .478171, - -.0203736, - .499645, - .0195341, - .478254, - -.025143, - .499692, - .0241318, - .47839, - -.0304071, - .499779, - .0292247, - .478588, - -.0361631, - .499911, - .0348196, - .478812, - -.0424023, - .500046, - .0409231, - .479208, - -.0490724, - .500326, - .047552, - .479841, - -.0560722, - .500805, - .0547377, - .480392, - -.0636125, - .501152, - .0624607, - .481068, - -.0716134, - .501561, - .0707473, - .481898, - -.0800062, - .502054, - .0796118, - .483022, - -.0886568, - .502728, - .0890974, - .484332, - -.0977553, - .503479, - .0992099, - .486126, - -.107173, - .504546, - .10999, - .488066, - -.11677, - .50557, - .121476, - .490521, - -.126725, - .506849, - .133672, - .494232, - -.136793, - .50911, - .146731, - .498302, - -.147116, - .511345, - .160577, - .503565, - -.157446, - .514344, - .175335, - .510902, - -.168121, - .518824, - .191207, - .519263, - -.178799, - .523666, - .208058, - .528204, - -.189407, - .528296, - .225875, - .538854, - -.200145, - .533724, - .244782, - .551278, - -.210701, - .539833, - .264753, - .565222, - -.221303, - .546131, - .285745, - .579403, - -.231688, - .551496, - .307592, - .595469, - -.241718, - .556809, - .330582, - .610929, - -.250992, - .559641, - .354995, - .629433, - -.259602, - .562379, - .382471, - .648504, - -.267038, - .563676, - .411126, - .66756, - -.273388, - .562092, - .440924, - .689143, - -.278788, - .560807, - .472118, - .709056, - -.282783, - .555701, - .503774, - .729855, - -.285836, - .548698, - .536364, - .748954, - -.287078, - .538544, - .56895, - .768373, - -.287133, - .526711, - .601991, - .78827, - -.285839, - .512511, - .635403, - .807465, - -.283238, - .496323, - .668797, - .825194, - -.27906, - .477638, - .702584, - .842203, - -.272286, - .456253, - .736393, - .857749, - -.263854, - .432412, - .77096, - .874799, - -.253943, - .407806, - .80489, - .887497, - -.24237, - .38033, - .83771, - .89966, - -.230278, - .352446, - .870376, - .911753, - -.21646, - .323268, - .902256, - .923011, - -.202071, - .294314, - .933306, - .932375, - -.185519, - .264104, - .965177, - .940537, - -.167604, - .234035, - .996303, - .948904, - -.149068, - .20412, - 1.0261, - .955263, - -.129539, - .175431, - 1.05304, - .960303, - -.109932, - .148116, - 1.07617, - .965512, - -.0880572, - .119693, - 1.09742, - .973466, - -.0660548, - .0901619, - 1.11721, - .98284, - -.0439228, - .0599875, - 1.13436, - .992216, - -.0219588, - .0298975, - 1.15006, - .999946, - 119402e-9, - -208547e-10, - 1.16471, - .447827, - -100414e-10, - .491543, - 914833e-11, - .454778, - -251257e-9, - .499172, - 22891e-8, - .453519, - -.00100342, - .497787, - 914184e-9, - .45357, - -.00225776, - .497847, - .00205701, - .453578, - -.00401371, - .497855, - .00365705, - .45357, - -.00627107, - .497841, - .00571453, - .453598, - -.00902968, - .497864, - .00823019, - .453627, - -.0122888, - .497882, - .0112049, - .453684, - -.0160475, - .497923, - .0146405, - .453764, - -.0203044, - .49798, - .0185394, - .453866, - -.0250576, - .498049, - .0229054, - .453996, - -.0303028, - .49813, - .0277424, - .454196, - -.0360379, - .498267, - .0330587, - .454457, - -.0422521, - .498445, - .0388613, - .454926, - -.0488393, - .498812, - .0451767, - .455525, - -.0558653, - .499272, - .0520153, - .456074, - -.0633772, - .499625, - .0593754, - .456752, - -.0713606, - .500049, - .0672751, - .457648, - -.07971, - .500615, - .0757447, - .458849, - -.0883032, - .501399, - .0848231, - .46029, - -.0974095, - .502293, - .0945135, - .462, - -.106729, - .503301, - .104848, - .464121, - -.116354, - .504533, - .115884, - .466889, - -.126214, - .506172, - .127652, - .470744, - -.136324, - .508667, - .14024, - .47488, - -.146595, - .510995, - .153673, - .480845, - -.157027, - .514832, - .168053, - .488262, - -.167658, - .519506, - .183508, - .496547, - -.178343, - .524347, - .199948, - .506254, - -.188916, - .52983, - .217503, - .517961, - -.199975, - .536357, - .236272, - .531484, - -.210624, - .543641, - .256096, - .545496, - -.221227, - .550048, - .277085, - .559497, - -.231568, - .555076, - .298615, - .575752, - -.241698, - .560541, - .321547, - .591999, - -.251172, - .564156, - .345602, - .610654, - -.260178, - .567607, - .371851, - .630484, - -.268094, - .56923, - .40076, - .651807, - -.274661, - .569779, - .430801, - .67239, - -.280331, - .566791, - .461939, - .693024, - -.284501, - .562007, - .493854, - .715473, - -.287852, - .555791, - .526992, - .736323, - -.28929, - .546345, - .560102, - .755771, - -.289405, - .534, - .593543, - .775424, - -.2881, - .519114, - .627256, - .795447, - -.285562, - .502543, - .661464, - .815319, - -.281416, - .484773, - .695206, - .831769, - -.275523, - .463445, - .729044, - .849464, - -.267516, - .440269, - .764069, - .866775, - -.257584, - .415049, - .799089, - .881252, - -.245817, - .388049, - .831948, - .894209, - -.233127, - .35889, - .865526, - .906922, - -.219579, - .329915, - .89818, - .919686, - -.204491, - .300441, - .930013, - .929044, - -.188962, - .269445, - .962061, - .938393, - -.171079, - .238402, - .994214, - .94661, - -.15199, - .208204, - 1.02533, - .953095, - -.131953, - .178653, - 1.0529, - .958644, - -.111233, - .150684, - 1.0771, - .963925, - -.0903098, - .122359, - 1.09855, - .971995, - -.0680505, - .0923342, - 1.11874, - .981658, - -.0448512, - .0614195, - 1.13635, - .991649, - -.0221931, - .0303582, - 1.15238, - .999985, - 393403e-9, - -111086e-9, - 1.16772, - .396806, - -971563e-11, - .457671, - 842355e-11, - .429186, - -249421e-9, - .495017, - 21625e-8, - .429324, - -998052e-9, - .495173, - 865322e-9, - .429175, - -.00224487, - .494999, - .00194637, - .429129, - -.00399041, - .494952, - .00346004, - .429153, - -.00623476, - .494974, - .00540684, - .429168, - -.0089773, - .494983, - .00778714, - .429207, - -.0122175, - .495012, - .0106022, - .429257, - -.0159542, - .495047, - .0138535, - .429338, - -.0201864, - .495106, - .0175443, - .429431, - -.0249104, - .495165, - .0216774, - .429587, - -.0301252, - .495279, - .0262594, - .429796, - -.0358249, - .495432, - .0312968, - .430065, - -.0419972, - .495621, - .0367985, - .430588, - -.0485144, - .496061, - .042798, - .43113, - -.0555028, - .496472, - .0492914, - .431743, - -.0629852, - .496904, - .0562907, - .432448, - -.0709256, - .497369, - .0638056, - .433414, - -.0791942, - .498032, - .071885, - .434638, - -.0877346, - .498854, - .0805517, - .43611, - -.0968056, - .499812, - .0898047, - .437859, - -.106002, - .500891, - .0997142, - .440017, - -.115648, - .502198, - .110289, - .443236, - -.125427, - .504389, - .121644, - .44697, - -.135492, - .506809, - .133769, - .451689, - -.145746, - .509858, - .146787, - .45811, - -.156219, - .514247, - .160793, - .465305, - -.166834, - .518816, - .175791, - .474085, - -.177546, - .524331, - .191906, - .484808, - -.188262, - .53104, - .209199, - .49732, - -.199346, - .538511, - .227825, - .509693, - -.209951, - .544554, - .247269, - .524367, - -.220533, - .551616, - .267978, - .539228, - -.231082, - .557368, - .289672, - .55644, - -.241342, - .563782, - .31268, - .574204, - -.250964, - .568851, - .33651, - .593388, - -.260306, - .57312, - .362219, - .613358, - -.268667, - .574916, - .390322, - .634512, - -.275591, - .575053, - .420478, - .65563, - -.281328, - .572404, - .451614, - .678265, - -.285948, - .568893, - .484112, - .70011, - -.289408, - .561878, - .517348, - .723005, - -.291328, - .55359, - .551355, - .743744, - -.291418, - .541099, - .585109, - .763949, - -.290252, - .526489, - .619487, - .784186, - -.287648, - .509496, - .65404, - .804304, - -.283782, - .491484, - .688649, - .823629, - -.278067, - .470517, - .723133, - .84094, - -.270588, - .44705, - .757163, - .857852, - -.261188, - .421252, - .792816, - .874934, - -.249313, - .394191, - .827248, - .888709, - -.236492, - .365359, - .861074, - .902589, - -.222185, - .336016, - .894417, - .914201, - -.207314, - .30527, - .926825, - .925978, - -.191146, - .274532, - .9595, - .93512, - -.174135, - .243393, - .991583, - .943656, - -.155231, - .212414, - 1.02356, - .951719, - -.134403, - .182005, - 1.05239, - .957164, - -.113023, - .153043, - 1.07754, - .962656, - -.0914493, - .124186, - 1.09984, - .970695, - -.0694179, - .0941654, - 1.12, - .980749, - -.0466199, - .0629671, - 1.13849, - .991205, - -.0227032, - .0311146, - 1.15494, - .999884, - 632388e-9, - -254483e-9, - 1.1706, - .379821, - -957289e-11, - .460637, - 789337e-11, - .405188, - -247483e-9, - .491396, - 204064e-9, - .404796, - -989434e-9, - .490914, - 815853e-9, - .40483, - -.00222607, - .490949, - .00183559, - .40473, - -.00395723, - .49084, - .00326332, - .404731, - -.00618287, - .490836, - .00509945, - .404768, - -.00890258, - .490871, - .00734463, - .404791, - -.0121156, - .490883, - .00999992, - .404857, - -.0158214, - .490938, - .0130676, - .404943, - -.0200178, - .491004, - .0165503, - .405059, - -.0247027, - .491093, - .0204521, - .405213, - -.0298729, - .491205, - .0247788, - .405399, - -.0355226, - .491333, - .0295373, - .405731, - -.0416352, - .491604, - .034741, - .406303, - -.0480807, - .492116, - .0404255, - .406814, - -.0550458, - .492506, - .0465732, - .407404, - -.0624652, - .492926, - .0532058, - .408149, - -.0702958, - .493442, - .0603442, - .409128, - -.0784623, - .494136, - .0680297, - .410408, - -.087007, - .495054, - .0762786, - .411813, - -.0959639, - .495962, - .0851046, - .413735, - -.105075, - .497257, - .0945878, - .416137, - -.114646, - .498882, - .104725, - .41934, - -.124394, - .501132, - .11563, - .423326, - -.134328, - .503883, - .127325, - .428419, - -.14458, - .50747, - .139911, - .43484, - -.154979, - .511964, - .153481, - .442641, - -.165628, - .517328, - .168114, - .452511, - -.176365, - .524258, - .183995, - .463473, - -.187298, - .531248, - .200953, - .475564, - -.198244, - .538367, - .219176, - .488664, - -.208938, - .545175, - .238514, - .504073, - -.219599, - .553227, - .259129, - .520832, - -.230378, - .560653, - .280997, - .538455, - -.240703, - .567523, - .303821, - .55709, - -.250548, - .573287, - .327948, - .576646, - -.259964, - .577795, - .353362, - .596705, - -.268721, - .580077, - .380336, - .618053, - -.276054, - .58018, - .4101, - .640303, - -.282176, - .578747, - .44161, - .662365, - -.286931, - .574294, - .474106, - .684542, - -.290521, - .567035, - .507549, - .707984, - -.292672, - .558687, - .541853, - .730913, - -.293189, - .547606, - .576581, - .752948, - -.292199, - .533471, - .61172, - .773452, - -.289508, - .516395, - .646339, - .794715, - -.285716, - .497873, - .682131, - .814251, - -.280051, - .476845, - .716396, - .833057, - -.272873, - .453449, - .751503, - .84959, - -.263982, - .427857, - .786085, - .867022, - -.252745, - .400335, - .821355, - .882277, - -.239655, - .371304, - .85646, - .895375, - -.225386, - .340397, - .890828, - .909347, - -.209587, - .310005, - .923532, - .921885, - -.193433, - .2796, - .956419, - .932127, - -.176135, - .247276, - .989445, - .941869, - -.157872, - .216186, - 1.02221, - .949735, - -.137577, - .185602, - 1.05195, - .956617, - -.115285, - .155767, - 1.07822, - .961974, - -.0928418, - .126103, - 1.10149, - .96972, - -.0700592, - .0956758, - 1.12207, - .98012, - -.0474671, - .0643269, - 1.1408, - .990825, - -.0238113, - .0320863, - 1.1577, - .999876, - 381574e-9, - -812203e-10, - 1.17403, - .367636, - -961342e-11, - .469176, - 753287e-11, - .380377, - -244772e-9, - .485434, - 191797e-9, - .380416, - -978857e-9, - .485475, - 767015e-9, - .380376, - -.00220165, - .485435, - .00172522, - .380419, - -.00391408, - .485487, - .00306734, - .380438, - -.00611549, - .485505, - .00479332, - .380462, - -.00880558, - .485525, - .00690391, - .380496, - -.0119837, - .485551, - .00940039, - .38056, - -.0156487, - .485605, - .0122848, - .38064, - -.0197988, - .485666, - .0155601, - .380767, - -.0244324, - .48577, - .0192313, - .380909, - -.0295444, - .485871, - .0233032, - .381142, - -.0351321, - .48606, - .0277861, - .381472, - -.0411535, - .486336, - .0326939, - .382015, - -.0475408, - .486833, - .0380565, - .382523, - -.0544395, - .487231, - .0438615, - .383129, - -.061784, - .487683, - .0501332, - .383952, - -.0695085, - .488313, - .0568996, - .38498, - -.0775819, - .489077, - .0641952, - .386331, - -.0860443, - .490113, - .0720324, - .387788, - -.0948406, - .491099, - .0804379, - .389808, - -.103899, - .492566, - .0894899, - .39252, - -.113313, - .494601, - .0992098, - .395493, - -.123007, - .496619, - .109641, - .399826, - -.132859, - .499912, - .120919, - .405341, - -.143077, - .504061, - .133107, - .411932, - -.153465, - .508905, - .146263, - .420591, - -.164108, - .515482, - .160544, - .43101, - -.174893, - .523191, - .176123, - .441881, - -.185839, - .53026, - .192757, - .453919, - -.196633, - .537295, - .210535, - .468715, - -.207611, - .546156, - .229886, - .485182, - -.218517, - .555173, - .250543, - .501926, - -.229249, - .562728, - .27221, - .51785, - -.239481, - .567494, - .294892, - .536947, - -.249395, - .573889, - .318987, - .557115, - -.259, - .578831, - .344348, - .577966, - -.268075, - .582055, - .371223, - .599489, - -.276115, - .583307, - .399834, - .62479, - -.282523, - .583902, - .431415, - .647504, - -.287663, - .57953, - .464301, - .670601, - -.291538, - .573103, - .498123, - .693539, - -.293842, - .563731, - .532662, - .717385, - -.294681, - .553169, - .567925, - .741533, - -.293717, - .539908, - .603502, - .762142, - -.291156, - .521902, - .639074, - .783014, - -.28719, - .502815, - .674439, - .805158, - -.281773, - .482598, - .710497, - .823646, - -.274682, - .458949, - .7456, - .841879, - -.266184, - .433129, - .781085, - .859515, - -.255682, - .406064, - .816, - .875335, - -.242849, - .376509, - .851074, - .890147, - -.228329, - .345502, - .886473, - .903144, - -.212491, - .31428, - .920751, - .916618, - -.195695, - .282994, - .954606, - .927953, - -.178267, - .251091, - .988402, - .937414, - -.159549, - .219107, - 1.02141, - .946823, - -.140022, - .18896, - 1.05167, - .954651, - -.118154, - .158667, - 1.07819, - .959955, - -.0946636, - .128808, - 1.1025, - .96858, - -.0711792, - .0973787, - 1.12391, - .97938, - -.0475046, - .0650965, - 1.14322, - .990498, - -.024059, - .0326267, - 1.16077, - .999844, - -512408e-10, - 112444e-9, - 1.17727, - .316912, - -934977e-11, - .425996, - 695559e-11, - .356423, - -241372e-9, - .479108, - 179562e-9, - .356272, - -965292e-9, - .478897, - 71811e-8, - .356262, - -.00217182, - .478894, - .00161574, - .356265, - -.00386092, - .478895, - .00287261, - .356278, - -.0060324, - .478905, - .00448907, - .356293, - -.00868565, - .478914, - .00646572, - .356346, - -.0118207, - .478965, - .00880438, - .356395, - -.0154355, - .479001, - .0115066, - .356484, - -.019529, - .479075, - .0145762, - .356609, - -.0240991, - .47918, - .018018, - .356766, - -.0291413, - .479305, - .0218379, - .357009, - -.0346498, - .479512, - .0260454, - .357424, - -.0405462, - .479909, - .0306657, - .357899, - -.0468825, - .480337, - .0357054, - .358424, - -.0536887, - .480771, - .0411728, - .359041, - -.0609416, - .481242, - .0470841, - .359903, - -.0685239, - .481943, - .0534831, - .360932, - -.0764883, - .482741, - .0603795, - .362196, - -.0848364, - .483688, - .0678028, - .363847, - -.0935002, - .484947, - .0758086, - .365972, - -.102471, - .486588, - .0844173, - .368741, - -.111751, - .488787, - .0937199, - .372146, - -.121334, - .491405, - .103732, - .377114, - -.131147, - .495604, - .114608, - .38226, - -.141213, - .499436, - .126345, - .389609, - -.151632, - .505334, - .139116, - .397925, - -.162073, - .51168, - .152995, - .407824, - -.172819, - .518876, - .168071, - .420014, - -.183929, - .527639, - .184495, - .434266, - -.195032, - .537588, - .20232, - .447352, - -.205792, - .544379, - .221189, - .463726, - -.216704, - .553422, - .241616, - .481406, - -.227531, - .562074, - .263298, - .498707, - -.238017, - .568227, - .286116, - .518039, - -.247936, - .574473, - .3101, - .538277, - -.257437, - .579191, - .335401, - .561166, - -.266829, - .584807, - .362246, - .583189, - -.275329, - .586476, - .390609, - .606024, - -.28234, - .585578, - .420998, - .632419, - -.287924, - .584496, - .454357, - .656128, - -.291972, - .577766, - .488233, - .679953, - -.29456, - .56875, - .523248, - .704654, - -.295816, - .558388, - .559168, - .729016, - -.295157, - .544826, - .595326, - .752062, - -.292779, - .528273, - .631864, - .773138, - -.288681, - .508482, - .667793, - .794869, - -.283358, - .487341, - .704035, - .815101, - -.27608, - .46354, - .739925, - .834212, - -.26767, - .438672, - .775539, - .852368, - -.257397, - .411239, - .810895, - .870207, - -.245689, - .3829, - .846472, - .884063, - -.231452, - .351496, - .881788, - .898284, - -.215561, - .31895, - .917438, - .912964, - -.198208, - .287367, - .952422, - .924666, - -.180426, - .254487, - .987551, - .934429, - -.161525, - .222226, - 1.02142, - .943485, - -.141197, - .191143, - 1.05218, - .9521, - -.120085, - .161112, - 1.07937, - .957876, - -.0975881, - .130982, - 1.10403, - .966943, - -.0726842, - .0990553, - 1.12616, - .978313, - -.0483705, - .0662818, - 1.14619, - .990048, - -.0239072, - .0329243, - 1.16413, - .999984, - 461885e-9, - -772859e-10, - 1.18099, - .321287, - -935049e-11, - .455413, - 659662e-11, - .332595, - -237513e-9, - .471437, - 167562e-9, - .332729, - -949964e-9, - .471618, - 670192e-9, - .332305, - -.00213618, - .471028, - .00150712, - .332326, - -.00379765, - .471055, - .00267959, - .332344, - -.00593353, - .471072, - .00418751, - .332356, - -.00854349, - .471077, - .00603172, - .332403, - -.0116268, - .471121, - .00821362, - .332461, - -.0151824, - .47117, - .0107357, - .332552, - -.0192088, - .471251, - .0136014, - .332657, - -.0237024, - .47133, - .0168152, - .332835, - -.0286615, - .471487, - .0203853, - .333083, - -.0340765, - .471708, - .0243212, - .333547, - -.0398563, - .47219, - .0286518, - .333989, - -.0460916, - .472587, - .0333763, - .334532, - -.0527897, - .473054, - .0385084, - .335167, - -.0599284, - .473568, - .0440638, - .33608, - -.0673514, - .474362, - .0500962, - .337146, - -.0752237, - .475231, - .0566022, - .338462, - -.083418, - .476282, - .0636272, - .34014, - -.0919382, - .477615, - .0712153, - .342341, - -.100741, - .479404, - .079417, - .345088, - -.109905, - .481618, - .0882631, - .349049, - -.119369, - .485081, - .0978851, - .353939, - -.129033, - .489317, - .108336, - .359893, - -.139038, - .494309, - .119698, - .366945, - -.149411, - .499983, - .132024, - .375814, - -.159843, - .507185, - .145558, - .387112, - -.170664, - .516392, - .160433, - .40023, - -.181897, - .526519, - .176648, - .412555, - -.192785, - .53423, - .193922, - .427023, - -.203663, - .542741, - .212662, - .443685, - -.214695, - .552066, - .232944, - .461499, - -.225561, - .560762, - .254495, - .480975, - -.236257, - .569421, - .277531, - .501, - -.24639, - .576101, - .301724, - .521691, - -.256101, - .581493, - .327112, - .543478, - -.265289, - .585221, - .353917, - .566094, - -.273938, - .587614, - .381941, - .589578, - -.281679, - .587991, - .41172, - .614583, - -.287655, - .585928, - .444148, - .641813, - -.292228, - .582092, - .478617, - .666189, - -.295172, - .57398, - .51397, - .690475, - -.29648, - .561676, - .550118, - .715543, - -.296203, - .548758, - .586933, - .740405, - -.293999, - .532792, - .62384, - .762183, - -.28998, - .512735, - .660723, - .786069, - -.28478, - .492402, - .69807, - .806812, - -.277568, - .469058, - .734422, - .826987, - -.268951, - .443017, - .770946, - .844588, - -.259049, - .415501, - .80699, - .863725, - -.2471, - .387328, - .842107, - .879137, - -.234157, - .356108, - .878078, - .894634, - -.218719, - .324315, - .914058, - .909162, - -.201293, - .291813, - .949922, - .92072, - -.18267, - .258474, - .985337, - .93158, - -.163212, - .225593, - 1.0205, - .941238, - -.142771, - .193986, - 1.05273, - .949293, - -.120956, - .163392, - 1.08075, - .956226, - -.0985743, - .132934, - 1.10559, - .96546, - -.075118, - .101255, - 1.12823, - .977403, - -.0497921, - .0675441, - 1.149, - .989648, - -.0241574, - .0334681, - 1.16765, - 1.00001, - 5762e-7, - -184807e-9, - 1.18519, - .303474, - -916603e-11, - .4542, - 61243e-10, - .308894, - -232869e-9, - .462306, - 155592e-9, - .309426, - -931661e-9, - .463093, - 622499e-9, - .308643, - -.0020949, - .461933, - .00139979, - .308651, - -.0037242, - .461941, - .00248874, - .308662, - -.00581873, - .46195, - .00388933, - .308687, - -.00837818, - .461974, - .00560247, - .308728, - -.0114016, - .462011, - .00762948, - .308789, - -.0148884, - .462067, - .00997326, - .308882, - -.0188369, - .462151, - .0126375, - .309007, - -.0232436, - .462263, - .0156271, - .30918, - -.0281054, - .462417, - .0189498, - .309442, - -.0334065, - .462667, - .0226167, - .309901, - -.0390589, - .463162, - .0266614, - .310331, - -.0452042, - .463555, - .0310715, - .310858, - -.0517735, - .464019, - .0358698, - .311576, - -.0587359, - .464669, - .0410848, - .312436, - -.0660383, - .465406, - .0467453, - .313526, - -.0737266, - .466339, - .0528718, - .314903, - -.0817574, - .467504, - .0595039, - .316814, - -.090167, - .469226, - .0666888, - .318965, - -.0987555, - .470981, - .0744658, - .322077, - -.107792, - .473814, - .082912, - .325947, - -.117098, - .477241, - .0920846, - .331008, - -.126602, - .48184, - .102137, - .337893, - -.136619, - .488334, - .113135, - .345106, - -.146838, - .494415, - .12511, - .355111, - -.157357, - .503275, - .138356, - .365095, - -.167955, - .510966, - .152686, - .378344, - -.179157, - .521508, - .16856, - .391599, - -.190143, - .530455, - .18561, - .407786, - -.20123, - .541275, - .204308, - .425294, - -.212456, - .551784, - .224623, - .444021, - -.223568, - .561493, - .246172, - .463418, - -.234154, - .569886, - .268979, - .484077, - -.244546, - .577116, - .293411, - .505513, - -.254301, - .582914, - .318936, - .527672, - -.263564, - .587208, - .345856, - .550565, - -.272332, - .589277, - .374054, - .573656, - -.280011, - .588426, - .403276, - .59827, - -.286924, - .587504, - .43474, - .624731, - -.291994, - .583401, - .468767, - .652396, - -.295159, - .576997, - .504411, - .67732, - -.296954, - .565863, - .54114, - .703147, - -.296877, - .552316, - .57816, - .728715, - -.295147, - .536773, - .616124, - .752448, - -.291275, - .51771, - .653885, - .775169, - -.285905, - .496087, - .691537, - .799307, - -.279064, - .474232, - .729251, - .819482, - -.270294, - .447676, - .766267, - .837659, - -.260032, - .419656, - .802616, - .856903, - -.248497, - .391328, - .838583, - .873325, - -.235252, - .360285, - .874711, - .889788, - -.221126, - .329215, - .91077, - .904486, - -.204304, - .296392, - .94653, - .917711, - -.185562, - .262159, - .983828, - .928969, - -.165635, - .229142, - 1.01955, - .939707, - -.14442, - .19673, - 1.05317, - .948167, - -.122147, - .165095, - 1.0823, - .955222, - -.099098, - .13451, - 1.10791, - .964401, - -.0755332, - .102476, - 1.1312, - .976605, - -.0513817, - .0689667, - 1.15218, - .989085, - -.0258499, - .034506, - 1.17129, - .999908, - 617773e-9, - -271268e-9, - 1.18961, - .285803, - -905752e-11, - .452348, - 572272e-11, - .284689, - -22732e-8, - .450581, - 143626e-9, - .285263, - -910214e-9, - .451482, - 575099e-9, - .285302, - -.00204784, - .451553, - .00129395, - .285318, - -.00364057, - .451574, - .0023006, - .28533, - -.00568813, - .451585, - .00359547, - .285361, - -.00819001, - .451618, - .00517934, - .285397, - -.0111458, - .45165, - .007054, - .285447, - -.0145536, - .451688, - .00922167, - .285527, - -.0184127, - .451758, - .0116869, - .285688, - -.0227207, - .451929, - .0144555, - .28584, - -.0274712, - .452055, - .0175341, - .286136, - -.0326278, - .452369, - .0209406, - .286574, - -.0381792, - .452853, - .0246965, - .287012, - -.0441879, - .453272, - .0287996, - .287542, - -.0506096, - .453752, - .033268, - .288299, - -.0573634, - .454488, - .0381504, - .289186, - -.0645458, - .455294, - .0434447, - .290302, - -.0720405, - .456301, - .0491973, - .291776, - -.0799046, - .457648, - .0554453, - .29372, - -.088117, - .459483, - .0622311, - .296052, - -.0965328, - .461571, - .0695992, - .299563, - -.105409, - .465085, - .077658, - .30335, - -.114553, - .468506, - .0864176, - .309167, - -.123917, - .474423, - .0961078, - .31529, - -.13381, - .47995, - .106643, - .324163, - -.144021, - .488592, - .118322, - .333272, - -.154382, - .496461, - .131133, - .344224, - -.165015, - .50562, - .145208, - .357733, - -.176168, - .516719, - .16073, - .373046, - -.187468, - .528513, - .177807, - .38788, - -.198488, - .537713, - .196072, - .405133, - -.209545, - .547999, - .21605, - .423845, - -.220724, - .55759, - .237484, - .443777, - -.231518, - .566246, - .26039, - .464824, - -.242035, - .574326, - .284835, - .486635, - -.251898, - .58037, - .310518, - .51012, - -.261304, - .58568, - .337678, - .535301, - -.270384, - .590197, - .366242, - .559193, - -.27841, - .590569, - .395873, - .583544, - -.285325, - .588161, - .426857, - .608834, - -.291113, - .584249, - .459477, - .635753, - -.294882, - .57763, - .494734, - .664367, - -.297088, - .569479, - .532023, - .689688, - -.297364, - .555064, - .569629, - .715732, - -.295949, - .539522, - .608124, - .741307, - -.292259, - .521613, - .646231, - .764949, - -.287063, - .49969, - .684938, - .788599, - -.28012, - .476747, - .723548, - .81048, - -.27153, - .45116, - .761135, - .831372, - -.261289, - .424101, - .798916, - .850092, - -.249559, - .39443, - .835952, - .867777, - -.236348, - .363849, - .871606, - .884632, - -.221569, - .332477, - .907843, - .90047, - -.20618, - .300667, - .944187, - .914524, - -.188771, - .266552, - .981371, - .926892, - -.168362, - .232349, - 1.01841, - .937951, - -.146761, - .199359, - 1.05308, - .947236, - -.123813, - .1675, - 1.0839, - .954367, - -.099984, - .136166, - 1.11047, - .963907, - -.0759278, - .103808, - 1.13414, - .976218, - -.0511367, - .0697061, - 1.15575, - .988772, - -.0267415, - .0352529, - 1.17531, - .999888, - -520778e-9, - 289926e-9, - 1.19389, - .263546, - -883274e-11, - .441896, - 526783e-11, - .262352, - -221849e-9, - .439889, - 132311e-9, - .262325, - -886683e-9, - .439848, - 528824e-9, - .26228, - -.00199476, - .439765, - .00118975, - .262372, - -.00354671, - .439922, - .00211568, - .26239, - -.00554141, - .439941, - .00330652, - .262412, - -.00797888, - .439961, - .00476346, - .262453, - -.0108584, - .440002, - .00648818, - .262528, - -.0141788, - .440085, - .0084835, - .262615, - -.017938, - .440166, - .0107533, - .262744, - -.0221346, - .440291, - .0133044, - .262939, - -.026762, - .440493, - .0161445, - .263277, - -.0317573, - .440889, - .0192974, - .26368, - -.0371832, - .441338, - .0227699, - .264106, - -.0430371, - .441753, - .0265698, - .264624, - -.0493035, - .442227, - .0307178, - .265378, - -.0558669, - .442985, - .0352616, - .266253, - -.0628718, - .443795, - .0401968, - .267478, - -.0701569, - .445008, - .04559, - .269062, - -.077845, - .446599, - .0514539, - .270926, - -.0857941, - .448349, - .0578382, - .273693, - -.0940773, - .451221, - .0648363, - .276746, - -.102704, - .454097, - .0724389, - .281693, - -.111735, - .459517, - .0808744, - .287335, - -.121004, - .46531, - .0901551, - .29448, - -.130734, - .472605, - .100371, - .30257, - -.140777, - .480251, - .111644, - .312465, - -.15111, - .489444, - .124111, - .324856, - -.16189, - .500919, - .137979, - .33774, - -.172946, - .511317, - .153163, - .35255, - -.184152, - .522684, - .169817, - .367786, - -.19522, - .53248, - .187886, - .385474, - -.20632, - .543326, - .207634, - .404976, - -.217744, - .554109, - .229165, - .425203, - -.228691, - .563395, - .252068, - .446704, - -.239299, - .571565, - .276471, - .468951, - -.249348, - .577935, - .302323, - .493487, - -.258933, - .584309, - .329882, - .517861, - -.268009, - .58773, - .358525, - .543309, - -.276238, - .589612, - .388585, - .569704, - -.28356, - .589294, - .419787, - .594871, - -.289497, - .585137, - .452114, - .622555, - -.294452, - .580356, - .486466, - .651167, - -.296918, - .57185, - .523079, - .677332, - -.297647, - .558428, - .5611, - .703718, - -.296321, - .542232, - .599592, - .730262, - -.293339, - .524541, - .639138, - .754304, - -.288036, - .502691, - .677978, - .778051, - -.281018, - .479212, - .716537, - .801557, - -.272414, - .454071, - .75586, - .822559, - -.262419, - .425952, - .794477, - .843051, - -.250702, - .397313, - .832664, - .86232, - -.237264, - .366534, - .869876, - .879044, - -.222716, - .334816, - .906973, - .896362, - -.206827, - .303143, - .943558, - .910342, - -.189659, - .269699, - .979759, - .924119, - -.171108, - .236411, - 1.01718, - .935374, - -.149579, - .202224, - 1.05289, - .944295, - -.126295, - .16989, - 1.08496, - .952227, - -.101511, - .138089, - 1.11256, - .962041, - -.0766392, - .105053, - 1.1375, - .97528, - -.0511967, - .070329, - 1.15983, - .988476, - -.025463, - .0351268, - 1.17987, - .999962, - 286808e-10, - 145564e-10, - 1.19901, - .227089, - -841413e-11, - .404216, - 472707e-11, - .239725, - -215083e-9, - .426708, - 120833e-9, - .239904, - -860718e-9, - .427028, - 483555e-9, - .239911, - -.00193661, - .427039, - .00108806, - .239914, - -.00344276, - .42704, - .00193457, - .239933, - -.00537907, - .427064, - .00302363, - .239944, - -.00774482, - .427065, - .00435604, - .239993, - -.01054, - .427122, - .00593398, - .240052, - -.0137626, - .427179, - .00775987, - .240148, - -.0174115, - .427279, - .00983854, - .240278, - -.021484, - .42741, - .0121763, - .240472, - -.0259729, - .427618, - .0147827, - .240839, - -.0308131, - .428086, - .0176837, - .241201, - -.0360893, - .428482, - .0208775, - .241626, - -.0417723, - .428907, - .0243821, - .242207, - -.0478337, - .42952, - .0282228, - .24298, - -.0542199, - .430332, - .0324333, - .243881, - -.0610015, - .431222, - .0370252, - .245123, - -.0680874, - .432512, - .0420535, - .24667, - -.0755482, - .434088, - .0475414, - .248779, - -.0832873, - .436323, - .0535542, - .251665, - -.0913546, - .439509, - .0601716, - .255305, - -.0998489, - .443478, - .0674282, - .260049, - -.108576, - .448713, - .0754673, - .266192, - -.117754, - .455524, - .084339, - .273158, - -.127294, - .4627, - .0941683, - .282131, - -.137311, - .472068, - .10515, - .293332, - -.147736, - .483565, - .117402, - .304667, - -.158357, - .493702, - .130824, - .317785, - -.169274, - .504708, - .145724, - .333245, - -.180595, - .517107, - .16215, - .349843, - -.191892, - .528849, - .180149, - .367944, - -.203168, - .540301, - .199746, - .387579, - -.214443, - .551514, - .221047, - .408247, - -.225624, - .560906, - .243981, - .43014, - -.236422, - .56959, - .268513, - .452669, - -.24654, - .576098, - .294409, - .476196, - -.256157, - .580925, - .322002, - .501157, - -.265289, - .584839, - .351052, - .527632, - -.273671, - .587614, - .3812, - .555754, - -.281254, - .589119, - .412994, - .581682, - -.287448, - .585204, - .445498, - .608196, - -.292614, - .579006, - .479505, - .635661, - -.296068, - .571297, - .514643, - .664999, - -.297395, - .560855, - .552213, - .691039, - -.296645, - .544525, - .591365, - .7179, - -.293785, - .526535, - .630883, - .744059, - -.289089, - .50545, - .670932, - .76863, - -.282239, - .482514, - .710904, - .793273, - -.273688, - .457246, - .750259, - .814731, - -.26328, - .428872, - .78948, - .835603, - -.251526, - .399384, - .828597, - .85489, - -.238339, - .368811, - .866892, - .872828, - -.223607, - .336617, - .90563, - .889462, - -.207538, - .303997, - .943538, - .904929, - -.190297, - .270812, - .980591, - .919101, - -.172034, - .237453, - 1.01935, - .930536, - -.152058, - .204431, - 1.05498, - .941223, - -.129515, - .172495, - 1.08717, - .94982, - -.104263, - .140175, - 1.11551, - .960592, - -.0781944, - .106465, - 1.14098, - .974629, - -.051688, - .0711592, - 1.16418, - .98811, - -.0253929, - .0354432, - 1.18465, - 1.00004, - 804378e-9, - -330876e-9, - 1.20462, - .214668, - -821282e-11, - .406619, - 433582e-11, - .218053, - -208144e-9, - .413025, - 109887e-9, - .217987, - -832212e-9, - .412901, - 439362e-9, - .217971, - -.00187246, - .412876, - 988623e-9, - .217968, - -.00332855, - .41286, - .00175772, - .217985, - -.00520055, - .412882, - .00274729, - .218014, - -.00748814, - .412916, - .00395842, - .218054, - -.0101901, - .412957, - .00539274, - .218106, - -.0133057, - .413005, - .00705348, - .218217, - -.0168342, - .413139, - .00894581, - .218338, - -.0207707, - .413258, - .0110754, - .21855, - -.0251001, - .413509, - .0134551, - .218913, - -.0297861, - .413992, - .0161081, - .219265, - -.0348956, - .414383, - .0190307, - .219696, - -.0403909, - .414839, - .0222458, - .220329, - -.0462003, - .415567, - .025792, - .220989, - -.0524208, - .41621, - .0296637, - .222027, - -.058948, - .417385, - .0339323, - .223301, - -.0658208, - .418779, - .0386055, - .224988, - -.0730347, - .420665, - .0437355, - .227211, - -.0805274, - .423198, - .0493844, - .230131, - -.088395, - .426566, - .0556135, - .233908, - -.0966208, - .43091, - .0624829, - .239092, - -.105223, - .437148, - .0701636, - .245315, - -.11424, - .444302, - .0786949, - .253166, - -.12368, - .453262, - .0882382, - .262374, - -.133569, - .463211, - .0988682, - .273145, - -.143836, - .474271, - .110727, - .285512, - -.154577, - .4863, - .123945, - .299512, - -.165501, - .498817, - .138581, - .314287, - -.176698, - .510341, - .154676, - .331083, - -.188066, - .522583, - .172459, - .349615, - -.199597, - .534879, - .191979, - .369318, - -.210843, - .546083, - .21309, - .390377, - -.222068, - .5562, - .235998, - .412411, - -.233059, - .564704, - .260518, - .435715, - -.24357, - .572314, - .286795, - .461196, - -.253356, - .579395, - .314559, - .485587, - -.262362, - .581985, - .343581, - .511908, - -.270895, - .584347, - .374367, - .539798, - -.278452, - .58505, - .406015, - .567974, - -.284877, - .583344, - .439168, - .594303, - -.290124, - .577348, - .473005, - .622951, - -.294183, - .570751, - .508534, - .652404, - -.296389, - .561541, - .544764, - .679291, - -.296605, - .546426, - .582927, - .706437, - -.294095, - .528599, - .622681, - .734485, - -.28978, - .508676, - .663567, - .758841, - -.283363, - .484768, - .704092, - .78537, - -.275015, - .460434, - .745101, - .807315, - -.264689, - .432166, - .784712, - .8271, - -.252597, - .401807, - .824241, - .849191, - -.239154, - .371458, - .863803, - .867046, - -.224451, - .338873, - .903063, - .8852, - -.208342, - .306175, - .942763, - .901771, - -.190684, - .272759, - .981559, - .915958, - -.172105, - .239306, - 1.02048, - .928046, - -.152214, - .206071, - 1.05765, - .939961, - -.130247, - .17367, - 1.08999, - .948711, - -.10672, - .142201, - 1.11829, - .959305, - -.0808688, - .108454, - 1.14467, - .973009, - -.0539145, - .0728109, - 1.16839, - .987631, - -.0262947, - .0360625, - 1.19004, - .999978, - .00132758, - -559424e-9, - 1.21058, - .193925, - -793421e-11, - .391974, - 392537e-11, - .196746, - -200315e-9, - .397675, - 991033e-10, - .19667, - -801099e-9, - .397521, - 396342e-9, - .196633, - -.00180246, - .397445, - 891829e-9, - .196654, - -.00320443, - .397482, - .00158582, - .196659, - -.00500647, - .39748, - .00247867, - .196683, - -.0072086, - .397506, - .00357167, - .196728, - -.00981001, - .397562, - .00486675, - .196792, - -.0128096, - .397633, - .00636707, - .19689, - -.0162055, - .397746, - .00807752, - .197017, - -.0199943, - .397884, - .0100052, - .19729, - -.024139, - .39827, - .0121691, - .197583, - -.0286671, - .398639, - .0145755, - .197927, - -.0335858, - .399034, - .0172355, - .198383, - -.0388806, - .399554, - .0201718, - .199002, - -.0444736, - .400289, - .0234194, - .199739, - -.0504583, - .401111, - .026984, - .200784, - -.056729, - .402349, - .0309217, - .202075, - -.0633643, - .403841, - .0352496, - .203898, - -.0703247, - .406076, - .0400313, - .206199, - -.0775565, - .408841, - .0453282, - .209252, - -.085184, - .41259, - .0511794, - .213638, - -.0931994, - .418288, - .0577459, - .21881, - -.101617, - .424681, - .0650508, - .225642, - -.11052, - .433429, - .0732759, - .233717, - -.119772, - .442897, - .0824683, - .242823, - -.129505, - .452888, - .0927484, - .254772, - -.139906, - .466407, - .104417, - .266603, - -.150402, - .477413, - .117211, - .28073, - -.161395, - .490519, - .131598, - .295399, - -.172465, - .50201, - .147407, - .312705, - -.183982, - .515311, - .165031, - .331335, - -.195532, - .52786, - .184336, - .351037, - -.206971, - .5392, - .205361, - .372175, - -.218117, - .54941, - .228043, - .394548, - -.229327, - .558642, - .25267, - .419598, - -.240052, - .567861, - .279071, - .443922, - -.249937, - .573332, - .306882, - .471495, - -.259407, - .58013, - .33661, - .496769, - -.267749, - .580564, - .367328, - .524951, - -.275524, - .581696, - .399753, - .55318, - -.282148, - .579885, - .433134, - .581577, - -.287533, - .575471, - .467534, - .609231, - -.291612, - .567445, - .502943, - .637478, - -.293911, - .557657, - .53871, - .667795, - -.295096, - .546535, - .576568, - .694272, - -.294073, - .529561, - .614929, - .722937, - -.290386, - .510561, - .655909, - .749682, - -.284481, - .487846, - .697663, - .774754, - -.276188, - .462487, - .738515, - .799301, - -.266215, - .43481, - .779802, - .820762, - -.254116, - .404879, - .820045, - .843231, - -.240393, - .374559, - .860294, - .861857, - -.225503, - .341582, - .900965, - .880815, - -.209382, - .308778, - .941727, - .89766, - -.19155, - .275232, - .980916, - .912926, - -.172346, - .240938, - 1.02162, - .926391, - -.151799, - .207223, - 1.0597, - .938429, - -.129968, - .17484, - 1.09291, - .947834, - -.10651, - .142984, - 1.12248, - .958432, - -.0824098, - .109902, - 1.149, - .972402, - -.0565242, - .0744454, - 1.1733, - .987191, - -.028427, - .0373794, - 1.19538, - .999975, - 385685e-10, - -4203e-8, - 1.21676, - .178114, - -766075e-11, - .385418, - 354027e-11, - .176074, - -191966e-9, - .381002, - 887135e-10, - .17601, - -767549e-9, - .380861, - 354715e-9, - .17598, - -.00172696, - .380798, - 798168e-9, - .175994, - -.00307012, - .380824, - .00141928, - .176017, - -.00479684, - .380858, - .00221859, - .176019, - -.00690648, - .380839, - .00319714, - .176072, - -.00939888, - .380913, - .0043572, - .176131, - -.0122726, - .380979, - .005702, - .176239, - -.0155264, - .38112, - .00723689, - .176371, - -.0191551, - .381272, - .00896907, - .176638, - -.023117, - .381669, - .0109194, - .176912, - -.0274633, - .382015, - .0130903, - .177279, - -.032173, - .382476, - .0154949, - .17774, - -.0372219, - .383041, - .0181669, - .178344, - -.0426132, - .38378, - .0211209, - .179153, - -.0483309, - .384773, - .0243899, - .180197, - -.0543447, - .386076, - .0280062, - .181581, - -.0607122, - .387809, - .032004, - .18344, - -.0673855, - .390205, - .036453, - .186139, - -.0743989, - .393944, - .0414162, - .189432, - -.0817731, - .39832, - .0469394, - .193795, - -.0895464, - .404188, - .0531442, - .199641, - -.0978264, - .4121, - .0601374, - .206679, - -.106499, - .421425, - .0680078, - .214865, - -.115654, - .431504, - .076919, - .224406, - -.125268, - .442526, - .0868835, - .235876, - -.135475, - .455465, - .0981875, - .248335, - -.146023, - .4681, - .110759, - .262868, - -.157016, - .482069, - .124885, - .278962, - -.168245, - .496182, - .140645, - .295082, - -.17958, - .507401, - .157838, - .313738, - -.191227, - .520252, - .17695, - .333573, - -.202718, - .531708, - .197817, - .356433, - -.214424, - .544509, - .220785, - .378853, - -.225492, - .55373, - .245306, - .402717, - -.236236, - .561348, - .271593, - .428375, - -.246568, - .568538, - .299776, - .454724, - -.255941, - .573462, - .329433, - .482291, - -.264511, - .576356, - .360598, - .509706, - -.272129, - .576446, - .393204, - .538805, - -.278979, - .575298, - .427227, - .568919, - -.284528, - .572154, - .462157, - .596804, - -.288801, - .564691, - .497997, - .625987, - -.291334, - .555134, - .534467, - .656414, - -.292722, - .545051, - .571736, - .683916, - -.292185, - .528813, - .610158, - .711809, - -.290043, - .51106, - .649061, - .739547, - -.285246, - .490103, - .690081, - .766914, - -.277647, - .465523, - .732554, - .791375, - -.267603, - .437718, - .773982, - .814772, - -.256109, - .40882, - .81609, - .836691, - -.242281, - .377823, - .856849, - .856984, - -.227155, - .34496, - .898363, - .876332, - -.210395, - .311335, - .939471, - .894988, - -.192612, - .277703, - .980799, - .911113, - -.173236, - .243019, - 1.02215, - .924092, - -.152258, - .209037, - 1.06139, - .936828, - -.129575, - .175909, - 1.09635, - .946869, - -.10594, - .143852, - 1.12707, - .958284, - -.081318, - .110289, - 1.15419, - .972325, - -.0556133, - .0747232, - 1.17909, - .986878, - -.0297899, - .0383149, - 1.20163, - .999936, - -.00197169, - 912402e-9, - 1.22338, - .151174, - -720365e-11, - .351531, - 309789e-11, - .155594, - -18279e-8, - .361806, - 78608e-9, - .156099, - -731569e-9, - .362982, - 314615e-9, - .156053, - -.00164578, - .362869, - 707845e-9, - .156093, - -.0029261, - .362961, - .00125884, - .156099, - -.00457155, - .362959, - .00196783, - .15612, - -.00658224, - .362982, - .00283622, - .156168, - -.00895774, - .363048, - .00386625, - .156221, - -.0116962, - .363101, - .00506109, - .156324, - -.0147973, - .363241, - .00642675, - .156476, - -.0182503, - .363448, - .00797175, - .156731, - -.0220266, - .36384, - .00971484, - .156994, - -.026176, - .364179, - .0116575, - .157341, - -.0306701, - .36462, - .0138207, - .157867, - -.0354591, - .365364, - .0162356, - .15846, - -.0406141, - .366111, - .0189092, - .159308, - -.0460519, - .367248, - .021885, - .160426, - -.0518096, - .368767, - .0252004, - .161877, - -.0578906, - .370745, - .0288825, - .163995, - -.0642812, - .373831, - .0330139, - .16655, - -.0710067, - .377366, - .0376283, - .170237, - -.0781522, - .382799, - .0428493, - .175096, - -.0857172, - .389915, - .0487324, - .181069, - -.0938025, - .398487, - .0554214, - .188487, - -.102363, - .408799, - .0630189, - .197029, - -.111343, - .419991, - .071634, - .206684, - -.120812, - .431455, - .0812797, - .218698, - -.131033, - .445746, - .0923651, - .230726, - -.141373, - .457471, - .104545, - .245516, - -.152387, - .472388, - .118449, - .261551, - -.163628, - .486671, - .133923, - .277437, - -.174814, - .49762, - .150849, - .296662, - -.186713, - .51162, - .169924, - .31795, - -.198513, - .525435, - .190848, - .339422, - -.210119, - .536267, - .213504, - .362143, - -.221354, - .545982, - .237947, - .387198, - -.23224, - .555364, - .264427, - .412349, - -.24257, - .561489, - .292519, - .439274, - -.252284, - .566903, - .322561, - .466779, - -.261023, - .569614, - .353952, - .496011, - -.26899, - .571589, - .387278, - .524964, - -.275498, - .570325, - .421356, - .556518, - -.281449, - .568792, - .457314, - .584363, - -.285526, - .560268, - .493199, - .614214, - -.28844, - .55205, - .530276, - .645684, - -.289777, - .541906, - .56855, - .673446, - -.289722, - .526464, - .606927, - .701924, - -.287792, - .509872, - .645945, - .73037, - -.284315, - .490649, - .685564, - .757405, - -.278804, - .467964, - .726511, - .784025, - -.269543, - .441468, - .768601, - .808255, - -.258117, - .41216, - .811321, - .830739, - -.244728, - .380606, - .853496, - .851914, - -.229428, - .348111, - .895374, - .872586, - -.212508, - .314732, - .937674, - .891581, - -.194025, - .280338, - .979869, - .907641, - -.174711, - .245203, - 1.02253, - .922233, - -.153509, - .21077, - 1.06371, - .935878, - -.130418, - .177399, - 1.09972, - .946338, - -.105558, - .144507, - 1.13124, - .957265, - -.080059, - .110508, - 1.15973, - .971668, - -.0539766, - .0742311, - 1.18515, - .9866, - -.0277101, - .0375224, - 1.20858, - 1.00021, - -515531e-9, - 135226e-9, - 1.23135, - .137468, - -686011e-11, - .345041, - 273315e-11, - .13703, - -173378e-9, - .343936, - 690761e-10, - .136986, - -693048e-9, - .34383, - 276126e-9, - .136964, - -.00155931, - .343761, - 621337e-9, - .137003, - -.00277211, - .343863, - .00110494, - .137012, - -.00433103, - .343868, - .00172744, - .137043, - -.00623606, - .343916, - .00249022, - .13709, - -.0084868, - .343986, - .00339559, - .137145, - -.0110814, - .344045, - .00444687, - .137242, - -.0140187, - .344177, - .00565007, - .137431, - -.0172713, - .344491, - .00701868, - .137644, - -.0208605, - .344805, - .00856042, - .13791, - -.024792, - .345172, - .0102863, - .138295, - -.0290461, - .345734, - .0122185, - .138764, - -.0335957, - .346371, - .0143771, - .139415, - -.038467, - .347298, - .0167894, - .140272, - -.0436176, - .348527, - .0194895, - .141457, - -.0491016, - .350276, - .0225043, - .14303, - -.0548764, - .352646, - .0258962, - .145289, - -.0610096, - .356206, - .0297168, - .148502, - -.0674777, - .361488, - .0340562, - .152188, - -.074345, - .367103, - .0389534, - .157359, - -.0817442, - .375247, - .0445541, - .16379, - -.0896334, - .385064, - .0509535, - .171376, - -.098005, - .396082, - .0582611, - .179901, - -.106817, - .407418, - .06654, - .189892, - -.116239, - .420031, - .075994, - .201838, - -.12627, - .434321, - .0867239, - .214311, - -.136701, - .447631, - .0987517, - .228902, - -.147616, - .462046, - .112353, - .245107, - -.158871, - .476942, - .127605, - .262292, - -.170261, - .490285, - .144469, - .281215, - -.182017, - .503783, - .163282, - .301058, - -.193729, - .515505, - .183873, - .322752, - -.205512, - .52682, - .206466, - .347547, - -.217214, - .539473, - .231194, - .370969, - -.227966, - .546625, - .257288, - .397533, - -.238555, - .55472, - .285789, - .42398, - -.248278, - .559468, - .315746, - .452928, - -.257422, - .564095, - .347724, - .482121, - -.265306, - .565426, - .380922, - .510438, - -.272043, - .563205, - .415639, - .541188, - -.277614, - .561087, - .451702, - .571667, - -.281927, - .554922, - .48845, - .602432, - -.285015, - .546838, - .526442, - .634126, - -.286512, - .537415, - .564896, - .662816, - -.286388, - .522906, - .604037, - .692411, - -.284734, - .507003, - .643795, - .720946, - -.281297, - .488398, - .68298, - .748293, - -.276262, - .466353, - .723466, - .776931, - -.269978, - .443573, - .764565, - .801065, - -.260305, - .415279, - .805838, - .825843, - -.247426, - .384773, - .849985, - .84807, - -.232437, - .352555, - .893174, - .869122, - -.215806, - .318642, - .936564, - .888963, - -.197307, - .28381, - .980253, - .905547, - -.177203, - .247888, - 1.02463, - .918554, - -.155542, - .212904, - 1.06714, - .931395, - -.131948, - .1787, - 1.10451, - .941749, - -.106723, - .145902, - 1.13694, - .954551, - -.0804939, - .111193, - 1.1666, - .970279, - -.0534239, - .0744697, - 1.19249, - .986117, - -.0257452, - .0368788, - 1.21665, - .999938, - .00190634, - -.0010291, - 1.23981, - .118493, - -647439e-11, - .32272, - 23772e-10, - .118765, - -163023e-9, - .323456, - 598573e-10, - .118772, - -65212e-8, - .323477, - 239447e-9, - .118843, - -.00146741, - .323657, - 538881e-9, - .118804, - -.00260846, - .323553, - 95826e-8, - .118826, - -.00407576, - .323595, - .00149845, - .118846, - -.00586826, - .323617, - .00216047, - .118886, - -.00798578, - .32367, - .00294679, - .118947, - -.0104273, - .323753, - .00386124, - .119055, - -.0131909, - .323922, - .00490999, - .119241, - -.0162444, - .324251, - .00610804, - .11944, - -.0196339, - .324544, - .00745805, - .119739, - -.0233378, - .325026, - .00897805, - .12011, - -.0273179, - .325586, - .0106895, - .120571, - -.0316143, - .326231, - .0126073, - .12124, - -.0361939, - .327264, - .0147654, - .122162, - -.0410511, - .328733, - .0172001, - .123378, - -.0462233, - .330659, - .0199375, - .125183, - -.0517109, - .333754, - .0230498, - .127832, - -.0575652, - .338507, - .026597, - .130909, - -.0637441, - .343666, - .0306345, - .135221, - -.0704302, - .351063, - .035273, - .14082, - -.0776364, - .360604, - .0406137, - .146781, - -.0852293, - .369638, - .0466788, - .155121, - -.0935351, - .3827, - .0537628, - .16398, - -.102234, - .39522, - .0617985, - .173926, - -.111465, - .40793, - .07097, - .185137, - -.121296, - .42105, - .0813426, - .19826, - -.13169, - .435735, - .0931596, - .212938, - -.142614, - .450932, - .106547, - .229046, - -.153884, - .465726, - .121575, - .246246, - -.165382, - .479461, - .138286, - .264637, - -.176806, - .492106, - .15666, - .284959, - -.188793, - .504774, - .17728, - .308157, - -.200763, - .518805, - .19988, - .330951, - -.21239, - .528231, - .224293, - .3549, - -.223521, - .536376, - .250541, - .381502, - -.234169, - .544846, - .278902, - .409529, - -.244077, - .551717, - .309227, - .437523, - -.253363, - .55517, - .341426, - .467624, - -.261659, - .557772, - .37518, - .497268, - -.268498, - .556442, - .41007, - .528294, - -.274018, - .553915, - .446445, - .559053, - -.278169, - .549153, - .483779, - .589329, - -.281229, - .539878, - .522249, - .622503, - -.282902, - .53162, - .561754, - .652382, - -.282815, - .518119, - .601544, - .681847, - -.281247, - .502187, - .641574, - .712285, - -.277986, - .484824, - .682633, - .740094, - -.273017, - .463483, - .723426, - .768478, - -.266692, - .441299, - .763747, - .794556, - -.258358, - .415238, - .805565, - .819408, - -.248807, - .386912, - .847254, - .843411, - -.236214, - .356165, - .891091, - .862397, - -.219794, - .320562, - .936174, - .883113, - -.201768, - .285322, - .982562, - .90023, - -.181672, - .249713, - 1.02862, - .915192, - -.159279, - .214546, - 1.07163, - .928458, - -.134725, - .180285, - 1.10995, - .94069, - -.10913, - .147119, - 1.14354, - .953409, - -.0821315, - .112492, - 1.17372, - .969537, - -.0542677, - .0752014, - 1.20043, - .985612, - -.0259096, - .0370361, - 1.22528, - .999835, - .00298198, - -.00151801, - 1.24959, - .10097, - -602574e-11, - .300277, - 202619e-11, - .101577, - -152164e-9, - .302077, - 511662e-10, - .101572, - -608889e-9, - .302066, - 204751e-9, - .101566, - -.00136997, - .302047, - 460753e-9, - .101592, - -.00243557, - .302114, - 819497e-9, - .101608, - -.0038053, - .30214, - .00128154, - .101627, - -.00547906, - .30216, - .0018483, - .101669, - -.00745647, - .302224, - .00252223, - .101732, - -.00973615, - .302318, - .00330716, - .101844, - -.0123097, - .302513, - .00421061, - .102025, - -.0151681, - .30285, - .00524481, - .102224, - -.0183334, - .303166, - .0064154, - .102515, - -.0217819, - .303654, - .00774063, - .102886, - -.0255067, - .304243, - .0092398, - .103395, - -.029514, - .305089, - .0109339, - .104109, - -.0337912, - .306301, - .0128561, - .105074, - -.0383565, - .30798, - .0150338, - .10654, - -.0432132, - .310726, - .0175228, - .108478, - -.0484244, - .314351, - .0203648, - .111015, - -.0539339, - .319032, - .0236325, - .114682, - -.0598885, - .32605, - .0274188, - .11911, - -.0663375, - .334109, - .0317905, - .124736, - -.0733011, - .344013, - .0368502, - .131479, - -.0807744, - .355358, - .0427104, - .139283, - -.0888204, - .367614, - .0494788, - .148054, - -.0973394, - .380072, - .0572367, - .159037, - -.10665, - .395678, - .0662704, - .169794, - -.116221, - .40795, - .0763192, - .18314, - -.126632, - .423546, - .087956, - .197515, - -.137383, - .438213, - .101042, - .213514, - -.148641, - .453248, - .115827, - .23065, - -.160117, - .46688, - .132283, - .249148, - -.171807, - .479962, - .150644, - .270219, - -.183695, - .494618, - .171073, - .292338, - -.195574, - .506937, - .193378, - .314999, - -.207205, - .516463, - .217585, - .340991, - -.218955, - .528123, - .24428, - .367982, - -.229917, - .537025, - .272784, - .39432, - -.239737, - .541627, - .302742, - .423364, - -.249048, - .546466, - .335112, - .453751, - -.257329, - .549466, - .369032, - .48416, - -.264623, - .549503, - .404577, - .515262, - -.270411, - .547008, - .441337, - .547036, - -.274581, - .542249, - .479162, - .576614, - -.277266, - .533015, - .517904, - .611143, - -.279144, - .525512, - .558508, - .640989, - -.279001, - .51154, - .598995, - .671182, - -.277324, - .495641, - .639935, - .700848, - -.273908, - .477526, - .681017, - .729862, - -.269063, - .457955, - .722764, - .758273, - -.262282, - .434846, - .764349, - .784121, - -.254281, - .409203, - .806206, - .809798, - -.24505, - .382694, - .848617, - .834953, - -.233861, - .354034, - .892445, - .856817, - -.221308, - .321764, - .936263, - .877609, - -.205996, - .288118, - .982401, - .897489, - -.186702, - .253277, - 1.02975, - .913792, - -.164618, - .217963, - 1.07488, - .92785, - -.140023, - .183221, - 1.11487, - .940378, - -.11328, - .149385, - 1.14947, - .95273, - -.0853958, - .114152, - 1.1807, - .969059, - -.0568698, - .0769845, - 1.20912, - .985574, - -.0276502, - .0381186, - 1.23498, - .999943, - .00239052, - -.00126861, - 1.25987, - .0852715, - -560067e-11, - .279021, - 171162e-11, - .0854143, - -140871e-9, - .279483, - 430516e-10, - .0854191, - -563385e-9, - .2795, - 172184e-9, - .0854188, - -.00126753, - .279493, - 387464e-9, - .0854229, - -.00225337, - .279501, - 68918e-8, - .0854443, - -.00352086, - .279549, - .00107803, - .0854697, - -.00506962, - .279591, - .00155536, - .0855093, - -.00689873, - .279652, - .00212354, - .0855724, - -.00900821, - .279752, - .00278703, - .0856991, - -.0113799, - .280011, - .0035551, - .085855, - -.0140314, - .280297, - .00443449, - .0860682, - -.016963, - .280682, - .00543636, - .086344, - -.0201438, - .281159, - .0065788, - .0867426, - -.0235999, - .281886, - .00787977, - .087239, - -.0273069, - .282745, - .0093606, - .0879815, - -.031269, - .284139, - .011056, - .0891258, - -.035531, - .28647, - .0130065, - .0906909, - -.0400947, - .289708, - .0152495, - .0927624, - -.0449638, - .293904, - .0178454, - .0958376, - -.0502427, - .300471, - .0208915, - .0995827, - -.0559514, - .30806, - .0244247, - .104526, - -.0622152, - .317874, - .0285721, - .110532, - -.0690046, - .329332, - .0334227, - .117385, - -.0763068, - .341217, - .0390466, - .12522, - -.084184, - .353968, - .0455786, - .134037, - -.0925248, - .366797, - .0530773, - .144014, - -.101487, - .380209, - .0617424, - .156013, - -.111273, - .395956, - .071777, - .168872, - -.121431, - .41053, - .0830905, - .183089, - -.132105, - .425073, - .0959341, - .198763, - -.143286, - .439833, - .110448, - .216159, - -.154841, - .454507, - .126769, - .234859, - -.166588, - .468368, - .14495, - .255879, - -.178626, - .482846, - .165233, - .27677, - -.190218, - .493489, - .187217, - .301184, - -.202227, - .506549, - .211659, - .325852, - -.213764, - .5158, - .237922, - .352824, - -.22487, - .525442, - .26632, - .380882, - -.235246, - .532487, - .296691, - .410137, - -.244847, - .537703, - .329179, - .439787, - -.253122, - .540361, - .363135, - .472291, - -.260517, - .542734, - .399222, - .501856, - -.266519, - .538826, - .436352, - .534816, - -.270905, - .535152, - .474505, - .565069, - -.273826, - .525979, - .513988, - .597154, - -.275333, - .516394, - .554852, - .630473, - -.275314, - .506206, - .596592, - .660574, - -.273323, - .489769, - .638117, - .692015, - -.270008, - .472578, - .680457, - .720647, - -.265001, - .452134, - .723008, - .750528, - -.258311, - .430344, - .765954, - .777568, - -.250046, - .405624, - .809012, - .80387, - -.240114, - .378339, - .852425, - .828439, - -.228737, - .349877, - .895346, - .851472, - -.216632, - .318968, - .940695, - .873906, - -.202782, - .287489, - .987235, - .89467, - -.187059, - .254394, - 1.03348, - .912281, - -.168818, - .221294, - 1.07812, - .927358, - -.146494, - .18675, - 1.11928, - .940385, - -.120009, - .152322, - 1.15609, - .952672, - -.0917183, - .117514, - 1.18875, - .968496, - -.0620321, - .0797405, - 1.21821, - .985236, - -.0314945, - .0402383, - 1.24523, - .99998, - -575153e-9, - 110644e-9, - 1.27133, - .0702429, - -512222e-11, - .255273, - 140947e-11, - .0702981, - -128826e-9, - .255469, - 354488e-10, - .0703691, - -515562e-9, - .255727, - 141874e-9, - .0703805, - -.00116, - .255754, - 31929e-8, - .0703961, - -.00206224, - .255813, - 567999e-9, - .0704102, - -.00322223, - .255839, - 88871e-8, - .0704298, - -.00463928, - .255863, - .00128272, - .0704759, - -.00631375, - .255953, - .00175283, - .0705434, - -.00824317, - .256079, - .00230342, - .0706693, - -.010412, - .25636, - .0029443, - .0708189, - -.0128439, - .256647, - .00368031, - .0710364, - -.0155177, - .257084, - .00452614, - .0713223, - -.0184374, - .257637, - .00549706, - .0717182, - -.0216002, - .258416, - .00661246, - .072321, - -.0249966, - .259699, - .00790147, - .0731446, - -.0286566, - .261475, - .0093884, - .0743352, - -.0325888, - .264132, - .0111186, - .0760676, - -.036843, - .26815, - .013145, - .078454, - -.0414292, - .273636, - .0155251, - .0818618, - -.0464634, - .281653, - .0183525, - .0857382, - -.0519478, - .289992, - .0216642, - .0908131, - -.0579836, - .30066, - .0255956, - .0967512, - -.0645124, - .312204, - .0301954, - .103717, - -.0716505, - .325001, - .0356017, - .111596, - -.0793232, - .338129, - .041896, - .120933, - -.087645, - .352853, - .0492447, - .130787, - -.096492, - .366192, - .0576749, - .142311, - -.105973, - .380864, - .0673969, - .155344, - -.116182, - .396575, - .0785899, - .169535, - -.126815, - .411443, - .0912377, - .185173, - -.138015, - .426256, - .105607, - .201755, - -.149325, - .439607, - .121551, - .221334, - -.161207, - .455467, - .139608, - .241461, - -.173162, - .469096, - .159591, - .26294, - -.18504, - .481014, - .18156, - .286776, - -.196881, - .493291, - .205781, - .311596, - -.208311, - .503556, - .231819, - .338667, - -.219671, - .513268, - .260274, - .366021, - -.230451, - .519414, - .290862, - .395875, - -.240131, - .526766, - .323196, - .425564, - -.248566, - .52905, - .357071, - .457094, - -.256195, - .530796, - .393262, - .488286, - -.262331, - .528703, - .430797, - .522291, - -.267141, - .52727, - .470231, - .554172, - -.270411, - .519848, - .510477, - .586427, - -.271986, - .510307, - .551594, - .619638, - -.27192, - .499158, - .593849, - .650656, - -.269817, - .483852, - .636314, - .68284, - -.266267, - .467515, - .679679, - .714356, - -.26113, - .44931, - .723884, - .742717, - -.254067, - .425789, - .767245, - .770894, - -.245652, - .401144, - .811819, - .797358, - -.235554, - .374224, - .856315, - .823377, - -.223896, - .346167, - .901077, - .847456, - -.210865, - .316056, - .946502, - .870697, - -.196574, - .284503, - .993711, - .891068, - -.180814, - .251628, - 1.04134, - .909267, - -.163314, - .219065, - 1.08609, - .925653, - -.143304, - .186446, - 1.12702, - .940017, - -.121322, - .153416, - 1.16371, - .952398, - -.0973872, - .120334, - 1.19712, - .967568, - -.0698785, - .08352, - 1.22791, - .984772, - -.0390031, - .0439209, - 1.25672, - 1.00026, - -.0070087, - .00315668, - 1.28428, - .0556653, - -459654e-11, - .227325, - 112556e-11, - .0565238, - -116382e-9, - .230826, - 284985e-10, - .0565717, - -465666e-9, - .231026, - 114036e-9, - .0565859, - -.00104773, - .231079, - 256656e-9, - .0565761, - -.00186255, - .231025, - 45663e-8, - .0565913, - -.00291002, - .231058, - 714664e-9, - .0566108, - -.00418998, - .231085, - .00103224, - .0566532, - -.00570206, - .231169, - .00141202, - .0567473, - -.00743666, - .231417, - .00186018, - .0568567, - -.00940298, - .231661, - .00238264, - .0569859, - -.0115991, - .231895, - .00298699, - .0572221, - -.0140096, - .232456, - .00368957, - .057519, - -.0166508, - .233096, - .00450303, - .0579534, - -.01951, - .234094, - .00544945, - .0585922, - -.0225991, - .235629, - .00655564, - .0595647, - -.0259416, - .238106, - .00785724, - .0609109, - -.0295661, - .241557, - .00939127, - .0628751, - -.0335126, - .246652, - .0112198, - .0656908, - -.0378604, - .254091, - .0134168, - .0691347, - -.0426543, - .262666, - .0160374, - .0732165, - -.0478967, - .272029, - .0191514, - .0782863, - -.0536716, - .283007, - .0228597, - .0843973, - -.0600683, - .295732, - .0272829, - .0913598, - -.0670095, - .308779, - .032484, - .0994407, - -.0745516, - .322886, - .0385886, - .108189, - -.082712, - .336408, - .0457133, - .118574, - -.0914927, - .351692, - .0539832, - .129989, - -.100854, - .366502, - .0635162, - .142722, - -.110837, - .381675, - .0744386, - .156654, - -.121353, - .3963, - .0868483, - .172151, - -.132414, - .411477, - .100963, - .188712, - -.143809, - .42508, - .116795, - .208093, - -.155765, - .441328, - .134715, - .227936, - -.167608, - .454328, - .154396, - .249495, - -.179579, - .467235, - .176179, - .27362, - -.191488, - .480248, - .200193, - .296371, - -.202618, - .487886, - .225775, - .324234, - -.214133, - .499632, - .25441, - .353049, - -.225212, - .509532, - .285077, - .381785, - -.234875, - .514265, - .317047, - .414038, - -.244205, - .521282, - .351874, - .445251, - -.252145, - .522931, - .388279, - .476819, - -.258433, - .520947, - .425825, - .509209, - -.263411, - .517669, - .465104, - .542759, - -.266732, - .512841, - .505741, - .574822, - -.268263, - .503317, - .547611, - .609324, - -.268489, - .493035, - .590953, - .641772, - -.266941, - .478816, - .63488, - .674049, - -.263297, - .462863, - .679072, - .705071, - -.257618, - .442931, - .723487, - .734709, - -.250625, - .421299, - .768708, - .763704, - -.24179, - .397085, - .814375, - .791818, - -.231115, - .370577, - .859907, - .817439, - -.21922, - .34232, - .906715, - .843202, - -.205658, - .312627, - .953943, - .866639, - -.190563, - .280933, - 1.00185, - .888129, - -.173978, - .248393, - 1.05105, - .907239, - -.155485, - .216007, - 1.09704, - .923893, - -.134782, - .183233, - 1.13857, - .938882, - -.11249, - .150376, - 1.17539, - .952464, - -.0890706, - .117177, - 1.20924, - .968529, - -.0646523, - .0813095, - 1.24055, - .984763, - -.038606, - .0439378, - 1.27018, - 1.00053, - -.01238, - .00598668, - 1.29873, - .0437928, - -409594e-11, - .204012, - 8.79224e-7, - .0440166, - -103395e-9, - .205049, - 221946e-10, - .0440529, - -413633e-9, - .205225, - 887981e-10, - .0440493, - -930594e-9, - .2052, - 199858e-9, - .0439884, - -.00165352, - .204901, - 355495e-9, - .0440716, - -.0025849, - .205255, - 556983e-9, - .0440968, - -.00372222, - .205311, - 805326e-9, - .0441359, - -.00506478, - .205391, - .00110333, - .0442231, - -.00660384, - .205638, - .00145768, - .0443254, - -.00835246, - .205877, - .00187275, - .0444832, - -.0102992, - .20627, - .00235938, - .0447001, - -.0124449, - .206796, - .0029299, - .0450168, - -.0147935, - .207593, - .0036005, - .0454816, - -.017336, - .208819, - .00439246, - .0462446, - -.0201156, - .211036, - .00533864, - .0473694, - -.0231568, - .214388, - .00646984, - .0490191, - -.0264941, - .219357, - .00783856, - .0512776, - -.030184, - .226061, - .00950182, - .0541279, - -.0342661, - .234094, - .0115156, - .0578989, - -.0388539, - .244297, - .0139687, - .0620835, - -.0438735, - .254457, - .0169015, - .0673497, - -.04951, - .266706, - .0204554, - .0731759, - -.0556263, - .278753, - .0246606, - .0803937, - -.0624585, - .29309, - .0297126, - .0879287, - -.0697556, - .305856, - .0355868, - .0970669, - -.0778795, - .321059, - .0425768, - .106508, - -.0863541, - .333873, - .05056, - .11776, - -.0955935, - .349008, - .0598972, - .130081, - -.105438, - .363776, - .0706314, - .144454, - -.115899, - .380112, - .0828822, - .1596, - -.126827, - .394843, - .0967611, - .176097, - -.138161, - .409033, - .112381, - .194726, - -.149904, - .424257, - .129952, - .213944, - -.161675, - .436945, - .149333, - .235516, - -.173659, - .450176, - .170892, - .260564, - -.185963, - .466305, - .194984, - .285183, - -.197582, - .477328, - .220805, - .311095, - -.208697, - .486566, - .248694, - .338924, - -.219519, - .494811, - .279015, - .369757, - -.229766, - .504065, - .311725, - .3996, - -.238879, - .507909, - .345844, - .430484, - -.246802, - .509805, - .381749, - .46413, - -.253924, - .511436, - .420251, - .497077, - -.259319, - .508787, - .459957, - .530434, - -.263297, - .50394, - .501356, - .565725, - -.265619, - .49804, - .544252, - .599254, - -.265842, - .487346, - .587856, - .631251, - -.263978, - .472975, - .631969, - .663972, - -.26043, - .457135, - .677471, - .697724, - -.255358, - .439844, - .723744, - .727725, - -.248308, - .417872, - .770653, - .756417, - -.239181, - .39273, - .817357, - .785419, - -.22814, - .367839, - .864221, - .81266, - -.215681, - .339449, - .912701, - .839391, - -.201623, - .309279, - .962419, - .86366, - -.185624, - .278029, - 1.0122, - .885028, - -.16797, - .245294, - 1.06186, - .904639, - -.148336, - .212689, - 1.10934, - .922048, - -.12637, - .179616, - 1.15063, - .936952, - -.102928, - .146749, - 1.18885, - .951895, - -.0785268, - .112733, - 1.22352, - .967198, - -.0530153, - .0760056, - 1.25681, - .984405, - -.02649, - .0383183, - 1.28762, - 1.00021, - 70019e-8, - -20039e-8, - 1.31656, - .0325964, - -355447e-11, - .176706, - 6.55682e-7, - .0329333, - -899174e-10, - .178527, - 165869e-10, - .0329181, - -359637e-9, - .178453, - 663498e-10, - .0329085, - -808991e-9, - .178383, - 149332e-9, - .0329181, - -.00143826, - .178394, - 265873e-9, - .0329425, - -.00224678, - .178517, - 416597e-9, - .0329511, - -.00323575, - .17849, - 603299e-9, - .033011, - -.00439875, - .178695, - 829422e-9, - .0330733, - -.00574059, - .178843, - .00109908, - .0331857, - -.00725896, - .179176, - .00141933, - .0333445, - -.00895289, - .179618, - .0017999, - .0335674, - -.0108219, - .180238, - .00225316, - .033939, - -.0128687, - .181417, - .00279765, - .0345239, - -.015114, - .183395, - .0034564, - .0354458, - -.017596, - .186616, - .00425864, - .0368313, - -.0203524, - .191547, - .00524936, - .0386115, - -.0234105, - .197508, - .00647033, - .0410303, - -.0268509, - .205395, - .00798121, - .0442245, - -.0307481, - .215365, - .0098557, - .0478659, - -.0350863, - .225595, - .0121417, - .0522416, - -.0399506, - .236946, - .0149385, - .0574513, - -.045357, - .249442, - .0183189, - .0631208, - -.0512863, - .261222, - .0223644, - .0701124, - -.0579273, - .275418, - .0272418, - .0777331, - -.0650652, - .288989, - .0329458, - .0862709, - -.0728813, - .302546, - .0396819, - .096103, - -.081363, - .317164, - .04757, - .106976, - -.0904463, - .331733, - .0567012, - .119175, - -.100105, - .34661, - .067202, - .132919, - -.110375, - .362249, - .0792588, - .147727, - -.121115, - .376978, - .0928672, - .163618, - -.132299, - .390681, - .108228, - .182234, - -.143887, - .406571, - .125502, - .201809, - -.155827, - .42042, - .144836, - .225041, - -.168357, - .438411, - .166706, - .247621, - -.18004, - .450368, - .189909, - .27097, - -.191536, - .460083, - .215251, - .296658, - -.203024, - .469765, - .243164, - .325892, - -.214056, - .481837, - .273388, - .35406, - -.224104, - .487474, - .305344, - .384372, - -.233489, - .492773, - .339741, - .41749, - -.241874, - .498451, - .376287, - .45013, - -.248834, - .499632, - .414195, - .481285, - -.254658, - .495233, - .454077, - .519183, - -.259367, - .496401, - .496352, - .551544, - -.261818, - .487686, - .538798, - .587349, - -.262964, - .479453, - .583626, - .621679, - -.262128, - .467709, - .629451, - .654991, - -.258998, - .452123, - .67566, - .686873, - -.254119, - .433495, - .723248, - .719801, - -.246946, - .413657, - .771156, - .750355, - -.237709, - .390366, - .81989, - .780033, - -.226549, - .364947, - .868601, - .809254, - -.214186, - .337256, - .920034, - .836576, - -.199639, - .307395, - .971706, - .861774, - -.183169, - .275431, - 1.02479, - .885707, - -.165111, - .243431, - 1.07837, - .904742, - -.144363, - .210921, - 1.12783, - .915604, - -.121305, - .17647, - 1.17254, - .930959, - -.0962119, - .143106, - 1.21012, - .948404, - -.069969, - .108112, - 1.24474, - .967012, - -.0427586, - .0708478, - 1.27718, - .984183, - -.0147043, - .032335, - 1.3083, - .999577, - .0142165, - -.00726867, - 1.3382, - .0229227, - -299799e-11, - .148623, - 4.62391e-7, - .0232194, - -758796e-10, - .15054, - 117033e-10, - .0232315, - -303636e-9, - .15063, - 468397e-10, - .0232354, - -683189e-9, - .150624, - 105472e-9, - .0232092, - -.0012136, - .150445, - 187744e-9, - .0232523, - -.00189765, - .150679, - 294847e-9, - .0232828, - -.00273247, - .150789, - 428013e-9, - .0233371, - -.00371287, - .150995, - 591134e-9, - .0234015, - -.00484794, - .15118, - 787642e-9, - .023514, - -.00612877, - .151562, - .00102547, - .023679, - -.00756125, - .152116, - .00131351, - .0239559, - -.00914651, - .153162, - .00166594, - .0244334, - -.010904, - .155133, - .00210182, - .025139, - -.0128615, - .158035, - .00264406, - .0262598, - -.0150628, - .162751, - .00332923, - .0277875, - -.0175532, - .168944, - .00419773, - .0298472, - -.0203981, - .176835, - .00530034, - .0325444, - -.023655, - .186686, - .00669777, - .0355581, - -.0272982, - .196248, - .00842661, - .0392841, - -.0314457, - .207352, - .0105854, - .0436815, - -.0361157, - .219279, - .0132458, - .0485272, - -.0412932, - .230728, - .0164736, - .0541574, - -.0470337, - .242994, - .0203715, - .0609479, - -.0535002, - .257042, - .0250953, - .0685228, - -.0605409, - .27102, - .0306856, - .0768042, - -.0680553, - .28406, - .037193, - .0864844, - -.0765011, - .299186, - .0449795, - .0969415, - -.0852674, - .3132, - .0538316, - .108478, - -.0947333, - .327138, - .0641149, - .121705, - -.10481, - .342345, - .0759185, - .136743, - -.115474, - .358472, - .0894116, - .152986, - -.126536, - .374067, - .104562, - .170397, - -.138061, - .388267, - .121632, - .191392, - -.150203, - .406467, - .140996, - .211566, - -.161751, - .418641, - .161696, - .233567, - -.173407, - .430418, - .184557, - .257769, - -.185397, - .44277, - .210092, - .28531, - -.197048, - .457191, - .237827, - .311726, - -.20784, - .464712, - .267253, - .340537, - -.218345, - .472539, - .299332, - .372921, - -.228306, - .482331, - .333988, - .402924, - -.236665, - .484378, - .369722, - .434475, - -.244097, - .484717, - .407836, - .469736, - -.250547, - .487093, - .448465, - .505045, - -.25511, - .485575, - .490263, - .540262, - -.258444, - .481225, - .534495, - .576347, - -.259903, - .473481, - .579451, - .608656, - -.259572, - .4603, - .625604, - .646679, - -.257908, - .450341, - .674511, - .679902, - -.253663, - .431561, - .723269, - .714159, - -.247419, - .412684, - .773263, - .745345, - -.239122, - .389388, - .824182, - .778248, - -.228837, - .365361, - .876634, - .807208, - -.216197, - .337667, - .92945, - .835019, - -.201772, - .307197, - .985261, - .860261, - -.185291, - .274205, - 1.04299, - .877601, - -.165809, - .240178, - 1.09816, - .898211, - -.143897, - .207571, - 1.14694, - .915789, - -.119513, - .174904, - 1.19008, - .931831, - -.0932919, - .141423, - 1.2297, - .949244, - -.0656528, - .105603, - 1.26553, - .967527, - -.0370262, - .0679551, - 1.29986, - .984139, - -.00730117, - .0283133, - 1.33252, - .999713, - .0234648, - -.0121785, - 1.36397, - .0152135, - -245447e-11, - .122795, - 3.04092e-7, - .0151652, - -615778e-10, - .122399, - 76292e-10, - .0151181, - -245948e-9, - .122023, - 304802e-10, - .0151203, - -553394e-9, - .12203, - 686634e-10, - .015125, - -983841e-9, - .122037, - 122463e-9, - .0151427, - -.00153774, - .12214, - 192706e-9, - .0151708, - -.0022103, - .122237, - 281219e-9, - .0152115, - -.00300741, - .12238, - 390804e-9, - .0152877, - -.00392494, - .1227, - 526317e-9, - .015412, - -.00496597, - .123244, - 69443e-8, - .0156201, - -.00613314, - .124228, - 90547e-8, - .0159658, - -.00744113, - .125945, - .0011732, - .0165674, - -.00892546, - .129098, - .00151888, - .017487, - -.010627, - .133865, - .00197007, - .018839, - -.0126043, - .140682, - .0025637, - .020554, - -.0148814, - .148534, - .00333637, - .0226727, - -.0175123, - .157381, - .00433738, - .0251879, - -.0205266, - .166685, - .00561664, - .0283635, - -.0240319, - .177796, - .00725563, - .0318694, - -.0279432, - .188251, - .00928811, - .0361044, - -.0324313, - .200038, - .011835, - .0406656, - -.0373527, - .210685, - .0149146, - .0463846, - -.0430132, - .224182, - .0187254, - .0525696, - -.0491013, - .23634, - .0232283, - .0598083, - -.0559175, - .250013, - .0286521, - .0679437, - -.0633657, - .263981, - .0350634, - .0771181, - -.0714602, - .278072, - .0425882, - .0881273, - -.0803502, - .29511, - .0514487, - .0996628, - -.0896903, - .309976, - .0615766, - .112702, - -.099644, - .325611, - .0732139, - .126488, - -.109829, - .339321, - .0862324, - .142625, - -.120859, - .35574, - .101275, - .15953, - -.131956, - .369845, - .117892, - .176991, - -.143145, - .38146, - .136205, - .199715, - -.155292, - .40052, - .157252, - .220787, - -.167066, - .412055, - .179966, - .243697, - -.178396, - .423133, - .204418, - .272106, - -.190433, - .439524, - .232141, - .297637, - -.201265, - .447041, - .261109, - .325273, - -.211834, - .454488, - .292627, - .357219, - -.221889, - .465004, - .326669, - .387362, - -.230729, - .468527, - .362426, - .423131, - -.23924, - .475836, - .401533, - .45543, - -.246067, - .475017, - .441902, - .493393, - -.251557, - .478017, - .484239, - .526253, - -.255571, - .4709, - .528586, - .560554, - -.257752, - .463167, - .574346, - .599306, - -.258076, - .456452, - .621655, - .634541, - -.256471, - .443725, - .670492, - .668907, - -.253283, - .428719, - .721943, - .705619, - -.247562, - .411348, - .772477, - .739034, - -.240626, - .388939, - .8264, - .771408, - -.231493, - .36425, - .881702, - .803312, - -.220125, - .337321, - .9385, - .828457, - -.206645, - .305364, - .997437, - .854819, - -.190664, - .273715, - 1.05693, - .878666, - -.171429, - .242218, - 1.11251, - .898404, - -.149235, - .209556, - 1.16398, - .917416, - -.12435, - .176863, - 1.21014, - .933133, - -.0972703, - .142775, - 1.25178, - .95066, - -.0683607, - .106735, - 1.29028, - .968589, - -.0378724, - .0681609, - 1.32703, - .984776, - -.00605712, - .0273966, - 1.36158, - .99994, - .0263276, - -.0138124, - 1.3943, - .00867437, - -186005e-11, - .0928979, - 1.73682e-7, - .00864003, - -466389e-10, - .0925237, - 435505e-11, - .00864593, - -186594e-9, - .0925806, - 174322e-10, - .00864095, - -419639e-9, - .0924903, - 392862e-10, - .00863851, - -746272e-9, - .0924589, - 702598e-10, - .00868531, - -.00116456, - .0929, - 111188e-9, - .00869667, - -.00167711, - .0928529, - 163867e-9, - .00874332, - -.00228051, - .0930914, - 23104e-8, - .00882709, - -.00297864, - .0935679, - 31741e-8, - .00898874, - -.00377557, - .0946165, - 430186e-9, - .00929346, - -.00469247, - .0967406, - 580383e-9, - .00978271, - -.00575491, - .100084, - 783529e-9, - .0105746, - -.00701514, - .105447, - .00106304, - .0116949, - -.00851797, - .112494, - .00144685, - .0130419, - -.0102757, - .119876, - .00196439, - .0148375, - -.012381, - .129034, - .00266433, - .0168725, - -.01482, - .137812, - .00358364, - .0193689, - -.0176563, - .147696, - .00478132, - .0222691, - -.0209211, - .157795, - .00631721, - .0256891, - -.0246655, - .168431, - .00826346, - .0294686, - -.0288597, - .178587, - .0106714, - .0340412, - -.0336441, - .190251, - .0136629, - .0393918, - -.039033, - .202999, - .0173272, - .0453947, - -.0450087, - .215655, - .0217448, - .0521936, - -.0515461, - .228686, - .0269941, - .0600279, - -.058817, - .242838, - .033272, - .0692398, - -.0667228, - .258145, - .0406457, - .0793832, - -.0752401, - .273565, - .0492239, - .0902297, - -.0841851, - .287735, - .0590105, - .102014, - -.0936479, - .301161, - .0702021, - .116054, - -.103967, - .317438, - .0832001, - .13191, - -.114622, - .334166, - .0977951, - .148239, - -.125452, - .348192, - .113985, - .165809, - -.136453, - .361094, - .131928, - .184616, - -.147648, - .373534, - .151811, - .207491, - -.159607, - .39101, - .174476, - .230106, - -.171119, - .402504, - .198798, - .257036, - -.182906, - .418032, - .225796, - .281172, - -.193605, - .425468, - .254027, - .312034, - -.204771, - .440379, - .285713, - .340402, - -.214988, - .445406, - .319196, - .370231, - -.224711, - .44968, - .35537, - .407105, - -.233516, - .460747, - .393838, - .439037, - -.240801, - .460624, - .433747, - .47781, - -.24762, - .465957, - .477234, - .510655, - -.251823, - .460054, - .52044, - .550584, - -.255552, - .459172, - .567853, - .585872, - -.257036, - .450311, - .615943, - .620466, - -.257535, - .437763, - .667693, - .660496, - -.255248, - .426639, - .718988, - .695578, - -.251141, - .409185, - .772503, - .732176, - -.244718, - .39015, - .827023, - .760782, - -.236782, - .362594, - .885651, - .79422, - -.225923, - .33711, - .943756, - .824521, - -.213855, - .308272, - 1.00874, - .854964, - -.197723, - .278529, - 1.06764, - .878065, - -.179209, - .246208, - 1.12836, - .899834, - -.157569, - .21329, - 1.18318, - .918815, - -.133206, - .181038, - 1.23161, - .934934, - -.106545, - .146993, - 1.27644, - .952115, - -.0780574, - .111175, - 1.31842, - .96906, - -.0478279, - .0728553, - 1.35839, - .985178, - -.0160014, - .032579, - 1.39697, - 1.00039, - .0173126, - -.0095256, - 1.43312, - .00384146, - -124311e-11, - .0613583, - 7.78271e-8, - .00390023, - -314043e-10, - .0622919, - 196626e-11, - .00389971, - -125622e-9, - .0622632, - 787379e-11, - .00389491, - -282352e-9, - .0620659, - 1778e-8, - .00391618, - -502512e-9, - .0624687, - 320918e-10, - .00392662, - -784458e-9, - .0625113, - 515573e-10, - .00396053, - -.00112907, - .0628175, - 778668e-10, - .00401911, - -.00153821, - .0633286, - 113811e-9, - .00414994, - -.0020208, - .0646443, - 16445e-8, - .00441223, - -.00260007, - .0673886, - 237734e-9, - .00484427, - -.0033097, - .0716528, - 345929e-9, - .00549109, - -.00418966, - .0774998, - 505987e-9, - .00636293, - -.00527331, - .0844758, - 739208e-9, - .00746566, - -.00660428, - .0921325, - .00107347, - .00876625, - -.00818826, - .0997067, - .00153691, - .0103125, - -.0100811, - .107433, - .00217153, - .0123309, - -.0123643, - .117088, - .00303427, - .0146274, - -.0150007, - .126438, - .00416018, - .0172295, - -.0180531, - .135672, - .00561513, - .0204248, - -.0215962, - .146244, - .007478, - .0241597, - -.0256234, - .157481, - .00981046, - .0284693, - -.0302209, - .169125, - .0127148, - .033445, - -.0353333, - .181659, - .0162453, - .0391251, - -.0410845, - .1944, - .0205417, - .0454721, - -.0473451, - .207082, - .0256333, - .0530983, - -.0542858, - .221656, - .0317036, - .0615356, - -.0618384, - .236036, - .0388319, - .0703363, - -.0697631, - .248398, - .046974, - .0810391, - -.0784757, - .263611, - .0565246, - .0920144, - -.0873488, - .275857, - .0671724, - .105584, - -.0973652, - .292555, - .0798105, - .119506, - -.107271, - .306333, - .0935945, - .134434, - -.117608, - .318888, - .109106, - .153399, - -.128938, - .337552, - .127074, - .171258, - -.139944, - .349955, - .14643, - .191059, - -.151288, - .361545, - .168, - .215069, - -.163018, - .378421, - .192082, - .237838, - -.174226, - .38879, - .217838, - .266965, - -.186063, - .405857, - .246931, - .292827, - -.196909, - .414146, - .277505, - .324352, - -.207473, - .426955, - .310711, - .354427, - -.217713, - .433429, - .346794, - .389854, - -.227183, - .443966, - .385237, - .420749, - -.235131, - .44471, - .424955, - .459597, - -.242786, - .451729, - .468446, - .495316, - -.248767, - .45072, - .513422, - .534903, - -.253351, - .450924, - .560618, - .572369, - -.256277, - .445266, - .609677, - .612383, - -.2576, - .438798, - .660995, - .644037, - -.256931, - .421693, - .713807, - .686749, - -.254036, - .4109, - .767616, - .719814, - -.249785, - .390151, - .82533, - .754719, - -.244283, - .367847, - .888311, - .792022, - -.235076, - .345013, - .948177, - .822404, - -.225061, - .316193, - 1.01661, - .853084, - -.211113, - .287013, - 1.08075, - .879871, - -.19449, - .255424, - 1.14501, - .901655, - -.174023, - .222879, - 1.20203, - .919957, - -.1509, - .18989, - 1.25698, - .938412, - -.124923, - .15606, - 1.30588, - .953471, - -.0968139, - .120512, - 1.3529, - .970451, - -.066734, - .0828515, - 1.3986, - .985522, - -.034734, - .0424458, - 1.44148, - 1.00099, - -.00102222, - 678929e-9, - 1.48398, - 965494e-9, - -6.27338e-7, - .0306409, - 1.97672e-8, - 99168e-8, - -158573e-10, - .0314638, - 4.99803e-7, - 991068e-9, - -634012e-10, - .031363, - 200682e-11, - 974567e-9, - -14144e-8, - .03036, - 457312e-11, - 998079e-9, - -252812e-9, - .031496, - 860131e-11, - .00102243, - -396506e-9, - .0319955, - 148288e-10, - .00107877, - -577593e-9, - .0331376, - 249141e-10, - .00121622, - -816816e-9, - .0359396, - 423011e-10, - .0014455, - -.00113761, - .0399652, - 724613e-10, - .00178791, - -.00156959, - .0450556, - 123929e-9, - .00225668, - -.00214064, - .0508025, - 208531e-9, - .00285627, - -.00287655, - .0568443, - 341969e-9, - .0035991, - -.00380271, - .0630892, - 544158e-9, - .00455524, - -.00496264, - .0702204, - 842423e-9, - .00569143, - -.0063793, - .0773426, - .00126704, - .00716928, - -.00813531, - .0860839, - .00186642, - .00885307, - -.0101946, - .0944079, - .00267014, - .0109316, - -.0126386, - .103951, - .00374033, - .0133704, - -.0154876, - .113786, - .0051304, - .0161525, - -.0187317, - .123477, - .00688858, - .0194267, - -.0224652, - .133986, - .00910557, - .0230967, - -.0265976, - .143979, - .0118074, - .0273627, - -.0312848, - .154645, - .0151266, - .0323898, - -.0365949, - .166765, - .0191791, - .0379225, - -.0422914, - .177932, - .0239236, - .0447501, - -.0487469, - .19167, - .0296568, - .0519391, - -.0556398, - .203224, - .0362924, - .0599464, - -.0631646, - .215652, - .0440585, - .0702427, - -.0714308, - .232089, - .0531619, - .0806902, - -.0800605, - .245258, - .0634564, - .0923194, - -.0892815, - .258609, - .0752481, - .106938, - -.09931, - .276654, - .0888914, - .121238, - -.109575, - .289847, - .104055, - .138817, - -.120461, - .307566, - .121266, - .15595, - -.131209, - .320117, - .139944, - .178418, - -.143049, - .339677, - .161591, - .197875, - -.154074, - .349886, - .184303, - .224368, - -.166307, - .369352, - .210669, - .252213, - -.178051, - .386242, - .238895, - .277321, - -.189335, - .395294, - .269182, - .310332, - -.200683, - .412148, - .302508, - .338809, - -.210856, - .418266, - .337264, - .372678, - -.220655, - .428723, - .374881, - .405632, - -.230053, - .433887, - .415656, - .442293, - -.237993, - .439911, - .457982, - .477256, - -.244897, - .440175, - .502831, - .515592, - -.250657, - .441079, - .550277, - .550969, - -.255459, - .435219, - .601102, - .592883, - -.257696, - .432882, - .651785, - .629092, - -.259894, - .421054, - .708961, - .672033, - -.258592, - .41177, - .763806, - .709147, - -.256525, - .395267, - .824249, - .745367, - -.254677, - .375013, - .8951, - .784715, - -.247892, - .353906, - .959317, - .818107, - -.240162, - .327801, - 1.03153, - .847895, - -.229741, - .298821, - 1.10601, - .879603, - -.213084, - .269115, - 1.164, - .902605, - -.195242, - .236606, - 1.22854, - .922788, - -.174505, - .203442, - 1.29017, - .944831, - -.150169, - .169594, - 1.34157, - .959656, - -.124099, - .135909, - 1.3956, - .972399, - -.0960626, - .0990563, - 1.45128, - .986549, - -.0657097, - .0602348, - 1.50312, - 1.00013, - -.0333558, - .0186694, - 1.55364, - 619747e-11, - -1e-7, - .00778326, - 796756e-16, - 2.37499e-8, - -9.99999e-8, - 282592e-10, - 114596e-15, - 100292e-11, - -166369e-11, - 250354e-9, - 6.77492e-9, - 350752e-11, - -637769e-11, - 357289e-9, - 6.31655e-8, - 826445e-11, - -174689e-10, - 516179e-9, - 3.1851e-7, - 242481e-10, - -450868e-10, - .0010223, - 130577e-11, - 455631e-10, - -89044e-9, - .00144302, - 374587e-11, - 971222e-10, - -178311e-9, - .00241912, - 102584e-10, - 171403e-9, - -313976e-9, - .00354938, - 236481e-10, - 292747e-9, - -520026e-9, - .00513765, - 496014e-10, - 789827e-9, - -.00118187, - .0238621, - 139056e-9, - .00114093, - -.00171827, - .0286691, - 244093e-9, - .00176119, - -.00249667, - .0368565, - 420623e-9, - .0022233, - -.00333742, - .0400469, - 65673e-8, - .00343382, - -.00481976, - .0535751, - .00109323, - .00427602, - -.00600755, - .057099, - .00155268, - .00461435, - -.00737637, - .0551084, - .00215031, - .00695698, - -.00971401, - .0715767, - .00316529, - .00867619, - -.0120943, - .0793314, - .00436995, - .0106694, - -.0148202, - .0869391, - .0058959, - .0140351, - -.0183501, - .101572, - .00798757, - .0168939, - -.022006, - .11018, - .0104233, - .020197, - -.0261568, - .119041, - .0134167, - .0254702, - -.0312778, - .135404, - .0173009, - .0298384, - -.0362469, - .1437, - .0215428, - .035159, - -.042237, - .15512, - .0268882, - .0427685, - -.0488711, - .17128, - .033235, - .0494848, - -.0557997, - .181813, - .0404443, - .0592394, - -.0635578, - .198745, - .0490043, - .0681463, - -.071838, - .210497, - .0588239, - .0804753, - -.0809297, - .228864, - .0702835, - .0942205, - -.0906488, - .247008, - .0834012, - .106777, - -.100216, - .258812, - .0975952, - .124471, - -.110827, - .278617, - .114162, - .138389, - -.121193, - .287049, - .131983, - .159543, - -.13253, - .307151, - .152541, - .176432, - -.143611, - .31564, - .174673, - .201723, - -.15548, - .33538, - .199842, - .229721, - -.167166, - .355256, - .227097, - .250206, - -.178238, - .360047, - .256014, - .282118, - -.189905, - .378761, - .28855, - .312821, - -.201033, - .39181, - .323348, - .341482, - -.211584, - .397716, - .360564, - .377368, - -.221314, - .410141, - .400004, - .418229, - -.230474, - .423485, - .442371, - .444881, - -.239443, - .418874, - .488796, - .488899, - -.245987, - .427545, - .535012, - .520317, - -.253948, - .422147, - .589678, - .568566, - -.256616, - .42719, - .637683, - .599607, - -.26376, - .415114, - .703363, - .64222, - -.268687, - .408715, - .771363, - .685698, - -.2694, - .399722, - .83574, - .732327, - -.266642, - .388651, - .897764, - .769873, - -.267712, - .369198, - .983312, - .806733, - -.263479, - .346802, - 1.06222, - .843466, - -.254575, - .321368, - 1.13477, - .873008, - -.242749, - .29211, - 1.20712, - .908438, - -.22725, - .262143, - 1.27465, - .936321, - -.207621, - .228876, - 1.33203, - .950353, - -.187932, - .19484, - 1.40439, - .96442, - -.165154, - .163178, - 1.4732, - .979856, - -.139302, - .127531, - 1.53574, - .982561, - -.11134, - .0903457, - 1.59982, - .996389, - -.0808124, - .0489007, - 1.6577 - ]; - const LTC_MAT_2 = [ - 1, - 0, - 0, - 0, - 1, - 791421e-36, - 0, - 0, - 1, - 104392e-29, - 0, - 0, - 1, - 349405e-26, - 0, - 0, - 1, - 109923e-23, - 0, - 0, - 1, - 947414e-22, - 0, - 0, - 1, - 359627e-20, - 0, - 0, - 1, - 772053e-19, - 0, - 0, - 1, - 108799e-17, - 0, - 0, - 1, - 110655e-16, - 0, - 0, - 1, - 865818e-16, - 0, - 0, - .999998, - 545037e-15, - 0, - 0, - .999994, - 2.85095e-9, - 0, - 0, - .999989, - 1.26931e-8, - 0, - 0, - .999973, - 4.89938e-8, - 0, - 0, - .999947, - 1.66347e-7, - 0, - 0, - .999894, - 5.02694e-7, - 0, - 0, - .999798, - 136532e-11, - 0, - 0, - .999617, - 335898e-11, - 0, - 0, - .999234, - 752126e-11, - 0, - 0, - .998258, - 152586e-10, - 0, - 0, - .99504, - 266207e-10, - 0, - 0, - .980816, - 236802e-10, - 0, - 0, - .967553, - 207684e-11, - 0, - 0, - .966877, - 403733e-11, - 0, - 0, - .965752, - 741174e-11, - 0, - 0, - .96382, - 127746e-10, - 0, - 0, - .960306, - 202792e-10, - 0, - 0, - .953619, - 280232e-10, - 0, - 0, - .941103, - 278816e-10, - 0, - 0, - .926619, - 160221e-10, - 0, - 0, - .920983, - 235164e-10, - 0, - 0, - .912293, - 311924e-10, - 0, - .0158731, - .899277, - 348118e-10, - 0, - .0476191, - .880884, - 26041e-9, - 0, - .0793651, - .870399, - 338726e-10, - 0, - .111111, - .856138, - 392906e-10, - 0, - .142857, - .837436, - 372874e-10, - 0, - .174603, - .820973, - 392558e-10, - 0, - .206349, - .803583, - 434658e-10, - 0, - .238095, - .782168, - 40256e-9, - 0, - .269841, - .764107, - 448159e-10, - 0, - .301587, - .743092, - 457627e-10, - 0, - .333333, - .721626, - 455314e-10, - 0, - .365079, - .700375, - 477335e-10, - 0, - .396825, - .677334, - 461072e-10, - 0, - .428571, - .655702, - 484393e-10, - 0, - .460317, - .632059, - 464583e-10, - 0, - .492064, - .610125, - 483923e-10, - 0, - .52381, - .58653, - 464342e-10, - 0, - .555556, - .564508, - 477033e-10, - 0, - .587302, - .541405, - 459263e-10, - 0, - .619048, - .519556, - 46412e-9, - 0, - .650794, - .497292, - 448913e-10, - 0, - .68254, - .475898, - 445789e-10, - 0, - .714286, - .454722, - 433496e-10, - 0, - .746032, - .434042, - 423054e-10, - 0, - .777778, - .414126, - 413737e-10, - 0, - .809524, - .394387, - 397265e-10, - 0, - .84127, - .375841, - 390709e-10, - 0, - .873016, - .357219, - 369938e-10, - 0, - .904762, - .340084, - 365618e-10, - 0, - .936508, - .322714, - 342533e-10, - 0, - .968254, - .306974, - 339596e-10, - 0, - 1, - 1, - 101524e-23, - 0, - 0, - 1, - 10292e-22, - 0, - 0, - 1, - 130908e-23, - 0, - 0, - 1, - 473331e-23, - 0, - 0, - 1, - 625319e-22, - 0, - 0, - 1, - 107932e-20, - 0, - 0, - 1, - 163779e-19, - 0, - 0, - 1, - 203198e-18, - 0, - 0, - 1, - 204717e-17, - 0, - 0, - .999999, - 168995e-16, - 0, - 0, - .999998, - 115855e-15, - 0, - 0, - .999996, - 66947e-14, - 0, - 0, - .999991, - 3.30863e-9, - 0, - 0, - .999983, - 1.41737e-8, - 0, - 0, - .999968, - 5.32626e-8, - 0, - 0, - .99994, - 1.77431e-7, - 0, - 0, - .999891, - 5.28835e-7, - 0, - 0, - .999797, - 142169e-11, - 0, - 0, - .999617, - 347057e-11, - 0, - 0, - .999227, - 77231e-10, - 0, - 0, - .998239, - 155753e-10, - 0, - 0, - .994937, - 268495e-10, - 0, - 0, - .980225, - 213742e-10, - 0, - 0, - .967549, - 21631e-10, - 0, - 0, - .966865, - 417989e-11, - 0, - 0, - .965739, - 763341e-11, - 0, - 0, - .963794, - 130892e-10, - 0, - 0, - .960244, - 206456e-10, - 0, - 0, - .953495, - 282016e-10, - 0, - 148105e-9, - .940876, - 271581e-10, - 0, - .002454, - .926569, - 164159e-10, - 0, - .00867491, - .920905, - 239521e-10, - 0, - .01956, - .912169, - 315127e-10, - 0, - .035433, - .899095, - 346626e-10, - 0, - .056294, - .882209, - 290223e-10, - 0, - .0818191, - .870272, - 342992e-10, - 0, - .111259, - .855977, - 394164e-10, - 0, - .142857, - .837431, - 372343e-10, - 0, - .174603, - .820826, - 396691e-10, - 0, - .206349, - .803408, - 435395e-10, - 0, - .238095, - .782838, - 419579e-10, - 0, - .269841, - .763941, - 450953e-10, - 0, - .301587, - .742904, - 455847e-10, - 0, - .333333, - .721463, - 458833e-10, - 0, - .365079, - .700197, - 477159e-10, - 0, - .396825, - .677501, - 470641e-10, - 0, - .428571, - .655527, - 484732e-10, - 0, - .460317, - .6324, - 476834e-10, - 0, - .492064, - .609964, - 484213e-10, - 0, - .52381, - .586839, - 475541e-10, - 0, - .555556, - .564353, - 476951e-10, - 0, - .587302, - .541589, - 467611e-10, - 0, - .619048, - .519413, - 463493e-10, - 0, - .650794, - .497337, - 453994e-10, - 0, - .68254, - .475797, - 445308e-10, - 0, - .714286, - .454659, - 435787e-10, - 0, - .746032, - .434065, - 424839e-10, - 0, - .777778, - .414018, - 41436e-9, - 0, - .809524, - .39455, - 401902e-10, - 0, - .84127, - .375742, - 390813e-10, - 0, - .873016, - .357501, - 377116e-10, - 0, - .904762, - .339996, - 36535e-9, - 0, - .936508, - .323069, - 351265e-10, - 0, - .968254, - .306897, - 339112e-10, - 0, - 1, - 1, - 10396e-19, - 0, - 0, - 1, - 104326e-20, - 0, - 0, - 1, - 110153e-20, - 0, - 0, - 1, - 144668e-20, - 0, - 0, - 1, - 34528e-19, - 0, - 0, - 1, - 175958e-19, - 0, - 0, - 1, - 12627e-17, - 0, - 0, - 1, - 936074e-18, - 0, - 0, - 1, - 645742e-17, - 0, - 0, - .999998, - 401228e-16, - 0, - 0, - .999997, - 222338e-15, - 0, - 0, - .999995, - 1.0967e-9, - 0, - 0, - .999991, - 4.82132e-9, - 0, - 0, - .999981, - 1.89434e-8, - 0, - 0, - .999967, - 6.67716e-8, - 0, - 0, - .999938, - 2.12066e-7, - 0, - 0, - .999886, - 6.0977e-7, - 0, - 0, - .999792, - 159504e-11, - 0, - 0, - .999608, - 381191e-11, - 0, - 0, - .999209, - 833727e-11, - 0, - 0, - .998179, - 165288e-10, - 0, - 0, - .994605, - 274387e-10, - 0, - 0, - .979468, - 167316e-10, - 0, - 0, - .967529, - 242877e-11, - 0, - 0, - .966836, - 461696e-11, - 0, - 0, - .96569, - 830977e-11, - 0, - 0, - .963706, - 140427e-10, - 0, - 244659e-11, - .960063, - 217353e-10, - 0, - 760774e-9, - .953113, - 286606e-10, - 0, - .00367261, - .940192, - 247691e-10, - 0, - .00940263, - .927731, - 195814e-10, - 0, - .018333, - .920669, - 252531e-10, - 0, - .0306825, - .911799, - 324277e-10, - 0, - .0465556, - .89857, - 340982e-10, - 0, - .0659521, - .883283, - 319622e-10, - 0, - .0887677, - .86989, - 35548e-9, - 0, - .114784, - .855483, - 397143e-10, - 0, - .143618, - .837987, - 391665e-10, - 0, - .174606, - .820546, - 411306e-10, - 0, - .206349, - .802878, - 436753e-10, - 0, - .238095, - .783402, - 444e-7, - 0, - .269841, - .763439, - 458726e-10, - 0, - .301587, - .742925, - 467097e-10, - 0, - .333333, - .721633, - 478887e-10, - 0, - .365079, - .69985, - 481251e-10, - 0, - .396825, - .67783, - 491811e-10, - 0, - .428571, - .655126, - 488199e-10, - 0, - .460318, - .632697, - 496025e-10, - 0, - .492064, - .609613, - 48829e-9, - 0, - .52381, - .587098, - 492754e-10, - 0, - .555556, - .564119, - 482625e-10, - 0, - .587302, - .541813, - 482807e-10, - 0, - .619048, - .519342, - 471552e-10, - 0, - .650794, - .497514, - 466765e-10, - 0, - .68254, - .475879, - 455582e-10, - 0, - .714286, - .454789, - 446007e-10, - 0, - .746032, - .434217, - 435382e-10, - 0, - .777778, - .414086, - 421753e-10, - 0, - .809524, - .394744, - 412093e-10, - 0, - .84127, - .375782, - 396634e-10, - 0, - .873016, - .357707, - 386419e-10, - 0, - .904762, - .340038, - 370345e-10, - 0, - .936508, - .323284, - 359725e-10, - 0, - .968254, - .306954, - 3436e-8, - 0, - 1, - 1, - 599567e-19, - 0, - 0, - 1, - 600497e-19, - 0, - 0, - 1, - 614839e-19, - 0, - 0, - 1, - 686641e-19, - 0, - 0, - 1, - 972658e-19, - 0, - 0, - 1, - 221271e-18, - 0, - 0, - 1, - 833195e-18, - 0, - 0, - 1, - 403601e-17, - 0, - 0, - .999999, - 206001e-16, - 0, - 0, - .999998, - 101739e-15, - 0, - 0, - .999997, - 470132e-15, - 0, - 0, - .999993, - 2.00436e-9, - 0, - 0, - .999988, - 7.83682e-9, - 0, - 0, - .999979, - 2.80338e-8, - 0, - 0, - .999962, - 9.17033e-8, - 0, - 0, - .999933, - 2.74514e-7, - 0, - 0, - .999881, - 7.53201e-7, - 0, - 0, - .999783, - 189826e-11, - 0, - 0, - .999594, - 440279e-11, - 0, - 0, - .999178, - 93898e-10, - 0, - 0, - .998073, - 181265e-10, - 0, - 0, - .993993, - 280487e-10, - 0, - 0, - .979982, - 149422e-10, - 0, - 0, - .968145, - 378481e-11, - 0, - 0, - .966786, - 53771e-10, - 0, - 0, - .965611, - 947508e-11, - 0, - 388934e-10, - .963557, - 156616e-10, - 0, - 9693e-7, - .959752, - 235144e-10, - 0, - .00370329, - .952461, - 291568e-10, - 0, - .00868428, - .940193, - 240102e-10, - 0, - .0161889, - .929042, - 231235e-10, - 0, - .0263948, - .920266, - 273968e-10, - 0, - .0394088, - .911178, - 337915e-10, - 0, - .0552818, - .897873, - 333629e-10, - 0, - .0740138, - .884053, - 351405e-10, - 0, - .0955539, - .869455, - 378034e-10, - 0, - .119795, - .854655, - 399378e-10, - 0, - .14656, - .838347, - 419108e-10, - 0, - .175573, - .820693, - 440831e-10, - 0, - .206388, - .802277, - 445599e-10, - 0, - .238095, - .783634, - 472691e-10, - 0, - .269841, - .763159, - 476984e-10, - 0, - .301587, - .742914, - 491487e-10, - 0, - .333333, - .721662, - 502312e-10, - 0, - .365079, - .699668, - 502817e-10, - 0, - .396825, - .677839, - 51406e-9, - 0, - .428571, - .655091, - 511095e-10, - 0, - .460317, - .632665, - 516067e-10, - 0, - .492064, - .609734, - 512255e-10, - 0, - .52381, - .587043, - 510263e-10, - 0, - .555556, - .564298, - 50565e-9, - 0, - .587302, - .541769, - 497951e-10, - 0, - .619048, - .519529, - 492698e-10, - 0, - .650794, - .497574, - 482066e-10, - 0, - .68254, - .476028, - 473689e-10, - 0, - .714286, - .454961, - 461941e-10, - 0, - .746032, - .434341, - 450618e-10, - 0, - .777778, - .414364, - 438355e-10, - 0, - .809524, - .394832, - 424196e-10, - 0, - .84127, - .376109, - 412563e-10, - 0, - .873016, - .35779, - 396226e-10, - 0, - .904762, - .340379, - 384886e-10, - 0, - .936508, - .323385, - 368214e-10, - 0, - .968254, - .307295, - 356636e-10, - 0, - 1, - 1, - 106465e-17, - 0, - 0, - 1, - 106555e-17, - 0, - 0, - 1, - 107966e-17, - 0, - 0, - 1, - 114601e-17, - 0, - 0, - 1, - 137123e-17, - 0, - 0, - 1, - 21243e-16, - 0, - 0, - .999999, - 489653e-17, - 0, - 0, - .999999, - 160283e-16, - 0, - 0, - .999998, - 62269e-15, - 0, - 0, - .999997, - 251859e-15, - 0, - 0, - .999996, - 996192e-15, - 0, - 0, - .999992, - 3.74531e-9, - 0, - 0, - .999986, - 1.32022e-8, - 0, - 0, - .999975, - 4.33315e-8, - 0, - 0, - .999959, - 1.31956e-7, - 0, - 0, - .999927, - 3.72249e-7, - 0, - 0, - .999871, - 9.72461e-7, - 0, - 0, - .999771, - 235343e-11, - 0, - 0, - .999572, - 52768e-10, - 0, - 0, - .999133, - 109237e-10, - 0, - 0, - .997912, - 203675e-10, - 0, - 0, - .993008, - 279396e-10, - 0, - 0, - .980645, - 139604e-10, - 0, - 0, - .970057, - 646596e-11, - 0, - 0, - .966717, - 65089e-10, - 0, - 474145e-10, - .965497, - 111863e-10, - 0, - 89544e-8, - .96334, - 179857e-10, - 0, - .0032647, - .959294, - 259045e-10, - 0, - .0075144, - .951519, - 292327e-10, - 0, - .0138734, - .940517, - 249769e-10, - 0, - .0224952, - .93014, - 26803e-9, - 0, - .0334828, - .91972, - 303656e-10, - 0, - .0468973, - .910294, - 353323e-10, - 0, - .0627703, - .897701, - 351002e-10, - 0, - .0811019, - .884522, - 388104e-10, - 0, - .10186, - .869489, - 412932e-10, - 0, - .124985, - .853983, - 415781e-10, - 0, - .150372, - .838425, - 454066e-10, - 0, - .177868, - .820656, - 471624e-10, - 0, - .207245, - .801875, - 475243e-10, - 0, - .238143, - .783521, - 505621e-10, - 0, - .269841, - .763131, - 50721e-9, - 0, - .301587, - .74261, - 523293e-10, - 0, - .333333, - .72148, - 528699e-10, - 0, - .365079, - .699696, - 538677e-10, - 0, - .396825, - .677592, - 539255e-10, - 0, - .428571, - .65525, - 546367e-10, - 0, - .460317, - .632452, - 541348e-10, - 0, - .492064, - .609903, - 544976e-10, - 0, - .52381, - .586928, - 536201e-10, - 0, - .555556, - .564464, - 535185e-10, - 0, - .587302, - .541801, - 524949e-10, - 0, - .619048, - .519681, - 51812e-9, - 0, - .650794, - .497685, - 507687e-10, - 0, - .68254, - .47622, - 496243e-10, - 0, - .714286, - .455135, - 485714e-10, - 0, - .746032, - .4346, - 471847e-10, - 0, - .777778, - .414564, - 459294e-10, - 0, - .809524, - .395165, - 444705e-10, - 0, - .84127, - .376333, - 430772e-10, - 0, - .873016, - .358197, - 416229e-10, - 0, - .904762, - .34064, - 401019e-10, - 0, - .936508, - .323816, - 386623e-10, - 0, - .968254, - .307581, - 370933e-10, - 0, - 1, - 1, - 991541e-17, - 0, - 0, - 1, - 992077e-17, - 0, - 0, - 1, - 100041e-16, - 0, - 0, - 1, - 10385e-15, - 0, - 0, - 1, - 115777e-16, - 0, - 0, - 1, - 150215e-16, - 0, - 0, - .999999, - 254738e-16, - 0, - 0, - .999999, - 598822e-16, - 0, - 0, - .999998, - 179597e-15, - 0, - 0, - .999997, - 602367e-15, - 0, - 0, - .999994, - 2.06835e-9, - 0, - 0, - .99999, - 6.94952e-9, - 0, - 0, - .999984, - 2.23363e-8, - 0, - 0, - .999972, - 6.78578e-8, - 0, - 0, - .999952, - 1.93571e-7, - 0, - 0, - .999919, - 5.16594e-7, - 0, - 0, - .99986, - 128739e-11, - 0, - 0, - .999753, - 299298e-11, - 0, - 0, - .999546, - 648258e-11, - 0, - 0, - .999074, - 129985e-10, - 0, - 0, - .997671, - 232176e-10, - 0, - 0, - .991504, - 256701e-10, - 0, - 0, - .981148, - 131141e-10, - 0, - 0, - .971965, - 869048e-11, - 0, - 280182e-10, - .966624, - 808301e-11, - 0, - 695475e-9, - .965344, - 135235e-10, - 0, - .00265522, - .963048, - 210592e-10, - 0, - .00622975, - .958673, - 287473e-10, - 0, - .0116234, - .950262, - 281379e-10, - 0, - .018976, - .940836, - 271089e-10, - 0, - .0283844, - .930996, - 30926e-9, - 0, - .0399151, - .919848, - 348359e-10, - 0, - .0536063, - .909136, - 366092e-10, - 0, - .0694793, - .897554, - 384162e-10, - 0, - .0875342, - .884691, - 430971e-10, - 0, - .107749, - .869414, - 447803e-10, - 0, - .130087, - .853462, - 452858e-10, - 0, - .154481, - .838187, - 495769e-10, - 0, - .180833, - .820381, - 502709e-10, - 0, - .209005, - .801844, - 522713e-10, - 0, - .238791, - .783061, - 541505e-10, - 0, - .269869, - .763205, - 553712e-10, - 0, - .301587, - .742362, - 564909e-10, - 0, - .333333, - .721393, - 572646e-10, - 0, - .365079, - .699676, - 581012e-10, - 0, - .396825, - .677395, - 58096e-9, - 0, - .428571, - .655208, - 585766e-10, - 0, - .460317, - .632451, - 583602e-10, - 0, - .492064, - .609839, - 580234e-10, - 0, - .52381, - .587093, - 577161e-10, - 0, - .555556, - .564467, - 568447e-10, - 0, - .587302, - .542043, - 563166e-10, - 0, - .619048, - .519826, - 55156e-9, - 0, - .650794, - .497952, - 541682e-10, - 0, - .68254, - .476477, - 528971e-10, - 0, - .714286, - .455412, - 514952e-10, - 0, - .746032, - .434926, - 502222e-10, - 0, - .777778, - .4149, - 485779e-10, - 0, - .809524, - .395552, - 472242e-10, - 0, - .84127, - .376712, - 454891e-10, - 0, - .873016, - .358622, - 440924e-10, - 0, - .904762, - .341048, - 422984e-10, - 0, - .936508, - .324262, - 408582e-10, - 0, - .968254, - .308013, - 390839e-10, - 0, - 1, - 1, - 613913e-16, - 0, - 0, - 1, - 614145e-16, - 0, - 0, - 1, - 617708e-16, - 0, - 0, - 1, - 633717e-16, - 0, - 0, - 1, - 681648e-16, - 0, - 0, - 1, - 808291e-16, - 0, - 0, - 1, - 114608e-15, - 0, - 0, - .999998, - 210507e-15, - 0, - 0, - .999997, - 499595e-15, - 0, - 0, - .999995, - 1.39897e-9, - 0, - 0, - .999994, - 4.19818e-9, - 0, - 0, - .999988, - 1.27042e-8, - 0, - 0, - .999979, - 3.75153e-8, - 0, - 0, - .999965, - 1.06206e-7, - 0, - 0, - .999945, - 2.85381e-7, - 0, - 0, - .999908, - 7.23611e-7, - 0, - 0, - .999846, - 17255e-10, - 0, - 0, - .999733, - 386104e-11, - 0, - 0, - .999511, - 808493e-11, - 0, - 0, - .998993, - 156884e-10, - 0, - 0, - .997326, - 265538e-10, - 0, - 0, - .989706, - 206466e-10, - 0, - 0, - .981713, - 130756e-10, - 0, - 70005e-10, - .973636, - 106473e-10, - 0, - 464797e-9, - .966509, - 10194e-9, - 0, - .00201743, - .965149, - 165881e-10, - 0, - .00497549, - .962669, - 249147e-10, - 0, - .00953262, - .95786, - 317449e-10, - 0, - .0158211, - .949334, - 281045e-10, - 0, - .0239343, - .941041, - 303263e-10, - 0, - .0339372, - .931575, - 356754e-10, - 0, - .0458738, - .920102, - 397075e-10, - 0, - .059772, - .908002, - 384886e-10, - 0, - .075645, - .897269, - 43027e-9, - 0, - .0934929, - .884559, - 479925e-10, - 0, - .113302, - .869161, - 48246e-9, - 0, - .135045, - .853342, - 509505e-10, - 0, - .158678, - .837633, - 542846e-10, - 0, - .184136, - .820252, - 554139e-10, - 0, - .211325, - .801872, - 581412e-10, - 0, - .240113, - .782418, - 585535e-10, - 0, - .270306, - .7631, - 610923e-10, - 0, - .301594, - .742183, - 613678e-10, - 0, - .333333, - .721098, - 627275e-10, - 0, - .365079, - .699512, - 629413e-10, - 0, - .396825, - .677372, - 636351e-10, - 0, - .428571, - .655059, - 633555e-10, - 0, - .460317, - .632567, - 636513e-10, - 0, - .492064, - .609784, - 628965e-10, - 0, - .52381, - .587237, - 625546e-10, - 0, - .555556, - .564525, - 615825e-10, - 0, - .587302, - .542181, - 605048e-10, - 0, - .619048, - .520017, - 596329e-10, - 0, - .650794, - .498204, - 581516e-10, - 0, - .68254, - .476742, - 569186e-10, - 0, - .714286, - .455803, - 553833e-10, - 0, - .746032, - .435251, - 537807e-10, - 0, - .777778, - .415374, - 522025e-10, - 0, - .809524, - .395921, - 503421e-10, - 0, - .84127, - .377253, - 488211e-10, - 0, - .873016, - .359021, - 468234e-10, - 0, - .904762, - .341637, - 453269e-10, - 0, - .936508, - .3247, - 433014e-10, - 0, - .968254, - .308625, - 418007e-10, - 0, - 1, - 1, - 286798e-15, - 0, - 0, - 1, - 286877e-15, - 0, - 0, - 1, - 288094e-15, - 0, - 0, - 1, - 293506e-15, - 0, - 0, - 1, - 309262e-15, - 0, - 0, - .999999, - 348593e-15, - 0, - 0, - .999999, - 444582e-15, - 0, - 0, - .999998, - 688591e-15, - 0, - 0, - .999996, - 1.34391e-9, - 0, - 0, - .999993, - 3.17438e-9, - 0, - 0, - .999989, - 8.35609e-9, - 0, - 0, - .999983, - 2.28677e-8, - 0, - 0, - .999974, - 6.23361e-8, - 0, - 0, - .999959, - 1.65225e-7, - 0, - 0, - .999936, - 4.19983e-7, - 0, - 0, - .999896, - 101546e-11, - 0, - 0, - .99983, - 232376e-11, - 0, - 0, - .999709, - 50156e-10, - 0, - 0, - .999469, - 10167e-9, - 0, - 0, - .998886, - 190775e-10, - 0, - 0, - .996819, - 300511e-10, - 0, - 0, - .988837, - 185092e-10, - 0, - 1.68222e-7, - .982178, - 134622e-10, - 0, - 259622e-9, - .975017, - 125961e-10, - 0, - .00142595, - .967101, - 13507e-9, - 0, - .00382273, - .964905, - 205003e-10, - 0, - .00764164, - .96218, - 29546e-9, - 0, - .0130121, - .956821, - 343738e-10, - 0, - .0200253, - .948829, - 305063e-10, - 0, - .0287452, - .941092, - 346487e-10, - 0, - .039218, - .931883, - 412061e-10, - 0, - .0514748, - .920211, - 444651e-10, - 0, - .0655351, - .907307, - 431252e-10, - 0, - .0814082, - .89684, - 490382e-10, - 0, - .0990939, - .884119, - 53334e-9, - 0, - .118583, - .869148, - 54114e-9, - 0, - .139856, - .853377, - 578536e-10, - 0, - .162882, - .836753, - 592285e-10, - 0, - .187615, - .820063, - 622787e-10, - 0, - .213991, - .801694, - 645492e-10, - 0, - .241918, - .782116, - 65353e-9, - 0, - .271267, - .762673, - 674344e-10, - 0, - .301847, - .742133, - 682788e-10, - 0, - .333333, - .720779, - 691959e-10, - 0, - .365079, - .699386, - 696817e-10, - 0, - .396826, - .67732, - 699583e-10, - 0, - .428572, - .654888, - 698447e-10, - 0, - .460318, - .632499, - 694063e-10, - 0, - .492064, - .609825, - 691612e-10, - 0, - .52381, - .587287, - 681576e-10, - 0, - .555556, - .564743, - 674138e-10, - 0, - .587302, - .542409, - 661617e-10, - 0, - .619048, - .520282, - 647785e-10, - 0, - .650794, - .498506, - 633836e-10, - 0, - .68254, - .477102, - 615905e-10, - 0, - .714286, - .456167, - 601013e-10, - 0, - .746032, - .435728, - 581457e-10, - 0, - .777778, - .415809, - 564215e-10, - 0, - .809524, - .396517, - 544997e-10, - 0, - .84127, - .377737, - 525061e-10, - 0, - .873016, - .359698, - 506831e-10, - 0, - .904762, - .342164, - 48568e-9, - 0, - .936508, - .325417, - 467826e-10, - 0, - .968254, - .309186, - 446736e-10, - 0, - 1, - 1, - 1.09018e-9, - 0, - 0, - 1, - 1.0904e-9, - 0, - 0, - 1, - 1.09393e-9, - 0, - 0, - 1, - 1.1095e-9, - 0, - 0, - 1, - 1.154e-9, - 0, - 0, - 1, - 1.26089e-9, - 0, - 0, - .999999, - 1.5059e-9, - 0, - 0, - .999997, - 2.07899e-9, - 0, - 0, - .999994, - 3.48164e-9, - 0, - 0, - .999993, - 7.05728e-9, - 0, - 0, - .999987, - 1.63692e-8, - 0, - 0, - .999981, - 4.06033e-8, - 0, - 0, - .999969, - 1.0245e-7, - 0, - 0, - .999953, - 2.55023e-7, - 0, - 0, - .999925, - 6.1511e-7, - 0, - 0, - .999881, - 142218e-11, - 0, - 0, - .99981, - 313086e-11, - 0, - 0, - .99968, - 653119e-11, - 0, - 0, - .999418, - 12832e-9, - 0, - 0, - .998748, - 232497e-10, - 0, - 0, - .996066, - 329522e-10, - 0, - 0, - .988379, - 179613e-10, - 0, - 108799e-9, - .982567, - 143715e-10, - 0, - 921302e-9, - .976097, - 148096e-10, - 0, - .00280738, - .968475, - 178905e-10, - 0, - .00596622, - .964606, - 253921e-10, - 0, - .0105284, - .961564, - 348623e-10, - 0, - .0165848, - .955517, - 357612e-10, - 0, - .0242, - .948381, - 343493e-10, - 0, - .03342, - .941095, - 405849e-10, - 0, - .0442777, - .931923, - 475394e-10, - 0, - .0567958, - .91996, - 484328e-10, - 0, - .0709879, - .907419, - 502146e-10, - 0, - .086861, - .89618, - 561654e-10, - 0, - .104415, - .88337, - 587612e-10, - 0, - .123643, - .869046, - 618057e-10, - 0, - .144531, - .853278, - 657392e-10, - 0, - .167057, - .836091, - 66303e-9, - 0, - .191188, - .819644, - 704445e-10, - 0, - .216878, - .801246, - 714071e-10, - 0, - .244062, - .782031, - 740093e-10, - 0, - .272649, - .762066, - 74685e-9, - 0, - .302509, - .741964, - 766647e-10, - 0, - .333442, - .720554, - 766328e-10, - 0, - .365079, - .699098, - 777857e-10, - 0, - .396826, - .677189, - 774633e-10, - 0, - .428572, - .65484, - 776235e-10, - 0, - .460318, - .632496, - 770316e-10, - 0, - .492064, - .609908, - 762669e-10, - 0, - .52381, - .587312, - 753972e-10, - 0, - .555556, - .564938, - 739994e-10, - 0, - .587302, - .542577, - 728382e-10, - 0, - .619048, - .52062, - 71112e-9, - 0, - .650794, - .498819, - 694004e-10, - 0, - .68254, - .477555, - 675575e-10, - 0, - .714286, - .456568, - 653449e-10, - 0, - .746032, - .436278, - 636068e-10, - 0, - .777778, - .41637, - 613466e-10, - 0, - .809524, - .397144, - 594177e-10, - 0, - .84127, - .378412, - 570987e-10, - 0, - .873016, - .360376, - 550419e-10, - 0, - .904762, - .342906, - 527422e-10, - 0, - .936508, - .326136, - 506544e-10, - 0, - .968254, - .30997, - 484307e-10, - 0, - 1, - 1, - 3.54014e-9, - 0, - 0, - 1, - 3.54073e-9, - 0, - 0, - 1, - 3.54972e-9, - 0, - 0, - 1, - 3.58929e-9, - 0, - 0, - 1, - 3.70093e-9, - 0, - 0, - .999999, - 3.96194e-9, - 0, - 0, - .999998, - 4.53352e-9, - 0, - 0, - .999997, - 5.78828e-9, - 0, - 0, - .999994, - 8.63812e-9, - 0, - 0, - .999991, - 1.53622e-8, - 0, - 0, - .999985, - 3.16356e-8, - 0, - 0, - .999977, - 7.12781e-8, - 0, - 0, - .999964, - 1.66725e-7, - 0, - 0, - .999945, - 3.90501e-7, - 0, - 0, - .999912, - 8.95622e-7, - 0, - 0, - .999866, - 198428e-11, - 0, - 0, - .999786, - 421038e-11, - 0, - 0, - .999647, - 850239e-11, - 0, - 0, - .999356, - 162059e-10, - 0, - 0, - .998563, - 282652e-10, - 0, - 0, - .994928, - 336309e-10, - 0, - 244244e-10, - .987999, - 178458e-10, - 0, - 523891e-9, - .982893, - 159162e-10, - 0, - .00194729, - .977044, - 178056e-10, - 0, - .00451099, - .969972, - 230624e-10, - 0, - .00835132, - .964237, - 313922e-10, - 0, - .013561, - .960791, - 406145e-10, - 0, - .0202056, - .954292, - 372796e-10, - 0, - .0283321, - .948052, - 403199e-10, - 0, - .0379739, - .940938, - 479537e-10, - 0, - .0491551, - .931689, - 545292e-10, - 0, - .0618918, - .91987, - 54038e-9, - 0, - .0761941, - .907665, - 589909e-10, - 0, - .0920672, - .895281, - 642651e-10, - 0, - .109511, - .882621, - 659707e-10, - 0, - .12852, - .86873, - 709973e-10, - 0, - .149085, - .853008, - 742221e-10, - 0, - .171189, - .835944, - 761754e-10, - 0, - .194809, - .818949, - 797052e-10, - 0, - .21991, - .800951, - 812434e-10, - 0, - .246447, - .781847, - 838075e-10, - 0, - .274352, - .761649, - 84501e-9, - 0, - .303535, - .74152, - 860258e-10, - 0, - .333857, - .720495, - 866233e-10, - 0, - .365104, - .698742, - 868326e-10, - 0, - .396826, - .677096, - 87133e-9, - 0, - .428572, - .654782, - 863497e-10, - 0, - .460318, - .632335, - 860206e-10, - 0, - .492064, - .610031, - 849337e-10, - 0, - .52381, - .587457, - 838279e-10, - 0, - .555556, - .56513, - 82309e-9, - 0, - .587302, - .542877, - 803542e-10, - 0, - .619048, - .5209, - 786928e-10, - 0, - .650794, - .499291, - 765171e-10, - 0, - .68254, - .477971, - 744753e-10, - 0, - .714286, - .457221, - 72209e-9, - 0, - .746032, - .436803, - 697448e-10, - 0, - .777778, - .417083, - 675333e-10, - 0, - .809524, - .397749, - 648058e-10, - 0, - .84127, - .379177, - 625759e-10, - 0, - .873016, - .361061, - 598584e-10, - 0, - .904762, - .343713, - 575797e-10, - 0, - .936508, - .326894, - 549999e-10, - 0, - .968254, - .310816, - 527482e-10, - 0, - 1, - 1, - 1.0153e-8, - 0, - 0, - 1, - 1.01544e-8, - 0, - 0, - 1, - 1.01751e-8, - 0, - 0, - 1, - 1.02662e-8, - 0, - 0, - 1, - 1.0521e-8, - 0, - 0, - .999999, - 1.11049e-8, - 0, - 0, - .999999, - 1.23408e-8, - 0, - 0, - .999996, - 1.4924e-8, - 0, - 0, - .999992, - 2.04471e-8, - 0, - 0, - .999989, - 3.26539e-8, - 0, - 0, - .99998, - 6.03559e-8, - 0, - 0, - .999971, - 1.23936e-7, - 0, - 0, - .999955, - 2.69058e-7, - 0, - 0, - .999933, - 5.93604e-7, - 0, - 0, - .999901, - 129633e-11, - 0, - 0, - .999847, - 275621e-11, - 0, - 0, - .999761, - 564494e-11, - 0, - 0, - .999607, - 110485e-10, - 0, - 0, - .999282, - 204388e-10, - 0, - 0, - .99831, - 341084e-10, - 0, - 2.2038e-7, - .993288, - 294949e-10, - 0, - 242388e-9, - .987855, - 192736e-10, - 0, - .0012503, - .983167, - 182383e-10, - 0, - .0032745, - .977908, - 218633e-10, - 0, - .00646321, - .971194, - 290662e-10, - 0, - .0109133, - .963867, - 386401e-10, - 0, - .0166927, - .95982, - 462827e-10, - 0, - .0238494, - .953497, - 420705e-10, - 0, - .0324178, - .947621, - 477743e-10, - 0, - .0424225, - .940611, - 568258e-10, - 0, - .0538808, - .931174, - 618061e-10, - 0, - .0668047, - .919919, - 627098e-10, - 0, - .0812014, - .907856, - 694714e-10, - 0, - .0970745, - .894509, - 735008e-10, - 0, - .114424, - .881954, - 763369e-10, - 0, - .133246, - .868309, - 821896e-10, - 0, - .153534, - .852511, - 83769e-9, - 0, - .175275, - .835821, - 881615e-10, - 0, - .198453, - .817981, - 896368e-10, - 0, - .223042, - .800504, - 930906e-10, - 0, - .249009, - .78141, - 945056e-10, - 0, - .276304, - .761427, - 963605e-10, - 0, - .304862, - .74094, - 968088e-10, - 0, - .334584, - .720233, - 981481e-10, - 0, - .365322, - .698592, - 979122e-10, - 0, - .396826, - .676763, - 981057e-10, - 0, - .428571, - .654808, - 973956e-10, - 0, - .460318, - .632326, - 962619e-10, - 0, - .492064, - .610049, - 952996e-10, - 0, - .52381, - .58763, - 933334e-10, - 0, - .555556, - .565261, - 917573e-10, - 0, - .587302, - .543244, - 896636e-10, - 0, - .619048, - .521273, - 873304e-10, - 0, - .650794, - .499818, - 852648e-10, - 0, - .68254, - .478536, - 823961e-10, - 0, - .714286, - .457826, - 79939e-9, - 0, - .746032, - .437549, - 77126e-9, - 0, - .777778, - .41776, - 743043e-10, - 0, - .809524, - .39863, - 716426e-10, - 0, - .84127, - .379954, - 686456e-10, - 0, - .873016, - .362025, - 660514e-10, - 0, - .904762, - .344581, - 630755e-10, - 0, - .936508, - .327909, - 605439e-10, - 0, - .968254, - .311736, - 576345e-10, - 0, - 1, - 1, - 2.63344e-8, - 0, - 0, - 1, - 2.63373e-8, - 0, - 0, - 1, - 2.63815e-8, - 0, - 0, - 1, - 2.65753e-8, - 0, - 0, - 1, - 2.71132e-8, - 0, - 0, - .999999, - 2.83279e-8, - 0, - 0, - .999997, - 3.0833e-8, - 0, - 0, - .999995, - 3.58711e-8, - 0, - 0, - .999992, - 4.61266e-8, - 0, - 0, - .999985, - 6.7574e-8, - 0, - 0, - .999977, - 1.1358e-7, - 0, - 0, - .999966, - 2.13657e-7, - 0, - 0, - .999948, - 4.31151e-7, - 0, - 0, - .999923, - 8.96656e-7, - 0, - 0, - .999884, - 186603e-11, - 0, - 0, - .999826, - 381115e-11, - 0, - 0, - .999732, - 754184e-11, - 0, - 0, - .999561, - 143192e-10, - 0, - 0, - .999191, - 257061e-10, - 0, - 0, - .997955, - 405724e-10, - 0, - 744132e-10, - .992228, - 276537e-10, - 0, - 716477e-9, - .987638, - 208885e-10, - 0, - .0022524, - .983395, - 215226e-10, - 0, - .00484816, - .978614, - 270795e-10, - 0, - .00860962, - .972389, - 365282e-10, - 0, - .0136083, - .964392, - 474747e-10, - 0, - .0198941, - .95861, - 509141e-10, - 0, - .0275023, - .952806, - 48963e-9, - 0, - .0364584, - .94712, - 571119e-10, - 0, - .04678, - .940104, - 671704e-10, - 0, - .0584799, - .930398, - 687586e-10, - 0, - .0715665, - .919866, - 738161e-10, - 0, - .086045, - .907853, - 813235e-10, - 0, - .101918, - .894078, - 834582e-10, - 0, - .119186, - .881177, - 892093e-10, - 0, - .137845, - .867575, - 944548e-10, - 0, - .157891, - .852107, - 969607e-10, - 0, - .179316, - .835502, - 101456e-9, - 0, - .202106, - .81756, - 103256e-9, - 0, - .226243, - .79984, - 106954e-9, - 0, - .251704, - .780998, - 108066e-9, - 0, - .278451, - .761132, - 110111e-9, - 0, - .306436, - .740429, - 110459e-9, - 0, - .335586, - .719836, - 111219e-9, - 0, - .365796, - .698467, - 11145e-8, - 0, - .3969, - .676446, - 110393e-9, - 0, - .428571, - .654635, - 110035e-9, - 0, - .460318, - .632411, - 108548e-9, - 0, - .492064, - .609986, - 106963e-9, - 0, - .52381, - .587872, - 105238e-9, - 0, - .555556, - .565528, - 102665e-9, - 0, - .587302, - .543563, - 100543e-9, - 0, - .619048, - .52176, - 976182e-10, - 0, - .650794, - .500188, - 947099e-10, - 0, - .68254, - .479204, - 919929e-10, - 0, - .714286, - .458413, - 886139e-10, - 0, - .746032, - .438314, - 857839e-10, - 0, - .777778, - .418573, - 82411e-9, - 0, - .809524, - .39947, - 792211e-10, - 0, - .84127, - .380892, - 759546e-10, - 0, - .873016, - .362953, - 727571e-10, - 0, - .904762, - .345601, - 695738e-10, - 0, - .936508, - .328895, - 664907e-10, - 0, - .968254, - .312808, - 634277e-10, - 0, - 1, - 1, - 6.28647e-8, - 0, - 0, - 1, - 6.28705e-8, - 0, - 0, - 1, - 6.29587e-8, - 0, - 0, - 1, - 6.33441e-8, - 0, - 0, - .999999, - 6.44087e-8, - 0, - 0, - .999998, - 6.67856e-8, - 0, - 0, - .999997, - 7.15889e-8, - 0, - 0, - .999995, - 8.09577e-8, - 0, - 0, - .999989, - 9.92764e-8, - 0, - 0, - .999983, - 1.35834e-7, - 0, - 0, - .999974, - 2.10482e-7, - 0, - 0, - .999959, - 3.65215e-7, - 0, - 0, - .999939, - 6.86693e-7, - 0, - 0, - .999911, - 13472e-10, - 0, - 0, - .999868, - 26731e-10, - 0, - 0, - .999804, - 524756e-11, - 0, - 0, - .9997, - 100403e-10, - 0, - 0, - .99951, - 185019e-10, - 0, - 0, - .999078, - 322036e-10, - 0, - 620676e-11, - .997428, - 470002e-10, - 0, - 341552e-9, - .99162, - 287123e-10, - 0, - .00143727, - .987479, - 234706e-10, - 0, - .00349201, - .983582, - 260083e-10, - 0, - .0066242, - .979186, - 337927e-10, - 0, - .0109113, - .97325, - 454689e-10, - 0, - .0164064, - .965221, - 573759e-10, - 0, - .0231463, - .957262, - 544114e-10, - 0, - .0311571, - .952211, - 587006e-10, - 0, - .0404572, - .946631, - 692256e-10, - 0, - .0510592, - .939391, - 787819e-10, - 0, - .0629723, - .929795, - 792368e-10, - 0, - .0762025, - .91965, - 875075e-10, - 0, - .090753, - .907737, - 950903e-10, - 0, - .106626, - .893899, - 972963e-10, - 0, - .123822, - .880239, - 10459e-8, - 0, - .142337, - .866562, - 107689e-9, - 0, - .16217, - .85164, - 113081e-9, - 0, - .183314, - .835021, - 116636e-9, - 0, - .20576, - .817311, - 120074e-9, - 0, - .229496, - .798845, - 121921e-9, - 0, - .254502, - .780479, - 12475e-8, - 0, - .280753, - .760694, - 125255e-9, - 0, - .308212, - .740142, - 126719e-9, - 0, - .336825, - .719248, - 12636e-8, - 0, - .366517, - .698209, - 126712e-9, - 0, - .397167, - .676398, - 125769e-9, - 0, - .428578, - .654378, - 124432e-9, - 0, - .460318, - .632484, - 123272e-9, - 0, - .492064, - .610113, - 12085e-8, - 0, - .52381, - .587931, - 118411e-9, - 0, - .555556, - .565872, - 11569e-8, - 0, - .587302, - .543814, - 112521e-9, - 0, - .619048, - .522265, - 109737e-9, - 0, - .650794, - .500835, - 106228e-9, - 0, - .68254, - .479818, - 102591e-9, - 0, - .714286, - .459258, - 991288e-10, - 0, - .746032, - .439061, - 952325e-10, - 0, - .777778, - .419552, - 91895e-9, - 0, - .809524, - .400399, - 879051e-10, - 0, - .84127, - .381976, - 844775e-10, - 0, - .873016, - .364009, - 806316e-10, - 0, - .904762, - .346761, - 771848e-10, - 0, - .936508, - .330049, - 735429e-10, - 0, - .968254, - .314018, - 702103e-10, - 0, - 1, - 1, - 1.39968e-7, - 0, - 0, - 1, - 1.39979e-7, - 0, - 0, - 1, - 1.40145e-7, - 0, - 0, - 1, - 1.4087e-7, - 0, - 0, - .999999, - 1.42865e-7, - 0, - 0, - .999998, - 1.47279e-7, - 0, - 0, - .999997, - 1.56057e-7, - 0, - 0, - .999992, - 1.7276e-7, - 0, - 0, - .999989, - 2.04352e-7, - 0, - 0, - .99998, - 2.6494e-7, - 0, - 0, - .999969, - 3.83435e-7, - 0, - 0, - .999953, - 6.18641e-7, - 0, - 0, - .999929, - 108755e-11, - 0, - 0, - .999898, - 201497e-11, - 0, - 0, - .999849, - 381346e-11, - 0, - 0, - .999778, - 719815e-11, - 0, - 0, - .999661, - 133215e-10, - 0, - 0, - .999451, - 238313e-10, - 0, - 0, - .998936, - 401343e-10, - 0, - 113724e-9, - .99662, - 517346e-10, - 0, - 820171e-9, - .991094, - 304323e-10, - 0, - .00238143, - .987487, - 281757e-10, - 0, - .00493527, - .983731, - 320048e-10, - 0, - .00856859, - .979647, - 423905e-10, - 0, - .0133393, - .973837, - 562935e-10, - 0, - .0192863, - .96584, - 677442e-10, - 0, - .0264369, - .956309, - 623073e-10, - 0, - .03481, - .951523, - 704131e-10, - 0, - .0444184, - .946003, - 836594e-10, - 0, - .0552713, - .938454, - 911736e-10, - 0, - .0673749, - .929279, - 938264e-10, - 0, - .0807329, - .919239, - 103754e-9, - 0, - .0953479, - .907293, - 109928e-9, - 0, - .111221, - .893936, - 115257e-9, - 0, - .128352, - .879674, - 122265e-9, - 0, - .14674, - .865668, - 125733e-9, - 0, - .166382, - .850998, - 132305e-9, - 0, - .187276, - .834498, - 134844e-9, - 0, - .209413, - .816903, - 139276e-9, - 0, - .232786, - .798235, - 140984e-9, - 0, - .257382, - .779724, - 14378e-8, - 0, - .283181, - .760251, - 144623e-9, - 0, - .310156, - .739808, - 145228e-9, - 0, - .338269, - .718762, - 14539e-8, - 0, - .367461, - .697815, - 144432e-9, - 0, - .397646, - .67631, - 143893e-9, - 0, - .428685, - .654278, - 141846e-9, - 0, - .460318, - .632347, - 13935e-8, - 0, - .492064, - .610296, - 137138e-9, - 0, - .52381, - .588039, - 133806e-9, - 0, - .555556, - .566218, - 130755e-9, - 0, - .587302, - .544346, - 127128e-9, - 0, - .619048, - .522701, - 123002e-9, - 0, - .650794, - .501542, - 119443e-9, - 0, - .68254, - .480508, - 115055e-9, - 0, - .714286, - .460092, - 111032e-9, - 0, - .746032, - .440021, - 106635e-9, - 0, - .777778, - .420446, - 102162e-9, - 0, - .809524, - .401512, - 98184e-9, - 0, - .84127, - .38299, - 936497e-10, - 0, - .873016, - .365232, - 89813e-9, - 0, - .904762, - .347865, - 853073e-10, - 0, - .936508, - .331342, - 817068e-10, - 0, - .968254, - .315202, - 773818e-10, - 0, - 1, - 1, - 2.9368e-7, - 0, - 0, - 1, - 2.937e-7, - 0, - 0, - 1, - 2.93998e-7, - 0, - 0, - 1, - 2.95298e-7, - 0, - 0, - .999999, - 2.98865e-7, - 0, - 0, - .999998, - 3.067e-7, - 0, - 0, - .999995, - 3.22082e-7, - 0, - 0, - .999992, - 3.50767e-7, - 0, - 0, - .999986, - 4.03538e-7, - 0, - 0, - .999976, - 5.01372e-7, - 0, - 0, - .999964, - 6.8562e-7, - 0, - 0, - .999945, - 10374e-10, - 0, - 0, - .999919, - 171269e-11, - 0, - 0, - .999882, - 300175e-11, - 0, - 0, - .999829, - 542144e-11, - 0, - 0, - .999749, - 984182e-11, - 0, - 0, - .99962, - 176213e-10, - 0, - 0, - .999382, - 305995e-10, - 0, - 138418e-10, - .998751, - 496686e-10, - 0, - 389844e-9, - .995344, - 510733e-10, - 0, - .00150343, - .990768, - 345829e-10, - 0, - .00352451, - .987464, - 342841e-10, - 0, - .00655379, - .983846, - 399072e-10, - 0, - .0106554, - .980007, - 533219e-10, - 0, - .0158723, - .974494, - 696992e-10, - 0, - .0222333, - .96622, - 776754e-10, - 0, - .029758, - .956273, - 747718e-10, - 0, - .0384596, - .950952, - 864611e-10, - 0, - .0483473, - .945215, - 100464e-9, - 0, - .0594266, - .937287, - 103729e-9, - 0, - .0717019, - .928649, - 111665e-9, - 0, - .0851752, - .918791, - 12353e-8, - 0, - .0998479, - .906685, - 127115e-9, - 0, - .115721, - .893706, - 13628e-8, - 0, - .132794, - .879248, - 142427e-9, - 0, - .151067, - .864685, - 148091e-9, - 0, - .170538, - .850032, - 153517e-9, - 0, - .191204, - .833853, - 157322e-9, - 0, - .213063, - .816353, - 161086e-9, - 0, - .236107, - .797834, - 164111e-9, - 0, - .260329, - .778831, - 165446e-9, - 0, - .285714, - .759756, - 167492e-9, - 0, - .312243, - .739419, - 166928e-9, - 0, - .339887, - .718491, - 167e-6, - 0, - .368604, - .697392, - 165674e-9, - 0, - .398329, - .676102, - 163815e-9, - 0, - .428961, - .654243, - 162003e-9, - 0, - .460331, - .632176, - 158831e-9, - 0, - .492064, - .610407, - 155463e-9, - 0, - .52381, - .588394, - 152062e-9, - 0, - .555556, - .56645, - 147665e-9, - 0, - .587302, - .5449, - 14375e-8, - 0, - .619048, - .523276, - 138905e-9, - 0, - .650794, - .502179, - 134189e-9, - 0, - .68254, - .481359, - 129392e-9, - 0, - .714286, - .46092, - 124556e-9, - 0, - .746032, - .441084, - 11957e-8, - 0, - .777778, - .421517, - 114652e-9, - 0, - .809524, - .402721, - 109688e-9, - 0, - .84127, - .384222, - 104667e-9, - 0, - .873016, - .366534, - 999633e-10, - 0, - .904762, - .349205, - 950177e-10, - 0, - .936508, - .332702, - 907301e-10, - 0, - .968254, - .316599, - 859769e-10, - 0, - 1, - 1, - 5.85473e-7, - 0, - 0, - 1, - 5.85507e-7, - 0, - 0, - 1, - 5.8602e-7, - 0, - 0, - .999999, - 5.88259e-7, - 0, - 0, - .999999, - 5.94381e-7, - 0, - 0, - .999998, - 6.07754e-7, - 0, - 0, - .999995, - 6.33729e-7, - 0, - 0, - .99999, - 6.8137e-7, - 0, - 0, - .999984, - 7.67003e-7, - 0, - 0, - .999973, - 9.21212e-7, - 0, - 0, - .999959, - 120218e-11, - 0, - 0, - .999936, - 172024e-11, - 0, - 0, - .999907, - 268088e-11, - 0, - 0, - .999866, - 445512e-11, - 0, - 0, - .999806, - 768481e-11, - 0, - 0, - .999716, - 1342e-8, - 0, - 0, - .999576, - 232473e-10, - 0, - 0, - .9993, - 391694e-10, - 0, - 129917e-9, - .998498, - 608429e-10, - 0, - 845035e-9, - .994132, - 489743e-10, - 0, - .00237616, - .99031, - 384644e-10, - 0, - .00484456, - .987409, - 421768e-10, - 0, - .00832472, - .983981, - 504854e-10, - 0, - .0128643, - .980268, - 671028e-10, - 0, - .0184947, - .974875, - 852749e-10, - 0, - .025237, - .966063, - 85531e-9, - 0, - .0331046, - .956779, - 900588e-10, - 0, - .0421067, - .950259, - 10577e-8, - 0, - .0522487, - .944239, - 119458e-9, - 0, - .0635343, - .936341, - 122164e-9, - 0, - .0759654, - .928047, - 134929e-9, - 0, - .0895434, - .918065, - 145544e-9, - 0, - .104269, - .906267, - 150531e-9, - 0, - .120142, - .893419, - 161652e-9, - 0, - .137163, - .878758, - 16593e-8, - 0, - .15533, - .863699, - 174014e-9, - 0, - .174645, - .848876, - 177877e-9, - 0, - .195106, - .833032, - 184049e-9, - 0, - .21671, - .815557, - 186088e-9, - 0, - .239454, - .797323, - 19054e-8, - 0, - .263332, - .778124, - 191765e-9, - 0, - .288336, - .758929, - 192535e-9, - 0, - .314451, - .738979, - 192688e-9, - 0, - .341658, - .718213, - 191522e-9, - 0, - .369924, - .696947, - 190491e-9, - 0, - .399202, - .675807, - 187913e-9, - 0, - .429416, - .654147, - 184451e-9, - 0, - .460447, - .63229, - 181442e-9, - 0, - .492064, - .610499, - 177139e-9, - 0, - .523809, - .588747, - 172596e-9, - 0, - .555555, - .566783, - 167457e-9, - 0, - .587301, - .545359, - 162518e-9, - 0, - .619048, - .523984, - 156818e-9, - 0, - .650794, - .502917, - 151884e-9, - 0, - .68254, - .482294, - 145514e-9, - 0, - .714286, - .461945, - 140199e-9, - 0, - .746032, - .442133, - 134101e-9, - 0, - .777778, - .422705, - 128374e-9, - 0, - .809524, - .403916, - 122996e-9, - 0, - .84127, - .38554, - 116808e-9, - 0, - .873016, - .367909, - 111973e-9, - 0, - .904762, - .350651, - 105938e-9, - 0, - .936508, - .334208, - 101355e-9, - 0, - .968254, - .318123, - 957629e-10, - 0, - 1, - 1, - 111633e-11, - 0, - 0, - 1, - 111639e-11, - 0, - 0, - 1, - 111725e-11, - 0, - 0, - 1, - 112096e-11, - 0, - 0, - .999999, - 11311e-10, - 0, - 0, - .999997, - 115315e-11, - 0, - 0, - .999995, - 11956e-10, - 0, - 0, - .999989, - 127239e-11, - 0, - 0, - .999981, - 140772e-11, - 0, - 0, - .999969, - 164541e-11, - 0, - 0, - .999952, - 206607e-11, - 0, - 0, - .999928, - 281783e-11, - 0, - 0, - .999895, - 416835e-11, - 0, - 0, - .999848, - 658728e-11, - 0, - 0, - .999781, - 108648e-10, - 0, - 0, - .999682, - 182579e-10, - 0, - 0, - .999523, - 306003e-10, - 0, - 159122e-10, - .999205, - 499862e-10, - 0, - 391184e-9, - .998131, - 73306e-9, - 0, - .00147534, - .993334, - 513229e-10, - 0, - .0034227, - .99016, - 467783e-10, - 0, - .00632232, - .987321, - 523413e-10, - 0, - .0102295, - .984099, - 64267e-9, - 0, - .0151794, - .980432, - 843042e-10, - 0, - .0211947, - .974976, - 102819e-9, - 0, - .0282899, - .966429, - 996234e-10, - 0, - .0364739, - .957633, - 111074e-9, - 0, - .0457522, - .949422, - 128644e-9, - 0, - .0561278, - .943045, - 140076e-9, - 0, - .0676023, - .935448, - 146349e-9, - 0, - .0801762, - .927225, - 161854e-9, - 0, - .0938499, - .917033, - 169135e-9, - 0, - .108623, - .905762, - 179987e-9, - 0, - .124496, - .892879, - 189832e-9, - 0, - .141469, - .878435, - 195881e-9, - 0, - .159541, - .863114, - 20466e-8, - 0, - .178713, - .84776, - 209473e-9, - 0, - .198985, - .832084, - 214861e-9, - 0, - .220355, - .814915, - 217695e-9, - 0, - .242823, - .796711, - 220313e-9, - 0, - .266385, - .777603, - 22313e-8, - 0, - .291036, - .757991, - 222471e-9, - 0, - .316767, - .738371, - 222869e-9, - 0, - .343563, - .717872, - 221243e-9, - 0, - .371402, - .696619, - 218089e-9, - 0, - .400248, - .675379, - 21562e-8, - 0, - .430047, - .65411, - 21169e-8, - 0, - .460709, - .63241, - 206947e-9, - 0, - .492079, - .61046, - 201709e-9, - 0, - .52381, - .58903, - 196753e-9, - 0, - .555556, - .567267, - 189637e-9, - 0, - .587302, - .545886, - 184735e-9, - 0, - .619048, - .524714, - 177257e-9, - 0, - .650794, - .503789, - 171424e-9, - 0, - .68254, - .483204, - 164688e-9, - 0, - .714286, - .462976, - 157172e-9, - 0, - .746032, - .443294, - 151341e-9, - 0, - .777778, - .423988, - 143737e-9, - 0, - .809524, - .405325, - 138098e-9, - 0, - .84127, - .386981, - 130698e-9, - 0, - .873016, - .369436, - 125276e-9, - 0, - .904762, - .35219, - 118349e-9, - 0, - .936508, - .335804, - 11312e-8, - 0, - .968254, - .319749, - 106687e-9, - 0, - 1, - 1, - 204685e-11, - 0, - 0, - 1, - 204694e-11, - 0, - 0, - 1, - 204831e-11, - 0, - 0, - .999999, - 205428e-11, - 0, - 0, - .999999, - 207056e-11, - 0, - 0, - .999997, - 210581e-11, - 0, - 0, - .999993, - 21732e-10, - 0, - 0, - .999987, - 229365e-11, - 0, - 0, - .999979, - 250243e-11, - 0, - 0, - .999965, - 286127e-11, - 0, - 0, - .999947, - 348028e-11, - 0, - 0, - .999918, - 455588e-11, - 0, - 0, - .999881, - 643303e-11, - 0, - 0, - .999828, - 970064e-11, - 0, - 0, - .999753, - 153233e-10, - 0, - 0, - .999642, - 24793e-9, - 0, - 0, - .999464, - 402032e-10, - 0, - 122947e-9, - .999089, - 635852e-10, - 0, - 807414e-9, - .997567, - 857026e-10, - 0, - .00227206, - .992903, - 594912e-10, - 0, - .00462812, - .990011, - 578515e-10, - 0, - .00794162, - .987192, - 65399e-9, - 0, - .0122534, - .98418, - 819675e-10, - 0, - .0175888, - .980491, - 105514e-9, - 0, - .0239635, - .974779, - 121532e-9, - 0, - .031387, - .96675, - 119144e-9, - 0, - .0398644, - .958248, - 136125e-9, - 0, - .0493982, - .948884, - 155408e-9, - 0, - .0599896, - .941673, - 162281e-9, - 0, - .0716382, - .934521, - 176754e-9, - 0, - .0843437, - .926205, - 192873e-9, - 0, - .0981056, - .916089, - 200038e-9, - 0, - .112923, - .904963, - 213624e-9, - 0, - .128796, - .892089, - 221834e-9, - 0, - .145725, - .878028, - 232619e-9, - 0, - .163709, - .86249, - 238632e-9, - 0, - .182749, - .846587, - 247002e-9, - 0, - .202847, - .830988, - 250702e-9, - 0, - .224001, - .814165, - 255562e-9, - 0, - .246214, - .796135, - 257505e-9, - 0, - .269482, - .777052, - 258625e-9, - 0, - .293805, - .757201, - 258398e-9, - 0, - .319176, - .737655, - 256714e-9, - 0, - .345587, - .717477, - 255187e-9, - 0, - .373021, - .696433, - 251792e-9, - 0, - .401454, - .675084, - 247223e-9, - 0, - .430844, - .653907, - 242213e-9, - 0, - .461125, - .632561, - 237397e-9, - 0, - .492187, - .610658, - 229313e-9, - 0, - .52381, - .589322, - 224402e-9, - 0, - .555556, - .567857, - 216116e-9, - 0, - .587302, - .54652, - 209124e-9, - 0, - .619048, - .525433, - 201601e-9, - 0, - .650794, - .504679, - 192957e-9, - 0, - .68254, - .484203, - 186052e-9, - 0, - .714286, - .464203, - 177672e-9, - 0, - .746032, - .444549, - 170005e-9, - 0, - .777778, - .425346, - 162401e-9, - 0, - .809524, - .406706, - 1544e-7, - 0, - .84127, - .388576, - 147437e-9, - 0, - .873016, - .37094, - 139493e-9, - 0, - .904762, - .353996, - 133219e-9, - 0, - .936508, - .337391, - 125573e-9, - 0, - .968254, - .321648, - 119867e-9, - 0, - 1, - 1, - 362511e-11, - 0, - 0, - 1, - 362525e-11, - 0, - 0, - 1, - 362739e-11, - 0, - 0, - .999999, - 363673e-11, - 0, - 0, - .999998, - 366214e-11, - 0, - 0, - .999996, - 371698e-11, - 0, - 0, - .999992, - 382116e-11, - 0, - 0, - .999986, - 400554e-11, - 0, - 0, - .999976, - 432058e-11, - 0, - 0, - .999961, - 485194e-11, - 0, - 0, - .999938, - 574808e-11, - 0, - 0, - .999908, - 726643e-11, - 0, - 0, - .999865, - 984707e-11, - 0, - 0, - .999807, - 142217e-10, - 0, - 0, - .999723, - 215581e-10, - 0, - 0, - .999602, - 336114e-10, - 0, - 119113e-10, - .999398, - 527353e-10, - 0, - 355813e-9, - .998946, - 805809e-10, - 0, - .00137768, - .996647, - 942908e-10, - 0, - .00322469, - .992298, - 668733e-10, - 0, - .00597897, - .989802, - 716564e-10, - 0, - .00968903, - .987019, - 821355e-10, - 0, - .0143845, - .984219, - 104555e-9, - 0, - .0200831, - .980425, - 131245e-9, - 0, - .0267948, - .974241, - 139613e-9, - 0, - .034525, - .967006, - 145931e-9, - 0, - .0432757, - .95893, - 167153e-9, - 0, - .0530471, - .949157, - 188146e-9, - 0, - .0638386, - .94062, - 194625e-9, - 0, - .0756487, - .933509, - 213721e-9, - 0, - .0884762, - .925088, - 229616e-9, - 0, - .10232, - .915178, - 239638e-9, - 0, - .117178, - .904093, - 254814e-9, - 0, - .133051, - .891337, - 263685e-9, - 0, - .149939, - .877326, - 274789e-9, - 0, - .167841, - .861794, - 280534e-9, - 0, - .18676, - .845758, - 289534e-9, - 0, - .206696, - .829792, - 294446e-9, - 0, - .22765, - .813037, - 296877e-9, - 0, - .249625, - .795285, - 300217e-9, - 0, - .27262, - .776323, - 299826e-9, - 0, - .296636, - .756673, - 299787e-9, - 0, - .321671, - .736856, - 297867e-9, - 0, - .347718, - .716883, - 294052e-9, - 0, - .374768, - .696089, - 289462e-9, - 0, - .402804, - .67505, - 285212e-9, - 0, - .431796, - .653509, - 27653e-8, - 0, - .461695, - .63258, - 271759e-9, - 0, - .49242, - .61104, - 262811e-9, - 0, - .523822, - .589567, - 255151e-9, - 0, - .555556, - .568322, - 246434e-9, - 0, - .587302, - .547235, - 237061e-9, - 0, - .619048, - .52616, - 228343e-9, - 0, - .650794, - .505716, - 219236e-9, - 0, - .68254, - .485274, - 209595e-9, - 0, - .714286, - .465411, - 201011e-9, - 0, - .746032, - .445854, - 19109e-8, - 0, - .777778, - .426911, - 182897e-9, - 0, - .809524, - .408222, - 173569e-9, - 0, - .84127, - .390307, - 165496e-9, - 0, - .873016, - .372624, - 156799e-9, - 0, - .904762, - .355804, - 14917e-8, - 0, - .936508, - .33924, - 140907e-9, - 0, - .968254, - .323534, - 134062e-9, - 0, - 1, - 1, - 622487e-11, - 0, - 0, - 1, - 62251e-10, - 0, - 0, - 1, - 622837e-11, - 0, - 0, - .999999, - 624259e-11, - 0, - 0, - .999998, - 628127e-11, - 0, - 0, - .999996, - 636451e-11, - 0, - 0, - .999991, - 65218e-10, - 0, - 0, - .999984, - 679782e-11, - 0, - 0, - .999973, - 726361e-11, - 0, - 0, - .999955, - 803644e-11, - 0, - 0, - .999931, - 931397e-11, - 0, - 0, - .999896, - 114299e-10, - 0, - 0, - .999847, - 149402e-10, - 0, - 0, - .999784, - 207461e-10, - 0, - 0, - .999692, - 302493e-10, - 0, - 0, - .999554, - 454957e-10, - 0, - 997275e-10, - .999326, - 690762e-10, - 0, - 724813e-9, - .998757, - 101605e-9, - 0, - .0020972, - .995367, - 958745e-10, - 0, - .00432324, - .99209, - 832808e-10, - 0, - .00746347, - .989517, - 887601e-10, - 0, - .0115534, - .987008, - 10564e-8, - 0, - .0166134, - .98421, - 133179e-9, - 0, - .0226552, - .98021, - 161746e-9, - 0, - .0296838, - .973676, - 161821e-9, - 0, - .0377016, - .967052, - 178635e-9, - 0, - .0467079, - .959385, - 206765e-9, - 0, - .0567013, - .949461, - 22476e-8, - 0, - .0676796, - .939578, - 23574e-8, - 0, - .0796403, - .932416, - 25893e-8, - 0, - .0925812, - .923759, - 271228e-9, - 0, - .106501, - .914223, - 289165e-9, - 0, - .121397, - .902942, - 301156e-9, - 0, - .13727, - .890419, - 313852e-9, - 0, - .15412, - .876639, - 324408e-9, - 0, - .171946, - .861316, - 33249e-8, - 0, - .190751, - .84496, - 338497e-9, - 0, - .210537, - .828427, - 345861e-9, - 0, - .231305, - .811871, - 347863e-9, - 0, - .253057, - .794397, - 350225e-9, - 0, - .275797, - .775726, - 349915e-9, - 0, - .299525, - .75617, - 347297e-9, - 0, - .324242, - .736091, - 344232e-9, - 0, - .349947, - .716213, - 340835e-9, - 0, - .376633, - .695736, - 332369e-9, - 0, - .404289, - .674961, - 327943e-9, - 0, - .432895, - .653518, - 318533e-9, - 0, - .462415, - .632574, - 310391e-9, - 0, - .492788, - .61134, - 300755e-9, - 0, - .523909, - .590017, - 290506e-9, - 0, - .555556, - .568752, - 280446e-9, - 0, - .587302, - .548061, - 269902e-9, - 0, - .619048, - .52711, - 258815e-9, - 0, - .650794, - .506682, - 248481e-9, - 0, - .68254, - .486524, - 237141e-9, - 0, - .714286, - .466812, - 226872e-9, - 0, - .746032, - .44732, - 216037e-9, - 0, - .777778, - .428473, - 205629e-9, - 0, - .809524, - .409921, - 195691e-9, - 0, - .84127, - .392028, - 185457e-9, - 0, - .873016, - .374606, - 176436e-9, - 0, - .904762, - .357601, - 166508e-9, - 0, - .936508, - .341348, - 158385e-9, - 0, - .968254, - .32542, - 149203e-9, - 0, - 1, - 1, - 103967e-10, - 0, - 0, - 1, - 10397e-9, - 0, - 0, - 1, - 104019e-10, - 0, - 0, - .999999, - 104231e-10, - 0, - 0, - .999998, - 104806e-10, - 0, - 0, - .999995, - 106042e-10, - 0, - 0, - .999991, - 108366e-10, - 0, - 0, - .999982, - 112415e-10, - 0, - 0, - .999968, - 119174e-10, - 0, - 0, - .99995, - 130227e-10, - 0, - 0, - .999922, - 148176e-10, - 0, - 0, - .999884, - 177303e-10, - 0, - 0, - .99983, - 224564e-10, - 0, - 0, - .999758, - 300966e-10, - 0, - 0, - .999654, - 423193e-10, - 0, - 549083e-11, - .999503, - 614848e-10, - 0, - 296087e-9, - .999237, - 903576e-10, - 0, - .00123144, - .998491, - 1271e-7, - 0, - .00295954, - .994594, - 107754e-9, - 0, - .00555829, - .99178, - 103025e-9, - 0, - .00907209, - .989265, - 11154e-8, - 0, - .0135257, - .986998, - 136296e-9, - 0, - .0189327, - .984137, - 169154e-9, - 0, - .0252993, - .979798, - 196671e-9, - 0, - .0326272, - .97337, - 196678e-9, - 0, - .0409157, - .967239, - 223121e-9, - 0, - .0501623, - .959543, - 253809e-9, - 0, - .0603638, - .949466, - 265972e-9, - 0, - .0715171, - .939074, - 288372e-9, - 0, - .0836187, - .931118, - 310983e-9, - 0, - .0966657, - .922525, - 325561e-9, - 0, - .110656, - .912983, - 345725e-9, - 0, - .125588, - .901617, - 3556e-7, - 0, - .141461, - .889487, - 374012e-9, - 0, - .158275, - .875787, - 383445e-9, - 0, - .176031, - .860654, - 393972e-9, - 0, - .19473, - .844417, - 400311e-9, - 0, - .214374, - .82741, - 405004e-9, - 0, - .234967, - .810545, - 407378e-9, - 0, - .256512, - .793312, - 407351e-9, - 0, - .279011, - .774847, - 406563e-9, - 0, - .302468, - .755621, - 404903e-9, - 0, - .326887, - .735511, - 397486e-9, - 0, - .352266, - .715435, - 39357e-8, - 0, - .378605, - .695403, - 384739e-9, - 0, - .405897, - .674681, - 376108e-9, - 0, - .43413, - .65359, - 365997e-9, - 0, - .463277, - .632471, - 354957e-9, - 0, - .493295, - .61151, - 343593e-9, - 0, - .524106, - .59064, - 331841e-9, - 0, - .555561, - .569386, - 318891e-9, - 0, - .587302, - .548785, - 3072e-7, - 0, - .619048, - .528146, - 29361e-8, - 0, - .650794, - .507872, - 281709e-9, - 0, - .68254, - .487805, - 268627e-9, - 0, - .714286, - .468196, - 255887e-9, - 0, - .746032, - .448922, - 243997e-9, - 0, - .777778, - .430093, - 231662e-9, - 0, - .809524, - .411845, - 220339e-9, - 0, - .84127, - .393808, - 208694e-9, - 0, - .873016, - .376615, - 198045e-9, - 0, - .904762, - .359655, - 187375e-9, - 0, - .936508, - .343452, - 177371e-9, - 0, - .968254, - .32765, - 167525e-9, - 0, - 1, - 1, - 169351e-10, - 0, - 0, - 1, - 169356e-10, - 0, - 0, - 1, - 169427e-10, - 0, - 0, - .999999, - 169736e-10, - 0, - 0, - .999998, - 170575e-10, - 0, - 0, - .999995, - 172372e-10, - 0, - 0, - .99999, - 175739e-10, - 0, - 0, - .999979, - 181568e-10, - 0, - 0, - .999966, - 191206e-10, - 0, - 0, - .999944, - 20677e-9, - 0, - 0, - .999912, - 231644e-10, - 0, - 0, - .999869, - 271268e-10, - 0, - 0, - .999811, - 334272e-10, - 0, - 0, - .99973, - 433979e-10, - 0, - 0, - .999617, - 590083e-10, - 0, - 680315e-10, - .999445, - 829497e-10, - 0, - 612796e-9, - .999138, - 118019e-9, - 0, - .00187408, - .998095, - 156712e-9, - 0, - .00395791, - .993919, - 125054e-9, - 0, - .00692144, - .991333, - 126091e-9, - 0, - .0107962, - .989226, - 144912e-9, - 0, - .0155986, - .986954, - 175737e-9, - 0, - .0213364, - .983982, - 213883e-9, - 0, - .0280114, - .979128, - 234526e-9, - 0, - .0356226, - .973327, - 243725e-9, - 0, - .0441668, - .967416, - 2773e-7, - 0, - .0536399, - .959729, - 308799e-9, - 0, - .0640376, - .949758, - 322447e-9, - 0, - .0753554, - .939173, - 350021e-9, - 0, - .0875893, - .9296, - 370089e-9, - 0, - .100736, - .921181, - 391365e-9, - 0, - .114793, - .91164, - 413636e-9, - 0, - .129759, - .900435, - 427068e-9, - 0, - .145632, - .888183, - 441046e-9, - 0, - .162412, - .874772, - 454968e-9, - 0, - .180101, - .859566, - 461882e-9, - 0, - .1987, - .843579, - 471556e-9, - 0, - .218213, - .826453, - 474335e-9, - 0, - .238641, - .809164, - 477078e-9, - 0, - .259989, - .792179, - 47755e-8, - 0, - .282262, - .773866, - 472573e-9, - 0, - .305464, - .754944, - 469765e-9, - 0, - .329599, - .735133, - 462371e-9, - 0, - .35467, - .714858, - 453674e-9, - 0, - .380678, - .694829, - 443888e-9, - 0, - .407622, - .674453, - 432052e-9, - 0, - .435493, - .653685, - 420315e-9, - 0, - .464275, - .632666, - 406829e-9, - 0, - .493938, - .611676, - 392234e-9, - 0, - .524422, - .591193, - 379208e-9, - 0, - .555624, - .570145, - 36319e-8, - 0, - .587302, - .549566, - 349111e-9, - 0, - .619048, - .529278, - 334166e-9, - 0, - .650794, - .509026, - 318456e-9, - 0, - .68254, - .489186, - 30449e-8, - 0, - .714286, - .469662, - 289051e-9, - 0, - .746032, - .450691, - 275494e-9, - 0, - .777778, - .431841, - 261437e-9, - 0, - .809524, - .413752, - 247846e-9, - 0, - .84127, - .395951, - 235085e-9, - 0, - .873016, - .378633, - 222245e-9, - 0, - .904762, - .36194, - 210533e-9, - 0, - .936508, - .345599, - 198494e-9, - 0, - .968254, - .329999, - 188133e-9, - 0, - 1, - 1, - 269663e-10, - 0, - 0, - 1, - 26967e-9, - 0, - 0, - 1, - 269772e-10, - 0, - 0, - .999999, - 270214e-10, - 0, - 0, - .999998, - 271415e-10, - 0, - 0, - .999994, - 27398e-9, - 0, - 0, - .999988, - 278771e-10, - 0, - 0, - .999977, - 287019e-10, - 0, - 0, - .999961, - 300544e-10, - 0, - 0, - .999937, - 322138e-10, - 0, - 0, - .999904, - 356163e-10, - 0, - 0, - .999854, - 409465e-10, - 0, - 0, - .99979, - 492651e-10, - 0, - 0, - .999699, - 621722e-10, - 0, - 8.8288e-7, - .999572, - 819715e-10, - 0, - 223369e-9, - .999381, - 111689e-9, - 0, - .00105414, - .999016, - 153862e-9, - 0, - .0026493, - .997437, - 187667e-9, - 0, - .00508608, - .993545, - 155672e-9, - 0, - .00840554, - .991135, - 161455e-9, - 0, - .012629, - .989157, - 188241e-9, - 0, - .0177661, - .986874, - 226229e-9, - 0, - .0238198, - .983714, - 268668e-9, - 0, - .0307887, - .978301, - 277109e-9, - 0, - .0386688, - .973227, - 303446e-9, - 0, - .0474554, - .967317, - 341851e-9, - 0, - .0571428, - .959477, - 370885e-9, - 0, - .0677256, - .950012, - 392753e-9, - 0, - .0791988, - .939484, - 42781e-8, - 0, - .0915576, - .928135, - 443866e-9, - 0, - .104798, - .919819, - 472959e-9, - 0, - .118918, - .910049, - 491551e-9, - 0, - .133915, - .899181, - 512616e-9, - 0, - .149788, - .886881, - 523563e-9, - 0, - .166537, - .87359, - 540183e-9, - 0, - .184164, - .858613, - 547386e-9, - 0, - .202669, - .842809, - 554809e-9, - 0, - .222056, - .825727, - 558316e-9, - 0, - .242329, - .808086, - 557824e-9, - 0, - .263492, - .790728, - 556346e-9, - 0, - .285551, - .772987, - 552672e-9, - 0, - .30851, - .7541, - 543738e-9, - 0, - .332376, - .734669, - 536107e-9, - 0, - .357153, - .714411, - 523342e-9, - 0, - .382845, - .694196, - 512238e-9, - 0, - .409454, - .674252, - 497465e-9, - 0, - .436977, - .65357, - 481096e-9, - 0, - .465404, - .632999, - 467054e-9, - 0, - .494713, - .611994, - 448771e-9, - 0, - .524864, - .591604, - 431889e-9, - 0, - .555779, - .571134, - 415238e-9, - 0, - .587302, - .550528, - 396369e-9, - 0, - .619048, - .530292, - 379477e-9, - 0, - .650794, - .510364, - 361488e-9, - 0, - .68254, - .490749, - 343787e-9, - 0, - .714286, - .471266, - 327822e-9, - 0, - .746032, - .452462, - 310626e-9, - 0, - .777778, - .433907, - 295352e-9, - 0, - .809524, - .415659, - 279179e-9, - 0, - .84127, - .398138, - 264685e-9, - 0, - .873016, - .380833, - 249905e-9, - 0, - .904762, - .364247, - 236282e-9, - 0, - .936508, - .348041, - 222905e-9, - 0, - .968254, - .332389, - 210522e-9, - 0, - 1, - 1, - 420604e-10, - 0, - 0, - 1, - 420614e-10, - 0, - 0, - 1, - 420757e-10, - 0, - 0, - .999999, - 42138e-9, - 0, - 0, - .999997, - 423067e-10, - 0, - 0, - .999993, - 426668e-10, - 0, - 0, - .999986, - 433372e-10, - 0, - 0, - .999974, - 444857e-10, - 0, - 0, - .999956, - 463554e-10, - 0, - 0, - .99993, - 493105e-10, - 0, - 0, - .999892, - 539077e-10, - 0, - 0, - .999838, - 610005e-10, - 0, - 0, - .999767, - 718822e-10, - 0, - 0, - .999666, - 884581e-10, - 0, - 365471e-10, - .999525, - 113398e-9, - 0, - 485623e-9, - .999311, - 150043e-9, - 0, - .00162096, - .998865, - 200063e-9, - 0, - .00355319, - .996278, - 211014e-9, - 0, - .00633818, - .992956, - 189672e-9, - 0, - .0100043, - .991017, - 210262e-9, - 0, - .0145648, - .989055, - 244292e-9, - 0, - .0200237, - .986741, - 290481e-9, - 0, - .0263798, - .983288, - 334303e-9, - 0, - .033629, - .977784, - 340307e-9, - 0, - .0417652, - .973037, - 377864e-9, - 0, - .0507821, - .967181, - 4239e-7, - 0, - .060673, - .958971, - 443854e-9, - 0, - .0714314, - .950093, - 483039e-9, - 0, - .0830518, - .939552, - 517934e-9, - 0, - .0955288, - .927678, - 539449e-9, - 0, - .108859, - .918278, - 568604e-9, - 0, - .123038, - .908449, - 588505e-9, - 0, - .138065, - .897713, - 612473e-9, - 0, - .153938, - .885533, - 625575e-9, - 0, - .170657, - .872131, - 63854e-8, - 0, - .188224, - .857517, - 647034e-9, - 0, - .20664, - .841796, - 65209e-8, - 0, - .225909, - .824726, - 6544e-7, - 0, - .246035, - .807297, - 655744e-9, - 0, - .267022, - .789058, - 646716e-9, - 0, - .288878, - .77189, - 643898e-9, - 0, - .311607, - .753082, - 629973e-9, - 0, - .335216, - .7341, - 621564e-9, - 0, - .359713, - .714094, - 605171e-9, - 0, - .385103, - .693839, - 588752e-9, - 0, - .41139, - .673891, - 573294e-9, - 0, - .438576, - .653565, - 552682e-9, - 0, - .466656, - .633326, - 533446e-9, - 0, - .495617, - .612582, - 514635e-9, - 0, - .525431, - .59205, - 49303e-8, - 0, - .556041, - .571918, - 471842e-9, - 0, - .587338, - .551572, - 451713e-9, - 0, - .619048, - .531553, - 430049e-9, - 0, - .650794, - .51175, - 410445e-9, - 0, - .68254, - .49238, - 390098e-9, - 0, - .714286, - .473143, - 370033e-9, - 0, - .746032, - .45423, - 351205e-9, - 0, - .777778, - .435963, - 332049e-9, - 0, - .809524, - .41787, - 315021e-9, - 0, - .84127, - .400387, - 297315e-9, - 0, - .873016, - .383332, - 281385e-9, - 0, - .904762, - .366665, - 265397e-9, - 0, - .936508, - .350633, - 250601e-9, - 0, - .968254, - .334964, - 23589e-8, - 0, - 1, - 1, - 643736e-10, - 0, - 0, - 1, - 64375e-9, - 0, - 0, - 1, - 643947e-10, - 0, - 0, - .999999, - 64481e-9, - 0, - 0, - .999997, - 647143e-10, - 0, - 0, - .999994, - 652119e-10, - 0, - 0, - .999985, - 661359e-10, - 0, - 0, - .999972, - 677116e-10, - 0, - 0, - .999952, - 702599e-10, - 0, - 0, - .999922, - 742517e-10, - 0, - 0, - .99988, - 803906e-10, - 0, - 0, - .99982, - 897315e-10, - 0, - 0, - .999741, - 103838e-9, - 0, - 0, - .999629, - 12496e-8, - 0, - 149024e-9, - .999474, - 156161e-9, - 0, - 861027e-9, - .999229, - 201034e-9, - 0, - .00231198, - .998662, - 259069e-9, - 0, - .00458147, - .995299, - 245439e-9, - 0, - .00770895, - .992732, - 24498e-8, - 0, - .0117126, - .990847, - 273211e-9, - 0, - .0165989, - .988911, - 316492e-9, - 0, - .0223674, - .98654, - 37161e-8, - 0, - .0290135, - .982636, - 410352e-9, - 0, - .0365309, - .977346, - 421756e-9, - 0, - .0449117, - .972909, - 475578e-9, - 0, - .0541481, - .966821, - 522482e-9, - 0, - .0642326, - .958686, - 545008e-9, - 0, - .075158, - .949754, - 589286e-9, - 0, - .0869181, - .939184, - 619995e-9, - 0, - .0995074, - .927505, - 654266e-9, - 0, - .112922, - .916606, - 682362e-9, - 0, - .127157, - .906707, - 704286e-9, - 0, - .142212, - .895937, - 725909e-9, - 0, - .158085, - .883913, - 743939e-9, - 0, - .174776, - .870642, - 755157e-9, - 0, - .192287, - .856241, - 764387e-9, - 0, - .210619, - .84069, - 771032e-9, - 0, - .229775, - .823728, - 765906e-9, - 0, - .249761, - .806481, - 767604e-9, - 0, - .270582, - .787924, - 754385e-9, - 0, - .292243, - .770588, - 749668e-9, - 0, - .314753, - .751991, - 731613e-9, - 0, - .338118, - .733407, - 717655e-9, - 0, - .362347, - .713688, - 700604e-9, - 0, - .387447, - .693595, - 678765e-9, - 0, - .413424, - .673426, - 657042e-9, - 0, - .440284, - .65359, - 635892e-9, - 0, - .468027, - .633576, - 611569e-9, - 0, - .496645, - .613144, - 586011e-9, - 0, - .526122, - .592711, - 563111e-9, - 0, - .556417, - .572722, - 537699e-9, - 0, - .587451, - .552762, - 512556e-9, - 0, - .619048, - .532985, - 489757e-9, - 0, - .650794, - .513219, - 464139e-9, - 0, - .68254, - .493992, - 442193e-9, - 0, - .714286, - .47509, - 418629e-9, - 0, - .746032, - .456287, - 397045e-9, - 0, - .777778, - .438152, - 375504e-9, - 0, - .809524, - .420294, - 35492e-8, - 0, - .84127, - .402749, - 335327e-9, - 0, - .873016, - .385879, - 316422e-9, - 0, - .904762, - .369352, - 298333e-9, - 0, - .936508, - .353301, - 281417e-9, - 0, - .968254, - .337781, - 265203e-9, - 0, - 1, - 1, - 968267e-10, - 0, - 0, - 1, - 968284e-10, - 0, - 0, - 1, - 968556e-10, - 0, - 0, - .999999, - 969733e-10, - 0, - 0, - .999997, - 972913e-10, - 0, - 0, - .999993, - 979688e-10, - 0, - 0, - .999984, - 992239e-10, - 0, - 0, - .999969, - 101356e-9, - 0, - 0, - .999946, - 104784e-9, - 0, - 0, - .999913, - 110111e-9, - 0, - 0, - .999868, - 118217e-9, - 0, - 0, - .999801, - 130396e-9, - 0, - 0, - .999712, - 148523e-9, - 0, - 124907e-10, - .999589, - 175233e-9, - 0, - 355405e-9, - .999416, - 213999e-9, - 0, - .0013528, - .999136, - 268529e-9, - 0, - .00312557, - .998367, - 333088e-9, - 0, - .00573045, - .994701, - 304757e-9, - 0, - .00919397, - .992497, - 318031e-9, - 0, - .0135261, - .990608, - 353863e-9, - 0, - .0187278, - .988715, - 409044e-9, - 0, - .0247947, - .986241, - 472967e-9, - 0, - .0317196, - .981696, - 495104e-9, - 0, - .039494, - .977097, - 532873e-9, - 0, - .0481087, - .972583, - 594447e-9, - 0, - .0575549, - .966142, - 636867e-9, - 0, - .0678242, - .95823, - 669899e-9, - 0, - .0789089, - .949677, - 719499e-9, - 0, - .0908023, - .939226, - 750584e-9, - 0, - .103499, - .927501, - 793183e-9, - 0, - .116993, - .915199, - 81995e-8, - 0, - .131282, - .90498, - 847654e-9, - 0, - .146364, - .894243, - 868929e-9, - 0, - .162237, - .882154, - 884278e-9, - 0, - .178902, - .869161, - 898108e-9, - 0, - .196358, - .854751, - 901254e-9, - 0, - .21461, - .839368, - 90679e-8, - 0, - .23366, - .822874, - 901541e-9, - 0, - .253512, - .805514, - 897297e-9, - 0, - .274174, - .78716, - 881856e-9, - 0, - .29565, - .769061, - 870032e-9, - 0, - .31795, - .751, - 851719e-9, - 0, - .341081, - .732614, - 830671e-9, - 0, - .365053, - .713171, - 806569e-9, - 0, - .389874, - .693472, - 78338e-8, - 0, - .415553, - .673528, - 756404e-9, - 0, - .442098, - .653397, - 726872e-9, - 0, - .469512, - .633781, - 700494e-9, - 0, - .497794, - .613877, - 67105e-8, - 0, - .526935, - .593506, - 640361e-9, - 0, - .556908, - .573667, - 613502e-9, - 0, - .587657, - .553932, - 583177e-9, - 0, - .61906, - .534345, - 554375e-9, - 0, - .650794, - .515042, - 527811e-9, - 0, - .68254, - .495674, - 499367e-9, - 0, - .714286, - .477132, - 47429e-8, - 0, - .746032, - .458609, - 447726e-9, - 0, - .777778, - .440354, - 424205e-9, - 0, - .809524, - .422765, - 399549e-9, - 0, - .84127, - .405472, - 378315e-9, - 0, - .873016, - .388482, - 355327e-9, - 0, - .904762, - .372191, - 336122e-9, - 0, - .936508, - .356099, - 315247e-9, - 0, - .968254, - .340737, - 29794e-8, - 0, - 1, - 1, - 143327e-9, - 0, - 0, - 1, - 14333e-8, - 0, - 0, - 1, - 143366e-9, - 0, - 0, - .999999, - 143524e-9, - 0, - 0, - .999996, - 143952e-9, - 0, - 0, - .999991, - 144862e-9, - 0, - 0, - .999981, - 146544e-9, - 0, - 0, - .999966, - 149391e-9, - 0, - 0, - .999941, - 153946e-9, - 0, - 0, - .999905, - 160971e-9, - 0, - 0, - .999852, - 171562e-9, - 0, - 0, - .99978, - 18729e-8, - 0, - 0, - .999681, - 210386e-9, - 0, - 826239e-10, - .999546, - 243906e-9, - 0, - 664807e-9, - .999352, - 291739e-9, - 0, - .00196192, - .999027, - 357419e-9, - 0, - .00405941, - .997886, - 422349e-9, - 0, - .00699664, - .99419, - 385008e-9, - 0, - .0107896, - .99214, - 409775e-9, - 0, - .0154415, - .990274, - 456418e-9, - 0, - .0209488, - .988455, - 527008e-9, - 0, - .0273037, - .985804, - 597685e-9, - 0, - .0344969, - .98103, - 613124e-9, - 0, - .0425183, - .976674, - 668321e-9, - 0, - .0513575, - .972021, - 736985e-9, - 0, - .0610046, - .965274, - 773789e-9, - 0, - .0714508, - .958046, - 830852e-9, - 0, - .0826877, - .949333, - 875766e-9, - 0, - .0947085, - .939135, - 917088e-9, - 0, - .107507, - .927119, - 952244e-9, - 0, - .121078, - .91469, - 990626e-9, - 0, - .135419, - .903006, - .00101304, - 0, - .150526, - .892368, - .00103834, - 0, - .166399, - .880231, - .00105002, - 0, - .183038, - .867432, - .00106331, - 0, - .200443, - .853208, - .00106783, - 0, - .218618, - .837956, - .00106458, - 0, - .237566, - .821772, - .00105945, - 0, - .257291, - .804328, - .00104685, - 0, - .2778, - .786465, - .00103178, - 0, - .2991, - .768004, - .00101077, - 0, - .321199, - .74972, - 985504e-9, - 0, - .344106, - .731682, - 962893e-9, - 0, - .36783, - .712813, - 932146e-9, - 0, - .392383, - .693139, - 89871e-8, - 0, - .417774, - .673566, - 869678e-9, - 0, - .444013, - .653483, - 835525e-9, - 0, - .471107, - .633891, - 799853e-9, - 0, - .49906, - .614433, - 766838e-9, - 0, - .527869, - .594586, - 732227e-9, - 0, - .557517, - .574769, - 696442e-9, - 0, - .587966, - .555149, - 663935e-9, - 0, - .61913, - .535898, - 629826e-9, - 0, - .650794, - .516753, - 596486e-9, - 0, - .68254, - .497816, - 567078e-9, - 0, - .714286, - .479034, - 534399e-9, - 0, - .746032, - .460975, - 507013e-9, - 0, - .777778, - .442935, - 477421e-9, - 0, - .809524, - .425263, - 451101e-9, - 0, - .84127, - .408248, - 424964e-9, - 0, - .873016, - .391339, - 39993e-8, - 0, - .904762, - .37513, - 377619e-9, - 0, - .936508, - .359172, - 354418e-9, - 0, - .968254, - .343876, - 334823e-9, - 0, - 1, - 1, - 209042e-9, - 0, - 0, - 1, - 209045e-9, - 0, - 0, - 1, - 209093e-9, - 0, - 0, - .999999, - 209304e-9, - 0, - 0, - .999996, - 209871e-9, - 0, - 0, - .999991, - 211078e-9, - 0, - 0, - .999979, - 213304e-9, - 0, - 0, - .999963, - 217061e-9, - 0, - 0, - .999933, - 223042e-9, - 0, - 0, - .999894, - 232206e-9, - 0, - 0, - .999837, - 245901e-9, - 0, - 0, - .999756, - 266023e-9, - 0, - 102927e-11, - .999648, - 295204e-9, - 0, - 233468e-9, - .999499, - 336958e-9, - 0, - .00108237, - .999283, - 395563e-9, - 0, - .00268832, - .998896, - 473785e-9, - 0, - .00511138, - .997006, - 520008e-9, - 0, - .00837705, - .993819, - 497261e-9, - 0, - .0124928, - .991632, - 523722e-9, - 0, - .0174561, - .989875, - 587258e-9, - 0, - .0232596, - .988109, - 676329e-9, - 0, - .0298932, - .985155, - 747701e-9, - 0, - .0373453, - .980479, - 768803e-9, - 0, - .0456045, - .976271, - 841054e-9, - 0, - .0546593, - .971347, - 911469e-9, - 0, - .0644994, - .964528, - 953057e-9, - 0, - .0751152, - .957632, - .00102221, - 0, - .0864981, - .948681, - .00106122, - 0, - .0986407, - .938716, - .00111857, - 0, - .111537, - .926629, - .00114762, - 0, - .125182, - .914025, - .00118995, - 0, - .139571, - .901026, - .00121228, - 0, - .154703, - .890358, - .00123946, - 0, - .170576, - .878283, - .0012527, - 0, - .18719, - .865459, - .00125536, - 0, - .204547, - .851407, - .00126134, - 0, - .222648, - .836276, - .00124759, - 0, - .241498, - .820436, - .00124443, - 0, - .261101, - .803253, - .00122071, - 0, - .281465, - .785562, - .00120107, - 0, - .302595, - .76718, - .00117762, - 0, - .324501, - .748551, - .00114289, - 0, - .347192, - .730564, - .00110872, - 0, - .370679, - .712253, - .00107636, - 0, - .394973, - .692867, - .00103646, - 0, - .420085, - .673695, - 996793e-9, - 0, - .446027, - .653912, - 95675e-8, - 0, - .47281, - .634129, - 916739e-9, - 0, - .500441, - .615004, - 874401e-9, - 0, - .528921, - .595587, - 833411e-9, - 0, - .558244, - .575965, - 794556e-9, - 0, - .588384, - .5566, - 75196e-8, - 0, - .619281, - .537428, - 716381e-9, - 0, - .650795, - .518623, - 676558e-9, - 0, - .68254, - .499964, - 64074e-8, - 0, - .714286, - .481356, - 605984e-9, - 0, - .746032, - .463279, - 570256e-9, - 0, - .777778, - .445673, - 540138e-9, - 0, - .809524, - .428032, - 507299e-9, - 0, - .84127, - .411112, - 479553e-9, - 0, - .873016, - .394444, - 450737e-9, - 0, - .904762, - .378247, - 424269e-9, - 0, - .936508, - .362415, - 399111e-9, - 0, - .968254, - .347103, - 375274e-9, - 0, - 1, - 1, - 300729e-9, - 0, - 0, - 1, - 300733e-9, - 0, - 0, - 1, - 300797e-9, - 0, - 0, - .999998, - 301072e-9, - 0, - 0, - .999996, - 301817e-9, - 0, - 0, - .999989, - 303398e-9, - 0, - 0, - .999977, - 306309e-9, - 0, - 0, - .999958, - 311209e-9, - 0, - 0, - .999927, - 318975e-9, - 0, - 0, - .999884, - 330804e-9, - 0, - 0, - .99982, - 34834e-8, - 0, - 0, - .999733, - 373854e-9, - 0, - 326995e-10, - .999613, - 410424e-9, - 0, - 477174e-9, - .999447, - 462047e-9, - 0, - .00161099, - .999204, - 533322e-9, - 0, - .00353153, - .998725, - 624964e-9, - 0, - .00627965, - .995871, - 631786e-9, - 0, - .0098693, - .993194, - 632017e-9, - 0, - .0143011, - .991541, - 68923e-8, - 0, - .019568, - .989773, - 766892e-9, - 0, - .0256593, - .987647, - 863668e-9, - 0, - .0325625, - .984193, - 922089e-9, - 0, - .0402647, - .980016, - 970749e-9, - 0, - .0487532, - .975859, - .00106027, - 0, - .058016, - .970514, - .00112239, - 0, - .0680419, - .963625, - .00117212, - 0, - .0788208, - .956959, - .00125211, - 0, - .0903439, - .947956, - .00129411, - 0, - .102604, - .93809, - .00135879, - 0, - .115594, - .92659, - .00139309, - 0, - .129309, - .913829, - .00143253, - 0, - .143745, - .90005, - .00145809, - 0, - .158901, - .888129, - .0014748, - 0, - .174774, - .87607, - .00148756, - 0, - .191365, - .863461, - .00148714, - 0, - .208674, - .849594, - .00148892, - 0, - .226705, - .834531, - .00146496, - 0, - .245461, - .81903, - .0014579, - 0, - .264947, - .802122, - .00143039, - 0, - .28517, - .78445, - .00139717, - 0, - .306137, - .766434, - .00136312, - 0, - .327857, - .747816, - .00132597, - 0, - .350341, - .729519, - .00128323, - 0, - .373598, - .711454, - .00123803, - 0, - .397642, - .692699, - .00119097, - 0, - .422485, - .673723, - .00114565, - 0, - .448139, - .654386, - .00109552, - 0, - .474619, - .634673, - .00104553, - 0, - .501933, - .615554, - 99985e-8, - 0, - .530089, - .596462, - 948207e-9, - 0, - .559087, - .577385, - 902299e-9, - 0, - .588913, - .558257, - 856448e-9, - 0, - .619525, - .5392, - 810395e-9, - 0, - .650826, - .520543, - 768558e-9, - 0, - .68254, - .502206, - 7239e-7, - 0, - .714286, - .48402, - 685794e-9, - 0, - .746032, - .465779, - 64471e-8, - 0, - .777778, - .448455, - 609583e-9, - 0, - .809524, - .431091, - 57227e-8, - 0, - .84127, - .414147, - 54042e-8, - 0, - .873016, - .39765, - 506545e-9, - 0, - .904762, - .381576, - 477635e-9, - 0, - .936508, - .365881, - 448446e-9, - 0, - .968254, - .350582, - 421424e-9, - 0, - 1, - 1, - 427144e-9, - 0, - 0, - 1, - 427151e-9, - 0, - 0, - 1, - 427232e-9, - 0, - 0, - .999998, - 42759e-8, - 0, - 0, - .999995, - 428555e-9, - 0, - 0, - .999988, - 430603e-9, - 0, - 0, - .999976, - 434368e-9, - 0, - 0, - .999952, - 440688e-9, - 0, - 0, - .999919, - 450667e-9, - 0, - 0, - .999871, - 46578e-8, - 0, - 0, - .999801, - 488024e-9, - 0, - 0, - .999704, - 520092e-9, - 0, - 129791e-9, - .999572, - 565553e-9, - 0, - 821056e-9, - .999389, - 628906e-9, - 0, - .00225241, - .999114, - 714911e-9, - 0, - .00449109, - .998488, - 819218e-9, - 0, - .00756249, - .995234, - 80415e-8, - 0, - .0114716, - .993021, - 830181e-9, - 0, - .0162131, - .991407, - 902645e-9, - 0, - .021776, - .989625, - 996934e-9, - 0, - .0281471, - .987064, - .00109707, - 0, - .0353118, - .983265, - .00114353, - 0, - .0432562, - .979535, - .0012272, - 0, - .0519665, - .975224, - .00132642, - 0, - .0614298, - .969574, - .00138092, - 0, - .0716348, - .963021, - .00145896, - 0, - .0825709, - .956046, - .00152834, - 0, - .094229, - .947136, - .00158217, - 0, - .106602, - .937313, - .0016347, - 0, - .119682, - .926073, - .00168383, - 0, - .133465, - .913121, - .00171627, - 0, - .147947, - .899165, - .00174229, - 0, - .163125, - .885891, - .00176137, - 0, - .178998, - .873783, - .00176406, - 0, - .195566, - .861331, - .00176156, - 0, - .21283, - .847569, - .00175346, - 0, - .230793, - .832785, - .00172753, - 0, - .249459, - .817442, - .00170204, - 0, - .268832, - .800613, - .00166576, - 0, - .28892, - .783597, - .00162909, - 0, - .30973, - .76571, - .0015826, - 0, - .331271, - .747021, - .00153106, - 0, - .353554, - .728593, - .00148036, - 0, - .37659, - .710661, - .00142808, - 0, - .400391, - .692426, - .00136906, - 0, - .424973, - .673623, - .00131066, - 0, - .450347, - .65494, - .00125569, - 0, - .476531, - .635448, - .00119517, - 0, - .503535, - .616221, - .00113828, - 0, - .531372, - .597531, - .0010816, - 0, - .560047, - .578795, - .00102673, - 0, - .589554, - .559892, - 970985e-9, - 0, - .619869, - .541307, - 919773e-9, - 0, - .650923, - .522608, - 868479e-9, - 0, - .68254, - .504484, - 82137e-8, - 0, - .714286, - .486603, - 772916e-9, - 0, - .746032, - .468802, - 730353e-9, - 0, - .777778, - .451172, - 684955e-9, - 0, - .809524, - .434348, - 647565e-9, - 0, - .84127, - .417445, - 605863e-9, - 0, - .873016, - .401077, - 571885e-9, - 0, - .904762, - .385039, - 536034e-9, - 0, - .936508, - .369483, - 504227e-9, - 0, - .968254, - .354272, - 473165e-9, - 0, - 1, - 1, - 599525e-9, - 0, - 0, - 1, - 599533e-9, - 0, - 0, - 1, - 599639e-9, - 0, - 0, - .999998, - 600097e-9, - 0, - 0, - .999994, - 601336e-9, - 0, - 0, - .999987, - 603958e-9, - 0, - 0, - .999972, - 608775e-9, - 0, - 0, - .999949, - 616842e-9, - 0, - 0, - .999912, - 629534e-9, - 0, - 0, - .999857, - 648658e-9, - 0, - 0, - .999781, - 676615e-9, - 0, - 538873e-11, - .999674, - 716574e-9, - 0, - 308602e-9, - .999528, - 772641e-9, - 0, - .00127003, - .999326, - 849806e-9, - 0, - .00300783, - .999009, - 952682e-9, - 0, - .00556637, - .998112, - .00106394, - 0, - .00895889, - .994496, - .00102228, - 0, - .0131827, - .992806, - .00108586, - 0, - .0182277, - .991211, - .0011759, - 0, - .0240795, - .989415, - .00128955, - 0, - .030723, - .986499, - .00139038, - 0, - .0381418, - .982679, - .00144539, - 0, - .046321, - .978839, - .00153954, - 0, - .0552459, - .974295, - .00164417, - 0, - .0649034, - .968784, - .00171517, - 0, - .0752814, - .962324, - .00180282, - 0, - .0863693, - .954956, - .00186387, - 0, - .0981578, - .94624, - .00193817, - 0, - .110639, - .936517, - .00198156, - 0, - .123806, - .925186, - .00203042, - 0, - .137655, - .91252, - .0020664, - 0, - .15218, - .898441, - .00207822, - 0, - .16738, - .884394, - .0020992, - 0, - .183253, - .871273, - .00208748, - 0, - .199799, - .859057, - .00208686, - 0, - .21702, - .845243, - .00205519, - 0, - .234918, - .830723, - .00202868, - 0, - .253496, - .815801, - .00199501, - 0, - .272761, - .79914, - .00194193, - 0, - .292719, - .782372, - .00188824, - 0, - .313377, - .76482, - .00183695, - 0, - .334745, - .746586, - .00177418, - 0, - .356833, - .7281, - .00170628, - 0, - .379654, - .709842, - .00164063, - 0, - .403221, - .692019, - .00157355, - 0, - .427548, - .67364, - .00150262, - 0, - .452651, - .655277, - .00143473, - 0, - .478545, - .636438, - .00136371, - 0, - .505246, - .617364, - .00129911, - 0, - .532768, - .598603, - .00123014, - 0, - .561122, - .580195, - .00116587, - 0, - .590309, - .561786, - .00110398, - 0, - .620318, - .543377, - .00104148, - 0, - .651102, - .525093, - 983984e-9, - 0, - .682545, - .506791, - 92667e-8, - 0, - .714286, - .489291, - 874326e-9, - 0, - .746032, - .471811, - 821734e-9, - 0, - .777778, - .454435, - 774698e-9, - 0, - .809524, - .437493, - 727302e-9, - 0, - .84127, - .420977, - 684039e-9, - 0, - .873016, - .404729, - 64373e-8, - 0, - .904762, - .388756, - 60285e-8, - 0, - .936508, - .373344, - 56765e-8, - 0, - .968254, - .358191, - 531929e-9, - 0, - 1, - 1, - 832169e-9, - 0, - 0, - 1, - 832178e-9, - 0, - 0, - 1, - 83231e-8, - 0, - 0, - .999998, - 832893e-9, - 0, - 0, - .999995, - 834465e-9, - 0, - 0, - .999985, - 837791e-9, - 0, - 0, - .999969, - 843893e-9, - 0, - 0, - .999944, - 854086e-9, - 0, - 0, - .999903, - 870071e-9, - 0, - 0, - .999843, - 894042e-9, - 0, - 0, - .999759, - 928865e-9, - 0, - 531805e-10, - .999643, - 978242e-9, - 0, - 579365e-9, - .99948, - .00104684, - 0, - .00182774, - .999255, - .00114012, - 0, - .00387804, - .998885, - .00126188, - 0, - .00675709, - .997405, - .00135888, - 0, - .010468, - .99424, - .00133626, - 0, - .0150018, - .992458, - .00140905, - 0, - .0203443, - .990929, - .00152305, - 0, - .0264786, - .989116, - .00165882, - 0, - .0333875, - .985624, - .00174128, - 0, - .0410536, - .982003, - .00182108, - 0, - .0494609, - .978336, - .00194498, - 0, - .0585941, - .973184, - .00202708, - 0, - .0684396, - .9678, - .00212166, - 0, - .0789851, - .961348, - .00221366, - 0, - .0902199, - .953841, - .00228219, - 0, - .102134, - .94534, - .00235662, - 0, - .114721, - .935552, - .00240572, - 0, - .127972, - .924064, - .00244405, - 0, - .141884, - .911827, - .00247557, - 0, - .156451, - .897731, - .00248374, - 0, - .171672, - .883409, - .00249863, - 0, - .187545, - .868625, - .00246688, - 0, - .20407, - .856529, - .00246523, - 0, - .221249, - .842999, - .00242368, - 0, - .239083, - .828505, - .00237354, - 0, - .257578, - .813825, - .00232588, - 0, - .276738, - .797813, - .00226731, - 0, - .296569, - .781097, - .00219704, - 0, - .31708, - .764038, - .00212394, - 0, - .338281, - .746067, - .00204786, - 0, - .360181, - .727687, - .00196728, - 0, - .382794, - .709571, - .00188779, - 0, - .406133, - .691503, - .00180532, - 0, - .430213, - .673673, - .00171849, - 0, - .45505, - .655732, - .00164147, - 0, - .480662, - .637399, - .00155858, - 0, - .507065, - .618616, - .00147641, - 0, - .534278, - .60005, - .00140125, - 0, - .562313, - .581713, - .00132441, - 0, - .59118, - .563546, - .00125014, - 0, - .620875, - .545605, - .00118249, - 0, - .651373, - .527559, - .0011116, - 0, - .682593, - .509764, - .00104979, - 0, - .714286, - .49193, - 985977e-9, - 0, - .746032, - .475011, - 928592e-9, - 0, - .777778, - .457878, - 873466e-9, - 0, - .809524, - .440979, - 819585e-9, - 0, - .84127, - .424613, - 772365e-9, - 0, - .873016, - .408549, - 722195e-9, - 0, - .904762, - .392771, - 680014e-9, - 0, - .936508, - .377317, - 636797e-9, - 0, - .968254, - .362352, - 598318e-9, - 0, - 1, - 1, - .00114313, - 0, - 0, - 1, - .00114314, - 0, - 0, - .999999, - .00114331, - 0, - 0, - .999998, - .00114404, - 0, - 0, - .999994, - .00114601, - 0, - 0, - .999984, - .00115019, - 0, - 0, - .999967, - .00115784, - 0, - 0, - .999937, - .0011706, - 0, - 0, - .999894, - .00119054, - 0, - 0, - .999828, - .00122031, - 0, - 0, - .999735, - .00126331, - 0, - 169263e-9, - .999606, - .00132382, - 0, - 949167e-9, - .999426, - .0014071, - 0, - .00249668, - .999173, - .00151895, - 0, - .00486392, - .99873, - .00166102, - 0, - .00806323, - .996243, - .0017023, - 0, - .0120895, - .993779, - .00172782, - 0, - .0169288, - .9919, - .0018108, - 0, - .0225633, - .990524, - .00196028, - 0, - .028974, - .98868, - .00212014, - 0, - .036142, - .984663, - .00217598, - 0, - .044049, - .981457, - .00230563, - 0, - .0526781, - .977608, - .00243966, - 0, - .0620137, - .972215, - .00251336, - 0, - .0720418, - .966798, - .0026285, - 0, - .0827499, - .960241, - .00271409, - 0, - .0941271, - .952489, - .00278381, - 0, - .106164, - .944127, - .00285399, - 0, - .118852, - .934282, - .00290994, - 0, - .132185, - .923271, - .00294558, - 0, - .146157, - .910803, - .00296269, - 0, - .160766, - .896705, - .00296803, - 0, - .176007, - .88238, - .00296637, - 0, - .19188, - .867116, - .00293163, - 0, - .208385, - .853636, - .00289418, - 0, - .225523, - .840469, - .00284663, - 0, - .243296, - .82639, - .00278594, - 0, - .261709, - .811759, - .00271618, - 0, - .280767, - .796113, - .00263187, - 0, - .300476, - .779518, - .00254589, - 0, - .320845, - .763142, - .00246003, - 0, - .341883, - .745464, - .00236529, - 0, - .363601, - .727491, - .00226536, - 0, - .386011, - .709414, - .00216375, - 0, - .409128, - .691396, - .00207127, - 0, - .432967, - .67368, - .00197106, - 0, - .457545, - .656049, - .00187022, - 0, - .482881, - .638188, - .00177605, - 0, - .508992, - .620177, - .00168482, - 0, - .535899, - .601506, - .00158909, - 0, - .563619, - .58362, - .00150583, - 0, - .592165, - .565496, - .00141791, - 0, - .621544, - .54789, - .00133693, - 0, - .651743, - .530323, - .00126038, - 0, - .682709, - .512795, - .00118556, - 0, - .714286, - .495199, - .00111527, - 0, - .746032, - .478101, - .0010489, - 0, - .777778, - .461511, - 984264e-9, - 0, - .809524, - .444879, - 92591e-8, - 0, - .84127, - .428424, - 866582e-9, - 0, - .873016, - .412495, - 814463e-9, - 0, - .904762, - .396975, - 764498e-9, - 0, - .936508, - .381614, - 715967e-9, - 0, - .968254, - .366732, - 672483e-9, - 0, - 1, - 1, - .00155501, - 0, - 0, - 1, - .00155503, - 0, - 0, - 1, - .00155524, - 0, - 0, - .999998, - .00155615, - 0, - 0, - .999994, - .0015586, - 0, - 0, - .999983, - .00156379, - 0, - 0, - .999963, - .0015733, - 0, - 0, - .999932, - .00158911, - 0, - 0, - .999882, - .00161376, - 0, - 0, - .99981, - .00165041, - 0, - 100875e-10, - .999708, - .00170304, - 0, - 367658e-9, - .999565, - .00177658, - 0, - .0014234, - .999368, - .00187688, - 0, - .00327939, - .999081, - .00200989, - 0, - .00596629, - .99852, - .00217177, - 0, - .0094852, - .99549, - .0021745, - 0, - .013824, - .993252, - .00222357, - 0, - .0189642, - .991727, - .00235022, - 0, - .0248856, - .989951, - .00250561, - 0, - .0315669, - .988029, - .00268829, - 0, - .0389882, - .984029, - .0027496, - 0, - .0471302, - .980683, - .00289793, - 0, - .0559754, - .976554, - .00303315, - 0, - .0655081, - .97139, - .00313257, - 0, - .0757138, - .965544, - .00323656, - 0, - .08658, - .95912, - .00333432, - 0, - .0980954, - .951183, - .0034039, - 0, - .110251, - .942974, - .00347515, - 0, - .123038, - .932642, - .00350381, - 0, - .13645, - .922158, - .00354519, - 0, - .150482, - .909404, - .00353851, - 0, - .165129, - .896071, - .0035435, - 0, - .18039, - .881206, - .00349936, - 0, - .196263, - .866077, - .00347256, - 0, - .212748, - .85093, - .003415, - 0, - .229847, - .837703, - .00333367, - 0, - .247561, - .823878, - .003249, - 0, - .265895, - .809449, - .00316347, - 0, - .284854, - .794379, - .00306351, - 0, - .304445, - .778138, - .0029499, - 0, - .324675, - .761997, - .00284099, - 0, - .345555, - .744938, - .00272104, - 0, - .367095, - .727212, - .00260715, - 0, - .389309, - .709549, - .00248855, - 0, - .41221, - .691704, - .00236783, - 0, - .435814, - .673689, - .00225178, - 0, - .460138, - .656453, - .00213765, - 0, - .485203, - .639128, - .00202178, - 0, - .511028, - .621512, - .00191443, - 0, - .537634, - .603598, - .00180977, - 0, - .565041, - .58559, - .00170456, - 0, - .593268, - .567852, - .00160927, - 0, - .622327, - .5503, - .00151395, - 0, - .652217, - .533033, - .00142499, - 0, - .682907, - .515942, - .00133955, - 0, - .714296, - .498814, - .0012602, - 0, - .746032, - .481595, - .00118188, - 0, - .777778, - .465117, - .00111171, - 0, - .809524, - .448865, - .00104091, - 0, - .84127, - .432711, - 976618e-9, - 0, - .873016, - .416822, - 91859e-8, - 0, - .904762, - .401272, - 857704e-9, - 0, - .936508, - .386226, - 807172e-9, - 0, - .968254, - .371321, - 75464e-8, - 0, - 1, - 1, - .00209596, - 0, - 0, - 1, - .00209598, - 0, - 0, - 1, - .00209624, - 0, - 0, - .999997, - .00209736, - 0, - 0, - .999991, - .00210039, - 0, - 0, - .999979, - .00210678, - 0, - 0, - .999959, - .00211847, - 0, - 0, - .999925, - .0021379, - 0, - 0, - .99987, - .00216809, - 0, - 0, - .999791, - .00221281, - 0, - 681487e-10, - .999677, - .00227669, - 0, - 658161e-9, - .999521, - .00236533, - 0, - .00200635, - .999301, - .00248514, - 0, - .0041779, - .998977, - .00264185, - 0, - .00718648, - .998191, - .00281695, - 0, - .0110239, - .994801, - .00278518, - 0, - .015672, - .993091, - .00288774, - 0, - .0211091, - .991571, - .00303931, - 0, - .0273123, - .9897, - .00321643, - 0, - .034259, - .987023, - .00337332, - 0, - .0419282, - .983289, - .00346146, - 0, - .0502998, - .979892, - .00363704, - 0, - .0593562, - .975111, - .00373601, - 0, - .069081, - .970351, - .0038842, - 0, - .0794598, - .964131, - .00397053, - 0, - .0904798, - .957747, - .00408078, - 0, - .10213, - .949536, - .00413533, - 0, - .1144, - .941372, - .00420305, - 0, - .127284, - .931049, - .00422815, - 0, - .140772, - .920647, - .00425048, - 0, - .154862, - .908033, - .0042281, - 0, - .169548, - .895028, - .00422026, - 0, - .184828, - .879968, - .00415042, - 0, - .200701, - .864875, - .00408821, - 0, - .217167, - .84918, - .00400909, - 0, - .234227, - .834934, - .00391178, - 0, - .251884, - .821397, - .00380066, - 0, - .270141, - .807135, - .00367974, - 0, - .289004, - .792363, - .00355172, - 0, - .308479, - .776661, - .003411, - 0, - .328575, - .760705, - .00328123, - 0, - .349301, - .744408, - .00314003, - 0, - .370668, - .726994, - .0029906, - 0, - .392689, - .709598, - .00285034, - 0, - .415379, - .692112, - .00271179, - 0, - .438754, - .674435, - .00257185, - 0, - .46283, - .65676, - .00243425, - 0, - .48763, - .639982, - .00230351, - 0, - .513173, - .622983, - .0021777, - 0, - .539482, - .605471, - .00204991, - 0, - .566579, - .58796, - .00193759, - 0, - .594488, - .570463, - .00181976, - 0, - .623226, - .553058, - .00171497, - 0, - .6528, - .535894, - .00161109, - 0, - .683198, - .519089, - .00151394, - 0, - .714354, - .502454, - .00142122, - 0, - .746032, - .485681, - .00133488, - 0, - .777778, - .468935, - .00124975, - 0, - .809524, - .452951, - .00117309, - 0, - .84127, - .437139, - .00110155, - 0, - .873016, - .421446, - .00103124, - 0, - .904762, - .405951, - 966387e-9, - 0, - .936508, - .391003, - 908119e-9, - 0, - .968254, - .376198, - 848057e-9, - 0, - 1, - 1, - .00280076, - 0, - 0, - 1, - .00280078, - 0, - 0, - .999999, - .00280109, - 0, - 0, - .999997, - .00280246, - 0, - 0, - .999992, - .00280616, - 0, - 0, - .999979, - .00281396, - 0, - 0, - .999956, - .00282822, - 0, - 0, - .999916, - .00285186, - 0, - 0, - .999857, - .0028885, - 0, - 0, - .999768, - .00294259, - 0, - 196026e-9, - .999645, - .00301946, - 0, - .00104842, - .99947, - .00312541, - 0, - .00270199, - .999229, - .00326733, - 0, - .00519449, - .998852, - .00344992, - 0, - .00852602, - .997558, - .00361052, - 0, - .0126804, - .994417, - .0035898, - 0, - .017635, - .992824, - .00372393, - 0, - .023365, - .991344, - .00390695, - 0, - .0298456, - .989337, - .00410392, - 0, - .0370529, - .985811, - .00420987, - 0, - .0449651, - .982772, - .00437488, - 0, - .0535615, - .979001, - .00455069, - 0, - .0628243, - .974102, - .00464462, - 0, - .0727368, - .969197, - .00480577, - 0, - .0832844, - .962759, - .00487818, - 0, - .0944545, - .956207, - .00498176, - 0, - .106236, - .947909, - .00503392, - 0, - .118619, - .939596, - .00507474, - 0, - .131595, - .929642, - .00509798, - 0, - .145159, - .918807, - .00508476, - 0, - .159305, - .906921, - .00505634, - 0, - .174028, - .893312, - .00498845, - 0, - .189327, - .878933, - .0049133, - 0, - .2052, - .863986, - .0048259, - 0, - .221647, - .847936, - .00470848, - 0, - .23867, - .832253, - .00456889, - 0, - .25627, - .818619, - .00442726, - 0, - .274453, - .804788, - .00427677, - 0, - .293222, - .790241, - .00411906, - 0, - .312585, - .775162, - .00394833, - 0, - .33255, - .759463, - .00377366, - 0, - .353126, - .743598, - .00361026, - 0, - .374324, - .72697, - .00343627, - 0, - .396158, - .709646, - .00326422, - 0, - .418641, - .69277, - .00309717, - 0, - .44179, - .675371, - .0029356, - 0, - .465624, - .657863, - .00277712, - 0, - .490163, - .640772, - .00261738, - 0, - .515429, - .624441, - .0024737, - 0, - .541445, - .607497, - .00233125, - 0, - .568236, - .590438, - .00218994, - 0, - .595828, - .573224, - .0020664, - 0, - .624242, - .556168, - .00193526, - 0, - .653496, - .539232, - .00182463, - 0, - .683588, - .522352, - .00170735, - 0, - .714482, - .506172, - .00160555, - 0, - .746032, - .489842, - .00150451, - 0, - .777778, - .473463, - .00140938, - 0, - .809524, - .457266, - .00132568, - 0, - .84127, - .441609, - .0012376, - 0, - .873016, - .426348, - .00116265, - 0, - .904762, - .411002, - .00108935, - 0, - .936508, - .396045, - .00101946, - 0, - .968254, - .381448, - 955665e-9, - 0, - 1, - 1, - .0037121, - 0, - 0, - 1, - .00371213, - 0, - 0, - 1, - .00371251, - 0, - 0, - .999997, - .00371417, - 0, - 0, - .99999, - .00371863, - 0, - 0, - .999977, - .00372807, - 0, - 0, - .99995, - .00374529, - 0, - 0, - .999908, - .0037738, - 0, - 0, - .999843, - .00381789, - 0, - 123596e-10, - .999745, - .00388273, - 0, - 407442e-9, - .999608, - .00397443, - 0, - .0015447, - .999415, - .00409998, - 0, - .00351385, - .999143, - .00426662, - 0, - .0063316, - .9987, - .00447625, - 0, - .00998679, - .996363, - .00455323, - 0, - .0144569, - .994021, - .00461052, - 0, - .0197151, - .992372, - .00476359, - 0, - .0257344, - .991007, - .00499101, - 0, - .0324882, - .988767, - .0051972, - 0, - .0399517, - .984872, - .00528407, - 0, - .0481022, - .982004, - .00548926, - 0, - .0569191, - .977714, - .00564385, - 0, - .0663839, - .973076, - .0057693, - 0, - .0764801, - .967565, - .0058924, - 0, - .0871928, - .961384, - .00599629, - 0, - .0985095, - .954435, - .00605998, - 0, - .110419, - .946303, - .0061133, - 0, - .122912, - .937662, - .00612028, - 0, - .13598, - .927867, - .00612209, - 0, - .149617, - .916475, - .00604813, - 0, - .163817, - .90541, - .00603088, - 0, - .178577, - .891591, - .00592218, - 0, - .193894, - .877573, - .00578854, - 0, - .209767, - .862511, - .00566648, - 0, - .226196, - .846861, - .00551481, - 0, - .243182, - .83068, - .00533754, - 0, - .260728, - .815725, - .00515487, - 0, - .278837, - .802321, - .0049655, - 0, - .297515, - .787826, - .00475421, - 0, - .316768, - .773454, - .00456002, - 0, - .336605, - .758224, - .00434727, - 0, - .357034, - .74265, - .00414444, - 0, - .378067, - .726729, - .00393738, - 0, - .399717, - .710155, - .00373575, - 0, - .421998, - .693312, - .00353736, - 0, - .444928, - .67653, - .00334368, - 0, - .468523, - .659444, - .00315981, - 0, - .492806, - .642051, - .00297809, - 0, - .517798, - .625758, - .00280592, - 0, - .543525, - .609615, - .00264254, - 0, - .570012, - .592919, - .00248459, - 0, - .597288, - .576298, - .00233327, - 0, - .625379, - .559489, - .00219519, - 0, - .654307, - .542891, - .00205441, - 0, - .684084, - .526255, - .00193385, - 0, - .714693, - .509853, - .00180745, - 0, - .746044, - .494131, - .00169817, - 0, - .777778, - .478114, - .0015913, - 0, - .809524, - .462274, - .00148981, - 0, - .84127, - .446412, - .00139537, - 0, - .873016, - .431274, - .00130984, - 0, - .904762, - .41635, - .00122403, - 0, - .936508, - .401476, - .00114809, - 0, - .968254, - .386993, - .00107563, - 0, - 1, - 1, - .00488216, - 0, - 0, - 1, - .0048822, - 0, - 0, - 1, - .00488265, - 0, - 0, - .999997, - .00488463, - 0, - 0, - .999988, - .00488999, - 0, - 0, - .999974, - .00490129, - 0, - 0, - .999946, - .00492191, - 0, - 0, - .999897, - .00495598, - 0, - 0, - .999825, - .00500855, - 0, - 744791e-10, - .999718, - .00508559, - 0, - 712744e-9, - .999565, - .005194, - 0, - .00215249, - .999352, - .00534147, - 0, - .00444576, - .999046, - .00553523, - 0, - .00759218, - .998492, - .00577016, - 0, - .0115714, - .995564, - .00578487, - 0, - .0163557, - .993339, - .00586414, - 0, - .021915, - .991834, - .00606002, - 0, - .0282201, - .990496, - .00633312, - 0, - .0352433, - .987826, - .00651941, - 0, - .042959, - .98383, - .00660842, - 0, - .0513439, - .98109, - .00685523, - 0, - .0603772, - .976131, - .00695778, - 0, - .0700402, - .971922, - .00714236, - 0, - .0803163, - .965901, - .00721437, - 0, - .0911908, - .959606, - .00732017, - 0, - .102651, - .952504, - .00735788, - 0, - .114686, - .944365, - .00738493, - 0, - .127286, - .935652, - .00737969, - 0, - .140443, - .925813, - .00733612, - 0, - .154151, - .914397, - .00723094, - 0, - .168405, - .903257, - .00714002, - 0, - .183201, - .890015, - .00700149, - 0, - .198536, - .876014, - .00682813, - 0, - .214409, - .861436, - .00665567, - 0, - .23082, - .845752, - .00644526, - 0, - .24777, - .829169, - .00621635, - 0, - .265263, - .813435, - .00597789, - 0, - .283301, - .799701, - .00575694, - 0, - .301889, - .785726, - .00549866, - 0, - .321035, - .77152, - .0052503, - 0, - .340746, - .75683, - .00499619, - 0, - .361032, - .741951, - .0047543, - 0, - .381904, - .726367, - .0045084, - 0, - .403374, - .710537, - .00426784, - 0, - .425457, - .693965, - .00403487, - 0, - .448169, - .677724, - .0038075, - 0, - .47153, - .66117, - .00359431, - 0, - .495561, - .644274, - .00338354, - 0, - .520284, - .627449, - .00318163, - 0, - .545725, - .611645, - .00299672, - 0, - .571911, - .595614, - .00281016, - 0, - .598873, - .579426, - .00264252, - 0, - .62664, - .563016, - .00247509, - 0, - .655239, - .546728, - .00232647, - 0, - .684692, - .530539, - .00217803, - 0, - .714999, - .514164, - .00204216, - 0, - .746106, - .498344, - .00191403, - 0, - .777778, - .482957, - .00179203, - 0, - .809524, - .467336, - .00167695, - 0, - .84127, - .451994, - .00157567, - 0, - .873016, - .436514, - .00147113, - 0, - .904762, - .42178, - .00138034, - 0, - .936508, - .407271, - .00129219, - 0, - .968254, - .392822, - .0012098, - 0, - 1, - 1, - .00637427, - 0, - 0, - 1, - .00637431, - 0, - 0, - .999999, - .00637485, - 0, - 0, - .999996, - .00637721, - 0, - 0, - .999987, - .00638357, - 0, - 0, - .999971, - .006397, - 0, - 0, - .999939, - .00642142, - 0, - 0, - .999888, - .00646177, - 0, - 0, - .999807, - .00652387, - 0, - 207916e-9, - .999689, - .00661454, - 0, - .00112051, - .99952, - .00674155, - 0, - .00287719, - .999283, - .00691313, - 0, - .00550145, - .998936, - .00713598, - 0, - .00897928, - .998165, - .00738501, - 0, - .0132829, - .994847, - .00734388, - 0, - .01838, - .993182, - .00749991, - 0, - .0242381, - .991665, - .0077246, - 0, - .030826, - .989708, - .00797579, - 0, - .0381152, - .986663, - .00813011, - 0, - .0460794, - .983288, - .00830365, - 0, - .0546951, - .980104, - .00853496, - 0, - .0639411, - .974855, - .00861045, - 0, - .0737988, - .97045, - .00879133, - 0, - .0842516, - .964509, - .00886377, - 0, - .0952848, - .957594, - .00890346, - 0, - .106886, - .950546, - .00893289, - 0, - .119044, - .942225, - .00890074, - 0, - .131749, - .933365, - .00886826, - 0, - .144994, - .923202, - .0087316, - 0, - .158772, - .912605, - .00863082, - 0, - .173078, - .901099, - .00847403, - 0, - .187908, - .888177, - .00825838, - 0, - .203261, - .873955, - .00801834, - 0, - .219134, - .860091, - .00779026, - 0, - .235527, - .84434, - .00752478, - 0, - .252443, - .828517, - .00724074, - 0, - .269883, - .81239, - .00693769, - 0, - .287851, - .79721, - .00664817, - 0, - .306352, - .783489, - .00634763, - 0, - .325393, - .769514, - .00604221, - 0, - .344981, - .755419, - .00573568, - 0, - .365126, - .741083, - .00544359, - 0, - .385839, - .726059, - .00515515, - 0, - .407132, - .710809, - .00487139, - 0, - .42902, - .695052, - .00459846, - 0, - .45152, - .678886, - .00433412, - 0, - .474651, - .663042, - .00407981, - 0, - .498433, - .646634, - .00384264, - 0, - .52289, - .630117, - .00360897, - 0, - .548048, - .613804, - .00338863, - 0, - .573936, - .598338, - .00318486, - 0, - .600584, - .582687, - .00298377, - 0, - .628027, - .566809, - .00280082, - 0, - .656295, - .550817, - .00262255, - 0, - .685417, - .534937, - .00245835, - 0, - .715406, - .519151, - .00230574, - 0, - .74624, - .503118, - .0021549, - 0, - .777778, - .487723, - .00202008, - 0, - .809524, - .472725, - .00189355, - 0, - .84127, - .457599, - .00177108, - 0, - .873016, - .442558, - .00165843, - 0, - .904762, - .427624, - .00155494, - 0, - .936508, - .413171, - .00145273, - 0, - .968254, - .399122, - .00136454, - 0, - 1, - 1, - .00826496, - 0, - 0, - 1, - .00826499, - 0, - 0, - 1, - .00826564, - 0, - 0, - .999996, - .00826842, - 0, - 0, - .999987, - .00827589, - 0, - 0, - .999967, - .00829167, - 0, - 0, - .999933, - .00832037, - 0, - 0, - .999876, - .00836768, - 0, - 109338e-10, - .999786, - .00844031, - 0, - 427145e-9, - .999655, - .00854603, - 0, - .0016384, - .999468, - .00869337, - 0, - .00372392, - .999203, - .008891, - 0, - .00668513, - .998803, - .00914387, - 0, - .0104968, - .99748, - .00935838, - 0, - .015125, - .994446, - .00933309, - 0, - .0205338, - .99292, - .00953084, - 0, - .0266884, - .991414, - .0097893, - 0, - .0335565, - .989049, - .0100228, - 0, - .0411086, - .98582, - .0101664, - 0, - .0493181, - .982441, - .0103582, - 0, - .0581613, - .978595, - .0105292, - 0, - .0676169, - .973495, - .0106274, - 0, - .0776661, - .968405, - .0107261, - 0, - .0882926, - .962717, - .0108234, - 0, - .0994817, - .955478, - .0108102, - 0, - .111221, - .948275, - .0107914, - 0, - .123499, - .940006, - .0107161, - 0, - .136308, - .930831, - .0106309, - 0, - .149639, - .920648, - .0104083, - 0, - .163485, - .910205, - .0102312, - 0, - .177843, - .898445, - .0100051, - 0, - .192707, - .885986, - .00971928, - 0, - .208077, - .872204, - .00940747, - 0, - .22395, - .858436, - .0091085, - 0, - .240326, - .843454, - .00876595, - 0, - .257208, - .827437, - .00839794, - 0, - .274596, - .811488, - .00803692, - 0, - .292496, - .796039, - .00767352, - 0, - .310911, - .781083, - .0073097, - 0, - .329849, - .767642, - .00694032, - 0, - .349316, - .753901, - .00657476, - 0, - .369323, - .740131, - .00622699, - 0, - .38988, - .725845, - .0058838, - 0, - .410999, - .710991, - .00555586, - 0, - .432696, - .696002, - .00523089, - 0, - .454987, - .680461, - .00492494, - 0, - .47789, - .664875, - .00463464, - 0, - .501426, - .649273, - .00435422, - 0, - .52562, - .63302, - .0040875, - 0, - .550498, - .61705, - .00384075, - 0, - .576089, - .601154, - .00359557, - 0, - .602427, - .586008, - .00337636, - 0, - .629544, - .570699, - .00316019, - 0, - .657479, - .555166, - .00296033, - 0, - .686264, - .539645, - .00277552, - 0, - .715924, - .524159, - .00259499, - 0, - .746459, - .508682, - .00243257, - 0, - .777789, - .493163, - .00227851, - 0, - .809524, - .478004, - .00213083, - 0, - .84127, - .46347, - .00199502, - 0, - .873016, - .448778, - .00186967, - 0, - .904762, - .434105, - .00174732, - 0, - .936508, - .419576, - .00163861, - 0, - .968254, - .405541, - .00153341, - 0, - 1, - 1, - .0106462, - 0, - 0, - 1, - .0106462, - 0, - 0, - .999999, - .010647, - 0, - 0, - .999995, - .0106502, - 0, - 0, - .999985, - .0106589, - 0, - 0, - .999964, - .0106773, - 0, - 0, - .999925, - .0107106, - 0, - 0, - .999861, - .0107655, - 0, - 712986e-10, - .999763, - .0108497, - 0, - 743959e-9, - .999616, - .0109716, - 0, - .00227361, - .999408, - .0111408, - 0, - .0046983, - .999112, - .0113659, - 0, - .00800158, - .998637, - .0116475, - 0, - .0121493, - .996223, - .0117231, - 0, - .0171023, - .994006, - .0118064, - 0, - .0228218, - .992444, - .0120254, - 0, - .0292711, - .991028, - .0123314, - 0, - .036417, - .98803, - .0124954, - 0, - .0442295, - .984816, - .0126538, - 0, - .0526815, - .981399, - .0128537, - 0, - .0617492, - .977085, - .0129694, - 0, - .0714114, - .972154, - .013091, - 0, - .0816495, - .966617, - .0131166, - 0, - .0924472, - .960628, - .0131583, - 0, - .10379, - .953295, - .0131094, - 0, - .115665, - .94575, - .0129966, - 0, - .128062, - .937654, - .0128796, - 0, - .140972, - .927716, - .0126477, - 0, - .154387, - .917932, - .0123889, - 0, - .168301, - .907719, - .012131, - 0, - .182709, - .89584, - .0118013, - 0, - .197608, - .883526, - .0114145, - 0, - .212994, - .870301, - .0110075, - 0, - .228867, - .856272, - .0106019, - 0, - .245227, - .842251, - .0101938, - 0, - .262074, - .826466, - .00973254, - 0, - .279412, - .810859, - .0092846, - 0, - .297244, - .795051, - .00883304, - 0, - .315575, - .780053, - .00840272, - 0, - .334412, - .76575, - .00796438, - 0, - .35376, - .752298, - .00752526, - 0, - .373631, - .739153, - .00711486, - 0, - .394034, - .725514, - .00670361, - 0, - .414983, - .711473, - .00632656, - 0, - .436491, - .696936, - .00595206, - 0, - .458575, - .682126, - .00559191, - 0, - .481253, - .667027, - .00525362, - 0, - .504547, - .651875, - .00493805, - 0, - .528481, - .636463, - .00462848, - 0, - .553081, - .620641, - .00433936, - 0, - .578377, - .604931, - .00407, - 0, - .604404, - .589549, - .00380864, - 0, - .631197, - .574712, - .00357049, - 0, - .658795, - .559775, - .00334466, - 0, - .687238, - .544514, - .00312505, - 0, - .716559, - .529555, - .00293199, - 0, - .746776, - .514402, - .00274204, - 0, - .777849, - .499302, - .00256647, - 0, - .809524, - .484114, - .00239901, - 0, - .84127, - .469308, - .00225148, - 0, - .873016, - .455133, - .00210178, - 0, - .904762, - .440939, - .0019727, - 0, - .936508, - .426627, - .00184382, - 0, - .968254, - .412509, - .00172548, - 0, - 1, - 1, - .013628, - 0, - 0, - 1, - .0136281, - 0, - 0, - .999999, - .0136289, - 0, - 0, - .999995, - .0136327, - 0, - 0, - .999983, - .0136427, - 0, - 0, - .99996, - .0136638, - 0, - 0, - .999917, - .0137022, - 0, - 0, - .999846, - .0137652, - 0, - 204597e-9, - .999736, - .0138615, - 0, - .00116837, - .999573, - .0140007, - 0, - .00303325, - .99934, - .0141927, - 0, - .00580613, - .999004, - .0144457, - 0, - .00945626, - .998407, - .0147489, - 0, - .0139421, - .995464, - .014731, - 0, - .0192202, - .993328, - .0148283, - 0, - .0252495, - .991799, - .0150797, - 0, - .0319921, - .990397, - .0154316, - 0, - .0394138, - .986835, - .0155005, - 0, - .0474843, - .983938, - .0157308, - 0, - .0561763, - .980154, - .0158753, - 0, - .0654661, - .975659, - .0159581, - 0, - .0753326, - .970171, - .0159832, - 0, - .0857571, - .964803, - .0160084, - 0, - .0967236, - .958366, - .0159484, - 0, - .108218, - .950613, - .0158001, - 0, - .120227, - .942874, - .0155845, - 0, - .132741, - .935005, - .0154292, - 0, - .145751, - .924991, - .0150742, - 0, - .159249, - .914814, - .0146757, - 0, - .17323, - .904743, - .0143097, - 0, - .187687, - .893216, - .0138695, - 0, - .202619, - .880769, - .0133706, - 0, - .218021, - .868136, - .0128606, - 0, - .233894, - .85469, - .0123403, - 0, - .250238, - .840593, - .0118091, - 0, - .267052, - .825808, - .011253, - 0, - .284341, - .81009, - .0107099, - 0, - .302106, - .79504, - .0101636, - 0, - .320354, - .779757, - .00964041, - 0, - .33909, - .764697, - .00911896, - 0, - .358322, - .750913, - .00859533, - 0, - .378059, - .738175, - .00811592, - 0, - .398311, - .725242, - .00764504, - 0, - .41909, - .711864, - .00718885, - 0, - .440412, - .698009, - .00675843, - 0, - .462292, - .683841, - .00634984, - 0, - .484748, - .669391, - .00595502, - 0, - .507802, - .654731, - .00558671, - 0, - .531477, - .639805, - .00523578, - 0, - .555802, - .624789, - .00490834, - 0, - .580805, - .609325, - .00459448, - 0, - .606522, - .593975, - .00430342, - 0, - .63299, - .578983, - .00403019, - 0, - .66025, - .564442, - .0037707, - 0, - .688346, - .549835, - .0035316, - 0, - .717319, - .535039, - .00330255, - 0, - .7472, - .520403, - .00308932, - 0, - .777982, - .505687, - .00289335, - 0, - .809524, - .490939, - .00270818, - 0, - .84127, - .476233, - .0025343, - 0, - .873016, - .461624, - .00237097, - 0, - .904762, - .447833, - .00222065, - 0, - .936508, - .433992, - .00207561, - 0, - .968254, - .420147, - .00194955, - 0, - 1, - 1, - .0173415, - 0, - 0, - 1, - .0173416, - 0, - 0, - .999999, - .0173426, - 0, - 0, - .999995, - .0173468, - 0, - 0, - .999983, - .0173582, - 0, - 0, - .999954, - .0173822, - 0, - 0, - .999908, - .0174258, - 0, - 669501e-11, - .999828, - .0174973, - 0, - 427399e-9, - .999705, - .0176063, - 0, - .00171019, - .999524, - .0177631, - 0, - .0039248, - .999263, - .0179781, - 0, - .00705382, - .998878, - .018258, - 0, - .0110552, - .998012, - .0185551, - 0, - .0158812, - .994614, - .0184264, - 0, - .0214852, - .993132, - .0186385, - 0, - .0278239, - .991563, - .0189067, - 0, - .0348585, - .989298, - .0191577, - 0, - .0425544, - .986036, - .0192522, - 0, - .050881, - .982558, - .0194063, - 0, - .059811, - .978531, - .019486, - 0, - .0693209, - .974198, - .0195847, - 0, - .0793895, - .968148, - .0194749, - 0, - .0899984, - .962565, - .0194277, - 0, - .101132, - .956041, - .0192991, - 0, - .112775, - .947749, - .0189893, - 0, - .124917, - .94018, - .018704, - 0, - .137547, - .93165, - .0183458, - 0, - .150655, - .921798, - .0178775, - 0, - .164236, - .911573, - .0173618, - 0, - .178281, - .901569, - .0168482, - 0, - .192788, - .890341, - .016265, - 0, - .207752, - .877835, - .0156199, - 0, - .223171, - .865472, - .0149516, - 0, - .239044, - .852905, - .0143274, - 0, - .255371, - .838906, - .0136643, - 0, - .272153, - .824888, - .0129903, - 0, - .289393, - .809977, - .0123218, - 0, - .307093, - .794697, - .0116572, - 0, - .325259, - .780028, - .0110307, - 0, - .343896, - .765124, - .0104236, - 0, - .363012, - .750411, - .0098219, - 0, - .382617, - .737264, - .00924397, - 0, - .402719, - .724799, - .00868719, - 0, - .423332, - .712253, - .00816476, - 0, - .444469, - .699267, - .00767262, - 0, - .466146, - .685618, - .00719746, - 0, - .488383, - .671736, - .00673916, - 0, - .511199, - .657777, - .00631937, - 0, - .534618, - .643497, - .00592411, - 0, - .558668, - .62889, - .00553928, - 0, - .58338, - .614299, - .0051934, - 0, - .608787, - .599197, - .00485985, - 0, - .634929, - .584175, - .00454357, - 0, - .661849, - .569541, - .00425787, - 0, - .689594, - .555193, - .00397905, - 0, - .718211, - .540947, - .00372364, - 0, - .747742, - .526593, - .00348599, - 0, - .778205, - .512335, - .00326103, - 0, - .80953, - .498017, - .00305137, - 0, - .84127, - .483609, - .00285485, - 0, - .873016, - .469368, - .00267472, - 0, - .904762, - .455037, - .00249945, - 0, - .936508, - .441493, - .00234792, - 0, - .968254, - .428147, - .00219936, - 0, - 1, - 1, - .0219422, - 0, - 0, - 1, - .0219423, - 0, - 0, - .999998, - .0219434, - 0, - 0, - .999993, - .0219481, - 0, - 0, - .999981, - .021961, - 0, - 0, - .999949, - .0219879, - 0, - 0, - .999896, - .0220367, - 0, - 593194e-10, - .999808, - .0221167, - 0, - 75364e-8, - .99967, - .0222383, - 0, - .00237884, - .999466, - .0224125, - 0, - .00495612, - .999174, - .0226495, - 0, - .00844887, - .998725, - .0229525, - 0, - .0128058, - .996979, - .0231123, - 0, - .0179742, - .994317, - .0230742, - 0, - .0239047, - .992781, - .0232895, - 0, - .0305526, - .991191, - .0235734, - 0, - .0378786, - .987787, - .0236152, - 0, - .0458475, - .985092, - .0237994, - 0, - .0544287, - .981121, - .0238553, - 0, - .0635952, - .976924, - .0238706, - 0, - .0733233, - .97218, - .0238704, - 0, - .0835922, - .965956, - .0236598, - 0, - .0943839, - .959998, - .0234735, - 0, - .105682, - .953245, - .0232277, - 0, - .117474, - .944445, - .0226973, - 0, - .129747, - .937087, - .0223527, - 0, - .142491, - .928341, - .0218144, - 0, - .155697, - .9184, - .0211516, - 0, - .169358, - .907959, - .0204553, - 0, - .183469, - .89808, - .0197673, - 0, - .198024, - .887047, - .0189915, - 0, - .21302, - .875221, - .0182082, - 0, - .228455, - .86269, - .0173584, - 0, - .244329, - .850735, - .0165718, - 0, - .260639, - .837545, - .0157524, - 0, - .277389, - .823639, - .0149482, - 0, - .29458, - .809699, - .0141431, - 0, - .312216, - .794797, - .0133527, - 0, - .3303, - .780578, - .0126193, - 0, - .34884, - .766019, - .0118914, - 0, - .367842, - .751447, - .0111839, - 0, - .387315, - .737275, - .010514, - 0, - .40727, - .724545, - .00987277, - 0, - .427717, - .712644, - .00926569, - 0, - .448671, - .700432, - .00869029, - 0, - .470149, - .687664, - .00814691, - 0, - .492167, - .674288, - .00763012, - 0, - .514746, - .660966, - .00714437, - 0, - .537911, - .647264, - .00668457, - 0, - .561688, - .633431, - .00626581, - 0, - .586108, - .619133, - .00585593, - 0, - .611206, - .604935, - .00548188, - 0, - .637022, - .590236, - .00513288, - 0, - .663599, - .575473, - .0047906, - 0, - .690989, - .561228, - .00448895, - 0, - .719242, - .547054, - .00420233, - 0, - .748411, - .533175, - .00392869, - 0, - .778531, - .519163, - .00367445, - 0, - .809583, - .505328, - .00344097, - 0, - .84127, - .491446, - .00322003, - 0, - .873016, - .477356, - .00301283, - 0, - .904762, - .46356, - .00282592, - 0, - .936508, - .449623, - .00264956, - 0, - .968254, - .436068, - .00246956, - 0, - 1, - 1, - .0276135, - 0, - 0, - 1, - .0276136, - 0, - 0, - .999998, - .0276148, - 0, - 0, - .999993, - .0276201, - 0, - 0, - .999976, - .0276342, - 0, - 0, - .999945, - .027664, - 0, - 0, - .999884, - .0277179, - 0, - 18679e-8, - .999784, - .027806, - 0, - .00119607, - .99963, - .0279394, - 0, - .00318407, - .999401, - .0281295, - 0, - .00613601, - .999066, - .0283858, - 0, - .00999963, - .998524, - .0287027, - 0, - .0147164, - .995702, - .0286256, - 0, - .0202295, - .993593, - .0286733, - 0, - .0264876, - .992067, - .0288989, - 0, - .0334452, - .990548, - .0292135, - 0, - .0410621, - .986775, - .0291296, - 0, - .0493032, - .984054, - .0293099, - 0, - .0581381, - .979481, - .0291881, - 0, - .0675397, - .975297, - .0291598, - 0, - .0774848, - .96981, - .028954, - 0, - .0879528, - .963524, - .028628, - 0, - .0989258, - .957398, - .0283135, - 0, - .110388, - .950088, - .0278469, - 0, - .122327, - .941538, - .0271798, - 0, - .134729, - .933332, - .0265388, - 0, - .147587, - .924392, - .0257776, - 0, - .160889, - .914581, - .024916, - 0, - .174631, - .904347, - .0240242, - 0, - .188806, - .894324, - .0231229, - 0, - .203409, - .883724, - .022153, - 0, - .218437, - .872207, - .0211355, - 0, - .233888, - .859927, - .0201048, - 0, - .249761, - .848373, - .0191263, - 0, - .266056, - .836023, - .0181306, - 0, - .282774, - .82289, - .0171718, - 0, - .299917, - .809324, - .0162196, - 0, - .317488, - .795361, - .0152622, - 0, - .335493, - .781253, - .01439, - 0, - .353936, - .767338, - .013533, - 0, - .372825, - .753156, - .0127244, - 0, - .392168, - .739122, - .0119454, - 0, - .411976, - .725358, - .0112054, - 0, - .432259, - .712949, - .010487, - 0, - .453032, - .701621, - .00984032, - 0, - .47431, - .689703, - .00921495, - 0, - .496111, - .677216, - .00862492, - 0, - .518456, - .664217, - .00806882, - 0, - .541367, - .65137, - .00755922, - 0, - .564872, - .638, - .00705705, - 0, - .589001, - .62453, - .00661266, - 0, - .613789, - .610601, - .00618432, - 0, - .639277, - .59676, - .00578033, - 0, - .66551, - .582433, - .00540927, - 0, - .692539, - .568026, - .00506104, - 0, - .720422, - .55414, - .0047353, - 0, - .749216, - .540178, - .00442889, - 0, - .778974, - .526513, - .00414363, - 0, - .809711, - .512954, - .00388237, - 0, - .84127, - .499403, - .00362875, - 0, - .873016, - .486026, - .00340827, - 0, - .904762, - .472345, - .00318598, - 0, - .936508, - .458828, - .00297635, - 0, - .968254, - .445379, - .00279447, - 0, - 1, - 1, - .0345716, - 0, - 0, - 1, - .0345717, - 0, - 0, - .999999, - .034573, - 0, - 0, - .999991, - .0345787, - 0, - 0, - .999974, - .0345941, - 0, - 0, - .999937, - .0346263, - 0, - 188589e-11, - .999869, - .0346847, - 0, - 409238e-9, - .999757, - .0347798, - 0, - .0017674, - .999582, - .0349233, - 0, - .00413658, - .999322, - .0351265, - 0, - .00747408, - .998939, - .0353967, - 0, - .0117157, - .998219, - .0357018, - 0, - .0167966, - .994974, - .0354726, - 0, - .0226572, - .993201, - .0355621, - 0, - .0292445, - .991573, - .0357641, - 0, - .0365123, - .989301, - .0359252, - 0, - .0444203, - .985712, - .0358017, - 0, - .0529334, - .982411, - .0358353, - 0, - .0620214, - .977827, - .035617, - 0, - .0716574, - .973278, - .0354398, - 0, - .0818186, - .967397, - .0350483, - 0, - .0924846, - .960696, - .0344795, - 0, - .103638, - .954349, - .0339861, - 0, - .115263, - .946066, - .0331323, - 0, - .127348, - .938012, - .032359, - 0, - .13988, - .929413, - .0314413, - 0, - .152849, - .920355, - .0304103, - 0, - .166248, - .910586, - .0292785, - 0, - .18007, - .900609, - .0281391, - 0, - .194308, - .890093, - .0269103, - 0, - .208958, - .880013, - .0257269, - 0, - .224018, - .869001, - .0244671, - 0, - .239485, - .85751, - .0232252, - 0, - .255359, - .84582, - .0220117, - 0, - .271638, - .834383, - .0208274, - 0, - .288324, - .822158, - .0196628, - 0, - .305419, - .809056, - .0185306, - 0, - .322927, - .795832, - .0174174, - 0, - .340851, - .782547, - .0163758, - 0, - .359199, - .7689, - .015391, - 0, - .377975, - .755526, - .0144488, - 0, - .397189, - .741681, - .0135372, - 0, - .416851, - .728178, - .0126957, - 0, - .436971, - .714642, - .0118812, - 0, - .457564, - .702756, - .0111165, - 0, - .478644, - .69175, - .0104145, - 0, - .500229, - .680159, - .00974439, - 0, - .522339, - .668073, - .00911926, - 0, - .544997, - .655405, - .00851393, - 0, - .56823, - .642921, - .00797637, - 0, - .592068, - .629993, - .00745119, - 0, - .616546, - .616828, - .00696972, - 0, - .641705, - .603305, - .00652425, - 0, - .66759, - .589833, - .00610188, - 0, - .694255, - .575945, - .00570834, - 0, - .72176, - .561745, - .00533384, - 0, - .750168, - .548277, - .00500001, - 0, - .779545, - .534467, - .00467582, - 0, - .809933, - .521032, - .00438092, - 0, - .841272, - .507877, - .00410348, - 0, - .873016, - .494654, - .00383618, - 0, - .904762, - .481592, - .00358699, - 0, - .936508, - .468509, - .00337281, - 0, - .968254, - .455293, - .00316196, - 0, - 1, - 1, - .0430698, - 0, - 0, - 1, - .0430699, - 0, - 0, - .999998, - .0430713, - 0, - 0, - .999991, - .0430773, - 0, - 0, - .99997, - .0430936, - 0, - 0, - .999928, - .0431277, - 0, - 406396e-10, - .999852, - .0431893, - 0, - 744376e-9, - .999724, - .0432895, - 0, - .0024806, - .999527, - .0434397, - 0, - .00524779, - .99923, - .0436507, - 0, - .00898164, - .998783, - .0439255, - 0, - .0136083, - .997507, - .0441104, - 0, - .0190582, - .994418, - .0438225, - 0, - .0252694, - .992864, - .0439396, - 0, - .0321879, - .991127, - .0440962, - 0, - .039767, - .987331, - .0438408, - 0, - .0479667, - .984819, - .0438991, - 0, - .056752, - .980384, - .0435906, - 0, - .0660929, - .975846, - .0432543, - 0, - .075963, - .970748, - .0428293, - 0, - .0863398, - .964303, - .042153, - 0, - .0972035, - .95772, - .0414111, - 0, - .108537, - .950747, - .0405893, - 0, - .120325, - .942533, - .0394887, - 0, - .132554, - .934045, - .0383544, - 0, - .145215, - .924942, - .037057, - 0, - .158296, - .915811, - .0356993, - 0, - .17179, - .90612, - .0342401, - 0, - .185691, - .896434, - .0328078, - 0, - .199993, - .886021, - .031288, - 0, - .214691, - .876081, - .0297776, - 0, - .229782, - .865608, - .0282334, - 0, - .245265, - .854924, - .026749, - 0, - .261138, - .843607, - .02526, - 0, - .277401, - .832456, - .0238214, - 0, - .294056, - .821342, - .0224682, - 0, - .311104, - .809303, - .0211297, - 0, - .328548, - .796468, - .0198387, - 0, - .346394, - .784046, - .0186227, - 0, - .364645, - .771262, - .0174561, - 0, - .38331, - .758118, - .0163806, - 0, - .402396, - .745075, - .0153287, - 0, - .421912, - .731926, - .0143647, - 0, - .44187, - .71863, - .0134363, - 0, - .462283, - .705414, - .0125603, - 0, - .483165, - .693792, - .0117508, - 0, - .504535, - .683108, - .0110016, - 0, - .52641, - .67183, - .0102757, - 0, - .548816, - .66015, - .00962044, - 0, - .571776, - .647907, - .00898031, - 0, - .595323, - .635734, - .00840811, - 0, - .619489, - .623208, - .00786211, - 0, - .644317, - .610438, - .00734953, - 0, - .669852, - .597345, - .00687688, - 0, - .696148, - .584138, - .00643469, - 0, - .723267, - .5707, - .00602236, - 0, - .75128, - .556966, - .0056324, - 0, - .780258, - .543607, - .00528277, - 0, - .810268, - .530213, - .00493999, - 0, - .841311, - .516912, - .00462265, - 0, - .873016, - .503916, - .0043307, - 0, - .904762, - .491146, - .00406858, - 0, - .936508, - .478439, - .00381436, - 0, - .968254, - .465834, - .00358003, - 0, - 1, - 1, - .0534039, - 0, - 0, - 1, - .053404, - 0, - 0, - .999998, - .0534055, - 0, - 0, - .999989, - .0534116, - 0, - 0, - .999968, - .0534283, - 0, - 0, - .999918, - .0534633, - 0, - 155895e-9, - .99983, - .0535262, - 0, - .00120914, - .999685, - .0536281, - 0, - .00334944, - .999461, - .0537799, - 0, - .00653077, - .999119, - .0539902, - 0, - .0106718, - .998582, - .0542524, - 0, - .0156907, - .995919, - .0540318, - 0, - .0215147, - .993735, - .0538914, - 0, - .0280801, - .992126, - .0539557, - 0, - .0353323, - .990266, - .0540401, - 0, - .0432247, - .986317, - .0536064, - 0, - .0517172, - .983213, - .0534425, - 0, - .0607754, - .978303, - .0528622, - 0, - .0703698, - .973665, - .0523363, - 0, - .0804742, - .968091, - .0516165, - 0, - .0910667, - .961026, - .0505434, - 0, - .102128, - .954333, - .049523, - 0, - .113641, - .946372, - .0481698, - 0, - .125591, - .938254, - .0467674, - 0, - .137965, - .929516, - .0452341, - 0, - .150754, - .920106, - .0435083, - 0, - .163947, - .910899, - .0417399, - 0, - .177537, - .901532, - .0399389, - 0, - .191516, - .891919, - .0380901, - 0, - .205881, - .882006, - .0362341, - 0, - .220626, - .871965, - .0343444, - 0, - .235749, - .862145, - .0324832, - 0, - .251248, - .852058, - .0306681, - 0, - .267121, - .84161, - .0289097, - 0, - .283368, - .830806, - .0272079, - 0, - .299992, - .820476, - .0256089, - 0, - .316992, - .809514, - .0240394, - 0, - .334374, - .797865, - .0225379, - 0, - .35214, - .785621, - .0211235, - 0, - .370296, - .773765, - .0197908, - 0, - .388849, - .761629, - .0185235, - 0, - .407807, - .748891, - .0173358, - 0, - .427178, - .736437, - .0162305, - 0, - .446974, - .723707, - .0151778, - 0, - .467207, - .710606, - .0141791, - 0, - .487892, - .698019, - .0132592, - 0, - .509046, - .686203, - .0123887, - 0, - .530687, - .675692, - .0115976, - 0, - .552839, - .664826, - .0108325, - 0, - .575527, - .65349, - .0101348, - 0, - .59878, - .641774, - .00947756, - 0, - .622634, - .629794, - .00886058, - 0, - .647128, - .617647, - .00828526, - 0, - .672308, - .60534, - .00775312, - 0, - .698231, - .592718, - .00726033, - 0, - .724958, - .579746, - .00679731, - 0, - .752563, - .566763, - .00636111, - 0, - .781127, - .553515, - .00595228, - 0, - .810733, - .540118, - .00556876, - 0, - .841426, - .527325, - .00523051, - 0, - .873016, - .514265, - .00490712, - 0, - .904762, - .501406, - .00460297, - 0, - .936508, - .488922, - .00431247, - 0, - .968254, - .476541, - .0040472, - 0, - 1, - 1, - .0659184, - 0, - 0, - 1, - .0659185, - 0, - 0, - .999998, - .06592, - 0, - 0, - .999988, - .0659259, - 0, - 0, - .999963, - .0659423, - 0, - 0, - .999907, - .0659764, - 0, - 374198e-9, - .999806, - .0660376, - 0, - .00182071, - .999639, - .0661361, - 0, - .0043894, - .999378, - .0662814, - 0, - .00800055, - .998985, - .0664779, - 0, - .0125594, - .998285, - .0666914, - 0, - .0179786, - .995071, - .0661989, - 0, - .0241822, - .993172, - .0660454, - 0, - .031106, - .991438, - .0660105, - 0, - .0386952, - .988428, - .0656875, - 0, - .0469032, - .985218, - .0652913, - 0, - .0556905, - .981128, - .0647107, - 0, - .065023, - .976015, - .0638491, - 0, - .0748717, - .97097, - .062993, - 0, - .0852112, - .964582, - .0617927, - 0, - .0960199, - .957383, - .0603626, - 0, - .107279, - .949969, - .0588128, - 0, - .118971, - .941843, - .0570274, - 0, - .131084, - .933624, - .0551885, - 0, - .143604, - .924543, - .053122, - 0, - .156521, - .914919, - .0508897, - 0, - .169825, - .905773, - .0486418, - 0, - .18351, - .896434, - .0463364, - 0, - .197569, - .887195, - .0440623, - 0, - .211997, - .877706, - .0417799, - 0, - .226789, - .867719, - .03945, - 0, - .241944, - .858587, - .037243, - 0, - .257458, - .849317, - .0350956, - 0, - .273331, - .839585, - .0329852, - 0, - .289563, - .829856, - .0310028, - 0, - .306154, - .819589, - .0290953, - 0, - .323108, - .809714, - .0272738, - 0, - .340426, - .79934, - .0255631, - 0, - .358113, - .788224, - .0239175, - 0, - .376175, - .776619, - .0223831, - 0, - .394616, - .76521, - .0209298, - 0, - .413445, - .753716, - .0195786, - 0, - .432671, - .741564, - .0183001, - 0, - .452305, - .729413, - .0171259, - 0, - .472358, - .717146, - .0159933, - 0, - .492845, - .70436, - .0149495, - 0, - .513783, - .69219, - .0139681, - 0, - .535189, - .680289, - .0130577, - 0, - .557087, - .669611, - .0122198, - 0, - .5795, - .659113, - .0114174, - 0, - .602459, - .648148, - .0106729, - 0, - .625997, - .636905, - .00998997, - 0, - .650154, - .625154, - .00934313, - 0, - .674976, - .613481, - .00874839, - 0, - .700518, - .60154, - .00818265, - 0, - .726845, - .58943, - .00766889, - 0, - .754032, - .576828, - .00717153, - 0, - .782167, - .564194, - .00672696, - 0, - .811344, - .551501, - .00630863, - 0, - .841644, - .538635, - .00592177, - 0, - .873016, - .525724, - .00554888, - 0, - .904762, - .513209, - .00520225, - 0, - .936508, - .500457, - .00488231, - 0, - .968254, - .48799, - .00457153, - 0, - 1, - 1, - .0810131, - 0, - 0, - 1, - .0810133, - 0, - 0, - .999997, - .0810145, - 0, - 0, - .999985, - .08102, - 0, - 0, - .999956, - .0810347, - 0, - 195026e-10, - .999893, - .0810656, - 0, - 719316e-9, - .999777, - .0811205, - 0, - .00259774, - .999583, - .081208, - 0, - .00561807, - .999281, - .0813343, - 0, - .00967472, - .998813, - .0814969, - 0, - .0146627, - .997597, - .0815217, - 0, - .0204902, - .994379, - .0808502, - 0, - .0270802, - .992744, - .0806792, - 0, - .0343674, - .990745, - .0804589, - 0, - .0422974, - .986646, - .0796107, - 0, - .0508242, - .983611, - .0790913, - 0, - .0599087, - .978869, - .0780746, - 0, - .0695175, - .973475, - .0768218, - 0, - .0796223, - .967845, - .0754926, - 0, - .0901983, - .960778, - .0737063, - 0, - .101224, - .953333, - .0718052, - 0, - .112682, - .945274, - .0695946, - 0, - .124555, - .936955, - .0672492, - 0, - .136831, - .928319, - .0647732, - 0, - .149496, - .919075, - .0620947, - 0, - .162542, - .909114, - .0591816, - 0, - .175958, - .900137, - .0563917, - 0, - .189739, - .891069, - .0535392, - 0, - .203877, - .882262, - .0507642, - 0, - .218368, - .873232, - .0479793, - 0, - .233208, - .864042, - .045226, - 0, - .248393, - .855002, - .0425413, - 0, - .263923, - .846569, - .0400126, - 0, - .279796, - .837714, - .0375269, - 0, - .296012, - .828918, - .0352027, - 0, - .312573, - .819783, - .0330011, - 0, - .329479, - .810129, - .0308908, - 0, - .346734, - .800866, - .0289112, - 0, - .364342, - .79093, - .0270255, - 0, - .382307, - .780593, - .0252758, - 0, - .400637, - .769511, - .0236178, - 0, - .419337, - .758558, - .0220652, - 0, - .438418, - .747632, - .0206289, - 0, - .457889, - .736146, - .0192873, - 0, - .477761, - .724093, - .0180333, - 0, - .49805, - .71234, - .0168264, - 0, - .51877, - .700201, - .015746, - 0, - .53994, - .687949, - .0147027, - 0, - .561581, - .676163, - .0137512, - 0, - .583718, - .665001, - .0128655, - 0, - .60638, - .65472, - .0120366, - 0, - .629599, - .644213, - .0112604, - 0, - .653415, - .633382, - .0105413, - 0, - .677874, - .62212, - .00986498, - 0, - .70303, - .610631, - .00923308, - 0, - .728948, - .599078, - .00864206, - 0, - .755706, - .587519, - .00811784, - 0, - .783396, - .575505, - .00761237, - 0, - .812121, - .563148, - .00713949, - 0, - .841989, - .550828, - .00668379, - 0, - .873035, - .538458, - .00627715, - 0, - .904762, - .525905, - .00588336, - 0, - .936508, - .513517, - .00552687, - 0, - .968254, - .501395, - .00519681, - 0, - 1, - 1, - .0991506, - 0, - 0, - 1, - .0991504, - 0, - 0, - .999996, - .0991515, - 0, - 0, - .999984, - .0991558, - 0, - 0, - .999947, - .0991672, - 0, - 114389e-9, - .999874, - .0991912, - 0, - .00121503, - .999739, - .0992331, - 0, - .00356108, - .999514, - .0992983, - 0, - .00705578, - .999159, - .0993877, - 0, - .011574, - .998586, - .0994837, - 0, - .017003, - .995731, - .0988425, - 0, - .0232484, - .993384, - .098276, - 0, - .0302318, - .991615, - .0979269, - 0, - .0378884, - .989029, - .0973432, - 0, - .0461641, - .985373, - .0963539, - 0, - .0550136, - .981278, - .0952306, - 0, - .0643988, - .975777, - .0936233, - 0, - .0742868, - .970526, - .0920219, - 0, - .0846501, - .963755, - .0898912, - 0, - .0954644, - .956676, - .0876064, - 0, - .106709, - .948099, - .0847751, - 0, - .118367, - .939718, - .0818638, - 0, - .130423, - .931305, - .078857, - 0, - .142862, - .922342, - .0756127, - 0, - .155674, - .912842, - .0721473, - 0, - .168849, - .903304, - .0686195, - 0, - .182378, - .89411, - .0650589, - 0, - .196255, - .885512, - .0616022, - 0, - .210473, - .877193, - .0582434, - 0, - .225027, - .86877, - .0548979, - 0, - .239915, - .860267, - .0516095, - 0, - .255132, - .851915, - .048468, - 0, - .270678, - .843912, - .0454447, - 0, - .286551, - .83604, - .0425612, - 0, - .302751, - .828245, - .0398752, - 0, - .31928, - .820159, - .0373198, - 0, - .336138, - .81167, - .034916, - 0, - .35333, - .802659, - .0326402, - 0, - .370858, - .793921, - .0304901, - 0, - .388728, - .784713, - .0284857, - 0, - .406944, - .774946, - .0266186, - 0, - .425515, - .76448, - .0248593, - 0, - .444449, - .753793, - .0232114, - 0, - .463756, - .743506, - .0217039, - 0, - .483447, - .732555, - .0202841, - 0, - .503535, - .720965, - .0189648, - 0, - .524036, - .709422, - .0177189, - 0, - .544968, - .697756, - .0165626, - 0, - .56635, - .685565, - .015483, - 0, - .588208, - .673987, - .0144892, - 0, - .610569, - .66244, - .0135607, - 0, - .633466, - .651675, - .0126956, - 0, - .656936, - .641598, - .0118788, - 0, - .681025, - .63121, - .0111261, - 0, - .705788, - .620514, - .010437, - 0, - .731289, - .609366, - .00978747, - 0, - .757606, - .598137, - .00917257, - 0, - .784834, - .586966, - .00859778, - 0, - .813085, - .575549, - .00806803, - 0, - .842485, - .563797, - .00757294, - 0, - .87313, - .551758, - .00710592, - 0, - .904762, - .539894, - .0066841, - 0, - .936508, - .527901, - .00627901, - 0, - .968254, - .515819, - .00590506, - 0, - 1, - 1, - .120864, - 0, - 0, - 1, - .120864, - 0, - 0, - .999996, - .120864, - 0, - 0, - .99998, - .120867, - 0, - 0, - .99994, - .120872, - 0, - 323781e-9, - .999852, - .120884, - 0, - .00188693, - .999693, - .120903, - 0, - .00473489, - .999426, - .120929, - 0, - .00872704, - .999002, - .120955, - 0, - .0137237, - .998235, - .120918, - 0, - .0196068, - .994608, - .119764, - 0, - .0262803, - .992997, - .119265, - 0, - .0336657, - .990968, - .11863, - 0, - .0416987, - .987002, - .117261, - 0, - .0503261, - .983524, - .116009, - 0, - .0595035, - .97875, - .114252, - 0, - .0691935, - .972652, - .11193, - 0, - .0793645, - .966613, - .109555, - 0, - .0899894, - .959275, - .106612, - 0, - .101045, - .951272, - .103375, - 0, - .112512, - .942323, - .0996594, - 0, - .124372, - .933679, - .0958841, - 0, - .136611, - .924822, - .0919265, - 0, - .149216, - .915742, - .0878061, - 0, - .162176, - .906348, - .0834894, - 0, - .175482, - .896883, - .079085, - 0, - .189125, - .88774, - .0746745, - 0, - .203098, - .87986, - .0705773, - 0, - .217396, - .871998, - .0665005, - 0, - .232015, - .864325, - .0625413, - 0, - .24695, - .856685, - .0586781, - 0, - .2622, - .84925, - .0550063, - 0, - .277761, - .841719, - .0514727, - 0, - .293634, - .834755, - .0481398, - 0, - .309819, - .827853, - .0450172, - 0, - .326315, - .820888, - .0420969, - 0, - .343126, - .813616, - .0393702, - 0, - .360254, - .805767, - .0367771, - 0, - .377701, - .797338, - .0343274, - 0, - .395474, - .789122, - .0320529, - 0, - .413577, - .780601, - .0299485, - 0, - .432018, - .771424, - .0279812, - 0, - .450804, - .761502, - .0261054, - 0, - .469944, - .751166, - .0243942, - 0, - .489451, - .741276, - .0228087, - 0, - .509337, - .730898, - .0213265, - 0, - .529617, - .719878, - .0199307, - 0, - .550307, - .708379, - .0186574, - 0, - .571428, - .697165, - .0174446, - 0, - .593003, - .685554, - .0163144, - 0, - .615059, - .673631, - .015276, - 0, - .637628, - .662385, - .0143003, - 0, - .660746, - .651059, - .0134112, - 0, - .68446, - .640451, - .0125794, - 0, - .70882, - .630536, - .011793, - 0, - .733893, - .620316, - .0110547, - 0, - .759756, - .609722, - .0103668, - 0, - .786505, - .598804, - .00973009, - 0, - .814259, - .587871, - .00912812, - 0, - .843157, - .577121, - .00858916, - 0, - .87334, - .566019, - .00807333, - 0, - .904762, - .554664, - .00759687, - 0, - .936508, - .543101, - .00714759, - 0, - .968254, - .531558, - .00673418, - 0, - 1, - 1, - .146767, - 0, - 0, - 1, - .146767, - 0, - 0, - .999997, - .146767, - 0, - 0, - .999977, - .146765, - 0, - 320658e-11, - .999929, - .146762, - 0, - 682576e-9, - .999823, - .146753, - 0, - .00276402, - .999633, - .146735, - 0, - .00614771, - .999314, - .146699, - 0, - .0106613, - .998796, - .14662, - 0, - .0161546, - .997124, - .146107, - 0, - .0225063, - .994062, - .144857, - 0, - .0296198, - .992154, - .144011, - 0, - .037417, - .989186, - .142712, - 0, - .0458348, - .985279, - .140926, - 0, - .0548211, - .980826, - .13885, - 0, - .0643326, - .975056, - .136168, - 0, - .074333, - .969005, - .133217, - 0, - .0847917, - .961554, - .12959, - 0, - .0956828, - .954206, - .125886, - 0, - .106984, - .945046, - .121335, - 0, - .118675, - .935678, - .116492, - 0, - .130741, - .926748, - .111635, - 0, - .143166, - .917764, - .106625, - 0, - .155939, - .908358, - .101325, - 0, - .169049, - .899219, - .0960249, - 0, - .182487, - .890089, - .0906527, - 0, - .196245, - .881488, - .0853905, - 0, - .210317, - .874031, - .0804177, - 0, - .224697, - .866932, - .0756005, - 0, - .23938, - .859976, - .0709019, - 0, - .254364, - .853375, - .0664391, - 0, - .269646, - .846971, - .0622012, - 0, - .285223, - .840483, - .058129, - 0, - .301096, - .833969, - .0542762, - 0, - .317265, - .82806, - .0507042, - 0, - .333729, - .822128, - .047368, - 0, - .350491, - .815989, - .044272, - 0, - .367554, - .809336, - .0413444, - 0, - .38492, - .802177, - .038601, - 0, - .402594, - .79441, - .0360227, - 0, - .420582, - .786573, - .0336383, - 0, - .438891, - .778619, - .0314321, - 0, - .457527, - .77, - .029362, - 0, - .476499, - .760698, - .0274102, - 0, - .49582, - .750932, - .0256146, - 0, - .5155, - .740993, - .023974, - 0, - .535555, - .731159, - .0224182, - 0, - .556, - .720836, - .0209889, - 0, - .576855, - .709913, - .0196411, - 0, - .598143, - .698415, - .0183824, - 0, - .619888, - .68745, - .0172222, - 0, - .642123, - .676154, - .0161509, - 0, - .664883, - .664383, - .0151397, - 0, - .688211, - .6533, - .0141873, - 0, - .71216, - .642072, - .0133105, - 0, - .736792, - .631412, - .0124932, - 0, - .762186, - .621622, - .0117408, - 0, - .788439, - .611681, - .0110358, - 0, - .815672, - .60142, - .0103775, - 0, - .844034, - .59083, - .00975623, - 0, - .873699, - .580254, - .00918084, - 0, - .904765, - .569841, - .00864721, - 0, - .936508, - .559224, - .00815731, - 0, - .968254, - .548315, - .00767924, - 0, - 1, - 1, - .177563, - 0, - 0, - 1, - .177563, - 0, - 0, - .999994, - .177562, - 0, - 0, - .999972, - .177555, - 0, - 664171e-10, - .999914, - .177536, - 0, - .0012276, - .999787, - .177496, - 0, - .00388025, - .999556, - .17742, - 0, - .00783463, - .999165, - .177285, - 0, - .0128953, - .9985, - .177037, - 0, - .0189053, - .995388, - .175634, - 0, - .025742, - .993102, - .174375, - 0, - .033309, - .990992, - .173121, - 0, - .0415298, - .986932, - .170896, - 0, - .0503425, - .982786, - .16847, - 0, - .0596964, - .977592, - .165455, - 0, - .0695498, - .971075, - .161676, - 0, - .0798676, - .963967, - .157458, - 0, - .0906201, - .956397, - .152836, - 0, - .101783, - .947489, - .147467, - 0, - .113333, - .937564, - .14145, - 0, - .125254, - .928182, - .135383, - 0, - .137529, - .919027, - .129212, - 0, - .150144, - .909618, - .12276, - 0, - .163088, - .900492, - .116273, - 0, - .176351, - .891671, - .1098, - 0, - .189924, - .883146, - .103362, - 0, - .203799, - .875151, - .0970799, - 0, - .21797, - .868338, - .0911732, - 0, - .232433, - .862033, - .0854966, - 0, - .247182, - .856107, - .0800691, - 0, - .262216, - .850644, - .0749618, - 0, - .27753, - .845261, - .070079, - 0, - .293124, - .839885, - .0654321, - 0, - .308997, - .834609, - .0610975, - 0, - .325149, - .829083, - .0569741, - 0, - .341581, - .82404, - .0531736, - 0, - .358294, - .818968, - .049665, - 0, - .37529, - .813496, - .0463856, - 0, - .392573, - .807533, - .0433217, - 0, - .410148, - .80099, - .0404402, - 0, - .428019, - .793891, - .0377578, - 0, - .446192, - .786281, - .0352616, - 0, - .464676, - .778773, - .0329577, - 0, - .483478, - .770737, - .030808, - 0, - .502608, - .762094, - .0287964, - 0, - .522079, - .752898, - .0269254, - 0, - .541905, - .743306, - .0251926, - 0, - .5621, - .733416, - .023595, - 0, - .582684, - .723742, - .0221155, - 0, - .603677, - .713542, - .0207435, - 0, - .625106, - .702755, - .019434, - 0, - .646998, - .691484, - .0182046, - 0, - .66939, - .680531, - .0170771, - 0, - .692324, - .66953, - .0160339, - 0, - .715849, - .658126, - .0150677, - 0, - .740028, - .646933, - .0141551, - 0, - .764937, - .636107, - .0133179, - 0, - .790673, - .625271, - .0125284, - 0, - .817358, - .615225, - .0117937, - 0, - .84515, - .605678, - .0111181, - 0, - .874244, - .59583, - .0104759, - 0, - .904828, - .585704, - .00986672, - 0, - .936508, - .575413, - .00929712, - 0, - .968254, - .565373, - .00876713, - 0, - 1, - 1, - .214058, - 0, - 0, - .999999, - .214058, - 0, - 0, - .999994, - .214055, - 0, - 0, - .999966, - .214039, - 0, - 259642e-9, - .999893, - .213998, - 0, - .00200075, - .999737, - .21391, - 0, - .00527775, - .999449, - .213745, - 0, - .00983959, - .99896, - .213458, - 0, - .0154755, - .9979, - .212855, - 0, - .0220249, - .994278, - .210779, - 0, - .0293654, - .992254, - .20926, - 0, - .0374021, - .98881, - .206908, - 0, - .0460604, - .984715, - .204009, - 0, - .0552802, - .979738, - .200471, - 0, - .0650127, - .972884, - .195813, - 0, - .0752175, - .965996, - .190856, - 0, - .0858612, - .957974, - .185077, - 0, - .0969155, - .949155, - .17868, - 0, - .108356, - .939288, - .171513, - 0, - .120163, - .928996, - .163838, - 0, - .132319, - .919563, - .156246, - 0, - .144808, - .910004, - .148359, - 0, - .157618, - .900791, - .140417, - 0, - .170737, - .892135, - .132569, - 0, - .184155, - .883803, - .124741, - 0, - .197866, - .876034, - .117091, - 0, - .211861, - .869219, - .109835, - 0, - .226134, - .863062, - .102859, - 0, - .240682, - .857795, - .0962928, - 0, - .255499, - .853009, - .0900725, - 0, - .270583, - .848603, - .0842101, - 0, - .285931, - .844335, - .0786527, - 0, - .301542, - .840208, - .0734397, - 0, - .317415, - .836035, - .0685334, - 0, - .33355, - .83172, - .0639275, - 0, - .349948, - .827135, - .0595909, - 0, - .36661, - .822797, - .0556204, - 0, - .383539, - .818387, - .0519394, - 0, - .400738, - .813565, - .0485317, - 0, - .41821, - .808142, - .0453138, - 0, - .435961, - .802212, - .0423354, - 0, - .453997, - .79573, - .0395553, - 0, - .472324, - .788741, - .036988, - 0, - .490951, - .781093, - .0345688, - 0, - .509887, - .773597, - .0323297, - 0, - .529144, - .765622, - .0302719, - 0, - .548735, - .757083, - .0283477, - 0, - .568674, - .747992, - .0265562, - 0, - .588979, - .738591, - .0248844, - 0, - .609671, - .728719, - .0233342, - 0, - .630773, - .719146, - .0219081, - 0, - .652314, - .709165, - .0205711, - 0, - .674328, - .69875, - .0193248, - 0, - .696854, - .687884, - .0181582, - 0, - .719942, - .676818, - .0170746, - 0, - .743651, - .666247, - .0160718, - 0, - .768057, - .655284, - .0151262, - 0, - .793253, - .64401, - .0142561, - 0, - .819363, - .633353, - .0134327, - 0, - .846547, - .622674, - .012653, - 0, - .875017, - .612265, - .0119354, - 0, - .905021, - .602455, - .0112533, - 0, - .936508, - .593147, - .0106234, - 0, - .968254, - .583592, - .0100213, - 0, - 1, - 1, - .25717, - 0, - 0, - 1, - .25717, - 0, - 0, - .999992, - .257164, - 0, - 0, - .999958, - .257135, - 0, - 641715e-9, - .999864, - .25706, - 0, - .00305314, - .999666, - .256897, - 0, - .00700975, - .999302, - .256596, - 0, - .0122194, - .998663, - .25607, - 0, - .0184622, - .995607, - .254123, - 0, - .0255773, - .993094, - .252081, - 0, - .0334439, - .9907, - .249867, - 0, - .0419696, - .98594, - .246118, - 0, - .0510823, - .981214, - .242049, - 0, - .0607242, - .974966, - .236869, - 0, - .0708486, - .967589, - .230724, - 0, - .081417, - .95915, - .223635, - 0, - .0923974, - .950257, - .21596, - 0, - .103763, - .940165, - .207296, - 0, - .115491, - .929396, - .197901, - 0, - .127562, - .919288, - .188437, - 0, - .13996, - .909428, - .178762, - 0, - .15267, - .900105, - .169072, - 0, - .165679, - .891418, - .159478, - 0, - .178979, - .883347, - .15002, - 0, - .192558, - .875992, - .140813, - 0, - .20641, - .869466, - .13196, - 0, - .220529, - .863699, - .123501, - 0, - .234907, - .858553, - .115436, - 0, - .249542, - .854379, - .107901, - 0, - .264428, - .850894, - .10088, - 0, - .279564, - .847632, - .0942296, - 0, - .294947, - .844571, - .0879861, - 0, - .310575, - .84163, - .0821534, - 0, - .326448, - .838542, - .0766409, - 0, - .342566, - .835412, - .0715322, - 0, - .358929, - .831899, - .0666883, - 0, - .37554, - .828177, - .0622175, - 0, - .392399, - .82416, - .0580452, - 0, - .409511, - .820393, - .054267, - 0, - .426878, - .816068, - .0507172, - 0, - .444506, - .811201, - .0474041, - 0, - .4624, - .805785, - .0443174, - 0, - .480566, - .799878, - .0414562, - 0, - .499013, - .793469, - .0388147, - 0, - .517749, - .786473, - .0363453, - 0, - .536785, - .778874, - .0340225, - 0, - .556134, - .771277, - .0318599, - 0, - .575809, - .763426, - .0298859, - 0, - .595827, - .755044, - .0280357, - 0, - .616207, - .746161, - .0262979, - 0, - .636973, - .737124, - .0247295, - 0, - .65815, - .72761, - .0232514, - 0, - .679772, - .717822, - .0218755, - 0, - .701876, - .708279, - .0205942, - 0, - .724509, - .698333, - .0193947, - 0, - .74773, - .68802, - .0182717, - 0, - .771609, - .677321, - .0172044, - 0, - .79624, - .666504, - .0162122, - 0, - .821743, - .656184, - .0152924, - 0, - .84828, - .64556, - .0144326, - 0, - .876069, - .634636, - .0136157, - 0, - .905404, - .624124, - .0128612, - 0, - .936508, - .613914, - .0121435, - 0, - .968254, - .603589, - .0114887, - 0, - 1, - 1, - .307946, - 0, - 0, - .999999, - .307945, - 0, - 0, - .999988, - .307934, - 0, - 204479e-10, - .999944, - .307886, - 0, - .00127833, - .999824, - .307756, - 0, - .00445047, - .999565, - .30748, - 0, - .00914673, - .999085, - .306966, - 0, - .0150498, - .998103, - .306004, - 0, - .0219367, - .994249, - .303028, - 0, - .0296485, - .991807, - .300435, - 0, - .038068, - .987773, - .296554, - 0, - .0471062, - .982673, - .2916, - 0, - .0566942, - .976623, - .285641, - 0, - .0667768, - .968757, - .27815, - 0, - .0773099, - .959849, - .269529, - 0, - .088257, - .950663, - .260248, - 0, - .0995879, - .940129, - .249704, - 0, - .111277, - .92895, - .238291, - 0, - .123304, - .917996, - .226501, - 0, - .13565, - .907813, - .214669, - 0, - .148299, - .898305, - .202835, - 0, - .161237, - .889626, - .191158, - 0, - .174455, - .88175, - .179695, - 0, - .187941, - .874715, - .168548, - 0, - .201687, - .868746, - .15792, - 0, - .215687, - .863703, - .147807, - 0, - .229933, - .859315, - .138149, - 0, - .24442, - .855538, - .128993, - 0, - .259145, - .852428, - .120414, - 0, - .274103, - .850168, - .112498, - 0, - .289293, - .848132, - .105054, - 0, - .304711, - .846291, - .0981087, - 0, - .320357, - .844431, - .0915942, - 0, - .33623, - .842493, - .0855056, - 0, - .35233, - .840368, - .0798204, - 0, - .368658, - .83798, - .0745097, - 0, - .385214, - .83523, - .0695424, - 0, - .402002, - .832091, - .0649092, - 0, - .419023, - .828667, - .0606291, - 0, - .436282, - .824805, - .0566523, - 0, - .453782, - .820988, - .0530229, - 0, - .471529, - .816635, - .0496364, - 0, - .489528, - .811725, - .0464658, - 0, - .507788, - .806316, - .0435082, - 0, - .526317, - .800469, - .0407873, - 0, - .545124, - .794107, - .038255, - 0, - .564221, - .787218, - .0358825, - 0, - .583621, - .779872, - .0336785, - 0, - .603341, - .772097, - .0316379, - 0, - .623397, - .764484, - .0297379, - 0, - .643812, - .756428, - .0279581, - 0, - .664611, - .748022, - .0263153, - 0, - .685824, - .739268, - .0247799, - 0, - .707488, - .73024, - .0233385, - 0, - .729646, - .720893, - .0220035, - 0, - .752354, - .71119, - .0207555, - 0, - .77568, - .701791, - .0195843, - 0, - .799715, - .692184, - .0184891, - 0, - .824574, - .682258, - .0174541, - 0, - .850417, - .67206, - .0164873, - 0, - .877466, - .661717, - .0155959, - 0, - .90604, - .651462, - .0147519, - 0, - .936528, - .641467, - .0139727, - 0, - .968254, - .631229, - .0132363, - 0, - 1, - 1, - .367573, - 0, - 0, - .999999, - .367571, - 0, - 0, - .999984, - .367553, - 0, - 183382e-9, - .999925, - .367473, - 0, - .00225254, - .999759, - .367259, - 0, - .00628165, - .99941, - .366801, - 0, - .0117858, - .998739, - .365946, - 0, - .0184359, - .995529, - .363191, - 0, - .0260114, - .992875, - .360171, - 0, - .0343581, - .989135, - .355981, - 0, - .0433637, - .984166, - .350401, - 0, - .0529438, - .977871, - .343348, - 0, - .0630334, - .96951, - .334341, - 0, - .0735805, - .959964, - .323862, - 0, - .0845437, - .950162, - .312521, - 0, - .095889, - .938882, - .299577, - 0, - .107588, - .926992, - .285573, - 0, - .119617, - .915589, - .271212, - 0, - .131957, - .904791, - .256611, - 0, - .144591, - .895177, - .242224, - 0, - .157503, - .886403, - .227952, - 0, - .170682, - .878957, - .214192, - 0, - .184117, - .872418, - .200795, - 0, - .197799, - .867029, - .188015, - 0, - .21172, - .862835, - .175975, - 0, - .225873, - .859411, - .164526, - 0, - .240253, - .856655, - .153693, - 0, - .254854, - .854519, - .14352, - 0, - .269673, - .852828, - .13397, - 0, - .284707, - .851412, - .124984, - 0, - .299953, - .850609, - .116748, - 0, - .315408, - .849855, - .10905, - 0, - .331073, - .849017, - .101839, - 0, - .346946, - .848079, - .0951359, - 0, - .363028, - .846911, - .0888774, - 0, - .379318, - .845445, - .0830375, - 0, - .395818, - .84362, - .0775844, - 0, - .41253, - .841411, - .0725054, - 0, - .429457, - .838768, - .0677691, - 0, - .446602, - .835801, - .0634016, - 0, - .463968, - .832341, - .0593095, - 0, - .481561, - .828424, - .0555121, - 0, - .499386, - .824312, - .052024, - 0, - .51745, - .819918, - .0487865, - 0, - .535761, - .815072, - .0457801, - 0, - .554328, - .809863, - .0430184, - 0, - .573162, - .804164, - .0404245, - 0, - .592275, - .798034, - .0380146, - 0, - .611681, - .791436, - .0357436, - 0, - .631398, - .784498, - .0336475, - 0, - .651445, - .777125, - .0316666, - 0, - .671845, - .769365, - .0298122, - 0, - .692628, - .761579, - .0281001, - 0, - .713827, - .753746, - .0265049, - 0, - .735484, - .745573, - .0250067, - 0, - .75765, - .737083, - .0236026, - 0, - .78039, - .728545, - .0223302, - 0, - .803789, - .719691, - .0211243, - 0, - .82796, - .710569, - .0199983, - 0, - .853056, - .701216, - .0189569, - 0, - .879298, - .692094, - .0179702, - 0, - .907014, - .682909, - .0170418, - 0, - .936691, - .673509, - .0161732, - 0, - .968254, - .663863, - .0153406, - 0, - 1, - 1, - .437395, - 0, - 0, - .999998, - .437394, - 0, - 0, - .99998, - .437363, - 0, - 616704e-9, - .999891, - .437232, - 0, - .00367925, - .999656, - .436877, - 0, - .00867446, - .999148, - .436121, - 0, - .0150679, - .997959, - .434564, - 0, - .022531, - .993464, - .430134, - 0, - .0308507, - .990606, - .426077, - 0, - .0398805, - .985027, - .419397, - 0, - .0495148, - .978491, - .41118, - 0, - .0596749, - .969643, - .40048, - 0, - .0703001, - .959189, - .38769, - 0, - .0813427, - .948223, - .373575, - 0, - .0927641, - .935955, - .357622, - 0, - .104533, - .923237, - .34043, - 0, - .116624, - .911074, - .322735, - 0, - .129015, - .899724, - .30479, - 0, - .141687, - .890189, - .287392, - 0, - .154626, - .881796, - .270248, - 0, - .167818, - .874781, - .253659, - 0, - .181252, - .869166, - .237786, - 0, - .194918, - .864725, - .222618, - 0, - .208807, - .861565, - .208356, - 0, - .222913, - .859284, - .194867, - 0, - .237229, - .857677, - .18212, - 0, - .25175, - .856714, - .17018, - 0, - .266473, - .856155, - .158969, - 0, - .281392, - .8558, - .148413, - 0, - .296505, - .855672, - .138578, - 0, - .311811, - .855538, - .129345, - 0, - .327306, - .855689, - .120861, - 0, - .342991, - .855767, - .112969, - 0, - .358864, - .855618, - .105593, - 0, - .374925, - .85525, - .0987451, - 0, - .391176, - .854583, - .0923727, - 0, - .407616, - .853534, - .0864143, - 0, - .424249, - .852061, - .0808338, - 0, - .441076, - .850253, - .0756771, - 0, - .4581, - .848004, - .0708612, - 0, - .475324, - .845333, - .0663784, - 0, - .492754, - .842376, - .0622631, - 0, - .510394, - .838956, - .0584112, - 0, - .528251, - .835121, - .0548328, - 0, - .546331, - .830842, - .0514838, - 0, - .564644, - .826212, - .048355, - 0, - .583198, - .821522, - .0454714, - 0, - .602005, - .816551, - .0428263, - 0, - .621078, - .811211, - .0403612, - 0, - .640434, - .805479, - .038039, - 0, - .660089, - .799409, - .0358739, - 0, - .680066, - .79306, - .0338727, - 0, - .70039, - .786395, - .0319985, - 0, - .721094, - .779416, - .030241, - 0, - .742215, - .77214, - .0285951, - 0, - .7638, - .764636, - .0270747, - 0, - .785912, - .756836, - .0256354, - 0, - .808628, - .749315, - .0243027, - 0, - .832055, - .741561, - .0230497, - 0, - .856338, - .733589, - .0218801, - 0, - .88169, - .725479, - .020784, - 0, - .908441, - .717255, - .0197702, - 0, - .937125, - .708829, - .0188168, - 0, - .968254, - .700191, - .0179113, - 0, - 1, - 1, - .518937, - 0, - 0, - .999998, - .518933, - 0, - 0, - .999967, - .518883, - 0, - .00147741, - .999832, - .51866, - 0, - .00573221, - .999466, - .518057, - 0, - .011826, - .998644, - .516752, - 0, - .0192116, - .994458, - .512347, - 0, - .027573, - .991223, - .507675, - 0, - .0367099, - .985515, - .500188, - 0, - .046487, - .978308, - .490408, - 0, - .0568071, - .968359, - .477357, - 0, - .0675984, - .95682, - .461752, - 0, - .0788059, - .943929, - .443796, - 0, - .090386, - .930224, - .423893, - 0, - .102304, - .916514, - .402682, - 0, - .114532, - .903653, - .380914, - 0, - .127047, - .892315, - .359212, - 0, - .139828, - .882942, - .338102, - 0, - .152861, - .875438, - .31773, - 0, - .16613, - .869642, - .298186, - 0, - .179624, - .865304, - .279491, - 0, - .193332, - .862382, - .261804, - 0, - .207247, - .860666, - .245146, - 0, - .22136, - .859788, - .229406, - 0, - .235666, - .859608, - .214605, - 0, - .250158, - .859912, - .200691, - 0, - .264832, - .86053, - .187623, - 0, - .279684, - .861368, - .17539, - 0, - .294711, - .862237, - .163901, - 0, - .309911, - .863127, - .153175, - 0, - .32528, - .863923, - .143147, - 0, - .340819, - .864567, - .133781, - 0, - .356524, - .865013, - .125042, - 0, - .372397, - .86539, - .116952, - 0, - .388438, - .865591, - .109476, - 0, - .404645, - .865517, - .102542, - 0, - .421022, - .865084, - .0960688, - 0, - .437569, - .864309, - .0900499, - 0, - .454287, - .863151, - .0844328, - 0, - .471181, - .861649, - .0792218, - 0, - .488253, - .859742, - .0743482, - 0, - .505507, - .857446, - .0697963, - 0, - .522947, - .854757, - .0655364, - 0, - .54058, - .851783, - .061608, - 0, - .558412, - .848516, - .0579701, - 0, - .576449, - .844897, - .0545742, - 0, - .594701, - .840956, - .0514167, - 0, - .613178, - .836676, - .0484598, - 0, - .631892, - .832075, - .0456934, - 0, - .650856, - .827191, - .0431178, - 0, - .670088, - .822295, - .0407718, - 0, - .689606, - .817294, - .0386032, - 0, - .709434, - .812013, - .0365675, - 0, - .7296, - .806465, - .0346547, - 0, - .750138, - .800691, - .0328717, - 0, - .771093, - .794709, - .031211, - 0, - .792519, - .788493, - .0296504, - 0, - .814488, - .782049, - .0281782, - 0, - .837097, - .775403, - .0267965, - 0, - .860481, - .76857, - .0255002, - 0, - .884842, - .761536, - .0242759, - 0, - .910494, - .754303, - .0231142, - 0, - .937985, - .74692, - .0220305, - 0, - .968254, - .739745, - .0210192, - 0, - 1, - 1, - .613914, - 0, - 0, - .999996, - .613907, - 0, - 963597e-10, - .999942, - .613814, - 0, - .00301247, - .999704, - .613407, - 0, - .00870385, - .999046, - .612302, - 0, - .0160714, - .995516, - .608266, - 0, - .0245899, - .991726, - .602863, - 0, - .0339681, - .985157, - .593956, - 0, - .0440254, - .97642, - .581748, - 0, - .0546409, - .964404, - .565183, - 0, - .0657284, - .950601, - .545273, - 0, - .0772246, - .935158, - .522129, - 0, - .0890812, - .919364, - .496782, - 0, - .10126, - .904754, - .470571, - 0, - .113731, - .89176, - .444037, - 0, - .126469, - .881492, - .418322, - 0, - .139454, - .873656, - .393522, - 0, - .15267, - .868053, - .369795, - 0, - .166101, - .864336, - .347171, - 0, - .179736, - .862259, - .325737, - 0, - .193565, - .861556, - .305532, - 0, - .207578, - .861776, - .286416, - 0, - .221769, - .862661, - .268355, - 0, - .23613, - .864015, - .251334, - 0, - .250656, - .865711, - .235352, - 0, - .265343, - .867519, - .220302, - 0, - .280187, - .869351, - .206161, - 0, - .295183, - .871144, - .192908, - 0, - .31033, - .872839, - .180505, - 0, - .325624, - .874307, - .168848, - 0, - .341065, - .875667, - .158021, - 0, - .35665, - .876758, - .147877, - 0, - .37238, - .87764, - .138441, - 0, - .388253, - .878237, - .129627, - 0, - .404269, - .878563, - .121415, - 0, - .42043, - .878572, - .113741, - 0, - .436735, - .87842, - .106652, - 0, - .453187, - .878057, - .100097, - 0, - .469786, - .877413, - .0940128, - 0, - .486536, - .87646, - .0883462, - 0, - .503439, - .875233, - .0830924, - 0, - .520498, - .8737, - .0781975, - 0, - .537717, - .871873, - .07364, - 0, - .555102, - .86978, - .0694103, - 0, - .572657, - .867405, - .0654696, - 0, - .59039, - .864751, - .0617914, - 0, - .608307, - .861818, - .0583491, - 0, - .626419, - .858645, - .0551443, - 0, - .644733, - .855307, - .0521894, - 0, - .663264, - .851736, - .0494334, - 0, - .682025, - .847927, - .0468504, - 0, - .701032, - .843888, - .0444261, - 0, - .720308, - .839629, - .0421497, - 0, - .739875, - .835158, - .0400082, - 0, - .759764, - .830509, - .0380076, - 0, - .780014, - .825714, - .0361488, - 0, - .800673, - .820729, - .0343956, - 0, - .821803, - .815751, - .0327781, - 0, - .843492, - .810752, - .031275, - 0, - .86586, - .805587, - .0298542, - 0, - .889087, - .800317, - .0285397, - 0, - .913466, - .79489, - .0272948, - 0, - .93952, - .789314, - .0261139, - 0, - .96835, - .783593, - .0249938, - 0, - 1, - 1, - .724258, - 0, - 0, - .999992, - .724243, - 0, - 726889e-9, - .99987, - .724044, - 0, - .00569574, - .999336, - .72317, - 0, - .0131702, - .996271, - .719432, - 0, - .0220738, - .991159, - .712576, - 0, - .0319405, - .982465, - .700927, - 0, - .0425202, - .97049, - .684297, - 0, - .0536599, - .953973, - .661244, - 0, - .065258, - .935546, - .633804, - 0, - .0772427, - .916596, - .603071, - 0, - .0895616, - .899353, - .57105, - 0, - .102175, - .885216, - .539206, - 0, - .11505, - .875076, - .508714, - 0, - .128164, - .868334, - .479571, - 0, - .141495, - .864414, - .451796, - 0, - .155026, - .862678, - .425328, - 0, - .168745, - .862835, - .400352, - 0, - .182639, - .864067, - .376532, - 0, - .196699, - .866086, - .35391, - 0, - .210915, - .868557, - .332424, - 0, - .225282, - .871271, - .312053, - 0, - .239792, - .874058, - .292764, - 0, - .25444, - .8768, - .27453, - 0, - .269223, - .87939, - .257297, - 0, - .284135, - .8819, - .24114, - 0, - .299174, - .884187, - .225934, - 0, - .314337, - .886262, - .211669, - 0, - .329622, - .888119, - .198311, - 0, - .345026, - .889709, - .185783, - 0, - .360549, - .891054, - .174063, - 0, - .376189, - .892196, - .163143, - 0, - .391946, - .893101, - .152952, - 0, - .407819, - .893803, - .143475, - 0, - .423808, - .894277, - .134647, - 0, - .439914, - .894532, - .126434, - 0, - .456137, - .894576, - .1188, - 0, - .472479, - .894393, - .111694, - 0, - .48894, - .893976, - .105069, - 0, - .505523, - .893346, - .0989077, - 0, - .52223, - .892502, - .0931724, - 0, - .539064, - .891441, - .0878276, - 0, - .556028, - .890276, - .082903, - 0, - .573125, - .888972, - .0783505, - 0, - .590361, - .887469, - .0741083, - 0, - .607741, - .885785, - .0701633, - 0, - .62527, - .883914, - .0664835, - 0, - .642957, - .881872, - .0630567, - 0, - .660809, - .879651, - .0598527, - 0, - .678836, - .877267, - .0568615, - 0, - .69705, - .874717, - .05406, - 0, - .715465, - .872012, - .0514378, - 0, - .734098, - .869157, - .0489805, - 0, - .752968, - .866155, - .0466727, - 0, - .772101, - .863014, - .0445056, - 0, - .791529, - .859748, - .0424733, - 0, - .81129, - .856416, - .0405957, - 0, - .831438, - .852958, - .0388273, - 0, - .852044, - .849382, - .0371619, - 0, - .87321, - .845694, - .0355959, - 0, - .89509, - .841893, - .0341155, - 0, - .917932, - .837981, - .0327141, - 0, - .942204, - .833963, - .0313856, - 0, - .968981, - .829847, - .0301275, - 0, - 1, - 1, - .85214, - 0, - 0, - .999969, - .852095, - 0, - .00279627, - .999483, - .851408, - 0, - .0107635, - .994545, - .84579, - 0, - .0206454, - .986188, - .835231, - 0, - .0315756, - .969847, - .814687, - 0, - .0432021, - .945951, - .783735, - 0, - .0553396, - .91917, - .746074, - 0, - .0678766, - .895488, - .706938, - 0, - .0807395, - .878232, - .669534, - 0, - .0938767, - .868252, - .635168, - 0, - .10725, - .863873, - .603069, - 0, - .120832, - .863369, - .572514, - 0, - .134598, - .86545, - .543169, - 0, - .148533, - .868803, - .514578, - 0, - .16262, - .872794, - .486762, - 0, - .176849, - .87702, - .459811, - 0, - .19121, - .881054, - .433654, - 0, - .205694, - .884974, - .408574, - 0, - .220294, - .888587, - .384525, - 0, - .235005, - .891877, - .36156, - 0, - .24982, - .894793, - .339661, - 0, - .264737, - .89743, - .318913, - 0, - .279751, - .899796, - .299302, - 0, - .294859, - .901943, - .280843, - 0, - .310058, - .903858, - .263481, - 0, - .325346, - .905574, - .247197, - 0, - .340721, - .907069, - .231915, - 0, - .356181, - .908379, - .217614, - 0, - .371725, - .90952, - .20425, - 0, - .387353, - .910483, - .191758, - 0, - .403063, - .91128, - .180092, - 0, - .418854, - .911936, - .169222, - 0, - .434727, - .912454, - .159098, - 0, - .450682, - .912835, - .149668, - 0, - .466718, - .913078, - .140884, - 0, - .482837, - .913192, - .132709, - 0, - .499038, - .913175, - .125095, - 0, - .515324, - .91304, - .118012, - 0, - .531695, - .912781, - .111417, - 0, - .548153, - .91241, - .105281, - 0, - .5647, - .911924, - .0995691, - 0, - .581338, - .911331, - .0942531, - 0, - .59807, - .910637, - .0893076, - 0, - .6149, - .90984, - .0846998, - 0, - .63183, - .908941, - .0804044, - 0, - .648865, - .907944, - .0763984, - 0, - .666011, - .906857, - .0726638, - 0, - .683273, - .90568, - .0691783, - 0, - .700659, - .904416, - .0659222, - 0, - .718176, - .903067, - .0628782, - 0, - .735834, - .901637, - .0600307, - 0, - .753646, - .900128, - .0573647, - 0, - .771625, - .898544, - .0548668, - 0, - .78979, - .89689, - .052527, - 0, - .808162, - .895165, - .0503306, - 0, - .826771, - .893371, - .0482668, - 0, - .845654, - .891572, - .0463605, - 0, - .864863, - .889763, - .0445998, - 0, - .884472, - .887894, - .0429451, - 0, - .904592, - .885967, - .0413884, - 0, - .925407, - .883984, - .0399225, - 0, - .947271, - .881945, - .0385405, - 0, - .97105, - .879854, - .0372362, - 0, - 1, - .999804, - .995833, - 0, - 0, - .938155, - .933611, - 0, - .0158731, - .864755, - .854311, - 0, - .0317461, - .888594, - .865264, - 0, - .0476191, - .905575, - .863922, - 0, - .0634921, - .915125, - .850558, - 0, - .0793651, - .920665, - .829254, - 0, - .0952381, - .924073, - .802578, - 0, - .111111, - .926304, - .772211, - 0, - .126984, - .927829, - .739366, - 0, - .142857, - .928924, - .705033, - 0, - .15873, - .92973, - .670019, - 0, - .174603, - .930339, - .634993, - 0, - .190476, - .930811, - .600485, - 0, - .206349, - .931191, - .566897, - 0, - .222222, - .93149, - .534485, - 0, - .238095, - .931737, - .503429, - 0, - .253968, - .931939, - .473811, - 0, - .269841, - .932108, - .445668, - 0, - .285714, - .93225, - .418993, - 0, - .301587, - .932371, - .393762, - 0, - .31746, - .932474, - .369939, - 0, - .333333, - .932562, - .347479, - 0, - .349206, - .932638, - .326336, - 0, - .365079, - .932703, - .306462, - 0, - .380952, - .93276, - .287805, - 0, - .396825, - .932809, - .270313, - 0, - .412698, - .932851, - .253933, - 0, - .428571, - .932887, - .23861, - 0, - .444444, - .932917, - .224289, - 0, - .460317, - .932943, - .210917, - 0, - .47619, - .932965, - .19844, - 0, - .492063, - .932982, - .186807, - 0, - .507937, - .932995, - .175966, - 0, - .52381, - .933005, - .165869, - 0, - .539683, - .933011, - .156468, - 0, - .555556, - .933013, - .147719, - 0, - .571429, - .933013, - .139579, - 0, - .587302, - .93301, - .132007, - 0, - .603175, - .933004, - .124965, - 0, - .619048, - .932994, - .118416, - 0, - .634921, - .932982, - .112326, - 0, - .650794, - .932968, - .106663, - 0, - .666667, - .93295, - .101397, - 0, - .68254, - .932931, - .0964993, - 0, - .698413, - .932908, - .0919438, - 0, - .714286, - .932883, - .0877057, - 0, - .730159, - .932856, - .0837623, - 0, - .746032, - .932827, - .0800921, - 0, - .761905, - .932796, - .0766754, - 0, - .777778, - .932762, - .0734936, - 0, - .793651, - .932727, - .0705296, - 0, - .809524, - .932689, - .0677676, - 0, - .825397, - .93265, - .0651929, - 0, - .84127, - .932609, - .0627917, - 0, - .857143, - .932565, - .0605515, - 0, - .873016, - .932521, - .0584606, - 0, - .888889, - .932474, - .0565082, - 0, - .904762, - .932427, - .0546841, - 0, - .920635, - .932377, - .0529793, - 0, - .936508, - .932326, - .0513851, - 0, - .952381, - .932274, - .0498936, - 0, - .968254, - .93222, - .0484975, - 0, - .984127, - .932164, - .0471899, - 0, - 1 - ]; - const ltc_float_1 = new Float32Array(LTC_MAT_1); - const ltc_float_2 = new Float32Array(LTC_MAT_2); - UniformsLib.LTC_FLOAT_1 = new DataTexture(ltc_float_1, 64, 64, RGBAFormat, FloatType, 300, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1); - UniformsLib.LTC_FLOAT_2 = new DataTexture(ltc_float_2, 64, 64, RGBAFormat, FloatType, 300, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1); - UniformsLib.LTC_FLOAT_1.needsUpdate = true; - UniformsLib.LTC_FLOAT_2.needsUpdate = true; - const ltc_half_1 = new Uint16Array(LTC_MAT_1.length); - LTC_MAT_1.forEach(function(x, index) { - ltc_half_1[index] = DataUtils.toHalfFloat(x); - }); - const ltc_half_2 = new Uint16Array(LTC_MAT_2.length); - LTC_MAT_2.forEach(function(x, index) { - ltc_half_2[index] = DataUtils.toHalfFloat(x); - }); - UniformsLib.LTC_HALF_1 = new DataTexture(ltc_half_1, 64, 64, RGBAFormat, HalfFloatType, 300, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1); - UniformsLib.LTC_HALF_2 = new DataTexture(ltc_half_2, 64, 64, RGBAFormat, HalfFloatType, 300, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1); - UniformsLib.LTC_HALF_1.needsUpdate = true; - UniformsLib.LTC_HALF_2.needsUpdate = true; -} }; -//#endregion -//#region node_modules/three-stdlib/lights/LightProbeGenerator.js -var LightProbeGenerator = { - fromCubeTexture(cubeTexture) { - let totalWeight = 0; - const coord = new Vector3(); - const dir = new Vector3(); - const color = new Color(); - const shBasis = [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ]; - const sh = new SphericalHarmonics3(); - const shCoefficients = sh.coefficients; - for (let faceIndex = 0; faceIndex < 6; faceIndex++) { - const image = cubeTexture.image[faceIndex]; - const width = image.width; - const height = image.height; - const canvas = document.createElement("canvas"); - canvas.width = width; - canvas.height = height; - const context = canvas.getContext("2d"); - context.drawImage(image, 0, 0, width, height); - const imageData = context.getImageData(0, 0, width, height); - const data = imageData.data; - const imageWidth = imageData.width; - const pixelSize = 2 / imageWidth; - for (let i = 0, il = data.length; i < il; i += 4) { - color.setRGB(data[i] / 255, data[i + 1] / 255, data[i + 2] / 255); - if ("colorSpace" in cubeTexture) { - if (cubeTexture.colorSpace === "srgb") color.convertSRGBToLinear(); - } else if (cubeTexture.encoding === 3001) color.convertSRGBToLinear(); - const pixelIndex = i / 4; - const col = -1 + (pixelIndex % imageWidth + .5) * pixelSize; - const row = 1 - (Math.floor(pixelIndex / imageWidth) + .5) * pixelSize; - switch (faceIndex) { - case 0: - coord.set(-1, row, -col); - break; - case 1: - coord.set(1, row, col); - break; - case 2: - coord.set(-col, 1, -row); - break; - case 3: - coord.set(-col, -1, row); - break; - case 4: - coord.set(-col, row, 1); - break; - case 5: - coord.set(col, row, -1); - break; - } - const lengthSq = coord.lengthSq(); - const weight = 4 / (Math.sqrt(lengthSq) * lengthSq); - totalWeight += weight; - dir.copy(coord).normalize(); - SphericalHarmonics3.getBasisAt(dir, shBasis); - for (let j = 0; j < 9; j++) { - shCoefficients[j].x += shBasis[j] * color.r * weight; - shCoefficients[j].y += shBasis[j] * color.g * weight; - shCoefficients[j].z += shBasis[j] * color.b * weight; - } - } - } - const norm = 4 * Math.PI / totalWeight; - for (let j = 0; j < 9; j++) { - shCoefficients[j].x *= norm; - shCoefficients[j].y *= norm; - shCoefficients[j].z *= norm; - } - return new LightProbe(sh); - }, - fromCubeRenderTarget(renderer, cubeRenderTarget) { - let totalWeight = 0; - const coord = new Vector3(); - const dir = new Vector3(); - const color = new Color(); - const shBasis = [ - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0, - 0 - ]; - const sh = new SphericalHarmonics3(); - const shCoefficients = sh.coefficients; - for (let faceIndex = 0; faceIndex < 6; faceIndex++) { - const imageWidth = cubeRenderTarget.width; - const data = new Uint8Array(imageWidth * imageWidth * 4); - renderer.readRenderTargetPixels(cubeRenderTarget, 0, 0, imageWidth, imageWidth, data, faceIndex); - const pixelSize = 2 / imageWidth; - for (let i = 0, il = data.length; i < il; i += 4) { - color.setRGB(data[i] / 255, data[i + 1] / 255, data[i + 2] / 255); - if ("colorSpace" in cubeRenderTarget.texture) { - if (cubeRenderTarget.texture.colorSpace === "srgb") color.convertSRGBToLinear(); - } else if (cubeRenderTarget.texture.encoding === 3001) color.convertSRGBToLinear(); - const pixelIndex = i / 4; - const col = -1 + (pixelIndex % imageWidth + .5) * pixelSize; - const row = 1 - (Math.floor(pixelIndex / imageWidth) + .5) * pixelSize; - switch (faceIndex) { - case 0: - coord.set(1, row, -col); - break; - case 1: - coord.set(-1, row, col); - break; - case 2: - coord.set(col, 1, -row); - break; - case 3: - coord.set(col, -1, row); - break; - case 4: - coord.set(col, row, 1); - break; - case 5: - coord.set(-col, row, -1); - break; - } - const lengthSq = coord.lengthSq(); - const weight = 4 / (Math.sqrt(lengthSq) * lengthSq); - totalWeight += weight; - dir.copy(coord).normalize(); - SphericalHarmonics3.getBasisAt(dir, shBasis); - for (let j = 0; j < 9; j++) { - shCoefficients[j].x += shBasis[j] * color.r * weight; - shCoefficients[j].y += shBasis[j] * color.g * weight; - shCoefficients[j].z += shBasis[j] * color.b * weight; - } - } - } - const norm = 4 * Math.PI / totalWeight; - for (let j = 0; j < 9; j++) { - shCoefficients[j].x *= norm; - shCoefficients[j].y *= norm; - shCoefficients[j].z *= norm; - } - return new LightProbe(sh); - } -}; -//#endregion -//#region node_modules/three-stdlib/curves/NURBSSurface.js -var NURBSSurface = class { - constructor(degree1, degree2, knots1, knots2, controlPoints) { - this.degree1 = degree1; - this.degree2 = degree2; - this.knots1 = knots1; - this.knots2 = knots2; - this.controlPoints = []; - const len1 = knots1.length - degree1 - 1; - const len2 = knots2.length - degree2 - 1; - for (let i = 0; i < len1; ++i) { - this.controlPoints[i] = []; - for (let j = 0; j < len2; ++j) { - const point = controlPoints[i][j]; - this.controlPoints[i][j] = new Vector4(point.x, point.y, point.z, point.w); - } - } - } - getPoint(t1, t2, target) { - const u = this.knots1[0] + t1 * (this.knots1[this.knots1.length - 1] - this.knots1[0]); - const v = this.knots2[0] + t2 * (this.knots2[this.knots2.length - 1] - this.knots2[0]); - calcSurfacePoint(this.degree1, this.degree2, this.knots1, this.knots2, this.controlPoints, u, v, target); - } -}; -//#endregion -//#region node_modules/three-stdlib/curves/CurveExtras.js -var GrannyKnot = class extends Curve { - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - t = 2 * Math.PI * t; - const x = -.22 * Math.cos(t) - 1.28 * Math.sin(t) - .44 * Math.cos(3 * t) - .78 * Math.sin(3 * t); - const y = -.1 * Math.cos(2 * t) - .27 * Math.sin(2 * t) + .38 * Math.cos(4 * t) + .46 * Math.sin(4 * t); - const z = .7 * Math.cos(3 * t) - .4 * Math.sin(3 * t); - return point.set(x, y, z).multiplyScalar(20); - } -}; -var HeartCurve = class extends Curve { - constructor(scale = 5) { - super(); - this.scale = scale; - } - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - t *= 2 * Math.PI; - const x = 16 * Math.pow(Math.sin(t), 3); - const y = 13 * Math.cos(t) - 5 * Math.cos(2 * t) - 2 * Math.cos(3 * t) - Math.cos(4 * t); - return point.set(x, y, 0).multiplyScalar(this.scale); - } -}; -var VivianiCurve = class extends Curve { - constructor(scale = 70) { - super(); - this.scale = scale; - } - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - t = t * 4 * Math.PI; - const a = this.scale / 2; - const x = a * (1 + Math.cos(t)); - const y = a * Math.sin(t); - const z = 2 * a * Math.sin(t / 2); - return point.set(x, y, z); - } -}; -var KnotCurve = class extends Curve { - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - t *= 2 * Math.PI; - const R = 10; - const s = 50; - const x = s * Math.sin(t); - const y = Math.cos(t) * (R + s * Math.cos(t)); - const z = Math.sin(t) * (R + s * Math.cos(t)); - return point.set(x, y, z); - } -}; -var HelixCurve = class extends Curve { - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - const a = 30; - const b = 150; - const t2 = 2 * Math.PI * t * b / 30; - const x = Math.cos(t2) * a; - const y = Math.sin(t2) * a; - const z = b * t; - return point.set(x, y, z); - } -}; -var TrefoilKnot = class extends Curve { - constructor(scale = 10) { - super(); - this.scale = scale; - } - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - t *= Math.PI * 2; - const x = (2 + Math.cos(3 * t)) * Math.cos(2 * t); - const y = (2 + Math.cos(3 * t)) * Math.sin(2 * t); - const z = Math.sin(3 * t); - return point.set(x, y, z).multiplyScalar(this.scale); - } -}; -var TorusKnot = class extends Curve { - constructor(scale = 10) { - super(); - this.scale = scale; - } - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - const p = 3; - const q = 4; - t *= Math.PI * 2; - const x = (2 + Math.cos(q * t)) * Math.cos(p * t); - const y = (2 + Math.cos(q * t)) * Math.sin(p * t); - const z = Math.sin(q * t); - return point.set(x, y, z).multiplyScalar(this.scale); - } -}; -var CinquefoilKnot = class extends Curve { - constructor(scale = 10) { - super(); - this.scale = scale; - } - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - const p = 2; - const q = 5; - t *= Math.PI * 2; - const x = (2 + Math.cos(q * t)) * Math.cos(p * t); - const y = (2 + Math.cos(q * t)) * Math.sin(p * t); - const z = Math.sin(q * t); - return point.set(x, y, z).multiplyScalar(this.scale); - } -}; -var TrefoilPolynomialKnot = class extends Curve { - constructor(scale = 10) { - super(); - this.scale = scale; - } - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - t = t * 4 - 2; - const x = Math.pow(t, 3) - 3 * t; - const y = Math.pow(t, 4) - 4 * t * t; - const z = 1 / 5 * Math.pow(t, 5) - 2 * t; - return point.set(x, y, z).multiplyScalar(this.scale); - } -}; -function scaleTo(x, y, t) { - return t * (y - x) + x; -} -var FigureEightPolynomialKnot = class extends Curve { - constructor(scale = 1) { - super(); - this.scale = scale; - } - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - t = scaleTo(-4, 4, t); - const x = 2 / 5 * t * (t * t - 7) * (t * t - 10); - const y = Math.pow(t, 4) - 13 * t * t; - const z = 1 / 10 * t * (t * t - 4) * (t * t - 9) * (t * t - 12); - return point.set(x, y, z).multiplyScalar(this.scale); - } -}; -var DecoratedTorusKnot4a = class extends Curve { - constructor(scale = 40) { - super(); - this.scale = scale; - } - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - t *= Math.PI * 2; - const x = Math.cos(2 * t) * (1 + .6 * (Math.cos(5 * t) + .75 * Math.cos(10 * t))); - const y = Math.sin(2 * t) * (1 + .6 * (Math.cos(5 * t) + .75 * Math.cos(10 * t))); - const z = .35 * Math.sin(5 * t); - return point.set(x, y, z).multiplyScalar(this.scale); - } -}; -var DecoratedTorusKnot4b = class extends Curve { - constructor(scale = 40) { - super(); - this.scale = scale; - } - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - const fi = t * Math.PI * 2; - const x = Math.cos(2 * fi) * (1 + .45 * Math.cos(3 * fi) + .4 * Math.cos(9 * fi)); - const y = Math.sin(2 * fi) * (1 + .45 * Math.cos(3 * fi) + .4 * Math.cos(9 * fi)); - const z = .2 * Math.sin(9 * fi); - return point.set(x, y, z).multiplyScalar(this.scale); - } -}; -var DecoratedTorusKnot5a = class extends Curve { - constructor(scale = 40) { - super(); - this.scale = scale; - } - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - const fi = t * Math.PI * 2; - const x = Math.cos(3 * fi) * (1 + .3 * Math.cos(5 * fi) + .5 * Math.cos(10 * fi)); - const y = Math.sin(3 * fi) * (1 + .3 * Math.cos(5 * fi) + .5 * Math.cos(10 * fi)); - const z = .2 * Math.sin(20 * fi); - return point.set(x, y, z).multiplyScalar(this.scale); - } -}; -var DecoratedTorusKnot5c = class extends Curve { - constructor(scale = 40) { - super(); - this.scale = scale; - } - getPoint(t, optionalTarget = new Vector3()) { - const point = optionalTarget; - const fi = t * Math.PI * 2; - const x = Math.cos(4 * fi) * (1 + .5 * (Math.cos(5 * fi) + .4 * Math.cos(20 * fi))); - const y = Math.sin(4 * fi) * (1 + .5 * (Math.cos(5 * fi) + .4 * Math.cos(20 * fi))); - const z = .35 * Math.sin(15 * fi); - return point.set(x, y, z).multiplyScalar(this.scale); - } -}; -//#endregion -//#region node_modules/three-stdlib/deprecated/Geometry.js -var _m1 = /* @__PURE__ */ new Matrix4(); -var _obj = /* @__PURE__ */ new Object3D(); -var _offset = /* @__PURE__ */ new Vector3(); -var Geometry = /* @__PURE__ */ (() => { - class Geometry2 extends EventDispatcher$1 { - static createBufferGeometryFromObject(object) { - let buffergeometry = new BufferGeometry(); - const geometry = object.geometry; - if (object.isPoints || object.isLine) { - const positions = new Float32BufferAttribute(geometry.vertices.length * 3, 3); - const colors = new Float32BufferAttribute(geometry.colors.length * 3, 3); - buffergeometry.setAttribute("position", positions.copyVector3sArray(geometry.vertices)); - buffergeometry.setAttribute("color", colors.copyColorsArray(geometry.colors)); - if (geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length) { - const lineDistances = new Float32BufferAttribute(geometry.lineDistances.length, 1); - buffergeometry.setAttribute("lineDistance", lineDistances.copyArray(geometry.lineDistances)); - } - if (geometry.boundingSphere !== null) buffergeometry.boundingSphere = geometry.boundingSphere.clone(); - if (geometry.boundingBox !== null) buffergeometry.boundingBox = geometry.boundingBox.clone(); - } else if (object.isMesh) buffergeometry = geometry.toBufferGeometry(); - return buffergeometry; - } - constructor() { - super(); - this.isGeometry = true; - this.uuid = MathUtils.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 = false; - this.verticesNeedUpdate = false; - this.uvsNeedUpdate = false; - this.normalsNeedUpdate = false; - this.colorsNeedUpdate = false; - this.lineDistancesNeedUpdate = false; - this.groupsNeedUpdate = false; - } - applyMatrix4(matrix) { - const normalMatrix = new Matrix3().getNormalMatrix(matrix); - for (let i = 0, il = this.vertices.length; i < il; i++) this.vertices[i].applyMatrix4(matrix); - for (let i = 0, il = this.faces.length; i < il; i++) { - const face = this.faces[i]; - face.normal.applyMatrix3(normalMatrix).normalize(); - for (let j = 0, jl = face.vertexNormals.length; j < jl; j++) face.vertexNormals[j].applyMatrix3(normalMatrix).normalize(); - } - if (this.boundingBox !== null) this.computeBoundingBox(); - if (this.boundingSphere !== null) this.computeBoundingSphere(); - this.verticesNeedUpdate = true; - this.normalsNeedUpdate = true; - return this; - } - rotateX(angle) { - _m1.makeRotationX(angle); - this.applyMatrix4(_m1); - return this; - } - rotateY(angle) { - _m1.makeRotationY(angle); - this.applyMatrix4(_m1); - return this; - } - rotateZ(angle) { - _m1.makeRotationZ(angle); - this.applyMatrix4(_m1); - return this; - } - translate(x, y, z) { - _m1.makeTranslation(x, y, z); - this.applyMatrix4(_m1); - return this; - } - scale(x, y, z) { - _m1.makeScale(x, y, z); - this.applyMatrix4(_m1); - return this; - } - lookAt(vector) { - _obj.lookAt(vector); - _obj.updateMatrix(); - this.applyMatrix4(_obj.matrix); - return this; - } - fromBufferGeometry(geometry) { - const scope = this; - const index = geometry.index !== null ? geometry.index : void 0; - const attributes = geometry.attributes; - if (attributes.position === void 0) { - console.error("THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion."); - return this; - } - const position = attributes.position; - const normal = attributes.normal; - const color = attributes.color; - const uv = attributes.uv; - const uv2 = attributes.uv2; - if (uv2 !== void 0) this.faceVertexUvs[1] = []; - for (let i = 0; i < position.count; i++) { - scope.vertices.push(new Vector3().fromBufferAttribute(position, i)); - if (color !== void 0) scope.colors.push(new Color().fromBufferAttribute(color, i)); - } - function addFace(a, b, c, materialIndex) { - const vertexColors = color === void 0 ? [] : [ - scope.colors[a].clone(), - scope.colors[b].clone(), - scope.colors[c].clone() - ]; - const face = new Face3(a, b, c, normal === void 0 ? [] : [ - new Vector3().fromBufferAttribute(normal, a), - new Vector3().fromBufferAttribute(normal, b), - new Vector3().fromBufferAttribute(normal, c) - ], vertexColors, materialIndex); - scope.faces.push(face); - if (uv !== void 0) scope.faceVertexUvs[0].push([ - new Vector2().fromBufferAttribute(uv, a), - new Vector2().fromBufferAttribute(uv, b), - new Vector2().fromBufferAttribute(uv, c) - ]); - if (uv2 !== void 0) scope.faceVertexUvs[1].push([ - new Vector2().fromBufferAttribute(uv2, a), - new Vector2().fromBufferAttribute(uv2, b), - new Vector2().fromBufferAttribute(uv2, c) - ]); - } - const groups = geometry.groups; - if (groups.length > 0) for (let i = 0; i < groups.length; i++) { - const group = groups[i]; - const start = group.start; - const count = group.count; - for (let j = start, jl = start + count; j < jl; j += 3) if (index !== void 0) addFace(index.getX(j), index.getX(j + 1), index.getX(j + 2), group.materialIndex); - else addFace(j, j + 1, j + 2, group.materialIndex); - } - else if (index !== void 0) for (let i = 0; i < index.count; i += 3) addFace(index.getX(i), index.getX(i + 1), index.getX(i + 2)); - else for (let i = 0; i < position.count; i += 3) addFace(i, i + 1, i + 2); - this.computeFaceNormals(); - if (geometry.boundingBox !== null) this.boundingBox = geometry.boundingBox.clone(); - if (geometry.boundingSphere !== null) this.boundingSphere = geometry.boundingSphere.clone(); - return this; - } - center() { - this.computeBoundingBox(); - this.boundingBox.getCenter(_offset).negate(); - this.translate(_offset.x, _offset.y, _offset.z); - return this; - } - normalize() { - this.computeBoundingSphere(); - const center = this.boundingSphere.center; - const radius = this.boundingSphere.radius; - const s = radius === 0 ? 1 : 1 / radius; - const matrix = new Matrix4(); - matrix.set(s, 0, 0, -s * center.x, 0, s, 0, -s * center.y, 0, 0, s, -s * center.z, 0, 0, 0, 1); - this.applyMatrix4(matrix); - return this; - } - computeFaceNormals() { - const cb = new Vector3(), ab = new Vector3(); - for (let f = 0, fl = this.faces.length; f < fl; f++) { - const face = this.faces[f]; - const vA = this.vertices[face.a]; - const vB = this.vertices[face.b]; - const vC = this.vertices[face.c]; - cb.subVectors(vC, vB); - ab.subVectors(vA, vB); - cb.cross(ab); - cb.normalize(); - face.normal.copy(cb); - } - } - computeVertexNormals(areaWeighted = true) { - const vertices = new Array(this.vertices.length); - for (let v = 0, vl = this.vertices.length; v < vl; v++) vertices[v] = new Vector3(); - if (areaWeighted) { - const cb = new Vector3(), ab = new Vector3(); - for (let f = 0, fl = this.faces.length; f < fl; f++) { - const face = this.faces[f]; - const vA = this.vertices[face.a]; - const vB = this.vertices[face.b]; - const vC = this.vertices[face.c]; - cb.subVectors(vC, vB); - ab.subVectors(vA, vB); - cb.cross(ab); - vertices[face.a].add(cb); - vertices[face.b].add(cb); - vertices[face.c].add(cb); - } - } else { - this.computeFaceNormals(); - for (let f = 0, fl = this.faces.length; f < fl; f++) { - const face = this.faces[f]; - vertices[face.a].add(face.normal); - vertices[face.b].add(face.normal); - vertices[face.c].add(face.normal); - } - } - for (let v = 0, vl = this.vertices.length; v < vl; v++) vertices[v].normalize(); - for (let f = 0, fl = this.faces.length; f < fl; f++) { - const face = this.faces[f]; - const vertexNormals = face.vertexNormals; - if (vertexNormals.length === 3) { - vertexNormals[0].copy(vertices[face.a]); - vertexNormals[1].copy(vertices[face.b]); - vertexNormals[2].copy(vertices[face.c]); - } else { - vertexNormals[0] = vertices[face.a].clone(); - vertexNormals[1] = vertices[face.b].clone(); - vertexNormals[2] = vertices[face.c].clone(); - } - } - if (this.faces.length > 0) this.normalsNeedUpdate = true; - } - computeFlatVertexNormals() { - this.computeFaceNormals(); - for (let f = 0, fl = this.faces.length; f < fl; f++) { - const face = this.faces[f]; - const vertexNormals = face.vertexNormals; - if (vertexNormals.length === 3) { - vertexNormals[0].copy(face.normal); - vertexNormals[1].copy(face.normal); - vertexNormals[2].copy(face.normal); - } else { - vertexNormals[0] = face.normal.clone(); - vertexNormals[1] = face.normal.clone(); - vertexNormals[2] = face.normal.clone(); - } - } - if (this.faces.length > 0) this.normalsNeedUpdate = true; - } - computeMorphNormals() { - for (let f = 0, fl = this.faces.length; f < fl; f++) { - const face = this.faces[f]; - if (!face.__originalFaceNormal) face.__originalFaceNormal = face.normal.clone(); - else face.__originalFaceNormal.copy(face.normal); - if (!face.__originalVertexNormals) face.__originalVertexNormals = []; - for (let i = 0, il = face.vertexNormals.length; i < il; i++) if (!face.__originalVertexNormals[i]) face.__originalVertexNormals[i] = face.vertexNormals[i].clone(); - else face.__originalVertexNormals[i].copy(face.vertexNormals[i]); - } - const tmpGeo = new Geometry2(); - tmpGeo.faces = this.faces; - for (let i = 0, il = this.morphTargets.length; i < il; i++) { - if (!this.morphNormals[i]) { - this.morphNormals[i] = {}; - this.morphNormals[i].faceNormals = []; - this.morphNormals[i].vertexNormals = []; - const dstNormalsFace = this.morphNormals[i].faceNormals; - const dstNormalsVertex = this.morphNormals[i].vertexNormals; - for (let f = 0, fl = this.faces.length; f < fl; f++) { - const faceNormal = new Vector3(); - const vertexNormals = { - a: new Vector3(), - b: new Vector3(), - c: new Vector3() - }; - dstNormalsFace.push(faceNormal); - dstNormalsVertex.push(vertexNormals); - } - } - const morphNormals = this.morphNormals[i]; - tmpGeo.vertices = this.morphTargets[i].vertices; - tmpGeo.computeFaceNormals(); - tmpGeo.computeVertexNormals(); - for (let f = 0, fl = this.faces.length; f < fl; f++) { - const face = this.faces[f]; - const faceNormal = morphNormals.faceNormals[f]; - const vertexNormals = morphNormals.vertexNormals[f]; - faceNormal.copy(face.normal); - vertexNormals.a.copy(face.vertexNormals[0]); - vertexNormals.b.copy(face.vertexNormals[1]); - vertexNormals.c.copy(face.vertexNormals[2]); - } - } - for (let f = 0, fl = this.faces.length; f < fl; f++) { - const face = this.faces[f]; - face.normal = face.__originalFaceNormal; - face.vertexNormals = face.__originalVertexNormals; - } - } - computeBoundingBox() { - if (this.boundingBox === null) this.boundingBox = new Box3(); - this.boundingBox.setFromPoints(this.vertices); - } - computeBoundingSphere() { - if (this.boundingSphere === null) this.boundingSphere = new Sphere(); - this.boundingSphere.setFromPoints(this.vertices); - } - merge(geometry, matrix, materialIndexOffset = 0) { - if (!(geometry && geometry.isGeometry)) { - console.error("THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.", geometry); - return; - } - let normalMatrix; - const vertexOffset = this.vertices.length, vertices1 = this.vertices, vertices2 = geometry.vertices, faces1 = this.faces, faces2 = geometry.faces, colors1 = this.colors, colors2 = geometry.colors; - if (matrix !== void 0) normalMatrix = new Matrix3().getNormalMatrix(matrix); - for (let i = 0, il = vertices2.length; i < il; i++) { - const vertexCopy = vertices2[i].clone(); - if (matrix !== void 0) vertexCopy.applyMatrix4(matrix); - vertices1.push(vertexCopy); - } - for (let i = 0, il = colors2.length; i < il; i++) colors1.push(colors2[i].clone()); - for (let i = 0, il = faces2.length; i < il; i++) { - const face = faces2[i]; - let normal, color; - const faceVertexNormals = face.vertexNormals, faceVertexColors = face.vertexColors; - const faceCopy = new Face3(face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset); - faceCopy.normal.copy(face.normal); - if (normalMatrix !== void 0) faceCopy.normal.applyMatrix3(normalMatrix).normalize(); - for (let j = 0, jl = faceVertexNormals.length; j < jl; j++) { - normal = faceVertexNormals[j].clone(); - if (normalMatrix !== void 0) normal.applyMatrix3(normalMatrix).normalize(); - faceCopy.vertexNormals.push(normal); - } - faceCopy.color.copy(face.color); - for (let j = 0, jl = faceVertexColors.length; j < jl; j++) { - color = faceVertexColors[j]; - faceCopy.vertexColors.push(color.clone()); - } - faceCopy.materialIndex = face.materialIndex + materialIndexOffset; - faces1.push(faceCopy); - } - for (let i = 0, il = geometry.faceVertexUvs.length; i < il; i++) { - const faceVertexUvs2 = geometry.faceVertexUvs[i]; - if (this.faceVertexUvs[i] === void 0) this.faceVertexUvs[i] = []; - for (let j = 0, jl = faceVertexUvs2.length; j < jl; j++) { - const uvs2 = faceVertexUvs2[j], uvsCopy = []; - for (let k = 0, kl = uvs2.length; k < kl; k++) uvsCopy.push(uvs2[k].clone()); - this.faceVertexUvs[i].push(uvsCopy); - } - } - } - mergeMesh(mesh) { - if (!(mesh && mesh.isMesh)) { - console.error("THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.", mesh); - return; - } - if (mesh.matrixAutoUpdate) mesh.updateMatrix(); - this.merge(mesh.geometry, mesh.matrix); - } - mergeVertices(precisionPoints = 4) { - const verticesMap = {}; - const unique = [], changes = []; - const precision = Math.pow(10, precisionPoints); - for (let i = 0, il = this.vertices.length; i < il; i++) { - const v = this.vertices[i]; - const key = `${Math.round(v.x * precision)}_${Math.round(v.y * precision)}_${Math.round(v.z * precision)}`; - if (verticesMap[key] === void 0) { - verticesMap[key] = i; - unique.push(this.vertices[i]); - changes[i] = unique.length - 1; - } else changes[i] = changes[verticesMap[key]]; - } - const faceIndicesToRemove = []; - for (let i = 0, il = this.faces.length; i < il; i++) { - const face = this.faces[i]; - face.a = changes[face.a]; - face.b = changes[face.b]; - face.c = changes[face.c]; - const indices = [ - face.a, - face.b, - face.c - ]; - for (let n = 0; n < 3; n++) if (indices[n] === indices[(n + 1) % 3]) { - faceIndicesToRemove.push(i); - break; - } - } - for (let i = faceIndicesToRemove.length - 1; i >= 0; i--) { - const idx = faceIndicesToRemove[i]; - this.faces.splice(idx, 1); - for (let j = 0, jl = this.faceVertexUvs.length; j < jl; j++) this.faceVertexUvs[j].splice(idx, 1); - } - const diff = this.vertices.length - unique.length; - this.vertices = unique; - return diff; - } - setFromPoints(points) { - this.vertices = []; - for (let i = 0, l = points.length; i < l; i++) { - const point = points[i]; - this.vertices.push(new Vector3(point.x, point.y, point.z || 0)); - } - return this; - } - sortFacesByMaterialIndex() { - const faces = this.faces; - const length = faces.length; - for (let i = 0; i < length; i++) faces[i]._id = i; - function materialIndexSort(a, b) { - return a.materialIndex - b.materialIndex; - } - faces.sort(materialIndexSort); - const uvs1 = this.faceVertexUvs[0]; - const uvs2 = this.faceVertexUvs[1]; - let newUvs1, newUvs2; - if (uvs1 && uvs1.length === length) newUvs1 = []; - if (uvs2 && uvs2.length === length) newUvs2 = []; - for (let i = 0; i < length; i++) { - const id = faces[i]._id; - if (newUvs1) newUvs1.push(uvs1[id]); - if (newUvs2) newUvs2.push(uvs2[id]); - } - if (newUvs1) this.faceVertexUvs[0] = newUvs1; - if (newUvs2) this.faceVertexUvs[1] = newUvs2; - } - toJSON() { - const data = { metadata: { - version: 4.5, - type: "Geometry", - generator: "Geometry.toJSON" - } }; - data.uuid = this.uuid; - data.type = this.type; - if (this.name !== "") data.name = this.name; - if (this.parameters !== void 0) { - const parameters = this.parameters; - for (let key in parameters) if (parameters[key] !== void 0) data[key] = parameters[key]; - return data; - } - const vertices = []; - for (let i = 0; i < this.vertices.length; i++) { - const vertex = this.vertices[i]; - vertices.push(vertex.x, vertex.y, vertex.z); - } - const faces = []; - const normals = []; - const normalsHash = {}; - const colors = []; - const colorsHash = {}; - const uvs = []; - const uvsHash = {}; - for (let i = 0; i < this.faces.length; i++) { - const face = this.faces[i]; - const hasMaterial = true; - const hasFaceUv = false; - const hasFaceVertexUv = this.faceVertexUvs[0][i] !== void 0; - const hasFaceNormal = face.normal.length() > 0; - const hasFaceVertexNormal = face.vertexNormals.length > 0; - const hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1; - const hasFaceVertexColor = face.vertexColors.length > 0; - let faceType = 0; - faceType = setBit(faceType, 0, 0); - faceType = setBit(faceType, 1, hasMaterial); - faceType = setBit(faceType, 2, hasFaceUv); - faceType = setBit(faceType, 3, hasFaceVertexUv); - faceType = setBit(faceType, 4, hasFaceNormal); - faceType = setBit(faceType, 5, hasFaceVertexNormal); - faceType = setBit(faceType, 6, hasFaceColor); - faceType = setBit(faceType, 7, hasFaceVertexColor); - faces.push(faceType); - faces.push(face.a, face.b, face.c); - faces.push(face.materialIndex); - if (hasFaceVertexUv) { - const faceVertexUvs = this.faceVertexUvs[0][i]; - faces.push(getUvIndex(faceVertexUvs[0]), getUvIndex(faceVertexUvs[1]), getUvIndex(faceVertexUvs[2])); - } - if (hasFaceNormal) faces.push(getNormalIndex(face.normal)); - if (hasFaceVertexNormal) { - const vertexNormals = face.vertexNormals; - faces.push(getNormalIndex(vertexNormals[0]), getNormalIndex(vertexNormals[1]), getNormalIndex(vertexNormals[2])); - } - if (hasFaceColor) faces.push(getColorIndex(face.color)); - if (hasFaceVertexColor) { - const vertexColors = face.vertexColors; - faces.push(getColorIndex(vertexColors[0]), getColorIndex(vertexColors[1]), getColorIndex(vertexColors[2])); - } - } - function setBit(value, position, enabled) { - return enabled ? value | 1 << position : value & ~(1 << position); - } - function getNormalIndex(normal) { - const hash = normal.x.toString() + normal.y.toString() + normal.z.toString(); - if (normalsHash[hash] !== void 0) return normalsHash[hash]; - normalsHash[hash] = normals.length / 3; - normals.push(normal.x, normal.y, normal.z); - return normalsHash[hash]; - } - function getColorIndex(color) { - const hash = color.r.toString() + color.g.toString() + color.b.toString(); - if (colorsHash[hash] !== void 0) return colorsHash[hash]; - colorsHash[hash] = colors.length; - colors.push(color.getHex()); - return colorsHash[hash]; - } - function getUvIndex(uv) { - const hash = uv.x.toString() + uv.y.toString(); - if (uvsHash[hash] !== void 0) return uvsHash[hash]; - uvsHash[hash] = uvs.length / 2; - uvs.push(uv.x, uv.y); - return uvsHash[hash]; - } - data.data = {}; - data.data.vertices = vertices; - data.data.normals = normals; - if (colors.length > 0) data.data.colors = colors; - if (uvs.length > 0) data.data.uvs = [uvs]; - data.data.faces = faces; - return data; - } - clone() { - return new Geometry2().copy(this); - } - copy(source) { - 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 = source.name; - const vertices = source.vertices; - for (let i = 0, il = vertices.length; i < il; i++) this.vertices.push(vertices[i].clone()); - const colors = source.colors; - for (let i = 0, il = colors.length; i < il; i++) this.colors.push(colors[i].clone()); - const faces = source.faces; - for (let i = 0, il = faces.length; i < il; i++) this.faces.push(faces[i].clone()); - for (let i = 0, il = source.faceVertexUvs.length; i < il; i++) { - const faceVertexUvs = source.faceVertexUvs[i]; - if (this.faceVertexUvs[i] === void 0) this.faceVertexUvs[i] = []; - for (let j = 0, jl = faceVertexUvs.length; j < jl; j++) { - const uvs = faceVertexUvs[j], uvsCopy = []; - for (let k = 0, kl = uvs.length; k < kl; k++) { - const uv = uvs[k]; - uvsCopy.push(uv.clone()); - } - this.faceVertexUvs[i].push(uvsCopy); - } - } - const morphTargets = source.morphTargets; - for (let i = 0, il = morphTargets.length; i < il; i++) { - const morphTarget = {}; - morphTarget.name = morphTargets[i].name; - if (morphTargets[i].vertices !== void 0) { - morphTarget.vertices = []; - for (let j = 0, jl = morphTargets[i].vertices.length; j < jl; j++) morphTarget.vertices.push(morphTargets[i].vertices[j].clone()); - } - if (morphTargets[i].normals !== void 0) { - morphTarget.normals = []; - for (let j = 0, jl = morphTargets[i].normals.length; j < jl; j++) morphTarget.normals.push(morphTargets[i].normals[j].clone()); - } - this.morphTargets.push(morphTarget); - } - const morphNormals = source.morphNormals; - for (let i = 0, il = morphNormals.length; i < il; i++) { - const morphNormal = {}; - if (morphNormals[i].vertexNormals !== void 0) { - morphNormal.vertexNormals = []; - for (let j = 0, jl = morphNormals[i].vertexNormals.length; j < jl; j++) { - const srcVertexNormal = morphNormals[i].vertexNormals[j]; - const destVertexNormal = {}; - destVertexNormal.a = srcVertexNormal.a.clone(); - destVertexNormal.b = srcVertexNormal.b.clone(); - destVertexNormal.c = srcVertexNormal.c.clone(); - morphNormal.vertexNormals.push(destVertexNormal); - } - } - if (morphNormals[i].faceNormals !== void 0) { - morphNormal.faceNormals = []; - for (let j = 0, jl = morphNormals[i].faceNormals.length; j < jl; j++) morphNormal.faceNormals.push(morphNormals[i].faceNormals[j].clone()); - } - this.morphNormals.push(morphNormal); - } - const skinWeights = source.skinWeights; - for (let i = 0, il = skinWeights.length; i < il; i++) this.skinWeights.push(skinWeights[i].clone()); - const skinIndices = source.skinIndices; - for (let i = 0, il = skinIndices.length; i < il; i++) this.skinIndices.push(skinIndices[i].clone()); - const lineDistances = source.lineDistances; - for (let i = 0, il = lineDistances.length; i < il; i++) this.lineDistances.push(lineDistances[i]); - const boundingBox = source.boundingBox; - if (boundingBox !== null) this.boundingBox = boundingBox.clone(); - const boundingSphere = source.boundingSphere; - if (boundingSphere !== null) this.boundingSphere = boundingSphere.clone(); - this.elementsNeedUpdate = source.elementsNeedUpdate; - this.verticesNeedUpdate = source.verticesNeedUpdate; - this.uvsNeedUpdate = source.uvsNeedUpdate; - this.normalsNeedUpdate = source.normalsNeedUpdate; - this.colorsNeedUpdate = source.colorsNeedUpdate; - this.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate; - this.groupsNeedUpdate = source.groupsNeedUpdate; - return this; - } - toBufferGeometry() { - const geometry = new DirectGeometry().fromGeometry(this); - const buffergeometry = new BufferGeometry(); - const positions = new Float32Array(geometry.vertices.length * 3); - buffergeometry.setAttribute("position", new BufferAttribute(positions, 3).copyVector3sArray(geometry.vertices)); - if (geometry.normals.length > 0) { - const normals = new Float32Array(geometry.normals.length * 3); - buffergeometry.setAttribute("normal", new BufferAttribute(normals, 3).copyVector3sArray(geometry.normals)); - } - if (geometry.colors.length > 0) { - const colors = new Float32Array(geometry.colors.length * 3); - buffergeometry.setAttribute("color", new BufferAttribute(colors, 3).copyColorsArray(geometry.colors)); - } - if (geometry.uvs.length > 0) { - const uvs = new Float32Array(geometry.uvs.length * 2); - buffergeometry.setAttribute("uv", new BufferAttribute(uvs, 2).copyVector2sArray(geometry.uvs)); - } - if (geometry.uvs2.length > 0) { - const uvs2 = new Float32Array(geometry.uvs2.length * 2); - buffergeometry.setAttribute("uv2", new BufferAttribute(uvs2, 2).copyVector2sArray(geometry.uvs2)); - } - buffergeometry.groups = geometry.groups; - for (let name in geometry.morphTargets) { - const array = []; - const morphTargets = geometry.morphTargets[name]; - for (let i = 0, l = morphTargets.length; i < l; i++) { - const morphTarget = morphTargets[i]; - const attribute = new Float32BufferAttribute(morphTarget.data.length * 3, 3); - attribute.name = morphTarget.name; - array.push(attribute.copyVector3sArray(morphTarget.data)); - } - buffergeometry.morphAttributes[name] = array; - } - if (geometry.skinIndices.length > 0) { - const skinIndices = new Float32BufferAttribute(geometry.skinIndices.length * 4, 4); - buffergeometry.setAttribute("skinIndex", skinIndices.copyVector4sArray(geometry.skinIndices)); - } - if (geometry.skinWeights.length > 0) { - const skinWeights = new Float32BufferAttribute(geometry.skinWeights.length * 4, 4); - buffergeometry.setAttribute("skinWeight", skinWeights.copyVector4sArray(geometry.skinWeights)); - } - if (geometry.boundingSphere !== null) buffergeometry.boundingSphere = geometry.boundingSphere.clone(); - if (geometry.boundingBox !== null) buffergeometry.boundingBox = geometry.boundingBox.clone(); - return buffergeometry; - } - computeTangents() { - console.error("THREE.Geometry: .computeTangents() has been removed."); - } - computeLineDistances() { - console.error("THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead."); - } - applyMatrix(matrix) { - console.warn("THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4()."); - return this.applyMatrix4(matrix); - } - dispose() { - this.dispatchEvent({ type: "dispose" }); - } - } - return Geometry2; -})(); -var DirectGeometry = 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 = false; - this.normalsNeedUpdate = false; - this.colorsNeedUpdate = false; - this.uvsNeedUpdate = false; - this.groupsNeedUpdate = false; - } - computeGroups(geometry) { - const groups = []; - let group, i; - let materialIndex = void 0; - const faces = geometry.faces; - for (i = 0; i < faces.length; i++) { - const face = faces[i]; - if (face.materialIndex !== materialIndex) { - materialIndex = face.materialIndex; - if (group !== void 0) { - group.count = i * 3 - group.start; - groups.push(group); - } - group = { - start: i * 3, - materialIndex - }; - } - } - if (group !== void 0) { - group.count = i * 3 - group.start; - groups.push(group); - } - this.groups = groups; - } - fromGeometry(geometry) { - const faces = geometry.faces; - const vertices = geometry.vertices; - const faceVertexUvs = geometry.faceVertexUvs; - const hasFaceVertexUv = faceVertexUvs[0] && faceVertexUvs[0].length > 0; - const hasFaceVertexUv2 = faceVertexUvs[1] && faceVertexUvs[1].length > 0; - const morphTargets = geometry.morphTargets; - const morphTargetsLength = morphTargets.length; - let morphTargetsPosition; - if (morphTargetsLength > 0) { - morphTargetsPosition = []; - for (let i = 0; i < morphTargetsLength; i++) morphTargetsPosition[i] = { - name: morphTargets[i].name, - data: [] - }; - this.morphTargets.position = morphTargetsPosition; - } - const morphNormals = geometry.morphNormals; - const morphNormalsLength = morphNormals.length; - let morphTargetsNormal; - if (morphNormalsLength > 0) { - morphTargetsNormal = []; - for (let i = 0; i < morphNormalsLength; i++) morphTargetsNormal[i] = { - name: morphNormals[i].name, - data: [] - }; - this.morphTargets.normal = morphTargetsNormal; - } - const skinIndices = geometry.skinIndices; - const skinWeights = geometry.skinWeights; - const hasSkinIndices = skinIndices.length === vertices.length; - const hasSkinWeights = skinWeights.length === vertices.length; - if (vertices.length > 0 && faces.length === 0) console.error("THREE.DirectGeometry: Faceless geometries are not supported."); - for (let i = 0; i < faces.length; i++) { - const face = faces[i]; - this.vertices.push(vertices[face.a], vertices[face.b], vertices[face.c]); - const vertexNormals = face.vertexNormals; - if (vertexNormals.length === 3) this.normals.push(vertexNormals[0], vertexNormals[1], vertexNormals[2]); - else { - const normal = face.normal; - this.normals.push(normal, normal, normal); - } - const vertexColors = face.vertexColors; - if (vertexColors.length === 3) this.colors.push(vertexColors[0], vertexColors[1], vertexColors[2]); - else { - const color = face.color; - this.colors.push(color, color, color); - } - if (hasFaceVertexUv === true) { - const vertexUvs = faceVertexUvs[0][i]; - if (vertexUvs !== void 0) this.uvs.push(vertexUvs[0], vertexUvs[1], vertexUvs[2]); - else { - console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv ", i); - this.uvs.push(new Vector2(), new Vector2(), new Vector2()); - } - } - if (hasFaceVertexUv2 === true) { - const vertexUvs = faceVertexUvs[1][i]; - if (vertexUvs !== void 0) this.uvs2.push(vertexUvs[0], vertexUvs[1], vertexUvs[2]); - else { - console.warn("THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 ", i); - this.uvs2.push(new Vector2(), new Vector2(), new Vector2()); - } - } - for (let j = 0; j < morphTargetsLength; j++) { - const morphTarget = morphTargets[j].vertices; - morphTargetsPosition[j].data.push(morphTarget[face.a], morphTarget[face.b], morphTarget[face.c]); - } - for (let j = 0; j < morphNormalsLength; j++) { - const morphNormal = morphNormals[j].vertexNormals[i]; - morphTargetsNormal[j].data.push(morphNormal.a, morphNormal.b, morphNormal.c); - } - if (hasSkinIndices) this.skinIndices.push(skinIndices[face.a], skinIndices[face.b], skinIndices[face.c]); - if (hasSkinWeights) this.skinWeights.push(skinWeights[face.a], skinWeights[face.b], skinWeights[face.c]); - } - this.computeGroups(geometry); - this.verticesNeedUpdate = geometry.verticesNeedUpdate; - this.normalsNeedUpdate = geometry.normalsNeedUpdate; - this.colorsNeedUpdate = geometry.colorsNeedUpdate; - this.uvsNeedUpdate = geometry.uvsNeedUpdate; - this.groupsNeedUpdate = geometry.groupsNeedUpdate; - if (geometry.boundingSphere !== null) this.boundingSphere = geometry.boundingSphere.clone(); - if (geometry.boundingBox !== null) this.boundingBox = geometry.boundingBox.clone(); - return this; - } -}; -var Face3 = class { - constructor(a, b, c, normal, color, materialIndex = 0) { - this.a = a; - this.b = b; - this.c = c; - this.normal = normal && normal.isVector3 ? normal : new Vector3(); - this.vertexNormals = Array.isArray(normal) ? normal : []; - this.color = color && color.isColor ? color : new Color(); - this.vertexColors = Array.isArray(color) ? color : []; - this.materialIndex = materialIndex; - } - clone() { - return new this.constructor().copy(this); - } - copy(source) { - this.a = source.a; - this.b = source.b; - this.c = source.c; - this.normal.copy(source.normal); - this.color.copy(source.color); - this.materialIndex = source.materialIndex; - for (let i = 0, il = source.vertexNormals.length; i < il; i++) this.vertexNormals[i] = source.vertexNormals[i].clone(); - for (let i = 0, il = source.vertexColors.length; i < il; i++) this.vertexColors[i] = source.vertexColors[i].clone(); - return this; - } -}; -//#endregion -//#region node_modules/three-stdlib/libs/MeshoptDecoder.js -var generated; -var MeshoptDecoder = () => { - if (generated) return generated; - const wasm_base = "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"; - const wasm_simd = "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"; - const detector = new Uint8Array([ - 0, - 97, - 115, - 109, - 1, - 0, - 0, - 0, - 1, - 4, - 1, - 96, - 0, - 0, - 3, - 3, - 2, - 0, - 0, - 5, - 3, - 1, - 0, - 1, - 12, - 1, - 0, - 10, - 22, - 2, - 12, - 0, - 65, - 0, - 65, - 0, - 65, - 0, - 252, - 10, - 0, - 0, - 11, - 7, - 0, - 65, - 0, - 253, - 15, - 26, - 11 - ]); - const wasmpack = new Uint8Array([ - 32, - 0, - 65, - 253, - 3, - 1, - 2, - 34, - 4, - 106, - 6, - 5, - 11, - 8, - 7, - 20, - 13, - 33, - 12, - 16, - 128, - 9, - 116, - 64, - 19, - 113, - 127, - 15, - 10, - 21, - 22, - 14, - 255, - 66, - 24, - 54, - 136, - 107, - 18, - 23, - 192, - 26, - 114, - 118, - 132, - 17, - 77, - 101, - 130, - 144, - 27, - 87, - 131, - 44, - 45, - 74, - 156, - 154, - 70, - 167 - ]); - if (typeof WebAssembly !== "object") return { supported: false }; - let wasm = wasm_base; - if (WebAssembly.validate(detector)) wasm = wasm_simd; - let instance; - const promise = WebAssembly.instantiate(unpack(wasm), {}).then((result) => { - instance = result.instance; - instance.exports.__wasm_call_ctors(); - }); - function unpack(data) { - const result = new Uint8Array(data.length); - for (let i = 0; i < data.length; ++i) { - const ch = data.charCodeAt(i); - result[i] = ch > 96 ? ch - 71 : ch > 64 ? ch - 65 : ch > 47 ? ch + 4 : ch > 46 ? 63 : 62; - } - let write = 0; - for (let i = 0; i < data.length; ++i) result[write++] = result[i] < 60 ? wasmpack[result[i]] : (result[i] - 60) * 64 + result[++i]; - return result.buffer.slice(0, write); - } - function decode(fun, target, count, size, source, filter) { - const sbrk = instance.exports.sbrk; - const count4 = count + 3 & -4; - const tp = sbrk(count4 * size); - const sp = sbrk(source.length); - const heap = new Uint8Array(instance.exports.memory.buffer); - heap.set(source, sp); - const res = fun(tp, count, size, sp, source.length); - if (res === 0 && filter) filter(tp, count4, size); - target.set(heap.subarray(tp, tp + count * size)); - sbrk(tp - sbrk(0)); - if (res !== 0) throw new Error(`Malformed buffer data: ${res}`); - } - const filters = { - 0: "", - 1: "meshopt_decodeFilterOct", - 2: "meshopt_decodeFilterQuat", - 3: "meshopt_decodeFilterExp", - NONE: "", - OCTAHEDRAL: "meshopt_decodeFilterOct", - QUATERNION: "meshopt_decodeFilterQuat", - EXPONENTIAL: "meshopt_decodeFilterExp" - }; - const decoders = { - 0: "meshopt_decodeVertexBuffer", - 1: "meshopt_decodeIndexBuffer", - 2: "meshopt_decodeIndexSequence", - ATTRIBUTES: "meshopt_decodeVertexBuffer", - TRIANGLES: "meshopt_decodeIndexBuffer", - INDICES: "meshopt_decodeIndexSequence" - }; - generated = { - ready: promise, - supported: true, - decodeVertexBuffer(target, count, size, source, filter) { - decode(instance.exports.meshopt_decodeVertexBuffer, target, count, size, source, instance.exports[filters[filter]]); - }, - decodeIndexBuffer(target, count, size, source) { - decode(instance.exports.meshopt_decodeIndexBuffer, target, count, size, source); - }, - decodeIndexSequence(target, count, size, source) { - decode(instance.exports.meshopt_decodeIndexSequence, target, count, size, source); - }, - decodeGltfBuffer(target, count, size, source, mode, filter) { - decode(instance.exports[decoders[mode]], target, count, size, source, instance.exports[filters[filter]]); - } - }; - return generated; -}; -//#endregion -export { TDSLoader as $, CSS2DRenderer as $a, MarchingCubes as $i, MotionControllerConstants as $n, HalftonePass as $r, VerticalTiltShiftShader as $t, Wireframe as A, mergeBufferGeometries as Aa, Capsule as Ai, ColorCorrectionShader as An, SAOShader as Ar, calcBSplineDerivatives as At, RGBMLoader as B, FlakesTexture as Ba, SkeletonUtils as Bi, TextGeometry as Bn, SavePass as Br, AsciiEffect as Bt, PositionalAudioHelper as C, TessellateModifier as Ca, STATE$1 as Ci, GammaCorrectionShader as Cn, HalfEdge as Co, ClearMaskPass as Cr, NRRDLoader as Ct, Line2 as D, estimateBytesUsed as Da, Octree as Di, FXAAShader as Dn, MorphBlendMesh as Do, SAOPass as Dr, FontLoader as Dt, LightProbeHelper as E, computeMorphedAttributes as Ea, Lut as Ei, FocusShader as En, MD2CharacterComplex as Eo, AfterimageShader as Er, Font as Et, LWOLoader as F, InstancedFlow as Fa, BokehShader2 as Fi, ACESFilmicToneMappingShader as Fn, ToneMapShader as Fr, calcNURBSDerivatives as Ft, TiltLoader as G, RenderableLine as Ga, GroundProjectedEnv as Gi, RoundedBoxGeometry as Gn, OutlinePass as Gr, AmmoPhysics as Gt, PDBLoader as H, SVGRenderer as Ha, GeometryUtils as Hi, DecalGeometry as Hn, SSAOBlurShader as Hr, OutlineEffect as Ht, PCDLoader as I, getUniforms as Ia, GeometryCompressionUtils as Ii, CSMHelper as In, LuminosityShader as Ir, calcRationalCurveDerivatives as It, AMFLoader as J, RenderableVertex as Ja, ReflectorForSSRPass as Ji, XRHandModelFactory as Jn, FilmShader as Jr, InteractiveGroup as Jt, KTXLoader as K, RenderableObject as Ka, Water2 as Ki, ParametricGeometries as Kn, CopyShader as Kr, SelectionBox as Kt, VOXData3DTexture as L, initSplineTexture as La, PackedPhongMaterial as Li, CSM as Ln, TexturePass as Lr, calcSurfacePoint as Lt, LineGeometry as M, toCreasedNormals as Ma, MeshSurfaceSampler as Mi, BlendShader as Mn, UnrealBloomPass as Mr, calcBasisFunctionDerivatives as Mt, LineSegmentsGeometry as N, toTrianglesDrawMode as Na, CinematicCamera as Ni, BleachBypassShader as Nn, LuminosityHighPassShader as Nr, calcBasisFunctions as Nt, LineSegments2 as O, interleaveAttributes as Oa, ImprovedNoise as Oi, DOFMipMapShader as On, MD2Loader as Oo, BlurShaderUtils as Or, FBXLoader as Ot, PLYLoader as P, Flow as Pa, BokehDepthShader as Pi, BasicShader as Pn, AdaptiveToneMappingPass as Pr, calcKoverI as Pt, LDrawLoader as Q, CSS2DObject as Qa, SimplexNoise as Qi, MotionController as Qn, SMAAWeightsShader as Qr, VignetteShader as Qt, VOXLoader as R, modifyShader as Ra, ShadowMapViewer as Ri, CSMShader as Rn, BokehPass as Rr, findSpan as Rt, VertexNormalsHelper as S, GLTFExporter as Sa, OrbitControlsExp as Si, GodRaysGenerateShader as Sn, Face$1 as So, EffectComposer as Sr, STLLoader as St, RaycasterHelper as T, SimplifyModifier as Ta, ColorMapKeywords as Ti, FreiChenShader as Tn, VertexNode as To, AfterimagePass as Tr, TGALoader as Tt, HDRCubeTextureLoader as U, Projector as Ua, UVsDebug as Ui, DecalVertex as Un, SSAODepthShader as Ur, PeppersGhostEffect as Ut, PRWMLoader as V, SVGObject as Va, RoughnessMipmapper as Vi, TeapotGeometry as Vn, SSAOPass as Vr, AnaglyphEffect as Vt, DRACOLoader as W, RenderableFace as Wa, SceneUtils as Wi, BoxLineGeometry as Wn, SSAOShader as Wr, ParallaxBarrierEffect as Wt, Rhino3dmLoader as X, CSS3DRenderer as Xa, LightningStorm as Xi, XREstimatedLight as Xn, SMAABlendShader as Xr, WaterRefractionShader as Xt, OBJLoader as Y, CSS3DObject as Ya, ReflectorRTT as Yi, XRHandPrimitiveModel as Yn, SMAAPass as Yr, HTMLMesh as Yt, SVGLoader as Z, CSS3DSprite as Za, LightningStrike as Zi, XRControllerModelFactory as Zn, SMAAEdgesShader as Zr, VolumeRenderShader1 as Zt, VivianiCurve as _, MMDExporter as _a, TransformControlsGizmo as _i, HorizontalTiltShiftShader as _n, Gyroscope as _o, SSRBlurShader as _r, KMZLoader as _t, DecoratedTorusKnot4a as a, ShadowMesh as aa, ShaderPass as ai, ToonShaderHatching as an, getErrorMessage as ao, OculusHandModel as ar, VTKLoader as at, RectAreaLightUniformsLib as b, PLYExporter as ba, CameraControls as bi, GodRaysDepthMaskShader as bn, ConvexGeometry as bo, DotScreenPass as br, XLoader as bt, DecoratedTorusKnot5c as c, BatchedMesh as ca, FlyControls as ci, SobelOperatorShader as cn, isWebGL2Available as co, ARButton as cr, EXRLoader as ct, HeartCurve as d, CCDIKHelper as da, OrbitControls as di, PixelShader as dn, RollerCoasterGeometry as do, ConvolutionShader as dr, RGBELoader as dt, edgeTable as ea, HalftoneShader as ei, VerticalBlurShader as en, ProgressiveLightMap as eo, fetchProfile as er, BasisTextureLoader as et, HelixCurve as f, CCDIKSolver as fa, TrackballControls as fi, ParallaxShader as fn, RollerCoasterLiftersGeometry as fo, RenderPixelatedPass as fr, TTFLoader as ft, TrefoilPolynomialKnot as g, STLExporter as ga, TransformControls as gi, HueSaturationShader as gn, MorphAnimMesh as go, SSRPass as gr, VRMLoader as gt, TrefoilKnot as h, OBJExporter as ha, DragControls as hi, KaleidoShader as hn, TreesGeometry as ho, SSAARenderPass as hr, VRMLLoader as ht, CinquefoilKnot as i, LensflareElement as ia, LUTPass as ii, ToonShaderDotted as in, MD2Character as io, OculusHandPointerModel as ir, LUT3dlLoader as it, LineMaterial as j, mergeVertices as ja, OBB as ji, BrightnessContrastShader as jn, CubeTexturePass as jr, calcBSplinePoint as jt, WireframeGeometry2 as k, mergeBufferAttributes as ka, ColorConverter as ki, ColorifyShader as kn, DepthLimitedBlurShader as kr, NURBSCurve as kt, FigureEightPolynomialKnot as l, MMDAnimationHelper as la, ArcballControls as li, SepiaShader as ln, isWebGLAvailable as lo, WaterPass as lr, MDDLoader as lt, TorusKnot as m, RoomEnvironment as ma, PointerLockControls as mi, MirrorShader as mn, SkyGeometry as mo, TAARenderPass as mr, KTX2Loader as mt, Face3 as n, Water as na, DigitalGlitch as ni, ToonShader1 as nn, TubePainter as no, VRButton as nr, PVRLoader as nt, DecoratedTorusKnot4b as o, Refractor as oa, FullScreenQuad as oi, TechnicolorShader as on, getWebGL2ErrorMessage as oo, XRHandMeshModel as or, XYZLoader as ot, KnotCurve as p, AnimationClipCreator as pa, DeviceOrientationControls as pi, NormalMapShader as pn, RollerCoasterShadowGeometry as po, RenderPass as pr, LottieLoader as pt, MMDLoader as q, RenderableSprite as qa, Sky as qi, ParametricGeometry as qn, FilmPass as qr, SelectionHelper as qt, Geometry as r, Lensflare as ra, ClearPass as ri, ToonShader2 as rn, VolumeSlice as ro, createText as rr, DDSLoader as rt, DecoratedTorusKnot5a as s, Reflector as sa, Pass as si, SubsurfaceScatteringShader as sn, getWebGLErrorMessage as so, GLTFLoader as sr, ThreeMFLoader as st, MeshoptDecoder as t, triTable as ta, GlitchPass as ti, TriangleBlurShader as tn, Volume as to, fetchProfilesList as tr, GCodeLoader as tt, GrannyKnot as u, MMDPhysics as ua, MapControls as ui, RGBShiftShader as un, Timer as uo, BloomPass as ur, AssimpLoader as ut, NURBSSurface as v, ColladaExporter as va, TransformControlsPlane as vi, HorizontalBlurShader as vn, GPUComputationRenderer as vo, SSRDepthShader as vr, ColladaLoader as vt, VertexTangentsHelper as w, EdgeSplitModifier as wa, TrackballControlsExp as wi, FresnelShader as wn, VertexList as wo, MaskPass as wr, LUTCubeLoader as wt, RectAreaLightHelper as x, USDZExporter as xa, MapControlsExp as xi, GodRaysFakeSunShader as xn, ConvexHull as xo, DotScreenShader as xr, MTLLoader as xt, LightProbeGenerator as y, DRACOExporter as ya, FirstPersonControls as yi, GodRaysCombineShader as yn, ConvexObjectBreaker as yo, SSRShader as yr, BVHLoader as yt, VOXMesh as z, updateSplineTexture as za, UnpackDepthRGBAShader as zi, CSMFrustum as zn, BokehShader as zr, StereoEffect as zt }; - -//# sourceMappingURL=three-stdlib-BHZ1qH6e.js.map \ No newline at end of file diff --git a/node_modules/.vite/deps/three-stdlib-BHZ1qH6e.js.map b/node_modules/.vite/deps/three-stdlib-BHZ1qH6e.js.map deleted file mode 100644 index bb42174b..00000000 --- a/node_modules/.vite/deps/three-stdlib-BHZ1qH6e.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"file":"three-stdlib-BHZ1qH6e.js","names":["_v1","_plane","_closestPoint","Triangle","Face","_v1","__defProp","__defNormalProp","__publicField","_vector","_a","_b","_position","_quaternion","_scale","_matrix","__defProp","__defNormalProp","__publicField","matrix","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","BufferGeometryUtils","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","GLTFMaterialsUnlitExtension","GLTFMaterialsTransmissionExtension","GLTFMaterialsVolumeExtension","GLTFMaterialsIorExtension","GLTFMaterialsSpecularExtension","GLTFMaterialsClearcoatExtension","GLTFMaterialsIridescenceExtension","GLTFMaterialsSheenExtension","GLTFMaterialsAnisotropyExtension","GLTFMaterialsEmissiveStrengthExtension","WEBGL_CONSTANTS","PATH_PROPERTIES","i","__defProp","__defNormalProp","__publicField","mesh","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","THREE.Scene","THREE.BoxGeometry","THREE.MeshStandardMaterial","THREE.PointLight","THREE.Mesh","THREE.MeshBasicMaterial","_q","_vector","_matrix","_q","__defProp","__defNormalProp","__publicField","_identityMatrix","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","Triangle","_v1","_v2","init","_v1","_v2","_plane","_sphere","Triangle","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","STATE","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","_vector","_changeEvent","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","_ray","__defProp","__defNormalProp","__publicField","_center","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","_JitterVectors","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","decodeText","SRGBColorSpace","LinearSRGBColorSpace","sRGBEncoding","LinearEncoding","decodeText","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","THREE.Vector3","THREE.Object3D","THREE.Float32BufferAttribute","THREE.BufferGeometry","THREE.MeshBasicMaterial","THREE.Mesh","THREE.Raycaster","THREE.SphereGeometry","THREE.Matrix4","THREE.Texture","THREE.MeshBasicMaterial","THREE.PlaneGeometry","THREE.Mesh","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","__defProp","__defNormalProp","__publicField","_vector","GeometryParser","decodeText","__defProp","__defNormalProp","__publicField","decodeText","decodeText","init","__defProp","__defNormalProp","__publicField","_taskCache","decodeText","decodeText","__defProp","__defNormalProp","__publicField","_taskCache","_ray","_taskCache","decodeText","decodeText","decodeText","_box","_start","_end","_viewport","_v1","_v2","EventDispatcher"],"sources":["../../three-stdlib/loaders/MD2Loader.js","../../three-stdlib/misc/MorphBlendMesh.js","../../three-stdlib/misc/MD2CharacterComplex.js","../../three-stdlib/math/ConvexHull.js","../../three-stdlib/geometries/ConvexGeometry.js","../../three-stdlib/misc/ConvexObjectBreaker.js","../../three-stdlib/misc/GPUComputationRenderer.js","../../three-stdlib/misc/Gyroscope.js","../../three-stdlib/misc/MorphAnimMesh.js","../../three-stdlib/misc/RollerCoaster.js","../../three-stdlib/misc/Timer.js","../../three-stdlib/misc/WebGL.js","../../three-stdlib/misc/MD2Character.js","../../three-stdlib/misc/VolumeSlice.js","../../three-stdlib/misc/TubePainter.js","../../three-stdlib/misc/Volume.js","../../potpack/index.mjs","../../three-stdlib/_polyfill/constants.js","../../three-stdlib/_polyfill/uv1.js","../../three-stdlib/misc/ProgressiveLightmap.js","../../three-stdlib/renderers/CSS2DRenderer.js","../../three-stdlib/renderers/CSS3DRenderer.js","../../three-stdlib/renderers/Projector.js","../../three-stdlib/renderers/SVGRenderer.js","../../three-stdlib/textures/FlakesTexture.js","../../three-stdlib/modifiers/CurveModifier.js","../../three-stdlib/types/helpers.js","../../three-stdlib/utils/BufferGeometryUtils.js","../../three-stdlib/modifiers/SimplifyModifier.js","../../three-stdlib/modifiers/EdgeSplitModifier.js","../../three-stdlib/modifiers/TessellateModifier.js","../../three-stdlib/exporters/GLTFExporter.js","../../three-stdlib/node_modules/fflate/esm/browser.js","../../three-stdlib/exporters/USDZExporter.js","../../three-stdlib/exporters/PLYExporter.js","../../three-stdlib/exporters/DRACOExporter.js","../../three-stdlib/exporters/ColladaExporter.js","../../three-stdlib/libs/mmdparser.js","../../three-stdlib/exporters/MMDExporter.js","../../three-stdlib/exporters/STLExporter.js","../../three-stdlib/exporters/OBJExporter.js","../../three-stdlib/environments/RoomEnvironment.js","../../three-stdlib/animation/AnimationClipCreator.js","../../three-stdlib/animation/CCDIKSolver.js","../../three-stdlib/_polyfill/CapsuleGeometry.js","../../three-stdlib/animation/MMDPhysics.js","../../three-stdlib/animation/MMDAnimationHelper.js","../../three-stdlib/objects/BatchedMesh.js","../../three-stdlib/objects/Reflector.js","../../three-stdlib/objects/Refractor.js","../../three-stdlib/objects/ShadowMesh.js","../../three-stdlib/objects/Lensflare.js","../../three-stdlib/objects/Water.js","../../three-stdlib/objects/MarchingCubes.js","../../three-stdlib/math/SimplexNoise.js","../../three-stdlib/geometries/LightningStrike.js","../../three-stdlib/objects/LightningStorm.js","../../three-stdlib/objects/ReflectorRTT.js","../../three-stdlib/objects/ReflectorForSSRPass.js","../../three-stdlib/objects/Sky.js","../../three-stdlib/objects/Water2.js","../../three-stdlib/objects/GroundProjectedEnv.js","../../three-stdlib/utils/SceneUtils.js","../../three-stdlib/utils/UVsDebug.js","../../three-stdlib/utils/GeometryUtils.js","../../three-stdlib/utils/RoughnessMipmapper.js","../../three-stdlib/utils/SkeletonUtils.js","../../three-stdlib/shaders/UnpackDepthRGBAShader.js","../../three-stdlib/utils/ShadowMapViewer.js","../../three-stdlib/utils/GeometryCompressionUtils.js","../../three-stdlib/shaders/BokehShader2.js","../../three-stdlib/cameras/CinematicCamera.js","../../three-stdlib/math/MeshSurfaceSampler.js","../../three-stdlib/math/OBB.js","../../three-stdlib/math/Capsule.js","../../three-stdlib/math/ColorConverter.js","../../three-stdlib/math/ImprovedNoise.js","../../three-stdlib/math/Octree.js","../../three-stdlib/math/Lut.js","../../three-stdlib/controls/EventDispatcher.js","../../three-stdlib/controls/experimental/CameraControls.js","../../three-stdlib/controls/FirstPersonControls.js","../../three-stdlib/controls/TransformControls.js","../../three-stdlib/controls/DragControls.js","../../three-stdlib/controls/PointerLockControls.js","../../three-stdlib/controls/DeviceOrientationControls.js","../../three-stdlib/controls/TrackballControls.js","../../three-stdlib/controls/OrbitControls.js","../../three-stdlib/controls/ArcballControls.js","../../three-stdlib/controls/FlyControls.js","../../three-stdlib/postprocessing/Pass.js","../../three-stdlib/postprocessing/ShaderPass.js","../../three-stdlib/postprocessing/LUTPass.js","../../three-stdlib/postprocessing/ClearPass.js","../../three-stdlib/shaders/DigitalGlitch.js","../../three-stdlib/postprocessing/GlitchPass.js","../../three-stdlib/shaders/HalftoneShader.js","../../three-stdlib/postprocessing/HalftonePass.js","../../three-stdlib/shaders/SMAAShader.js","../../three-stdlib/postprocessing/SMAAPass.js","../../three-stdlib/shaders/FilmShader.js","../../three-stdlib/postprocessing/FilmPass.js","../../three-stdlib/shaders/CopyShader.js","../../three-stdlib/postprocessing/OutlinePass.js","../../three-stdlib/shaders/SSAOShader.js","../../three-stdlib/postprocessing/SSAOPass.js","../../three-stdlib/postprocessing/SavePass.js","../../three-stdlib/shaders/BokehShader.js","../../three-stdlib/postprocessing/BokehPass.js","../../three-stdlib/postprocessing/TexturePass.js","../../three-stdlib/shaders/LuminosityShader.js","../../three-stdlib/shaders/ToneMapShader.js","../../three-stdlib/postprocessing/AdaptiveToneMappingPass.js","../../three-stdlib/shaders/LuminosityHighPassShader.js","../../three-stdlib/postprocessing/UnrealBloomPass.js","../../three-stdlib/postprocessing/CubeTexturePass.js","../../three-stdlib/shaders/SAOShader.js","../../three-stdlib/shaders/DepthLimitedBlurShader.js","../../three-stdlib/postprocessing/SAOPass.js","../../three-stdlib/shaders/AfterimageShader.js","../../three-stdlib/postprocessing/AfterimagePass.js","../../three-stdlib/postprocessing/MaskPass.js","../../three-stdlib/postprocessing/EffectComposer.js","../../three-stdlib/shaders/DotScreenShader.js","../../three-stdlib/postprocessing/DotScreenPass.js","../../three-stdlib/shaders/SSRShader.js","../../three-stdlib/postprocessing/SSRPass.js","../../three-stdlib/postprocessing/SSAARenderPass.js","../../three-stdlib/postprocessing/TAARenderPass.js","../../three-stdlib/postprocessing/RenderPass.js","../../three-stdlib/postprocessing/RenderPixelatedPass.js","../../three-stdlib/shaders/ConvolutionShader.js","../../three-stdlib/postprocessing/BloomPass.js","../../three-stdlib/postprocessing/WaterPass.js","../../three-stdlib/webxr/ARButton.js","../../three-stdlib/_polyfill/LoaderUtils.js","../../three-stdlib/loaders/GLTFLoader.js","../../three-stdlib/webxr/XRHandMeshModel.js","../../three-stdlib/webxr/OculusHandModel.js","../../three-stdlib/webxr/OculusHandPointerModel.js","../../three-stdlib/webxr/Text2D.js","../../three-stdlib/webxr/VRButton.js","../../three-stdlib/libs/MotionControllers.js","../../three-stdlib/webxr/XRControllerModelFactory.js","../../three-stdlib/webxr/XREstimatedLight.js","../../three-stdlib/webxr/XRHandPrimitiveModel.js","../../three-stdlib/webxr/XRHandModelFactory.js","../../three-stdlib/geometries/ParametricGeometry.js","../../three-stdlib/geometries/ParametricGeometries.js","../../three-stdlib/geometries/RoundedBoxGeometry.js","../../three-stdlib/geometries/BoxLineGeometry.js","../../three-stdlib/geometries/DecalGeometry.js","../../three-stdlib/geometries/TeapotGeometry.js","../../three-stdlib/geometries/TextGeometry.js","../../three-stdlib/csm/CSMFrustum.js","../../three-stdlib/csm/CSMShader.js","../../three-stdlib/csm/CSM.js","../../three-stdlib/csm/CSMHelper.js","../../three-stdlib/shaders/ACESFilmicToneMappingShader.js","../../three-stdlib/shaders/BasicShader.js","../../three-stdlib/shaders/BleachBypassShader.js","../../three-stdlib/shaders/BlendShader.js","../../three-stdlib/shaders/BrightnessContrastShader.js","../../three-stdlib/shaders/ColorCorrectionShader.js","../../three-stdlib/shaders/ColorifyShader.js","../../three-stdlib/shaders/DOFMipMapShader.js","../../three-stdlib/shaders/FXAAShader.js","../../three-stdlib/shaders/FocusShader.js","../../three-stdlib/shaders/FreiChenShader.js","../../three-stdlib/shaders/FresnelShader.js","../../three-stdlib/shaders/GammaCorrectionShader.js","../../three-stdlib/shaders/GodRaysShader.js","../../three-stdlib/shaders/HorizontalBlurShader.js","../../three-stdlib/shaders/HorizontalTiltShiftShader.js","../../three-stdlib/shaders/HueSaturationShader.js","../../three-stdlib/shaders/KaleidoShader.js","../../three-stdlib/shaders/MirrorShader.js","../../three-stdlib/shaders/NormalMapShader.js","../../three-stdlib/shaders/ParallaxShader.js","../../three-stdlib/shaders/PixelShader.js","../../three-stdlib/shaders/RGBShiftShader.js","../../three-stdlib/shaders/SepiaShader.js","../../three-stdlib/shaders/SobelOperatorShader.js","../../three-stdlib/shaders/SubsurfaceScatteringShader.js","../../three-stdlib/shaders/TechnicolorShader.js","../../three-stdlib/shaders/ToonShader.js","../../three-stdlib/shaders/TriangleBlurShader.js","../../three-stdlib/shaders/VerticalBlurShader.js","../../three-stdlib/shaders/VerticalTiltShiftShader.js","../../three-stdlib/shaders/VignetteShader.js","../../three-stdlib/shaders/VolumeShader.js","../../three-stdlib/shaders/WaterRefractionShader.js","../../three-stdlib/interactive/HTMLMesh.js","../../three-stdlib/interactive/InteractiveGroup.js","../../three-stdlib/interactive/SelectionHelper.js","../../three-stdlib/interactive/SelectionBox.js","../../three-stdlib/physics/AmmoPhysics.js","../../three-stdlib/effects/ParallaxBarrierEffect.js","../../three-stdlib/effects/PeppersGhostEffect.js","../../three-stdlib/effects/OutlineEffect.js","../../three-stdlib/effects/AnaglyphEffect.js","../../three-stdlib/effects/AsciiEffect.js","../../three-stdlib/effects/StereoEffect.js","../../three-stdlib/curves/NURBSUtils.js","../../three-stdlib/curves/NURBSCurve.js","../../three-stdlib/loaders/FBXLoader.js","../../three-stdlib/loaders/FontLoader.js","../../three-stdlib/loaders/TGALoader.js","../../three-stdlib/_polyfill/Data3DTexture.js","../../three-stdlib/loaders/LUTCubeLoader.js","../../three-stdlib/loaders/NRRDLoader.js","../../three-stdlib/loaders/STLLoader.js","../../three-stdlib/loaders/MTLLoader.js","../../three-stdlib/loaders/XLoader.js","../../three-stdlib/loaders/BVHLoader.js","../../three-stdlib/loaders/ColladaLoader.js","../../three-stdlib/loaders/KMZLoader.js","../../three-stdlib/loaders/VRMLoader.js","../../three-stdlib/libs/chevrotain.js","../../three-stdlib/loaders/VRMLLoader.js","../../three-stdlib/utils/WorkerPool.js","../../three-stdlib/libs/ktx-parse.js","../../three-stdlib/libs/zstddec.js","../../three-stdlib/_polyfill/CompressedCubeTexture.js","../../three-stdlib/_polyfill/CompressedArrayTexture.js","../../three-stdlib/loaders/KTX2Loader.js","../../three-stdlib/libs/lottie.js","../../three-stdlib/loaders/LottieLoader.js","../../three-stdlib/libs/opentype.js","../../three-stdlib/loaders/TTFLoader.js","../../three-stdlib/loaders/RGBELoader.js","../../three-stdlib/loaders/AssimpLoader.js","../../three-stdlib/loaders/MDDLoader.js","../../three-stdlib/loaders/EXRLoader.js","../../three-stdlib/loaders/3MFLoader.js","../../three-stdlib/loaders/XYZLoader.js","../../three-stdlib/loaders/VTKLoader.js","../../three-stdlib/loaders/LUT3dlLoader.js","../../three-stdlib/loaders/DDSLoader.js","../../three-stdlib/loaders/PVRLoader.js","../../three-stdlib/loaders/GCodeLoader.js","../../three-stdlib/loaders/BasisTextureLoader.js","../../three-stdlib/loaders/TDSLoader.js","../../three-stdlib/loaders/LDrawLoader.js","../../three-stdlib/loaders/SVGLoader.js","../../three-stdlib/loaders/3DMLoader.js","../../three-stdlib/loaders/OBJLoader.js","../../three-stdlib/loaders/AMFLoader.js","../../three-stdlib/loaders/MMDLoader.js","../../three-stdlib/loaders/KTXLoader.js","../../three-stdlib/loaders/TiltLoader.js","../../three-stdlib/loaders/DRACOLoader.js","../../three-stdlib/loaders/HDRCubeTextureLoader.js","../../three-stdlib/loaders/PDBLoader.js","../../three-stdlib/loaders/PRWMLoader.js","../../three-stdlib/loaders/RGBMLoader.js","../../three-stdlib/loaders/VOXLoader.js","../../three-stdlib/loaders/PCDLoader.js","../../three-stdlib/loaders/lwo/LWO2Parser.js","../../three-stdlib/loaders/lwo/LWO3Parser.js","../../three-stdlib/loaders/lwo/IFFParser.js","../../three-stdlib/loaders/LWOLoader.js","../../three-stdlib/loaders/PLYLoader.js","../../three-stdlib/lines/LineSegmentsGeometry.js","../../three-stdlib/lines/LineGeometry.js","../../three-stdlib/lines/LineMaterial.js","../../three-stdlib/lines/Wireframe.js","../../three-stdlib/lines/WireframeGeometry2.js","../../three-stdlib/lines/LineSegments2.js","../../three-stdlib/lines/Line2.js","../../three-stdlib/helpers/LightProbeHelper.js","../../three-stdlib/helpers/RaycasterHelper.js","../../three-stdlib/helpers/VertexTangentsHelper.js","../../three-stdlib/helpers/PositionalAudioHelper.js","../../three-stdlib/helpers/VertexNormalsHelper.js","../../three-stdlib/helpers/RectAreaLightHelper.js","../../three-stdlib/lights/RectAreaLightUniformsLib.js","../../three-stdlib/lights/LightProbeGenerator.js","../../three-stdlib/curves/NURBSSurface.js","../../three-stdlib/curves/CurveExtras.js","../../three-stdlib/deprecated/Geometry.js","../../three-stdlib/libs/MeshoptDecoder.js"],"sourcesContent":["import { Loader, FileLoader, BufferGeometry, Vector3, Float32BufferAttribute, AnimationClip } from \"three\";\nconst _normalData = [\n [-0.525731, 0, 0.850651],\n [-0.442863, 0.238856, 0.864188],\n [-0.295242, 0, 0.955423],\n [-0.309017, 0.5, 0.809017],\n [-0.16246, 0.262866, 0.951056],\n [0, 0, 1],\n [0, 0.850651, 0.525731],\n [-0.147621, 0.716567, 0.681718],\n [0.147621, 0.716567, 0.681718],\n [0, 0.525731, 0.850651],\n [0.309017, 0.5, 0.809017],\n [0.525731, 0, 0.850651],\n [0.295242, 0, 0.955423],\n [0.442863, 0.238856, 0.864188],\n [0.16246, 0.262866, 0.951056],\n [-0.681718, 0.147621, 0.716567],\n [-0.809017, 0.309017, 0.5],\n [-0.587785, 0.425325, 0.688191],\n [-0.850651, 0.525731, 0],\n [-0.864188, 0.442863, 0.238856],\n [-0.716567, 0.681718, 0.147621],\n [-0.688191, 0.587785, 0.425325],\n [-0.5, 0.809017, 0.309017],\n [-0.238856, 0.864188, 0.442863],\n [-0.425325, 0.688191, 0.587785],\n [-0.716567, 0.681718, -0.147621],\n [-0.5, 0.809017, -0.309017],\n [-0.525731, 0.850651, 0],\n [0, 0.850651, -0.525731],\n [-0.238856, 0.864188, -0.442863],\n [0, 0.955423, -0.295242],\n [-0.262866, 0.951056, -0.16246],\n [0, 1, 0],\n [0, 0.955423, 0.295242],\n [-0.262866, 0.951056, 0.16246],\n [0.238856, 0.864188, 0.442863],\n [0.262866, 0.951056, 0.16246],\n [0.5, 0.809017, 0.309017],\n [0.238856, 0.864188, -0.442863],\n [0.262866, 0.951056, -0.16246],\n [0.5, 0.809017, -0.309017],\n [0.850651, 0.525731, 0],\n [0.716567, 0.681718, 0.147621],\n [0.716567, 0.681718, -0.147621],\n [0.525731, 0.850651, 0],\n [0.425325, 0.688191, 0.587785],\n [0.864188, 0.442863, 0.238856],\n [0.688191, 0.587785, 0.425325],\n [0.809017, 0.309017, 0.5],\n [0.681718, 0.147621, 0.716567],\n [0.587785, 0.425325, 0.688191],\n [0.955423, 0.295242, 0],\n [1, 0, 0],\n [0.951056, 0.16246, 0.262866],\n [0.850651, -0.525731, 0],\n [0.955423, -0.295242, 0],\n [0.864188, -0.442863, 0.238856],\n [0.951056, -0.16246, 0.262866],\n [0.809017, -0.309017, 0.5],\n [0.681718, -0.147621, 0.716567],\n [0.850651, 0, 0.525731],\n [0.864188, 0.442863, -0.238856],\n [0.809017, 0.309017, -0.5],\n [0.951056, 0.16246, -0.262866],\n [0.525731, 0, -0.850651],\n [0.681718, 0.147621, -0.716567],\n [0.681718, -0.147621, -0.716567],\n [0.850651, 0, -0.525731],\n [0.809017, -0.309017, -0.5],\n [0.864188, -0.442863, -0.238856],\n [0.951056, -0.16246, -0.262866],\n [0.147621, 0.716567, -0.681718],\n [0.309017, 0.5, -0.809017],\n [0.425325, 0.688191, -0.587785],\n [0.442863, 0.238856, -0.864188],\n [0.587785, 0.425325, -0.688191],\n [0.688191, 0.587785, -0.425325],\n [-0.147621, 0.716567, -0.681718],\n [-0.309017, 0.5, -0.809017],\n [0, 0.525731, -0.850651],\n [-0.525731, 0, -0.850651],\n [-0.442863, 0.238856, -0.864188],\n [-0.295242, 0, -0.955423],\n [-0.16246, 0.262866, -0.951056],\n [0, 0, -1],\n [0.295242, 0, -0.955423],\n [0.16246, 0.262866, -0.951056],\n [-0.442863, -0.238856, -0.864188],\n [-0.309017, -0.5, -0.809017],\n [-0.16246, -0.262866, -0.951056],\n [0, -0.850651, -0.525731],\n [-0.147621, -0.716567, -0.681718],\n [0.147621, -0.716567, -0.681718],\n [0, -0.525731, -0.850651],\n [0.309017, -0.5, -0.809017],\n [0.442863, -0.238856, -0.864188],\n [0.16246, -0.262866, -0.951056],\n [0.238856, -0.864188, -0.442863],\n [0.5, -0.809017, -0.309017],\n [0.425325, -0.688191, -0.587785],\n [0.716567, -0.681718, -0.147621],\n [0.688191, -0.587785, -0.425325],\n [0.587785, -0.425325, -0.688191],\n [0, -0.955423, -0.295242],\n [0, -1, 0],\n [0.262866, -0.951056, -0.16246],\n [0, -0.850651, 0.525731],\n [0, -0.955423, 0.295242],\n [0.238856, -0.864188, 0.442863],\n [0.262866, -0.951056, 0.16246],\n [0.5, -0.809017, 0.309017],\n [0.716567, -0.681718, 0.147621],\n [0.525731, -0.850651, 0],\n [-0.238856, -0.864188, -0.442863],\n [-0.5, -0.809017, -0.309017],\n [-0.262866, -0.951056, -0.16246],\n [-0.850651, -0.525731, 0],\n [-0.716567, -0.681718, -0.147621],\n [-0.716567, -0.681718, 0.147621],\n [-0.525731, -0.850651, 0],\n [-0.5, -0.809017, 0.309017],\n [-0.238856, -0.864188, 0.442863],\n [-0.262866, -0.951056, 0.16246],\n [-0.864188, -0.442863, 0.238856],\n [-0.809017, -0.309017, 0.5],\n [-0.688191, -0.587785, 0.425325],\n [-0.681718, -0.147621, 0.716567],\n [-0.442863, -0.238856, 0.864188],\n [-0.587785, -0.425325, 0.688191],\n [-0.309017, -0.5, 0.809017],\n [-0.147621, -0.716567, 0.681718],\n [-0.425325, -0.688191, 0.587785],\n [-0.16246, -0.262866, 0.951056],\n [0.442863, -0.238856, 0.864188],\n [0.16246, -0.262866, 0.951056],\n [0.309017, -0.5, 0.809017],\n [0.147621, -0.716567, 0.681718],\n [0, -0.525731, 0.850651],\n [0.425325, -0.688191, 0.587785],\n [0.587785, -0.425325, 0.688191],\n [0.688191, -0.587785, 0.425325],\n [-0.955423, 0.295242, 0],\n [-0.951056, 0.16246, 0.262866],\n [-1, 0, 0],\n [-0.850651, 0, 0.525731],\n [-0.955423, -0.295242, 0],\n [-0.951056, -0.16246, 0.262866],\n [-0.864188, 0.442863, -0.238856],\n [-0.951056, 0.16246, -0.262866],\n [-0.809017, 0.309017, -0.5],\n [-0.864188, -0.442863, -0.238856],\n [-0.951056, -0.16246, -0.262866],\n [-0.809017, -0.309017, -0.5],\n [-0.681718, 0.147621, -0.716567],\n [-0.681718, -0.147621, -0.716567],\n [-0.850651, 0, -0.525731],\n [-0.688191, 0.587785, -0.425325],\n [-0.587785, 0.425325, -0.688191],\n [-0.425325, 0.688191, -0.587785],\n [-0.425325, -0.688191, -0.587785],\n [-0.587785, -0.425325, -0.688191],\n [-0.688191, -0.587785, -0.425325]\n];\nclass MD2Loader extends Loader {\n constructor(manager) {\n super(manager);\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const loader = new FileLoader(scope.manager);\n loader.setPath(scope.path);\n loader.setResponseType(\"arraybuffer\");\n loader.setRequestHeader(scope.requestHeader);\n loader.setWithCredentials(scope.withCredentials);\n loader.load(\n url,\n function(buffer) {\n try {\n onLoad(scope.parse(buffer));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(buffer) {\n const data = new DataView(buffer);\n const header = {};\n const headerNames = [\n \"ident\",\n \"version\",\n \"skinwidth\",\n \"skinheight\",\n \"framesize\",\n \"num_skins\",\n \"num_vertices\",\n \"num_st\",\n \"num_tris\",\n \"num_glcmds\",\n \"num_frames\",\n \"offset_skins\",\n \"offset_st\",\n \"offset_tris\",\n \"offset_frames\",\n \"offset_glcmds\",\n \"offset_end\"\n ];\n for (let i = 0; i < headerNames.length; i++) {\n header[headerNames[i]] = data.getInt32(i * 4, true);\n }\n if (header.ident !== 844121161 || header.version !== 8) {\n console.error(\"Not a valid MD2 file\");\n return;\n }\n if (header.offset_end !== data.byteLength) {\n console.error(\"Corrupted MD2 file\");\n return;\n }\n const geometry = new BufferGeometry();\n const uvsTemp = [];\n let offset = header.offset_st;\n for (let i = 0, l = header.num_st; i < l; i++) {\n const u = data.getInt16(offset + 0, true);\n const v = data.getInt16(offset + 2, true);\n uvsTemp.push(u / header.skinwidth, 1 - v / header.skinheight);\n offset += 4;\n }\n offset = header.offset_tris;\n const vertexIndices = [];\n const uvIndices = [];\n for (let i = 0, l = header.num_tris; i < l; i++) {\n vertexIndices.push(\n data.getUint16(offset + 0, true),\n data.getUint16(offset + 2, true),\n data.getUint16(offset + 4, true)\n );\n uvIndices.push(\n data.getUint16(offset + 6, true),\n data.getUint16(offset + 8, true),\n data.getUint16(offset + 10, true)\n );\n offset += 12;\n }\n const translation = new Vector3();\n const scale = new Vector3();\n const string = [];\n const frames = [];\n offset = header.offset_frames;\n for (let i = 0, l = header.num_frames; i < l; i++) {\n scale.set(data.getFloat32(offset + 0, true), data.getFloat32(offset + 4, true), data.getFloat32(offset + 8, true));\n translation.set(\n data.getFloat32(offset + 12, true),\n data.getFloat32(offset + 16, true),\n data.getFloat32(offset + 20, true)\n );\n offset += 24;\n for (let j = 0; j < 16; j++) {\n const character = data.getUint8(offset + j, true);\n if (character === 0)\n break;\n string[j] = character;\n }\n const frame = {\n name: String.fromCharCode.apply(null, string),\n vertices: [],\n normals: []\n };\n offset += 16;\n for (let j = 0; j < header.num_vertices; j++) {\n let x = data.getUint8(offset++, true);\n let y = data.getUint8(offset++, true);\n let z = data.getUint8(offset++, true);\n const n = _normalData[data.getUint8(offset++, true)];\n x = x * scale.x + translation.x;\n y = y * scale.y + translation.y;\n z = z * scale.z + translation.z;\n frame.vertices.push(x, z, y);\n frame.normals.push(n[0], n[2], n[1]);\n }\n frames.push(frame);\n }\n const positions = [];\n const normals = [];\n const uvs = [];\n const verticesTemp = frames[0].vertices;\n const normalsTemp = frames[0].normals;\n for (let i = 0, l = vertexIndices.length; i < l; i++) {\n const vertexIndex = vertexIndices[i];\n let stride = vertexIndex * 3;\n const x = verticesTemp[stride];\n const y = verticesTemp[stride + 1];\n const z = verticesTemp[stride + 2];\n positions.push(x, y, z);\n const nx = normalsTemp[stride];\n const ny = normalsTemp[stride + 1];\n const nz = normalsTemp[stride + 2];\n normals.push(nx, ny, nz);\n const uvIndex = uvIndices[i];\n stride = uvIndex * 2;\n const u = uvsTemp[stride];\n const v = uvsTemp[stride + 1];\n uvs.push(u, v);\n }\n geometry.setAttribute(\"position\", new Float32BufferAttribute(positions, 3));\n geometry.setAttribute(\"normal\", new Float32BufferAttribute(normals, 3));\n geometry.setAttribute(\"uv\", new Float32BufferAttribute(uvs, 2));\n const morphPositions = [];\n const morphNormals = [];\n for (let i = 0, l = frames.length; i < l; i++) {\n const frame = frames[i];\n const attributeName = frame.name;\n if (frame.vertices.length > 0) {\n const positions2 = [];\n for (let j = 0, jl = vertexIndices.length; j < jl; j++) {\n const vertexIndex = vertexIndices[j];\n const stride = vertexIndex * 3;\n const x = frame.vertices[stride];\n const y = frame.vertices[stride + 1];\n const z = frame.vertices[stride + 2];\n positions2.push(x, y, z);\n }\n const positionAttribute = new Float32BufferAttribute(positions2, 3);\n positionAttribute.name = attributeName;\n morphPositions.push(positionAttribute);\n }\n if (frame.normals.length > 0) {\n const normals2 = [];\n for (let j = 0, jl = vertexIndices.length; j < jl; j++) {\n const vertexIndex = vertexIndices[j];\n const stride = vertexIndex * 3;\n const nx = frame.normals[stride];\n const ny = frame.normals[stride + 1];\n const nz = frame.normals[stride + 2];\n normals2.push(nx, ny, nz);\n }\n const normalAttribute = new Float32BufferAttribute(normals2, 3);\n normalAttribute.name = attributeName;\n morphNormals.push(normalAttribute);\n }\n }\n geometry.morphAttributes.position = morphPositions;\n geometry.morphAttributes.normal = morphNormals;\n geometry.morphTargetsRelative = false;\n geometry.animations = AnimationClip.CreateClipsFromMorphTargetSequences(frames, 10);\n return geometry;\n }\n}\nexport {\n MD2Loader\n};\n//# sourceMappingURL=MD2Loader.js.map\n","import { Mesh, MathUtils } from \"three\";\nclass MorphBlendMesh extends Mesh {\n constructor(geometry, material) {\n super(geometry, material);\n this.animationsMap = {};\n this.animationsList = [];\n const numFrames = Object.keys(this.morphTargetDictionary).length;\n const name = \"__default\";\n const startFrame = 0;\n const endFrame = numFrames - 1;\n const fps = numFrames / 1;\n this.createAnimation(name, startFrame, endFrame, fps);\n this.setAnimationWeight(name, 1);\n }\n createAnimation(name, start, end, fps) {\n const animation = {\n start,\n end,\n length: end - start + 1,\n fps,\n duration: (end - start) / fps,\n lastFrame: 0,\n currentFrame: 0,\n active: false,\n time: 0,\n direction: 1,\n weight: 1,\n directionBackwards: false,\n mirroredLoop: false\n };\n this.animationsMap[name] = animation;\n this.animationsList.push(animation);\n }\n autoCreateAnimations(fps) {\n const pattern = /([a-z]+)_?(\\d+)/i;\n let firstAnimation;\n const frameRanges = {};\n let i = 0;\n for (const key in this.morphTargetDictionary) {\n const chunks = key.match(pattern);\n if (chunks && chunks.length > 1) {\n const name = chunks[1];\n if (!frameRanges[name])\n frameRanges[name] = { start: Infinity, end: -Infinity };\n const range = frameRanges[name];\n if (i < range.start)\n range.start = i;\n if (i > range.end)\n range.end = i;\n if (!firstAnimation)\n firstAnimation = name;\n }\n i++;\n }\n for (const name in frameRanges) {\n const range = frameRanges[name];\n this.createAnimation(name, range.start, range.end, fps);\n }\n this.firstAnimation = firstAnimation;\n }\n setAnimationDirectionForward(name) {\n const animation = this.animationsMap[name];\n if (animation) {\n animation.direction = 1;\n animation.directionBackwards = false;\n }\n }\n setAnimationDirectionBackward(name) {\n const animation = this.animationsMap[name];\n if (animation) {\n animation.direction = -1;\n animation.directionBackwards = true;\n }\n }\n setAnimationFPS(name, fps) {\n const animation = this.animationsMap[name];\n if (animation) {\n animation.fps = fps;\n animation.duration = (animation.end - animation.start) / animation.fps;\n }\n }\n setAnimationDuration(name, duration) {\n const animation = this.animationsMap[name];\n if (animation) {\n animation.duration = duration;\n animation.fps = (animation.end - animation.start) / animation.duration;\n }\n }\n setAnimationWeight(name, weight) {\n const animation = this.animationsMap[name];\n if (animation) {\n animation.weight = weight;\n }\n }\n setAnimationTime(name, time) {\n const animation = this.animationsMap[name];\n if (animation) {\n animation.time = time;\n }\n }\n getAnimationTime(name) {\n let time = 0;\n const animation = this.animationsMap[name];\n if (animation) {\n time = animation.time;\n }\n return time;\n }\n getAnimationDuration(name) {\n let duration = -1;\n const animation = this.animationsMap[name];\n if (animation) {\n duration = animation.duration;\n }\n return duration;\n }\n playAnimation(name) {\n const animation = this.animationsMap[name];\n if (animation) {\n animation.time = 0;\n animation.active = true;\n } else {\n console.warn(\"THREE.MorphBlendMesh: animation[\" + name + \"] undefined in .playAnimation()\");\n }\n }\n stopAnimation(name) {\n const animation = this.animationsMap[name];\n if (animation) {\n animation.active = false;\n }\n }\n update(delta) {\n for (let i = 0, il = this.animationsList.length; i < il; i++) {\n const animation = this.animationsList[i];\n if (!animation.active)\n continue;\n const frameTime = animation.duration / animation.length;\n animation.time += animation.direction * delta;\n if (animation.mirroredLoop) {\n if (animation.time > animation.duration || animation.time < 0) {\n animation.direction *= -1;\n if (animation.time > animation.duration) {\n animation.time = animation.duration;\n animation.directionBackwards = true;\n }\n if (animation.time < 0) {\n animation.time = 0;\n animation.directionBackwards = false;\n }\n }\n } else {\n animation.time = animation.time % animation.duration;\n if (animation.time < 0)\n animation.time += animation.duration;\n }\n const keyframe = animation.start + MathUtils.clamp(Math.floor(animation.time / frameTime), 0, animation.length - 1);\n const weight = animation.weight;\n if (keyframe !== animation.currentFrame) {\n this.morphTargetInfluences[animation.lastFrame] = 0;\n this.morphTargetInfluences[animation.currentFrame] = 1 * weight;\n this.morphTargetInfluences[keyframe] = 0;\n animation.lastFrame = animation.currentFrame;\n animation.currentFrame = keyframe;\n }\n let mix = animation.time % frameTime / frameTime;\n if (animation.directionBackwards)\n mix = 1 - mix;\n if (animation.currentFrame !== animation.lastFrame) {\n this.morphTargetInfluences[animation.currentFrame] = mix * weight;\n this.morphTargetInfluences[animation.lastFrame] = (1 - mix) * weight;\n } else {\n this.morphTargetInfluences[animation.currentFrame] = weight;\n }\n }\n }\n}\nexport {\n MorphBlendMesh\n};\n//# sourceMappingURL=MorphBlendMesh.js.map\n","import { Object3D, Box3, MathUtils, MeshLambertMaterial, TextureLoader, UVMapping } from \"three\";\nimport { MD2Loader } from \"../loaders/MD2Loader.js\";\nimport { MorphBlendMesh } from \"./MorphBlendMesh.js\";\nclass MD2CharacterComplex {\n constructor() {\n this.scale = 1;\n this.animationFPS = 6;\n this.transitionFrames = 15;\n this.maxSpeed = 275;\n this.maxReverseSpeed = -275;\n this.frontAcceleration = 600;\n this.backAcceleration = 600;\n this.frontDecceleration = 600;\n this.angularSpeed = 2.5;\n this.root = new Object3D();\n this.meshBody = null;\n this.meshWeapon = null;\n this.controls = null;\n this.skinsBody = [];\n this.skinsWeapon = [];\n this.weapons = [];\n this.currentSkin = void 0;\n this.onLoadComplete = function() {\n };\n this.meshes = [];\n this.animations = {};\n this.loadCounter = 0;\n this.speed = 0;\n this.bodyOrientation = 0;\n this.walkSpeed = this.maxSpeed;\n this.crouchSpeed = this.maxSpeed * 0.5;\n this.activeAnimation = null;\n this.oldAnimation = null;\n }\n enableShadows(enable) {\n for (let i = 0; i < this.meshes.length; i++) {\n this.meshes[i].castShadow = enable;\n this.meshes[i].receiveShadow = enable;\n }\n }\n setVisible(enable) {\n for (let i = 0; i < this.meshes.length; i++) {\n this.meshes[i].visible = enable;\n this.meshes[i].visible = enable;\n }\n }\n shareParts(original) {\n this.animations = original.animations;\n this.walkSpeed = original.walkSpeed;\n this.crouchSpeed = original.crouchSpeed;\n this.skinsBody = original.skinsBody;\n this.skinsWeapon = original.skinsWeapon;\n const mesh = this._createPart(original.meshBody.geometry, this.skinsBody[0]);\n mesh.scale.set(this.scale, this.scale, this.scale);\n this.root.position.y = original.root.position.y;\n this.root.add(mesh);\n this.meshBody = mesh;\n this.meshes.push(mesh);\n for (let i = 0; i < original.weapons.length; i++) {\n const meshWeapon = this._createPart(original.weapons[i].geometry, this.skinsWeapon[i]);\n meshWeapon.scale.set(this.scale, this.scale, this.scale);\n meshWeapon.visible = false;\n meshWeapon.name = original.weapons[i].name;\n this.root.add(meshWeapon);\n this.weapons[i] = meshWeapon;\n this.meshWeapon = meshWeapon;\n this.meshes.push(meshWeapon);\n }\n }\n loadParts(config) {\n const scope = this;\n function loadTextures(baseUrl, textureUrls) {\n const textureLoader = new TextureLoader();\n const textures = [];\n for (let i = 0; i < textureUrls.length; i++) {\n textures[i] = textureLoader.load(baseUrl + textureUrls[i], checkLoadingComplete);\n textures[i].mapping = UVMapping;\n textures[i].name = textureUrls[i];\n if (\"colorSpace\" in textures[i])\n textures[i].colorSpace = \"srgb\";\n else\n textures[i].encoding = 3001;\n }\n return textures;\n }\n function checkLoadingComplete() {\n scope.loadCounter -= 1;\n if (scope.loadCounter === 0)\n scope.onLoadComplete();\n }\n this.animations = config.animations;\n this.walkSpeed = config.walkSpeed;\n this.crouchSpeed = config.crouchSpeed;\n this.loadCounter = config.weapons.length * 2 + config.skins.length + 1;\n const weaponsTextures = [];\n for (let i = 0; i < config.weapons.length; i++)\n weaponsTextures[i] = config.weapons[i][1];\n this.skinsBody = loadTextures(config.baseUrl + \"skins/\", config.skins);\n this.skinsWeapon = loadTextures(config.baseUrl + \"skins/\", weaponsTextures);\n const loader = new MD2Loader();\n loader.load(config.baseUrl + config.body, function(geo) {\n const boundingBox = new Box3();\n boundingBox.setFromBufferAttribute(geo.attributes.position);\n scope.root.position.y = -scope.scale * boundingBox.min.y;\n const mesh = scope._createPart(geo, scope.skinsBody[0]);\n mesh.scale.set(scope.scale, scope.scale, scope.scale);\n scope.root.add(mesh);\n scope.meshBody = mesh;\n scope.meshes.push(mesh);\n checkLoadingComplete();\n });\n const generateCallback = function(index, name) {\n return function(geo) {\n const mesh = scope._createPart(geo, scope.skinsWeapon[index]);\n mesh.scale.set(scope.scale, scope.scale, scope.scale);\n mesh.visible = false;\n mesh.name = name;\n scope.root.add(mesh);\n scope.weapons[index] = mesh;\n scope.meshWeapon = mesh;\n scope.meshes.push(mesh);\n checkLoadingComplete();\n };\n };\n for (let i = 0; i < config.weapons.length; i++) {\n loader.load(config.baseUrl + config.weapons[i][0], generateCallback(i, config.weapons[i][0]));\n }\n }\n setPlaybackRate(rate) {\n if (this.meshBody)\n this.meshBody.duration = this.meshBody.baseDuration / rate;\n if (this.meshWeapon)\n this.meshWeapon.duration = this.meshWeapon.baseDuration / rate;\n }\n setWireframe(wireframeEnabled) {\n if (wireframeEnabled) {\n if (this.meshBody)\n this.meshBody.material = this.meshBody.materialWireframe;\n if (this.meshWeapon)\n this.meshWeapon.material = this.meshWeapon.materialWireframe;\n } else {\n if (this.meshBody)\n this.meshBody.material = this.meshBody.materialTexture;\n if (this.meshWeapon)\n this.meshWeapon.material = this.meshWeapon.materialTexture;\n }\n }\n setSkin(index) {\n if (this.meshBody && this.meshBody.material.wireframe === false) {\n this.meshBody.material.map = this.skinsBody[index];\n this.currentSkin = index;\n }\n }\n setWeapon(index) {\n for (let i = 0; i < this.weapons.length; i++)\n this.weapons[i].visible = false;\n const activeWeapon = this.weapons[index];\n if (activeWeapon) {\n activeWeapon.visible = true;\n this.meshWeapon = activeWeapon;\n if (this.activeAnimation) {\n activeWeapon.playAnimation(this.activeAnimation);\n this.meshWeapon.setAnimationTime(this.activeAnimation, this.meshBody.getAnimationTime(this.activeAnimation));\n }\n }\n }\n setAnimation(animationName) {\n if (animationName === this.activeAnimation || !animationName)\n return;\n if (this.meshBody) {\n this.meshBody.setAnimationWeight(animationName, 0);\n this.meshBody.playAnimation(animationName);\n this.oldAnimation = this.activeAnimation;\n this.activeAnimation = animationName;\n this.blendCounter = this.transitionFrames;\n }\n if (this.meshWeapon) {\n this.meshWeapon.setAnimationWeight(animationName, 0);\n this.meshWeapon.playAnimation(animationName);\n }\n }\n update(delta) {\n if (this.controls)\n this.updateMovementModel(delta);\n if (this.animations) {\n this.updateBehaviors();\n this.updateAnimations(delta);\n }\n }\n updateAnimations(delta) {\n let mix = 1;\n if (this.blendCounter > 0) {\n mix = (this.transitionFrames - this.blendCounter) / this.transitionFrames;\n this.blendCounter -= 1;\n }\n if (this.meshBody) {\n this.meshBody.update(delta);\n this.meshBody.setAnimationWeight(this.activeAnimation, mix);\n this.meshBody.setAnimationWeight(this.oldAnimation, 1 - mix);\n }\n if (this.meshWeapon) {\n this.meshWeapon.update(delta);\n this.meshWeapon.setAnimationWeight(this.activeAnimation, mix);\n this.meshWeapon.setAnimationWeight(this.oldAnimation, 1 - mix);\n }\n }\n updateBehaviors() {\n const controls = this.controls;\n const animations = this.animations;\n let moveAnimation, idleAnimation;\n if (controls.crouch) {\n moveAnimation = animations[\"crouchMove\"];\n idleAnimation = animations[\"crouchIdle\"];\n } else {\n moveAnimation = animations[\"move\"];\n idleAnimation = animations[\"idle\"];\n }\n if (controls.jump) {\n moveAnimation = animations[\"jump\"];\n idleAnimation = animations[\"jump\"];\n }\n if (controls.attack) {\n if (controls.crouch) {\n moveAnimation = animations[\"crouchAttack\"];\n idleAnimation = animations[\"crouchAttack\"];\n } else {\n moveAnimation = animations[\"attack\"];\n idleAnimation = animations[\"attack\"];\n }\n }\n if (controls.moveForward || controls.moveBackward || controls.moveLeft || controls.moveRight) {\n if (this.activeAnimation !== moveAnimation) {\n this.setAnimation(moveAnimation);\n }\n }\n if (Math.abs(this.speed) < 0.2 * this.maxSpeed && !(controls.moveLeft || controls.moveRight || controls.moveForward || controls.moveBackward)) {\n if (this.activeAnimation !== idleAnimation) {\n this.setAnimation(idleAnimation);\n }\n }\n if (controls.moveForward) {\n if (this.meshBody) {\n this.meshBody.setAnimationDirectionForward(this.activeAnimation);\n this.meshBody.setAnimationDirectionForward(this.oldAnimation);\n }\n if (this.meshWeapon) {\n this.meshWeapon.setAnimationDirectionForward(this.activeAnimation);\n this.meshWeapon.setAnimationDirectionForward(this.oldAnimation);\n }\n }\n if (controls.moveBackward) {\n if (this.meshBody) {\n this.meshBody.setAnimationDirectionBackward(this.activeAnimation);\n this.meshBody.setAnimationDirectionBackward(this.oldAnimation);\n }\n if (this.meshWeapon) {\n this.meshWeapon.setAnimationDirectionBackward(this.activeAnimation);\n this.meshWeapon.setAnimationDirectionBackward(this.oldAnimation);\n }\n }\n }\n updateMovementModel(delta) {\n function exponentialEaseOut(k) {\n return k === 1 ? 1 : -Math.pow(2, -10 * k) + 1;\n }\n const controls = this.controls;\n if (controls.crouch)\n this.maxSpeed = this.crouchSpeed;\n else\n this.maxSpeed = this.walkSpeed;\n this.maxReverseSpeed = -this.maxSpeed;\n if (controls.moveForward)\n this.speed = MathUtils.clamp(this.speed + delta * this.frontAcceleration, this.maxReverseSpeed, this.maxSpeed);\n if (controls.moveBackward)\n this.speed = MathUtils.clamp(this.speed - delta * this.backAcceleration, this.maxReverseSpeed, this.maxSpeed);\n const dir = 1;\n if (controls.moveLeft) {\n this.bodyOrientation += delta * this.angularSpeed;\n this.speed = MathUtils.clamp(\n this.speed + dir * delta * this.frontAcceleration,\n this.maxReverseSpeed,\n this.maxSpeed\n );\n }\n if (controls.moveRight) {\n this.bodyOrientation -= delta * this.angularSpeed;\n this.speed = MathUtils.clamp(\n this.speed + dir * delta * this.frontAcceleration,\n this.maxReverseSpeed,\n this.maxSpeed\n );\n }\n if (!(controls.moveForward || controls.moveBackward)) {\n if (this.speed > 0) {\n const k = exponentialEaseOut(this.speed / this.maxSpeed);\n this.speed = MathUtils.clamp(this.speed - k * delta * this.frontDecceleration, 0, this.maxSpeed);\n } else {\n const k = exponentialEaseOut(this.speed / this.maxReverseSpeed);\n this.speed = MathUtils.clamp(this.speed + k * delta * this.backAcceleration, this.maxReverseSpeed, 0);\n }\n }\n const forwardDelta = this.speed * delta;\n this.root.position.x += Math.sin(this.bodyOrientation) * forwardDelta;\n this.root.position.z += Math.cos(this.bodyOrientation) * forwardDelta;\n this.root.rotation.y = this.bodyOrientation;\n }\n // internal\n _createPart(geometry, skinMap) {\n const materialWireframe = new MeshLambertMaterial({\n color: 16755200,\n wireframe: true,\n morphTargets: true,\n morphNormals: true\n });\n const materialTexture = new MeshLambertMaterial({\n color: 16777215,\n wireframe: false,\n map: skinMap,\n morphTargets: true,\n morphNormals: true\n });\n const mesh = new MorphBlendMesh(geometry, materialTexture);\n mesh.rotation.y = -Math.PI / 2;\n mesh.materialTexture = materialTexture;\n mesh.materialWireframe = materialWireframe;\n mesh.autoCreateAnimations(this.animationFPS);\n return mesh;\n }\n}\nexport {\n MD2CharacterComplex\n};\n//# sourceMappingURL=MD2CharacterComplex.js.map\n","import { Vector3, Line3, Plane, Triangle } from \"three\";\nconst Visible = 0;\nconst Deleted = 1;\nconst _v1 = /* @__PURE__ */ new Vector3();\nconst _line3 = /* @__PURE__ */ new Line3();\nconst _plane = /* @__PURE__ */ new Plane();\nconst _closestPoint = /* @__PURE__ */ new Vector3();\nconst _triangle = /* @__PURE__ */ new Triangle();\nclass ConvexHull {\n constructor() {\n this.tolerance = -1;\n this.faces = [];\n this.newFaces = [];\n this.assigned = new VertexList();\n this.unassigned = new VertexList();\n this.vertices = [];\n }\n setFromPoints(points) {\n if (points.length >= 4) {\n this.makeEmpty();\n for (let i = 0, l = points.length; i < l; i++) {\n this.vertices.push(new VertexNode(points[i]));\n }\n this.compute();\n }\n return this;\n }\n setFromObject(object) {\n const points = [];\n object.updateMatrixWorld(true);\n object.traverse(function(node) {\n const geometry = node.geometry;\n if (geometry !== void 0) {\n const attribute = geometry.attributes.position;\n if (attribute !== void 0) {\n for (let i = 0, l = attribute.count; i < l; i++) {\n const point = new Vector3();\n point.fromBufferAttribute(attribute, i).applyMatrix4(node.matrixWorld);\n points.push(point);\n }\n }\n }\n });\n return this.setFromPoints(points);\n }\n containsPoint(point) {\n const faces = this.faces;\n for (let i = 0, l = faces.length; i < l; i++) {\n const face = faces[i];\n if (face.distanceToPoint(point) > this.tolerance)\n return false;\n }\n return true;\n }\n intersectRay(ray, target) {\n const faces = this.faces;\n let tNear = -Infinity;\n let tFar = Infinity;\n for (let i = 0, l = faces.length; i < l; i++) {\n const face = faces[i];\n const vN = face.distanceToPoint(ray.origin);\n const vD = face.normal.dot(ray.direction);\n if (vN > 0 && vD >= 0)\n return null;\n const t = vD !== 0 ? -vN / vD : 0;\n if (t <= 0)\n continue;\n if (vD > 0) {\n tFar = Math.min(t, tFar);\n } else {\n tNear = Math.max(t, tNear);\n }\n if (tNear > tFar) {\n return null;\n }\n }\n if (tNear !== -Infinity) {\n ray.at(tNear, target);\n } else {\n ray.at(tFar, target);\n }\n return target;\n }\n intersectsRay(ray) {\n return this.intersectRay(ray, _v1) !== null;\n }\n makeEmpty() {\n this.faces = [];\n this.vertices = [];\n return this;\n }\n // Adds a vertex to the 'assigned' list of vertices and assigns it to the given face\n addVertexToFace(vertex, face) {\n vertex.face = face;\n if (face.outside === null) {\n this.assigned.append(vertex);\n } else {\n this.assigned.insertBefore(face.outside, vertex);\n }\n face.outside = vertex;\n return this;\n }\n // Removes a vertex from the 'assigned' list of vertices and from the given face\n removeVertexFromFace(vertex, face) {\n if (vertex === face.outside) {\n if (vertex.next !== null && vertex.next.face === face) {\n face.outside = vertex.next;\n } else {\n face.outside = null;\n }\n }\n this.assigned.remove(vertex);\n return this;\n }\n // Removes all the visible vertices that a given face is able to see which are stored in the 'assigned' vertex list\n removeAllVerticesFromFace(face) {\n if (face.outside !== null) {\n const start = face.outside;\n let end = face.outside;\n while (end.next !== null && end.next.face === face) {\n end = end.next;\n }\n this.assigned.removeSubList(start, end);\n start.prev = end.next = null;\n face.outside = null;\n return start;\n }\n }\n // Removes all the visible vertices that 'face' is able to see\n deleteFaceVertices(face, absorbingFace) {\n const faceVertices = this.removeAllVerticesFromFace(face);\n if (faceVertices !== void 0) {\n if (absorbingFace === void 0) {\n this.unassigned.appendChain(faceVertices);\n } else {\n let vertex = faceVertices;\n do {\n const nextVertex = vertex.next;\n const distance = absorbingFace.distanceToPoint(vertex.point);\n if (distance > this.tolerance) {\n this.addVertexToFace(vertex, absorbingFace);\n } else {\n this.unassigned.append(vertex);\n }\n vertex = nextVertex;\n } while (vertex !== null);\n }\n }\n return this;\n }\n // Reassigns as many vertices as possible from the unassigned list to the new faces\n resolveUnassignedPoints(newFaces) {\n if (this.unassigned.isEmpty() === false) {\n let vertex = this.unassigned.first();\n do {\n const nextVertex = vertex.next;\n let maxDistance = this.tolerance;\n let maxFace = null;\n for (let i = 0; i < newFaces.length; i++) {\n const face = newFaces[i];\n if (face.mark === Visible) {\n const distance = face.distanceToPoint(vertex.point);\n if (distance > maxDistance) {\n maxDistance = distance;\n maxFace = face;\n }\n if (maxDistance > 1e3 * this.tolerance)\n break;\n }\n }\n if (maxFace !== null) {\n this.addVertexToFace(vertex, maxFace);\n }\n vertex = nextVertex;\n } while (vertex !== null);\n }\n return this;\n }\n // Computes the extremes of a simplex which will be the initial hull\n computeExtremes() {\n const min = new Vector3();\n const max = new Vector3();\n const minVertices = [];\n const maxVertices = [];\n for (let i = 0; i < 3; i++) {\n minVertices[i] = maxVertices[i] = this.vertices[0];\n }\n min.copy(this.vertices[0].point);\n max.copy(this.vertices[0].point);\n for (let i = 0, l = this.vertices.length; i < l; i++) {\n const vertex = this.vertices[i];\n const point = vertex.point;\n for (let j = 0; j < 3; j++) {\n if (point.getComponent(j) < min.getComponent(j)) {\n min.setComponent(j, point.getComponent(j));\n minVertices[j] = vertex;\n }\n }\n for (let j = 0; j < 3; j++) {\n if (point.getComponent(j) > max.getComponent(j)) {\n max.setComponent(j, point.getComponent(j));\n maxVertices[j] = vertex;\n }\n }\n }\n this.tolerance = 3 * Number.EPSILON * (Math.max(Math.abs(min.x), Math.abs(max.x)) + Math.max(Math.abs(min.y), Math.abs(max.y)) + Math.max(Math.abs(min.z), Math.abs(max.z)));\n return { min: minVertices, max: maxVertices };\n }\n // Computes the initial simplex assigning to its faces all the points\n // that are candidates to form part of the hull\n computeInitialHull() {\n const vertices = this.vertices;\n const extremes = this.computeExtremes();\n const min = extremes.min;\n const max = extremes.max;\n let maxDistance = 0;\n let index = 0;\n for (let i = 0; i < 3; i++) {\n const distance = max[i].point.getComponent(i) - min[i].point.getComponent(i);\n if (distance > maxDistance) {\n maxDistance = distance;\n index = i;\n }\n }\n const v0 = min[index];\n const v1 = max[index];\n let v2;\n let v3;\n maxDistance = 0;\n _line3.set(v0.point, v1.point);\n for (let i = 0, l = this.vertices.length; i < l; i++) {\n const vertex = vertices[i];\n if (vertex !== v0 && vertex !== v1) {\n _line3.closestPointToPoint(vertex.point, true, _closestPoint);\n const distance = _closestPoint.distanceToSquared(vertex.point);\n if (distance > maxDistance) {\n maxDistance = distance;\n v2 = vertex;\n }\n }\n }\n maxDistance = -1;\n _plane.setFromCoplanarPoints(v0.point, v1.point, v2.point);\n for (let i = 0, l = this.vertices.length; i < l; i++) {\n const vertex = vertices[i];\n if (vertex !== v0 && vertex !== v1 && vertex !== v2) {\n const distance = Math.abs(_plane.distanceToPoint(vertex.point));\n if (distance > maxDistance) {\n maxDistance = distance;\n v3 = vertex;\n }\n }\n }\n const faces = [];\n if (_plane.distanceToPoint(v3.point) < 0) {\n faces.push(Face.create(v0, v1, v2), Face.create(v3, v1, v0), Face.create(v3, v2, v1), Face.create(v3, v0, v2));\n for (let i = 0; i < 3; i++) {\n const j = (i + 1) % 3;\n faces[i + 1].getEdge(2).setTwin(faces[0].getEdge(j));\n faces[i + 1].getEdge(1).setTwin(faces[j + 1].getEdge(0));\n }\n } else {\n faces.push(Face.create(v0, v2, v1), Face.create(v3, v0, v1), Face.create(v3, v1, v2), Face.create(v3, v2, v0));\n for (let i = 0; i < 3; i++) {\n const j = (i + 1) % 3;\n faces[i + 1].getEdge(2).setTwin(faces[0].getEdge((3 - i) % 3));\n faces[i + 1].getEdge(0).setTwin(faces[j + 1].getEdge(1));\n }\n }\n for (let i = 0; i < 4; i++) {\n this.faces.push(faces[i]);\n }\n for (let i = 0, l = vertices.length; i < l; i++) {\n const vertex = vertices[i];\n if (vertex !== v0 && vertex !== v1 && vertex !== v2 && vertex !== v3) {\n maxDistance = this.tolerance;\n let maxFace = null;\n for (let j = 0; j < 4; j++) {\n const distance = this.faces[j].distanceToPoint(vertex.point);\n if (distance > maxDistance) {\n maxDistance = distance;\n maxFace = this.faces[j];\n }\n }\n if (maxFace !== null) {\n this.addVertexToFace(vertex, maxFace);\n }\n }\n }\n return this;\n }\n // Removes inactive faces\n reindexFaces() {\n const activeFaces = [];\n for (let i = 0; i < this.faces.length; i++) {\n const face = this.faces[i];\n if (face.mark === Visible) {\n activeFaces.push(face);\n }\n }\n this.faces = activeFaces;\n return this;\n }\n // Finds the next vertex to create faces with the current hull\n nextVertexToAdd() {\n if (this.assigned.isEmpty() === false) {\n let eyeVertex, maxDistance = 0;\n const eyeFace = this.assigned.first().face;\n let vertex = eyeFace.outside;\n do {\n const distance = eyeFace.distanceToPoint(vertex.point);\n if (distance > maxDistance) {\n maxDistance = distance;\n eyeVertex = vertex;\n }\n vertex = vertex.next;\n } while (vertex !== null && vertex.face === eyeFace);\n return eyeVertex;\n }\n }\n // Computes a chain of half edges in CCW order called the 'horizon'.\n // For an edge to be part of the horizon it must join a face that can see\n // 'eyePoint' and a face that cannot see 'eyePoint'.\n computeHorizon(eyePoint, crossEdge, face, horizon) {\n this.deleteFaceVertices(face);\n face.mark = Deleted;\n let edge;\n if (crossEdge === null) {\n edge = crossEdge = face.getEdge(0);\n } else {\n edge = crossEdge.next;\n }\n do {\n const twinEdge = edge.twin;\n const oppositeFace = twinEdge.face;\n if (oppositeFace.mark === Visible) {\n if (oppositeFace.distanceToPoint(eyePoint) > this.tolerance) {\n this.computeHorizon(eyePoint, twinEdge, oppositeFace, horizon);\n } else {\n horizon.push(edge);\n }\n }\n edge = edge.next;\n } while (edge !== crossEdge);\n return this;\n }\n // Creates a face with the vertices 'eyeVertex.point', 'horizonEdge.tail' and 'horizonEdge.head' in CCW order\n addAdjoiningFace(eyeVertex, horizonEdge) {\n const face = Face.create(eyeVertex, horizonEdge.tail(), horizonEdge.head());\n this.faces.push(face);\n face.getEdge(-1).setTwin(horizonEdge.twin);\n return face.getEdge(0);\n }\n // Adds 'horizon.length' faces to the hull, each face will be linked with the\n // horizon opposite face and the face on the left/right\n addNewFaces(eyeVertex, horizon) {\n this.newFaces = [];\n let firstSideEdge = null;\n let previousSideEdge = null;\n for (let i = 0; i < horizon.length; i++) {\n const horizonEdge = horizon[i];\n const sideEdge = this.addAdjoiningFace(eyeVertex, horizonEdge);\n if (firstSideEdge === null) {\n firstSideEdge = sideEdge;\n } else {\n sideEdge.next.setTwin(previousSideEdge);\n }\n this.newFaces.push(sideEdge.face);\n previousSideEdge = sideEdge;\n }\n firstSideEdge.next.setTwin(previousSideEdge);\n return this;\n }\n // Adds a vertex to the hull\n addVertexToHull(eyeVertex) {\n const horizon = [];\n this.unassigned.clear();\n this.removeVertexFromFace(eyeVertex, eyeVertex.face);\n this.computeHorizon(eyeVertex.point, null, eyeVertex.face, horizon);\n this.addNewFaces(eyeVertex, horizon);\n this.resolveUnassignedPoints(this.newFaces);\n return this;\n }\n cleanup() {\n this.assigned.clear();\n this.unassigned.clear();\n this.newFaces = [];\n return this;\n }\n compute() {\n let vertex;\n this.computeInitialHull();\n while ((vertex = this.nextVertexToAdd()) !== void 0) {\n this.addVertexToHull(vertex);\n }\n this.reindexFaces();\n this.cleanup();\n return this;\n }\n}\nconst Face = /* @__PURE__ */ (() => {\n class Face2 {\n constructor() {\n this.normal = new Vector3();\n this.midpoint = new Vector3();\n this.area = 0;\n this.constant = 0;\n this.outside = null;\n this.mark = Visible;\n this.edge = null;\n }\n static create(a, b, c) {\n const face = new Face2();\n const e0 = new HalfEdge(a, face);\n const e1 = new HalfEdge(b, face);\n const e2 = new HalfEdge(c, face);\n e0.next = e2.prev = e1;\n e1.next = e0.prev = e2;\n e2.next = e1.prev = e0;\n face.edge = e0;\n return face.compute();\n }\n getEdge(i) {\n let edge = this.edge;\n while (i > 0) {\n edge = edge.next;\n i--;\n }\n while (i < 0) {\n edge = edge.prev;\n i++;\n }\n return edge;\n }\n compute() {\n const a = this.edge.tail();\n const b = this.edge.head();\n const c = this.edge.next.head();\n _triangle.set(a.point, b.point, c.point);\n _triangle.getNormal(this.normal);\n _triangle.getMidpoint(this.midpoint);\n this.area = _triangle.getArea();\n this.constant = this.normal.dot(this.midpoint);\n return this;\n }\n distanceToPoint(point) {\n return this.normal.dot(point) - this.constant;\n }\n }\n return Face2;\n})();\nclass HalfEdge {\n constructor(vertex, face) {\n this.vertex = vertex;\n this.prev = null;\n this.next = null;\n this.twin = null;\n this.face = face;\n }\n head() {\n return this.vertex;\n }\n tail() {\n return this.prev ? this.prev.vertex : null;\n }\n length() {\n const head = this.head();\n const tail = this.tail();\n if (tail !== null) {\n return tail.point.distanceTo(head.point);\n }\n return -1;\n }\n lengthSquared() {\n const head = this.head();\n const tail = this.tail();\n if (tail !== null) {\n return tail.point.distanceToSquared(head.point);\n }\n return -1;\n }\n setTwin(edge) {\n this.twin = edge;\n edge.twin = this;\n return this;\n }\n}\nclass VertexNode {\n constructor(point) {\n this.point = point;\n this.prev = null;\n this.next = null;\n this.face = null;\n }\n}\nclass VertexList {\n constructor() {\n this.head = null;\n this.tail = null;\n }\n first() {\n return this.head;\n }\n last() {\n return this.tail;\n }\n clear() {\n this.head = this.tail = null;\n return this;\n }\n // Inserts a vertex before the target vertex\n insertBefore(target, vertex) {\n vertex.prev = target.prev;\n vertex.next = target;\n if (vertex.prev === null) {\n this.head = vertex;\n } else {\n vertex.prev.next = vertex;\n }\n target.prev = vertex;\n return this;\n }\n // Inserts a vertex after the target vertex\n insertAfter(target, vertex) {\n vertex.prev = target;\n vertex.next = target.next;\n if (vertex.next === null) {\n this.tail = vertex;\n } else {\n vertex.next.prev = vertex;\n }\n target.next = vertex;\n return this;\n }\n // Appends a vertex to the end of the linked list\n append(vertex) {\n if (this.head === null) {\n this.head = vertex;\n } else {\n this.tail.next = vertex;\n }\n vertex.prev = this.tail;\n vertex.next = null;\n this.tail = vertex;\n return this;\n }\n // Appends a chain of vertices where 'vertex' is the head.\n appendChain(vertex) {\n if (this.head === null) {\n this.head = vertex;\n } else {\n this.tail.next = vertex;\n }\n vertex.prev = this.tail;\n while (vertex.next !== null) {\n vertex = vertex.next;\n }\n this.tail = vertex;\n return this;\n }\n // Removes a vertex from the linked list\n remove(vertex) {\n if (vertex.prev === null) {\n this.head = vertex.next;\n } else {\n vertex.prev.next = vertex.next;\n }\n if (vertex.next === null) {\n this.tail = vertex.prev;\n } else {\n vertex.next.prev = vertex.prev;\n }\n return this;\n }\n // Removes a list of vertices whose 'head' is 'a' and whose 'tail' is b\n removeSubList(a, b) {\n if (a.prev === null) {\n this.head = b.next;\n } else {\n a.prev.next = b.next;\n }\n if (b.next === null) {\n this.tail = a.prev;\n } else {\n b.next.prev = a.prev;\n }\n return this;\n }\n isEmpty() {\n return this.head === null;\n }\n}\nexport {\n ConvexHull,\n Face,\n HalfEdge,\n VertexList,\n VertexNode\n};\n//# sourceMappingURL=ConvexHull.js.map\n","import { BufferGeometry, Float32BufferAttribute } from \"three\";\nimport { ConvexHull } from \"../math/ConvexHull.js\";\nclass ConvexGeometry extends BufferGeometry {\n constructor(points = []) {\n super();\n const vertices = [];\n const normals = [];\n const convexHull = new ConvexHull().setFromPoints(points);\n const faces = convexHull.faces;\n for (let i = 0; i < faces.length; i++) {\n const face = faces[i];\n let edge = face.edge;\n do {\n const point = edge.head().point;\n vertices.push(point.x, point.y, point.z);\n normals.push(face.normal.x, face.normal.y, face.normal.z);\n edge = edge.next;\n } while (edge !== face.edge);\n }\n this.setAttribute(\"position\", new Float32BufferAttribute(vertices, 3));\n this.setAttribute(\"normal\", new Float32BufferAttribute(normals, 3));\n }\n}\nexport {\n ConvexGeometry\n};\n//# sourceMappingURL=ConvexGeometry.js.map\n","import { Line3, Plane, Vector3, Mesh } from \"three\";\nimport { ConvexGeometry } from \"../geometries/ConvexGeometry.js\";\nconst _v1 = /* @__PURE__ */ new Vector3();\nconst ConvexObjectBreaker = /* @__PURE__ */ (() => {\n class ConvexObjectBreaker2 {\n constructor(minSizeForBreak = 1.4, smallDelta = 1e-4) {\n this.minSizeForBreak = minSizeForBreak;\n this.smallDelta = smallDelta;\n this.tempLine1 = new Line3();\n this.tempPlane1 = new Plane();\n this.tempPlane2 = new Plane();\n this.tempPlane_Cut = new Plane();\n this.tempCM1 = new Vector3();\n this.tempCM2 = new Vector3();\n this.tempVector3 = new Vector3();\n this.tempVector3_2 = new Vector3();\n this.tempVector3_3 = new Vector3();\n this.tempVector3_P0 = new Vector3();\n this.tempVector3_P1 = new Vector3();\n this.tempVector3_P2 = new Vector3();\n this.tempVector3_N0 = new Vector3();\n this.tempVector3_N1 = new Vector3();\n this.tempVector3_AB = new Vector3();\n this.tempVector3_CB = new Vector3();\n this.tempResultObjects = { object1: null, object2: null };\n this.segments = [];\n const n = 30 * 30;\n for (let i = 0; i < n; i++)\n this.segments[i] = false;\n }\n prepareBreakableObject(object, mass, velocity, angularVelocity, breakable) {\n const userData = object.userData;\n userData.mass = mass;\n userData.velocity = velocity.clone();\n userData.angularVelocity = angularVelocity.clone();\n userData.breakable = breakable;\n }\n /*\n * @param {int} maxRadialIterations Iterations for radial cuts.\n * @param {int} maxRandomIterations Max random iterations for not-radial cuts\n *\n * Returns the array of pieces\n */\n subdivideByImpact(object, pointOfImpact, normal, maxRadialIterations, maxRandomIterations) {\n const debris = [];\n const tempPlane1 = this.tempPlane1;\n const tempPlane2 = this.tempPlane2;\n this.tempVector3.addVectors(pointOfImpact, normal);\n tempPlane1.setFromCoplanarPoints(pointOfImpact, object.position, this.tempVector3);\n const maxTotalIterations = maxRandomIterations + maxRadialIterations;\n const scope = this;\n function subdivideRadial(subObject, startAngle, endAngle, numIterations) {\n if (Math.random() < numIterations * 0.05 || numIterations > maxTotalIterations) {\n debris.push(subObject);\n return;\n }\n let angle = Math.PI;\n if (numIterations === 0) {\n tempPlane2.normal.copy(tempPlane1.normal);\n tempPlane2.constant = tempPlane1.constant;\n } else {\n if (numIterations <= maxRadialIterations) {\n angle = (endAngle - startAngle) * (0.2 + 0.6 * Math.random()) + startAngle;\n scope.tempVector3_2.copy(object.position).sub(pointOfImpact).applyAxisAngle(normal, angle).add(pointOfImpact);\n tempPlane2.setFromCoplanarPoints(pointOfImpact, scope.tempVector3, scope.tempVector3_2);\n } else {\n angle = (0.5 * (numIterations & 1) + 0.2 * (2 - Math.random())) * Math.PI;\n scope.tempVector3_2.copy(pointOfImpact).sub(subObject.position).applyAxisAngle(normal, angle).add(subObject.position);\n scope.tempVector3_3.copy(normal).add(subObject.position);\n tempPlane2.setFromCoplanarPoints(subObject.position, scope.tempVector3_3, scope.tempVector3_2);\n }\n }\n scope.cutByPlane(subObject, tempPlane2, scope.tempResultObjects);\n const obj1 = scope.tempResultObjects.object1;\n const obj2 = scope.tempResultObjects.object2;\n if (obj1) {\n subdivideRadial(obj1, startAngle, angle, numIterations + 1);\n }\n if (obj2) {\n subdivideRadial(obj2, angle, endAngle, numIterations + 1);\n }\n }\n subdivideRadial(object, 0, 2 * Math.PI, 0);\n return debris;\n }\n cutByPlane(object, plane, output) {\n const geometry = object.geometry;\n const coords = geometry.attributes.position.array;\n const normals = geometry.attributes.normal.array;\n const numPoints = coords.length / 3;\n let numFaces = numPoints / 3;\n let indices = geometry.getIndex();\n if (indices) {\n indices = indices.array;\n numFaces = indices.length / 3;\n }\n function getVertexIndex(faceIdx, vert) {\n const idx = faceIdx * 3 + vert;\n return indices ? indices[idx] : idx;\n }\n const points1 = [];\n const points2 = [];\n const delta = this.smallDelta;\n const numPointPairs = numPoints * numPoints;\n for (let i = 0; i < numPointPairs; i++)\n this.segments[i] = false;\n const p0 = this.tempVector3_P0;\n const p1 = this.tempVector3_P1;\n const n0 = this.tempVector3_N0;\n const n1 = this.tempVector3_N1;\n for (let i = 0; i < numFaces - 1; i++) {\n const a1 = getVertexIndex(i, 0);\n const b1 = getVertexIndex(i, 1);\n const c1 = getVertexIndex(i, 2);\n n0.set(normals[a1], normals[a1] + 1, normals[a1] + 2);\n for (let j = i + 1; j < numFaces; j++) {\n const a2 = getVertexIndex(j, 0);\n const b2 = getVertexIndex(j, 1);\n const c2 = getVertexIndex(j, 2);\n n1.set(normals[a2], normals[a2] + 1, normals[a2] + 2);\n const coplanar = 1 - n0.dot(n1) < delta;\n if (coplanar) {\n if (a1 === a2 || a1 === b2 || a1 === c2) {\n if (b1 === a2 || b1 === b2 || b1 === c2) {\n this.segments[a1 * numPoints + b1] = true;\n this.segments[b1 * numPoints + a1] = true;\n } else {\n this.segments[c1 * numPoints + a1] = true;\n this.segments[a1 * numPoints + c1] = true;\n }\n } else if (b1 === a2 || b1 === b2 || b1 === c2) {\n this.segments[c1 * numPoints + b1] = true;\n this.segments[b1 * numPoints + c1] = true;\n }\n }\n }\n }\n const localPlane = this.tempPlane_Cut;\n object.updateMatrix();\n ConvexObjectBreaker2.transformPlaneToLocalSpace(plane, object.matrix, localPlane);\n for (let i = 0; i < numFaces; i++) {\n const va = getVertexIndex(i, 0);\n const vb = getVertexIndex(i, 1);\n const vc = getVertexIndex(i, 2);\n for (let segment = 0; segment < 3; segment++) {\n const i0 = segment === 0 ? va : segment === 1 ? vb : vc;\n const i1 = segment === 0 ? vb : segment === 1 ? vc : va;\n const segmentState = this.segments[i0 * numPoints + i1];\n if (segmentState)\n continue;\n this.segments[i0 * numPoints + i1] = true;\n this.segments[i1 * numPoints + i0] = true;\n p0.set(coords[3 * i0], coords[3 * i0 + 1], coords[3 * i0 + 2]);\n p1.set(coords[3 * i1], coords[3 * i1 + 1], coords[3 * i1 + 2]);\n let mark0 = 0;\n let d = localPlane.distanceToPoint(p0);\n if (d > delta) {\n mark0 = 2;\n points2.push(p0.clone());\n } else if (d < -delta) {\n mark0 = 1;\n points1.push(p0.clone());\n } else {\n mark0 = 3;\n points1.push(p0.clone());\n points2.push(p0.clone());\n }\n let mark1 = 0;\n d = localPlane.distanceToPoint(p1);\n if (d > delta) {\n mark1 = 2;\n points2.push(p1.clone());\n } else if (d < -delta) {\n mark1 = 1;\n points1.push(p1.clone());\n } else {\n mark1 = 3;\n points1.push(p1.clone());\n points2.push(p1.clone());\n }\n if (mark0 === 1 && mark1 === 2 || mark0 === 2 && mark1 === 1) {\n this.tempLine1.start.copy(p0);\n this.tempLine1.end.copy(p1);\n let intersection = new Vector3();\n intersection = localPlane.intersectLine(this.tempLine1, intersection);\n if (intersection === null) {\n console.error(\"Internal error: segment does not intersect plane.\");\n output.segmentedObject1 = null;\n output.segmentedObject2 = null;\n return 0;\n }\n points1.push(intersection);\n points2.push(intersection.clone());\n }\n }\n }\n const newMass = object.userData.mass * 0.5;\n this.tempCM1.set(0, 0, 0);\n let radius1 = 0;\n const numPoints1 = points1.length;\n if (numPoints1 > 0) {\n for (let i = 0; i < numPoints1; i++)\n this.tempCM1.add(points1[i]);\n this.tempCM1.divideScalar(numPoints1);\n for (let i = 0; i < numPoints1; i++) {\n const p = points1[i];\n p.sub(this.tempCM1);\n radius1 = Math.max(radius1, p.x, p.y, p.z);\n }\n this.tempCM1.add(object.position);\n }\n this.tempCM2.set(0, 0, 0);\n let radius2 = 0;\n const numPoints2 = points2.length;\n if (numPoints2 > 0) {\n for (let i = 0; i < numPoints2; i++)\n this.tempCM2.add(points2[i]);\n this.tempCM2.divideScalar(numPoints2);\n for (let i = 0; i < numPoints2; i++) {\n const p = points2[i];\n p.sub(this.tempCM2);\n radius2 = Math.max(radius2, p.x, p.y, p.z);\n }\n this.tempCM2.add(object.position);\n }\n let object1 = null;\n let object2 = null;\n let numObjects = 0;\n if (numPoints1 > 4) {\n object1 = new Mesh(new ConvexGeometry(points1), object.material);\n object1.position.copy(this.tempCM1);\n object1.quaternion.copy(object.quaternion);\n this.prepareBreakableObject(\n object1,\n newMass,\n object.userData.velocity,\n object.userData.angularVelocity,\n 2 * radius1 > this.minSizeForBreak\n );\n numObjects++;\n }\n if (numPoints2 > 4) {\n object2 = new Mesh(new ConvexGeometry(points2), object.material);\n object2.position.copy(this.tempCM2);\n object2.quaternion.copy(object.quaternion);\n this.prepareBreakableObject(\n object2,\n newMass,\n object.userData.velocity,\n object.userData.angularVelocity,\n 2 * radius2 > this.minSizeForBreak\n );\n numObjects++;\n }\n output.object1 = object1;\n output.object2 = object2;\n return numObjects;\n }\n static transformFreeVector(v, m) {\n const x = v.x, y = v.y, z = v.z;\n const e = m.elements;\n v.x = e[0] * x + e[4] * y + e[8] * z;\n v.y = e[1] * x + e[5] * y + e[9] * z;\n v.z = e[2] * x + e[6] * y + e[10] * z;\n return v;\n }\n static transformFreeVectorInverse(v, m) {\n const x = v.x, y = v.y, z = v.z;\n const e = m.elements;\n v.x = e[0] * x + e[1] * y + e[2] * z;\n v.y = e[4] * x + e[5] * y + e[6] * z;\n v.z = e[8] * x + e[9] * y + e[10] * z;\n return v;\n }\n static transformTiedVectorInverse(v, m) {\n const x = v.x, y = v.y, z = v.z;\n const e = m.elements;\n v.x = e[0] * x + e[1] * y + e[2] * z - e[12];\n v.y = e[4] * x + e[5] * y + e[6] * z - e[13];\n v.z = e[8] * x + e[9] * y + e[10] * z - e[14];\n return v;\n }\n static transformPlaneToLocalSpace(plane, m, resultPlane) {\n resultPlane.normal.copy(plane.normal);\n resultPlane.constant = plane.constant;\n const referencePoint = ConvexObjectBreaker2.transformTiedVectorInverse(plane.coplanarPoint(_v1), m);\n ConvexObjectBreaker2.transformFreeVectorInverse(resultPlane.normal, m);\n resultPlane.constant = -referencePoint.dot(resultPlane.normal);\n }\n }\n return ConvexObjectBreaker2;\n})();\nexport {\n ConvexObjectBreaker\n};\n//# sourceMappingURL=ConvexObjectBreaker.js.map\n","import { Scene, Camera, Mesh, PlaneGeometry, ShaderMaterial, WebGLRenderTarget, RGBAFormat, DataTexture, FloatType, NoToneMapping, NearestFilter, ClampToEdgeWrapping } from \"three\";\nclass GPUComputationRenderer {\n constructor(sizeX, sizeY, renderer) {\n this.variables = [];\n this.currentTextureIndex = 0;\n let dataType = FloatType;\n const scene = new Scene();\n const camera = new Camera();\n camera.position.z = 1;\n const passThruUniforms = {\n passThruTexture: { value: null }\n };\n const passThruShader = createShaderMaterial(getPassThroughFragmentShader(), passThruUniforms);\n const mesh = new Mesh(new PlaneGeometry(2, 2), passThruShader);\n scene.add(mesh);\n this.setDataType = function(type) {\n dataType = type;\n return this;\n };\n this.addVariable = function(variableName, computeFragmentShader, initialValueTexture) {\n const material = this.createShaderMaterial(computeFragmentShader);\n const variable = {\n name: variableName,\n initialValueTexture,\n material,\n dependencies: null,\n renderTargets: [],\n wrapS: null,\n wrapT: null,\n minFilter: NearestFilter,\n magFilter: NearestFilter\n };\n this.variables.push(variable);\n return variable;\n };\n this.setVariableDependencies = function(variable, dependencies) {\n variable.dependencies = dependencies;\n };\n this.init = function() {\n if (renderer.capabilities.isWebGL2 === false && renderer.extensions.has(\"OES_texture_float\") === false) {\n return \"No OES_texture_float support for float textures.\";\n }\n if (renderer.capabilities.maxVertexTextures === 0) {\n return \"No support for vertex shader textures.\";\n }\n for (let i = 0; i < this.variables.length; i++) {\n const variable = this.variables[i];\n variable.renderTargets[0] = this.createRenderTarget(\n sizeX,\n sizeY,\n variable.wrapS,\n variable.wrapT,\n variable.minFilter,\n variable.magFilter\n );\n variable.renderTargets[1] = this.createRenderTarget(\n sizeX,\n sizeY,\n variable.wrapS,\n variable.wrapT,\n variable.minFilter,\n variable.magFilter\n );\n this.renderTexture(variable.initialValueTexture, variable.renderTargets[0]);\n this.renderTexture(variable.initialValueTexture, variable.renderTargets[1]);\n const material = variable.material;\n const uniforms = material.uniforms;\n if (variable.dependencies !== null) {\n for (let d = 0; d < variable.dependencies.length; d++) {\n const depVar = variable.dependencies[d];\n if (depVar.name !== variable.name) {\n let found = false;\n for (let j = 0; j < this.variables.length; j++) {\n if (depVar.name === this.variables[j].name) {\n found = true;\n break;\n }\n }\n if (!found) {\n return \"Variable dependency not found. Variable=\" + variable.name + \", dependency=\" + depVar.name;\n }\n }\n uniforms[depVar.name] = { value: null };\n material.fragmentShader = \"\\nuniform sampler2D \" + depVar.name + \";\\n\" + material.fragmentShader;\n }\n }\n }\n this.currentTextureIndex = 0;\n return null;\n };\n this.compute = function() {\n const currentTextureIndex = this.currentTextureIndex;\n const nextTextureIndex = this.currentTextureIndex === 0 ? 1 : 0;\n for (let i = 0, il = this.variables.length; i < il; i++) {\n const variable = this.variables[i];\n if (variable.dependencies !== null) {\n const uniforms = variable.material.uniforms;\n for (let d = 0, dl = variable.dependencies.length; d < dl; d++) {\n const depVar = variable.dependencies[d];\n uniforms[depVar.name].value = depVar.renderTargets[currentTextureIndex].texture;\n }\n }\n this.doRenderTarget(variable.material, variable.renderTargets[nextTextureIndex]);\n }\n this.currentTextureIndex = nextTextureIndex;\n };\n this.getCurrentRenderTarget = function(variable) {\n return variable.renderTargets[this.currentTextureIndex];\n };\n this.getAlternateRenderTarget = function(variable) {\n return variable.renderTargets[this.currentTextureIndex === 0 ? 1 : 0];\n };\n this.dispose = function() {\n mesh.geometry.dispose();\n mesh.material.dispose();\n const variables = this.variables;\n for (let i = 0; i < variables.length; i++) {\n const variable = variables[i];\n if (variable.initialValueTexture)\n variable.initialValueTexture.dispose();\n const renderTargets = variable.renderTargets;\n for (let j = 0; j < renderTargets.length; j++) {\n const renderTarget = renderTargets[j];\n renderTarget.dispose();\n }\n }\n };\n function addResolutionDefine(materialShader) {\n materialShader.defines.resolution = \"vec2( \" + sizeX.toFixed(1) + \", \" + sizeY.toFixed(1) + \" )\";\n }\n this.addResolutionDefine = addResolutionDefine;\n function createShaderMaterial(computeFragmentShader, uniforms) {\n uniforms = uniforms || {};\n const material = new ShaderMaterial({\n uniforms,\n vertexShader: getPassThroughVertexShader(),\n fragmentShader: computeFragmentShader\n });\n addResolutionDefine(material);\n return material;\n }\n this.createShaderMaterial = createShaderMaterial;\n this.createRenderTarget = function(sizeXTexture, sizeYTexture, wrapS, wrapT, minFilter, magFilter) {\n sizeXTexture = sizeXTexture || sizeX;\n sizeYTexture = sizeYTexture || sizeY;\n wrapS = wrapS || ClampToEdgeWrapping;\n wrapT = wrapT || ClampToEdgeWrapping;\n minFilter = minFilter || NearestFilter;\n magFilter = magFilter || NearestFilter;\n const renderTarget = new WebGLRenderTarget(sizeXTexture, sizeYTexture, {\n wrapS,\n wrapT,\n minFilter,\n magFilter,\n format: RGBAFormat,\n type: dataType,\n depthBuffer: false\n });\n return renderTarget;\n };\n this.createTexture = function() {\n const data = new Float32Array(sizeX * sizeY * 4);\n const texture = new DataTexture(data, sizeX, sizeY, RGBAFormat, FloatType);\n texture.needsUpdate = true;\n return texture;\n };\n this.renderTexture = function(input, output) {\n passThruUniforms.passThruTexture.value = input;\n this.doRenderTarget(passThruShader, output);\n passThruUniforms.passThruTexture.value = null;\n };\n this.doRenderTarget = function(material, output) {\n const currentRenderTarget = renderer.getRenderTarget();\n const currentXrEnabled = renderer.xr.enabled;\n const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;\n const currentOutputColorSpace = renderer.outputColorSpace;\n const currentToneMapping = renderer.toneMapping;\n renderer.xr.enabled = false;\n renderer.shadowMap.autoUpdate = false;\n if (\"outputColorSpace\" in renderer)\n renderer.outputColorSpace = \"srgb-linear\";\n else\n renderer.encoding = 3e3;\n renderer.toneMapping = NoToneMapping;\n mesh.material = material;\n renderer.setRenderTarget(output);\n renderer.render(scene, camera);\n mesh.material = passThruShader;\n renderer.xr.enabled = currentXrEnabled;\n renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;\n renderer.outputColorSpace = currentOutputColorSpace;\n renderer.toneMapping = currentToneMapping;\n renderer.setRenderTarget(currentRenderTarget);\n };\n function getPassThroughVertexShader() {\n return \"void main()\t{\\n\\n\tgl_Position = vec4( position, 1.0 );\\n\\n}\\n\";\n }\n function getPassThroughFragmentShader() {\n return \"uniform sampler2D passThruTexture;\\n\\nvoid main() {\\n\\n\tvec2 uv = gl_FragCoord.xy / resolution.xy;\\n\\n\tgl_FragColor = texture2D( passThruTexture, uv );\\n\\n}\\n\";\n }\n }\n}\nexport {\n GPUComputationRenderer\n};\n//# sourceMappingURL=GPUComputationRenderer.js.map\n","import { Object3D, Vector3, Quaternion } from \"three\";\nconst _translationObject = /* @__PURE__ */ new Vector3();\nconst _quaternionObject = /* @__PURE__ */ new Quaternion();\nconst _scaleObject = /* @__PURE__ */ new Vector3();\nconst _translationWorld = /* @__PURE__ */ new Vector3();\nconst _quaternionWorld = /* @__PURE__ */ new Quaternion();\nconst _scaleWorld = /* @__PURE__ */ new Vector3();\nclass Gyroscope extends Object3D {\n constructor() {\n super();\n }\n updateMatrixWorld(force) {\n this.matrixAutoUpdate && this.updateMatrix();\n if (this.matrixWorldNeedsUpdate || force) {\n if (this.parent !== null) {\n this.matrixWorld.multiplyMatrices(this.parent.matrixWorld, this.matrix);\n this.matrixWorld.decompose(_translationWorld, _quaternionWorld, _scaleWorld);\n this.matrix.decompose(_translationObject, _quaternionObject, _scaleObject);\n this.matrixWorld.compose(_translationWorld, _quaternionObject, _scaleWorld);\n } else {\n this.matrixWorld.copy(this.matrix);\n }\n this.matrixWorldNeedsUpdate = false;\n force = true;\n }\n for (let i = 0, l = this.children.length; i < l; i++) {\n this.children[i].updateMatrixWorld(force);\n }\n }\n}\nexport {\n Gyroscope\n};\n//# sourceMappingURL=Gyroscope.js.map\n","import { Mesh, AnimationMixer, AnimationClip } from \"three\";\nclass MorphAnimMesh extends Mesh {\n constructor(geometry, material) {\n super(geometry, material);\n this.type = \"MorphAnimMesh\";\n this.mixer = new AnimationMixer(this);\n this.activeAction = null;\n }\n setDirectionForward() {\n this.mixer.timeScale = 1;\n }\n setDirectionBackward() {\n this.mixer.timeScale = -1;\n }\n playAnimation(label, fps) {\n if (this.activeAction) {\n this.activeAction.stop();\n this.activeAction = null;\n }\n const clip = AnimationClip.findByName(this, label);\n if (clip) {\n const action = this.mixer.clipAction(clip);\n action.timeScale = clip.tracks.length * fps / clip.duration;\n this.activeAction = action.play();\n } else {\n throw new Error(\"THREE.MorphAnimMesh: animations[\" + label + \"] undefined in .playAnimation()\");\n }\n }\n updateAnimation(delta) {\n this.mixer.update(delta);\n }\n copy(source, recursive) {\n super.copy(source, recursive);\n this.mixer = new AnimationMixer(this);\n return this;\n }\n}\nexport {\n MorphAnimMesh\n};\n//# sourceMappingURL=MorphAnimMesh.js.map\n","import { BufferGeometry, Vector3, Quaternion, BufferAttribute, Raycaster, Color } from \"three\";\nclass RollerCoasterGeometry extends BufferGeometry {\n constructor(curve, divisions) {\n super();\n const vertices = [];\n const normals = [];\n const colors = [];\n const color1 = [1, 1, 1];\n const color2 = [1, 1, 0];\n const up = new Vector3(0, 1, 0);\n const forward = new Vector3();\n const right = new Vector3();\n const quaternion = new Quaternion();\n const prevQuaternion = new Quaternion();\n prevQuaternion.setFromAxisAngle(up, Math.PI / 2);\n const point = new Vector3();\n const prevPoint = new Vector3();\n prevPoint.copy(curve.getPointAt(0));\n const step = [\n new Vector3(-0.225, 0, 0),\n new Vector3(0, -0.05, 0),\n new Vector3(0, -0.175, 0),\n new Vector3(0, -0.05, 0),\n new Vector3(0.225, 0, 0),\n new Vector3(0, -0.175, 0)\n ];\n const PI2 = Math.PI * 2;\n let sides = 5;\n const tube1 = [];\n for (let i = 0; i < sides; i++) {\n const angle = i / sides * PI2;\n tube1.push(new Vector3(Math.sin(angle) * 0.06, Math.cos(angle) * 0.06, 0));\n }\n sides = 6;\n const tube2 = [];\n for (let i = 0; i < sides; i++) {\n const angle = i / sides * PI2;\n tube2.push(new Vector3(Math.sin(angle) * 0.025, Math.cos(angle) * 0.025, 0));\n }\n const vector = new Vector3();\n const normal = new Vector3();\n function drawShape(shape, color) {\n normal.set(0, 0, -1).applyQuaternion(quaternion);\n for (let j = 0; j < shape.length; j++) {\n vector.copy(shape[j]);\n vector.applyQuaternion(quaternion);\n vector.add(point);\n vertices.push(vector.x, vector.y, vector.z);\n normals.push(normal.x, normal.y, normal.z);\n colors.push(color[0], color[1], color[2]);\n }\n normal.set(0, 0, 1).applyQuaternion(quaternion);\n for (let j = shape.length - 1; j >= 0; j--) {\n vector.copy(shape[j]);\n vector.applyQuaternion(quaternion);\n vector.add(point);\n vertices.push(vector.x, vector.y, vector.z);\n normals.push(normal.x, normal.y, normal.z);\n colors.push(color[0], color[1], color[2]);\n }\n }\n const vector1 = new Vector3();\n const vector2 = new Vector3();\n const vector3 = new Vector3();\n const vector4 = new Vector3();\n const normal1 = new Vector3();\n const normal2 = new Vector3();\n const normal3 = new Vector3();\n const normal4 = new Vector3();\n function extrudeShape(shape, offset2, color) {\n for (let j = 0, jl = shape.length; j < jl; j++) {\n const point1 = shape[j];\n const point2 = shape[(j + 1) % jl];\n vector1.copy(point1).add(offset2);\n vector1.applyQuaternion(quaternion);\n vector1.add(point);\n vector2.copy(point2).add(offset2);\n vector2.applyQuaternion(quaternion);\n vector2.add(point);\n vector3.copy(point2).add(offset2);\n vector3.applyQuaternion(prevQuaternion);\n vector3.add(prevPoint);\n vector4.copy(point1).add(offset2);\n vector4.applyQuaternion(prevQuaternion);\n vector4.add(prevPoint);\n vertices.push(vector1.x, vector1.y, vector1.z);\n vertices.push(vector2.x, vector2.y, vector2.z);\n vertices.push(vector4.x, vector4.y, vector4.z);\n vertices.push(vector2.x, vector2.y, vector2.z);\n vertices.push(vector3.x, vector3.y, vector3.z);\n vertices.push(vector4.x, vector4.y, vector4.z);\n normal1.copy(point1);\n normal1.applyQuaternion(quaternion);\n normal1.normalize();\n normal2.copy(point2);\n normal2.applyQuaternion(quaternion);\n normal2.normalize();\n normal3.copy(point2);\n normal3.applyQuaternion(prevQuaternion);\n normal3.normalize();\n normal4.copy(point1);\n normal4.applyQuaternion(prevQuaternion);\n normal4.normalize();\n normals.push(normal1.x, normal1.y, normal1.z);\n normals.push(normal2.x, normal2.y, normal2.z);\n normals.push(normal4.x, normal4.y, normal4.z);\n normals.push(normal2.x, normal2.y, normal2.z);\n normals.push(normal3.x, normal3.y, normal3.z);\n normals.push(normal4.x, normal4.y, normal4.z);\n colors.push(color[0], color[1], color[2]);\n colors.push(color[0], color[1], color[2]);\n colors.push(color[0], color[1], color[2]);\n colors.push(color[0], color[1], color[2]);\n colors.push(color[0], color[1], color[2]);\n colors.push(color[0], color[1], color[2]);\n }\n }\n const offset = new Vector3();\n for (let i = 1; i <= divisions; i++) {\n point.copy(curve.getPointAt(i / divisions));\n up.set(0, 1, 0);\n forward.subVectors(point, prevPoint).normalize();\n right.crossVectors(up, forward).normalize();\n up.crossVectors(forward, right);\n const angle = Math.atan2(forward.x, forward.z);\n quaternion.setFromAxisAngle(up, angle);\n if (i % 2 === 0) {\n drawShape(step, color2);\n }\n extrudeShape(tube1, offset.set(0, -0.125, 0), color2);\n extrudeShape(tube2, offset.set(0.2, 0, 0), color1);\n extrudeShape(tube2, offset.set(-0.2, 0, 0), color1);\n prevPoint.copy(point);\n prevQuaternion.copy(quaternion);\n }\n this.setAttribute(\"position\", new BufferAttribute(new Float32Array(vertices), 3));\n this.setAttribute(\"normal\", new BufferAttribute(new Float32Array(normals), 3));\n this.setAttribute(\"color\", new BufferAttribute(new Float32Array(colors), 3));\n }\n}\nclass RollerCoasterLiftersGeometry extends BufferGeometry {\n constructor(curve, divisions) {\n super();\n const vertices = [];\n const normals = [];\n const quaternion = new Quaternion();\n const up = new Vector3(0, 1, 0);\n const point = new Vector3();\n const tangent = new Vector3();\n const tube1 = [new Vector3(0, 0.05, -0.05), new Vector3(0, 0.05, 0.05), new Vector3(0, -0.05, 0)];\n const tube2 = [new Vector3(-0.05, 0, 0.05), new Vector3(-0.05, 0, -0.05), new Vector3(0.05, 0, 0)];\n const tube3 = [new Vector3(0.05, 0, -0.05), new Vector3(0.05, 0, 0.05), new Vector3(-0.05, 0, 0)];\n const vector1 = new Vector3();\n const vector2 = new Vector3();\n const vector3 = new Vector3();\n const vector4 = new Vector3();\n const normal1 = new Vector3();\n const normal2 = new Vector3();\n const normal3 = new Vector3();\n const normal4 = new Vector3();\n function extrudeShape(shape, fromPoint2, toPoint2) {\n for (let j = 0, jl = shape.length; j < jl; j++) {\n const point1 = shape[j];\n const point2 = shape[(j + 1) % jl];\n vector1.copy(point1);\n vector1.applyQuaternion(quaternion);\n vector1.add(fromPoint2);\n vector2.copy(point2);\n vector2.applyQuaternion(quaternion);\n vector2.add(fromPoint2);\n vector3.copy(point2);\n vector3.applyQuaternion(quaternion);\n vector3.add(toPoint2);\n vector4.copy(point1);\n vector4.applyQuaternion(quaternion);\n vector4.add(toPoint2);\n vertices.push(vector1.x, vector1.y, vector1.z);\n vertices.push(vector2.x, vector2.y, vector2.z);\n vertices.push(vector4.x, vector4.y, vector4.z);\n vertices.push(vector2.x, vector2.y, vector2.z);\n vertices.push(vector3.x, vector3.y, vector3.z);\n vertices.push(vector4.x, vector4.y, vector4.z);\n normal1.copy(point1);\n normal1.applyQuaternion(quaternion);\n normal1.normalize();\n normal2.copy(point2);\n normal2.applyQuaternion(quaternion);\n normal2.normalize();\n normal3.copy(point2);\n normal3.applyQuaternion(quaternion);\n normal3.normalize();\n normal4.copy(point1);\n normal4.applyQuaternion(quaternion);\n normal4.normalize();\n normals.push(normal1.x, normal1.y, normal1.z);\n normals.push(normal2.x, normal2.y, normal2.z);\n normals.push(normal4.x, normal4.y, normal4.z);\n normals.push(normal2.x, normal2.y, normal2.z);\n normals.push(normal3.x, normal3.y, normal3.z);\n normals.push(normal4.x, normal4.y, normal4.z);\n }\n }\n const fromPoint = new Vector3();\n const toPoint = new Vector3();\n for (let i = 1; i <= divisions; i++) {\n point.copy(curve.getPointAt(i / divisions));\n tangent.copy(curve.getTangentAt(i / divisions));\n const angle = Math.atan2(tangent.x, tangent.z);\n quaternion.setFromAxisAngle(up, angle);\n if (point.y > 10) {\n fromPoint.set(-0.75, -0.35, 0);\n fromPoint.applyQuaternion(quaternion);\n fromPoint.add(point);\n toPoint.set(0.75, -0.35, 0);\n toPoint.applyQuaternion(quaternion);\n toPoint.add(point);\n extrudeShape(tube1, fromPoint, toPoint);\n fromPoint.set(-0.7, -0.3, 0);\n fromPoint.applyQuaternion(quaternion);\n fromPoint.add(point);\n toPoint.set(-0.7, -point.y, 0);\n toPoint.applyQuaternion(quaternion);\n toPoint.add(point);\n extrudeShape(tube2, fromPoint, toPoint);\n fromPoint.set(0.7, -0.3, 0);\n fromPoint.applyQuaternion(quaternion);\n fromPoint.add(point);\n toPoint.set(0.7, -point.y, 0);\n toPoint.applyQuaternion(quaternion);\n toPoint.add(point);\n extrudeShape(tube3, fromPoint, toPoint);\n } else {\n fromPoint.set(0, -0.2, 0);\n fromPoint.applyQuaternion(quaternion);\n fromPoint.add(point);\n toPoint.set(0, -point.y, 0);\n toPoint.applyQuaternion(quaternion);\n toPoint.add(point);\n extrudeShape(tube3, fromPoint, toPoint);\n }\n }\n this.setAttribute(\"position\", new BufferAttribute(new Float32Array(vertices), 3));\n this.setAttribute(\"normal\", new BufferAttribute(new Float32Array(normals), 3));\n }\n}\nclass RollerCoasterShadowGeometry extends BufferGeometry {\n constructor(curve, divisions) {\n super();\n const vertices = [];\n const up = new Vector3(0, 1, 0);\n const forward = new Vector3();\n const quaternion = new Quaternion();\n const prevQuaternion = new Quaternion();\n prevQuaternion.setFromAxisAngle(up, Math.PI / 2);\n const point = new Vector3();\n const prevPoint = new Vector3();\n prevPoint.copy(curve.getPointAt(0));\n prevPoint.y = 0;\n const vector1 = new Vector3();\n const vector2 = new Vector3();\n const vector3 = new Vector3();\n const vector4 = new Vector3();\n for (let i = 1; i <= divisions; i++) {\n point.copy(curve.getPointAt(i / divisions));\n point.y = 0;\n forward.subVectors(point, prevPoint);\n const angle = Math.atan2(forward.x, forward.z);\n quaternion.setFromAxisAngle(up, angle);\n vector1.set(-0.3, 0, 0);\n vector1.applyQuaternion(quaternion);\n vector1.add(point);\n vector2.set(0.3, 0, 0);\n vector2.applyQuaternion(quaternion);\n vector2.add(point);\n vector3.set(0.3, 0, 0);\n vector3.applyQuaternion(prevQuaternion);\n vector3.add(prevPoint);\n vector4.set(-0.3, 0, 0);\n vector4.applyQuaternion(prevQuaternion);\n vector4.add(prevPoint);\n vertices.push(vector1.x, vector1.y, vector1.z);\n vertices.push(vector2.x, vector2.y, vector2.z);\n vertices.push(vector4.x, vector4.y, vector4.z);\n vertices.push(vector2.x, vector2.y, vector2.z);\n vertices.push(vector3.x, vector3.y, vector3.z);\n vertices.push(vector4.x, vector4.y, vector4.z);\n prevPoint.copy(point);\n prevQuaternion.copy(quaternion);\n }\n this.setAttribute(\"position\", new BufferAttribute(new Float32Array(vertices), 3));\n }\n}\nclass SkyGeometry extends BufferGeometry {\n constructor() {\n super();\n const vertices = [];\n for (let i = 0; i < 100; i++) {\n const x = Math.random() * 800 - 400;\n const y = Math.random() * 50 + 50;\n const z = Math.random() * 800 - 400;\n const size = Math.random() * 40 + 20;\n vertices.push(x - size, y, z - size);\n vertices.push(x + size, y, z - size);\n vertices.push(x - size, y, z + size);\n vertices.push(x + size, y, z - size);\n vertices.push(x + size, y, z + size);\n vertices.push(x - size, y, z + size);\n }\n this.setAttribute(\"position\", new BufferAttribute(new Float32Array(vertices), 3));\n }\n}\nclass TreesGeometry extends BufferGeometry {\n constructor(landscape) {\n super();\n const vertices = [];\n const colors = [];\n const raycaster = new Raycaster();\n raycaster.ray.direction.set(0, -1, 0);\n const _color = new Color();\n for (let i = 0; i < 2e3; i++) {\n const x = Math.random() * 500 - 250;\n const z = Math.random() * 500 - 250;\n raycaster.ray.origin.set(x, 50, z);\n const intersections = raycaster.intersectObject(landscape);\n if (intersections.length === 0)\n continue;\n const y = intersections[0].point.y;\n const height = Math.random() * 5 + 0.5;\n let angle = Math.random() * Math.PI * 2;\n vertices.push(x + Math.sin(angle), y, z + Math.cos(angle));\n vertices.push(x, y + height, z);\n vertices.push(x + Math.sin(angle + Math.PI), y, z + Math.cos(angle + Math.PI));\n angle += Math.PI / 2;\n vertices.push(x + Math.sin(angle), y, z + Math.cos(angle));\n vertices.push(x, y + height, z);\n vertices.push(x + Math.sin(angle + Math.PI), y, z + Math.cos(angle + Math.PI));\n const random = Math.random() * 0.1;\n for (let j = 0; j < 6; j++) {\n _color.setRGB(0.2 + random, 0.4 + random, 0, \"srgb\");\n colors.push(_color.r, _color.g, _color.b);\n }\n }\n this.setAttribute(\"position\", new BufferAttribute(new Float32Array(vertices), 3));\n this.setAttribute(\"color\", new BufferAttribute(new Float32Array(colors), 3));\n }\n}\nexport {\n RollerCoasterGeometry,\n RollerCoasterLiftersGeometry,\n RollerCoasterShadowGeometry,\n SkyGeometry,\n TreesGeometry\n};\n//# sourceMappingURL=RollerCoaster.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nclass Timer {\n constructor() {\n __publicField(this, \"_previousTime\");\n __publicField(this, \"_currentTime\");\n __publicField(this, \"_delta\");\n __publicField(this, \"_elapsed\");\n __publicField(this, \"_timescale\");\n __publicField(this, \"_useFixedDelta\");\n __publicField(this, \"_fixedDelta\");\n __publicField(this, \"_usePageVisibilityAPI\");\n __publicField(this, \"_pageVisibilityHandler\");\n this._previousTime = 0;\n this._currentTime = 0;\n this._delta = 0;\n this._elapsed = 0;\n this._timescale = 1;\n this._useFixedDelta = false;\n this._fixedDelta = 16.67;\n this._usePageVisibilityAPI = typeof document !== \"undefined\" && document.hidden !== void 0;\n }\n // https://github.com/mrdoob/three.js/issues/20575\n // use Page Visibility API to avoid large time delta values\n connect() {\n if (this._usePageVisibilityAPI) {\n this._pageVisibilityHandler = handleVisibilityChange.bind(this);\n document.addEventListener(\"visibilitychange\", this._pageVisibilityHandler, false);\n }\n return this;\n }\n dispose() {\n if (this._usePageVisibilityAPI && this._pageVisibilityHandler) {\n document.removeEventListener(\"visibilitychange\", this._pageVisibilityHandler);\n }\n return this;\n }\n disableFixedDelta() {\n this._useFixedDelta = false;\n return this;\n }\n enableFixedDelta() {\n this._useFixedDelta = true;\n return this;\n }\n getDelta() {\n return this._delta / 1e3;\n }\n getElapsedTime() {\n return this._elapsed / 1e3;\n }\n getFixedDelta() {\n return this._fixedDelta / 1e3;\n }\n getTimescale() {\n return this._timescale;\n }\n reset() {\n this._currentTime = this._now();\n return this;\n }\n setFixedDelta(fixedDelta) {\n this._fixedDelta = fixedDelta * 1e3;\n return this;\n }\n setTimescale(timescale) {\n this._timescale = timescale;\n return this;\n }\n update() {\n if (this._useFixedDelta === true) {\n this._delta = this._fixedDelta;\n } else {\n this._previousTime = this._currentTime;\n this._currentTime = this._now();\n this._delta = this._currentTime - this._previousTime;\n }\n this._delta *= this._timescale;\n this._elapsed += this._delta;\n return this;\n }\n // For THREE.Clock backward compatibility\n get elapsedTime() {\n return this.getElapsedTime();\n }\n // private\n _now() {\n return (typeof performance === \"undefined\" ? Date : performance).now();\n }\n}\nfunction handleVisibilityChange() {\n if (document.hidden === false)\n this.reset();\n}\nexport {\n Timer\n};\n//# sourceMappingURL=Timer.js.map\n","let webGLAvailable, webGL2Available;\nfunction isWebGLAvailable() {\n var _a;\n if (webGLAvailable !== void 0)\n return webGLAvailable;\n try {\n let gl;\n const canvas = document.createElement(\"canvas\");\n webGLAvailable = !!(window.WebGLRenderingContext && (gl = canvas.getContext(\"webgl\")));\n if (gl)\n (_a = gl.getExtension(\"WEBGL_lose_context\")) == null ? void 0 : _a.loseContext();\n return webGLAvailable;\n } catch (e) {\n return webGLAvailable = false;\n }\n}\nfunction isWebGL2Available() {\n var _a;\n if (webGL2Available !== void 0)\n return webGL2Available;\n try {\n let gl;\n const canvas = document.createElement(\"canvas\");\n webGL2Available = !!(window.WebGL2RenderingContext && (gl = canvas.getContext(\"webgl2\")));\n if (gl)\n (_a = gl.getExtension(\"WEBGL_lose_context\")) == null ? void 0 : _a.loseContext();\n return webGL2Available;\n } catch (e) {\n return webGL2Available = false;\n }\n}\nfunction getWebGLErrorMessage() {\n return getErrorMessage(1);\n}\nfunction getWebGL2ErrorMessage() {\n return getErrorMessage(2);\n}\nfunction getErrorMessage(version) {\n const names = {\n 1: \"WebGL\",\n 2: \"WebGL 2\"\n };\n const contexts = {\n 1: window.WebGLRenderingContext,\n 2: window.WebGL2RenderingContext\n };\n const element = document.createElement(\"div\");\n element.id = \"webglmessage\";\n element.style.fontFamily = \"monospace\";\n element.style.fontSize = \"13px\";\n element.style.fontWeight = \"normal\";\n element.style.textAlign = \"center\";\n element.style.background = \"#fff\";\n element.style.color = \"#000\";\n element.style.padding = \"1.5em\";\n element.style.width = \"400px\";\n element.style.margin = \"5em auto 0\";\n let message = 'Your $0 does not seem to support <a href=\"http://khronos.org/webgl/wiki/Getting_a_WebGL_Implementation\" style=\"color:#000\">$1</a>';\n if (contexts[version]) {\n message = message.replace(\"$0\", \"graphics card\");\n } else {\n message = message.replace(\"$0\", \"browser\");\n }\n message = message.replace(\"$1\", names[version]);\n element.innerHTML = message;\n return element;\n}\nexport {\n getErrorMessage,\n getWebGL2ErrorMessage,\n getWebGLErrorMessage,\n isWebGL2Available,\n isWebGLAvailable\n};\n//# sourceMappingURL=WebGL.js.map\n","import { Object3D, Box3, AnimationMixer, MeshLambertMaterial, Mesh, TextureLoader, UVMapping } from \"three\";\nimport { MD2Loader } from \"../loaders/MD2Loader.js\";\nclass MD2Character {\n constructor() {\n this.scale = 1;\n this.animationFPS = 6;\n this.root = new Object3D();\n this.meshBody = null;\n this.meshWeapon = null;\n this.skinsBody = [];\n this.skinsWeapon = [];\n this.weapons = [];\n this.activeAnimation = null;\n this.mixer = null;\n this.onLoadComplete = function() {\n };\n this.loadCounter = 0;\n }\n loadParts(config) {\n const scope = this;\n function createPart(geometry, skinMap) {\n const materialWireframe = new MeshLambertMaterial({\n color: 16755200,\n wireframe: true,\n morphTargets: true,\n morphNormals: true\n });\n const materialTexture = new MeshLambertMaterial({\n color: 16777215,\n wireframe: false,\n map: skinMap,\n morphTargets: true,\n morphNormals: true\n });\n const mesh = new Mesh(geometry, materialTexture);\n mesh.rotation.y = -Math.PI / 2;\n mesh.castShadow = true;\n mesh.receiveShadow = true;\n mesh.materialTexture = materialTexture;\n mesh.materialWireframe = materialWireframe;\n return mesh;\n }\n function loadTextures(baseUrl, textureUrls) {\n const textureLoader = new TextureLoader();\n const textures = [];\n for (let i = 0; i < textureUrls.length; i++) {\n textures[i] = textureLoader.load(baseUrl + textureUrls[i], checkLoadingComplete);\n textures[i].mapping = UVMapping;\n textures[i].name = textureUrls[i];\n if (\"colorSpace\" in textures[i])\n textures[i].colorSpace = \"srgb\";\n else\n textures[i].encoding = 3001;\n }\n return textures;\n }\n function checkLoadingComplete() {\n scope.loadCounter -= 1;\n if (scope.loadCounter === 0)\n scope.onLoadComplete();\n }\n this.loadCounter = config.weapons.length * 2 + config.skins.length + 1;\n const weaponsTextures = [];\n for (let i = 0; i < config.weapons.length; i++)\n weaponsTextures[i] = config.weapons[i][1];\n this.skinsBody = loadTextures(config.baseUrl + \"skins/\", config.skins);\n this.skinsWeapon = loadTextures(config.baseUrl + \"skins/\", weaponsTextures);\n const loader = new MD2Loader();\n loader.load(config.baseUrl + config.body, function(geo) {\n const boundingBox = new Box3();\n boundingBox.setFromBufferAttribute(geo.attributes.position);\n scope.root.position.y = -scope.scale * boundingBox.min.y;\n const mesh = createPart(geo, scope.skinsBody[0]);\n mesh.scale.set(scope.scale, scope.scale, scope.scale);\n scope.root.add(mesh);\n scope.meshBody = mesh;\n scope.meshBody.clipOffset = 0;\n scope.activeAnimationClipName = mesh.geometry.animations[0].name;\n scope.mixer = new AnimationMixer(mesh);\n checkLoadingComplete();\n });\n const generateCallback = function(index, name) {\n return function(geo) {\n const mesh = createPart(geo, scope.skinsWeapon[index]);\n mesh.scale.set(scope.scale, scope.scale, scope.scale);\n mesh.visible = false;\n mesh.name = name;\n scope.root.add(mesh);\n scope.weapons[index] = mesh;\n scope.meshWeapon = mesh;\n checkLoadingComplete();\n };\n };\n for (let i = 0; i < config.weapons.length; i++) {\n loader.load(config.baseUrl + config.weapons[i][0], generateCallback(i, config.weapons[i][0]));\n }\n }\n setPlaybackRate(rate) {\n if (rate !== 0) {\n this.mixer.timeScale = 1 / rate;\n } else {\n this.mixer.timeScale = 0;\n }\n }\n setWireframe(wireframeEnabled) {\n if (wireframeEnabled) {\n if (this.meshBody)\n this.meshBody.material = this.meshBody.materialWireframe;\n if (this.meshWeapon)\n this.meshWeapon.material = this.meshWeapon.materialWireframe;\n } else {\n if (this.meshBody)\n this.meshBody.material = this.meshBody.materialTexture;\n if (this.meshWeapon)\n this.meshWeapon.material = this.meshWeapon.materialTexture;\n }\n }\n setSkin(index) {\n if (this.meshBody && this.meshBody.material.wireframe === false) {\n this.meshBody.material.map = this.skinsBody[index];\n }\n }\n setWeapon(index) {\n for (let i = 0; i < this.weapons.length; i++)\n this.weapons[i].visible = false;\n const activeWeapon = this.weapons[index];\n if (activeWeapon) {\n activeWeapon.visible = true;\n this.meshWeapon = activeWeapon;\n this.syncWeaponAnimation();\n }\n }\n setAnimation(clipName) {\n if (this.meshBody) {\n if (this.meshBody.activeAction) {\n this.meshBody.activeAction.stop();\n this.meshBody.activeAction = null;\n }\n const action = this.mixer.clipAction(clipName, this.meshBody);\n if (action) {\n this.meshBody.activeAction = action.play();\n }\n }\n this.activeClipName = clipName;\n this.syncWeaponAnimation();\n }\n syncWeaponAnimation() {\n const clipName = this.activeClipName;\n if (this.meshWeapon) {\n if (this.meshWeapon.activeAction) {\n this.meshWeapon.activeAction.stop();\n this.meshWeapon.activeAction = null;\n }\n const action = this.mixer.clipAction(clipName, this.meshWeapon);\n if (action) {\n this.meshWeapon.activeAction = action.syncWith(this.meshBody.activeAction).play();\n }\n }\n }\n update(delta) {\n if (this.mixer)\n this.mixer.update(delta);\n }\n}\nexport {\n MD2Character\n};\n//# sourceMappingURL=MD2Character.js.map\n","import { Texture, LinearFilter, ClampToEdgeWrapping, MeshBasicMaterial, DoubleSide, Mesh, PlaneGeometry } from \"three\";\nclass VolumeSlice {\n constructor(volume, index, axis) {\n const slice = this;\n this.volume = volume;\n index = index || 0;\n Object.defineProperty(this, \"index\", {\n get: function() {\n return index;\n },\n set: function(value) {\n index = value;\n slice.geometryNeedsUpdate = true;\n return index;\n }\n });\n this.axis = axis || \"z\";\n this.canvas = document.createElement(\"canvas\");\n this.canvasBuffer = document.createElement(\"canvas\");\n this.updateGeometry();\n const canvasMap = new Texture(this.canvas);\n canvasMap.minFilter = LinearFilter;\n canvasMap.wrapS = canvasMap.wrapT = ClampToEdgeWrapping;\n if (\"colorSpace\" in canvasMap)\n canvasMap.colorSpace = \"srgb\";\n else\n canvasMap.encoding = 3001;\n const material = new MeshBasicMaterial({ map: canvasMap, side: DoubleSide, transparent: true });\n this.mesh = new Mesh(this.geometry, material);\n this.mesh.matrixAutoUpdate = false;\n this.geometryNeedsUpdate = true;\n this.repaint();\n }\n /**\n * @member {Function} repaint Refresh the texture and the geometry if geometryNeedsUpdate is set to true\n * @memberof VolumeSlice\n */\n repaint() {\n if (this.geometryNeedsUpdate) {\n this.updateGeometry();\n }\n const iLength = this.iLength, jLength = this.jLength, sliceAccess = this.sliceAccess, volume = this.volume, canvas = this.canvasBuffer, ctx = this.ctxBuffer;\n const imgData = ctx.getImageData(0, 0, iLength, jLength);\n const data = imgData.data;\n const volumeData = volume.data;\n const upperThreshold = volume.upperThreshold;\n const lowerThreshold = volume.lowerThreshold;\n const windowLow = volume.windowLow;\n const windowHigh = volume.windowHigh;\n let pixelCount = 0;\n if (volume.dataType === \"label\") {\n for (let j = 0; j < jLength; j++) {\n for (let i = 0; i < iLength; i++) {\n let label = volumeData[sliceAccess(i, j)];\n label = label >= this.colorMap.length ? label % this.colorMap.length + 1 : label;\n const color = this.colorMap[label];\n data[4 * pixelCount] = color >> 24 & 255;\n data[4 * pixelCount + 1] = color >> 16 & 255;\n data[4 * pixelCount + 2] = color >> 8 & 255;\n data[4 * pixelCount + 3] = color & 255;\n pixelCount++;\n }\n }\n } else {\n for (let j = 0; j < jLength; j++) {\n for (let i = 0; i < iLength; i++) {\n let value = volumeData[sliceAccess(i, j)];\n let alpha = 255;\n alpha = upperThreshold >= value ? lowerThreshold <= value ? alpha : 0 : 0;\n value = Math.floor(255 * (value - windowLow) / (windowHigh - windowLow));\n value = value > 255 ? 255 : value < 0 ? 0 : value | 0;\n data[4 * pixelCount] = value;\n data[4 * pixelCount + 1] = value;\n data[4 * pixelCount + 2] = value;\n data[4 * pixelCount + 3] = alpha;\n pixelCount++;\n }\n }\n }\n ctx.putImageData(imgData, 0, 0);\n this.ctx.drawImage(canvas, 0, 0, iLength, jLength, 0, 0, this.canvas.width, this.canvas.height);\n this.mesh.material.map.needsUpdate = true;\n }\n /**\n * @member {Function} Refresh the geometry according to axis and index\n * @see Volume.extractPerpendicularPlane\n * @memberof VolumeSlice\n */\n updateGeometry() {\n const extracted = this.volume.extractPerpendicularPlane(this.axis, this.index);\n this.sliceAccess = extracted.sliceAccess;\n this.jLength = extracted.jLength;\n this.iLength = extracted.iLength;\n this.matrix = extracted.matrix;\n this.canvas.width = extracted.planeWidth;\n this.canvas.height = extracted.planeHeight;\n this.canvasBuffer.width = this.iLength;\n this.canvasBuffer.height = this.jLength;\n this.ctx = this.canvas.getContext(\"2d\");\n this.ctxBuffer = this.canvasBuffer.getContext(\"2d\");\n if (this.geometry)\n this.geometry.dispose();\n this.geometry = new PlaneGeometry(extracted.planeWidth, extracted.planeHeight);\n if (this.mesh) {\n this.mesh.geometry = this.geometry;\n this.mesh.matrix.identity();\n this.mesh.applyMatrix4(this.matrix);\n }\n this.geometryNeedsUpdate = false;\n }\n}\nexport {\n VolumeSlice\n};\n//# sourceMappingURL=VolumeSlice.js.map\n","import { BufferAttribute, DynamicDrawUsage, BufferGeometry, MeshStandardMaterial, Mesh, Vector3, Color, Matrix4 } from \"three\";\nfunction TubePainter() {\n const BUFFER_SIZE = 1e6 * 3;\n const positions = new BufferAttribute(new Float32Array(BUFFER_SIZE), 3);\n positions.usage = DynamicDrawUsage;\n const normals = new BufferAttribute(new Float32Array(BUFFER_SIZE), 3);\n normals.usage = DynamicDrawUsage;\n const colors = new BufferAttribute(new Float32Array(BUFFER_SIZE), 3);\n colors.usage = DynamicDrawUsage;\n const geometry = new BufferGeometry();\n geometry.setAttribute(\"position\", positions);\n geometry.setAttribute(\"normal\", normals);\n geometry.setAttribute(\"color\", colors);\n geometry.drawRange.count = 0;\n const material = new MeshStandardMaterial({\n vertexColors: true\n });\n const mesh = new Mesh(geometry, material);\n mesh.frustumCulled = false;\n function getPoints(size2) {\n const PI2 = Math.PI * 2;\n const sides = 10;\n const array = [];\n const radius = 0.01 * size2;\n for (let i = 0; i < sides; i++) {\n const angle = i / sides * PI2;\n array.push(new Vector3(Math.sin(angle) * radius, Math.cos(angle) * radius, 0));\n }\n return array;\n }\n const vector1 = new Vector3();\n const vector2 = new Vector3();\n const vector3 = new Vector3();\n const vector4 = new Vector3();\n const color = new Color(16777215);\n let size = 1;\n function stroke(position1, position2, matrix12, matrix22) {\n if (position1.distanceToSquared(position2) === 0)\n return;\n let count2 = geometry.drawRange.count;\n const points = getPoints(size);\n for (let i = 0, il = points.length; i < il; i++) {\n const vertex1 = points[i];\n const vertex2 = points[(i + 1) % il];\n vector1.copy(vertex1).applyMatrix4(matrix22).add(position2);\n vector2.copy(vertex2).applyMatrix4(matrix22).add(position2);\n vector3.copy(vertex2).applyMatrix4(matrix12).add(position1);\n vector4.copy(vertex1).applyMatrix4(matrix12).add(position1);\n vector1.toArray(positions.array, (count2 + 0) * 3);\n vector2.toArray(positions.array, (count2 + 1) * 3);\n vector4.toArray(positions.array, (count2 + 2) * 3);\n vector2.toArray(positions.array, (count2 + 3) * 3);\n vector3.toArray(positions.array, (count2 + 4) * 3);\n vector4.toArray(positions.array, (count2 + 5) * 3);\n vector1.copy(vertex1).applyMatrix4(matrix22).normalize();\n vector2.copy(vertex2).applyMatrix4(matrix22).normalize();\n vector3.copy(vertex2).applyMatrix4(matrix12).normalize();\n vector4.copy(vertex1).applyMatrix4(matrix12).normalize();\n vector1.toArray(normals.array, (count2 + 0) * 3);\n vector2.toArray(normals.array, (count2 + 1) * 3);\n vector4.toArray(normals.array, (count2 + 2) * 3);\n vector2.toArray(normals.array, (count2 + 3) * 3);\n vector3.toArray(normals.array, (count2 + 4) * 3);\n vector4.toArray(normals.array, (count2 + 5) * 3);\n color.toArray(colors.array, (count2 + 0) * 3);\n color.toArray(colors.array, (count2 + 1) * 3);\n color.toArray(colors.array, (count2 + 2) * 3);\n color.toArray(colors.array, (count2 + 3) * 3);\n color.toArray(colors.array, (count2 + 4) * 3);\n color.toArray(colors.array, (count2 + 5) * 3);\n count2 += 6;\n }\n geometry.drawRange.count = count2;\n }\n const up = new Vector3(0, 1, 0);\n const point1 = new Vector3();\n const point2 = new Vector3();\n const matrix1 = new Matrix4();\n const matrix2 = new Matrix4();\n function moveTo(position) {\n point1.copy(position);\n matrix1.lookAt(point2, point1, up);\n point2.copy(position);\n matrix2.copy(matrix1);\n }\n function lineTo(position) {\n point1.copy(position);\n matrix1.lookAt(point2, point1, up);\n stroke(point1, point2, matrix1, matrix2);\n point2.copy(point1);\n matrix2.copy(matrix1);\n }\n function setSize(value) {\n size = value;\n }\n let count = 0;\n function update() {\n const start = count;\n const end = geometry.drawRange.count;\n if (start === end)\n return;\n positions.updateRange.offset = start * 3;\n positions.updateRange.count = (end - start) * 3;\n positions.needsUpdate = true;\n normals.updateRange.offset = start * 3;\n normals.updateRange.count = (end - start) * 3;\n normals.needsUpdate = true;\n colors.updateRange.offset = start * 3;\n colors.updateRange.count = (end - start) * 3;\n colors.needsUpdate = true;\n count = geometry.drawRange.count;\n }\n return {\n mesh,\n moveTo,\n lineTo,\n setSize,\n update\n };\n}\nexport {\n TubePainter\n};\n//# sourceMappingURL=TubePainter.js.map\n","import { Matrix3, Vector3, Matrix4 } from \"three\";\nimport { VolumeSlice } from \"./VolumeSlice.js\";\nclass Volume {\n constructor(xLength, yLength, zLength, type, arrayBuffer) {\n if (xLength !== void 0) {\n this.xLength = Number(xLength) || 1;\n this.yLength = Number(yLength) || 1;\n this.zLength = Number(zLength) || 1;\n this.axisOrder = [\"x\", \"y\", \"z\"];\n switch (type) {\n case \"Uint8\":\n case \"uint8\":\n case \"uchar\":\n case \"unsigned char\":\n case \"uint8_t\":\n this.data = new Uint8Array(arrayBuffer);\n break;\n case \"Int8\":\n case \"int8\":\n case \"signed char\":\n case \"int8_t\":\n this.data = new Int8Array(arrayBuffer);\n break;\n case \"Int16\":\n case \"int16\":\n case \"short\":\n case \"short int\":\n case \"signed short\":\n case \"signed short int\":\n case \"int16_t\":\n this.data = new Int16Array(arrayBuffer);\n break;\n case \"Uint16\":\n case \"uint16\":\n case \"ushort\":\n case \"unsigned short\":\n case \"unsigned short int\":\n case \"uint16_t\":\n this.data = new Uint16Array(arrayBuffer);\n break;\n case \"Int32\":\n case \"int32\":\n case \"int\":\n case \"signed int\":\n case \"int32_t\":\n this.data = new Int32Array(arrayBuffer);\n break;\n case \"Uint32\":\n case \"uint32\":\n case \"uint\":\n case \"unsigned int\":\n case \"uint32_t\":\n this.data = new Uint32Array(arrayBuffer);\n break;\n case \"longlong\":\n case \"long long\":\n case \"long long int\":\n case \"signed long long\":\n case \"signed long long int\":\n case \"int64\":\n case \"int64_t\":\n case \"ulonglong\":\n case \"unsigned long long\":\n case \"unsigned long long int\":\n case \"uint64\":\n case \"uint64_t\":\n throw new Error(\"Error in Volume constructor : this type is not supported in JavaScript\");\n case \"Float32\":\n case \"float32\":\n case \"float\":\n this.data = new Float32Array(arrayBuffer);\n break;\n case \"Float64\":\n case \"float64\":\n case \"double\":\n this.data = new Float64Array(arrayBuffer);\n break;\n default:\n this.data = new Uint8Array(arrayBuffer);\n }\n if (this.data.length !== this.xLength * this.yLength * this.zLength) {\n throw new Error(\"Error in Volume constructor, lengths are not matching arrayBuffer size\");\n }\n }\n this.spacing = [1, 1, 1];\n this.offset = [0, 0, 0];\n this.matrix = new Matrix3();\n this.matrix.identity();\n let lowerThreshold = -Infinity;\n Object.defineProperty(this, \"lowerThreshold\", {\n get: function() {\n return lowerThreshold;\n },\n set: function(value) {\n lowerThreshold = value;\n this.sliceList.forEach(function(slice) {\n slice.geometryNeedsUpdate = true;\n });\n }\n });\n let upperThreshold = Infinity;\n Object.defineProperty(this, \"upperThreshold\", {\n get: function() {\n return upperThreshold;\n },\n set: function(value) {\n upperThreshold = value;\n this.sliceList.forEach(function(slice) {\n slice.geometryNeedsUpdate = true;\n });\n }\n });\n this.sliceList = [];\n this.segmentation = false;\n }\n /**\n * @member {Function} getData Shortcut for data[access(i,j,k)]\n * @memberof Volume\n * @param {number} i First coordinate\n * @param {number} j Second coordinate\n * @param {number} k Third coordinate\n * @returns {number} value in the data array\n */\n getData(i, j, k) {\n return this.data[k * this.xLength * this.yLength + j * this.xLength + i];\n }\n /**\n * @member {Function} access compute the index in the data array corresponding to the given coordinates in IJK system\n * @memberof Volume\n * @param {number} i First coordinate\n * @param {number} j Second coordinate\n * @param {number} k Third coordinate\n * @returns {number} index\n */\n access(i, j, k) {\n return k * this.xLength * this.yLength + j * this.xLength + i;\n }\n /**\n * @member {Function} reverseAccess Retrieve the IJK coordinates of the voxel corresponding of the given index in the data\n * @memberof Volume\n * @param {number} index index of the voxel\n * @returns {Array} [x,y,z]\n */\n reverseAccess(index) {\n const z = Math.floor(index / (this.yLength * this.xLength));\n const y = Math.floor((index - z * this.yLength * this.xLength) / this.xLength);\n const x = index - z * this.yLength * this.xLength - y * this.xLength;\n return [x, y, z];\n }\n /**\n * @member {Function} map Apply a function to all the voxels, be careful, the value will be replaced\n * @memberof Volume\n * @param {Function} functionToMap A function to apply to every voxel, will be called with the following parameters :\n * value of the voxel\n * index of the voxel\n * the data (TypedArray)\n * @param {Object} context You can specify a context in which call the function, default if this Volume\n * @returns {Volume} this\n */\n map(functionToMap, context) {\n const length = this.data.length;\n context = context || this;\n for (let i = 0; i < length; i++) {\n this.data[i] = functionToMap.call(context, this.data[i], i, this.data);\n }\n return this;\n }\n /**\n * @member {Function} extractPerpendicularPlane Compute the orientation of the slice and returns all the information relative to the geometry such as sliceAccess, the plane matrix (orientation and position in RAS coordinate) and the dimensions of the plane in both coordinate system.\n * @memberof Volume\n * @param {string} axis the normal axis to the slice 'x' 'y' or 'z'\n * @param {number} index the index of the slice\n * @returns {Object} an object containing all the usefull information on the geometry of the slice\n */\n extractPerpendicularPlane(axis, RASIndex) {\n let firstSpacing, secondSpacing, positionOffset, IJKIndex;\n const axisInIJK = new Vector3(), firstDirection = new Vector3(), secondDirection = new Vector3(), planeMatrix = new Matrix4().identity(), volume = this;\n const dimensions = new Vector3(this.xLength, this.yLength, this.zLength);\n switch (axis) {\n case \"x\":\n axisInIJK.set(1, 0, 0);\n firstDirection.set(0, 0, -1);\n secondDirection.set(0, -1, 0);\n firstSpacing = this.spacing[this.axisOrder.indexOf(\"z\")];\n secondSpacing = this.spacing[this.axisOrder.indexOf(\"y\")];\n IJKIndex = new Vector3(RASIndex, 0, 0);\n planeMatrix.multiply(new Matrix4().makeRotationY(Math.PI / 2));\n positionOffset = (volume.RASDimensions[0] - 1) / 2;\n planeMatrix.setPosition(new Vector3(RASIndex - positionOffset, 0, 0));\n break;\n case \"y\":\n axisInIJK.set(0, 1, 0);\n firstDirection.set(1, 0, 0);\n secondDirection.set(0, 0, 1);\n firstSpacing = this.spacing[this.axisOrder.indexOf(\"x\")];\n secondSpacing = this.spacing[this.axisOrder.indexOf(\"z\")];\n IJKIndex = new Vector3(0, RASIndex, 0);\n planeMatrix.multiply(new Matrix4().makeRotationX(-Math.PI / 2));\n positionOffset = (volume.RASDimensions[1] - 1) / 2;\n planeMatrix.setPosition(new Vector3(0, RASIndex - positionOffset, 0));\n break;\n case \"z\":\n default:\n axisInIJK.set(0, 0, 1);\n firstDirection.set(1, 0, 0);\n secondDirection.set(0, -1, 0);\n firstSpacing = this.spacing[this.axisOrder.indexOf(\"x\")];\n secondSpacing = this.spacing[this.axisOrder.indexOf(\"y\")];\n IJKIndex = new Vector3(0, 0, RASIndex);\n positionOffset = (volume.RASDimensions[2] - 1) / 2;\n planeMatrix.setPosition(new Vector3(0, 0, RASIndex - positionOffset));\n break;\n }\n let iLength, jLength;\n if (!this.segmentation) {\n firstDirection.applyMatrix4(volume.inverseMatrix).normalize();\n secondDirection.applyMatrix4(volume.inverseMatrix).normalize();\n axisInIJK.applyMatrix4(volume.inverseMatrix).normalize();\n }\n firstDirection.arglet = \"i\";\n secondDirection.arglet = \"j\";\n iLength = Math.floor(Math.abs(firstDirection.dot(dimensions)));\n jLength = Math.floor(Math.abs(secondDirection.dot(dimensions)));\n const planeWidth = Math.abs(iLength * firstSpacing);\n const planeHeight = Math.abs(jLength * secondSpacing);\n IJKIndex = Math.abs(Math.round(IJKIndex.applyMatrix4(volume.inverseMatrix).dot(axisInIJK)));\n const base = [new Vector3(1, 0, 0), new Vector3(0, 1, 0), new Vector3(0, 0, 1)];\n const iDirection = [firstDirection, secondDirection, axisInIJK].find(function(x) {\n return Math.abs(x.dot(base[0])) > 0.9;\n });\n const jDirection = [firstDirection, secondDirection, axisInIJK].find(function(x) {\n return Math.abs(x.dot(base[1])) > 0.9;\n });\n const kDirection = [firstDirection, secondDirection, axisInIJK].find(function(x) {\n return Math.abs(x.dot(base[2])) > 0.9;\n });\n function sliceAccess(i, j) {\n const si = iDirection === axisInIJK ? IJKIndex : iDirection.arglet === \"i\" ? i : j;\n const sj = jDirection === axisInIJK ? IJKIndex : jDirection.arglet === \"i\" ? i : j;\n const sk = kDirection === axisInIJK ? IJKIndex : kDirection.arglet === \"i\" ? i : j;\n const accessI = iDirection.dot(base[0]) > 0 ? si : volume.xLength - 1 - si;\n const accessJ = jDirection.dot(base[1]) > 0 ? sj : volume.yLength - 1 - sj;\n const accessK = kDirection.dot(base[2]) > 0 ? sk : volume.zLength - 1 - sk;\n return volume.access(accessI, accessJ, accessK);\n }\n return {\n iLength,\n jLength,\n sliceAccess,\n matrix: planeMatrix,\n planeWidth,\n planeHeight\n };\n }\n /**\n * @member {Function} extractSlice Returns a slice corresponding to the given axis and index\n * The coordinate are given in the Right Anterior Superior coordinate format\n * @memberof Volume\n * @param {string} axis the normal axis to the slice 'x' 'y' or 'z'\n * @param {number} index the index of the slice\n * @returns {VolumeSlice} the extracted slice\n */\n extractSlice(axis, index) {\n const slice = new VolumeSlice(this, index, axis);\n this.sliceList.push(slice);\n return slice;\n }\n /**\n * @member {Function} repaintAllSlices Call repaint on all the slices extracted from this volume\n * @see VolumeSlice.repaint\n * @memberof Volume\n * @returns {Volume} this\n */\n repaintAllSlices() {\n this.sliceList.forEach(function(slice) {\n slice.repaint();\n });\n return this;\n }\n /**\n * @member {Function} computeMinMax Compute the minimum and the maximum of the data in the volume\n * @memberof Volume\n * @returns {Array} [min,max]\n */\n computeMinMax() {\n let min = Infinity;\n let max = -Infinity;\n const datasize = this.data.length;\n let i = 0;\n for (i = 0; i < datasize; i++) {\n if (!isNaN(this.data[i])) {\n const value = this.data[i];\n min = Math.min(min, value);\n max = Math.max(max, value);\n }\n }\n this.min = min;\n this.max = max;\n return [min, max];\n }\n}\nexport {\n Volume\n};\n//# sourceMappingURL=Volume.js.map\n","\nexport default function potpack(boxes) {\n\n // calculate total box area and maximum box width\n let area = 0;\n let maxWidth = 0;\n\n for (const box of boxes) {\n area += box.w * box.h;\n maxWidth = Math.max(maxWidth, box.w);\n }\n\n // sort the boxes for insertion by height, descending\n boxes.sort((a, b) => b.h - a.h);\n\n // aim for a squarish resulting container,\n // slightly adjusted for sub-100% space utilization\n const startWidth = Math.max(Math.ceil(Math.sqrt(area / 0.95)), maxWidth);\n\n // start with a single empty space, unbounded at the bottom\n const spaces = [{x: 0, y: 0, w: startWidth, h: Infinity}];\n\n let width = 0;\n let height = 0;\n\n for (const box of boxes) {\n // look through spaces backwards so that we check smaller spaces first\n for (let i = spaces.length - 1; i >= 0; i--) {\n const space = spaces[i];\n\n // look for empty spaces that can accommodate the current box\n if (box.w > space.w || box.h > space.h) continue;\n\n // found the space; add the box to its top-left corner\n // |-------|-------|\n // | box | |\n // |_______| |\n // | space |\n // |_______________|\n box.x = space.x;\n box.y = space.y;\n\n height = Math.max(height, box.y + box.h);\n width = Math.max(width, box.x + box.w);\n\n if (box.w === space.w && box.h === space.h) {\n // space matches the box exactly; remove it\n const last = spaces.pop();\n if (i < spaces.length) spaces[i] = last;\n\n } else if (box.h === space.h) {\n // space matches the box height; update it accordingly\n // |-------|---------------|\n // | box | updated space |\n // |_______|_______________|\n space.x += box.w;\n space.w -= box.w;\n\n } else if (box.w === space.w) {\n // space matches the box width; update it accordingly\n // |---------------|\n // | box |\n // |_______________|\n // | updated space |\n // |_______________|\n space.y += box.h;\n space.h -= box.h;\n\n } else {\n // otherwise the box splits the space into two spaces\n // |-------|-----------|\n // | box | new space |\n // |_______|___________|\n // | updated space |\n // |___________________|\n spaces.push({\n x: space.x + box.w,\n y: space.y,\n w: space.w - box.w,\n h: box.h\n });\n space.y += box.h;\n space.h -= box.h;\n }\n break;\n }\n }\n\n return {\n w: width, // container width\n h: height, // container height\n fill: (area / (width * height)) || 0 // space utilization\n };\n}\n","import { REVISION } from \"three\";\nconst version = /* @__PURE__ */ (() => parseInt(REVISION.replace(/\\D+/g, \"\")))();\nexport {\n version\n};\n//# sourceMappingURL=constants.js.map\n","import { version } from \"./constants.js\";\nconst UV1 = version >= 125 ? \"uv1\" : \"uv2\";\nexport {\n UV1\n};\n//# sourceMappingURL=uv1.js.map\n","import { Scene, WebGLRenderTarget, FloatType, MeshPhongMaterial, MeshBasicMaterial, DoubleSide, PlaneGeometry, Mesh } from \"three\";\nimport potpack from \"potpack\";\nimport { UV1 } from \"../_polyfill/uv1.js\";\nclass ProgressiveLightMap {\n constructor(renderer, res = 1024) {\n this.renderer = renderer;\n this.res = res;\n this.lightMapContainers = [];\n this.compiled = false;\n this.scene = new Scene();\n this.scene.background = null;\n this.tinyTarget = new WebGLRenderTarget(1, 1);\n this.buffer1Active = false;\n this.firstUpdate = true;\n this.warned = false;\n const format = /(Android|iPad|iPhone|iPod)/g.test(navigator.userAgent) ? alfFloatType : FloatType;\n this.progressiveLightMap1 = new WebGLRenderTarget(this.res, this.res, { type: format });\n this.progressiveLightMap2 = new WebGLRenderTarget(this.res, this.res, { type: format });\n this.uvMat = new MeshPhongMaterial();\n this.uvMat.uniforms = {};\n this.uvMat.onBeforeCompile = (shader) => {\n shader.vertexShader = \"#define USE_LIGHTMAP\\n\" + shader.vertexShader.slice(0, -1) + `\tgl_Position = vec4((${UV1} - 0.5) * 2.0, 1.0, 1.0); }`;\n const bodyStart = shader.fragmentShader.indexOf(\"void main() {\");\n shader.fragmentShader = `varying vec2 v${UV1 === \"uv1\" ? UV1 : \"Uv2\"};\n` + shader.fragmentShader.slice(0, bodyStart) + \"\tuniform sampler2D previousShadowMap;\\n\tuniform float averagingWindow;\\n\" + shader.fragmentShader.slice(bodyStart - 1, -1) + `\nvec3 texelOld = texture2D(previousShadowMap, v${UV1 === \"uv1\" ? UV1 : \"Uv2\"}).rgb;\n\t\t\t\tgl_FragColor.rgb = mix(texelOld, gl_FragColor.rgb, 1.0/averagingWindow);\n\t\t\t}`;\n shader.uniforms.previousShadowMap = { value: this.progressiveLightMap1.texture };\n shader.uniforms.averagingWindow = { value: 100 };\n this.uvMat.uniforms = shader.uniforms;\n this.uvMat.userData.shader = shader;\n this.compiled = true;\n };\n }\n /**\n * Sets these objects' materials' lightmaps and modifies their uv1's.\n * @param {Object3D} objects An array of objects and lights to set up your lightmap.\n */\n addObjectsToLightMap(objects) {\n this.uv_boxes = [];\n const padding = 3 / this.res;\n for (let ob = 0; ob < objects.length; ob++) {\n const object = objects[ob];\n if (object.isLight) {\n this.scene.attach(object);\n continue;\n }\n if (!object.geometry.hasAttribute(\"uv\")) {\n console.warn(\"All lightmap objects need UVs!\");\n continue;\n }\n if (this.blurringPlane == null) {\n this._initializeBlurPlane(this.res, this.progressiveLightMap1);\n }\n object.material.lightMap = this.progressiveLightMap2.texture;\n object.material.dithering = true;\n object.castShadow = true;\n object.receiveShadow = true;\n object.renderOrder = 1e3 + ob;\n this.uv_boxes.push({ w: 1 + padding * 2, h: 1 + padding * 2, index: ob });\n this.lightMapContainers.push({ basicMat: object.material, object });\n this.compiled = false;\n }\n const dimensions = potpack(this.uv_boxes);\n this.uv_boxes.forEach((box) => {\n const uv1 = objects[box.index].geometry.getAttribute(\"uv\").clone();\n for (let i = 0; i < uv1.array.length; i += uv1.itemSize) {\n uv1.array[i] = (uv1.array[i] + box.x + padding) / dimensions.w;\n uv1.array[i + 1] = (uv1.array[i + 1] + box.y + padding) / dimensions.h;\n }\n objects[box.index].geometry.setAttribute(UV1, uv1);\n objects[box.index].geometry.getAttribute(UV1).needsUpdate = true;\n });\n }\n /**\n * This function renders each mesh one at a time into their respective surface maps\n * @param {Camera} camera Standard Rendering Camera\n * @param {number} blendWindow When >1, samples will accumulate over time.\n * @param {boolean} blurEdges Whether to fix UV Edges via blurring\n */\n update(camera, blendWindow = 100, blurEdges = true) {\n if (this.blurringPlane == null) {\n return;\n }\n const oldTarget = this.renderer.getRenderTarget();\n this.blurringPlane.visible = blurEdges;\n for (let l = 0; l < this.lightMapContainers.length; l++) {\n this.lightMapContainers[l].object.oldScene = this.lightMapContainers[l].object.parent;\n this.scene.attach(this.lightMapContainers[l].object);\n }\n if (this.firstUpdate) {\n this.renderer.setRenderTarget(this.tinyTarget);\n this.renderer.render(this.scene, camera);\n this.firstUpdate = false;\n }\n for (let l = 0; l < this.lightMapContainers.length; l++) {\n this.uvMat.uniforms.averagingWindow = { value: blendWindow };\n this.lightMapContainers[l].object.material = this.uvMat;\n this.lightMapContainers[l].object.oldFrustumCulled = this.lightMapContainers[l].object.frustumCulled;\n this.lightMapContainers[l].object.frustumCulled = false;\n }\n const activeMap = this.buffer1Active ? this.progressiveLightMap1 : this.progressiveLightMap2;\n const inactiveMap = this.buffer1Active ? this.progressiveLightMap2 : this.progressiveLightMap1;\n this.renderer.setRenderTarget(activeMap);\n this.uvMat.uniforms.previousShadowMap = { value: inactiveMap.texture };\n this.blurringPlane.material.uniforms.previousShadowMap = { value: inactiveMap.texture };\n this.buffer1Active = !this.buffer1Active;\n this.renderer.render(this.scene, camera);\n for (let l = 0; l < this.lightMapContainers.length; l++) {\n this.lightMapContainers[l].object.frustumCulled = this.lightMapContainers[l].object.oldFrustumCulled;\n this.lightMapContainers[l].object.material = this.lightMapContainers[l].basicMat;\n this.lightMapContainers[l].object.oldScene.attach(this.lightMapContainers[l].object);\n }\n this.renderer.setRenderTarget(oldTarget);\n }\n /** DEBUG\n * Draw the lightmap in the main scene. Call this after adding the objects to it.\n * @param {boolean} visible Whether the debug plane should be visible\n * @param {Vector3} position Where the debug plane should be drawn\n */\n showDebugLightmap(visible, position = void 0) {\n if (this.lightMapContainers.length == 0) {\n if (!this.warned) {\n console.warn(\"Call this after adding the objects!\");\n this.warned = true;\n }\n return;\n }\n if (this.labelMesh == null) {\n this.labelMaterial = new MeshBasicMaterial({\n map: this.progressiveLightMap1.texture,\n side: DoubleSide\n });\n this.labelPlane = new PlaneGeometry(100, 100);\n this.labelMesh = new Mesh(this.labelPlane, this.labelMaterial);\n this.labelMesh.position.y = 250;\n this.lightMapContainers[0].object.parent.add(this.labelMesh);\n }\n if (position != void 0) {\n this.labelMesh.position.copy(position);\n }\n this.labelMesh.visible = visible;\n }\n /**\n * INTERNAL Creates the Blurring Plane\n * @param {number} res The square resolution of this object's lightMap.\n * @param {WebGLRenderTexture} lightMap The lightmap to initialize the plane with.\n */\n _initializeBlurPlane(res, lightMap = null) {\n const blurMaterial = new MeshBasicMaterial();\n blurMaterial.uniforms = {\n previousShadowMap: { value: null },\n pixelOffset: { value: 1 / res },\n polygonOffset: true,\n polygonOffsetFactor: -1,\n polygonOffsetUnits: 3\n };\n blurMaterial.onBeforeCompile = (shader) => {\n shader.vertexShader = \"#define USE_UV\\n\" + shader.vertexShader.slice(0, -1) + \"\tgl_Position = vec4((uv - 0.5) * 2.0, 1.0, 1.0); }\";\n const bodyStart = shader.fragmentShader.indexOf(\"void main() {\");\n shader.fragmentShader = \"#define USE_UV\\n\" + shader.fragmentShader.slice(0, bodyStart) + \"\tuniform sampler2D previousShadowMap;\\n\tuniform float pixelOffset;\\n\" + shader.fragmentShader.slice(bodyStart - 1, -1) + `\tgl_FragColor.rgb = (\n\t\t\t texture2D(previousShadowMap, vUv + vec2( pixelOffset, 0.0 )).rgb +\n\t\t\t texture2D(previousShadowMap, vUv + vec2( 0.0 , pixelOffset)).rgb +\n\t\t\t texture2D(previousShadowMap, vUv + vec2( 0.0 , -pixelOffset)).rgb +\n\t\t\t texture2D(previousShadowMap, vUv + vec2(-pixelOffset, 0.0 )).rgb +\n\t\t\t texture2D(previousShadowMap, vUv + vec2( pixelOffset, pixelOffset)).rgb +\n\t\t\t texture2D(previousShadowMap, vUv + vec2(-pixelOffset, pixelOffset)).rgb +\n\t\t\t texture2D(previousShadowMap, vUv + vec2( pixelOffset, -pixelOffset)).rgb +\n\t\t\t texture2D(previousShadowMap, vUv + vec2(-pixelOffset, -pixelOffset)).rgb)/8.0;\n\t\t}`;\n shader.uniforms.previousShadowMap = { value: lightMap.texture };\n shader.uniforms.pixelOffset = { value: 0.5 / res };\n blurMaterial.uniforms = shader.uniforms;\n blurMaterial.userData.shader = shader;\n this.compiled = true;\n };\n this.blurringPlane = new Mesh(new PlaneGeometry(1, 1), blurMaterial);\n this.blurringPlane.name = \"Blurring Plane\";\n this.blurringPlane.frustumCulled = false;\n this.blurringPlane.renderOrder = 0;\n this.blurringPlane.material.depthWrite = false;\n this.scene.add(this.blurringPlane);\n }\n}\nexport {\n ProgressiveLightMap\n};\n//# sourceMappingURL=ProgressiveLightmap.js.map\n","import { Object3D, Vector2, Vector3, Matrix4 } from \"three\";\nclass CSS2DObject extends Object3D {\n constructor(element = document.createElement(\"div\")) {\n super();\n this.isCSS2DObject = true;\n this.element = element;\n this.element.style.position = \"absolute\";\n this.element.style.userSelect = \"none\";\n this.element.setAttribute(\"draggable\", false);\n this.center = new Vector2(0.5, 0.5);\n this.addEventListener(\"removed\", function() {\n this.traverse(function(object) {\n if (object.element instanceof Element && object.element.parentNode !== null) {\n object.element.parentNode.removeChild(object.element);\n }\n });\n });\n }\n copy(source, recursive) {\n super.copy(source, recursive);\n this.element = source.element.cloneNode(true);\n this.center = source.center;\n return this;\n }\n}\nconst _vector = /* @__PURE__ */ new Vector3();\nconst _viewMatrix = /* @__PURE__ */ new Matrix4();\nconst _viewProjectionMatrix = /* @__PURE__ */ new Matrix4();\nconst _a = /* @__PURE__ */ new Vector3();\nconst _b = /* @__PURE__ */ new Vector3();\nclass CSS2DRenderer {\n constructor(parameters = {}) {\n const _this = this;\n let _width, _height;\n let _widthHalf, _heightHalf;\n const cache = {\n objects: /* @__PURE__ */ new WeakMap()\n };\n const domElement = parameters.element !== void 0 ? parameters.element : document.createElement(\"div\");\n domElement.style.overflow = \"hidden\";\n this.domElement = domElement;\n this.getSize = function() {\n return {\n width: _width,\n height: _height\n };\n };\n this.render = function(scene, camera) {\n if (scene.matrixWorldAutoUpdate === true)\n scene.updateMatrixWorld();\n if (camera.parent === null && camera.matrixWorldAutoUpdate === true)\n camera.updateMatrixWorld();\n _viewMatrix.copy(camera.matrixWorldInverse);\n _viewProjectionMatrix.multiplyMatrices(camera.projectionMatrix, _viewMatrix);\n renderObject(scene, scene, camera);\n zOrder(scene);\n };\n this.setSize = function(width, height) {\n _width = width;\n _height = height;\n _widthHalf = _width / 2;\n _heightHalf = _height / 2;\n domElement.style.width = width + \"px\";\n domElement.style.height = height + \"px\";\n };\n function renderObject(object, scene, camera) {\n if (object.isCSS2DObject) {\n _vector.setFromMatrixPosition(object.matrixWorld);\n _vector.applyMatrix4(_viewProjectionMatrix);\n const visible = object.visible === true && _vector.z >= -1 && _vector.z <= 1 && object.layers.test(camera.layers) === true;\n object.element.style.display = visible === true ? \"\" : \"none\";\n if (visible === true) {\n object.onBeforeRender(_this, scene, camera);\n const element = object.element;\n element.style.transform = \"translate(\" + -100 * object.center.x + \"%,\" + -100 * object.center.y + \"%)translate(\" + (_vector.x * _widthHalf + _widthHalf) + \"px,\" + (-_vector.y * _heightHalf + _heightHalf) + \"px)\";\n if (element.parentNode !== domElement) {\n domElement.appendChild(element);\n }\n object.onAfterRender(_this, scene, camera);\n }\n const objectData = {\n distanceToCameraSquared: getDistanceToSquared(camera, object)\n };\n cache.objects.set(object, objectData);\n }\n for (let i = 0, l = object.children.length; i < l; i++) {\n renderObject(object.children[i], scene, camera);\n }\n }\n function getDistanceToSquared(object1, object2) {\n _a.setFromMatrixPosition(object1.matrixWorld);\n _b.setFromMatrixPosition(object2.matrixWorld);\n return _a.distanceToSquared(_b);\n }\n function filterAndFlatten(scene) {\n const result = [];\n scene.traverse(function(object) {\n if (object.isCSS2DObject)\n result.push(object);\n });\n return result;\n }\n function zOrder(scene) {\n const sorted = filterAndFlatten(scene).sort(function(a, b) {\n if (a.renderOrder !== b.renderOrder) {\n return b.renderOrder - a.renderOrder;\n }\n const distanceA = cache.objects.get(a).distanceToCameraSquared;\n const distanceB = cache.objects.get(b).distanceToCameraSquared;\n return distanceA - distanceB;\n });\n const zMax = sorted.length;\n for (let i = 0, l = sorted.length; i < l; i++) {\n sorted[i].element.style.zIndex = zMax - i;\n }\n }\n }\n}\nexport {\n CSS2DObject,\n CSS2DRenderer\n};\n//# sourceMappingURL=CSS2DRenderer.js.map\n","import { Object3D, Vector3, Quaternion, Matrix4 } from \"three\";\nconst _position = /* @__PURE__ */ new Vector3();\nconst _quaternion = /* @__PURE__ */ new Quaternion();\nconst _scale = /* @__PURE__ */ new Vector3();\nclass CSS3DObject extends Object3D {\n constructor(element = document.createElement(\"div\")) {\n super();\n this.isCSS3DObject = true;\n this.element = element;\n this.element.style.position = \"absolute\";\n this.element.style.pointerEvents = \"auto\";\n this.element.style.userSelect = \"none\";\n this.element.setAttribute(\"draggable\", false);\n this.addEventListener(\"removed\", function() {\n this.traverse(function(object) {\n if (object.element instanceof Element && object.element.parentNode !== null) {\n object.element.parentNode.removeChild(object.element);\n }\n });\n });\n }\n copy(source, recursive) {\n super.copy(source, recursive);\n this.element = source.element.cloneNode(true);\n return this;\n }\n}\nclass CSS3DSprite extends CSS3DObject {\n constructor(element) {\n super(element);\n this.isCSS3DSprite = true;\n this.rotation2D = 0;\n }\n copy(source, recursive) {\n super.copy(source, recursive);\n this.rotation2D = source.rotation2D;\n return this;\n }\n}\nconst _matrix = /* @__PURE__ */ new Matrix4();\nconst _matrix2 = /* @__PURE__ */ new Matrix4();\nclass CSS3DRenderer {\n constructor(parameters = {}) {\n const _this = this;\n let _width, _height;\n let _widthHalf, _heightHalf;\n const cache = {\n camera: { style: \"\" },\n objects: /* @__PURE__ */ new WeakMap()\n };\n const domElement = parameters.element !== void 0 ? parameters.element : document.createElement(\"div\");\n domElement.style.overflow = \"hidden\";\n this.domElement = domElement;\n const viewElement = document.createElement(\"div\");\n viewElement.style.transformOrigin = \"0 0\";\n viewElement.style.pointerEvents = \"none\";\n domElement.appendChild(viewElement);\n const cameraElement = document.createElement(\"div\");\n cameraElement.style.transformStyle = \"preserve-3d\";\n viewElement.appendChild(cameraElement);\n this.getSize = function() {\n return {\n width: _width,\n height: _height\n };\n };\n this.render = function(scene, camera) {\n const fov = camera.projectionMatrix.elements[5] * _heightHalf;\n if (camera.view && camera.view.enabled) {\n viewElement.style.transform = `translate( ${-camera.view.offsetX * (_width / camera.view.width)}px, ${-camera.view.offsetY * (_height / camera.view.height)}px )`;\n viewElement.style.transform += `scale( ${camera.view.fullWidth / camera.view.width}, ${camera.view.fullHeight / camera.view.height} )`;\n } else {\n viewElement.style.transform = \"\";\n }\n if (scene.matrixWorldAutoUpdate === true)\n scene.updateMatrixWorld();\n if (camera.parent === null && camera.matrixWorldAutoUpdate === true)\n camera.updateMatrixWorld();\n let tx, ty;\n if (camera.isOrthographicCamera) {\n tx = -(camera.right + camera.left) / 2;\n ty = (camera.top + camera.bottom) / 2;\n }\n const scaleByViewOffset = camera.view && camera.view.enabled ? camera.view.height / camera.view.fullHeight : 1;\n const cameraCSSMatrix = camera.isOrthographicCamera ? `scale( ${scaleByViewOffset} )scale(` + fov + \")translate(\" + epsilon(tx) + \"px,\" + epsilon(ty) + \"px)\" + getCameraCSSMatrix(camera.matrixWorldInverse) : `scale( ${scaleByViewOffset} )translateZ(` + fov + \"px)\" + getCameraCSSMatrix(camera.matrixWorldInverse);\n const perspective = camera.isPerspectiveCamera ? \"perspective(\" + fov + \"px) \" : \"\";\n const style = perspective + cameraCSSMatrix + \"translate(\" + _widthHalf + \"px,\" + _heightHalf + \"px)\";\n if (cache.camera.style !== style) {\n cameraElement.style.transform = style;\n cache.camera.style = style;\n }\n renderObject(scene, scene, camera);\n };\n this.setSize = function(width, height) {\n _width = width;\n _height = height;\n _widthHalf = _width / 2;\n _heightHalf = _height / 2;\n domElement.style.width = width + \"px\";\n domElement.style.height = height + \"px\";\n viewElement.style.width = width + \"px\";\n viewElement.style.height = height + \"px\";\n cameraElement.style.width = width + \"px\";\n cameraElement.style.height = height + \"px\";\n };\n function epsilon(value) {\n return Math.abs(value) < 1e-10 ? 0 : value;\n }\n function getCameraCSSMatrix(matrix) {\n const elements = matrix.elements;\n return \"matrix3d(\" + epsilon(elements[0]) + \",\" + epsilon(-elements[1]) + \",\" + epsilon(elements[2]) + \",\" + epsilon(elements[3]) + \",\" + epsilon(elements[4]) + \",\" + epsilon(-elements[5]) + \",\" + epsilon(elements[6]) + \",\" + epsilon(elements[7]) + \",\" + epsilon(elements[8]) + \",\" + epsilon(-elements[9]) + \",\" + epsilon(elements[10]) + \",\" + epsilon(elements[11]) + \",\" + epsilon(elements[12]) + \",\" + epsilon(-elements[13]) + \",\" + epsilon(elements[14]) + \",\" + epsilon(elements[15]) + \")\";\n }\n function getObjectCSSMatrix(matrix) {\n const elements = matrix.elements;\n const matrix3d = \"matrix3d(\" + epsilon(elements[0]) + \",\" + epsilon(elements[1]) + \",\" + epsilon(elements[2]) + \",\" + epsilon(elements[3]) + \",\" + epsilon(-elements[4]) + \",\" + epsilon(-elements[5]) + \",\" + epsilon(-elements[6]) + \",\" + epsilon(-elements[7]) + \",\" + epsilon(elements[8]) + \",\" + epsilon(elements[9]) + \",\" + epsilon(elements[10]) + \",\" + epsilon(elements[11]) + \",\" + epsilon(elements[12]) + \",\" + epsilon(elements[13]) + \",\" + epsilon(elements[14]) + \",\" + epsilon(elements[15]) + \")\";\n return \"translate(-50%,-50%)\" + matrix3d;\n }\n function renderObject(object, scene, camera, cameraCSSMatrix) {\n if (object.isCSS3DObject) {\n const visible = object.visible === true && object.layers.test(camera.layers) === true;\n object.element.style.display = visible === true ? \"\" : \"none\";\n if (visible === true) {\n object.onBeforeRender(_this, scene, camera);\n let style;\n if (object.isCSS3DSprite) {\n _matrix.copy(camera.matrixWorldInverse);\n _matrix.transpose();\n if (object.rotation2D !== 0)\n _matrix.multiply(_matrix2.makeRotationZ(object.rotation2D));\n object.matrixWorld.decompose(_position, _quaternion, _scale);\n _matrix.setPosition(_position);\n _matrix.scale(_scale);\n _matrix.elements[3] = 0;\n _matrix.elements[7] = 0;\n _matrix.elements[11] = 0;\n _matrix.elements[15] = 1;\n style = getObjectCSSMatrix(_matrix);\n } else {\n style = getObjectCSSMatrix(object.matrixWorld);\n }\n const element = object.element;\n const cachedObject = cache.objects.get(object);\n if (cachedObject === void 0 || cachedObject.style !== style) {\n element.style.transform = style;\n const objectData = { style };\n cache.objects.set(object, objectData);\n }\n if (element.parentNode !== cameraElement) {\n cameraElement.appendChild(element);\n }\n object.onAfterRender(_this, scene, camera);\n }\n }\n for (let i = 0, l = object.children.length; i < l; i++) {\n renderObject(object.children[i], scene, camera);\n }\n }\n }\n}\nexport {\n CSS3DObject,\n CSS3DRenderer,\n CSS3DSprite\n};\n//# sourceMappingURL=CSS3DRenderer.js.map\n","import { Vector3, Color, Vector2, Vector4, Box3, Matrix4, Frustum, Matrix3, DoubleSide } from \"three\";\nclass RenderableObject {\n constructor() {\n this.id = 0;\n this.object = null;\n this.z = 0;\n this.renderOrder = 0;\n }\n}\nclass RenderableFace {\n constructor() {\n this.id = 0;\n this.v1 = new RenderableVertex();\n this.v2 = new RenderableVertex();\n this.v3 = new RenderableVertex();\n this.normalModel = new Vector3();\n this.vertexNormalsModel = [new Vector3(), new Vector3(), new Vector3()];\n this.vertexNormalsLength = 0;\n this.color = new Color();\n this.material = null;\n this.uvs = [new Vector2(), new Vector2(), new Vector2()];\n this.z = 0;\n this.renderOrder = 0;\n }\n}\nclass RenderableVertex {\n constructor() {\n this.position = new Vector3();\n this.positionWorld = new Vector3();\n this.positionScreen = new Vector4();\n this.visible = true;\n }\n copy(vertex) {\n this.positionWorld.copy(vertex.positionWorld);\n this.positionScreen.copy(vertex.positionScreen);\n }\n}\nclass RenderableLine {\n constructor() {\n this.id = 0;\n this.v1 = new RenderableVertex();\n this.v2 = new RenderableVertex();\n this.vertexColors = [new Color(), new Color()];\n this.material = null;\n this.z = 0;\n this.renderOrder = 0;\n }\n}\nclass RenderableSprite {\n constructor() {\n this.id = 0;\n this.object = null;\n this.x = 0;\n this.y = 0;\n this.z = 0;\n this.rotation = 0;\n this.scale = new Vector2();\n this.material = null;\n this.renderOrder = 0;\n }\n}\nclass Projector {\n constructor() {\n let _object, _objectCount, _objectPoolLength = 0, _vertex, _vertexCount, _vertexPoolLength = 0, _face, _faceCount, _facePoolLength = 0, _line, _lineCount, _linePoolLength = 0, _sprite, _spriteCount, _spritePoolLength = 0, _modelMatrix;\n const _renderData = { objects: [], lights: [], elements: [] }, _vector3 = new Vector3(), _vector4 = new Vector4(), _clipBox = new Box3(new Vector3(-1, -1, -1), new Vector3(1, 1, 1)), _boundingBox = new Box3(), _points3 = new Array(3), _viewMatrix = new Matrix4(), _viewProjectionMatrix = new Matrix4(), _modelViewProjectionMatrix = new Matrix4(), _frustum = new Frustum(), _objectPool = [], _vertexPool = [], _facePool = [], _linePool = [], _spritePool = [];\n function RenderList() {\n const normals = [];\n const colors = [];\n const uvs = [];\n let object = null;\n const normalMatrix = new Matrix3();\n function setObject(value) {\n object = value;\n normalMatrix.getNormalMatrix(object.matrixWorld);\n normals.length = 0;\n colors.length = 0;\n uvs.length = 0;\n }\n function projectVertex(vertex) {\n const position = vertex.position;\n const positionWorld = vertex.positionWorld;\n const positionScreen = vertex.positionScreen;\n positionWorld.copy(position).applyMatrix4(_modelMatrix);\n positionScreen.copy(positionWorld).applyMatrix4(_viewProjectionMatrix);\n const invW = 1 / positionScreen.w;\n positionScreen.x *= invW;\n positionScreen.y *= invW;\n positionScreen.z *= invW;\n vertex.visible = positionScreen.x >= -1 && positionScreen.x <= 1 && positionScreen.y >= -1 && positionScreen.y <= 1 && positionScreen.z >= -1 && positionScreen.z <= 1;\n }\n function pushVertex(x, y, z) {\n _vertex = getNextVertexInPool();\n _vertex.position.set(x, y, z);\n projectVertex(_vertex);\n }\n function pushNormal(x, y, z) {\n normals.push(x, y, z);\n }\n function pushColor(r, g, b) {\n colors.push(r, g, b);\n }\n function pushUv(x, y) {\n uvs.push(x, y);\n }\n function checkTriangleVisibility(v1, v2, v3) {\n if (v1.visible === true || v2.visible === true || v3.visible === true)\n return true;\n _points3[0] = v1.positionScreen;\n _points3[1] = v2.positionScreen;\n _points3[2] = v3.positionScreen;\n return _clipBox.intersectsBox(_boundingBox.setFromPoints(_points3));\n }\n function checkBackfaceCulling(v1, v2, v3) {\n return (v3.positionScreen.x - v1.positionScreen.x) * (v2.positionScreen.y - v1.positionScreen.y) - (v3.positionScreen.y - v1.positionScreen.y) * (v2.positionScreen.x - v1.positionScreen.x) < 0;\n }\n function pushLine(a, b) {\n const v1 = _vertexPool[a];\n const v2 = _vertexPool[b];\n v1.positionScreen.copy(v1.position).applyMatrix4(_modelViewProjectionMatrix);\n v2.positionScreen.copy(v2.position).applyMatrix4(_modelViewProjectionMatrix);\n if (clipLine(v1.positionScreen, v2.positionScreen) === true) {\n v1.positionScreen.multiplyScalar(1 / v1.positionScreen.w);\n v2.positionScreen.multiplyScalar(1 / v2.positionScreen.w);\n _line = getNextLineInPool();\n _line.id = object.id;\n _line.v1.copy(v1);\n _line.v2.copy(v2);\n _line.z = Math.max(v1.positionScreen.z, v2.positionScreen.z);\n _line.renderOrder = object.renderOrder;\n _line.material = object.material;\n if (object.material.vertexColors) {\n _line.vertexColors[0].fromArray(colors, a * 3);\n _line.vertexColors[1].fromArray(colors, b * 3);\n }\n _renderData.elements.push(_line);\n }\n }\n function pushTriangle(a, b, c, material) {\n const v1 = _vertexPool[a];\n const v2 = _vertexPool[b];\n const v3 = _vertexPool[c];\n if (checkTriangleVisibility(v1, v2, v3) === false)\n return;\n if (material.side === DoubleSide || checkBackfaceCulling(v1, v2, v3) === true) {\n _face = getNextFaceInPool();\n _face.id = object.id;\n _face.v1.copy(v1);\n _face.v2.copy(v2);\n _face.v3.copy(v3);\n _face.z = (v1.positionScreen.z + v2.positionScreen.z + v3.positionScreen.z) / 3;\n _face.renderOrder = object.renderOrder;\n _vector3.subVectors(v3.position, v2.position);\n _vector4.subVectors(v1.position, v2.position);\n _vector3.cross(_vector4);\n _face.normalModel.copy(_vector3);\n _face.normalModel.applyMatrix3(normalMatrix).normalize();\n for (let i = 0; i < 3; i++) {\n const normal = _face.vertexNormalsModel[i];\n normal.fromArray(normals, arguments[i] * 3);\n normal.applyMatrix3(normalMatrix).normalize();\n const uv = _face.uvs[i];\n uv.fromArray(uvs, arguments[i] * 2);\n }\n _face.vertexNormalsLength = 3;\n _face.material = material;\n if (material.vertexColors) {\n _face.color.fromArray(colors, a * 3);\n }\n _renderData.elements.push(_face);\n }\n }\n return {\n setObject,\n projectVertex,\n checkTriangleVisibility,\n checkBackfaceCulling,\n pushVertex,\n pushNormal,\n pushColor,\n pushUv,\n pushLine,\n pushTriangle\n };\n }\n const renderList = new RenderList();\n function projectObject(object) {\n if (object.visible === false)\n return;\n if (object.isLight) {\n _renderData.lights.push(object);\n } else if (object.isMesh || object.isLine || object.isPoints) {\n if (object.material.visible === false)\n return;\n if (object.frustumCulled === true && _frustum.intersectsObject(object) === false)\n return;\n addObject(object);\n } else if (object.isSprite) {\n if (object.material.visible === false)\n return;\n if (object.frustumCulled === true && _frustum.intersectsSprite(object) === false)\n return;\n addObject(object);\n }\n const children = object.children;\n for (let i = 0, l = children.length; i < l; i++) {\n projectObject(children[i]);\n }\n }\n function addObject(object) {\n _object = getNextObjectInPool();\n _object.id = object.id;\n _object.object = object;\n _vector3.setFromMatrixPosition(object.matrixWorld);\n _vector3.applyMatrix4(_viewProjectionMatrix);\n _object.z = _vector3.z;\n _object.renderOrder = object.renderOrder;\n _renderData.objects.push(_object);\n }\n this.projectScene = function(scene, camera, sortObjects, sortElements) {\n _faceCount = 0;\n _lineCount = 0;\n _spriteCount = 0;\n _renderData.elements.length = 0;\n if (scene.matrixWorldAutoUpdate === true)\n scene.updateMatrixWorld();\n if (camera.parent === null && camera.matrixWorldAutoUpdate === true)\n camera.updateMatrixWorld();\n _viewMatrix.copy(camera.matrixWorldInverse);\n _viewProjectionMatrix.multiplyMatrices(camera.projectionMatrix, _viewMatrix);\n _frustum.setFromProjectionMatrix(_viewProjectionMatrix);\n _objectCount = 0;\n _renderData.objects.length = 0;\n _renderData.lights.length = 0;\n projectObject(scene);\n if (sortObjects === true) {\n _renderData.objects.sort(painterSort);\n }\n const objects = _renderData.objects;\n for (let o = 0, ol = objects.length; o < ol; o++) {\n const object = objects[o].object;\n const geometry = object.geometry;\n renderList.setObject(object);\n _modelMatrix = object.matrixWorld;\n _vertexCount = 0;\n if (object.isMesh) {\n let material = object.material;\n const isMultiMaterial = Array.isArray(material);\n const attributes = geometry.attributes;\n const groups = geometry.groups;\n if (attributes.position === void 0)\n continue;\n const positions = attributes.position.array;\n for (let i = 0, l = positions.length; i < l; i += 3) {\n let x = positions[i];\n let y = positions[i + 1];\n let z = positions[i + 2];\n const morphTargets = geometry.morphAttributes.position;\n if (morphTargets !== void 0) {\n const morphTargetsRelative = geometry.morphTargetsRelative;\n const morphInfluences = object.morphTargetInfluences;\n for (let t = 0, tl = morphTargets.length; t < tl; t++) {\n const influence = morphInfluences[t];\n if (influence === 0)\n continue;\n const target = morphTargets[t];\n if (morphTargetsRelative) {\n x += target.getX(i / 3) * influence;\n y += target.getY(i / 3) * influence;\n z += target.getZ(i / 3) * influence;\n } else {\n x += (target.getX(i / 3) - positions[i]) * influence;\n y += (target.getY(i / 3) - positions[i + 1]) * influence;\n z += (target.getZ(i / 3) - positions[i + 2]) * influence;\n }\n }\n }\n renderList.pushVertex(x, y, z);\n }\n if (attributes.normal !== void 0) {\n const normals = attributes.normal.array;\n for (let i = 0, l = normals.length; i < l; i += 3) {\n renderList.pushNormal(normals[i], normals[i + 1], normals[i + 2]);\n }\n }\n if (attributes.color !== void 0) {\n const colors = attributes.color.array;\n for (let i = 0, l = colors.length; i < l; i += 3) {\n renderList.pushColor(colors[i], colors[i + 1], colors[i + 2]);\n }\n }\n if (attributes.uv !== void 0) {\n const uvs = attributes.uv.array;\n for (let i = 0, l = uvs.length; i < l; i += 2) {\n renderList.pushUv(uvs[i], uvs[i + 1]);\n }\n }\n if (geometry.index !== null) {\n const indices = geometry.index.array;\n if (groups.length > 0) {\n for (let g = 0; g < groups.length; g++) {\n const group = groups[g];\n material = isMultiMaterial === true ? object.material[group.materialIndex] : object.material;\n if (material === void 0)\n continue;\n for (let i = group.start, l = group.start + group.count; i < l; i += 3) {\n renderList.pushTriangle(indices[i], indices[i + 1], indices[i + 2], material);\n }\n }\n } else {\n for (let i = 0, l = indices.length; i < l; i += 3) {\n renderList.pushTriangle(indices[i], indices[i + 1], indices[i + 2], material);\n }\n }\n } else {\n if (groups.length > 0) {\n for (let g = 0; g < groups.length; g++) {\n const group = groups[g];\n material = isMultiMaterial === true ? object.material[group.materialIndex] : object.material;\n if (material === void 0)\n continue;\n for (let i = group.start, l = group.start + group.count; i < l; i += 3) {\n renderList.pushTriangle(i, i + 1, i + 2, material);\n }\n }\n } else {\n for (let i = 0, l = positions.length / 3; i < l; i += 3) {\n renderList.pushTriangle(i, i + 1, i + 2, material);\n }\n }\n }\n } else if (object.isLine) {\n _modelViewProjectionMatrix.multiplyMatrices(_viewProjectionMatrix, _modelMatrix);\n const attributes = geometry.attributes;\n if (attributes.position !== void 0) {\n const positions = attributes.position.array;\n for (let i = 0, l = positions.length; i < l; i += 3) {\n renderList.pushVertex(positions[i], positions[i + 1], positions[i + 2]);\n }\n if (attributes.color !== void 0) {\n const colors = attributes.color.array;\n for (let i = 0, l = colors.length; i < l; i += 3) {\n renderList.pushColor(colors[i], colors[i + 1], colors[i + 2]);\n }\n }\n if (geometry.index !== null) {\n const indices = geometry.index.array;\n for (let i = 0, l = indices.length; i < l; i += 2) {\n renderList.pushLine(indices[i], indices[i + 1]);\n }\n } else {\n const step = object.isLineSegments ? 2 : 1;\n for (let i = 0, l = positions.length / 3 - 1; i < l; i += step) {\n renderList.pushLine(i, i + 1);\n }\n }\n }\n } else if (object.isPoints) {\n _modelViewProjectionMatrix.multiplyMatrices(_viewProjectionMatrix, _modelMatrix);\n const attributes = geometry.attributes;\n if (attributes.position !== void 0) {\n const positions = attributes.position.array;\n for (let i = 0, l = positions.length; i < l; i += 3) {\n _vector4.set(positions[i], positions[i + 1], positions[i + 2], 1);\n _vector4.applyMatrix4(_modelViewProjectionMatrix);\n pushPoint(_vector4, object, camera);\n }\n }\n } else if (object.isSprite) {\n object.modelViewMatrix.multiplyMatrices(camera.matrixWorldInverse, object.matrixWorld);\n _vector4.set(_modelMatrix.elements[12], _modelMatrix.elements[13], _modelMatrix.elements[14], 1);\n _vector4.applyMatrix4(_viewProjectionMatrix);\n pushPoint(_vector4, object, camera);\n }\n }\n if (sortElements === true) {\n _renderData.elements.sort(painterSort);\n }\n return _renderData;\n };\n function pushPoint(_vector42, object, camera) {\n const invW = 1 / _vector42.w;\n _vector42.z *= invW;\n if (_vector42.z >= -1 && _vector42.z <= 1) {\n _sprite = getNextSpriteInPool();\n _sprite.id = object.id;\n _sprite.x = _vector42.x * invW;\n _sprite.y = _vector42.y * invW;\n _sprite.z = _vector42.z;\n _sprite.renderOrder = object.renderOrder;\n _sprite.object = object;\n _sprite.rotation = object.rotation;\n _sprite.scale.x = object.scale.x * Math.abs(\n _sprite.x - (_vector42.x + camera.projectionMatrix.elements[0]) / (_vector42.w + camera.projectionMatrix.elements[12])\n );\n _sprite.scale.y = object.scale.y * Math.abs(\n _sprite.y - (_vector42.y + camera.projectionMatrix.elements[5]) / (_vector42.w + camera.projectionMatrix.elements[13])\n );\n _sprite.material = object.material;\n _renderData.elements.push(_sprite);\n }\n }\n function getNextObjectInPool() {\n if (_objectCount === _objectPoolLength) {\n const object = new RenderableObject();\n _objectPool.push(object);\n _objectPoolLength++;\n _objectCount++;\n return object;\n }\n return _objectPool[_objectCount++];\n }\n function getNextVertexInPool() {\n if (_vertexCount === _vertexPoolLength) {\n const vertex = new RenderableVertex();\n _vertexPool.push(vertex);\n _vertexPoolLength++;\n _vertexCount++;\n return vertex;\n }\n return _vertexPool[_vertexCount++];\n }\n function getNextFaceInPool() {\n if (_faceCount === _facePoolLength) {\n const face = new RenderableFace();\n _facePool.push(face);\n _facePoolLength++;\n _faceCount++;\n return face;\n }\n return _facePool[_faceCount++];\n }\n function getNextLineInPool() {\n if (_lineCount === _linePoolLength) {\n const line = new RenderableLine();\n _linePool.push(line);\n _linePoolLength++;\n _lineCount++;\n return line;\n }\n return _linePool[_lineCount++];\n }\n function getNextSpriteInPool() {\n if (_spriteCount === _spritePoolLength) {\n const sprite = new RenderableSprite();\n _spritePool.push(sprite);\n _spritePoolLength++;\n _spriteCount++;\n return sprite;\n }\n return _spritePool[_spriteCount++];\n }\n function painterSort(a, b) {\n if (a.renderOrder !== b.renderOrder) {\n return a.renderOrder - b.renderOrder;\n } else if (a.z !== b.z) {\n return b.z - a.z;\n } else if (a.id !== b.id) {\n return a.id - b.id;\n } else {\n return 0;\n }\n }\n function clipLine(s1, s2) {\n let alpha1 = 0, alpha2 = 1;\n const bc1near = s1.z + s1.w, bc2near = s2.z + s2.w, bc1far = -s1.z + s1.w, bc2far = -s2.z + s2.w;\n if (bc1near >= 0 && bc2near >= 0 && bc1far >= 0 && bc2far >= 0) {\n return true;\n } else if (bc1near < 0 && bc2near < 0 || bc1far < 0 && bc2far < 0) {\n return false;\n } else {\n if (bc1near < 0) {\n alpha1 = Math.max(alpha1, bc1near / (bc1near - bc2near));\n } else if (bc2near < 0) {\n alpha2 = Math.min(alpha2, bc1near / (bc1near - bc2near));\n }\n if (bc1far < 0) {\n alpha1 = Math.max(alpha1, bc1far / (bc1far - bc2far));\n } else if (bc2far < 0) {\n alpha2 = Math.min(alpha2, bc1far / (bc1far - bc2far));\n }\n if (alpha2 < alpha1) {\n return false;\n } else {\n s1.lerp(s2, alpha1);\n s2.lerp(s1, 1 - alpha2);\n return true;\n }\n }\n }\n }\n}\nexport {\n Projector,\n RenderableFace,\n RenderableLine,\n RenderableObject,\n RenderableSprite,\n RenderableVertex\n};\n//# sourceMappingURL=Projector.js.map\n","import { Object3D, Box2, Color, Vector3, Matrix3, Matrix4, Camera } from \"three\";\nimport { Projector, RenderableSprite, RenderableLine, RenderableFace } from \"./Projector.js\";\nclass SVGObject extends Object3D {\n constructor(node) {\n super();\n this.isSVGObject = true;\n this.node = node;\n }\n}\nclass SVGRenderer {\n constructor() {\n let _renderData, _elements, _lights, _svgWidth, _svgHeight, _svgWidthHalf, _svgHeightHalf, _v1, _v2, _v3, _svgNode, _pathCount = 0, _precision = null, _quality = 1, _currentPath, _currentStyle;\n const _this = this, _clipBox = new Box2(), _elemBox = new Box2(), _color = new Color(), _diffuseColor = new Color(), _ambientLight = new Color(), _directionalLights = new Color(), _pointLights = new Color(), _clearColor = new Color(), _vector3 = new Vector3(), _centroid = new Vector3(), _normal = new Vector3(), _normalViewMatrix = new Matrix3(), _viewMatrix = new Matrix4(), _viewProjectionMatrix = new Matrix4(), _svgPathPool = [], _projector = new Projector(), _svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n this.domElement = _svg;\n this.autoClear = true;\n this.sortObjects = true;\n this.sortElements = true;\n this.overdraw = 0.5;\n this.info = {\n render: {\n vertices: 0,\n faces: 0\n }\n };\n this.setQuality = function(quality) {\n switch (quality) {\n case \"high\":\n _quality = 1;\n break;\n case \"low\":\n _quality = 0;\n break;\n }\n };\n this.setClearColor = function(color) {\n _clearColor.set(color);\n };\n this.setPixelRatio = function() {\n };\n this.setSize = function(width, height) {\n _svgWidth = width;\n _svgHeight = height;\n _svgWidthHalf = _svgWidth / 2;\n _svgHeightHalf = _svgHeight / 2;\n _svg.setAttribute(\"viewBox\", -_svgWidthHalf + \" \" + -_svgHeightHalf + \" \" + _svgWidth + \" \" + _svgHeight);\n _svg.setAttribute(\"width\", _svgWidth);\n _svg.setAttribute(\"height\", _svgHeight);\n _clipBox.min.set(-_svgWidthHalf, -_svgHeightHalf);\n _clipBox.max.set(_svgWidthHalf, _svgHeightHalf);\n };\n this.getSize = function() {\n return {\n width: _svgWidth,\n height: _svgHeight\n };\n };\n this.setPrecision = function(precision) {\n _precision = precision;\n };\n function removeChildNodes() {\n _pathCount = 0;\n while (_svg.childNodes.length > 0) {\n _svg.removeChild(_svg.childNodes[0]);\n }\n }\n function convert(c) {\n return _precision !== null ? c.toFixed(_precision) : c;\n }\n this.clear = function() {\n removeChildNodes();\n _svg.style.backgroundColor = _clearColor.getStyle();\n };\n this.render = function(scene, camera) {\n if (camera instanceof Camera === false) {\n console.error(\"THREE.SVGRenderer.render: camera is not an instance of Camera.\");\n return;\n }\n const background = scene.background;\n if (background && background.isColor) {\n removeChildNodes();\n _svg.style.backgroundColor = background.getStyle();\n } else if (this.autoClear === true) {\n this.clear();\n }\n _this.info.render.vertices = 0;\n _this.info.render.faces = 0;\n _viewMatrix.copy(camera.matrixWorldInverse);\n _viewProjectionMatrix.multiplyMatrices(camera.projectionMatrix, _viewMatrix);\n _renderData = _projector.projectScene(scene, camera, this.sortObjects, this.sortElements);\n _elements = _renderData.elements;\n _lights = _renderData.lights;\n _normalViewMatrix.getNormalMatrix(camera.matrixWorldInverse);\n calculateLights(_lights);\n _currentPath = \"\";\n _currentStyle = \"\";\n for (let e = 0, el = _elements.length; e < el; e++) {\n const element = _elements[e];\n const material = element.material;\n if (material === void 0 || material.opacity === 0)\n continue;\n _elemBox.makeEmpty();\n if (element instanceof RenderableSprite) {\n _v1 = element;\n _v1.x *= _svgWidthHalf;\n _v1.y *= -_svgHeightHalf;\n renderSprite(_v1, element, material);\n } else if (element instanceof RenderableLine) {\n _v1 = element.v1;\n _v2 = element.v2;\n _v1.positionScreen.x *= _svgWidthHalf;\n _v1.positionScreen.y *= -_svgHeightHalf;\n _v2.positionScreen.x *= _svgWidthHalf;\n _v2.positionScreen.y *= -_svgHeightHalf;\n _elemBox.setFromPoints([_v1.positionScreen, _v2.positionScreen]);\n if (_clipBox.intersectsBox(_elemBox) === true) {\n renderLine(_v1, _v2, material);\n }\n } else if (element instanceof RenderableFace) {\n _v1 = element.v1;\n _v2 = element.v2;\n _v3 = element.v3;\n if (_v1.positionScreen.z < -1 || _v1.positionScreen.z > 1)\n continue;\n if (_v2.positionScreen.z < -1 || _v2.positionScreen.z > 1)\n continue;\n if (_v3.positionScreen.z < -1 || _v3.positionScreen.z > 1)\n continue;\n _v1.positionScreen.x *= _svgWidthHalf;\n _v1.positionScreen.y *= -_svgHeightHalf;\n _v2.positionScreen.x *= _svgWidthHalf;\n _v2.positionScreen.y *= -_svgHeightHalf;\n _v3.positionScreen.x *= _svgWidthHalf;\n _v3.positionScreen.y *= -_svgHeightHalf;\n if (this.overdraw > 0) {\n expand(_v1.positionScreen, _v2.positionScreen, this.overdraw);\n expand(_v2.positionScreen, _v3.positionScreen, this.overdraw);\n expand(_v3.positionScreen, _v1.positionScreen, this.overdraw);\n }\n _elemBox.setFromPoints([_v1.positionScreen, _v2.positionScreen, _v3.positionScreen]);\n if (_clipBox.intersectsBox(_elemBox) === true) {\n renderFace3(_v1, _v2, _v3, element, material);\n }\n }\n }\n flushPath();\n scene.traverseVisible(function(object) {\n if (object.isSVGObject) {\n _vector3.setFromMatrixPosition(object.matrixWorld);\n _vector3.applyMatrix4(_viewProjectionMatrix);\n if (_vector3.z < -1 || _vector3.z > 1)\n return;\n const x = _vector3.x * _svgWidthHalf;\n const y = -_vector3.y * _svgHeightHalf;\n const node = object.node;\n node.setAttribute(\"transform\", \"translate(\" + x + \",\" + y + \")\");\n _svg.appendChild(node);\n }\n });\n };\n function calculateLights(lights) {\n _ambientLight.setRGB(0, 0, 0);\n _directionalLights.setRGB(0, 0, 0);\n _pointLights.setRGB(0, 0, 0);\n for (let l = 0, ll = lights.length; l < ll; l++) {\n const light = lights[l];\n const lightColor = light.color;\n if (light.isAmbientLight) {\n _ambientLight.r += lightColor.r;\n _ambientLight.g += lightColor.g;\n _ambientLight.b += lightColor.b;\n } else if (light.isDirectionalLight) {\n _directionalLights.r += lightColor.r;\n _directionalLights.g += lightColor.g;\n _directionalLights.b += lightColor.b;\n } else if (light.isPointLight) {\n _pointLights.r += lightColor.r;\n _pointLights.g += lightColor.g;\n _pointLights.b += lightColor.b;\n }\n }\n }\n function calculateLight(lights, position, normal, color) {\n for (let l = 0, ll = lights.length; l < ll; l++) {\n const light = lights[l];\n const lightColor = light.color;\n if (light.isDirectionalLight) {\n const lightPosition = _vector3.setFromMatrixPosition(light.matrixWorld).normalize();\n let amount = normal.dot(lightPosition);\n if (amount <= 0)\n continue;\n amount *= light.intensity;\n color.r += lightColor.r * amount;\n color.g += lightColor.g * amount;\n color.b += lightColor.b * amount;\n } else if (light.isPointLight) {\n const lightPosition = _vector3.setFromMatrixPosition(light.matrixWorld);\n let amount = normal.dot(_vector3.subVectors(lightPosition, position).normalize());\n if (amount <= 0)\n continue;\n amount *= light.distance == 0 ? 1 : 1 - Math.min(position.distanceTo(lightPosition) / light.distance, 1);\n if (amount == 0)\n continue;\n amount *= light.intensity;\n color.r += lightColor.r * amount;\n color.g += lightColor.g * amount;\n color.b += lightColor.b * amount;\n }\n }\n }\n function renderSprite(v1, element, material) {\n let scaleX = element.scale.x * _svgWidthHalf;\n let scaleY = element.scale.y * _svgHeightHalf;\n if (material.isPointsMaterial) {\n scaleX *= material.size;\n scaleY *= material.size;\n }\n const path = \"M\" + convert(v1.x - scaleX * 0.5) + \",\" + convert(v1.y - scaleY * 0.5) + \"h\" + convert(scaleX) + \"v\" + convert(scaleY) + \"h\" + convert(-scaleX) + \"z\";\n let style = \"\";\n if (material.isSpriteMaterial || material.isPointsMaterial) {\n style = \"fill:\" + material.color.getStyle() + \";fill-opacity:\" + material.opacity;\n }\n addPath(style, path);\n }\n function renderLine(v1, v2, material) {\n const path = \"M\" + convert(v1.positionScreen.x) + \",\" + convert(v1.positionScreen.y) + \"L\" + convert(v2.positionScreen.x) + \",\" + convert(v2.positionScreen.y);\n if (material.isLineBasicMaterial) {\n let style = \"fill:none;stroke:\" + material.color.getStyle() + \";stroke-opacity:\" + material.opacity + \";stroke-width:\" + material.linewidth + \";stroke-linecap:\" + material.linecap;\n if (material.isLineDashedMaterial) {\n style = style + \";stroke-dasharray:\" + material.dashSize + \",\" + material.gapSize;\n }\n addPath(style, path);\n }\n }\n function renderFace3(v1, v2, v3, element, material) {\n _this.info.render.vertices += 3;\n _this.info.render.faces++;\n const path = \"M\" + convert(v1.positionScreen.x) + \",\" + convert(v1.positionScreen.y) + \"L\" + convert(v2.positionScreen.x) + \",\" + convert(v2.positionScreen.y) + \"L\" + convert(v3.positionScreen.x) + \",\" + convert(v3.positionScreen.y) + \"z\";\n let style = \"\";\n if (material.isMeshBasicMaterial) {\n _color.copy(material.color);\n if (material.vertexColors) {\n _color.multiply(element.color);\n }\n } else if (material.isMeshLambertMaterial || material.isMeshPhongMaterial || material.isMeshStandardMaterial) {\n _diffuseColor.copy(material.color);\n if (material.vertexColors) {\n _diffuseColor.multiply(element.color);\n }\n _color.copy(_ambientLight);\n _centroid.copy(v1.positionWorld).add(v2.positionWorld).add(v3.positionWorld).divideScalar(3);\n calculateLight(_lights, _centroid, element.normalModel, _color);\n _color.multiply(_diffuseColor).add(material.emissive);\n } else if (material.isMeshNormalMaterial) {\n _normal.copy(element.normalModel).applyMatrix3(_normalViewMatrix).normalize();\n _color.setRGB(_normal.x, _normal.y, _normal.z).multiplyScalar(0.5).addScalar(0.5);\n }\n if (material.wireframe) {\n style = \"fill:none;stroke:\" + _color.getStyle() + \";stroke-opacity:\" + material.opacity + \";stroke-width:\" + material.wireframeLinewidth + \";stroke-linecap:\" + material.wireframeLinecap + \";stroke-linejoin:\" + material.wireframeLinejoin;\n } else {\n style = \"fill:\" + _color.getStyle() + \";fill-opacity:\" + material.opacity;\n }\n addPath(style, path);\n }\n function expand(v1, v2, pixels) {\n let x = v2.x - v1.x, y = v2.y - v1.y;\n const det = x * x + y * y;\n if (det === 0)\n return;\n const idet = pixels / Math.sqrt(det);\n x *= idet;\n y *= idet;\n v2.x += x;\n v2.y += y;\n v1.x -= x;\n v1.y -= y;\n }\n function addPath(style, path) {\n if (_currentStyle === style) {\n _currentPath += path;\n } else {\n flushPath();\n _currentStyle = style;\n _currentPath = path;\n }\n }\n function flushPath() {\n if (_currentPath) {\n _svgNode = getPathNode(_pathCount++);\n _svgNode.setAttribute(\"d\", _currentPath);\n _svgNode.setAttribute(\"style\", _currentStyle);\n _svg.appendChild(_svgNode);\n }\n _currentPath = \"\";\n _currentStyle = \"\";\n }\n function getPathNode(id) {\n if (_svgPathPool[id] == null) {\n _svgPathPool[id] = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n if (_quality == 0) {\n _svgPathPool[id].setAttribute(\"shape-rendering\", \"crispEdges\");\n }\n return _svgPathPool[id];\n }\n return _svgPathPool[id];\n }\n }\n}\nexport {\n SVGObject,\n SVGRenderer\n};\n//# sourceMappingURL=SVGRenderer.js.map\n","class FlakesTexture {\n constructor(width = 512, height = 512) {\n const canvas = document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n const context = canvas.getContext(\"2d\");\n context.fillStyle = \"rgb(127,127,255)\";\n context.fillRect(0, 0, width, height);\n for (let i = 0; i < 4e3; i++) {\n const x = Math.random() * width;\n const y = Math.random() * height;\n const r = Math.random() * 3 + 3;\n let nx = Math.random() * 2 - 1;\n let ny = Math.random() * 2 - 1;\n let nz = 1.5;\n const l = Math.sqrt(nx * nx + ny * ny + nz * nz);\n nx /= l;\n ny /= l;\n nz /= l;\n context.fillStyle = \"rgb(\" + (nx * 127 + 127) + \",\" + (ny * 127 + 127) + \",\" + nz * 255 + \")\";\n context.beginPath();\n context.arc(x, y, r, 0, Math.PI * 2);\n context.fill();\n }\n return canvas;\n }\n}\nexport {\n FlakesTexture\n};\n//# sourceMappingURL=FlakesTexture.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { DataTexture, RGBAFormat, FloatType, RepeatWrapping, NearestFilter, Mesh, InstancedMesh, DynamicDrawUsage, Matrix4 } from \"three\";\nconst CHANNELS = 4;\nconst TEXTURE_WIDTH = 1024;\nconst TEXTURE_HEIGHT = 4;\nconst initSplineTexture = (numberOfCurves = 1) => {\n const dataArray = new Float32Array(TEXTURE_WIDTH * TEXTURE_HEIGHT * numberOfCurves * CHANNELS);\n const dataTexture = new DataTexture(dataArray, TEXTURE_WIDTH, TEXTURE_HEIGHT * numberOfCurves, RGBAFormat, FloatType);\n dataTexture.wrapS = RepeatWrapping;\n dataTexture.wrapT = RepeatWrapping;\n dataTexture.magFilter = NearestFilter;\n dataTexture.needsUpdate = true;\n return dataTexture;\n};\nconst updateSplineTexture = (texture, splineCurve, offset = 0) => {\n const numberOfPoints = Math.floor(TEXTURE_WIDTH * (TEXTURE_HEIGHT / 4));\n splineCurve.arcLengthDivisions = numberOfPoints / 2;\n splineCurve.updateArcLengths();\n const points = splineCurve.getSpacedPoints(numberOfPoints);\n const frenetFrames = splineCurve.computeFrenetFrames(numberOfPoints, true);\n for (let i = 0; i < numberOfPoints; i++) {\n const rowOffset = Math.floor(i / TEXTURE_WIDTH);\n const rowIndex = i % TEXTURE_WIDTH;\n let pt = points[i];\n setTextureValue(texture, rowIndex, pt.x, pt.y, pt.z, 0 + rowOffset + TEXTURE_HEIGHT * offset);\n pt = frenetFrames.tangents[i];\n setTextureValue(texture, rowIndex, pt.x, pt.y, pt.z, 1 + rowOffset + TEXTURE_HEIGHT * offset);\n pt = frenetFrames.normals[i];\n setTextureValue(texture, rowIndex, pt.x, pt.y, pt.z, 2 + rowOffset + TEXTURE_HEIGHT * offset);\n pt = frenetFrames.binormals[i];\n setTextureValue(texture, rowIndex, pt.x, pt.y, pt.z, 3 + rowOffset + TEXTURE_HEIGHT * offset);\n }\n texture.needsUpdate = true;\n};\nconst setTextureValue = (texture, index, x, y, z, o) => {\n const image = texture.image;\n const { data } = image;\n const i = CHANNELS * TEXTURE_WIDTH * o;\n data[index * CHANNELS + i + 0] = x;\n data[index * CHANNELS + i + 1] = y;\n data[index * CHANNELS + i + 2] = z;\n data[index * CHANNELS + i + 3] = 1;\n};\nconst getUniforms = (splineTexture) => ({\n spineTexture: { value: splineTexture },\n pathOffset: { type: \"f\", value: 0 },\n // time of path curve\n pathSegment: { type: \"f\", value: 1 },\n // fractional length of path\n spineOffset: { type: \"f\", value: 161 },\n spineLength: { type: \"f\", value: 400 },\n flow: { type: \"i\", value: 1 }\n});\nfunction modifyShader(material, uniforms, numberOfCurves = 1) {\n if (material.__ok)\n return;\n material.__ok = true;\n material.onBeforeCompile = (shader) => {\n if (shader.__modified)\n return;\n shader.__modified = true;\n Object.assign(shader.uniforms, uniforms);\n const vertexShader = (\n /* glsl */\n `\n\t\tuniform sampler2D spineTexture;\n\t\tuniform float pathOffset;\n\t\tuniform float pathSegment;\n\t\tuniform float spineOffset;\n\t\tuniform float spineLength;\n\t\tuniform int flow;\n\n\t\tfloat textureLayers = ${TEXTURE_HEIGHT * numberOfCurves}.;\n\t\tfloat textureStacks = ${TEXTURE_HEIGHT / 4}.;\n\n\t\t${shader.vertexShader}\n\t\t`.replace(\"#include <beginnormal_vertex>\", \"\").replace(\"#include <defaultnormal_vertex>\", \"\").replace(\"#include <begin_vertex>\", \"\").replace(\n /void\\s*main\\s*\\(\\)\\s*\\{/,\n /* glsl */\n `\n void main() {\n #include <beginnormal_vertex>\n\n vec4 worldPos = modelMatrix * vec4(position, 1.);\n\n bool bend = flow > 0;\n float xWeight = bend ? 0. : 1.;\n\n #ifdef USE_INSTANCING\n float pathOffsetFromInstanceMatrix = instanceMatrix[3][2];\n float spineLengthFromInstanceMatrix = instanceMatrix[3][0];\n float spinePortion = bend ? (worldPos.x + spineOffset) / spineLengthFromInstanceMatrix : 0.;\n float mt = (spinePortion * pathSegment + pathOffset + pathOffsetFromInstanceMatrix)*textureStacks;\n #else\n float spinePortion = bend ? (worldPos.x + spineOffset) / spineLength : 0.;\n float mt = (spinePortion * pathSegment + pathOffset)*textureStacks;\n #endif\n\n mt = mod(mt, textureStacks);\n float rowOffset = floor(mt);\n\n #ifdef USE_INSTANCING\n rowOffset += instanceMatrix[3][1] * ${TEXTURE_HEIGHT}.;\n #endif\n\n vec3 spinePos = texture2D(spineTexture, vec2(mt, (0. + rowOffset + 0.5) / textureLayers)).xyz;\n vec3 a = texture2D(spineTexture, vec2(mt, (1. + rowOffset + 0.5) / textureLayers)).xyz;\n vec3 b = texture2D(spineTexture, vec2(mt, (2. + rowOffset + 0.5) / textureLayers)).xyz;\n vec3 c = texture2D(spineTexture, vec2(mt, (3. + rowOffset + 0.5) / textureLayers)).xyz;\n mat3 basis = mat3(a, b, c);\n\n vec3 transformed = basis\n * vec3(worldPos.x * xWeight, worldPos.y * 1., worldPos.z * 1.)\n + spinePos;\n\n vec3 transformedNormal = normalMatrix * (basis * objectNormal);\n\t\t\t`\n ).replace(\n \"#include <project_vertex>\",\n /* glsl */\n `vec4 mvPosition = modelViewMatrix * vec4( transformed, 1.0 );\n\t\t\t\tgl_Position = projectionMatrix * mvPosition;`\n )\n );\n shader.vertexShader = vertexShader;\n };\n}\nclass Flow {\n /**\n * @param {Mesh} mesh The mesh to clone and modify to bend around the curve\n * @param {number} numberOfCurves The amount of space that should preallocated for additional curves\n */\n constructor(mesh, numberOfCurves = 1) {\n __publicField(this, \"curveArray\");\n __publicField(this, \"curveLengthArray\");\n __publicField(this, \"object3D\");\n __publicField(this, \"splineTexure\");\n __publicField(this, \"uniforms\");\n const obj3D = mesh.clone();\n const splineTexure = initSplineTexture(numberOfCurves);\n const uniforms = getUniforms(splineTexure);\n obj3D.traverse((child) => {\n if (child instanceof Mesh || child instanceof InstancedMesh) {\n child.material = child.material.clone();\n modifyShader(child.material, uniforms, numberOfCurves);\n }\n });\n this.curveArray = new Array(numberOfCurves);\n this.curveLengthArray = new Array(numberOfCurves);\n this.object3D = obj3D;\n this.splineTexure = splineTexure;\n this.uniforms = uniforms;\n }\n updateCurve(index, curve) {\n if (index >= this.curveArray.length)\n throw Error(\"Index out of range for Flow\");\n const curveLength = curve.getLength();\n this.uniforms.spineLength.value = curveLength;\n this.curveLengthArray[index] = curveLength;\n this.curveArray[index] = curve;\n updateSplineTexture(this.splineTexure, curve, index);\n }\n moveAlongCurve(amount) {\n this.uniforms.pathOffset.value += amount;\n }\n}\nconst matrix = /* @__PURE__ */ new Matrix4();\nclass InstancedFlow extends Flow {\n /**\n *\n * @param {number} count The number of instanced elements\n * @param {number} curveCount The number of curves to preallocate for\n * @param {Geometry} geometry The geometry to use for the instanced mesh\n * @param {Material} material The material to use for the instanced mesh\n */\n constructor(count, curveCount, geometry, material) {\n const mesh = new InstancedMesh(geometry, material, count);\n mesh.instanceMatrix.setUsage(DynamicDrawUsage);\n mesh.frustumCulled = false;\n super(mesh, curveCount);\n __publicField(this, \"offsets\");\n __publicField(this, \"whichCurve\");\n this.offsets = new Array(count).fill(0);\n this.whichCurve = new Array(count).fill(0);\n }\n /**\n * The extra information about which curve and curve position is stored in the translation components of the matrix for the instanced objects\n * This writes that information to the matrix and marks it as needing update.\n *\n * @param {number} index of the instanced element to update\n */\n writeChanges(index) {\n matrix.makeTranslation(this.curveLengthArray[this.whichCurve[index]], this.whichCurve[index], this.offsets[index]);\n this.object3D.setMatrixAt(index, matrix);\n this.object3D.instanceMatrix.needsUpdate = true;\n }\n /**\n * Move an individual element along the curve by a specific amount\n *\n * @param {number} index Which element to update\n * @param {number} offset Move by how much\n */\n moveIndividualAlongCurve(index, offset) {\n this.offsets[index] += offset;\n this.writeChanges(index);\n }\n /**\n * Select which curve to use for an element\n *\n * @param {number} index the index of the instanced element to update\n * @param {number} curveNo the index of the curve it should use\n */\n setCurve(index, curveNo) {\n if (isNaN(curveNo))\n throw Error(\"curve index being set is Not a Number (NaN)\");\n this.whichCurve[index] = curveNo;\n this.writeChanges(index);\n }\n}\nexport {\n Flow,\n InstancedFlow,\n getUniforms,\n initSplineTexture,\n modifyShader,\n updateSplineTexture\n};\n//# sourceMappingURL=CurveModifier.js.map\n","const getWithKey = (obj, key) => obj[key];\nexport {\n getWithKey\n};\n//# sourceMappingURL=helpers.js.map\n","import { BufferGeometry, BufferAttribute, InterleavedBuffer, InterleavedBufferAttribute, TrianglesDrawMode, TriangleFanDrawMode, TriangleStripDrawMode, Vector3, Float32BufferAttribute } from \"three\";\nimport { getWithKey } from \"../types/helpers.js\";\nconst mergeBufferGeometries = (geometries, useGroups) => {\n const isIndexed = geometries[0].index !== null;\n const attributesUsed = new Set(Object.keys(geometries[0].attributes));\n const morphAttributesUsed = new Set(Object.keys(geometries[0].morphAttributes));\n const attributes = {};\n const morphAttributes = {};\n const morphTargetsRelative = geometries[0].morphTargetsRelative;\n const mergedGeometry = new BufferGeometry();\n let offset = 0;\n geometries.forEach((geom, i) => {\n let attributesCount = 0;\n if (isIndexed !== (geom.index !== null)) {\n console.error(\n \"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \" + i + \". All geometries must have compatible attributes; make sure index attribute exists among all geometries, or in none of them.\"\n );\n return null;\n }\n for (let name in geom.attributes) {\n if (!attributesUsed.has(name)) {\n console.error(\n \"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \" + i + '. All geometries must have compatible attributes; make sure \"' + name + '\" attribute exists among all geometries, or in none of them.'\n );\n return null;\n }\n if (attributes[name] === void 0) {\n attributes[name] = [];\n }\n attributes[name].push(geom.attributes[name]);\n attributesCount++;\n }\n if (attributesCount !== attributesUsed.size) {\n console.error(\n \"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \" + i + \". Make sure all geometries have the same number of attributes.\"\n );\n return null;\n }\n if (morphTargetsRelative !== geom.morphTargetsRelative) {\n console.error(\n \"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \" + i + \". .morphTargetsRelative must be consistent throughout all geometries.\"\n );\n return null;\n }\n for (let name in geom.morphAttributes) {\n if (!morphAttributesUsed.has(name)) {\n console.error(\n \"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \" + i + \". .morphAttributes must be consistent throughout all geometries.\"\n );\n return null;\n }\n if (morphAttributes[name] === void 0)\n morphAttributes[name] = [];\n morphAttributes[name].push(geom.morphAttributes[name]);\n }\n mergedGeometry.userData.mergedUserData = mergedGeometry.userData.mergedUserData || [];\n mergedGeometry.userData.mergedUserData.push(geom.userData);\n if (useGroups) {\n let count;\n if (geom.index) {\n count = geom.index.count;\n } else if (geom.attributes.position !== void 0) {\n count = geom.attributes.position.count;\n } else {\n console.error(\n \"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed with geometry at index \" + i + \". The geometry must have either an index or a position attribute\"\n );\n return null;\n }\n mergedGeometry.addGroup(offset, count, i);\n offset += count;\n }\n });\n if (isIndexed) {\n let indexOffset = 0;\n const mergedIndex = [];\n geometries.forEach((geom) => {\n const index = geom.index;\n for (let j = 0; j < index.count; ++j) {\n mergedIndex.push(index.getX(j) + indexOffset);\n }\n indexOffset += geom.attributes.position.count;\n });\n mergedGeometry.setIndex(mergedIndex);\n }\n for (let name in attributes) {\n const mergedAttribute = mergeBufferAttributes(attributes[name]);\n if (!mergedAttribute) {\n console.error(\n \"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the \" + name + \" attribute.\"\n );\n return null;\n }\n mergedGeometry.setAttribute(name, mergedAttribute);\n }\n for (let name in morphAttributes) {\n const numMorphTargets = morphAttributes[name][0].length;\n if (numMorphTargets === 0)\n break;\n mergedGeometry.morphAttributes = mergedGeometry.morphAttributes || {};\n mergedGeometry.morphAttributes[name] = [];\n for (let i = 0; i < numMorphTargets; ++i) {\n const morphAttributesToMerge = [];\n for (let j = 0; j < morphAttributes[name].length; ++j) {\n morphAttributesToMerge.push(morphAttributes[name][j][i]);\n }\n const mergedMorphAttribute = mergeBufferAttributes(morphAttributesToMerge);\n if (!mergedMorphAttribute) {\n console.error(\n \"THREE.BufferGeometryUtils: .mergeBufferGeometries() failed while trying to merge the \" + name + \" morphAttribute.\"\n );\n return null;\n }\n mergedGeometry.morphAttributes[name].push(mergedMorphAttribute);\n }\n }\n return mergedGeometry;\n};\nconst mergeBufferAttributes = (attributes) => {\n let TypedArray = void 0;\n let itemSize = void 0;\n let normalized = void 0;\n let arrayLength = 0;\n attributes.forEach((attr) => {\n if (TypedArray === void 0) {\n TypedArray = attr.array.constructor;\n }\n if (TypedArray !== attr.array.constructor) {\n console.error(\n \"THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.array must be of consistent array types across matching attributes.\"\n );\n return null;\n }\n if (itemSize === void 0)\n itemSize = attr.itemSize;\n if (itemSize !== attr.itemSize) {\n console.error(\n \"THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.itemSize must be consistent across matching attributes.\"\n );\n return null;\n }\n if (normalized === void 0)\n normalized = attr.normalized;\n if (normalized !== attr.normalized) {\n console.error(\n \"THREE.BufferGeometryUtils: .mergeBufferAttributes() failed. BufferAttribute.normalized must be consistent across matching attributes.\"\n );\n return null;\n }\n arrayLength += attr.array.length;\n });\n if (TypedArray && itemSize) {\n const array = new TypedArray(arrayLength);\n let offset = 0;\n attributes.forEach((attr) => {\n array.set(attr.array, offset);\n offset += attr.array.length;\n });\n return new BufferAttribute(array, itemSize, normalized);\n }\n};\nconst interleaveAttributes = (attributes) => {\n let TypedArray = void 0;\n let arrayLength = 0;\n let stride = 0;\n for (let i = 0, l = attributes.length; i < l; ++i) {\n const attribute = attributes[i];\n if (TypedArray === void 0)\n TypedArray = attribute.array.constructor;\n if (TypedArray !== attribute.array.constructor) {\n console.error(\"AttributeBuffers of different types cannot be interleaved\");\n return null;\n }\n arrayLength += attribute.array.length;\n stride += attribute.itemSize;\n }\n const interleavedBuffer = new InterleavedBuffer(new TypedArray(arrayLength), stride);\n let offset = 0;\n const res = [];\n const getters = [\"getX\", \"getY\", \"getZ\", \"getW\"];\n const setters = [\"setX\", \"setY\", \"setZ\", \"setW\"];\n for (let j = 0, l = attributes.length; j < l; j++) {\n const attribute = attributes[j];\n const itemSize = attribute.itemSize;\n const count = attribute.count;\n const iba = new InterleavedBufferAttribute(interleavedBuffer, itemSize, offset, attribute.normalized);\n res.push(iba);\n offset += itemSize;\n for (let c = 0; c < count; c++) {\n for (let k = 0; k < itemSize; k++) {\n const set = getWithKey(iba, setters[k]);\n const get = getWithKey(attribute, getters[k]);\n set(c, get(c));\n }\n }\n }\n return res;\n};\nfunction estimateBytesUsed(geometry) {\n let mem = 0;\n for (let name in geometry.attributes) {\n const attr = geometry.getAttribute(name);\n mem += attr.count * attr.itemSize * attr.array.BYTES_PER_ELEMENT;\n }\n const indices = geometry.getIndex();\n mem += indices ? indices.count * indices.itemSize * indices.array.BYTES_PER_ELEMENT : 0;\n return mem;\n}\nfunction mergeVertices(geometry, tolerance = 1e-4) {\n tolerance = Math.max(tolerance, Number.EPSILON);\n const hashToIndex = {};\n const indices = geometry.getIndex();\n const positions = geometry.getAttribute(\"position\");\n const vertexCount = indices ? indices.count : positions.count;\n let nextIndex = 0;\n const attributeNames = Object.keys(geometry.attributes);\n const attrArrays = {};\n const morphAttrsArrays = {};\n const newIndices = [];\n const getters = [\"getX\", \"getY\", \"getZ\", \"getW\"];\n for (let i = 0, l = attributeNames.length; i < l; i++) {\n const name = attributeNames[i];\n attrArrays[name] = [];\n const morphAttr = geometry.morphAttributes[name];\n if (morphAttr) {\n morphAttrsArrays[name] = new Array(morphAttr.length).fill(0).map(() => []);\n }\n }\n const decimalShift = Math.log10(1 / tolerance);\n const shiftMultiplier = Math.pow(10, decimalShift);\n for (let i = 0; i < vertexCount; i++) {\n const index = indices ? indices.getX(i) : i;\n let hash = \"\";\n for (let j = 0, l = attributeNames.length; j < l; j++) {\n const name = attributeNames[j];\n const attribute = geometry.getAttribute(name);\n const itemSize = attribute.itemSize;\n for (let k = 0; k < itemSize; k++) {\n hash += `${~~(attribute[getters[k]](index) * shiftMultiplier)},`;\n }\n }\n if (hash in hashToIndex) {\n newIndices.push(hashToIndex[hash]);\n } else {\n for (let j = 0, l = attributeNames.length; j < l; j++) {\n const name = attributeNames[j];\n const attribute = geometry.getAttribute(name);\n const morphAttr = geometry.morphAttributes[name];\n const itemSize = attribute.itemSize;\n const newarray = attrArrays[name];\n const newMorphArrays = morphAttrsArrays[name];\n for (let k = 0; k < itemSize; k++) {\n const getterFunc = getters[k];\n newarray.push(attribute[getterFunc](index));\n if (morphAttr) {\n for (let m = 0, ml = morphAttr.length; m < ml; m++) {\n newMorphArrays[m].push(morphAttr[m][getterFunc](index));\n }\n }\n }\n }\n hashToIndex[hash] = nextIndex;\n newIndices.push(nextIndex);\n nextIndex++;\n }\n }\n const result = geometry.clone();\n for (let i = 0, l = attributeNames.length; i < l; i++) {\n const name = attributeNames[i];\n const oldAttribute = geometry.getAttribute(name);\n const buffer = new oldAttribute.array.constructor(attrArrays[name]);\n const attribute = new BufferAttribute(buffer, oldAttribute.itemSize, oldAttribute.normalized);\n result.setAttribute(name, attribute);\n if (name in morphAttrsArrays) {\n for (let j = 0; j < morphAttrsArrays[name].length; j++) {\n const oldMorphAttribute = geometry.morphAttributes[name][j];\n const buffer2 = new oldMorphAttribute.array.constructor(morphAttrsArrays[name][j]);\n const morphAttribute = new BufferAttribute(buffer2, oldMorphAttribute.itemSize, oldMorphAttribute.normalized);\n result.morphAttributes[name][j] = morphAttribute;\n }\n }\n }\n result.setIndex(newIndices);\n return result;\n}\nfunction toTrianglesDrawMode(geometry, drawMode) {\n if (drawMode === TrianglesDrawMode) {\n console.warn(\"THREE.BufferGeometryUtils.toTrianglesDrawMode(): Geometry already defined as triangles.\");\n return geometry;\n }\n if (drawMode === TriangleFanDrawMode || drawMode === TriangleStripDrawMode) {\n let index = geometry.getIndex();\n if (index === null) {\n const indices = [];\n const position = geometry.getAttribute(\"position\");\n if (position !== void 0) {\n for (let i = 0; i < position.count; i++) {\n indices.push(i);\n }\n geometry.setIndex(indices);\n index = geometry.getIndex();\n } else {\n console.error(\n \"THREE.BufferGeometryUtils.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.\"\n );\n return geometry;\n }\n }\n const numberOfTriangles = index.count - 2;\n const newIndices = [];\n if (index) {\n if (drawMode === TriangleFanDrawMode) {\n for (let i = 1; i <= numberOfTriangles; i++) {\n newIndices.push(index.getX(0));\n newIndices.push(index.getX(i));\n newIndices.push(index.getX(i + 1));\n }\n } else {\n for (let i = 0; i < numberOfTriangles; i++) {\n if (i % 2 === 0) {\n newIndices.push(index.getX(i));\n newIndices.push(index.getX(i + 1));\n newIndices.push(index.getX(i + 2));\n } else {\n newIndices.push(index.getX(i + 2));\n newIndices.push(index.getX(i + 1));\n newIndices.push(index.getX(i));\n }\n }\n }\n }\n if (newIndices.length / 3 !== numberOfTriangles) {\n console.error(\"THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unable to generate correct amount of triangles.\");\n }\n const newGeometry = geometry.clone();\n newGeometry.setIndex(newIndices);\n newGeometry.clearGroups();\n return newGeometry;\n } else {\n console.error(\"THREE.BufferGeometryUtils.toTrianglesDrawMode(): Unknown draw mode:\", drawMode);\n return geometry;\n }\n}\nfunction computeMorphedAttributes(object) {\n if (object.geometry.isBufferGeometry !== true) {\n console.error(\"THREE.BufferGeometryUtils: Geometry is not of type BufferGeometry.\");\n return null;\n }\n const _vA = new Vector3();\n const _vB = new Vector3();\n const _vC = new Vector3();\n const _tempA = new Vector3();\n const _tempB = new Vector3();\n const _tempC = new Vector3();\n const _morphA = new Vector3();\n const _morphB = new Vector3();\n const _morphC = new Vector3();\n function _calculateMorphedAttributeData(object2, material2, attribute, morphAttribute, morphTargetsRelative2, a2, b2, c2, modifiedAttributeArray) {\n _vA.fromBufferAttribute(attribute, a2);\n _vB.fromBufferAttribute(attribute, b2);\n _vC.fromBufferAttribute(attribute, c2);\n const morphInfluences = object2.morphTargetInfluences;\n if (\n // @ts-ignore\n material2.morphTargets && morphAttribute && morphInfluences\n ) {\n _morphA.set(0, 0, 0);\n _morphB.set(0, 0, 0);\n _morphC.set(0, 0, 0);\n for (let i2 = 0, il2 = morphAttribute.length; i2 < il2; i2++) {\n const influence = morphInfluences[i2];\n const morph = morphAttribute[i2];\n if (influence === 0)\n continue;\n _tempA.fromBufferAttribute(morph, a2);\n _tempB.fromBufferAttribute(morph, b2);\n _tempC.fromBufferAttribute(morph, c2);\n if (morphTargetsRelative2) {\n _morphA.addScaledVector(_tempA, influence);\n _morphB.addScaledVector(_tempB, influence);\n _morphC.addScaledVector(_tempC, influence);\n } else {\n _morphA.addScaledVector(_tempA.sub(_vA), influence);\n _morphB.addScaledVector(_tempB.sub(_vB), influence);\n _morphC.addScaledVector(_tempC.sub(_vC), influence);\n }\n }\n _vA.add(_morphA);\n _vB.add(_morphB);\n _vC.add(_morphC);\n }\n if (object2.isSkinnedMesh) {\n object2.boneTransform(a2, _vA);\n object2.boneTransform(b2, _vB);\n object2.boneTransform(c2, _vC);\n }\n modifiedAttributeArray[a2 * 3 + 0] = _vA.x;\n modifiedAttributeArray[a2 * 3 + 1] = _vA.y;\n modifiedAttributeArray[a2 * 3 + 2] = _vA.z;\n modifiedAttributeArray[b2 * 3 + 0] = _vB.x;\n modifiedAttributeArray[b2 * 3 + 1] = _vB.y;\n modifiedAttributeArray[b2 * 3 + 2] = _vB.z;\n modifiedAttributeArray[c2 * 3 + 0] = _vC.x;\n modifiedAttributeArray[c2 * 3 + 1] = _vC.y;\n modifiedAttributeArray[c2 * 3 + 2] = _vC.z;\n }\n const geometry = object.geometry;\n const material = object.material;\n let a, b, c;\n const index = geometry.index;\n const positionAttribute = geometry.attributes.position;\n const morphPosition = geometry.morphAttributes.position;\n const morphTargetsRelative = geometry.morphTargetsRelative;\n const normalAttribute = geometry.attributes.normal;\n const morphNormal = geometry.morphAttributes.position;\n const groups = geometry.groups;\n const drawRange = geometry.drawRange;\n let i, j, il, jl;\n let group, groupMaterial;\n let start, end;\n const modifiedPosition = new Float32Array(positionAttribute.count * positionAttribute.itemSize);\n const modifiedNormal = new Float32Array(normalAttribute.count * normalAttribute.itemSize);\n if (index !== null) {\n if (Array.isArray(material)) {\n for (i = 0, il = groups.length; i < il; i++) {\n group = groups[i];\n groupMaterial = material[group.materialIndex];\n start = Math.max(group.start, drawRange.start);\n end = Math.min(group.start + group.count, drawRange.start + drawRange.count);\n for (j = start, jl = end; j < jl; j += 3) {\n a = index.getX(j);\n b = index.getX(j + 1);\n c = index.getX(j + 2);\n _calculateMorphedAttributeData(\n object,\n groupMaterial,\n positionAttribute,\n morphPosition,\n morphTargetsRelative,\n a,\n b,\n c,\n modifiedPosition\n );\n _calculateMorphedAttributeData(\n object,\n groupMaterial,\n normalAttribute,\n morphNormal,\n morphTargetsRelative,\n a,\n b,\n c,\n modifiedNormal\n );\n }\n }\n } else {\n start = Math.max(0, drawRange.start);\n end = Math.min(index.count, drawRange.start + drawRange.count);\n for (i = start, il = end; i < il; i += 3) {\n a = index.getX(i);\n b = index.getX(i + 1);\n c = index.getX(i + 2);\n _calculateMorphedAttributeData(\n object,\n material,\n positionAttribute,\n morphPosition,\n morphTargetsRelative,\n a,\n b,\n c,\n modifiedPosition\n );\n _calculateMorphedAttributeData(\n object,\n material,\n normalAttribute,\n morphNormal,\n morphTargetsRelative,\n a,\n b,\n c,\n modifiedNormal\n );\n }\n }\n } else if (positionAttribute !== void 0) {\n if (Array.isArray(material)) {\n for (i = 0, il = groups.length; i < il; i++) {\n group = groups[i];\n groupMaterial = material[group.materialIndex];\n start = Math.max(group.start, drawRange.start);\n end = Math.min(group.start + group.count, drawRange.start + drawRange.count);\n for (j = start, jl = end; j < jl; j += 3) {\n a = j;\n b = j + 1;\n c = j + 2;\n _calculateMorphedAttributeData(\n object,\n groupMaterial,\n positionAttribute,\n morphPosition,\n morphTargetsRelative,\n a,\n b,\n c,\n modifiedPosition\n );\n _calculateMorphedAttributeData(\n object,\n groupMaterial,\n normalAttribute,\n morphNormal,\n morphTargetsRelative,\n a,\n b,\n c,\n modifiedNormal\n );\n }\n }\n } else {\n start = Math.max(0, drawRange.start);\n end = Math.min(positionAttribute.count, drawRange.start + drawRange.count);\n for (i = start, il = end; i < il; i += 3) {\n a = i;\n b = i + 1;\n c = i + 2;\n _calculateMorphedAttributeData(\n object,\n material,\n positionAttribute,\n morphPosition,\n morphTargetsRelative,\n a,\n b,\n c,\n modifiedPosition\n );\n _calculateMorphedAttributeData(\n object,\n material,\n normalAttribute,\n morphNormal,\n morphTargetsRelative,\n a,\n b,\n c,\n modifiedNormal\n );\n }\n }\n }\n const morphedPositionAttribute = new Float32BufferAttribute(modifiedPosition, 3);\n const morphedNormalAttribute = new Float32BufferAttribute(modifiedNormal, 3);\n return {\n positionAttribute,\n normalAttribute,\n morphedPositionAttribute,\n morphedNormalAttribute\n };\n}\nfunction toCreasedNormals(geometry, creaseAngle = Math.PI / 3) {\n const creaseDot = Math.cos(creaseAngle);\n const hashMultiplier = (1 + 1e-10) * 100;\n const verts = [new Vector3(), new Vector3(), new Vector3()];\n const tempVec1 = new Vector3();\n const tempVec2 = new Vector3();\n const tempNorm = new Vector3();\n const tempNorm2 = new Vector3();\n function hashVertex(v) {\n const x = ~~(v.x * hashMultiplier);\n const y = ~~(v.y * hashMultiplier);\n const z = ~~(v.z * hashMultiplier);\n return `${x},${y},${z}`;\n }\n const resultGeometry = geometry.index ? geometry.toNonIndexed() : geometry;\n const posAttr = resultGeometry.attributes.position;\n const vertexMap = {};\n for (let i = 0, l = posAttr.count / 3; i < l; i++) {\n const i3 = 3 * i;\n const a = verts[0].fromBufferAttribute(posAttr, i3 + 0);\n const b = verts[1].fromBufferAttribute(posAttr, i3 + 1);\n const c = verts[2].fromBufferAttribute(posAttr, i3 + 2);\n tempVec1.subVectors(c, b);\n tempVec2.subVectors(a, b);\n const normal = new Vector3().crossVectors(tempVec1, tempVec2).normalize();\n for (let n = 0; n < 3; n++) {\n const vert = verts[n];\n const hash = hashVertex(vert);\n if (!(hash in vertexMap)) {\n vertexMap[hash] = [];\n }\n vertexMap[hash].push(normal);\n }\n }\n const normalArray = new Float32Array(posAttr.count * 3);\n const normAttr = new BufferAttribute(normalArray, 3, false);\n for (let i = 0, l = posAttr.count / 3; i < l; i++) {\n const i3 = 3 * i;\n const a = verts[0].fromBufferAttribute(posAttr, i3 + 0);\n const b = verts[1].fromBufferAttribute(posAttr, i3 + 1);\n const c = verts[2].fromBufferAttribute(posAttr, i3 + 2);\n tempVec1.subVectors(c, b);\n tempVec2.subVectors(a, b);\n tempNorm.crossVectors(tempVec1, tempVec2).normalize();\n for (let n = 0; n < 3; n++) {\n const vert = verts[n];\n const hash = hashVertex(vert);\n const otherNormals = vertexMap[hash];\n tempNorm2.set(0, 0, 0);\n for (let k = 0, lk = otherNormals.length; k < lk; k++) {\n const otherNorm = otherNormals[k];\n if (tempNorm.dot(otherNorm) > creaseDot) {\n tempNorm2.add(otherNorm);\n }\n }\n tempNorm2.normalize();\n normAttr.setXYZ(i3 + n, tempNorm2.x, tempNorm2.y, tempNorm2.z);\n }\n }\n resultGeometry.setAttribute(\"normal\", normAttr);\n return resultGeometry;\n}\nexport {\n computeMorphedAttributes,\n estimateBytesUsed,\n interleaveAttributes,\n mergeBufferAttributes,\n mergeBufferGeometries,\n mergeVertices,\n toCreasedNormals,\n toTrianglesDrawMode\n};\n//# sourceMappingURL=BufferGeometryUtils.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Vector3, BufferGeometry, Float32BufferAttribute } from \"three\";\nimport { mergeVertices } from \"../utils/BufferGeometryUtils.js\";\nconst cb = /* @__PURE__ */ new Vector3();\nconst ab = /* @__PURE__ */ new Vector3();\nfunction pushIfUnique(array, object) {\n if (array.indexOf(object) === -1)\n array.push(object);\n}\nfunction removeFromArray(array, object) {\n const k = array.indexOf(object);\n if (k > -1)\n array.splice(k, 1);\n}\nclass Vertex {\n constructor(v, id) {\n __publicField(this, \"position\");\n __publicField(this, \"id\");\n __publicField(this, \"faces\");\n __publicField(this, \"neighbors\");\n __publicField(this, \"collapseCost\");\n __publicField(this, \"collapseNeighbor\");\n __publicField(this, \"minCost\", 0);\n __publicField(this, \"totalCost\", 0);\n __publicField(this, \"costCount\", 0);\n this.position = v;\n this.id = id;\n this.faces = [];\n this.neighbors = [];\n this.collapseCost = 0;\n this.collapseNeighbor = null;\n }\n addUniqueNeighbor(vertex) {\n pushIfUnique(this.neighbors, vertex);\n }\n removeIfNonNeighbor(n) {\n const neighbors = this.neighbors;\n const faces = this.faces;\n const offset = neighbors.indexOf(n);\n if (offset === -1)\n return;\n for (let i = 0; i < faces.length; i++) {\n if (faces[i].hasVertex(n))\n return;\n }\n neighbors.splice(offset, 1);\n }\n}\nclass Triangle {\n constructor(v1, v2, v3, a, b, c) {\n __publicField(this, \"a\");\n __publicField(this, \"b\");\n __publicField(this, \"c\");\n __publicField(this, \"v1\");\n __publicField(this, \"v2\");\n __publicField(this, \"v3\");\n __publicField(this, \"normal\", new Vector3());\n this.a = a;\n this.b = b;\n this.c = c;\n this.v1 = v1;\n this.v2 = v2;\n this.v3 = v3;\n this.computeNormal();\n v1.faces.push(this);\n v1.addUniqueNeighbor(v2);\n v1.addUniqueNeighbor(v3);\n v2.faces.push(this);\n v2.addUniqueNeighbor(v1);\n v2.addUniqueNeighbor(v3);\n v3.faces.push(this);\n v3.addUniqueNeighbor(v1);\n v3.addUniqueNeighbor(v2);\n }\n computeNormal() {\n const vA = this.v1.position;\n const vB = this.v2.position;\n const vC = this.v3.position;\n cb.subVectors(vC, vB);\n ab.subVectors(vA, vB);\n cb.cross(ab).normalize();\n this.normal.copy(cb);\n }\n hasVertex(v) {\n return v === this.v1 || v === this.v2 || v === this.v3;\n }\n replaceVertex(oldv, newv) {\n if (oldv === this.v1)\n this.v1 = newv;\n else if (oldv === this.v2)\n this.v2 = newv;\n else if (oldv === this.v3)\n this.v3 = newv;\n removeFromArray(oldv.faces, this);\n newv.faces.push(this);\n oldv.removeIfNonNeighbor(this.v1);\n this.v1.removeIfNonNeighbor(oldv);\n oldv.removeIfNonNeighbor(this.v2);\n this.v2.removeIfNonNeighbor(oldv);\n oldv.removeIfNonNeighbor(this.v3);\n this.v3.removeIfNonNeighbor(oldv);\n this.v1.addUniqueNeighbor(this.v2);\n this.v1.addUniqueNeighbor(this.v3);\n this.v2.addUniqueNeighbor(this.v1);\n this.v2.addUniqueNeighbor(this.v3);\n this.v3.addUniqueNeighbor(this.v1);\n this.v3.addUniqueNeighbor(this.v2);\n this.computeNormal();\n }\n}\nclass SimplifyModifier {\n constructor() {\n __publicField(this, \"computeEdgeCollapseCost\", (u, v) => {\n const edgelength = v.position.distanceTo(u.position);\n let curvature = 0;\n const sideFaces = [];\n let i, il = u.faces.length, face, sideFace;\n for (i = 0; i < il; i++) {\n face = u.faces[i];\n if (face.hasVertex(v)) {\n sideFaces.push(face);\n }\n }\n for (i = 0; i < il; i++) {\n let minCurvature = 1;\n face = u.faces[i];\n for (let j = 0; j < sideFaces.length; j++) {\n sideFace = sideFaces[j];\n const dotProd = face.normal.dot(sideFace.normal);\n minCurvature = Math.min(minCurvature, (1.001 - dotProd) / 2);\n }\n curvature = Math.max(curvature, minCurvature);\n }\n const borders = 0;\n if (sideFaces.length < 2) {\n curvature = 1;\n }\n const amt = edgelength * curvature + borders;\n return amt;\n });\n __publicField(this, \"computeEdgeCostAtVertex\", (v) => {\n if (v.neighbors.length === 0) {\n v.collapseNeighbor = null;\n v.collapseCost = -0.01;\n return;\n }\n v.collapseCost = 1e5;\n v.collapseNeighbor = null;\n for (let i = 0; i < v.neighbors.length; i++) {\n const collapseCost = this.computeEdgeCollapseCost(v, v.neighbors[i]);\n if (!v.collapseNeighbor) {\n v.collapseNeighbor = v.neighbors[i];\n v.collapseCost = collapseCost;\n v.minCost = collapseCost;\n v.totalCost = 0;\n v.costCount = 0;\n }\n v.costCount++;\n v.totalCost += collapseCost;\n if (collapseCost < v.minCost) {\n v.collapseNeighbor = v.neighbors[i];\n v.minCost = collapseCost;\n }\n }\n v.collapseCost = v.totalCost / v.costCount;\n });\n __publicField(this, \"removeFace\", (f, faces) => {\n removeFromArray(faces, f);\n if (f.v1)\n removeFromArray(f.v1.faces, f);\n if (f.v2)\n removeFromArray(f.v2.faces, f);\n if (f.v3)\n removeFromArray(f.v3.faces, f);\n const vs = [f.v1, f.v2, f.v3];\n let v1, v2;\n for (let i = 0; i < 3; i++) {\n v1 = vs[i];\n v2 = vs[(i + 1) % 3];\n if (!v1 || !v2)\n continue;\n v1.removeIfNonNeighbor(v2);\n v2.removeIfNonNeighbor(v1);\n }\n });\n __publicField(this, \"collapse\", (vertices, faces, u, v) => {\n if (!v) {\n this.removeVertex(u, vertices);\n return;\n }\n let i;\n const tmpVertices = [];\n for (i = 0; i < u.neighbors.length; i++) {\n tmpVertices.push(u.neighbors[i]);\n }\n for (i = u.faces.length - 1; i >= 0; i--) {\n if (u.faces[i].hasVertex(v)) {\n this.removeFace(u.faces[i], faces);\n }\n }\n for (i = u.faces.length - 1; i >= 0; i--) {\n u.faces[i].replaceVertex(u, v);\n }\n this.removeVertex(u, vertices);\n for (i = 0; i < tmpVertices.length; i++) {\n this.computeEdgeCostAtVertex(tmpVertices[i]);\n }\n });\n __publicField(this, \"minimumCostEdge\", (vertices) => {\n let least = vertices[0];\n for (let i = 0; i < vertices.length; i++) {\n if (vertices[i].collapseCost < least.collapseCost) {\n least = vertices[i];\n }\n }\n return least;\n });\n __publicField(this, \"modify\", (geometry, count) => {\n geometry = geometry.clone();\n const attributes = geometry.attributes;\n for (let name in attributes) {\n if (name !== \"position\")\n geometry.deleteAttribute(name);\n }\n geometry = mergeVertices(geometry);\n const vertices = [];\n const faces = [];\n const positionAttribute = geometry.getAttribute(\"position\");\n for (let i = 0; i < positionAttribute.count; i++) {\n const v = new Vector3().fromBufferAttribute(positionAttribute, i);\n const vertex = new Vertex(v, i);\n vertices.push(vertex);\n }\n const geomIndex = geometry.getIndex();\n if (geomIndex !== null) {\n for (let i = 0; i < geomIndex.count; i += 3) {\n const a = geomIndex.getX(i);\n const b = geomIndex.getX(i + 1);\n const c = geomIndex.getX(i + 2);\n const triangle = new Triangle(vertices[a], vertices[b], vertices[c], a, b, c);\n faces.push(triangle);\n }\n } else {\n for (let i = 0; i < positionAttribute.count; i += 3) {\n const a = i;\n const b = i + 1;\n const c = i + 2;\n const triangle = new Triangle(vertices[a], vertices[b], vertices[c], a, b, c);\n faces.push(triangle);\n }\n }\n for (let i = 0, il = vertices.length; i < il; i++) {\n this.computeEdgeCostAtVertex(vertices[i]);\n }\n let nextVertex;\n let z = count;\n while (z--) {\n nextVertex = this.minimumCostEdge(vertices);\n if (!nextVertex) {\n console.log(\"THREE.SimplifyModifier: No next vertex\");\n break;\n } else {\n this.collapse(vertices, faces, nextVertex, nextVertex.collapseNeighbor);\n }\n }\n const simplifiedGeometry = new BufferGeometry();\n const position = [];\n let index = [];\n for (let i = 0; i < vertices.length; i++) {\n const vertex = vertices[i].position;\n position.push(vertex.x, vertex.y, vertex.z);\n }\n for (let i = 0; i < faces.length; i++) {\n const face = faces[i];\n const a = vertices.indexOf(face.v1);\n const b = vertices.indexOf(face.v2);\n const c = vertices.indexOf(face.v3);\n index.push(a, b, c);\n }\n simplifiedGeometry.setAttribute(\"position\", new Float32BufferAttribute(position, 3));\n simplifiedGeometry.setIndex(index);\n return simplifiedGeometry;\n });\n }\n removeVertex(v, vertices) {\n console.assert(v.faces.length === 0);\n while (v.neighbors.length) {\n const n = v.neighbors.pop();\n removeFromArray(n.neighbors, v);\n }\n removeFromArray(vertices, v);\n }\n}\nexport {\n SimplifyModifier\n};\n//# sourceMappingURL=SimplifyModifier.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Vector3, BufferAttribute, BufferGeometry } from \"three\";\nimport * as BufferGeometryUtils from \"../utils/BufferGeometryUtils.js\";\nimport { mergeVertices } from \"../utils/BufferGeometryUtils.js\";\nclass EdgeSplitModifier {\n constructor() {\n __publicField(this, \"A\", new Vector3());\n __publicField(this, \"B\", new Vector3());\n __publicField(this, \"C\", new Vector3());\n __publicField(this, \"positions\", []);\n __publicField(this, \"normals\", new Float32Array());\n __publicField(this, \"indexes\", []);\n __publicField(this, \"pointToIndexMap\", []);\n __publicField(this, \"splitIndexes\", []);\n __publicField(this, \"oldNormals\", []);\n __publicField(this, \"computeNormals\", () => {\n this.normals = new Float32Array(this.indexes.length * 3);\n for (let i = 0; i < this.indexes.length; i += 3) {\n let index = this.indexes[i];\n this.A.set(this.positions[3 * index], this.positions[3 * index + 1], this.positions[3 * index + 2]);\n index = this.indexes[i + 1];\n this.B.set(this.positions[3 * index], this.positions[3 * index + 1], this.positions[3 * index + 2]);\n index = this.indexes[i + 2];\n this.C.set(this.positions[3 * index], this.positions[3 * index + 1], this.positions[3 * index + 2]);\n this.C.sub(this.B);\n this.A.sub(this.B);\n const normal = this.C.cross(this.A).normalize();\n for (let j = 0; j < 3; j++) {\n this.normals[3 * (i + j)] = normal.x;\n this.normals[3 * (i + j) + 1] = normal.y;\n this.normals[3 * (i + j) + 2] = normal.z;\n }\n }\n });\n __publicField(this, \"mapPositionsToIndexes\", () => {\n this.pointToIndexMap = Array(this.positions.length / 3);\n for (let i = 0; i < this.indexes.length; i++) {\n const index = this.indexes[i];\n if (this.pointToIndexMap[index] == null) {\n this.pointToIndexMap[index] = [];\n }\n this.pointToIndexMap[index].push(i);\n }\n });\n __publicField(this, \"edgeSplitToGroups\", (indexes, cutOff, firstIndex) => {\n this.A.set(\n this.normals[3 * firstIndex],\n this.normals[3 * firstIndex + 1],\n this.normals[3 * firstIndex + 2]\n ).normalize();\n const result = {\n splitGroup: [],\n currentGroup: [firstIndex]\n };\n for (let j of indexes) {\n if (j !== firstIndex) {\n this.B.set(this.normals[3 * j], this.normals[3 * j + 1], this.normals[3 * j + 2]).normalize();\n if (this.B.dot(this.A) < cutOff) {\n result.splitGroup.push(j);\n } else {\n result.currentGroup.push(j);\n }\n }\n }\n return result;\n });\n __publicField(this, \"edgeSplit\", (indexes, cutOff, original = null) => {\n if (indexes.length === 0)\n return;\n const groupResults = [];\n for (let index of indexes) {\n groupResults.push(this.edgeSplitToGroups(indexes, cutOff, index));\n }\n let result = groupResults[0];\n for (let groupResult of groupResults) {\n if (groupResult.currentGroup.length > result.currentGroup.length) {\n result = groupResult;\n }\n }\n if (original != null) {\n this.splitIndexes.push({\n original,\n indexes: result.currentGroup\n });\n }\n if (result.splitGroup.length) {\n this.edgeSplit(result.splitGroup, cutOff, original || result.currentGroup[0]);\n }\n });\n __publicField(this, \"modify\", (geometry, cutOffAngle, tryKeepNormals = true) => {\n let hadNormals = false;\n if (geometry.attributes.normal) {\n hadNormals = true;\n geometry = geometry.clone();\n if (tryKeepNormals === true && geometry.index !== null) {\n this.oldNormals = geometry.attributes.normal.array;\n }\n geometry.deleteAttribute(\"normal\");\n }\n if (geometry.index == null) {\n if (BufferGeometryUtils === void 0) {\n throw \"THREE.EdgeSplitModifier relies on BufferGeometryUtils\";\n }\n geometry = mergeVertices(geometry);\n }\n this.indexes = geometry.index.array;\n this.positions = geometry.getAttribute(\"position\").array;\n this.computeNormals();\n this.mapPositionsToIndexes();\n this.splitIndexes = [];\n for (let vertexIndexes of this.pointToIndexMap) {\n this.edgeSplit(vertexIndexes, Math.cos(cutOffAngle) - 1e-3);\n }\n const newAttributes = {};\n for (let name of Object.keys(geometry.attributes)) {\n const oldAttribute = geometry.attributes[name];\n const newArray = new oldAttribute.array.constructor(\n (this.indexes.length + this.splitIndexes.length) * oldAttribute.itemSize\n );\n newArray.set(oldAttribute.array);\n newAttributes[name] = new BufferAttribute(newArray, oldAttribute.itemSize, oldAttribute.normalized);\n }\n const newIndexes = new Uint32Array(this.indexes.length);\n newIndexes.set(this.indexes);\n for (let i = 0; i < this.splitIndexes.length; i++) {\n const split = this.splitIndexes[i];\n const index = this.indexes[split.original];\n for (let attribute of Object.values(newAttributes)) {\n for (let j = 0; j < attribute.itemSize; j++) {\n attribute.array[(this.indexes.length + i) * attribute.itemSize + j] = attribute.array[index * attribute.itemSize + j];\n }\n }\n for (let j of split.indexes) {\n newIndexes[j] = this.indexes.length + i;\n }\n }\n geometry = new BufferGeometry();\n geometry.setIndex(new BufferAttribute(newIndexes, 1));\n for (let name of Object.keys(newAttributes)) {\n geometry.setAttribute(name, newAttributes[name]);\n }\n if (hadNormals) {\n geometry.computeVertexNormals();\n if (this.oldNormals !== null) {\n const changedNormals = new Array(this.oldNormals.length / 3).fill(false);\n for (let splitData of this.splitIndexes)\n changedNormals[splitData.original] = true;\n for (let i = 0; i < changedNormals.length; i++) {\n if (changedNormals[i] === false) {\n for (let j = 0; j < 3; j++) {\n geometry.attributes.normal.array[3 * i + j] = this.oldNormals[3 * i + j];\n }\n }\n }\n }\n }\n return geometry;\n });\n }\n}\nexport {\n EdgeSplitModifier\n};\n//# sourceMappingURL=EdgeSplitModifier.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Vector3, Color, Vector2, BufferGeometry, Float32BufferAttribute } from \"three\";\nimport { UV1 } from \"../_polyfill/uv1.js\";\nclass TessellateModifier {\n constructor(maxEdgeLength = 0.1, maxIterations = 6) {\n __publicField(this, \"maxEdgeLength\");\n __publicField(this, \"maxIterations\");\n __publicField(this, \"modify\", (geometry) => {\n if (geometry.index !== null) {\n geometry = geometry.toNonIndexed();\n }\n const maxIterations = this.maxIterations;\n const maxEdgeLengthSquared = this.maxEdgeLength * this.maxEdgeLength;\n const va = new Vector3();\n const vb = new Vector3();\n const vc = new Vector3();\n const vm = new Vector3();\n const vs = [va, vb, vc, vm];\n const na = new Vector3();\n const nb = new Vector3();\n const nc = new Vector3();\n const nm = new Vector3();\n const ns = [na, nb, nc, nm];\n const ca = new Color();\n const cb = new Color();\n const cc = new Color();\n const cm = new Color();\n const cs = [ca, cb, cc, cm];\n const ua = new Vector2();\n const ub = new Vector2();\n const uc = new Vector2();\n const um = new Vector2();\n const us = [ua, ub, uc, um];\n const u2a = new Vector2();\n const u2b = new Vector2();\n const u2c = new Vector2();\n const u2m = new Vector2();\n const u2s = [u2a, u2b, u2c, u2m];\n const attributes = geometry.attributes;\n const hasNormals = attributes.normal !== void 0;\n const hasColors = attributes.color !== void 0;\n const hasUVs = attributes.uv !== void 0;\n const hasUV1s = attributes[UV1] !== void 0;\n let positions = attributes.position.array;\n let normals = hasNormals ? attributes.normal.array : null;\n let colors = hasColors ? attributes.color.array : null;\n let uvs = hasUVs ? attributes.uv.array : null;\n let uv1s = hasUV1s ? attributes.uv1.array : null;\n let positions2 = positions;\n let normals2 = normals;\n let colors2 = colors;\n let uvs2 = uvs;\n let uv1s2 = uv1s;\n let iteration = 0;\n let tessellating = true;\n function addTriangle(a, b, c) {\n const v1 = vs[a];\n const v2 = vs[b];\n const v3 = vs[c];\n positions2.push(v1.x, v1.y, v1.z);\n positions2.push(v2.x, v2.y, v2.z);\n positions2.push(v3.x, v3.y, v3.z);\n if (hasNormals) {\n const n1 = ns[a];\n const n2 = ns[b];\n const n3 = ns[c];\n normals2.push(n1.x, n1.y, n1.z);\n normals2.push(n2.x, n2.y, n2.z);\n normals2.push(n3.x, n3.y, n3.z);\n }\n if (hasColors) {\n const c1 = cs[a];\n const c2 = cs[b];\n const c3 = cs[c];\n colors2.push(c1.r, c1.g, c1.b);\n colors2.push(c2.r, c2.g, c2.b);\n colors2.push(c3.r, c3.g, c3.b);\n }\n if (hasUVs) {\n const u1 = us[a];\n const u2 = us[b];\n const u3 = us[c];\n uvs2.push(u1.x, u1.y);\n uvs2.push(u2.x, u2.y);\n uvs2.push(u3.x, u3.y);\n }\n if (hasUV1s) {\n const u21 = u2s[a];\n const u22 = u2s[b];\n const u23 = u2s[c];\n uv1s2.push(u21.x, u21.y);\n uv1s2.push(u22.x, u22.y);\n uv1s2.push(u23.x, u23.y);\n }\n }\n while (tessellating && iteration < maxIterations) {\n iteration++;\n tessellating = false;\n positions = positions2;\n positions2 = [];\n if (hasNormals) {\n normals = normals2;\n normals2 = [];\n }\n if (hasColors) {\n colors = colors2;\n colors2 = [];\n }\n if (hasUVs) {\n uvs = uvs2;\n uvs2 = [];\n }\n if (hasUV1s) {\n uv1s = uv1s2;\n uv1s2 = [];\n }\n for (let i = 0, i2 = 0, il = positions.length; i < il; i += 9, i2 += 6) {\n va.fromArray(positions, i + 0);\n vb.fromArray(positions, i + 3);\n vc.fromArray(positions, i + 6);\n if (hasNormals && normals) {\n na.fromArray(normals, i + 0);\n nb.fromArray(normals, i + 3);\n nc.fromArray(normals, i + 6);\n }\n if (hasColors && colors) {\n ca.fromArray(colors, i + 0);\n cb.fromArray(colors, i + 3);\n cc.fromArray(colors, i + 6);\n }\n if (hasUVs && uvs) {\n ua.fromArray(uvs, i2 + 0);\n ub.fromArray(uvs, i2 + 2);\n uc.fromArray(uvs, i2 + 4);\n }\n if (hasUV1s && uv1s) {\n u2a.fromArray(uv1s, i2 + 0);\n u2b.fromArray(uv1s, i2 + 2);\n u2c.fromArray(uv1s, i2 + 4);\n }\n const dab = va.distanceToSquared(vb);\n const dbc = vb.distanceToSquared(vc);\n const dac = va.distanceToSquared(vc);\n if (dab > maxEdgeLengthSquared || dbc > maxEdgeLengthSquared || dac > maxEdgeLengthSquared) {\n tessellating = true;\n if (dab >= dbc && dab >= dac) {\n vm.lerpVectors(va, vb, 0.5);\n if (hasNormals)\n nm.lerpVectors(na, nb, 0.5);\n if (hasColors)\n cm.lerpColors(ca, cb, 0.5);\n if (hasUVs)\n um.lerpVectors(ua, ub, 0.5);\n if (hasUV1s)\n u2m.lerpVectors(u2a, u2b, 0.5);\n addTriangle(0, 3, 2);\n addTriangle(3, 1, 2);\n } else if (dbc >= dab && dbc >= dac) {\n vm.lerpVectors(vb, vc, 0.5);\n if (hasNormals)\n nm.lerpVectors(nb, nc, 0.5);\n if (hasColors)\n cm.lerpColors(cb, cc, 0.5);\n if (hasUVs)\n um.lerpVectors(ub, uc, 0.5);\n if (hasUV1s)\n u2m.lerpVectors(u2b, u2c, 0.5);\n addTriangle(0, 1, 3);\n addTriangle(3, 2, 0);\n } else {\n vm.lerpVectors(va, vc, 0.5);\n if (hasNormals)\n nm.lerpVectors(na, nc, 0.5);\n if (hasColors)\n cm.lerpColors(ca, cc, 0.5);\n if (hasUVs)\n um.lerpVectors(ua, uc, 0.5);\n if (hasUV1s)\n u2m.lerpVectors(u2a, u2c, 0.5);\n addTriangle(0, 1, 3);\n addTriangle(3, 1, 2);\n }\n } else {\n addTriangle(0, 1, 2);\n }\n }\n }\n const geometry2 = new BufferGeometry();\n geometry2.setAttribute(\"position\", new Float32BufferAttribute(positions2, 3));\n if (hasNormals) {\n geometry2.setAttribute(\"normal\", new Float32BufferAttribute(normals2, 3));\n }\n if (hasColors) {\n geometry2.setAttribute(\"color\", new Float32BufferAttribute(colors2, 3));\n }\n if (hasUVs) {\n geometry2.setAttribute(\"uv\", new Float32BufferAttribute(uvs2, 2));\n }\n if (hasUV1s) {\n geometry2.setAttribute(UV1, new Float32BufferAttribute(uv1s2, 2));\n }\n return geometry2;\n });\n this.maxEdgeLength = maxEdgeLength;\n this.maxIterations = maxIterations;\n }\n}\nexport {\n TessellateModifier\n};\n//# sourceMappingURL=TessellateModifier.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { PropertyBinding, InterpolateLinear, Color, Vector3, CompressedTexture, Texture, MathUtils, RGBAFormat, DoubleSide, BufferAttribute, InterpolateDiscrete, Matrix4, Scene, PlaneGeometry, ShaderMaterial, Uniform, Mesh, PerspectiveCamera, WebGLRenderer, NearestFilter, NearestMipmapNearestFilter, NearestMipmapLinearFilter, LinearFilter, LinearMipmapNearestFilter, LinearMipmapLinearFilter, ClampToEdgeWrapping, RepeatWrapping, MirroredRepeatWrapping } from \"three\";\nimport { version } from \"../_polyfill/constants.js\";\nasync function readAsDataURL(blob) {\n const buffer = await blob.arrayBuffer();\n const data = btoa(String.fromCharCode(...new Uint8Array(buffer)));\n return `data:${blob.type || \"\"};base64,${data}`;\n}\nlet _renderer;\nlet fullscreenQuadGeometry;\nlet fullscreenQuadMaterial;\nlet fullscreenQuad;\nfunction decompress(texture, maxTextureSize = Infinity, renderer = null) {\n if (!fullscreenQuadGeometry)\n fullscreenQuadGeometry = new PlaneGeometry(2, 2, 1, 1);\n if (!fullscreenQuadMaterial)\n fullscreenQuadMaterial = new ShaderMaterial({\n uniforms: { blitTexture: new Uniform(texture) },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n void main(){\n vUv = uv;\n gl_Position = vec4(position.xy * 1.0,0.,.999999);\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D blitTexture; \n varying vec2 vUv;\n\n void main(){ \n gl_FragColor = vec4(vUv.xy, 0, 1);\n \n #ifdef IS_SRGB\n gl_FragColor = LinearTosRGB( texture2D( blitTexture, vUv) );\n #else\n gl_FragColor = texture2D( blitTexture, vUv);\n #endif\n }\n `\n )\n });\n fullscreenQuadMaterial.uniforms.blitTexture.value = texture;\n fullscreenQuadMaterial.defines.IS_SRGB = \"colorSpace\" in texture ? texture.colorSpace === \"srgb\" : texture.encoding === 3001;\n fullscreenQuadMaterial.needsUpdate = true;\n if (!fullscreenQuad) {\n fullscreenQuad = new Mesh(fullscreenQuadGeometry, fullscreenQuadMaterial);\n fullscreenQuad.frustrumCulled = false;\n }\n const _camera = new PerspectiveCamera();\n const _scene = new Scene();\n _scene.add(fullscreenQuad);\n if (!renderer) {\n renderer = _renderer = new WebGLRenderer({ antialias: false });\n }\n renderer.setSize(Math.min(texture.image.width, maxTextureSize), Math.min(texture.image.height, maxTextureSize));\n renderer.clear();\n renderer.render(_scene, _camera);\n const readableTexture = new Texture(renderer.domElement);\n readableTexture.minFilter = texture.minFilter;\n readableTexture.magFilter = texture.magFilter;\n readableTexture.wrapS = texture.wrapS;\n readableTexture.wrapT = texture.wrapT;\n readableTexture.name = texture.name;\n if (_renderer) {\n _renderer.dispose();\n _renderer = null;\n }\n return readableTexture;\n}\nconst KHR_mesh_quantization_ExtraAttrTypes = {\n POSITION: [\n \"byte\",\n \"byte normalized\",\n \"unsigned byte\",\n \"unsigned byte normalized\",\n \"short\",\n \"short normalized\",\n \"unsigned short\",\n \"unsigned short normalized\"\n ],\n NORMAL: [\"byte normalized\", \"short normalized\"],\n TANGENT: [\"byte normalized\", \"short normalized\"],\n TEXCOORD: [\"byte\", \"byte normalized\", \"unsigned byte\", \"short\", \"short normalized\", \"unsigned short\"]\n};\nconst GLTFExporter = /* @__PURE__ */ (() => {\n class GLTFExporter2 {\n constructor() {\n this.pluginCallbacks = [];\n this.register(function(writer) {\n return new GLTFLightExtension(writer);\n });\n this.register(function(writer) {\n return new GLTFMaterialsUnlitExtension(writer);\n });\n this.register(function(writer) {\n return new GLTFMaterialsTransmissionExtension(writer);\n });\n this.register(function(writer) {\n return new GLTFMaterialsVolumeExtension(writer);\n });\n this.register(function(writer) {\n return new GLTFMaterialsIorExtension(writer);\n });\n this.register(function(writer) {\n return new GLTFMaterialsSpecularExtension(writer);\n });\n this.register(function(writer) {\n return new GLTFMaterialsClearcoatExtension(writer);\n });\n this.register(function(writer) {\n return new GLTFMaterialsIridescenceExtension(writer);\n });\n this.register(function(writer) {\n return new GLTFMaterialsSheenExtension(writer);\n });\n this.register(function(writer) {\n return new GLTFMaterialsAnisotropyExtension(writer);\n });\n this.register(function(writer) {\n return new GLTFMaterialsEmissiveStrengthExtension(writer);\n });\n }\n register(callback) {\n if (this.pluginCallbacks.indexOf(callback) === -1) {\n this.pluginCallbacks.push(callback);\n }\n return this;\n }\n unregister(callback) {\n if (this.pluginCallbacks.indexOf(callback) !== -1) {\n this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(callback), 1);\n }\n return this;\n }\n /**\n * Parse scenes and generate GLTF output\n * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes\n * @param {Function} onDone Callback on completed\n * @param {Function} onError Callback on errors\n * @param {Object} options options\n */\n parse(input, onDone, onError, options) {\n const writer = new GLTFWriter();\n const plugins = [];\n for (let i = 0, il = this.pluginCallbacks.length; i < il; i++) {\n plugins.push(this.pluginCallbacks[i](writer));\n }\n writer.setPlugins(plugins);\n writer.write(input, onDone, options).catch(onError);\n }\n parseAsync(input, options) {\n const scope = this;\n return new Promise(function(resolve, reject) {\n scope.parse(input, resolve, reject, options);\n });\n }\n }\n /**\n * Static utility functions\n */\n __publicField(GLTFExporter2, \"Utils\", {\n insertKeyframe: function(track, time) {\n const tolerance = 1e-3;\n const valueSize = track.getValueSize();\n const times = new track.TimeBufferType(track.times.length + 1);\n const values = new track.ValueBufferType(track.values.length + valueSize);\n const interpolant = track.createInterpolant(new track.ValueBufferType(valueSize));\n let index;\n if (track.times.length === 0) {\n times[0] = time;\n for (let i = 0; i < valueSize; i++) {\n values[i] = 0;\n }\n index = 0;\n } else if (time < track.times[0]) {\n if (Math.abs(track.times[0] - time) < tolerance)\n return 0;\n times[0] = time;\n times.set(track.times, 1);\n values.set(interpolant.evaluate(time), 0);\n values.set(track.values, valueSize);\n index = 0;\n } else if (time > track.times[track.times.length - 1]) {\n if (Math.abs(track.times[track.times.length - 1] - time) < tolerance) {\n return track.times.length - 1;\n }\n times[times.length - 1] = time;\n times.set(track.times, 0);\n values.set(track.values, 0);\n values.set(interpolant.evaluate(time), track.values.length);\n index = times.length - 1;\n } else {\n for (let i = 0; i < track.times.length; i++) {\n if (Math.abs(track.times[i] - time) < tolerance)\n return i;\n if (track.times[i] < time && track.times[i + 1] > time) {\n times.set(track.times.slice(0, i + 1), 0);\n times[i + 1] = time;\n times.set(track.times.slice(i + 1), i + 2);\n values.set(track.values.slice(0, (i + 1) * valueSize), 0);\n values.set(interpolant.evaluate(time), (i + 1) * valueSize);\n values.set(track.values.slice((i + 1) * valueSize), (i + 2) * valueSize);\n index = i + 1;\n break;\n }\n }\n }\n track.times = times;\n track.values = values;\n return index;\n },\n mergeMorphTargetTracks: function(clip, root) {\n const tracks = [];\n const mergedTracks = {};\n const sourceTracks = clip.tracks;\n for (let i = 0; i < sourceTracks.length; ++i) {\n let sourceTrack = sourceTracks[i];\n const sourceTrackBinding = PropertyBinding.parseTrackName(sourceTrack.name);\n const sourceTrackNode = PropertyBinding.findNode(root, sourceTrackBinding.nodeName);\n if (sourceTrackBinding.propertyName !== \"morphTargetInfluences\" || sourceTrackBinding.propertyIndex === void 0) {\n tracks.push(sourceTrack);\n continue;\n }\n if (sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodDiscrete && sourceTrack.createInterpolant !== sourceTrack.InterpolantFactoryMethodLinear) {\n if (sourceTrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline) {\n throw new Error(\"THREE.GLTFExporter: Cannot merge tracks with glTF CUBICSPLINE interpolation.\");\n }\n console.warn(\"THREE.GLTFExporter: Morph target interpolation mode not yet supported. Using LINEAR instead.\");\n sourceTrack = sourceTrack.clone();\n sourceTrack.setInterpolation(InterpolateLinear);\n }\n const targetCount = sourceTrackNode.morphTargetInfluences.length;\n const targetIndex = sourceTrackNode.morphTargetDictionary[sourceTrackBinding.propertyIndex];\n if (targetIndex === void 0) {\n throw new Error(\"THREE.GLTFExporter: Morph target name not found: \" + sourceTrackBinding.propertyIndex);\n }\n let mergedTrack;\n if (mergedTracks[sourceTrackNode.uuid] === void 0) {\n mergedTrack = sourceTrack.clone();\n const values = new mergedTrack.ValueBufferType(targetCount * mergedTrack.times.length);\n for (let j = 0; j < mergedTrack.times.length; j++) {\n values[j * targetCount + targetIndex] = mergedTrack.values[j];\n }\n mergedTrack.name = (sourceTrackBinding.nodeName || \"\") + \".morphTargetInfluences\";\n mergedTrack.values = values;\n mergedTracks[sourceTrackNode.uuid] = mergedTrack;\n tracks.push(mergedTrack);\n continue;\n }\n const sourceInterpolant = sourceTrack.createInterpolant(new sourceTrack.ValueBufferType(1));\n mergedTrack = mergedTracks[sourceTrackNode.uuid];\n for (let j = 0; j < mergedTrack.times.length; j++) {\n mergedTrack.values[j * targetCount + targetIndex] = sourceInterpolant.evaluate(mergedTrack.times[j]);\n }\n for (let j = 0; j < sourceTrack.times.length; j++) {\n const keyframeIndex = this.insertKeyframe(mergedTrack, sourceTrack.times[j]);\n mergedTrack.values[keyframeIndex * targetCount + targetIndex] = sourceTrack.values[j];\n }\n }\n clip.tracks = tracks;\n return clip;\n }\n });\n return GLTFExporter2;\n})();\nconst WEBGL_CONSTANTS = {\n POINTS: 0,\n LINES: 1,\n LINE_LOOP: 2,\n LINE_STRIP: 3,\n TRIANGLES: 4,\n TRIANGLE_STRIP: 5,\n TRIANGLE_FAN: 6,\n BYTE: 5120,\n UNSIGNED_BYTE: 5121,\n SHORT: 5122,\n UNSIGNED_SHORT: 5123,\n INT: 5124,\n UNSIGNED_INT: 5125,\n FLOAT: 5126,\n ARRAY_BUFFER: 34962,\n ELEMENT_ARRAY_BUFFER: 34963,\n NEAREST: 9728,\n LINEAR: 9729,\n NEAREST_MIPMAP_NEAREST: 9984,\n LINEAR_MIPMAP_NEAREST: 9985,\n NEAREST_MIPMAP_LINEAR: 9986,\n LINEAR_MIPMAP_LINEAR: 9987,\n CLAMP_TO_EDGE: 33071,\n MIRRORED_REPEAT: 33648,\n REPEAT: 10497\n};\nconst KHR_MESH_QUANTIZATION = \"KHR_mesh_quantization\";\nconst THREE_TO_WEBGL = {};\nTHREE_TO_WEBGL[NearestFilter] = WEBGL_CONSTANTS.NEAREST;\nTHREE_TO_WEBGL[NearestMipmapNearestFilter] = WEBGL_CONSTANTS.NEAREST_MIPMAP_NEAREST;\nTHREE_TO_WEBGL[NearestMipmapLinearFilter] = WEBGL_CONSTANTS.NEAREST_MIPMAP_LINEAR;\nTHREE_TO_WEBGL[LinearFilter] = WEBGL_CONSTANTS.LINEAR;\nTHREE_TO_WEBGL[LinearMipmapNearestFilter] = WEBGL_CONSTANTS.LINEAR_MIPMAP_NEAREST;\nTHREE_TO_WEBGL[LinearMipmapLinearFilter] = WEBGL_CONSTANTS.LINEAR_MIPMAP_LINEAR;\nTHREE_TO_WEBGL[ClampToEdgeWrapping] = WEBGL_CONSTANTS.CLAMP_TO_EDGE;\nTHREE_TO_WEBGL[RepeatWrapping] = WEBGL_CONSTANTS.REPEAT;\nTHREE_TO_WEBGL[MirroredRepeatWrapping] = WEBGL_CONSTANTS.MIRRORED_REPEAT;\nconst PATH_PROPERTIES = {\n scale: \"scale\",\n position: \"translation\",\n quaternion: \"rotation\",\n morphTargetInfluences: \"weights\"\n};\nconst DEFAULT_SPECULAR_COLOR = /* @__PURE__ */ new Color();\nconst GLB_HEADER_BYTES = 12;\nconst GLB_HEADER_MAGIC = 1179937895;\nconst GLB_VERSION = 2;\nconst GLB_CHUNK_PREFIX_BYTES = 8;\nconst GLB_CHUNK_TYPE_JSON = 1313821514;\nconst GLB_CHUNK_TYPE_BIN = 5130562;\nfunction equalArray(array1, array2) {\n return array1.length === array2.length && array1.every(function(element, index) {\n return element === array2[index];\n });\n}\nfunction stringToArrayBuffer(text) {\n return new TextEncoder().encode(text).buffer;\n}\nfunction isIdentityMatrix(matrix) {\n return equalArray(matrix.elements, [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1]);\n}\nfunction getMinMax(attribute, start, count) {\n const output = {\n min: new Array(attribute.itemSize).fill(Number.POSITIVE_INFINITY),\n max: new Array(attribute.itemSize).fill(Number.NEGATIVE_INFINITY)\n };\n for (let i = start; i < start + count; i++) {\n for (let a = 0; a < attribute.itemSize; a++) {\n let value;\n if (attribute.itemSize > 4) {\n value = attribute.array[i * attribute.itemSize + a];\n } else {\n if (a === 0)\n value = attribute.getX(i);\n else if (a === 1)\n value = attribute.getY(i);\n else if (a === 2)\n value = attribute.getZ(i);\n else if (a === 3)\n value = attribute.getW(i);\n if (attribute.normalized === true) {\n value = MathUtils.normalize(value, attribute.array);\n }\n }\n output.min[a] = Math.min(output.min[a], value);\n output.max[a] = Math.max(output.max[a], value);\n }\n }\n return output;\n}\nfunction getPaddedBufferSize(bufferSize) {\n return Math.ceil(bufferSize / 4) * 4;\n}\nfunction getPaddedArrayBuffer(arrayBuffer, paddingByte = 0) {\n const paddedLength = getPaddedBufferSize(arrayBuffer.byteLength);\n if (paddedLength !== arrayBuffer.byteLength) {\n const array = new Uint8Array(paddedLength);\n array.set(new Uint8Array(arrayBuffer));\n if (paddingByte !== 0) {\n for (let i = arrayBuffer.byteLength; i < paddedLength; i++) {\n array[i] = paddingByte;\n }\n }\n return array.buffer;\n }\n return arrayBuffer;\n}\nfunction getCanvas() {\n if (typeof document === \"undefined\" && typeof OffscreenCanvas !== \"undefined\") {\n return new OffscreenCanvas(1, 1);\n }\n return document.createElement(\"canvas\");\n}\nfunction getToBlobPromise(canvas, mimeType) {\n if (canvas.toBlob !== void 0) {\n return new Promise((resolve) => canvas.toBlob(resolve, mimeType));\n }\n let quality;\n if (mimeType === \"image/jpeg\") {\n quality = 0.92;\n } else if (mimeType === \"image/webp\") {\n quality = 0.8;\n }\n return canvas.convertToBlob({\n type: mimeType,\n quality\n });\n}\nclass GLTFWriter {\n constructor() {\n this.plugins = [];\n this.options = {};\n this.pending = [];\n this.buffers = [];\n this.byteOffset = 0;\n this.buffers = [];\n this.nodeMap = /* @__PURE__ */ new Map();\n this.skins = [];\n this.extensionsUsed = {};\n this.extensionsRequired = {};\n this.uids = /* @__PURE__ */ new Map();\n this.uid = 0;\n this.json = {\n asset: {\n version: \"2.0\",\n generator: \"THREE.GLTFExporter\"\n }\n };\n this.cache = {\n meshes: /* @__PURE__ */ new Map(),\n attributes: /* @__PURE__ */ new Map(),\n attributesNormalized: /* @__PURE__ */ new Map(),\n materials: /* @__PURE__ */ new Map(),\n textures: /* @__PURE__ */ new Map(),\n images: /* @__PURE__ */ new Map()\n };\n }\n setPlugins(plugins) {\n this.plugins = plugins;\n }\n /**\n * Parse scenes and generate GLTF output\n * @param {Scene or [THREE.Scenes]} input Scene or Array of THREE.Scenes\n * @param {Function} onDone Callback on completed\n * @param {Object} options options\n */\n async write(input, onDone, options = {}) {\n this.options = Object.assign(\n {\n // default options\n binary: false,\n trs: false,\n onlyVisible: true,\n maxTextureSize: Infinity,\n animations: [],\n includeCustomExtensions: false\n },\n options\n );\n if (this.options.animations.length > 0) {\n this.options.trs = true;\n }\n this.processInput(input);\n await Promise.all(this.pending);\n const writer = this;\n const buffers = writer.buffers;\n const json = writer.json;\n options = writer.options;\n const extensionsUsed = writer.extensionsUsed;\n const extensionsRequired = writer.extensionsRequired;\n const blob = new Blob(buffers, { type: \"application/octet-stream\" });\n const extensionsUsedList = Object.keys(extensionsUsed);\n const extensionsRequiredList = Object.keys(extensionsRequired);\n if (extensionsUsedList.length > 0)\n json.extensionsUsed = extensionsUsedList;\n if (extensionsRequiredList.length > 0)\n json.extensionsRequired = extensionsRequiredList;\n if (json.buffers && json.buffers.length > 0)\n json.buffers[0].byteLength = blob.size;\n if (options.binary === true) {\n blob.arrayBuffer().then((result) => {\n const binaryChunk = getPaddedArrayBuffer(result);\n const binaryChunkPrefix = new DataView(new ArrayBuffer(GLB_CHUNK_PREFIX_BYTES));\n binaryChunkPrefix.setUint32(0, binaryChunk.byteLength, true);\n binaryChunkPrefix.setUint32(4, GLB_CHUNK_TYPE_BIN, true);\n const jsonChunk = getPaddedArrayBuffer(stringToArrayBuffer(JSON.stringify(json)), 32);\n const jsonChunkPrefix = new DataView(new ArrayBuffer(GLB_CHUNK_PREFIX_BYTES));\n jsonChunkPrefix.setUint32(0, jsonChunk.byteLength, true);\n jsonChunkPrefix.setUint32(4, GLB_CHUNK_TYPE_JSON, true);\n const header = new ArrayBuffer(GLB_HEADER_BYTES);\n const headerView = new DataView(header);\n headerView.setUint32(0, GLB_HEADER_MAGIC, true);\n headerView.setUint32(4, GLB_VERSION, true);\n const totalByteLength = GLB_HEADER_BYTES + jsonChunkPrefix.byteLength + jsonChunk.byteLength + binaryChunkPrefix.byteLength + binaryChunk.byteLength;\n headerView.setUint32(8, totalByteLength, true);\n const glbBlob = new Blob([header, jsonChunkPrefix, jsonChunk, binaryChunkPrefix, binaryChunk], {\n type: \"application/octet-stream\"\n });\n glbBlob.arrayBuffer().then(onDone);\n });\n } else {\n if (json.buffers && json.buffers.length > 0) {\n readAsDataURL(blob).then((uri) => {\n json.buffers[0].uri = uri;\n onDone(json);\n });\n } else {\n onDone(json);\n }\n }\n }\n /**\n * Serializes a userData.\n *\n * @param {THREE.Object3D|THREE.Material} object\n * @param {Object} objectDef\n */\n serializeUserData(object, objectDef) {\n if (Object.keys(object.userData).length === 0)\n return;\n const options = this.options;\n const extensionsUsed = this.extensionsUsed;\n try {\n const json = JSON.parse(JSON.stringify(object.userData));\n if (options.includeCustomExtensions && json.gltfExtensions) {\n if (objectDef.extensions === void 0)\n objectDef.extensions = {};\n for (const extensionName in json.gltfExtensions) {\n objectDef.extensions[extensionName] = json.gltfExtensions[extensionName];\n extensionsUsed[extensionName] = true;\n }\n delete json.gltfExtensions;\n }\n if (Object.keys(json).length > 0)\n objectDef.extras = json;\n } catch (error) {\n console.warn(\n \"THREE.GLTFExporter: userData of '\" + object.name + \"' won't be serialized because of JSON.stringify error - \" + error.message\n );\n }\n }\n /**\n * Returns ids for buffer attributes.\n * @param {Object} object\n * @return {Integer}\n */\n getUID(attribute, isRelativeCopy = false) {\n if (this.uids.has(attribute) === false) {\n const uids2 = /* @__PURE__ */ new Map();\n uids2.set(true, this.uid++);\n uids2.set(false, this.uid++);\n this.uids.set(attribute, uids2);\n }\n const uids = this.uids.get(attribute);\n return uids.get(isRelativeCopy);\n }\n /**\n * Checks if normal attribute values are normalized.\n *\n * @param {BufferAttribute} normal\n * @returns {Boolean}\n */\n isNormalizedNormalAttribute(normal) {\n const cache = this.cache;\n if (cache.attributesNormalized.has(normal))\n return false;\n const v = new Vector3();\n for (let i = 0, il = normal.count; i < il; i++) {\n if (Math.abs(v.fromBufferAttribute(normal, i).length() - 1) > 5e-4)\n return false;\n }\n return true;\n }\n /**\n * Creates normalized normal buffer attribute.\n *\n * @param {BufferAttribute} normal\n * @returns {BufferAttribute}\n *\n */\n createNormalizedNormalAttribute(normal) {\n const cache = this.cache;\n if (cache.attributesNormalized.has(normal))\n return cache.attributesNormalized.get(normal);\n const attribute = normal.clone();\n const v = new Vector3();\n for (let i = 0, il = attribute.count; i < il; i++) {\n v.fromBufferAttribute(attribute, i);\n if (v.x === 0 && v.y === 0 && v.z === 0) {\n v.setX(1);\n } else {\n v.normalize();\n }\n attribute.setXYZ(i, v.x, v.y, v.z);\n }\n cache.attributesNormalized.set(normal, attribute);\n return attribute;\n }\n /**\n * Applies a texture transform, if present, to the map definition. Requires\n * the KHR_texture_transform extension.\n *\n * @param {Object} mapDef\n * @param {THREE.Texture} texture\n */\n applyTextureTransform(mapDef, texture) {\n let didTransform = false;\n const transformDef = {};\n if (texture.offset.x !== 0 || texture.offset.y !== 0) {\n transformDef.offset = texture.offset.toArray();\n didTransform = true;\n }\n if (texture.rotation !== 0) {\n transformDef.rotation = texture.rotation;\n didTransform = true;\n }\n if (texture.repeat.x !== 1 || texture.repeat.y !== 1) {\n transformDef.scale = texture.repeat.toArray();\n didTransform = true;\n }\n if (didTransform) {\n mapDef.extensions = mapDef.extensions || {};\n mapDef.extensions[\"KHR_texture_transform\"] = transformDef;\n this.extensionsUsed[\"KHR_texture_transform\"] = true;\n }\n }\n buildMetalRoughTexture(metalnessMap, roughnessMap) {\n if (metalnessMap === roughnessMap)\n return metalnessMap;\n function getEncodingConversion(map) {\n if (\"colorSpace\" in map ? map.colorSpace === \"srgb\" : map.encoding === 3001) {\n return function SRGBToLinear(c) {\n return c < 0.04045 ? c * 0.0773993808 : Math.pow(c * 0.9478672986 + 0.0521327014, 2.4);\n };\n }\n return function LinearToLinear(c) {\n return c;\n };\n }\n console.warn(\"THREE.GLTFExporter: Merged metalnessMap and roughnessMap textures.\");\n if (metalnessMap instanceof CompressedTexture) {\n metalnessMap = decompress(metalnessMap);\n }\n if (roughnessMap instanceof CompressedTexture) {\n roughnessMap = decompress(roughnessMap);\n }\n const metalness = metalnessMap ? metalnessMap.image : null;\n const roughness = roughnessMap ? roughnessMap.image : null;\n const width = Math.max(metalness ? metalness.width : 0, roughness ? roughness.width : 0);\n const height = Math.max(metalness ? metalness.height : 0, roughness ? roughness.height : 0);\n const canvas = getCanvas();\n canvas.width = width;\n canvas.height = height;\n const context = canvas.getContext(\"2d\");\n context.fillStyle = \"#00ffff\";\n context.fillRect(0, 0, width, height);\n const composite = context.getImageData(0, 0, width, height);\n if (metalness) {\n context.drawImage(metalness, 0, 0, width, height);\n const convert = getEncodingConversion(metalnessMap);\n const data = context.getImageData(0, 0, width, height).data;\n for (let i = 2; i < data.length; i += 4) {\n composite.data[i] = convert(data[i] / 256) * 256;\n }\n }\n if (roughness) {\n context.drawImage(roughness, 0, 0, width, height);\n const convert = getEncodingConversion(roughnessMap);\n const data = context.getImageData(0, 0, width, height).data;\n for (let i = 1; i < data.length; i += 4) {\n composite.data[i] = convert(data[i] / 256) * 256;\n }\n }\n context.putImageData(composite, 0, 0);\n const reference = metalnessMap || roughnessMap;\n const texture = reference.clone();\n texture.source = new Texture(canvas).source;\n if (\"colorSpace\" in texture)\n texture.colorSpace = \"\";\n else\n texture.encoding = 3e3;\n texture.channel = (metalnessMap || roughnessMap).channel;\n if (metalnessMap && roughnessMap && metalnessMap.channel !== roughnessMap.channel) {\n console.warn(\"THREE.GLTFExporter: UV channels for metalnessMap and roughnessMap textures must match.\");\n }\n return texture;\n }\n /**\n * Process a buffer to append to the default one.\n * @param {ArrayBuffer} buffer\n * @return {Integer}\n */\n processBuffer(buffer) {\n const json = this.json;\n const buffers = this.buffers;\n if (!json.buffers)\n json.buffers = [{ byteLength: 0 }];\n buffers.push(buffer);\n return 0;\n }\n /**\n * Process and generate a BufferView\n * @param {BufferAttribute} attribute\n * @param {number} componentType\n * @param {number} start\n * @param {number} count\n * @param {number} target (Optional) Target usage of the BufferView\n * @return {Object}\n */\n processBufferView(attribute, componentType, start, count, target) {\n const json = this.json;\n if (!json.bufferViews)\n json.bufferViews = [];\n let componentSize;\n switch (componentType) {\n case WEBGL_CONSTANTS.BYTE:\n case WEBGL_CONSTANTS.UNSIGNED_BYTE:\n componentSize = 1;\n break;\n case WEBGL_CONSTANTS.SHORT:\n case WEBGL_CONSTANTS.UNSIGNED_SHORT:\n componentSize = 2;\n break;\n default:\n componentSize = 4;\n }\n let byteStride = attribute.itemSize * componentSize;\n if (target === WEBGL_CONSTANTS.ARRAY_BUFFER) {\n byteStride = Math.ceil(byteStride / 4) * 4;\n }\n const byteLength = getPaddedBufferSize(count * byteStride);\n const dataView = new DataView(new ArrayBuffer(byteLength));\n let offset = 0;\n for (let i = start; i < start + count; i++) {\n for (let a = 0; a < attribute.itemSize; a++) {\n let value;\n if (attribute.itemSize > 4) {\n value = attribute.array[i * attribute.itemSize + a];\n } else {\n if (a === 0)\n value = attribute.getX(i);\n else if (a === 1)\n value = attribute.getY(i);\n else if (a === 2)\n value = attribute.getZ(i);\n else if (a === 3)\n value = attribute.getW(i);\n if (attribute.normalized === true) {\n value = MathUtils.normalize(value, attribute.array);\n }\n }\n if (componentType === WEBGL_CONSTANTS.FLOAT) {\n dataView.setFloat32(offset, value, true);\n } else if (componentType === WEBGL_CONSTANTS.INT) {\n dataView.setInt32(offset, value, true);\n } else if (componentType === WEBGL_CONSTANTS.UNSIGNED_INT) {\n dataView.setUint32(offset, value, true);\n } else if (componentType === WEBGL_CONSTANTS.SHORT) {\n dataView.setInt16(offset, value, true);\n } else if (componentType === WEBGL_CONSTANTS.UNSIGNED_SHORT) {\n dataView.setUint16(offset, value, true);\n } else if (componentType === WEBGL_CONSTANTS.BYTE) {\n dataView.setInt8(offset, value);\n } else if (componentType === WEBGL_CONSTANTS.UNSIGNED_BYTE) {\n dataView.setUint8(offset, value);\n }\n offset += componentSize;\n }\n if (offset % byteStride !== 0) {\n offset += byteStride - offset % byteStride;\n }\n }\n const bufferViewDef = {\n buffer: this.processBuffer(dataView.buffer),\n byteOffset: this.byteOffset,\n byteLength\n };\n if (target !== void 0)\n bufferViewDef.target = target;\n if (target === WEBGL_CONSTANTS.ARRAY_BUFFER) {\n bufferViewDef.byteStride = byteStride;\n }\n this.byteOffset += byteLength;\n json.bufferViews.push(bufferViewDef);\n const output = {\n id: json.bufferViews.length - 1,\n byteLength: 0\n };\n return output;\n }\n /**\n * Process and generate a BufferView from an image Blob.\n * @param {Blob} blob\n * @return {Promise<Integer>}\n */\n processBufferViewImage(blob) {\n const writer = this;\n const json = writer.json;\n if (!json.bufferViews)\n json.bufferViews = [];\n return blob.arrayBuffer().then((result) => {\n const buffer = getPaddedArrayBuffer(result);\n const bufferViewDef = {\n buffer: writer.processBuffer(buffer),\n byteOffset: writer.byteOffset,\n byteLength: buffer.byteLength\n };\n writer.byteOffset += buffer.byteLength;\n return json.bufferViews.push(bufferViewDef) - 1;\n });\n }\n /**\n * Process attribute to generate an accessor\n * @param {BufferAttribute} attribute Attribute to process\n * @param {THREE.BufferGeometry} geometry (Optional) Geometry used for truncated draw range\n * @param {Integer} start (Optional)\n * @param {Integer} count (Optional)\n * @return {Integer|null} Index of the processed accessor on the \"accessors\" array\n */\n processAccessor(attribute, geometry, start, count) {\n const json = this.json;\n const types = {\n 1: \"SCALAR\",\n 2: \"VEC2\",\n 3: \"VEC3\",\n 4: \"VEC4\",\n 9: \"MAT3\",\n 16: \"MAT4\"\n };\n let componentType;\n if (attribute.array.constructor === Float32Array) {\n componentType = WEBGL_CONSTANTS.FLOAT;\n } else if (attribute.array.constructor === Int32Array) {\n componentType = WEBGL_CONSTANTS.INT;\n } else if (attribute.array.constructor === Uint32Array) {\n componentType = WEBGL_CONSTANTS.UNSIGNED_INT;\n } else if (attribute.array.constructor === Int16Array) {\n componentType = WEBGL_CONSTANTS.SHORT;\n } else if (attribute.array.constructor === Uint16Array) {\n componentType = WEBGL_CONSTANTS.UNSIGNED_SHORT;\n } else if (attribute.array.constructor === Int8Array) {\n componentType = WEBGL_CONSTANTS.BYTE;\n } else if (attribute.array.constructor === Uint8Array) {\n componentType = WEBGL_CONSTANTS.UNSIGNED_BYTE;\n } else {\n throw new Error(\n \"THREE.GLTFExporter: Unsupported bufferAttribute component type: \" + attribute.array.constructor.name\n );\n }\n if (start === void 0)\n start = 0;\n if (count === void 0)\n count = attribute.count;\n if (count === 0)\n return null;\n const minMax = getMinMax(attribute, start, count);\n let bufferViewTarget;\n if (geometry !== void 0) {\n bufferViewTarget = attribute === geometry.index ? WEBGL_CONSTANTS.ELEMENT_ARRAY_BUFFER : WEBGL_CONSTANTS.ARRAY_BUFFER;\n }\n const bufferView = this.processBufferView(attribute, componentType, start, count, bufferViewTarget);\n const accessorDef = {\n bufferView: bufferView.id,\n byteOffset: bufferView.byteOffset,\n componentType,\n count,\n max: minMax.max,\n min: minMax.min,\n type: types[attribute.itemSize]\n };\n if (attribute.normalized === true)\n accessorDef.normalized = true;\n if (!json.accessors)\n json.accessors = [];\n return json.accessors.push(accessorDef) - 1;\n }\n /**\n * Process image\n * @param {Image} image to process\n * @param {Integer} format of the image (RGBAFormat)\n * @param {Boolean} flipY before writing out the image\n * @param {String} mimeType export format\n * @return {Integer} Index of the processed texture in the \"images\" array\n */\n processImage(image, format, flipY, mimeType = \"image/png\") {\n if (image !== null) {\n const writer = this;\n const cache = writer.cache;\n const json = writer.json;\n const options = writer.options;\n const pending = writer.pending;\n if (!cache.images.has(image))\n cache.images.set(image, {});\n const cachedImages = cache.images.get(image);\n const key = mimeType + \":flipY/\" + flipY.toString();\n if (cachedImages[key] !== void 0)\n return cachedImages[key];\n if (!json.images)\n json.images = [];\n const imageDef = { mimeType };\n const canvas = getCanvas();\n canvas.width = Math.min(image.width, options.maxTextureSize);\n canvas.height = Math.min(image.height, options.maxTextureSize);\n const ctx = canvas.getContext(\"2d\");\n if (flipY === true) {\n ctx.translate(0, canvas.height);\n ctx.scale(1, -1);\n }\n if (image.data !== void 0) {\n if (format !== RGBAFormat) {\n console.error(\"GLTFExporter: Only RGBAFormat is supported.\", format);\n }\n if (image.width > options.maxTextureSize || image.height > options.maxTextureSize) {\n console.warn(\"GLTFExporter: Image size is bigger than maxTextureSize\", image);\n }\n const data = new Uint8ClampedArray(image.height * image.width * 4);\n for (let i = 0; i < data.length; i += 4) {\n data[i + 0] = image.data[i + 0];\n data[i + 1] = image.data[i + 1];\n data[i + 2] = image.data[i + 2];\n data[i + 3] = image.data[i + 3];\n }\n ctx.putImageData(new ImageData(data, image.width, image.height), 0, 0);\n } else {\n ctx.drawImage(image, 0, 0, canvas.width, canvas.height);\n }\n if (options.binary === true) {\n pending.push(\n getToBlobPromise(canvas, mimeType).then((blob) => writer.processBufferViewImage(blob)).then((bufferViewIndex) => {\n imageDef.bufferView = bufferViewIndex;\n })\n );\n } else {\n if (canvas.toDataURL !== void 0) {\n imageDef.uri = canvas.toDataURL(mimeType);\n } else {\n pending.push(\n getToBlobPromise(canvas, mimeType).then(readAsDataURL).then((uri) => {\n imageDef.uri = uri;\n })\n );\n }\n }\n const index = json.images.push(imageDef) - 1;\n cachedImages[key] = index;\n return index;\n } else {\n throw new Error(\"THREE.GLTFExporter: No valid image data found. Unable to process texture.\");\n }\n }\n /**\n * Process sampler\n * @param {Texture} map Texture to process\n * @return {Integer} Index of the processed texture in the \"samplers\" array\n */\n processSampler(map) {\n const json = this.json;\n if (!json.samplers)\n json.samplers = [];\n const samplerDef = {\n magFilter: THREE_TO_WEBGL[map.magFilter],\n minFilter: THREE_TO_WEBGL[map.minFilter],\n wrapS: THREE_TO_WEBGL[map.wrapS],\n wrapT: THREE_TO_WEBGL[map.wrapT]\n };\n return json.samplers.push(samplerDef) - 1;\n }\n /**\n * Process texture\n * @param {Texture} map Map to process\n * @return {Integer} Index of the processed texture in the \"textures\" array\n */\n processTexture(map) {\n const writer = this;\n const options = writer.options;\n const cache = this.cache;\n const json = this.json;\n if (cache.textures.has(map))\n return cache.textures.get(map);\n if (!json.textures)\n json.textures = [];\n if (map instanceof CompressedTexture) {\n map = decompress(map, options.maxTextureSize);\n }\n let mimeType = map.userData.mimeType;\n if (mimeType === \"image/webp\")\n mimeType = \"image/png\";\n const textureDef = {\n sampler: this.processSampler(map),\n source: this.processImage(map.image, map.format, map.flipY, mimeType)\n };\n if (map.name)\n textureDef.name = map.name;\n this._invokeAll(function(ext) {\n ext.writeTexture && ext.writeTexture(map, textureDef);\n });\n const index = json.textures.push(textureDef) - 1;\n cache.textures.set(map, index);\n return index;\n }\n /**\n * Process material\n * @param {THREE.Material} material Material to process\n * @return {Integer|null} Index of the processed material in the \"materials\" array\n */\n processMaterial(material) {\n const cache = this.cache;\n const json = this.json;\n if (cache.materials.has(material))\n return cache.materials.get(material);\n if (material.isShaderMaterial) {\n console.warn(\"GLTFExporter: THREE.ShaderMaterial not supported.\");\n return null;\n }\n if (!json.materials)\n json.materials = [];\n const materialDef = { pbrMetallicRoughness: {} };\n if (material.isMeshStandardMaterial !== true && material.isMeshBasicMaterial !== true) {\n console.warn(\"GLTFExporter: Use MeshStandardMaterial or MeshBasicMaterial for best results.\");\n }\n const color = material.color.toArray().concat([material.opacity]);\n if (!equalArray(color, [1, 1, 1, 1])) {\n materialDef.pbrMetallicRoughness.baseColorFactor = color;\n }\n if (material.isMeshStandardMaterial) {\n materialDef.pbrMetallicRoughness.metallicFactor = material.metalness;\n materialDef.pbrMetallicRoughness.roughnessFactor = material.roughness;\n } else {\n materialDef.pbrMetallicRoughness.metallicFactor = 0.5;\n materialDef.pbrMetallicRoughness.roughnessFactor = 0.5;\n }\n if (material.metalnessMap || material.roughnessMap) {\n const metalRoughTexture = this.buildMetalRoughTexture(material.metalnessMap, material.roughnessMap);\n const metalRoughMapDef = {\n index: this.processTexture(metalRoughTexture),\n channel: metalRoughTexture.channel\n };\n this.applyTextureTransform(metalRoughMapDef, metalRoughTexture);\n materialDef.pbrMetallicRoughness.metallicRoughnessTexture = metalRoughMapDef;\n }\n if (material.map) {\n const baseColorMapDef = {\n index: this.processTexture(material.map),\n texCoord: material.map.channel\n };\n this.applyTextureTransform(baseColorMapDef, material.map);\n materialDef.pbrMetallicRoughness.baseColorTexture = baseColorMapDef;\n }\n if (material.emissive) {\n const emissive = material.emissive;\n const maxEmissiveComponent = Math.max(emissive.r, emissive.g, emissive.b);\n if (maxEmissiveComponent > 0) {\n materialDef.emissiveFactor = material.emissive.toArray();\n }\n if (material.emissiveMap) {\n const emissiveMapDef = {\n index: this.processTexture(material.emissiveMap),\n texCoord: material.emissiveMap.channel\n };\n this.applyTextureTransform(emissiveMapDef, material.emissiveMap);\n materialDef.emissiveTexture = emissiveMapDef;\n }\n }\n if (material.normalMap) {\n const normalMapDef = {\n index: this.processTexture(material.normalMap),\n texCoord: material.normalMap.channel\n };\n if (material.normalScale && material.normalScale.x !== 1) {\n normalMapDef.scale = material.normalScale.x;\n }\n this.applyTextureTransform(normalMapDef, material.normalMap);\n materialDef.normalTexture = normalMapDef;\n }\n if (material.aoMap) {\n const occlusionMapDef = {\n index: this.processTexture(material.aoMap),\n texCoord: material.aoMap.channel\n };\n if (material.aoMapIntensity !== 1) {\n occlusionMapDef.strength = material.aoMapIntensity;\n }\n this.applyTextureTransform(occlusionMapDef, material.aoMap);\n materialDef.occlusionTexture = occlusionMapDef;\n }\n if (material.transparent) {\n materialDef.alphaMode = \"BLEND\";\n } else {\n if (material.alphaTest > 0) {\n materialDef.alphaMode = \"MASK\";\n materialDef.alphaCutoff = material.alphaTest;\n }\n }\n if (material.side === DoubleSide)\n materialDef.doubleSided = true;\n if (material.name !== \"\")\n materialDef.name = material.name;\n this.serializeUserData(material, materialDef);\n this._invokeAll(function(ext) {\n ext.writeMaterial && ext.writeMaterial(material, materialDef);\n });\n const index = json.materials.push(materialDef) - 1;\n cache.materials.set(material, index);\n return index;\n }\n /**\n * Process mesh\n * @param {THREE.Mesh} mesh Mesh to process\n * @return {Integer|null} Index of the processed mesh in the \"meshes\" array\n */\n processMesh(mesh) {\n const cache = this.cache;\n const json = this.json;\n const meshCacheKeyParts = [mesh.geometry.uuid];\n if (Array.isArray(mesh.material)) {\n for (let i = 0, l = mesh.material.length; i < l; i++) {\n meshCacheKeyParts.push(mesh.material[i].uuid);\n }\n } else {\n meshCacheKeyParts.push(mesh.material.uuid);\n }\n const meshCacheKey = meshCacheKeyParts.join(\":\");\n if (cache.meshes.has(meshCacheKey))\n return cache.meshes.get(meshCacheKey);\n const geometry = mesh.geometry;\n let mode;\n if (mesh.isLineSegments) {\n mode = WEBGL_CONSTANTS.LINES;\n } else if (mesh.isLineLoop) {\n mode = WEBGL_CONSTANTS.LINE_LOOP;\n } else if (mesh.isLine) {\n mode = WEBGL_CONSTANTS.LINE_STRIP;\n } else if (mesh.isPoints) {\n mode = WEBGL_CONSTANTS.POINTS;\n } else {\n mode = mesh.material.wireframe ? WEBGL_CONSTANTS.LINES : WEBGL_CONSTANTS.TRIANGLES;\n }\n const meshDef = {};\n const attributes = {};\n const primitives = [];\n const targets = [];\n const nameConversion = {\n ...version >= 152 ? {\n uv: \"TEXCOORD_0\",\n uv1: \"TEXCOORD_1\",\n uv2: \"TEXCOORD_2\",\n uv3: \"TEXCOORD_3\"\n } : {\n uv: \"TEXCOORD_0\",\n uv2: \"TEXCOORD_1\"\n },\n color: \"COLOR_0\",\n skinWeight: \"WEIGHTS_0\",\n skinIndex: \"JOINTS_0\"\n };\n const originalNormal = geometry.getAttribute(\"normal\");\n if (originalNormal !== void 0 && !this.isNormalizedNormalAttribute(originalNormal)) {\n console.warn(\"THREE.GLTFExporter: Creating normalized normal attribute from the non-normalized one.\");\n geometry.setAttribute(\"normal\", this.createNormalizedNormalAttribute(originalNormal));\n }\n let modifiedAttribute = null;\n for (let attributeName in geometry.attributes) {\n if (attributeName.slice(0, 5) === \"morph\")\n continue;\n const attribute = geometry.attributes[attributeName];\n attributeName = nameConversion[attributeName] || attributeName.toUpperCase();\n const validVertexAttributes = /^(POSITION|NORMAL|TANGENT|TEXCOORD_\\d+|COLOR_\\d+|JOINTS_\\d+|WEIGHTS_\\d+)$/;\n if (!validVertexAttributes.test(attributeName))\n attributeName = \"_\" + attributeName;\n if (cache.attributes.has(this.getUID(attribute))) {\n attributes[attributeName] = cache.attributes.get(this.getUID(attribute));\n continue;\n }\n modifiedAttribute = null;\n const array = attribute.array;\n if (attributeName === \"JOINTS_0\" && !(array instanceof Uint16Array) && !(array instanceof Uint8Array)) {\n console.warn('GLTFExporter: Attribute \"skinIndex\" converted to type UNSIGNED_SHORT.');\n modifiedAttribute = new BufferAttribute(new Uint16Array(array), attribute.itemSize, attribute.normalized);\n }\n const accessor = this.processAccessor(modifiedAttribute || attribute, geometry);\n if (accessor !== null) {\n if (!attributeName.startsWith(\"_\")) {\n this.detectMeshQuantization(attributeName, attribute);\n }\n attributes[attributeName] = accessor;\n cache.attributes.set(this.getUID(attribute), accessor);\n }\n }\n if (originalNormal !== void 0)\n geometry.setAttribute(\"normal\", originalNormal);\n if (Object.keys(attributes).length === 0)\n return null;\n if (mesh.morphTargetInfluences !== void 0 && mesh.morphTargetInfluences.length > 0) {\n const weights = [];\n const targetNames = [];\n const reverseDictionary = {};\n if (mesh.morphTargetDictionary !== void 0) {\n for (const key in mesh.morphTargetDictionary) {\n reverseDictionary[mesh.morphTargetDictionary[key]] = key;\n }\n }\n for (let i = 0; i < mesh.morphTargetInfluences.length; ++i) {\n const target = {};\n let warned = false;\n for (const attributeName in geometry.morphAttributes) {\n if (attributeName !== \"position\" && attributeName !== \"normal\") {\n if (!warned) {\n console.warn(\"GLTFExporter: Only POSITION and NORMAL morph are supported.\");\n warned = true;\n }\n continue;\n }\n const attribute = geometry.morphAttributes[attributeName][i];\n const gltfAttributeName = attributeName.toUpperCase();\n const baseAttribute = geometry.attributes[attributeName];\n if (cache.attributes.has(this.getUID(attribute, true))) {\n target[gltfAttributeName] = cache.attributes.get(this.getUID(attribute, true));\n continue;\n }\n const relativeAttribute = attribute.clone();\n if (!geometry.morphTargetsRelative) {\n for (let j = 0, jl = attribute.count; j < jl; j++) {\n for (let a = 0; a < attribute.itemSize; a++) {\n if (a === 0)\n relativeAttribute.setX(j, attribute.getX(j) - baseAttribute.getX(j));\n if (a === 1)\n relativeAttribute.setY(j, attribute.getY(j) - baseAttribute.getY(j));\n if (a === 2)\n relativeAttribute.setZ(j, attribute.getZ(j) - baseAttribute.getZ(j));\n if (a === 3)\n relativeAttribute.setW(j, attribute.getW(j) - baseAttribute.getW(j));\n }\n }\n }\n target[gltfAttributeName] = this.processAccessor(relativeAttribute, geometry);\n cache.attributes.set(this.getUID(baseAttribute, true), target[gltfAttributeName]);\n }\n targets.push(target);\n weights.push(mesh.morphTargetInfluences[i]);\n if (mesh.morphTargetDictionary !== void 0)\n targetNames.push(reverseDictionary[i]);\n }\n meshDef.weights = weights;\n if (targetNames.length > 0) {\n meshDef.extras = {};\n meshDef.extras.targetNames = targetNames;\n }\n }\n const isMultiMaterial = Array.isArray(mesh.material);\n if (isMultiMaterial && geometry.groups.length === 0)\n return null;\n const materials = isMultiMaterial ? mesh.material : [mesh.material];\n const groups = isMultiMaterial ? geometry.groups : [{ materialIndex: 0, start: void 0, count: void 0 }];\n for (let i = 0, il = groups.length; i < il; i++) {\n const primitive = {\n mode,\n attributes\n };\n this.serializeUserData(geometry, primitive);\n if (targets.length > 0)\n primitive.targets = targets;\n if (geometry.index !== null) {\n let cacheKey = this.getUID(geometry.index);\n if (groups[i].start !== void 0 || groups[i].count !== void 0) {\n cacheKey += \":\" + groups[i].start + \":\" + groups[i].count;\n }\n if (cache.attributes.has(cacheKey)) {\n primitive.indices = cache.attributes.get(cacheKey);\n } else {\n primitive.indices = this.processAccessor(geometry.index, geometry, groups[i].start, groups[i].count);\n cache.attributes.set(cacheKey, primitive.indices);\n }\n if (primitive.indices === null)\n delete primitive.indices;\n }\n const material = this.processMaterial(materials[groups[i].materialIndex]);\n if (material !== null)\n primitive.material = material;\n primitives.push(primitive);\n }\n meshDef.primitives = primitives;\n if (!json.meshes)\n json.meshes = [];\n this._invokeAll(function(ext) {\n ext.writeMesh && ext.writeMesh(mesh, meshDef);\n });\n const index = json.meshes.push(meshDef) - 1;\n cache.meshes.set(meshCacheKey, index);\n return index;\n }\n /**\n * If a vertex attribute with a\n * [non-standard data type](https://registry.khronos.org/glTF/specs/2.0/glTF-2.0.html#meshes-overview)\n * is used, it is checked whether it is a valid data type according to the\n * [KHR_mesh_quantization](https://github.com/KhronosGroup/glTF/blob/main/extensions/2.0/Khronos/KHR_mesh_quantization/README.md)\n * extension.\n * In this case the extension is automatically added to the list of used extensions.\n *\n * @param {string} attributeName\n * @param {THREE.BufferAttribute} attribute\n */\n detectMeshQuantization(attributeName, attribute) {\n if (this.extensionsUsed[KHR_MESH_QUANTIZATION])\n return;\n let attrType = void 0;\n switch (attribute.array.constructor) {\n case Int8Array:\n attrType = \"byte\";\n break;\n case Uint8Array:\n attrType = \"unsigned byte\";\n break;\n case Int16Array:\n attrType = \"short\";\n break;\n case Uint16Array:\n attrType = \"unsigned short\";\n break;\n default:\n return;\n }\n if (attribute.normalized)\n attrType += \" normalized\";\n const attrNamePrefix = attributeName.split(\"_\", 1)[0];\n if (KHR_mesh_quantization_ExtraAttrTypes[attrNamePrefix] && KHR_mesh_quantization_ExtraAttrTypes[attrNamePrefix].includes(attrType)) {\n this.extensionsUsed[KHR_MESH_QUANTIZATION] = true;\n this.extensionsRequired[KHR_MESH_QUANTIZATION] = true;\n }\n }\n /**\n * Process camera\n * @param {THREE.Camera} camera Camera to process\n * @return {Integer} Index of the processed mesh in the \"camera\" array\n */\n processCamera(camera) {\n const json = this.json;\n if (!json.cameras)\n json.cameras = [];\n const isOrtho = camera.isOrthographicCamera;\n const cameraDef = {\n type: isOrtho ? \"orthographic\" : \"perspective\"\n };\n if (isOrtho) {\n cameraDef.orthographic = {\n xmag: camera.right * 2,\n ymag: camera.top * 2,\n zfar: camera.far <= 0 ? 1e-3 : camera.far,\n znear: camera.near < 0 ? 0 : camera.near\n };\n } else {\n cameraDef.perspective = {\n aspectRatio: camera.aspect,\n yfov: MathUtils.degToRad(camera.fov),\n zfar: camera.far <= 0 ? 1e-3 : camera.far,\n znear: camera.near < 0 ? 0 : camera.near\n };\n }\n if (camera.name !== \"\")\n cameraDef.name = camera.type;\n return json.cameras.push(cameraDef) - 1;\n }\n /**\n * Creates glTF animation entry from AnimationClip object.\n *\n * Status:\n * - Only properties listed in PATH_PROPERTIES may be animated.\n *\n * @param {THREE.AnimationClip} clip\n * @param {THREE.Object3D} root\n * @return {number|null}\n */\n processAnimation(clip, root) {\n const json = this.json;\n const nodeMap = this.nodeMap;\n if (!json.animations)\n json.animations = [];\n clip = GLTFExporter.Utils.mergeMorphTargetTracks(clip.clone(), root);\n const tracks = clip.tracks;\n const channels = [];\n const samplers = [];\n for (let i = 0; i < tracks.length; ++i) {\n const track = tracks[i];\n const trackBinding = PropertyBinding.parseTrackName(track.name);\n let trackNode = PropertyBinding.findNode(root, trackBinding.nodeName);\n const trackProperty = PATH_PROPERTIES[trackBinding.propertyName];\n if (trackBinding.objectName === \"bones\") {\n if (trackNode.isSkinnedMesh === true) {\n trackNode = trackNode.skeleton.getBoneByName(trackBinding.objectIndex);\n } else {\n trackNode = void 0;\n }\n }\n if (!trackNode || !trackProperty) {\n console.warn('THREE.GLTFExporter: Could not export animation track \"%s\".', track.name);\n return null;\n }\n const inputItemSize = 1;\n let outputItemSize = track.values.length / track.times.length;\n if (trackProperty === PATH_PROPERTIES.morphTargetInfluences) {\n outputItemSize /= trackNode.morphTargetInfluences.length;\n }\n let interpolation;\n if (track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline === true) {\n interpolation = \"CUBICSPLINE\";\n outputItemSize /= 3;\n } else if (track.getInterpolation() === InterpolateDiscrete) {\n interpolation = \"STEP\";\n } else {\n interpolation = \"LINEAR\";\n }\n samplers.push({\n input: this.processAccessor(new BufferAttribute(track.times, inputItemSize)),\n output: this.processAccessor(new BufferAttribute(track.values, outputItemSize)),\n interpolation\n });\n channels.push({\n sampler: samplers.length - 1,\n target: {\n node: nodeMap.get(trackNode),\n path: trackProperty\n }\n });\n }\n json.animations.push({\n name: clip.name || \"clip_\" + json.animations.length,\n samplers,\n channels\n });\n return json.animations.length - 1;\n }\n /**\n * @param {THREE.Object3D} object\n * @return {number|null}\n */\n processSkin(object) {\n const json = this.json;\n const nodeMap = this.nodeMap;\n const node = json.nodes[nodeMap.get(object)];\n const skeleton = object.skeleton;\n if (skeleton === void 0)\n return null;\n const rootJoint = object.skeleton.bones[0];\n if (rootJoint === void 0)\n return null;\n const joints = [];\n const inverseBindMatrices = new Float32Array(skeleton.bones.length * 16);\n const temporaryBoneInverse = new Matrix4();\n for (let i = 0; i < skeleton.bones.length; ++i) {\n joints.push(nodeMap.get(skeleton.bones[i]));\n temporaryBoneInverse.copy(skeleton.boneInverses[i]);\n temporaryBoneInverse.multiply(object.bindMatrix).toArray(inverseBindMatrices, i * 16);\n }\n if (json.skins === void 0)\n json.skins = [];\n json.skins.push({\n inverseBindMatrices: this.processAccessor(new BufferAttribute(inverseBindMatrices, 16)),\n joints,\n skeleton: nodeMap.get(rootJoint)\n });\n const skinIndex = node.skin = json.skins.length - 1;\n return skinIndex;\n }\n /**\n * Process Object3D node\n * @param {THREE.Object3D} node Object3D to processNode\n * @return {Integer} Index of the node in the nodes list\n */\n processNode(object) {\n const json = this.json;\n const options = this.options;\n const nodeMap = this.nodeMap;\n if (!json.nodes)\n json.nodes = [];\n const nodeDef = {};\n if (options.trs) {\n const rotation = object.quaternion.toArray();\n const position = object.position.toArray();\n const scale = object.scale.toArray();\n if (!equalArray(rotation, [0, 0, 0, 1])) {\n nodeDef.rotation = rotation;\n }\n if (!equalArray(position, [0, 0, 0])) {\n nodeDef.translation = position;\n }\n if (!equalArray(scale, [1, 1, 1])) {\n nodeDef.scale = scale;\n }\n } else {\n if (object.matrixAutoUpdate) {\n object.updateMatrix();\n }\n if (isIdentityMatrix(object.matrix) === false) {\n nodeDef.matrix = object.matrix.elements;\n }\n }\n if (object.name !== \"\")\n nodeDef.name = String(object.name);\n this.serializeUserData(object, nodeDef);\n if (object.isMesh || object.isLine || object.isPoints) {\n const meshIndex = this.processMesh(object);\n if (meshIndex !== null)\n nodeDef.mesh = meshIndex;\n } else if (object.isCamera) {\n nodeDef.camera = this.processCamera(object);\n }\n if (object.isSkinnedMesh)\n this.skins.push(object);\n if (object.children.length > 0) {\n const children = [];\n for (let i = 0, l = object.children.length; i < l; i++) {\n const child = object.children[i];\n if (child.visible || options.onlyVisible === false) {\n const nodeIndex2 = this.processNode(child);\n if (nodeIndex2 !== null)\n children.push(nodeIndex2);\n }\n }\n if (children.length > 0)\n nodeDef.children = children;\n }\n this._invokeAll(function(ext) {\n ext.writeNode && ext.writeNode(object, nodeDef);\n });\n const nodeIndex = json.nodes.push(nodeDef) - 1;\n nodeMap.set(object, nodeIndex);\n return nodeIndex;\n }\n /**\n * Process Scene\n * @param {Scene} node Scene to process\n */\n processScene(scene) {\n const json = this.json;\n const options = this.options;\n if (!json.scenes) {\n json.scenes = [];\n json.scene = 0;\n }\n const sceneDef = {};\n if (scene.name !== \"\")\n sceneDef.name = scene.name;\n json.scenes.push(sceneDef);\n const nodes = [];\n for (let i = 0, l = scene.children.length; i < l; i++) {\n const child = scene.children[i];\n if (child.visible || options.onlyVisible === false) {\n const nodeIndex = this.processNode(child);\n if (nodeIndex !== null)\n nodes.push(nodeIndex);\n }\n }\n if (nodes.length > 0)\n sceneDef.nodes = nodes;\n this.serializeUserData(scene, sceneDef);\n }\n /**\n * Creates a Scene to hold a list of objects and parse it\n * @param {Array} objects List of objects to process\n */\n processObjects(objects) {\n const scene = new Scene();\n scene.name = \"AuxScene\";\n for (let i = 0; i < objects.length; i++) {\n scene.children.push(objects[i]);\n }\n this.processScene(scene);\n }\n /**\n * @param {THREE.Object3D|Array<THREE.Object3D>} input\n */\n processInput(input) {\n const options = this.options;\n input = input instanceof Array ? input : [input];\n this._invokeAll(function(ext) {\n ext.beforeParse && ext.beforeParse(input);\n });\n const objectsWithoutScene = [];\n for (let i = 0; i < input.length; i++) {\n if (input[i] instanceof Scene) {\n this.processScene(input[i]);\n } else {\n objectsWithoutScene.push(input[i]);\n }\n }\n if (objectsWithoutScene.length > 0)\n this.processObjects(objectsWithoutScene);\n for (let i = 0; i < this.skins.length; ++i) {\n this.processSkin(this.skins[i]);\n }\n for (let i = 0; i < options.animations.length; ++i) {\n this.processAnimation(options.animations[i], input[0]);\n }\n this._invokeAll(function(ext) {\n ext.afterParse && ext.afterParse(input);\n });\n }\n _invokeAll(func) {\n for (let i = 0, il = this.plugins.length; i < il; i++) {\n func(this.plugins[i]);\n }\n }\n}\nclass GLTFLightExtension {\n constructor(writer) {\n this.writer = writer;\n this.name = \"KHR_lights_punctual\";\n }\n writeNode(light, nodeDef) {\n if (!light.isLight)\n return;\n if (!light.isDirectionalLight && !light.isPointLight && !light.isSpotLight) {\n console.warn(\"THREE.GLTFExporter: Only directional, point, and spot lights are supported.\", light);\n return;\n }\n const writer = this.writer;\n const json = writer.json;\n const extensionsUsed = writer.extensionsUsed;\n const lightDef = {};\n if (light.name)\n lightDef.name = light.name;\n lightDef.color = light.color.toArray();\n lightDef.intensity = light.intensity;\n if (light.isDirectionalLight) {\n lightDef.type = \"directional\";\n } else if (light.isPointLight) {\n lightDef.type = \"point\";\n if (light.distance > 0)\n lightDef.range = light.distance;\n } else if (light.isSpotLight) {\n lightDef.type = \"spot\";\n if (light.distance > 0)\n lightDef.range = light.distance;\n lightDef.spot = {};\n lightDef.spot.innerConeAngle = (light.penumbra - 1) * light.angle * -1;\n lightDef.spot.outerConeAngle = light.angle;\n }\n if (light.decay !== void 0 && light.decay !== 2) {\n console.warn(\n \"THREE.GLTFExporter: Light decay may be lost. glTF is physically-based, and expects light.decay=2.\"\n );\n }\n if (light.target && (light.target.parent !== light || light.target.position.x !== 0 || light.target.position.y !== 0 || light.target.position.z !== -1)) {\n console.warn(\n \"THREE.GLTFExporter: Light direction may be lost. For best results, make light.target a child of the light with position 0,0,-1.\"\n );\n }\n if (!extensionsUsed[this.name]) {\n json.extensions = json.extensions || {};\n json.extensions[this.name] = { lights: [] };\n extensionsUsed[this.name] = true;\n }\n const lights = json.extensions[this.name].lights;\n lights.push(lightDef);\n nodeDef.extensions = nodeDef.extensions || {};\n nodeDef.extensions[this.name] = { light: lights.length - 1 };\n }\n}\nclass GLTFMaterialsUnlitExtension {\n constructor(writer) {\n this.writer = writer;\n this.name = \"KHR_materials_unlit\";\n }\n writeMaterial(material, materialDef) {\n if (!material.isMeshBasicMaterial)\n return;\n const writer = this.writer;\n const extensionsUsed = writer.extensionsUsed;\n materialDef.extensions = materialDef.extensions || {};\n materialDef.extensions[this.name] = {};\n extensionsUsed[this.name] = true;\n materialDef.pbrMetallicRoughness.metallicFactor = 0;\n materialDef.pbrMetallicRoughness.roughnessFactor = 0.9;\n }\n}\nclass GLTFMaterialsClearcoatExtension {\n constructor(writer) {\n this.writer = writer;\n this.name = \"KHR_materials_clearcoat\";\n }\n writeMaterial(material, materialDef) {\n if (!material.isMeshPhysicalMaterial || material.clearcoat === 0)\n return;\n const writer = this.writer;\n const extensionsUsed = writer.extensionsUsed;\n const extensionDef = {};\n extensionDef.clearcoatFactor = material.clearcoat;\n if (material.clearcoatMap) {\n const clearcoatMapDef = {\n index: writer.processTexture(material.clearcoatMap),\n texCoord: material.clearcoatMap.channel\n };\n writer.applyTextureTransform(clearcoatMapDef, material.clearcoatMap);\n extensionDef.clearcoatTexture = clearcoatMapDef;\n }\n extensionDef.clearcoatRoughnessFactor = material.clearcoatRoughness;\n if (material.clearcoatRoughnessMap) {\n const clearcoatRoughnessMapDef = {\n index: writer.processTexture(material.clearcoatRoughnessMap),\n texCoord: material.clearcoatRoughnessMap.channel\n };\n writer.applyTextureTransform(clearcoatRoughnessMapDef, material.clearcoatRoughnessMap);\n extensionDef.clearcoatRoughnessTexture = clearcoatRoughnessMapDef;\n }\n if (material.clearcoatNormalMap) {\n const clearcoatNormalMapDef = {\n index: writer.processTexture(material.clearcoatNormalMap),\n texCoord: material.clearcoatNormalMap.channel\n };\n writer.applyTextureTransform(clearcoatNormalMapDef, material.clearcoatNormalMap);\n extensionDef.clearcoatNormalTexture = clearcoatNormalMapDef;\n }\n materialDef.extensions = materialDef.extensions || {};\n materialDef.extensions[this.name] = extensionDef;\n extensionsUsed[this.name] = true;\n }\n}\nclass GLTFMaterialsIridescenceExtension {\n constructor(writer) {\n this.writer = writer;\n this.name = \"KHR_materials_iridescence\";\n }\n writeMaterial(material, materialDef) {\n if (!material.isMeshPhysicalMaterial || material.iridescence === 0)\n return;\n const writer = this.writer;\n const extensionsUsed = writer.extensionsUsed;\n const extensionDef = {};\n extensionDef.iridescenceFactor = material.iridescence;\n if (material.iridescenceMap) {\n const iridescenceMapDef = {\n index: writer.processTexture(material.iridescenceMap),\n texCoord: material.iridescenceMap.channel\n };\n writer.applyTextureTransform(iridescenceMapDef, material.iridescenceMap);\n extensionDef.iridescenceTexture = iridescenceMapDef;\n }\n extensionDef.iridescenceIor = material.iridescenceIOR;\n extensionDef.iridescenceThicknessMinimum = material.iridescenceThicknessRange[0];\n extensionDef.iridescenceThicknessMaximum = material.iridescenceThicknessRange[1];\n if (material.iridescenceThicknessMap) {\n const iridescenceThicknessMapDef = {\n index: writer.processTexture(material.iridescenceThicknessMap),\n texCoord: material.iridescenceThicknessMap.channel\n };\n writer.applyTextureTransform(iridescenceThicknessMapDef, material.iridescenceThicknessMap);\n extensionDef.iridescenceThicknessTexture = iridescenceThicknessMapDef;\n }\n materialDef.extensions = materialDef.extensions || {};\n materialDef.extensions[this.name] = extensionDef;\n extensionsUsed[this.name] = true;\n }\n}\nclass GLTFMaterialsTransmissionExtension {\n constructor(writer) {\n this.writer = writer;\n this.name = \"KHR_materials_transmission\";\n }\n writeMaterial(material, materialDef) {\n if (!material.isMeshPhysicalMaterial || material.transmission === 0)\n return;\n const writer = this.writer;\n const extensionsUsed = writer.extensionsUsed;\n const extensionDef = {};\n extensionDef.transmissionFactor = material.transmission;\n if (material.transmissionMap) {\n const transmissionMapDef = {\n index: writer.processTexture(material.transmissionMap),\n texCoord: material.transmissionMap.channel\n };\n writer.applyTextureTransform(transmissionMapDef, material.transmissionMap);\n extensionDef.transmissionTexture = transmissionMapDef;\n }\n materialDef.extensions = materialDef.extensions || {};\n materialDef.extensions[this.name] = extensionDef;\n extensionsUsed[this.name] = true;\n }\n}\nclass GLTFMaterialsVolumeExtension {\n constructor(writer) {\n this.writer = writer;\n this.name = \"KHR_materials_volume\";\n }\n writeMaterial(material, materialDef) {\n if (!material.isMeshPhysicalMaterial || material.transmission === 0)\n return;\n const writer = this.writer;\n const extensionsUsed = writer.extensionsUsed;\n const extensionDef = {};\n extensionDef.thicknessFactor = material.thickness;\n if (material.thicknessMap) {\n const thicknessMapDef = {\n index: writer.processTexture(material.thicknessMap),\n texCoord: material.thicknessMap.channel\n };\n writer.applyTextureTransform(thicknessMapDef, material.thicknessMap);\n extensionDef.thicknessTexture = thicknessMapDef;\n }\n extensionDef.attenuationDistance = material.attenuationDistance;\n extensionDef.attenuationColor = material.attenuationColor.toArray();\n materialDef.extensions = materialDef.extensions || {};\n materialDef.extensions[this.name] = extensionDef;\n extensionsUsed[this.name] = true;\n }\n}\nclass GLTFMaterialsIorExtension {\n constructor(writer) {\n this.writer = writer;\n this.name = \"KHR_materials_ior\";\n }\n writeMaterial(material, materialDef) {\n if (!material.isMeshPhysicalMaterial || material.ior === 1.5)\n return;\n const writer = this.writer;\n const extensionsUsed = writer.extensionsUsed;\n const extensionDef = {};\n extensionDef.ior = material.ior;\n materialDef.extensions = materialDef.extensions || {};\n materialDef.extensions[this.name] = extensionDef;\n extensionsUsed[this.name] = true;\n }\n}\nclass GLTFMaterialsSpecularExtension {\n constructor(writer) {\n this.writer = writer;\n this.name = \"KHR_materials_specular\";\n }\n writeMaterial(material, materialDef) {\n if (!material.isMeshPhysicalMaterial || material.specularIntensity === 1 && material.specularColor.equals(DEFAULT_SPECULAR_COLOR) && !material.specularIntensityMap && !material.specularColorTexture)\n return;\n const writer = this.writer;\n const extensionsUsed = writer.extensionsUsed;\n const extensionDef = {};\n if (material.specularIntensityMap) {\n const specularIntensityMapDef = {\n index: writer.processTexture(material.specularIntensityMap),\n texCoord: material.specularIntensityMap.channel\n };\n writer.applyTextureTransform(specularIntensityMapDef, material.specularIntensityMap);\n extensionDef.specularTexture = specularIntensityMapDef;\n }\n if (material.specularColorMap) {\n const specularColorMapDef = {\n index: writer.processTexture(material.specularColorMap),\n texCoord: material.specularColorMap.channel\n };\n writer.applyTextureTransform(specularColorMapDef, material.specularColorMap);\n extensionDef.specularColorTexture = specularColorMapDef;\n }\n extensionDef.specularFactor = material.specularIntensity;\n extensionDef.specularColorFactor = material.specularColor.toArray();\n materialDef.extensions = materialDef.extensions || {};\n materialDef.extensions[this.name] = extensionDef;\n extensionsUsed[this.name] = true;\n }\n}\nclass GLTFMaterialsSheenExtension {\n constructor(writer) {\n this.writer = writer;\n this.name = \"KHR_materials_sheen\";\n }\n writeMaterial(material, materialDef) {\n if (!material.isMeshPhysicalMaterial || material.sheen == 0)\n return;\n const writer = this.writer;\n const extensionsUsed = writer.extensionsUsed;\n const extensionDef = {};\n if (material.sheenRoughnessMap) {\n const sheenRoughnessMapDef = {\n index: writer.processTexture(material.sheenRoughnessMap),\n texCoord: material.sheenRoughnessMap.channel\n };\n writer.applyTextureTransform(sheenRoughnessMapDef, material.sheenRoughnessMap);\n extensionDef.sheenRoughnessTexture = sheenRoughnessMapDef;\n }\n if (material.sheenColorMap) {\n const sheenColorMapDef = {\n index: writer.processTexture(material.sheenColorMap),\n texCoord: material.sheenColorMap.channel\n };\n writer.applyTextureTransform(sheenColorMapDef, material.sheenColorMap);\n extensionDef.sheenColorTexture = sheenColorMapDef;\n }\n extensionDef.sheenRoughnessFactor = material.sheenRoughness;\n extensionDef.sheenColorFactor = material.sheenColor.toArray();\n materialDef.extensions = materialDef.extensions || {};\n materialDef.extensions[this.name] = extensionDef;\n extensionsUsed[this.name] = true;\n }\n}\nclass GLTFMaterialsAnisotropyExtension {\n constructor(writer) {\n this.writer = writer;\n this.name = \"KHR_materials_anisotropy\";\n }\n writeMaterial(material, materialDef) {\n if (!material.isMeshPhysicalMaterial || material.anisotropy == 0)\n return;\n const writer = this.writer;\n const extensionsUsed = writer.extensionsUsed;\n const extensionDef = {};\n if (material.anisotropyMap) {\n const anisotropyMapDef = { index: writer.processTexture(material.anisotropyMap) };\n writer.applyTextureTransform(anisotropyMapDef, material.anisotropyMap);\n extensionDef.anisotropyTexture = anisotropyMapDef;\n }\n extensionDef.anisotropyStrength = material.anisotropy;\n extensionDef.anisotropyRotation = material.anisotropyRotation;\n materialDef.extensions = materialDef.extensions || {};\n materialDef.extensions[this.name] = extensionDef;\n extensionsUsed[this.name] = true;\n }\n}\nclass GLTFMaterialsEmissiveStrengthExtension {\n constructor(writer) {\n this.writer = writer;\n this.name = \"KHR_materials_emissive_strength\";\n }\n writeMaterial(material, materialDef) {\n if (!material.isMeshStandardMaterial || material.emissiveIntensity === 1)\n return;\n const writer = this.writer;\n const extensionsUsed = writer.extensionsUsed;\n const extensionDef = {};\n extensionDef.emissiveStrength = material.emissiveIntensity;\n materialDef.extensions = materialDef.extensions || {};\n materialDef.extensions[this.name] = extensionDef;\n extensionsUsed[this.name] = true;\n }\n}\nexport {\n GLTFExporter\n};\n//# sourceMappingURL=GLTFExporter.js.map\n","// DEFLATE is a complex format; to read this code, you should probably check the RFC first:\n// https://tools.ietf.org/html/rfc1951\n// You may also wish to take a look at the guide I made about this program:\n// https://gist.github.com/101arrowz/253f31eb5abc3d9275ab943003ffecad\n// Some of the following code is similar to that of UZIP.js:\n// https://github.com/photopea/UZIP.js\n// However, the vast majority of the codebase has diverged from UZIP.js to increase performance and reduce bundle size.\n// Sometimes 0 will appear where -1 would be more appropriate. This is because using a uint\n// is better for memory in most engines (I *think*).\nvar ch2 = {};\nvar wk = (function (c, id, msg, transfer, cb) {\n var w = new Worker(ch2[id] || (ch2[id] = URL.createObjectURL(new Blob([c], { type: 'text/javascript' }))));\n w.onerror = function (e) { return cb(e.error, null); };\n w.onmessage = function (e) { return cb(null, e.data); };\n w.postMessage(msg, transfer);\n return w;\n});\n\n// aliases for shorter compressed code (most minifers don't do this)\nvar u8 = Uint8Array, u16 = Uint16Array, u32 = Uint32Array;\n// fixed length extra bits\nvar fleb = new u8([0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0]);\n// fixed distance extra bits\n// see fleb note\nvar fdeb = new u8([0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0]);\n// code length index map\nvar clim = new u8([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n// get base, reverse index map from extra bits\nvar freb = function (eb, start) {\n var b = new u16(31);\n for (var i = 0; i < 31; ++i) {\n b[i] = start += 1 << eb[i - 1];\n }\n // numbers here are at max 18 bits\n var r = new u32(b[30]);\n for (var i = 1; i < 30; ++i) {\n for (var j = b[i]; j < b[i + 1]; ++j) {\n r[j] = ((j - b[i]) << 5) | i;\n }\n }\n return [b, r];\n};\nvar _a = freb(fleb, 2), fl = _a[0], revfl = _a[1];\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfl[28] = 258, revfl[258] = 28;\nvar _b = freb(fdeb, 0), fd = _b[0], revfd = _b[1];\n// map of value to reverse (assuming 16 bits)\nvar rev = new u16(32768);\nfor (var i = 0; i < 32768; ++i) {\n // reverse table algorithm from SO\n var x = ((i & 0xAAAA) >>> 1) | ((i & 0x5555) << 1);\n x = ((x & 0xCCCC) >>> 2) | ((x & 0x3333) << 2);\n x = ((x & 0xF0F0) >>> 4) | ((x & 0x0F0F) << 4);\n rev[i] = (((x & 0xFF00) >>> 8) | ((x & 0x00FF) << 8)) >>> 1;\n}\n// create huffman tree from u8 \"map\": index -> code length for code index\n// mb (max bits) must be at most 15\n// TODO: optimize/split up?\nvar hMap = (function (cd, mb, r) {\n var s = cd.length;\n // index\n var i = 0;\n // u16 \"map\": index -> # of codes with bit length = index\n var l = new u16(mb);\n // length of cd must be 288 (total # of codes)\n for (; i < s; ++i)\n ++l[cd[i] - 1];\n // u16 \"map\": index -> minimum code for bit length = index\n var le = new u16(mb);\n for (i = 0; i < mb; ++i) {\n le[i] = (le[i - 1] + l[i - 1]) << 1;\n }\n var co;\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new u16(1 << mb);\n // bits to remove for reverser\n var rvb = 15 - mb;\n for (i = 0; i < s; ++i) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n var sv = (i << 4) | cd[i];\n // free bits\n var r_1 = mb - cd[i];\n // start value\n var v = le[cd[i] - 1]++ << r_1;\n // m is end value\n for (var m = v | ((1 << r_1) - 1); v <= m; ++v) {\n // every 16 bit value starting with the code yields the same result\n co[rev[v] >>> rvb] = sv;\n }\n }\n }\n }\n else {\n co = new u16(s);\n for (i = 0; i < s; ++i) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >>> (15 - cd[i]);\n }\n }\n }\n return co;\n});\n// fixed length tree\nvar flt = new u8(288);\nfor (var i = 0; i < 144; ++i)\n flt[i] = 8;\nfor (var i = 144; i < 256; ++i)\n flt[i] = 9;\nfor (var i = 256; i < 280; ++i)\n flt[i] = 7;\nfor (var i = 280; i < 288; ++i)\n flt[i] = 8;\n// fixed distance tree\nvar fdt = new u8(32);\nfor (var i = 0; i < 32; ++i)\n fdt[i] = 5;\n// fixed length map\nvar flm = /*#__PURE__*/ hMap(flt, 9, 0), flrm = /*#__PURE__*/ hMap(flt, 9, 1);\n// fixed distance map\nvar fdm = /*#__PURE__*/ hMap(fdt, 5, 0), fdrm = /*#__PURE__*/ hMap(fdt, 5, 1);\n// find max of array\nvar max = function (a) {\n var m = a[0];\n for (var i = 1; i < a.length; ++i) {\n if (a[i] > m)\n m = a[i];\n }\n return m;\n};\n// read d, starting at bit p and mask with m\nvar bits = function (d, p, m) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8)) >> (p & 7)) & m;\n};\n// read d, starting at bit p continuing for at least 16 bits\nvar bits16 = function (d, p) {\n var o = (p / 8) | 0;\n return ((d[o] | (d[o + 1] << 8) | (d[o + 2] << 16)) >> (p & 7));\n};\n// get end of byte\nvar shft = function (p) { return ((p / 8) | 0) + (p & 7 && 1); };\n// typed array slice - allows garbage collector to free original reference,\n// while being more compatible than .slice\nvar slc = function (v, s, e) {\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n // can't use .constructor in case user-supplied\n var n = new (v instanceof u16 ? u16 : v instanceof u32 ? u32 : u8)(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\n// expands raw DEFLATE data\nvar inflt = function (dat, buf, st) {\n // source length\n var sl = dat.length;\n if (!sl || (st && !st.l && sl < 5))\n return buf || new u8(0);\n // have to estimate size\n var noBuf = !buf || st;\n // no state\n var noSt = !st || st.i;\n if (!st)\n st = {};\n // Assumes roughly 33% compression ratio average\n if (!buf)\n buf = new u8(sl * 3);\n // ensure buffer can fit at least l elements\n var cbuf = function (l) {\n var bl = buf.length;\n // need to increase size to fit\n if (l > bl) {\n // Double or set to necessary, whichever is greater\n var nbuf = new u8(Math.max(bl * 2, l));\n nbuf.set(buf);\n buf = nbuf;\n }\n };\n // last chunk bitpos bytes\n var final = st.f || 0, pos = st.p || 0, bt = st.b || 0, lm = st.l, dm = st.d, lbt = st.m, dbt = st.n;\n // total bits\n var tbts = sl * 8;\n do {\n if (!lm) {\n // BFINAL - this is only 1 when last chunk is next\n st.f = final = bits(dat, pos, 1);\n // type: 0 = no compression, 1 = fixed huffman, 2 = dynamic huffman\n var type = bits(dat, pos + 1, 3);\n pos += 3;\n if (!type) {\n // go to end of byte boundary\n var s = shft(pos) + 4, l = dat[s - 4] | (dat[s - 3] << 8), t = s + l;\n if (t > sl) {\n if (noSt)\n throw 'unexpected EOF';\n break;\n }\n // ensure size\n if (noBuf)\n cbuf(bt + l);\n // Copy over uncompressed data\n buf.set(dat.subarray(s, t), bt);\n // Get new bitpos, update byte count\n st.b = bt += l, st.p = pos = t * 8;\n continue;\n }\n else if (type == 1)\n lm = flrm, dm = fdrm, lbt = 9, dbt = 5;\n else if (type == 2) {\n // literal lengths\n var hLit = bits(dat, pos, 31) + 257, hcLen = bits(dat, pos + 10, 15) + 4;\n var tl = hLit + bits(dat, pos + 5, 31) + 1;\n pos += 14;\n // length+distance tree\n var ldt = new u8(tl);\n // code length tree\n var clt = new u8(19);\n for (var i = 0; i < hcLen; ++i) {\n // use index map to get real code\n clt[clim[i]] = bits(dat, pos + i * 3, 7);\n }\n pos += hcLen * 3;\n // code lengths bits\n var clb = max(clt), clbmsk = (1 << clb) - 1;\n // code lengths map\n var clm = hMap(clt, clb, 1);\n for (var i = 0; i < tl;) {\n var r = clm[bits(dat, pos, clbmsk)];\n // bits read\n pos += r & 15;\n // symbol\n var s = r >>> 4;\n // code length to copy\n if (s < 16) {\n ldt[i++] = s;\n }\n else {\n // copy count\n var c = 0, n = 0;\n if (s == 16)\n n = 3 + bits(dat, pos, 3), pos += 2, c = ldt[i - 1];\n else if (s == 17)\n n = 3 + bits(dat, pos, 7), pos += 3;\n else if (s == 18)\n n = 11 + bits(dat, pos, 127), pos += 7;\n while (n--)\n ldt[i++] = c;\n }\n }\n // length tree distance tree\n var lt = ldt.subarray(0, hLit), dt = ldt.subarray(hLit);\n // max length bits\n lbt = max(lt);\n // max dist bits\n dbt = max(dt);\n lm = hMap(lt, lbt, 1);\n dm = hMap(dt, dbt, 1);\n }\n else\n throw 'invalid block type';\n if (pos > tbts) {\n if (noSt)\n throw 'unexpected EOF';\n break;\n }\n }\n // Make sure the buffer can hold this + the largest possible addition\n // Maximum chunk size (practically, theoretically infinite) is 2^17;\n if (noBuf)\n cbuf(bt + 131072);\n var lms = (1 << lbt) - 1, dms = (1 << dbt) - 1;\n var lpos = pos;\n for (;; lpos = pos) {\n // bits read, code\n var c = lm[bits16(dat, pos) & lms], sym = c >>> 4;\n pos += c & 15;\n if (pos > tbts) {\n if (noSt)\n throw 'unexpected EOF';\n break;\n }\n if (!c)\n throw 'invalid length/literal';\n if (sym < 256)\n buf[bt++] = sym;\n else if (sym == 256) {\n lpos = pos, lm = null;\n break;\n }\n else {\n var add = sym - 254;\n // no extra bits needed if less\n if (sym > 264) {\n // index\n var i = sym - 257, b = fleb[i];\n add = bits(dat, pos, (1 << b) - 1) + fl[i];\n pos += b;\n }\n // dist\n var d = dm[bits16(dat, pos) & dms], dsym = d >>> 4;\n if (!d)\n throw 'invalid distance';\n pos += d & 15;\n var dt = fd[dsym];\n if (dsym > 3) {\n var b = fdeb[dsym];\n dt += bits16(dat, pos) & ((1 << b) - 1), pos += b;\n }\n if (pos > tbts) {\n if (noSt)\n throw 'unexpected EOF';\n break;\n }\n if (noBuf)\n cbuf(bt + 131072);\n var end = bt + add;\n for (; bt < end; bt += 4) {\n buf[bt] = buf[bt - dt];\n buf[bt + 1] = buf[bt + 1 - dt];\n buf[bt + 2] = buf[bt + 2 - dt];\n buf[bt + 3] = buf[bt + 3 - dt];\n }\n bt = end;\n }\n }\n st.l = lm, st.p = lpos, st.b = bt;\n if (lm)\n final = 1, st.m = lbt, st.d = dm, st.n = dbt;\n } while (!final);\n return bt == buf.length ? buf : slc(buf, 0, bt);\n};\n// starting at p, write the minimum number of bits that can hold v to d\nvar wbits = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n};\n// starting at p, write the minimum number of bits (>8) that can hold v to d\nvar wbits16 = function (d, p, v) {\n v <<= p & 7;\n var o = (p / 8) | 0;\n d[o] |= v;\n d[o + 1] |= v >>> 8;\n d[o + 2] |= v >>> 16;\n};\n// creates code lengths from a frequency table\nvar hTree = function (d, mb) {\n // Need extra info to make a tree\n var t = [];\n for (var i = 0; i < d.length; ++i) {\n if (d[i])\n t.push({ s: i, f: d[i] });\n }\n var s = t.length;\n var t2 = t.slice();\n if (!s)\n return [et, 0];\n if (s == 1) {\n var v = new u8(t[0].s + 1);\n v[t[0].s] = 1;\n return [v, 1];\n }\n t.sort(function (a, b) { return a.f - b.f; });\n // after i2 reaches last ind, will be stopped\n // freq must be greater than largest possible number of symbols\n t.push({ s: -1, f: 25001 });\n var l = t[0], r = t[1], i0 = 0, i1 = 1, i2 = 2;\n t[0] = { s: -1, f: l.f + r.f, l: l, r: r };\n // efficient algorithm from UZIP.js\n // i0 is lookbehind, i2 is lookahead - after processing two low-freq\n // symbols that combined have high freq, will start processing i2 (high-freq,\n // non-composite) symbols instead\n // see https://reddit.com/r/photopea/comments/ikekht/uzipjs_questions/\n while (i1 != s - 1) {\n l = t[t[i0].f < t[i2].f ? i0++ : i2++];\n r = t[i0 != i1 && t[i0].f < t[i2].f ? i0++ : i2++];\n t[i1++] = { s: -1, f: l.f + r.f, l: l, r: r };\n }\n var maxSym = t2[0].s;\n for (var i = 1; i < s; ++i) {\n if (t2[i].s > maxSym)\n maxSym = t2[i].s;\n }\n // code lengths\n var tr = new u16(maxSym + 1);\n // max bits in tree\n var mbt = ln(t[i1 - 1], tr, 0);\n if (mbt > mb) {\n // more algorithms from UZIP.js\n // TODO: find out how this code works (debt)\n // ind debt\n var i = 0, dt = 0;\n // left cost\n var lft = mbt - mb, cst = 1 << lft;\n t2.sort(function (a, b) { return tr[b.s] - tr[a.s] || a.f - b.f; });\n for (; i < s; ++i) {\n var i2_1 = t2[i].s;\n if (tr[i2_1] > mb) {\n dt += cst - (1 << (mbt - tr[i2_1]));\n tr[i2_1] = mb;\n }\n else\n break;\n }\n dt >>>= lft;\n while (dt > 0) {\n var i2_2 = t2[i].s;\n if (tr[i2_2] < mb)\n dt -= 1 << (mb - tr[i2_2]++ - 1);\n else\n ++i;\n }\n for (; i >= 0 && dt; --i) {\n var i2_3 = t2[i].s;\n if (tr[i2_3] == mb) {\n --tr[i2_3];\n ++dt;\n }\n }\n mbt = mb;\n }\n return [new u8(tr), mbt];\n};\n// get the max length and assign length codes\nvar ln = function (n, l, d) {\n return n.s == -1\n ? Math.max(ln(n.l, l, d + 1), ln(n.r, l, d + 1))\n : (l[n.s] = d);\n};\n// length codes generation\nvar lc = function (c) {\n var s = c.length;\n // Note that the semicolon was intentional\n while (s && !c[--s])\n ;\n var cl = new u16(++s);\n // ind num streak\n var cli = 0, cln = c[0], cls = 1;\n var w = function (v) { cl[cli++] = v; };\n for (var i = 1; i <= s; ++i) {\n if (c[i] == cln && i != s)\n ++cls;\n else {\n if (!cln && cls > 2) {\n for (; cls > 138; cls -= 138)\n w(32754);\n if (cls > 2) {\n w(cls > 10 ? ((cls - 11) << 5) | 28690 : ((cls - 3) << 5) | 12305);\n cls = 0;\n }\n }\n else if (cls > 3) {\n w(cln), --cls;\n for (; cls > 6; cls -= 6)\n w(8304);\n if (cls > 2)\n w(((cls - 3) << 5) | 8208), cls = 0;\n }\n while (cls--)\n w(cln);\n cls = 1;\n cln = c[i];\n }\n }\n return [cl.subarray(0, cli), s];\n};\n// calculate the length of output from tree, code lengths\nvar clen = function (cf, cl) {\n var l = 0;\n for (var i = 0; i < cl.length; ++i)\n l += cf[i] * cl[i];\n return l;\n};\n// writes a fixed block\n// returns the new bit pos\nvar wfblk = function (out, pos, dat) {\n // no need to write 00 as type: TypedArray defaults to 0\n var s = dat.length;\n var o = shft(pos + 2);\n out[o] = s & 255;\n out[o + 1] = s >>> 8;\n out[o + 2] = out[o] ^ 255;\n out[o + 3] = out[o + 1] ^ 255;\n for (var i = 0; i < s; ++i)\n out[o + i + 4] = dat[i];\n return (o + 4 + s) * 8;\n};\n// writes a block\nvar wblk = function (dat, out, final, syms, lf, df, eb, li, bs, bl, p) {\n wbits(out, p++, final);\n ++lf[256];\n var _a = hTree(lf, 15), dlt = _a[0], mlb = _a[1];\n var _b = hTree(df, 15), ddt = _b[0], mdb = _b[1];\n var _c = lc(dlt), lclt = _c[0], nlc = _c[1];\n var _d = lc(ddt), lcdt = _d[0], ndc = _d[1];\n var lcfreq = new u16(19);\n for (var i = 0; i < lclt.length; ++i)\n lcfreq[lclt[i] & 31]++;\n for (var i = 0; i < lcdt.length; ++i)\n lcfreq[lcdt[i] & 31]++;\n var _e = hTree(lcfreq, 7), lct = _e[0], mlcb = _e[1];\n var nlcc = 19;\n for (; nlcc > 4 && !lct[clim[nlcc - 1]]; --nlcc)\n ;\n var flen = (bl + 5) << 3;\n var ftlen = clen(lf, flt) + clen(df, fdt) + eb;\n var dtlen = clen(lf, dlt) + clen(df, ddt) + eb + 14 + 3 * nlcc + clen(lcfreq, lct) + (2 * lcfreq[16] + 3 * lcfreq[17] + 7 * lcfreq[18]);\n if (flen <= ftlen && flen <= dtlen)\n return wfblk(out, p, dat.subarray(bs, bs + bl));\n var lm, ll, dm, dl;\n wbits(out, p, 1 + (dtlen < ftlen)), p += 2;\n if (dtlen < ftlen) {\n lm = hMap(dlt, mlb, 0), ll = dlt, dm = hMap(ddt, mdb, 0), dl = ddt;\n var llm = hMap(lct, mlcb, 0);\n wbits(out, p, nlc - 257);\n wbits(out, p + 5, ndc - 1);\n wbits(out, p + 10, nlcc - 4);\n p += 14;\n for (var i = 0; i < nlcc; ++i)\n wbits(out, p + 3 * i, lct[clim[i]]);\n p += 3 * nlcc;\n var lcts = [lclt, lcdt];\n for (var it = 0; it < 2; ++it) {\n var clct = lcts[it];\n for (var i = 0; i < clct.length; ++i) {\n var len = clct[i] & 31;\n wbits(out, p, llm[len]), p += lct[len];\n if (len > 15)\n wbits(out, p, (clct[i] >>> 5) & 127), p += clct[i] >>> 12;\n }\n }\n }\n else {\n lm = flm, ll = flt, dm = fdm, dl = fdt;\n }\n for (var i = 0; i < li; ++i) {\n if (syms[i] > 255) {\n var len = (syms[i] >>> 18) & 31;\n wbits16(out, p, lm[len + 257]), p += ll[len + 257];\n if (len > 7)\n wbits(out, p, (syms[i] >>> 23) & 31), p += fleb[len];\n var dst = syms[i] & 31;\n wbits16(out, p, dm[dst]), p += dl[dst];\n if (dst > 3)\n wbits16(out, p, (syms[i] >>> 5) & 8191), p += fdeb[dst];\n }\n else {\n wbits16(out, p, lm[syms[i]]), p += ll[syms[i]];\n }\n }\n wbits16(out, p, lm[256]);\n return p + ll[256];\n};\n// deflate options (nice << 13) | chain\nvar deo = /*#__PURE__*/ new u32([65540, 131080, 131088, 131104, 262176, 1048704, 1048832, 2114560, 2117632]);\n// empty\nvar et = /*#__PURE__*/ new u8(0);\n// compresses data into a raw DEFLATE buffer\nvar dflt = function (dat, lvl, plvl, pre, post, lst) {\n var s = dat.length;\n var o = new u8(pre + s + 5 * (1 + Math.ceil(s / 7000)) + post);\n // writing to this writes to the output buffer\n var w = o.subarray(pre, o.length - post);\n var pos = 0;\n if (!lvl || s < 8) {\n for (var i = 0; i <= s; i += 65535) {\n // end\n var e = i + 65535;\n if (e < s) {\n // write full block\n pos = wfblk(w, pos, dat.subarray(i, e));\n }\n else {\n // write final block\n w[i] = lst;\n pos = wfblk(w, pos, dat.subarray(i, s));\n }\n }\n }\n else {\n var opt = deo[lvl - 1];\n var n = opt >>> 13, c = opt & 8191;\n var msk_1 = (1 << plvl) - 1;\n // prev 2-byte val map curr 2-byte val map\n var prev = new u16(32768), head = new u16(msk_1 + 1);\n var bs1_1 = Math.ceil(plvl / 3), bs2_1 = 2 * bs1_1;\n var hsh = function (i) { return (dat[i] ^ (dat[i + 1] << bs1_1) ^ (dat[i + 2] << bs2_1)) & msk_1; };\n // 24576 is an arbitrary number of maximum symbols per block\n // 424 buffer for last block\n var syms = new u32(25000);\n // length/literal freq distance freq\n var lf = new u16(288), df = new u16(32);\n // l/lcnt exbits index l/lind waitdx bitpos\n var lc_1 = 0, eb = 0, i = 0, li = 0, wi = 0, bs = 0;\n for (; i < s; ++i) {\n // hash value\n // deopt when i > s - 3 - at end, deopt acceptable\n var hv = hsh(i);\n // index mod 32768 previous index mod\n var imod = i & 32767, pimod = head[hv];\n prev[imod] = pimod;\n head[hv] = imod;\n // We always should modify head and prev, but only add symbols if\n // this data is not yet processed (\"wait\" for wait index)\n if (wi <= i) {\n // bytes remaining\n var rem = s - i;\n if ((lc_1 > 7000 || li > 24576) && rem > 423) {\n pos = wblk(dat, w, 0, syms, lf, df, eb, li, bs, i - bs, pos);\n li = lc_1 = eb = 0, bs = i;\n for (var j = 0; j < 286; ++j)\n lf[j] = 0;\n for (var j = 0; j < 30; ++j)\n df[j] = 0;\n }\n // len dist chain\n var l = 2, d = 0, ch_1 = c, dif = (imod - pimod) & 32767;\n if (rem > 2 && hv == hsh(i - dif)) {\n var maxn = Math.min(n, rem) - 1;\n var maxd = Math.min(32767, i);\n // max possible length\n // not capped at dif because decompressors implement \"rolling\" index population\n var ml = Math.min(258, rem);\n while (dif <= maxd && --ch_1 && imod != pimod) {\n if (dat[i + l] == dat[i + l - dif]) {\n var nl = 0;\n for (; nl < ml && dat[i + nl] == dat[i + nl - dif]; ++nl)\n ;\n if (nl > l) {\n l = nl, d = dif;\n // break out early when we reach \"nice\" (we are satisfied enough)\n if (nl > maxn)\n break;\n // now, find the rarest 2-byte sequence within this\n // length of literals and search for that instead.\n // Much faster than just using the start\n var mmd = Math.min(dif, nl - 2);\n var md = 0;\n for (var j = 0; j < mmd; ++j) {\n var ti = (i - dif + j + 32768) & 32767;\n var pti = prev[ti];\n var cd = (ti - pti + 32768) & 32767;\n if (cd > md)\n md = cd, pimod = ti;\n }\n }\n }\n // check the previous match\n imod = pimod, pimod = prev[imod];\n dif += (imod - pimod + 32768) & 32767;\n }\n }\n // d will be nonzero only when a match was found\n if (d) {\n // store both dist and len data in one Uint32\n // Make sure this is recognized as a len/dist with 28th bit (2^28)\n syms[li++] = 268435456 | (revfl[l] << 18) | revfd[d];\n var lin = revfl[l] & 31, din = revfd[d] & 31;\n eb += fleb[lin] + fdeb[din];\n ++lf[257 + lin];\n ++df[din];\n wi = i + l;\n ++lc_1;\n }\n else {\n syms[li++] = dat[i];\n ++lf[dat[i]];\n }\n }\n }\n pos = wblk(dat, w, lst, syms, lf, df, eb, li, bs, i - bs, pos);\n // this is the easiest way to avoid needing to maintain state\n if (!lst && pos & 7)\n pos = wfblk(w, pos + 1, et);\n }\n return slc(o, 0, pre + shft(pos) + post);\n};\n// CRC32 table\nvar crct = /*#__PURE__*/ (function () {\n var t = new Int32Array(256);\n for (var i = 0; i < 256; ++i) {\n var c = i, k = 9;\n while (--k)\n c = ((c & 1) && -306674912) ^ (c >>> 1);\n t[i] = c;\n }\n return t;\n})();\n// CRC32\nvar crc = function () {\n var c = -1;\n return {\n p: function (d) {\n // closures have awful performance\n var cr = c;\n for (var i = 0; i < d.length; ++i)\n cr = crct[(cr & 255) ^ d[i]] ^ (cr >>> 8);\n c = cr;\n },\n d: function () { return ~c; }\n };\n};\n// Alder32\nvar adler = function () {\n var a = 1, b = 0;\n return {\n p: function (d) {\n // closures have awful performance\n var n = a, m = b;\n var l = d.length;\n for (var i = 0; i != l;) {\n var e = Math.min(i + 2655, l);\n for (; i < e; ++i)\n m += n += d[i];\n n = (n & 65535) + 15 * (n >> 16), m = (m & 65535) + 15 * (m >> 16);\n }\n a = n, b = m;\n },\n d: function () {\n a %= 65521, b %= 65521;\n return (a & 255) << 24 | (a >>> 8) << 16 | (b & 255) << 8 | (b >>> 8);\n }\n };\n};\n;\n// deflate with opts\nvar dopt = function (dat, opt, pre, post, st) {\n return dflt(dat, opt.level == null ? 6 : opt.level, opt.mem == null ? Math.ceil(Math.max(8, Math.min(13, Math.log(dat.length))) * 1.5) : (12 + opt.mem), pre, post, !st);\n};\n// Walmart object spread\nvar mrg = function (a, b) {\n var o = {};\n for (var k in a)\n o[k] = a[k];\n for (var k in b)\n o[k] = b[k];\n return o;\n};\n// worker clone\n// This is possibly the craziest part of the entire codebase, despite how simple it may seem.\n// The only parameter to this function is a closure that returns an array of variables outside of the function scope.\n// We're going to try to figure out the variable names used in the closure as strings because that is crucial for workerization.\n// We will return an object mapping of true variable name to value (basically, the current scope as a JS object).\n// The reason we can't just use the original variable names is minifiers mangling the toplevel scope.\n// This took me three weeks to figure out how to do.\nvar wcln = function (fn, fnStr, td) {\n var dt = fn();\n var st = fn.toString();\n var ks = st.slice(st.indexOf('[') + 1, st.lastIndexOf(']')).replace(/ /g, '').split(',');\n for (var i = 0; i < dt.length; ++i) {\n var v = dt[i], k = ks[i];\n if (typeof v == 'function') {\n fnStr += ';' + k + '=';\n var st_1 = v.toString();\n if (v.prototype) {\n // for global objects\n if (st_1.indexOf('[native code]') != -1) {\n var spInd = st_1.indexOf(' ', 8) + 1;\n fnStr += st_1.slice(spInd, st_1.indexOf('(', spInd));\n }\n else {\n fnStr += st_1;\n for (var t in v.prototype)\n fnStr += ';' + k + '.prototype.' + t + '=' + v.prototype[t].toString();\n }\n }\n else\n fnStr += st_1;\n }\n else\n td[k] = v;\n }\n return [fnStr, td];\n};\nvar ch = [];\n// clone bufs\nvar cbfs = function (v) {\n var tl = [];\n for (var k in v) {\n if (v[k] instanceof u8 || v[k] instanceof u16 || v[k] instanceof u32)\n tl.push((v[k] = new v[k].constructor(v[k])).buffer);\n }\n return tl;\n};\n// use a worker to execute code\nvar wrkr = function (fns, init, id, cb) {\n var _a;\n if (!ch[id]) {\n var fnStr = '', td_1 = {}, m = fns.length - 1;\n for (var i = 0; i < m; ++i)\n _a = wcln(fns[i], fnStr, td_1), fnStr = _a[0], td_1 = _a[1];\n ch[id] = wcln(fns[m], fnStr, td_1);\n }\n var td = mrg({}, ch[id][1]);\n return wk(ch[id][0] + ';onmessage=function(e){for(var k in e.data)self[k]=e.data[k];onmessage=' + init.toString() + '}', id, td, cbfs(td), cb);\n};\n// base async inflate fn\nvar bInflt = function () { return [u8, u16, u32, fleb, fdeb, clim, fl, fd, flrm, fdrm, rev, hMap, max, bits, bits16, shft, slc, inflt, inflateSync, pbf, gu8]; };\nvar bDflt = function () { return [u8, u16, u32, fleb, fdeb, clim, revfl, revfd, flm, flt, fdm, fdt, rev, deo, et, hMap, wbits, wbits16, hTree, ln, lc, clen, wfblk, wblk, shft, slc, dflt, dopt, deflateSync, pbf]; };\n// gzip extra\nvar gze = function () { return [gzh, gzhl, wbytes, crc, crct]; };\n// gunzip extra\nvar guze = function () { return [gzs, gzl]; };\n// zlib extra\nvar zle = function () { return [zlh, wbytes, adler]; };\n// unzlib extra\nvar zule = function () { return [zlv]; };\n// post buf\nvar pbf = function (msg) { return postMessage(msg, [msg.buffer]); };\n// get u8\nvar gu8 = function (o) { return o && o.size && new u8(o.size); };\n// async helper\nvar cbify = function (dat, opts, fns, init, id, cb) {\n var w = wrkr(fns, init, id, function (err, dat) {\n w.terminate();\n cb(err, dat);\n });\n w.postMessage([dat, opts], opts.consume ? [dat.buffer] : []);\n return function () { w.terminate(); };\n};\n// auto stream\nvar astrm = function (strm) {\n strm.ondata = function (dat, final) { return postMessage([dat, final], [dat.buffer]); };\n return function (ev) { return strm.push(ev.data[0], ev.data[1]); };\n};\n// async stream attach\nvar astrmify = function (fns, strm, opts, init, id) {\n var t;\n var w = wrkr(fns, init, id, function (err, dat) {\n if (err)\n w.terminate(), strm.ondata.call(strm, err);\n else {\n if (dat[1])\n w.terminate();\n strm.ondata.call(strm, err, dat[0], dat[1]);\n }\n });\n w.postMessage(opts);\n strm.push = function (d, f) {\n if (t)\n throw 'stream finished';\n if (!strm.ondata)\n throw 'no stream handler';\n w.postMessage([d, t = f], [d.buffer]);\n };\n strm.terminate = function () { w.terminate(); };\n};\n// read 2 bytes\nvar b2 = function (d, b) { return d[b] | (d[b + 1] << 8); };\n// read 4 bytes\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\nvar b8 = function (d, b) { return b4(d, b) + (b4(d, b + 4) * 4294967296); };\n// write bytes\nvar wbytes = function (d, b, v) {\n for (; v; ++b)\n d[b] = v, v >>>= 8;\n};\n// gzip header\nvar gzh = function (c, o) {\n var fn = o.filename;\n c[0] = 31, c[1] = 139, c[2] = 8, c[8] = o.level < 2 ? 4 : o.level == 9 ? 2 : 0, c[9] = 3; // assume Unix\n if (o.mtime != 0)\n wbytes(c, 4, Math.floor(new Date(o.mtime || Date.now()) / 1000));\n if (fn) {\n c[3] = 8;\n for (var i = 0; i <= fn.length; ++i)\n c[i + 10] = fn.charCodeAt(i);\n }\n};\n// gzip footer: -8 to -4 = CRC, -4 to -0 is length\n// gzip start\nvar gzs = function (d) {\n if (d[0] != 31 || d[1] != 139 || d[2] != 8)\n throw 'invalid gzip data';\n var flg = d[3];\n var st = 10;\n if (flg & 4)\n st += d[10] | (d[11] << 8) + 2;\n for (var zs = (flg >> 3 & 1) + (flg >> 4 & 1); zs > 0; zs -= !d[st++])\n ;\n return st + (flg & 2);\n};\n// gzip length\nvar gzl = function (d) {\n var l = d.length;\n return ((d[l - 4] | d[l - 3] << 8 | d[l - 2] << 16) | (d[l - 1] << 24)) >>> 0;\n};\n// gzip header length\nvar gzhl = function (o) { return 10 + ((o.filename && (o.filename.length + 1)) || 0); };\n// zlib header\nvar zlh = function (c, o) {\n var lv = o.level, fl = lv == 0 ? 0 : lv < 6 ? 1 : lv == 9 ? 3 : 2;\n c[0] = 120, c[1] = (fl << 6) | (fl ? (32 - 2 * fl) : 1);\n};\n// zlib valid\nvar zlv = function (d) {\n if ((d[0] & 15) != 8 || (d[0] >>> 4) > 7 || ((d[0] << 8 | d[1]) % 31))\n throw 'invalid zlib data';\n if (d[1] & 32)\n throw 'invalid zlib data: preset dictionaries not supported';\n};\nfunction AsyncCmpStrm(opts, cb) {\n if (!cb && typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n return opts;\n}\n// zlib footer: -4 to -0 is Adler32\n/**\n * Streaming DEFLATE compression\n */\nvar Deflate = /*#__PURE__*/ (function () {\n function Deflate(opts, cb) {\n if (!cb && typeof opts == 'function')\n cb = opts, opts = {};\n this.ondata = cb;\n this.o = opts || {};\n }\n Deflate.prototype.p = function (c, f) {\n this.ondata(dopt(c, this.o, 0, 0, !f), f);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Deflate.prototype.push = function (chunk, final) {\n if (this.d)\n throw 'stream finished';\n if (!this.ondata)\n throw 'no stream handler';\n this.d = final;\n this.p(chunk, final || false);\n };\n return Deflate;\n}());\nexport { Deflate };\n/**\n * Asynchronous streaming DEFLATE compression\n */\nvar AsyncDeflate = /*#__PURE__*/ (function () {\n function AsyncDeflate(opts, cb) {\n astrmify([\n bDflt,\n function () { return [astrm, Deflate]; }\n ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n var strm = new Deflate(ev.data);\n onmessage = astrm(strm);\n }, 6);\n }\n return AsyncDeflate;\n}());\nexport { AsyncDeflate };\nexport function deflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bDflt,\n ], function (ev) { return pbf(deflateSync(ev.data[0], ev.data[1])); }, 0, cb);\n}\n/**\n * Compresses data with DEFLATE without any wrapper\n * @param data The data to compress\n * @param opts The compression options\n * @returns The deflated version of the data\n */\nexport function deflateSync(data, opts) {\n return dopt(data, opts || {}, 0, 0);\n}\n/**\n * Streaming DEFLATE decompression\n */\nvar Inflate = /*#__PURE__*/ (function () {\n /**\n * Creates an inflation stream\n * @param cb The callback to call whenever data is inflated\n */\n function Inflate(cb) {\n this.s = {};\n this.p = new u8(0);\n this.ondata = cb;\n }\n Inflate.prototype.e = function (c) {\n if (this.d)\n throw 'stream finished';\n if (!this.ondata)\n throw 'no stream handler';\n var l = this.p.length;\n var n = new u8(l + c.length);\n n.set(this.p), n.set(c, l), this.p = n;\n };\n Inflate.prototype.c = function (final) {\n this.d = this.s.i = final || false;\n var bts = this.s.b;\n var dt = inflt(this.p, this.o, this.s);\n this.ondata(slc(dt, bts, this.s.b), this.d);\n this.o = slc(dt, this.s.b - 32768), this.s.b = this.o.length;\n this.p = slc(this.p, (this.s.p / 8) | 0), this.s.p &= 7;\n };\n /**\n * Pushes a chunk to be inflated\n * @param chunk The chunk to push\n * @param final Whether this is the final chunk\n */\n Inflate.prototype.push = function (chunk, final) {\n this.e(chunk), this.c(final);\n };\n return Inflate;\n}());\nexport { Inflate };\n/**\n * Asynchronous streaming DEFLATE decompression\n */\nvar AsyncInflate = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous inflation stream\n * @param cb The callback to call whenever data is deflated\n */\n function AsyncInflate(cb) {\n this.ondata = cb;\n astrmify([\n bInflt,\n function () { return [astrm, Inflate]; }\n ], this, 0, function () {\n var strm = new Inflate();\n onmessage = astrm(strm);\n }, 7);\n }\n return AsyncInflate;\n}());\nexport { AsyncInflate };\nexport function inflate(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bInflt\n ], function (ev) { return pbf(inflateSync(ev.data[0], gu8(ev.data[1]))); }, 1, cb);\n}\n/**\n * Expands DEFLATE data with no wrapper\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function inflateSync(data, out) {\n return inflt(data, out);\n}\n// before you yell at me for not just using extends, my reason is that TS inheritance is hard to workerize.\n/**\n * Streaming GZIP compression\n */\nvar Gzip = /*#__PURE__*/ (function () {\n function Gzip(opts, cb) {\n this.c = crc();\n this.l = 0;\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be GZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gzip.prototype.push = function (chunk, final) {\n Deflate.prototype.push.call(this, chunk, final);\n };\n Gzip.prototype.p = function (c, f) {\n this.c.p(c);\n this.l += c.length;\n var raw = dopt(c, this.o, this.v && gzhl(this.o), f && 8, !f);\n if (this.v)\n gzh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 8, this.c.d()), wbytes(raw, raw.length - 4, this.l);\n this.ondata(raw, f);\n };\n return Gzip;\n}());\nexport { Gzip };\n/**\n * Asynchronous streaming GZIP compression\n */\nvar AsyncGzip = /*#__PURE__*/ (function () {\n function AsyncGzip(opts, cb) {\n astrmify([\n bDflt,\n gze,\n function () { return [astrm, Deflate, Gzip]; }\n ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n var strm = new Gzip(ev.data);\n onmessage = astrm(strm);\n }, 8);\n }\n return AsyncGzip;\n}());\nexport { AsyncGzip };\nexport function gzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bDflt,\n gze,\n function () { return [gzipSync]; }\n ], function (ev) { return pbf(gzipSync(ev.data[0], ev.data[1])); }, 2, cb);\n}\n/**\n * Compresses data with GZIP\n * @param data The data to compress\n * @param opts The compression options\n * @returns The gzipped version of the data\n */\nexport function gzipSync(data, opts) {\n if (!opts)\n opts = {};\n var c = crc(), l = data.length;\n c.p(data);\n var d = dopt(data, opts, gzhl(opts), 8), s = d.length;\n return gzh(d, opts), wbytes(d, s - 8, c.d()), wbytes(d, s - 4, l), d;\n}\n/**\n * Streaming GZIP decompression\n */\nvar Gunzip = /*#__PURE__*/ (function () {\n /**\n * Creates a GUNZIP stream\n * @param cb The callback to call whenever data is inflated\n */\n function Gunzip(cb) {\n this.v = 1;\n Inflate.call(this, cb);\n }\n /**\n * Pushes a chunk to be GUNZIPped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Gunzip.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n var s = this.p.length > 3 ? gzs(this.p) : 4;\n if (s >= this.p.length && !final)\n return;\n this.p = this.p.subarray(s), this.v = 0;\n }\n if (final) {\n if (this.p.length < 8)\n throw 'invalid gzip stream';\n this.p = this.p.subarray(0, -8);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Gunzip;\n}());\nexport { Gunzip };\n/**\n * Asynchronous streaming GZIP decompression\n */\nvar AsyncGunzip = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous GUNZIP stream\n * @param cb The callback to call whenever data is deflated\n */\n function AsyncGunzip(cb) {\n this.ondata = cb;\n astrmify([\n bInflt,\n guze,\n function () { return [astrm, Inflate, Gunzip]; }\n ], this, 0, function () {\n var strm = new Gunzip();\n onmessage = astrm(strm);\n }, 9);\n }\n return AsyncGunzip;\n}());\nexport { AsyncGunzip };\nexport function gunzip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bInflt,\n guze,\n function () { return [gunzipSync]; }\n ], function (ev) { return pbf(gunzipSync(ev.data[0])); }, 3, cb);\n}\n/**\n * Expands GZIP data\n * @param data The data to decompress\n * @param out Where to write the data. GZIP already encodes the output size, so providing this doesn't save memory.\n * @returns The decompressed version of the data\n */\nexport function gunzipSync(data, out) {\n return inflt(data.subarray(gzs(data), -8), out || new u8(gzl(data)));\n}\n/**\n * Streaming Zlib compression\n */\nvar Zlib = /*#__PURE__*/ (function () {\n function Zlib(opts, cb) {\n this.c = adler();\n this.v = 1;\n Deflate.call(this, opts, cb);\n }\n /**\n * Pushes a chunk to be zlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Zlib.prototype.push = function (chunk, final) {\n Deflate.prototype.push.call(this, chunk, final);\n };\n Zlib.prototype.p = function (c, f) {\n this.c.p(c);\n var raw = dopt(c, this.o, this.v && 2, f && 4, !f);\n if (this.v)\n zlh(raw, this.o), this.v = 0;\n if (f)\n wbytes(raw, raw.length - 4, this.c.d());\n this.ondata(raw, f);\n };\n return Zlib;\n}());\nexport { Zlib };\n/**\n * Asynchronous streaming Zlib compression\n */\nvar AsyncZlib = /*#__PURE__*/ (function () {\n function AsyncZlib(opts, cb) {\n astrmify([\n bDflt,\n zle,\n function () { return [astrm, Deflate, Zlib]; }\n ], this, AsyncCmpStrm.call(this, opts, cb), function (ev) {\n var strm = new Zlib(ev.data);\n onmessage = astrm(strm);\n }, 10);\n }\n return AsyncZlib;\n}());\nexport { AsyncZlib };\nexport function zlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bDflt,\n zle,\n function () { return [zlibSync]; }\n ], function (ev) { return pbf(zlibSync(ev.data[0], ev.data[1])); }, 4, cb);\n}\n/**\n * Compress data with Zlib\n * @param data The data to compress\n * @param opts The compression options\n * @returns The zlib-compressed version of the data\n */\nexport function zlibSync(data, opts) {\n if (!opts)\n opts = {};\n var a = adler();\n a.p(data);\n var d = dopt(data, opts, 2, 4);\n return zlh(d, opts), wbytes(d, d.length - 4, a.d()), d;\n}\n/**\n * Streaming Zlib decompression\n */\nvar Unzlib = /*#__PURE__*/ (function () {\n /**\n * Creates a Zlib decompression stream\n * @param cb The callback to call whenever data is inflated\n */\n function Unzlib(cb) {\n this.v = 1;\n Inflate.call(this, cb);\n }\n /**\n * Pushes a chunk to be unzlibbed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzlib.prototype.push = function (chunk, final) {\n Inflate.prototype.e.call(this, chunk);\n if (this.v) {\n if (this.p.length < 2 && !final)\n return;\n this.p = this.p.subarray(2), this.v = 0;\n }\n if (final) {\n if (this.p.length < 4)\n throw 'invalid zlib stream';\n this.p = this.p.subarray(0, -4);\n }\n // necessary to prevent TS from using the closure value\n // This allows for workerization to function correctly\n Inflate.prototype.c.call(this, final);\n };\n return Unzlib;\n}());\nexport { Unzlib };\n/**\n * Asynchronous streaming Zlib decompression\n */\nvar AsyncUnzlib = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous Zlib decompression stream\n * @param cb The callback to call whenever data is deflated\n */\n function AsyncUnzlib(cb) {\n this.ondata = cb;\n astrmify([\n bInflt,\n zule,\n function () { return [astrm, Inflate, Unzlib]; }\n ], this, 0, function () {\n var strm = new Unzlib();\n onmessage = astrm(strm);\n }, 11);\n }\n return AsyncUnzlib;\n}());\nexport { AsyncUnzlib };\nexport function unzlib(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return cbify(data, opts, [\n bInflt,\n zule,\n function () { return [unzlibSync]; }\n ], function (ev) { return pbf(unzlibSync(ev.data[0], gu8(ev.data[1]))); }, 5, cb);\n}\n/**\n * Expands Zlib data\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function unzlibSync(data, out) {\n return inflt((zlv(data), data.subarray(2, -4)), out);\n}\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzip as compress, AsyncGzip as AsyncCompress };\n// Default algorithm for compression (used because having a known output size allows faster decompression)\nexport { gzipSync as compressSync, Gzip as Compress };\n/**\n * Streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar Decompress = /*#__PURE__*/ (function () {\n /**\n * Creates a decompression stream\n * @param cb The callback to call whenever data is decompressed\n */\n function Decompress(cb) {\n this.G = Gunzip;\n this.I = Inflate;\n this.Z = Unzlib;\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Decompress.prototype.push = function (chunk, final) {\n if (!this.ondata)\n throw 'no stream handler';\n if (!this.s) {\n if (this.p && this.p.length) {\n var n = new u8(this.p.length + chunk.length);\n n.set(this.p), n.set(chunk, this.p.length);\n }\n else\n this.p = chunk;\n if (this.p.length > 2) {\n var _this_1 = this;\n var cb = function () { _this_1.ondata.apply(_this_1, arguments); };\n this.s = (this.p[0] == 31 && this.p[1] == 139 && this.p[2] == 8)\n ? new this.G(cb)\n : ((this.p[0] & 15) != 8 || (this.p[0] >> 4) > 7 || ((this.p[0] << 8 | this.p[1]) % 31))\n ? new this.I(cb)\n : new this.Z(cb);\n this.s.push(this.p, final);\n this.p = null;\n }\n }\n else\n this.s.push(chunk, final);\n };\n return Decompress;\n}());\nexport { Decompress };\n/**\n * Asynchronous streaming GZIP, Zlib, or raw DEFLATE decompression\n */\nvar AsyncDecompress = /*#__PURE__*/ (function () {\n /**\n * Creates an asynchronous decompression stream\n * @param cb The callback to call whenever data is decompressed\n */\n function AsyncDecompress(cb) {\n this.G = AsyncGunzip;\n this.I = AsyncInflate;\n this.Z = AsyncUnzlib;\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be decompressed\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncDecompress.prototype.push = function (chunk, final) {\n Decompress.prototype.push.call(this, chunk, final);\n };\n return AsyncDecompress;\n}());\nexport { AsyncDecompress };\nexport function decompress(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzip(data, opts, cb)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflate(data, opts, cb)\n : unzlib(data, opts, cb);\n}\n/**\n * Expands compressed GZIP, Zlib, or raw DEFLATE data, automatically detecting the format\n * @param data The data to decompress\n * @param out Where to write the data. Saves memory if you know the decompressed size and provide an output buffer of that length.\n * @returns The decompressed version of the data\n */\nexport function decompressSync(data, out) {\n return (data[0] == 31 && data[1] == 139 && data[2] == 8)\n ? gunzipSync(data, out)\n : ((data[0] & 15) != 8 || (data[0] >> 4) > 7 || ((data[0] << 8 | data[1]) % 31))\n ? inflateSync(data, out)\n : unzlibSync(data, out);\n}\n// flatten a directory structure\nvar fltn = function (d, p, t, o) {\n for (var k in d) {\n var val = d[k], n = p + k;\n if (val instanceof u8)\n t[n] = [val, o];\n else if (Array.isArray(val))\n t[n] = [val[0], mrg(o, val[1])];\n else\n fltn(val, n + '/', t, o);\n }\n};\n// text encoder\nvar te = typeof TextEncoder != 'undefined' && /*#__PURE__*/ new TextEncoder();\n// text decoder\nvar td = typeof TextDecoder != 'undefined' && /*#__PURE__*/ new TextDecoder();\n// text decoder stream\nvar tds = 0;\ntry {\n td.decode(et, { stream: true });\n tds = 1;\n}\ncatch (e) { }\n// decode UTF8\nvar dutf8 = function (d) {\n for (var r = '', i = 0;;) {\n var c = d[i++];\n var eb = (c > 127) + (c > 223) + (c > 239);\n if (i + eb > d.length)\n return [r, slc(d, i - 1)];\n if (!eb)\n r += String.fromCharCode(c);\n else if (eb == 3) {\n c = ((c & 15) << 18 | (d[i++] & 63) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63)) - 65536,\n r += String.fromCharCode(55296 | (c >> 10), 56320 | (c & 1023));\n }\n else if (eb & 1)\n r += String.fromCharCode((c & 31) << 6 | (d[i++] & 63));\n else\n r += String.fromCharCode((c & 15) << 12 | (d[i++] & 63) << 6 | (d[i++] & 63));\n }\n};\n/**\n * Streaming UTF-8 decoding\n */\nvar DecodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is decoded\n */\n function DecodeUTF8(cb) {\n this.ondata = cb;\n if (tds)\n this.t = new TextDecoder();\n else\n this.p = et;\n }\n /**\n * Pushes a chunk to be decoded from UTF-8 binary\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n DecodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n throw 'no callback';\n final = !!final;\n if (this.t) {\n this.ondata(this.t.decode(chunk, { stream: true }), final);\n if (final) {\n if (this.t.decode().length)\n throw 'invalid utf-8 data';\n this.t = null;\n }\n return;\n }\n if (!this.p)\n throw 'stream finished';\n var dat = new u8(this.p.length + chunk.length);\n dat.set(this.p);\n dat.set(chunk, this.p.length);\n var _a = dutf8(dat), ch = _a[0], np = _a[1];\n if (final) {\n if (np.length)\n throw 'invalid utf-8 data';\n this.p = null;\n }\n else\n this.p = np;\n this.ondata(ch, final);\n };\n return DecodeUTF8;\n}());\nexport { DecodeUTF8 };\n/**\n * Streaming UTF-8 encoding\n */\nvar EncodeUTF8 = /*#__PURE__*/ (function () {\n /**\n * Creates a UTF-8 decoding stream\n * @param cb The callback to call whenever data is encoded\n */\n function EncodeUTF8(cb) {\n this.ondata = cb;\n }\n /**\n * Pushes a chunk to be encoded to UTF-8\n * @param chunk The string data to push\n * @param final Whether this is the last chunk\n */\n EncodeUTF8.prototype.push = function (chunk, final) {\n if (!this.ondata)\n throw 'no callback';\n if (this.d)\n throw 'stream finished';\n this.ondata(strToU8(chunk), this.d = final || false);\n };\n return EncodeUTF8;\n}());\nexport { EncodeUTF8 };\n/**\n * Converts a string into a Uint8Array for use with compression/decompression methods\n * @param str The string to encode\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless decoding a binary string.\n * @returns The string encoded in UTF-8/Latin-1 binary\n */\nexport function strToU8(str, latin1) {\n if (latin1) {\n var ar_1 = new u8(str.length);\n for (var i = 0; i < str.length; ++i)\n ar_1[i] = str.charCodeAt(i);\n return ar_1;\n }\n if (te)\n return te.encode(str);\n var l = str.length;\n var ar = new u8(str.length + (str.length >> 1));\n var ai = 0;\n var w = function (v) { ar[ai++] = v; };\n for (var i = 0; i < l; ++i) {\n if (ai + 5 > ar.length) {\n var n = new u8(ai + 8 + ((l - i) << 1));\n n.set(ar);\n ar = n;\n }\n var c = str.charCodeAt(i);\n if (c < 128 || latin1)\n w(c);\n else if (c < 2048)\n w(192 | (c >> 6)), w(128 | (c & 63));\n else if (c > 55295 && c < 57344)\n c = 65536 + (c & 1023 << 10) | (str.charCodeAt(++i) & 1023),\n w(240 | (c >> 18)), w(128 | ((c >> 12) & 63)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n else\n w(224 | (c >> 12)), w(128 | ((c >> 6) & 63)), w(128 | (c & 63));\n }\n return slc(ar, 0, ai);\n}\n/**\n * Converts a Uint8Array to a string\n * @param dat The data to decode to string\n * @param latin1 Whether or not to interpret the data as Latin-1. This should\n * not need to be true unless encoding to binary string.\n * @returns The original UTF-8/Latin-1 string\n */\nexport function strFromU8(dat, latin1) {\n if (latin1) {\n var r = '';\n for (var i = 0; i < dat.length; i += 16384)\n r += String.fromCharCode.apply(null, dat.subarray(i, i + 16384));\n return r;\n }\n else if (td)\n return td.decode(dat);\n else {\n var _a = dutf8(dat), out = _a[0], ext = _a[1];\n if (ext.length)\n throw 'invalid utf-8 data';\n return out;\n }\n}\n;\n// deflate bit flag\nvar dbf = function (l) { return l == 1 ? 3 : l < 6 ? 2 : l == 9 ? 1 : 0; };\n// skip local zip header\nvar slzh = function (d, b) { return b + 30 + b2(d, b + 26) + b2(d, b + 28); };\n// read zip header\nvar zh = function (d, b, z) {\n var fnl = b2(d, b + 28), fn = strFromU8(d.subarray(b + 46, b + 46 + fnl), !(b2(d, b + 8) & 2048)), es = b + 46 + fnl, bs = b4(d, b + 20);\n var _a = z && bs == 4294967295 ? z64e(d, es) : [bs, b4(d, b + 24), b4(d, b + 42)], sc = _a[0], su = _a[1], off = _a[2];\n return [b2(d, b + 10), sc, su, fn, es + b2(d, b + 30) + b2(d, b + 32), off];\n};\n// read zip64 extra field\nvar z64e = function (d, b) {\n for (; b2(d, b) != 1; b += 4 + b2(d, b + 2))\n ;\n return [b8(d, b + 12), b8(d, b + 4), b8(d, b + 20)];\n};\n// extra field length\nvar exfl = function (ex) {\n var le = 0;\n if (ex) {\n for (var k in ex) {\n var l = ex[k].length;\n if (l > 65535)\n throw 'extra field too long';\n le += l + 4;\n }\n }\n return le;\n};\n// write zip header\nvar wzh = function (d, b, f, fn, u, c, ce, co) {\n var fl = fn.length, ex = f.extra, col = co && co.length;\n var exl = exfl(ex);\n wbytes(d, b, ce != null ? 0x2014B50 : 0x4034B50), b += 4;\n if (ce != null)\n d[b++] = 20, d[b++] = f.os;\n d[b] = 20, b += 2; // spec compliance? what's that?\n d[b++] = (f.flag << 1) | (c == null && 8), d[b++] = u && 8;\n d[b++] = f.compression & 255, d[b++] = f.compression >> 8;\n var dt = new Date(f.mtime == null ? Date.now() : f.mtime), y = dt.getFullYear() - 1980;\n if (y < 0 || y > 119)\n throw 'date not in range 1980-2099';\n wbytes(d, b, (y << 25) | ((dt.getMonth() + 1) << 21) | (dt.getDate() << 16) | (dt.getHours() << 11) | (dt.getMinutes() << 5) | (dt.getSeconds() >>> 1)), b += 4;\n if (c != null) {\n wbytes(d, b, f.crc);\n wbytes(d, b + 4, c);\n wbytes(d, b + 8, f.size);\n }\n wbytes(d, b + 12, fl);\n wbytes(d, b + 14, exl), b += 16;\n if (ce != null) {\n wbytes(d, b, col);\n wbytes(d, b + 6, f.attrs);\n wbytes(d, b + 10, ce), b += 14;\n }\n d.set(fn, b);\n b += fl;\n if (exl) {\n for (var k in ex) {\n var exf = ex[k], l = exf.length;\n wbytes(d, b, +k);\n wbytes(d, b + 2, l);\n d.set(exf, b + 4), b += 4 + l;\n }\n }\n if (col)\n d.set(co, b), b += col;\n return b;\n};\n// write zip footer (end of central directory)\nvar wzf = function (o, b, c, d, e) {\n wbytes(o, b, 0x6054B50); // skip disk\n wbytes(o, b + 8, c);\n wbytes(o, b + 10, c);\n wbytes(o, b + 12, d);\n wbytes(o, b + 16, e);\n};\n/**\n * A pass-through stream to keep data uncompressed in a ZIP archive.\n */\nvar ZipPassThrough = /*#__PURE__*/ (function () {\n /**\n * Creates a pass-through stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n */\n function ZipPassThrough(filename) {\n this.filename = filename;\n this.c = crc();\n this.size = 0;\n this.compression = 0;\n }\n /**\n * Processes a chunk and pushes to the output stream. You can override this\n * method in a subclass for custom behavior, but by default this passes\n * the data through. You must call this.ondata(err, chunk, final) at some\n * point in this method.\n * @param chunk The chunk to process\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.process = function (chunk, final) {\n this.ondata(null, chunk, final);\n };\n /**\n * Pushes a chunk to be added. If you are subclassing this with a custom\n * compression algorithm, note that you must push data from the source\n * file only, pre-compression.\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipPassThrough.prototype.push = function (chunk, final) {\n if (!this.ondata)\n throw 'no callback - add to ZIP archive before pushing';\n this.c.p(chunk);\n this.size += chunk.length;\n if (final)\n this.crc = this.c.d();\n this.process(chunk, final || false);\n };\n return ZipPassThrough;\n}());\nexport { ZipPassThrough };\n// I don't extend because TypeScript extension adds 1kB of runtime bloat\n/**\n * Streaming DEFLATE compression for ZIP archives. Prefer using AsyncZipDeflate\n * for better performance\n */\nvar ZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function ZipDeflate(filename, opts) {\n var _this_1 = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new Deflate(opts, function (dat, final) {\n _this_1.ondata(null, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n }\n ZipDeflate.prototype.process = function (chunk, final) {\n try {\n this.d.push(chunk, final);\n }\n catch (e) {\n this.ondata(e, null, final);\n }\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n ZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return ZipDeflate;\n}());\nexport { ZipDeflate };\n/**\n * Asynchronous streaming DEFLATE compression for ZIP archives\n */\nvar AsyncZipDeflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE stream that can be added to ZIP archives\n * @param filename The filename to associate with this data stream\n * @param opts The compression options\n */\n function AsyncZipDeflate(filename, opts) {\n var _this_1 = this;\n if (!opts)\n opts = {};\n ZipPassThrough.call(this, filename);\n this.d = new AsyncDeflate(opts, function (err, dat, final) {\n _this_1.ondata(err, dat, final);\n });\n this.compression = 8;\n this.flag = dbf(opts.level);\n this.terminate = this.d.terminate;\n }\n AsyncZipDeflate.prototype.process = function (chunk, final) {\n this.d.push(chunk, final);\n };\n /**\n * Pushes a chunk to be deflated\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n AsyncZipDeflate.prototype.push = function (chunk, final) {\n ZipPassThrough.prototype.push.call(this, chunk, final);\n };\n return AsyncZipDeflate;\n}());\nexport { AsyncZipDeflate };\n// TODO: Better tree shaking\n/**\n * A zippable archive to which files can incrementally be added\n */\nvar Zip = /*#__PURE__*/ (function () {\n /**\n * Creates an empty ZIP archive to which files can be added\n * @param cb The callback to call whenever data for the generated ZIP archive\n * is available\n */\n function Zip(cb) {\n this.ondata = cb;\n this.u = [];\n this.d = 1;\n }\n /**\n * Adds a file to the ZIP archive\n * @param file The file stream to add\n */\n Zip.prototype.add = function (file) {\n var _this_1 = this;\n if (this.d & 2)\n throw 'stream finished';\n var f = strToU8(file.filename), fl = f.length;\n var com = file.comment, o = com && strToU8(com);\n var u = fl != file.filename.length || (o && (com.length != o.length));\n var hl = fl + exfl(file.extra) + 30;\n if (fl > 65535)\n throw 'filename too long';\n var header = new u8(hl);\n wzh(header, 0, file, f, u);\n var chks = [header];\n var pAll = function () {\n for (var _i = 0, chks_1 = chks; _i < chks_1.length; _i++) {\n var chk = chks_1[_i];\n _this_1.ondata(null, chk, false);\n }\n chks = [];\n };\n var tr = this.d;\n this.d = 0;\n var ind = this.u.length;\n var uf = mrg(file, {\n f: f,\n u: u,\n o: o,\n t: function () {\n if (file.terminate)\n file.terminate();\n },\n r: function () {\n pAll();\n if (tr) {\n var nxt = _this_1.u[ind + 1];\n if (nxt)\n nxt.r();\n else\n _this_1.d = 1;\n }\n tr = 1;\n }\n });\n var cl = 0;\n file.ondata = function (err, dat, final) {\n if (err) {\n _this_1.ondata(err, dat, final);\n _this_1.terminate();\n }\n else {\n cl += dat.length;\n chks.push(dat);\n if (final) {\n var dd = new u8(16);\n wbytes(dd, 0, 0x8074B50);\n wbytes(dd, 4, file.crc);\n wbytes(dd, 8, cl);\n wbytes(dd, 12, file.size);\n chks.push(dd);\n uf.c = cl, uf.b = hl + cl + 16, uf.crc = file.crc, uf.size = file.size;\n if (tr)\n uf.r();\n tr = 1;\n }\n else if (tr)\n pAll();\n }\n };\n this.u.push(uf);\n };\n /**\n * Ends the process of adding files and prepares to emit the final chunks.\n * This *must* be called after adding all desired files for the resulting\n * ZIP file to work properly.\n */\n Zip.prototype.end = function () {\n var _this_1 = this;\n if (this.d & 2) {\n if (this.d & 1)\n throw 'stream finishing';\n throw 'stream finished';\n }\n if (this.d)\n this.e();\n else\n this.u.push({\n r: function () {\n if (!(_this_1.d & 1))\n return;\n _this_1.u.splice(-1, 1);\n _this_1.e();\n },\n t: function () { }\n });\n this.d = 3;\n };\n Zip.prototype.e = function () {\n var bt = 0, l = 0, tl = 0;\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n tl += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0);\n }\n var out = new u8(tl + 22);\n for (var _b = 0, _c = this.u; _b < _c.length; _b++) {\n var f = _c[_b];\n wzh(out, bt, f, f.f, f.u, f.c, l, f.o);\n bt += 46 + f.f.length + exfl(f.extra) + (f.o ? f.o.length : 0), l += f.b;\n }\n wzf(out, bt, this.u.length, tl, l);\n this.ondata(null, out, true);\n this.d = 2;\n };\n /**\n * A method to terminate any internal workers used by the stream. Subsequent\n * calls to add() will fail.\n */\n Zip.prototype.terminate = function () {\n for (var _i = 0, _a = this.u; _i < _a.length; _i++) {\n var f = _a[_i];\n f.t();\n }\n this.d = 2;\n };\n return Zip;\n}());\nexport { Zip };\nexport function zip(data, opts, cb) {\n if (!cb)\n cb = opts, opts = {};\n if (typeof cb != 'function')\n throw 'no callback';\n var r = {};\n fltn(data, '', r, opts);\n var k = Object.keys(r);\n var lft = k.length, o = 0, tot = 0;\n var slft = lft, files = new Array(lft);\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var cbf = function () {\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n tot = 0;\n for (var i = 0; i < slft; ++i) {\n var f = files[i];\n try {\n var l = f.c.length;\n wzh(out, tot, f, f.f, f.u, l);\n var badd = 30 + f.f.length + exfl(f.extra);\n var loc = tot + badd;\n out.set(f.c, loc);\n wzh(out, o, f, f.f, f.u, l, tot, f.m), o += 16 + badd + (f.m ? f.m.length : 0), tot = loc + l;\n }\n catch (e) {\n return cb(e, null);\n }\n }\n wzf(out, o, files.length, cdl, oe);\n cb(null, out);\n };\n if (!lft)\n cbf();\n var _loop_1 = function (i) {\n var fn = k[i];\n var _a = r[fn], file = _a[0], p = _a[1];\n var c = crc(), size = file.length;\n c.p(file);\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n var compression = p.level == 0 ? 0 : 8;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cb(e, null);\n }\n else {\n var l = d.length;\n files[i] = mrg(p, {\n size: size,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n compression: compression\n });\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n if (!--lft)\n cbf();\n }\n };\n if (s > 65535)\n cbl('filename too long', null);\n if (!compression)\n cbl(null, file);\n else if (size < 160000) {\n try {\n cbl(null, deflateSync(file, p));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(deflate(file, p, cbl));\n };\n // Cannot use lft because it can decrease\n for (var i = 0; i < slft; ++i) {\n _loop_1(i);\n }\n return tAll;\n}\n/**\n * Synchronously creates a ZIP file. Prefer using `zip` for better performance\n * with more than one file.\n * @param data The directory structure for the ZIP archive\n * @param opts The main options, merged with per-file options\n * @returns The generated ZIP archive\n */\nexport function zipSync(data, opts) {\n if (!opts)\n opts = {};\n var r = {};\n var files = [];\n fltn(data, '', r, opts);\n var o = 0;\n var tot = 0;\n for (var fn in r) {\n var _a = r[fn], file = _a[0], p = _a[1];\n var compression = p.level == 0 ? 0 : 8;\n var f = strToU8(fn), s = f.length;\n var com = p.comment, m = com && strToU8(com), ms = m && m.length;\n var exl = exfl(p.extra);\n if (s > 65535)\n throw 'filename too long';\n var d = compression ? deflateSync(file, p) : file, l = d.length;\n var c = crc();\n c.p(file);\n files.push(mrg(p, {\n size: file.length,\n crc: c.d(),\n c: d,\n f: f,\n m: m,\n u: s != fn.length || (m && (com.length != ms)),\n o: o,\n compression: compression\n }));\n o += 30 + s + exl + l;\n tot += 76 + 2 * (s + exl) + (ms || 0) + l;\n }\n var out = new u8(tot + 22), oe = o, cdl = tot - o;\n for (var i = 0; i < files.length; ++i) {\n var f = files[i];\n wzh(out, f.o, f, f.f, f.u, f.c.length);\n var badd = 30 + f.f.length + exfl(f.extra);\n out.set(f.c, f.o + badd);\n wzh(out, o, f, f.f, f.u, f.c.length, f.o, f.m), o += 16 + badd + (f.m ? f.m.length : 0);\n }\n wzf(out, o, files.length, cdl, oe);\n return out;\n}\n/**\n * Streaming pass-through decompression for ZIP archives\n */\nvar UnzipPassThrough = /*#__PURE__*/ (function () {\n function UnzipPassThrough() {\n }\n UnzipPassThrough.prototype.push = function (data, final) {\n this.ondata(null, data, final);\n };\n UnzipPassThrough.compression = 0;\n return UnzipPassThrough;\n}());\nexport { UnzipPassThrough };\n/**\n * Streaming DEFLATE decompression for ZIP archives. Prefer AsyncZipInflate for\n * better performance.\n */\nvar UnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function UnzipInflate() {\n var _this_1 = this;\n this.i = new Inflate(function (dat, final) {\n _this_1.ondata(null, dat, final);\n });\n }\n UnzipInflate.prototype.push = function (data, final) {\n try {\n this.i.push(data, final);\n }\n catch (e) {\n this.ondata(e, data, final);\n }\n };\n UnzipInflate.compression = 8;\n return UnzipInflate;\n}());\nexport { UnzipInflate };\n/**\n * Asynchronous streaming DEFLATE decompression for ZIP archives\n */\nvar AsyncUnzipInflate = /*#__PURE__*/ (function () {\n /**\n * Creates a DEFLATE decompression that can be used in ZIP archives\n */\n function AsyncUnzipInflate(_, sz) {\n var _this_1 = this;\n if (sz < 320000) {\n this.i = new Inflate(function (dat, final) {\n _this_1.ondata(null, dat, final);\n });\n }\n else {\n this.i = new AsyncInflate(function (err, dat, final) {\n _this_1.ondata(err, dat, final);\n });\n this.terminate = this.i.terminate;\n }\n }\n AsyncUnzipInflate.prototype.push = function (data, final) {\n if (this.i.terminate)\n data = slc(data, 0);\n this.i.push(data, final);\n };\n AsyncUnzipInflate.compression = 8;\n return AsyncUnzipInflate;\n}());\nexport { AsyncUnzipInflate };\n/**\n * A ZIP archive decompression stream that emits files as they are discovered\n */\nvar Unzip = /*#__PURE__*/ (function () {\n /**\n * Creates a ZIP decompression stream\n * @param cb The callback to call whenever a file in the ZIP archive is found\n */\n function Unzip(cb) {\n this.onfile = cb;\n this.k = [];\n this.o = {\n 0: UnzipPassThrough\n };\n this.p = et;\n }\n /**\n * Pushes a chunk to be unzipped\n * @param chunk The chunk to push\n * @param final Whether this is the last chunk\n */\n Unzip.prototype.push = function (chunk, final) {\n var _this_1 = this;\n if (!this.onfile)\n throw 'no callback';\n if (!this.p)\n throw 'stream finished';\n if (this.c > 0) {\n var len = Math.min(this.c, chunk.length);\n var toAdd = chunk.subarray(0, len);\n this.c -= len;\n if (this.d)\n this.d.push(toAdd, !this.c);\n else\n this.k[0].push(toAdd);\n chunk = chunk.subarray(len);\n if (chunk.length)\n return this.push(chunk, final);\n }\n else {\n var f = 0, i = 0, is = void 0, buf = void 0;\n if (!this.p.length)\n buf = chunk;\n else if (!chunk.length)\n buf = this.p;\n else {\n buf = new u8(this.p.length + chunk.length);\n buf.set(this.p), buf.set(chunk, this.p.length);\n }\n var l = buf.length, oc = this.c, add = oc && this.d;\n var _loop_2 = function () {\n var _a;\n var sig = b4(buf, i);\n if (sig == 0x4034B50) {\n f = 1, is = i;\n this_1.d = null;\n this_1.c = 0;\n var bf = b2(buf, i + 6), cmp_1 = b2(buf, i + 8), u = bf & 2048, dd = bf & 8, fnl = b2(buf, i + 26), es = b2(buf, i + 28);\n if (l > i + 30 + fnl + es) {\n var chks_2 = [];\n this_1.k.unshift(chks_2);\n f = 2;\n var sc_1 = b4(buf, i + 18), su_1 = b4(buf, i + 22);\n var fn_1 = strFromU8(buf.subarray(i + 30, i += 30 + fnl), !u);\n if (sc_1 == 4294967295) {\n _a = dd ? [-2] : z64e(buf, i), sc_1 = _a[0], su_1 = _a[1];\n }\n else if (dd)\n sc_1 = -1;\n i += es;\n this_1.c = sc_1;\n var d_1;\n var file_1 = {\n name: fn_1,\n compression: cmp_1,\n start: function () {\n if (!file_1.ondata)\n throw 'no callback';\n if (!sc_1)\n file_1.ondata(null, et, true);\n else {\n var ctr = _this_1.o[cmp_1];\n if (!ctr)\n throw 'unknown compression type ' + cmp_1;\n d_1 = sc_1 < 0 ? new ctr(fn_1) : new ctr(fn_1, sc_1, su_1);\n d_1.ondata = function (err, dat, final) { file_1.ondata(err, dat, final); };\n for (var _i = 0, chks_3 = chks_2; _i < chks_3.length; _i++) {\n var dat = chks_3[_i];\n d_1.push(dat, false);\n }\n if (_this_1.k[0] == chks_2 && _this_1.c)\n _this_1.d = d_1;\n else\n d_1.push(et, true);\n }\n },\n terminate: function () {\n if (d_1 && d_1.terminate)\n d_1.terminate();\n }\n };\n if (sc_1 >= 0)\n file_1.size = sc_1, file_1.originalSize = su_1;\n this_1.onfile(file_1);\n }\n return \"break\";\n }\n else if (oc) {\n if (sig == 0x8074B50) {\n is = i += 12 + (oc == -2 && 8), f = 3, this_1.c = 0;\n return \"break\";\n }\n else if (sig == 0x2014B50) {\n is = i -= 4, f = 3, this_1.c = 0;\n return \"break\";\n }\n }\n };\n var this_1 = this;\n for (; i < l - 4; ++i) {\n var state_1 = _loop_2();\n if (state_1 === \"break\")\n break;\n }\n this.p = et;\n if (oc < 0) {\n var dat = f ? buf.subarray(0, is - 12 - (oc == -2 && 8) - (b4(buf, is - 16) == 0x8074B50 && 4)) : buf.subarray(0, i);\n if (add)\n add.push(dat, !!f);\n else\n this.k[+(f == 2)].push(dat);\n }\n if (f & 2)\n return this.push(buf.subarray(i), final);\n this.p = buf.subarray(i);\n }\n if (final) {\n if (this.c)\n throw 'invalid zip file';\n this.p = null;\n }\n };\n /**\n * Registers a decoder with the stream, allowing for files compressed with\n * the compression type provided to be expanded correctly\n * @param decoder The decoder constructor\n */\n Unzip.prototype.register = function (decoder) {\n this.o[decoder.compression] = decoder;\n };\n return Unzip;\n}());\nexport { Unzip };\n/**\n * Asynchronously decompresses a ZIP archive\n * @param data The raw compressed ZIP file\n * @param cb The callback to call with the decompressed files\n * @returns A function that can be used to immediately terminate the unzipping\n */\nexport function unzip(data, cb) {\n if (typeof cb != 'function')\n throw 'no callback';\n var term = [];\n var tAll = function () {\n for (var i = 0; i < term.length; ++i)\n term[i]();\n };\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558) {\n cb('invalid zip file', null);\n return;\n }\n }\n ;\n var lft = b2(data, e + 8);\n if (!lft)\n cb(null, {});\n var c = lft;\n var o = b4(data, e + 16);\n var z = o == 4294967295;\n if (z) {\n e = b4(data, e - 12);\n if (b4(data, e) != 0x6064B50) {\n cb('invalid zip file', null);\n return;\n }\n c = lft = b4(data, e + 32);\n o = b4(data, e + 48);\n }\n var _loop_3 = function (i) {\n var _a = zh(data, o, z), c_1 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n var cbl = function (e, d) {\n if (e) {\n tAll();\n cb(e, null);\n }\n else {\n files[fn] = d;\n if (!--lft)\n cb(null, files);\n }\n };\n if (!c_1)\n cbl(null, slc(data, b, b + sc));\n else if (c_1 == 8) {\n var infl = data.subarray(b, b + sc);\n if (sc < 320000) {\n try {\n cbl(null, inflateSync(infl, new u8(su)));\n }\n catch (e) {\n cbl(e, null);\n }\n }\n else\n term.push(inflate(infl, { size: su }, cbl));\n }\n else\n cbl('unknown compression type ' + c_1, null);\n };\n for (var i = 0; i < c; ++i) {\n _loop_3(i);\n }\n return tAll;\n}\n/**\n * Synchronously decompresses a ZIP archive. Prefer using `unzip` for better\n * performance with more than one file.\n * @param data The raw compressed ZIP file\n * @returns The decompressed files\n */\nexport function unzipSync(data) {\n var files = {};\n var e = data.length - 22;\n for (; b4(data, e) != 0x6054B50; --e) {\n if (!e || data.length - e > 65558)\n throw 'invalid zip file';\n }\n ;\n var c = b2(data, e + 8);\n if (!c)\n return {};\n var o = b4(data, e + 16);\n var z = o == 4294967295;\n if (z) {\n e = b4(data, e - 12);\n if (b4(data, e) != 0x6064B50)\n throw 'invalid zip file';\n c = b4(data, e + 32);\n o = b4(data, e + 48);\n }\n for (var i = 0; i < c; ++i) {\n var _a = zh(data, o, z), c_2 = _a[0], sc = _a[1], su = _a[2], fn = _a[3], no = _a[4], off = _a[5], b = slzh(data, off);\n o = no;\n if (!c_2)\n files[fn] = slc(data, b, b + sc);\n else if (c_2 == 8)\n files[fn] = inflateSync(data.subarray(b, b + sc), new u8(su));\n else\n throw 'unknown compression type ' + c_2;\n }\n return files;\n}\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { strToU8, zipSync } from \"fflate\";\nimport { Mesh, MeshPhysicalMaterial } from \"three\";\nclass USDZExporter {\n constructor() {\n __publicField(this, \"PRECISION\", 7);\n __publicField(this, \"materials\");\n __publicField(this, \"textures\");\n __publicField(this, \"files\");\n this.materials = {};\n this.textures = {};\n this.files = {};\n }\n async parse(scene) {\n const modelFileName = \"model.usda\";\n this.files[modelFileName] = null;\n let output = this.buildHeader();\n scene.traverseVisible((object) => {\n if (object instanceof Mesh && object.isMesh && object.material.isMeshStandardMaterial) {\n const geometry = object.geometry;\n const material = object.material;\n const geometryFileName = \"geometries/Geometry_\" + geometry.id + \".usd\";\n if (!(geometryFileName in this.files)) {\n const meshObject = this.buildMeshObject(geometry);\n this.files[geometryFileName] = this.buildUSDFileAsString(meshObject);\n }\n if (!(material.uuid in this.materials)) {\n this.materials[material.uuid] = material;\n }\n output += this.buildXform(object, geometry, material);\n }\n });\n output += this.buildMaterials(this.materials);\n this.files[modelFileName] = strToU8(output);\n output = null;\n for (const id in this.textures) {\n const texture = this.textures[id];\n const color = id.split(\"_\")[1];\n const isRGBA = texture.format === 1023;\n const canvas = this.imageToCanvas(texture.image, color);\n const blob = await new Promise(\n (resolve) => canvas == null ? void 0 : canvas.toBlob(resolve, isRGBA ? \"image/png\" : \"image/jpeg\", 1)\n );\n if (blob) {\n this.files[`textures/Texture_${id}.${isRGBA ? \"png\" : \"jpg\"}`] = new Uint8Array(await blob.arrayBuffer());\n }\n }\n let offset = 0;\n for (const filename in this.files) {\n const file = this.files[filename];\n const headerSize = 34 + filename.length;\n offset += headerSize;\n const offsetMod64 = offset & 63;\n if (offsetMod64 !== 4 && file !== null && file instanceof Uint8Array) {\n const padLength = 64 - offsetMod64;\n const padding = new Uint8Array(padLength);\n this.files[filename] = [file, { extra: { 12345: padding } }];\n }\n if (file && typeof file.length === \"number\") {\n offset = file.length;\n }\n }\n return zipSync(this.files, { level: 0 });\n }\n imageToCanvas(image, color) {\n if (typeof HTMLImageElement !== \"undefined\" && image instanceof HTMLImageElement || typeof HTMLCanvasElement !== \"undefined\" && image instanceof HTMLCanvasElement || typeof OffscreenCanvas !== \"undefined\" && image instanceof OffscreenCanvas || typeof ImageBitmap !== \"undefined\" && image instanceof ImageBitmap) {\n const scale = 1024 / Math.max(image.width, image.height);\n const canvas = document.createElement(\"canvas\");\n canvas.width = image.width * Math.min(1, scale);\n canvas.height = image.height * Math.min(1, scale);\n const context = canvas.getContext(\"2d\");\n context == null ? void 0 : context.drawImage(image, 0, 0, canvas.width, canvas.height);\n if (color !== void 0) {\n const hex = parseInt(color, 16);\n const r = (hex >> 16 & 255) / 255;\n const g = (hex >> 8 & 255) / 255;\n const b = (hex & 255) / 255;\n const imagedata = context == null ? void 0 : context.getImageData(0, 0, canvas.width, canvas.height);\n if (imagedata) {\n const data = imagedata == null ? void 0 : imagedata.data;\n for (let i = 0; i < data.length; i += 4) {\n data[i + 0] = data[i + 0] * r;\n data[i + 1] = data[i + 1] * g;\n data[i + 2] = data[i + 2] * b;\n }\n context == null ? void 0 : context.putImageData(imagedata, 0, 0);\n }\n }\n return canvas;\n }\n }\n buildHeader() {\n return `#usda 1.0\n(\n customLayerData = {\n string creator = \"Three.js USDZExporter\"\n }\n metersPerUnit = 1\n upAxis = \"Y\"\n)\n`;\n }\n buildUSDFileAsString(dataToInsert) {\n let output = this.buildHeader();\n output += dataToInsert;\n return strToU8(output);\n }\n // Xform\n buildXform(object, geometry, material) {\n const name = \"Object_\" + object.id;\n const transform = this.buildMatrix(object.matrixWorld);\n if (object.matrixWorld.determinant() < 0) {\n console.warn(\"THREE.USDZExporter: USDZ does not support negative scales\", object);\n }\n return `def Xform \"${name}\" (\n prepend references = @./geometries/Geometry_${geometry.id}.usd@</Geometry>\n)\n{\n matrix4d xformOp:transform = ${transform}\n uniform token[] xformOpOrder = [\"xformOp:transform\"]\n rel material:binding = </Materials/Material_${material.id}>\n}\n`;\n }\n buildMatrix(matrix) {\n const array = matrix.elements;\n return `( ${this.buildMatrixRow(array, 0)}, ${this.buildMatrixRow(array, 4)}, ${this.buildMatrixRow(\n array,\n 8\n )}, ${this.buildMatrixRow(array, 12)} )`;\n }\n buildMatrixRow(array, offset) {\n return `(${array[offset + 0]}, ${array[offset + 1]}, ${array[offset + 2]}, ${array[offset + 3]})`;\n }\n // Mesh\n buildMeshObject(geometry) {\n const mesh = this.buildMesh(geometry);\n return `\ndef \"Geometry\"\n{\n ${mesh}\n}\n`;\n }\n buildMesh(geometry) {\n const name = \"Geometry\";\n const attributes = geometry.attributes;\n const count = attributes.position.count;\n return `\n def Mesh \"${name}\"\n {\n int[] faceVertexCounts = [${this.buildMeshVertexCount(geometry)}]\n int[] faceVertexIndices = [${this.buildMeshVertexIndices(geometry)}]\n normal3f[] normals = [${this.buildVector3Array(attributes.normal, count)}] (\n interpolation = \"vertex\"\n )\n point3f[] points = [${this.buildVector3Array(attributes.position, count)}]\n float2[] primvars:st = [${this.buildVector2Array(attributes.uv, count)}] (\n interpolation = \"vertex\"\n )\n uniform token subdivisionScheme = \"none\"\n }\n`;\n }\n buildMeshVertexCount(geometry) {\n const count = geometry.index !== null ? geometry.index.array.length : geometry.attributes.position.count;\n return Array(count / 3).fill(3).join(\", \");\n }\n buildMeshVertexIndices(geometry) {\n if (geometry.index !== null) {\n return geometry.index.array.join(\", \");\n }\n const array = [];\n const length = geometry.attributes.position.count;\n for (let i = 0; i < length; i++) {\n array.push(i);\n }\n return array.join(\", \");\n }\n buildVector3Array(attribute, count) {\n if (attribute === void 0) {\n console.warn(\"USDZExporter: Normals missing.\");\n return Array(count).fill(\"(0, 0, 0)\").join(\", \");\n }\n const array = [];\n const data = attribute.array;\n for (let i = 0; i < data.length; i += 3) {\n array.push(\n `(${data[i + 0].toPrecision(this.PRECISION)}, ${data[i + 1].toPrecision(this.PRECISION)}, ${data[i + 2].toPrecision(this.PRECISION)})`\n );\n }\n return array.join(\", \");\n }\n buildVector2Array(attribute, count) {\n if (attribute === void 0) {\n console.warn(\"USDZExporter: UVs missing.\");\n return Array(count).fill(\"(0, 0)\").join(\", \");\n }\n const array = [];\n const data = attribute.array;\n for (let i = 0; i < data.length; i += 2) {\n array.push(`(${data[i + 0].toPrecision(this.PRECISION)}, ${1 - data[i + 1].toPrecision(this.PRECISION)})`);\n }\n return array.join(\", \");\n }\n // Materials\n buildMaterials(materials) {\n const array = [];\n for (const uuid in materials) {\n const material = materials[uuid];\n array.push(this.buildMaterial(material));\n }\n return `def \"Materials\"\n{\n${array.join(\"\")}\n}\n`;\n }\n buildMaterial(material) {\n const pad = \" \";\n const inputs = [];\n const samplers = [];\n if (material.map !== null) {\n inputs.push(\n `${pad}color3f inputs:diffuseColor.connect = </Materials/Material_${material.id}/Texture_${material.map.id}_diffuse.outputs:rgb>`\n );\n if (material.transparent || material.alphaTest > 0) {\n inputs.push(`${pad}float inputs:opacity.connect = </Materials/Material_${material.id}/Texture_${material.map.id}_diffuse.outputs:a>`);\n }\n if (material.alphaTest > 0.01) {\n inputs.push(`${pad}float inputs:opacityThreshold = ${material.alphaTest}`);\n } else if (material.transparent || material.alphaTest > 0) {\n inputs.push(`${pad}float inputs:opacityThreshold = 0.01`);\n }\n samplers.push(this.buildTexture(material, material.map, \"diffuse\", material.color));\n } else {\n inputs.push(`${pad}color3f inputs:diffuseColor = ${this.buildColor(material.color)}`);\n }\n if (material.emissiveMap !== null) {\n inputs.push(\n `${pad}color3f inputs:emissiveColor.connect = </Materials/Material_${material.id}/Texture_${material.emissiveMap.id}_emissive.outputs:rgb>`\n );\n samplers.push(this.buildTexture(material, material.emissiveMap, \"emissive\"));\n } else if (material.emissive.getHex() > 0) {\n inputs.push(`${pad}color3f inputs:emissiveColor = ${this.buildColor(material.emissive)}`);\n }\n if (material.normalMap !== null) {\n inputs.push(\n `${pad}normal3f inputs:normal.connect = </Materials/Material_${material.id}/Texture_${material.normalMap.id}_normal.outputs:rgb>`\n );\n samplers.push(this.buildTexture(material, material.normalMap, \"normal\"));\n }\n if (material.aoMap !== null) {\n inputs.push(\n `${pad}float inputs:occlusion.connect = </Materials/Material_${material.id}/Texture_${material.aoMap.id}_occlusion.outputs:r>`\n );\n samplers.push(this.buildTexture(material, material.aoMap, \"occlusion\"));\n }\n if (material.roughnessMap !== null && material.roughness === 1) {\n inputs.push(\n `${pad}float inputs:roughness.connect = </Materials/Material_${material.id}/Texture_${material.roughnessMap.id}_roughness.outputs:g>`\n );\n samplers.push(this.buildTexture(material, material.roughnessMap, \"roughness\"));\n } else {\n inputs.push(`${pad}float inputs:roughness = ${material.roughness}`);\n }\n if (material.metalnessMap !== null && material.metalness === 1) {\n inputs.push(\n `${pad}float inputs:metallic.connect = </Materials/Material_${material.id}/Texture_${material.metalnessMap.id}_metallic.outputs:b>`\n );\n samplers.push(this.buildTexture(material, material.metalnessMap, \"metallic\"));\n } else {\n inputs.push(`${pad}float inputs:metallic = ${material.metalness}`);\n }\n inputs.push(`${pad}float inputs:opacity = ${material.opacity}`);\n if (material instanceof MeshPhysicalMaterial) {\n inputs.push(`${pad}float inputs:clearcoat = ${material.clearcoat}`);\n inputs.push(`${pad}float inputs:clearcoatRoughness = ${material.clearcoatRoughness}`);\n inputs.push(`${pad}float inputs:ior = ${material.ior}`);\n }\n return `\n def Material \"Material_${material.id}\"\n {\n def Shader \"PreviewSurface\"\n {\n uniform token info:id = \"UsdPreviewSurface\"\n${inputs.join(\"\\n\")}\n int inputs:useSpecularWorkflow = 0\n token outputs:surface\n }\n token outputs:surface.connect = </Materials/Material_${material.id}/PreviewSurface.outputs:surface>\n token inputs:frame:stPrimvarName = \"st\"\n def Shader \"uvReader_st\"\n {\n uniform token info:id = \"UsdPrimvarReader_float2\"\n token inputs:varname.connect = </Materials/Material_${material.id}.inputs:frame:stPrimvarName>\n float2 inputs:fallback = (0.0, 0.0)\n float2 outputs:result\n }\n${samplers.join(\"\\n\")}\n }\n`;\n }\n buildTexture(material, texture, mapType, color) {\n const id = texture.id + (color ? \"_\" + color.getHexString() : \"\");\n const isRGBA = texture.format === 1023;\n this.textures[id] = texture;\n return `\n def Shader \"Transform2d_${mapType}\" (\n sdrMetadata = {\n string role = \"math\"\n }\n )\n {\n uniform token info:id = \"UsdTransform2d\"\n float2 inputs:in.connect = </Materials/Material_${material.id}/uvReader_st.outputs:result>\n float2 inputs:scale = ${this.buildVector2(texture.repeat)}\n float2 inputs:translation = ${this.buildVector2(texture.offset)}\n float2 outputs:result\n }\n def Shader \"Texture_${texture.id}_${mapType}\"\n {\n uniform token info:id = \"UsdUVTexture\"\n asset inputs:file = @textures/Texture_${id}.${isRGBA ? \"png\" : \"jpg\"}@\n float2 inputs:st.connect = </Materials/Material_${material.id}/Transform2d_${mapType}.outputs:result>\n token inputs:wrapS = \"repeat\"\n token inputs:wrapT = \"repeat\"\n float outputs:r\n float outputs:g\n float outputs:b\n float3 outputs:rgb\n ${material.transparent || material.alphaTest > 0 ? \"float outputs:a\" : \"\"}\n }`;\n }\n buildColor(color) {\n return `(${color.r}, ${color.g}, ${color.b})`;\n }\n buildVector2(vector) {\n return `(${vector.x}, ${vector.y})`;\n }\n}\nexport {\n USDZExporter\n};\n//# sourceMappingURL=USDZExporter.js.map\n","import { Mesh, Vector3, Matrix3 } from \"three\";\nclass PLYExporter {\n parse(object, onDone, options) {\n if (onDone && typeof onDone === \"object\") {\n console.warn(\n 'THREE.PLYExporter: The options parameter is now the third argument to the \"parse\" function. See the documentation for the new API.'\n );\n options = onDone;\n onDone = void 0;\n }\n const defaultOptions = {\n binary: false,\n excludeAttributes: [],\n // normal, uv, color, index\n littleEndian: false\n };\n options = Object.assign(defaultOptions, options);\n const excludeAttributes = options.excludeAttributes;\n let includeNormals = false;\n let includeColors = false;\n let includeUVs = false;\n let vertexCount = 0;\n let faceCount = 0;\n object.traverse(function(child) {\n if (child instanceof Mesh && child.isMesh) {\n const mesh = child;\n const geometry = mesh.geometry;\n if (!geometry.isBufferGeometry) {\n throw new Error(\"THREE.PLYExporter: Geometry is not of type THREE.BufferGeometry.\");\n }\n const vertices = geometry.getAttribute(\"position\");\n const normals = geometry.getAttribute(\"normal\");\n const uvs = geometry.getAttribute(\"uv\");\n const colors = geometry.getAttribute(\"color\");\n const indices = geometry.getIndex();\n if (vertices === void 0) {\n return;\n }\n vertexCount += vertices.count;\n faceCount += indices ? indices.count / 3 : vertices.count / 3;\n if (normals !== void 0)\n includeNormals = true;\n if (uvs !== void 0)\n includeUVs = true;\n if (colors !== void 0)\n includeColors = true;\n }\n });\n const includeIndices = (excludeAttributes == null ? void 0 : excludeAttributes.indexOf(\"index\")) === -1;\n includeNormals = includeNormals && (excludeAttributes == null ? void 0 : excludeAttributes.indexOf(\"normal\")) === -1;\n includeColors = includeColors && (excludeAttributes == null ? void 0 : excludeAttributes.indexOf(\"color\")) === -1;\n includeUVs = includeUVs && (excludeAttributes == null ? void 0 : excludeAttributes.indexOf(\"uv\")) === -1;\n if (includeIndices && faceCount !== Math.floor(faceCount)) {\n console.error(\n \"PLYExporter: Failed to generate a valid PLY file with triangle indices because the number of indices is not divisible by 3.\"\n );\n return null;\n }\n const indexByteCount = 4;\n let header = `ply\nformat ${options.binary ? options.littleEndian ? \"binary_little_endian\" : \"binary_big_endian\" : \"ascii\"} 1.0\nelement vertex ${vertexCount}\nproperty float x\nproperty float y\nproperty float z\n`;\n if (includeNormals) {\n header += \"property float nx\\nproperty float ny\\nproperty float nz\\n\";\n }\n if (includeUVs) {\n header += \"property float s\\nproperty float t\\n\";\n }\n if (includeColors) {\n header += \"property uchar red\\nproperty uchar green\\nproperty uchar blue\\n\";\n }\n if (includeIndices) {\n header += `${`element face ${faceCount}\n`}property list uchar int vertex_index\n`;\n }\n header += \"end_header\\n\";\n const vertex = new Vector3();\n const normalMatrixWorld = new Matrix3();\n let result = null;\n if (options.binary) {\n const headerBin = new TextEncoder().encode(header);\n const vertexListLength = vertexCount * (4 * 3 + (includeNormals ? 4 * 3 : 0) + (includeColors ? 3 : 0) + (includeUVs ? 4 * 2 : 0));\n const faceListLength = includeIndices ? faceCount * (indexByteCount * 3 + 1) : 0;\n const output = new DataView(new ArrayBuffer(headerBin.length + vertexListLength + faceListLength));\n new Uint8Array(output.buffer).set(headerBin, 0);\n let vOffset = headerBin.length;\n let fOffset = headerBin.length + vertexListLength;\n let writtenVertices = 0;\n this.traverseMeshes(object, function(mesh, geometry) {\n const vertices = geometry.getAttribute(\"position\");\n const normals = geometry.getAttribute(\"normal\");\n const uvs = geometry.getAttribute(\"uv\");\n const colors = geometry.getAttribute(\"color\");\n const indices = geometry.getIndex();\n normalMatrixWorld.getNormalMatrix(mesh.matrixWorld);\n for (let i = 0, l = vertices.count; i < l; i++) {\n vertex.x = vertices.getX(i);\n vertex.y = vertices.getY(i);\n vertex.z = vertices.getZ(i);\n vertex.applyMatrix4(mesh.matrixWorld);\n output.setFloat32(vOffset, vertex.x, options.littleEndian);\n vOffset += 4;\n output.setFloat32(vOffset, vertex.y, options.littleEndian);\n vOffset += 4;\n output.setFloat32(vOffset, vertex.z, options.littleEndian);\n vOffset += 4;\n if (includeNormals) {\n if (normals != null) {\n vertex.x = normals.getX(i);\n vertex.y = normals.getY(i);\n vertex.z = normals.getZ(i);\n vertex.applyMatrix3(normalMatrixWorld).normalize();\n output.setFloat32(vOffset, vertex.x, options.littleEndian);\n vOffset += 4;\n output.setFloat32(vOffset, vertex.y, options.littleEndian);\n vOffset += 4;\n output.setFloat32(vOffset, vertex.z, options.littleEndian);\n vOffset += 4;\n } else {\n output.setFloat32(vOffset, 0, options.littleEndian);\n vOffset += 4;\n output.setFloat32(vOffset, 0, options.littleEndian);\n vOffset += 4;\n output.setFloat32(vOffset, 0, options.littleEndian);\n vOffset += 4;\n }\n }\n if (includeUVs) {\n if (uvs != null) {\n output.setFloat32(vOffset, uvs.getX(i), options.littleEndian);\n vOffset += 4;\n output.setFloat32(vOffset, uvs.getY(i), options.littleEndian);\n vOffset += 4;\n } else if (!includeUVs) {\n output.setFloat32(vOffset, 0, options.littleEndian);\n vOffset += 4;\n output.setFloat32(vOffset, 0, options.littleEndian);\n vOffset += 4;\n }\n }\n if (includeColors) {\n if (colors != null) {\n output.setUint8(vOffset, Math.floor(colors.getX(i) * 255));\n vOffset += 1;\n output.setUint8(vOffset, Math.floor(colors.getY(i) * 255));\n vOffset += 1;\n output.setUint8(vOffset, Math.floor(colors.getZ(i) * 255));\n vOffset += 1;\n } else {\n output.setUint8(vOffset, 255);\n vOffset += 1;\n output.setUint8(vOffset, 255);\n vOffset += 1;\n output.setUint8(vOffset, 255);\n vOffset += 1;\n }\n }\n }\n if (includeIndices) {\n if (indices !== null) {\n for (let i = 0, l = indices.count; i < l; i += 3) {\n output.setUint8(fOffset, 3);\n fOffset += 1;\n output.setUint32(fOffset, indices.getX(i + 0) + writtenVertices, options.littleEndian);\n fOffset += indexByteCount;\n output.setUint32(fOffset, indices.getX(i + 1) + writtenVertices, options.littleEndian);\n fOffset += indexByteCount;\n output.setUint32(fOffset, indices.getX(i + 2) + writtenVertices, options.littleEndian);\n fOffset += indexByteCount;\n }\n } else {\n for (let i = 0, l = vertices.count; i < l; i += 3) {\n output.setUint8(fOffset, 3);\n fOffset += 1;\n output.setUint32(fOffset, writtenVertices + i, options.littleEndian);\n fOffset += indexByteCount;\n output.setUint32(fOffset, writtenVertices + i + 1, options.littleEndian);\n fOffset += indexByteCount;\n output.setUint32(fOffset, writtenVertices + i + 2, options.littleEndian);\n fOffset += indexByteCount;\n }\n }\n }\n writtenVertices += vertices.count;\n });\n result = output.buffer;\n } else {\n let writtenVertices = 0;\n let vertexList = \"\";\n let faceList = \"\";\n this.traverseMeshes(object, function(mesh, geometry) {\n const vertices = geometry.getAttribute(\"position\");\n const normals = geometry.getAttribute(\"normal\");\n const uvs = geometry.getAttribute(\"uv\");\n const colors = geometry.getAttribute(\"color\");\n const indices = geometry.getIndex();\n normalMatrixWorld.getNormalMatrix(mesh.matrixWorld);\n for (let i = 0, l = vertices.count; i < l; i++) {\n vertex.x = vertices.getX(i);\n vertex.y = vertices.getY(i);\n vertex.z = vertices.getZ(i);\n vertex.applyMatrix4(mesh.matrixWorld);\n let line = vertex.x + \" \" + vertex.y + \" \" + vertex.z;\n if (includeNormals) {\n if (normals != null) {\n vertex.x = normals.getX(i);\n vertex.y = normals.getY(i);\n vertex.z = normals.getZ(i);\n vertex.applyMatrix3(normalMatrixWorld).normalize();\n line += \" \" + vertex.x + \" \" + vertex.y + \" \" + vertex.z;\n } else {\n line += \" 0 0 0\";\n }\n }\n if (includeUVs) {\n if (uvs != null) {\n line += \" \" + uvs.getX(i) + \" \" + uvs.getY(i);\n } else if (includeUVs) {\n line += \" 0 0\";\n }\n }\n if (includeColors) {\n if (colors != null) {\n line += \" \" + Math.floor(colors.getX(i) * 255) + \" \" + Math.floor(colors.getY(i) * 255) + \" \" + Math.floor(colors.getZ(i) * 255);\n } else {\n line += \" 255 255 255\";\n }\n }\n vertexList += line + \"\\n\";\n }\n if (includeIndices) {\n if (indices !== null) {\n for (let i = 0, l = indices.count; i < l; i += 3) {\n faceList += `3 ${indices.getX(i + 0) + writtenVertices}`;\n faceList += ` ${indices.getX(i + 1) + writtenVertices}`;\n faceList += ` ${indices.getX(i + 2) + writtenVertices}\n`;\n }\n } else {\n for (let i = 0, l = vertices.count; i < l; i += 3) {\n faceList += `3 ${writtenVertices + i} ${writtenVertices + i + 1} ${writtenVertices + i + 2}\n`;\n }\n }\n faceCount += indices ? indices.count / 3 : vertices.count / 3;\n }\n writtenVertices += vertices.count;\n });\n result = `${header}${vertexList}${includeIndices ? `${faceList}\n` : \"\\n\"}`;\n }\n if (typeof onDone === \"function\") {\n requestAnimationFrame(() => onDone && onDone(typeof result === \"string\" ? result : \"\"));\n }\n return result;\n }\n // Iterate over the valid meshes in the object\n traverseMeshes(object, cb) {\n object.traverse(function(child) {\n if (child instanceof Mesh && child.isMesh) {\n const mesh = child;\n const geometry = mesh.geometry;\n if (!geometry.isBufferGeometry) {\n throw new Error(\"THREE.PLYExporter: Geometry is not of type THREE.BufferGeometry.\");\n }\n if (geometry.hasAttribute(\"position\")) {\n cb(mesh, geometry);\n }\n }\n });\n }\n}\nexport {\n PLYExporter\n};\n//# sourceMappingURL=PLYExporter.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { BufferGeometry, Mesh, Points } from \"three\";\nconst DRACOExporter = /* @__PURE__ */ (() => {\n const _DRACOExporter = class {\n parse(object, options = {\n decodeSpeed: 5,\n encodeSpeed: 5,\n encoderMethod: _DRACOExporter.MESH_EDGEBREAKER_ENCODING,\n quantization: [16, 8, 8, 8, 8],\n exportUvs: true,\n exportNormals: true,\n exportColor: false\n }) {\n if (object instanceof BufferGeometry && object.isBufferGeometry) {\n throw new Error(\"DRACOExporter: The first parameter of parse() is now an instance of Mesh or Points.\");\n }\n if (DracoEncoderModule === void 0) {\n throw new Error(\"THREE.DRACOExporter: required the draco_encoder to work.\");\n }\n const geometry = object.geometry;\n const dracoEncoder = DracoEncoderModule();\n const encoder = new dracoEncoder.Encoder();\n let builder;\n let dracoObject;\n if (!geometry.isBufferGeometry) {\n throw new Error(\n \"THREE.DRACOExporter.parse(geometry, options): geometry is not a THREE.BufferGeometry instance.\"\n );\n }\n if (object instanceof Mesh && object.isMesh) {\n builder = new dracoEncoder.MeshBuilder();\n dracoObject = new dracoEncoder.Mesh();\n const vertices = geometry.getAttribute(\"position\");\n builder.AddFloatAttributeToMesh(\n dracoObject,\n dracoEncoder.POSITION,\n vertices.count,\n vertices.itemSize,\n vertices.array\n );\n const faces = geometry.getIndex();\n if (faces !== null) {\n builder.AddFacesToMesh(dracoObject, faces.count / 3, faces.array);\n } else {\n const faces2 = new (vertices.count > 65535 ? Uint32Array : Uint16Array)(vertices.count);\n for (let i = 0; i < faces2.length; i++) {\n faces2[i] = i;\n }\n builder.AddFacesToMesh(dracoObject, vertices.count, faces2);\n }\n if (options.exportNormals) {\n const normals = geometry.getAttribute(\"normal\");\n if (normals !== void 0) {\n builder.AddFloatAttributeToMesh(\n dracoObject,\n dracoEncoder.NORMAL,\n normals.count,\n normals.itemSize,\n normals.array\n );\n }\n }\n if (options.exportUvs) {\n const uvs = geometry.getAttribute(\"uv\");\n if (uvs !== void 0) {\n builder.AddFloatAttributeToMesh(dracoObject, dracoEncoder.TEX_COORD, uvs.count, uvs.itemSize, uvs.array);\n }\n }\n if (options.exportColor) {\n const colors = geometry.getAttribute(\"color\");\n if (colors !== void 0) {\n builder.AddFloatAttributeToMesh(\n dracoObject,\n dracoEncoder.COLOR,\n colors.count,\n colors.itemSize,\n colors.array\n );\n }\n }\n } else if (object instanceof Points && object.isPoints) {\n builder = new dracoEncoder.PointCloudBuilder();\n dracoObject = new dracoEncoder.PointCloud();\n const vertices = geometry.getAttribute(\"position\");\n builder.AddFloatAttribute(dracoObject, dracoEncoder.POSITION, vertices.count, vertices.itemSize, vertices.array);\n if (options.exportColor) {\n const colors = geometry.getAttribute(\"color\");\n if (colors !== void 0) {\n builder.AddFloatAttribute(dracoObject, dracoEncoder.COLOR, colors.count, colors.itemSize, colors.array);\n }\n }\n } else {\n throw new Error(\"DRACOExporter: Unsupported object type.\");\n }\n const encodedData = new dracoEncoder.DracoInt8Array();\n const encodeSpeed = options.encodeSpeed !== void 0 ? options.encodeSpeed : 5;\n const decodeSpeed = options.decodeSpeed !== void 0 ? options.decodeSpeed : 5;\n encoder.SetSpeedOptions(encodeSpeed, decodeSpeed);\n if (options.encoderMethod !== void 0) {\n encoder.SetEncodingMethod(options.encoderMethod);\n }\n if (options.quantization !== void 0) {\n for (let i = 0; i < 5; i++) {\n if (options.quantization[i] !== void 0) {\n encoder.SetAttributeQuantization(i, options.quantization[i]);\n }\n }\n }\n let length;\n if (object instanceof Mesh && object.isMesh) {\n length = encoder.EncodeMeshToDracoBuffer(dracoObject, encodedData);\n } else {\n length = encoder.EncodePointCloudToDracoBuffer(dracoObject, true, encodedData);\n }\n dracoEncoder.destroy(dracoObject);\n if (length === 0) {\n throw new Error(\"THREE.DRACOExporter: Draco encoding failed.\");\n }\n const outputData = new Int8Array(new ArrayBuffer(length));\n for (let i = 0; i < length; i++) {\n outputData[i] = encodedData.GetValue(i);\n }\n dracoEncoder.destroy(encodedData);\n dracoEncoder.destroy(encoder);\n dracoEncoder.destroy(builder);\n return outputData;\n }\n };\n let DRACOExporter2 = _DRACOExporter;\n // Encoder methods\n __publicField(DRACOExporter2, \"MESH_EDGEBREAKER_ENCODING\", 1);\n __publicField(DRACOExporter2, \"MESH_SEQUENTIAL_ENCODING\", 0);\n // Geometry type\n __publicField(DRACOExporter2, \"POINT_CLOUD\", 0);\n __publicField(DRACOExporter2, \"TRIANGULAR_MESH\", 1);\n // Attribute type\n __publicField(DRACOExporter2, \"INVALID\", -1);\n __publicField(DRACOExporter2, \"POSITION\", 0);\n __publicField(DRACOExporter2, \"NORMAL\", 1);\n __publicField(DRACOExporter2, \"COLOR\", 2);\n __publicField(DRACOExporter2, \"TEX_COORD\", 3);\n __publicField(DRACOExporter2, \"GENERIC\", 4);\n return DRACOExporter2;\n})();\nexport {\n DRACOExporter\n};\n//# sourceMappingURL=DRACOExporter.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { InterleavedBufferAttribute, Matrix4, MeshLambertMaterial, MeshBasicMaterial, MeshPhongMaterial, Color, DoubleSide, Mesh } from \"three\";\nimport { UV1 } from \"../_polyfill/uv1.js\";\nclass ColladaExporter {\n constructor() {\n __publicField(this, \"options\");\n __publicField(this, \"geometryInfo\");\n __publicField(this, \"materialMap\");\n __publicField(this, \"imageMap\");\n __publicField(this, \"textures\");\n __publicField(this, \"libraryImages\");\n __publicField(this, \"libraryGeometries\");\n __publicField(this, \"libraryEffects\");\n __publicField(this, \"libraryMaterials\");\n __publicField(this, \"canvas\");\n __publicField(this, \"ctx\");\n __publicField(this, \"transMat\");\n __publicField(this, \"getFuncs\", [\"getX\", \"getY\", \"getZ\", \"getW\"]);\n this.options = {\n version: \"1.4.1\",\n author: null,\n textureDirectory: \"\",\n upAxis: \"Y_UP\",\n unitName: null,\n unitMeter: null\n };\n this.geometryInfo = /* @__PURE__ */ new WeakMap();\n this.materialMap = /* @__PURE__ */ new WeakMap();\n this.imageMap = /* @__PURE__ */ new WeakMap();\n this.textures = [];\n this.libraryImages = [];\n this.libraryGeometries = [];\n this.libraryEffects = [];\n this.libraryMaterials = [];\n this.canvas = null;\n this.ctx = null;\n this.transMat = null;\n }\n parse(object, onDone, options = {}) {\n this.options = { ...this.options, ...options };\n if (this.options.upAxis.match(/^[XYZ]_UP$/) === null) {\n console.error(\"ColladaExporter: Invalid upAxis: valid values are X_UP, Y_UP or Z_UP.\");\n return null;\n }\n if (this.options.unitName !== null && this.options.unitMeter === null) {\n console.error(\"ColladaExporter: unitMeter needs to be specified if unitName is specified.\");\n return null;\n }\n if (this.options.unitMeter !== null && this.options.unitName === null) {\n console.error(\"ColladaExporter: unitName needs to be specified if unitMeter is specified.\");\n return null;\n }\n if (this.options.textureDirectory !== \"\") {\n this.options.textureDirectory = `${this.options.textureDirectory}/`.replace(/\\\\/g, \"/\").replace(/\\/+/g, \"/\");\n }\n if (this.options.version !== \"1.4.1\" && this.options.version !== \"1.5.0\") {\n console.warn(`ColladaExporter : Version ${this.options.version} not supported for export. Only 1.4.1 and 1.5.0.`);\n return null;\n }\n const libraryVisualScenes = this.processObject(object);\n const specLink = this.options.version === \"1.4.1\" ? \"http://www.collada.org/2005/11/COLLADASchema\" : \"https://www.khronos.org/collada/\";\n let dae = `<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\" ?>${`<COLLADA xmlns=\"${specLink}\" version=\"${this.options.version}\">`}<asset><contributor><authoring_tool>three.js Collada Exporter</authoring_tool>${this.options.author !== null ? `<author>${this.options.author}</author>` : \"\"}</contributor>${`<created>${(/* @__PURE__ */ new Date()).toISOString()}</created>`}${`<modified>${(/* @__PURE__ */ new Date()).toISOString()}</modified>`}<up_axis>Y_UP</up_axis></asset>`;\n dae += `<library_images>${this.libraryImages.join(\"\")}</library_images>`;\n dae += `<library_effects>${this.libraryEffects.join(\"\")}</library_effects>`;\n dae += `<library_materials>${this.libraryMaterials.join(\"\")}</library_materials>`;\n dae += `<library_geometries>${this.libraryGeometries.join(\"\")}</library_geometries>`;\n dae += `<library_visual_scenes><visual_scene id=\"Scene\" name=\"scene\">${libraryVisualScenes}</visual_scene></library_visual_scenes>`;\n dae += '<scene><instance_visual_scene url=\"#Scene\"/></scene>';\n dae += \"</COLLADA>\";\n const res = {\n data: this.format(dae),\n textures: this.textures\n };\n if (typeof onDone === \"function\") {\n requestAnimationFrame(() => onDone(res));\n }\n return res;\n }\n // Convert the urdf xml into a well-formatted, indented format\n format(urdf) {\n var _a, _b;\n const IS_END_TAG = /^<\\//;\n const IS_SELF_CLOSING = /(\\?>$)|(\\/>$)/;\n const HAS_TEXT = /<[^>]+>[^<]*<\\/[^<]+>/;\n const pad = (ch, num) => num > 0 ? ch + pad(ch, num - 1) : \"\";\n let tagnum = 0;\n return (_b = (_a = urdf.match(/(<[^>]+>[^<]+<\\/[^<]+>)|(<[^>]+>)/g)) == null ? void 0 : _a.map((tag) => {\n if (!HAS_TEXT.test(tag) && !IS_SELF_CLOSING.test(tag) && IS_END_TAG.test(tag)) {\n tagnum--;\n }\n const res = `${pad(\" \", tagnum)}${tag}`;\n if (!HAS_TEXT.test(tag) && !IS_SELF_CLOSING.test(tag) && !IS_END_TAG.test(tag)) {\n tagnum++;\n }\n return res;\n }).join(\"\\n\")) != null ? _b : \"\";\n }\n // Convert an image into a png format for saving\n base64ToBuffer(str) {\n const b = atob(str);\n const buf = new Uint8Array(b.length);\n for (let i = 0, l = buf.length; i < l; i++) {\n buf[i] = b.charCodeAt(i);\n }\n return buf;\n }\n imageToData(image, ext) {\n var _a;\n this.canvas = this.canvas || document.createElement(\"canvas\");\n this.ctx = this.ctx || this.canvas.getContext(\"2d\");\n this.canvas.width = image.width instanceof SVGAnimatedLength ? 0 : image.width;\n this.canvas.height = image.height instanceof SVGAnimatedLength ? 0 : image.height;\n (_a = this.ctx) == null ? void 0 : _a.drawImage(image, 0, 0);\n const base64data = this.canvas.toDataURL(`image/${ext}`, 1).replace(/^data:image\\/(png|jpg);base64,/, \"\");\n return this.base64ToBuffer(base64data);\n }\n // gets the attribute array. Generate a new array if the attribute is interleaved\n attrBufferToArray(attr) {\n if (attr instanceof InterleavedBufferAttribute && attr.isInterleavedBufferAttribute) {\n const TypedArrayConstructor = attr.array.constructor;\n const arr = new TypedArrayConstructor(attr.count * attr.itemSize);\n const size = attr.itemSize;\n for (let i = 0, l = attr.count; i < l; i++) {\n for (let j = 0; j < size; j++) {\n arr[i * size + j] = attr[this.getFuncs[j]](i);\n }\n }\n return arr;\n } else {\n return attr.array;\n }\n }\n // Returns an array of the same type starting at the `st` index,\n // and `ct` length\n subArray(arr, st, ct) {\n if (Array.isArray(arr)) {\n return arr.slice(st, st + ct);\n } else {\n const TypedArrayConstructor = arr.constructor;\n return new TypedArrayConstructor(arr.buffer, st * arr.BYTES_PER_ELEMENT, ct);\n }\n }\n // Returns the string for a geometry's attribute\n getAttribute(attr, name, params, type) {\n const array = this.attrBufferToArray(attr);\n const res = Array.isArray(array) ? `${`<source id=\"${name}\"><float_array id=\"${name}-array\" count=\"${array.length}\">` + array.join(\" \")}</float_array><technique_common>${`<accessor source=\"#${name}-array\" count=\"${Math.floor(\n array.length / attr.itemSize\n )}\" stride=\"${attr.itemSize}\">`}${params.map((n) => `<param name=\"${n}\" type=\"${type}\" />`).join(\"\")}</accessor></technique_common></source>` : \"\";\n return res;\n }\n // Returns the string for a node's transform information\n getTransform(o) {\n o.updateMatrix();\n this.transMat = this.transMat || new Matrix4();\n this.transMat.copy(o.matrix);\n this.transMat.transpose();\n return `<matrix>${this.transMat.toArray().join(\" \")}</matrix>`;\n }\n // Process the given piece of geometry into the geometry library\n // Returns the mesh id\n processGeometry(g) {\n let info = this.geometryInfo.get(g);\n if (!info) {\n const bufferGeometry = g;\n if (!bufferGeometry.isBufferGeometry) {\n throw new Error(\"THREE.ColladaExporter: Geometry is not of type THREE.BufferGeometry.\");\n }\n const meshid = `Mesh${this.libraryGeometries.length + 1}`;\n const indexCount = bufferGeometry.index ? bufferGeometry.index.count * bufferGeometry.index.itemSize : bufferGeometry.attributes.position.count;\n const groups = bufferGeometry.groups != null && bufferGeometry.groups.length !== 0 ? bufferGeometry.groups : [{ start: 0, count: indexCount, materialIndex: 0 }];\n const gname = g.name ? ` name=\"${g.name}\"` : \"\";\n let gnode = `<geometry id=\"${meshid}\"${gname}><mesh>`;\n const posName = `${meshid}-position`;\n const vertName = `${meshid}-vertices`;\n gnode += this.getAttribute(bufferGeometry.attributes.position, posName, [\"X\", \"Y\", \"Z\"], \"float\");\n gnode += `<vertices id=\"${vertName}\"><input semantic=\"POSITION\" source=\"#${posName}\" /></vertices>`;\n let triangleInputs = `<input semantic=\"VERTEX\" source=\"#${vertName}\" offset=\"0\" />`;\n if (\"normal\" in bufferGeometry.attributes) {\n const normName = `${meshid}-normal`;\n gnode += this.getAttribute(bufferGeometry.attributes.normal, normName, [\"X\", \"Y\", \"Z\"], \"float\");\n triangleInputs += `<input semantic=\"NORMAL\" source=\"#${normName}\" offset=\"0\" />`;\n }\n if (\"uv\" in bufferGeometry.attributes) {\n const uvName = `${meshid}-texcoord`;\n gnode += this.getAttribute(bufferGeometry.attributes.uv, uvName, [\"S\", \"T\"], \"float\");\n triangleInputs += `<input semantic=\"TEXCOORD\" source=\"#${uvName}\" offset=\"0\" set=\"0\" />`;\n }\n if (UV1 in bufferGeometry.attributes) {\n const uvName = `${meshid}-texcoord2`;\n gnode += this.getAttribute(bufferGeometry.attributes[UV1], uvName, [\"S\", \"T\"], \"float\");\n triangleInputs += `<input semantic=\"TEXCOORD\" source=\"#${uvName}\" offset=\"0\" set=\"1\" />`;\n }\n if (\"color\" in bufferGeometry.attributes) {\n const colName = `${meshid}-color`;\n gnode += this.getAttribute(bufferGeometry.attributes.color, colName, [\"X\", \"Y\", \"Z\"], \"uint8\");\n triangleInputs += `<input semantic=\"COLOR\" source=\"#${colName}\" offset=\"0\" />`;\n }\n let indexArray = null;\n if (bufferGeometry.index) {\n indexArray = this.attrBufferToArray(bufferGeometry.index);\n } else {\n indexArray = new Array(indexCount);\n for (let i = 0, l = indexArray.length; i < l && Array.isArray(indexArray); i++)\n indexArray[i] = i;\n }\n for (let i = 0, l = groups.length; i < l; i++) {\n const group = groups[i];\n const subarr = this.subArray(indexArray, group.start, group.count);\n const polycount = subarr.length / 3;\n gnode += `<triangles material=\"MESH_MATERIAL_${group.materialIndex}\" count=\"${polycount}\">`;\n gnode += triangleInputs;\n gnode += `<p>${subarr.join(\" \")}</p>`;\n gnode += \"</triangles>\";\n }\n gnode += \"</mesh></geometry>\";\n this.libraryGeometries.push(gnode);\n info = { meshid, bufferGeometry };\n this.geometryInfo.set(g, info);\n }\n return info;\n }\n // Process the given texture into the image library\n // Returns the image library\n processTexture(tex) {\n let texid = this.imageMap.get(tex);\n if (texid == null) {\n texid = `image-${this.libraryImages.length + 1}`;\n const ext = \"png\";\n const name = tex.name || texid;\n let imageNode = `<image id=\"${texid}\" name=\"${name}\">`;\n if (this.options.version === \"1.5.0\") {\n imageNode += `<init_from><ref>${this.options.textureDirectory}${name}.${ext}</ref></init_from>`;\n } else {\n imageNode += `<init_from>${this.options.textureDirectory}${name}.${ext}</init_from>`;\n }\n imageNode += \"</image>\";\n this.libraryImages.push(imageNode);\n this.imageMap.set(tex, texid);\n this.textures.push({\n directory: this.options.textureDirectory,\n name,\n ext,\n data: this.imageToData(tex.image, ext),\n original: tex\n });\n }\n return texid;\n }\n // Process the given material into the material and effect libraries\n // Returns the material id\n processMaterial(m) {\n let matid = this.materialMap.get(m);\n if (matid == null) {\n matid = `Mat${this.libraryEffects.length + 1}`;\n let type = \"phong\";\n if (m instanceof MeshLambertMaterial) {\n type = \"lambert\";\n } else if (m instanceof MeshBasicMaterial) {\n type = \"constant\";\n if (m.map !== null) {\n console.warn(\"ColladaExporter: Texture maps not supported with MeshBasicMaterial.\");\n }\n }\n if (m instanceof MeshPhongMaterial) {\n const emissive = m.emissive ? m.emissive : new Color(0, 0, 0);\n const diffuse = m.color ? m.color : new Color(0, 0, 0);\n const specular = m.specular ? m.specular : new Color(1, 1, 1);\n const shininess = m.shininess || 0;\n const reflectivity = m.reflectivity || 0;\n let transparencyNode = \"\";\n if (m.transparent) {\n transparencyNode += `<transparent>${m.map ? '<texture texture=\"diffuse-sampler\"></texture>' : \"<float>1</float>\"}</transparent>`;\n if (m.opacity < 1) {\n transparencyNode += `<transparency><float>${m.opacity}</float></transparency>`;\n }\n }\n const techniqueNode = `${`<technique sid=\"common\"><${type}>`}<emission>${m.emissiveMap ? '<texture texture=\"emissive-sampler\" texcoord=\"TEXCOORD\" />' : `<color sid=\"emission\">${emissive.r} ${emissive.g} ${emissive.b} 1</color>`}</emission>${type !== \"constant\" ? `<diffuse>${m.map ? '<texture texture=\"diffuse-sampler\" texcoord=\"TEXCOORD\" />' : `<color sid=\"diffuse\">${diffuse.r} ${diffuse.g} ${diffuse.b} 1</color>`}</diffuse>` : \"\"}${type !== \"constant\" ? `<bump>${m.normalMap ? '<texture texture=\"bump-sampler\" texcoord=\"TEXCOORD\" />' : \"\"}</bump>` : \"\"}${type === \"phong\" ? `${`<specular><color sid=\"specular\">${specular.r} ${specular.g} ${specular.b} 1</color></specular>`}<shininess>${m.specularMap ? '<texture texture=\"specular-sampler\" texcoord=\"TEXCOORD\" />' : `<float sid=\"shininess\">${shininess}</float>`}</shininess>` : \"\"}${`<reflective><color>${diffuse.r} ${diffuse.g} ${diffuse.b} 1</color></reflective>`}${`<reflectivity><float>${reflectivity}</float></reflectivity>`}${transparencyNode}${`</${type}></technique>`}`;\n const effectnode = `${`<effect id=\"${matid}-effect\">`}<profile_COMMON>${m.map ? `<newparam sid=\"diffuse-surface\"><surface type=\"2D\">${`<init_from>${this.processTexture(\n m.map\n )}</init_from>`}</surface></newparam><newparam sid=\"diffuse-sampler\"><sampler2D><source>diffuse-surface</source></sampler2D></newparam>` : \"\"}${m.specularMap ? `<newparam sid=\"specular-surface\"><surface type=\"2D\">${`<init_from>${this.processTexture(\n m.specularMap\n )}</init_from>`}</surface></newparam><newparam sid=\"specular-sampler\"><sampler2D><source>specular-surface</source></sampler2D></newparam>` : \"\"}${m.emissiveMap ? `<newparam sid=\"emissive-surface\"><surface type=\"2D\">${`<init_from>${this.processTexture(\n m.emissiveMap\n )}</init_from>`}</surface></newparam><newparam sid=\"emissive-sampler\"><sampler2D><source>emissive-surface</source></sampler2D></newparam>` : \"\"}${m.normalMap ? `<newparam sid=\"bump-surface\"><surface type=\"2D\">${`<init_from>${this.processTexture(\n m.normalMap\n )}</init_from>`}</surface></newparam><newparam sid=\"bump-sampler\"><sampler2D><source>bump-surface</source></sampler2D></newparam>` : \"\"}${techniqueNode}${m.side === DoubleSide ? '<extra><technique profile=\"THREEJS\"><double_sided sid=\"double_sided\" type=\"int\">1</double_sided></technique></extra>' : \"\"}</profile_COMMON></effect>`;\n const materialName = m.name ? ` name=\"${m.name}\"` : \"\";\n const materialNode = `<material id=\"${matid}\"${materialName}><instance_effect url=\"#${matid}-effect\" /></material>`;\n this.libraryMaterials.push(materialNode);\n this.libraryEffects.push(effectnode);\n this.materialMap.set(m, matid);\n }\n }\n return matid;\n }\n // Recursively process the object into a scene\n processObject(o) {\n let node = `<node name=\"${o.name}\">`;\n node += this.getTransform(o);\n const a = new Mesh();\n a.geometry;\n if (o instanceof Mesh && o.isMesh && o.geometry !== null) {\n const geomInfo = this.processGeometry(o.geometry);\n const meshid = geomInfo.meshid;\n const geometry = geomInfo.bufferGeometry;\n let matids = null;\n let matidsArray;\n const mat = o.material || new MeshBasicMaterial();\n const materials = Array.isArray(mat) ? mat : [mat];\n if (geometry.groups.length > materials.length) {\n matidsArray = new Array(geometry.groups.length);\n } else {\n matidsArray = new Array(materials.length);\n }\n matids = matidsArray.fill(null).map((_, i) => this.processMaterial(materials[i % materials.length]));\n node += `${`<instance_geometry url=\"#${meshid}\">` + (matids != null ? `<bind_material><technique_common>${matids.map(\n (id, i) => `${`<instance_material symbol=\"MESH_MATERIAL_${i}\" target=\"#${id}\" >`}<bind_vertex_input semantic=\"TEXCOORD\" input_semantic=\"TEXCOORD\" input_set=\"0\" /></instance_material>`\n ).join(\"\")}</technique_common></bind_material>` : \"\")}</instance_geometry>`;\n }\n o.children.forEach((c) => node += this.processObject(c));\n node += \"</node>\";\n return node;\n }\n}\nexport {\n ColladaExporter\n};\n//# sourceMappingURL=ColladaExporter.js.map\n","class CharsetEncoder {\n constructor() {\n this.s2uTable = {\n 0: 0,\n 1: 1,\n 2: 2,\n 3: 3,\n 4: 4,\n 5: 5,\n 6: 6,\n 7: 7,\n 8: 8,\n 9: 9,\n 10: 10,\n 11: 11,\n 12: 12,\n 13: 13,\n 14: 14,\n 15: 15,\n 16: 16,\n 17: 17,\n 18: 18,\n 19: 19,\n 20: 20,\n 21: 21,\n 22: 22,\n 23: 23,\n 24: 24,\n 25: 25,\n 26: 26,\n 27: 27,\n 28: 28,\n 29: 29,\n 30: 30,\n 31: 31,\n 32: 32,\n 33: 33,\n 34: 34,\n 35: 35,\n 36: 36,\n 37: 37,\n 38: 38,\n 39: 39,\n 40: 40,\n 41: 41,\n 42: 42,\n 43: 43,\n 44: 44,\n 45: 45,\n 46: 46,\n 47: 47,\n 48: 48,\n 49: 49,\n 50: 50,\n 51: 51,\n 52: 52,\n 53: 53,\n 54: 54,\n 55: 55,\n 56: 56,\n 57: 57,\n 58: 58,\n 59: 59,\n 60: 60,\n 61: 61,\n 62: 62,\n 63: 63,\n 64: 64,\n 65: 65,\n 66: 66,\n 67: 67,\n 68: 68,\n 69: 69,\n 70: 70,\n 71: 71,\n 72: 72,\n 73: 73,\n 74: 74,\n 75: 75,\n 76: 76,\n 77: 77,\n 78: 78,\n 79: 79,\n 80: 80,\n 81: 81,\n 82: 82,\n 83: 83,\n 84: 84,\n 85: 85,\n 86: 86,\n 87: 87,\n 88: 88,\n 89: 89,\n 90: 90,\n 91: 91,\n 92: 92,\n 93: 93,\n 94: 94,\n 95: 95,\n 96: 96,\n 97: 97,\n 98: 98,\n 99: 99,\n 100: 100,\n 101: 101,\n 102: 102,\n 103: 103,\n 104: 104,\n 105: 105,\n 106: 106,\n 107: 107,\n 108: 108,\n 109: 109,\n 110: 110,\n 111: 111,\n 112: 112,\n 113: 113,\n 114: 114,\n 115: 115,\n 116: 116,\n 117: 117,\n 118: 118,\n 119: 119,\n 120: 120,\n 121: 121,\n 122: 122,\n 123: 123,\n 124: 124,\n 125: 125,\n 126: 126,\n 161: 65377,\n 162: 65378,\n 163: 65379,\n 164: 65380,\n 165: 65381,\n 166: 65382,\n 167: 65383,\n 168: 65384,\n 169: 65385,\n 170: 65386,\n 171: 65387,\n 172: 65388,\n 173: 65389,\n 174: 65390,\n 175: 65391,\n 176: 65392,\n 177: 65393,\n 178: 65394,\n 179: 65395,\n 180: 65396,\n 181: 65397,\n 182: 65398,\n 183: 65399,\n 184: 65400,\n 185: 65401,\n 186: 65402,\n 187: 65403,\n 188: 65404,\n 189: 65405,\n 190: 65406,\n 191: 65407,\n 192: 65408,\n 193: 65409,\n 194: 65410,\n 195: 65411,\n 196: 65412,\n 197: 65413,\n 198: 65414,\n 199: 65415,\n 200: 65416,\n 201: 65417,\n 202: 65418,\n 203: 65419,\n 204: 65420,\n 205: 65421,\n 206: 65422,\n 207: 65423,\n 208: 65424,\n 209: 65425,\n 210: 65426,\n 211: 65427,\n 212: 65428,\n 213: 65429,\n 214: 65430,\n 215: 65431,\n 216: 65432,\n 217: 65433,\n 218: 65434,\n 219: 65435,\n 220: 65436,\n 221: 65437,\n 222: 65438,\n 223: 65439,\n 33088: 12288,\n 33089: 12289,\n 33090: 12290,\n 33091: 65292,\n 33092: 65294,\n 33093: 12539,\n 33094: 65306,\n 33095: 65307,\n 33096: 65311,\n 33097: 65281,\n 33098: 12443,\n 33099: 12444,\n 33100: 180,\n 33101: 65344,\n 33102: 168,\n 33103: 65342,\n 33104: 65507,\n 33105: 65343,\n 33106: 12541,\n 33107: 12542,\n 33108: 12445,\n 33109: 12446,\n 33110: 12291,\n 33111: 20189,\n 33112: 12293,\n 33113: 12294,\n 33114: 12295,\n 33115: 12540,\n 33116: 8213,\n 33117: 8208,\n 33118: 65295,\n 33119: 65340,\n 33120: 65374,\n 33121: 8741,\n 33122: 65372,\n 33123: 8230,\n 33124: 8229,\n 33125: 8216,\n 33126: 8217,\n 33127: 8220,\n 33128: 8221,\n 33129: 65288,\n 33130: 65289,\n 33131: 12308,\n 33132: 12309,\n 33133: 65339,\n 33134: 65341,\n 33135: 65371,\n 33136: 65373,\n 33137: 12296,\n 33138: 12297,\n 33139: 12298,\n 33140: 12299,\n 33141: 12300,\n 33142: 12301,\n 33143: 12302,\n 33144: 12303,\n 33145: 12304,\n 33146: 12305,\n 33147: 65291,\n 33148: 65293,\n 33149: 177,\n 33150: 215,\n 33152: 247,\n 33153: 65309,\n 33154: 8800,\n 33155: 65308,\n 33156: 65310,\n 33157: 8806,\n 33158: 8807,\n 33159: 8734,\n 33160: 8756,\n 33161: 9794,\n 33162: 9792,\n 33163: 176,\n 33164: 8242,\n 33165: 8243,\n 33166: 8451,\n 33167: 65509,\n 33168: 65284,\n 33169: 65504,\n 33170: 65505,\n 33171: 65285,\n 33172: 65283,\n 33173: 65286,\n 33174: 65290,\n 33175: 65312,\n 33176: 167,\n 33177: 9734,\n 33178: 9733,\n 33179: 9675,\n 33180: 9679,\n 33181: 9678,\n 33182: 9671,\n 33183: 9670,\n 33184: 9633,\n 33185: 9632,\n 33186: 9651,\n 33187: 9650,\n 33188: 9661,\n 33189: 9660,\n 33190: 8251,\n 33191: 12306,\n 33192: 8594,\n 33193: 8592,\n 33194: 8593,\n 33195: 8595,\n 33196: 12307,\n 33208: 8712,\n 33209: 8715,\n 33210: 8838,\n 33211: 8839,\n 33212: 8834,\n 33213: 8835,\n 33214: 8746,\n 33215: 8745,\n 33224: 8743,\n 33225: 8744,\n 33226: 65506,\n 33227: 8658,\n 33228: 8660,\n 33229: 8704,\n 33230: 8707,\n 33242: 8736,\n 33243: 8869,\n 33244: 8978,\n 33245: 8706,\n 33246: 8711,\n 33247: 8801,\n 33248: 8786,\n 33249: 8810,\n 33250: 8811,\n 33251: 8730,\n 33252: 8765,\n 33253: 8733,\n 33254: 8757,\n 33255: 8747,\n 33256: 8748,\n 33264: 8491,\n 33265: 8240,\n 33266: 9839,\n 33267: 9837,\n 33268: 9834,\n 33269: 8224,\n 33270: 8225,\n 33271: 182,\n 33276: 9711,\n 33359: 65296,\n 33360: 65297,\n 33361: 65298,\n 33362: 65299,\n 33363: 65300,\n 33364: 65301,\n 33365: 65302,\n 33366: 65303,\n 33367: 65304,\n 33368: 65305,\n 33376: 65313,\n 33377: 65314,\n 33378: 65315,\n 33379: 65316,\n 33380: 65317,\n 33381: 65318,\n 33382: 65319,\n 33383: 65320,\n 33384: 65321,\n 33385: 65322,\n 33386: 65323,\n 33387: 65324,\n 33388: 65325,\n 33389: 65326,\n 33390: 65327,\n 33391: 65328,\n 33392: 65329,\n 33393: 65330,\n 33394: 65331,\n 33395: 65332,\n 33396: 65333,\n 33397: 65334,\n 33398: 65335,\n 33399: 65336,\n 33400: 65337,\n 33401: 65338,\n 33409: 65345,\n 33410: 65346,\n 33411: 65347,\n 33412: 65348,\n 33413: 65349,\n 33414: 65350,\n 33415: 65351,\n 33416: 65352,\n 33417: 65353,\n 33418: 65354,\n 33419: 65355,\n 33420: 65356,\n 33421: 65357,\n 33422: 65358,\n 33423: 65359,\n 33424: 65360,\n 33425: 65361,\n 33426: 65362,\n 33427: 65363,\n 33428: 65364,\n 33429: 65365,\n 33430: 65366,\n 33431: 65367,\n 33432: 65368,\n 33433: 65369,\n 33434: 65370,\n 33439: 12353,\n 33440: 12354,\n 33441: 12355,\n 33442: 12356,\n 33443: 12357,\n 33444: 12358,\n 33445: 12359,\n 33446: 12360,\n 33447: 12361,\n 33448: 12362,\n 33449: 12363,\n 33450: 12364,\n 33451: 12365,\n 33452: 12366,\n 33453: 12367,\n 33454: 12368,\n 33455: 12369,\n 33456: 12370,\n 33457: 12371,\n 33458: 12372,\n 33459: 12373,\n 33460: 12374,\n 33461: 12375,\n 33462: 12376,\n 33463: 12377,\n 33464: 12378,\n 33465: 12379,\n 33466: 12380,\n 33467: 12381,\n 33468: 12382,\n 33469: 12383,\n 33470: 12384,\n 33471: 12385,\n 33472: 12386,\n 33473: 12387,\n 33474: 12388,\n 33475: 12389,\n 33476: 12390,\n 33477: 12391,\n 33478: 12392,\n 33479: 12393,\n 33480: 12394,\n 33481: 12395,\n 33482: 12396,\n 33483: 12397,\n 33484: 12398,\n 33485: 12399,\n 33486: 12400,\n 33487: 12401,\n 33488: 12402,\n 33489: 12403,\n 33490: 12404,\n 33491: 12405,\n 33492: 12406,\n 33493: 12407,\n 33494: 12408,\n 33495: 12409,\n 33496: 12410,\n 33497: 12411,\n 33498: 12412,\n 33499: 12413,\n 33500: 12414,\n 33501: 12415,\n 33502: 12416,\n 33503: 12417,\n 33504: 12418,\n 33505: 12419,\n 33506: 12420,\n 33507: 12421,\n 33508: 12422,\n 33509: 12423,\n 33510: 12424,\n 33511: 12425,\n 33512: 12426,\n 33513: 12427,\n 33514: 12428,\n 33515: 12429,\n 33516: 12430,\n 33517: 12431,\n 33518: 12432,\n 33519: 12433,\n 33520: 12434,\n 33521: 12435,\n 33600: 12449,\n 33601: 12450,\n 33602: 12451,\n 33603: 12452,\n 33604: 12453,\n 33605: 12454,\n 33606: 12455,\n 33607: 12456,\n 33608: 12457,\n 33609: 12458,\n 33610: 12459,\n 33611: 12460,\n 33612: 12461,\n 33613: 12462,\n 33614: 12463,\n 33615: 12464,\n 33616: 12465,\n 33617: 12466,\n 33618: 12467,\n 33619: 12468,\n 33620: 12469,\n 33621: 12470,\n 33622: 12471,\n 33623: 12472,\n 33624: 12473,\n 33625: 12474,\n 33626: 12475,\n 33627: 12476,\n 33628: 12477,\n 33629: 12478,\n 33630: 12479,\n 33631: 12480,\n 33632: 12481,\n 33633: 12482,\n 33634: 12483,\n 33635: 12484,\n 33636: 12485,\n 33637: 12486,\n 33638: 12487,\n 33639: 12488,\n 33640: 12489,\n 33641: 12490,\n 33642: 12491,\n 33643: 12492,\n 33644: 12493,\n 33645: 12494,\n 33646: 12495,\n 33647: 12496,\n 33648: 12497,\n 33649: 12498,\n 33650: 12499,\n 33651: 12500,\n 33652: 12501,\n 33653: 12502,\n 33654: 12503,\n 33655: 12504,\n 33656: 12505,\n 33657: 12506,\n 33658: 12507,\n 33659: 12508,\n 33660: 12509,\n 33661: 12510,\n 33662: 12511,\n 33664: 12512,\n 33665: 12513,\n 33666: 12514,\n 33667: 12515,\n 33668: 12516,\n 33669: 12517,\n 33670: 12518,\n 33671: 12519,\n 33672: 12520,\n 33673: 12521,\n 33674: 12522,\n 33675: 12523,\n 33676: 12524,\n 33677: 12525,\n 33678: 12526,\n 33679: 12527,\n 33680: 12528,\n 33681: 12529,\n 33682: 12530,\n 33683: 12531,\n 33684: 12532,\n 33685: 12533,\n 33686: 12534,\n 33695: 913,\n 33696: 914,\n 33697: 915,\n 33698: 916,\n 33699: 917,\n 33700: 918,\n 33701: 919,\n 33702: 920,\n 33703: 921,\n 33704: 922,\n 33705: 923,\n 33706: 924,\n 33707: 925,\n 33708: 926,\n 33709: 927,\n 33710: 928,\n 33711: 929,\n 33712: 931,\n 33713: 932,\n 33714: 933,\n 33715: 934,\n 33716: 935,\n 33717: 936,\n 33718: 937,\n 33727: 945,\n 33728: 946,\n 33729: 947,\n 33730: 948,\n 33731: 949,\n 33732: 950,\n 33733: 951,\n 33734: 952,\n 33735: 953,\n 33736: 954,\n 33737: 955,\n 33738: 956,\n 33739: 957,\n 33740: 958,\n 33741: 959,\n 33742: 960,\n 33743: 961,\n 33744: 963,\n 33745: 964,\n 33746: 965,\n 33747: 966,\n 33748: 967,\n 33749: 968,\n 33750: 969,\n 33856: 1040,\n 33857: 1041,\n 33858: 1042,\n 33859: 1043,\n 33860: 1044,\n 33861: 1045,\n 33862: 1025,\n 33863: 1046,\n 33864: 1047,\n 33865: 1048,\n 33866: 1049,\n 33867: 1050,\n 33868: 1051,\n 33869: 1052,\n 33870: 1053,\n 33871: 1054,\n 33872: 1055,\n 33873: 1056,\n 33874: 1057,\n 33875: 1058,\n 33876: 1059,\n 33877: 1060,\n 33878: 1061,\n 33879: 1062,\n 33880: 1063,\n 33881: 1064,\n 33882: 1065,\n 33883: 1066,\n 33884: 1067,\n 33885: 1068,\n 33886: 1069,\n 33887: 1070,\n 33888: 1071,\n 33904: 1072,\n 33905: 1073,\n 33906: 1074,\n 33907: 1075,\n 33908: 1076,\n 33909: 1077,\n 33910: 1105,\n 33911: 1078,\n 33912: 1079,\n 33913: 1080,\n 33914: 1081,\n 33915: 1082,\n 33916: 1083,\n 33917: 1084,\n 33918: 1085,\n 33920: 1086,\n 33921: 1087,\n 33922: 1088,\n 33923: 1089,\n 33924: 1090,\n 33925: 1091,\n 33926: 1092,\n 33927: 1093,\n 33928: 1094,\n 33929: 1095,\n 33930: 1096,\n 33931: 1097,\n 33932: 1098,\n 33933: 1099,\n 33934: 1100,\n 33935: 1101,\n 33936: 1102,\n 33937: 1103,\n 33951: 9472,\n 33952: 9474,\n 33953: 9484,\n 33954: 9488,\n 33955: 9496,\n 33956: 9492,\n 33957: 9500,\n 33958: 9516,\n 33959: 9508,\n 33960: 9524,\n 33961: 9532,\n 33962: 9473,\n 33963: 9475,\n 33964: 9487,\n 33965: 9491,\n 33966: 9499,\n 33967: 9495,\n 33968: 9507,\n 33969: 9523,\n 33970: 9515,\n 33971: 9531,\n 33972: 9547,\n 33973: 9504,\n 33974: 9519,\n 33975: 9512,\n 33976: 9527,\n 33977: 9535,\n 33978: 9501,\n 33979: 9520,\n 33980: 9509,\n 33981: 9528,\n 33982: 9538,\n 34624: 9312,\n 34625: 9313,\n 34626: 9314,\n 34627: 9315,\n 34628: 9316,\n 34629: 9317,\n 34630: 9318,\n 34631: 9319,\n 34632: 9320,\n 34633: 9321,\n 34634: 9322,\n 34635: 9323,\n 34636: 9324,\n 34637: 9325,\n 34638: 9326,\n 34639: 9327,\n 34640: 9328,\n 34641: 9329,\n 34642: 9330,\n 34643: 9331,\n 34644: 8544,\n 34645: 8545,\n 34646: 8546,\n 34647: 8547,\n 34648: 8548,\n 34649: 8549,\n 34650: 8550,\n 34651: 8551,\n 34652: 8552,\n 34653: 8553,\n 34655: 13129,\n 34656: 13076,\n 34657: 13090,\n 34658: 13133,\n 34659: 13080,\n 34660: 13095,\n 34661: 13059,\n 34662: 13110,\n 34663: 13137,\n 34664: 13143,\n 34665: 13069,\n 34666: 13094,\n 34667: 13091,\n 34668: 13099,\n 34669: 13130,\n 34670: 13115,\n 34671: 13212,\n 34672: 13213,\n 34673: 13214,\n 34674: 13198,\n 34675: 13199,\n 34676: 13252,\n 34677: 13217,\n 34686: 13179,\n 34688: 12317,\n 34689: 12319,\n 34690: 8470,\n 34691: 13261,\n 34692: 8481,\n 34693: 12964,\n 34694: 12965,\n 34695: 12966,\n 34696: 12967,\n 34697: 12968,\n 34698: 12849,\n 34699: 12850,\n 34700: 12857,\n 34701: 13182,\n 34702: 13181,\n 34703: 13180,\n 34704: 8786,\n 34705: 8801,\n 34706: 8747,\n 34707: 8750,\n 34708: 8721,\n 34709: 8730,\n 34710: 8869,\n 34711: 8736,\n 34712: 8735,\n 34713: 8895,\n 34714: 8757,\n 34715: 8745,\n 34716: 8746,\n 34975: 20124,\n 34976: 21782,\n 34977: 23043,\n 34978: 38463,\n 34979: 21696,\n 34980: 24859,\n 34981: 25384,\n 34982: 23030,\n 34983: 36898,\n 34984: 33909,\n 34985: 33564,\n 34986: 31312,\n 34987: 24746,\n 34988: 25569,\n 34989: 28197,\n 34990: 26093,\n 34991: 33894,\n 34992: 33446,\n 34993: 39925,\n 34994: 26771,\n 34995: 22311,\n 34996: 26017,\n 34997: 25201,\n 34998: 23451,\n 34999: 22992,\n 35e3: 34427,\n 35001: 39156,\n 35002: 32098,\n 35003: 32190,\n 35004: 39822,\n 35005: 25110,\n 35006: 31903,\n 35007: 34999,\n 35008: 23433,\n 35009: 24245,\n 35010: 25353,\n 35011: 26263,\n 35012: 26696,\n 35013: 38343,\n 35014: 38797,\n 35015: 26447,\n 35016: 20197,\n 35017: 20234,\n 35018: 20301,\n 35019: 20381,\n 35020: 20553,\n 35021: 22258,\n 35022: 22839,\n 35023: 22996,\n 35024: 23041,\n 35025: 23561,\n 35026: 24799,\n 35027: 24847,\n 35028: 24944,\n 35029: 26131,\n 35030: 26885,\n 35031: 28858,\n 35032: 30031,\n 35033: 30064,\n 35034: 31227,\n 35035: 32173,\n 35036: 32239,\n 35037: 32963,\n 35038: 33806,\n 35039: 34915,\n 35040: 35586,\n 35041: 36949,\n 35042: 36986,\n 35043: 21307,\n 35044: 20117,\n 35045: 20133,\n 35046: 22495,\n 35047: 32946,\n 35048: 37057,\n 35049: 30959,\n 35050: 19968,\n 35051: 22769,\n 35052: 28322,\n 35053: 36920,\n 35054: 31282,\n 35055: 33576,\n 35056: 33419,\n 35057: 39983,\n 35058: 20801,\n 35059: 21360,\n 35060: 21693,\n 35061: 21729,\n 35062: 22240,\n 35063: 23035,\n 35064: 24341,\n 35065: 39154,\n 35066: 28139,\n 35067: 32996,\n 35068: 34093,\n 35136: 38498,\n 35137: 38512,\n 35138: 38560,\n 35139: 38907,\n 35140: 21515,\n 35141: 21491,\n 35142: 23431,\n 35143: 28879,\n 35144: 32701,\n 35145: 36802,\n 35146: 38632,\n 35147: 21359,\n 35148: 40284,\n 35149: 31418,\n 35150: 19985,\n 35151: 30867,\n 35152: 33276,\n 35153: 28198,\n 35154: 22040,\n 35155: 21764,\n 35156: 27421,\n 35157: 34074,\n 35158: 39995,\n 35159: 23013,\n 35160: 21417,\n 35161: 28006,\n 35162: 29916,\n 35163: 38287,\n 35164: 22082,\n 35165: 20113,\n 35166: 36939,\n 35167: 38642,\n 35168: 33615,\n 35169: 39180,\n 35170: 21473,\n 35171: 21942,\n 35172: 23344,\n 35173: 24433,\n 35174: 26144,\n 35175: 26355,\n 35176: 26628,\n 35177: 27704,\n 35178: 27891,\n 35179: 27945,\n 35180: 29787,\n 35181: 30408,\n 35182: 31310,\n 35183: 38964,\n 35184: 33521,\n 35185: 34907,\n 35186: 35424,\n 35187: 37613,\n 35188: 28082,\n 35189: 30123,\n 35190: 30410,\n 35191: 39365,\n 35192: 24742,\n 35193: 35585,\n 35194: 36234,\n 35195: 38322,\n 35196: 27022,\n 35197: 21421,\n 35198: 20870,\n 35200: 22290,\n 35201: 22576,\n 35202: 22852,\n 35203: 23476,\n 35204: 24310,\n 35205: 24616,\n 35206: 25513,\n 35207: 25588,\n 35208: 27839,\n 35209: 28436,\n 35210: 28814,\n 35211: 28948,\n 35212: 29017,\n 35213: 29141,\n 35214: 29503,\n 35215: 32257,\n 35216: 33398,\n 35217: 33489,\n 35218: 34199,\n 35219: 36960,\n 35220: 37467,\n 35221: 40219,\n 35222: 22633,\n 35223: 26044,\n 35224: 27738,\n 35225: 29989,\n 35226: 20985,\n 35227: 22830,\n 35228: 22885,\n 35229: 24448,\n 35230: 24540,\n 35231: 25276,\n 35232: 26106,\n 35233: 27178,\n 35234: 27431,\n 35235: 27572,\n 35236: 29579,\n 35237: 32705,\n 35238: 35158,\n 35239: 40236,\n 35240: 40206,\n 35241: 40644,\n 35242: 23713,\n 35243: 27798,\n 35244: 33659,\n 35245: 20740,\n 35246: 23627,\n 35247: 25014,\n 35248: 33222,\n 35249: 26742,\n 35250: 29281,\n 35251: 20057,\n 35252: 20474,\n 35253: 21368,\n 35254: 24681,\n 35255: 28201,\n 35256: 31311,\n 35257: 38899,\n 35258: 19979,\n 35259: 21270,\n 35260: 20206,\n 35261: 20309,\n 35262: 20285,\n 35263: 20385,\n 35264: 20339,\n 35265: 21152,\n 35266: 21487,\n 35267: 22025,\n 35268: 22799,\n 35269: 23233,\n 35270: 23478,\n 35271: 23521,\n 35272: 31185,\n 35273: 26247,\n 35274: 26524,\n 35275: 26550,\n 35276: 27468,\n 35277: 27827,\n 35278: 28779,\n 35279: 29634,\n 35280: 31117,\n 35281: 31166,\n 35282: 31292,\n 35283: 31623,\n 35284: 33457,\n 35285: 33499,\n 35286: 33540,\n 35287: 33655,\n 35288: 33775,\n 35289: 33747,\n 35290: 34662,\n 35291: 35506,\n 35292: 22057,\n 35293: 36008,\n 35294: 36838,\n 35295: 36942,\n 35296: 38686,\n 35297: 34442,\n 35298: 20420,\n 35299: 23784,\n 35300: 25105,\n 35301: 29273,\n 35302: 30011,\n 35303: 33253,\n 35304: 33469,\n 35305: 34558,\n 35306: 36032,\n 35307: 38597,\n 35308: 39187,\n 35309: 39381,\n 35310: 20171,\n 35311: 20250,\n 35312: 35299,\n 35313: 22238,\n 35314: 22602,\n 35315: 22730,\n 35316: 24315,\n 35317: 24555,\n 35318: 24618,\n 35319: 24724,\n 35320: 24674,\n 35321: 25040,\n 35322: 25106,\n 35323: 25296,\n 35324: 25913,\n 35392: 39745,\n 35393: 26214,\n 35394: 26800,\n 35395: 28023,\n 35396: 28784,\n 35397: 30028,\n 35398: 30342,\n 35399: 32117,\n 35400: 33445,\n 35401: 34809,\n 35402: 38283,\n 35403: 38542,\n 35404: 35997,\n 35405: 20977,\n 35406: 21182,\n 35407: 22806,\n 35408: 21683,\n 35409: 23475,\n 35410: 23830,\n 35411: 24936,\n 35412: 27010,\n 35413: 28079,\n 35414: 30861,\n 35415: 33995,\n 35416: 34903,\n 35417: 35442,\n 35418: 37799,\n 35419: 39608,\n 35420: 28012,\n 35421: 39336,\n 35422: 34521,\n 35423: 22435,\n 35424: 26623,\n 35425: 34510,\n 35426: 37390,\n 35427: 21123,\n 35428: 22151,\n 35429: 21508,\n 35430: 24275,\n 35431: 25313,\n 35432: 25785,\n 35433: 26684,\n 35434: 26680,\n 35435: 27579,\n 35436: 29554,\n 35437: 30906,\n 35438: 31339,\n 35439: 35226,\n 35440: 35282,\n 35441: 36203,\n 35442: 36611,\n 35443: 37101,\n 35444: 38307,\n 35445: 38548,\n 35446: 38761,\n 35447: 23398,\n 35448: 23731,\n 35449: 27005,\n 35450: 38989,\n 35451: 38990,\n 35452: 25499,\n 35453: 31520,\n 35454: 27179,\n 35456: 27263,\n 35457: 26806,\n 35458: 39949,\n 35459: 28511,\n 35460: 21106,\n 35461: 21917,\n 35462: 24688,\n 35463: 25324,\n 35464: 27963,\n 35465: 28167,\n 35466: 28369,\n 35467: 33883,\n 35468: 35088,\n 35469: 36676,\n 35470: 19988,\n 35471: 39993,\n 35472: 21494,\n 35473: 26907,\n 35474: 27194,\n 35475: 38788,\n 35476: 26666,\n 35477: 20828,\n 35478: 31427,\n 35479: 33970,\n 35480: 37340,\n 35481: 37772,\n 35482: 22107,\n 35483: 40232,\n 35484: 26658,\n 35485: 33541,\n 35486: 33841,\n 35487: 31909,\n 35488: 21e3,\n 35489: 33477,\n 35490: 29926,\n 35491: 20094,\n 35492: 20355,\n 35493: 20896,\n 35494: 23506,\n 35495: 21002,\n 35496: 21208,\n 35497: 21223,\n 35498: 24059,\n 35499: 21914,\n 35500: 22570,\n 35501: 23014,\n 35502: 23436,\n 35503: 23448,\n 35504: 23515,\n 35505: 24178,\n 35506: 24185,\n 35507: 24739,\n 35508: 24863,\n 35509: 24931,\n 35510: 25022,\n 35511: 25563,\n 35512: 25954,\n 35513: 26577,\n 35514: 26707,\n 35515: 26874,\n 35516: 27454,\n 35517: 27475,\n 35518: 27735,\n 35519: 28450,\n 35520: 28567,\n 35521: 28485,\n 35522: 29872,\n 35523: 29976,\n 35524: 30435,\n 35525: 30475,\n 35526: 31487,\n 35527: 31649,\n 35528: 31777,\n 35529: 32233,\n 35530: 32566,\n 35531: 32752,\n 35532: 32925,\n 35533: 33382,\n 35534: 33694,\n 35535: 35251,\n 35536: 35532,\n 35537: 36011,\n 35538: 36996,\n 35539: 37969,\n 35540: 38291,\n 35541: 38289,\n 35542: 38306,\n 35543: 38501,\n 35544: 38867,\n 35545: 39208,\n 35546: 33304,\n 35547: 20024,\n 35548: 21547,\n 35549: 23736,\n 35550: 24012,\n 35551: 29609,\n 35552: 30284,\n 35553: 30524,\n 35554: 23721,\n 35555: 32747,\n 35556: 36107,\n 35557: 38593,\n 35558: 38929,\n 35559: 38996,\n 35560: 39e3,\n 35561: 20225,\n 35562: 20238,\n 35563: 21361,\n 35564: 21916,\n 35565: 22120,\n 35566: 22522,\n 35567: 22855,\n 35568: 23305,\n 35569: 23492,\n 35570: 23696,\n 35571: 24076,\n 35572: 24190,\n 35573: 24524,\n 35574: 25582,\n 35575: 26426,\n 35576: 26071,\n 35577: 26082,\n 35578: 26399,\n 35579: 26827,\n 35580: 26820,\n 35648: 27231,\n 35649: 24112,\n 35650: 27589,\n 35651: 27671,\n 35652: 27773,\n 35653: 30079,\n 35654: 31048,\n 35655: 23395,\n 35656: 31232,\n 35657: 32e3,\n 35658: 24509,\n 35659: 35215,\n 35660: 35352,\n 35661: 36020,\n 35662: 36215,\n 35663: 36556,\n 35664: 36637,\n 35665: 39138,\n 35666: 39438,\n 35667: 39740,\n 35668: 20096,\n 35669: 20605,\n 35670: 20736,\n 35671: 22931,\n 35672: 23452,\n 35673: 25135,\n 35674: 25216,\n 35675: 25836,\n 35676: 27450,\n 35677: 29344,\n 35678: 30097,\n 35679: 31047,\n 35680: 32681,\n 35681: 34811,\n 35682: 35516,\n 35683: 35696,\n 35684: 25516,\n 35685: 33738,\n 35686: 38816,\n 35687: 21513,\n 35688: 21507,\n 35689: 21931,\n 35690: 26708,\n 35691: 27224,\n 35692: 35440,\n 35693: 30759,\n 35694: 26485,\n 35695: 40653,\n 35696: 21364,\n 35697: 23458,\n 35698: 33050,\n 35699: 34384,\n 35700: 36870,\n 35701: 19992,\n 35702: 20037,\n 35703: 20167,\n 35704: 20241,\n 35705: 21450,\n 35706: 21560,\n 35707: 23470,\n 35708: 24339,\n 35709: 24613,\n 35710: 25937,\n 35712: 26429,\n 35713: 27714,\n 35714: 27762,\n 35715: 27875,\n 35716: 28792,\n 35717: 29699,\n 35718: 31350,\n 35719: 31406,\n 35720: 31496,\n 35721: 32026,\n 35722: 31998,\n 35723: 32102,\n 35724: 26087,\n 35725: 29275,\n 35726: 21435,\n 35727: 23621,\n 35728: 24040,\n 35729: 25298,\n 35730: 25312,\n 35731: 25369,\n 35732: 28192,\n 35733: 34394,\n 35734: 35377,\n 35735: 36317,\n 35736: 37624,\n 35737: 28417,\n 35738: 31142,\n 35739: 39770,\n 35740: 20136,\n 35741: 20139,\n 35742: 20140,\n 35743: 20379,\n 35744: 20384,\n 35745: 20689,\n 35746: 20807,\n 35747: 31478,\n 35748: 20849,\n 35749: 20982,\n 35750: 21332,\n 35751: 21281,\n 35752: 21375,\n 35753: 21483,\n 35754: 21932,\n 35755: 22659,\n 35756: 23777,\n 35757: 24375,\n 35758: 24394,\n 35759: 24623,\n 35760: 24656,\n 35761: 24685,\n 35762: 25375,\n 35763: 25945,\n 35764: 27211,\n 35765: 27841,\n 35766: 29378,\n 35767: 29421,\n 35768: 30703,\n 35769: 33016,\n 35770: 33029,\n 35771: 33288,\n 35772: 34126,\n 35773: 37111,\n 35774: 37857,\n 35775: 38911,\n 35776: 39255,\n 35777: 39514,\n 35778: 20208,\n 35779: 20957,\n 35780: 23597,\n 35781: 26241,\n 35782: 26989,\n 35783: 23616,\n 35784: 26354,\n 35785: 26997,\n 35786: 29577,\n 35787: 26704,\n 35788: 31873,\n 35789: 20677,\n 35790: 21220,\n 35791: 22343,\n 35792: 24062,\n 35793: 37670,\n 35794: 26020,\n 35795: 27427,\n 35796: 27453,\n 35797: 29748,\n 35798: 31105,\n 35799: 31165,\n 35800: 31563,\n 35801: 32202,\n 35802: 33465,\n 35803: 33740,\n 35804: 34943,\n 35805: 35167,\n 35806: 35641,\n 35807: 36817,\n 35808: 37329,\n 35809: 21535,\n 35810: 37504,\n 35811: 20061,\n 35812: 20534,\n 35813: 21477,\n 35814: 21306,\n 35815: 29399,\n 35816: 29590,\n 35817: 30697,\n 35818: 33510,\n 35819: 36527,\n 35820: 39366,\n 35821: 39368,\n 35822: 39378,\n 35823: 20855,\n 35824: 24858,\n 35825: 34398,\n 35826: 21936,\n 35827: 31354,\n 35828: 20598,\n 35829: 23507,\n 35830: 36935,\n 35831: 38533,\n 35832: 20018,\n 35833: 27355,\n 35834: 37351,\n 35835: 23633,\n 35836: 23624,\n 35904: 25496,\n 35905: 31391,\n 35906: 27795,\n 35907: 38772,\n 35908: 36705,\n 35909: 31402,\n 35910: 29066,\n 35911: 38536,\n 35912: 31874,\n 35913: 26647,\n 35914: 32368,\n 35915: 26705,\n 35916: 37740,\n 35917: 21234,\n 35918: 21531,\n 35919: 34219,\n 35920: 35347,\n 35921: 32676,\n 35922: 36557,\n 35923: 37089,\n 35924: 21350,\n 35925: 34952,\n 35926: 31041,\n 35927: 20418,\n 35928: 20670,\n 35929: 21009,\n 35930: 20804,\n 35931: 21843,\n 35932: 22317,\n 35933: 29674,\n 35934: 22411,\n 35935: 22865,\n 35936: 24418,\n 35937: 24452,\n 35938: 24693,\n 35939: 24950,\n 35940: 24935,\n 35941: 25001,\n 35942: 25522,\n 35943: 25658,\n 35944: 25964,\n 35945: 26223,\n 35946: 26690,\n 35947: 28179,\n 35948: 30054,\n 35949: 31293,\n 35950: 31995,\n 35951: 32076,\n 35952: 32153,\n 35953: 32331,\n 35954: 32619,\n 35955: 33550,\n 35956: 33610,\n 35957: 34509,\n 35958: 35336,\n 35959: 35427,\n 35960: 35686,\n 35961: 36605,\n 35962: 38938,\n 35963: 40335,\n 35964: 33464,\n 35965: 36814,\n 35966: 39912,\n 35968: 21127,\n 35969: 25119,\n 35970: 25731,\n 35971: 28608,\n 35972: 38553,\n 35973: 26689,\n 35974: 20625,\n 35975: 27424,\n 35976: 27770,\n 35977: 28500,\n 35978: 31348,\n 35979: 32080,\n 35980: 34880,\n 35981: 35363,\n 35982: 26376,\n 35983: 20214,\n 35984: 20537,\n 35985: 20518,\n 35986: 20581,\n 35987: 20860,\n 35988: 21048,\n 35989: 21091,\n 35990: 21927,\n 35991: 22287,\n 35992: 22533,\n 35993: 23244,\n 35994: 24314,\n 35995: 25010,\n 35996: 25080,\n 35997: 25331,\n 35998: 25458,\n 35999: 26908,\n 36e3: 27177,\n 36001: 29309,\n 36002: 29356,\n 36003: 29486,\n 36004: 30740,\n 36005: 30831,\n 36006: 32121,\n 36007: 30476,\n 36008: 32937,\n 36009: 35211,\n 36010: 35609,\n 36011: 36066,\n 36012: 36562,\n 36013: 36963,\n 36014: 37749,\n 36015: 38522,\n 36016: 38997,\n 36017: 39443,\n 36018: 40568,\n 36019: 20803,\n 36020: 21407,\n 36021: 21427,\n 36022: 24187,\n 36023: 24358,\n 36024: 28187,\n 36025: 28304,\n 36026: 29572,\n 36027: 29694,\n 36028: 32067,\n 36029: 33335,\n 36030: 35328,\n 36031: 35578,\n 36032: 38480,\n 36033: 20046,\n 36034: 20491,\n 36035: 21476,\n 36036: 21628,\n 36037: 22266,\n 36038: 22993,\n 36039: 23396,\n 36040: 24049,\n 36041: 24235,\n 36042: 24359,\n 36043: 25144,\n 36044: 25925,\n 36045: 26543,\n 36046: 28246,\n 36047: 29392,\n 36048: 31946,\n 36049: 34996,\n 36050: 32929,\n 36051: 32993,\n 36052: 33776,\n 36053: 34382,\n 36054: 35463,\n 36055: 36328,\n 36056: 37431,\n 36057: 38599,\n 36058: 39015,\n 36059: 40723,\n 36060: 20116,\n 36061: 20114,\n 36062: 20237,\n 36063: 21320,\n 36064: 21577,\n 36065: 21566,\n 36066: 23087,\n 36067: 24460,\n 36068: 24481,\n 36069: 24735,\n 36070: 26791,\n 36071: 27278,\n 36072: 29786,\n 36073: 30849,\n 36074: 35486,\n 36075: 35492,\n 36076: 35703,\n 36077: 37264,\n 36078: 20062,\n 36079: 39881,\n 36080: 20132,\n 36081: 20348,\n 36082: 20399,\n 36083: 20505,\n 36084: 20502,\n 36085: 20809,\n 36086: 20844,\n 36087: 21151,\n 36088: 21177,\n 36089: 21246,\n 36090: 21402,\n 36091: 21475,\n 36092: 21521,\n 36160: 21518,\n 36161: 21897,\n 36162: 22353,\n 36163: 22434,\n 36164: 22909,\n 36165: 23380,\n 36166: 23389,\n 36167: 23439,\n 36168: 24037,\n 36169: 24039,\n 36170: 24055,\n 36171: 24184,\n 36172: 24195,\n 36173: 24218,\n 36174: 24247,\n 36175: 24344,\n 36176: 24658,\n 36177: 24908,\n 36178: 25239,\n 36179: 25304,\n 36180: 25511,\n 36181: 25915,\n 36182: 26114,\n 36183: 26179,\n 36184: 26356,\n 36185: 26477,\n 36186: 26657,\n 36187: 26775,\n 36188: 27083,\n 36189: 27743,\n 36190: 27946,\n 36191: 28009,\n 36192: 28207,\n 36193: 28317,\n 36194: 30002,\n 36195: 30343,\n 36196: 30828,\n 36197: 31295,\n 36198: 31968,\n 36199: 32005,\n 36200: 32024,\n 36201: 32094,\n 36202: 32177,\n 36203: 32789,\n 36204: 32771,\n 36205: 32943,\n 36206: 32945,\n 36207: 33108,\n 36208: 33167,\n 36209: 33322,\n 36210: 33618,\n 36211: 34892,\n 36212: 34913,\n 36213: 35611,\n 36214: 36002,\n 36215: 36092,\n 36216: 37066,\n 36217: 37237,\n 36218: 37489,\n 36219: 30783,\n 36220: 37628,\n 36221: 38308,\n 36222: 38477,\n 36224: 38917,\n 36225: 39321,\n 36226: 39640,\n 36227: 40251,\n 36228: 21083,\n 36229: 21163,\n 36230: 21495,\n 36231: 21512,\n 36232: 22741,\n 36233: 25335,\n 36234: 28640,\n 36235: 35946,\n 36236: 36703,\n 36237: 40633,\n 36238: 20811,\n 36239: 21051,\n 36240: 21578,\n 36241: 22269,\n 36242: 31296,\n 36243: 37239,\n 36244: 40288,\n 36245: 40658,\n 36246: 29508,\n 36247: 28425,\n 36248: 33136,\n 36249: 29969,\n 36250: 24573,\n 36251: 24794,\n 36252: 39592,\n 36253: 29403,\n 36254: 36796,\n 36255: 27492,\n 36256: 38915,\n 36257: 20170,\n 36258: 22256,\n 36259: 22372,\n 36260: 22718,\n 36261: 23130,\n 36262: 24680,\n 36263: 25031,\n 36264: 26127,\n 36265: 26118,\n 36266: 26681,\n 36267: 26801,\n 36268: 28151,\n 36269: 30165,\n 36270: 32058,\n 36271: 33390,\n 36272: 39746,\n 36273: 20123,\n 36274: 20304,\n 36275: 21449,\n 36276: 21766,\n 36277: 23919,\n 36278: 24038,\n 36279: 24046,\n 36280: 26619,\n 36281: 27801,\n 36282: 29811,\n 36283: 30722,\n 36284: 35408,\n 36285: 37782,\n 36286: 35039,\n 36287: 22352,\n 36288: 24231,\n 36289: 25387,\n 36290: 20661,\n 36291: 20652,\n 36292: 20877,\n 36293: 26368,\n 36294: 21705,\n 36295: 22622,\n 36296: 22971,\n 36297: 23472,\n 36298: 24425,\n 36299: 25165,\n 36300: 25505,\n 36301: 26685,\n 36302: 27507,\n 36303: 28168,\n 36304: 28797,\n 36305: 37319,\n 36306: 29312,\n 36307: 30741,\n 36308: 30758,\n 36309: 31085,\n 36310: 25998,\n 36311: 32048,\n 36312: 33756,\n 36313: 35009,\n 36314: 36617,\n 36315: 38555,\n 36316: 21092,\n 36317: 22312,\n 36318: 26448,\n 36319: 32618,\n 36320: 36001,\n 36321: 20916,\n 36322: 22338,\n 36323: 38442,\n 36324: 22586,\n 36325: 27018,\n 36326: 32948,\n 36327: 21682,\n 36328: 23822,\n 36329: 22524,\n 36330: 30869,\n 36331: 40442,\n 36332: 20316,\n 36333: 21066,\n 36334: 21643,\n 36335: 25662,\n 36336: 26152,\n 36337: 26388,\n 36338: 26613,\n 36339: 31364,\n 36340: 31574,\n 36341: 32034,\n 36342: 37679,\n 36343: 26716,\n 36344: 39853,\n 36345: 31545,\n 36346: 21273,\n 36347: 20874,\n 36348: 21047,\n 36416: 23519,\n 36417: 25334,\n 36418: 25774,\n 36419: 25830,\n 36420: 26413,\n 36421: 27578,\n 36422: 34217,\n 36423: 38609,\n 36424: 30352,\n 36425: 39894,\n 36426: 25420,\n 36427: 37638,\n 36428: 39851,\n 36429: 30399,\n 36430: 26194,\n 36431: 19977,\n 36432: 20632,\n 36433: 21442,\n 36434: 23665,\n 36435: 24808,\n 36436: 25746,\n 36437: 25955,\n 36438: 26719,\n 36439: 29158,\n 36440: 29642,\n 36441: 29987,\n 36442: 31639,\n 36443: 32386,\n 36444: 34453,\n 36445: 35715,\n 36446: 36059,\n 36447: 37240,\n 36448: 39184,\n 36449: 26028,\n 36450: 26283,\n 36451: 27531,\n 36452: 20181,\n 36453: 20180,\n 36454: 20282,\n 36455: 20351,\n 36456: 21050,\n 36457: 21496,\n 36458: 21490,\n 36459: 21987,\n 36460: 22235,\n 36461: 22763,\n 36462: 22987,\n 36463: 22985,\n 36464: 23039,\n 36465: 23376,\n 36466: 23629,\n 36467: 24066,\n 36468: 24107,\n 36469: 24535,\n 36470: 24605,\n 36471: 25351,\n 36472: 25903,\n 36473: 23388,\n 36474: 26031,\n 36475: 26045,\n 36476: 26088,\n 36477: 26525,\n 36478: 27490,\n 36480: 27515,\n 36481: 27663,\n 36482: 29509,\n 36483: 31049,\n 36484: 31169,\n 36485: 31992,\n 36486: 32025,\n 36487: 32043,\n 36488: 32930,\n 36489: 33026,\n 36490: 33267,\n 36491: 35222,\n 36492: 35422,\n 36493: 35433,\n 36494: 35430,\n 36495: 35468,\n 36496: 35566,\n 36497: 36039,\n 36498: 36060,\n 36499: 38604,\n 36500: 39164,\n 36501: 27503,\n 36502: 20107,\n 36503: 20284,\n 36504: 20365,\n 36505: 20816,\n 36506: 23383,\n 36507: 23546,\n 36508: 24904,\n 36509: 25345,\n 36510: 26178,\n 36511: 27425,\n 36512: 28363,\n 36513: 27835,\n 36514: 29246,\n 36515: 29885,\n 36516: 30164,\n 36517: 30913,\n 36518: 31034,\n 36519: 32780,\n 36520: 32819,\n 36521: 33258,\n 36522: 33940,\n 36523: 36766,\n 36524: 27728,\n 36525: 40575,\n 36526: 24335,\n 36527: 35672,\n 36528: 40235,\n 36529: 31482,\n 36530: 36600,\n 36531: 23437,\n 36532: 38635,\n 36533: 19971,\n 36534: 21489,\n 36535: 22519,\n 36536: 22833,\n 36537: 23241,\n 36538: 23460,\n 36539: 24713,\n 36540: 28287,\n 36541: 28422,\n 36542: 30142,\n 36543: 36074,\n 36544: 23455,\n 36545: 34048,\n 36546: 31712,\n 36547: 20594,\n 36548: 26612,\n 36549: 33437,\n 36550: 23649,\n 36551: 34122,\n 36552: 32286,\n 36553: 33294,\n 36554: 20889,\n 36555: 23556,\n 36556: 25448,\n 36557: 36198,\n 36558: 26012,\n 36559: 29038,\n 36560: 31038,\n 36561: 32023,\n 36562: 32773,\n 36563: 35613,\n 36564: 36554,\n 36565: 36974,\n 36566: 34503,\n 36567: 37034,\n 36568: 20511,\n 36569: 21242,\n 36570: 23610,\n 36571: 26451,\n 36572: 28796,\n 36573: 29237,\n 36574: 37196,\n 36575: 37320,\n 36576: 37675,\n 36577: 33509,\n 36578: 23490,\n 36579: 24369,\n 36580: 24825,\n 36581: 20027,\n 36582: 21462,\n 36583: 23432,\n 36584: 25163,\n 36585: 26417,\n 36586: 27530,\n 36587: 29417,\n 36588: 29664,\n 36589: 31278,\n 36590: 33131,\n 36591: 36259,\n 36592: 37202,\n 36593: 39318,\n 36594: 20754,\n 36595: 21463,\n 36596: 21610,\n 36597: 23551,\n 36598: 25480,\n 36599: 27193,\n 36600: 32172,\n 36601: 38656,\n 36602: 22234,\n 36603: 21454,\n 36604: 21608,\n 36672: 23447,\n 36673: 23601,\n 36674: 24030,\n 36675: 20462,\n 36676: 24833,\n 36677: 25342,\n 36678: 27954,\n 36679: 31168,\n 36680: 31179,\n 36681: 32066,\n 36682: 32333,\n 36683: 32722,\n 36684: 33261,\n 36685: 33311,\n 36686: 33936,\n 36687: 34886,\n 36688: 35186,\n 36689: 35728,\n 36690: 36468,\n 36691: 36655,\n 36692: 36913,\n 36693: 37195,\n 36694: 37228,\n 36695: 38598,\n 36696: 37276,\n 36697: 20160,\n 36698: 20303,\n 36699: 20805,\n 36700: 21313,\n 36701: 24467,\n 36702: 25102,\n 36703: 26580,\n 36704: 27713,\n 36705: 28171,\n 36706: 29539,\n 36707: 32294,\n 36708: 37325,\n 36709: 37507,\n 36710: 21460,\n 36711: 22809,\n 36712: 23487,\n 36713: 28113,\n 36714: 31069,\n 36715: 32302,\n 36716: 31899,\n 36717: 22654,\n 36718: 29087,\n 36719: 20986,\n 36720: 34899,\n 36721: 36848,\n 36722: 20426,\n 36723: 23803,\n 36724: 26149,\n 36725: 30636,\n 36726: 31459,\n 36727: 33308,\n 36728: 39423,\n 36729: 20934,\n 36730: 24490,\n 36731: 26092,\n 36732: 26991,\n 36733: 27529,\n 36734: 28147,\n 36736: 28310,\n 36737: 28516,\n 36738: 30462,\n 36739: 32020,\n 36740: 24033,\n 36741: 36981,\n 36742: 37255,\n 36743: 38918,\n 36744: 20966,\n 36745: 21021,\n 36746: 25152,\n 36747: 26257,\n 36748: 26329,\n 36749: 28186,\n 36750: 24246,\n 36751: 32210,\n 36752: 32626,\n 36753: 26360,\n 36754: 34223,\n 36755: 34295,\n 36756: 35576,\n 36757: 21161,\n 36758: 21465,\n 36759: 22899,\n 36760: 24207,\n 36761: 24464,\n 36762: 24661,\n 36763: 37604,\n 36764: 38500,\n 36765: 20663,\n 36766: 20767,\n 36767: 21213,\n 36768: 21280,\n 36769: 21319,\n 36770: 21484,\n 36771: 21736,\n 36772: 21830,\n 36773: 21809,\n 36774: 22039,\n 36775: 22888,\n 36776: 22974,\n 36777: 23100,\n 36778: 23477,\n 36779: 23558,\n 36780: 23567,\n 36781: 23569,\n 36782: 23578,\n 36783: 24196,\n 36784: 24202,\n 36785: 24288,\n 36786: 24432,\n 36787: 25215,\n 36788: 25220,\n 36789: 25307,\n 36790: 25484,\n 36791: 25463,\n 36792: 26119,\n 36793: 26124,\n 36794: 26157,\n 36795: 26230,\n 36796: 26494,\n 36797: 26786,\n 36798: 27167,\n 36799: 27189,\n 36800: 27836,\n 36801: 28040,\n 36802: 28169,\n 36803: 28248,\n 36804: 28988,\n 36805: 28966,\n 36806: 29031,\n 36807: 30151,\n 36808: 30465,\n 36809: 30813,\n 36810: 30977,\n 36811: 31077,\n 36812: 31216,\n 36813: 31456,\n 36814: 31505,\n 36815: 31911,\n 36816: 32057,\n 36817: 32918,\n 36818: 33750,\n 36819: 33931,\n 36820: 34121,\n 36821: 34909,\n 36822: 35059,\n 36823: 35359,\n 36824: 35388,\n 36825: 35412,\n 36826: 35443,\n 36827: 35937,\n 36828: 36062,\n 36829: 37284,\n 36830: 37478,\n 36831: 37758,\n 36832: 37912,\n 36833: 38556,\n 36834: 38808,\n 36835: 19978,\n 36836: 19976,\n 36837: 19998,\n 36838: 20055,\n 36839: 20887,\n 36840: 21104,\n 36841: 22478,\n 36842: 22580,\n 36843: 22732,\n 36844: 23330,\n 36845: 24120,\n 36846: 24773,\n 36847: 25854,\n 36848: 26465,\n 36849: 26454,\n 36850: 27972,\n 36851: 29366,\n 36852: 30067,\n 36853: 31331,\n 36854: 33976,\n 36855: 35698,\n 36856: 37304,\n 36857: 37664,\n 36858: 22065,\n 36859: 22516,\n 36860: 39166,\n 36928: 25325,\n 36929: 26893,\n 36930: 27542,\n 36931: 29165,\n 36932: 32340,\n 36933: 32887,\n 36934: 33394,\n 36935: 35302,\n 36936: 39135,\n 36937: 34645,\n 36938: 36785,\n 36939: 23611,\n 36940: 20280,\n 36941: 20449,\n 36942: 20405,\n 36943: 21767,\n 36944: 23072,\n 36945: 23517,\n 36946: 23529,\n 36947: 24515,\n 36948: 24910,\n 36949: 25391,\n 36950: 26032,\n 36951: 26187,\n 36952: 26862,\n 36953: 27035,\n 36954: 28024,\n 36955: 28145,\n 36956: 30003,\n 36957: 30137,\n 36958: 30495,\n 36959: 31070,\n 36960: 31206,\n 36961: 32051,\n 36962: 33251,\n 36963: 33455,\n 36964: 34218,\n 36965: 35242,\n 36966: 35386,\n 36967: 36523,\n 36968: 36763,\n 36969: 36914,\n 36970: 37341,\n 36971: 38663,\n 36972: 20154,\n 36973: 20161,\n 36974: 20995,\n 36975: 22645,\n 36976: 22764,\n 36977: 23563,\n 36978: 29978,\n 36979: 23613,\n 36980: 33102,\n 36981: 35338,\n 36982: 36805,\n 36983: 38499,\n 36984: 38765,\n 36985: 31525,\n 36986: 35535,\n 36987: 38920,\n 36988: 37218,\n 36989: 22259,\n 36990: 21416,\n 36992: 36887,\n 36993: 21561,\n 36994: 22402,\n 36995: 24101,\n 36996: 25512,\n 36997: 27700,\n 36998: 28810,\n 36999: 30561,\n 37e3: 31883,\n 37001: 32736,\n 37002: 34928,\n 37003: 36930,\n 37004: 37204,\n 37005: 37648,\n 37006: 37656,\n 37007: 38543,\n 37008: 29790,\n 37009: 39620,\n 37010: 23815,\n 37011: 23913,\n 37012: 25968,\n 37013: 26530,\n 37014: 36264,\n 37015: 38619,\n 37016: 25454,\n 37017: 26441,\n 37018: 26905,\n 37019: 33733,\n 37020: 38935,\n 37021: 38592,\n 37022: 35070,\n 37023: 28548,\n 37024: 25722,\n 37025: 23544,\n 37026: 19990,\n 37027: 28716,\n 37028: 30045,\n 37029: 26159,\n 37030: 20932,\n 37031: 21046,\n 37032: 21218,\n 37033: 22995,\n 37034: 24449,\n 37035: 24615,\n 37036: 25104,\n 37037: 25919,\n 37038: 25972,\n 37039: 26143,\n 37040: 26228,\n 37041: 26866,\n 37042: 26646,\n 37043: 27491,\n 37044: 28165,\n 37045: 29298,\n 37046: 29983,\n 37047: 30427,\n 37048: 31934,\n 37049: 32854,\n 37050: 22768,\n 37051: 35069,\n 37052: 35199,\n 37053: 35488,\n 37054: 35475,\n 37055: 35531,\n 37056: 36893,\n 37057: 37266,\n 37058: 38738,\n 37059: 38745,\n 37060: 25993,\n 37061: 31246,\n 37062: 33030,\n 37063: 38587,\n 37064: 24109,\n 37065: 24796,\n 37066: 25114,\n 37067: 26021,\n 37068: 26132,\n 37069: 26512,\n 37070: 30707,\n 37071: 31309,\n 37072: 31821,\n 37073: 32318,\n 37074: 33034,\n 37075: 36012,\n 37076: 36196,\n 37077: 36321,\n 37078: 36447,\n 37079: 30889,\n 37080: 20999,\n 37081: 25305,\n 37082: 25509,\n 37083: 25666,\n 37084: 25240,\n 37085: 35373,\n 37086: 31363,\n 37087: 31680,\n 37088: 35500,\n 37089: 38634,\n 37090: 32118,\n 37091: 33292,\n 37092: 34633,\n 37093: 20185,\n 37094: 20808,\n 37095: 21315,\n 37096: 21344,\n 37097: 23459,\n 37098: 23554,\n 37099: 23574,\n 37100: 24029,\n 37101: 25126,\n 37102: 25159,\n 37103: 25776,\n 37104: 26643,\n 37105: 26676,\n 37106: 27849,\n 37107: 27973,\n 37108: 27927,\n 37109: 26579,\n 37110: 28508,\n 37111: 29006,\n 37112: 29053,\n 37113: 26059,\n 37114: 31359,\n 37115: 31661,\n 37116: 32218,\n 37184: 32330,\n 37185: 32680,\n 37186: 33146,\n 37187: 33307,\n 37188: 33337,\n 37189: 34214,\n 37190: 35438,\n 37191: 36046,\n 37192: 36341,\n 37193: 36984,\n 37194: 36983,\n 37195: 37549,\n 37196: 37521,\n 37197: 38275,\n 37198: 39854,\n 37199: 21069,\n 37200: 21892,\n 37201: 28472,\n 37202: 28982,\n 37203: 20840,\n 37204: 31109,\n 37205: 32341,\n 37206: 33203,\n 37207: 31950,\n 37208: 22092,\n 37209: 22609,\n 37210: 23720,\n 37211: 25514,\n 37212: 26366,\n 37213: 26365,\n 37214: 26970,\n 37215: 29401,\n 37216: 30095,\n 37217: 30094,\n 37218: 30990,\n 37219: 31062,\n 37220: 31199,\n 37221: 31895,\n 37222: 32032,\n 37223: 32068,\n 37224: 34311,\n 37225: 35380,\n 37226: 38459,\n 37227: 36961,\n 37228: 40736,\n 37229: 20711,\n 37230: 21109,\n 37231: 21452,\n 37232: 21474,\n 37233: 20489,\n 37234: 21930,\n 37235: 22766,\n 37236: 22863,\n 37237: 29245,\n 37238: 23435,\n 37239: 23652,\n 37240: 21277,\n 37241: 24803,\n 37242: 24819,\n 37243: 25436,\n 37244: 25475,\n 37245: 25407,\n 37246: 25531,\n 37248: 25805,\n 37249: 26089,\n 37250: 26361,\n 37251: 24035,\n 37252: 27085,\n 37253: 27133,\n 37254: 28437,\n 37255: 29157,\n 37256: 20105,\n 37257: 30185,\n 37258: 30456,\n 37259: 31379,\n 37260: 31967,\n 37261: 32207,\n 37262: 32156,\n 37263: 32865,\n 37264: 33609,\n 37265: 33624,\n 37266: 33900,\n 37267: 33980,\n 37268: 34299,\n 37269: 35013,\n 37270: 36208,\n 37271: 36865,\n 37272: 36973,\n 37273: 37783,\n 37274: 38684,\n 37275: 39442,\n 37276: 20687,\n 37277: 22679,\n 37278: 24974,\n 37279: 33235,\n 37280: 34101,\n 37281: 36104,\n 37282: 36896,\n 37283: 20419,\n 37284: 20596,\n 37285: 21063,\n 37286: 21363,\n 37287: 24687,\n 37288: 25417,\n 37289: 26463,\n 37290: 28204,\n 37291: 36275,\n 37292: 36895,\n 37293: 20439,\n 37294: 23646,\n 37295: 36042,\n 37296: 26063,\n 37297: 32154,\n 37298: 21330,\n 37299: 34966,\n 37300: 20854,\n 37301: 25539,\n 37302: 23384,\n 37303: 23403,\n 37304: 23562,\n 37305: 25613,\n 37306: 26449,\n 37307: 36956,\n 37308: 20182,\n 37309: 22810,\n 37310: 22826,\n 37311: 27760,\n 37312: 35409,\n 37313: 21822,\n 37314: 22549,\n 37315: 22949,\n 37316: 24816,\n 37317: 25171,\n 37318: 26561,\n 37319: 33333,\n 37320: 26965,\n 37321: 38464,\n 37322: 39364,\n 37323: 39464,\n 37324: 20307,\n 37325: 22534,\n 37326: 23550,\n 37327: 32784,\n 37328: 23729,\n 37329: 24111,\n 37330: 24453,\n 37331: 24608,\n 37332: 24907,\n 37333: 25140,\n 37334: 26367,\n 37335: 27888,\n 37336: 28382,\n 37337: 32974,\n 37338: 33151,\n 37339: 33492,\n 37340: 34955,\n 37341: 36024,\n 37342: 36864,\n 37343: 36910,\n 37344: 38538,\n 37345: 40667,\n 37346: 39899,\n 37347: 20195,\n 37348: 21488,\n 37349: 22823,\n 37350: 31532,\n 37351: 37261,\n 37352: 38988,\n 37353: 40441,\n 37354: 28381,\n 37355: 28711,\n 37356: 21331,\n 37357: 21828,\n 37358: 23429,\n 37359: 25176,\n 37360: 25246,\n 37361: 25299,\n 37362: 27810,\n 37363: 28655,\n 37364: 29730,\n 37365: 35351,\n 37366: 37944,\n 37367: 28609,\n 37368: 35582,\n 37369: 33592,\n 37370: 20967,\n 37371: 34552,\n 37372: 21482,\n 37440: 21481,\n 37441: 20294,\n 37442: 36948,\n 37443: 36784,\n 37444: 22890,\n 37445: 33073,\n 37446: 24061,\n 37447: 31466,\n 37448: 36799,\n 37449: 26842,\n 37450: 35895,\n 37451: 29432,\n 37452: 40008,\n 37453: 27197,\n 37454: 35504,\n 37455: 20025,\n 37456: 21336,\n 37457: 22022,\n 37458: 22374,\n 37459: 25285,\n 37460: 25506,\n 37461: 26086,\n 37462: 27470,\n 37463: 28129,\n 37464: 28251,\n 37465: 28845,\n 37466: 30701,\n 37467: 31471,\n 37468: 31658,\n 37469: 32187,\n 37470: 32829,\n 37471: 32966,\n 37472: 34507,\n 37473: 35477,\n 37474: 37723,\n 37475: 22243,\n 37476: 22727,\n 37477: 24382,\n 37478: 26029,\n 37479: 26262,\n 37480: 27264,\n 37481: 27573,\n 37482: 30007,\n 37483: 35527,\n 37484: 20516,\n 37485: 30693,\n 37486: 22320,\n 37487: 24347,\n 37488: 24677,\n 37489: 26234,\n 37490: 27744,\n 37491: 30196,\n 37492: 31258,\n 37493: 32622,\n 37494: 33268,\n 37495: 34584,\n 37496: 36933,\n 37497: 39347,\n 37498: 31689,\n 37499: 30044,\n 37500: 31481,\n 37501: 31569,\n 37502: 33988,\n 37504: 36880,\n 37505: 31209,\n 37506: 31378,\n 37507: 33590,\n 37508: 23265,\n 37509: 30528,\n 37510: 20013,\n 37511: 20210,\n 37512: 23449,\n 37513: 24544,\n 37514: 25277,\n 37515: 26172,\n 37516: 26609,\n 37517: 27880,\n 37518: 34411,\n 37519: 34935,\n 37520: 35387,\n 37521: 37198,\n 37522: 37619,\n 37523: 39376,\n 37524: 27159,\n 37525: 28710,\n 37526: 29482,\n 37527: 33511,\n 37528: 33879,\n 37529: 36015,\n 37530: 19969,\n 37531: 20806,\n 37532: 20939,\n 37533: 21899,\n 37534: 23541,\n 37535: 24086,\n 37536: 24115,\n 37537: 24193,\n 37538: 24340,\n 37539: 24373,\n 37540: 24427,\n 37541: 24500,\n 37542: 25074,\n 37543: 25361,\n 37544: 26274,\n 37545: 26397,\n 37546: 28526,\n 37547: 29266,\n 37548: 30010,\n 37549: 30522,\n 37550: 32884,\n 37551: 33081,\n 37552: 33144,\n 37553: 34678,\n 37554: 35519,\n 37555: 35548,\n 37556: 36229,\n 37557: 36339,\n 37558: 37530,\n 37559: 38263,\n 37560: 38914,\n 37561: 40165,\n 37562: 21189,\n 37563: 25431,\n 37564: 30452,\n 37565: 26389,\n 37566: 27784,\n 37567: 29645,\n 37568: 36035,\n 37569: 37806,\n 37570: 38515,\n 37571: 27941,\n 37572: 22684,\n 37573: 26894,\n 37574: 27084,\n 37575: 36861,\n 37576: 37786,\n 37577: 30171,\n 37578: 36890,\n 37579: 22618,\n 37580: 26626,\n 37581: 25524,\n 37582: 27131,\n 37583: 20291,\n 37584: 28460,\n 37585: 26584,\n 37586: 36795,\n 37587: 34086,\n 37588: 32180,\n 37589: 37716,\n 37590: 26943,\n 37591: 28528,\n 37592: 22378,\n 37593: 22775,\n 37594: 23340,\n 37595: 32044,\n 37596: 29226,\n 37597: 21514,\n 37598: 37347,\n 37599: 40372,\n 37600: 20141,\n 37601: 20302,\n 37602: 20572,\n 37603: 20597,\n 37604: 21059,\n 37605: 35998,\n 37606: 21576,\n 37607: 22564,\n 37608: 23450,\n 37609: 24093,\n 37610: 24213,\n 37611: 24237,\n 37612: 24311,\n 37613: 24351,\n 37614: 24716,\n 37615: 25269,\n 37616: 25402,\n 37617: 25552,\n 37618: 26799,\n 37619: 27712,\n 37620: 30855,\n 37621: 31118,\n 37622: 31243,\n 37623: 32224,\n 37624: 33351,\n 37625: 35330,\n 37626: 35558,\n 37627: 36420,\n 37628: 36883,\n 37696: 37048,\n 37697: 37165,\n 37698: 37336,\n 37699: 40718,\n 37700: 27877,\n 37701: 25688,\n 37702: 25826,\n 37703: 25973,\n 37704: 28404,\n 37705: 30340,\n 37706: 31515,\n 37707: 36969,\n 37708: 37841,\n 37709: 28346,\n 37710: 21746,\n 37711: 24505,\n 37712: 25764,\n 37713: 36685,\n 37714: 36845,\n 37715: 37444,\n 37716: 20856,\n 37717: 22635,\n 37718: 22825,\n 37719: 23637,\n 37720: 24215,\n 37721: 28155,\n 37722: 32399,\n 37723: 29980,\n 37724: 36028,\n 37725: 36578,\n 37726: 39003,\n 37727: 28857,\n 37728: 20253,\n 37729: 27583,\n 37730: 28593,\n 37731: 3e4,\n 37732: 38651,\n 37733: 20814,\n 37734: 21520,\n 37735: 22581,\n 37736: 22615,\n 37737: 22956,\n 37738: 23648,\n 37739: 24466,\n 37740: 26007,\n 37741: 26460,\n 37742: 28193,\n 37743: 30331,\n 37744: 33759,\n 37745: 36077,\n 37746: 36884,\n 37747: 37117,\n 37748: 37709,\n 37749: 30757,\n 37750: 30778,\n 37751: 21162,\n 37752: 24230,\n 37753: 22303,\n 37754: 22900,\n 37755: 24594,\n 37756: 20498,\n 37757: 20826,\n 37758: 20908,\n 37760: 20941,\n 37761: 20992,\n 37762: 21776,\n 37763: 22612,\n 37764: 22616,\n 37765: 22871,\n 37766: 23445,\n 37767: 23798,\n 37768: 23947,\n 37769: 24764,\n 37770: 25237,\n 37771: 25645,\n 37772: 26481,\n 37773: 26691,\n 37774: 26812,\n 37775: 26847,\n 37776: 30423,\n 37777: 28120,\n 37778: 28271,\n 37779: 28059,\n 37780: 28783,\n 37781: 29128,\n 37782: 24403,\n 37783: 30168,\n 37784: 31095,\n 37785: 31561,\n 37786: 31572,\n 37787: 31570,\n 37788: 31958,\n 37789: 32113,\n 37790: 21040,\n 37791: 33891,\n 37792: 34153,\n 37793: 34276,\n 37794: 35342,\n 37795: 35588,\n 37796: 35910,\n 37797: 36367,\n 37798: 36867,\n 37799: 36879,\n 37800: 37913,\n 37801: 38518,\n 37802: 38957,\n 37803: 39472,\n 37804: 38360,\n 37805: 20685,\n 37806: 21205,\n 37807: 21516,\n 37808: 22530,\n 37809: 23566,\n 37810: 24999,\n 37811: 25758,\n 37812: 27934,\n 37813: 30643,\n 37814: 31461,\n 37815: 33012,\n 37816: 33796,\n 37817: 36947,\n 37818: 37509,\n 37819: 23776,\n 37820: 40199,\n 37821: 21311,\n 37822: 24471,\n 37823: 24499,\n 37824: 28060,\n 37825: 29305,\n 37826: 30563,\n 37827: 31167,\n 37828: 31716,\n 37829: 27602,\n 37830: 29420,\n 37831: 35501,\n 37832: 26627,\n 37833: 27233,\n 37834: 20984,\n 37835: 31361,\n 37836: 26932,\n 37837: 23626,\n 37838: 40182,\n 37839: 33515,\n 37840: 23493,\n 37841: 37193,\n 37842: 28702,\n 37843: 22136,\n 37844: 23663,\n 37845: 24775,\n 37846: 25958,\n 37847: 27788,\n 37848: 35930,\n 37849: 36929,\n 37850: 38931,\n 37851: 21585,\n 37852: 26311,\n 37853: 37389,\n 37854: 22856,\n 37855: 37027,\n 37856: 20869,\n 37857: 20045,\n 37858: 20970,\n 37859: 34201,\n 37860: 35598,\n 37861: 28760,\n 37862: 25466,\n 37863: 37707,\n 37864: 26978,\n 37865: 39348,\n 37866: 32260,\n 37867: 30071,\n 37868: 21335,\n 37869: 26976,\n 37870: 36575,\n 37871: 38627,\n 37872: 27741,\n 37873: 20108,\n 37874: 23612,\n 37875: 24336,\n 37876: 36841,\n 37877: 21250,\n 37878: 36049,\n 37879: 32905,\n 37880: 34425,\n 37881: 24319,\n 37882: 26085,\n 37883: 20083,\n 37884: 20837,\n 37952: 22914,\n 37953: 23615,\n 37954: 38894,\n 37955: 20219,\n 37956: 22922,\n 37957: 24525,\n 37958: 35469,\n 37959: 28641,\n 37960: 31152,\n 37961: 31074,\n 37962: 23527,\n 37963: 33905,\n 37964: 29483,\n 37965: 29105,\n 37966: 24180,\n 37967: 24565,\n 37968: 25467,\n 37969: 25754,\n 37970: 29123,\n 37971: 31896,\n 37972: 20035,\n 37973: 24316,\n 37974: 20043,\n 37975: 22492,\n 37976: 22178,\n 37977: 24745,\n 37978: 28611,\n 37979: 32013,\n 37980: 33021,\n 37981: 33075,\n 37982: 33215,\n 37983: 36786,\n 37984: 35223,\n 37985: 34468,\n 37986: 24052,\n 37987: 25226,\n 37988: 25773,\n 37989: 35207,\n 37990: 26487,\n 37991: 27874,\n 37992: 27966,\n 37993: 29750,\n 37994: 30772,\n 37995: 23110,\n 37996: 32629,\n 37997: 33453,\n 37998: 39340,\n 37999: 20467,\n 38e3: 24259,\n 38001: 25309,\n 38002: 25490,\n 38003: 25943,\n 38004: 26479,\n 38005: 30403,\n 38006: 29260,\n 38007: 32972,\n 38008: 32954,\n 38009: 36649,\n 38010: 37197,\n 38011: 20493,\n 38012: 22521,\n 38013: 23186,\n 38014: 26757,\n 38016: 26995,\n 38017: 29028,\n 38018: 29437,\n 38019: 36023,\n 38020: 22770,\n 38021: 36064,\n 38022: 38506,\n 38023: 36889,\n 38024: 34687,\n 38025: 31204,\n 38026: 30695,\n 38027: 33833,\n 38028: 20271,\n 38029: 21093,\n 38030: 21338,\n 38031: 25293,\n 38032: 26575,\n 38033: 27850,\n 38034: 30333,\n 38035: 31636,\n 38036: 31893,\n 38037: 33334,\n 38038: 34180,\n 38039: 36843,\n 38040: 26333,\n 38041: 28448,\n 38042: 29190,\n 38043: 32283,\n 38044: 33707,\n 38045: 39361,\n 38046: 40614,\n 38047: 20989,\n 38048: 31665,\n 38049: 30834,\n 38050: 31672,\n 38051: 32903,\n 38052: 31560,\n 38053: 27368,\n 38054: 24161,\n 38055: 32908,\n 38056: 30033,\n 38057: 30048,\n 38058: 20843,\n 38059: 37474,\n 38060: 28300,\n 38061: 30330,\n 38062: 37271,\n 38063: 39658,\n 38064: 20240,\n 38065: 32624,\n 38066: 25244,\n 38067: 31567,\n 38068: 38309,\n 38069: 40169,\n 38070: 22138,\n 38071: 22617,\n 38072: 34532,\n 38073: 38588,\n 38074: 20276,\n 38075: 21028,\n 38076: 21322,\n 38077: 21453,\n 38078: 21467,\n 38079: 24070,\n 38080: 25644,\n 38081: 26001,\n 38082: 26495,\n 38083: 27710,\n 38084: 27726,\n 38085: 29256,\n 38086: 29359,\n 38087: 29677,\n 38088: 30036,\n 38089: 32321,\n 38090: 33324,\n 38091: 34281,\n 38092: 36009,\n 38093: 31684,\n 38094: 37318,\n 38095: 29033,\n 38096: 38930,\n 38097: 39151,\n 38098: 25405,\n 38099: 26217,\n 38100: 30058,\n 38101: 30436,\n 38102: 30928,\n 38103: 34115,\n 38104: 34542,\n 38105: 21290,\n 38106: 21329,\n 38107: 21542,\n 38108: 22915,\n 38109: 24199,\n 38110: 24444,\n 38111: 24754,\n 38112: 25161,\n 38113: 25209,\n 38114: 25259,\n 38115: 26e3,\n 38116: 27604,\n 38117: 27852,\n 38118: 30130,\n 38119: 30382,\n 38120: 30865,\n 38121: 31192,\n 38122: 32203,\n 38123: 32631,\n 38124: 32933,\n 38125: 34987,\n 38126: 35513,\n 38127: 36027,\n 38128: 36991,\n 38129: 38750,\n 38130: 39131,\n 38131: 27147,\n 38132: 31800,\n 38133: 20633,\n 38134: 23614,\n 38135: 24494,\n 38136: 26503,\n 38137: 27608,\n 38138: 29749,\n 38139: 30473,\n 38140: 32654,\n 38208: 40763,\n 38209: 26570,\n 38210: 31255,\n 38211: 21305,\n 38212: 30091,\n 38213: 39661,\n 38214: 24422,\n 38215: 33181,\n 38216: 33777,\n 38217: 32920,\n 38218: 24380,\n 38219: 24517,\n 38220: 30050,\n 38221: 31558,\n 38222: 36924,\n 38223: 26727,\n 38224: 23019,\n 38225: 23195,\n 38226: 32016,\n 38227: 30334,\n 38228: 35628,\n 38229: 20469,\n 38230: 24426,\n 38231: 27161,\n 38232: 27703,\n 38233: 28418,\n 38234: 29922,\n 38235: 31080,\n 38236: 34920,\n 38237: 35413,\n 38238: 35961,\n 38239: 24287,\n 38240: 25551,\n 38241: 30149,\n 38242: 31186,\n 38243: 33495,\n 38244: 37672,\n 38245: 37618,\n 38246: 33948,\n 38247: 34541,\n 38248: 39981,\n 38249: 21697,\n 38250: 24428,\n 38251: 25996,\n 38252: 27996,\n 38253: 28693,\n 38254: 36007,\n 38255: 36051,\n 38256: 38971,\n 38257: 25935,\n 38258: 29942,\n 38259: 19981,\n 38260: 20184,\n 38261: 22496,\n 38262: 22827,\n 38263: 23142,\n 38264: 23500,\n 38265: 20904,\n 38266: 24067,\n 38267: 24220,\n 38268: 24598,\n 38269: 25206,\n 38270: 25975,\n 38272: 26023,\n 38273: 26222,\n 38274: 28014,\n 38275: 29238,\n 38276: 31526,\n 38277: 33104,\n 38278: 33178,\n 38279: 33433,\n 38280: 35676,\n 38281: 36e3,\n 38282: 36070,\n 38283: 36212,\n 38284: 38428,\n 38285: 38468,\n 38286: 20398,\n 38287: 25771,\n 38288: 27494,\n 38289: 33310,\n 38290: 33889,\n 38291: 34154,\n 38292: 37096,\n 38293: 23553,\n 38294: 26963,\n 38295: 39080,\n 38296: 33914,\n 38297: 34135,\n 38298: 20239,\n 38299: 21103,\n 38300: 24489,\n 38301: 24133,\n 38302: 26381,\n 38303: 31119,\n 38304: 33145,\n 38305: 35079,\n 38306: 35206,\n 38307: 28149,\n 38308: 24343,\n 38309: 25173,\n 38310: 27832,\n 38311: 20175,\n 38312: 29289,\n 38313: 39826,\n 38314: 20998,\n 38315: 21563,\n 38316: 22132,\n 38317: 22707,\n 38318: 24996,\n 38319: 25198,\n 38320: 28954,\n 38321: 22894,\n 38322: 31881,\n 38323: 31966,\n 38324: 32027,\n 38325: 38640,\n 38326: 25991,\n 38327: 32862,\n 38328: 19993,\n 38329: 20341,\n 38330: 20853,\n 38331: 22592,\n 38332: 24163,\n 38333: 24179,\n 38334: 24330,\n 38335: 26564,\n 38336: 20006,\n 38337: 34109,\n 38338: 38281,\n 38339: 38491,\n 38340: 31859,\n 38341: 38913,\n 38342: 20731,\n 38343: 22721,\n 38344: 30294,\n 38345: 30887,\n 38346: 21029,\n 38347: 30629,\n 38348: 34065,\n 38349: 31622,\n 38350: 20559,\n 38351: 22793,\n 38352: 29255,\n 38353: 31687,\n 38354: 32232,\n 38355: 36794,\n 38356: 36820,\n 38357: 36941,\n 38358: 20415,\n 38359: 21193,\n 38360: 23081,\n 38361: 24321,\n 38362: 38829,\n 38363: 20445,\n 38364: 33303,\n 38365: 37610,\n 38366: 22275,\n 38367: 25429,\n 38368: 27497,\n 38369: 29995,\n 38370: 35036,\n 38371: 36628,\n 38372: 31298,\n 38373: 21215,\n 38374: 22675,\n 38375: 24917,\n 38376: 25098,\n 38377: 26286,\n 38378: 27597,\n 38379: 31807,\n 38380: 33769,\n 38381: 20515,\n 38382: 20472,\n 38383: 21253,\n 38384: 21574,\n 38385: 22577,\n 38386: 22857,\n 38387: 23453,\n 38388: 23792,\n 38389: 23791,\n 38390: 23849,\n 38391: 24214,\n 38392: 25265,\n 38393: 25447,\n 38394: 25918,\n 38395: 26041,\n 38396: 26379,\n 38464: 27861,\n 38465: 27873,\n 38466: 28921,\n 38467: 30770,\n 38468: 32299,\n 38469: 32990,\n 38470: 33459,\n 38471: 33804,\n 38472: 34028,\n 38473: 34562,\n 38474: 35090,\n 38475: 35370,\n 38476: 35914,\n 38477: 37030,\n 38478: 37586,\n 38479: 39165,\n 38480: 40179,\n 38481: 40300,\n 38482: 20047,\n 38483: 20129,\n 38484: 20621,\n 38485: 21078,\n 38486: 22346,\n 38487: 22952,\n 38488: 24125,\n 38489: 24536,\n 38490: 24537,\n 38491: 25151,\n 38492: 26292,\n 38493: 26395,\n 38494: 26576,\n 38495: 26834,\n 38496: 20882,\n 38497: 32033,\n 38498: 32938,\n 38499: 33192,\n 38500: 35584,\n 38501: 35980,\n 38502: 36031,\n 38503: 37502,\n 38504: 38450,\n 38505: 21536,\n 38506: 38956,\n 38507: 21271,\n 38508: 20693,\n 38509: 21340,\n 38510: 22696,\n 38511: 25778,\n 38512: 26420,\n 38513: 29287,\n 38514: 30566,\n 38515: 31302,\n 38516: 37350,\n 38517: 21187,\n 38518: 27809,\n 38519: 27526,\n 38520: 22528,\n 38521: 24140,\n 38522: 22868,\n 38523: 26412,\n 38524: 32763,\n 38525: 20961,\n 38526: 30406,\n 38528: 25705,\n 38529: 30952,\n 38530: 39764,\n 38531: 40635,\n 38532: 22475,\n 38533: 22969,\n 38534: 26151,\n 38535: 26522,\n 38536: 27598,\n 38537: 21737,\n 38538: 27097,\n 38539: 24149,\n 38540: 33180,\n 38541: 26517,\n 38542: 39850,\n 38543: 26622,\n 38544: 40018,\n 38545: 26717,\n 38546: 20134,\n 38547: 20451,\n 38548: 21448,\n 38549: 25273,\n 38550: 26411,\n 38551: 27819,\n 38552: 36804,\n 38553: 20397,\n 38554: 32365,\n 38555: 40639,\n 38556: 19975,\n 38557: 24930,\n 38558: 28288,\n 38559: 28459,\n 38560: 34067,\n 38561: 21619,\n 38562: 26410,\n 38563: 39749,\n 38564: 24051,\n 38565: 31637,\n 38566: 23724,\n 38567: 23494,\n 38568: 34588,\n 38569: 28234,\n 38570: 34001,\n 38571: 31252,\n 38572: 33032,\n 38573: 22937,\n 38574: 31885,\n 38575: 27665,\n 38576: 30496,\n 38577: 21209,\n 38578: 22818,\n 38579: 28961,\n 38580: 29279,\n 38581: 30683,\n 38582: 38695,\n 38583: 40289,\n 38584: 26891,\n 38585: 23167,\n 38586: 23064,\n 38587: 20901,\n 38588: 21517,\n 38589: 21629,\n 38590: 26126,\n 38591: 30431,\n 38592: 36855,\n 38593: 37528,\n 38594: 40180,\n 38595: 23018,\n 38596: 29277,\n 38597: 28357,\n 38598: 20813,\n 38599: 26825,\n 38600: 32191,\n 38601: 32236,\n 38602: 38754,\n 38603: 40634,\n 38604: 25720,\n 38605: 27169,\n 38606: 33538,\n 38607: 22916,\n 38608: 23391,\n 38609: 27611,\n 38610: 29467,\n 38611: 30450,\n 38612: 32178,\n 38613: 32791,\n 38614: 33945,\n 38615: 20786,\n 38616: 26408,\n 38617: 40665,\n 38618: 30446,\n 38619: 26466,\n 38620: 21247,\n 38621: 39173,\n 38622: 23588,\n 38623: 25147,\n 38624: 31870,\n 38625: 36016,\n 38626: 21839,\n 38627: 24758,\n 38628: 32011,\n 38629: 38272,\n 38630: 21249,\n 38631: 20063,\n 38632: 20918,\n 38633: 22812,\n 38634: 29242,\n 38635: 32822,\n 38636: 37326,\n 38637: 24357,\n 38638: 30690,\n 38639: 21380,\n 38640: 24441,\n 38641: 32004,\n 38642: 34220,\n 38643: 35379,\n 38644: 36493,\n 38645: 38742,\n 38646: 26611,\n 38647: 34222,\n 38648: 37971,\n 38649: 24841,\n 38650: 24840,\n 38651: 27833,\n 38652: 30290,\n 38720: 35565,\n 38721: 36664,\n 38722: 21807,\n 38723: 20305,\n 38724: 20778,\n 38725: 21191,\n 38726: 21451,\n 38727: 23461,\n 38728: 24189,\n 38729: 24736,\n 38730: 24962,\n 38731: 25558,\n 38732: 26377,\n 38733: 26586,\n 38734: 28263,\n 38735: 28044,\n 38736: 29494,\n 38737: 29495,\n 38738: 30001,\n 38739: 31056,\n 38740: 35029,\n 38741: 35480,\n 38742: 36938,\n 38743: 37009,\n 38744: 37109,\n 38745: 38596,\n 38746: 34701,\n 38747: 22805,\n 38748: 20104,\n 38749: 20313,\n 38750: 19982,\n 38751: 35465,\n 38752: 36671,\n 38753: 38928,\n 38754: 20653,\n 38755: 24188,\n 38756: 22934,\n 38757: 23481,\n 38758: 24248,\n 38759: 25562,\n 38760: 25594,\n 38761: 25793,\n 38762: 26332,\n 38763: 26954,\n 38764: 27096,\n 38765: 27915,\n 38766: 28342,\n 38767: 29076,\n 38768: 29992,\n 38769: 31407,\n 38770: 32650,\n 38771: 32768,\n 38772: 33865,\n 38773: 33993,\n 38774: 35201,\n 38775: 35617,\n 38776: 36362,\n 38777: 36965,\n 38778: 38525,\n 38779: 39178,\n 38780: 24958,\n 38781: 25233,\n 38782: 27442,\n 38784: 27779,\n 38785: 28020,\n 38786: 32716,\n 38787: 32764,\n 38788: 28096,\n 38789: 32645,\n 38790: 34746,\n 38791: 35064,\n 38792: 26469,\n 38793: 33713,\n 38794: 38972,\n 38795: 38647,\n 38796: 27931,\n 38797: 32097,\n 38798: 33853,\n 38799: 37226,\n 38800: 20081,\n 38801: 21365,\n 38802: 23888,\n 38803: 27396,\n 38804: 28651,\n 38805: 34253,\n 38806: 34349,\n 38807: 35239,\n 38808: 21033,\n 38809: 21519,\n 38810: 23653,\n 38811: 26446,\n 38812: 26792,\n 38813: 29702,\n 38814: 29827,\n 38815: 30178,\n 38816: 35023,\n 38817: 35041,\n 38818: 37324,\n 38819: 38626,\n 38820: 38520,\n 38821: 24459,\n 38822: 29575,\n 38823: 31435,\n 38824: 33870,\n 38825: 25504,\n 38826: 30053,\n 38827: 21129,\n 38828: 27969,\n 38829: 28316,\n 38830: 29705,\n 38831: 30041,\n 38832: 30827,\n 38833: 31890,\n 38834: 38534,\n 38835: 31452,\n 38836: 40845,\n 38837: 20406,\n 38838: 24942,\n 38839: 26053,\n 38840: 34396,\n 38841: 20102,\n 38842: 20142,\n 38843: 20698,\n 38844: 20001,\n 38845: 20940,\n 38846: 23534,\n 38847: 26009,\n 38848: 26753,\n 38849: 28092,\n 38850: 29471,\n 38851: 30274,\n 38852: 30637,\n 38853: 31260,\n 38854: 31975,\n 38855: 33391,\n 38856: 35538,\n 38857: 36988,\n 38858: 37327,\n 38859: 38517,\n 38860: 38936,\n 38861: 21147,\n 38862: 32209,\n 38863: 20523,\n 38864: 21400,\n 38865: 26519,\n 38866: 28107,\n 38867: 29136,\n 38868: 29747,\n 38869: 33256,\n 38870: 36650,\n 38871: 38563,\n 38872: 40023,\n 38873: 40607,\n 38874: 29792,\n 38875: 22593,\n 38876: 28057,\n 38877: 32047,\n 38878: 39006,\n 38879: 20196,\n 38880: 20278,\n 38881: 20363,\n 38882: 20919,\n 38883: 21169,\n 38884: 23994,\n 38885: 24604,\n 38886: 29618,\n 38887: 31036,\n 38888: 33491,\n 38889: 37428,\n 38890: 38583,\n 38891: 38646,\n 38892: 38666,\n 38893: 40599,\n 38894: 40802,\n 38895: 26278,\n 38896: 27508,\n 38897: 21015,\n 38898: 21155,\n 38899: 28872,\n 38900: 35010,\n 38901: 24265,\n 38902: 24651,\n 38903: 24976,\n 38904: 28451,\n 38905: 29001,\n 38906: 31806,\n 38907: 32244,\n 38908: 32879,\n 38976: 34030,\n 38977: 36899,\n 38978: 37676,\n 38979: 21570,\n 38980: 39791,\n 38981: 27347,\n 38982: 28809,\n 38983: 36034,\n 38984: 36335,\n 38985: 38706,\n 38986: 21172,\n 38987: 23105,\n 38988: 24266,\n 38989: 24324,\n 38990: 26391,\n 38991: 27004,\n 38992: 27028,\n 38993: 28010,\n 38994: 28431,\n 38995: 29282,\n 38996: 29436,\n 38997: 31725,\n 38998: 32769,\n 38999: 32894,\n 39e3: 34635,\n 39001: 37070,\n 39002: 20845,\n 39003: 40595,\n 39004: 31108,\n 39005: 32907,\n 39006: 37682,\n 39007: 35542,\n 39008: 20525,\n 39009: 21644,\n 39010: 35441,\n 39011: 27498,\n 39012: 36036,\n 39013: 33031,\n 39014: 24785,\n 39015: 26528,\n 39016: 40434,\n 39017: 20121,\n 39018: 20120,\n 39019: 39952,\n 39020: 35435,\n 39021: 34241,\n 39022: 34152,\n 39023: 26880,\n 39024: 28286,\n 39025: 30871,\n 39026: 33109,\n 39071: 24332,\n 39072: 19984,\n 39073: 19989,\n 39074: 20010,\n 39075: 20017,\n 39076: 20022,\n 39077: 20028,\n 39078: 20031,\n 39079: 20034,\n 39080: 20054,\n 39081: 20056,\n 39082: 20098,\n 39083: 20101,\n 39084: 35947,\n 39085: 20106,\n 39086: 33298,\n 39087: 24333,\n 39088: 20110,\n 39089: 20126,\n 39090: 20127,\n 39091: 20128,\n 39092: 20130,\n 39093: 20144,\n 39094: 20147,\n 39095: 20150,\n 39096: 20174,\n 39097: 20173,\n 39098: 20164,\n 39099: 20166,\n 39100: 20162,\n 39101: 20183,\n 39102: 20190,\n 39103: 20205,\n 39104: 20191,\n 39105: 20215,\n 39106: 20233,\n 39107: 20314,\n 39108: 20272,\n 39109: 20315,\n 39110: 20317,\n 39111: 20311,\n 39112: 20295,\n 39113: 20342,\n 39114: 20360,\n 39115: 20367,\n 39116: 20376,\n 39117: 20347,\n 39118: 20329,\n 39119: 20336,\n 39120: 20369,\n 39121: 20335,\n 39122: 20358,\n 39123: 20374,\n 39124: 20760,\n 39125: 20436,\n 39126: 20447,\n 39127: 20430,\n 39128: 20440,\n 39129: 20443,\n 39130: 20433,\n 39131: 20442,\n 39132: 20432,\n 39133: 20452,\n 39134: 20453,\n 39135: 20506,\n 39136: 20520,\n 39137: 20500,\n 39138: 20522,\n 39139: 20517,\n 39140: 20485,\n 39141: 20252,\n 39142: 20470,\n 39143: 20513,\n 39144: 20521,\n 39145: 20524,\n 39146: 20478,\n 39147: 20463,\n 39148: 20497,\n 39149: 20486,\n 39150: 20547,\n 39151: 20551,\n 39152: 26371,\n 39153: 20565,\n 39154: 20560,\n 39155: 20552,\n 39156: 20570,\n 39157: 20566,\n 39158: 20588,\n 39159: 20600,\n 39160: 20608,\n 39161: 20634,\n 39162: 20613,\n 39163: 20660,\n 39164: 20658,\n 39232: 20681,\n 39233: 20682,\n 39234: 20659,\n 39235: 20674,\n 39236: 20694,\n 39237: 20702,\n 39238: 20709,\n 39239: 20717,\n 39240: 20707,\n 39241: 20718,\n 39242: 20729,\n 39243: 20725,\n 39244: 20745,\n 39245: 20737,\n 39246: 20738,\n 39247: 20758,\n 39248: 20757,\n 39249: 20756,\n 39250: 20762,\n 39251: 20769,\n 39252: 20794,\n 39253: 20791,\n 39254: 20796,\n 39255: 20795,\n 39256: 20799,\n 39257: 20800,\n 39258: 20818,\n 39259: 20812,\n 39260: 20820,\n 39261: 20834,\n 39262: 31480,\n 39263: 20841,\n 39264: 20842,\n 39265: 20846,\n 39266: 20864,\n 39267: 20866,\n 39268: 22232,\n 39269: 20876,\n 39270: 20873,\n 39271: 20879,\n 39272: 20881,\n 39273: 20883,\n 39274: 20885,\n 39275: 20886,\n 39276: 20900,\n 39277: 20902,\n 39278: 20898,\n 39279: 20905,\n 39280: 20906,\n 39281: 20907,\n 39282: 20915,\n 39283: 20913,\n 39284: 20914,\n 39285: 20912,\n 39286: 20917,\n 39287: 20925,\n 39288: 20933,\n 39289: 20937,\n 39290: 20955,\n 39291: 20960,\n 39292: 34389,\n 39293: 20969,\n 39294: 20973,\n 39296: 20976,\n 39297: 20981,\n 39298: 20990,\n 39299: 20996,\n 39300: 21003,\n 39301: 21012,\n 39302: 21006,\n 39303: 21031,\n 39304: 21034,\n 39305: 21038,\n 39306: 21043,\n 39307: 21049,\n 39308: 21071,\n 39309: 21060,\n 39310: 21067,\n 39311: 21068,\n 39312: 21086,\n 39313: 21076,\n 39314: 21098,\n 39315: 21108,\n 39316: 21097,\n 39317: 21107,\n 39318: 21119,\n 39319: 21117,\n 39320: 21133,\n 39321: 21140,\n 39322: 21138,\n 39323: 21105,\n 39324: 21128,\n 39325: 21137,\n 39326: 36776,\n 39327: 36775,\n 39328: 21164,\n 39329: 21165,\n 39330: 21180,\n 39331: 21173,\n 39332: 21185,\n 39333: 21197,\n 39334: 21207,\n 39335: 21214,\n 39336: 21219,\n 39337: 21222,\n 39338: 39149,\n 39339: 21216,\n 39340: 21235,\n 39341: 21237,\n 39342: 21240,\n 39343: 21241,\n 39344: 21254,\n 39345: 21256,\n 39346: 30008,\n 39347: 21261,\n 39348: 21264,\n 39349: 21263,\n 39350: 21269,\n 39351: 21274,\n 39352: 21283,\n 39353: 21295,\n 39354: 21297,\n 39355: 21299,\n 39356: 21304,\n 39357: 21312,\n 39358: 21318,\n 39359: 21317,\n 39360: 19991,\n 39361: 21321,\n 39362: 21325,\n 39363: 20950,\n 39364: 21342,\n 39365: 21353,\n 39366: 21358,\n 39367: 22808,\n 39368: 21371,\n 39369: 21367,\n 39370: 21378,\n 39371: 21398,\n 39372: 21408,\n 39373: 21414,\n 39374: 21413,\n 39375: 21422,\n 39376: 21424,\n 39377: 21430,\n 39378: 21443,\n 39379: 31762,\n 39380: 38617,\n 39381: 21471,\n 39382: 26364,\n 39383: 29166,\n 39384: 21486,\n 39385: 21480,\n 39386: 21485,\n 39387: 21498,\n 39388: 21505,\n 39389: 21565,\n 39390: 21568,\n 39391: 21548,\n 39392: 21549,\n 39393: 21564,\n 39394: 21550,\n 39395: 21558,\n 39396: 21545,\n 39397: 21533,\n 39398: 21582,\n 39399: 21647,\n 39400: 21621,\n 39401: 21646,\n 39402: 21599,\n 39403: 21617,\n 39404: 21623,\n 39405: 21616,\n 39406: 21650,\n 39407: 21627,\n 39408: 21632,\n 39409: 21622,\n 39410: 21636,\n 39411: 21648,\n 39412: 21638,\n 39413: 21703,\n 39414: 21666,\n 39415: 21688,\n 39416: 21669,\n 39417: 21676,\n 39418: 21700,\n 39419: 21704,\n 39420: 21672,\n 39488: 21675,\n 39489: 21698,\n 39490: 21668,\n 39491: 21694,\n 39492: 21692,\n 39493: 21720,\n 39494: 21733,\n 39495: 21734,\n 39496: 21775,\n 39497: 21780,\n 39498: 21757,\n 39499: 21742,\n 39500: 21741,\n 39501: 21754,\n 39502: 21730,\n 39503: 21817,\n 39504: 21824,\n 39505: 21859,\n 39506: 21836,\n 39507: 21806,\n 39508: 21852,\n 39509: 21829,\n 39510: 21846,\n 39511: 21847,\n 39512: 21816,\n 39513: 21811,\n 39514: 21853,\n 39515: 21913,\n 39516: 21888,\n 39517: 21679,\n 39518: 21898,\n 39519: 21919,\n 39520: 21883,\n 39521: 21886,\n 39522: 21912,\n 39523: 21918,\n 39524: 21934,\n 39525: 21884,\n 39526: 21891,\n 39527: 21929,\n 39528: 21895,\n 39529: 21928,\n 39530: 21978,\n 39531: 21957,\n 39532: 21983,\n 39533: 21956,\n 39534: 21980,\n 39535: 21988,\n 39536: 21972,\n 39537: 22036,\n 39538: 22007,\n 39539: 22038,\n 39540: 22014,\n 39541: 22013,\n 39542: 22043,\n 39543: 22009,\n 39544: 22094,\n 39545: 22096,\n 39546: 29151,\n 39547: 22068,\n 39548: 22070,\n 39549: 22066,\n 39550: 22072,\n 39552: 22123,\n 39553: 22116,\n 39554: 22063,\n 39555: 22124,\n 39556: 22122,\n 39557: 22150,\n 39558: 22144,\n 39559: 22154,\n 39560: 22176,\n 39561: 22164,\n 39562: 22159,\n 39563: 22181,\n 39564: 22190,\n 39565: 22198,\n 39566: 22196,\n 39567: 22210,\n 39568: 22204,\n 39569: 22209,\n 39570: 22211,\n 39571: 22208,\n 39572: 22216,\n 39573: 22222,\n 39574: 22225,\n 39575: 22227,\n 39576: 22231,\n 39577: 22254,\n 39578: 22265,\n 39579: 22272,\n 39580: 22271,\n 39581: 22276,\n 39582: 22281,\n 39583: 22280,\n 39584: 22283,\n 39585: 22285,\n 39586: 22291,\n 39587: 22296,\n 39588: 22294,\n 39589: 21959,\n 39590: 22300,\n 39591: 22310,\n 39592: 22327,\n 39593: 22328,\n 39594: 22350,\n 39595: 22331,\n 39596: 22336,\n 39597: 22351,\n 39598: 22377,\n 39599: 22464,\n 39600: 22408,\n 39601: 22369,\n 39602: 22399,\n 39603: 22409,\n 39604: 22419,\n 39605: 22432,\n 39606: 22451,\n 39607: 22436,\n 39608: 22442,\n 39609: 22448,\n 39610: 22467,\n 39611: 22470,\n 39612: 22484,\n 39613: 22482,\n 39614: 22483,\n 39615: 22538,\n 39616: 22486,\n 39617: 22499,\n 39618: 22539,\n 39619: 22553,\n 39620: 22557,\n 39621: 22642,\n 39622: 22561,\n 39623: 22626,\n 39624: 22603,\n 39625: 22640,\n 39626: 27584,\n 39627: 22610,\n 39628: 22589,\n 39629: 22649,\n 39630: 22661,\n 39631: 22713,\n 39632: 22687,\n 39633: 22699,\n 39634: 22714,\n 39635: 22750,\n 39636: 22715,\n 39637: 22712,\n 39638: 22702,\n 39639: 22725,\n 39640: 22739,\n 39641: 22737,\n 39642: 22743,\n 39643: 22745,\n 39644: 22744,\n 39645: 22757,\n 39646: 22748,\n 39647: 22756,\n 39648: 22751,\n 39649: 22767,\n 39650: 22778,\n 39651: 22777,\n 39652: 22779,\n 39653: 22780,\n 39654: 22781,\n 39655: 22786,\n 39656: 22794,\n 39657: 22800,\n 39658: 22811,\n 39659: 26790,\n 39660: 22821,\n 39661: 22828,\n 39662: 22829,\n 39663: 22834,\n 39664: 22840,\n 39665: 22846,\n 39666: 31442,\n 39667: 22869,\n 39668: 22864,\n 39669: 22862,\n 39670: 22874,\n 39671: 22872,\n 39672: 22882,\n 39673: 22880,\n 39674: 22887,\n 39675: 22892,\n 39676: 22889,\n 39744: 22904,\n 39745: 22913,\n 39746: 22941,\n 39747: 20318,\n 39748: 20395,\n 39749: 22947,\n 39750: 22962,\n 39751: 22982,\n 39752: 23016,\n 39753: 23004,\n 39754: 22925,\n 39755: 23001,\n 39756: 23002,\n 39757: 23077,\n 39758: 23071,\n 39759: 23057,\n 39760: 23068,\n 39761: 23049,\n 39762: 23066,\n 39763: 23104,\n 39764: 23148,\n 39765: 23113,\n 39766: 23093,\n 39767: 23094,\n 39768: 23138,\n 39769: 23146,\n 39770: 23194,\n 39771: 23228,\n 39772: 23230,\n 39773: 23243,\n 39774: 23234,\n 39775: 23229,\n 39776: 23267,\n 39777: 23255,\n 39778: 23270,\n 39779: 23273,\n 39780: 23254,\n 39781: 23290,\n 39782: 23291,\n 39783: 23308,\n 39784: 23307,\n 39785: 23318,\n 39786: 23346,\n 39787: 23248,\n 39788: 23338,\n 39789: 23350,\n 39790: 23358,\n 39791: 23363,\n 39792: 23365,\n 39793: 23360,\n 39794: 23377,\n 39795: 23381,\n 39796: 23386,\n 39797: 23387,\n 39798: 23397,\n 39799: 23401,\n 39800: 23408,\n 39801: 23411,\n 39802: 23413,\n 39803: 23416,\n 39804: 25992,\n 39805: 23418,\n 39806: 23424,\n 39808: 23427,\n 39809: 23462,\n 39810: 23480,\n 39811: 23491,\n 39812: 23495,\n 39813: 23497,\n 39814: 23508,\n 39815: 23504,\n 39816: 23524,\n 39817: 23526,\n 39818: 23522,\n 39819: 23518,\n 39820: 23525,\n 39821: 23531,\n 39822: 23536,\n 39823: 23542,\n 39824: 23539,\n 39825: 23557,\n 39826: 23559,\n 39827: 23560,\n 39828: 23565,\n 39829: 23571,\n 39830: 23584,\n 39831: 23586,\n 39832: 23592,\n 39833: 23608,\n 39834: 23609,\n 39835: 23617,\n 39836: 23622,\n 39837: 23630,\n 39838: 23635,\n 39839: 23632,\n 39840: 23631,\n 39841: 23409,\n 39842: 23660,\n 39843: 23662,\n 39844: 20066,\n 39845: 23670,\n 39846: 23673,\n 39847: 23692,\n 39848: 23697,\n 39849: 23700,\n 39850: 22939,\n 39851: 23723,\n 39852: 23739,\n 39853: 23734,\n 39854: 23740,\n 39855: 23735,\n 39856: 23749,\n 39857: 23742,\n 39858: 23751,\n 39859: 23769,\n 39860: 23785,\n 39861: 23805,\n 39862: 23802,\n 39863: 23789,\n 39864: 23948,\n 39865: 23786,\n 39866: 23819,\n 39867: 23829,\n 39868: 23831,\n 39869: 23900,\n 39870: 23839,\n 39871: 23835,\n 39872: 23825,\n 39873: 23828,\n 39874: 23842,\n 39875: 23834,\n 39876: 23833,\n 39877: 23832,\n 39878: 23884,\n 39879: 23890,\n 39880: 23886,\n 39881: 23883,\n 39882: 23916,\n 39883: 23923,\n 39884: 23926,\n 39885: 23943,\n 39886: 23940,\n 39887: 23938,\n 39888: 23970,\n 39889: 23965,\n 39890: 23980,\n 39891: 23982,\n 39892: 23997,\n 39893: 23952,\n 39894: 23991,\n 39895: 23996,\n 39896: 24009,\n 39897: 24013,\n 39898: 24019,\n 39899: 24018,\n 39900: 24022,\n 39901: 24027,\n 39902: 24043,\n 39903: 24050,\n 39904: 24053,\n 39905: 24075,\n 39906: 24090,\n 39907: 24089,\n 39908: 24081,\n 39909: 24091,\n 39910: 24118,\n 39911: 24119,\n 39912: 24132,\n 39913: 24131,\n 39914: 24128,\n 39915: 24142,\n 39916: 24151,\n 39917: 24148,\n 39918: 24159,\n 39919: 24162,\n 39920: 24164,\n 39921: 24135,\n 39922: 24181,\n 39923: 24182,\n 39924: 24186,\n 39925: 40636,\n 39926: 24191,\n 39927: 24224,\n 39928: 24257,\n 39929: 24258,\n 39930: 24264,\n 39931: 24272,\n 39932: 24271,\n 4e4: 24278,\n 40001: 24291,\n 40002: 24285,\n 40003: 24282,\n 40004: 24283,\n 40005: 24290,\n 40006: 24289,\n 40007: 24296,\n 40008: 24297,\n 40009: 24300,\n 40010: 24305,\n 40011: 24307,\n 40012: 24304,\n 40013: 24308,\n 40014: 24312,\n 40015: 24318,\n 40016: 24323,\n 40017: 24329,\n 40018: 24413,\n 40019: 24412,\n 40020: 24331,\n 40021: 24337,\n 40022: 24342,\n 40023: 24361,\n 40024: 24365,\n 40025: 24376,\n 40026: 24385,\n 40027: 24392,\n 40028: 24396,\n 40029: 24398,\n 40030: 24367,\n 40031: 24401,\n 40032: 24406,\n 40033: 24407,\n 40034: 24409,\n 40035: 24417,\n 40036: 24429,\n 40037: 24435,\n 40038: 24439,\n 40039: 24451,\n 40040: 24450,\n 40041: 24447,\n 40042: 24458,\n 40043: 24456,\n 40044: 24465,\n 40045: 24455,\n 40046: 24478,\n 40047: 24473,\n 40048: 24472,\n 40049: 24480,\n 40050: 24488,\n 40051: 24493,\n 40052: 24508,\n 40053: 24534,\n 40054: 24571,\n 40055: 24548,\n 40056: 24568,\n 40057: 24561,\n 40058: 24541,\n 40059: 24755,\n 40060: 24575,\n 40061: 24609,\n 40062: 24672,\n 40064: 24601,\n 40065: 24592,\n 40066: 24617,\n 40067: 24590,\n 40068: 24625,\n 40069: 24603,\n 40070: 24597,\n 40071: 24619,\n 40072: 24614,\n 40073: 24591,\n 40074: 24634,\n 40075: 24666,\n 40076: 24641,\n 40077: 24682,\n 40078: 24695,\n 40079: 24671,\n 40080: 24650,\n 40081: 24646,\n 40082: 24653,\n 40083: 24675,\n 40084: 24643,\n 40085: 24676,\n 40086: 24642,\n 40087: 24684,\n 40088: 24683,\n 40089: 24665,\n 40090: 24705,\n 40091: 24717,\n 40092: 24807,\n 40093: 24707,\n 40094: 24730,\n 40095: 24708,\n 40096: 24731,\n 40097: 24726,\n 40098: 24727,\n 40099: 24722,\n 40100: 24743,\n 40101: 24715,\n 40102: 24801,\n 40103: 24760,\n 40104: 24800,\n 40105: 24787,\n 40106: 24756,\n 40107: 24560,\n 40108: 24765,\n 40109: 24774,\n 40110: 24757,\n 40111: 24792,\n 40112: 24909,\n 40113: 24853,\n 40114: 24838,\n 40115: 24822,\n 40116: 24823,\n 40117: 24832,\n 40118: 24820,\n 40119: 24826,\n 40120: 24835,\n 40121: 24865,\n 40122: 24827,\n 40123: 24817,\n 40124: 24845,\n 40125: 24846,\n 40126: 24903,\n 40127: 24894,\n 40128: 24872,\n 40129: 24871,\n 40130: 24906,\n 40131: 24895,\n 40132: 24892,\n 40133: 24876,\n 40134: 24884,\n 40135: 24893,\n 40136: 24898,\n 40137: 24900,\n 40138: 24947,\n 40139: 24951,\n 40140: 24920,\n 40141: 24921,\n 40142: 24922,\n 40143: 24939,\n 40144: 24948,\n 40145: 24943,\n 40146: 24933,\n 40147: 24945,\n 40148: 24927,\n 40149: 24925,\n 40150: 24915,\n 40151: 24949,\n 40152: 24985,\n 40153: 24982,\n 40154: 24967,\n 40155: 25004,\n 40156: 24980,\n 40157: 24986,\n 40158: 24970,\n 40159: 24977,\n 40160: 25003,\n 40161: 25006,\n 40162: 25036,\n 40163: 25034,\n 40164: 25033,\n 40165: 25079,\n 40166: 25032,\n 40167: 25027,\n 40168: 25030,\n 40169: 25018,\n 40170: 25035,\n 40171: 32633,\n 40172: 25037,\n 40173: 25062,\n 40174: 25059,\n 40175: 25078,\n 40176: 25082,\n 40177: 25076,\n 40178: 25087,\n 40179: 25085,\n 40180: 25084,\n 40181: 25086,\n 40182: 25088,\n 40183: 25096,\n 40184: 25097,\n 40185: 25101,\n 40186: 25100,\n 40187: 25108,\n 40188: 25115,\n 40256: 25118,\n 40257: 25121,\n 40258: 25130,\n 40259: 25134,\n 40260: 25136,\n 40261: 25138,\n 40262: 25139,\n 40263: 25153,\n 40264: 25166,\n 40265: 25182,\n 40266: 25187,\n 40267: 25179,\n 40268: 25184,\n 40269: 25192,\n 40270: 25212,\n 40271: 25218,\n 40272: 25225,\n 40273: 25214,\n 40274: 25234,\n 40275: 25235,\n 40276: 25238,\n 40277: 25300,\n 40278: 25219,\n 40279: 25236,\n 40280: 25303,\n 40281: 25297,\n 40282: 25275,\n 40283: 25295,\n 40284: 25343,\n 40285: 25286,\n 40286: 25812,\n 40287: 25288,\n 40288: 25308,\n 40289: 25292,\n 40290: 25290,\n 40291: 25282,\n 40292: 25287,\n 40293: 25243,\n 40294: 25289,\n 40295: 25356,\n 40296: 25326,\n 40297: 25329,\n 40298: 25383,\n 40299: 25346,\n 40300: 25352,\n 40301: 25327,\n 40302: 25333,\n 40303: 25424,\n 40304: 25406,\n 40305: 25421,\n 40306: 25628,\n 40307: 25423,\n 40308: 25494,\n 40309: 25486,\n 40310: 25472,\n 40311: 25515,\n 40312: 25462,\n 40313: 25507,\n 40314: 25487,\n 40315: 25481,\n 40316: 25503,\n 40317: 25525,\n 40318: 25451,\n 40320: 25449,\n 40321: 25534,\n 40322: 25577,\n 40323: 25536,\n 40324: 25542,\n 40325: 25571,\n 40326: 25545,\n 40327: 25554,\n 40328: 25590,\n 40329: 25540,\n 40330: 25622,\n 40331: 25652,\n 40332: 25606,\n 40333: 25619,\n 40334: 25638,\n 40335: 25654,\n 40336: 25885,\n 40337: 25623,\n 40338: 25640,\n 40339: 25615,\n 40340: 25703,\n 40341: 25711,\n 40342: 25718,\n 40343: 25678,\n 40344: 25898,\n 40345: 25749,\n 40346: 25747,\n 40347: 25765,\n 40348: 25769,\n 40349: 25736,\n 40350: 25788,\n 40351: 25818,\n 40352: 25810,\n 40353: 25797,\n 40354: 25799,\n 40355: 25787,\n 40356: 25816,\n 40357: 25794,\n 40358: 25841,\n 40359: 25831,\n 40360: 33289,\n 40361: 25824,\n 40362: 25825,\n 40363: 25260,\n 40364: 25827,\n 40365: 25839,\n 40366: 25900,\n 40367: 25846,\n 40368: 25844,\n 40369: 25842,\n 40370: 25850,\n 40371: 25856,\n 40372: 25853,\n 40373: 25880,\n 40374: 25884,\n 40375: 25861,\n 40376: 25892,\n 40377: 25891,\n 40378: 25899,\n 40379: 25908,\n 40380: 25909,\n 40381: 25911,\n 40382: 25910,\n 40383: 25912,\n 40384: 30027,\n 40385: 25928,\n 40386: 25942,\n 40387: 25941,\n 40388: 25933,\n 40389: 25944,\n 40390: 25950,\n 40391: 25949,\n 40392: 25970,\n 40393: 25976,\n 40394: 25986,\n 40395: 25987,\n 40396: 35722,\n 40397: 26011,\n 40398: 26015,\n 40399: 26027,\n 40400: 26039,\n 40401: 26051,\n 40402: 26054,\n 40403: 26049,\n 40404: 26052,\n 40405: 26060,\n 40406: 26066,\n 40407: 26075,\n 40408: 26073,\n 40409: 26080,\n 40410: 26081,\n 40411: 26097,\n 40412: 26482,\n 40413: 26122,\n 40414: 26115,\n 40415: 26107,\n 40416: 26483,\n 40417: 26165,\n 40418: 26166,\n 40419: 26164,\n 40420: 26140,\n 40421: 26191,\n 40422: 26180,\n 40423: 26185,\n 40424: 26177,\n 40425: 26206,\n 40426: 26205,\n 40427: 26212,\n 40428: 26215,\n 40429: 26216,\n 40430: 26207,\n 40431: 26210,\n 40432: 26224,\n 40433: 26243,\n 40434: 26248,\n 40435: 26254,\n 40436: 26249,\n 40437: 26244,\n 40438: 26264,\n 40439: 26269,\n 40440: 26305,\n 40441: 26297,\n 40442: 26313,\n 40443: 26302,\n 40444: 26300,\n 40512: 26308,\n 40513: 26296,\n 40514: 26326,\n 40515: 26330,\n 40516: 26336,\n 40517: 26175,\n 40518: 26342,\n 40519: 26345,\n 40520: 26352,\n 40521: 26357,\n 40522: 26359,\n 40523: 26383,\n 40524: 26390,\n 40525: 26398,\n 40526: 26406,\n 40527: 26407,\n 40528: 38712,\n 40529: 26414,\n 40530: 26431,\n 40531: 26422,\n 40532: 26433,\n 40533: 26424,\n 40534: 26423,\n 40535: 26438,\n 40536: 26462,\n 40537: 26464,\n 40538: 26457,\n 40539: 26467,\n 40540: 26468,\n 40541: 26505,\n 40542: 26480,\n 40543: 26537,\n 40544: 26492,\n 40545: 26474,\n 40546: 26508,\n 40547: 26507,\n 40548: 26534,\n 40549: 26529,\n 40550: 26501,\n 40551: 26551,\n 40552: 26607,\n 40553: 26548,\n 40554: 26604,\n 40555: 26547,\n 40556: 26601,\n 40557: 26552,\n 40558: 26596,\n 40559: 26590,\n 40560: 26589,\n 40561: 26594,\n 40562: 26606,\n 40563: 26553,\n 40564: 26574,\n 40565: 26566,\n 40566: 26599,\n 40567: 27292,\n 40568: 26654,\n 40569: 26694,\n 40570: 26665,\n 40571: 26688,\n 40572: 26701,\n 40573: 26674,\n 40574: 26702,\n 40576: 26803,\n 40577: 26667,\n 40578: 26713,\n 40579: 26723,\n 40580: 26743,\n 40581: 26751,\n 40582: 26783,\n 40583: 26767,\n 40584: 26797,\n 40585: 26772,\n 40586: 26781,\n 40587: 26779,\n 40588: 26755,\n 40589: 27310,\n 40590: 26809,\n 40591: 26740,\n 40592: 26805,\n 40593: 26784,\n 40594: 26810,\n 40595: 26895,\n 40596: 26765,\n 40597: 26750,\n 40598: 26881,\n 40599: 26826,\n 40600: 26888,\n 40601: 26840,\n 40602: 26914,\n 40603: 26918,\n 40604: 26849,\n 40605: 26892,\n 40606: 26829,\n 40607: 26836,\n 40608: 26855,\n 40609: 26837,\n 40610: 26934,\n 40611: 26898,\n 40612: 26884,\n 40613: 26839,\n 40614: 26851,\n 40615: 26917,\n 40616: 26873,\n 40617: 26848,\n 40618: 26863,\n 40619: 26920,\n 40620: 26922,\n 40621: 26906,\n 40622: 26915,\n 40623: 26913,\n 40624: 26822,\n 40625: 27001,\n 40626: 26999,\n 40627: 26972,\n 40628: 27e3,\n 40629: 26987,\n 40630: 26964,\n 40631: 27006,\n 40632: 26990,\n 40633: 26937,\n 40634: 26996,\n 40635: 26941,\n 40636: 26969,\n 40637: 26928,\n 40638: 26977,\n 40639: 26974,\n 40640: 26973,\n 40641: 27009,\n 40642: 26986,\n 40643: 27058,\n 40644: 27054,\n 40645: 27088,\n 40646: 27071,\n 40647: 27073,\n 40648: 27091,\n 40649: 27070,\n 40650: 27086,\n 40651: 23528,\n 40652: 27082,\n 40653: 27101,\n 40654: 27067,\n 40655: 27075,\n 40656: 27047,\n 40657: 27182,\n 40658: 27025,\n 40659: 27040,\n 40660: 27036,\n 40661: 27029,\n 40662: 27060,\n 40663: 27102,\n 40664: 27112,\n 40665: 27138,\n 40666: 27163,\n 40667: 27135,\n 40668: 27402,\n 40669: 27129,\n 40670: 27122,\n 40671: 27111,\n 40672: 27141,\n 40673: 27057,\n 40674: 27166,\n 40675: 27117,\n 40676: 27156,\n 40677: 27115,\n 40678: 27146,\n 40679: 27154,\n 40680: 27329,\n 40681: 27171,\n 40682: 27155,\n 40683: 27204,\n 40684: 27148,\n 40685: 27250,\n 40686: 27190,\n 40687: 27256,\n 40688: 27207,\n 40689: 27234,\n 40690: 27225,\n 40691: 27238,\n 40692: 27208,\n 40693: 27192,\n 40694: 27170,\n 40695: 27280,\n 40696: 27277,\n 40697: 27296,\n 40698: 27268,\n 40699: 27298,\n 40700: 27299,\n 40768: 27287,\n 40769: 34327,\n 40770: 27323,\n 40771: 27331,\n 40772: 27330,\n 40773: 27320,\n 40774: 27315,\n 40775: 27308,\n 40776: 27358,\n 40777: 27345,\n 40778: 27359,\n 40779: 27306,\n 40780: 27354,\n 40781: 27370,\n 40782: 27387,\n 40783: 27397,\n 40784: 34326,\n 40785: 27386,\n 40786: 27410,\n 40787: 27414,\n 40788: 39729,\n 40789: 27423,\n 40790: 27448,\n 40791: 27447,\n 40792: 30428,\n 40793: 27449,\n 40794: 39150,\n 40795: 27463,\n 40796: 27459,\n 40797: 27465,\n 40798: 27472,\n 40799: 27481,\n 40800: 27476,\n 40801: 27483,\n 40802: 27487,\n 40803: 27489,\n 40804: 27512,\n 40805: 27513,\n 40806: 27519,\n 40807: 27520,\n 40808: 27524,\n 40809: 27523,\n 40810: 27533,\n 40811: 27544,\n 40812: 27541,\n 40813: 27550,\n 40814: 27556,\n 40815: 27562,\n 40816: 27563,\n 40817: 27567,\n 40818: 27570,\n 40819: 27569,\n 40820: 27571,\n 40821: 27575,\n 40822: 27580,\n 40823: 27590,\n 40824: 27595,\n 40825: 27603,\n 40826: 27615,\n 40827: 27628,\n 40828: 27627,\n 40829: 27635,\n 40830: 27631,\n 40832: 40638,\n 40833: 27656,\n 40834: 27667,\n 40835: 27668,\n 40836: 27675,\n 40837: 27684,\n 40838: 27683,\n 40839: 27742,\n 40840: 27733,\n 40841: 27746,\n 40842: 27754,\n 40843: 27778,\n 40844: 27789,\n 40845: 27802,\n 40846: 27777,\n 40847: 27803,\n 40848: 27774,\n 40849: 27752,\n 40850: 27763,\n 40851: 27794,\n 40852: 27792,\n 40853: 27844,\n 40854: 27889,\n 40855: 27859,\n 40856: 27837,\n 40857: 27863,\n 40858: 27845,\n 40859: 27869,\n 40860: 27822,\n 40861: 27825,\n 40862: 27838,\n 40863: 27834,\n 40864: 27867,\n 40865: 27887,\n 40866: 27865,\n 40867: 27882,\n 40868: 27935,\n 40869: 34893,\n 40870: 27958,\n 40871: 27947,\n 40872: 27965,\n 40873: 27960,\n 40874: 27929,\n 40875: 27957,\n 40876: 27955,\n 40877: 27922,\n 40878: 27916,\n 40879: 28003,\n 40880: 28051,\n 40881: 28004,\n 40882: 27994,\n 40883: 28025,\n 40884: 27993,\n 40885: 28046,\n 40886: 28053,\n 40887: 28644,\n 40888: 28037,\n 40889: 28153,\n 40890: 28181,\n 40891: 28170,\n 40892: 28085,\n 40893: 28103,\n 40894: 28134,\n 40895: 28088,\n 40896: 28102,\n 40897: 28140,\n 40898: 28126,\n 40899: 28108,\n 40900: 28136,\n 40901: 28114,\n 40902: 28101,\n 40903: 28154,\n 40904: 28121,\n 40905: 28132,\n 40906: 28117,\n 40907: 28138,\n 40908: 28142,\n 40909: 28205,\n 40910: 28270,\n 40911: 28206,\n 40912: 28185,\n 40913: 28274,\n 40914: 28255,\n 40915: 28222,\n 40916: 28195,\n 40917: 28267,\n 40918: 28203,\n 40919: 28278,\n 40920: 28237,\n 40921: 28191,\n 40922: 28227,\n 40923: 28218,\n 40924: 28238,\n 40925: 28196,\n 40926: 28415,\n 40927: 28189,\n 40928: 28216,\n 40929: 28290,\n 40930: 28330,\n 40931: 28312,\n 40932: 28361,\n 40933: 28343,\n 40934: 28371,\n 40935: 28349,\n 40936: 28335,\n 40937: 28356,\n 40938: 28338,\n 40939: 28372,\n 40940: 28373,\n 40941: 28303,\n 40942: 28325,\n 40943: 28354,\n 40944: 28319,\n 40945: 28481,\n 40946: 28433,\n 40947: 28748,\n 40948: 28396,\n 40949: 28408,\n 40950: 28414,\n 40951: 28479,\n 40952: 28402,\n 40953: 28465,\n 40954: 28399,\n 40955: 28466,\n 40956: 28364,\n 57408: 28478,\n 57409: 28435,\n 57410: 28407,\n 57411: 28550,\n 57412: 28538,\n 57413: 28536,\n 57414: 28545,\n 57415: 28544,\n 57416: 28527,\n 57417: 28507,\n 57418: 28659,\n 57419: 28525,\n 57420: 28546,\n 57421: 28540,\n 57422: 28504,\n 57423: 28558,\n 57424: 28561,\n 57425: 28610,\n 57426: 28518,\n 57427: 28595,\n 57428: 28579,\n 57429: 28577,\n 57430: 28580,\n 57431: 28601,\n 57432: 28614,\n 57433: 28586,\n 57434: 28639,\n 57435: 28629,\n 57436: 28652,\n 57437: 28628,\n 57438: 28632,\n 57439: 28657,\n 57440: 28654,\n 57441: 28635,\n 57442: 28681,\n 57443: 28683,\n 57444: 28666,\n 57445: 28689,\n 57446: 28673,\n 57447: 28687,\n 57448: 28670,\n 57449: 28699,\n 57450: 28698,\n 57451: 28532,\n 57452: 28701,\n 57453: 28696,\n 57454: 28703,\n 57455: 28720,\n 57456: 28734,\n 57457: 28722,\n 57458: 28753,\n 57459: 28771,\n 57460: 28825,\n 57461: 28818,\n 57462: 28847,\n 57463: 28913,\n 57464: 28844,\n 57465: 28856,\n 57466: 28851,\n 57467: 28846,\n 57468: 28895,\n 57469: 28875,\n 57470: 28893,\n 57472: 28889,\n 57473: 28937,\n 57474: 28925,\n 57475: 28956,\n 57476: 28953,\n 57477: 29029,\n 57478: 29013,\n 57479: 29064,\n 57480: 29030,\n 57481: 29026,\n 57482: 29004,\n 57483: 29014,\n 57484: 29036,\n 57485: 29071,\n 57486: 29179,\n 57487: 29060,\n 57488: 29077,\n 57489: 29096,\n 57490: 29100,\n 57491: 29143,\n 57492: 29113,\n 57493: 29118,\n 57494: 29138,\n 57495: 29129,\n 57496: 29140,\n 57497: 29134,\n 57498: 29152,\n 57499: 29164,\n 57500: 29159,\n 57501: 29173,\n 57502: 29180,\n 57503: 29177,\n 57504: 29183,\n 57505: 29197,\n 57506: 29200,\n 57507: 29211,\n 57508: 29224,\n 57509: 29229,\n 57510: 29228,\n 57511: 29232,\n 57512: 29234,\n 57513: 29243,\n 57514: 29244,\n 57515: 29247,\n 57516: 29248,\n 57517: 29254,\n 57518: 29259,\n 57519: 29272,\n 57520: 29300,\n 57521: 29310,\n 57522: 29314,\n 57523: 29313,\n 57524: 29319,\n 57525: 29330,\n 57526: 29334,\n 57527: 29346,\n 57528: 29351,\n 57529: 29369,\n 57530: 29362,\n 57531: 29379,\n 57532: 29382,\n 57533: 29380,\n 57534: 29390,\n 57535: 29394,\n 57536: 29410,\n 57537: 29408,\n 57538: 29409,\n 57539: 29433,\n 57540: 29431,\n 57541: 20495,\n 57542: 29463,\n 57543: 29450,\n 57544: 29468,\n 57545: 29462,\n 57546: 29469,\n 57547: 29492,\n 57548: 29487,\n 57549: 29481,\n 57550: 29477,\n 57551: 29502,\n 57552: 29518,\n 57553: 29519,\n 57554: 40664,\n 57555: 29527,\n 57556: 29546,\n 57557: 29544,\n 57558: 29552,\n 57559: 29560,\n 57560: 29557,\n 57561: 29563,\n 57562: 29562,\n 57563: 29640,\n 57564: 29619,\n 57565: 29646,\n 57566: 29627,\n 57567: 29632,\n 57568: 29669,\n 57569: 29678,\n 57570: 29662,\n 57571: 29858,\n 57572: 29701,\n 57573: 29807,\n 57574: 29733,\n 57575: 29688,\n 57576: 29746,\n 57577: 29754,\n 57578: 29781,\n 57579: 29759,\n 57580: 29791,\n 57581: 29785,\n 57582: 29761,\n 57583: 29788,\n 57584: 29801,\n 57585: 29808,\n 57586: 29795,\n 57587: 29802,\n 57588: 29814,\n 57589: 29822,\n 57590: 29835,\n 57591: 29854,\n 57592: 29863,\n 57593: 29898,\n 57594: 29903,\n 57595: 29908,\n 57596: 29681,\n 57664: 29920,\n 57665: 29923,\n 57666: 29927,\n 57667: 29929,\n 57668: 29934,\n 57669: 29938,\n 57670: 29936,\n 57671: 29937,\n 57672: 29944,\n 57673: 29943,\n 57674: 29956,\n 57675: 29955,\n 57676: 29957,\n 57677: 29964,\n 57678: 29966,\n 57679: 29965,\n 57680: 29973,\n 57681: 29971,\n 57682: 29982,\n 57683: 29990,\n 57684: 29996,\n 57685: 30012,\n 57686: 30020,\n 57687: 30029,\n 57688: 30026,\n 57689: 30025,\n 57690: 30043,\n 57691: 30022,\n 57692: 30042,\n 57693: 30057,\n 57694: 30052,\n 57695: 30055,\n 57696: 30059,\n 57697: 30061,\n 57698: 30072,\n 57699: 30070,\n 57700: 30086,\n 57701: 30087,\n 57702: 30068,\n 57703: 30090,\n 57704: 30089,\n 57705: 30082,\n 57706: 30100,\n 57707: 30106,\n 57708: 30109,\n 57709: 30117,\n 57710: 30115,\n 57711: 30146,\n 57712: 30131,\n 57713: 30147,\n 57714: 30133,\n 57715: 30141,\n 57716: 30136,\n 57717: 30140,\n 57718: 30129,\n 57719: 30157,\n 57720: 30154,\n 57721: 30162,\n 57722: 30169,\n 57723: 30179,\n 57724: 30174,\n 57725: 30206,\n 57726: 30207,\n 57728: 30204,\n 57729: 30209,\n 57730: 30192,\n 57731: 30202,\n 57732: 30194,\n 57733: 30195,\n 57734: 30219,\n 57735: 30221,\n 57736: 30217,\n 57737: 30239,\n 57738: 30247,\n 57739: 30240,\n 57740: 30241,\n 57741: 30242,\n 57742: 30244,\n 57743: 30260,\n 57744: 30256,\n 57745: 30267,\n 57746: 30279,\n 57747: 30280,\n 57748: 30278,\n 57749: 30300,\n 57750: 30296,\n 57751: 30305,\n 57752: 30306,\n 57753: 30312,\n 57754: 30313,\n 57755: 30314,\n 57756: 30311,\n 57757: 30316,\n 57758: 30320,\n 57759: 30322,\n 57760: 30326,\n 57761: 30328,\n 57762: 30332,\n 57763: 30336,\n 57764: 30339,\n 57765: 30344,\n 57766: 30347,\n 57767: 30350,\n 57768: 30358,\n 57769: 30355,\n 57770: 30361,\n 57771: 30362,\n 57772: 30384,\n 57773: 30388,\n 57774: 30392,\n 57775: 30393,\n 57776: 30394,\n 57777: 30402,\n 57778: 30413,\n 57779: 30422,\n 57780: 30418,\n 57781: 30430,\n 57782: 30433,\n 57783: 30437,\n 57784: 30439,\n 57785: 30442,\n 57786: 34351,\n 57787: 30459,\n 57788: 30472,\n 57789: 30471,\n 57790: 30468,\n 57791: 30505,\n 57792: 30500,\n 57793: 30494,\n 57794: 30501,\n 57795: 30502,\n 57796: 30491,\n 57797: 30519,\n 57798: 30520,\n 57799: 30535,\n 57800: 30554,\n 57801: 30568,\n 57802: 30571,\n 57803: 30555,\n 57804: 30565,\n 57805: 30591,\n 57806: 30590,\n 57807: 30585,\n 57808: 30606,\n 57809: 30603,\n 57810: 30609,\n 57811: 30624,\n 57812: 30622,\n 57813: 30640,\n 57814: 30646,\n 57815: 30649,\n 57816: 30655,\n 57817: 30652,\n 57818: 30653,\n 57819: 30651,\n 57820: 30663,\n 57821: 30669,\n 57822: 30679,\n 57823: 30682,\n 57824: 30684,\n 57825: 30691,\n 57826: 30702,\n 57827: 30716,\n 57828: 30732,\n 57829: 30738,\n 57830: 31014,\n 57831: 30752,\n 57832: 31018,\n 57833: 30789,\n 57834: 30862,\n 57835: 30836,\n 57836: 30854,\n 57837: 30844,\n 57838: 30874,\n 57839: 30860,\n 57840: 30883,\n 57841: 30901,\n 57842: 30890,\n 57843: 30895,\n 57844: 30929,\n 57845: 30918,\n 57846: 30923,\n 57847: 30932,\n 57848: 30910,\n 57849: 30908,\n 57850: 30917,\n 57851: 30922,\n 57852: 30956,\n 57920: 30951,\n 57921: 30938,\n 57922: 30973,\n 57923: 30964,\n 57924: 30983,\n 57925: 30994,\n 57926: 30993,\n 57927: 31001,\n 57928: 31020,\n 57929: 31019,\n 57930: 31040,\n 57931: 31072,\n 57932: 31063,\n 57933: 31071,\n 57934: 31066,\n 57935: 31061,\n 57936: 31059,\n 57937: 31098,\n 57938: 31103,\n 57939: 31114,\n 57940: 31133,\n 57941: 31143,\n 57942: 40779,\n 57943: 31146,\n 57944: 31150,\n 57945: 31155,\n 57946: 31161,\n 57947: 31162,\n 57948: 31177,\n 57949: 31189,\n 57950: 31207,\n 57951: 31212,\n 57952: 31201,\n 57953: 31203,\n 57954: 31240,\n 57955: 31245,\n 57956: 31256,\n 57957: 31257,\n 57958: 31264,\n 57959: 31263,\n 57960: 31104,\n 57961: 31281,\n 57962: 31291,\n 57963: 31294,\n 57964: 31287,\n 57965: 31299,\n 57966: 31319,\n 57967: 31305,\n 57968: 31329,\n 57969: 31330,\n 57970: 31337,\n 57971: 40861,\n 57972: 31344,\n 57973: 31353,\n 57974: 31357,\n 57975: 31368,\n 57976: 31383,\n 57977: 31381,\n 57978: 31384,\n 57979: 31382,\n 57980: 31401,\n 57981: 31432,\n 57982: 31408,\n 57984: 31414,\n 57985: 31429,\n 57986: 31428,\n 57987: 31423,\n 57988: 36995,\n 57989: 31431,\n 57990: 31434,\n 57991: 31437,\n 57992: 31439,\n 57993: 31445,\n 57994: 31443,\n 57995: 31449,\n 57996: 31450,\n 57997: 31453,\n 57998: 31457,\n 57999: 31458,\n 58e3: 31462,\n 58001: 31469,\n 58002: 31472,\n 58003: 31490,\n 58004: 31503,\n 58005: 31498,\n 58006: 31494,\n 58007: 31539,\n 58008: 31512,\n 58009: 31513,\n 58010: 31518,\n 58011: 31541,\n 58012: 31528,\n 58013: 31542,\n 58014: 31568,\n 58015: 31610,\n 58016: 31492,\n 58017: 31565,\n 58018: 31499,\n 58019: 31564,\n 58020: 31557,\n 58021: 31605,\n 58022: 31589,\n 58023: 31604,\n 58024: 31591,\n 58025: 31600,\n 58026: 31601,\n 58027: 31596,\n 58028: 31598,\n 58029: 31645,\n 58030: 31640,\n 58031: 31647,\n 58032: 31629,\n 58033: 31644,\n 58034: 31642,\n 58035: 31627,\n 58036: 31634,\n 58037: 31631,\n 58038: 31581,\n 58039: 31641,\n 58040: 31691,\n 58041: 31681,\n 58042: 31692,\n 58043: 31695,\n 58044: 31668,\n 58045: 31686,\n 58046: 31709,\n 58047: 31721,\n 58048: 31761,\n 58049: 31764,\n 58050: 31718,\n 58051: 31717,\n 58052: 31840,\n 58053: 31744,\n 58054: 31751,\n 58055: 31763,\n 58056: 31731,\n 58057: 31735,\n 58058: 31767,\n 58059: 31757,\n 58060: 31734,\n 58061: 31779,\n 58062: 31783,\n 58063: 31786,\n 58064: 31775,\n 58065: 31799,\n 58066: 31787,\n 58067: 31805,\n 58068: 31820,\n 58069: 31811,\n 58070: 31828,\n 58071: 31823,\n 58072: 31808,\n 58073: 31824,\n 58074: 31832,\n 58075: 31839,\n 58076: 31844,\n 58077: 31830,\n 58078: 31845,\n 58079: 31852,\n 58080: 31861,\n 58081: 31875,\n 58082: 31888,\n 58083: 31908,\n 58084: 31917,\n 58085: 31906,\n 58086: 31915,\n 58087: 31905,\n 58088: 31912,\n 58089: 31923,\n 58090: 31922,\n 58091: 31921,\n 58092: 31918,\n 58093: 31929,\n 58094: 31933,\n 58095: 31936,\n 58096: 31941,\n 58097: 31938,\n 58098: 31960,\n 58099: 31954,\n 58100: 31964,\n 58101: 31970,\n 58102: 39739,\n 58103: 31983,\n 58104: 31986,\n 58105: 31988,\n 58106: 31990,\n 58107: 31994,\n 58108: 32006,\n 58176: 32002,\n 58177: 32028,\n 58178: 32021,\n 58179: 32010,\n 58180: 32069,\n 58181: 32075,\n 58182: 32046,\n 58183: 32050,\n 58184: 32063,\n 58185: 32053,\n 58186: 32070,\n 58187: 32115,\n 58188: 32086,\n 58189: 32078,\n 58190: 32114,\n 58191: 32104,\n 58192: 32110,\n 58193: 32079,\n 58194: 32099,\n 58195: 32147,\n 58196: 32137,\n 58197: 32091,\n 58198: 32143,\n 58199: 32125,\n 58200: 32155,\n 58201: 32186,\n 58202: 32174,\n 58203: 32163,\n 58204: 32181,\n 58205: 32199,\n 58206: 32189,\n 58207: 32171,\n 58208: 32317,\n 58209: 32162,\n 58210: 32175,\n 58211: 32220,\n 58212: 32184,\n 58213: 32159,\n 58214: 32176,\n 58215: 32216,\n 58216: 32221,\n 58217: 32228,\n 58218: 32222,\n 58219: 32251,\n 58220: 32242,\n 58221: 32225,\n 58222: 32261,\n 58223: 32266,\n 58224: 32291,\n 58225: 32289,\n 58226: 32274,\n 58227: 32305,\n 58228: 32287,\n 58229: 32265,\n 58230: 32267,\n 58231: 32290,\n 58232: 32326,\n 58233: 32358,\n 58234: 32315,\n 58235: 32309,\n 58236: 32313,\n 58237: 32323,\n 58238: 32311,\n 58240: 32306,\n 58241: 32314,\n 58242: 32359,\n 58243: 32349,\n 58244: 32342,\n 58245: 32350,\n 58246: 32345,\n 58247: 32346,\n 58248: 32377,\n 58249: 32362,\n 58250: 32361,\n 58251: 32380,\n 58252: 32379,\n 58253: 32387,\n 58254: 32213,\n 58255: 32381,\n 58256: 36782,\n 58257: 32383,\n 58258: 32392,\n 58259: 32393,\n 58260: 32396,\n 58261: 32402,\n 58262: 32400,\n 58263: 32403,\n 58264: 32404,\n 58265: 32406,\n 58266: 32398,\n 58267: 32411,\n 58268: 32412,\n 58269: 32568,\n 58270: 32570,\n 58271: 32581,\n 58272: 32588,\n 58273: 32589,\n 58274: 32590,\n 58275: 32592,\n 58276: 32593,\n 58277: 32597,\n 58278: 32596,\n 58279: 32600,\n 58280: 32607,\n 58281: 32608,\n 58282: 32616,\n 58283: 32617,\n 58284: 32615,\n 58285: 32632,\n 58286: 32642,\n 58287: 32646,\n 58288: 32643,\n 58289: 32648,\n 58290: 32647,\n 58291: 32652,\n 58292: 32660,\n 58293: 32670,\n 58294: 32669,\n 58295: 32666,\n 58296: 32675,\n 58297: 32687,\n 58298: 32690,\n 58299: 32697,\n 58300: 32686,\n 58301: 32694,\n 58302: 32696,\n 58303: 35697,\n 58304: 32709,\n 58305: 32710,\n 58306: 32714,\n 58307: 32725,\n 58308: 32724,\n 58309: 32737,\n 58310: 32742,\n 58311: 32745,\n 58312: 32755,\n 58313: 32761,\n 58314: 39132,\n 58315: 32774,\n 58316: 32772,\n 58317: 32779,\n 58318: 32786,\n 58319: 32792,\n 58320: 32793,\n 58321: 32796,\n 58322: 32801,\n 58323: 32808,\n 58324: 32831,\n 58325: 32827,\n 58326: 32842,\n 58327: 32838,\n 58328: 32850,\n 58329: 32856,\n 58330: 32858,\n 58331: 32863,\n 58332: 32866,\n 58333: 32872,\n 58334: 32883,\n 58335: 32882,\n 58336: 32880,\n 58337: 32886,\n 58338: 32889,\n 58339: 32893,\n 58340: 32895,\n 58341: 32900,\n 58342: 32902,\n 58343: 32901,\n 58344: 32923,\n 58345: 32915,\n 58346: 32922,\n 58347: 32941,\n 58348: 20880,\n 58349: 32940,\n 58350: 32987,\n 58351: 32997,\n 58352: 32985,\n 58353: 32989,\n 58354: 32964,\n 58355: 32986,\n 58356: 32982,\n 58357: 33033,\n 58358: 33007,\n 58359: 33009,\n 58360: 33051,\n 58361: 33065,\n 58362: 33059,\n 58363: 33071,\n 58364: 33099,\n 58432: 38539,\n 58433: 33094,\n 58434: 33086,\n 58435: 33107,\n 58436: 33105,\n 58437: 33020,\n 58438: 33137,\n 58439: 33134,\n 58440: 33125,\n 58441: 33126,\n 58442: 33140,\n 58443: 33155,\n 58444: 33160,\n 58445: 33162,\n 58446: 33152,\n 58447: 33154,\n 58448: 33184,\n 58449: 33173,\n 58450: 33188,\n 58451: 33187,\n 58452: 33119,\n 58453: 33171,\n 58454: 33193,\n 58455: 33200,\n 58456: 33205,\n 58457: 33214,\n 58458: 33208,\n 58459: 33213,\n 58460: 33216,\n 58461: 33218,\n 58462: 33210,\n 58463: 33225,\n 58464: 33229,\n 58465: 33233,\n 58466: 33241,\n 58467: 33240,\n 58468: 33224,\n 58469: 33242,\n 58470: 33247,\n 58471: 33248,\n 58472: 33255,\n 58473: 33274,\n 58474: 33275,\n 58475: 33278,\n 58476: 33281,\n 58477: 33282,\n 58478: 33285,\n 58479: 33287,\n 58480: 33290,\n 58481: 33293,\n 58482: 33296,\n 58483: 33302,\n 58484: 33321,\n 58485: 33323,\n 58486: 33336,\n 58487: 33331,\n 58488: 33344,\n 58489: 33369,\n 58490: 33368,\n 58491: 33373,\n 58492: 33370,\n 58493: 33375,\n 58494: 33380,\n 58496: 33378,\n 58497: 33384,\n 58498: 33386,\n 58499: 33387,\n 58500: 33326,\n 58501: 33393,\n 58502: 33399,\n 58503: 33400,\n 58504: 33406,\n 58505: 33421,\n 58506: 33426,\n 58507: 33451,\n 58508: 33439,\n 58509: 33467,\n 58510: 33452,\n 58511: 33505,\n 58512: 33507,\n 58513: 33503,\n 58514: 33490,\n 58515: 33524,\n 58516: 33523,\n 58517: 33530,\n 58518: 33683,\n 58519: 33539,\n 58520: 33531,\n 58521: 33529,\n 58522: 33502,\n 58523: 33542,\n 58524: 33500,\n 58525: 33545,\n 58526: 33497,\n 58527: 33589,\n 58528: 33588,\n 58529: 33558,\n 58530: 33586,\n 58531: 33585,\n 58532: 33600,\n 58533: 33593,\n 58534: 33616,\n 58535: 33605,\n 58536: 33583,\n 58537: 33579,\n 58538: 33559,\n 58539: 33560,\n 58540: 33669,\n 58541: 33690,\n 58542: 33706,\n 58543: 33695,\n 58544: 33698,\n 58545: 33686,\n 58546: 33571,\n 58547: 33678,\n 58548: 33671,\n 58549: 33674,\n 58550: 33660,\n 58551: 33717,\n 58552: 33651,\n 58553: 33653,\n 58554: 33696,\n 58555: 33673,\n 58556: 33704,\n 58557: 33780,\n 58558: 33811,\n 58559: 33771,\n 58560: 33742,\n 58561: 33789,\n 58562: 33795,\n 58563: 33752,\n 58564: 33803,\n 58565: 33729,\n 58566: 33783,\n 58567: 33799,\n 58568: 33760,\n 58569: 33778,\n 58570: 33805,\n 58571: 33826,\n 58572: 33824,\n 58573: 33725,\n 58574: 33848,\n 58575: 34054,\n 58576: 33787,\n 58577: 33901,\n 58578: 33834,\n 58579: 33852,\n 58580: 34138,\n 58581: 33924,\n 58582: 33911,\n 58583: 33899,\n 58584: 33965,\n 58585: 33902,\n 58586: 33922,\n 58587: 33897,\n 58588: 33862,\n 58589: 33836,\n 58590: 33903,\n 58591: 33913,\n 58592: 33845,\n 58593: 33994,\n 58594: 33890,\n 58595: 33977,\n 58596: 33983,\n 58597: 33951,\n 58598: 34009,\n 58599: 33997,\n 58600: 33979,\n 58601: 34010,\n 58602: 34e3,\n 58603: 33985,\n 58604: 33990,\n 58605: 34006,\n 58606: 33953,\n 58607: 34081,\n 58608: 34047,\n 58609: 34036,\n 58610: 34071,\n 58611: 34072,\n 58612: 34092,\n 58613: 34079,\n 58614: 34069,\n 58615: 34068,\n 58616: 34044,\n 58617: 34112,\n 58618: 34147,\n 58619: 34136,\n 58620: 34120,\n 58688: 34113,\n 58689: 34306,\n 58690: 34123,\n 58691: 34133,\n 58692: 34176,\n 58693: 34212,\n 58694: 34184,\n 58695: 34193,\n 58696: 34186,\n 58697: 34216,\n 58698: 34157,\n 58699: 34196,\n 58700: 34203,\n 58701: 34282,\n 58702: 34183,\n 58703: 34204,\n 58704: 34167,\n 58705: 34174,\n 58706: 34192,\n 58707: 34249,\n 58708: 34234,\n 58709: 34255,\n 58710: 34233,\n 58711: 34256,\n 58712: 34261,\n 58713: 34269,\n 58714: 34277,\n 58715: 34268,\n 58716: 34297,\n 58717: 34314,\n 58718: 34323,\n 58719: 34315,\n 58720: 34302,\n 58721: 34298,\n 58722: 34310,\n 58723: 34338,\n 58724: 34330,\n 58725: 34352,\n 58726: 34367,\n 58727: 34381,\n 58728: 20053,\n 58729: 34388,\n 58730: 34399,\n 58731: 34407,\n 58732: 34417,\n 58733: 34451,\n 58734: 34467,\n 58735: 34473,\n 58736: 34474,\n 58737: 34443,\n 58738: 34444,\n 58739: 34486,\n 58740: 34479,\n 58741: 34500,\n 58742: 34502,\n 58743: 34480,\n 58744: 34505,\n 58745: 34851,\n 58746: 34475,\n 58747: 34516,\n 58748: 34526,\n 58749: 34537,\n 58750: 34540,\n 58752: 34527,\n 58753: 34523,\n 58754: 34543,\n 58755: 34578,\n 58756: 34566,\n 58757: 34568,\n 58758: 34560,\n 58759: 34563,\n 58760: 34555,\n 58761: 34577,\n 58762: 34569,\n 58763: 34573,\n 58764: 34553,\n 58765: 34570,\n 58766: 34612,\n 58767: 34623,\n 58768: 34615,\n 58769: 34619,\n 58770: 34597,\n 58771: 34601,\n 58772: 34586,\n 58773: 34656,\n 58774: 34655,\n 58775: 34680,\n 58776: 34636,\n 58777: 34638,\n 58778: 34676,\n 58779: 34647,\n 58780: 34664,\n 58781: 34670,\n 58782: 34649,\n 58783: 34643,\n 58784: 34659,\n 58785: 34666,\n 58786: 34821,\n 58787: 34722,\n 58788: 34719,\n 58789: 34690,\n 58790: 34735,\n 58791: 34763,\n 58792: 34749,\n 58793: 34752,\n 58794: 34768,\n 58795: 38614,\n 58796: 34731,\n 58797: 34756,\n 58798: 34739,\n 58799: 34759,\n 58800: 34758,\n 58801: 34747,\n 58802: 34799,\n 58803: 34802,\n 58804: 34784,\n 58805: 34831,\n 58806: 34829,\n 58807: 34814,\n 58808: 34806,\n 58809: 34807,\n 58810: 34830,\n 58811: 34770,\n 58812: 34833,\n 58813: 34838,\n 58814: 34837,\n 58815: 34850,\n 58816: 34849,\n 58817: 34865,\n 58818: 34870,\n 58819: 34873,\n 58820: 34855,\n 58821: 34875,\n 58822: 34884,\n 58823: 34882,\n 58824: 34898,\n 58825: 34905,\n 58826: 34910,\n 58827: 34914,\n 58828: 34923,\n 58829: 34945,\n 58830: 34942,\n 58831: 34974,\n 58832: 34933,\n 58833: 34941,\n 58834: 34997,\n 58835: 34930,\n 58836: 34946,\n 58837: 34967,\n 58838: 34962,\n 58839: 34990,\n 58840: 34969,\n 58841: 34978,\n 58842: 34957,\n 58843: 34980,\n 58844: 34992,\n 58845: 35007,\n 58846: 34993,\n 58847: 35011,\n 58848: 35012,\n 58849: 35028,\n 58850: 35032,\n 58851: 35033,\n 58852: 35037,\n 58853: 35065,\n 58854: 35074,\n 58855: 35068,\n 58856: 35060,\n 58857: 35048,\n 58858: 35058,\n 58859: 35076,\n 58860: 35084,\n 58861: 35082,\n 58862: 35091,\n 58863: 35139,\n 58864: 35102,\n 58865: 35109,\n 58866: 35114,\n 58867: 35115,\n 58868: 35137,\n 58869: 35140,\n 58870: 35131,\n 58871: 35126,\n 58872: 35128,\n 58873: 35148,\n 58874: 35101,\n 58875: 35168,\n 58876: 35166,\n 58944: 35174,\n 58945: 35172,\n 58946: 35181,\n 58947: 35178,\n 58948: 35183,\n 58949: 35188,\n 58950: 35191,\n 58951: 35198,\n 58952: 35203,\n 58953: 35208,\n 58954: 35210,\n 58955: 35219,\n 58956: 35224,\n 58957: 35233,\n 58958: 35241,\n 58959: 35238,\n 58960: 35244,\n 58961: 35247,\n 58962: 35250,\n 58963: 35258,\n 58964: 35261,\n 58965: 35263,\n 58966: 35264,\n 58967: 35290,\n 58968: 35292,\n 58969: 35293,\n 58970: 35303,\n 58971: 35316,\n 58972: 35320,\n 58973: 35331,\n 58974: 35350,\n 58975: 35344,\n 58976: 35340,\n 58977: 35355,\n 58978: 35357,\n 58979: 35365,\n 58980: 35382,\n 58981: 35393,\n 58982: 35419,\n 58983: 35410,\n 58984: 35398,\n 58985: 35400,\n 58986: 35452,\n 58987: 35437,\n 58988: 35436,\n 58989: 35426,\n 58990: 35461,\n 58991: 35458,\n 58992: 35460,\n 58993: 35496,\n 58994: 35489,\n 58995: 35473,\n 58996: 35493,\n 58997: 35494,\n 58998: 35482,\n 58999: 35491,\n 59e3: 35524,\n 59001: 35533,\n 59002: 35522,\n 59003: 35546,\n 59004: 35563,\n 59005: 35571,\n 59006: 35559,\n 59008: 35556,\n 59009: 35569,\n 59010: 35604,\n 59011: 35552,\n 59012: 35554,\n 59013: 35575,\n 59014: 35550,\n 59015: 35547,\n 59016: 35596,\n 59017: 35591,\n 59018: 35610,\n 59019: 35553,\n 59020: 35606,\n 59021: 35600,\n 59022: 35607,\n 59023: 35616,\n 59024: 35635,\n 59025: 38827,\n 59026: 35622,\n 59027: 35627,\n 59028: 35646,\n 59029: 35624,\n 59030: 35649,\n 59031: 35660,\n 59032: 35663,\n 59033: 35662,\n 59034: 35657,\n 59035: 35670,\n 59036: 35675,\n 59037: 35674,\n 59038: 35691,\n 59039: 35679,\n 59040: 35692,\n 59041: 35695,\n 59042: 35700,\n 59043: 35709,\n 59044: 35712,\n 59045: 35724,\n 59046: 35726,\n 59047: 35730,\n 59048: 35731,\n 59049: 35734,\n 59050: 35737,\n 59051: 35738,\n 59052: 35898,\n 59053: 35905,\n 59054: 35903,\n 59055: 35912,\n 59056: 35916,\n 59057: 35918,\n 59058: 35920,\n 59059: 35925,\n 59060: 35938,\n 59061: 35948,\n 59062: 35960,\n 59063: 35962,\n 59064: 35970,\n 59065: 35977,\n 59066: 35973,\n 59067: 35978,\n 59068: 35981,\n 59069: 35982,\n 59070: 35988,\n 59071: 35964,\n 59072: 35992,\n 59073: 25117,\n 59074: 36013,\n 59075: 36010,\n 59076: 36029,\n 59077: 36018,\n 59078: 36019,\n 59079: 36014,\n 59080: 36022,\n 59081: 36040,\n 59082: 36033,\n 59083: 36068,\n 59084: 36067,\n 59085: 36058,\n 59086: 36093,\n 59087: 36090,\n 59088: 36091,\n 59089: 36100,\n 59090: 36101,\n 59091: 36106,\n 59092: 36103,\n 59093: 36111,\n 59094: 36109,\n 59095: 36112,\n 59096: 40782,\n 59097: 36115,\n 59098: 36045,\n 59099: 36116,\n 59100: 36118,\n 59101: 36199,\n 59102: 36205,\n 59103: 36209,\n 59104: 36211,\n 59105: 36225,\n 59106: 36249,\n 59107: 36290,\n 59108: 36286,\n 59109: 36282,\n 59110: 36303,\n 59111: 36314,\n 59112: 36310,\n 59113: 36300,\n 59114: 36315,\n 59115: 36299,\n 59116: 36330,\n 59117: 36331,\n 59118: 36319,\n 59119: 36323,\n 59120: 36348,\n 59121: 36360,\n 59122: 36361,\n 59123: 36351,\n 59124: 36381,\n 59125: 36382,\n 59126: 36368,\n 59127: 36383,\n 59128: 36418,\n 59129: 36405,\n 59130: 36400,\n 59131: 36404,\n 59132: 36426,\n 59200: 36423,\n 59201: 36425,\n 59202: 36428,\n 59203: 36432,\n 59204: 36424,\n 59205: 36441,\n 59206: 36452,\n 59207: 36448,\n 59208: 36394,\n 59209: 36451,\n 59210: 36437,\n 59211: 36470,\n 59212: 36466,\n 59213: 36476,\n 59214: 36481,\n 59215: 36487,\n 59216: 36485,\n 59217: 36484,\n 59218: 36491,\n 59219: 36490,\n 59220: 36499,\n 59221: 36497,\n 59222: 36500,\n 59223: 36505,\n 59224: 36522,\n 59225: 36513,\n 59226: 36524,\n 59227: 36528,\n 59228: 36550,\n 59229: 36529,\n 59230: 36542,\n 59231: 36549,\n 59232: 36552,\n 59233: 36555,\n 59234: 36571,\n 59235: 36579,\n 59236: 36604,\n 59237: 36603,\n 59238: 36587,\n 59239: 36606,\n 59240: 36618,\n 59241: 36613,\n 59242: 36629,\n 59243: 36626,\n 59244: 36633,\n 59245: 36627,\n 59246: 36636,\n 59247: 36639,\n 59248: 36635,\n 59249: 36620,\n 59250: 36646,\n 59251: 36659,\n 59252: 36667,\n 59253: 36665,\n 59254: 36677,\n 59255: 36674,\n 59256: 36670,\n 59257: 36684,\n 59258: 36681,\n 59259: 36678,\n 59260: 36686,\n 59261: 36695,\n 59262: 36700,\n 59264: 36706,\n 59265: 36707,\n 59266: 36708,\n 59267: 36764,\n 59268: 36767,\n 59269: 36771,\n 59270: 36781,\n 59271: 36783,\n 59272: 36791,\n 59273: 36826,\n 59274: 36837,\n 59275: 36834,\n 59276: 36842,\n 59277: 36847,\n 59278: 36999,\n 59279: 36852,\n 59280: 36869,\n 59281: 36857,\n 59282: 36858,\n 59283: 36881,\n 59284: 36885,\n 59285: 36897,\n 59286: 36877,\n 59287: 36894,\n 59288: 36886,\n 59289: 36875,\n 59290: 36903,\n 59291: 36918,\n 59292: 36917,\n 59293: 36921,\n 59294: 36856,\n 59295: 36943,\n 59296: 36944,\n 59297: 36945,\n 59298: 36946,\n 59299: 36878,\n 59300: 36937,\n 59301: 36926,\n 59302: 36950,\n 59303: 36952,\n 59304: 36958,\n 59305: 36968,\n 59306: 36975,\n 59307: 36982,\n 59308: 38568,\n 59309: 36978,\n 59310: 36994,\n 59311: 36989,\n 59312: 36993,\n 59313: 36992,\n 59314: 37002,\n 59315: 37001,\n 59316: 37007,\n 59317: 37032,\n 59318: 37039,\n 59319: 37041,\n 59320: 37045,\n 59321: 37090,\n 59322: 37092,\n 59323: 25160,\n 59324: 37083,\n 59325: 37122,\n 59326: 37138,\n 59327: 37145,\n 59328: 37170,\n 59329: 37168,\n 59330: 37194,\n 59331: 37206,\n 59332: 37208,\n 59333: 37219,\n 59334: 37221,\n 59335: 37225,\n 59336: 37235,\n 59337: 37234,\n 59338: 37259,\n 59339: 37257,\n 59340: 37250,\n 59341: 37282,\n 59342: 37291,\n 59343: 37295,\n 59344: 37290,\n 59345: 37301,\n 59346: 37300,\n 59347: 37306,\n 59348: 37312,\n 59349: 37313,\n 59350: 37321,\n 59351: 37323,\n 59352: 37328,\n 59353: 37334,\n 59354: 37343,\n 59355: 37345,\n 59356: 37339,\n 59357: 37372,\n 59358: 37365,\n 59359: 37366,\n 59360: 37406,\n 59361: 37375,\n 59362: 37396,\n 59363: 37420,\n 59364: 37397,\n 59365: 37393,\n 59366: 37470,\n 59367: 37463,\n 59368: 37445,\n 59369: 37449,\n 59370: 37476,\n 59371: 37448,\n 59372: 37525,\n 59373: 37439,\n 59374: 37451,\n 59375: 37456,\n 59376: 37532,\n 59377: 37526,\n 59378: 37523,\n 59379: 37531,\n 59380: 37466,\n 59381: 37583,\n 59382: 37561,\n 59383: 37559,\n 59384: 37609,\n 59385: 37647,\n 59386: 37626,\n 59387: 37700,\n 59388: 37678,\n 59456: 37657,\n 59457: 37666,\n 59458: 37658,\n 59459: 37667,\n 59460: 37690,\n 59461: 37685,\n 59462: 37691,\n 59463: 37724,\n 59464: 37728,\n 59465: 37756,\n 59466: 37742,\n 59467: 37718,\n 59468: 37808,\n 59469: 37804,\n 59470: 37805,\n 59471: 37780,\n 59472: 37817,\n 59473: 37846,\n 59474: 37847,\n 59475: 37864,\n 59476: 37861,\n 59477: 37848,\n 59478: 37827,\n 59479: 37853,\n 59480: 37840,\n 59481: 37832,\n 59482: 37860,\n 59483: 37914,\n 59484: 37908,\n 59485: 37907,\n 59486: 37891,\n 59487: 37895,\n 59488: 37904,\n 59489: 37942,\n 59490: 37931,\n 59491: 37941,\n 59492: 37921,\n 59493: 37946,\n 59494: 37953,\n 59495: 37970,\n 59496: 37956,\n 59497: 37979,\n 59498: 37984,\n 59499: 37986,\n 59500: 37982,\n 59501: 37994,\n 59502: 37417,\n 59503: 38e3,\n 59504: 38005,\n 59505: 38007,\n 59506: 38013,\n 59507: 37978,\n 59508: 38012,\n 59509: 38014,\n 59510: 38017,\n 59511: 38015,\n 59512: 38274,\n 59513: 38279,\n 59514: 38282,\n 59515: 38292,\n 59516: 38294,\n 59517: 38296,\n 59518: 38297,\n 59520: 38304,\n 59521: 38312,\n 59522: 38311,\n 59523: 38317,\n 59524: 38332,\n 59525: 38331,\n 59526: 38329,\n 59527: 38334,\n 59528: 38346,\n 59529: 28662,\n 59530: 38339,\n 59531: 38349,\n 59532: 38348,\n 59533: 38357,\n 59534: 38356,\n 59535: 38358,\n 59536: 38364,\n 59537: 38369,\n 59538: 38373,\n 59539: 38370,\n 59540: 38433,\n 59541: 38440,\n 59542: 38446,\n 59543: 38447,\n 59544: 38466,\n 59545: 38476,\n 59546: 38479,\n 59547: 38475,\n 59548: 38519,\n 59549: 38492,\n 59550: 38494,\n 59551: 38493,\n 59552: 38495,\n 59553: 38502,\n 59554: 38514,\n 59555: 38508,\n 59556: 38541,\n 59557: 38552,\n 59558: 38549,\n 59559: 38551,\n 59560: 38570,\n 59561: 38567,\n 59562: 38577,\n 59563: 38578,\n 59564: 38576,\n 59565: 38580,\n 59566: 38582,\n 59567: 38584,\n 59568: 38585,\n 59569: 38606,\n 59570: 38603,\n 59571: 38601,\n 59572: 38605,\n 59573: 35149,\n 59574: 38620,\n 59575: 38669,\n 59576: 38613,\n 59577: 38649,\n 59578: 38660,\n 59579: 38662,\n 59580: 38664,\n 59581: 38675,\n 59582: 38670,\n 59583: 38673,\n 59584: 38671,\n 59585: 38678,\n 59586: 38681,\n 59587: 38692,\n 59588: 38698,\n 59589: 38704,\n 59590: 38713,\n 59591: 38717,\n 59592: 38718,\n 59593: 38724,\n 59594: 38726,\n 59595: 38728,\n 59596: 38722,\n 59597: 38729,\n 59598: 38748,\n 59599: 38752,\n 59600: 38756,\n 59601: 38758,\n 59602: 38760,\n 59603: 21202,\n 59604: 38763,\n 59605: 38769,\n 59606: 38777,\n 59607: 38789,\n 59608: 38780,\n 59609: 38785,\n 59610: 38778,\n 59611: 38790,\n 59612: 38795,\n 59613: 38799,\n 59614: 38800,\n 59615: 38812,\n 59616: 38824,\n 59617: 38822,\n 59618: 38819,\n 59619: 38835,\n 59620: 38836,\n 59621: 38851,\n 59622: 38854,\n 59623: 38856,\n 59624: 38859,\n 59625: 38876,\n 59626: 38893,\n 59627: 40783,\n 59628: 38898,\n 59629: 31455,\n 59630: 38902,\n 59631: 38901,\n 59632: 38927,\n 59633: 38924,\n 59634: 38968,\n 59635: 38948,\n 59636: 38945,\n 59637: 38967,\n 59638: 38973,\n 59639: 38982,\n 59640: 38991,\n 59641: 38987,\n 59642: 39019,\n 59643: 39023,\n 59644: 39024,\n 59712: 39025,\n 59713: 39028,\n 59714: 39027,\n 59715: 39082,\n 59716: 39087,\n 59717: 39089,\n 59718: 39094,\n 59719: 39108,\n 59720: 39107,\n 59721: 39110,\n 59722: 39145,\n 59723: 39147,\n 59724: 39171,\n 59725: 39177,\n 59726: 39186,\n 59727: 39188,\n 59728: 39192,\n 59729: 39201,\n 59730: 39197,\n 59731: 39198,\n 59732: 39204,\n 59733: 39200,\n 59734: 39212,\n 59735: 39214,\n 59736: 39229,\n 59737: 39230,\n 59738: 39234,\n 59739: 39241,\n 59740: 39237,\n 59741: 39248,\n 59742: 39243,\n 59743: 39249,\n 59744: 39250,\n 59745: 39244,\n 59746: 39253,\n 59747: 39319,\n 59748: 39320,\n 59749: 39333,\n 59750: 39341,\n 59751: 39342,\n 59752: 39356,\n 59753: 39391,\n 59754: 39387,\n 59755: 39389,\n 59756: 39384,\n 59757: 39377,\n 59758: 39405,\n 59759: 39406,\n 59760: 39409,\n 59761: 39410,\n 59762: 39419,\n 59763: 39416,\n 59764: 39425,\n 59765: 39439,\n 59766: 39429,\n 59767: 39394,\n 59768: 39449,\n 59769: 39467,\n 59770: 39479,\n 59771: 39493,\n 59772: 39490,\n 59773: 39488,\n 59774: 39491,\n 59776: 39486,\n 59777: 39509,\n 59778: 39501,\n 59779: 39515,\n 59780: 39511,\n 59781: 39519,\n 59782: 39522,\n 59783: 39525,\n 59784: 39524,\n 59785: 39529,\n 59786: 39531,\n 59787: 39530,\n 59788: 39597,\n 59789: 39600,\n 59790: 39612,\n 59791: 39616,\n 59792: 39631,\n 59793: 39633,\n 59794: 39635,\n 59795: 39636,\n 59796: 39646,\n 59797: 39647,\n 59798: 39650,\n 59799: 39651,\n 59800: 39654,\n 59801: 39663,\n 59802: 39659,\n 59803: 39662,\n 59804: 39668,\n 59805: 39665,\n 59806: 39671,\n 59807: 39675,\n 59808: 39686,\n 59809: 39704,\n 59810: 39706,\n 59811: 39711,\n 59812: 39714,\n 59813: 39715,\n 59814: 39717,\n 59815: 39719,\n 59816: 39720,\n 59817: 39721,\n 59818: 39722,\n 59819: 39726,\n 59820: 39727,\n 59821: 39730,\n 59822: 39748,\n 59823: 39747,\n 59824: 39759,\n 59825: 39757,\n 59826: 39758,\n 59827: 39761,\n 59828: 39768,\n 59829: 39796,\n 59830: 39827,\n 59831: 39811,\n 59832: 39825,\n 59833: 39830,\n 59834: 39831,\n 59835: 39839,\n 59836: 39840,\n 59837: 39848,\n 59838: 39860,\n 59839: 39872,\n 59840: 39882,\n 59841: 39865,\n 59842: 39878,\n 59843: 39887,\n 59844: 39889,\n 59845: 39890,\n 59846: 39907,\n 59847: 39906,\n 59848: 39908,\n 59849: 39892,\n 59850: 39905,\n 59851: 39994,\n 59852: 39922,\n 59853: 39921,\n 59854: 39920,\n 59855: 39957,\n 59856: 39956,\n 59857: 39945,\n 59858: 39955,\n 59859: 39948,\n 59860: 39942,\n 59861: 39944,\n 59862: 39954,\n 59863: 39946,\n 59864: 39940,\n 59865: 39982,\n 59866: 39963,\n 59867: 39973,\n 59868: 39972,\n 59869: 39969,\n 59870: 39984,\n 59871: 40007,\n 59872: 39986,\n 59873: 40006,\n 59874: 39998,\n 59875: 40026,\n 59876: 40032,\n 59877: 40039,\n 59878: 40054,\n 59879: 40056,\n 59880: 40167,\n 59881: 40172,\n 59882: 40176,\n 59883: 40201,\n 59884: 40200,\n 59885: 40171,\n 59886: 40195,\n 59887: 40198,\n 59888: 40234,\n 59889: 40230,\n 59890: 40367,\n 59891: 40227,\n 59892: 40223,\n 59893: 40260,\n 59894: 40213,\n 59895: 40210,\n 59896: 40257,\n 59897: 40255,\n 59898: 40254,\n 59899: 40262,\n 59900: 40264,\n 59968: 40285,\n 59969: 40286,\n 59970: 40292,\n 59971: 40273,\n 59972: 40272,\n 59973: 40281,\n 59974: 40306,\n 59975: 40329,\n 59976: 40327,\n 59977: 40363,\n 59978: 40303,\n 59979: 40314,\n 59980: 40346,\n 59981: 40356,\n 59982: 40361,\n 59983: 40370,\n 59984: 40388,\n 59985: 40385,\n 59986: 40379,\n 59987: 40376,\n 59988: 40378,\n 59989: 40390,\n 59990: 40399,\n 59991: 40386,\n 59992: 40409,\n 59993: 40403,\n 59994: 40440,\n 59995: 40422,\n 59996: 40429,\n 59997: 40431,\n 59998: 40445,\n 59999: 40474,\n 6e4: 40475,\n 60001: 40478,\n 60002: 40565,\n 60003: 40569,\n 60004: 40573,\n 60005: 40577,\n 60006: 40584,\n 60007: 40587,\n 60008: 40588,\n 60009: 40594,\n 60010: 40597,\n 60011: 40593,\n 60012: 40605,\n 60013: 40613,\n 60014: 40617,\n 60015: 40632,\n 60016: 40618,\n 60017: 40621,\n 60018: 38753,\n 60019: 40652,\n 60020: 40654,\n 60021: 40655,\n 60022: 40656,\n 60023: 40660,\n 60024: 40668,\n 60025: 40670,\n 60026: 40669,\n 60027: 40672,\n 60028: 40677,\n 60029: 40680,\n 60030: 40687,\n 60032: 40692,\n 60033: 40694,\n 60034: 40695,\n 60035: 40697,\n 60036: 40699,\n 60037: 40700,\n 60038: 40701,\n 60039: 40711,\n 60040: 40712,\n 60041: 30391,\n 60042: 40725,\n 60043: 40737,\n 60044: 40748,\n 60045: 40766,\n 60046: 40778,\n 60047: 40786,\n 60048: 40788,\n 60049: 40803,\n 60050: 40799,\n 60051: 40800,\n 60052: 40801,\n 60053: 40806,\n 60054: 40807,\n 60055: 40812,\n 60056: 40810,\n 60057: 40823,\n 60058: 40818,\n 60059: 40822,\n 60060: 40853,\n 60061: 40860,\n 60062: 40864,\n 60063: 22575,\n 60064: 27079,\n 60065: 36953,\n 60066: 29796,\n 60067: 20956,\n 60068: 29081,\n 60736: 32394,\n 60737: 35100,\n 60738: 37704,\n 60739: 37512,\n 60740: 34012,\n 60741: 20425,\n 60742: 28859,\n 60743: 26161,\n 60744: 26824,\n 60745: 37625,\n 60746: 26363,\n 60747: 24389,\n 60748: 20008,\n 60749: 20193,\n 60750: 20220,\n 60751: 20224,\n 60752: 20227,\n 60753: 20281,\n 60754: 20310,\n 60755: 20370,\n 60756: 20362,\n 60757: 20378,\n 60758: 20372,\n 60759: 20429,\n 60760: 20544,\n 60761: 20514,\n 60762: 20479,\n 60763: 20510,\n 60764: 20550,\n 60765: 20592,\n 60766: 20546,\n 60767: 20628,\n 60768: 20724,\n 60769: 20696,\n 60770: 20810,\n 60771: 20836,\n 60772: 20893,\n 60773: 20926,\n 60774: 20972,\n 60775: 21013,\n 60776: 21148,\n 60777: 21158,\n 60778: 21184,\n 60779: 21211,\n 60780: 21248,\n 60781: 21255,\n 60782: 21284,\n 60783: 21362,\n 60784: 21395,\n 60785: 21426,\n 60786: 21469,\n 60787: 64014,\n 60788: 21660,\n 60789: 21642,\n 60790: 21673,\n 60791: 21759,\n 60792: 21894,\n 60793: 22361,\n 60794: 22373,\n 60795: 22444,\n 60796: 22472,\n 60797: 22471,\n 60798: 64015,\n 60800: 64016,\n 60801: 22686,\n 60802: 22706,\n 60803: 22795,\n 60804: 22867,\n 60805: 22875,\n 60806: 22877,\n 60807: 22883,\n 60808: 22948,\n 60809: 22970,\n 60810: 23382,\n 60811: 23488,\n 60812: 29999,\n 60813: 23512,\n 60814: 23532,\n 60815: 23582,\n 60816: 23718,\n 60817: 23738,\n 60818: 23797,\n 60819: 23847,\n 60820: 23891,\n 60821: 64017,\n 60822: 23874,\n 60823: 23917,\n 60824: 23992,\n 60825: 23993,\n 60826: 24016,\n 60827: 24353,\n 60828: 24372,\n 60829: 24423,\n 60830: 24503,\n 60831: 24542,\n 60832: 24669,\n 60833: 24709,\n 60834: 24714,\n 60835: 24798,\n 60836: 24789,\n 60837: 24864,\n 60838: 24818,\n 60839: 24849,\n 60840: 24887,\n 60841: 24880,\n 60842: 24984,\n 60843: 25107,\n 60844: 25254,\n 60845: 25589,\n 60846: 25696,\n 60847: 25757,\n 60848: 25806,\n 60849: 25934,\n 60850: 26112,\n 60851: 26133,\n 60852: 26171,\n 60853: 26121,\n 60854: 26158,\n 60855: 26142,\n 60856: 26148,\n 60857: 26213,\n 60858: 26199,\n 60859: 26201,\n 60860: 64018,\n 60861: 26227,\n 60862: 26265,\n 60863: 26272,\n 60864: 26290,\n 60865: 26303,\n 60866: 26362,\n 60867: 26382,\n 60868: 63785,\n 60869: 26470,\n 60870: 26555,\n 60871: 26706,\n 60872: 26560,\n 60873: 26625,\n 60874: 26692,\n 60875: 26831,\n 60876: 64019,\n 60877: 26984,\n 60878: 64020,\n 60879: 27032,\n 60880: 27106,\n 60881: 27184,\n 60882: 27243,\n 60883: 27206,\n 60884: 27251,\n 60885: 27262,\n 60886: 27362,\n 60887: 27364,\n 60888: 27606,\n 60889: 27711,\n 60890: 27740,\n 60891: 27782,\n 60892: 27759,\n 60893: 27866,\n 60894: 27908,\n 60895: 28039,\n 60896: 28015,\n 60897: 28054,\n 60898: 28076,\n 60899: 28111,\n 60900: 28152,\n 60901: 28146,\n 60902: 28156,\n 60903: 28217,\n 60904: 28252,\n 60905: 28199,\n 60906: 28220,\n 60907: 28351,\n 60908: 28552,\n 60909: 28597,\n 60910: 28661,\n 60911: 28677,\n 60912: 28679,\n 60913: 28712,\n 60914: 28805,\n 60915: 28843,\n 60916: 28943,\n 60917: 28932,\n 60918: 29020,\n 60919: 28998,\n 60920: 28999,\n 60921: 64021,\n 60922: 29121,\n 60923: 29182,\n 60924: 29361,\n 60992: 29374,\n 60993: 29476,\n 60994: 64022,\n 60995: 29559,\n 60996: 29629,\n 60997: 29641,\n 60998: 29654,\n 60999: 29667,\n 61e3: 29650,\n 61001: 29703,\n 61002: 29685,\n 61003: 29734,\n 61004: 29738,\n 61005: 29737,\n 61006: 29742,\n 61007: 29794,\n 61008: 29833,\n 61009: 29855,\n 61010: 29953,\n 61011: 30063,\n 61012: 30338,\n 61013: 30364,\n 61014: 30366,\n 61015: 30363,\n 61016: 30374,\n 61017: 64023,\n 61018: 30534,\n 61019: 21167,\n 61020: 30753,\n 61021: 30798,\n 61022: 30820,\n 61023: 30842,\n 61024: 31024,\n 61025: 64024,\n 61026: 64025,\n 61027: 64026,\n 61028: 31124,\n 61029: 64027,\n 61030: 31131,\n 61031: 31441,\n 61032: 31463,\n 61033: 64028,\n 61034: 31467,\n 61035: 31646,\n 61036: 64029,\n 61037: 32072,\n 61038: 32092,\n 61039: 32183,\n 61040: 32160,\n 61041: 32214,\n 61042: 32338,\n 61043: 32583,\n 61044: 32673,\n 61045: 64030,\n 61046: 33537,\n 61047: 33634,\n 61048: 33663,\n 61049: 33735,\n 61050: 33782,\n 61051: 33864,\n 61052: 33972,\n 61053: 34131,\n 61054: 34137,\n 61056: 34155,\n 61057: 64031,\n 61058: 34224,\n 61059: 64032,\n 61060: 64033,\n 61061: 34823,\n 61062: 35061,\n 61063: 35346,\n 61064: 35383,\n 61065: 35449,\n 61066: 35495,\n 61067: 35518,\n 61068: 35551,\n 61069: 64034,\n 61070: 35574,\n 61071: 35667,\n 61072: 35711,\n 61073: 36080,\n 61074: 36084,\n 61075: 36114,\n 61076: 36214,\n 61077: 64035,\n 61078: 36559,\n 61079: 64036,\n 61080: 64037,\n 61081: 36967,\n 61082: 37086,\n 61083: 64038,\n 61084: 37141,\n 61085: 37159,\n 61086: 37338,\n 61087: 37335,\n 61088: 37342,\n 61089: 37357,\n 61090: 37358,\n 61091: 37348,\n 61092: 37349,\n 61093: 37382,\n 61094: 37392,\n 61095: 37386,\n 61096: 37434,\n 61097: 37440,\n 61098: 37436,\n 61099: 37454,\n 61100: 37465,\n 61101: 37457,\n 61102: 37433,\n 61103: 37479,\n 61104: 37543,\n 61105: 37495,\n 61106: 37496,\n 61107: 37607,\n 61108: 37591,\n 61109: 37593,\n 61110: 37584,\n 61111: 64039,\n 61112: 37589,\n 61113: 37600,\n 61114: 37587,\n 61115: 37669,\n 61116: 37665,\n 61117: 37627,\n 61118: 64040,\n 61119: 37662,\n 61120: 37631,\n 61121: 37661,\n 61122: 37634,\n 61123: 37744,\n 61124: 37719,\n 61125: 37796,\n 61126: 37830,\n 61127: 37854,\n 61128: 37880,\n 61129: 37937,\n 61130: 37957,\n 61131: 37960,\n 61132: 38290,\n 61133: 63964,\n 61134: 64041,\n 61135: 38557,\n 61136: 38575,\n 61137: 38707,\n 61138: 38715,\n 61139: 38723,\n 61140: 38733,\n 61141: 38735,\n 61142: 38737,\n 61143: 38741,\n 61144: 38999,\n 61145: 39013,\n 61146: 64042,\n 61147: 64043,\n 61148: 39207,\n 61149: 64044,\n 61150: 39326,\n 61151: 39502,\n 61152: 39641,\n 61153: 39644,\n 61154: 39797,\n 61155: 39794,\n 61156: 39823,\n 61157: 39857,\n 61158: 39867,\n 61159: 39936,\n 61160: 40304,\n 61161: 40299,\n 61162: 64045,\n 61163: 40473,\n 61164: 40657,\n 61167: 8560,\n 61168: 8561,\n 61169: 8562,\n 61170: 8563,\n 61171: 8564,\n 61172: 8565,\n 61173: 8566,\n 61174: 8567,\n 61175: 8568,\n 61176: 8569,\n 61177: 65506,\n 61178: 65508,\n 61179: 65287,\n 61180: 65282,\n 61504: 57344,\n 61505: 57345,\n 61506: 57346,\n 61507: 57347,\n 61508: 57348,\n 61509: 57349,\n 61510: 57350,\n 61511: 57351,\n 61512: 57352,\n 61513: 57353,\n 61514: 57354,\n 61515: 57355,\n 61516: 57356,\n 61517: 57357,\n 61518: 57358,\n 61519: 57359,\n 61520: 57360,\n 61521: 57361,\n 61522: 57362,\n 61523: 57363,\n 61524: 57364,\n 61525: 57365,\n 61526: 57366,\n 61527: 57367,\n 61528: 57368,\n 61529: 57369,\n 61530: 57370,\n 61531: 57371,\n 61532: 57372,\n 61533: 57373,\n 61534: 57374,\n 61535: 57375,\n 61536: 57376,\n 61537: 57377,\n 61538: 57378,\n 61539: 57379,\n 61540: 57380,\n 61541: 57381,\n 61542: 57382,\n 61543: 57383,\n 61544: 57384,\n 61545: 57385,\n 61546: 57386,\n 61547: 57387,\n 61548: 57388,\n 61549: 57389,\n 61550: 57390,\n 61551: 57391,\n 61552: 57392,\n 61553: 57393,\n 61554: 57394,\n 61555: 57395,\n 61556: 57396,\n 61557: 57397,\n 61558: 57398,\n 61559: 57399,\n 61560: 57400,\n 61561: 57401,\n 61562: 57402,\n 61563: 57403,\n 61564: 57404,\n 61565: 57405,\n 61566: 57406,\n 61568: 57407,\n 61569: 57408,\n 61570: 57409,\n 61571: 57410,\n 61572: 57411,\n 61573: 57412,\n 61574: 57413,\n 61575: 57414,\n 61576: 57415,\n 61577: 57416,\n 61578: 57417,\n 61579: 57418,\n 61580: 57419,\n 61581: 57420,\n 61582: 57421,\n 61583: 57422,\n 61584: 57423,\n 61585: 57424,\n 61586: 57425,\n 61587: 57426,\n 61588: 57427,\n 61589: 57428,\n 61590: 57429,\n 61591: 57430,\n 61592: 57431,\n 61593: 57432,\n 61594: 57433,\n 61595: 57434,\n 61596: 57435,\n 61597: 57436,\n 61598: 57437,\n 61599: 57438,\n 61600: 57439,\n 61601: 57440,\n 61602: 57441,\n 61603: 57442,\n 61604: 57443,\n 61605: 57444,\n 61606: 57445,\n 61607: 57446,\n 61608: 57447,\n 61609: 57448,\n 61610: 57449,\n 61611: 57450,\n 61612: 57451,\n 61613: 57452,\n 61614: 57453,\n 61615: 57454,\n 61616: 57455,\n 61617: 57456,\n 61618: 57457,\n 61619: 57458,\n 61620: 57459,\n 61621: 57460,\n 61622: 57461,\n 61623: 57462,\n 61624: 57463,\n 61625: 57464,\n 61626: 57465,\n 61627: 57466,\n 61628: 57467,\n 61629: 57468,\n 61630: 57469,\n 61631: 57470,\n 61632: 57471,\n 61633: 57472,\n 61634: 57473,\n 61635: 57474,\n 61636: 57475,\n 61637: 57476,\n 61638: 57477,\n 61639: 57478,\n 61640: 57479,\n 61641: 57480,\n 61642: 57481,\n 61643: 57482,\n 61644: 57483,\n 61645: 57484,\n 61646: 57485,\n 61647: 57486,\n 61648: 57487,\n 61649: 57488,\n 61650: 57489,\n 61651: 57490,\n 61652: 57491,\n 61653: 57492,\n 61654: 57493,\n 61655: 57494,\n 61656: 57495,\n 61657: 57496,\n 61658: 57497,\n 61659: 57498,\n 61660: 57499,\n 61661: 57500,\n 61662: 57501,\n 61663: 57502,\n 61664: 57503,\n 61665: 57504,\n 61666: 57505,\n 61667: 57506,\n 61668: 57507,\n 61669: 57508,\n 61670: 57509,\n 61671: 57510,\n 61672: 57511,\n 61673: 57512,\n 61674: 57513,\n 61675: 57514,\n 61676: 57515,\n 61677: 57516,\n 61678: 57517,\n 61679: 57518,\n 61680: 57519,\n 61681: 57520,\n 61682: 57521,\n 61683: 57522,\n 61684: 57523,\n 61685: 57524,\n 61686: 57525,\n 61687: 57526,\n 61688: 57527,\n 61689: 57528,\n 61690: 57529,\n 61691: 57530,\n 61692: 57531,\n 61760: 57532,\n 61761: 57533,\n 61762: 57534,\n 61763: 57535,\n 61764: 57536,\n 61765: 57537,\n 61766: 57538,\n 61767: 57539,\n 61768: 57540,\n 61769: 57541,\n 61770: 57542,\n 61771: 57543,\n 61772: 57544,\n 61773: 57545,\n 61774: 57546,\n 61775: 57547,\n 61776: 57548,\n 61777: 57549,\n 61778: 57550,\n 61779: 57551,\n 61780: 57552,\n 61781: 57553,\n 61782: 57554,\n 61783: 57555,\n 61784: 57556,\n 61785: 57557,\n 61786: 57558,\n 61787: 57559,\n 61788: 57560,\n 61789: 57561,\n 61790: 57562,\n 61791: 57563,\n 61792: 57564,\n 61793: 57565,\n 61794: 57566,\n 61795: 57567,\n 61796: 57568,\n 61797: 57569,\n 61798: 57570,\n 61799: 57571,\n 61800: 57572,\n 61801: 57573,\n 61802: 57574,\n 61803: 57575,\n 61804: 57576,\n 61805: 57577,\n 61806: 57578,\n 61807: 57579,\n 61808: 57580,\n 61809: 57581,\n 61810: 57582,\n 61811: 57583,\n 61812: 57584,\n 61813: 57585,\n 61814: 57586,\n 61815: 57587,\n 61816: 57588,\n 61817: 57589,\n 61818: 57590,\n 61819: 57591,\n 61820: 57592,\n 61821: 57593,\n 61822: 57594,\n 61824: 57595,\n 61825: 57596,\n 61826: 57597,\n 61827: 57598,\n 61828: 57599,\n 61829: 57600,\n 61830: 57601,\n 61831: 57602,\n 61832: 57603,\n 61833: 57604,\n 61834: 57605,\n 61835: 57606,\n 61836: 57607,\n 61837: 57608,\n 61838: 57609,\n 61839: 57610,\n 61840: 57611,\n 61841: 57612,\n 61842: 57613,\n 61843: 57614,\n 61844: 57615,\n 61845: 57616,\n 61846: 57617,\n 61847: 57618,\n 61848: 57619,\n 61849: 57620,\n 61850: 57621,\n 61851: 57622,\n 61852: 57623,\n 61853: 57624,\n 61854: 57625,\n 61855: 57626,\n 61856: 57627,\n 61857: 57628,\n 61858: 57629,\n 61859: 57630,\n 61860: 57631,\n 61861: 57632,\n 61862: 57633,\n 61863: 57634,\n 61864: 57635,\n 61865: 57636,\n 61866: 57637,\n 61867: 57638,\n 61868: 57639,\n 61869: 57640,\n 61870: 57641,\n 61871: 57642,\n 61872: 57643,\n 61873: 57644,\n 61874: 57645,\n 61875: 57646,\n 61876: 57647,\n 61877: 57648,\n 61878: 57649,\n 61879: 57650,\n 61880: 57651,\n 61881: 57652,\n 61882: 57653,\n 61883: 57654,\n 61884: 57655,\n 61885: 57656,\n 61886: 57657,\n 61887: 57658,\n 61888: 57659,\n 61889: 57660,\n 61890: 57661,\n 61891: 57662,\n 61892: 57663,\n 61893: 57664,\n 61894: 57665,\n 61895: 57666,\n 61896: 57667,\n 61897: 57668,\n 61898: 57669,\n 61899: 57670,\n 61900: 57671,\n 61901: 57672,\n 61902: 57673,\n 61903: 57674,\n 61904: 57675,\n 61905: 57676,\n 61906: 57677,\n 61907: 57678,\n 61908: 57679,\n 61909: 57680,\n 61910: 57681,\n 61911: 57682,\n 61912: 57683,\n 61913: 57684,\n 61914: 57685,\n 61915: 57686,\n 61916: 57687,\n 61917: 57688,\n 61918: 57689,\n 61919: 57690,\n 61920: 57691,\n 61921: 57692,\n 61922: 57693,\n 61923: 57694,\n 61924: 57695,\n 61925: 57696,\n 61926: 57697,\n 61927: 57698,\n 61928: 57699,\n 61929: 57700,\n 61930: 57701,\n 61931: 57702,\n 61932: 57703,\n 61933: 57704,\n 61934: 57705,\n 61935: 57706,\n 61936: 57707,\n 61937: 57708,\n 61938: 57709,\n 61939: 57710,\n 61940: 57711,\n 61941: 57712,\n 61942: 57713,\n 61943: 57714,\n 61944: 57715,\n 61945: 57716,\n 61946: 57717,\n 61947: 57718,\n 61948: 57719,\n 62016: 57720,\n 62017: 57721,\n 62018: 57722,\n 62019: 57723,\n 62020: 57724,\n 62021: 57725,\n 62022: 57726,\n 62023: 57727,\n 62024: 57728,\n 62025: 57729,\n 62026: 57730,\n 62027: 57731,\n 62028: 57732,\n 62029: 57733,\n 62030: 57734,\n 62031: 57735,\n 62032: 57736,\n 62033: 57737,\n 62034: 57738,\n 62035: 57739,\n 62036: 57740,\n 62037: 57741,\n 62038: 57742,\n 62039: 57743,\n 62040: 57744,\n 62041: 57745,\n 62042: 57746,\n 62043: 57747,\n 62044: 57748,\n 62045: 57749,\n 62046: 57750,\n 62047: 57751,\n 62048: 57752,\n 62049: 57753,\n 62050: 57754,\n 62051: 57755,\n 62052: 57756,\n 62053: 57757,\n 62054: 57758,\n 62055: 57759,\n 62056: 57760,\n 62057: 57761,\n 62058: 57762,\n 62059: 57763,\n 62060: 57764,\n 62061: 57765,\n 62062: 57766,\n 62063: 57767,\n 62064: 57768,\n 62065: 57769,\n 62066: 57770,\n 62067: 57771,\n 62068: 57772,\n 62069: 57773,\n 62070: 57774,\n 62071: 57775,\n 62072: 57776,\n 62073: 57777,\n 62074: 57778,\n 62075: 57779,\n 62076: 57780,\n 62077: 57781,\n 62078: 57782,\n 62080: 57783,\n 62081: 57784,\n 62082: 57785,\n 62083: 57786,\n 62084: 57787,\n 62085: 57788,\n 62086: 57789,\n 62087: 57790,\n 62088: 57791,\n 62089: 57792,\n 62090: 57793,\n 62091: 57794,\n 62092: 57795,\n 62093: 57796,\n 62094: 57797,\n 62095: 57798,\n 62096: 57799,\n 62097: 57800,\n 62098: 57801,\n 62099: 57802,\n 62100: 57803,\n 62101: 57804,\n 62102: 57805,\n 62103: 57806,\n 62104: 57807,\n 62105: 57808,\n 62106: 57809,\n 62107: 57810,\n 62108: 57811,\n 62109: 57812,\n 62110: 57813,\n 62111: 57814,\n 62112: 57815,\n 62113: 57816,\n 62114: 57817,\n 62115: 57818,\n 62116: 57819,\n 62117: 57820,\n 62118: 57821,\n 62119: 57822,\n 62120: 57823,\n 62121: 57824,\n 62122: 57825,\n 62123: 57826,\n 62124: 57827,\n 62125: 57828,\n 62126: 57829,\n 62127: 57830,\n 62128: 57831,\n 62129: 57832,\n 62130: 57833,\n 62131: 57834,\n 62132: 57835,\n 62133: 57836,\n 62134: 57837,\n 62135: 57838,\n 62136: 57839,\n 62137: 57840,\n 62138: 57841,\n 62139: 57842,\n 62140: 57843,\n 62141: 57844,\n 62142: 57845,\n 62143: 57846,\n 62144: 57847,\n 62145: 57848,\n 62146: 57849,\n 62147: 57850,\n 62148: 57851,\n 62149: 57852,\n 62150: 57853,\n 62151: 57854,\n 62152: 57855,\n 62153: 57856,\n 62154: 57857,\n 62155: 57858,\n 62156: 57859,\n 62157: 57860,\n 62158: 57861,\n 62159: 57862,\n 62160: 57863,\n 62161: 57864,\n 62162: 57865,\n 62163: 57866,\n 62164: 57867,\n 62165: 57868,\n 62166: 57869,\n 62167: 57870,\n 62168: 57871,\n 62169: 57872,\n 62170: 57873,\n 62171: 57874,\n 62172: 57875,\n 62173: 57876,\n 62174: 57877,\n 62175: 57878,\n 62176: 57879,\n 62177: 57880,\n 62178: 57881,\n 62179: 57882,\n 62180: 57883,\n 62181: 57884,\n 62182: 57885,\n 62183: 57886,\n 62184: 57887,\n 62185: 57888,\n 62186: 57889,\n 62187: 57890,\n 62188: 57891,\n 62189: 57892,\n 62190: 57893,\n 62191: 57894,\n 62192: 57895,\n 62193: 57896,\n 62194: 57897,\n 62195: 57898,\n 62196: 57899,\n 62197: 57900,\n 62198: 57901,\n 62199: 57902,\n 62200: 57903,\n 62201: 57904,\n 62202: 57905,\n 62203: 57906,\n 62204: 57907,\n 62272: 57908,\n 62273: 57909,\n 62274: 57910,\n 62275: 57911,\n 62276: 57912,\n 62277: 57913,\n 62278: 57914,\n 62279: 57915,\n 62280: 57916,\n 62281: 57917,\n 62282: 57918,\n 62283: 57919,\n 62284: 57920,\n 62285: 57921,\n 62286: 57922,\n 62287: 57923,\n 62288: 57924,\n 62289: 57925,\n 62290: 57926,\n 62291: 57927,\n 62292: 57928,\n 62293: 57929,\n 62294: 57930,\n 62295: 57931,\n 62296: 57932,\n 62297: 57933,\n 62298: 57934,\n 62299: 57935,\n 62300: 57936,\n 62301: 57937,\n 62302: 57938,\n 62303: 57939,\n 62304: 57940,\n 62305: 57941,\n 62306: 57942,\n 62307: 57943,\n 62308: 57944,\n 62309: 57945,\n 62310: 57946,\n 62311: 57947,\n 62312: 57948,\n 62313: 57949,\n 62314: 57950,\n 62315: 57951,\n 62316: 57952,\n 62317: 57953,\n 62318: 57954,\n 62319: 57955,\n 62320: 57956,\n 62321: 57957,\n 62322: 57958,\n 62323: 57959,\n 62324: 57960,\n 62325: 57961,\n 62326: 57962,\n 62327: 57963,\n 62328: 57964,\n 62329: 57965,\n 62330: 57966,\n 62331: 57967,\n 62332: 57968,\n 62333: 57969,\n 62334: 57970,\n 62336: 57971,\n 62337: 57972,\n 62338: 57973,\n 62339: 57974,\n 62340: 57975,\n 62341: 57976,\n 62342: 57977,\n 62343: 57978,\n 62344: 57979,\n 62345: 57980,\n 62346: 57981,\n 62347: 57982,\n 62348: 57983,\n 62349: 57984,\n 62350: 57985,\n 62351: 57986,\n 62352: 57987,\n 62353: 57988,\n 62354: 57989,\n 62355: 57990,\n 62356: 57991,\n 62357: 57992,\n 62358: 57993,\n 62359: 57994,\n 62360: 57995,\n 62361: 57996,\n 62362: 57997,\n 62363: 57998,\n 62364: 57999,\n 62365: 58e3,\n 62366: 58001,\n 62367: 58002,\n 62368: 58003,\n 62369: 58004,\n 62370: 58005,\n 62371: 58006,\n 62372: 58007,\n 62373: 58008,\n 62374: 58009,\n 62375: 58010,\n 62376: 58011,\n 62377: 58012,\n 62378: 58013,\n 62379: 58014,\n 62380: 58015,\n 62381: 58016,\n 62382: 58017,\n 62383: 58018,\n 62384: 58019,\n 62385: 58020,\n 62386: 58021,\n 62387: 58022,\n 62388: 58023,\n 62389: 58024,\n 62390: 58025,\n 62391: 58026,\n 62392: 58027,\n 62393: 58028,\n 62394: 58029,\n 62395: 58030,\n 62396: 58031,\n 62397: 58032,\n 62398: 58033,\n 62399: 58034,\n 62400: 58035,\n 62401: 58036,\n 62402: 58037,\n 62403: 58038,\n 62404: 58039,\n 62405: 58040,\n 62406: 58041,\n 62407: 58042,\n 62408: 58043,\n 62409: 58044,\n 62410: 58045,\n 62411: 58046,\n 62412: 58047,\n 62413: 58048,\n 62414: 58049,\n 62415: 58050,\n 62416: 58051,\n 62417: 58052,\n 62418: 58053,\n 62419: 58054,\n 62420: 58055,\n 62421: 58056,\n 62422: 58057,\n 62423: 58058,\n 62424: 58059,\n 62425: 58060,\n 62426: 58061,\n 62427: 58062,\n 62428: 58063,\n 62429: 58064,\n 62430: 58065,\n 62431: 58066,\n 62432: 58067,\n 62433: 58068,\n 62434: 58069,\n 62435: 58070,\n 62436: 58071,\n 62437: 58072,\n 62438: 58073,\n 62439: 58074,\n 62440: 58075,\n 62441: 58076,\n 62442: 58077,\n 62443: 58078,\n 62444: 58079,\n 62445: 58080,\n 62446: 58081,\n 62447: 58082,\n 62448: 58083,\n 62449: 58084,\n 62450: 58085,\n 62451: 58086,\n 62452: 58087,\n 62453: 58088,\n 62454: 58089,\n 62455: 58090,\n 62456: 58091,\n 62457: 58092,\n 62458: 58093,\n 62459: 58094,\n 62460: 58095,\n 62528: 58096,\n 62529: 58097,\n 62530: 58098,\n 62531: 58099,\n 62532: 58100,\n 62533: 58101,\n 62534: 58102,\n 62535: 58103,\n 62536: 58104,\n 62537: 58105,\n 62538: 58106,\n 62539: 58107,\n 62540: 58108,\n 62541: 58109,\n 62542: 58110,\n 62543: 58111,\n 62544: 58112,\n 62545: 58113,\n 62546: 58114,\n 62547: 58115,\n 62548: 58116,\n 62549: 58117,\n 62550: 58118,\n 62551: 58119,\n 62552: 58120,\n 62553: 58121,\n 62554: 58122,\n 62555: 58123,\n 62556: 58124,\n 62557: 58125,\n 62558: 58126,\n 62559: 58127,\n 62560: 58128,\n 62561: 58129,\n 62562: 58130,\n 62563: 58131,\n 62564: 58132,\n 62565: 58133,\n 62566: 58134,\n 62567: 58135,\n 62568: 58136,\n 62569: 58137,\n 62570: 58138,\n 62571: 58139,\n 62572: 58140,\n 62573: 58141,\n 62574: 58142,\n 62575: 58143,\n 62576: 58144,\n 62577: 58145,\n 62578: 58146,\n 62579: 58147,\n 62580: 58148,\n 62581: 58149,\n 62582: 58150,\n 62583: 58151,\n 62584: 58152,\n 62585: 58153,\n 62586: 58154,\n 62587: 58155,\n 62588: 58156,\n 62589: 58157,\n 62590: 58158,\n 62592: 58159,\n 62593: 58160,\n 62594: 58161,\n 62595: 58162,\n 62596: 58163,\n 62597: 58164,\n 62598: 58165,\n 62599: 58166,\n 62600: 58167,\n 62601: 58168,\n 62602: 58169,\n 62603: 58170,\n 62604: 58171,\n 62605: 58172,\n 62606: 58173,\n 62607: 58174,\n 62608: 58175,\n 62609: 58176,\n 62610: 58177,\n 62611: 58178,\n 62612: 58179,\n 62613: 58180,\n 62614: 58181,\n 62615: 58182,\n 62616: 58183,\n 62617: 58184,\n 62618: 58185,\n 62619: 58186,\n 62620: 58187,\n 62621: 58188,\n 62622: 58189,\n 62623: 58190,\n 62624: 58191,\n 62625: 58192,\n 62626: 58193,\n 62627: 58194,\n 62628: 58195,\n 62629: 58196,\n 62630: 58197,\n 62631: 58198,\n 62632: 58199,\n 62633: 58200,\n 62634: 58201,\n 62635: 58202,\n 62636: 58203,\n 62637: 58204,\n 62638: 58205,\n 62639: 58206,\n 62640: 58207,\n 62641: 58208,\n 62642: 58209,\n 62643: 58210,\n 62644: 58211,\n 62645: 58212,\n 62646: 58213,\n 62647: 58214,\n 62648: 58215,\n 62649: 58216,\n 62650: 58217,\n 62651: 58218,\n 62652: 58219,\n 62653: 58220,\n 62654: 58221,\n 62655: 58222,\n 62656: 58223,\n 62657: 58224,\n 62658: 58225,\n 62659: 58226,\n 62660: 58227,\n 62661: 58228,\n 62662: 58229,\n 62663: 58230,\n 62664: 58231,\n 62665: 58232,\n 62666: 58233,\n 62667: 58234,\n 62668: 58235,\n 62669: 58236,\n 62670: 58237,\n 62671: 58238,\n 62672: 58239,\n 62673: 58240,\n 62674: 58241,\n 62675: 58242,\n 62676: 58243,\n 62677: 58244,\n 62678: 58245,\n 62679: 58246,\n 62680: 58247,\n 62681: 58248,\n 62682: 58249,\n 62683: 58250,\n 62684: 58251,\n 62685: 58252,\n 62686: 58253,\n 62687: 58254,\n 62688: 58255,\n 62689: 58256,\n 62690: 58257,\n 62691: 58258,\n 62692: 58259,\n 62693: 58260,\n 62694: 58261,\n 62695: 58262,\n 62696: 58263,\n 62697: 58264,\n 62698: 58265,\n 62699: 58266,\n 62700: 58267,\n 62701: 58268,\n 62702: 58269,\n 62703: 58270,\n 62704: 58271,\n 62705: 58272,\n 62706: 58273,\n 62707: 58274,\n 62708: 58275,\n 62709: 58276,\n 62710: 58277,\n 62711: 58278,\n 62712: 58279,\n 62713: 58280,\n 62714: 58281,\n 62715: 58282,\n 62716: 58283,\n 62784: 58284,\n 62785: 58285,\n 62786: 58286,\n 62787: 58287,\n 62788: 58288,\n 62789: 58289,\n 62790: 58290,\n 62791: 58291,\n 62792: 58292,\n 62793: 58293,\n 62794: 58294,\n 62795: 58295,\n 62796: 58296,\n 62797: 58297,\n 62798: 58298,\n 62799: 58299,\n 62800: 58300,\n 62801: 58301,\n 62802: 58302,\n 62803: 58303,\n 62804: 58304,\n 62805: 58305,\n 62806: 58306,\n 62807: 58307,\n 62808: 58308,\n 62809: 58309,\n 62810: 58310,\n 62811: 58311,\n 62812: 58312,\n 62813: 58313,\n 62814: 58314,\n 62815: 58315,\n 62816: 58316,\n 62817: 58317,\n 62818: 58318,\n 62819: 58319,\n 62820: 58320,\n 62821: 58321,\n 62822: 58322,\n 62823: 58323,\n 62824: 58324,\n 62825: 58325,\n 62826: 58326,\n 62827: 58327,\n 62828: 58328,\n 62829: 58329,\n 62830: 58330,\n 62831: 58331,\n 62832: 58332,\n 62833: 58333,\n 62834: 58334,\n 62835: 58335,\n 62836: 58336,\n 62837: 58337,\n 62838: 58338,\n 62839: 58339,\n 62840: 58340,\n 62841: 58341,\n 62842: 58342,\n 62843: 58343,\n 62844: 58344,\n 62845: 58345,\n 62846: 58346,\n 62848: 58347,\n 62849: 58348,\n 62850: 58349,\n 62851: 58350,\n 62852: 58351,\n 62853: 58352,\n 62854: 58353,\n 62855: 58354,\n 62856: 58355,\n 62857: 58356,\n 62858: 58357,\n 62859: 58358,\n 62860: 58359,\n 62861: 58360,\n 62862: 58361,\n 62863: 58362,\n 62864: 58363,\n 62865: 58364,\n 62866: 58365,\n 62867: 58366,\n 62868: 58367,\n 62869: 58368,\n 62870: 58369,\n 62871: 58370,\n 62872: 58371,\n 62873: 58372,\n 62874: 58373,\n 62875: 58374,\n 62876: 58375,\n 62877: 58376,\n 62878: 58377,\n 62879: 58378,\n 62880: 58379,\n 62881: 58380,\n 62882: 58381,\n 62883: 58382,\n 62884: 58383,\n 62885: 58384,\n 62886: 58385,\n 62887: 58386,\n 62888: 58387,\n 62889: 58388,\n 62890: 58389,\n 62891: 58390,\n 62892: 58391,\n 62893: 58392,\n 62894: 58393,\n 62895: 58394,\n 62896: 58395,\n 62897: 58396,\n 62898: 58397,\n 62899: 58398,\n 62900: 58399,\n 62901: 58400,\n 62902: 58401,\n 62903: 58402,\n 62904: 58403,\n 62905: 58404,\n 62906: 58405,\n 62907: 58406,\n 62908: 58407,\n 62909: 58408,\n 62910: 58409,\n 62911: 58410,\n 62912: 58411,\n 62913: 58412,\n 62914: 58413,\n 62915: 58414,\n 62916: 58415,\n 62917: 58416,\n 62918: 58417,\n 62919: 58418,\n 62920: 58419,\n 62921: 58420,\n 62922: 58421,\n 62923: 58422,\n 62924: 58423,\n 62925: 58424,\n 62926: 58425,\n 62927: 58426,\n 62928: 58427,\n 62929: 58428,\n 62930: 58429,\n 62931: 58430,\n 62932: 58431,\n 62933: 58432,\n 62934: 58433,\n 62935: 58434,\n 62936: 58435,\n 62937: 58436,\n 62938: 58437,\n 62939: 58438,\n 62940: 58439,\n 62941: 58440,\n 62942: 58441,\n 62943: 58442,\n 62944: 58443,\n 62945: 58444,\n 62946: 58445,\n 62947: 58446,\n 62948: 58447,\n 62949: 58448,\n 62950: 58449,\n 62951: 58450,\n 62952: 58451,\n 62953: 58452,\n 62954: 58453,\n 62955: 58454,\n 62956: 58455,\n 62957: 58456,\n 62958: 58457,\n 62959: 58458,\n 62960: 58459,\n 62961: 58460,\n 62962: 58461,\n 62963: 58462,\n 62964: 58463,\n 62965: 58464,\n 62966: 58465,\n 62967: 58466,\n 62968: 58467,\n 62969: 58468,\n 62970: 58469,\n 62971: 58470,\n 62972: 58471,\n 63040: 58472,\n 63041: 58473,\n 63042: 58474,\n 63043: 58475,\n 63044: 58476,\n 63045: 58477,\n 63046: 58478,\n 63047: 58479,\n 63048: 58480,\n 63049: 58481,\n 63050: 58482,\n 63051: 58483,\n 63052: 58484,\n 63053: 58485,\n 63054: 58486,\n 63055: 58487,\n 63056: 58488,\n 63057: 58489,\n 63058: 58490,\n 63059: 58491,\n 63060: 58492,\n 63061: 58493,\n 63062: 58494,\n 63063: 58495,\n 63064: 58496,\n 63065: 58497,\n 63066: 58498,\n 63067: 58499,\n 63068: 58500,\n 63069: 58501,\n 63070: 58502,\n 63071: 58503,\n 63072: 58504,\n 63073: 58505,\n 63074: 58506,\n 63075: 58507,\n 63076: 58508,\n 63077: 58509,\n 63078: 58510,\n 63079: 58511,\n 63080: 58512,\n 63081: 58513,\n 63082: 58514,\n 63083: 58515,\n 63084: 58516,\n 63085: 58517,\n 63086: 58518,\n 63087: 58519,\n 63088: 58520,\n 63089: 58521,\n 63090: 58522,\n 63091: 58523,\n 63092: 58524,\n 63093: 58525,\n 63094: 58526,\n 63095: 58527,\n 63096: 58528,\n 63097: 58529,\n 63098: 58530,\n 63099: 58531,\n 63100: 58532,\n 63101: 58533,\n 63102: 58534,\n 63104: 58535,\n 63105: 58536,\n 63106: 58537,\n 63107: 58538,\n 63108: 58539,\n 63109: 58540,\n 63110: 58541,\n 63111: 58542,\n 63112: 58543,\n 63113: 58544,\n 63114: 58545,\n 63115: 58546,\n 63116: 58547,\n 63117: 58548,\n 63118: 58549,\n 63119: 58550,\n 63120: 58551,\n 63121: 58552,\n 63122: 58553,\n 63123: 58554,\n 63124: 58555,\n 63125: 58556,\n 63126: 58557,\n 63127: 58558,\n 63128: 58559,\n 63129: 58560,\n 63130: 58561,\n 63131: 58562,\n 63132: 58563,\n 63133: 58564,\n 63134: 58565,\n 63135: 58566,\n 63136: 58567,\n 63137: 58568,\n 63138: 58569,\n 63139: 58570,\n 63140: 58571,\n 63141: 58572,\n 63142: 58573,\n 63143: 58574,\n 63144: 58575,\n 63145: 58576,\n 63146: 58577,\n 63147: 58578,\n 63148: 58579,\n 63149: 58580,\n 63150: 58581,\n 63151: 58582,\n 63152: 58583,\n 63153: 58584,\n 63154: 58585,\n 63155: 58586,\n 63156: 58587,\n 63157: 58588,\n 63158: 58589,\n 63159: 58590,\n 63160: 58591,\n 63161: 58592,\n 63162: 58593,\n 63163: 58594,\n 63164: 58595,\n 63165: 58596,\n 63166: 58597,\n 63167: 58598,\n 63168: 58599,\n 63169: 58600,\n 63170: 58601,\n 63171: 58602,\n 63172: 58603,\n 63173: 58604,\n 63174: 58605,\n 63175: 58606,\n 63176: 58607,\n 63177: 58608,\n 63178: 58609,\n 63179: 58610,\n 63180: 58611,\n 63181: 58612,\n 63182: 58613,\n 63183: 58614,\n 63184: 58615,\n 63185: 58616,\n 63186: 58617,\n 63187: 58618,\n 63188: 58619,\n 63189: 58620,\n 63190: 58621,\n 63191: 58622,\n 63192: 58623,\n 63193: 58624,\n 63194: 58625,\n 63195: 58626,\n 63196: 58627,\n 63197: 58628,\n 63198: 58629,\n 63199: 58630,\n 63200: 58631,\n 63201: 58632,\n 63202: 58633,\n 63203: 58634,\n 63204: 58635,\n 63205: 58636,\n 63206: 58637,\n 63207: 58638,\n 63208: 58639,\n 63209: 58640,\n 63210: 58641,\n 63211: 58642,\n 63212: 58643,\n 63213: 58644,\n 63214: 58645,\n 63215: 58646,\n 63216: 58647,\n 63217: 58648,\n 63218: 58649,\n 63219: 58650,\n 63220: 58651,\n 63221: 58652,\n 63222: 58653,\n 63223: 58654,\n 63224: 58655,\n 63225: 58656,\n 63226: 58657,\n 63227: 58658,\n 63228: 58659,\n 63296: 58660,\n 63297: 58661,\n 63298: 58662,\n 63299: 58663,\n 63300: 58664,\n 63301: 58665,\n 63302: 58666,\n 63303: 58667,\n 63304: 58668,\n 63305: 58669,\n 63306: 58670,\n 63307: 58671,\n 63308: 58672,\n 63309: 58673,\n 63310: 58674,\n 63311: 58675,\n 63312: 58676,\n 63313: 58677,\n 63314: 58678,\n 63315: 58679,\n 63316: 58680,\n 63317: 58681,\n 63318: 58682,\n 63319: 58683,\n 63320: 58684,\n 63321: 58685,\n 63322: 58686,\n 63323: 58687,\n 63324: 58688,\n 63325: 58689,\n 63326: 58690,\n 63327: 58691,\n 63328: 58692,\n 63329: 58693,\n 63330: 58694,\n 63331: 58695,\n 63332: 58696,\n 63333: 58697,\n 63334: 58698,\n 63335: 58699,\n 63336: 58700,\n 63337: 58701,\n 63338: 58702,\n 63339: 58703,\n 63340: 58704,\n 63341: 58705,\n 63342: 58706,\n 63343: 58707,\n 63344: 58708,\n 63345: 58709,\n 63346: 58710,\n 63347: 58711,\n 63348: 58712,\n 63349: 58713,\n 63350: 58714,\n 63351: 58715,\n 63352: 58716,\n 63353: 58717,\n 63354: 58718,\n 63355: 58719,\n 63356: 58720,\n 63357: 58721,\n 63358: 58722,\n 63360: 58723,\n 63361: 58724,\n 63362: 58725,\n 63363: 58726,\n 63364: 58727,\n 63365: 58728,\n 63366: 58729,\n 63367: 58730,\n 63368: 58731,\n 63369: 58732,\n 63370: 58733,\n 63371: 58734,\n 63372: 58735,\n 63373: 58736,\n 63374: 58737,\n 63375: 58738,\n 63376: 58739,\n 63377: 58740,\n 63378: 58741,\n 63379: 58742,\n 63380: 58743,\n 63381: 58744,\n 63382: 58745,\n 63383: 58746,\n 63384: 58747,\n 63385: 58748,\n 63386: 58749,\n 63387: 58750,\n 63388: 58751,\n 63389: 58752,\n 63390: 58753,\n 63391: 58754,\n 63392: 58755,\n 63393: 58756,\n 63394: 58757,\n 63395: 58758,\n 63396: 58759,\n 63397: 58760,\n 63398: 58761,\n 63399: 58762,\n 63400: 58763,\n 63401: 58764,\n 63402: 58765,\n 63403: 58766,\n 63404: 58767,\n 63405: 58768,\n 63406: 58769,\n 63407: 58770,\n 63408: 58771,\n 63409: 58772,\n 63410: 58773,\n 63411: 58774,\n 63412: 58775,\n 63413: 58776,\n 63414: 58777,\n 63415: 58778,\n 63416: 58779,\n 63417: 58780,\n 63418: 58781,\n 63419: 58782,\n 63420: 58783,\n 63421: 58784,\n 63422: 58785,\n 63423: 58786,\n 63424: 58787,\n 63425: 58788,\n 63426: 58789,\n 63427: 58790,\n 63428: 58791,\n 63429: 58792,\n 63430: 58793,\n 63431: 58794,\n 63432: 58795,\n 63433: 58796,\n 63434: 58797,\n 63435: 58798,\n 63436: 58799,\n 63437: 58800,\n 63438: 58801,\n 63439: 58802,\n 63440: 58803,\n 63441: 58804,\n 63442: 58805,\n 63443: 58806,\n 63444: 58807,\n 63445: 58808,\n 63446: 58809,\n 63447: 58810,\n 63448: 58811,\n 63449: 58812,\n 63450: 58813,\n 63451: 58814,\n 63452: 58815,\n 63453: 58816,\n 63454: 58817,\n 63455: 58818,\n 63456: 58819,\n 63457: 58820,\n 63458: 58821,\n 63459: 58822,\n 63460: 58823,\n 63461: 58824,\n 63462: 58825,\n 63463: 58826,\n 63464: 58827,\n 63465: 58828,\n 63466: 58829,\n 63467: 58830,\n 63468: 58831,\n 63469: 58832,\n 63470: 58833,\n 63471: 58834,\n 63472: 58835,\n 63473: 58836,\n 63474: 58837,\n 63475: 58838,\n 63476: 58839,\n 63477: 58840,\n 63478: 58841,\n 63479: 58842,\n 63480: 58843,\n 63481: 58844,\n 63482: 58845,\n 63483: 58846,\n 63484: 58847,\n 63552: 58848,\n 63553: 58849,\n 63554: 58850,\n 63555: 58851,\n 63556: 58852,\n 63557: 58853,\n 63558: 58854,\n 63559: 58855,\n 63560: 58856,\n 63561: 58857,\n 63562: 58858,\n 63563: 58859,\n 63564: 58860,\n 63565: 58861,\n 63566: 58862,\n 63567: 58863,\n 63568: 58864,\n 63569: 58865,\n 63570: 58866,\n 63571: 58867,\n 63572: 58868,\n 63573: 58869,\n 63574: 58870,\n 63575: 58871,\n 63576: 58872,\n 63577: 58873,\n 63578: 58874,\n 63579: 58875,\n 63580: 58876,\n 63581: 58877,\n 63582: 58878,\n 63583: 58879,\n 63584: 58880,\n 63585: 58881,\n 63586: 58882,\n 63587: 58883,\n 63588: 58884,\n 63589: 58885,\n 63590: 58886,\n 63591: 58887,\n 63592: 58888,\n 63593: 58889,\n 63594: 58890,\n 63595: 58891,\n 63596: 58892,\n 63597: 58893,\n 63598: 58894,\n 63599: 58895,\n 63600: 58896,\n 63601: 58897,\n 63602: 58898,\n 63603: 58899,\n 63604: 58900,\n 63605: 58901,\n 63606: 58902,\n 63607: 58903,\n 63608: 58904,\n 63609: 58905,\n 63610: 58906,\n 63611: 58907,\n 63612: 58908,\n 63613: 58909,\n 63614: 58910,\n 63616: 58911,\n 63617: 58912,\n 63618: 58913,\n 63619: 58914,\n 63620: 58915,\n 63621: 58916,\n 63622: 58917,\n 63623: 58918,\n 63624: 58919,\n 63625: 58920,\n 63626: 58921,\n 63627: 58922,\n 63628: 58923,\n 63629: 58924,\n 63630: 58925,\n 63631: 58926,\n 63632: 58927,\n 63633: 58928,\n 63634: 58929,\n 63635: 58930,\n 63636: 58931,\n 63637: 58932,\n 63638: 58933,\n 63639: 58934,\n 63640: 58935,\n 63641: 58936,\n 63642: 58937,\n 63643: 58938,\n 63644: 58939,\n 63645: 58940,\n 63646: 58941,\n 63647: 58942,\n 63648: 58943,\n 63649: 58944,\n 63650: 58945,\n 63651: 58946,\n 63652: 58947,\n 63653: 58948,\n 63654: 58949,\n 63655: 58950,\n 63656: 58951,\n 63657: 58952,\n 63658: 58953,\n 63659: 58954,\n 63660: 58955,\n 63661: 58956,\n 63662: 58957,\n 63663: 58958,\n 63664: 58959,\n 63665: 58960,\n 63666: 58961,\n 63667: 58962,\n 63668: 58963,\n 63669: 58964,\n 63670: 58965,\n 63671: 58966,\n 63672: 58967,\n 63673: 58968,\n 63674: 58969,\n 63675: 58970,\n 63676: 58971,\n 63677: 58972,\n 63678: 58973,\n 63679: 58974,\n 63680: 58975,\n 63681: 58976,\n 63682: 58977,\n 63683: 58978,\n 63684: 58979,\n 63685: 58980,\n 63686: 58981,\n 63687: 58982,\n 63688: 58983,\n 63689: 58984,\n 63690: 58985,\n 63691: 58986,\n 63692: 58987,\n 63693: 58988,\n 63694: 58989,\n 63695: 58990,\n 63696: 58991,\n 63697: 58992,\n 63698: 58993,\n 63699: 58994,\n 63700: 58995,\n 63701: 58996,\n 63702: 58997,\n 63703: 58998,\n 63704: 58999,\n 63705: 59e3,\n 63706: 59001,\n 63707: 59002,\n 63708: 59003,\n 63709: 59004,\n 63710: 59005,\n 63711: 59006,\n 63712: 59007,\n 63713: 59008,\n 63714: 59009,\n 63715: 59010,\n 63716: 59011,\n 63717: 59012,\n 63718: 59013,\n 63719: 59014,\n 63720: 59015,\n 63721: 59016,\n 63722: 59017,\n 63723: 59018,\n 63724: 59019,\n 63725: 59020,\n 63726: 59021,\n 63727: 59022,\n 63728: 59023,\n 63729: 59024,\n 63730: 59025,\n 63731: 59026,\n 63732: 59027,\n 63733: 59028,\n 63734: 59029,\n 63735: 59030,\n 63736: 59031,\n 63737: 59032,\n 63738: 59033,\n 63739: 59034,\n 63740: 59035,\n 64064: 8560,\n 64065: 8561,\n 64066: 8562,\n 64067: 8563,\n 64068: 8564,\n 64069: 8565,\n 64070: 8566,\n 64071: 8567,\n 64072: 8568,\n 64073: 8569,\n 64074: 8544,\n 64075: 8545,\n 64076: 8546,\n 64077: 8547,\n 64078: 8548,\n 64079: 8549,\n 64080: 8550,\n 64081: 8551,\n 64082: 8552,\n 64083: 8553,\n 64084: 65506,\n 64085: 65508,\n 64086: 65287,\n 64087: 65282,\n 64088: 12849,\n 64089: 8470,\n 64090: 8481,\n 64091: 8757,\n 64092: 32394,\n 64093: 35100,\n 64094: 37704,\n 64095: 37512,\n 64096: 34012,\n 64097: 20425,\n 64098: 28859,\n 64099: 26161,\n 64100: 26824,\n 64101: 37625,\n 64102: 26363,\n 64103: 24389,\n 64104: 20008,\n 64105: 20193,\n 64106: 20220,\n 64107: 20224,\n 64108: 20227,\n 64109: 20281,\n 64110: 20310,\n 64111: 20370,\n 64112: 20362,\n 64113: 20378,\n 64114: 20372,\n 64115: 20429,\n 64116: 20544,\n 64117: 20514,\n 64118: 20479,\n 64119: 20510,\n 64120: 20550,\n 64121: 20592,\n 64122: 20546,\n 64123: 20628,\n 64124: 20724,\n 64125: 20696,\n 64126: 20810,\n 64128: 20836,\n 64129: 20893,\n 64130: 20926,\n 64131: 20972,\n 64132: 21013,\n 64133: 21148,\n 64134: 21158,\n 64135: 21184,\n 64136: 21211,\n 64137: 21248,\n 64138: 21255,\n 64139: 21284,\n 64140: 21362,\n 64141: 21395,\n 64142: 21426,\n 64143: 21469,\n 64144: 64014,\n 64145: 21660,\n 64146: 21642,\n 64147: 21673,\n 64148: 21759,\n 64149: 21894,\n 64150: 22361,\n 64151: 22373,\n 64152: 22444,\n 64153: 22472,\n 64154: 22471,\n 64155: 64015,\n 64156: 64016,\n 64157: 22686,\n 64158: 22706,\n 64159: 22795,\n 64160: 22867,\n 64161: 22875,\n 64162: 22877,\n 64163: 22883,\n 64164: 22948,\n 64165: 22970,\n 64166: 23382,\n 64167: 23488,\n 64168: 29999,\n 64169: 23512,\n 64170: 23532,\n 64171: 23582,\n 64172: 23718,\n 64173: 23738,\n 64174: 23797,\n 64175: 23847,\n 64176: 23891,\n 64177: 64017,\n 64178: 23874,\n 64179: 23917,\n 64180: 23992,\n 64181: 23993,\n 64182: 24016,\n 64183: 24353,\n 64184: 24372,\n 64185: 24423,\n 64186: 24503,\n 64187: 24542,\n 64188: 24669,\n 64189: 24709,\n 64190: 24714,\n 64191: 24798,\n 64192: 24789,\n 64193: 24864,\n 64194: 24818,\n 64195: 24849,\n 64196: 24887,\n 64197: 24880,\n 64198: 24984,\n 64199: 25107,\n 64200: 25254,\n 64201: 25589,\n 64202: 25696,\n 64203: 25757,\n 64204: 25806,\n 64205: 25934,\n 64206: 26112,\n 64207: 26133,\n 64208: 26171,\n 64209: 26121,\n 64210: 26158,\n 64211: 26142,\n 64212: 26148,\n 64213: 26213,\n 64214: 26199,\n 64215: 26201,\n 64216: 64018,\n 64217: 26227,\n 64218: 26265,\n 64219: 26272,\n 64220: 26290,\n 64221: 26303,\n 64222: 26362,\n 64223: 26382,\n 64224: 63785,\n 64225: 26470,\n 64226: 26555,\n 64227: 26706,\n 64228: 26560,\n 64229: 26625,\n 64230: 26692,\n 64231: 26831,\n 64232: 64019,\n 64233: 26984,\n 64234: 64020,\n 64235: 27032,\n 64236: 27106,\n 64237: 27184,\n 64238: 27243,\n 64239: 27206,\n 64240: 27251,\n 64241: 27262,\n 64242: 27362,\n 64243: 27364,\n 64244: 27606,\n 64245: 27711,\n 64246: 27740,\n 64247: 27782,\n 64248: 27759,\n 64249: 27866,\n 64250: 27908,\n 64251: 28039,\n 64252: 28015,\n 64320: 28054,\n 64321: 28076,\n 64322: 28111,\n 64323: 28152,\n 64324: 28146,\n 64325: 28156,\n 64326: 28217,\n 64327: 28252,\n 64328: 28199,\n 64329: 28220,\n 64330: 28351,\n 64331: 28552,\n 64332: 28597,\n 64333: 28661,\n 64334: 28677,\n 64335: 28679,\n 64336: 28712,\n 64337: 28805,\n 64338: 28843,\n 64339: 28943,\n 64340: 28932,\n 64341: 29020,\n 64342: 28998,\n 64343: 28999,\n 64344: 64021,\n 64345: 29121,\n 64346: 29182,\n 64347: 29361,\n 64348: 29374,\n 64349: 29476,\n 64350: 64022,\n 64351: 29559,\n 64352: 29629,\n 64353: 29641,\n 64354: 29654,\n 64355: 29667,\n 64356: 29650,\n 64357: 29703,\n 64358: 29685,\n 64359: 29734,\n 64360: 29738,\n 64361: 29737,\n 64362: 29742,\n 64363: 29794,\n 64364: 29833,\n 64365: 29855,\n 64366: 29953,\n 64367: 30063,\n 64368: 30338,\n 64369: 30364,\n 64370: 30366,\n 64371: 30363,\n 64372: 30374,\n 64373: 64023,\n 64374: 30534,\n 64375: 21167,\n 64376: 30753,\n 64377: 30798,\n 64378: 30820,\n 64379: 30842,\n 64380: 31024,\n 64381: 64024,\n 64382: 64025,\n 64384: 64026,\n 64385: 31124,\n 64386: 64027,\n 64387: 31131,\n 64388: 31441,\n 64389: 31463,\n 64390: 64028,\n 64391: 31467,\n 64392: 31646,\n 64393: 64029,\n 64394: 32072,\n 64395: 32092,\n 64396: 32183,\n 64397: 32160,\n 64398: 32214,\n 64399: 32338,\n 64400: 32583,\n 64401: 32673,\n 64402: 64030,\n 64403: 33537,\n 64404: 33634,\n 64405: 33663,\n 64406: 33735,\n 64407: 33782,\n 64408: 33864,\n 64409: 33972,\n 64410: 34131,\n 64411: 34137,\n 64412: 34155,\n 64413: 64031,\n 64414: 34224,\n 64415: 64032,\n 64416: 64033,\n 64417: 34823,\n 64418: 35061,\n 64419: 35346,\n 64420: 35383,\n 64421: 35449,\n 64422: 35495,\n 64423: 35518,\n 64424: 35551,\n 64425: 64034,\n 64426: 35574,\n 64427: 35667,\n 64428: 35711,\n 64429: 36080,\n 64430: 36084,\n 64431: 36114,\n 64432: 36214,\n 64433: 64035,\n 64434: 36559,\n 64435: 64036,\n 64436: 64037,\n 64437: 36967,\n 64438: 37086,\n 64439: 64038,\n 64440: 37141,\n 64441: 37159,\n 64442: 37338,\n 64443: 37335,\n 64444: 37342,\n 64445: 37357,\n 64446: 37358,\n 64447: 37348,\n 64448: 37349,\n 64449: 37382,\n 64450: 37392,\n 64451: 37386,\n 64452: 37434,\n 64453: 37440,\n 64454: 37436,\n 64455: 37454,\n 64456: 37465,\n 64457: 37457,\n 64458: 37433,\n 64459: 37479,\n 64460: 37543,\n 64461: 37495,\n 64462: 37496,\n 64463: 37607,\n 64464: 37591,\n 64465: 37593,\n 64466: 37584,\n 64467: 64039,\n 64468: 37589,\n 64469: 37600,\n 64470: 37587,\n 64471: 37669,\n 64472: 37665,\n 64473: 37627,\n 64474: 64040,\n 64475: 37662,\n 64476: 37631,\n 64477: 37661,\n 64478: 37634,\n 64479: 37744,\n 64480: 37719,\n 64481: 37796,\n 64482: 37830,\n 64483: 37854,\n 64484: 37880,\n 64485: 37937,\n 64486: 37957,\n 64487: 37960,\n 64488: 38290,\n 64489: 63964,\n 64490: 64041,\n 64491: 38557,\n 64492: 38575,\n 64493: 38707,\n 64494: 38715,\n 64495: 38723,\n 64496: 38733,\n 64497: 38735,\n 64498: 38737,\n 64499: 38741,\n 64500: 38999,\n 64501: 39013,\n 64502: 64042,\n 64503: 64043,\n 64504: 39207,\n 64505: 64044,\n 64506: 39326,\n 64507: 39502,\n 64508: 39641,\n 64576: 39644,\n 64577: 39797,\n 64578: 39794,\n 64579: 39823,\n 64580: 39857,\n 64581: 39867,\n 64582: 39936,\n 64583: 40304,\n 64584: 40299,\n 64585: 64045,\n 64586: 40473,\n 64587: 40657\n };\n }\n /*\n * Converts from Shift_JIS Uint8Array data to Unicode strings.\n */\n s2u(uint8Array) {\n var t = this.s2uTable;\n var str = \"\";\n var p = 0;\n while (p < uint8Array.length) {\n var key = uint8Array[p++];\n if (!(key >= 0 && key <= 126 || key >= 161 && key <= 223) && p < uint8Array.length) {\n key = key << 8 | uint8Array[p++];\n }\n if (t[key] === void 0) {\n console.error(\"unknown char code \" + key + \".\");\n return str;\n }\n str += String.fromCharCode(t[key]);\n }\n return str;\n }\n}\nclass DataViewEx {\n constructor(buffer, littleEndian) {\n this.dv = new DataView(buffer);\n this.offset = 0;\n this.littleEndian = littleEndian !== void 0 ? littleEndian : true;\n this.encoder = new CharsetEncoder();\n }\n getInt8() {\n var value = this.dv.getInt8(this.offset);\n this.offset += 1;\n return value;\n }\n getInt8Array(size) {\n var a = [];\n for (var i = 0; i < size; i++) {\n a.push(this.getInt8());\n }\n return a;\n }\n getUint8() {\n var value = this.dv.getUint8(this.offset);\n this.offset += 1;\n return value;\n }\n getUint8Array(size) {\n var a = [];\n for (var i = 0; i < size; i++) {\n a.push(this.getUint8());\n }\n return a;\n }\n getInt16() {\n var value = this.dv.getInt16(this.offset, this.littleEndian);\n this.offset += 2;\n return value;\n }\n getInt16Array(size) {\n var a = [];\n for (var i = 0; i < size; i++) {\n a.push(this.getInt16());\n }\n return a;\n }\n getUint16() {\n var value = this.dv.getUint16(this.offset, this.littleEndian);\n this.offset += 2;\n return value;\n }\n getUint16Array(size) {\n var a = [];\n for (var i = 0; i < size; i++) {\n a.push(this.getUint16());\n }\n return a;\n }\n getInt32() {\n var value = this.dv.getInt32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n getInt32Array(size) {\n var a = [];\n for (var i = 0; i < size; i++) {\n a.push(this.getInt32());\n }\n return a;\n }\n getUint32() {\n var value = this.dv.getUint32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n getUint32Array(size) {\n var a = [];\n for (var i = 0; i < size; i++) {\n a.push(this.getUint32());\n }\n return a;\n }\n getFloat32() {\n var value = this.dv.getFloat32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n getFloat32Array(size) {\n var a = [];\n for (var i = 0; i < size; i++) {\n a.push(this.getFloat32());\n }\n return a;\n }\n getFloat64() {\n var value = this.dv.getFloat64(this.offset, this.littleEndian);\n this.offset += 8;\n return value;\n }\n getFloat64Array(size) {\n var a = [];\n for (var i = 0; i < size; i++) {\n a.push(this.getFloat64());\n }\n return a;\n }\n getIndex(type, isUnsigned) {\n switch (type) {\n case 1:\n return isUnsigned === true ? this.getUint8() : this.getInt8();\n case 2:\n return isUnsigned === true ? this.getUint16() : this.getInt16();\n case 4:\n return this.getInt32();\n default:\n throw \"unknown number type \" + type + \" exception.\";\n }\n }\n getIndexArray(type, size, isUnsigned) {\n var a = [];\n for (var i = 0; i < size; i++) {\n a.push(this.getIndex(type, isUnsigned));\n }\n return a;\n }\n getChars(size) {\n var str = \"\";\n while (size > 0) {\n var value = this.getUint8();\n size--;\n if (value === 0) {\n break;\n }\n str += String.fromCharCode(value);\n }\n while (size > 0) {\n this.getUint8();\n size--;\n }\n return str;\n }\n getSjisStringsAsUnicode(size) {\n var a = [];\n while (size > 0) {\n var value = this.getUint8();\n size--;\n if (value === 0) {\n break;\n }\n a.push(value);\n }\n while (size > 0) {\n this.getUint8();\n size--;\n }\n return this.encoder.s2u(new Uint8Array(a));\n }\n getUnicodeStrings(size) {\n var str = \"\";\n while (size > 0) {\n var value = this.getUint16();\n size -= 2;\n if (value === 0) {\n break;\n }\n str += String.fromCharCode(value);\n }\n while (size > 0) {\n this.getUint8();\n size--;\n }\n return str;\n }\n getTextBuffer() {\n var size = this.getUint32();\n return this.getUnicodeStrings(size);\n }\n}\nclass DataCreationHelper {\n leftToRightVector3(v) {\n v[2] = -v[2];\n }\n leftToRightQuaternion(q) {\n q[0] = -q[0];\n q[1] = -q[1];\n }\n leftToRightEuler(r) {\n r[0] = -r[0];\n r[1] = -r[1];\n }\n leftToRightIndexOrder(p) {\n var tmp = p[2];\n p[2] = p[0];\n p[0] = tmp;\n }\n leftToRightVector3Range(v1, v2) {\n var tmp = -v2[2];\n v2[2] = -v1[2];\n v1[2] = tmp;\n }\n leftToRightEulerRange(r1, r2) {\n var tmp1 = -r2[0];\n var tmp2 = -r2[1];\n r2[0] = -r1[0];\n r2[1] = -r1[1];\n r1[0] = tmp1;\n r1[1] = tmp2;\n }\n}\nclass Parser {\n constructor() {\n }\n parsePmd(buffer, leftToRight) {\n var pmd = {};\n var dv = new DataViewEx(buffer);\n pmd.metadata = {};\n pmd.metadata.format = \"pmd\";\n pmd.metadata.coordinateSystem = \"left\";\n var parseHeader = function() {\n var metadata = pmd.metadata;\n metadata.magic = dv.getChars(3);\n if (metadata.magic !== \"Pmd\") {\n throw \"PMD file magic is not Pmd, but \" + metadata.magic;\n }\n metadata.version = dv.getFloat32();\n metadata.modelName = dv.getSjisStringsAsUnicode(20);\n metadata.comment = dv.getSjisStringsAsUnicode(256);\n };\n var parseVertices = function() {\n var parseVertex = function() {\n var p = {};\n p.position = dv.getFloat32Array(3);\n p.normal = dv.getFloat32Array(3);\n p.uv = dv.getFloat32Array(2);\n p.skinIndices = dv.getUint16Array(2);\n p.skinWeights = [dv.getUint8() / 100];\n p.skinWeights.push(1 - p.skinWeights[0]);\n p.edgeFlag = dv.getUint8();\n return p;\n };\n var metadata = pmd.metadata;\n metadata.vertexCount = dv.getUint32();\n pmd.vertices = [];\n for (var i = 0; i < metadata.vertexCount; i++) {\n pmd.vertices.push(parseVertex());\n }\n };\n var parseFaces = function() {\n var parseFace = function() {\n var p = {};\n p.indices = dv.getUint16Array(3);\n return p;\n };\n var metadata = pmd.metadata;\n metadata.faceCount = dv.getUint32() / 3;\n pmd.faces = [];\n for (var i = 0; i < metadata.faceCount; i++) {\n pmd.faces.push(parseFace());\n }\n };\n var parseMaterials = function() {\n var parseMaterial = function() {\n var p = {};\n p.diffuse = dv.getFloat32Array(4);\n p.shininess = dv.getFloat32();\n p.specular = dv.getFloat32Array(3);\n p.ambient = dv.getFloat32Array(3);\n p.toonIndex = dv.getInt8();\n p.edgeFlag = dv.getUint8();\n p.faceCount = dv.getUint32() / 3;\n p.fileName = dv.getSjisStringsAsUnicode(20);\n return p;\n };\n var metadata = pmd.metadata;\n metadata.materialCount = dv.getUint32();\n pmd.materials = [];\n for (var i = 0; i < metadata.materialCount; i++) {\n pmd.materials.push(parseMaterial());\n }\n };\n var parseBones = function() {\n var parseBone = function() {\n var p = {};\n p.name = dv.getSjisStringsAsUnicode(20);\n p.parentIndex = dv.getInt16();\n p.tailIndex = dv.getInt16();\n p.type = dv.getUint8();\n p.ikIndex = dv.getInt16();\n p.position = dv.getFloat32Array(3);\n return p;\n };\n var metadata = pmd.metadata;\n metadata.boneCount = dv.getUint16();\n pmd.bones = [];\n for (var i = 0; i < metadata.boneCount; i++) {\n pmd.bones.push(parseBone());\n }\n };\n var parseIks = function() {\n var parseIk = function() {\n var p = {};\n p.target = dv.getUint16();\n p.effector = dv.getUint16();\n p.linkCount = dv.getUint8();\n p.iteration = dv.getUint16();\n p.maxAngle = dv.getFloat32();\n p.links = [];\n for (var i2 = 0; i2 < p.linkCount; i2++) {\n var link = {};\n link.index = dv.getUint16();\n p.links.push(link);\n }\n return p;\n };\n var metadata = pmd.metadata;\n metadata.ikCount = dv.getUint16();\n pmd.iks = [];\n for (var i = 0; i < metadata.ikCount; i++) {\n pmd.iks.push(parseIk());\n }\n };\n var parseMorphs = function() {\n var parseMorph = function() {\n var p = {};\n p.name = dv.getSjisStringsAsUnicode(20);\n p.elementCount = dv.getUint32();\n p.type = dv.getUint8();\n p.elements = [];\n for (var i2 = 0; i2 < p.elementCount; i2++) {\n p.elements.push({\n index: dv.getUint32(),\n position: dv.getFloat32Array(3)\n });\n }\n return p;\n };\n var metadata = pmd.metadata;\n metadata.morphCount = dv.getUint16();\n pmd.morphs = [];\n for (var i = 0; i < metadata.morphCount; i++) {\n pmd.morphs.push(parseMorph());\n }\n };\n var parseMorphFrames = function() {\n var parseMorphFrame = function() {\n var p = {};\n p.index = dv.getUint16();\n return p;\n };\n var metadata = pmd.metadata;\n metadata.morphFrameCount = dv.getUint8();\n pmd.morphFrames = [];\n for (var i = 0; i < metadata.morphFrameCount; i++) {\n pmd.morphFrames.push(parseMorphFrame());\n }\n };\n var parseBoneFrameNames = function() {\n var parseBoneFrameName = function() {\n var p = {};\n p.name = dv.getSjisStringsAsUnicode(50);\n return p;\n };\n var metadata = pmd.metadata;\n metadata.boneFrameNameCount = dv.getUint8();\n pmd.boneFrameNames = [];\n for (var i = 0; i < metadata.boneFrameNameCount; i++) {\n pmd.boneFrameNames.push(parseBoneFrameName());\n }\n };\n var parseBoneFrames = function() {\n var parseBoneFrame = function() {\n var p = {};\n p.boneIndex = dv.getInt16();\n p.frameIndex = dv.getUint8();\n return p;\n };\n var metadata = pmd.metadata;\n metadata.boneFrameCount = dv.getUint32();\n pmd.boneFrames = [];\n for (var i = 0; i < metadata.boneFrameCount; i++) {\n pmd.boneFrames.push(parseBoneFrame());\n }\n };\n var parseEnglishHeader = function() {\n var metadata = pmd.metadata;\n metadata.englishCompatibility = dv.getUint8();\n if (metadata.englishCompatibility > 0) {\n metadata.englishModelName = dv.getSjisStringsAsUnicode(20);\n metadata.englishComment = dv.getSjisStringsAsUnicode(256);\n }\n };\n var parseEnglishBoneNames = function() {\n var parseEnglishBoneName = function() {\n var p = {};\n p.name = dv.getSjisStringsAsUnicode(20);\n return p;\n };\n var metadata = pmd.metadata;\n if (metadata.englishCompatibility === 0) {\n return;\n }\n pmd.englishBoneNames = [];\n for (var i = 0; i < metadata.boneCount; i++) {\n pmd.englishBoneNames.push(parseEnglishBoneName());\n }\n };\n var parseEnglishMorphNames = function() {\n var parseEnglishMorphName = function() {\n var p = {};\n p.name = dv.getSjisStringsAsUnicode(20);\n return p;\n };\n var metadata = pmd.metadata;\n if (metadata.englishCompatibility === 0) {\n return;\n }\n pmd.englishMorphNames = [];\n for (var i = 0; i < metadata.morphCount - 1; i++) {\n pmd.englishMorphNames.push(parseEnglishMorphName());\n }\n };\n var parseEnglishBoneFrameNames = function() {\n var parseEnglishBoneFrameName = function() {\n var p = {};\n p.name = dv.getSjisStringsAsUnicode(50);\n return p;\n };\n var metadata = pmd.metadata;\n if (metadata.englishCompatibility === 0) {\n return;\n }\n pmd.englishBoneFrameNames = [];\n for (var i = 0; i < metadata.boneFrameNameCount; i++) {\n pmd.englishBoneFrameNames.push(parseEnglishBoneFrameName());\n }\n };\n var parseToonTextures = function() {\n var parseToonTexture = function() {\n var p = {};\n p.fileName = dv.getSjisStringsAsUnicode(100);\n return p;\n };\n pmd.toonTextures = [];\n for (var i = 0; i < 10; i++) {\n pmd.toonTextures.push(parseToonTexture());\n }\n };\n var parseRigidBodies = function() {\n var parseRigidBody = function() {\n var p = {};\n p.name = dv.getSjisStringsAsUnicode(20);\n p.boneIndex = dv.getInt16();\n p.groupIndex = dv.getUint8();\n p.groupTarget = dv.getUint16();\n p.shapeType = dv.getUint8();\n p.width = dv.getFloat32();\n p.height = dv.getFloat32();\n p.depth = dv.getFloat32();\n p.position = dv.getFloat32Array(3);\n p.rotation = dv.getFloat32Array(3);\n p.weight = dv.getFloat32();\n p.positionDamping = dv.getFloat32();\n p.rotationDamping = dv.getFloat32();\n p.restitution = dv.getFloat32();\n p.friction = dv.getFloat32();\n p.type = dv.getUint8();\n return p;\n };\n var metadata = pmd.metadata;\n metadata.rigidBodyCount = dv.getUint32();\n pmd.rigidBodies = [];\n for (var i = 0; i < metadata.rigidBodyCount; i++) {\n pmd.rigidBodies.push(parseRigidBody());\n }\n };\n var parseConstraints = function() {\n var parseConstraint = function() {\n var p = {};\n p.name = dv.getSjisStringsAsUnicode(20);\n p.rigidBodyIndex1 = dv.getUint32();\n p.rigidBodyIndex2 = dv.getUint32();\n p.position = dv.getFloat32Array(3);\n p.rotation = dv.getFloat32Array(3);\n p.translationLimitation1 = dv.getFloat32Array(3);\n p.translationLimitation2 = dv.getFloat32Array(3);\n p.rotationLimitation1 = dv.getFloat32Array(3);\n p.rotationLimitation2 = dv.getFloat32Array(3);\n p.springPosition = dv.getFloat32Array(3);\n p.springRotation = dv.getFloat32Array(3);\n return p;\n };\n var metadata = pmd.metadata;\n metadata.constraintCount = dv.getUint32();\n pmd.constraints = [];\n for (var i = 0; i < metadata.constraintCount; i++) {\n pmd.constraints.push(parseConstraint());\n }\n };\n parseHeader();\n parseVertices();\n parseFaces();\n parseMaterials();\n parseBones();\n parseIks();\n parseMorphs();\n parseMorphFrames();\n parseBoneFrameNames();\n parseBoneFrames();\n parseEnglishHeader();\n parseEnglishBoneNames();\n parseEnglishMorphNames();\n parseEnglishBoneFrameNames();\n parseToonTextures();\n parseRigidBodies();\n parseConstraints();\n if (leftToRight === true)\n this.leftToRightModel(pmd);\n return pmd;\n }\n parsePmx(buffer, leftToRight) {\n var pmx = {};\n var dv = new DataViewEx(buffer);\n pmx.metadata = {};\n pmx.metadata.format = \"pmx\";\n pmx.metadata.coordinateSystem = \"left\";\n var parseHeader = function() {\n var metadata = pmx.metadata;\n metadata.magic = dv.getChars(4);\n if (metadata.magic !== \"PMX \") {\n throw \"PMX file magic is not PMX , but \" + metadata.magic;\n }\n metadata.version = dv.getFloat32();\n if (metadata.version !== 2 && metadata.version !== 2.1) {\n throw \"PMX version \" + metadata.version + \" is not supported.\";\n }\n metadata.headerSize = dv.getUint8();\n metadata.encoding = dv.getUint8();\n metadata.additionalUvNum = dv.getUint8();\n metadata.vertexIndexSize = dv.getUint8();\n metadata.textureIndexSize = dv.getUint8();\n metadata.materialIndexSize = dv.getUint8();\n metadata.boneIndexSize = dv.getUint8();\n metadata.morphIndexSize = dv.getUint8();\n metadata.rigidBodyIndexSize = dv.getUint8();\n metadata.modelName = dv.getTextBuffer();\n metadata.englishModelName = dv.getTextBuffer();\n metadata.comment = dv.getTextBuffer();\n metadata.englishComment = dv.getTextBuffer();\n };\n var parseVertices = function() {\n var parseVertex = function() {\n var p = {};\n p.position = dv.getFloat32Array(3);\n p.normal = dv.getFloat32Array(3);\n p.uv = dv.getFloat32Array(2);\n p.auvs = [];\n for (var i2 = 0; i2 < pmx.metadata.additionalUvNum; i2++) {\n p.auvs.push(dv.getFloat32Array(4));\n }\n p.type = dv.getUint8();\n var indexSize = metadata.boneIndexSize;\n if (p.type === 0) {\n p.skinIndices = dv.getIndexArray(indexSize, 1);\n p.skinWeights = [1];\n } else if (p.type === 1) {\n p.skinIndices = dv.getIndexArray(indexSize, 2);\n p.skinWeights = dv.getFloat32Array(1);\n p.skinWeights.push(1 - p.skinWeights[0]);\n } else if (p.type === 2) {\n p.skinIndices = dv.getIndexArray(indexSize, 4);\n p.skinWeights = dv.getFloat32Array(4);\n } else if (p.type === 3) {\n p.skinIndices = dv.getIndexArray(indexSize, 2);\n p.skinWeights = dv.getFloat32Array(1);\n p.skinWeights.push(1 - p.skinWeights[0]);\n p.skinC = dv.getFloat32Array(3);\n p.skinR0 = dv.getFloat32Array(3);\n p.skinR1 = dv.getFloat32Array(3);\n p.type = 1;\n } else {\n throw \"unsupport bone type \" + p.type + \" exception.\";\n }\n p.edgeRatio = dv.getFloat32();\n return p;\n };\n var metadata = pmx.metadata;\n metadata.vertexCount = dv.getUint32();\n pmx.vertices = [];\n for (var i = 0; i < metadata.vertexCount; i++) {\n pmx.vertices.push(parseVertex());\n }\n };\n var parseFaces = function() {\n var parseFace = function() {\n var p = {};\n p.indices = dv.getIndexArray(metadata.vertexIndexSize, 3, true);\n return p;\n };\n var metadata = pmx.metadata;\n metadata.faceCount = dv.getUint32() / 3;\n pmx.faces = [];\n for (var i = 0; i < metadata.faceCount; i++) {\n pmx.faces.push(parseFace());\n }\n };\n var parseTextures = function() {\n var parseTexture = function() {\n return dv.getTextBuffer();\n };\n var metadata = pmx.metadata;\n metadata.textureCount = dv.getUint32();\n pmx.textures = [];\n for (var i = 0; i < metadata.textureCount; i++) {\n pmx.textures.push(parseTexture());\n }\n };\n var parseMaterials = function() {\n var parseMaterial = function() {\n var p = {};\n p.name = dv.getTextBuffer();\n p.englishName = dv.getTextBuffer();\n p.diffuse = dv.getFloat32Array(4);\n p.specular = dv.getFloat32Array(3);\n p.shininess = dv.getFloat32();\n p.ambient = dv.getFloat32Array(3);\n p.flag = dv.getUint8();\n p.edgeColor = dv.getFloat32Array(4);\n p.edgeSize = dv.getFloat32();\n p.textureIndex = dv.getIndex(pmx.metadata.textureIndexSize);\n p.envTextureIndex = dv.getIndex(pmx.metadata.textureIndexSize);\n p.envFlag = dv.getUint8();\n p.toonFlag = dv.getUint8();\n if (p.toonFlag === 0) {\n p.toonIndex = dv.getIndex(pmx.metadata.textureIndexSize);\n } else if (p.toonFlag === 1) {\n p.toonIndex = dv.getInt8();\n } else {\n throw \"unknown toon flag \" + p.toonFlag + \" exception.\";\n }\n p.comment = dv.getTextBuffer();\n p.faceCount = dv.getUint32() / 3;\n return p;\n };\n var metadata = pmx.metadata;\n metadata.materialCount = dv.getUint32();\n pmx.materials = [];\n for (var i = 0; i < metadata.materialCount; i++) {\n pmx.materials.push(parseMaterial());\n }\n };\n var parseBones = function() {\n var parseBone = function() {\n var p = {};\n p.name = dv.getTextBuffer();\n p.englishName = dv.getTextBuffer();\n p.position = dv.getFloat32Array(3);\n p.parentIndex = dv.getIndex(pmx.metadata.boneIndexSize);\n p.transformationClass = dv.getUint32();\n p.flag = dv.getUint16();\n if (p.flag & 1) {\n p.connectIndex = dv.getIndex(pmx.metadata.boneIndexSize);\n } else {\n p.offsetPosition = dv.getFloat32Array(3);\n }\n if (p.flag & 256 || p.flag & 512) {\n var grant = {};\n grant.isLocal = (p.flag & 128) !== 0 ? true : false;\n grant.affectRotation = (p.flag & 256) !== 0 ? true : false;\n grant.affectPosition = (p.flag & 512) !== 0 ? true : false;\n grant.parentIndex = dv.getIndex(pmx.metadata.boneIndexSize);\n grant.ratio = dv.getFloat32();\n p.grant = grant;\n }\n if (p.flag & 1024) {\n p.fixAxis = dv.getFloat32Array(3);\n }\n if (p.flag & 2048) {\n p.localXVector = dv.getFloat32Array(3);\n p.localZVector = dv.getFloat32Array(3);\n }\n if (p.flag & 8192) {\n p.key = dv.getUint32();\n }\n if (p.flag & 32) {\n var ik = {};\n ik.effector = dv.getIndex(pmx.metadata.boneIndexSize);\n ik.target = null;\n ik.iteration = dv.getUint32();\n ik.maxAngle = dv.getFloat32();\n ik.linkCount = dv.getUint32();\n ik.links = [];\n for (var i2 = 0; i2 < ik.linkCount; i2++) {\n var link = {};\n link.index = dv.getIndex(pmx.metadata.boneIndexSize);\n link.angleLimitation = dv.getUint8();\n if (link.angleLimitation === 1) {\n link.lowerLimitationAngle = dv.getFloat32Array(3);\n link.upperLimitationAngle = dv.getFloat32Array(3);\n }\n ik.links.push(link);\n }\n p.ik = ik;\n }\n return p;\n };\n var metadata = pmx.metadata;\n metadata.boneCount = dv.getUint32();\n pmx.bones = [];\n for (var i = 0; i < metadata.boneCount; i++) {\n pmx.bones.push(parseBone());\n }\n };\n var parseMorphs = function() {\n var parseMorph = function() {\n var p = {};\n p.name = dv.getTextBuffer();\n p.englishName = dv.getTextBuffer();\n p.panel = dv.getUint8();\n p.type = dv.getUint8();\n p.elementCount = dv.getUint32();\n p.elements = [];\n for (var i2 = 0; i2 < p.elementCount; i2++) {\n if (p.type === 0) {\n var m = {};\n m.index = dv.getIndex(pmx.metadata.morphIndexSize);\n m.ratio = dv.getFloat32();\n p.elements.push(m);\n } else if (p.type === 1) {\n var m = {};\n m.index = dv.getIndex(pmx.metadata.vertexIndexSize, true);\n m.position = dv.getFloat32Array(3);\n p.elements.push(m);\n } else if (p.type === 2) {\n var m = {};\n m.index = dv.getIndex(pmx.metadata.boneIndexSize);\n m.position = dv.getFloat32Array(3);\n m.rotation = dv.getFloat32Array(4);\n p.elements.push(m);\n } else if (p.type === 3) {\n var m = {};\n m.index = dv.getIndex(pmx.metadata.vertexIndexSize, true);\n m.uv = dv.getFloat32Array(4);\n p.elements.push(m);\n } else if (p.type === 4)\n ;\n else if (p.type === 5)\n ;\n else if (p.type === 6)\n ;\n else if (p.type === 7)\n ;\n else if (p.type === 8) {\n var m = {};\n m.index = dv.getIndex(pmx.metadata.materialIndexSize);\n m.type = dv.getUint8();\n m.diffuse = dv.getFloat32Array(4);\n m.specular = dv.getFloat32Array(3);\n m.shininess = dv.getFloat32();\n m.ambient = dv.getFloat32Array(3);\n m.edgeColor = dv.getFloat32Array(4);\n m.edgeSize = dv.getFloat32();\n m.textureColor = dv.getFloat32Array(4);\n m.sphereTextureColor = dv.getFloat32Array(4);\n m.toonColor = dv.getFloat32Array(4);\n p.elements.push(m);\n }\n }\n return p;\n };\n var metadata = pmx.metadata;\n metadata.morphCount = dv.getUint32();\n pmx.morphs = [];\n for (var i = 0; i < metadata.morphCount; i++) {\n pmx.morphs.push(parseMorph());\n }\n };\n var parseFrames = function() {\n var parseFrame = function() {\n var p = {};\n p.name = dv.getTextBuffer();\n p.englishName = dv.getTextBuffer();\n p.type = dv.getUint8();\n p.elementCount = dv.getUint32();\n p.elements = [];\n for (var i2 = 0; i2 < p.elementCount; i2++) {\n var e = {};\n e.target = dv.getUint8();\n e.index = e.target === 0 ? dv.getIndex(pmx.metadata.boneIndexSize) : dv.getIndex(pmx.metadata.morphIndexSize);\n p.elements.push(e);\n }\n return p;\n };\n var metadata = pmx.metadata;\n metadata.frameCount = dv.getUint32();\n pmx.frames = [];\n for (var i = 0; i < metadata.frameCount; i++) {\n pmx.frames.push(parseFrame());\n }\n };\n var parseRigidBodies = function() {\n var parseRigidBody = function() {\n var p = {};\n p.name = dv.getTextBuffer();\n p.englishName = dv.getTextBuffer();\n p.boneIndex = dv.getIndex(pmx.metadata.boneIndexSize);\n p.groupIndex = dv.getUint8();\n p.groupTarget = dv.getUint16();\n p.shapeType = dv.getUint8();\n p.width = dv.getFloat32();\n p.height = dv.getFloat32();\n p.depth = dv.getFloat32();\n p.position = dv.getFloat32Array(3);\n p.rotation = dv.getFloat32Array(3);\n p.weight = dv.getFloat32();\n p.positionDamping = dv.getFloat32();\n p.rotationDamping = dv.getFloat32();\n p.restitution = dv.getFloat32();\n p.friction = dv.getFloat32();\n p.type = dv.getUint8();\n return p;\n };\n var metadata = pmx.metadata;\n metadata.rigidBodyCount = dv.getUint32();\n pmx.rigidBodies = [];\n for (var i = 0; i < metadata.rigidBodyCount; i++) {\n pmx.rigidBodies.push(parseRigidBody());\n }\n };\n var parseConstraints = function() {\n var parseConstraint = function() {\n var p = {};\n p.name = dv.getTextBuffer();\n p.englishName = dv.getTextBuffer();\n p.type = dv.getUint8();\n p.rigidBodyIndex1 = dv.getIndex(pmx.metadata.rigidBodyIndexSize);\n p.rigidBodyIndex2 = dv.getIndex(pmx.metadata.rigidBodyIndexSize);\n p.position = dv.getFloat32Array(3);\n p.rotation = dv.getFloat32Array(3);\n p.translationLimitation1 = dv.getFloat32Array(3);\n p.translationLimitation2 = dv.getFloat32Array(3);\n p.rotationLimitation1 = dv.getFloat32Array(3);\n p.rotationLimitation2 = dv.getFloat32Array(3);\n p.springPosition = dv.getFloat32Array(3);\n p.springRotation = dv.getFloat32Array(3);\n return p;\n };\n var metadata = pmx.metadata;\n metadata.constraintCount = dv.getUint32();\n pmx.constraints = [];\n for (var i = 0; i < metadata.constraintCount; i++) {\n pmx.constraints.push(parseConstraint());\n }\n };\n parseHeader();\n parseVertices();\n parseFaces();\n parseTextures();\n parseMaterials();\n parseBones();\n parseMorphs();\n parseFrames();\n parseRigidBodies();\n parseConstraints();\n if (leftToRight === true)\n this.leftToRightModel(pmx);\n return pmx;\n }\n parseVmd(buffer, leftToRight) {\n var vmd = {};\n var dv = new DataViewEx(buffer);\n vmd.metadata = {};\n vmd.metadata.coordinateSystem = \"left\";\n var parseHeader = function() {\n var metadata = vmd.metadata;\n metadata.magic = dv.getChars(30);\n if (metadata.magic !== \"Vocaloid Motion Data 0002\") {\n throw \"VMD file magic is not Vocaloid Motion Data 0002, but \" + metadata.magic;\n }\n metadata.name = dv.getSjisStringsAsUnicode(20);\n };\n var parseMotions = function() {\n var parseMotion = function() {\n var p = {};\n p.boneName = dv.getSjisStringsAsUnicode(15);\n p.frameNum = dv.getUint32();\n p.position = dv.getFloat32Array(3);\n p.rotation = dv.getFloat32Array(4);\n p.interpolation = dv.getUint8Array(64);\n return p;\n };\n var metadata = vmd.metadata;\n metadata.motionCount = dv.getUint32();\n vmd.motions = [];\n for (var i = 0; i < metadata.motionCount; i++) {\n vmd.motions.push(parseMotion());\n }\n };\n var parseMorphs = function() {\n var parseMorph = function() {\n var p = {};\n p.morphName = dv.getSjisStringsAsUnicode(15);\n p.frameNum = dv.getUint32();\n p.weight = dv.getFloat32();\n return p;\n };\n var metadata = vmd.metadata;\n metadata.morphCount = dv.getUint32();\n vmd.morphs = [];\n for (var i = 0; i < metadata.morphCount; i++) {\n vmd.morphs.push(parseMorph());\n }\n };\n var parseCameras = function() {\n var parseCamera = function() {\n var p = {};\n p.frameNum = dv.getUint32();\n p.distance = dv.getFloat32();\n p.position = dv.getFloat32Array(3);\n p.rotation = dv.getFloat32Array(3);\n p.interpolation = dv.getUint8Array(24);\n p.fov = dv.getUint32();\n p.perspective = dv.getUint8();\n return p;\n };\n var metadata = vmd.metadata;\n metadata.cameraCount = dv.getUint32();\n vmd.cameras = [];\n for (var i = 0; i < metadata.cameraCount; i++) {\n vmd.cameras.push(parseCamera());\n }\n };\n parseHeader();\n parseMotions();\n parseMorphs();\n parseCameras();\n if (leftToRight === true)\n this.leftToRightVmd(vmd);\n return vmd;\n }\n parseVpd(text, leftToRight) {\n var vpd = {};\n vpd.metadata = {};\n vpd.metadata.coordinateSystem = \"left\";\n vpd.bones = [];\n var commentPatternG = /\\/\\/\\w*(\\r|\\n|\\r\\n)/g;\n var newlinePattern = /\\r|\\n|\\r\\n/;\n var lines = text.replace(commentPatternG, \"\").split(newlinePattern);\n function throwError() {\n throw \"the file seems not vpd file.\";\n }\n function checkMagic() {\n if (lines[0] !== \"Vocaloid Pose Data file\") {\n throwError();\n }\n }\n function parseHeader() {\n if (lines.length < 4) {\n throwError();\n }\n vpd.metadata.parentFile = lines[2];\n vpd.metadata.boneCount = parseInt(lines[3]);\n }\n function parseBones() {\n var boneHeaderPattern = /^\\s*(Bone[0-9]+)\\s*\\{\\s*(.*)$/;\n var boneVectorPattern = /^\\s*(-?[0-9]+\\.[0-9]+)\\s*,\\s*(-?[0-9]+\\.[0-9]+)\\s*,\\s*(-?[0-9]+\\.[0-9]+)\\s*;/;\n var boneQuaternionPattern = /^\\s*(-?[0-9]+\\.[0-9]+)\\s*,\\s*(-?[0-9]+\\.[0-9]+)\\s*,\\s*(-?[0-9]+\\.[0-9]+)\\s*,\\s*(-?[0-9]+\\.[0-9]+)\\s*;/;\n var boneFooterPattern = /^\\s*}/;\n var bones = vpd.bones;\n var n = null;\n var v = null;\n var q = null;\n for (var i = 4; i < lines.length; i++) {\n var line = lines[i];\n var result;\n result = line.match(boneHeaderPattern);\n if (result !== null) {\n if (n !== null) {\n throwError();\n }\n n = result[2];\n }\n result = line.match(boneVectorPattern);\n if (result !== null) {\n if (v !== null) {\n throwError();\n }\n v = [parseFloat(result[1]), parseFloat(result[2]), parseFloat(result[3])];\n }\n result = line.match(boneQuaternionPattern);\n if (result !== null) {\n if (q !== null) {\n throwError();\n }\n q = [parseFloat(result[1]), parseFloat(result[2]), parseFloat(result[3]), parseFloat(result[4])];\n }\n result = line.match(boneFooterPattern);\n if (result !== null) {\n if (n === null || v === null || q === null) {\n throwError();\n }\n bones.push({\n name: n,\n translation: v,\n quaternion: q\n });\n n = null;\n v = null;\n q = null;\n }\n }\n if (n !== null || v !== null || q !== null) {\n throwError();\n }\n }\n checkMagic();\n parseHeader();\n parseBones();\n if (leftToRight === true)\n this.leftToRightVpd(vpd);\n return vpd;\n }\n mergeVmds(vmds) {\n var v = {};\n v.metadata = {};\n v.metadata.name = vmds[0].metadata.name;\n v.metadata.coordinateSystem = vmds[0].metadata.coordinateSystem;\n v.metadata.motionCount = 0;\n v.metadata.morphCount = 0;\n v.metadata.cameraCount = 0;\n v.motions = [];\n v.morphs = [];\n v.cameras = [];\n for (var i = 0; i < vmds.length; i++) {\n var v2 = vmds[i];\n v.metadata.motionCount += v2.metadata.motionCount;\n v.metadata.morphCount += v2.metadata.morphCount;\n v.metadata.cameraCount += v2.metadata.cameraCount;\n for (var j = 0; j < v2.metadata.motionCount; j++) {\n v.motions.push(v2.motions[j]);\n }\n for (var j = 0; j < v2.metadata.morphCount; j++) {\n v.morphs.push(v2.morphs[j]);\n }\n for (var j = 0; j < v2.metadata.cameraCount; j++) {\n v.cameras.push(v2.cameras[j]);\n }\n }\n return v;\n }\n leftToRightModel(model) {\n if (model.metadata.coordinateSystem === \"right\") {\n return;\n }\n model.metadata.coordinateSystem = \"right\";\n var helper = new DataCreationHelper();\n for (var i = 0; i < model.metadata.vertexCount; i++) {\n helper.leftToRightVector3(model.vertices[i].position);\n helper.leftToRightVector3(model.vertices[i].normal);\n }\n for (var i = 0; i < model.metadata.faceCount; i++) {\n helper.leftToRightIndexOrder(model.faces[i].indices);\n }\n for (var i = 0; i < model.metadata.boneCount; i++) {\n helper.leftToRightVector3(model.bones[i].position);\n }\n for (var i = 0; i < model.metadata.morphCount; i++) {\n var m = model.morphs[i];\n if (model.metadata.format === \"pmx\" && m.type !== 1) {\n continue;\n }\n for (var j = 0; j < m.elements.length; j++) {\n helper.leftToRightVector3(m.elements[j].position);\n }\n }\n for (var i = 0; i < model.metadata.rigidBodyCount; i++) {\n helper.leftToRightVector3(model.rigidBodies[i].position);\n helper.leftToRightEuler(model.rigidBodies[i].rotation);\n }\n for (var i = 0; i < model.metadata.constraintCount; i++) {\n helper.leftToRightVector3(model.constraints[i].position);\n helper.leftToRightEuler(model.constraints[i].rotation);\n helper.leftToRightVector3Range(\n model.constraints[i].translationLimitation1,\n model.constraints[i].translationLimitation2\n );\n helper.leftToRightEulerRange(model.constraints[i].rotationLimitation1, model.constraints[i].rotationLimitation2);\n }\n }\n leftToRightVmd(vmd) {\n if (vmd.metadata.coordinateSystem === \"right\") {\n return;\n }\n vmd.metadata.coordinateSystem = \"right\";\n var helper = new DataCreationHelper();\n for (var i = 0; i < vmd.metadata.motionCount; i++) {\n helper.leftToRightVector3(vmd.motions[i].position);\n helper.leftToRightQuaternion(vmd.motions[i].rotation);\n }\n for (var i = 0; i < vmd.metadata.cameraCount; i++) {\n helper.leftToRightVector3(vmd.cameras[i].position);\n helper.leftToRightEuler(vmd.cameras[i].rotation);\n }\n }\n leftToRightVpd(vpd) {\n if (vpd.metadata.coordinateSystem === \"right\") {\n return;\n }\n vpd.metadata.coordinateSystem = \"right\";\n var helper = new DataCreationHelper();\n for (var i = 0; i < vpd.bones.length; i++) {\n helper.leftToRightVector3(vpd.bones[i].translation);\n helper.leftToRightQuaternion(vpd.bones[i].quaternion);\n }\n }\n}\nexport {\n CharsetEncoder,\n Parser\n};\n//# sourceMappingURL=mmdparser.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Vector3, Quaternion, Matrix4 } from \"three\";\nimport { CharsetEncoder } from \"../libs/mmdparser.js\";\nclass MMDExporter {\n constructor() {\n // Unicode to Shift_JIS table\n __publicField(this, \"u2sTable\");\n }\n /* TODO: implement\n // mesh -> pmd\n this.parsePmd = function ( object ) {\n };\n */\n /* TODO: implement\n // mesh -> pmx\n this.parsePmx = function ( object ) {\n };\n */\n /* TODO: implement\n // animation + skeleton -> vmd\n this.parseVmd = function ( object ) {\n };\n */\n /*\n * skeleton -> vpd\n * Returns Shift_JIS encoded Uint8Array. Otherwise return strings.\n */\n parseVpd(skin, outputShiftJis, useOriginalBones) {\n if (skin.isSkinnedMesh !== true) {\n console.warn(\"THREE.MMDExporter: parseVpd() requires SkinnedMesh instance.\");\n return null;\n }\n function toStringsFromNumber(num) {\n if (Math.abs(num) < 1e-6)\n num = 0;\n let a = num.toString();\n if (a.indexOf(\".\") === -1) {\n a += \".\";\n }\n a += \"000000\";\n const index = a.indexOf(\".\");\n const d = a.slice(0, index);\n const p = a.slice(index + 1, index + 7);\n return d + \".\" + p;\n }\n function toStringsFromArray(array2) {\n const a = [];\n for (let i = 0, il = array2.length; i < il; i++) {\n a.push(toStringsFromNumber(array2[i]));\n }\n return a.join(\",\");\n }\n skin.updateMatrixWorld(true);\n const bones = skin.skeleton.bones;\n const bones2 = this.getBindBones(skin);\n const position = new Vector3();\n const quaternion = new Quaternion();\n const quaternion2 = new Quaternion();\n const matrix = new Matrix4();\n const array = [];\n array.push(\"Vocaloid Pose Data file\");\n array.push(\"\");\n array.push((skin.name !== \"\" ? skin.name.replace(/\\s/g, \"_\") : \"skin\") + \".osm;\");\n array.push(bones.length + \";\");\n array.push(\"\");\n for (let i = 0, il = bones.length; i < il; i++) {\n const bone = bones[i];\n const bone2 = bones2[i];\n if (useOriginalBones === true && bone.userData.ik !== void 0 && bone.userData.ik.originalMatrix !== void 0) {\n matrix.fromArray(bone.userData.ik.originalMatrix);\n } else {\n matrix.copy(bone.matrix);\n }\n position.setFromMatrixPosition(matrix);\n quaternion.setFromRotationMatrix(matrix);\n const pArray = position.sub(bone2.position).toArray();\n const qArray = quaternion2.copy(bone2.quaternion).conjugate().multiply(quaternion).toArray();\n pArray[2] = -pArray[2];\n qArray[0] = -qArray[0];\n qArray[1] = -qArray[1];\n array.push(\"Bone\" + i + \"{\" + bone.name);\n array.push(\" \" + toStringsFromArray(pArray) + \";\");\n array.push(\" \" + toStringsFromArray(qArray) + \";\");\n array.push(\"}\");\n array.push(\"\");\n }\n array.push(\"\");\n const lines = array.join(\"\\n\");\n return outputShiftJis === true ? this.unicodeToShiftjis(lines) : lines;\n }\n unicodeToShiftjis(str) {\n if (this.u2sTable === void 0) {\n const encoder = new CharsetEncoder();\n const table = encoder.s2uTable;\n this.u2sTable = {};\n const keys = Object.keys(table);\n for (let i = 0, il = keys.length; i < il; i++) {\n let key = keys[i];\n const value = table[key];\n this.u2sTable[value] = parseInt(key);\n }\n }\n const array = [];\n for (let i = 0, il = str.length; i < il; i++) {\n const code = str.charCodeAt(i);\n const value = this.u2sTable[code];\n if (value === void 0) {\n throw \"cannot convert charcode 0x\" + code.toString(16);\n } else if (value > 255) {\n array.push(value >> 8 & 255);\n array.push(value & 255);\n } else {\n array.push(value & 255);\n }\n }\n return new Uint8Array(array);\n }\n getBindBones(skin) {\n const poseSkin = skin.clone();\n poseSkin.pose();\n return poseSkin.skeleton.bones;\n }\n}\nexport {\n MMDExporter\n};\n//# sourceMappingURL=MMDExporter.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Vector3 } from \"three\";\nconst isMesh = (object) => object.isMesh;\nclass STLExporter {\n constructor() {\n __publicField(this, \"binary\", false);\n __publicField(this, \"output\", \"\");\n __publicField(this, \"offset\", 80);\n // skip header\n __publicField(this, \"objects\", []);\n __publicField(this, \"triangles\", 0);\n __publicField(this, \"vA\", new Vector3());\n __publicField(this, \"vB\", new Vector3());\n __publicField(this, \"vC\", new Vector3());\n __publicField(this, \"cb\", new Vector3());\n __publicField(this, \"ab\", new Vector3());\n __publicField(this, \"normal\", new Vector3());\n }\n parse(scene, options) {\n this.binary = (options == null ? void 0 : options.binary) !== void 0 ? options == null ? void 0 : options.binary : false;\n scene.traverse((object) => {\n if (isMesh(object)) {\n const geometry = object.geometry;\n if (!geometry.isBufferGeometry) {\n throw new Error(\"THREE.STLExporter: Geometry is not of type THREE.BufferGeometry.\");\n }\n const index = geometry.index;\n const positionAttribute = geometry.getAttribute(\"position\") || null;\n if (!positionAttribute)\n return;\n this.triangles += index !== null ? index.count / 3 : positionAttribute.count / 3;\n this.objects.push({\n object3d: object,\n geometry\n });\n }\n });\n if (this.binary) {\n const bufferLength = this.triangles * 2 + this.triangles * 3 * 4 * 4 + 80 + 4;\n const arrayBuffer = new ArrayBuffer(bufferLength);\n this.output = new DataView(arrayBuffer);\n this.output.setUint32(this.offset, this.triangles, true);\n this.offset += 4;\n } else {\n this.output = \"\";\n this.output += \"solid exported\\n\";\n }\n for (let i = 0, il = this.objects.length; i < il; i++) {\n const object = this.objects[i].object3d;\n const geometry = this.objects[i].geometry;\n const index = geometry.index;\n const positionAttribute = geometry.getAttribute(\"position\");\n if (index !== null) {\n for (let j = 0; j < index.count; j += 3) {\n const a = index.getX(j + 0);\n const b = index.getX(j + 1);\n const c = index.getX(j + 2);\n this.writeFace(a, b, c, positionAttribute, object);\n }\n } else {\n for (let j = 0; j < positionAttribute.count; j += 3) {\n const a = j + 0;\n const b = j + 1;\n const c = j + 2;\n this.writeFace(a, b, c, positionAttribute, object);\n }\n }\n }\n if (!this.binary) {\n this.output += \"endsolid exported\\n\";\n }\n return this.output;\n }\n writeFace(a, b, c, positionAttribute, object) {\n this.vA.fromBufferAttribute(positionAttribute, a);\n this.vB.fromBufferAttribute(positionAttribute, b);\n this.vC.fromBufferAttribute(positionAttribute, c);\n if (object.isSkinnedMesh) {\n const mesh = object;\n if (\"applyBoneTransform\" in mesh) {\n mesh.applyBoneTransform(a, this.vA);\n mesh.applyBoneTransform(b, this.vB);\n mesh.applyBoneTransform(c, this.vC);\n } else {\n mesh.boneTransform(a, this.vA);\n mesh.boneTransform(b, this.vB);\n mesh.boneTransform(c, this.vC);\n }\n }\n this.vA.applyMatrix4(object.matrixWorld);\n this.vB.applyMatrix4(object.matrixWorld);\n this.vC.applyMatrix4(object.matrixWorld);\n this.writeNormal(this.vA, this.vB, this.vC);\n this.writeVertex(this.vA);\n this.writeVertex(this.vB);\n this.writeVertex(this.vC);\n if (this.binary && this.output instanceof DataView) {\n this.output.setUint16(this.offset, 0, true);\n this.offset += 2;\n } else {\n this.output += \"\t\tendloop\\n\";\n this.output += \"\tendfacet\\n\";\n }\n }\n writeNormal(vA, vB, vC) {\n this.cb.subVectors(vC, vB);\n this.ab.subVectors(vA, vB);\n this.cb.cross(this.ab).normalize();\n this.normal.copy(this.cb).normalize();\n if (this.binary && this.output instanceof DataView) {\n this.output.setFloat32(this.offset, this.normal.x, true);\n this.offset += 4;\n this.output.setFloat32(this.offset, this.normal.y, true);\n this.offset += 4;\n this.output.setFloat32(this.offset, this.normal.z, true);\n this.offset += 4;\n } else {\n this.output += `\tfacet normal ${this.normal.x} ${this.normal.y} ${this.normal.z}\n`;\n this.output += \"\t\touter loop\\n\";\n }\n }\n writeVertex(vertex) {\n if (this.binary && this.output instanceof DataView) {\n this.output.setFloat32(this.offset, vertex.x, true);\n this.offset += 4;\n this.output.setFloat32(this.offset, vertex.y, true);\n this.offset += 4;\n this.output.setFloat32(this.offset, vertex.z, true);\n this.offset += 4;\n } else {\n this.output += `\t\t\tvertex ${vertex.x} ${vertex.y} ${vertex.z}\n`;\n }\n }\n}\nexport {\n STLExporter\n};\n//# sourceMappingURL=STLExporter.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Vector3, Color, Vector2, Mesh, Line, Points, Matrix3, BufferAttribute } from \"three\";\nclass OBJExporter {\n constructor() {\n __publicField(this, \"output\");\n __publicField(this, \"indexVertex\");\n __publicField(this, \"indexVertexUvs\");\n __publicField(this, \"indexNormals\");\n __publicField(this, \"vertex\");\n __publicField(this, \"color\");\n __publicField(this, \"normal\");\n __publicField(this, \"uv\");\n __publicField(this, \"face\");\n this.output = \"\";\n this.indexVertex = 0;\n this.indexVertexUvs = 0;\n this.indexNormals = 0;\n this.vertex = new Vector3();\n this.color = new Color();\n this.normal = new Vector3();\n this.uv = new Vector2();\n this.face = [];\n }\n parse(object) {\n object.traverse((child) => {\n if (child instanceof Mesh && child.isMesh) {\n this.parseMesh(child);\n }\n if (child instanceof Line && child.isLine) {\n this.parseLine(child);\n }\n if (child instanceof Points && child.isPoints) {\n this.parsePoints(child);\n }\n });\n return this.output;\n }\n parseMesh(mesh) {\n let nbVertex = 0;\n let nbNormals = 0;\n let nbVertexUvs = 0;\n const geometry = mesh.geometry;\n const normalMatrixWorld = new Matrix3();\n if (!geometry.isBufferGeometry) {\n throw new Error(\"THREE.OBJExporter: Geometry is not of type THREE.BufferGeometry.\");\n }\n const vertices = geometry.getAttribute(\"position\");\n const normals = geometry.getAttribute(\"normal\");\n const uvs = geometry.getAttribute(\"uv\");\n const indices = geometry.getIndex();\n this.output += `o ${mesh.name}\n`;\n if (mesh.material && !Array.isArray(mesh.material) && mesh.material.name) {\n this.output += `usemtl ${mesh.material.name}\n`;\n }\n if (vertices !== void 0) {\n for (let i = 0, l = vertices.count; i < l; i++, nbVertex++) {\n this.vertex.x = vertices.getX(i);\n this.vertex.y = vertices.getY(i);\n this.vertex.z = vertices.getZ(i);\n this.vertex.applyMatrix4(mesh.matrixWorld);\n this.output += `v ${this.vertex.x} ${this.vertex.y} ${this.vertex.z}\n`;\n }\n }\n if (uvs !== void 0) {\n for (let i = 0, l = uvs.count; i < l; i++, nbVertexUvs++) {\n this.uv.x = uvs.getX(i);\n this.uv.y = uvs.getY(i);\n this.output += `vt ${this.uv.x} ${this.uv.y}\n`;\n }\n }\n if (normals !== void 0) {\n normalMatrixWorld.getNormalMatrix(mesh.matrixWorld);\n for (let i = 0, l = normals.count; i < l; i++, nbNormals++) {\n this.normal.x = normals.getX(i);\n this.normal.y = normals.getY(i);\n this.normal.z = normals.getZ(i);\n this.normal.applyMatrix3(normalMatrixWorld).normalize();\n this.output += `vn ${this.normal.x} ${this.normal.y} ${this.normal.z}\n`;\n }\n }\n if (indices !== null) {\n for (let i = 0, l = indices.count; i < l; i += 3) {\n for (let m = 0; m < 3; m++) {\n const j = indices.getX(i + m) + 1;\n this.face[m] = this.indexVertex + j + (normals || uvs ? `/${uvs ? this.indexVertexUvs + j : \"\"}${normals ? `/${this.indexNormals + j}` : \"\"}` : \"\");\n }\n this.output += `f ${this.face.join(\" \")}\n`;\n }\n } else {\n for (let i = 0, l = vertices.count; i < l; i += 3) {\n for (let m = 0; m < 3; m++) {\n const j = i + m + 1;\n this.face[m] = this.indexVertex + j + (normals || uvs ? `/${uvs ? this.indexVertexUvs + j : \"\"}${normals ? `/${this.indexNormals + j}` : \"\"}` : \"\");\n }\n this.output += `f ${this.face.join(\" \")}\n`;\n }\n }\n this.indexVertex += nbVertex;\n this.indexVertexUvs += nbVertexUvs;\n this.indexNormals += nbNormals;\n }\n parseLine(line) {\n let nbVertex = 0;\n const geometry = line.geometry;\n const type = line.type;\n if (geometry.isBufferGeometry) {\n throw new Error(\"THREE.OBJExporter: Geometry is not of type THREE.BufferGeometry.\");\n }\n const vertices = geometry.getAttribute(\"position\");\n this.output += `o ${line.name}\n`;\n if (vertices !== void 0) {\n for (let i = 0, l = vertices.count; i < l; i++, nbVertex++) {\n this.vertex.x = vertices.getX(i);\n this.vertex.y = vertices.getY(i);\n this.vertex.z = vertices.getZ(i);\n this.vertex.applyMatrix4(line.matrixWorld);\n this.output += `v ${this.vertex.x} ${this.vertex.y} ${this.vertex.z}\n`;\n }\n }\n if (type === \"Line\") {\n this.output += \"l \";\n for (let j = 1, l = vertices.count; j <= l; j++) {\n this.output += `${this.indexVertex + j} `;\n }\n this.output += \"\\n\";\n }\n if (type === \"LineSegments\") {\n for (let j = 1, k = j + 1, l = vertices.count; j < l; j += 2, k = j + 1) {\n this.output += `l ${this.indexVertex + j} ${this.indexVertex + k}\n`;\n }\n }\n this.indexVertex += nbVertex;\n }\n parsePoints(points) {\n let nbVertex = 0;\n const geometry = points.geometry;\n if (!geometry.isBufferGeometry) {\n throw new Error(\"THREE.OBJExporter: Geometry is not of type THREE.BufferGeometry.\");\n }\n const vertices = geometry.getAttribute(\"position\");\n const colors = geometry.getAttribute(\"color\");\n this.output += `o ${points.name}\n`;\n if (vertices !== void 0) {\n for (let i = 0, l = vertices.count; i < l; i++, nbVertex++) {\n this.vertex.fromBufferAttribute(vertices, i);\n this.vertex.applyMatrix4(points.matrixWorld);\n this.output += `v ${this.vertex.x} ${this.vertex.y} ${this.vertex.z}`;\n if (colors !== void 0 && colors instanceof BufferAttribute) {\n this.color.fromBufferAttribute(colors, i);\n this.output += ` ${this.color.r} ${this.color.g} ${this.color.b}`;\n }\n this.output += \"\\n\";\n }\n }\n this.output += \"p \";\n for (let j = 1, l = vertices.count; j <= l; j++) {\n this.output += `${this.indexVertex + j} `;\n }\n this.output += \"\\n\";\n this.indexVertex += nbVertex;\n }\n}\nexport {\n OBJExporter\n};\n//# sourceMappingURL=OBJExporter.js.map\n","import * as THREE from \"three\";\nfunction RoomEnvironment() {\n const scene = new THREE.Scene();\n const geometry = new THREE.BoxGeometry();\n geometry.deleteAttribute(\"uv\");\n const roomMaterial = new THREE.MeshStandardMaterial({ side: THREE.BackSide });\n const boxMaterial = new THREE.MeshStandardMaterial();\n const mainLight = new THREE.PointLight(16777215, 5, 28, 2);\n mainLight.position.set(0.418, 16.199, 0.3);\n scene.add(mainLight);\n const room = new THREE.Mesh(geometry, roomMaterial);\n room.position.set(-0.757, 13.219, 0.717);\n room.scale.set(31.713, 28.305, 28.591);\n scene.add(room);\n const box1 = new THREE.Mesh(geometry, boxMaterial);\n box1.position.set(-10.906, 2.009, 1.846);\n box1.rotation.set(0, -0.195, 0);\n box1.scale.set(2.328, 7.905, 4.651);\n scene.add(box1);\n const box2 = new THREE.Mesh(geometry, boxMaterial);\n box2.position.set(-5.607, -0.754, -0.758);\n box2.rotation.set(0, 0.994, 0);\n box2.scale.set(1.97, 1.534, 3.955);\n scene.add(box2);\n const box3 = new THREE.Mesh(geometry, boxMaterial);\n box3.position.set(6.167, 0.857, 7.803);\n box3.rotation.set(0, 0.561, 0);\n box3.scale.set(3.927, 6.285, 3.687);\n scene.add(box3);\n const box4 = new THREE.Mesh(geometry, boxMaterial);\n box4.position.set(-2.017, 0.018, 6.124);\n box4.rotation.set(0, 0.333, 0);\n box4.scale.set(2.002, 4.566, 2.064);\n scene.add(box4);\n const box5 = new THREE.Mesh(geometry, boxMaterial);\n box5.position.set(2.291, -0.756, -2.621);\n box5.rotation.set(0, -0.286, 0);\n box5.scale.set(1.546, 1.552, 1.496);\n scene.add(box5);\n const box6 = new THREE.Mesh(geometry, boxMaterial);\n box6.position.set(-2.193, -0.369, -5.547);\n box6.rotation.set(0, 0.516, 0);\n box6.scale.set(3.875, 3.487, 2.986);\n scene.add(box6);\n const light1 = new THREE.Mesh(geometry, createAreaLightMaterial(50));\n light1.position.set(-16.116, 14.37, 8.208);\n light1.scale.set(0.1, 2.428, 2.739);\n scene.add(light1);\n const light2 = new THREE.Mesh(geometry, createAreaLightMaterial(50));\n light2.position.set(-16.109, 18.021, -8.207);\n light2.scale.set(0.1, 2.425, 2.751);\n scene.add(light2);\n const light3 = new THREE.Mesh(geometry, createAreaLightMaterial(17));\n light3.position.set(14.904, 12.198, -1.832);\n light3.scale.set(0.15, 4.265, 6.331);\n scene.add(light3);\n const light4 = new THREE.Mesh(geometry, createAreaLightMaterial(43));\n light4.position.set(-0.462, 8.89, 14.52);\n light4.scale.set(4.38, 5.441, 0.088);\n scene.add(light4);\n const light5 = new THREE.Mesh(geometry, createAreaLightMaterial(20));\n light5.position.set(3.235, 11.486, -12.541);\n light5.scale.set(2.5, 2, 0.1);\n scene.add(light5);\n const light6 = new THREE.Mesh(geometry, createAreaLightMaterial(100));\n light6.position.set(0, 20, 0);\n light6.scale.set(1, 0.1, 1);\n scene.add(light6);\n function createAreaLightMaterial(intensity) {\n const material = new THREE.MeshBasicMaterial();\n material.color.setScalar(intensity);\n return material;\n }\n return scene;\n}\nexport {\n RoomEnvironment\n};\n//# sourceMappingURL=RoomEnvironment.js.map\n","import { NumberKeyframeTrack, AnimationClip, Vector3, VectorKeyframeTrack, BooleanKeyframeTrack, ColorKeyframeTrack } from \"three\";\nconst AnimationClipCreator = {\n CreateRotationAnimation(period, axis = \"x\") {\n const times = [0, period], values = [0, 360];\n const trackName = \".rotation[\" + axis + \"]\";\n const track = new NumberKeyframeTrack(trackName, times, values);\n return new AnimationClip(null, period, [track]);\n },\n CreateScaleAxisAnimation(period, axis = \"x\") {\n const times = [0, period], values = [0, 1];\n const trackName = \".scale[\" + axis + \"]\";\n const track = new NumberKeyframeTrack(trackName, times, values);\n return new AnimationClip(null, period, [track]);\n },\n CreateShakeAnimation(duration, shakeScale) {\n const times = [], values = [], tmp = new Vector3();\n for (let i = 0; i < duration * 10; i++) {\n times.push(i / 10);\n tmp.set(Math.random() * 2 - 1, Math.random() * 2 - 1, Math.random() * 2 - 1).multiply(shakeScale).toArray(values, values.length);\n }\n const trackName = \".position\";\n const track = new VectorKeyframeTrack(trackName, times, values);\n return new AnimationClip(null, duration, [track]);\n },\n CreatePulsationAnimation(duration, pulseScale) {\n const times = [], values = [], tmp = new Vector3();\n for (let i = 0; i < duration * 10; i++) {\n times.push(i / 10);\n const scaleFactor = Math.random() * pulseScale;\n tmp.set(scaleFactor, scaleFactor, scaleFactor).toArray(values, values.length);\n }\n const trackName = \".scale\";\n const track = new VectorKeyframeTrack(trackName, times, values);\n return new AnimationClip(null, duration, [track]);\n },\n CreateVisibilityAnimation(duration) {\n const times = [0, duration / 2, duration], values = [true, false, true];\n const trackName = \".visible\";\n const track = new BooleanKeyframeTrack(trackName, times, values);\n return new AnimationClip(null, duration, [track]);\n },\n CreateMaterialColorAnimation(duration, colors) {\n const times = [], values = [], timeStep = duration / colors.length;\n for (let i = 0; i < colors.length; i++) {\n times.push(i * timeStep);\n const color = colors[i];\n values.push(color.r, color.g, color.b);\n }\n const trackName = \".material.color\";\n const track = new ColorKeyframeTrack(trackName, times, values);\n return new AnimationClip(null, duration, [track]);\n }\n};\nexport {\n AnimationClipCreator\n};\n//# sourceMappingURL=AnimationClipCreator.js.map\n","import { Object3D, SphereGeometry, MeshBasicMaterial, Color, LineBasicMaterial, Quaternion, Vector3, Matrix4, Mesh, Line, BufferGeometry, BufferAttribute } from \"three\";\nconst _q = /* @__PURE__ */ new Quaternion();\nconst _targetPos = /* @__PURE__ */ new Vector3();\nconst _targetVec = /* @__PURE__ */ new Vector3();\nconst _effectorPos = /* @__PURE__ */ new Vector3();\nconst _effectorVec = /* @__PURE__ */ new Vector3();\nconst _linkPos = /* @__PURE__ */ new Vector3();\nconst _invLinkQ = /* @__PURE__ */ new Quaternion();\nconst _linkScale = /* @__PURE__ */ new Vector3();\nconst _axis = /* @__PURE__ */ new Vector3();\nconst _vector = /* @__PURE__ */ new Vector3();\nconst _matrix = /* @__PURE__ */ new Matrix4();\nclass CCDIKSolver {\n /**\n * @param {THREE.SkinnedMesh} mesh\n * @param {Array<Object>} iks\n */\n constructor(mesh, iks = []) {\n this.mesh = mesh;\n this.iks = iks;\n this._valid();\n }\n /**\n * Update all IK bones.\n *\n * @return {CCDIKSolver}\n */\n update() {\n const iks = this.iks;\n for (let i = 0, il = iks.length; i < il; i++) {\n this.updateOne(iks[i]);\n }\n return this;\n }\n /**\n * Update one IK bone\n *\n * @param {Object} ik parameter\n * @return {CCDIKSolver}\n */\n updateOne(ik) {\n const bones = this.mesh.skeleton.bones;\n const math = Math;\n const effector = bones[ik.effector];\n const target = bones[ik.target];\n _targetPos.setFromMatrixPosition(target.matrixWorld);\n const links = ik.links;\n const iteration = ik.iteration !== void 0 ? ik.iteration : 1;\n for (let i = 0; i < iteration; i++) {\n let rotated = false;\n for (let j = 0, jl = links.length; j < jl; j++) {\n const link = bones[links[j].index];\n if (links[j].enabled === false)\n break;\n const limitation = links[j].limitation;\n const rotationMin = links[j].rotationMin;\n const rotationMax = links[j].rotationMax;\n link.matrixWorld.decompose(_linkPos, _invLinkQ, _linkScale);\n _invLinkQ.invert();\n _effectorPos.setFromMatrixPosition(effector.matrixWorld);\n _effectorVec.subVectors(_effectorPos, _linkPos);\n _effectorVec.applyQuaternion(_invLinkQ);\n _effectorVec.normalize();\n _targetVec.subVectors(_targetPos, _linkPos);\n _targetVec.applyQuaternion(_invLinkQ);\n _targetVec.normalize();\n let angle = _targetVec.dot(_effectorVec);\n if (angle > 1) {\n angle = 1;\n } else if (angle < -1) {\n angle = -1;\n }\n angle = math.acos(angle);\n if (angle < 1e-5)\n continue;\n if (ik.minAngle !== void 0 && angle < ik.minAngle) {\n angle = ik.minAngle;\n }\n if (ik.maxAngle !== void 0 && angle > ik.maxAngle) {\n angle = ik.maxAngle;\n }\n _axis.crossVectors(_effectorVec, _targetVec);\n _axis.normalize();\n _q.setFromAxisAngle(_axis, angle);\n link.quaternion.multiply(_q);\n if (limitation !== void 0) {\n let c = link.quaternion.w;\n if (c > 1)\n c = 1;\n const c2 = math.sqrt(1 - c * c);\n link.quaternion.set(limitation.x * c2, limitation.y * c2, limitation.z * c2, c);\n }\n if (rotationMin !== void 0) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).max(rotationMin));\n }\n if (rotationMax !== void 0) {\n link.rotation.setFromVector3(_vector.setFromEuler(link.rotation).min(rotationMax));\n }\n link.updateMatrixWorld(true);\n rotated = true;\n }\n if (!rotated)\n break;\n }\n return this;\n }\n /**\n * Creates Helper\n *\n * @return {CCDIKHelper}\n */\n createHelper() {\n return new CCDIKHelper(this.mesh, this.iks);\n }\n // private methods\n _valid() {\n const iks = this.iks;\n const bones = this.mesh.skeleton.bones;\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i];\n const effector = bones[ik.effector];\n const links = ik.links;\n let link0, link1;\n link0 = effector;\n for (let j = 0, jl = links.length; j < jl; j++) {\n link1 = bones[links[j].index];\n if (link0.parent !== link1) {\n console.warn(\"THREE.CCDIKSolver: bone \" + link0.name + \" is not the child of bone \" + link1.name);\n }\n link0 = link1;\n }\n }\n }\n}\nfunction getPosition(bone, matrixWorldInv) {\n return _vector.setFromMatrixPosition(bone.matrixWorld).applyMatrix4(matrixWorldInv);\n}\nfunction setPositionOfBoneToAttributeArray(array, index, bone, matrixWorldInv) {\n const v = getPosition(bone, matrixWorldInv);\n array[index * 3 + 0] = v.x;\n array[index * 3 + 1] = v.y;\n array[index * 3 + 2] = v.z;\n}\nclass CCDIKHelper extends Object3D {\n constructor(mesh, iks = [], sphereSize = 0.25) {\n super();\n this.root = mesh;\n this.iks = iks;\n this.matrix.copy(mesh.matrixWorld);\n this.matrixAutoUpdate = false;\n this.sphereGeometry = new SphereGeometry(sphereSize, 16, 8);\n this.targetSphereMaterial = new MeshBasicMaterial({\n color: new Color(16746632),\n depthTest: false,\n depthWrite: false,\n transparent: true\n });\n this.effectorSphereMaterial = new MeshBasicMaterial({\n color: new Color(8978312),\n depthTest: false,\n depthWrite: false,\n transparent: true\n });\n this.linkSphereMaterial = new MeshBasicMaterial({\n color: new Color(8947967),\n depthTest: false,\n depthWrite: false,\n transparent: true\n });\n this.lineMaterial = new LineBasicMaterial({\n color: new Color(16711680),\n depthTest: false,\n depthWrite: false,\n transparent: true\n });\n this._init();\n }\n /**\n * Updates IK bones visualization.\n */\n updateMatrixWorld(force) {\n const mesh = this.root;\n if (this.visible) {\n let offset = 0;\n const iks = this.iks;\n const bones = mesh.skeleton.bones;\n _matrix.copy(mesh.matrixWorld).invert();\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i];\n const targetBone = bones[ik.target];\n const effectorBone = bones[ik.effector];\n const targetMesh = this.children[offset++];\n const effectorMesh = this.children[offset++];\n targetMesh.position.copy(getPosition(targetBone, _matrix));\n effectorMesh.position.copy(getPosition(effectorBone, _matrix));\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j];\n const linkBone = bones[link.index];\n const linkMesh = this.children[offset++];\n linkMesh.position.copy(getPosition(linkBone, _matrix));\n }\n const line = this.children[offset++];\n const array = line.geometry.attributes.position.array;\n setPositionOfBoneToAttributeArray(array, 0, targetBone, _matrix);\n setPositionOfBoneToAttributeArray(array, 1, effectorBone, _matrix);\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = ik.links[j];\n const linkBone = bones[link.index];\n setPositionOfBoneToAttributeArray(array, j + 2, linkBone, _matrix);\n }\n line.geometry.attributes.position.needsUpdate = true;\n }\n }\n this.matrix.copy(mesh.matrixWorld);\n super.updateMatrixWorld(force);\n }\n /**\n * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.\n */\n dispose() {\n this.sphereGeometry.dispose();\n this.targetSphereMaterial.dispose();\n this.effectorSphereMaterial.dispose();\n this.linkSphereMaterial.dispose();\n this.lineMaterial.dispose();\n const children = this.children;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child.isLine)\n child.geometry.dispose();\n }\n }\n // private method\n _init() {\n const scope = this;\n const iks = this.iks;\n function createLineGeometry(ik) {\n const geometry = new BufferGeometry();\n const vertices = new Float32Array((2 + ik.links.length) * 3);\n geometry.setAttribute(\"position\", new BufferAttribute(vertices, 3));\n return geometry;\n }\n function createTargetMesh() {\n return new Mesh(scope.sphereGeometry, scope.targetSphereMaterial);\n }\n function createEffectorMesh() {\n return new Mesh(scope.sphereGeometry, scope.effectorSphereMaterial);\n }\n function createLinkMesh() {\n return new Mesh(scope.sphereGeometry, scope.linkSphereMaterial);\n }\n function createLine(ik) {\n return new Line(createLineGeometry(ik), scope.lineMaterial);\n }\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i];\n this.add(createTargetMesh());\n this.add(createEffectorMesh());\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n this.add(createLinkMesh());\n }\n this.add(createLine(ik));\n }\n }\n}\nexport {\n CCDIKHelper,\n CCDIKSolver\n};\n//# sourceMappingURL=CCDIKSolver.js.map\n","import { LatheGeometry, Path } from \"three\";\nconst CapsuleGeometry = /* @__PURE__ */ (() => {\n class CapsuleGeometry2 extends LatheGeometry {\n constructor(radius = 1, length = 1, capSegments = 4, radialSegments = 8) {\n const path = new Path();\n path.absarc(0, -length / 2, radius, Math.PI * 1.5, 0);\n path.absarc(0, length / 2, radius, 0, Math.PI * 0.5);\n super(path.getPoints(capSegments), radialSegments);\n this.type = \"CapsuleGeometry\";\n this.parameters = {\n radius,\n height: length,\n capSegments,\n radialSegments\n };\n }\n static fromJSON(data) {\n return new CapsuleGeometry2(data.radius, data.length, data.capSegments, data.radialSegments);\n }\n }\n return CapsuleGeometry2;\n})();\nexport {\n CapsuleGeometry\n};\n//# sourceMappingURL=CapsuleGeometry.js.map\n","import { Vector3, Matrix4, Quaternion, Euler, Bone, Object3D, MeshBasicMaterial, Color, Mesh, BoxGeometry, SphereGeometry } from \"three\";\nimport { CapsuleGeometry } from \"../_polyfill/CapsuleGeometry.js\";\nclass MMDPhysics {\n /**\n * @param {THREE.SkinnedMesh} mesh\n * @param {Array<Object>} rigidBodyParams\n * @param {Array<Object>} (optional) constraintParams\n * @param {Object} params - (optional)\n * @param {Number} params.unitStep - Default is 1 / 65.\n * @param {Integer} params.maxStepNum - Default is 3.\n * @param {Vector3} params.gravity - Default is ( 0, - 9.8 * 10, 0 )\n */\n constructor(mesh, rigidBodyParams, constraintParams = [], params = {}) {\n if (typeof Ammo === \"undefined\") {\n throw new Error(\"THREE.MMDPhysics: Import ammo.js https://github.com/kripken/ammo.js\");\n }\n this.manager = new ResourceManager();\n this.mesh = mesh;\n this.unitStep = params.unitStep !== void 0 ? params.unitStep : 1 / 65;\n this.maxStepNum = params.maxStepNum !== void 0 ? params.maxStepNum : 3;\n this.gravity = new Vector3(0, -9.8 * 10, 0);\n if (params.gravity !== void 0)\n this.gravity.copy(params.gravity);\n this.world = params.world !== void 0 ? params.world : null;\n this.bodies = [];\n this.constraints = [];\n this._init(mesh, rigidBodyParams, constraintParams);\n }\n /**\n * Advances Physics calculation and updates bones.\n *\n * @param {Number} delta - time in second\n * @return {MMDPhysics}\n */\n update(delta) {\n const manager = this.manager;\n const mesh = this.mesh;\n let isNonDefaultScale = false;\n const position = manager.allocThreeVector3();\n const quaternion = manager.allocThreeQuaternion();\n const scale = manager.allocThreeVector3();\n mesh.matrixWorld.decompose(position, quaternion, scale);\n if (scale.x !== 1 || scale.y !== 1 || scale.z !== 1) {\n isNonDefaultScale = true;\n }\n let parent;\n if (isNonDefaultScale) {\n parent = mesh.parent;\n if (parent !== null)\n mesh.parent = null;\n scale.copy(this.mesh.scale);\n mesh.scale.set(1, 1, 1);\n mesh.updateMatrixWorld(true);\n }\n this._updateRigidBodies();\n this._stepSimulation(delta);\n this._updateBones();\n if (isNonDefaultScale) {\n if (parent !== null)\n mesh.parent = parent;\n mesh.scale.copy(scale);\n }\n manager.freeThreeVector3(scale);\n manager.freeThreeQuaternion(quaternion);\n manager.freeThreeVector3(position);\n return this;\n }\n /**\n * Resets rigid bodies transorm to current bone's.\n *\n * @return {MMDPhysics}\n */\n reset() {\n for (let i = 0, il = this.bodies.length; i < il; i++) {\n this.bodies[i].reset();\n }\n return this;\n }\n /**\n * Warm ups Rigid bodies. Calculates cycles steps.\n *\n * @param {Integer} cycles\n * @return {MMDPhysics}\n */\n warmup(cycles) {\n for (let i = 0; i < cycles; i++) {\n this.update(1 / 60);\n }\n return this;\n }\n /**\n * Sets gravity.\n *\n * @param {Vector3} gravity\n * @return {MMDPhysicsHelper}\n */\n setGravity(gravity) {\n this.world.setGravity(new Ammo.btVector3(gravity.x, gravity.y, gravity.z));\n this.gravity.copy(gravity);\n return this;\n }\n /**\n * Creates MMDPhysicsHelper\n *\n * @return {MMDPhysicsHelper}\n */\n createHelper() {\n return new MMDPhysicsHelper(this.mesh, this);\n }\n // private methods\n _init(mesh, rigidBodyParams, constraintParams) {\n const manager = this.manager;\n const parent = mesh.parent;\n if (parent !== null)\n mesh.parent = null;\n const currentPosition = manager.allocThreeVector3();\n const currentQuaternion = manager.allocThreeQuaternion();\n const currentScale = manager.allocThreeVector3();\n currentPosition.copy(mesh.position);\n currentQuaternion.copy(mesh.quaternion);\n currentScale.copy(mesh.scale);\n mesh.position.set(0, 0, 0);\n mesh.quaternion.set(0, 0, 0, 1);\n mesh.scale.set(1, 1, 1);\n mesh.updateMatrixWorld(true);\n if (this.world === null) {\n this.world = this._createWorld();\n this.setGravity(this.gravity);\n }\n this._initRigidBodies(rigidBodyParams);\n this._initConstraints(constraintParams);\n if (parent !== null)\n mesh.parent = parent;\n mesh.position.copy(currentPosition);\n mesh.quaternion.copy(currentQuaternion);\n mesh.scale.copy(currentScale);\n mesh.updateMatrixWorld(true);\n this.reset();\n manager.freeThreeVector3(currentPosition);\n manager.freeThreeQuaternion(currentQuaternion);\n manager.freeThreeVector3(currentScale);\n }\n _createWorld() {\n const config = new Ammo.btDefaultCollisionConfiguration();\n const dispatcher = new Ammo.btCollisionDispatcher(config);\n const cache = new Ammo.btDbvtBroadphase();\n const solver = new Ammo.btSequentialImpulseConstraintSolver();\n const world = new Ammo.btDiscreteDynamicsWorld(dispatcher, cache, solver, config);\n return world;\n }\n _initRigidBodies(rigidBodies) {\n for (let i = 0, il = rigidBodies.length; i < il; i++) {\n this.bodies.push(new RigidBody(this.mesh, this.world, rigidBodies[i], this.manager));\n }\n }\n _initConstraints(constraints) {\n for (let i = 0, il = constraints.length; i < il; i++) {\n const params = constraints[i];\n const bodyA = this.bodies[params.rigidBodyIndex1];\n const bodyB = this.bodies[params.rigidBodyIndex2];\n this.constraints.push(new Constraint(this.mesh, this.world, bodyA, bodyB, params, this.manager));\n }\n }\n _stepSimulation(delta) {\n const unitStep = this.unitStep;\n let stepTime = delta;\n let maxStepNum = (delta / unitStep | 0) + 1;\n if (stepTime < unitStep) {\n stepTime = unitStep;\n maxStepNum = 1;\n }\n if (maxStepNum > this.maxStepNum) {\n maxStepNum = this.maxStepNum;\n }\n this.world.stepSimulation(stepTime, maxStepNum, unitStep);\n }\n _updateRigidBodies() {\n for (let i = 0, il = this.bodies.length; i < il; i++) {\n this.bodies[i].updateFromBone();\n }\n }\n _updateBones() {\n for (let i = 0, il = this.bodies.length; i < il; i++) {\n this.bodies[i].updateBone();\n }\n }\n}\nclass ResourceManager {\n constructor() {\n this.threeVector3s = [];\n this.threeMatrix4s = [];\n this.threeQuaternions = [];\n this.threeEulers = [];\n this.transforms = [];\n this.quaternions = [];\n this.vector3s = [];\n }\n allocThreeVector3() {\n return this.threeVector3s.length > 0 ? this.threeVector3s.pop() : new Vector3();\n }\n freeThreeVector3(v) {\n this.threeVector3s.push(v);\n }\n allocThreeMatrix4() {\n return this.threeMatrix4s.length > 0 ? this.threeMatrix4s.pop() : new Matrix4();\n }\n freeThreeMatrix4(m) {\n this.threeMatrix4s.push(m);\n }\n allocThreeQuaternion() {\n return this.threeQuaternions.length > 0 ? this.threeQuaternions.pop() : new Quaternion();\n }\n freeThreeQuaternion(q) {\n this.threeQuaternions.push(q);\n }\n allocThreeEuler() {\n return this.threeEulers.length > 0 ? this.threeEulers.pop() : new Euler();\n }\n freeThreeEuler(e) {\n this.threeEulers.push(e);\n }\n allocTransform() {\n return this.transforms.length > 0 ? this.transforms.pop() : new Ammo.btTransform();\n }\n freeTransform(t) {\n this.transforms.push(t);\n }\n allocQuaternion() {\n return this.quaternions.length > 0 ? this.quaternions.pop() : new Ammo.btQuaternion();\n }\n freeQuaternion(q) {\n this.quaternions.push(q);\n }\n allocVector3() {\n return this.vector3s.length > 0 ? this.vector3s.pop() : new Ammo.btVector3();\n }\n freeVector3(v) {\n this.vector3s.push(v);\n }\n setIdentity(t) {\n t.setIdentity();\n }\n getBasis(t) {\n var q = this.allocQuaternion();\n t.getBasis().getRotation(q);\n return q;\n }\n getBasisAsMatrix3(t) {\n var q = this.getBasis(t);\n var m = this.quaternionToMatrix3(q);\n this.freeQuaternion(q);\n return m;\n }\n getOrigin(t) {\n return t.getOrigin();\n }\n setOrigin(t, v) {\n t.getOrigin().setValue(v.x(), v.y(), v.z());\n }\n copyOrigin(t1, t2) {\n var o = t2.getOrigin();\n this.setOrigin(t1, o);\n }\n setBasis(t, q) {\n t.setRotation(q);\n }\n setBasisFromMatrix3(t, m) {\n var q = this.matrix3ToQuaternion(m);\n this.setBasis(t, q);\n this.freeQuaternion(q);\n }\n setOriginFromArray3(t, a) {\n t.getOrigin().setValue(a[0], a[1], a[2]);\n }\n setOriginFromThreeVector3(t, v) {\n t.getOrigin().setValue(v.x, v.y, v.z);\n }\n setBasisFromArray3(t, a) {\n var thQ = this.allocThreeQuaternion();\n var thE = this.allocThreeEuler();\n thE.set(a[0], a[1], a[2]);\n this.setBasisFromThreeQuaternion(t, thQ.setFromEuler(thE));\n this.freeThreeEuler(thE);\n this.freeThreeQuaternion(thQ);\n }\n setBasisFromThreeQuaternion(t, a) {\n var q = this.allocQuaternion();\n q.setX(a.x);\n q.setY(a.y);\n q.setZ(a.z);\n q.setW(a.w);\n this.setBasis(t, q);\n this.freeQuaternion(q);\n }\n multiplyTransforms(t1, t2) {\n var t = this.allocTransform();\n this.setIdentity(t);\n var m1 = this.getBasisAsMatrix3(t1);\n var m2 = this.getBasisAsMatrix3(t2);\n var o1 = this.getOrigin(t1);\n var o2 = this.getOrigin(t2);\n var v1 = this.multiplyMatrix3ByVector3(m1, o2);\n var v2 = this.addVector3(v1, o1);\n this.setOrigin(t, v2);\n var m3 = this.multiplyMatrices3(m1, m2);\n this.setBasisFromMatrix3(t, m3);\n this.freeVector3(v1);\n this.freeVector3(v2);\n return t;\n }\n inverseTransform(t) {\n var t2 = this.allocTransform();\n var m1 = this.getBasisAsMatrix3(t);\n var o = this.getOrigin(t);\n var m2 = this.transposeMatrix3(m1);\n var v1 = this.negativeVector3(o);\n var v2 = this.multiplyMatrix3ByVector3(m2, v1);\n this.setOrigin(t2, v2);\n this.setBasisFromMatrix3(t2, m2);\n this.freeVector3(v1);\n this.freeVector3(v2);\n return t2;\n }\n multiplyMatrices3(m1, m2) {\n var m3 = [];\n var v10 = this.rowOfMatrix3(m1, 0);\n var v11 = this.rowOfMatrix3(m1, 1);\n var v12 = this.rowOfMatrix3(m1, 2);\n var v20 = this.columnOfMatrix3(m2, 0);\n var v21 = this.columnOfMatrix3(m2, 1);\n var v22 = this.columnOfMatrix3(m2, 2);\n m3[0] = this.dotVectors3(v10, v20);\n m3[1] = this.dotVectors3(v10, v21);\n m3[2] = this.dotVectors3(v10, v22);\n m3[3] = this.dotVectors3(v11, v20);\n m3[4] = this.dotVectors3(v11, v21);\n m3[5] = this.dotVectors3(v11, v22);\n m3[6] = this.dotVectors3(v12, v20);\n m3[7] = this.dotVectors3(v12, v21);\n m3[8] = this.dotVectors3(v12, v22);\n this.freeVector3(v10);\n this.freeVector3(v11);\n this.freeVector3(v12);\n this.freeVector3(v20);\n this.freeVector3(v21);\n this.freeVector3(v22);\n return m3;\n }\n addVector3(v1, v2) {\n var v = this.allocVector3();\n v.setValue(v1.x() + v2.x(), v1.y() + v2.y(), v1.z() + v2.z());\n return v;\n }\n dotVectors3(v1, v2) {\n return v1.x() * v2.x() + v1.y() * v2.y() + v1.z() * v2.z();\n }\n rowOfMatrix3(m, i) {\n var v = this.allocVector3();\n v.setValue(m[i * 3 + 0], m[i * 3 + 1], m[i * 3 + 2]);\n return v;\n }\n columnOfMatrix3(m, i) {\n var v = this.allocVector3();\n v.setValue(m[i + 0], m[i + 3], m[i + 6]);\n return v;\n }\n negativeVector3(v) {\n var v2 = this.allocVector3();\n v2.setValue(-v.x(), -v.y(), -v.z());\n return v2;\n }\n multiplyMatrix3ByVector3(m, v) {\n var v4 = this.allocVector3();\n var v0 = this.rowOfMatrix3(m, 0);\n var v1 = this.rowOfMatrix3(m, 1);\n var v2 = this.rowOfMatrix3(m, 2);\n var x = this.dotVectors3(v0, v);\n var y = this.dotVectors3(v1, v);\n var z = this.dotVectors3(v2, v);\n v4.setValue(x, y, z);\n this.freeVector3(v0);\n this.freeVector3(v1);\n this.freeVector3(v2);\n return v4;\n }\n transposeMatrix3(m) {\n var m2 = [];\n m2[0] = m[0];\n m2[1] = m[3];\n m2[2] = m[6];\n m2[3] = m[1];\n m2[4] = m[4];\n m2[5] = m[7];\n m2[6] = m[2];\n m2[7] = m[5];\n m2[8] = m[8];\n return m2;\n }\n quaternionToMatrix3(q) {\n var m = [];\n var x = q.x();\n var y = q.y();\n var z = q.z();\n var w = q.w();\n var xx = x * x;\n var yy = y * y;\n var zz = z * z;\n var xy = x * y;\n var yz = y * z;\n var zx = z * x;\n var xw = x * w;\n var yw = y * w;\n var zw = z * w;\n m[0] = 1 - 2 * (yy + zz);\n m[1] = 2 * (xy - zw);\n m[2] = 2 * (zx + yw);\n m[3] = 2 * (xy + zw);\n m[4] = 1 - 2 * (zz + xx);\n m[5] = 2 * (yz - xw);\n m[6] = 2 * (zx - yw);\n m[7] = 2 * (yz + xw);\n m[8] = 1 - 2 * (xx + yy);\n return m;\n }\n matrix3ToQuaternion(m) {\n var t = m[0] + m[4] + m[8];\n var s, x, y, z, w;\n if (t > 0) {\n s = Math.sqrt(t + 1) * 2;\n w = 0.25 * s;\n x = (m[7] - m[5]) / s;\n y = (m[2] - m[6]) / s;\n z = (m[3] - m[1]) / s;\n } else if (m[0] > m[4] && m[0] > m[8]) {\n s = Math.sqrt(1 + m[0] - m[4] - m[8]) * 2;\n w = (m[7] - m[5]) / s;\n x = 0.25 * s;\n y = (m[1] + m[3]) / s;\n z = (m[2] + m[6]) / s;\n } else if (m[4] > m[8]) {\n s = Math.sqrt(1 + m[4] - m[0] - m[8]) * 2;\n w = (m[2] - m[6]) / s;\n x = (m[1] + m[3]) / s;\n y = 0.25 * s;\n z = (m[5] + m[7]) / s;\n } else {\n s = Math.sqrt(1 + m[8] - m[0] - m[4]) * 2;\n w = (m[3] - m[1]) / s;\n x = (m[2] + m[6]) / s;\n y = (m[5] + m[7]) / s;\n z = 0.25 * s;\n }\n var q = this.allocQuaternion();\n q.setX(x);\n q.setY(y);\n q.setZ(z);\n q.setW(w);\n return q;\n }\n}\nclass RigidBody {\n constructor(mesh, world, params, manager) {\n this.mesh = mesh;\n this.world = world;\n this.params = params;\n this.manager = manager;\n this.body = null;\n this.bone = null;\n this.boneOffsetForm = null;\n this.boneOffsetFormInverse = null;\n this._init();\n }\n /**\n * Resets rigid body transform to the current bone's.\n *\n * @return {RigidBody}\n */\n reset() {\n this._setTransformFromBone();\n return this;\n }\n /**\n * Updates rigid body's transform from the current bone.\n *\n * @return {RidigBody}\n */\n updateFromBone() {\n if (this.params.boneIndex !== -1 && this.params.type === 0) {\n this._setTransformFromBone();\n }\n return this;\n }\n /**\n * Updates bone from the current ridid body's transform.\n *\n * @return {RidigBody}\n */\n updateBone() {\n if (this.params.type === 0 || this.params.boneIndex === -1) {\n return this;\n }\n this._updateBoneRotation();\n if (this.params.type === 1) {\n this._updateBonePosition();\n }\n this.bone.updateMatrixWorld(true);\n if (this.params.type === 2) {\n this._setPositionFromBone();\n }\n return this;\n }\n // private methods\n _init() {\n function generateShape(p) {\n switch (p.shapeType) {\n case 0:\n return new Ammo.btSphereShape(p.width);\n case 1:\n return new Ammo.btBoxShape(new Ammo.btVector3(p.width, p.height, p.depth));\n case 2:\n return new Ammo.btCapsuleShape(p.width, p.height);\n default:\n throw new Error(\"unknown shape type \" + p.shapeType);\n }\n }\n const manager = this.manager;\n const params = this.params;\n const bones = this.mesh.skeleton.bones;\n const bone = params.boneIndex === -1 ? new Bone() : bones[params.boneIndex];\n const shape = generateShape(params);\n const weight = params.type === 0 ? 0 : params.weight;\n const localInertia = manager.allocVector3();\n localInertia.setValue(0, 0, 0);\n if (weight !== 0) {\n shape.calculateLocalInertia(weight, localInertia);\n }\n const boneOffsetForm = manager.allocTransform();\n manager.setIdentity(boneOffsetForm);\n manager.setOriginFromArray3(boneOffsetForm, params.position);\n manager.setBasisFromArray3(boneOffsetForm, params.rotation);\n const vector = manager.allocThreeVector3();\n const boneForm = manager.allocTransform();\n manager.setIdentity(boneForm);\n manager.setOriginFromThreeVector3(boneForm, bone.getWorldPosition(vector));\n const form = manager.multiplyTransforms(boneForm, boneOffsetForm);\n const state = new Ammo.btDefaultMotionState(form);\n const info = new Ammo.btRigidBodyConstructionInfo(weight, state, shape, localInertia);\n info.set_m_friction(params.friction);\n info.set_m_restitution(params.restitution);\n const body = new Ammo.btRigidBody(info);\n if (params.type === 0) {\n body.setCollisionFlags(body.getCollisionFlags() | 2);\n body.setActivationState(4);\n }\n body.setDamping(params.positionDamping, params.rotationDamping);\n body.setSleepingThresholds(0, 0);\n this.world.addRigidBody(body, 1 << params.groupIndex, params.groupTarget);\n this.body = body;\n this.bone = bone;\n this.boneOffsetForm = boneOffsetForm;\n this.boneOffsetFormInverse = manager.inverseTransform(boneOffsetForm);\n manager.freeVector3(localInertia);\n manager.freeTransform(form);\n manager.freeTransform(boneForm);\n manager.freeThreeVector3(vector);\n }\n _getBoneTransform() {\n const manager = this.manager;\n const p = manager.allocThreeVector3();\n const q = manager.allocThreeQuaternion();\n const s = manager.allocThreeVector3();\n this.bone.matrixWorld.decompose(p, q, s);\n const tr = manager.allocTransform();\n manager.setOriginFromThreeVector3(tr, p);\n manager.setBasisFromThreeQuaternion(tr, q);\n const form = manager.multiplyTransforms(tr, this.boneOffsetForm);\n manager.freeTransform(tr);\n manager.freeThreeVector3(s);\n manager.freeThreeQuaternion(q);\n manager.freeThreeVector3(p);\n return form;\n }\n _getWorldTransformForBone() {\n const manager = this.manager;\n const tr = this.body.getCenterOfMassTransform();\n return manager.multiplyTransforms(tr, this.boneOffsetFormInverse);\n }\n _setTransformFromBone() {\n const manager = this.manager;\n const form = this._getBoneTransform();\n this.body.setCenterOfMassTransform(form);\n this.body.getMotionState().setWorldTransform(form);\n manager.freeTransform(form);\n }\n _setPositionFromBone() {\n const manager = this.manager;\n const form = this._getBoneTransform();\n const tr = manager.allocTransform();\n this.body.getMotionState().getWorldTransform(tr);\n manager.copyOrigin(tr, form);\n this.body.setCenterOfMassTransform(tr);\n this.body.getMotionState().setWorldTransform(tr);\n manager.freeTransform(tr);\n manager.freeTransform(form);\n }\n _updateBoneRotation() {\n const manager = this.manager;\n const tr = this._getWorldTransformForBone();\n const q = manager.getBasis(tr);\n const thQ = manager.allocThreeQuaternion();\n const thQ2 = manager.allocThreeQuaternion();\n const thQ3 = manager.allocThreeQuaternion();\n thQ.set(q.x(), q.y(), q.z(), q.w());\n thQ2.setFromRotationMatrix(this.bone.matrixWorld);\n thQ2.conjugate();\n thQ2.multiply(thQ);\n thQ3.setFromRotationMatrix(this.bone.matrix);\n this.bone.quaternion.copy(thQ2.multiply(thQ3).normalize());\n manager.freeThreeQuaternion(thQ);\n manager.freeThreeQuaternion(thQ2);\n manager.freeThreeQuaternion(thQ3);\n manager.freeQuaternion(q);\n manager.freeTransform(tr);\n }\n _updateBonePosition() {\n const manager = this.manager;\n const tr = this._getWorldTransformForBone();\n const thV = manager.allocThreeVector3();\n const o = manager.getOrigin(tr);\n thV.set(o.x(), o.y(), o.z());\n if (this.bone.parent) {\n this.bone.parent.worldToLocal(thV);\n }\n this.bone.position.copy(thV);\n manager.freeThreeVector3(thV);\n manager.freeTransform(tr);\n }\n}\nclass Constraint {\n /**\n * @param {THREE.SkinnedMesh} mesh\n * @param {Ammo.btDiscreteDynamicsWorld} world\n * @param {RigidBody} bodyA\n * @param {RigidBody} bodyB\n * @param {Object} params\n * @param {ResourceManager} manager\n */\n constructor(mesh, world, bodyA, bodyB, params, manager) {\n this.mesh = mesh;\n this.world = world;\n this.bodyA = bodyA;\n this.bodyB = bodyB;\n this.params = params;\n this.manager = manager;\n this.constraint = null;\n this._init();\n }\n // private method\n _init() {\n const manager = this.manager;\n const params = this.params;\n const bodyA = this.bodyA;\n const bodyB = this.bodyB;\n const form = manager.allocTransform();\n manager.setIdentity(form);\n manager.setOriginFromArray3(form, params.position);\n manager.setBasisFromArray3(form, params.rotation);\n const formA = manager.allocTransform();\n const formB = manager.allocTransform();\n bodyA.body.getMotionState().getWorldTransform(formA);\n bodyB.body.getMotionState().getWorldTransform(formB);\n const formInverseA = manager.inverseTransform(formA);\n const formInverseB = manager.inverseTransform(formB);\n const formA2 = manager.multiplyTransforms(formInverseA, form);\n const formB2 = manager.multiplyTransforms(formInverseB, form);\n const constraint = new Ammo.btGeneric6DofSpringConstraint(bodyA.body, bodyB.body, formA2, formB2, true);\n const lll = manager.allocVector3();\n const lul = manager.allocVector3();\n const all = manager.allocVector3();\n const aul = manager.allocVector3();\n lll.setValue(params.translationLimitation1[0], params.translationLimitation1[1], params.translationLimitation1[2]);\n lul.setValue(params.translationLimitation2[0], params.translationLimitation2[1], params.translationLimitation2[2]);\n all.setValue(params.rotationLimitation1[0], params.rotationLimitation1[1], params.rotationLimitation1[2]);\n aul.setValue(params.rotationLimitation2[0], params.rotationLimitation2[1], params.rotationLimitation2[2]);\n constraint.setLinearLowerLimit(lll);\n constraint.setLinearUpperLimit(lul);\n constraint.setAngularLowerLimit(all);\n constraint.setAngularUpperLimit(aul);\n for (let i = 0; i < 3; i++) {\n if (params.springPosition[i] !== 0) {\n constraint.enableSpring(i, true);\n constraint.setStiffness(i, params.springPosition[i]);\n }\n }\n for (let i = 0; i < 3; i++) {\n if (params.springRotation[i] !== 0) {\n constraint.enableSpring(i + 3, true);\n constraint.setStiffness(i + 3, params.springRotation[i]);\n }\n }\n if (constraint.setParam !== void 0) {\n for (let i = 0; i < 6; i++) {\n constraint.setParam(2, 0.475, i);\n }\n }\n this.world.addConstraint(constraint, true);\n this.constraint = constraint;\n manager.freeTransform(form);\n manager.freeTransform(formA);\n manager.freeTransform(formB);\n manager.freeTransform(formInverseA);\n manager.freeTransform(formInverseB);\n manager.freeTransform(formA2);\n manager.freeTransform(formB2);\n manager.freeVector3(lll);\n manager.freeVector3(lul);\n manager.freeVector3(all);\n manager.freeVector3(aul);\n }\n}\nconst _position = /* @__PURE__ */ new Vector3();\nconst _quaternion = /* @__PURE__ */ new Quaternion();\nconst _scale = /* @__PURE__ */ new Vector3();\nconst _matrixWorldInv = /* @__PURE__ */ new Matrix4();\nclass MMDPhysicsHelper extends Object3D {\n /**\n * Visualize Rigid bodies\n *\n * @param {THREE.SkinnedMesh} mesh\n * @param {Physics} physics\n */\n constructor(mesh, physics) {\n super();\n this.root = mesh;\n this.physics = physics;\n this.matrix.copy(mesh.matrixWorld);\n this.matrixAutoUpdate = false;\n this.materials = [];\n this.materials.push(\n new MeshBasicMaterial({\n color: new Color(16746632),\n wireframe: true,\n depthTest: false,\n depthWrite: false,\n opacity: 0.25,\n transparent: true\n })\n );\n this.materials.push(\n new MeshBasicMaterial({\n color: new Color(8978312),\n wireframe: true,\n depthTest: false,\n depthWrite: false,\n opacity: 0.25,\n transparent: true\n })\n );\n this.materials.push(\n new MeshBasicMaterial({\n color: new Color(8947967),\n wireframe: true,\n depthTest: false,\n depthWrite: false,\n opacity: 0.25,\n transparent: true\n })\n );\n this._init();\n }\n /**\n * Frees the GPU-related resources allocated by this instance. Call this method whenever this instance is no longer used in your app.\n */\n dispose() {\n const materials = this.materials;\n const children = this.children;\n for (let i = 0; i < materials.length; i++) {\n materials[i].dispose();\n }\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n if (child.isMesh)\n child.geometry.dispose();\n }\n }\n /**\n * Updates Rigid Bodies visualization.\n */\n updateMatrixWorld(force) {\n var mesh = this.root;\n if (this.visible) {\n var bodies = this.physics.bodies;\n _matrixWorldInv.copy(mesh.matrixWorld).decompose(_position, _quaternion, _scale).compose(_position, _quaternion, _scale.set(1, 1, 1)).invert();\n for (var i = 0, il = bodies.length; i < il; i++) {\n var body = bodies[i].body;\n var child = this.children[i];\n var tr = body.getCenterOfMassTransform();\n var origin = tr.getOrigin();\n var rotation = tr.getRotation();\n child.position.set(origin.x(), origin.y(), origin.z()).applyMatrix4(_matrixWorldInv);\n child.quaternion.setFromRotationMatrix(_matrixWorldInv).multiply(_quaternion.set(rotation.x(), rotation.y(), rotation.z(), rotation.w()));\n }\n }\n this.matrix.copy(mesh.matrixWorld).decompose(_position, _quaternion, _scale).compose(_position, _quaternion, _scale.set(1, 1, 1));\n super.updateMatrixWorld(force);\n }\n // private method\n _init() {\n var bodies = this.physics.bodies;\n function createGeometry(param2) {\n switch (param2.shapeType) {\n case 0:\n return new SphereGeometry(param2.width, 16, 8);\n case 1:\n return new BoxGeometry(param2.width * 2, param2.height * 2, param2.depth * 2, 8, 8, 8);\n case 2:\n return new CapsuleGeometry(param2.width, param2.height, 8, 16);\n default:\n return null;\n }\n }\n for (var i = 0, il = bodies.length; i < il; i++) {\n var param = bodies[i].params;\n this.add(new Mesh(createGeometry(param), this.materials[param.type]));\n }\n }\n}\nexport {\n MMDPhysics\n};\n//# sourceMappingURL=MMDPhysics.js.map\n","import { Object3D, Vector3, Quaternion, AnimationMixer } from \"three\";\nimport { CCDIKSolver } from \"./CCDIKSolver.js\";\nimport { MMDPhysics } from \"./MMDPhysics.js\";\nclass MMDAnimationHelper {\n /**\n * @param {Object} params - (optional)\n * @param {boolean} params.sync - Whether animation durations of added objects are synched. Default is true.\n * @param {Number} params.afterglow - Default is 0.0.\n * @param {boolean} params.resetPhysicsOnLoop - Default is true.\n */\n constructor(params = {}) {\n this.meshes = [];\n this.camera = null;\n this.cameraTarget = new Object3D();\n this.cameraTarget.name = \"target\";\n this.audio = null;\n this.audioManager = null;\n this.objects = /* @__PURE__ */ new WeakMap();\n this.configuration = {\n sync: params.sync !== void 0 ? params.sync : true,\n afterglow: params.afterglow !== void 0 ? params.afterglow : 0,\n resetPhysicsOnLoop: params.resetPhysicsOnLoop !== void 0 ? params.resetPhysicsOnLoop : true,\n pmxAnimation: params.pmxAnimation !== void 0 ? params.pmxAnimation : false\n };\n this.enabled = {\n animation: true,\n ik: true,\n grant: true,\n physics: true,\n cameraAnimation: true\n };\n this.onBeforePhysics = function() {\n };\n this.sharedPhysics = false;\n this.masterPhysics = null;\n }\n /**\n * Adds an Three.js Object to helper and setups animation.\n * The anmation durations of added objects are synched\n * if this.configuration.sync is true.\n *\n * @param {THREE.SkinnedMesh|THREE.Camera|THREE.Audio} object\n * @param {Object} params - (optional)\n * @param {THREE.AnimationClip|Array<THREE.AnimationClip>} params.animation - Only for THREE.SkinnedMesh and THREE.Camera. Default is undefined.\n * @param {boolean} params.physics - Only for THREE.SkinnedMesh. Default is true.\n * @param {Integer} params.warmup - Only for THREE.SkinnedMesh and physics is true. Default is 60.\n * @param {Number} params.unitStep - Only for THREE.SkinnedMesh and physics is true. Default is 1 / 65.\n * @param {Integer} params.maxStepNum - Only for THREE.SkinnedMesh and physics is true. Default is 3.\n * @param {Vector3} params.gravity - Only for THREE.SkinnedMesh and physics is true. Default ( 0, - 9.8 * 10, 0 ).\n * @param {Number} params.delayTime - Only for THREE.Audio. Default is 0.0.\n * @return {MMDAnimationHelper}\n */\n add(object, params = {}) {\n if (object.isSkinnedMesh) {\n this._addMesh(object, params);\n } else if (object.isCamera) {\n this._setupCamera(object, params);\n } else if (object.type === \"Audio\") {\n this._setupAudio(object, params);\n } else {\n throw new Error(\n \"THREE.MMDAnimationHelper.add: accepts only THREE.SkinnedMesh or THREE.Camera or THREE.Audio instance.\"\n );\n }\n if (this.configuration.sync)\n this._syncDuration();\n return this;\n }\n /**\n * Removes an Three.js Object from helper.\n *\n * @param {THREE.SkinnedMesh|THREE.Camera|THREE.Audio} object\n * @return {MMDAnimationHelper}\n */\n remove(object) {\n if (object.isSkinnedMesh) {\n this._removeMesh(object);\n } else if (object.isCamera) {\n this._clearCamera(object);\n } else if (object.type === \"Audio\") {\n this._clearAudio(object);\n } else {\n throw new Error(\n \"THREE.MMDAnimationHelper.remove: accepts only THREE.SkinnedMesh or THREE.Camera or THREE.Audio instance.\"\n );\n }\n if (this.configuration.sync)\n this._syncDuration();\n return this;\n }\n /**\n * Updates the animation.\n *\n * @param {Number} delta\n * @return {MMDAnimationHelper}\n */\n update(delta) {\n if (this.audioManager !== null)\n this.audioManager.control(delta);\n for (let i = 0; i < this.meshes.length; i++) {\n this._animateMesh(this.meshes[i], delta);\n }\n if (this.sharedPhysics)\n this._updateSharedPhysics(delta);\n if (this.camera !== null)\n this._animateCamera(this.camera, delta);\n return this;\n }\n /**\n * Changes the pose of SkinnedMesh as VPD specifies.\n *\n * @param {THREE.SkinnedMesh} mesh\n * @param {Object} vpd - VPD content parsed MMDParser\n * @param {Object} params - (optional)\n * @param {boolean} params.resetPose - Default is true.\n * @param {boolean} params.ik - Default is true.\n * @param {boolean} params.grant - Default is true.\n * @return {MMDAnimationHelper}\n */\n pose(mesh, vpd, params = {}) {\n if (params.resetPose !== false)\n mesh.pose();\n const bones = mesh.skeleton.bones;\n const boneParams = vpd.bones;\n const boneNameDictionary = {};\n for (let i = 0, il = bones.length; i < il; i++) {\n boneNameDictionary[bones[i].name] = i;\n }\n const vector = new Vector3();\n const quaternion = new Quaternion();\n for (let i = 0, il = boneParams.length; i < il; i++) {\n const boneParam = boneParams[i];\n const boneIndex = boneNameDictionary[boneParam.name];\n if (boneIndex === void 0)\n continue;\n const bone = bones[boneIndex];\n bone.position.add(vector.fromArray(boneParam.translation));\n bone.quaternion.multiply(quaternion.fromArray(boneParam.quaternion));\n }\n mesh.updateMatrixWorld(true);\n if (this.configuration.pmxAnimation && mesh.geometry.userData.MMD && mesh.geometry.userData.MMD.format === \"pmx\") {\n const sortedBonesData = this._sortBoneDataArray(mesh.geometry.userData.MMD.bones.slice());\n const ikSolver = params.ik !== false ? this._createCCDIKSolver(mesh) : null;\n const grantSolver = params.grant !== false ? this.createGrantSolver(mesh) : null;\n this._animatePMXMesh(mesh, sortedBonesData, ikSolver, grantSolver);\n } else {\n if (params.ik !== false) {\n this._createCCDIKSolver(mesh).update();\n }\n if (params.grant !== false) {\n this.createGrantSolver(mesh).update();\n }\n }\n return this;\n }\n /**\n * Enabes/Disables an animation feature.\n *\n * @param {string} key\n * @param {boolean} enabled\n * @return {MMDAnimationHelper}\n */\n enable(key, enabled) {\n if (this.enabled[key] === void 0) {\n throw new Error(\"THREE.MMDAnimationHelper.enable: unknown key \" + key);\n }\n this.enabled[key] = enabled;\n if (key === \"physics\") {\n for (let i = 0, il = this.meshes.length; i < il; i++) {\n this._optimizeIK(this.meshes[i], enabled);\n }\n }\n return this;\n }\n /**\n * Creates an GrantSolver instance.\n *\n * @param {THREE.SkinnedMesh} mesh\n * @return {GrantSolver}\n */\n createGrantSolver(mesh) {\n return new GrantSolver(mesh, mesh.geometry.userData.MMD.grants);\n }\n // private methods\n _addMesh(mesh, params) {\n if (this.meshes.indexOf(mesh) >= 0) {\n throw new Error(\"THREE.MMDAnimationHelper._addMesh: SkinnedMesh '\" + mesh.name + \"' has already been added.\");\n }\n this.meshes.push(mesh);\n this.objects.set(mesh, { looped: false });\n this._setupMeshAnimation(mesh, params.animation);\n if (params.physics !== false) {\n this._setupMeshPhysics(mesh, params);\n }\n return this;\n }\n _setupCamera(camera, params) {\n if (this.camera === camera) {\n throw new Error(\"THREE.MMDAnimationHelper._setupCamera: Camera '\" + camera.name + \"' has already been set.\");\n }\n if (this.camera)\n this.clearCamera(this.camera);\n this.camera = camera;\n camera.add(this.cameraTarget);\n this.objects.set(camera, {});\n if (params.animation !== void 0) {\n this._setupCameraAnimation(camera, params.animation);\n }\n return this;\n }\n _setupAudio(audio, params) {\n if (this.audio === audio) {\n throw new Error(\"THREE.MMDAnimationHelper._setupAudio: Audio '\" + audio.name + \"' has already been set.\");\n }\n if (this.audio)\n this.clearAudio(this.audio);\n this.audio = audio;\n this.audioManager = new AudioManager(audio, params);\n this.objects.set(this.audioManager, {\n duration: this.audioManager.duration\n });\n return this;\n }\n _removeMesh(mesh) {\n let found = false;\n let writeIndex = 0;\n for (let i = 0, il = this.meshes.length; i < il; i++) {\n if (this.meshes[i] === mesh) {\n this.objects.delete(mesh);\n found = true;\n continue;\n }\n this.meshes[writeIndex++] = this.meshes[i];\n }\n if (!found) {\n throw new Error(\n \"THREE.MMDAnimationHelper._removeMesh: SkinnedMesh '\" + mesh.name + \"' has not been added yet.\"\n );\n }\n this.meshes.length = writeIndex;\n return this;\n }\n _clearCamera(camera) {\n if (camera !== this.camera) {\n throw new Error(\"THREE.MMDAnimationHelper._clearCamera: Camera '\" + camera.name + \"' has not been set yet.\");\n }\n this.camera.remove(this.cameraTarget);\n this.objects.delete(this.camera);\n this.camera = null;\n return this;\n }\n _clearAudio(audio) {\n if (audio !== this.audio) {\n throw new Error(\"THREE.MMDAnimationHelper._clearAudio: Audio '\" + audio.name + \"' has not been set yet.\");\n }\n this.objects.delete(this.audioManager);\n this.audio = null;\n this.audioManager = null;\n return this;\n }\n _setupMeshAnimation(mesh, animation) {\n const objects = this.objects.get(mesh);\n if (animation !== void 0) {\n const animations = Array.isArray(animation) ? animation : [animation];\n objects.mixer = new AnimationMixer(mesh);\n for (let i = 0, il = animations.length; i < il; i++) {\n objects.mixer.clipAction(animations[i]).play();\n }\n objects.mixer.addEventListener(\"loop\", function(event) {\n const tracks = event.action._clip.tracks;\n if (tracks.length > 0 && tracks[0].name.slice(0, 6) !== \".bones\")\n return;\n objects.looped = true;\n });\n }\n objects.ikSolver = this._createCCDIKSolver(mesh);\n objects.grantSolver = this.createGrantSolver(mesh);\n return this;\n }\n _setupCameraAnimation(camera, animation) {\n const animations = Array.isArray(animation) ? animation : [animation];\n const objects = this.objects.get(camera);\n objects.mixer = new AnimationMixer(camera);\n for (let i = 0, il = animations.length; i < il; i++) {\n objects.mixer.clipAction(animations[i]).play();\n }\n }\n _setupMeshPhysics(mesh, params) {\n const objects = this.objects.get(mesh);\n if (params.world === void 0 && this.sharedPhysics) {\n const masterPhysics = this._getMasterPhysics();\n if (masterPhysics !== null)\n world = masterPhysics.world;\n }\n objects.physics = this._createMMDPhysics(mesh, params);\n if (objects.mixer && params.animationWarmup !== false) {\n this._animateMesh(mesh, 0);\n objects.physics.reset();\n }\n objects.physics.warmup(params.warmup !== void 0 ? params.warmup : 60);\n this._optimizeIK(mesh, true);\n }\n _animateMesh(mesh, delta) {\n const objects = this.objects.get(mesh);\n const mixer = objects.mixer;\n const ikSolver = objects.ikSolver;\n const grantSolver = objects.grantSolver;\n const physics = objects.physics;\n const looped = objects.looped;\n if (mixer && this.enabled.animation) {\n this._restoreBones(mesh);\n mixer.update(delta);\n this._saveBones(mesh);\n if (this.configuration.pmxAnimation && mesh.geometry.userData.MMD && mesh.geometry.userData.MMD.format === \"pmx\") {\n if (!objects.sortedBonesData)\n objects.sortedBonesData = this._sortBoneDataArray(mesh.geometry.userData.MMD.bones.slice());\n this._animatePMXMesh(\n mesh,\n objects.sortedBonesData,\n ikSolver && this.enabled.ik ? ikSolver : null,\n grantSolver && this.enabled.grant ? grantSolver : null\n );\n } else {\n if (ikSolver && this.enabled.ik) {\n mesh.updateMatrixWorld(true);\n ikSolver.update();\n }\n if (grantSolver && this.enabled.grant) {\n grantSolver.update();\n }\n }\n }\n if (looped === true && this.enabled.physics) {\n if (physics && this.configuration.resetPhysicsOnLoop)\n physics.reset();\n objects.looped = false;\n }\n if (physics && this.enabled.physics && !this.sharedPhysics) {\n this.onBeforePhysics(mesh);\n physics.update(delta);\n }\n }\n // Sort bones in order by 1. transformationClass and 2. bone index.\n // In PMX animation system, bone transformations should be processed\n // in this order.\n _sortBoneDataArray(boneDataArray) {\n return boneDataArray.sort(function(a, b) {\n if (a.transformationClass !== b.transformationClass) {\n return a.transformationClass - b.transformationClass;\n } else {\n return a.index - b.index;\n }\n });\n }\n // PMX Animation system is a bit too complex and doesn't great match to\n // Three.js Animation system. This method attempts to simulate it as much as\n // possible but doesn't perfectly simulate.\n // This method is more costly than the regular one so\n // you are recommended to set constructor parameter \"pmxAnimation: true\"\n // only if your PMX model animation doesn't work well.\n // If you need better method you would be required to write your own.\n _animatePMXMesh(mesh, sortedBonesData, ikSolver, grantSolver) {\n _quaternionIndex = 0;\n _grantResultMap.clear();\n for (let i = 0, il = sortedBonesData.length; i < il; i++) {\n updateOne(mesh, sortedBonesData[i].index, ikSolver, grantSolver);\n }\n mesh.updateMatrixWorld(true);\n return this;\n }\n _animateCamera(camera, delta) {\n const mixer = this.objects.get(camera).mixer;\n if (mixer && this.enabled.cameraAnimation) {\n mixer.update(delta);\n camera.updateProjectionMatrix();\n camera.up.set(0, 1, 0);\n camera.up.applyQuaternion(camera.quaternion);\n camera.lookAt(this.cameraTarget.position);\n }\n }\n _optimizeIK(mesh, physicsEnabled) {\n const iks = mesh.geometry.userData.MMD.iks;\n const bones = mesh.geometry.userData.MMD.bones;\n for (let i = 0, il = iks.length; i < il; i++) {\n const ik = iks[i];\n const links = ik.links;\n for (let j = 0, jl = links.length; j < jl; j++) {\n const link = links[j];\n if (physicsEnabled === true) {\n link.enabled = bones[link.index].rigidBodyType > 0 ? false : true;\n } else {\n link.enabled = true;\n }\n }\n }\n }\n _createCCDIKSolver(mesh) {\n if (CCDIKSolver === void 0) {\n throw new Error(\"THREE.MMDAnimationHelper: Import CCDIKSolver.\");\n }\n return new CCDIKSolver(mesh, mesh.geometry.userData.MMD.iks);\n }\n _createMMDPhysics(mesh, params) {\n if (MMDPhysics === void 0) {\n throw new Error(\"THREE.MMDPhysics: Import MMDPhysics.\");\n }\n return new MMDPhysics(mesh, mesh.geometry.userData.MMD.rigidBodies, mesh.geometry.userData.MMD.constraints, params);\n }\n /*\n * Detects the longest duration and then sets it to them to sync.\n * TODO: Not to access private properties ( ._actions and ._clip )\n */\n _syncDuration() {\n let max = 0;\n const objects = this.objects;\n const meshes = this.meshes;\n const camera = this.camera;\n const audioManager = this.audioManager;\n for (let i = 0, il = meshes.length; i < il; i++) {\n const mixer = this.objects.get(meshes[i]).mixer;\n if (mixer === void 0)\n continue;\n for (let j = 0; j < mixer._actions.length; j++) {\n const clip = mixer._actions[j]._clip;\n if (!objects.has(clip)) {\n objects.set(clip, {\n duration: clip.duration\n });\n }\n max = Math.max(max, objects.get(clip).duration);\n }\n }\n if (camera !== null) {\n const mixer = this.objects.get(camera).mixer;\n if (mixer !== void 0) {\n for (let i = 0, il = mixer._actions.length; i < il; i++) {\n const clip = mixer._actions[i]._clip;\n if (!objects.has(clip)) {\n objects.set(clip, {\n duration: clip.duration\n });\n }\n max = Math.max(max, objects.get(clip).duration);\n }\n }\n }\n if (audioManager !== null) {\n max = Math.max(max, objects.get(audioManager).duration);\n }\n max += this.configuration.afterglow;\n for (let i = 0, il = this.meshes.length; i < il; i++) {\n const mixer = this.objects.get(this.meshes[i]).mixer;\n if (mixer === void 0)\n continue;\n for (let j = 0, jl = mixer._actions.length; j < jl; j++) {\n mixer._actions[j]._clip.duration = max;\n }\n }\n if (camera !== null) {\n const mixer = this.objects.get(camera).mixer;\n if (mixer !== void 0) {\n for (let i = 0, il = mixer._actions.length; i < il; i++) {\n mixer._actions[i]._clip.duration = max;\n }\n }\n }\n if (audioManager !== null) {\n audioManager.duration = max;\n }\n }\n // workaround\n _updatePropertyMixersBuffer(mesh) {\n const mixer = this.objects.get(mesh).mixer;\n const propertyMixers = mixer._bindings;\n const accuIndex = mixer._accuIndex;\n for (let i = 0, il = propertyMixers.length; i < il; i++) {\n const propertyMixer = propertyMixers[i];\n const buffer = propertyMixer.buffer;\n const stride = propertyMixer.valueSize;\n const offset = (accuIndex + 1) * stride;\n propertyMixer.binding.getValue(buffer, offset);\n }\n }\n /*\n * Avoiding these two issues by restore/save bones before/after mixer animation.\n *\n * 1. PropertyMixer used by AnimationMixer holds cache value in .buffer.\n * Calculating IK, Grant, and Physics after mixer animation can break\n * the cache coherency.\n *\n * 2. Applying Grant two or more times without reset the posing breaks model.\n */\n _saveBones(mesh) {\n const objects = this.objects.get(mesh);\n const bones = mesh.skeleton.bones;\n let backupBones = objects.backupBones;\n if (backupBones === void 0) {\n backupBones = new Float32Array(bones.length * 7);\n objects.backupBones = backupBones;\n }\n for (let i = 0, il = bones.length; i < il; i++) {\n const bone = bones[i];\n bone.position.toArray(backupBones, i * 7);\n bone.quaternion.toArray(backupBones, i * 7 + 3);\n }\n }\n _restoreBones(mesh) {\n const objects = this.objects.get(mesh);\n const backupBones = objects.backupBones;\n if (backupBones === void 0)\n return;\n const bones = mesh.skeleton.bones;\n for (let i = 0, il = bones.length; i < il; i++) {\n const bone = bones[i];\n bone.position.fromArray(backupBones, i * 7);\n bone.quaternion.fromArray(backupBones, i * 7 + 3);\n }\n }\n // experimental\n _getMasterPhysics() {\n if (this.masterPhysics !== null)\n return this.masterPhysics;\n for (let i = 0, il = this.meshes.length; i < il; i++) {\n const physics = this.meshes[i].physics;\n if (physics !== void 0 && physics !== null) {\n this.masterPhysics = physics;\n return this.masterPhysics;\n }\n }\n return null;\n }\n _updateSharedPhysics(delta) {\n if (this.meshes.length === 0 || !this.enabled.physics || !this.sharedPhysics)\n return;\n const physics = this._getMasterPhysics();\n if (physics === null)\n return;\n for (let i = 0, il = this.meshes.length; i < il; i++) {\n const p = this.meshes[i].physics;\n if (p !== null && p !== void 0) {\n p.updateRigidBodies();\n }\n }\n physics.stepSimulation(delta);\n for (let i = 0, il = this.meshes.length; i < il; i++) {\n const p = this.meshes[i].physics;\n if (p !== null && p !== void 0) {\n p.updateBones();\n }\n }\n }\n}\nconst _quaternions = [];\nlet _quaternionIndex = 0;\nfunction getQuaternion() {\n if (_quaternionIndex >= _quaternions.length) {\n _quaternions.push(new Quaternion());\n }\n return _quaternions[_quaternionIndex++];\n}\nconst _grantResultMap = /* @__PURE__ */ new Map();\nfunction updateOne(mesh, boneIndex, ikSolver, grantSolver) {\n const bones = mesh.skeleton.bones;\n const bonesData = mesh.geometry.userData.MMD.bones;\n const boneData = bonesData[boneIndex];\n const bone = bones[boneIndex];\n if (_grantResultMap.has(boneIndex))\n return;\n const quaternion = getQuaternion();\n _grantResultMap.set(boneIndex, quaternion.copy(bone.quaternion));\n if (grantSolver && boneData.grant && !boneData.grant.isLocal && boneData.grant.affectRotation) {\n const parentIndex = boneData.grant.parentIndex;\n const ratio = boneData.grant.ratio;\n if (!_grantResultMap.has(parentIndex)) {\n updateOne(mesh, parentIndex, ikSolver, grantSolver);\n }\n grantSolver.addGrantRotation(bone, _grantResultMap.get(parentIndex), ratio);\n }\n if (ikSolver && boneData.ik) {\n mesh.updateMatrixWorld(true);\n ikSolver.updateOne(boneData.ik);\n const links = boneData.ik.links;\n for (let i = 0, il = links.length; i < il; i++) {\n const link = links[i];\n if (link.enabled === false)\n continue;\n const linkIndex = link.index;\n if (_grantResultMap.has(linkIndex)) {\n _grantResultMap.set(linkIndex, _grantResultMap.get(linkIndex).copy(bones[linkIndex].quaternion));\n }\n }\n }\n quaternion.copy(bone.quaternion);\n}\nclass AudioManager {\n /**\n * @param {THREE.Audio} audio\n * @param {Object} params - (optional)\n * @param {Nuumber} params.delayTime\n */\n constructor(audio, params = {}) {\n this.audio = audio;\n this.elapsedTime = 0;\n this.currentTime = 0;\n this.delayTime = params.delayTime !== void 0 ? params.delayTime : 0;\n this.audioDuration = this.audio.buffer.duration;\n this.duration = this.audioDuration + this.delayTime;\n }\n /**\n * @param {Number} delta\n * @return {AudioManager}\n */\n control(delta) {\n this.elapsed += delta;\n this.currentTime += delta;\n if (this._shouldStopAudio())\n this.audio.stop();\n if (this._shouldStartAudio())\n this.audio.play();\n return this;\n }\n // private methods\n _shouldStartAudio() {\n if (this.audio.isPlaying)\n return false;\n while (this.currentTime >= this.duration) {\n this.currentTime -= this.duration;\n }\n if (this.currentTime < this.delayTime)\n return false;\n if (this.currentTime - this.delayTime > this.audioDuration)\n return false;\n return true;\n }\n _shouldStopAudio() {\n return this.audio.isPlaying && this.currentTime >= this.duration;\n }\n}\nconst _q = /* @__PURE__ */ new Quaternion();\nclass GrantSolver {\n constructor(mesh, grants = []) {\n this.mesh = mesh;\n this.grants = grants;\n }\n /**\n * Solve all the grant bones\n * @return {GrantSolver}\n */\n update() {\n const grants = this.grants;\n for (let i = 0, il = grants.length; i < il; i++) {\n this.updateOne(grants[i]);\n }\n return this;\n }\n /**\n * Solve a grant bone\n * @param {Object} grant - grant parameter\n * @return {GrantSolver}\n */\n updateOne(grant) {\n const bones = this.mesh.skeleton.bones;\n const bone = bones[grant.index];\n const parentBone = bones[grant.parentIndex];\n if (grant.isLocal) {\n if (grant.affectPosition)\n ;\n if (grant.affectRotation)\n ;\n } else {\n if (grant.affectPosition)\n ;\n if (grant.affectRotation) {\n this.addGrantRotation(bone, parentBone.quaternion, grant.ratio);\n }\n }\n return this;\n }\n addGrantRotation(bone, q, ratio) {\n _q.set(0, 0, 0, 1);\n _q.slerp(q, ratio);\n bone.quaternion.multiply(_q);\n return this;\n }\n}\nexport {\n MMDAnimationHelper\n};\n//# sourceMappingURL=MMDAnimationHelper.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Mesh, BufferGeometry, MathUtils, DataTexture, RGBAFormat, FloatType, BufferAttribute, Matrix4 } from \"three\";\nconst ID_ATTR_NAME = \"_batch_id_\";\nconst _identityMatrix = /* @__PURE__ */ new Matrix4();\nconst _zeroScaleMatrix = /* @__PURE__ */ (() => new Matrix4().set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1))();\nconst batchingParsVertex = (\n /* glsl */\n `\n#ifdef BATCHING\n\tattribute float ${ID_ATTR_NAME};\n\tuniform highp sampler2D batchingTexture;\n\tmat4 getBatchingMatrix( const in float i ) {\n\n\t\tint size = textureSize( batchingTexture, 0 ).x;\n\t\tint j = int( i ) * 4;\n\t\tint x = j % size;\n\t\tint y = j / size;\n\t\tvec4 v1 = texelFetch( batchingTexture, ivec2( x, y ), 0 );\n\t\tvec4 v2 = texelFetch( batchingTexture, ivec2( x + 1, y ), 0 );\n\t\tvec4 v3 = texelFetch( batchingTexture, ivec2( x + 2, y ), 0 );\n\t\tvec4 v4 = texelFetch( batchingTexture, ivec2( x + 3, y ), 0 );\n\t\treturn mat4( v1, v2, v3, v4 );\n\n\t}\n#endif\n`\n);\nconst batchingbaseVertex = (\n /* glsl */\n `\n#ifdef BATCHING\n\tmat4 batchingMatrix = getBatchingMatrix( ${ID_ATTR_NAME} );\n#endif\n`\n);\nconst batchingnormalVertex = (\n /* glsl */\n `\n#ifdef BATCHING\n\tobjectNormal = vec4( batchingMatrix * vec4( objectNormal, 0.0 ) ).xyz;\n\t#ifdef USE_TANGENT\n\t\tobjectTangent = vec4( batchingMatrix * vec4( objectTangent, 0.0 ) ).xyz;\n\t#endif\n#endif\n`\n);\nconst batchingVertex = (\n /* glsl */\n `\n#ifdef BATCHING\n\ttransformed = ( batchingMatrix * vec4( transformed, 1.0 ) ).xyz;\n#endif\n`\n);\nfunction copyAttributeData(src, target, targetOffset = 0) {\n const itemSize = target.itemSize;\n if (src.isInterleavedBufferAttribute || src.array.constructor !== target.array.constructor) {\n const vertexCount = src.count;\n for (let i = 0; i < vertexCount; i++) {\n for (let c = 0; c < itemSize; c++) {\n target.setComponent(i + targetOffset, c, src.getComponent(i, c));\n }\n }\n } else {\n target.array.set(src.array, targetOffset * itemSize);\n }\n target.needsUpdate = true;\n}\nclass BatchedMesh extends Mesh {\n constructor(maxGeometryCount, maxVertexCount, maxIndexCount = maxVertexCount * 2, material) {\n super(new BufferGeometry(), material);\n __publicField(this, \"_vertexStarts\");\n __publicField(this, \"_vertexCounts\");\n __publicField(this, \"_indexStarts\");\n __publicField(this, \"_indexCounts\");\n __publicField(this, \"_reservedRanges\");\n __publicField(this, \"_visible\");\n __publicField(this, \"_active\");\n __publicField(this, \"_maxGeometryCount\");\n __publicField(this, \"_maxVertexCount\");\n __publicField(this, \"_maxIndexCount\");\n __publicField(this, \"_geometryInitialized\");\n __publicField(this, \"_geometryCount\");\n __publicField(this, \"_matrices\");\n __publicField(this, \"_matricesTexture\");\n __publicField(this, \"_customUniforms\");\n this._vertexStarts = [];\n this._vertexCounts = [];\n this._indexStarts = [];\n this._indexCounts = [];\n this._reservedRanges = [];\n this._visible = [];\n this._active = [];\n this._maxGeometryCount = maxGeometryCount;\n this._maxVertexCount = maxVertexCount;\n this._maxIndexCount = maxIndexCount;\n this._geometryInitialized = false;\n this._geometryCount = 0;\n this._matrices = [];\n this._matricesTexture = null;\n this.frustumCulled = false;\n this._customUniforms = {\n batchingTexture: { value: null }\n };\n this._initMatricesTexture();\n this._initShader();\n this.onBeforeRender = function() {\n if (this.material.defines) {\n this.material.defines.BATCHING = true;\n }\n };\n this.onAfterRender = function() {\n if (this.material.defines) {\n this.material.defines.BATCHING = false;\n }\n };\n }\n _initMatricesTexture() {\n let size = Math.sqrt(this._maxGeometryCount * 4);\n size = MathUtils.ceilPowerOfTwo(size);\n size = Math.max(size, 4);\n const matricesArray = new Float32Array(size * size * 4);\n const matricesTexture = new DataTexture(matricesArray, size, size, RGBAFormat, FloatType);\n this._matricesTexture = matricesTexture;\n this._customUniforms.batchingTexture.value = this._matricesTexture;\n }\n _initShader() {\n const material = this.material;\n const currentOnBeforeCompile = material.onBeforeCompile;\n const customUniforms = this._customUniforms;\n material.onBeforeCompile = function onBeforeCompile(parameters, renderer) {\n parameters.vertexShader = parameters.vertexShader.replace(\"#include <skinning_pars_vertex>\", \"#include <skinning_pars_vertex>\\n\" + batchingParsVertex).replace(\"#include <uv_vertex>\", \"#include <uv_vertex>\\n\" + batchingbaseVertex).replace(\"#include <skinnormal_vertex>\", \"#include <skinnormal_vertex>\\n\" + batchingnormalVertex).replace(\"#include <skinning_vertex>\", \"#include <skinning_vertex>\\n\" + batchingVertex);\n for (const uniformName in customUniforms) {\n parameters.uniforms[uniformName] = customUniforms[uniformName];\n }\n currentOnBeforeCompile.call(this, parameters, renderer);\n };\n material.defines = material.defines || {};\n material.defines.BATCHING = false;\n }\n _initializeGeometry(reference) {\n const geometry = this.geometry;\n const maxVertexCount = this._maxVertexCount;\n const maxGeometryCount = this._maxGeometryCount;\n const maxIndexCount = this._maxIndexCount;\n if (this._geometryInitialized === false) {\n for (const attributeName in reference.attributes) {\n const srcAttribute = reference.getAttribute(attributeName);\n const { array, itemSize, normalized } = srcAttribute;\n const dstArray = new array.constructor(maxVertexCount * itemSize);\n const dstAttribute = new srcAttribute.constructor(dstArray, itemSize, normalized);\n dstAttribute.setUsage(srcAttribute.usage);\n geometry.setAttribute(attributeName, dstAttribute);\n }\n if (reference.getIndex() !== null) {\n const indexArray = maxVertexCount > 65536 ? new Uint32Array(maxIndexCount) : new Uint16Array(maxIndexCount);\n geometry.setIndex(new BufferAttribute(indexArray, 1));\n }\n const idArray = maxGeometryCount > 65536 ? new Uint32Array(maxVertexCount) : new Uint16Array(maxVertexCount);\n geometry.setAttribute(ID_ATTR_NAME, new BufferAttribute(idArray, 1));\n this._geometryInitialized = true;\n }\n }\n // Make sure the geometry is compatible with the existing combined geometry atributes\n _validateGeometry(geometry) {\n if (geometry.getAttribute(ID_ATTR_NAME)) {\n throw new Error(`BatchedMesh: Geometry cannot use attribute \"${ID_ATTR_NAME}\"`);\n }\n const batchGeometry = this.geometry;\n if (Boolean(geometry.getIndex()) !== Boolean(batchGeometry.getIndex())) {\n throw new Error('BatchedMesh: All geometries must consistently have \"index\".');\n }\n for (const attributeName in batchGeometry.attributes) {\n if (attributeName === ID_ATTR_NAME) {\n continue;\n }\n if (!geometry.hasAttribute(attributeName)) {\n throw new Error(\n `BatchedMesh: Added geometry missing \"${attributeName}\". All geometries must have consistent attributes.`\n );\n }\n const srcAttribute = geometry.getAttribute(attributeName);\n const dstAttribute = batchGeometry.getAttribute(attributeName);\n if (srcAttribute.itemSize !== dstAttribute.itemSize || srcAttribute.normalized !== dstAttribute.normalized) {\n throw new Error(\"BatchedMesh: All attributes must have a consistent itemSize and normalized value.\");\n }\n }\n }\n getGeometryCount() {\n return this._geometryCount;\n }\n getVertexCount() {\n const reservedRanges = this._reservedRanges;\n if (reservedRanges.length === 0) {\n return 0;\n } else {\n const finalRange = reservedRanges[reservedRanges.length - 1];\n return finalRange.vertexStart + finalRange.vertexCount;\n }\n }\n getIndexCount() {\n const reservedRanges = this._reservedRanges;\n const geometry = this.geometry;\n if (geometry.getIndex() === null || reservedRanges.length === 0) {\n return 0;\n } else {\n const finalRange = reservedRanges[reservedRanges.length - 1];\n return finalRange.indexStart + finalRange.indexCount;\n }\n }\n addGeometry(geometry, vertexCount = -1, indexCount = -1) {\n this._initializeGeometry(geometry);\n this._validateGeometry(geometry);\n if (this._geometryCount >= this._maxGeometryCount) {\n throw new Error(\"BatchedMesh: Maximum geometry count reached.\");\n }\n const range = {\n vertexStart: -1,\n vertexCount: -1,\n indexStart: -1,\n indexCount: -1\n };\n let lastRange = null;\n const reservedRanges = this._reservedRanges;\n if (this._geometryCount !== 0) {\n lastRange = reservedRanges[reservedRanges.length - 1];\n }\n if (vertexCount === -1) {\n range.vertexCount = geometry.getAttribute(\"position\").count;\n } else {\n range.vertexCount = vertexCount;\n }\n if (lastRange === null) {\n range.vertexStart = 0;\n } else {\n range.vertexStart = lastRange.vertexStart + lastRange.vertexCount;\n }\n if (geometry.getIndex() !== null) {\n if (indexCount === -1) {\n range.indexCount = geometry.getIndex().count;\n } else {\n range.indexCount = indexCount;\n }\n if (lastRange === null) {\n range.indexStart = 0;\n } else {\n range.indexStart = lastRange.indexStart + lastRange.indexCount;\n }\n }\n if (range.indexStart !== -1 && range.indexStart + range.indexCount > this._maxIndexCount || range.vertexStart + range.vertexCount > this._maxVertexCount) {\n throw new Error(\"BatchedMesh: Reserved space request exceeds the maximum buffer size.\");\n }\n const indexCounts = this._indexCounts;\n const indexStarts = this._indexStarts;\n const vertexCounts = this._vertexCounts;\n const vertexStarts = this._vertexStarts;\n const visible = this._visible;\n const active = this._active;\n const matricesTexture = this._matricesTexture;\n const matrices = this._matrices;\n const matricesArray = this._matricesTexture.image.data;\n visible.push(true);\n active.push(true);\n const geometryId = this._geometryCount;\n this._geometryCount++;\n matrices.push(new Matrix4());\n _identityMatrix.toArray(matricesArray, geometryId * 16);\n matricesTexture.needsUpdate = true;\n reservedRanges.push(range);\n vertexStarts.push(range.vertexStart);\n vertexCounts.push(range.vertexCount);\n if (geometry.getIndex() !== null) {\n indexStarts.push(range.indexCount);\n indexCounts.push(range.indexCount);\n }\n const idAttribute = this.geometry.getAttribute(ID_ATTR_NAME);\n for (let i = 0; i < range.vertexCount; i++) {\n idAttribute.setX(range.vertexStart + i, geometryId);\n }\n idAttribute.needsUpdate = true;\n this.setGeometryAt(geometryId, geometry);\n return geometryId;\n }\n /**\n * @deprecated use `addGeometry` instead.\n */\n applyGeometry(geometry) {\n return this.addGeometry(geometry);\n }\n setGeometryAt(id, geometry) {\n if (id >= this._geometryCount) {\n throw new Error(\"BatchedMesh: Maximum geometry count reached.\");\n }\n this._validateGeometry(geometry);\n const range = this._reservedRanges[id];\n if (geometry.getIndex() !== null && geometry.getIndex().count > range.indexCount || geometry.attributes.position.count > range.vertexCount) {\n throw new Error(\"BatchedMesh: Reserved space not large enough for provided geometry.\");\n }\n const batchGeometry = this.geometry;\n const srcPositionAttribute = geometry.getAttribute(\"position\");\n const hasIndex = batchGeometry.getIndex() !== null;\n const dstIndex = batchGeometry.getIndex();\n const srcIndex = geometry.getIndex();\n const vertexStart = range.vertexStart;\n const vertexCount = range.vertexCount;\n for (const attributeName in batchGeometry.attributes) {\n if (attributeName === ID_ATTR_NAME) {\n continue;\n }\n const srcAttribute = geometry.getAttribute(attributeName);\n const dstAttribute = batchGeometry.getAttribute(attributeName);\n copyAttributeData(srcAttribute, dstAttribute, vertexStart);\n const itemSize = srcAttribute.itemSize;\n for (let i = srcAttribute.count, l = vertexCount; i < l; i++) {\n const index = vertexStart + i;\n for (let c = 0; c < itemSize; c++) {\n dstAttribute.setComponent(index, c, 0);\n }\n }\n dstAttribute.needsUpdate = true;\n }\n this._vertexCounts[id] = srcPositionAttribute.count;\n if (hasIndex) {\n const indexStart = range.indexStart;\n for (let i = 0; i < srcIndex.count; i++) {\n dstIndex.setX(indexStart + i, vertexStart + srcIndex.getX(i));\n }\n for (let i = srcIndex.count, l = range.indexCount; i < l; i++) {\n dstIndex.setX(indexStart + i, vertexStart);\n }\n dstIndex.needsUpdate = true;\n this._indexCounts[id] = srcIndex.count;\n }\n return id;\n }\n deleteGeometry(geometryId) {\n const active = this._active;\n const matricesTexture = this._matricesTexture;\n const matricesArray = matricesTexture.image.data;\n if (geometryId >= active.length || active[geometryId] === false) {\n return this;\n }\n active[geometryId] = false;\n _zeroScaleMatrix.toArray(matricesArray, geometryId * 16);\n matricesTexture.needsUpdate = true;\n return this;\n }\n optimize() {\n throw new Error(\"BatchedMesh: Optimize function not implemented.\");\n }\n setMatrixAt(geometryId, matrix) {\n const visible = this._visible;\n const active = this._active;\n const matricesTexture = this._matricesTexture;\n const matrices = this._matrices;\n const matricesArray = matricesTexture.image.data;\n if (geometryId >= matrices.length || active[geometryId] === false) {\n return this;\n }\n if (visible[geometryId] === true) {\n matrix.toArray(matricesArray, geometryId * 16);\n matricesTexture.needsUpdate = true;\n }\n matrices[geometryId].copy(matrix);\n return this;\n }\n getMatrixAt(geometryId, matrix) {\n const matrices = this._matrices;\n const active = this._active;\n if (geometryId >= matrices.length || active[geometryId] === false) {\n return matrix;\n }\n return matrix.copy(matrices[geometryId]);\n }\n setVisibleAt(geometryId, value) {\n const visible = this._visible;\n const active = this._active;\n const matricesTexture = this._matricesTexture;\n const matrices = this._matrices;\n const matricesArray = matricesTexture.image.data;\n if (geometryId >= visible.length || active[geometryId] === false || visible[geometryId] === value) {\n return this;\n }\n if (value === true) {\n matrices[geometryId].toArray(matricesArray, geometryId * 16);\n } else {\n _zeroScaleMatrix.toArray(matricesArray, geometryId * 16);\n }\n matricesTexture.needsUpdate = true;\n visible[geometryId] = value;\n return this;\n }\n getVisibleAt(geometryId) {\n const visible = this._visible;\n const active = this._active;\n if (geometryId >= visible.length || active[geometryId] === false) {\n return false;\n }\n return visible[geometryId];\n }\n raycast() {\n console.warn(\"BatchedMesh: Raycast function not implemented.\");\n }\n copy() {\n throw new Error(\"BatchedMesh: Copy function not implemented.\");\n }\n toJSON() {\n throw new Error(\"BatchedMesh: toJSON function not implemented.\");\n }\n dispose() {\n this.geometry.dispose();\n this._matricesTexture.dispose();\n this._matricesTexture = null;\n return this;\n }\n}\nexport {\n BatchedMesh\n};\n//# sourceMappingURL=BatchedMesh.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Mesh, PerspectiveCamera, Color, Plane, Vector3, Matrix4, Vector4, WebGLRenderTarget, HalfFloatType, ShaderMaterial, UniformsUtils, NoToneMapping } from \"three\";\nimport { version } from \"../_polyfill/constants.js\";\nconst Reflector = /* @__PURE__ */ (() => {\n const _Reflector = class extends Mesh {\n constructor(geometry, options = {}) {\n super(geometry);\n this.isReflector = true;\n this.type = \"Reflector\";\n this.camera = new PerspectiveCamera();\n const scope = this;\n const color = options.color !== void 0 ? new Color(options.color) : new Color(8355711);\n const textureWidth = options.textureWidth || 512;\n const textureHeight = options.textureHeight || 512;\n const clipBias = options.clipBias || 0;\n const shader = options.shader || _Reflector.ReflectorShader;\n const multisample = options.multisample !== void 0 ? options.multisample : 4;\n const reflectorPlane = new Plane();\n const normal = new Vector3();\n const reflectorWorldPosition = new Vector3();\n const cameraWorldPosition = new Vector3();\n const rotationMatrix = new Matrix4();\n const lookAtPosition = new Vector3(0, 0, -1);\n const clipPlane = new Vector4();\n const view = new Vector3();\n const target = new Vector3();\n const q = new Vector4();\n const textureMatrix = new Matrix4();\n const virtualCamera = this.camera;\n const renderTarget = new WebGLRenderTarget(textureWidth, textureHeight, {\n samples: multisample,\n type: HalfFloatType\n });\n const material = new ShaderMaterial({\n uniforms: UniformsUtils.clone(shader.uniforms),\n fragmentShader: shader.fragmentShader,\n vertexShader: shader.vertexShader\n });\n material.uniforms[\"tDiffuse\"].value = renderTarget.texture;\n material.uniforms[\"color\"].value = color;\n material.uniforms[\"textureMatrix\"].value = textureMatrix;\n this.material = material;\n this.onBeforeRender = function(renderer, scene, camera) {\n reflectorWorldPosition.setFromMatrixPosition(scope.matrixWorld);\n cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);\n rotationMatrix.extractRotation(scope.matrixWorld);\n normal.set(0, 0, 1);\n normal.applyMatrix4(rotationMatrix);\n view.subVectors(reflectorWorldPosition, cameraWorldPosition);\n if (view.dot(normal) > 0)\n return;\n view.reflect(normal).negate();\n view.add(reflectorWorldPosition);\n rotationMatrix.extractRotation(camera.matrixWorld);\n lookAtPosition.set(0, 0, -1);\n lookAtPosition.applyMatrix4(rotationMatrix);\n lookAtPosition.add(cameraWorldPosition);\n target.subVectors(reflectorWorldPosition, lookAtPosition);\n target.reflect(normal).negate();\n target.add(reflectorWorldPosition);\n virtualCamera.position.copy(view);\n virtualCamera.up.set(0, 1, 0);\n virtualCamera.up.applyMatrix4(rotationMatrix);\n virtualCamera.up.reflect(normal);\n virtualCamera.lookAt(target);\n virtualCamera.far = camera.far;\n virtualCamera.updateMatrixWorld();\n virtualCamera.projectionMatrix.copy(camera.projectionMatrix);\n textureMatrix.set(0.5, 0, 0, 0.5, 0, 0.5, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0, 1);\n textureMatrix.multiply(virtualCamera.projectionMatrix);\n textureMatrix.multiply(virtualCamera.matrixWorldInverse);\n textureMatrix.multiply(scope.matrixWorld);\n reflectorPlane.setFromNormalAndCoplanarPoint(normal, reflectorWorldPosition);\n reflectorPlane.applyMatrix4(virtualCamera.matrixWorldInverse);\n clipPlane.set(\n reflectorPlane.normal.x,\n reflectorPlane.normal.y,\n reflectorPlane.normal.z,\n reflectorPlane.constant\n );\n const projectionMatrix = virtualCamera.projectionMatrix;\n q.x = (Math.sign(clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0];\n q.y = (Math.sign(clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5];\n q.z = -1;\n q.w = (1 + projectionMatrix.elements[10]) / projectionMatrix.elements[14];\n clipPlane.multiplyScalar(2 / clipPlane.dot(q));\n projectionMatrix.elements[2] = clipPlane.x;\n projectionMatrix.elements[6] = clipPlane.y;\n projectionMatrix.elements[10] = clipPlane.z + 1 - clipBias;\n projectionMatrix.elements[14] = clipPlane.w;\n scope.visible = false;\n const currentRenderTarget = renderer.getRenderTarget();\n const currentXrEnabled = renderer.xr.enabled;\n const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;\n const currentToneMapping = renderer.toneMapping;\n let isSRGB = false;\n if (\"outputColorSpace\" in renderer)\n isSRGB = renderer.outputColorSpace === \"srgb\";\n else\n isSRGB = renderer.outputEncoding === 3001;\n renderer.xr.enabled = false;\n renderer.shadowMap.autoUpdate = false;\n if (\"outputColorSpace\" in renderer)\n renderer.outputColorSpace = \"srgb-linear\";\n else\n renderer.outputEncoding = 3e3;\n renderer.toneMapping = NoToneMapping;\n renderer.setRenderTarget(renderTarget);\n renderer.state.buffers.depth.setMask(true);\n if (renderer.autoClear === false)\n renderer.clear();\n renderer.render(scene, virtualCamera);\n renderer.xr.enabled = currentXrEnabled;\n renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;\n renderer.toneMapping = currentToneMapping;\n if (\"outputColorSpace\" in renderer)\n renderer.outputColorSpace = isSRGB ? \"srgb\" : \"srgb-linear\";\n else\n renderer.outputEncoding = isSRGB ? 3001 : 3e3;\n renderer.setRenderTarget(currentRenderTarget);\n const viewport = camera.viewport;\n if (viewport !== void 0) {\n renderer.state.viewport(viewport);\n }\n scope.visible = true;\n };\n this.getRenderTarget = function() {\n return renderTarget;\n };\n this.dispose = function() {\n renderTarget.dispose();\n scope.material.dispose();\n };\n }\n };\n let Reflector2 = _Reflector;\n __publicField(Reflector2, \"ReflectorShader\", {\n uniforms: {\n color: {\n value: null\n },\n tDiffuse: {\n value: null\n },\n textureMatrix: {\n value: null\n }\n },\n vertexShader: (\n /* glsl */\n `\n\t\tuniform mat4 textureMatrix;\n\t\tvarying vec4 vUv;\n\n\t\t#include <common>\n\t\t#include <logdepthbuf_pars_vertex>\n\n\t\tvoid main() {\n\n\t\t\tvUv = textureMatrix * vec4( position, 1.0 );\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t\t#include <logdepthbuf_vertex>\n\n\t\t}`\n ),\n fragmentShader: (\n /* glsl */\n `\n\t\tuniform vec3 color;\n\t\tuniform sampler2D tDiffuse;\n\t\tvarying vec4 vUv;\n\n\t\t#include <logdepthbuf_pars_fragment>\n\n\t\tfloat blendOverlay( float base, float blend ) {\n\n\t\t\treturn( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );\n\n\t\t}\n\n\t\tvec3 blendOverlay( vec3 base, vec3 blend ) {\n\n\t\t\treturn vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\t#include <logdepthbuf_fragment>\n\n\t\t\tvec4 base = texture2DProj( tDiffuse, vUv );\n\t\t\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );\n\n\t\t\t#include <tonemapping_fragment>\n\t\t\t#include <${version >= 154 ? \"colorspace_fragment\" : \"encodings_fragment\"}>\n\n\t\t}`\n )\n });\n return Reflector2;\n})();\nexport {\n Reflector\n};\n//# sourceMappingURL=Reflector.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Mesh, PerspectiveCamera, Color, Plane, Matrix4, WebGLRenderTarget, HalfFloatType, ShaderMaterial, UniformsUtils, Vector3, Quaternion, Vector4, NoToneMapping } from \"three\";\nimport { version } from \"../_polyfill/constants.js\";\nconst Refractor = /* @__PURE__ */ (() => {\n const _Refractor = class extends Mesh {\n constructor(geometry, options = {}) {\n super(geometry);\n this.isRefractor = true;\n this.type = \"Refractor\";\n this.camera = new PerspectiveCamera();\n const scope = this;\n const color = options.color !== void 0 ? new Color(options.color) : new Color(8355711);\n const textureWidth = options.textureWidth || 512;\n const textureHeight = options.textureHeight || 512;\n const clipBias = options.clipBias || 0;\n const shader = options.shader || _Refractor.RefractorShader;\n const multisample = options.multisample !== void 0 ? options.multisample : 4;\n const virtualCamera = this.camera;\n virtualCamera.matrixAutoUpdate = false;\n virtualCamera.userData.refractor = true;\n const refractorPlane = new Plane();\n const textureMatrix = new Matrix4();\n const renderTarget = new WebGLRenderTarget(textureWidth, textureHeight, {\n samples: multisample,\n type: HalfFloatType\n });\n this.material = new ShaderMaterial({\n uniforms: UniformsUtils.clone(shader.uniforms),\n vertexShader: shader.vertexShader,\n fragmentShader: shader.fragmentShader,\n transparent: true\n // ensures, refractors are drawn from farthest to closest\n });\n this.material.uniforms[\"color\"].value = color;\n this.material.uniforms[\"tDiffuse\"].value = renderTarget.texture;\n this.material.uniforms[\"textureMatrix\"].value = textureMatrix;\n const visible = function() {\n const refractorWorldPosition = new Vector3();\n const cameraWorldPosition = new Vector3();\n const rotationMatrix = new Matrix4();\n const view = new Vector3();\n const normal = new Vector3();\n return function visible2(camera) {\n refractorWorldPosition.setFromMatrixPosition(scope.matrixWorld);\n cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);\n view.subVectors(refractorWorldPosition, cameraWorldPosition);\n rotationMatrix.extractRotation(scope.matrixWorld);\n normal.set(0, 0, 1);\n normal.applyMatrix4(rotationMatrix);\n return view.dot(normal) < 0;\n };\n }();\n const updateRefractorPlane = function() {\n const normal = new Vector3();\n const position = new Vector3();\n const quaternion = new Quaternion();\n const scale = new Vector3();\n return function updateRefractorPlane2() {\n scope.matrixWorld.decompose(position, quaternion, scale);\n normal.set(0, 0, 1).applyQuaternion(quaternion).normalize();\n normal.negate();\n refractorPlane.setFromNormalAndCoplanarPoint(normal, position);\n };\n }();\n const updateVirtualCamera = function() {\n const clipPlane = new Plane();\n const clipVector = new Vector4();\n const q = new Vector4();\n return function updateVirtualCamera2(camera) {\n virtualCamera.matrixWorld.copy(camera.matrixWorld);\n virtualCamera.matrixWorldInverse.copy(virtualCamera.matrixWorld).invert();\n virtualCamera.projectionMatrix.copy(camera.projectionMatrix);\n virtualCamera.far = camera.far;\n clipPlane.copy(refractorPlane);\n clipPlane.applyMatrix4(virtualCamera.matrixWorldInverse);\n clipVector.set(clipPlane.normal.x, clipPlane.normal.y, clipPlane.normal.z, clipPlane.constant);\n const projectionMatrix = virtualCamera.projectionMatrix;\n q.x = (Math.sign(clipVector.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0];\n q.y = (Math.sign(clipVector.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5];\n q.z = -1;\n q.w = (1 + projectionMatrix.elements[10]) / projectionMatrix.elements[14];\n clipVector.multiplyScalar(2 / clipVector.dot(q));\n projectionMatrix.elements[2] = clipVector.x;\n projectionMatrix.elements[6] = clipVector.y;\n projectionMatrix.elements[10] = clipVector.z + 1 - clipBias;\n projectionMatrix.elements[14] = clipVector.w;\n };\n }();\n function updateTextureMatrix(camera) {\n textureMatrix.set(0.5, 0, 0, 0.5, 0, 0.5, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0, 1);\n textureMatrix.multiply(camera.projectionMatrix);\n textureMatrix.multiply(camera.matrixWorldInverse);\n textureMatrix.multiply(scope.matrixWorld);\n }\n function render(renderer, scene, camera) {\n scope.visible = false;\n const currentRenderTarget = renderer.getRenderTarget();\n const currentXrEnabled = renderer.xr.enabled;\n const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;\n const currentToneMapping = renderer.toneMapping;\n let isSRGB = false;\n if (\"outputColorSpace\" in renderer)\n isSRGB = renderer.outputColorSpace === \"srgb\";\n else\n isSRGB = renderer.outputEncoding === 3001;\n renderer.xr.enabled = false;\n renderer.shadowMap.autoUpdate = false;\n if (\"outputColorSpace\" in renderer)\n renderer.outputColorSpace = \"srgb-linear\";\n else\n renderer.outputEncoding = 3e3;\n renderer.toneMapping = NoToneMapping;\n renderer.setRenderTarget(renderTarget);\n if (renderer.autoClear === false)\n renderer.clear();\n renderer.render(scene, virtualCamera);\n renderer.xr.enabled = currentXrEnabled;\n renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;\n renderer.toneMapping = currentToneMapping;\n renderer.setRenderTarget(currentRenderTarget);\n if (\"outputColorSpace\" in renderer)\n renderer.outputColorSpace = isSRGB ? \"srgb\" : \"srgb-linear\";\n else\n renderer.outputEncoding = isSRGB ? 3001 : 3e3;\n const viewport = camera.viewport;\n if (viewport !== void 0) {\n renderer.state.viewport(viewport);\n }\n scope.visible = true;\n }\n this.onBeforeRender = function(renderer, scene, camera) {\n if (camera.userData.refractor === true)\n return;\n if (!visible(camera) === true)\n return;\n updateRefractorPlane();\n updateTextureMatrix(camera);\n updateVirtualCamera(camera);\n render(renderer, scene, camera);\n };\n this.getRenderTarget = function() {\n return renderTarget;\n };\n this.dispose = function() {\n renderTarget.dispose();\n scope.material.dispose();\n };\n }\n };\n let Refractor2 = _Refractor;\n __publicField(Refractor2, \"RefractorShader\", {\n uniforms: {\n color: {\n value: null\n },\n tDiffuse: {\n value: null\n },\n textureMatrix: {\n value: null\n }\n },\n vertexShader: (\n /* glsl */\n `\n\n\t\tuniform mat4 textureMatrix;\n\n\t\tvarying vec4 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = textureMatrix * vec4( position, 1.0 );\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`\n ),\n fragmentShader: (\n /* glsl */\n `\n\n\t\tuniform vec3 color;\n\t\tuniform sampler2D tDiffuse;\n\n\t\tvarying vec4 vUv;\n\n\t\tfloat blendOverlay( float base, float blend ) {\n\n\t\t\treturn( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );\n\n\t\t}\n\n\t\tvec3 blendOverlay( vec3 base, vec3 blend ) {\n\n\t\t\treturn vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );\n\n\t\t}\n\n\t\tvoid main() {\n\n\t\t\tvec4 base = texture2DProj( tDiffuse, vUv );\n\t\t\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );\n\n\t\t\t#include <tonemapping_fragment>\n\t\t\t#include <${version >= 154 ? \"colorspace_fragment\" : \"encodings_fragment\"}>\n\n\t\t}`\n )\n });\n return Refractor2;\n})();\nexport {\n Refractor\n};\n//# sourceMappingURL=Refractor.js.map\n","import { Mesh, MeshBasicMaterial, EqualStencilFunc, IncrementStencilOp, Matrix4 } from \"three\";\nconst _shadowMatrix = /* @__PURE__ */ new Matrix4();\nclass ShadowMesh extends Mesh {\n constructor(mesh) {\n const shadowMaterial = new MeshBasicMaterial({\n color: 0,\n transparent: true,\n opacity: 0.6,\n depthWrite: false,\n stencilWrite: true,\n stencilFunc: EqualStencilFunc,\n stencilRef: 0,\n stencilZPass: IncrementStencilOp\n });\n super(mesh.geometry, shadowMaterial);\n this.isShadowMesh = true;\n this.meshMatrix = mesh.matrixWorld;\n this.frustumCulled = false;\n this.matrixAutoUpdate = false;\n }\n update(plane, lightPosition4D) {\n const dot = plane.normal.x * lightPosition4D.x + plane.normal.y * lightPosition4D.y + plane.normal.z * lightPosition4D.z + -plane.constant * lightPosition4D.w;\n const sme = _shadowMatrix.elements;\n sme[0] = dot - lightPosition4D.x * plane.normal.x;\n sme[4] = -lightPosition4D.x * plane.normal.y;\n sme[8] = -lightPosition4D.x * plane.normal.z;\n sme[12] = -lightPosition4D.x * -plane.constant;\n sme[1] = -lightPosition4D.y * plane.normal.x;\n sme[5] = dot - lightPosition4D.y * plane.normal.y;\n sme[9] = -lightPosition4D.y * plane.normal.z;\n sme[13] = -lightPosition4D.y * -plane.constant;\n sme[2] = -lightPosition4D.z * plane.normal.x;\n sme[6] = -lightPosition4D.z * plane.normal.y;\n sme[10] = dot - lightPosition4D.z * plane.normal.z;\n sme[14] = -lightPosition4D.z * -plane.constant;\n sme[3] = -lightPosition4D.w * plane.normal.x;\n sme[7] = -lightPosition4D.w * plane.normal.y;\n sme[11] = -lightPosition4D.w * plane.normal.z;\n sme[15] = dot - lightPosition4D.w * -plane.constant;\n this.matrix.multiplyMatrices(_shadowMatrix, this.meshMatrix);\n }\n}\nexport {\n ShadowMesh\n};\n//# sourceMappingURL=ShadowMesh.js.map\n","import { BufferGeometry, InterleavedBuffer, InterleavedBufferAttribute, Mesh, MeshBasicMaterial, Vector3, Texture, NearestFilter, RawShaderMaterial, Color, Vector2, AdditiveBlending, Box2, Vector4 } from \"three\";\nconst Lensflare = /* @__PURE__ */ (() => {\n class Lensflare2 extends Mesh {\n constructor() {\n super(Lensflare2.Geometry, new MeshBasicMaterial({ opacity: 0, transparent: true }));\n this.isLensflare = true;\n this.type = \"Lensflare\";\n this.frustumCulled = false;\n this.renderOrder = Infinity;\n const positionScreen = new Vector3();\n const positionView = new Vector3();\n const tempMap = new Texture({ width: 16, height: 16 });\n tempMap.isFramebufferTexture = true;\n tempMap.magFilter = NearestFilter;\n tempMap.minFilter = NearestFilter;\n tempMap.generateMipmaps = false;\n tempMap.needsUpdate = true;\n const occlusionMap = new Texture({ width: 16, height: 16 });\n occlusionMap.isFramebufferTexture = true;\n occlusionMap.magFilter = NearestFilter;\n occlusionMap.minFilter = NearestFilter;\n occlusionMap.generateMipmaps = false;\n occlusionMap.needsUpdate = true;\n const geometry = Lensflare2.Geometry;\n const material1a = new RawShaderMaterial({\n uniforms: {\n scale: { value: null },\n screenPosition: { value: null }\n },\n vertexShader: (\n /* glsl */\n `\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tuniform vec3 screenPosition;\n\t\t\t\tuniform vec2 scale;\n\n\t\t\t\tattribute vec3 position;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tgl_Position = vec4( position.xy * scale + screenPosition.xy, screenPosition.z, 1.0 );\n\n\t\t\t\t}`\n ),\n fragmentShader: (\n /* glsl */\n `\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tgl_FragColor = vec4( 1.0, 0.0, 1.0, 1.0 );\n\n\t\t\t\t}`\n ),\n depthTest: true,\n depthWrite: false,\n transparent: false\n });\n const material1b = new RawShaderMaterial({\n uniforms: {\n map: { value: tempMap },\n scale: { value: null },\n screenPosition: { value: null }\n },\n vertexShader: (\n /* glsl */\n `\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tuniform vec3 screenPosition;\n\t\t\t\tuniform vec2 scale;\n\n\t\t\t\tattribute vec3 position;\n\t\t\t\tattribute vec2 uv;\n\n\t\t\t\tvarying vec2 vUV;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvUV = uv;\n\n\t\t\t\t\tgl_Position = vec4( position.xy * scale + screenPosition.xy, screenPosition.z, 1.0 );\n\n\t\t\t\t}`\n ),\n fragmentShader: (\n /* glsl */\n `\n\n\t\t\t\tprecision highp float;\n\n\t\t\t\tuniform sampler2D map;\n\n\t\t\t\tvarying vec2 vUV;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tgl_FragColor = texture2D( map, vUV );\n\n\t\t\t\t}`\n ),\n depthTest: false,\n depthWrite: false,\n transparent: false\n });\n const mesh1 = new Mesh(geometry, material1a);\n const elements = [];\n const shader = LensflareElement.Shader;\n const material2 = new RawShaderMaterial({\n uniforms: {\n map: { value: null },\n occlusionMap: { value: occlusionMap },\n color: { value: new Color(16777215) },\n scale: { value: new Vector2() },\n screenPosition: { value: new Vector3() }\n },\n vertexShader: shader.vertexShader,\n fragmentShader: shader.fragmentShader,\n blending: AdditiveBlending,\n transparent: true,\n depthWrite: false\n });\n const mesh2 = new Mesh(geometry, material2);\n this.addElement = function(element) {\n elements.push(element);\n };\n const scale = new Vector2();\n const screenPositionPixels = new Vector2();\n const validArea = new Box2();\n const viewport = new Vector4();\n this.onBeforeRender = function(renderer, scene, camera) {\n renderer.getCurrentViewport(viewport);\n const invAspect = viewport.w / viewport.z;\n const halfViewportWidth = viewport.z / 2;\n const halfViewportHeight = viewport.w / 2;\n let size = 16 / viewport.w;\n scale.set(size * invAspect, size);\n validArea.min.set(viewport.x, viewport.y);\n validArea.max.set(viewport.x + (viewport.z - 16), viewport.y + (viewport.w - 16));\n positionView.setFromMatrixPosition(this.matrixWorld);\n positionView.applyMatrix4(camera.matrixWorldInverse);\n if (positionView.z > 0)\n return;\n positionScreen.copy(positionView).applyMatrix4(camera.projectionMatrix);\n screenPositionPixels.x = viewport.x + positionScreen.x * halfViewportWidth + halfViewportWidth - 8;\n screenPositionPixels.y = viewport.y + positionScreen.y * halfViewportHeight + halfViewportHeight - 8;\n if (validArea.containsPoint(screenPositionPixels)) {\n renderer.copyFramebufferToTexture(screenPositionPixels, tempMap);\n let uniforms = material1a.uniforms;\n uniforms[\"scale\"].value = scale;\n uniforms[\"screenPosition\"].value = positionScreen;\n renderer.renderBufferDirect(camera, null, geometry, material1a, mesh1, null);\n renderer.copyFramebufferToTexture(screenPositionPixels, occlusionMap);\n uniforms = material1b.uniforms;\n uniforms[\"scale\"].value = scale;\n uniforms[\"screenPosition\"].value = positionScreen;\n renderer.renderBufferDirect(camera, null, geometry, material1b, mesh1, null);\n const vecX = -positionScreen.x * 2;\n const vecY = -positionScreen.y * 2;\n for (let i = 0, l = elements.length; i < l; i++) {\n const element = elements[i];\n const uniforms2 = material2.uniforms;\n uniforms2[\"color\"].value.copy(element.color);\n uniforms2[\"map\"].value = element.texture;\n uniforms2[\"screenPosition\"].value.x = positionScreen.x + vecX * element.distance;\n uniforms2[\"screenPosition\"].value.y = positionScreen.y + vecY * element.distance;\n size = element.size / viewport.w;\n const invAspect2 = viewport.w / viewport.z;\n uniforms2[\"scale\"].value.set(size * invAspect2, size);\n material2.uniformsNeedUpdate = true;\n renderer.renderBufferDirect(camera, null, geometry, material2, mesh2, null);\n }\n }\n };\n this.dispose = function() {\n material1a.dispose();\n material1b.dispose();\n material2.dispose();\n tempMap.dispose();\n occlusionMap.dispose();\n for (let i = 0, l = elements.length; i < l; i++) {\n elements[i].texture.dispose();\n }\n };\n }\n }\n const _geometry = new BufferGeometry();\n const interleavedBuffer = new InterleavedBuffer(\n new Float32Array([-1, -1, 0, 0, 0, 1, -1, 0, 1, 0, 1, 1, 0, 1, 1, -1, 1, 0, 0, 1]),\n 5\n );\n _geometry.setIndex([0, 1, 2, 0, 2, 3]);\n _geometry.setAttribute(\"position\", new InterleavedBufferAttribute(interleavedBuffer, 3, 0, false));\n _geometry.setAttribute(\"uv\", new InterleavedBufferAttribute(interleavedBuffer, 2, 3, false));\n Lensflare2.Geometry = _geometry;\n return Lensflare2;\n})();\nconst LensflareElement = /* @__PURE__ */ (() => {\n class LensflareElement2 {\n constructor(texture, size = 1, distance = 0, color = new Color(16777215)) {\n this.texture = texture;\n this.size = size;\n this.distance = distance;\n this.color = color;\n }\n }\n LensflareElement2.Shader = {\n uniforms: {\n map: { value: null },\n occlusionMap: { value: null },\n color: { value: null },\n scale: { value: null },\n screenPosition: { value: null }\n },\n vertexShader: (\n /* glsl */\n `\n\n precision highp float;\n\n uniform vec3 screenPosition;\n uniform vec2 scale;\n\n uniform sampler2D occlusionMap;\n\n attribute vec3 position;\n attribute vec2 uv;\n\n varying vec2 vUV;\n varying float vVisibility;\n\n void main() {\n\n vUV = uv;\n\n vec2 pos = position.xy;\n\n vec4 visibility = texture2D( occlusionMap, vec2( 0.1, 0.1 ) );\n visibility += texture2D( occlusionMap, vec2( 0.5, 0.1 ) );\n visibility += texture2D( occlusionMap, vec2( 0.9, 0.1 ) );\n visibility += texture2D( occlusionMap, vec2( 0.9, 0.5 ) );\n visibility += texture2D( occlusionMap, vec2( 0.9, 0.9 ) );\n visibility += texture2D( occlusionMap, vec2( 0.5, 0.9 ) );\n visibility += texture2D( occlusionMap, vec2( 0.1, 0.9 ) );\n visibility += texture2D( occlusionMap, vec2( 0.1, 0.5 ) );\n visibility += texture2D( occlusionMap, vec2( 0.5, 0.5 ) );\n\n vVisibility = visibility.r / 9.0;\n vVisibility *= 1.0 - visibility.g / 9.0;\n vVisibility *= visibility.b / 9.0;\n\n gl_Position = vec4( ( pos * scale + screenPosition.xy ).xy, screenPosition.z, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n\n precision highp float;\n\n uniform sampler2D map;\n uniform vec3 color;\n\n varying vec2 vUV;\n varying float vVisibility;\n\n void main() {\n\n vec4 texture = texture2D( map, vUV );\n texture.a *= vVisibility;\n gl_FragColor = texture;\n gl_FragColor.rgb *= color;\n\n }\n `\n )\n };\n return LensflareElement2;\n})();\nexport {\n Lensflare,\n LensflareElement\n};\n//# sourceMappingURL=Lensflare.js.map\n","import { Mesh, Vector3, Color, FrontSide, Plane, Matrix4, Vector4, PerspectiveCamera, WebGLRenderTarget, UniformsUtils, UniformsLib, ShaderMaterial } from \"three\";\nimport { version } from \"../_polyfill/constants.js\";\nclass Water extends Mesh {\n constructor(geometry, options = {}) {\n super(geometry);\n this.isWater = true;\n const scope = this;\n const textureWidth = options.textureWidth !== void 0 ? options.textureWidth : 512;\n const textureHeight = options.textureHeight !== void 0 ? options.textureHeight : 512;\n const clipBias = options.clipBias !== void 0 ? options.clipBias : 0;\n const alpha = options.alpha !== void 0 ? options.alpha : 1;\n const time = options.time !== void 0 ? options.time : 0;\n const normalSampler = options.waterNormals !== void 0 ? options.waterNormals : null;\n const sunDirection = options.sunDirection !== void 0 ? options.sunDirection : new Vector3(0.70707, 0.70707, 0);\n const sunColor = new Color(options.sunColor !== void 0 ? options.sunColor : 16777215);\n const waterColor = new Color(options.waterColor !== void 0 ? options.waterColor : 8355711);\n const eye = options.eye !== void 0 ? options.eye : new Vector3(0, 0, 0);\n const distortionScale = options.distortionScale !== void 0 ? options.distortionScale : 20;\n const side = options.side !== void 0 ? options.side : FrontSide;\n const fog = options.fog !== void 0 ? options.fog : false;\n const mirrorPlane = new Plane();\n const normal = new Vector3();\n const mirrorWorldPosition = new Vector3();\n const cameraWorldPosition = new Vector3();\n const rotationMatrix = new Matrix4();\n const lookAtPosition = new Vector3(0, 0, -1);\n const clipPlane = new Vector4();\n const view = new Vector3();\n const target = new Vector3();\n const q = new Vector4();\n const textureMatrix = new Matrix4();\n const mirrorCamera = new PerspectiveCamera();\n const renderTarget = new WebGLRenderTarget(textureWidth, textureHeight);\n const mirrorShader = {\n uniforms: UniformsUtils.merge([\n UniformsLib[\"fog\"],\n UniformsLib[\"lights\"],\n {\n normalSampler: { value: null },\n mirrorSampler: { value: null },\n alpha: { value: 1 },\n time: { value: 0 },\n size: { value: 1 },\n distortionScale: { value: 20 },\n textureMatrix: { value: new Matrix4() },\n sunColor: { value: new Color(8355711) },\n sunDirection: { value: new Vector3(0.70707, 0.70707, 0) },\n eye: { value: new Vector3() },\n waterColor: { value: new Color(5592405) }\n }\n ]),\n vertexShader: (\n /* glsl */\n `\n\t\t\t\tuniform mat4 textureMatrix;\n\t\t\t\tuniform float time;\n\n\t\t\t\tvarying vec4 mirrorCoord;\n\t\t\t\tvarying vec4 worldPosition;\n\n\t\t\t\t#include <common>\n\t\t\t\t#include <fog_pars_vertex>\n\t\t\t\t#include <shadowmap_pars_vertex>\n\t\t\t\t#include <logdepthbuf_pars_vertex>\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tmirrorCoord = modelMatrix * vec4( position, 1.0 );\n\t\t\t\t\tworldPosition = mirrorCoord.xyzw;\n\t\t\t\t\tmirrorCoord = textureMatrix * mirrorCoord;\n\t\t\t\t\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t\tgl_Position = projectionMatrix * mvPosition;\n\n\t\t\t\t#include <beginnormal_vertex>\n\t\t\t\t#include <defaultnormal_vertex>\n\t\t\t\t#include <logdepthbuf_vertex>\n\t\t\t\t#include <fog_vertex>\n\t\t\t\t#include <shadowmap_vertex>\n\t\t\t}`\n ),\n fragmentShader: (\n /* glsl */\n `\n\t\t\t\tuniform sampler2D mirrorSampler;\n\t\t\t\tuniform float alpha;\n\t\t\t\tuniform float time;\n\t\t\t\tuniform float size;\n\t\t\t\tuniform float distortionScale;\n\t\t\t\tuniform sampler2D normalSampler;\n\t\t\t\tuniform vec3 sunColor;\n\t\t\t\tuniform vec3 sunDirection;\n\t\t\t\tuniform vec3 eye;\n\t\t\t\tuniform vec3 waterColor;\n\n\t\t\t\tvarying vec4 mirrorCoord;\n\t\t\t\tvarying vec4 worldPosition;\n\n\t\t\t\tvec4 getNoise( vec2 uv ) {\n\t\t\t\t\tvec2 uv0 = ( uv / 103.0 ) + vec2(time / 17.0, time / 29.0);\n\t\t\t\t\tvec2 uv1 = uv / 107.0-vec2( time / -19.0, time / 31.0 );\n\t\t\t\t\tvec2 uv2 = uv / vec2( 8907.0, 9803.0 ) + vec2( time / 101.0, time / 97.0 );\n\t\t\t\t\tvec2 uv3 = uv / vec2( 1091.0, 1027.0 ) - vec2( time / 109.0, time / -113.0 );\n\t\t\t\t\tvec4 noise = texture2D( normalSampler, uv0 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv1 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv2 ) +\n\t\t\t\t\t\ttexture2D( normalSampler, uv3 );\n\t\t\t\t\treturn noise * 0.5 - 1.0;\n\t\t\t\t}\n\n\t\t\t\tvoid sunLight( const vec3 surfaceNormal, const vec3 eyeDirection, float shiny, float spec, float diffuse, inout vec3 diffuseColor, inout vec3 specularColor ) {\n\t\t\t\t\tvec3 reflection = normalize( reflect( -sunDirection, surfaceNormal ) );\n\t\t\t\t\tfloat direction = max( 0.0, dot( eyeDirection, reflection ) );\n\t\t\t\t\tspecularColor += pow( direction, shiny ) * sunColor * spec;\n\t\t\t\t\tdiffuseColor += max( dot( sunDirection, surfaceNormal ), 0.0 ) * sunColor * diffuse;\n\t\t\t\t}\n\n\t\t\t\t#include <common>\n\t\t\t\t#include <packing>\n\t\t\t\t#include <bsdfs>\n\t\t\t\t#include <fog_pars_fragment>\n\t\t\t\t#include <logdepthbuf_pars_fragment>\n\t\t\t\t#include <lights_pars_begin>\n\t\t\t\t#include <shadowmap_pars_fragment>\n\t\t\t\t#include <shadowmask_pars_fragment>\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\t#include <logdepthbuf_fragment>\n\t\t\t\t\tvec4 noise = getNoise( worldPosition.xz * size );\n\t\t\t\t\tvec3 surfaceNormal = normalize( noise.xzy * vec3( 1.5, 1.0, 1.5 ) );\n\n\t\t\t\t\tvec3 diffuseLight = vec3(0.0);\n\t\t\t\t\tvec3 specularLight = vec3(0.0);\n\n\t\t\t\t\tvec3 worldToEye = eye-worldPosition.xyz;\n\t\t\t\t\tvec3 eyeDirection = normalize( worldToEye );\n\t\t\t\t\tsunLight( surfaceNormal, eyeDirection, 100.0, 2.0, 0.5, diffuseLight, specularLight );\n\n\t\t\t\t\tfloat distance = length(worldToEye);\n\n\t\t\t\t\tvec2 distortion = surfaceNormal.xz * ( 0.001 + 1.0 / distance ) * distortionScale;\n\t\t\t\t\tvec3 reflectionSample = vec3( texture2D( mirrorSampler, mirrorCoord.xy / mirrorCoord.w + distortion ) );\n\n\t\t\t\t\tfloat theta = max( dot( eyeDirection, surfaceNormal ), 0.0 );\n\t\t\t\t\tfloat rf0 = 0.3;\n\t\t\t\t\tfloat reflectance = rf0 + ( 1.0 - rf0 ) * pow( ( 1.0 - theta ), 5.0 );\n\t\t\t\t\tvec3 scatter = max( 0.0, dot( surfaceNormal, eyeDirection ) ) * waterColor;\n\t\t\t\t\tvec3 albedo = mix( ( sunColor * diffuseLight * 0.3 + scatter ) * getShadowMask(), ( vec3( 0.1 ) + reflectionSample * 0.9 + reflectionSample * specularLight ), reflectance);\n\t\t\t\t\tvec3 outgoingLight = albedo;\n\t\t\t\t\tgl_FragColor = vec4( outgoingLight, alpha );\n\n\t\t\t\t\t#include <tonemapping_fragment>\n\t\t\t\t\t#include <${version >= 154 ? \"colorspace_fragment\" : \"encodings_fragment\"}>\n\t\t\t\t\t#include <fog_fragment>\t\n\t\t\t\t}`\n )\n };\n const material = new ShaderMaterial({\n fragmentShader: mirrorShader.fragmentShader,\n vertexShader: mirrorShader.vertexShader,\n uniforms: UniformsUtils.clone(mirrorShader.uniforms),\n lights: true,\n side,\n fog\n });\n material.uniforms[\"mirrorSampler\"].value = renderTarget.texture;\n material.uniforms[\"textureMatrix\"].value = textureMatrix;\n material.uniforms[\"alpha\"].value = alpha;\n material.uniforms[\"time\"].value = time;\n material.uniforms[\"normalSampler\"].value = normalSampler;\n material.uniforms[\"sunColor\"].value = sunColor;\n material.uniforms[\"waterColor\"].value = waterColor;\n material.uniforms[\"sunDirection\"].value = sunDirection;\n material.uniforms[\"distortionScale\"].value = distortionScale;\n material.uniforms[\"eye\"].value = eye;\n scope.material = material;\n scope.onBeforeRender = function(renderer, scene, camera) {\n mirrorWorldPosition.setFromMatrixPosition(scope.matrixWorld);\n cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);\n rotationMatrix.extractRotation(scope.matrixWorld);\n normal.set(0, 0, 1);\n normal.applyMatrix4(rotationMatrix);\n view.subVectors(mirrorWorldPosition, cameraWorldPosition);\n if (view.dot(normal) > 0)\n return;\n view.reflect(normal).negate();\n view.add(mirrorWorldPosition);\n rotationMatrix.extractRotation(camera.matrixWorld);\n lookAtPosition.set(0, 0, -1);\n lookAtPosition.applyMatrix4(rotationMatrix);\n lookAtPosition.add(cameraWorldPosition);\n target.subVectors(mirrorWorldPosition, lookAtPosition);\n target.reflect(normal).negate();\n target.add(mirrorWorldPosition);\n mirrorCamera.position.copy(view);\n mirrorCamera.up.set(0, 1, 0);\n mirrorCamera.up.applyMatrix4(rotationMatrix);\n mirrorCamera.up.reflect(normal);\n mirrorCamera.lookAt(target);\n mirrorCamera.far = camera.far;\n mirrorCamera.updateMatrixWorld();\n mirrorCamera.projectionMatrix.copy(camera.projectionMatrix);\n textureMatrix.set(0.5, 0, 0, 0.5, 0, 0.5, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0, 1);\n textureMatrix.multiply(mirrorCamera.projectionMatrix);\n textureMatrix.multiply(mirrorCamera.matrixWorldInverse);\n mirrorPlane.setFromNormalAndCoplanarPoint(normal, mirrorWorldPosition);\n mirrorPlane.applyMatrix4(mirrorCamera.matrixWorldInverse);\n clipPlane.set(mirrorPlane.normal.x, mirrorPlane.normal.y, mirrorPlane.normal.z, mirrorPlane.constant);\n const projectionMatrix = mirrorCamera.projectionMatrix;\n q.x = (Math.sign(clipPlane.x) + projectionMatrix.elements[8]) / projectionMatrix.elements[0];\n q.y = (Math.sign(clipPlane.y) + projectionMatrix.elements[9]) / projectionMatrix.elements[5];\n q.z = -1;\n q.w = (1 + projectionMatrix.elements[10]) / projectionMatrix.elements[14];\n clipPlane.multiplyScalar(2 / clipPlane.dot(q));\n projectionMatrix.elements[2] = clipPlane.x;\n projectionMatrix.elements[6] = clipPlane.y;\n projectionMatrix.elements[10] = clipPlane.z + 1 - clipBias;\n projectionMatrix.elements[14] = clipPlane.w;\n eye.setFromMatrixPosition(camera.matrixWorld);\n const currentRenderTarget = renderer.getRenderTarget();\n const currentXrEnabled = renderer.xr.enabled;\n const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;\n scope.visible = false;\n renderer.xr.enabled = false;\n renderer.shadowMap.autoUpdate = false;\n renderer.setRenderTarget(renderTarget);\n renderer.state.buffers.depth.setMask(true);\n if (renderer.autoClear === false)\n renderer.clear();\n renderer.render(scene, mirrorCamera);\n scope.visible = true;\n renderer.xr.enabled = currentXrEnabled;\n renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;\n renderer.setRenderTarget(currentRenderTarget);\n const viewport = camera.viewport;\n if (viewport !== void 0) {\n renderer.state.viewport(viewport);\n }\n };\n }\n}\nexport {\n Water\n};\n//# sourceMappingURL=Water.js.map\n","import { Mesh, BufferGeometry, BufferAttribute, DynamicDrawUsage, Sphere, Vector3, Color } from \"three\";\nclass MarchingCubes extends Mesh {\n constructor(resolution, material, enableUvs = false, enableColors = false, maxPolyCount = 1e4) {\n const geometry = new BufferGeometry();\n super(geometry, material);\n this.isMarchingCubes = true;\n const scope = this;\n const vlist = new Float32Array(12 * 3);\n const nlist = new Float32Array(12 * 3);\n const clist = new Float32Array(12 * 3);\n this.enableUvs = enableUvs;\n this.enableColors = enableColors;\n this.init = function(resolution2) {\n this.resolution = resolution2;\n this.isolation = 80;\n this.size = resolution2;\n this.size2 = this.size * this.size;\n this.size3 = this.size2 * this.size;\n this.halfsize = this.size / 2;\n this.delta = 2 / this.size;\n this.yd = this.size;\n this.zd = this.size2;\n this.field = new Float32Array(this.size3);\n this.normal_cache = new Float32Array(this.size3 * 3);\n this.palette = new Float32Array(this.size3 * 3);\n this.count = 0;\n const maxVertexCount = maxPolyCount * 3;\n this.positionArray = new Float32Array(maxVertexCount * 3);\n const positionAttribute = new BufferAttribute(this.positionArray, 3);\n positionAttribute.setUsage(DynamicDrawUsage);\n geometry.setAttribute(\"position\", positionAttribute);\n this.normalArray = new Float32Array(maxVertexCount * 3);\n const normalAttribute = new BufferAttribute(this.normalArray, 3);\n normalAttribute.setUsage(DynamicDrawUsage);\n geometry.setAttribute(\"normal\", normalAttribute);\n if (this.enableUvs) {\n this.uvArray = new Float32Array(maxVertexCount * 2);\n const uvAttribute = new BufferAttribute(this.uvArray, 2);\n uvAttribute.setUsage(DynamicDrawUsage);\n geometry.setAttribute(\"uv\", uvAttribute);\n }\n if (this.enableColors) {\n this.colorArray = new Float32Array(maxVertexCount * 3);\n const colorAttribute = new BufferAttribute(this.colorArray, 3);\n colorAttribute.setUsage(DynamicDrawUsage);\n geometry.setAttribute(\"color\", colorAttribute);\n }\n geometry.boundingSphere = new Sphere(new Vector3(), 1);\n };\n function lerp(a, b, t) {\n return a + (b - a) * t;\n }\n function VIntX(q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2) {\n const mu = (isol - valp1) / (valp2 - valp1), nc = scope.normal_cache;\n vlist[offset + 0] = x + mu * scope.delta;\n vlist[offset + 1] = y;\n vlist[offset + 2] = z;\n nlist[offset + 0] = lerp(nc[q + 0], nc[q + 3], mu);\n nlist[offset + 1] = lerp(nc[q + 1], nc[q + 4], mu);\n nlist[offset + 2] = lerp(nc[q + 2], nc[q + 5], mu);\n clist[offset + 0] = lerp(scope.palette[c_offset1 * 3 + 0], scope.palette[c_offset2 * 3 + 0], mu);\n clist[offset + 1] = lerp(scope.palette[c_offset1 * 3 + 1], scope.palette[c_offset2 * 3 + 1], mu);\n clist[offset + 2] = lerp(scope.palette[c_offset1 * 3 + 2], scope.palette[c_offset2 * 3 + 2], mu);\n }\n function VIntY(q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2) {\n const mu = (isol - valp1) / (valp2 - valp1), nc = scope.normal_cache;\n vlist[offset + 0] = x;\n vlist[offset + 1] = y + mu * scope.delta;\n vlist[offset + 2] = z;\n const q2 = q + scope.yd * 3;\n nlist[offset + 0] = lerp(nc[q + 0], nc[q2 + 0], mu);\n nlist[offset + 1] = lerp(nc[q + 1], nc[q2 + 1], mu);\n nlist[offset + 2] = lerp(nc[q + 2], nc[q2 + 2], mu);\n clist[offset + 0] = lerp(scope.palette[c_offset1 * 3 + 0], scope.palette[c_offset2 * 3 + 0], mu);\n clist[offset + 1] = lerp(scope.palette[c_offset1 * 3 + 1], scope.palette[c_offset2 * 3 + 1], mu);\n clist[offset + 2] = lerp(scope.palette[c_offset1 * 3 + 2], scope.palette[c_offset2 * 3 + 2], mu);\n }\n function VIntZ(q, offset, isol, x, y, z, valp1, valp2, c_offset1, c_offset2) {\n const mu = (isol - valp1) / (valp2 - valp1), nc = scope.normal_cache;\n vlist[offset + 0] = x;\n vlist[offset + 1] = y;\n vlist[offset + 2] = z + mu * scope.delta;\n const q2 = q + scope.zd * 3;\n nlist[offset + 0] = lerp(nc[q + 0], nc[q2 + 0], mu);\n nlist[offset + 1] = lerp(nc[q + 1], nc[q2 + 1], mu);\n nlist[offset + 2] = lerp(nc[q + 2], nc[q2 + 2], mu);\n clist[offset + 0] = lerp(scope.palette[c_offset1 * 3 + 0], scope.palette[c_offset2 * 3 + 0], mu);\n clist[offset + 1] = lerp(scope.palette[c_offset1 * 3 + 1], scope.palette[c_offset2 * 3 + 1], mu);\n clist[offset + 2] = lerp(scope.palette[c_offset1 * 3 + 2], scope.palette[c_offset2 * 3 + 2], mu);\n }\n function compNorm(q) {\n const q3 = q * 3;\n if (scope.normal_cache[q3] === 0) {\n scope.normal_cache[q3 + 0] = scope.field[q - 1] - scope.field[q + 1];\n scope.normal_cache[q3 + 1] = scope.field[q - scope.yd] - scope.field[q + scope.yd];\n scope.normal_cache[q3 + 2] = scope.field[q - scope.zd] - scope.field[q + scope.zd];\n }\n }\n function polygonize(fx, fy, fz, q, isol) {\n const q1 = q + 1, qy = q + scope.yd, qz = q + scope.zd, q1y = q1 + scope.yd, q1z = q1 + scope.zd, qyz = q + scope.yd + scope.zd, q1yz = q1 + scope.yd + scope.zd;\n let cubeindex = 0;\n const field0 = scope.field[q], field1 = scope.field[q1], field2 = scope.field[qy], field3 = scope.field[q1y], field4 = scope.field[qz], field5 = scope.field[q1z], field6 = scope.field[qyz], field7 = scope.field[q1yz];\n if (field0 < isol)\n cubeindex |= 1;\n if (field1 < isol)\n cubeindex |= 2;\n if (field2 < isol)\n cubeindex |= 8;\n if (field3 < isol)\n cubeindex |= 4;\n if (field4 < isol)\n cubeindex |= 16;\n if (field5 < isol)\n cubeindex |= 32;\n if (field6 < isol)\n cubeindex |= 128;\n if (field7 < isol)\n cubeindex |= 64;\n const bits = edgeTable[cubeindex];\n if (bits === 0)\n return 0;\n const d = scope.delta, fx2 = fx + d, fy2 = fy + d, fz2 = fz + d;\n if (bits & 1) {\n compNorm(q);\n compNorm(q1);\n VIntX(q * 3, 0, isol, fx, fy, fz, field0, field1, q, q1);\n }\n if (bits & 2) {\n compNorm(q1);\n compNorm(q1y);\n VIntY(q1 * 3, 3, isol, fx2, fy, fz, field1, field3, q1, q1y);\n }\n if (bits & 4) {\n compNorm(qy);\n compNorm(q1y);\n VIntX(qy * 3, 6, isol, fx, fy2, fz, field2, field3, qy, q1y);\n }\n if (bits & 8) {\n compNorm(q);\n compNorm(qy);\n VIntY(q * 3, 9, isol, fx, fy, fz, field0, field2, q, qy);\n }\n if (bits & 16) {\n compNorm(qz);\n compNorm(q1z);\n VIntX(qz * 3, 12, isol, fx, fy, fz2, field4, field5, qz, q1z);\n }\n if (bits & 32) {\n compNorm(q1z);\n compNorm(q1yz);\n VIntY(q1z * 3, 15, isol, fx2, fy, fz2, field5, field7, q1z, q1yz);\n }\n if (bits & 64) {\n compNorm(qyz);\n compNorm(q1yz);\n VIntX(qyz * 3, 18, isol, fx, fy2, fz2, field6, field7, qyz, q1yz);\n }\n if (bits & 128) {\n compNorm(qz);\n compNorm(qyz);\n VIntY(qz * 3, 21, isol, fx, fy, fz2, field4, field6, qz, qyz);\n }\n if (bits & 256) {\n compNorm(q);\n compNorm(qz);\n VIntZ(q * 3, 24, isol, fx, fy, fz, field0, field4, q, qz);\n }\n if (bits & 512) {\n compNorm(q1);\n compNorm(q1z);\n VIntZ(q1 * 3, 27, isol, fx2, fy, fz, field1, field5, q1, q1z);\n }\n if (bits & 1024) {\n compNorm(q1y);\n compNorm(q1yz);\n VIntZ(q1y * 3, 30, isol, fx2, fy2, fz, field3, field7, q1y, q1yz);\n }\n if (bits & 2048) {\n compNorm(qy);\n compNorm(qyz);\n VIntZ(qy * 3, 33, isol, fx, fy2, fz, field2, field6, qy, qyz);\n }\n cubeindex <<= 4;\n let o1, o2, o3, numtris = 0, i = 0;\n while (triTable[cubeindex + i] != -1) {\n o1 = cubeindex + i;\n o2 = o1 + 1;\n o3 = o1 + 2;\n posnormtriv(vlist, nlist, clist, 3 * triTable[o1], 3 * triTable[o2], 3 * triTable[o3]);\n i += 3;\n numtris++;\n }\n return numtris;\n }\n function posnormtriv(pos, norm, colors, o1, o2, o3) {\n const c = scope.count * 3;\n scope.positionArray[c + 0] = pos[o1];\n scope.positionArray[c + 1] = pos[o1 + 1];\n scope.positionArray[c + 2] = pos[o1 + 2];\n scope.positionArray[c + 3] = pos[o2];\n scope.positionArray[c + 4] = pos[o2 + 1];\n scope.positionArray[c + 5] = pos[o2 + 2];\n scope.positionArray[c + 6] = pos[o3];\n scope.positionArray[c + 7] = pos[o3 + 1];\n scope.positionArray[c + 8] = pos[o3 + 2];\n if (scope.material.flatShading === true) {\n const nx = (norm[o1 + 0] + norm[o2 + 0] + norm[o3 + 0]) / 3;\n const ny = (norm[o1 + 1] + norm[o2 + 1] + norm[o3 + 1]) / 3;\n const nz = (norm[o1 + 2] + norm[o2 + 2] + norm[o3 + 2]) / 3;\n scope.normalArray[c + 0] = nx;\n scope.normalArray[c + 1] = ny;\n scope.normalArray[c + 2] = nz;\n scope.normalArray[c + 3] = nx;\n scope.normalArray[c + 4] = ny;\n scope.normalArray[c + 5] = nz;\n scope.normalArray[c + 6] = nx;\n scope.normalArray[c + 7] = ny;\n scope.normalArray[c + 8] = nz;\n } else {\n scope.normalArray[c + 0] = norm[o1 + 0];\n scope.normalArray[c + 1] = norm[o1 + 1];\n scope.normalArray[c + 2] = norm[o1 + 2];\n scope.normalArray[c + 3] = norm[o2 + 0];\n scope.normalArray[c + 4] = norm[o2 + 1];\n scope.normalArray[c + 5] = norm[o2 + 2];\n scope.normalArray[c + 6] = norm[o3 + 0];\n scope.normalArray[c + 7] = norm[o3 + 1];\n scope.normalArray[c + 8] = norm[o3 + 2];\n }\n if (scope.enableUvs) {\n const d = scope.count * 2;\n scope.uvArray[d + 0] = pos[o1 + 0];\n scope.uvArray[d + 1] = pos[o1 + 2];\n scope.uvArray[d + 2] = pos[o2 + 0];\n scope.uvArray[d + 3] = pos[o2 + 2];\n scope.uvArray[d + 4] = pos[o3 + 0];\n scope.uvArray[d + 5] = pos[o3 + 2];\n }\n if (scope.enableColors) {\n scope.colorArray[c + 0] = colors[o1 + 0];\n scope.colorArray[c + 1] = colors[o1 + 1];\n scope.colorArray[c + 2] = colors[o1 + 2];\n scope.colorArray[c + 3] = colors[o2 + 0];\n scope.colorArray[c + 4] = colors[o2 + 1];\n scope.colorArray[c + 5] = colors[o2 + 2];\n scope.colorArray[c + 6] = colors[o3 + 0];\n scope.colorArray[c + 7] = colors[o3 + 1];\n scope.colorArray[c + 8] = colors[o3 + 2];\n }\n scope.count += 3;\n }\n this.addBall = function(ballx, bally, ballz, strength, subtract, colors) {\n const sign = Math.sign(strength);\n strength = Math.abs(strength);\n const userDefineColor = !(colors === void 0 || colors === null);\n let ballColor = new Color(ballx, bally, ballz);\n if (userDefineColor) {\n try {\n ballColor = colors instanceof Color ? colors : Array.isArray(colors) ? new Color(\n Math.min(Math.abs(colors[0]), 1),\n Math.min(Math.abs(colors[1]), 1),\n Math.min(Math.abs(colors[2]), 1)\n ) : new Color(colors);\n } catch (err) {\n ballColor = new Color(ballx, bally, ballz);\n }\n }\n const radius = this.size * Math.sqrt(strength / subtract), zs = ballz * this.size, ys = bally * this.size, xs = ballx * this.size;\n let min_z = Math.floor(zs - radius);\n if (min_z < 1)\n min_z = 1;\n let max_z = Math.floor(zs + radius);\n if (max_z > this.size - 1)\n max_z = this.size - 1;\n let min_y = Math.floor(ys - radius);\n if (min_y < 1)\n min_y = 1;\n let max_y = Math.floor(ys + radius);\n if (max_y > this.size - 1)\n max_y = this.size - 1;\n let min_x = Math.floor(xs - radius);\n if (min_x < 1)\n min_x = 1;\n let max_x = Math.floor(xs + radius);\n if (max_x > this.size - 1)\n max_x = this.size - 1;\n let x, y, z, y_offset, z_offset, fx, fy, fz, fz2, fy2, val;\n for (z = min_z; z < max_z; z++) {\n z_offset = this.size2 * z;\n fz = z / this.size - ballz;\n fz2 = fz * fz;\n for (y = min_y; y < max_y; y++) {\n y_offset = z_offset + this.size * y;\n fy = y / this.size - bally;\n fy2 = fy * fy;\n for (x = min_x; x < max_x; x++) {\n fx = x / this.size - ballx;\n val = strength / (1e-6 + fx * fx + fy2 + fz2) - subtract;\n if (val > 0) {\n this.field[y_offset + x] += val * sign;\n const ratio = Math.sqrt((x - xs) * (x - xs) + (y - ys) * (y - ys) + (z - zs) * (z - zs)) / radius;\n const contrib = 1 - ratio * ratio * ratio * (ratio * (ratio * 6 - 15) + 10);\n this.palette[(y_offset + x) * 3 + 0] += ballColor.r * contrib;\n this.palette[(y_offset + x) * 3 + 1] += ballColor.g * contrib;\n this.palette[(y_offset + x) * 3 + 2] += ballColor.b * contrib;\n }\n }\n }\n }\n };\n this.addPlaneX = function(strength, subtract) {\n const size = this.size, yd = this.yd, zd = this.zd, field = this.field;\n let x, y, z, xx, val, xdiv, cxy, dist = size * Math.sqrt(strength / subtract);\n if (dist > size)\n dist = size;\n for (x = 0; x < dist; x++) {\n xdiv = x / size;\n xx = xdiv * xdiv;\n val = strength / (1e-4 + xx) - subtract;\n if (val > 0) {\n for (y = 0; y < size; y++) {\n cxy = x + y * yd;\n for (z = 0; z < size; z++) {\n field[zd * z + cxy] += val;\n }\n }\n }\n }\n };\n this.addPlaneY = function(strength, subtract) {\n const size = this.size, yd = this.yd, zd = this.zd, field = this.field;\n let x, y, z, yy, val, ydiv, cy, cxy, dist = size * Math.sqrt(strength / subtract);\n if (dist > size)\n dist = size;\n for (y = 0; y < dist; y++) {\n ydiv = y / size;\n yy = ydiv * ydiv;\n val = strength / (1e-4 + yy) - subtract;\n if (val > 0) {\n cy = y * yd;\n for (x = 0; x < size; x++) {\n cxy = cy + x;\n for (z = 0; z < size; z++)\n field[zd * z + cxy] += val;\n }\n }\n }\n };\n this.addPlaneZ = function(strength, subtract) {\n const size = this.size, yd = this.yd, zd = this.zd, field = this.field;\n let x, y, z, zz, val, zdiv, cz, cyz, dist = size * Math.sqrt(strength / subtract);\n if (dist > size)\n dist = size;\n for (z = 0; z < dist; z++) {\n zdiv = z / size;\n zz = zdiv * zdiv;\n val = strength / (1e-4 + zz) - subtract;\n if (val > 0) {\n cz = zd * z;\n for (y = 0; y < size; y++) {\n cyz = cz + y * yd;\n for (x = 0; x < size; x++)\n field[cyz + x] += val;\n }\n }\n }\n };\n this.setCell = function(x, y, z, value) {\n const index = this.size2 * z + this.size * y + x;\n this.field[index] = value;\n };\n this.getCell = function(x, y, z) {\n const index = this.size2 * z + this.size * y + x;\n return this.field[index];\n };\n this.blur = function(intensity = 1) {\n const field = this.field;\n const fieldCopy = field.slice();\n const size = this.size;\n const size2 = this.size2;\n for (let x = 0; x < size; x++) {\n for (let y = 0; y < size; y++) {\n for (let z = 0; z < size; z++) {\n const index = size2 * z + size * y + x;\n let val = fieldCopy[index];\n let count = 1;\n for (let x2 = -1; x2 <= 1; x2 += 2) {\n const x3 = x2 + x;\n if (x3 < 0 || x3 >= size)\n continue;\n for (let y2 = -1; y2 <= 1; y2 += 2) {\n const y3 = y2 + y;\n if (y3 < 0 || y3 >= size)\n continue;\n for (let z2 = -1; z2 <= 1; z2 += 2) {\n const z3 = z2 + z;\n if (z3 < 0 || z3 >= size)\n continue;\n const index2 = size2 * z3 + size * y3 + x3;\n const val2 = fieldCopy[index2];\n count++;\n val += intensity * (val2 - val) / count;\n }\n }\n }\n field[index] = val;\n }\n }\n }\n };\n this.reset = function() {\n for (let i = 0; i < this.size3; i++) {\n this.normal_cache[i * 3] = 0;\n this.field[i] = 0;\n this.palette[i * 3] = this.palette[i * 3 + 1] = this.palette[i * 3 + 2] = 0;\n }\n };\n this.update = function() {\n this.count = 0;\n const smin2 = this.size - 2;\n for (let z = 1; z < smin2; z++) {\n const z_offset = this.size2 * z;\n const fz = (z - this.halfsize) / this.halfsize;\n for (let y = 1; y < smin2; y++) {\n const y_offset = z_offset + this.size * y;\n const fy = (y - this.halfsize) / this.halfsize;\n for (let x = 1; x < smin2; x++) {\n const fx = (x - this.halfsize) / this.halfsize;\n const q = y_offset + x;\n polygonize(fx, fy, fz, q, this.isolation);\n }\n }\n }\n this.geometry.setDrawRange(0, this.count);\n geometry.getAttribute(\"position\").needsUpdate = true;\n geometry.getAttribute(\"normal\").needsUpdate = true;\n if (this.enableUvs)\n geometry.getAttribute(\"uv\").needsUpdate = true;\n if (this.enableColors)\n geometry.getAttribute(\"color\").needsUpdate = true;\n if (this.count / 3 > maxPolyCount)\n console.warn(\n \"THREE.MarchingCubes: Geometry buffers too small for rendering. Please create an instance with a higher poly count.\"\n );\n };\n this.init(resolution);\n }\n}\nconst edgeTable = new Int32Array([\n 0,\n 265,\n 515,\n 778,\n 1030,\n 1295,\n 1541,\n 1804,\n 2060,\n 2309,\n 2575,\n 2822,\n 3082,\n 3331,\n 3593,\n 3840,\n 400,\n 153,\n 915,\n 666,\n 1430,\n 1183,\n 1941,\n 1692,\n 2460,\n 2197,\n 2975,\n 2710,\n 3482,\n 3219,\n 3993,\n 3728,\n 560,\n 825,\n 51,\n 314,\n 1590,\n 1855,\n 1077,\n 1340,\n 2620,\n 2869,\n 2111,\n 2358,\n 3642,\n 3891,\n 3129,\n 3376,\n 928,\n 681,\n 419,\n 170,\n 1958,\n 1711,\n 1445,\n 1196,\n 2988,\n 2725,\n 2479,\n 2214,\n 4010,\n 3747,\n 3497,\n 3232,\n 1120,\n 1385,\n 1635,\n 1898,\n 102,\n 367,\n 613,\n 876,\n 3180,\n 3429,\n 3695,\n 3942,\n 2154,\n 2403,\n 2665,\n 2912,\n 1520,\n 1273,\n 2035,\n 1786,\n 502,\n 255,\n 1013,\n 764,\n 3580,\n 3317,\n 4095,\n 3830,\n 2554,\n 2291,\n 3065,\n 2800,\n 1616,\n 1881,\n 1107,\n 1370,\n 598,\n 863,\n 85,\n 348,\n 3676,\n 3925,\n 3167,\n 3414,\n 2650,\n 2899,\n 2137,\n 2384,\n 1984,\n 1737,\n 1475,\n 1226,\n 966,\n 719,\n 453,\n 204,\n 4044,\n 3781,\n 3535,\n 3270,\n 3018,\n 2755,\n 2505,\n 2240,\n 2240,\n 2505,\n 2755,\n 3018,\n 3270,\n 3535,\n 3781,\n 4044,\n 204,\n 453,\n 719,\n 966,\n 1226,\n 1475,\n 1737,\n 1984,\n 2384,\n 2137,\n 2899,\n 2650,\n 3414,\n 3167,\n 3925,\n 3676,\n 348,\n 85,\n 863,\n 598,\n 1370,\n 1107,\n 1881,\n 1616,\n 2800,\n 3065,\n 2291,\n 2554,\n 3830,\n 4095,\n 3317,\n 3580,\n 764,\n 1013,\n 255,\n 502,\n 1786,\n 2035,\n 1273,\n 1520,\n 2912,\n 2665,\n 2403,\n 2154,\n 3942,\n 3695,\n 3429,\n 3180,\n 876,\n 613,\n 367,\n 102,\n 1898,\n 1635,\n 1385,\n 1120,\n 3232,\n 3497,\n 3747,\n 4010,\n 2214,\n 2479,\n 2725,\n 2988,\n 1196,\n 1445,\n 1711,\n 1958,\n 170,\n 419,\n 681,\n 928,\n 3376,\n 3129,\n 3891,\n 3642,\n 2358,\n 2111,\n 2869,\n 2620,\n 1340,\n 1077,\n 1855,\n 1590,\n 314,\n 51,\n 825,\n 560,\n 3728,\n 3993,\n 3219,\n 3482,\n 2710,\n 2975,\n 2197,\n 2460,\n 1692,\n 1941,\n 1183,\n 1430,\n 666,\n 915,\n 153,\n 400,\n 3840,\n 3593,\n 3331,\n 3082,\n 2822,\n 2575,\n 2309,\n 2060,\n 1804,\n 1541,\n 1295,\n 1030,\n 778,\n 515,\n 265,\n 0\n]);\nconst triTable = new Int32Array([\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 8,\n 3,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 1,\n 9,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 8,\n 3,\n 9,\n 8,\n 1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 2,\n 10,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 8,\n 3,\n 1,\n 2,\n 10,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 2,\n 10,\n 0,\n 2,\n 9,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 2,\n 8,\n 3,\n 2,\n 10,\n 8,\n 10,\n 9,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 11,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 11,\n 2,\n 8,\n 11,\n 0,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 9,\n 0,\n 2,\n 3,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 11,\n 2,\n 1,\n 9,\n 11,\n 9,\n 8,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 10,\n 1,\n 11,\n 10,\n 3,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 10,\n 1,\n 0,\n 8,\n 10,\n 8,\n 11,\n 10,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 9,\n 0,\n 3,\n 11,\n 9,\n 11,\n 10,\n 9,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 8,\n 10,\n 10,\n 8,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 7,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 3,\n 0,\n 7,\n 3,\n 4,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 1,\n 9,\n 8,\n 4,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 1,\n 9,\n 4,\n 7,\n 1,\n 7,\n 3,\n 1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 2,\n 10,\n 8,\n 4,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 4,\n 7,\n 3,\n 0,\n 4,\n 1,\n 2,\n 10,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 2,\n 10,\n 9,\n 0,\n 2,\n 8,\n 4,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 2,\n 10,\n 9,\n 2,\n 9,\n 7,\n 2,\n 7,\n 3,\n 7,\n 9,\n 4,\n -1,\n -1,\n -1,\n -1,\n 8,\n 4,\n 7,\n 3,\n 11,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 11,\n 4,\n 7,\n 11,\n 2,\n 4,\n 2,\n 0,\n 4,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 0,\n 1,\n 8,\n 4,\n 7,\n 2,\n 3,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 7,\n 11,\n 9,\n 4,\n 11,\n 9,\n 11,\n 2,\n 9,\n 2,\n 1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 10,\n 1,\n 3,\n 11,\n 10,\n 7,\n 8,\n 4,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 11,\n 10,\n 1,\n 4,\n 11,\n 1,\n 0,\n 4,\n 7,\n 11,\n 4,\n -1,\n -1,\n -1,\n -1,\n 4,\n 7,\n 8,\n 9,\n 0,\n 11,\n 9,\n 11,\n 10,\n 11,\n 0,\n 3,\n -1,\n -1,\n -1,\n -1,\n 4,\n 7,\n 11,\n 4,\n 11,\n 9,\n 9,\n 11,\n 10,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 5,\n 4,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 5,\n 4,\n 0,\n 8,\n 3,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 5,\n 4,\n 1,\n 5,\n 0,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 8,\n 5,\n 4,\n 8,\n 3,\n 5,\n 3,\n 1,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 2,\n 10,\n 9,\n 5,\n 4,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 0,\n 8,\n 1,\n 2,\n 10,\n 4,\n 9,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 5,\n 2,\n 10,\n 5,\n 4,\n 2,\n 4,\n 0,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 2,\n 10,\n 5,\n 3,\n 2,\n 5,\n 3,\n 5,\n 4,\n 3,\n 4,\n 8,\n -1,\n -1,\n -1,\n -1,\n 9,\n 5,\n 4,\n 2,\n 3,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 11,\n 2,\n 0,\n 8,\n 11,\n 4,\n 9,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 5,\n 4,\n 0,\n 1,\n 5,\n 2,\n 3,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 2,\n 1,\n 5,\n 2,\n 5,\n 8,\n 2,\n 8,\n 11,\n 4,\n 8,\n 5,\n -1,\n -1,\n -1,\n -1,\n 10,\n 3,\n 11,\n 10,\n 1,\n 3,\n 9,\n 5,\n 4,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 9,\n 5,\n 0,\n 8,\n 1,\n 8,\n 10,\n 1,\n 8,\n 11,\n 10,\n -1,\n -1,\n -1,\n -1,\n 5,\n 4,\n 0,\n 5,\n 0,\n 11,\n 5,\n 11,\n 10,\n 11,\n 0,\n 3,\n -1,\n -1,\n -1,\n -1,\n 5,\n 4,\n 8,\n 5,\n 8,\n 10,\n 10,\n 8,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 7,\n 8,\n 5,\n 7,\n 9,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 3,\n 0,\n 9,\n 5,\n 3,\n 5,\n 7,\n 3,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 7,\n 8,\n 0,\n 1,\n 7,\n 1,\n 5,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 5,\n 3,\n 3,\n 5,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 7,\n 8,\n 9,\n 5,\n 7,\n 10,\n 1,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 10,\n 1,\n 2,\n 9,\n 5,\n 0,\n 5,\n 3,\n 0,\n 5,\n 7,\n 3,\n -1,\n -1,\n -1,\n -1,\n 8,\n 0,\n 2,\n 8,\n 2,\n 5,\n 8,\n 5,\n 7,\n 10,\n 5,\n 2,\n -1,\n -1,\n -1,\n -1,\n 2,\n 10,\n 5,\n 2,\n 5,\n 3,\n 3,\n 5,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 7,\n 9,\n 5,\n 7,\n 8,\n 9,\n 3,\n 11,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 5,\n 7,\n 9,\n 7,\n 2,\n 9,\n 2,\n 0,\n 2,\n 7,\n 11,\n -1,\n -1,\n -1,\n -1,\n 2,\n 3,\n 11,\n 0,\n 1,\n 8,\n 1,\n 7,\n 8,\n 1,\n 5,\n 7,\n -1,\n -1,\n -1,\n -1,\n 11,\n 2,\n 1,\n 11,\n 1,\n 7,\n 7,\n 1,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 5,\n 8,\n 8,\n 5,\n 7,\n 10,\n 1,\n 3,\n 10,\n 3,\n 11,\n -1,\n -1,\n -1,\n -1,\n 5,\n 7,\n 0,\n 5,\n 0,\n 9,\n 7,\n 11,\n 0,\n 1,\n 0,\n 10,\n 11,\n 10,\n 0,\n -1,\n 11,\n 10,\n 0,\n 11,\n 0,\n 3,\n 10,\n 5,\n 0,\n 8,\n 0,\n 7,\n 5,\n 7,\n 0,\n -1,\n 11,\n 10,\n 5,\n 7,\n 11,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 10,\n 6,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 8,\n 3,\n 5,\n 10,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 0,\n 1,\n 5,\n 10,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 8,\n 3,\n 1,\n 9,\n 8,\n 5,\n 10,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 6,\n 5,\n 2,\n 6,\n 1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 6,\n 5,\n 1,\n 2,\n 6,\n 3,\n 0,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 6,\n 5,\n 9,\n 0,\n 6,\n 0,\n 2,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 5,\n 9,\n 8,\n 5,\n 8,\n 2,\n 5,\n 2,\n 6,\n 3,\n 2,\n 8,\n -1,\n -1,\n -1,\n -1,\n 2,\n 3,\n 11,\n 10,\n 6,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 11,\n 0,\n 8,\n 11,\n 2,\n 0,\n 10,\n 6,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 1,\n 9,\n 2,\n 3,\n 11,\n 5,\n 10,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 5,\n 10,\n 6,\n 1,\n 9,\n 2,\n 9,\n 11,\n 2,\n 9,\n 8,\n 11,\n -1,\n -1,\n -1,\n -1,\n 6,\n 3,\n 11,\n 6,\n 5,\n 3,\n 5,\n 1,\n 3,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 8,\n 11,\n 0,\n 11,\n 5,\n 0,\n 5,\n 1,\n 5,\n 11,\n 6,\n -1,\n -1,\n -1,\n -1,\n 3,\n 11,\n 6,\n 0,\n 3,\n 6,\n 0,\n 6,\n 5,\n 0,\n 5,\n 9,\n -1,\n -1,\n -1,\n -1,\n 6,\n 5,\n 9,\n 6,\n 9,\n 11,\n 11,\n 9,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 5,\n 10,\n 6,\n 4,\n 7,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 3,\n 0,\n 4,\n 7,\n 3,\n 6,\n 5,\n 10,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 9,\n 0,\n 5,\n 10,\n 6,\n 8,\n 4,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 10,\n 6,\n 5,\n 1,\n 9,\n 7,\n 1,\n 7,\n 3,\n 7,\n 9,\n 4,\n -1,\n -1,\n -1,\n -1,\n 6,\n 1,\n 2,\n 6,\n 5,\n 1,\n 4,\n 7,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 2,\n 5,\n 5,\n 2,\n 6,\n 3,\n 0,\n 4,\n 3,\n 4,\n 7,\n -1,\n -1,\n -1,\n -1,\n 8,\n 4,\n 7,\n 9,\n 0,\n 5,\n 0,\n 6,\n 5,\n 0,\n 2,\n 6,\n -1,\n -1,\n -1,\n -1,\n 7,\n 3,\n 9,\n 7,\n 9,\n 4,\n 3,\n 2,\n 9,\n 5,\n 9,\n 6,\n 2,\n 6,\n 9,\n -1,\n 3,\n 11,\n 2,\n 7,\n 8,\n 4,\n 10,\n 6,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 5,\n 10,\n 6,\n 4,\n 7,\n 2,\n 4,\n 2,\n 0,\n 2,\n 7,\n 11,\n -1,\n -1,\n -1,\n -1,\n 0,\n 1,\n 9,\n 4,\n 7,\n 8,\n 2,\n 3,\n 11,\n 5,\n 10,\n 6,\n -1,\n -1,\n -1,\n -1,\n 9,\n 2,\n 1,\n 9,\n 11,\n 2,\n 9,\n 4,\n 11,\n 7,\n 11,\n 4,\n 5,\n 10,\n 6,\n -1,\n 8,\n 4,\n 7,\n 3,\n 11,\n 5,\n 3,\n 5,\n 1,\n 5,\n 11,\n 6,\n -1,\n -1,\n -1,\n -1,\n 5,\n 1,\n 11,\n 5,\n 11,\n 6,\n 1,\n 0,\n 11,\n 7,\n 11,\n 4,\n 0,\n 4,\n 11,\n -1,\n 0,\n 5,\n 9,\n 0,\n 6,\n 5,\n 0,\n 3,\n 6,\n 11,\n 6,\n 3,\n 8,\n 4,\n 7,\n -1,\n 6,\n 5,\n 9,\n 6,\n 9,\n 11,\n 4,\n 7,\n 9,\n 7,\n 11,\n 9,\n -1,\n -1,\n -1,\n -1,\n 10,\n 4,\n 9,\n 6,\n 4,\n 10,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 10,\n 6,\n 4,\n 9,\n 10,\n 0,\n 8,\n 3,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 10,\n 0,\n 1,\n 10,\n 6,\n 0,\n 6,\n 4,\n 0,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 8,\n 3,\n 1,\n 8,\n 1,\n 6,\n 8,\n 6,\n 4,\n 6,\n 1,\n 10,\n -1,\n -1,\n -1,\n -1,\n 1,\n 4,\n 9,\n 1,\n 2,\n 4,\n 2,\n 6,\n 4,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 0,\n 8,\n 1,\n 2,\n 9,\n 2,\n 4,\n 9,\n 2,\n 6,\n 4,\n -1,\n -1,\n -1,\n -1,\n 0,\n 2,\n 4,\n 4,\n 2,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 8,\n 3,\n 2,\n 8,\n 2,\n 4,\n 4,\n 2,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 10,\n 4,\n 9,\n 10,\n 6,\n 4,\n 11,\n 2,\n 3,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 8,\n 2,\n 2,\n 8,\n 11,\n 4,\n 9,\n 10,\n 4,\n 10,\n 6,\n -1,\n -1,\n -1,\n -1,\n 3,\n 11,\n 2,\n 0,\n 1,\n 6,\n 0,\n 6,\n 4,\n 6,\n 1,\n 10,\n -1,\n -1,\n -1,\n -1,\n 6,\n 4,\n 1,\n 6,\n 1,\n 10,\n 4,\n 8,\n 1,\n 2,\n 1,\n 11,\n 8,\n 11,\n 1,\n -1,\n 9,\n 6,\n 4,\n 9,\n 3,\n 6,\n 9,\n 1,\n 3,\n 11,\n 6,\n 3,\n -1,\n -1,\n -1,\n -1,\n 8,\n 11,\n 1,\n 8,\n 1,\n 0,\n 11,\n 6,\n 1,\n 9,\n 1,\n 4,\n 6,\n 4,\n 1,\n -1,\n 3,\n 11,\n 6,\n 3,\n 6,\n 0,\n 0,\n 6,\n 4,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 6,\n 4,\n 8,\n 11,\n 6,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 7,\n 10,\n 6,\n 7,\n 8,\n 10,\n 8,\n 9,\n 10,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 7,\n 3,\n 0,\n 10,\n 7,\n 0,\n 9,\n 10,\n 6,\n 7,\n 10,\n -1,\n -1,\n -1,\n -1,\n 10,\n 6,\n 7,\n 1,\n 10,\n 7,\n 1,\n 7,\n 8,\n 1,\n 8,\n 0,\n -1,\n -1,\n -1,\n -1,\n 10,\n 6,\n 7,\n 10,\n 7,\n 1,\n 1,\n 7,\n 3,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 2,\n 6,\n 1,\n 6,\n 8,\n 1,\n 8,\n 9,\n 8,\n 6,\n 7,\n -1,\n -1,\n -1,\n -1,\n 2,\n 6,\n 9,\n 2,\n 9,\n 1,\n 6,\n 7,\n 9,\n 0,\n 9,\n 3,\n 7,\n 3,\n 9,\n -1,\n 7,\n 8,\n 0,\n 7,\n 0,\n 6,\n 6,\n 0,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 7,\n 3,\n 2,\n 6,\n 7,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 2,\n 3,\n 11,\n 10,\n 6,\n 8,\n 10,\n 8,\n 9,\n 8,\n 6,\n 7,\n -1,\n -1,\n -1,\n -1,\n 2,\n 0,\n 7,\n 2,\n 7,\n 11,\n 0,\n 9,\n 7,\n 6,\n 7,\n 10,\n 9,\n 10,\n 7,\n -1,\n 1,\n 8,\n 0,\n 1,\n 7,\n 8,\n 1,\n 10,\n 7,\n 6,\n 7,\n 10,\n 2,\n 3,\n 11,\n -1,\n 11,\n 2,\n 1,\n 11,\n 1,\n 7,\n 10,\n 6,\n 1,\n 6,\n 7,\n 1,\n -1,\n -1,\n -1,\n -1,\n 8,\n 9,\n 6,\n 8,\n 6,\n 7,\n 9,\n 1,\n 6,\n 11,\n 6,\n 3,\n 1,\n 3,\n 6,\n -1,\n 0,\n 9,\n 1,\n 11,\n 6,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 7,\n 8,\n 0,\n 7,\n 0,\n 6,\n 3,\n 11,\n 0,\n 11,\n 6,\n 0,\n -1,\n -1,\n -1,\n -1,\n 7,\n 11,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 7,\n 6,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 0,\n 8,\n 11,\n 7,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 1,\n 9,\n 11,\n 7,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 8,\n 1,\n 9,\n 8,\n 3,\n 1,\n 11,\n 7,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 10,\n 1,\n 2,\n 6,\n 11,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 2,\n 10,\n 3,\n 0,\n 8,\n 6,\n 11,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 2,\n 9,\n 0,\n 2,\n 10,\n 9,\n 6,\n 11,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 6,\n 11,\n 7,\n 2,\n 10,\n 3,\n 10,\n 8,\n 3,\n 10,\n 9,\n 8,\n -1,\n -1,\n -1,\n -1,\n 7,\n 2,\n 3,\n 6,\n 2,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 7,\n 0,\n 8,\n 7,\n 6,\n 0,\n 6,\n 2,\n 0,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 2,\n 7,\n 6,\n 2,\n 3,\n 7,\n 0,\n 1,\n 9,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 6,\n 2,\n 1,\n 8,\n 6,\n 1,\n 9,\n 8,\n 8,\n 7,\n 6,\n -1,\n -1,\n -1,\n -1,\n 10,\n 7,\n 6,\n 10,\n 1,\n 7,\n 1,\n 3,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 10,\n 7,\n 6,\n 1,\n 7,\n 10,\n 1,\n 8,\n 7,\n 1,\n 0,\n 8,\n -1,\n -1,\n -1,\n -1,\n 0,\n 3,\n 7,\n 0,\n 7,\n 10,\n 0,\n 10,\n 9,\n 6,\n 10,\n 7,\n -1,\n -1,\n -1,\n -1,\n 7,\n 6,\n 10,\n 7,\n 10,\n 8,\n 8,\n 10,\n 9,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 6,\n 8,\n 4,\n 11,\n 8,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 6,\n 11,\n 3,\n 0,\n 6,\n 0,\n 4,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 8,\n 6,\n 11,\n 8,\n 4,\n 6,\n 9,\n 0,\n 1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 4,\n 6,\n 9,\n 6,\n 3,\n 9,\n 3,\n 1,\n 11,\n 3,\n 6,\n -1,\n -1,\n -1,\n -1,\n 6,\n 8,\n 4,\n 6,\n 11,\n 8,\n 2,\n 10,\n 1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 2,\n 10,\n 3,\n 0,\n 11,\n 0,\n 6,\n 11,\n 0,\n 4,\n 6,\n -1,\n -1,\n -1,\n -1,\n 4,\n 11,\n 8,\n 4,\n 6,\n 11,\n 0,\n 2,\n 9,\n 2,\n 10,\n 9,\n -1,\n -1,\n -1,\n -1,\n 10,\n 9,\n 3,\n 10,\n 3,\n 2,\n 9,\n 4,\n 3,\n 11,\n 3,\n 6,\n 4,\n 6,\n 3,\n -1,\n 8,\n 2,\n 3,\n 8,\n 4,\n 2,\n 4,\n 6,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 4,\n 2,\n 4,\n 6,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 9,\n 0,\n 2,\n 3,\n 4,\n 2,\n 4,\n 6,\n 4,\n 3,\n 8,\n -1,\n -1,\n -1,\n -1,\n 1,\n 9,\n 4,\n 1,\n 4,\n 2,\n 2,\n 4,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 8,\n 1,\n 3,\n 8,\n 6,\n 1,\n 8,\n 4,\n 6,\n 6,\n 10,\n 1,\n -1,\n -1,\n -1,\n -1,\n 10,\n 1,\n 0,\n 10,\n 0,\n 6,\n 6,\n 0,\n 4,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 6,\n 3,\n 4,\n 3,\n 8,\n 6,\n 10,\n 3,\n 0,\n 3,\n 9,\n 10,\n 9,\n 3,\n -1,\n 10,\n 9,\n 4,\n 6,\n 10,\n 4,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 9,\n 5,\n 7,\n 6,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 8,\n 3,\n 4,\n 9,\n 5,\n 11,\n 7,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 5,\n 0,\n 1,\n 5,\n 4,\n 0,\n 7,\n 6,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 11,\n 7,\n 6,\n 8,\n 3,\n 4,\n 3,\n 5,\n 4,\n 3,\n 1,\n 5,\n -1,\n -1,\n -1,\n -1,\n 9,\n 5,\n 4,\n 10,\n 1,\n 2,\n 7,\n 6,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 6,\n 11,\n 7,\n 1,\n 2,\n 10,\n 0,\n 8,\n 3,\n 4,\n 9,\n 5,\n -1,\n -1,\n -1,\n -1,\n 7,\n 6,\n 11,\n 5,\n 4,\n 10,\n 4,\n 2,\n 10,\n 4,\n 0,\n 2,\n -1,\n -1,\n -1,\n -1,\n 3,\n 4,\n 8,\n 3,\n 5,\n 4,\n 3,\n 2,\n 5,\n 10,\n 5,\n 2,\n 11,\n 7,\n 6,\n -1,\n 7,\n 2,\n 3,\n 7,\n 6,\n 2,\n 5,\n 4,\n 9,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 5,\n 4,\n 0,\n 8,\n 6,\n 0,\n 6,\n 2,\n 6,\n 8,\n 7,\n -1,\n -1,\n -1,\n -1,\n 3,\n 6,\n 2,\n 3,\n 7,\n 6,\n 1,\n 5,\n 0,\n 5,\n 4,\n 0,\n -1,\n -1,\n -1,\n -1,\n 6,\n 2,\n 8,\n 6,\n 8,\n 7,\n 2,\n 1,\n 8,\n 4,\n 8,\n 5,\n 1,\n 5,\n 8,\n -1,\n 9,\n 5,\n 4,\n 10,\n 1,\n 6,\n 1,\n 7,\n 6,\n 1,\n 3,\n 7,\n -1,\n -1,\n -1,\n -1,\n 1,\n 6,\n 10,\n 1,\n 7,\n 6,\n 1,\n 0,\n 7,\n 8,\n 7,\n 0,\n 9,\n 5,\n 4,\n -1,\n 4,\n 0,\n 10,\n 4,\n 10,\n 5,\n 0,\n 3,\n 10,\n 6,\n 10,\n 7,\n 3,\n 7,\n 10,\n -1,\n 7,\n 6,\n 10,\n 7,\n 10,\n 8,\n 5,\n 4,\n 10,\n 4,\n 8,\n 10,\n -1,\n -1,\n -1,\n -1,\n 6,\n 9,\n 5,\n 6,\n 11,\n 9,\n 11,\n 8,\n 9,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 6,\n 11,\n 0,\n 6,\n 3,\n 0,\n 5,\n 6,\n 0,\n 9,\n 5,\n -1,\n -1,\n -1,\n -1,\n 0,\n 11,\n 8,\n 0,\n 5,\n 11,\n 0,\n 1,\n 5,\n 5,\n 6,\n 11,\n -1,\n -1,\n -1,\n -1,\n 6,\n 11,\n 3,\n 6,\n 3,\n 5,\n 5,\n 3,\n 1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 2,\n 10,\n 9,\n 5,\n 11,\n 9,\n 11,\n 8,\n 11,\n 5,\n 6,\n -1,\n -1,\n -1,\n -1,\n 0,\n 11,\n 3,\n 0,\n 6,\n 11,\n 0,\n 9,\n 6,\n 5,\n 6,\n 9,\n 1,\n 2,\n 10,\n -1,\n 11,\n 8,\n 5,\n 11,\n 5,\n 6,\n 8,\n 0,\n 5,\n 10,\n 5,\n 2,\n 0,\n 2,\n 5,\n -1,\n 6,\n 11,\n 3,\n 6,\n 3,\n 5,\n 2,\n 10,\n 3,\n 10,\n 5,\n 3,\n -1,\n -1,\n -1,\n -1,\n 5,\n 8,\n 9,\n 5,\n 2,\n 8,\n 5,\n 6,\n 2,\n 3,\n 8,\n 2,\n -1,\n -1,\n -1,\n -1,\n 9,\n 5,\n 6,\n 9,\n 6,\n 0,\n 0,\n 6,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 5,\n 8,\n 1,\n 8,\n 0,\n 5,\n 6,\n 8,\n 3,\n 8,\n 2,\n 6,\n 2,\n 8,\n -1,\n 1,\n 5,\n 6,\n 2,\n 1,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 3,\n 6,\n 1,\n 6,\n 10,\n 3,\n 8,\n 6,\n 5,\n 6,\n 9,\n 8,\n 9,\n 6,\n -1,\n 10,\n 1,\n 0,\n 10,\n 0,\n 6,\n 9,\n 5,\n 0,\n 5,\n 6,\n 0,\n -1,\n -1,\n -1,\n -1,\n 0,\n 3,\n 8,\n 5,\n 6,\n 10,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 10,\n 5,\n 6,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 11,\n 5,\n 10,\n 7,\n 5,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 11,\n 5,\n 10,\n 11,\n 7,\n 5,\n 8,\n 3,\n 0,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 5,\n 11,\n 7,\n 5,\n 10,\n 11,\n 1,\n 9,\n 0,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 10,\n 7,\n 5,\n 10,\n 11,\n 7,\n 9,\n 8,\n 1,\n 8,\n 3,\n 1,\n -1,\n -1,\n -1,\n -1,\n 11,\n 1,\n 2,\n 11,\n 7,\n 1,\n 7,\n 5,\n 1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 8,\n 3,\n 1,\n 2,\n 7,\n 1,\n 7,\n 5,\n 7,\n 2,\n 11,\n -1,\n -1,\n -1,\n -1,\n 9,\n 7,\n 5,\n 9,\n 2,\n 7,\n 9,\n 0,\n 2,\n 2,\n 11,\n 7,\n -1,\n -1,\n -1,\n -1,\n 7,\n 5,\n 2,\n 7,\n 2,\n 11,\n 5,\n 9,\n 2,\n 3,\n 2,\n 8,\n 9,\n 8,\n 2,\n -1,\n 2,\n 5,\n 10,\n 2,\n 3,\n 5,\n 3,\n 7,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 8,\n 2,\n 0,\n 8,\n 5,\n 2,\n 8,\n 7,\n 5,\n 10,\n 2,\n 5,\n -1,\n -1,\n -1,\n -1,\n 9,\n 0,\n 1,\n 5,\n 10,\n 3,\n 5,\n 3,\n 7,\n 3,\n 10,\n 2,\n -1,\n -1,\n -1,\n -1,\n 9,\n 8,\n 2,\n 9,\n 2,\n 1,\n 8,\n 7,\n 2,\n 10,\n 2,\n 5,\n 7,\n 5,\n 2,\n -1,\n 1,\n 3,\n 5,\n 3,\n 7,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 8,\n 7,\n 0,\n 7,\n 1,\n 1,\n 7,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 0,\n 3,\n 9,\n 3,\n 5,\n 5,\n 3,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 8,\n 7,\n 5,\n 9,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 5,\n 8,\n 4,\n 5,\n 10,\n 8,\n 10,\n 11,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 5,\n 0,\n 4,\n 5,\n 11,\n 0,\n 5,\n 10,\n 11,\n 11,\n 3,\n 0,\n -1,\n -1,\n -1,\n -1,\n 0,\n 1,\n 9,\n 8,\n 4,\n 10,\n 8,\n 10,\n 11,\n 10,\n 4,\n 5,\n -1,\n -1,\n -1,\n -1,\n 10,\n 11,\n 4,\n 10,\n 4,\n 5,\n 11,\n 3,\n 4,\n 9,\n 4,\n 1,\n 3,\n 1,\n 4,\n -1,\n 2,\n 5,\n 1,\n 2,\n 8,\n 5,\n 2,\n 11,\n 8,\n 4,\n 5,\n 8,\n -1,\n -1,\n -1,\n -1,\n 0,\n 4,\n 11,\n 0,\n 11,\n 3,\n 4,\n 5,\n 11,\n 2,\n 11,\n 1,\n 5,\n 1,\n 11,\n -1,\n 0,\n 2,\n 5,\n 0,\n 5,\n 9,\n 2,\n 11,\n 5,\n 4,\n 5,\n 8,\n 11,\n 8,\n 5,\n -1,\n 9,\n 4,\n 5,\n 2,\n 11,\n 3,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 2,\n 5,\n 10,\n 3,\n 5,\n 2,\n 3,\n 4,\n 5,\n 3,\n 8,\n 4,\n -1,\n -1,\n -1,\n -1,\n 5,\n 10,\n 2,\n 5,\n 2,\n 4,\n 4,\n 2,\n 0,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 10,\n 2,\n 3,\n 5,\n 10,\n 3,\n 8,\n 5,\n 4,\n 5,\n 8,\n 0,\n 1,\n 9,\n -1,\n 5,\n 10,\n 2,\n 5,\n 2,\n 4,\n 1,\n 9,\n 2,\n 9,\n 4,\n 2,\n -1,\n -1,\n -1,\n -1,\n 8,\n 4,\n 5,\n 8,\n 5,\n 3,\n 3,\n 5,\n 1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 4,\n 5,\n 1,\n 0,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 8,\n 4,\n 5,\n 8,\n 5,\n 3,\n 9,\n 0,\n 5,\n 0,\n 3,\n 5,\n -1,\n -1,\n -1,\n -1,\n 9,\n 4,\n 5,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 11,\n 7,\n 4,\n 9,\n 11,\n 9,\n 10,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 8,\n 3,\n 4,\n 9,\n 7,\n 9,\n 11,\n 7,\n 9,\n 10,\n 11,\n -1,\n -1,\n -1,\n -1,\n 1,\n 10,\n 11,\n 1,\n 11,\n 4,\n 1,\n 4,\n 0,\n 7,\n 4,\n 11,\n -1,\n -1,\n -1,\n -1,\n 3,\n 1,\n 4,\n 3,\n 4,\n 8,\n 1,\n 10,\n 4,\n 7,\n 4,\n 11,\n 10,\n 11,\n 4,\n -1,\n 4,\n 11,\n 7,\n 9,\n 11,\n 4,\n 9,\n 2,\n 11,\n 9,\n 1,\n 2,\n -1,\n -1,\n -1,\n -1,\n 9,\n 7,\n 4,\n 9,\n 11,\n 7,\n 9,\n 1,\n 11,\n 2,\n 11,\n 1,\n 0,\n 8,\n 3,\n -1,\n 11,\n 7,\n 4,\n 11,\n 4,\n 2,\n 2,\n 4,\n 0,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 11,\n 7,\n 4,\n 11,\n 4,\n 2,\n 8,\n 3,\n 4,\n 3,\n 2,\n 4,\n -1,\n -1,\n -1,\n -1,\n 2,\n 9,\n 10,\n 2,\n 7,\n 9,\n 2,\n 3,\n 7,\n 7,\n 4,\n 9,\n -1,\n -1,\n -1,\n -1,\n 9,\n 10,\n 7,\n 9,\n 7,\n 4,\n 10,\n 2,\n 7,\n 8,\n 7,\n 0,\n 2,\n 0,\n 7,\n -1,\n 3,\n 7,\n 10,\n 3,\n 10,\n 2,\n 7,\n 4,\n 10,\n 1,\n 10,\n 0,\n 4,\n 0,\n 10,\n -1,\n 1,\n 10,\n 2,\n 8,\n 7,\n 4,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 9,\n 1,\n 4,\n 1,\n 7,\n 7,\n 1,\n 3,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 9,\n 1,\n 4,\n 1,\n 7,\n 0,\n 8,\n 1,\n 8,\n 7,\n 1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 0,\n 3,\n 7,\n 4,\n 3,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 4,\n 8,\n 7,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 10,\n 8,\n 10,\n 11,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 0,\n 9,\n 3,\n 9,\n 11,\n 11,\n 9,\n 10,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 1,\n 10,\n 0,\n 10,\n 8,\n 8,\n 10,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 1,\n 10,\n 11,\n 3,\n 10,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 2,\n 11,\n 1,\n 11,\n 9,\n 9,\n 11,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 0,\n 9,\n 3,\n 9,\n 11,\n 1,\n 2,\n 9,\n 2,\n 11,\n 9,\n -1,\n -1,\n -1,\n -1,\n 0,\n 2,\n 11,\n 8,\n 0,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 3,\n 2,\n 11,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 2,\n 3,\n 8,\n 2,\n 8,\n 10,\n 10,\n 8,\n 9,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 9,\n 10,\n 2,\n 0,\n 9,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 2,\n 3,\n 8,\n 2,\n 8,\n 10,\n 0,\n 1,\n 8,\n 1,\n 10,\n 8,\n -1,\n -1,\n -1,\n -1,\n 1,\n 10,\n 2,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 1,\n 3,\n 8,\n 9,\n 1,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 9,\n 1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n 0,\n 3,\n 8,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1,\n -1\n]);\nexport {\n MarchingCubes,\n edgeTable,\n triTable\n};\n//# sourceMappingURL=MarchingCubes.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nclass SimplexNoise {\n /**\n * You can pass in a random number generator object if you like.\n * It is assumed to have a random() method.\n */\n constructor(r = Math) {\n __publicField(this, \"grad3\", [\n [1, 1, 0],\n [-1, 1, 0],\n [1, -1, 0],\n [-1, -1, 0],\n [1, 0, 1],\n [-1, 0, 1],\n [1, 0, -1],\n [-1, 0, -1],\n [0, 1, 1],\n [0, -1, 1],\n [0, 1, -1],\n [0, -1, -1]\n ]);\n __publicField(this, \"grad4\", [\n [0, 1, 1, 1],\n [0, 1, 1, -1],\n [0, 1, -1, 1],\n [0, 1, -1, -1],\n [0, -1, 1, 1],\n [0, -1, 1, -1],\n [0, -1, -1, 1],\n [0, -1, -1, -1],\n [1, 0, 1, 1],\n [1, 0, 1, -1],\n [1, 0, -1, 1],\n [1, 0, -1, -1],\n [-1, 0, 1, 1],\n [-1, 0, 1, -1],\n [-1, 0, -1, 1],\n [-1, 0, -1, -1],\n [1, 1, 0, 1],\n [1, 1, 0, -1],\n [1, -1, 0, 1],\n [1, -1, 0, -1],\n [-1, 1, 0, 1],\n [-1, 1, 0, -1],\n [-1, -1, 0, 1],\n [-1, -1, 0, -1],\n [1, 1, 1, 0],\n [1, 1, -1, 0],\n [1, -1, 1, 0],\n [1, -1, -1, 0],\n [-1, 1, 1, 0],\n [-1, 1, -1, 0],\n [-1, -1, 1, 0],\n [-1, -1, -1, 0]\n ]);\n __publicField(this, \"p\", []);\n // To remove the need for index wrapping, double the permutation table length\n __publicField(this, \"perm\", []);\n // A lookup table to traverse the simplex around a given point in 4D.\n // Details can be found where this table is used, in the 4D noise method.\n __publicField(this, \"simplex\", [\n [0, 1, 2, 3],\n [0, 1, 3, 2],\n [0, 0, 0, 0],\n [0, 2, 3, 1],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [1, 2, 3, 0],\n [0, 2, 1, 3],\n [0, 0, 0, 0],\n [0, 3, 1, 2],\n [0, 3, 2, 1],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [1, 3, 2, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [1, 2, 0, 3],\n [0, 0, 0, 0],\n [1, 3, 0, 2],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [2, 3, 0, 1],\n [2, 3, 1, 0],\n [1, 0, 2, 3],\n [1, 0, 3, 2],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [2, 0, 3, 1],\n [0, 0, 0, 0],\n [2, 1, 3, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [2, 0, 1, 3],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [3, 0, 1, 2],\n [3, 0, 2, 1],\n [0, 0, 0, 0],\n [3, 1, 2, 0],\n [2, 1, 0, 3],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [0, 0, 0, 0],\n [3, 1, 0, 2],\n [0, 0, 0, 0],\n [3, 2, 0, 1],\n [3, 2, 1, 0]\n ]);\n __publicField(this, \"dot\", (g, x, y) => {\n return g[0] * x + g[1] * y;\n });\n __publicField(this, \"dot3\", (g, x, y, z) => {\n return g[0] * x + g[1] * y + g[2] * z;\n });\n __publicField(this, \"dot4\", (g, x, y, z, w) => {\n return g[0] * x + g[1] * y + g[2] * z + g[3] * w;\n });\n __publicField(this, \"noise\", (xin, yin) => {\n let n0;\n let n1;\n let n2;\n const F2 = 0.5 * (Math.sqrt(3) - 1);\n const s = (xin + yin) * F2;\n const i = Math.floor(xin + s);\n const j = Math.floor(yin + s);\n const G2 = (3 - Math.sqrt(3)) / 6;\n const t = (i + j) * G2;\n const X0 = i - t;\n const Y0 = j - t;\n const x0 = xin - X0;\n const y0 = yin - Y0;\n let i1 = 0;\n let j1 = 1;\n if (x0 > y0) {\n i1 = 1;\n j1 = 0;\n }\n const x1 = x0 - i1 + G2;\n const y1 = y0 - j1 + G2;\n const x2 = x0 - 1 + 2 * G2;\n const y2 = y0 - 1 + 2 * G2;\n const ii = i & 255;\n const jj = j & 255;\n const gi0 = this.perm[ii + this.perm[jj]] % 12;\n const gi1 = this.perm[ii + i1 + this.perm[jj + j1]] % 12;\n const gi2 = this.perm[ii + 1 + this.perm[jj + 1]] % 12;\n let t0 = 0.5 - x0 * x0 - y0 * y0;\n if (t0 < 0) {\n n0 = 0;\n } else {\n t0 *= t0;\n n0 = t0 * t0 * this.dot(this.grad3[gi0], x0, y0);\n }\n let t1 = 0.5 - x1 * x1 - y1 * y1;\n if (t1 < 0) {\n n1 = 0;\n } else {\n t1 *= t1;\n n1 = t1 * t1 * this.dot(this.grad3[gi1], x1, y1);\n }\n let t2 = 0.5 - x2 * x2 - y2 * y2;\n if (t2 < 0) {\n n2 = 0;\n } else {\n t2 *= t2;\n n2 = t2 * t2 * this.dot(this.grad3[gi2], x2, y2);\n }\n return 70 * (n0 + n1 + n2);\n });\n // 3D simplex noise\n __publicField(this, \"noise3d\", (xin, yin, zin) => {\n let n0;\n let n1;\n let n2;\n let n3;\n const F3 = 1 / 3;\n const s = (xin + yin + zin) * F3;\n const i = Math.floor(xin + s);\n const j = Math.floor(yin + s);\n const k = Math.floor(zin + s);\n const G3 = 1 / 6;\n const t = (i + j + k) * G3;\n const X0 = i - t;\n const Y0 = j - t;\n const Z0 = k - t;\n const x0 = xin - X0;\n const y0 = yin - Y0;\n const z0 = zin - Z0;\n let i1;\n let j1;\n let k1;\n let i2;\n let j2;\n let k2;\n if (x0 >= y0) {\n if (y0 >= z0) {\n i1 = 1;\n j1 = 0;\n k1 = 0;\n i2 = 1;\n j2 = 1;\n k2 = 0;\n } else if (x0 >= z0) {\n i1 = 1;\n j1 = 0;\n k1 = 0;\n i2 = 1;\n j2 = 0;\n k2 = 1;\n } else {\n i1 = 0;\n j1 = 0;\n k1 = 1;\n i2 = 1;\n j2 = 0;\n k2 = 1;\n }\n } else {\n if (y0 < z0) {\n i1 = 0;\n j1 = 0;\n k1 = 1;\n i2 = 0;\n j2 = 1;\n k2 = 1;\n } else if (x0 < z0) {\n i1 = 0;\n j1 = 1;\n k1 = 0;\n i2 = 0;\n j2 = 1;\n k2 = 1;\n } else {\n i1 = 0;\n j1 = 1;\n k1 = 0;\n i2 = 1;\n j2 = 1;\n k2 = 0;\n }\n }\n const x1 = x0 - i1 + G3;\n const y1 = y0 - j1 + G3;\n const z1 = z0 - k1 + G3;\n const x2 = x0 - i2 + 2 * G3;\n const y2 = y0 - j2 + 2 * G3;\n const z2 = z0 - k2 + 2 * G3;\n const x3 = x0 - 1 + 3 * G3;\n const y3 = y0 - 1 + 3 * G3;\n const z3 = z0 - 1 + 3 * G3;\n const ii = i & 255;\n const jj = j & 255;\n const kk = k & 255;\n const gi0 = this.perm[ii + this.perm[jj + this.perm[kk]]] % 12;\n const gi1 = this.perm[ii + i1 + this.perm[jj + j1 + this.perm[kk + k1]]] % 12;\n const gi2 = this.perm[ii + i2 + this.perm[jj + j2 + this.perm[kk + k2]]] % 12;\n const gi3 = this.perm[ii + 1 + this.perm[jj + 1 + this.perm[kk + 1]]] % 12;\n let t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0;\n if (t0 < 0) {\n n0 = 0;\n } else {\n t0 *= t0;\n n0 = t0 * t0 * this.dot3(this.grad3[gi0], x0, y0, z0);\n }\n let t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1;\n if (t1 < 0) {\n n1 = 0;\n } else {\n t1 *= t1;\n n1 = t1 * t1 * this.dot3(this.grad3[gi1], x1, y1, z1);\n }\n let t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2;\n if (t2 < 0) {\n n2 = 0;\n } else {\n t2 *= t2;\n n2 = t2 * t2 * this.dot3(this.grad3[gi2], x2, y2, z2);\n }\n let t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3;\n if (t3 < 0) {\n n3 = 0;\n } else {\n t3 *= t3;\n n3 = t3 * t3 * this.dot3(this.grad3[gi3], x3, y3, z3);\n }\n return 32 * (n0 + n1 + n2 + n3);\n });\n // 4D simplex noise\n __publicField(this, \"noise4d\", (x, y, z, w) => {\n const grad4 = this.grad4;\n const simplex = this.simplex;\n const perm = this.perm;\n const F4 = (Math.sqrt(5) - 1) / 4;\n const G4 = (5 - Math.sqrt(5)) / 20;\n let n0;\n let n1;\n let n2;\n let n3;\n let n4;\n const s = (x + y + z + w) * F4;\n const i = Math.floor(x + s);\n const j = Math.floor(y + s);\n const k = Math.floor(z + s);\n const l = Math.floor(w + s);\n const t = (i + j + k + l) * G4;\n const X0 = i - t;\n const Y0 = j - t;\n const Z0 = k - t;\n const W0 = l - t;\n const x0 = x - X0;\n const y0 = y - Y0;\n const z0 = z - Z0;\n const w0 = w - W0;\n const c1 = x0 > y0 ? 32 : 0;\n const c2 = x0 > z0 ? 16 : 0;\n const c3 = y0 > z0 ? 8 : 0;\n const c4 = x0 > w0 ? 4 : 0;\n const c5 = y0 > w0 ? 2 : 0;\n const c6 = z0 > w0 ? 1 : 0;\n const c = c1 + c2 + c3 + c4 + c5 + c6;\n let i1;\n let j1;\n let k1;\n let l1;\n let i2;\n let j2;\n let k2;\n let l2;\n let i3;\n let j3;\n let k3;\n let l3;\n i1 = simplex[c][0] >= 3 ? 1 : 0;\n j1 = simplex[c][1] >= 3 ? 1 : 0;\n k1 = simplex[c][2] >= 3 ? 1 : 0;\n l1 = simplex[c][3] >= 3 ? 1 : 0;\n i2 = simplex[c][0] >= 2 ? 1 : 0;\n j2 = simplex[c][1] >= 2 ? 1 : 0;\n k2 = simplex[c][2] >= 2 ? 1 : 0;\n l2 = simplex[c][3] >= 2 ? 1 : 0;\n i3 = simplex[c][0] >= 1 ? 1 : 0;\n j3 = simplex[c][1] >= 1 ? 1 : 0;\n k3 = simplex[c][2] >= 1 ? 1 : 0;\n l3 = simplex[c][3] >= 1 ? 1 : 0;\n const x1 = x0 - i1 + G4;\n const y1 = y0 - j1 + G4;\n const z1 = z0 - k1 + G4;\n const w1 = w0 - l1 + G4;\n const x2 = x0 - i2 + 2 * G4;\n const y2 = y0 - j2 + 2 * G4;\n const z2 = z0 - k2 + 2 * G4;\n const w2 = w0 - l2 + 2 * G4;\n const x3 = x0 - i3 + 3 * G4;\n const y3 = y0 - j3 + 3 * G4;\n const z3 = z0 - k3 + 3 * G4;\n const w3 = w0 - l3 + 3 * G4;\n const x4 = x0 - 1 + 4 * G4;\n const y4 = y0 - 1 + 4 * G4;\n const z4 = z0 - 1 + 4 * G4;\n const w4 = w0 - 1 + 4 * G4;\n const ii = i & 255;\n const jj = j & 255;\n const kk = k & 255;\n const ll = l & 255;\n const gi0 = perm[ii + perm[jj + perm[kk + perm[ll]]]] % 32;\n const gi1 = perm[ii + i1 + perm[jj + j1 + perm[kk + k1 + perm[ll + l1]]]] % 32;\n const gi2 = perm[ii + i2 + perm[jj + j2 + perm[kk + k2 + perm[ll + l2]]]] % 32;\n const gi3 = perm[ii + i3 + perm[jj + j3 + perm[kk + k3 + perm[ll + l3]]]] % 32;\n const gi4 = perm[ii + 1 + perm[jj + 1 + perm[kk + 1 + perm[ll + 1]]]] % 32;\n let t0 = 0.6 - x0 * x0 - y0 * y0 - z0 * z0 - w0 * w0;\n if (t0 < 0) {\n n0 = 0;\n } else {\n t0 *= t0;\n n0 = t0 * t0 * this.dot4(grad4[gi0], x0, y0, z0, w0);\n }\n let t1 = 0.6 - x1 * x1 - y1 * y1 - z1 * z1 - w1 * w1;\n if (t1 < 0) {\n n1 = 0;\n } else {\n t1 *= t1;\n n1 = t1 * t1 * this.dot4(grad4[gi1], x1, y1, z1, w1);\n }\n let t2 = 0.6 - x2 * x2 - y2 * y2 - z2 * z2 - w2 * w2;\n if (t2 < 0) {\n n2 = 0;\n } else {\n t2 *= t2;\n n2 = t2 * t2 * this.dot4(grad4[gi2], x2, y2, z2, w2);\n }\n let t3 = 0.6 - x3 * x3 - y3 * y3 - z3 * z3 - w3 * w3;\n if (t3 < 0) {\n n3 = 0;\n } else {\n t3 *= t3;\n n3 = t3 * t3 * this.dot4(grad4[gi3], x3, y3, z3, w3);\n }\n let t4 = 0.6 - x4 * x4 - y4 * y4 - z4 * z4 - w4 * w4;\n if (t4 < 0) {\n n4 = 0;\n } else {\n t4 *= t4;\n n4 = t4 * t4 * this.dot4(grad4[gi4], x4, y4, z4, w4);\n }\n return 27 * (n0 + n1 + n2 + n3 + n4);\n });\n for (let i = 0; i < 256; i++) {\n this.p[i] = Math.floor(r.random() * 256);\n }\n for (let i = 0; i < 512; i++) {\n this.perm[i] = this.p[i & 255];\n }\n }\n}\nexport {\n SimplexNoise\n};\n//# sourceMappingURL=SimplexNoise.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { BufferGeometry, Vector3, Uint32BufferAttribute, Float32BufferAttribute, DynamicDrawUsage, MathUtils } from \"three\";\nimport { SimplexNoise } from \"../math/SimplexNoise.js\";\nconst LightningStrike = /* @__PURE__ */ (() => {\n const _LightningStrike = class extends BufferGeometry {\n constructor(rayParameters = {}) {\n super();\n this.isLightningStrike = true;\n this.type = \"LightningStrike\";\n this.init(_LightningStrike.copyParameters(rayParameters, rayParameters));\n this.createMesh();\n }\n static createRandomGenerator() {\n const numSeeds = 2053;\n const seeds = [];\n for (let i = 0; i < numSeeds; i++) {\n seeds.push(Math.random());\n }\n const generator = {\n currentSeed: 0,\n random: function() {\n const value = seeds[generator.currentSeed];\n generator.currentSeed = (generator.currentSeed + 1) % numSeeds;\n return value;\n },\n getSeed: function() {\n return generator.currentSeed / numSeeds;\n },\n setSeed: function(seed) {\n generator.currentSeed = Math.floor(seed * numSeeds) % numSeeds;\n }\n };\n return generator;\n }\n static copyParameters(dest = {}, source = {}) {\n const vecCopy = function(v) {\n if (source === dest) {\n return v;\n } else {\n return v.clone();\n }\n };\n dest.sourceOffset = source.sourceOffset !== void 0 ? vecCopy(source.sourceOffset) : new Vector3(0, 100, 0), dest.destOffset = source.destOffset !== void 0 ? vecCopy(source.destOffset) : new Vector3(0, 0, 0), dest.timeScale = source.timeScale !== void 0 ? source.timeScale : 1, dest.roughness = source.roughness !== void 0 ? source.roughness : 0.9, dest.straightness = source.straightness !== void 0 ? source.straightness : 0.7, dest.up0 = source.up0 !== void 0 ? vecCopy(source.up0) : new Vector3(0, 0, 1);\n dest.up1 = source.up1 !== void 0 ? vecCopy(source.up1) : new Vector3(0, 0, 1), dest.radius0 = source.radius0 !== void 0 ? source.radius0 : 1, dest.radius1 = source.radius1 !== void 0 ? source.radius1 : 1, dest.radius0Factor = source.radius0Factor !== void 0 ? source.radius0Factor : 0.5, dest.radius1Factor = source.radius1Factor !== void 0 ? source.radius1Factor : 0.2, dest.minRadius = source.minRadius !== void 0 ? source.minRadius : 0.2, // These parameters should not be changed after lightning creation. They can be changed but the ray will change its form abruptly:\n dest.isEternal = source.isEternal !== void 0 ? source.isEternal : source.birthTime === void 0 || source.deathTime === void 0, dest.birthTime = source.birthTime, dest.deathTime = source.deathTime, dest.propagationTimeFactor = source.propagationTimeFactor !== void 0 ? source.propagationTimeFactor : 0.1, dest.vanishingTimeFactor = source.vanishingTimeFactor !== void 0 ? source.vanishingTimeFactor : 0.9, dest.subrayPeriod = source.subrayPeriod !== void 0 ? source.subrayPeriod : 4, dest.subrayDutyCycle = source.subrayDutyCycle !== void 0 ? source.subrayDutyCycle : 0.6;\n dest.maxIterations = source.maxIterations !== void 0 ? source.maxIterations : 9;\n dest.isStatic = source.isStatic !== void 0 ? source.isStatic : false;\n dest.ramification = source.ramification !== void 0 ? source.ramification : 5;\n dest.maxSubrayRecursion = source.maxSubrayRecursion !== void 0 ? source.maxSubrayRecursion : 3;\n dest.recursionProbability = source.recursionProbability !== void 0 ? source.recursionProbability : 0.6;\n dest.generateUVs = source.generateUVs !== void 0 ? source.generateUVs : false;\n dest.randomGenerator = source.randomGenerator, dest.noiseSeed = source.noiseSeed, dest.onDecideSubrayCreation = source.onDecideSubrayCreation, dest.onSubrayCreation = source.onSubrayCreation;\n return dest;\n }\n update(time) {\n if (this.isStatic)\n return;\n if (this.rayParameters.isEternal || this.rayParameters.birthTime <= time && time <= this.rayParameters.deathTime) {\n this.updateMesh(time);\n if (time < this.subrays[0].endPropagationTime) {\n this.state = _LightningStrike.RAY_PROPAGATING;\n } else if (time > this.subrays[0].beginVanishingTime) {\n this.state = _LightningStrike.RAY_VANISHING;\n } else {\n this.state = _LightningStrike.RAY_STEADY;\n }\n this.visible = true;\n } else {\n this.visible = false;\n if (time < this.rayParameters.birthTime) {\n this.state = _LightningStrike.RAY_UNBORN;\n } else {\n this.state = _LightningStrike.RAY_EXTINGUISHED;\n }\n }\n }\n init(rayParameters) {\n this.rayParameters = rayParameters;\n this.maxIterations = rayParameters.maxIterations !== void 0 ? Math.floor(rayParameters.maxIterations) : 9;\n rayParameters.maxIterations = this.maxIterations;\n this.isStatic = rayParameters.isStatic !== void 0 ? rayParameters.isStatic : false;\n rayParameters.isStatic = this.isStatic;\n this.ramification = rayParameters.ramification !== void 0 ? Math.floor(rayParameters.ramification) : 5;\n rayParameters.ramification = this.ramification;\n this.maxSubrayRecursion = rayParameters.maxSubrayRecursion !== void 0 ? Math.floor(rayParameters.maxSubrayRecursion) : 3;\n rayParameters.maxSubrayRecursion = this.maxSubrayRecursion;\n this.recursionProbability = rayParameters.recursionProbability !== void 0 ? rayParameters.recursionProbability : 0.6;\n rayParameters.recursionProbability = this.recursionProbability;\n this.generateUVs = rayParameters.generateUVs !== void 0 ? rayParameters.generateUVs : false;\n rayParameters.generateUVs = this.generateUVs;\n if (rayParameters.randomGenerator !== void 0) {\n this.randomGenerator = rayParameters.randomGenerator;\n this.seedGenerator = rayParameters.randomGenerator;\n if (rayParameters.noiseSeed !== void 0) {\n this.seedGenerator.setSeed(rayParameters.noiseSeed);\n }\n } else {\n this.randomGenerator = _LightningStrike.createRandomGenerator();\n this.seedGenerator = Math;\n }\n if (rayParameters.onDecideSubrayCreation !== void 0) {\n this.onDecideSubrayCreation = rayParameters.onDecideSubrayCreation;\n } else {\n this.createDefaultSubrayCreationCallbacks();\n if (rayParameters.onSubrayCreation !== void 0) {\n this.onSubrayCreation = rayParameters.onSubrayCreation;\n }\n }\n this.state = _LightningStrike.RAY_INITIALIZED;\n this.maxSubrays = Math.ceil(1 + Math.pow(this.ramification, Math.max(0, this.maxSubrayRecursion - 1)));\n rayParameters.maxSubrays = this.maxSubrays;\n this.maxRaySegments = 2 * (1 << this.maxIterations);\n this.subrays = [];\n for (let i = 0; i < this.maxSubrays; i++) {\n this.subrays.push(this.createSubray());\n }\n this.raySegments = [];\n for (let i = 0; i < this.maxRaySegments; i++) {\n this.raySegments.push(this.createSegment());\n }\n this.time = 0;\n this.timeFraction = 0;\n this.currentSegmentCallback = null;\n this.currentCreateTriangleVertices = this.generateUVs ? this.createTriangleVerticesWithUVs : this.createTriangleVerticesWithoutUVs;\n this.numSubrays = 0;\n this.currentSubray = null;\n this.currentSegmentIndex = 0;\n this.isInitialSegment = false;\n this.subrayProbability = 0;\n this.currentVertex = 0;\n this.currentIndex = 0;\n this.currentCoordinate = 0;\n this.currentUVCoordinate = 0;\n this.vertices = null;\n this.uvs = null;\n this.indices = null;\n this.positionAttribute = null;\n this.uvsAttribute = null;\n this.simplexX = new SimplexNoise(this.seedGenerator);\n this.simplexY = new SimplexNoise(this.seedGenerator);\n this.simplexZ = new SimplexNoise(this.seedGenerator);\n this.forwards = new Vector3();\n this.forwardsFill = new Vector3();\n this.side = new Vector3();\n this.down = new Vector3();\n this.middlePos = new Vector3();\n this.middleLinPos = new Vector3();\n this.newPos = new Vector3();\n this.vPos = new Vector3();\n this.cross1 = new Vector3();\n }\n createMesh() {\n const maxDrawableSegmentsPerSubRay = 1 << this.maxIterations;\n const maxVerts = 3 * (maxDrawableSegmentsPerSubRay + 1) * this.maxSubrays;\n const maxIndices = 18 * maxDrawableSegmentsPerSubRay * this.maxSubrays;\n this.vertices = new Float32Array(maxVerts * 3);\n this.indices = new Uint32Array(maxIndices);\n if (this.generateUVs) {\n this.uvs = new Float32Array(maxVerts * 2);\n }\n this.fillMesh(0);\n this.setIndex(new Uint32BufferAttribute(this.indices, 1));\n this.positionAttribute = new Float32BufferAttribute(this.vertices, 3);\n this.setAttribute(\"position\", this.positionAttribute);\n if (this.generateUVs) {\n this.uvsAttribute = new Float32BufferAttribute(new Float32Array(this.uvs), 2);\n this.setAttribute(\"uv\", this.uvsAttribute);\n }\n if (!this.isStatic) {\n this.index.usage = DynamicDrawUsage;\n this.positionAttribute.usage = DynamicDrawUsage;\n if (this.generateUVs) {\n this.uvsAttribute.usage = DynamicDrawUsage;\n }\n }\n this.vertices = this.positionAttribute.array;\n this.indices = this.index.array;\n if (this.generateUVs) {\n this.uvs = this.uvsAttribute.array;\n }\n }\n updateMesh(time) {\n this.fillMesh(time);\n this.drawRange.count = this.currentIndex;\n this.index.needsUpdate = true;\n this.positionAttribute.needsUpdate = true;\n if (this.generateUVs) {\n this.uvsAttribute.needsUpdate = true;\n }\n }\n fillMesh(time) {\n const scope = this;\n this.currentVertex = 0;\n this.currentIndex = 0;\n this.currentCoordinate = 0;\n this.currentUVCoordinate = 0;\n this.fractalRay(time, function fillVertices(segment) {\n const subray = scope.currentSubray;\n if (time < subray.birthTime) {\n return;\n } else if (this.rayParameters.isEternal && scope.currentSubray.recursion == 0) {\n scope.createPrism(segment);\n scope.onDecideSubrayCreation(segment, scope);\n } else if (time < subray.endPropagationTime) {\n if (scope.timeFraction >= segment.fraction0 * subray.propagationTimeFactor) {\n scope.createPrism(segment);\n scope.onDecideSubrayCreation(segment, scope);\n }\n } else if (time < subray.beginVanishingTime) {\n scope.createPrism(segment);\n scope.onDecideSubrayCreation(segment, scope);\n } else {\n if (scope.timeFraction <= subray.vanishingTimeFactor + segment.fraction1 * (1 - subray.vanishingTimeFactor)) {\n scope.createPrism(segment);\n }\n scope.onDecideSubrayCreation(segment, scope);\n }\n });\n }\n addNewSubray() {\n return this.subrays[this.numSubrays++];\n }\n initSubray(subray, rayParameters) {\n subray.pos0.copy(rayParameters.sourceOffset);\n subray.pos1.copy(rayParameters.destOffset);\n subray.up0.copy(rayParameters.up0);\n subray.up1.copy(rayParameters.up1);\n subray.radius0 = rayParameters.radius0;\n subray.radius1 = rayParameters.radius1;\n subray.birthTime = rayParameters.birthTime;\n subray.deathTime = rayParameters.deathTime;\n subray.timeScale = rayParameters.timeScale;\n subray.roughness = rayParameters.roughness;\n subray.straightness = rayParameters.straightness;\n subray.propagationTimeFactor = rayParameters.propagationTimeFactor;\n subray.vanishingTimeFactor = rayParameters.vanishingTimeFactor;\n subray.maxIterations = this.maxIterations;\n subray.seed = rayParameters.noiseSeed !== void 0 ? rayParameters.noiseSeed : 0;\n subray.recursion = 0;\n }\n fractalRay(time, segmentCallback) {\n this.time = time;\n this.currentSegmentCallback = segmentCallback;\n this.numSubrays = 0;\n this.initSubray(this.addNewSubray(), this.rayParameters);\n for (let subrayIndex = 0; subrayIndex < this.numSubrays; subrayIndex++) {\n const subray = this.subrays[subrayIndex];\n this.currentSubray = subray;\n this.randomGenerator.setSeed(subray.seed);\n subray.endPropagationTime = MathUtils.lerp(subray.birthTime, subray.deathTime, subray.propagationTimeFactor);\n subray.beginVanishingTime = MathUtils.lerp(subray.deathTime, subray.birthTime, 1 - subray.vanishingTimeFactor);\n const random1 = this.randomGenerator.random;\n subray.linPos0.set(random1(), random1(), random1()).multiplyScalar(1e3);\n subray.linPos1.set(random1(), random1(), random1()).multiplyScalar(1e3);\n this.timeFraction = (time - subray.birthTime) / (subray.deathTime - subray.birthTime);\n this.currentSegmentIndex = 0;\n this.isInitialSegment = true;\n const segment = this.getNewSegment();\n segment.iteration = 0;\n segment.pos0.copy(subray.pos0);\n segment.pos1.copy(subray.pos1);\n segment.linPos0.copy(subray.linPos0);\n segment.linPos1.copy(subray.linPos1);\n segment.up0.copy(subray.up0);\n segment.up1.copy(subray.up1);\n segment.radius0 = subray.radius0;\n segment.radius1 = subray.radius1;\n segment.fraction0 = 0;\n segment.fraction1 = 1;\n segment.positionVariationFactor = 1 - subray.straightness;\n this.subrayProbability = this.ramification * Math.pow(this.recursionProbability, subray.recursion) / (1 << subray.maxIterations);\n this.fractalRayRecursive(segment);\n }\n this.currentSegmentCallback = null;\n this.currentSubray = null;\n }\n fractalRayRecursive(segment) {\n if (segment.iteration >= this.currentSubray.maxIterations) {\n this.currentSegmentCallback(segment);\n return;\n }\n this.forwards.subVectors(segment.pos1, segment.pos0);\n let lForwards = this.forwards.length();\n if (lForwards < 1e-6) {\n this.forwards.set(0, 0, 0.01);\n lForwards = this.forwards.length();\n }\n const middleRadius = (segment.radius0 + segment.radius1) * 0.5;\n const middleFraction = (segment.fraction0 + segment.fraction1) * 0.5;\n const timeDimension = this.time * this.currentSubray.timeScale * Math.pow(2, segment.iteration);\n this.middlePos.lerpVectors(segment.pos0, segment.pos1, 0.5);\n this.middleLinPos.lerpVectors(segment.linPos0, segment.linPos1, 0.5);\n const p = this.middleLinPos;\n this.newPos.set(\n this.simplexX.noise4d(p.x, p.y, p.z, timeDimension),\n this.simplexY.noise4d(p.x, p.y, p.z, timeDimension),\n this.simplexZ.noise4d(p.x, p.y, p.z, timeDimension)\n );\n this.newPos.multiplyScalar(segment.positionVariationFactor * lForwards);\n this.newPos.add(this.middlePos);\n const newSegment1 = this.getNewSegment();\n newSegment1.pos0.copy(segment.pos0);\n newSegment1.pos1.copy(this.newPos);\n newSegment1.linPos0.copy(segment.linPos0);\n newSegment1.linPos1.copy(this.middleLinPos);\n newSegment1.up0.copy(segment.up0);\n newSegment1.up1.copy(segment.up1);\n newSegment1.radius0 = segment.radius0;\n newSegment1.radius1 = middleRadius;\n newSegment1.fraction0 = segment.fraction0;\n newSegment1.fraction1 = middleFraction;\n newSegment1.positionVariationFactor = segment.positionVariationFactor * this.currentSubray.roughness;\n newSegment1.iteration = segment.iteration + 1;\n const newSegment2 = this.getNewSegment();\n newSegment2.pos0.copy(this.newPos);\n newSegment2.pos1.copy(segment.pos1);\n newSegment2.linPos0.copy(this.middleLinPos);\n newSegment2.linPos1.copy(segment.linPos1);\n this.cross1.crossVectors(segment.up0, this.forwards.normalize());\n newSegment2.up0.crossVectors(this.forwards, this.cross1).normalize();\n newSegment2.up1.copy(segment.up1);\n newSegment2.radius0 = middleRadius;\n newSegment2.radius1 = segment.radius1;\n newSegment2.fraction0 = middleFraction;\n newSegment2.fraction1 = segment.fraction1;\n newSegment2.positionVariationFactor = segment.positionVariationFactor * this.currentSubray.roughness;\n newSegment2.iteration = segment.iteration + 1;\n this.fractalRayRecursive(newSegment1);\n this.fractalRayRecursive(newSegment2);\n }\n createPrism(segment) {\n this.forwardsFill.subVectors(segment.pos1, segment.pos0).normalize();\n if (this.isInitialSegment) {\n this.currentCreateTriangleVertices(segment.pos0, segment.up0, this.forwardsFill, segment.radius0, 0);\n this.isInitialSegment = false;\n }\n this.currentCreateTriangleVertices(\n segment.pos1,\n segment.up0,\n this.forwardsFill,\n segment.radius1,\n segment.fraction1\n );\n this.createPrismFaces();\n }\n createTriangleVerticesWithoutUVs(pos, up, forwards, radius) {\n this.side.crossVectors(up, forwards).multiplyScalar(radius * _LightningStrike.COS30DEG);\n this.down.copy(up).multiplyScalar(-radius * _LightningStrike.SIN30DEG);\n const p = this.vPos;\n const v = this.vertices;\n p.copy(pos).sub(this.side).add(this.down);\n v[this.currentCoordinate++] = p.x;\n v[this.currentCoordinate++] = p.y;\n v[this.currentCoordinate++] = p.z;\n p.copy(pos).add(this.side).add(this.down);\n v[this.currentCoordinate++] = p.x;\n v[this.currentCoordinate++] = p.y;\n v[this.currentCoordinate++] = p.z;\n p.copy(up).multiplyScalar(radius).add(pos);\n v[this.currentCoordinate++] = p.x;\n v[this.currentCoordinate++] = p.y;\n v[this.currentCoordinate++] = p.z;\n this.currentVertex += 3;\n }\n createTriangleVerticesWithUVs(pos, up, forwards, radius, u) {\n this.side.crossVectors(up, forwards).multiplyScalar(radius * _LightningStrike.COS30DEG);\n this.down.copy(up).multiplyScalar(-radius * _LightningStrike.SIN30DEG);\n const p = this.vPos;\n const v = this.vertices;\n const uv = this.uvs;\n p.copy(pos).sub(this.side).add(this.down);\n v[this.currentCoordinate++] = p.x;\n v[this.currentCoordinate++] = p.y;\n v[this.currentCoordinate++] = p.z;\n uv[this.currentUVCoordinate++] = u;\n uv[this.currentUVCoordinate++] = 0;\n p.copy(pos).add(this.side).add(this.down);\n v[this.currentCoordinate++] = p.x;\n v[this.currentCoordinate++] = p.y;\n v[this.currentCoordinate++] = p.z;\n uv[this.currentUVCoordinate++] = u;\n uv[this.currentUVCoordinate++] = 0.5;\n p.copy(up).multiplyScalar(radius).add(pos);\n v[this.currentCoordinate++] = p.x;\n v[this.currentCoordinate++] = p.y;\n v[this.currentCoordinate++] = p.z;\n uv[this.currentUVCoordinate++] = u;\n uv[this.currentUVCoordinate++] = 1;\n this.currentVertex += 3;\n }\n createPrismFaces(vertex) {\n const indices = this.indices;\n vertex = this.currentVertex - 6;\n indices[this.currentIndex++] = vertex + 1;\n indices[this.currentIndex++] = vertex + 2;\n indices[this.currentIndex++] = vertex + 5;\n indices[this.currentIndex++] = vertex + 1;\n indices[this.currentIndex++] = vertex + 5;\n indices[this.currentIndex++] = vertex + 4;\n indices[this.currentIndex++] = vertex + 0;\n indices[this.currentIndex++] = vertex + 1;\n indices[this.currentIndex++] = vertex + 4;\n indices[this.currentIndex++] = vertex + 0;\n indices[this.currentIndex++] = vertex + 4;\n indices[this.currentIndex++] = vertex + 3;\n indices[this.currentIndex++] = vertex + 2;\n indices[this.currentIndex++] = vertex + 0;\n indices[this.currentIndex++] = vertex + 3;\n indices[this.currentIndex++] = vertex + 2;\n indices[this.currentIndex++] = vertex + 3;\n indices[this.currentIndex++] = vertex + 5;\n }\n createDefaultSubrayCreationCallbacks() {\n const random1 = this.randomGenerator.random;\n this.onDecideSubrayCreation = function(segment, lightningStrike) {\n const subray = lightningStrike.currentSubray;\n const period = lightningStrike.rayParameters.subrayPeriod;\n const dutyCycle = lightningStrike.rayParameters.subrayDutyCycle;\n const phase0 = lightningStrike.rayParameters.isEternal && subray.recursion == 0 ? -random1() * period : MathUtils.lerp(subray.birthTime, subray.endPropagationTime, segment.fraction0) - random1() * period;\n const phase = lightningStrike.time - phase0;\n const currentCycle = Math.floor(phase / period);\n const childSubraySeed = random1() * (currentCycle + 1);\n const isActive = phase % period <= dutyCycle * period;\n let probability = 0;\n if (isActive) {\n probability = lightningStrike.subrayProbability;\n }\n if (subray.recursion < lightningStrike.maxSubrayRecursion && lightningStrike.numSubrays < lightningStrike.maxSubrays && random1() < probability) {\n const childSubray = lightningStrike.addNewSubray();\n const parentSeed = lightningStrike.randomGenerator.getSeed();\n childSubray.seed = childSubraySeed;\n lightningStrike.randomGenerator.setSeed(childSubraySeed);\n childSubray.recursion = subray.recursion + 1;\n childSubray.maxIterations = Math.max(1, subray.maxIterations - 1);\n childSubray.linPos0.set(random1(), random1(), random1()).multiplyScalar(1e3);\n childSubray.linPos1.set(random1(), random1(), random1()).multiplyScalar(1e3);\n childSubray.up0.copy(subray.up0);\n childSubray.up1.copy(subray.up1);\n childSubray.radius0 = segment.radius0 * lightningStrike.rayParameters.radius0Factor;\n childSubray.radius1 = Math.min(\n lightningStrike.rayParameters.minRadius,\n segment.radius1 * lightningStrike.rayParameters.radius1Factor\n );\n childSubray.birthTime = phase0 + currentCycle * period;\n childSubray.deathTime = childSubray.birthTime + period * dutyCycle;\n if (!lightningStrike.rayParameters.isEternal && subray.recursion == 0) {\n childSubray.birthTime = Math.max(childSubray.birthTime, subray.birthTime);\n childSubray.deathTime = Math.min(childSubray.deathTime, subray.deathTime);\n }\n childSubray.timeScale = subray.timeScale * 2;\n childSubray.roughness = subray.roughness;\n childSubray.straightness = subray.straightness;\n childSubray.propagationTimeFactor = subray.propagationTimeFactor;\n childSubray.vanishingTimeFactor = subray.vanishingTimeFactor;\n lightningStrike.onSubrayCreation(segment, subray, childSubray, lightningStrike);\n lightningStrike.randomGenerator.setSeed(parentSeed);\n }\n };\n const vec1Pos = new Vector3();\n const vec2Forward = new Vector3();\n const vec3Side = new Vector3();\n const vec4Up = new Vector3();\n this.onSubrayCreation = function(segment, parentSubray, childSubray, lightningStrike) {\n lightningStrike.subrayCylinderPosition(segment, parentSubray, childSubray, 0.5, 0.6, 0.2);\n };\n this.subrayConePosition = function(segment, parentSubray, childSubray, heightFactor, sideWidthFactor, minSideWidthFactor) {\n childSubray.pos0.copy(segment.pos0);\n vec1Pos.subVectors(parentSubray.pos1, parentSubray.pos0);\n vec2Forward.copy(vec1Pos).normalize();\n vec1Pos.multiplyScalar(segment.fraction0 + (1 - segment.fraction0) * (random1() * heightFactor));\n const length = vec1Pos.length();\n vec3Side.crossVectors(parentSubray.up0, vec2Forward);\n const angle = 2 * Math.PI * random1();\n vec3Side.multiplyScalar(Math.cos(angle));\n vec4Up.copy(parentSubray.up0).multiplyScalar(Math.sin(angle));\n childSubray.pos1.copy(vec3Side).add(vec4Up).multiplyScalar(length * sideWidthFactor * (minSideWidthFactor + random1() * (1 - minSideWidthFactor))).add(vec1Pos).add(parentSubray.pos0);\n };\n this.subrayCylinderPosition = function(segment, parentSubray, childSubray, heightFactor, sideWidthFactor, minSideWidthFactor) {\n childSubray.pos0.copy(segment.pos0);\n vec1Pos.subVectors(parentSubray.pos1, parentSubray.pos0);\n vec2Forward.copy(vec1Pos).normalize();\n vec1Pos.multiplyScalar(segment.fraction0 + (1 - segment.fraction0) * ((2 * random1() - 1) * heightFactor));\n const length = vec1Pos.length();\n vec3Side.crossVectors(parentSubray.up0, vec2Forward);\n const angle = 2 * Math.PI * random1();\n vec3Side.multiplyScalar(Math.cos(angle));\n vec4Up.copy(parentSubray.up0).multiplyScalar(Math.sin(angle));\n childSubray.pos1.copy(vec3Side).add(vec4Up).multiplyScalar(length * sideWidthFactor * (minSideWidthFactor + random1() * (1 - minSideWidthFactor))).add(vec1Pos).add(parentSubray.pos0);\n };\n }\n createSubray() {\n return {\n seed: 0,\n maxIterations: 0,\n recursion: 0,\n pos0: new Vector3(),\n pos1: new Vector3(),\n linPos0: new Vector3(),\n linPos1: new Vector3(),\n up0: new Vector3(),\n up1: new Vector3(),\n radius0: 0,\n radius1: 0,\n birthTime: 0,\n deathTime: 0,\n timeScale: 0,\n roughness: 0,\n straightness: 0,\n propagationTimeFactor: 0,\n vanishingTimeFactor: 0,\n endPropagationTime: 0,\n beginVanishingTime: 0\n };\n }\n createSegment() {\n return {\n iteration: 0,\n pos0: new Vector3(),\n pos1: new Vector3(),\n linPos0: new Vector3(),\n linPos1: new Vector3(),\n up0: new Vector3(),\n up1: new Vector3(),\n radius0: 0,\n radius1: 0,\n fraction0: 0,\n fraction1: 0,\n positionVariationFactor: 0\n };\n }\n getNewSegment() {\n return this.raySegments[this.currentSegmentIndex++];\n }\n copy(source) {\n super.copy(source);\n this.init(_LightningStrike.copyParameters({}, source.rayParameters));\n return this;\n }\n clone() {\n return new this.constructor(_LightningStrike.copyParameters({}, this.rayParameters));\n }\n };\n let LightningStrike2 = _LightningStrike;\n // Ray states\n __publicField(LightningStrike2, \"RAY_INITIALIZED\", 0);\n __publicField(LightningStrike2, \"RAY_UNBORN\", 1);\n __publicField(LightningStrike2, \"RAY_PROPAGATING\", 2);\n __publicField(LightningStrike2, \"RAY_STEADY\", 3);\n __publicField(LightningStrike2, \"RAY_VANISHING\", 4);\n __publicField(LightningStrike2, \"RAY_EXTINGUISHED\", 5);\n __publicField(LightningStrike2, \"COS30DEG\", Math.cos(30 * Math.PI / 180));\n __publicField(LightningStrike2, \"SIN30DEG\", Math.sin(30 * Math.PI / 180));\n return LightningStrike2;\n})();\nexport {\n LightningStrike\n};\n//# sourceMappingURL=LightningStrike.js.map\n","import { Object3D, MeshBasicMaterial, MathUtils, Mesh } from \"three\";\nimport { LightningStrike } from \"../geometries/LightningStrike.js\";\nclass LightningStorm extends Object3D {\n constructor(stormParams = {}) {\n super();\n this.isLightningStorm = true;\n this.stormParams = stormParams;\n stormParams.size = stormParams.size !== void 0 ? stormParams.size : 1e3;\n stormParams.minHeight = stormParams.minHeight !== void 0 ? stormParams.minHeight : 80;\n stormParams.maxHeight = stormParams.maxHeight !== void 0 ? stormParams.maxHeight : 100;\n stormParams.maxSlope = stormParams.maxSlope !== void 0 ? stormParams.maxSlope : 1.1;\n stormParams.maxLightnings = stormParams.maxLightnings !== void 0 ? stormParams.maxLightnings : 3;\n stormParams.lightningMinPeriod = stormParams.lightningMinPeriod !== void 0 ? stormParams.lightningMinPeriod : 3;\n stormParams.lightningMaxPeriod = stormParams.lightningMaxPeriod !== void 0 ? stormParams.lightningMaxPeriod : 7;\n stormParams.lightningMinDuration = stormParams.lightningMinDuration !== void 0 ? stormParams.lightningMinDuration : 1;\n stormParams.lightningMaxDuration = stormParams.lightningMaxDuration !== void 0 ? stormParams.lightningMaxDuration : 2.5;\n this.lightningParameters = LightningStrike.copyParameters(\n stormParams.lightningParameters,\n stormParams.lightningParameters\n );\n this.lightningParameters.isEternal = false;\n this.lightningMaterial = stormParams.lightningMaterial !== void 0 ? stormParams.lightningMaterial : new MeshBasicMaterial({ color: 11599871 });\n if (stormParams.onRayPosition !== void 0) {\n this.onRayPosition = stormParams.onRayPosition;\n } else {\n this.onRayPosition = function(source, dest) {\n dest.set((Math.random() - 0.5) * stormParams.size, 0, (Math.random() - 0.5) * stormParams.size);\n const height = MathUtils.lerp(stormParams.minHeight, stormParams.maxHeight, Math.random());\n source.set(stormParams.maxSlope * (2 * Math.random() - 1), 1, stormParams.maxSlope * (2 * Math.random() - 1)).multiplyScalar(height).add(dest);\n };\n }\n this.onLightningDown = stormParams.onLightningDown;\n this.inited = false;\n this.nextLightningTime = 0;\n this.lightningsMeshes = [];\n this.deadLightningsMeshes = [];\n for (let i = 0; i < this.stormParams.maxLightnings; i++) {\n const lightning = new LightningStrike(LightningStrike.copyParameters({}, this.lightningParameters));\n const mesh = new Mesh(lightning, this.lightningMaterial);\n this.deadLightningsMeshes.push(mesh);\n }\n }\n update(time) {\n if (!this.inited) {\n this.nextLightningTime = this.getNextLightningTime(time) * Math.random();\n this.inited = true;\n }\n if (time >= this.nextLightningTime) {\n const lightningMesh = this.deadLightningsMeshes.pop();\n if (lightningMesh) {\n const lightningParams1 = LightningStrike.copyParameters(\n lightningMesh.geometry.rayParameters,\n this.lightningParameters\n );\n lightningParams1.birthTime = time;\n lightningParams1.deathTime = time + MathUtils.lerp(this.stormParams.lightningMinDuration, this.stormParams.lightningMaxDuration, Math.random());\n this.onRayPosition(lightningParams1.sourceOffset, lightningParams1.destOffset);\n lightningParams1.noiseSeed = Math.random();\n this.add(lightningMesh);\n this.lightningsMeshes.push(lightningMesh);\n }\n this.nextLightningTime = this.getNextLightningTime(time);\n }\n let i = 0, il = this.lightningsMeshes.length;\n while (i < il) {\n const mesh = this.lightningsMeshes[i];\n const lightning = mesh.geometry;\n const prevState = lightning.state;\n lightning.update(time);\n if (prevState === LightningStrike.RAY_PROPAGATING && lightning.state > prevState) {\n if (this.onLightningDown) {\n this.onLightningDown(lightning);\n }\n }\n if (lightning.state === LightningStrike.RAY_EXTINGUISHED) {\n this.lightningsMeshes.splice(this.lightningsMeshes.indexOf(mesh), 1);\n this.deadLightningsMeshes.push(mesh);\n this.remove(mesh);\n il--;\n } else {\n i++;\n }\n }\n }\n getNextLightningTime(currentTime) {\n return currentTime + MathUtils.lerp(this.stormParams.lightningMinPeriod, this.stormParams.lightningMaxPeriod, Math.random()) / (this.stormParams.maxLightnings + 1);\n }\n copy(source, recursive) {\n super.copy(source, recursive);\n this.stormParams.size = source.stormParams.size;\n this.stormParams.minHeight = source.stormParams.minHeight;\n this.stormParams.maxHeight = source.stormParams.maxHeight;\n this.stormParams.maxSlope = source.stormParams.maxSlope;\n this.stormParams.maxLightnings = source.stormParams.maxLightnings;\n this.stormParams.lightningMinPeriod = source.stormParams.lightningMinPeriod;\n this.stormParams.lightningMaxPeriod = source.stormParams.lightningMaxPeriod;\n this.stormParams.lightningMinDuration = source.stormParams.lightningMinDuration;\n this.stormParams.lightningMaxDuration = source.stormParams.lightningMaxDuration;\n this.lightningParameters = LightningStrike.copyParameters({}, source.lightningParameters);\n this.lightningMaterial = source.stormParams.lightningMaterial;\n this.onLightningDown = source.onLightningDown;\n return this;\n }\n clone() {\n return new this.constructor(this.stormParams).copy(this);\n }\n}\nexport {\n LightningStorm\n};\n//# sourceMappingURL=LightningStorm.js.map\n","import { Reflector } from \"./Reflector.js\";\nclass ReflectorRTT extends Reflector {\n constructor(geometry, options) {\n super(geometry, options);\n this.geometry.setDrawRange(0, 0);\n }\n}\nexport {\n ReflectorRTT\n};\n//# sourceMappingURL=ReflectorRTT.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Mesh, Matrix4, Vector2, Color, Vector3, PerspectiveCamera, DepthTexture, UnsignedShortType, NearestFilter, WebGLRenderTarget, ShaderMaterial, UniformsUtils, Plane, HalfFloatType } from \"three\";\nconst ReflectorForSSRPass = /* @__PURE__ */ (() => {\n const _ReflectorForSSRPass = class extends Mesh {\n constructor(geometry, options = {}) {\n super(geometry);\n this.isReflectorForSSRPass = true;\n this.type = \"ReflectorForSSRPass\";\n const scope = this;\n const color = options.color !== void 0 ? new Color(options.color) : new Color(8355711);\n const textureWidth = options.textureWidth || 512;\n const textureHeight = options.textureHeight || 512;\n const clipBias = options.clipBias || 0;\n const shader = options.shader || _ReflectorForSSRPass.ReflectorShader;\n const useDepthTexture = options.useDepthTexture === true;\n const yAxis = new Vector3(0, 1, 0);\n const vecTemp0 = new Vector3();\n const vecTemp1 = new Vector3();\n scope.needsUpdate = false;\n scope.maxDistance = _ReflectorForSSRPass.ReflectorShader.uniforms.maxDistance.value;\n scope.opacity = _ReflectorForSSRPass.ReflectorShader.uniforms.opacity.value;\n scope.color = color;\n scope.resolution = options.resolution || new Vector2(window.innerWidth, window.innerHeight);\n scope._distanceAttenuation = _ReflectorForSSRPass.ReflectorShader.defines.DISTANCE_ATTENUATION;\n Object.defineProperty(scope, \"distanceAttenuation\", {\n get() {\n return scope._distanceAttenuation;\n },\n set(val) {\n if (scope._distanceAttenuation === val)\n return;\n scope._distanceAttenuation = val;\n scope.material.defines.DISTANCE_ATTENUATION = val;\n scope.material.needsUpdate = true;\n }\n });\n scope._fresnel = _ReflectorForSSRPass.ReflectorShader.defines.FRESNEL;\n Object.defineProperty(scope, \"fresnel\", {\n get() {\n return scope._fresnel;\n },\n set(val) {\n if (scope._fresnel === val)\n return;\n scope._fresnel = val;\n scope.material.defines.FRESNEL = val;\n scope.material.needsUpdate = true;\n }\n });\n const normal = new Vector3();\n const reflectorWorldPosition = new Vector3();\n const cameraWorldPosition = new Vector3();\n const rotationMatrix = new Matrix4();\n const lookAtPosition = new Vector3(0, 0, -1);\n const view = new Vector3();\n const target = new Vector3();\n const textureMatrix = new Matrix4();\n const virtualCamera = new PerspectiveCamera();\n let depthTexture;\n if (useDepthTexture) {\n depthTexture = new DepthTexture();\n depthTexture.type = UnsignedShortType;\n depthTexture.minFilter = NearestFilter;\n depthTexture.magFilter = NearestFilter;\n }\n const parameters = {\n depthTexture: useDepthTexture ? depthTexture : null,\n type: HalfFloatType\n };\n const renderTarget = new WebGLRenderTarget(textureWidth, textureHeight, parameters);\n const material = new ShaderMaterial({\n transparent: useDepthTexture,\n defines: Object.assign({}, _ReflectorForSSRPass.ReflectorShader.defines, {\n useDepthTexture\n }),\n uniforms: UniformsUtils.clone(shader.uniforms),\n fragmentShader: shader.fragmentShader,\n vertexShader: shader.vertexShader\n });\n material.uniforms[\"tDiffuse\"].value = renderTarget.texture;\n material.uniforms[\"color\"].value = scope.color;\n material.uniforms[\"textureMatrix\"].value = textureMatrix;\n if (useDepthTexture) {\n material.uniforms[\"tDepth\"].value = renderTarget.depthTexture;\n }\n this.material = material;\n const globalPlane = new Plane(new Vector3(0, 1, 0), clipBias);\n const globalPlanes = [globalPlane];\n this.doRender = function(renderer, scene, camera) {\n material.uniforms[\"maxDistance\"].value = scope.maxDistance;\n material.uniforms[\"color\"].value = scope.color;\n material.uniforms[\"opacity\"].value = scope.opacity;\n vecTemp0.copy(camera.position).normalize();\n vecTemp1.copy(vecTemp0).reflect(yAxis);\n material.uniforms[\"fresnelCoe\"].value = (vecTemp0.dot(vecTemp1) + 1) / 2;\n reflectorWorldPosition.setFromMatrixPosition(scope.matrixWorld);\n cameraWorldPosition.setFromMatrixPosition(camera.matrixWorld);\n rotationMatrix.extractRotation(scope.matrixWorld);\n normal.set(0, 0, 1);\n normal.applyMatrix4(rotationMatrix);\n view.subVectors(reflectorWorldPosition, cameraWorldPosition);\n if (view.dot(normal) > 0)\n return;\n view.reflect(normal).negate();\n view.add(reflectorWorldPosition);\n rotationMatrix.extractRotation(camera.matrixWorld);\n lookAtPosition.set(0, 0, -1);\n lookAtPosition.applyMatrix4(rotationMatrix);\n lookAtPosition.add(cameraWorldPosition);\n target.subVectors(reflectorWorldPosition, lookAtPosition);\n target.reflect(normal).negate();\n target.add(reflectorWorldPosition);\n virtualCamera.position.copy(view);\n virtualCamera.up.set(0, 1, 0);\n virtualCamera.up.applyMatrix4(rotationMatrix);\n virtualCamera.up.reflect(normal);\n virtualCamera.lookAt(target);\n virtualCamera.far = camera.far;\n virtualCamera.updateMatrixWorld();\n virtualCamera.projectionMatrix.copy(camera.projectionMatrix);\n material.uniforms[\"virtualCameraNear\"].value = camera.near;\n material.uniforms[\"virtualCameraFar\"].value = camera.far;\n material.uniforms[\"virtualCameraMatrixWorld\"].value = virtualCamera.matrixWorld;\n material.uniforms[\"virtualCameraProjectionMatrix\"].value = camera.projectionMatrix;\n material.uniforms[\"virtualCameraProjectionMatrixInverse\"].value = camera.projectionMatrixInverse;\n material.uniforms[\"resolution\"].value = scope.resolution;\n textureMatrix.set(0.5, 0, 0, 0.5, 0, 0.5, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0, 1);\n textureMatrix.multiply(virtualCamera.projectionMatrix);\n textureMatrix.multiply(virtualCamera.matrixWorldInverse);\n textureMatrix.multiply(scope.matrixWorld);\n const currentRenderTarget = renderer.getRenderTarget();\n const currentXrEnabled = renderer.xr.enabled;\n const currentShadowAutoUpdate = renderer.shadowMap.autoUpdate;\n const currentClippingPlanes = renderer.clippingPlanes;\n renderer.xr.enabled = false;\n renderer.shadowMap.autoUpdate = false;\n renderer.clippingPlanes = globalPlanes;\n renderer.setRenderTarget(renderTarget);\n renderer.state.buffers.depth.setMask(true);\n if (renderer.autoClear === false)\n renderer.clear();\n renderer.render(scene, virtualCamera);\n renderer.xr.enabled = currentXrEnabled;\n renderer.shadowMap.autoUpdate = currentShadowAutoUpdate;\n renderer.clippingPlanes = currentClippingPlanes;\n renderer.setRenderTarget(currentRenderTarget);\n const viewport = camera.viewport;\n if (viewport !== void 0) {\n renderer.state.viewport(viewport);\n }\n };\n this.getRenderTarget = function() {\n return renderTarget;\n };\n }\n };\n let ReflectorForSSRPass2 = _ReflectorForSSRPass;\n __publicField(ReflectorForSSRPass2, \"ReflectorShader\", {\n defines: {\n DISTANCE_ATTENUATION: true,\n FRESNEL: true\n },\n uniforms: {\n color: { value: null },\n tDiffuse: { value: null },\n tDepth: { value: null },\n textureMatrix: { value: new Matrix4() },\n maxDistance: { value: 180 },\n opacity: { value: 0.5 },\n fresnelCoe: { value: null },\n virtualCameraNear: { value: null },\n virtualCameraFar: { value: null },\n virtualCameraProjectionMatrix: { value: new Matrix4() },\n virtualCameraMatrixWorld: { value: new Matrix4() },\n virtualCameraProjectionMatrixInverse: { value: new Matrix4() },\n resolution: { value: new Vector2() }\n },\n vertexShader: (\n /* glsl */\n `\n\t\tuniform mat4 textureMatrix;\n\t\tvarying vec4 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = textureMatrix * vec4( position, 1.0 );\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}`\n ),\n fragmentShader: (\n /* glsl */\n `\n\t\tuniform vec3 color;\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tDepth;\n\t\tuniform float maxDistance;\n\t\tuniform float opacity;\n\t\tuniform float fresnelCoe;\n\t\tuniform float virtualCameraNear;\n\t\tuniform float virtualCameraFar;\n\t\tuniform mat4 virtualCameraProjectionMatrix;\n\t\tuniform mat4 virtualCameraProjectionMatrixInverse;\n\t\tuniform mat4 virtualCameraMatrixWorld;\n\t\tuniform vec2 resolution;\n\t\tvarying vec4 vUv;\n\t\t#include <packing>\n\t\tfloat blendOverlay( float base, float blend ) {\n\t\t\treturn( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );\n\t\t}\n\t\tvec3 blendOverlay( vec3 base, vec3 blend ) {\n\t\t\treturn vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ), blendOverlay( base.b, blend.b ) );\n\t\t}\n\t\tfloat getDepth( const in vec2 uv ) {\n\t\t\treturn texture2D( tDepth, uv ).x;\n\t\t}\n\t\tfloat getViewZ( const in float depth ) {\n\t\t\treturn perspectiveDepthToViewZ( depth, virtualCameraNear, virtualCameraFar );\n\t\t}\n\t\tvec3 getViewPosition( const in vec2 uv, const in float depth/*clip space*/, const in float clipW ) {\n\t\t\tvec4 clipPosition = vec4( ( vec3( uv, depth ) - 0.5 ) * 2.0, 1.0 );//ndc\n\t\t\tclipPosition *= clipW; //clip\n\t\t\treturn ( virtualCameraProjectionMatrixInverse * clipPosition ).xyz;//view\n\t\t}\n\t\tvoid main() {\n\t\t\tvec4 base = texture2DProj( tDiffuse, vUv );\n\t\t\t#ifdef useDepthTexture\n\t\t\t\tvec2 uv=(gl_FragCoord.xy-.5)/resolution.xy;\n\t\t\t\tuv.x=1.-uv.x;\n\t\t\t\tfloat depth = texture2DProj( tDepth, vUv ).r;\n\t\t\t\tfloat viewZ = getViewZ( depth );\n\t\t\t\tfloat clipW = virtualCameraProjectionMatrix[2][3] * viewZ+virtualCameraProjectionMatrix[3][3];\n\t\t\t\tvec3 viewPosition=getViewPosition( uv, depth, clipW );\n\t\t\t\tvec3 worldPosition=(virtualCameraMatrixWorld*vec4(viewPosition,1)).xyz;\n\t\t\t\tif(worldPosition.y>maxDistance) discard;\n\t\t\t\tfloat op=opacity;\n\t\t\t\t#ifdef DISTANCE_ATTENUATION\n\t\t\t\t\tfloat ratio=1.-(worldPosition.y/maxDistance);\n\t\t\t\t\tfloat attenuation=ratio*ratio;\n\t\t\t\t\top=opacity*attenuation;\n\t\t\t\t#endif\n\t\t\t\t#ifdef FRESNEL\n\t\t\t\t\top*=fresnelCoe;\n\t\t\t\t#endif\n\t\t\t\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), op );\n\t\t\t#else\n\t\t\t\tgl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );\n\t\t\t#endif\n\t\t}\n\t`\n )\n });\n return ReflectorForSSRPass2;\n})();\nexport {\n ReflectorForSSRPass\n};\n//# sourceMappingURL=ReflectorForSSRPass.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Vector3, ShaderMaterial, UniformsUtils, BackSide, Mesh, BoxGeometry } from \"three\";\nimport { version } from \"../_polyfill/constants.js\";\nconst Sky = /* @__PURE__ */ (() => {\n const SkyShader = {\n uniforms: {\n turbidity: { value: 2 },\n rayleigh: { value: 1 },\n mieCoefficient: { value: 5e-3 },\n mieDirectionalG: { value: 0.8 },\n sunPosition: { value: new Vector3() },\n up: { value: new Vector3(0, 1, 0) }\n },\n vertexShader: (\n /* glsl */\n `\n uniform vec3 sunPosition;\n uniform float rayleigh;\n uniform float turbidity;\n uniform float mieCoefficient;\n uniform vec3 up;\n\n varying vec3 vWorldPosition;\n varying vec3 vSunDirection;\n varying float vSunfade;\n varying vec3 vBetaR;\n varying vec3 vBetaM;\n varying float vSunE;\n\n // constants for atmospheric scattering\n const float e = 2.71828182845904523536028747135266249775724709369995957;\n const float pi = 3.141592653589793238462643383279502884197169;\n\n // wavelength of used primaries, according to preetham\n const vec3 lambda = vec3( 680E-9, 550E-9, 450E-9 );\n // this pre-calcuation replaces older TotalRayleigh(vec3 lambda) function:\n // (8.0 * pow(pi, 3.0) * pow(pow(n, 2.0) - 1.0, 2.0) * (6.0 + 3.0 * pn)) / (3.0 * N * pow(lambda, vec3(4.0)) * (6.0 - 7.0 * pn))\n const vec3 totalRayleigh = vec3( 5.804542996261093E-6, 1.3562911419845635E-5, 3.0265902468824876E-5 );\n\n // mie stuff\n // K coefficient for the primaries\n const float v = 4.0;\n const vec3 K = vec3( 0.686, 0.678, 0.666 );\n // MieConst = pi * pow( ( 2.0 * pi ) / lambda, vec3( v - 2.0 ) ) * K\n const vec3 MieConst = vec3( 1.8399918514433978E14, 2.7798023919660528E14, 4.0790479543861094E14 );\n\n // earth shadow hack\n // cutoffAngle = pi / 1.95;\n const float cutoffAngle = 1.6110731556870734;\n const float steepness = 1.5;\n const float EE = 1000.0;\n\n float sunIntensity( float zenithAngleCos ) {\n zenithAngleCos = clamp( zenithAngleCos, -1.0, 1.0 );\n return EE * max( 0.0, 1.0 - pow( e, -( ( cutoffAngle - acos( zenithAngleCos ) ) / steepness ) ) );\n }\n\n vec3 totalMie( float T ) {\n float c = ( 0.2 * T ) * 10E-18;\n return 0.434 * c * MieConst;\n }\n\n void main() {\n\n vec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n vWorldPosition = worldPosition.xyz;\n\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n gl_Position.z = gl_Position.w; // set z to camera.far\n\n vSunDirection = normalize( sunPosition );\n\n vSunE = sunIntensity( dot( vSunDirection, up ) );\n\n vSunfade = 1.0 - clamp( 1.0 - exp( ( sunPosition.y / 450000.0 ) ), 0.0, 1.0 );\n\n float rayleighCoefficient = rayleigh - ( 1.0 * ( 1.0 - vSunfade ) );\n\n // extinction (absorbtion + out scattering)\n // rayleigh coefficients\n vBetaR = totalRayleigh * rayleighCoefficient;\n\n // mie coefficients\n vBetaM = totalMie( turbidity ) * mieCoefficient;\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n varying vec3 vWorldPosition;\n varying vec3 vSunDirection;\n varying float vSunfade;\n varying vec3 vBetaR;\n varying vec3 vBetaM;\n varying float vSunE;\n\n uniform float mieDirectionalG;\n uniform vec3 up;\n\n const vec3 cameraPos = vec3( 0.0, 0.0, 0.0 );\n\n // constants for atmospheric scattering\n const float pi = 3.141592653589793238462643383279502884197169;\n\n const float n = 1.0003; // refractive index of air\n const float N = 2.545E25; // number of molecules per unit volume for air at 288.15K and 1013mb (sea level -45 celsius)\n\n // optical length at zenith for molecules\n const float rayleighZenithLength = 8.4E3;\n const float mieZenithLength = 1.25E3;\n // 66 arc seconds -> degrees, and the cosine of that\n const float sunAngularDiameterCos = 0.999956676946448443553574619906976478926848692873900859324;\n\n // 3.0 / ( 16.0 * pi )\n const float THREE_OVER_SIXTEENPI = 0.05968310365946075;\n // 1.0 / ( 4.0 * pi )\n const float ONE_OVER_FOURPI = 0.07957747154594767;\n\n float rayleighPhase( float cosTheta ) {\n return THREE_OVER_SIXTEENPI * ( 1.0 + pow( cosTheta, 2.0 ) );\n }\n\n float hgPhase( float cosTheta, float g ) {\n float g2 = pow( g, 2.0 );\n float inverse = 1.0 / pow( 1.0 - 2.0 * g * cosTheta + g2, 1.5 );\n return ONE_OVER_FOURPI * ( ( 1.0 - g2 ) * inverse );\n }\n\n void main() {\n\n vec3 direction = normalize( vWorldPosition - cameraPos );\n\n // optical length\n // cutoff angle at 90 to avoid singularity in next formula.\n float zenithAngle = acos( max( 0.0, dot( up, direction ) ) );\n float inverse = 1.0 / ( cos( zenithAngle ) + 0.15 * pow( 93.885 - ( ( zenithAngle * 180.0 ) / pi ), -1.253 ) );\n float sR = rayleighZenithLength * inverse;\n float sM = mieZenithLength * inverse;\n\n // combined extinction factor\n vec3 Fex = exp( -( vBetaR * sR + vBetaM * sM ) );\n\n // in scattering\n float cosTheta = dot( direction, vSunDirection );\n\n float rPhase = rayleighPhase( cosTheta * 0.5 + 0.5 );\n vec3 betaRTheta = vBetaR * rPhase;\n\n float mPhase = hgPhase( cosTheta, mieDirectionalG );\n vec3 betaMTheta = vBetaM * mPhase;\n\n vec3 Lin = pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * ( 1.0 - Fex ), vec3( 1.5 ) );\n Lin *= mix( vec3( 1.0 ), pow( vSunE * ( ( betaRTheta + betaMTheta ) / ( vBetaR + vBetaM ) ) * Fex, vec3( 1.0 / 2.0 ) ), clamp( pow( 1.0 - dot( up, vSunDirection ), 5.0 ), 0.0, 1.0 ) );\n\n // nightsky\n float theta = acos( direction.y ); // elevation --> y-axis, [-pi/2, pi/2]\n float phi = atan( direction.z, direction.x ); // azimuth --> x-axis [-pi/2, pi/2]\n vec2 uv = vec2( phi, theta ) / vec2( 2.0 * pi, pi ) + vec2( 0.5, 0.0 );\n vec3 L0 = vec3( 0.1 ) * Fex;\n\n // composition + solar disc\n float sundisk = smoothstep( sunAngularDiameterCos, sunAngularDiameterCos + 0.00002, cosTheta );\n L0 += ( vSunE * 19000.0 * Fex ) * sundisk;\n\n vec3 texColor = ( Lin + L0 ) * 0.04 + vec3( 0.0, 0.0003, 0.00075 );\n\n vec3 retColor = pow( texColor, vec3( 1.0 / ( 1.2 + ( 1.2 * vSunfade ) ) ) );\n\n gl_FragColor = vec4( retColor, 1.0 );\n\n #include <tonemapping_fragment>\n #include <${version >= 154 ? \"colorspace_fragment\" : \"encodings_fragment\"}>\n\n }\n `\n )\n };\n const material = new ShaderMaterial({\n name: \"SkyShader\",\n fragmentShader: SkyShader.fragmentShader,\n vertexShader: SkyShader.vertexShader,\n uniforms: UniformsUtils.clone(SkyShader.uniforms),\n side: BackSide,\n depthWrite: false\n });\n class Sky2 extends Mesh {\n constructor() {\n super(new BoxGeometry(1, 1, 1), material);\n }\n }\n __publicField(Sky2, \"SkyShader\", SkyShader);\n __publicField(Sky2, \"material\", material);\n return Sky2;\n})();\nexport {\n Sky\n};\n//# sourceMappingURL=Sky.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Mesh, Vector4, Color, Vector2, Matrix4, Clock, ShaderMaterial, UniformsUtils, UniformsLib, RepeatWrapping } from \"three\";\nimport { Reflector } from \"./Reflector.js\";\nimport { Refractor } from \"./Refractor.js\";\nimport { version } from \"../_polyfill/constants.js\";\nconst Water2 = /* @__PURE__ */ (() => {\n const _Water2 = class extends Mesh {\n constructor(geometry, options = {}) {\n super(geometry);\n this.isWater = true;\n this.type = \"Water\";\n const scope = this;\n const color = options.color !== void 0 ? new Color(options.color) : new Color(16777215);\n const textureWidth = options.textureWidth || 512;\n const textureHeight = options.textureHeight || 512;\n const clipBias = options.clipBias || 0;\n const flowDirection = options.flowDirection || new Vector2(1, 0);\n const flowSpeed = options.flowSpeed || 0.03;\n const reflectivity = options.reflectivity || 0.02;\n const scale = options.scale || 1;\n const shader = options.shader || _Water2.WaterShader;\n const encoding = options.encoding !== void 0 ? options.encoding : 3e3;\n const flowMap = options.flowMap || void 0;\n const normalMap0 = options.normalMap0;\n const normalMap1 = options.normalMap1;\n const cycle = 0.15;\n const halfCycle = cycle * 0.5;\n const textureMatrix = new Matrix4();\n const clock = new Clock();\n if (Reflector === void 0) {\n console.error(\"THREE.Water: Required component Reflector not found.\");\n return;\n }\n if (Refractor === void 0) {\n console.error(\"THREE.Water: Required component Refractor not found.\");\n return;\n }\n const reflector = new Reflector(geometry, {\n textureWidth,\n textureHeight,\n clipBias,\n encoding\n });\n const refractor = new Refractor(geometry, {\n textureWidth,\n textureHeight,\n clipBias,\n encoding\n });\n reflector.matrixAutoUpdate = false;\n refractor.matrixAutoUpdate = false;\n this.material = new ShaderMaterial({\n uniforms: UniformsUtils.merge([UniformsLib[\"fog\"], shader.uniforms]),\n vertexShader: shader.vertexShader,\n fragmentShader: shader.fragmentShader,\n transparent: true,\n fog: true\n });\n if (flowMap !== void 0) {\n this.material.defines.USE_FLOWMAP = \"\";\n this.material.uniforms[\"tFlowMap\"] = {\n type: \"t\",\n value: flowMap\n };\n } else {\n this.material.uniforms[\"flowDirection\"] = {\n type: \"v2\",\n value: flowDirection\n };\n }\n normalMap0.wrapS = normalMap0.wrapT = RepeatWrapping;\n normalMap1.wrapS = normalMap1.wrapT = RepeatWrapping;\n this.material.uniforms[\"tReflectionMap\"].value = reflector.getRenderTarget().texture;\n this.material.uniforms[\"tRefractionMap\"].value = refractor.getRenderTarget().texture;\n this.material.uniforms[\"tNormalMap0\"].value = normalMap0;\n this.material.uniforms[\"tNormalMap1\"].value = normalMap1;\n this.material.uniforms[\"color\"].value = color;\n this.material.uniforms[\"reflectivity\"].value = reflectivity;\n this.material.uniforms[\"textureMatrix\"].value = textureMatrix;\n this.material.uniforms[\"config\"].value.x = 0;\n this.material.uniforms[\"config\"].value.y = halfCycle;\n this.material.uniforms[\"config\"].value.z = halfCycle;\n this.material.uniforms[\"config\"].value.w = scale;\n function updateTextureMatrix(camera) {\n textureMatrix.set(0.5, 0, 0, 0.5, 0, 0.5, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0, 1);\n textureMatrix.multiply(camera.projectionMatrix);\n textureMatrix.multiply(camera.matrixWorldInverse);\n textureMatrix.multiply(scope.matrixWorld);\n }\n function updateFlow() {\n const delta = clock.getDelta();\n const config = scope.material.uniforms[\"config\"];\n config.value.x += flowSpeed * delta;\n config.value.y = config.value.x + halfCycle;\n if (config.value.x >= cycle) {\n config.value.x = 0;\n config.value.y = halfCycle;\n } else if (config.value.y >= cycle) {\n config.value.y = config.value.y - cycle;\n }\n }\n this.onBeforeRender = function(renderer, scene, camera) {\n updateTextureMatrix(camera);\n updateFlow();\n scope.visible = false;\n reflector.matrixWorld.copy(scope.matrixWorld);\n refractor.matrixWorld.copy(scope.matrixWorld);\n reflector.onBeforeRender(renderer, scene, camera);\n refractor.onBeforeRender(renderer, scene, camera);\n scope.visible = true;\n };\n }\n };\n let Water22 = _Water2;\n __publicField(Water22, \"WaterShader\", {\n uniforms: {\n color: {\n value: null\n },\n reflectivity: {\n value: 0\n },\n tReflectionMap: {\n value: null\n },\n tRefractionMap: {\n value: null\n },\n tNormalMap0: {\n value: null\n },\n tNormalMap1: {\n value: null\n },\n textureMatrix: {\n value: null\n },\n config: {\n value: /* @__PURE__ */ new Vector4()\n }\n },\n vertexShader: (\n /* glsl */\n `\n\n\t\t#include <common>\n\t\t#include <fog_pars_vertex>\n\t\t#include <logdepthbuf_pars_vertex>\n\n\t\tuniform mat4 textureMatrix;\n\n\t\tvarying vec4 vCoord;\n\t\tvarying vec2 vUv;\n\t\tvarying vec3 vToEye;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tvCoord = textureMatrix * vec4( position, 1.0 );\n\n\t\t\tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\t\t\tvToEye = cameraPosition - worldPosition.xyz;\n\n\t\t\tvec4 mvPosition = viewMatrix * worldPosition; // used in fog_vertex\n\t\t\tgl_Position = projectionMatrix * mvPosition;\n\n\t\t\t#include <logdepthbuf_vertex>\n\t\t\t#include <fog_vertex>\n\n\t\t}`\n ),\n fragmentShader: (\n /* glsl */\n `\n\n\t\t#include <common>\n\t\t#include <fog_pars_fragment>\n\t\t#include <logdepthbuf_pars_fragment>\n\n\t\tuniform sampler2D tReflectionMap;\n\t\tuniform sampler2D tRefractionMap;\n\t\tuniform sampler2D tNormalMap0;\n\t\tuniform sampler2D tNormalMap1;\n\n\t\t#ifdef USE_FLOWMAP\n\t\t\tuniform sampler2D tFlowMap;\n\t\t#else\n\t\t\tuniform vec2 flowDirection;\n\t\t#endif\n\n\t\tuniform vec3 color;\n\t\tuniform float reflectivity;\n\t\tuniform vec4 config;\n\n\t\tvarying vec4 vCoord;\n\t\tvarying vec2 vUv;\n\t\tvarying vec3 vToEye;\n\n\t\tvoid main() {\n\n\t\t\t#include <logdepthbuf_fragment>\n\n\t\t\tfloat flowMapOffset0 = config.x;\n\t\t\tfloat flowMapOffset1 = config.y;\n\t\t\tfloat halfCycle = config.z;\n\t\t\tfloat scale = config.w;\n\n\t\t\tvec3 toEye = normalize( vToEye );\n\n\t\t\t// determine flow direction\n\t\t\tvec2 flow;\n\t\t\t#ifdef USE_FLOWMAP\n\t\t\t\tflow = texture2D( tFlowMap, vUv ).rg * 2.0 - 1.0;\n\t\t\t#else\n\t\t\t\tflow = flowDirection;\n\t\t\t#endif\n\t\t\tflow.x *= - 1.0;\n\n\t\t\t// sample normal maps (distort uvs with flowdata)\n\t\t\tvec4 normalColor0 = texture2D( tNormalMap0, ( vUv * scale ) + flow * flowMapOffset0 );\n\t\t\tvec4 normalColor1 = texture2D( tNormalMap1, ( vUv * scale ) + flow * flowMapOffset1 );\n\n\t\t\t// linear interpolate to get the final normal color\n\t\t\tfloat flowLerp = abs( halfCycle - flowMapOffset0 ) / halfCycle;\n\t\t\tvec4 normalColor = mix( normalColor0, normalColor1, flowLerp );\n\n\t\t\t// calculate normal vector\n\t\t\tvec3 normal = normalize( vec3( normalColor.r * 2.0 - 1.0, normalColor.b, normalColor.g * 2.0 - 1.0 ) );\n\n\t\t\t// calculate the fresnel term to blend reflection and refraction maps\n\t\t\tfloat theta = max( dot( toEye, normal ), 0.0 );\n\t\t\tfloat reflectance = reflectivity + ( 1.0 - reflectivity ) * pow( ( 1.0 - theta ), 5.0 );\n\n\t\t\t// calculate final uv coords\n\t\t\tvec3 coord = vCoord.xyz / vCoord.w;\n\t\t\tvec2 uv = coord.xy + coord.z * normal.xz * 0.05;\n\n\t\t\tvec4 reflectColor = texture2D( tReflectionMap, vec2( 1.0 - uv.x, uv.y ) );\n\t\t\tvec4 refractColor = texture2D( tRefractionMap, uv );\n\n\t\t\t// multiply water color with the mix of both textures\n\t\t\tgl_FragColor = vec4( color, 1.0 ) * mix( refractColor, reflectColor, reflectance );\n\n\t\t\t#include <tonemapping_fragment>\n\t\t\t#include <${version >= 154 ? \"colorspace_fragment\" : \"encodings_fragment\"}>\n\t\t\t#include <fog_fragment>\n\n\t\t}`\n )\n });\n return Water22;\n})();\nexport {\n Water2\n};\n//# sourceMappingURL=Water2.js.map\n","import { Mesh, IcosahedronGeometry, ShaderMaterial, DoubleSide } from \"three\";\nimport { version } from \"../_polyfill/constants.js\";\nconst isCubeTexture = (def) => def && def.isCubeTexture;\nclass GroundProjectedEnv extends Mesh {\n constructor(texture, options) {\n var _a, _b;\n const isCubeMap = isCubeTexture(texture);\n const w = (_b = isCubeMap ? (_a = texture.image[0]) == null ? void 0 : _a.width : texture.image.width) != null ? _b : 1024;\n const cubeSize = w / 4;\n const _lodMax = Math.floor(Math.log2(cubeSize));\n const _cubeSize = Math.pow(2, _lodMax);\n const width = 3 * Math.max(_cubeSize, 16 * 7);\n const height = 4 * _cubeSize;\n const defines = [\n isCubeMap ? \"#define ENVMAP_TYPE_CUBE\" : \"\",\n `#define CUBEUV_TEXEL_WIDTH ${1 / width}`,\n `#define CUBEUV_TEXEL_HEIGHT ${1 / height}`,\n `#define CUBEUV_MAX_MIP ${_lodMax}.0`\n ];\n const vertexShader = (\n /* glsl */\n `\n varying vec3 vWorldPosition;\n void main() \n {\n vec4 worldPosition = ( modelMatrix * vec4( position, 1.0 ) );\n vWorldPosition = worldPosition.xyz;\n \n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }\n `\n );\n const fragmentShader = defines.join(\"\\n\") + /* glsl */\n `\n #define ENVMAP_TYPE_CUBE_UV\n varying vec3 vWorldPosition;\n uniform float radius;\n uniform float height;\n uniform float angle;\n #ifdef ENVMAP_TYPE_CUBE\n uniform samplerCube map;\n #else\n uniform sampler2D map;\n #endif\n // From: https://www.shadertoy.com/view/4tsBD7\n float diskIntersectWithBackFaceCulling( vec3 ro, vec3 rd, vec3 c, vec3 n, float r ) \n {\n float d = dot ( rd, n );\n \n if( d > 0.0 ) { return 1e6; }\n \n vec3 o = ro - c;\n float t = - dot( n, o ) / d;\n vec3 q = o + rd * t;\n \n return ( dot( q, q ) < r * r ) ? t : 1e6;\n }\n // From: https://www.iquilezles.org/www/articles/intersectors/intersectors.htm\n float sphereIntersect( vec3 ro, vec3 rd, vec3 ce, float ra ) \n {\n vec3 oc = ro - ce;\n float b = dot( oc, rd );\n float c = dot( oc, oc ) - ra * ra;\n float h = b * b - c;\n \n if( h < 0.0 ) { return -1.0; }\n \n h = sqrt( h );\n \n return - b + h;\n }\n vec3 project() \n {\n vec3 p = normalize( vWorldPosition );\n vec3 camPos = cameraPosition;\n camPos.y -= height;\n float intersection = sphereIntersect( camPos, p, vec3( 0.0 ), radius );\n if( intersection > 0.0 ) {\n \n vec3 h = vec3( 0.0, - height, 0.0 );\n float intersection2 = diskIntersectWithBackFaceCulling( camPos, p, h, vec3( 0.0, 1.0, 0.0 ), radius );\n p = ( camPos + min( intersection, intersection2 ) * p ) / radius;\n } else {\n p = vec3( 0.0, 1.0, 0.0 );\n }\n return p;\n }\n #include <common>\n #include <cube_uv_reflection_fragment>\n void main() \n {\n vec3 projectedWorldPosition = project();\n \n #ifdef ENVMAP_TYPE_CUBE\n vec3 outcolor = textureCube( map, projectedWorldPosition ).rgb;\n #else\n vec3 direction = normalize( projectedWorldPosition );\n vec2 uv = equirectUv( direction );\n vec3 outcolor = texture2D( map, uv ).rgb;\n #endif\n gl_FragColor = vec4( outcolor, 1.0 );\n #include <tonemapping_fragment>\n #include <${version >= 154 ? \"colorspace_fragment\" : \"encodings_fragment\"}>\n }\n `;\n const uniforms = {\n map: { value: texture },\n height: { value: (options == null ? void 0 : options.height) || 15 },\n radius: { value: (options == null ? void 0 : options.radius) || 100 }\n };\n const geometry = new IcosahedronGeometry(1, 16);\n const material = new ShaderMaterial({\n uniforms,\n fragmentShader,\n vertexShader,\n side: DoubleSide\n });\n super(geometry, material);\n }\n set radius(radius) {\n this.material.uniforms.radius.value = radius;\n }\n get radius() {\n return this.material.uniforms.radius.value;\n }\n set height(height) {\n this.material.uniforms.height.value = height;\n }\n get height() {\n return this.material.uniforms.height.value;\n }\n}\nexport {\n GroundProjectedEnv\n};\n//# sourceMappingURL=GroundProjectedEnv.js.map\n","import { Group, Mesh } from \"three\";\nconst SceneUtils = {\n createMeshesFromInstancedMesh: function(instancedMesh) {\n const group = new Group();\n const count = instancedMesh.count;\n const geometry = instancedMesh.geometry;\n const material = instancedMesh.material;\n for (let i = 0; i < count; i++) {\n const mesh = new Mesh(geometry, material);\n instancedMesh.getMatrixAt(i, mesh.matrix);\n mesh.matrix.decompose(mesh.position, mesh.quaternion, mesh.scale);\n group.add(mesh);\n }\n group.copy(instancedMesh);\n group.updateMatrixWorld();\n return group;\n },\n createMultiMaterialObject: function(geometry, materials) {\n const group = new Group();\n for (let i = 0, l = materials.length; i < l; i++) {\n group.add(new Mesh(geometry, materials[i]));\n }\n return group;\n },\n detach: function(child, parent, scene) {\n console.warn(\"THREE.SceneUtils: detach() has been deprecated. Use scene.attach( child ) instead.\");\n scene.attach(child);\n },\n attach: function(child, scene, parent) {\n console.warn(\"THREE.SceneUtils: attach() has been deprecated. Use parent.attach( child ) instead.\");\n parent.attach(child);\n }\n};\nexport {\n SceneUtils\n};\n//# sourceMappingURL=SceneUtils.js.map\n","import { Vector2 } from \"three\";\nfunction UVsDebug(geometry, size = 1024) {\n const abc = \"abc\";\n const a = new Vector2();\n const b = new Vector2();\n const uvs = [new Vector2(), new Vector2(), new Vector2()];\n const face = [];\n const canvas = document.createElement(\"canvas\");\n const width = size;\n const height = size;\n canvas.width = width;\n canvas.height = height;\n const ctx = canvas.getContext(\"2d\");\n ctx.lineWidth = 1;\n ctx.strokeStyle = \"rgb( 63, 63, 63 )\";\n ctx.textAlign = \"center\";\n ctx.fillStyle = \"rgb( 255, 255, 255 )\";\n ctx.fillRect(0, 0, width, height);\n const index = geometry.index;\n const uvAttribute = geometry.attributes.uv;\n if (index) {\n for (let i = 0, il = index.count; i < il; i += 3) {\n face[0] = index.getX(i);\n face[1] = index.getX(i + 1);\n face[2] = index.getX(i + 2);\n uvs[0].fromBufferAttribute(uvAttribute, face[0]);\n uvs[1].fromBufferAttribute(uvAttribute, face[1]);\n uvs[2].fromBufferAttribute(uvAttribute, face[2]);\n processFace(face, uvs, i / 3);\n }\n } else {\n for (let i = 0, il = uvAttribute.count; i < il; i += 3) {\n face[0] = i;\n face[1] = i + 1;\n face[2] = i + 2;\n uvs[0].fromBufferAttribute(uvAttribute, face[0]);\n uvs[1].fromBufferAttribute(uvAttribute, face[1]);\n uvs[2].fromBufferAttribute(uvAttribute, face[2]);\n processFace(face, uvs, i / 3);\n }\n }\n return canvas;\n function processFace(face2, uvs2, index2) {\n ctx.beginPath();\n a.set(0, 0);\n for (let j = 0, jl = uvs2.length; j < jl; j++) {\n const uv = uvs2[j];\n a.x += uv.x;\n a.y += uv.y;\n if (j === 0) {\n ctx.moveTo(uv.x * (width - 2) + 0.5, (1 - uv.y) * (height - 2) + 0.5);\n } else {\n ctx.lineTo(uv.x * (width - 2) + 0.5, (1 - uv.y) * (height - 2) + 0.5);\n }\n }\n ctx.closePath();\n ctx.stroke();\n a.divideScalar(uvs2.length);\n ctx.font = \"18px Arial\";\n ctx.fillStyle = \"rgb( 63, 63, 63 )\";\n ctx.fillText(index2, a.x * width, (1 - a.y) * height);\n if (a.x > 0.95) {\n ctx.fillText(index2, a.x % 1 * width, (1 - a.y) * height);\n }\n ctx.font = \"12px Arial\";\n ctx.fillStyle = \"rgb( 191, 191, 191 )\";\n for (let j = 0, jl = uvs2.length; j < jl; j++) {\n const uv = uvs2[j];\n b.addVectors(a, uv).divideScalar(2);\n const vnum = face2[j];\n ctx.fillText(abc[j] + vnum, b.x * width, (1 - b.y) * height);\n if (b.x > 0.95) {\n ctx.fillText(abc[j] + vnum, b.x % 1 * width, (1 - b.y) * height);\n }\n }\n }\n}\nexport {\n UVsDebug\n};\n//# sourceMappingURL=UVsDebug.js.map\n","import { Vector3 } from \"three\";\nconst hilbert2D = (center = new Vector3(0, 0, 0), size = 10, iterations = 1, v0 = 0, v1 = 1, v2 = 2, v3 = 3) => {\n const half = size / 2;\n const vec_s = [\n new Vector3(center.x - half, center.y, center.z - half),\n new Vector3(center.x - half, center.y, center.z + half),\n new Vector3(center.x + half, center.y, center.z + half),\n new Vector3(center.x + half, center.y, center.z - half)\n ];\n const vec = [vec_s[v0], vec_s[v1], vec_s[v2], vec_s[v3]];\n if (0 <= --iterations) {\n const tmp = [];\n Array.prototype.push.apply(tmp, hilbert2D(vec[0], half, iterations, v0, v3, v2, v1));\n Array.prototype.push.apply(tmp, hilbert2D(vec[1], half, iterations, v0, v1, v2, v3));\n Array.prototype.push.apply(tmp, hilbert2D(vec[2], half, iterations, v0, v1, v2, v3));\n Array.prototype.push.apply(tmp, hilbert2D(vec[3], half, iterations, v2, v1, v0, v3));\n return tmp;\n }\n return vec;\n};\nconst hilbert3D = (center = new Vector3(0, 0, 0), size = 10, iterations = 1, v0 = 0, v1 = 1, v2 = 2, v3 = 3, v4 = 4, v5 = 5, v6 = 6, v7 = 7) => {\n const half = size / 2;\n const vec_s = [\n new Vector3(center.x - half, center.y + half, center.z - half),\n new Vector3(center.x - half, center.y + half, center.z + half),\n new Vector3(center.x - half, center.y - half, center.z + half),\n new Vector3(center.x - half, center.y - half, center.z - half),\n new Vector3(center.x + half, center.y - half, center.z - half),\n new Vector3(center.x + half, center.y - half, center.z + half),\n new Vector3(center.x + half, center.y + half, center.z + half),\n new Vector3(center.x + half, center.y + half, center.z - half)\n ];\n const vec = [vec_s[v0], vec_s[v1], vec_s[v2], vec_s[v3], vec_s[v4], vec_s[v5], vec_s[v6], vec_s[v7]];\n if (--iterations >= 0) {\n const tmp = [];\n Array.prototype.push.apply(tmp, hilbert3D(vec[0], half, iterations, v0, v3, v4, v7, v6, v5, v2, v1));\n Array.prototype.push.apply(tmp, hilbert3D(vec[1], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3));\n Array.prototype.push.apply(tmp, hilbert3D(vec[2], half, iterations, v0, v7, v6, v1, v2, v5, v4, v3));\n Array.prototype.push.apply(tmp, hilbert3D(vec[3], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5));\n Array.prototype.push.apply(tmp, hilbert3D(vec[4], half, iterations, v2, v3, v0, v1, v6, v7, v4, v5));\n Array.prototype.push.apply(tmp, hilbert3D(vec[5], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7));\n Array.prototype.push.apply(tmp, hilbert3D(vec[6], half, iterations, v4, v3, v2, v5, v6, v1, v0, v7));\n Array.prototype.push.apply(tmp, hilbert3D(vec[7], half, iterations, v6, v5, v2, v1, v0, v3, v4, v7));\n return tmp;\n }\n return vec;\n};\nconst gosper = (size = 1) => {\n function fractalize(config) {\n let output = \"\";\n let input = config.axiom;\n for (let i = 0, il = config.steps; 0 <= il ? i < il : i > il; 0 <= il ? i++ : i--) {\n output = \"\";\n for (let j = 0, jl = input.length; j < jl; j++) {\n const char = input[j];\n if (char in config.rules) {\n output += config.rules[char];\n } else {\n output += char;\n }\n }\n input = output;\n }\n return output;\n }\n function toPoints(config) {\n let currX = 0;\n let currY = 0;\n let angle = 0;\n const path = [0, 0, 0];\n const fractal = config.fractal;\n for (let i = 0, l = fractal.length; i < l; i++) {\n const char = fractal[i];\n if (char === \"+\") {\n angle += config.angle;\n } else if (char === \"-\") {\n angle -= config.angle;\n } else if (char === \"F\") {\n currX += config.size * Math.cos(angle);\n currY += -config.size * Math.sin(angle);\n path.push(currX, currY, 0);\n }\n }\n return path;\n }\n const gosper2 = fractalize({\n axiom: \"A\",\n steps: 4,\n rules: {\n A: \"A+BF++BF-FA--FAFA-BF+\",\n B: \"-FA+BFBF++BF+FA--FA-B\"\n }\n });\n const points = toPoints({\n fractal: gosper2,\n size,\n angle: Math.PI / 3\n // 60 degrees\n });\n return points;\n};\nconst GeometryUtils = {\n hilbert3D,\n gosper,\n hilbert2D\n};\nexport {\n GeometryUtils\n};\n//# sourceMappingURL=GeometryUtils.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { MathUtils, WebGLRenderTarget, Vector2, Mesh, PlaneGeometry, OrthographicCamera, RawShaderMaterial, NoBlending } from \"three\";\nvar _mipmapMaterial = /* @__PURE__ */ _getMipmapMaterial();\nvar _mesh = /* @__PURE__ */ new Mesh(/* @__PURE__ */ new PlaneGeometry(2, 2), _mipmapMaterial);\nvar _flatCamera = /* @__PURE__ */ new OrthographicCamera(0, 1, 0, 1, 0, 1);\nvar _tempTarget = null;\nclass RoughnessMipmapper {\n constructor(renderer) {\n __publicField(this, \"generateMipmaps\", function(material) {\n if (\"roughnessMap\" in material === false)\n return;\n var { roughnessMap, normalMap } = material;\n if (roughnessMap === null || normalMap === null || !roughnessMap.generateMipmaps || material.userData.roughnessUpdated) {\n return;\n }\n material.userData.roughnessUpdated = true;\n var width = Math.max(roughnessMap.image.width, normalMap.image.width);\n var height = Math.max(roughnessMap.image.height, normalMap.image.height);\n if (!MathUtils.isPowerOfTwo(width) || !MathUtils.isPowerOfTwo(height))\n return;\n var oldTarget = this._renderer.getRenderTarget();\n var autoClear = this._renderer.autoClear;\n this._renderer.autoClear = false;\n if (_tempTarget === null || _tempTarget.width !== width || _tempTarget.height !== height) {\n if (_tempTarget !== null)\n _tempTarget.dispose();\n _tempTarget = new WebGLRenderTarget(width, height, {\n depthBuffer: false\n });\n _tempTarget.scissorTest = true;\n }\n if (width !== roughnessMap.image.width || height !== roughnessMap.image.height) {\n var params = {\n wrapS: roughnessMap.wrapS,\n wrapT: roughnessMap.wrapT,\n magFilter: roughnessMap.magFilter,\n minFilter: roughnessMap.minFilter,\n depthBuffer: false\n };\n var newRoughnessTarget = new WebGLRenderTarget(width, height, params);\n newRoughnessTarget.texture.generateMipmaps = true;\n this._renderer.setRenderTarget(newRoughnessTarget);\n material.roughnessMap = newRoughnessTarget.texture;\n if (material.metalnessMap == roughnessMap)\n material.metalnessMap = material.roughnessMap;\n if (material.aoMap == roughnessMap)\n material.aoMap = material.roughnessMap;\n }\n _mipmapMaterial.uniforms.roughnessMap.value = roughnessMap;\n _mipmapMaterial.uniforms.normalMap.value = normalMap;\n var position = new Vector2(0, 0);\n var texelSize = _mipmapMaterial.uniforms.texelSize.value;\n for (let mip = 0; width >= 1 && height >= 1; ++mip, width /= 2, height /= 2) {\n texelSize.set(1 / width, 1 / height);\n if (mip == 0)\n texelSize.set(0, 0);\n _tempTarget.viewport.set(position.x, position.y, width, height);\n _tempTarget.scissor.set(position.x, position.y, width, height);\n this._renderer.setRenderTarget(_tempTarget);\n this._renderer.render(_mesh, _flatCamera);\n this._renderer.copyFramebufferToTexture(position, material.roughnessMap, mip);\n _mipmapMaterial.uniforms.roughnessMap.value = material.roughnessMap;\n }\n if (roughnessMap !== material.roughnessMap)\n roughnessMap.dispose();\n this._renderer.setRenderTarget(oldTarget);\n this._renderer.autoClear = autoClear;\n });\n __publicField(this, \"dispose\", function() {\n _mipmapMaterial.dispose();\n _mesh.geometry.dispose();\n if (_tempTarget != null)\n _tempTarget.dispose();\n });\n this._renderer = renderer;\n this._renderer.compile(_mesh, _flatCamera);\n }\n}\nfunction _getMipmapMaterial() {\n var shaderMaterial = new RawShaderMaterial({\n uniforms: {\n roughnessMap: { value: null },\n normalMap: { value: null },\n texelSize: { value: new Vector2(1, 1) }\n },\n vertexShader: (\n /* glsl */\n `\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tattribute vec3 position;\n\t\t\tattribute vec2 uv;\n\n\t\t\tvarying vec2 vUv;\n\n\t\t\tvoid main() {\n\n\t\t\t\tvUv = uv;\n\n\t\t\t\tgl_Position = vec4( position, 1.0 );\n\n\t\t\t}\n\t\t`\n ),\n fragmentShader: (\n /* glsl */\n `\n\t\t\tprecision mediump float;\n\t\t\tprecision mediump int;\n\n\t\t\tvarying vec2 vUv;\n\n\t\t\tuniform sampler2D roughnessMap;\n\t\t\tuniform sampler2D normalMap;\n\t\t\tuniform vec2 texelSize;\n\n\t\t\t#define ENVMAP_TYPE_CUBE_UV\n\n\t\t\tvec4 envMapTexelToLinear( vec4 a ) { return a; }\n\n\t\t\t#include <cube_uv_reflection_fragment>\n\n\t\t\tfloat roughnessToVariance( float roughness ) {\n\n\t\t\t\tfloat variance = 0.0;\n\n\t\t\t\tif ( roughness >= r1 ) {\n\n\t\t\t\t\tvariance = ( r0 - roughness ) * ( v1 - v0 ) / ( r0 - r1 ) + v0;\n\n\t\t\t\t} else if ( roughness >= r4 ) {\n\n\t\t\t\t\tvariance = ( r1 - roughness ) * ( v4 - v1 ) / ( r1 - r4 ) + v1;\n\n\t\t\t\t} else if ( roughness >= r5 ) {\n\n\t\t\t\t\tvariance = ( r4 - roughness ) * ( v5 - v4 ) / ( r4 - r5 ) + v4;\n\n\t\t\t\t} else {\n\n\t\t\t\t\tfloat roughness2 = roughness * roughness;\n\n\t\t\t\t\tvariance = 1.79 * roughness2 * roughness2;\n\n\t\t\t\t}\n\n\t\t\t\treturn variance;\n\n\t\t\t}\n\n\t\t\tfloat varianceToRoughness( float variance ) {\n\n\t\t\t\tfloat roughness = 0.0;\n\n\t\t\t\tif ( variance >= v1 ) {\n\n\t\t\t\t\troughness = ( v0 - variance ) * ( r1 - r0 ) / ( v0 - v1 ) + r0;\n\n\t\t\t\t} else if ( variance >= v4 ) {\n\n\t\t\t\t\troughness = ( v1 - variance ) * ( r4 - r1 ) / ( v1 - v4 ) + r1;\n\n\t\t\t\t} else if ( variance >= v5 ) {\n\n\t\t\t\t\troughness = ( v4 - variance ) * ( r5 - r4 ) / ( v4 - v5 ) + r4;\n\n\t\t\t\t} else {\n\n\t\t\t\t\troughness = pow( 0.559 * variance, 0.25 ); // 0.559 = 1.0 / 1.79\n\n\t\t\t\t}\n\n\t\t\t\treturn roughness;\n\n\t\t\t}\n\n\t\t\tvoid main() {\n\n\t\t\t\tgl_FragColor = texture2D( roughnessMap, vUv, - 1.0 );\n\n\t\t\t\tif ( texelSize.x == 0.0 ) return;\n\n\t\t\t\tfloat roughness = gl_FragColor.g;\n\n\t\t\t\tfloat variance = roughnessToVariance( roughness );\n\n\t\t\t\tvec3 avgNormal;\n\n\t\t\t\tfor ( float x = - 1.0; x < 2.0; x += 2.0 ) {\n\n\t\t\t\t\tfor ( float y = - 1.0; y < 2.0; y += 2.0 ) {\n\n\t\t\t\t\t\tvec2 uv = vUv + vec2( x, y ) * 0.25 * texelSize;\n\n\t\t\t\t\t\tavgNormal += normalize( texture2D( normalMap, uv, - 1.0 ).xyz - 0.5 );\n\n\t\t\t\t\t}\n\n\t\t\t\t}\n\n\t\t\t\tvariance += 1.0 - 0.25 * length( avgNormal );\n\n\t\t\t\tgl_FragColor.g = varianceToRoughness( variance );\n\n\t\t\t}\n\t\t`\n ),\n blending: NoBlending,\n depthTest: false,\n depthWrite: false\n });\n shaderMaterial.type = \"RoughnessMipmapper\";\n return shaderMaterial;\n}\nexport {\n RoughnessMipmapper\n};\n//# sourceMappingURL=RoughnessMipmapper.js.map\n","import { Vector3, Quaternion, Matrix4, AnimationMixer, VectorKeyframeTrack, QuaternionKeyframeTrack, AnimationClip, SkeletonHelper } from \"three\";\nfunction retarget(target, source, options = {}) {\n const pos = new Vector3(), quat = new Quaternion(), scale = new Vector3(), bindBoneMatrix = new Matrix4(), relativeMatrix = new Matrix4(), globalMatrix = new Matrix4();\n options.preserveMatrix = options.preserveMatrix !== void 0 ? options.preserveMatrix : true;\n options.preservePosition = options.preservePosition !== void 0 ? options.preservePosition : true;\n options.preserveHipPosition = options.preserveHipPosition !== void 0 ? options.preserveHipPosition : false;\n options.useTargetMatrix = options.useTargetMatrix !== void 0 ? options.useTargetMatrix : false;\n options.hip = options.hip !== void 0 ? options.hip : \"hip\";\n options.names = options.names || {};\n const sourceBones = source.isObject3D ? source.skeleton.bones : getBones(source), bones = target.isObject3D ? target.skeleton.bones : getBones(target);\n let bindBones, bone, name, boneTo, bonesPosition;\n if (target.isObject3D) {\n target.skeleton.pose();\n } else {\n options.useTargetMatrix = true;\n options.preserveMatrix = false;\n }\n if (options.preservePosition) {\n bonesPosition = [];\n for (let i = 0; i < bones.length; i++) {\n bonesPosition.push(bones[i].position.clone());\n }\n }\n if (options.preserveMatrix) {\n target.updateMatrixWorld();\n target.matrixWorld.identity();\n for (let i = 0; i < target.children.length; ++i) {\n target.children[i].updateMatrixWorld(true);\n }\n }\n if (options.offsets) {\n bindBones = [];\n for (let i = 0; i < bones.length; ++i) {\n bone = bones[i];\n name = options.names[bone.name] || bone.name;\n if (options.offsets[name]) {\n bone.matrix.multiply(options.offsets[name]);\n bone.matrix.decompose(bone.position, bone.quaternion, bone.scale);\n bone.updateMatrixWorld();\n }\n bindBones.push(bone.matrixWorld.clone());\n }\n }\n for (let i = 0; i < bones.length; ++i) {\n bone = bones[i];\n name = options.names[bone.name] || bone.name;\n boneTo = getBoneByName(name, sourceBones);\n globalMatrix.copy(bone.matrixWorld);\n if (boneTo) {\n boneTo.updateMatrixWorld();\n if (options.useTargetMatrix) {\n relativeMatrix.copy(boneTo.matrixWorld);\n } else {\n relativeMatrix.copy(target.matrixWorld).invert();\n relativeMatrix.multiply(boneTo.matrixWorld);\n }\n scale.setFromMatrixScale(relativeMatrix);\n relativeMatrix.scale(scale.set(1 / scale.x, 1 / scale.y, 1 / scale.z));\n globalMatrix.makeRotationFromQuaternion(quat.setFromRotationMatrix(relativeMatrix));\n if (target.isObject3D) {\n const boneIndex = bones.indexOf(bone), wBindMatrix = bindBones ? bindBones[boneIndex] : bindBoneMatrix.copy(target.skeleton.boneInverses[boneIndex]).invert();\n globalMatrix.multiply(wBindMatrix);\n }\n globalMatrix.copyPosition(relativeMatrix);\n }\n if (bone.parent && bone.parent.isBone) {\n bone.matrix.copy(bone.parent.matrixWorld).invert();\n bone.matrix.multiply(globalMatrix);\n } else {\n bone.matrix.copy(globalMatrix);\n }\n if (options.preserveHipPosition && name === options.hip) {\n bone.matrix.setPosition(pos.set(0, bone.position.y, 0));\n }\n bone.matrix.decompose(bone.position, bone.quaternion, bone.scale);\n bone.updateMatrixWorld();\n }\n if (options.preservePosition) {\n for (let i = 0; i < bones.length; ++i) {\n bone = bones[i];\n name = options.names[bone.name] || bone.name;\n if (name !== options.hip) {\n bone.position.copy(bonesPosition[i]);\n }\n }\n }\n if (options.preserveMatrix) {\n target.updateMatrixWorld(true);\n }\n}\nfunction retargetClip(target, source, clip, options = {}) {\n options.useFirstFramePosition = options.useFirstFramePosition !== void 0 ? options.useFirstFramePosition : false;\n options.fps = options.fps !== void 0 ? options.fps : 30;\n options.names = options.names || [];\n if (!source.isObject3D) {\n source = getHelperFromSkeleton(source);\n }\n const numFrames = Math.round(clip.duration * (options.fps / 1e3) * 1e3), delta = 1 / options.fps, convertedTracks = [], mixer = new AnimationMixer(source), bones = getBones(target.skeleton), boneDatas = [];\n let positionOffset, bone, boneTo, boneData, name;\n mixer.clipAction(clip).play();\n mixer.update(0);\n source.updateMatrixWorld();\n for (let i = 0; i < numFrames; ++i) {\n const time = i * delta;\n retarget(target, source, options);\n for (let j = 0; j < bones.length; ++j) {\n name = options.names[bones[j].name] || bones[j].name;\n boneTo = getBoneByName(name, source.skeleton);\n if (boneTo) {\n bone = bones[j];\n boneData = boneDatas[j] = boneDatas[j] || { bone };\n if (options.hip === name) {\n if (!boneData.pos) {\n boneData.pos = {\n times: new Float32Array(numFrames),\n values: new Float32Array(numFrames * 3)\n };\n }\n if (options.useFirstFramePosition) {\n if (i === 0) {\n positionOffset = bone.position.clone();\n }\n bone.position.sub(positionOffset);\n }\n boneData.pos.times[i] = time;\n bone.position.toArray(boneData.pos.values, i * 3);\n }\n if (!boneData.quat) {\n boneData.quat = {\n times: new Float32Array(numFrames),\n values: new Float32Array(numFrames * 4)\n };\n }\n boneData.quat.times[i] = time;\n bone.quaternion.toArray(boneData.quat.values, i * 4);\n }\n }\n mixer.update(delta);\n source.updateMatrixWorld();\n }\n for (let i = 0; i < boneDatas.length; ++i) {\n boneData = boneDatas[i];\n if (boneData) {\n if (boneData.pos) {\n convertedTracks.push(\n new VectorKeyframeTrack(\n \".bones[\" + boneData.bone.name + \"].position\",\n boneData.pos.times,\n boneData.pos.values\n )\n );\n }\n convertedTracks.push(\n new QuaternionKeyframeTrack(\n \".bones[\" + boneData.bone.name + \"].quaternion\",\n boneData.quat.times,\n boneData.quat.values\n )\n );\n }\n }\n mixer.uncacheAction(clip);\n return new AnimationClip(clip.name, -1, convertedTracks);\n}\nfunction clone(source) {\n const sourceLookup = /* @__PURE__ */ new Map();\n const cloneLookup = /* @__PURE__ */ new Map();\n const clone2 = source.clone();\n parallelTraverse(source, clone2, function(sourceNode, clonedNode) {\n sourceLookup.set(clonedNode, sourceNode);\n cloneLookup.set(sourceNode, clonedNode);\n });\n clone2.traverse(function(node) {\n if (!node.isSkinnedMesh)\n return;\n const clonedMesh = node;\n const sourceMesh = sourceLookup.get(node);\n const sourceBones = sourceMesh.skeleton.bones;\n clonedMesh.skeleton = sourceMesh.skeleton.clone();\n clonedMesh.bindMatrix.copy(sourceMesh.bindMatrix);\n clonedMesh.skeleton.bones = sourceBones.map(function(bone) {\n return cloneLookup.get(bone);\n });\n clonedMesh.bind(clonedMesh.skeleton, clonedMesh.bindMatrix);\n });\n return clone2;\n}\nfunction getBoneByName(name, skeleton) {\n for (let i = 0, bones = getBones(skeleton); i < bones.length; i++) {\n if (name === bones[i].name)\n return bones[i];\n }\n}\nfunction getBones(skeleton) {\n return Array.isArray(skeleton) ? skeleton : skeleton.bones;\n}\nfunction getHelperFromSkeleton(skeleton) {\n const source = new SkeletonHelper(skeleton.bones[0]);\n source.skeleton = skeleton;\n return source;\n}\nfunction parallelTraverse(a, b, callback) {\n callback(a, b);\n for (let i = 0; i < a.children.length; i++) {\n parallelTraverse(a.children[i], b.children[i], callback);\n }\n}\nconst SkeletonUtils = { retarget, retargetClip, clone };\nexport {\n SkeletonUtils\n};\n//# sourceMappingURL=SkeletonUtils.js.map\n","const UnpackDepthRGBAShader = {\n uniforms: {\n tDiffuse: { value: null },\n opacity: { value: 1 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform float opacity;\n\n uniform sampler2D tDiffuse;\n\n varying vec2 vUv;\n\n #include <packing>\n\n void main() {\n\n \tfloat depth = 1.0 - unpackRGBAToDepth( texture2D( tDiffuse, vUv ) );\n \tgl_FragColor = vec4( vec3( depth ), opacity );\n\n }\n `\n )\n};\nexport {\n UnpackDepthRGBAShader\n};\n//# sourceMappingURL=UnpackDepthRGBAShader.js.map\n","import { OrthographicCamera, Scene, UniformsUtils, ShaderMaterial, PlaneGeometry, Mesh, Texture, LinearFilter, MeshBasicMaterial, DoubleSide } from \"three\";\nimport { UnpackDepthRGBAShader } from \"../shaders/UnpackDepthRGBAShader.js\";\nclass ShadowMapViewer {\n constructor(light) {\n const scope = this;\n const doRenderLabel = light.name !== void 0 && light.name !== \"\";\n let userAutoClearSetting;\n const frame = {\n x: 10,\n y: 10,\n width: 256,\n height: 256\n };\n const camera = new OrthographicCamera(\n window.innerWidth / -2,\n window.innerWidth / 2,\n window.innerHeight / 2,\n window.innerHeight / -2,\n 1,\n 10\n );\n camera.position.set(0, 0, 2);\n const scene = new Scene();\n const shader = UnpackDepthRGBAShader;\n const uniforms = UniformsUtils.clone(shader.uniforms);\n const material = new ShaderMaterial({\n uniforms,\n vertexShader: shader.vertexShader,\n fragmentShader: shader.fragmentShader\n });\n const plane = new PlaneGeometry(frame.width, frame.height);\n const mesh = new Mesh(plane, material);\n scene.add(mesh);\n let labelCanvas, labelMesh;\n if (doRenderLabel) {\n labelCanvas = document.createElement(\"canvas\");\n const context = labelCanvas.getContext(\"2d\");\n context.font = \"Bold 20px Arial\";\n const labelWidth = context.measureText(light.name).width;\n labelCanvas.width = labelWidth;\n labelCanvas.height = 25;\n context.font = \"Bold 20px Arial\";\n context.fillStyle = \"rgba( 255, 0, 0, 1 )\";\n context.fillText(light.name, 0, 20);\n const labelTexture = new Texture(labelCanvas);\n labelTexture.magFilter = LinearFilter;\n labelTexture.minFilter = LinearFilter;\n labelTexture.needsUpdate = true;\n const labelMaterial = new MeshBasicMaterial({ map: labelTexture, side: DoubleSide });\n labelMaterial.transparent = true;\n const labelPlane = new PlaneGeometry(labelCanvas.width, labelCanvas.height);\n labelMesh = new Mesh(labelPlane, labelMaterial);\n scene.add(labelMesh);\n }\n function resetPosition() {\n scope.position.set(scope.position.x, scope.position.y);\n }\n this.enabled = true;\n this.size = {\n width: frame.width,\n height: frame.height,\n set: function(width, height) {\n this.width = width;\n this.height = height;\n mesh.scale.set(this.width / frame.width, this.height / frame.height, 1);\n resetPosition();\n }\n };\n this.position = {\n x: frame.x,\n y: frame.y,\n set: function(x, y) {\n this.x = x;\n this.y = y;\n const width = scope.size.width;\n const height = scope.size.height;\n mesh.position.set(-window.innerWidth / 2 + width / 2 + this.x, window.innerHeight / 2 - height / 2 - this.y, 0);\n if (doRenderLabel)\n labelMesh.position.set(mesh.position.x, mesh.position.y - scope.size.height / 2 + labelCanvas.height / 2, 0);\n }\n };\n this.render = function(renderer) {\n if (this.enabled) {\n uniforms.tDiffuse.value = light.shadow.map.texture;\n userAutoClearSetting = renderer.autoClear;\n renderer.autoClear = false;\n renderer.clearDepth();\n renderer.render(scene, camera);\n renderer.autoClear = userAutoClearSetting;\n }\n };\n this.updateForWindowResize = function() {\n if (this.enabled) {\n camera.left = window.innerWidth / -2;\n camera.right = window.innerWidth / 2;\n camera.top = window.innerHeight / 2;\n camera.bottom = window.innerHeight / -2;\n camera.updateProjectionMatrix();\n this.update();\n }\n };\n this.update = function() {\n this.position.set(this.position.x, this.position.y);\n this.size.set(this.size.width, this.size.height);\n };\n this.update();\n }\n}\nexport {\n ShadowMapViewer\n};\n//# sourceMappingURL=ShadowMapViewer.js.map\n","import { BufferAttribute, Matrix4, Vector3, Matrix3, MeshPhongMaterial, UniformsUtils, ShaderLib, ShaderChunk } from \"three\";\nimport { version } from \"../_polyfill/constants.js\";\nvar GeometryCompressionUtils = {\n /**\n * Make the input mesh.geometry's normal attribute encoded and compressed by 3 different methods.\n * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the normal data.\n *\n * @param {THREE.Mesh} mesh\n * @param {String} encodeMethod\t\t\"DEFAULT\" || \"OCT1Byte\" || \"OCT2Byte\" || \"ANGLES\"\n *\n */\n compressNormals: function(mesh, encodeMethod) {\n if (!mesh.geometry) {\n console.error(\"Mesh must contain geometry. \");\n }\n const normal = mesh.geometry.attributes.normal;\n if (!normal) {\n console.error(\"Geometry must contain normal attribute. \");\n }\n if (normal.isPacked)\n return;\n if (normal.itemSize != 3) {\n console.error(\"normal.itemSize is not 3, which cannot be encoded. \");\n }\n const array = normal.array;\n const count = normal.count;\n let result;\n if (encodeMethod == \"DEFAULT\") {\n result = new Uint8Array(count * 3);\n for (let idx = 0; idx < array.length; idx += 3) {\n const encoded = this.EncodingFuncs.defaultEncode(array[idx], array[idx + 1], array[idx + 2], 1);\n result[idx + 0] = encoded[0];\n result[idx + 1] = encoded[1];\n result[idx + 2] = encoded[2];\n }\n mesh.geometry.setAttribute(\"normal\", new BufferAttribute(result, 3, true));\n mesh.geometry.attributes.normal.bytes = result.length * 1;\n } else if (encodeMethod == \"OCT1Byte\") {\n result = new Int8Array(count * 2);\n for (let idx = 0; idx < array.length; idx += 3) {\n const encoded = this.EncodingFuncs.octEncodeBest(array[idx], array[idx + 1], array[idx + 2], 1);\n result[idx / 3 * 2 + 0] = encoded[0];\n result[idx / 3 * 2 + 1] = encoded[1];\n }\n mesh.geometry.setAttribute(\"normal\", new BufferAttribute(result, 2, true));\n mesh.geometry.attributes.normal.bytes = result.length * 1;\n } else if (encodeMethod == \"OCT2Byte\") {\n result = new Int16Array(count * 2);\n for (let idx = 0; idx < array.length; idx += 3) {\n const encoded = this.EncodingFuncs.octEncodeBest(array[idx], array[idx + 1], array[idx + 2], 2);\n result[idx / 3 * 2 + 0] = encoded[0];\n result[idx / 3 * 2 + 1] = encoded[1];\n }\n mesh.geometry.setAttribute(\"normal\", new BufferAttribute(result, 2, true));\n mesh.geometry.attributes.normal.bytes = result.length * 2;\n } else if (encodeMethod == \"ANGLES\") {\n result = new Uint16Array(count * 2);\n for (let idx = 0; idx < array.length; idx += 3) {\n const encoded = this.EncodingFuncs.anglesEncode(array[idx], array[idx + 1], array[idx + 2]);\n result[idx / 3 * 2 + 0] = encoded[0];\n result[idx / 3 * 2 + 1] = encoded[1];\n }\n mesh.geometry.setAttribute(\"normal\", new BufferAttribute(result, 2, true));\n mesh.geometry.attributes.normal.bytes = result.length * 2;\n } else {\n console.error(\"Unrecognized encoding method, should be `DEFAULT` or `ANGLES` or `OCT`. \");\n }\n mesh.geometry.attributes.normal.needsUpdate = true;\n mesh.geometry.attributes.normal.isPacked = true;\n mesh.geometry.attributes.normal.packingMethod = encodeMethod;\n if (!(mesh.material instanceof PackedPhongMaterial)) {\n mesh.material = new PackedPhongMaterial().copy(mesh.material);\n }\n if (encodeMethod == \"ANGLES\") {\n mesh.material.defines.USE_PACKED_NORMAL = 0;\n }\n if (encodeMethod == \"OCT1Byte\") {\n mesh.material.defines.USE_PACKED_NORMAL = 1;\n }\n if (encodeMethod == \"OCT2Byte\") {\n mesh.material.defines.USE_PACKED_NORMAL = 1;\n }\n if (encodeMethod == \"DEFAULT\") {\n mesh.material.defines.USE_PACKED_NORMAL = 2;\n }\n },\n /**\n * Make the input mesh.geometry's position attribute encoded and compressed.\n * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the position data.\n *\n * @param {THREE.Mesh} mesh\n *\n */\n compressPositions: function(mesh) {\n if (!mesh.geometry) {\n console.error(\"Mesh must contain geometry. \");\n }\n const position = mesh.geometry.attributes.position;\n if (!position) {\n console.error(\"Geometry must contain position attribute. \");\n }\n if (position.isPacked)\n return;\n if (position.itemSize != 3) {\n console.error(\"position.itemSize is not 3, which cannot be packed. \");\n }\n const array = position.array;\n const encodingBytes = 2;\n const result = this.EncodingFuncs.quantizedEncode(array, encodingBytes);\n const quantized = result.quantized;\n const decodeMat = result.decodeMat;\n if (mesh.geometry.boundingBox == null)\n mesh.geometry.computeBoundingBox();\n if (mesh.geometry.boundingSphere == null)\n mesh.geometry.computeBoundingSphere();\n mesh.geometry.setAttribute(\"position\", new BufferAttribute(quantized, 3));\n mesh.geometry.attributes.position.isPacked = true;\n mesh.geometry.attributes.position.needsUpdate = true;\n mesh.geometry.attributes.position.bytes = quantized.length * encodingBytes;\n if (!(mesh.material instanceof PackedPhongMaterial)) {\n mesh.material = new PackedPhongMaterial().copy(mesh.material);\n }\n mesh.material.defines.USE_PACKED_POSITION = 0;\n mesh.material.uniforms.quantizeMatPos.value = decodeMat;\n mesh.material.uniforms.quantizeMatPos.needsUpdate = true;\n },\n /**\n * Make the input mesh.geometry's uv attribute encoded and compressed.\n * Also will change the mesh.material to `PackedPhongMaterial` which let the vertex shader program decode the uv data.\n *\n * @param {THREE.Mesh} mesh\n *\n */\n compressUvs: function(mesh) {\n if (!mesh.geometry) {\n console.error(\"Mesh must contain geometry property. \");\n }\n const uvs = mesh.geometry.attributes.uv;\n if (!uvs) {\n console.error(\"Geometry must contain uv attribute. \");\n }\n if (uvs.isPacked)\n return;\n const range = { min: Infinity, max: -Infinity };\n const array = uvs.array;\n for (let i = 0; i < array.length; i++) {\n range.min = Math.min(range.min, array[i]);\n range.max = Math.max(range.max, array[i]);\n }\n let result;\n if (range.min >= -1 && range.max <= 1) {\n result = new Uint16Array(array.length);\n for (let i = 0; i < array.length; i += 2) {\n const encoded = this.EncodingFuncs.defaultEncode(array[i], array[i + 1], 0, 2);\n result[i] = encoded[0];\n result[i + 1] = encoded[1];\n }\n mesh.geometry.setAttribute(\"uv\", new BufferAttribute(result, 2, true));\n mesh.geometry.attributes.uv.isPacked = true;\n mesh.geometry.attributes.uv.needsUpdate = true;\n mesh.geometry.attributes.uv.bytes = result.length * 2;\n if (!(mesh.material instanceof PackedPhongMaterial)) {\n mesh.material = new PackedPhongMaterial().copy(mesh.material);\n }\n mesh.material.defines.USE_PACKED_UV = 0;\n } else {\n result = this.EncodingFuncs.quantizedEncodeUV(array, 2);\n mesh.geometry.setAttribute(\"uv\", new BufferAttribute(result.quantized, 2));\n mesh.geometry.attributes.uv.isPacked = true;\n mesh.geometry.attributes.uv.needsUpdate = true;\n mesh.geometry.attributes.uv.bytes = result.quantized.length * 2;\n if (!(mesh.material instanceof PackedPhongMaterial)) {\n mesh.material = new PackedPhongMaterial().copy(mesh.material);\n }\n mesh.material.defines.USE_PACKED_UV = 1;\n mesh.material.uniforms.quantizeMatUV.value = result.decodeMat;\n mesh.material.uniforms.quantizeMatUV.needsUpdate = true;\n }\n },\n EncodingFuncs: {\n defaultEncode: function(x, y, z, bytes) {\n if (bytes == 1) {\n const tmpx = Math.round((x + 1) * 0.5 * 255);\n const tmpy = Math.round((y + 1) * 0.5 * 255);\n const tmpz = Math.round((z + 1) * 0.5 * 255);\n return new Uint8Array([tmpx, tmpy, tmpz]);\n } else if (bytes == 2) {\n const tmpx = Math.round((x + 1) * 0.5 * 65535);\n const tmpy = Math.round((y + 1) * 0.5 * 65535);\n const tmpz = Math.round((z + 1) * 0.5 * 65535);\n return new Uint16Array([tmpx, tmpy, tmpz]);\n } else {\n console.error(\"number of bytes must be 1 or 2\");\n }\n },\n defaultDecode: function(array, bytes) {\n if (bytes == 1) {\n return [array[0] / 255 * 2 - 1, array[1] / 255 * 2 - 1, array[2] / 255 * 2 - 1];\n } else if (bytes == 2) {\n return [array[0] / 65535 * 2 - 1, array[1] / 65535 * 2 - 1, array[2] / 65535 * 2 - 1];\n } else {\n console.error(\"number of bytes must be 1 or 2\");\n }\n },\n // for `Angles` encoding\n anglesEncode: function(x, y, z) {\n const normal0 = parseInt(0.5 * (1 + Math.atan2(y, x) / Math.PI) * 65535);\n const normal1 = parseInt(0.5 * (1 + z) * 65535);\n return new Uint16Array([normal0, normal1]);\n },\n // for `Octahedron` encoding\n octEncodeBest: function(x, y, z, bytes) {\n var oct, dec, best, currentCos, bestCos;\n best = oct = octEncodeVec3(x, y, z, \"floor\", \"floor\");\n dec = octDecodeVec2(oct);\n bestCos = dot(x, y, z, dec);\n oct = octEncodeVec3(x, y, z, \"ceil\", \"floor\");\n dec = octDecodeVec2(oct);\n currentCos = dot(x, y, z, dec);\n if (currentCos > bestCos) {\n best = oct;\n bestCos = currentCos;\n }\n oct = octEncodeVec3(x, y, z, \"floor\", \"ceil\");\n dec = octDecodeVec2(oct);\n currentCos = dot(x, y, z, dec);\n if (currentCos > bestCos) {\n best = oct;\n bestCos = currentCos;\n }\n oct = octEncodeVec3(x, y, z, \"ceil\", \"ceil\");\n dec = octDecodeVec2(oct);\n currentCos = dot(x, y, z, dec);\n if (currentCos > bestCos) {\n best = oct;\n }\n return best;\n function octEncodeVec3(x0, y0, z0, xfunc, yfunc) {\n var x2 = x0 / (Math.abs(x0) + Math.abs(y0) + Math.abs(z0));\n var y2 = y0 / (Math.abs(x0) + Math.abs(y0) + Math.abs(z0));\n if (z < 0) {\n var tempx = (1 - Math.abs(y2)) * (x2 >= 0 ? 1 : -1);\n var tempy = (1 - Math.abs(x2)) * (y2 >= 0 ? 1 : -1);\n x2 = tempx;\n y2 = tempy;\n var diff = 1 - Math.abs(x2) - Math.abs(y2);\n if (diff > 0) {\n diff += 1e-3;\n x2 += x2 > 0 ? diff / 2 : -diff / 2;\n y2 += y2 > 0 ? diff / 2 : -diff / 2;\n }\n }\n if (bytes == 1) {\n return new Int8Array([Math[xfunc](x2 * 127.5 + (x2 < 0 ? 1 : 0)), Math[yfunc](y2 * 127.5 + (y2 < 0 ? 1 : 0))]);\n }\n if (bytes == 2) {\n return new Int16Array([\n Math[xfunc](x2 * 32767.5 + (x2 < 0 ? 1 : 0)),\n Math[yfunc](y2 * 32767.5 + (y2 < 0 ? 1 : 0))\n ]);\n }\n }\n function octDecodeVec2(oct2) {\n var x2 = oct2[0];\n var y2 = oct2[1];\n if (bytes == 1) {\n x2 /= x2 < 0 ? 127 : 128;\n y2 /= y2 < 0 ? 127 : 128;\n } else if (bytes == 2) {\n x2 /= x2 < 0 ? 32767 : 32768;\n y2 /= y2 < 0 ? 32767 : 32768;\n }\n var z2 = 1 - Math.abs(x2) - Math.abs(y2);\n if (z2 < 0) {\n var tmpx = x2;\n x2 = (1 - Math.abs(y2)) * (x2 >= 0 ? 1 : -1);\n y2 = (1 - Math.abs(tmpx)) * (y2 >= 0 ? 1 : -1);\n }\n var length = Math.sqrt(x2 * x2 + y2 * y2 + z2 * z2);\n return [x2 / length, y2 / length, z2 / length];\n }\n function dot(x2, y2, z2, vec3) {\n return x2 * vec3[0] + y2 * vec3[1] + z2 * vec3[2];\n }\n },\n quantizedEncode: function(array, bytes) {\n let quantized, segments;\n if (bytes == 1) {\n quantized = new Uint8Array(array.length);\n segments = 255;\n } else if (bytes == 2) {\n quantized = new Uint16Array(array.length);\n segments = 65535;\n } else {\n console.error(\"number of bytes error! \");\n }\n const decodeMat = new Matrix4();\n const min = new Float32Array(3);\n const max = new Float32Array(3);\n min[0] = min[1] = min[2] = Number.MAX_VALUE;\n max[0] = max[1] = max[2] = -Number.MAX_VALUE;\n for (let i = 0; i < array.length; i += 3) {\n min[0] = Math.min(min[0], array[i + 0]);\n min[1] = Math.min(min[1], array[i + 1]);\n min[2] = Math.min(min[2], array[i + 2]);\n max[0] = Math.max(max[0], array[i + 0]);\n max[1] = Math.max(max[1], array[i + 1]);\n max[2] = Math.max(max[2], array[i + 2]);\n }\n decodeMat.scale(\n new Vector3((max[0] - min[0]) / segments, (max[1] - min[1]) / segments, (max[2] - min[2]) / segments)\n );\n decodeMat.elements[12] = min[0];\n decodeMat.elements[13] = min[1];\n decodeMat.elements[14] = min[2];\n decodeMat.transpose();\n const multiplier = new Float32Array([\n max[0] !== min[0] ? segments / (max[0] - min[0]) : 0,\n max[1] !== min[1] ? segments / (max[1] - min[1]) : 0,\n max[2] !== min[2] ? segments / (max[2] - min[2]) : 0\n ]);\n for (let i = 0; i < array.length; i += 3) {\n quantized[i + 0] = Math.floor((array[i + 0] - min[0]) * multiplier[0]);\n quantized[i + 1] = Math.floor((array[i + 1] - min[1]) * multiplier[1]);\n quantized[i + 2] = Math.floor((array[i + 2] - min[2]) * multiplier[2]);\n }\n return {\n quantized,\n decodeMat\n };\n },\n quantizedEncodeUV: function(array, bytes) {\n let quantized, segments;\n if (bytes == 1) {\n quantized = new Uint8Array(array.length);\n segments = 255;\n } else if (bytes == 2) {\n quantized = new Uint16Array(array.length);\n segments = 65535;\n } else {\n console.error(\"number of bytes error! \");\n }\n const decodeMat = new Matrix3();\n const min = new Float32Array(2);\n const max = new Float32Array(2);\n min[0] = min[1] = Number.MAX_VALUE;\n max[0] = max[1] = -Number.MAX_VALUE;\n for (let i = 0; i < array.length; i += 2) {\n min[0] = Math.min(min[0], array[i + 0]);\n min[1] = Math.min(min[1], array[i + 1]);\n max[0] = Math.max(max[0], array[i + 0]);\n max[1] = Math.max(max[1], array[i + 1]);\n }\n decodeMat.scale((max[0] - min[0]) / segments, (max[1] - min[1]) / segments);\n decodeMat.elements[6] = min[0];\n decodeMat.elements[7] = min[1];\n decodeMat.transpose();\n const multiplier = new Float32Array([\n max[0] !== min[0] ? segments / (max[0] - min[0]) : 0,\n max[1] !== min[1] ? segments / (max[1] - min[1]) : 0\n ]);\n for (let i = 0; i < array.length; i += 2) {\n quantized[i + 0] = Math.floor((array[i + 0] - min[0]) * multiplier[0]);\n quantized[i + 1] = Math.floor((array[i + 1] - min[1]) * multiplier[1]);\n }\n return {\n quantized,\n decodeMat\n };\n }\n }\n};\nclass PackedPhongMaterial extends MeshPhongMaterial {\n constructor(parameters) {\n super();\n this.defines = {};\n this.type = \"PackedPhongMaterial\";\n this.uniforms = UniformsUtils.merge([\n ShaderLib.phong.uniforms,\n {\n quantizeMatPos: { value: null },\n quantizeMatUV: { value: null }\n }\n ]);\n this.vertexShader = [\n \"#define PHONG\",\n \"varying vec3 vViewPosition;\",\n \"#ifndef FLAT_SHADED\",\n \"varying vec3 vNormal;\",\n \"#endif\",\n ShaderChunk.common,\n ShaderChunk.uv_pars_vertex,\n ShaderChunk.uv2_pars_vertex,\n ShaderChunk.displacementmap_pars_vertex,\n ShaderChunk.envmap_pars_vertex,\n ShaderChunk.color_pars_vertex,\n ShaderChunk.fog_pars_vertex,\n ShaderChunk.morphtarget_pars_vertex,\n ShaderChunk.skinning_pars_vertex,\n ShaderChunk.shadowmap_pars_vertex,\n ShaderChunk.logdepthbuf_pars_vertex,\n ShaderChunk.clipping_planes_pars_vertex,\n `#ifdef USE_PACKED_NORMAL\n\t\t\t\t\t#if USE_PACKED_NORMAL == 0\n\t\t\t\t\t\tvec3 decodeNormal(vec3 packedNormal)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tfloat x = packedNormal.x * 2.0 - 1.0;\n\t\t\t\t\t\t\tfloat y = packedNormal.y * 2.0 - 1.0;\n\t\t\t\t\t\t\tvec2 scth = vec2(sin(x * PI), cos(x * PI));\n\t\t\t\t\t\t\tvec2 scphi = vec2(sqrt(1.0 - y * y), y);\n\t\t\t\t\t\t\treturn normalize( vec3(scth.y * scphi.x, scth.x * scphi.x, scphi.y) );\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#if USE_PACKED_NORMAL == 1\n\t\t\t\t\t\tvec3 decodeNormal(vec3 packedNormal)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec3 v = vec3(packedNormal.xy, 1.0 - abs(packedNormal.x) - abs(packedNormal.y));\n\t\t\t\t\t\t\tif (v.z < 0.0)\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tv.xy = (1.0 - abs(v.yx)) * vec2((v.x >= 0.0) ? +1.0 : -1.0, (v.y >= 0.0) ? +1.0 : -1.0);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn normalize(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#if USE_PACKED_NORMAL == 2\n\t\t\t\t\t\tvec3 decodeNormal(vec3 packedNormal)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec3 v = (packedNormal * 2.0) - 1.0;\n\t\t\t\t\t\t\treturn normalize(v);\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n `#ifdef USE_PACKED_POSITION\n\t\t\t\t\t#if USE_PACKED_POSITION == 0\n\t\t\t\t\t\tuniform mat4 quantizeMatPos;\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n `#ifdef USE_PACKED_UV\n\t\t\t\t\t#if USE_PACKED_UV == 1\n\t\t\t\t\t\tuniform mat3 quantizeMatUV;\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n `#ifdef USE_PACKED_UV\n\t\t\t\t\t#if USE_PACKED_UV == 0\n\t\t\t\t\t\tvec2 decodeUV(vec2 packedUV)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec2 uv = (packedUV * 2.0) - 1.0;\n\t\t\t\t\t\t\treturn uv;\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#if USE_PACKED_UV == 1\n\t\t\t\t\t\tvec2 decodeUV(vec2 packedUV)\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tvec2 uv = ( vec3(packedUV, 1.0) * quantizeMatUV ).xy;\n\t\t\t\t\t\t\treturn uv;\n\t\t\t\t\t\t}\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n \"void main() {\",\n ShaderChunk.uv_vertex,\n `#ifdef USE_UV\n\t\t\t\t\t#ifdef USE_PACKED_UV\n\t\t\t\t\t\tvUv = decodeUV(vUv);\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n ShaderChunk.uv2_vertex,\n ShaderChunk.color_vertex,\n ShaderChunk.beginnormal_vertex,\n `#ifdef USE_PACKED_NORMAL\n\t\t\t\t\tobjectNormal = decodeNormal(objectNormal);\n\t\t\t\t#endif\n\n\t\t\t\t#ifdef USE_TANGENT\n\t\t\t\t\tvec3 objectTangent = vec3( tangent.xyz );\n\t\t\t\t#endif\n\t\t\t\t`,\n ShaderChunk.morphnormal_vertex,\n ShaderChunk.skinbase_vertex,\n ShaderChunk.skinnormal_vertex,\n ShaderChunk.defaultnormal_vertex,\n \"#ifndef FLAT_SHADED\",\n \"\tvNormal = normalize( transformedNormal );\",\n \"#endif\",\n ShaderChunk.begin_vertex,\n `#ifdef USE_PACKED_POSITION\n\t\t\t\t\t#if USE_PACKED_POSITION == 0\n\t\t\t\t\t\ttransformed = ( vec4(transformed, 1.0) * quantizeMatPos ).xyz;\n\t\t\t\t\t#endif\n\t\t\t\t#endif`,\n ShaderChunk.morphtarget_vertex,\n ShaderChunk.skinning_vertex,\n ShaderChunk.displacementmap_vertex,\n ShaderChunk.project_vertex,\n ShaderChunk.logdepthbuf_vertex,\n ShaderChunk.clipping_planes_vertex,\n \"vViewPosition = - mvPosition.xyz;\",\n ShaderChunk.worldpos_vertex,\n ShaderChunk.envmap_vertex,\n ShaderChunk.shadowmap_vertex,\n ShaderChunk.fog_vertex,\n \"}\"\n ].join(\"\\n\");\n this.fragmentShader = [\n \"#define PHONG\",\n \"uniform vec3 diffuse;\",\n \"uniform vec3 emissive;\",\n \"uniform vec3 specular;\",\n \"uniform float shininess;\",\n \"uniform float opacity;\",\n ShaderChunk.common,\n ShaderChunk.packing,\n ShaderChunk.dithering_pars_fragment,\n ShaderChunk.color_pars_fragment,\n ShaderChunk.uv_pars_fragment,\n ShaderChunk.uv2_pars_fragment,\n ShaderChunk.map_pars_fragment,\n ShaderChunk.alphamap_pars_fragment,\n ShaderChunk.aomap_pars_fragment,\n ShaderChunk.lightmap_pars_fragment,\n ShaderChunk.emissivemap_pars_fragment,\n ShaderChunk.envmap_common_pars_fragment,\n ShaderChunk.envmap_pars_fragment,\n ShaderChunk.cube_uv_reflection_fragment,\n ShaderChunk.fog_pars_fragment,\n ShaderChunk.bsdfs,\n ShaderChunk.lights_pars_begin,\n ShaderChunk.lights_phong_pars_fragment,\n ShaderChunk.shadowmap_pars_fragment,\n ShaderChunk.bumpmap_pars_fragment,\n ShaderChunk.normalmap_pars_fragment,\n ShaderChunk.specularmap_pars_fragment,\n ShaderChunk.logdepthbuf_pars_fragment,\n ShaderChunk.clipping_planes_pars_fragment,\n \"void main() {\",\n ShaderChunk.clipping_planes_fragment,\n \"vec4 diffuseColor = vec4( diffuse, opacity );\",\n \"ReflectedLight reflectedLight = ReflectedLight( vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ), vec3( 0.0 ) );\",\n \"vec3 totalEmissiveRadiance = emissive;\",\n ShaderChunk.logdepthbuf_fragment,\n ShaderChunk.map_fragment,\n ShaderChunk.color_fragment,\n ShaderChunk.alphamap_fragment,\n ShaderChunk.alphatest_fragment,\n ShaderChunk.specularmap_fragment,\n ShaderChunk.normal_fragment_begin,\n ShaderChunk.normal_fragment_maps,\n ShaderChunk.emissivemap_fragment,\n // accumulation\n ShaderChunk.lights_phong_fragment,\n ShaderChunk.lights_fragment_begin,\n ShaderChunk.lights_fragment_maps,\n ShaderChunk.lights_fragment_end,\n // modulation\n ShaderChunk.aomap_fragment,\n \"vec3 outgoingLight = reflectedLight.directDiffuse + reflectedLight.indirectDiffuse + reflectedLight.directSpecular + reflectedLight.indirectSpecular + totalEmissiveRadiance;\",\n ShaderChunk.envmap_fragment,\n \"gl_FragColor = vec4( outgoingLight, diffuseColor.a );\",\n ShaderChunk.tonemapping_fragment,\n version >= 154 ? ShaderChunk.colorspace_fragment : ShaderChunk.encodings_fragment,\n ShaderChunk.fog_fragment,\n ShaderChunk.premultiplied_alpha_fragment,\n ShaderChunk.dithering_fragment,\n \"}\"\n ].join(\"\\n\");\n this.setValues(parameters);\n }\n}\nexport {\n GeometryCompressionUtils,\n PackedPhongMaterial\n};\n//# sourceMappingURL=GeometryCompressionUtils.js.map\n","import { Vector2 } from \"three\";\nconst BokehShader2 = {\n uniforms: {\n textureWidth: { value: 1 },\n textureHeight: { value: 1 },\n focalDepth: { value: 1 },\n focalLength: { value: 24 },\n fstop: { value: 0.9 },\n tColor: { value: null },\n tDepth: { value: null },\n maxblur: { value: 1 },\n showFocus: { value: 0 },\n manualdof: { value: 0 },\n vignetting: { value: 0 },\n depthblur: { value: 0 },\n threshold: { value: 0.5 },\n gain: { value: 2 },\n bias: { value: 0.5 },\n fringe: { value: 0.7 },\n znear: { value: 0.1 },\n zfar: { value: 100 },\n noise: { value: 1 },\n dithering: { value: 1e-4 },\n pentagon: { value: 0 },\n shaderFocus: { value: 1 },\n focusCoords: { value: /* @__PURE__ */ new Vector2() }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n #include <common>\n\n varying vec2 vUv;\n\n uniform sampler2D tColor;\n uniform sampler2D tDepth;\n uniform float textureWidth;\n uniform float textureHeight;\n\n uniform float focalDepth; //focal distance value in meters, but you may use autofocus option below\n uniform float focalLength; //focal length in mm\n uniform float fstop; //f-stop value\n uniform bool showFocus; //show debug focus point and focal range (red = focal point, green = focal range)\n\n /*\n make sure that these two values are the same for your camera, otherwise distances will be wrong.\n */\n\n uniform float znear; // camera clipping start\n uniform float zfar; // camera clipping end\n\n //------------------------------------------\n //user variables\n\n const int samples = SAMPLES; //samples on the first ring\n const int rings = RINGS; //ring count\n\n const int maxringsamples = rings * samples;\n\n uniform bool manualdof; // manual dof calculation\n float ndofstart = 1.0; // near dof blur start\n float ndofdist = 2.0; // near dof blur falloff distance\n float fdofstart = 1.0; // far dof blur start\n float fdofdist = 3.0; // far dof blur falloff distance\n\n float CoC = 0.03; //circle of confusion size in mm (35mm film = 0.03mm)\n\n uniform bool vignetting; // use optical lens vignetting\n\n float vignout = 1.3; // vignetting outer border\n float vignin = 0.0; // vignetting inner border\n float vignfade = 22.0; // f-stops till vignete fades\n\n uniform bool shaderFocus;\n // disable if you use external focalDepth value\n\n uniform vec2 focusCoords;\n // autofocus point on screen (0.0,0.0 - left lower corner, 1.0,1.0 - upper right)\n // if center of screen use vec2(0.5, 0.5);\n\n uniform float maxblur;\n //clamp value of max blur (0.0 = no blur, 1.0 default)\n\n uniform float threshold; // highlight threshold;\n uniform float gain; // highlight gain;\n\n uniform float bias; // bokeh edge bias\n uniform float fringe; // bokeh chromatic aberration / fringing\n\n uniform bool noise; //use noise instead of pattern for sample dithering\n\n uniform float dithering;\n\n uniform bool depthblur; // blur the depth buffer\n float dbsize = 1.25; // depth blur size\n\n /*\n next part is experimental\n not looking good with small sample and ring count\n looks okay starting from samples = 4, rings = 4\n */\n\n uniform bool pentagon; //use pentagon as bokeh shape?\n float feather = 0.4; //pentagon shape feather\n\n //------------------------------------------\n\n float penta(vec2 coords) {\n \t//pentagonal shape\n \tfloat scale = float(rings) - 1.3;\n \tvec4 HS0 = vec4( 1.0, 0.0, 0.0, 1.0);\n \tvec4 HS1 = vec4( 0.309016994, 0.951056516, 0.0, 1.0);\n \tvec4 HS2 = vec4(-0.809016994, 0.587785252, 0.0, 1.0);\n \tvec4 HS3 = vec4(-0.809016994,-0.587785252, 0.0, 1.0);\n \tvec4 HS4 = vec4( 0.309016994,-0.951056516, 0.0, 1.0);\n \tvec4 HS5 = vec4( 0.0 ,0.0 , 1.0, 1.0);\n\n \tvec4 one = vec4( 1.0 );\n\n \tvec4 P = vec4((coords),vec2(scale, scale));\n\n \tvec4 dist = vec4(0.0);\n \tfloat inorout = -4.0;\n\n \tdist.x = dot( P, HS0 );\n \tdist.y = dot( P, HS1 );\n \tdist.z = dot( P, HS2 );\n \tdist.w = dot( P, HS3 );\n\n \tdist = smoothstep( -feather, feather, dist );\n\n \tinorout += dot( dist, one );\n\n \tdist.x = dot( P, HS4 );\n \tdist.y = HS5.w - abs( P.z );\n\n \tdist = smoothstep( -feather, feather, dist );\n \tinorout += dist.x;\n\n \treturn clamp( inorout, 0.0, 1.0 );\n }\n\n float bdepth(vec2 coords) {\n \t// Depth buffer blur\n \tfloat d = 0.0;\n \tfloat kernel[9];\n \tvec2 offset[9];\n\n \tvec2 wh = vec2(1.0/textureWidth,1.0/textureHeight) * dbsize;\n\n \toffset[0] = vec2(-wh.x,-wh.y);\n \toffset[1] = vec2( 0.0, -wh.y);\n \toffset[2] = vec2( wh.x -wh.y);\n\n \toffset[3] = vec2(-wh.x, 0.0);\n \toffset[4] = vec2( 0.0, 0.0);\n \toffset[5] = vec2( wh.x, 0.0);\n\n \toffset[6] = vec2(-wh.x, wh.y);\n \toffset[7] = vec2( 0.0, wh.y);\n \toffset[8] = vec2( wh.x, wh.y);\n\n \tkernel[0] = 1.0/16.0; kernel[1] = 2.0/16.0; kernel[2] = 1.0/16.0;\n \tkernel[3] = 2.0/16.0; kernel[4] = 4.0/16.0; kernel[5] = 2.0/16.0;\n \tkernel[6] = 1.0/16.0; kernel[7] = 2.0/16.0; kernel[8] = 1.0/16.0;\n\n \tfor( int i=0; i<9; i++ ) {\n \t\tfloat tmp = texture2D(tDepth, coords + offset[i]).r;\n \t\td += tmp * kernel[i];\n \t}\n\n \treturn d;\n }\n\n vec3 color(vec2 coords,float blur) {\n \t//processing the sample\n\n \tvec3 col = vec3(0.0);\n \tvec2 texel = vec2(1.0/textureWidth,1.0/textureHeight);\n\n \tcol.r = texture2D(tColor,coords + vec2(0.0,1.0)*texel*fringe*blur).r;\n \tcol.g = texture2D(tColor,coords + vec2(-0.866,-0.5)*texel*fringe*blur).g;\n \tcol.b = texture2D(tColor,coords + vec2(0.866,-0.5)*texel*fringe*blur).b;\n\n \tvec3 lumcoeff = vec3(0.299,0.587,0.114);\n \tfloat lum = dot(col.rgb, lumcoeff);\n \tfloat thresh = max((lum-threshold)*gain, 0.0);\n \treturn col+mix(vec3(0.0),col,thresh*blur);\n }\n\n vec3 debugFocus(vec3 col, float blur, float depth) {\n \tfloat edge = 0.002*depth; //distance based edge smoothing\n \tfloat m = clamp(smoothstep(0.0,edge,blur),0.0,1.0);\n \tfloat e = clamp(smoothstep(1.0-edge,1.0,blur),0.0,1.0);\n\n \tcol = mix(col,vec3(1.0,0.5,0.0),(1.0-m)*0.6);\n \tcol = mix(col,vec3(0.0,0.5,1.0),((1.0-e)-(1.0-m))*0.2);\n\n \treturn col;\n }\n\n float linearize(float depth) {\n \treturn -zfar * znear / (depth * (zfar - znear) - zfar);\n }\n\n float vignette() {\n \tfloat dist = distance(vUv.xy, vec2(0.5,0.5));\n \tdist = smoothstep(vignout+(fstop/vignfade), vignin+(fstop/vignfade), dist);\n \treturn clamp(dist,0.0,1.0);\n }\n\n float gather(float i, float j, int ringsamples, inout vec3 col, float w, float h, float blur) {\n \tfloat rings2 = float(rings);\n \tfloat step = PI*2.0 / float(ringsamples);\n \tfloat pw = cos(j*step)*i;\n \tfloat ph = sin(j*step)*i;\n \tfloat p = 1.0;\n \tif (pentagon) {\n \t\tp = penta(vec2(pw,ph));\n \t}\n \tcol += color(vUv.xy + vec2(pw*w,ph*h), blur) * mix(1.0, i/rings2, bias) * p;\n \treturn 1.0 * mix(1.0, i /rings2, bias) * p;\n }\n\n void main() {\n \t//scene depth calculation\n\n \tfloat depth = linearize(texture2D(tDepth,vUv.xy).x);\n\n \t// Blur depth?\n \tif ( depthblur ) {\n \t\tdepth = linearize(bdepth(vUv.xy));\n \t}\n\n \t//focal plane calculation\n\n \tfloat fDepth = focalDepth;\n\n \tif (shaderFocus) {\n\n \t\tfDepth = linearize(texture2D(tDepth,focusCoords).x);\n\n \t}\n\n \t// dof blur factor calculation\n\n \tfloat blur = 0.0;\n\n \tif (manualdof) {\n \t\tfloat a = depth-fDepth; // Focal plane\n \t\tfloat b = (a-fdofstart)/fdofdist; // Far DoF\n \t\tfloat c = (-a-ndofstart)/ndofdist; // Near Dof\n \t\tblur = (a>0.0) ? b : c;\n \t} else {\n \t\tfloat f = focalLength; // focal length in mm\n \t\tfloat d = fDepth*1000.0; // focal plane in mm\n \t\tfloat o = depth*1000.0; // depth in mm\n\n \t\tfloat a = (o*f)/(o-f);\n \t\tfloat b = (d*f)/(d-f);\n \t\tfloat c = (d-f)/(d*fstop*CoC);\n\n \t\tblur = abs(a-b)*c;\n \t}\n\n \tblur = clamp(blur,0.0,1.0);\n\n \t// calculation of pattern for dithering\n\n \tvec2 noise = vec2(rand(vUv.xy), rand( vUv.xy + vec2( 0.4, 0.6 ) ) )*dithering*blur;\n\n \t// getting blur x and y step factor\n\n \tfloat w = (1.0/textureWidth)*blur*maxblur+noise.x;\n \tfloat h = (1.0/textureHeight)*blur*maxblur+noise.y;\n\n \t// calculation of final color\n\n \tvec3 col = vec3(0.0);\n\n \tif(blur < 0.05) {\n \t\t//some optimization thingy\n \t\tcol = texture2D(tColor, vUv.xy).rgb;\n \t} else {\n \t\tcol = texture2D(tColor, vUv.xy).rgb;\n \t\tfloat s = 1.0;\n \t\tint ringsamples;\n\n \t\tfor (int i = 1; i <= rings; i++) {\n \t\t\t/*unboxstart*/\n \t\t\tringsamples = i * samples;\n\n \t\t\tfor (int j = 0 ; j < maxringsamples ; j++) {\n \t\t\t\tif (j >= ringsamples) break;\n \t\t\t\ts += gather(float(i), float(j), ringsamples, col, w, h, blur);\n \t\t\t}\n \t\t\t/*unboxend*/\n \t\t}\n\n \t\tcol /= s; //divide by sample count\n \t}\n\n \tif (showFocus) {\n \t\tcol = debugFocus(col, blur, depth);\n \t}\n\n \tif (vignetting) {\n \t\tcol *= vignette();\n \t}\n\n \tgl_FragColor.rgb = col;\n \tgl_FragColor.a = 1.0;\n } \n `\n )\n};\nconst BokehDepthShader = {\n uniforms: {\n mNear: { value: 1 },\n mFar: { value: 1e3 }\n },\n vertexShader: (\n /* glsl */\n `\n varying float vViewZDepth;\n\n void main() {\n\n \t#include <begin_vertex>\n \t#include <project_vertex>\n\n \tvViewZDepth = - mvPosition.z;\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform float mNear;\n uniform float mFar;\n\n varying float vViewZDepth;\n\n void main() {\n\n \tfloat color = 1.0 - smoothstep( mNear, mFar, vViewZDepth );\n \tgl_FragColor = vec4( vec3( color ), 1.0 );\n\n } \n `\n )\n};\nexport {\n BokehDepthShader,\n BokehShader2\n};\n//# sourceMappingURL=BokehShader2.js.map\n","import { PerspectiveCamera, ShaderMaterial, Scene, OrthographicCamera, WebGLRenderTarget, UniformsUtils, Mesh, PlaneGeometry } from \"three\";\nimport { BokehDepthShader, BokehShader2 } from \"../shaders/BokehShader2.js\";\nclass CinematicCamera extends PerspectiveCamera {\n constructor(fov, aspect, near, far) {\n super(fov, aspect, near, far);\n this.type = \"CinematicCamera\";\n this.postprocessing = { enabled: true };\n this.shaderSettings = {\n rings: 3,\n samples: 4\n };\n const depthShader = BokehDepthShader;\n this.materialDepth = new ShaderMaterial({\n uniforms: depthShader.uniforms,\n vertexShader: depthShader.vertexShader,\n fragmentShader: depthShader.fragmentShader\n });\n this.materialDepth.uniforms[\"mNear\"].value = near;\n this.materialDepth.uniforms[\"mFar\"].value = far;\n this.setLens();\n this.initPostProcessing();\n }\n // providing fnumber and coc(Circle of Confusion) as extra arguments\n setLens(focalLength, filmGauge, fNumber, coc) {\n if (focalLength === void 0)\n focalLength = 35;\n if (filmGauge !== void 0)\n this.filmGauge = filmGauge;\n this.setFocalLength(focalLength);\n if (fNumber === void 0)\n fNumber = 8;\n if (coc === void 0)\n coc = 0.019;\n this.fNumber = fNumber;\n this.coc = coc;\n this.aperture = focalLength / this.fNumber;\n this.hyperFocal = focalLength * focalLength / (this.aperture * this.coc);\n }\n linearize(depth) {\n const zfar = this.far;\n const znear = this.near;\n return -zfar * znear / (depth * (zfar - znear) - zfar);\n }\n smoothstep(near, far, depth) {\n const x = this.saturate((depth - near) / (far - near));\n return x * x * (3 - 2 * x);\n }\n saturate(x) {\n return Math.max(0, Math.min(1, x));\n }\n // function for focusing at a distance from the camera\n focusAt(focusDistance) {\n if (focusDistance === void 0)\n focusDistance = 20;\n const focalLength = this.getFocalLength();\n this.focus = focusDistance;\n this.nearPoint = this.hyperFocal * this.focus / (this.hyperFocal + (this.focus - focalLength));\n this.farPoint = this.hyperFocal * this.focus / (this.hyperFocal - (this.focus - focalLength));\n this.depthOfField = this.farPoint - this.nearPoint;\n if (this.depthOfField < 0)\n this.depthOfField = 0;\n this.sdistance = this.smoothstep(this.near, this.far, this.focus);\n this.ldistance = this.linearize(1 - this.sdistance);\n this.postprocessing.bokeh_uniforms[\"focalDepth\"].value = this.ldistance;\n }\n initPostProcessing() {\n if (this.postprocessing.enabled) {\n this.postprocessing.scene = new Scene();\n this.postprocessing.camera = new OrthographicCamera(\n window.innerWidth / -2,\n window.innerWidth / 2,\n window.innerHeight / 2,\n window.innerHeight / -2,\n -1e4,\n 1e4\n );\n this.postprocessing.scene.add(this.postprocessing.camera);\n this.postprocessing.rtTextureDepth = new WebGLRenderTarget(window.innerWidth, window.innerHeight);\n this.postprocessing.rtTextureColor = new WebGLRenderTarget(window.innerWidth, window.innerHeight);\n const bokeh_shader = BokehShader2;\n this.postprocessing.bokeh_uniforms = UniformsUtils.clone(bokeh_shader.uniforms);\n this.postprocessing.bokeh_uniforms[\"tColor\"].value = this.postprocessing.rtTextureColor.texture;\n this.postprocessing.bokeh_uniforms[\"tDepth\"].value = this.postprocessing.rtTextureDepth.texture;\n this.postprocessing.bokeh_uniforms[\"manualdof\"].value = 0;\n this.postprocessing.bokeh_uniforms[\"shaderFocus\"].value = 0;\n this.postprocessing.bokeh_uniforms[\"fstop\"].value = 2.8;\n this.postprocessing.bokeh_uniforms[\"showFocus\"].value = 1;\n this.postprocessing.bokeh_uniforms[\"focalDepth\"].value = 0.1;\n this.postprocessing.bokeh_uniforms[\"znear\"].value = this.near;\n this.postprocessing.bokeh_uniforms[\"zfar\"].value = this.near;\n this.postprocessing.bokeh_uniforms[\"textureWidth\"].value = window.innerWidth;\n this.postprocessing.bokeh_uniforms[\"textureHeight\"].value = window.innerHeight;\n this.postprocessing.materialBokeh = new ShaderMaterial({\n uniforms: this.postprocessing.bokeh_uniforms,\n vertexShader: bokeh_shader.vertexShader,\n fragmentShader: bokeh_shader.fragmentShader,\n defines: {\n RINGS: this.shaderSettings.rings,\n SAMPLES: this.shaderSettings.samples,\n DEPTH_PACKING: 1\n }\n });\n this.postprocessing.quad = new Mesh(\n new PlaneGeometry(window.innerWidth, window.innerHeight),\n this.postprocessing.materialBokeh\n );\n this.postprocessing.quad.position.z = -500;\n this.postprocessing.scene.add(this.postprocessing.quad);\n }\n }\n renderCinematic(scene, renderer) {\n if (this.postprocessing.enabled) {\n const currentRenderTarget = renderer.getRenderTarget();\n renderer.clear();\n scene.overrideMaterial = null;\n renderer.setRenderTarget(this.postprocessing.rtTextureColor);\n renderer.clear();\n renderer.render(scene, this);\n scene.overrideMaterial = this.materialDepth;\n renderer.setRenderTarget(this.postprocessing.rtTextureDepth);\n renderer.clear();\n renderer.render(scene, this);\n renderer.setRenderTarget(null);\n renderer.render(this.postprocessing.scene, this.postprocessing.camera);\n renderer.setRenderTarget(currentRenderTarget);\n }\n }\n}\nexport {\n CinematicCamera\n};\n//# sourceMappingURL=CinematicCamera.js.map\n","import { Triangle, Vector3 } from \"three\";\nconst _face = /* @__PURE__ */ new Triangle();\nconst _color = /* @__PURE__ */ new Vector3();\nclass MeshSurfaceSampler {\n constructor(mesh) {\n let geometry = mesh.geometry;\n if (geometry.index) {\n console.warn(\"THREE.MeshSurfaceSampler: Converting geometry to non-indexed BufferGeometry.\");\n geometry = geometry.toNonIndexed();\n }\n this.geometry = geometry;\n this.randomFunction = Math.random;\n this.positionAttribute = this.geometry.getAttribute(\"position\");\n this.colorAttribute = this.geometry.getAttribute(\"color\");\n this.weightAttribute = null;\n this.distribution = null;\n }\n setWeightAttribute(name) {\n this.weightAttribute = name ? this.geometry.getAttribute(name) : null;\n return this;\n }\n build() {\n const positionAttribute = this.positionAttribute;\n const weightAttribute = this.weightAttribute;\n const faceWeights = new Float32Array(positionAttribute.count / 3);\n for (let i = 0; i < positionAttribute.count; i += 3) {\n let faceWeight = 1;\n if (weightAttribute) {\n faceWeight = weightAttribute.getX(i) + weightAttribute.getX(i + 1) + weightAttribute.getX(i + 2);\n }\n _face.a.fromBufferAttribute(positionAttribute, i);\n _face.b.fromBufferAttribute(positionAttribute, i + 1);\n _face.c.fromBufferAttribute(positionAttribute, i + 2);\n faceWeight *= _face.getArea();\n faceWeights[i / 3] = faceWeight;\n }\n this.distribution = new Float32Array(positionAttribute.count / 3);\n let cumulativeTotal = 0;\n for (let i = 0; i < faceWeights.length; i++) {\n cumulativeTotal += faceWeights[i];\n this.distribution[i] = cumulativeTotal;\n }\n return this;\n }\n setRandomGenerator(randomFunction) {\n this.randomFunction = randomFunction;\n return this;\n }\n sample(targetPosition, targetNormal, targetColor) {\n const faceIndex = this.sampleFaceIndex();\n return this.sampleFace(faceIndex, targetPosition, targetNormal, targetColor);\n }\n sampleFaceIndex() {\n const cumulativeTotal = this.distribution[this.distribution.length - 1];\n return this.binarySearch(this.randomFunction() * cumulativeTotal);\n }\n binarySearch(x) {\n const dist = this.distribution;\n let start = 0;\n let end = dist.length - 1;\n let index = -1;\n while (start <= end) {\n const mid = Math.ceil((start + end) / 2);\n if (mid === 0 || dist[mid - 1] <= x && dist[mid] > x) {\n index = mid;\n break;\n } else if (x < dist[mid]) {\n end = mid - 1;\n } else {\n start = mid + 1;\n }\n }\n return index;\n }\n sampleFace(faceIndex, targetPosition, targetNormal, targetColor) {\n let u = this.randomFunction();\n let v = this.randomFunction();\n if (u + v > 1) {\n u = 1 - u;\n v = 1 - v;\n }\n _face.a.fromBufferAttribute(this.positionAttribute, faceIndex * 3);\n _face.b.fromBufferAttribute(this.positionAttribute, faceIndex * 3 + 1);\n _face.c.fromBufferAttribute(this.positionAttribute, faceIndex * 3 + 2);\n targetPosition.set(0, 0, 0).addScaledVector(_face.a, u).addScaledVector(_face.b, v).addScaledVector(_face.c, 1 - (u + v));\n if (targetNormal !== void 0) {\n _face.getNormal(targetNormal);\n }\n if (targetColor !== void 0 && this.colorAttribute !== void 0) {\n _face.a.fromBufferAttribute(this.colorAttribute, faceIndex * 3);\n _face.b.fromBufferAttribute(this.colorAttribute, faceIndex * 3 + 1);\n _face.c.fromBufferAttribute(this.colorAttribute, faceIndex * 3 + 2);\n _color.set(0, 0, 0).addScaledVector(_face.a, u).addScaledVector(_face.b, v).addScaledVector(_face.c, 1 - (u + v));\n targetColor.r = _color.x;\n targetColor.g = _color.y;\n targetColor.b = _color.z;\n }\n return this;\n }\n}\nexport {\n MeshSurfaceSampler\n};\n//# sourceMappingURL=MeshSurfaceSampler.js.map\n","import { Vector3, Matrix3, MathUtils, Box3, Matrix4, Ray } from \"three\";\nconst a = {\n c: null,\n // center\n u: [/* @__PURE__ */ new Vector3(), /* @__PURE__ */ new Vector3(), /* @__PURE__ */ new Vector3()],\n // basis vectors\n e: []\n // half width\n};\nconst b = {\n c: null,\n // center\n u: [/* @__PURE__ */ new Vector3(), /* @__PURE__ */ new Vector3(), /* @__PURE__ */ new Vector3()],\n // basis vectors\n e: []\n // half width\n};\nconst R = [[], [], []];\nconst AbsR = [[], [], []];\nconst t = [];\nconst xAxis = /* @__PURE__ */ new Vector3();\nconst yAxis = /* @__PURE__ */ new Vector3();\nconst zAxis = /* @__PURE__ */ new Vector3();\nconst v1 = /* @__PURE__ */ new Vector3();\nconst size = /* @__PURE__ */ new Vector3();\nconst closestPoint = /* @__PURE__ */ new Vector3();\nconst rotationMatrix = /* @__PURE__ */ new Matrix3();\nconst aabb = /* @__PURE__ */ new Box3();\nconst matrix = /* @__PURE__ */ new Matrix4();\nconst inverse = /* @__PURE__ */ new Matrix4();\nconst localRay = /* @__PURE__ */ new Ray();\nclass OBB {\n constructor(center = new Vector3(), halfSize = new Vector3(), rotation = new Matrix3()) {\n this.center = center;\n this.halfSize = halfSize;\n this.rotation = rotation;\n }\n set(center, halfSize, rotation) {\n this.center = center;\n this.halfSize = halfSize;\n this.rotation = rotation;\n return this;\n }\n copy(obb2) {\n this.center.copy(obb2.center);\n this.halfSize.copy(obb2.halfSize);\n this.rotation.copy(obb2.rotation);\n return this;\n }\n clone() {\n return new this.constructor().copy(this);\n }\n getSize(result) {\n return result.copy(this.halfSize).multiplyScalar(2);\n }\n /**\n * Reference: Closest Point on OBB to Point in Real-Time Collision Detection\n * by Christer Ericson (chapter 5.1.4)\n */\n clampPoint(point, result) {\n const halfSize = this.halfSize;\n v1.subVectors(point, this.center);\n this.rotation.extractBasis(xAxis, yAxis, zAxis);\n result.copy(this.center);\n const x = MathUtils.clamp(v1.dot(xAxis), -halfSize.x, halfSize.x);\n result.add(xAxis.multiplyScalar(x));\n const y = MathUtils.clamp(v1.dot(yAxis), -halfSize.y, halfSize.y);\n result.add(yAxis.multiplyScalar(y));\n const z = MathUtils.clamp(v1.dot(zAxis), -halfSize.z, halfSize.z);\n result.add(zAxis.multiplyScalar(z));\n return result;\n }\n containsPoint(point) {\n v1.subVectors(point, this.center);\n this.rotation.extractBasis(xAxis, yAxis, zAxis);\n return Math.abs(v1.dot(xAxis)) <= this.halfSize.x && Math.abs(v1.dot(yAxis)) <= this.halfSize.y && Math.abs(v1.dot(zAxis)) <= this.halfSize.z;\n }\n intersectsBox3(box3) {\n return this.intersectsOBB(obb.fromBox3(box3));\n }\n intersectsSphere(sphere) {\n this.clampPoint(sphere.center, closestPoint);\n return closestPoint.distanceToSquared(sphere.center) <= sphere.radius * sphere.radius;\n }\n /**\n * Reference: OBB-OBB Intersection in Real-Time Collision Detection\n * by Christer Ericson (chapter 4.4.1)\n *\n */\n intersectsOBB(obb2, epsilon = Number.EPSILON) {\n a.c = this.center;\n a.e[0] = this.halfSize.x;\n a.e[1] = this.halfSize.y;\n a.e[2] = this.halfSize.z;\n this.rotation.extractBasis(a.u[0], a.u[1], a.u[2]);\n b.c = obb2.center;\n b.e[0] = obb2.halfSize.x;\n b.e[1] = obb2.halfSize.y;\n b.e[2] = obb2.halfSize.z;\n obb2.rotation.extractBasis(b.u[0], b.u[1], b.u[2]);\n for (let i = 0; i < 3; i++) {\n for (let j = 0; j < 3; j++) {\n R[i][j] = a.u[i].dot(b.u[j]);\n }\n }\n v1.subVectors(b.c, a.c);\n t[0] = v1.dot(a.u[0]);\n t[1] = v1.dot(a.u[1]);\n t[2] = v1.dot(a.u[2]);\n for (let i = 0; i < 3; i++) {\n for (let j = 0; j < 3; j++) {\n AbsR[i][j] = Math.abs(R[i][j]) + epsilon;\n }\n }\n let ra, rb;\n for (let i = 0; i < 3; i++) {\n ra = a.e[i];\n rb = b.e[0] * AbsR[i][0] + b.e[1] * AbsR[i][1] + b.e[2] * AbsR[i][2];\n if (Math.abs(t[i]) > ra + rb)\n return false;\n }\n for (let i = 0; i < 3; i++) {\n ra = a.e[0] * AbsR[0][i] + a.e[1] * AbsR[1][i] + a.e[2] * AbsR[2][i];\n rb = b.e[i];\n if (Math.abs(t[0] * R[0][i] + t[1] * R[1][i] + t[2] * R[2][i]) > ra + rb)\n return false;\n }\n ra = a.e[1] * AbsR[2][0] + a.e[2] * AbsR[1][0];\n rb = b.e[1] * AbsR[0][2] + b.e[2] * AbsR[0][1];\n if (Math.abs(t[2] * R[1][0] - t[1] * R[2][0]) > ra + rb)\n return false;\n ra = a.e[1] * AbsR[2][1] + a.e[2] * AbsR[1][1];\n rb = b.e[0] * AbsR[0][2] + b.e[2] * AbsR[0][0];\n if (Math.abs(t[2] * R[1][1] - t[1] * R[2][1]) > ra + rb)\n return false;\n ra = a.e[1] * AbsR[2][2] + a.e[2] * AbsR[1][2];\n rb = b.e[0] * AbsR[0][1] + b.e[1] * AbsR[0][0];\n if (Math.abs(t[2] * R[1][2] - t[1] * R[2][2]) > ra + rb)\n return false;\n ra = a.e[0] * AbsR[2][0] + a.e[2] * AbsR[0][0];\n rb = b.e[1] * AbsR[1][2] + b.e[2] * AbsR[1][1];\n if (Math.abs(t[0] * R[2][0] - t[2] * R[0][0]) > ra + rb)\n return false;\n ra = a.e[0] * AbsR[2][1] + a.e[2] * AbsR[0][1];\n rb = b.e[0] * AbsR[1][2] + b.e[2] * AbsR[1][0];\n if (Math.abs(t[0] * R[2][1] - t[2] * R[0][1]) > ra + rb)\n return false;\n ra = a.e[0] * AbsR[2][2] + a.e[2] * AbsR[0][2];\n rb = b.e[0] * AbsR[1][1] + b.e[1] * AbsR[1][0];\n if (Math.abs(t[0] * R[2][2] - t[2] * R[0][2]) > ra + rb)\n return false;\n ra = a.e[0] * AbsR[1][0] + a.e[1] * AbsR[0][0];\n rb = b.e[1] * AbsR[2][2] + b.e[2] * AbsR[2][1];\n if (Math.abs(t[1] * R[0][0] - t[0] * R[1][0]) > ra + rb)\n return false;\n ra = a.e[0] * AbsR[1][1] + a.e[1] * AbsR[0][1];\n rb = b.e[0] * AbsR[2][2] + b.e[2] * AbsR[2][0];\n if (Math.abs(t[1] * R[0][1] - t[0] * R[1][1]) > ra + rb)\n return false;\n ra = a.e[0] * AbsR[1][2] + a.e[1] * AbsR[0][2];\n rb = b.e[0] * AbsR[2][1] + b.e[1] * AbsR[2][0];\n if (Math.abs(t[1] * R[0][2] - t[0] * R[1][2]) > ra + rb)\n return false;\n return true;\n }\n /**\n * Reference: Testing Box Against Plane in Real-Time Collision Detection\n * by Christer Ericson (chapter 5.2.3)\n */\n intersectsPlane(plane) {\n this.rotation.extractBasis(xAxis, yAxis, zAxis);\n const r = this.halfSize.x * Math.abs(plane.normal.dot(xAxis)) + this.halfSize.y * Math.abs(plane.normal.dot(yAxis)) + this.halfSize.z * Math.abs(plane.normal.dot(zAxis));\n const d = plane.normal.dot(this.center) - plane.constant;\n return Math.abs(d) <= r;\n }\n /**\n * Performs a ray/OBB intersection test and stores the intersection point\n * to the given 3D vector. If no intersection is detected, *null* is returned.\n */\n intersectRay(ray, result) {\n this.getSize(size);\n aabb.setFromCenterAndSize(v1.set(0, 0, 0), size);\n matrix.setFromMatrix3(this.rotation);\n matrix.setPosition(this.center);\n inverse.copy(matrix).invert();\n localRay.copy(ray).applyMatrix4(inverse);\n if (localRay.intersectBox(aabb, result)) {\n return result.applyMatrix4(matrix);\n } else {\n return null;\n }\n }\n /**\n * Performs a ray/OBB intersection test. Returns either true or false if\n * there is a intersection or not.\n */\n intersectsRay(ray) {\n return this.intersectRay(ray, v1) !== null;\n }\n fromBox3(box3) {\n box3.getCenter(this.center);\n box3.getSize(this.halfSize).multiplyScalar(0.5);\n this.rotation.identity();\n return this;\n }\n equals(obb2) {\n return obb2.center.equals(this.center) && obb2.halfSize.equals(this.halfSize) && obb2.rotation.equals(this.rotation);\n }\n applyMatrix4(matrix2) {\n const e = matrix2.elements;\n let sx = v1.set(e[0], e[1], e[2]).length();\n const sy = v1.set(e[4], e[5], e[6]).length();\n const sz = v1.set(e[8], e[9], e[10]).length();\n const det = matrix2.determinant();\n if (det < 0)\n sx = -sx;\n rotationMatrix.setFromMatrix4(matrix2);\n const invSX = 1 / sx;\n const invSY = 1 / sy;\n const invSZ = 1 / sz;\n rotationMatrix.elements[0] *= invSX;\n rotationMatrix.elements[1] *= invSX;\n rotationMatrix.elements[2] *= invSX;\n rotationMatrix.elements[3] *= invSY;\n rotationMatrix.elements[4] *= invSY;\n rotationMatrix.elements[5] *= invSY;\n rotationMatrix.elements[6] *= invSZ;\n rotationMatrix.elements[7] *= invSZ;\n rotationMatrix.elements[8] *= invSZ;\n this.rotation.multiply(rotationMatrix);\n this.halfSize.x *= sx;\n this.halfSize.y *= sy;\n this.halfSize.z *= sz;\n v1.setFromMatrixPosition(matrix2);\n this.center.add(v1);\n return this;\n }\n}\nconst obb = /* @__PURE__ */ new OBB();\nexport {\n OBB\n};\n//# sourceMappingURL=OBB.js.map\n","import { Vector3 } from \"three\";\nconst _v1 = /* @__PURE__ */ new Vector3();\nconst _v2 = /* @__PURE__ */ new Vector3();\nconst _v3 = /* @__PURE__ */ new Vector3();\nconst EPS = 1e-10;\nclass Capsule {\n constructor(start = new Vector3(0, 0, 0), end = new Vector3(0, 1, 0), radius = 1) {\n this.start = start;\n this.end = end;\n this.radius = radius;\n }\n clone() {\n return new Capsule(this.start.clone(), this.end.clone(), this.radius);\n }\n set(start, end, radius) {\n this.start.copy(start);\n this.end.copy(end);\n this.radius = radius;\n }\n copy(capsule) {\n this.start.copy(capsule.start);\n this.end.copy(capsule.end);\n this.radius = capsule.radius;\n }\n getCenter(target) {\n return target.copy(this.end).add(this.start).multiplyScalar(0.5);\n }\n translate(v) {\n this.start.add(v);\n this.end.add(v);\n }\n checkAABBAxis(p1x, p1y, p2x, p2y, minx, maxx, miny, maxy, radius) {\n return (minx - p1x < radius || minx - p2x < radius) && (p1x - maxx < radius || p2x - maxx < radius) && (miny - p1y < radius || miny - p2y < radius) && (p1y - maxy < radius || p2y - maxy < radius);\n }\n intersectsBox(box) {\n return this.checkAABBAxis(\n this.start.x,\n this.start.y,\n this.end.x,\n this.end.y,\n box.min.x,\n box.max.x,\n box.min.y,\n box.max.y,\n this.radius\n ) && this.checkAABBAxis(\n this.start.x,\n this.start.z,\n this.end.x,\n this.end.z,\n box.min.x,\n box.max.x,\n box.min.z,\n box.max.z,\n this.radius\n ) && this.checkAABBAxis(\n this.start.y,\n this.start.z,\n this.end.y,\n this.end.z,\n box.min.y,\n box.max.y,\n box.min.z,\n box.max.z,\n this.radius\n );\n }\n lineLineMinimumPoints(line1, line2) {\n const r = _v1.copy(line1.end).sub(line1.start);\n const s = _v2.copy(line2.end).sub(line2.start);\n const w = _v3.copy(line2.start).sub(line1.start);\n const a = r.dot(s), b = r.dot(r), c = s.dot(s), d = s.dot(w), e = r.dot(w);\n let t1, t2;\n const divisor = b * c - a * a;\n if (Math.abs(divisor) < EPS) {\n const d1 = -d / c;\n const d2 = (a - d) / c;\n if (Math.abs(d1 - 0.5) < Math.abs(d2 - 0.5)) {\n t1 = 0;\n t2 = d1;\n } else {\n t1 = 1;\n t2 = d2;\n }\n } else {\n t1 = (d * a + e * c) / divisor;\n t2 = (t1 * a - d) / c;\n }\n t2 = Math.max(0, Math.min(1, t2));\n t1 = Math.max(0, Math.min(1, t1));\n const point1 = r.multiplyScalar(t1).add(line1.start);\n const point2 = s.multiplyScalar(t2).add(line2.start);\n return [point1, point2];\n }\n}\nexport {\n Capsule\n};\n//# sourceMappingURL=Capsule.js.map\n","import { MathUtils } from \"three\";\nconst _hsl = {};\nconst ColorConverter = {\n setHSV(color, h, s, v) {\n h = MathUtils.euclideanModulo(h, 1);\n s = MathUtils.clamp(s, 0, 1);\n v = MathUtils.clamp(v, 0, 1);\n return color.setHSL(h, s * v / ((h = (2 - s) * v) < 1 ? h : 2 - h), h * 0.5);\n },\n getHSV(color, target) {\n color.getHSL(_hsl);\n _hsl.s *= _hsl.l < 0.5 ? _hsl.l : 1 - _hsl.l;\n target.h = _hsl.h;\n target.s = 2 * _hsl.s / (_hsl.l + _hsl.s);\n target.v = _hsl.l + _hsl.s;\n return target;\n },\n // where c, m, y, k is between 0 and 1\n setCMYK(color, c, m, y, k) {\n const r = (1 - c) * (1 - k);\n const g = (1 - m) * (1 - k);\n const b = (1 - y) * (1 - k);\n return color.setRGB(r, g, b);\n },\n getCMYK(color, target) {\n const r = color.r;\n const g = color.g;\n const b = color.b;\n const k = 1 - Math.max(r, g, b);\n const c = (1 - r - k) / (1 - k);\n const m = (1 - g - k) / (1 - k);\n const y = (1 - b - k) / (1 - k);\n target.c = c;\n target.m = m;\n target.y = y;\n target.k = k;\n return target;\n }\n};\nexport {\n ColorConverter\n};\n//# sourceMappingURL=ColorConverter.js.map\n","function init() {\n const _p2 = [\n 151,\n 160,\n 137,\n 91,\n 90,\n 15,\n 131,\n 13,\n 201,\n 95,\n 96,\n 53,\n 194,\n 233,\n 7,\n 225,\n 140,\n 36,\n 103,\n 30,\n 69,\n 142,\n 8,\n 99,\n 37,\n 240,\n 21,\n 10,\n 23,\n 190,\n 6,\n 148,\n 247,\n 120,\n 234,\n 75,\n 0,\n 26,\n 197,\n 62,\n 94,\n 252,\n 219,\n 203,\n 117,\n 35,\n 11,\n 32,\n 57,\n 177,\n 33,\n 88,\n 237,\n 149,\n 56,\n 87,\n 174,\n 20,\n 125,\n 136,\n 171,\n 168,\n 68,\n 175,\n 74,\n 165,\n 71,\n 134,\n 139,\n 48,\n 27,\n 166,\n 77,\n 146,\n 158,\n 231,\n 83,\n 111,\n 229,\n 122,\n 60,\n 211,\n 133,\n 230,\n 220,\n 105,\n 92,\n 41,\n 55,\n 46,\n 245,\n 40,\n 244,\n 102,\n 143,\n 54,\n 65,\n 25,\n 63,\n 161,\n 1,\n 216,\n 80,\n 73,\n 209,\n 76,\n 132,\n 187,\n 208,\n 89,\n 18,\n 169,\n 200,\n 196,\n 135,\n 130,\n 116,\n 188,\n 159,\n 86,\n 164,\n 100,\n 109,\n 198,\n 173,\n 186,\n 3,\n 64,\n 52,\n 217,\n 226,\n 250,\n 124,\n 123,\n 5,\n 202,\n 38,\n 147,\n 118,\n 126,\n 255,\n 82,\n 85,\n 212,\n 207,\n 206,\n 59,\n 227,\n 47,\n 16,\n 58,\n 17,\n 182,\n 189,\n 28,\n 42,\n 223,\n 183,\n 170,\n 213,\n 119,\n 248,\n 152,\n 2,\n 44,\n 154,\n 163,\n 70,\n 221,\n 153,\n 101,\n 155,\n 167,\n 43,\n 172,\n 9,\n 129,\n 22,\n 39,\n 253,\n 19,\n 98,\n 108,\n 110,\n 79,\n 113,\n 224,\n 232,\n 178,\n 185,\n 112,\n 104,\n 218,\n 246,\n 97,\n 228,\n 251,\n 34,\n 242,\n 193,\n 238,\n 210,\n 144,\n 12,\n 191,\n 179,\n 162,\n 241,\n 81,\n 51,\n 145,\n 235,\n 249,\n 14,\n 239,\n 107,\n 49,\n 192,\n 214,\n 31,\n 181,\n 199,\n 106,\n 157,\n 184,\n 84,\n 204,\n 176,\n 115,\n 121,\n 50,\n 45,\n 127,\n 4,\n 150,\n 254,\n 138,\n 236,\n 205,\n 93,\n 222,\n 114,\n 67,\n 29,\n 24,\n 72,\n 243,\n 141,\n 128,\n 195,\n 78,\n 66,\n 215,\n 61,\n 156,\n 180\n ];\n for (let i = 0; i < 256; i++) {\n _p2[256 + i] = _p2[i];\n }\n return _p2;\n}\nconst _p = /* @__PURE__ */ init();\nfunction fade(t) {\n return t * t * t * (t * (t * 6 - 15) + 10);\n}\nfunction lerp(t, a, b) {\n return a + t * (b - a);\n}\nfunction grad(hash, x, y, z) {\n const h = hash & 15;\n const u = h < 8 ? x : y, v = h < 4 ? y : h == 12 || h == 14 ? x : z;\n return ((h & 1) == 0 ? u : -u) + ((h & 2) == 0 ? v : -v);\n}\nclass ImprovedNoise {\n noise(x, y, z) {\n const floorX = Math.floor(x), floorY = Math.floor(y), floorZ = Math.floor(z);\n const X = floorX & 255, Y = floorY & 255, Z = floorZ & 255;\n x -= floorX;\n y -= floorY;\n z -= floorZ;\n const xMinus1 = x - 1, yMinus1 = y - 1, zMinus1 = z - 1;\n const u = fade(x), v = fade(y), w = fade(z);\n const A = _p[X] + Y, AA = _p[A] + Z, AB = _p[A + 1] + Z, B = _p[X + 1] + Y, BA = _p[B] + Z, BB = _p[B + 1] + Z;\n return lerp(\n w,\n lerp(\n v,\n lerp(u, grad(_p[AA], x, y, z), grad(_p[BA], xMinus1, y, z)),\n lerp(u, grad(_p[AB], x, yMinus1, z), grad(_p[BB], xMinus1, yMinus1, z))\n ),\n lerp(\n v,\n lerp(u, grad(_p[AA + 1], x, y, zMinus1), grad(_p[BA + 1], xMinus1, y, zMinus1)),\n lerp(u, grad(_p[AB + 1], x, yMinus1, zMinus1), grad(_p[BB + 1], xMinus1, yMinus1, zMinus1))\n )\n );\n }\n}\nexport {\n ImprovedNoise\n};\n//# sourceMappingURL=ImprovedNoise.js.map\n","import { Box3, Vector3, Triangle, Plane, Line3, Sphere } from \"three\";\nimport { Capsule } from \"./Capsule.js\";\nconst _v1 = /* @__PURE__ */ new Vector3();\nconst _v2 = /* @__PURE__ */ new Vector3();\nconst _plane = /* @__PURE__ */ new Plane();\nconst _line1 = /* @__PURE__ */ new Line3();\nconst _line2 = /* @__PURE__ */ new Line3();\nconst _sphere = /* @__PURE__ */ new Sphere();\nconst _capsule = /* @__PURE__ */ new Capsule();\nclass Octree {\n constructor(box) {\n this.triangles = [];\n this.box = box;\n this.subTrees = [];\n }\n addTriangle(triangle) {\n if (!this.bounds)\n this.bounds = new Box3();\n this.bounds.min.x = Math.min(this.bounds.min.x, triangle.a.x, triangle.b.x, triangle.c.x);\n this.bounds.min.y = Math.min(this.bounds.min.y, triangle.a.y, triangle.b.y, triangle.c.y);\n this.bounds.min.z = Math.min(this.bounds.min.z, triangle.a.z, triangle.b.z, triangle.c.z);\n this.bounds.max.x = Math.max(this.bounds.max.x, triangle.a.x, triangle.b.x, triangle.c.x);\n this.bounds.max.y = Math.max(this.bounds.max.y, triangle.a.y, triangle.b.y, triangle.c.y);\n this.bounds.max.z = Math.max(this.bounds.max.z, triangle.a.z, triangle.b.z, triangle.c.z);\n this.triangles.push(triangle);\n return this;\n }\n calcBox() {\n this.box = this.bounds.clone();\n this.box.min.x -= 0.01;\n this.box.min.y -= 0.01;\n this.box.min.z -= 0.01;\n return this;\n }\n split(level) {\n if (!this.box)\n return;\n const subTrees = [];\n const halfsize = _v2.copy(this.box.max).sub(this.box.min).multiplyScalar(0.5);\n for (let x = 0; x < 2; x++) {\n for (let y = 0; y < 2; y++) {\n for (let z = 0; z < 2; z++) {\n const box = new Box3();\n const v = _v1.set(x, y, z);\n box.min.copy(this.box.min).add(v.multiply(halfsize));\n box.max.copy(box.min).add(halfsize);\n subTrees.push(new Octree(box));\n }\n }\n }\n let triangle;\n while (triangle = this.triangles.pop()) {\n for (let i = 0; i < subTrees.length; i++) {\n if (subTrees[i].box.intersectsTriangle(triangle)) {\n subTrees[i].triangles.push(triangle);\n }\n }\n }\n for (let i = 0; i < subTrees.length; i++) {\n const len = subTrees[i].triangles.length;\n if (len > 8 && level < 16) {\n subTrees[i].split(level + 1);\n }\n if (len !== 0) {\n this.subTrees.push(subTrees[i]);\n }\n }\n return this;\n }\n build() {\n this.calcBox();\n this.split(0);\n return this;\n }\n getRayTriangles(ray, triangles) {\n for (let i = 0; i < this.subTrees.length; i++) {\n const subTree = this.subTrees[i];\n if (!ray.intersectsBox(subTree.box))\n continue;\n if (subTree.triangles.length > 0) {\n for (let j = 0; j < subTree.triangles.length; j++) {\n if (triangles.indexOf(subTree.triangles[j]) === -1)\n triangles.push(subTree.triangles[j]);\n }\n } else {\n subTree.getRayTriangles(ray, triangles);\n }\n }\n return triangles;\n }\n triangleCapsuleIntersect(capsule, triangle) {\n triangle.getPlane(_plane);\n const d1 = _plane.distanceToPoint(capsule.start) - capsule.radius;\n const d2 = _plane.distanceToPoint(capsule.end) - capsule.radius;\n if (d1 > 0 && d2 > 0 || d1 < -capsule.radius && d2 < -capsule.radius) {\n return false;\n }\n const delta = Math.abs(d1 / (Math.abs(d1) + Math.abs(d2)));\n const intersectPoint = _v1.copy(capsule.start).lerp(capsule.end, delta);\n if (triangle.containsPoint(intersectPoint)) {\n return { normal: _plane.normal.clone(), point: intersectPoint.clone(), depth: Math.abs(Math.min(d1, d2)) };\n }\n const r2 = capsule.radius * capsule.radius;\n const line1 = _line1.set(capsule.start, capsule.end);\n const lines = [\n [triangle.a, triangle.b],\n [triangle.b, triangle.c],\n [triangle.c, triangle.a]\n ];\n for (let i = 0; i < lines.length; i++) {\n const line2 = _line2.set(lines[i][0], lines[i][1]);\n const [point1, point2] = capsule.lineLineMinimumPoints(line1, line2);\n if (point1.distanceToSquared(point2) < r2) {\n return {\n normal: point1.clone().sub(point2).normalize(),\n point: point2.clone(),\n depth: capsule.radius - point1.distanceTo(point2)\n };\n }\n }\n return false;\n }\n triangleSphereIntersect(sphere, triangle) {\n triangle.getPlane(_plane);\n if (!sphere.intersectsPlane(_plane))\n return false;\n const depth = Math.abs(_plane.distanceToSphere(sphere));\n const r2 = sphere.radius * sphere.radius - depth * depth;\n const plainPoint = _plane.projectPoint(sphere.center, _v1);\n if (triangle.containsPoint(sphere.center)) {\n return {\n normal: _plane.normal.clone(),\n point: plainPoint.clone(),\n depth: Math.abs(_plane.distanceToSphere(sphere))\n };\n }\n const lines = [\n [triangle.a, triangle.b],\n [triangle.b, triangle.c],\n [triangle.c, triangle.a]\n ];\n for (let i = 0; i < lines.length; i++) {\n _line1.set(lines[i][0], lines[i][1]);\n _line1.closestPointToPoint(plainPoint, true, _v2);\n const d = _v2.distanceToSquared(sphere.center);\n if (d < r2) {\n return {\n normal: sphere.center.clone().sub(_v2).normalize(),\n point: _v2.clone(),\n depth: sphere.radius - Math.sqrt(d)\n };\n }\n }\n return false;\n }\n getSphereTriangles(sphere, triangles) {\n for (let i = 0; i < this.subTrees.length; i++) {\n const subTree = this.subTrees[i];\n if (!sphere.intersectsBox(subTree.box))\n continue;\n if (subTree.triangles.length > 0) {\n for (let j = 0; j < subTree.triangles.length; j++) {\n if (triangles.indexOf(subTree.triangles[j]) === -1)\n triangles.push(subTree.triangles[j]);\n }\n } else {\n subTree.getSphereTriangles(sphere, triangles);\n }\n }\n }\n getCapsuleTriangles(capsule, triangles) {\n for (let i = 0; i < this.subTrees.length; i++) {\n const subTree = this.subTrees[i];\n if (!capsule.intersectsBox(subTree.box))\n continue;\n if (subTree.triangles.length > 0) {\n for (let j = 0; j < subTree.triangles.length; j++) {\n if (triangles.indexOf(subTree.triangles[j]) === -1)\n triangles.push(subTree.triangles[j]);\n }\n } else {\n subTree.getCapsuleTriangles(capsule, triangles);\n }\n }\n }\n sphereIntersect(sphere) {\n _sphere.copy(sphere);\n const triangles = [];\n let result, hit = false;\n this.getSphereTriangles(sphere, triangles);\n for (let i = 0; i < triangles.length; i++) {\n if (result = this.triangleSphereIntersect(_sphere, triangles[i])) {\n hit = true;\n _sphere.center.add(result.normal.multiplyScalar(result.depth));\n }\n }\n if (hit) {\n const collisionVector = _sphere.center.clone().sub(sphere.center);\n const depth = collisionVector.length();\n return { normal: collisionVector.normalize(), depth };\n }\n return false;\n }\n capsuleIntersect(capsule) {\n _capsule.copy(capsule);\n const triangles = [];\n let result, hit = false;\n this.getCapsuleTriangles(_capsule, triangles);\n for (let i = 0; i < triangles.length; i++) {\n if (result = this.triangleCapsuleIntersect(_capsule, triangles[i])) {\n hit = true;\n _capsule.translate(result.normal.multiplyScalar(result.depth));\n }\n }\n if (hit) {\n const collisionVector = _capsule.getCenter(new Vector3()).sub(capsule.getCenter(_v1));\n const depth = collisionVector.length();\n return { normal: collisionVector.normalize(), depth };\n }\n return false;\n }\n rayIntersect(ray) {\n if (ray.direction.length() === 0)\n return;\n const triangles = [];\n let triangle, position, distance = 1e100;\n this.getRayTriangles(ray, triangles);\n for (let i = 0; i < triangles.length; i++) {\n const result = ray.intersectTriangle(triangles[i].a, triangles[i].b, triangles[i].c, true, _v1);\n if (result) {\n const newdistance = result.sub(ray.origin).length();\n if (distance > newdistance) {\n position = result.clone().add(ray.origin);\n distance = newdistance;\n triangle = triangles[i];\n }\n }\n }\n return distance < 1e100 ? { distance, triangle, position } : false;\n }\n fromGraphNode(group) {\n group.updateWorldMatrix(true, true);\n group.traverse((obj) => {\n if (obj.isMesh === true) {\n let geometry, isTemp = false;\n if (obj.geometry.index !== null) {\n isTemp = true;\n geometry = obj.geometry.toNonIndexed();\n } else {\n geometry = obj.geometry;\n }\n const positionAttribute = geometry.getAttribute(\"position\");\n for (let i = 0; i < positionAttribute.count; i += 3) {\n const v1 = new Vector3().fromBufferAttribute(positionAttribute, i);\n const v2 = new Vector3().fromBufferAttribute(positionAttribute, i + 1);\n const v3 = new Vector3().fromBufferAttribute(positionAttribute, i + 2);\n v1.applyMatrix4(obj.matrixWorld);\n v2.applyMatrix4(obj.matrixWorld);\n v3.applyMatrix4(obj.matrixWorld);\n this.addTriangle(new Triangle(v1, v2, v3));\n }\n if (isTemp) {\n geometry.dispose();\n }\n }\n });\n this.build();\n return this;\n }\n}\nexport {\n Octree\n};\n//# sourceMappingURL=Octree.js.map\n","import { Color, MathUtils } from \"three\";\nclass Lut {\n constructor(colormap, count = 32) {\n this.isLut = true;\n this.lut = [];\n this.map = [];\n this.n = 0;\n this.minV = 0;\n this.maxV = 1;\n this.setColorMap(colormap, count);\n }\n set(value) {\n if (value.isLut === true) {\n this.copy(value);\n }\n return this;\n }\n setMin(min) {\n this.minV = min;\n return this;\n }\n setMax(max) {\n this.maxV = max;\n return this;\n }\n setColorMap(colormap, count = 32) {\n this.map = ColorMapKeywords[colormap] || ColorMapKeywords.rainbow;\n this.n = count;\n const step = 1 / this.n;\n const minColor = new Color();\n const maxColor = new Color();\n this.lut.length = 0;\n this.lut.push(new Color(this.map[0][1]));\n for (let i = 1; i < count; i++) {\n const alpha = i * step;\n for (let j = 0; j < this.map.length - 1; j++) {\n if (alpha > this.map[j][0] && alpha <= this.map[j + 1][0]) {\n const min = this.map[j][0];\n const max = this.map[j + 1][0];\n minColor.setHex(this.map[j][1], \"srgb-linear\");\n maxColor.setHex(this.map[j + 1][1], \"srgb-linear\");\n const color = new Color().lerpColors(minColor, maxColor, (alpha - min) / (max - min));\n this.lut.push(color);\n }\n }\n }\n this.lut.push(new Color(this.map[this.map.length - 1][1]));\n return this;\n }\n copy(lut) {\n this.lut = lut.lut;\n this.map = lut.map;\n this.n = lut.n;\n this.minV = lut.minV;\n this.maxV = lut.maxV;\n return this;\n }\n getColor(alpha) {\n alpha = MathUtils.clamp(alpha, this.minV, this.maxV);\n alpha = (alpha - this.minV) / (this.maxV - this.minV);\n const colorPosition = Math.round(alpha * this.n);\n return this.lut[colorPosition];\n }\n addColorMap(name, arrayOfColors) {\n ColorMapKeywords[name] = arrayOfColors;\n return this;\n }\n createCanvas() {\n const canvas = document.createElement(\"canvas\");\n canvas.width = 1;\n canvas.height = this.n;\n this.updateCanvas(canvas);\n return canvas;\n }\n updateCanvas(canvas) {\n const ctx = canvas.getContext(\"2d\", { alpha: false });\n const imageData = ctx.getImageData(0, 0, 1, this.n);\n const data = imageData.data;\n let k = 0;\n const step = 1 / this.n;\n const minColor = new Color();\n const maxColor = new Color();\n const finalColor = new Color();\n for (let i = 1; i >= 0; i -= step) {\n for (let j = this.map.length - 1; j >= 0; j--) {\n if (i < this.map[j][0] && i >= this.map[j - 1][0]) {\n const min = this.map[j - 1][0];\n const max = this.map[j][0];\n minColor.setHex(this.map[j - 1][1], \"srgb-linear\");\n maxColor.setHex(this.map[j][1], \"srgb-linear\");\n finalColor.lerpColors(minColor, maxColor, (i - min) / (max - min));\n data[k * 4] = Math.round(finalColor.r * 255);\n data[k * 4 + 1] = Math.round(finalColor.g * 255);\n data[k * 4 + 2] = Math.round(finalColor.b * 255);\n data[k * 4 + 3] = 255;\n k += 1;\n }\n }\n }\n ctx.putImageData(imageData, 0, 0);\n return canvas;\n }\n}\nconst ColorMapKeywords = {\n rainbow: [\n [0, 255],\n [0.2, 65535],\n [0.5, 65280],\n [0.8, 16776960],\n [1, 16711680]\n ],\n cooltowarm: [\n [0, 3952322],\n [0.2, 10206463],\n [0.5, 14474460],\n [0.8, 16163717],\n [1, 11797542]\n ],\n blackbody: [\n [0, 0],\n [0.2, 7864320],\n [0.5, 15086080],\n [0.8, 16776960],\n [1, 16777215]\n ],\n grayscale: [\n [0, 0],\n [0.2, 4210752],\n [0.5, 8355712],\n [0.8, 12566463],\n [1, 16777215]\n ]\n};\nexport {\n ColorMapKeywords,\n Lut\n};\n//# sourceMappingURL=Lut.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nclass EventDispatcher {\n constructor() {\n // not defined in @types/three\n __publicField(this, \"_listeners\");\n }\n /**\n * Adds a listener to an event type.\n * @param type The type of event to listen to.\n * @param listener The function that gets called when the event is fired.\n */\n addEventListener(type, listener) {\n if (this._listeners === void 0)\n this._listeners = {};\n const listeners = this._listeners;\n if (listeners[type] === void 0) {\n listeners[type] = [];\n }\n if (listeners[type].indexOf(listener) === -1) {\n listeners[type].push(listener);\n }\n }\n /**\n * Checks if listener is added to an event type.\n * @param type The type of event to listen to.\n * @param listener The function that gets called when the event is fired.\n */\n hasEventListener(type, listener) {\n if (this._listeners === void 0)\n return false;\n const listeners = this._listeners;\n return listeners[type] !== void 0 && listeners[type].indexOf(listener) !== -1;\n }\n /**\n * Removes a listener from an event type.\n * @param type The type of the listener that gets removed.\n * @param listener The listener function that gets removed.\n */\n removeEventListener(type, listener) {\n if (this._listeners === void 0)\n return;\n const listeners = this._listeners;\n const listenerArray = listeners[type];\n if (listenerArray !== void 0) {\n const index = listenerArray.indexOf(listener);\n if (index !== -1) {\n listenerArray.splice(index, 1);\n }\n }\n }\n /**\n * Fire an event type.\n * @param event The event that gets fired.\n */\n dispatchEvent(event) {\n if (this._listeners === void 0)\n return;\n const listeners = this._listeners;\n const listenerArray = listeners[event.type];\n if (listenerArray !== void 0) {\n event.target = this;\n const array = listenerArray.slice(0);\n for (let i = 0, l = array.length; i < l; i++) {\n array[i].call(this, event);\n }\n event.target = null;\n }\n }\n}\nexport {\n EventDispatcher\n};\n//# sourceMappingURL=EventDispatcher.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Vector3, TOUCH, Spherical, Vector2, Quaternion, MOUSE, PerspectiveCamera, OrthographicCamera } from \"three\";\nimport { EventDispatcher } from \"../EventDispatcher.js\";\nconst STATE = {\n NONE: -1,\n ROTATE: 0,\n DOLLY: 1,\n PAN: 2,\n TOUCH_ROTATE: 3,\n TOUCH_PAN: 4,\n TOUCH_DOLLY_PAN: 5,\n TOUCH_DOLLY_ROTATE: 6\n};\nclass CameraControls extends EventDispatcher {\n constructor(object, domElement) {\n super();\n __publicField(this, \"object\");\n __publicField(this, \"domElement\");\n /** Set to false to disable this control */\n __publicField(this, \"enabled\", true);\n /** \"target\" sets the location of focus, where the object orbits around */\n __publicField(this, \"target\", new Vector3());\n /** Set to true to enable trackball behavior */\n __publicField(this, \"trackball\", false);\n /** How far you can dolly in ( PerspectiveCamera only ) */\n __publicField(this, \"minDistance\", 0);\n /** How far you can dolly out ( PerspectiveCamera only ) */\n __publicField(this, \"maxDistance\", Infinity);\n // How far you can zoom in and out ( OrthographicCamera only )\n __publicField(this, \"minZoom\", 0);\n __publicField(this, \"maxZoom\", Infinity);\n // How far you can orbit vertically, upper and lower limits.\n // Range is 0 to Math.PI radians.\n __publicField(this, \"minPolarAngle\", 0);\n __publicField(this, \"maxPolarAngle\", Math.PI);\n // How far you can orbit horizontally, upper and lower limits.\n // If set, must be a sub-interval of the interval [ - Math.PI, Math.PI ].\n __publicField(this, \"minAzimuthAngle\", -Infinity);\n // radians\n __publicField(this, \"maxAzimuthAngle\", Infinity);\n // radians\n // Set to true to enable damping (inertia)\n // If damping is enabled, you must call controls.update() in your animation loop\n __publicField(this, \"enableDamping\", false);\n __publicField(this, \"dampingFactor\", 0.05);\n /**\n * This option enables dollying in and out; property named as \"zoom\" for backwards compatibility\n * Set to false to disable zooming\n */\n __publicField(this, \"enableZoom\", true);\n __publicField(this, \"zoomSpeed\", 1);\n /** Set to false to disable rotating */\n __publicField(this, \"enableRotate\", true);\n __publicField(this, \"rotateSpeed\", 1);\n /** Set to false to disable panning */\n __publicField(this, \"enablePan\", true);\n __publicField(this, \"panSpeed\", 1);\n /** if true, pan in screen-space */\n __publicField(this, \"screenSpacePanning\", false);\n /** pixels moved per arrow key push */\n __publicField(this, \"keyPanSpeed\", 7);\n /**\n * Set to true to automatically rotate around the target\n * If auto-rotate is enabled, you must call controls.update() in your animation loop\n * auto-rotate is not supported for trackball behavior\n */\n __publicField(this, \"autoRotate\", false);\n __publicField(this, \"autoRotateSpeed\", 2);\n // 30 seconds per round when fps is 60\n /** Set to false to disable use of the keys */\n __publicField(this, \"enableKeys\", true);\n /** The four arrow keys */\n __publicField(this, \"keys\", { LEFT: \"ArrowLeft\", UP: \"ArrowUp\", RIGHT: \"ArrowRight\", BOTTOM: \"ArrowDown\" });\n __publicField(this, \"mouseButtons\");\n /** Touch fingers */\n __publicField(this, \"touches\", { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN });\n // for reset\n __publicField(this, \"target0\");\n __publicField(this, \"position0\");\n __publicField(this, \"quaternion0\");\n __publicField(this, \"zoom0\");\n // current position in spherical coordinates\n __publicField(this, \"spherical\", new Spherical());\n __publicField(this, \"sphericalDelta\", new Spherical());\n __publicField(this, \"changeEvent\", { type: \"change\" });\n __publicField(this, \"startEvent\", { type: \"start\" });\n __publicField(this, \"endEvent\", { type: \"end\" });\n __publicField(this, \"state\", STATE.NONE);\n __publicField(this, \"EPS\", 1e-6);\n __publicField(this, \"scale\", 1);\n __publicField(this, \"panOffset\", new Vector3());\n __publicField(this, \"zoomChanged\", false);\n __publicField(this, \"rotateStart\", new Vector2());\n __publicField(this, \"rotateEnd\", new Vector2());\n __publicField(this, \"rotateDelta\", new Vector2());\n __publicField(this, \"panStart\", new Vector2());\n __publicField(this, \"panEnd\", new Vector2());\n __publicField(this, \"panDelta\", new Vector2());\n __publicField(this, \"dollyStart\", new Vector2());\n __publicField(this, \"dollyEnd\", new Vector2());\n __publicField(this, \"dollyDelta\", new Vector2());\n __publicField(this, \"offset\", new Vector3());\n __publicField(this, \"lastPosition\", new Vector3());\n __publicField(this, \"lastQuaternion\", new Quaternion());\n __publicField(this, \"q\", new Quaternion());\n __publicField(this, \"v\", new Vector3());\n __publicField(this, \"vec\", new Vector3());\n __publicField(this, \"quat\");\n __publicField(this, \"quatInverse\");\n __publicField(this, \"getPolarAngle\", () => this.spherical.phi);\n __publicField(this, \"getAzimuthalAngle\", () => this.spherical.theta);\n __publicField(this, \"saveState\", () => {\n this.target0.copy(this.target);\n this.position0.copy(this.object.position);\n this.quaternion0.copy(this.object.quaternion);\n this.zoom0 = this.object.zoom;\n });\n __publicField(this, \"reset\", () => {\n this.target.copy(this.target0);\n this.object.position.copy(this.position0);\n this.object.quaternion.copy(this.quaternion0);\n this.object.zoom = this.zoom0;\n this.object.updateProjectionMatrix();\n this.dispatchEvent(this.changeEvent);\n this.update();\n this.state = STATE.NONE;\n });\n __publicField(this, \"dispose\", () => {\n this.domElement.removeEventListener(\"contextmenu\", this.onContextMenu, false);\n this.domElement.removeEventListener(\"mousedown\", this.onMouseDown, false);\n this.domElement.removeEventListener(\"wheel\", this.onMouseWheel, false);\n this.domElement.removeEventListener(\"touchstart\", this.onTouchStart, false);\n this.domElement.removeEventListener(\"touchend\", this.onTouchEnd, false);\n this.domElement.removeEventListener(\"touchmove\", this.onTouchMove, false);\n document.removeEventListener(\"mousemove\", this.onMouseMove, false);\n document.removeEventListener(\"mouseup\", this.onMouseUp, false);\n this.domElement.removeEventListener(\"keydown\", this.onKeyDown, false);\n });\n __publicField(this, \"update\", () => {\n const position = this.object.position;\n this.offset.copy(position).sub(this.target);\n if (this.trackball) {\n if (this.sphericalDelta.theta) {\n this.vec.set(0, 1, 0).applyQuaternion(this.object.quaternion);\n const factor = this.enableDamping ? this.dampingFactor : 1;\n this.q.setFromAxisAngle(this.vec, this.sphericalDelta.theta * factor);\n this.object.quaternion.premultiply(this.q);\n this.offset.applyQuaternion(this.q);\n }\n if (this.sphericalDelta.phi) {\n this.vec.set(1, 0, 0).applyQuaternion(this.object.quaternion);\n const factor = this.enableDamping ? this.dampingFactor : 1;\n this.q.setFromAxisAngle(this.vec, this.sphericalDelta.phi * factor);\n this.object.quaternion.premultiply(this.q);\n this.offset.applyQuaternion(this.q);\n }\n this.offset.multiplyScalar(this.scale);\n this.offset.clampLength(this.minDistance, this.maxDistance);\n } else {\n this.offset.applyQuaternion(this.quat);\n if (this.autoRotate && this.state === STATE.NONE) {\n this.rotateLeft(this.getAutoRotationAngle());\n }\n this.spherical.setFromVector3(this.offset);\n if (this.enableDamping) {\n this.spherical.theta += this.sphericalDelta.theta * this.dampingFactor;\n this.spherical.phi += this.sphericalDelta.phi * this.dampingFactor;\n } else {\n this.spherical.theta += this.sphericalDelta.theta;\n this.spherical.phi += this.sphericalDelta.phi;\n }\n this.spherical.theta = Math.max(this.minAzimuthAngle, Math.min(this.maxAzimuthAngle, this.spherical.theta));\n this.spherical.phi = Math.max(this.minPolarAngle, Math.min(this.maxPolarAngle, this.spherical.phi));\n this.spherical.makeSafe();\n this.spherical.radius *= this.scale;\n this.spherical.radius = Math.max(this.minDistance, Math.min(this.maxDistance, this.spherical.radius));\n this.offset.setFromSpherical(this.spherical);\n this.offset.applyQuaternion(this.quatInverse);\n }\n if (this.enableDamping === true) {\n this.target.addScaledVector(this.panOffset, this.dampingFactor);\n } else {\n this.target.add(this.panOffset);\n }\n position.copy(this.target).add(this.offset);\n if (this.trackball === false) {\n this.object.lookAt(this.target);\n }\n if (this.enableDamping === true) {\n this.sphericalDelta.theta *= 1 - this.dampingFactor;\n this.sphericalDelta.phi *= 1 - this.dampingFactor;\n this.panOffset.multiplyScalar(1 - this.dampingFactor);\n } else {\n this.sphericalDelta.set(0, 0, 0);\n this.panOffset.set(0, 0, 0);\n }\n this.scale = 1;\n if (this.zoomChanged || this.lastPosition.distanceToSquared(this.object.position) > this.EPS || 8 * (1 - this.lastQuaternion.dot(this.object.quaternion)) > this.EPS) {\n this.dispatchEvent(this.changeEvent);\n this.lastPosition.copy(this.object.position);\n this.lastQuaternion.copy(this.object.quaternion);\n this.zoomChanged = false;\n return true;\n }\n return false;\n });\n __publicField(this, \"getAutoRotationAngle\", () => 2 * Math.PI / 60 / 60 * this.autoRotateSpeed);\n __publicField(this, \"getZoomScale\", () => Math.pow(0.95, this.zoomSpeed));\n __publicField(this, \"rotateLeft\", (angle) => {\n this.sphericalDelta.theta -= angle;\n });\n __publicField(this, \"rotateUp\", (angle) => {\n this.sphericalDelta.phi -= angle;\n });\n __publicField(this, \"panLeft\", (distance, objectMatrix) => {\n this.v.setFromMatrixColumn(objectMatrix, 0);\n this.v.multiplyScalar(-distance);\n this.panOffset.add(this.v);\n });\n __publicField(this, \"panUp\", (distance, objectMatrix) => {\n if (this.screenSpacePanning === true) {\n this.v.setFromMatrixColumn(objectMatrix, 1);\n } else {\n this.v.setFromMatrixColumn(objectMatrix, 0);\n this.v.crossVectors(this.object.up, this.v);\n }\n this.v.multiplyScalar(distance);\n this.panOffset.add(this.v);\n });\n // deltaX and deltaY are in pixels; right and down are positive\n __publicField(this, \"pan\", (deltaX, deltaY) => {\n const element = this.domElement;\n if (this.object instanceof PerspectiveCamera) {\n const position = this.object.position;\n this.offset.copy(position).sub(this.target);\n let targetDistance = this.offset.length();\n targetDistance *= Math.tan(this.object.fov / 2 * Math.PI / 180);\n this.panLeft(2 * deltaX * targetDistance / element.clientHeight, this.object.matrix);\n this.panUp(2 * deltaY * targetDistance / element.clientHeight, this.object.matrix);\n } else if (this.object.isOrthographicCamera) {\n this.panLeft(\n deltaX * (this.object.right - this.object.left) / this.object.zoom / element.clientWidth,\n this.object.matrix\n );\n this.panUp(\n deltaY * (this.object.top - this.object.bottom) / this.object.zoom / element.clientHeight,\n this.object.matrix\n );\n } else {\n console.warn(\"WARNING: CameraControls.js encountered an unknown camera type - pan disabled.\");\n this.enablePan = false;\n }\n });\n __publicField(this, \"dollyIn\", (dollyScale) => {\n if (this.object instanceof PerspectiveCamera) {\n this.scale /= dollyScale;\n } else if (this.object instanceof OrthographicCamera) {\n this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom * dollyScale));\n this.object.updateProjectionMatrix();\n this.zoomChanged = true;\n } else {\n console.warn(\"WARNING: CameraControls.js encountered an unknown camera type - dolly/zoom disabled.\");\n this.enableZoom = false;\n }\n });\n __publicField(this, \"dollyOut\", (dollyScale) => {\n if (this.object instanceof PerspectiveCamera) {\n this.scale *= dollyScale;\n } else if (this.object instanceof OrthographicCamera) {\n this.object.zoom = Math.max(this.minZoom, Math.min(this.maxZoom, this.object.zoom / dollyScale));\n this.object.updateProjectionMatrix();\n this.zoomChanged = true;\n } else {\n console.warn(\"WARNING: CameraControls.js encountered an unknown camera type - dolly/zoom disabled.\");\n this.enableZoom = false;\n }\n });\n // event callbacks - update the object state\n __publicField(this, \"handleMouseDownRotate\", (event) => {\n this.rotateStart.set(event.clientX, event.clientY);\n });\n // TODO: confirm if worthwhile to return the Vector2 instead of void\n __publicField(this, \"handleMouseDownDolly\", (event) => {\n this.dollyStart.set(event.clientX, event.clientY);\n });\n __publicField(this, \"handleMouseDownPan\", (event) => {\n this.panStart.set(event.clientX, event.clientY);\n });\n __publicField(this, \"handleMouseMoveRotate\", (event) => {\n this.rotateEnd.set(event.clientX, event.clientY);\n this.rotateDelta.subVectors(this.rotateEnd, this.rotateStart).multiplyScalar(this.rotateSpeed);\n const element = this.domElement;\n this.rotateLeft(2 * Math.PI * this.rotateDelta.x / element.clientHeight);\n this.rotateUp(2 * Math.PI * this.rotateDelta.y / element.clientHeight);\n this.rotateStart.copy(this.rotateEnd);\n this.update();\n });\n __publicField(this, \"handleMouseMoveDolly\", (event) => {\n this.dollyEnd.set(event.clientX, event.clientY);\n this.dollyDelta.subVectors(this.dollyEnd, this.dollyStart);\n if (this.dollyDelta.y > 0) {\n this.dollyIn(this.getZoomScale());\n } else if (this.dollyDelta.y < 0) {\n this.dollyOut(this.getZoomScale());\n }\n this.dollyStart.copy(this.dollyEnd);\n this.update();\n });\n __publicField(this, \"handleMouseMovePan\", (event) => {\n this.panEnd.set(event.clientX, event.clientY);\n this.panDelta.subVectors(this.panEnd, this.panStart).multiplyScalar(this.panSpeed);\n this.pan(this.panDelta.x, this.panDelta.y);\n this.panStart.copy(this.panEnd);\n this.update();\n });\n __publicField(this, \"handleMouseWheel\", (event) => {\n if (event.deltaY < 0) {\n this.dollyOut(this.getZoomScale());\n } else if (event.deltaY > 0) {\n this.dollyIn(this.getZoomScale());\n }\n this.update();\n });\n __publicField(this, \"handleKeyDown\", (event) => {\n let needsUpdate = false;\n switch (event.code) {\n case this.keys.UP:\n this.pan(0, this.keyPanSpeed);\n needsUpdate = true;\n break;\n case this.keys.BOTTOM:\n this.pan(0, -this.keyPanSpeed);\n needsUpdate = true;\n break;\n case this.keys.LEFT:\n this.pan(this.keyPanSpeed, 0);\n needsUpdate = true;\n break;\n case this.keys.RIGHT:\n this.pan(-this.keyPanSpeed, 0);\n needsUpdate = true;\n break;\n }\n if (needsUpdate) {\n event.preventDefault();\n this.update();\n }\n });\n __publicField(this, \"handleTouchStartRotate\", (event) => {\n if (event.touches.length == 1) {\n this.rotateStart.set(event.touches[0].pageX, event.touches[0].pageY);\n } else {\n const x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX);\n const y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY);\n this.rotateStart.set(x, y);\n }\n });\n __publicField(this, \"handleTouchStartPan\", (event) => {\n if (event.touches.length == 1) {\n this.panStart.set(event.touches[0].pageX, event.touches[0].pageY);\n } else {\n const x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX);\n const y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY);\n this.panStart.set(x, y);\n }\n });\n __publicField(this, \"handleTouchStartDolly\", (event) => {\n const dx = event.touches[0].pageX - event.touches[1].pageX;\n const dy = event.touches[0].pageY - event.touches[1].pageY;\n const distance = Math.sqrt(dx * dx + dy * dy);\n this.dollyStart.set(0, distance);\n });\n __publicField(this, \"handleTouchStartDollyPan\", (event) => {\n if (this.enableZoom)\n this.handleTouchStartDolly(event);\n if (this.enablePan)\n this.handleTouchStartPan(event);\n });\n __publicField(this, \"handleTouchStartDollyRotate\", (event) => {\n if (this.enableZoom)\n this.handleTouchStartDolly(event);\n if (this.enableRotate)\n this.handleTouchStartRotate(event);\n });\n __publicField(this, \"handleTouchMoveRotate\", (event) => {\n if (event.touches.length == 1) {\n this.rotateEnd.set(event.touches[0].pageX, event.touches[0].pageY);\n } else {\n const x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX);\n const y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY);\n this.rotateEnd.set(x, y);\n }\n this.rotateDelta.subVectors(this.rotateEnd, this.rotateStart).multiplyScalar(this.rotateSpeed);\n const element = this.domElement;\n this.rotateLeft(2 * Math.PI * this.rotateDelta.x / element.clientHeight);\n this.rotateUp(2 * Math.PI * this.rotateDelta.y / element.clientHeight);\n this.rotateStart.copy(this.rotateEnd);\n });\n __publicField(this, \"handleTouchMovePan\", (event) => {\n if (event.touches.length == 1) {\n this.panEnd.set(event.touches[0].pageX, event.touches[0].pageY);\n } else {\n const x = 0.5 * (event.touches[0].pageX + event.touches[1].pageX);\n const y = 0.5 * (event.touches[0].pageY + event.touches[1].pageY);\n this.panEnd.set(x, y);\n }\n this.panDelta.subVectors(this.panEnd, this.panStart).multiplyScalar(this.panSpeed);\n this.pan(this.panDelta.x, this.panDelta.y);\n this.panStart.copy(this.panEnd);\n });\n __publicField(this, \"handleTouchMoveDolly\", (event) => {\n const dx = event.touches[0].pageX - event.touches[1].pageX;\n const dy = event.touches[0].pageY - event.touches[1].pageY;\n const distance = Math.sqrt(dx * dx + dy * dy);\n this.dollyEnd.set(0, distance);\n this.dollyDelta.set(0, Math.pow(this.dollyEnd.y / this.dollyStart.y, this.zoomSpeed));\n this.dollyIn(this.dollyDelta.y);\n this.dollyStart.copy(this.dollyEnd);\n });\n __publicField(this, \"handleTouchMoveDollyPan\", (event) => {\n if (this.enableZoom)\n this.handleTouchMoveDolly(event);\n if (this.enablePan)\n this.handleTouchMovePan(event);\n });\n __publicField(this, \"handleTouchMoveDollyRotate\", (event) => {\n if (this.enableZoom)\n this.handleTouchMoveDolly(event);\n if (this.enableRotate)\n this.handleTouchMoveRotate(event);\n });\n //\n // event handlers - FSM: listen for events and reset state\n //\n __publicField(this, \"onMouseDown\", (event) => {\n if (this.enabled === false)\n return;\n event.preventDefault();\n this.domElement.focus ? this.domElement.focus() : window.focus();\n let mouseAction;\n switch (event.button) {\n case 0:\n mouseAction = this.mouseButtons.LEFT;\n break;\n case 1:\n mouseAction = this.mouseButtons.MIDDLE;\n break;\n case 2:\n mouseAction = this.mouseButtons.RIGHT;\n break;\n default:\n mouseAction = -1;\n }\n switch (mouseAction) {\n case MOUSE.DOLLY:\n if (this.enableZoom === false)\n return;\n this.handleMouseDownDolly(event);\n this.state = STATE.DOLLY;\n break;\n case MOUSE.ROTATE:\n if (event.ctrlKey || event.metaKey || event.shiftKey) {\n if (this.enablePan === false)\n return;\n this.handleMouseDownPan(event);\n this.state = STATE.PAN;\n } else {\n if (this.enableRotate === false)\n return;\n this.handleMouseDownRotate(event);\n this.state = STATE.ROTATE;\n }\n break;\n case MOUSE.PAN:\n if (event.ctrlKey || event.metaKey || event.shiftKey) {\n if (this.enableRotate === false)\n return;\n this.handleMouseDownRotate(event);\n this.state = STATE.ROTATE;\n } else {\n if (this.enablePan === false)\n return;\n this.handleMouseDownPan(event);\n this.state = STATE.PAN;\n }\n break;\n default:\n this.state = STATE.NONE;\n }\n if (this.state !== STATE.NONE) {\n document.addEventListener(\"mousemove\", this.onMouseMove, false);\n document.addEventListener(\"mouseup\", this.onMouseUp, false);\n this.dispatchEvent(this.startEvent);\n }\n });\n __publicField(this, \"onMouseMove\", (event) => {\n if (this.enabled === false)\n return;\n event.preventDefault();\n switch (this.state) {\n case STATE.ROTATE:\n if (this.enableRotate === false)\n return;\n this.handleMouseMoveRotate(event);\n break;\n case STATE.DOLLY:\n if (this.enableZoom === false)\n return;\n this.handleMouseMoveDolly(event);\n break;\n case STATE.PAN:\n if (this.enablePan === false)\n return;\n this.handleMouseMovePan(event);\n break;\n }\n });\n __publicField(this, \"onMouseUp\", () => {\n if (this.enabled === false)\n return;\n document.removeEventListener(\"mousemove\", this.onMouseMove, false);\n document.removeEventListener(\"mouseup\", this.onMouseUp, false);\n this.dispatchEvent(this.endEvent);\n this.state = STATE.NONE;\n });\n __publicField(this, \"onMouseWheel\", (event) => {\n if (this.enabled === false || this.enableZoom === false || this.state !== STATE.NONE && this.state !== STATE.ROTATE) {\n return;\n }\n event.preventDefault();\n this.dispatchEvent(this.startEvent);\n this.handleMouseWheel(event);\n this.dispatchEvent(this.endEvent);\n });\n __publicField(this, \"onKeyDown\", (event) => {\n if (this.enabled === false || this.enableKeys === false || this.enablePan === false)\n return;\n this.handleKeyDown(event);\n });\n __publicField(this, \"onTouchStart\", (event) => {\n if (this.enabled === false)\n return;\n event.preventDefault();\n switch (event.touches.length) {\n case 1:\n switch (this.touches.ONE) {\n case TOUCH.ROTATE:\n if (this.enableRotate === false)\n return;\n this.handleTouchStartRotate(event);\n this.state = STATE.TOUCH_ROTATE;\n break;\n case TOUCH.PAN:\n if (this.enablePan === false)\n return;\n this.handleTouchStartPan(event);\n this.state = STATE.TOUCH_PAN;\n break;\n default:\n this.state = STATE.NONE;\n }\n break;\n case 2:\n switch (this.touches.TWO) {\n case TOUCH.DOLLY_PAN:\n if (this.enableZoom === false && this.enablePan === false)\n return;\n this.handleTouchStartDollyPan(event);\n this.state = STATE.TOUCH_DOLLY_PAN;\n break;\n case TOUCH.DOLLY_ROTATE:\n if (this.enableZoom === false && this.enableRotate === false)\n return;\n this.handleTouchStartDollyRotate(event);\n this.state = STATE.TOUCH_DOLLY_ROTATE;\n break;\n default:\n this.state = STATE.NONE;\n }\n break;\n default:\n this.state = STATE.NONE;\n }\n if (this.state !== STATE.NONE) {\n this.dispatchEvent(this.startEvent);\n }\n });\n __publicField(this, \"onTouchMove\", (event) => {\n if (this.enabled === false)\n return;\n event.preventDefault();\n switch (this.state) {\n case STATE.TOUCH_ROTATE:\n if (this.enableRotate === false)\n return;\n this.handleTouchMoveRotate(event);\n this.update();\n break;\n case STATE.TOUCH_PAN:\n if (this.enablePan === false)\n return;\n this.handleTouchMovePan(event);\n this.update();\n break;\n case STATE.TOUCH_DOLLY_PAN:\n if (this.enableZoom === false && this.enablePan === false)\n return;\n this.handleTouchMoveDollyPan(event);\n this.update();\n break;\n case STATE.TOUCH_DOLLY_ROTATE:\n if (this.enableZoom === false && this.enableRotate === false)\n return;\n this.handleTouchMoveDollyRotate(event);\n this.update();\n break;\n default:\n this.state = STATE.NONE;\n }\n });\n __publicField(this, \"onTouchEnd\", () => {\n if (this.enabled === false)\n return;\n this.dispatchEvent(this.endEvent);\n this.state = STATE.NONE;\n });\n __publicField(this, \"onContextMenu\", (event) => {\n if (this.enabled === false)\n return;\n event.preventDefault();\n });\n if (domElement === void 0) {\n console.warn('THREE.CameraControls: The second parameter \"domElement\" is now mandatory.');\n }\n if (domElement instanceof Document) {\n console.error(\n 'THREE.CameraControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.'\n );\n }\n this.object = object;\n this.domElement = domElement;\n this.mouseButtons = {\n LEFT: MOUSE.ROTATE,\n MIDDLE: MOUSE.DOLLY,\n RIGHT: MOUSE.PAN\n };\n this.target0 = this.target.clone();\n this.position0 = this.object.position.clone();\n this.quaternion0 = this.object.quaternion.clone();\n this.zoom0 = this.object.zoom;\n this.quat = new Quaternion().setFromUnitVectors(this.object.up, new Vector3(0, 1, 0));\n this.quatInverse = this.quat.clone().invert();\n this.lastPosition = new Vector3();\n this.lastQuaternion = new Quaternion();\n this.domElement.addEventListener(\"contextmenu\", this.onContextMenu, false);\n this.domElement.addEventListener(\"mousedown\", this.onMouseDown, false);\n this.domElement.addEventListener(\"wheel\", this.onMouseWheel, false);\n this.domElement.addEventListener(\"touchstart\", this.onTouchStart, false);\n this.domElement.addEventListener(\"touchend\", this.onTouchEnd, false);\n this.domElement.addEventListener(\"touchmove\", this.onTouchMove, false);\n this.domElement.addEventListener(\"keydown\", this.onKeyDown, false);\n if (this.domElement.tabIndex === -1) {\n this.domElement.tabIndex = 0;\n }\n this.object.lookAt(this.target);\n this.update();\n this.saveState();\n }\n handleMouseUp() {\n }\n handleTouchEnd() {\n }\n}\nclass OrbitControlsExp extends CameraControls {\n constructor(object, domElement) {\n super(object, domElement);\n __publicField(this, \"mouseButtons\");\n __publicField(this, \"touches\");\n this.mouseButtons = {\n LEFT: MOUSE.ROTATE,\n RIGHT: MOUSE.PAN\n };\n this.touches = {\n ONE: TOUCH.ROTATE,\n TWO: TOUCH.DOLLY_PAN\n };\n }\n}\nclass MapControlsExp extends CameraControls {\n constructor(object, domElement) {\n super(object, domElement);\n __publicField(this, \"mouseButtons\");\n __publicField(this, \"touches\");\n this.mouseButtons = {\n LEFT: MOUSE.PAN,\n RIGHT: MOUSE.ROTATE\n };\n this.touches = {\n ONE: TOUCH.PAN,\n TWO: TOUCH.DOLLY_ROTATE\n };\n }\n}\nclass TrackballControlsExp extends CameraControls {\n constructor(object, domElement) {\n super(object, domElement);\n __publicField(this, \"trackball\");\n __publicField(this, \"screenSpacePanning\");\n __publicField(this, \"autoRotate\");\n __publicField(this, \"mouseButtons\");\n __publicField(this, \"touches\");\n this.trackball = true;\n this.screenSpacePanning = true;\n this.autoRotate = false;\n this.mouseButtons = {\n LEFT: MOUSE.ROTATE,\n RIGHT: MOUSE.PAN\n };\n this.touches = {\n ONE: TOUCH.ROTATE,\n TWO: TOUCH.DOLLY_PAN\n };\n }\n}\nexport {\n CameraControls,\n MapControlsExp,\n OrbitControlsExp,\n STATE,\n TrackballControlsExp\n};\n//# sourceMappingURL=CameraControls.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Vector3, Spherical, MathUtils } from \"three\";\nimport { EventDispatcher } from \"./EventDispatcher.js\";\nconst targetPosition = /* @__PURE__ */ new Vector3();\nclass FirstPersonControls extends EventDispatcher {\n constructor(object, domElement) {\n super();\n __publicField(this, \"object\");\n __publicField(this, \"domElement\");\n __publicField(this, \"enabled\", true);\n __publicField(this, \"movementSpeed\", 1);\n __publicField(this, \"lookSpeed\", 5e-3);\n __publicField(this, \"lookVertical\", true);\n __publicField(this, \"autoForward\", false);\n __publicField(this, \"activeLook\", true);\n __publicField(this, \"heightSpeed\", false);\n __publicField(this, \"heightCoef\", 1);\n __publicField(this, \"heightMin\", 0);\n __publicField(this, \"heightMax\", 1);\n __publicField(this, \"constrainVertical\", false);\n __publicField(this, \"verticalMin\", 0);\n __publicField(this, \"verticalMax\", Math.PI);\n __publicField(this, \"mouseDragOn\", false);\n // internals\n __publicField(this, \"autoSpeedFactor\", 0);\n __publicField(this, \"mouseX\", 0);\n __publicField(this, \"mouseY\", 0);\n __publicField(this, \"moveForward\", false);\n __publicField(this, \"moveBackward\", false);\n __publicField(this, \"moveLeft\", false);\n __publicField(this, \"moveRight\", false);\n __publicField(this, \"moveUp\", false);\n __publicField(this, \"moveDown\", false);\n __publicField(this, \"viewHalfX\", 0);\n __publicField(this, \"viewHalfY\", 0);\n __publicField(this, \"lat\", 0);\n __publicField(this, \"lon\", 0);\n __publicField(this, \"lookDirection\", new Vector3());\n __publicField(this, \"spherical\", new Spherical());\n __publicField(this, \"target\", new Vector3());\n __publicField(this, \"connect\", (domElement) => {\n domElement.setAttribute(\"tabindex\", \"-1\");\n domElement.style.touchAction = \"none\";\n domElement.addEventListener(\"contextmenu\", this.contextmenu);\n domElement.addEventListener(\"mousemove\", this.onMouseMove);\n domElement.addEventListener(\"mousedown\", this.onMouseDown);\n domElement.addEventListener(\"mouseup\", this.onMouseUp);\n this.domElement = domElement;\n window.addEventListener(\"keydown\", this.onKeyDown);\n window.addEventListener(\"keyup\", this.onKeyUp);\n this.handleResize();\n });\n __publicField(this, \"dispose\", () => {\n var _a, _b, _c, _d;\n (_a = this.domElement) == null ? void 0 : _a.removeEventListener(\"contextmenu\", this.contextmenu);\n (_b = this.domElement) == null ? void 0 : _b.removeEventListener(\"mousedown\", this.onMouseDown);\n (_c = this.domElement) == null ? void 0 : _c.removeEventListener(\"mousemove\", this.onMouseMove);\n (_d = this.domElement) == null ? void 0 : _d.removeEventListener(\"mouseup\", this.onMouseUp);\n window.removeEventListener(\"keydown\", this.onKeyDown);\n window.removeEventListener(\"keyup\", this.onKeyUp);\n });\n __publicField(this, \"handleResize\", () => {\n if (this.domElement) {\n this.viewHalfX = this.domElement.offsetWidth / 2;\n this.viewHalfY = this.domElement.offsetHeight / 2;\n }\n });\n __publicField(this, \"onMouseDown\", (event) => {\n var _a;\n (_a = this.domElement) == null ? void 0 : _a.focus();\n if (this.activeLook) {\n switch (event.button) {\n case 0:\n this.moveForward = true;\n break;\n case 2:\n this.moveBackward = true;\n break;\n }\n }\n this.mouseDragOn = true;\n });\n __publicField(this, \"onMouseUp\", (event) => {\n if (this.activeLook) {\n switch (event.button) {\n case 0:\n this.moveForward = false;\n break;\n case 2:\n this.moveBackward = false;\n break;\n }\n }\n this.mouseDragOn = false;\n });\n __publicField(this, \"onMouseMove\", (event) => {\n if (this.domElement) {\n this.mouseX = event.pageX - this.domElement.offsetLeft - this.viewHalfX;\n this.mouseY = event.pageY - this.domElement.offsetTop - this.viewHalfY;\n }\n });\n __publicField(this, \"onKeyDown\", (event) => {\n switch (event.code) {\n case \"ArrowUp\":\n case \"KeyW\":\n this.moveForward = true;\n break;\n case \"ArrowLeft\":\n case \"KeyA\":\n this.moveLeft = true;\n break;\n case \"ArrowDown\":\n case \"KeyS\":\n this.moveBackward = true;\n break;\n case \"ArrowRight\":\n case \"KeyD\":\n this.moveRight = true;\n break;\n case \"KeyR\":\n this.moveUp = true;\n break;\n case \"KeyF\":\n this.moveDown = true;\n break;\n }\n });\n __publicField(this, \"onKeyUp\", (event) => {\n switch (event.code) {\n case \"ArrowUp\":\n case \"KeyW\":\n this.moveForward = false;\n break;\n case \"ArrowLeft\":\n case \"KeyA\":\n this.moveLeft = false;\n break;\n case \"ArrowDown\":\n case \"KeyS\":\n this.moveBackward = false;\n break;\n case \"ArrowRight\":\n case \"KeyD\":\n this.moveRight = false;\n break;\n case \"KeyR\":\n this.moveUp = false;\n break;\n case \"KeyF\":\n this.moveDown = false;\n break;\n }\n });\n __publicField(this, \"lookAt\", (x, y, z) => {\n if (x instanceof Vector3) {\n this.target.copy(x);\n } else if (y && z) {\n this.target.set(x, y, z);\n }\n this.object.lookAt(this.target);\n this.setOrientation();\n return this;\n });\n __publicField(this, \"update\", (delta) => {\n if (!this.enabled)\n return;\n if (this.heightSpeed) {\n const y = MathUtils.clamp(this.object.position.y, this.heightMin, this.heightMax);\n const heightDelta = y - this.heightMin;\n this.autoSpeedFactor = delta * (heightDelta * this.heightCoef);\n } else {\n this.autoSpeedFactor = 0;\n }\n const actualMoveSpeed = delta * this.movementSpeed;\n if (this.moveForward || this.autoForward && !this.moveBackward) {\n this.object.translateZ(-(actualMoveSpeed + this.autoSpeedFactor));\n }\n if (this.moveBackward)\n this.object.translateZ(actualMoveSpeed);\n if (this.moveLeft)\n this.object.translateX(-actualMoveSpeed);\n if (this.moveRight)\n this.object.translateX(actualMoveSpeed);\n if (this.moveUp)\n this.object.translateY(actualMoveSpeed);\n if (this.moveDown)\n this.object.translateY(-actualMoveSpeed);\n let actualLookSpeed = delta * this.lookSpeed;\n if (!this.activeLook) {\n actualLookSpeed = 0;\n }\n let verticalLookRatio = 1;\n if (this.constrainVertical) {\n verticalLookRatio = Math.PI / (this.verticalMax - this.verticalMin);\n }\n this.lon -= this.mouseX * actualLookSpeed;\n if (this.lookVertical)\n this.lat -= this.mouseY * actualLookSpeed * verticalLookRatio;\n this.lat = Math.max(-85, Math.min(85, this.lat));\n let phi = MathUtils.degToRad(90 - this.lat);\n const theta = MathUtils.degToRad(this.lon);\n if (this.constrainVertical) {\n phi = MathUtils.mapLinear(phi, 0, Math.PI, this.verticalMin, this.verticalMax);\n }\n const position = this.object.position;\n targetPosition.setFromSphericalCoords(1, phi, theta).add(position);\n this.object.lookAt(targetPosition);\n });\n __publicField(this, \"contextmenu\", (event) => event.preventDefault());\n __publicField(this, \"setOrientation\", () => {\n this.lookDirection.set(0, 0, -1).applyQuaternion(this.object.quaternion);\n this.spherical.setFromVector3(this.lookDirection);\n this.lat = 90 - MathUtils.radToDeg(this.spherical.phi);\n this.lon = MathUtils.radToDeg(this.spherical.theta);\n });\n this.object = object;\n this.domElement = domElement;\n this.setOrientation();\n if (domElement)\n this.connect(domElement);\n }\n}\nexport {\n FirstPersonControls\n};\n//# sourceMappingURL=FirstPersonControls.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Object3D, Raycaster, Vector3, Quaternion, Euler, Matrix4, MeshBasicMaterial, DoubleSide, LineBasicMaterial, CylinderGeometry, BoxGeometry, BufferGeometry, Float32BufferAttribute, Mesh, Line, OctahedronGeometry, PlaneGeometry, TorusGeometry, SphereGeometry, Color } from \"three\";\nclass TransformControls extends Object3D {\n constructor(camera, domElement) {\n super();\n __publicField(this, \"isTransformControls\", true);\n __publicField(this, \"visible\", false);\n __publicField(this, \"domElement\");\n __publicField(this, \"raycaster\", new Raycaster());\n __publicField(this, \"gizmo\");\n __publicField(this, \"plane\");\n __publicField(this, \"tempVector\", new Vector3());\n __publicField(this, \"tempVector2\", new Vector3());\n __publicField(this, \"tempQuaternion\", new Quaternion());\n __publicField(this, \"unit\", {\n X: new Vector3(1, 0, 0),\n Y: new Vector3(0, 1, 0),\n Z: new Vector3(0, 0, 1)\n });\n __publicField(this, \"pointStart\", new Vector3());\n __publicField(this, \"pointEnd\", new Vector3());\n __publicField(this, \"offset\", new Vector3());\n __publicField(this, \"rotationAxis\", new Vector3());\n __publicField(this, \"startNorm\", new Vector3());\n __publicField(this, \"endNorm\", new Vector3());\n __publicField(this, \"rotationAngle\", 0);\n __publicField(this, \"cameraPosition\", new Vector3());\n __publicField(this, \"cameraQuaternion\", new Quaternion());\n __publicField(this, \"cameraScale\", new Vector3());\n __publicField(this, \"parentPosition\", new Vector3());\n __publicField(this, \"parentQuaternion\", new Quaternion());\n __publicField(this, \"parentQuaternionInv\", new Quaternion());\n __publicField(this, \"parentScale\", new Vector3());\n __publicField(this, \"worldPositionStart\", new Vector3());\n __publicField(this, \"worldQuaternionStart\", new Quaternion());\n __publicField(this, \"worldScaleStart\", new Vector3());\n __publicField(this, \"worldPosition\", new Vector3());\n __publicField(this, \"worldQuaternion\", new Quaternion());\n __publicField(this, \"worldQuaternionInv\", new Quaternion());\n __publicField(this, \"worldScale\", new Vector3());\n __publicField(this, \"eye\", new Vector3());\n __publicField(this, \"positionStart\", new Vector3());\n __publicField(this, \"quaternionStart\", new Quaternion());\n __publicField(this, \"scaleStart\", new Vector3());\n __publicField(this, \"camera\");\n __publicField(this, \"object\");\n __publicField(this, \"enabled\", true);\n __publicField(this, \"axis\", null);\n __publicField(this, \"mode\", \"translate\");\n __publicField(this, \"translationSnap\", null);\n __publicField(this, \"rotationSnap\", null);\n __publicField(this, \"scaleSnap\", null);\n __publicField(this, \"space\", \"world\");\n __publicField(this, \"size\", 1);\n __publicField(this, \"dragging\", false);\n __publicField(this, \"showX\", true);\n __publicField(this, \"showY\", true);\n __publicField(this, \"showZ\", true);\n // events\n __publicField(this, \"changeEvent\", { type: \"change\" });\n __publicField(this, \"mouseDownEvent\", { type: \"mouseDown\", mode: this.mode });\n __publicField(this, \"mouseUpEvent\", { type: \"mouseUp\", mode: this.mode });\n __publicField(this, \"objectChangeEvent\", { type: \"objectChange\" });\n __publicField(this, \"intersectObjectWithRay\", (object, raycaster, includeInvisible) => {\n const allIntersections = raycaster.intersectObject(object, true);\n for (let i = 0; i < allIntersections.length; i++) {\n if (allIntersections[i].object.visible || includeInvisible) {\n return allIntersections[i];\n }\n }\n return false;\n });\n // Set current object\n __publicField(this, \"attach\", (object) => {\n this.object = object;\n this.visible = true;\n return this;\n });\n // Detatch from object\n __publicField(this, \"detach\", () => {\n this.object = void 0;\n this.visible = false;\n this.axis = null;\n return this;\n });\n // Reset\n __publicField(this, \"reset\", () => {\n if (!this.enabled)\n return this;\n if (this.dragging) {\n if (this.object !== void 0) {\n this.object.position.copy(this.positionStart);\n this.object.quaternion.copy(this.quaternionStart);\n this.object.scale.copy(this.scaleStart);\n this.dispatchEvent(this.changeEvent);\n this.dispatchEvent(this.objectChangeEvent);\n this.pointStart.copy(this.pointEnd);\n }\n }\n return this;\n });\n __publicField(this, \"updateMatrixWorld\", () => {\n if (this.object !== void 0) {\n this.object.updateMatrixWorld();\n if (this.object.parent === null) {\n console.error(\"TransformControls: The attached 3D object must be a part of the scene graph.\");\n } else {\n this.object.parent.matrixWorld.decompose(this.parentPosition, this.parentQuaternion, this.parentScale);\n }\n this.object.matrixWorld.decompose(this.worldPosition, this.worldQuaternion, this.worldScale);\n this.parentQuaternionInv.copy(this.parentQuaternion).invert();\n this.worldQuaternionInv.copy(this.worldQuaternion).invert();\n }\n this.camera.updateMatrixWorld();\n this.camera.matrixWorld.decompose(this.cameraPosition, this.cameraQuaternion, this.cameraScale);\n this.eye.copy(this.cameraPosition).sub(this.worldPosition).normalize();\n super.updateMatrixWorld();\n });\n __publicField(this, \"pointerHover\", (pointer) => {\n if (this.object === void 0 || this.dragging === true)\n return;\n this.raycaster.setFromCamera(pointer, this.camera);\n const intersect = this.intersectObjectWithRay(this.gizmo.picker[this.mode], this.raycaster);\n if (intersect) {\n this.axis = intersect.object.name;\n } else {\n this.axis = null;\n }\n });\n __publicField(this, \"pointerDown\", (pointer) => {\n if (this.object === void 0 || this.dragging === true || pointer.button !== 0)\n return;\n if (this.axis !== null) {\n this.raycaster.setFromCamera(pointer, this.camera);\n const planeIntersect = this.intersectObjectWithRay(this.plane, this.raycaster, true);\n if (planeIntersect) {\n let space = this.space;\n if (this.mode === \"scale\") {\n space = \"local\";\n } else if (this.axis === \"E\" || this.axis === \"XYZE\" || this.axis === \"XYZ\") {\n space = \"world\";\n }\n if (space === \"local\" && this.mode === \"rotate\") {\n const snap = this.rotationSnap;\n if (this.axis === \"X\" && snap)\n this.object.rotation.x = Math.round(this.object.rotation.x / snap) * snap;\n if (this.axis === \"Y\" && snap)\n this.object.rotation.y = Math.round(this.object.rotation.y / snap) * snap;\n if (this.axis === \"Z\" && snap)\n this.object.rotation.z = Math.round(this.object.rotation.z / snap) * snap;\n }\n this.object.updateMatrixWorld();\n if (this.object.parent) {\n this.object.parent.updateMatrixWorld();\n }\n this.positionStart.copy(this.object.position);\n this.quaternionStart.copy(this.object.quaternion);\n this.scaleStart.copy(this.object.scale);\n this.object.matrixWorld.decompose(this.worldPositionStart, this.worldQuaternionStart, this.worldScaleStart);\n this.pointStart.copy(planeIntersect.point).sub(this.worldPositionStart);\n }\n this.dragging = true;\n this.mouseDownEvent.mode = this.mode;\n this.dispatchEvent(this.mouseDownEvent);\n }\n });\n __publicField(this, \"pointerMove\", (pointer) => {\n const axis = this.axis;\n const mode = this.mode;\n const object = this.object;\n let space = this.space;\n if (mode === \"scale\") {\n space = \"local\";\n } else if (axis === \"E\" || axis === \"XYZE\" || axis === \"XYZ\") {\n space = \"world\";\n }\n if (object === void 0 || axis === null || this.dragging === false || pointer.button !== -1)\n return;\n this.raycaster.setFromCamera(pointer, this.camera);\n const planeIntersect = this.intersectObjectWithRay(this.plane, this.raycaster, true);\n if (!planeIntersect)\n return;\n this.pointEnd.copy(planeIntersect.point).sub(this.worldPositionStart);\n if (mode === \"translate\") {\n this.offset.copy(this.pointEnd).sub(this.pointStart);\n if (space === \"local\" && axis !== \"XYZ\") {\n this.offset.applyQuaternion(this.worldQuaternionInv);\n }\n if (axis.indexOf(\"X\") === -1)\n this.offset.x = 0;\n if (axis.indexOf(\"Y\") === -1)\n this.offset.y = 0;\n if (axis.indexOf(\"Z\") === -1)\n this.offset.z = 0;\n if (space === \"local\" && axis !== \"XYZ\") {\n this.offset.applyQuaternion(this.quaternionStart).divide(this.parentScale);\n } else {\n this.offset.applyQuaternion(this.parentQuaternionInv).divide(this.parentScale);\n }\n object.position.copy(this.offset).add(this.positionStart);\n if (this.translationSnap) {\n if (space === \"local\") {\n object.position.applyQuaternion(this.tempQuaternion.copy(this.quaternionStart).invert());\n if (axis.search(\"X\") !== -1) {\n object.position.x = Math.round(object.position.x / this.translationSnap) * this.translationSnap;\n }\n if (axis.search(\"Y\") !== -1) {\n object.position.y = Math.round(object.position.y / this.translationSnap) * this.translationSnap;\n }\n if (axis.search(\"Z\") !== -1) {\n object.position.z = Math.round(object.position.z / this.translationSnap) * this.translationSnap;\n }\n object.position.applyQuaternion(this.quaternionStart);\n }\n if (space === \"world\") {\n if (object.parent) {\n object.position.add(this.tempVector.setFromMatrixPosition(object.parent.matrixWorld));\n }\n if (axis.search(\"X\") !== -1) {\n object.position.x = Math.round(object.position.x / this.translationSnap) * this.translationSnap;\n }\n if (axis.search(\"Y\") !== -1) {\n object.position.y = Math.round(object.position.y / this.translationSnap) * this.translationSnap;\n }\n if (axis.search(\"Z\") !== -1) {\n object.position.z = Math.round(object.position.z / this.translationSnap) * this.translationSnap;\n }\n if (object.parent) {\n object.position.sub(this.tempVector.setFromMatrixPosition(object.parent.matrixWorld));\n }\n }\n }\n } else if (mode === \"scale\") {\n if (axis.search(\"XYZ\") !== -1) {\n let d = this.pointEnd.length() / this.pointStart.length();\n if (this.pointEnd.dot(this.pointStart) < 0)\n d *= -1;\n this.tempVector2.set(d, d, d);\n } else {\n this.tempVector.copy(this.pointStart);\n this.tempVector2.copy(this.pointEnd);\n this.tempVector.applyQuaternion(this.worldQuaternionInv);\n this.tempVector2.applyQuaternion(this.worldQuaternionInv);\n this.tempVector2.divide(this.tempVector);\n if (axis.search(\"X\") === -1) {\n this.tempVector2.x = 1;\n }\n if (axis.search(\"Y\") === -1) {\n this.tempVector2.y = 1;\n }\n if (axis.search(\"Z\") === -1) {\n this.tempVector2.z = 1;\n }\n }\n object.scale.copy(this.scaleStart).multiply(this.tempVector2);\n if (this.scaleSnap && this.object) {\n if (axis.search(\"X\") !== -1) {\n this.object.scale.x = Math.round(object.scale.x / this.scaleSnap) * this.scaleSnap || this.scaleSnap;\n }\n if (axis.search(\"Y\") !== -1) {\n object.scale.y = Math.round(object.scale.y / this.scaleSnap) * this.scaleSnap || this.scaleSnap;\n }\n if (axis.search(\"Z\") !== -1) {\n object.scale.z = Math.round(object.scale.z / this.scaleSnap) * this.scaleSnap || this.scaleSnap;\n }\n }\n } else if (mode === \"rotate\") {\n this.offset.copy(this.pointEnd).sub(this.pointStart);\n const ROTATION_SPEED = 20 / this.worldPosition.distanceTo(this.tempVector.setFromMatrixPosition(this.camera.matrixWorld));\n if (axis === \"E\") {\n this.rotationAxis.copy(this.eye);\n this.rotationAngle = this.pointEnd.angleTo(this.pointStart);\n this.startNorm.copy(this.pointStart).normalize();\n this.endNorm.copy(this.pointEnd).normalize();\n this.rotationAngle *= this.endNorm.cross(this.startNorm).dot(this.eye) < 0 ? 1 : -1;\n } else if (axis === \"XYZE\") {\n this.rotationAxis.copy(this.offset).cross(this.eye).normalize();\n this.rotationAngle = this.offset.dot(this.tempVector.copy(this.rotationAxis).cross(this.eye)) * ROTATION_SPEED;\n } else if (axis === \"X\" || axis === \"Y\" || axis === \"Z\") {\n this.rotationAxis.copy(this.unit[axis]);\n this.tempVector.copy(this.unit[axis]);\n if (space === \"local\") {\n this.tempVector.applyQuaternion(this.worldQuaternion);\n }\n this.rotationAngle = this.offset.dot(this.tempVector.cross(this.eye).normalize()) * ROTATION_SPEED;\n }\n if (this.rotationSnap) {\n this.rotationAngle = Math.round(this.rotationAngle / this.rotationSnap) * this.rotationSnap;\n }\n if (space === \"local\" && axis !== \"E\" && axis !== \"XYZE\") {\n object.quaternion.copy(this.quaternionStart);\n object.quaternion.multiply(this.tempQuaternion.setFromAxisAngle(this.rotationAxis, this.rotationAngle)).normalize();\n } else {\n this.rotationAxis.applyQuaternion(this.parentQuaternionInv);\n object.quaternion.copy(this.tempQuaternion.setFromAxisAngle(this.rotationAxis, this.rotationAngle));\n object.quaternion.multiply(this.quaternionStart).normalize();\n }\n }\n this.dispatchEvent(this.changeEvent);\n this.dispatchEvent(this.objectChangeEvent);\n });\n __publicField(this, \"pointerUp\", (pointer) => {\n if (pointer.button !== 0)\n return;\n if (this.dragging && this.axis !== null) {\n this.mouseUpEvent.mode = this.mode;\n this.dispatchEvent(this.mouseUpEvent);\n }\n this.dragging = false;\n this.axis = null;\n });\n __publicField(this, \"getPointer\", (event) => {\n var _a;\n if (this.domElement && ((_a = this.domElement.ownerDocument) == null ? void 0 : _a.pointerLockElement)) {\n return {\n x: 0,\n y: 0,\n button: event.button\n };\n } else {\n const pointer = event.changedTouches ? event.changedTouches[0] : event;\n const rect = this.domElement.getBoundingClientRect();\n return {\n x: (pointer.clientX - rect.left) / rect.width * 2 - 1,\n y: -(pointer.clientY - rect.top) / rect.height * 2 + 1,\n button: event.button\n };\n }\n });\n __publicField(this, \"onPointerHover\", (event) => {\n if (!this.enabled)\n return;\n switch (event.pointerType) {\n case \"mouse\":\n case \"pen\":\n this.pointerHover(this.getPointer(event));\n break;\n }\n });\n __publicField(this, \"onPointerDown\", (event) => {\n if (!this.enabled || !this.domElement)\n return;\n this.domElement.style.touchAction = \"none\";\n this.domElement.ownerDocument.addEventListener(\"pointermove\", this.onPointerMove);\n this.pointerHover(this.getPointer(event));\n this.pointerDown(this.getPointer(event));\n });\n __publicField(this, \"onPointerMove\", (event) => {\n if (!this.enabled)\n return;\n this.pointerMove(this.getPointer(event));\n });\n __publicField(this, \"onPointerUp\", (event) => {\n if (!this.enabled || !this.domElement)\n return;\n this.domElement.style.touchAction = \"\";\n this.domElement.ownerDocument.removeEventListener(\"pointermove\", this.onPointerMove);\n this.pointerUp(this.getPointer(event));\n });\n __publicField(this, \"getMode\", () => this.mode);\n __publicField(this, \"setMode\", (mode) => {\n this.mode = mode;\n });\n __publicField(this, \"setTranslationSnap\", (translationSnap) => {\n this.translationSnap = translationSnap;\n });\n __publicField(this, \"setRotationSnap\", (rotationSnap) => {\n this.rotationSnap = rotationSnap;\n });\n __publicField(this, \"setScaleSnap\", (scaleSnap) => {\n this.scaleSnap = scaleSnap;\n });\n __publicField(this, \"setSize\", (size) => {\n this.size = size;\n });\n __publicField(this, \"setSpace\", (space) => {\n this.space = space;\n });\n __publicField(this, \"update\", () => {\n console.warn(\n \"THREE.TransformControls: update function has no more functionality and therefore has been deprecated.\"\n );\n });\n __publicField(this, \"connect\", (domElement) => {\n if (domElement === document) {\n console.error(\n 'THREE.OrbitControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.'\n );\n }\n this.domElement = domElement;\n this.domElement.addEventListener(\"pointerdown\", this.onPointerDown);\n this.domElement.addEventListener(\"pointermove\", this.onPointerHover);\n this.domElement.ownerDocument.addEventListener(\"pointerup\", this.onPointerUp);\n });\n __publicField(this, \"dispose\", () => {\n var _a, _b, _c, _d, _e, _f;\n (_a = this.domElement) == null ? void 0 : _a.removeEventListener(\"pointerdown\", this.onPointerDown);\n (_b = this.domElement) == null ? void 0 : _b.removeEventListener(\"pointermove\", this.onPointerHover);\n (_d = (_c = this.domElement) == null ? void 0 : _c.ownerDocument) == null ? void 0 : _d.removeEventListener(\"pointermove\", this.onPointerMove);\n (_f = (_e = this.domElement) == null ? void 0 : _e.ownerDocument) == null ? void 0 : _f.removeEventListener(\"pointerup\", this.onPointerUp);\n this.traverse((child) => {\n const mesh = child;\n if (mesh.geometry) {\n mesh.geometry.dispose();\n }\n if (mesh.material) {\n mesh.material.dispose();\n }\n });\n });\n this.domElement = domElement;\n this.camera = camera;\n this.gizmo = new TransformControlsGizmo();\n this.add(this.gizmo);\n this.plane = new TransformControlsPlane();\n this.add(this.plane);\n const defineProperty = (propName, defaultValue) => {\n let propValue = defaultValue;\n Object.defineProperty(this, propName, {\n get: function() {\n return propValue !== void 0 ? propValue : defaultValue;\n },\n set: function(value) {\n if (propValue !== value) {\n propValue = value;\n this.plane[propName] = value;\n this.gizmo[propName] = value;\n this.dispatchEvent({ type: propName + \"-changed\", value });\n this.dispatchEvent(this.changeEvent);\n }\n }\n });\n this[propName] = defaultValue;\n this.plane[propName] = defaultValue;\n this.gizmo[propName] = defaultValue;\n };\n defineProperty(\"camera\", this.camera);\n defineProperty(\"object\", this.object);\n defineProperty(\"enabled\", this.enabled);\n defineProperty(\"axis\", this.axis);\n defineProperty(\"mode\", this.mode);\n defineProperty(\"translationSnap\", this.translationSnap);\n defineProperty(\"rotationSnap\", this.rotationSnap);\n defineProperty(\"scaleSnap\", this.scaleSnap);\n defineProperty(\"space\", this.space);\n defineProperty(\"size\", this.size);\n defineProperty(\"dragging\", this.dragging);\n defineProperty(\"showX\", this.showX);\n defineProperty(\"showY\", this.showY);\n defineProperty(\"showZ\", this.showZ);\n defineProperty(\"worldPosition\", this.worldPosition);\n defineProperty(\"worldPositionStart\", this.worldPositionStart);\n defineProperty(\"worldQuaternion\", this.worldQuaternion);\n defineProperty(\"worldQuaternionStart\", this.worldQuaternionStart);\n defineProperty(\"cameraPosition\", this.cameraPosition);\n defineProperty(\"cameraQuaternion\", this.cameraQuaternion);\n defineProperty(\"pointStart\", this.pointStart);\n defineProperty(\"pointEnd\", this.pointEnd);\n defineProperty(\"rotationAxis\", this.rotationAxis);\n defineProperty(\"rotationAngle\", this.rotationAngle);\n defineProperty(\"eye\", this.eye);\n if (domElement !== void 0)\n this.connect(domElement);\n }\n}\nclass TransformControlsGizmo extends Object3D {\n constructor() {\n super();\n __publicField(this, \"isTransformControlsGizmo\", true);\n __publicField(this, \"type\", \"TransformControlsGizmo\");\n __publicField(this, \"tempVector\", new Vector3(0, 0, 0));\n __publicField(this, \"tempEuler\", new Euler());\n __publicField(this, \"alignVector\", new Vector3(0, 1, 0));\n __publicField(this, \"zeroVector\", new Vector3(0, 0, 0));\n __publicField(this, \"lookAtMatrix\", new Matrix4());\n __publicField(this, \"tempQuaternion\", new Quaternion());\n __publicField(this, \"tempQuaternion2\", new Quaternion());\n __publicField(this, \"identityQuaternion\", new Quaternion());\n __publicField(this, \"unitX\", new Vector3(1, 0, 0));\n __publicField(this, \"unitY\", new Vector3(0, 1, 0));\n __publicField(this, \"unitZ\", new Vector3(0, 0, 1));\n __publicField(this, \"gizmo\");\n __publicField(this, \"picker\");\n __publicField(this, \"helper\");\n // these are set from parent class TransformControls\n __publicField(this, \"rotationAxis\", new Vector3());\n __publicField(this, \"cameraPosition\", new Vector3());\n __publicField(this, \"worldPositionStart\", new Vector3());\n __publicField(this, \"worldQuaternionStart\", new Quaternion());\n __publicField(this, \"worldPosition\", new Vector3());\n __publicField(this, \"worldQuaternion\", new Quaternion());\n __publicField(this, \"eye\", new Vector3());\n __publicField(this, \"camera\", null);\n __publicField(this, \"enabled\", true);\n __publicField(this, \"axis\", null);\n __publicField(this, \"mode\", \"translate\");\n __publicField(this, \"space\", \"world\");\n __publicField(this, \"size\", 1);\n __publicField(this, \"dragging\", false);\n __publicField(this, \"showX\", true);\n __publicField(this, \"showY\", true);\n __publicField(this, \"showZ\", true);\n // updateMatrixWorld will update transformations and appearance of individual handles\n __publicField(this, \"updateMatrixWorld\", () => {\n let space = this.space;\n if (this.mode === \"scale\") {\n space = \"local\";\n }\n const quaternion = space === \"local\" ? this.worldQuaternion : this.identityQuaternion;\n this.gizmo[\"translate\"].visible = this.mode === \"translate\";\n this.gizmo[\"rotate\"].visible = this.mode === \"rotate\";\n this.gizmo[\"scale\"].visible = this.mode === \"scale\";\n this.helper[\"translate\"].visible = this.mode === \"translate\";\n this.helper[\"rotate\"].visible = this.mode === \"rotate\";\n this.helper[\"scale\"].visible = this.mode === \"scale\";\n let handles = [];\n handles = handles.concat(this.picker[this.mode].children);\n handles = handles.concat(this.gizmo[this.mode].children);\n handles = handles.concat(this.helper[this.mode].children);\n for (let i = 0; i < handles.length; i++) {\n const handle = handles[i];\n handle.visible = true;\n handle.rotation.set(0, 0, 0);\n handle.position.copy(this.worldPosition);\n let factor;\n if (this.camera.isOrthographicCamera) {\n factor = (this.camera.top - this.camera.bottom) / this.camera.zoom;\n } else {\n factor = this.worldPosition.distanceTo(this.cameraPosition) * Math.min(1.9 * Math.tan(Math.PI * this.camera.fov / 360) / this.camera.zoom, 7);\n }\n handle.scale.set(1, 1, 1).multiplyScalar(factor * this.size / 7);\n if (handle.tag === \"helper\") {\n handle.visible = false;\n if (handle.name === \"AXIS\") {\n handle.position.copy(this.worldPositionStart);\n handle.visible = !!this.axis;\n if (this.axis === \"X\") {\n this.tempQuaternion.setFromEuler(this.tempEuler.set(0, 0, 0));\n handle.quaternion.copy(quaternion).multiply(this.tempQuaternion);\n if (Math.abs(this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye)) > 0.9) {\n handle.visible = false;\n }\n }\n if (this.axis === \"Y\") {\n this.tempQuaternion.setFromEuler(this.tempEuler.set(0, 0, Math.PI / 2));\n handle.quaternion.copy(quaternion).multiply(this.tempQuaternion);\n if (Math.abs(this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye)) > 0.9) {\n handle.visible = false;\n }\n }\n if (this.axis === \"Z\") {\n this.tempQuaternion.setFromEuler(this.tempEuler.set(0, Math.PI / 2, 0));\n handle.quaternion.copy(quaternion).multiply(this.tempQuaternion);\n if (Math.abs(this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye)) > 0.9) {\n handle.visible = false;\n }\n }\n if (this.axis === \"XYZE\") {\n this.tempQuaternion.setFromEuler(this.tempEuler.set(0, Math.PI / 2, 0));\n this.alignVector.copy(this.rotationAxis);\n handle.quaternion.setFromRotationMatrix(\n this.lookAtMatrix.lookAt(this.zeroVector, this.alignVector, this.unitY)\n );\n handle.quaternion.multiply(this.tempQuaternion);\n handle.visible = this.dragging;\n }\n if (this.axis === \"E\") {\n handle.visible = false;\n }\n } else if (handle.name === \"START\") {\n handle.position.copy(this.worldPositionStart);\n handle.visible = this.dragging;\n } else if (handle.name === \"END\") {\n handle.position.copy(this.worldPosition);\n handle.visible = this.dragging;\n } else if (handle.name === \"DELTA\") {\n handle.position.copy(this.worldPositionStart);\n handle.quaternion.copy(this.worldQuaternionStart);\n this.tempVector.set(1e-10, 1e-10, 1e-10).add(this.worldPositionStart).sub(this.worldPosition).multiplyScalar(-1);\n this.tempVector.applyQuaternion(this.worldQuaternionStart.clone().invert());\n handle.scale.copy(this.tempVector);\n handle.visible = this.dragging;\n } else {\n handle.quaternion.copy(quaternion);\n if (this.dragging) {\n handle.position.copy(this.worldPositionStart);\n } else {\n handle.position.copy(this.worldPosition);\n }\n if (this.axis) {\n handle.visible = this.axis.search(handle.name) !== -1;\n }\n }\n continue;\n }\n handle.quaternion.copy(quaternion);\n if (this.mode === \"translate\" || this.mode === \"scale\") {\n const AXIS_HIDE_TRESHOLD = 0.99;\n const PLANE_HIDE_TRESHOLD = 0.2;\n const AXIS_FLIP_TRESHOLD = 0;\n if (handle.name === \"X\" || handle.name === \"XYZX\") {\n if (Math.abs(this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_TRESHOLD) {\n handle.scale.set(1e-10, 1e-10, 1e-10);\n handle.visible = false;\n }\n }\n if (handle.name === \"Y\" || handle.name === \"XYZY\") {\n if (Math.abs(this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_TRESHOLD) {\n handle.scale.set(1e-10, 1e-10, 1e-10);\n handle.visible = false;\n }\n }\n if (handle.name === \"Z\" || handle.name === \"XYZZ\") {\n if (Math.abs(this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye)) > AXIS_HIDE_TRESHOLD) {\n handle.scale.set(1e-10, 1e-10, 1e-10);\n handle.visible = false;\n }\n }\n if (handle.name === \"XY\") {\n if (Math.abs(this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_TRESHOLD) {\n handle.scale.set(1e-10, 1e-10, 1e-10);\n handle.visible = false;\n }\n }\n if (handle.name === \"YZ\") {\n if (Math.abs(this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_TRESHOLD) {\n handle.scale.set(1e-10, 1e-10, 1e-10);\n handle.visible = false;\n }\n }\n if (handle.name === \"XZ\") {\n if (Math.abs(this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye)) < PLANE_HIDE_TRESHOLD) {\n handle.scale.set(1e-10, 1e-10, 1e-10);\n handle.visible = false;\n }\n }\n if (handle.name.search(\"X\") !== -1) {\n if (this.alignVector.copy(this.unitX).applyQuaternion(quaternion).dot(this.eye) < AXIS_FLIP_TRESHOLD) {\n if (handle.tag === \"fwd\") {\n handle.visible = false;\n } else {\n handle.scale.x *= -1;\n }\n } else if (handle.tag === \"bwd\") {\n handle.visible = false;\n }\n }\n if (handle.name.search(\"Y\") !== -1) {\n if (this.alignVector.copy(this.unitY).applyQuaternion(quaternion).dot(this.eye) < AXIS_FLIP_TRESHOLD) {\n if (handle.tag === \"fwd\") {\n handle.visible = false;\n } else {\n handle.scale.y *= -1;\n }\n } else if (handle.tag === \"bwd\") {\n handle.visible = false;\n }\n }\n if (handle.name.search(\"Z\") !== -1) {\n if (this.alignVector.copy(this.unitZ).applyQuaternion(quaternion).dot(this.eye) < AXIS_FLIP_TRESHOLD) {\n if (handle.tag === \"fwd\") {\n handle.visible = false;\n } else {\n handle.scale.z *= -1;\n }\n } else if (handle.tag === \"bwd\") {\n handle.visible = false;\n }\n }\n } else if (this.mode === \"rotate\") {\n this.tempQuaternion2.copy(quaternion);\n this.alignVector.copy(this.eye).applyQuaternion(this.tempQuaternion.copy(quaternion).invert());\n if (handle.name.search(\"E\") !== -1) {\n handle.quaternion.setFromRotationMatrix(this.lookAtMatrix.lookAt(this.eye, this.zeroVector, this.unitY));\n }\n if (handle.name === \"X\") {\n this.tempQuaternion.setFromAxisAngle(this.unitX, Math.atan2(-this.alignVector.y, this.alignVector.z));\n this.tempQuaternion.multiplyQuaternions(this.tempQuaternion2, this.tempQuaternion);\n handle.quaternion.copy(this.tempQuaternion);\n }\n if (handle.name === \"Y\") {\n this.tempQuaternion.setFromAxisAngle(this.unitY, Math.atan2(this.alignVector.x, this.alignVector.z));\n this.tempQuaternion.multiplyQuaternions(this.tempQuaternion2, this.tempQuaternion);\n handle.quaternion.copy(this.tempQuaternion);\n }\n if (handle.name === \"Z\") {\n this.tempQuaternion.setFromAxisAngle(this.unitZ, Math.atan2(this.alignVector.y, this.alignVector.x));\n this.tempQuaternion.multiplyQuaternions(this.tempQuaternion2, this.tempQuaternion);\n handle.quaternion.copy(this.tempQuaternion);\n }\n }\n handle.visible = handle.visible && (handle.name.indexOf(\"X\") === -1 || this.showX);\n handle.visible = handle.visible && (handle.name.indexOf(\"Y\") === -1 || this.showY);\n handle.visible = handle.visible && (handle.name.indexOf(\"Z\") === -1 || this.showZ);\n handle.visible = handle.visible && (handle.name.indexOf(\"E\") === -1 || this.showX && this.showY && this.showZ);\n handle.material.tempOpacity = handle.material.tempOpacity || handle.material.opacity;\n handle.material.tempColor = handle.material.tempColor || handle.material.color.clone();\n handle.material.color.copy(handle.material.tempColor);\n handle.material.opacity = handle.material.tempOpacity;\n if (!this.enabled) {\n handle.material.opacity *= 0.5;\n handle.material.color.lerp(new Color(1, 1, 1), 0.5);\n } else if (this.axis) {\n if (handle.name === this.axis) {\n handle.material.opacity = 1;\n handle.material.color.lerp(new Color(1, 1, 1), 0.5);\n } else if (this.axis.split(\"\").some(function(a) {\n return handle.name === a;\n })) {\n handle.material.opacity = 1;\n handle.material.color.lerp(new Color(1, 1, 1), 0.5);\n } else {\n handle.material.opacity *= 0.25;\n handle.material.color.lerp(new Color(1, 1, 1), 0.5);\n }\n }\n }\n super.updateMatrixWorld();\n });\n const gizmoMaterial = new MeshBasicMaterial({\n depthTest: false,\n depthWrite: false,\n transparent: true,\n side: DoubleSide,\n fog: false,\n toneMapped: false\n });\n const gizmoLineMaterial = new LineBasicMaterial({\n depthTest: false,\n depthWrite: false,\n transparent: true,\n linewidth: 1,\n fog: false,\n toneMapped: false\n });\n const matInvisible = gizmoMaterial.clone();\n matInvisible.opacity = 0.15;\n const matHelper = gizmoMaterial.clone();\n matHelper.opacity = 0.33;\n const matRed = gizmoMaterial.clone();\n matRed.color.set(16711680);\n const matGreen = gizmoMaterial.clone();\n matGreen.color.set(65280);\n const matBlue = gizmoMaterial.clone();\n matBlue.color.set(255);\n const matWhiteTransparent = gizmoMaterial.clone();\n matWhiteTransparent.opacity = 0.25;\n const matYellowTransparent = matWhiteTransparent.clone();\n matYellowTransparent.color.set(16776960);\n const matCyanTransparent = matWhiteTransparent.clone();\n matCyanTransparent.color.set(65535);\n const matMagentaTransparent = matWhiteTransparent.clone();\n matMagentaTransparent.color.set(16711935);\n const matYellow = gizmoMaterial.clone();\n matYellow.color.set(16776960);\n const matLineRed = gizmoLineMaterial.clone();\n matLineRed.color.set(16711680);\n const matLineGreen = gizmoLineMaterial.clone();\n matLineGreen.color.set(65280);\n const matLineBlue = gizmoLineMaterial.clone();\n matLineBlue.color.set(255);\n const matLineCyan = gizmoLineMaterial.clone();\n matLineCyan.color.set(65535);\n const matLineMagenta = gizmoLineMaterial.clone();\n matLineMagenta.color.set(16711935);\n const matLineYellow = gizmoLineMaterial.clone();\n matLineYellow.color.set(16776960);\n const matLineGray = gizmoLineMaterial.clone();\n matLineGray.color.set(7895160);\n const matLineYellowTransparent = matLineYellow.clone();\n matLineYellowTransparent.opacity = 0.25;\n const arrowGeometry = new CylinderGeometry(0, 0.05, 0.2, 12, 1, false);\n const scaleHandleGeometry = new BoxGeometry(0.125, 0.125, 0.125);\n const lineGeometry = new BufferGeometry();\n lineGeometry.setAttribute(\"position\", new Float32BufferAttribute([0, 0, 0, 1, 0, 0], 3));\n const CircleGeometry = (radius, arc) => {\n const geometry = new BufferGeometry();\n const vertices = [];\n for (let i = 0; i <= 64 * arc; ++i) {\n vertices.push(0, Math.cos(i / 32 * Math.PI) * radius, Math.sin(i / 32 * Math.PI) * radius);\n }\n geometry.setAttribute(\"position\", new Float32BufferAttribute(vertices, 3));\n return geometry;\n };\n const TranslateHelperGeometry = () => {\n const geometry = new BufferGeometry();\n geometry.setAttribute(\"position\", new Float32BufferAttribute([0, 0, 0, 1, 1, 1], 3));\n return geometry;\n };\n const gizmoTranslate = {\n X: [\n [new Mesh(arrowGeometry, matRed), [1, 0, 0], [0, 0, -Math.PI / 2], null, \"fwd\"],\n [new Mesh(arrowGeometry, matRed), [1, 0, 0], [0, 0, Math.PI / 2], null, \"bwd\"],\n [new Line(lineGeometry, matLineRed)]\n ],\n Y: [\n [new Mesh(arrowGeometry, matGreen), [0, 1, 0], null, null, \"fwd\"],\n [new Mesh(arrowGeometry, matGreen), [0, 1, 0], [Math.PI, 0, 0], null, \"bwd\"],\n [new Line(lineGeometry, matLineGreen), null, [0, 0, Math.PI / 2]]\n ],\n Z: [\n [new Mesh(arrowGeometry, matBlue), [0, 0, 1], [Math.PI / 2, 0, 0], null, \"fwd\"],\n [new Mesh(arrowGeometry, matBlue), [0, 0, 1], [-Math.PI / 2, 0, 0], null, \"bwd\"],\n [new Line(lineGeometry, matLineBlue), null, [0, -Math.PI / 2, 0]]\n ],\n XYZ: [[new Mesh(new OctahedronGeometry(0.1, 0), matWhiteTransparent.clone()), [0, 0, 0], [0, 0, 0]]],\n XY: [\n [new Mesh(new PlaneGeometry(0.295, 0.295), matYellowTransparent.clone()), [0.15, 0.15, 0]],\n [new Line(lineGeometry, matLineYellow), [0.18, 0.3, 0], null, [0.125, 1, 1]],\n [new Line(lineGeometry, matLineYellow), [0.3, 0.18, 0], [0, 0, Math.PI / 2], [0.125, 1, 1]]\n ],\n YZ: [\n [new Mesh(new PlaneGeometry(0.295, 0.295), matCyanTransparent.clone()), [0, 0.15, 0.15], [0, Math.PI / 2, 0]],\n [new Line(lineGeometry, matLineCyan), [0, 0.18, 0.3], [0, 0, Math.PI / 2], [0.125, 1, 1]],\n [new Line(lineGeometry, matLineCyan), [0, 0.3, 0.18], [0, -Math.PI / 2, 0], [0.125, 1, 1]]\n ],\n XZ: [\n [\n new Mesh(new PlaneGeometry(0.295, 0.295), matMagentaTransparent.clone()),\n [0.15, 0, 0.15],\n [-Math.PI / 2, 0, 0]\n ],\n [new Line(lineGeometry, matLineMagenta), [0.18, 0, 0.3], null, [0.125, 1, 1]],\n [new Line(lineGeometry, matLineMagenta), [0.3, 0, 0.18], [0, -Math.PI / 2, 0], [0.125, 1, 1]]\n ]\n };\n const pickerTranslate = {\n X: [[new Mesh(new CylinderGeometry(0.2, 0, 1, 4, 1, false), matInvisible), [0.6, 0, 0], [0, 0, -Math.PI / 2]]],\n Y: [[new Mesh(new CylinderGeometry(0.2, 0, 1, 4, 1, false), matInvisible), [0, 0.6, 0]]],\n Z: [[new Mesh(new CylinderGeometry(0.2, 0, 1, 4, 1, false), matInvisible), [0, 0, 0.6], [Math.PI / 2, 0, 0]]],\n XYZ: [[new Mesh(new OctahedronGeometry(0.2, 0), matInvisible)]],\n XY: [[new Mesh(new PlaneGeometry(0.4, 0.4), matInvisible), [0.2, 0.2, 0]]],\n YZ: [[new Mesh(new PlaneGeometry(0.4, 0.4), matInvisible), [0, 0.2, 0.2], [0, Math.PI / 2, 0]]],\n XZ: [[new Mesh(new PlaneGeometry(0.4, 0.4), matInvisible), [0.2, 0, 0.2], [-Math.PI / 2, 0, 0]]]\n };\n const helperTranslate = {\n START: [[new Mesh(new OctahedronGeometry(0.01, 2), matHelper), null, null, null, \"helper\"]],\n END: [[new Mesh(new OctahedronGeometry(0.01, 2), matHelper), null, null, null, \"helper\"]],\n DELTA: [[new Line(TranslateHelperGeometry(), matHelper), null, null, null, \"helper\"]],\n X: [[new Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], \"helper\"]],\n Y: [[new Line(lineGeometry, matHelper.clone()), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], \"helper\"]],\n Z: [[new Line(lineGeometry, matHelper.clone()), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], \"helper\"]]\n };\n const gizmoRotate = {\n X: [\n [new Line(CircleGeometry(1, 0.5), matLineRed)],\n [new Mesh(new OctahedronGeometry(0.04, 0), matRed), [0, 0, 0.99], null, [1, 3, 1]]\n ],\n Y: [\n [new Line(CircleGeometry(1, 0.5), matLineGreen), null, [0, 0, -Math.PI / 2]],\n [new Mesh(new OctahedronGeometry(0.04, 0), matGreen), [0, 0, 0.99], null, [3, 1, 1]]\n ],\n Z: [\n [new Line(CircleGeometry(1, 0.5), matLineBlue), null, [0, Math.PI / 2, 0]],\n [new Mesh(new OctahedronGeometry(0.04, 0), matBlue), [0.99, 0, 0], null, [1, 3, 1]]\n ],\n E: [\n [new Line(CircleGeometry(1.25, 1), matLineYellowTransparent), null, [0, Math.PI / 2, 0]],\n [\n new Mesh(new CylinderGeometry(0.03, 0, 0.15, 4, 1, false), matLineYellowTransparent),\n [1.17, 0, 0],\n [0, 0, -Math.PI / 2],\n [1, 1, 1e-3]\n ],\n [\n new Mesh(new CylinderGeometry(0.03, 0, 0.15, 4, 1, false), matLineYellowTransparent),\n [-1.17, 0, 0],\n [0, 0, Math.PI / 2],\n [1, 1, 1e-3]\n ],\n [\n new Mesh(new CylinderGeometry(0.03, 0, 0.15, 4, 1, false), matLineYellowTransparent),\n [0, -1.17, 0],\n [Math.PI, 0, 0],\n [1, 1, 1e-3]\n ],\n [\n new Mesh(new CylinderGeometry(0.03, 0, 0.15, 4, 1, false), matLineYellowTransparent),\n [0, 1.17, 0],\n [0, 0, 0],\n [1, 1, 1e-3]\n ]\n ],\n XYZE: [[new Line(CircleGeometry(1, 1), matLineGray), null, [0, Math.PI / 2, 0]]]\n };\n const helperRotate = {\n AXIS: [[new Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], \"helper\"]]\n };\n const pickerRotate = {\n X: [[new Mesh(new TorusGeometry(1, 0.1, 4, 24), matInvisible), [0, 0, 0], [0, -Math.PI / 2, -Math.PI / 2]]],\n Y: [[new Mesh(new TorusGeometry(1, 0.1, 4, 24), matInvisible), [0, 0, 0], [Math.PI / 2, 0, 0]]],\n Z: [[new Mesh(new TorusGeometry(1, 0.1, 4, 24), matInvisible), [0, 0, 0], [0, 0, -Math.PI / 2]]],\n E: [[new Mesh(new TorusGeometry(1.25, 0.1, 2, 24), matInvisible)]],\n XYZE: [[new Mesh(new SphereGeometry(0.7, 10, 8), matInvisible)]]\n };\n const gizmoScale = {\n X: [\n [new Mesh(scaleHandleGeometry, matRed), [0.8, 0, 0], [0, 0, -Math.PI / 2]],\n [new Line(lineGeometry, matLineRed), null, null, [0.8, 1, 1]]\n ],\n Y: [\n [new Mesh(scaleHandleGeometry, matGreen), [0, 0.8, 0]],\n [new Line(lineGeometry, matLineGreen), null, [0, 0, Math.PI / 2], [0.8, 1, 1]]\n ],\n Z: [\n [new Mesh(scaleHandleGeometry, matBlue), [0, 0, 0.8], [Math.PI / 2, 0, 0]],\n [new Line(lineGeometry, matLineBlue), null, [0, -Math.PI / 2, 0], [0.8, 1, 1]]\n ],\n XY: [\n [new Mesh(scaleHandleGeometry, matYellowTransparent), [0.85, 0.85, 0], null, [2, 2, 0.2]],\n [new Line(lineGeometry, matLineYellow), [0.855, 0.98, 0], null, [0.125, 1, 1]],\n [new Line(lineGeometry, matLineYellow), [0.98, 0.855, 0], [0, 0, Math.PI / 2], [0.125, 1, 1]]\n ],\n YZ: [\n [new Mesh(scaleHandleGeometry, matCyanTransparent), [0, 0.85, 0.85], null, [0.2, 2, 2]],\n [new Line(lineGeometry, matLineCyan), [0, 0.855, 0.98], [0, 0, Math.PI / 2], [0.125, 1, 1]],\n [new Line(lineGeometry, matLineCyan), [0, 0.98, 0.855], [0, -Math.PI / 2, 0], [0.125, 1, 1]]\n ],\n XZ: [\n [new Mesh(scaleHandleGeometry, matMagentaTransparent), [0.85, 0, 0.85], null, [2, 0.2, 2]],\n [new Line(lineGeometry, matLineMagenta), [0.855, 0, 0.98], null, [0.125, 1, 1]],\n [new Line(lineGeometry, matLineMagenta), [0.98, 0, 0.855], [0, -Math.PI / 2, 0], [0.125, 1, 1]]\n ],\n XYZX: [[new Mesh(new BoxGeometry(0.125, 0.125, 0.125), matWhiteTransparent.clone()), [1.1, 0, 0]]],\n XYZY: [[new Mesh(new BoxGeometry(0.125, 0.125, 0.125), matWhiteTransparent.clone()), [0, 1.1, 0]]],\n XYZZ: [[new Mesh(new BoxGeometry(0.125, 0.125, 0.125), matWhiteTransparent.clone()), [0, 0, 1.1]]]\n };\n const pickerScale = {\n X: [[new Mesh(new CylinderGeometry(0.2, 0, 0.8, 4, 1, false), matInvisible), [0.5, 0, 0], [0, 0, -Math.PI / 2]]],\n Y: [[new Mesh(new CylinderGeometry(0.2, 0, 0.8, 4, 1, false), matInvisible), [0, 0.5, 0]]],\n Z: [[new Mesh(new CylinderGeometry(0.2, 0, 0.8, 4, 1, false), matInvisible), [0, 0, 0.5], [Math.PI / 2, 0, 0]]],\n XY: [[new Mesh(scaleHandleGeometry, matInvisible), [0.85, 0.85, 0], null, [3, 3, 0.2]]],\n YZ: [[new Mesh(scaleHandleGeometry, matInvisible), [0, 0.85, 0.85], null, [0.2, 3, 3]]],\n XZ: [[new Mesh(scaleHandleGeometry, matInvisible), [0.85, 0, 0.85], null, [3, 0.2, 3]]],\n XYZX: [[new Mesh(new BoxGeometry(0.2, 0.2, 0.2), matInvisible), [1.1, 0, 0]]],\n XYZY: [[new Mesh(new BoxGeometry(0.2, 0.2, 0.2), matInvisible), [0, 1.1, 0]]],\n XYZZ: [[new Mesh(new BoxGeometry(0.2, 0.2, 0.2), matInvisible), [0, 0, 1.1]]]\n };\n const helperScale = {\n X: [[new Line(lineGeometry, matHelper.clone()), [-1e3, 0, 0], null, [1e6, 1, 1], \"helper\"]],\n Y: [[new Line(lineGeometry, matHelper.clone()), [0, -1e3, 0], [0, 0, Math.PI / 2], [1e6, 1, 1], \"helper\"]],\n Z: [[new Line(lineGeometry, matHelper.clone()), [0, 0, -1e3], [0, -Math.PI / 2, 0], [1e6, 1, 1], \"helper\"]]\n };\n const setupGizmo = (gizmoMap) => {\n const gizmo = new Object3D();\n for (let name in gizmoMap) {\n for (let i = gizmoMap[name].length; i--; ) {\n const object = gizmoMap[name][i][0].clone();\n const position = gizmoMap[name][i][1];\n const rotation = gizmoMap[name][i][2];\n const scale = gizmoMap[name][i][3];\n const tag = gizmoMap[name][i][4];\n object.name = name;\n object.tag = tag;\n if (position) {\n object.position.set(position[0], position[1], position[2]);\n }\n if (rotation) {\n object.rotation.set(rotation[0], rotation[1], rotation[2]);\n }\n if (scale) {\n object.scale.set(scale[0], scale[1], scale[2]);\n }\n object.updateMatrix();\n const tempGeometry = object.geometry.clone();\n tempGeometry.applyMatrix4(object.matrix);\n object.geometry = tempGeometry;\n object.renderOrder = Infinity;\n object.position.set(0, 0, 0);\n object.rotation.set(0, 0, 0);\n object.scale.set(1, 1, 1);\n gizmo.add(object);\n }\n }\n return gizmo;\n };\n this.gizmo = {};\n this.picker = {};\n this.helper = {};\n this.add(this.gizmo[\"translate\"] = setupGizmo(gizmoTranslate));\n this.add(this.gizmo[\"rotate\"] = setupGizmo(gizmoRotate));\n this.add(this.gizmo[\"scale\"] = setupGizmo(gizmoScale));\n this.add(this.picker[\"translate\"] = setupGizmo(pickerTranslate));\n this.add(this.picker[\"rotate\"] = setupGizmo(pickerRotate));\n this.add(this.picker[\"scale\"] = setupGizmo(pickerScale));\n this.add(this.helper[\"translate\"] = setupGizmo(helperTranslate));\n this.add(this.helper[\"rotate\"] = setupGizmo(helperRotate));\n this.add(this.helper[\"scale\"] = setupGizmo(helperScale));\n this.picker[\"translate\"].visible = false;\n this.picker[\"rotate\"].visible = false;\n this.picker[\"scale\"].visible = false;\n }\n}\nclass TransformControlsPlane extends Mesh {\n constructor() {\n super(\n new PlaneGeometry(1e5, 1e5, 2, 2),\n new MeshBasicMaterial({\n visible: false,\n wireframe: true,\n side: DoubleSide,\n transparent: true,\n opacity: 0.1,\n toneMapped: false\n })\n );\n __publicField(this, \"isTransformControlsPlane\", true);\n __publicField(this, \"type\", \"TransformControlsPlane\");\n __publicField(this, \"unitX\", new Vector3(1, 0, 0));\n __publicField(this, \"unitY\", new Vector3(0, 1, 0));\n __publicField(this, \"unitZ\", new Vector3(0, 0, 1));\n __publicField(this, \"tempVector\", new Vector3());\n __publicField(this, \"dirVector\", new Vector3());\n __publicField(this, \"alignVector\", new Vector3());\n __publicField(this, \"tempMatrix\", new Matrix4());\n __publicField(this, \"identityQuaternion\", new Quaternion());\n // these are set from parent class TransformControls\n __publicField(this, \"cameraQuaternion\", new Quaternion());\n __publicField(this, \"worldPosition\", new Vector3());\n __publicField(this, \"worldQuaternion\", new Quaternion());\n __publicField(this, \"eye\", new Vector3());\n __publicField(this, \"axis\", null);\n __publicField(this, \"mode\", \"translate\");\n __publicField(this, \"space\", \"world\");\n __publicField(this, \"updateMatrixWorld\", () => {\n let space = this.space;\n this.position.copy(this.worldPosition);\n if (this.mode === \"scale\")\n space = \"local\";\n this.unitX.set(1, 0, 0).applyQuaternion(space === \"local\" ? this.worldQuaternion : this.identityQuaternion);\n this.unitY.set(0, 1, 0).applyQuaternion(space === \"local\" ? this.worldQuaternion : this.identityQuaternion);\n this.unitZ.set(0, 0, 1).applyQuaternion(space === \"local\" ? this.worldQuaternion : this.identityQuaternion);\n this.alignVector.copy(this.unitY);\n switch (this.mode) {\n case \"translate\":\n case \"scale\":\n switch (this.axis) {\n case \"X\":\n this.alignVector.copy(this.eye).cross(this.unitX);\n this.dirVector.copy(this.unitX).cross(this.alignVector);\n break;\n case \"Y\":\n this.alignVector.copy(this.eye).cross(this.unitY);\n this.dirVector.copy(this.unitY).cross(this.alignVector);\n break;\n case \"Z\":\n this.alignVector.copy(this.eye).cross(this.unitZ);\n this.dirVector.copy(this.unitZ).cross(this.alignVector);\n break;\n case \"XY\":\n this.dirVector.copy(this.unitZ);\n break;\n case \"YZ\":\n this.dirVector.copy(this.unitX);\n break;\n case \"XZ\":\n this.alignVector.copy(this.unitZ);\n this.dirVector.copy(this.unitY);\n break;\n case \"XYZ\":\n case \"E\":\n this.dirVector.set(0, 0, 0);\n break;\n }\n break;\n case \"rotate\":\n default:\n this.dirVector.set(0, 0, 0);\n }\n if (this.dirVector.length() === 0) {\n this.quaternion.copy(this.cameraQuaternion);\n } else {\n this.tempMatrix.lookAt(this.tempVector.set(0, 0, 0), this.dirVector, this.alignVector);\n this.quaternion.setFromRotationMatrix(this.tempMatrix);\n }\n super.updateMatrixWorld();\n });\n }\n}\nexport {\n TransformControls,\n TransformControlsGizmo,\n TransformControlsPlane\n};\n//# sourceMappingURL=TransformControls.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Plane, Raycaster, Vector2, Vector3, Matrix4 } from \"three\";\nimport { EventDispatcher } from \"./EventDispatcher.js\";\nclass DragControls extends EventDispatcher {\n constructor(_objects, _camera, _domElement) {\n super();\n __publicField(this, \"enabled\", true);\n __publicField(this, \"transformGroup\", false);\n __publicField(this, \"_objects\");\n __publicField(this, \"_camera\");\n __publicField(this, \"_domElement\");\n __publicField(this, \"_plane\", new Plane());\n __publicField(this, \"_raycaster\", new Raycaster());\n __publicField(this, \"_mouse\", new Vector2());\n __publicField(this, \"_offset\", new Vector3());\n __publicField(this, \"_intersection\", new Vector3());\n __publicField(this, \"_worldPosition\", new Vector3());\n __publicField(this, \"_inverseMatrix\", new Matrix4());\n __publicField(this, \"_intersections\", []);\n __publicField(this, \"_selected\", null);\n __publicField(this, \"_hovered\", null);\n __publicField(this, \"activate\", () => {\n this._domElement.addEventListener(\"pointermove\", this.onPointerMove);\n this._domElement.addEventListener(\"pointerdown\", this.onPointerDown);\n this._domElement.addEventListener(\"pointerup\", this.onPointerCancel);\n this._domElement.addEventListener(\"pointerleave\", this.onPointerCancel);\n this._domElement.addEventListener(\"touchmove\", this.onTouchMove);\n this._domElement.addEventListener(\"touchstart\", this.onTouchStart);\n this._domElement.addEventListener(\"touchend\", this.onTouchEnd);\n });\n __publicField(this, \"deactivate\", () => {\n this._domElement.removeEventListener(\"pointermove\", this.onPointerMove);\n this._domElement.removeEventListener(\"pointerdown\", this.onPointerDown);\n this._domElement.removeEventListener(\"pointerup\", this.onPointerCancel);\n this._domElement.removeEventListener(\"pointerleave\", this.onPointerCancel);\n this._domElement.removeEventListener(\"touchmove\", this.onTouchMove);\n this._domElement.removeEventListener(\"touchstart\", this.onTouchStart);\n this._domElement.removeEventListener(\"touchend\", this.onTouchEnd);\n this._domElement.style.cursor = \"\";\n });\n // TODO: confirm if this can be removed?\n __publicField(this, \"dispose\", () => this.deactivate());\n __publicField(this, \"getObjects\", () => this._objects);\n __publicField(this, \"getRaycaster\", () => this._raycaster);\n __publicField(this, \"onMouseMove\", (event) => {\n const rect = this._domElement.getBoundingClientRect();\n this._mouse.x = (event.clientX - rect.left) / rect.width * 2 - 1;\n this._mouse.y = -((event.clientY - rect.top) / rect.height) * 2 + 1;\n this._raycaster.setFromCamera(this._mouse, this._camera);\n if (this._selected && this.enabled) {\n if (this._raycaster.ray.intersectPlane(this._plane, this._intersection)) {\n this._selected.position.copy(this._intersection.sub(this._offset).applyMatrix4(this._inverseMatrix));\n }\n this.dispatchEvent({ type: \"drag\", object: this._selected });\n return;\n }\n this._intersections.length = 0;\n this._raycaster.setFromCamera(this._mouse, this._camera);\n this._raycaster.intersectObjects(this._objects, true, this._intersections);\n if (this._intersections.length > 0) {\n const object = this._intersections[0].object;\n this._plane.setFromNormalAndCoplanarPoint(\n this._camera.getWorldDirection(this._plane.normal),\n this._worldPosition.setFromMatrixPosition(object.matrixWorld)\n );\n if (this._hovered !== object) {\n this.dispatchEvent({ type: \"hoveron\", object });\n this._domElement.style.cursor = \"pointer\";\n this._hovered = object;\n }\n } else {\n if (this._hovered !== null) {\n this.dispatchEvent({ type: \"hoveroff\", object: this._hovered });\n this._domElement.style.cursor = \"auto\";\n this._hovered = null;\n }\n }\n });\n __publicField(this, \"onMouseDown\", () => {\n this._intersections.length = 0;\n this._raycaster.setFromCamera(this._mouse, this._camera);\n this._raycaster.intersectObjects(this._objects, true, this._intersections);\n if (this._intersections.length > 0) {\n this._selected = this.transformGroup === true ? this._objects[0] : this._intersections[0].object;\n if (this._raycaster.ray.intersectPlane(this._plane, this._intersection) && this._selected.parent) {\n this._inverseMatrix.copy(this._selected.parent.matrixWorld).invert();\n this._offset.copy(this._intersection).sub(this._worldPosition.setFromMatrixPosition(this._selected.matrixWorld));\n }\n this._domElement.style.cursor = \"move\";\n this.dispatchEvent({ type: \"dragstart\", object: this._selected });\n }\n });\n __publicField(this, \"onMouseCancel\", () => {\n if (this._selected) {\n this.dispatchEvent({ type: \"dragend\", object: this._selected });\n this._selected = null;\n }\n this._domElement.style.cursor = this._hovered ? \"pointer\" : \"auto\";\n });\n __publicField(this, \"onPointerMove\", (event) => {\n switch (event.pointerType) {\n case \"mouse\":\n case \"pen\":\n this.onMouseMove(event);\n break;\n }\n });\n __publicField(this, \"onPointerDown\", (event) => {\n switch (event.pointerType) {\n case \"mouse\":\n case \"pen\":\n this.onMouseDown();\n break;\n }\n });\n __publicField(this, \"onPointerCancel\", (event) => {\n switch (event.pointerType) {\n case \"mouse\":\n case \"pen\":\n this.onMouseCancel();\n break;\n }\n });\n __publicField(this, \"onTouchMove\", (event) => {\n event.preventDefault();\n const newEvent = event.changedTouches[0];\n const rect = this._domElement.getBoundingClientRect();\n this._mouse.x = (newEvent.clientX - rect.left) / rect.width * 2 - 1;\n this._mouse.y = -((newEvent.clientY - rect.top) / rect.height) * 2 + 1;\n this._raycaster.setFromCamera(this._mouse, this._camera);\n if (this._selected && this.enabled) {\n if (this._raycaster.ray.intersectPlane(this._plane, this._intersection)) {\n this._selected.position.copy(this._intersection.sub(this._offset).applyMatrix4(this._inverseMatrix));\n }\n this.dispatchEvent({ type: \"drag\", object: this._selected });\n return;\n }\n });\n __publicField(this, \"onTouchStart\", (event) => {\n event.preventDefault();\n const newEvent = event.changedTouches[0];\n const rect = this._domElement.getBoundingClientRect();\n this._mouse.x = (newEvent.clientX - rect.left) / rect.width * 2 - 1;\n this._mouse.y = -((newEvent.clientY - rect.top) / rect.height) * 2 + 1;\n this._intersections.length = 0;\n this._raycaster.setFromCamera(this._mouse, this._camera);\n this._raycaster.intersectObjects(this._objects, true, this._intersections);\n if (this._intersections.length > 0) {\n this._selected = this.transformGroup === true ? this._objects[0] : this._intersections[0].object;\n this._plane.setFromNormalAndCoplanarPoint(\n this._camera.getWorldDirection(this._plane.normal),\n this._worldPosition.setFromMatrixPosition(this._selected.matrixWorld)\n );\n if (this._raycaster.ray.intersectPlane(this._plane, this._intersection) && this._selected.parent) {\n this._inverseMatrix.copy(this._selected.parent.matrixWorld).invert();\n this._offset.copy(this._intersection).sub(this._worldPosition.setFromMatrixPosition(this._selected.matrixWorld));\n }\n this._domElement.style.cursor = \"move\";\n this.dispatchEvent({ type: \"dragstart\", object: this._selected });\n }\n });\n __publicField(this, \"onTouchEnd\", (event) => {\n event.preventDefault();\n if (this._selected) {\n this.dispatchEvent({ type: \"dragend\", object: this._selected });\n this._selected = null;\n }\n this._domElement.style.cursor = \"auto\";\n });\n this._objects = _objects;\n this._camera = _camera;\n this._domElement = _domElement;\n this.activate();\n }\n}\nexport {\n DragControls\n};\n//# sourceMappingURL=DragControls.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Vector3, Euler } from \"three\";\nimport { EventDispatcher } from \"./EventDispatcher.js\";\nconst _euler = /* @__PURE__ */ new Euler(0, 0, 0, \"YXZ\");\nconst _vector = /* @__PURE__ */ new Vector3();\nconst _changeEvent = { type: \"change\" };\nconst _lockEvent = { type: \"lock\" };\nconst _unlockEvent = { type: \"unlock\" };\nconst _MOUSE_SENSITIVITY = 2e-3;\nconst _PI_2 = Math.PI / 2;\nclass PointerLockControls extends EventDispatcher {\n constructor(camera, domElement) {\n super();\n __publicField(this, \"camera\");\n __publicField(this, \"domElement\");\n __publicField(this, \"isLocked\");\n __publicField(this, \"minPolarAngle\");\n __publicField(this, \"maxPolarAngle\");\n __publicField(this, \"pointerSpeed\");\n __publicField(this, \"onMouseMove\", (event) => {\n if (!this.domElement || this.isLocked === false)\n return;\n _euler.setFromQuaternion(this.camera.quaternion);\n _euler.y -= event.movementX * _MOUSE_SENSITIVITY * this.pointerSpeed;\n _euler.x -= event.movementY * _MOUSE_SENSITIVITY * this.pointerSpeed;\n _euler.x = Math.max(_PI_2 - this.maxPolarAngle, Math.min(_PI_2 - this.minPolarAngle, _euler.x));\n this.camera.quaternion.setFromEuler(_euler);\n this.dispatchEvent(_changeEvent);\n });\n __publicField(this, \"onPointerlockChange\", () => {\n if (!this.domElement)\n return;\n if (this.domElement.ownerDocument.pointerLockElement === this.domElement) {\n this.dispatchEvent(_lockEvent);\n this.isLocked = true;\n } else {\n this.dispatchEvent(_unlockEvent);\n this.isLocked = false;\n }\n });\n __publicField(this, \"onPointerlockError\", () => {\n console.error(\"THREE.PointerLockControls: Unable to use Pointer Lock API\");\n });\n __publicField(this, \"connect\", (domElement) => {\n this.domElement = domElement || this.domElement;\n if (!this.domElement)\n return;\n this.domElement.ownerDocument.addEventListener(\"mousemove\", this.onMouseMove);\n this.domElement.ownerDocument.addEventListener(\"pointerlockchange\", this.onPointerlockChange);\n this.domElement.ownerDocument.addEventListener(\"pointerlockerror\", this.onPointerlockError);\n });\n __publicField(this, \"disconnect\", () => {\n if (!this.domElement)\n return;\n this.domElement.ownerDocument.removeEventListener(\"mousemove\", this.onMouseMove);\n this.domElement.ownerDocument.removeEventListener(\"pointerlockchange\", this.onPointerlockChange);\n this.domElement.ownerDocument.removeEventListener(\"pointerlockerror\", this.onPointerlockError);\n });\n __publicField(this, \"dispose\", () => {\n this.disconnect();\n });\n __publicField(this, \"getObject\", () => {\n return this.camera;\n });\n __publicField(this, \"direction\", new Vector3(0, 0, -1));\n __publicField(this, \"getDirection\", (v) => {\n return v.copy(this.direction).applyQuaternion(this.camera.quaternion);\n });\n __publicField(this, \"moveForward\", (distance) => {\n _vector.setFromMatrixColumn(this.camera.matrix, 0);\n _vector.crossVectors(this.camera.up, _vector);\n this.camera.position.addScaledVector(_vector, distance);\n });\n __publicField(this, \"moveRight\", (distance) => {\n _vector.setFromMatrixColumn(this.camera.matrix, 0);\n this.camera.position.addScaledVector(_vector, distance);\n });\n __publicField(this, \"lock\", () => {\n if (this.domElement)\n this.domElement.requestPointerLock();\n });\n __publicField(this, \"unlock\", () => {\n if (this.domElement)\n this.domElement.ownerDocument.exitPointerLock();\n });\n this.camera = camera;\n this.domElement = domElement;\n this.isLocked = false;\n this.minPolarAngle = 0;\n this.maxPolarAngle = Math.PI;\n this.pointerSpeed = 1;\n if (domElement)\n this.connect(domElement);\n }\n}\nexport {\n PointerLockControls\n};\n//# sourceMappingURL=PointerLockControls.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Vector3, Euler, Quaternion, MathUtils } from \"three\";\nimport { EventDispatcher } from \"./EventDispatcher.js\";\nclass DeviceOrientationControls extends EventDispatcher {\n // radians\n constructor(object) {\n super();\n __publicField(this, \"object\");\n __publicField(this, \"changeEvent\", { type: \"change\" });\n __publicField(this, \"EPS\", 1e-6);\n __publicField(this, \"enabled\", true);\n __publicField(this, \"deviceOrientation\", { alpha: 0, beta: 0, gamma: 0 });\n __publicField(this, \"screenOrientation\", 0);\n __publicField(this, \"alphaOffset\", 0);\n __publicField(this, \"onDeviceOrientationChangeEvent\", (event) => {\n this.deviceOrientation = event;\n });\n __publicField(this, \"onScreenOrientationChangeEvent\", () => {\n this.screenOrientation = window.orientation || 0;\n });\n // The angles alpha, beta and gamma form a set of intrinsic Tait-Bryan angles of type Z-X'-Y''\n __publicField(this, \"zee\", new Vector3(0, 0, 1));\n __publicField(this, \"euler\", new Euler());\n __publicField(this, \"q0\", new Quaternion());\n __publicField(this, \"q1\", new Quaternion(-Math.sqrt(0.5), 0, 0, Math.sqrt(0.5)));\n // - PI/2 around the x-axis\n __publicField(this, \"setObjectQuaternion\", (quaternion, alpha, beta, gamma, orient) => {\n this.euler.set(beta, alpha, -gamma, \"YXZ\");\n quaternion.setFromEuler(this.euler);\n quaternion.multiply(this.q1);\n quaternion.multiply(this.q0.setFromAxisAngle(this.zee, -orient));\n });\n __publicField(this, \"connect\", () => {\n this.onScreenOrientationChangeEvent();\n if (window.DeviceOrientationEvent !== void 0 && // @ts-ignore\n typeof window.DeviceOrientationEvent.requestPermission === \"function\") {\n window.DeviceOrientationEvent.requestPermission().then((response) => {\n if (response == \"granted\") {\n window.addEventListener(\"orientationchange\", this.onScreenOrientationChangeEvent);\n window.addEventListener(\"deviceorientation\", this.onDeviceOrientationChangeEvent);\n }\n }).catch((error) => {\n console.error(\"THREE.DeviceOrientationControls: Unable to use DeviceOrientation API:\", error);\n });\n } else {\n window.addEventListener(\"orientationchange\", this.onScreenOrientationChangeEvent);\n window.addEventListener(\"deviceorientation\", this.onDeviceOrientationChangeEvent);\n }\n this.enabled = true;\n });\n __publicField(this, \"disconnect\", () => {\n window.removeEventListener(\"orientationchange\", this.onScreenOrientationChangeEvent);\n window.removeEventListener(\"deviceorientation\", this.onDeviceOrientationChangeEvent);\n this.enabled = false;\n });\n __publicField(this, \"lastQuaternion\", new Quaternion());\n __publicField(this, \"update\", () => {\n if (this.enabled === false)\n return;\n const device = this.deviceOrientation;\n if (device) {\n const alpha = device.alpha ? MathUtils.degToRad(device.alpha) + this.alphaOffset : 0;\n const beta = device.beta ? MathUtils.degToRad(device.beta) : 0;\n const gamma = device.gamma ? MathUtils.degToRad(device.gamma) : 0;\n const orient = this.screenOrientation ? MathUtils.degToRad(this.screenOrientation) : 0;\n this.setObjectQuaternion(this.object.quaternion, alpha, beta, gamma, orient);\n if (8 * (1 - this.lastQuaternion.dot(this.object.quaternion)) > this.EPS) {\n this.lastQuaternion.copy(this.object.quaternion);\n this.dispatchEvent(this.changeEvent);\n }\n }\n });\n __publicField(this, \"dispose\", () => this.disconnect());\n this.object = object;\n this.object.rotation.reorder(\"YXZ\");\n this.connect();\n }\n}\nexport {\n DeviceOrientationControls\n};\n//# sourceMappingURL=DeviceOrientationControls.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { MOUSE, Vector3, Vector2, Quaternion } from \"three\";\nimport { EventDispatcher } from \"./EventDispatcher.js\";\nclass TrackballControls extends EventDispatcher {\n constructor(object, domElement) {\n super();\n __publicField(this, \"enabled\", true);\n __publicField(this, \"screen\", { left: 0, top: 0, width: 0, height: 0 });\n __publicField(this, \"rotateSpeed\", 1);\n __publicField(this, \"zoomSpeed\", 1.2);\n __publicField(this, \"panSpeed\", 0.3);\n __publicField(this, \"noRotate\", false);\n __publicField(this, \"noZoom\", false);\n __publicField(this, \"noPan\", false);\n __publicField(this, \"staticMoving\", false);\n __publicField(this, \"dynamicDampingFactor\", 0.2);\n __publicField(this, \"minDistance\", 0);\n __publicField(this, \"maxDistance\", Infinity);\n __publicField(this, \"keys\", [\n \"KeyA\",\n \"KeyS\",\n \"KeyD\"\n /*D*/\n ]);\n __publicField(this, \"mouseButtons\", {\n LEFT: MOUSE.ROTATE,\n MIDDLE: MOUSE.DOLLY,\n RIGHT: MOUSE.PAN\n });\n __publicField(this, \"object\");\n __publicField(this, \"domElement\");\n __publicField(this, \"cursorZoom\", false);\n __publicField(this, \"target\", new Vector3());\n __publicField(this, \"mousePosition\", new Vector2());\n // internals\n __publicField(this, \"STATE\", {\n NONE: -1,\n ROTATE: 0,\n ZOOM: 1,\n PAN: 2,\n TOUCH_ROTATE: 3,\n TOUCH_ZOOM_PAN: 4\n });\n __publicField(this, \"EPS\", 1e-6);\n __publicField(this, \"lastZoom\", 1);\n __publicField(this, \"lastPosition\", new Vector3());\n __publicField(this, \"cursorVector\", new Vector3());\n __publicField(this, \"targetVector\", new Vector3());\n __publicField(this, \"_state\", this.STATE.NONE);\n __publicField(this, \"_keyState\", this.STATE.NONE);\n __publicField(this, \"_eye\", new Vector3());\n __publicField(this, \"_movePrev\", new Vector2());\n __publicField(this, \"_moveCurr\", new Vector2());\n __publicField(this, \"_lastAxis\", new Vector3());\n __publicField(this, \"_lastAngle\", 0);\n __publicField(this, \"_zoomStart\", new Vector2());\n __publicField(this, \"_zoomEnd\", new Vector2());\n __publicField(this, \"_touchZoomDistanceStart\", 0);\n __publicField(this, \"_touchZoomDistanceEnd\", 0);\n __publicField(this, \"_panStart\", new Vector2());\n __publicField(this, \"_panEnd\", new Vector2());\n __publicField(this, \"target0\");\n __publicField(this, \"position0\");\n __publicField(this, \"up0\");\n __publicField(this, \"zoom0\");\n // events\n __publicField(this, \"changeEvent\", { type: \"change\" });\n __publicField(this, \"startEvent\", { type: \"start\" });\n __publicField(this, \"endEvent\", { type: \"end\" });\n __publicField(this, \"onScreenVector\", new Vector2());\n __publicField(this, \"getMouseOnScreen\", (pageX, pageY) => {\n this.onScreenVector.set(\n (pageX - this.screen.left) / this.screen.width,\n (pageY - this.screen.top) / this.screen.height\n );\n return this.onScreenVector;\n });\n __publicField(this, \"onCircleVector\", new Vector2());\n __publicField(this, \"getMouseOnCircle\", (pageX, pageY) => {\n this.onCircleVector.set(\n (pageX - this.screen.width * 0.5 - this.screen.left) / (this.screen.width * 0.5),\n (this.screen.height + 2 * (this.screen.top - pageY)) / this.screen.width\n // screen.width intentional\n );\n return this.onCircleVector;\n });\n __publicField(this, \"axis\", new Vector3());\n __publicField(this, \"quaternion\", new Quaternion());\n __publicField(this, \"eyeDirection\", new Vector3());\n __publicField(this, \"objectUpDirection\", new Vector3());\n __publicField(this, \"objectSidewaysDirection\", new Vector3());\n __publicField(this, \"moveDirection\", new Vector3());\n __publicField(this, \"angle\", 0);\n __publicField(this, \"rotateCamera\", () => {\n this.moveDirection.set(this._moveCurr.x - this._movePrev.x, this._moveCurr.y - this._movePrev.y, 0);\n this.angle = this.moveDirection.length();\n if (this.angle) {\n this._eye.copy(this.object.position).sub(this.target);\n this.eyeDirection.copy(this._eye).normalize();\n this.objectUpDirection.copy(this.object.up).normalize();\n this.objectSidewaysDirection.crossVectors(this.objectUpDirection, this.eyeDirection).normalize();\n this.objectUpDirection.setLength(this._moveCurr.y - this._movePrev.y);\n this.objectSidewaysDirection.setLength(this._moveCurr.x - this._movePrev.x);\n this.moveDirection.copy(this.objectUpDirection.add(this.objectSidewaysDirection));\n this.axis.crossVectors(this.moveDirection, this._eye).normalize();\n this.angle *= this.rotateSpeed;\n this.quaternion.setFromAxisAngle(this.axis, this.angle);\n this._eye.applyQuaternion(this.quaternion);\n this.object.up.applyQuaternion(this.quaternion);\n this._lastAxis.copy(this.axis);\n this._lastAngle = this.angle;\n } else if (!this.staticMoving && this._lastAngle) {\n this._lastAngle *= Math.sqrt(1 - this.dynamicDampingFactor);\n this._eye.copy(this.object.position).sub(this.target);\n this.quaternion.setFromAxisAngle(this._lastAxis, this._lastAngle);\n this._eye.applyQuaternion(this.quaternion);\n this.object.up.applyQuaternion(this.quaternion);\n }\n this._movePrev.copy(this._moveCurr);\n });\n __publicField(this, \"zoomCamera\", () => {\n let factor;\n if (this._state === this.STATE.TOUCH_ZOOM_PAN) {\n factor = this._touchZoomDistanceStart / this._touchZoomDistanceEnd;\n this._touchZoomDistanceStart = this._touchZoomDistanceEnd;\n if (this.object.isPerspectiveCamera) {\n this._eye.multiplyScalar(factor);\n } else if (this.object.isOrthographicCamera) {\n this.object.zoom /= factor;\n this.object.updateProjectionMatrix();\n } else {\n console.warn(\"THREE.TrackballControls: Unsupported camera type\");\n }\n } else {\n factor = 1 + (this._zoomEnd.y - this._zoomStart.y) * this.zoomSpeed;\n if (Math.abs(factor - 1) > this.EPS && factor > 0) {\n if (this.object.isPerspectiveCamera) {\n if (factor > 1 && this._eye.length() >= this.maxDistance - this.EPS) {\n factor = 1;\n }\n this._eye.multiplyScalar(factor);\n } else if (this.object.isOrthographicCamera) {\n if (factor > 1 && this.object.zoom < this.maxDistance * this.maxDistance) {\n factor = 1;\n }\n this.object.zoom /= factor;\n } else {\n console.warn(\"THREE.TrackballControls: Unsupported camera type\");\n }\n }\n if (this.staticMoving) {\n this._zoomStart.copy(this._zoomEnd);\n } else {\n this._zoomStart.y += (this._zoomEnd.y - this._zoomStart.y) * this.dynamicDampingFactor;\n }\n if (this.cursorZoom) {\n this.targetVector.copy(this.target).project(this.object);\n let worldPos = this.cursorVector.set(this.mousePosition.x, this.mousePosition.y, this.targetVector.z).unproject(this.object);\n this.target.lerpVectors(worldPos, this.target, factor);\n }\n if (this.object.isOrthographicCamera) {\n this.object.updateProjectionMatrix();\n }\n }\n });\n __publicField(this, \"mouseChange\", new Vector2());\n __publicField(this, \"objectUp\", new Vector3());\n __publicField(this, \"pan\", new Vector3());\n __publicField(this, \"panCamera\", () => {\n if (!this.domElement)\n return;\n this.mouseChange.copy(this._panEnd).sub(this._panStart);\n if (this.mouseChange.lengthSq() > this.EPS) {\n if (this.object.isOrthographicCamera) {\n const orthoObject = this.object;\n const scale_x = (orthoObject.right - orthoObject.left) / this.object.zoom;\n const scale_y = (orthoObject.top - orthoObject.bottom) / this.object.zoom;\n this.mouseChange.x *= scale_x;\n this.mouseChange.y *= scale_y;\n } else {\n this.mouseChange.multiplyScalar(this._eye.length() * this.panSpeed);\n }\n this.pan.copy(this._eye).cross(this.object.up).setLength(this.mouseChange.x);\n this.pan.add(this.objectUp.copy(this.object.up).setLength(this.mouseChange.y));\n this.object.position.add(this.pan);\n this.target.add(this.pan);\n if (this.staticMoving) {\n this._panStart.copy(this._panEnd);\n } else {\n this._panStart.add(\n this.mouseChange.subVectors(this._panEnd, this._panStart).multiplyScalar(this.dynamicDampingFactor)\n );\n }\n }\n });\n __publicField(this, \"checkDistances\", () => {\n if (!this.noZoom || !this.noPan) {\n if (this._eye.lengthSq() > this.maxDistance * this.maxDistance) {\n this.object.position.addVectors(this.target, this._eye.setLength(this.maxDistance));\n this._zoomStart.copy(this._zoomEnd);\n }\n if (this._eye.lengthSq() < this.minDistance * this.minDistance) {\n this.object.position.addVectors(this.target, this._eye.setLength(this.minDistance));\n this._zoomStart.copy(this._zoomEnd);\n }\n }\n });\n __publicField(this, \"handleResize\", () => {\n if (!this.domElement)\n return;\n const box = this.domElement.getBoundingClientRect();\n const d = this.domElement.ownerDocument.documentElement;\n this.screen.left = box.left + window.pageXOffset - d.clientLeft;\n this.screen.top = box.top + window.pageYOffset - d.clientTop;\n this.screen.width = box.width;\n this.screen.height = box.height;\n });\n __publicField(this, \"update\", () => {\n this._eye.subVectors(this.object.position, this.target);\n if (!this.noRotate) {\n this.rotateCamera();\n }\n if (!this.noZoom) {\n this.zoomCamera();\n }\n if (!this.noPan) {\n this.panCamera();\n }\n this.object.position.addVectors(this.target, this._eye);\n if (this.object.isPerspectiveCamera) {\n this.checkDistances();\n this.object.lookAt(this.target);\n if (this.lastPosition.distanceToSquared(this.object.position) > this.EPS) {\n this.dispatchEvent(this.changeEvent);\n this.lastPosition.copy(this.object.position);\n }\n } else if (this.object.isOrthographicCamera) {\n this.object.lookAt(this.target);\n if (this.lastPosition.distanceToSquared(this.object.position) > this.EPS || this.lastZoom !== this.object.zoom) {\n this.dispatchEvent(this.changeEvent);\n this.lastPosition.copy(this.object.position);\n this.lastZoom = this.object.zoom;\n }\n } else {\n console.warn(\"THREE.TrackballControls: Unsupported camera type\");\n }\n });\n __publicField(this, \"reset\", () => {\n this._state = this.STATE.NONE;\n this._keyState = this.STATE.NONE;\n this.target.copy(this.target0);\n this.object.position.copy(this.position0);\n this.object.up.copy(this.up0);\n this.object.zoom = this.zoom0;\n this.object.updateProjectionMatrix();\n this._eye.subVectors(this.object.position, this.target);\n this.object.lookAt(this.target);\n this.dispatchEvent(this.changeEvent);\n this.lastPosition.copy(this.object.position);\n this.lastZoom = this.object.zoom;\n });\n __publicField(this, \"keydown\", (event) => {\n if (this.enabled === false)\n return;\n window.removeEventListener(\"keydown\", this.keydown);\n if (this._keyState !== this.STATE.NONE) {\n return;\n } else if (event.code === this.keys[this.STATE.ROTATE] && !this.noRotate) {\n this._keyState = this.STATE.ROTATE;\n } else if (event.code === this.keys[this.STATE.ZOOM] && !this.noZoom) {\n this._keyState = this.STATE.ZOOM;\n } else if (event.code === this.keys[this.STATE.PAN] && !this.noPan) {\n this._keyState = this.STATE.PAN;\n }\n });\n __publicField(this, \"onPointerDown\", (event) => {\n if (this.enabled === false)\n return;\n switch (event.pointerType) {\n case \"mouse\":\n case \"pen\":\n this.onMouseDown(event);\n break;\n }\n });\n __publicField(this, \"onPointerMove\", (event) => {\n if (this.enabled === false)\n return;\n switch (event.pointerType) {\n case \"mouse\":\n case \"pen\":\n this.onMouseMove(event);\n break;\n }\n });\n __publicField(this, \"onPointerUp\", (event) => {\n if (this.enabled === false)\n return;\n switch (event.pointerType) {\n case \"mouse\":\n case \"pen\":\n this.onMouseUp();\n break;\n }\n });\n __publicField(this, \"keyup\", () => {\n if (this.enabled === false)\n return;\n this._keyState = this.STATE.NONE;\n window.addEventListener(\"keydown\", this.keydown);\n });\n __publicField(this, \"onMouseDown\", (event) => {\n if (!this.domElement)\n return;\n if (this._state === this.STATE.NONE) {\n switch (event.button) {\n case this.mouseButtons.LEFT:\n this._state = this.STATE.ROTATE;\n break;\n case this.mouseButtons.MIDDLE:\n this._state = this.STATE.ZOOM;\n break;\n case this.mouseButtons.RIGHT:\n this._state = this.STATE.PAN;\n break;\n }\n }\n const state = this._keyState !== this.STATE.NONE ? this._keyState : this._state;\n if (state === this.STATE.ROTATE && !this.noRotate) {\n this._moveCurr.copy(this.getMouseOnCircle(event.pageX, event.pageY));\n this._movePrev.copy(this._moveCurr);\n } else if (state === this.STATE.ZOOM && !this.noZoom) {\n this._zoomStart.copy(this.getMouseOnScreen(event.pageX, event.pageY));\n this._zoomEnd.copy(this._zoomStart);\n } else if (state === this.STATE.PAN && !this.noPan) {\n this._panStart.copy(this.getMouseOnScreen(event.pageX, event.pageY));\n this._panEnd.copy(this._panStart);\n }\n this.domElement.ownerDocument.addEventListener(\"pointermove\", this.onPointerMove);\n this.domElement.ownerDocument.addEventListener(\"pointerup\", this.onPointerUp);\n this.dispatchEvent(this.startEvent);\n });\n __publicField(this, \"onMouseMove\", (event) => {\n if (this.enabled === false)\n return;\n const state = this._keyState !== this.STATE.NONE ? this._keyState : this._state;\n if (state === this.STATE.ROTATE && !this.noRotate) {\n this._movePrev.copy(this._moveCurr);\n this._moveCurr.copy(this.getMouseOnCircle(event.pageX, event.pageY));\n } else if (state === this.STATE.ZOOM && !this.noZoom) {\n this._zoomEnd.copy(this.getMouseOnScreen(event.pageX, event.pageY));\n } else if (state === this.STATE.PAN && !this.noPan) {\n this._panEnd.copy(this.getMouseOnScreen(event.pageX, event.pageY));\n }\n });\n __publicField(this, \"onMouseUp\", () => {\n if (!this.domElement)\n return;\n if (this.enabled === false)\n return;\n this._state = this.STATE.NONE;\n this.domElement.ownerDocument.removeEventListener(\"pointermove\", this.onPointerMove);\n this.domElement.ownerDocument.removeEventListener(\"pointerup\", this.onPointerUp);\n this.dispatchEvent(this.endEvent);\n });\n __publicField(this, \"mousewheel\", (event) => {\n if (this.enabled === false)\n return;\n if (this.noZoom === true)\n return;\n event.preventDefault();\n switch (event.deltaMode) {\n case 2:\n this._zoomStart.y -= event.deltaY * 0.025;\n break;\n case 1:\n this._zoomStart.y -= event.deltaY * 0.01;\n break;\n default:\n this._zoomStart.y -= event.deltaY * 25e-5;\n break;\n }\n this.mousePosition.x = event.offsetX / this.screen.width * 2 - 1;\n this.mousePosition.y = -(event.offsetY / this.screen.height) * 2 + 1;\n this.dispatchEvent(this.startEvent);\n this.dispatchEvent(this.endEvent);\n });\n __publicField(this, \"touchstart\", (event) => {\n if (this.enabled === false)\n return;\n event.preventDefault();\n switch (event.touches.length) {\n case 1:\n this._state = this.STATE.TOUCH_ROTATE;\n this._moveCurr.copy(this.getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY));\n this._movePrev.copy(this._moveCurr);\n break;\n default:\n this._state = this.STATE.TOUCH_ZOOM_PAN;\n const dx = event.touches[0].pageX - event.touches[1].pageX;\n const dy = event.touches[0].pageY - event.touches[1].pageY;\n this._touchZoomDistanceEnd = this._touchZoomDistanceStart = Math.sqrt(dx * dx + dy * dy);\n const x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\n const y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\n this._panStart.copy(this.getMouseOnScreen(x, y));\n this._panEnd.copy(this._panStart);\n break;\n }\n this.dispatchEvent(this.startEvent);\n });\n __publicField(this, \"touchmove\", (event) => {\n if (this.enabled === false)\n return;\n event.preventDefault();\n switch (event.touches.length) {\n case 1:\n this._movePrev.copy(this._moveCurr);\n this._moveCurr.copy(this.getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY));\n break;\n default:\n const dx = event.touches[0].pageX - event.touches[1].pageX;\n const dy = event.touches[0].pageY - event.touches[1].pageY;\n this._touchZoomDistanceEnd = Math.sqrt(dx * dx + dy * dy);\n const x = (event.touches[0].pageX + event.touches[1].pageX) / 2;\n const y = (event.touches[0].pageY + event.touches[1].pageY) / 2;\n this._panEnd.copy(this.getMouseOnScreen(x, y));\n break;\n }\n });\n __publicField(this, \"touchend\", (event) => {\n if (this.enabled === false)\n return;\n switch (event.touches.length) {\n case 0:\n this._state = this.STATE.NONE;\n break;\n case 1:\n this._state = this.STATE.TOUCH_ROTATE;\n this._moveCurr.copy(this.getMouseOnCircle(event.touches[0].pageX, event.touches[0].pageY));\n this._movePrev.copy(this._moveCurr);\n break;\n }\n this.dispatchEvent(this.endEvent);\n });\n __publicField(this, \"contextmenu\", (event) => {\n if (this.enabled === false)\n return;\n event.preventDefault();\n });\n // https://github.com/mrdoob/three.js/issues/20575\n __publicField(this, \"connect\", (domElement) => {\n if (domElement === document) {\n console.error(\n 'THREE.OrbitControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.'\n );\n }\n this.domElement = domElement;\n this.domElement.addEventListener(\"contextmenu\", this.contextmenu);\n this.domElement.addEventListener(\"pointerdown\", this.onPointerDown);\n this.domElement.addEventListener(\"wheel\", this.mousewheel);\n this.domElement.addEventListener(\"touchstart\", this.touchstart);\n this.domElement.addEventListener(\"touchend\", this.touchend);\n this.domElement.addEventListener(\"touchmove\", this.touchmove);\n this.domElement.ownerDocument.addEventListener(\"pointermove\", this.onPointerMove);\n this.domElement.ownerDocument.addEventListener(\"pointerup\", this.onPointerUp);\n window.addEventListener(\"keydown\", this.keydown);\n window.addEventListener(\"keyup\", this.keyup);\n this.handleResize();\n });\n __publicField(this, \"dispose\", () => {\n if (!this.domElement)\n return;\n this.domElement.removeEventListener(\"contextmenu\", this.contextmenu);\n this.domElement.removeEventListener(\"pointerdown\", this.onPointerDown);\n this.domElement.removeEventListener(\"wheel\", this.mousewheel);\n this.domElement.removeEventListener(\"touchstart\", this.touchstart);\n this.domElement.removeEventListener(\"touchend\", this.touchend);\n this.domElement.removeEventListener(\"touchmove\", this.touchmove);\n this.domElement.ownerDocument.removeEventListener(\"pointermove\", this.onPointerMove);\n this.domElement.ownerDocument.removeEventListener(\"pointerup\", this.onPointerUp);\n window.removeEventListener(\"keydown\", this.keydown);\n window.removeEventListener(\"keyup\", this.keyup);\n });\n this.object = object;\n this.target0 = this.target.clone();\n this.position0 = this.object.position.clone();\n this.up0 = this.object.up.clone();\n this.zoom0 = this.object.zoom;\n if (domElement !== void 0)\n this.connect(domElement);\n this.update();\n }\n}\nexport {\n TrackballControls\n};\n//# sourceMappingURL=TrackballControls.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Vector3, MOUSE, TOUCH, Quaternion, PerspectiveCamera, OrthographicCamera, Spherical, Vector2, Ray, Plane } from \"three\";\nimport { EventDispatcher } from \"./EventDispatcher.js\";\nconst _ray = /* @__PURE__ */ new Ray();\nconst _plane = /* @__PURE__ */ new Plane();\nconst TILT_LIMIT = Math.cos(70 * (Math.PI / 180));\nconst moduloWrapAround = (offset, capacity) => (offset % capacity + capacity) % capacity;\nclass OrbitControls extends EventDispatcher {\n constructor(object, domElement) {\n super();\n __publicField(this, \"object\");\n __publicField(this, \"domElement\");\n // Set to false to disable this control\n __publicField(this, \"enabled\", true);\n // \"target\" sets the location of focus, where the object orbits around\n __publicField(this, \"target\", new Vector3());\n // How far you can dolly in and out ( PerspectiveCamera only )\n __publicField(this, \"minDistance\", 0);\n __publicField(this, \"maxDistance\", Infinity);\n // How far you can zoom in and out ( OrthographicCamera only )\n __publicField(this, \"minZoom\", 0);\n __publicField(this, \"maxZoom\", Infinity);\n // How far you can orbit vertically, upper and lower limits.\n // Range is 0 to Math.PI radians.\n __publicField(this, \"minPolarAngle\", 0);\n // radians\n __publicField(this, \"maxPolarAngle\", Math.PI);\n // radians\n // How far you can orbit horizontally, upper and lower limits.\n // If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI )\n __publicField(this, \"minAzimuthAngle\", -Infinity);\n // radians\n __publicField(this, \"maxAzimuthAngle\", Infinity);\n // radians\n // Set to true to enable damping (inertia)\n // If damping is enabled, you must call controls.update() in your animation loop\n __publicField(this, \"enableDamping\", false);\n __publicField(this, \"dampingFactor\", 0.05);\n // This option actually enables dollying in and out; left as \"zoom\" for backwards compatibility.\n // Set to false to disable zooming\n __publicField(this, \"enableZoom\", true);\n __publicField(this, \"zoomSpeed\", 1);\n // Set to false to disable rotating\n __publicField(this, \"enableRotate\", true);\n __publicField(this, \"rotateSpeed\", 1);\n // Set to false to disable panning\n __publicField(this, \"enablePan\", true);\n __publicField(this, \"panSpeed\", 1);\n __publicField(this, \"screenSpacePanning\", true);\n // if false, pan orthogonal to world-space direction camera.up\n __publicField(this, \"keyPanSpeed\", 7);\n // pixels moved per arrow key push\n __publicField(this, \"zoomToCursor\", false);\n // Set to true to automatically rotate around the target\n // If auto-rotate is enabled, you must call controls.update() in your animation loop\n __publicField(this, \"autoRotate\", false);\n __publicField(this, \"autoRotateSpeed\", 2);\n // 30 seconds per orbit when fps is 60\n __publicField(this, \"reverseOrbit\", false);\n // true if you want to reverse the orbit to mouse drag from left to right = orbits left\n __publicField(this, \"reverseHorizontalOrbit\", false);\n // true if you want to reverse the horizontal orbit direction\n __publicField(this, \"reverseVerticalOrbit\", false);\n // true if you want to reverse the vertical orbit direction\n // The four arrow keys\n __publicField(this, \"keys\", { LEFT: \"ArrowLeft\", UP: \"ArrowUp\", RIGHT: \"ArrowRight\", BOTTOM: \"ArrowDown\" });\n // Mouse buttons\n __publicField(this, \"mouseButtons\", {\n LEFT: MOUSE.ROTATE,\n MIDDLE: MOUSE.DOLLY,\n RIGHT: MOUSE.PAN\n });\n // Touch fingers\n __publicField(this, \"touches\", { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN });\n __publicField(this, \"target0\");\n __publicField(this, \"position0\");\n __publicField(this, \"zoom0\");\n // the target DOM element for key events\n __publicField(this, \"_domElementKeyEvents\", null);\n __publicField(this, \"getPolarAngle\");\n __publicField(this, \"getAzimuthalAngle\");\n __publicField(this, \"setPolarAngle\");\n __publicField(this, \"setAzimuthalAngle\");\n __publicField(this, \"getDistance\");\n // Not used in most scenarios, however they can be useful for specific use cases\n __publicField(this, \"getZoomScale\");\n __publicField(this, \"listenToKeyEvents\");\n __publicField(this, \"stopListenToKeyEvents\");\n __publicField(this, \"saveState\");\n __publicField(this, \"reset\");\n __publicField(this, \"update\");\n __publicField(this, \"connect\");\n __publicField(this, \"dispose\");\n // Dolly in programmatically\n __publicField(this, \"dollyIn\");\n // Dolly out programmatically\n __publicField(this, \"dollyOut\");\n // Get the current scale\n __publicField(this, \"getScale\");\n // Set the current scale (these are not used in most scenarios, however they can be useful for specific use cases)\n __publicField(this, \"setScale\");\n this.object = object;\n this.domElement = domElement;\n this.target0 = this.target.clone();\n this.position0 = this.object.position.clone();\n this.zoom0 = this.object.zoom;\n this.getPolarAngle = () => spherical.phi;\n this.getAzimuthalAngle = () => spherical.theta;\n this.setPolarAngle = (value) => {\n let phi = moduloWrapAround(value, 2 * Math.PI);\n let currentPhi = spherical.phi;\n if (currentPhi < 0)\n currentPhi += 2 * Math.PI;\n if (phi < 0)\n phi += 2 * Math.PI;\n let phiDist = Math.abs(phi - currentPhi);\n if (2 * Math.PI - phiDist < phiDist) {\n if (phi < currentPhi) {\n phi += 2 * Math.PI;\n } else {\n currentPhi += 2 * Math.PI;\n }\n }\n sphericalDelta.phi = phi - currentPhi;\n scope.update();\n };\n this.setAzimuthalAngle = (value) => {\n let theta = moduloWrapAround(value, 2 * Math.PI);\n let currentTheta = spherical.theta;\n if (currentTheta < 0)\n currentTheta += 2 * Math.PI;\n if (theta < 0)\n theta += 2 * Math.PI;\n let thetaDist = Math.abs(theta - currentTheta);\n if (2 * Math.PI - thetaDist < thetaDist) {\n if (theta < currentTheta) {\n theta += 2 * Math.PI;\n } else {\n currentTheta += 2 * Math.PI;\n }\n }\n sphericalDelta.theta = theta - currentTheta;\n scope.update();\n };\n this.getDistance = () => scope.object.position.distanceTo(scope.target);\n this.listenToKeyEvents = (domElement2) => {\n domElement2.addEventListener(\"keydown\", onKeyDown);\n this._domElementKeyEvents = domElement2;\n };\n this.stopListenToKeyEvents = () => {\n this._domElementKeyEvents.removeEventListener(\"keydown\", onKeyDown);\n this._domElementKeyEvents = null;\n };\n this.saveState = () => {\n scope.target0.copy(scope.target);\n scope.position0.copy(scope.object.position);\n scope.zoom0 = scope.object.zoom;\n };\n this.reset = () => {\n scope.target.copy(scope.target0);\n scope.object.position.copy(scope.position0);\n scope.object.zoom = scope.zoom0;\n scope.object.updateProjectionMatrix();\n scope.dispatchEvent(changeEvent);\n scope.update();\n state = STATE.NONE;\n };\n this.update = (() => {\n const offset = new Vector3();\n const up = new Vector3(0, 1, 0);\n const quat = new Quaternion().setFromUnitVectors(object.up, up);\n const quatInverse = quat.clone().invert();\n const lastPosition = new Vector3();\n const lastQuaternion = new Quaternion();\n const twoPI = 2 * Math.PI;\n return function update() {\n const position = scope.object.position;\n quat.setFromUnitVectors(object.up, up);\n quatInverse.copy(quat).invert();\n offset.copy(position).sub(scope.target);\n offset.applyQuaternion(quat);\n spherical.setFromVector3(offset);\n if (scope.autoRotate && state === STATE.NONE) {\n rotateLeft(getAutoRotationAngle());\n }\n if (scope.enableDamping) {\n spherical.theta += sphericalDelta.theta * scope.dampingFactor;\n spherical.phi += sphericalDelta.phi * scope.dampingFactor;\n } else {\n spherical.theta += sphericalDelta.theta;\n spherical.phi += sphericalDelta.phi;\n }\n let min = scope.minAzimuthAngle;\n let max = scope.maxAzimuthAngle;\n if (isFinite(min) && isFinite(max)) {\n if (min < -Math.PI)\n min += twoPI;\n else if (min > Math.PI)\n min -= twoPI;\n if (max < -Math.PI)\n max += twoPI;\n else if (max > Math.PI)\n max -= twoPI;\n if (min <= max) {\n spherical.theta = Math.max(min, Math.min(max, spherical.theta));\n } else {\n spherical.theta = spherical.theta > (min + max) / 2 ? Math.max(min, spherical.theta) : Math.min(max, spherical.theta);\n }\n }\n spherical.phi = Math.max(scope.minPolarAngle, Math.min(scope.maxPolarAngle, spherical.phi));\n spherical.makeSafe();\n if (scope.enableDamping === true) {\n scope.target.addScaledVector(panOffset, scope.dampingFactor);\n } else {\n scope.target.add(panOffset);\n }\n if (scope.zoomToCursor && performCursorZoom || scope.object.isOrthographicCamera) {\n spherical.radius = clampDistance(spherical.radius);\n } else {\n spherical.radius = clampDistance(spherical.radius * scale);\n }\n offset.setFromSpherical(spherical);\n offset.applyQuaternion(quatInverse);\n position.copy(scope.target).add(offset);\n if (!scope.object.matrixAutoUpdate)\n scope.object.updateMatrix();\n scope.object.lookAt(scope.target);\n if (scope.enableDamping === true) {\n sphericalDelta.theta *= 1 - scope.dampingFactor;\n sphericalDelta.phi *= 1 - scope.dampingFactor;\n panOffset.multiplyScalar(1 - scope.dampingFactor);\n } else {\n sphericalDelta.set(0, 0, 0);\n panOffset.set(0, 0, 0);\n }\n let zoomChanged = false;\n if (scope.zoomToCursor && performCursorZoom) {\n let newRadius = null;\n if (scope.object instanceof PerspectiveCamera && scope.object.isPerspectiveCamera) {\n const prevRadius = offset.length();\n newRadius = clampDistance(prevRadius * scale);\n const radiusDelta = prevRadius - newRadius;\n scope.object.position.addScaledVector(dollyDirection, radiusDelta);\n scope.object.updateMatrixWorld();\n } else if (scope.object.isOrthographicCamera) {\n const mouseBefore = new Vector3(mouse.x, mouse.y, 0);\n mouseBefore.unproject(scope.object);\n scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / scale));\n scope.object.updateProjectionMatrix();\n zoomChanged = true;\n const mouseAfter = new Vector3(mouse.x, mouse.y, 0);\n mouseAfter.unproject(scope.object);\n scope.object.position.sub(mouseAfter).add(mouseBefore);\n scope.object.updateMatrixWorld();\n newRadius = offset.length();\n } else {\n console.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - zoom to cursor disabled.\");\n scope.zoomToCursor = false;\n }\n if (newRadius !== null) {\n if (scope.screenSpacePanning) {\n scope.target.set(0, 0, -1).transformDirection(scope.object.matrix).multiplyScalar(newRadius).add(scope.object.position);\n } else {\n _ray.origin.copy(scope.object.position);\n _ray.direction.set(0, 0, -1).transformDirection(scope.object.matrix);\n if (Math.abs(scope.object.up.dot(_ray.direction)) < TILT_LIMIT) {\n object.lookAt(scope.target);\n } else {\n _plane.setFromNormalAndCoplanarPoint(scope.object.up, scope.target);\n _ray.intersectPlane(_plane, scope.target);\n }\n }\n }\n } else if (scope.object instanceof OrthographicCamera && scope.object.isOrthographicCamera) {\n zoomChanged = scale !== 1;\n if (zoomChanged) {\n scope.object.zoom = Math.max(scope.minZoom, Math.min(scope.maxZoom, scope.object.zoom / scale));\n scope.object.updateProjectionMatrix();\n }\n }\n scale = 1;\n performCursorZoom = false;\n if (zoomChanged || lastPosition.distanceToSquared(scope.object.position) > EPS || 8 * (1 - lastQuaternion.dot(scope.object.quaternion)) > EPS) {\n scope.dispatchEvent(changeEvent);\n lastPosition.copy(scope.object.position);\n lastQuaternion.copy(scope.object.quaternion);\n zoomChanged = false;\n return true;\n }\n return false;\n };\n })();\n this.connect = (domElement2) => {\n scope.domElement = domElement2;\n scope.domElement.style.touchAction = \"none\";\n scope.domElement.addEventListener(\"contextmenu\", onContextMenu);\n scope.domElement.addEventListener(\"pointerdown\", onPointerDown);\n scope.domElement.addEventListener(\"pointercancel\", onPointerUp);\n scope.domElement.addEventListener(\"wheel\", onMouseWheel);\n };\n this.dispose = () => {\n var _a, _b, _c, _d, _e, _f;\n if (scope.domElement) {\n scope.domElement.style.touchAction = \"auto\";\n }\n (_a = scope.domElement) == null ? void 0 : _a.removeEventListener(\"contextmenu\", onContextMenu);\n (_b = scope.domElement) == null ? void 0 : _b.removeEventListener(\"pointerdown\", onPointerDown);\n (_c = scope.domElement) == null ? void 0 : _c.removeEventListener(\"pointercancel\", onPointerUp);\n (_d = scope.domElement) == null ? void 0 : _d.removeEventListener(\"wheel\", onMouseWheel);\n (_e = scope.domElement) == null ? void 0 : _e.ownerDocument.removeEventListener(\"pointermove\", onPointerMove);\n (_f = scope.domElement) == null ? void 0 : _f.ownerDocument.removeEventListener(\"pointerup\", onPointerUp);\n if (scope._domElementKeyEvents !== null) {\n scope._domElementKeyEvents.removeEventListener(\"keydown\", onKeyDown);\n }\n };\n const scope = this;\n const changeEvent = { type: \"change\" };\n const startEvent = { type: \"start\" };\n const endEvent = { type: \"end\" };\n const STATE = {\n NONE: -1,\n ROTATE: 0,\n DOLLY: 1,\n PAN: 2,\n TOUCH_ROTATE: 3,\n TOUCH_PAN: 4,\n TOUCH_DOLLY_PAN: 5,\n TOUCH_DOLLY_ROTATE: 6\n };\n let state = STATE.NONE;\n const EPS = 1e-6;\n const spherical = new Spherical();\n const sphericalDelta = new Spherical();\n let scale = 1;\n const panOffset = new Vector3();\n const rotateStart = new Vector2();\n const rotateEnd = new Vector2();\n const rotateDelta = new Vector2();\n const panStart = new Vector2();\n const panEnd = new Vector2();\n const panDelta = new Vector2();\n const dollyStart = new Vector2();\n const dollyEnd = new Vector2();\n const dollyDelta = new Vector2();\n const dollyDirection = new Vector3();\n const mouse = new Vector2();\n let performCursorZoom = false;\n const pointers = [];\n const pointerPositions = {};\n function getAutoRotationAngle() {\n return 2 * Math.PI / 60 / 60 * scope.autoRotateSpeed;\n }\n function getZoomScale() {\n return Math.pow(0.95, scope.zoomSpeed);\n }\n function rotateLeft(angle) {\n if (scope.reverseOrbit || scope.reverseHorizontalOrbit) {\n sphericalDelta.theta += angle;\n } else {\n sphericalDelta.theta -= angle;\n }\n }\n function rotateUp(angle) {\n if (scope.reverseOrbit || scope.reverseVerticalOrbit) {\n sphericalDelta.phi += angle;\n } else {\n sphericalDelta.phi -= angle;\n }\n }\n const panLeft = (() => {\n const v = new Vector3();\n return function panLeft2(distance, objectMatrix) {\n v.setFromMatrixColumn(objectMatrix, 0);\n v.multiplyScalar(-distance);\n panOffset.add(v);\n };\n })();\n const panUp = (() => {\n const v = new Vector3();\n return function panUp2(distance, objectMatrix) {\n if (scope.screenSpacePanning === true) {\n v.setFromMatrixColumn(objectMatrix, 1);\n } else {\n v.setFromMatrixColumn(objectMatrix, 0);\n v.crossVectors(scope.object.up, v);\n }\n v.multiplyScalar(distance);\n panOffset.add(v);\n };\n })();\n const pan = (() => {\n const offset = new Vector3();\n return function pan2(deltaX, deltaY) {\n const element = scope.domElement;\n if (element && scope.object instanceof PerspectiveCamera && scope.object.isPerspectiveCamera) {\n const position = scope.object.position;\n offset.copy(position).sub(scope.target);\n let targetDistance = offset.length();\n targetDistance *= Math.tan(scope.object.fov / 2 * Math.PI / 180);\n panLeft(2 * deltaX * targetDistance / element.clientHeight, scope.object.matrix);\n panUp(2 * deltaY * targetDistance / element.clientHeight, scope.object.matrix);\n } else if (element && scope.object instanceof OrthographicCamera && scope.object.isOrthographicCamera) {\n panLeft(\n deltaX * (scope.object.right - scope.object.left) / scope.object.zoom / element.clientWidth,\n scope.object.matrix\n );\n panUp(\n deltaY * (scope.object.top - scope.object.bottom) / scope.object.zoom / element.clientHeight,\n scope.object.matrix\n );\n } else {\n console.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - pan disabled.\");\n scope.enablePan = false;\n }\n };\n })();\n function setScale(newScale) {\n if (scope.object instanceof PerspectiveCamera && scope.object.isPerspectiveCamera || scope.object instanceof OrthographicCamera && scope.object.isOrthographicCamera) {\n scale = newScale;\n } else {\n console.warn(\"WARNING: OrbitControls.js encountered an unknown camera type - dolly/zoom disabled.\");\n scope.enableZoom = false;\n }\n }\n function dollyOut(dollyScale) {\n setScale(scale / dollyScale);\n }\n function dollyIn(dollyScale) {\n setScale(scale * dollyScale);\n }\n function updateMouseParameters(event) {\n if (!scope.zoomToCursor || !scope.domElement) {\n return;\n }\n performCursorZoom = true;\n const rect = scope.domElement.getBoundingClientRect();\n const x = event.clientX - rect.left;\n const y = event.clientY - rect.top;\n const w = rect.width;\n const h = rect.height;\n mouse.x = x / w * 2 - 1;\n mouse.y = -(y / h) * 2 + 1;\n dollyDirection.set(mouse.x, mouse.y, 1).unproject(scope.object).sub(scope.object.position).normalize();\n }\n function clampDistance(dist) {\n return Math.max(scope.minDistance, Math.min(scope.maxDistance, dist));\n }\n function handleMouseDownRotate(event) {\n rotateStart.set(event.clientX, event.clientY);\n }\n function handleMouseDownDolly(event) {\n updateMouseParameters(event);\n dollyStart.set(event.clientX, event.clientY);\n }\n function handleMouseDownPan(event) {\n panStart.set(event.clientX, event.clientY);\n }\n function handleMouseMoveRotate(event) {\n rotateEnd.set(event.clientX, event.clientY);\n rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed);\n const element = scope.domElement;\n if (element) {\n rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight);\n rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight);\n }\n rotateStart.copy(rotateEnd);\n scope.update();\n }\n function handleMouseMoveDolly(event) {\n dollyEnd.set(event.clientX, event.clientY);\n dollyDelta.subVectors(dollyEnd, dollyStart);\n if (dollyDelta.y > 0) {\n dollyOut(getZoomScale());\n } else if (dollyDelta.y < 0) {\n dollyIn(getZoomScale());\n }\n dollyStart.copy(dollyEnd);\n scope.update();\n }\n function handleMouseMovePan(event) {\n panEnd.set(event.clientX, event.clientY);\n panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed);\n pan(panDelta.x, panDelta.y);\n panStart.copy(panEnd);\n scope.update();\n }\n function handleMouseWheel(event) {\n updateMouseParameters(event);\n if (event.deltaY < 0) {\n dollyIn(getZoomScale());\n } else if (event.deltaY > 0) {\n dollyOut(getZoomScale());\n }\n scope.update();\n }\n function handleKeyDown(event) {\n let needsUpdate = false;\n switch (event.code) {\n case scope.keys.UP:\n pan(0, scope.keyPanSpeed);\n needsUpdate = true;\n break;\n case scope.keys.BOTTOM:\n pan(0, -scope.keyPanSpeed);\n needsUpdate = true;\n break;\n case scope.keys.LEFT:\n pan(scope.keyPanSpeed, 0);\n needsUpdate = true;\n break;\n case scope.keys.RIGHT:\n pan(-scope.keyPanSpeed, 0);\n needsUpdate = true;\n break;\n }\n if (needsUpdate) {\n event.preventDefault();\n scope.update();\n }\n }\n function handleTouchStartRotate() {\n if (pointers.length == 1) {\n rotateStart.set(pointers[0].pageX, pointers[0].pageY);\n } else {\n const x = 0.5 * (pointers[0].pageX + pointers[1].pageX);\n const y = 0.5 * (pointers[0].pageY + pointers[1].pageY);\n rotateStart.set(x, y);\n }\n }\n function handleTouchStartPan() {\n if (pointers.length == 1) {\n panStart.set(pointers[0].pageX, pointers[0].pageY);\n } else {\n const x = 0.5 * (pointers[0].pageX + pointers[1].pageX);\n const y = 0.5 * (pointers[0].pageY + pointers[1].pageY);\n panStart.set(x, y);\n }\n }\n function handleTouchStartDolly() {\n const dx = pointers[0].pageX - pointers[1].pageX;\n const dy = pointers[0].pageY - pointers[1].pageY;\n const distance = Math.sqrt(dx * dx + dy * dy);\n dollyStart.set(0, distance);\n }\n function handleTouchStartDollyPan() {\n if (scope.enableZoom)\n handleTouchStartDolly();\n if (scope.enablePan)\n handleTouchStartPan();\n }\n function handleTouchStartDollyRotate() {\n if (scope.enableZoom)\n handleTouchStartDolly();\n if (scope.enableRotate)\n handleTouchStartRotate();\n }\n function handleTouchMoveRotate(event) {\n if (pointers.length == 1) {\n rotateEnd.set(event.pageX, event.pageY);\n } else {\n const position = getSecondPointerPosition(event);\n const x = 0.5 * (event.pageX + position.x);\n const y = 0.5 * (event.pageY + position.y);\n rotateEnd.set(x, y);\n }\n rotateDelta.subVectors(rotateEnd, rotateStart).multiplyScalar(scope.rotateSpeed);\n const element = scope.domElement;\n if (element) {\n rotateLeft(2 * Math.PI * rotateDelta.x / element.clientHeight);\n rotateUp(2 * Math.PI * rotateDelta.y / element.clientHeight);\n }\n rotateStart.copy(rotateEnd);\n }\n function handleTouchMovePan(event) {\n if (pointers.length == 1) {\n panEnd.set(event.pageX, event.pageY);\n } else {\n const position = getSecondPointerPosition(event);\n const x = 0.5 * (event.pageX + position.x);\n const y = 0.5 * (event.pageY + position.y);\n panEnd.set(x, y);\n }\n panDelta.subVectors(panEnd, panStart).multiplyScalar(scope.panSpeed);\n pan(panDelta.x, panDelta.y);\n panStart.copy(panEnd);\n }\n function handleTouchMoveDolly(event) {\n const position = getSecondPointerPosition(event);\n const dx = event.pageX - position.x;\n const dy = event.pageY - position.y;\n const distance = Math.sqrt(dx * dx + dy * dy);\n dollyEnd.set(0, distance);\n dollyDelta.set(0, Math.pow(dollyEnd.y / dollyStart.y, scope.zoomSpeed));\n dollyOut(dollyDelta.y);\n dollyStart.copy(dollyEnd);\n }\n function handleTouchMoveDollyPan(event) {\n if (scope.enableZoom)\n handleTouchMoveDolly(event);\n if (scope.enablePan)\n handleTouchMovePan(event);\n }\n function handleTouchMoveDollyRotate(event) {\n if (scope.enableZoom)\n handleTouchMoveDolly(event);\n if (scope.enableRotate)\n handleTouchMoveRotate(event);\n }\n function onPointerDown(event) {\n var _a, _b;\n if (scope.enabled === false)\n return;\n if (pointers.length === 0) {\n (_a = scope.domElement) == null ? void 0 : _a.ownerDocument.addEventListener(\"pointermove\", onPointerMove);\n (_b = scope.domElement) == null ? void 0 : _b.ownerDocument.addEventListener(\"pointerup\", onPointerUp);\n }\n addPointer(event);\n if (event.pointerType === \"touch\") {\n onTouchStart(event);\n } else {\n onMouseDown(event);\n }\n }\n function onPointerMove(event) {\n if (scope.enabled === false)\n return;\n if (event.pointerType === \"touch\") {\n onTouchMove(event);\n } else {\n onMouseMove(event);\n }\n }\n function onPointerUp(event) {\n var _a, _b, _c;\n removePointer(event);\n if (pointers.length === 0) {\n (_a = scope.domElement) == null ? void 0 : _a.releasePointerCapture(event.pointerId);\n (_b = scope.domElement) == null ? void 0 : _b.ownerDocument.removeEventListener(\"pointermove\", onPointerMove);\n (_c = scope.domElement) == null ? void 0 : _c.ownerDocument.removeEventListener(\"pointerup\", onPointerUp);\n }\n scope.dispatchEvent(endEvent);\n state = STATE.NONE;\n }\n function onMouseDown(event) {\n let mouseAction;\n switch (event.button) {\n case 0:\n mouseAction = scope.mouseButtons.LEFT;\n break;\n case 1:\n mouseAction = scope.mouseButtons.MIDDLE;\n break;\n case 2:\n mouseAction = scope.mouseButtons.RIGHT;\n break;\n default:\n mouseAction = -1;\n }\n switch (mouseAction) {\n case MOUSE.DOLLY:\n if (scope.enableZoom === false)\n return;\n handleMouseDownDolly(event);\n state = STATE.DOLLY;\n break;\n case MOUSE.ROTATE:\n if (event.ctrlKey || event.metaKey || event.shiftKey) {\n if (scope.enablePan === false)\n return;\n handleMouseDownPan(event);\n state = STATE.PAN;\n } else {\n if (scope.enableRotate === false)\n return;\n handleMouseDownRotate(event);\n state = STATE.ROTATE;\n }\n break;\n case MOUSE.PAN:\n if (event.ctrlKey || event.metaKey || event.shiftKey) {\n if (scope.enableRotate === false)\n return;\n handleMouseDownRotate(event);\n state = STATE.ROTATE;\n } else {\n if (scope.enablePan === false)\n return;\n handleMouseDownPan(event);\n state = STATE.PAN;\n }\n break;\n default:\n state = STATE.NONE;\n }\n if (state !== STATE.NONE) {\n scope.dispatchEvent(startEvent);\n }\n }\n function onMouseMove(event) {\n if (scope.enabled === false)\n return;\n switch (state) {\n case STATE.ROTATE:\n if (scope.enableRotate === false)\n return;\n handleMouseMoveRotate(event);\n break;\n case STATE.DOLLY:\n if (scope.enableZoom === false)\n return;\n handleMouseMoveDolly(event);\n break;\n case STATE.PAN:\n if (scope.enablePan === false)\n return;\n handleMouseMovePan(event);\n break;\n }\n }\n function onMouseWheel(event) {\n if (scope.enabled === false || scope.enableZoom === false || state !== STATE.NONE && state !== STATE.ROTATE) {\n return;\n }\n event.preventDefault();\n scope.dispatchEvent(startEvent);\n handleMouseWheel(event);\n scope.dispatchEvent(endEvent);\n }\n function onKeyDown(event) {\n if (scope.enabled === false || scope.enablePan === false)\n return;\n handleKeyDown(event);\n }\n function onTouchStart(event) {\n trackPointer(event);\n switch (pointers.length) {\n case 1:\n switch (scope.touches.ONE) {\n case TOUCH.ROTATE:\n if (scope.enableRotate === false)\n return;\n handleTouchStartRotate();\n state = STATE.TOUCH_ROTATE;\n break;\n case TOUCH.PAN:\n if (scope.enablePan === false)\n return;\n handleTouchStartPan();\n state = STATE.TOUCH_PAN;\n break;\n default:\n state = STATE.NONE;\n }\n break;\n case 2:\n switch (scope.touches.TWO) {\n case TOUCH.DOLLY_PAN:\n if (scope.enableZoom === false && scope.enablePan === false)\n return;\n handleTouchStartDollyPan();\n state = STATE.TOUCH_DOLLY_PAN;\n break;\n case TOUCH.DOLLY_ROTATE:\n if (scope.enableZoom === false && scope.enableRotate === false)\n return;\n handleTouchStartDollyRotate();\n state = STATE.TOUCH_DOLLY_ROTATE;\n break;\n default:\n state = STATE.NONE;\n }\n break;\n default:\n state = STATE.NONE;\n }\n if (state !== STATE.NONE) {\n scope.dispatchEvent(startEvent);\n }\n }\n function onTouchMove(event) {\n trackPointer(event);\n switch (state) {\n case STATE.TOUCH_ROTATE:\n if (scope.enableRotate === false)\n return;\n handleTouchMoveRotate(event);\n scope.update();\n break;\n case STATE.TOUCH_PAN:\n if (scope.enablePan === false)\n return;\n handleTouchMovePan(event);\n scope.update();\n break;\n case STATE.TOUCH_DOLLY_PAN:\n if (scope.enableZoom === false && scope.enablePan === false)\n return;\n handleTouchMoveDollyPan(event);\n scope.update();\n break;\n case STATE.TOUCH_DOLLY_ROTATE:\n if (scope.enableZoom === false && scope.enableRotate === false)\n return;\n handleTouchMoveDollyRotate(event);\n scope.update();\n break;\n default:\n state = STATE.NONE;\n }\n }\n function onContextMenu(event) {\n if (scope.enabled === false)\n return;\n event.preventDefault();\n }\n function addPointer(event) {\n pointers.push(event);\n }\n function removePointer(event) {\n delete pointerPositions[event.pointerId];\n for (let i = 0; i < pointers.length; i++) {\n if (pointers[i].pointerId == event.pointerId) {\n pointers.splice(i, 1);\n return;\n }\n }\n }\n function trackPointer(event) {\n let position = pointerPositions[event.pointerId];\n if (position === void 0) {\n position = new Vector2();\n pointerPositions[event.pointerId] = position;\n }\n position.set(event.pageX, event.pageY);\n }\n function getSecondPointerPosition(event) {\n const pointer = event.pointerId === pointers[0].pointerId ? pointers[1] : pointers[0];\n return pointerPositions[pointer.pointerId];\n }\n this.dollyIn = (dollyScale = getZoomScale()) => {\n dollyIn(dollyScale);\n scope.update();\n };\n this.dollyOut = (dollyScale = getZoomScale()) => {\n dollyOut(dollyScale);\n scope.update();\n };\n this.getScale = () => {\n return scale;\n };\n this.setScale = (newScale) => {\n setScale(newScale);\n scope.update();\n };\n this.getZoomScale = () => {\n return getZoomScale();\n };\n if (domElement !== void 0)\n this.connect(domElement);\n this.update();\n }\n}\nclass MapControls extends OrbitControls {\n constructor(object, domElement) {\n super(object, domElement);\n this.screenSpacePanning = false;\n this.mouseButtons.LEFT = MOUSE.PAN;\n this.mouseButtons.RIGHT = MOUSE.ROTATE;\n this.touches.ONE = TOUCH.PAN;\n this.touches.TWO = TOUCH.DOLLY_ROTATE;\n }\n}\nexport {\n MapControls,\n OrbitControls\n};\n//# sourceMappingURL=OrbitControls.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Vector2, Vector3, Matrix4, Quaternion, Group, EllipseCurve, BufferGeometry, PerspectiveCamera, MathUtils, OrthographicCamera, Box3, Sphere, GridHelper, LineBasicMaterial, Line, Raycaster } from \"three\";\nimport { EventDispatcher } from \"./EventDispatcher.js\";\nconst STATE = {\n IDLE: Symbol(),\n ROTATE: Symbol(),\n PAN: Symbol(),\n SCALE: Symbol(),\n FOV: Symbol(),\n FOCUS: Symbol(),\n ZROTATE: Symbol(),\n TOUCH_MULTI: Symbol(),\n ANIMATION_FOCUS: Symbol(),\n ANIMATION_ROTATE: Symbol()\n};\nconst INPUT = {\n NONE: Symbol(),\n ONE_FINGER: Symbol(),\n ONE_FINGER_SWITCHED: Symbol(),\n TWO_FINGER: Symbol(),\n MULT_FINGER: Symbol(),\n CURSOR: Symbol()\n};\nconst _center = {\n x: 0,\n y: 0\n};\nconst _transformation = {\n camera: /* @__PURE__ */ new Matrix4(),\n gizmos: /* @__PURE__ */ new Matrix4()\n};\nconst _changeEvent = { type: \"change\" };\nconst _startEvent = { type: \"start\" };\nconst _endEvent = { type: \"end\" };\nclass ArcballControls extends EventDispatcher {\n constructor(camera, domElement = null, scene = null) {\n super();\n __publicField(this, \"camera\");\n __publicField(this, \"domElement\");\n __publicField(this, \"scene\");\n __publicField(this, \"mouseActions\");\n __publicField(this, \"_mouseOp\");\n __publicField(this, \"_v2_1\");\n __publicField(this, \"_v3_1\");\n __publicField(this, \"_v3_2\");\n __publicField(this, \"_m4_1\");\n __publicField(this, \"_m4_2\");\n __publicField(this, \"_quat\");\n __publicField(this, \"_translationMatrix\");\n __publicField(this, \"_rotationMatrix\");\n __publicField(this, \"_scaleMatrix\");\n __publicField(this, \"_rotationAxis\");\n __publicField(this, \"_cameraMatrixState\");\n __publicField(this, \"_cameraProjectionState\");\n __publicField(this, \"_fovState\");\n __publicField(this, \"_upState\");\n __publicField(this, \"_zoomState\");\n __publicField(this, \"_nearPos\");\n __publicField(this, \"_farPos\");\n __publicField(this, \"_gizmoMatrixState\");\n __publicField(this, \"_up0\");\n __publicField(this, \"_zoom0\");\n __publicField(this, \"_fov0\");\n __publicField(this, \"_initialNear\");\n __publicField(this, \"_nearPos0\");\n __publicField(this, \"_initialFar\");\n __publicField(this, \"_farPos0\");\n __publicField(this, \"_cameraMatrixState0\");\n __publicField(this, \"_gizmoMatrixState0\");\n __publicField(this, \"_button\");\n __publicField(this, \"_touchStart\");\n __publicField(this, \"_touchCurrent\");\n __publicField(this, \"_input\");\n __publicField(this, \"_switchSensibility\");\n __publicField(this, \"_startFingerDistance\");\n __publicField(this, \"_currentFingerDistance\");\n __publicField(this, \"_startFingerRotation\");\n __publicField(this, \"_currentFingerRotation\");\n __publicField(this, \"_devPxRatio\");\n __publicField(this, \"_downValid\");\n __publicField(this, \"_nclicks\");\n __publicField(this, \"_downEvents\");\n __publicField(this, \"_clickStart\");\n __publicField(this, \"_maxDownTime\");\n __publicField(this, \"_maxInterval\");\n __publicField(this, \"_posThreshold\");\n __publicField(this, \"_movementThreshold\");\n __publicField(this, \"_currentCursorPosition\");\n __publicField(this, \"_startCursorPosition\");\n __publicField(this, \"_grid\");\n __publicField(this, \"_gridPosition\");\n __publicField(this, \"_gizmos\");\n __publicField(this, \"_curvePts\");\n __publicField(this, \"_timeStart\");\n __publicField(this, \"_animationId\");\n __publicField(this, \"focusAnimationTime\");\n __publicField(this, \"_timePrev\");\n __publicField(this, \"_timeCurrent\");\n __publicField(this, \"_anglePrev\");\n __publicField(this, \"_angleCurrent\");\n __publicField(this, \"_cursorPosPrev\");\n __publicField(this, \"_cursorPosCurr\");\n __publicField(this, \"_wPrev\");\n __publicField(this, \"_wCurr\");\n __publicField(this, \"adjustNearFar\");\n __publicField(this, \"scaleFactor\");\n __publicField(this, \"dampingFactor\");\n __publicField(this, \"wMax\");\n __publicField(this, \"enableAnimations\");\n __publicField(this, \"enableGrid\");\n __publicField(this, \"cursorZoom\");\n __publicField(this, \"minFov\");\n __publicField(this, \"maxFov\");\n __publicField(this, \"enabled\");\n __publicField(this, \"enablePan\");\n __publicField(this, \"enableRotate\");\n __publicField(this, \"enableZoom\");\n __publicField(this, \"minDistance\");\n __publicField(this, \"maxDistance\");\n __publicField(this, \"minZoom\");\n __publicField(this, \"maxZoom\");\n __publicField(this, \"target\");\n __publicField(this, \"_currentTarget\");\n __publicField(this, \"_tbRadius\");\n __publicField(this, \"_state\");\n //listeners\n __publicField(this, \"onWindowResize\", () => {\n const scale = (this._gizmos.scale.x + this._gizmos.scale.y + this._gizmos.scale.z) / 3;\n if (this.camera) {\n const tbRadius = this.calculateTbRadius(this.camera);\n if (tbRadius !== void 0) {\n this._tbRadius = tbRadius;\n }\n }\n const newRadius = this._tbRadius / scale;\n const curve = new EllipseCurve(0, 0, newRadius, newRadius);\n const points = curve.getPoints(this._curvePts);\n const curveGeometry = new BufferGeometry().setFromPoints(points);\n for (const gizmo in this._gizmos.children) {\n const child = this._gizmos.children[gizmo];\n child.geometry = curveGeometry;\n }\n this.dispatchEvent(_changeEvent);\n });\n __publicField(this, \"onContextMenu\", (event) => {\n if (!this.enabled) {\n return;\n }\n for (let i = 0; i < this.mouseActions.length; i++) {\n if (this.mouseActions[i].mouse == 2) {\n event.preventDefault();\n break;\n }\n }\n });\n __publicField(this, \"onPointerCancel\", () => {\n this._touchStart.splice(0, this._touchStart.length);\n this._touchCurrent.splice(0, this._touchCurrent.length);\n this._input = INPUT.NONE;\n });\n __publicField(this, \"onPointerDown\", (event) => {\n if (event.button == 0 && event.isPrimary) {\n this._downValid = true;\n this._downEvents.push(event);\n } else {\n this._downValid = false;\n }\n if (event.pointerType == \"touch\" && this._input != INPUT.CURSOR) {\n this._touchStart.push(event);\n this._touchCurrent.push(event);\n switch (this._input) {\n case INPUT.NONE:\n this._input = INPUT.ONE_FINGER;\n this.onSinglePanStart(event, \"ROTATE\");\n window.addEventListener(\"pointermove\", this.onPointerMove);\n window.addEventListener(\"pointerup\", this.onPointerUp);\n break;\n case INPUT.ONE_FINGER:\n case INPUT.ONE_FINGER_SWITCHED:\n this._input = INPUT.TWO_FINGER;\n this.onRotateStart();\n this.onPinchStart();\n this.onDoublePanStart();\n break;\n case INPUT.TWO_FINGER:\n this._input = INPUT.MULT_FINGER;\n this.onTriplePanStart();\n break;\n }\n } else if (event.pointerType != \"touch\" && this._input == INPUT.NONE) {\n let modifier = null;\n if (event.ctrlKey || event.metaKey) {\n modifier = \"CTRL\";\n } else if (event.shiftKey) {\n modifier = \"SHIFT\";\n }\n this._mouseOp = this.getOpFromAction(event.button, modifier);\n if (this._mouseOp) {\n window.addEventListener(\"pointermove\", this.onPointerMove);\n window.addEventListener(\"pointerup\", this.onPointerUp);\n this._input = INPUT.CURSOR;\n this._button = event.button;\n this.onSinglePanStart(event, this._mouseOp);\n }\n }\n });\n __publicField(this, \"onPointerMove\", (event) => {\n if (event.pointerType == \"touch\" && this._input != INPUT.CURSOR) {\n switch (this._input) {\n case INPUT.ONE_FINGER:\n this.updateTouchEvent(event);\n this.onSinglePanMove(event, STATE.ROTATE);\n break;\n case INPUT.ONE_FINGER_SWITCHED:\n const movement = this.calculatePointersDistance(this._touchCurrent[0], event) * this._devPxRatio;\n if (movement >= this._switchSensibility) {\n this._input = INPUT.ONE_FINGER;\n this.updateTouchEvent(event);\n this.onSinglePanStart(event, \"ROTATE\");\n break;\n }\n break;\n case INPUT.TWO_FINGER:\n this.updateTouchEvent(event);\n this.onRotateMove();\n this.onPinchMove();\n this.onDoublePanMove();\n break;\n case INPUT.MULT_FINGER:\n this.updateTouchEvent(event);\n this.onTriplePanMove();\n break;\n }\n } else if (event.pointerType != \"touch\" && this._input == INPUT.CURSOR) {\n let modifier = null;\n if (event.ctrlKey || event.metaKey) {\n modifier = \"CTRL\";\n } else if (event.shiftKey) {\n modifier = \"SHIFT\";\n }\n const mouseOpState = this.getOpStateFromAction(this._button, modifier);\n if (mouseOpState) {\n this.onSinglePanMove(event, mouseOpState);\n }\n }\n if (this._downValid) {\n const movement = this.calculatePointersDistance(this._downEvents[this._downEvents.length - 1], event) * this._devPxRatio;\n if (movement > this._movementThreshold) {\n this._downValid = false;\n }\n }\n });\n __publicField(this, \"onPointerUp\", (event) => {\n if (event.pointerType == \"touch\" && this._input != INPUT.CURSOR) {\n const nTouch = this._touchCurrent.length;\n for (let i = 0; i < nTouch; i++) {\n if (this._touchCurrent[i].pointerId == event.pointerId) {\n this._touchCurrent.splice(i, 1);\n this._touchStart.splice(i, 1);\n break;\n }\n }\n switch (this._input) {\n case INPUT.ONE_FINGER:\n case INPUT.ONE_FINGER_SWITCHED:\n window.removeEventListener(\"pointermove\", this.onPointerMove);\n window.removeEventListener(\"pointerup\", this.onPointerUp);\n this._input = INPUT.NONE;\n this.onSinglePanEnd();\n break;\n case INPUT.TWO_FINGER:\n this.onDoublePanEnd();\n this.onPinchEnd();\n this.onRotateEnd();\n this._input = INPUT.ONE_FINGER_SWITCHED;\n break;\n case INPUT.MULT_FINGER:\n if (this._touchCurrent.length == 0) {\n window.removeEventListener(\"pointermove\", this.onPointerMove);\n window.removeEventListener(\"pointerup\", this.onPointerUp);\n this._input = INPUT.NONE;\n this.onTriplePanEnd();\n }\n break;\n }\n } else if (event.pointerType != \"touch\" && this._input == INPUT.CURSOR) {\n window.removeEventListener(\"pointermove\", this.onPointerMove);\n window.removeEventListener(\"pointerup\", this.onPointerUp);\n this._input = INPUT.NONE;\n this.onSinglePanEnd();\n this._button = -1;\n }\n if (event.isPrimary) {\n if (this._downValid) {\n const downTime = event.timeStamp - this._downEvents[this._downEvents.length - 1].timeStamp;\n if (downTime <= this._maxDownTime) {\n if (this._nclicks == 0) {\n this._nclicks = 1;\n this._clickStart = performance.now();\n } else {\n const clickInterval = event.timeStamp - this._clickStart;\n const movement = this.calculatePointersDistance(this._downEvents[1], this._downEvents[0]) * this._devPxRatio;\n if (clickInterval <= this._maxInterval && movement <= this._posThreshold) {\n this._nclicks = 0;\n this._downEvents.splice(0, this._downEvents.length);\n this.onDoubleTap(event);\n } else {\n this._nclicks = 1;\n this._downEvents.shift();\n this._clickStart = performance.now();\n }\n }\n } else {\n this._downValid = false;\n this._nclicks = 0;\n this._downEvents.splice(0, this._downEvents.length);\n }\n } else {\n this._nclicks = 0;\n this._downEvents.splice(0, this._downEvents.length);\n }\n }\n });\n __publicField(this, \"onWheel\", (event) => {\n var _a, _b;\n if (this.enabled && this.enableZoom && this.domElement) {\n let modifier = null;\n if (event.ctrlKey || event.metaKey) {\n modifier = \"CTRL\";\n } else if (event.shiftKey) {\n modifier = \"SHIFT\";\n }\n const mouseOp = this.getOpFromAction(\"WHEEL\", modifier);\n if (mouseOp) {\n event.preventDefault();\n this.dispatchEvent(_startEvent);\n const notchDeltaY = 125;\n let sgn = event.deltaY / notchDeltaY;\n let size = 1;\n if (sgn > 0) {\n size = 1 / this.scaleFactor;\n } else if (sgn < 0) {\n size = this.scaleFactor;\n }\n switch (mouseOp) {\n case \"ZOOM\":\n this.updateTbState(STATE.SCALE, true);\n if (sgn > 0) {\n size = 1 / Math.pow(this.scaleFactor, sgn);\n } else if (sgn < 0) {\n size = Math.pow(this.scaleFactor, -sgn);\n }\n if (this.cursorZoom && this.enablePan) {\n let scalePoint;\n if (this.camera instanceof OrthographicCamera) {\n scalePoint = (_a = this.unprojectOnTbPlane(this.camera, event.clientX, event.clientY, this.domElement)) == null ? void 0 : _a.applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._gizmos.position);\n }\n if (this.camera instanceof PerspectiveCamera) {\n scalePoint = (_b = this.unprojectOnTbPlane(this.camera, event.clientX, event.clientY, this.domElement)) == null ? void 0 : _b.applyQuaternion(this.camera.quaternion).add(this._gizmos.position);\n }\n if (scalePoint !== void 0)\n this.applyTransformMatrix(this.applyScale(size, scalePoint));\n } else {\n this.applyTransformMatrix(this.applyScale(size, this._gizmos.position));\n }\n if (this._grid) {\n this.disposeGrid();\n this.drawGrid();\n }\n this.updateTbState(STATE.IDLE, false);\n this.dispatchEvent(_changeEvent);\n this.dispatchEvent(_endEvent);\n break;\n case \"FOV\":\n if (this.camera instanceof PerspectiveCamera) {\n this.updateTbState(STATE.FOV, true);\n if (event.deltaX != 0) {\n sgn = event.deltaX / notchDeltaY;\n size = 1;\n if (sgn > 0) {\n size = 1 / Math.pow(this.scaleFactor, sgn);\n } else if (sgn < 0) {\n size = Math.pow(this.scaleFactor, -sgn);\n }\n }\n this._v3_1.setFromMatrixPosition(this._cameraMatrixState);\n const x = this._v3_1.distanceTo(this._gizmos.position);\n let xNew = x / size;\n xNew = MathUtils.clamp(xNew, this.minDistance, this.maxDistance);\n const y = x * Math.tan(MathUtils.DEG2RAD * this.camera.fov * 0.5);\n let newFov = MathUtils.RAD2DEG * (Math.atan(y / xNew) * 2);\n if (newFov > this.maxFov) {\n newFov = this.maxFov;\n } else if (newFov < this.minFov) {\n newFov = this.minFov;\n }\n const newDistance = y / Math.tan(MathUtils.DEG2RAD * (newFov / 2));\n size = x / newDistance;\n this.setFov(newFov);\n this.applyTransformMatrix(this.applyScale(size, this._gizmos.position, false));\n }\n if (this._grid) {\n this.disposeGrid();\n this.drawGrid();\n }\n this.updateTbState(STATE.IDLE, false);\n this.dispatchEvent(_changeEvent);\n this.dispatchEvent(_endEvent);\n break;\n }\n }\n }\n });\n __publicField(this, \"onSinglePanStart\", (event, operation) => {\n if (this.enabled && this.domElement) {\n this.dispatchEvent(_startEvent);\n this.setCenter(event.clientX, event.clientY);\n switch (operation) {\n case \"PAN\":\n if (!this.enablePan)\n return;\n if (this._animationId != -1) {\n cancelAnimationFrame(this._animationId);\n this._animationId = -1;\n this._timeStart = -1;\n this.activateGizmos(false);\n this.dispatchEvent(_changeEvent);\n }\n if (this.camera) {\n this.updateTbState(STATE.PAN, true);\n const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement);\n if (rayDir !== void 0) {\n this._startCursorPosition.copy(rayDir);\n }\n if (this.enableGrid) {\n this.drawGrid();\n this.dispatchEvent(_changeEvent);\n }\n }\n break;\n case \"ROTATE\":\n if (!this.enableRotate)\n return;\n if (this._animationId != -1) {\n cancelAnimationFrame(this._animationId);\n this._animationId = -1;\n this._timeStart = -1;\n }\n if (this.camera) {\n this.updateTbState(STATE.ROTATE, true);\n const rayDir = this.unprojectOnTbSurface(this.camera, _center.x, _center.y, this.domElement, this._tbRadius);\n if (rayDir !== void 0) {\n this._startCursorPosition.copy(rayDir);\n }\n this.activateGizmos(true);\n if (this.enableAnimations) {\n this._timePrev = this._timeCurrent = performance.now();\n this._angleCurrent = this._anglePrev = 0;\n this._cursorPosPrev.copy(this._startCursorPosition);\n this._cursorPosCurr.copy(this._cursorPosPrev);\n this._wCurr = 0;\n this._wPrev = this._wCurr;\n }\n }\n this.dispatchEvent(_changeEvent);\n break;\n case \"FOV\":\n if (!this.enableZoom)\n return;\n if (this.camera instanceof PerspectiveCamera) {\n if (this._animationId != -1) {\n cancelAnimationFrame(this._animationId);\n this._animationId = -1;\n this._timeStart = -1;\n this.activateGizmos(false);\n this.dispatchEvent(_changeEvent);\n }\n this.updateTbState(STATE.FOV, true);\n this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);\n this._currentCursorPosition.copy(this._startCursorPosition);\n }\n break;\n case \"ZOOM\":\n if (!this.enableZoom)\n return;\n if (this._animationId != -1) {\n cancelAnimationFrame(this._animationId);\n this._animationId = -1;\n this._timeStart = -1;\n this.activateGizmos(false);\n this.dispatchEvent(_changeEvent);\n }\n this.updateTbState(STATE.SCALE, true);\n this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);\n this._currentCursorPosition.copy(this._startCursorPosition);\n break;\n }\n }\n });\n __publicField(this, \"onSinglePanMove\", (event, opState) => {\n if (this.enabled && this.domElement) {\n const restart = opState != this._state;\n this.setCenter(event.clientX, event.clientY);\n switch (opState) {\n case STATE.PAN:\n if (this.enablePan && this.camera) {\n if (restart) {\n this.dispatchEvent(_endEvent);\n this.dispatchEvent(_startEvent);\n this.updateTbState(opState, true);\n const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement);\n if (rayDir !== void 0) {\n this._startCursorPosition.copy(rayDir);\n }\n if (this.enableGrid) {\n this.drawGrid();\n }\n this.activateGizmos(false);\n } else {\n const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement);\n if (rayDir !== void 0) {\n this._currentCursorPosition.copy(rayDir);\n }\n this.applyTransformMatrix(this.pan(this._startCursorPosition, this._currentCursorPosition));\n }\n }\n break;\n case STATE.ROTATE:\n if (this.enableRotate && this.camera) {\n if (restart) {\n this.dispatchEvent(_endEvent);\n this.dispatchEvent(_startEvent);\n this.updateTbState(opState, true);\n const rayDir = this.unprojectOnTbSurface(\n this.camera,\n _center.x,\n _center.y,\n this.domElement,\n this._tbRadius\n );\n if (rayDir !== void 0) {\n this._startCursorPosition.copy(rayDir);\n }\n if (this.enableGrid) {\n this.disposeGrid();\n }\n this.activateGizmos(true);\n } else {\n const rayDir = this.unprojectOnTbSurface(\n this.camera,\n _center.x,\n _center.y,\n this.domElement,\n this._tbRadius\n );\n if (rayDir !== void 0) {\n this._currentCursorPosition.copy(rayDir);\n }\n const distance = this._startCursorPosition.distanceTo(this._currentCursorPosition);\n const angle = this._startCursorPosition.angleTo(this._currentCursorPosition);\n const amount = Math.max(distance / this._tbRadius, angle);\n this.applyTransformMatrix(\n this.rotate(this.calculateRotationAxis(this._startCursorPosition, this._currentCursorPosition), amount)\n );\n if (this.enableAnimations) {\n this._timePrev = this._timeCurrent;\n this._timeCurrent = performance.now();\n this._anglePrev = this._angleCurrent;\n this._angleCurrent = amount;\n this._cursorPosPrev.copy(this._cursorPosCurr);\n this._cursorPosCurr.copy(this._currentCursorPosition);\n this._wPrev = this._wCurr;\n this._wCurr = this.calculateAngularSpeed(\n this._anglePrev,\n this._angleCurrent,\n this._timePrev,\n this._timeCurrent\n );\n }\n }\n }\n break;\n case STATE.SCALE:\n if (this.enableZoom) {\n if (restart) {\n this.dispatchEvent(_endEvent);\n this.dispatchEvent(_startEvent);\n this.updateTbState(opState, true);\n this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);\n this._currentCursorPosition.copy(this._startCursorPosition);\n if (this.enableGrid) {\n this.disposeGrid();\n }\n this.activateGizmos(false);\n } else {\n const screenNotches = 8;\n this._currentCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);\n const movement = this._currentCursorPosition.y - this._startCursorPosition.y;\n let size = 1;\n if (movement < 0) {\n size = 1 / Math.pow(this.scaleFactor, -movement * screenNotches);\n } else if (movement > 0) {\n size = Math.pow(this.scaleFactor, movement * screenNotches);\n }\n this.applyTransformMatrix(this.applyScale(size, this._gizmos.position));\n }\n }\n break;\n case STATE.FOV:\n if (this.enableZoom && this.camera instanceof PerspectiveCamera) {\n if (restart) {\n this.dispatchEvent(_endEvent);\n this.dispatchEvent(_startEvent);\n this.updateTbState(opState, true);\n this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);\n this._currentCursorPosition.copy(this._startCursorPosition);\n if (this.enableGrid) {\n this.disposeGrid();\n }\n this.activateGizmos(false);\n } else {\n const screenNotches = 8;\n this._currentCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);\n const movement = this._currentCursorPosition.y - this._startCursorPosition.y;\n let size = 1;\n if (movement < 0) {\n size = 1 / Math.pow(this.scaleFactor, -movement * screenNotches);\n } else if (movement > 0) {\n size = Math.pow(this.scaleFactor, movement * screenNotches);\n }\n this._v3_1.setFromMatrixPosition(this._cameraMatrixState);\n const x = this._v3_1.distanceTo(this._gizmos.position);\n let xNew = x / size;\n xNew = MathUtils.clamp(xNew, this.minDistance, this.maxDistance);\n const y = x * Math.tan(MathUtils.DEG2RAD * this._fovState * 0.5);\n let newFov = MathUtils.RAD2DEG * (Math.atan(y / xNew) * 2);\n newFov = MathUtils.clamp(newFov, this.minFov, this.maxFov);\n const newDistance = y / Math.tan(MathUtils.DEG2RAD * (newFov / 2));\n size = x / newDistance;\n this._v3_2.setFromMatrixPosition(this._gizmoMatrixState);\n this.setFov(newFov);\n this.applyTransformMatrix(this.applyScale(size, this._v3_2, false));\n const direction = this._gizmos.position.clone().sub(this.camera.position).normalize().multiplyScalar(newDistance / x);\n this._m4_1.makeTranslation(direction.x, direction.y, direction.z);\n }\n }\n break;\n }\n this.dispatchEvent(_changeEvent);\n }\n });\n __publicField(this, \"onSinglePanEnd\", () => {\n if (this._state == STATE.ROTATE) {\n if (!this.enableRotate) {\n return;\n }\n if (this.enableAnimations) {\n const deltaTime = performance.now() - this._timeCurrent;\n if (deltaTime < 120) {\n const w = Math.abs((this._wPrev + this._wCurr) / 2);\n const self = this;\n this._animationId = window.requestAnimationFrame(function(t) {\n self.updateTbState(STATE.ANIMATION_ROTATE, true);\n const rotationAxis = self.calculateRotationAxis(self._cursorPosPrev, self._cursorPosCurr);\n self.onRotationAnim(t, rotationAxis, Math.min(w, self.wMax));\n });\n } else {\n this.updateTbState(STATE.IDLE, false);\n this.activateGizmos(false);\n this.dispatchEvent(_changeEvent);\n }\n } else {\n this.updateTbState(STATE.IDLE, false);\n this.activateGizmos(false);\n this.dispatchEvent(_changeEvent);\n }\n } else if (this._state == STATE.PAN || this._state == STATE.IDLE) {\n this.updateTbState(STATE.IDLE, false);\n if (this.enableGrid) {\n this.disposeGrid();\n }\n this.activateGizmos(false);\n this.dispatchEvent(_changeEvent);\n }\n this.dispatchEvent(_endEvent);\n });\n __publicField(this, \"onDoubleTap\", (event) => {\n if (this.enabled && this.enablePan && this.scene && this.camera && this.domElement) {\n this.dispatchEvent(_startEvent);\n this.setCenter(event.clientX, event.clientY);\n const hitP = this.unprojectOnObj(this.getCursorNDC(_center.x, _center.y, this.domElement), this.camera);\n if (hitP && this.enableAnimations) {\n const self = this;\n if (this._animationId != -1) {\n window.cancelAnimationFrame(this._animationId);\n }\n this._timeStart = -1;\n this._animationId = window.requestAnimationFrame(function(t) {\n self.updateTbState(STATE.ANIMATION_FOCUS, true);\n self.onFocusAnim(t, hitP, self._cameraMatrixState, self._gizmoMatrixState);\n });\n } else if (hitP && !this.enableAnimations) {\n this.updateTbState(STATE.FOCUS, true);\n this.focus(hitP, this.scaleFactor);\n this.updateTbState(STATE.IDLE, false);\n this.dispatchEvent(_changeEvent);\n }\n }\n this.dispatchEvent(_endEvent);\n });\n __publicField(this, \"onDoublePanStart\", () => {\n if (this.enabled && this.enablePan && this.camera && this.domElement) {\n this.dispatchEvent(_startEvent);\n this.updateTbState(STATE.PAN, true);\n this.setCenter(\n (this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2,\n (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2\n );\n const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement, true);\n if (rayDir !== void 0) {\n this._startCursorPosition.copy(rayDir);\n }\n this._currentCursorPosition.copy(this._startCursorPosition);\n this.activateGizmos(false);\n }\n });\n __publicField(this, \"onDoublePanMove\", () => {\n if (this.enabled && this.enablePan && this.camera && this.domElement) {\n this.setCenter(\n (this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2,\n (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2\n );\n if (this._state != STATE.PAN) {\n this.updateTbState(STATE.PAN, true);\n this._startCursorPosition.copy(this._currentCursorPosition);\n }\n const rayDir = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement, true);\n if (rayDir !== void 0)\n this._currentCursorPosition.copy(rayDir);\n this.applyTransformMatrix(this.pan(this._startCursorPosition, this._currentCursorPosition, true));\n this.dispatchEvent(_changeEvent);\n }\n });\n __publicField(this, \"onDoublePanEnd\", () => {\n this.updateTbState(STATE.IDLE, false);\n this.dispatchEvent(_endEvent);\n });\n __publicField(this, \"onRotateStart\", () => {\n var _a;\n if (this.enabled && this.enableRotate) {\n this.dispatchEvent(_startEvent);\n this.updateTbState(STATE.ZROTATE, true);\n this._startFingerRotation = this.getAngle(this._touchCurrent[1], this._touchCurrent[0]) + this.getAngle(this._touchStart[1], this._touchStart[0]);\n this._currentFingerRotation = this._startFingerRotation;\n (_a = this.camera) == null ? void 0 : _a.getWorldDirection(this._rotationAxis);\n if (!this.enablePan && !this.enableZoom) {\n this.activateGizmos(true);\n }\n }\n });\n __publicField(this, \"onRotateMove\", () => {\n var _a;\n if (this.enabled && this.enableRotate && this.camera && this.domElement) {\n this.setCenter(\n (this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2,\n (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2\n );\n let rotationPoint;\n if (this._state != STATE.ZROTATE) {\n this.updateTbState(STATE.ZROTATE, true);\n this._startFingerRotation = this._currentFingerRotation;\n }\n this._currentFingerRotation = this.getAngle(this._touchCurrent[1], this._touchCurrent[0]) + this.getAngle(this._touchStart[1], this._touchStart[0]);\n if (!this.enablePan) {\n rotationPoint = new Vector3().setFromMatrixPosition(this._gizmoMatrixState);\n } else if (this.camera) {\n this._v3_2.setFromMatrixPosition(this._gizmoMatrixState);\n rotationPoint = (_a = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement)) == null ? void 0 : _a.applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._v3_2);\n }\n const amount = MathUtils.DEG2RAD * (this._startFingerRotation - this._currentFingerRotation);\n if (rotationPoint !== void 0) {\n this.applyTransformMatrix(this.zRotate(rotationPoint, amount));\n }\n this.dispatchEvent(_changeEvent);\n }\n });\n __publicField(this, \"onRotateEnd\", () => {\n this.updateTbState(STATE.IDLE, false);\n this.activateGizmos(false);\n this.dispatchEvent(_endEvent);\n });\n __publicField(this, \"onPinchStart\", () => {\n if (this.enabled && this.enableZoom) {\n this.dispatchEvent(_startEvent);\n this.updateTbState(STATE.SCALE, true);\n this._startFingerDistance = this.calculatePointersDistance(this._touchCurrent[0], this._touchCurrent[1]);\n this._currentFingerDistance = this._startFingerDistance;\n this.activateGizmos(false);\n }\n });\n __publicField(this, \"onPinchMove\", () => {\n var _a, _b;\n if (this.enabled && this.enableZoom && this.domElement) {\n this.setCenter(\n (this._touchCurrent[0].clientX + this._touchCurrent[1].clientX) / 2,\n (this._touchCurrent[0].clientY + this._touchCurrent[1].clientY) / 2\n );\n const minDistance = 12;\n if (this._state != STATE.SCALE) {\n this._startFingerDistance = this._currentFingerDistance;\n this.updateTbState(STATE.SCALE, true);\n }\n this._currentFingerDistance = Math.max(\n this.calculatePointersDistance(this._touchCurrent[0], this._touchCurrent[1]),\n minDistance * this._devPxRatio\n );\n const amount = this._currentFingerDistance / this._startFingerDistance;\n let scalePoint;\n if (!this.enablePan) {\n scalePoint = this._gizmos.position;\n } else {\n if (this.camera instanceof OrthographicCamera) {\n scalePoint = (_a = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement)) == null ? void 0 : _a.applyQuaternion(this.camera.quaternion).multiplyScalar(1 / this.camera.zoom).add(this._gizmos.position);\n } else if (this.camera instanceof PerspectiveCamera) {\n scalePoint = (_b = this.unprojectOnTbPlane(this.camera, _center.x, _center.y, this.domElement)) == null ? void 0 : _b.applyQuaternion(this.camera.quaternion).add(this._gizmos.position);\n }\n }\n if (scalePoint !== void 0) {\n this.applyTransformMatrix(this.applyScale(amount, scalePoint));\n }\n this.dispatchEvent(_changeEvent);\n }\n });\n __publicField(this, \"onPinchEnd\", () => {\n this.updateTbState(STATE.IDLE, false);\n this.dispatchEvent(_endEvent);\n });\n __publicField(this, \"onTriplePanStart\", () => {\n if (this.enabled && this.enableZoom && this.domElement) {\n this.dispatchEvent(_startEvent);\n this.updateTbState(STATE.SCALE, true);\n let clientX = 0;\n let clientY = 0;\n const nFingers = this._touchCurrent.length;\n for (let i = 0; i < nFingers; i++) {\n clientX += this._touchCurrent[i].clientX;\n clientY += this._touchCurrent[i].clientY;\n }\n this.setCenter(clientX / nFingers, clientY / nFingers);\n this._startCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);\n this._currentCursorPosition.copy(this._startCursorPosition);\n }\n });\n __publicField(this, \"onTriplePanMove\", () => {\n if (this.enabled && this.enableZoom && this.camera && this.domElement) {\n let clientX = 0;\n let clientY = 0;\n const nFingers = this._touchCurrent.length;\n for (let i = 0; i < nFingers; i++) {\n clientX += this._touchCurrent[i].clientX;\n clientY += this._touchCurrent[i].clientY;\n }\n this.setCenter(clientX / nFingers, clientY / nFingers);\n const screenNotches = 8;\n this._currentCursorPosition.setY(this.getCursorNDC(_center.x, _center.y, this.domElement).y * 0.5);\n const movement = this._currentCursorPosition.y - this._startCursorPosition.y;\n let size = 1;\n if (movement < 0) {\n size = 1 / Math.pow(this.scaleFactor, -movement * screenNotches);\n } else if (movement > 0) {\n size = Math.pow(this.scaleFactor, movement * screenNotches);\n }\n this._v3_1.setFromMatrixPosition(this._cameraMatrixState);\n const x = this._v3_1.distanceTo(this._gizmos.position);\n let xNew = x / size;\n xNew = MathUtils.clamp(xNew, this.minDistance, this.maxDistance);\n const y = x * Math.tan(MathUtils.DEG2RAD * this._fovState * 0.5);\n let newFov = MathUtils.RAD2DEG * (Math.atan(y / xNew) * 2);\n newFov = MathUtils.clamp(newFov, this.minFov, this.maxFov);\n const newDistance = y / Math.tan(MathUtils.DEG2RAD * (newFov / 2));\n size = x / newDistance;\n this._v3_2.setFromMatrixPosition(this._gizmoMatrixState);\n this.setFov(newFov);\n this.applyTransformMatrix(this.applyScale(size, this._v3_2, false));\n const direction = this._gizmos.position.clone().sub(this.camera.position).normalize().multiplyScalar(newDistance / x);\n this._m4_1.makeTranslation(direction.x, direction.y, direction.z);\n this.dispatchEvent(_changeEvent);\n }\n });\n __publicField(this, \"onTriplePanEnd\", () => {\n this.updateTbState(STATE.IDLE, false);\n this.dispatchEvent(_endEvent);\n });\n /**\n * Set _center's x/y coordinates\n * @param {Number} clientX\n * @param {Number} clientY\n */\n __publicField(this, \"setCenter\", (clientX, clientY) => {\n _center.x = clientX;\n _center.y = clientY;\n });\n /**\n * Set default mouse actions\n */\n __publicField(this, \"initializeMouseActions\", () => {\n this.setMouseAction(\"PAN\", 0, \"CTRL\");\n this.setMouseAction(\"PAN\", 2);\n this.setMouseAction(\"ROTATE\", 0);\n this.setMouseAction(\"ZOOM\", \"WHEEL\");\n this.setMouseAction(\"ZOOM\", 1);\n this.setMouseAction(\"FOV\", \"WHEEL\", \"SHIFT\");\n this.setMouseAction(\"FOV\", 1, \"SHIFT\");\n });\n /**\n * Set a new mouse action by specifying the operation to be performed and a mouse/key combination. In case of conflict, replaces the existing one\n * @param {String} operation The operation to be performed ('PAN', 'ROTATE', 'ZOOM', 'FOV)\n * @param {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches\n * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed\n * @returns {Boolean} True if the mouse action has been successfully added, false otherwise\n */\n __publicField(this, \"setMouseAction\", (operation, mouse, key = null) => {\n const operationInput = [\"PAN\", \"ROTATE\", \"ZOOM\", \"FOV\"];\n const mouseInput = [0, 1, 2, \"WHEEL\"];\n const keyInput = [\"CTRL\", \"SHIFT\", null];\n let state;\n if (!operationInput.includes(operation) || !mouseInput.includes(mouse) || !keyInput.includes(key)) {\n return false;\n }\n if (mouse == \"WHEEL\") {\n if (operation != \"ZOOM\" && operation != \"FOV\") {\n return false;\n }\n }\n switch (operation) {\n case \"PAN\":\n state = STATE.PAN;\n break;\n case \"ROTATE\":\n state = STATE.ROTATE;\n break;\n case \"ZOOM\":\n state = STATE.SCALE;\n break;\n case \"FOV\":\n state = STATE.FOV;\n break;\n }\n const action = {\n operation,\n mouse,\n key,\n state\n };\n for (let i = 0; i < this.mouseActions.length; i++) {\n if (this.mouseActions[i].mouse == action.mouse && this.mouseActions[i].key == action.key) {\n this.mouseActions.splice(i, 1, action);\n return true;\n }\n }\n this.mouseActions.push(action);\n return true;\n });\n /**\n * Return the operation associated to a mouse/keyboard combination\n * @param {*} mouse A mouse button (0, 1, 2) or 'WHEEL' for wheel notches\n * @param {*} key The keyboard modifier ('CTRL', 'SHIFT') or null if key is not needed\n * @returns The operation if it has been found, null otherwise\n */\n __publicField(this, \"getOpFromAction\", (mouse, key) => {\n let action;\n for (let i = 0; i < this.mouseActions.length; i++) {\n action = this.mouseActions[i];\n if (action.mouse == mouse && action.key == key) {\n return action.operation;\n }\n }\n if (key) {\n for (let i = 0; i < this.mouseActions.length; i++) {\n action = this.mouseActions[i];\n if (action.mouse == mouse && action.key == null) {\n return action.operation;\n }\n }\n }\n return null;\n });\n /**\n * Get the operation associated to mouse and key combination and returns the corresponding FSA state\n * @param {Number} mouse Mouse button\n * @param {String} key Keyboard modifier\n * @returns The FSA state obtained from the operation associated to mouse/keyboard combination\n */\n __publicField(this, \"getOpStateFromAction\", (mouse, key) => {\n let action;\n for (let i = 0; i < this.mouseActions.length; i++) {\n action = this.mouseActions[i];\n if (action.mouse == mouse && action.key == key) {\n return action.state;\n }\n }\n if (key) {\n for (let i = 0; i < this.mouseActions.length; i++) {\n action = this.mouseActions[i];\n if (action.mouse == mouse && action.key == null) {\n return action.state;\n }\n }\n }\n return null;\n });\n /**\n * Calculate the angle between two pointers\n * @param {PointerEvent} p1\n * @param {PointerEvent} p2\n * @returns {Number} The angle between two pointers in degrees\n */\n __publicField(this, \"getAngle\", (p1, p2) => {\n return Math.atan2(p2.clientY - p1.clientY, p2.clientX - p1.clientX) * 180 / Math.PI;\n });\n /**\n * Update a PointerEvent inside current pointerevents array\n * @param {PointerEvent} event\n */\n __publicField(this, \"updateTouchEvent\", (event) => {\n for (let i = 0; i < this._touchCurrent.length; i++) {\n if (this._touchCurrent[i].pointerId == event.pointerId) {\n this._touchCurrent.splice(i, 1, event);\n break;\n }\n }\n });\n /**\n * Calculate the angular speed\n * @param {Number} p0 Position at t0\n * @param {Number} p1 Position at t1\n * @param {Number} t0 Initial time in milliseconds\n * @param {Number} t1 Ending time in milliseconds\n */\n __publicField(this, \"calculateAngularSpeed\", (p0, p1, t0, t1) => {\n const s = p1 - p0;\n const t = (t1 - t0) / 1e3;\n if (t == 0) {\n return 0;\n }\n return s / t;\n });\n /**\n * Calculate the distance between two pointers\n * @param {PointerEvent} p0 The first pointer\n * @param {PointerEvent} p1 The second pointer\n * @returns {number} The distance between the two pointers\n */\n __publicField(this, \"calculatePointersDistance\", (p0, p1) => {\n return Math.sqrt(Math.pow(p1.clientX - p0.clientX, 2) + Math.pow(p1.clientY - p0.clientY, 2));\n });\n /**\n * Calculate the rotation axis as the vector perpendicular between two vectors\n * @param {Vector3} vec1 The first vector\n * @param {Vector3} vec2 The second vector\n * @returns {Vector3} The normalized rotation axis\n */\n __publicField(this, \"calculateRotationAxis\", (vec1, vec2) => {\n this._rotationMatrix.extractRotation(this._cameraMatrixState);\n this._quat.setFromRotationMatrix(this._rotationMatrix);\n this._rotationAxis.crossVectors(vec1, vec2).applyQuaternion(this._quat);\n return this._rotationAxis.normalize().clone();\n });\n /**\n * Calculate the trackball radius so that gizmo's diamater will be 2/3 of the minimum side of the camera frustum\n * @param {Camera} camera\n * @returns {Number} The trackball radius\n */\n __publicField(this, \"calculateTbRadius\", (camera) => {\n const factor = 0.67;\n const distance = camera.position.distanceTo(this._gizmos.position);\n if (camera instanceof PerspectiveCamera) {\n const halfFovV = MathUtils.DEG2RAD * camera.fov * 0.5;\n const halfFovH = Math.atan(camera.aspect * Math.tan(halfFovV));\n return Math.tan(Math.min(halfFovV, halfFovH)) * distance * factor;\n } else if (camera instanceof OrthographicCamera) {\n return Math.min(camera.top, camera.right) * factor;\n }\n });\n /**\n * Focus operation consist of positioning the point of interest in front of the camera and a slightly zoom in\n * @param {Vector3} point The point of interest\n * @param {Number} size Scale factor\n * @param {Number} amount Amount of operation to be completed (used for focus animations, default is complete full operation)\n */\n __publicField(this, \"focus\", (point, size, amount = 1) => {\n if (this.camera) {\n const focusPoint = point.clone();\n focusPoint.sub(this._gizmos.position).multiplyScalar(amount);\n this._translationMatrix.makeTranslation(focusPoint.x, focusPoint.y, focusPoint.z);\n const gizmoStateTemp = this._gizmoMatrixState.clone();\n this._gizmoMatrixState.premultiply(this._translationMatrix);\n this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);\n const cameraStateTemp = this._cameraMatrixState.clone();\n this._cameraMatrixState.premultiply(this._translationMatrix);\n this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale);\n if (this.enableZoom) {\n this.applyTransformMatrix(this.applyScale(size, this._gizmos.position));\n }\n this._gizmoMatrixState.copy(gizmoStateTemp);\n this._cameraMatrixState.copy(cameraStateTemp);\n }\n });\n /**\n * Draw a grid and add it to the scene\n */\n __publicField(this, \"drawGrid\", () => {\n if (this.scene) {\n const color = 8947848;\n const multiplier = 3;\n let size, divisions, maxLength, tick;\n if (this.camera instanceof OrthographicCamera) {\n const width = this.camera.right - this.camera.left;\n const height = this.camera.bottom - this.camera.top;\n maxLength = Math.max(width, height);\n tick = maxLength / 20;\n size = maxLength / this.camera.zoom * multiplier;\n divisions = size / tick * this.camera.zoom;\n } else if (this.camera instanceof PerspectiveCamera) {\n const distance = this.camera.position.distanceTo(this._gizmos.position);\n const halfFovV = MathUtils.DEG2RAD * this.camera.fov * 0.5;\n const halfFovH = Math.atan(this.camera.aspect * Math.tan(halfFovV));\n maxLength = Math.tan(Math.max(halfFovV, halfFovH)) * distance * 2;\n tick = maxLength / 20;\n size = maxLength * multiplier;\n divisions = size / tick;\n }\n if (this._grid == null && this.camera) {\n this._grid = new GridHelper(size, divisions, color, color);\n this._grid.position.copy(this._gizmos.position);\n this._gridPosition.copy(this._grid.position);\n this._grid.quaternion.copy(this.camera.quaternion);\n this._grid.rotateX(Math.PI * 0.5);\n this.scene.add(this._grid);\n }\n }\n });\n __publicField(this, \"connect\", (domElement) => {\n if (domElement === document) {\n console.error(\n 'THREE.ArcballControls: \"document\" should not be used as the target \"domElement\". Please use \"renderer.domElement\" instead.'\n );\n }\n this.domElement = domElement;\n this.domElement.style.touchAction = \"none\";\n this.domElement.addEventListener(\"contextmenu\", this.onContextMenu);\n this.domElement.addEventListener(\"pointerdown\", this.onPointerDown);\n this.domElement.addEventListener(\"pointercancel\", this.onPointerCancel);\n this.domElement.addEventListener(\"wheel\", this.onWheel);\n });\n /**\n * Remove all listeners, stop animations and clean scene\n */\n __publicField(this, \"dispose\", () => {\n var _a, _b, _c, _d, _e;\n if (this._animationId != -1) {\n window.cancelAnimationFrame(this._animationId);\n }\n (_a = this.domElement) == null ? void 0 : _a.removeEventListener(\"pointerdown\", this.onPointerDown);\n (_b = this.domElement) == null ? void 0 : _b.removeEventListener(\"pointercancel\", this.onPointerCancel);\n (_c = this.domElement) == null ? void 0 : _c.removeEventListener(\"wheel\", this.onWheel);\n (_d = this.domElement) == null ? void 0 : _d.removeEventListener(\"contextmenu\", this.onContextMenu);\n window.removeEventListener(\"pointermove\", this.onPointerMove);\n window.removeEventListener(\"pointerup\", this.onPointerUp);\n window.removeEventListener(\"resize\", this.onWindowResize);\n (_e = this.scene) == null ? void 0 : _e.remove(this._gizmos);\n this.disposeGrid();\n });\n /**\n * remove the grid from the scene\n */\n __publicField(this, \"disposeGrid\", () => {\n if (this._grid && this.scene) {\n this.scene.remove(this._grid);\n this._grid = null;\n }\n });\n /**\n * Compute the easing out cubic function for ease out effect in animation\n * @param {Number} t The absolute progress of the animation in the bound of 0 (beginning of the) and 1 (ending of animation)\n * @returns {Number} Result of easing out cubic at time t\n */\n __publicField(this, \"easeOutCubic\", (t) => {\n return 1 - Math.pow(1 - t, 3);\n });\n /**\n * Make rotation gizmos more or less visible\n * @param {Boolean} isActive If true, make gizmos more visible\n */\n __publicField(this, \"activateGizmos\", (isActive) => {\n for (const gizmo of this._gizmos.children) {\n gizmo.material.setValues({ opacity: isActive ? 1 : 0.6 });\n }\n });\n /**\n * Calculate the cursor position in NDC\n * @param {number} x Cursor horizontal coordinate within the canvas\n * @param {number} y Cursor vertical coordinate within the canvas\n * @param {HTMLElement} canvas The canvas where the renderer draws its output\n * @returns {Vector2} Cursor normalized position inside the canvas\n */\n __publicField(this, \"getCursorNDC\", (cursorX, cursorY, canvas) => {\n const canvasRect = canvas.getBoundingClientRect();\n this._v2_1.setX((cursorX - canvasRect.left) / canvasRect.width * 2 - 1);\n this._v2_1.setY((canvasRect.bottom - cursorY) / canvasRect.height * 2 - 1);\n return this._v2_1.clone();\n });\n /**\n * Calculate the cursor position inside the canvas x/y coordinates with the origin being in the center of the canvas\n * @param {Number} x Cursor horizontal coordinate within the canvas\n * @param {Number} y Cursor vertical coordinate within the canvas\n * @param {HTMLElement} canvas The canvas where the renderer draws its output\n * @returns {Vector2} Cursor position inside the canvas\n */\n __publicField(this, \"getCursorPosition\", (cursorX, cursorY, canvas) => {\n this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas));\n if (this.camera instanceof OrthographicCamera) {\n this._v2_1.x *= (this.camera.right - this.camera.left) * 0.5;\n this._v2_1.y *= (this.camera.top - this.camera.bottom) * 0.5;\n }\n return this._v2_1.clone();\n });\n /**\n * Set the camera to be controlled\n * @param {Camera} camera The virtual camera to be controlled\n */\n __publicField(this, \"setCamera\", (camera) => {\n if (camera) {\n camera.lookAt(this.target);\n camera.updateMatrix();\n if (camera instanceof PerspectiveCamera) {\n this._fov0 = camera.fov;\n this._fovState = camera.fov;\n }\n this._cameraMatrixState0.copy(camera.matrix);\n this._cameraMatrixState.copy(this._cameraMatrixState0);\n this._cameraProjectionState.copy(camera.projectionMatrix);\n this._zoom0 = camera.zoom;\n this._zoomState = this._zoom0;\n this._initialNear = camera.near;\n this._nearPos0 = camera.position.distanceTo(this.target) - camera.near;\n this._nearPos = this._initialNear;\n this._initialFar = camera.far;\n this._farPos0 = camera.position.distanceTo(this.target) - camera.far;\n this._farPos = this._initialFar;\n this._up0.copy(camera.up);\n this._upState.copy(camera.up);\n this.camera = camera;\n this.camera.updateProjectionMatrix();\n const tbRadius = this.calculateTbRadius(camera);\n if (tbRadius !== void 0) {\n this._tbRadius = tbRadius;\n }\n this.makeGizmos(this.target, this._tbRadius);\n }\n });\n /**\n * Creates the rotation gizmos matching trackball center and radius\n * @param {Vector3} tbCenter The trackball center\n * @param {number} tbRadius The trackball radius\n */\n __publicField(this, \"makeGizmos\", (tbCenter, tbRadius) => {\n const curve = new EllipseCurve(0, 0, tbRadius, tbRadius);\n const points = curve.getPoints(this._curvePts);\n const curveGeometry = new BufferGeometry().setFromPoints(points);\n const curveMaterialX = new LineBasicMaterial({ color: 16744576, fog: false, transparent: true, opacity: 0.6 });\n const curveMaterialY = new LineBasicMaterial({ color: 8454016, fog: false, transparent: true, opacity: 0.6 });\n const curveMaterialZ = new LineBasicMaterial({ color: 8421631, fog: false, transparent: true, opacity: 0.6 });\n const gizmoX = new Line(curveGeometry, curveMaterialX);\n const gizmoY = new Line(curveGeometry, curveMaterialY);\n const gizmoZ = new Line(curveGeometry, curveMaterialZ);\n const rotation = Math.PI * 0.5;\n gizmoX.rotation.x = rotation;\n gizmoY.rotation.y = rotation;\n this._gizmoMatrixState0.identity().setPosition(tbCenter);\n this._gizmoMatrixState.copy(this._gizmoMatrixState0);\n if (this.camera && this.camera.zoom != 1) {\n const size = 1 / this.camera.zoom;\n this._scaleMatrix.makeScale(size, size, size);\n this._translationMatrix.makeTranslation(-tbCenter.x, -tbCenter.y, -tbCenter.z);\n this._gizmoMatrixState.premultiply(this._translationMatrix).premultiply(this._scaleMatrix);\n this._translationMatrix.makeTranslation(tbCenter.x, tbCenter.y, tbCenter.z);\n this._gizmoMatrixState.premultiply(this._translationMatrix);\n }\n this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);\n this._gizmos.clear();\n this._gizmos.add(gizmoX);\n this._gizmos.add(gizmoY);\n this._gizmos.add(gizmoZ);\n });\n /**\n * Perform animation for focus operation\n * @param {Number} time Instant in which this function is called as performance.now()\n * @param {Vector3} point Point of interest for focus operation\n * @param {Matrix4} cameraMatrix Camera matrix\n * @param {Matrix4} gizmoMatrix Gizmos matrix\n */\n __publicField(this, \"onFocusAnim\", (time, point, cameraMatrix, gizmoMatrix) => {\n if (this._timeStart == -1) {\n this._timeStart = time;\n }\n if (this._state == STATE.ANIMATION_FOCUS) {\n const deltaTime = time - this._timeStart;\n const animTime = deltaTime / this.focusAnimationTime;\n this._gizmoMatrixState.copy(gizmoMatrix);\n if (animTime >= 1) {\n this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);\n this.focus(point, this.scaleFactor);\n this._timeStart = -1;\n this.updateTbState(STATE.IDLE, false);\n this.activateGizmos(false);\n this.dispatchEvent(_changeEvent);\n } else {\n const amount = this.easeOutCubic(animTime);\n const size = 1 - amount + this.scaleFactor * amount;\n this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);\n this.focus(point, size, amount);\n this.dispatchEvent(_changeEvent);\n const self = this;\n this._animationId = window.requestAnimationFrame(function(t) {\n self.onFocusAnim(t, point, cameraMatrix, gizmoMatrix.clone());\n });\n }\n } else {\n this._animationId = -1;\n this._timeStart = -1;\n }\n });\n /**\n * Perform animation for rotation operation\n * @param {Number} time Instant in which this function is called as performance.now()\n * @param {Vector3} rotationAxis Rotation axis\n * @param {number} w0 Initial angular velocity\n */\n __publicField(this, \"onRotationAnim\", (time, rotationAxis, w0) => {\n if (this._timeStart == -1) {\n this._anglePrev = 0;\n this._angleCurrent = 0;\n this._timeStart = time;\n }\n if (this._state == STATE.ANIMATION_ROTATE) {\n const deltaTime = (time - this._timeStart) / 1e3;\n const w = w0 + -this.dampingFactor * deltaTime;\n if (w > 0) {\n this._angleCurrent = 0.5 * -this.dampingFactor * Math.pow(deltaTime, 2) + w0 * deltaTime + 0;\n this.applyTransformMatrix(this.rotate(rotationAxis, this._angleCurrent));\n this.dispatchEvent(_changeEvent);\n const self = this;\n this._animationId = window.requestAnimationFrame(function(t) {\n self.onRotationAnim(t, rotationAxis, w0);\n });\n } else {\n this._animationId = -1;\n this._timeStart = -1;\n this.updateTbState(STATE.IDLE, false);\n this.activateGizmos(false);\n this.dispatchEvent(_changeEvent);\n }\n } else {\n this._animationId = -1;\n this._timeStart = -1;\n if (this._state != STATE.ROTATE) {\n this.activateGizmos(false);\n this.dispatchEvent(_changeEvent);\n }\n }\n });\n /**\n * Perform pan operation moving camera between two points\n * @param {Vector3} p0 Initial point\n * @param {Vector3} p1 Ending point\n * @param {Boolean} adjust If movement should be adjusted considering camera distance (Perspective only)\n */\n __publicField(this, \"pan\", (p0, p1, adjust = false) => {\n if (this.camera) {\n const movement = p0.clone().sub(p1);\n if (this.camera instanceof OrthographicCamera) {\n movement.multiplyScalar(1 / this.camera.zoom);\n }\n if (this.camera instanceof PerspectiveCamera && adjust) {\n this._v3_1.setFromMatrixPosition(this._cameraMatrixState0);\n this._v3_2.setFromMatrixPosition(this._gizmoMatrixState0);\n const distanceFactor = this._v3_1.distanceTo(this._v3_2) / this.camera.position.distanceTo(this._gizmos.position);\n movement.multiplyScalar(1 / distanceFactor);\n }\n this._v3_1.set(movement.x, movement.y, 0).applyQuaternion(this.camera.quaternion);\n this._m4_1.makeTranslation(this._v3_1.x, this._v3_1.y, this._v3_1.z);\n this.setTransformationMatrices(this._m4_1, this._m4_1);\n }\n return _transformation;\n });\n /**\n * Reset trackball\n */\n __publicField(this, \"reset\", () => {\n if (this.camera) {\n this.camera.zoom = this._zoom0;\n if (this.camera instanceof PerspectiveCamera) {\n this.camera.fov = this._fov0;\n }\n this.camera.near = this._nearPos;\n this.camera.far = this._farPos;\n this._cameraMatrixState.copy(this._cameraMatrixState0);\n this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale);\n this.camera.up.copy(this._up0);\n this.camera.updateMatrix();\n this.camera.updateProjectionMatrix();\n this._gizmoMatrixState.copy(this._gizmoMatrixState0);\n this._gizmoMatrixState0.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);\n this._gizmos.updateMatrix();\n const tbRadius = this.calculateTbRadius(this.camera);\n if (tbRadius !== void 0) {\n this._tbRadius = tbRadius;\n }\n this.makeGizmos(this._gizmos.position, this._tbRadius);\n this.camera.lookAt(this._gizmos.position);\n this.updateTbState(STATE.IDLE, false);\n this.dispatchEvent(_changeEvent);\n }\n });\n /**\n * Rotate the camera around an axis passing by trackball's center\n * @param {Vector3} axis Rotation axis\n * @param {number} angle Angle in radians\n * @returns {Object} Object with 'camera' field containing transformation matrix resulting from the operation to be applied to the camera\n */\n __publicField(this, \"rotate\", (axis, angle) => {\n const point = this._gizmos.position;\n this._translationMatrix.makeTranslation(-point.x, -point.y, -point.z);\n this._rotationMatrix.makeRotationAxis(axis, -angle);\n this._m4_1.makeTranslation(point.x, point.y, point.z);\n this._m4_1.multiply(this._rotationMatrix);\n this._m4_1.multiply(this._translationMatrix);\n this.setTransformationMatrices(this._m4_1);\n return _transformation;\n });\n __publicField(this, \"copyState\", () => {\n if (this.camera) {\n const state = JSON.stringify(\n this.camera instanceof OrthographicCamera ? {\n arcballState: {\n cameraFar: this.camera.far,\n cameraMatrix: this.camera.matrix,\n cameraNear: this.camera.near,\n cameraUp: this.camera.up,\n cameraZoom: this.camera.zoom,\n gizmoMatrix: this._gizmos.matrix\n }\n } : {\n arcballState: {\n cameraFar: this.camera.far,\n cameraFov: this.camera.fov,\n cameraMatrix: this.camera.matrix,\n cameraNear: this.camera.near,\n cameraUp: this.camera.up,\n cameraZoom: this.camera.zoom,\n gizmoMatrix: this._gizmos.matrix\n }\n }\n );\n navigator.clipboard.writeText(state);\n }\n });\n __publicField(this, \"pasteState\", () => {\n const self = this;\n navigator.clipboard.readText().then(function resolved(value) {\n self.setStateFromJSON(value);\n });\n });\n /**\n * Save the current state of the control. This can later be recovered with .reset\n */\n __publicField(this, \"saveState\", () => {\n if (!this.camera)\n return;\n this._cameraMatrixState0.copy(this.camera.matrix);\n this._gizmoMatrixState0.copy(this._gizmos.matrix);\n this._nearPos = this.camera.near;\n this._farPos = this.camera.far;\n this._zoom0 = this.camera.zoom;\n this._up0.copy(this.camera.up);\n if (this.camera instanceof PerspectiveCamera) {\n this._fov0 = this.camera.fov;\n }\n });\n /**\n * Perform uniform scale operation around a given point\n * @param {Number} size Scale factor\n * @param {Vector3} point Point around which scale\n * @param {Boolean} scaleGizmos If gizmos should be scaled (Perspective only)\n * @returns {Object} Object with 'camera' and 'gizmo' fields containing transformation matrices resulting from the operation to be applied to the camera and gizmos\n */\n __publicField(this, \"applyScale\", (size, point, scaleGizmos = true) => {\n if (!this.camera)\n return;\n const scalePoint = point.clone();\n let sizeInverse = 1 / size;\n if (this.camera instanceof OrthographicCamera) {\n this.camera.zoom = this._zoomState;\n this.camera.zoom *= size;\n if (this.camera.zoom > this.maxZoom) {\n this.camera.zoom = this.maxZoom;\n sizeInverse = this._zoomState / this.maxZoom;\n } else if (this.camera.zoom < this.minZoom) {\n this.camera.zoom = this.minZoom;\n sizeInverse = this._zoomState / this.minZoom;\n }\n this.camera.updateProjectionMatrix();\n this._v3_1.setFromMatrixPosition(this._gizmoMatrixState);\n this._scaleMatrix.makeScale(sizeInverse, sizeInverse, sizeInverse);\n this._translationMatrix.makeTranslation(-this._v3_1.x, -this._v3_1.y, -this._v3_1.z);\n this._m4_2.makeTranslation(this._v3_1.x, this._v3_1.y, this._v3_1.z).multiply(this._scaleMatrix);\n this._m4_2.multiply(this._translationMatrix);\n scalePoint.sub(this._v3_1);\n const amount = scalePoint.clone().multiplyScalar(sizeInverse);\n scalePoint.sub(amount);\n this._m4_1.makeTranslation(scalePoint.x, scalePoint.y, scalePoint.z);\n this._m4_2.premultiply(this._m4_1);\n this.setTransformationMatrices(this._m4_1, this._m4_2);\n return _transformation;\n }\n if (this.camera instanceof PerspectiveCamera) {\n this._v3_1.setFromMatrixPosition(this._cameraMatrixState);\n this._v3_2.setFromMatrixPosition(this._gizmoMatrixState);\n let distance = this._v3_1.distanceTo(scalePoint);\n let amount = distance - distance * sizeInverse;\n const newDistance = distance - amount;\n if (newDistance < this.minDistance) {\n sizeInverse = this.minDistance / distance;\n amount = distance - distance * sizeInverse;\n } else if (newDistance > this.maxDistance) {\n sizeInverse = this.maxDistance / distance;\n amount = distance - distance * sizeInverse;\n }\n let direction = scalePoint.clone().sub(this._v3_1).normalize().multiplyScalar(amount);\n this._m4_1.makeTranslation(direction.x, direction.y, direction.z);\n if (scaleGizmos) {\n const pos = this._v3_2;\n distance = pos.distanceTo(scalePoint);\n amount = distance - distance * sizeInverse;\n direction = scalePoint.clone().sub(this._v3_2).normalize().multiplyScalar(amount);\n this._translationMatrix.makeTranslation(pos.x, pos.y, pos.z);\n this._scaleMatrix.makeScale(sizeInverse, sizeInverse, sizeInverse);\n this._m4_2.makeTranslation(direction.x, direction.y, direction.z).multiply(this._translationMatrix);\n this._m4_2.multiply(this._scaleMatrix);\n this._translationMatrix.makeTranslation(-pos.x, -pos.y, -pos.z);\n this._m4_2.multiply(this._translationMatrix);\n this.setTransformationMatrices(this._m4_1, this._m4_2);\n } else {\n this.setTransformationMatrices(this._m4_1);\n }\n return _transformation;\n }\n });\n /**\n * Set camera fov\n * @param {Number} value fov to be setted\n */\n __publicField(this, \"setFov\", (value) => {\n if (this.camera instanceof PerspectiveCamera) {\n this.camera.fov = MathUtils.clamp(value, this.minFov, this.maxFov);\n this.camera.updateProjectionMatrix();\n }\n });\n /**\n * Set the trackball's center point\n * @param {Number} x X coordinate\n * @param {Number} y Y coordinate\n * @param {Number} z Z coordinate\n */\n __publicField(this, \"setTarget\", (x, y, z) => {\n if (this.camera) {\n this.target.set(x, y, z);\n this._gizmos.position.set(x, y, z);\n const tbRadius = this.calculateTbRadius(this.camera);\n if (tbRadius !== void 0) {\n this._tbRadius = tbRadius;\n }\n this.makeGizmos(this.target, this._tbRadius);\n this.camera.lookAt(this.target);\n }\n });\n /**\n * Rotate camera around its direction axis passing by a given point by a given angle\n * @param {Vector3} point The point where the rotation axis is passing trough\n * @param {Number} angle Angle in radians\n * @returns The computed transormation matix\n */\n __publicField(this, \"zRotate\", (point, angle) => {\n this._rotationMatrix.makeRotationAxis(this._rotationAxis, angle);\n this._translationMatrix.makeTranslation(-point.x, -point.y, -point.z);\n this._m4_1.makeTranslation(point.x, point.y, point.z);\n this._m4_1.multiply(this._rotationMatrix);\n this._m4_1.multiply(this._translationMatrix);\n this._v3_1.setFromMatrixPosition(this._gizmoMatrixState).sub(point);\n this._v3_2.copy(this._v3_1).applyAxisAngle(this._rotationAxis, angle);\n this._v3_2.sub(this._v3_1);\n this._m4_2.makeTranslation(this._v3_2.x, this._v3_2.y, this._v3_2.z);\n this.setTransformationMatrices(this._m4_1, this._m4_2);\n return _transformation;\n });\n /**\n * Unproject the cursor on the 3D object surface\n * @param {Vector2} cursor Cursor coordinates in NDC\n * @param {Camera} camera Virtual camera\n * @returns {Vector3} The point of intersection with the model, if exist, null otherwise\n */\n __publicField(this, \"unprojectOnObj\", (cursor, camera) => {\n if (!this.scene)\n return null;\n const raycaster = new Raycaster();\n raycaster.near = camera.near;\n raycaster.far = camera.far;\n raycaster.setFromCamera(cursor, camera);\n const intersect = raycaster.intersectObjects(this.scene.children, true);\n for (let i = 0; i < intersect.length; i++) {\n if (intersect[i].object.uuid != this._gizmos.uuid && intersect[i].face) {\n return intersect[i].point.clone();\n }\n }\n return null;\n });\n /**\n * Unproject the cursor on the trackball surface\n * @param {Camera} camera The virtual camera\n * @param {Number} cursorX Cursor horizontal coordinate on screen\n * @param {Number} cursorY Cursor vertical coordinate on screen\n * @param {HTMLElement} canvas The canvas where the renderer draws its output\n * @param {number} tbRadius The trackball radius\n * @returns {Vector3} The unprojected point on the trackball surface\n */\n __publicField(this, \"unprojectOnTbSurface\", (camera, cursorX, cursorY, canvas, tbRadius) => {\n if (camera instanceof OrthographicCamera) {\n this._v2_1.copy(this.getCursorPosition(cursorX, cursorY, canvas));\n this._v3_1.set(this._v2_1.x, this._v2_1.y, 0);\n const x2 = Math.pow(this._v2_1.x, 2);\n const y2 = Math.pow(this._v2_1.y, 2);\n const r2 = Math.pow(this._tbRadius, 2);\n if (x2 + y2 <= r2 * 0.5) {\n this._v3_1.setZ(Math.sqrt(r2 - (x2 + y2)));\n } else {\n this._v3_1.setZ(r2 * 0.5 / Math.sqrt(x2 + y2));\n }\n return this._v3_1;\n }\n if (camera instanceof PerspectiveCamera) {\n this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas));\n this._v3_1.set(this._v2_1.x, this._v2_1.y, -1);\n this._v3_1.applyMatrix4(camera.projectionMatrixInverse);\n const rayDir = this._v3_1.clone().normalize();\n const cameraGizmoDistance = camera.position.distanceTo(this._gizmos.position);\n const radius2 = Math.pow(tbRadius, 2);\n const h = this._v3_1.z;\n const l = Math.sqrt(Math.pow(this._v3_1.x, 2) + Math.pow(this._v3_1.y, 2));\n if (l == 0) {\n rayDir.set(this._v3_1.x, this._v3_1.y, tbRadius);\n return rayDir;\n }\n const m = h / l;\n const q = cameraGizmoDistance;\n let a = Math.pow(m, 2) + 1;\n let b = 2 * m * q;\n let c = Math.pow(q, 2) - radius2;\n let delta = Math.pow(b, 2) - 4 * a * c;\n if (delta >= 0) {\n this._v2_1.setX((-b - Math.sqrt(delta)) / (2 * a));\n this._v2_1.setY(m * this._v2_1.x + q);\n const angle = MathUtils.RAD2DEG * this._v2_1.angle();\n if (angle >= 45) {\n const rayLength2 = Math.sqrt(Math.pow(this._v2_1.x, 2) + Math.pow(cameraGizmoDistance - this._v2_1.y, 2));\n rayDir.multiplyScalar(rayLength2);\n rayDir.z += cameraGizmoDistance;\n return rayDir;\n }\n }\n a = m;\n b = q;\n c = -radius2 * 0.5;\n delta = Math.pow(b, 2) - 4 * a * c;\n this._v2_1.setX((-b - Math.sqrt(delta)) / (2 * a));\n this._v2_1.setY(m * this._v2_1.x + q);\n const rayLength = Math.sqrt(Math.pow(this._v2_1.x, 2) + Math.pow(cameraGizmoDistance - this._v2_1.y, 2));\n rayDir.multiplyScalar(rayLength);\n rayDir.z += cameraGizmoDistance;\n return rayDir;\n }\n });\n /**\n * Unproject the cursor on the plane passing through the center of the trackball orthogonal to the camera\n * @param {Camera} camera The virtual camera\n * @param {Number} cursorX Cursor horizontal coordinate on screen\n * @param {Number} cursorY Cursor vertical coordinate on screen\n * @param {HTMLElement} canvas The canvas where the renderer draws its output\n * @param {Boolean} initialDistance If initial distance between camera and gizmos should be used for calculations instead of current (Perspective only)\n * @returns {Vector3} The unprojected point on the trackball plane\n */\n __publicField(this, \"unprojectOnTbPlane\", (camera, cursorX, cursorY, canvas, initialDistance = false) => {\n if (camera instanceof OrthographicCamera) {\n this._v2_1.copy(this.getCursorPosition(cursorX, cursorY, canvas));\n this._v3_1.set(this._v2_1.x, this._v2_1.y, 0);\n return this._v3_1.clone();\n }\n if (camera instanceof PerspectiveCamera) {\n this._v2_1.copy(this.getCursorNDC(cursorX, cursorY, canvas));\n this._v3_1.set(this._v2_1.x, this._v2_1.y, -1);\n this._v3_1.applyMatrix4(camera.projectionMatrixInverse);\n const rayDir = this._v3_1.clone().normalize();\n const h = this._v3_1.z;\n const l = Math.sqrt(Math.pow(this._v3_1.x, 2) + Math.pow(this._v3_1.y, 2));\n let cameraGizmoDistance;\n if (initialDistance) {\n cameraGizmoDistance = this._v3_1.setFromMatrixPosition(this._cameraMatrixState0).distanceTo(this._v3_2.setFromMatrixPosition(this._gizmoMatrixState0));\n } else {\n cameraGizmoDistance = camera.position.distanceTo(this._gizmos.position);\n }\n if (l == 0) {\n rayDir.set(0, 0, 0);\n return rayDir;\n }\n const m = h / l;\n const q = cameraGizmoDistance;\n const x = -q / m;\n const rayLength = Math.sqrt(Math.pow(q, 2) + Math.pow(x, 2));\n rayDir.multiplyScalar(rayLength);\n rayDir.z = 0;\n return rayDir;\n }\n });\n /**\n * Update camera and gizmos state\n */\n __publicField(this, \"updateMatrixState\", () => {\n if (!this.camera)\n return;\n this._cameraMatrixState.copy(this.camera.matrix);\n this._gizmoMatrixState.copy(this._gizmos.matrix);\n if (this.camera instanceof OrthographicCamera) {\n this._cameraProjectionState.copy(this.camera.projectionMatrix);\n this.camera.updateProjectionMatrix();\n this._zoomState = this.camera.zoom;\n }\n if (this.camera instanceof PerspectiveCamera) {\n this._fovState = this.camera.fov;\n }\n });\n /**\n * Update the trackball FSA\n * @param {STATE} newState New state of the FSA\n * @param {Boolean} updateMatrices If matriices state should be updated\n */\n __publicField(this, \"updateTbState\", (newState, updateMatrices) => {\n this._state = newState;\n if (updateMatrices) {\n this.updateMatrixState();\n }\n });\n __publicField(this, \"update\", () => {\n const EPS = 1e-6;\n if (!this.target.equals(this._currentTarget) && this.camera) {\n this._gizmos.position.set(this.target.x, this.target.y, this.target.z);\n const tbRadius = this.calculateTbRadius(this.camera);\n if (tbRadius !== void 0) {\n this._tbRadius = tbRadius;\n }\n this.makeGizmos(this.target, this._tbRadius);\n this._currentTarget.copy(this.target);\n }\n if (!this.camera)\n return;\n if (this.camera instanceof OrthographicCamera) {\n if (this.camera.zoom > this.maxZoom || this.camera.zoom < this.minZoom) {\n const newZoom = MathUtils.clamp(this.camera.zoom, this.minZoom, this.maxZoom);\n this.applyTransformMatrix(this.applyScale(newZoom / this.camera.zoom, this._gizmos.position, true));\n }\n }\n if (this.camera instanceof PerspectiveCamera) {\n const distance = this.camera.position.distanceTo(this._gizmos.position);\n if (distance > this.maxDistance + EPS || distance < this.minDistance - EPS) {\n const newDistance = MathUtils.clamp(distance, this.minDistance, this.maxDistance);\n this.applyTransformMatrix(this.applyScale(newDistance / distance, this._gizmos.position));\n this.updateMatrixState();\n }\n if (this.camera.fov < this.minFov || this.camera.fov > this.maxFov) {\n this.camera.fov = MathUtils.clamp(this.camera.fov, this.minFov, this.maxFov);\n this.camera.updateProjectionMatrix();\n }\n const oldRadius = this._tbRadius;\n const tbRadius = this.calculateTbRadius(this.camera);\n if (tbRadius !== void 0) {\n this._tbRadius = tbRadius;\n }\n if (oldRadius < this._tbRadius - EPS || oldRadius > this._tbRadius + EPS) {\n const scale = (this._gizmos.scale.x + this._gizmos.scale.y + this._gizmos.scale.z) / 3;\n const newRadius = this._tbRadius / scale;\n const curve = new EllipseCurve(0, 0, newRadius, newRadius);\n const points = curve.getPoints(this._curvePts);\n const curveGeometry = new BufferGeometry().setFromPoints(points);\n for (const gizmo in this._gizmos.children) {\n const child = this._gizmos.children[gizmo];\n child.geometry = curveGeometry;\n }\n }\n }\n this.camera.lookAt(this._gizmos.position);\n });\n __publicField(this, \"setStateFromJSON\", (json) => {\n const state = JSON.parse(json);\n if (state.arcballState && this.camera) {\n this._cameraMatrixState.fromArray(state.arcballState.cameraMatrix.elements);\n this._cameraMatrixState.decompose(this.camera.position, this.camera.quaternion, this.camera.scale);\n this.camera.up.copy(state.arcballState.cameraUp);\n this.camera.near = state.arcballState.cameraNear;\n this.camera.far = state.arcballState.cameraFar;\n this.camera.zoom = state.arcballState.cameraZoom;\n if (this.camera instanceof PerspectiveCamera) {\n this.camera.fov = state.arcballState.cameraFov;\n }\n this._gizmoMatrixState.fromArray(state.arcballState.gizmoMatrix.elements);\n this._gizmoMatrixState.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);\n this.camera.updateMatrix();\n this.camera.updateProjectionMatrix();\n this._gizmos.updateMatrix();\n const tbRadius = this.calculateTbRadius(this.camera);\n if (tbRadius !== void 0) {\n this._tbRadius = tbRadius;\n }\n const gizmoTmp = new Matrix4().copy(this._gizmoMatrixState0);\n this.makeGizmos(this._gizmos.position, this._tbRadius);\n this._gizmoMatrixState0.copy(gizmoTmp);\n this.camera.lookAt(this._gizmos.position);\n this.updateTbState(STATE.IDLE, false);\n this.dispatchEvent(_changeEvent);\n }\n });\n this.camera = null;\n this.domElement = domElement;\n this.scene = scene;\n this.mouseActions = [];\n this._mouseOp = null;\n this._v2_1 = new Vector2();\n this._v3_1 = new Vector3();\n this._v3_2 = new Vector3();\n this._m4_1 = new Matrix4();\n this._m4_2 = new Matrix4();\n this._quat = new Quaternion();\n this._translationMatrix = new Matrix4();\n this._rotationMatrix = new Matrix4();\n this._scaleMatrix = new Matrix4();\n this._rotationAxis = new Vector3();\n this._cameraMatrixState = new Matrix4();\n this._cameraProjectionState = new Matrix4();\n this._fovState = 1;\n this._upState = new Vector3();\n this._zoomState = 1;\n this._nearPos = 0;\n this._farPos = 0;\n this._gizmoMatrixState = new Matrix4();\n this._up0 = new Vector3();\n this._zoom0 = 1;\n this._fov0 = 0;\n this._initialNear = 0;\n this._nearPos0 = 0;\n this._initialFar = 0;\n this._farPos0 = 0;\n this._cameraMatrixState0 = new Matrix4();\n this._gizmoMatrixState0 = new Matrix4();\n this._button = -1;\n this._touchStart = [];\n this._touchCurrent = [];\n this._input = INPUT.NONE;\n this._switchSensibility = 32;\n this._startFingerDistance = 0;\n this._currentFingerDistance = 0;\n this._startFingerRotation = 0;\n this._currentFingerRotation = 0;\n this._devPxRatio = 0;\n this._downValid = true;\n this._nclicks = 0;\n this._downEvents = [];\n this._clickStart = 0;\n this._maxDownTime = 250;\n this._maxInterval = 300;\n this._posThreshold = 24;\n this._movementThreshold = 24;\n this._currentCursorPosition = new Vector3();\n this._startCursorPosition = new Vector3();\n this._grid = null;\n this._gridPosition = new Vector3();\n this._gizmos = new Group();\n this._curvePts = 128;\n this._timeStart = -1;\n this._animationId = -1;\n this.focusAnimationTime = 500;\n this._timePrev = 0;\n this._timeCurrent = 0;\n this._anglePrev = 0;\n this._angleCurrent = 0;\n this._cursorPosPrev = new Vector3();\n this._cursorPosCurr = new Vector3();\n this._wPrev = 0;\n this._wCurr = 0;\n this.adjustNearFar = false;\n this.scaleFactor = 1.1;\n this.dampingFactor = 25;\n this.wMax = 20;\n this.enableAnimations = true;\n this.enableGrid = false;\n this.cursorZoom = false;\n this.minFov = 5;\n this.maxFov = 90;\n this.enabled = true;\n this.enablePan = true;\n this.enableRotate = true;\n this.enableZoom = true;\n this.minDistance = 0;\n this.maxDistance = Infinity;\n this.minZoom = 0;\n this.maxZoom = Infinity;\n this.target = new Vector3(0, 0, 0);\n this._currentTarget = new Vector3(0, 0, 0);\n this._tbRadius = 1;\n this._state = STATE.IDLE;\n this.setCamera(camera);\n if (this.scene) {\n this.scene.add(this._gizmos);\n }\n this._devPxRatio = window.devicePixelRatio;\n this.initializeMouseActions();\n if (this.domElement)\n this.connect(this.domElement);\n window.addEventListener(\"resize\", this.onWindowResize);\n }\n /**\n * Apply a transformation matrix, to the camera and gizmos\n * @param {Object} transformation Object containing matrices to apply to camera and gizmos\n */\n applyTransformMatrix(transformation) {\n if ((transformation == null ? void 0 : transformation.camera) && this.camera) {\n this._m4_1.copy(this._cameraMatrixState).premultiply(transformation.camera);\n this._m4_1.decompose(this.camera.position, this.camera.quaternion, this.camera.scale);\n this.camera.updateMatrix();\n if (this._state == STATE.ROTATE || this._state == STATE.ZROTATE || this._state == STATE.ANIMATION_ROTATE) {\n this.camera.up.copy(this._upState).applyQuaternion(this.camera.quaternion);\n }\n }\n if (transformation == null ? void 0 : transformation.gizmos) {\n this._m4_1.copy(this._gizmoMatrixState).premultiply(transformation.gizmos);\n this._m4_1.decompose(this._gizmos.position, this._gizmos.quaternion, this._gizmos.scale);\n this._gizmos.updateMatrix();\n }\n if ((this._state == STATE.SCALE || this._state == STATE.FOCUS || this._state == STATE.ANIMATION_FOCUS) && this.camera) {\n const tbRadius = this.calculateTbRadius(this.camera);\n if (tbRadius !== void 0) {\n this._tbRadius = tbRadius;\n }\n if (this.adjustNearFar) {\n const cameraDistance = this.camera.position.distanceTo(this._gizmos.position);\n const bb = new Box3();\n bb.setFromObject(this._gizmos);\n const sphere = new Sphere();\n bb.getBoundingSphere(sphere);\n const adjustedNearPosition = Math.max(this._nearPos0, sphere.radius + sphere.center.length());\n const regularNearPosition = cameraDistance - this._initialNear;\n const minNearPos = Math.min(adjustedNearPosition, regularNearPosition);\n this.camera.near = cameraDistance - minNearPos;\n const adjustedFarPosition = Math.min(this._farPos0, -sphere.radius + sphere.center.length());\n const regularFarPosition = cameraDistance - this._initialFar;\n const minFarPos = Math.min(adjustedFarPosition, regularFarPosition);\n this.camera.far = cameraDistance - minFarPos;\n this.camera.updateProjectionMatrix();\n } else {\n let update = false;\n if (this.camera.near != this._initialNear) {\n this.camera.near = this._initialNear;\n update = true;\n }\n if (this.camera.far != this._initialFar) {\n this.camera.far = this._initialFar;\n update = true;\n }\n if (update) {\n this.camera.updateProjectionMatrix();\n }\n }\n }\n }\n /**\n * Set gizmos visibility\n * @param {Boolean} value Value of gizmos visibility\n */\n setGizmosVisible(value) {\n this._gizmos.visible = value;\n this.dispatchEvent(_changeEvent);\n }\n /**\n * Set values in transformation object\n * @param {Matrix4} camera Transformation to be applied to the camera\n * @param {Matrix4} gizmos Transformation to be applied to gizmos\n */\n setTransformationMatrices(camera = null, gizmos = null) {\n if (camera) {\n if (_transformation.camera) {\n _transformation.camera.copy(camera);\n } else {\n _transformation.camera = camera.clone();\n }\n } else {\n _transformation.camera = null;\n }\n if (gizmos) {\n if (_transformation.gizmos) {\n _transformation.gizmos.copy(gizmos);\n } else {\n _transformation.gizmos = gizmos.clone();\n }\n } else {\n _transformation.gizmos = null;\n }\n }\n}\nexport {\n ArcballControls\n};\n//# sourceMappingURL=ArcballControls.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Quaternion, Vector3 } from \"three\";\nimport { EventDispatcher } from \"./EventDispatcher.js\";\nfunction contextmenu(event) {\n event.preventDefault();\n}\nclass FlyControls extends EventDispatcher {\n constructor(object, domElement) {\n super();\n __publicField(this, \"object\");\n __publicField(this, \"domElement\", null);\n __publicField(this, \"movementSpeed\", 1);\n __publicField(this, \"rollSpeed\", 5e-3);\n __publicField(this, \"dragToLook\", false);\n __publicField(this, \"autoForward\", false);\n __publicField(this, \"changeEvent\", { type: \"change\" });\n __publicField(this, \"EPS\", 1e-6);\n __publicField(this, \"tmpQuaternion\", new Quaternion());\n __publicField(this, \"mouseStatus\", 0);\n __publicField(this, \"movementSpeedMultiplier\", 1);\n __publicField(this, \"moveState\", {\n up: 0,\n down: 0,\n left: 0,\n right: 0,\n forward: 0,\n back: 0,\n pitchUp: 0,\n pitchDown: 0,\n yawLeft: 0,\n yawRight: 0,\n rollLeft: 0,\n rollRight: 0\n });\n __publicField(this, \"moveVector\", new Vector3(0, 0, 0));\n __publicField(this, \"rotationVector\", new Vector3(0, 0, 0));\n __publicField(this, \"keydown\", (event) => {\n if (event.altKey) {\n return;\n }\n switch (event.code) {\n case \"ShiftLeft\":\n case \"ShiftRight\":\n this.movementSpeedMultiplier = 0.1;\n break;\n case \"KeyW\":\n this.moveState.forward = 1;\n break;\n case \"KeyS\":\n this.moveState.back = 1;\n break;\n case \"KeyA\":\n this.moveState.left = 1;\n break;\n case \"KeyD\":\n this.moveState.right = 1;\n break;\n case \"KeyR\":\n this.moveState.up = 1;\n break;\n case \"KeyF\":\n this.moveState.down = 1;\n break;\n case \"ArrowUp\":\n this.moveState.pitchUp = 1;\n break;\n case \"ArrowDown\":\n this.moveState.pitchDown = 1;\n break;\n case \"ArrowLeft\":\n this.moveState.yawLeft = 1;\n break;\n case \"ArrowRight\":\n this.moveState.yawRight = 1;\n break;\n case \"KeyQ\":\n this.moveState.rollLeft = 1;\n break;\n case \"KeyE\":\n this.moveState.rollRight = 1;\n break;\n }\n this.updateMovementVector();\n this.updateRotationVector();\n });\n __publicField(this, \"keyup\", (event) => {\n switch (event.code) {\n case \"ShiftLeft\":\n case \"ShiftRight\":\n this.movementSpeedMultiplier = 1;\n break;\n case \"KeyW\":\n this.moveState.forward = 0;\n break;\n case \"KeyS\":\n this.moveState.back = 0;\n break;\n case \"KeyA\":\n this.moveState.left = 0;\n break;\n case \"KeyD\":\n this.moveState.right = 0;\n break;\n case \"KeyR\":\n this.moveState.up = 0;\n break;\n case \"KeyF\":\n this.moveState.down = 0;\n break;\n case \"ArrowUp\":\n this.moveState.pitchUp = 0;\n break;\n case \"ArrowDown\":\n this.moveState.pitchDown = 0;\n break;\n case \"ArrowLeft\":\n this.moveState.yawLeft = 0;\n break;\n case \"ArrowRight\":\n this.moveState.yawRight = 0;\n break;\n case \"KeyQ\":\n this.moveState.rollLeft = 0;\n break;\n case \"KeyE\":\n this.moveState.rollRight = 0;\n break;\n }\n this.updateMovementVector();\n this.updateRotationVector();\n });\n __publicField(this, \"pointerdown\", (event) => {\n if (this.dragToLook) {\n this.mouseStatus++;\n } else {\n switch (event.button) {\n case 0:\n this.moveState.forward = 1;\n break;\n case 2:\n this.moveState.back = 1;\n break;\n }\n this.updateMovementVector();\n }\n });\n __publicField(this, \"pointermove\", (event) => {\n if (!this.dragToLook || this.mouseStatus > 0) {\n const container = this.getContainerDimensions();\n const halfWidth = container.size[0] / 2;\n const halfHeight = container.size[1] / 2;\n this.moveState.yawLeft = -(event.pageX - container.offset[0] - halfWidth) / halfWidth;\n this.moveState.pitchDown = (event.pageY - container.offset[1] - halfHeight) / halfHeight;\n this.updateRotationVector();\n }\n });\n __publicField(this, \"pointerup\", (event) => {\n if (this.dragToLook) {\n this.mouseStatus--;\n this.moveState.yawLeft = this.moveState.pitchDown = 0;\n } else {\n switch (event.button) {\n case 0:\n this.moveState.forward = 0;\n break;\n case 2:\n this.moveState.back = 0;\n break;\n }\n this.updateMovementVector();\n }\n this.updateRotationVector();\n });\n __publicField(this, \"lastQuaternion\", new Quaternion());\n __publicField(this, \"lastPosition\", new Vector3());\n __publicField(this, \"update\", (delta) => {\n const moveMult = delta * this.movementSpeed;\n const rotMult = delta * this.rollSpeed;\n this.object.translateX(this.moveVector.x * moveMult);\n this.object.translateY(this.moveVector.y * moveMult);\n this.object.translateZ(this.moveVector.z * moveMult);\n this.tmpQuaternion.set(this.rotationVector.x * rotMult, this.rotationVector.y * rotMult, this.rotationVector.z * rotMult, 1).normalize();\n this.object.quaternion.multiply(this.tmpQuaternion);\n if (this.lastPosition.distanceToSquared(this.object.position) > this.EPS || 8 * (1 - this.lastQuaternion.dot(this.object.quaternion)) > this.EPS) {\n this.dispatchEvent(this.changeEvent);\n this.lastQuaternion.copy(this.object.quaternion);\n this.lastPosition.copy(this.object.position);\n }\n });\n __publicField(this, \"updateMovementVector\", () => {\n const forward = this.moveState.forward || this.autoForward && !this.moveState.back ? 1 : 0;\n this.moveVector.x = -this.moveState.left + this.moveState.right;\n this.moveVector.y = -this.moveState.down + this.moveState.up;\n this.moveVector.z = -forward + this.moveState.back;\n });\n __publicField(this, \"updateRotationVector\", () => {\n this.rotationVector.x = -this.moveState.pitchDown + this.moveState.pitchUp;\n this.rotationVector.y = -this.moveState.yawRight + this.moveState.yawLeft;\n this.rotationVector.z = -this.moveState.rollRight + this.moveState.rollLeft;\n });\n __publicField(this, \"getContainerDimensions\", () => {\n if (this.domElement != document && !(this.domElement instanceof Document)) {\n return {\n size: [this.domElement.offsetWidth, this.domElement.offsetHeight],\n offset: [this.domElement.offsetLeft, this.domElement.offsetTop]\n };\n } else {\n return {\n size: [window.innerWidth, window.innerHeight],\n offset: [0, 0]\n };\n }\n });\n // https://github.com/mrdoob/three.js/issues/20575\n __publicField(this, \"connect\", (domElement) => {\n this.domElement = domElement;\n if (!(domElement instanceof Document)) {\n domElement.setAttribute(\"tabindex\", -1);\n }\n this.domElement.addEventListener(\"contextmenu\", contextmenu);\n this.domElement.addEventListener(\"pointermove\", this.pointermove);\n this.domElement.addEventListener(\"pointerdown\", this.pointerdown);\n this.domElement.addEventListener(\"pointerup\", this.pointerup);\n window.addEventListener(\"keydown\", this.keydown);\n window.addEventListener(\"keyup\", this.keyup);\n });\n __publicField(this, \"dispose\", () => {\n this.domElement.removeEventListener(\"contextmenu\", contextmenu);\n this.domElement.removeEventListener(\"pointermove\", this.pointermove);\n this.domElement.removeEventListener(\"pointerdown\", this.pointerdown);\n this.domElement.removeEventListener(\"pointerup\", this.pointerup);\n window.removeEventListener(\"keydown\", this.keydown);\n window.removeEventListener(\"keyup\", this.keyup);\n });\n this.object = object;\n if (domElement !== void 0)\n this.connect(domElement);\n this.updateMovementVector();\n this.updateRotationVector();\n }\n}\nexport {\n FlyControls\n};\n//# sourceMappingURL=FlyControls.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { OrthographicCamera, PlaneGeometry, Mesh } from \"three\";\nclass Pass {\n constructor() {\n // if set to true, the pass is processed by the composer\n __publicField(this, \"enabled\", true);\n // if set to true, the pass indicates to swap read and write buffer after rendering\n __publicField(this, \"needsSwap\", true);\n // if set to true, the pass clears its buffer before rendering\n __publicField(this, \"clear\", false);\n // if set to true, the result of the pass is rendered to screen. This is set automatically by EffectComposer.\n __publicField(this, \"renderToScreen\", false);\n }\n setSize(width, height) {\n }\n render(renderer, writeBuffer, readBuffer, deltaTime, maskActive) {\n console.error(\"THREE.Pass: .render() must be implemented in derived pass.\");\n }\n dispose() {\n }\n}\nclass FullScreenQuad {\n constructor(material) {\n __publicField(this, \"camera\", new OrthographicCamera(-1, 1, 1, -1, 0, 1));\n __publicField(this, \"geometry\", new PlaneGeometry(2, 2));\n __publicField(this, \"mesh\");\n this.mesh = new Mesh(this.geometry, material);\n }\n get material() {\n return this.mesh.material;\n }\n set material(value) {\n this.mesh.material = value;\n }\n dispose() {\n this.mesh.geometry.dispose();\n }\n render(renderer) {\n renderer.render(this.mesh, this.camera);\n }\n}\nexport {\n FullScreenQuad,\n Pass\n};\n//# sourceMappingURL=Pass.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { ShaderMaterial, UniformsUtils } from \"three\";\nimport { Pass, FullScreenQuad } from \"./Pass.js\";\nclass ShaderPass extends Pass {\n constructor(shader, textureID = \"tDiffuse\") {\n super();\n __publicField(this, \"textureID\");\n __publicField(this, \"uniforms\");\n __publicField(this, \"material\");\n __publicField(this, \"fsQuad\");\n this.textureID = textureID;\n if (shader instanceof ShaderMaterial) {\n this.uniforms = shader.uniforms;\n this.material = shader;\n } else {\n this.uniforms = UniformsUtils.clone(shader.uniforms);\n this.material = new ShaderMaterial({\n defines: Object.assign({}, shader.defines),\n uniforms: this.uniforms,\n vertexShader: shader.vertexShader,\n fragmentShader: shader.fragmentShader\n });\n }\n this.fsQuad = new FullScreenQuad(this.material);\n }\n render(renderer, writeBuffer, readBuffer) {\n if (this.uniforms[this.textureID]) {\n this.uniforms[this.textureID].value = readBuffer.texture;\n }\n this.fsQuad.material = this.material;\n if (this.renderToScreen) {\n renderer.setRenderTarget(null);\n this.fsQuad.render(renderer);\n } else {\n renderer.setRenderTarget(writeBuffer);\n if (this.clear)\n renderer.clear(renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil);\n this.fsQuad.render(renderer);\n }\n }\n dispose() {\n this.fsQuad.dispose();\n this.material.dispose();\n }\n}\nexport {\n ShaderPass\n};\n//# sourceMappingURL=ShaderPass.js.map\n","import { ShaderPass } from \"./ShaderPass.js\";\nconst LUTShader = {\n defines: {\n USE_3DTEXTURE: 1\n },\n uniforms: {\n lut3d: { value: null },\n lut: { value: null },\n lutSize: { value: 0 },\n tDiffuse: { value: null },\n intensity: { value: 1 }\n },\n vertexShader: (\n /* glsl */\n `\n\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t}\n\n\t`\n ),\n fragmentShader: (\n /* glsl */\n `\n\n\t\tuniform float lutSize;\n\t\t#if USE_3DTEXTURE\n\t\tprecision highp sampler3D;\n\t\tuniform sampler3D lut3d;\n\t\t#else\n\t\tuniform sampler2D lut;\n\n\t\tvec3 lutLookup( sampler2D tex, float size, vec3 rgb ) {\n\n\t\t\tfloat sliceHeight = 1.0 / size;\n\t\t\tfloat yPixelHeight = 1.0 / ( size * size );\n\n\t\t\t// Get the slices on either side of the sample\n\t\t\tfloat slice = rgb.b * size;\n\t\t\tfloat interp = fract( slice );\n\t\t\tfloat slice0 = slice - interp;\n\t\t\tfloat centeredInterp = interp - 0.5;\n\n\t\t\tfloat slice1 = slice0 + sign( centeredInterp );\n\n\t\t\t// Pull y sample in by half a pixel in each direction to avoid color\n\t\t\t// bleeding from adjacent slices.\n\t\t\tfloat greenOffset = clamp( rgb.g * sliceHeight, yPixelHeight * 0.5, sliceHeight - yPixelHeight * 0.5 );\n\n\t\t\tvec2 uv0 = vec2(\n\t\t\t\trgb.r,\n\t\t\t\tslice0 * sliceHeight + greenOffset\n\t\t\t);\n\t\t\tvec2 uv1 = vec2(\n\t\t\t\trgb.r,\n\t\t\t\tslice1 * sliceHeight + greenOffset\n\t\t\t);\n\n\t\t\tvec3 sample0 = texture2D( tex, uv0 ).rgb;\n\t\t\tvec3 sample1 = texture2D( tex, uv1 ).rgb;\n\n\t\t\treturn mix( sample0, sample1, abs( centeredInterp ) );\n\n\t\t}\n\t\t#endif\n\n\t\tvarying vec2 vUv;\n\t\tuniform float intensity;\n\t\tuniform sampler2D tDiffuse;\n\t\tvoid main() {\n\n\t\t\tvec4 val = texture2D( tDiffuse, vUv );\n\t\t\tvec4 lutVal;\n\n\t\t\t// pull the sample in by half a pixel so the sample begins\n\t\t\t// at the center of the edge pixels.\n\t\t\tfloat pixelWidth = 1.0 / lutSize;\n\t\t\tfloat halfPixelWidth = 0.5 / lutSize;\n\t\t\tvec3 uvw = vec3( halfPixelWidth ) + val.rgb * ( 1.0 - pixelWidth );\n\n\t\t\t#if USE_3DTEXTURE\n\n\t\t\tlutVal = vec4( texture( lut3d, uvw ).rgb, val.a );\n\n\t\t\t#else\n\n\t\t\tlutVal = vec4( lutLookup( lut, lutSize, uvw ), val.a );\n\n\t\t\t#endif\n\n\t\t\tgl_FragColor = vec4( mix( val, lutVal, intensity ) );\n\n\t\t}\n\n\t`\n )\n};\nclass LUTPass extends ShaderPass {\n set lut(v) {\n const material = this.material;\n if (v !== this.lut) {\n material.uniforms.lut3d.value = null;\n material.uniforms.lut.value = null;\n if (v) {\n const is3dTextureDefine = v.isData3DTexture ? 1 : 0;\n if (is3dTextureDefine !== material.defines.USE_3DTEXTURE) {\n material.defines.USE_3DTEXTURE = is3dTextureDefine;\n material.needsUpdate = true;\n }\n material.uniforms.lutSize.value = v.image.width;\n if (v.isData3DTexture) {\n material.uniforms.lut3d.value = v;\n } else {\n material.uniforms.lut.value = v;\n }\n }\n }\n }\n get lut() {\n return this.material.uniforms.lut.value || this.material.uniforms.lut3d.value;\n }\n set intensity(v) {\n this.material.uniforms.intensity.value = v;\n }\n get intensity() {\n return this.material.uniforms.intensity.value;\n }\n constructor(options = {}) {\n super(LUTShader);\n this.lut = options.lut || null;\n this.intensity = \"intensity\" in options ? options.intensity : 1;\n }\n}\nexport {\n LUTPass\n};\n//# sourceMappingURL=LUTPass.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Pass } from \"./Pass.js\";\nimport { Color } from \"three\";\nclass ClearPass extends Pass {\n constructor(clearColor, clearAlpha) {\n super();\n __publicField(this, \"clearColor\");\n __publicField(this, \"clearAlpha\");\n __publicField(this, \"_oldClearColor\");\n this.needsSwap = false;\n this.clearColor = clearColor !== void 0 ? clearColor : 0;\n this.clearAlpha = clearAlpha !== void 0 ? clearAlpha : 0;\n this._oldClearColor = new Color();\n }\n render(renderer, writeBuffer, readBuffer) {\n let oldClearAlpha;\n if (this.clearColor) {\n renderer.getClearColor(this._oldClearColor);\n oldClearAlpha = renderer.getClearAlpha();\n renderer.setClearColor(this.clearColor, this.clearAlpha);\n }\n renderer.setRenderTarget(this.renderToScreen ? null : readBuffer);\n renderer.clear();\n if (this.clearColor) {\n renderer.setClearColor(this._oldClearColor, oldClearAlpha);\n }\n }\n}\nexport {\n ClearPass\n};\n//# sourceMappingURL=ClearPass.js.map\n","const DigitalGlitch = {\n uniforms: {\n tDiffuse: { value: null },\n //diffuse texture\n tDisp: { value: null },\n //displacement texture for digital glitch squares\n byp: { value: 0 },\n //apply the glitch ?\n amount: { value: 0.08 },\n angle: { value: 0.02 },\n seed: { value: 0.02 },\n seed_x: { value: 0.02 },\n //-1,1\n seed_y: { value: 0.02 },\n //-1,1\n distortion_x: { value: 0.5 },\n distortion_y: { value: 0.6 },\n col_s: { value: 0.05 }\n },\n vertexShader: (\n /* glsl */\n `\n\t\tvarying vec2 vUv;\n\n\t\tvoid main() {\n\t\t\tvUv = uv;\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t}\n\t`\n ),\n fragmentShader: (\n /* glsl */\n `\n\t\tuniform int byp; //should we apply the glitch ?\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform sampler2D tDisp;\n\t\tuniform float amount;\n\t\tuniform float angle;\n\t\tuniform float seed;\n\t\tuniform float seed_x;\n\t\tuniform float seed_y;\n\t\tuniform float distortion_x;\n\t\tuniform float distortion_y;\n\t\tuniform float col_s;\n\n\t\tvarying vec2 vUv;\n\n\t\tfloat rand(vec2 co){\n\t\t\treturn fract(sin(dot(co.xy ,vec2(12.9898,78.233))) * 43758.5453);\n\t\t}\n\n\t\tvoid main() {\n\t\t\tif(byp<1) {\n\t\t\t\tvec2 p = vUv;\n\t\t\t\tfloat xs = floor(gl_FragCoord.x / 0.5);\n\t\t\t\tfloat ys = floor(gl_FragCoord.y / 0.5);\n\t\t//based on staffantans glitch shader for unity https://github.com/staffantan/unityglitch\n\t\t\t\tvec4 normal = texture2D (tDisp, p*seed*seed);\n\t\t\t\tif(p.y<distortion_x+col_s && p.y>distortion_x-col_s*seed) {\n\t\t\t\t\tif(seed_x>0.){\n\t\t\t\t\t\tp.y = 1. - (p.y + distortion_y);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tp.y = distortion_y;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(p.x<distortion_y+col_s && p.x>distortion_y-col_s*seed) {\n\t\t\t\t\tif(seed_y>0.){\n\t\t\t\t\t\tp.x=distortion_x;\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tp.x = 1. - (p.x + distortion_x);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tp.x+=normal.x*seed_x*(seed/5.);\n\t\t\t\tp.y+=normal.y*seed_y*(seed/5.);\n\t\t//base from RGB shift shader\n\t\t\t\tvec2 offset = amount * vec2( cos(angle), sin(angle));\n\t\t\t\tvec4 cr = texture2D(tDiffuse, p + offset);\n\t\t\t\tvec4 cga = texture2D(tDiffuse, p);\n\t\t\t\tvec4 cb = texture2D(tDiffuse, p - offset);\n\t\t\t\tgl_FragColor = vec4(cr.r, cga.g, cb.b, cga.a);\n\t\t//add noise\n\t\t\t\tvec4 snow = 200.*amount*vec4(rand(vec2(xs * seed,ys * seed*50.))*0.2);\n\t\t\t\tgl_FragColor = gl_FragColor+ snow;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tgl_FragColor=texture2D (tDiffuse, vUv);\n\t\t\t}\n\t\t}\n`\n )\n};\nexport {\n DigitalGlitch\n};\n//# sourceMappingURL=DigitalGlitch.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Pass, FullScreenQuad } from \"./Pass.js\";\nimport { UniformsUtils, ShaderMaterial, MathUtils, DataTexture, RedFormat, FloatType } from \"three\";\nimport { DigitalGlitch } from \"../shaders/DigitalGlitch.js\";\nclass GlitchPass extends Pass {\n constructor(dt_size = 64) {\n super();\n __publicField(this, \"material\");\n __publicField(this, \"fsQuad\");\n __publicField(this, \"goWild\");\n __publicField(this, \"curF\");\n __publicField(this, \"randX\");\n __publicField(this, \"uniforms\");\n this.uniforms = UniformsUtils.clone(DigitalGlitch.uniforms);\n this.uniforms[\"tDisp\"].value = this.generateHeightmap(dt_size);\n this.material = new ShaderMaterial({\n uniforms: this.uniforms,\n vertexShader: DigitalGlitch.vertexShader,\n fragmentShader: DigitalGlitch.fragmentShader\n });\n this.fsQuad = new FullScreenQuad(this.material);\n this.goWild = false;\n this.curF = 0;\n this.generateTrigger();\n }\n render(renderer, writeBuffer, readBuffer) {\n this.uniforms[\"tDiffuse\"].value = readBuffer.texture;\n this.uniforms[\"seed\"].value = Math.random();\n this.uniforms[\"byp\"].value = 0;\n if (this.curF % this.randX == 0 || this.goWild == true) {\n this.uniforms[\"amount\"].value = Math.random() / 30;\n this.uniforms[\"angle\"].value = MathUtils.randFloat(-Math.PI, Math.PI);\n this.uniforms[\"seed_x\"].value = MathUtils.randFloat(-1, 1);\n this.uniforms[\"seed_y\"].value = MathUtils.randFloat(-1, 1);\n this.uniforms[\"distortion_x\"].value = MathUtils.randFloat(0, 1);\n this.uniforms[\"distortion_y\"].value = MathUtils.randFloat(0, 1);\n this.curF = 0;\n this.generateTrigger();\n } else if (this.curF % this.randX < this.randX / 5) {\n this.uniforms[\"amount\"].value = Math.random() / 90;\n this.uniforms[\"angle\"].value = MathUtils.randFloat(-Math.PI, Math.PI);\n this.uniforms[\"distortion_x\"].value = MathUtils.randFloat(0, 1);\n this.uniforms[\"distortion_y\"].value = MathUtils.randFloat(0, 1);\n this.uniforms[\"seed_x\"].value = MathUtils.randFloat(-0.3, 0.3);\n this.uniforms[\"seed_y\"].value = MathUtils.randFloat(-0.3, 0.3);\n } else if (this.goWild == false) {\n this.uniforms[\"byp\"].value = 1;\n }\n this.curF++;\n if (this.renderToScreen) {\n renderer.setRenderTarget(null);\n this.fsQuad.render(renderer);\n } else {\n renderer.setRenderTarget(writeBuffer);\n if (this.clear)\n renderer.clear();\n this.fsQuad.render(renderer);\n }\n }\n generateTrigger() {\n this.randX = MathUtils.randInt(120, 240);\n }\n generateHeightmap(dt_size) {\n const data_arr = new Float32Array(dt_size * dt_size);\n const length = dt_size * dt_size;\n for (let i = 0; i < length; i++) {\n const val = MathUtils.randFloat(0, 1);\n data_arr[i] = val;\n }\n const texture = new DataTexture(data_arr, dt_size, dt_size, RedFormat, FloatType);\n texture.needsUpdate = true;\n return texture;\n }\n}\nexport {\n GlitchPass\n};\n//# sourceMappingURL=GlitchPass.js.map\n","const HalftoneShader = {\n uniforms: {\n tDiffuse: { value: null },\n shape: { value: 1 },\n radius: { value: 4 },\n rotateR: { value: Math.PI / 12 * 1 },\n rotateG: { value: Math.PI / 12 * 2 },\n rotateB: { value: Math.PI / 12 * 3 },\n scatter: { value: 0 },\n width: { value: 1 },\n height: { value: 1 },\n blending: { value: 1 },\n blendingMode: { value: 1 },\n greyscale: { value: false },\n disable: { value: false }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUV;\n\n void main() {\n\n \tvUV = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n #define SQRT2_MINUS_ONE 0.41421356\n #define SQRT2_HALF_MINUS_ONE 0.20710678\n #define PI2 6.28318531\n #define SHAPE_DOT 1\n #define SHAPE_ELLIPSE 2\n #define SHAPE_LINE 3\n #define SHAPE_SQUARE 4\n #define BLENDING_LINEAR 1\n #define BLENDING_MULTIPLY 2\n #define BLENDING_ADD 3\n #define BLENDING_LIGHTER 4\n #define BLENDING_DARKER 5\n uniform sampler2D tDiffuse;\n uniform float radius;\n uniform float rotateR;\n uniform float rotateG;\n uniform float rotateB;\n uniform float scatter;\n uniform float width;\n uniform float height;\n uniform int shape;\n uniform bool disable;\n uniform float blending;\n uniform int blendingMode;\n varying vec2 vUV;\n uniform bool greyscale;\n const int samples = 8;\n\n float blend( float a, float b, float t ) {\n\n // linear blend\n \treturn a * ( 1.0 - t ) + b * t;\n\n }\n\n float hypot( float x, float y ) {\n\n // vector magnitude\n \treturn sqrt( x * x + y * y );\n\n }\n\n float rand( vec2 seed ){\n\n // get pseudo-random number\n return fract( sin( dot( seed.xy, vec2( 12.9898, 78.233 ) ) ) * 43758.5453 );\n\n }\n\n float distanceToDotRadius( float channel, vec2 coord, vec2 normal, vec2 p, float angle, float rad_max ) {\n\n // apply shape-specific transforms\n \tfloat dist = hypot( coord.x - p.x, coord.y - p.y );\n \tfloat rad = channel;\n\n \tif ( shape == SHAPE_DOT ) {\n\n \t\trad = pow( abs( rad ), 1.125 ) * rad_max;\n\n \t} else if ( shape == SHAPE_ELLIPSE ) {\n\n \t\trad = pow( abs( rad ), 1.125 ) * rad_max;\n\n \t\tif ( dist != 0.0 ) {\n \t\t\tfloat dot_p = abs( ( p.x - coord.x ) / dist * normal.x + ( p.y - coord.y ) / dist * normal.y );\n \t\t\tdist = ( dist * ( 1.0 - SQRT2_HALF_MINUS_ONE ) ) + dot_p * dist * SQRT2_MINUS_ONE;\n \t\t}\n\n \t} else if ( shape == SHAPE_LINE ) {\n\n \t\trad = pow( abs( rad ), 1.5) * rad_max;\n \t\tfloat dot_p = ( p.x - coord.x ) * normal.x + ( p.y - coord.y ) * normal.y;\n \t\tdist = hypot( normal.x * dot_p, normal.y * dot_p );\n\n \t} else if ( shape == SHAPE_SQUARE ) {\n\n \t\tfloat theta = atan( p.y - coord.y, p.x - coord.x ) - angle;\n \t\tfloat sin_t = abs( sin( theta ) );\n \t\tfloat cos_t = abs( cos( theta ) );\n \t\trad = pow( abs( rad ), 1.4 );\n \t\trad = rad_max * ( rad + ( ( sin_t > cos_t ) ? rad - sin_t * rad : rad - cos_t * rad ) );\n\n \t}\n\n \treturn rad - dist;\n\n }\n\n struct Cell {\n\n // grid sample positions\n \tvec2 normal;\n \tvec2 p1;\n \tvec2 p2;\n \tvec2 p3;\n \tvec2 p4;\n \tfloat samp2;\n \tfloat samp1;\n \tfloat samp3;\n \tfloat samp4;\n\n };\n\n vec4 getSample( vec2 point ) {\n\n // multi-sampled point\n \tvec4 tex = texture2D( tDiffuse, vec2( point.x / width, point.y / height ) );\n \tfloat base = rand( vec2( floor( point.x ), floor( point.y ) ) ) * PI2;\n \tfloat step = PI2 / float( samples );\n \tfloat dist = radius * 0.66;\n\n \tfor ( int i = 0; i < samples; ++i ) {\n\n \t\tfloat r = base + step * float( i );\n \t\tvec2 coord = point + vec2( cos( r ) * dist, sin( r ) * dist );\n \t\ttex += texture2D( tDiffuse, vec2( coord.x / width, coord.y / height ) );\n\n \t}\n\n \ttex /= float( samples ) + 1.0;\n \treturn tex;\n\n }\n\n float getDotColour( Cell c, vec2 p, int channel, float angle, float aa ) {\n\n // get colour for given point\n \tfloat dist_c_1, dist_c_2, dist_c_3, dist_c_4, res;\n\n \tif ( channel == 0 ) {\n\n \t\tc.samp1 = getSample( c.p1 ).r;\n \t\tc.samp2 = getSample( c.p2 ).r;\n \t\tc.samp3 = getSample( c.p3 ).r;\n \t\tc.samp4 = getSample( c.p4 ).r;\n\n \t} else if (channel == 1) {\n\n \t\tc.samp1 = getSample( c.p1 ).g;\n \t\tc.samp2 = getSample( c.p2 ).g;\n \t\tc.samp3 = getSample( c.p3 ).g;\n \t\tc.samp4 = getSample( c.p4 ).g;\n\n \t} else {\n\n \t\tc.samp1 = getSample( c.p1 ).b;\n \t\tc.samp3 = getSample( c.p3 ).b;\n \t\tc.samp2 = getSample( c.p2 ).b;\n \t\tc.samp4 = getSample( c.p4 ).b;\n\n \t}\n\n \tdist_c_1 = distanceToDotRadius( c.samp1, c.p1, c.normal, p, angle, radius );\n \tdist_c_2 = distanceToDotRadius( c.samp2, c.p2, c.normal, p, angle, radius );\n \tdist_c_3 = distanceToDotRadius( c.samp3, c.p3, c.normal, p, angle, radius );\n \tdist_c_4 = distanceToDotRadius( c.samp4, c.p4, c.normal, p, angle, radius );\n \tres = ( dist_c_1 > 0.0 ) ? clamp( dist_c_1 / aa, 0.0, 1.0 ) : 0.0;\n \tres += ( dist_c_2 > 0.0 ) ? clamp( dist_c_2 / aa, 0.0, 1.0 ) : 0.0;\n \tres += ( dist_c_3 > 0.0 ) ? clamp( dist_c_3 / aa, 0.0, 1.0 ) : 0.0;\n \tres += ( dist_c_4 > 0.0 ) ? clamp( dist_c_4 / aa, 0.0, 1.0 ) : 0.0;\n \tres = clamp( res, 0.0, 1.0 );\n\n \treturn res;\n\n }\n\n Cell getReferenceCell( vec2 p, vec2 origin, float grid_angle, float step ) {\n\n // get containing cell\n \tCell c;\n\n // calc grid\n \tvec2 n = vec2( cos( grid_angle ), sin( grid_angle ) );\n \tfloat threshold = step * 0.5;\n \tfloat dot_normal = n.x * ( p.x - origin.x ) + n.y * ( p.y - origin.y );\n \tfloat dot_line = -n.y * ( p.x - origin.x ) + n.x * ( p.y - origin.y );\n \tvec2 offset = vec2( n.x * dot_normal, n.y * dot_normal );\n \tfloat offset_normal = mod( hypot( offset.x, offset.y ), step );\n \tfloat normal_dir = ( dot_normal < 0.0 ) ? 1.0 : -1.0;\n \tfloat normal_scale = ( ( offset_normal < threshold ) ? -offset_normal : step - offset_normal ) * normal_dir;\n \tfloat offset_line = mod( hypot( ( p.x - offset.x ) - origin.x, ( p.y - offset.y ) - origin.y ), step );\n \tfloat line_dir = ( dot_line < 0.0 ) ? 1.0 : -1.0;\n \tfloat line_scale = ( ( offset_line < threshold ) ? -offset_line : step - offset_line ) * line_dir;\n\n // get closest corner\n \tc.normal = n;\n \tc.p1.x = p.x - n.x * normal_scale + n.y * line_scale;\n \tc.p1.y = p.y - n.y * normal_scale - n.x * line_scale;\n\n // scatter\n \tif ( scatter != 0.0 ) {\n\n \t\tfloat off_mag = scatter * threshold * 0.5;\n \t\tfloat off_angle = rand( vec2( floor( c.p1.x ), floor( c.p1.y ) ) ) * PI2;\n \t\tc.p1.x += cos( off_angle ) * off_mag;\n \t\tc.p1.y += sin( off_angle ) * off_mag;\n\n \t}\n\n // find corners\n \tfloat normal_step = normal_dir * ( ( offset_normal < threshold ) ? step : -step );\n \tfloat line_step = line_dir * ( ( offset_line < threshold ) ? step : -step );\n \tc.p2.x = c.p1.x - n.x * normal_step;\n \tc.p2.y = c.p1.y - n.y * normal_step;\n \tc.p3.x = c.p1.x + n.y * line_step;\n \tc.p3.y = c.p1.y - n.x * line_step;\n \tc.p4.x = c.p1.x - n.x * normal_step + n.y * line_step;\n \tc.p4.y = c.p1.y - n.y * normal_step - n.x * line_step;\n\n \treturn c;\n\n }\n\n float blendColour( float a, float b, float t ) {\n\n // blend colours\n \tif ( blendingMode == BLENDING_LINEAR ) {\n \t\treturn blend( a, b, 1.0 - t );\n \t} else if ( blendingMode == BLENDING_ADD ) {\n \t\treturn blend( a, min( 1.0, a + b ), t );\n \t} else if ( blendingMode == BLENDING_MULTIPLY ) {\n \t\treturn blend( a, max( 0.0, a * b ), t );\n \t} else if ( blendingMode == BLENDING_LIGHTER ) {\n \t\treturn blend( a, max( a, b ), t );\n \t} else if ( blendingMode == BLENDING_DARKER ) {\n \t\treturn blend( a, min( a, b ), t );\n \t} else {\n \t\treturn blend( a, b, 1.0 - t );\n \t}\n\n }\n\n void main() {\n\n \tif ( ! disable ) {\n\n // setup\n \t\tvec2 p = vec2( vUV.x * width, vUV.y * height );\n \t\tvec2 origin = vec2( 0, 0 );\n \t\tfloat aa = ( radius < 2.5 ) ? radius * 0.5 : 1.25;\n\n // get channel samples\n \t\tCell cell_r = getReferenceCell( p, origin, rotateR, radius );\n \t\tCell cell_g = getReferenceCell( p, origin, rotateG, radius );\n \t\tCell cell_b = getReferenceCell( p, origin, rotateB, radius );\n \t\tfloat r = getDotColour( cell_r, p, 0, rotateR, aa );\n \t\tfloat g = getDotColour( cell_g, p, 1, rotateG, aa );\n \t\tfloat b = getDotColour( cell_b, p, 2, rotateB, aa );\n\n // blend with original\n \t\tvec4 colour = texture2D( tDiffuse, vUV );\n \t\tr = blendColour( r, colour.r, blending );\n \t\tg = blendColour( g, colour.g, blending );\n \t\tb = blendColour( b, colour.b, blending );\n\n \t\tif ( greyscale ) {\n \t\t\tr = g = b = (r + b + g) / 3.0;\n \t\t}\n\n \t\tgl_FragColor = vec4( r, g, b, 1.0 );\n\n \t} else {\n\n \t\tgl_FragColor = texture2D( tDiffuse, vUV );\n\n \t}\n\n }\n `\n )\n};\nexport {\n HalftoneShader\n};\n//# sourceMappingURL=HalftoneShader.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Pass, FullScreenQuad } from \"./Pass.js\";\nimport { UniformsUtils, ShaderMaterial } from \"three\";\nimport { HalftoneShader } from \"../shaders/HalftoneShader.js\";\nclass HalftonePass extends Pass {\n constructor(width, height, params) {\n super();\n __publicField(this, \"material\");\n __publicField(this, \"fsQuad\");\n __publicField(this, \"uniforms\");\n if (HalftoneShader === void 0) {\n console.error(\"THREE.HalftonePass requires HalftoneShader\");\n }\n this.uniforms = UniformsUtils.clone(HalftoneShader.uniforms);\n this.material = new ShaderMaterial({\n uniforms: this.uniforms,\n fragmentShader: HalftoneShader.fragmentShader,\n vertexShader: HalftoneShader.vertexShader\n });\n this.uniforms.width.value = width;\n this.uniforms.height.value = height;\n for (const key in params) {\n if (params.hasOwnProperty(key) && this.uniforms.hasOwnProperty(key)) {\n this.uniforms[key].value = params[key];\n }\n }\n this.fsQuad = new FullScreenQuad(this.material);\n }\n render(renderer, writeBuffer, readBuffer) {\n this.material.uniforms[\"tDiffuse\"].value = readBuffer.texture;\n if (this.renderToScreen) {\n renderer.setRenderTarget(null);\n this.fsQuad.render(renderer);\n } else {\n renderer.setRenderTarget(writeBuffer);\n if (this.clear)\n renderer.clear();\n this.fsQuad.render(renderer);\n }\n }\n setSize(width, height) {\n this.uniforms.width.value = width;\n this.uniforms.height.value = height;\n }\n}\nexport {\n HalftonePass\n};\n//# sourceMappingURL=HalftonePass.js.map\n","import { Vector2 } from \"three\";\nconst SMAAEdgesShader = {\n defines: {\n SMAA_THRESHOLD: \"0.1\"\n },\n uniforms: {\n tDiffuse: { value: null },\n resolution: { value: /* @__PURE__ */ new Vector2(1 / 1024, 1 / 512) }\n },\n vertexShader: (\n /* glsl */\n `\n uniform vec2 resolution;\n\n varying vec2 vUv;\n varying vec4 vOffset[ 3 ];\n\n void SMAAEdgeDetectionVS( vec2 texcoord ) {\n \tvOffset[ 0 ] = texcoord.xyxy + resolution.xyxy * vec4( -1.0, 0.0, 0.0, 1.0 ); // WebGL port note: Changed sign in W component\n \tvOffset[ 1 ] = texcoord.xyxy + resolution.xyxy * vec4( 1.0, 0.0, 0.0, -1.0 ); // WebGL port note: Changed sign in W component\n \tvOffset[ 2 ] = texcoord.xyxy + resolution.xyxy * vec4( -2.0, 0.0, 0.0, 2.0 ); // WebGL port note: Changed sign in W component\n }\n\n void main() {\n\n \tvUv = uv;\n\n \tSMAAEdgeDetectionVS( vUv );\n\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D tDiffuse;\n\n varying vec2 vUv;\n varying vec4 vOffset[ 3 ];\n\n vec4 SMAAColorEdgeDetectionPS( vec2 texcoord, vec4 offset[3], sampler2D colorTex ) {\n \tvec2 threshold = vec2( SMAA_THRESHOLD, SMAA_THRESHOLD );\n\n // Calculate color deltas:\n \tvec4 delta;\n \tvec3 C = texture2D( colorTex, texcoord ).rgb;\n\n \tvec3 Cleft = texture2D( colorTex, offset[0].xy ).rgb;\n \tvec3 t = abs( C - Cleft );\n \tdelta.x = max( max( t.r, t.g ), t.b );\n\n \tvec3 Ctop = texture2D( colorTex, offset[0].zw ).rgb;\n \tt = abs( C - Ctop );\n \tdelta.y = max( max( t.r, t.g ), t.b );\n\n // We do the usual threshold:\n \tvec2 edges = step( threshold, delta.xy );\n\n // Then discard if there is no edge:\n \tif ( dot( edges, vec2( 1.0, 1.0 ) ) == 0.0 )\n \t\tdiscard;\n\n // Calculate right and bottom deltas:\n \tvec3 Cright = texture2D( colorTex, offset[1].xy ).rgb;\n \tt = abs( C - Cright );\n \tdelta.z = max( max( t.r, t.g ), t.b );\n\n \tvec3 Cbottom = texture2D( colorTex, offset[1].zw ).rgb;\n \tt = abs( C - Cbottom );\n \tdelta.w = max( max( t.r, t.g ), t.b );\n\n // Calculate the maximum delta in the direct neighborhood:\n \tfloat maxDelta = max( max( max( delta.x, delta.y ), delta.z ), delta.w );\n\n // Calculate left-left and top-top deltas:\n \tvec3 Cleftleft = texture2D( colorTex, offset[2].xy ).rgb;\n \tt = abs( C - Cleftleft );\n \tdelta.z = max( max( t.r, t.g ), t.b );\n\n \tvec3 Ctoptop = texture2D( colorTex, offset[2].zw ).rgb;\n \tt = abs( C - Ctoptop );\n \tdelta.w = max( max( t.r, t.g ), t.b );\n\n // Calculate the final maximum delta:\n \tmaxDelta = max( max( maxDelta, delta.z ), delta.w );\n\n // Local contrast adaptation in action:\n \tedges.xy *= step( 0.5 * maxDelta, delta.xy );\n\n \treturn vec4( edges, 0.0, 0.0 );\n }\n\n void main() {\n\n \tgl_FragColor = SMAAColorEdgeDetectionPS( vUv, vOffset, tDiffuse );\n\n }\n `\n )\n};\nconst SMAAWeightsShader = {\n defines: {\n SMAA_MAX_SEARCH_STEPS: \"8\",\n SMAA_AREATEX_MAX_DISTANCE: \"16\",\n SMAA_AREATEX_PIXEL_SIZE: \"( 1.0 / vec2( 160.0, 560.0 ) )\",\n SMAA_AREATEX_SUBTEX_SIZE: \"( 1.0 / 7.0 )\"\n },\n uniforms: {\n tDiffuse: { value: null },\n tArea: { value: null },\n tSearch: { value: null },\n resolution: { value: /* @__PURE__ */ new Vector2(1 / 1024, 1 / 512) }\n },\n vertexShader: (\n /* glsl */\n `\n uniform vec2 resolution;\n\n varying vec2 vUv;\n varying vec4 vOffset[ 3 ];\n varying vec2 vPixcoord;\n\n void SMAABlendingWeightCalculationVS( vec2 texcoord ) {\n \tvPixcoord = texcoord / resolution;\n\n // We will use these offsets for the searches later on (see @PSEUDO_GATHER4):\n \tvOffset[ 0 ] = texcoord.xyxy + resolution.xyxy * vec4( -0.25, 0.125, 1.25, 0.125 ); // WebGL port note: Changed sign in Y and W components\n \tvOffset[ 1 ] = texcoord.xyxy + resolution.xyxy * vec4( -0.125, 0.25, -0.125, -1.25 ); // WebGL port note: Changed sign in Y and W components\n\n // And these for the searches, they indicate the ends of the loops:\n \tvOffset[ 2 ] = vec4( vOffset[ 0 ].xz, vOffset[ 1 ].yw ) + vec4( -2.0, 2.0, -2.0, 2.0 ) * resolution.xxyy * float( SMAA_MAX_SEARCH_STEPS );\n\n }\n\n void main() {\n\n \tvUv = uv;\n\n \tSMAABlendingWeightCalculationVS( vUv );\n\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n #define SMAASampleLevelZeroOffset( tex, coord, offset ) texture2D( tex, coord + float( offset ) * resolution, 0.0 )\n\n uniform sampler2D tDiffuse;\n uniform sampler2D tArea;\n uniform sampler2D tSearch;\n uniform vec2 resolution;\n\n varying vec2 vUv;\n varying vec4 vOffset[3];\n varying vec2 vPixcoord;\n\n #if __VERSION__ == 100\n vec2 round( vec2 x ) {\n \treturn sign( x ) * floor( abs( x ) + 0.5 );\n }\n #endif\n\n float SMAASearchLength( sampler2D searchTex, vec2 e, float bias, float scale ) {\n // Not required if searchTex accesses are set to point:\n // float2 SEARCH_TEX_PIXEL_SIZE = 1.0 / float2(66.0, 33.0);\n // e = float2(bias, 0.0) + 0.5 * SEARCH_TEX_PIXEL_SIZE +\n // e * float2(scale, 1.0) * float2(64.0, 32.0) * SEARCH_TEX_PIXEL_SIZE;\n \te.r = bias + e.r * scale;\n \treturn 255.0 * texture2D( searchTex, e, 0.0 ).r;\n }\n\n float SMAASearchXLeft( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) {\n /**\n * @PSEUDO_GATHER4\n * This texcoord has been offset by (-0.25, -0.125) in the vertex shader to\n * sample between edge, thus fetching four edges in a row.\n * Sampling with different offsets in each direction allows to disambiguate\n * which edges are active from the four fetched ones.\n */\n \tvec2 e = vec2( 0.0, 1.0 );\n\n \tfor ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) { // WebGL port note: Changed while to for\n \t\te = texture2D( edgesTex, texcoord, 0.0 ).rg;\n \t\ttexcoord -= vec2( 2.0, 0.0 ) * resolution;\n \t\tif ( ! ( texcoord.x > end && e.g > 0.8281 && e.r == 0.0 ) ) break;\n \t}\n\n // We correct the previous (-0.25, -0.125) offset we applied:\n \ttexcoord.x += 0.25 * resolution.x;\n\n // The searches are bias by 1, so adjust the coords accordingly:\n \ttexcoord.x += resolution.x;\n\n // Disambiguate the length added by the last step:\n \ttexcoord.x += 2.0 * resolution.x; // Undo last step\n \ttexcoord.x -= resolution.x * SMAASearchLength(searchTex, e, 0.0, 0.5);\n\n \treturn texcoord.x;\n }\n\n float SMAASearchXRight( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) {\n \tvec2 e = vec2( 0.0, 1.0 );\n\n \tfor ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) { // WebGL port note: Changed while to for\n \t\te = texture2D( edgesTex, texcoord, 0.0 ).rg;\n \t\ttexcoord += vec2( 2.0, 0.0 ) * resolution;\n \t\tif ( ! ( texcoord.x < end && e.g > 0.8281 && e.r == 0.0 ) ) break;\n \t}\n\n \ttexcoord.x -= 0.25 * resolution.x;\n \ttexcoord.x -= resolution.x;\n \ttexcoord.x -= 2.0 * resolution.x;\n \ttexcoord.x += resolution.x * SMAASearchLength( searchTex, e, 0.5, 0.5 );\n\n \treturn texcoord.x;\n }\n\n float SMAASearchYUp( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) {\n \tvec2 e = vec2( 1.0, 0.0 );\n\n \tfor ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) { // WebGL port note: Changed while to for\n \t\te = texture2D( edgesTex, texcoord, 0.0 ).rg;\n \t\ttexcoord += vec2( 0.0, 2.0 ) * resolution; // WebGL port note: Changed sign\n \t\tif ( ! ( texcoord.y > end && e.r > 0.8281 && e.g == 0.0 ) ) break;\n \t}\n\n \ttexcoord.y -= 0.25 * resolution.y; // WebGL port note: Changed sign\n \ttexcoord.y -= resolution.y; // WebGL port note: Changed sign\n \ttexcoord.y -= 2.0 * resolution.y; // WebGL port note: Changed sign\n \ttexcoord.y += resolution.y * SMAASearchLength( searchTex, e.gr, 0.0, 0.5 ); // WebGL port note: Changed sign\n\n \treturn texcoord.y;\n }\n\n float SMAASearchYDown( sampler2D edgesTex, sampler2D searchTex, vec2 texcoord, float end ) {\n \tvec2 e = vec2( 1.0, 0.0 );\n\n \tfor ( int i = 0; i < SMAA_MAX_SEARCH_STEPS; i ++ ) { // WebGL port note: Changed while to for\n \t\te = texture2D( edgesTex, texcoord, 0.0 ).rg;\n \t\ttexcoord -= vec2( 0.0, 2.0 ) * resolution; // WebGL port note: Changed sign\n \t\tif ( ! ( texcoord.y < end && e.r > 0.8281 && e.g == 0.0 ) ) break;\n \t}\n\n \ttexcoord.y += 0.25 * resolution.y; // WebGL port note: Changed sign\n \ttexcoord.y += resolution.y; // WebGL port note: Changed sign\n \ttexcoord.y += 2.0 * resolution.y; // WebGL port note: Changed sign\n \ttexcoord.y -= resolution.y * SMAASearchLength( searchTex, e.gr, 0.5, 0.5 ); // WebGL port note: Changed sign\n\n \treturn texcoord.y;\n }\n\n vec2 SMAAArea( sampler2D areaTex, vec2 dist, float e1, float e2, float offset ) {\n // Rounding prevents precision errors of bilinear filtering:\n \tvec2 texcoord = float( SMAA_AREATEX_MAX_DISTANCE ) * round( 4.0 * vec2( e1, e2 ) ) + dist;\n\n // We do a scale and bias for mapping to texel space:\n \ttexcoord = SMAA_AREATEX_PIXEL_SIZE * texcoord + ( 0.5 * SMAA_AREATEX_PIXEL_SIZE );\n\n // Move to proper place, according to the subpixel offset:\n \ttexcoord.y += SMAA_AREATEX_SUBTEX_SIZE * offset;\n\n \treturn texture2D( areaTex, texcoord, 0.0 ).rg;\n }\n\n vec4 SMAABlendingWeightCalculationPS( vec2 texcoord, vec2 pixcoord, vec4 offset[ 3 ], sampler2D edgesTex, sampler2D areaTex, sampler2D searchTex, ivec4 subsampleIndices ) {\n \tvec4 weights = vec4( 0.0, 0.0, 0.0, 0.0 );\n\n \tvec2 e = texture2D( edgesTex, texcoord ).rg;\n\n \tif ( e.g > 0.0 ) { // Edge at north\n \t\tvec2 d;\n\n // Find the distance to the left:\n \t\tvec2 coords;\n \t\tcoords.x = SMAASearchXLeft( edgesTex, searchTex, offset[ 0 ].xy, offset[ 2 ].x );\n \t\tcoords.y = offset[ 1 ].y; // offset[1].y = texcoord.y - 0.25 * resolution.y (@CROSSING_OFFSET)\n \t\td.x = coords.x;\n\n // Now fetch the left crossing edges, two at a time using bilinear\n // filtering. Sampling at -0.25 (see @CROSSING_OFFSET) enables to\n // discern what value each edge has:\n \t\tfloat e1 = texture2D( edgesTex, coords, 0.0 ).r;\n\n // Find the distance to the right:\n \t\tcoords.x = SMAASearchXRight( edgesTex, searchTex, offset[ 0 ].zw, offset[ 2 ].y );\n \t\td.y = coords.x;\n\n // We want the distances to be in pixel units (doing this here allow to\n // better interleave arithmetic and memory accesses):\n \t\td = d / resolution.x - pixcoord.x;\n\n // SMAAArea below needs a sqrt, as the areas texture is compressed\n // quadratically:\n \t\tvec2 sqrt_d = sqrt( abs( d ) );\n\n // Fetch the right crossing edges:\n \t\tcoords.y -= 1.0 * resolution.y; // WebGL port note: Added\n \t\tfloat e2 = SMAASampleLevelZeroOffset( edgesTex, coords, ivec2( 1, 0 ) ).r;\n\n // Ok, we know how this pattern looks like, now it is time for getting\n // the actual area:\n \t\tweights.rg = SMAAArea( areaTex, sqrt_d, e1, e2, float( subsampleIndices.y ) );\n \t}\n\n \tif ( e.r > 0.0 ) { // Edge at west\n \t\tvec2 d;\n\n // Find the distance to the top:\n \t\tvec2 coords;\n\n \t\tcoords.y = SMAASearchYUp( edgesTex, searchTex, offset[ 1 ].xy, offset[ 2 ].z );\n \t\tcoords.x = offset[ 0 ].x; // offset[1].x = texcoord.x - 0.25 * resolution.x;\n \t\td.x = coords.y;\n\n // Fetch the top crossing edges:\n \t\tfloat e1 = texture2D( edgesTex, coords, 0.0 ).g;\n\n // Find the distance to the bottom:\n \t\tcoords.y = SMAASearchYDown( edgesTex, searchTex, offset[ 1 ].zw, offset[ 2 ].w );\n \t\td.y = coords.y;\n\n // We want the distances to be in pixel units:\n \t\td = d / resolution.y - pixcoord.y;\n\n // SMAAArea below needs a sqrt, as the areas texture is compressed\n // quadratically:\n \t\tvec2 sqrt_d = sqrt( abs( d ) );\n\n // Fetch the bottom crossing edges:\n \t\tcoords.y -= 1.0 * resolution.y; // WebGL port note: Added\n \t\tfloat e2 = SMAASampleLevelZeroOffset( edgesTex, coords, ivec2( 0, 1 ) ).g;\n\n // Get the area for this direction:\n \t\tweights.ba = SMAAArea( areaTex, sqrt_d, e1, e2, float( subsampleIndices.x ) );\n \t}\n\n \treturn weights;\n }\n\n void main() {\n\n \tgl_FragColor = SMAABlendingWeightCalculationPS( vUv, vPixcoord, vOffset, tDiffuse, tArea, tSearch, ivec4( 0.0 ) );\n\n }\n `\n )\n};\nconst SMAABlendShader = {\n uniforms: {\n tDiffuse: { value: null },\n tColor: { value: null },\n resolution: { value: /* @__PURE__ */ new Vector2(1 / 1024, 1 / 512) }\n },\n vertexShader: (\n /* glsl */\n `\n uniform vec2 resolution;\n\n varying vec2 vUv;\n varying vec4 vOffset[ 2 ];\n\n void SMAANeighborhoodBlendingVS( vec2 texcoord ) {\n \tvOffset[ 0 ] = texcoord.xyxy + resolution.xyxy * vec4( -1.0, 0.0, 0.0, 1.0 ); // WebGL port note: Changed sign in W component\n \tvOffset[ 1 ] = texcoord.xyxy + resolution.xyxy * vec4( 1.0, 0.0, 0.0, -1.0 ); // WebGL port note: Changed sign in W component\n }\n\n void main() {\n\n \tvUv = uv;\n\n \tSMAANeighborhoodBlendingVS( vUv );\n\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D tDiffuse;\n uniform sampler2D tColor;\n uniform vec2 resolution;\n\n varying vec2 vUv;\n varying vec4 vOffset[ 2 ];\n\n vec4 SMAANeighborhoodBlendingPS( vec2 texcoord, vec4 offset[ 2 ], sampler2D colorTex, sampler2D blendTex ) {\n // Fetch the blending weights for current pixel:\n \tvec4 a;\n \ta.xz = texture2D( blendTex, texcoord ).xz;\n \ta.y = texture2D( blendTex, offset[ 1 ].zw ).g;\n \ta.w = texture2D( blendTex, offset[ 1 ].xy ).a;\n\n // Is there any blending weight with a value greater than 0.0?\n \tif ( dot(a, vec4( 1.0, 1.0, 1.0, 1.0 )) < 1e-5 ) {\n \t\treturn texture2D( colorTex, texcoord, 0.0 );\n \t} else {\n // Up to 4 lines can be crossing a pixel (one through each edge). We\n // favor blending by choosing the line with the maximum weight for each\n // direction:\n \t\tvec2 offset;\n \t\toffset.x = a.a > a.b ? a.a : -a.b; // left vs. right\n \t\toffset.y = a.g > a.r ? -a.g : a.r; // top vs. bottom // WebGL port note: Changed signs\n\n // Then we go in the direction that has the maximum weight:\n \t\tif ( abs( offset.x ) > abs( offset.y )) { // horizontal vs. vertical\n \t\t\toffset.y = 0.0;\n \t\t} else {\n \t\t\toffset.x = 0.0;\n \t\t}\n\n // Fetch the opposite color and lerp by hand:\n \t\tvec4 C = texture2D( colorTex, texcoord, 0.0 );\n \t\ttexcoord += sign( offset ) * resolution;\n \t\tvec4 Cop = texture2D( colorTex, texcoord, 0.0 );\n \t\tfloat s = abs( offset.x ) > abs( offset.y ) ? abs( offset.x ) : abs( offset.y );\n\n // WebGL port note: Added gamma correction\n \t\tC.xyz = pow(C.xyz, vec3(2.2));\n \t\tCop.xyz = pow(Cop.xyz, vec3(2.2));\n \t\tvec4 mixed = mix(C, Cop, s);\n \t\tmixed.xyz = pow(mixed.xyz, vec3(1.0 / 2.2));\n\n \t\treturn mixed;\n \t}\n }\n\n void main() {\n\n \tgl_FragColor = SMAANeighborhoodBlendingPS( vUv, vOffset, tColor, tDiffuse );\n\n }\n `\n )\n};\nexport {\n SMAABlendShader,\n SMAAEdgesShader,\n SMAAWeightsShader\n};\n//# sourceMappingURL=SMAAShader.js.map\n","import { WebGLRenderTarget, Texture, LinearFilter, NearestFilter, UniformsUtils, ShaderMaterial } from \"three\";\nimport { Pass, FullScreenQuad } from \"./Pass.js\";\nimport { SMAAEdgesShader, SMAAWeightsShader, SMAABlendShader } from \"../shaders/SMAAShader.js\";\nclass SMAAPass extends Pass {\n constructor(width, height) {\n super();\n this.edgesRT = new WebGLRenderTarget(width, height, {\n depthBuffer: false\n });\n this.edgesRT.texture.name = \"SMAAPass.edges\";\n this.weightsRT = new WebGLRenderTarget(width, height, {\n depthBuffer: false\n });\n this.weightsRT.texture.name = \"SMAAPass.weights\";\n const scope = this;\n const areaTextureImage = new Image();\n areaTextureImage.src = this.getAreaTexture();\n areaTextureImage.onload = function() {\n scope.areaTexture.needsUpdate = true;\n };\n this.areaTexture = new Texture();\n this.areaTexture.name = \"SMAAPass.area\";\n this.areaTexture.image = areaTextureImage;\n this.areaTexture.minFilter = LinearFilter;\n this.areaTexture.generateMipmaps = false;\n this.areaTexture.flipY = false;\n const searchTextureImage = new Image();\n searchTextureImage.src = this.getSearchTexture();\n searchTextureImage.onload = function() {\n scope.searchTexture.needsUpdate = true;\n };\n this.searchTexture = new Texture();\n this.searchTexture.name = \"SMAAPass.search\";\n this.searchTexture.image = searchTextureImage;\n this.searchTexture.magFilter = NearestFilter;\n this.searchTexture.minFilter = NearestFilter;\n this.searchTexture.generateMipmaps = false;\n this.searchTexture.flipY = false;\n if (SMAAEdgesShader === void 0) {\n console.error(\"THREE.SMAAPass relies on SMAAShader\");\n }\n this.uniformsEdges = UniformsUtils.clone(SMAAEdgesShader.uniforms);\n this.uniformsEdges[\"resolution\"].value.set(1 / width, 1 / height);\n this.materialEdges = new ShaderMaterial({\n defines: Object.assign({}, SMAAEdgesShader.defines),\n uniforms: this.uniformsEdges,\n vertexShader: SMAAEdgesShader.vertexShader,\n fragmentShader: SMAAEdgesShader.fragmentShader\n });\n this.uniformsWeights = UniformsUtils.clone(SMAAWeightsShader.uniforms);\n this.uniformsWeights[\"resolution\"].value.set(1 / width, 1 / height);\n this.uniformsWeights[\"tDiffuse\"].value = this.edgesRT.texture;\n this.uniformsWeights[\"tArea\"].value = this.areaTexture;\n this.uniformsWeights[\"tSearch\"].value = this.searchTexture;\n this.materialWeights = new ShaderMaterial({\n defines: Object.assign({}, SMAAWeightsShader.defines),\n uniforms: this.uniformsWeights,\n vertexShader: SMAAWeightsShader.vertexShader,\n fragmentShader: SMAAWeightsShader.fragmentShader\n });\n this.uniformsBlend = UniformsUtils.clone(SMAABlendShader.uniforms);\n this.uniformsBlend[\"resolution\"].value.set(1 / width, 1 / height);\n this.uniformsBlend[\"tDiffuse\"].value = this.weightsRT.texture;\n this.materialBlend = new ShaderMaterial({\n uniforms: this.uniformsBlend,\n vertexShader: SMAABlendShader.vertexShader,\n fragmentShader: SMAABlendShader.fragmentShader\n });\n this.needsSwap = false;\n this.fsQuad = new FullScreenQuad(null);\n }\n render(renderer, writeBuffer, readBuffer) {\n this.uniformsEdges[\"tDiffuse\"].value = readBuffer.texture;\n this.fsQuad.material = this.materialEdges;\n renderer.setRenderTarget(this.edgesRT);\n if (this.clear)\n renderer.clear();\n this.fsQuad.render(renderer);\n this.fsQuad.material = this.materialWeights;\n renderer.setRenderTarget(this.weightsRT);\n if (this.clear)\n renderer.clear();\n this.fsQuad.render(renderer);\n this.uniformsBlend[\"tColor\"].value = readBuffer.texture;\n this.fsQuad.material = this.materialBlend;\n if (this.renderToScreen) {\n renderer.setRenderTarget(null);\n this.fsQuad.render(renderer);\n } else {\n renderer.setRenderTarget(writeBuffer);\n if (this.clear)\n renderer.clear();\n this.fsQuad.render(renderer);\n }\n }\n setSize(width, height) {\n this.edgesRT.setSize(width, height);\n this.weightsRT.setSize(width, height);\n this.materialEdges.uniforms[\"resolution\"].value.set(1 / width, 1 / height);\n this.materialWeights.uniforms[\"resolution\"].value.set(1 / width, 1 / height);\n this.materialBlend.uniforms[\"resolution\"].value.set(1 / width, 1 / height);\n }\n getAreaTexture() {\n return \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAKAAAAIwCAIAAACOVPcQAACBeklEQVR42u39W4xlWXrnh/3WWvuciIzMrKxrV8/0rWbY0+SQFKcb4owIkSIFCjY9AC1BT/LYBozRi+EX+cV+8IMsYAaCwRcBwjzMiw2jAWtgwC8WR5Q8mDFHZLNHTarZGrLJJllt1W2qKrsumZWZcTvn7L3W54e1vrXX3vuciLPPORFR1XE2EomorB0nVuz//r71re/y/1eMvb4Cb3N11xV/PP/2v4UBAwJG/7H8urx6/25/Gf8O5hypMQ0EEEQwAqLfoN/Z+97f/SW+/NvcgQk4sGBJK6H7N4PFVL+K+e0N11yNfkKvwUdwdlUAXPHHL38oa15f/i/46Ih6SuMSPmLAYAwyRKn7dfMGH97jaMFBYCJUgotIC2YAdu+LyW9vvubxAP8kAL8H/koAuOKP3+q6+xGnd5kdYCeECnGIJViwGJMAkQKfDvB3WZxjLKGh8VSCCzhwEWBpMc5/kBbjawT4HnwJfhr+pPBIu7uu+OOTo9vsmtQcniMBGkKFd4jDWMSCRUpLjJYNJkM+IRzQ+PQvIeAMTrBS2LEiaiR9b/5PuT6Ap/AcfAFO4Y3dA3DFH7/VS+M8k4baEAQfMI4QfbVDDGIRg7GKaIY52qAjTAgTvGBAPGIIghOCYAUrGFNgzA7Q3QhgCwfwAnwe5vDejgG44o/fbm1C5ZlYQvQDARPAIQGxCWBM+wWl37ZQESb4gImexGMDouhGLx1Cst0Saa4b4AqO4Hk4gxo+3DHAV/nx27p3JziPM2pVgoiia5MdEzCGULprIN7gEEeQ5IQxEBBBQnxhsDb5auGmAAYcHMA9eAAz8PBol8/xij9+C4Djlim4gJjWcwZBhCBgMIIYxGAVIkH3ZtcBuLdtRFMWsPGoY9rN+HoBji9VBYdwD2ZQg4cnO7OSq/z4rU5KKdwVbFAjNojCQzTlCLPFSxtamwh2jMUcEgg2Wm/6XgErIBhBckQtGN3CzbVacERgCnfgLswhnvqf7QyAq/z4rRZm1YglYE3affGITaZsdIe2FmMIpnOCap25I6jt2kCwCW0D1uAD9sZctNGXcQIHCkINDQgc78aCr+zjtw3BU/ijdpw3zhCwcaONwBvdeS2YZKkJNJsMPf2JKEvC28RXxxI0ASJyzQCjCEQrO4Q7sFArEzjZhaFc4cdv+/JFdKULM4px0DfUBI2hIsy06BqLhGTQEVdbfAIZXYMPesq6VoCHICzUyjwInO4Y411//LYLs6TDa9wvg2CC2rElgAnpTBziThxaL22MYhzfkghz6GAs2VHbbdM91VZu1MEEpupMMwKyVTb5ij9+u4VJG/5EgEMMmFF01cFai3isRbKbzb+YaU/MQbAm2XSMoUPAmvZzbuKYRIFApbtlrfFuUGd6vq2hXNnH78ZLh/iFhsQG3T4D1ib7k5CC6vY0DCbtrohgLEIClXiGtl10zc0CnEGIhhatLBva7NP58Tvw0qE8yWhARLQ8h4+AhQSP+I4F5xoU+VilGRJs6wnS7ruti/4KvAY/CfdgqjsMy4pf8fodQO8/gnuX3f/3xi3om1/h7THr+co3x93PP9+FBUfbNUjcjEmhcrkT+8K7ml7V10Jo05mpIEFy1NmCJWx9SIKKt+EjAL4Ez8EBVOB6havuT/rByPvHXK+9zUcfcbb254+9fydJknYnRr1oGfdaiAgpxu1Rx/Rek8KISftx3L+DfsLWAANn8Hvw0/AFeAGO9DFV3c6D+CcWbL8Dj9e7f+T1k8AZv/d7+PXWM/Z+VvdCrIvuAKO09RpEEQJM0Ci6+B4xhTWr4cZNOvhktabw0ta0rSJmqz3Yw5/AKXwenod7cAhTmBSPKf6JBdvH8IP17h95pXqw50/+BFnj88fev4NchyaK47OPhhtI8RFSvAfDSNh0Ck0p2gLxGkib5NJj/JWCr90EWQJvwBzO4AHcgztwAFN1evHPUVGwfXON+0debT1YeGON9Yy9/63X+OguiwmhIhQhD7l4sMqlG3D86Suc3qWZ4rWjI1X7u0Ytw6x3rIMeIOPDprfe2XzNgyj6PahhBjO4C3e6puDgXrdg+/5l948vF3bqwZetZ+z9Rx9zdIY5pInPK4Nk0t+l52xdK2B45Qd87nM8fsD5EfUhIcJcERw4RdqqH7Yde5V7m1vhNmtedkz6EDzUMF/2jJYWbC+4fzzA/Y+/8PPH3j9dcBAPIRP8JLXd5BpAu03aziOL3VVHZzz3CXWDPWd+SH2AnxIqQoTZpo9Ckc6HIrFbAbzNmlcg8Ag8NFDDAhbJvTBZXbC94P7t68EXfv6o+21gUtPETU7bbkLxvNKRFG2+KXzvtObonPP4rBvsgmaKj404DlshFole1Glfh02fE7bYR7dZ82oTewIBGn1Md6CG6YUF26X376oevOLzx95vhUmgblI6LBZwTCDY7vMq0op5WVXgsObOXJ+1x3qaBl9j1FeLxbhU9w1F+Wiba6s1X/TBz1LnUfuYDi4r2C69f1f14BWfP+p+W2GFKuC9phcELMYRRLur9DEZTUdEH+iEqWdaM7X4WOoPGI+ZYD2+wcQ+y+ioHUZ9dTDbArzxmi/bJI9BND0Ynd6lBdve/butBw8+f/T9D3ABa3AG8W3VPX4hBin+bj8dMMmSpp5pg7fJ6xrBFE2WQQEWnV8Qg3FbAWzYfM1rREEnmvkN2o1+acG2d/9u68GDzx91v3mAjb1zkpqT21OipPKO0b9TO5W0nTdOmAQm0TObts3aBKgwARtoPDiCT0gHgwnbArzxmtcLc08HgF1asN0C4Ms/fvD5I+7PhfqyXE/b7RbbrGyRQRT9ARZcwAUmgdoz0ehJ9Fn7QAhUjhDAQSw0bV3T3WbNa59jzmiP6GsWbGXDX2ytjy8+f9T97fiBPq9YeLdBmyuizZHaqXITnXiMUEEVcJ7K4j3BFPurtB4bixW8wTpweL8DC95szWMOqucFYGsWbGU7p3TxxxefP+r+oTVktxY0v5hbq3KiOKYnY8ddJVSBxuMMVffNbxwIOERShst73HZ78DZrHpmJmH3K6sGz0fe3UUj0eyRrSCGTTc+rjVNoGzNSv05srAxUBh8IhqChiQgVNIIBH3AVPnrsnXQZbLTm8ammv8eVXn/vWpaTem5IXRlt+U/LA21zhSb9cye6jcOfCnOwhIAYXAMVTUNV0QhVha9xjgA27ODJbLbmitt3tRN80lqG6N/khgot4ZVlOyO4WNg3OIMzhIZQpUEHieg2im6F91hB3I2tubql6BYNN9Hj5S7G0G2tahslBWKDnOiIvuAEDzakDQKDNFQT6gbn8E2y4BBubM230YIpBnDbMa+y3dx0n1S0BtuG62lCCXwcY0F72T1VRR3t2ONcsmDjbmzNt9RFs2LO2hQNyb022JisaI8rAWuw4HI3FuAIhZdOGIcdjLJvvObqlpqvWTJnnQbyi/1M9O8UxWhBs//H42I0q1Yb/XPGONzcmm+ri172mHKvZBpHkJaNJz6v9jxqiklDj3U4CA2ugpAaYMWqNXsdXbmJNd9egCnJEsphXNM+MnK3m0FCJ5S1kmJpa3DgPVbnQnPGWIDspW9ozbcO4K/9LkfaQO2KHuqlfFXSbdNzcEcwoqNEFE9zcIXu9/6n/ym/BC/C3aJLzEKPuYVlbFnfhZ8kcWxV3dbv4bKl28566wD+8C53aw49lTABp9PWbsB+knfc/Li3eVizf5vv/xmvnPKg5ihwKEwlrcHqucuVcVOxEv8aH37E3ZqpZypUulrHEtIWKUr+txHg+ojZDGlwnqmkGlzcVi1dLiNSJiHjfbRNOPwKpx9TVdTn3K05DBx4psIk4Ei8aCkJahRgffk4YnEXe07T4H2RR1u27E6wfQsBDofUgjFUFnwC2AiVtA+05J2zpiDK2Oa0c5fmAecN1iJzmpqFZxqYBCYhFTCsUNEmUnIcZ6aEA5rQVhEywG6w7HSW02XfOoBlQmjwulOFQAg66SvJblrTEX1YtJ3uG15T/BH1OfOQeuR8g/c0gdpT5fx2SKbs9EfHTKdM8A1GaJRHLVIwhcGyydZsbifAFVKl5EMKNU2Hryo+06BeTgqnxzYjThVySDikbtJPieco75lYfKAJOMEZBTjoITuWHXXZVhcUDIS2hpiXHV9Ku4u44bN5OYLDOkJo8w+xJSMbhBRHEdEs9JZUCkQrPMAvaHyLkxgkEHxiNkx/x2YB0mGsQ8EUWj/stW5YLhtS5SMu+/YBbNPDCkGTUybN8krRLBGPlZkVOA0j+a1+rkyQKWGaPHPLZOkJhioQYnVZ2hS3zVxMtgC46KuRwbJNd9nV2PHgb36F194ecf/Yeu2vAFe5nm/bRBFrnY4BauE8ERmZRFUn0k8hbftiVYSKMEme2dJCJSCGYAlNqh87bXOPdUkGy24P6d1ll21MBqqx48Fvv8ZHH8HZFY7j/uAq1xMJUFqCSUlJPmNbIiNsmwuMs/q9CMtsZsFO6SprzCS1Z7QL8xCQClEelpjTduDMsmWD8S1PT152BtvmIGvUeDA/yRn83u/x0/4qxoPHjx+PXY9pqX9bgMvh/Nz9kpP4pOe1/fYf3axUiMdHLlPpZCNjgtNFAhcHEDxTumNONhHrBduW+vOyY++70WWnPXj98eA4kOt/mj/5E05l9+O4o8ePx67HFqyC+qSSnyselqjZGaVK2TadbFLPWAQ4NBhHqDCCV7OTpo34AlSSylPtIdd2AJZlyzYQrDJ5lcWGNceD80CunPLGGzsfD+7wRb95NevJI5docQ3tgCyr5bGnyaPRlmwNsFELViOOx9loebGNq2moDOKpHLVP5al2cymWHbkfzGXL7kfRl44H9wZy33tvt+PB/Xnf93e+nh5ZlU18wCiRUa9m7kib9LYuOk+hudQNbxwm0AQqbfloimaB2lM5fChex+ylMwuTbfmXQtmWlenZljbdXTLuOxjI/fDDHY4Hjx8/Hrse0zXfPFxbUN1kKqSCCSk50m0Ajtx3ub9XHBKHXESb8iO6E+qGytF4nO0OG3SXzbJlhxBnKtKyl0NwybjvYCD30aMdjgePHz8eu56SVTBbgxJMliQ3Oauwg0QHxXE2Ez/EIReLdQj42Gzb4CLS0YJD9xUx7bsi0vJi5mUbW1QzL0h0PFk17rtiIPfJk52MB48fPx67npJJwyrBa2RCCQRTbGZSPCxTPOiND4G2pYyOQ4h4jINIJh5wFU1NFZt+IsZ59LSnDqBjZ2awbOku+yInunLcd8VA7rNnOxkPHj9+PGY9B0MWJJNozOJmlglvDMXDEozdhQWbgs/U6oBanGzLrdSNNnZFjOkmbi5bNt1lX7JLLhn3vXAg9/h4y/Hg8ePHI9dzQMEkWCgdRfYykYKnkP7D4rIujsujaKPBsB54vE2TS00ccvFY/Tth7JXeq1hz+qgVy04sAJawTsvOknHfCwdyT062HA8eP348Zj0vdoXF4pilKa2BROed+9fyw9rWRXeTFXESMOanvDZfJuJaSXouQdMdDJZtekZcLLvEeK04d8m474UDuaenW44Hjx8/Xns9YYqZpszGWB3AN/4VHw+k7WSFtJ3Qicuqb/NlVmgXWsxh570xg2UwxUw3WfO6B5nOuO8aA7lnZxuPB48fPx6znm1i4bsfcbaptF3zNT78eFPtwi1OaCNOqp1x3zUGcs/PN++AGD1+fMXrSVm2baTtPhPahbPhA71wIHd2bXzRa69nG+3CraTtPivahV/55tXWg8fyRY/9AdsY8VbSdp8V7cKrrgdfM//z6ILQFtJ2nxHtwmuoB4/kf74+gLeRtvvMaBdeSz34+vifx0YG20jbfTa0C6+tHrwe//NmOG0L8EbSdp8R7cLrrQe/996O+ai3ujQOskpTNULa7jOjXXj99eCd8lHvoFiwsbTdZ0a78PrrwTvlo966pLuRtB2fFe3Cm6oHP9kNH/W2FryxtN1nTLvwRurBO+Kj3pWXHidtx2dFu/Bm68Fb81HvykuPlrb7LGkX3mw9eGs+6h1Y8MbSdjegXcguQLjmevDpTQLMxtJ2N6NdyBZu9AbrwVvwUW+LbteULUpCdqm0HTelXbhNPe8G68Gb8lFvVfYfSNuxvrTdTWoXbozAzdaDZzfkorOj1oxVxlIMlpSIlpLrt8D4hrQL17z+c3h6hU/wv4Q/utps4+bm+6P/hIcf0JwQ5oQGPBL0eKPTYEXTW+eL/2DKn73J9BTXYANG57hz1cEMviVf/4tf5b/6C5pTQkMIWoAq7hTpOJjtAM4pxKu5vg5vXeUrtI09/Mo/5H+4z+Mp5xULh7cEm2QbRP2tFIKR7WM3fPf/jZ3SWCqLM2l4NxID5zB72HQXv3jj/8mLR5xXNA5v8EbFQEz7PpRfl1+MB/hlAN65qgDn3wTgH13hK7T59bmP+NIx1SHHU84nLOITt3iVz8mNO+lPrjGAnBFqmioNn1mTyk1ta47R6d4MrX7tjrnjYUpdUbv2rVr6YpVfsGG58AG8Ah9eyUN8CX4WfgV+G8LVWPDGb+Zd4cU584CtqSbMKxauxTg+dyn/LkVgA+IR8KHtejeFKRtTmLLpxN6mYVLjYxwXf5x2VofiZcp/lwKk4wGOpYDnoIZPdg/AAbwMfx0+ge9dgZvYjuqKe4HnGnykYo5TvJbG0Vj12JagRhwKa44H95ShkZa5RyLGGdfYvG7aw1TsF6iapPAS29mNS3NmsTQZCmgTzFwgL3upCTgtBTRwvGMAKrgLn4evwin8+afJRcff+8izUGUM63GOOuAs3tJkw7J4kyoNreqrpO6cYLQeFUd7TTpr5YOTLc9RUUogUOVJQ1GYJaFLAW0oTmKyYS46ZooP4S4EON3xQ5zC8/CX4CnM4c1PE8ApexpoYuzqlP3d4S3OJP8ZDK7cKWNaTlqmgDiiHwl1YsE41w1zT4iRTm3DBqxvOUsbMKKDa/EHxagtnta072ejc3DOIh5ojvh8l3tk1JF/AV6FU6jh3U8HwEazLgdCLYSQ+MYiAI2ltomkzttUb0gGHdSUUgsIYjTzLG3mObX4FBRaYtpDVNZrih9TgTeYOBxsEnN1gOCTM8Bsw/ieMc75w9kuAT6A+/AiHGvN/+Gn4KRkiuzpNNDYhDGFndWRpE6SVfm8U5bxnSgVV2jrg6JCKmneqey8VMFgq2+AM/i4L4RUbfSi27lNXZ7R7W9RTcq/q9fk4Xw3AMQd4I5ifAZz8FcVtm9SAom/dyN4lczJQW/kC42ZrHgcCoIf1oVMKkVItmMBi9cOeNHGLqOZk+QqQmrbc5YmYgxELUUN35z2iohstgfLIFmcMV7s4CFmI74L9+EFmGsi+tGnAOD4Yk9gIpo01Y4cA43BWGygMdr4YZekG3OBIUXXNukvJS8tqa06e+lSDCtnqqMFu6hWHXCF+WaYt64m9QBmNxi7Ioy7D+fa1yHw+FMAcPt7SysFLtoG4PXAk7JOA3aAxBRqUiAdU9Yp5lK3HLSRFtOim0sa8euEt08xvKjYjzeJ2GU7YawexrnKI9tmobInjFXCewpwriY9+RR4aaezFhMhGCppKwom0ChrgFlKzyPKkGlTW1YQrE9HJqu8hKGgMc6hVi5QRq0PZxNfrYNgE64utmRv6KKHRpxf6VDUaOvNP5jCEx5q185My/7RKz69UQu2im5k4/eownpxZxNLwiZ1AZTO2ZjWjkU9uaB2HFn6Q3u0JcsSx/qV9hTEApRzeBLDJQXxYmTnq7bdLa3+uqFrxLJ5w1TehnNHx5ECvCh2g2c3hHH5YsfdaSKddztfjQ6imKFGSyFwlLzxEGPp6r5IevVjk1AMx3wMqi1NxDVjLBiPs9tbsCkIY5we5/ML22zrCScFxnNtzsr9Wcc3CnD+pYO+4VXXiDE0oc/vQQ/fDK3oPESJMYXNmJa/DuloJZkcTpcYE8lIH8Dz8DJMiynNC86Mb2lNaaqP/+L7f2fcE/yP7/Lde8xfgSOdMxvOixZf/9p3+M4hT1+F+zApxg9XfUvYjc8qX2lfOOpK2gNRtB4flpFu9FTKCp2XJRgXnX6olp1zyYjTKJSkGmLE2NjUr1bxFM4AeAAHBUFIeSLqXR+NvH/M9fOnfHzOD2vCSyQJKzfgsCh+yi/Mmc35F2fUrw7miW33W9hBD1vpuUojFphIyvg7aTeoymDkIkeW3XLHmguMzbIAJejN6B5MDrhipE2y6SoFRO/AK/AcHHZHNIfiWrEe/C6cr3f/yOvrQKB+zMM55/GQdLDsR+ifr5Fiuu+/y+M78LzOE5dsNuXC3PYvYWd8NXvphLSkJIasrlD2/HOqQ+RjcRdjKTGWYhhVUm4yxlyiGPuMsZR7sMCHUBeTuNWA7if+ifXgc/hovftHXs/DV+Fvwe+f8shzMiMcweFgBly3//vwJfg5AN4450fn1Hd1Rm1aBLu22Dy3y3H2+OqMemkbGZ4jozcDjJf6596xOLpC0eMTHbKnxLxH27uZ/bMTGs2jOaMOY4m87CfQwF0dw53oa1k80JRuz/XgS+8fX3N9Af4qPIMfzKgCp4H5TDGe9GGeFPzSsZz80SlPTxXjgwJmC45njzgt2vbQ4b4OAdUK4/vWhO8d8v6EE8fMUsfakXbPpFJeLs2ubM/qdm/la3WP91uWhxXHjoWhyRUq2iJ/+5mA73zwIIo+LoZ/SgvIRjAd1IMvvn98PfgOvAJfhhm8scAKVWDuaRaK8aQ9f7vuPDH6Bj47ZXau7rqYJ66mTDwEDU6lLbCjCK0qTXyl5mnDoeNRxanj3FJbaksTk0faXxHxLrssgPkWB9LnA/MFleXcJozzjwsUvUG0X/QCve51qkMDXp9mtcyOy3rwBfdvVJK7D6/ACSzg3RoruIq5UDeESfEmVclDxnniU82vxMLtceD0hGZWzBNPMM/jSPne2OVatiTKUpY5vY7gc0LdUAWeWM5tH+O2I66AOWw9xT2BuyRVLGdoDHUsVRXOo/c+ZdRXvFfnxWyIV4upFLCl9eAL7h8Zv0QH8Ry8pA2cHzQpGesctVA37ZtklBTgHjyvdSeKY/RZw/kJMk0Y25cSNRWSigQtlULPTw+kzuJPeYEkXjQRpoGZobYsLF79pyd1dMRHInbgFTZqNLhDqiIsTNpoex2WLcy0/X6rHcdMMQvFSd5dWA++4P7xv89deACnmr36uGlL69bRCL6BSZsS6c0TU2TKK5gtWCzgAOOwQcurqk9j8whvziZSMLcq5hbuwBEsYjopUBkqw1yYBGpLA97SRElEmx5MCInBY5vgLk94iKqSWmhIGmkJ4Bi9m4L645J68LyY4wsFYBfUg5feP/6gWWm58IEmKQM89hq7KsZNaKtP5TxxrUZZVkNmMJtjbKrGxLNEbHPJxhqy7lAmbC32ZqeF6lTaknRWcYaFpfLUBh/rwaQycCCJmW15Kstv6jRHyJFry2C1ahkkIW0LO75s61+owxK1y3XqweX9m5YLM2DPFeOjn/iiqCKJ+yKXF8t5Yl/kNsqaSCryxPq5xWTFIaP8KSW0RYxqupaUf0RcTNSSdJZGcKYdYA6kdtrtmyBckfKXwqk0pHpUHlwWaffjNRBYFPUDWa8e3Lt/o0R0CdisKDM89cX0pvRHEfM8ca4t0s2Xx4kgo91MPQJ/0c9MQYq0co8MBh7bz1fio0UUHLR4aAIOvOmoYO6kwlEVODSSTliWtOtH6sPkrtctF9ZtJ9GIerBskvhdVS5cFNv9s1BU0AbdUgdK4FG+dRnjFmDTzniRMdZO1QhzMK355vigbdkpz9P6qjUGE5J2qAcXmwJ20cZUiAD0z+pGMx6xkzJkmEf40Hr4qZfVg2XzF9YOyoV5BjzVkUJngKf8lgNYwKECEHrCNDrWZzMlflS3yBhr/InyoUgBc/lKT4pxVrrC6g1YwcceK3BmNxZcAtz3j5EIpqguh9H6wc011YN75cKDLpFDxuwkrPQmUwW4KTbj9mZTwBwLq4aQMUZbHm1rylJ46dzR0dua2n3RYCWZsiHROeywyJGR7mXKlpryyCiouY56sFkBWEnkEB/raeh/Sw4162KeuAxMQpEkzy5alMY5wamMsWKKrtW2WpEWNnReZWONKWjrdsKZarpFjqCslq773PLmEhM448Pc3+FKr1+94vv/rfw4tEcu+lKTBe4kZSdijBrykwv9vbCMPcLQTygBjzVckSLPRVGslqdunwJ4oegtFOYb4SwxNgWLCmD7T9kVjTv5YDgpo0XBmN34Z/rEHp0sgyz7lngsrm4lvMm2Mr1zNOJYJ5cuxuQxwMGJq/TP5emlb8fsQBZviK4t8hFL+zbhtlpwaRSxQRWfeETjuauPsdGxsBVdO7nmP4xvzSoT29pRl7kGqz+k26B3Oy0YNV+SXbbQas1ctC/GarskRdFpKczVAF1ZXnLcpaMuzVe6lZ2g/1ndcvOVgRG3sdUAY1bKD6achijMPdMxV4muKVorSpiDHituH7rSTs7n/4y5DhRXo4FVBN4vO/zbAcxhENzGbHCzU/98Mcx5e7a31kWjw9FCe/zNeYyQjZsWb1uc7U33pN4Mji6hCLhivqfa9Ss6xLg031AgfesA/l99m9fgvnaF9JoE6bYKmkGNK3aPbHB96w3+DnxFm4hs0drLsk7U8kf/N/CvwQNtllna0rjq61sH8L80HAuvwH1tvBy2ChqWSCaYTaGN19sTvlfzFD6n+iKTbvtayfrfe9ueWh6GJFoxLdr7V72a5ZpvHcCPDzma0wTO4EgbLyedxstO81n57LYBOBzyfsOhUKsW1J1BB5vr/tz8RyqOFylQP9Tvst2JALsC5lsH8PyQ40DV4ANzYa4dedNiKNR1s+x2wwbR7q4/4cTxqEk4LWDebfisuo36JXLiWFjOtLrlNWh3K1rRS4xvHcDNlFnNmWBBAl5SWaL3oPOfnvbr5pdjVnEaeBJSYjuLEkyLLsWhKccadmOphZkOPgVdalj2QpSmfOsADhMWE2ZBu4+EEJI4wKTAuCoC4xwQbWXBltpxbjkXJtKxxabo9e7tyhlgb6gNlSbUpMh+l/FaqzVwewGu8BW1Zx7pTpQDJUjb8tsUTW6+GDXbMn3mLbXlXJiGdggxFAoUrtPS3wE4Nk02UZG2OOzlk7fRs7i95QCLo3E0jtrjnM7SR3uS1p4qtS2nJ5OwtQVHgOvArLBFijZUV9QtSl8dAY5d0E0hM0w3HS2DpIeB6m/A1+HfhJcGUq4sOxH+x3f5+VO+Ds9rYNI7zPXOYWPrtf8bYMx6fuOAX5jzNR0PdsuON+X1f7EERxMJJoU6GkTEWBvVolVlb5lh3tKCg6Wx1IbaMDdJ+9sUCc5KC46hKGCk3IVOS4TCqdBNfUs7Kd4iXf2RjnT/LLysJy3XDcHLh/vde3x8DoGvwgsa67vBk91G5Pe/HbOe7xwym0NXbtiuuDkGO2IJDh9oQvJ4cY4vdoqLDuoH9Zl2F/ofsekn8lkuhIlhQcffUtSjytFyp++p6NiE7Rqx/lodgKVoceEp/CP4FfjrquZaTtj2AvH5K/ywpn7M34K/SsoYDAdIN448I1/0/wveW289T1/lX5xBzc8N5IaHr0XMOQdHsIkDuJFifj20pBm5jzwUv9e2FhwRsvhAbalCIuIw3bhJihY3p6nTFFIZgiSYjfTf3aXuOjmeGn4bPoGvwl+CFzTRczBIuHBEeImHc37/lGfwZR0cXzVDOvaKfNHvwe+suZ771K/y/XcBlsoN996JpBhoE2toYxOznNEOS5TJc6Id5GEXLjrWo+LEWGNpPDU4WAwsIRROu+1vM+0oW37z/MBN9kqHnSArwPfgFJ7Cq/Ai3Ie7g7ncmI09v8sjzw9mzOAEXoIHxURueaAce5V80f/DOuuZwHM8vsMb5wBzOFWM7wymTXPAEvm4vcFpZ2ut0VZRjkiP2MlmLd6DIpbGSiHOjdnUHN90hRYmhTnmvhzp1iKDNj+b7t5hi79lWGwQ+HN9RsfFMy0FXbEwhfuczKgCbyxYwBmcFhhvo/7a44v+i3XWcwDP86PzpGQYdWh7csP5dBvZ1jNzdxC8pBGuxqSW5vw40nBpj5JhMwvOzN0RWqERHMr4Lv1kWX84xLR830G3j6yqZ1a8UstTlW+qJPOZ+sZ7xZPKTJLhiNOAFd6tk+jrTH31ncLOxid8+nzRb128HhUcru/y0Wn6iT254YPC6FtVSIMoW2sk727AhvTtrWKZTvgsmckfXYZWeNRXx/3YQ2OUxLDrbHtN11IwrgXT6c8dATDwLniYwxzO4RzuQqTKSC5gAofMZ1QBK3zQ4JWobFbcvJm87FK+6JXrKahLn54m3p+McXzzYtP8VF/QpJuh1OwieElEoI1pRxPS09FBrkq2tWCU59+HdhNtTIqKm8EBrw2RTOEDpG3IKo2Y7mFdLm3ZeVjYwVw11o/oznceMve4CgMfNym/utA/d/ILMR7gpXzRy9eDsgLcgbs8O2Va1L0zzIdwGGemTBuwROHeoMShkUc7P+ISY3KH5ZZeWqO8mFTxQYeXTNuzvvK5FGPdQfuu00DwYFY9dyhctEt+OJDdnucfpmyhzUJzfsJjr29l8S0bXBfwRS9ZT26tmMIdZucch5ZboMz3Nio3nIOsYHCGoDT4kUA9MiXEp9Xsui1S8th/kbWIrMBxDGLodWUQIWcvnXy+9M23xPiSMOiRPqM+YMXkUN3gXFrZJwXGzUaMpJfyRS9ZT0lPe8TpScuRlbMHeUmlaKDoNuy62iWNTWNFYjoxFzuJs8oR+RhRx7O4SVNSXpa0ZJQ0K1LAHDQ+D9IepkMXpcsq5EVCvClBUIzDhDoyKwDw1Lc59GbTeORivugw1IcuaEOaGWdNm+Ps5fQ7/tm0DjMegq3yM3vb5j12qUId5UZD2oxDSEWOZMSqFl/W+5oynWDa/aI04tJRQ2eTXusg86SQVu/nwSYwpW6wLjlqIzwLuxGIvoAvul0PS+ZNz0/akp/pniO/8JDnGyaCkzbhl6YcqmK/69prxPqtpx2+Km9al9sjL+rwMgHw4jE/C8/HQ3m1vBuL1fldbzd8mOueVJ92syqdEY4KJjSCde3mcRw2TA6szxedn+zwhZMps0XrqEsiUjnC1hw0TELC2Ek7uAAdzcheXv1BYLagspxpzSAoZZUsIzIq35MnFQ9DOrlNB30jq3L4pkhccKUAA8/ocvN1Rzx9QyOtERs4CVsJRK/DF71kPYrxYsGsm6RMh4cps5g1DOmM54Ly1ii0Hd3Y/BMk8VWFgBVmhqrkJCPBHAolwZaWzLR9Vb7bcWdX9NyUYE+uB2BKfuaeBUcjDljbYVY4DdtsVWvzRZdWnyUzDpjNl1Du3aloAjVJTNDpcIOVVhrHFF66lLfJL1zJr9PQ2nFJSBaKoDe+sAvLufZVHVzYh7W0h/c6AAZ+7Tvj6q9j68G/cTCS/3n1vLKHZwNi+P+pS0WkZNMBMUl+LDLuiE4omZy71r3UFMwNJV+VJ/GC5ixVUkBStsT4gGKh0Gm4Oy3qvq7Lbmq24nPdDuDR9deR11XzP4vFu3TYzfnIyiSVmgizUYGqkIXNdKTY9pgb9D2Ix5t0+NHkVzCdU03suWkkVZAoCONCn0T35gAeW38de43mf97sMOpSvj4aa1KYUm58USI7Wxxes03bAZdRzk6UtbzMaCQ6IxO0dy7X+XsjoD16hpsBeGz9dfzHj+R/Hp8nCxZRqkEDTaCKCSywjiaoMJ1TITE9eg7Jqnq8HL6gDwiZb0u0V0Rr/rmvqjxKuaLCX7ZWXTvAY+uvm3z8CP7nzVpngqrJpZKwWnCUjIviYVlirlGOzPLI3SMVyp/elvBUjjDkNhrtufFFErQ8pmdSlbK16toBHlt/HV8uHMX/vEGALkV3RJREiSlopxwdMXOZPLZ+ix+kAHpMKIk8UtE1ygtquttwxNhphrIZ1IBzjGF3IIGxGcBj6q8bHJBG8T9vdsoWrTFEuebEZuVxhhClH6P5Zo89OG9fwHNjtNQTpD0TG9PJLEYqvEY6Rlxy+ZZGfL0Aj62/bnQCXp//eeM4KzfQVJbgMQbUjlMFIm6TpcfWlZje7NBSV6IsEVmumWIbjiloUzQX9OzYdo8L1wjw2PrrpimONfmfNyzKklrgnEkSzT5QWYQW40YShyzqsRmMXbvVxKtGuYyMKaU1ugenLDm5Ily4iT14fP11Mx+xJv+zZ3MvnfdFqxU3a1W/FTB4m3Qfsyc1XUcdVhDeUDZXSFHHLQj/Y5jtC7ZqM0CXGwB4bP11i3LhOvzPGygYtiUBiwQV/4wFO0majijGsafHyRLu0yG6q35cL1rOpVxr2s5cM2jJYMCdc10Aj6q/blRpWJ//+dmm5psMl0KA2+AFRx9jMe2WbC4jQxnikd4DU8TwUjRVacgdlhmr3bpddzuJ9zXqr2xnxJfzP29RexdtjDVZqzkqa6PyvcojGrfkXiJ8SEtml/nYskicv0ivlxbqjemwUjMw5evdg8fUX9nOiC/lf94Q2i7MURk9nW1MSj5j8eAyV6y5CN2S6qbnw3vdA1Iwq+XOSCl663udN3IzLnrt+us25cI1+Z83SXQUldqQq0b5XOT17bGpLd6ssN1VMPf8c+jG8L3NeCnMdF+Ra3fRa9dft39/LuZ/3vwHoHrqGmQFafmiQw6eyzMxS05K4bL9uA+SKUQzCnSDkqOGokXyJvbgJ/BHI+qvY69//4rl20NsmK2ou2dTsyIALv/91/8n3P2Aao71WFGi8KKv1fRC5+J67Q/507/E/SOshqN5TsmYIjVt+kcjAx98iz/4SaojbIV1rexE7/C29HcYD/DX4a0rBOF5VTu7omsb11L/AWcVlcVZHSsqGuXLLp9ha8I//w3Mv+T4Ew7nTBsmgapoCrNFObIcN4pf/Ob/mrvHTGqqgAupL8qWjWPS9m/31jAe4DjA+4+uCoQoT/zOzlrNd3qd4SdphFxsUvYwGWbTWtISc3wNOWH+kHBMfc6kpmpwPgHWwqaSUG2ZWWheYOGQGaHB+eQ/kn6b3pOgLV+ODSn94wDvr8Bvb70/LLuiPPEr8OGVWfDmr45PZyccEmsVXZGe1pRNX9SU5+AVQkNTIVPCHF/jGmyDC9j4R9LfWcQvfiETmgMMUCMN1uNCakkweZsowdYobiMSlnKA93u7NzTXlSfe+SVbfnPQXmg9LpYAQxpwEtONyEyaueWM4FPjjyjG3uOaFmBTWDNgBXGEiQpsaWhnAqIijB07Dlsy3fUGeP989xbWkyf+FF2SNEtT1E0f4DYYVlxFlbaSMPIRMk/3iMU5pME2SIWJvjckciebkQuIRRyhUvkHg/iUljG5kzVog5hV7vIlCuBrmlhvgPfNHQM8lCf+FEGsYbMIBC0qC9a0uuy2wLXVbLBaP5kjHokCRxapkQyzI4QEcwgYHRZBp+XEFTqXFuNVzMtjXLJgX4gAid24Hjwc4N3dtVSe+NNiwTrzH4WVUOlDobUqr1FuAgYllc8pmzoVrELRHSIW8ViPxNy4xwjBpyR55I6J220qQTZYR4guvUICJiSpr9gFFle4RcF/OMB7BRiX8sSfhpNSO3lvEZCQfLUVTKT78Ek1LRLhWN+yLyTnp8qWUZ46b6vxdRGXfHVqx3eI75YaLa4iNNiK4NOW7wPW6lhbSOF9/M9qw8e/aoB3d156qTzxp8pXx5BKAsYSTOIIiPkp68GmTq7sZtvyzBQaRLNxIZ+paozHWoLFeExIhRBrWitHCAHrCF7/thhD8JhYz84wg93QRV88wLuLY8zF8sQ36qF1J455bOlgnELfshKVxYOXKVuKx0jaj22sczTQqPqtV/XDgpswmGTWWMSDw3ssyUunLLrVPGjYRsH5ggHeHSWiV8kT33ycFSfMgkoOK8apCye0J6VW6GOYvffgU9RWsukEi2kUV2nl4dOYUzRik9p7bcA4ggdJ53LxKcEe17B1R8eqAd7dOepV8sTXf5lhejoL85hUdhDdknPtKHFhljOT+bdq0hxbm35p2nc8+Ja1Iw+tJykgp0EWuAAZYwMVwac5KzYMslhvgHdHRrxKnvhTYcfKsxTxtTETkjHO7rr3zjoV25lAQHrqpV7bTiy2aXMmUhTBnKS91jhtR3GEoF0oLnWhWNnYgtcc4N0FxlcgT7yz3TgNIKkscx9jtV1ZKpWW+Ub1tc1eOv5ucdgpx+FJy9pgbLE7xDyXb/f+hLHVGeitHOi6A7ybo3sF8sS7w7cgdk0nJaOn3hLj3uyD0Zp5pazFIUXUpuTTU18d1EPkDoX8SkmWTnVIozEdbTcZjoqxhNHf1JrSS/AcvHjZ/SMHhL/7i5z+POsTUh/8BvNfYMTA8n+yU/MlTZxSJDRStqvEuLQKWwDctMTQogUDyQRoTQG5Kc6oQRE1yV1jCA7ri7jdZyK0sYTRjCR0Hnnd+y7nHxNgTULqw+8wj0mQKxpYvhjm9uSUxg+TTy7s2GtLUGcywhXSKZN275GsqlclX90J6bRI1aouxmgL7Q0Nen5ziM80SqMIo8cSOo+8XplT/5DHNWsSUr/6lLN/QQ3rDyzLruEW5enpf7KqZoShEduuSFOV7DLX7Ye+GmXb6/hnNNqKsVXuMDFpb9Y9eH3C6NGEzuOuI3gpMH/I6e+zDiH1fXi15t3vA1czsLws0TGEtmPEJdiiFPwlwKbgLHAFk4P6ZyPdymYYHGE0dutsChQBl2JcBFlrEkY/N5bQeXQ18gjunuMfMfsBlxJSx3niO485fwO4fGD5T/+3fPQqkneWVdwnw/3bMPkW9Wbqg+iC765Zk+xcT98ibKZc2EdgHcLoF8cSOo/Oc8fS+OyEULF4g4sJqXVcmfMfsc7A8v1/yfGXmL9I6Fn5pRwZhsPv0TxFNlAfZCvG+Oohi82UC5f/2IsJo0cTOm9YrDoKhFPEUr/LBYTUNht9zelHXDqwfPCIw4owp3mOcIQcLttWXFe3VZ/j5H3cIc0G6oPbCR+6Y2xF2EC5cGUm6wKC5tGEzhsWqw5hNidUiKX5gFWE1GXh4/Qplw4sVzOmx9QxU78g3EF6wnZlEN4FzJ1QPSLEZz1KfXC7vd8ssGdIbNUYpVx4UapyFUHzJoTOo1McSkeNn1M5MDQfs4qQuhhX5vQZFw8suwWTcyYTgioISk2YdmkhehG4PkE7w51inyAGGaU+uCXADabGzJR1fn3lwkty0asIo8cROm9Vy1g0yDxxtPvHDAmpu+PKnM8Ix1wwsGw91YJqhteaWgjYBmmQiebmSpwKKzE19hx7jkzSWOm66oPbzZ8Yj6kxVSpYjVAuvLzYMCRo3oTQecOOjjgi3NQ4l9K5/hOGhNTdcWVOTrlgYNkEXINbpCkBRyqhp+LdRB3g0OU6rMfW2HPCFFMV9nSp+uB2woepdbLBuJQyaw/ZFysXrlXwHxI0b0LovEkiOpXGA1Ijagf+KUNC6rKNa9bQnLFqYNkEnMc1uJrg2u64ELPBHpkgWbmwKpJoDhMwNbbGzAp7Yg31wS2T5rGtzit59PrKhesWG550CZpHEzpv2NGRaxlNjbMqpmEIzygJqQfjypycs2pg2cS2RY9r8HUqkqdEgKTWtWTKoRvOBPDYBltja2SO0RGjy9UHtxwRjA11ujbKF+ti5cIR9eCnxUg6owidtyoU5tK4NLji5Q3HCtiyF2IqLGYsHViOXTXOYxucDqG0HyttqYAKqYo3KTY1ekyDXRAm2AWh9JmsVh/ccg9WJ2E8YjG201sPq5ULxxX8n3XLXuMInbft2mk80rRGjCGctJ8/GFdmEQ9Ug4FlE1ll1Y7jtiraqm5Fe04VV8lvSVBL8hiPrfFVd8+7QH3Qbu2ipTVi8cvSGivc9cj8yvH11YMHdNSERtuOslM97feYFOPKzGcsI4zW0YGAbTAOaxCnxdfiYUmVWslxiIblCeAYr9VYR1gM7GmoPrilunSxxeT3DN/2eBQ9H11+nk1adn6VK71+5+Jfct4/el10/7KBZfNryUunWSCPxPECk1rdOv1WVSrQmpC+Tl46YD3ikQYcpunSQgzVB2VHFhxHVGKDgMEY5GLlQnP7FMDzw7IacAWnO6sBr12u+XanW2AO0wQ8pknnFhsL7KYIqhkEPmEXFkwaN5KQphbkUmG72wgw7WSm9RiL9QT925hkjiVIIhphFS9HKI6/8QAjlpXqg9W2C0apyaVDwKQwrwLY3j6ADR13ZyUNByQXHQu6RY09Hu6zMqXRaNZGS/KEJs0cJEe9VH1QdvBSJv9h09eiRmy0V2uJcqHcShcdvbSNg5fxkenkVprXM9rDVnX24/y9MVtncvbKY706anNl3ASll9a43UiacVquXGhvq4s2FP62NGKfQLIQYu9q1WmdMfmUrDGt8eDS0cXozH/fjmUH6Jruvm50hBDSaEU/2Ru2LEN/dl006TSc/g7tfJERxGMsgDUEr104pfWH9lQaN+M4KWQjwZbVc2rZVNHsyHal23wZtIs2JJqtIc/WLXXRFCpJkfE9jvWlfFbsNQ9pP5ZBS0zKh4R0aMFj1IjTcTnvi0Zz2rt7NdvQb2mgbju1plsH8MmbnEk7KbK0b+wC2iy3aX3szW8xeZvDwET6hWZYwqTXSSG+wMETKum0Dq/q+x62gt2ua2ppAo309TRk9TPazfV3qL9H8z7uhGqGqxNVg/FKx0HBl9OVUORn8Q8Jx9gFttGQUDr3tzcXX9xGgN0EpzN9mdZ3GATtPhL+CjxFDmkeEU6x56kqZRusLzALXVqkCN7zMEcqwjmywDQ6OhyUe0Xao1Qpyncrg6wKp9XfWDsaZplElvQ/b3sdweeghorwBDlHzgk1JmMc/wiERICVy2VJFdMjFuLQSp3S0W3+sngt2njwNgLssFGVQdJ0tu0KH4ky1LW4yrbkuaA6Iy9oz/qEMMXMMDWyIHhsAyFZc2peV9hc7kiKvfULxCl9iddfRK1f8kk9qvbdOoBtOg7ZkOZ5MsGrSHsokgLXUp9y88smniwWyuFSIRVmjplga3yD8Uij5QS1ZiM4U3Qw5QlSm2bXjFe6jzzBFtpg+/YBbLAWG7OPynNjlCw65fukGNdkJRf7yM1fOxVzbxOJVocFoYIaGwH22mIQkrvu1E2nGuebxIgW9U9TSiukPGU+Lt++c3DJPKhyhEEbXCQLUpae2exiKy6tMPe9mDRBFCEMTWrtwxN8qvuGnt6MoihKWS5NSyBhbH8StXoAz8PLOrRgLtOT/+4vcu+7vDLnqNvztOq7fmd8sMmY9Xzn1zj8Dq8+XVdu2Nv0IIySgEdQo3xVHps3Q5i3fLFsV4aiqzAiBhbgMDEd1uh8qZZ+lwhjkgokkOIv4xNJmyncdfUUzgB4oFMBtiu71Xumpz/P+cfUP+SlwFExwWW62r7b+LSPxqxn/gvMZ5z9C16t15UbNlq+jbGJtco7p8wbYlL4alSyfWdeuu0j7JA3JFNuVAwtst7F7FhWBbPFNKIUORndWtLraFLmMu7KFVDDOzqkeaiN33YAW/r76wR4XDN/yN1z7hejPau06EddkS/6XThfcz1fI/4K736fO48vlxt2PXJYFaeUkFS8U15XE3428xdtn2kc8GQlf1vkIaNRRnOMvLTWrZbElEHeLWi1o0dlKPAh1MVgbbVquPJ5+Cr8LU5/H/+I2QlHIU2ClXM9G8v7Rr7oc/hozfUUgsPnb3D+I+7WF8kNO92GY0SNvuxiE+2Bt8prVJTkzE64sfOstxuwfxUUoyk8VjcTlsqe2qITSFoSj6Epd4KsT6BZOWmtgE3hBfir8IzZDwgV4ZTZvD8VvPHERo8v+vL1DASHTz/i9OlKueHDjK5Rnx/JB1Vb1ioXdBra16dmt7dgik10yA/FwJSVY6XjA3oy4SqM2frqDPPSRMex9qs3XQtoWxMj7/Er8GWYsXgjaVz4OYumP2+9kbxvny/6kvWsEBw+fcb5bInc8APdhpOSs01tEqIkoiZjbAqKMruLbJYddHuHFRIyJcbdEdbl2sVLaySygunutBg96Y2/JjKRCdyHV+AEFtTvIpbKIXOamknYSiB6KV/0JetZITgcjjk5ZdaskBtWO86UF0ap6ozGXJk2WNiRUlCPFir66lzdm/SLSuK7EUdPz8f1z29Skq6F1fXg8+5UVR6bszncP4Tn4KUkkdJ8UFCY1zR1i8RmL/qQL3rlei4THG7OODlnKko4oI01kd3CaM08Ia18kC3GNoVaO9iDh+hWxSyTXFABXoau7Q6q9OxYg/OVEMw6jdbtSrJ9cBcewGmaZmg+bvkUnUUaGr+ZfnMH45Ivevl61hMcXsxYLFTu1hTm2zViCp7u0o5l+2PSUh9bDj6FgYypufBDhqK2+oXkiuHFHR3zfj+9PtA8oR0xnqX8qn+sx3bFODSbbF0X8EUvWQ8jBIcjo5bRmLOljDNtcqNtOe756h3l0VhKa9hDd2l1eqmsnh0MNMT/Cqnx6BInumhLT8luljzQ53RiJeA/0dxe5NK0o2fA1+GLXr6eNQWHNUOJssQaTRlGpLHKL9fD+IrQzTOMZS9fNQD4AnRNVxvTdjC+fJdcDDWQcyB00B0t9BDwTxXgaAfzDZ/DBXzRnfWMFRwuNqocOmX6OKNkY63h5n/fFcB28McVHqnXZVI27K0i4rDLNE9lDKV/rT+udVbD8dFFu2GGZ8mOt0kAXcoX3ZkIWVtw+MNf5NjR2FbivROHmhV1/pj2egv/fMGIOWTIWrV3Av8N9imV9IWml36H6cUjqEWNv9aNc+veb2sH46PRaHSuMBxvtW+twxctq0z+QsHhux8Q7rCY4Ct8lqsx7c6Sy0dl5T89rIeEuZKoVctIk1hNpfavER6yyH1Vvm3MbsUHy4ab4hWr/OZPcsRBphnaV65/ZcdYPNNwsjN/djlf9NqCw9U5ExCPcdhKxUgLSmfROpLp4WSUr8ojdwbncbvCf+a/YzRaEc6QOvXcGO256TXc5Lab9POvB+AWY7PigWYjzhifbovuunzRawsO24ZqQQAqguBtmpmPB7ysXJfyDDaV/aPGillgz1MdQg4u5MYaEtBNNHFjkRlSpd65lp4hd2AVPTfbV7FGpyIOfmNc/XVsPfg7vzaS/3nkvLL593ANLvMuRMGpQIhiF7kUEW9QDpAUbTWYBcbp4WpacHHY1aacqQyjGZS9HI3yCBT9kUZJhVOD+zUDvEH9ddR11fzPcTDQ5TlgB0KwqdXSavk9BC0pKp0WmcuowSw07VXmXC5guzSa4p0UvRw2lbDiYUx0ExJJRzWzi6Gm8cnEkfXXsdcG/M/jAJa0+bmCgdmQ9CYlNlSYZOKixmRsgiFxkrmW4l3KdFKv1DM8tk6WxPYJZhUUzcd8Kdtgrw/gkfXXDT7+avmfVak32qhtkg6NVdUS5wgkru1YzIkSduTW1FDwVWV3JQVJVuieTc0y4iDpFwc7/BvSalvKdQM8sv662cevz/+8sQVnjVAT0W2wLllw1JiMhJRxgDjCjLQsOzSFSgZqx7lAW1JW0e03yAD3asC+GD3NbQhbe+mN5GXH1F83KDOM4n/e5JIuH4NpdQARrFPBVptUNcjj4cVMcFSRTE2NpR1LEYbYMmfWpXgP9KejaPsLUhuvLCsVXznAG9dfx9SR1ud/3hZdCLHb1GMdPqRJgqDmm76mHbvOXDtiO2QPUcKo/TWkQ0i2JFXpBoo7vij1i1Lp3ADAo+qvG3V0rM//vFnnTE4hxd5Ka/Cor5YEdsLVJyKtDgVoHgtW11pWSjolPNMnrlrVj9Fv2Qn60twMwKPqr+N/wvr8z5tZcDsDrv06tkqyzESM85Ycv6XBWA2birlNCXrI6VbD2lx2L0vQO0QVTVVLH4SE67fgsfVXv8n7sz7/85Z7cMtbE6f088wSaR4kCkCm10s6pKbJhfqiUNGLq+0gLWC6eUAZFPnLjwqtKd8EwGvWX59t7iPW4X/eAN1svgRVSY990YZg06BD1ohLMtyFTI4pKTJsS9xREq9EOaPWiO2gpms7397x6nQJkbh+Fz2q/rqRROX6/M8bJrqlVW4l6JEptKeUFuMYUbtCQ7CIttpGc6MY93x1r1vgAnRXvY5cvwWPqb9uWQm+lP95QxdNMeWhOq1x0Db55C7GcUv2ZUuN6n8iKzsvOxibC//Yfs9Na8r2Rlz02vXXDT57FP/zJi66/EJSmsJKa8QxnoqW3VLQ+jZVUtJwJ8PNX1NQCwfNgdhhHD9on7PdRdrdGPF28rJr1F+3LBdeyv+8yYfLoMYet1vX4upNAjVvwOUWnlNXJXlkzk5Il6kqeoiL0C07qno+/CYBXq/+utlnsz7/Mzvy0tmI4zm4ag23PRN3t/CWryoUVJGm+5+K8RJ0V8Hc88/XHUX/HfiAq7t+BH+x6v8t438enWmdJwFA6ZINriLGKv/95f8lT9/FnyA1NMVEvQyaXuu+gz36f/DD73E4pwqpLcvm/o0Vle78n//+L/NPvoefp1pTJye6e4A/D082FERa5/opeH9zpvh13cNm19/4v/LDe5xMWTi8I0Ta0qKlK27AS/v3/r+/x/2GO9K2c7kVMonDpq7//jc5PKCxeNPpFVzaRr01wF8C4Pu76hXuX18H4LduTr79guuFD3n5BHfI+ZRFhY8w29TYhbbLi/bvBdqKE4fUgg1pBKnV3FEaCWOWyA+m3WpORZr/j+9TKJtW8yBTF2/ZEODI9/QavHkVdGFp/Pjn4Q+u5hXapsP5sOH+OXXA1LiKuqJxiMNbhTkbdJTCy4llEt6NnqRT4dhg1V3nbdrm6dYMecA1yTOL4PWTE9L5VzPFlLBCvlG58AhehnN4uHsAYinyJ+AZ/NkVvELbfOBUuOO5syBIEtiqHU1k9XeISX5bsimrkUUhnGDxourN8SgUsCZVtKyGbyGzHXdjOhsAvOAswSRyIBddRdEZWP6GZhNK/yjwew9ehBo+3jEADu7Ay2n8mDc+TS7awUHg0OMzR0LABhqLD4hJEh/BEGyBdGlSJoXYXtr+3HS4ijzVpgi0paWXtdruGTknXBz+11qT1Q2inxaTzQCO46P3lfLpyS4fou2PH/PupwZgCxNhGlj4IvUuWEsTkqMWm6i4xCSMc9N1RDQoCVcuGItJ/MRWefais+3synowi/dESgJjkilnWnBTGvRWmaw8oR15257t7CHmCf8HOn7cwI8+NQBXMBEmAa8PMRemrNCEhLGEhDQKcGZWS319BX9PFBEwGTbRBhLbDcaV3drFcDqk5kCTd2JF1Wp0HraqBx8U0wwBTnbpCadwBA/gTH/CDrcCs93LV8E0YlmmcyQRQnjBa8JESmGUfIjK/7fkaDJpmD2QptFNVJU1bbtIAjjWQizepOKptRjbzR9Kag6xZmMLLjHOtcLT3Tx9o/0EcTT1XN3E45u24AiwEypDJXihKjQxjLprEwcmRKclaDNZCVqr/V8mYWyFADbusiY5hvgFoU2vio49RgJLn5OsReRFN6tabeetiiy0V7KFHT3HyZLx491u95sn4K1QQSPKM9hNT0wMVvAWbzDSVdrKw4zRjZMyJIHkfq1VAVCDl/bUhNKlGq0zGr05+YAceXVPCttVk0oqjVwMPt+BBefx4yPtGVkUsqY3CHDPiCM5ngupUwCdbkpd8kbPrCWHhkmtIKLEetF2499eS1jZlIPGYnlcPXeM2KD9vLS0bW3ktYNqUllpKLn5ZrsxlIzxvDu5eHxzGLctkZLEY4PgSOg2IUVVcUONzUDBEpRaMoXNmUc0tFZrTZquiLyKxrSm3DvIW9Fil+AkhXu5PhEPx9mUNwqypDvZWdKlhIJQY7vn2OsnmBeOWnYZ0m1iwbbw1U60by5om47iHRV6fOgzjMf/DAZrlP40Z7syxpLK0lJ0gqaAK1c2KQKu7tabTXkLFz0sCftuwX++MyNeNn68k5Buq23YQhUh0SNTJa1ioQ0p4nUG2y0XilF1JqODqdImloPS4Bp111DEWT0jJjVv95uX9BBV7eB3bUWcu0acSVM23YZdd8R8UbQUxJ9wdu3oMuhdt929ME+mh6JXJ8di2RxbTi6TbrDquqV4aUKR2iwT6aZbyOwEXN3DUsWr8Hn4EhwNyHuXHh7/pdaUjtR7vnDh/d8c9xD/s5f501eQ1+CuDiCvGhk1AN/4Tf74RfxPwD3toLarR0zNtsnPzmS64KIRk861dMWCU8ArasG9T9H0ZBpsDGnjtAOM2+/LuIb2iIUGXNgl5ZmKD/Tw8TlaAuihaFP5yrw18v4x1898zIdP+DDAX1bM3GAMvPgRP/cJn3zCW013nrhHkrITyvYuwOUkcHuKlRSW5C6rzIdY4ppnF7J8aAJbQepgbJYBjCY9usGXDKQxq7RZfh9eg5d1UHMVATRaD/4BHK93/1iAgYZ/+jqPn8Dn4UExmWrpa3+ZOK6MvM3bjwfzxNWA2dhs8+51XHSPJiaAhGSpWevEs5xHLXcEGFXYiCONySH3fPWq93JIsBiSWvWyc3CAN+EcXoT7rCSANloPPoa31rt/5PUA/gp8Q/jDD3hyrjzlR8VkanfOvB1XPubt17vzxAfdSVbD1pzAnfgyF3ycadOTOTXhpEUoLC1HZyNGW3dtmjeXgr2r56JNmRwdNNWaQVBddd6rh4MhviEB9EFRD/7RGvePvCbwAL4Mx/D6M541hHO4D3e7g6PafdcZVw689z7NGTwo5om7A8sPhccT6qKcl9NJl9aM/9kX+e59Hh1yPqGuCCZxuITcsmNaJ5F7d0q6J3H48TO1/+M57085q2icdu2U+W36Ldllz9Agiv4YGljoEN908EzvDOrBF98/vtJwCC/BF2AG75xxEmjmMIcjxbjoaxqOK3/4hPOZzhMPBpYPG44CM0dTVm1LjLtUWWVz1Bcf8tEx0zs8O2A2YVHRxKYOiy/aOVoAaMu0i7ubu43njjmd4ibMHU1sIDHaQNKrZND/FZYdk54oCXetjq7E7IVl9eAL7t+oHnwXXtLx44czzoRFHBztYVwtH1d+NOMkupZ5MTM+gUmq90X+Bh9zjRlmaQ+m7YMqUL/veemcecAtOJ0yq1JnVlN27di2E0+Klp1tAJ4KRw1eMI7aJjsO3R8kPSI3fUFXnIOfdQe86sIIVtWDL7h//Ok6vj8vwDk08NEcI8zz7OhBy+WwalzZeZ4+0XniRfst9pAJqQHDGLzVQ2pheZnnv1OWhwO43/AgcvAEXEVVpa4db9sGvNK8wjaENHkfFQ4Ci5i7dqnQlPoLQrHXZDvO3BIXZbJOBrOaEbML6sFL798I4FhKihjHMsPjBUZYCMFr6nvaArxqXPn4lCa+cHfSa2cP27g3Z3ziYTRrcbQNGLQmGF3F3cBdzzzX7AILx0IB9rbwn9kx2G1FW3Inic+ZLIsVvKR8Zwfj0l1fkqo8LWY1M3IX14OX3r9RKTIO+d9XzAI8qRPGPn/4NC2n6o4rN8XJ82TOIvuVA8zLKUHRFgBCetlDZlqR1gLKjS39xoE7Bt8UvA6BxuEDjU3tFsEijgA+615tmZkXKqiEENrh41iLDDZNq4pKTWR3LZfnos81LOuNa15cD956vLMsJd1rqYp51gDUQqMYm2XsxnUhD2jg1DM7SeuJxxgrmpfISSXVIJIS5qJJSvJPEQ49DQTVIbYWJ9QWa/E2+c/oPK1drmC7WSfJRNKBO5Yjvcp7Gc3dmmI/Xh1kDTEuiSnWqQf37h+fTMhGnDf6dsS8SQfQWlqqwXXGlc/PEZ/SC5mtzIV0nAshlQdM/LvUtYutrEZ/Y+EAFtq1k28zQhOwLr1AIeANzhF8t9qzTdZf2qRKO6MWE9ohBYwibbOmrFtNmg3mcS+tB28xv2uKd/agYCvOP+GkSc+0lr7RXzyufL7QbkUpjLjEWFLqOIkAGu2B0tNlO9Eau2W1qcOUvVRgKzypKIQZ5KI3q0MLzqTNRYqiZOqmtqloIRlmkBHVpHmRYV6/HixbO6UC47KOFJnoMrVyr7wYz+SlW6GUaghYbY1I6kkxA2W1fSJokUdSh2LQ1GAimRGm0MT+uu57H5l7QgOWxERpO9moLRPgTtquWCfFlGlIjQaRly9odmzMOWY+IBO5tB4sW/0+VWGUh32qYk79EidWKrjWuiLpiVNGFWFRJVktyeXWmbgBBzVl8anPuXyNJlBJOlKLTgAbi/EYHVHxWiDaVR06GnHQNpJcWcK2jJtiCfG2sEHLzuI66sGrMK47nPIInPnu799935aOK2cvmvubrE38ZzZjrELCmXM2hM7UcpXD2oC3+ECVp7xtIuxptJ0jUr3sBmBS47TVxlvJ1Sqb/E0uLdvLj0lLr29ypdd/eMX3f6lrxGlKwKQxEGvw0qHbkbwrF3uHKwVENbIV2wZ13kNEF6zD+x24aLNMfDTCbDPnEikZFyTNttxWBXDaBuM8KtI2rmaMdUY7cXcUPstqTGvBGSrFWIpNMfbdea990bvAOC1YX0qbc6smDS1mPxSJoW4fwEXvjMmhlijDRq6qale6aJEuFGoppYDoBELQzLBuh/mZNx7jkinv0EtnUp50lO9hbNK57lZaMAWuWR5Yo9/kYwcYI0t4gWM47Umnl3YmpeBPqSyNp3K7s2DSAS/39KRuEN2bS4xvowV3dFRMx/VFcp2Yp8w2nTO9hCXtHG1kF1L4KlrJr2wKfyq77R7MKpFKzWlY9UkhYxyHWW6nBWPaudvEAl3CGcNpSXPZ6R9BbBtIl6cHL3gIBi+42CYXqCx1gfGWe7Ap0h3luyXdt1MKy4YUT9xSF01G16YEdWsouW9mgDHd3veyA97H+Ya47ZmEbqMY72oPztCGvK0onL44AvgC49saZKkWRz4veWljE1FHjbRJaWv6ZKKtl875h4CziFCZhG5rx7tefsl0aRT1bMHZjm8dwL/6u7wCRysaQblQoG5yAQN5zpatMNY/+yf8z+GLcH/Qn0iX2W2oEfXP4GvwQHuIL9AYGnaO3zqAX6946nkgqZNnUhx43DIdQtMFeOPrgy/y3Yd85HlJWwjLFkU3kFwq28xPnuPhMWeS+tDLV9Otllq7pQCf3uXJDN9wFDiUTgefHaiYbdfi3b3u8+iY6TnzhgehI1LTe8lcd7s1wJSzKbahCRxKKztTLXstGAiu3a6rPuQs5pk9TWAan5f0BZmGf7Ylxzzk/A7PAs4QPPPAHeFQ2hbFHszlgZuKZsJcUmbDC40sEU403cEjczstOEypa+YxevL4QBC8oRYqWdK6b7sK25tfE+oDZgtOQ2Jg8T41HGcBE6fTWHn4JtHcu9S7uYgU5KSCkl/mcnq+5/YBXOEr6lCUCwOTOM1taOI8mSxx1NsCXBEmLKbMAg5MkwbLmpBaFOPrNSlO2HnLiEqW3tHEwd8AeiQLmn+2gxjC3k6AxREqvKcJbTEzlpLiw4rNZK6oJdidbMMGX9FULKr0AkW+2qDEPBNNm5QAt2Ik2nftNWHetubosHLo2nG4vQA7GkcVCgVCgaDixHqo9UUn1A6OshapaNR/LPRYFV8siT1cCtJE0k/3WtaNSuUZYKPnsVIW0xXWnMUxq5+En4Kvw/MqQmVXnAXj9Z+9zM98zM/Agy7F/qqj2Nh67b8HjFnPP3iBn/tkpdzwEJX/whIcQUXOaikeliCRGUk7tiwF0rItwMEhjkZ309hikFoRAmLTpEXWuHS6y+am/KB/fM50aLEhGnSMwkpxzOov4H0AvgovwJ1iGzDLtJn/9BU+fAINfwUe6FHSLhu83viV/+/HrOePX+STT2B9uWGbrMHHLldRBlhS/CJQmcRxJFqZica01XixAZsYiH1uolZxLrR/SgxVIJjkpQP4PE9sE59LKLr7kltSBogS5tyszzH8Fvw8/AS8rNOg0xUS9fIaHwb+6et8Q/gyvKRjf5OusOzGx8evA/BP4IP11uN/grca5O0lcsPLJ5YjwI4QkJBOHa0WdMZYGxPbh2W2nR9v3WxEWqgp/G3+6VZbRLSAAZ3BhdhAaUL33VUSw9yjEsvbaQ9u4A/gGXwZXoEHOuU1GSj2chf+Mo+f8IcfcAxfIKVmyunRbYQVnoevwgfw3TXXcw++xNuP4fhyueEUNttEduRVaDttddoP0eSxLe2LENk6itYxlrxBNBYrNNKSQmeaLcm9c8UsaB5WyO6675yyQIAWSDpBVoA/gxmcwEvwoDv0m58UE7gHn+fJOa8/Ywan8EKRfjsopF83eCglX/Sfr7OeaRoQfvt1CGvIDccH5BCvw1sWIzRGC/66t0VTcLZQZtm6PlAasbOJ9iwWtUo7biktTSIPxnR24jxP1ZKaqq+2RcXM9OrBAm/AAs7hDJ5bNmGb+KIfwCs8a3jnjBrOFeMjHSCdbKr+2uOLfnOd9eiA8Hvvwwq54VbP2OqwkB48Ytc4YEOiH2vTXqodabfWEOzso4qxdbqD5L6tbtNPECqbhnA708DZH4QOJUXqScmUlks7Ot6FBuZw3n2mEbaUX7kDzxHOOQk8nKWMzAzu6ZZ8sOFw4RK+6PcuXo9tB4SbMz58ApfKDXf3szjNIIbGpD5TKTRxGkEMLjLl+K3wlWXBsCUxIDU+jbOiysESqAy1MGUJpXgwbTWzNOVEziIXZrJ+VIztl1PUBxTSo0dwn2bOmfDRPD3TRTGlfbCJvO9KvuhL1hMHhB9wPuPRLGHcdOWG2xc0U+5bQtAJT0nRTewXL1pgk2+rZAdeWmz3jxAqfNQQdzTlbF8uJ5ecEIWvTkevAHpwz7w78QujlD/Lr491bD8/1vhM2yrUQRrWXNQY4fGilfctMWYjL72UL/qS9eiA8EmN88nbNdour+PBbbAjOjIa4iBhfFg6rxeKdEGcL6p3EWR1Qq2Qkhs2DrnkRnmN9tG2EAqmgPw6hoL7Oza7B+3SCrR9tRftko+Lsf2F/mkTndN2LmzuMcKTuj/mX2+4Va3ki16+nnJY+S7MefpkidxwnV+4wkXH8TKnX0tsYzYp29DOOoSW1nf7nTh2akYiWmcJOuTidSaqESrTYpwjJJNVGQr+rLI7WsqerHW6Kp/oM2pKuV7T1QY9gjqlZp41/WfKpl56FV/0kvXQFRyeQ83xaTu5E8p5dNP3dUF34ihyI3GSpeCsywSh22ZJdWto9winhqifb7VRvgktxp13vyjrS0EjvrRfZ62uyqddSWaWYlwTPAtJZ2oZ3j/Sgi/mi+6vpzesfAcWNA0n8xVyw90GVFGuZjTXEQy+6GfLGLMLL523f5E0OmxVjDoOuRiH91RKU+vtoCtH7TgmvBLvtFXWLW15H9GTdVw8ow4IlRLeHECN9ym1e9K0I+Cbnhgv4Yu+aD2HaQJ80XDqOzSGAV4+4yCqBxrsJAX6ZTIoX36QnvzhhzzMfFW2dZVLOJfo0zbce5OvwXMFaZ81mOnlTVXpDZsQNuoYWveketKb5+6JOOsgX+NTm7H49fUTlx+WLuWL7qxnOFh4BxpmJx0p2gDzA/BUARuS6phR+pUsY7MMboAHx5xNsSVfVZcYSwqCKrqon7zM+8ecCkeS4nm3rINuaWvVNnMRI1IRpxTqx8PZUZ0Br/UEduo3B3hNvmgZfs9gQPj8vIOxd2kndir3awvJ6BLvoUuOfFWNYB0LR1OQJoUySKb9IlOBx74q1+ADC2G6rOdmFdJcD8BkfualA+BdjOOzP9uUhGUEX/TwhZsUduwRr8wNuXKurCixLBgpQI0mDbJr9dIqUuV+92ngkJZ7xduCk2yZKbfWrH1VBiTg9VdzsgRjW3CVXCvAwDd+c1z9dWw9+B+8MJL/eY15ZQ/HqvTwVdsZn5WQsgRRnMaWaecu3jFvMBEmgg+FJFZsnSl0zjB9OqPYaBD7qmoVyImFvzi41usesV0julaAR9dfR15Xzv9sEruRDyk1nb+QaLU67T885GTls6YgcY+UiMa25M/pwGrbCfzkvR3e0jjtuaFtnwuagHTSb5y7boBH119HXhvwP487jJLsLJ4XnUkHX5sLbS61dpiAXRoZSCrFJ+EjpeU3puVfitngYNo6PJrAigKktmwjyQdZpfq30mmtulaAx9Zfx15Xzv+cyeuiBFUs9zq8Kq+XB9a4PVvph3GV4E3y8HENJrN55H1X2p8VyqSKwVusJDKzXOZzplWdzBUFK9e+B4+uv468xvI/b5xtSAkBHQaPvtqWzllVvEOxPbuiE6+j2pvjcKsbvI7txnRErgfH7LdXqjq0IokKzga14GzQ23SSbCQvO6r+Or7SMIr/efOkkqSdMnj9mBx2DRsiY29Uj6+qK9ZrssCKaptR6HKURdwUYeUWA2kPzVKQO8ku2nU3Anhs/XWkBx3F/7wJtCTTTIKftthue1ty9xvNYLY/zo5KSbIuKbXpbEdSyeRyYdAIwKY2neyoc3+k1XUaufYga3T9daMUx/r8z1s10ITknIO0kuoMt+TB8jK0lpayqqjsJ2qtXAYwBU932zinimgmd6mTRDnQfr88q36NAI+tv24E8Pr8zxtasBqx0+xHH9HhlrwsxxNUfKOHQaZBITNf0uccj8GXiVmXAuPEAKSdN/4GLHhs/XWj92dN/uetNuBMnVR+XWDc25JLjo5Mg5IZIq226tmCsip2zZliL213YrTlL2hcFjpCduyim3M7/eB16q/blQsv5X/esDRbtJeabLIosWy3ycavwLhtxdWzbMmHiBTiVjJo6lCLjXZsi7p9PEPnsq6X6wd4bP11i0rD5fzPm/0A6brrIsllenZs0lCJlU4abakR59enZKrKe3BZihbTxlyZ2zl1+g0wvgmA166/bhwDrcn/7Ddz0eWZuJvfSESug6NzZsox3Z04FIxz0mUjMwVOOVTq1CQ0AhdbBGVdjG/CgsfUX7esJl3K/7ytWHRv683praW/8iDOCqWLLhpljDY1ZpzK75QiaZoOTpLKl60auHS/97oBXrv+umU9+FL+5+NtLFgjqVLCdbmj7pY5zPCPLOHNCwXGOcLquOhi8CmCWvbcuO73XmMUPab+ug3A6/A/78Bwe0bcS2+tgHn4J5pyS2WbOck0F51Vq3LcjhLvZ67p1ABbaL2H67bg78BfjKi/jr3+T/ABV3ilLmNXTI2SpvxWBtt6/Z//D0z/FXaGbSBgylzlsEGp+5//xrd4/ae4d8DUUjlslfIYS3t06HZpvfQtvv0N7AHWqtjP2pW08QD/FLy//da38vo8PNlKHf5y37Dxdfe/oj4kVIgFq3koLReSR76W/bx//n9k8jonZxzWTANVwEniDsg87sOSd/z7//PvMp3jQiptGVWFX2caezzAXwfgtzYUvbr0iozs32c3Uge7varH+CNE6cvEYmzbPZ9hMaYDdjK4V2iecf6EcEbdUDVUARda2KzO/JtCuDbNQB/iTeL0EG1JSO1jbXS+nLxtPMDPw1fh5+EPrgSEKE/8Gry5A73ui87AmxwdatyMEBCPNOCSKUeRZ2P6Myb5MRvgCHmA9ywsMifU+AYXcB6Xa5GibUC5TSyerxyh0j6QgLVpdyhfArRTTLqQjwe4HOD9s92D4Ap54odXAPBWLAwB02igG5Kkc+piN4lvODIFGAZgT+EO4Si1s7fjSR7vcQETUkRm9O+MXyo9OYhfe4xt9STQ2pcZRLayCV90b4D3jR0DYAfyxJ+eywg2IL7NTMXna7S/RpQ63JhWEM8U41ZyQGjwsVS0QBrEKLu8xwZsbi4wLcCT+OGidPIOCe1PiSc9Qt+go+vYqB7cG+B9d8cAD+WJPz0Am2gxXgU9IneOqDpAAXOsOltVuMzpdakJXrdPCzXiNVUpCeOos5cxnpQT39G+XVLhs1osQVvJKPZyNq8HDwd4d7pNDuWJPxVX7MSzqUDU6gfadKiNlUFTzLeFHHDlzO4kpa7aiKhBPGKwOqxsBAmYkOIpipyXcQSPlRTf+Tii0U3EJGaZsDER2qoB3h2hu0qe+NNwUooYU8y5mILbJe6OuX+2FTKy7bieTDAemaQyQ0CPthljSWO+xmFDIYiESjM5xKd6Ik5lvLq5GrQ3aCMLvmCA9wowLuWJb9xF59hVVP6O0CrBi3ZjZSNOvRy+I6klNVRJYRBaEzdN+imiUXQ8iVF8fsp+W4JXw7WISW7fDh7lptWkCwZ4d7QTXyBPfJMYK7SijjFppGnlIVJBJBYj7eUwtiP1IBXGI1XCsjNpbjENVpSAJ2hq2LTywEly3hUYazt31J8w2+aiLx3g3fohXixPfOMYm6zCGs9LVo9MoW3MCJE7R5u/WsOIjrqBoHUO0bJE9vxBpbhsd3+Nb4/vtPCZ4oZYCitNeYuC/8UDvDvy0qvkiW/cgqNqRyzqSZa/s0mqNGjtKOoTm14zZpUauiQgVfqtQiZjq7Q27JNaSK5ExRcrGCXO1FJYh6jR6CFqK7bZdQZ4t8g0rSlPfP1RdBtqaa9diqtzJkQ9duSryi2brQXbxDwbRUpFMBHjRj8+Nt7GDKgvph9okW7LX47gu0SpGnnFQ1S1lYldOsC7hYteR574ZuKs7Ei1lBsfdz7IZoxzzCVmmVqaSySzQbBVAWDek+N4jh9E/4VqZrJjPwiv9BC1XcvOWgO8275CVyBPvAtTVlDJfZkaZGU7NpqBogAj/xEHkeAuJihWYCxGN6e8+9JtSegFXF1TrhhLGP1fak3pebgPz192/8gB4d/6WT7+GdYnpH7hH/DJzzFiYPn/vjW0SgNpTNuPIZoAEZv8tlGw4+RLxy+ZjnKa5NdFoC7UaW0aduoYse6+bXg1DLg6UfRYwmhGEjqPvF75U558SANrElK/+MdpXvmqBpaXOa/MTZaa1DOcSiLaw9j0NNNst3c+63c7EKTpkvKHzu6bPbP0RkuHAVcbRY8ijP46MIbQeeT1mhA+5PV/inyDdQipf8LTvMXbwvoDy7IruDNVZKTfV4CTSRUYdybUCnGU7KUTDxLgCknqUm5aAW6/1p6eMsOYsphLzsHrE0Y/P5bQedx1F/4yPHnMB3/IOoTU9+BL8PhtjuFKBpZXnYNJxTuv+2XqolKR2UQgHhS5novuxVySJhBNRF3SoKK1XZbbXjVwWNyOjlqWJjrWJIy+P5bQedyldNScP+HZ61xKSK3jyrz+NiHG1hcOLL/+P+PDF2gOkekKGiNWKgJ+8Z/x8Iv4DdQHzcpZyF4v19I27w9/yPGDFQvmEpKtqv/TLiWMfn4sofMm9eAH8Ao0zzh7h4sJqYtxZd5/D7hkYPneDzl5idlzNHcIB0jVlQ+8ULzw/nc5/ojzl2juE0apD7LRnJxe04dMz2iOCFNtGFpTuXA5AhcTRo8mdN4kz30nVjEC4YTZQy4gpC7GlTlrePKhGsKKgeXpCYeO0MAd/GH7yKQUlXPLOasOH3FnSphjHuDvEu4gB8g66oNbtr6eMbFIA4fIBJkgayoXriw2XEDQPJrQeROAlY6aeYOcMf+IVYTU3XFlZufMHinGywaW3YLpObVBAsbjF4QJMsVUSayjk4voPsHJOQfPWDhCgDnmDl6XIRerD24HsGtw86RMHOLvVSHrKBdeVE26gKB5NKHzaIwLOmrqBWJYZDLhASG16c0Tn+CdRhWDgWXnqRZUTnPIHuMJTfLVpkoYy5CzylHVTGZMTwkGAo2HBlkQplrJX6U+uF1wZz2uwS1SQ12IqWaPuO4baZaEFBdukksJmkcTOm+YJSvoqPFzxFA/YUhIvWxcmSdPWTWwbAKVp6rxTtPFUZfKIwpzm4IoMfaYQLWgmlG5FME2gdBgm+J7J+rtS/XBbaVLsR7bpPQnpMFlo2doWaVceHk9+MkyguZNCJ1He+kuHTWyQAzNM5YSUg/GlTk9ZunAsg1qELVOhUSAK0LABIJHLKbqaEbHZLL1VA3VgqoiOKXYiS+HRyaEKgsfIqX64HYWbLRXy/qWoylIV9gudL1OWBNgBgTNmxA6b4txDT4gi3Ri7xFSLxtXpmmYnzAcWDZgY8d503LFogz5sbonDgkKcxGsWsE1OI+rcQtlgBBCSOKD1mtqYpIU8cTvBmAT0yZe+zUzeY92fYjTtGipXLhuR0ePoHk0ofNWBX+lo8Z7pAZDk8mEw5L7dVyZZoE/pTewbI6SNbiAL5xeygW4xPRuLCGbhcO4RIeTMFYHEJkYyEO9HmJfXMDEj/LaH781wHHZEtqSQ/69UnGpzH7LKIAZEDSPJnTesJTUa+rwTepI9dLJEawYV+ZkRn9g+QirD8vF8Mq0jFQ29js6kCS3E1+jZIhgPNanHdHFqFvPJLHqFwQqbIA4jhDxcNsOCCQLDomaL/dr5lyJaJU6FxPFjO3JOh3kVMcROo8u+C+jo05GjMF3P3/FuDLn5x2M04xXULPwaS6hBYki+MrMdZJSgPHlcB7nCR5bJ9Kr5ACUn9jk5kivdd8tk95SOGrtqu9lr2IhK65ZtEl7ZKrp7DrqwZfRUSN1el7+7NJxZbywOC8neNKTch5vsTEMNsoCCqHBCqIPRjIPkm0BjvFODGtto99rCl+d3wmHkW0FPdpZtC7MMcVtGFQjJLX5bdQ2+x9ypdc313uj8xlsrfuLgWXz1cRhZvJYX0iNVBRcVcmCXZs6aEf3RQF2WI/TcCbKmGU3IOoDJGDdDub0+hYckt6PlGu2BcxmhbTdj/klhccLGJMcqRjMJP1jW2ETqLSWJ/29MAoORluJ+6LPffBZbi5gqi5h6catQpmOT7/OFf5UorRpLzCqcMltBLhwd1are3kztrSzXO0LUbXRQcdLh/RdSZ+swRm819REDrtqzC4es6Gw4JCKlSnjYVpo0xeq33PrADbFLL3RuCmObVmPN+24kfa+AojDuM4umKe2QwCf6EN906HwjujaitDs5o0s1y+k3lgbT2W2i7FJdnwbLXhJUBq/9liTctSmFC/0OqUinb0QddTWamtjbHRFuWJJ6NpqZ8vO3fZJ37Db+2GkaPYLGHs7XTTdiFQJ68SkVJFVmY6McR5UycflNCsccHFaV9FNbR4NttLxw4pQ7wJd066Z0ohVbzihaxHVExd/ay04oxUKWt+AsdiQ9OUyZ2krzN19IZIwafSTFgIBnMV73ADj7V/K8u1MaY2sJp2HWm0f41tqwajEvdHWOJs510MaAqN4aoSiPCXtN2KSi46dUxHdaMquar82O1x5jqhDGvqmoE9LfxcY3zqA7/x3HA67r9ZG4O6Cuxu12/+TP+eLP+I+HErqDDCDVmBDO4larujNe7x8om2rMug0MX0rL1+IWwdwfR+p1TNTyNmVJ85ljWzbWuGv8/C7HD/izjkHNZNYlhZcUOKVzKFUxsxxN/kax+8zPWPSFKw80rJr9Tizyj3o1gEsdwgWGoxPezDdZ1TSENE1dLdNvuKL+I84nxKesZgxXVA1VA1OcL49dFlpFV5yJMhzyCmNQ+a4BqusPJ2bB+xo8V9u3x48VVIEPS/mc3DvAbXyoYr6VgDfh5do5hhHOCXMqBZUPhWYbWZECwVJljLgMUWOCB4MUuMaxGNUQDVI50TQ+S3kFgIcu2qKkNSHVoM0SHsgoZxP2d5HH8B9woOk4x5bPkKtAHucZsdykjxuIpbUrSILgrT8G7G5oCW+K0990o7E3T6AdW4TilH5kDjds+H64kS0mz24grtwlzDHBJqI8YJQExotPvoC4JBq0lEjjQkyBZ8oH2LnRsQ4Hu1QsgDTJbO8fQDnllitkxuVskoiKbRF9VwzMDvxHAdwB7mD9yCplhHFEyUWHx3WtwCbSMMTCUCcEmSGlg4gTXkHpZXWQ7kpznK3EmCHiXInqndkQjunG5kxTKEeGye7jWz9cyMR2mGiFQ15ENRBTbCp+Gh86vAyASdgmJq2MC6hoADQ3GosP0QHbnMHjyBQvQqfhy/BUbeHd5WY/G/9LK/8Ka8Jd7UFeNWEZvzPb458Dn8DGLOe3/wGL/4xP+HXlRt+M1PE2iLhR8t+lfgxsuh7AfO2AOf+owWhSZRYQbd622hbpKWKuU+XuvNzP0OseRDa+mObgDHJUSc/pKx31QdKffQ5OIJpt8GWjlgTwMc/w5MPCR/yl1XC2a2Yut54SvOtMev55Of45BOat9aWG27p2ZVORRvnEk1hqWMVUmqa7S2YtvlIpspuF1pt0syuZS2NV14mUidCSfzQzg+KqvIYCMljIx2YK2AO34fX4GWdu5xcIAb8MzTw+j/lyWM+Dw/gjs4GD6ehNgA48kX/AI7XXM/XAN4WHr+9ntywqoCakCqmKP0rmQrJJEErG2Upg1JObr01lKQy4jskWalKYfJ/EDLMpjNSHFEUAde2fltaDgmrNaWQ9+AAb8I5vKjz3L1n1LriB/BXkG/wwR9y/oRX4LlioHA4LzP2inzRx/DWmutRweFjeP3tNeSGlaE1Fde0OS11yOpmbIp2u/jF1n2RRZviJM0yBT3IZl2HWImKjQOxIyeU325b/qWyU9Moj1o07tS0G7qJDoGHg5m8yeCxMoEH8GU45tnrNM84D2l297DQ9t1YP7jki/7RmutRweEA77/HWXOh3HCxkRgldDQkAjNTMl2Iloc1qN5JfJeeTlyTRzxURTdn1Ixv2uKjs12AbdEWlBtmVdk2k7FFwj07PCZ9XAwW3dG+8xKzNFr4EnwBZpy9Qzhh3jDXebBpYcpuo4fQ44u+fD1dweEnHzI7v0xuuOALRUV8rXpFyfSTQYkhd7IHm07jpyhlkCmI0ALYqPTpUxXS+z4jgDj1Pflvmz5ecuItpIBxyTHpSTGWd9g1ApfD/bvwUhL4nT1EzqgX7cxfCcNmb3mPL/qi9SwTHJ49oj5ZLjccbTG3pRmlYi6JCG0mQrAt1+i2UXTZ2dv9IlQpN5naMYtviaXlTrFpoMsl3bOAFEa8sqPj2WCMrx3Yjx99qFwO59Aw/wgx+HlqNz8oZvA3exRDvuhL1jMQHPaOJ0+XyA3fp1OfM3qObEVdhxjvynxNMXQV4+GJyvOEFqeQBaIbbO7i63rpxCltdZShPFxkjM2FPVkn3TG+Rp9pO3l2RzFegGfxGDHIAh8SteR0C4HopXzRF61nheDw6TFN05Ebvq8M3VKKpGjjO6r7nhudTEGMtYM92HTDaR1FDMXJ1eThsbKfywyoWwrzRSXkc51flG3vIid62h29bIcFbTGhfV+faaB+ohj7dPN0C2e2lC96+XouFByen9AsunLDJZ9z7NExiUc0OuoYW6UZkIyx2YUR2z6/TiRjyKMx5GbbjLHvHuf7YmtKghf34LJfx63Yg8vrvN2zC7lY0x0tvKezo4HmGYDU+Gab6dFL+KI761lDcNifcjLrrr9LWZJctG1FfU1uwhoQE22ObjdfkSzY63CbU5hzs21WeTddH2BaL11Gi7lVdlxP1nkxqhnKhVY6knS3EPgVGg1JpN5cP/hivujOelhXcPj8HC/LyI6MkteVjlolBdMmF3a3DbsuAYhL44dxzthWSN065xxUd55Lmf0wRbOYOqH09/o9WbO2VtFdaMb4qBgtFJoT1SqoN8wPXMoXLb3p1PUEhxfnnLzGzBI0Ku7FxrKsNJj/8bn/H8fPIVOd3rfrklUB/DOeO+nkghgSPzrlPxluCMtOnDL4Yml6dK1r3vsgMxgtPOrMFUZbEUbTdIzii5beq72G4PD0DKnwjmBULUVFmy8t+k7fZ3pKc0Q4UC6jpVRqS9Umv8bxw35flZVOU1X7qkjnhZlsMbk24qQ6Hz7QcuL6sDC0iHHki96Uh2UdvmgZnjIvExy2TeJdMDZNSbdZyAHe/Yd1xsQhHiKzjh7GxQ4yqMPaywPkjMamvqrYpmO7Knad+ZQC5msCuAPWUoxrxVhrGv7a+KLXFhyONdTMrZ7ke23qiO40ZJUyzgYyX5XyL0mV7NiUzEs9mjtbMN0dERqwyAJpigad0B3/zRV7s4PIfXSu6YV/MK7+OrYe/JvfGMn/PHJe2fyUdtnFrKRNpXV0Y2559aWPt/G4BlvjTMtXlVIWCnNyA3YQBDmYIodFz41PvXPSa6rq9lWZawZ4dP115HXV/M/tnFkkrBOdzg6aP4pID+MZnTJ1SuuB6iZlyiox4HT2y3YBtkUKWooacBQUDTpjwaDt5poBHl1/HXltwP887lKKXxNUEyPqpGTyA699UqY/lt9yGdlUKra0fFWS+36iylVWrAyd7Uw0CZM0z7xKTOduznLIjG2Hx8cDPLb+OvK6Bv7n1DYci4CxUuRxrjBc0bb4vD3rN5Zz36ntLb83eVJIB8LiIzCmn6SMPjlX+yNlTjvIGjs+QzHPf60Aj62/jrzG8j9vYMFtm1VoRWCJdmw7z9N0t+c8cxZpPeK4aTRicS25QhrVtUp7U578chk4q04Wx4YoQSjFryUlpcQ1AbxZ/XVMknIU//OGl7Q6z9Zpxi0+3yFhSkjUDpnCIUhLWVX23KQ+L9vKvFKI0ZWFQgkDLvBoylrHNVmaw10zwCPrr5tlodfnf94EWnQ0lFRWy8pW9LbkLsyUVDc2NSTHGDtnD1uMtchjbCeb1mpxFP0YbcClhzdLu6lfO8Bj6q+bdT2sz/+8SZCV7VIxtt0DUn9L7r4cLYWDSXnseEpOGFuty0qbOVlS7NNzs5FOGJUqQpl2Q64/yBpZf90sxbE+//PGdZ02HSipCbmD6NItmQ4Lk5XUrGpDMkhbMm2ZVheNYV+VbUWTcv99+2NyX1VoafSuC+AN6q9bFIMv5X/eagNWXZxEa9JjlMwNWb00akGUkSoepp1/yRuuqHGbUn3UdBSTxBU6SEVklzWRUkPndVvw2PrrpjvxOvzPmwHc0hpmq82npi7GRro8dXp0KXnUQmhZbRL7NEVp1uuZmO45vuzKsHrktS3GLWXODVjw+vXXLYx4Hf7njRPd0i3aoAGX6W29GnaV5YdyDj9TFkakje7GHYzDoObfddHtOSpoi2SmzJHrB3hM/XUDDEbxP2/oosszcRlehWXUvzHv4TpBVktHqwenFo8uLVmy4DKLa5d3RtLrmrM3aMFr1183E4sewf+85VWeg1c5ag276NZrM9IJVNcmLEvDNaV62aq+14IAOGFsBt973Ra8Xv11YzXwNfmft7Jg2oS+XOyoC8/cwzi66Dhmgk38kUmP1CUiYWOX1bpD2zWXt2FCp7uq8703APAa9dfNdscR/M/bZLIyouVxqJfeWvG9Je+JVckHQ9+CI9NWxz+blX/KYYvO5n2tAP/vrlZ7+8/h9y+9qeB/Hnt967e5mevX10rALDWK//FaAT5MXdBXdP0C/BAes792c40H+AiAp1e1oH8HgH94g/Lttx1gp63op1eyoM/Bvw5/G/7xFbqJPcCXnmBiwDPb/YKO4FX4OjyCb289db2/Noqicw4i7N6TVtoz8tNwDH+8x/i6Ae7lmaQVENzJFb3Di/BFeAwz+Is9SjeQySpPqbLFlNmyz47z5a/AF+AYFvDmHqibSXTEzoT4Gc3OALaqAP4KPFUJ6n+1x+rGAM6Zd78bgJ0a8QN4GU614vxwD9e1Amy6CcskNrczLx1JIp6HE5UZD/DBHrFr2oNlgG4Odv226BodoryjGJ9q2T/AR3vQrsOCS0ctXZi3ruLlhpFDJYl4HmYtjQCP9rhdn4suySLKDt6wLcC52h8xPlcjju1fn+yhuw4LZsAGUuo2b4Fx2UwQu77uqRHXGtg92aN3tQCbFexc0uk93vhTXbct6y7MulLycoUljx8ngDMBg1tvJjAazpEmOtxlzclvj1vQf1Tx7QlPDpGpqgtdSKz/d9/hdy1vTfFHSmC9dGDZbLiezz7Ac801HirGZsWjydfZyPvHXL/Y8Mjzg8BxTZiuwKz4Eb8sBE9zznszmjvFwHKPIWUnwhqfVRcd4Ck0K6ate48m1oOfrX3/yOtvAsJ8zsPAM89sjnddmuLuDPjX9Bu/L7x7xpMzFk6nWtyQfPg278Gn4Aekz2ZgOmU9eJ37R14vwE/BL8G3aibCiWMWWDQ0ZtkPMnlcGeAu/Ag+8ZyecU5BPuy2ILD+sQqyZhAKmn7XZd+jIMTN9eBL7x95xVLSX4On8EcNlXDqmBlqS13jG4LpmGbkF/0CnOi3H8ETOIXzmnmtb0a16Tzxj1sUvQCBiXZGDtmB3KAefPH94xcUa/6vwRn80GOFyjEXFpba4A1e8KQfFF+259tx5XS4egYn8fQsLGrqGrHbztr+uByTahWuL1NUGbDpsnrwBfePPwHHIf9X4RnM4Z2ABWdxUBlqQ2PwhuDxoS0vvqB1JzS0P4h2nA/QgTrsJFn+Y3AOjs9JFC07CGWX1oNX3T/yHOzgDjwPn1PM3g9Jk9lZrMEpxnlPmBbjyo2+KFXRU52TJM/2ALcY57RUzjObbjqxVw++4P6RAOf58pcVsw9Daje3htriYrpDOonre3CudSe6bfkTEgHBHuDiyu5MCsc7BHhYDx7ePxLjqigXZsw+ijMHFhuwBmtoTPtOxOrTvYJDnC75dnUbhfwu/ZW9AgYd+peL68HD+0emKquiXHhWjJg/UrkJYzuiaL3E9aI/ytrCvAd4GcYZMCkSQxfUg3v3j8c4e90j5ZTPdvmJJGHnOCI2nHS8081X013pHuBlV1gB2MX1YNmWLHqqGN/TWmG0y6clJWthxNUl48q38Bi8vtMKyzzpFdSDhxZ5WBA5ZLt8Jv3895DduBlgbPYAj8C4B8hO68FDkoh5lydC4FiWvBOVqjYdqjiLv92t8yPDjrDaiHdUD15qkSURSGmXJwOMSxWAXYwr3zaAufJ66l+94vv3AO+vPcD7aw/w/toDvL/2AO+vPcD7aw/wHuD9tQd4f+0B3l97gPfXHuD9tQd4f+0B3l97gG8LwP8G/AL8O/A5OCq0Ys2KIdv/qOIXG/4mvFAMF16gZD+2Xvu/B8as5+8bfllWyg0zaNO5bfXj6vfhhwD86/Aq3NfRS9t9WPnhfnvCIw/CT8GLcFTMnpntdF/z9V+PWc/vWoIH+FL3Znv57PitcdGP4R/C34avw5fgRVUInCwbsn1yyA8C8zm/BH8NXoXnVE6wVPjdeCI38kX/3+Ct9dbz1pTmHFRu+Hm4O9Ch3clr99negxfwj+ER/DR8EV6B5+DuQOnTgUw5rnkY+FbNU3gNXh0o/JYTuWOvyBf9FvzX663HH/HejO8LwAl8Hl5YLTd8q7sqA3wbjuExfAFegQdwfyDoSkWY8swzEf6o4Qyewefg+cHNbqMQruSL/u/WWc+E5g7vnnEXgDmcDeSGb/F4cBcCgT+GGRzDU3hZYburAt9TEtHgbM6JoxJ+6NMzzTcf6c2bycv2+KK/f+l6LBzw5IwfqZJhA3M472pWT/ajKxnjv4AFnMEpnBTPND6s2J7qHbPAqcMK74T2mZ4VGB9uJA465It+/eL1WKhYOD7xHOkr1ajK7d0C4+ke4Hy9qXZwpgLr+Znm/uNFw8xQOSy8H9IzjUrd9+BIfenYaylf9FsXr8fBAadnPIEDna8IBcwlxnuA0/Wv6GAWPd7dDIKjMdSWueAsBj4M7TOd06qBbwDwKr7oleuxMOEcTuEZTHWvDYUO7aHqAe0Bbq+HEFRzOz7WVoTDQkVds7A4sIIxfCQdCefFRoIOF/NFL1mPab/nvOakSL/Q1aFtNpUb/nFOVX6gzyg/1nISyDfUhsokIzaBR9Kxm80s5mK+6P56il1jXic7nhQxsxSm3OwBHl4fFdLqi64nDQZvqE2at7cWAp/IVvrN6/BFL1mPhYrGMBfOi4PyjuSGf6wBBh7p/FZTghCNWGgMzlBbrNJoPJX2mW5mwZfyRffXo7OFi5pZcS4qZUrlViptrXtw+GQoyhDPS+ANjcGBNRiLCQDPZPMHuiZfdFpPSTcQwwKYdRNqpkjm7AFeeT0pJzALgo7g8YYGrMHS0iocy+YTm2vyRUvvpXCIpQ5pe666TJrcygnScUf/p0NDs/iAI/nqDHC8TmQT8x3NF91l76oDdQGwu61Z6E0ABv7uO1dbf/37Zlv+Zw/Pbh8f1s4Avur6657/+YYBvur6657/+YYBvur6657/+YYBvur6657/+aYBvuL6657/+VMA8FXWX/f8zzcN8BXXX/f8zzcNMFdbf93zP38KLPiK6697/uebtuArrr/u+Z9vGmCusP6653/+1FjwVdZf9/zPN7oHX339dc//fNMu+irrr3v+50+Bi+Zq6697/uebA/jz8Pudf9ht/fWv517J/XUzAP8C/BAeX9WCDrUpZ3/dEMBxgPcfbtTVvsYV5Yn32u03B3Ac4P3b8I+vxNBKeeL9dRMAlwO83959qGO78sT769oB7g3w/vGVYFzKE++v6wV4OMD7F7tckFkmT7y/rhHgpQO8b+4Y46XyxPvrugBeNcB7BRiX8sT767oAvmCA9woAHsoT76+rBJjLBnh3txOvkifeX1dswZcO8G6N7sXyxPvr6i340gHe3TnqVfLE++uKAb50gHcXLnrX8sR7gNdPRqwzwLu7Y/FO5Yn3AK9jXCMGeHdgxDuVJ75VAI8ljP7PAb3/RfjcZfePHBB+79dpfpH1CanN30d+mT1h9GqAxxJGM5LQeeQ1+Tb+EQJrElLb38VHQ94TRq900aMIo8cSOo+8Dp8QfsB8zpqE1NO3OI9Zrj1h9EV78PqE0WMJnUdeU6E+Jjyk/hbrEFIfeWbvId8H9oTRFwdZaxJGvziW0Hn0gqYB/wyZ0PwRlxJST+BOw9m77Amj14ii1yGM/txYQudN0qDzGe4EqfA/5GJCagsHcPaEPWH0esekSwmjRxM6b5JEcZ4ww50ilvAOFxBSx4yLW+A/YU8YvfY5+ALC6NGEzhtmyZoFZoarwBLeZxUhtY4rc3bKnjB6TKJjFUHzJoTOozF2YBpsjcyxDgzhQ1YRUse8+J4wenwmaylB82hC5w0zoRXUNXaRBmSMQUqiWSWkLsaVqc/ZE0aPTFUuJWgeTei8SfLZQeMxNaZSIzbII4aE1Nmr13P2hNHjc9E9guYNCZ032YlNwESMLcZiLQHkE4aE1BFg0yAR4z1h9AiAGRA0jyZ03tyIxWMajMPWBIsxYJCnlITU5ShiHYdZ94TR4wCmSxg9jtB5KyPGYzymAYexWEMwAPIsAdYdV6aObmNPGD0aYLoEzaMJnTc0Ygs+YDw0GAtqxBjkuP38bMRWCHn73xNGjz75P73WenCEJnhwyVe3AEe8TtKdJcYhBl97wuhNAObK66lvD/9J9NS75v17wuitAN5fe4D31x7g/bUHeH/tAd5fe4D3AO+vPcD7aw/w/toDvL/2AO+vPcD7aw/w/toDvAd4f/24ABzZ8o+KLsSLS+Pv/TqTb3P4hKlQrTGh+fbIBT0Axqznnb+L/V2mb3HkN5Mb/nEHeK7d4IcDld6lmDW/iH9E+AH1MdOw/Jlu2T1xNmY98sv4wHnD7D3uNHu54WUuOsBTbQuvBsPT/UfzNxGYzwkP8c+Yz3C+r/i6DcyRL/rZ+utRwWH5PmfvcvYEt9jLDS/bg0/B64DWKrQM8AL8FPwS9beQCe6EMKNZYJol37jBMy35otdaz0Bw2H/C2Smc7+WGB0HWDELBmOByA3r5QONo4V+DpzR/hFS4U8wMW1PXNB4TOqYz9urxRV++ntWCw/U59Ty9ebdWbrgfRS9AYKKN63ZokZVygr8GZ/gfIhZXIXPsAlNjPOLBby5c1eOLvmQ9lwkOy5x6QV1j5TYqpS05JtUgUHUp5toHGsVfn4NX4RnMCe+AxTpwmApTYxqMxwfCeJGjpXzRF61nbcHhUBPqWze9svwcHJ+S6NPscKrEjug78Dx8Lj3T8D4YxGIdxmJcwhi34fzZUr7olevZCw5vkOhoClq5zBPZAnygD/Tl9EzDh6kl3VhsHYcDEb+hCtJSvuiV69kLDm+WycrOTArHmB5/VYyP6jOVjwgGawk2zQOaTcc1L+aLXrKeveDwZqlKrw8U9Y1p66uK8dEzdYwBeUQAY7DbyYNezBfdWQ97weEtAKYQg2xJIkuveAT3dYeLGH+ShrWNwZgN0b2YL7qznr3g8JYAo5bQBziPjx7BPZ0d9RCQp4UZbnFdzBddor4XHN4KYMrB2qHFRIzzcLAHQZ5the5ovui94PCWAPefaYnxIdzRwdHCbuR4B+tbiy96Lzi8E4D7z7S0mEPd+eqO3cT53Z0Y8SV80XvB4Z0ADJi/f7X113f+7p7/+UYBvur6657/+YYBvur6657/+aYBvuL6657/+aYBvuL6657/+aYBvuL6657/+aYBvuL6657/+VMA8FXWX/f8z58OgK+y/rrnf75RgLna+uue//lTA/CV1V/3/M837aKvvv6653++UQvmauuve/7nTwfAV1N/3fM/fzr24Cuuv+75nz8FFnxl9dc9//MOr/8/glixwRuUfM4AAAAASUVORK5CYII=\";\n }\n getSearchTexture() {\n return \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEIAAAAhCAAAAABIXyLAAAAAOElEQVRIx2NgGAWjYBSMglEwEICREYRgFBZBqDCSLA2MGPUIVQETE9iNUAqLR5gIeoQKRgwXjwAAGn4AtaFeYLEAAAAASUVORK5CYII=\";\n }\n}\nexport {\n SMAAPass\n};\n//# sourceMappingURL=SMAAPass.js.map\n","const FilmShader = {\n uniforms: {\n tDiffuse: { value: null },\n time: { value: 0 },\n nIntensity: { value: 0.5 },\n sIntensity: { value: 0.05 },\n sCount: { value: 4096 },\n grayscale: { value: 1 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n #include <common>\n\n // control parameter\n uniform float time;\n\n uniform bool grayscale;\n\n // noise effect intensity value (0 = no effect, 1 = full effect)\n uniform float nIntensity;\n\n // scanlines effect intensity value (0 = no effect, 1 = full effect)\n uniform float sIntensity;\n\n // scanlines effect count value (0 = no effect, 4096 = full effect)\n uniform float sCount;\n\n uniform sampler2D tDiffuse;\n\n varying vec2 vUv;\n\n void main() {\n\n // sample the source\n \tvec4 cTextureScreen = texture2D( tDiffuse, vUv );\n\n // make some noise\n \tfloat dx = rand( vUv + time );\n\n // add noise\n \tvec3 cResult = cTextureScreen.rgb + cTextureScreen.rgb * clamp( 0.1 + dx, 0.0, 1.0 );\n\n // get us a sine and cosine\n \tvec2 sc = vec2( sin( vUv.y * sCount ), cos( vUv.y * sCount ) );\n\n // add scanlines\n \tcResult += cTextureScreen.rgb * vec3( sc.x, sc.y, sc.x ) * sIntensity;\n\n // interpolate between source and result by intensity\n \tcResult = cTextureScreen.rgb + clamp( nIntensity, 0.0,1.0 ) * ( cResult - cTextureScreen.rgb );\n\n // convert to grayscale if desired\n \tif( grayscale ) {\n\n \t\tcResult = vec3( cResult.r * 0.3 + cResult.g * 0.59 + cResult.b * 0.11 );\n\n \t}\n\n \tgl_FragColor = vec4( cResult, cTextureScreen.a );\n\n }\n `\n )\n};\nexport {\n FilmShader\n};\n//# sourceMappingURL=FilmShader.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Pass, FullScreenQuad } from \"./Pass.js\";\nimport { UniformsUtils, ShaderMaterial } from \"three\";\nimport { FilmShader } from \"../shaders/FilmShader.js\";\nclass FilmPass extends Pass {\n constructor(noiseIntensity, scanlinesIntensity, scanlinesCount, grayscale) {\n super();\n __publicField(this, \"material\");\n __publicField(this, \"fsQuad\");\n __publicField(this, \"uniforms\");\n if (FilmShader === void 0)\n console.error(\"THREE.FilmPass relies on FilmShader\");\n const shader = FilmShader;\n this.uniforms = UniformsUtils.clone(shader.uniforms);\n this.material = new ShaderMaterial({\n uniforms: this.uniforms,\n vertexShader: shader.vertexShader,\n fragmentShader: shader.fragmentShader\n });\n if (grayscale !== void 0)\n this.uniforms.grayscale.value = grayscale;\n if (noiseIntensity !== void 0)\n this.uniforms.nIntensity.value = noiseIntensity;\n if (scanlinesIntensity !== void 0)\n this.uniforms.sIntensity.value = scanlinesIntensity;\n if (scanlinesCount !== void 0)\n this.uniforms.sCount.value = scanlinesCount;\n this.fsQuad = new FullScreenQuad(this.material);\n }\n render(renderer, writeBuffer, readBuffer, deltaTime) {\n this.uniforms[\"tDiffuse\"].value = readBuffer.texture;\n this.uniforms[\"time\"].value += deltaTime;\n if (this.renderToScreen) {\n renderer.setRenderTarget(null);\n this.fsQuad.render(renderer);\n } else {\n renderer.setRenderTarget(writeBuffer);\n if (this.clear)\n renderer.clear();\n this.fsQuad.render(renderer);\n }\n }\n}\nexport {\n FilmPass\n};\n//# sourceMappingURL=FilmPass.js.map\n","const CopyShader = {\n uniforms: {\n tDiffuse: { value: null },\n opacity: { value: 1 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform float opacity;\n\n uniform sampler2D tDiffuse;\n\n varying vec2 vUv;\n\n void main() {\n\n \tvec4 texel = texture2D( tDiffuse, vUv );\n \tgl_FragColor = opacity * texel;\n\n }\n `\n )\n};\nexport {\n CopyShader\n};\n//# sourceMappingURL=CopyShader.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Pass, FullScreenQuad } from \"./Pass.js\";\nimport { Vector2, Color, WebGLRenderTarget, MeshDepthMaterial, DoubleSide, RGBADepthPacking, NoBlending, UniformsUtils, ShaderMaterial, Matrix4, Vector3, AdditiveBlending } from \"three\";\nimport { CopyShader } from \"../shaders/CopyShader.js\";\nclass OutlinePass extends Pass {\n constructor(resolution, scene, camera, selectedObjects) {\n super();\n __publicField(this, \"renderScene\");\n __publicField(this, \"renderCamera\");\n __publicField(this, \"selectedObjects\");\n __publicField(this, \"visibleEdgeColor\");\n __publicField(this, \"hiddenEdgeColor\");\n __publicField(this, \"edgeGlow\");\n __publicField(this, \"usePatternTexture\");\n __publicField(this, \"edgeThickness\");\n __publicField(this, \"edgeStrength\");\n __publicField(this, \"downSampleRatio\");\n __publicField(this, \"pulsePeriod\");\n __publicField(this, \"resolution\");\n __publicField(this, \"renderTargetMaskBuffer\");\n __publicField(this, \"depthMaterial\");\n __publicField(this, \"prepareMaskMaterial\");\n __publicField(this, \"renderTargetDepthBuffer\");\n __publicField(this, \"renderTargetMaskDownSampleBuffer\");\n __publicField(this, \"renderTargetBlurBuffer1\");\n __publicField(this, \"renderTargetBlurBuffer2\");\n __publicField(this, \"edgeDetectionMaterial\");\n __publicField(this, \"renderTargetEdgeBuffer1\");\n __publicField(this, \"renderTargetEdgeBuffer2\");\n __publicField(this, \"separableBlurMaterial1\");\n __publicField(this, \"separableBlurMaterial2\");\n __publicField(this, \"overlayMaterial\");\n __publicField(this, \"materialCopy\");\n __publicField(this, \"oldClearAlpha\");\n __publicField(this, \"fsQuad\");\n __publicField(this, \"tempPulseColor1\");\n __publicField(this, \"tempPulseColor2\");\n __publicField(this, \"textureMatrix\");\n __publicField(this, \"patternTexture\");\n __publicField(this, \"_visibilityCache\");\n __publicField(this, \"_oldClearColor\");\n __publicField(this, \"copyUniforms\");\n __publicField(this, \"BlurDirectionX\", new Vector2(1, 0));\n __publicField(this, \"BlurDirectionY\", new Vector2(0, 1));\n this.renderScene = scene;\n this.renderCamera = camera;\n this.selectedObjects = selectedObjects !== void 0 ? selectedObjects : [];\n this.visibleEdgeColor = new Color(1, 1, 1);\n this.hiddenEdgeColor = new Color(0.1, 0.04, 0.02);\n this.edgeGlow = 0;\n this.usePatternTexture = false;\n this.edgeThickness = 1;\n this.edgeStrength = 3;\n this.downSampleRatio = 2;\n this.pulsePeriod = 0;\n this._visibilityCache = /* @__PURE__ */ new Map();\n this.resolution = resolution !== void 0 ? new Vector2(resolution.x, resolution.y) : new Vector2(256, 256);\n const resx = Math.round(this.resolution.x / this.downSampleRatio);\n const resy = Math.round(this.resolution.y / this.downSampleRatio);\n this.renderTargetMaskBuffer = new WebGLRenderTarget(this.resolution.x, this.resolution.y);\n this.renderTargetMaskBuffer.texture.name = \"OutlinePass.mask\";\n this.renderTargetMaskBuffer.texture.generateMipmaps = false;\n this.depthMaterial = new MeshDepthMaterial();\n this.depthMaterial.side = DoubleSide;\n this.depthMaterial.depthPacking = RGBADepthPacking;\n this.depthMaterial.blending = NoBlending;\n this.prepareMaskMaterial = this.getPrepareMaskMaterial();\n this.prepareMaskMaterial.side = DoubleSide;\n this.prepareMaskMaterial.fragmentShader = replaceDepthToViewZ(\n this.prepareMaskMaterial.fragmentShader,\n this.renderCamera\n );\n this.renderTargetDepthBuffer = new WebGLRenderTarget(this.resolution.x, this.resolution.y);\n this.renderTargetDepthBuffer.texture.name = \"OutlinePass.depth\";\n this.renderTargetDepthBuffer.texture.generateMipmaps = false;\n this.renderTargetMaskDownSampleBuffer = new WebGLRenderTarget(resx, resy);\n this.renderTargetMaskDownSampleBuffer.texture.name = \"OutlinePass.depthDownSample\";\n this.renderTargetMaskDownSampleBuffer.texture.generateMipmaps = false;\n this.renderTargetBlurBuffer1 = new WebGLRenderTarget(resx, resy);\n this.renderTargetBlurBuffer1.texture.name = \"OutlinePass.blur1\";\n this.renderTargetBlurBuffer1.texture.generateMipmaps = false;\n this.renderTargetBlurBuffer2 = new WebGLRenderTarget(Math.round(resx / 2), Math.round(resy / 2));\n this.renderTargetBlurBuffer2.texture.name = \"OutlinePass.blur2\";\n this.renderTargetBlurBuffer2.texture.generateMipmaps = false;\n this.edgeDetectionMaterial = this.getEdgeDetectionMaterial();\n this.renderTargetEdgeBuffer1 = new WebGLRenderTarget(resx, resy);\n this.renderTargetEdgeBuffer1.texture.name = \"OutlinePass.edge1\";\n this.renderTargetEdgeBuffer1.texture.generateMipmaps = false;\n this.renderTargetEdgeBuffer2 = new WebGLRenderTarget(Math.round(resx / 2), Math.round(resy / 2));\n this.renderTargetEdgeBuffer2.texture.name = \"OutlinePass.edge2\";\n this.renderTargetEdgeBuffer2.texture.generateMipmaps = false;\n const MAX_EDGE_THICKNESS = 4;\n const MAX_EDGE_GLOW = 4;\n this.separableBlurMaterial1 = this.getSeperableBlurMaterial(MAX_EDGE_THICKNESS);\n this.separableBlurMaterial1.uniforms[\"texSize\"].value.set(resx, resy);\n this.separableBlurMaterial1.uniforms[\"kernelRadius\"].value = 1;\n this.separableBlurMaterial2 = this.getSeperableBlurMaterial(MAX_EDGE_GLOW);\n this.separableBlurMaterial2.uniforms[\"texSize\"].value.set(Math.round(resx / 2), Math.round(resy / 2));\n this.separableBlurMaterial2.uniforms[\"kernelRadius\"].value = MAX_EDGE_GLOW;\n this.overlayMaterial = this.getOverlayMaterial();\n if (CopyShader === void 0)\n console.error(\"THREE.OutlinePass relies on CopyShader\");\n const copyShader = CopyShader;\n this.copyUniforms = UniformsUtils.clone(copyShader.uniforms);\n this.copyUniforms[\"opacity\"].value = 1;\n this.materialCopy = new ShaderMaterial({\n uniforms: this.copyUniforms,\n vertexShader: copyShader.vertexShader,\n fragmentShader: copyShader.fragmentShader,\n blending: NoBlending,\n depthTest: false,\n depthWrite: false,\n transparent: true\n });\n this.enabled = true;\n this.needsSwap = false;\n this._oldClearColor = new Color();\n this.oldClearAlpha = 1;\n this.fsQuad = new FullScreenQuad(this.materialCopy);\n this.tempPulseColor1 = new Color();\n this.tempPulseColor2 = new Color();\n this.textureMatrix = new Matrix4();\n function replaceDepthToViewZ(string, camera2) {\n const type = camera2.isPerspectiveCamera ? \"perspective\" : \"orthographic\";\n return string.replace(/DEPTH_TO_VIEW_Z/g, type + \"DepthToViewZ\");\n }\n }\n dispose() {\n this.renderTargetMaskBuffer.dispose();\n this.renderTargetDepthBuffer.dispose();\n this.renderTargetMaskDownSampleBuffer.dispose();\n this.renderTargetBlurBuffer1.dispose();\n this.renderTargetBlurBuffer2.dispose();\n this.renderTargetEdgeBuffer1.dispose();\n this.renderTargetEdgeBuffer2.dispose();\n }\n setSize(width, height) {\n this.renderTargetMaskBuffer.setSize(width, height);\n this.renderTargetDepthBuffer.setSize(width, height);\n let resx = Math.round(width / this.downSampleRatio);\n let resy = Math.round(height / this.downSampleRatio);\n this.renderTargetMaskDownSampleBuffer.setSize(resx, resy);\n this.renderTargetBlurBuffer1.setSize(resx, resy);\n this.renderTargetEdgeBuffer1.setSize(resx, resy);\n this.separableBlurMaterial1.uniforms[\"texSize\"].value.set(resx, resy);\n resx = Math.round(resx / 2);\n resy = Math.round(resy / 2);\n this.renderTargetBlurBuffer2.setSize(resx, resy);\n this.renderTargetEdgeBuffer2.setSize(resx, resy);\n this.separableBlurMaterial2.uniforms[\"texSize\"].value.set(resx, resy);\n }\n changeVisibilityOfSelectedObjects(bVisible) {\n const cache = this._visibilityCache;\n function gatherSelectedMeshesCallBack(object) {\n if (object.isMesh) {\n if (bVisible === true) {\n object.visible = cache.get(object);\n } else {\n cache.set(object, object.visible);\n object.visible = bVisible;\n }\n }\n }\n for (let i = 0; i < this.selectedObjects.length; i++) {\n const selectedObject = this.selectedObjects[i];\n selectedObject.traverse(gatherSelectedMeshesCallBack);\n }\n }\n changeVisibilityOfNonSelectedObjects(bVisible) {\n const cache = this._visibilityCache;\n const selectedMeshes = [];\n function gatherSelectedMeshesCallBack(object) {\n if (object.isMesh)\n selectedMeshes.push(object);\n }\n for (let i = 0; i < this.selectedObjects.length; i++) {\n const selectedObject = this.selectedObjects[i];\n selectedObject.traverse(gatherSelectedMeshesCallBack);\n }\n function VisibilityChangeCallBack(object) {\n if (object.isMesh || object.isSprite) {\n let bFound = false;\n for (let i = 0; i < selectedMeshes.length; i++) {\n const selectedObjectId = selectedMeshes[i].id;\n if (selectedObjectId === object.id) {\n bFound = true;\n break;\n }\n }\n if (bFound === false) {\n const visibility = object.visible;\n if (bVisible === false || cache.get(object) === true) {\n object.visible = bVisible;\n }\n cache.set(object, visibility);\n }\n } else if (object.isPoints || object.isLine) {\n if (bVisible === true) {\n object.visible = cache.get(object);\n } else {\n cache.set(object, object.visible);\n object.visible = bVisible;\n }\n }\n }\n this.renderScene.traverse(VisibilityChangeCallBack);\n }\n updateTextureMatrix() {\n this.textureMatrix.set(0.5, 0, 0, 0.5, 0, 0.5, 0, 0.5, 0, 0, 0.5, 0.5, 0, 0, 0, 1);\n this.textureMatrix.multiply(this.renderCamera.projectionMatrix);\n this.textureMatrix.multiply(this.renderCamera.matrixWorldInverse);\n }\n render(renderer, writeBuffer, readBuffer, deltaTime, maskActive) {\n if (this.selectedObjects.length > 0) {\n renderer.getClearColor(this._oldClearColor);\n this.oldClearAlpha = renderer.getClearAlpha();\n const oldAutoClear = renderer.autoClear;\n renderer.autoClear = false;\n if (maskActive)\n renderer.state.buffers.stencil.setTest(false);\n renderer.setClearColor(16777215, 1);\n this.changeVisibilityOfSelectedObjects(false);\n const currentBackground = this.renderScene.background;\n this.renderScene.background = null;\n this.renderScene.overrideMaterial = this.depthMaterial;\n renderer.setRenderTarget(this.renderTargetDepthBuffer);\n renderer.clear();\n renderer.render(this.renderScene, this.renderCamera);\n this.changeVisibilityOfSelectedObjects(true);\n this._visibilityCache.clear();\n this.updateTextureMatrix();\n this.changeVisibilityOfNonSelectedObjects(false);\n this.renderScene.overrideMaterial = this.prepareMaskMaterial;\n this.prepareMaskMaterial.uniforms[\"cameraNearFar\"].value.set(\n this.renderCamera.near,\n this.renderCamera.far\n );\n this.prepareMaskMaterial.uniforms[\"depthTexture\"].value = this.renderTargetDepthBuffer.texture;\n this.prepareMaskMaterial.uniforms[\"textureMatrix\"].value = this.textureMatrix;\n renderer.setRenderTarget(this.renderTargetMaskBuffer);\n renderer.clear();\n renderer.render(this.renderScene, this.renderCamera);\n this.renderScene.overrideMaterial = null;\n this.changeVisibilityOfNonSelectedObjects(true);\n this._visibilityCache.clear();\n this.renderScene.background = currentBackground;\n this.fsQuad.material = this.materialCopy;\n this.copyUniforms[\"tDiffuse\"].value = this.renderTargetMaskBuffer.texture;\n renderer.setRenderTarget(this.renderTargetMaskDownSampleBuffer);\n renderer.clear();\n this.fsQuad.render(renderer);\n this.tempPulseColor1.copy(this.visibleEdgeColor);\n this.tempPulseColor2.copy(this.hiddenEdgeColor);\n if (this.pulsePeriod > 0) {\n const scalar = (1 + 0.25) / 2 + Math.cos(performance.now() * 0.01 / this.pulsePeriod) * (1 - 0.25) / 2;\n this.tempPulseColor1.multiplyScalar(scalar);\n this.tempPulseColor2.multiplyScalar(scalar);\n }\n this.fsQuad.material = this.edgeDetectionMaterial;\n this.edgeDetectionMaterial.uniforms[\"maskTexture\"].value = this.renderTargetMaskDownSampleBuffer.texture;\n this.edgeDetectionMaterial.uniforms[\"texSize\"].value.set(\n this.renderTargetMaskDownSampleBuffer.width,\n this.renderTargetMaskDownSampleBuffer.height\n );\n this.edgeDetectionMaterial.uniforms[\"visibleEdgeColor\"].value = this.tempPulseColor1;\n this.edgeDetectionMaterial.uniforms[\"hiddenEdgeColor\"].value = this.tempPulseColor2;\n renderer.setRenderTarget(this.renderTargetEdgeBuffer1);\n renderer.clear();\n this.fsQuad.render(renderer);\n this.fsQuad.material = this.separableBlurMaterial1;\n this.separableBlurMaterial1.uniforms[\"colorTexture\"].value = this.renderTargetEdgeBuffer1.texture;\n this.separableBlurMaterial1.uniforms[\"direction\"].value = this.BlurDirectionX;\n this.separableBlurMaterial1.uniforms[\"kernelRadius\"].value = this.edgeThickness;\n renderer.setRenderTarget(this.renderTargetBlurBuffer1);\n renderer.clear();\n this.fsQuad.render(renderer);\n this.separableBlurMaterial1.uniforms[\"colorTexture\"].value = this.renderTargetBlurBuffer1.texture;\n this.separableBlurMaterial1.uniforms[\"direction\"].value = this.BlurDirectionY;\n renderer.setRenderTarget(this.renderTargetEdgeBuffer1);\n renderer.clear();\n this.fsQuad.render(renderer);\n this.fsQuad.material = this.separableBlurMaterial2;\n this.separableBlurMaterial2.uniforms[\"colorTexture\"].value = this.renderTargetEdgeBuffer1.texture;\n this.separableBlurMaterial2.uniforms[\"direction\"].value = this.BlurDirectionX;\n renderer.setRenderTarget(this.renderTargetBlurBuffer2);\n renderer.clear();\n this.fsQuad.render(renderer);\n this.separableBlurMaterial2.uniforms[\"colorTexture\"].value = this.renderTargetBlurBuffer2.texture;\n this.separableBlurMaterial2.uniforms[\"direction\"].value = this.BlurDirectionY;\n renderer.setRenderTarget(this.renderTargetEdgeBuffer2);\n renderer.clear();\n this.fsQuad.render(renderer);\n this.fsQuad.material = this.overlayMaterial;\n this.overlayMaterial.uniforms[\"maskTexture\"].value = this.renderTargetMaskBuffer.texture;\n this.overlayMaterial.uniforms[\"edgeTexture1\"].value = this.renderTargetEdgeBuffer1.texture;\n this.overlayMaterial.uniforms[\"edgeTexture2\"].value = this.renderTargetEdgeBuffer2.texture;\n this.overlayMaterial.uniforms[\"patternTexture\"].value = this.patternTexture;\n this.overlayMaterial.uniforms[\"edgeStrength\"].value = this.edgeStrength;\n this.overlayMaterial.uniforms[\"edgeGlow\"].value = this.edgeGlow;\n this.overlayMaterial.uniforms[\"usePatternTexture\"].value = this.usePatternTexture;\n if (maskActive)\n renderer.state.buffers.stencil.setTest(true);\n renderer.setRenderTarget(readBuffer);\n this.fsQuad.render(renderer);\n renderer.setClearColor(this._oldClearColor, this.oldClearAlpha);\n renderer.autoClear = oldAutoClear;\n }\n if (this.renderToScreen) {\n this.fsQuad.material = this.materialCopy;\n this.copyUniforms[\"tDiffuse\"].value = readBuffer.texture;\n renderer.setRenderTarget(null);\n this.fsQuad.render(renderer);\n }\n }\n getPrepareMaskMaterial() {\n return new ShaderMaterial({\n uniforms: {\n depthTexture: { value: null },\n cameraNearFar: { value: new Vector2(0.5, 0.5) },\n textureMatrix: { value: null }\n },\n vertexShader: `#include <morphtarget_pars_vertex>\n\t\t\t\t#include <skinning_pars_vertex>\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tuniform mat4 textureMatrix;\n\t\t\t\tvoid main() {\n\t\t\t\t\t#include <skinbase_vertex>\n\t\t\t\t\t#include <begin_vertex>\n\t\t\t\t\t#include <morphtarget_vertex>\n\t\t\t\t\t#include <skinning_vertex>\n\t\t\t\t\t#include <project_vertex>\n\t\t\t\t\tvPosition = mvPosition;\n\t\t\t\t\tvec4 worldPosition = modelMatrix * vec4( transformed, 1.0 );\n\t\t\t\t\tprojTexCoord = textureMatrix * worldPosition;\n\t\t\t\t}`,\n fragmentShader: `#include <packing>\n\t\t\t\tvarying vec4 vPosition;\n\t\t\t\tvarying vec4 projTexCoord;\n\t\t\t\tuniform sampler2D depthTexture;\n\t\t\t\tuniform vec2 cameraNearFar;\n\t\t\t\tvoid main() {\n\t\t\t\t\tfloat depth = unpackRGBAToDepth(texture2DProj( depthTexture, projTexCoord ));\n\t\t\t\t\tfloat viewZ = - DEPTH_TO_VIEW_Z( depth, cameraNearFar.x, cameraNearFar.y );\n\t\t\t\t\tfloat depthTest = (-vPosition.z > viewZ) ? 1.0 : 0.0;\n\t\t\t\t\tgl_FragColor = vec4(0.0, depthTest, 1.0, 1.0);\n\t\t\t\t}`\n });\n }\n getEdgeDetectionMaterial() {\n return new ShaderMaterial({\n uniforms: {\n maskTexture: { value: null },\n texSize: { value: new Vector2(0.5, 0.5) },\n visibleEdgeColor: { value: new Vector3(1, 1, 1) },\n hiddenEdgeColor: { value: new Vector3(1, 1, 1) }\n },\n vertexShader: `varying vec2 vUv;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}`,\n fragmentShader: `varying vec2 vUv;\n\t\t\t\tuniform sampler2D maskTexture;\n\t\t\t\tuniform vec2 texSize;\n\t\t\t\tuniform vec3 visibleEdgeColor;\n\t\t\t\tuniform vec3 hiddenEdgeColor;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec2 invSize = 1.0 / texSize;\n\t\t\t\t\tvec4 uvOffset = vec4(1.0, 0.0, 0.0, 1.0) * vec4(invSize, invSize);\n\t\t\t\t\tvec4 c1 = texture2D( maskTexture, vUv + uvOffset.xy);\n\t\t\t\t\tvec4 c2 = texture2D( maskTexture, vUv - uvOffset.xy);\n\t\t\t\t\tvec4 c3 = texture2D( maskTexture, vUv + uvOffset.yw);\n\t\t\t\t\tvec4 c4 = texture2D( maskTexture, vUv - uvOffset.yw);\n\t\t\t\t\tfloat diff1 = (c1.r - c2.r)*0.5;\n\t\t\t\t\tfloat diff2 = (c3.r - c4.r)*0.5;\n\t\t\t\t\tfloat d = length( vec2(diff1, diff2) );\n\t\t\t\t\tfloat a1 = min(c1.g, c2.g);\n\t\t\t\t\tfloat a2 = min(c3.g, c4.g);\n\t\t\t\t\tfloat visibilityFactor = min(a1, a2);\n\t\t\t\t\tvec3 edgeColor = 1.0 - visibilityFactor > 0.001 ? visibleEdgeColor : hiddenEdgeColor;\n\t\t\t\t\tgl_FragColor = vec4(edgeColor, 1.0) * vec4(d);\n\t\t\t\t}`\n });\n }\n getSeperableBlurMaterial(maxRadius) {\n return new ShaderMaterial({\n defines: {\n MAX_RADIUS: maxRadius\n },\n uniforms: {\n colorTexture: { value: null },\n texSize: { value: new Vector2(0.5, 0.5) },\n direction: { value: new Vector2(0.5, 0.5) },\n kernelRadius: { value: 1 }\n },\n vertexShader: `varying vec2 vUv;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}`,\n fragmentShader: `#include <common>\n\t\t\t\tvarying vec2 vUv;\n\t\t\t\tuniform sampler2D colorTexture;\n\t\t\t\tuniform vec2 texSize;\n\t\t\t\tuniform vec2 direction;\n\t\t\t\tuniform float kernelRadius;\n\t\t\t\tfloat gaussianPdf(in float x, in float sigma) {\n\t\t\t\t\treturn 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma;\n\t\t\t\t}\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec2 invSize = 1.0 / texSize;\n\t\t\t\t\tfloat weightSum = gaussianPdf(0.0, kernelRadius);\n\t\t\t\t\tvec4 diffuseSum = texture2D( colorTexture, vUv) * weightSum;\n\t\t\t\t\tvec2 delta = direction * invSize * kernelRadius/float(MAX_RADIUS);\n\t\t\t\t\tvec2 uvOffset = delta;\n\t\t\t\t\tfor( int i = 1; i <= MAX_RADIUS; i ++ ) {\n\t\t\t\t\t\tfloat w = gaussianPdf(uvOffset.x, kernelRadius);\n\t\t\t\t\t\tvec4 sample1 = texture2D( colorTexture, vUv + uvOffset);\n\t\t\t\t\t\tvec4 sample2 = texture2D( colorTexture, vUv - uvOffset);\n\t\t\t\t\t\tdiffuseSum += ((sample1 + sample2) * w);\n\t\t\t\t\t\tweightSum += (2.0 * w);\n\t\t\t\t\t\tuvOffset += delta;\n\t\t\t\t\t}\n\t\t\t\t\tgl_FragColor = diffuseSum/weightSum;\n\t\t\t\t}`\n });\n }\n getOverlayMaterial() {\n return new ShaderMaterial({\n uniforms: {\n maskTexture: { value: null },\n edgeTexture1: { value: null },\n edgeTexture2: { value: null },\n patternTexture: { value: null },\n edgeStrength: { value: 1 },\n edgeGlow: { value: 1 },\n usePatternTexture: { value: 0 }\n },\n vertexShader: `varying vec2 vUv;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}`,\n fragmentShader: `varying vec2 vUv;\n\t\t\t\tuniform sampler2D maskTexture;\n\t\t\t\tuniform sampler2D edgeTexture1;\n\t\t\t\tuniform sampler2D edgeTexture2;\n\t\t\t\tuniform sampler2D patternTexture;\n\t\t\t\tuniform float edgeStrength;\n\t\t\t\tuniform float edgeGlow;\n\t\t\t\tuniform bool usePatternTexture;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec4 edgeValue1 = texture2D(edgeTexture1, vUv);\n\t\t\t\t\tvec4 edgeValue2 = texture2D(edgeTexture2, vUv);\n\t\t\t\t\tvec4 maskColor = texture2D(maskTexture, vUv);\n\t\t\t\t\tvec4 patternColor = texture2D(patternTexture, 6.0 * vUv);\n\t\t\t\t\tfloat visibilityFactor = 1.0 - maskColor.g > 0.0 ? 1.0 : 0.5;\n\t\t\t\t\tvec4 edgeValue = edgeValue1 + edgeValue2 * edgeGlow;\n\t\t\t\t\tvec4 finalColor = edgeStrength * maskColor.r * edgeValue;\n\t\t\t\t\tif(usePatternTexture)\n\t\t\t\t\t\tfinalColor += + visibilityFactor * (1.0 - maskColor.r) * (1.0 - patternColor.r);\n\t\t\t\t\tgl_FragColor = finalColor;\n\t\t\t\t}`,\n blending: AdditiveBlending,\n depthTest: false,\n depthWrite: false,\n transparent: true\n });\n }\n}\nexport {\n OutlinePass\n};\n//# sourceMappingURL=OutlinePass.js.map\n","import { Vector2, Matrix4 } from \"three\";\nconst SSAOShader = {\n defines: {\n PERSPECTIVE_CAMERA: 1,\n KERNEL_SIZE: 32\n },\n uniforms: {\n tDiffuse: { value: null },\n tNormal: { value: null },\n tDepth: { value: null },\n tNoise: { value: null },\n kernel: { value: null },\n cameraNear: { value: null },\n cameraFar: { value: null },\n resolution: { value: /* @__PURE__ */ new Vector2() },\n cameraProjectionMatrix: { value: /* @__PURE__ */ new Matrix4() },\n cameraInverseProjectionMatrix: { value: /* @__PURE__ */ new Matrix4() },\n kernelRadius: { value: 8 },\n minDistance: { value: 5e-3 },\n maxDistance: { value: 0.05 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D tDiffuse;\n uniform sampler2D tNormal;\n uniform sampler2D tDepth;\n uniform sampler2D tNoise;\n\n uniform vec3 kernel[ KERNEL_SIZE ];\n\n uniform vec2 resolution;\n\n uniform float cameraNear;\n uniform float cameraFar;\n uniform mat4 cameraProjectionMatrix;\n uniform mat4 cameraInverseProjectionMatrix;\n\n uniform float kernelRadius;\n uniform float minDistance; // avoid artifacts caused by neighbour fragments with minimal depth difference\n uniform float maxDistance; // avoid the influence of fragments which are too far away\n\n varying vec2 vUv;\n\n #include <packing>\n\n float getDepth( const in vec2 screenPosition ) {\n\n \treturn texture2D( tDepth, screenPosition ).x;\n\n }\n\n float getLinearDepth( const in vec2 screenPosition ) {\n\n \t#if PERSPECTIVE_CAMERA == 1\n\n \t\tfloat fragCoordZ = texture2D( tDepth, screenPosition ).x;\n \t\tfloat viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar );\n \t\treturn viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );\n\n \t#else\n\n \t\treturn texture2D( tDepth, screenPosition ).x;\n\n \t#endif\n\n }\n\n float getViewZ( const in float depth ) {\n\n \t#if PERSPECTIVE_CAMERA == 1\n\n \t\treturn perspectiveDepthToViewZ( depth, cameraNear, cameraFar );\n\n \t#else\n\n \t\treturn orthographicDepthToViewZ( depth, cameraNear, cameraFar );\n\n \t#endif\n\n }\n\n vec3 getViewPosition( const in vec2 screenPosition, const in float depth, const in float viewZ ) {\n\n \tfloat clipW = cameraProjectionMatrix[2][3] * viewZ + cameraProjectionMatrix[3][3];\n\n \tvec4 clipPosition = vec4( ( vec3( screenPosition, depth ) - 0.5 ) * 2.0, 1.0 );\n\n \tclipPosition *= clipW; // unprojection.\n\n \treturn ( cameraInverseProjectionMatrix * clipPosition ).xyz;\n\n }\n\n vec3 getViewNormal( const in vec2 screenPosition ) {\n\n \treturn unpackRGBToNormal( texture2D( tNormal, screenPosition ).xyz );\n\n }\n\n void main() {\n\n \tfloat depth = getDepth( vUv );\n \tfloat viewZ = getViewZ( depth );\n\n \tvec3 viewPosition = getViewPosition( vUv, depth, viewZ );\n \tvec3 viewNormal = getViewNormal( vUv );\n\n vec2 noiseScale = vec2( resolution.x / 4.0, resolution.y / 4.0 );\n \tvec3 random = texture2D( tNoise, vUv * noiseScale ).xyz;\n\n // compute matrix used to reorient a kernel vector\n\n \tvec3 tangent = normalize( random - viewNormal * dot( random, viewNormal ) );\n \tvec3 bitangent = cross( viewNormal, tangent );\n \tmat3 kernelMatrix = mat3( tangent, bitangent, viewNormal );\n\n float occlusion = 0.0;\n\n for ( int i = 0; i < KERNEL_SIZE; i ++ ) {\n\n \t\tvec3 sampleVector = kernelMatrix * kernel[ i ]; // reorient sample vector in view space\n \t\tvec3 samplePoint = viewPosition + ( sampleVector * kernelRadius ); // calculate sample point\n\n \t\tvec4 samplePointNDC = cameraProjectionMatrix * vec4( samplePoint, 1.0 ); // project point and calculate NDC\n \t\tsamplePointNDC /= samplePointNDC.w;\n\n \t\tvec2 samplePointUv = samplePointNDC.xy * 0.5 + 0.5; // compute uv coordinates\n\n \t\tfloat realDepth = getLinearDepth( samplePointUv ); // get linear depth from depth texture\n \t\tfloat sampleDepth = viewZToOrthographicDepth( samplePoint.z, cameraNear, cameraFar ); // compute linear depth of the sample view Z value\n \t\tfloat delta = sampleDepth - realDepth;\n\n \t\tif ( delta > minDistance && delta < maxDistance ) { // if fragment is before sample point, increase occlusion\n\n \t\t\tocclusion += 1.0;\n\n \t\t}\n\n \t}\n\n \tocclusion = clamp( occlusion / float( KERNEL_SIZE ), 0.0, 1.0 );\n\n \tgl_FragColor = vec4( vec3( 1.0 - occlusion ), 1.0 );\n\n }\n `\n )\n};\nconst SSAODepthShader = {\n defines: {\n PERSPECTIVE_CAMERA: 1\n },\n uniforms: {\n tDepth: { value: null },\n cameraNear: { value: null },\n cameraFar: { value: null }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D tDepth;\n\n uniform float cameraNear;\n uniform float cameraFar;\n\n varying vec2 vUv;\n\n #include <packing>\n\n float getLinearDepth( const in vec2 screenPosition ) {\n\n \t#if PERSPECTIVE_CAMERA == 1\n\n \t\tfloat fragCoordZ = texture2D( tDepth, screenPosition ).x;\n \t\tfloat viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar );\n \t\treturn viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );\n\n \t#else\n\n \t\treturn texture2D( tDepth, screenPosition ).x;\n\n \t#endif\n\n }\n\n void main() {\n\n \tfloat depth = getLinearDepth( vUv );\n \tgl_FragColor = vec4( vec3( 1.0 - depth ), 1.0 );\n\n }\n `\n )\n};\nconst SSAOBlurShader = {\n uniforms: {\n tDiffuse: { value: null },\n resolution: { value: /* @__PURE__ */ new Vector2() }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D tDiffuse;\n\n uniform vec2 resolution;\n\n varying vec2 vUv;\n\n void main() {\n\n \tvec2 texelSize = ( 1.0 / resolution );\n \tfloat result = 0.0;\n\n \tfor ( int i = - 2; i <= 2; i ++ ) {\n\n \t\tfor ( int j = - 2; j <= 2; j ++ ) {\n\n \t\t\tvec2 offset = ( vec2( float( i ), float( j ) ) ) * texelSize;\n \t\t\tresult += texture2D( tDiffuse, vUv + offset ).r;\n\n \t\t}\n\n \t}\n\n \tgl_FragColor = vec4( vec3( result / ( 5.0 * 5.0 ) ), 1.0 );\n\n }\n `\n )\n};\nexport {\n SSAOBlurShader,\n SSAODepthShader,\n SSAOShader\n};\n//# sourceMappingURL=SSAOShader.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { DepthTexture, DepthStencilFormat, UnsignedInt248Type, WebGLRenderTarget, NearestFilter, ShaderMaterial, UniformsUtils, NoBlending, MeshNormalMaterial, DstColorFactor, ZeroFactor, AddEquation, DstAlphaFactor, Color, CustomBlending, Vector3, MathUtils, DataTexture, RedFormat, FloatType, RepeatWrapping } from \"three\";\nimport { Pass, FullScreenQuad } from \"./Pass.js\";\nimport { SimplexNoise } from \"../math/SimplexNoise.js\";\nimport { SSAOShader, SSAOBlurShader, SSAODepthShader } from \"../shaders/SSAOShader.js\";\nimport { CopyShader } from \"../shaders/CopyShader.js\";\nconst SSAOPass = /* @__PURE__ */ (() => {\n const _SSAOPass = class extends Pass {\n constructor(scene, camera, width, height) {\n super();\n this.width = width !== void 0 ? width : 512;\n this.height = height !== void 0 ? height : 512;\n this.clear = true;\n this.camera = camera;\n this.scene = scene;\n this.kernelRadius = 8;\n this.kernelSize = 32;\n this.kernel = [];\n this.noiseTexture = null;\n this.output = 0;\n this.minDistance = 5e-3;\n this.maxDistance = 0.1;\n this._visibilityCache = /* @__PURE__ */ new Map();\n this.generateSampleKernel();\n this.generateRandomKernelRotations();\n const depthTexture = new DepthTexture();\n depthTexture.format = DepthStencilFormat;\n depthTexture.type = UnsignedInt248Type;\n this.beautyRenderTarget = new WebGLRenderTarget(this.width, this.height);\n this.normalRenderTarget = new WebGLRenderTarget(this.width, this.height, {\n minFilter: NearestFilter,\n magFilter: NearestFilter,\n depthTexture\n });\n this.ssaoRenderTarget = new WebGLRenderTarget(this.width, this.height);\n this.blurRenderTarget = this.ssaoRenderTarget.clone();\n if (SSAOShader === void 0) {\n console.error(\"THREE.SSAOPass: The pass relies on SSAOShader.\");\n }\n this.ssaoMaterial = new ShaderMaterial({\n defines: Object.assign({}, SSAOShader.defines),\n uniforms: UniformsUtils.clone(SSAOShader.uniforms),\n vertexShader: SSAOShader.vertexShader,\n fragmentShader: SSAOShader.fragmentShader,\n blending: NoBlending\n });\n this.ssaoMaterial.uniforms[\"tDiffuse\"].value = this.beautyRenderTarget.texture;\n this.ssaoMaterial.uniforms[\"tNormal\"].value = this.normalRenderTarget.texture;\n this.ssaoMaterial.uniforms[\"tDepth\"].value = this.normalRenderTarget.depthTexture;\n this.ssaoMaterial.uniforms[\"tNoise\"].value = this.noiseTexture;\n this.ssaoMaterial.uniforms[\"kernel\"].value = this.kernel;\n this.ssaoMaterial.uniforms[\"cameraNear\"].value = this.camera.near;\n this.ssaoMaterial.uniforms[\"cameraFar\"].value = this.camera.far;\n this.ssaoMaterial.uniforms[\"resolution\"].value.set(this.width, this.height);\n this.ssaoMaterial.uniforms[\"cameraProjectionMatrix\"].value.copy(this.camera.projectionMatrix);\n this.ssaoMaterial.uniforms[\"cameraInverseProjectionMatrix\"].value.copy(this.camera.projectionMatrixInverse);\n this.normalMaterial = new MeshNormalMaterial();\n this.normalMaterial.blending = NoBlending;\n this.blurMaterial = new ShaderMaterial({\n defines: Object.assign({}, SSAOBlurShader.defines),\n uniforms: UniformsUtils.clone(SSAOBlurShader.uniforms),\n vertexShader: SSAOBlurShader.vertexShader,\n fragmentShader: SSAOBlurShader.fragmentShader\n });\n this.blurMaterial.uniforms[\"tDiffuse\"].value = this.ssaoRenderTarget.texture;\n this.blurMaterial.uniforms[\"resolution\"].value.set(this.width, this.height);\n this.depthRenderMaterial = new ShaderMaterial({\n defines: Object.assign({}, SSAODepthShader.defines),\n uniforms: UniformsUtils.clone(SSAODepthShader.uniforms),\n vertexShader: SSAODepthShader.vertexShader,\n fragmentShader: SSAODepthShader.fragmentShader,\n blending: NoBlending\n });\n this.depthRenderMaterial.uniforms[\"tDepth\"].value = this.normalRenderTarget.depthTexture;\n this.depthRenderMaterial.uniforms[\"cameraNear\"].value = this.camera.near;\n this.depthRenderMaterial.uniforms[\"cameraFar\"].value = this.camera.far;\n this.copyMaterial = new ShaderMaterial({\n uniforms: UniformsUtils.clone(CopyShader.uniforms),\n vertexShader: CopyShader.vertexShader,\n fragmentShader: CopyShader.fragmentShader,\n transparent: true,\n depthTest: false,\n depthWrite: false,\n blendSrc: DstColorFactor,\n blendDst: ZeroFactor,\n blendEquation: AddEquation,\n blendSrcAlpha: DstAlphaFactor,\n blendDstAlpha: ZeroFactor,\n blendEquationAlpha: AddEquation\n });\n this.fsQuad = new FullScreenQuad(null);\n this.originalClearColor = new Color();\n }\n dispose() {\n this.beautyRenderTarget.dispose();\n this.normalRenderTarget.dispose();\n this.ssaoRenderTarget.dispose();\n this.blurRenderTarget.dispose();\n this.normalMaterial.dispose();\n this.blurMaterial.dispose();\n this.copyMaterial.dispose();\n this.depthRenderMaterial.dispose();\n this.fsQuad.dispose();\n }\n render(renderer, writeBuffer) {\n renderer.setRenderTarget(this.beautyRenderTarget);\n renderer.clear();\n renderer.render(this.scene, this.camera);\n this.overrideVisibility();\n this.renderOverride(renderer, this.normalMaterial, this.normalRenderTarget, 7829503, 1);\n this.restoreVisibility();\n this.ssaoMaterial.uniforms[\"kernelRadius\"].value = this.kernelRadius;\n this.ssaoMaterial.uniforms[\"minDistance\"].value = this.minDistance;\n this.ssaoMaterial.uniforms[\"maxDistance\"].value = this.maxDistance;\n this.renderPass(renderer, this.ssaoMaterial, this.ssaoRenderTarget);\n this.renderPass(renderer, this.blurMaterial, this.blurRenderTarget);\n switch (this.output) {\n case _SSAOPass.OUTPUT.SSAO:\n this.copyMaterial.uniforms[\"tDiffuse\"].value = this.ssaoRenderTarget.texture;\n this.copyMaterial.blending = NoBlending;\n this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);\n break;\n case _SSAOPass.OUTPUT.Blur:\n this.copyMaterial.uniforms[\"tDiffuse\"].value = this.blurRenderTarget.texture;\n this.copyMaterial.blending = NoBlending;\n this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);\n break;\n case _SSAOPass.OUTPUT.Beauty:\n this.copyMaterial.uniforms[\"tDiffuse\"].value = this.beautyRenderTarget.texture;\n this.copyMaterial.blending = NoBlending;\n this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);\n break;\n case _SSAOPass.OUTPUT.Depth:\n this.renderPass(renderer, this.depthRenderMaterial, this.renderToScreen ? null : writeBuffer);\n break;\n case _SSAOPass.OUTPUT.Normal:\n this.copyMaterial.uniforms[\"tDiffuse\"].value = this.normalRenderTarget.texture;\n this.copyMaterial.blending = NoBlending;\n this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);\n break;\n case _SSAOPass.OUTPUT.Default:\n this.copyMaterial.uniforms[\"tDiffuse\"].value = this.beautyRenderTarget.texture;\n this.copyMaterial.blending = NoBlending;\n this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);\n this.copyMaterial.uniforms[\"tDiffuse\"].value = this.blurRenderTarget.texture;\n this.copyMaterial.blending = CustomBlending;\n this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);\n break;\n default:\n console.warn(\"THREE.SSAOPass: Unknown output type.\");\n }\n }\n renderPass(renderer, passMaterial, renderTarget, clearColor, clearAlpha) {\n renderer.getClearColor(this.originalClearColor);\n const originalClearAlpha = renderer.getClearAlpha();\n const originalAutoClear = renderer.autoClear;\n renderer.setRenderTarget(renderTarget);\n renderer.autoClear = false;\n if (clearColor !== void 0 && clearColor !== null) {\n renderer.setClearColor(clearColor);\n renderer.setClearAlpha(clearAlpha || 0);\n renderer.clear();\n }\n this.fsQuad.material = passMaterial;\n this.fsQuad.render(renderer);\n renderer.autoClear = originalAutoClear;\n renderer.setClearColor(this.originalClearColor);\n renderer.setClearAlpha(originalClearAlpha);\n }\n renderOverride(renderer, overrideMaterial, renderTarget, clearColor, clearAlpha) {\n renderer.getClearColor(this.originalClearColor);\n const originalClearAlpha = renderer.getClearAlpha();\n const originalAutoClear = renderer.autoClear;\n renderer.setRenderTarget(renderTarget);\n renderer.autoClear = false;\n clearColor = overrideMaterial.clearColor || clearColor;\n clearAlpha = overrideMaterial.clearAlpha || clearAlpha;\n if (clearColor !== void 0 && clearColor !== null) {\n renderer.setClearColor(clearColor);\n renderer.setClearAlpha(clearAlpha || 0);\n renderer.clear();\n }\n this.scene.overrideMaterial = overrideMaterial;\n renderer.render(this.scene, this.camera);\n this.scene.overrideMaterial = null;\n renderer.autoClear = originalAutoClear;\n renderer.setClearColor(this.originalClearColor);\n renderer.setClearAlpha(originalClearAlpha);\n }\n setSize(width, height) {\n this.width = width;\n this.height = height;\n this.beautyRenderTarget.setSize(width, height);\n this.ssaoRenderTarget.setSize(width, height);\n this.normalRenderTarget.setSize(width, height);\n this.blurRenderTarget.setSize(width, height);\n this.ssaoMaterial.uniforms[\"resolution\"].value.set(width, height);\n this.ssaoMaterial.uniforms[\"cameraProjectionMatrix\"].value.copy(this.camera.projectionMatrix);\n this.ssaoMaterial.uniforms[\"cameraInverseProjectionMatrix\"].value.copy(this.camera.projectionMatrixInverse);\n this.blurMaterial.uniforms[\"resolution\"].value.set(width, height);\n }\n generateSampleKernel() {\n const kernelSize = this.kernelSize;\n const kernel = this.kernel;\n for (let i = 0; i < kernelSize; i++) {\n const sample = new Vector3();\n sample.x = Math.random() * 2 - 1;\n sample.y = Math.random() * 2 - 1;\n sample.z = Math.random();\n sample.normalize();\n let scale = i / kernelSize;\n scale = MathUtils.lerp(0.1, 1, scale * scale);\n sample.multiplyScalar(scale);\n kernel.push(sample);\n }\n }\n generateRandomKernelRotations() {\n const width = 4, height = 4;\n if (SimplexNoise === void 0) {\n console.error(\"THREE.SSAOPass: The pass relies on SimplexNoise.\");\n }\n const simplex = new SimplexNoise();\n const size = width * height;\n const data = new Float32Array(size);\n for (let i = 0; i < size; i++) {\n const x = Math.random() * 2 - 1;\n const y = Math.random() * 2 - 1;\n const z = 0;\n data[i] = simplex.noise3d(x, y, z);\n }\n this.noiseTexture = new DataTexture(data, width, height, RedFormat, FloatType);\n this.noiseTexture.wrapS = RepeatWrapping;\n this.noiseTexture.wrapT = RepeatWrapping;\n this.noiseTexture.needsUpdate = true;\n }\n overrideVisibility() {\n const scene = this.scene;\n const cache = this._visibilityCache;\n scene.traverse(function(object) {\n cache.set(object, object.visible);\n if (object.isPoints || object.isLine)\n object.visible = false;\n });\n }\n restoreVisibility() {\n const scene = this.scene;\n const cache = this._visibilityCache;\n scene.traverse(function(object) {\n const visible = cache.get(object);\n object.visible = visible;\n });\n cache.clear();\n }\n };\n let SSAOPass2 = _SSAOPass;\n __publicField(SSAOPass2, \"OUTPUT\", {\n Default: 0,\n SSAO: 1,\n Blur: 2,\n Beauty: 3,\n Depth: 4,\n Normal: 5\n });\n return SSAOPass2;\n})();\nexport {\n SSAOPass\n};\n//# sourceMappingURL=SSAOPass.js.map\n","import { UniformsUtils, ShaderMaterial, NoBlending, WebGLRenderTarget } from \"three\";\nimport { Pass, FullScreenQuad } from \"./Pass.js\";\nimport { CopyShader } from \"../shaders/CopyShader.js\";\nclass SavePass extends Pass {\n constructor(renderTarget) {\n super();\n if (CopyShader === void 0)\n console.error(\"THREE.SavePass relies on CopyShader\");\n const shader = CopyShader;\n this.textureID = \"tDiffuse\";\n this.uniforms = UniformsUtils.clone(shader.uniforms);\n this.material = new ShaderMaterial({\n uniforms: this.uniforms,\n vertexShader: shader.vertexShader,\n fragmentShader: shader.fragmentShader,\n blending: NoBlending\n });\n this.renderTarget = renderTarget;\n if (this.renderTarget === void 0) {\n this.renderTarget = new WebGLRenderTarget(window.innerWidth, window.innerHeight);\n this.renderTarget.texture.name = \"SavePass.rt\";\n }\n this.needsSwap = false;\n this.fsQuad = new FullScreenQuad(this.material);\n }\n render(renderer, writeBuffer, readBuffer) {\n if (this.uniforms[this.textureID]) {\n this.uniforms[this.textureID].value = readBuffer.texture;\n }\n renderer.setRenderTarget(this.renderTarget);\n if (this.clear)\n renderer.clear();\n this.fsQuad.render(renderer);\n }\n}\nexport {\n SavePass\n};\n//# sourceMappingURL=SavePass.js.map\n","const BokehShader = {\n defines: {\n DEPTH_PACKING: 1,\n PERSPECTIVE_CAMERA: 1\n },\n uniforms: {\n tColor: { value: null },\n tDepth: { value: null },\n focus: { value: 1 },\n aspect: { value: 1 },\n aperture: { value: 0.025 },\n maxblur: { value: 0.01 },\n nearClip: { value: 1 },\n farClip: { value: 1e3 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n #include <common>\n\n varying vec2 vUv;\n\n uniform sampler2D tColor;\n uniform sampler2D tDepth;\n\n uniform float maxblur; // max blur amount\n uniform float aperture; // aperture - bigger values for shallower depth of field\n\n uniform float nearClip;\n uniform float farClip;\n\n uniform float focus;\n uniform float aspect;\n\n #include <packing>\n\n float getDepth( const in vec2 screenPosition ) {\n \t#if DEPTH_PACKING == 1\n \treturn unpackRGBAToDepth( texture2D( tDepth, screenPosition ) );\n \t#else\n \treturn texture2D( tDepth, screenPosition ).x;\n \t#endif\n }\n\n float getViewZ( const in float depth ) {\n \t#if PERSPECTIVE_CAMERA == 1\n \treturn perspectiveDepthToViewZ( depth, nearClip, farClip );\n \t#else\n \treturn orthographicDepthToViewZ( depth, nearClip, farClip );\n \t#endif\n }\n\n void main() {\n\n \tvec2 aspectcorrect = vec2( 1.0, aspect );\n\n \tfloat viewZ = getViewZ( getDepth( vUv ) );\n\n \tfloat factor = ( focus + viewZ ); // viewZ is <= 0, so this is a difference equation\n\n \tvec2 dofblur = vec2 ( clamp( factor * aperture, -maxblur, maxblur ) );\n\n \tvec2 dofblur9 = dofblur * 0.9;\n \tvec2 dofblur7 = dofblur * 0.7;\n \tvec2 dofblur4 = dofblur * 0.4;\n\n \tvec4 col = vec4( 0.0 );\n\n \tcol += texture2D( tColor, vUv.xy );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( 0.15, 0.37 ) * aspectcorrect ) * dofblur );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( -0.37, 0.15 ) * aspectcorrect ) * dofblur );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( 0.40, 0.0 ) * aspectcorrect ) * dofblur );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( 0.37, -0.15 ) * aspectcorrect ) * dofblur );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( -0.15, 0.37 ) * aspectcorrect ) * dofblur );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( 0.37, 0.15 ) * aspectcorrect ) * dofblur );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( 0.15, -0.37 ) * aspectcorrect ) * dofblur );\n\n \tcol += texture2D( tColor, vUv.xy + ( vec2( 0.15, 0.37 ) * aspectcorrect ) * dofblur9 );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( -0.37, 0.15 ) * aspectcorrect ) * dofblur9 );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( 0.37, -0.15 ) * aspectcorrect ) * dofblur9 );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( -0.15, -0.37 ) * aspectcorrect ) * dofblur9 );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( -0.15, 0.37 ) * aspectcorrect ) * dofblur9 );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( 0.37, 0.15 ) * aspectcorrect ) * dofblur9 );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( -0.37, -0.15 ) * aspectcorrect ) * dofblur9 );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( 0.15, -0.37 ) * aspectcorrect ) * dofblur9 );\n\n \tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur7 );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( 0.40, 0.0 ) * aspectcorrect ) * dofblur7 );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur7 );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur7 );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur7 );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur7 );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur7 );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur7 );\n\n \tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, 0.29 ) * aspectcorrect ) * dofblur4 );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( 0.4, 0.0 ) * aspectcorrect ) * dofblur4 );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( 0.29, -0.29 ) * aspectcorrect ) * dofblur4 );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, -0.4 ) * aspectcorrect ) * dofblur4 );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, 0.29 ) * aspectcorrect ) * dofblur4 );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( -0.4, 0.0 ) * aspectcorrect ) * dofblur4 );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( -0.29, -0.29 ) * aspectcorrect ) * dofblur4 );\n \tcol += texture2D( tColor, vUv.xy + ( vec2( 0.0, 0.4 ) * aspectcorrect ) * dofblur4 );\n\n \tgl_FragColor = col / 41.0;\n \tgl_FragColor.a = 1.0;\n\n }\n `\n )\n};\nexport {\n BokehShader\n};\n//# sourceMappingURL=BokehShader.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Pass, FullScreenQuad } from \"./Pass.js\";\nimport { WebGLRenderTarget, NearestFilter, MeshDepthMaterial, RGBADepthPacking, NoBlending, UniformsUtils, ShaderMaterial, Color } from \"three\";\nimport { BokehShader } from \"../shaders/BokehShader.js\";\nclass BokehPass extends Pass {\n constructor(scene, camera, params) {\n super();\n __publicField(this, \"scene\");\n __publicField(this, \"camera\");\n __publicField(this, \"renderTargetDepth\");\n __publicField(this, \"materialDepth\");\n __publicField(this, \"materialBokeh\");\n __publicField(this, \"fsQuad\");\n __publicField(this, \"_oldClearColor\");\n __publicField(this, \"uniforms\");\n this.scene = scene;\n this.camera = camera;\n const focus = params.focus !== void 0 ? params.focus : 1;\n const aspect = params.aspect !== void 0 ? params.aspect : camera.aspect;\n const aperture = params.aperture !== void 0 ? params.aperture : 0.025;\n const maxblur = params.maxblur !== void 0 ? params.maxblur : 1;\n const width = params.width || window.innerWidth || 1;\n const height = params.height || window.innerHeight || 1;\n this.renderTargetDepth = new WebGLRenderTarget(width, height, {\n minFilter: NearestFilter,\n magFilter: NearestFilter\n });\n this.renderTargetDepth.texture.name = \"BokehPass.depth\";\n this.materialDepth = new MeshDepthMaterial();\n this.materialDepth.depthPacking = RGBADepthPacking;\n this.materialDepth.blending = NoBlending;\n if (BokehShader === void 0) {\n console.error(\"BokehPass relies on BokehShader\");\n }\n const bokehShader = BokehShader;\n const bokehUniforms = UniformsUtils.clone(bokehShader.uniforms);\n bokehUniforms[\"tDepth\"].value = this.renderTargetDepth.texture;\n bokehUniforms[\"focus\"].value = focus;\n bokehUniforms[\"aspect\"].value = aspect;\n bokehUniforms[\"aperture\"].value = aperture;\n bokehUniforms[\"maxblur\"].value = maxblur;\n bokehUniforms[\"nearClip\"].value = camera.near;\n bokehUniforms[\"farClip\"].value = camera.far;\n this.materialBokeh = new ShaderMaterial({\n defines: Object.assign({}, bokehShader.defines),\n uniforms: bokehUniforms,\n vertexShader: bokehShader.vertexShader,\n fragmentShader: bokehShader.fragmentShader\n });\n this.uniforms = bokehUniforms;\n this.needsSwap = false;\n this.fsQuad = new FullScreenQuad(this.materialBokeh);\n this._oldClearColor = new Color();\n }\n render(renderer, writeBuffer, readBuffer) {\n this.scene.overrideMaterial = this.materialDepth;\n renderer.getClearColor(this._oldClearColor);\n const oldClearAlpha = renderer.getClearAlpha();\n const oldAutoClear = renderer.autoClear;\n renderer.autoClear = false;\n renderer.setClearColor(16777215);\n renderer.setClearAlpha(1);\n renderer.setRenderTarget(this.renderTargetDepth);\n renderer.clear();\n renderer.render(this.scene, this.camera);\n this.uniforms[\"tColor\"].value = readBuffer.texture;\n this.uniforms[\"nearClip\"].value = this.camera.near;\n this.uniforms[\"farClip\"].value = this.camera.far;\n if (this.renderToScreen) {\n renderer.setRenderTarget(null);\n this.fsQuad.render(renderer);\n } else {\n renderer.setRenderTarget(writeBuffer);\n renderer.clear();\n this.fsQuad.render(renderer);\n }\n this.scene.overrideMaterial = null;\n renderer.setClearColor(this._oldClearColor);\n renderer.setClearAlpha(oldClearAlpha);\n renderer.autoClear = oldAutoClear;\n }\n}\nexport {\n BokehPass\n};\n//# sourceMappingURL=BokehPass.js.map\n","import { UniformsUtils, ShaderMaterial } from \"three\";\nimport { Pass, FullScreenQuad } from \"./Pass.js\";\nimport { CopyShader } from \"../shaders/CopyShader.js\";\nclass TexturePass extends Pass {\n constructor(map, opacity) {\n super();\n const shader = CopyShader;\n this.map = map;\n this.opacity = opacity !== void 0 ? opacity : 1;\n this.uniforms = UniformsUtils.clone(shader.uniforms);\n this.material = new ShaderMaterial({\n uniforms: this.uniforms,\n vertexShader: shader.vertexShader,\n fragmentShader: shader.fragmentShader,\n depthTest: false,\n depthWrite: false,\n premultipliedAlpha: true\n });\n this.needsSwap = false;\n this.fsQuad = new FullScreenQuad(null);\n }\n render(renderer, writeBuffer, readBuffer) {\n const oldAutoClear = renderer.autoClear;\n renderer.autoClear = false;\n this.fsQuad.material = this.material;\n this.uniforms[\"opacity\"].value = this.opacity;\n this.uniforms[\"tDiffuse\"].value = this.map;\n this.material.transparent = this.opacity < 1;\n renderer.setRenderTarget(this.renderToScreen ? null : readBuffer);\n if (this.clear)\n renderer.clear();\n this.fsQuad.render(renderer);\n renderer.autoClear = oldAutoClear;\n }\n dispose() {\n this.material.dispose();\n this.fsQuad.dispose();\n }\n}\nexport {\n TexturePass\n};\n//# sourceMappingURL=TexturePass.js.map\n","const LuminosityShader = {\n uniforms: {\n tDiffuse: { value: null }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n #include <common>\n\n uniform sampler2D tDiffuse;\n\n varying vec2 vUv;\n\n void main() {\n\n \tvec4 texel = texture2D( tDiffuse, vUv );\n\n \tfloat l = linearToRelativeLuminance( texel.rgb );\n\n \tgl_FragColor = vec4( l, l, l, texel.w );\n\n }\n `\n )\n};\nexport {\n LuminosityShader\n};\n//# sourceMappingURL=LuminosityShader.js.map\n","const ToneMapShader = {\n uniforms: {\n tDiffuse: { value: null },\n averageLuminance: { value: 1 },\n luminanceMap: { value: null },\n maxLuminance: { value: 16 },\n minLuminance: { value: 0.01 },\n middleGrey: { value: 0.6 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n #include <common>\n\n uniform sampler2D tDiffuse;\n\n varying vec2 vUv;\n\n uniform float middleGrey;\n uniform float minLuminance;\n uniform float maxLuminance;\n #ifdef ADAPTED_LUMINANCE\n \tuniform sampler2D luminanceMap;\n #else\n \tuniform float averageLuminance;\n #endif\n\n vec3 ToneMap( vec3 vColor ) {\n \t#ifdef ADAPTED_LUMINANCE\n // Get the calculated average luminance\n \t\tfloat fLumAvg = texture2D(luminanceMap, vec2(0.5, 0.5)).r;\n \t#else\n \t\tfloat fLumAvg = averageLuminance;\n \t#endif\n\n // Calculate the luminance of the current pixel\n \tfloat fLumPixel = linearToRelativeLuminance( vColor );\n\n // Apply the modified operator (Eq. 4)\n \tfloat fLumScaled = (fLumPixel * middleGrey) / max( minLuminance, fLumAvg );\n\n \tfloat fLumCompressed = (fLumScaled * (1.0 + (fLumScaled / (maxLuminance * maxLuminance)))) / (1.0 + fLumScaled);\n \treturn fLumCompressed * vColor;\n }\n\n void main() {\n\n \tvec4 texel = texture2D( tDiffuse, vUv );\n\n \tgl_FragColor = vec4( ToneMap( texel.xyz ), texel.w );\n\n }\n `\n )\n};\nexport {\n ToneMapShader\n};\n//# sourceMappingURL=ToneMapShader.js.map\n","import { UniformsUtils, ShaderMaterial, NoBlending, WebGLRenderTarget, MeshBasicMaterial, LinearMipmapLinearFilter } from \"three\";\nimport { Pass, FullScreenQuad } from \"./Pass.js\";\nimport { CopyShader } from \"../shaders/CopyShader.js\";\nimport { LuminosityShader } from \"../shaders/LuminosityShader.js\";\nimport { ToneMapShader } from \"../shaders/ToneMapShader.js\";\nclass AdaptiveToneMappingPass extends Pass {\n constructor(adaptive, resolution) {\n super();\n this.resolution = resolution !== void 0 ? resolution : 256;\n this.needsInit = true;\n this.adaptive = adaptive !== void 0 ? !!adaptive : true;\n this.luminanceRT = null;\n this.previousLuminanceRT = null;\n this.currentLuminanceRT = null;\n const copyShader = CopyShader;\n this.copyUniforms = UniformsUtils.clone(copyShader.uniforms);\n this.materialCopy = new ShaderMaterial({\n uniforms: this.copyUniforms,\n vertexShader: copyShader.vertexShader,\n fragmentShader: copyShader.fragmentShader,\n blending: NoBlending,\n depthTest: false\n });\n this.materialLuminance = new ShaderMaterial({\n uniforms: UniformsUtils.clone(LuminosityShader.uniforms),\n vertexShader: LuminosityShader.vertexShader,\n fragmentShader: LuminosityShader.fragmentShader,\n blending: NoBlending\n });\n this.adaptLuminanceShader = {\n defines: {\n MIP_LEVEL_1X1: (Math.log(this.resolution) / Math.log(2)).toFixed(1)\n },\n uniforms: {\n lastLum: { value: null },\n currentLum: { value: null },\n minLuminance: { value: 0.01 },\n delta: { value: 0.016 },\n tau: { value: 1 }\n },\n vertexShader: `varying vec2 vUv;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t\t\t}`,\n fragmentShader: `varying vec2 vUv;\n\n\t\t\t\tuniform sampler2D lastLum;\n\t\t\t\tuniform sampler2D currentLum;\n\t\t\t\tuniform float minLuminance;\n\t\t\t\tuniform float delta;\n\t\t\t\tuniform float tau;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec4 lastLum = texture2D( lastLum, vUv, MIP_LEVEL_1X1 );\n\t\t\t\t\tvec4 currentLum = texture2D( currentLum, vUv, MIP_LEVEL_1X1 );\n\n\t\t\t\t\tfloat fLastLum = max( minLuminance, lastLum.r );\n\t\t\t\t\tfloat fCurrentLum = max( minLuminance, currentLum.r );\n\n\t\t\t\t\t//The adaption seems to work better in extreme lighting differences\n\t\t\t\t\t//if the input luminance is squared.\n\t\t\t\t\tfCurrentLum *= fCurrentLum;\n\n\t\t\t\t\t// Adapt the luminance using Pattanaik's technique\n\t\t\t\t\tfloat fAdaptedLum = fLastLum + (fCurrentLum - fLastLum) * (1.0 - exp(-delta * tau));\n\t\t\t\t\t// \"fAdaptedLum = sqrt(fAdaptedLum);\n\t\t\t\t\tgl_FragColor.r = fAdaptedLum;\n\t\t\t\t}`\n };\n this.materialAdaptiveLum = new ShaderMaterial({\n uniforms: UniformsUtils.clone(this.adaptLuminanceShader.uniforms),\n vertexShader: this.adaptLuminanceShader.vertexShader,\n fragmentShader: this.adaptLuminanceShader.fragmentShader,\n defines: Object.assign({}, this.adaptLuminanceShader.defines),\n blending: NoBlending\n });\n this.materialToneMap = new ShaderMaterial({\n uniforms: UniformsUtils.clone(ToneMapShader.uniforms),\n vertexShader: ToneMapShader.vertexShader,\n fragmentShader: ToneMapShader.fragmentShader,\n blending: NoBlending\n });\n this.fsQuad = new FullScreenQuad(null);\n }\n render(renderer, writeBuffer, readBuffer, deltaTime) {\n if (this.needsInit) {\n this.reset(renderer);\n this.luminanceRT.texture.type = readBuffer.texture.type;\n this.previousLuminanceRT.texture.type = readBuffer.texture.type;\n this.currentLuminanceRT.texture.type = readBuffer.texture.type;\n this.needsInit = false;\n }\n if (this.adaptive) {\n this.fsQuad.material = this.materialLuminance;\n this.materialLuminance.uniforms.tDiffuse.value = readBuffer.texture;\n renderer.setRenderTarget(this.currentLuminanceRT);\n this.fsQuad.render(renderer);\n this.fsQuad.material = this.materialAdaptiveLum;\n this.materialAdaptiveLum.uniforms.delta.value = deltaTime;\n this.materialAdaptiveLum.uniforms.lastLum.value = this.previousLuminanceRT.texture;\n this.materialAdaptiveLum.uniforms.currentLum.value = this.currentLuminanceRT.texture;\n renderer.setRenderTarget(this.luminanceRT);\n this.fsQuad.render(renderer);\n this.fsQuad.material = this.materialCopy;\n this.copyUniforms.tDiffuse.value = this.luminanceRT.texture;\n renderer.setRenderTarget(this.previousLuminanceRT);\n this.fsQuad.render(renderer);\n }\n this.fsQuad.material = this.materialToneMap;\n this.materialToneMap.uniforms.tDiffuse.value = readBuffer.texture;\n if (this.renderToScreen) {\n renderer.setRenderTarget(null);\n this.fsQuad.render(renderer);\n } else {\n renderer.setRenderTarget(writeBuffer);\n if (this.clear)\n renderer.clear();\n this.fsQuad.render(renderer);\n }\n }\n reset() {\n if (this.luminanceRT) {\n this.luminanceRT.dispose();\n }\n if (this.currentLuminanceRT) {\n this.currentLuminanceRT.dispose();\n }\n if (this.previousLuminanceRT) {\n this.previousLuminanceRT.dispose();\n }\n this.luminanceRT = new WebGLRenderTarget(this.resolution, this.resolution);\n this.luminanceRT.texture.name = \"AdaptiveToneMappingPass.l\";\n this.luminanceRT.texture.generateMipmaps = false;\n this.previousLuminanceRT = new WebGLRenderTarget(this.resolution, this.resolution);\n this.previousLuminanceRT.texture.name = \"AdaptiveToneMappingPass.pl\";\n this.previousLuminanceRT.texture.generateMipmaps = false;\n const pars = { minFilter: LinearMipmapLinearFilter, generateMipmaps: true };\n this.currentLuminanceRT = new WebGLRenderTarget(this.resolution, this.resolution, pars);\n this.currentLuminanceRT.texture.name = \"AdaptiveToneMappingPass.cl\";\n if (this.adaptive) {\n this.materialToneMap.defines[\"ADAPTED_LUMINANCE\"] = \"\";\n this.materialToneMap.uniforms.luminanceMap.value = this.luminanceRT.texture;\n }\n this.fsQuad.material = new MeshBasicMaterial({ color: 7829367 });\n this.materialLuminance.needsUpdate = true;\n this.materialAdaptiveLum.needsUpdate = true;\n this.materialToneMap.needsUpdate = true;\n }\n setAdaptive(adaptive) {\n if (adaptive) {\n this.adaptive = true;\n this.materialToneMap.defines[\"ADAPTED_LUMINANCE\"] = \"\";\n this.materialToneMap.uniforms.luminanceMap.value = this.luminanceRT.texture;\n } else {\n this.adaptive = false;\n delete this.materialToneMap.defines[\"ADAPTED_LUMINANCE\"];\n this.materialToneMap.uniforms.luminanceMap.value = null;\n }\n this.materialToneMap.needsUpdate = true;\n }\n setAdaptionRate(rate) {\n if (rate) {\n this.materialAdaptiveLum.uniforms.tau.value = Math.abs(rate);\n }\n }\n setMinLuminance(minLum) {\n if (minLum) {\n this.materialToneMap.uniforms.minLuminance.value = minLum;\n this.materialAdaptiveLum.uniforms.minLuminance.value = minLum;\n }\n }\n setMaxLuminance(maxLum) {\n if (maxLum) {\n this.materialToneMap.uniforms.maxLuminance.value = maxLum;\n }\n }\n setAverageLuminance(avgLum) {\n if (avgLum) {\n this.materialToneMap.uniforms.averageLuminance.value = avgLum;\n }\n }\n setMiddleGrey(middleGrey) {\n if (middleGrey) {\n this.materialToneMap.uniforms.middleGrey.value = middleGrey;\n }\n }\n dispose() {\n if (this.luminanceRT) {\n this.luminanceRT.dispose();\n }\n if (this.previousLuminanceRT) {\n this.previousLuminanceRT.dispose();\n }\n if (this.currentLuminanceRT) {\n this.currentLuminanceRT.dispose();\n }\n if (this.materialLuminance) {\n this.materialLuminance.dispose();\n }\n if (this.materialAdaptiveLum) {\n this.materialAdaptiveLum.dispose();\n }\n if (this.materialCopy) {\n this.materialCopy.dispose();\n }\n if (this.materialToneMap) {\n this.materialToneMap.dispose();\n }\n }\n}\nexport {\n AdaptiveToneMappingPass\n};\n//# sourceMappingURL=AdaptiveToneMappingPass.js.map\n","import { Color } from \"three\";\nconst LuminosityHighPassShader = {\n shaderID: \"luminosityHighPass\",\n uniforms: {\n tDiffuse: { value: null },\n luminosityThreshold: { value: 1 },\n smoothWidth: { value: 1 },\n defaultColor: { value: /* @__PURE__ */ new Color(0) },\n defaultOpacity: { value: 0 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D tDiffuse;\n uniform vec3 defaultColor;\n uniform float defaultOpacity;\n uniform float luminosityThreshold;\n uniform float smoothWidth;\n\n varying vec2 vUv;\n\n void main() {\n\n \tvec4 texel = texture2D( tDiffuse, vUv );\n\n \tvec3 luma = vec3( 0.299, 0.587, 0.114 );\n\n \tfloat v = dot( texel.xyz, luma );\n\n \tvec4 outputColor = vec4( defaultColor.rgb, defaultOpacity );\n\n \tfloat alpha = smoothstep( luminosityThreshold, luminosityThreshold + smoothWidth, v );\n\n \tgl_FragColor = mix( outputColor, texel, alpha );\n\n }\n `\n )\n};\nexport {\n LuminosityHighPassShader\n};\n//# sourceMappingURL=LuminosityHighPassShader.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Vector2, Color, WebGLRenderTarget, HalfFloatType, UniformsUtils, ShaderMaterial, Vector3, AdditiveBlending, MeshBasicMaterial } from \"three\";\nimport { Pass, FullScreenQuad } from \"./Pass.js\";\nimport { CopyShader } from \"../shaders/CopyShader.js\";\nimport { LuminosityHighPassShader } from \"../shaders/LuminosityHighPassShader.js\";\nconst UnrealBloomPass = /* @__PURE__ */ (() => {\n const _UnrealBloomPass = class extends Pass {\n constructor(resolution, strength, radius, threshold) {\n super();\n this.strength = strength !== void 0 ? strength : 1;\n this.radius = radius;\n this.threshold = threshold;\n this.resolution = resolution !== void 0 ? new Vector2(resolution.x, resolution.y) : new Vector2(256, 256);\n this.clearColor = new Color(0, 0, 0);\n this.renderTargetsHorizontal = [];\n this.renderTargetsVertical = [];\n this.nMips = 5;\n let resx = Math.round(this.resolution.x / 2);\n let resy = Math.round(this.resolution.y / 2);\n this.renderTargetBright = new WebGLRenderTarget(resx, resy, { type: HalfFloatType });\n this.renderTargetBright.texture.name = \"UnrealBloomPass.bright\";\n this.renderTargetBright.texture.generateMipmaps = false;\n for (let i = 0; i < this.nMips; i++) {\n const renderTargetHorizonal = new WebGLRenderTarget(resx, resy, { type: HalfFloatType });\n renderTargetHorizonal.texture.name = \"UnrealBloomPass.h\" + i;\n renderTargetHorizonal.texture.generateMipmaps = false;\n this.renderTargetsHorizontal.push(renderTargetHorizonal);\n const renderTargetVertical = new WebGLRenderTarget(resx, resy, { type: HalfFloatType });\n renderTargetVertical.texture.name = \"UnrealBloomPass.v\" + i;\n renderTargetVertical.texture.generateMipmaps = false;\n this.renderTargetsVertical.push(renderTargetVertical);\n resx = Math.round(resx / 2);\n resy = Math.round(resy / 2);\n }\n const highPassShader = LuminosityHighPassShader;\n this.highPassUniforms = UniformsUtils.clone(highPassShader.uniforms);\n this.highPassUniforms[\"luminosityThreshold\"].value = threshold;\n this.highPassUniforms[\"smoothWidth\"].value = 0.01;\n this.materialHighPassFilter = new ShaderMaterial({\n uniforms: this.highPassUniforms,\n vertexShader: highPassShader.vertexShader,\n fragmentShader: highPassShader.fragmentShader,\n defines: {}\n });\n this.separableBlurMaterials = [];\n const kernelSizeArray = [3, 5, 7, 9, 11];\n resx = Math.round(this.resolution.x / 2);\n resy = Math.round(this.resolution.y / 2);\n for (let i = 0; i < this.nMips; i++) {\n this.separableBlurMaterials.push(this.getSeperableBlurMaterial(kernelSizeArray[i]));\n this.separableBlurMaterials[i].uniforms[\"texSize\"].value = new Vector2(resx, resy);\n resx = Math.round(resx / 2);\n resy = Math.round(resy / 2);\n }\n this.compositeMaterial = this.getCompositeMaterial(this.nMips);\n this.compositeMaterial.uniforms[\"blurTexture1\"].value = this.renderTargetsVertical[0].texture;\n this.compositeMaterial.uniforms[\"blurTexture2\"].value = this.renderTargetsVertical[1].texture;\n this.compositeMaterial.uniforms[\"blurTexture3\"].value = this.renderTargetsVertical[2].texture;\n this.compositeMaterial.uniforms[\"blurTexture4\"].value = this.renderTargetsVertical[3].texture;\n this.compositeMaterial.uniforms[\"blurTexture5\"].value = this.renderTargetsVertical[4].texture;\n this.compositeMaterial.uniforms[\"bloomStrength\"].value = strength;\n this.compositeMaterial.uniforms[\"bloomRadius\"].value = 0.1;\n this.compositeMaterial.needsUpdate = true;\n const bloomFactors = [1, 0.8, 0.6, 0.4, 0.2];\n this.compositeMaterial.uniforms[\"bloomFactors\"].value = bloomFactors;\n this.bloomTintColors = [\n new Vector3(1, 1, 1),\n new Vector3(1, 1, 1),\n new Vector3(1, 1, 1),\n new Vector3(1, 1, 1),\n new Vector3(1, 1, 1)\n ];\n this.compositeMaterial.uniforms[\"bloomTintColors\"].value = this.bloomTintColors;\n const copyShader = CopyShader;\n this.copyUniforms = UniformsUtils.clone(copyShader.uniforms);\n this.copyUniforms[\"opacity\"].value = 1;\n this.materialCopy = new ShaderMaterial({\n uniforms: this.copyUniforms,\n vertexShader: copyShader.vertexShader,\n fragmentShader: copyShader.fragmentShader,\n blending: AdditiveBlending,\n depthTest: false,\n depthWrite: false,\n transparent: true\n });\n this.enabled = true;\n this.needsSwap = false;\n this._oldClearColor = new Color();\n this.oldClearAlpha = 1;\n this.basic = new MeshBasicMaterial();\n this.fsQuad = new FullScreenQuad(null);\n }\n dispose() {\n for (let i = 0; i < this.renderTargetsHorizontal.length; i++) {\n this.renderTargetsHorizontal[i].dispose();\n }\n for (let i = 0; i < this.renderTargetsVertical.length; i++) {\n this.renderTargetsVertical[i].dispose();\n }\n this.renderTargetBright.dispose();\n for (let i = 0; i < this.separableBlurMaterials.length; i++) {\n this.separableBlurMaterials[i].dispose();\n }\n this.compositeMaterial.dispose();\n this.materialCopy.dispose();\n this.basic.dispose();\n this.fsQuad.dispose();\n }\n setSize(width, height) {\n let resx = Math.round(width / 2);\n let resy = Math.round(height / 2);\n this.renderTargetBright.setSize(resx, resy);\n for (let i = 0; i < this.nMips; i++) {\n this.renderTargetsHorizontal[i].setSize(resx, resy);\n this.renderTargetsVertical[i].setSize(resx, resy);\n this.separableBlurMaterials[i].uniforms[\"texSize\"].value = new Vector2(resx, resy);\n resx = Math.round(resx / 2);\n resy = Math.round(resy / 2);\n }\n }\n render(renderer, writeBuffer, readBuffer, deltaTime, maskActive) {\n renderer.getClearColor(this._oldClearColor);\n this.oldClearAlpha = renderer.getClearAlpha();\n const oldAutoClear = renderer.autoClear;\n renderer.autoClear = false;\n renderer.setClearColor(this.clearColor, 0);\n if (maskActive)\n renderer.state.buffers.stencil.setTest(false);\n if (this.renderToScreen) {\n this.fsQuad.material = this.basic;\n this.basic.map = readBuffer.texture;\n renderer.setRenderTarget(null);\n renderer.clear();\n this.fsQuad.render(renderer);\n }\n this.highPassUniforms[\"tDiffuse\"].value = readBuffer.texture;\n this.highPassUniforms[\"luminosityThreshold\"].value = this.threshold;\n this.fsQuad.material = this.materialHighPassFilter;\n renderer.setRenderTarget(this.renderTargetBright);\n renderer.clear();\n this.fsQuad.render(renderer);\n let inputRenderTarget = this.renderTargetBright;\n for (let i = 0; i < this.nMips; i++) {\n this.fsQuad.material = this.separableBlurMaterials[i];\n this.separableBlurMaterials[i].uniforms[\"colorTexture\"].value = inputRenderTarget.texture;\n this.separableBlurMaterials[i].uniforms[\"direction\"].value = _UnrealBloomPass.BlurDirectionX;\n renderer.setRenderTarget(this.renderTargetsHorizontal[i]);\n renderer.clear();\n this.fsQuad.render(renderer);\n this.separableBlurMaterials[i].uniforms[\"colorTexture\"].value = this.renderTargetsHorizontal[i].texture;\n this.separableBlurMaterials[i].uniforms[\"direction\"].value = _UnrealBloomPass.BlurDirectionY;\n renderer.setRenderTarget(this.renderTargetsVertical[i]);\n renderer.clear();\n this.fsQuad.render(renderer);\n inputRenderTarget = this.renderTargetsVertical[i];\n }\n this.fsQuad.material = this.compositeMaterial;\n this.compositeMaterial.uniforms[\"bloomStrength\"].value = this.strength;\n this.compositeMaterial.uniforms[\"bloomRadius\"].value = this.radius;\n this.compositeMaterial.uniforms[\"bloomTintColors\"].value = this.bloomTintColors;\n renderer.setRenderTarget(this.renderTargetsHorizontal[0]);\n renderer.clear();\n this.fsQuad.render(renderer);\n this.fsQuad.material = this.materialCopy;\n this.copyUniforms[\"tDiffuse\"].value = this.renderTargetsHorizontal[0].texture;\n if (maskActive)\n renderer.state.buffers.stencil.setTest(true);\n if (this.renderToScreen) {\n renderer.setRenderTarget(null);\n this.fsQuad.render(renderer);\n } else {\n renderer.setRenderTarget(readBuffer);\n this.fsQuad.render(renderer);\n }\n renderer.setClearColor(this._oldClearColor, this.oldClearAlpha);\n renderer.autoClear = oldAutoClear;\n }\n getSeperableBlurMaterial(kernelRadius) {\n return new ShaderMaterial({\n defines: {\n KERNEL_RADIUS: kernelRadius,\n SIGMA: kernelRadius\n },\n uniforms: {\n colorTexture: { value: null },\n texSize: { value: new Vector2(0.5, 0.5) },\n direction: { value: new Vector2(0.5, 0.5) }\n },\n vertexShader: `varying vec2 vUv;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}`,\n fragmentShader: `#include <common>\n\t\t\t\tvarying vec2 vUv;\n\t\t\t\tuniform sampler2D colorTexture;\n\t\t\t\tuniform vec2 texSize;\n\t\t\t\tuniform vec2 direction;\n\n\t\t\t\tfloat gaussianPdf(in float x, in float sigma) {\n\t\t\t\t\treturn 0.39894 * exp( -0.5 * x * x/( sigma * sigma))/sigma;\n\t\t\t\t}\n\t\t\t\tvoid main() {\n\t\t\t\t\tvec2 invSize = 1.0 / texSize;\n\t\t\t\t\tfloat fSigma = float(SIGMA);\n\t\t\t\t\tfloat weightSum = gaussianPdf(0.0, fSigma);\n\t\t\t\t\tvec3 diffuseSum = texture2D( colorTexture, vUv).rgb * weightSum;\n\t\t\t\t\tfor( int i = 1; i < KERNEL_RADIUS; i ++ ) {\n\t\t\t\t\t\tfloat x = float(i);\n\t\t\t\t\t\tfloat w = gaussianPdf(x, fSigma);\n\t\t\t\t\t\tvec2 uvOffset = direction * invSize * x;\n\t\t\t\t\t\tvec3 sample1 = texture2D( colorTexture, vUv + uvOffset).rgb;\n\t\t\t\t\t\tvec3 sample2 = texture2D( colorTexture, vUv - uvOffset).rgb;\n\t\t\t\t\t\tdiffuseSum += (sample1 + sample2) * w;\n\t\t\t\t\t\tweightSum += 2.0 * w;\n\t\t\t\t\t}\n\t\t\t\t\tgl_FragColor = vec4(diffuseSum/weightSum, 1.0);\n\t\t\t\t}`\n });\n }\n getCompositeMaterial(nMips) {\n return new ShaderMaterial({\n defines: {\n NUM_MIPS: nMips\n },\n uniforms: {\n blurTexture1: { value: null },\n blurTexture2: { value: null },\n blurTexture3: { value: null },\n blurTexture4: { value: null },\n blurTexture5: { value: null },\n bloomStrength: { value: 1 },\n bloomFactors: { value: null },\n bloomTintColors: { value: null },\n bloomRadius: { value: 0 }\n },\n vertexShader: `varying vec2 vUv;\n\t\t\t\tvoid main() {\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\t\t\t\t}`,\n fragmentShader: `varying vec2 vUv;\n\t\t\t\tuniform sampler2D blurTexture1;\n\t\t\t\tuniform sampler2D blurTexture2;\n\t\t\t\tuniform sampler2D blurTexture3;\n\t\t\t\tuniform sampler2D blurTexture4;\n\t\t\t\tuniform sampler2D blurTexture5;\n\t\t\t\tuniform float bloomStrength;\n\t\t\t\tuniform float bloomRadius;\n\t\t\t\tuniform float bloomFactors[NUM_MIPS];\n\t\t\t\tuniform vec3 bloomTintColors[NUM_MIPS];\n\n\t\t\t\tfloat lerpBloomFactor(const in float factor) {\n\t\t\t\t\tfloat mirrorFactor = 1.2 - factor;\n\t\t\t\t\treturn mix(factor, mirrorFactor, bloomRadius);\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\t\t\t\t\tgl_FragColor = bloomStrength * ( lerpBloomFactor(bloomFactors[0]) * vec4(bloomTintColors[0], 1.0) * texture2D(blurTexture1, vUv) +\n\t\t\t\t\t\tlerpBloomFactor(bloomFactors[1]) * vec4(bloomTintColors[1], 1.0) * texture2D(blurTexture2, vUv) +\n\t\t\t\t\t\tlerpBloomFactor(bloomFactors[2]) * vec4(bloomTintColors[2], 1.0) * texture2D(blurTexture3, vUv) +\n\t\t\t\t\t\tlerpBloomFactor(bloomFactors[3]) * vec4(bloomTintColors[3], 1.0) * texture2D(blurTexture4, vUv) +\n\t\t\t\t\t\tlerpBloomFactor(bloomFactors[4]) * vec4(bloomTintColors[4], 1.0) * texture2D(blurTexture5, vUv) );\n\t\t\t\t}`\n });\n }\n };\n let UnrealBloomPass2 = _UnrealBloomPass;\n __publicField(UnrealBloomPass2, \"BlurDirectionX\", new Vector2(1, 0));\n __publicField(UnrealBloomPass2, \"BlurDirectionY\", new Vector2(0, 1));\n return UnrealBloomPass2;\n})();\nexport {\n UnrealBloomPass\n};\n//# sourceMappingURL=UnrealBloomPass.js.map\n","import { ShaderLib, Mesh, BoxGeometry, ShaderMaterial, UniformsUtils, BackSide, Scene, PerspectiveCamera } from \"three\";\nimport { Pass } from \"./Pass.js\";\nclass CubeTexturePass extends Pass {\n constructor(camera, tCube, opacity = 1) {\n super();\n this.camera = camera;\n this.needsSwap = false;\n this.cubeShader = ShaderLib[\"cube\"];\n this.cubeMesh = new Mesh(\n new BoxGeometry(10, 10, 10),\n new ShaderMaterial({\n uniforms: UniformsUtils.clone(this.cubeShader.uniforms),\n vertexShader: this.cubeShader.vertexShader,\n fragmentShader: this.cubeShader.fragmentShader,\n depthTest: false,\n depthWrite: false,\n side: BackSide\n })\n );\n Object.defineProperty(this.cubeMesh.material, \"envMap\", {\n get: function() {\n return this.uniforms.tCube.value;\n }\n });\n this.tCube = tCube;\n this.opacity = opacity;\n this.cubeScene = new Scene();\n this.cubeCamera = new PerspectiveCamera();\n this.cubeScene.add(this.cubeMesh);\n }\n render(renderer, writeBuffer, readBuffer) {\n const oldAutoClear = renderer.autoClear;\n renderer.autoClear = false;\n this.cubeCamera.projectionMatrix.copy(this.camera.projectionMatrix);\n this.cubeCamera.quaternion.setFromRotationMatrix(this.camera.matrixWorld);\n this.cubeMesh.material.uniforms.tCube.value = this.tCube;\n this.cubeMesh.material.uniforms.tFlip.value = this.tCube.isCubeTexture && this.tCube.isRenderTargetTexture === false ? -1 : 1;\n this.cubeMesh.material.uniforms.opacity.value = this.opacity;\n this.cubeMesh.material.transparent = this.opacity < 1;\n renderer.setRenderTarget(this.renderToScreen ? null : readBuffer);\n if (this.clear)\n renderer.clear();\n renderer.render(this.cubeScene, this.cubeCamera);\n renderer.autoClear = oldAutoClear;\n }\n dispose() {\n this.cubeMesh.geometry.dispose();\n this.cubeMesh.material.dispose();\n }\n}\nexport {\n CubeTexturePass\n};\n//# sourceMappingURL=CubeTexturePass.js.map\n","import { Vector2, Matrix4 } from \"three\";\nconst SAOShader = {\n defines: {\n NUM_SAMPLES: 7,\n NUM_RINGS: 4,\n NORMAL_TEXTURE: 0,\n DIFFUSE_TEXTURE: 0,\n DEPTH_PACKING: 1,\n PERSPECTIVE_CAMERA: 1\n },\n uniforms: {\n tDepth: { value: null },\n tDiffuse: { value: null },\n tNormal: { value: null },\n size: { value: /* @__PURE__ */ new Vector2(512, 512) },\n cameraNear: { value: 1 },\n cameraFar: { value: 100 },\n cameraProjectionMatrix: { value: /* @__PURE__ */ new Matrix4() },\n cameraInverseProjectionMatrix: { value: /* @__PURE__ */ new Matrix4() },\n scale: { value: 1 },\n intensity: { value: 0.1 },\n bias: { value: 0.5 },\n minResolution: { value: 0 },\n kernelRadius: { value: 100 },\n randomSeed: { value: 0 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n #include <common>\n\n varying vec2 vUv;\n\n #if DIFFUSE_TEXTURE == 1\n uniform sampler2D tDiffuse;\n #endif\n\n uniform sampler2D tDepth;\n\n #if NORMAL_TEXTURE == 1\n uniform sampler2D tNormal;\n #endif\n\n uniform float cameraNear;\n uniform float cameraFar;\n uniform mat4 cameraProjectionMatrix;\n uniform mat4 cameraInverseProjectionMatrix;\n\n uniform float scale;\n uniform float intensity;\n uniform float bias;\n uniform float kernelRadius;\n uniform float minResolution;\n uniform vec2 size;\n uniform float randomSeed;\n\n // RGBA depth\n\n #include <packing>\n\n vec4 getDefaultColor( const in vec2 screenPosition ) {\n \t#if DIFFUSE_TEXTURE == 1\n \treturn texture2D( tDiffuse, vUv );\n \t#else\n \treturn vec4( 1.0 );\n \t#endif\n }\n\n float getDepth( const in vec2 screenPosition ) {\n \t#if DEPTH_PACKING == 1\n \treturn unpackRGBAToDepth( texture2D( tDepth, screenPosition ) );\n \t#else\n \treturn texture2D( tDepth, screenPosition ).x;\n \t#endif\n }\n\n float getViewZ( const in float depth ) {\n \t#if PERSPECTIVE_CAMERA == 1\n \treturn perspectiveDepthToViewZ( depth, cameraNear, cameraFar );\n \t#else\n \treturn orthographicDepthToViewZ( depth, cameraNear, cameraFar );\n \t#endif\n }\n\n vec3 getViewPosition( const in vec2 screenPosition, const in float depth, const in float viewZ ) {\n \tfloat clipW = cameraProjectionMatrix[2][3] * viewZ + cameraProjectionMatrix[3][3];\n \tvec4 clipPosition = vec4( ( vec3( screenPosition, depth ) - 0.5 ) * 2.0, 1.0 );\n \tclipPosition *= clipW; // unprojection.\n\n \treturn ( cameraInverseProjectionMatrix * clipPosition ).xyz;\n }\n\n vec3 getViewNormal( const in vec3 viewPosition, const in vec2 screenPosition ) {\n \t#if NORMAL_TEXTURE == 1\n \treturn unpackRGBToNormal( texture2D( tNormal, screenPosition ).xyz );\n \t#else\n \treturn normalize( cross( dFdx( viewPosition ), dFdy( viewPosition ) ) );\n \t#endif\n }\n\n float scaleDividedByCameraFar;\n float minResolutionMultipliedByCameraFar;\n\n float getOcclusion( const in vec3 centerViewPosition, const in vec3 centerViewNormal, const in vec3 sampleViewPosition ) {\n \tvec3 viewDelta = sampleViewPosition - centerViewPosition;\n \tfloat viewDistance = length( viewDelta );\n \tfloat scaledScreenDistance = scaleDividedByCameraFar * viewDistance;\n\n \treturn max(0.0, (dot(centerViewNormal, viewDelta) - minResolutionMultipliedByCameraFar) / scaledScreenDistance - bias) / (1.0 + pow2( scaledScreenDistance ) );\n }\n\n // moving costly divides into consts\n const float ANGLE_STEP = PI2 * float( NUM_RINGS ) / float( NUM_SAMPLES );\n const float INV_NUM_SAMPLES = 1.0 / float( NUM_SAMPLES );\n\n float getAmbientOcclusion( const in vec3 centerViewPosition ) {\n \t// precompute some variables require in getOcclusion.\n \tscaleDividedByCameraFar = scale / cameraFar;\n \tminResolutionMultipliedByCameraFar = minResolution * cameraFar;\n \tvec3 centerViewNormal = getViewNormal( centerViewPosition, vUv );\n\n \t// jsfiddle that shows sample pattern: https://jsfiddle.net/a16ff1p7/\n \tfloat angle = rand( vUv + randomSeed ) * PI2;\n \tvec2 radius = vec2( kernelRadius * INV_NUM_SAMPLES ) / size;\n \tvec2 radiusStep = radius;\n\n \tfloat occlusionSum = 0.0;\n \tfloat weightSum = 0.0;\n\n \tfor( int i = 0; i < NUM_SAMPLES; i ++ ) {\n \t\tvec2 sampleUv = vUv + vec2( cos( angle ), sin( angle ) ) * radius;\n \t\tradius += radiusStep;\n \t\tangle += ANGLE_STEP;\n\n \t\tfloat sampleDepth = getDepth( sampleUv );\n \t\tif( sampleDepth >= ( 1.0 - EPSILON ) ) {\n \t\t\tcontinue;\n \t\t}\n\n \t\tfloat sampleViewZ = getViewZ( sampleDepth );\n \t\tvec3 sampleViewPosition = getViewPosition( sampleUv, sampleDepth, sampleViewZ );\n \t\tocclusionSum += getOcclusion( centerViewPosition, centerViewNormal, sampleViewPosition );\n \t\tweightSum += 1.0;\n \t}\n\n \tif( weightSum == 0.0 ) discard;\n\n \treturn occlusionSum * ( intensity / weightSum );\n }\n\n void main() {\n \tfloat centerDepth = getDepth( vUv );\n \tif( centerDepth >= ( 1.0 - EPSILON ) ) {\n \t\tdiscard;\n \t}\n\n \tfloat centerViewZ = getViewZ( centerDepth );\n \tvec3 viewPosition = getViewPosition( vUv, centerDepth, centerViewZ );\n\n \tfloat ambientOcclusion = getAmbientOcclusion( viewPosition );\n\n \tgl_FragColor = getDefaultColor( vUv );\n \tgl_FragColor.xyz *= 1.0 - ambientOcclusion;\n }\n `\n )\n};\nexport {\n SAOShader\n};\n//# sourceMappingURL=SAOShader.js.map\n","import { Vector2 } from \"three\";\nconst DepthLimitedBlurShader = {\n defines: {\n KERNEL_RADIUS: 4,\n DEPTH_PACKING: 1,\n PERSPECTIVE_CAMERA: 1\n },\n uniforms: {\n tDiffuse: { value: null },\n size: { value: /* @__PURE__ */ new Vector2(512, 512) },\n sampleUvOffsets: { value: [/* @__PURE__ */ new Vector2(0, 0)] },\n sampleWeights: { value: [1] },\n tDepth: { value: null },\n cameraNear: { value: 10 },\n cameraFar: { value: 1e3 },\n depthCutoff: { value: 10 }\n },\n vertexShader: (\n /* glsl */\n `\n #include <common>\n\n uniform vec2 size;\n\n varying vec2 vUv;\n varying vec2 vInvSize;\n\n void main() {\n \tvUv = uv;\n \tvInvSize = 1.0 / size;\n\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n #include <common>\n #include <packing>\n\n uniform sampler2D tDiffuse;\n uniform sampler2D tDepth;\n\n uniform float cameraNear;\n uniform float cameraFar;\n uniform float depthCutoff;\n\n uniform vec2 sampleUvOffsets[ KERNEL_RADIUS + 1 ];\n uniform float sampleWeights[ KERNEL_RADIUS + 1 ];\n\n varying vec2 vUv;\n varying vec2 vInvSize;\n\n float getDepth( const in vec2 screenPosition ) {\n \t#if DEPTH_PACKING == 1\n \treturn unpackRGBAToDepth( texture2D( tDepth, screenPosition ) );\n \t#else\n \treturn texture2D( tDepth, screenPosition ).x;\n \t#endif\n }\n\n float getViewZ( const in float depth ) {\n \t#if PERSPECTIVE_CAMERA == 1\n \treturn perspectiveDepthToViewZ( depth, cameraNear, cameraFar );\n \t#else\n \treturn orthographicDepthToViewZ( depth, cameraNear, cameraFar );\n \t#endif\n }\n\n void main() {\n \tfloat depth = getDepth( vUv );\n \tif( depth >= ( 1.0 - EPSILON ) ) {\n \t\tdiscard;\n \t}\n\n \tfloat centerViewZ = -getViewZ( depth );\n \tbool rBreak = false, lBreak = false;\n\n \tfloat weightSum = sampleWeights[0];\n \tvec4 diffuseSum = texture2D( tDiffuse, vUv ) * weightSum;\n\n \tfor( int i = 1; i <= KERNEL_RADIUS; i ++ ) {\n\n \t\tfloat sampleWeight = sampleWeights[i];\n \t\tvec2 sampleUvOffset = sampleUvOffsets[i] * vInvSize;\n\n \t\tvec2 sampleUv = vUv + sampleUvOffset;\n \t\tfloat viewZ = -getViewZ( getDepth( sampleUv ) );\n\n \t\tif( abs( viewZ - centerViewZ ) > depthCutoff ) rBreak = true;\n\n \t\tif( ! rBreak ) {\n \t\t\tdiffuseSum += texture2D( tDiffuse, sampleUv ) * sampleWeight;\n \t\t\tweightSum += sampleWeight;\n \t\t}\n\n \t\tsampleUv = vUv - sampleUvOffset;\n \t\tviewZ = -getViewZ( getDepth( sampleUv ) );\n\n \t\tif( abs( viewZ - centerViewZ ) > depthCutoff ) lBreak = true;\n\n \t\tif( ! lBreak ) {\n \t\t\tdiffuseSum += texture2D( tDiffuse, sampleUv ) * sampleWeight;\n \t\t\tweightSum += sampleWeight;\n \t\t}\n\n \t}\n\n \tgl_FragColor = diffuseSum / weightSum;\n }\n `\n )\n};\nconst BlurShaderUtils = {\n createSampleWeights: (kernelRadius, stdDev) => {\n const gaussian = (x, stdDev2) => {\n return Math.exp(-(x * x) / (2 * (stdDev2 * stdDev2))) / (Math.sqrt(2 * Math.PI) * stdDev2);\n };\n const weights = [];\n for (let i = 0; i <= kernelRadius; i++) {\n weights.push(gaussian(i, stdDev));\n }\n return weights;\n },\n createSampleOffsets: (kernelRadius, uvIncrement) => {\n const offsets = [];\n for (let i = 0; i <= kernelRadius; i++) {\n offsets.push(uvIncrement.clone().multiplyScalar(i));\n }\n return offsets;\n },\n configure: (shader, kernelRadius, stdDev, uvIncrement) => {\n shader.defines[\"KERNEL_RADIUS\"] = kernelRadius;\n shader.uniforms[\"sampleUvOffsets\"].value = BlurShaderUtils.createSampleOffsets(kernelRadius, uvIncrement);\n shader.uniforms[\"sampleWeights\"].value = BlurShaderUtils.createSampleWeights(kernelRadius, stdDev);\n shader.needsUpdate = true;\n }\n};\nexport {\n BlurShaderUtils,\n DepthLimitedBlurShader\n};\n//# sourceMappingURL=DepthLimitedBlurShader.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Color, Vector2, WebGLRenderTarget, HalfFloatType, NearestFilter, DepthTexture, UnsignedShortType, MeshDepthMaterial, RGBADepthPacking, NoBlending, MeshNormalMaterial, ShaderMaterial, UniformsUtils, CustomBlending, DstColorFactor, ZeroFactor, AddEquation, DstAlphaFactor } from \"three\";\nimport { Pass, FullScreenQuad } from \"./Pass.js\";\nimport { SAOShader } from \"../shaders/SAOShader.js\";\nimport { DepthLimitedBlurShader, BlurShaderUtils } from \"../shaders/DepthLimitedBlurShader.js\";\nimport { CopyShader } from \"../shaders/CopyShader.js\";\nimport { UnpackDepthRGBAShader } from \"../shaders/UnpackDepthRGBAShader.js\";\nconst SAOPass = /* @__PURE__ */ (() => {\n class SAOPass2 extends Pass {\n constructor(scene, camera, useDepthTexture = false, useNormals = false, resolution = new Vector2(256, 256)) {\n super();\n this.scene = scene;\n this.camera = camera;\n this.clear = true;\n this.needsSwap = false;\n this.supportsDepthTextureExtension = useDepthTexture;\n this.supportsNormalTexture = useNormals;\n this.originalClearColor = new Color();\n this._oldClearColor = new Color();\n this.oldClearAlpha = 1;\n this.params = {\n output: 0,\n saoBias: 0.5,\n saoIntensity: 0.18,\n saoScale: 1,\n saoKernelRadius: 100,\n saoMinResolution: 0,\n saoBlur: true,\n saoBlurRadius: 8,\n saoBlurStdDev: 4,\n saoBlurDepthCutoff: 0.01\n };\n this.resolution = new Vector2(resolution.x, resolution.y);\n this.saoRenderTarget = new WebGLRenderTarget(this.resolution.x, this.resolution.y, { type: HalfFloatType });\n this.blurIntermediateRenderTarget = this.saoRenderTarget.clone();\n this.beautyRenderTarget = this.saoRenderTarget.clone();\n this.normalRenderTarget = new WebGLRenderTarget(this.resolution.x, this.resolution.y, {\n minFilter: NearestFilter,\n magFilter: NearestFilter,\n type: HalfFloatType\n });\n this.depthRenderTarget = this.normalRenderTarget.clone();\n let depthTexture;\n if (this.supportsDepthTextureExtension) {\n depthTexture = new DepthTexture();\n depthTexture.type = UnsignedShortType;\n this.beautyRenderTarget.depthTexture = depthTexture;\n this.beautyRenderTarget.depthBuffer = true;\n }\n this.depthMaterial = new MeshDepthMaterial();\n this.depthMaterial.depthPacking = RGBADepthPacking;\n this.depthMaterial.blending = NoBlending;\n this.normalMaterial = new MeshNormalMaterial();\n this.normalMaterial.blending = NoBlending;\n this.saoMaterial = new ShaderMaterial({\n defines: Object.assign({}, SAOShader.defines),\n fragmentShader: SAOShader.fragmentShader,\n vertexShader: SAOShader.vertexShader,\n uniforms: UniformsUtils.clone(SAOShader.uniforms)\n });\n this.saoMaterial.extensions.derivatives = true;\n this.saoMaterial.defines[\"DEPTH_PACKING\"] = this.supportsDepthTextureExtension ? 0 : 1;\n this.saoMaterial.defines[\"NORMAL_TEXTURE\"] = this.supportsNormalTexture ? 1 : 0;\n this.saoMaterial.defines[\"PERSPECTIVE_CAMERA\"] = this.camera.isPerspectiveCamera ? 1 : 0;\n this.saoMaterial.uniforms[\"tDepth\"].value = this.supportsDepthTextureExtension ? depthTexture : this.depthRenderTarget.texture;\n this.saoMaterial.uniforms[\"tNormal\"].value = this.normalRenderTarget.texture;\n this.saoMaterial.uniforms[\"size\"].value.set(this.resolution.x, this.resolution.y);\n this.saoMaterial.uniforms[\"cameraInverseProjectionMatrix\"].value.copy(this.camera.projectionMatrixInverse);\n this.saoMaterial.uniforms[\"cameraProjectionMatrix\"].value = this.camera.projectionMatrix;\n this.saoMaterial.blending = NoBlending;\n this.vBlurMaterial = new ShaderMaterial({\n uniforms: UniformsUtils.clone(DepthLimitedBlurShader.uniforms),\n defines: Object.assign({}, DepthLimitedBlurShader.defines),\n vertexShader: DepthLimitedBlurShader.vertexShader,\n fragmentShader: DepthLimitedBlurShader.fragmentShader\n });\n this.vBlurMaterial.defines[\"DEPTH_PACKING\"] = this.supportsDepthTextureExtension ? 0 : 1;\n this.vBlurMaterial.defines[\"PERSPECTIVE_CAMERA\"] = this.camera.isPerspectiveCamera ? 1 : 0;\n this.vBlurMaterial.uniforms[\"tDiffuse\"].value = this.saoRenderTarget.texture;\n this.vBlurMaterial.uniforms[\"tDepth\"].value = this.supportsDepthTextureExtension ? depthTexture : this.depthRenderTarget.texture;\n this.vBlurMaterial.uniforms[\"size\"].value.set(this.resolution.x, this.resolution.y);\n this.vBlurMaterial.blending = NoBlending;\n this.hBlurMaterial = new ShaderMaterial({\n uniforms: UniformsUtils.clone(DepthLimitedBlurShader.uniforms),\n defines: Object.assign({}, DepthLimitedBlurShader.defines),\n vertexShader: DepthLimitedBlurShader.vertexShader,\n fragmentShader: DepthLimitedBlurShader.fragmentShader\n });\n this.hBlurMaterial.defines[\"DEPTH_PACKING\"] = this.supportsDepthTextureExtension ? 0 : 1;\n this.hBlurMaterial.defines[\"PERSPECTIVE_CAMERA\"] = this.camera.isPerspectiveCamera ? 1 : 0;\n this.hBlurMaterial.uniforms[\"tDiffuse\"].value = this.blurIntermediateRenderTarget.texture;\n this.hBlurMaterial.uniforms[\"tDepth\"].value = this.supportsDepthTextureExtension ? depthTexture : this.depthRenderTarget.texture;\n this.hBlurMaterial.uniforms[\"size\"].value.set(this.resolution.x, this.resolution.y);\n this.hBlurMaterial.blending = NoBlending;\n this.materialCopy = new ShaderMaterial({\n uniforms: UniformsUtils.clone(CopyShader.uniforms),\n vertexShader: CopyShader.vertexShader,\n fragmentShader: CopyShader.fragmentShader,\n blending: NoBlending\n });\n this.materialCopy.transparent = true;\n this.materialCopy.depthTest = false;\n this.materialCopy.depthWrite = false;\n this.materialCopy.blending = CustomBlending;\n this.materialCopy.blendSrc = DstColorFactor;\n this.materialCopy.blendDst = ZeroFactor;\n this.materialCopy.blendEquation = AddEquation;\n this.materialCopy.blendSrcAlpha = DstAlphaFactor;\n this.materialCopy.blendDstAlpha = ZeroFactor;\n this.materialCopy.blendEquationAlpha = AddEquation;\n this.depthCopy = new ShaderMaterial({\n uniforms: UniformsUtils.clone(UnpackDepthRGBAShader.uniforms),\n vertexShader: UnpackDepthRGBAShader.vertexShader,\n fragmentShader: UnpackDepthRGBAShader.fragmentShader,\n blending: NoBlending\n });\n this.fsQuad = new FullScreenQuad(null);\n }\n render(renderer, writeBuffer, readBuffer) {\n if (this.renderToScreen) {\n this.materialCopy.blending = NoBlending;\n this.materialCopy.uniforms[\"tDiffuse\"].value = readBuffer.texture;\n this.materialCopy.needsUpdate = true;\n this.renderPass(renderer, this.materialCopy, null);\n }\n if (this.params.output === 1) {\n return;\n }\n renderer.getClearColor(this._oldClearColor);\n this.oldClearAlpha = renderer.getClearAlpha();\n const oldAutoClear = renderer.autoClear;\n renderer.autoClear = false;\n renderer.setRenderTarget(this.depthRenderTarget);\n renderer.clear();\n this.saoMaterial.uniforms[\"bias\"].value = this.params.saoBias;\n this.saoMaterial.uniforms[\"intensity\"].value = this.params.saoIntensity;\n this.saoMaterial.uniforms[\"scale\"].value = this.params.saoScale;\n this.saoMaterial.uniforms[\"kernelRadius\"].value = this.params.saoKernelRadius;\n this.saoMaterial.uniforms[\"minResolution\"].value = this.params.saoMinResolution;\n this.saoMaterial.uniforms[\"cameraNear\"].value = this.camera.near;\n this.saoMaterial.uniforms[\"cameraFar\"].value = this.camera.far;\n const depthCutoff = this.params.saoBlurDepthCutoff * (this.camera.far - this.camera.near);\n this.vBlurMaterial.uniforms[\"depthCutoff\"].value = depthCutoff;\n this.hBlurMaterial.uniforms[\"depthCutoff\"].value = depthCutoff;\n this.vBlurMaterial.uniforms[\"cameraNear\"].value = this.camera.near;\n this.vBlurMaterial.uniforms[\"cameraFar\"].value = this.camera.far;\n this.hBlurMaterial.uniforms[\"cameraNear\"].value = this.camera.near;\n this.hBlurMaterial.uniforms[\"cameraFar\"].value = this.camera.far;\n this.params.saoBlurRadius = Math.floor(this.params.saoBlurRadius);\n if (this.prevStdDev !== this.params.saoBlurStdDev || this.prevNumSamples !== this.params.saoBlurRadius) {\n BlurShaderUtils.configure(\n this.vBlurMaterial,\n this.params.saoBlurRadius,\n this.params.saoBlurStdDev,\n new Vector2(0, 1)\n );\n BlurShaderUtils.configure(\n this.hBlurMaterial,\n this.params.saoBlurRadius,\n this.params.saoBlurStdDev,\n new Vector2(1, 0)\n );\n this.prevStdDev = this.params.saoBlurStdDev;\n this.prevNumSamples = this.params.saoBlurRadius;\n }\n renderer.setClearColor(0);\n renderer.setRenderTarget(this.beautyRenderTarget);\n renderer.clear();\n renderer.render(this.scene, this.camera);\n if (!this.supportsDepthTextureExtension) {\n this.renderOverride(renderer, this.depthMaterial, this.depthRenderTarget, 0, 1);\n }\n if (this.supportsNormalTexture) {\n this.renderOverride(renderer, this.normalMaterial, this.normalRenderTarget, 7829503, 1);\n }\n this.renderPass(renderer, this.saoMaterial, this.saoRenderTarget, 16777215, 1);\n if (this.params.saoBlur) {\n this.renderPass(renderer, this.vBlurMaterial, this.blurIntermediateRenderTarget, 16777215, 1);\n this.renderPass(renderer, this.hBlurMaterial, this.saoRenderTarget, 16777215, 1);\n }\n let outputMaterial = this.materialCopy;\n if (this.params.output === 3) {\n if (this.supportsDepthTextureExtension) {\n this.materialCopy.uniforms[\"tDiffuse\"].value = this.beautyRenderTarget.depthTexture;\n this.materialCopy.needsUpdate = true;\n } else {\n this.depthCopy.uniforms[\"tDiffuse\"].value = this.depthRenderTarget.texture;\n this.depthCopy.needsUpdate = true;\n outputMaterial = this.depthCopy;\n }\n } else if (this.params.output === 4) {\n this.materialCopy.uniforms[\"tDiffuse\"].value = this.normalRenderTarget.texture;\n this.materialCopy.needsUpdate = true;\n } else {\n this.materialCopy.uniforms[\"tDiffuse\"].value = this.saoRenderTarget.texture;\n this.materialCopy.needsUpdate = true;\n }\n if (this.params.output === 0) {\n outputMaterial.blending = CustomBlending;\n } else {\n outputMaterial.blending = NoBlending;\n }\n this.renderPass(renderer, outputMaterial, this.renderToScreen ? null : readBuffer);\n renderer.setClearColor(this._oldClearColor, this.oldClearAlpha);\n renderer.autoClear = oldAutoClear;\n }\n renderPass(renderer, passMaterial, renderTarget, clearColor, clearAlpha) {\n renderer.getClearColor(this.originalClearColor);\n const originalClearAlpha = renderer.getClearAlpha();\n const originalAutoClear = renderer.autoClear;\n renderer.setRenderTarget(renderTarget);\n renderer.autoClear = false;\n if (clearColor !== void 0 && clearColor !== null) {\n renderer.setClearColor(clearColor);\n renderer.setClearAlpha(clearAlpha || 0);\n renderer.clear();\n }\n this.fsQuad.material = passMaterial;\n this.fsQuad.render(renderer);\n renderer.autoClear = originalAutoClear;\n renderer.setClearColor(this.originalClearColor);\n renderer.setClearAlpha(originalClearAlpha);\n }\n renderOverride(renderer, overrideMaterial, renderTarget, clearColor, clearAlpha) {\n renderer.getClearColor(this.originalClearColor);\n const originalClearAlpha = renderer.getClearAlpha();\n const originalAutoClear = renderer.autoClear;\n renderer.setRenderTarget(renderTarget);\n renderer.autoClear = false;\n clearColor = overrideMaterial.clearColor || clearColor;\n clearAlpha = overrideMaterial.clearAlpha || clearAlpha;\n if (clearColor !== void 0 && clearColor !== null) {\n renderer.setClearColor(clearColor);\n renderer.setClearAlpha(clearAlpha || 0);\n renderer.clear();\n }\n this.scene.overrideMaterial = overrideMaterial;\n renderer.render(this.scene, this.camera);\n this.scene.overrideMaterial = null;\n renderer.autoClear = originalAutoClear;\n renderer.setClearColor(this.originalClearColor);\n renderer.setClearAlpha(originalClearAlpha);\n }\n setSize(width, height) {\n this.beautyRenderTarget.setSize(width, height);\n this.saoRenderTarget.setSize(width, height);\n this.blurIntermediateRenderTarget.setSize(width, height);\n this.normalRenderTarget.setSize(width, height);\n this.depthRenderTarget.setSize(width, height);\n this.saoMaterial.uniforms[\"size\"].value.set(width, height);\n this.saoMaterial.uniforms[\"cameraInverseProjectionMatrix\"].value.copy(this.camera.projectionMatrixInverse);\n this.saoMaterial.uniforms[\"cameraProjectionMatrix\"].value = this.camera.projectionMatrix;\n this.saoMaterial.needsUpdate = true;\n this.vBlurMaterial.uniforms[\"size\"].value.set(width, height);\n this.vBlurMaterial.needsUpdate = true;\n this.hBlurMaterial.uniforms[\"size\"].value.set(width, height);\n this.hBlurMaterial.needsUpdate = true;\n }\n dispose() {\n this.saoRenderTarget.dispose();\n this.blurIntermediateRenderTarget.dispose();\n this.beautyRenderTarget.dispose();\n this.normalRenderTarget.dispose();\n this.depthRenderTarget.dispose();\n this.depthMaterial.dispose();\n this.normalMaterial.dispose();\n this.saoMaterial.dispose();\n this.vBlurMaterial.dispose();\n this.hBlurMaterial.dispose();\n this.materialCopy.dispose();\n this.depthCopy.dispose();\n this.fsQuad.dispose();\n }\n }\n __publicField(SAOPass2, \"OUTPUT\", {\n Beauty: 1,\n Default: 0,\n SAO: 2,\n Depth: 3,\n Normal: 4\n });\n return SAOPass2;\n})();\nexport {\n SAOPass\n};\n//# sourceMappingURL=SAOPass.js.map\n","const AfterimageShader = {\n uniforms: {\n damp: { value: 0.96 },\n tOld: { value: null },\n tNew: { value: null }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform float damp;\n\n uniform sampler2D tOld;\n uniform sampler2D tNew;\n\n varying vec2 vUv;\n\n vec4 when_gt( vec4 x, float y ) {\n\n \treturn max( sign( x - y ), 0.0 );\n\n }\n\n void main() {\n\n \tvec4 texelOld = texture2D( tOld, vUv );\n \tvec4 texelNew = texture2D( tNew, vUv );\n\n \ttexelOld *= damp * when_gt( texelOld, 0.1 );\n\n \tgl_FragColor = max(texelNew, texelOld);\n\n }\n `\n )\n};\nexport {\n AfterimageShader\n};\n//# sourceMappingURL=AfterimageShader.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { UniformsUtils, WebGLRenderTarget, LinearFilter, NearestFilter, RGBAFormat, ShaderMaterial, MeshBasicMaterial } from \"three\";\nimport { Pass, FullScreenQuad } from \"./Pass.js\";\nimport { AfterimageShader } from \"../shaders/AfterimageShader.js\";\nclass AfterimagePass extends Pass {\n constructor(damp = 0.96, shader = AfterimageShader) {\n super();\n __publicField(this, \"shader\");\n __publicField(this, \"uniforms\");\n __publicField(this, \"textureComp\");\n __publicField(this, \"textureOld\");\n __publicField(this, \"shaderMaterial\");\n __publicField(this, \"compFsQuad\");\n __publicField(this, \"copyFsQuad\");\n this.shader = shader;\n this.uniforms = UniformsUtils.clone(shader.uniforms);\n this.uniforms[\"damp\"].value = damp;\n this.textureComp = new WebGLRenderTarget(window.innerWidth, window.innerHeight, {\n minFilter: LinearFilter,\n magFilter: NearestFilter,\n format: RGBAFormat\n });\n this.textureOld = new WebGLRenderTarget(window.innerWidth, window.innerHeight, {\n minFilter: LinearFilter,\n magFilter: NearestFilter,\n format: RGBAFormat\n });\n this.shaderMaterial = new ShaderMaterial({\n uniforms: this.uniforms,\n vertexShader: this.shader.vertexShader,\n fragmentShader: this.shader.fragmentShader\n });\n this.compFsQuad = new FullScreenQuad(this.shaderMaterial);\n let material = new MeshBasicMaterial();\n this.copyFsQuad = new FullScreenQuad(material);\n }\n render(renderer, writeBuffer, readBuffer) {\n this.uniforms[\"tOld\"].value = this.textureOld.texture;\n this.uniforms[\"tNew\"].value = readBuffer.texture;\n renderer.setRenderTarget(this.textureComp);\n this.compFsQuad.render(renderer);\n this.copyFsQuad.material.map = this.textureComp.texture;\n if (this.renderToScreen) {\n renderer.setRenderTarget(null);\n this.copyFsQuad.render(renderer);\n } else {\n renderer.setRenderTarget(writeBuffer);\n if (this.clear)\n renderer.clear();\n this.copyFsQuad.render(renderer);\n }\n let temp = this.textureOld;\n this.textureOld = this.textureComp;\n this.textureComp = temp;\n }\n setSize(width, height) {\n this.textureComp.setSize(width, height);\n this.textureOld.setSize(width, height);\n }\n}\nexport {\n AfterimagePass\n};\n//# sourceMappingURL=AfterimagePass.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Pass } from \"./Pass.js\";\nclass MaskPass extends Pass {\n constructor(scene, camera) {\n super();\n __publicField(this, \"scene\");\n __publicField(this, \"camera\");\n __publicField(this, \"inverse\");\n this.scene = scene;\n this.camera = camera;\n this.clear = true;\n this.needsSwap = false;\n this.inverse = false;\n }\n render(renderer, writeBuffer, readBuffer) {\n const context = renderer.getContext();\n const state = renderer.state;\n state.buffers.color.setMask(false);\n state.buffers.depth.setMask(false);\n state.buffers.color.setLocked(true);\n state.buffers.depth.setLocked(true);\n let writeValue, clearValue;\n if (this.inverse) {\n writeValue = 0;\n clearValue = 1;\n } else {\n writeValue = 1;\n clearValue = 0;\n }\n state.buffers.stencil.setTest(true);\n state.buffers.stencil.setOp(context.REPLACE, context.REPLACE, context.REPLACE);\n state.buffers.stencil.setFunc(context.ALWAYS, writeValue, 4294967295);\n state.buffers.stencil.setClear(clearValue);\n state.buffers.stencil.setLocked(true);\n renderer.setRenderTarget(readBuffer);\n if (this.clear)\n renderer.clear();\n renderer.render(this.scene, this.camera);\n renderer.setRenderTarget(writeBuffer);\n if (this.clear)\n renderer.clear();\n renderer.render(this.scene, this.camera);\n state.buffers.color.setLocked(false);\n state.buffers.depth.setLocked(false);\n state.buffers.stencil.setLocked(false);\n state.buffers.stencil.setFunc(context.EQUAL, 1, 4294967295);\n state.buffers.stencil.setOp(context.KEEP, context.KEEP, context.KEEP);\n state.buffers.stencil.setLocked(true);\n }\n}\nclass ClearMaskPass extends Pass {\n constructor() {\n super();\n this.needsSwap = false;\n }\n render(renderer) {\n renderer.state.buffers.stencil.setLocked(false);\n renderer.state.buffers.stencil.setTest(false);\n }\n}\nexport {\n ClearMaskPass,\n MaskPass\n};\n//# sourceMappingURL=MaskPass.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Vector2, WebGLRenderTarget, NoBlending, Clock, LinearFilter, RGBAFormat } from \"three\";\nimport { CopyShader } from \"../shaders/CopyShader.js\";\nimport { ShaderPass } from \"./ShaderPass.js\";\nimport { MaskPass, ClearMaskPass } from \"./MaskPass.js\";\nclass EffectComposer {\n constructor(renderer, renderTarget) {\n __publicField(this, \"renderer\");\n __publicField(this, \"_pixelRatio\");\n __publicField(this, \"_width\");\n __publicField(this, \"_height\");\n __publicField(this, \"renderTarget1\");\n __publicField(this, \"renderTarget2\");\n __publicField(this, \"writeBuffer\");\n __publicField(this, \"readBuffer\");\n __publicField(this, \"renderToScreen\");\n __publicField(this, \"passes\", []);\n __publicField(this, \"copyPass\");\n __publicField(this, \"clock\");\n this.renderer = renderer;\n if (renderTarget === void 0) {\n const parameters = {\n minFilter: LinearFilter,\n magFilter: LinearFilter,\n format: RGBAFormat\n };\n const size = renderer.getSize(new Vector2());\n this._pixelRatio = renderer.getPixelRatio();\n this._width = size.width;\n this._height = size.height;\n renderTarget = new WebGLRenderTarget(\n this._width * this._pixelRatio,\n this._height * this._pixelRatio,\n parameters\n );\n renderTarget.texture.name = \"EffectComposer.rt1\";\n } else {\n this._pixelRatio = 1;\n this._width = renderTarget.width;\n this._height = renderTarget.height;\n }\n this.renderTarget1 = renderTarget;\n this.renderTarget2 = renderTarget.clone();\n this.renderTarget2.texture.name = \"EffectComposer.rt2\";\n this.writeBuffer = this.renderTarget1;\n this.readBuffer = this.renderTarget2;\n this.renderToScreen = true;\n if (CopyShader === void 0) {\n console.error(\"THREE.EffectComposer relies on CopyShader\");\n }\n if (ShaderPass === void 0) {\n console.error(\"THREE.EffectComposer relies on ShaderPass\");\n }\n this.copyPass = new ShaderPass(CopyShader);\n this.copyPass.material.blending = NoBlending;\n this.clock = new Clock();\n }\n swapBuffers() {\n const tmp = this.readBuffer;\n this.readBuffer = this.writeBuffer;\n this.writeBuffer = tmp;\n }\n addPass(pass) {\n this.passes.push(pass);\n pass.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio);\n }\n insertPass(pass, index) {\n this.passes.splice(index, 0, pass);\n pass.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio);\n }\n removePass(pass) {\n const index = this.passes.indexOf(pass);\n if (index !== -1) {\n this.passes.splice(index, 1);\n }\n }\n isLastEnabledPass(passIndex) {\n for (let i = passIndex + 1; i < this.passes.length; i++) {\n if (this.passes[i].enabled) {\n return false;\n }\n }\n return true;\n }\n render(deltaTime) {\n if (deltaTime === void 0) {\n deltaTime = this.clock.getDelta();\n }\n const currentRenderTarget = this.renderer.getRenderTarget();\n let maskActive = false;\n const il = this.passes.length;\n for (let i = 0; i < il; i++) {\n const pass = this.passes[i];\n if (pass.enabled === false)\n continue;\n pass.renderToScreen = this.renderToScreen && this.isLastEnabledPass(i);\n pass.render(this.renderer, this.writeBuffer, this.readBuffer, deltaTime, maskActive);\n if (pass.needsSwap) {\n if (maskActive) {\n const context = this.renderer.getContext();\n const stencil = this.renderer.state.buffers.stencil;\n stencil.setFunc(context.NOTEQUAL, 1, 4294967295);\n this.copyPass.render(this.renderer, this.writeBuffer, this.readBuffer, deltaTime);\n stencil.setFunc(context.EQUAL, 1, 4294967295);\n }\n this.swapBuffers();\n }\n if (MaskPass !== void 0) {\n if (pass instanceof MaskPass) {\n maskActive = true;\n } else if (pass instanceof ClearMaskPass) {\n maskActive = false;\n }\n }\n }\n this.renderer.setRenderTarget(currentRenderTarget);\n }\n reset(renderTarget) {\n if (renderTarget === void 0) {\n const size = this.renderer.getSize(new Vector2());\n this._pixelRatio = this.renderer.getPixelRatio();\n this._width = size.width;\n this._height = size.height;\n renderTarget = this.renderTarget1.clone();\n renderTarget.setSize(this._width * this._pixelRatio, this._height * this._pixelRatio);\n }\n this.renderTarget1.dispose();\n this.renderTarget2.dispose();\n this.renderTarget1 = renderTarget;\n this.renderTarget2 = renderTarget.clone();\n this.writeBuffer = this.renderTarget1;\n this.readBuffer = this.renderTarget2;\n }\n setSize(width, height) {\n this._width = width;\n this._height = height;\n const effectiveWidth = this._width * this._pixelRatio;\n const effectiveHeight = this._height * this._pixelRatio;\n this.renderTarget1.setSize(effectiveWidth, effectiveHeight);\n this.renderTarget2.setSize(effectiveWidth, effectiveHeight);\n for (let i = 0; i < this.passes.length; i++) {\n this.passes[i].setSize(effectiveWidth, effectiveHeight);\n }\n }\n setPixelRatio(pixelRatio) {\n this._pixelRatio = pixelRatio;\n this.setSize(this._width, this._height);\n }\n dispose() {\n this.renderTarget1.dispose();\n this.renderTarget2.dispose();\n this.copyPass.dispose();\n }\n}\nexport {\n EffectComposer\n};\n//# sourceMappingURL=EffectComposer.js.map\n","import { Vector2 } from \"three\";\nconst DotScreenShader = {\n uniforms: {\n tDiffuse: { value: null },\n tSize: { value: /* @__PURE__ */ new Vector2(256, 256) },\n center: { value: /* @__PURE__ */ new Vector2(0.5, 0.5) },\n angle: { value: 1.57 },\n scale: { value: 1 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform vec2 center;\n uniform float angle;\n uniform float scale;\n uniform vec2 tSize;\n\n uniform sampler2D tDiffuse;\n\n varying vec2 vUv;\n\n float pattern() {\n\n \tfloat s = sin( angle ), c = cos( angle );\n\n \tvec2 tex = vUv * tSize - center;\n \tvec2 point = vec2( c * tex.x - s * tex.y, s * tex.x + c * tex.y ) * scale;\n\n \treturn ( sin( point.x ) * sin( point.y ) ) * 4.0;\n\n }\n\n void main() {\n\n \tvec4 color = texture2D( tDiffuse, vUv );\n\n \tfloat average = ( color.r + color.g + color.b ) / 3.0;\n\n \tgl_FragColor = vec4( vec3( average * 10.0 - 5.0 + pattern() ), color.a );\n\n }\n `\n )\n};\nexport {\n DotScreenShader\n};\n//# sourceMappingURL=DotScreenShader.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Pass, FullScreenQuad } from \"./Pass.js\";\nimport { UniformsUtils, ShaderMaterial } from \"three\";\nimport { DotScreenShader } from \"../shaders/DotScreenShader.js\";\nclass DotScreenPass extends Pass {\n constructor(center, angle, scale) {\n super();\n __publicField(this, \"material\");\n __publicField(this, \"fsQuad\");\n __publicField(this, \"uniforms\");\n if (DotScreenShader === void 0)\n console.error(\"THREE.DotScreenPass relies on THREE.DotScreenShader\");\n const shader = DotScreenShader;\n this.uniforms = UniformsUtils.clone(shader.uniforms);\n if (center !== void 0)\n this.uniforms[\"center\"].value.copy(center);\n if (angle !== void 0)\n this.uniforms[\"angle\"].value = angle;\n if (scale !== void 0)\n this.uniforms[\"scale\"].value = scale;\n this.material = new ShaderMaterial({\n uniforms: this.uniforms,\n vertexShader: shader.vertexShader,\n fragmentShader: shader.fragmentShader\n });\n this.fsQuad = new FullScreenQuad(this.material);\n }\n render(renderer, writeBuffer, readBuffer) {\n this.uniforms[\"tDiffuse\"].value = readBuffer.texture;\n this.uniforms[\"tSize\"].value.set(readBuffer.width, readBuffer.height);\n if (this.renderToScreen) {\n renderer.setRenderTarget(null);\n this.fsQuad.render(renderer);\n } else {\n renderer.setRenderTarget(writeBuffer);\n if (this.clear)\n renderer.clear();\n this.fsQuad.render(renderer);\n }\n }\n}\nexport {\n DotScreenPass\n};\n//# sourceMappingURL=DotScreenPass.js.map\n","import { Vector2, Matrix4 } from \"three\";\nconst SSRShader = {\n defines: {\n MAX_STEP: 0,\n isPerspectiveCamera: true,\n isDistanceAttenuation: true,\n isFresnel: true,\n isInfiniteThick: false,\n isSelective: false\n },\n uniforms: {\n tDiffuse: { value: null },\n tNormal: { value: null },\n tMetalness: { value: null },\n tDepth: { value: null },\n cameraNear: { value: null },\n cameraFar: { value: null },\n resolution: { value: /* @__PURE__ */ new Vector2() },\n cameraProjectionMatrix: { value: /* @__PURE__ */ new Matrix4() },\n cameraInverseProjectionMatrix: { value: /* @__PURE__ */ new Matrix4() },\n opacity: { value: 0.5 },\n maxDistance: { value: 180 },\n cameraRange: { value: 0 },\n surfDist: { value: 7e-3 },\n thickTolerance: { value: 0.03 }\n },\n vertexShader: (\n /* glsl */\n `\n\n varying vec2 vUv;\n\n void main() {\n\n\t\t\tvUv = uv;\n\n\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n\t\t// precision highp float;\n\t\tprecision highp sampler2D;\n\t\tvarying vec2 vUv;\n\t\tuniform sampler2D tDepth;\n\t\tuniform sampler2D tNormal;\n\t\tuniform sampler2D tMetalness;\n\t\tuniform sampler2D tDiffuse;\n\t\tuniform float cameraRange;\n\t\tuniform vec2 resolution;\n\t\tuniform float opacity;\n\t\tuniform float cameraNear;\n\t\tuniform float cameraFar;\n\t\tuniform float maxDistance;\n\t\tuniform float surfDist;\n\t\tuniform mat4 cameraProjectionMatrix;\n\t\tuniform mat4 cameraInverseProjectionMatrix;\n\t\tuniform float thickTolerance;\n\t\t#include <packing>\n\t\tfloat pointToLineDistance(vec3 x0, vec3 x1, vec3 x2) {\n\t\t\t//x0: point, x1: linePointA, x2: linePointB\n\t\t\t//https://mathworld.wolfram.com/Point-LineDistance3-Dimensional.html\n\t\t\treturn length(cross(x0-x1,x0-x2))/length(x2-x1);\n\t\t}\n\t\tfloat pointPlaneDistance(vec3 point,vec3 planePoint,vec3 planeNormal){\n\t\t\t// https://mathworld.wolfram.com/Point-PlaneDistance.html\n\t\t\t//// https://en.wikipedia.org/wiki/Plane_(geometry)\n\t\t\t//// http://paulbourke.net/geometry/pointlineplane/\n\t\t\tfloat a=planeNormal.x,b=planeNormal.y,c=planeNormal.z;\n\t\t\tfloat x0=point.x,y0=point.y,z0=point.z;\n\t\t\tfloat x=planePoint.x,y=planePoint.y,z=planePoint.z;\n\t\t\tfloat d=-(a*x+b*y+c*z);\n\t\t\tfloat distance=(a*x0+b*y0+c*z0+d)/sqrt(a*a+b*b+c*c);\n\t\t\treturn distance;\n\t\t}\n\t\tfloat getDepth( const in vec2 uv ) {\n\t\t\treturn texture2D( tDepth, uv ).x;\n\t\t}\n\t\tfloat getViewZ( const in float depth ) {\n\t\t\t#ifdef isPerspectiveCamera\n\t\t\t\treturn perspectiveDepthToViewZ( depth, cameraNear, cameraFar );\n\t\t\t#else\n\t\t\t\treturn orthographicDepthToViewZ( depth, cameraNear, cameraFar );\n\t\t\t#endif\n\t\t}\n\t\tvec3 getViewPosition( const in vec2 uv, const in float depth/*clip space*/, const in float clipW ) {\n\t\t\tvec4 clipPosition = vec4( ( vec3( uv, depth ) - 0.5 ) * 2.0, 1.0 );//ndc\n\t\t\tclipPosition *= clipW; //clip\n\t\t\treturn ( cameraInverseProjectionMatrix * clipPosition ).xyz;//view\n\t\t}\n\t\tvec3 getViewNormal( const in vec2 uv ) {\n\t\t\treturn unpackRGBToNormal( texture2D( tNormal, uv ).xyz );\n\t\t}\n\t\tvec2 viewPositionToXY(vec3 viewPosition){\n\t\t\tvec2 xy;\n\t\t\tvec4 clip=cameraProjectionMatrix*vec4(viewPosition,1);\n\t\t\txy=clip.xy;//clip\n\t\t\tfloat clipW=clip.w;\n\t\t\txy/=clipW;//NDC\n\t\t\txy=(xy+1.)/2.;//uv\n\t\t\txy*=resolution;//screen\n\t\t\treturn xy;\n\t\t}\n\t\tvoid main(){\n\t\t\t#ifdef isSelective\n\t\t\t\tfloat metalness=texture2D(tMetalness,vUv).r;\n\t\t\t\tif(metalness==0.) return;\n\t\t\t#endif\n\n\t\t\tfloat depth = getDepth( vUv );\n\t\t\tfloat viewZ = getViewZ( depth );\n\t\t\tif(-viewZ>=cameraFar) return;\n\n\t\t\tfloat clipW = cameraProjectionMatrix[2][3] * viewZ+cameraProjectionMatrix[3][3];\n\t\t\tvec3 viewPosition=getViewPosition( vUv, depth, clipW );\n\n\t\t\tvec2 d0=gl_FragCoord.xy;\n\t\t\tvec2 d1;\n\n\t\t\tvec3 viewNormal=getViewNormal( vUv );\n\n\t\t\t#ifdef isPerspectiveCamera\n\t\t\t\tvec3 viewIncidenceDir=normalize(viewPosition);\n\t\t\t\tvec3 viewReflectDir=reflect(viewIncidenceDir,viewNormal);\n\t\t\t#else\n\t\t\t\tvec3 viewIncidenceDir=vec3(0,0,-1);\n\t\t\t\tvec3 viewReflectDir=reflect(viewIncidenceDir,viewNormal);\n\t\t\t#endif\n\n\t\t\tfloat maxReflectRayLen=maxDistance/dot(-viewIncidenceDir,viewNormal);\n\t\t\t// dot(a,b)==length(a)*length(b)*cos(theta) // https://www.mathsisfun.com/algebra/vectors-dot-product.html\n\t\t\t// if(a.isNormalized&&b.isNormalized) dot(a,b)==cos(theta)\n\t\t\t// maxDistance/maxReflectRayLen=cos(theta)\n\t\t\t// maxDistance/maxReflectRayLen==dot(a,b)\n\t\t\t// maxReflectRayLen==maxDistance/dot(a,b)\n\n\t\t\tvec3 d1viewPosition=viewPosition+viewReflectDir*maxReflectRayLen;\n\t\t\t#ifdef isPerspectiveCamera\n\t\t\t\tif(d1viewPosition.z>-cameraNear){\n\t\t\t\t\t//https://tutorial.math.lamar.edu/Classes/CalcIII/EqnsOfLines.aspx\n\t\t\t\t\tfloat t=(-cameraNear-viewPosition.z)/viewReflectDir.z;\n\t\t\t\t\td1viewPosition=viewPosition+viewReflectDir*t;\n\t\t\t\t}\n\t\t\t#endif\n\t\t\td1=viewPositionToXY(d1viewPosition);\n\n\t\t\tfloat totalLen=length(d1-d0);\n\t\t\tfloat xLen=d1.x-d0.x;\n\t\t\tfloat yLen=d1.y-d0.y;\n\t\t\tfloat totalStep=max(abs(xLen),abs(yLen));\n\t\t\tfloat xSpan=xLen/totalStep;\n\t\t\tfloat ySpan=yLen/totalStep;\n\t\t\tfor(float i=0.;i<MAX_STEP;i++){\n\t\t\t\tif(i>=totalStep) break;\n\t\t\t\tvec2 xy=vec2(d0.x+i*xSpan,d0.y+i*ySpan);\n\t\t\t\tif(xy.x<0.||xy.x>resolution.x||xy.y<0.||xy.y>resolution.y) break;\n\t\t\t\tfloat s=length(xy-d0)/totalLen;\n\t\t\t\tvec2 uv=xy/resolution;\n\n\t\t\t\tfloat d = getDepth(uv);\n\t\t\t\tfloat vZ = getViewZ( d );\n\t\t\t\tif(-vZ>=cameraFar) continue;\n\t\t\t\tfloat cW = cameraProjectionMatrix[2][3] * vZ+cameraProjectionMatrix[3][3];\n\t\t\t\tvec3 vP=getViewPosition( uv, d, cW );\n\n\t\t\t\t#ifdef isPerspectiveCamera\n\t\t\t\t\t// https://www.comp.nus.edu.sg/~lowkl/publications/lowk_persp_interp_techrep.pdf\n\t\t\t\t\tfloat recipVPZ=1./viewPosition.z;\n\t\t\t\t\tfloat viewReflectRayZ=1./(recipVPZ+s*(1./d1viewPosition.z-recipVPZ));\n\t\t\t\t\tfloat sD=surfDist*cW;\n\t\t\t\t#else\n\t\t\t\t\tfloat viewReflectRayZ=viewPosition.z+s*(d1viewPosition.z-viewPosition.z);\n\t\t\t\t\tfloat sD=surfDist;\n\t\t\t\t#endif\n\t\t\t\tif(viewReflectRayZ-sD>vZ) continue;\n\n\t\t\t\t#ifdef isInfiniteThick\n\t\t\t\t\tif(viewReflectRayZ+thickTolerance*clipW<vP.z) break;\n\t\t\t\t#endif\n\t\t\t\tfloat away=pointToLineDistance(vP,viewPosition,d1viewPosition);\n\n\t\t\t\tfloat op=opacity;\n\n\t\t\t\tif(away<sD){\n\t\t\t\t\tvec3 vN=getViewNormal( uv );\n\t\t\t\t\tif(dot(viewReflectDir,vN)>=0.) continue;\n\t\t\t\t\tfloat distance=pointPlaneDistance(vP,viewPosition,viewNormal);\n\t\t\t\t\tif(distance>maxDistance) break;\n\t\t\t\t\t#ifdef isDistanceAttenuation\n\t\t\t\t\t\tfloat ratio=1.-(distance/maxDistance);\n\t\t\t\t\t\tfloat attenuation=ratio*ratio;\n\t\t\t\t\t\top=opacity*attenuation;\n\t\t\t\t\t#endif\n\t\t\t\t\t#ifdef isFresnel\n\t\t\t\t\t\tfloat fresnel=(dot(viewIncidenceDir,viewReflectDir)+1.)/2.;\n\t\t\t\t\t\top*=fresnel;\n\t\t\t\t\t#endif\n\t\t\t\t\tvec4 reflectColor=texture2D(tDiffuse,uv);\n\t\t\t\t\tgl_FragColor.xyz=reflectColor.xyz;\n\t\t\t\t\tgl_FragColor.a=op;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t`\n )\n};\nconst SSRDepthShader = {\n defines: {\n PERSPECTIVE_CAMERA: 1\n },\n uniforms: {\n tDepth: { value: null },\n cameraNear: { value: null },\n cameraFar: { value: null }\n },\n vertexShader: (\n /* glsl */\n `\n\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n\n uniform sampler2D tDepth;\n\n uniform float cameraNear;\n uniform float cameraFar;\n\n varying vec2 vUv;\n\n #include <packing>\n\n\t\tfloat getLinearDepth( const in vec2 uv ) {\n\n\t\t\t#if PERSPECTIVE_CAMERA == 1\n\n\t\t\t\tfloat fragCoordZ = texture2D( tDepth, uv ).x;\n\t\t\t\tfloat viewZ = perspectiveDepthToViewZ( fragCoordZ, cameraNear, cameraFar );\n\t\t\t\treturn viewZToOrthographicDepth( viewZ, cameraNear, cameraFar );\n\n\t\t\t#else\n\n\t\t\t\treturn texture2D( tDepth, uv ).x;\n\n\t\t\t#endif\n\n\t\t}\n\n void main() {\n\n \tfloat depth = getLinearDepth( vUv );\n\t\t\tfloat d = 1.0 - depth;\n\t\t\t// d=(d-.999)*1000.;\n \tgl_FragColor = vec4( vec3( d ), 1.0 );\n\n }\n\n `\n )\n};\nconst SSRBlurShader = {\n uniforms: {\n tDiffuse: { value: null },\n resolution: { value: /* @__PURE__ */ new Vector2() },\n opacity: { value: 0.5 }\n },\n vertexShader: (\n /* glsl */\n `\n\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n\n uniform sampler2D tDiffuse;\n uniform vec2 resolution;\n varying vec2 vUv;\n void main() {\n\t\t\t//reverse engineering from PhotoShop blur filter, then change coefficient\n\n \tvec2 texelSize = ( 1.0 / resolution );\n\n\t\t\tvec4 c=texture2D(tDiffuse,vUv);\n\n\t\t\tvec2 offset;\n\n\t\t\toffset=(vec2(-1,0))*texelSize;\n\t\t\tvec4 cl=texture2D(tDiffuse,vUv+offset);\n\n\t\t\toffset=(vec2(1,0))*texelSize;\n\t\t\tvec4 cr=texture2D(tDiffuse,vUv+offset);\n\n\t\t\toffset=(vec2(0,-1))*texelSize;\n\t\t\tvec4 cb=texture2D(tDiffuse,vUv+offset);\n\n\t\t\toffset=(vec2(0,1))*texelSize;\n\t\t\tvec4 ct=texture2D(tDiffuse,vUv+offset);\n\n\t\t\t// float coeCenter=.5;\n\t\t\t// float coeSide=.125;\n\t\t\tfloat coeCenter=.2;\n\t\t\tfloat coeSide=.2;\n\t\t\tfloat a=c.a*coeCenter+cl.a*coeSide+cr.a*coeSide+cb.a*coeSide+ct.a*coeSide;\n\t\t\tvec3 rgb=(c.rgb*c.a*coeCenter+cl.rgb*cl.a*coeSide+cr.rgb*cr.a*coeSide+cb.rgb*cb.a*coeSide+ct.rgb*ct.a*coeSide)/a;\n\t\t\tgl_FragColor=vec4(rgb,a);\n\n\t\t}\n\t`\n )\n};\nexport {\n SSRBlurShader,\n SSRDepthShader,\n SSRShader\n};\n//# sourceMappingURL=SSRShader.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Color, DepthTexture, UnsignedShortType, NearestFilter, WebGLRenderTarget, HalfFloatType, ShaderMaterial, UniformsUtils, NoBlending, MeshNormalMaterial, MeshBasicMaterial, SrcAlphaFactor, OneMinusSrcAlphaFactor, AddEquation, NormalBlending } from \"three\";\nimport { Pass, FullScreenQuad } from \"./Pass.js\";\nimport { SSRShader, SSRBlurShader, SSRDepthShader } from \"../shaders/SSRShader.js\";\nimport { CopyShader } from \"../shaders/CopyShader.js\";\nconst SSRPass = /* @__PURE__ */ (() => {\n const _SSRPass = class extends Pass {\n constructor({ renderer, scene, camera, width, height, selects, bouncing = false, groundReflector }) {\n super();\n this.width = width !== void 0 ? width : 512;\n this.height = height !== void 0 ? height : 512;\n this.clear = true;\n this.renderer = renderer;\n this.scene = scene;\n this.camera = camera;\n this.groundReflector = groundReflector;\n this.opacity = SSRShader.uniforms.opacity.value;\n this.output = 0;\n this.maxDistance = SSRShader.uniforms.maxDistance.value;\n this.thickness = SSRShader.uniforms.thickness.value;\n this.tempColor = new Color();\n this._selects = selects;\n this.selective = Array.isArray(this._selects);\n Object.defineProperty(this, \"selects\", {\n get() {\n return this._selects;\n },\n set(val) {\n if (this._selects === val)\n return;\n this._selects = val;\n if (Array.isArray(val)) {\n this.selective = true;\n this.ssrMaterial.defines.SELECTIVE = true;\n this.ssrMaterial.needsUpdate = true;\n } else {\n this.selective = false;\n this.ssrMaterial.defines.SELECTIVE = false;\n this.ssrMaterial.needsUpdate = true;\n }\n }\n });\n this._bouncing = bouncing;\n Object.defineProperty(this, \"bouncing\", {\n get() {\n return this._bouncing;\n },\n set(val) {\n if (this._bouncing === val)\n return;\n this._bouncing = val;\n if (val) {\n this.ssrMaterial.uniforms[\"tDiffuse\"].value = this.prevRenderTarget.texture;\n } else {\n this.ssrMaterial.uniforms[\"tDiffuse\"].value = this.beautyRenderTarget.texture;\n }\n }\n });\n this.blur = true;\n this._distanceAttenuation = SSRShader.defines.DISTANCE_ATTENUATION;\n Object.defineProperty(this, \"distanceAttenuation\", {\n get() {\n return this._distanceAttenuation;\n },\n set(val) {\n if (this._distanceAttenuation === val)\n return;\n this._distanceAttenuation = val;\n this.ssrMaterial.defines.DISTANCE_ATTENUATION = val;\n this.ssrMaterial.needsUpdate = true;\n }\n });\n this._fresnel = SSRShader.defines.FRESNEL;\n Object.defineProperty(this, \"fresnel\", {\n get() {\n return this._fresnel;\n },\n set(val) {\n if (this._fresnel === val)\n return;\n this._fresnel = val;\n this.ssrMaterial.defines.FRESNEL = val;\n this.ssrMaterial.needsUpdate = true;\n }\n });\n this._infiniteThick = SSRShader.defines.INFINITE_THICK;\n Object.defineProperty(this, \"infiniteThick\", {\n get() {\n return this._infiniteThick;\n },\n set(val) {\n if (this._infiniteThick === val)\n return;\n this._infiniteThick = val;\n this.ssrMaterial.defines.INFINITE_THICK = val;\n this.ssrMaterial.needsUpdate = true;\n }\n });\n const depthTexture = new DepthTexture();\n depthTexture.type = UnsignedShortType;\n depthTexture.minFilter = NearestFilter;\n depthTexture.magFilter = NearestFilter;\n this.beautyRenderTarget = new WebGLRenderTarget(this.width, this.height, {\n minFilter: NearestFilter,\n magFilter: NearestFilter,\n type: HalfFloatType,\n depthTexture,\n depthBuffer: true\n });\n this.prevRenderTarget = new WebGLRenderTarget(this.width, this.height, {\n minFilter: NearestFilter,\n magFilter: NearestFilter\n });\n this.normalRenderTarget = new WebGLRenderTarget(this.width, this.height, {\n minFilter: NearestFilter,\n magFilter: NearestFilter,\n type: HalfFloatType\n });\n this.metalnessRenderTarget = new WebGLRenderTarget(this.width, this.height, {\n minFilter: NearestFilter,\n magFilter: NearestFilter,\n type: HalfFloatType\n });\n this.ssrRenderTarget = new WebGLRenderTarget(this.width, this.height, {\n minFilter: NearestFilter,\n magFilter: NearestFilter\n });\n this.blurRenderTarget = this.ssrRenderTarget.clone();\n this.blurRenderTarget2 = this.ssrRenderTarget.clone();\n this.ssrMaterial = new ShaderMaterial({\n defines: Object.assign({}, SSRShader.defines, {\n MAX_STEP: Math.sqrt(this.width * this.width + this.height * this.height)\n }),\n uniforms: UniformsUtils.clone(SSRShader.uniforms),\n vertexShader: SSRShader.vertexShader,\n fragmentShader: SSRShader.fragmentShader,\n blending: NoBlending\n });\n this.ssrMaterial.uniforms[\"tDiffuse\"].value = this.beautyRenderTarget.texture;\n this.ssrMaterial.uniforms[\"tNormal\"].value = this.normalRenderTarget.texture;\n this.ssrMaterial.defines.SELECTIVE = this.selective;\n this.ssrMaterial.needsUpdate = true;\n this.ssrMaterial.uniforms[\"tMetalness\"].value = this.metalnessRenderTarget.texture;\n this.ssrMaterial.uniforms[\"tDepth\"].value = this.beautyRenderTarget.depthTexture;\n this.ssrMaterial.uniforms[\"cameraNear\"].value = this.camera.near;\n this.ssrMaterial.uniforms[\"cameraFar\"].value = this.camera.far;\n this.ssrMaterial.uniforms[\"thickness\"].value = this.thickness;\n this.ssrMaterial.uniforms[\"resolution\"].value.set(this.width, this.height);\n this.ssrMaterial.uniforms[\"cameraProjectionMatrix\"].value.copy(this.camera.projectionMatrix);\n this.ssrMaterial.uniforms[\"cameraInverseProjectionMatrix\"].value.copy(this.camera.projectionMatrixInverse);\n this.normalMaterial = new MeshNormalMaterial();\n this.normalMaterial.blending = NoBlending;\n this.metalnessOnMaterial = new MeshBasicMaterial({\n color: \"white\"\n });\n this.metalnessOffMaterial = new MeshBasicMaterial({\n color: \"black\"\n });\n this.blurMaterial = new ShaderMaterial({\n defines: Object.assign({}, SSRBlurShader.defines),\n uniforms: UniformsUtils.clone(SSRBlurShader.uniforms),\n vertexShader: SSRBlurShader.vertexShader,\n fragmentShader: SSRBlurShader.fragmentShader\n });\n this.blurMaterial.uniforms[\"tDiffuse\"].value = this.ssrRenderTarget.texture;\n this.blurMaterial.uniforms[\"resolution\"].value.set(this.width, this.height);\n this.blurMaterial2 = new ShaderMaterial({\n defines: Object.assign({}, SSRBlurShader.defines),\n uniforms: UniformsUtils.clone(SSRBlurShader.uniforms),\n vertexShader: SSRBlurShader.vertexShader,\n fragmentShader: SSRBlurShader.fragmentShader\n });\n this.blurMaterial2.uniforms[\"tDiffuse\"].value = this.blurRenderTarget.texture;\n this.blurMaterial2.uniforms[\"resolution\"].value.set(this.width, this.height);\n this.depthRenderMaterial = new ShaderMaterial({\n defines: Object.assign({}, SSRDepthShader.defines),\n uniforms: UniformsUtils.clone(SSRDepthShader.uniforms),\n vertexShader: SSRDepthShader.vertexShader,\n fragmentShader: SSRDepthShader.fragmentShader,\n blending: NoBlending\n });\n this.depthRenderMaterial.uniforms[\"tDepth\"].value = this.beautyRenderTarget.depthTexture;\n this.depthRenderMaterial.uniforms[\"cameraNear\"].value = this.camera.near;\n this.depthRenderMaterial.uniforms[\"cameraFar\"].value = this.camera.far;\n this.copyMaterial = new ShaderMaterial({\n uniforms: UniformsUtils.clone(CopyShader.uniforms),\n vertexShader: CopyShader.vertexShader,\n fragmentShader: CopyShader.fragmentShader,\n transparent: true,\n depthTest: false,\n depthWrite: false,\n blendSrc: SrcAlphaFactor,\n blendDst: OneMinusSrcAlphaFactor,\n blendEquation: AddEquation,\n blendSrcAlpha: SrcAlphaFactor,\n blendDstAlpha: OneMinusSrcAlphaFactor,\n blendEquationAlpha: AddEquation\n // premultipliedAlpha:true,\n });\n this.fsQuad = new FullScreenQuad(null);\n this.originalClearColor = new Color();\n }\n dispose() {\n this.beautyRenderTarget.dispose();\n this.prevRenderTarget.dispose();\n this.normalRenderTarget.dispose();\n this.metalnessRenderTarget.dispose();\n this.ssrRenderTarget.dispose();\n this.blurRenderTarget.dispose();\n this.blurRenderTarget2.dispose();\n this.normalMaterial.dispose();\n this.metalnessOnMaterial.dispose();\n this.metalnessOffMaterial.dispose();\n this.blurMaterial.dispose();\n this.blurMaterial2.dispose();\n this.copyMaterial.dispose();\n this.depthRenderMaterial.dispose();\n this.fsQuad.dispose();\n }\n render(renderer, writeBuffer) {\n renderer.setRenderTarget(this.beautyRenderTarget);\n renderer.clear();\n if (this.groundReflector) {\n this.groundReflector.visible = false;\n this.groundReflector.doRender(this.renderer, this.scene, this.camera);\n this.groundReflector.visible = true;\n }\n renderer.render(this.scene, this.camera);\n if (this.groundReflector)\n this.groundReflector.visible = false;\n this.renderOverride(renderer, this.normalMaterial, this.normalRenderTarget, 0, 0);\n if (this.selective) {\n this.renderMetalness(renderer, this.metalnessOnMaterial, this.metalnessRenderTarget, 0, 0);\n }\n this.ssrMaterial.uniforms[\"opacity\"].value = this.opacity;\n this.ssrMaterial.uniforms[\"maxDistance\"].value = this.maxDistance;\n this.ssrMaterial.uniforms[\"thickness\"].value = this.thickness;\n this.renderPass(renderer, this.ssrMaterial, this.ssrRenderTarget);\n if (this.blur) {\n this.renderPass(renderer, this.blurMaterial, this.blurRenderTarget);\n this.renderPass(renderer, this.blurMaterial2, this.blurRenderTarget2);\n }\n switch (this.output) {\n case _SSRPass.OUTPUT.Default:\n if (this.bouncing) {\n this.copyMaterial.uniforms[\"tDiffuse\"].value = this.beautyRenderTarget.texture;\n this.copyMaterial.blending = NoBlending;\n this.renderPass(renderer, this.copyMaterial, this.prevRenderTarget);\n if (this.blur)\n this.copyMaterial.uniforms[\"tDiffuse\"].value = this.blurRenderTarget2.texture;\n else\n this.copyMaterial.uniforms[\"tDiffuse\"].value = this.ssrRenderTarget.texture;\n this.copyMaterial.blending = NormalBlending;\n this.renderPass(renderer, this.copyMaterial, this.prevRenderTarget);\n this.copyMaterial.uniforms[\"tDiffuse\"].value = this.prevRenderTarget.texture;\n this.copyMaterial.blending = NoBlending;\n this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);\n } else {\n this.copyMaterial.uniforms[\"tDiffuse\"].value = this.beautyRenderTarget.texture;\n this.copyMaterial.blending = NoBlending;\n this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);\n if (this.blur)\n this.copyMaterial.uniforms[\"tDiffuse\"].value = this.blurRenderTarget2.texture;\n else\n this.copyMaterial.uniforms[\"tDiffuse\"].value = this.ssrRenderTarget.texture;\n this.copyMaterial.blending = NormalBlending;\n this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);\n }\n break;\n case _SSRPass.OUTPUT.SSR:\n if (this.blur)\n this.copyMaterial.uniforms[\"tDiffuse\"].value = this.blurRenderTarget2.texture;\n else\n this.copyMaterial.uniforms[\"tDiffuse\"].value = this.ssrRenderTarget.texture;\n this.copyMaterial.blending = NoBlending;\n this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);\n if (this.bouncing) {\n if (this.blur)\n this.copyMaterial.uniforms[\"tDiffuse\"].value = this.blurRenderTarget2.texture;\n else\n this.copyMaterial.uniforms[\"tDiffuse\"].value = this.beautyRenderTarget.texture;\n this.copyMaterial.blending = NoBlending;\n this.renderPass(renderer, this.copyMaterial, this.prevRenderTarget);\n this.copyMaterial.uniforms[\"tDiffuse\"].value = this.ssrRenderTarget.texture;\n this.copyMaterial.blending = NormalBlending;\n this.renderPass(renderer, this.copyMaterial, this.prevRenderTarget);\n }\n break;\n case _SSRPass.OUTPUT.Beauty:\n this.copyMaterial.uniforms[\"tDiffuse\"].value = this.beautyRenderTarget.texture;\n this.copyMaterial.blending = NoBlending;\n this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);\n break;\n case _SSRPass.OUTPUT.Depth:\n this.renderPass(renderer, this.depthRenderMaterial, this.renderToScreen ? null : writeBuffer);\n break;\n case _SSRPass.OUTPUT.Normal:\n this.copyMaterial.uniforms[\"tDiffuse\"].value = this.normalRenderTarget.texture;\n this.copyMaterial.blending = NoBlending;\n this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);\n break;\n case _SSRPass.OUTPUT.Metalness:\n this.copyMaterial.uniforms[\"tDiffuse\"].value = this.metalnessRenderTarget.texture;\n this.copyMaterial.blending = NoBlending;\n this.renderPass(renderer, this.copyMaterial, this.renderToScreen ? null : writeBuffer);\n break;\n default:\n console.warn(\"THREE.SSRPass: Unknown output type.\");\n }\n }\n renderPass(renderer, passMaterial, renderTarget, clearColor, clearAlpha) {\n this.originalClearColor.copy(renderer.getClearColor(this.tempColor));\n const originalClearAlpha = renderer.getClearAlpha(this.tempColor);\n const originalAutoClear = renderer.autoClear;\n renderer.setRenderTarget(renderTarget);\n renderer.autoClear = false;\n if (clearColor !== void 0 && clearColor !== null) {\n renderer.setClearColor(clearColor);\n renderer.setClearAlpha(clearAlpha || 0);\n renderer.clear();\n }\n this.fsQuad.material = passMaterial;\n this.fsQuad.render(renderer);\n renderer.autoClear = originalAutoClear;\n renderer.setClearColor(this.originalClearColor);\n renderer.setClearAlpha(originalClearAlpha);\n }\n renderOverride(renderer, overrideMaterial, renderTarget, clearColor, clearAlpha) {\n this.originalClearColor.copy(renderer.getClearColor(this.tempColor));\n const originalClearAlpha = renderer.getClearAlpha(this.tempColor);\n const originalAutoClear = renderer.autoClear;\n renderer.setRenderTarget(renderTarget);\n renderer.autoClear = false;\n clearColor = overrideMaterial.clearColor || clearColor;\n clearAlpha = overrideMaterial.clearAlpha || clearAlpha;\n if (clearColor !== void 0 && clearColor !== null) {\n renderer.setClearColor(clearColor);\n renderer.setClearAlpha(clearAlpha || 0);\n renderer.clear();\n }\n this.scene.overrideMaterial = overrideMaterial;\n renderer.render(this.scene, this.camera);\n this.scene.overrideMaterial = null;\n renderer.autoClear = originalAutoClear;\n renderer.setClearColor(this.originalClearColor);\n renderer.setClearAlpha(originalClearAlpha);\n }\n renderMetalness(renderer, overrideMaterial, renderTarget, clearColor, clearAlpha) {\n this.originalClearColor.copy(renderer.getClearColor(this.tempColor));\n const originalClearAlpha = renderer.getClearAlpha(this.tempColor);\n const originalAutoClear = renderer.autoClear;\n renderer.setRenderTarget(renderTarget);\n renderer.autoClear = false;\n clearColor = overrideMaterial.clearColor || clearColor;\n clearAlpha = overrideMaterial.clearAlpha || clearAlpha;\n if (clearColor !== void 0 && clearColor !== null) {\n renderer.setClearColor(clearColor);\n renderer.setClearAlpha(clearAlpha || 0);\n renderer.clear();\n }\n this.scene.traverseVisible((child) => {\n child._SSRPassBackupMaterial = child.material;\n if (this._selects.includes(child)) {\n child.material = this.metalnessOnMaterial;\n } else {\n child.material = this.metalnessOffMaterial;\n }\n });\n renderer.render(this.scene, this.camera);\n this.scene.traverseVisible((child) => {\n child.material = child._SSRPassBackupMaterial;\n });\n renderer.autoClear = originalAutoClear;\n renderer.setClearColor(this.originalClearColor);\n renderer.setClearAlpha(originalClearAlpha);\n }\n setSize(width, height) {\n this.width = width;\n this.height = height;\n this.ssrMaterial.defines.MAX_STEP = Math.sqrt(width * width + height * height);\n this.ssrMaterial.needsUpdate = true;\n this.beautyRenderTarget.setSize(width, height);\n this.prevRenderTarget.setSize(width, height);\n this.ssrRenderTarget.setSize(width, height);\n this.normalRenderTarget.setSize(width, height);\n this.metalnessRenderTarget.setSize(width, height);\n this.blurRenderTarget.setSize(width, height);\n this.blurRenderTarget2.setSize(width, height);\n this.ssrMaterial.uniforms[\"resolution\"].value.set(width, height);\n this.ssrMaterial.uniforms[\"cameraProjectionMatrix\"].value.copy(this.camera.projectionMatrix);\n this.ssrMaterial.uniforms[\"cameraInverseProjectionMatrix\"].value.copy(this.camera.projectionMatrixInverse);\n this.blurMaterial.uniforms[\"resolution\"].value.set(width, height);\n this.blurMaterial2.uniforms[\"resolution\"].value.set(width, height);\n }\n };\n let SSRPass2 = _SSRPass;\n __publicField(SSRPass2, \"OUTPUT\", {\n Default: 0,\n SSR: 1,\n Beauty: 3,\n Depth: 4,\n Normal: 5,\n Metalness: 7\n });\n return SSRPass2;\n})();\nexport {\n SSRPass\n};\n//# sourceMappingURL=SSRPass.js.map\n","import { Color, UniformsUtils, ShaderMaterial, AdditiveBlending, WebGLRenderTarget, HalfFloatType } from \"three\";\nimport { Pass, FullScreenQuad } from \"./Pass.js\";\nimport { CopyShader } from \"../shaders/CopyShader.js\";\nclass SSAARenderPass extends Pass {\n constructor(scene, camera, clearColor, clearAlpha) {\n super();\n this.scene = scene;\n this.camera = camera;\n this.sampleLevel = 4;\n this.unbiased = true;\n this.clearColor = clearColor !== void 0 ? clearColor : 0;\n this.clearAlpha = clearAlpha !== void 0 ? clearAlpha : 0;\n this._oldClearColor = new Color();\n const copyShader = CopyShader;\n this.copyUniforms = UniformsUtils.clone(copyShader.uniforms);\n this.copyMaterial = new ShaderMaterial({\n uniforms: this.copyUniforms,\n vertexShader: copyShader.vertexShader,\n fragmentShader: copyShader.fragmentShader,\n transparent: true,\n depthTest: false,\n depthWrite: false,\n premultipliedAlpha: true,\n blending: AdditiveBlending\n });\n this.fsQuad = new FullScreenQuad(this.copyMaterial);\n }\n dispose() {\n if (this.sampleRenderTarget) {\n this.sampleRenderTarget.dispose();\n this.sampleRenderTarget = null;\n }\n this.copyMaterial.dispose();\n this.fsQuad.dispose();\n }\n setSize(width, height) {\n if (this.sampleRenderTarget)\n this.sampleRenderTarget.setSize(width, height);\n }\n render(renderer, writeBuffer, readBuffer) {\n if (!this.sampleRenderTarget) {\n this.sampleRenderTarget = new WebGLRenderTarget(readBuffer.width, readBuffer.height, { type: HalfFloatType });\n this.sampleRenderTarget.texture.name = \"SSAARenderPass.sample\";\n }\n const jitterOffsets = _JitterVectors[Math.max(0, Math.min(this.sampleLevel, 5))];\n const autoClear = renderer.autoClear;\n renderer.autoClear = false;\n renderer.getClearColor(this._oldClearColor);\n const oldClearAlpha = renderer.getClearAlpha();\n const baseSampleWeight = 1 / jitterOffsets.length;\n const roundingRange = 1 / 32;\n this.copyUniforms[\"tDiffuse\"].value = this.sampleRenderTarget.texture;\n const viewOffset = {\n fullWidth: readBuffer.width,\n fullHeight: readBuffer.height,\n offsetX: 0,\n offsetY: 0,\n width: readBuffer.width,\n height: readBuffer.height\n };\n const originalViewOffset = Object.assign({}, this.camera.view);\n if (originalViewOffset.enabled)\n Object.assign(viewOffset, originalViewOffset);\n for (let i = 0; i < jitterOffsets.length; i++) {\n const jitterOffset = jitterOffsets[i];\n if (this.camera.setViewOffset) {\n this.camera.setViewOffset(\n viewOffset.fullWidth,\n viewOffset.fullHeight,\n viewOffset.offsetX + jitterOffset[0] * 0.0625,\n viewOffset.offsetY + jitterOffset[1] * 0.0625,\n // 0.0625 = 1 / 16\n viewOffset.width,\n viewOffset.height\n );\n }\n let sampleWeight = baseSampleWeight;\n if (this.unbiased) {\n const uniformCenteredDistribution = -0.5 + (i + 0.5) / jitterOffsets.length;\n sampleWeight += roundingRange * uniformCenteredDistribution;\n }\n this.copyUniforms[\"opacity\"].value = sampleWeight;\n renderer.setClearColor(this.clearColor, this.clearAlpha);\n renderer.setRenderTarget(this.sampleRenderTarget);\n renderer.clear();\n renderer.render(this.scene, this.camera);\n renderer.setRenderTarget(this.renderToScreen ? null : writeBuffer);\n if (i === 0) {\n renderer.setClearColor(0, 0);\n renderer.clear();\n }\n this.fsQuad.render(renderer);\n }\n if (this.camera.setViewOffset && originalViewOffset.enabled) {\n this.camera.setViewOffset(\n originalViewOffset.fullWidth,\n originalViewOffset.fullHeight,\n originalViewOffset.offsetX,\n originalViewOffset.offsetY,\n originalViewOffset.width,\n originalViewOffset.height\n );\n } else if (this.camera.clearViewOffset) {\n this.camera.clearViewOffset();\n }\n renderer.autoClear = autoClear;\n renderer.setClearColor(this._oldClearColor, oldClearAlpha);\n }\n}\nconst _JitterVectors = [\n [\n [0, 0]\n ],\n [\n [4, 4],\n [-4, -4]\n ],\n [\n [-2, -6],\n [6, -2],\n [-6, 2],\n [2, 6]\n ],\n [\n [1, -3],\n [-1, 3],\n [5, 1],\n [-3, -5],\n [-5, 5],\n [-7, -1],\n [3, 7],\n [7, -7]\n ],\n [\n [1, 1],\n [-1, -3],\n [-3, 2],\n [4, -1],\n [-5, -2],\n [2, 5],\n [5, 3],\n [3, -5],\n [-2, 6],\n [0, -7],\n [-4, -6],\n [-6, 4],\n [-8, 0],\n [7, -4],\n [6, 7],\n [-7, -8]\n ],\n [\n [-4, -7],\n [-7, -5],\n [-3, -5],\n [-5, -4],\n [-1, -4],\n [-2, -2],\n [-6, -1],\n [-4, 0],\n [-7, 1],\n [-1, 2],\n [-6, 3],\n [-3, 3],\n [-7, 6],\n [-3, 6],\n [-5, 7],\n [-1, 7],\n [5, -7],\n [1, -6],\n [6, -5],\n [4, -4],\n [2, -3],\n [7, -2],\n [1, -1],\n [4, -1],\n [2, 1],\n [6, 2],\n [0, 4],\n [4, 4],\n [2, 5],\n [7, 5],\n [5, 6],\n [3, 7]\n ]\n];\nexport {\n SSAARenderPass\n};\n//# sourceMappingURL=SSAARenderPass.js.map\n","import { WebGLRenderTarget, HalfFloatType } from \"three\";\nimport { SSAARenderPass } from \"./SSAARenderPass.js\";\nclass TAARenderPass extends SSAARenderPass {\n constructor(scene, camera, clearColor, clearAlpha) {\n super(scene, camera, clearColor, clearAlpha);\n this.sampleLevel = 0;\n this.accumulate = false;\n this.accumulateIndex = -1;\n }\n render(renderer, writeBuffer, readBuffer, deltaTime) {\n if (this.accumulate === false) {\n super.render(renderer, writeBuffer, readBuffer, deltaTime);\n this.accumulateIndex = -1;\n return;\n }\n const jitterOffsets = _JitterVectors[5];\n if (this.sampleRenderTarget === void 0) {\n this.sampleRenderTarget = new WebGLRenderTarget(readBuffer.width, readBuffer.height, { type: HalfFloatType });\n this.sampleRenderTarget.texture.name = \"TAARenderPass.sample\";\n }\n if (this.holdRenderTarget === void 0) {\n this.holdRenderTarget = new WebGLRenderTarget(readBuffer.width, readBuffer.height, { type: HalfFloatType });\n this.holdRenderTarget.texture.name = \"TAARenderPass.hold\";\n }\n if (this.accumulateIndex === -1) {\n super.render(renderer, this.holdRenderTarget, readBuffer, deltaTime);\n this.accumulateIndex = 0;\n }\n const autoClear = renderer.autoClear;\n renderer.autoClear = false;\n renderer.getClearColor(this._oldClearColor);\n const oldClearAlpha = renderer.getClearAlpha();\n const sampleWeight = 1 / jitterOffsets.length;\n if (this.accumulateIndex >= 0 && this.accumulateIndex < jitterOffsets.length) {\n this.copyUniforms[\"opacity\"].value = sampleWeight;\n this.copyUniforms[\"tDiffuse\"].value = writeBuffer.texture;\n const numSamplesPerFrame = Math.pow(2, this.sampleLevel);\n for (let i = 0; i < numSamplesPerFrame; i++) {\n const j = this.accumulateIndex;\n const jitterOffset = jitterOffsets[j];\n if (this.camera.setViewOffset) {\n this.camera.setViewOffset(\n readBuffer.width,\n readBuffer.height,\n jitterOffset[0] * 0.0625,\n jitterOffset[1] * 0.0625,\n // 0.0625 = 1 / 16\n readBuffer.width,\n readBuffer.height\n );\n }\n renderer.setRenderTarget(writeBuffer);\n renderer.setClearColor(this.clearColor, this.clearAlpha);\n renderer.clear();\n renderer.render(this.scene, this.camera);\n renderer.setRenderTarget(this.sampleRenderTarget);\n if (this.accumulateIndex === 0) {\n renderer.setClearColor(0, 0);\n renderer.clear();\n }\n this.fsQuad.render(renderer);\n this.accumulateIndex++;\n if (this.accumulateIndex >= jitterOffsets.length)\n break;\n }\n if (this.camera.clearViewOffset)\n this.camera.clearViewOffset();\n }\n renderer.setClearColor(this.clearColor, this.clearAlpha);\n const accumulationWeight = this.accumulateIndex * sampleWeight;\n if (accumulationWeight > 0) {\n this.copyUniforms[\"opacity\"].value = 1;\n this.copyUniforms[\"tDiffuse\"].value = this.sampleRenderTarget.texture;\n renderer.setRenderTarget(writeBuffer);\n renderer.clear();\n this.fsQuad.render(renderer);\n }\n if (accumulationWeight < 1) {\n this.copyUniforms[\"opacity\"].value = 1 - accumulationWeight;\n this.copyUniforms[\"tDiffuse\"].value = this.holdRenderTarget.texture;\n renderer.setRenderTarget(writeBuffer);\n this.fsQuad.render(renderer);\n }\n renderer.autoClear = autoClear;\n renderer.setClearColor(this._oldClearColor, oldClearAlpha);\n }\n dispose() {\n super.dispose();\n if (this.sampleRenderTarget !== void 0)\n this.sampleRenderTarget.dispose();\n if (this.holdRenderTarget !== void 0)\n this.holdRenderTarget.dispose();\n }\n}\nconst _JitterVectors = [\n [\n [0, 0]\n ],\n [\n [4, 4],\n [-4, -4]\n ],\n [\n [-2, -6],\n [6, -2],\n [-6, 2],\n [2, 6]\n ],\n [\n [1, -3],\n [-1, 3],\n [5, 1],\n [-3, -5],\n [-5, 5],\n [-7, -1],\n [3, 7],\n [7, -7]\n ],\n [\n [1, 1],\n [-1, -3],\n [-3, 2],\n [4, -1],\n [-5, -2],\n [2, 5],\n [5, 3],\n [3, -5],\n [-2, 6],\n [0, -7],\n [-4, -6],\n [-6, 4],\n [-8, 0],\n [7, -4],\n [6, 7],\n [-7, -8]\n ],\n [\n [-4, -7],\n [-7, -5],\n [-3, -5],\n [-5, -4],\n [-1, -4],\n [-2, -2],\n [-6, -1],\n [-4, 0],\n [-7, 1],\n [-1, 2],\n [-6, 3],\n [-3, 3],\n [-7, 6],\n [-3, 6],\n [-5, 7],\n [-1, 7],\n [5, -7],\n [1, -6],\n [6, -5],\n [4, -4],\n [2, -3],\n [7, -2],\n [1, -1],\n [4, -1],\n [2, 1],\n [6, 2],\n [0, 4],\n [4, 4],\n [2, 5],\n [7, 5],\n [5, 6],\n [3, 7]\n ]\n];\nexport {\n TAARenderPass\n};\n//# sourceMappingURL=TAARenderPass.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Color } from \"three\";\nimport { Pass } from \"./Pass.js\";\nclass RenderPass extends Pass {\n constructor(scene, camera, overrideMaterial, clearColor, clearAlpha = 0) {\n super();\n __publicField(this, \"scene\");\n __publicField(this, \"camera\");\n __publicField(this, \"overrideMaterial\");\n __publicField(this, \"clearColor\");\n __publicField(this, \"clearAlpha\");\n __publicField(this, \"clearDepth\", false);\n __publicField(this, \"_oldClearColor\", new Color());\n this.scene = scene;\n this.camera = camera;\n this.overrideMaterial = overrideMaterial;\n this.clearColor = clearColor;\n this.clearAlpha = clearAlpha;\n this.clear = true;\n this.needsSwap = false;\n }\n render(renderer, writeBuffer, readBuffer) {\n let oldAutoClear = renderer.autoClear;\n renderer.autoClear = false;\n let oldClearAlpha;\n let oldOverrideMaterial = null;\n if (this.overrideMaterial !== void 0) {\n oldOverrideMaterial = this.scene.overrideMaterial;\n this.scene.overrideMaterial = this.overrideMaterial;\n }\n if (this.clearColor) {\n renderer.getClearColor(this._oldClearColor);\n oldClearAlpha = renderer.getClearAlpha();\n renderer.setClearColor(this.clearColor, this.clearAlpha);\n }\n if (this.clearDepth) {\n renderer.clearDepth();\n }\n renderer.setRenderTarget(this.renderToScreen ? null : readBuffer);\n if (this.clear)\n renderer.clear(renderer.autoClearColor, renderer.autoClearDepth, renderer.autoClearStencil);\n renderer.render(this.scene, this.camera);\n if (this.clearColor) {\n renderer.setClearColor(this._oldClearColor, oldClearAlpha);\n }\n if (this.overrideMaterial !== void 0) {\n this.scene.overrideMaterial = oldOverrideMaterial;\n }\n renderer.autoClear = oldAutoClear;\n }\n}\nexport {\n RenderPass\n};\n//# sourceMappingURL=RenderPass.js.map\n","import { Vector2, MeshNormalMaterial, ShaderMaterial, Vector4, WebGLRenderTarget, DepthTexture, NearestFilter, RGBAFormat } from \"three\";\nimport { Pass, FullScreenQuad } from \"./Pass.js\";\nclass RenderPixelatedPass extends Pass {\n constructor(resolution, pixelSize, scene, camera, options = {}) {\n var _a, _b;\n super();\n this.pixelSize = pixelSize;\n this.resolution = new Vector2();\n this.renderResolution = new Vector2();\n this.setSize(resolution.x, resolution.y);\n this.fsQuad = new FullScreenQuad(this.material());\n this.scene = scene;\n this.camera = camera;\n this.normalEdgeStrength = (_a = options.normalEdgeStrength) != null ? _a : 0.3;\n this.depthEdgeStrength = (_b = options.depthEdgeStrength) != null ? _b : 0.4;\n this.rgbRenderTarget = pixelRenderTarget(this.renderResolution, RGBAFormat, true);\n this.normalRenderTarget = pixelRenderTarget(this.renderResolution, RGBAFormat, false);\n this.normalMaterial = new MeshNormalMaterial();\n }\n dispose() {\n this.rgbRenderTarget.dispose();\n this.normalRenderTarget.dispose();\n this.fsQuad.dispose();\n }\n setSize(width, height) {\n var _a, _b, _c;\n this.resolution.set(width, height);\n this.renderResolution.set(width / this.pixelSize | 0, height / this.pixelSize | 0);\n const { x, y } = this.renderResolution;\n (_a = this.rgbRenderTarget) == null ? void 0 : _a.setSize(x, y);\n (_b = this.normalRenderTarget) == null ? void 0 : _b.setSize(x, y);\n (_c = this.fsQuad) == null ? void 0 : _c.material.uniforms.resolution.value.set(x, y, 1 / x, 1 / y);\n }\n setPixelSize(pixelSize) {\n this.pixelSize = pixelSize;\n this.setSize(this.resolution.x, this.resolution.y);\n }\n render(renderer, writeBuffer) {\n const uniforms = this.fsQuad.material.uniforms;\n uniforms.normalEdgeStrength.value = this.normalEdgeStrength;\n uniforms.depthEdgeStrength.value = this.depthEdgeStrength;\n renderer.setRenderTarget(this.rgbRenderTarget);\n renderer.render(this.scene, this.camera);\n const overrideMaterial_old = this.scene.overrideMaterial;\n renderer.setRenderTarget(this.normalRenderTarget);\n this.scene.overrideMaterial = this.normalMaterial;\n renderer.render(this.scene, this.camera);\n this.scene.overrideMaterial = overrideMaterial_old;\n uniforms.tDiffuse.value = this.rgbRenderTarget.texture;\n uniforms.tDepth.value = this.rgbRenderTarget.depthTexture;\n uniforms.tNormal.value = this.normalRenderTarget.texture;\n if (this.renderToScreen) {\n renderer.setRenderTarget(null);\n } else {\n renderer.setRenderTarget(writeBuffer);\n if (this.clear)\n renderer.clear();\n }\n this.fsQuad.render(renderer);\n }\n material() {\n return new ShaderMaterial({\n uniforms: {\n tDiffuse: { value: null },\n tDepth: { value: null },\n tNormal: { value: null },\n resolution: {\n value: new Vector4(\n this.renderResolution.x,\n this.renderResolution.y,\n 1 / this.renderResolution.x,\n 1 / this.renderResolution.y\n )\n },\n normalEdgeStrength: { value: 0 },\n depthEdgeStrength: { value: 0 }\n },\n vertexShader: `\n\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvUv = uv;\n\t\t\t\t\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n\t\t\t\t}\n\t\t\t\t`,\n fragmentShader: `\n\t\t\t\tuniform sampler2D tDiffuse;\n\t\t\t\tuniform sampler2D tDepth;\n\t\t\t\tuniform sampler2D tNormal;\n\t\t\t\tuniform vec4 resolution;\n\t\t\t\tuniform float normalEdgeStrength;\n\t\t\t\tuniform float depthEdgeStrength;\n\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\tfloat getDepth(int x, int y) {\n\n\t\t\t\t\treturn texture2D( tDepth, vUv + vec2(x, y) * resolution.zw ).r;\n\n\t\t\t\t}\n\n\t\t\t\tvec3 getNormal(int x, int y) {\n\n\t\t\t\t\treturn texture2D( tNormal, vUv + vec2(x, y) * resolution.zw ).rgb * 2.0 - 1.0;\n\n\t\t\t\t}\n\n\t\t\t\tfloat depthEdgeIndicator(float depth, vec3 normal) {\n\n\t\t\t\t\tfloat diff = 0.0;\n\t\t\t\t\tdiff += clamp(getDepth(1, 0) - depth, 0.0, 1.0);\n\t\t\t\t\tdiff += clamp(getDepth(-1, 0) - depth, 0.0, 1.0);\n\t\t\t\t\tdiff += clamp(getDepth(0, 1) - depth, 0.0, 1.0);\n\t\t\t\t\tdiff += clamp(getDepth(0, -1) - depth, 0.0, 1.0);\n\t\t\t\t\treturn floor(smoothstep(0.01, 0.02, diff) * 2.) / 2.;\n\n\t\t\t\t}\n\n\t\t\t\tfloat neighborNormalEdgeIndicator(int x, int y, float depth, vec3 normal) {\n\n\t\t\t\t\tfloat depthDiff = getDepth(x, y) - depth;\n\t\t\t\t\tvec3 neighborNormal = getNormal(x, y);\n\t\t\t\t\t\n\t\t\t\t\t// Edge pixels should yield to faces who's normals are closer to the bias normal.\n\t\t\t\t\tvec3 normalEdgeBias = vec3(1., 1., 1.); // This should probably be a parameter.\n\t\t\t\t\tfloat normalDiff = dot(normal - neighborNormal, normalEdgeBias);\n\t\t\t\t\tfloat normalIndicator = clamp(smoothstep(-.01, .01, normalDiff), 0.0, 1.0);\n\t\t\t\t\t\n\t\t\t\t\t// Only the shallower pixel should detect the normal edge.\n\t\t\t\t\tfloat depthIndicator = clamp(sign(depthDiff * .25 + .0025), 0.0, 1.0);\n\n\t\t\t\t\treturn (1.0 - dot(normal, neighborNormal)) * depthIndicator * normalIndicator;\n\n\t\t\t\t}\n\n\t\t\t\tfloat normalEdgeIndicator(float depth, vec3 normal) {\n\t\t\t\t\t\n\t\t\t\t\tfloat indicator = 0.0;\n\n\t\t\t\t\tindicator += neighborNormalEdgeIndicator(0, -1, depth, normal);\n\t\t\t\t\tindicator += neighborNormalEdgeIndicator(0, 1, depth, normal);\n\t\t\t\t\tindicator += neighborNormalEdgeIndicator(-1, 0, depth, normal);\n\t\t\t\t\tindicator += neighborNormalEdgeIndicator(1, 0, depth, normal);\n\n\t\t\t\t\treturn step(0.1, indicator);\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\tvec4 texel = texture2D( tDiffuse, vUv );\n\n\t\t\t\t\tfloat depth = 0.0;\n\t\t\t\t\tvec3 normal = vec3(0.0);\n\n\t\t\t\t\tif (depthEdgeStrength > 0.0 || normalEdgeStrength > 0.0) {\n\n\t\t\t\t\t\tdepth = getDepth(0, 0);\n\t\t\t\t\t\tnormal = getNormal(0, 0);\n\n\t\t\t\t\t}\n\n\t\t\t\t\tfloat dei = 0.0;\n\t\t\t\t\tif (depthEdgeStrength > 0.0) \n\t\t\t\t\t\tdei = depthEdgeIndicator(depth, normal);\n\n\t\t\t\t\tfloat nei = 0.0; \n\t\t\t\t\tif (normalEdgeStrength > 0.0) \n\t\t\t\t\t\tnei = normalEdgeIndicator(depth, normal);\n\n\t\t\t\t\tfloat Strength = dei > 0.0 ? (1.0 - depthEdgeStrength * dei) : (1.0 + normalEdgeStrength * nei);\n\n\t\t\t\t\tgl_FragColor = texel * Strength;\n\n\t\t\t\t}\n\t\t\t\t`\n });\n }\n}\nfunction pixelRenderTarget(resolution, pixelFormat, useDepthTexture) {\n const renderTarget = new WebGLRenderTarget(\n resolution.x,\n resolution.y,\n !useDepthTexture ? void 0 : {\n depthTexture: new DepthTexture(resolution.x, resolution.y),\n depthBuffer: true\n }\n );\n renderTarget.texture.format = pixelFormat;\n renderTarget.texture.minFilter = NearestFilter;\n renderTarget.texture.magFilter = NearestFilter;\n renderTarget.texture.generateMipmaps = false;\n renderTarget.stencilBuffer = false;\n return renderTarget;\n}\nexport {\n RenderPixelatedPass\n};\n//# sourceMappingURL=RenderPixelatedPass.js.map\n","import { Vector2 } from \"three\";\nconst ConvolutionShader = {\n defines: {\n KERNEL_SIZE_FLOAT: \"25.0\",\n KERNEL_SIZE_INT: \"25\"\n },\n uniforms: {\n tDiffuse: { value: null },\n uImageIncrement: { value: /* @__PURE__ */ new Vector2(1953125e-9, 0) },\n cKernel: { value: [] }\n },\n vertexShader: (\n /* glsl */\n `\n uniform vec2 uImageIncrement;\n\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv - ( ( KERNEL_SIZE_FLOAT - 1.0 ) / 2.0 ) * uImageIncrement;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform float cKernel[ KERNEL_SIZE_INT ];\n\n uniform sampler2D tDiffuse;\n uniform vec2 uImageIncrement;\n\n varying vec2 vUv;\n\n void main() {\n\n \tvec2 imageCoord = vUv;\n \tvec4 sum = vec4( 0.0, 0.0, 0.0, 0.0 );\n\n \tfor( int i = 0; i < KERNEL_SIZE_INT; i ++ ) {\n\n \t\tsum += texture2D( tDiffuse, imageCoord ) * cKernel[ i ];\n \t\timageCoord += uImageIncrement;\n\n \t}\n\n \tgl_FragColor = sum;\n\n }\n `\n ),\n buildKernel: function(sigma) {\n function gauss(x, sigma2) {\n return Math.exp(-(x * x) / (2 * sigma2 * sigma2));\n }\n const kMaxKernelSize = 25;\n const kernelSize = Math.min(2 * Math.ceil(sigma * 3) + 1, kMaxKernelSize);\n const halfWidth = (kernelSize - 1) * 0.5;\n const values = new Array(kernelSize);\n let sum = 0;\n for (let i = 0; i < kernelSize; ++i) {\n values[i] = gauss(i - halfWidth, sigma);\n sum += values[i];\n }\n for (let i = 0; i < kernelSize; ++i)\n values[i] /= sum;\n return values;\n }\n};\nexport {\n ConvolutionShader\n};\n//# sourceMappingURL=ConvolutionShader.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Pass, FullScreenQuad } from \"./Pass.js\";\nimport { Vector2, WebGLRenderTarget, UniformsUtils, ShaderMaterial, AdditiveBlending } from \"three\";\nimport { ConvolutionShader } from \"../shaders/ConvolutionShader.js\";\nclass BloomPass extends Pass {\n constructor(strength = 1, kernelSize = 25, sigma = 4, resolution = 256) {\n super();\n __publicField(this, \"renderTargetX\");\n __publicField(this, \"renderTargetY\");\n __publicField(this, \"materialCombine\");\n __publicField(this, \"materialConvolution\");\n __publicField(this, \"fsQuad\");\n __publicField(this, \"combineUniforms\");\n __publicField(this, \"convolutionUniforms\");\n __publicField(this, \"blurX\", new Vector2(1953125e-9, 0));\n __publicField(this, \"blurY\", new Vector2(0, 1953125e-9));\n this.renderTargetX = new WebGLRenderTarget(resolution, resolution);\n this.renderTargetX.texture.name = \"BloomPass.x\";\n this.renderTargetY = new WebGLRenderTarget(resolution, resolution);\n this.renderTargetY.texture.name = \"BloomPass.y\";\n this.combineUniforms = UniformsUtils.clone(CombineShader.uniforms);\n this.combineUniforms[\"strength\"].value = strength;\n this.materialCombine = new ShaderMaterial({\n uniforms: this.combineUniforms,\n vertexShader: CombineShader.vertexShader,\n fragmentShader: CombineShader.fragmentShader,\n blending: AdditiveBlending,\n transparent: true\n });\n if (ConvolutionShader === void 0)\n console.error(\"BloomPass relies on ConvolutionShader\");\n const convolutionShader = ConvolutionShader;\n this.convolutionUniforms = UniformsUtils.clone(convolutionShader.uniforms);\n this.convolutionUniforms[\"uImageIncrement\"].value = this.blurX;\n this.convolutionUniforms[\"cKernel\"].value = ConvolutionShader.buildKernel(sigma);\n this.materialConvolution = new ShaderMaterial({\n uniforms: this.convolutionUniforms,\n vertexShader: convolutionShader.vertexShader,\n fragmentShader: convolutionShader.fragmentShader,\n defines: {\n KERNEL_SIZE_FLOAT: kernelSize.toFixed(1),\n KERNEL_SIZE_INT: kernelSize.toFixed(0)\n }\n });\n this.needsSwap = false;\n this.fsQuad = new FullScreenQuad(this.materialConvolution);\n }\n render(renderer, writeBuffer, readBuffer, deltaTime, maskActive) {\n if (maskActive)\n renderer.state.buffers.stencil.setTest(false);\n this.fsQuad.material = this.materialConvolution;\n this.convolutionUniforms[\"tDiffuse\"].value = readBuffer.texture;\n this.convolutionUniforms[\"uImageIncrement\"].value = this.blurX;\n renderer.setRenderTarget(this.renderTargetX);\n renderer.clear();\n this.fsQuad.render(renderer);\n this.convolutionUniforms[\"tDiffuse\"].value = this.renderTargetX.texture;\n this.convolutionUniforms[\"uImageIncrement\"].value = this.blurY;\n renderer.setRenderTarget(this.renderTargetY);\n renderer.clear();\n this.fsQuad.render(renderer);\n this.fsQuad.material = this.materialCombine;\n this.combineUniforms[\"tDiffuse\"].value = this.renderTargetY.texture;\n if (maskActive)\n renderer.state.buffers.stencil.setTest(true);\n renderer.setRenderTarget(readBuffer);\n if (this.clear)\n renderer.clear();\n this.fsQuad.render(renderer);\n }\n}\nconst CombineShader = {\n uniforms: {\n tDiffuse: {\n value: null\n },\n strength: {\n value: 1\n }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n void main() {\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n }`\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform float strength;\n uniform sampler2D tDiffuse;\n varying vec2 vUv;\n void main() {\n vec4 texel = texture2D( tDiffuse, vUv );\n gl_FragColor = strength * texel;\n }`\n )\n};\nexport {\n BloomPass\n};\n//# sourceMappingURL=BloomPass.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Vector2, ShaderMaterial } from \"three\";\nimport { Pass, FullScreenQuad } from \"./Pass.js\";\nclass WaterPass extends Pass {\n constructor() {\n super();\n __publicField(this, \"material\");\n __publicField(this, \"fsQuad\");\n __publicField(this, \"factor\");\n __publicField(this, \"time\");\n __publicField(this, \"uniforms\");\n this.uniforms = {\n tex: { value: null },\n time: { value: 0 },\n factor: { value: 0 },\n resolution: { value: new Vector2(64, 64) }\n };\n this.material = new ShaderMaterial({\n uniforms: this.uniforms,\n vertexShader: `\n varying vec2 vUv;\n void main(){ \n vUv = uv; \n vec4 modelViewPosition = modelViewMatrix * vec4(position, 1.0);\n gl_Position = projectionMatrix * modelViewPosition;\n }`,\n fragmentShader: `\n uniform float time;\n uniform float factor;\n uniform vec2 resolution;\n uniform sampler2D tex;\n varying vec2 vUv;\n void main() { \n vec2 uv1 = vUv;\n vec2 uv = gl_FragCoord.xy/resolution.xy;\n float frequency = 6.0 * factor;\n float amplitude = 0.015 * factor;\n float x = uv1.y * frequency + time * .7; \n float y = uv1.x * frequency + time * .3;\n uv1.x += cos(x+y) * amplitude * cos(y);\n uv1.y += sin(x-y) * amplitude * cos(y);\n vec4 rgba = texture2D(tex, uv1);\n gl_FragColor = rgba;\n }`\n });\n this.fsQuad = new FullScreenQuad(this.material);\n this.factor = 0;\n this.time = 0;\n }\n render(renderer, writeBuffer, readBuffer) {\n this.uniforms[\"tex\"].value = readBuffer.texture;\n this.uniforms[\"time\"].value = this.time;\n this.uniforms[\"factor\"].value = this.factor;\n if (this.renderToScreen) {\n renderer.setRenderTarget(null);\n this.fsQuad.render(renderer);\n } else {\n renderer.setRenderTarget(writeBuffer);\n if (this.clear)\n renderer.clear();\n this.fsQuad.render(renderer);\n }\n }\n}\nexport {\n WaterPass\n};\n//# sourceMappingURL=WaterPass.js.map\n","const ARButton = {\n createButton(renderer, sessionInit = {}) {\n const button = document.createElement(\"button\");\n function showStartAR() {\n if (sessionInit.domOverlay === void 0) {\n const overlay = document.createElement(\"div\");\n overlay.style.display = \"none\";\n document.body.appendChild(overlay);\n const svg = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\n svg.setAttribute(\"width\", \"38px\");\n svg.setAttribute(\"height\", \"38px\");\n svg.style.position = \"absolute\";\n svg.style.right = \"20px\";\n svg.style.top = \"20px\";\n svg.addEventListener(\"click\", function() {\n currentSession == null ? void 0 : currentSession.end();\n });\n overlay.appendChild(svg);\n const path = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n path.setAttribute(\"d\", \"M 12,12 L 28,28 M 28,12 12,28\");\n path.setAttribute(\"stroke\", \"#fff\");\n path.setAttribute(\"stroke-width\", \"2px\");\n svg.appendChild(path);\n if (sessionInit.optionalFeatures === void 0) {\n sessionInit.optionalFeatures = [];\n }\n sessionInit.optionalFeatures.push(\"dom-overlay\");\n sessionInit.domOverlay = { root: overlay };\n }\n let currentSession = null;\n async function onSessionStarted(session) {\n session.addEventListener(\"end\", onSessionEnded);\n renderer.xr.setReferenceSpaceType(\"local\");\n await renderer.xr.setSession(session);\n button.textContent = \"STOP AR\";\n sessionInit.domOverlay.root.style.display = \"\";\n currentSession = session;\n }\n function onSessionEnded() {\n currentSession.removeEventListener(\"end\", onSessionEnded);\n button.textContent = \"START AR\";\n sessionInit.domOverlay.root.style.display = \"none\";\n currentSession = null;\n }\n button.style.display = \"\";\n button.style.cursor = \"pointer\";\n button.style.left = \"calc(50% - 50px)\";\n button.style.width = \"100px\";\n button.textContent = \"START AR\";\n button.onmouseenter = () => {\n button.style.opacity = \"1.0\";\n };\n button.onmouseleave = () => {\n button.style.opacity = \"0.5\";\n };\n button.onclick = () => {\n if (currentSession === null) {\n navigator.xr.requestSession(\"immersive-ar\", sessionInit).then(onSessionStarted);\n } else {\n currentSession.end();\n }\n };\n }\n function disableButton() {\n button.style.display = \"\";\n button.style.cursor = \"auto\";\n button.style.left = \"calc(50% - 75px)\";\n button.style.width = \"150px\";\n button.onmouseenter = null;\n button.onmouseleave = null;\n button.onclick = null;\n }\n function showARNotSupported() {\n disableButton();\n button.textContent = \"AR NOT SUPPORTED\";\n }\n function stylizeElement(element) {\n element.style.position = \"absolute\";\n element.style.bottom = \"20px\";\n element.style.padding = \"12px 6px\";\n element.style.border = \"1px solid #fff\";\n element.style.borderRadius = \"4px\";\n element.style.background = \"rgba(0,0,0,0.1)\";\n element.style.color = \"#fff\";\n element.style.font = \"normal 13px sans-serif\";\n element.style.textAlign = \"center\";\n element.style.opacity = \"0.5\";\n element.style.outline = \"none\";\n element.style.zIndex = \"999\";\n }\n if (\"xr\" in navigator) {\n button.id = \"ARButton\";\n button.style.display = \"none\";\n stylizeElement(button);\n navigator.xr.isSessionSupported(\"immersive-ar\").then(function(supported) {\n supported ? showStartAR() : showARNotSupported();\n }).catch(showARNotSupported);\n return button;\n } else {\n const message = document.createElement(\"a\");\n if (window.isSecureContext === false) {\n message.href = document.location.href.replace(/^http:/, \"https:\");\n message.innerHTML = \"WEBXR NEEDS HTTPS\";\n } else {\n message.href = \"https://immersiveweb.dev/\";\n message.innerHTML = \"WEBXR NOT AVAILABLE\";\n }\n message.style.left = \"calc(50% - 90px)\";\n message.style.width = \"180px\";\n message.style.textDecoration = \"none\";\n stylizeElement(message);\n return message;\n }\n }\n};\nexport {\n ARButton\n};\n//# sourceMappingURL=ARButton.js.map\n","function decodeText(array) {\n if (typeof TextDecoder !== \"undefined\") {\n return new TextDecoder().decode(array);\n }\n let s = \"\";\n for (let i = 0, il = array.length; i < il; i++) {\n s += String.fromCharCode(array[i]);\n }\n try {\n return decodeURIComponent(escape(s));\n } catch (e) {\n return s;\n }\n}\nexport {\n decodeText\n};\n//# sourceMappingURL=LoaderUtils.js.map\n","import { Loader, LoaderUtils, FileLoader, Color, SpotLight, PointLight, DirectionalLight, MeshBasicMaterial, MeshPhysicalMaterial, Vector2, Matrix4, Vector3, Quaternion, InstancedMesh, InstancedBufferAttribute, Object3D, TextureLoader, ImageBitmapLoader, BufferAttribute, InterleavedBuffer, InterleavedBufferAttribute, LinearFilter, LinearMipmapLinearFilter, RepeatWrapping, PointsMaterial, Material, LineBasicMaterial, MeshStandardMaterial, DoubleSide, PropertyBinding, BufferGeometry, SkinnedMesh, Mesh, TriangleStripDrawMode, TriangleFanDrawMode, LineSegments, Line, LineLoop, Points, Group, PerspectiveCamera, MathUtils, OrthographicCamera, Skeleton, AnimationClip, Bone, InterpolateLinear, NearestFilter, NearestMipmapNearestFilter, LinearMipmapNearestFilter, NearestMipmapLinearFilter, ClampToEdgeWrapping, MirroredRepeatWrapping, InterpolateDiscrete, FrontSide, Texture, VectorKeyframeTrack, NumberKeyframeTrack, QuaternionKeyframeTrack, Box3, Sphere, Interpolant } from \"three\";\nimport { toTrianglesDrawMode } from \"../utils/BufferGeometryUtils.js\";\nimport { version } from \"../_polyfill/constants.js\";\nimport { decodeText } from \"../_polyfill/LoaderUtils.js\";\nconst SRGBColorSpace = \"srgb\";\nconst LinearSRGBColorSpace = \"srgb-linear\";\nconst sRGBEncoding = 3001;\nconst LinearEncoding = 3e3;\nclass GLTFLoader extends Loader {\n constructor(manager) {\n super(manager);\n this.dracoLoader = null;\n this.ktx2Loader = null;\n this.meshoptDecoder = null;\n this.pluginCallbacks = [];\n this.register(function(parser) {\n return new GLTFMaterialsClearcoatExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFMaterialsDispersionExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFTextureBasisUExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFTextureWebPExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFTextureAVIFExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFMaterialsSheenExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFMaterialsTransmissionExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFMaterialsVolumeExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFMaterialsIorExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFMaterialsEmissiveStrengthExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFMaterialsSpecularExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFMaterialsIridescenceExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFMaterialsAnisotropyExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFMaterialsBumpExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFLightsExtension(parser);\n });\n this.register(function(parser) {\n return new GLTFMeshoptCompression(parser);\n });\n this.register(function(parser) {\n return new GLTFMeshGpuInstancing(parser);\n });\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n let resourcePath;\n if (this.resourcePath !== \"\") {\n resourcePath = this.resourcePath;\n } else if (this.path !== \"\") {\n const relativeUrl = LoaderUtils.extractUrlBase(url);\n resourcePath = LoaderUtils.resolveURL(relativeUrl, this.path);\n } else {\n resourcePath = LoaderUtils.extractUrlBase(url);\n }\n this.manager.itemStart(url);\n const _onError = function(e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n scope.manager.itemEnd(url);\n };\n const loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setResponseType(\"arraybuffer\");\n loader.setRequestHeader(this.requestHeader);\n loader.setWithCredentials(this.withCredentials);\n loader.load(\n url,\n function(data) {\n try {\n scope.parse(\n data,\n resourcePath,\n function(gltf) {\n onLoad(gltf);\n scope.manager.itemEnd(url);\n },\n _onError\n );\n } catch (e) {\n _onError(e);\n }\n },\n onProgress,\n _onError\n );\n }\n setDRACOLoader(dracoLoader) {\n this.dracoLoader = dracoLoader;\n return this;\n }\n setDDSLoader() {\n throw new Error('THREE.GLTFLoader: \"MSFT_texture_dds\" no longer supported. Please update to \"KHR_texture_basisu\".');\n }\n setKTX2Loader(ktx2Loader) {\n this.ktx2Loader = ktx2Loader;\n return this;\n }\n setMeshoptDecoder(meshoptDecoder) {\n this.meshoptDecoder = meshoptDecoder;\n return this;\n }\n register(callback) {\n if (this.pluginCallbacks.indexOf(callback) === -1) {\n this.pluginCallbacks.push(callback);\n }\n return this;\n }\n unregister(callback) {\n if (this.pluginCallbacks.indexOf(callback) !== -1) {\n this.pluginCallbacks.splice(this.pluginCallbacks.indexOf(callback), 1);\n }\n return this;\n }\n parse(data, path, onLoad, onError) {\n let json;\n const extensions = {};\n const plugins = {};\n if (typeof data === \"string\") {\n json = JSON.parse(data);\n } else if (data instanceof ArrayBuffer) {\n const magic = decodeText(new Uint8Array(data.slice(0, 4)));\n if (magic === BINARY_EXTENSION_HEADER_MAGIC) {\n try {\n extensions[EXTENSIONS.KHR_BINARY_GLTF] = new GLTFBinaryExtension(data);\n } catch (error) {\n if (onError)\n onError(error);\n return;\n }\n json = JSON.parse(extensions[EXTENSIONS.KHR_BINARY_GLTF].content);\n } else {\n json = JSON.parse(decodeText(new Uint8Array(data)));\n }\n } else {\n json = data;\n }\n if (json.asset === void 0 || json.asset.version[0] < 2) {\n if (onError)\n onError(new Error(\"THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported.\"));\n return;\n }\n const parser = new GLTFParser(json, {\n path: path || this.resourcePath || \"\",\n crossOrigin: this.crossOrigin,\n requestHeader: this.requestHeader,\n manager: this.manager,\n ktx2Loader: this.ktx2Loader,\n meshoptDecoder: this.meshoptDecoder\n });\n parser.fileLoader.setRequestHeader(this.requestHeader);\n for (let i = 0; i < this.pluginCallbacks.length; i++) {\n const plugin = this.pluginCallbacks[i](parser);\n if (!plugin.name)\n console.error(\"THREE.GLTFLoader: Invalid plugin found: missing name\");\n plugins[plugin.name] = plugin;\n extensions[plugin.name] = true;\n }\n if (json.extensionsUsed) {\n for (let i = 0; i < json.extensionsUsed.length; ++i) {\n const extensionName = json.extensionsUsed[i];\n const extensionsRequired = json.extensionsRequired || [];\n switch (extensionName) {\n case EXTENSIONS.KHR_MATERIALS_UNLIT:\n extensions[extensionName] = new GLTFMaterialsUnlitExtension();\n break;\n case EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:\n extensions[extensionName] = new GLTFDracoMeshCompressionExtension(json, this.dracoLoader);\n break;\n case EXTENSIONS.KHR_TEXTURE_TRANSFORM:\n extensions[extensionName] = new GLTFTextureTransformExtension();\n break;\n case EXTENSIONS.KHR_MESH_QUANTIZATION:\n extensions[extensionName] = new GLTFMeshQuantizationExtension();\n break;\n default:\n if (extensionsRequired.indexOf(extensionName) >= 0 && plugins[extensionName] === void 0) {\n console.warn('THREE.GLTFLoader: Unknown extension \"' + extensionName + '\".');\n }\n }\n }\n }\n parser.setExtensions(extensions);\n parser.setPlugins(plugins);\n parser.parse(onLoad, onError);\n }\n parseAsync(data, path) {\n const scope = this;\n return new Promise(function(resolve, reject) {\n scope.parse(data, path, resolve, reject);\n });\n }\n}\nfunction GLTFRegistry() {\n let objects = {};\n return {\n get: function(key) {\n return objects[key];\n },\n add: function(key, object) {\n objects[key] = object;\n },\n remove: function(key) {\n delete objects[key];\n },\n removeAll: function() {\n objects = {};\n }\n };\n}\nconst EXTENSIONS = {\n KHR_BINARY_GLTF: \"KHR_binary_glTF\",\n KHR_DRACO_MESH_COMPRESSION: \"KHR_draco_mesh_compression\",\n KHR_LIGHTS_PUNCTUAL: \"KHR_lights_punctual\",\n KHR_MATERIALS_CLEARCOAT: \"KHR_materials_clearcoat\",\n KHR_MATERIALS_DISPERSION: \"KHR_materials_dispersion\",\n KHR_MATERIALS_IOR: \"KHR_materials_ior\",\n KHR_MATERIALS_SHEEN: \"KHR_materials_sheen\",\n KHR_MATERIALS_SPECULAR: \"KHR_materials_specular\",\n KHR_MATERIALS_TRANSMISSION: \"KHR_materials_transmission\",\n KHR_MATERIALS_IRIDESCENCE: \"KHR_materials_iridescence\",\n KHR_MATERIALS_ANISOTROPY: \"KHR_materials_anisotropy\",\n KHR_MATERIALS_UNLIT: \"KHR_materials_unlit\",\n KHR_MATERIALS_VOLUME: \"KHR_materials_volume\",\n KHR_TEXTURE_BASISU: \"KHR_texture_basisu\",\n KHR_TEXTURE_TRANSFORM: \"KHR_texture_transform\",\n KHR_MESH_QUANTIZATION: \"KHR_mesh_quantization\",\n KHR_MATERIALS_EMISSIVE_STRENGTH: \"KHR_materials_emissive_strength\",\n EXT_MATERIALS_BUMP: \"EXT_materials_bump\",\n EXT_TEXTURE_WEBP: \"EXT_texture_webp\",\n EXT_TEXTURE_AVIF: \"EXT_texture_avif\",\n EXT_MESHOPT_COMPRESSION: \"EXT_meshopt_compression\",\n EXT_MESH_GPU_INSTANCING: \"EXT_mesh_gpu_instancing\"\n};\nclass GLTFLightsExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;\n this.cache = { refs: {}, uses: {} };\n }\n _markDefs() {\n const parser = this.parser;\n const nodeDefs = this.parser.json.nodes || [];\n for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) {\n const nodeDef = nodeDefs[nodeIndex];\n if (nodeDef.extensions && nodeDef.extensions[this.name] && nodeDef.extensions[this.name].light !== void 0) {\n parser._addNodeRef(this.cache, nodeDef.extensions[this.name].light);\n }\n }\n }\n _loadLight(lightIndex) {\n const parser = this.parser;\n const cacheKey = \"light:\" + lightIndex;\n let dependency = parser.cache.get(cacheKey);\n if (dependency)\n return dependency;\n const json = parser.json;\n const extensions = json.extensions && json.extensions[this.name] || {};\n const lightDefs = extensions.lights || [];\n const lightDef = lightDefs[lightIndex];\n let lightNode;\n const color = new Color(16777215);\n if (lightDef.color !== void 0)\n color.setRGB(lightDef.color[0], lightDef.color[1], lightDef.color[2], LinearSRGBColorSpace);\n const range = lightDef.range !== void 0 ? lightDef.range : 0;\n switch (lightDef.type) {\n case \"directional\":\n lightNode = new DirectionalLight(color);\n lightNode.target.position.set(0, 0, -1);\n lightNode.add(lightNode.target);\n break;\n case \"point\":\n lightNode = new PointLight(color);\n lightNode.distance = range;\n break;\n case \"spot\":\n lightNode = new SpotLight(color);\n lightNode.distance = range;\n lightDef.spot = lightDef.spot || {};\n lightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== void 0 ? lightDef.spot.innerConeAngle : 0;\n lightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== void 0 ? lightDef.spot.outerConeAngle : Math.PI / 4;\n lightNode.angle = lightDef.spot.outerConeAngle;\n lightNode.penumbra = 1 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;\n lightNode.target.position.set(0, 0, -1);\n lightNode.add(lightNode.target);\n break;\n default:\n throw new Error(\"THREE.GLTFLoader: Unexpected light type: \" + lightDef.type);\n }\n lightNode.position.set(0, 0, 0);\n lightNode.decay = 2;\n assignExtrasToUserData(lightNode, lightDef);\n if (lightDef.intensity !== void 0)\n lightNode.intensity = lightDef.intensity;\n lightNode.name = parser.createUniqueName(lightDef.name || \"light_\" + lightIndex);\n dependency = Promise.resolve(lightNode);\n parser.cache.add(cacheKey, dependency);\n return dependency;\n }\n getDependency(type, index) {\n if (type !== \"light\")\n return;\n return this._loadLight(index);\n }\n createNodeAttachment(nodeIndex) {\n const self2 = this;\n const parser = this.parser;\n const json = parser.json;\n const nodeDef = json.nodes[nodeIndex];\n const lightDef = nodeDef.extensions && nodeDef.extensions[this.name] || {};\n const lightIndex = lightDef.light;\n if (lightIndex === void 0)\n return null;\n return this._loadLight(lightIndex).then(function(light) {\n return parser._getNodeRef(self2.cache, lightIndex, light);\n });\n }\n}\nclass GLTFMaterialsUnlitExtension {\n constructor() {\n this.name = EXTENSIONS.KHR_MATERIALS_UNLIT;\n }\n getMaterialType() {\n return MeshBasicMaterial;\n }\n extendParams(materialParams, materialDef, parser) {\n const pending = [];\n materialParams.color = new Color(1, 1, 1);\n materialParams.opacity = 1;\n const metallicRoughness = materialDef.pbrMetallicRoughness;\n if (metallicRoughness) {\n if (Array.isArray(metallicRoughness.baseColorFactor)) {\n const array = metallicRoughness.baseColorFactor;\n materialParams.color.setRGB(array[0], array[1], array[2], LinearSRGBColorSpace);\n materialParams.opacity = array[3];\n }\n if (metallicRoughness.baseColorTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"map\", metallicRoughness.baseColorTexture, SRGBColorSpace));\n }\n }\n return Promise.all(pending);\n }\n}\nclass GLTFMaterialsEmissiveStrengthExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_MATERIALS_EMISSIVE_STRENGTH;\n }\n extendMaterialParams(materialIndex, materialParams) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n return Promise.resolve();\n }\n const emissiveStrength = materialDef.extensions[this.name].emissiveStrength;\n if (emissiveStrength !== void 0) {\n materialParams.emissiveIntensity = emissiveStrength;\n }\n return Promise.resolve();\n }\n}\nclass GLTFMaterialsClearcoatExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_MATERIALS_CLEARCOAT;\n }\n getMaterialType(materialIndex) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name])\n return null;\n return MeshPhysicalMaterial;\n }\n extendMaterialParams(materialIndex, materialParams) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n return Promise.resolve();\n }\n const pending = [];\n const extension = materialDef.extensions[this.name];\n if (extension.clearcoatFactor !== void 0) {\n materialParams.clearcoat = extension.clearcoatFactor;\n }\n if (extension.clearcoatTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"clearcoatMap\", extension.clearcoatTexture));\n }\n if (extension.clearcoatRoughnessFactor !== void 0) {\n materialParams.clearcoatRoughness = extension.clearcoatRoughnessFactor;\n }\n if (extension.clearcoatRoughnessTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"clearcoatRoughnessMap\", extension.clearcoatRoughnessTexture));\n }\n if (extension.clearcoatNormalTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"clearcoatNormalMap\", extension.clearcoatNormalTexture));\n if (extension.clearcoatNormalTexture.scale !== void 0) {\n const scale = extension.clearcoatNormalTexture.scale;\n materialParams.clearcoatNormalScale = new Vector2(scale, scale);\n }\n }\n return Promise.all(pending);\n }\n}\nclass GLTFMaterialsDispersionExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_MATERIALS_DISPERSION;\n }\n getMaterialType(materialIndex) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name])\n return null;\n return MeshPhysicalMaterial;\n }\n extendMaterialParams(materialIndex, materialParams) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n return Promise.resolve();\n }\n const extension = materialDef.extensions[this.name];\n materialParams.dispersion = extension.dispersion !== void 0 ? extension.dispersion : 0;\n return Promise.resolve();\n }\n}\nclass GLTFMaterialsIridescenceExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_MATERIALS_IRIDESCENCE;\n }\n getMaterialType(materialIndex) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name])\n return null;\n return MeshPhysicalMaterial;\n }\n extendMaterialParams(materialIndex, materialParams) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n return Promise.resolve();\n }\n const pending = [];\n const extension = materialDef.extensions[this.name];\n if (extension.iridescenceFactor !== void 0) {\n materialParams.iridescence = extension.iridescenceFactor;\n }\n if (extension.iridescenceTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"iridescenceMap\", extension.iridescenceTexture));\n }\n if (extension.iridescenceIor !== void 0) {\n materialParams.iridescenceIOR = extension.iridescenceIor;\n }\n if (materialParams.iridescenceThicknessRange === void 0) {\n materialParams.iridescenceThicknessRange = [100, 400];\n }\n if (extension.iridescenceThicknessMinimum !== void 0) {\n materialParams.iridescenceThicknessRange[0] = extension.iridescenceThicknessMinimum;\n }\n if (extension.iridescenceThicknessMaximum !== void 0) {\n materialParams.iridescenceThicknessRange[1] = extension.iridescenceThicknessMaximum;\n }\n if (extension.iridescenceThicknessTexture !== void 0) {\n pending.push(\n parser.assignTexture(materialParams, \"iridescenceThicknessMap\", extension.iridescenceThicknessTexture)\n );\n }\n return Promise.all(pending);\n }\n}\nclass GLTFMaterialsSheenExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_MATERIALS_SHEEN;\n }\n getMaterialType(materialIndex) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name])\n return null;\n return MeshPhysicalMaterial;\n }\n extendMaterialParams(materialIndex, materialParams) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n return Promise.resolve();\n }\n const pending = [];\n materialParams.sheenColor = new Color(0, 0, 0);\n materialParams.sheenRoughness = 0;\n materialParams.sheen = 1;\n const extension = materialDef.extensions[this.name];\n if (extension.sheenColorFactor !== void 0) {\n const colorFactor = extension.sheenColorFactor;\n materialParams.sheenColor.setRGB(colorFactor[0], colorFactor[1], colorFactor[2], LinearSRGBColorSpace);\n }\n if (extension.sheenRoughnessFactor !== void 0) {\n materialParams.sheenRoughness = extension.sheenRoughnessFactor;\n }\n if (extension.sheenColorTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"sheenColorMap\", extension.sheenColorTexture, SRGBColorSpace));\n }\n if (extension.sheenRoughnessTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"sheenRoughnessMap\", extension.sheenRoughnessTexture));\n }\n return Promise.all(pending);\n }\n}\nclass GLTFMaterialsTransmissionExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_MATERIALS_TRANSMISSION;\n }\n getMaterialType(materialIndex) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name])\n return null;\n return MeshPhysicalMaterial;\n }\n extendMaterialParams(materialIndex, materialParams) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n return Promise.resolve();\n }\n const pending = [];\n const extension = materialDef.extensions[this.name];\n if (extension.transmissionFactor !== void 0) {\n materialParams.transmission = extension.transmissionFactor;\n }\n if (extension.transmissionTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"transmissionMap\", extension.transmissionTexture));\n }\n return Promise.all(pending);\n }\n}\nclass GLTFMaterialsVolumeExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_MATERIALS_VOLUME;\n }\n getMaterialType(materialIndex) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name])\n return null;\n return MeshPhysicalMaterial;\n }\n extendMaterialParams(materialIndex, materialParams) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n return Promise.resolve();\n }\n const pending = [];\n const extension = materialDef.extensions[this.name];\n materialParams.thickness = extension.thicknessFactor !== void 0 ? extension.thicknessFactor : 0;\n if (extension.thicknessTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"thicknessMap\", extension.thicknessTexture));\n }\n materialParams.attenuationDistance = extension.attenuationDistance || Infinity;\n const colorArray = extension.attenuationColor || [1, 1, 1];\n materialParams.attenuationColor = new Color().setRGB(\n colorArray[0],\n colorArray[1],\n colorArray[2],\n LinearSRGBColorSpace\n );\n return Promise.all(pending);\n }\n}\nclass GLTFMaterialsIorExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_MATERIALS_IOR;\n }\n getMaterialType(materialIndex) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name])\n return null;\n return MeshPhysicalMaterial;\n }\n extendMaterialParams(materialIndex, materialParams) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n return Promise.resolve();\n }\n const extension = materialDef.extensions[this.name];\n materialParams.ior = extension.ior !== void 0 ? extension.ior : 1.5;\n return Promise.resolve();\n }\n}\nclass GLTFMaterialsSpecularExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_MATERIALS_SPECULAR;\n }\n getMaterialType(materialIndex) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name])\n return null;\n return MeshPhysicalMaterial;\n }\n extendMaterialParams(materialIndex, materialParams) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n return Promise.resolve();\n }\n const pending = [];\n const extension = materialDef.extensions[this.name];\n materialParams.specularIntensity = extension.specularFactor !== void 0 ? extension.specularFactor : 1;\n if (extension.specularTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"specularIntensityMap\", extension.specularTexture));\n }\n const colorArray = extension.specularColorFactor || [1, 1, 1];\n materialParams.specularColor = new Color().setRGB(colorArray[0], colorArray[1], colorArray[2], LinearSRGBColorSpace);\n if (extension.specularColorTexture !== void 0) {\n pending.push(\n parser.assignTexture(materialParams, \"specularColorMap\", extension.specularColorTexture, SRGBColorSpace)\n );\n }\n return Promise.all(pending);\n }\n}\nclass GLTFMaterialsBumpExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.EXT_MATERIALS_BUMP;\n }\n getMaterialType(materialIndex) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name])\n return null;\n return MeshPhysicalMaterial;\n }\n extendMaterialParams(materialIndex, materialParams) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n return Promise.resolve();\n }\n const pending = [];\n const extension = materialDef.extensions[this.name];\n materialParams.bumpScale = extension.bumpFactor !== void 0 ? extension.bumpFactor : 1;\n if (extension.bumpTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"bumpMap\", extension.bumpTexture));\n }\n return Promise.all(pending);\n }\n}\nclass GLTFMaterialsAnisotropyExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_MATERIALS_ANISOTROPY;\n }\n getMaterialType(materialIndex) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name])\n return null;\n return MeshPhysicalMaterial;\n }\n extendMaterialParams(materialIndex, materialParams) {\n const parser = this.parser;\n const materialDef = parser.json.materials[materialIndex];\n if (!materialDef.extensions || !materialDef.extensions[this.name]) {\n return Promise.resolve();\n }\n const pending = [];\n const extension = materialDef.extensions[this.name];\n if (extension.anisotropyStrength !== void 0) {\n materialParams.anisotropy = extension.anisotropyStrength;\n }\n if (extension.anisotropyRotation !== void 0) {\n materialParams.anisotropyRotation = extension.anisotropyRotation;\n }\n if (extension.anisotropyTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"anisotropyMap\", extension.anisotropyTexture));\n }\n return Promise.all(pending);\n }\n}\nclass GLTFTextureBasisUExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.KHR_TEXTURE_BASISU;\n }\n loadTexture(textureIndex) {\n const parser = this.parser;\n const json = parser.json;\n const textureDef = json.textures[textureIndex];\n if (!textureDef.extensions || !textureDef.extensions[this.name]) {\n return null;\n }\n const extension = textureDef.extensions[this.name];\n const loader = parser.options.ktx2Loader;\n if (!loader) {\n if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) {\n throw new Error(\"THREE.GLTFLoader: setKTX2Loader must be called before loading KTX2 textures\");\n } else {\n return null;\n }\n }\n return parser.loadTextureImage(textureIndex, extension.source, loader);\n }\n}\nclass GLTFTextureWebPExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.EXT_TEXTURE_WEBP;\n this.isSupported = null;\n }\n loadTexture(textureIndex) {\n const name = this.name;\n const parser = this.parser;\n const json = parser.json;\n const textureDef = json.textures[textureIndex];\n if (!textureDef.extensions || !textureDef.extensions[name]) {\n return null;\n }\n const extension = textureDef.extensions[name];\n const source = json.images[extension.source];\n let loader = parser.textureLoader;\n if (source.uri) {\n const handler = parser.options.manager.getHandler(source.uri);\n if (handler !== null)\n loader = handler;\n }\n return this.detectSupport().then(function(isSupported) {\n if (isSupported)\n return parser.loadTextureImage(textureIndex, extension.source, loader);\n if (json.extensionsRequired && json.extensionsRequired.indexOf(name) >= 0) {\n throw new Error(\"THREE.GLTFLoader: WebP required by asset but unsupported.\");\n }\n return parser.loadTexture(textureIndex);\n });\n }\n detectSupport() {\n if (!this.isSupported) {\n this.isSupported = new Promise(function(resolve) {\n const image = new Image();\n image.src = \"data:image/webp;base64,UklGRiIAAABXRUJQVlA4IBYAAAAwAQCdASoBAAEADsD+JaQAA3AAAAAA\";\n image.onload = image.onerror = function() {\n resolve(image.height === 1);\n };\n });\n }\n return this.isSupported;\n }\n}\nclass GLTFTextureAVIFExtension {\n constructor(parser) {\n this.parser = parser;\n this.name = EXTENSIONS.EXT_TEXTURE_AVIF;\n this.isSupported = null;\n }\n loadTexture(textureIndex) {\n const name = this.name;\n const parser = this.parser;\n const json = parser.json;\n const textureDef = json.textures[textureIndex];\n if (!textureDef.extensions || !textureDef.extensions[name]) {\n return null;\n }\n const extension = textureDef.extensions[name];\n const source = json.images[extension.source];\n let loader = parser.textureLoader;\n if (source.uri) {\n const handler = parser.options.manager.getHandler(source.uri);\n if (handler !== null)\n loader = handler;\n }\n return this.detectSupport().then(function(isSupported) {\n if (isSupported)\n return parser.loadTextureImage(textureIndex, extension.source, loader);\n if (json.extensionsRequired && json.extensionsRequired.indexOf(name) >= 0) {\n throw new Error(\"THREE.GLTFLoader: AVIF required by asset but unsupported.\");\n }\n return parser.loadTexture(textureIndex);\n });\n }\n detectSupport() {\n if (!this.isSupported) {\n this.isSupported = new Promise(function(resolve) {\n const image = new Image();\n image.src = \"data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=\";\n image.onload = image.onerror = function() {\n resolve(image.height === 1);\n };\n });\n }\n return this.isSupported;\n }\n}\nclass GLTFMeshoptCompression {\n constructor(parser) {\n this.name = EXTENSIONS.EXT_MESHOPT_COMPRESSION;\n this.parser = parser;\n }\n loadBufferView(index) {\n const json = this.parser.json;\n const bufferView = json.bufferViews[index];\n if (bufferView.extensions && bufferView.extensions[this.name]) {\n const extensionDef = bufferView.extensions[this.name];\n const buffer = this.parser.getDependency(\"buffer\", extensionDef.buffer);\n const decoder = this.parser.options.meshoptDecoder;\n if (!decoder || !decoder.supported) {\n if (json.extensionsRequired && json.extensionsRequired.indexOf(this.name) >= 0) {\n throw new Error(\"THREE.GLTFLoader: setMeshoptDecoder must be called before loading compressed files\");\n } else {\n return null;\n }\n }\n return buffer.then(function(res) {\n const byteOffset = extensionDef.byteOffset || 0;\n const byteLength = extensionDef.byteLength || 0;\n const count = extensionDef.count;\n const stride = extensionDef.byteStride;\n const source = new Uint8Array(res, byteOffset, byteLength);\n if (decoder.decodeGltfBufferAsync) {\n return decoder.decodeGltfBufferAsync(count, stride, source, extensionDef.mode, extensionDef.filter).then(function(res2) {\n return res2.buffer;\n });\n } else {\n return decoder.ready.then(function() {\n const result = new ArrayBuffer(count * stride);\n decoder.decodeGltfBuffer(\n new Uint8Array(result),\n count,\n stride,\n source,\n extensionDef.mode,\n extensionDef.filter\n );\n return result;\n });\n }\n });\n } else {\n return null;\n }\n }\n}\nclass GLTFMeshGpuInstancing {\n constructor(parser) {\n this.name = EXTENSIONS.EXT_MESH_GPU_INSTANCING;\n this.parser = parser;\n }\n createNodeMesh(nodeIndex) {\n const json = this.parser.json;\n const nodeDef = json.nodes[nodeIndex];\n if (!nodeDef.extensions || !nodeDef.extensions[this.name] || nodeDef.mesh === void 0) {\n return null;\n }\n const meshDef = json.meshes[nodeDef.mesh];\n for (const primitive of meshDef.primitives) {\n if (primitive.mode !== WEBGL_CONSTANTS.TRIANGLES && primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_STRIP && primitive.mode !== WEBGL_CONSTANTS.TRIANGLE_FAN && primitive.mode !== void 0) {\n return null;\n }\n }\n const extensionDef = nodeDef.extensions[this.name];\n const attributesDef = extensionDef.attributes;\n const pending = [];\n const attributes = {};\n for (const key in attributesDef) {\n pending.push(\n this.parser.getDependency(\"accessor\", attributesDef[key]).then((accessor) => {\n attributes[key] = accessor;\n return attributes[key];\n })\n );\n }\n if (pending.length < 1) {\n return null;\n }\n pending.push(this.parser.createNodeMesh(nodeIndex));\n return Promise.all(pending).then((results) => {\n const nodeObject = results.pop();\n const meshes = nodeObject.isGroup ? nodeObject.children : [nodeObject];\n const count = results[0].count;\n const instancedMeshes = [];\n for (const mesh of meshes) {\n const m = new Matrix4();\n const p = new Vector3();\n const q = new Quaternion();\n const s = new Vector3(1, 1, 1);\n const instancedMesh = new InstancedMesh(mesh.geometry, mesh.material, count);\n for (let i = 0; i < count; i++) {\n if (attributes.TRANSLATION) {\n p.fromBufferAttribute(attributes.TRANSLATION, i);\n }\n if (attributes.ROTATION) {\n q.fromBufferAttribute(attributes.ROTATION, i);\n }\n if (attributes.SCALE) {\n s.fromBufferAttribute(attributes.SCALE, i);\n }\n instancedMesh.setMatrixAt(i, m.compose(p, q, s));\n }\n for (const attributeName in attributes) {\n if (attributeName === \"_COLOR_0\") {\n const attr = attributes[attributeName];\n instancedMesh.instanceColor = new InstancedBufferAttribute(attr.array, attr.itemSize, attr.normalized);\n } else if (attributeName !== \"TRANSLATION\" && attributeName !== \"ROTATION\" && attributeName !== \"SCALE\") {\n mesh.geometry.setAttribute(attributeName, attributes[attributeName]);\n }\n }\n Object3D.prototype.copy.call(instancedMesh, mesh);\n this.parser.assignFinalMaterial(instancedMesh);\n instancedMeshes.push(instancedMesh);\n }\n if (nodeObject.isGroup) {\n nodeObject.clear();\n nodeObject.add(...instancedMeshes);\n return nodeObject;\n }\n return instancedMeshes[0];\n });\n }\n}\nconst BINARY_EXTENSION_HEADER_MAGIC = \"glTF\";\nconst BINARY_EXTENSION_HEADER_LENGTH = 12;\nconst BINARY_EXTENSION_CHUNK_TYPES = { JSON: 1313821514, BIN: 5130562 };\nclass GLTFBinaryExtension {\n constructor(data) {\n this.name = EXTENSIONS.KHR_BINARY_GLTF;\n this.content = null;\n this.body = null;\n const headerView = new DataView(data, 0, BINARY_EXTENSION_HEADER_LENGTH);\n this.header = {\n magic: decodeText(new Uint8Array(data.slice(0, 4))),\n version: headerView.getUint32(4, true),\n length: headerView.getUint32(8, true)\n };\n if (this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC) {\n throw new Error(\"THREE.GLTFLoader: Unsupported glTF-Binary header.\");\n } else if (this.header.version < 2) {\n throw new Error(\"THREE.GLTFLoader: Legacy binary file detected.\");\n }\n const chunkContentsLength = this.header.length - BINARY_EXTENSION_HEADER_LENGTH;\n const chunkView = new DataView(data, BINARY_EXTENSION_HEADER_LENGTH);\n let chunkIndex = 0;\n while (chunkIndex < chunkContentsLength) {\n const chunkLength = chunkView.getUint32(chunkIndex, true);\n chunkIndex += 4;\n const chunkType = chunkView.getUint32(chunkIndex, true);\n chunkIndex += 4;\n if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON) {\n const contentArray = new Uint8Array(data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength);\n this.content = decodeText(contentArray);\n } else if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN) {\n const byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;\n this.body = data.slice(byteOffset, byteOffset + chunkLength);\n }\n chunkIndex += chunkLength;\n }\n if (this.content === null) {\n throw new Error(\"THREE.GLTFLoader: JSON content not found.\");\n }\n }\n}\nclass GLTFDracoMeshCompressionExtension {\n constructor(json, dracoLoader) {\n if (!dracoLoader) {\n throw new Error(\"THREE.GLTFLoader: No DRACOLoader instance provided.\");\n }\n this.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;\n this.json = json;\n this.dracoLoader = dracoLoader;\n this.dracoLoader.preload();\n }\n decodePrimitive(primitive, parser) {\n const json = this.json;\n const dracoLoader = this.dracoLoader;\n const bufferViewIndex = primitive.extensions[this.name].bufferView;\n const gltfAttributeMap = primitive.extensions[this.name].attributes;\n const threeAttributeMap = {};\n const attributeNormalizedMap = {};\n const attributeTypeMap = {};\n for (const attributeName in gltfAttributeMap) {\n const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase();\n threeAttributeMap[threeAttributeName] = gltfAttributeMap[attributeName];\n }\n for (const attributeName in primitive.attributes) {\n const threeAttributeName = ATTRIBUTES[attributeName] || attributeName.toLowerCase();\n if (gltfAttributeMap[attributeName] !== void 0) {\n const accessorDef = json.accessors[primitive.attributes[attributeName]];\n const componentType = WEBGL_COMPONENT_TYPES[accessorDef.componentType];\n attributeTypeMap[threeAttributeName] = componentType.name;\n attributeNormalizedMap[threeAttributeName] = accessorDef.normalized === true;\n }\n }\n return parser.getDependency(\"bufferView\", bufferViewIndex).then(function(bufferView) {\n return new Promise(function(resolve, reject) {\n dracoLoader.decodeDracoFile(\n bufferView,\n function(geometry) {\n for (const attributeName in geometry.attributes) {\n const attribute = geometry.attributes[attributeName];\n const normalized = attributeNormalizedMap[attributeName];\n if (normalized !== void 0)\n attribute.normalized = normalized;\n }\n resolve(geometry);\n },\n threeAttributeMap,\n attributeTypeMap,\n LinearSRGBColorSpace,\n reject\n );\n });\n });\n }\n}\nclass GLTFTextureTransformExtension {\n constructor() {\n this.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;\n }\n extendTexture(texture, transform) {\n if ((transform.texCoord === void 0 || transform.texCoord === texture.channel) && transform.offset === void 0 && transform.rotation === void 0 && transform.scale === void 0) {\n return texture;\n }\n texture = texture.clone();\n if (transform.texCoord !== void 0) {\n texture.channel = transform.texCoord;\n }\n if (transform.offset !== void 0) {\n texture.offset.fromArray(transform.offset);\n }\n if (transform.rotation !== void 0) {\n texture.rotation = transform.rotation;\n }\n if (transform.scale !== void 0) {\n texture.repeat.fromArray(transform.scale);\n }\n texture.needsUpdate = true;\n return texture;\n }\n}\nclass GLTFMeshQuantizationExtension {\n constructor() {\n this.name = EXTENSIONS.KHR_MESH_QUANTIZATION;\n }\n}\nclass GLTFCubicSplineInterpolant extends Interpolant {\n constructor(parameterPositions, sampleValues, sampleSize, resultBuffer) {\n super(parameterPositions, sampleValues, sampleSize, resultBuffer);\n }\n copySampleValue_(index) {\n const result = this.resultBuffer, values = this.sampleValues, valueSize = this.valueSize, offset = index * valueSize * 3 + valueSize;\n for (let i = 0; i !== valueSize; i++) {\n result[i] = values[offset + i];\n }\n return result;\n }\n interpolate_(i1, t0, t, t1) {\n const result = this.resultBuffer;\n const values = this.sampleValues;\n const stride = this.valueSize;\n const stride2 = stride * 2;\n const stride3 = stride * 3;\n const td = t1 - t0;\n const p = (t - t0) / td;\n const pp = p * p;\n const ppp = pp * p;\n const offset1 = i1 * stride3;\n const offset0 = offset1 - stride3;\n const s2 = -2 * ppp + 3 * pp;\n const s3 = ppp - pp;\n const s0 = 1 - s2;\n const s1 = s3 - pp + p;\n for (let i = 0; i !== stride; i++) {\n const p0 = values[offset0 + i + stride];\n const m0 = values[offset0 + i + stride2] * td;\n const p1 = values[offset1 + i + stride];\n const m1 = values[offset1 + i] * td;\n result[i] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;\n }\n return result;\n }\n}\nconst _q = /* @__PURE__ */ new Quaternion();\nclass GLTFCubicSplineQuaternionInterpolant extends GLTFCubicSplineInterpolant {\n interpolate_(i1, t0, t, t1) {\n const result = super.interpolate_(i1, t0, t, t1);\n _q.fromArray(result).normalize().toArray(result);\n return result;\n }\n}\nconst WEBGL_CONSTANTS = {\n FLOAT: 5126,\n //FLOAT_MAT2: 35674,\n FLOAT_MAT3: 35675,\n FLOAT_MAT4: 35676,\n FLOAT_VEC2: 35664,\n FLOAT_VEC3: 35665,\n FLOAT_VEC4: 35666,\n LINEAR: 9729,\n REPEAT: 10497,\n SAMPLER_2D: 35678,\n POINTS: 0,\n LINES: 1,\n LINE_LOOP: 2,\n LINE_STRIP: 3,\n TRIANGLES: 4,\n TRIANGLE_STRIP: 5,\n TRIANGLE_FAN: 6,\n UNSIGNED_BYTE: 5121,\n UNSIGNED_SHORT: 5123\n};\nconst WEBGL_COMPONENT_TYPES = {\n 5120: Int8Array,\n 5121: Uint8Array,\n 5122: Int16Array,\n 5123: Uint16Array,\n 5125: Uint32Array,\n 5126: Float32Array\n};\nconst WEBGL_FILTERS = {\n 9728: NearestFilter,\n 9729: LinearFilter,\n 9984: NearestMipmapNearestFilter,\n 9985: LinearMipmapNearestFilter,\n 9986: NearestMipmapLinearFilter,\n 9987: LinearMipmapLinearFilter\n};\nconst WEBGL_WRAPPINGS = {\n 33071: ClampToEdgeWrapping,\n 33648: MirroredRepeatWrapping,\n 10497: RepeatWrapping\n};\nconst WEBGL_TYPE_SIZES = {\n SCALAR: 1,\n VEC2: 2,\n VEC3: 3,\n VEC4: 4,\n MAT2: 4,\n MAT3: 9,\n MAT4: 16\n};\nconst ATTRIBUTES = {\n POSITION: \"position\",\n NORMAL: \"normal\",\n TANGENT: \"tangent\",\n // uv => uv1, 4 uv channels\n // https://github.com/mrdoob/three.js/pull/25943\n // https://github.com/mrdoob/three.js/pull/25788\n ...version >= 152 ? {\n TEXCOORD_0: \"uv\",\n TEXCOORD_1: \"uv1\",\n TEXCOORD_2: \"uv2\",\n TEXCOORD_3: \"uv3\"\n } : {\n TEXCOORD_0: \"uv\",\n TEXCOORD_1: \"uv2\"\n },\n COLOR_0: \"color\",\n WEIGHTS_0: \"skinWeight\",\n JOINTS_0: \"skinIndex\"\n};\nconst PATH_PROPERTIES = {\n scale: \"scale\",\n translation: \"position\",\n rotation: \"quaternion\",\n weights: \"morphTargetInfluences\"\n};\nconst INTERPOLATION = {\n CUBICSPLINE: void 0,\n // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Each\n // keyframe track will be initialized with a default interpolation type, then modified.\n LINEAR: InterpolateLinear,\n STEP: InterpolateDiscrete\n};\nconst ALPHA_MODES = {\n OPAQUE: \"OPAQUE\",\n MASK: \"MASK\",\n BLEND: \"BLEND\"\n};\nfunction createDefaultMaterial(cache) {\n if (cache[\"DefaultMaterial\"] === void 0) {\n cache[\"DefaultMaterial\"] = new MeshStandardMaterial({\n color: 16777215,\n emissive: 0,\n metalness: 1,\n roughness: 1,\n transparent: false,\n depthTest: true,\n side: FrontSide\n });\n }\n return cache[\"DefaultMaterial\"];\n}\nfunction addUnknownExtensionsToUserData(knownExtensions, object, objectDef) {\n for (const name in objectDef.extensions) {\n if (knownExtensions[name] === void 0) {\n object.userData.gltfExtensions = object.userData.gltfExtensions || {};\n object.userData.gltfExtensions[name] = objectDef.extensions[name];\n }\n }\n}\nfunction assignExtrasToUserData(object, gltfDef) {\n if (gltfDef.extras !== void 0) {\n if (typeof gltfDef.extras === \"object\") {\n Object.assign(object.userData, gltfDef.extras);\n } else {\n console.warn(\"THREE.GLTFLoader: Ignoring primitive type .extras, \" + gltfDef.extras);\n }\n }\n}\nfunction addMorphTargets(geometry, targets, parser) {\n let hasMorphPosition = false;\n let hasMorphNormal = false;\n let hasMorphColor = false;\n for (let i = 0, il = targets.length; i < il; i++) {\n const target = targets[i];\n if (target.POSITION !== void 0)\n hasMorphPosition = true;\n if (target.NORMAL !== void 0)\n hasMorphNormal = true;\n if (target.COLOR_0 !== void 0)\n hasMorphColor = true;\n if (hasMorphPosition && hasMorphNormal && hasMorphColor)\n break;\n }\n if (!hasMorphPosition && !hasMorphNormal && !hasMorphColor)\n return Promise.resolve(geometry);\n const pendingPositionAccessors = [];\n const pendingNormalAccessors = [];\n const pendingColorAccessors = [];\n for (let i = 0, il = targets.length; i < il; i++) {\n const target = targets[i];\n if (hasMorphPosition) {\n const pendingAccessor = target.POSITION !== void 0 ? parser.getDependency(\"accessor\", target.POSITION) : geometry.attributes.position;\n pendingPositionAccessors.push(pendingAccessor);\n }\n if (hasMorphNormal) {\n const pendingAccessor = target.NORMAL !== void 0 ? parser.getDependency(\"accessor\", target.NORMAL) : geometry.attributes.normal;\n pendingNormalAccessors.push(pendingAccessor);\n }\n if (hasMorphColor) {\n const pendingAccessor = target.COLOR_0 !== void 0 ? parser.getDependency(\"accessor\", target.COLOR_0) : geometry.attributes.color;\n pendingColorAccessors.push(pendingAccessor);\n }\n }\n return Promise.all([\n Promise.all(pendingPositionAccessors),\n Promise.all(pendingNormalAccessors),\n Promise.all(pendingColorAccessors)\n ]).then(function(accessors) {\n const morphPositions = accessors[0];\n const morphNormals = accessors[1];\n const morphColors = accessors[2];\n if (hasMorphPosition)\n geometry.morphAttributes.position = morphPositions;\n if (hasMorphNormal)\n geometry.morphAttributes.normal = morphNormals;\n if (hasMorphColor)\n geometry.morphAttributes.color = morphColors;\n geometry.morphTargetsRelative = true;\n return geometry;\n });\n}\nfunction updateMorphTargets(mesh, meshDef) {\n mesh.updateMorphTargets();\n if (meshDef.weights !== void 0) {\n for (let i = 0, il = meshDef.weights.length; i < il; i++) {\n mesh.morphTargetInfluences[i] = meshDef.weights[i];\n }\n }\n if (meshDef.extras && Array.isArray(meshDef.extras.targetNames)) {\n const targetNames = meshDef.extras.targetNames;\n if (mesh.morphTargetInfluences.length === targetNames.length) {\n mesh.morphTargetDictionary = {};\n for (let i = 0, il = targetNames.length; i < il; i++) {\n mesh.morphTargetDictionary[targetNames[i]] = i;\n }\n } else {\n console.warn(\"THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.\");\n }\n }\n}\nfunction createPrimitiveKey(primitiveDef) {\n let geometryKey;\n const dracoExtension = primitiveDef.extensions && primitiveDef.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION];\n if (dracoExtension) {\n geometryKey = \"draco:\" + dracoExtension.bufferView + \":\" + dracoExtension.indices + \":\" + createAttributesKey(dracoExtension.attributes);\n } else {\n geometryKey = primitiveDef.indices + \":\" + createAttributesKey(primitiveDef.attributes) + \":\" + primitiveDef.mode;\n }\n if (primitiveDef.targets !== void 0) {\n for (let i = 0, il = primitiveDef.targets.length; i < il; i++) {\n geometryKey += \":\" + createAttributesKey(primitiveDef.targets[i]);\n }\n }\n return geometryKey;\n}\nfunction createAttributesKey(attributes) {\n let attributesKey = \"\";\n const keys = Object.keys(attributes).sort();\n for (let i = 0, il = keys.length; i < il; i++) {\n attributesKey += keys[i] + \":\" + attributes[keys[i]] + \";\";\n }\n return attributesKey;\n}\nfunction getNormalizedComponentScale(constructor) {\n switch (constructor) {\n case Int8Array:\n return 1 / 127;\n case Uint8Array:\n return 1 / 255;\n case Int16Array:\n return 1 / 32767;\n case Uint16Array:\n return 1 / 65535;\n default:\n throw new Error(\"THREE.GLTFLoader: Unsupported normalized accessor component type.\");\n }\n}\nfunction getImageURIMimeType(uri) {\n if (uri.search(/\\.jpe?g($|\\?)/i) > 0 || uri.search(/^data\\:image\\/jpeg/) === 0)\n return \"image/jpeg\";\n if (uri.search(/\\.webp($|\\?)/i) > 0 || uri.search(/^data\\:image\\/webp/) === 0)\n return \"image/webp\";\n return \"image/png\";\n}\nconst _identityMatrix = /* @__PURE__ */ new Matrix4();\nclass GLTFParser {\n constructor(json = {}, options = {}) {\n this.json = json;\n this.extensions = {};\n this.plugins = {};\n this.options = options;\n this.cache = new GLTFRegistry();\n this.associations = /* @__PURE__ */ new Map();\n this.primitiveCache = {};\n this.nodeCache = {};\n this.meshCache = { refs: {}, uses: {} };\n this.cameraCache = { refs: {}, uses: {} };\n this.lightCache = { refs: {}, uses: {} };\n this.sourceCache = {};\n this.textureCache = {};\n this.nodeNamesUsed = {};\n let isSafari = false;\n let isFirefox = false;\n let firefoxVersion = -1;\n if (typeof navigator !== \"undefined\" && typeof navigator.userAgent !== \"undefined\") {\n isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent) === true;\n isFirefox = navigator.userAgent.indexOf(\"Firefox\") > -1;\n firefoxVersion = isFirefox ? navigator.userAgent.match(/Firefox\\/([0-9]+)\\./)[1] : -1;\n }\n if (typeof createImageBitmap === \"undefined\" || isSafari || isFirefox && firefoxVersion < 98) {\n this.textureLoader = new TextureLoader(this.options.manager);\n } else {\n this.textureLoader = new ImageBitmapLoader(this.options.manager);\n }\n this.textureLoader.setCrossOrigin(this.options.crossOrigin);\n this.textureLoader.setRequestHeader(this.options.requestHeader);\n this.fileLoader = new FileLoader(this.options.manager);\n this.fileLoader.setResponseType(\"arraybuffer\");\n if (this.options.crossOrigin === \"use-credentials\") {\n this.fileLoader.setWithCredentials(true);\n }\n }\n setExtensions(extensions) {\n this.extensions = extensions;\n }\n setPlugins(plugins) {\n this.plugins = plugins;\n }\n parse(onLoad, onError) {\n const parser = this;\n const json = this.json;\n const extensions = this.extensions;\n this.cache.removeAll();\n this.nodeCache = {};\n this._invokeAll(function(ext) {\n return ext._markDefs && ext._markDefs();\n });\n Promise.all(\n this._invokeAll(function(ext) {\n return ext.beforeRoot && ext.beforeRoot();\n })\n ).then(function() {\n return Promise.all([\n parser.getDependencies(\"scene\"),\n parser.getDependencies(\"animation\"),\n parser.getDependencies(\"camera\")\n ]);\n }).then(function(dependencies) {\n const result = {\n scene: dependencies[0][json.scene || 0],\n scenes: dependencies[0],\n animations: dependencies[1],\n cameras: dependencies[2],\n asset: json.asset,\n parser,\n userData: {}\n };\n addUnknownExtensionsToUserData(extensions, result, json);\n assignExtrasToUserData(result, json);\n return Promise.all(\n parser._invokeAll(function(ext) {\n return ext.afterRoot && ext.afterRoot(result);\n })\n ).then(function() {\n for (const scene of result.scenes) {\n scene.updateMatrixWorld();\n }\n onLoad(result);\n });\n }).catch(onError);\n }\n /**\n * Marks the special nodes/meshes in json for efficient parse.\n */\n _markDefs() {\n const nodeDefs = this.json.nodes || [];\n const skinDefs = this.json.skins || [];\n const meshDefs = this.json.meshes || [];\n for (let skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex++) {\n const joints = skinDefs[skinIndex].joints;\n for (let i = 0, il = joints.length; i < il; i++) {\n nodeDefs[joints[i]].isBone = true;\n }\n }\n for (let nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) {\n const nodeDef = nodeDefs[nodeIndex];\n if (nodeDef.mesh !== void 0) {\n this._addNodeRef(this.meshCache, nodeDef.mesh);\n if (nodeDef.skin !== void 0) {\n meshDefs[nodeDef.mesh].isSkinnedMesh = true;\n }\n }\n if (nodeDef.camera !== void 0) {\n this._addNodeRef(this.cameraCache, nodeDef.camera);\n }\n }\n }\n /**\n * Counts references to shared node / Object3D resources. These resources\n * can be reused, or \"instantiated\", at multiple nodes in the scene\n * hierarchy. Mesh, Camera, and Light instances are instantiated and must\n * be marked. Non-scenegraph resources (like Materials, Geometries, and\n * Textures) can be reused directly and are not marked here.\n *\n * Example: CesiumMilkTruck sample model reuses \"Wheel\" meshes.\n */\n _addNodeRef(cache, index) {\n if (index === void 0)\n return;\n if (cache.refs[index] === void 0) {\n cache.refs[index] = cache.uses[index] = 0;\n }\n cache.refs[index]++;\n }\n /** Returns a reference to a shared resource, cloning it if necessary. */\n _getNodeRef(cache, index, object) {\n if (cache.refs[index] <= 1)\n return object;\n const ref = object.clone();\n const updateMappings = (original, clone) => {\n const mappings = this.associations.get(original);\n if (mappings != null) {\n this.associations.set(clone, mappings);\n }\n for (const [i, child] of original.children.entries()) {\n updateMappings(child, clone.children[i]);\n }\n };\n updateMappings(object, ref);\n ref.name += \"_instance_\" + cache.uses[index]++;\n return ref;\n }\n _invokeOne(func) {\n const extensions = Object.values(this.plugins);\n extensions.push(this);\n for (let i = 0; i < extensions.length; i++) {\n const result = func(extensions[i]);\n if (result)\n return result;\n }\n return null;\n }\n _invokeAll(func) {\n const extensions = Object.values(this.plugins);\n extensions.unshift(this);\n const pending = [];\n for (let i = 0; i < extensions.length; i++) {\n const result = func(extensions[i]);\n if (result)\n pending.push(result);\n }\n return pending;\n }\n /**\n * Requests the specified dependency asynchronously, with caching.\n * @param {string} type\n * @param {number} index\n * @return {Promise<Object3D|Material|THREE.Texture|AnimationClip|ArrayBuffer|Object>}\n */\n getDependency(type, index) {\n const cacheKey = type + \":\" + index;\n let dependency = this.cache.get(cacheKey);\n if (!dependency) {\n switch (type) {\n case \"scene\":\n dependency = this.loadScene(index);\n break;\n case \"node\":\n dependency = this._invokeOne(function(ext) {\n return ext.loadNode && ext.loadNode(index);\n });\n break;\n case \"mesh\":\n dependency = this._invokeOne(function(ext) {\n return ext.loadMesh && ext.loadMesh(index);\n });\n break;\n case \"accessor\":\n dependency = this.loadAccessor(index);\n break;\n case \"bufferView\":\n dependency = this._invokeOne(function(ext) {\n return ext.loadBufferView && ext.loadBufferView(index);\n });\n break;\n case \"buffer\":\n dependency = this.loadBuffer(index);\n break;\n case \"material\":\n dependency = this._invokeOne(function(ext) {\n return ext.loadMaterial && ext.loadMaterial(index);\n });\n break;\n case \"texture\":\n dependency = this._invokeOne(function(ext) {\n return ext.loadTexture && ext.loadTexture(index);\n });\n break;\n case \"skin\":\n dependency = this.loadSkin(index);\n break;\n case \"animation\":\n dependency = this._invokeOne(function(ext) {\n return ext.loadAnimation && ext.loadAnimation(index);\n });\n break;\n case \"camera\":\n dependency = this.loadCamera(index);\n break;\n default:\n dependency = this._invokeOne(function(ext) {\n return ext != this && ext.getDependency && ext.getDependency(type, index);\n });\n if (!dependency) {\n throw new Error(\"Unknown type: \" + type);\n }\n break;\n }\n this.cache.add(cacheKey, dependency);\n }\n return dependency;\n }\n /**\n * Requests all dependencies of the specified type asynchronously, with caching.\n * @param {string} type\n * @return {Promise<Array<Object>>}\n */\n getDependencies(type) {\n let dependencies = this.cache.get(type);\n if (!dependencies) {\n const parser = this;\n const defs = this.json[type + (type === \"mesh\" ? \"es\" : \"s\")] || [];\n dependencies = Promise.all(\n defs.map(function(def, index) {\n return parser.getDependency(type, index);\n })\n );\n this.cache.add(type, dependencies);\n }\n return dependencies;\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n * @param {number} bufferIndex\n * @return {Promise<ArrayBuffer>}\n */\n loadBuffer(bufferIndex) {\n const bufferDef = this.json.buffers[bufferIndex];\n const loader = this.fileLoader;\n if (bufferDef.type && bufferDef.type !== \"arraybuffer\") {\n throw new Error(\"THREE.GLTFLoader: \" + bufferDef.type + \" buffer type is not supported.\");\n }\n if (bufferDef.uri === void 0 && bufferIndex === 0) {\n return Promise.resolve(this.extensions[EXTENSIONS.KHR_BINARY_GLTF].body);\n }\n const options = this.options;\n return new Promise(function(resolve, reject) {\n loader.load(LoaderUtils.resolveURL(bufferDef.uri, options.path), resolve, void 0, function() {\n reject(new Error('THREE.GLTFLoader: Failed to load buffer \"' + bufferDef.uri + '\".'));\n });\n });\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-views\n * @param {number} bufferViewIndex\n * @return {Promise<ArrayBuffer>}\n */\n loadBufferView(bufferViewIndex) {\n const bufferViewDef = this.json.bufferViews[bufferViewIndex];\n return this.getDependency(\"buffer\", bufferViewDef.buffer).then(function(buffer) {\n const byteLength = bufferViewDef.byteLength || 0;\n const byteOffset = bufferViewDef.byteOffset || 0;\n return buffer.slice(byteOffset, byteOffset + byteLength);\n });\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessors\n * @param {number} accessorIndex\n * @return {Promise<BufferAttribute|InterleavedBufferAttribute>}\n */\n loadAccessor(accessorIndex) {\n const parser = this;\n const json = this.json;\n const accessorDef = this.json.accessors[accessorIndex];\n if (accessorDef.bufferView === void 0 && accessorDef.sparse === void 0) {\n const itemSize = WEBGL_TYPE_SIZES[accessorDef.type];\n const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType];\n const normalized = accessorDef.normalized === true;\n const array = new TypedArray(accessorDef.count * itemSize);\n return Promise.resolve(new BufferAttribute(array, itemSize, normalized));\n }\n const pendingBufferViews = [];\n if (accessorDef.bufferView !== void 0) {\n pendingBufferViews.push(this.getDependency(\"bufferView\", accessorDef.bufferView));\n } else {\n pendingBufferViews.push(null);\n }\n if (accessorDef.sparse !== void 0) {\n pendingBufferViews.push(this.getDependency(\"bufferView\", accessorDef.sparse.indices.bufferView));\n pendingBufferViews.push(this.getDependency(\"bufferView\", accessorDef.sparse.values.bufferView));\n }\n return Promise.all(pendingBufferViews).then(function(bufferViews) {\n const bufferView = bufferViews[0];\n const itemSize = WEBGL_TYPE_SIZES[accessorDef.type];\n const TypedArray = WEBGL_COMPONENT_TYPES[accessorDef.componentType];\n const elementBytes = TypedArray.BYTES_PER_ELEMENT;\n const itemBytes = elementBytes * itemSize;\n const byteOffset = accessorDef.byteOffset || 0;\n const byteStride = accessorDef.bufferView !== void 0 ? json.bufferViews[accessorDef.bufferView].byteStride : void 0;\n const normalized = accessorDef.normalized === true;\n let array, bufferAttribute;\n if (byteStride && byteStride !== itemBytes) {\n const ibSlice = Math.floor(byteOffset / byteStride);\n const ibCacheKey = \"InterleavedBuffer:\" + accessorDef.bufferView + \":\" + accessorDef.componentType + \":\" + ibSlice + \":\" + accessorDef.count;\n let ib = parser.cache.get(ibCacheKey);\n if (!ib) {\n array = new TypedArray(bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes);\n ib = new InterleavedBuffer(array, byteStride / elementBytes);\n parser.cache.add(ibCacheKey, ib);\n }\n bufferAttribute = new InterleavedBufferAttribute(\n ib,\n itemSize,\n byteOffset % byteStride / elementBytes,\n normalized\n );\n } else {\n if (bufferView === null) {\n array = new TypedArray(accessorDef.count * itemSize);\n } else {\n array = new TypedArray(bufferView, byteOffset, accessorDef.count * itemSize);\n }\n bufferAttribute = new BufferAttribute(array, itemSize, normalized);\n }\n if (accessorDef.sparse !== void 0) {\n const itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;\n const TypedArrayIndices = WEBGL_COMPONENT_TYPES[accessorDef.sparse.indices.componentType];\n const byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;\n const byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;\n const sparseIndices = new TypedArrayIndices(\n bufferViews[1],\n byteOffsetIndices,\n accessorDef.sparse.count * itemSizeIndices\n );\n const sparseValues = new TypedArray(bufferViews[2], byteOffsetValues, accessorDef.sparse.count * itemSize);\n if (bufferView !== null) {\n bufferAttribute = new BufferAttribute(\n bufferAttribute.array.slice(),\n bufferAttribute.itemSize,\n bufferAttribute.normalized\n );\n }\n for (let i = 0, il = sparseIndices.length; i < il; i++) {\n const index = sparseIndices[i];\n bufferAttribute.setX(index, sparseValues[i * itemSize]);\n if (itemSize >= 2)\n bufferAttribute.setY(index, sparseValues[i * itemSize + 1]);\n if (itemSize >= 3)\n bufferAttribute.setZ(index, sparseValues[i * itemSize + 2]);\n if (itemSize >= 4)\n bufferAttribute.setW(index, sparseValues[i * itemSize + 3]);\n if (itemSize >= 5)\n throw new Error(\"THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.\");\n }\n }\n return bufferAttribute;\n });\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#textures\n * @param {number} textureIndex\n * @return {Promise<THREE.Texture|null>}\n */\n loadTexture(textureIndex) {\n const json = this.json;\n const options = this.options;\n const textureDef = json.textures[textureIndex];\n const sourceIndex = textureDef.source;\n const sourceDef = json.images[sourceIndex];\n let loader = this.textureLoader;\n if (sourceDef.uri) {\n const handler = options.manager.getHandler(sourceDef.uri);\n if (handler !== null)\n loader = handler;\n }\n return this.loadTextureImage(textureIndex, sourceIndex, loader);\n }\n loadTextureImage(textureIndex, sourceIndex, loader) {\n const parser = this;\n const json = this.json;\n const textureDef = json.textures[textureIndex];\n const sourceDef = json.images[sourceIndex];\n const cacheKey = (sourceDef.uri || sourceDef.bufferView) + \":\" + textureDef.sampler;\n if (this.textureCache[cacheKey]) {\n return this.textureCache[cacheKey];\n }\n const promise = this.loadImageSource(sourceIndex, loader).then(function(texture) {\n texture.flipY = false;\n texture.name = textureDef.name || sourceDef.name || \"\";\n if (texture.name === \"\" && typeof sourceDef.uri === \"string\" && sourceDef.uri.startsWith(\"data:image/\") === false) {\n texture.name = sourceDef.uri;\n }\n const samplers = json.samplers || {};\n const sampler = samplers[textureDef.sampler] || {};\n texture.magFilter = WEBGL_FILTERS[sampler.magFilter] || LinearFilter;\n texture.minFilter = WEBGL_FILTERS[sampler.minFilter] || LinearMipmapLinearFilter;\n texture.wrapS = WEBGL_WRAPPINGS[sampler.wrapS] || RepeatWrapping;\n texture.wrapT = WEBGL_WRAPPINGS[sampler.wrapT] || RepeatWrapping;\n parser.associations.set(texture, { textures: textureIndex });\n return texture;\n }).catch(function() {\n return null;\n });\n this.textureCache[cacheKey] = promise;\n return promise;\n }\n loadImageSource(sourceIndex, loader) {\n const parser = this;\n const json = this.json;\n const options = this.options;\n if (this.sourceCache[sourceIndex] !== void 0) {\n return this.sourceCache[sourceIndex].then((texture) => texture.clone());\n }\n const sourceDef = json.images[sourceIndex];\n const URL = self.URL || self.webkitURL;\n let sourceURI = sourceDef.uri || \"\";\n let isObjectURL = false;\n if (sourceDef.bufferView !== void 0) {\n sourceURI = parser.getDependency(\"bufferView\", sourceDef.bufferView).then(function(bufferView) {\n isObjectURL = true;\n const blob = new Blob([bufferView], { type: sourceDef.mimeType });\n sourceURI = URL.createObjectURL(blob);\n return sourceURI;\n });\n } else if (sourceDef.uri === void 0) {\n throw new Error(\"THREE.GLTFLoader: Image \" + sourceIndex + \" is missing URI and bufferView\");\n }\n const promise = Promise.resolve(sourceURI).then(function(sourceURI2) {\n return new Promise(function(resolve, reject) {\n let onLoad = resolve;\n if (loader.isImageBitmapLoader === true) {\n onLoad = function(imageBitmap) {\n const texture = new Texture(imageBitmap);\n texture.needsUpdate = true;\n resolve(texture);\n };\n }\n loader.load(LoaderUtils.resolveURL(sourceURI2, options.path), onLoad, void 0, reject);\n });\n }).then(function(texture) {\n if (isObjectURL === true) {\n URL.revokeObjectURL(sourceURI);\n }\n assignExtrasToUserData(texture, sourceDef);\n texture.userData.mimeType = sourceDef.mimeType || getImageURIMimeType(sourceDef.uri);\n return texture;\n }).catch(function(error) {\n console.error(\"THREE.GLTFLoader: Couldn't load texture\", sourceURI);\n throw error;\n });\n this.sourceCache[sourceIndex] = promise;\n return promise;\n }\n /**\n * Asynchronously assigns a texture to the given material parameters.\n * @param {Object} materialParams\n * @param {string} mapName\n * @param {Object} mapDef\n * @return {Promise<Texture>}\n */\n assignTexture(materialParams, mapName, mapDef, colorSpace) {\n const parser = this;\n return this.getDependency(\"texture\", mapDef.index).then(function(texture) {\n if (!texture)\n return null;\n if (mapDef.texCoord !== void 0 && mapDef.texCoord > 0) {\n texture = texture.clone();\n texture.channel = mapDef.texCoord;\n }\n if (parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM]) {\n const transform = mapDef.extensions !== void 0 ? mapDef.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM] : void 0;\n if (transform) {\n const gltfReference = parser.associations.get(texture);\n texture = parser.extensions[EXTENSIONS.KHR_TEXTURE_TRANSFORM].extendTexture(texture, transform);\n parser.associations.set(texture, gltfReference);\n }\n }\n if (colorSpace !== void 0) {\n if (typeof colorSpace === \"number\")\n colorSpace = colorSpace === sRGBEncoding ? SRGBColorSpace : LinearSRGBColorSpace;\n if (\"colorSpace\" in texture)\n texture.colorSpace = colorSpace;\n else\n texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding;\n }\n materialParams[mapName] = texture;\n return texture;\n });\n }\n /**\n * Assigns final material to a Mesh, Line, or Points instance. The instance\n * already has a material (generated from the glTF material options alone)\n * but reuse of the same glTF material may require multiple threejs materials\n * to accommodate different primitive types, defines, etc. New materials will\n * be created if necessary, and reused from a cache.\n * @param {Object3D} mesh Mesh, Line, or Points instance.\n */\n assignFinalMaterial(mesh) {\n const geometry = mesh.geometry;\n let material = mesh.material;\n const useDerivativeTangents = geometry.attributes.tangent === void 0;\n const useVertexColors = geometry.attributes.color !== void 0;\n const useFlatShading = geometry.attributes.normal === void 0;\n if (mesh.isPoints) {\n const cacheKey = \"PointsMaterial:\" + material.uuid;\n let pointsMaterial = this.cache.get(cacheKey);\n if (!pointsMaterial) {\n pointsMaterial = new PointsMaterial();\n Material.prototype.copy.call(pointsMaterial, material);\n pointsMaterial.color.copy(material.color);\n pointsMaterial.map = material.map;\n pointsMaterial.sizeAttenuation = false;\n this.cache.add(cacheKey, pointsMaterial);\n }\n material = pointsMaterial;\n } else if (mesh.isLine) {\n const cacheKey = \"LineBasicMaterial:\" + material.uuid;\n let lineMaterial = this.cache.get(cacheKey);\n if (!lineMaterial) {\n lineMaterial = new LineBasicMaterial();\n Material.prototype.copy.call(lineMaterial, material);\n lineMaterial.color.copy(material.color);\n lineMaterial.map = material.map;\n this.cache.add(cacheKey, lineMaterial);\n }\n material = lineMaterial;\n }\n if (useDerivativeTangents || useVertexColors || useFlatShading) {\n let cacheKey = \"ClonedMaterial:\" + material.uuid + \":\";\n if (useDerivativeTangents)\n cacheKey += \"derivative-tangents:\";\n if (useVertexColors)\n cacheKey += \"vertex-colors:\";\n if (useFlatShading)\n cacheKey += \"flat-shading:\";\n let cachedMaterial = this.cache.get(cacheKey);\n if (!cachedMaterial) {\n cachedMaterial = material.clone();\n if (useVertexColors)\n cachedMaterial.vertexColors = true;\n if (useFlatShading)\n cachedMaterial.flatShading = true;\n if (useDerivativeTangents) {\n if (cachedMaterial.normalScale)\n cachedMaterial.normalScale.y *= -1;\n if (cachedMaterial.clearcoatNormalScale)\n cachedMaterial.clearcoatNormalScale.y *= -1;\n }\n this.cache.add(cacheKey, cachedMaterial);\n this.associations.set(cachedMaterial, this.associations.get(material));\n }\n material = cachedMaterial;\n }\n mesh.material = material;\n }\n getMaterialType() {\n return MeshStandardMaterial;\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materials\n * @param {number} materialIndex\n * @return {Promise<Material>}\n */\n loadMaterial(materialIndex) {\n const parser = this;\n const json = this.json;\n const extensions = this.extensions;\n const materialDef = json.materials[materialIndex];\n let materialType;\n const materialParams = {};\n const materialExtensions = materialDef.extensions || {};\n const pending = [];\n if (materialExtensions[EXTENSIONS.KHR_MATERIALS_UNLIT]) {\n const kmuExtension = extensions[EXTENSIONS.KHR_MATERIALS_UNLIT];\n materialType = kmuExtension.getMaterialType();\n pending.push(kmuExtension.extendParams(materialParams, materialDef, parser));\n } else {\n const metallicRoughness = materialDef.pbrMetallicRoughness || {};\n materialParams.color = new Color(1, 1, 1);\n materialParams.opacity = 1;\n if (Array.isArray(metallicRoughness.baseColorFactor)) {\n const array = metallicRoughness.baseColorFactor;\n materialParams.color.setRGB(array[0], array[1], array[2], LinearSRGBColorSpace);\n materialParams.opacity = array[3];\n }\n if (metallicRoughness.baseColorTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"map\", metallicRoughness.baseColorTexture, SRGBColorSpace));\n }\n materialParams.metalness = metallicRoughness.metallicFactor !== void 0 ? metallicRoughness.metallicFactor : 1;\n materialParams.roughness = metallicRoughness.roughnessFactor !== void 0 ? metallicRoughness.roughnessFactor : 1;\n if (metallicRoughness.metallicRoughnessTexture !== void 0) {\n pending.push(parser.assignTexture(materialParams, \"metalnessMap\", metallicRoughness.metallicRoughnessTexture));\n pending.push(parser.assignTexture(materialParams, \"roughnessMap\", metallicRoughness.metallicRoughnessTexture));\n }\n materialType = this._invokeOne(function(ext) {\n return ext.getMaterialType && ext.getMaterialType(materialIndex);\n });\n pending.push(\n Promise.all(\n this._invokeAll(function(ext) {\n return ext.extendMaterialParams && ext.extendMaterialParams(materialIndex, materialParams);\n })\n )\n );\n }\n if (materialDef.doubleSided === true) {\n materialParams.side = DoubleSide;\n }\n const alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;\n if (alphaMode === ALPHA_MODES.BLEND) {\n materialParams.transparent = true;\n materialParams.depthWrite = false;\n } else {\n materialParams.transparent = false;\n if (alphaMode === ALPHA_MODES.MASK) {\n materialParams.alphaTest = materialDef.alphaCutoff !== void 0 ? materialDef.alphaCutoff : 0.5;\n }\n }\n if (materialDef.normalTexture !== void 0 && materialType !== MeshBasicMaterial) {\n pending.push(parser.assignTexture(materialParams, \"normalMap\", materialDef.normalTexture));\n materialParams.normalScale = new Vector2(1, 1);\n if (materialDef.normalTexture.scale !== void 0) {\n const scale = materialDef.normalTexture.scale;\n materialParams.normalScale.set(scale, scale);\n }\n }\n if (materialDef.occlusionTexture !== void 0 && materialType !== MeshBasicMaterial) {\n pending.push(parser.assignTexture(materialParams, \"aoMap\", materialDef.occlusionTexture));\n if (materialDef.occlusionTexture.strength !== void 0) {\n materialParams.aoMapIntensity = materialDef.occlusionTexture.strength;\n }\n }\n if (materialDef.emissiveFactor !== void 0 && materialType !== MeshBasicMaterial) {\n const emissiveFactor = materialDef.emissiveFactor;\n materialParams.emissive = new Color().setRGB(\n emissiveFactor[0],\n emissiveFactor[1],\n emissiveFactor[2],\n LinearSRGBColorSpace\n );\n }\n if (materialDef.emissiveTexture !== void 0 && materialType !== MeshBasicMaterial) {\n pending.push(parser.assignTexture(materialParams, \"emissiveMap\", materialDef.emissiveTexture, SRGBColorSpace));\n }\n return Promise.all(pending).then(function() {\n const material = new materialType(materialParams);\n if (materialDef.name)\n material.name = materialDef.name;\n assignExtrasToUserData(material, materialDef);\n parser.associations.set(material, { materials: materialIndex });\n if (materialDef.extensions)\n addUnknownExtensionsToUserData(extensions, material, materialDef);\n return material;\n });\n }\n /** When Object3D instances are targeted by animation, they need unique names. */\n createUniqueName(originalName) {\n const sanitizedName = PropertyBinding.sanitizeNodeName(originalName || \"\");\n if (sanitizedName in this.nodeNamesUsed) {\n return sanitizedName + \"_\" + ++this.nodeNamesUsed[sanitizedName];\n } else {\n this.nodeNamesUsed[sanitizedName] = 0;\n return sanitizedName;\n }\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometry\n *\n * Creates BufferGeometries from primitives.\n *\n * @param {Array<GLTF.Primitive>} primitives\n * @return {Promise<Array<BufferGeometry>>}\n */\n loadGeometries(primitives) {\n const parser = this;\n const extensions = this.extensions;\n const cache = this.primitiveCache;\n function createDracoPrimitive(primitive) {\n return extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION].decodePrimitive(primitive, parser).then(function(geometry) {\n return addPrimitiveAttributes(geometry, primitive, parser);\n });\n }\n const pending = [];\n for (let i = 0, il = primitives.length; i < il; i++) {\n const primitive = primitives[i];\n const cacheKey = createPrimitiveKey(primitive);\n const cached = cache[cacheKey];\n if (cached) {\n pending.push(cached.promise);\n } else {\n let geometryPromise;\n if (primitive.extensions && primitive.extensions[EXTENSIONS.KHR_DRACO_MESH_COMPRESSION]) {\n geometryPromise = createDracoPrimitive(primitive);\n } else {\n geometryPromise = addPrimitiveAttributes(new BufferGeometry(), primitive, parser);\n }\n cache[cacheKey] = { primitive, promise: geometryPromise };\n pending.push(geometryPromise);\n }\n }\n return Promise.all(pending);\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshes\n * @param {number} meshIndex\n * @return {Promise<Group|Mesh|SkinnedMesh>}\n */\n loadMesh(meshIndex) {\n const parser = this;\n const json = this.json;\n const extensions = this.extensions;\n const meshDef = json.meshes[meshIndex];\n const primitives = meshDef.primitives;\n const pending = [];\n for (let i = 0, il = primitives.length; i < il; i++) {\n const material = primitives[i].material === void 0 ? createDefaultMaterial(this.cache) : this.getDependency(\"material\", primitives[i].material);\n pending.push(material);\n }\n pending.push(parser.loadGeometries(primitives));\n return Promise.all(pending).then(function(results) {\n const materials = results.slice(0, results.length - 1);\n const geometries = results[results.length - 1];\n const meshes = [];\n for (let i = 0, il = geometries.length; i < il; i++) {\n const geometry = geometries[i];\n const primitive = primitives[i];\n let mesh;\n const material = materials[i];\n if (primitive.mode === WEBGL_CONSTANTS.TRIANGLES || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN || primitive.mode === void 0) {\n mesh = meshDef.isSkinnedMesh === true ? new SkinnedMesh(geometry, material) : new Mesh(geometry, material);\n if (mesh.isSkinnedMesh === true) {\n mesh.normalizeSkinWeights();\n }\n if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP) {\n mesh.geometry = toTrianglesDrawMode(mesh.geometry, TriangleStripDrawMode);\n } else if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN) {\n mesh.geometry = toTrianglesDrawMode(mesh.geometry, TriangleFanDrawMode);\n }\n } else if (primitive.mode === WEBGL_CONSTANTS.LINES) {\n mesh = new LineSegments(geometry, material);\n } else if (primitive.mode === WEBGL_CONSTANTS.LINE_STRIP) {\n mesh = new Line(geometry, material);\n } else if (primitive.mode === WEBGL_CONSTANTS.LINE_LOOP) {\n mesh = new LineLoop(geometry, material);\n } else if (primitive.mode === WEBGL_CONSTANTS.POINTS) {\n mesh = new Points(geometry, material);\n } else {\n throw new Error(\"THREE.GLTFLoader: Primitive mode unsupported: \" + primitive.mode);\n }\n if (Object.keys(mesh.geometry.morphAttributes).length > 0) {\n updateMorphTargets(mesh, meshDef);\n }\n mesh.name = parser.createUniqueName(meshDef.name || \"mesh_\" + meshIndex);\n assignExtrasToUserData(mesh, meshDef);\n if (primitive.extensions)\n addUnknownExtensionsToUserData(extensions, mesh, primitive);\n parser.assignFinalMaterial(mesh);\n meshes.push(mesh);\n }\n for (let i = 0, il = meshes.length; i < il; i++) {\n parser.associations.set(meshes[i], {\n meshes: meshIndex,\n primitives: i\n });\n }\n if (meshes.length === 1) {\n if (meshDef.extensions)\n addUnknownExtensionsToUserData(extensions, meshes[0], meshDef);\n return meshes[0];\n }\n const group = new Group();\n if (meshDef.extensions)\n addUnknownExtensionsToUserData(extensions, group, meshDef);\n parser.associations.set(group, { meshes: meshIndex });\n for (let i = 0, il = meshes.length; i < il; i++) {\n group.add(meshes[i]);\n }\n return group;\n });\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#cameras\n * @param {number} cameraIndex\n * @return {Promise<THREE.Camera>}\n */\n loadCamera(cameraIndex) {\n let camera;\n const cameraDef = this.json.cameras[cameraIndex];\n const params = cameraDef[cameraDef.type];\n if (!params) {\n console.warn(\"THREE.GLTFLoader: Missing camera parameters.\");\n return;\n }\n if (cameraDef.type === \"perspective\") {\n camera = new PerspectiveCamera(\n MathUtils.radToDeg(params.yfov),\n params.aspectRatio || 1,\n params.znear || 1,\n params.zfar || 2e6\n );\n } else if (cameraDef.type === \"orthographic\") {\n camera = new OrthographicCamera(-params.xmag, params.xmag, params.ymag, -params.ymag, params.znear, params.zfar);\n }\n if (cameraDef.name)\n camera.name = this.createUniqueName(cameraDef.name);\n assignExtrasToUserData(camera, cameraDef);\n return Promise.resolve(camera);\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#skins\n * @param {number} skinIndex\n * @return {Promise<Skeleton>}\n */\n loadSkin(skinIndex) {\n const skinDef = this.json.skins[skinIndex];\n const pending = [];\n for (let i = 0, il = skinDef.joints.length; i < il; i++) {\n pending.push(this._loadNodeShallow(skinDef.joints[i]));\n }\n if (skinDef.inverseBindMatrices !== void 0) {\n pending.push(this.getDependency(\"accessor\", skinDef.inverseBindMatrices));\n } else {\n pending.push(null);\n }\n return Promise.all(pending).then(function(results) {\n const inverseBindMatrices = results.pop();\n const jointNodes = results;\n const bones = [];\n const boneInverses = [];\n for (let i = 0, il = jointNodes.length; i < il; i++) {\n const jointNode = jointNodes[i];\n if (jointNode) {\n bones.push(jointNode);\n const mat = new Matrix4();\n if (inverseBindMatrices !== null) {\n mat.fromArray(inverseBindMatrices.array, i * 16);\n }\n boneInverses.push(mat);\n } else {\n console.warn('THREE.GLTFLoader: Joint \"%s\" could not be found.', skinDef.joints[i]);\n }\n }\n return new Skeleton(bones, boneInverses);\n });\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#animations\n * @param {number} animationIndex\n * @return {Promise<AnimationClip>}\n */\n loadAnimation(animationIndex) {\n const json = this.json;\n const parser = this;\n const animationDef = json.animations[animationIndex];\n const animationName = animationDef.name ? animationDef.name : \"animation_\" + animationIndex;\n const pendingNodes = [];\n const pendingInputAccessors = [];\n const pendingOutputAccessors = [];\n const pendingSamplers = [];\n const pendingTargets = [];\n for (let i = 0, il = animationDef.channels.length; i < il; i++) {\n const channel = animationDef.channels[i];\n const sampler = animationDef.samplers[channel.sampler];\n const target = channel.target;\n const name = target.node;\n const input = animationDef.parameters !== void 0 ? animationDef.parameters[sampler.input] : sampler.input;\n const output = animationDef.parameters !== void 0 ? animationDef.parameters[sampler.output] : sampler.output;\n if (target.node === void 0)\n continue;\n pendingNodes.push(this.getDependency(\"node\", name));\n pendingInputAccessors.push(this.getDependency(\"accessor\", input));\n pendingOutputAccessors.push(this.getDependency(\"accessor\", output));\n pendingSamplers.push(sampler);\n pendingTargets.push(target);\n }\n return Promise.all([\n Promise.all(pendingNodes),\n Promise.all(pendingInputAccessors),\n Promise.all(pendingOutputAccessors),\n Promise.all(pendingSamplers),\n Promise.all(pendingTargets)\n ]).then(function(dependencies) {\n const nodes = dependencies[0];\n const inputAccessors = dependencies[1];\n const outputAccessors = dependencies[2];\n const samplers = dependencies[3];\n const targets = dependencies[4];\n const tracks = [];\n for (let i = 0, il = nodes.length; i < il; i++) {\n const node = nodes[i];\n const inputAccessor = inputAccessors[i];\n const outputAccessor = outputAccessors[i];\n const sampler = samplers[i];\n const target = targets[i];\n if (node === void 0)\n continue;\n if (node.updateMatrix) {\n node.updateMatrix();\n }\n const createdTracks = parser._createAnimationTracks(node, inputAccessor, outputAccessor, sampler, target);\n if (createdTracks) {\n for (let k = 0; k < createdTracks.length; k++) {\n tracks.push(createdTracks[k]);\n }\n }\n }\n return new AnimationClip(animationName, void 0, tracks);\n });\n }\n createNodeMesh(nodeIndex) {\n const json = this.json;\n const parser = this;\n const nodeDef = json.nodes[nodeIndex];\n if (nodeDef.mesh === void 0)\n return null;\n return parser.getDependency(\"mesh\", nodeDef.mesh).then(function(mesh) {\n const node = parser._getNodeRef(parser.meshCache, nodeDef.mesh, mesh);\n if (nodeDef.weights !== void 0) {\n node.traverse(function(o) {\n if (!o.isMesh)\n return;\n for (let i = 0, il = nodeDef.weights.length; i < il; i++) {\n o.morphTargetInfluences[i] = nodeDef.weights[i];\n }\n });\n }\n return node;\n });\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchy\n * @param {number} nodeIndex\n * @return {Promise<Object3D>}\n */\n loadNode(nodeIndex) {\n const json = this.json;\n const parser = this;\n const nodeDef = json.nodes[nodeIndex];\n const nodePending = parser._loadNodeShallow(nodeIndex);\n const childPending = [];\n const childrenDef = nodeDef.children || [];\n for (let i = 0, il = childrenDef.length; i < il; i++) {\n childPending.push(parser.getDependency(\"node\", childrenDef[i]));\n }\n const skeletonPending = nodeDef.skin === void 0 ? Promise.resolve(null) : parser.getDependency(\"skin\", nodeDef.skin);\n return Promise.all([nodePending, Promise.all(childPending), skeletonPending]).then(function(results) {\n const node = results[0];\n const children = results[1];\n const skeleton = results[2];\n if (skeleton !== null) {\n node.traverse(function(mesh) {\n if (!mesh.isSkinnedMesh)\n return;\n mesh.bind(skeleton, _identityMatrix);\n });\n }\n for (let i = 0, il = children.length; i < il; i++) {\n node.add(children[i]);\n }\n return node;\n });\n }\n // ._loadNodeShallow() parses a single node.\n // skin and child nodes are created and added in .loadNode() (no '_' prefix).\n _loadNodeShallow(nodeIndex) {\n const json = this.json;\n const extensions = this.extensions;\n const parser = this;\n if (this.nodeCache[nodeIndex] !== void 0) {\n return this.nodeCache[nodeIndex];\n }\n const nodeDef = json.nodes[nodeIndex];\n const nodeName = nodeDef.name ? parser.createUniqueName(nodeDef.name) : \"\";\n const pending = [];\n const meshPromise = parser._invokeOne(function(ext) {\n return ext.createNodeMesh && ext.createNodeMesh(nodeIndex);\n });\n if (meshPromise) {\n pending.push(meshPromise);\n }\n if (nodeDef.camera !== void 0) {\n pending.push(\n parser.getDependency(\"camera\", nodeDef.camera).then(function(camera) {\n return parser._getNodeRef(parser.cameraCache, nodeDef.camera, camera);\n })\n );\n }\n parser._invokeAll(function(ext) {\n return ext.createNodeAttachment && ext.createNodeAttachment(nodeIndex);\n }).forEach(function(promise) {\n pending.push(promise);\n });\n this.nodeCache[nodeIndex] = Promise.all(pending).then(function(objects) {\n let node;\n if (nodeDef.isBone === true) {\n node = new Bone();\n } else if (objects.length > 1) {\n node = new Group();\n } else if (objects.length === 1) {\n node = objects[0];\n } else {\n node = new Object3D();\n }\n if (node !== objects[0]) {\n for (let i = 0, il = objects.length; i < il; i++) {\n node.add(objects[i]);\n }\n }\n if (nodeDef.name) {\n node.userData.name = nodeDef.name;\n node.name = nodeName;\n }\n assignExtrasToUserData(node, nodeDef);\n if (nodeDef.extensions)\n addUnknownExtensionsToUserData(extensions, node, nodeDef);\n if (nodeDef.matrix !== void 0) {\n const matrix = new Matrix4();\n matrix.fromArray(nodeDef.matrix);\n node.applyMatrix4(matrix);\n } else {\n if (nodeDef.translation !== void 0) {\n node.position.fromArray(nodeDef.translation);\n }\n if (nodeDef.rotation !== void 0) {\n node.quaternion.fromArray(nodeDef.rotation);\n }\n if (nodeDef.scale !== void 0) {\n node.scale.fromArray(nodeDef.scale);\n }\n }\n if (!parser.associations.has(node)) {\n parser.associations.set(node, {});\n }\n parser.associations.get(node).nodes = nodeIndex;\n return node;\n });\n return this.nodeCache[nodeIndex];\n }\n /**\n * Specification: https://github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenes\n * @param {number} sceneIndex\n * @return {Promise<Group>}\n */\n loadScene(sceneIndex) {\n const extensions = this.extensions;\n const sceneDef = this.json.scenes[sceneIndex];\n const parser = this;\n const scene = new Group();\n if (sceneDef.name)\n scene.name = parser.createUniqueName(sceneDef.name);\n assignExtrasToUserData(scene, sceneDef);\n if (sceneDef.extensions)\n addUnknownExtensionsToUserData(extensions, scene, sceneDef);\n const nodeIds = sceneDef.nodes || [];\n const pending = [];\n for (let i = 0, il = nodeIds.length; i < il; i++) {\n pending.push(parser.getDependency(\"node\", nodeIds[i]));\n }\n return Promise.all(pending).then(function(nodes) {\n for (let i = 0, il = nodes.length; i < il; i++) {\n scene.add(nodes[i]);\n }\n const reduceAssociations = (node) => {\n const reducedAssociations = /* @__PURE__ */ new Map();\n for (const [key, value] of parser.associations) {\n if (key instanceof Material || key instanceof Texture) {\n reducedAssociations.set(key, value);\n }\n }\n node.traverse((node2) => {\n const mappings = parser.associations.get(node2);\n if (mappings != null) {\n reducedAssociations.set(node2, mappings);\n }\n });\n return reducedAssociations;\n };\n parser.associations = reduceAssociations(scene);\n return scene;\n });\n }\n _createAnimationTracks(node, inputAccessor, outputAccessor, sampler, target) {\n const tracks = [];\n const targetName = node.name ? node.name : node.uuid;\n const targetNames = [];\n if (PATH_PROPERTIES[target.path] === PATH_PROPERTIES.weights) {\n node.traverse(function(object) {\n if (object.morphTargetInfluences) {\n targetNames.push(object.name ? object.name : object.uuid);\n }\n });\n } else {\n targetNames.push(targetName);\n }\n let TypedKeyframeTrack;\n switch (PATH_PROPERTIES[target.path]) {\n case PATH_PROPERTIES.weights:\n TypedKeyframeTrack = NumberKeyframeTrack;\n break;\n case PATH_PROPERTIES.rotation:\n TypedKeyframeTrack = QuaternionKeyframeTrack;\n break;\n case PATH_PROPERTIES.position:\n case PATH_PROPERTIES.scale:\n TypedKeyframeTrack = VectorKeyframeTrack;\n break;\n default:\n switch (outputAccessor.itemSize) {\n case 1:\n TypedKeyframeTrack = NumberKeyframeTrack;\n break;\n case 2:\n case 3:\n default:\n TypedKeyframeTrack = VectorKeyframeTrack;\n break;\n }\n break;\n }\n const interpolation = sampler.interpolation !== void 0 ? INTERPOLATION[sampler.interpolation] : InterpolateLinear;\n const outputArray = this._getArrayFromAccessor(outputAccessor);\n for (let j = 0, jl = targetNames.length; j < jl; j++) {\n const track = new TypedKeyframeTrack(\n targetNames[j] + \".\" + PATH_PROPERTIES[target.path],\n inputAccessor.array,\n outputArray,\n interpolation\n );\n if (sampler.interpolation === \"CUBICSPLINE\") {\n this._createCubicSplineTrackInterpolant(track);\n }\n tracks.push(track);\n }\n return tracks;\n }\n _getArrayFromAccessor(accessor) {\n let outputArray = accessor.array;\n if (accessor.normalized) {\n const scale = getNormalizedComponentScale(outputArray.constructor);\n const scaled = new Float32Array(outputArray.length);\n for (let j = 0, jl = outputArray.length; j < jl; j++) {\n scaled[j] = outputArray[j] * scale;\n }\n outputArray = scaled;\n }\n return outputArray;\n }\n _createCubicSplineTrackInterpolant(track) {\n track.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline(result) {\n const interpolantType = this instanceof QuaternionKeyframeTrack ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;\n return new interpolantType(this.times, this.values, this.getValueSize() / 3, result);\n };\n track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;\n }\n}\nfunction computeBounds(geometry, primitiveDef, parser) {\n const attributes = primitiveDef.attributes;\n const box = new Box3();\n if (attributes.POSITION !== void 0) {\n const accessor = parser.json.accessors[attributes.POSITION];\n const min = accessor.min;\n const max = accessor.max;\n if (min !== void 0 && max !== void 0) {\n box.set(new Vector3(min[0], min[1], min[2]), new Vector3(max[0], max[1], max[2]));\n if (accessor.normalized) {\n const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]);\n box.min.multiplyScalar(boxScale);\n box.max.multiplyScalar(boxScale);\n }\n } else {\n console.warn(\"THREE.GLTFLoader: Missing min/max properties for accessor POSITION.\");\n return;\n }\n } else {\n return;\n }\n const targets = primitiveDef.targets;\n if (targets !== void 0) {\n const maxDisplacement = new Vector3();\n const vector = new Vector3();\n for (let i = 0, il = targets.length; i < il; i++) {\n const target = targets[i];\n if (target.POSITION !== void 0) {\n const accessor = parser.json.accessors[target.POSITION];\n const min = accessor.min;\n const max = accessor.max;\n if (min !== void 0 && max !== void 0) {\n vector.setX(Math.max(Math.abs(min[0]), Math.abs(max[0])));\n vector.setY(Math.max(Math.abs(min[1]), Math.abs(max[1])));\n vector.setZ(Math.max(Math.abs(min[2]), Math.abs(max[2])));\n if (accessor.normalized) {\n const boxScale = getNormalizedComponentScale(WEBGL_COMPONENT_TYPES[accessor.componentType]);\n vector.multiplyScalar(boxScale);\n }\n maxDisplacement.max(vector);\n } else {\n console.warn(\"THREE.GLTFLoader: Missing min/max properties for accessor POSITION.\");\n }\n }\n }\n box.expandByVector(maxDisplacement);\n }\n geometry.boundingBox = box;\n const sphere = new Sphere();\n box.getCenter(sphere.center);\n sphere.radius = box.min.distanceTo(box.max) / 2;\n geometry.boundingSphere = sphere;\n}\nfunction addPrimitiveAttributes(geometry, primitiveDef, parser) {\n const attributes = primitiveDef.attributes;\n const pending = [];\n function assignAttributeAccessor(accessorIndex, attributeName) {\n return parser.getDependency(\"accessor\", accessorIndex).then(function(accessor) {\n geometry.setAttribute(attributeName, accessor);\n });\n }\n for (const gltfAttributeName in attributes) {\n const threeAttributeName = ATTRIBUTES[gltfAttributeName] || gltfAttributeName.toLowerCase();\n if (threeAttributeName in geometry.attributes)\n continue;\n pending.push(assignAttributeAccessor(attributes[gltfAttributeName], threeAttributeName));\n }\n if (primitiveDef.indices !== void 0 && !geometry.index) {\n const accessor = parser.getDependency(\"accessor\", primitiveDef.indices).then(function(accessor2) {\n geometry.setIndex(accessor2);\n });\n pending.push(accessor);\n }\n assignExtrasToUserData(geometry, primitiveDef);\n computeBounds(geometry, primitiveDef, parser);\n return Promise.all(pending).then(function() {\n return primitiveDef.targets !== void 0 ? addMorphTargets(geometry, primitiveDef.targets, parser) : geometry;\n });\n}\nexport {\n GLTFLoader\n};\n//# sourceMappingURL=GLTFLoader.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { GLTFLoader } from \"../loaders/GLTFLoader.js\";\nconst DEFAULT_HAND_PROFILE_PATH = \"https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles/generic-hand/\";\nclass XRHandMeshModel {\n constructor(handModel, controller, path = DEFAULT_HAND_PROFILE_PATH, handedness, customModelPath) {\n __publicField(this, \"controller\");\n __publicField(this, \"handModel\");\n __publicField(this, \"bones\");\n this.controller = controller;\n this.handModel = handModel;\n this.bones = [];\n const loader = new GLTFLoader();\n if (!customModelPath)\n loader.setPath(path);\n loader.load(customModelPath != null ? customModelPath : `${handedness}.glb`, (gltf) => {\n const object = gltf.scene.children[0];\n this.handModel.add(object);\n const mesh = object.getObjectByProperty(\"type\", \"SkinnedMesh\");\n mesh.frustumCulled = false;\n mesh.castShadow = true;\n mesh.receiveShadow = true;\n const joints = [\n \"wrist\",\n \"thumb-metacarpal\",\n \"thumb-phalanx-proximal\",\n \"thumb-phalanx-distal\",\n \"thumb-tip\",\n \"index-finger-metacarpal\",\n \"index-finger-phalanx-proximal\",\n \"index-finger-phalanx-intermediate\",\n \"index-finger-phalanx-distal\",\n \"index-finger-tip\",\n \"middle-finger-metacarpal\",\n \"middle-finger-phalanx-proximal\",\n \"middle-finger-phalanx-intermediate\",\n \"middle-finger-phalanx-distal\",\n \"middle-finger-tip\",\n \"ring-finger-metacarpal\",\n \"ring-finger-phalanx-proximal\",\n \"ring-finger-phalanx-intermediate\",\n \"ring-finger-phalanx-distal\",\n \"ring-finger-tip\",\n \"pinky-finger-metacarpal\",\n \"pinky-finger-phalanx-proximal\",\n \"pinky-finger-phalanx-intermediate\",\n \"pinky-finger-phalanx-distal\",\n \"pinky-finger-tip\"\n ];\n joints.forEach((jointName) => {\n const bone = object.getObjectByName(jointName);\n if (bone !== void 0) {\n bone.jointName = jointName;\n } else {\n console.warn(`Couldn't find ${jointName} in ${handedness} hand mesh`);\n }\n this.bones.push(bone);\n });\n });\n }\n updateMesh() {\n const XRJoints = this.controller.joints;\n for (let i = 0; i < this.bones.length; i++) {\n const bone = this.bones[i];\n if (bone) {\n const XRJoint = XRJoints[bone.jointName];\n if (XRJoint.visible) {\n const position = XRJoint.position;\n bone.position.copy(position);\n bone.quaternion.copy(XRJoint.quaternion);\n }\n }\n }\n }\n}\nexport {\n XRHandMeshModel\n};\n//# sourceMappingURL=XRHandMeshModel.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Object3D, Sphere, Box3 } from \"three\";\nimport { XRHandMeshModel } from \"./XRHandMeshModel.js\";\nconst TOUCH_RADIUS = 0.01;\nconst POINTING_JOINT = \"index-finger-tip\";\nclass OculusHandModel extends Object3D {\n constructor(controller, leftModelPath, rightModelPath) {\n super();\n __publicField(this, \"controller\");\n __publicField(this, \"motionController\");\n __publicField(this, \"envMap\");\n __publicField(this, \"mesh\");\n __publicField(this, \"xrInputSource\");\n this.controller = controller;\n this.motionController = null;\n this.envMap = null;\n this.mesh = null;\n this.xrInputSource = null;\n controller.addEventListener(\"connected\", (event) => {\n const xrInputSource = event.data;\n if (xrInputSource.hand && !this.motionController) {\n this.xrInputSource = xrInputSource;\n this.motionController = new XRHandMeshModel(\n this,\n controller,\n void 0,\n xrInputSource.handedness,\n xrInputSource.handedness === \"left\" ? leftModelPath : rightModelPath\n );\n }\n });\n controller.addEventListener(\"disconnected\", () => {\n this.dispose();\n });\n }\n updateMatrixWorld(force) {\n super.updateMatrixWorld(force);\n if (this.motionController) {\n this.motionController.updateMesh();\n }\n }\n getPointerPosition() {\n const indexFingerTip = this.controller.joints[POINTING_JOINT];\n if (indexFingerTip) {\n return indexFingerTip.position;\n } else {\n return null;\n }\n }\n intersectBoxObject(boxObject) {\n const pointerPosition = this.getPointerPosition();\n if (pointerPosition) {\n const indexSphere = new Sphere(pointerPosition, TOUCH_RADIUS);\n const box = new Box3().setFromObject(boxObject);\n return indexSphere.intersectsBox(box);\n } else {\n return false;\n }\n }\n checkButton(button) {\n if (this.intersectBoxObject(button)) {\n button.onPress();\n } else {\n button.onClear();\n }\n if (button.isPressed()) {\n button.whilePressed();\n }\n }\n dispose() {\n this.clear();\n this.motionController = null;\n }\n}\nexport {\n OculusHandModel\n};\n//# sourceMappingURL=OculusHandModel.js.map\n","import * as THREE from \"three\";\nconst PINCH_MAX = 0.05;\nconst PINCH_THRESHOLD = 0.02;\nconst PINCH_MIN = 0.01;\nconst POINTER_ADVANCE_MAX = 0.02;\nconst POINTER_OPACITY_MAX = 1;\nconst POINTER_OPACITY_MIN = 0.4;\nconst POINTER_FRONT_RADIUS = 2e-3;\nconst POINTER_REAR_RADIUS = 0.01;\nconst POINTER_REAR_RADIUS_MIN = 3e-3;\nconst POINTER_LENGTH = 0.035;\nconst POINTER_SEGMENTS = 16;\nconst POINTER_RINGS = 12;\nconst POINTER_HEMISPHERE_ANGLE = 110;\nconst YAXIS = /* @__PURE__ */ new THREE.Vector3(0, 1, 0);\nconst ZAXIS = /* @__PURE__ */ new THREE.Vector3(0, 0, 1);\nconst CURSOR_RADIUS = 0.02;\nconst CURSOR_MAX_DISTANCE = 1.5;\nclass OculusHandPointerModel extends THREE.Object3D {\n constructor(hand, controller) {\n super();\n this.hand = hand;\n this.controller = controller;\n this.motionController = null;\n this.envMap = null;\n this.mesh = null;\n this.pointerGeometry = null;\n this.pointerMesh = null;\n this.pointerObject = null;\n this.pinched = false;\n this.attached = false;\n this.cursorObject = null;\n this.raycaster = null;\n this._onConnected = this._onConnected.bind(this);\n this._onDisconnected = this._onDisconnected.bind(this);\n this.hand.addEventListener(\"connected\", this._onConnected);\n this.hand.addEventListener(\"disconnected\", this._onDisconnected);\n }\n _onConnected(event) {\n const xrInputSource = event.data;\n if (xrInputSource.hand) {\n this.visible = true;\n this.xrInputSource = xrInputSource;\n this.createPointer();\n }\n }\n _onDisconnected() {\n var _a, _b;\n this.visible = false;\n this.xrInputSource = null;\n (_a = this.pointerGeometry) == null ? void 0 : _a.dispose();\n (_b = this.pointerMesh) == null ? void 0 : _b.material.dispose();\n this.clear();\n }\n _drawVerticesRing(vertices, baseVector, ringIndex) {\n const segmentVector = baseVector.clone();\n for (var i = 0; i < POINTER_SEGMENTS; i++) {\n segmentVector.applyAxisAngle(ZAXIS, Math.PI * 2 / POINTER_SEGMENTS);\n const vid = ringIndex * POINTER_SEGMENTS + i;\n vertices[3 * vid] = segmentVector.x;\n vertices[3 * vid + 1] = segmentVector.y;\n vertices[3 * vid + 2] = segmentVector.z;\n }\n }\n _updatePointerVertices(rearRadius) {\n const vertices = this.pointerGeometry.attributes.position.array;\n const frontFaceBase = new THREE.Vector3(POINTER_FRONT_RADIUS, 0, -1 * (POINTER_LENGTH - rearRadius));\n this._drawVerticesRing(vertices, frontFaceBase, 0);\n const rearBase = new THREE.Vector3(\n Math.sin(Math.PI * POINTER_HEMISPHERE_ANGLE / 180) * rearRadius,\n Math.cos(Math.PI * POINTER_HEMISPHERE_ANGLE / 180) * rearRadius,\n 0\n );\n for (var i = 0; i < POINTER_RINGS; i++) {\n this._drawVerticesRing(vertices, rearBase, i + 1);\n rearBase.applyAxisAngle(YAXIS, Math.PI * POINTER_HEMISPHERE_ANGLE / 180 / (POINTER_RINGS * -2));\n }\n const frontCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS);\n const rearCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS) + 1;\n const frontCenter = new THREE.Vector3(0, 0, -1 * (POINTER_LENGTH - rearRadius));\n vertices[frontCenterIndex * 3] = frontCenter.x;\n vertices[frontCenterIndex * 3 + 1] = frontCenter.y;\n vertices[frontCenterIndex * 3 + 2] = frontCenter.z;\n const rearCenter = new THREE.Vector3(0, 0, rearRadius);\n vertices[rearCenterIndex * 3] = rearCenter.x;\n vertices[rearCenterIndex * 3 + 1] = rearCenter.y;\n vertices[rearCenterIndex * 3 + 2] = rearCenter.z;\n this.pointerGeometry.setAttribute(\"position\", new THREE.Float32BufferAttribute(vertices, 3));\n }\n createPointer() {\n var i, j;\n const vertices = new Array(((POINTER_RINGS + 1) * POINTER_SEGMENTS + 2) * 3).fill(0);\n const indices = [];\n this.pointerGeometry = new THREE.BufferGeometry();\n this.pointerGeometry.setAttribute(\"position\", new THREE.Float32BufferAttribute(vertices, 3));\n this._updatePointerVertices(POINTER_REAR_RADIUS);\n for (i = 0; i < POINTER_RINGS; i++) {\n for (j = 0; j < POINTER_SEGMENTS - 1; j++) {\n indices.push(i * POINTER_SEGMENTS + j, i * POINTER_SEGMENTS + j + 1, (i + 1) * POINTER_SEGMENTS + j);\n indices.push(i * POINTER_SEGMENTS + j + 1, (i + 1) * POINTER_SEGMENTS + j + 1, (i + 1) * POINTER_SEGMENTS + j);\n }\n indices.push((i + 1) * POINTER_SEGMENTS - 1, i * POINTER_SEGMENTS, (i + 2) * POINTER_SEGMENTS - 1);\n indices.push(i * POINTER_SEGMENTS, (i + 1) * POINTER_SEGMENTS, (i + 2) * POINTER_SEGMENTS - 1);\n }\n const frontCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS);\n const rearCenterIndex = POINTER_SEGMENTS * (1 + POINTER_RINGS) + 1;\n for (i = 0; i < POINTER_SEGMENTS - 1; i++) {\n indices.push(frontCenterIndex, i + 1, i);\n indices.push(rearCenterIndex, i + POINTER_SEGMENTS * POINTER_RINGS, i + POINTER_SEGMENTS * POINTER_RINGS + 1);\n }\n indices.push(frontCenterIndex, 0, POINTER_SEGMENTS - 1);\n indices.push(rearCenterIndex, POINTER_SEGMENTS * (POINTER_RINGS + 1) - 1, POINTER_SEGMENTS * POINTER_RINGS);\n const material = new THREE.MeshBasicMaterial();\n material.transparent = true;\n material.opacity = POINTER_OPACITY_MIN;\n this.pointerGeometry.setIndex(indices);\n this.pointerMesh = new THREE.Mesh(this.pointerGeometry, material);\n this.pointerMesh.position.set(0, 0, -1 * POINTER_REAR_RADIUS);\n this.pointerObject = new THREE.Object3D();\n this.pointerObject.add(this.pointerMesh);\n this.raycaster = new THREE.Raycaster();\n const cursorGeometry = new THREE.SphereGeometry(CURSOR_RADIUS, 10, 10);\n const cursorMaterial = new THREE.MeshBasicMaterial();\n cursorMaterial.transparent = true;\n cursorMaterial.opacity = POINTER_OPACITY_MIN;\n this.cursorObject = new THREE.Mesh(cursorGeometry, cursorMaterial);\n this.pointerObject.add(this.cursorObject);\n this.add(this.pointerObject);\n }\n _updateRaycaster() {\n if (this.raycaster) {\n const pointerMatrix = this.pointerObject.matrixWorld;\n const tempMatrix = new THREE.Matrix4();\n tempMatrix.identity().extractRotation(pointerMatrix);\n this.raycaster.ray.origin.setFromMatrixPosition(pointerMatrix);\n this.raycaster.ray.direction.set(0, 0, -1).applyMatrix4(tempMatrix);\n }\n }\n _updatePointer() {\n this.pointerObject.visible = this.controller.visible;\n const indexTip = this.hand.joints[\"index-finger-tip\"];\n const thumbTip = this.hand.joints[\"thumb-tip\"];\n const distance = indexTip.position.distanceTo(thumbTip.position);\n const position = indexTip.position.clone().add(thumbTip.position).multiplyScalar(0.5);\n this.pointerObject.position.copy(position);\n this.pointerObject.quaternion.copy(this.controller.quaternion);\n this.pinched = distance <= PINCH_THRESHOLD;\n const pinchScale = (distance - PINCH_MIN) / (PINCH_MAX - PINCH_MIN);\n const focusScale = (distance - PINCH_MIN) / (PINCH_THRESHOLD - PINCH_MIN);\n if (pinchScale > 1) {\n this._updatePointerVertices(POINTER_REAR_RADIUS);\n this.pointerMesh.position.set(0, 0, -1 * POINTER_REAR_RADIUS);\n this.pointerMesh.material.opacity = POINTER_OPACITY_MIN;\n } else if (pinchScale > 0) {\n const rearRadius = (POINTER_REAR_RADIUS - POINTER_REAR_RADIUS_MIN) * pinchScale + POINTER_REAR_RADIUS_MIN;\n this._updatePointerVertices(rearRadius);\n if (focusScale < 1) {\n this.pointerMesh.position.set(0, 0, -1 * rearRadius - (1 - focusScale) * POINTER_ADVANCE_MAX);\n this.pointerMesh.material.opacity = POINTER_OPACITY_MIN + (1 - focusScale) * (POINTER_OPACITY_MAX - POINTER_OPACITY_MIN);\n } else {\n this.pointerMesh.position.set(0, 0, -1 * rearRadius);\n this.pointerMesh.material.opacity = POINTER_OPACITY_MIN;\n }\n } else {\n this._updatePointerVertices(POINTER_REAR_RADIUS_MIN);\n this.pointerMesh.position.set(0, 0, -1 * POINTER_REAR_RADIUS_MIN - POINTER_ADVANCE_MAX);\n this.pointerMesh.material.opacity = POINTER_OPACITY_MAX;\n }\n this.cursorObject.material.opacity = this.pointerMesh.material.opacity;\n }\n updateMatrixWorld(force) {\n super.updateMatrixWorld(force);\n if (this.pointerGeometry) {\n this._updatePointer();\n this._updateRaycaster();\n }\n }\n isPinched() {\n return this.pinched;\n }\n setAttached(attached) {\n this.attached = attached;\n }\n isAttached() {\n return this.attached;\n }\n intersectObject(object, recursive = true) {\n if (this.raycaster) {\n return this.raycaster.intersectObject(object, recursive);\n }\n }\n intersectObjects(objects, recursive = true) {\n if (this.raycaster) {\n return this.raycaster.intersectObjects(objects, recursive);\n }\n }\n checkIntersections(objects, recursive = false) {\n if (this.raycaster && !this.attached) {\n const intersections = this.raycaster.intersectObjects(objects, recursive);\n const direction = new THREE.Vector3(0, 0, -1);\n if (intersections.length > 0) {\n const intersection = intersections[0];\n const distance = intersection.distance;\n this.cursorObject.position.copy(direction.multiplyScalar(distance));\n } else {\n this.cursorObject.position.copy(direction.multiplyScalar(CURSOR_MAX_DISTANCE));\n }\n }\n }\n setCursor(distance) {\n const direction = new THREE.Vector3(0, 0, -1);\n if (this.raycaster && !this.attached) {\n this.cursorObject.position.copy(direction.multiplyScalar(distance));\n }\n }\n dispose() {\n this._onDisconnected();\n this.hand.removeEventListener(\"connected\", this._onConnected);\n this.hand.removeEventListener(\"disconnected\", this._onDisconnected);\n }\n}\nexport {\n OculusHandPointerModel\n};\n//# sourceMappingURL=OculusHandPointerModel.js.map\n","import * as THREE from \"three\";\nfunction createText(message, height) {\n const canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\");\n let metrics = null;\n const textHeight = 100;\n context.font = \"normal \" + textHeight + \"px Arial\";\n metrics = context.measureText(message);\n const textWidth = metrics.width;\n canvas.width = textWidth;\n canvas.height = textHeight;\n context.font = \"normal \" + textHeight + \"px Arial\";\n context.textAlign = \"center\";\n context.textBaseline = \"middle\";\n context.fillStyle = \"#ffffff\";\n context.fillText(message, textWidth / 2, textHeight / 2);\n const texture = new THREE.Texture(canvas);\n texture.needsUpdate = true;\n const material = new THREE.MeshBasicMaterial({\n color: 16777215,\n side: THREE.DoubleSide,\n map: texture,\n transparent: true\n });\n const geometry = new THREE.PlaneGeometry(height * textWidth / textHeight, height);\n const plane = new THREE.Mesh(geometry, material);\n return plane;\n}\nexport {\n createText\n};\n//# sourceMappingURL=Text2D.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nconst VRButton = /* @__PURE__ */ (() => {\n const _VRButton = class {\n static createButton(renderer, sessionInit = {}) {\n const button = document.createElement(\"button\");\n function showEnterVR() {\n let currentSession = null;\n async function onSessionStarted(session) {\n session.addEventListener(\"end\", onSessionEnded);\n await renderer.xr.setSession(session);\n button.textContent = \"EXIT VR\";\n currentSession = session;\n }\n function onSessionEnded() {\n currentSession.removeEventListener(\"end\", onSessionEnded);\n button.textContent = \"ENTER VR\";\n currentSession = null;\n }\n button.style.display = \"\";\n button.style.cursor = \"pointer\";\n button.style.left = \"calc(50% - 50px)\";\n button.style.width = \"100px\";\n button.textContent = \"ENTER VR\";\n button.onmouseenter = () => {\n button.style.opacity = \"1.0\";\n };\n button.onmouseleave = () => {\n button.style.opacity = \"0.5\";\n };\n button.onclick = () => {\n var _a;\n if (currentSession === null) {\n const optionalFeatures = [sessionInit.optionalFeatures, \"local-floor\", \"bounded-floor\", \"hand-tracking\"].flat().filter(Boolean);\n (_a = navigator.xr) == null ? void 0 : _a.requestSession(\"immersive-vr\", { ...sessionInit, optionalFeatures }).then(onSessionStarted);\n } else {\n currentSession.end();\n }\n };\n }\n function disableButton() {\n button.style.display = \"\";\n button.style.cursor = \"auto\";\n button.style.left = \"calc(50% - 75px)\";\n button.style.width = \"150px\";\n button.onmouseenter = null;\n button.onmouseleave = null;\n button.onclick = null;\n }\n function showWebXRNotFound() {\n disableButton();\n button.textContent = \"VR NOT SUPPORTED\";\n }\n function stylizeElement(element) {\n element.style.position = \"absolute\";\n element.style.bottom = \"20px\";\n element.style.padding = \"12px 6px\";\n element.style.border = \"1px solid #fff\";\n element.style.borderRadius = \"4px\";\n element.style.background = \"rgba(0,0,0,0.1)\";\n element.style.color = \"#fff\";\n element.style.font = \"normal 13px sans-serif\";\n element.style.textAlign = \"center\";\n element.style.opacity = \"0.5\";\n element.style.outline = \"none\";\n element.style.zIndex = \"999\";\n }\n if (\"xr\" in navigator) {\n stylizeElement(button);\n button.id = \"VRButton\";\n button.style.display = \"none\";\n navigator.xr.isSessionSupported(\"immersive-vr\").then((supported) => {\n supported ? showEnterVR() : showWebXRNotFound();\n if (supported && _VRButton.xrSessionIsGranted) {\n button.click();\n }\n });\n return button;\n } else {\n const message = document.createElement(\"a\");\n if (window.isSecureContext === false) {\n message.href = document.location.href.replace(/^http:/, \"https:\");\n message.innerHTML = \"WEBXR NEEDS HTTPS\";\n } else {\n message.href = \"https://immersiveweb.dev/\";\n message.innerHTML = \"WEBXR NOT AVAILABLE\";\n }\n message.style.left = \"calc(50% - 90px)\";\n message.style.width = \"180px\";\n message.style.textDecoration = \"none\";\n stylizeElement(message);\n return message;\n }\n }\n static registerSessionGrantedListener() {\n if (typeof navigator !== \"undefined\" && \"xr\" in navigator) {\n navigator.xr.addEventListener(\"sessiongranted\", () => {\n _VRButton.xrSessionIsGranted = true;\n });\n }\n }\n };\n let VRButton2 = _VRButton;\n __publicField(VRButton2, \"xrSessionIsGranted\", false);\n VRButton2.registerSessionGrantedListener();\n return VRButton2;\n})();\nexport {\n VRButton\n};\n//# sourceMappingURL=VRButton.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nconst MotionControllerConstants = {\n Handedness: {\n NONE: \"none\",\n LEFT: \"left\",\n RIGHT: \"right\"\n },\n ComponentState: {\n DEFAULT: \"default\",\n TOUCHED: \"touched\",\n PRESSED: \"pressed\"\n },\n ComponentProperty: {\n BUTTON: \"button\",\n X_AXIS: \"xAxis\",\n Y_AXIS: \"yAxis\",\n STATE: \"state\"\n },\n ComponentType: {\n TRIGGER: \"trigger\",\n SQUEEZE: \"squeeze\",\n TOUCHPAD: \"touchpad\",\n THUMBSTICK: \"thumbstick\",\n BUTTON: \"button\"\n },\n ButtonTouchThreshold: 0.05,\n AxisTouchThreshold: 0.1,\n VisualResponseProperty: {\n TRANSFORM: \"transform\",\n VISIBILITY: \"visibility\"\n }\n};\nasync function fetchJsonFile(path) {\n const response = await fetch(path);\n if (!response.ok) {\n throw new Error(response.statusText);\n } else {\n return response.json();\n }\n}\nasync function fetchProfilesList(basePath) {\n if (!basePath) {\n throw new Error(\"No basePath supplied\");\n }\n const profileListFileName = \"profilesList.json\";\n const profilesList = await fetchJsonFile(`${basePath}/${profileListFileName}`);\n return profilesList;\n}\nasync function fetchProfile(xrInputSource, basePath, defaultProfile = null, getAssetPath = true) {\n if (!xrInputSource) {\n throw new Error(\"No xrInputSource supplied\");\n }\n if (!basePath) {\n throw new Error(\"No basePath supplied\");\n }\n const supportedProfilesList = await fetchProfilesList(basePath);\n let match = void 0;\n xrInputSource.profiles.some((profileId) => {\n const supportedProfile = supportedProfilesList[profileId];\n if (supportedProfile) {\n match = {\n profileId,\n profilePath: `${basePath}/${supportedProfile.path}`,\n deprecated: !!supportedProfile.deprecated\n };\n }\n return !!match;\n });\n if (!match) {\n if (!defaultProfile) {\n throw new Error(\"No matching profile name found\");\n }\n const supportedProfile = supportedProfilesList[defaultProfile];\n if (!supportedProfile) {\n throw new Error(`No matching profile name found and default profile \"${defaultProfile}\" missing.`);\n }\n match = {\n profileId: defaultProfile,\n profilePath: `${basePath}/${supportedProfile.path}`,\n deprecated: !!supportedProfile.deprecated\n };\n }\n const profile = await fetchJsonFile(match.profilePath);\n let assetPath = void 0;\n if (getAssetPath) {\n let layout;\n if (xrInputSource.handedness === \"any\") {\n layout = profile.layouts[Object.keys(profile.layouts)[0]];\n } else {\n layout = profile.layouts[xrInputSource.handedness];\n }\n if (!layout) {\n throw new Error(`No matching handedness, ${xrInputSource.handedness}, in profile ${match.profileId}`);\n }\n if (layout.assetPath) {\n assetPath = match.profilePath.replace(\"profile.json\", layout.assetPath);\n }\n }\n return { profile, assetPath };\n}\nconst defaultComponentValues = {\n xAxis: 0,\n yAxis: 0,\n button: 0,\n state: MotionControllerConstants.ComponentState.DEFAULT\n};\nfunction normalizeAxes(x = 0, y = 0) {\n let xAxis = x;\n let yAxis = y;\n const hypotenuse = Math.sqrt(x * x + y * y);\n if (hypotenuse > 1) {\n const theta = Math.atan2(y, x);\n xAxis = Math.cos(theta);\n yAxis = Math.sin(theta);\n }\n const result = {\n normalizedXAxis: xAxis * 0.5 + 0.5,\n normalizedYAxis: yAxis * 0.5 + 0.5\n };\n return result;\n}\nclass VisualResponse {\n constructor(visualResponseDescription) {\n __publicField(this, \"value\");\n __publicField(this, \"componentProperty\");\n __publicField(this, \"states\");\n __publicField(this, \"valueNodeName\");\n __publicField(this, \"valueNodeProperty\");\n __publicField(this, \"minNodeName\");\n __publicField(this, \"maxNodeName\");\n __publicField(this, \"valueNode\");\n __publicField(this, \"minNode\");\n __publicField(this, \"maxNode\");\n this.componentProperty = visualResponseDescription.componentProperty;\n this.states = visualResponseDescription.states;\n this.valueNodeName = visualResponseDescription.valueNodeName;\n this.valueNodeProperty = visualResponseDescription.valueNodeProperty;\n if (this.valueNodeProperty === MotionControllerConstants.VisualResponseProperty.TRANSFORM) {\n this.minNodeName = visualResponseDescription.minNodeName;\n this.maxNodeName = visualResponseDescription.maxNodeName;\n }\n this.value = 0;\n this.updateFromComponent(defaultComponentValues);\n }\n /**\n * Computes the visual response's interpolation weight based on component state\n * @param {Object} componentValues - The component from which to update\n * @param {number | undefined} xAxis - The reported X axis value of the component\n * @param {number | undefined} yAxis - The reported Y axis value of the component\n * @param {number | undefined} button - The reported value of the component's button\n * @param {string} state - The component's active state\n */\n updateFromComponent({\n xAxis,\n yAxis,\n button,\n state\n }) {\n const { normalizedXAxis, normalizedYAxis } = normalizeAxes(xAxis, yAxis);\n switch (this.componentProperty) {\n case MotionControllerConstants.ComponentProperty.X_AXIS:\n this.value = this.states.includes(state) ? normalizedXAxis : 0.5;\n break;\n case MotionControllerConstants.ComponentProperty.Y_AXIS:\n this.value = this.states.includes(state) ? normalizedYAxis : 0.5;\n break;\n case MotionControllerConstants.ComponentProperty.BUTTON:\n this.value = this.states.includes(state) && button ? button : 0;\n break;\n case MotionControllerConstants.ComponentProperty.STATE:\n if (this.valueNodeProperty === MotionControllerConstants.VisualResponseProperty.VISIBILITY) {\n this.value = this.states.includes(state);\n } else {\n this.value = this.states.includes(state) ? 1 : 0;\n }\n break;\n default:\n throw new Error(`Unexpected visualResponse componentProperty ${this.componentProperty}`);\n }\n }\n}\nclass Component {\n /**\n * @param {string} componentId - Id of the component\n * @param {InputProfileComponent} componentDescription - Description of the component to be created\n */\n constructor(componentId, componentDescription) {\n __publicField(this, \"id\");\n __publicField(this, \"values\");\n __publicField(this, \"type\");\n __publicField(this, \"gamepadIndices\");\n __publicField(this, \"rootNodeName\");\n __publicField(this, \"visualResponses\");\n __publicField(this, \"touchPointNodeName\");\n __publicField(this, \"touchPointNode\");\n if (!componentId || !componentDescription || !componentDescription.visualResponses || !componentDescription.gamepadIndices || Object.keys(componentDescription.gamepadIndices).length === 0) {\n throw new Error(\"Invalid arguments supplied\");\n }\n this.id = componentId;\n this.type = componentDescription.type;\n this.rootNodeName = componentDescription.rootNodeName;\n this.touchPointNodeName = componentDescription.touchPointNodeName;\n this.visualResponses = {};\n Object.keys(componentDescription.visualResponses).forEach((responseName) => {\n const visualResponse = new VisualResponse(componentDescription.visualResponses[responseName]);\n this.visualResponses[responseName] = visualResponse;\n });\n this.gamepadIndices = Object.assign({}, componentDescription.gamepadIndices);\n this.values = {\n state: MotionControllerConstants.ComponentState.DEFAULT,\n button: this.gamepadIndices.button !== void 0 ? 0 : void 0,\n xAxis: this.gamepadIndices.xAxis !== void 0 ? 0 : void 0,\n yAxis: this.gamepadIndices.yAxis !== void 0 ? 0 : void 0\n };\n }\n get data() {\n const data = { id: this.id, ...this.values };\n return data;\n }\n /**\n * @description Poll for updated data based on current gamepad state\n * @param {Object} gamepad - The gamepad object from which the component data should be polled\n */\n updateFromGamepad(gamepad) {\n this.values.state = MotionControllerConstants.ComponentState.DEFAULT;\n if (this.gamepadIndices.button !== void 0 && gamepad.buttons.length > this.gamepadIndices.button) {\n const gamepadButton = gamepad.buttons[this.gamepadIndices.button];\n this.values.button = gamepadButton.value;\n this.values.button = this.values.button < 0 ? 0 : this.values.button;\n this.values.button = this.values.button > 1 ? 1 : this.values.button;\n if (gamepadButton.pressed || this.values.button === 1) {\n this.values.state = MotionControllerConstants.ComponentState.PRESSED;\n } else if (gamepadButton.touched || this.values.button > MotionControllerConstants.ButtonTouchThreshold) {\n this.values.state = MotionControllerConstants.ComponentState.TOUCHED;\n }\n }\n if (this.gamepadIndices.xAxis !== void 0 && gamepad.axes.length > this.gamepadIndices.xAxis) {\n this.values.xAxis = gamepad.axes[this.gamepadIndices.xAxis];\n this.values.xAxis = this.values.xAxis < -1 ? -1 : this.values.xAxis;\n this.values.xAxis = this.values.xAxis > 1 ? 1 : this.values.xAxis;\n if (this.values.state === MotionControllerConstants.ComponentState.DEFAULT && Math.abs(this.values.xAxis) > MotionControllerConstants.AxisTouchThreshold) {\n this.values.state = MotionControllerConstants.ComponentState.TOUCHED;\n }\n }\n if (this.gamepadIndices.yAxis !== void 0 && gamepad.axes.length > this.gamepadIndices.yAxis) {\n this.values.yAxis = gamepad.axes[this.gamepadIndices.yAxis];\n this.values.yAxis = this.values.yAxis < -1 ? -1 : this.values.yAxis;\n this.values.yAxis = this.values.yAxis > 1 ? 1 : this.values.yAxis;\n if (this.values.state === MotionControllerConstants.ComponentState.DEFAULT && Math.abs(this.values.yAxis) > MotionControllerConstants.AxisTouchThreshold) {\n this.values.state = MotionControllerConstants.ComponentState.TOUCHED;\n }\n }\n Object.values(this.visualResponses).forEach((visualResponse) => {\n visualResponse.updateFromComponent(this.values);\n });\n }\n}\nclass MotionController {\n /**\n * @param {XRInputSource} xrInputSource - The XRInputSource to build the MotionController around\n * @param {Profile} profile - The best matched profile description for the supplied xrInputSource\n * @param {string} assetUrl\n */\n constructor(xrInputSource, profile, assetUrl) {\n __publicField(this, \"xrInputSource\");\n __publicField(this, \"assetUrl\");\n __publicField(this, \"layoutDescription\");\n __publicField(this, \"id\");\n __publicField(this, \"components\");\n if (!xrInputSource) {\n throw new Error(\"No xrInputSource supplied\");\n }\n if (!profile) {\n throw new Error(\"No profile supplied\");\n }\n if (!profile.layouts[xrInputSource.handedness]) {\n throw new Error(\"No layout for \" + xrInputSource.handedness + \" handedness\");\n }\n this.xrInputSource = xrInputSource;\n this.assetUrl = assetUrl;\n this.id = profile.profileId;\n this.layoutDescription = profile.layouts[xrInputSource.handedness];\n this.components = {};\n Object.keys(this.layoutDescription.components).forEach((componentId) => {\n const componentDescription = this.layoutDescription.components[componentId];\n this.components[componentId] = new Component(componentId, componentDescription);\n });\n this.updateFromGamepad();\n }\n get gripSpace() {\n return this.xrInputSource.gripSpace;\n }\n get targetRaySpace() {\n return this.xrInputSource.targetRaySpace;\n }\n /**\n * @description Returns a subset of component data for simplified debugging\n */\n get data() {\n const data = [];\n Object.values(this.components).forEach((component) => {\n data.push(component.data);\n });\n return data;\n }\n /**\n * @description Poll for updated data based on current gamepad state\n */\n updateFromGamepad() {\n Object.values(this.components).forEach((component) => {\n component.updateFromGamepad(this.xrInputSource.gamepad);\n });\n }\n}\nexport {\n MotionController,\n MotionControllerConstants,\n fetchProfile,\n fetchProfilesList\n};\n//# sourceMappingURL=MotionControllers.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Object3D, Mesh, SphereGeometry, MeshBasicMaterial } from \"three\";\nimport { GLTFLoader } from \"../loaders/GLTFLoader.js\";\nimport { MotionControllerConstants, fetchProfile, MotionController } from \"../libs/MotionControllers.js\";\nconst DEFAULT_PROFILES_PATH = \"https://cdn.jsdelivr.net/npm/@webxr-input-profiles/assets@1.0/dist/profiles\";\nconst DEFAULT_PROFILE = \"generic-trigger\";\nconst applyEnvironmentMap = (envMap, obj) => {\n obj.traverse((child) => {\n if (child instanceof Mesh && \"envMap\" in child.material) {\n child.material.envMap = envMap;\n child.material.needsUpdate = true;\n }\n });\n};\nclass XRControllerModel extends Object3D {\n constructor() {\n super();\n __publicField(this, \"envMap\");\n __publicField(this, \"motionController\");\n this.motionController = null;\n this.envMap = null;\n }\n setEnvironmentMap(envMap) {\n if (this.envMap == envMap) {\n return this;\n }\n this.envMap = envMap;\n applyEnvironmentMap(this.envMap, this);\n return this;\n }\n /**\n * Polls data from the XRInputSource and updates the model's components to match\n * the real world data\n */\n updateMatrixWorld(force) {\n super.updateMatrixWorld(force);\n if (!this.motionController)\n return;\n this.motionController.updateFromGamepad();\n Object.values(this.motionController.components).forEach((component) => {\n Object.values(component.visualResponses).forEach((visualResponse) => {\n const { valueNode, minNode, maxNode, value, valueNodeProperty } = visualResponse;\n if (!valueNode)\n return;\n if (valueNodeProperty === MotionControllerConstants.VisualResponseProperty.VISIBILITY && typeof value === \"boolean\") {\n valueNode.visible = value;\n } else if (valueNodeProperty === MotionControllerConstants.VisualResponseProperty.TRANSFORM && minNode && maxNode && typeof value === \"number\") {\n valueNode.quaternion.slerpQuaternions(minNode.quaternion, maxNode.quaternion, value);\n valueNode.position.lerpVectors(minNode.position, maxNode.position, value);\n }\n });\n });\n }\n}\nfunction findNodes(motionController, scene) {\n Object.values(motionController.components).forEach((component) => {\n const { type, touchPointNodeName, visualResponses } = component;\n if (type === MotionControllerConstants.ComponentType.TOUCHPAD && touchPointNodeName) {\n component.touchPointNode = scene.getObjectByName(touchPointNodeName);\n if (component.touchPointNode) {\n const sphereGeometry = new SphereGeometry(1e-3);\n const material = new MeshBasicMaterial({ color: 255 });\n const sphere = new Mesh(sphereGeometry, material);\n component.touchPointNode.add(sphere);\n } else {\n console.warn(`Could not find touch dot, ${component.touchPointNodeName}, in touchpad component ${component.id}`);\n }\n }\n Object.values(visualResponses).forEach((visualResponse) => {\n const { valueNodeName, minNodeName, maxNodeName, valueNodeProperty } = visualResponse;\n if (valueNodeProperty === MotionControllerConstants.VisualResponseProperty.TRANSFORM && minNodeName && maxNodeName) {\n visualResponse.minNode = scene.getObjectByName(minNodeName);\n visualResponse.maxNode = scene.getObjectByName(maxNodeName);\n if (!visualResponse.minNode) {\n console.warn(`Could not find ${minNodeName} in the model`);\n return;\n }\n if (!visualResponse.maxNode) {\n console.warn(`Could not find ${maxNodeName} in the model`);\n return;\n }\n }\n visualResponse.valueNode = scene.getObjectByName(valueNodeName);\n if (!visualResponse.valueNode) {\n console.warn(`Could not find ${valueNodeName} in the model`);\n }\n });\n });\n}\nfunction addAssetSceneToControllerModel(controllerModel, scene) {\n findNodes(controllerModel.motionController, scene);\n if (controllerModel.envMap) {\n applyEnvironmentMap(controllerModel.envMap, scene);\n }\n controllerModel.add(scene);\n}\nclass XRControllerModelFactory {\n constructor(gltfLoader = null) {\n __publicField(this, \"gltfLoader\");\n __publicField(this, \"path\");\n __publicField(this, \"_assetCache\");\n this.gltfLoader = gltfLoader;\n this.path = DEFAULT_PROFILES_PATH;\n this._assetCache = {};\n if (!this.gltfLoader) {\n this.gltfLoader = new GLTFLoader();\n }\n }\n createControllerModel(controller) {\n const controllerModel = new XRControllerModel();\n let scene = null;\n const onConnected = (event) => {\n const xrInputSource = event.data;\n if (xrInputSource.targetRayMode !== \"tracked-pointer\" || !xrInputSource.gamepad)\n return;\n fetchProfile(xrInputSource, this.path, DEFAULT_PROFILE).then(({ profile, assetPath }) => {\n if (!assetPath) {\n throw new Error(\"no asset path\");\n }\n controllerModel.motionController = new MotionController(xrInputSource, profile, assetPath);\n const assetUrl = controllerModel.motionController.assetUrl;\n const cachedAsset = this._assetCache[assetUrl];\n if (cachedAsset) {\n scene = cachedAsset.scene.clone();\n addAssetSceneToControllerModel(controllerModel, scene);\n } else {\n if (!this.gltfLoader) {\n throw new Error(\"GLTFLoader not set.\");\n }\n this.gltfLoader.setPath(\"\");\n this.gltfLoader.load(\n controllerModel.motionController.assetUrl,\n (asset) => {\n if (!controllerModel.motionController) {\n console.warn(\"motionController gone while gltf load, bailing...\");\n return;\n }\n this._assetCache[assetUrl] = asset;\n scene = asset.scene.clone();\n addAssetSceneToControllerModel(controllerModel, scene);\n },\n () => {\n },\n () => {\n throw new Error(`Asset ${assetUrl} missing or malformed.`);\n }\n );\n }\n }).catch((err) => {\n console.warn(err);\n });\n };\n controller.addEventListener(\"connected\", onConnected);\n const onDisconnected = () => {\n controller.removeEventListener(\"connected\", onConnected);\n controller.removeEventListener(\"disconnected\", onDisconnected);\n controllerModel.motionController = null;\n if (scene) {\n controllerModel.remove(scene);\n }\n scene = null;\n };\n controller.addEventListener(\"disconnected\", onDisconnected);\n return controllerModel;\n }\n}\nexport {\n XRControllerModelFactory\n};\n//# sourceMappingURL=XRControllerModelFactory.js.map\n","import { Group, LightProbe, DirectionalLight, WebGLCubeRenderTarget } from \"three\";\nclass SessionLightProbe {\n constructor(xrLight, renderer, lightProbe, environmentEstimation, estimationStartCallback) {\n this.xrLight = xrLight;\n this.renderer = renderer;\n this.lightProbe = lightProbe;\n this.xrWebGLBinding = null;\n this.estimationStartCallback = estimationStartCallback;\n this.frameCallback = this.onXRFrame.bind(this);\n const session = renderer.xr.getSession();\n if (environmentEstimation && \"XRWebGLBinding\" in window) {\n const cubeRenderTarget = new WebGLCubeRenderTarget(16);\n xrLight.environment = cubeRenderTarget.texture;\n const gl = renderer.getContext();\n switch (session.preferredReflectionFormat) {\n case \"srgba8\":\n gl.getExtension(\"EXT_sRGB\");\n break;\n case \"rgba16f\":\n gl.getExtension(\"OES_texture_half_float\");\n break;\n }\n this.xrWebGLBinding = new XRWebGLBinding(session, gl);\n this.lightProbe.addEventListener(\"reflectionchange\", () => {\n this.updateReflection();\n });\n }\n session.requestAnimationFrame(this.frameCallback);\n }\n updateReflection() {\n const textureProperties = this.renderer.properties.get(this.xrLight.environment);\n if (textureProperties) {\n const cubeMap = this.xrWebGLBinding.getReflectionCubeMap(this.lightProbe);\n if (cubeMap) {\n textureProperties.__webglTexture = cubeMap;\n this.xrLight.environment.needsPMREMUpdate = true;\n }\n }\n }\n onXRFrame(time, xrFrame) {\n if (!this.xrLight) {\n return;\n }\n const session = xrFrame.session;\n session.requestAnimationFrame(this.frameCallback);\n const lightEstimate = xrFrame.getLightEstimate(this.lightProbe);\n if (lightEstimate) {\n this.xrLight.lightProbe.sh.fromArray(lightEstimate.sphericalHarmonicsCoefficients);\n this.xrLight.lightProbe.intensity = 1;\n const intensityScalar = Math.max(\n 1,\n Math.max(\n lightEstimate.primaryLightIntensity.x,\n Math.max(lightEstimate.primaryLightIntensity.y, lightEstimate.primaryLightIntensity.z)\n )\n );\n this.xrLight.directionalLight.color.setRGB(\n lightEstimate.primaryLightIntensity.x / intensityScalar,\n lightEstimate.primaryLightIntensity.y / intensityScalar,\n lightEstimate.primaryLightIntensity.z / intensityScalar\n );\n this.xrLight.directionalLight.intensity = intensityScalar;\n this.xrLight.directionalLight.position.copy(lightEstimate.primaryLightDirection);\n if (this.estimationStartCallback) {\n this.estimationStartCallback();\n this.estimationStartCallback = null;\n }\n }\n }\n dispose() {\n this.xrLight = null;\n this.renderer = null;\n this.lightProbe = null;\n this.xrWebGLBinding = null;\n }\n}\nclass XREstimatedLight extends Group {\n constructor(renderer, environmentEstimation = true) {\n super();\n this.lightProbe = new LightProbe();\n this.lightProbe.intensity = 0;\n this.add(this.lightProbe);\n this.directionalLight = new DirectionalLight();\n this.directionalLight.intensity = 0;\n this.add(this.directionalLight);\n this.environment = null;\n let sessionLightProbe = null;\n let estimationStarted = false;\n renderer.xr.addEventListener(\"sessionstart\", () => {\n const session = renderer.xr.getSession();\n if (\"requestLightProbe\" in session) {\n session.requestLightProbe({\n reflectionFormat: session.preferredReflectionFormat\n }).then((probe) => {\n sessionLightProbe = new SessionLightProbe(this, renderer, probe, environmentEstimation, () => {\n estimationStarted = true;\n this.dispatchEvent({ type: \"estimationstart\" });\n });\n });\n }\n });\n renderer.xr.addEventListener(\"sessionend\", () => {\n if (sessionLightProbe) {\n sessionLightProbe.dispose();\n sessionLightProbe = null;\n }\n if (estimationStarted) {\n this.dispatchEvent({ type: \"estimationend\" });\n }\n });\n this.dispose = () => {\n if (sessionLightProbe) {\n sessionLightProbe.dispose();\n sessionLightProbe = null;\n }\n this.remove(this.lightProbe);\n this.lightProbe = null;\n this.remove(this.directionalLight);\n this.directionalLight = null;\n this.environment = null;\n };\n }\n}\nexport {\n XREstimatedLight\n};\n//# sourceMappingURL=XREstimatedLight.js.map\n","import { SphereGeometry, BoxGeometry, MeshStandardMaterial, InstancedMesh, DynamicDrawUsage, Matrix4, Vector3 } from \"three\";\nconst _matrix = /* @__PURE__ */ new Matrix4();\nconst _vector = /* @__PURE__ */ new Vector3();\nclass XRHandPrimitiveModel {\n constructor(handModel, controller, path, handedness, options) {\n this.controller = controller;\n this.handModel = handModel;\n this.envMap = null;\n let geometry;\n if (!options || !options.primitive || options.primitive === \"sphere\") {\n geometry = new SphereGeometry(1, 10, 10);\n } else if (options.primitive === \"box\") {\n geometry = new BoxGeometry(1, 1, 1);\n }\n const material = new MeshStandardMaterial();\n this.handMesh = new InstancedMesh(geometry, material, 30);\n this.handMesh.instanceMatrix.setUsage(DynamicDrawUsage);\n this.handMesh.castShadow = true;\n this.handMesh.receiveShadow = true;\n this.handModel.add(this.handMesh);\n this.joints = [\n \"wrist\",\n \"thumb-metacarpal\",\n \"thumb-phalanx-proximal\",\n \"thumb-phalanx-distal\",\n \"thumb-tip\",\n \"index-finger-metacarpal\",\n \"index-finger-phalanx-proximal\",\n \"index-finger-phalanx-intermediate\",\n \"index-finger-phalanx-distal\",\n \"index-finger-tip\",\n \"middle-finger-metacarpal\",\n \"middle-finger-phalanx-proximal\",\n \"middle-finger-phalanx-intermediate\",\n \"middle-finger-phalanx-distal\",\n \"middle-finger-tip\",\n \"ring-finger-metacarpal\",\n \"ring-finger-phalanx-proximal\",\n \"ring-finger-phalanx-intermediate\",\n \"ring-finger-phalanx-distal\",\n \"ring-finger-tip\",\n \"pinky-finger-metacarpal\",\n \"pinky-finger-phalanx-proximal\",\n \"pinky-finger-phalanx-intermediate\",\n \"pinky-finger-phalanx-distal\",\n \"pinky-finger-tip\"\n ];\n }\n updateMesh() {\n const defaultRadius = 8e-3;\n const joints = this.controller.joints;\n let count = 0;\n for (let i = 0; i < this.joints.length; i++) {\n const joint = joints[this.joints[i]];\n if (joint.visible) {\n _vector.setScalar(joint.jointRadius || defaultRadius);\n _matrix.compose(joint.position, joint.quaternion, _vector);\n this.handMesh.setMatrixAt(i, _matrix);\n count++;\n }\n }\n this.handMesh.count = count;\n this.handMesh.instanceMatrix.needsUpdate = true;\n }\n}\nexport {\n XRHandPrimitiveModel\n};\n//# sourceMappingURL=XRHandPrimitiveModel.js.map\n","import { Object3D } from \"three\";\nimport { XRHandPrimitiveModel } from \"./XRHandPrimitiveModel.js\";\nimport { XRHandMeshModel } from \"./XRHandMeshModel.js\";\nclass XRHandModel extends Object3D {\n constructor(controller) {\n super();\n this.controller = controller;\n this.motionController = null;\n this.envMap = null;\n this.mesh = null;\n }\n updateMatrixWorld(force) {\n super.updateMatrixWorld(force);\n if (this.motionController) {\n this.motionController.updateMesh();\n }\n }\n}\nclass XRHandModelFactory {\n constructor() {\n this.path = null;\n }\n setPath(path) {\n this.path = path;\n return this;\n }\n createHandModel(controller, profile) {\n const handModel = new XRHandModel(controller);\n controller.addEventListener(\"connected\", (event) => {\n const xrInputSource = event.data;\n if (xrInputSource.hand && !handModel.motionController) {\n handModel.xrInputSource = xrInputSource;\n if (profile === void 0 || profile === \"spheres\") {\n handModel.motionController = new XRHandPrimitiveModel(\n handModel,\n controller,\n this.path,\n xrInputSource.handedness,\n { primitive: \"sphere\" }\n );\n } else if (profile === \"boxes\") {\n handModel.motionController = new XRHandPrimitiveModel(\n handModel,\n controller,\n this.path,\n xrInputSource.handedness,\n { primitive: \"box\" }\n );\n } else if (profile === \"mesh\") {\n handModel.motionController = new XRHandMeshModel(handModel, controller, this.path, xrInputSource.handedness);\n }\n }\n });\n controller.addEventListener(\"disconnected\", () => {\n });\n return handModel;\n }\n}\nexport {\n XRHandModelFactory\n};\n//# sourceMappingURL=XRHandModelFactory.js.map\n","import { BufferGeometry, Vector3, Float32BufferAttribute } from \"three\";\nclass ParametricGeometry extends BufferGeometry {\n constructor(func = (u, v, target) => target.set(u, v, Math.cos(u) * Math.sin(v)), slices = 8, stacks = 8) {\n super();\n this.type = \"ParametricGeometry\";\n this.parameters = {\n func,\n slices,\n stacks\n };\n const indices = [];\n const vertices = [];\n const normals = [];\n const uvs = [];\n const EPS = 1e-5;\n const normal = new Vector3();\n const p0 = new Vector3(), p1 = new Vector3();\n const pu = new Vector3(), pv = new Vector3();\n const sliceCount = slices + 1;\n for (let i = 0; i <= stacks; i++) {\n const v = i / stacks;\n for (let j = 0; j <= slices; j++) {\n const u = j / slices;\n func(u, v, p0);\n vertices.push(p0.x, p0.y, p0.z);\n if (u - EPS >= 0) {\n func(u - EPS, v, p1);\n pu.subVectors(p0, p1);\n } else {\n func(u + EPS, v, p1);\n pu.subVectors(p1, p0);\n }\n if (v - EPS >= 0) {\n func(u, v - EPS, p1);\n pv.subVectors(p0, p1);\n } else {\n func(u, v + EPS, p1);\n pv.subVectors(p1, p0);\n }\n normal.crossVectors(pu, pv).normalize();\n normals.push(normal.x, normal.y, normal.z);\n uvs.push(u, v);\n }\n }\n for (let i = 0; i < stacks; i++) {\n for (let j = 0; j < slices; j++) {\n const a = i * sliceCount + j;\n const b = i * sliceCount + j + 1;\n const c = (i + 1) * sliceCount + j + 1;\n const d = (i + 1) * sliceCount + j;\n indices.push(a, b, d);\n indices.push(b, c, d);\n }\n }\n this.setIndex(indices);\n this.setAttribute(\"position\", new Float32BufferAttribute(vertices, 3));\n this.setAttribute(\"normal\", new Float32BufferAttribute(normals, 3));\n this.setAttribute(\"uv\", new Float32BufferAttribute(uvs, 2));\n }\n}\nexport {\n ParametricGeometry\n};\n//# sourceMappingURL=ParametricGeometry.js.map\n","import { Vector3, Curve } from \"three\";\nimport { ParametricGeometry } from \"./ParametricGeometry.js\";\nclass TubeGeometry extends ParametricGeometry {\n constructor(path, segments = 64, radius = 1, segmentsRadius = 8, closed = false) {\n const numpoints = segments + 1;\n const frames = path.computeFrenetFrames(segments, closed), tangents = frames.tangents, normals = frames.normals, binormals = frames.binormals;\n const position = new Vector3();\n function ParametricTube(u, v, target) {\n v *= 2 * Math.PI;\n const i = Math.floor(u * (numpoints - 1));\n path.getPointAt(u, position);\n const normal = normals[i];\n const binormal = binormals[i];\n const cx = -radius * Math.cos(v);\n const cy = radius * Math.sin(v);\n position.x += cx * normal.x + cy * binormal.x;\n position.y += cx * normal.y + cy * binormal.y;\n position.z += cx * normal.z + cy * binormal.z;\n target.copy(position);\n }\n super(ParametricTube, segments, segmentsRadius);\n this.tangents = tangents;\n this.normals = normals;\n this.binormals = binormals;\n this.path = path;\n this.segments = segments;\n this.radius = radius;\n this.segmentsRadius = segmentsRadius;\n this.closed = closed;\n }\n}\nconst ParametricGeometries = {\n klein: function(v, u, target) {\n u *= Math.PI;\n v *= 2 * Math.PI;\n u = u * 2;\n let x, z;\n if (u < Math.PI) {\n x = 3 * Math.cos(u) * (1 + Math.sin(u)) + 2 * (1 - Math.cos(u) / 2) * Math.cos(u) * Math.cos(v);\n z = -8 * Math.sin(u) - 2 * (1 - Math.cos(u) / 2) * Math.sin(u) * Math.cos(v);\n } else {\n x = 3 * Math.cos(u) * (1 + Math.sin(u)) + 2 * (1 - Math.cos(u) / 2) * Math.cos(v + Math.PI);\n z = -8 * Math.sin(u);\n }\n const y = -2 * (1 - Math.cos(u) / 2) * Math.sin(v);\n target.set(x, y, z);\n },\n plane: function(width, height) {\n return function(u, v, target) {\n const x = u * width;\n const y = 0;\n const z = v * height;\n target.set(x, y, z);\n };\n },\n mobius: function(u, t, target) {\n u = u - 0.5;\n const v = 2 * Math.PI * t;\n const a = 2;\n const x = Math.cos(v) * (a + u * Math.cos(v / 2));\n const y = Math.sin(v) * (a + u * Math.cos(v / 2));\n const z = u * Math.sin(v / 2);\n target.set(x, y, z);\n },\n mobius3d: function(u, t, target) {\n u *= Math.PI;\n t *= 2 * Math.PI;\n u = u * 2;\n const phi = u / 2;\n const major = 2.25, a = 0.125, b = 0.65;\n let x = a * Math.cos(t) * Math.cos(phi) - b * Math.sin(t) * Math.sin(phi);\n const z = a * Math.cos(t) * Math.sin(phi) + b * Math.sin(t) * Math.cos(phi);\n const y = (major + x) * Math.sin(u);\n x = (major + x) * Math.cos(u);\n target.set(x, y, z);\n },\n TubeGeometry,\n TorusKnotGeometry: class TorusKnotGeometry extends TubeGeometry {\n constructor(radius = 200, tube = 40, segmentsT = 64, segmentsR = 8, p = 2, q = 3) {\n class TorusKnotCurve extends Curve {\n getPoint(t, optionalTarget = new Vector3()) {\n const point = optionalTarget;\n t *= Math.PI * 2;\n const r = 0.5;\n const x = (1 + r * Math.cos(q * t)) * Math.cos(p * t);\n const y = (1 + r * Math.cos(q * t)) * Math.sin(p * t);\n const z = r * Math.sin(q * t);\n return point.set(x, y, z).multiplyScalar(radius);\n }\n }\n const segments = segmentsT;\n const radiusSegments = segmentsR;\n const extrudePath = new TorusKnotCurve();\n super(extrudePath, segments, tube, radiusSegments, true, false);\n this.radius = radius;\n this.tube = tube;\n this.segmentsT = segmentsT;\n this.segmentsR = segmentsR;\n this.p = p;\n this.q = q;\n }\n },\n SphereGeometry: class SphereGeometry extends ParametricGeometry {\n constructor(size, u, v) {\n function sphere(u2, v2, target) {\n u2 *= Math.PI;\n v2 *= 2 * Math.PI;\n const x = size * Math.sin(u2) * Math.cos(v2);\n const y = size * Math.sin(u2) * Math.sin(v2);\n const z = size * Math.cos(u2);\n target.set(x, y, z);\n }\n super(sphere, u, v);\n }\n },\n PlaneGeometry: class PlaneGeometry extends ParametricGeometry {\n constructor(width, depth, segmentsWidth, segmentsDepth) {\n function plane(u, v, target) {\n const x = u * width;\n const y = 0;\n const z = v * depth;\n target.set(x, y, z);\n }\n super(plane, segmentsWidth, segmentsDepth);\n }\n }\n};\nexport {\n ParametricGeometries\n};\n//# sourceMappingURL=ParametricGeometries.js.map\n","import { BoxGeometry, Vector3 } from \"three\";\nconst tempNormal = /* @__PURE__ */ new Vector3();\nfunction getUv(faceDirVector, normal, uvAxis, projectionAxis, radius, sideLength) {\n const totArcLength = 2 * Math.PI * radius / 4;\n const centerLength = Math.max(sideLength - 2 * radius, 0);\n const halfArc = Math.PI / 4;\n tempNormal.copy(normal);\n tempNormal[projectionAxis] = 0;\n tempNormal.normalize();\n const arcUvRatio = 0.5 * totArcLength / (totArcLength + centerLength);\n const arcAngleRatio = 1 - tempNormal.angleTo(faceDirVector) / halfArc;\n if (Math.sign(tempNormal[uvAxis]) === 1) {\n return arcAngleRatio * arcUvRatio;\n } else {\n const lenUv = centerLength / (totArcLength + centerLength);\n return lenUv + arcUvRatio + arcUvRatio * (1 - arcAngleRatio);\n }\n}\nclass RoundedBoxGeometry extends BoxGeometry {\n constructor(width = 1, height = 1, depth = 1, segments = 2, radius = 0.1) {\n segments = segments * 2 + 1;\n radius = Math.min(width / 2, height / 2, depth / 2, radius);\n super(1, 1, 1, segments, segments, segments);\n if (segments === 1)\n return;\n const geometry2 = this.toNonIndexed();\n this.index = null;\n this.attributes.position = geometry2.attributes.position;\n this.attributes.normal = geometry2.attributes.normal;\n this.attributes.uv = geometry2.attributes.uv;\n const position = new Vector3();\n const normal = new Vector3();\n const box = new Vector3(width, height, depth).divideScalar(2).subScalar(radius);\n const positions = this.attributes.position.array;\n const normals = this.attributes.normal.array;\n const uvs = this.attributes.uv.array;\n const faceTris = positions.length / 6;\n const faceDirVector = new Vector3();\n const halfSegmentSize = 0.5 / segments;\n for (let i = 0, j = 0; i < positions.length; i += 3, j += 2) {\n position.fromArray(positions, i);\n normal.copy(position);\n normal.x -= Math.sign(normal.x) * halfSegmentSize;\n normal.y -= Math.sign(normal.y) * halfSegmentSize;\n normal.z -= Math.sign(normal.z) * halfSegmentSize;\n normal.normalize();\n positions[i + 0] = box.x * Math.sign(position.x) + normal.x * radius;\n positions[i + 1] = box.y * Math.sign(position.y) + normal.y * radius;\n positions[i + 2] = box.z * Math.sign(position.z) + normal.z * radius;\n normals[i + 0] = normal.x;\n normals[i + 1] = normal.y;\n normals[i + 2] = normal.z;\n const side = Math.floor(i / faceTris);\n switch (side) {\n case 0:\n faceDirVector.set(1, 0, 0);\n uvs[j + 0] = getUv(faceDirVector, normal, \"z\", \"y\", radius, depth);\n uvs[j + 1] = 1 - getUv(faceDirVector, normal, \"y\", \"z\", radius, height);\n break;\n case 1:\n faceDirVector.set(-1, 0, 0);\n uvs[j + 0] = 1 - getUv(faceDirVector, normal, \"z\", \"y\", radius, depth);\n uvs[j + 1] = 1 - getUv(faceDirVector, normal, \"y\", \"z\", radius, height);\n break;\n case 2:\n faceDirVector.set(0, 1, 0);\n uvs[j + 0] = 1 - getUv(faceDirVector, normal, \"x\", \"z\", radius, width);\n uvs[j + 1] = getUv(faceDirVector, normal, \"z\", \"x\", radius, depth);\n break;\n case 3:\n faceDirVector.set(0, -1, 0);\n uvs[j + 0] = 1 - getUv(faceDirVector, normal, \"x\", \"z\", radius, width);\n uvs[j + 1] = 1 - getUv(faceDirVector, normal, \"z\", \"x\", radius, depth);\n break;\n case 4:\n faceDirVector.set(0, 0, 1);\n uvs[j + 0] = 1 - getUv(faceDirVector, normal, \"x\", \"y\", radius, width);\n uvs[j + 1] = 1 - getUv(faceDirVector, normal, \"y\", \"x\", radius, height);\n break;\n case 5:\n faceDirVector.set(0, 0, -1);\n uvs[j + 0] = getUv(faceDirVector, normal, \"x\", \"y\", radius, width);\n uvs[j + 1] = 1 - getUv(faceDirVector, normal, \"y\", \"x\", radius, height);\n break;\n }\n }\n }\n}\nexport {\n RoundedBoxGeometry\n};\n//# sourceMappingURL=RoundedBoxGeometry.js.map\n","import { BufferGeometry, Float32BufferAttribute } from \"three\";\nclass BoxLineGeometry extends BufferGeometry {\n constructor(width, height, depth, widthSegments, heightSegments, depthSegments) {\n super();\n width = width || 1;\n height = height || 1;\n depth = depth || 1;\n widthSegments = Math.floor(widthSegments) || 1;\n heightSegments = Math.floor(heightSegments) || 1;\n depthSegments = Math.floor(depthSegments) || 1;\n const widthHalf = width / 2;\n const heightHalf = height / 2;\n const depthHalf = depth / 2;\n const segmentWidth = width / widthSegments;\n const segmentHeight = height / heightSegments;\n const segmentDepth = depth / depthSegments;\n const vertices = [];\n let x = -widthHalf, y = -heightHalf, z = -depthHalf;\n for (let i = 0; i <= widthSegments; i++) {\n vertices.push(x, -heightHalf, -depthHalf, x, heightHalf, -depthHalf);\n vertices.push(x, heightHalf, -depthHalf, x, heightHalf, depthHalf);\n vertices.push(x, heightHalf, depthHalf, x, -heightHalf, depthHalf);\n vertices.push(x, -heightHalf, depthHalf, x, -heightHalf, -depthHalf);\n x += segmentWidth;\n }\n for (let i = 0; i <= heightSegments; i++) {\n vertices.push(-widthHalf, y, -depthHalf, widthHalf, y, -depthHalf);\n vertices.push(widthHalf, y, -depthHalf, widthHalf, y, depthHalf);\n vertices.push(widthHalf, y, depthHalf, -widthHalf, y, depthHalf);\n vertices.push(-widthHalf, y, depthHalf, -widthHalf, y, -depthHalf);\n y += segmentHeight;\n }\n for (let i = 0; i <= depthSegments; i++) {\n vertices.push(-widthHalf, -heightHalf, z, -widthHalf, heightHalf, z);\n vertices.push(-widthHalf, heightHalf, z, widthHalf, heightHalf, z);\n vertices.push(widthHalf, heightHalf, z, widthHalf, -heightHalf, z);\n vertices.push(widthHalf, -heightHalf, z, -widthHalf, -heightHalf, z);\n z += segmentDepth;\n }\n this.setAttribute(\"position\", new Float32BufferAttribute(vertices, 3));\n }\n}\nexport {\n BoxLineGeometry\n};\n//# sourceMappingURL=BoxLineGeometry.js.map\n","import { BufferGeometry, Vector3, Matrix4, Float32BufferAttribute } from \"three\";\nclass DecalGeometry extends BufferGeometry {\n constructor(mesh, position, orientation, size) {\n super();\n const vertices = [];\n const normals = [];\n const uvs = [];\n const plane = new Vector3();\n const projectorMatrix = new Matrix4();\n projectorMatrix.makeRotationFromEuler(orientation);\n projectorMatrix.setPosition(position);\n const projectorMatrixInverse = new Matrix4();\n projectorMatrixInverse.copy(projectorMatrix).invert();\n generate();\n this.setAttribute(\"position\", new Float32BufferAttribute(vertices, 3));\n this.setAttribute(\"normal\", new Float32BufferAttribute(normals, 3));\n this.setAttribute(\"uv\", new Float32BufferAttribute(uvs, 2));\n function generate() {\n let i;\n let decalVertices = [];\n const vertex = new Vector3();\n const normal = new Vector3();\n if (mesh.geometry.isGeometry === true) {\n console.error(\"THREE.DecalGeometry no longer supports THREE.Geometry. Use BufferGeometry instead.\");\n return;\n }\n const geometry = mesh.geometry;\n const positionAttribute = geometry.attributes.position;\n const normalAttribute = geometry.attributes.normal;\n if (geometry.index !== null) {\n const index = geometry.index;\n for (i = 0; i < index.count; i++) {\n vertex.fromBufferAttribute(positionAttribute, index.getX(i));\n normal.fromBufferAttribute(normalAttribute, index.getX(i));\n pushDecalVertex(decalVertices, vertex, normal);\n }\n } else {\n for (i = 0; i < positionAttribute.count; i++) {\n vertex.fromBufferAttribute(positionAttribute, i);\n normal.fromBufferAttribute(normalAttribute, i);\n pushDecalVertex(decalVertices, vertex, normal);\n }\n }\n decalVertices = clipGeometry(decalVertices, plane.set(1, 0, 0));\n decalVertices = clipGeometry(decalVertices, plane.set(-1, 0, 0));\n decalVertices = clipGeometry(decalVertices, plane.set(0, 1, 0));\n decalVertices = clipGeometry(decalVertices, plane.set(0, -1, 0));\n decalVertices = clipGeometry(decalVertices, plane.set(0, 0, 1));\n decalVertices = clipGeometry(decalVertices, plane.set(0, 0, -1));\n for (i = 0; i < decalVertices.length; i++) {\n const decalVertex = decalVertices[i];\n uvs.push(0.5 + decalVertex.position.x / size.x, 0.5 + decalVertex.position.y / size.y);\n decalVertex.position.applyMatrix4(projectorMatrix);\n vertices.push(decalVertex.position.x, decalVertex.position.y, decalVertex.position.z);\n normals.push(decalVertex.normal.x, decalVertex.normal.y, decalVertex.normal.z);\n }\n }\n function pushDecalVertex(decalVertices, vertex, normal) {\n vertex.applyMatrix4(mesh.matrixWorld);\n vertex.applyMatrix4(projectorMatrixInverse);\n normal.transformDirection(mesh.matrixWorld);\n decalVertices.push(new DecalVertex(vertex.clone(), normal.clone()));\n }\n function clipGeometry(inVertices, plane2) {\n const outVertices = [];\n const s = 0.5 * Math.abs(size.dot(plane2));\n for (let i = 0; i < inVertices.length; i += 3) {\n let v1Out, v2Out, v3Out, total = 0;\n let nV1, nV2, nV3, nV4;\n const d1 = inVertices[i + 0].position.dot(plane2) - s;\n const d2 = inVertices[i + 1].position.dot(plane2) - s;\n const d3 = inVertices[i + 2].position.dot(plane2) - s;\n v1Out = d1 > 0;\n v2Out = d2 > 0;\n v3Out = d3 > 0;\n total = (v1Out ? 1 : 0) + (v2Out ? 1 : 0) + (v3Out ? 1 : 0);\n switch (total) {\n case 0: {\n outVertices.push(inVertices[i]);\n outVertices.push(inVertices[i + 1]);\n outVertices.push(inVertices[i + 2]);\n break;\n }\n case 1: {\n if (v1Out) {\n nV1 = inVertices[i + 1];\n nV2 = inVertices[i + 2];\n nV3 = clip(inVertices[i], nV1, plane2, s);\n nV4 = clip(inVertices[i], nV2, plane2, s);\n }\n if (v2Out) {\n nV1 = inVertices[i];\n nV2 = inVertices[i + 2];\n nV3 = clip(inVertices[i + 1], nV1, plane2, s);\n nV4 = clip(inVertices[i + 1], nV2, plane2, s);\n outVertices.push(nV3);\n outVertices.push(nV2.clone());\n outVertices.push(nV1.clone());\n outVertices.push(nV2.clone());\n outVertices.push(nV3.clone());\n outVertices.push(nV4);\n break;\n }\n if (v3Out) {\n nV1 = inVertices[i];\n nV2 = inVertices[i + 1];\n nV3 = clip(inVertices[i + 2], nV1, plane2, s);\n nV4 = clip(inVertices[i + 2], nV2, plane2, s);\n }\n outVertices.push(nV1.clone());\n outVertices.push(nV2.clone());\n outVertices.push(nV3);\n outVertices.push(nV4);\n outVertices.push(nV3.clone());\n outVertices.push(nV2.clone());\n break;\n }\n case 2: {\n if (!v1Out) {\n nV1 = inVertices[i].clone();\n nV2 = clip(nV1, inVertices[i + 1], plane2, s);\n nV3 = clip(nV1, inVertices[i + 2], plane2, s);\n outVertices.push(nV1);\n outVertices.push(nV2);\n outVertices.push(nV3);\n }\n if (!v2Out) {\n nV1 = inVertices[i + 1].clone();\n nV2 = clip(nV1, inVertices[i + 2], plane2, s);\n nV3 = clip(nV1, inVertices[i], plane2, s);\n outVertices.push(nV1);\n outVertices.push(nV2);\n outVertices.push(nV3);\n }\n if (!v3Out) {\n nV1 = inVertices[i + 2].clone();\n nV2 = clip(nV1, inVertices[i], plane2, s);\n nV3 = clip(nV1, inVertices[i + 1], plane2, s);\n outVertices.push(nV1);\n outVertices.push(nV2);\n outVertices.push(nV3);\n }\n break;\n }\n }\n }\n return outVertices;\n }\n function clip(v0, v1, p, s) {\n const d0 = v0.position.dot(p) - s;\n const d1 = v1.position.dot(p) - s;\n const s0 = d0 / (d0 - d1);\n const v = new DecalVertex(\n new Vector3(\n v0.position.x + s0 * (v1.position.x - v0.position.x),\n v0.position.y + s0 * (v1.position.y - v0.position.y),\n v0.position.z + s0 * (v1.position.z - v0.position.z)\n ),\n new Vector3(\n v0.normal.x + s0 * (v1.normal.x - v0.normal.x),\n v0.normal.y + s0 * (v1.normal.y - v0.normal.y),\n v0.normal.z + s0 * (v1.normal.z - v0.normal.z)\n )\n );\n return v;\n }\n }\n}\nclass DecalVertex {\n constructor(position, normal) {\n this.position = position;\n this.normal = normal;\n }\n clone() {\n return new this.constructor(this.position.clone(), this.normal.clone());\n }\n}\nexport {\n DecalGeometry,\n DecalVertex\n};\n//# sourceMappingURL=DecalGeometry.js.map\n","import { BufferGeometry, Matrix4, Vector3, Vector4, BufferAttribute } from \"three\";\nclass TeapotGeometry extends BufferGeometry {\n constructor(size, segments, bottom, lid, body, fitLid, blinn) {\n const teapotPatches = [\n /*rim*/\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 12,\n 13,\n 14,\n 15,\n 3,\n 16,\n 17,\n 18,\n 7,\n 19,\n 20,\n 21,\n 11,\n 22,\n 23,\n 24,\n 15,\n 25,\n 26,\n 27,\n 18,\n 28,\n 29,\n 30,\n 21,\n 31,\n 32,\n 33,\n 24,\n 34,\n 35,\n 36,\n 27,\n 37,\n 38,\n 39,\n 30,\n 40,\n 41,\n 0,\n 33,\n 42,\n 43,\n 4,\n 36,\n 44,\n 45,\n 8,\n 39,\n 46,\n 47,\n 12,\n /*body*/\n 12,\n 13,\n 14,\n 15,\n 48,\n 49,\n 50,\n 51,\n 52,\n 53,\n 54,\n 55,\n 56,\n 57,\n 58,\n 59,\n 15,\n 25,\n 26,\n 27,\n 51,\n 60,\n 61,\n 62,\n 55,\n 63,\n 64,\n 65,\n 59,\n 66,\n 67,\n 68,\n 27,\n 37,\n 38,\n 39,\n 62,\n 69,\n 70,\n 71,\n 65,\n 72,\n 73,\n 74,\n 68,\n 75,\n 76,\n 77,\n 39,\n 46,\n 47,\n 12,\n 71,\n 78,\n 79,\n 48,\n 74,\n 80,\n 81,\n 52,\n 77,\n 82,\n 83,\n 56,\n 56,\n 57,\n 58,\n 59,\n 84,\n 85,\n 86,\n 87,\n 88,\n 89,\n 90,\n 91,\n 92,\n 93,\n 94,\n 95,\n 59,\n 66,\n 67,\n 68,\n 87,\n 96,\n 97,\n 98,\n 91,\n 99,\n 100,\n 101,\n 95,\n 102,\n 103,\n 104,\n 68,\n 75,\n 76,\n 77,\n 98,\n 105,\n 106,\n 107,\n 101,\n 108,\n 109,\n 110,\n 104,\n 111,\n 112,\n 113,\n 77,\n 82,\n 83,\n 56,\n 107,\n 114,\n 115,\n 84,\n 110,\n 116,\n 117,\n 88,\n 113,\n 118,\n 119,\n 92,\n /*handle*/\n 120,\n 121,\n 122,\n 123,\n 124,\n 125,\n 126,\n 127,\n 128,\n 129,\n 130,\n 131,\n 132,\n 133,\n 134,\n 135,\n 123,\n 136,\n 137,\n 120,\n 127,\n 138,\n 139,\n 124,\n 131,\n 140,\n 141,\n 128,\n 135,\n 142,\n 143,\n 132,\n 132,\n 133,\n 134,\n 135,\n 144,\n 145,\n 146,\n 147,\n 148,\n 149,\n 150,\n 151,\n 68,\n 152,\n 153,\n 154,\n 135,\n 142,\n 143,\n 132,\n 147,\n 155,\n 156,\n 144,\n 151,\n 157,\n 158,\n 148,\n 154,\n 159,\n 160,\n 68,\n /*spout*/\n 161,\n 162,\n 163,\n 164,\n 165,\n 166,\n 167,\n 168,\n 169,\n 170,\n 171,\n 172,\n 173,\n 174,\n 175,\n 176,\n 164,\n 177,\n 178,\n 161,\n 168,\n 179,\n 180,\n 165,\n 172,\n 181,\n 182,\n 169,\n 176,\n 183,\n 184,\n 173,\n 173,\n 174,\n 175,\n 176,\n 185,\n 186,\n 187,\n 188,\n 189,\n 190,\n 191,\n 192,\n 193,\n 194,\n 195,\n 196,\n 176,\n 183,\n 184,\n 173,\n 188,\n 197,\n 198,\n 185,\n 192,\n 199,\n 200,\n 189,\n 196,\n 201,\n 202,\n 193,\n /*lid*/\n 203,\n 203,\n 203,\n 203,\n 204,\n 205,\n 206,\n 207,\n 208,\n 208,\n 208,\n 208,\n 209,\n 210,\n 211,\n 212,\n 203,\n 203,\n 203,\n 203,\n 207,\n 213,\n 214,\n 215,\n 208,\n 208,\n 208,\n 208,\n 212,\n 216,\n 217,\n 218,\n 203,\n 203,\n 203,\n 203,\n 215,\n 219,\n 220,\n 221,\n 208,\n 208,\n 208,\n 208,\n 218,\n 222,\n 223,\n 224,\n 203,\n 203,\n 203,\n 203,\n 221,\n 225,\n 226,\n 204,\n 208,\n 208,\n 208,\n 208,\n 224,\n 227,\n 228,\n 209,\n 209,\n 210,\n 211,\n 212,\n 229,\n 230,\n 231,\n 232,\n 233,\n 234,\n 235,\n 236,\n 237,\n 238,\n 239,\n 240,\n 212,\n 216,\n 217,\n 218,\n 232,\n 241,\n 242,\n 243,\n 236,\n 244,\n 245,\n 246,\n 240,\n 247,\n 248,\n 249,\n 218,\n 222,\n 223,\n 224,\n 243,\n 250,\n 251,\n 252,\n 246,\n 253,\n 254,\n 255,\n 249,\n 256,\n 257,\n 258,\n 224,\n 227,\n 228,\n 209,\n 252,\n 259,\n 260,\n 229,\n 255,\n 261,\n 262,\n 233,\n 258,\n 263,\n 264,\n 237,\n /*bottom*/\n 265,\n 265,\n 265,\n 265,\n 266,\n 267,\n 268,\n 269,\n 270,\n 271,\n 272,\n 273,\n 92,\n 119,\n 118,\n 113,\n 265,\n 265,\n 265,\n 265,\n 269,\n 274,\n 275,\n 276,\n 273,\n 277,\n 278,\n 279,\n 113,\n 112,\n 111,\n 104,\n 265,\n 265,\n 265,\n 265,\n 276,\n 280,\n 281,\n 282,\n 279,\n 283,\n 284,\n 285,\n 104,\n 103,\n 102,\n 95,\n 265,\n 265,\n 265,\n 265,\n 282,\n 286,\n 287,\n 266,\n 285,\n 288,\n 289,\n 270,\n 95,\n 94,\n 93,\n 92\n ];\n const teapotVertices = [\n 1.4,\n 0,\n 2.4,\n 1.4,\n -0.784,\n 2.4,\n 0.784,\n -1.4,\n 2.4,\n 0,\n -1.4,\n 2.4,\n 1.3375,\n 0,\n 2.53125,\n 1.3375,\n -0.749,\n 2.53125,\n 0.749,\n -1.3375,\n 2.53125,\n 0,\n -1.3375,\n 2.53125,\n 1.4375,\n 0,\n 2.53125,\n 1.4375,\n -0.805,\n 2.53125,\n 0.805,\n -1.4375,\n 2.53125,\n 0,\n -1.4375,\n 2.53125,\n 1.5,\n 0,\n 2.4,\n 1.5,\n -0.84,\n 2.4,\n 0.84,\n -1.5,\n 2.4,\n 0,\n -1.5,\n 2.4,\n -0.784,\n -1.4,\n 2.4,\n -1.4,\n -0.784,\n 2.4,\n -1.4,\n 0,\n 2.4,\n -0.749,\n -1.3375,\n 2.53125,\n -1.3375,\n -0.749,\n 2.53125,\n -1.3375,\n 0,\n 2.53125,\n -0.805,\n -1.4375,\n 2.53125,\n -1.4375,\n -0.805,\n 2.53125,\n -1.4375,\n 0,\n 2.53125,\n -0.84,\n -1.5,\n 2.4,\n -1.5,\n -0.84,\n 2.4,\n -1.5,\n 0,\n 2.4,\n -1.4,\n 0.784,\n 2.4,\n -0.784,\n 1.4,\n 2.4,\n 0,\n 1.4,\n 2.4,\n -1.3375,\n 0.749,\n 2.53125,\n -0.749,\n 1.3375,\n 2.53125,\n 0,\n 1.3375,\n 2.53125,\n -1.4375,\n 0.805,\n 2.53125,\n -0.805,\n 1.4375,\n 2.53125,\n 0,\n 1.4375,\n 2.53125,\n -1.5,\n 0.84,\n 2.4,\n -0.84,\n 1.5,\n 2.4,\n 0,\n 1.5,\n 2.4,\n 0.784,\n 1.4,\n 2.4,\n 1.4,\n 0.784,\n 2.4,\n 0.749,\n 1.3375,\n 2.53125,\n 1.3375,\n 0.749,\n 2.53125,\n 0.805,\n 1.4375,\n 2.53125,\n 1.4375,\n 0.805,\n 2.53125,\n 0.84,\n 1.5,\n 2.4,\n 1.5,\n 0.84,\n 2.4,\n 1.75,\n 0,\n 1.875,\n 1.75,\n -0.98,\n 1.875,\n 0.98,\n -1.75,\n 1.875,\n 0,\n -1.75,\n 1.875,\n 2,\n 0,\n 1.35,\n 2,\n -1.12,\n 1.35,\n 1.12,\n -2,\n 1.35,\n 0,\n -2,\n 1.35,\n 2,\n 0,\n 0.9,\n 2,\n -1.12,\n 0.9,\n 1.12,\n -2,\n 0.9,\n 0,\n -2,\n 0.9,\n -0.98,\n -1.75,\n 1.875,\n -1.75,\n -0.98,\n 1.875,\n -1.75,\n 0,\n 1.875,\n -1.12,\n -2,\n 1.35,\n -2,\n -1.12,\n 1.35,\n -2,\n 0,\n 1.35,\n -1.12,\n -2,\n 0.9,\n -2,\n -1.12,\n 0.9,\n -2,\n 0,\n 0.9,\n -1.75,\n 0.98,\n 1.875,\n -0.98,\n 1.75,\n 1.875,\n 0,\n 1.75,\n 1.875,\n -2,\n 1.12,\n 1.35,\n -1.12,\n 2,\n 1.35,\n 0,\n 2,\n 1.35,\n -2,\n 1.12,\n 0.9,\n -1.12,\n 2,\n 0.9,\n 0,\n 2,\n 0.9,\n 0.98,\n 1.75,\n 1.875,\n 1.75,\n 0.98,\n 1.875,\n 1.12,\n 2,\n 1.35,\n 2,\n 1.12,\n 1.35,\n 1.12,\n 2,\n 0.9,\n 2,\n 1.12,\n 0.9,\n 2,\n 0,\n 0.45,\n 2,\n -1.12,\n 0.45,\n 1.12,\n -2,\n 0.45,\n 0,\n -2,\n 0.45,\n 1.5,\n 0,\n 0.225,\n 1.5,\n -0.84,\n 0.225,\n 0.84,\n -1.5,\n 0.225,\n 0,\n -1.5,\n 0.225,\n 1.5,\n 0,\n 0.15,\n 1.5,\n -0.84,\n 0.15,\n 0.84,\n -1.5,\n 0.15,\n 0,\n -1.5,\n 0.15,\n -1.12,\n -2,\n 0.45,\n -2,\n -1.12,\n 0.45,\n -2,\n 0,\n 0.45,\n -0.84,\n -1.5,\n 0.225,\n -1.5,\n -0.84,\n 0.225,\n -1.5,\n 0,\n 0.225,\n -0.84,\n -1.5,\n 0.15,\n -1.5,\n -0.84,\n 0.15,\n -1.5,\n 0,\n 0.15,\n -2,\n 1.12,\n 0.45,\n -1.12,\n 2,\n 0.45,\n 0,\n 2,\n 0.45,\n -1.5,\n 0.84,\n 0.225,\n -0.84,\n 1.5,\n 0.225,\n 0,\n 1.5,\n 0.225,\n -1.5,\n 0.84,\n 0.15,\n -0.84,\n 1.5,\n 0.15,\n 0,\n 1.5,\n 0.15,\n 1.12,\n 2,\n 0.45,\n 2,\n 1.12,\n 0.45,\n 0.84,\n 1.5,\n 0.225,\n 1.5,\n 0.84,\n 0.225,\n 0.84,\n 1.5,\n 0.15,\n 1.5,\n 0.84,\n 0.15,\n -1.6,\n 0,\n 2.025,\n -1.6,\n -0.3,\n 2.025,\n -1.5,\n -0.3,\n 2.25,\n -1.5,\n 0,\n 2.25,\n -2.3,\n 0,\n 2.025,\n -2.3,\n -0.3,\n 2.025,\n -2.5,\n -0.3,\n 2.25,\n -2.5,\n 0,\n 2.25,\n -2.7,\n 0,\n 2.025,\n -2.7,\n -0.3,\n 2.025,\n -3,\n -0.3,\n 2.25,\n -3,\n 0,\n 2.25,\n -2.7,\n 0,\n 1.8,\n -2.7,\n -0.3,\n 1.8,\n -3,\n -0.3,\n 1.8,\n -3,\n 0,\n 1.8,\n -1.5,\n 0.3,\n 2.25,\n -1.6,\n 0.3,\n 2.025,\n -2.5,\n 0.3,\n 2.25,\n -2.3,\n 0.3,\n 2.025,\n -3,\n 0.3,\n 2.25,\n -2.7,\n 0.3,\n 2.025,\n -3,\n 0.3,\n 1.8,\n -2.7,\n 0.3,\n 1.8,\n -2.7,\n 0,\n 1.575,\n -2.7,\n -0.3,\n 1.575,\n -3,\n -0.3,\n 1.35,\n -3,\n 0,\n 1.35,\n -2.5,\n 0,\n 1.125,\n -2.5,\n -0.3,\n 1.125,\n -2.65,\n -0.3,\n 0.9375,\n -2.65,\n 0,\n 0.9375,\n -2,\n -0.3,\n 0.9,\n -1.9,\n -0.3,\n 0.6,\n -1.9,\n 0,\n 0.6,\n -3,\n 0.3,\n 1.35,\n -2.7,\n 0.3,\n 1.575,\n -2.65,\n 0.3,\n 0.9375,\n -2.5,\n 0.3,\n 1.125,\n -1.9,\n 0.3,\n 0.6,\n -2,\n 0.3,\n 0.9,\n 1.7,\n 0,\n 1.425,\n 1.7,\n -0.66,\n 1.425,\n 1.7,\n -0.66,\n 0.6,\n 1.7,\n 0,\n 0.6,\n 2.6,\n 0,\n 1.425,\n 2.6,\n -0.66,\n 1.425,\n 3.1,\n -0.66,\n 0.825,\n 3.1,\n 0,\n 0.825,\n 2.3,\n 0,\n 2.1,\n 2.3,\n -0.25,\n 2.1,\n 2.4,\n -0.25,\n 2.025,\n 2.4,\n 0,\n 2.025,\n 2.7,\n 0,\n 2.4,\n 2.7,\n -0.25,\n 2.4,\n 3.3,\n -0.25,\n 2.4,\n 3.3,\n 0,\n 2.4,\n 1.7,\n 0.66,\n 0.6,\n 1.7,\n 0.66,\n 1.425,\n 3.1,\n 0.66,\n 0.825,\n 2.6,\n 0.66,\n 1.425,\n 2.4,\n 0.25,\n 2.025,\n 2.3,\n 0.25,\n 2.1,\n 3.3,\n 0.25,\n 2.4,\n 2.7,\n 0.25,\n 2.4,\n 2.8,\n 0,\n 2.475,\n 2.8,\n -0.25,\n 2.475,\n 3.525,\n -0.25,\n 2.49375,\n 3.525,\n 0,\n 2.49375,\n 2.9,\n 0,\n 2.475,\n 2.9,\n -0.15,\n 2.475,\n 3.45,\n -0.15,\n 2.5125,\n 3.45,\n 0,\n 2.5125,\n 2.8,\n 0,\n 2.4,\n 2.8,\n -0.15,\n 2.4,\n 3.2,\n -0.15,\n 2.4,\n 3.2,\n 0,\n 2.4,\n 3.525,\n 0.25,\n 2.49375,\n 2.8,\n 0.25,\n 2.475,\n 3.45,\n 0.15,\n 2.5125,\n 2.9,\n 0.15,\n 2.475,\n 3.2,\n 0.15,\n 2.4,\n 2.8,\n 0.15,\n 2.4,\n 0,\n 0,\n 3.15,\n 0.8,\n 0,\n 3.15,\n 0.8,\n -0.45,\n 3.15,\n 0.45,\n -0.8,\n 3.15,\n 0,\n -0.8,\n 3.15,\n 0,\n 0,\n 2.85,\n 0.2,\n 0,\n 2.7,\n 0.2,\n -0.112,\n 2.7,\n 0.112,\n -0.2,\n 2.7,\n 0,\n -0.2,\n 2.7,\n -0.45,\n -0.8,\n 3.15,\n -0.8,\n -0.45,\n 3.15,\n -0.8,\n 0,\n 3.15,\n -0.112,\n -0.2,\n 2.7,\n -0.2,\n -0.112,\n 2.7,\n -0.2,\n 0,\n 2.7,\n -0.8,\n 0.45,\n 3.15,\n -0.45,\n 0.8,\n 3.15,\n 0,\n 0.8,\n 3.15,\n -0.2,\n 0.112,\n 2.7,\n -0.112,\n 0.2,\n 2.7,\n 0,\n 0.2,\n 2.7,\n 0.45,\n 0.8,\n 3.15,\n 0.8,\n 0.45,\n 3.15,\n 0.112,\n 0.2,\n 2.7,\n 0.2,\n 0.112,\n 2.7,\n 0.4,\n 0,\n 2.55,\n 0.4,\n -0.224,\n 2.55,\n 0.224,\n -0.4,\n 2.55,\n 0,\n -0.4,\n 2.55,\n 1.3,\n 0,\n 2.55,\n 1.3,\n -0.728,\n 2.55,\n 0.728,\n -1.3,\n 2.55,\n 0,\n -1.3,\n 2.55,\n 1.3,\n 0,\n 2.4,\n 1.3,\n -0.728,\n 2.4,\n 0.728,\n -1.3,\n 2.4,\n 0,\n -1.3,\n 2.4,\n -0.224,\n -0.4,\n 2.55,\n -0.4,\n -0.224,\n 2.55,\n -0.4,\n 0,\n 2.55,\n -0.728,\n -1.3,\n 2.55,\n -1.3,\n -0.728,\n 2.55,\n -1.3,\n 0,\n 2.55,\n -0.728,\n -1.3,\n 2.4,\n -1.3,\n -0.728,\n 2.4,\n -1.3,\n 0,\n 2.4,\n -0.4,\n 0.224,\n 2.55,\n -0.224,\n 0.4,\n 2.55,\n 0,\n 0.4,\n 2.55,\n -1.3,\n 0.728,\n 2.55,\n -0.728,\n 1.3,\n 2.55,\n 0,\n 1.3,\n 2.55,\n -1.3,\n 0.728,\n 2.4,\n -0.728,\n 1.3,\n 2.4,\n 0,\n 1.3,\n 2.4,\n 0.224,\n 0.4,\n 2.55,\n 0.4,\n 0.224,\n 2.55,\n 0.728,\n 1.3,\n 2.55,\n 1.3,\n 0.728,\n 2.55,\n 0.728,\n 1.3,\n 2.4,\n 1.3,\n 0.728,\n 2.4,\n 0,\n 0,\n 0,\n 1.425,\n 0,\n 0,\n 1.425,\n 0.798,\n 0,\n 0.798,\n 1.425,\n 0,\n 0,\n 1.425,\n 0,\n 1.5,\n 0,\n 0.075,\n 1.5,\n 0.84,\n 0.075,\n 0.84,\n 1.5,\n 0.075,\n 0,\n 1.5,\n 0.075,\n -0.798,\n 1.425,\n 0,\n -1.425,\n 0.798,\n 0,\n -1.425,\n 0,\n 0,\n -0.84,\n 1.5,\n 0.075,\n -1.5,\n 0.84,\n 0.075,\n -1.5,\n 0,\n 0.075,\n -1.425,\n -0.798,\n 0,\n -0.798,\n -1.425,\n 0,\n 0,\n -1.425,\n 0,\n -1.5,\n -0.84,\n 0.075,\n -0.84,\n -1.5,\n 0.075,\n 0,\n -1.5,\n 0.075,\n 0.798,\n -1.425,\n 0,\n 1.425,\n -0.798,\n 0,\n 0.84,\n -1.5,\n 0.075,\n 1.5,\n -0.84,\n 0.075\n ];\n super();\n size = size || 50;\n segments = segments !== void 0 ? Math.max(2, Math.floor(segments) || 10) : 10;\n bottom = bottom === void 0 ? true : bottom;\n lid = lid === void 0 ? true : lid;\n body = body === void 0 ? true : body;\n fitLid = fitLid === void 0 ? true : fitLid;\n const blinnScale = 1.3;\n blinn = blinn === void 0 ? true : blinn;\n const maxHeight = 3.15 * (blinn ? 1 : blinnScale);\n const maxHeight2 = maxHeight / 2;\n const trueSize = size / maxHeight2;\n let numTriangles = bottom ? (8 * segments - 4) * segments : 0;\n numTriangles += lid ? (16 * segments - 4) * segments : 0;\n numTriangles += body ? 40 * segments * segments : 0;\n const indices = new Uint32Array(numTriangles * 3);\n let numVertices = bottom ? 4 : 0;\n numVertices += lid ? 8 : 0;\n numVertices += body ? 20 : 0;\n numVertices *= (segments + 1) * (segments + 1);\n const vertices = new Float32Array(numVertices * 3);\n const normals = new Float32Array(numVertices * 3);\n const uvs = new Float32Array(numVertices * 2);\n const ms = new Matrix4();\n ms.set(-1, 3, -3, 1, 3, -6, 3, 0, -3, 3, 0, 0, 1, 0, 0, 0);\n const g = [];\n let i, r, c;\n const sp = [];\n const tp = [];\n const dsp = [];\n const dtp = [];\n const mgm = [];\n const vert = [];\n const sdir = [];\n const tdir = [];\n const norm = new Vector3();\n let tcoord;\n let sstep, tstep;\n let vertPerRow;\n let s, t, sval, tval, p;\n let dsval = 0;\n let dtval = 0;\n const normOut = new Vector3();\n let v1, v2, v3, v4;\n const gmx = new Matrix4();\n const tmtx = new Matrix4();\n const vsp = new Vector4();\n const vtp = new Vector4();\n const vdsp = new Vector4();\n const vdtp = new Vector4();\n const vsdir = new Vector3();\n const vtdir = new Vector3();\n const mst = ms.clone();\n mst.transpose();\n const notDegenerate = (vtx1, vtx2, vtx3) => !(vertices[vtx1 * 3] === vertices[vtx2 * 3] && vertices[vtx1 * 3 + 1] === vertices[vtx2 * 3 + 1] && vertices[vtx1 * 3 + 2] === vertices[vtx2 * 3 + 2] || vertices[vtx1 * 3] === vertices[vtx3 * 3] && vertices[vtx1 * 3 + 1] === vertices[vtx3 * 3 + 1] && vertices[vtx1 * 3 + 2] === vertices[vtx3 * 3 + 2] || vertices[vtx2 * 3] === vertices[vtx3 * 3] && vertices[vtx2 * 3 + 1] === vertices[vtx3 * 3 + 1] && vertices[vtx2 * 3 + 2] === vertices[vtx3 * 3 + 2]);\n for (i = 0; i < 3; i++) {\n mgm[i] = new Matrix4();\n }\n const minPatches = body ? 0 : 20;\n const maxPatches = bottom ? 32 : 28;\n vertPerRow = segments + 1;\n let surfCount = 0;\n let vertCount = 0;\n let normCount = 0;\n let uvCount = 0;\n let indexCount = 0;\n for (let surf = minPatches; surf < maxPatches; surf++) {\n if (lid || surf < 20 || surf >= 28) {\n for (i = 0; i < 3; i++) {\n for (r = 0; r < 4; r++) {\n for (c = 0; c < 4; c++) {\n g[c * 4 + r] = teapotVertices[teapotPatches[surf * 16 + r * 4 + c] * 3 + i];\n if (fitLid && surf >= 20 && surf < 28 && i !== 2) {\n g[c * 4 + r] *= 1.077;\n }\n if (!blinn && i === 2) {\n g[c * 4 + r] *= blinnScale;\n }\n }\n }\n gmx.set(g[0], g[1], g[2], g[3], g[4], g[5], g[6], g[7], g[8], g[9], g[10], g[11], g[12], g[13], g[14], g[15]);\n tmtx.multiplyMatrices(gmx, ms);\n mgm[i].multiplyMatrices(mst, tmtx);\n }\n for (sstep = 0; sstep <= segments; sstep++) {\n s = sstep / segments;\n for (tstep = 0; tstep <= segments; tstep++) {\n t = tstep / segments;\n for (p = 4, sval = tval = 1; p--; ) {\n sp[p] = sval;\n tp[p] = tval;\n sval *= s;\n tval *= t;\n if (p === 3) {\n dsp[p] = dtp[p] = 0;\n dsval = dtval = 1;\n } else {\n dsp[p] = dsval * (3 - p);\n dtp[p] = dtval * (3 - p);\n dsval *= s;\n dtval *= t;\n }\n }\n vsp.fromArray(sp);\n vtp.fromArray(tp);\n vdsp.fromArray(dsp);\n vdtp.fromArray(dtp);\n for (i = 0; i < 3; i++) {\n tcoord = vsp.clone();\n tcoord.applyMatrix4(mgm[i]);\n vert[i] = tcoord.dot(vtp);\n tcoord = vdsp.clone();\n tcoord.applyMatrix4(mgm[i]);\n sdir[i] = tcoord.dot(vtp);\n tcoord = vsp.clone();\n tcoord.applyMatrix4(mgm[i]);\n tdir[i] = tcoord.dot(vdtp);\n }\n vsdir.fromArray(sdir);\n vtdir.fromArray(tdir);\n norm.crossVectors(vtdir, vsdir);\n norm.normalize();\n if (vert[0] === 0 && vert[1] === 0) {\n normOut.set(0, vert[2] > maxHeight2 ? 1 : -1, 0);\n } else {\n normOut.set(norm.x, norm.z, -norm.y);\n }\n vertices[vertCount++] = trueSize * vert[0];\n vertices[vertCount++] = trueSize * (vert[2] - maxHeight2);\n vertices[vertCount++] = -trueSize * vert[1];\n normals[normCount++] = normOut.x;\n normals[normCount++] = normOut.y;\n normals[normCount++] = normOut.z;\n uvs[uvCount++] = 1 - t;\n uvs[uvCount++] = 1 - s;\n }\n }\n for (sstep = 0; sstep < segments; sstep++) {\n for (tstep = 0; tstep < segments; tstep++) {\n v1 = surfCount * vertPerRow * vertPerRow + sstep * vertPerRow + tstep;\n v2 = v1 + 1;\n v3 = v2 + vertPerRow;\n v4 = v1 + vertPerRow;\n if (notDegenerate(v1, v2, v3)) {\n indices[indexCount++] = v1;\n indices[indexCount++] = v2;\n indices[indexCount++] = v3;\n }\n if (notDegenerate(v1, v3, v4)) {\n indices[indexCount++] = v1;\n indices[indexCount++] = v3;\n indices[indexCount++] = v4;\n }\n }\n }\n surfCount++;\n }\n }\n this.setIndex(new BufferAttribute(indices, 1));\n this.setAttribute(\"position\", new BufferAttribute(vertices, 3));\n this.setAttribute(\"normal\", new BufferAttribute(normals, 3));\n this.setAttribute(\"uv\", new BufferAttribute(uvs, 2));\n this.computeBoundingSphere();\n }\n}\nexport {\n TeapotGeometry\n};\n//# sourceMappingURL=TeapotGeometry.js.map\n","import { ExtrudeGeometry } from \"three\";\nclass TextGeometry extends ExtrudeGeometry {\n constructor(text, parameters = {}) {\n const {\n bevelEnabled = false,\n bevelSize = 8,\n bevelThickness = 10,\n font,\n height = 50,\n size = 100,\n lineHeight = 1,\n letterSpacing = 0,\n ...rest\n } = parameters;\n if (font === void 0) {\n super();\n } else {\n const shapes = font.generateShapes(text, size, { lineHeight, letterSpacing });\n super(shapes, { ...rest, bevelEnabled, bevelSize, bevelThickness, depth: height });\n }\n this.type = \"TextGeometry\";\n }\n}\nexport {\n TextGeometry as TextBufferGeometry,\n TextGeometry\n};\n//# sourceMappingURL=TextGeometry.js.map\n","import { Vector3, Matrix4 } from \"three\";\nconst inverseProjectionMatrix = /* @__PURE__ */ new Matrix4();\nclass CSMFrustum {\n constructor(data) {\n data = data || {};\n this.vertices = {\n near: [new Vector3(), new Vector3(), new Vector3(), new Vector3()],\n far: [new Vector3(), new Vector3(), new Vector3(), new Vector3()]\n };\n if (data.projectionMatrix !== void 0) {\n this.setFromProjectionMatrix(data.projectionMatrix, data.maxFar || 1e4);\n }\n }\n setFromProjectionMatrix(projectionMatrix, maxFar) {\n const isOrthographic = projectionMatrix.elements[2 * 4 + 3] === 0;\n inverseProjectionMatrix.copy(projectionMatrix).invert();\n this.vertices.near[0].set(1, 1, -1);\n this.vertices.near[1].set(1, -1, -1);\n this.vertices.near[2].set(-1, -1, -1);\n this.vertices.near[3].set(-1, 1, -1);\n this.vertices.near.forEach(function(v) {\n v.applyMatrix4(inverseProjectionMatrix);\n });\n this.vertices.far[0].set(1, 1, 1);\n this.vertices.far[1].set(1, -1, 1);\n this.vertices.far[2].set(-1, -1, 1);\n this.vertices.far[3].set(-1, 1, 1);\n this.vertices.far.forEach(function(v) {\n v.applyMatrix4(inverseProjectionMatrix);\n const absZ = Math.abs(v.z);\n if (isOrthographic) {\n v.z *= Math.min(maxFar / absZ, 1);\n } else {\n v.multiplyScalar(Math.min(maxFar / absZ, 1));\n }\n });\n return this.vertices;\n }\n split(breaks, target) {\n while (breaks.length > target.length) {\n target.push(new CSMFrustum());\n }\n target.length = breaks.length;\n for (let i = 0; i < breaks.length; i++) {\n const cascade = target[i];\n if (i === 0) {\n for (let j = 0; j < 4; j++) {\n cascade.vertices.near[j].copy(this.vertices.near[j]);\n }\n } else {\n for (let j = 0; j < 4; j++) {\n cascade.vertices.near[j].lerpVectors(this.vertices.near[j], this.vertices.far[j], breaks[i - 1]);\n }\n }\n if (i === breaks.length - 1) {\n for (let j = 0; j < 4; j++) {\n cascade.vertices.far[j].copy(this.vertices.far[j]);\n }\n } else {\n for (let j = 0; j < 4; j++) {\n cascade.vertices.far[j].lerpVectors(this.vertices.near[j], this.vertices.far[j], breaks[i]);\n }\n }\n }\n }\n toSpace(cameraMatrix, target) {\n for (let i = 0; i < 4; i++) {\n target.vertices.near[i].copy(this.vertices.near[i]).applyMatrix4(cameraMatrix);\n target.vertices.far[i].copy(this.vertices.far[i]).applyMatrix4(cameraMatrix);\n }\n }\n}\nexport {\n CSMFrustum\n};\n//# sourceMappingURL=CSMFrustum.js.map\n","import { ShaderChunk } from \"three\";\nconst CSMShader = {\n lights_fragment_begin: (\n /* glsl */\n `\nGeometricContext geometry;\n\ngeometry.position = - vViewPosition;\ngeometry.normal = normal;\ngeometry.viewDir = ( isOrthographic ) ? vec3( 0, 0, 1 ) : normalize( vViewPosition );\n\n#ifdef CLEARCOAT\n\n\tgeometry.clearcoatNormal = clearcoatNormal;\n\n#endif\n\nIncidentLight directLight;\n\n#if ( NUM_POINT_LIGHTS > 0 ) && defined( RE_Direct )\n\n\tPointLight pointLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_POINT_LIGHT_SHADOWS > 0\n\tPointLightShadow pointLightShadow;\n\t#endif\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_POINT_LIGHTS; i ++ ) {\n\n\t\tpointLight = pointLights[ i ];\n\n\t\tgetPointLightInfo( pointLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_POINT_LIGHT_SHADOWS )\n\t\tpointLightShadow = pointLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getPointShadow( pointShadowMap[ i ], pointLightShadow.shadowMapSize, pointLightShadow.shadowBias, pointLightShadow.shadowRadius, vPointShadowCoord[ i ], pointLightShadow.shadowCameraNear, pointLightShadow.shadowCameraFar ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_SPOT_LIGHTS > 0 ) && defined( RE_Direct )\n\n\tSpotLight spotLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_SPOT_LIGHT_SHADOWS > 0\n\tSpotLightShadow spotLightShadow;\n\t#endif\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_SPOT_LIGHTS; i ++ ) {\n\n\t\tspotLight = spotLights[ i ];\n\n\t\tgetSpotLightInfo( spotLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_SPOT_LIGHT_SHADOWS )\n\t\tspotLightShadow = spotLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( spotShadowMap[ i ], spotLightShadow.shadowMapSize, spotLightShadow.shadowBias, spotLightShadow.shadowRadius, vSpotShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_DIR_LIGHTS > 0) && defined( RE_Direct ) && defined( USE_CSM ) && defined( CSM_CASCADES )\n\n\tDirectionalLight directionalLight;\n\tfloat linearDepth = (vViewPosition.z) / (shadowFar - cameraNear);\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\n\t#if defined( USE_SHADOWMAP ) && defined( CSM_FADE )\n\tvec2 cascade;\n\tfloat cascadeCenter;\n\tfloat closestEdge;\n\tfloat margin;\n\tfloat csmx;\n\tfloat csmy;\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\tdirectionalLight = directionalLights[ i ];\n\t\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\n\n\t \t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\t\t// NOTE: Depth gets larger away from the camera.\n\t\t\t// cascade.x is closer, cascade.y is further\n\t\t\tcascade = CSM_cascades[ i ];\n\t\t\tcascadeCenter = ( cascade.x + cascade.y ) / 2.0;\n\t\t\tclosestEdge = linearDepth < cascadeCenter ? cascade.x : cascade.y;\n\t\t\tmargin = 0.25 * pow( closestEdge, 2.0 );\n\t\t\tcsmx = cascade.x - margin / 2.0;\n\t\t\tcsmy = cascade.y + margin / 2.0;\n\t\t\tif( linearDepth >= csmx && ( linearDepth < csmy || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 ) ) {\n\n\t\t\t\tfloat dist = min( linearDepth - csmx, csmy - linearDepth );\n\t\t\t\tfloat ratio = clamp( dist / margin, 0.0, 1.0 );\n\n\t\t\t\tvec3 prevColor = directLight.color;\n\t\t\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\t\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\n\t\t\t\tbool shouldFadeLastCascade = UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 && linearDepth > cascadeCenter;\n\t\t\t\tdirectLight.color = mix( prevColor, directLight.color, shouldFadeLastCascade ? ratio : 1.0 );\n\n\t\t\t\tReflectedLight prevLight = reflectedLight;\n\t\t\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t\t\t\tbool shouldBlend = UNROLLED_LOOP_INDEX != CSM_CASCADES - 1 || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1 && linearDepth < cascadeCenter;\n\t\t\t\tfloat blendRatio = shouldBlend ? ratio : 1.0;\n\n\t\t\t\treflectedLight.directDiffuse = mix( prevLight.directDiffuse, reflectedLight.directDiffuse, blendRatio );\n\t\t\t\treflectedLight.directSpecular = mix( prevLight.directSpecular, reflectedLight.directSpecular, blendRatio );\n\t\t\t\treflectedLight.indirectDiffuse = mix( prevLight.indirectDiffuse, reflectedLight.indirectDiffuse, blendRatio );\n\t\t\t\treflectedLight.indirectSpecular = mix( prevLight.indirectSpecular, reflectedLight.indirectSpecular, blendRatio );\n\n\t\t\t}\n\t \t#endif\n\n\t}\n\t#pragma unroll_loop_end\n\t#else\n\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\t\tdirectionalLight = directionalLights[ i ];\n\t\t\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\n\n\t\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\n\t\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\t\tif(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y) directLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\n\t\t\tif(linearDepth >= CSM_cascades[UNROLLED_LOOP_INDEX].x && (linearDepth < CSM_cascades[UNROLLED_LOOP_INDEX].y || UNROLLED_LOOP_INDEX == CSM_CASCADES - 1)) RE_Direct( directLight, geometry, material, reflectedLight );\n\n\t\t\t#endif\n\n\t\t}\n\t\t#pragma unroll_loop_end\n\n\t#endif\n\n\t#if ( NUM_DIR_LIGHTS > NUM_DIR_LIGHT_SHADOWS)\n\t\t// compute the lights not casting shadows (if any)\n\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = NUM_DIR_LIGHT_SHADOWS; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\t\tdirectionalLight = directionalLights[ i ];\n\n\t\t\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\n\n\t\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t\t}\n\t\t#pragma unroll_loop_end\n\n\t#endif\n\n#endif\n\n\n#if ( NUM_DIR_LIGHTS > 0 ) && defined( RE_Direct ) && !defined( USE_CSM ) && !defined( CSM_CASCADES )\n\n\tDirectionalLight directionalLight;\n\t#if defined( USE_SHADOWMAP ) && NUM_DIR_LIGHT_SHADOWS > 0\n\tDirectionalLightShadow directionalLightShadow;\n\t#endif\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_DIR_LIGHTS; i ++ ) {\n\n\t\tdirectionalLight = directionalLights[ i ];\n\n\t\tgetDirectionalLightInfo( directionalLight, geometry, directLight );\n\n\t\t#if defined( USE_SHADOWMAP ) && ( UNROLLED_LOOP_INDEX < NUM_DIR_LIGHT_SHADOWS )\n\t\tdirectionalLightShadow = directionalLightShadows[ i ];\n\t\tdirectLight.color *= all( bvec2( directLight.visible, receiveShadow ) ) ? getShadow( directionalShadowMap[ i ], directionalLightShadow.shadowMapSize, directionalLightShadow.shadowBias, directionalLightShadow.shadowRadius, vDirectionalShadowCoord[ i ] ) : 1.0;\n\t\t#endif\n\n\t\tRE_Direct( directLight, geometry, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if ( NUM_RECT_AREA_LIGHTS > 0 ) && defined( RE_Direct_RectArea )\n\n\tRectAreaLight rectAreaLight;\n\n\t#pragma unroll_loop_start\n\tfor ( int i = 0; i < NUM_RECT_AREA_LIGHTS; i ++ ) {\n\n\t\trectAreaLight = rectAreaLights[ i ];\n\t\tRE_Direct_RectArea( rectAreaLight, geometry, material, reflectedLight );\n\n\t}\n\t#pragma unroll_loop_end\n\n#endif\n\n#if defined( RE_IndirectDiffuse )\n\n\tvec3 iblIrradiance = vec3( 0.0 );\n\n\tvec3 irradiance = getAmbientLightIrradiance( ambientLightColor );\n\n\tirradiance += getLightProbeIrradiance( lightProbe, geometry.normal );\n\n\t#if ( NUM_HEMI_LIGHTS > 0 )\n\n\t\t#pragma unroll_loop_start\n\t\tfor ( int i = 0; i < NUM_HEMI_LIGHTS; i ++ ) {\n\n\t\t\tirradiance += getHemisphereLightIrradiance( hemisphereLights[ i ], geometry.normal );\n\n\t\t}\n\t\t#pragma unroll_loop_end\n\n\t#endif\n\n#endif\n\n#if defined( RE_IndirectSpecular )\n\n\tvec3 radiance = vec3( 0.0 );\n\tvec3 clearcoatRadiance = vec3( 0.0 );\n\n#endif\n`\n ),\n getlights_pars_begin() {\n return (\n /* glsl */\n `\n\t\t\t#if defined( USE_CSM ) && defined( CSM_CASCADES )\n\t\t\tuniform vec2 CSM_cascades[CSM_CASCADES];\n\t\t\tuniform float cameraNear;\n\t\t\tuniform float shadowFar;\n\t\t\t#endif\n\n\t\t\t${ShaderChunk.lights_pars_begin}\n\t\t`\n );\n }\n};\nexport {\n CSMShader\n};\n//# sourceMappingURL=CSMShader.js.map\n","import { Vector3, DirectionalLight, MathUtils, ShaderChunk, Vector2, Matrix4, Box3 } from \"three\";\nimport { CSMFrustum } from \"./CSMFrustum.js\";\nimport { CSMShader } from \"./CSMShader.js\";\nconst _cameraToLightMatrix = /* @__PURE__ */ new Matrix4();\nconst _lightSpaceFrustum = /* @__PURE__ */ new CSMFrustum();\nconst _center = /* @__PURE__ */ new Vector3();\nconst _bbox = /* @__PURE__ */ new Box3();\nconst _uniformArray = [];\nconst _logArray = [];\nclass CSM {\n constructor(data) {\n data = data || {};\n this.camera = data.camera;\n this.parent = data.parent;\n this.cascades = data.cascades || 3;\n this.maxFar = data.maxFar || 1e5;\n this.mode = data.mode || \"practical\";\n this.shadowMapSize = data.shadowMapSize || 2048;\n this.shadowBias = data.shadowBias || 1e-6;\n this.lightDirection = data.lightDirection || new Vector3(1, -1, 1).normalize();\n this.lightIntensity = data.lightIntensity || 1;\n this.lightNear = data.lightNear || 1;\n this.lightFar = data.lightFar || 2e3;\n this.lightMargin = data.lightMargin || 200;\n this.customSplitsCallback = data.customSplitsCallback;\n this.fade = false;\n this.mainFrustum = new CSMFrustum();\n this.frustums = [];\n this.breaks = [];\n this.lights = [];\n this.shaders = /* @__PURE__ */ new Map();\n this.createLights();\n this.updateFrustums();\n this.injectInclude();\n }\n createLights() {\n for (let i = 0; i < this.cascades; i++) {\n const light = new DirectionalLight(16777215, this.lightIntensity);\n light.castShadow = true;\n light.shadow.mapSize.width = this.shadowMapSize;\n light.shadow.mapSize.height = this.shadowMapSize;\n light.shadow.camera.near = this.lightNear;\n light.shadow.camera.far = this.lightFar;\n light.shadow.bias = this.shadowBias;\n this.parent.add(light);\n this.parent.add(light.target);\n this.lights.push(light);\n }\n }\n initCascades() {\n const camera = this.camera;\n camera.updateProjectionMatrix();\n this.mainFrustum.setFromProjectionMatrix(camera.projectionMatrix, this.maxFar);\n this.mainFrustum.split(this.breaks, this.frustums);\n }\n updateShadowBounds() {\n const frustums = this.frustums;\n for (let i = 0; i < frustums.length; i++) {\n const light = this.lights[i];\n const shadowCam = light.shadow.camera;\n const frustum = this.frustums[i];\n const nearVerts = frustum.vertices.near;\n const farVerts = frustum.vertices.far;\n const point1 = farVerts[0];\n let point2;\n if (point1.distanceTo(farVerts[2]) > point1.distanceTo(nearVerts[2])) {\n point2 = farVerts[2];\n } else {\n point2 = nearVerts[2];\n }\n let squaredBBWidth = point1.distanceTo(point2);\n if (this.fade) {\n const camera = this.camera;\n const far = Math.max(camera.far, this.maxFar);\n const linearDepth = frustum.vertices.far[0].z / (far - camera.near);\n const margin = 0.25 * Math.pow(linearDepth, 2) * (far - camera.near);\n squaredBBWidth += margin;\n }\n shadowCam.left = -squaredBBWidth / 2;\n shadowCam.right = squaredBBWidth / 2;\n shadowCam.top = squaredBBWidth / 2;\n shadowCam.bottom = -squaredBBWidth / 2;\n shadowCam.updateProjectionMatrix();\n }\n }\n getBreaks() {\n const camera = this.camera;\n const far = Math.min(camera.far, this.maxFar);\n this.breaks.length = 0;\n switch (this.mode) {\n case \"uniform\":\n uniformSplit(this.cascades, camera.near, far, this.breaks);\n break;\n case \"logarithmic\":\n logarithmicSplit(this.cascades, camera.near, far, this.breaks);\n break;\n case \"practical\":\n practicalSplit(this.cascades, camera.near, far, 0.5, this.breaks);\n break;\n case \"custom\":\n if (this.customSplitsCallback === void 0)\n console.error(\"CSM: Custom split scheme callback not defined.\");\n this.customSplitsCallback(this.cascades, camera.near, far, this.breaks);\n break;\n }\n function uniformSplit(amount, near, far2, target) {\n for (let i = 1; i < amount; i++) {\n target.push((near + (far2 - near) * i / amount) / far2);\n }\n target.push(1);\n }\n function logarithmicSplit(amount, near, far2, target) {\n for (let i = 1; i < amount; i++) {\n target.push(near * (far2 / near) ** (i / amount) / far2);\n }\n target.push(1);\n }\n function practicalSplit(amount, near, far2, lambda, target) {\n _uniformArray.length = 0;\n _logArray.length = 0;\n logarithmicSplit(amount, near, far2, _logArray);\n uniformSplit(amount, near, far2, _uniformArray);\n for (let i = 1; i < amount; i++) {\n target.push(MathUtils.lerp(_uniformArray[i - 1], _logArray[i - 1], lambda));\n }\n target.push(1);\n }\n }\n update() {\n const camera = this.camera;\n const frustums = this.frustums;\n for (let i = 0; i < frustums.length; i++) {\n const light = this.lights[i];\n const shadowCam = light.shadow.camera;\n const texelWidth = (shadowCam.right - shadowCam.left) / this.shadowMapSize;\n const texelHeight = (shadowCam.top - shadowCam.bottom) / this.shadowMapSize;\n light.shadow.camera.updateMatrixWorld(true);\n _cameraToLightMatrix.multiplyMatrices(light.shadow.camera.matrixWorldInverse, camera.matrixWorld);\n frustums[i].toSpace(_cameraToLightMatrix, _lightSpaceFrustum);\n const nearVerts = _lightSpaceFrustum.vertices.near;\n const farVerts = _lightSpaceFrustum.vertices.far;\n _bbox.makeEmpty();\n for (let j = 0; j < 4; j++) {\n _bbox.expandByPoint(nearVerts[j]);\n _bbox.expandByPoint(farVerts[j]);\n }\n _bbox.getCenter(_center);\n _center.z = _bbox.max.z + this.lightMargin;\n _center.x = Math.floor(_center.x / texelWidth) * texelWidth;\n _center.y = Math.floor(_center.y / texelHeight) * texelHeight;\n _center.applyMatrix4(light.shadow.camera.matrixWorld);\n light.position.copy(_center);\n light.target.position.copy(_center);\n light.target.position.x += this.lightDirection.x;\n light.target.position.y += this.lightDirection.y;\n light.target.position.z += this.lightDirection.z;\n }\n }\n injectInclude() {\n ShaderChunk.lights_fragment_begin = CSMShader.lights_fragment_begin;\n ShaderChunk.lights_pars_begin = CSMShader.lights_pars_begin;\n }\n setupMaterial(material) {\n material.defines = material.defines || {};\n material.defines.USE_CSM = 1;\n material.defines.CSM_CASCADES = this.cascades;\n if (this.fade) {\n material.defines.CSM_FADE = \"\";\n }\n const breaksVec2 = [];\n const scope = this;\n const shaders = this.shaders;\n material.onBeforeCompile = function(shader) {\n const far = Math.min(scope.camera.far, scope.maxFar);\n scope.getExtendedBreaks(breaksVec2);\n shader.uniforms.CSM_cascades = { value: breaksVec2 };\n shader.uniforms.cameraNear = { value: scope.camera.near };\n shader.uniforms.shadowFar = { value: far };\n shaders.set(material, shader);\n };\n shaders.set(material, null);\n }\n updateUniforms() {\n const far = Math.min(this.camera.far, this.maxFar);\n const shaders = this.shaders;\n shaders.forEach(function(shader, material) {\n if (shader !== null) {\n const uniforms = shader.uniforms;\n this.getExtendedBreaks(uniforms.CSM_cascades.value);\n uniforms.cameraNear.value = this.camera.near;\n uniforms.shadowFar.value = far;\n }\n if (!this.fade && \"CSM_FADE\" in material.defines) {\n delete material.defines.CSM_FADE;\n material.needsUpdate = true;\n } else if (this.fade && !(\"CSM_FADE\" in material.defines)) {\n material.defines.CSM_FADE = \"\";\n material.needsUpdate = true;\n }\n }, this);\n }\n getExtendedBreaks(target) {\n while (target.length < this.breaks.length) {\n target.push(new Vector2());\n }\n target.length = this.breaks.length;\n for (let i = 0; i < this.cascades; i++) {\n const amount = this.breaks[i];\n const prev = this.breaks[i - 1] || 0;\n target[i].x = prev;\n target[i].y = amount;\n }\n }\n updateFrustums() {\n this.getBreaks();\n this.initCascades();\n this.updateShadowBounds();\n this.updateUniforms();\n }\n remove() {\n for (let i = 0; i < this.lights.length; i++) {\n this.parent.remove(this.lights[i]);\n }\n }\n dispose() {\n const shaders = this.shaders;\n shaders.forEach(function(shader, material) {\n delete material.onBeforeCompile;\n delete material.defines.USE_CSM;\n delete material.defines.CSM_CASCADES;\n delete material.defines.CSM_FADE;\n if (shader !== null) {\n delete shader.uniforms.CSM_cascades;\n delete shader.uniforms.cameraNear;\n delete shader.uniforms.shadowFar;\n }\n material.needsUpdate = true;\n });\n shaders.clear();\n }\n}\nexport {\n CSM\n};\n//# sourceMappingURL=CSM.js.map\n","import { Group, BufferGeometry, BufferAttribute, LineSegments, LineBasicMaterial, Box3Helper, Box3, MeshBasicMaterial, DoubleSide, Mesh, PlaneGeometry } from \"three\";\nclass CSMHelper extends Group {\n constructor(csm) {\n super();\n this.csm = csm;\n this.displayFrustum = true;\n this.displayPlanes = true;\n this.displayShadowBounds = true;\n const indices = 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]);\n const positions = new Float32Array(24);\n const frustumGeometry = new BufferGeometry();\n frustumGeometry.setIndex(new BufferAttribute(indices, 1));\n frustumGeometry.setAttribute(\"position\", new BufferAttribute(positions, 3, false));\n const frustumLines = new LineSegments(frustumGeometry, new LineBasicMaterial());\n this.add(frustumLines);\n this.frustumLines = frustumLines;\n this.cascadeLines = [];\n this.cascadePlanes = [];\n this.shadowLines = [];\n }\n updateVisibility() {\n const displayFrustum = this.displayFrustum;\n const displayPlanes = this.displayPlanes;\n const displayShadowBounds = this.displayShadowBounds;\n const frustumLines = this.frustumLines;\n const cascadeLines = this.cascadeLines;\n const cascadePlanes = this.cascadePlanes;\n const shadowLines = this.shadowLines;\n for (let i = 0, l = cascadeLines.length; i < l; i++) {\n const cascadeLine = cascadeLines[i];\n const cascadePlane = cascadePlanes[i];\n const shadowLineGroup = shadowLines[i];\n cascadeLine.visible = displayFrustum;\n cascadePlane.visible = displayFrustum && displayPlanes;\n shadowLineGroup.visible = displayShadowBounds;\n }\n frustumLines.visible = displayFrustum;\n }\n update() {\n const csm = this.csm;\n const camera = csm.camera;\n const cascades = csm.cascades;\n const mainFrustum = csm.mainFrustum;\n const frustums = csm.frustums;\n const lights = csm.lights;\n const frustumLines = this.frustumLines;\n const frustumLinePositions = frustumLines.geometry.getAttribute(\"position\");\n const cascadeLines = this.cascadeLines;\n const cascadePlanes = this.cascadePlanes;\n const shadowLines = this.shadowLines;\n this.position.copy(camera.position);\n this.quaternion.copy(camera.quaternion);\n this.scale.copy(camera.scale);\n this.updateMatrixWorld(true);\n while (cascadeLines.length > cascades) {\n this.remove(cascadeLines.pop());\n this.remove(cascadePlanes.pop());\n this.remove(shadowLines.pop());\n }\n while (cascadeLines.length < cascades) {\n const cascadeLine = new Box3Helper(new Box3(), 16777215);\n const planeMat = new MeshBasicMaterial({ transparent: true, opacity: 0.1, depthWrite: false, side: DoubleSide });\n const cascadePlane = new Mesh(new PlaneGeometry(), planeMat);\n const shadowLineGroup = new Group();\n const shadowLine = new Box3Helper(new Box3(), 16776960);\n shadowLineGroup.add(shadowLine);\n this.add(cascadeLine);\n this.add(cascadePlane);\n this.add(shadowLineGroup);\n cascadeLines.push(cascadeLine);\n cascadePlanes.push(cascadePlane);\n shadowLines.push(shadowLineGroup);\n }\n for (let i = 0; i < cascades; i++) {\n const frustum = frustums[i];\n const light = lights[i];\n const shadowCam = light.shadow.camera;\n const farVerts2 = frustum.vertices.far;\n const cascadeLine = cascadeLines[i];\n const cascadePlane = cascadePlanes[i];\n const shadowLineGroup = shadowLines[i];\n const shadowLine = shadowLineGroup.children[0];\n cascadeLine.box.min.copy(farVerts2[2]);\n cascadeLine.box.max.copy(farVerts2[0]);\n cascadeLine.box.max.z += 1e-4;\n cascadePlane.position.addVectors(farVerts2[0], farVerts2[2]);\n cascadePlane.position.multiplyScalar(0.5);\n cascadePlane.scale.subVectors(farVerts2[0], farVerts2[2]);\n cascadePlane.scale.z = 1e-4;\n this.remove(shadowLineGroup);\n shadowLineGroup.position.copy(shadowCam.position);\n shadowLineGroup.quaternion.copy(shadowCam.quaternion);\n shadowLineGroup.scale.copy(shadowCam.scale);\n shadowLineGroup.updateMatrixWorld(true);\n this.attach(shadowLineGroup);\n shadowLine.box.min.set(shadowCam.bottom, shadowCam.left, -shadowCam.far);\n shadowLine.box.max.set(shadowCam.top, shadowCam.right, -shadowCam.near);\n }\n const nearVerts = mainFrustum.vertices.near;\n const farVerts = mainFrustum.vertices.far;\n frustumLinePositions.setXYZ(0, farVerts[0].x, farVerts[0].y, farVerts[0].z);\n frustumLinePositions.setXYZ(1, farVerts[3].x, farVerts[3].y, farVerts[3].z);\n frustumLinePositions.setXYZ(2, farVerts[2].x, farVerts[2].y, farVerts[2].z);\n frustumLinePositions.setXYZ(3, farVerts[1].x, farVerts[1].y, farVerts[1].z);\n frustumLinePositions.setXYZ(4, nearVerts[0].x, nearVerts[0].y, nearVerts[0].z);\n frustumLinePositions.setXYZ(5, nearVerts[3].x, nearVerts[3].y, nearVerts[3].z);\n frustumLinePositions.setXYZ(6, nearVerts[2].x, nearVerts[2].y, nearVerts[2].z);\n frustumLinePositions.setXYZ(7, nearVerts[1].x, nearVerts[1].y, nearVerts[1].z);\n frustumLinePositions.needsUpdate = true;\n }\n}\nexport {\n CSMHelper\n};\n//# sourceMappingURL=CSMHelper.js.map\n","const ACESFilmicToneMappingShader = {\n uniforms: {\n tDiffuse: { value: null },\n exposure: { value: 1 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n #define saturate(a) clamp( a, 0.0, 1.0 )\n\n uniform sampler2D tDiffuse;\n\n uniform float exposure;\n\n varying vec2 vUv;\n\n vec3 RRTAndODTFit( vec3 v ) {\n\n \tvec3 a = v * ( v + 0.0245786 ) - 0.000090537;\n \tvec3 b = v * ( 0.983729 * v + 0.4329510 ) + 0.238081;\n \treturn a / b;\n\n }\n\n vec3 ACESFilmicToneMapping( vec3 color ) {\n\n // sRGB => XYZ => D65_2_D60 => AP1 => RRT_SAT\n \tconst mat3 ACESInputMat = mat3(\n \t\tvec3( 0.59719, 0.07600, 0.02840 ), // transposed from source\n \t\tvec3( 0.35458, 0.90834, 0.13383 ),\n \t\tvec3( 0.04823, 0.01566, 0.83777 )\n \t);\n\n // ODT_SAT => XYZ => D60_2_D65 => sRGB\n \tconst mat3 ACESOutputMat = mat3(\n \t\tvec3( 1.60475, -0.10208, -0.00327 ), // transposed from source\n \t\tvec3( -0.53108, 1.10813, -0.07276 ),\n \t\tvec3( -0.07367, -0.00605, 1.07602 )\n \t);\n\n \tcolor = ACESInputMat * color;\n\n // Apply RRT and ODT\n \tcolor = RRTAndODTFit( color );\n\n \tcolor = ACESOutputMat * color;\n\n // Clamp to [0, 1]\n \treturn saturate( color );\n\n }\n\n void main() {\n\n \tvec4 tex = texture2D( tDiffuse, vUv );\n\n \ttex.rgb *= exposure / 0.6; // pre-exposed, outside of the tone mapping function\n\n \tgl_FragColor = vec4( ACESFilmicToneMapping( tex.rgb ), tex.a );\n\n }\n `\n )\n};\nexport {\n ACESFilmicToneMappingShader\n};\n//# sourceMappingURL=ACESFilmicToneMappingShader.js.map\n","const BasicShader = {\n uniforms: {},\n vertexShader: (\n /* glsl */\n `\n void main() {\n\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n void main() {\n\n gl_FragColor = vec4( 1.0, 0.0, 0.0, 0.5 );\n\n }\n `\n )\n};\nexport {\n BasicShader\n};\n//# sourceMappingURL=BasicShader.js.map\n","const BleachBypassShader = {\n uniforms: {\n tDiffuse: { value: null },\n opacity: { value: 1 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform float opacity;\n\n uniform sampler2D tDiffuse;\n\n varying vec2 vUv;\n\n void main() {\n\n \tvec4 base = texture2D( tDiffuse, vUv );\n\n \tvec3 lumCoeff = vec3( 0.25, 0.65, 0.1 );\n \tfloat lum = dot( lumCoeff, base.rgb );\n \tvec3 blend = vec3( lum );\n\n \tfloat L = min( 1.0, max( 0.0, 10.0 * ( lum - 0.45 ) ) );\n\n \tvec3 result1 = 2.0 * base.rgb * blend;\n \tvec3 result2 = 1.0 - 2.0 * ( 1.0 - blend ) * ( 1.0 - base.rgb );\n\n \tvec3 newColor = mix( result1, result2, L );\n\n \tfloat A2 = opacity * base.a;\n \tvec3 mixRGB = A2 * newColor.rgb;\n \tmixRGB += ( ( 1.0 - A2 ) * base.rgb );\n\n \tgl_FragColor = vec4( mixRGB, base.a );\n\n }\n `\n )\n};\nexport {\n BleachBypassShader\n};\n//# sourceMappingURL=BleachBypassShader.js.map\n","const BlendShader = {\n uniforms: {\n tDiffuse1: { value: null },\n tDiffuse2: { value: null },\n mixRatio: { value: 0.5 },\n opacity: { value: 1 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform float opacity;\n uniform float mixRatio;\n\n uniform sampler2D tDiffuse1;\n uniform sampler2D tDiffuse2;\n\n varying vec2 vUv;\n\n void main() {\n\n \tvec4 texel1 = texture2D( tDiffuse1, vUv );\n \tvec4 texel2 = texture2D( tDiffuse2, vUv );\n \tgl_FragColor = opacity * mix( texel1, texel2, mixRatio );\n\n }\n `\n )\n};\nexport {\n BlendShader\n};\n//# sourceMappingURL=BlendShader.js.map\n","const BrightnessContrastShader = {\n uniforms: {\n tDiffuse: { value: null },\n brightness: { value: 0 },\n contrast: { value: 0 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D tDiffuse;\n uniform float brightness;\n uniform float contrast;\n\n varying vec2 vUv;\n\n void main() {\n\n \tgl_FragColor = texture2D( tDiffuse, vUv );\n\n \tgl_FragColor.rgb += brightness;\n\n \tif (contrast > 0.0) {\n \t\tgl_FragColor.rgb = (gl_FragColor.rgb - 0.5) / (1.0 - contrast) + 0.5;\n \t} else {\n \t\tgl_FragColor.rgb = (gl_FragColor.rgb - 0.5) * (1.0 + contrast) + 0.5;\n \t}\n\n }\n `\n )\n};\nexport {\n BrightnessContrastShader\n};\n//# sourceMappingURL=BrightnessContrastShader.js.map\n","import { Vector3 } from \"three\";\nconst ColorCorrectionShader = {\n uniforms: {\n tDiffuse: { value: null },\n powRGB: { value: /* @__PURE__ */ new Vector3(2, 2, 2) },\n mulRGB: { value: /* @__PURE__ */ new Vector3(1, 1, 1) },\n addRGB: { value: /* @__PURE__ */ new Vector3(0, 0, 0) }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D tDiffuse;\n uniform vec3 powRGB;\n uniform vec3 mulRGB;\n uniform vec3 addRGB;\n\n varying vec2 vUv;\n\n void main() {\n\n \tgl_FragColor = texture2D( tDiffuse, vUv );\n \tgl_FragColor.rgb = mulRGB * pow( ( gl_FragColor.rgb + addRGB ), powRGB );\n\n }\n `\n )\n};\nexport {\n ColorCorrectionShader\n};\n//# sourceMappingURL=ColorCorrectionShader.js.map\n","import { Color } from \"three\";\nconst ColorifyShader = {\n uniforms: {\n tDiffuse: { value: null },\n color: { value: /* @__PURE__ */ new Color(16777215) }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform vec3 color;\n uniform sampler2D tDiffuse;\n\n varying vec2 vUv;\n\n void main() {\n\n \tvec4 texel = texture2D( tDiffuse, vUv );\n\n \tvec3 luma = vec3( 0.299, 0.587, 0.114 );\n \tfloat v = dot( texel.xyz, luma );\n\n \tgl_FragColor = vec4( v * color, texel.w );\n\n }\n `\n )\n};\nexport {\n ColorifyShader\n};\n//# sourceMappingURL=ColorifyShader.js.map\n","const DOFMipMapShader = {\n uniforms: {\n tColor: { value: null },\n tDepth: { value: null },\n focus: { value: 1 },\n maxblur: { value: 1 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform float focus;\n uniform float maxblur;\n\n uniform sampler2D tColor;\n uniform sampler2D tDepth;\n\n varying vec2 vUv;\n\n void main() {\n\n \tvec4 depth = texture2D( tDepth, vUv );\n\n \tfloat factor = depth.x - focus;\n\n \tvec4 col = texture2D( tColor, vUv, 2.0 * maxblur * abs( focus - depth.x ) );\n\n \tgl_FragColor = col;\n \tgl_FragColor.a = 1.0;\n\n }\n `\n )\n};\nexport {\n DOFMipMapShader\n};\n//# sourceMappingURL=DOFMipMapShader.js.map\n","import { Vector2 } from \"three\";\nconst FXAAShader = {\n uniforms: {\n tDiffuse: { value: null },\n resolution: { value: /* @__PURE__ */ new Vector2(1 / 1024, 1 / 512) }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n precision highp float;\n \n uniform sampler2D tDiffuse;\n \n uniform vec2 resolution;\n \n varying vec2 vUv;\n \n // FXAA 3.11 implementation by NVIDIA, ported to WebGL by Agost Biro (biro@archilogic.com)\n \n //----------------------------------------------------------------------------------\n // File: es3-keplerFXAAassetsshaders/FXAA_DefaultES.frag\n // SDK Version: v3.00\n // Email: gameworks@nvidia.com\n // Site: http://developer.nvidia.com/\n //\n // Copyright (c) 2014-2015, NVIDIA CORPORATION. All rights reserved.\n //\n // Redistribution and use in source and binary forms, with or without\n // modification, are permitted provided that the following conditions\n // are met:\n // * Redistributions of source code must retain the above copyright\n // notice, this list of conditions and the following disclaimer.\n // * Redistributions in binary form must reproduce the above copyright\n // notice, this list of conditions and the following disclaimer in the\n // documentation and/or other materials provided with the distribution.\n // * Neither the name of NVIDIA CORPORATION nor the names of its\n // contributors may be used to endorse or promote products derived\n // from this software without specific prior written permission.\n //\n // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AS IS AND ANY\n // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\n // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR\n // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR\n // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,\n // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,\n // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR\n // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY\n // OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n // (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n // OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n //\n //----------------------------------------------------------------------------------\n \n #define FXAA_PC 1\n #define FXAA_GLSL_100 1\n #define FXAA_QUALITY_PRESET 12\n \n #define FXAA_GREEN_AS_LUMA 1\n \n /*--------------------------------------------------------------------------*/\n #ifndef FXAA_PC_CONSOLE\n //\n // The console algorithm for PC is included\n // for developers targeting really low spec machines.\n // Likely better to just run FXAA_PC, and use a really low preset.\n //\n #define FXAA_PC_CONSOLE 0\n #endif\n /*--------------------------------------------------------------------------*/\n #ifndef FXAA_GLSL_120\n #define FXAA_GLSL_120 0\n #endif\n /*--------------------------------------------------------------------------*/\n #ifndef FXAA_GLSL_130\n #define FXAA_GLSL_130 0\n #endif\n /*--------------------------------------------------------------------------*/\n #ifndef FXAA_HLSL_3\n #define FXAA_HLSL_3 0\n #endif\n /*--------------------------------------------------------------------------*/\n #ifndef FXAA_HLSL_4\n #define FXAA_HLSL_4 0\n #endif\n /*--------------------------------------------------------------------------*/\n #ifndef FXAA_HLSL_5\n #define FXAA_HLSL_5 0\n #endif\n /*==========================================================================*/\n #ifndef FXAA_GREEN_AS_LUMA\n //\n // For those using non-linear color,\n // and either not able to get luma in alpha, or not wanting to,\n // this enables FXAA to run using green as a proxy for luma.\n // So with this enabled, no need to pack luma in alpha.\n //\n // This will turn off AA on anything which lacks some amount of green.\n // Pure red and blue or combination of only R and B, will get no AA.\n //\n // Might want to lower the settings for both,\n // fxaaConsoleEdgeThresholdMin\n // fxaaQualityEdgeThresholdMin\n // In order to insure AA does not get turned off on colors\n // which contain a minor amount of green.\n //\n // 1 = On.\n // 0 = Off.\n //\n #define FXAA_GREEN_AS_LUMA 0\n #endif\n /*--------------------------------------------------------------------------*/\n #ifndef FXAA_EARLY_EXIT\n //\n // Controls algorithms early exit path.\n // On PS3 turning this ON adds 2 cycles to the shader.\n // On 360 turning this OFF adds 10ths of a millisecond to the shader.\n // Turning this off on console will result in a more blurry image.\n // So this defaults to on.\n //\n // 1 = On.\n // 0 = Off.\n //\n #define FXAA_EARLY_EXIT 1\n #endif\n /*--------------------------------------------------------------------------*/\n #ifndef FXAA_DISCARD\n //\n // Only valid for PC OpenGL currently.\n // Probably will not work when FXAA_GREEN_AS_LUMA = 1.\n //\n // 1 = Use discard on pixels which dont need AA.\n // For APIs which enable concurrent TEX+ROP from same surface.\n // 0 = Return unchanged color on pixels which dont need AA.\n //\n #define FXAA_DISCARD 0\n #endif\n /*--------------------------------------------------------------------------*/\n #ifndef FXAA_FAST_PIXEL_OFFSET\n //\n // Used for GLSL 120 only.\n //\n // 1 = GL API supports fast pixel offsets\n // 0 = do not use fast pixel offsets\n //\n #ifdef GL_EXT_gpu_shader4\n #define FXAA_FAST_PIXEL_OFFSET 1\n #endif\n #ifdef GL_NV_gpu_shader5\n #define FXAA_FAST_PIXEL_OFFSET 1\n #endif\n #ifdef GL_ARB_gpu_shader5\n #define FXAA_FAST_PIXEL_OFFSET 1\n #endif\n #ifndef FXAA_FAST_PIXEL_OFFSET\n #define FXAA_FAST_PIXEL_OFFSET 0\n #endif\n #endif\n /*--------------------------------------------------------------------------*/\n #ifndef FXAA_GATHER4_ALPHA\n //\n // 1 = API supports gather4 on alpha channel.\n // 0 = API does not support gather4 on alpha channel.\n //\n #if (FXAA_HLSL_5 == 1)\n #define FXAA_GATHER4_ALPHA 1\n #endif\n #ifdef GL_ARB_gpu_shader5\n #define FXAA_GATHER4_ALPHA 1\n #endif\n #ifdef GL_NV_gpu_shader5\n #define FXAA_GATHER4_ALPHA 1\n #endif\n #ifndef FXAA_GATHER4_ALPHA\n #define FXAA_GATHER4_ALPHA 0\n #endif\n #endif\n \n \n /*============================================================================\n FXAA QUALITY - TUNING KNOBS\n ------------------------------------------------------------------------------\n NOTE the other tuning knobs are now in the shader function inputs!\n ============================================================================*/\n #ifndef FXAA_QUALITY_PRESET\n //\n // Choose the quality preset.\n // This needs to be compiled into the shader as it effects code.\n // Best option to include multiple presets is to\n // in each shader define the preset, then include this file.\n //\n // OPTIONS\n // -----------------------------------------------------------------------\n // 10 to 15 - default medium dither (10=fastest, 15=highest quality)\n // 20 to 29 - less dither, more expensive (20=fastest, 29=highest quality)\n // 39 - no dither, very expensive\n //\n // NOTES\n // -----------------------------------------------------------------------\n // 12 = slightly faster then FXAA 3.9 and higher edge quality (default)\n // 13 = about same speed as FXAA 3.9 and better than 12\n // 23 = closest to FXAA 3.9 visually and performance wise\n // _ = the lowest digit is directly related to performance\n // _ = the highest digit is directly related to style\n //\n #define FXAA_QUALITY_PRESET 12\n #endif\n \n \n /*============================================================================\n \n FXAA QUALITY - PRESETS\n \n ============================================================================*/\n \n /*============================================================================\n FXAA QUALITY - MEDIUM DITHER PRESETS\n ============================================================================*/\n #if (FXAA_QUALITY_PRESET == 10)\n #define FXAA_QUALITY_PS 3\n #define FXAA_QUALITY_P0 1.5\n #define FXAA_QUALITY_P1 3.0\n #define FXAA_QUALITY_P2 12.0\n #endif\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PRESET == 11)\n #define FXAA_QUALITY_PS 4\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 3.0\n #define FXAA_QUALITY_P3 12.0\n #endif\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PRESET == 12)\n #define FXAA_QUALITY_PS 5\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 4.0\n #define FXAA_QUALITY_P4 12.0\n #endif\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PRESET == 13)\n #define FXAA_QUALITY_PS 6\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 2.0\n #define FXAA_QUALITY_P4 4.0\n #define FXAA_QUALITY_P5 12.0\n #endif\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PRESET == 14)\n #define FXAA_QUALITY_PS 7\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 2.0\n #define FXAA_QUALITY_P4 2.0\n #define FXAA_QUALITY_P5 4.0\n #define FXAA_QUALITY_P6 12.0\n #endif\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PRESET == 15)\n #define FXAA_QUALITY_PS 8\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 2.0\n #define FXAA_QUALITY_P4 2.0\n #define FXAA_QUALITY_P5 2.0\n #define FXAA_QUALITY_P6 4.0\n #define FXAA_QUALITY_P7 12.0\n #endif\n \n /*============================================================================\n FXAA QUALITY - LOW DITHER PRESETS\n ============================================================================*/\n #if (FXAA_QUALITY_PRESET == 20)\n #define FXAA_QUALITY_PS 3\n #define FXAA_QUALITY_P0 1.5\n #define FXAA_QUALITY_P1 2.0\n #define FXAA_QUALITY_P2 8.0\n #endif\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PRESET == 21)\n #define FXAA_QUALITY_PS 4\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 8.0\n #endif\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PRESET == 22)\n #define FXAA_QUALITY_PS 5\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 2.0\n #define FXAA_QUALITY_P4 8.0\n #endif\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PRESET == 23)\n #define FXAA_QUALITY_PS 6\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 2.0\n #define FXAA_QUALITY_P4 2.0\n #define FXAA_QUALITY_P5 8.0\n #endif\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PRESET == 24)\n #define FXAA_QUALITY_PS 7\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 2.0\n #define FXAA_QUALITY_P4 2.0\n #define FXAA_QUALITY_P5 3.0\n #define FXAA_QUALITY_P6 8.0\n #endif\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PRESET == 25)\n #define FXAA_QUALITY_PS 8\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 2.0\n #define FXAA_QUALITY_P4 2.0\n #define FXAA_QUALITY_P5 2.0\n #define FXAA_QUALITY_P6 4.0\n #define FXAA_QUALITY_P7 8.0\n #endif\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PRESET == 26)\n #define FXAA_QUALITY_PS 9\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 2.0\n #define FXAA_QUALITY_P4 2.0\n #define FXAA_QUALITY_P5 2.0\n #define FXAA_QUALITY_P6 2.0\n #define FXAA_QUALITY_P7 4.0\n #define FXAA_QUALITY_P8 8.0\n #endif\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PRESET == 27)\n #define FXAA_QUALITY_PS 10\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 2.0\n #define FXAA_QUALITY_P4 2.0\n #define FXAA_QUALITY_P5 2.0\n #define FXAA_QUALITY_P6 2.0\n #define FXAA_QUALITY_P7 2.0\n #define FXAA_QUALITY_P8 4.0\n #define FXAA_QUALITY_P9 8.0\n #endif\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PRESET == 28)\n #define FXAA_QUALITY_PS 11\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 2.0\n #define FXAA_QUALITY_P4 2.0\n #define FXAA_QUALITY_P5 2.0\n #define FXAA_QUALITY_P6 2.0\n #define FXAA_QUALITY_P7 2.0\n #define FXAA_QUALITY_P8 2.0\n #define FXAA_QUALITY_P9 4.0\n #define FXAA_QUALITY_P10 8.0\n #endif\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PRESET == 29)\n #define FXAA_QUALITY_PS 12\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.5\n #define FXAA_QUALITY_P2 2.0\n #define FXAA_QUALITY_P3 2.0\n #define FXAA_QUALITY_P4 2.0\n #define FXAA_QUALITY_P5 2.0\n #define FXAA_QUALITY_P6 2.0\n #define FXAA_QUALITY_P7 2.0\n #define FXAA_QUALITY_P8 2.0\n #define FXAA_QUALITY_P9 2.0\n #define FXAA_QUALITY_P10 4.0\n #define FXAA_QUALITY_P11 8.0\n #endif\n \n /*============================================================================\n FXAA QUALITY - EXTREME QUALITY\n ============================================================================*/\n #if (FXAA_QUALITY_PRESET == 39)\n #define FXAA_QUALITY_PS 12\n #define FXAA_QUALITY_P0 1.0\n #define FXAA_QUALITY_P1 1.0\n #define FXAA_QUALITY_P2 1.0\n #define FXAA_QUALITY_P3 1.0\n #define FXAA_QUALITY_P4 1.0\n #define FXAA_QUALITY_P5 1.5\n #define FXAA_QUALITY_P6 2.0\n #define FXAA_QUALITY_P7 2.0\n #define FXAA_QUALITY_P8 2.0\n #define FXAA_QUALITY_P9 2.0\n #define FXAA_QUALITY_P10 4.0\n #define FXAA_QUALITY_P11 8.0\n #endif\n \n \n \n /*============================================================================\n \n API PORTING\n \n ============================================================================*/\n #if (FXAA_GLSL_100 == 1) || (FXAA_GLSL_120 == 1) || (FXAA_GLSL_130 == 1)\n #define FxaaBool bool\n #define FxaaDiscard discard\n #define FxaaFloat float\n #define FxaaFloat2 vec2\n #define FxaaFloat3 vec3\n #define FxaaFloat4 vec4\n #define FxaaHalf float\n #define FxaaHalf2 vec2\n #define FxaaHalf3 vec3\n #define FxaaHalf4 vec4\n #define FxaaInt2 ivec2\n #define FxaaSat(x) clamp(x, 0.0, 1.0)\n #define FxaaTex sampler2D\n #else\n #define FxaaBool bool\n #define FxaaDiscard clip(-1)\n #define FxaaFloat float\n #define FxaaFloat2 float2\n #define FxaaFloat3 float3\n #define FxaaFloat4 float4\n #define FxaaHalf half\n #define FxaaHalf2 half2\n #define FxaaHalf3 half3\n #define FxaaHalf4 half4\n #define FxaaSat(x) saturate(x)\n #endif\n /*--------------------------------------------------------------------------*/\n #if (FXAA_GLSL_100 == 1)\n #define FxaaTexTop(t, p) texture2D(t, p, 0.0)\n #define FxaaTexOff(t, p, o, r) texture2D(t, p + (o * r), 0.0)\n #endif\n /*--------------------------------------------------------------------------*/\n #if (FXAA_GLSL_120 == 1)\n // Requires,\n // #version 120\n // And at least,\n // #extension GL_EXT_gpu_shader4 : enable\n // (or set FXAA_FAST_PIXEL_OFFSET 1 to work like DX9)\n #define FxaaTexTop(t, p) texture2DLod(t, p, 0.0)\n #if (FXAA_FAST_PIXEL_OFFSET == 1)\n #define FxaaTexOff(t, p, o, r) texture2DLodOffset(t, p, 0.0, o)\n #else\n #define FxaaTexOff(t, p, o, r) texture2DLod(t, p + (o * r), 0.0)\n #endif\n #if (FXAA_GATHER4_ALPHA == 1)\n // use #extension GL_ARB_gpu_shader5 : enable\n #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)\n #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)\n #define FxaaTexGreen4(t, p) textureGather(t, p, 1)\n #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)\n #endif\n #endif\n /*--------------------------------------------------------------------------*/\n #if (FXAA_GLSL_130 == 1)\n // Requires \"#version 130\" or better\n #define FxaaTexTop(t, p) textureLod(t, p, 0.0)\n #define FxaaTexOff(t, p, o, r) textureLodOffset(t, p, 0.0, o)\n #if (FXAA_GATHER4_ALPHA == 1)\n // use #extension GL_ARB_gpu_shader5 : enable\n #define FxaaTexAlpha4(t, p) textureGather(t, p, 3)\n #define FxaaTexOffAlpha4(t, p, o) textureGatherOffset(t, p, o, 3)\n #define FxaaTexGreen4(t, p) textureGather(t, p, 1)\n #define FxaaTexOffGreen4(t, p, o) textureGatherOffset(t, p, o, 1)\n #endif\n #endif\n /*--------------------------------------------------------------------------*/\n #if (FXAA_HLSL_3 == 1)\n #define FxaaInt2 float2\n #define FxaaTex sampler2D\n #define FxaaTexTop(t, p) tex2Dlod(t, float4(p, 0.0, 0.0))\n #define FxaaTexOff(t, p, o, r) tex2Dlod(t, float4(p + (o * r), 0, 0))\n #endif\n /*--------------------------------------------------------------------------*/\n #if (FXAA_HLSL_4 == 1)\n #define FxaaInt2 int2\n struct FxaaTex { SamplerState smpl; Texture2D tex; };\n #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)\n #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)\n #endif\n /*--------------------------------------------------------------------------*/\n #if (FXAA_HLSL_5 == 1)\n #define FxaaInt2 int2\n struct FxaaTex { SamplerState smpl; Texture2D tex; };\n #define FxaaTexTop(t, p) t.tex.SampleLevel(t.smpl, p, 0.0)\n #define FxaaTexOff(t, p, o, r) t.tex.SampleLevel(t.smpl, p, 0.0, o)\n #define FxaaTexAlpha4(t, p) t.tex.GatherAlpha(t.smpl, p)\n #define FxaaTexOffAlpha4(t, p, o) t.tex.GatherAlpha(t.smpl, p, o)\n #define FxaaTexGreen4(t, p) t.tex.GatherGreen(t.smpl, p)\n #define FxaaTexOffGreen4(t, p, o) t.tex.GatherGreen(t.smpl, p, o)\n #endif\n \n \n /*============================================================================\n GREEN AS LUMA OPTION SUPPORT FUNCTION\n ============================================================================*/\n #if (FXAA_GREEN_AS_LUMA == 0)\n FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.w; }\n #else\n FxaaFloat FxaaLuma(FxaaFloat4 rgba) { return rgba.y; }\n #endif\n \n \n \n \n /*============================================================================\n \n FXAA3 QUALITY - PC\n \n ============================================================================*/\n #if (FXAA_PC == 1)\n /*--------------------------------------------------------------------------*/\n FxaaFloat4 FxaaPixelShader(\n //\n // Use noperspective interpolation here (turn off perspective interpolation).\n // {xy} = center of pixel\n FxaaFloat2 pos,\n //\n // Used only for FXAA Console, and not used on the 360 version.\n // Use noperspective interpolation here (turn off perspective interpolation).\n // {xy_} = upper left of pixel\n // {_zw} = lower right of pixel\n FxaaFloat4 fxaaConsolePosPos,\n //\n // Input color texture.\n // {rgb_} = color in linear or perceptual color space\n // if (FXAA_GREEN_AS_LUMA == 0)\n // {__a} = luma in perceptual color space (not linear)\n FxaaTex tex,\n //\n // Only used on the optimized 360 version of FXAA Console.\n // For everything but 360, just use the same input here as for \"tex\".\n // For 360, same texture, just alias with a 2nd sampler.\n // This sampler needs to have an exponent bias of -1.\n FxaaTex fxaaConsole360TexExpBiasNegOne,\n //\n // Only used on the optimized 360 version of FXAA Console.\n // For everything but 360, just use the same input here as for \"tex\".\n // For 360, same texture, just alias with a 3nd sampler.\n // This sampler needs to have an exponent bias of -2.\n FxaaTex fxaaConsole360TexExpBiasNegTwo,\n //\n // Only used on FXAA Quality.\n // This must be from a constant/uniform.\n // {x_} = 1.0/screenWidthInPixels\n // {_y} = 1.0/screenHeightInPixels\n FxaaFloat2 fxaaQualityRcpFrame,\n //\n // Only used on FXAA Console.\n // This must be from a constant/uniform.\n // This effects sub-pixel AA quality and inversely sharpness.\n // Where N ranges between,\n // N = 0.50 (default)\n // N = 0.33 (sharper)\n // {x__} = -N/screenWidthInPixels\n // {_y_} = -N/screenHeightInPixels\n // {_z_} = N/screenWidthInPixels\n // {__w} = N/screenHeightInPixels\n FxaaFloat4 fxaaConsoleRcpFrameOpt,\n //\n // Only used on FXAA Console.\n // Not used on 360, but used on PS3 and PC.\n // This must be from a constant/uniform.\n // {x__} = -2.0/screenWidthInPixels\n // {_y_} = -2.0/screenHeightInPixels\n // {_z_} = 2.0/screenWidthInPixels\n // {__w} = 2.0/screenHeightInPixels\n FxaaFloat4 fxaaConsoleRcpFrameOpt2,\n //\n // Only used on FXAA Console.\n // Only used on 360 in place of fxaaConsoleRcpFrameOpt2.\n // This must be from a constant/uniform.\n // {x__} = 8.0/screenWidthInPixels\n // {_y_} = 8.0/screenHeightInPixels\n // {_z_} = -4.0/screenWidthInPixels\n // {__w} = -4.0/screenHeightInPixels\n FxaaFloat4 fxaaConsole360RcpFrameOpt2,\n //\n // Only used on FXAA Quality.\n // This used to be the FXAA_QUALITY_SUBPIX define.\n // It is here now to allow easier tuning.\n // Choose the amount of sub-pixel aliasing removal.\n // This can effect sharpness.\n // 1.00 - upper limit (softer)\n // 0.75 - default amount of filtering\n // 0.50 - lower limit (sharper, less sub-pixel aliasing removal)\n // 0.25 - almost off\n // 0.00 - completely off\n FxaaFloat fxaaQualitySubpix,\n //\n // Only used on FXAA Quality.\n // This used to be the FXAA_QUALITY_EDGE_THRESHOLD define.\n // It is here now to allow easier tuning.\n // The minimum amount of local contrast required to apply algorithm.\n // 0.333 - too little (faster)\n // 0.250 - low quality\n // 0.166 - default\n // 0.125 - high quality\n // 0.063 - overkill (slower)\n FxaaFloat fxaaQualityEdgeThreshold,\n //\n // Only used on FXAA Quality.\n // This used to be the FXAA_QUALITY_EDGE_THRESHOLD_MIN define.\n // It is here now to allow easier tuning.\n // Trims the algorithm from processing darks.\n // 0.0833 - upper limit (default, the start of visible unfiltered edges)\n // 0.0625 - high quality (faster)\n // 0.0312 - visible limit (slower)\n // Special notes when using FXAA_GREEN_AS_LUMA,\n // Likely want to set this to zero.\n // As colors that are mostly not-green\n // will appear very dark in the green channel!\n // Tune by looking at mostly non-green content,\n // then start at zero and increase until aliasing is a problem.\n FxaaFloat fxaaQualityEdgeThresholdMin,\n //\n // Only used on FXAA Console.\n // This used to be the FXAA_CONSOLE_EDGE_SHARPNESS define.\n // It is here now to allow easier tuning.\n // This does not effect PS3, as this needs to be compiled in.\n // Use FXAA_CONSOLE_PS3_EDGE_SHARPNESS for PS3.\n // Due to the PS3 being ALU bound,\n // there are only three safe values here: 2 and 4 and 8.\n // These options use the shaders ability to a free *|/ by 2|4|8.\n // For all other platforms can be a non-power of two.\n // 8.0 is sharper (default!!!)\n // 4.0 is softer\n // 2.0 is really soft (good only for vector graphics inputs)\n FxaaFloat fxaaConsoleEdgeSharpness,\n //\n // Only used on FXAA Console.\n // This used to be the FXAA_CONSOLE_EDGE_THRESHOLD define.\n // It is here now to allow easier tuning.\n // This does not effect PS3, as this needs to be compiled in.\n // Use FXAA_CONSOLE_PS3_EDGE_THRESHOLD for PS3.\n // Due to the PS3 being ALU bound,\n // there are only two safe values here: 1/4 and 1/8.\n // These options use the shaders ability to a free *|/ by 2|4|8.\n // The console setting has a different mapping than the quality setting.\n // Other platforms can use other values.\n // 0.125 leaves less aliasing, but is softer (default!!!)\n // 0.25 leaves more aliasing, and is sharper\n FxaaFloat fxaaConsoleEdgeThreshold,\n //\n // Only used on FXAA Console.\n // This used to be the FXAA_CONSOLE_EDGE_THRESHOLD_MIN define.\n // It is here now to allow easier tuning.\n // Trims the algorithm from processing darks.\n // The console setting has a different mapping than the quality setting.\n // This only applies when FXAA_EARLY_EXIT is 1.\n // This does not apply to PS3,\n // PS3 was simplified to avoid more shader instructions.\n // 0.06 - faster but more aliasing in darks\n // 0.05 - default\n // 0.04 - slower and less aliasing in darks\n // Special notes when using FXAA_GREEN_AS_LUMA,\n // Likely want to set this to zero.\n // As colors that are mostly not-green\n // will appear very dark in the green channel!\n // Tune by looking at mostly non-green content,\n // then start at zero and increase until aliasing is a problem.\n FxaaFloat fxaaConsoleEdgeThresholdMin,\n //\n // Extra constants for 360 FXAA Console only.\n // Use zeros or anything else for other platforms.\n // These must be in physical constant registers and NOT immediates.\n // Immediates will result in compiler un-optimizing.\n // {xyzw} = float4(1.0, -1.0, 0.25, -0.25)\n FxaaFloat4 fxaaConsole360ConstDir\n ) {\n /*--------------------------------------------------------------------------*/\n FxaaFloat2 posM;\n posM.x = pos.x;\n posM.y = pos.y;\n #if (FXAA_GATHER4_ALPHA == 1)\n #if (FXAA_DISCARD == 0)\n FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);\n #if (FXAA_GREEN_AS_LUMA == 0)\n #define lumaM rgbyM.w\n #else\n #define lumaM rgbyM.y\n #endif\n #endif\n #if (FXAA_GREEN_AS_LUMA == 0)\n FxaaFloat4 luma4A = FxaaTexAlpha4(tex, posM);\n FxaaFloat4 luma4B = FxaaTexOffAlpha4(tex, posM, FxaaInt2(-1, -1));\n #else\n FxaaFloat4 luma4A = FxaaTexGreen4(tex, posM);\n FxaaFloat4 luma4B = FxaaTexOffGreen4(tex, posM, FxaaInt2(-1, -1));\n #endif\n #if (FXAA_DISCARD == 1)\n #define lumaM luma4A.w\n #endif\n #define lumaE luma4A.z\n #define lumaS luma4A.x\n #define lumaSE luma4A.y\n #define lumaNW luma4B.w\n #define lumaN luma4B.z\n #define lumaW luma4B.x\n #else\n FxaaFloat4 rgbyM = FxaaTexTop(tex, posM);\n #if (FXAA_GREEN_AS_LUMA == 0)\n #define lumaM rgbyM.w\n #else\n #define lumaM rgbyM.y\n #endif\n #if (FXAA_GLSL_100 == 1)\n FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0, 1.0), fxaaQualityRcpFrame.xy));\n FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 0.0), fxaaQualityRcpFrame.xy));\n FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 0.0,-1.0), fxaaQualityRcpFrame.xy));\n FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 0.0), fxaaQualityRcpFrame.xy));\n #else\n FxaaFloat lumaS = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0, 1), fxaaQualityRcpFrame.xy));\n FxaaFloat lumaE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 0), fxaaQualityRcpFrame.xy));\n FxaaFloat lumaN = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 0,-1), fxaaQualityRcpFrame.xy));\n FxaaFloat lumaW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 0), fxaaQualityRcpFrame.xy));\n #endif\n #endif\n /*--------------------------------------------------------------------------*/\n FxaaFloat maxSM = max(lumaS, lumaM);\n FxaaFloat minSM = min(lumaS, lumaM);\n FxaaFloat maxESM = max(lumaE, maxSM);\n FxaaFloat minESM = min(lumaE, minSM);\n FxaaFloat maxWN = max(lumaN, lumaW);\n FxaaFloat minWN = min(lumaN, lumaW);\n FxaaFloat rangeMax = max(maxWN, maxESM);\n FxaaFloat rangeMin = min(minWN, minESM);\n FxaaFloat rangeMaxScaled = rangeMax * fxaaQualityEdgeThreshold;\n FxaaFloat range = rangeMax - rangeMin;\n FxaaFloat rangeMaxClamped = max(fxaaQualityEdgeThresholdMin, rangeMaxScaled);\n FxaaBool earlyExit = range < rangeMaxClamped;\n /*--------------------------------------------------------------------------*/\n if(earlyExit)\n #if (FXAA_DISCARD == 1)\n FxaaDiscard;\n #else\n return rgbyM;\n #endif\n /*--------------------------------------------------------------------------*/\n #if (FXAA_GATHER4_ALPHA == 0)\n #if (FXAA_GLSL_100 == 1)\n FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0,-1.0), fxaaQualityRcpFrame.xy));\n FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0, 1.0), fxaaQualityRcpFrame.xy));\n FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2( 1.0,-1.0), fxaaQualityRcpFrame.xy));\n FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaFloat2(-1.0, 1.0), fxaaQualityRcpFrame.xy));\n #else\n FxaaFloat lumaNW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1,-1), fxaaQualityRcpFrame.xy));\n FxaaFloat lumaSE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1, 1), fxaaQualityRcpFrame.xy));\n FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2( 1,-1), fxaaQualityRcpFrame.xy));\n FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));\n #endif\n #else\n FxaaFloat lumaNE = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(1, -1), fxaaQualityRcpFrame.xy));\n FxaaFloat lumaSW = FxaaLuma(FxaaTexOff(tex, posM, FxaaInt2(-1, 1), fxaaQualityRcpFrame.xy));\n #endif\n /*--------------------------------------------------------------------------*/\n FxaaFloat lumaNS = lumaN + lumaS;\n FxaaFloat lumaWE = lumaW + lumaE;\n FxaaFloat subpixRcpRange = 1.0/range;\n FxaaFloat subpixNSWE = lumaNS + lumaWE;\n FxaaFloat edgeHorz1 = (-2.0 * lumaM) + lumaNS;\n FxaaFloat edgeVert1 = (-2.0 * lumaM) + lumaWE;\n /*--------------------------------------------------------------------------*/\n FxaaFloat lumaNESE = lumaNE + lumaSE;\n FxaaFloat lumaNWNE = lumaNW + lumaNE;\n FxaaFloat edgeHorz2 = (-2.0 * lumaE) + lumaNESE;\n FxaaFloat edgeVert2 = (-2.0 * lumaN) + lumaNWNE;\n /*--------------------------------------------------------------------------*/\n FxaaFloat lumaNWSW = lumaNW + lumaSW;\n FxaaFloat lumaSWSE = lumaSW + lumaSE;\n FxaaFloat edgeHorz4 = (abs(edgeHorz1) * 2.0) + abs(edgeHorz2);\n FxaaFloat edgeVert4 = (abs(edgeVert1) * 2.0) + abs(edgeVert2);\n FxaaFloat edgeHorz3 = (-2.0 * lumaW) + lumaNWSW;\n FxaaFloat edgeVert3 = (-2.0 * lumaS) + lumaSWSE;\n FxaaFloat edgeHorz = abs(edgeHorz3) + edgeHorz4;\n FxaaFloat edgeVert = abs(edgeVert3) + edgeVert4;\n /*--------------------------------------------------------------------------*/\n FxaaFloat subpixNWSWNESE = lumaNWSW + lumaNESE;\n FxaaFloat lengthSign = fxaaQualityRcpFrame.x;\n FxaaBool horzSpan = edgeHorz >= edgeVert;\n FxaaFloat subpixA = subpixNSWE * 2.0 + subpixNWSWNESE;\n /*--------------------------------------------------------------------------*/\n if(!horzSpan) lumaN = lumaW;\n if(!horzSpan) lumaS = lumaE;\n if(horzSpan) lengthSign = fxaaQualityRcpFrame.y;\n FxaaFloat subpixB = (subpixA * (1.0/12.0)) - lumaM;\n /*--------------------------------------------------------------------------*/\n FxaaFloat gradientN = lumaN - lumaM;\n FxaaFloat gradientS = lumaS - lumaM;\n FxaaFloat lumaNN = lumaN + lumaM;\n FxaaFloat lumaSS = lumaS + lumaM;\n FxaaBool pairN = abs(gradientN) >= abs(gradientS);\n FxaaFloat gradient = max(abs(gradientN), abs(gradientS));\n if(pairN) lengthSign = -lengthSign;\n FxaaFloat subpixC = FxaaSat(abs(subpixB) * subpixRcpRange);\n /*--------------------------------------------------------------------------*/\n FxaaFloat2 posB;\n posB.x = posM.x;\n posB.y = posM.y;\n FxaaFloat2 offNP;\n offNP.x = (!horzSpan) ? 0.0 : fxaaQualityRcpFrame.x;\n offNP.y = ( horzSpan) ? 0.0 : fxaaQualityRcpFrame.y;\n if(!horzSpan) posB.x += lengthSign * 0.5;\n if( horzSpan) posB.y += lengthSign * 0.5;\n /*--------------------------------------------------------------------------*/\n FxaaFloat2 posN;\n posN.x = posB.x - offNP.x * FXAA_QUALITY_P0;\n posN.y = posB.y - offNP.y * FXAA_QUALITY_P0;\n FxaaFloat2 posP;\n posP.x = posB.x + offNP.x * FXAA_QUALITY_P0;\n posP.y = posB.y + offNP.y * FXAA_QUALITY_P0;\n FxaaFloat subpixD = ((-2.0)*subpixC) + 3.0;\n FxaaFloat lumaEndN = FxaaLuma(FxaaTexTop(tex, posN));\n FxaaFloat subpixE = subpixC * subpixC;\n FxaaFloat lumaEndP = FxaaLuma(FxaaTexTop(tex, posP));\n /*--------------------------------------------------------------------------*/\n if(!pairN) lumaNN = lumaSS;\n FxaaFloat gradientScaled = gradient * 1.0/4.0;\n FxaaFloat lumaMM = lumaM - lumaNN * 0.5;\n FxaaFloat subpixF = subpixD * subpixE;\n FxaaBool lumaMLTZero = lumaMM < 0.0;\n /*--------------------------------------------------------------------------*/\n lumaEndN -= lumaNN * 0.5;\n lumaEndP -= lumaNN * 0.5;\n FxaaBool doneN = abs(lumaEndN) >= gradientScaled;\n FxaaBool doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P1;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P1;\n FxaaBool doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P1;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P1;\n /*--------------------------------------------------------------------------*/\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P2;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P2;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P2;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P2;\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PS > 3)\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P3;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P3;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P3;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P3;\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PS > 4)\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P4;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P4;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P4;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P4;\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PS > 5)\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P5;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P5;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P5;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P5;\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PS > 6)\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P6;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P6;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P6;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P6;\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PS > 7)\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P7;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P7;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P7;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P7;\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PS > 8)\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P8;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P8;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P8;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P8;\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PS > 9)\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P9;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P9;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P9;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P9;\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PS > 10)\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P10;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P10;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P10;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P10;\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PS > 11)\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P11;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P11;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P11;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P11;\n /*--------------------------------------------------------------------------*/\n #if (FXAA_QUALITY_PS > 12)\n if(doneNP) {\n if(!doneN) lumaEndN = FxaaLuma(FxaaTexTop(tex, posN.xy));\n if(!doneP) lumaEndP = FxaaLuma(FxaaTexTop(tex, posP.xy));\n if(!doneN) lumaEndN = lumaEndN - lumaNN * 0.5;\n if(!doneP) lumaEndP = lumaEndP - lumaNN * 0.5;\n doneN = abs(lumaEndN) >= gradientScaled;\n doneP = abs(lumaEndP) >= gradientScaled;\n if(!doneN) posN.x -= offNP.x * FXAA_QUALITY_P12;\n if(!doneN) posN.y -= offNP.y * FXAA_QUALITY_P12;\n doneNP = (!doneN) || (!doneP);\n if(!doneP) posP.x += offNP.x * FXAA_QUALITY_P12;\n if(!doneP) posP.y += offNP.y * FXAA_QUALITY_P12;\n /*--------------------------------------------------------------------------*/\n }\n #endif\n /*--------------------------------------------------------------------------*/\n }\n #endif\n /*--------------------------------------------------------------------------*/\n }\n #endif\n /*--------------------------------------------------------------------------*/\n }\n #endif\n /*--------------------------------------------------------------------------*/\n }\n #endif\n /*--------------------------------------------------------------------------*/\n }\n #endif\n /*--------------------------------------------------------------------------*/\n }\n #endif\n /*--------------------------------------------------------------------------*/\n }\n #endif\n /*--------------------------------------------------------------------------*/\n }\n #endif\n /*--------------------------------------------------------------------------*/\n }\n #endif\n /*--------------------------------------------------------------------------*/\n }\n /*--------------------------------------------------------------------------*/\n FxaaFloat dstN = posM.x - posN.x;\n FxaaFloat dstP = posP.x - posM.x;\n if(!horzSpan) dstN = posM.y - posN.y;\n if(!horzSpan) dstP = posP.y - posM.y;\n /*--------------------------------------------------------------------------*/\n FxaaBool goodSpanN = (lumaEndN < 0.0) != lumaMLTZero;\n FxaaFloat spanLength = (dstP + dstN);\n FxaaBool goodSpanP = (lumaEndP < 0.0) != lumaMLTZero;\n FxaaFloat spanLengthRcp = 1.0/spanLength;\n /*--------------------------------------------------------------------------*/\n FxaaBool directionN = dstN < dstP;\n FxaaFloat dst = min(dstN, dstP);\n FxaaBool goodSpan = directionN ? goodSpanN : goodSpanP;\n FxaaFloat subpixG = subpixF * subpixF;\n FxaaFloat pixelOffset = (dst * (-spanLengthRcp)) + 0.5;\n FxaaFloat subpixH = subpixG * fxaaQualitySubpix;\n /*--------------------------------------------------------------------------*/\n FxaaFloat pixelOffsetGood = goodSpan ? pixelOffset : 0.0;\n FxaaFloat pixelOffsetSubpix = max(pixelOffsetGood, subpixH);\n if(!horzSpan) posM.x += pixelOffsetSubpix * lengthSign;\n if( horzSpan) posM.y += pixelOffsetSubpix * lengthSign;\n #if (FXAA_DISCARD == 1)\n return FxaaTexTop(tex, posM);\n #else\n return FxaaFloat4(FxaaTexTop(tex, posM).xyz, lumaM);\n #endif\n }\n /*==========================================================================*/\n #endif\n \n void main() {\n gl_FragColor = FxaaPixelShader(\n vUv,\n vec4(0.0),\n tDiffuse,\n tDiffuse,\n tDiffuse,\n resolution,\n vec4(0.0),\n vec4(0.0),\n vec4(0.0),\n 0.75,\n 0.166,\n 0.0833,\n 0.0,\n 0.0,\n 0.0,\n vec4(0.0)\n );\n \n // TODO avoid querying texture twice for same texel\n gl_FragColor.a = texture2D(tDiffuse, vUv).a;\n }\n `\n )\n};\nexport {\n FXAAShader\n};\n//# sourceMappingURL=FXAAShader.js.map\n","const FocusShader = {\n uniforms: {\n tDiffuse: { value: null },\n screenWidth: { value: 1024 },\n screenHeight: { value: 1024 },\n sampleDistance: { value: 0.94 },\n waveFactor: { value: 125e-5 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform float screenWidth;\n uniform float screenHeight;\n uniform float sampleDistance;\n uniform float waveFactor;\n\n uniform sampler2D tDiffuse;\n\n varying vec2 vUv;\n\n void main() {\n\n \tvec4 color, org, tmp, add;\n \tfloat sample_dist, f;\n \tvec2 vin;\n \tvec2 uv = vUv;\n\n \tadd = color = org = texture2D( tDiffuse, uv );\n\n \tvin = ( uv - vec2( 0.5 ) ) * vec2( 1.4 );\n \tsample_dist = dot( vin, vin ) * 2.0;\n\n \tf = ( waveFactor * 100.0 + sample_dist ) * sampleDistance * 4.0;\n\n \tvec2 sampleSize = vec2( 1.0 / screenWidth, 1.0 / screenHeight ) * vec2( f );\n\n \tadd += tmp = texture2D( tDiffuse, uv + vec2( 0.111964, 0.993712 ) * sampleSize );\n \tif( tmp.b < color.b ) color = tmp;\n\n \tadd += tmp = texture2D( tDiffuse, uv + vec2( 0.846724, 0.532032 ) * sampleSize );\n \tif( tmp.b < color.b ) color = tmp;\n\n \tadd += tmp = texture2D( tDiffuse, uv + vec2( 0.943883, -0.330279 ) * sampleSize );\n \tif( tmp.b < color.b ) color = tmp;\n\n \tadd += tmp = texture2D( tDiffuse, uv + vec2( 0.330279, -0.943883 ) * sampleSize );\n \tif( tmp.b < color.b ) color = tmp;\n\n \tadd += tmp = texture2D( tDiffuse, uv + vec2( -0.532032, -0.846724 ) * sampleSize );\n \tif( tmp.b < color.b ) color = tmp;\n\n \tadd += tmp = texture2D( tDiffuse, uv + vec2( -0.993712, -0.111964 ) * sampleSize );\n \tif( tmp.b < color.b ) color = tmp;\n\n \tadd += tmp = texture2D( tDiffuse, uv + vec2( -0.707107, 0.707107 ) * sampleSize );\n \tif( tmp.b < color.b ) color = tmp;\n\n \tcolor = color * vec4( 2.0 ) - ( add / vec4( 8.0 ) );\n \tcolor = color + ( add / vec4( 8.0 ) - color ) * ( vec4( 1.0 ) - vec4( sample_dist * 0.5 ) );\n\n \tgl_FragColor = vec4( color.rgb * color.rgb * vec3( 0.95 ) + color.rgb, 1.0 );\n\n }\n `\n )\n};\nexport {\n FocusShader\n};\n//# sourceMappingURL=FocusShader.js.map\n","import { Vector2 } from \"three\";\nconst FreiChenShader = {\n uniforms: {\n tDiffuse: { value: null },\n aspect: { value: /* @__PURE__ */ new Vector2(512, 512) }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D tDiffuse;\n varying vec2 vUv;\n\n uniform vec2 aspect;\n\n vec2 texel = vec2(1.0 / aspect.x, 1.0 / aspect.y);\n\n mat3 G[9];\n\n // hard coded matrix values!!!! as suggested in https://github.com/neilmendoza/ofxPostProcessing/blob/master/src/EdgePass.cpp#L45\n\n const mat3 g0 = mat3( 0.3535533845424652, 0, -0.3535533845424652, 0.5, 0, -0.5, 0.3535533845424652, 0, -0.3535533845424652 );\n const mat3 g1 = mat3( 0.3535533845424652, 0.5, 0.3535533845424652, 0, 0, 0, -0.3535533845424652, -0.5, -0.3535533845424652 );\n const mat3 g2 = mat3( 0, 0.3535533845424652, -0.5, -0.3535533845424652, 0, 0.3535533845424652, 0.5, -0.3535533845424652, 0 );\n const mat3 g3 = mat3( 0.5, -0.3535533845424652, 0, -0.3535533845424652, 0, 0.3535533845424652, 0, 0.3535533845424652, -0.5 );\n const mat3 g4 = mat3( 0, -0.5, 0, 0.5, 0, 0.5, 0, -0.5, 0 );\n const mat3 g5 = mat3( -0.5, 0, 0.5, 0, 0, 0, 0.5, 0, -0.5 );\n const mat3 g6 = mat3( 0.1666666716337204, -0.3333333432674408, 0.1666666716337204, -0.3333333432674408, 0.6666666865348816, -0.3333333432674408, 0.1666666716337204, -0.3333333432674408, 0.1666666716337204 );\n const mat3 g7 = mat3( -0.3333333432674408, 0.1666666716337204, -0.3333333432674408, 0.1666666716337204, 0.6666666865348816, 0.1666666716337204, -0.3333333432674408, 0.1666666716337204, -0.3333333432674408 );\n const mat3 g8 = mat3( 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408, 0.3333333432674408 );\n\n void main(void)\n {\n\n \tG[0] = g0,\n \tG[1] = g1,\n \tG[2] = g2,\n \tG[3] = g3,\n \tG[4] = g4,\n \tG[5] = g5,\n \tG[6] = g6,\n \tG[7] = g7,\n \tG[8] = g8;\n\n \tmat3 I;\n \tfloat cnv[9];\n \tvec3 sample;\n\n /* fetch the 3x3 neighbourhood and use the RGB vectors length as intensity value */\n \tfor (float i=0.0; i<3.0; i++) {\n \t\tfor (float j=0.0; j<3.0; j++) {\n \t\t\tsample = texture2D(tDiffuse, vUv + texel * vec2(i-1.0,j-1.0) ).rgb;\n \t\t\tI[int(i)][int(j)] = length(sample);\n \t\t}\n \t}\n\n /* calculate the convolution values for all the masks */\n \tfor (int i=0; i<9; i++) {\n \t\tfloat dp3 = dot(G[i][0], I[0]) + dot(G[i][1], I[1]) + dot(G[i][2], I[2]);\n \t\tcnv[i] = dp3 * dp3;\n \t}\n\n \tfloat M = (cnv[0] + cnv[1]) + (cnv[2] + cnv[3]);\n \tfloat S = (cnv[4] + cnv[5]) + (cnv[6] + cnv[7]) + (cnv[8] + M);\n\n \tgl_FragColor = vec4(vec3(sqrt(M/S)), 1.0);\n }\n `\n )\n};\nexport {\n FreiChenShader\n};\n//# sourceMappingURL=FreiChenShader.js.map\n","const FresnelShader = {\n uniforms: {\n mRefractionRatio: { value: 1.02 },\n mFresnelBias: { value: 0.1 },\n mFresnelPower: { value: 2 },\n mFresnelScale: { value: 1 },\n tCube: { value: null }\n },\n vertexShader: (\n /* glsl */\n `\n uniform float mRefractionRatio;\n uniform float mFresnelBias;\n uniform float mFresnelScale;\n uniform float mFresnelPower;\n\n varying vec3 vReflect;\n varying vec3 vRefract[3];\n varying float vReflectionFactor;\n\n void main() {\n\n \tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n \tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n\n \tvec3 worldNormal = normalize( mat3( modelMatrix[0].xyz, modelMatrix[1].xyz, modelMatrix[2].xyz ) * normal );\n\n \tvec3 I = worldPosition.xyz - cameraPosition;\n\n \tvReflect = reflect( I, worldNormal );\n \tvRefract[0] = refract( normalize( I ), worldNormal, mRefractionRatio );\n \tvRefract[1] = refract( normalize( I ), worldNormal, mRefractionRatio * 0.99 );\n \tvRefract[2] = refract( normalize( I ), worldNormal, mRefractionRatio * 0.98 );\n \tvReflectionFactor = mFresnelBias + mFresnelScale * pow( 1.0 + dot( normalize( I ), worldNormal ), mFresnelPower );\n\n \tgl_Position = projectionMatrix * mvPosition;\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform samplerCube tCube;\n\n varying vec3 vReflect;\n varying vec3 vRefract[3];\n varying float vReflectionFactor;\n\n void main() {\n\n \tvec4 reflectedColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );\n \tvec4 refractedColor = vec4( 1.0 );\n\n \trefractedColor.r = textureCube( tCube, vec3( -vRefract[0].x, vRefract[0].yz ) ).r;\n \trefractedColor.g = textureCube( tCube, vec3( -vRefract[1].x, vRefract[1].yz ) ).g;\n \trefractedColor.b = textureCube( tCube, vec3( -vRefract[2].x, vRefract[2].yz ) ).b;\n\n \tgl_FragColor = mix( refractedColor, reflectedColor, clamp( vReflectionFactor, 0.0, 1.0 ) );\n\n }\n `\n )\n};\nexport {\n FresnelShader\n};\n//# sourceMappingURL=FresnelShader.js.map\n","const GammaCorrectionShader = {\n uniforms: {\n tDiffuse: { value: null }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D tDiffuse;\n\n varying vec2 vUv;\n\n void main() {\n\n \tvec4 tex = texture2D( tDiffuse, vUv );\n\n \t#ifdef LinearTosRGB\n \t\tgl_FragColor = LinearTosRGB( tex );\n \t#else\n \t\tgl_FragColor = sRGBTransferOETF( tex );\n \t#endif\n\n }\n `\n )\n};\nexport {\n GammaCorrectionShader\n};\n//# sourceMappingURL=GammaCorrectionShader.js.map\n","import { Vector3, Color } from \"three\";\nconst GodRaysDepthMaskShader = {\n uniforms: {\n tInput: {\n value: null\n }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n uniform sampler2D tInput;\n\n void main() {\n\n \tgl_FragColor = vec4( 1.0 ) - texture2D( tInput, vUv );\n\n }\n `\n )\n};\nconst GodRaysGenerateShader = {\n uniforms: {\n tInput: {\n value: null\n },\n fStepSize: {\n value: 1\n },\n vSunPositionScreenSpace: {\n value: /* @__PURE__ */ new Vector3()\n }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n #define TAPS_PER_PASS 6.0\n\n varying vec2 vUv;\n\n uniform sampler2D tInput;\n\n uniform vec3 vSunPositionScreenSpace;\n uniform float fStepSize; // filter step size\n\n void main() {\n\n // delta from current pixel to \"sun\" position\n\n \tvec2 delta = vSunPositionScreenSpace.xy - vUv;\n \tfloat dist = length( delta );\n\n // Step vector (uv space)\n\n \tvec2 stepv = fStepSize * delta / dist;\n\n // Number of iterations between pixel and sun\n\n \tfloat iters = dist/fStepSize;\n\n \tvec2 uv = vUv.xy;\n \tfloat col = 0.0;\n\n // This breaks ANGLE in Chrome 22\n //\t- see http://code.google.com/p/chromium/issues/detail?id=153105\n\n /*\n\t\t// Unrolling didnt do much on my hardware (ATI Mobility Radeon 3450),\n\t\t// so ive just left the loop\n\n\t\tfor ( float i = 0.0; i < TAPS_PER_PASS; i += 1.0 ) {\n\n\t\t// Accumulate samples, making sure we dont walk past the light source.\n\n\t\t// The check for uv.y < 1 would not be necessary with \"border\" UV wrap\n\t\t// mode, with a black border color. I dont think this is currently\n\t\t// exposed by three.js. As a result there might be artifacts when the\n\t\t// sun is to the left, right or bottom of screen as these cases are\n\t\t// not specifically handled.\n\n\t\tcol += ( i <= iters && uv.y < 1.0 ? texture2D( tInput, uv ).r : 0.0 );\n\t\tuv += stepv;\n\n\t\t}\n\t\t*/\n\n // Unrolling loop manually makes it work in ANGLE\n\n \tfloat f = min( 1.0, max( vSunPositionScreenSpace.z / 1000.0, 0.0 ) ); // used to fade out godrays\n\n \tif ( 0.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n \tuv += stepv;\n\n \tif ( 1.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n \tuv += stepv;\n\n \tif ( 2.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n \tuv += stepv;\n\n \tif ( 3.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n \tuv += stepv;\n\n \tif ( 4.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n \tuv += stepv;\n\n \tif ( 5.0 <= iters && uv.y < 1.0 ) col += texture2D( tInput, uv ).r * f;\n \tuv += stepv;\n\n // Should technically be dividing by iters but TAPS_PER_PASS smooths out\n // objectionable artifacts, in particular near the sun position. The side\n // effect is that the result is darker than it should be around the sun, as\n // TAPS_PER_PASS is greater than the number of samples actually accumulated.\n // When the result is inverted (in the shader godrays_combine this produces\n // a slight bright spot at the position of the sun, even when it is occluded.\n\n \tgl_FragColor = vec4( col/TAPS_PER_PASS );\n \tgl_FragColor.a = 1.0;\n\n }\n `\n )\n};\nconst GodRaysCombineShader = {\n uniforms: {\n tColors: {\n value: null\n },\n tGodRays: {\n value: null\n },\n fGodRayIntensity: {\n value: 0.69\n }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n uniform sampler2D tColors;\n uniform sampler2D tGodRays;\n\n uniform float fGodRayIntensity;\n\n void main() {\n\n // Since THREE.MeshDepthMaterial renders foreground objects white and background\n // objects black, the god-rays will be white streaks. Therefore value is inverted\n // before being combined with tColors\n\n \tgl_FragColor = texture2D( tColors, vUv ) + fGodRayIntensity * vec4( 1.0 - texture2D( tGodRays, vUv ).r );\n \tgl_FragColor.a = 1.0;\n\n }\n `\n )\n};\nconst GodRaysFakeSunShader = {\n uniforms: {\n vSunPositionScreenSpace: {\n value: /* @__PURE__ */ new Vector3()\n },\n fAspect: {\n value: 1\n },\n sunColor: {\n value: /* @__PURE__ */ new Color(16772608)\n },\n bgColor: {\n value: /* @__PURE__ */ new Color(0)\n }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n uniform vec3 vSunPositionScreenSpace;\n uniform float fAspect;\n\n uniform vec3 sunColor;\n uniform vec3 bgColor;\n\n void main() {\n\n \tvec2 diff = vUv - vSunPositionScreenSpace.xy;\n\n // Correct for aspect ratio\n\n \tdiff.x *= fAspect;\n\n \tfloat prop = clamp( length( diff ) / 0.5, 0.0, 1.0 );\n \tprop = 0.35 * pow( 1.0 - prop, 3.0 );\n\n \tgl_FragColor.xyz = ( vSunPositionScreenSpace.z > 0.0 ) ? mix( sunColor, bgColor, 1.0 - prop ) : bgColor;\n \tgl_FragColor.w = 1.0;\n\n }\n `\n )\n};\nexport {\n GodRaysCombineShader,\n GodRaysDepthMaskShader,\n GodRaysFakeSunShader,\n GodRaysGenerateShader\n};\n//# sourceMappingURL=GodRaysShader.js.map\n","const HorizontalBlurShader = {\n uniforms: {\n tDiffuse: { value: null },\n h: { value: 1 / 512 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D tDiffuse;\n uniform float h;\n\n varying vec2 vUv;\n\n void main() {\n\n \tvec4 sum = vec4( 0.0 );\n\n \tsum += texture2D( tDiffuse, vec2( vUv.x - 4.0 * h, vUv.y ) ) * 0.051;\n \tsum += texture2D( tDiffuse, vec2( vUv.x - 3.0 * h, vUv.y ) ) * 0.0918;\n \tsum += texture2D( tDiffuse, vec2( vUv.x - 2.0 * h, vUv.y ) ) * 0.12245;\n \tsum += texture2D( tDiffuse, vec2( vUv.x - 1.0 * h, vUv.y ) ) * 0.1531;\n \tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\n \tsum += texture2D( tDiffuse, vec2( vUv.x + 1.0 * h, vUv.y ) ) * 0.1531;\n \tsum += texture2D( tDiffuse, vec2( vUv.x + 2.0 * h, vUv.y ) ) * 0.12245;\n \tsum += texture2D( tDiffuse, vec2( vUv.x + 3.0 * h, vUv.y ) ) * 0.0918;\n \tsum += texture2D( tDiffuse, vec2( vUv.x + 4.0 * h, vUv.y ) ) * 0.051;\n\n \tgl_FragColor = sum;\n\n }\n `\n )\n};\nexport {\n HorizontalBlurShader\n};\n//# sourceMappingURL=HorizontalBlurShader.js.map\n","const HorizontalTiltShiftShader = {\n uniforms: {\n tDiffuse: { value: null },\n h: { value: 1 / 512 },\n r: { value: 0.35 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D tDiffuse;\n uniform float h;\n uniform float r;\n\n varying vec2 vUv;\n\n void main() {\n\n \tvec4 sum = vec4( 0.0 );\n\n \tfloat hh = h * abs( r - vUv.y );\n\n \tsum += texture2D( tDiffuse, vec2( vUv.x - 4.0 * hh, vUv.y ) ) * 0.051;\n \tsum += texture2D( tDiffuse, vec2( vUv.x - 3.0 * hh, vUv.y ) ) * 0.0918;\n \tsum += texture2D( tDiffuse, vec2( vUv.x - 2.0 * hh, vUv.y ) ) * 0.12245;\n \tsum += texture2D( tDiffuse, vec2( vUv.x - 1.0 * hh, vUv.y ) ) * 0.1531;\n \tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\n \tsum += texture2D( tDiffuse, vec2( vUv.x + 1.0 * hh, vUv.y ) ) * 0.1531;\n \tsum += texture2D( tDiffuse, vec2( vUv.x + 2.0 * hh, vUv.y ) ) * 0.12245;\n \tsum += texture2D( tDiffuse, vec2( vUv.x + 3.0 * hh, vUv.y ) ) * 0.0918;\n \tsum += texture2D( tDiffuse, vec2( vUv.x + 4.0 * hh, vUv.y ) ) * 0.051;\n\n \tgl_FragColor = sum;\n\n }\n `\n )\n};\nexport {\n HorizontalTiltShiftShader\n};\n//# sourceMappingURL=HorizontalTiltShiftShader.js.map\n","const HueSaturationShader = {\n uniforms: {\n tDiffuse: { value: null },\n hue: { value: 0 },\n saturation: { value: 0 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D tDiffuse;\n uniform float hue;\n uniform float saturation;\n\n varying vec2 vUv;\n\n void main() {\n\n \tgl_FragColor = texture2D( tDiffuse, vUv );\n\n // hue\n \tfloat angle = hue * 3.14159265;\n \tfloat s = sin(angle), c = cos(angle);\n \tvec3 weights = (vec3(2.0 * c, -sqrt(3.0) * s - c, sqrt(3.0) * s - c) + 1.0) / 3.0;\n \tfloat len = length(gl_FragColor.rgb);\n \tgl_FragColor.rgb = vec3(\n \t\tdot(gl_FragColor.rgb, weights.xyz),\n \t\tdot(gl_FragColor.rgb, weights.zxy),\n \t\tdot(gl_FragColor.rgb, weights.yzx)\n \t);\n\n // saturation\n \tfloat average = (gl_FragColor.r + gl_FragColor.g + gl_FragColor.b) / 3.0;\n \tif (saturation > 0.0) {\n \t\tgl_FragColor.rgb += (average - gl_FragColor.rgb) * (1.0 - 1.0 / (1.001 - saturation));\n \t} else {\n \t\tgl_FragColor.rgb += (average - gl_FragColor.rgb) * (-saturation);\n \t}\n\n }\n `\n )\n};\nexport {\n HueSaturationShader\n};\n//# sourceMappingURL=HueSaturationShader.js.map\n","const KaleidoShader = {\n uniforms: {\n tDiffuse: { value: null },\n sides: { value: 6 },\n angle: { value: 0 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D tDiffuse;\n uniform float sides;\n uniform float angle;\n\n varying vec2 vUv;\n\n void main() {\n\n \tvec2 p = vUv - 0.5;\n \tfloat r = length(p);\n \tfloat a = atan(p.y, p.x) + angle;\n \tfloat tau = 2. * 3.1416 ;\n \ta = mod(a, tau/sides);\n \ta = abs(a - tau/sides/2.) ;\n \tp = r * vec2(cos(a), sin(a));\n \tvec4 color = texture2D(tDiffuse, p + 0.5);\n \tgl_FragColor = color;\n\n }\n `\n )\n};\nexport {\n KaleidoShader\n};\n//# sourceMappingURL=KaleidoShader.js.map\n","const MirrorShader = {\n uniforms: {\n tDiffuse: { value: null },\n side: { value: 1 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D tDiffuse;\n uniform int side;\n\n varying vec2 vUv;\n\n void main() {\n\n \tvec2 p = vUv;\n \tif (side == 0){\n \t\tif (p.x > 0.5) p.x = 1.0 - p.x;\n \t}else if (side == 1){\n \t\tif (p.x < 0.5) p.x = 1.0 - p.x;\n \t}else if (side == 2){\n \t\tif (p.y < 0.5) p.y = 1.0 - p.y;\n \t}else if (side == 3){\n \t\tif (p.y > 0.5) p.y = 1.0 - p.y;\n \t} \n \tvec4 color = texture2D(tDiffuse, p);\n \tgl_FragColor = color;\n\n }\n `\n )\n};\nexport {\n MirrorShader\n};\n//# sourceMappingURL=MirrorShader.js.map\n","import { Vector2 } from \"three\";\nconst NormalMapShader = {\n uniforms: {\n heightMap: { value: null },\n resolution: { value: /* @__PURE__ */ new Vector2(512, 512) },\n scale: { value: /* @__PURE__ */ new Vector2(1, 1) },\n height: { value: 0.05 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform float height;\n uniform vec2 resolution;\n uniform sampler2D heightMap;\n\n varying vec2 vUv;\n\n void main() {\n\n \tfloat val = texture2D( heightMap, vUv ).x;\n\n \tfloat valU = texture2D( heightMap, vUv + vec2( 1.0 / resolution.x, 0.0 ) ).x;\n \tfloat valV = texture2D( heightMap, vUv + vec2( 0.0, 1.0 / resolution.y ) ).x;\n\n \tgl_FragColor = vec4( ( 0.5 * normalize( vec3( val - valU, val - valV, height ) ) + 0.5 ), 1.0 );\n\n }\n `\n )\n};\nexport {\n NormalMapShader\n};\n//# sourceMappingURL=NormalMapShader.js.map\n","const ParallaxShader = {\n // Ordered from fastest to best quality.\n modes: {\n none: \"NO_PARALLAX\",\n basic: \"USE_BASIC_PARALLAX\",\n steep: \"USE_STEEP_PARALLAX\",\n occlusion: \"USE_OCLUSION_PARALLAX\",\n // a.k.a. POM\n relief: \"USE_RELIEF_PARALLAX\"\n },\n uniforms: {\n bumpMap: { value: null },\n map: { value: null },\n parallaxScale: { value: null },\n parallaxMinLayers: { value: null },\n parallaxMaxLayers: { value: null }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n varying vec3 vViewPosition;\n varying vec3 vNormal;\n\n void main() {\n\n \tvUv = uv;\n \tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n \tvViewPosition = -mvPosition.xyz;\n \tvNormal = normalize( normalMatrix * normal );\n \tgl_Position = projectionMatrix * mvPosition;\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D bumpMap;\n uniform sampler2D map;\n\n uniform float parallaxScale;\n uniform float parallaxMinLayers;\n uniform float parallaxMaxLayers;\n\n varying vec2 vUv;\n varying vec3 vViewPosition;\n varying vec3 vNormal;\n\n #ifdef USE_BASIC_PARALLAX\n\n \tvec2 parallaxMap( in vec3 V ) {\n\n \t\tfloat initialHeight = texture2D( bumpMap, vUv ).r;\n\n // No Offset Limitting: messy, floating output at grazing angles.\n //vec2 texCoordOffset = parallaxScale * V.xy / V.z * initialHeight;\n\n // Offset Limiting\n \t\tvec2 texCoordOffset = parallaxScale * V.xy * initialHeight;\n \t\treturn vUv - texCoordOffset;\n\n \t}\n\n #else\n\n \tvec2 parallaxMap( in vec3 V ) {\n\n // Determine number of layers from angle between V and N\n \t\tfloat numLayers = mix( parallaxMaxLayers, parallaxMinLayers, abs( dot( vec3( 0.0, 0.0, 1.0 ), V ) ) );\n\n \t\tfloat layerHeight = 1.0 / numLayers;\n \t\tfloat currentLayerHeight = 0.0;\n // Shift of texture coordinates for each iteration\n \t\tvec2 dtex = parallaxScale * V.xy / V.z / numLayers;\n\n \t\tvec2 currentTextureCoords = vUv;\n\n \t\tfloat heightFromTexture = texture2D( bumpMap, currentTextureCoords ).r;\n\n // while ( heightFromTexture > currentLayerHeight )\n // Infinite loops are not well supported. Do a \"large\" finite\n // loop, but not too large, as it slows down some compilers.\n \t\tfor ( int i = 0; i < 30; i += 1 ) {\n \t\t\tif ( heightFromTexture <= currentLayerHeight ) {\n \t\t\t\tbreak;\n \t\t\t}\n \t\t\tcurrentLayerHeight += layerHeight;\n // Shift texture coordinates along vector V\n \t\t\tcurrentTextureCoords -= dtex;\n \t\t\theightFromTexture = texture2D( bumpMap, currentTextureCoords ).r;\n \t\t}\n\n \t\t#ifdef USE_STEEP_PARALLAX\n\n \t\t\treturn currentTextureCoords;\n\n \t\t#elif defined( USE_RELIEF_PARALLAX )\n\n \t\t\tvec2 deltaTexCoord = dtex / 2.0;\n \t\t\tfloat deltaHeight = layerHeight / 2.0;\n\n // Return to the mid point of previous layer\n \t\t\tcurrentTextureCoords += deltaTexCoord;\n \t\t\tcurrentLayerHeight -= deltaHeight;\n\n // Binary search to increase precision of Steep Parallax Mapping\n \t\t\tconst int numSearches = 5;\n \t\t\tfor ( int i = 0; i < numSearches; i += 1 ) {\n\n \t\t\t\tdeltaTexCoord /= 2.0;\n \t\t\t\tdeltaHeight /= 2.0;\n \t\t\t\theightFromTexture = texture2D( bumpMap, currentTextureCoords ).r;\n // Shift along or against vector V\n \t\t\t\tif( heightFromTexture > currentLayerHeight ) { // Below the surface\n\n \t\t\t\t\tcurrentTextureCoords -= deltaTexCoord;\n \t\t\t\t\tcurrentLayerHeight += deltaHeight;\n\n \t\t\t\t} else { // above the surface\n\n \t\t\t\t\tcurrentTextureCoords += deltaTexCoord;\n \t\t\t\t\tcurrentLayerHeight -= deltaHeight;\n\n \t\t\t\t}\n\n \t\t\t}\n \t\t\treturn currentTextureCoords;\n\n \t\t#elif defined( USE_OCLUSION_PARALLAX )\n\n \t\t\tvec2 prevTCoords = currentTextureCoords + dtex;\n\n // Heights for linear interpolation\n \t\t\tfloat nextH = heightFromTexture - currentLayerHeight;\n \t\t\tfloat prevH = texture2D( bumpMap, prevTCoords ).r - currentLayerHeight + layerHeight;\n\n // Proportions for linear interpolation\n \t\t\tfloat weight = nextH / ( nextH - prevH );\n\n // Interpolation of texture coordinates\n \t\t\treturn prevTCoords * weight + currentTextureCoords * ( 1.0 - weight );\n\n \t\t#else // NO_PARALLAX\n\n \t\t\treturn vUv;\n\n \t\t#endif\n\n \t}\n #endif\n\n vec2 perturbUv( vec3 surfPosition, vec3 surfNormal, vec3 viewPosition ) {\n\n \tvec2 texDx = dFdx( vUv );\n \tvec2 texDy = dFdy( vUv );\n\n \tvec3 vSigmaX = dFdx( surfPosition );\n \tvec3 vSigmaY = dFdy( surfPosition );\n \tvec3 vR1 = cross( vSigmaY, surfNormal );\n \tvec3 vR2 = cross( surfNormal, vSigmaX );\n \tfloat fDet = dot( vSigmaX, vR1 );\n\n \tvec2 vProjVscr = ( 1.0 / fDet ) * vec2( dot( vR1, viewPosition ), dot( vR2, viewPosition ) );\n \tvec3 vProjVtex;\n \tvProjVtex.xy = texDx * vProjVscr.x + texDy * vProjVscr.y;\n \tvProjVtex.z = dot( surfNormal, viewPosition );\n\n \treturn parallaxMap( vProjVtex );\n }\n\n void main() {\n\n \tvec2 mapUv = perturbUv( -vViewPosition, normalize( vNormal ), normalize( vViewPosition ) );\n \tgl_FragColor = texture2D( map, mapUv );\n\n }\n `\n )\n};\nexport {\n ParallaxShader\n};\n//# sourceMappingURL=ParallaxShader.js.map\n","const PixelShader = {\n uniforms: {\n tDiffuse: { value: null },\n resolution: { value: null },\n pixelSize: { value: 1 }\n },\n vertexShader: (\n /* glsl */\n `\n varying highp vec2 vUv;\n\n void main() {\n\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D tDiffuse;\n uniform float pixelSize;\n uniform vec2 resolution;\n\n varying highp vec2 vUv;\n\n void main(){\n\n vec2 dxy = pixelSize / resolution;\n vec2 coord = dxy * floor( vUv / dxy );\n gl_FragColor = texture2D(tDiffuse, coord);\n\n }\n `\n )\n};\nexport {\n PixelShader\n};\n//# sourceMappingURL=PixelShader.js.map\n","const RGBShiftShader = {\n uniforms: {\n tDiffuse: { value: null },\n amount: { value: 5e-3 },\n angle: { value: 0 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D tDiffuse;\n uniform float amount;\n uniform float angle;\n\n varying vec2 vUv;\n\n void main() {\n\n \tvec2 offset = amount * vec2( cos(angle), sin(angle));\n \tvec4 cr = texture2D(tDiffuse, vUv + offset);\n \tvec4 cga = texture2D(tDiffuse, vUv);\n \tvec4 cb = texture2D(tDiffuse, vUv - offset);\n \tgl_FragColor = vec4(cr.r, cga.g, cb.b, cga.a);\n\n }\n `\n )\n};\nexport {\n RGBShiftShader\n};\n//# sourceMappingURL=RGBShiftShader.js.map\n","const SepiaShader = {\n uniforms: {\n tDiffuse: { value: null },\n amount: { value: 1 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform float amount;\n\n uniform sampler2D tDiffuse;\n\n varying vec2 vUv;\n\n void main() {\n\n \tvec4 color = texture2D( tDiffuse, vUv );\n \tvec3 c = color.rgb;\n\n \tcolor.r = dot( c, vec3( 1.0 - 0.607 * amount, 0.769 * amount, 0.189 * amount ) );\n \tcolor.g = dot( c, vec3( 0.349 * amount, 1.0 - 0.314 * amount, 0.168 * amount ) );\n \tcolor.b = dot( c, vec3( 0.272 * amount, 0.534 * amount, 1.0 - 0.869 * amount ) );\n\n \tgl_FragColor = vec4( min( vec3( 1.0 ), color.rgb ), color.a );\n\n }\n `\n )\n};\nexport {\n SepiaShader\n};\n//# sourceMappingURL=SepiaShader.js.map\n","import { Vector2 } from \"three\";\nconst SobelOperatorShader = {\n uniforms: {\n tDiffuse: { value: null },\n resolution: { value: /* @__PURE__ */ new Vector2() }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D tDiffuse;\n uniform vec2 resolution;\n varying vec2 vUv;\n\n void main() {\n\n \tvec2 texel = vec2( 1.0 / resolution.x, 1.0 / resolution.y );\n\n // kernel definition (in glsl matrices are filled in column-major order)\n\n \tconst mat3 Gx = mat3( -1, -2, -1, 0, 0, 0, 1, 2, 1 ); // x direction kernel\n \tconst mat3 Gy = mat3( -1, 0, 1, -2, 0, 2, -1, 0, 1 ); // y direction kernel\n\n // fetch the 3x3 neighbourhood of a fragment\n\n // first column\n\n \tfloat tx0y0 = texture2D( tDiffuse, vUv + texel * vec2( -1, -1 ) ).r;\n \tfloat tx0y1 = texture2D( tDiffuse, vUv + texel * vec2( -1, 0 ) ).r;\n \tfloat tx0y2 = texture2D( tDiffuse, vUv + texel * vec2( -1, 1 ) ).r;\n\n // second column\n\n \tfloat tx1y0 = texture2D( tDiffuse, vUv + texel * vec2( 0, -1 ) ).r;\n \tfloat tx1y1 = texture2D( tDiffuse, vUv + texel * vec2( 0, 0 ) ).r;\n \tfloat tx1y2 = texture2D( tDiffuse, vUv + texel * vec2( 0, 1 ) ).r;\n\n // third column\n\n \tfloat tx2y0 = texture2D( tDiffuse, vUv + texel * vec2( 1, -1 ) ).r;\n \tfloat tx2y1 = texture2D( tDiffuse, vUv + texel * vec2( 1, 0 ) ).r;\n \tfloat tx2y2 = texture2D( tDiffuse, vUv + texel * vec2( 1, 1 ) ).r;\n\n // gradient value in x direction\n\n \tfloat valueGx = Gx[0][0] * tx0y0 + Gx[1][0] * tx1y0 + Gx[2][0] * tx2y0 + \n \t\tGx[0][1] * tx0y1 + Gx[1][1] * tx1y1 + Gx[2][1] * tx2y1 + \n \t\tGx[0][2] * tx0y2 + Gx[1][2] * tx1y2 + Gx[2][2] * tx2y2; \n\n // gradient value in y direction\n\n \tfloat valueGy = Gy[0][0] * tx0y0 + Gy[1][0] * tx1y0 + Gy[2][0] * tx2y0 + \n \t\tGy[0][1] * tx0y1 + Gy[1][1] * tx1y1 + Gy[2][1] * tx2y1 + \n \t\tGy[0][2] * tx0y2 + Gy[1][2] * tx1y2 + Gy[2][2] * tx2y2; \n\n // magnitute of the total gradient\n\n \tfloat G = sqrt( ( valueGx * valueGx ) + ( valueGy * valueGy ) );\n\n \tgl_FragColor = vec4( vec3( G ), 1 );\n\n }\n `\n )\n};\nexport {\n SobelOperatorShader\n};\n//# sourceMappingURL=SobelOperatorShader.js.map\n","import { ShaderChunk, UniformsUtils, ShaderLib, Color } from \"three\";\nlet _SubsurfaceScatteringShader;\nfunction get() {\n if (_SubsurfaceScatteringShader)\n return _SubsurfaceScatteringShader;\n const meshphong_frag_head = ShaderChunk[\"meshphong_frag\"].slice(\n 0,\n ShaderChunk[\"meshphong_frag\"].indexOf(\"void main() {\")\n );\n const meshphong_frag_body = ShaderChunk[\"meshphong_frag\"].slice(\n ShaderChunk[\"meshphong_frag\"].indexOf(\"void main() {\")\n );\n _SubsurfaceScatteringShader = {\n uniforms: UniformsUtils.merge([\n ShaderLib[\"phong\"].uniforms,\n {\n thicknessMap: { value: null },\n thicknessColor: { value: new Color(16777215) },\n thicknessDistortion: { value: 0.1 },\n thicknessAmbient: { value: 0 },\n thicknessAttenuation: { value: 0.1 },\n thicknessPower: { value: 2 },\n thicknessScale: { value: 10 }\n }\n ]),\n vertexShader: (\n /* glsl */\n `\n #define USE_UV\n ${ShaderChunk[\"meshphong_vert\"]}\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n #define USE_UV',\n #define SUBSURFACE',\n\n ${meshphong_frag_head}\n\n uniform sampler2D thicknessMap;\n uniform float thicknessPower;\n uniform float thicknessScale;\n uniform float thicknessDistortion;\n uniform float thicknessAmbient;\n uniform float thicknessAttenuation;\n uniform vec3 thicknessColor;\n\n void RE_Direct_Scattering(const in IncidentLight directLight, const in vec2 uv, const in GeometricContext geometry, inout ReflectedLight reflectedLight) {\n \tvec3 thickness = thicknessColor * texture2D(thicknessMap, uv).r;\n \tvec3 scatteringHalf = normalize(directLight.direction + (geometry.normal * thicknessDistortion));\n \tfloat scatteringDot = pow(saturate(dot(geometry.viewDir, -scatteringHalf)), thicknessPower) * thicknessScale;\n \tvec3 scatteringIllu = (scatteringDot + thicknessAmbient) * thickness;\n \treflectedLight.directDiffuse += scatteringIllu * thicknessAttenuation * directLight.color;\n }\n\n ${meshphong_frag_body.replace(\n \"#include <lights_fragment_begin>\",\n ShaderChunk[\"lights_fragment_begin\"].replace(\n /RE_Direct\\( directLight, geometry, material, reflectedLight \\);/g,\n /* glsl */\n `\n RE_Direct( directLight, geometry, material, reflectedLight );\n\n #if defined( SUBSURFACE ) && defined( USE_UV )\n RE_Direct_Scattering(directLight, vUv, geometry, reflectedLight);\n #endif\n `\n )\n )}\n `\n )\n };\n return _SubsurfaceScatteringShader;\n}\nconst SubsurfaceScatteringShader = {\n get uniforms() {\n return get().uniforms;\n },\n set uniforms(value) {\n get().uniforms = value;\n },\n get vertexShader() {\n return get().vertexShader;\n },\n set vertexShader(value) {\n get().vertexShader = value;\n },\n get fragmentShader() {\n return get().vertexShader;\n },\n set fragmentShader(value) {\n get().vertexShader = value;\n }\n};\nexport {\n SubsurfaceScatteringShader\n};\n//# sourceMappingURL=SubsurfaceScatteringShader.js.map\n","const TechnicolorShader = {\n uniforms: {\n tDiffuse: { value: null }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D tDiffuse;\n varying vec2 vUv;\n\n void main() {\n\n \tvec4 tex = texture2D( tDiffuse, vec2( vUv.x, vUv.y ) );\n \tvec4 newTex = vec4(tex.r, (tex.g + tex.b) * .5, (tex.g + tex.b) * .5, 1.0);\n\n \tgl_FragColor = newTex;\n\n }\n `\n )\n};\nexport {\n TechnicolorShader\n};\n//# sourceMappingURL=TechnicolorShader.js.map\n","import { Vector3, Color } from \"three\";\nconst ToonShader1 = {\n uniforms: {\n uDirLightPos: { value: /* @__PURE__ */ new Vector3() },\n uDirLightColor: { value: /* @__PURE__ */ new Color(15658734) },\n uAmbientLightColor: { value: /* @__PURE__ */ new Color(328965) },\n uBaseColor: { value: /* @__PURE__ */ new Color(16777215) }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec3 vNormal;\n varying vec3 vRefract;\n\n void main() {\n\n \tvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\n \tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n \tvec3 worldNormal = normalize ( mat3( modelMatrix[0].xyz, modelMatrix[1].xyz, modelMatrix[2].xyz ) * normal );\n\n \tvNormal = normalize( normalMatrix * normal );\n\n \tvec3 I = worldPosition.xyz - cameraPosition;\n \tvRefract = refract( normalize( I ), worldNormal, 1.02 );\n\n \tgl_Position = projectionMatrix * mvPosition;\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform vec3 uBaseColor;\n\n uniform vec3 uDirLightPos;\n uniform vec3 uDirLightColor;\n\n uniform vec3 uAmbientLightColor;\n\n varying vec3 vNormal;\n\n varying vec3 vRefract;\n\n void main() {\n\n \tfloat directionalLightWeighting = max( dot( normalize( vNormal ), uDirLightPos ), 0.0);\n \tvec3 lightWeighting = uAmbientLightColor + uDirLightColor * directionalLightWeighting;\n\n \tfloat intensity = smoothstep( - 0.5, 1.0, pow( length(lightWeighting), 20.0 ) );\n \tintensity += length(lightWeighting) * 0.2;\n\n \tfloat cameraWeighting = dot( normalize( vNormal ), vRefract );\n \tintensity += pow( 1.0 - length( cameraWeighting ), 6.0 );\n \tintensity = intensity * 0.2 + 0.3;\n\n \tif ( intensity < 0.50 ) {\n\n \t\tgl_FragColor = vec4( 2.0 * intensity * uBaseColor, 1.0 );\n\n \t} else {\n\n \t\tgl_FragColor = vec4( 1.0 - 2.0 * ( 1.0 - intensity ) * ( 1.0 - uBaseColor ), 1.0 );\n\n }\n\n }\n `\n )\n};\nconst ToonShader2 = {\n uniforms: {\n uDirLightPos: { value: /* @__PURE__ */ new Vector3() },\n uDirLightColor: { value: /* @__PURE__ */ new Color(15658734) },\n uAmbientLightColor: { value: /* @__PURE__ */ new Color(328965) },\n uBaseColor: { value: /* @__PURE__ */ new Color(15658734) },\n uLineColor1: { value: /* @__PURE__ */ new Color(8421504) },\n uLineColor2: { value: /* @__PURE__ */ new Color(0) },\n uLineColor3: { value: /* @__PURE__ */ new Color(0) },\n uLineColor4: { value: /* @__PURE__ */ new Color(0) }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec3 vNormal;\n\n void main() {\n\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n \tvNormal = normalize( normalMatrix * normal );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform vec3 uBaseColor;\n uniform vec3 uLineColor1;\n uniform vec3 uLineColor2;\n uniform vec3 uLineColor3;\n uniform vec3 uLineColor4;\n\n uniform vec3 uDirLightPos;\n uniform vec3 uDirLightColor;\n\n uniform vec3 uAmbientLightColor;\n\n varying vec3 vNormal;\n\n void main() {\n\n \tfloat camera = max( dot( normalize( vNormal ), vec3( 0.0, 0.0, 1.0 ) ), 0.4);\n \tfloat light = max( dot( normalize( vNormal ), uDirLightPos ), 0.0);\n\n \tgl_FragColor = vec4( uBaseColor, 1.0 );\n\n \tif ( length(uAmbientLightColor + uDirLightColor * light) < 1.00 ) {\n\n \t\tgl_FragColor *= vec4( uLineColor1, 1.0 );\n\n \t}\n\n \tif ( length(uAmbientLightColor + uDirLightColor * camera) < 0.50 ) {\n\n \t\tgl_FragColor *= vec4( uLineColor2, 1.0 );\n\n \t}\n\n }\n `\n )\n};\nconst ToonShaderHatching = {\n uniforms: {\n uDirLightPos: { value: /* @__PURE__ */ new Vector3() },\n uDirLightColor: { value: /* @__PURE__ */ new Color(15658734) },\n uAmbientLightColor: { value: /* @__PURE__ */ new Color(328965) },\n uBaseColor: { value: /* @__PURE__ */ new Color(16777215) },\n uLineColor1: { value: /* @__PURE__ */ new Color(0) },\n uLineColor2: { value: /* @__PURE__ */ new Color(0) },\n uLineColor3: { value: /* @__PURE__ */ new Color(0) },\n uLineColor4: { value: /* @__PURE__ */ new Color(0) }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec3 vNormal;\n\n void main() {\n\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n \tvNormal = normalize( normalMatrix * normal );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform vec3 uBaseColor;\n uniform vec3 uLineColor1;\n uniform vec3 uLineColor2;\n uniform vec3 uLineColor3;\n uniform vec3 uLineColor4;\n\n uniform vec3 uDirLightPos;\n uniform vec3 uDirLightColor;\n\n uniform vec3 uAmbientLightColor;\n\n varying vec3 vNormal;\n\n void main() {\n\n \tfloat directionalLightWeighting = max( dot( normalize(vNormal), uDirLightPos ), 0.0);\n \tvec3 lightWeighting = uAmbientLightColor + uDirLightColor * directionalLightWeighting;\n\n \tgl_FragColor = vec4( uBaseColor, 1.0 );\n\n \tif ( length(lightWeighting) < 1.00 ) {\n\n \t\tif ( mod(gl_FragCoord.x + gl_FragCoord.y, 10.0) == 0.0) {\n\n \t\t\tgl_FragColor = vec4( uLineColor1, 1.0 );\n\n \t\t}\n\n \t}\n\n \tif ( length(lightWeighting) < 0.75 ) {\n\n \t\tif (mod(gl_FragCoord.x - gl_FragCoord.y, 10.0) == 0.0) {\n\n \t\t\tgl_FragColor = vec4( uLineColor2, 1.0 );\n\n \t\t}\n\n \t}\n\n \tif ( length(lightWeighting) < 0.50 ) {\n\n \t\tif (mod(gl_FragCoord.x + gl_FragCoord.y - 5.0, 10.0) == 0.0) {\n\n \t\t\tgl_FragColor = vec4( uLineColor3, 1.0 );\n\n \t\t}\n\n \t}\n\n \tif ( length(lightWeighting) < 0.3465 ) {\n\n \t\tif (mod(gl_FragCoord.x - gl_FragCoord.y - 5.0, 10.0) == 0.0) {\n\n \t\t\tgl_FragColor = vec4( uLineColor4, 1.0 );\n\n \t}\n\n \t}\n\n }\n `\n )\n};\nconst ToonShaderDotted = {\n uniforms: {\n uDirLightPos: { value: /* @__PURE__ */ new Vector3() },\n uDirLightColor: { value: /* @__PURE__ */ new Color(15658734) },\n uAmbientLightColor: { value: /* @__PURE__ */ new Color(328965) },\n uBaseColor: { value: /* @__PURE__ */ new Color(16777215) },\n uLineColor1: { value: /* @__PURE__ */ new Color(0) }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec3 vNormal;\n\n void main() {\n\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n \tvNormal = normalize( normalMatrix * normal );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform vec3 uBaseColor;\n uniform vec3 uLineColor1;\n uniform vec3 uLineColor2;\n uniform vec3 uLineColor3;\n uniform vec3 uLineColor4;\n\n uniform vec3 uDirLightPos;\n uniform vec3 uDirLightColor;\n\n uniform vec3 uAmbientLightColor;\n\n varying vec3 vNormal;\n\n void main() {\n\n float directionalLightWeighting = max( dot( normalize(vNormal), uDirLightPos ), 0.0);\n vec3 lightWeighting = uAmbientLightColor + uDirLightColor * directionalLightWeighting;\n\n gl_FragColor = vec4( uBaseColor, 1.0 );\n\n if ( length(lightWeighting) < 1.00 ) {\n\n \t\tif ( ( mod(gl_FragCoord.x, 4.001) + mod(gl_FragCoord.y, 4.0) ) > 6.00 ) {\n\n \t\t\tgl_FragColor = vec4( uLineColor1, 1.0 );\n\n \t\t}\n\n \t}\n\n \tif ( length(lightWeighting) < 0.50 ) {\n\n \t\tif ( ( mod(gl_FragCoord.x + 2.0, 4.001) + mod(gl_FragCoord.y + 2.0, 4.0) ) > 6.00 ) {\n\n \t\t\tgl_FragColor = vec4( uLineColor1, 1.0 );\n\n \t\t}\n\n \t}\n\n }\n `\n )\n};\nexport {\n ToonShader1,\n ToonShader2,\n ToonShaderDotted,\n ToonShaderHatching\n};\n//# sourceMappingURL=ToonShader.js.map\n","import { Vector2 } from \"three\";\nconst TriangleBlurShader = {\n uniforms: {\n texture: { value: null },\n delta: { value: /* @__PURE__ */ new Vector2(1, 1) }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n #include <common>\n\n #define ITERATIONS 10.0\n\n uniform sampler2D texture;\n uniform vec2 delta;\n\n varying vec2 vUv;\n\n void main() {\n\n \tvec4 color = vec4( 0.0 );\n\n \tfloat total = 0.0;\n\n // randomize the lookup values to hide the fixed number of samples\n\n \tfloat offset = rand( vUv );\n\n \tfor ( float t = -ITERATIONS; t <= ITERATIONS; t ++ ) {\n\n \t\tfloat percent = ( t + offset - 0.5 ) / ITERATIONS;\n \t\tfloat weight = 1.0 - abs( percent );\n\n \t\tcolor += texture2D( texture, vUv + delta * percent ) * weight;\n \t\ttotal += weight;\n\n \t}\n\n \tgl_FragColor = color / total;\n\n }\n `\n )\n};\nexport {\n TriangleBlurShader\n};\n//# sourceMappingURL=TriangleBlurShader.js.map\n","const VerticalBlurShader = {\n uniforms: {\n tDiffuse: { value: null },\n v: { value: 1 / 512 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n vUv = uv;\n gl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n\n uniform sampler2D tDiffuse;\n uniform float v;\n\n varying vec2 vUv;\n\n void main() {\n\n vec4 sum = vec4( 0.0 );\n\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 4.0 * v ) ) * 0.051;\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 3.0 * v ) ) * 0.0918;\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 2.0 * v ) ) * 0.12245;\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 1.0 * v ) ) * 0.1531;\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 1.0 * v ) ) * 0.1531;\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 2.0 * v ) ) * 0.12245;\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 3.0 * v ) ) * 0.0918;\n sum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 4.0 * v ) ) * 0.051;\n\n gl_FragColor = sum;\n\n }\n `\n )\n};\nexport {\n VerticalBlurShader\n};\n//# sourceMappingURL=VerticalBlurShader.js.map\n","const VerticalTiltShiftShader = {\n uniforms: {\n tDiffuse: { value: null },\n v: { value: 1 / 512 },\n r: { value: 0.35 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform sampler2D tDiffuse;\n uniform float v;\n uniform float r;\n\n varying vec2 vUv;\n\n void main() {\n\n \tvec4 sum = vec4( 0.0 );\n\n \tfloat vv = v * abs( r - vUv.y );\n\n \tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 4.0 * vv ) ) * 0.051;\n \tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 3.0 * vv ) ) * 0.0918;\n \tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 2.0 * vv ) ) * 0.12245;\n \tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y - 1.0 * vv ) ) * 0.1531;\n \tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y ) ) * 0.1633;\n \tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 1.0 * vv ) ) * 0.1531;\n \tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 2.0 * vv ) ) * 0.12245;\n \tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 3.0 * vv ) ) * 0.0918;\n \tsum += texture2D( tDiffuse, vec2( vUv.x, vUv.y + 4.0 * vv ) ) * 0.051;\n\n \tgl_FragColor = sum;\n\n }\n `\n )\n};\nexport {\n VerticalTiltShiftShader\n};\n//# sourceMappingURL=VerticalTiltShiftShader.js.map\n","const VignetteShader = {\n uniforms: {\n tDiffuse: { value: null },\n offset: { value: 1 },\n darkness: { value: 1 }\n },\n vertexShader: (\n /* glsl */\n `\n varying vec2 vUv;\n\n void main() {\n\n \tvUv = uv;\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform float offset;\n uniform float darkness;\n\n uniform sampler2D tDiffuse;\n\n varying vec2 vUv;\n\n void main() {\n\n // Eskils vignette\n\n \tvec4 texel = texture2D( tDiffuse, vUv );\n \tvec2 uv = ( vUv - vec2( 0.5 ) ) * vec2( offset );\n \tgl_FragColor = vec4( mix( texel.rgb, vec3( 1.0 - darkness ), dot( uv, uv ) ), texel.a );\n\n /*\n\t\t// alternative version from glfx.js\n\t\t// this one makes more \"dusty\" look (as opposed to \"burned\")\n\n\t\tvec4 color = texture2D( tDiffuse, vUv );\n\t\tfloat dist = distance( vUv, vec2( 0.5 ) );\n\t\tcolor.rgb *= smoothstep( 0.8, offset * 0.799, dist *( darkness + offset ) );\n\t\tgl_FragColor = color;\n\t\t*/\n\n }\n `\n )\n};\nexport {\n VignetteShader\n};\n//# sourceMappingURL=VignetteShader.js.map\n","import { Vector3, Vector2 } from \"three\";\nconst VolumeRenderShader1 = {\n uniforms: {\n u_size: { value: /* @__PURE__ */ new Vector3(1, 1, 1) },\n u_renderstyle: { value: 0 },\n u_renderthreshold: { value: 0.5 },\n u_clim: { value: /* @__PURE__ */ new Vector2(1, 1) },\n u_data: { value: null },\n u_cmdata: { value: null }\n },\n vertexShader: (\n /* glsl */\n `\n\t\tvarying vec4 v_nearpos;\n\t\tvarying vec4 v_farpos;\n\t\tvarying vec3 v_position;\n\n\t\tvoid main() {\n\t\t\t// Prepare transforms to map to \"camera view\". See also:\n\t\t\t// https://threejs.org/docs/#api/renderers/webgl/WebGLProgram\n\t\t\tmat4 viewtransformf = modelViewMatrix;\n\t\t\tmat4 viewtransformi = inverse(modelViewMatrix);\n\n\t\t\t// Project local vertex coordinate to camera position. Then do a step\n\t\t\t// backward (in cam coords) to the near clipping plane, and project back. Do\n\t\t\t// the same for the far clipping plane. This gives us all the information we\n\t\t\t// need to calculate the ray and truncate it to the viewing cone.\n\t\t\tvec4 position4 = vec4(position, 1.0);\n\t\t\tvec4 pos_in_cam = viewtransformf * position4;\n\n\t\t\t// Intersection of ray and near clipping plane (z = -1 in clip coords)\n\t\t\tpos_in_cam.z = -pos_in_cam.w;\n\t\t\tv_nearpos = viewtransformi * pos_in_cam;\n\n\t\t\t// Intersection of ray and far clipping plane (z = +1 in clip coords)\n\t\t\tpos_in_cam.z = pos_in_cam.w;\n\t\t\tv_farpos = viewtransformi * pos_in_cam;\n\n\t\t\t// Set varyings and output pos\n\t\t\tv_position = position;\n\t\t\tgl_Position = projectionMatrix * viewMatrix * modelMatrix * position4;\n\t\t}\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n\t\tprecision highp float;\n\t\tprecision mediump sampler3D;\n\n\t\tuniform vec3 u_size;\n\t\tuniform int u_renderstyle;\n\t\tuniform float u_renderthreshold;\n\t\tuniform vec2 u_clim;\n\n\t\tuniform sampler3D u_data;\n\t\tuniform sampler2D u_cmdata;\n\n\t\tvarying vec3 v_position;\n\t\tvarying vec4 v_nearpos;\n\t\tvarying vec4 v_farpos;\n\n\t// The maximum distance through our rendering volume is sqrt(3).\n\t\tconst int MAX_STEPS = 887;\t// 887 for 512^3, 1774 for 1024^3\n\t\tconst int REFINEMENT_STEPS = 4;\n\t\tconst float relative_step_size = 1.0;\n\t\tconst vec4 ambient_color = vec4(0.2, 0.4, 0.2, 1.0);\n\t\tconst vec4 diffuse_color = vec4(0.8, 0.2, 0.2, 1.0);\n\t\tconst vec4 specular_color = vec4(1.0, 1.0, 1.0, 1.0);\n\t\tconst float shininess = 40.0;\n\n\t\tvoid cast_mip(vec3 start_loc, vec3 step, int nsteps, vec3 view_ray);\n\t\tvoid cast_iso(vec3 start_loc, vec3 step, int nsteps, vec3 view_ray);\n\n\t\tfloat sample1(vec3 texcoords);\n\t\tvec4 apply_colormap(float val);\n\t\tvec4 add_lighting(float val, vec3 loc, vec3 step, vec3 view_ray);\n\n\t\tvoid main() {\n\t// Normalize clipping plane info\n\t\t\tvec3 farpos = v_farpos.xyz / v_farpos.w;\n\t\t\tvec3 nearpos = v_nearpos.xyz / v_nearpos.w;\n\n\t// Calculate unit vector pointing in the view direction through this fragment.\n\t\t\tvec3 view_ray = normalize(nearpos.xyz - farpos.xyz);\n\n\t// Compute the (negative) distance to the front surface or near clipping plane.\n\t// v_position is the back face of the cuboid, so the initial distance calculated in the dot\n\t// product below is the distance from near clip plane to the back of the cuboid\n\t\t\tfloat distance = dot(nearpos - v_position, view_ray);\n\t\t\tdistance = max(distance, min((-0.5 - v_position.x) / view_ray.x,\n\t\t\t\t\t\t\t\t\t\t(u_size.x - 0.5 - v_position.x) / view_ray.x));\n\t\t\tdistance = max(distance, min((-0.5 - v_position.y) / view_ray.y,\n\t\t\t\t\t\t\t\t\t\t(u_size.y - 0.5 - v_position.y) / view_ray.y));\n\t\t\tdistance = max(distance, min((-0.5 - v_position.z) / view_ray.z,\n\t\t\t\t\t\t\t\t\t\t(u_size.z - 0.5 - v_position.z) / view_ray.z));\n\n\t// Now we have the starting position on the front surface\n\t\t\tvec3 front = v_position + view_ray * distance;\n\n\t// Decide how many steps to take\n\t\t\tint nsteps = int(-distance / relative_step_size + 0.5);\n\t\t\tif ( nsteps < 1 )\n\t\t\t\tdiscard;\n\n\t// Get starting location and step vector in texture coordinates\n\t\t\tvec3 step = ((v_position - front) / u_size) / float(nsteps);\n\t\t\tvec3 start_loc = front / u_size;\n\n\t// For testing: show the number of steps. This helps to establish\n\t// whether the rays are correctly oriented\n\t//gl_FragColor = vec4(0.0, float(nsteps) / 1.0 / u_size.x, 1.0, 1.0);\n\t//return;\n\n\t\t\tif (u_renderstyle == 0)\n\t\t\t\tcast_mip(start_loc, step, nsteps, view_ray);\n\t\t\telse if (u_renderstyle == 1)\n\t\t\t\tcast_iso(start_loc, step, nsteps, view_ray);\n\n\t\t\tif (gl_FragColor.a < 0.05)\n\t\t\t\tdiscard;\n\t\t}\n\n\t\tfloat sample1(vec3 texcoords) {\n\t\t\t/* Sample float value from a 3D texture. Assumes intensity data. */\n\t\t\treturn texture(u_data, texcoords.xyz).r;\n\t\t}\n\n\t\tvec4 apply_colormap(float val) {\n\t\t\tval = (val - u_clim[0]) / (u_clim[1] - u_clim[0]);\n\t\t\treturn texture2D(u_cmdata, vec2(val, 0.5));\n\t\t}\n\n\t\tvoid cast_mip(vec3 start_loc, vec3 step, int nsteps, vec3 view_ray) {\n\n\t\t\tfloat max_val = -1e6;\n\t\t\tint max_i = 100;\n\t\t\tvec3 loc = start_loc;\n\n\t// Enter the raycasting loop. In WebGL 1 the loop index cannot be compared with\n\t// non-constant expression. So we use a hard-coded max, and an additional condition\n\t// inside the loop.\n\t\t\tfor (int iter=0; iter<MAX_STEPS; iter++) {\n\t\t\t\tif (iter >= nsteps)\n\t\t\t\t\tbreak;\n\t// Sample from the 3D texture\n\t\t\t\tfloat val = sample1(loc);\n\t// Apply MIP operation\n\t\t\t\tif (val > max_val) {\n\t\t\t\t\tmax_val = val;\n\t\t\t\t\tmax_i = iter;\n\t\t\t\t}\n\t// Advance location deeper into the volume\n\t\t\t\tloc += step;\n\t\t\t}\n\n\t// Refine location, gives crispier images\n\t\t\tvec3 iloc = start_loc + step * (float(max_i) - 0.5);\n\t\t\tvec3 istep = step / float(REFINEMENT_STEPS);\n\t\t\tfor (int i=0; i<REFINEMENT_STEPS; i++) {\n\t\t\t\tmax_val = max(max_val, sample1(iloc));\n\t\t\t\tiloc += istep;\n\t\t\t}\n\n\t// Resolve final color\n\t\t\tgl_FragColor = apply_colormap(max_val);\n\t\t}\n\n\t\tvoid cast_iso(vec3 start_loc, vec3 step, int nsteps, vec3 view_ray) {\n\n\t\t\tgl_FragColor = vec4(0.0);\t// init transparent\n\t\t\tvec4 color3 = vec4(0.0);\t// final color\n\t\t\tvec3 dstep = 1.5 / u_size;\t// step to sample derivative\n\t\t\tvec3 loc = start_loc;\n\n\t\t\tfloat low_threshold = u_renderthreshold - 0.02 * (u_clim[1] - u_clim[0]);\n\n\t// Enter the raycasting loop. In WebGL 1 the loop index cannot be compared with\n\t// non-constant expression. So we use a hard-coded max, and an additional condition\n\t// inside the loop.\n\t\t\tfor (int iter=0; iter<MAX_STEPS; iter++) {\n\t\t\t\tif (iter >= nsteps)\n\t\t\t\t\tbreak;\n\n\t// Sample from the 3D texture\n\t\t\t\tfloat val = sample1(loc);\n\n\t\t\t\tif (val > low_threshold) {\n\t// Take the last interval in smaller steps\n\t\t\t\t\tvec3 iloc = loc - 0.5 * step;\n\t\t\t\t\tvec3 istep = step / float(REFINEMENT_STEPS);\n\t\t\t\t\tfor (int i=0; i<REFINEMENT_STEPS; i++) {\n\t\t\t\t\t\tval = sample1(iloc);\n\t\t\t\t\t\tif (val > u_renderthreshold) {\n\t\t\t\t\t\t\tgl_FragColor = add_lighting(val, iloc, dstep, view_ray);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tiloc += istep;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t// Advance location deeper into the volume\n\t\t\t\tloc += step;\n\t\t\t}\n\t\t}\n\n\t\tvec4 add_lighting(float val, vec3 loc, vec3 step, vec3 view_ray)\n\t\t{\n\t// Calculate color by incorporating lighting\n\n\t// View direction\n\t\t\tvec3 V = normalize(view_ray);\n\n\t// calculate normal vector from gradient\n\t\t\tvec3 N;\n\t\t\tfloat val1, val2;\n\t\t\tval1 = sample1(loc + vec3(-step[0], 0.0, 0.0));\n\t\t\tval2 = sample1(loc + vec3(+step[0], 0.0, 0.0));\n\t\t\tN[0] = val1 - val2;\n\t\t\tval = max(max(val1, val2), val);\n\t\t\tval1 = sample1(loc + vec3(0.0, -step[1], 0.0));\n\t\t\tval2 = sample1(loc + vec3(0.0, +step[1], 0.0));\n\t\t\tN[1] = val1 - val2;\n\t\t\tval = max(max(val1, val2), val);\n\t\t\tval1 = sample1(loc + vec3(0.0, 0.0, -step[2]));\n\t\t\tval2 = sample1(loc + vec3(0.0, 0.0, +step[2]));\n\t\t\tN[2] = val1 - val2;\n\t\t\tval = max(max(val1, val2), val);\n\n\t\t\tfloat gm = length(N); // gradient magnitude\n\t\t\tN = normalize(N);\n\n\t// Flip normal so it points towards viewer\n\t\t\tfloat Nselect = float(dot(N, V) > 0.0);\n\t\t\tN = (2.0 * Nselect - 1.0) * N;\t// ==\tNselect * N - (1.0-Nselect)*N;\n\n\t// Init colors\n\t\t\tvec4 ambient_color = vec4(0.0, 0.0, 0.0, 0.0);\n\t\t\tvec4 diffuse_color = vec4(0.0, 0.0, 0.0, 0.0);\n\t\t\tvec4 specular_color = vec4(0.0, 0.0, 0.0, 0.0);\n\n\t// note: could allow multiple lights\n\t\t\tfor (int i=0; i<1; i++)\n\t\t\t{\n\t// Get light direction (make sure to prevent zero devision)\n\t\t\t\tvec3 L = normalize(view_ray);\t//lightDirs[i];\n\t\t\t\tfloat lightEnabled = float( length(L) > 0.0 );\n\t\t\t\tL = normalize(L + (1.0 - lightEnabled));\n\n\t// Calculate lighting properties\n\t\t\t\tfloat lambertTerm = clamp(dot(N, L), 0.0, 1.0);\n\t\t\t\tvec3 H = normalize(L+V); // Halfway vector\n\t\t\t\tfloat specularTerm = pow(max(dot(H, N), 0.0), shininess);\n\n\t// Calculate mask\n\t\t\t\tfloat mask1 = lightEnabled;\n\n\t// Calculate colors\n\t\t\t\tambient_color +=\tmask1 * ambient_color;\t// * gl_LightSource[i].ambient;\n\t\t\t\tdiffuse_color +=\tmask1 * lambertTerm;\n\t\t\t\tspecular_color += mask1 * specularTerm * specular_color;\n\t\t\t}\n\n\t// Calculate final color by componing different components\n\t\t\tvec4 final_color;\n\t\t\tvec4 color = apply_colormap(val);\n\t\t\tfinal_color = color * (ambient_color + diffuse_color) + specular_color;\n\t\t\tfinal_color.a = color.a;\n\t\t\treturn final_color;\n\t\t}\n `\n )\n};\nexport {\n VolumeRenderShader1\n};\n//# sourceMappingURL=VolumeShader.js.map\n","const WaterRefractionShader = {\n uniforms: {\n color: {\n value: null\n },\n time: {\n value: 0\n },\n tDiffuse: {\n value: null\n },\n tDudv: {\n value: null\n },\n textureMatrix: {\n value: null\n }\n },\n vertexShader: (\n /* glsl */\n `\n uniform mat4 textureMatrix;\n\n varying vec2 vUv;\n varying vec4 vUvRefraction;\n\n void main() {\n\n \tvUv = uv;\n\n \tvUvRefraction = textureMatrix * vec4( position, 1.0 );\n\n \tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform vec3 color;\n uniform float time;\n uniform sampler2D tDiffuse;\n uniform sampler2D tDudv;\n\n varying vec2 vUv;\n varying vec4 vUvRefraction;\n\n float blendOverlay( float base, float blend ) {\n\n \treturn( base < 0.5 ? ( 2.0 * base * blend ) : ( 1.0 - 2.0 * ( 1.0 - base ) * ( 1.0 - blend ) ) );\n\n }\n\n vec3 blendOverlay( vec3 base, vec3 blend ) {\n\n \treturn vec3( blendOverlay( base.r, blend.r ), blendOverlay( base.g, blend.g ),blendOverlay( base.b, blend.b ) );\n\n }\n\n void main() {\n\n float waveStrength = 0.1;\n float waveSpeed = 0.03;\n\n // simple distortion (ripple) via dudv map (see https://www.youtube.com/watch?v=6B7IF6GOu7s)\n\n \tvec2 distortedUv = texture2D( tDudv, vec2( vUv.x + time * waveSpeed, vUv.y ) ).rg * waveStrength;\n \tdistortedUv = vUv.xy + vec2( distortedUv.x, distortedUv.y + time * waveSpeed );\n \tvec2 distortion = ( texture2D( tDudv, distortedUv ).rg * 2.0 - 1.0 ) * waveStrength;\n\n // new uv coords\n\n vec4 uv = vec4( vUvRefraction );\n uv.xy += distortion;\n\n \tvec4 base = texture2DProj( tDiffuse, uv );\n\n \tgl_FragColor = vec4( blendOverlay( base.rgb, color ), 1.0 );\n\n }\n `\n )\n};\nexport {\n WaterRefractionShader\n};\n//# sourceMappingURL=WaterRefractionShader.js.map\n","import { Mesh, PlaneGeometry, MeshBasicMaterial, CanvasTexture, LinearFilter, Color } from \"three\";\nclass HTMLMesh extends Mesh {\n constructor(dom) {\n const texture = new HTMLTexture(dom);\n const geometry = new PlaneGeometry(texture.image.width * 1e-3, texture.image.height * 1e-3);\n const material = new MeshBasicMaterial({ map: texture, toneMapped: false, transparent: true });\n super(geometry, material);\n function onEvent(event) {\n material.map.dispatchDOMEvent(event);\n }\n this.addEventListener(\"mousedown\", onEvent);\n this.addEventListener(\"mousemove\", onEvent);\n this.addEventListener(\"mouseup\", onEvent);\n this.addEventListener(\"click\", onEvent);\n this.dispose = function() {\n geometry.dispose();\n material.dispose();\n material.map.dispose();\n canvases.delete(dom);\n this.removeEventListener(\"mousedown\", onEvent);\n this.removeEventListener(\"mousemove\", onEvent);\n this.removeEventListener(\"mouseup\", onEvent);\n this.removeEventListener(\"click\", onEvent);\n };\n }\n}\nclass HTMLTexture extends CanvasTexture {\n constructor(dom) {\n super(html2canvas(dom));\n this.dom = dom;\n this.anisotropy = 16;\n if (\"colorSpace\" in this)\n this.colorSpace = \"srgb\";\n else\n this.encoding = 3001;\n this.minFilter = LinearFilter;\n this.magFilter = LinearFilter;\n const observer = new MutationObserver(() => {\n if (!this.scheduleUpdate) {\n this.scheduleUpdate = setTimeout(() => this.update(), 16);\n }\n });\n const config = { attributes: true, childList: true, subtree: true, characterData: true };\n observer.observe(dom, config);\n this.observer = observer;\n }\n dispatchDOMEvent(event) {\n if (event.data) {\n htmlevent(this.dom, event.type, event.data.x, event.data.y);\n }\n }\n update() {\n this.image = html2canvas(this.dom);\n this.needsUpdate = true;\n this.scheduleUpdate = null;\n }\n dispose() {\n if (this.observer) {\n this.observer.disconnect();\n }\n this.scheduleUpdate = clearTimeout(this.scheduleUpdate);\n super.dispose();\n }\n}\nconst canvases = /* @__PURE__ */ new WeakMap();\nfunction html2canvas(element) {\n const range = document.createRange();\n const color = new Color();\n function Clipper(context2) {\n const clips = [];\n let isClipping = false;\n function doClip() {\n if (isClipping) {\n isClipping = false;\n context2.restore();\n }\n if (clips.length === 0)\n return;\n let minX = -Infinity, minY = -Infinity;\n let maxX = Infinity, maxY = Infinity;\n for (let i = 0; i < clips.length; i++) {\n const clip = clips[i];\n minX = Math.max(minX, clip.x);\n minY = Math.max(minY, clip.y);\n maxX = Math.min(maxX, clip.x + clip.width);\n maxY = Math.min(maxY, clip.y + clip.height);\n }\n context2.save();\n context2.beginPath();\n context2.rect(minX, minY, maxX - minX, maxY - minY);\n context2.clip();\n isClipping = true;\n }\n return {\n add: function(clip) {\n clips.push(clip);\n doClip();\n },\n remove: function() {\n clips.pop();\n doClip();\n }\n };\n }\n function drawText(style, x, y, string) {\n if (string !== \"\") {\n if (style.textTransform === \"uppercase\") {\n string = string.toUpperCase();\n }\n context.font = style.fontWeight + \" \" + style.fontSize + \" \" + style.fontFamily;\n context.textBaseline = \"top\";\n context.fillStyle = style.color;\n context.fillText(string, x, y + parseFloat(style.fontSize) * 0.1);\n }\n }\n function buildRectPath(x, y, w, h, r) {\n if (w < 2 * r)\n r = w / 2;\n if (h < 2 * r)\n r = h / 2;\n context.beginPath();\n context.moveTo(x + r, y);\n context.arcTo(x + w, y, x + w, y + h, r);\n context.arcTo(x + w, y + h, x, y + h, r);\n context.arcTo(x, y + h, x, y, r);\n context.arcTo(x, y, x + w, y, r);\n context.closePath();\n }\n function drawBorder(style, which, x, y, width, height) {\n const borderWidth = style[which + \"Width\"];\n const borderStyle = style[which + \"Style\"];\n const borderColor = style[which + \"Color\"];\n if (borderWidth !== \"0px\" && borderStyle !== \"none\" && borderColor !== \"transparent\" && borderColor !== \"rgba(0, 0, 0, 0)\") {\n context.strokeStyle = borderColor;\n context.lineWidth = parseFloat(borderWidth);\n context.beginPath();\n context.moveTo(x, y);\n context.lineTo(x + width, y + height);\n context.stroke();\n }\n }\n function drawElement(element2, style) {\n let x = 0, y = 0, width = 0, height = 0;\n if (element2.nodeType === Node.TEXT_NODE) {\n range.selectNode(element2);\n const rect = range.getBoundingClientRect();\n x = rect.left - offset.left - 0.5;\n y = rect.top - offset.top - 0.5;\n width = rect.width;\n height = rect.height;\n drawText(style, x, y, element2.nodeValue.trim());\n } else if (element2.nodeType === Node.COMMENT_NODE) {\n return;\n } else if (element2 instanceof HTMLCanvasElement) {\n if (element2.style.display === \"none\")\n return;\n context.save();\n const dpr = window.devicePixelRatio;\n context.scale(1 / dpr, 1 / dpr);\n context.drawImage(element2, 0, 0);\n context.restore();\n } else {\n if (element2.style.display === \"none\")\n return;\n const rect = element2.getBoundingClientRect();\n x = rect.left - offset.left - 0.5;\n y = rect.top - offset.top - 0.5;\n width = rect.width;\n height = rect.height;\n style = window.getComputedStyle(element2);\n buildRectPath(x, y, width, height, parseFloat(style.borderRadius));\n const backgroundColor = style.backgroundColor;\n if (backgroundColor !== \"transparent\" && backgroundColor !== \"rgba(0, 0, 0, 0)\") {\n context.fillStyle = backgroundColor;\n context.fill();\n }\n const borders = [\"borderTop\", \"borderLeft\", \"borderBottom\", \"borderRight\"];\n let match = true;\n let prevBorder = null;\n for (const border of borders) {\n if (prevBorder !== null) {\n match = style[border + \"Width\"] === style[prevBorder + \"Width\"] && style[border + \"Color\"] === style[prevBorder + \"Color\"] && style[border + \"Style\"] === style[prevBorder + \"Style\"];\n }\n if (match === false)\n break;\n prevBorder = border;\n }\n if (match === true) {\n const width2 = parseFloat(style.borderTopWidth);\n if (style.borderTopWidth !== \"0px\" && style.borderTopStyle !== \"none\" && style.borderTopColor !== \"transparent\" && style.borderTopColor !== \"rgba(0, 0, 0, 0)\") {\n context.strokeStyle = style.borderTopColor;\n context.lineWidth = width2;\n context.stroke();\n }\n } else {\n drawBorder(style, \"borderTop\", x, y, width, 0);\n drawBorder(style, \"borderLeft\", x, y, 0, height);\n drawBorder(style, \"borderBottom\", x, y + height, width, 0);\n drawBorder(style, \"borderRight\", x + width, y, 0, height);\n }\n if (element2 instanceof HTMLInputElement) {\n let accentColor = style.accentColor;\n if (accentColor === void 0 || accentColor === \"auto\")\n accentColor = style.color;\n color.set(accentColor);\n const luminance = Math.sqrt(0.299 * color.r ** 2 + 0.587 * color.g ** 2 + 0.114 * color.b ** 2);\n const accentTextColor = luminance < 0.5 ? \"white\" : \"#111111\";\n if (element2.type === \"radio\") {\n buildRectPath(x, y, width, height, height);\n context.fillStyle = \"white\";\n context.strokeStyle = accentColor;\n context.lineWidth = 1;\n context.fill();\n context.stroke();\n if (element2.checked) {\n buildRectPath(x + 2, y + 2, width - 4, height - 4, height);\n context.fillStyle = accentColor;\n context.strokeStyle = accentTextColor;\n context.lineWidth = 2;\n context.fill();\n context.stroke();\n }\n }\n if (element2.type === \"checkbox\") {\n buildRectPath(x, y, width, height, 2);\n context.fillStyle = element2.checked ? accentColor : \"white\";\n context.strokeStyle = element2.checked ? accentTextColor : accentColor;\n context.lineWidth = 1;\n context.stroke();\n context.fill();\n if (element2.checked) {\n const currentTextAlign = context.textAlign;\n context.textAlign = \"center\";\n const properties = {\n color: accentTextColor,\n fontFamily: style.fontFamily,\n fontSize: height + \"px\",\n fontWeight: \"bold\"\n };\n drawText(properties, x + width / 2, y, \"✔\");\n context.textAlign = currentTextAlign;\n }\n }\n if (element2.type === \"range\") {\n const [min, max, value] = [\"min\", \"max\", \"value\"].map((property) => parseFloat(element2[property]));\n const position = (value - min) / (max - min) * (width - height);\n buildRectPath(x, y + height / 4, width, height / 2, height / 4);\n context.fillStyle = accentTextColor;\n context.strokeStyle = accentColor;\n context.lineWidth = 1;\n context.fill();\n context.stroke();\n buildRectPath(x, y + height / 4, position + height / 2, height / 2, height / 4);\n context.fillStyle = accentColor;\n context.fill();\n buildRectPath(x + position, y, height, height, height / 2);\n context.fillStyle = accentColor;\n context.fill();\n }\n if (element2.type === \"color\" || element2.type === \"text\" || element2.type === \"number\") {\n clipper.add({ x, y, width, height });\n drawText(style, x + parseInt(style.paddingLeft), y + parseInt(style.paddingTop), element2.value);\n clipper.remove();\n }\n }\n }\n const isClipping = style.overflow === \"auto\" || style.overflow === \"hidden\";\n if (isClipping)\n clipper.add({ x, y, width, height });\n for (let i = 0; i < element2.childNodes.length; i++) {\n drawElement(element2.childNodes[i], style);\n }\n if (isClipping)\n clipper.remove();\n }\n const offset = element.getBoundingClientRect();\n let canvas = canvases.get(element);\n if (canvas === void 0) {\n canvas = document.createElement(\"canvas\");\n canvas.width = offset.width;\n canvas.height = offset.height;\n canvases.set(element, canvas);\n }\n const context = canvas.getContext(\n \"2d\"\n /*, { alpha: false }*/\n );\n const clipper = new Clipper(context);\n drawElement(element);\n return canvas;\n}\nfunction htmlevent(element, event, x, y) {\n const mouseEventInit = {\n clientX: x * element.offsetWidth + element.offsetLeft,\n clientY: y * element.offsetHeight + element.offsetTop,\n view: element.ownerDocument.defaultView\n };\n window.dispatchEvent(new MouseEvent(event, mouseEventInit));\n const rect = element.getBoundingClientRect();\n x = x * rect.width + rect.left;\n y = y * rect.height + rect.top;\n function traverse(element2) {\n if (element2.nodeType !== Node.TEXT_NODE && element2.nodeType !== Node.COMMENT_NODE) {\n const rect2 = element2.getBoundingClientRect();\n if (x > rect2.left && x < rect2.right && y > rect2.top && y < rect2.bottom) {\n element2.dispatchEvent(new MouseEvent(event, mouseEventInit));\n if (element2 instanceof HTMLInputElement && element2.type === \"range\" && (event === \"mousedown\" || event === \"click\")) {\n const [min, max] = [\"min\", \"max\"].map((property) => parseFloat(element2[property]));\n const width = rect2.width;\n const offsetX = x - rect2.x;\n const proportion = offsetX / width;\n element2.value = min + (max - min) * proportion;\n element2.dispatchEvent(new InputEvent(\"input\", { bubbles: true }));\n }\n }\n for (let i = 0; i < element2.childNodes.length; i++) {\n traverse(element2.childNodes[i]);\n }\n }\n }\n traverse(element);\n}\nexport {\n HTMLMesh\n};\n//# sourceMappingURL=HTMLMesh.js.map\n","import { Group, Raycaster, Matrix4, Vector2 } from \"three\";\nconst _pointer = /* @__PURE__ */ new Vector2();\nconst _event = { type: \"\", data: _pointer };\nclass InteractiveGroup extends Group {\n constructor(renderer, camera) {\n super();\n const scope = this;\n const raycaster = new Raycaster();\n const tempMatrix = new Matrix4();\n const element = renderer.domElement;\n function onPointerEvent(event) {\n event.stopPropagation();\n _pointer.x = event.clientX / element.clientWidth * 2 - 1;\n _pointer.y = -(event.clientY / element.clientHeight) * 2 + 1;\n raycaster.setFromCamera(_pointer, camera);\n const intersects = raycaster.intersectObjects(scope.children, false);\n if (intersects.length > 0) {\n const intersection = intersects[0];\n const object = intersection.object;\n const uv = intersection.uv;\n _event.type = event.type;\n _event.data.set(uv.x, 1 - uv.y);\n object.dispatchEvent(_event);\n }\n }\n element.addEventListener(\"pointerdown\", onPointerEvent);\n element.addEventListener(\"pointerup\", onPointerEvent);\n element.addEventListener(\"pointermove\", onPointerEvent);\n element.addEventListener(\"mousedown\", onPointerEvent);\n element.addEventListener(\"mouseup\", onPointerEvent);\n element.addEventListener(\"mousemove\", onPointerEvent);\n element.addEventListener(\"click\", onPointerEvent);\n const events = {\n move: \"mousemove\",\n select: \"click\",\n selectstart: \"mousedown\",\n selectend: \"mouseup\"\n };\n function onXRControllerEvent(event) {\n const controller = event.target;\n tempMatrix.identity().extractRotation(controller.matrixWorld);\n raycaster.ray.origin.setFromMatrixPosition(controller.matrixWorld);\n raycaster.ray.direction.set(0, 0, -1).applyMatrix4(tempMatrix);\n const intersections = raycaster.intersectObjects(scope.children, false);\n if (intersections.length > 0) {\n const intersection = intersections[0];\n const object = intersection.object;\n const uv = intersection.uv;\n _event.type = events[event.type];\n _event.data.set(uv.x, 1 - uv.y);\n object.dispatchEvent(_event);\n }\n }\n const controller1 = renderer.xr.getController(0);\n controller1.addEventListener(\"move\", onXRControllerEvent);\n controller1.addEventListener(\"select\", onXRControllerEvent);\n controller1.addEventListener(\"selectstart\", onXRControllerEvent);\n controller1.addEventListener(\"selectend\", onXRControllerEvent);\n const controller2 = renderer.xr.getController(1);\n controller2.addEventListener(\"move\", onXRControllerEvent);\n controller2.addEventListener(\"select\", onXRControllerEvent);\n controller2.addEventListener(\"selectstart\", onXRControllerEvent);\n controller2.addEventListener(\"selectend\", onXRControllerEvent);\n }\n}\nexport {\n InteractiveGroup\n};\n//# sourceMappingURL=InteractiveGroup.js.map\n","import { Vector2 } from \"three\";\nclass SelectionHelper {\n constructor(selectionBox, renderer, cssClassName) {\n this.element = document.createElement(\"div\");\n this.element.classList.add(cssClassName);\n this.element.style.pointerEvents = \"none\";\n this.renderer = renderer;\n this.startPoint = new Vector2();\n this.pointTopLeft = new Vector2();\n this.pointBottomRight = new Vector2();\n this.isDown = false;\n this.renderer.domElement.addEventListener(\"pointerdown\", (event) => {\n this.isDown = true;\n this.onSelectStart(event);\n });\n this.renderer.domElement.addEventListener(\"pointermove\", (event) => {\n if (this.isDown) {\n this.onSelectMove(event);\n }\n });\n this.renderer.domElement.addEventListener(\"pointerup\", (event) => {\n this.isDown = false;\n this.onSelectOver(event);\n });\n }\n onSelectStart(event) {\n this.renderer.domElement.parentElement.appendChild(this.element);\n this.element.style.left = `${event.clientX}px`;\n this.element.style.top = `${event.clientY}px`;\n this.element.style.width = \"0px\";\n this.element.style.height = \"0px\";\n this.startPoint.x = event.clientX;\n this.startPoint.y = event.clientY;\n }\n onSelectMove(event) {\n this.pointBottomRight.x = Math.max(this.startPoint.x, event.clientX);\n this.pointBottomRight.y = Math.max(this.startPoint.y, event.clientY);\n this.pointTopLeft.x = Math.min(this.startPoint.x, event.clientX);\n this.pointTopLeft.y = Math.min(this.startPoint.y, event.clientY);\n this.element.style.left = `${this.pointTopLeft.x}px`;\n this.element.style.top = `${this.pointTopLeft.y}px`;\n this.element.style.width = `${this.pointBottomRight.x - this.pointTopLeft.x}px`;\n this.element.style.height = `${this.pointBottomRight.y - this.pointTopLeft.y}px`;\n }\n onSelectOver() {\n this.element.parentElement.removeChild(this.element);\n }\n}\nexport {\n SelectionHelper\n};\n//# sourceMappingURL=SelectionHelper.js.map\n","import { Vector3, Frustum } from \"three\";\nconst frustum = /* @__PURE__ */ new Frustum();\nconst center = /* @__PURE__ */ new Vector3();\nconst tmpPoint = /* @__PURE__ */ new Vector3();\nconst vecNear = /* @__PURE__ */ new Vector3();\nconst vecTopLeft = /* @__PURE__ */ new Vector3();\nconst vecTopRight = /* @__PURE__ */ new Vector3();\nconst vecDownRight = /* @__PURE__ */ new Vector3();\nconst vecDownLeft = /* @__PURE__ */ new Vector3();\nconst vecFarTopLeft = /* @__PURE__ */ new Vector3();\nconst vecFarTopRight = /* @__PURE__ */ new Vector3();\nconst vecFarDownRight = /* @__PURE__ */ new Vector3();\nconst vecFarDownLeft = /* @__PURE__ */ new Vector3();\nconst vectemp1 = /* @__PURE__ */ new Vector3();\nconst vectemp2 = /* @__PURE__ */ new Vector3();\nconst vectemp3 = /* @__PURE__ */ new Vector3();\nclass SelectionBox {\n constructor(camera, scene, deep) {\n this.camera = camera;\n this.scene = scene;\n this.startPoint = new Vector3();\n this.endPoint = new Vector3();\n this.collection = [];\n this.deep = deep || Number.MAX_VALUE;\n }\n select(startPoint, endPoint) {\n this.startPoint = startPoint || this.startPoint;\n this.endPoint = endPoint || this.endPoint;\n this.collection = [];\n this.updateFrustum(this.startPoint, this.endPoint);\n this.searchChildInFrustum(frustum, this.scene);\n return this.collection;\n }\n updateFrustum(startPoint, endPoint) {\n startPoint = startPoint || this.startPoint;\n endPoint = endPoint || this.endPoint;\n if (startPoint.x === endPoint.x) {\n endPoint.x += Number.EPSILON;\n }\n if (startPoint.y === endPoint.y) {\n endPoint.y += Number.EPSILON;\n }\n this.camera.updateProjectionMatrix();\n this.camera.updateMatrixWorld();\n if (this.camera.isPerspectiveCamera) {\n tmpPoint.copy(startPoint);\n tmpPoint.x = Math.min(startPoint.x, endPoint.x);\n tmpPoint.y = Math.max(startPoint.y, endPoint.y);\n endPoint.x = Math.max(startPoint.x, endPoint.x);\n endPoint.y = Math.min(startPoint.y, endPoint.y);\n vecNear.setFromMatrixPosition(this.camera.matrixWorld);\n vecTopLeft.copy(tmpPoint);\n vecTopRight.set(endPoint.x, tmpPoint.y, 0);\n vecDownRight.copy(endPoint);\n vecDownLeft.set(tmpPoint.x, endPoint.y, 0);\n vecTopLeft.unproject(this.camera);\n vecTopRight.unproject(this.camera);\n vecDownRight.unproject(this.camera);\n vecDownLeft.unproject(this.camera);\n vectemp1.copy(vecTopLeft).sub(vecNear);\n vectemp2.copy(vecTopRight).sub(vecNear);\n vectemp3.copy(vecDownRight).sub(vecNear);\n vectemp1.normalize();\n vectemp2.normalize();\n vectemp3.normalize();\n vectemp1.multiplyScalar(this.deep);\n vectemp2.multiplyScalar(this.deep);\n vectemp3.multiplyScalar(this.deep);\n vectemp1.add(vecNear);\n vectemp2.add(vecNear);\n vectemp3.add(vecNear);\n var planes = frustum.planes;\n planes[0].setFromCoplanarPoints(vecNear, vecTopLeft, vecTopRight);\n planes[1].setFromCoplanarPoints(vecNear, vecTopRight, vecDownRight);\n planes[2].setFromCoplanarPoints(vecDownRight, vecDownLeft, vecNear);\n planes[3].setFromCoplanarPoints(vecDownLeft, vecTopLeft, vecNear);\n planes[4].setFromCoplanarPoints(vecTopRight, vecDownRight, vecDownLeft);\n planes[5].setFromCoplanarPoints(vectemp3, vectemp2, vectemp1);\n planes[5].normal.multiplyScalar(-1);\n } else if (this.camera.isOrthographicCamera) {\n const left = Math.min(startPoint.x, endPoint.x);\n const top = Math.max(startPoint.y, endPoint.y);\n const right = Math.max(startPoint.x, endPoint.x);\n const down = Math.min(startPoint.y, endPoint.y);\n vecTopLeft.set(left, top, -1);\n vecTopRight.set(right, top, -1);\n vecDownRight.set(right, down, -1);\n vecDownLeft.set(left, down, -1);\n vecFarTopLeft.set(left, top, 1);\n vecFarTopRight.set(right, top, 1);\n vecFarDownRight.set(right, down, 1);\n vecFarDownLeft.set(left, down, 1);\n vecTopLeft.unproject(this.camera);\n vecTopRight.unproject(this.camera);\n vecDownRight.unproject(this.camera);\n vecDownLeft.unproject(this.camera);\n vecFarTopLeft.unproject(this.camera);\n vecFarTopRight.unproject(this.camera);\n vecFarDownRight.unproject(this.camera);\n vecFarDownLeft.unproject(this.camera);\n var planes = frustum.planes;\n planes[0].setFromCoplanarPoints(vecTopLeft, vecFarTopLeft, vecFarTopRight);\n planes[1].setFromCoplanarPoints(vecTopRight, vecFarTopRight, vecFarDownRight);\n planes[2].setFromCoplanarPoints(vecFarDownRight, vecFarDownLeft, vecDownLeft);\n planes[3].setFromCoplanarPoints(vecFarDownLeft, vecFarTopLeft, vecTopLeft);\n planes[4].setFromCoplanarPoints(vecTopRight, vecDownRight, vecDownLeft);\n planes[5].setFromCoplanarPoints(vecFarDownRight, vecFarTopRight, vecFarTopLeft);\n planes[5].normal.multiplyScalar(-1);\n } else {\n console.error(\"THREE.SelectionBox: Unsupported camera type.\");\n }\n }\n searchChildInFrustum(frustum2, object) {\n if (object.isMesh || object.isLine || object.isPoints) {\n if (object.material !== void 0) {\n if (object.geometry.boundingSphere === null)\n object.geometry.computeBoundingSphere();\n center.copy(object.geometry.boundingSphere.center);\n center.applyMatrix4(object.matrixWorld);\n if (frustum2.containsPoint(center)) {\n this.collection.push(object);\n }\n }\n }\n if (object.children.length > 0) {\n for (let x = 0; x < object.children.length; x++) {\n this.searchChildInFrustum(frustum2, object.children[x]);\n }\n }\n }\n}\nexport {\n SelectionBox\n};\n//# sourceMappingURL=SelectionBox.js.map\n","async function AmmoPhysics() {\n if (\"Ammo\" in window === false) {\n console.error(\"AmmoPhysics: Couldn't find Ammo.js\");\n return;\n }\n const AmmoLib = await Ammo();\n const frameRate = 60;\n const collisionConfiguration = new AmmoLib.btDefaultCollisionConfiguration();\n const dispatcher = new AmmoLib.btCollisionDispatcher(collisionConfiguration);\n const broadphase = new AmmoLib.btDbvtBroadphase();\n const solver = new AmmoLib.btSequentialImpulseConstraintSolver();\n const world = new AmmoLib.btDiscreteDynamicsWorld(dispatcher, broadphase, solver, collisionConfiguration);\n world.setGravity(new AmmoLib.btVector3(0, -9.8, 0));\n const worldTransform = new AmmoLib.btTransform();\n function getShape(geometry) {\n const parameters = geometry.parameters;\n if (geometry.type === \"BoxGeometry\") {\n const sx = parameters.width !== void 0 ? parameters.width / 2 : 0.5;\n const sy = parameters.height !== void 0 ? parameters.height / 2 : 0.5;\n const sz = parameters.depth !== void 0 ? parameters.depth / 2 : 0.5;\n const shape = new AmmoLib.btBoxShape(new AmmoLib.btVector3(sx, sy, sz));\n shape.setMargin(0.05);\n return shape;\n } else if (geometry.type === \"SphereGeometry\" || geometry.type === \"IcosahedronGeometry\") {\n const radius = parameters.radius !== void 0 ? parameters.radius : 1;\n const shape = new AmmoLib.btSphereShape(radius);\n shape.setMargin(0.05);\n return shape;\n }\n return null;\n }\n const meshes = [];\n const meshMap = /* @__PURE__ */ new WeakMap();\n function addMesh(mesh, mass = 0) {\n const shape = getShape(mesh.geometry);\n if (shape !== null) {\n if (mesh.isInstancedMesh) {\n handleInstancedMesh(mesh, mass, shape);\n } else if (mesh.isMesh) {\n handleMesh(mesh, mass, shape);\n }\n }\n }\n function handleMesh(mesh, mass, shape) {\n const position = mesh.position;\n const quaternion = mesh.quaternion;\n const transform = new AmmoLib.btTransform();\n transform.setIdentity();\n transform.setOrigin(new AmmoLib.btVector3(position.x, position.y, position.z));\n transform.setRotation(new AmmoLib.btQuaternion(quaternion.x, quaternion.y, quaternion.z, quaternion.w));\n const motionState = new AmmoLib.btDefaultMotionState(transform);\n const localInertia = new AmmoLib.btVector3(0, 0, 0);\n shape.calculateLocalInertia(mass, localInertia);\n const rbInfo = new AmmoLib.btRigidBodyConstructionInfo(mass, motionState, shape, localInertia);\n const body = new AmmoLib.btRigidBody(rbInfo);\n world.addRigidBody(body);\n if (mass > 0) {\n meshes.push(mesh);\n meshMap.set(mesh, body);\n }\n }\n function handleInstancedMesh(mesh, mass, shape) {\n const array = mesh.instanceMatrix.array;\n const bodies = [];\n for (let i = 0; i < mesh.count; i++) {\n const index = i * 16;\n const transform = new AmmoLib.btTransform();\n transform.setFromOpenGLMatrix(array.slice(index, index + 16));\n const motionState = new AmmoLib.btDefaultMotionState(transform);\n const localInertia = new AmmoLib.btVector3(0, 0, 0);\n shape.calculateLocalInertia(mass, localInertia);\n const rbInfo = new AmmoLib.btRigidBodyConstructionInfo(mass, motionState, shape, localInertia);\n const body = new AmmoLib.btRigidBody(rbInfo);\n world.addRigidBody(body);\n bodies.push(body);\n }\n if (mass > 0) {\n mesh.instanceMatrix.setUsage(35048);\n meshes.push(mesh);\n meshMap.set(mesh, bodies);\n }\n }\n function setMeshPosition(mesh, position, index = 0) {\n if (mesh.isInstancedMesh) {\n const bodies = meshMap.get(mesh);\n const body = bodies[index];\n body.setAngularVelocity(new AmmoLib.btVector3(0, 0, 0));\n body.setLinearVelocity(new AmmoLib.btVector3(0, 0, 0));\n worldTransform.setIdentity();\n worldTransform.setOrigin(new AmmoLib.btVector3(position.x, position.y, position.z));\n body.setWorldTransform(worldTransform);\n } else if (mesh.isMesh) {\n const body = meshMap.get(mesh);\n body.setAngularVelocity(new AmmoLib.btVector3(0, 0, 0));\n body.setLinearVelocity(new AmmoLib.btVector3(0, 0, 0));\n worldTransform.setIdentity();\n worldTransform.setOrigin(new AmmoLib.btVector3(position.x, position.y, position.z));\n body.setWorldTransform(worldTransform);\n }\n }\n let lastTime = 0;\n function step() {\n const time = performance.now();\n if (lastTime > 0) {\n const delta = (time - lastTime) / 1e3;\n world.stepSimulation(delta, 10);\n }\n lastTime = time;\n for (let i = 0, l = meshes.length; i < l; i++) {\n const mesh = meshes[i];\n if (mesh.isInstancedMesh) {\n const array = mesh.instanceMatrix.array;\n const bodies = meshMap.get(mesh);\n for (let j = 0; j < bodies.length; j++) {\n const body = bodies[j];\n const motionState = body.getMotionState();\n motionState.getWorldTransform(worldTransform);\n const position = worldTransform.getOrigin();\n const quaternion = worldTransform.getRotation();\n compose(position, quaternion, array, j * 16);\n }\n mesh.instanceMatrix.needsUpdate = true;\n } else if (mesh.isMesh) {\n const body = meshMap.get(mesh);\n const motionState = body.getMotionState();\n motionState.getWorldTransform(worldTransform);\n const position = worldTransform.getOrigin();\n const quaternion = worldTransform.getRotation();\n mesh.position.set(position.x(), position.y(), position.z());\n mesh.quaternion.set(quaternion.x(), quaternion.y(), quaternion.z(), quaternion.w());\n }\n }\n }\n setInterval(step, 1e3 / frameRate);\n return {\n addMesh,\n setMeshPosition\n // addCompoundMesh\n };\n}\nfunction compose(position, quaternion, array, index) {\n const x = quaternion.x(), y = quaternion.y(), z = quaternion.z(), w = quaternion.w();\n const x2 = x + x, y2 = y + y, z2 = z + z;\n const xx = x * x2, xy = x * y2, xz = x * z2;\n const yy = y * y2, yz = y * z2, zz = z * z2;\n const wx = w * x2, wy = w * y2, wz = w * z2;\n array[index + 0] = 1 - (yy + zz);\n array[index + 1] = xy + wz;\n array[index + 2] = xz - wy;\n array[index + 3] = 0;\n array[index + 4] = xy - wz;\n array[index + 5] = 1 - (xx + zz);\n array[index + 6] = yz + wx;\n array[index + 7] = 0;\n array[index + 8] = xz + wy;\n array[index + 9] = yz - wx;\n array[index + 10] = 1 - (xx + yy);\n array[index + 11] = 0;\n array[index + 12] = position.x();\n array[index + 13] = position.y();\n array[index + 14] = position.z();\n array[index + 15] = 1;\n}\nexport {\n AmmoPhysics\n};\n//# sourceMappingURL=AmmoPhysics.js.map\n","import { OrthographicCamera, Scene, StereoCamera, WebGLRenderTarget, ShaderMaterial, Mesh, PlaneGeometry, LinearFilter, NearestFilter, RGBAFormat } from \"three\";\nimport { version } from \"../_polyfill/constants.js\";\nclass ParallaxBarrierEffect {\n constructor(renderer) {\n const _camera = new OrthographicCamera(-1, 1, 1, -1, 0, 1);\n const _scene = new Scene();\n const _stereo = new StereoCamera();\n const _params = { minFilter: LinearFilter, magFilter: NearestFilter, format: RGBAFormat };\n const _renderTargetL = new WebGLRenderTarget(512, 512, _params);\n const _renderTargetR = new WebGLRenderTarget(512, 512, _params);\n const _material = new ShaderMaterial({\n uniforms: {\n mapLeft: { value: _renderTargetL.texture },\n mapRight: { value: _renderTargetR.texture }\n },\n vertexShader: [\n \"varying vec2 vUv;\",\n \"void main() {\",\n \"\tvUv = vec2( uv.x, uv.y );\",\n \"\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\",\n \"}\"\n ].join(\"\\n\"),\n fragmentShader: [\n \"uniform sampler2D mapLeft;\",\n \"uniform sampler2D mapRight;\",\n \"varying vec2 vUv;\",\n \"void main() {\",\n \"\tvec2 uv = vUv;\",\n \"\tif ( ( mod( gl_FragCoord.y, 2.0 ) ) > 1.00 ) {\",\n \"\t\tgl_FragColor = texture2D( mapLeft, uv );\",\n \"\t} else {\",\n \"\t\tgl_FragColor = texture2D( mapRight, uv );\",\n \"\t}\",\n \"\t#include <tonemapping_fragment>\",\n `\t#include <${version >= 154 ? \"colorspace_fragment\" : \"encodings_fragment\"}>`,\n \"}\"\n ].join(\"\\n\")\n });\n const mesh = new Mesh(new PlaneGeometry(2, 2), _material);\n _scene.add(mesh);\n this.setSize = function(width, height) {\n renderer.setSize(width, height);\n const pixelRatio = renderer.getPixelRatio();\n _renderTargetL.setSize(width * pixelRatio, height * pixelRatio);\n _renderTargetR.setSize(width * pixelRatio, height * pixelRatio);\n };\n this.render = function(scene, camera) {\n if (scene.matrixWorldAutoUpdate === true)\n scene.updateMatrixWorld();\n if (camera.parent === null && camera.matrixWorldAutoUpdate === true)\n camera.updateMatrixWorld();\n _stereo.update(camera);\n renderer.setRenderTarget(_renderTargetL);\n renderer.clear();\n renderer.render(scene, _stereo.cameraL);\n renderer.setRenderTarget(_renderTargetR);\n renderer.clear();\n renderer.render(scene, _stereo.cameraR);\n renderer.setRenderTarget(null);\n renderer.render(_scene, _camera);\n };\n }\n}\nexport {\n ParallaxBarrierEffect\n};\n//# sourceMappingURL=ParallaxBarrierEffect.js.map\n","import { PerspectiveCamera, Vector3, Quaternion } from \"three\";\nclass PeppersGhostEffect {\n constructor(renderer) {\n const scope = this;\n scope.cameraDistance = 15;\n scope.reflectFromAbove = false;\n let _halfWidth, _width, _height;\n const _cameraF = new PerspectiveCamera();\n const _cameraB = new PerspectiveCamera();\n const _cameraL = new PerspectiveCamera();\n const _cameraR = new PerspectiveCamera();\n const _position = new Vector3();\n const _quaternion = new Quaternion();\n const _scale = new Vector3();\n renderer.autoClear = false;\n this.setSize = function(width, height) {\n _halfWidth = width / 2;\n if (width < height) {\n _width = width / 3;\n _height = width / 3;\n } else {\n _width = height / 3;\n _height = height / 3;\n }\n renderer.setSize(width, height);\n };\n this.render = function(scene, camera) {\n if (scene.matrixWorldAutoUpdate === true)\n scene.updateMatrixWorld();\n if (camera.parent === null && camera.matrixWorldAutoUpdate === true)\n camera.updateMatrixWorld();\n camera.matrixWorld.decompose(_position, _quaternion, _scale);\n _cameraF.position.copy(_position);\n _cameraF.quaternion.copy(_quaternion);\n _cameraF.translateZ(scope.cameraDistance);\n _cameraF.lookAt(scene.position);\n _cameraB.position.copy(_position);\n _cameraB.quaternion.copy(_quaternion);\n _cameraB.translateZ(-scope.cameraDistance);\n _cameraB.lookAt(scene.position);\n _cameraB.rotation.z += 180 * (Math.PI / 180);\n _cameraL.position.copy(_position);\n _cameraL.quaternion.copy(_quaternion);\n _cameraL.translateX(-scope.cameraDistance);\n _cameraL.lookAt(scene.position);\n _cameraL.rotation.x += 90 * (Math.PI / 180);\n _cameraR.position.copy(_position);\n _cameraR.quaternion.copy(_quaternion);\n _cameraR.translateX(scope.cameraDistance);\n _cameraR.lookAt(scene.position);\n _cameraR.rotation.x += 90 * (Math.PI / 180);\n renderer.clear();\n renderer.setScissorTest(true);\n renderer.setScissor(_halfWidth - _width / 2, _height * 2, _width, _height);\n renderer.setViewport(_halfWidth - _width / 2, _height * 2, _width, _height);\n if (scope.reflectFromAbove) {\n renderer.render(scene, _cameraB);\n } else {\n renderer.render(scene, _cameraF);\n }\n renderer.setScissor(_halfWidth - _width / 2, 0, _width, _height);\n renderer.setViewport(_halfWidth - _width / 2, 0, _width, _height);\n if (scope.reflectFromAbove) {\n renderer.render(scene, _cameraF);\n } else {\n renderer.render(scene, _cameraB);\n }\n renderer.setScissor(_halfWidth - _width / 2 - _width, _height, _width, _height);\n renderer.setViewport(_halfWidth - _width / 2 - _width, _height, _width, _height);\n if (scope.reflectFromAbove) {\n renderer.render(scene, _cameraR);\n } else {\n renderer.render(scene, _cameraL);\n }\n renderer.setScissor(_halfWidth + _width / 2, _height, _width, _height);\n renderer.setViewport(_halfWidth + _width / 2, _height, _width, _height);\n if (scope.reflectFromAbove) {\n renderer.render(scene, _cameraL);\n } else {\n renderer.render(scene, _cameraR);\n }\n renderer.setScissorTest(false);\n };\n }\n}\nexport {\n PeppersGhostEffect\n};\n//# sourceMappingURL=PeppersGhostEffect.js.map\n","import { Color, ShaderMaterial, UniformsUtils, UniformsLib, BackSide } from \"three\";\nimport { version } from \"../_polyfill/constants.js\";\nclass OutlineEffect {\n constructor(renderer, parameters = {}) {\n this.enabled = true;\n const defaultThickness = parameters.defaultThickness !== void 0 ? parameters.defaultThickness : 3e-3;\n const defaultColor = new Color().fromArray(\n parameters.defaultColor !== void 0 ? parameters.defaultColor : [0, 0, 0]\n );\n const defaultAlpha = parameters.defaultAlpha !== void 0 ? parameters.defaultAlpha : 1;\n const defaultKeepAlive = parameters.defaultKeepAlive !== void 0 ? parameters.defaultKeepAlive : false;\n const cache = {};\n const removeThresholdCount = 60;\n const originalMaterials = {};\n const originalOnBeforeRenders = {};\n const uniformsOutline = {\n outlineThickness: { value: defaultThickness },\n outlineColor: { value: defaultColor },\n outlineAlpha: { value: defaultAlpha }\n };\n const vertexShader = [\n \"#include <common>\",\n \"#include <uv_pars_vertex>\",\n \"#include <displacementmap_pars_vertex>\",\n \"#include <fog_pars_vertex>\",\n \"#include <morphtarget_pars_vertex>\",\n \"#include <skinning_pars_vertex>\",\n \"#include <logdepthbuf_pars_vertex>\",\n \"#include <clipping_planes_pars_vertex>\",\n \"uniform float outlineThickness;\",\n \"vec4 calculateOutline( vec4 pos, vec3 normal, vec4 skinned ) {\",\n \"\tfloat thickness = outlineThickness;\",\n \"\tconst float ratio = 1.0;\",\n // TODO: support outline thickness ratio for each vertex\n \"\tvec4 pos2 = projectionMatrix * modelViewMatrix * vec4( skinned.xyz + normal, 1.0 );\",\n // NOTE: subtract pos2 from pos because BackSide objectNormal is negative\n \"\tvec4 norm = normalize( pos - pos2 );\",\n \"\treturn pos + norm * thickness * pos.w * ratio;\",\n \"}\",\n \"void main() {\",\n \"\t#include <uv_vertex>\",\n \"\t#include <beginnormal_vertex>\",\n \"\t#include <morphnormal_vertex>\",\n \"\t#include <skinbase_vertex>\",\n \"\t#include <skinnormal_vertex>\",\n \"\t#include <begin_vertex>\",\n \"\t#include <morphtarget_vertex>\",\n \"\t#include <skinning_vertex>\",\n \"\t#include <displacementmap_vertex>\",\n \"\t#include <project_vertex>\",\n \"\tvec3 outlineNormal = - objectNormal;\",\n // the outline material is always rendered with BackSide\n \"\tgl_Position = calculateOutline( gl_Position, outlineNormal, vec4( transformed, 1.0 ) );\",\n \"\t#include <logdepthbuf_vertex>\",\n \"\t#include <clipping_planes_vertex>\",\n \"\t#include <fog_vertex>\",\n \"}\"\n ].join(\"\\n\");\n const fragmentShader = [\n \"#include <common>\",\n \"#include <fog_pars_fragment>\",\n \"#include <logdepthbuf_pars_fragment>\",\n \"#include <clipping_planes_pars_fragment>\",\n \"uniform vec3 outlineColor;\",\n \"uniform float outlineAlpha;\",\n \"void main() {\",\n \"\t#include <clipping_planes_fragment>\",\n \"\t#include <logdepthbuf_fragment>\",\n \"\tgl_FragColor = vec4( outlineColor, outlineAlpha );\",\n \"\t#include <tonemapping_fragment>\",\n `\t#include <${version >= 154 ? \"colorspace_fragment\" : \"encodings_fragment\"}>`,\n \"\t#include <fog_fragment>\",\n \"\t#include <premultiplied_alpha_fragment>\",\n \"}\"\n ].join(\"\\n\");\n function createMaterial() {\n return new ShaderMaterial({\n type: \"OutlineEffect\",\n uniforms: UniformsUtils.merge([UniformsLib[\"fog\"], UniformsLib[\"displacementmap\"], uniformsOutline]),\n vertexShader,\n fragmentShader,\n side: BackSide\n });\n }\n function getOutlineMaterialFromCache(originalMaterial) {\n let data = cache[originalMaterial.uuid];\n if (data === void 0) {\n data = {\n material: createMaterial(),\n used: true,\n keepAlive: defaultKeepAlive,\n count: 0\n };\n cache[originalMaterial.uuid] = data;\n }\n data.used = true;\n return data.material;\n }\n function getOutlineMaterial(originalMaterial) {\n const outlineMaterial = getOutlineMaterialFromCache(originalMaterial);\n originalMaterials[outlineMaterial.uuid] = originalMaterial;\n updateOutlineMaterial(outlineMaterial, originalMaterial);\n return outlineMaterial;\n }\n function isCompatible(object) {\n const geometry = object.geometry;\n const hasNormals = geometry !== void 0 && geometry.attributes.normal !== void 0;\n return object.isMesh === true && object.material !== void 0 && hasNormals === true;\n }\n function setOutlineMaterial(object) {\n if (isCompatible(object) === false)\n return;\n if (Array.isArray(object.material)) {\n for (let i = 0, il = object.material.length; i < il; i++) {\n object.material[i] = getOutlineMaterial(object.material[i]);\n }\n } else {\n object.material = getOutlineMaterial(object.material);\n }\n originalOnBeforeRenders[object.uuid] = object.onBeforeRender;\n object.onBeforeRender = onBeforeRender;\n }\n function restoreOriginalMaterial(object) {\n if (isCompatible(object) === false)\n return;\n if (Array.isArray(object.material)) {\n for (let i = 0, il = object.material.length; i < il; i++) {\n object.material[i] = originalMaterials[object.material[i].uuid];\n }\n } else {\n object.material = originalMaterials[object.material.uuid];\n }\n object.onBeforeRender = originalOnBeforeRenders[object.uuid];\n }\n function onBeforeRender(renderer2, scene, camera, geometry, material) {\n const originalMaterial = originalMaterials[material.uuid];\n if (originalMaterial === void 0)\n return;\n updateUniforms(material, originalMaterial);\n }\n function updateUniforms(material, originalMaterial) {\n const outlineParameters = originalMaterial.userData.outlineParameters;\n material.uniforms.outlineAlpha.value = originalMaterial.opacity;\n if (outlineParameters !== void 0) {\n if (outlineParameters.thickness !== void 0)\n material.uniforms.outlineThickness.value = outlineParameters.thickness;\n if (outlineParameters.color !== void 0)\n material.uniforms.outlineColor.value.fromArray(outlineParameters.color);\n if (outlineParameters.alpha !== void 0)\n material.uniforms.outlineAlpha.value = outlineParameters.alpha;\n }\n if (originalMaterial.displacementMap) {\n material.uniforms.displacementMap.value = originalMaterial.displacementMap;\n material.uniforms.displacementScale.value = originalMaterial.displacementScale;\n material.uniforms.displacementBias.value = originalMaterial.displacementBias;\n }\n }\n function updateOutlineMaterial(material, originalMaterial) {\n if (material.name === \"invisible\")\n return;\n const outlineParameters = originalMaterial.userData.outlineParameters;\n material.fog = originalMaterial.fog;\n material.toneMapped = originalMaterial.toneMapped;\n material.premultipliedAlpha = originalMaterial.premultipliedAlpha;\n material.displacementMap = originalMaterial.displacementMap;\n if (outlineParameters !== void 0) {\n if (originalMaterial.visible === false) {\n material.visible = false;\n } else {\n material.visible = outlineParameters.visible !== void 0 ? outlineParameters.visible : true;\n }\n material.transparent = outlineParameters.alpha !== void 0 && outlineParameters.alpha < 1 ? true : originalMaterial.transparent;\n if (outlineParameters.keepAlive !== void 0)\n cache[originalMaterial.uuid].keepAlive = outlineParameters.keepAlive;\n } else {\n material.transparent = originalMaterial.transparent;\n material.visible = originalMaterial.visible;\n }\n if (originalMaterial.wireframe === true || originalMaterial.depthTest === false)\n material.visible = false;\n if (originalMaterial.clippingPlanes) {\n material.clipping = true;\n material.clippingPlanes = originalMaterial.clippingPlanes;\n material.clipIntersection = originalMaterial.clipIntersection;\n material.clipShadows = originalMaterial.clipShadows;\n }\n material.version = originalMaterial.version;\n }\n function cleanupCache() {\n let keys;\n keys = Object.keys(originalMaterials);\n for (let i = 0, il = keys.length; i < il; i++) {\n originalMaterials[keys[i]] = void 0;\n }\n keys = Object.keys(originalOnBeforeRenders);\n for (let i = 0, il = keys.length; i < il; i++) {\n originalOnBeforeRenders[keys[i]] = void 0;\n }\n keys = Object.keys(cache);\n for (let i = 0, il = keys.length; i < il; i++) {\n const key = keys[i];\n if (cache[key].used === false) {\n cache[key].count++;\n if (cache[key].keepAlive === false && cache[key].count > removeThresholdCount) {\n delete cache[key];\n }\n } else {\n cache[key].used = false;\n cache[key].count = 0;\n }\n }\n }\n this.render = function(scene, camera) {\n if (this.enabled === false) {\n renderer.render(scene, camera);\n return;\n }\n const currentAutoClear = renderer.autoClear;\n renderer.autoClear = this.autoClear;\n renderer.render(scene, camera);\n renderer.autoClear = currentAutoClear;\n this.renderOutline(scene, camera);\n };\n this.renderOutline = function(scene, camera) {\n const currentAutoClear = renderer.autoClear;\n const currentSceneAutoUpdate = scene.matrixWorldAutoUpdate;\n const currentSceneBackground = scene.background;\n const currentShadowMapEnabled = renderer.shadowMap.enabled;\n scene.matrixWorldAutoUpdate = false;\n scene.background = null;\n renderer.autoClear = false;\n renderer.shadowMap.enabled = false;\n scene.traverse(setOutlineMaterial);\n renderer.render(scene, camera);\n scene.traverse(restoreOriginalMaterial);\n cleanupCache();\n scene.matrixWorldAutoUpdate = currentSceneAutoUpdate;\n scene.background = currentSceneBackground;\n renderer.autoClear = currentAutoClear;\n renderer.shadowMap.enabled = currentShadowMapEnabled;\n };\n this.autoClear = renderer.autoClear;\n this.domElement = renderer.domElement;\n this.shadowMap = renderer.shadowMap;\n this.clear = function(color, depth, stencil) {\n renderer.clear(color, depth, stencil);\n };\n this.getPixelRatio = function() {\n return renderer.getPixelRatio();\n };\n this.setPixelRatio = function(value) {\n renderer.setPixelRatio(value);\n };\n this.getSize = function(target) {\n return renderer.getSize(target);\n };\n this.setSize = function(width, height, updateStyle) {\n renderer.setSize(width, height, updateStyle);\n };\n this.setViewport = function(x, y, width, height) {\n renderer.setViewport(x, y, width, height);\n };\n this.setScissor = function(x, y, width, height) {\n renderer.setScissor(x, y, width, height);\n };\n this.setScissorTest = function(boolean) {\n renderer.setScissorTest(boolean);\n };\n this.setRenderTarget = function(renderTarget) {\n renderer.setRenderTarget(renderTarget);\n };\n }\n}\nexport {\n OutlineEffect\n};\n//# sourceMappingURL=OutlineEffect.js.map\n","import { Matrix3, OrthographicCamera, Scene, StereoCamera, WebGLRenderTarget, ShaderMaterial, Mesh, PlaneGeometry, LinearFilter, NearestFilter, RGBAFormat } from \"three\";\nimport { version } from \"../_polyfill/constants.js\";\nclass AnaglyphEffect {\n constructor(renderer, width = 512, height = 512) {\n this.colorMatrixLeft = new Matrix3().fromArray([\n 0.4561,\n -0.0400822,\n -0.0152161,\n 0.500484,\n -0.0378246,\n -0.0205971,\n 0.176381,\n -0.0157589,\n -546856e-8\n ]);\n this.colorMatrixRight = new Matrix3().fromArray([\n -0.0434706,\n 0.378476,\n -0.0721527,\n -0.0879388,\n 0.73364,\n -0.112961,\n -155529e-8,\n -0.0184503,\n 1.2264\n ]);\n const _camera = new OrthographicCamera(-1, 1, 1, -1, 0, 1);\n const _scene = new Scene();\n const _stereo = new StereoCamera();\n const _params = { minFilter: LinearFilter, magFilter: NearestFilter, format: RGBAFormat };\n const _renderTargetL = new WebGLRenderTarget(width, height, _params);\n const _renderTargetR = new WebGLRenderTarget(width, height, _params);\n const _material = new ShaderMaterial({\n uniforms: {\n mapLeft: { value: _renderTargetL.texture },\n mapRight: { value: _renderTargetR.texture },\n colorMatrixLeft: { value: this.colorMatrixLeft },\n colorMatrixRight: { value: this.colorMatrixRight }\n },\n vertexShader: [\n \"varying vec2 vUv;\",\n \"void main() {\",\n \"\tvUv = vec2( uv.x, uv.y );\",\n \"\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\",\n \"}\"\n ].join(\"\\n\"),\n fragmentShader: [\n \"uniform sampler2D mapLeft;\",\n \"uniform sampler2D mapRight;\",\n \"varying vec2 vUv;\",\n \"uniform mat3 colorMatrixLeft;\",\n \"uniform mat3 colorMatrixRight;\",\n \"void main() {\",\n \"\tvec2 uv = vUv;\",\n \"\tvec4 colorL = texture2D( mapLeft, uv );\",\n \"\tvec4 colorR = texture2D( mapRight, uv );\",\n \"\tvec3 color = clamp(\",\n \"\t\t\tcolorMatrixLeft * colorL.rgb +\",\n \"\t\t\tcolorMatrixRight * colorR.rgb, 0., 1. );\",\n \"\tgl_FragColor = vec4(\",\n \"\t\t\tcolor.r, color.g, color.b,\",\n \"\t\t\tmax( colorL.a, colorR.a ) );\",\n \"\t#include <tonemapping_fragment>\",\n `\t#include <${version >= 154 ? \"colorspace_fragment\" : \"encodings_fragment\"}>`,\n \"}\"\n ].join(\"\\n\")\n });\n const _mesh = new Mesh(new PlaneGeometry(2, 2), _material);\n _scene.add(_mesh);\n this.setSize = function(width2, height2) {\n renderer.setSize(width2, height2);\n const pixelRatio = renderer.getPixelRatio();\n _renderTargetL.setSize(width2 * pixelRatio, height2 * pixelRatio);\n _renderTargetR.setSize(width2 * pixelRatio, height2 * pixelRatio);\n };\n this.render = function(scene, camera) {\n const currentRenderTarget = renderer.getRenderTarget();\n if (scene.matrixWorldAutoUpdate === true)\n scene.updateMatrixWorld();\n if (camera.parent === null && camera.matrixWorldAutoUpdate === true)\n camera.updateMatrixWorld();\n _stereo.update(camera);\n renderer.setRenderTarget(_renderTargetL);\n renderer.clear();\n renderer.render(scene, _stereo.cameraL);\n renderer.setRenderTarget(_renderTargetR);\n renderer.clear();\n renderer.render(scene, _stereo.cameraR);\n renderer.setRenderTarget(null);\n renderer.render(_scene, _camera);\n renderer.setRenderTarget(currentRenderTarget);\n };\n this.dispose = function() {\n _renderTargetL.dispose();\n _renderTargetR.dispose();\n _mesh.geometry.dispose();\n _mesh.material.dispose();\n };\n }\n}\nexport {\n AnaglyphEffect\n};\n//# sourceMappingURL=AnaglyphEffect.js.map\n","class AsciiEffect {\n constructor(renderer, charSet = \" .:-=+*#%@\", options = {}) {\n const fResolution = options[\"resolution\"] || 0.15;\n const iScale = options[\"scale\"] || 1;\n const bColor = options[\"color\"] || false;\n const bAlpha = options[\"alpha\"] || false;\n const bBlock = options[\"block\"] || false;\n const bInvert = options[\"invert\"] || false;\n const strResolution = options[\"strResolution\"] || \"low\";\n let width, height;\n const domElement = document.createElement(\"div\");\n domElement.style.cursor = \"default\";\n const oAscii = document.createElement(\"table\");\n domElement.appendChild(oAscii);\n let iWidth, iHeight;\n let oImg;\n this.setSize = function(w, h) {\n width = w;\n height = h;\n renderer.setSize(w, h);\n initAsciiSize();\n };\n this.render = function(scene, camera) {\n renderer.render(scene, camera);\n asciifyImage(oAscii);\n };\n this.domElement = domElement;\n function initAsciiSize() {\n iWidth = Math.floor(width * fResolution);\n iHeight = Math.floor(height * fResolution);\n oCanvas.width = iWidth;\n oCanvas.height = iHeight;\n oImg = renderer.domElement;\n if (oImg.style.backgroundColor) {\n oAscii.rows[0].cells[0].style.backgroundColor = oImg.style.backgroundColor;\n oAscii.rows[0].cells[0].style.color = oImg.style.color;\n }\n oAscii.cellSpacing = 0;\n oAscii.cellPadding = 0;\n const oStyle = oAscii.style;\n oStyle.whiteSpace = \"pre\";\n oStyle.margin = \"0px\";\n oStyle.padding = \"0px\";\n oStyle.letterSpacing = fLetterSpacing + \"px\";\n oStyle.fontFamily = strFont;\n oStyle.fontSize = fFontSize + \"px\";\n oStyle.lineHeight = fLineHeight + \"px\";\n oStyle.textAlign = \"left\";\n oStyle.textDecoration = \"none\";\n }\n const aDefaultCharList = \" .,:;i1tfLCG08@\".split(\"\");\n const aDefaultColorCharList = \" CGO08@\".split(\"\");\n const strFont = \"courier new, monospace\";\n const oCanvasImg = renderer.domElement;\n const oCanvas = document.createElement(\"canvas\");\n if (!oCanvas.getContext) {\n return;\n }\n const oCtx = oCanvas.getContext(\"2d\");\n if (!oCtx.getImageData) {\n return;\n }\n let aCharList = bColor ? aDefaultColorCharList : aDefaultCharList;\n if (charSet)\n aCharList = charSet;\n const fFontSize = 2 / fResolution * iScale;\n const fLineHeight = 2 / fResolution * iScale;\n let fLetterSpacing = 0;\n if (strResolution == \"low\") {\n switch (iScale) {\n case 1:\n fLetterSpacing = -1;\n break;\n case 2:\n case 3:\n fLetterSpacing = -2.1;\n break;\n case 4:\n fLetterSpacing = -3.1;\n break;\n case 5:\n fLetterSpacing = -4.15;\n break;\n }\n }\n if (strResolution == \"medium\") {\n switch (iScale) {\n case 1:\n fLetterSpacing = 0;\n break;\n case 2:\n fLetterSpacing = -1;\n break;\n case 3:\n fLetterSpacing = -1.04;\n break;\n case 4:\n case 5:\n fLetterSpacing = -2.1;\n break;\n }\n }\n if (strResolution == \"high\") {\n switch (iScale) {\n case 1:\n case 2:\n fLetterSpacing = 0;\n break;\n case 3:\n case 4:\n case 5:\n fLetterSpacing = -1;\n break;\n }\n }\n function asciifyImage(oAscii2) {\n oCtx.clearRect(0, 0, iWidth, iHeight);\n oCtx.drawImage(oCanvasImg, 0, 0, iWidth, iHeight);\n const oImgData = oCtx.getImageData(0, 0, iWidth, iHeight).data;\n let strChars = \"\";\n for (let y = 0; y < iHeight; y += 2) {\n for (let x = 0; x < iWidth; x++) {\n const iOffset = (y * iWidth + x) * 4;\n const iRed = oImgData[iOffset];\n const iGreen = oImgData[iOffset + 1];\n const iBlue = oImgData[iOffset + 2];\n const iAlpha = oImgData[iOffset + 3];\n let iCharIdx;\n let fBrightness;\n fBrightness = (0.3 * iRed + 0.59 * iGreen + 0.11 * iBlue) / 255;\n if (iAlpha == 0) {\n fBrightness = 1;\n }\n iCharIdx = Math.floor((1 - fBrightness) * (aCharList.length - 1));\n if (bInvert) {\n iCharIdx = aCharList.length - iCharIdx - 1;\n }\n let strThisChar = aCharList[iCharIdx];\n if (strThisChar === void 0 || strThisChar == \" \")\n strThisChar = \" \";\n if (bColor) {\n strChars += \"<span style='color:rgb(\" + iRed + \",\" + iGreen + \",\" + iBlue + \");\" + (bBlock ? \"background-color:rgb(\" + iRed + \",\" + iGreen + \",\" + iBlue + \");\" : \"\") + (bAlpha ? \"opacity:\" + iAlpha / 255 + \";\" : \"\") + \"'>\" + strThisChar + \"</span>\";\n } else {\n strChars += strThisChar;\n }\n }\n strChars += \"<br/>\";\n }\n oAscii2.innerHTML = `<tr><td style=\"display:block;width:${width}px;height:${height}px;overflow:hidden\">${strChars}</td></tr>`;\n }\n }\n}\nexport {\n AsciiEffect\n};\n//# sourceMappingURL=AsciiEffect.js.map\n","import { StereoCamera, Vector2 } from \"three\";\nclass StereoEffect {\n constructor(renderer) {\n const _stereo = new StereoCamera();\n _stereo.aspect = 0.5;\n const size = new Vector2();\n this.setEyeSeparation = function(eyeSep) {\n _stereo.eyeSep = eyeSep;\n };\n this.setSize = function(width, height) {\n renderer.setSize(width, height);\n };\n this.render = function(scene, camera) {\n if (scene.matrixWorldAutoUpdate === true)\n scene.updateMatrixWorld();\n if (camera.parent === null && camera.matrixWorldAutoUpdate === true)\n camera.updateMatrixWorld();\n _stereo.update(camera);\n renderer.getSize(size);\n if (renderer.autoClear)\n renderer.clear();\n renderer.setScissorTest(true);\n renderer.setScissor(0, 0, size.width / 2, size.height);\n renderer.setViewport(0, 0, size.width / 2, size.height);\n renderer.render(scene, _stereo.cameraL);\n renderer.setScissor(size.width / 2, 0, size.width / 2, size.height);\n renderer.setViewport(size.width / 2, 0, size.width / 2, size.height);\n renderer.render(scene, _stereo.cameraR);\n renderer.setScissorTest(false);\n };\n }\n}\nexport {\n StereoEffect\n};\n//# sourceMappingURL=StereoEffect.js.map\n","import { Vector4, Vector3 } from \"three\";\nfunction findSpan(p, u, U) {\n const n = U.length - p - 1;\n if (u >= U[n]) {\n return n - 1;\n }\n if (u <= U[p]) {\n return p;\n }\n let low = p;\n let high = n;\n let mid = Math.floor((low + high) / 2);\n while (u < U[mid] || u >= U[mid + 1]) {\n if (u < U[mid]) {\n high = mid;\n } else {\n low = mid;\n }\n mid = Math.floor((low + high) / 2);\n }\n return mid;\n}\nfunction calcBasisFunctions(span, u, p, U) {\n const N = [];\n const left = [];\n const right = [];\n N[0] = 1;\n for (let j = 1; j <= p; ++j) {\n left[j] = u - U[span + 1 - j];\n right[j] = U[span + j] - u;\n let saved = 0;\n for (let r = 0; r < j; ++r) {\n const rv = right[r + 1];\n const lv = left[j - r];\n const temp = N[r] / (rv + lv);\n N[r] = saved + rv * temp;\n saved = lv * temp;\n }\n N[j] = saved;\n }\n return N;\n}\nfunction calcBSplinePoint(p, U, P, u) {\n const span = findSpan(p, u, U);\n const N = calcBasisFunctions(span, u, p, U);\n const C = new Vector4(0, 0, 0, 0);\n for (let j = 0; j <= p; ++j) {\n const point = P[span - p + j];\n const Nj = N[j];\n const wNj = point.w * Nj;\n C.x += point.x * wNj;\n C.y += point.y * wNj;\n C.z += point.z * wNj;\n C.w += point.w * Nj;\n }\n return C;\n}\nfunction calcBasisFunctionDerivatives(span, u, p, n, U) {\n const zeroArr = [];\n for (let i = 0; i <= p; ++i)\n zeroArr[i] = 0;\n const ders = [];\n for (let i = 0; i <= n; ++i)\n ders[i] = zeroArr.slice(0);\n const ndu = [];\n for (let i = 0; i <= p; ++i)\n ndu[i] = zeroArr.slice(0);\n ndu[0][0] = 1;\n const left = zeroArr.slice(0);\n const right = zeroArr.slice(0);\n for (let j = 1; j <= p; ++j) {\n left[j] = u - U[span + 1 - j];\n right[j] = U[span + j] - u;\n let saved = 0;\n for (let r2 = 0; r2 < j; ++r2) {\n const rv = right[r2 + 1];\n const lv = left[j - r2];\n ndu[j][r2] = rv + lv;\n const temp = ndu[r2][j - 1] / ndu[j][r2];\n ndu[r2][j] = saved + rv * temp;\n saved = lv * temp;\n }\n ndu[j][j] = saved;\n }\n for (let j = 0; j <= p; ++j) {\n ders[0][j] = ndu[j][p];\n }\n for (let r2 = 0; r2 <= p; ++r2) {\n let s1 = 0;\n let s2 = 1;\n const a = [];\n for (let i = 0; i <= p; ++i) {\n a[i] = zeroArr.slice(0);\n }\n a[0][0] = 1;\n for (let k = 1; k <= n; ++k) {\n let d = 0;\n const rk = r2 - k;\n const pk = p - k;\n if (r2 >= k) {\n a[s2][0] = a[s1][0] / ndu[pk + 1][rk];\n d = a[s2][0] * ndu[rk][pk];\n }\n const j1 = rk >= -1 ? 1 : -rk;\n const j2 = r2 - 1 <= pk ? k - 1 : p - r2;\n for (let j3 = j1; j3 <= j2; ++j3) {\n a[s2][j3] = (a[s1][j3] - a[s1][j3 - 1]) / ndu[pk + 1][rk + j3];\n d += a[s2][j3] * ndu[rk + j3][pk];\n }\n if (r2 <= pk) {\n a[s2][k] = -a[s1][k - 1] / ndu[pk + 1][r2];\n d += a[s2][k] * ndu[r2][pk];\n }\n ders[k][r2] = d;\n const j = s1;\n s1 = s2;\n s2 = j;\n }\n }\n let r = p;\n for (let k = 1; k <= n; ++k) {\n for (let j = 0; j <= p; ++j) {\n ders[k][j] *= r;\n }\n r *= p - k;\n }\n return ders;\n}\nfunction calcBSplineDerivatives(p, U, P, u, nd) {\n const du = nd < p ? nd : p;\n const CK = [];\n const span = findSpan(p, u, U);\n const nders = calcBasisFunctionDerivatives(span, u, p, du, U);\n const Pw = [];\n for (let i = 0; i < P.length; ++i) {\n const point = P[i].clone();\n const w = point.w;\n point.x *= w;\n point.y *= w;\n point.z *= w;\n Pw[i] = point;\n }\n for (let k = 0; k <= du; ++k) {\n const point = Pw[span - p].clone().multiplyScalar(nders[k][0]);\n for (let j = 1; j <= p; ++j) {\n point.add(Pw[span - p + j].clone().multiplyScalar(nders[k][j]));\n }\n CK[k] = point;\n }\n for (let k = du + 1; k <= nd + 1; ++k) {\n CK[k] = new Vector4(0, 0, 0);\n }\n return CK;\n}\nfunction calcKoverI(k, i) {\n let nom = 1;\n for (let j = 2; j <= k; ++j) {\n nom *= j;\n }\n let denom = 1;\n for (let j = 2; j <= i; ++j) {\n denom *= j;\n }\n for (let j = 2; j <= k - i; ++j) {\n denom *= j;\n }\n return nom / denom;\n}\nfunction calcRationalCurveDerivatives(Pders) {\n const nd = Pders.length;\n const Aders = [];\n const wders = [];\n for (let i = 0; i < nd; ++i) {\n const point = Pders[i];\n Aders[i] = new Vector3(point.x, point.y, point.z);\n wders[i] = point.w;\n }\n const CK = [];\n for (let k = 0; k < nd; ++k) {\n const v = Aders[k].clone();\n for (let i = 1; i <= k; ++i) {\n v.sub(CK[k - i].clone().multiplyScalar(calcKoverI(k, i) * wders[i]));\n }\n CK[k] = v.divideScalar(wders[0]);\n }\n return CK;\n}\nfunction calcNURBSDerivatives(p, U, P, u, nd) {\n const Pders = calcBSplineDerivatives(p, U, P, u, nd);\n return calcRationalCurveDerivatives(Pders);\n}\nfunction calcSurfacePoint(p, q, U, V, P, u, v, target) {\n const uspan = findSpan(p, u, U);\n const vspan = findSpan(q, v, V);\n const Nu = calcBasisFunctions(uspan, u, p, U);\n const Nv = calcBasisFunctions(vspan, v, q, V);\n const temp = [];\n for (let l = 0; l <= q; ++l) {\n temp[l] = new Vector4(0, 0, 0, 0);\n for (let k = 0; k <= p; ++k) {\n const point = P[uspan - p + k][vspan - q + l].clone();\n const w = point.w;\n point.x *= w;\n point.y *= w;\n point.z *= w;\n temp[l].add(point.multiplyScalar(Nu[k]));\n }\n }\n const Sw = new Vector4(0, 0, 0, 0);\n for (let l = 0; l <= q; ++l) {\n Sw.add(temp[l].multiplyScalar(Nv[l]));\n }\n Sw.divideScalar(Sw.w);\n target.set(Sw.x, Sw.y, Sw.z);\n}\nexport {\n calcBSplineDerivatives,\n calcBSplinePoint,\n calcBasisFunctionDerivatives,\n calcBasisFunctions,\n calcKoverI,\n calcNURBSDerivatives,\n calcRationalCurveDerivatives,\n calcSurfacePoint,\n findSpan\n};\n//# sourceMappingURL=NURBSUtils.js.map\n","import { Curve, Vector4, Vector3 } from \"three\";\nimport { calcBSplinePoint, calcNURBSDerivatives } from \"./NURBSUtils.js\";\nclass NURBSCurve extends Curve {\n constructor(degree, knots, controlPoints, startKnot, endKnot) {\n super();\n this.degree = degree;\n this.knots = knots;\n this.controlPoints = [];\n this.startKnot = startKnot || 0;\n this.endKnot = endKnot || this.knots.length - 1;\n for (let i = 0; i < controlPoints.length; ++i) {\n const point = controlPoints[i];\n this.controlPoints[i] = new Vector4(point.x, point.y, point.z, point.w);\n }\n }\n getPoint(t, optionalTarget) {\n const point = optionalTarget || new Vector3();\n const u = this.knots[this.startKnot] + t * (this.knots[this.endKnot] - this.knots[this.startKnot]);\n const hpoint = calcBSplinePoint(this.degree, this.knots, this.controlPoints, u);\n if (hpoint.w != 1) {\n hpoint.divideScalar(hpoint.w);\n }\n return point.set(hpoint.x, hpoint.y, hpoint.z);\n }\n getTangent(t, optionalTarget) {\n const tangent = optionalTarget || new Vector3();\n const u = this.knots[0] + t * (this.knots[this.knots.length - 1] - this.knots[0]);\n const ders = calcNURBSDerivatives(this.degree, this.knots, this.controlPoints, u, 1);\n tangent.copy(ders[1]).normalize();\n return tangent;\n }\n}\nexport {\n NURBSCurve\n};\n//# sourceMappingURL=NURBSCurve.js.map\n","import { Loader, LoaderUtils, FileLoader, TextureLoader, RepeatWrapping, ClampToEdgeWrapping, Texture, MeshPhongMaterial, MeshLambertMaterial, Color, EquirectangularReflectionMapping, Matrix4, Group, Bone, PropertyBinding, Object3D, OrthographicCamera, PerspectiveCamera, PointLight, MathUtils, SpotLight, DirectionalLight, SkinnedMesh, Mesh, LineBasicMaterial, Line, Vector3, Skeleton, AmbientLight, BufferGeometry, Float32BufferAttribute, Uint16BufferAttribute, Matrix3, Vector4, AnimationClip, Quaternion, Euler, VectorKeyframeTrack, QuaternionKeyframeTrack, NumberKeyframeTrack } from \"three\";\nimport { unzlibSync } from \"fflate\";\nimport { NURBSCurve } from \"../curves/NURBSCurve.js\";\nimport { decodeText } from \"../_polyfill/LoaderUtils.js\";\nimport { UV1 } from \"../_polyfill/uv1.js\";\nlet fbxTree;\nlet connections;\nlet sceneGraph;\nclass FBXLoader extends Loader {\n constructor(manager) {\n super(manager);\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const path = scope.path === \"\" ? LoaderUtils.extractUrlBase(url) : scope.path;\n const loader = new FileLoader(this.manager);\n loader.setPath(scope.path);\n loader.setResponseType(\"arraybuffer\");\n loader.setRequestHeader(scope.requestHeader);\n loader.setWithCredentials(scope.withCredentials);\n loader.load(\n url,\n function(buffer) {\n try {\n onLoad(scope.parse(buffer, path));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(FBXBuffer, path) {\n if (isFbxFormatBinary(FBXBuffer)) {\n fbxTree = new BinaryParser().parse(FBXBuffer);\n } else {\n const FBXText = convertArrayBufferToString(FBXBuffer);\n if (!isFbxFormatASCII(FBXText)) {\n throw new Error(\"THREE.FBXLoader: Unknown format.\");\n }\n if (getFbxVersion(FBXText) < 7e3) {\n throw new Error(\"THREE.FBXLoader: FBX version not supported, FileVersion: \" + getFbxVersion(FBXText));\n }\n fbxTree = new TextParser().parse(FBXText);\n }\n const textureLoader = new TextureLoader(this.manager).setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin);\n return new FBXTreeParser(textureLoader, this.manager).parse(fbxTree);\n }\n}\nclass FBXTreeParser {\n constructor(textureLoader, manager) {\n this.textureLoader = textureLoader;\n this.manager = manager;\n }\n parse() {\n connections = this.parseConnections();\n const images = this.parseImages();\n const textures = this.parseTextures(images);\n const materials = this.parseMaterials(textures);\n const deformers = this.parseDeformers();\n const geometryMap = new GeometryParser().parse(deformers);\n this.parseScene(deformers, geometryMap, materials);\n return sceneGraph;\n }\n // Parses FBXTree.Connections which holds parent-child connections between objects (e.g. material -> texture, model->geometry )\n // and details the connection type\n parseConnections() {\n const connectionMap = /* @__PURE__ */ new Map();\n if (\"Connections\" in fbxTree) {\n const rawConnections = fbxTree.Connections.connections;\n rawConnections.forEach(function(rawConnection) {\n const fromID = rawConnection[0];\n const toID = rawConnection[1];\n const relationship = rawConnection[2];\n if (!connectionMap.has(fromID)) {\n connectionMap.set(fromID, {\n parents: [],\n children: []\n });\n }\n const parentRelationship = { ID: toID, relationship };\n connectionMap.get(fromID).parents.push(parentRelationship);\n if (!connectionMap.has(toID)) {\n connectionMap.set(toID, {\n parents: [],\n children: []\n });\n }\n const childRelationship = { ID: fromID, relationship };\n connectionMap.get(toID).children.push(childRelationship);\n });\n }\n return connectionMap;\n }\n // Parse FBXTree.Objects.Video for embedded image data\n // These images are connected to textures in FBXTree.Objects.Textures\n // via FBXTree.Connections.\n parseImages() {\n const images = {};\n const blobs = {};\n if (\"Video\" in fbxTree.Objects) {\n const videoNodes = fbxTree.Objects.Video;\n for (const nodeID in videoNodes) {\n const videoNode = videoNodes[nodeID];\n const id = parseInt(nodeID);\n images[id] = videoNode.RelativeFilename || videoNode.Filename;\n if (\"Content\" in videoNode) {\n const arrayBufferContent = videoNode.Content instanceof ArrayBuffer && videoNode.Content.byteLength > 0;\n const base64Content = typeof videoNode.Content === \"string\" && videoNode.Content !== \"\";\n if (arrayBufferContent || base64Content) {\n const image = this.parseImage(videoNodes[nodeID]);\n blobs[videoNode.RelativeFilename || videoNode.Filename] = image;\n }\n }\n }\n }\n for (const id in images) {\n const filename = images[id];\n if (blobs[filename] !== void 0)\n images[id] = blobs[filename];\n else\n images[id] = images[id].split(\"\\\\\").pop();\n }\n return images;\n }\n // Parse embedded image data in FBXTree.Video.Content\n parseImage(videoNode) {\n const content = videoNode.Content;\n const fileName = videoNode.RelativeFilename || videoNode.Filename;\n const extension = fileName.slice(fileName.lastIndexOf(\".\") + 1).toLowerCase();\n let type;\n switch (extension) {\n case \"bmp\":\n type = \"image/bmp\";\n break;\n case \"jpg\":\n case \"jpeg\":\n type = \"image/jpeg\";\n break;\n case \"png\":\n type = \"image/png\";\n break;\n case \"tif\":\n type = \"image/tiff\";\n break;\n case \"tga\":\n if (this.manager.getHandler(\".tga\") === null) {\n console.warn(\"FBXLoader: TGA loader not found, skipping \", fileName);\n }\n type = \"image/tga\";\n break;\n default:\n console.warn('FBXLoader: Image type \"' + extension + '\" is not supported.');\n return;\n }\n if (typeof content === \"string\") {\n return \"data:\" + type + \";base64,\" + content;\n } else {\n const array = new Uint8Array(content);\n return window.URL.createObjectURL(new Blob([array], { type }));\n }\n }\n // Parse nodes in FBXTree.Objects.Texture\n // These contain details such as UV scaling, cropping, rotation etc and are connected\n // to images in FBXTree.Objects.Video\n parseTextures(images) {\n const textureMap = /* @__PURE__ */ new Map();\n if (\"Texture\" in fbxTree.Objects) {\n const textureNodes = fbxTree.Objects.Texture;\n for (const nodeID in textureNodes) {\n const texture = this.parseTexture(textureNodes[nodeID], images);\n textureMap.set(parseInt(nodeID), texture);\n }\n }\n return textureMap;\n }\n // Parse individual node in FBXTree.Objects.Texture\n parseTexture(textureNode, images) {\n const texture = this.loadTexture(textureNode, images);\n texture.ID = textureNode.id;\n texture.name = textureNode.attrName;\n const wrapModeU = textureNode.WrapModeU;\n const wrapModeV = textureNode.WrapModeV;\n const valueU = wrapModeU !== void 0 ? wrapModeU.value : 0;\n const valueV = wrapModeV !== void 0 ? wrapModeV.value : 0;\n texture.wrapS = valueU === 0 ? RepeatWrapping : ClampToEdgeWrapping;\n texture.wrapT = valueV === 0 ? RepeatWrapping : ClampToEdgeWrapping;\n if (\"Scaling\" in textureNode) {\n const values = textureNode.Scaling.value;\n texture.repeat.x = values[0];\n texture.repeat.y = values[1];\n }\n return texture;\n }\n // load a texture specified as a blob or data URI, or via an external URL using TextureLoader\n loadTexture(textureNode, images) {\n let fileName;\n const currentPath = this.textureLoader.path;\n const children = connections.get(textureNode.id).children;\n if (children !== void 0 && children.length > 0 && images[children[0].ID] !== void 0) {\n fileName = images[children[0].ID];\n if (fileName.indexOf(\"blob:\") === 0 || fileName.indexOf(\"data:\") === 0) {\n this.textureLoader.setPath(void 0);\n }\n }\n let texture;\n const extension = textureNode.FileName.slice(-3).toLowerCase();\n if (extension === \"tga\") {\n const loader = this.manager.getHandler(\".tga\");\n if (loader === null) {\n console.warn(\"FBXLoader: TGA loader not found, creating placeholder texture for\", textureNode.RelativeFilename);\n texture = new Texture();\n } else {\n loader.setPath(this.textureLoader.path);\n texture = loader.load(fileName);\n }\n } else if (extension === \"psd\") {\n console.warn(\n \"FBXLoader: PSD textures are not supported, creating placeholder texture for\",\n textureNode.RelativeFilename\n );\n texture = new Texture();\n } else {\n texture = this.textureLoader.load(fileName);\n }\n this.textureLoader.setPath(currentPath);\n return texture;\n }\n // Parse nodes in FBXTree.Objects.Material\n parseMaterials(textureMap) {\n const materialMap = /* @__PURE__ */ new Map();\n if (\"Material\" in fbxTree.Objects) {\n const materialNodes = fbxTree.Objects.Material;\n for (const nodeID in materialNodes) {\n const material = this.parseMaterial(materialNodes[nodeID], textureMap);\n if (material !== null)\n materialMap.set(parseInt(nodeID), material);\n }\n }\n return materialMap;\n }\n // Parse single node in FBXTree.Objects.Material\n // Materials are connected to texture maps in FBXTree.Objects.Textures\n // FBX format currently only supports Lambert and Phong shading models\n parseMaterial(materialNode, textureMap) {\n const ID = materialNode.id;\n const name = materialNode.attrName;\n let type = materialNode.ShadingModel;\n if (typeof type === \"object\") {\n type = type.value;\n }\n if (!connections.has(ID))\n return null;\n const parameters = this.parseParameters(materialNode, textureMap, ID);\n let material;\n switch (type.toLowerCase()) {\n case \"phong\":\n material = new MeshPhongMaterial();\n break;\n case \"lambert\":\n material = new MeshLambertMaterial();\n break;\n default:\n console.warn('THREE.FBXLoader: unknown material type \"%s\". Defaulting to MeshPhongMaterial.', type);\n material = new MeshPhongMaterial();\n break;\n }\n material.setValues(parameters);\n material.name = name;\n return material;\n }\n // Parse FBX material and return parameters suitable for a three.js material\n // Also parse the texture map and return any textures associated with the material\n parseParameters(materialNode, textureMap, ID) {\n const parameters = {};\n if (materialNode.BumpFactor) {\n parameters.bumpScale = materialNode.BumpFactor.value;\n }\n if (materialNode.Diffuse) {\n parameters.color = new Color().fromArray(materialNode.Diffuse.value);\n } else if (materialNode.DiffuseColor && (materialNode.DiffuseColor.type === \"Color\" || materialNode.DiffuseColor.type === \"ColorRGB\")) {\n parameters.color = new Color().fromArray(materialNode.DiffuseColor.value);\n }\n if (materialNode.DisplacementFactor) {\n parameters.displacementScale = materialNode.DisplacementFactor.value;\n }\n if (materialNode.Emissive) {\n parameters.emissive = new Color().fromArray(materialNode.Emissive.value);\n } else if (materialNode.EmissiveColor && (materialNode.EmissiveColor.type === \"Color\" || materialNode.EmissiveColor.type === \"ColorRGB\")) {\n parameters.emissive = new Color().fromArray(materialNode.EmissiveColor.value);\n }\n if (materialNode.EmissiveFactor) {\n parameters.emissiveIntensity = parseFloat(materialNode.EmissiveFactor.value);\n }\n if (materialNode.Opacity) {\n parameters.opacity = parseFloat(materialNode.Opacity.value);\n }\n if (parameters.opacity < 1) {\n parameters.transparent = true;\n }\n if (materialNode.ReflectionFactor) {\n parameters.reflectivity = materialNode.ReflectionFactor.value;\n }\n if (materialNode.Shininess) {\n parameters.shininess = materialNode.Shininess.value;\n }\n if (materialNode.Specular) {\n parameters.specular = new Color().fromArray(materialNode.Specular.value);\n } else if (materialNode.SpecularColor && materialNode.SpecularColor.type === \"Color\") {\n parameters.specular = new Color().fromArray(materialNode.SpecularColor.value);\n }\n const scope = this;\n connections.get(ID).children.forEach(function(child) {\n const type = child.relationship;\n switch (type) {\n case \"Bump\":\n parameters.bumpMap = scope.getTexture(textureMap, child.ID);\n break;\n case \"Maya|TEX_ao_map\":\n parameters.aoMap = scope.getTexture(textureMap, child.ID);\n break;\n case \"DiffuseColor\":\n case \"Maya|TEX_color_map\":\n parameters.map = scope.getTexture(textureMap, child.ID);\n if (parameters.map !== void 0) {\n if (\"colorSpace\" in parameters.map)\n parameters.map.colorSpace = \"srgb\";\n else\n parameters.map.encoding = 3001;\n }\n break;\n case \"DisplacementColor\":\n parameters.displacementMap = scope.getTexture(textureMap, child.ID);\n break;\n case \"EmissiveColor\":\n parameters.emissiveMap = scope.getTexture(textureMap, child.ID);\n if (parameters.emissiveMap !== void 0) {\n if (\"colorSpace\" in parameters.emissiveMap)\n parameters.emissiveMap.colorSpace = \"srgb\";\n else\n parameters.emissiveMap.encoding = 3001;\n }\n break;\n case \"NormalMap\":\n case \"Maya|TEX_normal_map\":\n parameters.normalMap = scope.getTexture(textureMap, child.ID);\n break;\n case \"ReflectionColor\":\n parameters.envMap = scope.getTexture(textureMap, child.ID);\n if (parameters.envMap !== void 0) {\n parameters.envMap.mapping = EquirectangularReflectionMapping;\n if (\"colorSpace\" in parameters.envMap)\n parameters.envMap.colorSpace = \"srgb\";\n else\n parameters.envMap.encoding = 3001;\n }\n break;\n case \"SpecularColor\":\n parameters.specularMap = scope.getTexture(textureMap, child.ID);\n if (parameters.specularMap !== void 0) {\n if (\"colorSpace\" in parameters.specularMap)\n parameters.specularMap.colorSpace = \"srgb\";\n else\n parameters.specularMap.encoding = 3001;\n }\n break;\n case \"TransparentColor\":\n case \"TransparencyFactor\":\n parameters.alphaMap = scope.getTexture(textureMap, child.ID);\n parameters.transparent = true;\n break;\n case \"AmbientColor\":\n case \"ShininessExponent\":\n case \"SpecularFactor\":\n case \"VectorDisplacementColor\":\n default:\n console.warn(\"THREE.FBXLoader: %s map is not supported in three.js, skipping texture.\", type);\n break;\n }\n });\n return parameters;\n }\n // get a texture from the textureMap for use by a material.\n getTexture(textureMap, id) {\n if (\"LayeredTexture\" in fbxTree.Objects && id in fbxTree.Objects.LayeredTexture) {\n console.warn(\"THREE.FBXLoader: layered textures are not supported in three.js. Discarding all but first layer.\");\n id = connections.get(id).children[0].ID;\n }\n return textureMap.get(id);\n }\n // Parse nodes in FBXTree.Objects.Deformer\n // Deformer node can contain skinning or Vertex Cache animation data, however only skinning is supported here\n // Generates map of Skeleton-like objects for use later when generating and binding skeletons.\n parseDeformers() {\n const skeletons = {};\n const morphTargets = {};\n if (\"Deformer\" in fbxTree.Objects) {\n const DeformerNodes = fbxTree.Objects.Deformer;\n for (const nodeID in DeformerNodes) {\n const deformerNode = DeformerNodes[nodeID];\n const relationships = connections.get(parseInt(nodeID));\n if (deformerNode.attrType === \"Skin\") {\n const skeleton = this.parseSkeleton(relationships, DeformerNodes);\n skeleton.ID = nodeID;\n if (relationships.parents.length > 1) {\n console.warn(\"THREE.FBXLoader: skeleton attached to more than one geometry is not supported.\");\n }\n skeleton.geometryID = relationships.parents[0].ID;\n skeletons[nodeID] = skeleton;\n } else if (deformerNode.attrType === \"BlendShape\") {\n const morphTarget = {\n id: nodeID\n };\n morphTarget.rawTargets = this.parseMorphTargets(relationships, DeformerNodes);\n morphTarget.id = nodeID;\n if (relationships.parents.length > 1) {\n console.warn(\"THREE.FBXLoader: morph target attached to more than one geometry is not supported.\");\n }\n morphTargets[nodeID] = morphTarget;\n }\n }\n }\n return {\n skeletons,\n morphTargets\n };\n }\n // Parse single nodes in FBXTree.Objects.Deformer\n // The top level skeleton node has type 'Skin' and sub nodes have type 'Cluster'\n // Each skin node represents a skeleton and each cluster node represents a bone\n parseSkeleton(relationships, deformerNodes) {\n const rawBones = [];\n relationships.children.forEach(function(child) {\n const boneNode = deformerNodes[child.ID];\n if (boneNode.attrType !== \"Cluster\")\n return;\n const rawBone = {\n ID: child.ID,\n indices: [],\n weights: [],\n transformLink: new Matrix4().fromArray(boneNode.TransformLink.a)\n // transform: new Matrix4().fromArray( boneNode.Transform.a ),\n // linkMode: boneNode.Mode,\n };\n if (\"Indexes\" in boneNode) {\n rawBone.indices = boneNode.Indexes.a;\n rawBone.weights = boneNode.Weights.a;\n }\n rawBones.push(rawBone);\n });\n return {\n rawBones,\n bones: []\n };\n }\n // The top level morph deformer node has type \"BlendShape\" and sub nodes have type \"BlendShapeChannel\"\n parseMorphTargets(relationships, deformerNodes) {\n const rawMorphTargets = [];\n for (let i = 0; i < relationships.children.length; i++) {\n const child = relationships.children[i];\n const morphTargetNode = deformerNodes[child.ID];\n const rawMorphTarget = {\n name: morphTargetNode.attrName,\n initialWeight: morphTargetNode.DeformPercent,\n id: morphTargetNode.id,\n fullWeights: morphTargetNode.FullWeights.a\n };\n if (morphTargetNode.attrType !== \"BlendShapeChannel\")\n return;\n rawMorphTarget.geoID = connections.get(parseInt(child.ID)).children.filter(function(child2) {\n return child2.relationship === void 0;\n })[0].ID;\n rawMorphTargets.push(rawMorphTarget);\n }\n return rawMorphTargets;\n }\n // create the main Group() to be returned by the loader\n parseScene(deformers, geometryMap, materialMap) {\n sceneGraph = new Group();\n const modelMap = this.parseModels(deformers.skeletons, geometryMap, materialMap);\n const modelNodes = fbxTree.Objects.Model;\n const scope = this;\n modelMap.forEach(function(model) {\n const modelNode = modelNodes[model.ID];\n scope.setLookAtProperties(model, modelNode);\n const parentConnections = connections.get(model.ID).parents;\n parentConnections.forEach(function(connection) {\n const parent = modelMap.get(connection.ID);\n if (parent !== void 0)\n parent.add(model);\n });\n if (model.parent === null) {\n sceneGraph.add(model);\n }\n });\n this.bindSkeleton(deformers.skeletons, geometryMap, modelMap);\n this.createAmbientLight();\n sceneGraph.traverse(function(node) {\n if (node.userData.transformData) {\n if (node.parent) {\n node.userData.transformData.parentMatrix = node.parent.matrix;\n node.userData.transformData.parentMatrixWorld = node.parent.matrixWorld;\n }\n const transform = generateTransform(node.userData.transformData);\n node.applyMatrix4(transform);\n node.updateWorldMatrix();\n }\n });\n const animations = new AnimationParser().parse();\n if (sceneGraph.children.length === 1 && sceneGraph.children[0].isGroup) {\n sceneGraph.children[0].animations = animations;\n sceneGraph = sceneGraph.children[0];\n }\n sceneGraph.animations = animations;\n }\n // parse nodes in FBXTree.Objects.Model\n parseModels(skeletons, geometryMap, materialMap) {\n const modelMap = /* @__PURE__ */ new Map();\n const modelNodes = fbxTree.Objects.Model;\n for (const nodeID in modelNodes) {\n const id = parseInt(nodeID);\n const node = modelNodes[nodeID];\n const relationships = connections.get(id);\n let model = this.buildSkeleton(relationships, skeletons, id, node.attrName);\n if (!model) {\n switch (node.attrType) {\n case \"Camera\":\n model = this.createCamera(relationships);\n break;\n case \"Light\":\n model = this.createLight(relationships);\n break;\n case \"Mesh\":\n model = this.createMesh(relationships, geometryMap, materialMap);\n break;\n case \"NurbsCurve\":\n model = this.createCurve(relationships, geometryMap);\n break;\n case \"LimbNode\":\n case \"Root\":\n model = new Bone();\n break;\n case \"Null\":\n default:\n model = new Group();\n break;\n }\n model.name = node.attrName ? PropertyBinding.sanitizeNodeName(node.attrName) : \"\";\n model.ID = id;\n }\n this.getTransformData(model, node);\n modelMap.set(id, model);\n }\n return modelMap;\n }\n buildSkeleton(relationships, skeletons, id, name) {\n let bone = null;\n relationships.parents.forEach(function(parent) {\n for (const ID in skeletons) {\n const skeleton = skeletons[ID];\n skeleton.rawBones.forEach(function(rawBone, i) {\n if (rawBone.ID === parent.ID) {\n const subBone = bone;\n bone = new Bone();\n bone.matrixWorld.copy(rawBone.transformLink);\n bone.name = name ? PropertyBinding.sanitizeNodeName(name) : \"\";\n bone.ID = id;\n skeleton.bones[i] = bone;\n if (subBone !== null) {\n bone.add(subBone);\n }\n }\n });\n }\n });\n return bone;\n }\n // create a PerspectiveCamera or OrthographicCamera\n createCamera(relationships) {\n let model;\n let cameraAttribute;\n relationships.children.forEach(function(child) {\n const attr = fbxTree.Objects.NodeAttribute[child.ID];\n if (attr !== void 0) {\n cameraAttribute = attr;\n }\n });\n if (cameraAttribute === void 0) {\n model = new Object3D();\n } else {\n let type = 0;\n if (cameraAttribute.CameraProjectionType !== void 0 && cameraAttribute.CameraProjectionType.value === 1) {\n type = 1;\n }\n let nearClippingPlane = 1;\n if (cameraAttribute.NearPlane !== void 0) {\n nearClippingPlane = cameraAttribute.NearPlane.value / 1e3;\n }\n let farClippingPlane = 1e3;\n if (cameraAttribute.FarPlane !== void 0) {\n farClippingPlane = cameraAttribute.FarPlane.value / 1e3;\n }\n let width = window.innerWidth;\n let height = window.innerHeight;\n if (cameraAttribute.AspectWidth !== void 0 && cameraAttribute.AspectHeight !== void 0) {\n width = cameraAttribute.AspectWidth.value;\n height = cameraAttribute.AspectHeight.value;\n }\n const aspect = width / height;\n let fov = 45;\n if (cameraAttribute.FieldOfView !== void 0) {\n fov = cameraAttribute.FieldOfView.value;\n }\n const focalLength = cameraAttribute.FocalLength ? cameraAttribute.FocalLength.value : null;\n switch (type) {\n case 0:\n model = new PerspectiveCamera(fov, aspect, nearClippingPlane, farClippingPlane);\n if (focalLength !== null)\n model.setFocalLength(focalLength);\n break;\n case 1:\n model = new OrthographicCamera(\n -width / 2,\n width / 2,\n height / 2,\n -height / 2,\n nearClippingPlane,\n farClippingPlane\n );\n break;\n default:\n console.warn(\"THREE.FBXLoader: Unknown camera type \" + type + \".\");\n model = new Object3D();\n break;\n }\n }\n return model;\n }\n // Create a DirectionalLight, PointLight or SpotLight\n createLight(relationships) {\n let model;\n let lightAttribute;\n relationships.children.forEach(function(child) {\n const attr = fbxTree.Objects.NodeAttribute[child.ID];\n if (attr !== void 0) {\n lightAttribute = attr;\n }\n });\n if (lightAttribute === void 0) {\n model = new Object3D();\n } else {\n let type;\n if (lightAttribute.LightType === void 0) {\n type = 0;\n } else {\n type = lightAttribute.LightType.value;\n }\n let color = 16777215;\n if (lightAttribute.Color !== void 0) {\n color = new Color().fromArray(lightAttribute.Color.value);\n }\n let intensity = lightAttribute.Intensity === void 0 ? 1 : lightAttribute.Intensity.value / 100;\n if (lightAttribute.CastLightOnObject !== void 0 && lightAttribute.CastLightOnObject.value === 0) {\n intensity = 0;\n }\n let distance = 0;\n if (lightAttribute.FarAttenuationEnd !== void 0) {\n if (lightAttribute.EnableFarAttenuation !== void 0 && lightAttribute.EnableFarAttenuation.value === 0) {\n distance = 0;\n } else {\n distance = lightAttribute.FarAttenuationEnd.value;\n }\n }\n const decay = 1;\n switch (type) {\n case 0:\n model = new PointLight(color, intensity, distance, decay);\n break;\n case 1:\n model = new DirectionalLight(color, intensity);\n break;\n case 2:\n let angle = Math.PI / 3;\n if (lightAttribute.InnerAngle !== void 0) {\n angle = MathUtils.degToRad(lightAttribute.InnerAngle.value);\n }\n let penumbra = 0;\n if (lightAttribute.OuterAngle !== void 0) {\n penumbra = MathUtils.degToRad(lightAttribute.OuterAngle.value);\n penumbra = Math.max(penumbra, 1);\n }\n model = new SpotLight(color, intensity, distance, angle, penumbra, decay);\n break;\n default:\n console.warn(\n \"THREE.FBXLoader: Unknown light type \" + lightAttribute.LightType.value + \", defaulting to a PointLight.\"\n );\n model = new PointLight(color, intensity);\n break;\n }\n if (lightAttribute.CastShadows !== void 0 && lightAttribute.CastShadows.value === 1) {\n model.castShadow = true;\n }\n }\n return model;\n }\n createMesh(relationships, geometryMap, materialMap) {\n let model;\n let geometry = null;\n let material = null;\n const materials = [];\n relationships.children.forEach(function(child) {\n if (geometryMap.has(child.ID)) {\n geometry = geometryMap.get(child.ID);\n }\n if (materialMap.has(child.ID)) {\n materials.push(materialMap.get(child.ID));\n }\n });\n if (materials.length > 1) {\n material = materials;\n } else if (materials.length > 0) {\n material = materials[0];\n } else {\n material = new MeshPhongMaterial({ color: 13421772 });\n materials.push(material);\n }\n if (\"color\" in geometry.attributes) {\n materials.forEach(function(material2) {\n material2.vertexColors = true;\n });\n }\n if (geometry.FBX_Deformer) {\n model = new SkinnedMesh(geometry, material);\n model.normalizeSkinWeights();\n } else {\n model = new Mesh(geometry, material);\n }\n return model;\n }\n createCurve(relationships, geometryMap) {\n const geometry = relationships.children.reduce(function(geo, child) {\n if (geometryMap.has(child.ID))\n geo = geometryMap.get(child.ID);\n return geo;\n }, null);\n const material = new LineBasicMaterial({ color: 3342591, linewidth: 1 });\n return new Line(geometry, material);\n }\n // parse the model node for transform data\n getTransformData(model, modelNode) {\n const transformData = {};\n if (\"InheritType\" in modelNode)\n transformData.inheritType = parseInt(modelNode.InheritType.value);\n if (\"RotationOrder\" in modelNode)\n transformData.eulerOrder = getEulerOrder(modelNode.RotationOrder.value);\n else\n transformData.eulerOrder = \"ZYX\";\n if (\"Lcl_Translation\" in modelNode)\n transformData.translation = modelNode.Lcl_Translation.value;\n if (\"PreRotation\" in modelNode)\n transformData.preRotation = modelNode.PreRotation.value;\n if (\"Lcl_Rotation\" in modelNode)\n transformData.rotation = modelNode.Lcl_Rotation.value;\n if (\"PostRotation\" in modelNode)\n transformData.postRotation = modelNode.PostRotation.value;\n if (\"Lcl_Scaling\" in modelNode)\n transformData.scale = modelNode.Lcl_Scaling.value;\n if (\"ScalingOffset\" in modelNode)\n transformData.scalingOffset = modelNode.ScalingOffset.value;\n if (\"ScalingPivot\" in modelNode)\n transformData.scalingPivot = modelNode.ScalingPivot.value;\n if (\"RotationOffset\" in modelNode)\n transformData.rotationOffset = modelNode.RotationOffset.value;\n if (\"RotationPivot\" in modelNode)\n transformData.rotationPivot = modelNode.RotationPivot.value;\n model.userData.transformData = transformData;\n }\n setLookAtProperties(model, modelNode) {\n if (\"LookAtProperty\" in modelNode) {\n const children = connections.get(model.ID).children;\n children.forEach(function(child) {\n if (child.relationship === \"LookAtProperty\") {\n const lookAtTarget = fbxTree.Objects.Model[child.ID];\n if (\"Lcl_Translation\" in lookAtTarget) {\n const pos = lookAtTarget.Lcl_Translation.value;\n if (model.target !== void 0) {\n model.target.position.fromArray(pos);\n sceneGraph.add(model.target);\n } else {\n model.lookAt(new Vector3().fromArray(pos));\n }\n }\n }\n });\n }\n }\n bindSkeleton(skeletons, geometryMap, modelMap) {\n const bindMatrices = this.parsePoseNodes();\n for (const ID in skeletons) {\n const skeleton = skeletons[ID];\n const parents = connections.get(parseInt(skeleton.ID)).parents;\n parents.forEach(function(parent) {\n if (geometryMap.has(parent.ID)) {\n const geoID = parent.ID;\n const geoRelationships = connections.get(geoID);\n geoRelationships.parents.forEach(function(geoConnParent) {\n if (modelMap.has(geoConnParent.ID)) {\n const model = modelMap.get(geoConnParent.ID);\n model.bind(new Skeleton(skeleton.bones), bindMatrices[geoConnParent.ID]);\n }\n });\n }\n });\n }\n }\n parsePoseNodes() {\n const bindMatrices = {};\n if (\"Pose\" in fbxTree.Objects) {\n const BindPoseNode = fbxTree.Objects.Pose;\n for (const nodeID in BindPoseNode) {\n if (BindPoseNode[nodeID].attrType === \"BindPose\" && BindPoseNode[nodeID].NbPoseNodes > 0) {\n const poseNodes = BindPoseNode[nodeID].PoseNode;\n if (Array.isArray(poseNodes)) {\n poseNodes.forEach(function(poseNode) {\n bindMatrices[poseNode.Node] = new Matrix4().fromArray(poseNode.Matrix.a);\n });\n } else {\n bindMatrices[poseNodes.Node] = new Matrix4().fromArray(poseNodes.Matrix.a);\n }\n }\n }\n }\n return bindMatrices;\n }\n // Parse ambient color in FBXTree.GlobalSettings - if it's not set to black (default), create an ambient light\n createAmbientLight() {\n if (\"GlobalSettings\" in fbxTree && \"AmbientColor\" in fbxTree.GlobalSettings) {\n const ambientColor = fbxTree.GlobalSettings.AmbientColor.value;\n const r = ambientColor[0];\n const g = ambientColor[1];\n const b = ambientColor[2];\n if (r !== 0 || g !== 0 || b !== 0) {\n const color = new Color(r, g, b);\n sceneGraph.add(new AmbientLight(color, 1));\n }\n }\n }\n}\nclass GeometryParser {\n // Parse nodes in FBXTree.Objects.Geometry\n parse(deformers) {\n const geometryMap = /* @__PURE__ */ new Map();\n if (\"Geometry\" in fbxTree.Objects) {\n const geoNodes = fbxTree.Objects.Geometry;\n for (const nodeID in geoNodes) {\n const relationships = connections.get(parseInt(nodeID));\n const geo = this.parseGeometry(relationships, geoNodes[nodeID], deformers);\n geometryMap.set(parseInt(nodeID), geo);\n }\n }\n return geometryMap;\n }\n // Parse single node in FBXTree.Objects.Geometry\n parseGeometry(relationships, geoNode, deformers) {\n switch (geoNode.attrType) {\n case \"Mesh\":\n return this.parseMeshGeometry(relationships, geoNode, deformers);\n case \"NurbsCurve\":\n return this.parseNurbsGeometry(geoNode);\n }\n }\n // Parse single node mesh geometry in FBXTree.Objects.Geometry\n parseMeshGeometry(relationships, geoNode, deformers) {\n const skeletons = deformers.skeletons;\n const morphTargets = [];\n const modelNodes = relationships.parents.map(function(parent) {\n return fbxTree.Objects.Model[parent.ID];\n });\n if (modelNodes.length === 0)\n return;\n const skeleton = relationships.children.reduce(function(skeleton2, child) {\n if (skeletons[child.ID] !== void 0)\n skeleton2 = skeletons[child.ID];\n return skeleton2;\n }, null);\n relationships.children.forEach(function(child) {\n if (deformers.morphTargets[child.ID] !== void 0) {\n morphTargets.push(deformers.morphTargets[child.ID]);\n }\n });\n const modelNode = modelNodes[0];\n const transformData = {};\n if (\"RotationOrder\" in modelNode)\n transformData.eulerOrder = getEulerOrder(modelNode.RotationOrder.value);\n if (\"InheritType\" in modelNode)\n transformData.inheritType = parseInt(modelNode.InheritType.value);\n if (\"GeometricTranslation\" in modelNode)\n transformData.translation = modelNode.GeometricTranslation.value;\n if (\"GeometricRotation\" in modelNode)\n transformData.rotation = modelNode.GeometricRotation.value;\n if (\"GeometricScaling\" in modelNode)\n transformData.scale = modelNode.GeometricScaling.value;\n const transform = generateTransform(transformData);\n return this.genGeometry(geoNode, skeleton, morphTargets, transform);\n }\n // Generate a BufferGeometry from a node in FBXTree.Objects.Geometry\n genGeometry(geoNode, skeleton, morphTargets, preTransform) {\n const geo = new BufferGeometry();\n if (geoNode.attrName)\n geo.name = geoNode.attrName;\n const geoInfo = this.parseGeoNode(geoNode, skeleton);\n const buffers = this.genBuffers(geoInfo);\n const positionAttribute = new Float32BufferAttribute(buffers.vertex, 3);\n positionAttribute.applyMatrix4(preTransform);\n geo.setAttribute(\"position\", positionAttribute);\n if (buffers.colors.length > 0) {\n geo.setAttribute(\"color\", new Float32BufferAttribute(buffers.colors, 3));\n }\n if (skeleton) {\n geo.setAttribute(\"skinIndex\", new Uint16BufferAttribute(buffers.weightsIndices, 4));\n geo.setAttribute(\"skinWeight\", new Float32BufferAttribute(buffers.vertexWeights, 4));\n geo.FBX_Deformer = skeleton;\n }\n if (buffers.normal.length > 0) {\n const normalMatrix = new Matrix3().getNormalMatrix(preTransform);\n const normalAttribute = new Float32BufferAttribute(buffers.normal, 3);\n normalAttribute.applyNormalMatrix(normalMatrix);\n geo.setAttribute(\"normal\", normalAttribute);\n }\n buffers.uvs.forEach(function(uvBuffer, i) {\n if (UV1 === \"uv2\")\n i++;\n const name = i === 0 ? \"uv\" : `uv${i}`;\n geo.setAttribute(name, new Float32BufferAttribute(buffers.uvs[i], 2));\n });\n if (geoInfo.material && geoInfo.material.mappingType !== \"AllSame\") {\n let prevMaterialIndex = buffers.materialIndex[0];\n let startIndex = 0;\n buffers.materialIndex.forEach(function(currentIndex, i) {\n if (currentIndex !== prevMaterialIndex) {\n geo.addGroup(startIndex, i - startIndex, prevMaterialIndex);\n prevMaterialIndex = currentIndex;\n startIndex = i;\n }\n });\n if (geo.groups.length > 0) {\n const lastGroup = geo.groups[geo.groups.length - 1];\n const lastIndex = lastGroup.start + lastGroup.count;\n if (lastIndex !== buffers.materialIndex.length) {\n geo.addGroup(lastIndex, buffers.materialIndex.length - lastIndex, prevMaterialIndex);\n }\n }\n if (geo.groups.length === 0) {\n geo.addGroup(0, buffers.materialIndex.length, buffers.materialIndex[0]);\n }\n }\n this.addMorphTargets(geo, geoNode, morphTargets, preTransform);\n return geo;\n }\n parseGeoNode(geoNode, skeleton) {\n const geoInfo = {};\n geoInfo.vertexPositions = geoNode.Vertices !== void 0 ? geoNode.Vertices.a : [];\n geoInfo.vertexIndices = geoNode.PolygonVertexIndex !== void 0 ? geoNode.PolygonVertexIndex.a : [];\n if (geoNode.LayerElementColor) {\n geoInfo.color = this.parseVertexColors(geoNode.LayerElementColor[0]);\n }\n if (geoNode.LayerElementMaterial) {\n geoInfo.material = this.parseMaterialIndices(geoNode.LayerElementMaterial[0]);\n }\n if (geoNode.LayerElementNormal) {\n geoInfo.normal = this.parseNormals(geoNode.LayerElementNormal[0]);\n }\n if (geoNode.LayerElementUV) {\n geoInfo.uv = [];\n let i = 0;\n while (geoNode.LayerElementUV[i]) {\n if (geoNode.LayerElementUV[i].UV) {\n geoInfo.uv.push(this.parseUVs(geoNode.LayerElementUV[i]));\n }\n i++;\n }\n }\n geoInfo.weightTable = {};\n if (skeleton !== null) {\n geoInfo.skeleton = skeleton;\n skeleton.rawBones.forEach(function(rawBone, i) {\n rawBone.indices.forEach(function(index, j) {\n if (geoInfo.weightTable[index] === void 0)\n geoInfo.weightTable[index] = [];\n geoInfo.weightTable[index].push({\n id: i,\n weight: rawBone.weights[j]\n });\n });\n });\n }\n return geoInfo;\n }\n genBuffers(geoInfo) {\n const buffers = {\n vertex: [],\n normal: [],\n colors: [],\n uvs: [],\n materialIndex: [],\n vertexWeights: [],\n weightsIndices: []\n };\n let polygonIndex = 0;\n let faceLength = 0;\n let displayedWeightsWarning = false;\n let facePositionIndexes = [];\n let faceNormals = [];\n let faceColors = [];\n let faceUVs = [];\n let faceWeights = [];\n let faceWeightIndices = [];\n const scope = this;\n geoInfo.vertexIndices.forEach(function(vertexIndex, polygonVertexIndex) {\n let materialIndex;\n let endOfFace = false;\n if (vertexIndex < 0) {\n vertexIndex = vertexIndex ^ -1;\n endOfFace = true;\n }\n let weightIndices = [];\n let weights = [];\n facePositionIndexes.push(vertexIndex * 3, vertexIndex * 3 + 1, vertexIndex * 3 + 2);\n if (geoInfo.color) {\n const data = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.color);\n faceColors.push(data[0], data[1], data[2]);\n }\n if (geoInfo.skeleton) {\n if (geoInfo.weightTable[vertexIndex] !== void 0) {\n geoInfo.weightTable[vertexIndex].forEach(function(wt) {\n weights.push(wt.weight);\n weightIndices.push(wt.id);\n });\n }\n if (weights.length > 4) {\n if (!displayedWeightsWarning) {\n console.warn(\n \"THREE.FBXLoader: Vertex has more than 4 skinning weights assigned to vertex. Deleting additional weights.\"\n );\n displayedWeightsWarning = true;\n }\n const wIndex = [0, 0, 0, 0];\n const Weight = [0, 0, 0, 0];\n weights.forEach(function(weight, weightIndex) {\n let currentWeight = weight;\n let currentIndex = weightIndices[weightIndex];\n Weight.forEach(function(comparedWeight, comparedWeightIndex, comparedWeightArray) {\n if (currentWeight > comparedWeight) {\n comparedWeightArray[comparedWeightIndex] = currentWeight;\n currentWeight = comparedWeight;\n const tmp = wIndex[comparedWeightIndex];\n wIndex[comparedWeightIndex] = currentIndex;\n currentIndex = tmp;\n }\n });\n });\n weightIndices = wIndex;\n weights = Weight;\n }\n while (weights.length < 4) {\n weights.push(0);\n weightIndices.push(0);\n }\n for (let i = 0; i < 4; ++i) {\n faceWeights.push(weights[i]);\n faceWeightIndices.push(weightIndices[i]);\n }\n }\n if (geoInfo.normal) {\n const data = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.normal);\n faceNormals.push(data[0], data[1], data[2]);\n }\n if (geoInfo.material && geoInfo.material.mappingType !== \"AllSame\") {\n materialIndex = getData(polygonVertexIndex, polygonIndex, vertexIndex, geoInfo.material)[0];\n }\n if (geoInfo.uv) {\n geoInfo.uv.forEach(function(uv, i) {\n const data = getData(polygonVertexIndex, polygonIndex, vertexIndex, uv);\n if (faceUVs[i] === void 0) {\n faceUVs[i] = [];\n }\n faceUVs[i].push(data[0]);\n faceUVs[i].push(data[1]);\n });\n }\n faceLength++;\n if (endOfFace) {\n scope.genFace(\n buffers,\n geoInfo,\n facePositionIndexes,\n materialIndex,\n faceNormals,\n faceColors,\n faceUVs,\n faceWeights,\n faceWeightIndices,\n faceLength\n );\n polygonIndex++;\n faceLength = 0;\n facePositionIndexes = [];\n faceNormals = [];\n faceColors = [];\n faceUVs = [];\n faceWeights = [];\n faceWeightIndices = [];\n }\n });\n return buffers;\n }\n // Generate data for a single face in a geometry. If the face is a quad then split it into 2 tris\n genFace(buffers, geoInfo, facePositionIndexes, materialIndex, faceNormals, faceColors, faceUVs, faceWeights, faceWeightIndices, faceLength) {\n for (let i = 2; i < faceLength; i++) {\n buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[0]]);\n buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[1]]);\n buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[2]]);\n buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[(i - 1) * 3]]);\n buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[(i - 1) * 3 + 1]]);\n buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[(i - 1) * 3 + 2]]);\n buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i * 3]]);\n buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i * 3 + 1]]);\n buffers.vertex.push(geoInfo.vertexPositions[facePositionIndexes[i * 3 + 2]]);\n if (geoInfo.skeleton) {\n buffers.vertexWeights.push(faceWeights[0]);\n buffers.vertexWeights.push(faceWeights[1]);\n buffers.vertexWeights.push(faceWeights[2]);\n buffers.vertexWeights.push(faceWeights[3]);\n buffers.vertexWeights.push(faceWeights[(i - 1) * 4]);\n buffers.vertexWeights.push(faceWeights[(i - 1) * 4 + 1]);\n buffers.vertexWeights.push(faceWeights[(i - 1) * 4 + 2]);\n buffers.vertexWeights.push(faceWeights[(i - 1) * 4 + 3]);\n buffers.vertexWeights.push(faceWeights[i * 4]);\n buffers.vertexWeights.push(faceWeights[i * 4 + 1]);\n buffers.vertexWeights.push(faceWeights[i * 4 + 2]);\n buffers.vertexWeights.push(faceWeights[i * 4 + 3]);\n buffers.weightsIndices.push(faceWeightIndices[0]);\n buffers.weightsIndices.push(faceWeightIndices[1]);\n buffers.weightsIndices.push(faceWeightIndices[2]);\n buffers.weightsIndices.push(faceWeightIndices[3]);\n buffers.weightsIndices.push(faceWeightIndices[(i - 1) * 4]);\n buffers.weightsIndices.push(faceWeightIndices[(i - 1) * 4 + 1]);\n buffers.weightsIndices.push(faceWeightIndices[(i - 1) * 4 + 2]);\n buffers.weightsIndices.push(faceWeightIndices[(i - 1) * 4 + 3]);\n buffers.weightsIndices.push(faceWeightIndices[i * 4]);\n buffers.weightsIndices.push(faceWeightIndices[i * 4 + 1]);\n buffers.weightsIndices.push(faceWeightIndices[i * 4 + 2]);\n buffers.weightsIndices.push(faceWeightIndices[i * 4 + 3]);\n }\n if (geoInfo.color) {\n buffers.colors.push(faceColors[0]);\n buffers.colors.push(faceColors[1]);\n buffers.colors.push(faceColors[2]);\n buffers.colors.push(faceColors[(i - 1) * 3]);\n buffers.colors.push(faceColors[(i - 1) * 3 + 1]);\n buffers.colors.push(faceColors[(i - 1) * 3 + 2]);\n buffers.colors.push(faceColors[i * 3]);\n buffers.colors.push(faceColors[i * 3 + 1]);\n buffers.colors.push(faceColors[i * 3 + 2]);\n }\n if (geoInfo.material && geoInfo.material.mappingType !== \"AllSame\") {\n buffers.materialIndex.push(materialIndex);\n buffers.materialIndex.push(materialIndex);\n buffers.materialIndex.push(materialIndex);\n }\n if (geoInfo.normal) {\n buffers.normal.push(faceNormals[0]);\n buffers.normal.push(faceNormals[1]);\n buffers.normal.push(faceNormals[2]);\n buffers.normal.push(faceNormals[(i - 1) * 3]);\n buffers.normal.push(faceNormals[(i - 1) * 3 + 1]);\n buffers.normal.push(faceNormals[(i - 1) * 3 + 2]);\n buffers.normal.push(faceNormals[i * 3]);\n buffers.normal.push(faceNormals[i * 3 + 1]);\n buffers.normal.push(faceNormals[i * 3 + 2]);\n }\n if (geoInfo.uv) {\n geoInfo.uv.forEach(function(uv, j) {\n if (buffers.uvs[j] === void 0)\n buffers.uvs[j] = [];\n buffers.uvs[j].push(faceUVs[j][0]);\n buffers.uvs[j].push(faceUVs[j][1]);\n buffers.uvs[j].push(faceUVs[j][(i - 1) * 2]);\n buffers.uvs[j].push(faceUVs[j][(i - 1) * 2 + 1]);\n buffers.uvs[j].push(faceUVs[j][i * 2]);\n buffers.uvs[j].push(faceUVs[j][i * 2 + 1]);\n });\n }\n }\n }\n addMorphTargets(parentGeo, parentGeoNode, morphTargets, preTransform) {\n if (morphTargets.length === 0)\n return;\n parentGeo.morphTargetsRelative = true;\n parentGeo.morphAttributes.position = [];\n const scope = this;\n morphTargets.forEach(function(morphTarget) {\n morphTarget.rawTargets.forEach(function(rawTarget) {\n const morphGeoNode = fbxTree.Objects.Geometry[rawTarget.geoID];\n if (morphGeoNode !== void 0) {\n scope.genMorphGeometry(parentGeo, parentGeoNode, morphGeoNode, preTransform, rawTarget.name);\n }\n });\n });\n }\n // a morph geometry node is similar to a standard node, and the node is also contained\n // in FBXTree.Objects.Geometry, however it can only have attributes for position, normal\n // and a special attribute Index defining which vertices of the original geometry are affected\n // Normal and position attributes only have data for the vertices that are affected by the morph\n genMorphGeometry(parentGeo, parentGeoNode, morphGeoNode, preTransform, name) {\n const vertexIndices = parentGeoNode.PolygonVertexIndex !== void 0 ? parentGeoNode.PolygonVertexIndex.a : [];\n const morphPositionsSparse = morphGeoNode.Vertices !== void 0 ? morphGeoNode.Vertices.a : [];\n const indices = morphGeoNode.Indexes !== void 0 ? morphGeoNode.Indexes.a : [];\n const length = parentGeo.attributes.position.count * 3;\n const morphPositions = new Float32Array(length);\n for (let i = 0; i < indices.length; i++) {\n const morphIndex = indices[i] * 3;\n morphPositions[morphIndex] = morphPositionsSparse[i * 3];\n morphPositions[morphIndex + 1] = morphPositionsSparse[i * 3 + 1];\n morphPositions[morphIndex + 2] = morphPositionsSparse[i * 3 + 2];\n }\n const morphGeoInfo = {\n vertexIndices,\n vertexPositions: morphPositions\n };\n const morphBuffers = this.genBuffers(morphGeoInfo);\n const positionAttribute = new Float32BufferAttribute(morphBuffers.vertex, 3);\n positionAttribute.name = name || morphGeoNode.attrName;\n positionAttribute.applyMatrix4(preTransform);\n parentGeo.morphAttributes.position.push(positionAttribute);\n }\n // Parse normal from FBXTree.Objects.Geometry.LayerElementNormal if it exists\n parseNormals(NormalNode) {\n const mappingType = NormalNode.MappingInformationType;\n const referenceType = NormalNode.ReferenceInformationType;\n const buffer = NormalNode.Normals.a;\n let indexBuffer = [];\n if (referenceType === \"IndexToDirect\") {\n if (\"NormalIndex\" in NormalNode) {\n indexBuffer = NormalNode.NormalIndex.a;\n } else if (\"NormalsIndex\" in NormalNode) {\n indexBuffer = NormalNode.NormalsIndex.a;\n }\n }\n return {\n dataSize: 3,\n buffer,\n indices: indexBuffer,\n mappingType,\n referenceType\n };\n }\n // Parse UVs from FBXTree.Objects.Geometry.LayerElementUV if it exists\n parseUVs(UVNode) {\n const mappingType = UVNode.MappingInformationType;\n const referenceType = UVNode.ReferenceInformationType;\n const buffer = UVNode.UV.a;\n let indexBuffer = [];\n if (referenceType === \"IndexToDirect\") {\n indexBuffer = UVNode.UVIndex.a;\n }\n return {\n dataSize: 2,\n buffer,\n indices: indexBuffer,\n mappingType,\n referenceType\n };\n }\n // Parse Vertex Colors from FBXTree.Objects.Geometry.LayerElementColor if it exists\n parseVertexColors(ColorNode) {\n const mappingType = ColorNode.MappingInformationType;\n const referenceType = ColorNode.ReferenceInformationType;\n const buffer = ColorNode.Colors.a;\n let indexBuffer = [];\n if (referenceType === \"IndexToDirect\") {\n indexBuffer = ColorNode.ColorIndex.a;\n }\n return {\n dataSize: 4,\n buffer,\n indices: indexBuffer,\n mappingType,\n referenceType\n };\n }\n // Parse mapping and material data in FBXTree.Objects.Geometry.LayerElementMaterial if it exists\n parseMaterialIndices(MaterialNode) {\n const mappingType = MaterialNode.MappingInformationType;\n const referenceType = MaterialNode.ReferenceInformationType;\n if (mappingType === \"NoMappingInformation\") {\n return {\n dataSize: 1,\n buffer: [0],\n indices: [0],\n mappingType: \"AllSame\",\n referenceType\n };\n }\n const materialIndexBuffer = MaterialNode.Materials.a;\n const materialIndices = [];\n for (let i = 0; i < materialIndexBuffer.length; ++i) {\n materialIndices.push(i);\n }\n return {\n dataSize: 1,\n buffer: materialIndexBuffer,\n indices: materialIndices,\n mappingType,\n referenceType\n };\n }\n // Generate a NurbGeometry from a node in FBXTree.Objects.Geometry\n parseNurbsGeometry(geoNode) {\n if (NURBSCurve === void 0) {\n console.error(\n \"THREE.FBXLoader: The loader relies on NURBSCurve for any nurbs present in the model. Nurbs will show up as empty geometry.\"\n );\n return new BufferGeometry();\n }\n const order = parseInt(geoNode.Order);\n if (isNaN(order)) {\n console.error(\"THREE.FBXLoader: Invalid Order %s given for geometry ID: %s\", geoNode.Order, geoNode.id);\n return new BufferGeometry();\n }\n const degree = order - 1;\n const knots = geoNode.KnotVector.a;\n const controlPoints = [];\n const pointsValues = geoNode.Points.a;\n for (let i = 0, l = pointsValues.length; i < l; i += 4) {\n controlPoints.push(new Vector4().fromArray(pointsValues, i));\n }\n let startKnot, endKnot;\n if (geoNode.Form === \"Closed\") {\n controlPoints.push(controlPoints[0]);\n } else if (geoNode.Form === \"Periodic\") {\n startKnot = degree;\n endKnot = knots.length - 1 - startKnot;\n for (let i = 0; i < degree; ++i) {\n controlPoints.push(controlPoints[i]);\n }\n }\n const curve = new NURBSCurve(degree, knots, controlPoints, startKnot, endKnot);\n const points = curve.getPoints(controlPoints.length * 12);\n return new BufferGeometry().setFromPoints(points);\n }\n}\nclass AnimationParser {\n // take raw animation clips and turn them into three.js animation clips\n parse() {\n const animationClips = [];\n const rawClips = this.parseClips();\n if (rawClips !== void 0) {\n for (const key in rawClips) {\n const rawClip = rawClips[key];\n const clip = this.addClip(rawClip);\n animationClips.push(clip);\n }\n }\n return animationClips;\n }\n parseClips() {\n if (fbxTree.Objects.AnimationCurve === void 0)\n return void 0;\n const curveNodesMap = this.parseAnimationCurveNodes();\n this.parseAnimationCurves(curveNodesMap);\n const layersMap = this.parseAnimationLayers(curveNodesMap);\n const rawClips = this.parseAnimStacks(layersMap);\n return rawClips;\n }\n // parse nodes in FBXTree.Objects.AnimationCurveNode\n // each AnimationCurveNode holds data for an animation transform for a model (e.g. left arm rotation )\n // and is referenced by an AnimationLayer\n parseAnimationCurveNodes() {\n const rawCurveNodes = fbxTree.Objects.AnimationCurveNode;\n const curveNodesMap = /* @__PURE__ */ new Map();\n for (const nodeID in rawCurveNodes) {\n const rawCurveNode = rawCurveNodes[nodeID];\n if (rawCurveNode.attrName.match(/S|R|T|DeformPercent/) !== null) {\n const curveNode = {\n id: rawCurveNode.id,\n attr: rawCurveNode.attrName,\n curves: {}\n };\n curveNodesMap.set(curveNode.id, curveNode);\n }\n }\n return curveNodesMap;\n }\n // parse nodes in FBXTree.Objects.AnimationCurve and connect them up to\n // previously parsed AnimationCurveNodes. Each AnimationCurve holds data for a single animated\n // axis ( e.g. times and values of x rotation)\n parseAnimationCurves(curveNodesMap) {\n const rawCurves = fbxTree.Objects.AnimationCurve;\n for (const nodeID in rawCurves) {\n const animationCurve = {\n id: rawCurves[nodeID].id,\n times: rawCurves[nodeID].KeyTime.a.map(convertFBXTimeToSeconds),\n values: rawCurves[nodeID].KeyValueFloat.a\n };\n const relationships = connections.get(animationCurve.id);\n if (relationships !== void 0) {\n const animationCurveID = relationships.parents[0].ID;\n const animationCurveRelationship = relationships.parents[0].relationship;\n if (animationCurveRelationship.match(/X/)) {\n curveNodesMap.get(animationCurveID).curves[\"x\"] = animationCurve;\n } else if (animationCurveRelationship.match(/Y/)) {\n curveNodesMap.get(animationCurveID).curves[\"y\"] = animationCurve;\n } else if (animationCurveRelationship.match(/Z/)) {\n curveNodesMap.get(animationCurveID).curves[\"z\"] = animationCurve;\n } else if (animationCurveRelationship.match(/d|DeformPercent/) && curveNodesMap.has(animationCurveID)) {\n curveNodesMap.get(animationCurveID).curves[\"morph\"] = animationCurve;\n }\n }\n }\n }\n // parse nodes in FBXTree.Objects.AnimationLayer. Each layers holds references\n // to various AnimationCurveNodes and is referenced by an AnimationStack node\n // note: theoretically a stack can have multiple layers, however in practice there always seems to be one per stack\n parseAnimationLayers(curveNodesMap) {\n const rawLayers = fbxTree.Objects.AnimationLayer;\n const layersMap = /* @__PURE__ */ new Map();\n for (const nodeID in rawLayers) {\n const layerCurveNodes = [];\n const connection = connections.get(parseInt(nodeID));\n if (connection !== void 0) {\n const children = connection.children;\n children.forEach(function(child, i) {\n if (curveNodesMap.has(child.ID)) {\n const curveNode = curveNodesMap.get(child.ID);\n if (curveNode.curves.x !== void 0 || curveNode.curves.y !== void 0 || curveNode.curves.z !== void 0) {\n if (layerCurveNodes[i] === void 0) {\n const modelID = connections.get(child.ID).parents.filter(function(parent) {\n return parent.relationship !== void 0;\n })[0].ID;\n if (modelID !== void 0) {\n const rawModel = fbxTree.Objects.Model[modelID.toString()];\n if (rawModel === void 0) {\n console.warn(\"THREE.FBXLoader: Encountered a unused curve.\", child);\n return;\n }\n const node = {\n modelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName(rawModel.attrName) : \"\",\n ID: rawModel.id,\n initialPosition: [0, 0, 0],\n initialRotation: [0, 0, 0],\n initialScale: [1, 1, 1]\n };\n sceneGraph.traverse(function(child2) {\n if (child2.ID === rawModel.id) {\n node.transform = child2.matrix;\n if (child2.userData.transformData)\n node.eulerOrder = child2.userData.transformData.eulerOrder;\n }\n });\n if (!node.transform)\n node.transform = new Matrix4();\n if (\"PreRotation\" in rawModel)\n node.preRotation = rawModel.PreRotation.value;\n if (\"PostRotation\" in rawModel)\n node.postRotation = rawModel.PostRotation.value;\n layerCurveNodes[i] = node;\n }\n }\n if (layerCurveNodes[i])\n layerCurveNodes[i][curveNode.attr] = curveNode;\n } else if (curveNode.curves.morph !== void 0) {\n if (layerCurveNodes[i] === void 0) {\n const deformerID = connections.get(child.ID).parents.filter(function(parent) {\n return parent.relationship !== void 0;\n })[0].ID;\n const morpherID = connections.get(deformerID).parents[0].ID;\n const geoID = connections.get(morpherID).parents[0].ID;\n const modelID = connections.get(geoID).parents[0].ID;\n const rawModel = fbxTree.Objects.Model[modelID];\n const node = {\n modelName: rawModel.attrName ? PropertyBinding.sanitizeNodeName(rawModel.attrName) : \"\",\n morphName: fbxTree.Objects.Deformer[deformerID].attrName\n };\n layerCurveNodes[i] = node;\n }\n layerCurveNodes[i][curveNode.attr] = curveNode;\n }\n }\n });\n layersMap.set(parseInt(nodeID), layerCurveNodes);\n }\n }\n return layersMap;\n }\n // parse nodes in FBXTree.Objects.AnimationStack. These are the top level node in the animation\n // hierarchy. Each Stack node will be used to create a AnimationClip\n parseAnimStacks(layersMap) {\n const rawStacks = fbxTree.Objects.AnimationStack;\n const rawClips = {};\n for (const nodeID in rawStacks) {\n const children = connections.get(parseInt(nodeID)).children;\n if (children.length > 1) {\n console.warn(\n \"THREE.FBXLoader: Encountered an animation stack with multiple layers, this is currently not supported. Ignoring subsequent layers.\"\n );\n }\n const layer = layersMap.get(children[0].ID);\n rawClips[nodeID] = {\n name: rawStacks[nodeID].attrName,\n layer\n };\n }\n return rawClips;\n }\n addClip(rawClip) {\n let tracks = [];\n const scope = this;\n rawClip.layer.forEach(function(rawTracks) {\n tracks = tracks.concat(scope.generateTracks(rawTracks));\n });\n return new AnimationClip(rawClip.name, -1, tracks);\n }\n generateTracks(rawTracks) {\n const tracks = [];\n let initialPosition = new Vector3();\n let initialRotation = new Quaternion();\n let initialScale = new Vector3();\n if (rawTracks.transform)\n rawTracks.transform.decompose(initialPosition, initialRotation, initialScale);\n initialPosition = initialPosition.toArray();\n initialRotation = new Euler().setFromQuaternion(initialRotation, rawTracks.eulerOrder).toArray();\n initialScale = initialScale.toArray();\n if (rawTracks.T !== void 0 && Object.keys(rawTracks.T.curves).length > 0) {\n const positionTrack = this.generateVectorTrack(\n rawTracks.modelName,\n rawTracks.T.curves,\n initialPosition,\n \"position\"\n );\n if (positionTrack !== void 0)\n tracks.push(positionTrack);\n }\n if (rawTracks.R !== void 0 && Object.keys(rawTracks.R.curves).length > 0) {\n const rotationTrack = this.generateRotationTrack(\n rawTracks.modelName,\n rawTracks.R.curves,\n initialRotation,\n rawTracks.preRotation,\n rawTracks.postRotation,\n rawTracks.eulerOrder\n );\n if (rotationTrack !== void 0)\n tracks.push(rotationTrack);\n }\n if (rawTracks.S !== void 0 && Object.keys(rawTracks.S.curves).length > 0) {\n const scaleTrack = this.generateVectorTrack(rawTracks.modelName, rawTracks.S.curves, initialScale, \"scale\");\n if (scaleTrack !== void 0)\n tracks.push(scaleTrack);\n }\n if (rawTracks.DeformPercent !== void 0) {\n const morphTrack = this.generateMorphTrack(rawTracks);\n if (morphTrack !== void 0)\n tracks.push(morphTrack);\n }\n return tracks;\n }\n generateVectorTrack(modelName, curves, initialValue, type) {\n const times = this.getTimesForAllAxes(curves);\n const values = this.getKeyframeTrackValues(times, curves, initialValue);\n return new VectorKeyframeTrack(modelName + \".\" + type, times, values);\n }\n generateRotationTrack(modelName, curves, initialValue, preRotation, postRotation, eulerOrder) {\n if (curves.x !== void 0) {\n this.interpolateRotations(curves.x);\n curves.x.values = curves.x.values.map(MathUtils.degToRad);\n }\n if (curves.y !== void 0) {\n this.interpolateRotations(curves.y);\n curves.y.values = curves.y.values.map(MathUtils.degToRad);\n }\n if (curves.z !== void 0) {\n this.interpolateRotations(curves.z);\n curves.z.values = curves.z.values.map(MathUtils.degToRad);\n }\n const times = this.getTimesForAllAxes(curves);\n const values = this.getKeyframeTrackValues(times, curves, initialValue);\n if (preRotation !== void 0) {\n preRotation = preRotation.map(MathUtils.degToRad);\n preRotation.push(eulerOrder);\n preRotation = new Euler().fromArray(preRotation);\n preRotation = new Quaternion().setFromEuler(preRotation);\n }\n if (postRotation !== void 0) {\n postRotation = postRotation.map(MathUtils.degToRad);\n postRotation.push(eulerOrder);\n postRotation = new Euler().fromArray(postRotation);\n postRotation = new Quaternion().setFromEuler(postRotation).invert();\n }\n const quaternion = new Quaternion();\n const euler = new Euler();\n const quaternionValues = [];\n for (let i = 0; i < values.length; i += 3) {\n euler.set(values[i], values[i + 1], values[i + 2], eulerOrder);\n quaternion.setFromEuler(euler);\n if (preRotation !== void 0)\n quaternion.premultiply(preRotation);\n if (postRotation !== void 0)\n quaternion.multiply(postRotation);\n quaternion.toArray(quaternionValues, i / 3 * 4);\n }\n return new QuaternionKeyframeTrack(modelName + \".quaternion\", times, quaternionValues);\n }\n generateMorphTrack(rawTracks) {\n const curves = rawTracks.DeformPercent.curves.morph;\n const values = curves.values.map(function(val) {\n return val / 100;\n });\n const morphNum = sceneGraph.getObjectByName(rawTracks.modelName).morphTargetDictionary[rawTracks.morphName];\n return new NumberKeyframeTrack(\n rawTracks.modelName + \".morphTargetInfluences[\" + morphNum + \"]\",\n curves.times,\n values\n );\n }\n // For all animated objects, times are defined separately for each axis\n // Here we'll combine the times into one sorted array without duplicates\n getTimesForAllAxes(curves) {\n let times = [];\n if (curves.x !== void 0)\n times = times.concat(curves.x.times);\n if (curves.y !== void 0)\n times = times.concat(curves.y.times);\n if (curves.z !== void 0)\n times = times.concat(curves.z.times);\n times = times.sort(function(a, b) {\n return a - b;\n });\n if (times.length > 1) {\n let targetIndex = 1;\n let lastValue = times[0];\n for (let i = 1; i < times.length; i++) {\n const currentValue = times[i];\n if (currentValue !== lastValue) {\n times[targetIndex] = currentValue;\n lastValue = currentValue;\n targetIndex++;\n }\n }\n times = times.slice(0, targetIndex);\n }\n return times;\n }\n getKeyframeTrackValues(times, curves, initialValue) {\n const prevValue = initialValue;\n const values = [];\n let xIndex = -1;\n let yIndex = -1;\n let zIndex = -1;\n times.forEach(function(time) {\n if (curves.x)\n xIndex = curves.x.times.indexOf(time);\n if (curves.y)\n yIndex = curves.y.times.indexOf(time);\n if (curves.z)\n zIndex = curves.z.times.indexOf(time);\n if (xIndex !== -1) {\n const xValue = curves.x.values[xIndex];\n values.push(xValue);\n prevValue[0] = xValue;\n } else {\n values.push(prevValue[0]);\n }\n if (yIndex !== -1) {\n const yValue = curves.y.values[yIndex];\n values.push(yValue);\n prevValue[1] = yValue;\n } else {\n values.push(prevValue[1]);\n }\n if (zIndex !== -1) {\n const zValue = curves.z.values[zIndex];\n values.push(zValue);\n prevValue[2] = zValue;\n } else {\n values.push(prevValue[2]);\n }\n });\n return values;\n }\n // Rotations are defined as Euler angles which can have values of any size\n // These will be converted to quaternions which don't support values greater than\n // PI, so we'll interpolate large rotations\n interpolateRotations(curve) {\n for (let i = 1; i < curve.values.length; i++) {\n const initialValue = curve.values[i - 1];\n const valuesSpan = curve.values[i] - initialValue;\n const absoluteSpan = Math.abs(valuesSpan);\n if (absoluteSpan >= 180) {\n const numSubIntervals = absoluteSpan / 180;\n const step = valuesSpan / numSubIntervals;\n let nextValue = initialValue + step;\n const initialTime = curve.times[i - 1];\n const timeSpan = curve.times[i] - initialTime;\n const interval = timeSpan / numSubIntervals;\n let nextTime = initialTime + interval;\n const interpolatedTimes = [];\n const interpolatedValues = [];\n while (nextTime < curve.times[i]) {\n interpolatedTimes.push(nextTime);\n nextTime += interval;\n interpolatedValues.push(nextValue);\n nextValue += step;\n }\n curve.times = inject(curve.times, i, interpolatedTimes);\n curve.values = inject(curve.values, i, interpolatedValues);\n }\n }\n }\n}\nclass TextParser {\n getPrevNode() {\n return this.nodeStack[this.currentIndent - 2];\n }\n getCurrentNode() {\n return this.nodeStack[this.currentIndent - 1];\n }\n getCurrentProp() {\n return this.currentProp;\n }\n pushStack(node) {\n this.nodeStack.push(node);\n this.currentIndent += 1;\n }\n popStack() {\n this.nodeStack.pop();\n this.currentIndent -= 1;\n }\n setCurrentProp(val, name) {\n this.currentProp = val;\n this.currentPropName = name;\n }\n parse(text) {\n this.currentIndent = 0;\n this.allNodes = new FBXTree();\n this.nodeStack = [];\n this.currentProp = [];\n this.currentPropName = \"\";\n const scope = this;\n const split = text.split(/[\\r\\n]+/);\n split.forEach(function(line, i) {\n const matchComment = line.match(/^[\\s\\t]*;/);\n const matchEmpty = line.match(/^[\\s\\t]*$/);\n if (matchComment || matchEmpty)\n return;\n const matchBeginning = line.match(\"^\\\\t{\" + scope.currentIndent + \"}(\\\\w+):(.*){\", \"\");\n const matchProperty = line.match(\"^\\\\t{\" + scope.currentIndent + \"}(\\\\w+):[\\\\s\\\\t\\\\r\\\\n](.*)\");\n const matchEnd = line.match(\"^\\\\t{\" + (scope.currentIndent - 1) + \"}}\");\n if (matchBeginning) {\n scope.parseNodeBegin(line, matchBeginning);\n } else if (matchProperty) {\n scope.parseNodeProperty(line, matchProperty, split[++i]);\n } else if (matchEnd) {\n scope.popStack();\n } else if (line.match(/^[^\\s\\t}]/)) {\n scope.parseNodePropertyContinued(line);\n }\n });\n return this.allNodes;\n }\n parseNodeBegin(line, property) {\n const nodeName = property[1].trim().replace(/^\"/, \"\").replace(/\"$/, \"\");\n const nodeAttrs = property[2].split(\",\").map(function(attr) {\n return attr.trim().replace(/^\"/, \"\").replace(/\"$/, \"\");\n });\n const node = { name: nodeName };\n const attrs = this.parseNodeAttr(nodeAttrs);\n const currentNode = this.getCurrentNode();\n if (this.currentIndent === 0) {\n this.allNodes.add(nodeName, node);\n } else {\n if (nodeName in currentNode) {\n if (nodeName === \"PoseNode\") {\n currentNode.PoseNode.push(node);\n } else if (currentNode[nodeName].id !== void 0) {\n currentNode[nodeName] = {};\n currentNode[nodeName][currentNode[nodeName].id] = currentNode[nodeName];\n }\n if (attrs.id !== \"\")\n currentNode[nodeName][attrs.id] = node;\n } else if (typeof attrs.id === \"number\") {\n currentNode[nodeName] = {};\n currentNode[nodeName][attrs.id] = node;\n } else if (nodeName !== \"Properties70\") {\n if (nodeName === \"PoseNode\")\n currentNode[nodeName] = [node];\n else\n currentNode[nodeName] = node;\n }\n }\n if (typeof attrs.id === \"number\")\n node.id = attrs.id;\n if (attrs.name !== \"\")\n node.attrName = attrs.name;\n if (attrs.type !== \"\")\n node.attrType = attrs.type;\n this.pushStack(node);\n }\n parseNodeAttr(attrs) {\n let id = attrs[0];\n if (attrs[0] !== \"\") {\n id = parseInt(attrs[0]);\n if (isNaN(id)) {\n id = attrs[0];\n }\n }\n let name = \"\", type = \"\";\n if (attrs.length > 1) {\n name = attrs[1].replace(/^(\\w+)::/, \"\");\n type = attrs[2];\n }\n return { id, name, type };\n }\n parseNodeProperty(line, property, contentLine) {\n let propName = property[1].replace(/^\"/, \"\").replace(/\"$/, \"\").trim();\n let propValue = property[2].replace(/^\"/, \"\").replace(/\"$/, \"\").trim();\n if (propName === \"Content\" && propValue === \",\") {\n propValue = contentLine.replace(/\"/g, \"\").replace(/,$/, \"\").trim();\n }\n const currentNode = this.getCurrentNode();\n const parentName = currentNode.name;\n if (parentName === \"Properties70\") {\n this.parseNodeSpecialProperty(line, propName, propValue);\n return;\n }\n if (propName === \"C\") {\n const connProps = propValue.split(\",\").slice(1);\n const from = parseInt(connProps[0]);\n const to = parseInt(connProps[1]);\n let rest = propValue.split(\",\").slice(3);\n rest = rest.map(function(elem) {\n return elem.trim().replace(/^\"/, \"\");\n });\n propName = \"connections\";\n propValue = [from, to];\n append(propValue, rest);\n if (currentNode[propName] === void 0) {\n currentNode[propName] = [];\n }\n }\n if (propName === \"Node\")\n currentNode.id = propValue;\n if (propName in currentNode && Array.isArray(currentNode[propName])) {\n currentNode[propName].push(propValue);\n } else {\n if (propName !== \"a\")\n currentNode[propName] = propValue;\n else\n currentNode.a = propValue;\n }\n this.setCurrentProp(currentNode, propName);\n if (propName === \"a\" && propValue.slice(-1) !== \",\") {\n currentNode.a = parseNumberArray(propValue);\n }\n }\n parseNodePropertyContinued(line) {\n const currentNode = this.getCurrentNode();\n currentNode.a += line;\n if (line.slice(-1) !== \",\") {\n currentNode.a = parseNumberArray(currentNode.a);\n }\n }\n // parse \"Property70\"\n parseNodeSpecialProperty(line, propName, propValue) {\n const props = propValue.split('\",').map(function(prop) {\n return prop.trim().replace(/^\\\"/, \"\").replace(/\\s/, \"_\");\n });\n const innerPropName = props[0];\n const innerPropType1 = props[1];\n const innerPropType2 = props[2];\n const innerPropFlag = props[3];\n let innerPropValue = props[4];\n switch (innerPropType1) {\n case \"int\":\n case \"enum\":\n case \"bool\":\n case \"ULongLong\":\n case \"double\":\n case \"Number\":\n case \"FieldOfView\":\n innerPropValue = parseFloat(innerPropValue);\n break;\n case \"Color\":\n case \"ColorRGB\":\n case \"Vector3D\":\n case \"Lcl_Translation\":\n case \"Lcl_Rotation\":\n case \"Lcl_Scaling\":\n innerPropValue = parseNumberArray(innerPropValue);\n break;\n }\n this.getPrevNode()[innerPropName] = {\n type: innerPropType1,\n type2: innerPropType2,\n flag: innerPropFlag,\n value: innerPropValue\n };\n this.setCurrentProp(this.getPrevNode(), innerPropName);\n }\n}\nclass BinaryParser {\n parse(buffer) {\n const reader = new BinaryReader(buffer);\n reader.skip(23);\n const version = reader.getUint32();\n if (version < 6400) {\n throw new Error(\"THREE.FBXLoader: FBX version not supported, FileVersion: \" + version);\n }\n const allNodes = new FBXTree();\n while (!this.endOfContent(reader)) {\n const node = this.parseNode(reader, version);\n if (node !== null)\n allNodes.add(node.name, node);\n }\n return allNodes;\n }\n // Check if reader has reached the end of content.\n endOfContent(reader) {\n if (reader.size() % 16 === 0) {\n return (reader.getOffset() + 160 + 16 & ~15) >= reader.size();\n } else {\n return reader.getOffset() + 160 + 16 >= reader.size();\n }\n }\n // recursively parse nodes until the end of the file is reached\n parseNode(reader, version) {\n const node = {};\n const endOffset = version >= 7500 ? reader.getUint64() : reader.getUint32();\n const numProperties = version >= 7500 ? reader.getUint64() : reader.getUint32();\n version >= 7500 ? reader.getUint64() : reader.getUint32();\n const nameLen = reader.getUint8();\n const name = reader.getString(nameLen);\n if (endOffset === 0)\n return null;\n const propertyList = [];\n for (let i = 0; i < numProperties; i++) {\n propertyList.push(this.parseProperty(reader));\n }\n const id = propertyList.length > 0 ? propertyList[0] : \"\";\n const attrName = propertyList.length > 1 ? propertyList[1] : \"\";\n const attrType = propertyList.length > 2 ? propertyList[2] : \"\";\n node.singleProperty = numProperties === 1 && reader.getOffset() === endOffset ? true : false;\n while (endOffset > reader.getOffset()) {\n const subNode = this.parseNode(reader, version);\n if (subNode !== null)\n this.parseSubNode(name, node, subNode);\n }\n node.propertyList = propertyList;\n if (typeof id === \"number\")\n node.id = id;\n if (attrName !== \"\")\n node.attrName = attrName;\n if (attrType !== \"\")\n node.attrType = attrType;\n if (name !== \"\")\n node.name = name;\n return node;\n }\n parseSubNode(name, node, subNode) {\n if (subNode.singleProperty === true) {\n const value = subNode.propertyList[0];\n if (Array.isArray(value)) {\n node[subNode.name] = subNode;\n subNode.a = value;\n } else {\n node[subNode.name] = value;\n }\n } else if (name === \"Connections\" && subNode.name === \"C\") {\n const array = [];\n subNode.propertyList.forEach(function(property, i) {\n if (i !== 0)\n array.push(property);\n });\n if (node.connections === void 0) {\n node.connections = [];\n }\n node.connections.push(array);\n } else if (subNode.name === \"Properties70\") {\n const keys = Object.keys(subNode);\n keys.forEach(function(key) {\n node[key] = subNode[key];\n });\n } else if (name === \"Properties70\" && subNode.name === \"P\") {\n let innerPropName = subNode.propertyList[0];\n let innerPropType1 = subNode.propertyList[1];\n const innerPropType2 = subNode.propertyList[2];\n const innerPropFlag = subNode.propertyList[3];\n let innerPropValue;\n if (innerPropName.indexOf(\"Lcl \") === 0)\n innerPropName = innerPropName.replace(\"Lcl \", \"Lcl_\");\n if (innerPropType1.indexOf(\"Lcl \") === 0)\n innerPropType1 = innerPropType1.replace(\"Lcl \", \"Lcl_\");\n if (innerPropType1 === \"Color\" || innerPropType1 === \"ColorRGB\" || innerPropType1 === \"Vector\" || innerPropType1 === \"Vector3D\" || innerPropType1.indexOf(\"Lcl_\") === 0) {\n innerPropValue = [subNode.propertyList[4], subNode.propertyList[5], subNode.propertyList[6]];\n } else {\n innerPropValue = subNode.propertyList[4];\n }\n node[innerPropName] = {\n type: innerPropType1,\n type2: innerPropType2,\n flag: innerPropFlag,\n value: innerPropValue\n };\n } else if (node[subNode.name] === void 0) {\n if (typeof subNode.id === \"number\") {\n node[subNode.name] = {};\n node[subNode.name][subNode.id] = subNode;\n } else {\n node[subNode.name] = subNode;\n }\n } else {\n if (subNode.name === \"PoseNode\") {\n if (!Array.isArray(node[subNode.name])) {\n node[subNode.name] = [node[subNode.name]];\n }\n node[subNode.name].push(subNode);\n } else if (node[subNode.name][subNode.id] === void 0) {\n node[subNode.name][subNode.id] = subNode;\n }\n }\n }\n parseProperty(reader) {\n const type = reader.getString(1);\n let length;\n switch (type) {\n case \"C\":\n return reader.getBoolean();\n case \"D\":\n return reader.getFloat64();\n case \"F\":\n return reader.getFloat32();\n case \"I\":\n return reader.getInt32();\n case \"L\":\n return reader.getInt64();\n case \"R\":\n length = reader.getUint32();\n return reader.getArrayBuffer(length);\n case \"S\":\n length = reader.getUint32();\n return reader.getString(length);\n case \"Y\":\n return reader.getInt16();\n case \"b\":\n case \"c\":\n case \"d\":\n case \"f\":\n case \"i\":\n case \"l\":\n const arrayLength = reader.getUint32();\n const encoding = reader.getUint32();\n const compressedLength = reader.getUint32();\n if (encoding === 0) {\n switch (type) {\n case \"b\":\n case \"c\":\n return reader.getBooleanArray(arrayLength);\n case \"d\":\n return reader.getFloat64Array(arrayLength);\n case \"f\":\n return reader.getFloat32Array(arrayLength);\n case \"i\":\n return reader.getInt32Array(arrayLength);\n case \"l\":\n return reader.getInt64Array(arrayLength);\n }\n }\n const data = unzlibSync(new Uint8Array(reader.getArrayBuffer(compressedLength)));\n const reader2 = new BinaryReader(data.buffer);\n switch (type) {\n case \"b\":\n case \"c\":\n return reader2.getBooleanArray(arrayLength);\n case \"d\":\n return reader2.getFloat64Array(arrayLength);\n case \"f\":\n return reader2.getFloat32Array(arrayLength);\n case \"i\":\n return reader2.getInt32Array(arrayLength);\n case \"l\":\n return reader2.getInt64Array(arrayLength);\n }\n default:\n throw new Error(\"THREE.FBXLoader: Unknown property type \" + type);\n }\n }\n}\nclass BinaryReader {\n constructor(buffer, littleEndian) {\n this.dv = new DataView(buffer);\n this.offset = 0;\n this.littleEndian = littleEndian !== void 0 ? littleEndian : true;\n }\n getOffset() {\n return this.offset;\n }\n size() {\n return this.dv.buffer.byteLength;\n }\n skip(length) {\n this.offset += length;\n }\n // seems like true/false representation depends on exporter.\n // true: 1 or 'Y'(=0x59), false: 0 or 'T'(=0x54)\n // then sees LSB.\n getBoolean() {\n return (this.getUint8() & 1) === 1;\n }\n getBooleanArray(size) {\n const a = [];\n for (let i = 0; i < size; i++) {\n a.push(this.getBoolean());\n }\n return a;\n }\n getUint8() {\n const value = this.dv.getUint8(this.offset);\n this.offset += 1;\n return value;\n }\n getInt16() {\n const value = this.dv.getInt16(this.offset, this.littleEndian);\n this.offset += 2;\n return value;\n }\n getInt32() {\n const value = this.dv.getInt32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n getInt32Array(size) {\n const a = [];\n for (let i = 0; i < size; i++) {\n a.push(this.getInt32());\n }\n return a;\n }\n getUint32() {\n const value = this.dv.getUint32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n // JavaScript doesn't support 64-bit integer so calculate this here\n // 1 << 32 will return 1 so using multiply operation instead here.\n // There's a possibility that this method returns wrong value if the value\n // is out of the range between Number.MAX_SAFE_INTEGER and Number.MIN_SAFE_INTEGER.\n // TODO: safely handle 64-bit integer\n getInt64() {\n let low, high;\n if (this.littleEndian) {\n low = this.getUint32();\n high = this.getUint32();\n } else {\n high = this.getUint32();\n low = this.getUint32();\n }\n if (high & 2147483648) {\n high = ~high & 4294967295;\n low = ~low & 4294967295;\n if (low === 4294967295)\n high = high + 1 & 4294967295;\n low = low + 1 & 4294967295;\n return -(high * 4294967296 + low);\n }\n return high * 4294967296 + low;\n }\n getInt64Array(size) {\n const a = [];\n for (let i = 0; i < size; i++) {\n a.push(this.getInt64());\n }\n return a;\n }\n // Note: see getInt64() comment\n getUint64() {\n let low, high;\n if (this.littleEndian) {\n low = this.getUint32();\n high = this.getUint32();\n } else {\n high = this.getUint32();\n low = this.getUint32();\n }\n return high * 4294967296 + low;\n }\n getFloat32() {\n const value = this.dv.getFloat32(this.offset, this.littleEndian);\n this.offset += 4;\n return value;\n }\n getFloat32Array(size) {\n const a = [];\n for (let i = 0; i < size; i++) {\n a.push(this.getFloat32());\n }\n return a;\n }\n getFloat64() {\n const value = this.dv.getFloat64(this.offset, this.littleEndian);\n this.offset += 8;\n return value;\n }\n getFloat64Array(size) {\n const a = [];\n for (let i = 0; i < size; i++) {\n a.push(this.getFloat64());\n }\n return a;\n }\n getArrayBuffer(size) {\n const value = this.dv.buffer.slice(this.offset, this.offset + size);\n this.offset += size;\n return value;\n }\n getString(size) {\n let a = [];\n for (let i = 0; i < size; i++) {\n a[i] = this.getUint8();\n }\n const nullByte = a.indexOf(0);\n if (nullByte >= 0)\n a = a.slice(0, nullByte);\n return decodeText(new Uint8Array(a));\n }\n}\nclass FBXTree {\n add(key, val) {\n this[key] = val;\n }\n}\nfunction isFbxFormatBinary(buffer) {\n const CORRECT = \"Kaydara FBX Binary \\0\";\n return buffer.byteLength >= CORRECT.length && CORRECT === convertArrayBufferToString(buffer, 0, CORRECT.length);\n}\nfunction isFbxFormatASCII(text) {\n const CORRECT = [\n \"K\",\n \"a\",\n \"y\",\n \"d\",\n \"a\",\n \"r\",\n \"a\",\n \"\\\\\",\n \"F\",\n \"B\",\n \"X\",\n \"\\\\\",\n \"B\",\n \"i\",\n \"n\",\n \"a\",\n \"r\",\n \"y\",\n \"\\\\\",\n \"\\\\\"\n ];\n let cursor = 0;\n function read(offset) {\n const result = text[offset - 1];\n text = text.slice(cursor + offset);\n cursor++;\n return result;\n }\n for (let i = 0; i < CORRECT.length; ++i) {\n const num = read(1);\n if (num === CORRECT[i]) {\n return false;\n }\n }\n return true;\n}\nfunction getFbxVersion(text) {\n const versionRegExp = /FBXVersion: (\\d+)/;\n const match = text.match(versionRegExp);\n if (match) {\n const version = parseInt(match[1]);\n return version;\n }\n throw new Error(\"THREE.FBXLoader: Cannot find the version number for the file given.\");\n}\nfunction convertFBXTimeToSeconds(time) {\n return time / 46186158e3;\n}\nconst dataArray = [];\nfunction getData(polygonVertexIndex, polygonIndex, vertexIndex, infoObject) {\n let index;\n switch (infoObject.mappingType) {\n case \"ByPolygonVertex\":\n index = polygonVertexIndex;\n break;\n case \"ByPolygon\":\n index = polygonIndex;\n break;\n case \"ByVertice\":\n index = vertexIndex;\n break;\n case \"AllSame\":\n index = infoObject.indices[0];\n break;\n default:\n console.warn(\"THREE.FBXLoader: unknown attribute mapping type \" + infoObject.mappingType);\n }\n if (infoObject.referenceType === \"IndexToDirect\")\n index = infoObject.indices[index];\n const from = index * infoObject.dataSize;\n const to = from + infoObject.dataSize;\n return slice(dataArray, infoObject.buffer, from, to);\n}\nconst tempEuler = /* @__PURE__ */ new Euler();\nconst tempVec = /* @__PURE__ */ new Vector3();\nfunction generateTransform(transformData) {\n const lTranslationM = new Matrix4();\n const lPreRotationM = new Matrix4();\n const lRotationM = new Matrix4();\n const lPostRotationM = new Matrix4();\n const lScalingM = new Matrix4();\n const lScalingPivotM = new Matrix4();\n const lScalingOffsetM = new Matrix4();\n const lRotationOffsetM = new Matrix4();\n const lRotationPivotM = new Matrix4();\n const lParentGX = new Matrix4();\n const lParentLX = new Matrix4();\n const lGlobalT = new Matrix4();\n const inheritType = transformData.inheritType ? transformData.inheritType : 0;\n if (transformData.translation)\n lTranslationM.setPosition(tempVec.fromArray(transformData.translation));\n if (transformData.preRotation) {\n const array = transformData.preRotation.map(MathUtils.degToRad);\n array.push(transformData.eulerOrder);\n lPreRotationM.makeRotationFromEuler(tempEuler.fromArray(array));\n }\n if (transformData.rotation) {\n const array = transformData.rotation.map(MathUtils.degToRad);\n array.push(transformData.eulerOrder);\n lRotationM.makeRotationFromEuler(tempEuler.fromArray(array));\n }\n if (transformData.postRotation) {\n const array = transformData.postRotation.map(MathUtils.degToRad);\n array.push(transformData.eulerOrder);\n lPostRotationM.makeRotationFromEuler(tempEuler.fromArray(array));\n lPostRotationM.invert();\n }\n if (transformData.scale)\n lScalingM.scale(tempVec.fromArray(transformData.scale));\n if (transformData.scalingOffset)\n lScalingOffsetM.setPosition(tempVec.fromArray(transformData.scalingOffset));\n if (transformData.scalingPivot)\n lScalingPivotM.setPosition(tempVec.fromArray(transformData.scalingPivot));\n if (transformData.rotationOffset)\n lRotationOffsetM.setPosition(tempVec.fromArray(transformData.rotationOffset));\n if (transformData.rotationPivot)\n lRotationPivotM.setPosition(tempVec.fromArray(transformData.rotationPivot));\n if (transformData.parentMatrixWorld) {\n lParentLX.copy(transformData.parentMatrix);\n lParentGX.copy(transformData.parentMatrixWorld);\n }\n const lLRM = lPreRotationM.clone().multiply(lRotationM).multiply(lPostRotationM);\n const lParentGRM = new Matrix4();\n lParentGRM.extractRotation(lParentGX);\n const lParentTM = new Matrix4();\n lParentTM.copyPosition(lParentGX);\n const lParentGRSM = lParentTM.clone().invert().multiply(lParentGX);\n const lParentGSM = lParentGRM.clone().invert().multiply(lParentGRSM);\n const lLSM = lScalingM;\n const lGlobalRS = new Matrix4();\n if (inheritType === 0) {\n lGlobalRS.copy(lParentGRM).multiply(lLRM).multiply(lParentGSM).multiply(lLSM);\n } else if (inheritType === 1) {\n lGlobalRS.copy(lParentGRM).multiply(lParentGSM).multiply(lLRM).multiply(lLSM);\n } else {\n const lParentLSM = new Matrix4().scale(new Vector3().setFromMatrixScale(lParentLX));\n const lParentLSM_inv = lParentLSM.clone().invert();\n const lParentGSM_noLocal = lParentGSM.clone().multiply(lParentLSM_inv);\n lGlobalRS.copy(lParentGRM).multiply(lLRM).multiply(lParentGSM_noLocal).multiply(lLSM);\n }\n const lRotationPivotM_inv = lRotationPivotM.clone().invert();\n const lScalingPivotM_inv = lScalingPivotM.clone().invert();\n let lTransform = lTranslationM.clone().multiply(lRotationOffsetM).multiply(lRotationPivotM).multiply(lPreRotationM).multiply(lRotationM).multiply(lPostRotationM).multiply(lRotationPivotM_inv).multiply(lScalingOffsetM).multiply(lScalingPivotM).multiply(lScalingM).multiply(lScalingPivotM_inv);\n const lLocalTWithAllPivotAndOffsetInfo = new Matrix4().copyPosition(lTransform);\n const lGlobalTranslation = lParentGX.clone().multiply(lLocalTWithAllPivotAndOffsetInfo);\n lGlobalT.copyPosition(lGlobalTranslation);\n lTransform = lGlobalT.clone().multiply(lGlobalRS);\n lTransform.premultiply(lParentGX.invert());\n return lTransform;\n}\nfunction getEulerOrder(order) {\n order = order || 0;\n const enums = [\n \"ZYX\",\n // -> XYZ extrinsic\n \"YZX\",\n // -> XZY extrinsic\n \"XZY\",\n // -> YZX extrinsic\n \"ZXY\",\n // -> YXZ extrinsic\n \"YXZ\",\n // -> ZXY extrinsic\n \"XYZ\"\n // -> ZYX extrinsic\n //'SphericXYZ', // not possible to support\n ];\n if (order === 6) {\n console.warn(\"THREE.FBXLoader: unsupported Euler Order: Spherical XYZ. Animations and rotations may be incorrect.\");\n return enums[0];\n }\n return enums[order];\n}\nfunction parseNumberArray(value) {\n const array = value.split(\",\").map(function(val) {\n return parseFloat(val);\n });\n return array;\n}\nfunction convertArrayBufferToString(buffer, from, to) {\n if (from === void 0)\n from = 0;\n if (to === void 0)\n to = buffer.byteLength;\n return decodeText(new Uint8Array(buffer, from, to));\n}\nfunction append(a, b) {\n for (let i = 0, j = a.length, l = b.length; i < l; i++, j++) {\n a[j] = b[i];\n }\n}\nfunction slice(a, b, from, to) {\n for (let i = from, j = 0; i < to; i++, j++) {\n a[j] = b[i];\n }\n return a;\n}\nfunction inject(a1, index, a2) {\n return a1.slice(0, index).concat(a2).concat(a1.slice(index));\n}\nexport {\n FBXLoader\n};\n//# sourceMappingURL=FBXLoader.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Loader, FileLoader, ShapePath } from \"three\";\nclass FontLoader extends Loader {\n constructor(manager) {\n super(manager);\n }\n load(url, onLoad, onProgress, onError) {\n const loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setRequestHeader(this.requestHeader);\n loader.setWithCredentials(this.withCredentials);\n loader.load(\n url,\n (response) => {\n if (typeof response !== \"string\")\n throw new Error(\"unsupported data type\");\n const json = JSON.parse(response);\n const font = this.parse(json);\n if (onLoad)\n onLoad(font);\n },\n onProgress,\n onError\n );\n }\n loadAsync(url, onProgress) {\n return super.loadAsync(url, onProgress);\n }\n parse(json) {\n return new Font(json);\n }\n}\nclass Font {\n constructor(data) {\n __publicField(this, \"data\");\n __publicField(this, \"isFont\", true);\n __publicField(this, \"type\", \"Font\");\n this.data = data;\n }\n generateShapes(text, size = 100, _options) {\n const shapes = [];\n const options = { letterSpacing: 0, lineHeight: 1, ..._options };\n const paths = createPaths(text, size, this.data, options);\n for (let p = 0, pl = paths.length; p < pl; p++) {\n Array.prototype.push.apply(shapes, paths[p].toShapes(false));\n }\n return shapes;\n }\n}\nfunction createPaths(text, size, data, options) {\n const chars = Array.from(text);\n const scale = size / data.resolution;\n const line_height = (data.boundingBox.yMax - data.boundingBox.yMin + data.underlineThickness) * scale;\n const paths = [];\n let offsetX = 0, offsetY = 0;\n for (let i = 0; i < chars.length; i++) {\n const char = chars[i];\n if (char === \"\\n\") {\n offsetX = 0;\n offsetY -= line_height * options.lineHeight;\n } else {\n const ret = createPath(char, scale, offsetX, offsetY, data);\n if (ret) {\n offsetX += ret.offsetX + options.letterSpacing;\n paths.push(ret.path);\n }\n }\n }\n return paths;\n}\nfunction createPath(char, scale, offsetX, offsetY, data) {\n const glyph = data.glyphs[char] || data.glyphs[\"?\"];\n if (!glyph) {\n console.error('THREE.Font: character \"' + char + '\" does not exists in font family ' + data.familyName + \".\");\n return;\n }\n const path = new ShapePath();\n let x, y, cpx, cpy, cpx1, cpy1, cpx2, cpy2;\n if (glyph.o) {\n const outline = glyph._cachedOutline || (glyph._cachedOutline = glyph.o.split(\" \"));\n for (let i = 0, l = outline.length; i < l; ) {\n const action = outline[i++];\n switch (action) {\n case \"m\":\n x = parseInt(outline[i++]) * scale + offsetX;\n y = parseInt(outline[i++]) * scale + offsetY;\n path.moveTo(x, y);\n break;\n case \"l\":\n x = parseInt(outline[i++]) * scale + offsetX;\n y = parseInt(outline[i++]) * scale + offsetY;\n path.lineTo(x, y);\n break;\n case \"q\":\n cpx = parseInt(outline[i++]) * scale + offsetX;\n cpy = parseInt(outline[i++]) * scale + offsetY;\n cpx1 = parseInt(outline[i++]) * scale + offsetX;\n cpy1 = parseInt(outline[i++]) * scale + offsetY;\n path.quadraticCurveTo(cpx1, cpy1, cpx, cpy);\n break;\n case \"b\":\n cpx = parseInt(outline[i++]) * scale + offsetX;\n cpy = parseInt(outline[i++]) * scale + offsetY;\n cpx1 = parseInt(outline[i++]) * scale + offsetX;\n cpy1 = parseInt(outline[i++]) * scale + offsetY;\n cpx2 = parseInt(outline[i++]) * scale + offsetX;\n cpy2 = parseInt(outline[i++]) * scale + offsetY;\n path.bezierCurveTo(cpx1, cpy1, cpx2, cpy2, cpx, cpy);\n break;\n }\n }\n }\n return { offsetX: glyph.ha * scale, path };\n}\nexport {\n Font,\n FontLoader\n};\n//# sourceMappingURL=FontLoader.js.map\n","import { DataTextureLoader, LinearMipmapLinearFilter } from \"three\";\nclass TGALoader extends DataTextureLoader {\n constructor(manager) {\n super(manager);\n }\n parse(buffer) {\n function tgaCheckHeader(header2) {\n switch (header2.image_type) {\n case TGA_TYPE_INDEXED:\n case TGA_TYPE_RLE_INDEXED:\n if (header2.colormap_length > 256 || header2.colormap_size !== 24 || header2.colormap_type !== 1) {\n console.error(\"THREE.TGALoader: Invalid type colormap data for indexed type.\");\n }\n break;\n case TGA_TYPE_RGB:\n case TGA_TYPE_GREY:\n case TGA_TYPE_RLE_RGB:\n case TGA_TYPE_RLE_GREY:\n if (header2.colormap_type) {\n console.error(\"THREE.TGALoader: Invalid type colormap data for colormap type.\");\n }\n break;\n case TGA_TYPE_NO_DATA:\n console.error(\"THREE.TGALoader: No data.\");\n default:\n console.error('THREE.TGALoader: Invalid type \"%s\".', header2.image_type);\n }\n if (header2.width <= 0 || header2.height <= 0) {\n console.error(\"THREE.TGALoader: Invalid image size.\");\n }\n if (header2.pixel_size !== 8 && header2.pixel_size !== 16 && header2.pixel_size !== 24 && header2.pixel_size !== 32) {\n console.error('THREE.TGALoader: Invalid pixel size \"%s\".', header2.pixel_size);\n }\n }\n function tgaParse(use_rle2, use_pal2, header2, offset2, data) {\n let pixel_data, palettes;\n const pixel_size = header2.pixel_size >> 3;\n const pixel_total = header2.width * header2.height * pixel_size;\n if (use_pal2) {\n palettes = data.subarray(offset2, offset2 += header2.colormap_length * (header2.colormap_size >> 3));\n }\n if (use_rle2) {\n pixel_data = new Uint8Array(pixel_total);\n let c, count, i;\n let shift = 0;\n const pixels = new Uint8Array(pixel_size);\n while (shift < pixel_total) {\n c = data[offset2++];\n count = (c & 127) + 1;\n if (c & 128) {\n for (i = 0; i < pixel_size; ++i) {\n pixels[i] = data[offset2++];\n }\n for (i = 0; i < count; ++i) {\n pixel_data.set(pixels, shift + i * pixel_size);\n }\n shift += pixel_size * count;\n } else {\n count *= pixel_size;\n for (i = 0; i < count; ++i) {\n pixel_data[shift + i] = data[offset2++];\n }\n shift += count;\n }\n }\n } else {\n pixel_data = data.subarray(offset2, offset2 += use_pal2 ? header2.width * header2.height : pixel_total);\n }\n return {\n pixel_data,\n palettes\n };\n }\n function tgaGetImageData8bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image, palettes) {\n const colormap = palettes;\n let color, i = 0, x, y;\n const width = header.width;\n for (y = y_start; y !== y_end; y += y_step) {\n for (x = x_start; x !== x_end; x += x_step, i++) {\n color = image[i];\n imageData2[(x + width * y) * 4 + 3] = 255;\n imageData2[(x + width * y) * 4 + 2] = colormap[color * 3 + 0];\n imageData2[(x + width * y) * 4 + 1] = colormap[color * 3 + 1];\n imageData2[(x + width * y) * 4 + 0] = colormap[color * 3 + 2];\n }\n }\n return imageData2;\n }\n function tgaGetImageData16bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) {\n let color, i = 0, x, y;\n const width = header.width;\n for (y = y_start; y !== y_end; y += y_step) {\n for (x = x_start; x !== x_end; x += x_step, i += 2) {\n color = image[i + 0] + (image[i + 1] << 8);\n imageData2[(x + width * y) * 4 + 0] = (color & 31744) >> 7;\n imageData2[(x + width * y) * 4 + 1] = (color & 992) >> 2;\n imageData2[(x + width * y) * 4 + 2] = (color & 31) >> 3;\n imageData2[(x + width * y) * 4 + 3] = color & 32768 ? 0 : 255;\n }\n }\n return imageData2;\n }\n function tgaGetImageData24bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) {\n let i = 0, x, y;\n const width = header.width;\n for (y = y_start; y !== y_end; y += y_step) {\n for (x = x_start; x !== x_end; x += x_step, i += 3) {\n imageData2[(x + width * y) * 4 + 3] = 255;\n imageData2[(x + width * y) * 4 + 2] = image[i + 0];\n imageData2[(x + width * y) * 4 + 1] = image[i + 1];\n imageData2[(x + width * y) * 4 + 0] = image[i + 2];\n }\n }\n return imageData2;\n }\n function tgaGetImageData32bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) {\n let i = 0, x, y;\n const width = header.width;\n for (y = y_start; y !== y_end; y += y_step) {\n for (x = x_start; x !== x_end; x += x_step, i += 4) {\n imageData2[(x + width * y) * 4 + 2] = image[i + 0];\n imageData2[(x + width * y) * 4 + 1] = image[i + 1];\n imageData2[(x + width * y) * 4 + 0] = image[i + 2];\n imageData2[(x + width * y) * 4 + 3] = image[i + 3];\n }\n }\n return imageData2;\n }\n function tgaGetImageDataGrey8bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) {\n let color, i = 0, x, y;\n const width = header.width;\n for (y = y_start; y !== y_end; y += y_step) {\n for (x = x_start; x !== x_end; x += x_step, i++) {\n color = image[i];\n imageData2[(x + width * y) * 4 + 0] = color;\n imageData2[(x + width * y) * 4 + 1] = color;\n imageData2[(x + width * y) * 4 + 2] = color;\n imageData2[(x + width * y) * 4 + 3] = 255;\n }\n }\n return imageData2;\n }\n function tgaGetImageDataGrey16bits(imageData2, y_start, y_step, y_end, x_start, x_step, x_end, image) {\n let i = 0, x, y;\n const width = header.width;\n for (y = y_start; y !== y_end; y += y_step) {\n for (x = x_start; x !== x_end; x += x_step, i += 2) {\n imageData2[(x + width * y) * 4 + 0] = image[i + 0];\n imageData2[(x + width * y) * 4 + 1] = image[i + 0];\n imageData2[(x + width * y) * 4 + 2] = image[i + 0];\n imageData2[(x + width * y) * 4 + 3] = image[i + 1];\n }\n }\n return imageData2;\n }\n function getTgaRGBA(data, width, height, image, palette) {\n let x_start, y_start, x_step, y_step, x_end, y_end;\n switch ((header.flags & TGA_ORIGIN_MASK) >> TGA_ORIGIN_SHIFT) {\n default:\n case TGA_ORIGIN_UL:\n x_start = 0;\n x_step = 1;\n x_end = width;\n y_start = 0;\n y_step = 1;\n y_end = height;\n break;\n case TGA_ORIGIN_BL:\n x_start = 0;\n x_step = 1;\n x_end = width;\n y_start = height - 1;\n y_step = -1;\n y_end = -1;\n break;\n case TGA_ORIGIN_UR:\n x_start = width - 1;\n x_step = -1;\n x_end = -1;\n y_start = 0;\n y_step = 1;\n y_end = height;\n break;\n case TGA_ORIGIN_BR:\n x_start = width - 1;\n x_step = -1;\n x_end = -1;\n y_start = height - 1;\n y_step = -1;\n y_end = -1;\n break;\n }\n if (use_grey) {\n switch (header.pixel_size) {\n case 8:\n tgaGetImageDataGrey8bits(data, y_start, y_step, y_end, x_start, x_step, x_end, image);\n break;\n case 16:\n tgaGetImageDataGrey16bits(data, y_start, y_step, y_end, x_start, x_step, x_end, image);\n break;\n default:\n console.error(\"THREE.TGALoader: Format not supported.\");\n break;\n }\n } else {\n switch (header.pixel_size) {\n case 8:\n tgaGetImageData8bits(data, y_start, y_step, y_end, x_start, x_step, x_end, image, palette);\n break;\n case 16:\n tgaGetImageData16bits(data, y_start, y_step, y_end, x_start, x_step, x_end, image);\n break;\n case 24:\n tgaGetImageData24bits(data, y_start, y_step, y_end, x_start, x_step, x_end, image);\n break;\n case 32:\n tgaGetImageData32bits(data, y_start, y_step, y_end, x_start, x_step, x_end, image);\n break;\n default:\n console.error(\"THREE.TGALoader: Format not supported.\");\n break;\n }\n }\n return data;\n }\n const TGA_TYPE_NO_DATA = 0, TGA_TYPE_INDEXED = 1, TGA_TYPE_RGB = 2, TGA_TYPE_GREY = 3, TGA_TYPE_RLE_INDEXED = 9, TGA_TYPE_RLE_RGB = 10, TGA_TYPE_RLE_GREY = 11, TGA_ORIGIN_MASK = 48, TGA_ORIGIN_SHIFT = 4, TGA_ORIGIN_BL = 0, TGA_ORIGIN_BR = 1, TGA_ORIGIN_UL = 2, TGA_ORIGIN_UR = 3;\n if (buffer.length < 19)\n console.error(\"THREE.TGALoader: Not enough data to contain header.\");\n let offset = 0;\n const content = new Uint8Array(buffer), header = {\n id_length: content[offset++],\n colormap_type: content[offset++],\n image_type: content[offset++],\n colormap_index: content[offset++] | content[offset++] << 8,\n colormap_length: content[offset++] | content[offset++] << 8,\n colormap_size: content[offset++],\n origin: [content[offset++] | content[offset++] << 8, content[offset++] | content[offset++] << 8],\n width: content[offset++] | content[offset++] << 8,\n height: content[offset++] | content[offset++] << 8,\n pixel_size: content[offset++],\n flags: content[offset++]\n };\n tgaCheckHeader(header);\n if (header.id_length + offset > buffer.length) {\n console.error(\"THREE.TGALoader: No data.\");\n }\n offset += header.id_length;\n let use_rle = false, use_pal = false, use_grey = false;\n switch (header.image_type) {\n case TGA_TYPE_RLE_INDEXED:\n use_rle = true;\n use_pal = true;\n break;\n case TGA_TYPE_INDEXED:\n use_pal = true;\n break;\n case TGA_TYPE_RLE_RGB:\n use_rle = true;\n break;\n case TGA_TYPE_RGB:\n break;\n case TGA_TYPE_RLE_GREY:\n use_rle = true;\n use_grey = true;\n break;\n case TGA_TYPE_GREY:\n use_grey = true;\n break;\n }\n const imageData = new Uint8Array(header.width * header.height * 4);\n const result = tgaParse(use_rle, use_pal, header, offset, content);\n getTgaRGBA(imageData, header.width, header.height, result.pixel_data, result.palettes);\n return {\n data: imageData,\n width: header.width,\n height: header.height,\n flipY: true,\n generateMipmaps: true,\n minFilter: LinearMipmapLinearFilter\n };\n }\n}\nexport {\n TGALoader\n};\n//# sourceMappingURL=TGALoader.js.map\n","import { Texture, NearestFilter, ClampToEdgeWrapping } from \"three\";\nclass Data3DTexture extends Texture {\n constructor(data = null, width = 1, height = 1, depth = 1) {\n super(null);\n this.isData3DTexture = true;\n this.image = { data, width, height, depth };\n this.magFilter = NearestFilter;\n this.minFilter = NearestFilter;\n this.wrapR = ClampToEdgeWrapping;\n this.generateMipmaps = false;\n this.flipY = false;\n this.unpackAlignment = 1;\n }\n}\nexport {\n Data3DTexture\n};\n//# sourceMappingURL=Data3DTexture.js.map\n","import { Loader, FileLoader, Vector3, DataTexture, UnsignedByteType, LinearFilter, ClampToEdgeWrapping } from \"three\";\nimport { Data3DTexture } from \"../_polyfill/Data3DTexture.js\";\nclass LUTCubeLoader extends Loader {\n load(url, onLoad, onProgress, onError) {\n const loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setResponseType(\"text\");\n loader.load(\n url,\n (text) => {\n try {\n onLoad(this.parse(text));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n this.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(str) {\n str = str.replace(/^#.*?(\\n|\\r)/gm, \"\").replace(/^\\s*?(\\n|\\r)/gm, \"\").trim();\n let title = null;\n let size = null;\n const domainMin = new Vector3(0, 0, 0);\n const domainMax = new Vector3(1, 1, 1);\n const lines = str.split(/[\\n\\r]+/g);\n let data = null;\n let currIndex = 0;\n for (let i = 0, l = lines.length; i < l; i++) {\n const line = lines[i].trim();\n const split = line.split(/\\s/g);\n switch (split[0]) {\n case \"TITLE\":\n title = line.substring(7, line.length - 1);\n break;\n case \"LUT_3D_SIZE\":\n const sizeToken = split[1];\n size = parseFloat(sizeToken);\n data = new Uint8Array(size * size * size * 4);\n break;\n case \"DOMAIN_MIN\":\n domainMin.x = parseFloat(split[1]);\n domainMin.y = parseFloat(split[2]);\n domainMin.z = parseFloat(split[3]);\n break;\n case \"DOMAIN_MAX\":\n domainMax.x = parseFloat(split[1]);\n domainMax.y = parseFloat(split[2]);\n domainMax.z = parseFloat(split[3]);\n break;\n default:\n const r = parseFloat(split[0]);\n const g = parseFloat(split[1]);\n const b = parseFloat(split[2]);\n if (r > 1 || r < 0 || g > 1 || g < 0 || b > 1 || b < 0) {\n throw new Error(\"LUTCubeLoader : Non normalized values not supported.\");\n }\n data[currIndex + 0] = r * 255;\n data[currIndex + 1] = g * 255;\n data[currIndex + 2] = b * 255;\n data[currIndex + 3] = 255;\n currIndex += 4;\n }\n }\n const texture = new DataTexture();\n texture.image.data = data;\n texture.image.width = size;\n texture.image.height = size * size;\n texture.type = UnsignedByteType;\n texture.magFilter = LinearFilter;\n texture.minFilter = LinearFilter;\n texture.wrapS = ClampToEdgeWrapping;\n texture.wrapT = ClampToEdgeWrapping;\n texture.generateMipmaps = false;\n texture.needsUpdate = true;\n const texture3D = new Data3DTexture();\n texture3D.image.data = data;\n texture3D.image.width = size;\n texture3D.image.height = size;\n texture3D.image.depth = size;\n texture3D.type = UnsignedByteType;\n texture3D.magFilter = LinearFilter;\n texture3D.minFilter = LinearFilter;\n texture3D.wrapS = ClampToEdgeWrapping;\n texture3D.wrapT = ClampToEdgeWrapping;\n texture3D.wrapR = ClampToEdgeWrapping;\n texture3D.generateMipmaps = false;\n texture3D.needsUpdate = true;\n return {\n title,\n size,\n domainMin,\n domainMax,\n texture,\n texture3D\n };\n }\n}\nexport {\n LUTCubeLoader\n};\n//# sourceMappingURL=LUTCubeLoader.js.map\n","import { Loader, FileLoader, Vector3, Matrix4 } from \"three\";\nimport { gunzipSync } from \"fflate\";\nimport { Volume } from \"../misc/Volume.js\";\nclass NRRDLoader extends Loader {\n constructor(manager) {\n super(manager);\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const loader = new FileLoader(scope.manager);\n loader.setPath(scope.path);\n loader.setResponseType(\"arraybuffer\");\n loader.setRequestHeader(scope.requestHeader);\n loader.setWithCredentials(scope.withCredentials);\n loader.load(\n url,\n function(data) {\n try {\n onLoad(scope.parse(data));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(data) {\n let _data = data;\n let _dataPointer = 0;\n const _nativeLittleEndian = new Int8Array(new Int16Array([1]).buffer)[0] > 0;\n const _littleEndian = true;\n const headerObject = {};\n function scan(type, chunks) {\n if (chunks === void 0 || chunks === null) {\n chunks = 1;\n }\n let _chunkSize = 1;\n let _array_type = Uint8Array;\n switch (type) {\n case \"uchar\":\n break;\n case \"schar\":\n _array_type = Int8Array;\n break;\n case \"ushort\":\n _array_type = Uint16Array;\n _chunkSize = 2;\n break;\n case \"sshort\":\n _array_type = Int16Array;\n _chunkSize = 2;\n break;\n case \"uint\":\n _array_type = Uint32Array;\n _chunkSize = 4;\n break;\n case \"sint\":\n _array_type = Int32Array;\n _chunkSize = 4;\n break;\n case \"float\":\n _array_type = Float32Array;\n _chunkSize = 4;\n break;\n case \"complex\":\n _array_type = Float64Array;\n _chunkSize = 8;\n break;\n case \"double\":\n _array_type = Float64Array;\n _chunkSize = 8;\n break;\n }\n let _bytes2 = new _array_type(_data.slice(_dataPointer, _dataPointer += chunks * _chunkSize));\n if (_nativeLittleEndian != _littleEndian) {\n _bytes2 = flipEndianness(_bytes2, _chunkSize);\n }\n if (chunks == 1) {\n return _bytes2[0];\n }\n return _bytes2;\n }\n function flipEndianness(array, chunkSize) {\n const u8 = new Uint8Array(array.buffer, array.byteOffset, array.byteLength);\n for (let i2 = 0; i2 < array.byteLength; i2 += chunkSize) {\n for (let j = i2 + chunkSize - 1, k = i2; j > k; j--, k++) {\n const tmp = u8[k];\n u8[k] = u8[j];\n u8[j] = tmp;\n }\n }\n return array;\n }\n function parseHeader(header) {\n let data2, field, fn, i2, l, m, _i, _len;\n const lines = header.split(/\\r?\\n/);\n for (_i = 0, _len = lines.length; _i < _len; _i++) {\n l = lines[_i];\n if (l.match(/NRRD\\d+/)) {\n headerObject.isNrrd = true;\n } else if (l.match(/^#/))\n ;\n else if (m = l.match(/(.*):(.*)/)) {\n field = m[1].trim();\n data2 = m[2].trim();\n fn = _fieldFunctions[field];\n if (fn) {\n fn.call(headerObject, data2);\n } else {\n headerObject[field] = data2;\n }\n }\n }\n if (!headerObject.isNrrd) {\n throw new Error(\"Not an NRRD file\");\n }\n if (headerObject.encoding === \"bz2\" || headerObject.encoding === \"bzip2\") {\n throw new Error(\"Bzip is not supported\");\n }\n if (!headerObject.vectors) {\n headerObject.vectors = [new Vector3(1, 0, 0), new Vector3(0, 1, 0), new Vector3(0, 0, 1)];\n if (headerObject.spacings) {\n for (i2 = 0; i2 <= 2; i2++) {\n if (!isNaN(headerObject.spacings[i2])) {\n headerObject.vectors[i2].multiplyScalar(headerObject.spacings[i2]);\n }\n }\n }\n }\n }\n function parseDataAsText(data2, start, end) {\n let number = \"\";\n start = start || 0;\n end = end || data2.length;\n let value;\n const lengthOfTheResult = headerObject.sizes.reduce(function(previous, current) {\n return previous * current;\n }, 1);\n let base = 10;\n if (headerObject.encoding === \"hex\") {\n base = 16;\n }\n const result = new headerObject.__array(lengthOfTheResult);\n let resultIndex = 0;\n let parsingFunction = parseInt;\n if (headerObject.__array === Float32Array || headerObject.__array === Float64Array) {\n parsingFunction = parseFloat;\n }\n for (let i2 = start; i2 < end; i2++) {\n value = data2[i2];\n if ((value < 9 || value > 13) && value !== 32) {\n number += String.fromCharCode(value);\n } else {\n if (number !== \"\") {\n result[resultIndex] = parsingFunction(number, base);\n resultIndex++;\n }\n number = \"\";\n }\n }\n if (number !== \"\") {\n result[resultIndex] = parsingFunction(number, base);\n resultIndex++;\n }\n return result;\n }\n const _bytes = scan(\"uchar\", data.byteLength);\n const _length = _bytes.length;\n let _header = null;\n let _data_start = 0;\n let i;\n for (i = 1; i < _length; i++) {\n if (_bytes[i - 1] == 10 && _bytes[i] == 10) {\n _header = this.parseChars(_bytes, 0, i - 2);\n _data_start = i + 1;\n break;\n }\n }\n parseHeader(_header);\n _data = _bytes.subarray(_data_start);\n if (headerObject.encoding.substring(0, 2) === \"gz\") {\n _data = gunzipSync(new Uint8Array(_data));\n } else if (headerObject.encoding === \"ascii\" || headerObject.encoding === \"text\" || headerObject.encoding === \"txt\" || headerObject.encoding === \"hex\") {\n _data = parseDataAsText(_data);\n } else if (headerObject.encoding === \"raw\") {\n const _copy = new Uint8Array(_data.length);\n for (let i2 = 0; i2 < _data.length; i2++) {\n _copy[i2] = _data[i2];\n }\n _data = _copy;\n }\n _data = _data.buffer;\n const volume = new Volume();\n volume.header = headerObject;\n volume.data = new headerObject.__array(_data);\n const min_max = volume.computeMinMax();\n const min = min_max[0];\n const max = min_max[1];\n volume.windowLow = min;\n volume.windowHigh = max;\n volume.dimensions = [headerObject.sizes[0], headerObject.sizes[1], headerObject.sizes[2]];\n volume.xLength = volume.dimensions[0];\n volume.yLength = volume.dimensions[1];\n volume.zLength = volume.dimensions[2];\n const spacingX = new Vector3(\n headerObject.vectors[0][0],\n headerObject.vectors[0][1],\n headerObject.vectors[0][2]\n ).length();\n const spacingY = new Vector3(\n headerObject.vectors[1][0],\n headerObject.vectors[1][1],\n headerObject.vectors[1][2]\n ).length();\n const spacingZ = new Vector3(\n headerObject.vectors[2][0],\n headerObject.vectors[2][1],\n headerObject.vectors[2][2]\n ).length();\n volume.spacing = [spacingX, spacingY, spacingZ];\n volume.matrix = new Matrix4();\n let _spaceX = 1;\n let _spaceY = 1;\n const _spaceZ = 1;\n if (headerObject.space == \"left-posterior-superior\") {\n _spaceX = -1;\n _spaceY = -1;\n } else if (headerObject.space === \"left-anterior-superior\") {\n _spaceX = -1;\n }\n if (!headerObject.vectors) {\n volume.matrix.set(_spaceX, 0, 0, 0, 0, _spaceY, 0, 0, 0, 0, _spaceZ, 0, 0, 0, 0, 1);\n } else {\n const v = headerObject.vectors;\n volume.matrix.set(\n _spaceX * v[0][0],\n _spaceX * v[1][0],\n _spaceX * v[2][0],\n 0,\n _spaceY * v[0][1],\n _spaceY * v[1][1],\n _spaceY * v[2][1],\n 0,\n _spaceZ * v[0][2],\n _spaceZ * v[1][2],\n _spaceZ * v[2][2],\n 0,\n 0,\n 0,\n 0,\n 1\n );\n }\n volume.inverseMatrix = new Matrix4();\n volume.inverseMatrix.copy(volume.matrix).invert();\n volume.RASDimensions = new Vector3(volume.xLength, volume.yLength, volume.zLength).applyMatrix4(volume.matrix).round().toArray().map(Math.abs);\n if (volume.lowerThreshold === -Infinity) {\n volume.lowerThreshold = min;\n }\n if (volume.upperThreshold === Infinity) {\n volume.upperThreshold = max;\n }\n return volume;\n }\n parseChars(array, start, end) {\n if (start === void 0) {\n start = 0;\n }\n if (end === void 0) {\n end = array.length;\n }\n let output = \"\";\n let i = 0;\n for (i = start; i < end; ++i) {\n output += String.fromCharCode(array[i]);\n }\n return output;\n }\n}\nconst _fieldFunctions = {\n type: function(data) {\n switch (data) {\n case \"uchar\":\n case \"unsigned char\":\n case \"uint8\":\n case \"uint8_t\":\n this.__array = Uint8Array;\n break;\n case \"signed char\":\n case \"int8\":\n case \"int8_t\":\n this.__array = Int8Array;\n break;\n case \"short\":\n case \"short int\":\n case \"signed short\":\n case \"signed short int\":\n case \"int16\":\n case \"int16_t\":\n this.__array = Int16Array;\n break;\n case \"ushort\":\n case \"unsigned short\":\n case \"unsigned short int\":\n case \"uint16\":\n case \"uint16_t\":\n this.__array = Uint16Array;\n break;\n case \"int\":\n case \"signed int\":\n case \"int32\":\n case \"int32_t\":\n this.__array = Int32Array;\n break;\n case \"uint\":\n case \"unsigned int\":\n case \"uint32\":\n case \"uint32_t\":\n this.__array = Uint32Array;\n break;\n case \"float\":\n this.__array = Float32Array;\n break;\n case \"double\":\n this.__array = Float64Array;\n break;\n default:\n throw new Error(\"Unsupported NRRD data type: \" + data);\n }\n return this.type = data;\n },\n endian: function(data) {\n return this.endian = data;\n },\n encoding: function(data) {\n return this.encoding = data;\n },\n dimension: function(data) {\n return this.dim = parseInt(data, 10);\n },\n sizes: function(data) {\n let i;\n return this.sizes = function() {\n const _ref = data.split(/\\s+/);\n const _results = [];\n for (let _i = 0, _len = _ref.length; _i < _len; _i++) {\n i = _ref[_i];\n _results.push(parseInt(i, 10));\n }\n return _results;\n }();\n },\n space: function(data) {\n return this.space = data;\n },\n \"space origin\": function(data) {\n return this.space_origin = data.split(\"(\")[1].split(\")\")[0].split(\",\");\n },\n \"space directions\": function(data) {\n let f, v;\n const parts = data.match(/\\(.*?\\)/g);\n return this.vectors = function() {\n const _results = [];\n for (let _i = 0, _len = parts.length; _i < _len; _i++) {\n v = parts[_i];\n _results.push(\n function() {\n const _ref = v.slice(1, -1).split(/,/);\n const _results2 = [];\n for (let _j = 0, _len2 = _ref.length; _j < _len2; _j++) {\n f = _ref[_j];\n _results2.push(parseFloat(f));\n }\n return _results2;\n }()\n );\n }\n return _results;\n }();\n },\n spacings: function(data) {\n let f;\n const parts = data.split(/\\s+/);\n return this.spacings = function() {\n const _results = [];\n for (let _i = 0, _len = parts.length; _i < _len; _i++) {\n f = parts[_i];\n _results.push(parseFloat(f));\n }\n return _results;\n }();\n }\n};\nexport {\n NRRDLoader\n};\n//# sourceMappingURL=NRRDLoader.js.map\n","import { Loader, FileLoader, BufferGeometry, BufferAttribute, Vector3, Float32BufferAttribute } from \"three\";\nimport { decodeText } from \"../_polyfill/LoaderUtils.js\";\nclass STLLoader extends Loader {\n constructor(manager) {\n super(manager);\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setResponseType(\"arraybuffer\");\n loader.setRequestHeader(this.requestHeader);\n loader.setWithCredentials(this.withCredentials);\n loader.load(\n url,\n function(text) {\n try {\n onLoad(scope.parse(text));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(data) {\n function isBinary(data2) {\n const reader = new DataView(data2);\n const face_size = 32 / 8 * 3 + 32 / 8 * 3 * 3 + 16 / 8;\n const n_faces = reader.getUint32(80, true);\n const expect = 80 + 32 / 8 + n_faces * face_size;\n if (expect === reader.byteLength) {\n return true;\n }\n const solid = [115, 111, 108, 105, 100];\n for (let off = 0; off < 5; off++) {\n if (matchDataViewAt(solid, reader, off))\n return false;\n }\n return true;\n }\n function matchDataViewAt(query, reader, offset) {\n for (let i = 0, il = query.length; i < il; i++) {\n if (query[i] !== reader.getUint8(offset + i, false))\n return false;\n }\n return true;\n }\n function parseBinary(data2) {\n const reader = new DataView(data2);\n const faces = reader.getUint32(80, true);\n let r, g, b, hasColors = false, colors;\n let defaultR, defaultG, defaultB, alpha;\n for (let index = 0; index < 80 - 10; index++) {\n if (reader.getUint32(index, false) == 1129270351 && reader.getUint8(index + 4) == 82 && reader.getUint8(index + 5) == 61) {\n hasColors = true;\n colors = new Float32Array(faces * 3 * 3);\n defaultR = reader.getUint8(index + 6) / 255;\n defaultG = reader.getUint8(index + 7) / 255;\n defaultB = reader.getUint8(index + 8) / 255;\n alpha = reader.getUint8(index + 9) / 255;\n }\n }\n const dataOffset = 84;\n const faceLength = 12 * 4 + 2;\n const geometry = new BufferGeometry();\n const vertices = new Float32Array(faces * 3 * 3);\n const normals = new Float32Array(faces * 3 * 3);\n for (let face = 0; face < faces; face++) {\n const start = dataOffset + face * faceLength;\n const normalX = reader.getFloat32(start, true);\n const normalY = reader.getFloat32(start + 4, true);\n const normalZ = reader.getFloat32(start + 8, true);\n if (hasColors) {\n const packedColor = reader.getUint16(start + 48, true);\n if ((packedColor & 32768) === 0) {\n r = (packedColor & 31) / 31;\n g = (packedColor >> 5 & 31) / 31;\n b = (packedColor >> 10 & 31) / 31;\n } else {\n r = defaultR;\n g = defaultG;\n b = defaultB;\n }\n }\n for (let i = 1; i <= 3; i++) {\n const vertexstart = start + i * 12;\n const componentIdx = face * 3 * 3 + (i - 1) * 3;\n vertices[componentIdx] = reader.getFloat32(vertexstart, true);\n vertices[componentIdx + 1] = reader.getFloat32(vertexstart + 4, true);\n vertices[componentIdx + 2] = reader.getFloat32(vertexstart + 8, true);\n normals[componentIdx] = normalX;\n normals[componentIdx + 1] = normalY;\n normals[componentIdx + 2] = normalZ;\n if (hasColors) {\n colors[componentIdx] = r;\n colors[componentIdx + 1] = g;\n colors[componentIdx + 2] = b;\n }\n }\n }\n geometry.setAttribute(\"position\", new BufferAttribute(vertices, 3));\n geometry.setAttribute(\"normal\", new BufferAttribute(normals, 3));\n if (hasColors) {\n geometry.setAttribute(\"color\", new BufferAttribute(colors, 3));\n geometry.hasColors = true;\n geometry.alpha = alpha;\n }\n return geometry;\n }\n function parseASCII(data2) {\n const geometry = new BufferGeometry();\n const patternSolid = /solid([\\s\\S]*?)endsolid/g;\n const patternFace = /facet([\\s\\S]*?)endfacet/g;\n let faceCounter = 0;\n const patternFloat = /[\\s]+([+-]?(?:\\d*)(?:\\.\\d*)?(?:[eE][+-]?\\d+)?)/.source;\n const patternVertex = new RegExp(\"vertex\" + patternFloat + patternFloat + patternFloat, \"g\");\n const patternNormal = new RegExp(\"normal\" + patternFloat + patternFloat + patternFloat, \"g\");\n const vertices = [];\n const normals = [];\n const normal = new Vector3();\n let result;\n let groupCount = 0;\n let startVertex = 0;\n let endVertex = 0;\n while ((result = patternSolid.exec(data2)) !== null) {\n startVertex = endVertex;\n const solid = result[0];\n while ((result = patternFace.exec(solid)) !== null) {\n let vertexCountPerFace = 0;\n let normalCountPerFace = 0;\n const text = result[0];\n while ((result = patternNormal.exec(text)) !== null) {\n normal.x = parseFloat(result[1]);\n normal.y = parseFloat(result[2]);\n normal.z = parseFloat(result[3]);\n normalCountPerFace++;\n }\n while ((result = patternVertex.exec(text)) !== null) {\n vertices.push(parseFloat(result[1]), parseFloat(result[2]), parseFloat(result[3]));\n normals.push(normal.x, normal.y, normal.z);\n vertexCountPerFace++;\n endVertex++;\n }\n if (normalCountPerFace !== 1) {\n console.error(\"THREE.STLLoader: Something isn't right with the normal of face number \" + faceCounter);\n }\n if (vertexCountPerFace !== 3) {\n console.error(\"THREE.STLLoader: Something isn't right with the vertices of face number \" + faceCounter);\n }\n faceCounter++;\n }\n const start = startVertex;\n const count = endVertex - startVertex;\n geometry.addGroup(start, count, groupCount);\n groupCount++;\n }\n geometry.setAttribute(\"position\", new Float32BufferAttribute(vertices, 3));\n geometry.setAttribute(\"normal\", new Float32BufferAttribute(normals, 3));\n return geometry;\n }\n function ensureString(buffer) {\n if (typeof buffer !== \"string\") {\n return decodeText(new Uint8Array(buffer));\n }\n return buffer;\n }\n function ensureBinary(buffer) {\n if (typeof buffer === \"string\") {\n const array_buffer = new Uint8Array(buffer.length);\n for (let i = 0; i < buffer.length; i++) {\n array_buffer[i] = buffer.charCodeAt(i) & 255;\n }\n return array_buffer.buffer || array_buffer;\n } else {\n return buffer;\n }\n }\n const binData = ensureBinary(data);\n return isBinary(binData) ? parseBinary(binData) : parseASCII(ensureString(data));\n }\n}\nexport {\n STLLoader\n};\n//# sourceMappingURL=STLLoader.js.map\n","import { Loader, LoaderUtils, FileLoader, FrontSide, RepeatWrapping, Color, MeshPhongMaterial, Vector2, DefaultLoadingManager, TextureLoader } from \"three\";\nclass MTLLoader extends Loader {\n constructor(manager) {\n super(manager);\n }\n /**\n * Loads and parses a MTL asset from a URL.\n *\n * @param {String} url - URL to the MTL file.\n * @param {Function} [onLoad] - Callback invoked with the loaded object.\n * @param {Function} [onProgress] - Callback for download progress.\n * @param {Function} [onError] - Callback for download errors.\n *\n * @see setPath setResourcePath\n *\n * @note In order for relative texture references to resolve correctly\n * you must call setResourcePath() explicitly prior to load.\n */\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const path = this.path === \"\" ? LoaderUtils.extractUrlBase(url) : this.path;\n const loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setRequestHeader(this.requestHeader);\n loader.setWithCredentials(this.withCredentials);\n loader.load(\n url,\n function(text) {\n try {\n onLoad(scope.parse(text, path));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n setMaterialOptions(value) {\n this.materialOptions = value;\n return this;\n }\n /**\n * Parses a MTL file.\n *\n * @param {String} text - Content of MTL file\n * @return {MaterialCreator}\n *\n * @see setPath setResourcePath\n *\n * @note In order for relative texture references to resolve correctly\n * you must call setResourcePath() explicitly prior to parse.\n */\n parse(text, path) {\n const lines = text.split(\"\\n\");\n let info = {};\n const delimiter_pattern = /\\s+/;\n const materialsInfo = {};\n for (let i = 0; i < lines.length; i++) {\n let line = lines[i];\n line = line.trim();\n if (line.length === 0 || line.charAt(0) === \"#\") {\n continue;\n }\n const pos = line.indexOf(\" \");\n let key = pos >= 0 ? line.substring(0, pos) : line;\n key = key.toLowerCase();\n let value = pos >= 0 ? line.substring(pos + 1) : \"\";\n value = value.trim();\n if (key === \"newmtl\") {\n info = { name: value };\n materialsInfo[value] = info;\n } else {\n if (key === \"ka\" || key === \"kd\" || key === \"ks\" || key === \"ke\") {\n const ss = value.split(delimiter_pattern, 3);\n info[key] = [parseFloat(ss[0]), parseFloat(ss[1]), parseFloat(ss[2])];\n } else {\n info[key] = value;\n }\n }\n }\n const materialCreator = new MaterialCreator(this.resourcePath || path, this.materialOptions);\n materialCreator.setCrossOrigin(this.crossOrigin);\n materialCreator.setManager(this.manager);\n materialCreator.setMaterials(materialsInfo);\n return materialCreator;\n }\n}\nclass MaterialCreator {\n constructor(baseUrl = \"\", options = {}) {\n this.baseUrl = baseUrl;\n this.options = options;\n this.materialsInfo = {};\n this.materials = {};\n this.materialsArray = [];\n this.nameLookup = {};\n this.crossOrigin = \"anonymous\";\n this.side = this.options.side !== void 0 ? this.options.side : FrontSide;\n this.wrap = this.options.wrap !== void 0 ? this.options.wrap : RepeatWrapping;\n }\n setCrossOrigin(value) {\n this.crossOrigin = value;\n return this;\n }\n setManager(value) {\n this.manager = value;\n }\n setMaterials(materialsInfo) {\n this.materialsInfo = this.convert(materialsInfo);\n this.materials = {};\n this.materialsArray = [];\n this.nameLookup = {};\n }\n convert(materialsInfo) {\n if (!this.options)\n return materialsInfo;\n const converted = {};\n for (const mn in materialsInfo) {\n const mat = materialsInfo[mn];\n const covmat = {};\n converted[mn] = covmat;\n for (const prop in mat) {\n let save = true;\n let value = mat[prop];\n const lprop = prop.toLowerCase();\n switch (lprop) {\n case \"kd\":\n case \"ka\":\n case \"ks\":\n if (this.options && this.options.normalizeRGB) {\n value = [value[0] / 255, value[1] / 255, value[2] / 255];\n }\n if (this.options && this.options.ignoreZeroRGBs) {\n if (value[0] === 0 && value[1] === 0 && value[2] === 0) {\n save = false;\n }\n }\n break;\n }\n if (save) {\n covmat[lprop] = value;\n }\n }\n }\n return converted;\n }\n preload() {\n for (const mn in this.materialsInfo) {\n this.create(mn);\n }\n }\n getIndex(materialName) {\n return this.nameLookup[materialName];\n }\n getAsArray() {\n let index = 0;\n for (const mn in this.materialsInfo) {\n this.materialsArray[index] = this.create(mn);\n this.nameLookup[mn] = index;\n index++;\n }\n return this.materialsArray;\n }\n create(materialName) {\n if (this.materials[materialName] === void 0) {\n this.createMaterial_(materialName);\n }\n return this.materials[materialName];\n }\n createMaterial_(materialName) {\n const scope = this;\n const mat = this.materialsInfo[materialName];\n const params = {\n name: materialName,\n side: this.side\n };\n function resolveURL(baseUrl, url) {\n if (typeof url !== \"string\" || url === \"\")\n return \"\";\n if (/^https?:\\/\\//i.test(url))\n return url;\n return baseUrl + url;\n }\n function setMapForType(mapType, value) {\n if (params[mapType])\n return;\n const texParams = scope.getTextureParams(value, params);\n const map = scope.loadTexture(resolveURL(scope.baseUrl, texParams.url));\n map.repeat.copy(texParams.scale);\n map.offset.copy(texParams.offset);\n map.wrapS = scope.wrap;\n map.wrapT = scope.wrap;\n params[mapType] = map;\n }\n for (const prop in mat) {\n const value = mat[prop];\n let n;\n if (value === \"\")\n continue;\n switch (prop.toLowerCase()) {\n case \"kd\":\n params.color = new Color().fromArray(value);\n break;\n case \"ks\":\n params.specular = new Color().fromArray(value);\n break;\n case \"ke\":\n params.emissive = new Color().fromArray(value);\n break;\n case \"map_kd\":\n setMapForType(\"map\", value);\n break;\n case \"map_ks\":\n setMapForType(\"specularMap\", value);\n break;\n case \"map_ke\":\n setMapForType(\"emissiveMap\", value);\n break;\n case \"norm\":\n setMapForType(\"normalMap\", value);\n break;\n case \"map_bump\":\n case \"bump\":\n setMapForType(\"bumpMap\", value);\n break;\n case \"map_d\":\n setMapForType(\"alphaMap\", value);\n params.transparent = true;\n break;\n case \"ns\":\n params.shininess = parseFloat(value);\n break;\n case \"d\":\n n = parseFloat(value);\n if (n < 1) {\n params.opacity = n;\n params.transparent = true;\n }\n break;\n case \"tr\":\n n = parseFloat(value);\n if (this.options && this.options.invertTrProperty)\n n = 1 - n;\n if (n > 0) {\n params.opacity = 1 - n;\n params.transparent = true;\n }\n break;\n }\n }\n this.materials[materialName] = new MeshPhongMaterial(params);\n return this.materials[materialName];\n }\n getTextureParams(value, matParams) {\n const texParams = {\n scale: new Vector2(1, 1),\n offset: new Vector2(0, 0)\n };\n const items = value.split(/\\s+/);\n let pos;\n pos = items.indexOf(\"-bm\");\n if (pos >= 0) {\n matParams.bumpScale = parseFloat(items[pos + 1]);\n items.splice(pos, 2);\n }\n pos = items.indexOf(\"-s\");\n if (pos >= 0) {\n texParams.scale.set(parseFloat(items[pos + 1]), parseFloat(items[pos + 2]));\n items.splice(pos, 4);\n }\n pos = items.indexOf(\"-o\");\n if (pos >= 0) {\n texParams.offset.set(parseFloat(items[pos + 1]), parseFloat(items[pos + 2]));\n items.splice(pos, 4);\n }\n texParams.url = items.join(\" \").trim();\n return texParams;\n }\n loadTexture(url, mapping, onLoad, onProgress, onError) {\n const manager = this.manager !== void 0 ? this.manager : DefaultLoadingManager;\n let loader = manager.getHandler(url);\n if (loader === null) {\n loader = new TextureLoader(manager);\n }\n if (loader.setCrossOrigin)\n loader.setCrossOrigin(this.crossOrigin);\n const texture = loader.load(url, onLoad, onProgress, onError);\n if (mapping !== void 0)\n texture.mapping = mapping;\n return texture;\n }\n}\nexport {\n MTLLoader\n};\n//# sourceMappingURL=MTLLoader.js.map\n","import { Vector3, Quaternion, FileLoader, LoaderUtils, Matrix4, Bone, BufferGeometry, Float32BufferAttribute, Uint16BufferAttribute, MeshPhongMaterial, FrontSide, Vector2, SkinnedMesh, Mesh, Skeleton, AnimationClip, AnimationMixer, Loader, TextureLoader } from \"three\";\nimport { decodeText } from \"../_polyfill/LoaderUtils.js\";\nvar XLoader = /* @__PURE__ */ function() {\n var classCallCheck = function(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n };\n var createClass = function() {\n function defineProperties(target, props) {\n for (let i2 = 0; i2 < props.length; i2++) {\n var descriptor = props[i2];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor)\n descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n return function(Constructor, protoProps, staticProps) {\n if (protoProps)\n defineProperties(Constructor.prototype, protoProps);\n if (staticProps)\n defineProperties(Constructor, staticProps);\n return Constructor;\n };\n }();\n var XboneInf = function XboneInf2() {\n classCallCheck(this, XboneInf2);\n this.boneName = \"\";\n this.BoneIndex = 0;\n this.Indeces = [];\n this.Weights = [];\n this.initMatrix = null;\n this.OffsetMatrix = null;\n };\n var XAnimationInfo = function XAnimationInfo2() {\n classCallCheck(this, XAnimationInfo2);\n this.animeName = \"\";\n this.boneName = \"\";\n this.targetBone = null;\n this.keyType = 4;\n this.frameStartLv = 0;\n this.keyFrames = [];\n this.InverseMx = null;\n };\n var XAnimationObj = function() {\n function XAnimationObj2(_flags) {\n classCallCheck(this, XAnimationObj2);\n this.fps = 30;\n this.name = \"xanimation\";\n this.length = 0;\n this.hierarchy = [];\n this.putFlags = _flags;\n if (this.putFlags.putPos === void 0) {\n this.putFlags.putPos = true;\n }\n if (this.putFlags.putRot === void 0) {\n this.putFlags.putRot = true;\n }\n if (this.putFlags.putScl === void 0) {\n this.putFlags.putScl = true;\n }\n }\n createClass(XAnimationObj2, [\n {\n key: \"make\",\n value: function make(XAnimationInfoArray) {\n for (let i2 = 0; i2 < XAnimationInfoArray.length; i2++) {\n this.hierarchy.push(this.makeBonekeys(XAnimationInfoArray[i2]));\n }\n this.length = this.hierarchy[0].keys[this.hierarchy[0].keys.length - 1].time;\n }\n },\n {\n key: \"clone\",\n value: function clone() {\n return Object.assign({}, this);\n }\n },\n {\n key: \"makeBonekeys\",\n value: function makeBonekeys(XAnimationInfo2) {\n var refObj = {};\n refObj.name = XAnimationInfo2.boneName;\n refObj.parent = \"\";\n refObj.keys = this.keyFrameRefactor(XAnimationInfo2);\n refObj.copy = function() {\n return Object.assign({}, this);\n };\n return refObj;\n }\n },\n {\n key: \"keyFrameRefactor\",\n value: function keyFrameRefactor(XAnimationInfo2) {\n var keys = [];\n for (let i2 = 0; i2 < XAnimationInfo2.keyFrames.length; i2++) {\n var keyframe = {};\n keyframe.time = XAnimationInfo2.keyFrames[i2].time * this.fps;\n if (XAnimationInfo2.keyFrames[i2].pos && this.putFlags.putPos) {\n keyframe.pos = XAnimationInfo2.keyFrames[i2].pos;\n }\n if (XAnimationInfo2.keyFrames[i2].rot && this.putFlags.putRot) {\n keyframe.rot = XAnimationInfo2.keyFrames[i2].rot;\n }\n if (XAnimationInfo2.keyFrames[i2].scl && this.putFlags.putScl) {\n keyframe.scl = XAnimationInfo2.keyFrames[i2].scl;\n }\n if (XAnimationInfo2.keyFrames[i2].matrix) {\n keyframe.matrix = XAnimationInfo2.keyFrames[i2].matrix;\n if (this.putFlags.putPos) {\n keyframe.pos = new Vector3().setFromMatrixPosition(keyframe.matrix);\n }\n if (this.putFlags.putRot) {\n keyframe.rot = new Quaternion().setFromRotationMatrix(keyframe.matrix);\n }\n if (this.putFlags.putScl) {\n keyframe.scl = new Vector3().setFromMatrixScale(keyframe.matrix);\n }\n }\n keys.push(keyframe);\n }\n return keys;\n }\n }\n ]);\n return XAnimationObj2;\n }();\n var XKeyFrameInfo = function XKeyFrameInfo2() {\n classCallCheck(this, XKeyFrameInfo2);\n this.index = 0;\n this.Frame = 0;\n this.time = 0;\n this.matrix = null;\n };\n var XLoader2 = function() {\n function XLoader3(manager) {\n Loader.call(this, manager);\n classCallCheck(this, XLoader3);\n this.debug = false;\n this.texloader = new TextureLoader(this.manager);\n this.url = \"\";\n this._putMatLength = 0;\n this._nowMat = null;\n this._nowFrameName = \"\";\n this.frameHierarchie = [];\n this.Hierarchies = {};\n this.HieStack = [];\n this._currentObject = {};\n this._currentFrame = {};\n this._data = null;\n this.onLoad = null;\n this.IsUvYReverse = true;\n this.Meshes = [];\n this.animations = [];\n this.animTicksPerSecond = 30;\n this._currentGeo = null;\n this._currentAnime = null;\n this._currentAnimeFrames = null;\n }\n createClass(XLoader3, [\n {\n key: \"_setArgOption\",\n value: function _setArgOption(_arg) {\n var _start = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : 0;\n if (!_arg) {\n return;\n }\n for (let i2 = _start; i2 < _arg.length; i2++) {\n switch (i2) {\n case 0:\n this.url = _arg[i2];\n break;\n case 1:\n this.options = _arg[i2];\n break;\n }\n }\n if (this.options === void 0) {\n this.options = {};\n }\n }\n },\n {\n key: \"load\",\n value: function load(_arg, onLoad, onProgress, onError) {\n var _this = this;\n this._setArgOption(_arg);\n var loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setResponseType(\"arraybuffer\");\n loader.setRequestHeader(this.requestHeader);\n loader.setWithCredentials(this.withCredentials);\n loader.load(\n this.url,\n function(response) {\n try {\n _this.parse(response, onLoad);\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n _this.manager.itemError(_this.url);\n }\n },\n onProgress,\n onError\n );\n }\n },\n {\n key: \"_readLine\",\n value: function _readLine(line) {\n var readed = 0;\n while (true) {\n var find = -1;\n find = line.indexOf(\"//\", readed);\n if (find === -1) {\n find = line.indexOf(\"#\", readed);\n }\n if (find > -1 && find < 2) {\n var foundNewLine = -1;\n foundNewLine = line.indexOf(\"\\r\\n\", readed);\n if (foundNewLine > 0) {\n readed = foundNewLine + 2;\n } else {\n foundNewLine = line.indexOf(\"\\r\", readed);\n if (foundNewLine > 0) {\n readed = foundNewLine + 1;\n } else {\n readed = line.indexOf(\"\\n\", readed) + 1;\n }\n }\n } else {\n break;\n }\n }\n return line.substr(readed);\n }\n },\n {\n key: \"_readLine\",\n value: function _readLine(line) {\n var readed = 0;\n while (true) {\n var find = -1;\n find = line.indexOf(\"//\", readed);\n if (find === -1) {\n find = line.indexOf(\"#\", readed);\n }\n if (find > -1 && find < 2) {\n var foundNewLine = -1;\n foundNewLine = line.indexOf(\"\\r\\n\", readed);\n if (foundNewLine > 0) {\n readed = foundNewLine + 2;\n } else {\n foundNewLine = line.indexOf(\"\\r\", readed);\n if (foundNewLine > 0) {\n readed = foundNewLine + 1;\n } else {\n readed = line.indexOf(\"\\n\", readed) + 1;\n }\n }\n } else {\n break;\n }\n }\n return line.substr(readed);\n }\n },\n {\n key: \"_isBinary\",\n value: function _isBinary(binData) {\n var reader = new DataView(binData);\n var face_size = 32 / 8 * 3 + 32 / 8 * 3 * 3 + 16 / 8;\n var n_faces = reader.getUint32(80, true);\n var expect = 80 + 32 / 8 + n_faces * face_size;\n if (expect === reader.byteLength) {\n return true;\n }\n var fileLength = reader.byteLength;\n for (let index = 0; index < fileLength; index++) {\n if (reader.getUint8(index, false) > 127) {\n return true;\n }\n }\n return false;\n }\n },\n {\n key: \"_ensureBinary\",\n value: function _ensureBinary(buf) {\n if (typeof buf === \"string\") {\n var array_buffer = new Uint8Array(buf.length);\n for (let i2 = 0; i2 < buf.length; i2++) {\n array_buffer[i2] = buf.charCodeAt(i2) & 255;\n }\n return array_buffer.buffer || array_buffer;\n } else {\n return buf;\n }\n }\n },\n {\n key: \"_ensureString\",\n value: function _ensureString(buf) {\n if (typeof buf !== \"string\") {\n return decodeText(new Uint8Array(buf));\n } else {\n return buf;\n }\n }\n },\n {\n key: \"parse\",\n value: function _parse(data, onLoad) {\n var binData = this._ensureBinary(data);\n this._data = this._ensureString(data);\n this.onLoad = onLoad;\n return this._isBinary(binData) ? this._parseBinary(binData) : this._parseASCII();\n }\n },\n {\n key: \"_parseBinary\",\n value: function _parseBinary(data) {\n return this._parseASCII(decodeText(new Uint8Array(data)));\n }\n },\n {\n key: \"_parseASCII\",\n value: function _parseASCII() {\n var path;\n if (this.resourcePath !== \"\") {\n path = this.resourcePath;\n } else if (this.path !== \"\") {\n path = this.path;\n } else {\n path = LoaderUtils.extractUrlBase(this.url);\n }\n this.texloader.setPath(path).setCrossOrigin(this.crossOrigin);\n var endRead = 16;\n this.Hierarchies.children = [];\n this._hierarchieParse(this.Hierarchies, endRead);\n this._changeRoot();\n this._currentObject = this.Hierarchies.children.shift();\n this._mainloop();\n }\n },\n {\n key: \"_hierarchieParse\",\n value: function _hierarchieParse(_parent, _end) {\n var endRead = _end;\n while (true) {\n var find1 = this._data.indexOf(\"{\", endRead) + 1;\n var findEnd = this._data.indexOf(\"}\", endRead);\n var findNext = this._data.indexOf(\"{\", find1) + 1;\n if (find1 > 0 && findEnd > find1) {\n var _currentObject = {};\n _currentObject.children = [];\n var nameData = this._readLine(this._data.substr(endRead, find1 - endRead - 1)).trim();\n var word = nameData.split(/ /g);\n if (word.length > 0) {\n _currentObject.type = word[0];\n if (word.length >= 2) {\n _currentObject.name = word[1];\n } else {\n _currentObject.name = word[0] + this.Hierarchies.children.length;\n }\n } else {\n _currentObject.name = nameData;\n _currentObject.type = \"\";\n }\n if (_currentObject.type === \"Animation\") {\n _currentObject.data = this._data.substr(findNext, findEnd - findNext).trim();\n var refs = this._hierarchieParse(_currentObject, findEnd + 1);\n endRead = refs.end;\n _currentObject.children = refs.parent.children;\n } else {\n var DataEnder = this._data.lastIndexOf(\";\", findNext > 0 ? Math.min(findNext, findEnd) : findEnd);\n _currentObject.data = this._data.substr(find1, DataEnder - find1).trim();\n if (findNext <= 0 || findEnd < findNext) {\n endRead = findEnd + 1;\n } else {\n var nextStart = Math.max(DataEnder + 1, find1);\n var _refs = this._hierarchieParse(_currentObject, nextStart);\n endRead = _refs.end;\n _currentObject.children = _refs.parent.children;\n }\n }\n _currentObject.parent = _parent;\n if (_currentObject.type != \"template\") {\n _parent.children.push(_currentObject);\n }\n } else {\n endRead = find1 === -1 ? this._data.length : findEnd + 1;\n break;\n }\n }\n return {\n parent: _parent,\n end: endRead\n };\n }\n },\n {\n key: \"_mainloop\",\n value: function _mainloop() {\n var _this2 = this;\n this._mainProc();\n if (this._currentObject.parent || this._currentObject.children.length > 0 || !this._currentObject.worked) {\n setTimeout(function() {\n _this2._mainloop();\n }, 1);\n } else {\n setTimeout(function() {\n _this2.onLoad({\n models: _this2.Meshes,\n animations: _this2.animations\n });\n }, 1);\n }\n }\n },\n {\n key: \"_mainProc\",\n value: function _mainProc() {\n var breakFlag = false;\n while (true) {\n if (!this._currentObject.worked) {\n switch (this._currentObject.type) {\n case \"template\":\n break;\n case \"AnimTicksPerSecond\":\n this.animTicksPerSecond = parseInt(this._currentObject.data);\n break;\n case \"Frame\":\n this._setFrame();\n break;\n case \"FrameTransformMatrix\":\n this._setFrameTransformMatrix();\n break;\n case \"Mesh\":\n this._changeRoot();\n this._currentGeo = {};\n this._currentGeo.name = this._currentObject.name.trim();\n this._currentGeo.parentName = this._getParentName(this._currentObject).trim();\n this._currentGeo.VertexSetedBoneCount = [];\n this._currentGeo.GeometryData = {\n vertices: [],\n normals: [],\n uvs: [],\n skinIndices: [],\n skinWeights: [],\n indices: [],\n materialIndices: []\n };\n this._currentGeo.Materials = [];\n this._currentGeo.normalVectors = [];\n this._currentGeo.BoneInfs = [];\n this._currentGeo.baseFrame = this._currentFrame;\n this._makeBoneFrom_CurrentFrame();\n this._readVertexDatas();\n breakFlag = true;\n break;\n case \"MeshNormals\":\n this._readVertexDatas();\n break;\n case \"MeshTextureCoords\":\n this._setMeshTextureCoords();\n break;\n case \"VertexDuplicationIndices\":\n break;\n case \"MeshMaterialList\":\n this._setMeshMaterialList();\n break;\n case \"Material\":\n this._setMaterial();\n break;\n case \"SkinWeights\":\n this._setSkinWeights();\n break;\n case \"AnimationSet\":\n this._changeRoot();\n this._currentAnime = {};\n this._currentAnime.name = this._currentObject.name.trim();\n this._currentAnime.AnimeFrames = [];\n break;\n case \"Animation\":\n if (this._currentAnimeFrames) {\n this._currentAnime.AnimeFrames.push(this._currentAnimeFrames);\n }\n this._currentAnimeFrames = new XAnimationInfo();\n this._currentAnimeFrames.boneName = this._currentObject.data.trim();\n break;\n case \"AnimationKey\":\n this._readAnimationKey();\n breakFlag = true;\n break;\n }\n this._currentObject.worked = true;\n }\n if (this._currentObject.children.length > 0) {\n this._currentObject = this._currentObject.children.shift();\n if (this.debug) {\n console.log(\"processing \" + this._currentObject.name);\n }\n if (breakFlag)\n break;\n } else {\n if (this._currentObject.worked) {\n if (this._currentObject.parent && !this._currentObject.parent.parent) {\n this._changeRoot();\n }\n }\n if (this._currentObject.parent) {\n this._currentObject = this._currentObject.parent;\n } else {\n breakFlag = true;\n }\n if (breakFlag)\n break;\n }\n }\n return;\n }\n },\n {\n key: \"_changeRoot\",\n value: function _changeRoot() {\n if (this._currentGeo != null && this._currentGeo.name) {\n this._makeOutputGeometry();\n }\n this._currentGeo = {};\n if (this._currentAnime != null && this._currentAnime.name) {\n if (this._currentAnimeFrames) {\n this._currentAnime.AnimeFrames.push(this._currentAnimeFrames);\n this._currentAnimeFrames = null;\n }\n this._makeOutputAnimation();\n }\n this._currentAnime = {};\n }\n },\n {\n key: \"_getParentName\",\n value: function _getParentName(_obj) {\n if (_obj.parent) {\n if (_obj.parent.name) {\n return _obj.parent.name;\n } else {\n return this._getParentName(_obj.parent);\n }\n } else {\n return \"\";\n }\n }\n },\n {\n key: \"_setFrame\",\n value: function _setFrame() {\n this._nowFrameName = this._currentObject.name.trim();\n this._currentFrame = {};\n this._currentFrame.name = this._nowFrameName;\n this._currentFrame.children = [];\n if (this._currentObject.parent && this._currentObject.parent.name) {\n this._currentFrame.parentName = this._currentObject.parent.name;\n }\n this.frameHierarchie.push(this._nowFrameName);\n this.HieStack[this._nowFrameName] = this._currentFrame;\n }\n },\n {\n key: \"_setFrameTransformMatrix\",\n value: function _setFrameTransformMatrix() {\n this._currentFrame.FrameTransformMatrix = new Matrix4();\n var data = this._currentObject.data.split(\",\");\n this._ParseMatrixData(this._currentFrame.FrameTransformMatrix, data);\n this._makeBoneFrom_CurrentFrame();\n }\n },\n {\n key: \"_makeBoneFrom_CurrentFrame\",\n value: function _makeBoneFrom_CurrentFrame() {\n if (!this._currentFrame.FrameTransformMatrix) {\n return;\n }\n var b = new Bone();\n b.name = this._currentFrame.name;\n b.applyMatrix4(this._currentFrame.FrameTransformMatrix);\n b.matrixWorld = b.matrix;\n b.FrameTransformMatrix = this._currentFrame.FrameTransformMatrix;\n this._currentFrame.putBone = b;\n if (this._currentFrame.parentName) {\n for (let frame in this.HieStack) {\n if (this.HieStack[frame].name === this._currentFrame.parentName) {\n this.HieStack[frame].putBone.add(this._currentFrame.putBone);\n }\n }\n }\n }\n },\n {\n key: \"_readVertexDatas\",\n value: function _readVertexDatas() {\n var endRead = 0;\n var mode = 0;\n var mode_local = 0;\n var maxLength = 0;\n while (true) {\n var changeMode = false;\n if (mode_local === 0) {\n var refO = this._readInt1(endRead);\n endRead = refO.endRead;\n mode_local = 1;\n maxLength = this._currentObject.data.indexOf(\";;\", endRead) + 1;\n if (maxLength <= 0) {\n maxLength = this._currentObject.data.length;\n }\n } else {\n var find = 0;\n switch (mode) {\n case 0:\n find = this._currentObject.data.indexOf(\",\", endRead) + 1;\n break;\n case 1:\n find = this._currentObject.data.indexOf(\";,\", endRead) + 1;\n break;\n }\n if (find === 0 || find > maxLength) {\n find = maxLength;\n mode_local = 0;\n changeMode = true;\n }\n switch (this._currentObject.type) {\n case \"Mesh\":\n switch (mode) {\n case 0:\n this._readVertex1(this._currentObject.data.substr(endRead, find - endRead));\n break;\n case 1:\n this._readFace1(this._currentObject.data.substr(endRead, find - endRead));\n break;\n }\n break;\n case \"MeshNormals\":\n switch (mode) {\n case 0:\n this._readNormalVector1(this._currentObject.data.substr(endRead, find - endRead));\n break;\n }\n break;\n }\n endRead = find + 1;\n if (changeMode) {\n mode++;\n }\n }\n if (endRead >= this._currentObject.data.length) {\n break;\n }\n }\n }\n },\n {\n key: \"_readInt1\",\n value: function _readInt1(start) {\n var find = this._currentObject.data.indexOf(\";\", start);\n return {\n refI: parseInt(this._currentObject.data.substr(start, find - start)),\n endRead: find + 1\n };\n }\n },\n {\n key: \"_readVertex1\",\n value: function _readVertex1(line) {\n var data = this._readLine(line.trim()).substr(0, line.length - 2).split(\";\");\n this._currentGeo.GeometryData.vertices.push(parseFloat(data[0]), parseFloat(data[1]), parseFloat(data[2]));\n this._currentGeo.GeometryData.skinIndices.push(0, 0, 0, 0);\n this._currentGeo.GeometryData.skinWeights.push(1, 0, 0, 0);\n this._currentGeo.VertexSetedBoneCount.push(0);\n }\n },\n {\n key: \"_readFace1\",\n value: function _readFace1(line) {\n var data = this._readLine(line.trim()).substr(2, line.length - 4).split(\",\");\n this._currentGeo.GeometryData.indices.push(\n parseInt(data[0], 10),\n parseInt(data[1], 10),\n parseInt(data[2], 10)\n );\n }\n },\n {\n key: \"_readNormalVector1\",\n value: function _readNormalVector1(line) {\n var data = this._readLine(line.trim()).substr(0, line.length - 2).split(\";\");\n this._currentGeo.GeometryData.normals.push(parseFloat(data[0]), parseFloat(data[1]), parseFloat(data[2]));\n }\n },\n {\n key: \"_buildGeometry\",\n value: function _buildGeometry() {\n var bufferGeometry = new BufferGeometry();\n var position = [];\n var normals = [];\n var uvs = [];\n var skinIndices = [];\n var skinWeights = [];\n var data = this._currentGeo.GeometryData;\n for (let i2 = 0, l = data.indices.length; i2 < l; i2++) {\n var stride2 = data.indices[i2] * 2;\n var stride3 = data.indices[i2] * 3;\n var stride4 = data.indices[i2] * 4;\n position.push(data.vertices[stride3], data.vertices[stride3 + 1], data.vertices[stride3 + 2]);\n normals.push(data.normals[stride3], data.normals[stride3 + 1], data.normals[stride3 + 2]);\n skinIndices.push(\n data.skinIndices[stride4],\n data.skinIndices[stride4 + 1],\n data.skinIndices[stride4 + 2],\n data.skinIndices[stride4 + 3]\n );\n skinWeights.push(\n data.skinWeights[stride4],\n data.skinWeights[stride4 + 1],\n data.skinWeights[stride4 + 2],\n data.skinWeights[stride4 + 3]\n );\n uvs.push(data.uvs[stride2], data.uvs[stride2 + 1]);\n }\n bufferGeometry.setAttribute(\"position\", new Float32BufferAttribute(position, 3));\n bufferGeometry.setAttribute(\"normal\", new Float32BufferAttribute(normals, 3));\n bufferGeometry.setAttribute(\"uv\", new Float32BufferAttribute(uvs, 2));\n bufferGeometry.setAttribute(\"skinIndex\", new Uint16BufferAttribute(skinIndices, 4));\n bufferGeometry.setAttribute(\"skinWeight\", new Float32BufferAttribute(skinWeights, 4));\n this._computeGroups(bufferGeometry, data.materialIndices);\n return bufferGeometry;\n }\n },\n {\n key: \"_computeGroups\",\n value: function _computeGroups(bufferGeometry, materialIndices) {\n var group;\n var groups = [];\n var materialIndex = void 0;\n for (let i2 = 0; i2 < materialIndices.length; i2++) {\n var currentMaterialIndex = materialIndices[i2];\n if (currentMaterialIndex !== materialIndex) {\n materialIndex = currentMaterialIndex;\n if (group !== void 0) {\n group.count = i2 * 3 - group.start;\n groups.push(group);\n }\n group = {\n start: i2 * 3,\n materialIndex\n };\n }\n }\n if (group !== void 0) {\n group.count = i * 3 - group.start;\n groups.push(group);\n }\n bufferGeometry.groups = groups;\n }\n },\n {\n key: \"_setMeshTextureCoords\",\n value: function _setMeshTextureCoords() {\n var endRead = 0;\n var mode = 0;\n var mode_local = 0;\n while (true) {\n switch (mode) {\n case 0:\n if (mode_local === 0) {\n var refO = this._readInt1(0);\n endRead = refO.endRead;\n mode_local = 1;\n } else {\n var find = this._currentObject.data.indexOf(\",\", endRead) + 1;\n if (find === 0) {\n find = this._currentObject.data.length;\n mode = 2;\n mode_local = 0;\n }\n var line = this._currentObject.data.substr(endRead, find - endRead);\n var data = this._readLine(line.trim()).split(\";\");\n if (this.IsUvYReverse) {\n this._currentGeo.GeometryData.uvs.push(parseFloat(data[0]), 1 - parseFloat(data[1]));\n } else {\n this._currentGeo.GeometryData.uvs.push(parseFloat(data[0]), parseFloat(data[1]));\n }\n endRead = find + 1;\n }\n break;\n }\n if (endRead >= this._currentObject.data.length) {\n break;\n }\n }\n }\n },\n {\n key: \"_setMeshMaterialList\",\n value: function _setMeshMaterialList() {\n var endRead = 0;\n var mode = 0;\n var mode_local = 0;\n while (true) {\n if (mode_local < 2) {\n var refO = this._readInt1(endRead);\n endRead = refO.endRead;\n mode_local++;\n } else {\n var find = this._currentObject.data.indexOf(\";\", endRead);\n if (find === -1) {\n find = this._currentObject.data.length;\n mode = 3;\n mode_local = 0;\n }\n var line = this._currentObject.data.substr(endRead, find - endRead);\n var data = this._readLine(line.trim()).split(\",\");\n for (let i2 = 0; i2 < data.length; i2++) {\n this._currentGeo.GeometryData.materialIndices[i2] = parseInt(data[i2]);\n }\n endRead = this._currentObject.data.length;\n }\n if (endRead >= this._currentObject.data.length || mode >= 3) {\n break;\n }\n }\n }\n },\n {\n key: \"_setMaterial\",\n value: function _setMaterial() {\n var _nowMat = new MeshPhongMaterial({\n color: Math.random() * 16777215\n });\n _nowMat.side = FrontSide;\n _nowMat.name = this._currentObject.name;\n var endRead = 0;\n var find = this._currentObject.data.indexOf(\";;\", endRead);\n var line = this._currentObject.data.substr(endRead, find - endRead);\n var data = this._readLine(line.trim()).split(\";\");\n _nowMat.color.r = parseFloat(data[0]);\n _nowMat.color.g = parseFloat(data[1]);\n _nowMat.color.b = parseFloat(data[2]);\n endRead = find + 2;\n find = this._currentObject.data.indexOf(\";\", endRead);\n line = this._currentObject.data.substr(endRead, find - endRead);\n _nowMat.shininess = parseFloat(this._readLine(line));\n endRead = find + 1;\n find = this._currentObject.data.indexOf(\";;\", endRead);\n line = this._currentObject.data.substr(endRead, find - endRead);\n var data2 = this._readLine(line.trim()).split(\";\");\n _nowMat.specular.r = parseFloat(data2[0]);\n _nowMat.specular.g = parseFloat(data2[1]);\n _nowMat.specular.b = parseFloat(data2[2]);\n endRead = find + 2;\n find = this._currentObject.data.indexOf(\";;\", endRead);\n if (find === -1) {\n find = this._currentObject.data.length;\n }\n line = this._currentObject.data.substr(endRead, find - endRead);\n var data3 = this._readLine(line.trim()).split(\";\");\n _nowMat.emissive.r = parseFloat(data3[0]);\n _nowMat.emissive.g = parseFloat(data3[1]);\n _nowMat.emissive.b = parseFloat(data3[2]);\n var localObject = null;\n while (true) {\n if (this._currentObject.children.length > 0) {\n localObject = this._currentObject.children.shift();\n if (this.debug) {\n console.log(\"processing \" + localObject.name);\n }\n var fileName = localObject.data.substr(1, localObject.data.length - 2);\n switch (localObject.type) {\n case \"TextureFilename\":\n _nowMat.map = this.texloader.load(fileName);\n break;\n case \"BumpMapFilename\":\n _nowMat.bumpMap = this.texloader.load(fileName);\n _nowMat.bumpScale = 0.05;\n break;\n case \"NormalMapFilename\":\n _nowMat.normalMap = this.texloader.load(fileName);\n _nowMat.normalScale = new Vector2(2, 2);\n break;\n case \"EmissiveMapFilename\":\n _nowMat.emissiveMap = this.texloader.load(fileName);\n break;\n case \"LightMapFilename\":\n _nowMat.lightMap = this.texloader.load(fileName);\n break;\n }\n } else {\n break;\n }\n }\n this._currentGeo.Materials.push(_nowMat);\n }\n },\n {\n key: \"_setSkinWeights\",\n value: function _setSkinWeights() {\n var boneInf = new XboneInf();\n var endRead = 0;\n var find = this._currentObject.data.indexOf(\";\", endRead);\n var line = this._currentObject.data.substr(endRead, find - endRead);\n endRead = find + 1;\n boneInf.boneName = line.substr(1, line.length - 2);\n boneInf.BoneIndex = this._currentGeo.BoneInfs.length;\n find = this._currentObject.data.indexOf(\";\", endRead);\n endRead = find + 1;\n find = this._currentObject.data.indexOf(\";\", endRead);\n line = this._currentObject.data.substr(endRead, find - endRead);\n var data = this._readLine(line.trim()).split(\",\");\n for (let i2 = 0; i2 < data.length; i2++) {\n boneInf.Indeces.push(parseInt(data[i2]));\n }\n endRead = find + 1;\n find = this._currentObject.data.indexOf(\";\", endRead);\n line = this._currentObject.data.substr(endRead, find - endRead);\n var data2 = this._readLine(line.trim()).split(\",\");\n for (let _i = 0; _i < data2.length; _i++) {\n boneInf.Weights.push(parseFloat(data2[_i]));\n }\n endRead = find + 1;\n find = this._currentObject.data.indexOf(\";\", endRead);\n if (find <= 0) {\n find = this._currentObject.data.length;\n }\n line = this._currentObject.data.substr(endRead, find - endRead);\n var data3 = this._readLine(line.trim()).split(\",\");\n boneInf.OffsetMatrix = new Matrix4();\n this._ParseMatrixData(boneInf.OffsetMatrix, data3);\n this._currentGeo.BoneInfs.push(boneInf);\n }\n },\n {\n key: \"_makePutBoneList\",\n value: function _makePutBoneList(_RootName, _bones) {\n var putting = false;\n for (let frame in this.HieStack) {\n if (this.HieStack[frame].name === _RootName || putting) {\n putting = true;\n var b = new Bone();\n b.name = this.HieStack[frame].name;\n b.applyMatrix4(this.HieStack[frame].FrameTransformMatrix);\n b.matrixWorld = b.matrix;\n b.FrameTransformMatrix = this.HieStack[frame].FrameTransformMatrix;\n b.pos = new Vector3().setFromMatrixPosition(b.FrameTransformMatrix).toArray();\n b.rotq = new Quaternion().setFromRotationMatrix(b.FrameTransformMatrix).toArray();\n b.scl = new Vector3().setFromMatrixScale(b.FrameTransformMatrix).toArray();\n if (this.HieStack[frame].parentName && this.HieStack[frame].parentName.length > 0) {\n for (let i2 = 0; i2 < _bones.length; i2++) {\n if (this.HieStack[frame].parentName === _bones[i2].name) {\n _bones[i2].add(b);\n b.parent = i2;\n break;\n }\n }\n }\n _bones.push(b);\n }\n }\n }\n },\n {\n key: \"_makeOutputGeometry\",\n value: function _makeOutputGeometry() {\n var mesh = null;\n if (this._currentGeo.BoneInfs.length > 0) {\n var putBones = [];\n this._makePutBoneList(this._currentGeo.baseFrame.parentName, putBones);\n for (let bi = 0; bi < this._currentGeo.BoneInfs.length; bi++) {\n var boneIndex = 0;\n for (let bb = 0; bb < putBones.length; bb++) {\n if (putBones[bb].name === this._currentGeo.BoneInfs[bi].boneName) {\n boneIndex = bb;\n putBones[bb].OffsetMatrix = new Matrix4();\n putBones[bb].OffsetMatrix.copy(this._currentGeo.BoneInfs[bi].OffsetMatrix);\n break;\n }\n }\n for (let vi = 0; vi < this._currentGeo.BoneInfs[bi].Indeces.length; vi++) {\n var nowVertexID = this._currentGeo.BoneInfs[bi].Indeces[vi];\n var nowVal = this._currentGeo.BoneInfs[bi].Weights[vi];\n var stride = nowVertexID * 4;\n switch (this._currentGeo.VertexSetedBoneCount[nowVertexID]) {\n case 0:\n this._currentGeo.GeometryData.skinIndices[stride] = boneIndex;\n this._currentGeo.GeometryData.skinWeights[stride] = nowVal;\n break;\n case 1:\n this._currentGeo.GeometryData.skinIndices[stride + 1] = boneIndex;\n this._currentGeo.GeometryData.skinWeights[stride + 1] = nowVal;\n break;\n case 2:\n this._currentGeo.GeometryData.skinIndices[stride + 2] = boneIndex;\n this._currentGeo.GeometryData.skinWeights[stride + 2] = nowVal;\n break;\n case 3:\n this._currentGeo.GeometryData.skinIndices[stride + 3] = boneIndex;\n this._currentGeo.GeometryData.skinWeights[stride + 3] = nowVal;\n break;\n }\n this._currentGeo.VertexSetedBoneCount[nowVertexID]++;\n if (this._currentGeo.VertexSetedBoneCount[nowVertexID] > 4) {\n console.log(\"warn! over 4 bone weight! :\" + nowVertexID);\n }\n }\n }\n for (let sk = 0; sk < this._currentGeo.Materials.length; sk++) {\n this._currentGeo.Materials[sk].skinning = true;\n }\n var offsetList = [];\n for (let _bi = 0; _bi < putBones.length; _bi++) {\n if (putBones[_bi].OffsetMatrix) {\n offsetList.push(putBones[_bi].OffsetMatrix);\n } else {\n offsetList.push(new Matrix4());\n }\n }\n var bufferGeometry = this._buildGeometry();\n mesh = new SkinnedMesh(\n bufferGeometry,\n this._currentGeo.Materials.length === 1 ? this._currentGeo.Materials[0] : this._currentGeo.Materials\n );\n this._initSkeleton(mesh, putBones, offsetList);\n } else {\n var _bufferGeometry = this._buildGeometry();\n mesh = new Mesh(\n _bufferGeometry,\n this._currentGeo.Materials.length === 1 ? this._currentGeo.Materials[0] : this._currentGeo.Materials\n );\n }\n mesh.name = this._currentGeo.name;\n var worldBaseMx = new Matrix4();\n var currentMxFrame = this._currentGeo.baseFrame.putBone;\n if (currentMxFrame && currentMxFrame.parent) {\n while (true) {\n currentMxFrame = currentMxFrame.parent;\n if (currentMxFrame) {\n worldBaseMx.multiply(currentMxFrame.FrameTransformMatrix);\n } else {\n break;\n }\n }\n mesh.applyMatrix4(worldBaseMx);\n }\n this.Meshes.push(mesh);\n }\n },\n {\n key: \"_initSkeleton\",\n value: function _initSkeleton(mesh, boneList, boneInverses) {\n var bones = [], bone, gbone;\n var i2, il;\n for (i2 = 0, il = boneList.length; i2 < il; i2++) {\n gbone = boneList[i2];\n bone = new Bone();\n bones.push(bone);\n bone.name = gbone.name;\n bone.position.fromArray(gbone.pos);\n bone.quaternion.fromArray(gbone.rotq);\n if (gbone.scl !== void 0)\n bone.scale.fromArray(gbone.scl);\n }\n for (i2 = 0, il = boneList.length; i2 < il; i2++) {\n gbone = boneList[i2];\n if (gbone.parent !== -1 && gbone.parent !== null && bones[gbone.parent] !== void 0) {\n bones[gbone.parent].add(bones[i2]);\n } else {\n mesh.add(bones[i2]);\n }\n }\n mesh.updateMatrixWorld(true);\n var skeleton = new Skeleton(bones, boneInverses);\n mesh.bind(skeleton, mesh.matrixWorld);\n }\n },\n {\n key: \"_readAnimationKey\",\n value: function _readAnimationKey() {\n var endRead = 0;\n var find = this._currentObject.data.indexOf(\";\", endRead);\n var line = this._currentObject.data.substr(endRead, find - endRead);\n endRead = find + 1;\n var nowKeyType = parseInt(this._readLine(line));\n find = this._currentObject.data.indexOf(\";\", endRead);\n endRead = find + 1;\n line = this._currentObject.data.substr(endRead);\n var data = this._readLine(line.trim()).split(\";;,\");\n for (let i2 = 0; i2 < data.length; i2++) {\n var data2 = data[i2].split(\";\");\n var keyInfo = new XKeyFrameInfo();\n keyInfo.type = nowKeyType;\n keyInfo.Frame = parseInt(data2[0]);\n keyInfo.index = this._currentAnimeFrames.keyFrames.length;\n keyInfo.time = keyInfo.Frame;\n if (nowKeyType != 4) {\n var frameFound = false;\n for (let mm = 0; mm < this._currentAnimeFrames.keyFrames.length; mm++) {\n if (this._currentAnimeFrames.keyFrames[mm].Frame === keyInfo.Frame) {\n keyInfo = this._currentAnimeFrames.keyFrames[mm];\n frameFound = true;\n break;\n }\n }\n var frameValue = data2[2].split(\",\");\n switch (nowKeyType) {\n case 0:\n keyInfo.rot = new Quaternion(\n parseFloat(frameValue[1]),\n parseFloat(frameValue[2]),\n parseFloat(frameValue[3]),\n parseFloat(frameValue[0]) * -1\n );\n break;\n case 1:\n keyInfo.scl = new Vector3(\n parseFloat(frameValue[0]),\n parseFloat(frameValue[1]),\n parseFloat(frameValue[2])\n );\n break;\n case 2:\n keyInfo.pos = new Vector3(\n parseFloat(frameValue[0]),\n parseFloat(frameValue[1]),\n parseFloat(frameValue[2])\n );\n break;\n }\n if (!frameFound) {\n this._currentAnimeFrames.keyFrames.push(keyInfo);\n }\n } else {\n keyInfo.matrix = new Matrix4();\n this._ParseMatrixData(keyInfo.matrix, data2[2].split(\",\"));\n this._currentAnimeFrames.keyFrames.push(keyInfo);\n }\n }\n }\n },\n {\n key: \"_makeOutputAnimation\",\n value: function _makeOutputAnimation() {\n var animationObj = new XAnimationObj(this.options);\n animationObj.fps = this.animTicksPerSecond;\n animationObj.name = this._currentAnime.name;\n animationObj.make(this._currentAnime.AnimeFrames);\n this.animations.push(animationObj);\n }\n },\n {\n key: \"assignAnimation\",\n value: function assignAnimation(_model, _animation) {\n var model = _model;\n var animation = _animation;\n if (!model) {\n model = this.Meshes[0];\n }\n if (!animation) {\n animation = this.animations[0];\n }\n if (!model || !animation) {\n return null;\n }\n var put = {};\n put.fps = animation.fps;\n put.name = animation.name;\n put.length = animation.length;\n put.hierarchy = [];\n for (let b = 0; b < model.skeleton.bones.length; b++) {\n var findAnimation = false;\n for (let i2 = 0; i2 < animation.hierarchy.length; i2++) {\n if (model.skeleton.bones[b].name === animation.hierarchy[i2].name) {\n findAnimation = true;\n var c_key = animation.hierarchy[i2].copy();\n c_key.parent = -1;\n if (model.skeleton.bones[b].parent && model.skeleton.bones[b].parent.type === \"Bone\") {\n for (let bb = 0; bb < put.hierarchy.length; bb++) {\n if (put.hierarchy[bb].name === model.skeleton.bones[b].parent.name) {\n c_key.parent = bb;\n c_key.parentName = model.skeleton.bones[b].parent.name;\n }\n }\n }\n put.hierarchy.push(c_key);\n break;\n }\n }\n if (!findAnimation) {\n var _c_key = animation.hierarchy[0].copy();\n _c_key.name = model.skeleton.bones[b].name;\n _c_key.parent = -1;\n for (let k = 0; k < _c_key.keys.length; k++) {\n if (_c_key.keys[k].pos) {\n _c_key.keys[k].pos.set(0, 0, 0);\n }\n if (_c_key.keys[k].scl) {\n _c_key.keys[k].scl.set(1, 1, 1);\n }\n if (_c_key.keys[k].rot) {\n _c_key.keys[k].rot.set(0, 0, 0, 1);\n }\n }\n put.hierarchy.push(_c_key);\n }\n }\n if (!model.geometry.animations) {\n model.geometry.animations = [];\n }\n model.geometry.animations.push(AnimationClip.parseAnimation(put, model.skeleton.bones));\n if (!model.animationMixer) {\n model.animationMixer = new AnimationMixer(model);\n }\n return put;\n }\n },\n {\n key: \"_ParseMatrixData\",\n value: function _ParseMatrixData(targetMatrix, data) {\n targetMatrix.set(\n parseFloat(data[0]),\n parseFloat(data[4]),\n parseFloat(data[8]),\n parseFloat(data[12]),\n parseFloat(data[1]),\n parseFloat(data[5]),\n parseFloat(data[9]),\n parseFloat(data[13]),\n parseFloat(data[2]),\n parseFloat(data[6]),\n parseFloat(data[10]),\n parseFloat(data[14]),\n parseFloat(data[3]),\n parseFloat(data[7]),\n parseFloat(data[11]),\n parseFloat(data[15])\n );\n }\n }\n ]);\n return XLoader3;\n }();\n return XLoader2;\n}();\nexport {\n XLoader\n};\n//# sourceMappingURL=XLoader.js.map\n","import { Loader, FileLoader, Skeleton, Vector3, Quaternion, Bone, VectorKeyframeTrack, QuaternionKeyframeTrack, AnimationClip } from \"three\";\nclass BVHLoader extends Loader {\n constructor(manager) {\n super(manager);\n this.animateBonePositions = true;\n this.animateBoneRotations = true;\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const loader = new FileLoader(scope.manager);\n loader.setPath(scope.path);\n loader.setRequestHeader(scope.requestHeader);\n loader.setWithCredentials(scope.withCredentials);\n loader.load(\n url,\n function(text) {\n try {\n onLoad(scope.parse(text));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(text) {\n function readBvh(lines2) {\n if (nextLine(lines2) !== \"HIERARCHY\") {\n console.error(\"THREE.BVHLoader: HIERARCHY expected.\");\n }\n const list = [];\n const root = readNode(lines2, nextLine(lines2), list);\n if (nextLine(lines2) !== \"MOTION\") {\n console.error(\"THREE.BVHLoader: MOTION expected.\");\n }\n let tokens = nextLine(lines2).split(/[\\s]+/);\n const numFrames = parseInt(tokens[1]);\n if (isNaN(numFrames)) {\n console.error(\"THREE.BVHLoader: Failed to read number of frames.\");\n }\n tokens = nextLine(lines2).split(/[\\s]+/);\n const frameTime = parseFloat(tokens[2]);\n if (isNaN(frameTime)) {\n console.error(\"THREE.BVHLoader: Failed to read frame time.\");\n }\n for (let i = 0; i < numFrames; i++) {\n tokens = nextLine(lines2).split(/[\\s]+/);\n readFrameData(tokens, i * frameTime, root);\n }\n return list;\n }\n function readFrameData(data, frameTime, bone) {\n if (bone.type === \"ENDSITE\")\n return;\n const keyframe = {\n time: frameTime,\n position: new Vector3(),\n rotation: new Quaternion()\n };\n bone.frames.push(keyframe);\n const quat = new Quaternion();\n const vx = new Vector3(1, 0, 0);\n const vy = new Vector3(0, 1, 0);\n const vz = new Vector3(0, 0, 1);\n for (let i = 0; i < bone.channels.length; i++) {\n switch (bone.channels[i]) {\n case \"Xposition\":\n keyframe.position.x = parseFloat(data.shift().trim());\n break;\n case \"Yposition\":\n keyframe.position.y = parseFloat(data.shift().trim());\n break;\n case \"Zposition\":\n keyframe.position.z = parseFloat(data.shift().trim());\n break;\n case \"Xrotation\":\n quat.setFromAxisAngle(vx, parseFloat(data.shift().trim()) * Math.PI / 180);\n keyframe.rotation.multiply(quat);\n break;\n case \"Yrotation\":\n quat.setFromAxisAngle(vy, parseFloat(data.shift().trim()) * Math.PI / 180);\n keyframe.rotation.multiply(quat);\n break;\n case \"Zrotation\":\n quat.setFromAxisAngle(vz, parseFloat(data.shift().trim()) * Math.PI / 180);\n keyframe.rotation.multiply(quat);\n break;\n default:\n console.warn(\"THREE.BVHLoader: Invalid channel type.\");\n }\n }\n for (let i = 0; i < bone.children.length; i++) {\n readFrameData(data, frameTime, bone.children[i]);\n }\n }\n function readNode(lines2, firstline, list) {\n const node = { name: \"\", type: \"\", frames: [] };\n list.push(node);\n let tokens = firstline.split(/[\\s]+/);\n if (tokens[0].toUpperCase() === \"END\" && tokens[1].toUpperCase() === \"SITE\") {\n node.type = \"ENDSITE\";\n node.name = \"ENDSITE\";\n } else {\n node.name = tokens[1];\n node.type = tokens[0].toUpperCase();\n }\n if (nextLine(lines2) !== \"{\") {\n console.error(\"THREE.BVHLoader: Expected opening { after type & name\");\n }\n tokens = nextLine(lines2).split(/[\\s]+/);\n if (tokens[0] !== \"OFFSET\") {\n console.error(\"THREE.BVHLoader: Expected OFFSET but got: \" + tokens[0]);\n }\n if (tokens.length !== 4) {\n console.error(\"THREE.BVHLoader: Invalid number of values for OFFSET.\");\n }\n const offset = new Vector3(parseFloat(tokens[1]), parseFloat(tokens[2]), parseFloat(tokens[3]));\n if (isNaN(offset.x) || isNaN(offset.y) || isNaN(offset.z)) {\n console.error(\"THREE.BVHLoader: Invalid values of OFFSET.\");\n }\n node.offset = offset;\n if (node.type !== \"ENDSITE\") {\n tokens = nextLine(lines2).split(/[\\s]+/);\n if (tokens[0] !== \"CHANNELS\") {\n console.error(\"THREE.BVHLoader: Expected CHANNELS definition.\");\n }\n const numChannels = parseInt(tokens[1]);\n node.channels = tokens.splice(2, numChannels);\n node.children = [];\n }\n while (true) {\n const line = nextLine(lines2);\n if (line === \"}\") {\n return node;\n } else {\n node.children.push(readNode(lines2, line, list));\n }\n }\n }\n function toTHREEBone(source, list) {\n const bone = new Bone();\n list.push(bone);\n bone.position.add(source.offset);\n bone.name = source.name;\n if (source.type !== \"ENDSITE\") {\n for (let i = 0; i < source.children.length; i++) {\n bone.add(toTHREEBone(source.children[i], list));\n }\n }\n return bone;\n }\n function toTHREEAnimation(bones2) {\n const tracks = [];\n for (let i = 0; i < bones2.length; i++) {\n const bone = bones2[i];\n if (bone.type === \"ENDSITE\")\n continue;\n const times = [];\n const positions = [];\n const rotations = [];\n for (let j = 0; j < bone.frames.length; j++) {\n const frame = bone.frames[j];\n times.push(frame.time);\n positions.push(frame.position.x + bone.offset.x);\n positions.push(frame.position.y + bone.offset.y);\n positions.push(frame.position.z + bone.offset.z);\n rotations.push(frame.rotation.x);\n rotations.push(frame.rotation.y);\n rotations.push(frame.rotation.z);\n rotations.push(frame.rotation.w);\n }\n if (scope.animateBonePositions) {\n tracks.push(new VectorKeyframeTrack(\".bones[\" + bone.name + \"].position\", times, positions));\n }\n if (scope.animateBoneRotations) {\n tracks.push(new QuaternionKeyframeTrack(\".bones[\" + bone.name + \"].quaternion\", times, rotations));\n }\n }\n return new AnimationClip(\"animation\", -1, tracks);\n }\n function nextLine(lines2) {\n let line;\n while ((line = lines2.shift().trim()).length === 0) {\n }\n return line;\n }\n const scope = this;\n const lines = text.split(/[\\r\\n]+/g);\n const bones = readBvh(lines);\n const threeBones = [];\n toTHREEBone(bones[0], threeBones);\n const threeClip = toTHREEAnimation(bones);\n return {\n skeleton: new Skeleton(threeBones),\n clip: threeClip\n };\n }\n}\nexport {\n BVHLoader\n};\n//# sourceMappingURL=BVHLoader.js.map\n","import { Loader, LoaderUtils, FileLoader, Vector3, Quaternion, Matrix4, MeshBasicMaterial, Scene, TextureLoader, Euler, MathUtils, AnimationClip, VectorKeyframeTrack, QuaternionKeyframeTrack, MeshLambertMaterial, MeshPhongMaterial, Vector2, DoubleSide, FrontSide, PerspectiveCamera, OrthographicCamera, Color, AmbientLight, SpotLight, PointLight, DirectionalLight, BufferGeometry, Float32BufferAttribute, Group, Bone, LineBasicMaterial, SkinnedMesh, Mesh, Line, LineSegments, RepeatWrapping, ClampToEdgeWrapping, Skeleton } from \"three\";\nimport { TGALoader } from \"./TGALoader.js\";\nimport { UV1 } from \"../_polyfill/uv1.js\";\nclass ColladaLoader extends Loader {\n constructor(manager) {\n super(manager);\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const path = scope.path === \"\" ? LoaderUtils.extractUrlBase(url) : scope.path;\n const loader = new FileLoader(scope.manager);\n loader.setPath(scope.path);\n loader.setRequestHeader(scope.requestHeader);\n loader.setWithCredentials(scope.withCredentials);\n loader.load(\n url,\n function(text) {\n try {\n onLoad(scope.parse(text, path));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(text, path) {\n function getElementsByTagName(xml2, name) {\n const array = [];\n const childNodes = xml2.childNodes;\n for (let i = 0, l = childNodes.length; i < l; i++) {\n const child = childNodes[i];\n if (child.nodeName === name) {\n array.push(child);\n }\n }\n return array;\n }\n function parseStrings(text2) {\n if (text2.length === 0)\n return [];\n const parts = text2.trim().split(/\\s+/);\n const array = new Array(parts.length);\n for (let i = 0, l = parts.length; i < l; i++) {\n array[i] = parts[i];\n }\n return array;\n }\n function parseFloats(text2) {\n if (text2.length === 0)\n return [];\n const parts = text2.trim().split(/\\s+/);\n const array = new Array(parts.length);\n for (let i = 0, l = parts.length; i < l; i++) {\n array[i] = parseFloat(parts[i]);\n }\n return array;\n }\n function parseInts(text2) {\n if (text2.length === 0)\n return [];\n const parts = text2.trim().split(/\\s+/);\n const array = new Array(parts.length);\n for (let i = 0, l = parts.length; i < l; i++) {\n array[i] = parseInt(parts[i]);\n }\n return array;\n }\n function parseId(text2) {\n return text2.substring(1);\n }\n function generateId() {\n return \"three_default_\" + count++;\n }\n function isEmpty(object) {\n return Object.keys(object).length === 0;\n }\n function parseAsset(xml2) {\n return {\n unit: parseAssetUnit(getElementsByTagName(xml2, \"unit\")[0]),\n upAxis: parseAssetUpAxis(getElementsByTagName(xml2, \"up_axis\")[0])\n };\n }\n function parseAssetUnit(xml2) {\n if (xml2 !== void 0 && xml2.hasAttribute(\"meter\") === true) {\n return parseFloat(xml2.getAttribute(\"meter\"));\n } else {\n return 1;\n }\n }\n function parseAssetUpAxis(xml2) {\n return xml2 !== void 0 ? xml2.textContent : \"Y_UP\";\n }\n function parseLibrary(xml2, libraryName, nodeName, parser) {\n const library2 = getElementsByTagName(xml2, libraryName)[0];\n if (library2 !== void 0) {\n const elements = getElementsByTagName(library2, nodeName);\n for (let i = 0; i < elements.length; i++) {\n parser(elements[i]);\n }\n }\n }\n function buildLibrary(data, builder) {\n for (const name in data) {\n const object = data[name];\n object.build = builder(data[name]);\n }\n }\n function getBuild(data, builder) {\n if (data.build !== void 0)\n return data.build;\n data.build = builder(data);\n return data.build;\n }\n function parseAnimation(xml2) {\n const data = {\n sources: {},\n samplers: {},\n channels: {}\n };\n let hasChildren = false;\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n let id;\n switch (child.nodeName) {\n case \"source\":\n id = child.getAttribute(\"id\");\n data.sources[id] = parseSource(child);\n break;\n case \"sampler\":\n id = child.getAttribute(\"id\");\n data.samplers[id] = parseAnimationSampler(child);\n break;\n case \"channel\":\n id = child.getAttribute(\"target\");\n data.channels[id] = parseAnimationChannel(child);\n break;\n case \"animation\":\n parseAnimation(child);\n hasChildren = true;\n break;\n default:\n console.log(child);\n }\n }\n if (hasChildren === false) {\n library.animations[xml2.getAttribute(\"id\") || MathUtils.generateUUID()] = data;\n }\n }\n function parseAnimationSampler(xml2) {\n const data = {\n inputs: {}\n };\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"input\":\n const id = parseId(child.getAttribute(\"source\"));\n const semantic = child.getAttribute(\"semantic\");\n data.inputs[semantic] = id;\n break;\n }\n }\n return data;\n }\n function parseAnimationChannel(xml2) {\n const data = {};\n const target = xml2.getAttribute(\"target\");\n let parts = target.split(\"/\");\n const id = parts.shift();\n let sid = parts.shift();\n const arraySyntax = sid.indexOf(\"(\") !== -1;\n const memberSyntax = sid.indexOf(\".\") !== -1;\n if (memberSyntax) {\n parts = sid.split(\".\");\n sid = parts.shift();\n data.member = parts.shift();\n } else if (arraySyntax) {\n const indices = sid.split(\"(\");\n sid = indices.shift();\n for (let i = 0; i < indices.length; i++) {\n indices[i] = parseInt(indices[i].replace(/\\)/, \"\"));\n }\n data.indices = indices;\n }\n data.id = id;\n data.sid = sid;\n data.arraySyntax = arraySyntax;\n data.memberSyntax = memberSyntax;\n data.sampler = parseId(xml2.getAttribute(\"source\"));\n return data;\n }\n function buildAnimation(data) {\n const tracks = [];\n const channels = data.channels;\n const samplers = data.samplers;\n const sources = data.sources;\n for (const target in channels) {\n if (channels.hasOwnProperty(target)) {\n const channel = channels[target];\n const sampler = samplers[channel.sampler];\n const inputId = sampler.inputs.INPUT;\n const outputId = sampler.inputs.OUTPUT;\n const inputSource = sources[inputId];\n const outputSource = sources[outputId];\n const animation = buildAnimationChannel(channel, inputSource, outputSource);\n createKeyframeTracks(animation, tracks);\n }\n }\n return tracks;\n }\n function getAnimation(id) {\n return getBuild(library.animations[id], buildAnimation);\n }\n function buildAnimationChannel(channel, inputSource, outputSource) {\n const node = library.nodes[channel.id];\n const object3D = getNode(node.id);\n const transform = node.transforms[channel.sid];\n const defaultMatrix = node.matrix.clone().transpose();\n let time, stride;\n let i, il, j, jl;\n const data = {};\n switch (transform) {\n case \"matrix\":\n for (i = 0, il = inputSource.array.length; i < il; i++) {\n time = inputSource.array[i];\n stride = i * outputSource.stride;\n if (data[time] === void 0)\n data[time] = {};\n if (channel.arraySyntax === true) {\n const value = outputSource.array[stride];\n const index = channel.indices[0] + 4 * channel.indices[1];\n data[time][index] = value;\n } else {\n for (j = 0, jl = outputSource.stride; j < jl; j++) {\n data[time][j] = outputSource.array[stride + j];\n }\n }\n }\n break;\n case \"translate\":\n console.warn('THREE.ColladaLoader: Animation transform type \"%s\" not yet implemented.', transform);\n break;\n case \"rotate\":\n console.warn('THREE.ColladaLoader: Animation transform type \"%s\" not yet implemented.', transform);\n break;\n case \"scale\":\n console.warn('THREE.ColladaLoader: Animation transform type \"%s\" not yet implemented.', transform);\n break;\n }\n const keyframes = prepareAnimationData(data, defaultMatrix);\n const animation = {\n name: object3D.uuid,\n keyframes\n };\n return animation;\n }\n function prepareAnimationData(data, defaultMatrix) {\n const keyframes = [];\n for (const time in data) {\n keyframes.push({ time: parseFloat(time), value: data[time] });\n }\n keyframes.sort(ascending);\n for (let i = 0; i < 16; i++) {\n transformAnimationData(keyframes, i, defaultMatrix.elements[i]);\n }\n return keyframes;\n function ascending(a, b) {\n return a.time - b.time;\n }\n }\n const position = new Vector3();\n const scale = new Vector3();\n const quaternion = new Quaternion();\n function createKeyframeTracks(animation, tracks) {\n const keyframes = animation.keyframes;\n const name = animation.name;\n const times = [];\n const positionData = [];\n const quaternionData = [];\n const scaleData = [];\n for (let i = 0, l = keyframes.length; i < l; i++) {\n const keyframe = keyframes[i];\n const time = keyframe.time;\n const value = keyframe.value;\n matrix.fromArray(value).transpose();\n matrix.decompose(position, quaternion, scale);\n times.push(time);\n positionData.push(position.x, position.y, position.z);\n quaternionData.push(quaternion.x, quaternion.y, quaternion.z, quaternion.w);\n scaleData.push(scale.x, scale.y, scale.z);\n }\n if (positionData.length > 0)\n tracks.push(new VectorKeyframeTrack(name + \".position\", times, positionData));\n if (quaternionData.length > 0) {\n tracks.push(new QuaternionKeyframeTrack(name + \".quaternion\", times, quaternionData));\n }\n if (scaleData.length > 0)\n tracks.push(new VectorKeyframeTrack(name + \".scale\", times, scaleData));\n return tracks;\n }\n function transformAnimationData(keyframes, property, defaultValue) {\n let keyframe;\n let empty = true;\n let i, l;\n for (i = 0, l = keyframes.length; i < l; i++) {\n keyframe = keyframes[i];\n if (keyframe.value[property] === void 0) {\n keyframe.value[property] = null;\n } else {\n empty = false;\n }\n }\n if (empty === true) {\n for (i = 0, l = keyframes.length; i < l; i++) {\n keyframe = keyframes[i];\n keyframe.value[property] = defaultValue;\n }\n } else {\n createMissingKeyframes(keyframes, property);\n }\n }\n function createMissingKeyframes(keyframes, property) {\n let prev, next;\n for (let i = 0, l = keyframes.length; i < l; i++) {\n const keyframe = keyframes[i];\n if (keyframe.value[property] === null) {\n prev = getPrev(keyframes, i, property);\n next = getNext(keyframes, i, property);\n if (prev === null) {\n keyframe.value[property] = next.value[property];\n continue;\n }\n if (next === null) {\n keyframe.value[property] = prev.value[property];\n continue;\n }\n interpolate(keyframe, prev, next, property);\n }\n }\n }\n function getPrev(keyframes, i, property) {\n while (i >= 0) {\n const keyframe = keyframes[i];\n if (keyframe.value[property] !== null)\n return keyframe;\n i--;\n }\n return null;\n }\n function getNext(keyframes, i, property) {\n while (i < keyframes.length) {\n const keyframe = keyframes[i];\n if (keyframe.value[property] !== null)\n return keyframe;\n i++;\n }\n return null;\n }\n function interpolate(key, prev, next, property) {\n if (next.time - prev.time === 0) {\n key.value[property] = prev.value[property];\n return;\n }\n key.value[property] = (key.time - prev.time) * (next.value[property] - prev.value[property]) / (next.time - prev.time) + prev.value[property];\n }\n function parseAnimationClip(xml2) {\n const data = {\n name: xml2.getAttribute(\"id\") || \"default\",\n start: parseFloat(xml2.getAttribute(\"start\") || 0),\n end: parseFloat(xml2.getAttribute(\"end\") || 0),\n animations: []\n };\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"instance_animation\":\n data.animations.push(parseId(child.getAttribute(\"url\")));\n break;\n }\n }\n library.clips[xml2.getAttribute(\"id\")] = data;\n }\n function buildAnimationClip(data) {\n const tracks = [];\n const name = data.name;\n const duration = data.end - data.start || -1;\n const animations2 = data.animations;\n for (let i = 0, il = animations2.length; i < il; i++) {\n const animationTracks = getAnimation(animations2[i]);\n for (let j = 0, jl = animationTracks.length; j < jl; j++) {\n tracks.push(animationTracks[j]);\n }\n }\n return new AnimationClip(name, duration, tracks);\n }\n function getAnimationClip(id) {\n return getBuild(library.clips[id], buildAnimationClip);\n }\n function parseController(xml2) {\n const data = {};\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"skin\":\n data.id = parseId(child.getAttribute(\"source\"));\n data.skin = parseSkin(child);\n break;\n case \"morph\":\n data.id = parseId(child.getAttribute(\"source\"));\n console.warn(\"THREE.ColladaLoader: Morph target animation not supported yet.\");\n break;\n }\n }\n library.controllers[xml2.getAttribute(\"id\")] = data;\n }\n function parseSkin(xml2) {\n const data = {\n sources: {}\n };\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"bind_shape_matrix\":\n data.bindShapeMatrix = parseFloats(child.textContent);\n break;\n case \"source\":\n const id = child.getAttribute(\"id\");\n data.sources[id] = parseSource(child);\n break;\n case \"joints\":\n data.joints = parseJoints(child);\n break;\n case \"vertex_weights\":\n data.vertexWeights = parseVertexWeights(child);\n break;\n }\n }\n return data;\n }\n function parseJoints(xml2) {\n const data = {\n inputs: {}\n };\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"input\":\n const semantic = child.getAttribute(\"semantic\");\n const id = parseId(child.getAttribute(\"source\"));\n data.inputs[semantic] = id;\n break;\n }\n }\n return data;\n }\n function parseVertexWeights(xml2) {\n const data = {\n inputs: {}\n };\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"input\":\n const semantic = child.getAttribute(\"semantic\");\n const id = parseId(child.getAttribute(\"source\"));\n const offset = parseInt(child.getAttribute(\"offset\"));\n data.inputs[semantic] = { id, offset };\n break;\n case \"vcount\":\n data.vcount = parseInts(child.textContent);\n break;\n case \"v\":\n data.v = parseInts(child.textContent);\n break;\n }\n }\n return data;\n }\n function buildController(data) {\n const build = {\n id: data.id\n };\n const geometry = library.geometries[build.id];\n if (data.skin !== void 0) {\n build.skin = buildSkin(data.skin);\n geometry.sources.skinIndices = build.skin.indices;\n geometry.sources.skinWeights = build.skin.weights;\n }\n return build;\n }\n function buildSkin(data) {\n const BONE_LIMIT = 4;\n const build = {\n joints: [],\n // this must be an array to preserve the joint order\n indices: {\n array: [],\n stride: BONE_LIMIT\n },\n weights: {\n array: [],\n stride: BONE_LIMIT\n }\n };\n const sources = data.sources;\n const vertexWeights = data.vertexWeights;\n const vcount = vertexWeights.vcount;\n const v = vertexWeights.v;\n const jointOffset = vertexWeights.inputs.JOINT.offset;\n const weightOffset = vertexWeights.inputs.WEIGHT.offset;\n const jointSource = data.sources[data.joints.inputs.JOINT];\n const inverseSource = data.sources[data.joints.inputs.INV_BIND_MATRIX];\n const weights = sources[vertexWeights.inputs.WEIGHT.id].array;\n let stride = 0;\n let i, j, l;\n for (i = 0, l = vcount.length; i < l; i++) {\n const jointCount = vcount[i];\n const vertexSkinData = [];\n for (j = 0; j < jointCount; j++) {\n const skinIndex = v[stride + jointOffset];\n const weightId = v[stride + weightOffset];\n const skinWeight = weights[weightId];\n vertexSkinData.push({ index: skinIndex, weight: skinWeight });\n stride += 2;\n }\n vertexSkinData.sort(descending);\n for (j = 0; j < BONE_LIMIT; j++) {\n const d = vertexSkinData[j];\n if (d !== void 0) {\n build.indices.array.push(d.index);\n build.weights.array.push(d.weight);\n } else {\n build.indices.array.push(0);\n build.weights.array.push(0);\n }\n }\n }\n if (data.bindShapeMatrix) {\n build.bindMatrix = new Matrix4().fromArray(data.bindShapeMatrix).transpose();\n } else {\n build.bindMatrix = new Matrix4().identity();\n }\n for (i = 0, l = jointSource.array.length; i < l; i++) {\n const name = jointSource.array[i];\n const boneInverse = new Matrix4().fromArray(inverseSource.array, i * inverseSource.stride).transpose();\n build.joints.push({ name, boneInverse });\n }\n return build;\n function descending(a, b) {\n return b.weight - a.weight;\n }\n }\n function getController(id) {\n return getBuild(library.controllers[id], buildController);\n }\n function parseImage(xml2) {\n const data = {\n init_from: getElementsByTagName(xml2, \"init_from\")[0].textContent\n };\n library.images[xml2.getAttribute(\"id\")] = data;\n }\n function buildImage(data) {\n if (data.build !== void 0)\n return data.build;\n return data.init_from;\n }\n function getImage(id) {\n const data = library.images[id];\n if (data !== void 0) {\n return getBuild(data, buildImage);\n }\n console.warn(\"THREE.ColladaLoader: Couldn't find image with ID:\", id);\n return null;\n }\n function parseEffect(xml2) {\n const data = {};\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"profile_COMMON\":\n data.profile = parseEffectProfileCOMMON(child);\n break;\n }\n }\n library.effects[xml2.getAttribute(\"id\")] = data;\n }\n function parseEffectProfileCOMMON(xml2) {\n const data = {\n surfaces: {},\n samplers: {}\n };\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"newparam\":\n parseEffectNewparam(child, data);\n break;\n case \"technique\":\n data.technique = parseEffectTechnique(child);\n break;\n case \"extra\":\n data.extra = parseEffectExtra(child);\n break;\n }\n }\n return data;\n }\n function parseEffectNewparam(xml2, data) {\n const sid = xml2.getAttribute(\"sid\");\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"surface\":\n data.surfaces[sid] = parseEffectSurface(child);\n break;\n case \"sampler2D\":\n data.samplers[sid] = parseEffectSampler(child);\n break;\n }\n }\n }\n function parseEffectSurface(xml2) {\n const data = {};\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"init_from\":\n data.init_from = child.textContent;\n break;\n }\n }\n return data;\n }\n function parseEffectSampler(xml2) {\n const data = {};\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"source\":\n data.source = child.textContent;\n break;\n }\n }\n return data;\n }\n function parseEffectTechnique(xml2) {\n const data = {};\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"constant\":\n case \"lambert\":\n case \"blinn\":\n case \"phong\":\n data.type = child.nodeName;\n data.parameters = parseEffectParameters(child);\n break;\n case \"extra\":\n data.extra = parseEffectExtra(child);\n break;\n }\n }\n return data;\n }\n function parseEffectParameters(xml2) {\n const data = {};\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"emission\":\n case \"diffuse\":\n case \"specular\":\n case \"bump\":\n case \"ambient\":\n case \"shininess\":\n case \"transparency\":\n data[child.nodeName] = parseEffectParameter(child);\n break;\n case \"transparent\":\n data[child.nodeName] = {\n opaque: child.hasAttribute(\"opaque\") ? child.getAttribute(\"opaque\") : \"A_ONE\",\n data: parseEffectParameter(child)\n };\n break;\n }\n }\n return data;\n }\n function parseEffectParameter(xml2) {\n const data = {};\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"color\":\n data[child.nodeName] = parseFloats(child.textContent);\n break;\n case \"float\":\n data[child.nodeName] = parseFloat(child.textContent);\n break;\n case \"texture\":\n data[child.nodeName] = { id: child.getAttribute(\"texture\"), extra: parseEffectParameterTexture(child) };\n break;\n }\n }\n return data;\n }\n function parseEffectParameterTexture(xml2) {\n const data = {\n technique: {}\n };\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"extra\":\n parseEffectParameterTextureExtra(child, data);\n break;\n }\n }\n return data;\n }\n function parseEffectParameterTextureExtra(xml2, data) {\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"technique\":\n parseEffectParameterTextureExtraTechnique(child, data);\n break;\n }\n }\n }\n function parseEffectParameterTextureExtraTechnique(xml2, data) {\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"repeatU\":\n case \"repeatV\":\n case \"offsetU\":\n case \"offsetV\":\n data.technique[child.nodeName] = parseFloat(child.textContent);\n break;\n case \"wrapU\":\n case \"wrapV\":\n if (child.textContent.toUpperCase() === \"TRUE\") {\n data.technique[child.nodeName] = 1;\n } else if (child.textContent.toUpperCase() === \"FALSE\") {\n data.technique[child.nodeName] = 0;\n } else {\n data.technique[child.nodeName] = parseInt(child.textContent);\n }\n break;\n case \"bump\":\n data[child.nodeName] = parseEffectExtraTechniqueBump(child);\n break;\n }\n }\n }\n function parseEffectExtra(xml2) {\n const data = {};\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"technique\":\n data.technique = parseEffectExtraTechnique(child);\n break;\n }\n }\n return data;\n }\n function parseEffectExtraTechnique(xml2) {\n const data = {};\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"double_sided\":\n data[child.nodeName] = parseInt(child.textContent);\n break;\n case \"bump\":\n data[child.nodeName] = parseEffectExtraTechniqueBump(child);\n break;\n }\n }\n return data;\n }\n function parseEffectExtraTechniqueBump(xml2) {\n var data = {};\n for (var i = 0, l = xml2.childNodes.length; i < l; i++) {\n var child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"texture\":\n data[child.nodeName] = {\n id: child.getAttribute(\"texture\"),\n texcoord: child.getAttribute(\"texcoord\"),\n extra: parseEffectParameterTexture(child)\n };\n break;\n }\n }\n return data;\n }\n function buildEffect(data) {\n return data;\n }\n function getEffect(id) {\n return getBuild(library.effects[id], buildEffect);\n }\n function parseMaterial(xml2) {\n const data = {\n name: xml2.getAttribute(\"name\")\n };\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"instance_effect\":\n data.url = parseId(child.getAttribute(\"url\"));\n break;\n }\n }\n library.materials[xml2.getAttribute(\"id\")] = data;\n }\n function getTextureLoader(image) {\n let loader;\n let extension = image.slice((image.lastIndexOf(\".\") - 1 >>> 0) + 2);\n extension = extension.toLowerCase();\n switch (extension) {\n case \"tga\":\n loader = tgaLoader;\n break;\n default:\n loader = textureLoader;\n }\n return loader;\n }\n function buildMaterial(data) {\n const effect = getEffect(data.url);\n const technique = effect.profile.technique;\n let material;\n switch (technique.type) {\n case \"phong\":\n case \"blinn\":\n material = new MeshPhongMaterial();\n break;\n case \"lambert\":\n material = new MeshLambertMaterial();\n break;\n default:\n material = new MeshBasicMaterial();\n break;\n }\n material.name = data.name || \"\";\n function getTexture(textureObject) {\n const sampler = effect.profile.samplers[textureObject.id];\n let image = null;\n if (sampler !== void 0) {\n const surface = effect.profile.surfaces[sampler.source];\n image = getImage(surface.init_from);\n } else {\n console.warn(\"THREE.ColladaLoader: Undefined sampler. Access image directly (see #12530).\");\n image = getImage(textureObject.id);\n }\n if (image !== null) {\n const loader = getTextureLoader(image);\n if (loader !== void 0) {\n const texture = loader.load(image);\n const extra = textureObject.extra;\n if (extra !== void 0 && extra.technique !== void 0 && isEmpty(extra.technique) === false) {\n const technique2 = extra.technique;\n texture.wrapS = technique2.wrapU ? RepeatWrapping : ClampToEdgeWrapping;\n texture.wrapT = technique2.wrapV ? RepeatWrapping : ClampToEdgeWrapping;\n texture.offset.set(technique2.offsetU || 0, technique2.offsetV || 0);\n texture.repeat.set(technique2.repeatU || 1, technique2.repeatV || 1);\n } else {\n texture.wrapS = RepeatWrapping;\n texture.wrapT = RepeatWrapping;\n }\n return texture;\n } else {\n console.warn(\"THREE.ColladaLoader: Loader for texture %s not found.\", image);\n return null;\n }\n } else {\n console.warn(\"THREE.ColladaLoader: Couldn't create texture with ID:\", textureObject.id);\n return null;\n }\n }\n const parameters = technique.parameters;\n for (const key in parameters) {\n const parameter = parameters[key];\n switch (key) {\n case \"diffuse\":\n if (parameter.color)\n material.color.fromArray(parameter.color);\n if (parameter.texture)\n material.map = getTexture(parameter.texture);\n break;\n case \"specular\":\n if (parameter.color && material.specular)\n material.specular.fromArray(parameter.color);\n if (parameter.texture)\n material.specularMap = getTexture(parameter.texture);\n break;\n case \"bump\":\n if (parameter.texture)\n material.normalMap = getTexture(parameter.texture);\n break;\n case \"ambient\":\n if (parameter.texture)\n material.lightMap = getTexture(parameter.texture);\n break;\n case \"shininess\":\n if (parameter.float && material.shininess)\n material.shininess = parameter.float;\n break;\n case \"emission\":\n if (parameter.color && material.emissive)\n material.emissive.fromArray(parameter.color);\n if (parameter.texture)\n material.emissiveMap = getTexture(parameter.texture);\n break;\n }\n }\n let transparent = parameters[\"transparent\"];\n let transparency = parameters[\"transparency\"];\n if (transparency === void 0 && transparent) {\n transparency = {\n float: 1\n };\n }\n if (transparent === void 0 && transparency) {\n transparent = {\n opaque: \"A_ONE\",\n data: {\n color: [1, 1, 1, 1]\n }\n };\n }\n if (transparent && transparency) {\n if (transparent.data.texture) {\n material.transparent = true;\n } else {\n const color = transparent.data.color;\n switch (transparent.opaque) {\n case \"A_ONE\":\n material.opacity = color[3] * transparency.float;\n break;\n case \"RGB_ZERO\":\n material.opacity = 1 - color[0] * transparency.float;\n break;\n case \"A_ZERO\":\n material.opacity = 1 - color[3] * transparency.float;\n break;\n case \"RGB_ONE\":\n material.opacity = color[0] * transparency.float;\n break;\n default:\n console.warn('THREE.ColladaLoader: Invalid opaque type \"%s\" of transparent tag.', transparent.opaque);\n }\n if (material.opacity < 1)\n material.transparent = true;\n }\n }\n if (technique.extra !== void 0 && technique.extra.technique !== void 0) {\n const techniques = technique.extra.technique;\n for (const k in techniques) {\n const v = techniques[k];\n switch (k) {\n case \"double_sided\":\n material.side = v === 1 ? DoubleSide : FrontSide;\n break;\n case \"bump\":\n material.normalMap = getTexture(v.texture);\n material.normalScale = new Vector2(1, 1);\n break;\n }\n }\n }\n return material;\n }\n function getMaterial(id) {\n return getBuild(library.materials[id], buildMaterial);\n }\n function parseCamera(xml2) {\n const data = {\n name: xml2.getAttribute(\"name\")\n };\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"optics\":\n data.optics = parseCameraOptics(child);\n break;\n }\n }\n library.cameras[xml2.getAttribute(\"id\")] = data;\n }\n function parseCameraOptics(xml2) {\n for (let i = 0; i < xml2.childNodes.length; i++) {\n const child = xml2.childNodes[i];\n switch (child.nodeName) {\n case \"technique_common\":\n return parseCameraTechnique(child);\n }\n }\n return {};\n }\n function parseCameraTechnique(xml2) {\n const data = {};\n for (let i = 0; i < xml2.childNodes.length; i++) {\n const child = xml2.childNodes[i];\n switch (child.nodeName) {\n case \"perspective\":\n case \"orthographic\":\n data.technique = child.nodeName;\n data.parameters = parseCameraParameters(child);\n break;\n }\n }\n return data;\n }\n function parseCameraParameters(xml2) {\n const data = {};\n for (let i = 0; i < xml2.childNodes.length; i++) {\n const child = xml2.childNodes[i];\n switch (child.nodeName) {\n case \"xfov\":\n case \"yfov\":\n case \"xmag\":\n case \"ymag\":\n case \"znear\":\n case \"zfar\":\n case \"aspect_ratio\":\n data[child.nodeName] = parseFloat(child.textContent);\n break;\n }\n }\n return data;\n }\n function buildCamera(data) {\n let camera;\n switch (data.optics.technique) {\n case \"perspective\":\n camera = new PerspectiveCamera(\n data.optics.parameters.yfov,\n data.optics.parameters.aspect_ratio,\n data.optics.parameters.znear,\n data.optics.parameters.zfar\n );\n break;\n case \"orthographic\":\n let ymag = data.optics.parameters.ymag;\n let xmag = data.optics.parameters.xmag;\n const aspectRatio = data.optics.parameters.aspect_ratio;\n xmag = xmag === void 0 ? ymag * aspectRatio : xmag;\n ymag = ymag === void 0 ? xmag / aspectRatio : ymag;\n xmag *= 0.5;\n ymag *= 0.5;\n camera = new OrthographicCamera(\n -xmag,\n xmag,\n ymag,\n -ymag,\n // left, right, top, bottom\n data.optics.parameters.znear,\n data.optics.parameters.zfar\n );\n break;\n default:\n camera = new PerspectiveCamera();\n break;\n }\n camera.name = data.name || \"\";\n return camera;\n }\n function getCamera(id) {\n const data = library.cameras[id];\n if (data !== void 0) {\n return getBuild(data, buildCamera);\n }\n console.warn(\"THREE.ColladaLoader: Couldn't find camera with ID:\", id);\n return null;\n }\n function parseLight(xml2) {\n let data = {};\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"technique_common\":\n data = parseLightTechnique(child);\n break;\n }\n }\n library.lights[xml2.getAttribute(\"id\")] = data;\n }\n function parseLightTechnique(xml2) {\n const data = {};\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"directional\":\n case \"point\":\n case \"spot\":\n case \"ambient\":\n data.technique = child.nodeName;\n data.parameters = parseLightParameters(child);\n }\n }\n return data;\n }\n function parseLightParameters(xml2) {\n const data = {};\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"color\":\n const array = parseFloats(child.textContent);\n data.color = new Color().fromArray(array);\n break;\n case \"falloff_angle\":\n data.falloffAngle = parseFloat(child.textContent);\n break;\n case \"quadratic_attenuation\":\n const f = parseFloat(child.textContent);\n data.distance = f ? Math.sqrt(1 / f) : 0;\n break;\n }\n }\n return data;\n }\n function buildLight(data) {\n let light;\n switch (data.technique) {\n case \"directional\":\n light = new DirectionalLight();\n break;\n case \"point\":\n light = new PointLight();\n break;\n case \"spot\":\n light = new SpotLight();\n break;\n case \"ambient\":\n light = new AmbientLight();\n break;\n }\n if (data.parameters.color)\n light.color.copy(data.parameters.color);\n if (data.parameters.distance)\n light.distance = data.parameters.distance;\n return light;\n }\n function getLight(id) {\n const data = library.lights[id];\n if (data !== void 0) {\n return getBuild(data, buildLight);\n }\n console.warn(\"THREE.ColladaLoader: Couldn't find light with ID:\", id);\n return null;\n }\n function parseGeometry(xml2) {\n const data = {\n name: xml2.getAttribute(\"name\"),\n sources: {},\n vertices: {},\n primitives: []\n };\n const mesh = getElementsByTagName(xml2, \"mesh\")[0];\n if (mesh === void 0)\n return;\n for (let i = 0; i < mesh.childNodes.length; i++) {\n const child = mesh.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n const id = child.getAttribute(\"id\");\n switch (child.nodeName) {\n case \"source\":\n data.sources[id] = parseSource(child);\n break;\n case \"vertices\":\n data.vertices = parseGeometryVertices(child);\n break;\n case \"polygons\":\n console.warn(\"THREE.ColladaLoader: Unsupported primitive type: \", child.nodeName);\n break;\n case \"lines\":\n case \"linestrips\":\n case \"polylist\":\n case \"triangles\":\n data.primitives.push(parseGeometryPrimitive(child));\n break;\n default:\n console.log(child);\n }\n }\n library.geometries[xml2.getAttribute(\"id\")] = data;\n }\n function parseSource(xml2) {\n const data = {\n array: [],\n stride: 3\n };\n for (let i = 0; i < xml2.childNodes.length; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"float_array\":\n data.array = parseFloats(child.textContent);\n break;\n case \"Name_array\":\n data.array = parseStrings(child.textContent);\n break;\n case \"technique_common\":\n const accessor = getElementsByTagName(child, \"accessor\")[0];\n if (accessor !== void 0) {\n data.stride = parseInt(accessor.getAttribute(\"stride\"));\n }\n break;\n }\n }\n return data;\n }\n function parseGeometryVertices(xml2) {\n const data = {};\n for (let i = 0; i < xml2.childNodes.length; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n data[child.getAttribute(\"semantic\")] = parseId(child.getAttribute(\"source\"));\n }\n return data;\n }\n function parseGeometryPrimitive(xml2) {\n const primitive = {\n type: xml2.nodeName,\n material: xml2.getAttribute(\"material\"),\n count: parseInt(xml2.getAttribute(\"count\")),\n inputs: {},\n stride: 0,\n hasUV: false\n };\n for (let i = 0, l = xml2.childNodes.length; i < l; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"input\":\n const id = parseId(child.getAttribute(\"source\"));\n const semantic = child.getAttribute(\"semantic\");\n const offset = parseInt(child.getAttribute(\"offset\"));\n const set = parseInt(child.getAttribute(\"set\"));\n const inputname = set > 0 ? semantic + set : semantic;\n primitive.inputs[inputname] = { id, offset };\n primitive.stride = Math.max(primitive.stride, offset + 1);\n if (semantic === \"TEXCOORD\")\n primitive.hasUV = true;\n break;\n case \"vcount\":\n primitive.vcount = parseInts(child.textContent);\n break;\n case \"p\":\n primitive.p = parseInts(child.textContent);\n break;\n }\n }\n return primitive;\n }\n function groupPrimitives(primitives) {\n const build = {};\n for (let i = 0; i < primitives.length; i++) {\n const primitive = primitives[i];\n if (build[primitive.type] === void 0)\n build[primitive.type] = [];\n build[primitive.type].push(primitive);\n }\n return build;\n }\n function checkUVCoordinates(primitives) {\n let count2 = 0;\n for (let i = 0, l = primitives.length; i < l; i++) {\n const primitive = primitives[i];\n if (primitive.hasUV === true) {\n count2++;\n }\n }\n if (count2 > 0 && count2 < primitives.length) {\n primitives.uvsNeedsFix = true;\n }\n }\n function buildGeometry(data) {\n const build = {};\n const sources = data.sources;\n const vertices = data.vertices;\n const primitives = data.primitives;\n if (primitives.length === 0)\n return {};\n const groupedPrimitives = groupPrimitives(primitives);\n for (const type in groupedPrimitives) {\n const primitiveType = groupedPrimitives[type];\n checkUVCoordinates(primitiveType);\n build[type] = buildGeometryType(primitiveType, sources, vertices);\n }\n return build;\n }\n function buildGeometryType(primitives, sources, vertices) {\n const build = {};\n const position2 = { array: [], stride: 0 };\n const normal = { array: [], stride: 0 };\n const uv = { array: [], stride: 0 };\n const uv1 = { array: [], stride: 0 };\n const color = { array: [], stride: 0 };\n const skinIndex = { array: [], stride: 4 };\n const skinWeight = { array: [], stride: 4 };\n const geometry = new BufferGeometry();\n const materialKeys = [];\n let start = 0;\n for (let p = 0; p < primitives.length; p++) {\n const primitive = primitives[p];\n const inputs = primitive.inputs;\n let count2 = 0;\n switch (primitive.type) {\n case \"lines\":\n case \"linestrips\":\n count2 = primitive.count * 2;\n break;\n case \"triangles\":\n count2 = primitive.count * 3;\n break;\n case \"polylist\":\n for (let g = 0; g < primitive.count; g++) {\n const vc = primitive.vcount[g];\n switch (vc) {\n case 3:\n count2 += 3;\n break;\n case 4:\n count2 += 6;\n break;\n default:\n count2 += (vc - 2) * 3;\n break;\n }\n }\n break;\n default:\n console.warn(\"THREE.ColladaLoader: Unknow primitive type:\", primitive.type);\n }\n geometry.addGroup(start, count2, p);\n start += count2;\n if (primitive.material) {\n materialKeys.push(primitive.material);\n }\n for (const name in inputs) {\n const input = inputs[name];\n switch (name) {\n case \"VERTEX\":\n for (const key in vertices) {\n const id = vertices[key];\n switch (key) {\n case \"POSITION\":\n const prevLength = position2.array.length;\n buildGeometryData(primitive, sources[id], input.offset, position2.array);\n position2.stride = sources[id].stride;\n if (sources.skinWeights && sources.skinIndices) {\n buildGeometryData(primitive, sources.skinIndices, input.offset, skinIndex.array);\n buildGeometryData(primitive, sources.skinWeights, input.offset, skinWeight.array);\n }\n if (primitive.hasUV === false && primitives.uvsNeedsFix === true) {\n const count3 = (position2.array.length - prevLength) / position2.stride;\n for (let i = 0; i < count3; i++) {\n uv.array.push(0, 0);\n }\n }\n break;\n case \"NORMAL\":\n buildGeometryData(primitive, sources[id], input.offset, normal.array);\n normal.stride = sources[id].stride;\n break;\n case \"COLOR\":\n buildGeometryData(primitive, sources[id], input.offset, color.array);\n color.stride = sources[id].stride;\n break;\n case \"TEXCOORD\":\n buildGeometryData(primitive, sources[id], input.offset, uv.array);\n uv.stride = sources[id].stride;\n break;\n case \"TEXCOORD1\":\n buildGeometryData(primitive, sources[id], input.offset, uv1.array);\n uv.stride = sources[id].stride;\n break;\n default:\n console.warn('THREE.ColladaLoader: Semantic \"%s\" not handled in geometry build process.', key);\n }\n }\n break;\n case \"NORMAL\":\n buildGeometryData(primitive, sources[input.id], input.offset, normal.array);\n normal.stride = sources[input.id].stride;\n break;\n case \"COLOR\":\n buildGeometryData(primitive, sources[input.id], input.offset, color.array);\n color.stride = sources[input.id].stride;\n break;\n case \"TEXCOORD\":\n buildGeometryData(primitive, sources[input.id], input.offset, uv.array);\n uv.stride = sources[input.id].stride;\n break;\n case \"TEXCOORD1\":\n buildGeometryData(primitive, sources[input.id], input.offset, uv1.array);\n uv1.stride = sources[input.id].stride;\n break;\n }\n }\n }\n if (position2.array.length > 0) {\n geometry.setAttribute(\"position\", new Float32BufferAttribute(position2.array, position2.stride));\n }\n if (normal.array.length > 0) {\n geometry.setAttribute(\"normal\", new Float32BufferAttribute(normal.array, normal.stride));\n }\n if (color.array.length > 0)\n geometry.setAttribute(\"color\", new Float32BufferAttribute(color.array, color.stride));\n if (uv.array.length > 0)\n geometry.setAttribute(\"uv\", new Float32BufferAttribute(uv.array, uv.stride));\n if (uv1.array.length > 0)\n geometry.setAttribute(UV1, new Float32BufferAttribute(uv1.array, uv1.stride));\n if (skinIndex.array.length > 0) {\n geometry.setAttribute(\"skinIndex\", new Float32BufferAttribute(skinIndex.array, skinIndex.stride));\n }\n if (skinWeight.array.length > 0) {\n geometry.setAttribute(\"skinWeight\", new Float32BufferAttribute(skinWeight.array, skinWeight.stride));\n }\n build.data = geometry;\n build.type = primitives[0].type;\n build.materialKeys = materialKeys;\n return build;\n }\n function buildGeometryData(primitive, source, offset, array) {\n const indices = primitive.p;\n const stride = primitive.stride;\n const vcount = primitive.vcount;\n function pushVector(i) {\n let index = indices[i + offset] * sourceStride;\n const length = index + sourceStride;\n for (; index < length; index++) {\n array.push(sourceArray[index]);\n }\n }\n const sourceArray = source.array;\n const sourceStride = source.stride;\n if (primitive.vcount !== void 0) {\n let index = 0;\n for (let i = 0, l = vcount.length; i < l; i++) {\n const count2 = vcount[i];\n if (count2 === 4) {\n const a = index + stride * 0;\n const b = index + stride * 1;\n const c = index + stride * 2;\n const d = index + stride * 3;\n pushVector(a);\n pushVector(b);\n pushVector(d);\n pushVector(b);\n pushVector(c);\n pushVector(d);\n } else if (count2 === 3) {\n const a = index + stride * 0;\n const b = index + stride * 1;\n const c = index + stride * 2;\n pushVector(a);\n pushVector(b);\n pushVector(c);\n } else if (count2 > 4) {\n for (let k = 1, kl = count2 - 2; k <= kl; k++) {\n const a = index + stride * 0;\n const b = index + stride * k;\n const c = index + stride * (k + 1);\n pushVector(a);\n pushVector(b);\n pushVector(c);\n }\n }\n index += stride * count2;\n }\n } else {\n for (let i = 0, l = indices.length; i < l; i += stride) {\n pushVector(i);\n }\n }\n }\n function getGeometry(id) {\n return getBuild(library.geometries[id], buildGeometry);\n }\n function parseKinematicsModel(xml2) {\n const data = {\n name: xml2.getAttribute(\"name\") || \"\",\n joints: {},\n links: []\n };\n for (let i = 0; i < xml2.childNodes.length; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"technique_common\":\n parseKinematicsTechniqueCommon(child, data);\n break;\n }\n }\n library.kinematicsModels[xml2.getAttribute(\"id\")] = data;\n }\n function buildKinematicsModel(data) {\n if (data.build !== void 0)\n return data.build;\n return data;\n }\n function getKinematicsModel(id) {\n return getBuild(library.kinematicsModels[id], buildKinematicsModel);\n }\n function parseKinematicsTechniqueCommon(xml2, data) {\n for (let i = 0; i < xml2.childNodes.length; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"joint\":\n data.joints[child.getAttribute(\"sid\")] = parseKinematicsJoint(child);\n break;\n case \"link\":\n data.links.push(parseKinematicsLink(child));\n break;\n }\n }\n }\n function parseKinematicsJoint(xml2) {\n let data;\n for (let i = 0; i < xml2.childNodes.length; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"prismatic\":\n case \"revolute\":\n data = parseKinematicsJointParameter(child);\n break;\n }\n }\n return data;\n }\n function parseKinematicsJointParameter(xml2) {\n const data = {\n sid: xml2.getAttribute(\"sid\"),\n name: xml2.getAttribute(\"name\") || \"\",\n axis: new Vector3(),\n limits: {\n min: 0,\n max: 0\n },\n type: xml2.nodeName,\n static: false,\n zeroPosition: 0,\n middlePosition: 0\n };\n for (let i = 0; i < xml2.childNodes.length; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"axis\":\n const array = parseFloats(child.textContent);\n data.axis.fromArray(array);\n break;\n case \"limits\":\n const max = child.getElementsByTagName(\"max\")[0];\n const min = child.getElementsByTagName(\"min\")[0];\n data.limits.max = parseFloat(max.textContent);\n data.limits.min = parseFloat(min.textContent);\n break;\n }\n }\n if (data.limits.min >= data.limits.max) {\n data.static = true;\n }\n data.middlePosition = (data.limits.min + data.limits.max) / 2;\n return data;\n }\n function parseKinematicsLink(xml2) {\n const data = {\n sid: xml2.getAttribute(\"sid\"),\n name: xml2.getAttribute(\"name\") || \"\",\n attachments: [],\n transforms: []\n };\n for (let i = 0; i < xml2.childNodes.length; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"attachment_full\":\n data.attachments.push(parseKinematicsAttachment(child));\n break;\n case \"matrix\":\n case \"translate\":\n case \"rotate\":\n data.transforms.push(parseKinematicsTransform(child));\n break;\n }\n }\n return data;\n }\n function parseKinematicsAttachment(xml2) {\n const data = {\n joint: xml2.getAttribute(\"joint\").split(\"/\").pop(),\n transforms: [],\n links: []\n };\n for (let i = 0; i < xml2.childNodes.length; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"link\":\n data.links.push(parseKinematicsLink(child));\n break;\n case \"matrix\":\n case \"translate\":\n case \"rotate\":\n data.transforms.push(parseKinematicsTransform(child));\n break;\n }\n }\n return data;\n }\n function parseKinematicsTransform(xml2) {\n const data = {\n type: xml2.nodeName\n };\n const array = parseFloats(xml2.textContent);\n switch (data.type) {\n case \"matrix\":\n data.obj = new Matrix4();\n data.obj.fromArray(array).transpose();\n break;\n case \"translate\":\n data.obj = new Vector3();\n data.obj.fromArray(array);\n break;\n case \"rotate\":\n data.obj = new Vector3();\n data.obj.fromArray(array);\n data.angle = MathUtils.degToRad(array[3]);\n break;\n }\n return data;\n }\n function parsePhysicsModel(xml2) {\n const data = {\n name: xml2.getAttribute(\"name\") || \"\",\n rigidBodies: {}\n };\n for (let i = 0; i < xml2.childNodes.length; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"rigid_body\":\n data.rigidBodies[child.getAttribute(\"name\")] = {};\n parsePhysicsRigidBody(child, data.rigidBodies[child.getAttribute(\"name\")]);\n break;\n }\n }\n library.physicsModels[xml2.getAttribute(\"id\")] = data;\n }\n function parsePhysicsRigidBody(xml2, data) {\n for (let i = 0; i < xml2.childNodes.length; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"technique_common\":\n parsePhysicsTechniqueCommon(child, data);\n break;\n }\n }\n }\n function parsePhysicsTechniqueCommon(xml2, data) {\n for (let i = 0; i < xml2.childNodes.length; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"inertia\":\n data.inertia = parseFloats(child.textContent);\n break;\n case \"mass\":\n data.mass = parseFloats(child.textContent)[0];\n break;\n }\n }\n }\n function parseKinematicsScene(xml2) {\n const data = {\n bindJointAxis: []\n };\n for (let i = 0; i < xml2.childNodes.length; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"bind_joint_axis\":\n data.bindJointAxis.push(parseKinematicsBindJointAxis(child));\n break;\n }\n }\n library.kinematicsScenes[parseId(xml2.getAttribute(\"url\"))] = data;\n }\n function parseKinematicsBindJointAxis(xml2) {\n const data = {\n target: xml2.getAttribute(\"target\").split(\"/\").pop()\n };\n for (let i = 0; i < xml2.childNodes.length; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n switch (child.nodeName) {\n case \"axis\":\n const param = child.getElementsByTagName(\"param\")[0];\n data.axis = param.textContent;\n const tmpJointIndex = data.axis.split(\"inst_\").pop().split(\"axis\")[0];\n data.jointIndex = tmpJointIndex.substr(0, tmpJointIndex.length - 1);\n break;\n }\n }\n return data;\n }\n function buildKinematicsScene(data) {\n if (data.build !== void 0)\n return data.build;\n return data;\n }\n function getKinematicsScene(id) {\n return getBuild(library.kinematicsScenes[id], buildKinematicsScene);\n }\n function setupKinematics() {\n const kinematicsModelId = Object.keys(library.kinematicsModels)[0];\n const kinematicsSceneId = Object.keys(library.kinematicsScenes)[0];\n const visualSceneId = Object.keys(library.visualScenes)[0];\n if (kinematicsModelId === void 0 || kinematicsSceneId === void 0)\n return;\n const kinematicsModel = getKinematicsModel(kinematicsModelId);\n const kinematicsScene = getKinematicsScene(kinematicsSceneId);\n const visualScene = getVisualScene(visualSceneId);\n const bindJointAxis = kinematicsScene.bindJointAxis;\n const jointMap = {};\n for (let i = 0, l = bindJointAxis.length; i < l; i++) {\n const axis = bindJointAxis[i];\n const targetElement = collada.querySelector('[sid=\"' + axis.target + '\"]');\n if (targetElement) {\n const parentVisualElement = targetElement.parentElement;\n connect(axis.jointIndex, parentVisualElement);\n }\n }\n function connect(jointIndex, visualElement) {\n const visualElementName = visualElement.getAttribute(\"name\");\n const joint = kinematicsModel.joints[jointIndex];\n visualScene.traverse(function(object) {\n if (object.name === visualElementName) {\n jointMap[jointIndex] = {\n object,\n transforms: buildTransformList(visualElement),\n joint,\n position: joint.zeroPosition\n };\n }\n });\n }\n const m0 = new Matrix4();\n kinematics = {\n joints: kinematicsModel && kinematicsModel.joints,\n getJointValue: function(jointIndex) {\n const jointData = jointMap[jointIndex];\n if (jointData) {\n return jointData.position;\n } else {\n console.warn(\"THREE.ColladaLoader: Joint \" + jointIndex + \" doesn't exist.\");\n }\n },\n setJointValue: function(jointIndex, value) {\n const jointData = jointMap[jointIndex];\n if (jointData) {\n const joint = jointData.joint;\n if (value > joint.limits.max || value < joint.limits.min) {\n console.warn(\n \"THREE.ColladaLoader: Joint \" + jointIndex + \" value \" + value + \" outside of limits (min: \" + joint.limits.min + \", max: \" + joint.limits.max + \").\"\n );\n } else if (joint.static) {\n console.warn(\"THREE.ColladaLoader: Joint \" + jointIndex + \" is static.\");\n } else {\n const object = jointData.object;\n const axis = joint.axis;\n const transforms = jointData.transforms;\n matrix.identity();\n for (let i = 0; i < transforms.length; i++) {\n const transform = transforms[i];\n if (transform.sid && transform.sid.indexOf(jointIndex) !== -1) {\n switch (joint.type) {\n case \"revolute\":\n matrix.multiply(m0.makeRotationAxis(axis, MathUtils.degToRad(value)));\n break;\n case \"prismatic\":\n matrix.multiply(m0.makeTranslation(axis.x * value, axis.y * value, axis.z * value));\n break;\n default:\n console.warn(\"THREE.ColladaLoader: Unknown joint type: \" + joint.type);\n break;\n }\n } else {\n switch (transform.type) {\n case \"matrix\":\n matrix.multiply(transform.obj);\n break;\n case \"translate\":\n matrix.multiply(m0.makeTranslation(transform.obj.x, transform.obj.y, transform.obj.z));\n break;\n case \"scale\":\n matrix.scale(transform.obj);\n break;\n case \"rotate\":\n matrix.multiply(m0.makeRotationAxis(transform.obj, transform.angle));\n break;\n }\n }\n }\n object.matrix.copy(matrix);\n object.matrix.decompose(object.position, object.quaternion, object.scale);\n jointMap[jointIndex].position = value;\n }\n } else {\n console.log(\"THREE.ColladaLoader: \" + jointIndex + \" does not exist.\");\n }\n }\n };\n }\n function buildTransformList(node) {\n const transforms = [];\n const xml2 = collada.querySelector('[id=\"' + node.id + '\"]');\n for (let i = 0; i < xml2.childNodes.length; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n let array, vector2;\n switch (child.nodeName) {\n case \"matrix\":\n array = parseFloats(child.textContent);\n const matrix2 = new Matrix4().fromArray(array).transpose();\n transforms.push({\n sid: child.getAttribute(\"sid\"),\n type: child.nodeName,\n obj: matrix2\n });\n break;\n case \"translate\":\n case \"scale\":\n array = parseFloats(child.textContent);\n vector2 = new Vector3().fromArray(array);\n transforms.push({\n sid: child.getAttribute(\"sid\"),\n type: child.nodeName,\n obj: vector2\n });\n break;\n case \"rotate\":\n array = parseFloats(child.textContent);\n vector2 = new Vector3().fromArray(array);\n const angle = MathUtils.degToRad(array[3]);\n transforms.push({\n sid: child.getAttribute(\"sid\"),\n type: child.nodeName,\n obj: vector2,\n angle\n });\n break;\n }\n }\n return transforms;\n }\n function prepareNodes(xml2) {\n const elements = xml2.getElementsByTagName(\"node\");\n for (let i = 0; i < elements.length; i++) {\n const element = elements[i];\n if (element.hasAttribute(\"id\") === false) {\n element.setAttribute(\"id\", generateId());\n }\n }\n }\n const matrix = new Matrix4();\n const vector = new Vector3();\n function parseNode(xml2) {\n const data = {\n name: xml2.getAttribute(\"name\") || \"\",\n type: xml2.getAttribute(\"type\"),\n id: xml2.getAttribute(\"id\"),\n sid: xml2.getAttribute(\"sid\"),\n matrix: new Matrix4(),\n nodes: [],\n instanceCameras: [],\n instanceControllers: [],\n instanceLights: [],\n instanceGeometries: [],\n instanceNodes: [],\n transforms: {}\n };\n for (let i = 0; i < xml2.childNodes.length; i++) {\n const child = xml2.childNodes[i];\n if (child.nodeType !== 1)\n continue;\n let array;\n switch (child.nodeName) {\n case \"node\":\n data.nodes.push(child.getAttribute(\"id\"));\n parseNode(child);\n break;\n case \"instance_camera\":\n data.instanceCameras.push(parseId(child.getAttribute(\"url\")));\n break;\n case \"instance_controller\":\n data.instanceControllers.push(parseNodeInstance(child));\n break;\n case \"instance_light\":\n data.instanceLights.push(parseId(child.getAttribute(\"url\")));\n break;\n case \"instance_geometry\":\n data.instanceGeometries.push(parseNodeInstance(child));\n break;\n case \"instance_node\":\n data.instanceNodes.push(parseId(child.getAttribute(\"url\")));\n break;\n case \"matrix\":\n array = parseFloats(child.textContent);\n data.matrix.multiply(matrix.fromArray(array).transpose());\n data.transforms[child.getAttribute(\"sid\")] = child.nodeName;\n break;\n case \"translate\":\n array = parseFloats(child.textContent);\n vector.fromArray(array);\n data.matrix.multiply(matrix.makeTranslation(vector.x, vector.y, vector.z));\n data.transforms[child.getAttribute(\"sid\")] = child.nodeName;\n break;\n case \"rotate\":\n array = parseFloats(child.textContent);\n const angle = MathUtils.degToRad(array[3]);\n data.matrix.multiply(matrix.makeRotationAxis(vector.fromArray(array), angle));\n data.transforms[child.getAttribute(\"sid\")] = child.nodeName;\n break;\n case \"scale\":\n array = parseFloats(child.textContent);\n data.matrix.scale(vector.fromArray(array));\n data.transforms[child.getAttribute(\"sid\")] = child.nodeName;\n break;\n case \"extra\":\n break;\n default:\n console.log(child);\n }\n }\n if (hasNode(data.id)) {\n console.warn(\n \"THREE.ColladaLoader: There is already a node with ID %s. Exclude current node from further processing.\",\n data.id\n );\n } else {\n library.nodes[data.id] = data;\n }\n return data;\n }\n function parseNodeInstance(xml2) {\n const data = {\n id: parseId(xml2.getAttribute(\"url\")),\n materials: {},\n skeletons: []\n };\n for (let i = 0; i < xml2.childNodes.length; i++) {\n const child = xml2.childNodes[i];\n switch (child.nodeName) {\n case \"bind_material\":\n const instances = child.getElementsByTagName(\"instance_material\");\n for (let j = 0; j < instances.length; j++) {\n const instance = instances[j];\n const symbol = instance.getAttribute(\"symbol\");\n const target = instance.getAttribute(\"target\");\n data.materials[symbol] = parseId(target);\n }\n break;\n case \"skeleton\":\n data.skeletons.push(parseId(child.textContent));\n break;\n }\n }\n return data;\n }\n function buildSkeleton(skeletons, joints) {\n const boneData = [];\n const sortedBoneData = [];\n let i, j, data;\n for (i = 0; i < skeletons.length; i++) {\n const skeleton = skeletons[i];\n let root;\n if (hasNode(skeleton)) {\n root = getNode(skeleton);\n buildBoneHierarchy(root, joints, boneData);\n } else if (hasVisualScene(skeleton)) {\n const visualScene = library.visualScenes[skeleton];\n const children = visualScene.children;\n for (let j2 = 0; j2 < children.length; j2++) {\n const child = children[j2];\n if (child.type === \"JOINT\") {\n const root2 = getNode(child.id);\n buildBoneHierarchy(root2, joints, boneData);\n }\n }\n } else {\n console.error(\"THREE.ColladaLoader: Unable to find root bone of skeleton with ID:\", skeleton);\n }\n }\n for (i = 0; i < joints.length; i++) {\n for (j = 0; j < boneData.length; j++) {\n data = boneData[j];\n if (data.bone.name === joints[i].name) {\n sortedBoneData[i] = data;\n data.processed = true;\n break;\n }\n }\n }\n for (i = 0; i < boneData.length; i++) {\n data = boneData[i];\n if (data.processed === false) {\n sortedBoneData.push(data);\n data.processed = true;\n }\n }\n const bones = [];\n const boneInverses = [];\n for (i = 0; i < sortedBoneData.length; i++) {\n data = sortedBoneData[i];\n bones.push(data.bone);\n boneInverses.push(data.boneInverse);\n }\n return new Skeleton(bones, boneInverses);\n }\n function buildBoneHierarchy(root, joints, boneData) {\n root.traverse(function(object) {\n if (object.isBone === true) {\n let boneInverse;\n for (let i = 0; i < joints.length; i++) {\n const joint = joints[i];\n if (joint.name === object.name) {\n boneInverse = joint.boneInverse;\n break;\n }\n }\n if (boneInverse === void 0) {\n boneInverse = new Matrix4();\n }\n boneData.push({ bone: object, boneInverse, processed: false });\n }\n });\n }\n function buildNode(data) {\n const objects = [];\n const matrix2 = data.matrix;\n const nodes = data.nodes;\n const type = data.type;\n const instanceCameras = data.instanceCameras;\n const instanceControllers = data.instanceControllers;\n const instanceLights = data.instanceLights;\n const instanceGeometries = data.instanceGeometries;\n const instanceNodes = data.instanceNodes;\n for (let i = 0, l = nodes.length; i < l; i++) {\n objects.push(getNode(nodes[i]));\n }\n for (let i = 0, l = instanceCameras.length; i < l; i++) {\n const instanceCamera = getCamera(instanceCameras[i]);\n if (instanceCamera !== null) {\n objects.push(instanceCamera.clone());\n }\n }\n for (let i = 0, l = instanceControllers.length; i < l; i++) {\n const instance = instanceControllers[i];\n const controller = getController(instance.id);\n const geometries = getGeometry(controller.id);\n const newObjects = buildObjects(geometries, instance.materials);\n const skeletons = instance.skeletons;\n const joints = controller.skin.joints;\n const skeleton = buildSkeleton(skeletons, joints);\n for (let j = 0, jl = newObjects.length; j < jl; j++) {\n const object2 = newObjects[j];\n if (object2.isSkinnedMesh) {\n object2.bind(skeleton, controller.skin.bindMatrix);\n object2.normalizeSkinWeights();\n }\n objects.push(object2);\n }\n }\n for (let i = 0, l = instanceLights.length; i < l; i++) {\n const instanceLight = getLight(instanceLights[i]);\n if (instanceLight !== null) {\n objects.push(instanceLight.clone());\n }\n }\n for (let i = 0, l = instanceGeometries.length; i < l; i++) {\n const instance = instanceGeometries[i];\n const geometries = getGeometry(instance.id);\n const newObjects = buildObjects(geometries, instance.materials);\n for (let j = 0, jl = newObjects.length; j < jl; j++) {\n objects.push(newObjects[j]);\n }\n }\n for (let i = 0, l = instanceNodes.length; i < l; i++) {\n objects.push(getNode(instanceNodes[i]).clone());\n }\n let object;\n if (nodes.length === 0 && objects.length === 1) {\n object = objects[0];\n } else {\n object = type === \"JOINT\" ? new Bone() : new Group();\n for (let i = 0; i < objects.length; i++) {\n object.add(objects[i]);\n }\n }\n object.name = type === \"JOINT\" ? data.sid : data.name;\n object.matrix.copy(matrix2);\n object.matrix.decompose(object.position, object.quaternion, object.scale);\n return object;\n }\n const fallbackMaterial = new MeshBasicMaterial({ color: 16711935 });\n function resolveMaterialBinding(keys, instanceMaterials) {\n const materials = [];\n for (let i = 0, l = keys.length; i < l; i++) {\n const id = instanceMaterials[keys[i]];\n if (id === void 0) {\n console.warn(\"THREE.ColladaLoader: Material with key %s not found. Apply fallback material.\", keys[i]);\n materials.push(fallbackMaterial);\n } else {\n materials.push(getMaterial(id));\n }\n }\n return materials;\n }\n function buildObjects(geometries, instanceMaterials) {\n const objects = [];\n for (const type in geometries) {\n const geometry = geometries[type];\n const materials = resolveMaterialBinding(geometry.materialKeys, instanceMaterials);\n if (materials.length === 0) {\n if (type === \"lines\" || type === \"linestrips\") {\n materials.push(new LineBasicMaterial());\n } else {\n materials.push(new MeshPhongMaterial());\n }\n }\n const skinning = geometry.data.attributes.skinIndex !== void 0;\n const material = materials.length === 1 ? materials[0] : materials;\n let object;\n switch (type) {\n case \"lines\":\n object = new LineSegments(geometry.data, material);\n break;\n case \"linestrips\":\n object = new Line(geometry.data, material);\n break;\n case \"triangles\":\n case \"polylist\":\n if (skinning) {\n object = new SkinnedMesh(geometry.data, material);\n } else {\n object = new Mesh(geometry.data, material);\n }\n break;\n }\n objects.push(object);\n }\n return objects;\n }\n function hasNode(id) {\n return library.nodes[id] !== void 0;\n }\n function getNode(id) {\n return getBuild(library.nodes[id], buildNode);\n }\n function parseVisualScene(xml2) {\n const data = {\n name: xml2.getAttribute(\"name\"),\n children: []\n };\n prepareNodes(xml2);\n const elements = getElementsByTagName(xml2, \"node\");\n for (let i = 0; i < elements.length; i++) {\n data.children.push(parseNode(elements[i]));\n }\n library.visualScenes[xml2.getAttribute(\"id\")] = data;\n }\n function buildVisualScene(data) {\n const group = new Group();\n group.name = data.name;\n const children = data.children;\n for (let i = 0; i < children.length; i++) {\n const child = children[i];\n group.add(getNode(child.id));\n }\n return group;\n }\n function hasVisualScene(id) {\n return library.visualScenes[id] !== void 0;\n }\n function getVisualScene(id) {\n return getBuild(library.visualScenes[id], buildVisualScene);\n }\n function parseScene(xml2) {\n const instance = getElementsByTagName(xml2, \"instance_visual_scene\")[0];\n return getVisualScene(parseId(instance.getAttribute(\"url\")));\n }\n function setupAnimations() {\n const clips = library.clips;\n if (isEmpty(clips) === true) {\n if (isEmpty(library.animations) === false) {\n const tracks = [];\n for (const id in library.animations) {\n const animationTracks = getAnimation(id);\n for (let i = 0, l = animationTracks.length; i < l; i++) {\n tracks.push(animationTracks[i]);\n }\n }\n animations.push(new AnimationClip(\"default\", -1, tracks));\n }\n } else {\n for (const id in clips) {\n animations.push(getAnimationClip(id));\n }\n }\n }\n function parserErrorToText(parserError2) {\n let result = \"\";\n const stack = [parserError2];\n while (stack.length) {\n const node = stack.shift();\n if (node.nodeType === Node.TEXT_NODE) {\n result += node.textContent;\n } else {\n result += \"\\n\";\n stack.push.apply(stack, node.childNodes);\n }\n }\n return result.trim();\n }\n if (text.length === 0) {\n return { scene: new Scene() };\n }\n const xml = new DOMParser().parseFromString(text, \"application/xml\");\n const collada = getElementsByTagName(xml, \"COLLADA\")[0];\n const parserError = xml.getElementsByTagName(\"parsererror\")[0];\n if (parserError !== void 0) {\n const errorElement = getElementsByTagName(parserError, \"div\")[0];\n let errorText;\n if (errorElement) {\n errorText = errorElement.textContent;\n } else {\n errorText = parserErrorToText(parserError);\n }\n console.error(\"THREE.ColladaLoader: Failed to parse collada file.\\n\", errorText);\n return null;\n }\n const version = collada.getAttribute(\"version\");\n console.log(\"THREE.ColladaLoader: File version\", version);\n const asset = parseAsset(getElementsByTagName(collada, \"asset\")[0]);\n const textureLoader = new TextureLoader(this.manager);\n textureLoader.setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin);\n let tgaLoader;\n if (TGALoader) {\n tgaLoader = new TGALoader(this.manager);\n tgaLoader.setPath(this.resourcePath || path);\n }\n const animations = [];\n let kinematics = {};\n let count = 0;\n const library = {\n animations: {},\n clips: {},\n controllers: {},\n images: {},\n effects: {},\n materials: {},\n cameras: {},\n lights: {},\n geometries: {},\n nodes: {},\n visualScenes: {},\n kinematicsModels: {},\n physicsModels: {},\n kinematicsScenes: {}\n };\n parseLibrary(collada, \"library_animations\", \"animation\", parseAnimation);\n parseLibrary(collada, \"library_animation_clips\", \"animation_clip\", parseAnimationClip);\n parseLibrary(collada, \"library_controllers\", \"controller\", parseController);\n parseLibrary(collada, \"library_images\", \"image\", parseImage);\n parseLibrary(collada, \"library_effects\", \"effect\", parseEffect);\n parseLibrary(collada, \"library_materials\", \"material\", parseMaterial);\n parseLibrary(collada, \"library_cameras\", \"camera\", parseCamera);\n parseLibrary(collada, \"library_lights\", \"light\", parseLight);\n parseLibrary(collada, \"library_geometries\", \"geometry\", parseGeometry);\n parseLibrary(collada, \"library_nodes\", \"node\", parseNode);\n parseLibrary(collada, \"library_visual_scenes\", \"visual_scene\", parseVisualScene);\n parseLibrary(collada, \"library_kinematics_models\", \"kinematics_model\", parseKinematicsModel);\n parseLibrary(collada, \"library_physics_models\", \"physics_model\", parsePhysicsModel);\n parseLibrary(collada, \"scene\", \"instance_kinematics_scene\", parseKinematicsScene);\n buildLibrary(library.animations, buildAnimation);\n buildLibrary(library.clips, buildAnimationClip);\n buildLibrary(library.controllers, buildController);\n buildLibrary(library.images, buildImage);\n buildLibrary(library.effects, buildEffect);\n buildLibrary(library.materials, buildMaterial);\n buildLibrary(library.cameras, buildCamera);\n buildLibrary(library.lights, buildLight);\n buildLibrary(library.geometries, buildGeometry);\n buildLibrary(library.visualScenes, buildVisualScene);\n setupAnimations();\n setupKinematics();\n const scene = parseScene(getElementsByTagName(collada, \"scene\")[0]);\n scene.animations = animations;\n if (asset.upAxis === \"Z_UP\") {\n scene.quaternion.setFromEuler(new Euler(-Math.PI / 2, 0, 0));\n }\n scene.scale.multiplyScalar(asset.unit);\n return {\n get animations() {\n console.warn(\"THREE.ColladaLoader: Please access animations over scene.animations now.\");\n return animations;\n },\n kinematics,\n library,\n scene\n };\n }\n}\nexport {\n ColladaLoader\n};\n//# sourceMappingURL=ColladaLoader.js.map\n","import { Loader, FileLoader, LoadingManager, Group } from \"three\";\nimport { ColladaLoader } from \"./ColladaLoader.js\";\nimport { unzipSync } from \"fflate\";\nclass KMZLoader extends Loader {\n constructor(manager) {\n super(manager);\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const loader = new FileLoader(scope.manager);\n loader.setPath(scope.path);\n loader.setResponseType(\"arraybuffer\");\n loader.setRequestHeader(scope.requestHeader);\n loader.setWithCredentials(scope.withCredentials);\n loader.load(\n url,\n function(text) {\n try {\n onLoad(scope.parse(text));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(data) {\n function findFile(url) {\n for (const path in zip) {\n if (path.substr(-url.length) === url) {\n return zip[path];\n }\n }\n }\n const manager = new LoadingManager();\n manager.setURLModifier(function(url) {\n const image = findFile(url);\n if (image) {\n console.log(\"Loading\", url);\n const blob = new Blob([image.buffer], { type: \"application/octet-stream\" });\n return URL.createObjectURL(blob);\n }\n return url;\n });\n const zip = unzipSync(new Uint8Array(data));\n if (zip[\"doc.kml\"]) {\n const xml = new DOMParser().parseFromString(fflate.strFromU8(zip[\"doc.kml\"]), \"application/xml\");\n const model = xml.querySelector(\"Placemark Model Link href\");\n if (model) {\n const loader = new ColladaLoader(manager);\n return loader.parse(fflate.strFromU8(zip[model.textContent]));\n }\n } else {\n console.warn(\"KMZLoader: Missing doc.kml file.\");\n for (const path in zip) {\n const extension = path.split(\".\").pop().toLowerCase();\n if (extension === \"dae\") {\n const loader = new ColladaLoader(manager);\n return loader.parse(fflate.strFromU8(zip[path]));\n }\n }\n }\n console.error(\"KMZLoader: Couldn't find .dae file.\");\n return { scene: new Group() };\n }\n}\nexport {\n KMZLoader\n};\n//# sourceMappingURL=KMZLoader.js.map\n","import { Loader } from \"three\";\nimport { GLTFLoader } from \"./GLTFLoader.js\";\nclass VRMLoader extends Loader {\n constructor(manager) {\n super(manager);\n this.gltfLoader = new GLTFLoader(manager);\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n this.gltfLoader.load(\n url,\n function(gltf) {\n try {\n scope.parse(gltf, onLoad);\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n setDRACOLoader(dracoLoader) {\n this.gltfLoader.setDRACOLoader(dracoLoader);\n return this;\n }\n parse(gltf, onLoad) {\n onLoad(gltf);\n }\n}\nexport {\n VRMLoader\n};\n//# sourceMappingURL=VRMLoader.js.map\n","const { CstParser, Lexer, createToken } = /* @__PURE__ */ (() => {\n var freeGlobal = typeof global == \"object\" && global && global.Object === Object && global;\n const freeGlobal$1 = freeGlobal;\n var freeSelf = typeof self == \"object\" && self && self.Object === Object && self;\n var root = freeGlobal$1 || freeSelf || Function(\"return this\")();\n const root$1 = root;\n var Symbol$1 = root$1.Symbol;\n const Symbol$2 = Symbol$1;\n var objectProto$j = Object.prototype;\n var hasOwnProperty$g = objectProto$j.hasOwnProperty;\n var nativeObjectToString$1 = objectProto$j.toString;\n var symToStringTag$1 = Symbol$2 ? Symbol$2.toStringTag : void 0;\n function getRawTag(value) {\n var isOwn = hasOwnProperty$g.call(value, symToStringTag$1), tag = value[symToStringTag$1];\n try {\n value[symToStringTag$1] = void 0;\n var unmasked = true;\n } catch (e) {\n }\n var result = nativeObjectToString$1.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag$1] = tag;\n } else {\n delete value[symToStringTag$1];\n }\n }\n return result;\n }\n var objectProto$i = Object.prototype;\n var nativeObjectToString = objectProto$i.toString;\n function objectToString(value) {\n return nativeObjectToString.call(value);\n }\n var nullTag = \"[object Null]\", undefinedTag = \"[object Undefined]\";\n var symToStringTag = Symbol$2 ? Symbol$2.toStringTag : void 0;\n function baseGetTag(value) {\n if (value == null) {\n return value === void 0 ? undefinedTag : nullTag;\n }\n return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString(value);\n }\n function isObjectLike(value) {\n return value != null && typeof value == \"object\";\n }\n var symbolTag$3 = \"[object Symbol]\";\n function isSymbol(value) {\n return typeof value == \"symbol\" || isObjectLike(value) && baseGetTag(value) == symbolTag$3;\n }\n function arrayMap(array, iteratee) {\n var index = -1, length = array == null ? 0 : array.length, result = Array(length);\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n }\n var isArray = Array.isArray;\n const isArray$1 = isArray;\n var INFINITY$3 = 1 / 0;\n var symbolProto$2 = Symbol$2 ? Symbol$2.prototype : void 0, symbolToString = symbolProto$2 ? symbolProto$2.toString : void 0;\n function baseToString(value) {\n if (typeof value == \"string\") {\n return value;\n }\n if (isArray$1(value)) {\n return arrayMap(value, baseToString) + \"\";\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : \"\";\n }\n var result = value + \"\";\n return result == \"0\" && 1 / value == -INFINITY$3 ? \"-0\" : result;\n }\n var reWhitespace = /\\s/;\n function trimmedEndIndex(string) {\n var index = string.length;\n while (index-- && reWhitespace.test(string.charAt(index))) {\n }\n return index;\n }\n var reTrimStart = /^\\s+/;\n function baseTrim(string) {\n return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, \"\") : string;\n }\n function isObject(value) {\n var type = typeof value;\n return value != null && (type == \"object\" || type == \"function\");\n }\n var NAN = 0 / 0;\n var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;\n var reIsBinary = /^0b[01]+$/i;\n var reIsOctal = /^0o[0-7]+$/i;\n var freeParseInt = parseInt;\n function toNumber(value) {\n if (typeof value == \"number\") {\n return value;\n }\n if (isSymbol(value)) {\n return NAN;\n }\n if (isObject(value)) {\n var other = typeof value.valueOf == \"function\" ? value.valueOf() : value;\n value = isObject(other) ? other + \"\" : other;\n }\n if (typeof value != \"string\") {\n return value === 0 ? value : +value;\n }\n value = baseTrim(value);\n var isBinary = reIsBinary.test(value);\n return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;\n }\n var INFINITY$2 = 1 / 0, MAX_INTEGER = 17976931348623157e292;\n function toFinite(value) {\n if (!value) {\n return value === 0 ? value : 0;\n }\n value = toNumber(value);\n if (value === INFINITY$2 || value === -INFINITY$2) {\n var sign = value < 0 ? -1 : 1;\n return sign * MAX_INTEGER;\n }\n return value === value ? value : 0;\n }\n function toInteger(value) {\n var result = toFinite(value), remainder = result % 1;\n return result === result ? remainder ? result - remainder : result : 0;\n }\n function identity(value) {\n return value;\n }\n var asyncTag = \"[object AsyncFunction]\", funcTag$2 = \"[object Function]\", genTag$1 = \"[object GeneratorFunction]\", proxyTag = \"[object Proxy]\";\n function isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n var tag = baseGetTag(value);\n return tag == funcTag$2 || tag == genTag$1 || tag == asyncTag || tag == proxyTag;\n }\n var coreJsData = root$1[\"__core-js_shared__\"];\n const coreJsData$1 = coreJsData;\n var maskSrcKey = function() {\n var uid = /[^.]+$/.exec(coreJsData$1 && coreJsData$1.keys && coreJsData$1.keys.IE_PROTO || \"\");\n return uid ? \"Symbol(src)_1.\" + uid : \"\";\n }();\n function isMasked(func) {\n return !!maskSrcKey && maskSrcKey in func;\n }\n var funcProto$1 = Function.prototype;\n var funcToString$1 = funcProto$1.toString;\n function toSource(func) {\n if (func != null) {\n try {\n return funcToString$1.call(func);\n } catch (e) {\n }\n try {\n return func + \"\";\n } catch (e) {\n }\n }\n return \"\";\n }\n var reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n var reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n var funcProto = Function.prototype, objectProto$h = Object.prototype;\n var funcToString = funcProto.toString;\n var hasOwnProperty$f = objectProto$h.hasOwnProperty;\n var reIsNative = RegExp(\n \"^\" + funcToString.call(hasOwnProperty$f).replace(reRegExpChar, \"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, \"$1.*?\") + \"$\"\n );\n function baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n }\n function getValue(object, key) {\n return object == null ? void 0 : object[key];\n }\n function getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : void 0;\n }\n var WeakMap = getNative(root$1, \"WeakMap\");\n const WeakMap$1 = WeakMap;\n var objectCreate = Object.create;\n var baseCreate = function() {\n function object() {\n }\n return function(proto) {\n if (!isObject(proto)) {\n return {};\n }\n if (objectCreate) {\n return objectCreate(proto);\n }\n object.prototype = proto;\n var result = new object();\n object.prototype = void 0;\n return result;\n };\n }();\n const baseCreate$1 = baseCreate;\n function apply(func, thisArg, args) {\n switch (args.length) {\n case 0:\n return func.call(thisArg);\n case 1:\n return func.call(thisArg, args[0]);\n case 2:\n return func.call(thisArg, args[0], args[1]);\n case 3:\n return func.call(thisArg, args[0], args[1], args[2]);\n }\n return func.apply(thisArg, args);\n }\n function noop() {\n }\n function copyArray(source, array) {\n var index = -1, length = source.length;\n array || (array = Array(length));\n while (++index < length) {\n array[index] = source[index];\n }\n return array;\n }\n var HOT_COUNT = 800, HOT_SPAN = 16;\n var nativeNow = Date.now;\n function shortOut(func) {\n var count = 0, lastCalled = 0;\n return function() {\n var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled);\n lastCalled = stamp;\n if (remaining > 0) {\n if (++count >= HOT_COUNT) {\n return arguments[0];\n }\n } else {\n count = 0;\n }\n return func.apply(void 0, arguments);\n };\n }\n function constant(value) {\n return function() {\n return value;\n };\n }\n var defineProperty = function() {\n try {\n var func = getNative(Object, \"defineProperty\");\n func({}, \"\", {});\n return func;\n } catch (e) {\n }\n }();\n const defineProperty$1 = defineProperty;\n var baseSetToString = !defineProperty$1 ? identity : function(func, string) {\n return defineProperty$1(func, \"toString\", {\n configurable: true,\n enumerable: false,\n value: constant(string),\n writable: true\n });\n };\n const baseSetToString$1 = baseSetToString;\n var setToString = shortOut(baseSetToString$1);\n const setToString$1 = setToString;\n function arrayEach(array, iteratee) {\n var index = -1, length = array == null ? 0 : array.length;\n while (++index < length) {\n if (iteratee(array[index], index, array) === false) {\n break;\n }\n }\n return array;\n }\n function baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length, index = fromIndex + (fromRight ? 1 : -1);\n while (fromRight ? index-- : ++index < length) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n }\n function baseIsNaN(value) {\n return value !== value;\n }\n function strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1, length = array.length;\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n }\n function baseIndexOf(array, value, fromIndex) {\n return value === value ? strictIndexOf(array, value, fromIndex) : baseFindIndex(array, baseIsNaN, fromIndex);\n }\n function arrayIncludes(array, value) {\n var length = array == null ? 0 : array.length;\n return !!length && baseIndexOf(array, value, 0) > -1;\n }\n var MAX_SAFE_INTEGER$1 = 9007199254740991;\n var reIsUint = /^(?:0|[1-9]\\d*)$/;\n function isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER$1 : length;\n return !!length && (type == \"number\" || type != \"symbol\" && reIsUint.test(value)) && value > -1 && value % 1 == 0 && value < length;\n }\n function baseAssignValue(object, key, value) {\n if (key == \"__proto__\" && defineProperty$1) {\n defineProperty$1(object, key, {\n configurable: true,\n enumerable: true,\n value,\n writable: true\n });\n } else {\n object[key] = value;\n }\n }\n function eq(value, other) {\n return value === other || value !== value && other !== other;\n }\n var objectProto$g = Object.prototype;\n var hasOwnProperty$e = objectProto$g.hasOwnProperty;\n function assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty$e.call(object, key) && eq(objValue, value)) || value === void 0 && !(key in object)) {\n baseAssignValue(object, key, value);\n }\n }\n function copyObject(source, props, object, customizer) {\n var isNew = !object;\n object || (object = {});\n var index = -1, length = props.length;\n while (++index < length) {\n var key = props[index];\n var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0;\n if (newValue === void 0) {\n newValue = source[key];\n }\n if (isNew) {\n baseAssignValue(object, key, newValue);\n } else {\n assignValue(object, key, newValue);\n }\n }\n return object;\n }\n var nativeMax$3 = Math.max;\n function overRest(func, start, transform) {\n start = nativeMax$3(start === void 0 ? func.length - 1 : start, 0);\n return function() {\n var args = arguments, index = -1, length = nativeMax$3(args.length - start, 0), array = Array(length);\n while (++index < length) {\n array[index] = args[start + index];\n }\n index = -1;\n var otherArgs = Array(start + 1);\n while (++index < start) {\n otherArgs[index] = args[index];\n }\n otherArgs[start] = transform(array);\n return apply(func, this, otherArgs);\n };\n }\n function baseRest(func, start) {\n return setToString$1(overRest(func, start, identity), func + \"\");\n }\n var MAX_SAFE_INTEGER = 9007199254740991;\n function isLength(value) {\n return typeof value == \"number\" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n }\n function isArrayLike(value) {\n return value != null && isLength(value.length) && !isFunction(value);\n }\n function isIterateeCall(value, index, object) {\n if (!isObject(object)) {\n return false;\n }\n var type = typeof index;\n if (type == \"number\" ? isArrayLike(object) && isIndex(index, object.length) : type == \"string\" && index in object) {\n return eq(object[index], value);\n }\n return false;\n }\n function createAssigner(assigner) {\n return baseRest(function(object, sources) {\n var index = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0;\n customizer = assigner.length > 3 && typeof customizer == \"function\" ? (length--, customizer) : void 0;\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n customizer = length < 3 ? void 0 : customizer;\n length = 1;\n }\n object = Object(object);\n while (++index < length) {\n var source = sources[index];\n if (source) {\n assigner(object, source, index, customizer);\n }\n }\n return object;\n });\n }\n var objectProto$f = Object.prototype;\n function isPrototype(value) {\n var Ctor = value && value.constructor, proto = typeof Ctor == \"function\" && Ctor.prototype || objectProto$f;\n return value === proto;\n }\n function baseTimes(n, iteratee) {\n var index = -1, result = Array(n);\n while (++index < n) {\n result[index] = iteratee(index);\n }\n return result;\n }\n var argsTag$3 = \"[object Arguments]\";\n function baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag$3;\n }\n var objectProto$e = Object.prototype;\n var hasOwnProperty$d = objectProto$e.hasOwnProperty;\n var propertyIsEnumerable$1 = objectProto$e.propertyIsEnumerable;\n var isArguments = baseIsArguments(\n function() {\n return arguments;\n }()\n ) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty$d.call(value, \"callee\") && !propertyIsEnumerable$1.call(value, \"callee\");\n };\n const isArguments$1 = isArguments;\n function stubFalse() {\n return false;\n }\n var freeExports$2 = typeof exports == \"object\" && exports && !exports.nodeType && exports;\n var freeModule$2 = freeExports$2 && typeof module == \"object\" && module && !module.nodeType && module;\n var moduleExports$2 = freeModule$2 && freeModule$2.exports === freeExports$2;\n var Buffer$1 = moduleExports$2 ? root$1.Buffer : void 0;\n var nativeIsBuffer = Buffer$1 ? Buffer$1.isBuffer : void 0;\n var isBuffer = nativeIsBuffer || stubFalse;\n const isBuffer$1 = isBuffer;\n var argsTag$2 = \"[object Arguments]\", arrayTag$2 = \"[object Array]\", boolTag$3 = \"[object Boolean]\", dateTag$3 = \"[object Date]\", errorTag$2 = \"[object Error]\", funcTag$1 = \"[object Function]\", mapTag$6 = \"[object Map]\", numberTag$3 = \"[object Number]\", objectTag$3 = \"[object Object]\", regexpTag$4 = \"[object RegExp]\", setTag$6 = \"[object Set]\", stringTag$4 = \"[object String]\", weakMapTag$2 = \"[object WeakMap]\";\n var arrayBufferTag$3 = \"[object ArrayBuffer]\", dataViewTag$4 = \"[object DataView]\", float32Tag$2 = \"[object Float32Array]\", float64Tag$2 = \"[object Float64Array]\", int8Tag$2 = \"[object Int8Array]\", int16Tag$2 = \"[object Int16Array]\", int32Tag$2 = \"[object Int32Array]\", uint8Tag$2 = \"[object Uint8Array]\", uint8ClampedTag$2 = \"[object Uint8ClampedArray]\", uint16Tag$2 = \"[object Uint16Array]\", uint32Tag$2 = \"[object Uint32Array]\";\n var typedArrayTags = {};\n typedArrayTags[float32Tag$2] = typedArrayTags[float64Tag$2] = typedArrayTags[int8Tag$2] = typedArrayTags[int16Tag$2] = typedArrayTags[int32Tag$2] = typedArrayTags[uint8Tag$2] = typedArrayTags[uint8ClampedTag$2] = typedArrayTags[uint16Tag$2] = typedArrayTags[uint32Tag$2] = true;\n typedArrayTags[argsTag$2] = typedArrayTags[arrayTag$2] = typedArrayTags[arrayBufferTag$3] = typedArrayTags[boolTag$3] = typedArrayTags[dataViewTag$4] = typedArrayTags[dateTag$3] = typedArrayTags[errorTag$2] = typedArrayTags[funcTag$1] = typedArrayTags[mapTag$6] = typedArrayTags[numberTag$3] = typedArrayTags[objectTag$3] = typedArrayTags[regexpTag$4] = typedArrayTags[setTag$6] = typedArrayTags[stringTag$4] = typedArrayTags[weakMapTag$2] = false;\n function baseIsTypedArray(value) {\n return isObjectLike(value) && isLength(value.length) && !!typedArrayTags[baseGetTag(value)];\n }\n function baseUnary(func) {\n return function(value) {\n return func(value);\n };\n }\n var freeExports$1 = typeof exports == \"object\" && exports && !exports.nodeType && exports;\n var freeModule$1 = freeExports$1 && typeof module == \"object\" && module && !module.nodeType && module;\n var moduleExports$1 = freeModule$1 && freeModule$1.exports === freeExports$1;\n var freeProcess = moduleExports$1 && freeGlobal$1.process;\n var nodeUtil = function() {\n try {\n var types = freeModule$1 && freeModule$1.require && freeModule$1.require(\"util\").types;\n if (types) {\n return types;\n }\n return freeProcess && freeProcess.binding && freeProcess.binding(\"util\");\n } catch (e) {\n }\n }();\n const nodeUtil$1 = nodeUtil;\n var nodeIsTypedArray = nodeUtil$1 && nodeUtil$1.isTypedArray;\n var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;\n const isTypedArray$1 = isTypedArray;\n var objectProto$d = Object.prototype;\n var hasOwnProperty$c = objectProto$d.hasOwnProperty;\n function arrayLikeKeys(value, inherited) {\n var isArr = isArray$1(value), isArg = !isArr && isArguments$1(value), isBuff = !isArr && !isArg && isBuffer$1(value), isType = !isArr && !isArg && !isBuff && isTypedArray$1(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length;\n for (var key in value) {\n if ((inherited || hasOwnProperty$c.call(value, key)) && !(skipIndexes && // Safari 9 has enumerable `arguments.length` in strict mode.\n (key == \"length\" || // Node.js 0.10 has enumerable non-index properties on buffers.\n isBuff && (key == \"offset\" || key == \"parent\") || // PhantomJS 2 has enumerable non-index properties on typed arrays.\n isType && (key == \"buffer\" || key == \"byteLength\" || key == \"byteOffset\") || // Skip index properties.\n isIndex(key, length)))) {\n result.push(key);\n }\n }\n return result;\n }\n function overArg(func, transform) {\n return function(arg) {\n return func(transform(arg));\n };\n }\n var nativeKeys = overArg(Object.keys, Object);\n const nativeKeys$1 = nativeKeys;\n var objectProto$c = Object.prototype;\n var hasOwnProperty$b = objectProto$c.hasOwnProperty;\n function baseKeys(object) {\n if (!isPrototype(object)) {\n return nativeKeys$1(object);\n }\n var result = [];\n for (var key in Object(object)) {\n if (hasOwnProperty$b.call(object, key) && key != \"constructor\") {\n result.push(key);\n }\n }\n return result;\n }\n function keys(object) {\n return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);\n }\n var objectProto$b = Object.prototype;\n var hasOwnProperty$a = objectProto$b.hasOwnProperty;\n var assign = createAssigner(function(object, source) {\n if (isPrototype(source) || isArrayLike(source)) {\n copyObject(source, keys(source), object);\n return;\n }\n for (var key in source) {\n if (hasOwnProperty$a.call(source, key)) {\n assignValue(object, key, source[key]);\n }\n }\n });\n const assign$1 = assign;\n function nativeKeysIn(object) {\n var result = [];\n if (object != null) {\n for (var key in Object(object)) {\n result.push(key);\n }\n }\n return result;\n }\n var objectProto$a = Object.prototype;\n var hasOwnProperty$9 = objectProto$a.hasOwnProperty;\n function baseKeysIn(object) {\n if (!isObject(object)) {\n return nativeKeysIn(object);\n }\n var isProto = isPrototype(object), result = [];\n for (var key in object) {\n if (!(key == \"constructor\" && (isProto || !hasOwnProperty$9.call(object, key)))) {\n result.push(key);\n }\n }\n return result;\n }\n function keysIn(object) {\n return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object);\n }\n var reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/, reIsPlainProp = /^\\w*$/;\n function isKey(value, object) {\n if (isArray$1(value)) {\n return false;\n }\n var type = typeof value;\n if (type == \"number\" || type == \"symbol\" || type == \"boolean\" || value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) || object != null && value in Object(object);\n }\n var nativeCreate = getNative(Object, \"create\");\n const nativeCreate$1 = nativeCreate;\n function hashClear() {\n this.__data__ = nativeCreate$1 ? nativeCreate$1(null) : {};\n this.size = 0;\n }\n function hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n }\n var HASH_UNDEFINED$2 = \"__lodash_hash_undefined__\";\n var objectProto$9 = Object.prototype;\n var hasOwnProperty$8 = objectProto$9.hasOwnProperty;\n function hashGet(key) {\n var data = this.__data__;\n if (nativeCreate$1) {\n var result = data[key];\n return result === HASH_UNDEFINED$2 ? void 0 : result;\n }\n return hasOwnProperty$8.call(data, key) ? data[key] : void 0;\n }\n var objectProto$8 = Object.prototype;\n var hasOwnProperty$7 = objectProto$8.hasOwnProperty;\n function hashHas(key) {\n var data = this.__data__;\n return nativeCreate$1 ? data[key] !== void 0 : hasOwnProperty$7.call(data, key);\n }\n var HASH_UNDEFINED$1 = \"__lodash_hash_undefined__\";\n function hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = nativeCreate$1 && value === void 0 ? HASH_UNDEFINED$1 : value;\n return this;\n }\n function Hash(entries) {\n var index = -1, length = entries == null ? 0 : entries.length;\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n Hash.prototype.clear = hashClear;\n Hash.prototype[\"delete\"] = hashDelete;\n Hash.prototype.get = hashGet;\n Hash.prototype.has = hashHas;\n Hash.prototype.set = hashSet;\n function listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n }\n function assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n }\n var arrayProto = Array.prototype;\n var splice = arrayProto.splice;\n function listCacheDelete(key) {\n var data = this.__data__, index = assocIndexOf(data, key);\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n }\n function listCacheGet(key) {\n var data = this.__data__, index = assocIndexOf(data, key);\n return index < 0 ? void 0 : data[index][1];\n }\n function listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n }\n function listCacheSet(key, value) {\n var data = this.__data__, index = assocIndexOf(data, key);\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n }\n function ListCache(entries) {\n var index = -1, length = entries == null ? 0 : entries.length;\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n ListCache.prototype.clear = listCacheClear;\n ListCache.prototype[\"delete\"] = listCacheDelete;\n ListCache.prototype.get = listCacheGet;\n ListCache.prototype.has = listCacheHas;\n ListCache.prototype.set = listCacheSet;\n var Map$1 = getNative(root$1, \"Map\");\n const Map$2 = Map$1;\n function mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n hash: new Hash(),\n map: new (Map$2 || ListCache)(),\n string: new Hash()\n };\n }\n function isKeyable(value) {\n var type = typeof value;\n return type == \"string\" || type == \"number\" || type == \"symbol\" || type == \"boolean\" ? value !== \"__proto__\" : value === null;\n }\n function getMapData(map2, key) {\n var data = map2.__data__;\n return isKeyable(key) ? data[typeof key == \"string\" ? \"string\" : \"hash\"] : data.map;\n }\n function mapCacheDelete(key) {\n var result = getMapData(this, key)[\"delete\"](key);\n this.size -= result ? 1 : 0;\n return result;\n }\n function mapCacheGet(key) {\n return getMapData(this, key).get(key);\n }\n function mapCacheHas(key) {\n return getMapData(this, key).has(key);\n }\n function mapCacheSet(key, value) {\n var data = getMapData(this, key), size = data.size;\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n }\n function MapCache(entries) {\n var index = -1, length = entries == null ? 0 : entries.length;\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n }\n MapCache.prototype.clear = mapCacheClear;\n MapCache.prototype[\"delete\"] = mapCacheDelete;\n MapCache.prototype.get = mapCacheGet;\n MapCache.prototype.has = mapCacheHas;\n MapCache.prototype.set = mapCacheSet;\n var FUNC_ERROR_TEXT$1 = \"Expected a function\";\n function memoize(func, resolver) {\n if (typeof func != \"function\" || resolver != null && typeof resolver != \"function\") {\n throw new TypeError(FUNC_ERROR_TEXT$1);\n }\n var memoized = function() {\n var args = arguments, key = resolver ? resolver.apply(this, args) : args[0], cache = memoized.cache;\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache)();\n return memoized;\n }\n memoize.Cache = MapCache;\n var MAX_MEMOIZE_SIZE = 500;\n function memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n var cache = result.cache;\n return result;\n }\n var rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n var reEscapeChar = /\\\\(\\\\)?/g;\n var stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46) {\n result.push(\"\");\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, \"$1\") : number || match);\n });\n return result;\n });\n const stringToPath$1 = stringToPath;\n function toString(value) {\n return value == null ? \"\" : baseToString(value);\n }\n function castPath(value, object) {\n if (isArray$1(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath$1(toString(value));\n }\n var INFINITY$1 = 1 / 0;\n function toKey(value) {\n if (typeof value == \"string\" || isSymbol(value)) {\n return value;\n }\n var result = value + \"\";\n return result == \"0\" && 1 / value == -INFINITY$1 ? \"-0\" : result;\n }\n function baseGet(object, path) {\n path = castPath(path, object);\n var index = 0, length = path.length;\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return index && index == length ? object : void 0;\n }\n function get(object, path, defaultValue) {\n var result = object == null ? void 0 : baseGet(object, path);\n return result === void 0 ? defaultValue : result;\n }\n function arrayPush(array, values2) {\n var index = -1, length = values2.length, offset = array.length;\n while (++index < length) {\n array[offset + index] = values2[index];\n }\n return array;\n }\n var spreadableSymbol = Symbol$2 ? Symbol$2.isConcatSpreadable : void 0;\n function isFlattenable(value) {\n return isArray$1(value) || isArguments$1(value) || !!(spreadableSymbol && value && value[spreadableSymbol]);\n }\n function baseFlatten(array, depth, predicate, isStrict, result) {\n var index = -1, length = array.length;\n predicate || (predicate = isFlattenable);\n result || (result = []);\n while (++index < length) {\n var value = array[index];\n if (depth > 0 && predicate(value)) {\n if (depth > 1) {\n baseFlatten(value, depth - 1, predicate, isStrict, result);\n } else {\n arrayPush(result, value);\n }\n } else if (!isStrict) {\n result[result.length] = value;\n }\n }\n return result;\n }\n function flatten(array) {\n var length = array == null ? 0 : array.length;\n return length ? baseFlatten(array, 1) : [];\n }\n var getPrototype = overArg(Object.getPrototypeOf, Object);\n const getPrototype$1 = getPrototype;\n function baseSlice(array, start, end) {\n var index = -1, length = array.length;\n if (start < 0) {\n start = -start > length ? 0 : length + start;\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : end - start >>> 0;\n start >>>= 0;\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n }\n function arrayReduce(array, iteratee, accumulator, initAccum) {\n var index = -1, length = array == null ? 0 : array.length;\n if (initAccum && length) {\n accumulator = array[++index];\n }\n while (++index < length) {\n accumulator = iteratee(accumulator, array[index], index, array);\n }\n return accumulator;\n }\n function stackClear() {\n this.__data__ = new ListCache();\n this.size = 0;\n }\n function stackDelete(key) {\n var data = this.__data__, result = data[\"delete\"](key);\n this.size = data.size;\n return result;\n }\n function stackGet(key) {\n return this.__data__.get(key);\n }\n function stackHas(key) {\n return this.__data__.has(key);\n }\n var LARGE_ARRAY_SIZE$2 = 200;\n function stackSet(key, value) {\n var data = this.__data__;\n if (data instanceof ListCache) {\n var pairs = data.__data__;\n if (!Map$2 || pairs.length < LARGE_ARRAY_SIZE$2 - 1) {\n pairs.push([key, value]);\n this.size = ++data.size;\n return this;\n }\n data = this.__data__ = new MapCache(pairs);\n }\n data.set(key, value);\n this.size = data.size;\n return this;\n }\n function Stack(entries) {\n var data = this.__data__ = new ListCache(entries);\n this.size = data.size;\n }\n Stack.prototype.clear = stackClear;\n Stack.prototype[\"delete\"] = stackDelete;\n Stack.prototype.get = stackGet;\n Stack.prototype.has = stackHas;\n Stack.prototype.set = stackSet;\n function baseAssign(object, source) {\n return object && copyObject(source, keys(source), object);\n }\n function baseAssignIn(object, source) {\n return object && copyObject(source, keysIn(source), object);\n }\n var freeExports = typeof exports == \"object\" && exports && !exports.nodeType && exports;\n var freeModule = freeExports && typeof module == \"object\" && module && !module.nodeType && module;\n var moduleExports = freeModule && freeModule.exports === freeExports;\n var Buffer = moduleExports ? root$1.Buffer : void 0, allocUnsafe = Buffer ? Buffer.allocUnsafe : void 0;\n function cloneBuffer(buffer, isDeep) {\n if (isDeep) {\n return buffer.slice();\n }\n var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);\n buffer.copy(result);\n return result;\n }\n function arrayFilter(array, predicate) {\n var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = [];\n while (++index < length) {\n var value = array[index];\n if (predicate(value, index, array)) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n function stubArray() {\n return [];\n }\n var objectProto$7 = Object.prototype;\n var propertyIsEnumerable = objectProto$7.propertyIsEnumerable;\n var nativeGetSymbols$1 = Object.getOwnPropertySymbols;\n var getSymbols = !nativeGetSymbols$1 ? stubArray : function(object) {\n if (object == null) {\n return [];\n }\n object = Object(object);\n return arrayFilter(nativeGetSymbols$1(object), function(symbol) {\n return propertyIsEnumerable.call(object, symbol);\n });\n };\n const getSymbols$1 = getSymbols;\n function copySymbols(source, object) {\n return copyObject(source, getSymbols$1(source), object);\n }\n var nativeGetSymbols = Object.getOwnPropertySymbols;\n var getSymbolsIn = !nativeGetSymbols ? stubArray : function(object) {\n var result = [];\n while (object) {\n arrayPush(result, getSymbols$1(object));\n object = getPrototype$1(object);\n }\n return result;\n };\n const getSymbolsIn$1 = getSymbolsIn;\n function copySymbolsIn(source, object) {\n return copyObject(source, getSymbolsIn$1(source), object);\n }\n function baseGetAllKeys(object, keysFunc, symbolsFunc) {\n var result = keysFunc(object);\n return isArray$1(object) ? result : arrayPush(result, symbolsFunc(object));\n }\n function getAllKeys(object) {\n return baseGetAllKeys(object, keys, getSymbols$1);\n }\n function getAllKeysIn(object) {\n return baseGetAllKeys(object, keysIn, getSymbolsIn$1);\n }\n var DataView = getNative(root$1, \"DataView\");\n const DataView$1 = DataView;\n var Promise$1 = getNative(root$1, \"Promise\");\n const Promise$2 = Promise$1;\n var Set = getNative(root$1, \"Set\");\n const Set$1 = Set;\n var mapTag$5 = \"[object Map]\", objectTag$2 = \"[object Object]\", promiseTag = \"[object Promise]\", setTag$5 = \"[object Set]\", weakMapTag$1 = \"[object WeakMap]\";\n var dataViewTag$3 = \"[object DataView]\";\n var dataViewCtorString = toSource(DataView$1), mapCtorString = toSource(Map$2), promiseCtorString = toSource(Promise$2), setCtorString = toSource(Set$1), weakMapCtorString = toSource(WeakMap$1);\n var getTag = baseGetTag;\n if (DataView$1 && getTag(new DataView$1(new ArrayBuffer(1))) != dataViewTag$3 || Map$2 && getTag(new Map$2()) != mapTag$5 || Promise$2 && getTag(Promise$2.resolve()) != promiseTag || Set$1 && getTag(new Set$1()) != setTag$5 || WeakMap$1 && getTag(new WeakMap$1()) != weakMapTag$1) {\n getTag = function(value) {\n var result = baseGetTag(value), Ctor = result == objectTag$2 ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : \"\";\n if (ctorString) {\n switch (ctorString) {\n case dataViewCtorString:\n return dataViewTag$3;\n case mapCtorString:\n return mapTag$5;\n case promiseCtorString:\n return promiseTag;\n case setCtorString:\n return setTag$5;\n case weakMapCtorString:\n return weakMapTag$1;\n }\n }\n return result;\n };\n }\n const getTag$1 = getTag;\n var objectProto$6 = Object.prototype;\n var hasOwnProperty$6 = objectProto$6.hasOwnProperty;\n function initCloneArray(array) {\n var length = array.length, result = new array.constructor(length);\n if (length && typeof array[0] == \"string\" && hasOwnProperty$6.call(array, \"index\")) {\n result.index = array.index;\n result.input = array.input;\n }\n return result;\n }\n var Uint8Array = root$1.Uint8Array;\n const Uint8Array$1 = Uint8Array;\n function cloneArrayBuffer(arrayBuffer) {\n var result = new arrayBuffer.constructor(arrayBuffer.byteLength);\n new Uint8Array$1(result).set(new Uint8Array$1(arrayBuffer));\n return result;\n }\n function cloneDataView(dataView, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(dataView.buffer) : dataView.buffer;\n return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);\n }\n var reFlags = /\\w*$/;\n function cloneRegExp(regexp) {\n var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));\n result.lastIndex = regexp.lastIndex;\n return result;\n }\n var symbolProto$1 = Symbol$2 ? Symbol$2.prototype : void 0, symbolValueOf$1 = symbolProto$1 ? symbolProto$1.valueOf : void 0;\n function cloneSymbol(symbol) {\n return symbolValueOf$1 ? Object(symbolValueOf$1.call(symbol)) : {};\n }\n function cloneTypedArray(typedArray, isDeep) {\n var buffer = isDeep ? cloneArrayBuffer(typedArray.buffer) : typedArray.buffer;\n return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);\n }\n var boolTag$2 = \"[object Boolean]\", dateTag$2 = \"[object Date]\", mapTag$4 = \"[object Map]\", numberTag$2 = \"[object Number]\", regexpTag$3 = \"[object RegExp]\", setTag$4 = \"[object Set]\", stringTag$3 = \"[object String]\", symbolTag$2 = \"[object Symbol]\";\n var arrayBufferTag$2 = \"[object ArrayBuffer]\", dataViewTag$2 = \"[object DataView]\", float32Tag$1 = \"[object Float32Array]\", float64Tag$1 = \"[object Float64Array]\", int8Tag$1 = \"[object Int8Array]\", int16Tag$1 = \"[object Int16Array]\", int32Tag$1 = \"[object Int32Array]\", uint8Tag$1 = \"[object Uint8Array]\", uint8ClampedTag$1 = \"[object Uint8ClampedArray]\", uint16Tag$1 = \"[object Uint16Array]\", uint32Tag$1 = \"[object Uint32Array]\";\n function initCloneByTag(object, tag, isDeep) {\n var Ctor = object.constructor;\n switch (tag) {\n case arrayBufferTag$2:\n return cloneArrayBuffer(object);\n case boolTag$2:\n case dateTag$2:\n return new Ctor(+object);\n case dataViewTag$2:\n return cloneDataView(object, isDeep);\n case float32Tag$1:\n case float64Tag$1:\n case int8Tag$1:\n case int16Tag$1:\n case int32Tag$1:\n case uint8Tag$1:\n case uint8ClampedTag$1:\n case uint16Tag$1:\n case uint32Tag$1:\n return cloneTypedArray(object, isDeep);\n case mapTag$4:\n return new Ctor();\n case numberTag$2:\n case stringTag$3:\n return new Ctor(object);\n case regexpTag$3:\n return cloneRegExp(object);\n case setTag$4:\n return new Ctor();\n case symbolTag$2:\n return cloneSymbol(object);\n }\n }\n function initCloneObject(object) {\n return typeof object.constructor == \"function\" && !isPrototype(object) ? baseCreate$1(getPrototype$1(object)) : {};\n }\n var mapTag$3 = \"[object Map]\";\n function baseIsMap(value) {\n return isObjectLike(value) && getTag$1(value) == mapTag$3;\n }\n var nodeIsMap = nodeUtil$1 && nodeUtil$1.isMap;\n var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap;\n const isMap$1 = isMap;\n var setTag$3 = \"[object Set]\";\n function baseIsSet(value) {\n return isObjectLike(value) && getTag$1(value) == setTag$3;\n }\n var nodeIsSet = nodeUtil$1 && nodeUtil$1.isSet;\n var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;\n const isSet$1 = isSet;\n var CLONE_DEEP_FLAG = 1, CLONE_FLAT_FLAG = 2, CLONE_SYMBOLS_FLAG$1 = 4;\n var argsTag$1 = \"[object Arguments]\", arrayTag$1 = \"[object Array]\", boolTag$1 = \"[object Boolean]\", dateTag$1 = \"[object Date]\", errorTag$1 = \"[object Error]\", funcTag = \"[object Function]\", genTag = \"[object GeneratorFunction]\", mapTag$2 = \"[object Map]\", numberTag$1 = \"[object Number]\", objectTag$1 = \"[object Object]\", regexpTag$2 = \"[object RegExp]\", setTag$2 = \"[object Set]\", stringTag$2 = \"[object String]\", symbolTag$1 = \"[object Symbol]\", weakMapTag = \"[object WeakMap]\";\n var arrayBufferTag$1 = \"[object ArrayBuffer]\", dataViewTag$1 = \"[object DataView]\", float32Tag = \"[object Float32Array]\", float64Tag = \"[object Float64Array]\", int8Tag = \"[object Int8Array]\", int16Tag = \"[object Int16Array]\", int32Tag = \"[object Int32Array]\", uint8Tag = \"[object Uint8Array]\", uint8ClampedTag = \"[object Uint8ClampedArray]\", uint16Tag = \"[object Uint16Array]\", uint32Tag = \"[object Uint32Array]\";\n var cloneableTags = {};\n cloneableTags[argsTag$1] = cloneableTags[arrayTag$1] = cloneableTags[arrayBufferTag$1] = cloneableTags[dataViewTag$1] = cloneableTags[boolTag$1] = cloneableTags[dateTag$1] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag$2] = cloneableTags[numberTag$1] = cloneableTags[objectTag$1] = cloneableTags[regexpTag$2] = cloneableTags[setTag$2] = cloneableTags[stringTag$2] = cloneableTags[symbolTag$1] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;\n cloneableTags[errorTag$1] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false;\n function baseClone(value, bitmask, customizer, key, object, stack) {\n var result, isDeep = bitmask & CLONE_DEEP_FLAG, isFlat = bitmask & CLONE_FLAT_FLAG, isFull = bitmask & CLONE_SYMBOLS_FLAG$1;\n if (customizer) {\n result = object ? customizer(value, key, object, stack) : customizer(value);\n }\n if (result !== void 0) {\n return result;\n }\n if (!isObject(value)) {\n return value;\n }\n var isArr = isArray$1(value);\n if (isArr) {\n result = initCloneArray(value);\n if (!isDeep) {\n return copyArray(value, result);\n }\n } else {\n var tag = getTag$1(value), isFunc = tag == funcTag || tag == genTag;\n if (isBuffer$1(value)) {\n return cloneBuffer(value, isDeep);\n }\n if (tag == objectTag$1 || tag == argsTag$1 || isFunc && !object) {\n result = isFlat || isFunc ? {} : initCloneObject(value);\n if (!isDeep) {\n return isFlat ? copySymbolsIn(value, baseAssignIn(result, value)) : copySymbols(value, baseAssign(result, value));\n }\n } else {\n if (!cloneableTags[tag]) {\n return object ? value : {};\n }\n result = initCloneByTag(value, tag, isDeep);\n }\n }\n stack || (stack = new Stack());\n var stacked = stack.get(value);\n if (stacked) {\n return stacked;\n }\n stack.set(value, result);\n if (isSet$1(value)) {\n value.forEach(function(subValue) {\n result.add(baseClone(subValue, bitmask, customizer, subValue, value, stack));\n });\n } else if (isMap$1(value)) {\n value.forEach(function(subValue, key2) {\n result.set(key2, baseClone(subValue, bitmask, customizer, key2, value, stack));\n });\n }\n var keysFunc = isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys;\n var props = isArr ? void 0 : keysFunc(value);\n arrayEach(props || value, function(subValue, key2) {\n if (props) {\n key2 = subValue;\n subValue = value[key2];\n }\n assignValue(result, key2, baseClone(subValue, bitmask, customizer, key2, value, stack));\n });\n return result;\n }\n var CLONE_SYMBOLS_FLAG = 4;\n function clone(value) {\n return baseClone(value, CLONE_SYMBOLS_FLAG);\n }\n function compact(array) {\n var index = -1, length = array == null ? 0 : array.length, resIndex = 0, result = [];\n while (++index < length) {\n var value = array[index];\n if (value) {\n result[resIndex++] = value;\n }\n }\n return result;\n }\n var HASH_UNDEFINED = \"__lodash_hash_undefined__\";\n function setCacheAdd(value) {\n this.__data__.set(value, HASH_UNDEFINED);\n return this;\n }\n function setCacheHas(value) {\n return this.__data__.has(value);\n }\n function SetCache(values2) {\n var index = -1, length = values2 == null ? 0 : values2.length;\n this.__data__ = new MapCache();\n while (++index < length) {\n this.add(values2[index]);\n }\n }\n SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;\n SetCache.prototype.has = setCacheHas;\n function arraySome(array, predicate) {\n var index = -1, length = array == null ? 0 : array.length;\n while (++index < length) {\n if (predicate(array[index], index, array)) {\n return true;\n }\n }\n return false;\n }\n function cacheHas(cache, key) {\n return cache.has(key);\n }\n var COMPARE_PARTIAL_FLAG$5 = 1, COMPARE_UNORDERED_FLAG$3 = 2;\n function equalArrays(array, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG$5, arrLength = array.length, othLength = other.length;\n if (arrLength != othLength && !(isPartial && othLength > arrLength)) {\n return false;\n }\n var arrStacked = stack.get(array);\n var othStacked = stack.get(other);\n if (arrStacked && othStacked) {\n return arrStacked == other && othStacked == array;\n }\n var index = -1, result = true, seen = bitmask & COMPARE_UNORDERED_FLAG$3 ? new SetCache() : void 0;\n stack.set(array, other);\n stack.set(other, array);\n while (++index < arrLength) {\n var arrValue = array[index], othValue = other[index];\n if (customizer) {\n var compared = isPartial ? customizer(othValue, arrValue, index, other, array, stack) : customizer(arrValue, othValue, index, array, other, stack);\n }\n if (compared !== void 0) {\n if (compared) {\n continue;\n }\n result = false;\n break;\n }\n if (seen) {\n if (!arraySome(other, function(othValue2, othIndex) {\n if (!cacheHas(seen, othIndex) && (arrValue === othValue2 || equalFunc(arrValue, othValue2, bitmask, customizer, stack))) {\n return seen.push(othIndex);\n }\n })) {\n result = false;\n break;\n }\n } else if (!(arrValue === othValue || equalFunc(arrValue, othValue, bitmask, customizer, stack))) {\n result = false;\n break;\n }\n }\n stack[\"delete\"](array);\n stack[\"delete\"](other);\n return result;\n }\n function mapToArray(map2) {\n var index = -1, result = Array(map2.size);\n map2.forEach(function(value, key) {\n result[++index] = [key, value];\n });\n return result;\n }\n function setToArray(set) {\n var index = -1, result = Array(set.size);\n set.forEach(function(value) {\n result[++index] = value;\n });\n return result;\n }\n var COMPARE_PARTIAL_FLAG$4 = 1, COMPARE_UNORDERED_FLAG$2 = 2;\n var boolTag = \"[object Boolean]\", dateTag = \"[object Date]\", errorTag = \"[object Error]\", mapTag$1 = \"[object Map]\", numberTag = \"[object Number]\", regexpTag$1 = \"[object RegExp]\", setTag$1 = \"[object Set]\", stringTag$1 = \"[object String]\", symbolTag = \"[object Symbol]\";\n var arrayBufferTag = \"[object ArrayBuffer]\", dataViewTag = \"[object DataView]\";\n var symbolProto = Symbol$2 ? Symbol$2.prototype : void 0, symbolValueOf = symbolProto ? symbolProto.valueOf : void 0;\n function equalByTag(object, other, tag, bitmask, customizer, equalFunc, stack) {\n switch (tag) {\n case dataViewTag:\n if (object.byteLength != other.byteLength || object.byteOffset != other.byteOffset) {\n return false;\n }\n object = object.buffer;\n other = other.buffer;\n case arrayBufferTag:\n if (object.byteLength != other.byteLength || !equalFunc(new Uint8Array$1(object), new Uint8Array$1(other))) {\n return false;\n }\n return true;\n case boolTag:\n case dateTag:\n case numberTag:\n return eq(+object, +other);\n case errorTag:\n return object.name == other.name && object.message == other.message;\n case regexpTag$1:\n case stringTag$1:\n return object == other + \"\";\n case mapTag$1:\n var convert = mapToArray;\n case setTag$1:\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG$4;\n convert || (convert = setToArray);\n if (object.size != other.size && !isPartial) {\n return false;\n }\n var stacked = stack.get(object);\n if (stacked) {\n return stacked == other;\n }\n bitmask |= COMPARE_UNORDERED_FLAG$2;\n stack.set(object, other);\n var result = equalArrays(convert(object), convert(other), bitmask, customizer, equalFunc, stack);\n stack[\"delete\"](object);\n return result;\n case symbolTag:\n if (symbolValueOf) {\n return symbolValueOf.call(object) == symbolValueOf.call(other);\n }\n }\n return false;\n }\n var COMPARE_PARTIAL_FLAG$3 = 1;\n var objectProto$5 = Object.prototype;\n var hasOwnProperty$5 = objectProto$5.hasOwnProperty;\n function equalObjects(object, other, bitmask, customizer, equalFunc, stack) {\n var isPartial = bitmask & COMPARE_PARTIAL_FLAG$3, objProps = getAllKeys(object), objLength = objProps.length, othProps = getAllKeys(other), othLength = othProps.length;\n if (objLength != othLength && !isPartial) {\n return false;\n }\n var index = objLength;\n while (index--) {\n var key = objProps[index];\n if (!(isPartial ? key in other : hasOwnProperty$5.call(other, key))) {\n return false;\n }\n }\n var objStacked = stack.get(object);\n var othStacked = stack.get(other);\n if (objStacked && othStacked) {\n return objStacked == other && othStacked == object;\n }\n var result = true;\n stack.set(object, other);\n stack.set(other, object);\n var skipCtor = isPartial;\n while (++index < objLength) {\n key = objProps[index];\n var objValue = object[key], othValue = other[key];\n if (customizer) {\n var compared = isPartial ? customizer(othValue, objValue, key, other, object, stack) : customizer(objValue, othValue, key, object, other, stack);\n }\n if (!(compared === void 0 ? objValue === othValue || equalFunc(objValue, othValue, bitmask, customizer, stack) : compared)) {\n result = false;\n break;\n }\n skipCtor || (skipCtor = key == \"constructor\");\n }\n if (result && !skipCtor) {\n var objCtor = object.constructor, othCtor = other.constructor;\n if (objCtor != othCtor && \"constructor\" in object && \"constructor\" in other && !(typeof objCtor == \"function\" && objCtor instanceof objCtor && typeof othCtor == \"function\" && othCtor instanceof othCtor)) {\n result = false;\n }\n }\n stack[\"delete\"](object);\n stack[\"delete\"](other);\n return result;\n }\n var COMPARE_PARTIAL_FLAG$2 = 1;\n var argsTag = \"[object Arguments]\", arrayTag = \"[object Array]\", objectTag = \"[object Object]\";\n var objectProto$4 = Object.prototype;\n var hasOwnProperty$4 = objectProto$4.hasOwnProperty;\n function baseIsEqualDeep(object, other, bitmask, customizer, equalFunc, stack) {\n var objIsArr = isArray$1(object), othIsArr = isArray$1(other), objTag = objIsArr ? arrayTag : getTag$1(object), othTag = othIsArr ? arrayTag : getTag$1(other);\n objTag = objTag == argsTag ? objectTag : objTag;\n othTag = othTag == argsTag ? objectTag : othTag;\n var objIsObj = objTag == objectTag, othIsObj = othTag == objectTag, isSameTag = objTag == othTag;\n if (isSameTag && isBuffer$1(object)) {\n if (!isBuffer$1(other)) {\n return false;\n }\n objIsArr = true;\n objIsObj = false;\n }\n if (isSameTag && !objIsObj) {\n stack || (stack = new Stack());\n return objIsArr || isTypedArray$1(object) ? equalArrays(object, other, bitmask, customizer, equalFunc, stack) : equalByTag(object, other, objTag, bitmask, customizer, equalFunc, stack);\n }\n if (!(bitmask & COMPARE_PARTIAL_FLAG$2)) {\n var objIsWrapped = objIsObj && hasOwnProperty$4.call(object, \"__wrapped__\"), othIsWrapped = othIsObj && hasOwnProperty$4.call(other, \"__wrapped__\");\n if (objIsWrapped || othIsWrapped) {\n var objUnwrapped = objIsWrapped ? object.value() : object, othUnwrapped = othIsWrapped ? other.value() : other;\n stack || (stack = new Stack());\n return equalFunc(objUnwrapped, othUnwrapped, bitmask, customizer, stack);\n }\n }\n if (!isSameTag) {\n return false;\n }\n stack || (stack = new Stack());\n return equalObjects(object, other, bitmask, customizer, equalFunc, stack);\n }\n function baseIsEqual(value, other, bitmask, customizer, stack) {\n if (value === other) {\n return true;\n }\n if (value == null || other == null || !isObjectLike(value) && !isObjectLike(other)) {\n return value !== value && other !== other;\n }\n return baseIsEqualDeep(value, other, bitmask, customizer, baseIsEqual, stack);\n }\n var COMPARE_PARTIAL_FLAG$1 = 1, COMPARE_UNORDERED_FLAG$1 = 2;\n function baseIsMatch(object, source, matchData, customizer) {\n var index = matchData.length, length = index, noCustomizer = !customizer;\n if (object == null) {\n return !length;\n }\n object = Object(object);\n while (index--) {\n var data = matchData[index];\n if (noCustomizer && data[2] ? data[1] !== object[data[0]] : !(data[0] in object)) {\n return false;\n }\n }\n while (++index < length) {\n data = matchData[index];\n var key = data[0], objValue = object[key], srcValue = data[1];\n if (noCustomizer && data[2]) {\n if (objValue === void 0 && !(key in object)) {\n return false;\n }\n } else {\n var stack = new Stack();\n if (customizer) {\n var result = customizer(objValue, srcValue, key, object, source, stack);\n }\n if (!(result === void 0 ? baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG$1 | COMPARE_UNORDERED_FLAG$1, customizer, stack) : result)) {\n return false;\n }\n }\n }\n return true;\n }\n function isStrictComparable(value) {\n return value === value && !isObject(value);\n }\n function getMatchData(object) {\n var result = keys(object), length = result.length;\n while (length--) {\n var key = result[length], value = object[key];\n result[length] = [key, value, isStrictComparable(value)];\n }\n return result;\n }\n function matchesStrictComparable(key, srcValue) {\n return function(object) {\n if (object == null) {\n return false;\n }\n return object[key] === srcValue && (srcValue !== void 0 || key in Object(object));\n };\n }\n function baseMatches(source) {\n var matchData = getMatchData(source);\n if (matchData.length == 1 && matchData[0][2]) {\n return matchesStrictComparable(matchData[0][0], matchData[0][1]);\n }\n return function(object) {\n return object === source || baseIsMatch(object, source, matchData);\n };\n }\n function baseHasIn(object, key) {\n return object != null && key in Object(object);\n }\n function hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n var index = -1, length = path.length, result = false;\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) && (isArray$1(object) || isArguments$1(object));\n }\n function hasIn(object, path) {\n return object != null && hasPath(object, path, baseHasIn);\n }\n var COMPARE_PARTIAL_FLAG = 1, COMPARE_UNORDERED_FLAG = 2;\n function baseMatchesProperty(path, srcValue) {\n if (isKey(path) && isStrictComparable(srcValue)) {\n return matchesStrictComparable(toKey(path), srcValue);\n }\n return function(object) {\n var objValue = get(object, path);\n return objValue === void 0 && objValue === srcValue ? hasIn(object, path) : baseIsEqual(srcValue, objValue, COMPARE_PARTIAL_FLAG | COMPARE_UNORDERED_FLAG);\n };\n }\n function baseProperty(key) {\n return function(object) {\n return object == null ? void 0 : object[key];\n };\n }\n function basePropertyDeep(path) {\n return function(object) {\n return baseGet(object, path);\n };\n }\n function property(path) {\n return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);\n }\n function baseIteratee(value) {\n if (typeof value == \"function\") {\n return value;\n }\n if (value == null) {\n return identity;\n }\n if (typeof value == \"object\") {\n return isArray$1(value) ? baseMatchesProperty(value[0], value[1]) : baseMatches(value);\n }\n return property(value);\n }\n function arrayAggregator(array, setter, iteratee, accumulator) {\n var index = -1, length = array == null ? 0 : array.length;\n while (++index < length) {\n var value = array[index];\n setter(accumulator, value, iteratee(value), array);\n }\n return accumulator;\n }\n function createBaseFor(fromRight) {\n return function(object, iteratee, keysFunc) {\n var index = -1, iterable = Object(object), props = keysFunc(object), length = props.length;\n while (length--) {\n var key = props[fromRight ? length : ++index];\n if (iteratee(iterable[key], key, iterable) === false) {\n break;\n }\n }\n return object;\n };\n }\n var baseFor = createBaseFor();\n const baseFor$1 = baseFor;\n function baseForOwn(object, iteratee) {\n return object && baseFor$1(object, iteratee, keys);\n }\n function createBaseEach(eachFunc, fromRight) {\n return function(collection, iteratee) {\n if (collection == null) {\n return collection;\n }\n if (!isArrayLike(collection)) {\n return eachFunc(collection, iteratee);\n }\n var length = collection.length, index = fromRight ? length : -1, iterable = Object(collection);\n while (fromRight ? index-- : ++index < length) {\n if (iteratee(iterable[index], index, iterable) === false) {\n break;\n }\n }\n return collection;\n };\n }\n var baseEach = createBaseEach(baseForOwn);\n const baseEach$1 = baseEach;\n function baseAggregator(collection, setter, iteratee, accumulator) {\n baseEach$1(collection, function(value, key, collection2) {\n setter(accumulator, value, iteratee(value), collection2);\n });\n return accumulator;\n }\n function createAggregator(setter, initializer) {\n return function(collection, iteratee) {\n var func = isArray$1(collection) ? arrayAggregator : baseAggregator, accumulator = initializer ? initializer() : {};\n return func(collection, setter, baseIteratee(iteratee), accumulator);\n };\n }\n var objectProto$3 = Object.prototype;\n var hasOwnProperty$3 = objectProto$3.hasOwnProperty;\n var defaults = baseRest(function(object, sources) {\n object = Object(object);\n var index = -1;\n var length = sources.length;\n var guard = length > 2 ? sources[2] : void 0;\n if (guard && isIterateeCall(sources[0], sources[1], guard)) {\n length = 1;\n }\n while (++index < length) {\n var source = sources[index];\n var props = keysIn(source);\n var propsIndex = -1;\n var propsLength = props.length;\n while (++propsIndex < propsLength) {\n var key = props[propsIndex];\n var value = object[key];\n if (value === void 0 || eq(value, objectProto$3[key]) && !hasOwnProperty$3.call(object, key)) {\n object[key] = source[key];\n }\n }\n }\n return object;\n });\n const defaults$1 = defaults;\n function isArrayLikeObject(value) {\n return isObjectLike(value) && isArrayLike(value);\n }\n function arrayIncludesWith(array, value, comparator) {\n var index = -1, length = array == null ? 0 : array.length;\n while (++index < length) {\n if (comparator(value, array[index])) {\n return true;\n }\n }\n return false;\n }\n var LARGE_ARRAY_SIZE$1 = 200;\n function baseDifference(array, values2, iteratee, comparator) {\n var index = -1, includes2 = arrayIncludes, isCommon = true, length = array.length, result = [], valuesLength = values2.length;\n if (!length) {\n return result;\n }\n if (iteratee) {\n values2 = arrayMap(values2, baseUnary(iteratee));\n }\n if (comparator) {\n includes2 = arrayIncludesWith;\n isCommon = false;\n } else if (values2.length >= LARGE_ARRAY_SIZE$1) {\n includes2 = cacheHas;\n isCommon = false;\n values2 = new SetCache(values2);\n }\n outer:\n while (++index < length) {\n var value = array[index], computed = iteratee == null ? value : iteratee(value);\n value = comparator || value !== 0 ? value : 0;\n if (isCommon && computed === computed) {\n var valuesIndex = valuesLength;\n while (valuesIndex--) {\n if (values2[valuesIndex] === computed) {\n continue outer;\n }\n }\n result.push(value);\n } else if (!includes2(values2, computed, comparator)) {\n result.push(value);\n }\n }\n return result;\n }\n var difference = baseRest(function(array, values2) {\n return isArrayLikeObject(array) ? baseDifference(array, baseFlatten(values2, 1, isArrayLikeObject, true)) : [];\n });\n const difference$1 = difference;\n function last(array) {\n var length = array == null ? 0 : array.length;\n return length ? array[length - 1] : void 0;\n }\n function drop(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = guard || n === void 0 ? 1 : toInteger(n);\n return baseSlice(array, n < 0 ? 0 : n, length);\n }\n function dropRight(array, n, guard) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return [];\n }\n n = guard || n === void 0 ? 1 : toInteger(n);\n n = length - n;\n return baseSlice(array, 0, n < 0 ? 0 : n);\n }\n function castFunction(value) {\n return typeof value == \"function\" ? value : identity;\n }\n function forEach(collection, iteratee) {\n var func = isArray$1(collection) ? arrayEach : baseEach$1;\n return func(collection, castFunction(iteratee));\n }\n function arrayEvery(array, predicate) {\n var index = -1, length = array == null ? 0 : array.length;\n while (++index < length) {\n if (!predicate(array[index], index, array)) {\n return false;\n }\n }\n return true;\n }\n function baseEvery(collection, predicate) {\n var result = true;\n baseEach$1(collection, function(value, index, collection2) {\n result = !!predicate(value, index, collection2);\n return result;\n });\n return result;\n }\n function every(collection, predicate, guard) {\n var func = isArray$1(collection) ? arrayEvery : baseEvery;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = void 0;\n }\n return func(collection, baseIteratee(predicate));\n }\n function baseFilter(collection, predicate) {\n var result = [];\n baseEach$1(collection, function(value, index, collection2) {\n if (predicate(value, index, collection2)) {\n result.push(value);\n }\n });\n return result;\n }\n function filter(collection, predicate) {\n var func = isArray$1(collection) ? arrayFilter : baseFilter;\n return func(collection, baseIteratee(predicate));\n }\n function createFind(findIndexFunc) {\n return function(collection, predicate, fromIndex) {\n var iterable = Object(collection);\n if (!isArrayLike(collection)) {\n var iteratee = baseIteratee(predicate);\n collection = keys(collection);\n predicate = function(key) {\n return iteratee(iterable[key], key, iterable);\n };\n }\n var index = findIndexFunc(collection, predicate, fromIndex);\n return index > -1 ? iterable[iteratee ? collection[index] : index] : void 0;\n };\n }\n var nativeMax$2 = Math.max;\n function findIndex(array, predicate, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax$2(length + index, 0);\n }\n return baseFindIndex(array, baseIteratee(predicate), index);\n }\n var find = createFind(findIndex);\n const find$1 = find;\n function head(array) {\n return array && array.length ? array[0] : void 0;\n }\n function baseMap(collection, iteratee) {\n var index = -1, result = isArrayLike(collection) ? Array(collection.length) : [];\n baseEach$1(collection, function(value, key, collection2) {\n result[++index] = iteratee(value, key, collection2);\n });\n return result;\n }\n function map(collection, iteratee) {\n var func = isArray$1(collection) ? arrayMap : baseMap;\n return func(collection, baseIteratee(iteratee));\n }\n function flatMap(collection, iteratee) {\n return baseFlatten(map(collection, iteratee), 1);\n }\n var objectProto$2 = Object.prototype;\n var hasOwnProperty$2 = objectProto$2.hasOwnProperty;\n var groupBy = createAggregator(function(result, value, key) {\n if (hasOwnProperty$2.call(result, key)) {\n result[key].push(value);\n } else {\n baseAssignValue(result, key, [value]);\n }\n });\n const groupBy$1 = groupBy;\n var objectProto$1 = Object.prototype;\n var hasOwnProperty$1 = objectProto$1.hasOwnProperty;\n function baseHas(object, key) {\n return object != null && hasOwnProperty$1.call(object, key);\n }\n function has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n }\n var stringTag = \"[object String]\";\n function isString(value) {\n return typeof value == \"string\" || !isArray$1(value) && isObjectLike(value) && baseGetTag(value) == stringTag;\n }\n function baseValues(object, props) {\n return arrayMap(props, function(key) {\n return object[key];\n });\n }\n function values(object) {\n return object == null ? [] : baseValues(object, keys(object));\n }\n var nativeMax$1 = Math.max;\n function includes(collection, value, fromIndex, guard) {\n collection = isArrayLike(collection) ? collection : values(collection);\n fromIndex = fromIndex && !guard ? toInteger(fromIndex) : 0;\n var length = collection.length;\n if (fromIndex < 0) {\n fromIndex = nativeMax$1(length + fromIndex, 0);\n }\n return isString(collection) ? fromIndex <= length && collection.indexOf(value, fromIndex) > -1 : !!length && baseIndexOf(collection, value, fromIndex) > -1;\n }\n var nativeMax = Math.max;\n function indexOf(array, value, fromIndex) {\n var length = array == null ? 0 : array.length;\n if (!length) {\n return -1;\n }\n var index = fromIndex == null ? 0 : toInteger(fromIndex);\n if (index < 0) {\n index = nativeMax(length + index, 0);\n }\n return baseIndexOf(array, value, index);\n }\n var mapTag = \"[object Map]\", setTag = \"[object Set]\";\n var objectProto = Object.prototype;\n var hasOwnProperty = objectProto.hasOwnProperty;\n function isEmpty(value) {\n if (value == null) {\n return true;\n }\n if (isArrayLike(value) && (isArray$1(value) || typeof value == \"string\" || typeof value.splice == \"function\" || isBuffer$1(value) || isTypedArray$1(value) || isArguments$1(value))) {\n return !value.length;\n }\n var tag = getTag$1(value);\n if (tag == mapTag || tag == setTag) {\n return !value.size;\n }\n if (isPrototype(value)) {\n return !baseKeys(value).length;\n }\n for (var key in value) {\n if (hasOwnProperty.call(value, key)) {\n return false;\n }\n }\n return true;\n }\n var regexpTag = \"[object RegExp]\";\n function baseIsRegExp(value) {\n return isObjectLike(value) && baseGetTag(value) == regexpTag;\n }\n var nodeIsRegExp = nodeUtil$1 && nodeUtil$1.isRegExp;\n var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp;\n const isRegExp$1 = isRegExp;\n function isUndefined(value) {\n return value === void 0;\n }\n var FUNC_ERROR_TEXT = \"Expected a function\";\n function negate(predicate) {\n if (typeof predicate != \"function\") {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n return function() {\n var args = arguments;\n switch (args.length) {\n case 0:\n return !predicate.call(this);\n case 1:\n return !predicate.call(this, args[0]);\n case 2:\n return !predicate.call(this, args[0], args[1]);\n case 3:\n return !predicate.call(this, args[0], args[1], args[2]);\n }\n return !predicate.apply(this, args);\n };\n }\n function baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = castPath(path, object);\n var index = -1, length = path.length, lastIndex = length - 1, nested = object;\n while (nested != null && ++index < length) {\n var key = toKey(path[index]), newValue = value;\n if (key === \"__proto__\" || key === \"constructor\" || key === \"prototype\") {\n return object;\n }\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : void 0;\n if (newValue === void 0) {\n newValue = isObject(objValue) ? objValue : isIndex(path[index + 1]) ? [] : {};\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n }\n function basePickBy(object, paths, predicate) {\n var index = -1, length = paths.length, result = {};\n while (++index < length) {\n var path = paths[index], value = baseGet(object, path);\n if (predicate(value, path)) {\n baseSet(result, castPath(path, object), value);\n }\n }\n return result;\n }\n function pickBy(object, predicate) {\n if (object == null) {\n return {};\n }\n var props = arrayMap(getAllKeysIn(object), function(prop) {\n return [prop];\n });\n predicate = baseIteratee(predicate);\n return basePickBy(object, props, function(value, path) {\n return predicate(value, path[0]);\n });\n }\n function baseReduce(collection, iteratee, accumulator, initAccum, eachFunc) {\n eachFunc(collection, function(value, index, collection2) {\n accumulator = initAccum ? (initAccum = false, value) : iteratee(accumulator, value, index, collection2);\n });\n return accumulator;\n }\n function reduce(collection, iteratee, accumulator) {\n var func = isArray$1(collection) ? arrayReduce : baseReduce, initAccum = arguments.length < 3;\n return func(collection, baseIteratee(iteratee), accumulator, initAccum, baseEach$1);\n }\n function reject(collection, predicate) {\n var func = isArray$1(collection) ? arrayFilter : baseFilter;\n return func(collection, negate(baseIteratee(predicate)));\n }\n function baseSome(collection, predicate) {\n var result;\n baseEach$1(collection, function(value, index, collection2) {\n result = predicate(value, index, collection2);\n return !result;\n });\n return !!result;\n }\n function some(collection, predicate, guard) {\n var func = isArray$1(collection) ? arraySome : baseSome;\n if (guard && isIterateeCall(collection, predicate, guard)) {\n predicate = void 0;\n }\n return func(collection, baseIteratee(predicate));\n }\n var INFINITY = 1 / 0;\n var createSet = !(Set$1 && 1 / setToArray(new Set$1([, -0]))[1] == INFINITY) ? noop : function(values2) {\n return new Set$1(values2);\n };\n const createSet$1 = createSet;\n var LARGE_ARRAY_SIZE = 200;\n function baseUniq(array, iteratee, comparator) {\n var index = -1, includes2 = arrayIncludes, length = array.length, isCommon = true, result = [], seen = result;\n if (comparator) {\n isCommon = false;\n includes2 = arrayIncludesWith;\n } else if (length >= LARGE_ARRAY_SIZE) {\n var set = iteratee ? null : createSet$1(array);\n if (set) {\n return setToArray(set);\n }\n isCommon = false;\n includes2 = cacheHas;\n seen = new SetCache();\n } else {\n seen = iteratee ? [] : result;\n }\n outer:\n while (++index < length) {\n var value = array[index], computed = iteratee ? iteratee(value) : value;\n value = comparator || value !== 0 ? value : 0;\n if (isCommon && computed === computed) {\n var seenIndex = seen.length;\n while (seenIndex--) {\n if (seen[seenIndex] === computed) {\n continue outer;\n }\n }\n if (iteratee) {\n seen.push(computed);\n }\n result.push(value);\n } else if (!includes2(seen, computed, comparator)) {\n if (seen !== result) {\n seen.push(computed);\n }\n result.push(value);\n }\n }\n return result;\n }\n function uniq(array) {\n return array && array.length ? baseUniq(array) : [];\n }\n function PRINT_ERROR(msg) {\n if (console && console.error) {\n console.error(`Error: ${msg}`);\n }\n }\n function PRINT_WARNING(msg) {\n if (console && console.warn) {\n console.warn(`Warning: ${msg}`);\n }\n }\n function timer(func) {\n const start = (/* @__PURE__ */ new Date()).getTime();\n const val = func();\n const end = (/* @__PURE__ */ new Date()).getTime();\n const total = end - start;\n return { time: total, value: val };\n }\n function toFastProperties(toBecomeFast) {\n function FakeConstructor() {\n }\n FakeConstructor.prototype = toBecomeFast;\n const fakeInstance = new FakeConstructor();\n function fakeAccess() {\n return typeof fakeInstance.bar;\n }\n fakeAccess();\n fakeAccess();\n return toBecomeFast;\n }\n function tokenLabel$1(tokType) {\n if (hasTokenLabel$1(tokType)) {\n return tokType.LABEL;\n } else {\n return tokType.name;\n }\n }\n function hasTokenLabel$1(obj) {\n return isString(obj.LABEL) && obj.LABEL !== \"\";\n }\n class AbstractProduction {\n get definition() {\n return this._definition;\n }\n set definition(value) {\n this._definition = value;\n }\n constructor(_definition) {\n this._definition = _definition;\n }\n accept(visitor) {\n visitor.visit(this);\n forEach(this.definition, (prod) => {\n prod.accept(visitor);\n });\n }\n }\n class NonTerminal extends AbstractProduction {\n constructor(options) {\n super([]);\n this.idx = 1;\n assign$1(\n this,\n pickBy(options, (v) => v !== void 0)\n );\n }\n set definition(definition) {\n }\n get definition() {\n if (this.referencedRule !== void 0) {\n return this.referencedRule.definition;\n }\n return [];\n }\n accept(visitor) {\n visitor.visit(this);\n }\n }\n class Rule extends AbstractProduction {\n constructor(options) {\n super(options.definition);\n this.orgText = \"\";\n assign$1(\n this,\n pickBy(options, (v) => v !== void 0)\n );\n }\n }\n class Alternative extends AbstractProduction {\n constructor(options) {\n super(options.definition);\n this.ignoreAmbiguities = false;\n assign$1(\n this,\n pickBy(options, (v) => v !== void 0)\n );\n }\n }\n class Option extends AbstractProduction {\n constructor(options) {\n super(options.definition);\n this.idx = 1;\n assign$1(\n this,\n pickBy(options, (v) => v !== void 0)\n );\n }\n }\n class RepetitionMandatory extends AbstractProduction {\n constructor(options) {\n super(options.definition);\n this.idx = 1;\n assign$1(\n this,\n pickBy(options, (v) => v !== void 0)\n );\n }\n }\n class RepetitionMandatoryWithSeparator extends AbstractProduction {\n constructor(options) {\n super(options.definition);\n this.idx = 1;\n assign$1(\n this,\n pickBy(options, (v) => v !== void 0)\n );\n }\n }\n class Repetition extends AbstractProduction {\n constructor(options) {\n super(options.definition);\n this.idx = 1;\n assign$1(\n this,\n pickBy(options, (v) => v !== void 0)\n );\n }\n }\n class RepetitionWithSeparator extends AbstractProduction {\n constructor(options) {\n super(options.definition);\n this.idx = 1;\n assign$1(\n this,\n pickBy(options, (v) => v !== void 0)\n );\n }\n }\n class Alternation extends AbstractProduction {\n get definition() {\n return this._definition;\n }\n set definition(value) {\n this._definition = value;\n }\n constructor(options) {\n super(options.definition);\n this.idx = 1;\n this.ignoreAmbiguities = false;\n this.hasPredicates = false;\n assign$1(\n this,\n pickBy(options, (v) => v !== void 0)\n );\n }\n }\n class Terminal {\n constructor(options) {\n this.idx = 1;\n assign$1(\n this,\n pickBy(options, (v) => v !== void 0)\n );\n }\n accept(visitor) {\n visitor.visit(this);\n }\n }\n function serializeGrammar(topRules) {\n return map(topRules, serializeProduction);\n }\n function serializeProduction(node) {\n function convertDefinition(definition) {\n return map(definition, serializeProduction);\n }\n if (node instanceof NonTerminal) {\n const serializedNonTerminal = {\n type: \"NonTerminal\",\n name: node.nonTerminalName,\n idx: node.idx\n };\n if (isString(node.label)) {\n serializedNonTerminal.label = node.label;\n }\n return serializedNonTerminal;\n } else if (node instanceof Alternative) {\n return {\n type: \"Alternative\",\n definition: convertDefinition(node.definition)\n };\n } else if (node instanceof Option) {\n return {\n type: \"Option\",\n idx: node.idx,\n definition: convertDefinition(node.definition)\n };\n } else if (node instanceof RepetitionMandatory) {\n return {\n type: \"RepetitionMandatory\",\n idx: node.idx,\n definition: convertDefinition(node.definition)\n };\n } else if (node instanceof RepetitionMandatoryWithSeparator) {\n return {\n type: \"RepetitionMandatoryWithSeparator\",\n idx: node.idx,\n separator: serializeProduction(new Terminal({ terminalType: node.separator })),\n definition: convertDefinition(node.definition)\n };\n } else if (node instanceof RepetitionWithSeparator) {\n return {\n type: \"RepetitionWithSeparator\",\n idx: node.idx,\n separator: serializeProduction(new Terminal({ terminalType: node.separator })),\n definition: convertDefinition(node.definition)\n };\n } else if (node instanceof Repetition) {\n return {\n type: \"Repetition\",\n idx: node.idx,\n definition: convertDefinition(node.definition)\n };\n } else if (node instanceof Alternation) {\n return {\n type: \"Alternation\",\n idx: node.idx,\n definition: convertDefinition(node.definition)\n };\n } else if (node instanceof Terminal) {\n const serializedTerminal = {\n type: \"Terminal\",\n name: node.terminalType.name,\n label: tokenLabel$1(node.terminalType),\n idx: node.idx\n };\n if (isString(node.label)) {\n serializedTerminal.terminalLabel = node.label;\n }\n const pattern = node.terminalType.PATTERN;\n if (node.terminalType.PATTERN) {\n serializedTerminal.pattern = isRegExp$1(pattern) ? pattern.source : pattern;\n }\n return serializedTerminal;\n } else if (node instanceof Rule) {\n return {\n type: \"Rule\",\n name: node.name,\n orgText: node.orgText,\n definition: convertDefinition(node.definition)\n };\n } else {\n throw Error(\"non exhaustive match\");\n }\n }\n class GAstVisitor {\n visit(node) {\n const nodeAny = node;\n switch (nodeAny.constructor) {\n case NonTerminal:\n return this.visitNonTerminal(nodeAny);\n case Alternative:\n return this.visitAlternative(nodeAny);\n case Option:\n return this.visitOption(nodeAny);\n case RepetitionMandatory:\n return this.visitRepetitionMandatory(nodeAny);\n case RepetitionMandatoryWithSeparator:\n return this.visitRepetitionMandatoryWithSeparator(nodeAny);\n case RepetitionWithSeparator:\n return this.visitRepetitionWithSeparator(nodeAny);\n case Repetition:\n return this.visitRepetition(nodeAny);\n case Alternation:\n return this.visitAlternation(nodeAny);\n case Terminal:\n return this.visitTerminal(nodeAny);\n case Rule:\n return this.visitRule(nodeAny);\n default:\n throw Error(\"non exhaustive match\");\n }\n }\n /* c8 ignore next */\n visitNonTerminal(node) {\n }\n /* c8 ignore next */\n visitAlternative(node) {\n }\n /* c8 ignore next */\n visitOption(node) {\n }\n /* c8 ignore next */\n visitRepetition(node) {\n }\n /* c8 ignore next */\n visitRepetitionMandatory(node) {\n }\n /* c8 ignore next 3 */\n visitRepetitionMandatoryWithSeparator(node) {\n }\n /* c8 ignore next */\n visitRepetitionWithSeparator(node) {\n }\n /* c8 ignore next */\n visitAlternation(node) {\n }\n /* c8 ignore next */\n visitTerminal(node) {\n }\n /* c8 ignore next */\n visitRule(node) {\n }\n }\n function isSequenceProd(prod) {\n return prod instanceof Alternative || prod instanceof Option || prod instanceof Repetition || prod instanceof RepetitionMandatory || prod instanceof RepetitionMandatoryWithSeparator || prod instanceof RepetitionWithSeparator || prod instanceof Terminal || prod instanceof Rule;\n }\n function isOptionalProd(prod, alreadyVisited = []) {\n const isDirectlyOptional = prod instanceof Option || prod instanceof Repetition || prod instanceof RepetitionWithSeparator;\n if (isDirectlyOptional) {\n return true;\n }\n if (prod instanceof Alternation) {\n return some(prod.definition, (subProd) => {\n return isOptionalProd(subProd, alreadyVisited);\n });\n } else if (prod instanceof NonTerminal && includes(alreadyVisited, prod)) {\n return false;\n } else if (prod instanceof AbstractProduction) {\n if (prod instanceof NonTerminal) {\n alreadyVisited.push(prod);\n }\n return every(prod.definition, (subProd) => {\n return isOptionalProd(subProd, alreadyVisited);\n });\n } else {\n return false;\n }\n }\n function isBranchingProd(prod) {\n return prod instanceof Alternation;\n }\n function getProductionDslName(prod) {\n if (prod instanceof NonTerminal) {\n return \"SUBRULE\";\n } else if (prod instanceof Option) {\n return \"OPTION\";\n } else if (prod instanceof Alternation) {\n return \"OR\";\n } else if (prod instanceof RepetitionMandatory) {\n return \"AT_LEAST_ONE\";\n } else if (prod instanceof RepetitionMandatoryWithSeparator) {\n return \"AT_LEAST_ONE_SEP\";\n } else if (prod instanceof RepetitionWithSeparator) {\n return \"MANY_SEP\";\n } else if (prod instanceof Repetition) {\n return \"MANY\";\n } else if (prod instanceof Terminal) {\n return \"CONSUME\";\n } else {\n throw Error(\"non exhaustive match\");\n }\n }\n class RestWalker {\n walk(prod, prevRest = []) {\n forEach(prod.definition, (subProd, index) => {\n const currRest = drop(prod.definition, index + 1);\n if (subProd instanceof NonTerminal) {\n this.walkProdRef(subProd, currRest, prevRest);\n } else if (subProd instanceof Terminal) {\n this.walkTerminal(subProd, currRest, prevRest);\n } else if (subProd instanceof Alternative) {\n this.walkFlat(subProd, currRest, prevRest);\n } else if (subProd instanceof Option) {\n this.walkOption(subProd, currRest, prevRest);\n } else if (subProd instanceof RepetitionMandatory) {\n this.walkAtLeastOne(subProd, currRest, prevRest);\n } else if (subProd instanceof RepetitionMandatoryWithSeparator) {\n this.walkAtLeastOneSep(subProd, currRest, prevRest);\n } else if (subProd instanceof RepetitionWithSeparator) {\n this.walkManySep(subProd, currRest, prevRest);\n } else if (subProd instanceof Repetition) {\n this.walkMany(subProd, currRest, prevRest);\n } else if (subProd instanceof Alternation) {\n this.walkOr(subProd, currRest, prevRest);\n } else {\n throw Error(\"non exhaustive match\");\n }\n });\n }\n walkTerminal(terminal, currRest, prevRest) {\n }\n walkProdRef(refProd, currRest, prevRest) {\n }\n walkFlat(flatProd, currRest, prevRest) {\n const fullOrRest = currRest.concat(prevRest);\n this.walk(flatProd, fullOrRest);\n }\n walkOption(optionProd, currRest, prevRest) {\n const fullOrRest = currRest.concat(prevRest);\n this.walk(optionProd, fullOrRest);\n }\n walkAtLeastOne(atLeastOneProd, currRest, prevRest) {\n const fullAtLeastOneRest = [new Option({ definition: atLeastOneProd.definition })].concat(currRest, prevRest);\n this.walk(atLeastOneProd, fullAtLeastOneRest);\n }\n walkAtLeastOneSep(atLeastOneSepProd, currRest, prevRest) {\n const fullAtLeastOneSepRest = restForRepetitionWithSeparator(atLeastOneSepProd, currRest, prevRest);\n this.walk(atLeastOneSepProd, fullAtLeastOneSepRest);\n }\n walkMany(manyProd, currRest, prevRest) {\n const fullManyRest = [new Option({ definition: manyProd.definition })].concat(currRest, prevRest);\n this.walk(manyProd, fullManyRest);\n }\n walkManySep(manySepProd, currRest, prevRest) {\n const fullManySepRest = restForRepetitionWithSeparator(manySepProd, currRest, prevRest);\n this.walk(manySepProd, fullManySepRest);\n }\n walkOr(orProd, currRest, prevRest) {\n const fullOrRest = currRest.concat(prevRest);\n forEach(orProd.definition, (alt) => {\n const prodWrapper = new Alternative({ definition: [alt] });\n this.walk(prodWrapper, fullOrRest);\n });\n }\n }\n function restForRepetitionWithSeparator(repSepProd, currRest, prevRest) {\n const repSepRest = [\n new Option({\n definition: [new Terminal({ terminalType: repSepProd.separator })].concat(repSepProd.definition)\n })\n ];\n const fullRepSepRest = repSepRest.concat(currRest, prevRest);\n return fullRepSepRest;\n }\n function first(prod) {\n if (prod instanceof NonTerminal) {\n return first(prod.referencedRule);\n } else if (prod instanceof Terminal) {\n return firstForTerminal(prod);\n } else if (isSequenceProd(prod)) {\n return firstForSequence(prod);\n } else if (isBranchingProd(prod)) {\n return firstForBranching(prod);\n } else {\n throw Error(\"non exhaustive match\");\n }\n }\n function firstForSequence(prod) {\n let firstSet = [];\n const seq = prod.definition;\n let nextSubProdIdx = 0;\n let hasInnerProdsRemaining = seq.length > nextSubProdIdx;\n let currSubProd;\n let isLastInnerProdOptional = true;\n while (hasInnerProdsRemaining && isLastInnerProdOptional) {\n currSubProd = seq[nextSubProdIdx];\n isLastInnerProdOptional = isOptionalProd(currSubProd);\n firstSet = firstSet.concat(first(currSubProd));\n nextSubProdIdx = nextSubProdIdx + 1;\n hasInnerProdsRemaining = seq.length > nextSubProdIdx;\n }\n return uniq(firstSet);\n }\n function firstForBranching(prod) {\n const allAlternativesFirsts = map(prod.definition, (innerProd) => {\n return first(innerProd);\n });\n return uniq(flatten(allAlternativesFirsts));\n }\n function firstForTerminal(terminal) {\n return [terminal.terminalType];\n }\n const IN = \"_~IN~_\";\n class ResyncFollowsWalker extends RestWalker {\n constructor(topProd) {\n super();\n this.topProd = topProd;\n this.follows = {};\n }\n startWalking() {\n this.walk(this.topProd);\n return this.follows;\n }\n walkTerminal(terminal, currRest, prevRest) {\n }\n walkProdRef(refProd, currRest, prevRest) {\n const followName = buildBetweenProdsFollowPrefix(refProd.referencedRule, refProd.idx) + this.topProd.name;\n const fullRest = currRest.concat(prevRest);\n const restProd = new Alternative({ definition: fullRest });\n const t_in_topProd_follows = first(restProd);\n this.follows[followName] = t_in_topProd_follows;\n }\n }\n function computeAllProdsFollows(topProductions) {\n const reSyncFollows = {};\n forEach(topProductions, (topProd) => {\n const currRefsFollow = new ResyncFollowsWalker(topProd).startWalking();\n assign$1(reSyncFollows, currRefsFollow);\n });\n return reSyncFollows;\n }\n function buildBetweenProdsFollowPrefix(inner, occurenceInParent) {\n return inner.name + occurenceInParent + IN;\n }\n function cc(char) {\n return char.charCodeAt(0);\n }\n function insertToSet(item, set) {\n if (Array.isArray(item)) {\n item.forEach(function(subItem) {\n set.push(subItem);\n });\n } else {\n set.push(item);\n }\n }\n function addFlag(flagObj, flagKey) {\n if (flagObj[flagKey] === true) {\n throw \"duplicate flag \" + flagKey;\n }\n flagObj[flagKey];\n flagObj[flagKey] = true;\n }\n function ASSERT_EXISTS(obj) {\n if (obj === void 0) {\n throw Error(\"Internal Error - Should never get here!\");\n }\n return true;\n }\n function ASSERT_NEVER_REACH_HERE() {\n throw Error(\"Internal Error - Should never get here!\");\n }\n function isCharacter(obj) {\n return obj[\"type\"] === \"Character\";\n }\n const digitsCharCodes = [];\n for (let i = cc(\"0\"); i <= cc(\"9\"); i++) {\n digitsCharCodes.push(i);\n }\n const wordCharCodes = [cc(\"_\")].concat(digitsCharCodes);\n for (let i = cc(\"a\"); i <= cc(\"z\"); i++) {\n wordCharCodes.push(i);\n }\n for (let i = cc(\"A\"); i <= cc(\"Z\"); i++) {\n wordCharCodes.push(i);\n }\n const whitespaceCodes = [\n cc(\" \"),\n cc(\"\\f\"),\n cc(\"\\n\"),\n cc(\"\\r\"),\n cc(\"\t\"),\n cc(\"\\v\"),\n cc(\"\t\"),\n cc(\" \"),\n cc(\" \"),\n cc(\" \"),\n cc(\" \"),\n cc(\" \"),\n cc(\" \"),\n cc(\" \"),\n cc(\" \"),\n cc(\" \"),\n cc(\" \"),\n cc(\" \"),\n cc(\" \"),\n cc(\" \"),\n cc(\"\\u2028\"),\n cc(\"\\u2029\"),\n cc(\" \"),\n cc(\" \"),\n cc(\" \"),\n cc(\"\\uFEFF\")\n ];\n const hexDigitPattern = /[0-9a-fA-F]/;\n const decimalPattern = /[0-9]/;\n const decimalPatternNoZero = /[1-9]/;\n class RegExpParser {\n constructor() {\n this.idx = 0;\n this.input = \"\";\n this.groupIdx = 0;\n }\n saveState() {\n return {\n idx: this.idx,\n input: this.input,\n groupIdx: this.groupIdx\n };\n }\n restoreState(newState) {\n this.idx = newState.idx;\n this.input = newState.input;\n this.groupIdx = newState.groupIdx;\n }\n pattern(input) {\n this.idx = 0;\n this.input = input;\n this.groupIdx = 0;\n this.consumeChar(\"/\");\n const value = this.disjunction();\n this.consumeChar(\"/\");\n const flags = {\n type: \"Flags\",\n loc: { begin: this.idx, end: input.length },\n global: false,\n ignoreCase: false,\n multiLine: false,\n unicode: false,\n sticky: false\n };\n while (this.isRegExpFlag()) {\n switch (this.popChar()) {\n case \"g\":\n addFlag(flags, \"global\");\n break;\n case \"i\":\n addFlag(flags, \"ignoreCase\");\n break;\n case \"m\":\n addFlag(flags, \"multiLine\");\n break;\n case \"u\":\n addFlag(flags, \"unicode\");\n break;\n case \"y\":\n addFlag(flags, \"sticky\");\n break;\n }\n }\n if (this.idx !== this.input.length) {\n throw Error(\"Redundant input: \" + this.input.substring(this.idx));\n }\n return {\n type: \"Pattern\",\n flags,\n value,\n loc: this.loc(0)\n };\n }\n disjunction() {\n const alts = [];\n const begin = this.idx;\n alts.push(this.alternative());\n while (this.peekChar() === \"|\") {\n this.consumeChar(\"|\");\n alts.push(this.alternative());\n }\n return { type: \"Disjunction\", value: alts, loc: this.loc(begin) };\n }\n alternative() {\n const terms = [];\n const begin = this.idx;\n while (this.isTerm()) {\n terms.push(this.term());\n }\n return { type: \"Alternative\", value: terms, loc: this.loc(begin) };\n }\n term() {\n if (this.isAssertion()) {\n return this.assertion();\n } else {\n return this.atom();\n }\n }\n assertion() {\n const begin = this.idx;\n switch (this.popChar()) {\n case \"^\":\n return {\n type: \"StartAnchor\",\n loc: this.loc(begin)\n };\n case \"$\":\n return { type: \"EndAnchor\", loc: this.loc(begin) };\n case \"\\\\\":\n switch (this.popChar()) {\n case \"b\":\n return {\n type: \"WordBoundary\",\n loc: this.loc(begin)\n };\n case \"B\":\n return {\n type: \"NonWordBoundary\",\n loc: this.loc(begin)\n };\n }\n throw Error(\"Invalid Assertion Escape\");\n case \"(\":\n this.consumeChar(\"?\");\n let type;\n switch (this.popChar()) {\n case \"=\":\n type = \"Lookahead\";\n break;\n case \"!\":\n type = \"NegativeLookahead\";\n break;\n }\n ASSERT_EXISTS(type);\n const disjunction = this.disjunction();\n this.consumeChar(\")\");\n return {\n type,\n value: disjunction,\n loc: this.loc(begin)\n };\n }\n return ASSERT_NEVER_REACH_HERE();\n }\n quantifier(isBacktracking = false) {\n let range = void 0;\n const begin = this.idx;\n switch (this.popChar()) {\n case \"*\":\n range = {\n atLeast: 0,\n atMost: Infinity\n };\n break;\n case \"+\":\n range = {\n atLeast: 1,\n atMost: Infinity\n };\n break;\n case \"?\":\n range = {\n atLeast: 0,\n atMost: 1\n };\n break;\n case \"{\":\n const atLeast = this.integerIncludingZero();\n switch (this.popChar()) {\n case \"}\":\n range = {\n atLeast,\n atMost: atLeast\n };\n break;\n case \",\":\n let atMost;\n if (this.isDigit()) {\n atMost = this.integerIncludingZero();\n range = {\n atLeast,\n atMost\n };\n } else {\n range = {\n atLeast,\n atMost: Infinity\n };\n }\n this.consumeChar(\"}\");\n break;\n }\n if (isBacktracking === true && range === void 0) {\n return void 0;\n }\n ASSERT_EXISTS(range);\n break;\n }\n if (isBacktracking === true && range === void 0) {\n return void 0;\n }\n if (ASSERT_EXISTS(range)) {\n if (this.peekChar(0) === \"?\") {\n this.consumeChar(\"?\");\n range.greedy = false;\n } else {\n range.greedy = true;\n }\n range.type = \"Quantifier\";\n range.loc = this.loc(begin);\n return range;\n }\n }\n atom() {\n let atom;\n const begin = this.idx;\n switch (this.peekChar()) {\n case \".\":\n atom = this.dotAll();\n break;\n case \"\\\\\":\n atom = this.atomEscape();\n break;\n case \"[\":\n atom = this.characterClass();\n break;\n case \"(\":\n atom = this.group();\n break;\n }\n if (atom === void 0 && this.isPatternCharacter()) {\n atom = this.patternCharacter();\n }\n if (ASSERT_EXISTS(atom)) {\n atom.loc = this.loc(begin);\n if (this.isQuantifier()) {\n atom.quantifier = this.quantifier();\n }\n return atom;\n }\n }\n dotAll() {\n this.consumeChar(\".\");\n return {\n type: \"Set\",\n complement: true,\n value: [cc(\"\\n\"), cc(\"\\r\"), cc(\"\\u2028\"), cc(\"\\u2029\")]\n };\n }\n atomEscape() {\n this.consumeChar(\"\\\\\");\n switch (this.peekChar()) {\n case \"1\":\n case \"2\":\n case \"3\":\n case \"4\":\n case \"5\":\n case \"6\":\n case \"7\":\n case \"8\":\n case \"9\":\n return this.decimalEscapeAtom();\n case \"d\":\n case \"D\":\n case \"s\":\n case \"S\":\n case \"w\":\n case \"W\":\n return this.characterClassEscape();\n case \"f\":\n case \"n\":\n case \"r\":\n case \"t\":\n case \"v\":\n return this.controlEscapeAtom();\n case \"c\":\n return this.controlLetterEscapeAtom();\n case \"0\":\n return this.nulCharacterAtom();\n case \"x\":\n return this.hexEscapeSequenceAtom();\n case \"u\":\n return this.regExpUnicodeEscapeSequenceAtom();\n default:\n return this.identityEscapeAtom();\n }\n }\n decimalEscapeAtom() {\n const value = this.positiveInteger();\n return { type: \"GroupBackReference\", value };\n }\n characterClassEscape() {\n let set;\n let complement = false;\n switch (this.popChar()) {\n case \"d\":\n set = digitsCharCodes;\n break;\n case \"D\":\n set = digitsCharCodes;\n complement = true;\n break;\n case \"s\":\n set = whitespaceCodes;\n break;\n case \"S\":\n set = whitespaceCodes;\n complement = true;\n break;\n case \"w\":\n set = wordCharCodes;\n break;\n case \"W\":\n set = wordCharCodes;\n complement = true;\n break;\n }\n if (ASSERT_EXISTS(set)) {\n return { type: \"Set\", value: set, complement };\n }\n }\n controlEscapeAtom() {\n let escapeCode;\n switch (this.popChar()) {\n case \"f\":\n escapeCode = cc(\"\\f\");\n break;\n case \"n\":\n escapeCode = cc(\"\\n\");\n break;\n case \"r\":\n escapeCode = cc(\"\\r\");\n break;\n case \"t\":\n escapeCode = cc(\"\t\");\n break;\n case \"v\":\n escapeCode = cc(\"\\v\");\n break;\n }\n if (ASSERT_EXISTS(escapeCode)) {\n return { type: \"Character\", value: escapeCode };\n }\n }\n controlLetterEscapeAtom() {\n this.consumeChar(\"c\");\n const letter = this.popChar();\n if (/[a-zA-Z]/.test(letter) === false) {\n throw Error(\"Invalid \");\n }\n const letterCode = letter.toUpperCase().charCodeAt(0) - 64;\n return { type: \"Character\", value: letterCode };\n }\n nulCharacterAtom() {\n this.consumeChar(\"0\");\n return { type: \"Character\", value: cc(\"\\0\") };\n }\n hexEscapeSequenceAtom() {\n this.consumeChar(\"x\");\n return this.parseHexDigits(2);\n }\n regExpUnicodeEscapeSequenceAtom() {\n this.consumeChar(\"u\");\n return this.parseHexDigits(4);\n }\n identityEscapeAtom() {\n const escapedChar = this.popChar();\n return { type: \"Character\", value: cc(escapedChar) };\n }\n classPatternCharacterAtom() {\n switch (this.peekChar()) {\n case \"\\n\":\n case \"\\r\":\n case \"\\u2028\":\n case \"\\u2029\":\n case \"\\\\\":\n case \"]\":\n throw Error(\"TBD\");\n default:\n const nextChar = this.popChar();\n return { type: \"Character\", value: cc(nextChar) };\n }\n }\n characterClass() {\n const set = [];\n let complement = false;\n this.consumeChar(\"[\");\n if (this.peekChar(0) === \"^\") {\n this.consumeChar(\"^\");\n complement = true;\n }\n while (this.isClassAtom()) {\n const from = this.classAtom();\n from.type === \"Character\";\n if (isCharacter(from) && this.isRangeDash()) {\n this.consumeChar(\"-\");\n const to = this.classAtom();\n to.type === \"Character\";\n if (isCharacter(to)) {\n if (to.value < from.value) {\n throw Error(\"Range out of order in character class\");\n }\n set.push({ from: from.value, to: to.value });\n } else {\n insertToSet(from.value, set);\n set.push(cc(\"-\"));\n insertToSet(to.value, set);\n }\n } else {\n insertToSet(from.value, set);\n }\n }\n this.consumeChar(\"]\");\n return { type: \"Set\", complement, value: set };\n }\n classAtom() {\n switch (this.peekChar()) {\n case \"]\":\n case \"\\n\":\n case \"\\r\":\n case \"\\u2028\":\n case \"\\u2029\":\n throw Error(\"TBD\");\n case \"\\\\\":\n return this.classEscape();\n default:\n return this.classPatternCharacterAtom();\n }\n }\n classEscape() {\n this.consumeChar(\"\\\\\");\n switch (this.peekChar()) {\n case \"b\":\n this.consumeChar(\"b\");\n return { type: \"Character\", value: cc(\"\\b\") };\n case \"d\":\n case \"D\":\n case \"s\":\n case \"S\":\n case \"w\":\n case \"W\":\n return this.characterClassEscape();\n case \"f\":\n case \"n\":\n case \"r\":\n case \"t\":\n case \"v\":\n return this.controlEscapeAtom();\n case \"c\":\n return this.controlLetterEscapeAtom();\n case \"0\":\n return this.nulCharacterAtom();\n case \"x\":\n return this.hexEscapeSequenceAtom();\n case \"u\":\n return this.regExpUnicodeEscapeSequenceAtom();\n default:\n return this.identityEscapeAtom();\n }\n }\n group() {\n let capturing = true;\n this.consumeChar(\"(\");\n switch (this.peekChar(0)) {\n case \"?\":\n this.consumeChar(\"?\");\n this.consumeChar(\":\");\n capturing = false;\n break;\n default:\n this.groupIdx++;\n break;\n }\n const value = this.disjunction();\n this.consumeChar(\")\");\n const groupAst = {\n type: \"Group\",\n capturing,\n value\n };\n if (capturing) {\n groupAst[\"idx\"] = this.groupIdx;\n }\n return groupAst;\n }\n positiveInteger() {\n let number = this.popChar();\n if (decimalPatternNoZero.test(number) === false) {\n throw Error(\"Expecting a positive integer\");\n }\n while (decimalPattern.test(this.peekChar(0))) {\n number += this.popChar();\n }\n return parseInt(number, 10);\n }\n integerIncludingZero() {\n let number = this.popChar();\n if (decimalPattern.test(number) === false) {\n throw Error(\"Expecting an integer\");\n }\n while (decimalPattern.test(this.peekChar(0))) {\n number += this.popChar();\n }\n return parseInt(number, 10);\n }\n patternCharacter() {\n const nextChar = this.popChar();\n switch (nextChar) {\n case \"\\n\":\n case \"\\r\":\n case \"\\u2028\":\n case \"\\u2029\":\n case \"^\":\n case \"$\":\n case \"\\\\\":\n case \".\":\n case \"*\":\n case \"+\":\n case \"?\":\n case \"(\":\n case \")\":\n case \"[\":\n case \"|\":\n throw Error(\"TBD\");\n default:\n return { type: \"Character\", value: cc(nextChar) };\n }\n }\n isRegExpFlag() {\n switch (this.peekChar(0)) {\n case \"g\":\n case \"i\":\n case \"m\":\n case \"u\":\n case \"y\":\n return true;\n default:\n return false;\n }\n }\n isRangeDash() {\n return this.peekChar() === \"-\" && this.isClassAtom(1);\n }\n isDigit() {\n return decimalPattern.test(this.peekChar(0));\n }\n isClassAtom(howMuch = 0) {\n switch (this.peekChar(howMuch)) {\n case \"]\":\n case \"\\n\":\n case \"\\r\":\n case \"\\u2028\":\n case \"\\u2029\":\n return false;\n default:\n return true;\n }\n }\n isTerm() {\n return this.isAtom() || this.isAssertion();\n }\n isAtom() {\n if (this.isPatternCharacter()) {\n return true;\n }\n switch (this.peekChar(0)) {\n case \".\":\n case \"\\\\\":\n case \"[\":\n case \"(\":\n return true;\n default:\n return false;\n }\n }\n isAssertion() {\n switch (this.peekChar(0)) {\n case \"^\":\n case \"$\":\n return true;\n case \"\\\\\":\n switch (this.peekChar(1)) {\n case \"b\":\n case \"B\":\n return true;\n default:\n return false;\n }\n case \"(\":\n return this.peekChar(1) === \"?\" && (this.peekChar(2) === \"=\" || this.peekChar(2) === \"!\");\n default:\n return false;\n }\n }\n isQuantifier() {\n const prevState = this.saveState();\n try {\n return this.quantifier(true) !== void 0;\n } catch (e) {\n return false;\n } finally {\n this.restoreState(prevState);\n }\n }\n isPatternCharacter() {\n switch (this.peekChar()) {\n case \"^\":\n case \"$\":\n case \"\\\\\":\n case \".\":\n case \"*\":\n case \"+\":\n case \"?\":\n case \"(\":\n case \")\":\n case \"[\":\n case \"|\":\n case \"/\":\n case \"\\n\":\n case \"\\r\":\n case \"\\u2028\":\n case \"\\u2029\":\n return false;\n default:\n return true;\n }\n }\n parseHexDigits(howMany) {\n let hexString = \"\";\n for (let i = 0; i < howMany; i++) {\n const hexChar = this.popChar();\n if (hexDigitPattern.test(hexChar) === false) {\n throw Error(\"Expecting a HexDecimal digits\");\n }\n hexString += hexChar;\n }\n const charCode = parseInt(hexString, 16);\n return { type: \"Character\", value: charCode };\n }\n peekChar(howMuch = 0) {\n return this.input[this.idx + howMuch];\n }\n popChar() {\n const nextChar = this.peekChar(0);\n this.consumeChar(void 0);\n return nextChar;\n }\n consumeChar(char) {\n if (char !== void 0 && this.input[this.idx] !== char) {\n throw Error(\"Expected: '\" + char + \"' but found: '\" + this.input[this.idx] + \"' at offset: \" + this.idx);\n }\n if (this.idx >= this.input.length) {\n throw Error(\"Unexpected end of input\");\n }\n this.idx++;\n }\n loc(begin) {\n return { begin, end: this.idx };\n }\n }\n class BaseRegExpVisitor {\n visitChildren(node) {\n for (const key in node) {\n const child = node[key];\n if (node.hasOwnProperty(key)) {\n if (child.type !== void 0) {\n this.visit(child);\n } else if (Array.isArray(child)) {\n child.forEach((subChild) => {\n this.visit(subChild);\n }, this);\n }\n }\n }\n }\n visit(node) {\n switch (node.type) {\n case \"Pattern\":\n this.visitPattern(node);\n break;\n case \"Flags\":\n this.visitFlags(node);\n break;\n case \"Disjunction\":\n this.visitDisjunction(node);\n break;\n case \"Alternative\":\n this.visitAlternative(node);\n break;\n case \"StartAnchor\":\n this.visitStartAnchor(node);\n break;\n case \"EndAnchor\":\n this.visitEndAnchor(node);\n break;\n case \"WordBoundary\":\n this.visitWordBoundary(node);\n break;\n case \"NonWordBoundary\":\n this.visitNonWordBoundary(node);\n break;\n case \"Lookahead\":\n this.visitLookahead(node);\n break;\n case \"NegativeLookahead\":\n this.visitNegativeLookahead(node);\n break;\n case \"Character\":\n this.visitCharacter(node);\n break;\n case \"Set\":\n this.visitSet(node);\n break;\n case \"Group\":\n this.visitGroup(node);\n break;\n case \"GroupBackReference\":\n this.visitGroupBackReference(node);\n break;\n case \"Quantifier\":\n this.visitQuantifier(node);\n break;\n }\n this.visitChildren(node);\n }\n visitPattern(node) {\n }\n visitFlags(node) {\n }\n visitDisjunction(node) {\n }\n visitAlternative(node) {\n }\n // Assertion\n visitStartAnchor(node) {\n }\n visitEndAnchor(node) {\n }\n visitWordBoundary(node) {\n }\n visitNonWordBoundary(node) {\n }\n visitLookahead(node) {\n }\n visitNegativeLookahead(node) {\n }\n // atoms\n visitCharacter(node) {\n }\n visitSet(node) {\n }\n visitGroup(node) {\n }\n visitGroupBackReference(node) {\n }\n visitQuantifier(node) {\n }\n }\n let regExpAstCache = {};\n const regExpParser = new RegExpParser();\n function getRegExpAst(regExp) {\n const regExpStr = regExp.toString();\n if (regExpAstCache.hasOwnProperty(regExpStr)) {\n return regExpAstCache[regExpStr];\n } else {\n const regExpAst = regExpParser.pattern(regExpStr);\n regExpAstCache[regExpStr] = regExpAst;\n return regExpAst;\n }\n }\n function clearRegExpParserCache() {\n regExpAstCache = {};\n }\n const complementErrorMessage = \"Complement Sets are not supported for first char optimization\";\n const failedOptimizationPrefixMsg = 'Unable to use \"first char\" lexer optimizations:\\n';\n function getOptimizedStartCodesIndices(regExp, ensureOptimizations = false) {\n try {\n const ast = getRegExpAst(regExp);\n const firstChars = firstCharOptimizedIndices(ast.value, {}, ast.flags.ignoreCase);\n return firstChars;\n } catch (e) {\n if (e.message === complementErrorMessage) {\n if (ensureOptimizations) {\n PRINT_WARNING(\n `${failedOptimizationPrefixMsg}\tUnable to optimize: < ${regExp.toString()} >\n\tComplement Sets cannot be automatically optimized.\n\tThis will disable the lexer's first char optimizations.\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`\n );\n }\n } else {\n let msgSuffix = \"\";\n if (ensureOptimizations) {\n msgSuffix = \"\\n\tThis will disable the lexer's first char optimizations.\\n\tSee: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.\";\n }\n PRINT_ERROR(\n `${failedOptimizationPrefixMsg}\n\tFailed parsing: < ${regExp.toString()} >\n\tUsing the @chevrotain/regexp-to-ast library\n\tPlease open an issue at: https://github.com/chevrotain/chevrotain/issues` + msgSuffix\n );\n }\n }\n return [];\n }\n function firstCharOptimizedIndices(ast, result, ignoreCase) {\n switch (ast.type) {\n case \"Disjunction\":\n for (let i = 0; i < ast.value.length; i++) {\n firstCharOptimizedIndices(ast.value[i], result, ignoreCase);\n }\n break;\n case \"Alternative\":\n const terms = ast.value;\n for (let i = 0; i < terms.length; i++) {\n const term = terms[i];\n switch (term.type) {\n case \"EndAnchor\":\n case \"GroupBackReference\":\n case \"Lookahead\":\n case \"NegativeLookahead\":\n case \"StartAnchor\":\n case \"WordBoundary\":\n case \"NonWordBoundary\":\n continue;\n }\n const atom = term;\n switch (atom.type) {\n case \"Character\":\n addOptimizedIdxToResult(atom.value, result, ignoreCase);\n break;\n case \"Set\":\n if (atom.complement === true) {\n throw Error(complementErrorMessage);\n }\n forEach(atom.value, (code) => {\n if (typeof code === \"number\") {\n addOptimizedIdxToResult(code, result, ignoreCase);\n } else {\n const range = code;\n if (ignoreCase === true) {\n for (let rangeCode = range.from; rangeCode <= range.to; rangeCode++) {\n addOptimizedIdxToResult(rangeCode, result, ignoreCase);\n }\n } else {\n for (let rangeCode = range.from; rangeCode <= range.to && rangeCode < minOptimizationVal; rangeCode++) {\n addOptimizedIdxToResult(rangeCode, result, ignoreCase);\n }\n if (range.to >= minOptimizationVal) {\n const minUnOptVal = range.from >= minOptimizationVal ? range.from : minOptimizationVal;\n const maxUnOptVal = range.to;\n const minOptIdx = charCodeToOptimizedIndex(minUnOptVal);\n const maxOptIdx = charCodeToOptimizedIndex(maxUnOptVal);\n for (let currOptIdx = minOptIdx; currOptIdx <= maxOptIdx; currOptIdx++) {\n result[currOptIdx] = currOptIdx;\n }\n }\n }\n }\n });\n break;\n case \"Group\":\n firstCharOptimizedIndices(atom.value, result, ignoreCase);\n break;\n default:\n throw Error(\"Non Exhaustive Match\");\n }\n const isOptionalQuantifier = atom.quantifier !== void 0 && atom.quantifier.atLeast === 0;\n if (\n // A group may be optional due to empty contents /(?:)/\n // or if everything inside it is optional /((a)?)/\n atom.type === \"Group\" && isWholeOptional(atom) === false || // If this term is not a group it may only be optional if it has an optional quantifier\n atom.type !== \"Group\" && isOptionalQuantifier === false\n ) {\n break;\n }\n }\n break;\n default:\n throw Error(\"non exhaustive match!\");\n }\n return values(result);\n }\n function addOptimizedIdxToResult(code, result, ignoreCase) {\n const optimizedCharIdx = charCodeToOptimizedIndex(code);\n result[optimizedCharIdx] = optimizedCharIdx;\n if (ignoreCase === true) {\n handleIgnoreCase(code, result);\n }\n }\n function handleIgnoreCase(code, result) {\n const char = String.fromCharCode(code);\n const upperChar = char.toUpperCase();\n if (upperChar !== char) {\n const optimizedCharIdx = charCodeToOptimizedIndex(upperChar.charCodeAt(0));\n result[optimizedCharIdx] = optimizedCharIdx;\n } else {\n const lowerChar = char.toLowerCase();\n if (lowerChar !== char) {\n const optimizedCharIdx = charCodeToOptimizedIndex(lowerChar.charCodeAt(0));\n result[optimizedCharIdx] = optimizedCharIdx;\n }\n }\n }\n function findCode(setNode, targetCharCodes) {\n return find$1(setNode.value, (codeOrRange) => {\n if (typeof codeOrRange === \"number\") {\n return includes(targetCharCodes, codeOrRange);\n } else {\n const range = codeOrRange;\n return find$1(targetCharCodes, (targetCode) => range.from <= targetCode && targetCode <= range.to) !== void 0;\n }\n });\n }\n function isWholeOptional(ast) {\n const quantifier = ast.quantifier;\n if (quantifier && quantifier.atLeast === 0) {\n return true;\n }\n if (!ast.value) {\n return false;\n }\n return isArray$1(ast.value) ? every(ast.value, isWholeOptional) : isWholeOptional(ast.value);\n }\n class CharCodeFinder extends BaseRegExpVisitor {\n constructor(targetCharCodes) {\n super();\n this.targetCharCodes = targetCharCodes;\n this.found = false;\n }\n visitChildren(node) {\n if (this.found === true) {\n return;\n }\n switch (node.type) {\n case \"Lookahead\":\n this.visitLookahead(node);\n return;\n case \"NegativeLookahead\":\n this.visitNegativeLookahead(node);\n return;\n }\n super.visitChildren(node);\n }\n visitCharacter(node) {\n if (includes(this.targetCharCodes, node.value)) {\n this.found = true;\n }\n }\n visitSet(node) {\n if (node.complement) {\n if (findCode(node, this.targetCharCodes) === void 0) {\n this.found = true;\n }\n } else {\n if (findCode(node, this.targetCharCodes) !== void 0) {\n this.found = true;\n }\n }\n }\n }\n function canMatchCharCode(charCodes, pattern) {\n if (pattern instanceof RegExp) {\n const ast = getRegExpAst(pattern);\n const charCodeFinder = new CharCodeFinder(charCodes);\n charCodeFinder.visit(ast);\n return charCodeFinder.found;\n } else {\n return find$1(pattern, (char) => {\n return includes(charCodes, char.charCodeAt(0));\n }) !== void 0;\n }\n }\n const PATTERN = \"PATTERN\";\n const DEFAULT_MODE = \"defaultMode\";\n const MODES = \"modes\";\n let SUPPORT_STICKY = typeof new RegExp(\"(?:)\").sticky === \"boolean\";\n function analyzeTokenTypes(tokenTypes, options) {\n options = defaults$1(options, {\n useSticky: SUPPORT_STICKY,\n debug: false,\n safeMode: false,\n positionTracking: \"full\",\n lineTerminatorCharacters: [\"\\r\", \"\\n\"],\n tracer: (msg, action) => action()\n });\n const tracer = options.tracer;\n tracer(\"initCharCodeToOptimizedIndexMap\", () => {\n initCharCodeToOptimizedIndexMap();\n });\n let onlyRelevantTypes;\n tracer(\"Reject Lexer.NA\", () => {\n onlyRelevantTypes = reject(tokenTypes, (currType) => {\n return currType[PATTERN] === Lexer2.NA;\n });\n });\n let hasCustom = false;\n let allTransformedPatterns;\n tracer(\"Transform Patterns\", () => {\n hasCustom = false;\n allTransformedPatterns = map(onlyRelevantTypes, (currType) => {\n const currPattern = currType[PATTERN];\n if (isRegExp$1(currPattern)) {\n const regExpSource = currPattern.source;\n if (regExpSource.length === 1 && // only these regExp meta characters which can appear in a length one regExp\n regExpSource !== \"^\" && regExpSource !== \"$\" && regExpSource !== \".\" && !currPattern.ignoreCase) {\n return regExpSource;\n } else if (regExpSource.length === 2 && regExpSource[0] === \"\\\\\" && // not a meta character\n !includes([\"d\", \"D\", \"s\", \"S\", \"t\", \"r\", \"n\", \"t\", \"0\", \"c\", \"b\", \"B\", \"f\", \"v\", \"w\", \"W\"], regExpSource[1])) {\n return regExpSource[1];\n } else {\n return options.useSticky ? addStickyFlag(currPattern) : addStartOfInput(currPattern);\n }\n } else if (isFunction(currPattern)) {\n hasCustom = true;\n return { exec: currPattern };\n } else if (typeof currPattern === \"object\") {\n hasCustom = true;\n return currPattern;\n } else if (typeof currPattern === \"string\") {\n if (currPattern.length === 1) {\n return currPattern;\n } else {\n const escapedRegExpString = currPattern.replace(/[\\\\^$.*+?()[\\]{}|]/g, \"\\\\$&\");\n const wrappedRegExp = new RegExp(escapedRegExpString);\n return options.useSticky ? addStickyFlag(wrappedRegExp) : addStartOfInput(wrappedRegExp);\n }\n } else {\n throw Error(\"non exhaustive match\");\n }\n });\n });\n let patternIdxToType;\n let patternIdxToGroup;\n let patternIdxToLongerAltIdxArr;\n let patternIdxToPushMode;\n let patternIdxToPopMode;\n tracer(\"misc mapping\", () => {\n patternIdxToType = map(onlyRelevantTypes, (currType) => currType.tokenTypeIdx);\n patternIdxToGroup = map(onlyRelevantTypes, (clazz) => {\n const groupName = clazz.GROUP;\n if (groupName === Lexer2.SKIPPED) {\n return void 0;\n } else if (isString(groupName)) {\n return groupName;\n } else if (isUndefined(groupName)) {\n return false;\n } else {\n throw Error(\"non exhaustive match\");\n }\n });\n patternIdxToLongerAltIdxArr = map(onlyRelevantTypes, (clazz) => {\n const longerAltType = clazz.LONGER_ALT;\n if (longerAltType) {\n const longerAltIdxArr = isArray$1(longerAltType) ? map(longerAltType, (type) => indexOf(onlyRelevantTypes, type)) : [indexOf(onlyRelevantTypes, longerAltType)];\n return longerAltIdxArr;\n }\n });\n patternIdxToPushMode = map(onlyRelevantTypes, (clazz) => clazz.PUSH_MODE);\n patternIdxToPopMode = map(onlyRelevantTypes, (clazz) => has(clazz, \"POP_MODE\"));\n });\n let patternIdxToCanLineTerminator;\n tracer(\"Line Terminator Handling\", () => {\n const lineTerminatorCharCodes = getCharCodes(options.lineTerminatorCharacters);\n patternIdxToCanLineTerminator = map(onlyRelevantTypes, (tokType) => false);\n if (options.positionTracking !== \"onlyOffset\") {\n patternIdxToCanLineTerminator = map(onlyRelevantTypes, (tokType) => {\n if (has(tokType, \"LINE_BREAKS\")) {\n return !!tokType.LINE_BREAKS;\n } else {\n return checkLineBreaksIssues(tokType, lineTerminatorCharCodes) === false && canMatchCharCode(lineTerminatorCharCodes, tokType.PATTERN);\n }\n });\n }\n });\n let patternIdxToIsCustom;\n let patternIdxToShort;\n let emptyGroups;\n let patternIdxToConfig;\n tracer(\"Misc Mapping #2\", () => {\n patternIdxToIsCustom = map(onlyRelevantTypes, isCustomPattern);\n patternIdxToShort = map(allTransformedPatterns, isShortPattern);\n emptyGroups = reduce(\n onlyRelevantTypes,\n (acc, clazz) => {\n const groupName = clazz.GROUP;\n if (isString(groupName) && !(groupName === Lexer2.SKIPPED)) {\n acc[groupName] = [];\n }\n return acc;\n },\n {}\n );\n patternIdxToConfig = map(allTransformedPatterns, (x, idx) => {\n return {\n pattern: allTransformedPatterns[idx],\n longerAlt: patternIdxToLongerAltIdxArr[idx],\n canLineTerminator: patternIdxToCanLineTerminator[idx],\n isCustom: patternIdxToIsCustom[idx],\n short: patternIdxToShort[idx],\n group: patternIdxToGroup[idx],\n push: patternIdxToPushMode[idx],\n pop: patternIdxToPopMode[idx],\n tokenTypeIdx: patternIdxToType[idx],\n tokenType: onlyRelevantTypes[idx]\n };\n });\n });\n let canBeOptimized = true;\n let charCodeToPatternIdxToConfig = [];\n if (!options.safeMode) {\n tracer(\"First Char Optimization\", () => {\n charCodeToPatternIdxToConfig = reduce(\n onlyRelevantTypes,\n (result, currTokType, idx) => {\n if (typeof currTokType.PATTERN === \"string\") {\n const charCode = currTokType.PATTERN.charCodeAt(0);\n const optimizedIdx = charCodeToOptimizedIndex(charCode);\n addToMapOfArrays(result, optimizedIdx, patternIdxToConfig[idx]);\n } else if (isArray$1(currTokType.START_CHARS_HINT)) {\n let lastOptimizedIdx;\n forEach(currTokType.START_CHARS_HINT, (charOrInt) => {\n const charCode = typeof charOrInt === \"string\" ? charOrInt.charCodeAt(0) : charOrInt;\n const currOptimizedIdx = charCodeToOptimizedIndex(charCode);\n if (lastOptimizedIdx !== currOptimizedIdx) {\n lastOptimizedIdx = currOptimizedIdx;\n addToMapOfArrays(result, currOptimizedIdx, patternIdxToConfig[idx]);\n }\n });\n } else if (isRegExp$1(currTokType.PATTERN)) {\n if (currTokType.PATTERN.unicode) {\n canBeOptimized = false;\n if (options.ensureOptimizations) {\n PRINT_ERROR(\n `${failedOptimizationPrefixMsg}\tUnable to analyze < ${currTokType.PATTERN.toString()} > pattern.\n\tThe regexp unicode flag is not currently supported by the regexp-to-ast library.\n\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`\n );\n }\n } else {\n const optimizedCodes = getOptimizedStartCodesIndices(currTokType.PATTERN, options.ensureOptimizations);\n if (isEmpty(optimizedCodes)) {\n canBeOptimized = false;\n }\n forEach(optimizedCodes, (code) => {\n addToMapOfArrays(result, code, patternIdxToConfig[idx]);\n });\n }\n } else {\n if (options.ensureOptimizations) {\n PRINT_ERROR(\n `${failedOptimizationPrefixMsg}\tTokenType: <${currTokType.name}> is using a custom token pattern without providing <start_chars_hint> parameter.\n\tThis will disable the lexer's first char optimizations.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`\n );\n }\n canBeOptimized = false;\n }\n return result;\n },\n []\n );\n });\n }\n return {\n emptyGroups,\n patternIdxToConfig,\n charCodeToPatternIdxToConfig,\n hasCustom,\n canBeOptimized\n };\n }\n function validatePatterns(tokenTypes, validModesNames) {\n let errors = [];\n const missingResult = findMissingPatterns(tokenTypes);\n errors = errors.concat(missingResult.errors);\n const invalidResult = findInvalidPatterns(missingResult.valid);\n const validTokenTypes = invalidResult.valid;\n errors = errors.concat(invalidResult.errors);\n errors = errors.concat(validateRegExpPattern(validTokenTypes));\n errors = errors.concat(findInvalidGroupType(validTokenTypes));\n errors = errors.concat(findModesThatDoNotExist(validTokenTypes, validModesNames));\n errors = errors.concat(findUnreachablePatterns(validTokenTypes));\n return errors;\n }\n function validateRegExpPattern(tokenTypes) {\n let errors = [];\n const withRegExpPatterns = filter(tokenTypes, (currTokType) => isRegExp$1(currTokType[PATTERN]));\n errors = errors.concat(findEndOfInputAnchor(withRegExpPatterns));\n errors = errors.concat(findStartOfInputAnchor(withRegExpPatterns));\n errors = errors.concat(findUnsupportedFlags(withRegExpPatterns));\n errors = errors.concat(findDuplicatePatterns(withRegExpPatterns));\n errors = errors.concat(findEmptyMatchRegExps(withRegExpPatterns));\n return errors;\n }\n function findMissingPatterns(tokenTypes) {\n const tokenTypesWithMissingPattern = filter(tokenTypes, (currType) => {\n return !has(currType, PATTERN);\n });\n const errors = map(tokenTypesWithMissingPattern, (currType) => {\n return {\n message: \"Token Type: ->\" + currType.name + \"<- missing static 'PATTERN' property\",\n type: LexerDefinitionErrorType.MISSING_PATTERN,\n tokenTypes: [currType]\n };\n });\n const valid = difference$1(tokenTypes, tokenTypesWithMissingPattern);\n return { errors, valid };\n }\n function findInvalidPatterns(tokenTypes) {\n const tokenTypesWithInvalidPattern = filter(tokenTypes, (currType) => {\n const pattern = currType[PATTERN];\n return !isRegExp$1(pattern) && !isFunction(pattern) && !has(pattern, \"exec\") && !isString(pattern);\n });\n const errors = map(tokenTypesWithInvalidPattern, (currType) => {\n return {\n message: \"Token Type: ->\" + currType.name + \"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.\",\n type: LexerDefinitionErrorType.INVALID_PATTERN,\n tokenTypes: [currType]\n };\n });\n const valid = difference$1(tokenTypes, tokenTypesWithInvalidPattern);\n return { errors, valid };\n }\n const end_of_input = /[^\\\\][$]/;\n function findEndOfInputAnchor(tokenTypes) {\n class EndAnchorFinder extends BaseRegExpVisitor {\n constructor() {\n super(...arguments);\n this.found = false;\n }\n visitEndAnchor(node) {\n this.found = true;\n }\n }\n const invalidRegex = filter(tokenTypes, (currType) => {\n const pattern = currType.PATTERN;\n try {\n const regexpAst = getRegExpAst(pattern);\n const endAnchorVisitor = new EndAnchorFinder();\n endAnchorVisitor.visit(regexpAst);\n return endAnchorVisitor.found;\n } catch (e) {\n return end_of_input.test(pattern.source);\n }\n });\n const errors = map(invalidRegex, (currType) => {\n return {\n message: \"Unexpected RegExp Anchor Error:\\n\tToken Type: ->\" + currType.name + \"<- static 'PATTERN' cannot contain end of input anchor '$'\\n\tSee chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.\",\n type: LexerDefinitionErrorType.EOI_ANCHOR_FOUND,\n tokenTypes: [currType]\n };\n });\n return errors;\n }\n function findEmptyMatchRegExps(tokenTypes) {\n const matchesEmptyString = filter(tokenTypes, (currType) => {\n const pattern = currType.PATTERN;\n return pattern.test(\"\");\n });\n const errors = map(matchesEmptyString, (currType) => {\n return {\n message: \"Token Type: ->\" + currType.name + \"<- static 'PATTERN' must not match an empty string\",\n type: LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,\n tokenTypes: [currType]\n };\n });\n return errors;\n }\n const start_of_input = /[^\\\\[][\\^]|^\\^/;\n function findStartOfInputAnchor(tokenTypes) {\n class StartAnchorFinder extends BaseRegExpVisitor {\n constructor() {\n super(...arguments);\n this.found = false;\n }\n visitStartAnchor(node) {\n this.found = true;\n }\n }\n const invalidRegex = filter(tokenTypes, (currType) => {\n const pattern = currType.PATTERN;\n try {\n const regexpAst = getRegExpAst(pattern);\n const startAnchorVisitor = new StartAnchorFinder();\n startAnchorVisitor.visit(regexpAst);\n return startAnchorVisitor.found;\n } catch (e) {\n return start_of_input.test(pattern.source);\n }\n });\n const errors = map(invalidRegex, (currType) => {\n return {\n message: \"Unexpected RegExp Anchor Error:\\n\tToken Type: ->\" + currType.name + \"<- static 'PATTERN' cannot contain start of input anchor '^'\\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS\tfor details.\",\n type: LexerDefinitionErrorType.SOI_ANCHOR_FOUND,\n tokenTypes: [currType]\n };\n });\n return errors;\n }\n function findUnsupportedFlags(tokenTypes) {\n const invalidFlags = filter(tokenTypes, (currType) => {\n const pattern = currType[PATTERN];\n return pattern instanceof RegExp && (pattern.multiline || pattern.global);\n });\n const errors = map(invalidFlags, (currType) => {\n return {\n message: \"Token Type: ->\" + currType.name + \"<- static 'PATTERN' may NOT contain global('g') or multiline('m')\",\n type: LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,\n tokenTypes: [currType]\n };\n });\n return errors;\n }\n function findDuplicatePatterns(tokenTypes) {\n const found = [];\n let identicalPatterns = map(tokenTypes, (outerType) => {\n return reduce(\n tokenTypes,\n (result, innerType) => {\n if (outerType.PATTERN.source === innerType.PATTERN.source && !includes(found, innerType) && innerType.PATTERN !== Lexer2.NA) {\n found.push(innerType);\n result.push(innerType);\n return result;\n }\n return result;\n },\n []\n );\n });\n identicalPatterns = compact(identicalPatterns);\n const duplicatePatterns = filter(identicalPatterns, (currIdenticalSet) => {\n return currIdenticalSet.length > 1;\n });\n const errors = map(duplicatePatterns, (setOfIdentical) => {\n const tokenTypeNames = map(setOfIdentical, (currType) => {\n return currType.name;\n });\n const dupPatternSrc = head(setOfIdentical).PATTERN;\n return {\n message: `The same RegExp pattern ->${dupPatternSrc}<-has been used in all of the following Token Types: ${tokenTypeNames.join(\", \")} <-`,\n type: LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,\n tokenTypes: setOfIdentical\n };\n });\n return errors;\n }\n function findInvalidGroupType(tokenTypes) {\n const invalidTypes = filter(tokenTypes, (clazz) => {\n if (!has(clazz, \"GROUP\")) {\n return false;\n }\n const group = clazz.GROUP;\n return group !== Lexer2.SKIPPED && group !== Lexer2.NA && !isString(group);\n });\n const errors = map(invalidTypes, (currType) => {\n return {\n message: \"Token Type: ->\" + currType.name + \"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String\",\n type: LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,\n tokenTypes: [currType]\n };\n });\n return errors;\n }\n function findModesThatDoNotExist(tokenTypes, validModes) {\n const invalidModes = filter(tokenTypes, (clazz) => {\n return clazz.PUSH_MODE !== void 0 && !includes(validModes, clazz.PUSH_MODE);\n });\n const errors = map(invalidModes, (tokType) => {\n const msg = `Token Type: ->${tokType.name}<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->${tokType.PUSH_MODE}<-which does not exist`;\n return {\n message: msg,\n type: LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,\n tokenTypes: [tokType]\n };\n });\n return errors;\n }\n function findUnreachablePatterns(tokenTypes) {\n const errors = [];\n const canBeTested = reduce(\n tokenTypes,\n (result, tokType, idx) => {\n const pattern = tokType.PATTERN;\n if (pattern === Lexer2.NA) {\n return result;\n }\n if (isString(pattern)) {\n result.push({ str: pattern, idx, tokenType: tokType });\n } else if (isRegExp$1(pattern) && noMetaChar(pattern)) {\n result.push({ str: pattern.source, idx, tokenType: tokType });\n }\n return result;\n },\n []\n );\n forEach(tokenTypes, (tokType, testIdx) => {\n forEach(canBeTested, ({ str, idx, tokenType }) => {\n if (testIdx < idx && testTokenType(str, tokType.PATTERN)) {\n const msg = `Token: ->${tokenType.name}<- can never be matched.\nBecause it appears AFTER the Token Type ->${tokType.name}<-in the lexer's definition.\nSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;\n errors.push({\n message: msg,\n type: LexerDefinitionErrorType.UNREACHABLE_PATTERN,\n tokenTypes: [tokType, tokenType]\n });\n }\n });\n });\n return errors;\n }\n function testTokenType(str, pattern) {\n if (isRegExp$1(pattern)) {\n const regExpArray = pattern.exec(str);\n return regExpArray !== null && regExpArray.index === 0;\n } else if (isFunction(pattern)) {\n return pattern(str, 0, [], {});\n } else if (has(pattern, \"exec\")) {\n return pattern.exec(str, 0, [], {});\n } else if (typeof pattern === \"string\") {\n return pattern === str;\n } else {\n throw Error(\"non exhaustive match\");\n }\n }\n function noMetaChar(regExp) {\n const metaChars = [\".\", \"\\\\\", \"[\", \"]\", \"|\", \"^\", \"$\", \"(\", \")\", \"?\", \"*\", \"+\", \"{\"];\n return find$1(metaChars, (char) => regExp.source.indexOf(char) !== -1) === void 0;\n }\n function addStartOfInput(pattern) {\n const flags = pattern.ignoreCase ? \"i\" : \"\";\n return new RegExp(`^(?:${pattern.source})`, flags);\n }\n function addStickyFlag(pattern) {\n const flags = pattern.ignoreCase ? \"iy\" : \"y\";\n return new RegExp(`${pattern.source}`, flags);\n }\n function performRuntimeChecks(lexerDefinition, trackLines, lineTerminatorCharacters) {\n const errors = [];\n if (!has(lexerDefinition, DEFAULT_MODE)) {\n errors.push({\n message: \"A MultiMode Lexer cannot be initialized without a <\" + DEFAULT_MODE + \"> property in its definition\\n\",\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\n });\n }\n if (!has(lexerDefinition, MODES)) {\n errors.push({\n message: \"A MultiMode Lexer cannot be initialized without a <\" + MODES + \"> property in its definition\\n\",\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\n });\n }\n if (has(lexerDefinition, MODES) && has(lexerDefinition, DEFAULT_MODE) && !has(lexerDefinition.modes, lexerDefinition.defaultMode)) {\n errors.push({\n message: `A MultiMode Lexer cannot be initialized with a ${DEFAULT_MODE}: <${lexerDefinition.defaultMode}>which does not exist\n`,\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\n });\n }\n if (has(lexerDefinition, MODES)) {\n forEach(lexerDefinition.modes, (currModeValue, currModeName) => {\n forEach(currModeValue, (currTokType, currIdx) => {\n if (isUndefined(currTokType)) {\n errors.push({\n message: `A Lexer cannot be initialized using an undefined Token Type. Mode:<${currModeName}> at index: <${currIdx}>\n`,\n type: LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\n });\n } else if (has(currTokType, \"LONGER_ALT\")) {\n const longerAlt = isArray$1(currTokType.LONGER_ALT) ? currTokType.LONGER_ALT : [currTokType.LONGER_ALT];\n forEach(longerAlt, (currLongerAlt) => {\n if (!isUndefined(currLongerAlt) && !includes(currModeValue, currLongerAlt)) {\n errors.push({\n message: `A MultiMode Lexer cannot be initialized with a longer_alt <${currLongerAlt.name}> on token <${currTokType.name}> outside of mode <${currModeName}>\n`,\n type: LexerDefinitionErrorType.MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE\n });\n }\n });\n }\n });\n });\n }\n return errors;\n }\n function performWarningRuntimeChecks(lexerDefinition, trackLines, lineTerminatorCharacters) {\n const warnings = [];\n let hasAnyLineBreak = false;\n const allTokenTypes = compact(flatten(values(lexerDefinition.modes)));\n const concreteTokenTypes = reject(allTokenTypes, (currType) => currType[PATTERN] === Lexer2.NA);\n const terminatorCharCodes = getCharCodes(lineTerminatorCharacters);\n if (trackLines) {\n forEach(concreteTokenTypes, (tokType) => {\n const currIssue = checkLineBreaksIssues(tokType, terminatorCharCodes);\n if (currIssue !== false) {\n const message = buildLineBreakIssueMessage(tokType, currIssue);\n const warningDescriptor = {\n message,\n type: currIssue.issue,\n tokenType: tokType\n };\n warnings.push(warningDescriptor);\n } else {\n if (has(tokType, \"LINE_BREAKS\")) {\n if (tokType.LINE_BREAKS === true) {\n hasAnyLineBreak = true;\n }\n } else {\n if (canMatchCharCode(terminatorCharCodes, tokType.PATTERN)) {\n hasAnyLineBreak = true;\n }\n }\n }\n });\n }\n if (trackLines && !hasAnyLineBreak) {\n warnings.push({\n message: \"Warning: No LINE_BREAKS Found.\\n\tThis Lexer has been defined to track line and column information,\\n\tBut none of the Token Types can be identified as matching a line terminator.\\n\tSee https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS \\n\tfor details.\",\n type: LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS\n });\n }\n return warnings;\n }\n function cloneEmptyGroups(emptyGroups) {\n const clonedResult = {};\n const groupKeys = keys(emptyGroups);\n forEach(groupKeys, (currKey) => {\n const currGroupValue = emptyGroups[currKey];\n if (isArray$1(currGroupValue)) {\n clonedResult[currKey] = [];\n } else {\n throw Error(\"non exhaustive match\");\n }\n });\n return clonedResult;\n }\n function isCustomPattern(tokenType) {\n const pattern = tokenType.PATTERN;\n if (isRegExp$1(pattern)) {\n return false;\n } else if (isFunction(pattern)) {\n return true;\n } else if (has(pattern, \"exec\")) {\n return true;\n } else if (isString(pattern)) {\n return false;\n } else {\n throw Error(\"non exhaustive match\");\n }\n }\n function isShortPattern(pattern) {\n if (isString(pattern) && pattern.length === 1) {\n return pattern.charCodeAt(0);\n } else {\n return false;\n }\n }\n const LineTerminatorOptimizedTester = {\n // implements /\\n|\\r\\n?/g.test\n test: function(text) {\n const len = text.length;\n for (let i = this.lastIndex; i < len; i++) {\n const c = text.charCodeAt(i);\n if (c === 10) {\n this.lastIndex = i + 1;\n return true;\n } else if (c === 13) {\n if (text.charCodeAt(i + 1) === 10) {\n this.lastIndex = i + 2;\n } else {\n this.lastIndex = i + 1;\n }\n return true;\n }\n }\n return false;\n },\n lastIndex: 0\n };\n function checkLineBreaksIssues(tokType, lineTerminatorCharCodes) {\n if (has(tokType, \"LINE_BREAKS\")) {\n return false;\n } else {\n if (isRegExp$1(tokType.PATTERN)) {\n try {\n canMatchCharCode(lineTerminatorCharCodes, tokType.PATTERN);\n } catch (e) {\n return {\n issue: LexerDefinitionErrorType.IDENTIFY_TERMINATOR,\n errMsg: e.message\n };\n }\n return false;\n } else if (isString(tokType.PATTERN)) {\n return false;\n } else if (isCustomPattern(tokType)) {\n return { issue: LexerDefinitionErrorType.CUSTOM_LINE_BREAK };\n } else {\n throw Error(\"non exhaustive match\");\n }\n }\n }\n function buildLineBreakIssueMessage(tokType, details) {\n if (details.issue === LexerDefinitionErrorType.IDENTIFY_TERMINATOR) {\n return `Warning: unable to identify line terminator usage in pattern.\n\tThe problem is in the <${tokType.name}> Token Type\n\t Root cause: ${details.errMsg}.\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR`;\n } else if (details.issue === LexerDefinitionErrorType.CUSTOM_LINE_BREAK) {\n return `Warning: A Custom Token Pattern should specify the <line_breaks> option.\n\tThe problem is in the <${tokType.name}> Token Type\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK`;\n } else {\n throw Error(\"non exhaustive match\");\n }\n }\n function getCharCodes(charsOrCodes) {\n const charCodes = map(charsOrCodes, (numOrString) => {\n if (isString(numOrString)) {\n return numOrString.charCodeAt(0);\n } else {\n return numOrString;\n }\n });\n return charCodes;\n }\n function addToMapOfArrays(map2, key, value) {\n if (map2[key] === void 0) {\n map2[key] = [value];\n } else {\n map2[key].push(value);\n }\n }\n const minOptimizationVal = 256;\n let charCodeToOptimizedIdxMap = [];\n function charCodeToOptimizedIndex(charCode) {\n return charCode < minOptimizationVal ? charCode : charCodeToOptimizedIdxMap[charCode];\n }\n function initCharCodeToOptimizedIndexMap() {\n if (isEmpty(charCodeToOptimizedIdxMap)) {\n charCodeToOptimizedIdxMap = new Array(65536);\n for (let i = 0; i < 65536; i++) {\n charCodeToOptimizedIdxMap[i] = i > 255 ? 255 + ~~(i / 255) : i;\n }\n }\n }\n function tokenStructuredMatcher(tokInstance, tokConstructor) {\n const instanceType = tokInstance.tokenTypeIdx;\n if (instanceType === tokConstructor.tokenTypeIdx) {\n return true;\n } else {\n return tokConstructor.isParent === true && tokConstructor.categoryMatchesMap[instanceType] === true;\n }\n }\n function tokenStructuredMatcherNoCategories(token, tokType) {\n return token.tokenTypeIdx === tokType.tokenTypeIdx;\n }\n let tokenShortNameIdx = 1;\n const tokenIdxToClass = {};\n function augmentTokenTypes(tokenTypes) {\n const tokenTypesAndParents = expandCategories(tokenTypes);\n assignTokenDefaultProps(tokenTypesAndParents);\n assignCategoriesMapProp(tokenTypesAndParents);\n assignCategoriesTokensProp(tokenTypesAndParents);\n forEach(tokenTypesAndParents, (tokType) => {\n tokType.isParent = tokType.categoryMatches.length > 0;\n });\n }\n function expandCategories(tokenTypes) {\n let result = clone(tokenTypes);\n let categories = tokenTypes;\n let searching = true;\n while (searching) {\n categories = compact(flatten(map(categories, (currTokType) => currTokType.CATEGORIES)));\n const newCategories = difference$1(categories, result);\n result = result.concat(newCategories);\n if (isEmpty(newCategories)) {\n searching = false;\n } else {\n categories = newCategories;\n }\n }\n return result;\n }\n function assignTokenDefaultProps(tokenTypes) {\n forEach(tokenTypes, (currTokType) => {\n if (!hasShortKeyProperty(currTokType)) {\n tokenIdxToClass[tokenShortNameIdx] = currTokType;\n currTokType.tokenTypeIdx = tokenShortNameIdx++;\n }\n if (hasCategoriesProperty(currTokType) && !isArray$1(currTokType.CATEGORIES)) {\n currTokType.CATEGORIES = [currTokType.CATEGORIES];\n }\n if (!hasCategoriesProperty(currTokType)) {\n currTokType.CATEGORIES = [];\n }\n if (!hasExtendingTokensTypesProperty(currTokType)) {\n currTokType.categoryMatches = [];\n }\n if (!hasExtendingTokensTypesMapProperty(currTokType)) {\n currTokType.categoryMatchesMap = {};\n }\n });\n }\n function assignCategoriesTokensProp(tokenTypes) {\n forEach(tokenTypes, (currTokType) => {\n currTokType.categoryMatches = [];\n forEach(currTokType.categoryMatchesMap, (val, key) => {\n currTokType.categoryMatches.push(tokenIdxToClass[key].tokenTypeIdx);\n });\n });\n }\n function assignCategoriesMapProp(tokenTypes) {\n forEach(tokenTypes, (currTokType) => {\n singleAssignCategoriesToksMap([], currTokType);\n });\n }\n function singleAssignCategoriesToksMap(path, nextNode) {\n forEach(path, (pathNode) => {\n nextNode.categoryMatchesMap[pathNode.tokenTypeIdx] = true;\n });\n forEach(nextNode.CATEGORIES, (nextCategory) => {\n const newPath = path.concat(nextNode);\n if (!includes(newPath, nextCategory)) {\n singleAssignCategoriesToksMap(newPath, nextCategory);\n }\n });\n }\n function hasShortKeyProperty(tokType) {\n return has(tokType, \"tokenTypeIdx\");\n }\n function hasCategoriesProperty(tokType) {\n return has(tokType, \"CATEGORIES\");\n }\n function hasExtendingTokensTypesProperty(tokType) {\n return has(tokType, \"categoryMatches\");\n }\n function hasExtendingTokensTypesMapProperty(tokType) {\n return has(tokType, \"categoryMatchesMap\");\n }\n function isTokenType(tokType) {\n return has(tokType, \"tokenTypeIdx\");\n }\n const defaultLexerErrorProvider = {\n buildUnableToPopLexerModeMessage(token) {\n return `Unable to pop Lexer Mode after encountering Token ->${token.image}<- The Mode Stack is empty`;\n },\n buildUnexpectedCharactersMessage(fullText, startOffset, length, line, column) {\n return `unexpected character: ->${fullText.charAt(startOffset)}<- at offset: ${startOffset}, skipped ${length} characters.`;\n }\n };\n var LexerDefinitionErrorType;\n (function(LexerDefinitionErrorType2) {\n LexerDefinitionErrorType2[LexerDefinitionErrorType2[\"MISSING_PATTERN\"] = 0] = \"MISSING_PATTERN\";\n LexerDefinitionErrorType2[LexerDefinitionErrorType2[\"INVALID_PATTERN\"] = 1] = \"INVALID_PATTERN\";\n LexerDefinitionErrorType2[LexerDefinitionErrorType2[\"EOI_ANCHOR_FOUND\"] = 2] = \"EOI_ANCHOR_FOUND\";\n LexerDefinitionErrorType2[LexerDefinitionErrorType2[\"UNSUPPORTED_FLAGS_FOUND\"] = 3] = \"UNSUPPORTED_FLAGS_FOUND\";\n LexerDefinitionErrorType2[LexerDefinitionErrorType2[\"DUPLICATE_PATTERNS_FOUND\"] = 4] = \"DUPLICATE_PATTERNS_FOUND\";\n LexerDefinitionErrorType2[LexerDefinitionErrorType2[\"INVALID_GROUP_TYPE_FOUND\"] = 5] = \"INVALID_GROUP_TYPE_FOUND\";\n LexerDefinitionErrorType2[LexerDefinitionErrorType2[\"PUSH_MODE_DOES_NOT_EXIST\"] = 6] = \"PUSH_MODE_DOES_NOT_EXIST\";\n LexerDefinitionErrorType2[LexerDefinitionErrorType2[\"MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\"] = 7] = \"MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE\";\n LexerDefinitionErrorType2[LexerDefinitionErrorType2[\"MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\"] = 8] = \"MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY\";\n LexerDefinitionErrorType2[LexerDefinitionErrorType2[\"MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\"] = 9] = \"MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST\";\n LexerDefinitionErrorType2[LexerDefinitionErrorType2[\"LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\"] = 10] = \"LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED\";\n LexerDefinitionErrorType2[LexerDefinitionErrorType2[\"SOI_ANCHOR_FOUND\"] = 11] = \"SOI_ANCHOR_FOUND\";\n LexerDefinitionErrorType2[LexerDefinitionErrorType2[\"EMPTY_MATCH_PATTERN\"] = 12] = \"EMPTY_MATCH_PATTERN\";\n LexerDefinitionErrorType2[LexerDefinitionErrorType2[\"NO_LINE_BREAKS_FLAGS\"] = 13] = \"NO_LINE_BREAKS_FLAGS\";\n LexerDefinitionErrorType2[LexerDefinitionErrorType2[\"UNREACHABLE_PATTERN\"] = 14] = \"UNREACHABLE_PATTERN\";\n LexerDefinitionErrorType2[LexerDefinitionErrorType2[\"IDENTIFY_TERMINATOR\"] = 15] = \"IDENTIFY_TERMINATOR\";\n LexerDefinitionErrorType2[LexerDefinitionErrorType2[\"CUSTOM_LINE_BREAK\"] = 16] = \"CUSTOM_LINE_BREAK\";\n LexerDefinitionErrorType2[LexerDefinitionErrorType2[\"MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE\"] = 17] = \"MULTI_MODE_LEXER_LONGER_ALT_NOT_IN_CURRENT_MODE\";\n })(LexerDefinitionErrorType || (LexerDefinitionErrorType = {}));\n const DEFAULT_LEXER_CONFIG = {\n deferDefinitionErrorsHandling: false,\n positionTracking: \"full\",\n lineTerminatorsPattern: /\\n|\\r\\n?/g,\n lineTerminatorCharacters: [\"\\n\", \"\\r\"],\n ensureOptimizations: false,\n safeMode: false,\n errorMessageProvider: defaultLexerErrorProvider,\n traceInitPerf: false,\n skipValidations: false,\n recoveryEnabled: true\n };\n Object.freeze(DEFAULT_LEXER_CONFIG);\n class Lexer2 {\n constructor(lexerDefinition, config = DEFAULT_LEXER_CONFIG) {\n this.lexerDefinition = lexerDefinition;\n this.lexerDefinitionErrors = [];\n this.lexerDefinitionWarning = [];\n this.patternIdxToConfig = {};\n this.charCodeToPatternIdxToConfig = {};\n this.modes = [];\n this.emptyGroups = {};\n this.trackStartLines = true;\n this.trackEndLines = true;\n this.hasCustom = false;\n this.canModeBeOptimized = {};\n this.TRACE_INIT = (phaseDesc, phaseImpl) => {\n if (this.traceInitPerf === true) {\n this.traceInitIndent++;\n const indent = new Array(this.traceInitIndent + 1).join(\"\t\");\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n console.log(`${indent}--> <${phaseDesc}>`);\n }\n const { time, value } = timer(phaseImpl);\n const traceMethod = time > 10 ? console.warn : console.log;\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n traceMethod(`${indent}<-- <${phaseDesc}> time: ${time}ms`);\n }\n this.traceInitIndent--;\n return value;\n } else {\n return phaseImpl();\n }\n };\n if (typeof config === \"boolean\") {\n throw Error(\n \"The second argument to the Lexer constructor is now an ILexerConfig Object.\\na boolean 2nd argument is no longer supported\"\n );\n }\n this.config = assign$1({}, DEFAULT_LEXER_CONFIG, config);\n const traceInitVal = this.config.traceInitPerf;\n if (traceInitVal === true) {\n this.traceInitMaxIdent = Infinity;\n this.traceInitPerf = true;\n } else if (typeof traceInitVal === \"number\") {\n this.traceInitMaxIdent = traceInitVal;\n this.traceInitPerf = true;\n }\n this.traceInitIndent = -1;\n this.TRACE_INIT(\"Lexer Constructor\", () => {\n let actualDefinition;\n let hasOnlySingleMode = true;\n this.TRACE_INIT(\"Lexer Config handling\", () => {\n if (this.config.lineTerminatorsPattern === DEFAULT_LEXER_CONFIG.lineTerminatorsPattern) {\n this.config.lineTerminatorsPattern = LineTerminatorOptimizedTester;\n } else {\n if (this.config.lineTerminatorCharacters === DEFAULT_LEXER_CONFIG.lineTerminatorCharacters) {\n throw Error(\n \"Error: Missing <lineTerminatorCharacters> property on the Lexer config.\\n\tFor details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS\"\n );\n }\n }\n if (config.safeMode && config.ensureOptimizations) {\n throw Error('\"safeMode\" and \"ensureOptimizations\" flags are mutually exclusive.');\n }\n this.trackStartLines = /full|onlyStart/i.test(this.config.positionTracking);\n this.trackEndLines = /full/i.test(this.config.positionTracking);\n if (isArray$1(lexerDefinition)) {\n actualDefinition = {\n modes: { defaultMode: clone(lexerDefinition) },\n defaultMode: DEFAULT_MODE\n };\n } else {\n hasOnlySingleMode = false;\n actualDefinition = clone(lexerDefinition);\n }\n });\n if (this.config.skipValidations === false) {\n this.TRACE_INIT(\"performRuntimeChecks\", () => {\n this.lexerDefinitionErrors = this.lexerDefinitionErrors.concat(\n performRuntimeChecks(actualDefinition, this.trackStartLines, this.config.lineTerminatorCharacters)\n );\n });\n this.TRACE_INIT(\"performWarningRuntimeChecks\", () => {\n this.lexerDefinitionWarning = this.lexerDefinitionWarning.concat(\n performWarningRuntimeChecks(actualDefinition, this.trackStartLines, this.config.lineTerminatorCharacters)\n );\n });\n }\n actualDefinition.modes = actualDefinition.modes ? actualDefinition.modes : {};\n forEach(actualDefinition.modes, (currModeValue, currModeName) => {\n actualDefinition.modes[currModeName] = reject(currModeValue, (currTokType) => isUndefined(currTokType));\n });\n const allModeNames = keys(actualDefinition.modes);\n forEach(actualDefinition.modes, (currModDef, currModName) => {\n this.TRACE_INIT(`Mode: <${currModName}> processing`, () => {\n this.modes.push(currModName);\n if (this.config.skipValidations === false) {\n this.TRACE_INIT(`validatePatterns`, () => {\n this.lexerDefinitionErrors = this.lexerDefinitionErrors.concat(\n validatePatterns(currModDef, allModeNames)\n );\n });\n }\n if (isEmpty(this.lexerDefinitionErrors)) {\n augmentTokenTypes(currModDef);\n let currAnalyzeResult;\n this.TRACE_INIT(`analyzeTokenTypes`, () => {\n currAnalyzeResult = analyzeTokenTypes(currModDef, {\n lineTerminatorCharacters: this.config.lineTerminatorCharacters,\n positionTracking: config.positionTracking,\n ensureOptimizations: config.ensureOptimizations,\n safeMode: config.safeMode,\n tracer: this.TRACE_INIT\n });\n });\n this.patternIdxToConfig[currModName] = currAnalyzeResult.patternIdxToConfig;\n this.charCodeToPatternIdxToConfig[currModName] = currAnalyzeResult.charCodeToPatternIdxToConfig;\n this.emptyGroups = assign$1({}, this.emptyGroups, currAnalyzeResult.emptyGroups);\n this.hasCustom = currAnalyzeResult.hasCustom || this.hasCustom;\n this.canModeBeOptimized[currModName] = currAnalyzeResult.canBeOptimized;\n }\n });\n });\n this.defaultMode = actualDefinition.defaultMode;\n if (!isEmpty(this.lexerDefinitionErrors) && !this.config.deferDefinitionErrorsHandling) {\n const allErrMessages = map(this.lexerDefinitionErrors, (error) => {\n return error.message;\n });\n const allErrMessagesString = allErrMessages.join(\"-----------------------\\n\");\n throw new Error(\"Errors detected in definition of Lexer:\\n\" + allErrMessagesString);\n }\n forEach(this.lexerDefinitionWarning, (warningDescriptor) => {\n PRINT_WARNING(warningDescriptor.message);\n });\n this.TRACE_INIT(\"Choosing sub-methods implementations\", () => {\n if (SUPPORT_STICKY) {\n this.chopInput = identity;\n this.match = this.matchWithTest;\n } else {\n this.updateLastIndex = noop;\n this.match = this.matchWithExec;\n }\n if (hasOnlySingleMode) {\n this.handleModes = noop;\n }\n if (this.trackStartLines === false) {\n this.computeNewColumn = identity;\n }\n if (this.trackEndLines === false) {\n this.updateTokenEndLineColumnLocation = noop;\n }\n if (/full/i.test(this.config.positionTracking)) {\n this.createTokenInstance = this.createFullToken;\n } else if (/onlyStart/i.test(this.config.positionTracking)) {\n this.createTokenInstance = this.createStartOnlyToken;\n } else if (/onlyOffset/i.test(this.config.positionTracking)) {\n this.createTokenInstance = this.createOffsetOnlyToken;\n } else {\n throw Error(`Invalid <positionTracking> config option: \"${this.config.positionTracking}\"`);\n }\n if (this.hasCustom) {\n this.addToken = this.addTokenUsingPush;\n this.handlePayload = this.handlePayloadWithCustom;\n } else {\n this.addToken = this.addTokenUsingMemberAccess;\n this.handlePayload = this.handlePayloadNoCustom;\n }\n });\n this.TRACE_INIT(\"Failed Optimization Warnings\", () => {\n const unOptimizedModes = reduce(\n this.canModeBeOptimized,\n (cannotBeOptimized, canBeOptimized, modeName) => {\n if (canBeOptimized === false) {\n cannotBeOptimized.push(modeName);\n }\n return cannotBeOptimized;\n },\n []\n );\n if (config.ensureOptimizations && !isEmpty(unOptimizedModes)) {\n throw Error(\n `Lexer Modes: < ${unOptimizedModes.join(\", \")} > cannot be optimized.\n\t Disable the \"ensureOptimizations\" lexer config flag to silently ignore this and run the lexer in an un-optimized mode.\n\t Or inspect the console log for details on how to resolve these issues.`\n );\n }\n });\n this.TRACE_INIT(\"clearRegExpParserCache\", () => {\n clearRegExpParserCache();\n });\n this.TRACE_INIT(\"toFastProperties\", () => {\n toFastProperties(this);\n });\n });\n }\n tokenize(text, initialMode = this.defaultMode) {\n if (!isEmpty(this.lexerDefinitionErrors)) {\n const allErrMessages = map(this.lexerDefinitionErrors, (error) => {\n return error.message;\n });\n const allErrMessagesString = allErrMessages.join(\"-----------------------\\n\");\n throw new Error(\"Unable to Tokenize because Errors detected in definition of Lexer:\\n\" + allErrMessagesString);\n }\n return this.tokenizeInternal(text, initialMode);\n }\n // There is quite a bit of duplication between this and \"tokenizeInternalLazy\"\n // This is intentional due to performance considerations.\n // this method also used quite a bit of `!` none null assertions because it is too optimized\n // for `tsc` to always understand it is \"safe\"\n tokenizeInternal(text, initialMode) {\n let i, j, k, matchAltImage, longerAlt, matchedImage, payload, altPayload, imageLength, group, tokType, newToken, errLength, msg, match;\n const orgText = text;\n const orgLength = orgText.length;\n let offset = 0;\n let matchedTokensIndex = 0;\n const guessedNumberOfTokens = this.hasCustom ? 0 : Math.floor(text.length / 10);\n const matchedTokens = new Array(guessedNumberOfTokens);\n const errors = [];\n let line = this.trackStartLines ? 1 : void 0;\n let column = this.trackStartLines ? 1 : void 0;\n const groups = cloneEmptyGroups(this.emptyGroups);\n const trackLines = this.trackStartLines;\n const lineTerminatorPattern = this.config.lineTerminatorsPattern;\n let currModePatternsLength = 0;\n let patternIdxToConfig = [];\n let currCharCodeToPatternIdxToConfig = [];\n const modeStack = [];\n const emptyArray = [];\n Object.freeze(emptyArray);\n let getPossiblePatterns;\n function getPossiblePatternsSlow() {\n return patternIdxToConfig;\n }\n function getPossiblePatternsOptimized(charCode) {\n const optimizedCharIdx = charCodeToOptimizedIndex(charCode);\n const possiblePatterns = currCharCodeToPatternIdxToConfig[optimizedCharIdx];\n if (possiblePatterns === void 0) {\n return emptyArray;\n } else {\n return possiblePatterns;\n }\n }\n const pop_mode = (popToken) => {\n if (modeStack.length === 1 && // if we have both a POP_MODE and a PUSH_MODE this is in-fact a \"transition\"\n // So no error should occur.\n popToken.tokenType.PUSH_MODE === void 0) {\n const msg2 = this.config.errorMessageProvider.buildUnableToPopLexerModeMessage(popToken);\n errors.push({\n offset: popToken.startOffset,\n line: popToken.startLine,\n column: popToken.startColumn,\n length: popToken.image.length,\n message: msg2\n });\n } else {\n modeStack.pop();\n const newMode = last(modeStack);\n patternIdxToConfig = this.patternIdxToConfig[newMode];\n currCharCodeToPatternIdxToConfig = this.charCodeToPatternIdxToConfig[newMode];\n currModePatternsLength = patternIdxToConfig.length;\n const modeCanBeOptimized = this.canModeBeOptimized[newMode] && this.config.safeMode === false;\n if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) {\n getPossiblePatterns = getPossiblePatternsOptimized;\n } else {\n getPossiblePatterns = getPossiblePatternsSlow;\n }\n }\n };\n function push_mode(newMode) {\n modeStack.push(newMode);\n currCharCodeToPatternIdxToConfig = this.charCodeToPatternIdxToConfig[newMode];\n patternIdxToConfig = this.patternIdxToConfig[newMode];\n currModePatternsLength = patternIdxToConfig.length;\n currModePatternsLength = patternIdxToConfig.length;\n const modeCanBeOptimized = this.canModeBeOptimized[newMode] && this.config.safeMode === false;\n if (currCharCodeToPatternIdxToConfig && modeCanBeOptimized) {\n getPossiblePatterns = getPossiblePatternsOptimized;\n } else {\n getPossiblePatterns = getPossiblePatternsSlow;\n }\n }\n push_mode.call(this, initialMode);\n let currConfig;\n const recoveryEnabled = this.config.recoveryEnabled;\n while (offset < orgLength) {\n matchedImage = null;\n const nextCharCode = orgText.charCodeAt(offset);\n const chosenPatternIdxToConfig = getPossiblePatterns(nextCharCode);\n const chosenPatternsLength = chosenPatternIdxToConfig.length;\n for (i = 0; i < chosenPatternsLength; i++) {\n currConfig = chosenPatternIdxToConfig[i];\n const currPattern = currConfig.pattern;\n payload = null;\n const singleCharCode = currConfig.short;\n if (singleCharCode !== false) {\n if (nextCharCode === singleCharCode) {\n matchedImage = currPattern;\n }\n } else if (currConfig.isCustom === true) {\n match = currPattern.exec(orgText, offset, matchedTokens, groups);\n if (match !== null) {\n matchedImage = match[0];\n if (match.payload !== void 0) {\n payload = match.payload;\n }\n } else {\n matchedImage = null;\n }\n } else {\n this.updateLastIndex(currPattern, offset);\n matchedImage = this.match(currPattern, text, offset);\n }\n if (matchedImage !== null) {\n longerAlt = currConfig.longerAlt;\n if (longerAlt !== void 0) {\n const longerAltLength = longerAlt.length;\n for (k = 0; k < longerAltLength; k++) {\n const longerAltConfig = patternIdxToConfig[longerAlt[k]];\n const longerAltPattern = longerAltConfig.pattern;\n altPayload = null;\n if (longerAltConfig.isCustom === true) {\n match = longerAltPattern.exec(orgText, offset, matchedTokens, groups);\n if (match !== null) {\n matchAltImage = match[0];\n if (match.payload !== void 0) {\n altPayload = match.payload;\n }\n } else {\n matchAltImage = null;\n }\n } else {\n this.updateLastIndex(longerAltPattern, offset);\n matchAltImage = this.match(longerAltPattern, text, offset);\n }\n if (matchAltImage && matchAltImage.length > matchedImage.length) {\n matchedImage = matchAltImage;\n payload = altPayload;\n currConfig = longerAltConfig;\n break;\n }\n }\n }\n break;\n }\n }\n if (matchedImage !== null) {\n imageLength = matchedImage.length;\n group = currConfig.group;\n if (group !== void 0) {\n tokType = currConfig.tokenTypeIdx;\n newToken = this.createTokenInstance(\n matchedImage,\n offset,\n tokType,\n currConfig.tokenType,\n line,\n column,\n imageLength\n );\n this.handlePayload(newToken, payload);\n if (group === false) {\n matchedTokensIndex = this.addToken(matchedTokens, matchedTokensIndex, newToken);\n } else {\n groups[group].push(newToken);\n }\n }\n text = this.chopInput(text, imageLength);\n offset = offset + imageLength;\n column = this.computeNewColumn(column, imageLength);\n if (trackLines === true && currConfig.canLineTerminator === true) {\n let numOfLTsInMatch = 0;\n let foundTerminator;\n let lastLTEndOffset;\n lineTerminatorPattern.lastIndex = 0;\n do {\n foundTerminator = lineTerminatorPattern.test(matchedImage);\n if (foundTerminator === true) {\n lastLTEndOffset = lineTerminatorPattern.lastIndex - 1;\n numOfLTsInMatch++;\n }\n } while (foundTerminator === true);\n if (numOfLTsInMatch !== 0) {\n line = line + numOfLTsInMatch;\n column = imageLength - lastLTEndOffset;\n this.updateTokenEndLineColumnLocation(\n newToken,\n group,\n lastLTEndOffset,\n numOfLTsInMatch,\n line,\n column,\n imageLength\n );\n }\n }\n this.handleModes(currConfig, pop_mode, push_mode, newToken);\n } else {\n const errorStartOffset = offset;\n const errorLine = line;\n const errorColumn = column;\n let foundResyncPoint = recoveryEnabled === false;\n while (foundResyncPoint === false && offset < orgLength) {\n text = this.chopInput(text, 1);\n offset++;\n for (j = 0; j < currModePatternsLength; j++) {\n const currConfig2 = patternIdxToConfig[j];\n const currPattern = currConfig2.pattern;\n const singleCharCode = currConfig2.short;\n if (singleCharCode !== false) {\n if (orgText.charCodeAt(offset) === singleCharCode) {\n foundResyncPoint = true;\n }\n } else if (currConfig2.isCustom === true) {\n foundResyncPoint = currPattern.exec(orgText, offset, matchedTokens, groups) !== null;\n } else {\n this.updateLastIndex(currPattern, offset);\n foundResyncPoint = currPattern.exec(text) !== null;\n }\n if (foundResyncPoint === true) {\n break;\n }\n }\n }\n errLength = offset - errorStartOffset;\n column = this.computeNewColumn(column, errLength);\n msg = this.config.errorMessageProvider.buildUnexpectedCharactersMessage(\n orgText,\n errorStartOffset,\n errLength,\n errorLine,\n errorColumn\n );\n errors.push({\n offset: errorStartOffset,\n line: errorLine,\n column: errorColumn,\n length: errLength,\n message: msg\n });\n if (recoveryEnabled === false) {\n break;\n }\n }\n }\n if (!this.hasCustom) {\n matchedTokens.length = matchedTokensIndex;\n }\n return {\n tokens: matchedTokens,\n groups,\n errors\n };\n }\n handleModes(config, pop_mode, push_mode, newToken) {\n if (config.pop === true) {\n const pushMode = config.push;\n pop_mode(newToken);\n if (pushMode !== void 0) {\n push_mode.call(this, pushMode);\n }\n } else if (config.push !== void 0) {\n push_mode.call(this, config.push);\n }\n }\n chopInput(text, length) {\n return text.substring(length);\n }\n updateLastIndex(regExp, newLastIndex) {\n regExp.lastIndex = newLastIndex;\n }\n // TODO: decrease this under 600 characters? inspect stripping comments option in TSC compiler\n updateTokenEndLineColumnLocation(newToken, group, lastLTIdx, numOfLTsInMatch, line, column, imageLength) {\n let lastCharIsLT, fixForEndingInLT;\n if (group !== void 0) {\n lastCharIsLT = lastLTIdx === imageLength - 1;\n fixForEndingInLT = lastCharIsLT ? -1 : 0;\n if (!(numOfLTsInMatch === 1 && lastCharIsLT === true)) {\n newToken.endLine = line + fixForEndingInLT;\n newToken.endColumn = column - 1 + -fixForEndingInLT;\n }\n }\n }\n computeNewColumn(oldColumn, imageLength) {\n return oldColumn + imageLength;\n }\n createOffsetOnlyToken(image, startOffset, tokenTypeIdx, tokenType) {\n return {\n image,\n startOffset,\n tokenTypeIdx,\n tokenType\n };\n }\n createStartOnlyToken(image, startOffset, tokenTypeIdx, tokenType, startLine, startColumn) {\n return {\n image,\n startOffset,\n startLine,\n startColumn,\n tokenTypeIdx,\n tokenType\n };\n }\n createFullToken(image, startOffset, tokenTypeIdx, tokenType, startLine, startColumn, imageLength) {\n return {\n image,\n startOffset,\n endOffset: startOffset + imageLength - 1,\n startLine,\n endLine: startLine,\n startColumn,\n endColumn: startColumn + imageLength - 1,\n tokenTypeIdx,\n tokenType\n };\n }\n addTokenUsingPush(tokenVector, index, tokenToAdd) {\n tokenVector.push(tokenToAdd);\n return index;\n }\n addTokenUsingMemberAccess(tokenVector, index, tokenToAdd) {\n tokenVector[index] = tokenToAdd;\n index++;\n return index;\n }\n handlePayloadNoCustom(token, payload) {\n }\n handlePayloadWithCustom(token, payload) {\n if (payload !== null) {\n token.payload = payload;\n }\n }\n matchWithTest(pattern, text, offset) {\n const found = pattern.test(text);\n if (found === true) {\n return text.substring(offset, pattern.lastIndex);\n }\n return null;\n }\n matchWithExec(pattern, text) {\n const regExpArray = pattern.exec(text);\n return regExpArray !== null ? regExpArray[0] : null;\n }\n }\n Lexer2.SKIPPED = \"This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.\";\n Lexer2.NA = /NOT_APPLICABLE/;\n function tokenLabel(tokType) {\n if (hasTokenLabel(tokType)) {\n return tokType.LABEL;\n } else {\n return tokType.name;\n }\n }\n function hasTokenLabel(obj) {\n return isString(obj.LABEL) && obj.LABEL !== \"\";\n }\n const PARENT = \"parent\";\n const CATEGORIES = \"categories\";\n const LABEL = \"label\";\n const GROUP = \"group\";\n const PUSH_MODE = \"push_mode\";\n const POP_MODE = \"pop_mode\";\n const LONGER_ALT = \"longer_alt\";\n const LINE_BREAKS = \"line_breaks\";\n const START_CHARS_HINT = \"start_chars_hint\";\n function createToken2(config) {\n return createTokenInternal(config);\n }\n function createTokenInternal(config) {\n const pattern = config.pattern;\n const tokenType = {};\n tokenType.name = config.name;\n if (!isUndefined(pattern)) {\n tokenType.PATTERN = pattern;\n }\n if (has(config, PARENT)) {\n throw \"The parent property is no longer supported.\\nSee: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.\";\n }\n if (has(config, CATEGORIES)) {\n tokenType.CATEGORIES = config[CATEGORIES];\n }\n augmentTokenTypes([tokenType]);\n if (has(config, LABEL)) {\n tokenType.LABEL = config[LABEL];\n }\n if (has(config, GROUP)) {\n tokenType.GROUP = config[GROUP];\n }\n if (has(config, POP_MODE)) {\n tokenType.POP_MODE = config[POP_MODE];\n }\n if (has(config, PUSH_MODE)) {\n tokenType.PUSH_MODE = config[PUSH_MODE];\n }\n if (has(config, LONGER_ALT)) {\n tokenType.LONGER_ALT = config[LONGER_ALT];\n }\n if (has(config, LINE_BREAKS)) {\n tokenType.LINE_BREAKS = config[LINE_BREAKS];\n }\n if (has(config, START_CHARS_HINT)) {\n tokenType.START_CHARS_HINT = config[START_CHARS_HINT];\n }\n return tokenType;\n }\n const EOF = createToken2({ name: \"EOF\", pattern: Lexer2.NA });\n augmentTokenTypes([EOF]);\n function createTokenInstance(tokType, image, startOffset, endOffset, startLine, endLine, startColumn, endColumn) {\n return {\n image,\n startOffset,\n endOffset,\n startLine,\n endLine,\n startColumn,\n endColumn,\n tokenTypeIdx: tokType.tokenTypeIdx,\n tokenType: tokType\n };\n }\n function tokenMatcher(token, tokType) {\n return tokenStructuredMatcher(token, tokType);\n }\n const defaultParserErrorProvider = {\n buildMismatchTokenMessage({ expected, actual, previous, ruleName }) {\n const hasLabel = hasTokenLabel(expected);\n const expectedMsg = hasLabel ? `--> ${tokenLabel(expected)} <--` : `token of type --> ${expected.name} <--`;\n const msg = `Expecting ${expectedMsg} but found --> '${actual.image}' <--`;\n return msg;\n },\n buildNotAllInputParsedMessage({ firstRedundant, ruleName }) {\n return \"Redundant input, expecting EOF but found: \" + firstRedundant.image;\n },\n buildNoViableAltMessage({ expectedPathsPerAlt, actual, previous, customUserDescription, ruleName }) {\n const errPrefix = \"Expecting: \";\n const actualText = head(actual).image;\n const errSuffix = \"\\nbut found: '\" + actualText + \"'\";\n if (customUserDescription) {\n return errPrefix + customUserDescription + errSuffix;\n } else {\n const allLookAheadPaths = reduce(expectedPathsPerAlt, (result, currAltPaths) => result.concat(currAltPaths), []);\n const nextValidTokenSequences = map(\n allLookAheadPaths,\n (currPath) => `[${map(currPath, (currTokenType) => tokenLabel(currTokenType)).join(\", \")}]`\n );\n const nextValidSequenceItems = map(nextValidTokenSequences, (itemMsg, idx) => ` ${idx + 1}. ${itemMsg}`);\n const calculatedDescription = `one of these possible Token sequences:\n${nextValidSequenceItems.join(\"\\n\")}`;\n return errPrefix + calculatedDescription + errSuffix;\n }\n },\n buildEarlyExitMessage({ expectedIterationPaths, actual, customUserDescription, ruleName }) {\n const errPrefix = \"Expecting: \";\n const actualText = head(actual).image;\n const errSuffix = \"\\nbut found: '\" + actualText + \"'\";\n if (customUserDescription) {\n return errPrefix + customUserDescription + errSuffix;\n } else {\n const nextValidTokenSequences = map(\n expectedIterationPaths,\n (currPath) => `[${map(currPath, (currTokenType) => tokenLabel(currTokenType)).join(\",\")}]`\n );\n const calculatedDescription = `expecting at least one iteration which starts with one of these possible Token sequences::\n <${nextValidTokenSequences.join(\" ,\")}>`;\n return errPrefix + calculatedDescription + errSuffix;\n }\n }\n };\n Object.freeze(defaultParserErrorProvider);\n const defaultGrammarResolverErrorProvider = {\n buildRuleNotFoundError(topLevelRule, undefinedRule) {\n const msg = \"Invalid grammar, reference to a rule which is not defined: ->\" + undefinedRule.nonTerminalName + \"<-\\ninside top level rule: ->\" + topLevelRule.name + \"<-\";\n return msg;\n }\n };\n const defaultGrammarValidatorErrorProvider = {\n buildDuplicateFoundError(topLevelRule, duplicateProds) {\n function getExtraProductionArgument2(prod) {\n if (prod instanceof Terminal) {\n return prod.terminalType.name;\n } else if (prod instanceof NonTerminal) {\n return prod.nonTerminalName;\n } else {\n return \"\";\n }\n }\n const topLevelName = topLevelRule.name;\n const duplicateProd = head(duplicateProds);\n const index = duplicateProd.idx;\n const dslName = getProductionDslName(duplicateProd);\n const extraArgument = getExtraProductionArgument2(duplicateProd);\n const hasExplicitIndex = index > 0;\n let msg = `->${dslName}${hasExplicitIndex ? index : \"\"}<- ${extraArgument ? `with argument: ->${extraArgument}<-` : \"\"}\n appears more than once (${duplicateProds.length} times) in the top level rule: ->${topLevelName}<-. \n For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES \n `;\n msg = msg.replace(/[ \\t]+/g, \" \");\n msg = msg.replace(/\\s\\s+/g, \"\\n\");\n return msg;\n },\n buildNamespaceConflictError(rule) {\n const errMsg = `Namespace conflict found in grammar.\nThe grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <${rule.name}>.\nTo resolve this make sure each Terminal and Non-Terminal names are unique\nThis is easy to accomplish by using the convention that Terminal names start with an uppercase letter\nand Non-Terminal names start with a lower case letter.`;\n return errMsg;\n },\n buildAlternationPrefixAmbiguityError(options) {\n const pathMsg = map(options.prefixPath, (currTok) => tokenLabel(currTok)).join(\", \");\n const occurrence = options.alternation.idx === 0 ? \"\" : options.alternation.idx;\n const errMsg = `Ambiguous alternatives: <${options.ambiguityIndices.join(\" ,\")}> due to common lookahead prefix\nin <OR${occurrence}> inside <${options.topLevelRule.name}> Rule,\n<${pathMsg}> may appears as a prefix path in all these alternatives.\nSee: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX\nFor Further details.`;\n return errMsg;\n },\n buildAlternationAmbiguityError(options) {\n const pathMsg = map(options.prefixPath, (currtok) => tokenLabel(currtok)).join(\", \");\n const occurrence = options.alternation.idx === 0 ? \"\" : options.alternation.idx;\n let currMessage = `Ambiguous Alternatives Detected: <${options.ambiguityIndices.join(\" ,\")}> in <OR${occurrence}> inside <${options.topLevelRule.name}> Rule,\n<${pathMsg}> may appears as a prefix path in all these alternatives.\n`;\n currMessage = currMessage + `See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES\nFor Further details.`;\n return currMessage;\n },\n buildEmptyRepetitionError(options) {\n let dslName = getProductionDslName(options.repetition);\n if (options.repetition.idx !== 0) {\n dslName += options.repetition.idx;\n }\n const errMsg = `The repetition <${dslName}> within Rule <${options.topLevelRule.name}> can never consume any tokens.\nThis could lead to an infinite loop.`;\n return errMsg;\n },\n // TODO: remove - `errors_public` from nyc.config.js exclude\n // once this method is fully removed from this file\n buildTokenNameError(options) {\n return \"deprecated\";\n },\n buildEmptyAlternationError(options) {\n const errMsg = `Ambiguous empty alternative: <${options.emptyChoiceIdx + 1}> in <OR${options.alternation.idx}> inside <${options.topLevelRule.name}> Rule.\nOnly the last alternative may be an empty alternative.`;\n return errMsg;\n },\n buildTooManyAlternativesError(options) {\n const errMsg = `An Alternation cannot have more than 256 alternatives:\n<OR${options.alternation.idx}> inside <${options.topLevelRule.name}> Rule.\n has ${options.alternation.definition.length + 1} alternatives.`;\n return errMsg;\n },\n buildLeftRecursionError(options) {\n const ruleName = options.topLevelRule.name;\n const pathNames = map(options.leftRecursionPath, (currRule) => currRule.name);\n const leftRecursivePath = `${ruleName} --> ${pathNames.concat([ruleName]).join(\" --> \")}`;\n const errMsg = `Left Recursion found in grammar.\nrule: <${ruleName}> can be invoked from itself (directly or indirectly)\nwithout consuming any Tokens. The grammar path that causes this is: \n ${leftRecursivePath}\n To fix this refactor your grammar to remove the left recursion.\nsee: https://en.wikipedia.org/wiki/LL_parser#Left_factoring.`;\n return errMsg;\n },\n // TODO: remove - `errors_public` from nyc.config.js exclude\n // once this method is fully removed from this file\n buildInvalidRuleNameError(options) {\n return \"deprecated\";\n },\n buildDuplicateRuleNameError(options) {\n let ruleName;\n if (options.topLevelRule instanceof Rule) {\n ruleName = options.topLevelRule.name;\n } else {\n ruleName = options.topLevelRule;\n }\n const errMsg = `Duplicate definition, rule: ->${ruleName}<- is already defined in the grammar: ->${options.grammarName}<-`;\n return errMsg;\n }\n };\n function resolveGrammar$1(topLevels, errMsgProvider) {\n const refResolver = new GastRefResolverVisitor(topLevels, errMsgProvider);\n refResolver.resolveRefs();\n return refResolver.errors;\n }\n class GastRefResolverVisitor extends GAstVisitor {\n constructor(nameToTopRule, errMsgProvider) {\n super();\n this.nameToTopRule = nameToTopRule;\n this.errMsgProvider = errMsgProvider;\n this.errors = [];\n }\n resolveRefs() {\n forEach(values(this.nameToTopRule), (prod) => {\n this.currTopLevel = prod;\n prod.accept(this);\n });\n }\n visitNonTerminal(node) {\n const ref = this.nameToTopRule[node.nonTerminalName];\n if (!ref) {\n const msg = this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel, node);\n this.errors.push({\n message: msg,\n type: ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,\n ruleName: this.currTopLevel.name,\n unresolvedRefName: node.nonTerminalName\n });\n } else {\n node.referencedRule = ref;\n }\n }\n }\n class AbstractNextPossibleTokensWalker extends RestWalker {\n constructor(topProd, path) {\n super();\n this.topProd = topProd;\n this.path = path;\n this.possibleTokTypes = [];\n this.nextProductionName = \"\";\n this.nextProductionOccurrence = 0;\n this.found = false;\n this.isAtEndOfPath = false;\n }\n startWalking() {\n this.found = false;\n if (this.path.ruleStack[0] !== this.topProd.name) {\n throw Error(\"The path does not start with the walker's top Rule!\");\n }\n this.ruleStack = clone(this.path.ruleStack).reverse();\n this.occurrenceStack = clone(this.path.occurrenceStack).reverse();\n this.ruleStack.pop();\n this.occurrenceStack.pop();\n this.updateExpectedNext();\n this.walk(this.topProd);\n return this.possibleTokTypes;\n }\n walk(prod, prevRest = []) {\n if (!this.found) {\n super.walk(prod, prevRest);\n }\n }\n walkProdRef(refProd, currRest, prevRest) {\n if (refProd.referencedRule.name === this.nextProductionName && refProd.idx === this.nextProductionOccurrence) {\n const fullRest = currRest.concat(prevRest);\n this.updateExpectedNext();\n this.walk(refProd.referencedRule, fullRest);\n }\n }\n updateExpectedNext() {\n if (isEmpty(this.ruleStack)) {\n this.nextProductionName = \"\";\n this.nextProductionOccurrence = 0;\n this.isAtEndOfPath = true;\n } else {\n this.nextProductionName = this.ruleStack.pop();\n this.nextProductionOccurrence = this.occurrenceStack.pop();\n }\n }\n }\n class NextAfterTokenWalker extends AbstractNextPossibleTokensWalker {\n constructor(topProd, path) {\n super(topProd, path);\n this.path = path;\n this.nextTerminalName = \"\";\n this.nextTerminalOccurrence = 0;\n this.nextTerminalName = this.path.lastTok.name;\n this.nextTerminalOccurrence = this.path.lastTokOccurrence;\n }\n walkTerminal(terminal, currRest, prevRest) {\n if (this.isAtEndOfPath && terminal.terminalType.name === this.nextTerminalName && terminal.idx === this.nextTerminalOccurrence && !this.found) {\n const fullRest = currRest.concat(prevRest);\n const restProd = new Alternative({ definition: fullRest });\n this.possibleTokTypes = first(restProd);\n this.found = true;\n }\n }\n }\n class AbstractNextTerminalAfterProductionWalker extends RestWalker {\n constructor(topRule, occurrence) {\n super();\n this.topRule = topRule;\n this.occurrence = occurrence;\n this.result = {\n token: void 0,\n occurrence: void 0,\n isEndOfRule: void 0\n };\n }\n startWalking() {\n this.walk(this.topRule);\n return this.result;\n }\n }\n class NextTerminalAfterManyWalker extends AbstractNextTerminalAfterProductionWalker {\n walkMany(manyProd, currRest, prevRest) {\n if (manyProd.idx === this.occurrence) {\n const firstAfterMany = head(currRest.concat(prevRest));\n this.result.isEndOfRule = firstAfterMany === void 0;\n if (firstAfterMany instanceof Terminal) {\n this.result.token = firstAfterMany.terminalType;\n this.result.occurrence = firstAfterMany.idx;\n }\n } else {\n super.walkMany(manyProd, currRest, prevRest);\n }\n }\n }\n class NextTerminalAfterManySepWalker extends AbstractNextTerminalAfterProductionWalker {\n walkManySep(manySepProd, currRest, prevRest) {\n if (manySepProd.idx === this.occurrence) {\n const firstAfterManySep = head(currRest.concat(prevRest));\n this.result.isEndOfRule = firstAfterManySep === void 0;\n if (firstAfterManySep instanceof Terminal) {\n this.result.token = firstAfterManySep.terminalType;\n this.result.occurrence = firstAfterManySep.idx;\n }\n } else {\n super.walkManySep(manySepProd, currRest, prevRest);\n }\n }\n }\n class NextTerminalAfterAtLeastOneWalker extends AbstractNextTerminalAfterProductionWalker {\n walkAtLeastOne(atLeastOneProd, currRest, prevRest) {\n if (atLeastOneProd.idx === this.occurrence) {\n const firstAfterAtLeastOne = head(currRest.concat(prevRest));\n this.result.isEndOfRule = firstAfterAtLeastOne === void 0;\n if (firstAfterAtLeastOne instanceof Terminal) {\n this.result.token = firstAfterAtLeastOne.terminalType;\n this.result.occurrence = firstAfterAtLeastOne.idx;\n }\n } else {\n super.walkAtLeastOne(atLeastOneProd, currRest, prevRest);\n }\n }\n }\n class NextTerminalAfterAtLeastOneSepWalker extends AbstractNextTerminalAfterProductionWalker {\n walkAtLeastOneSep(atleastOneSepProd, currRest, prevRest) {\n if (atleastOneSepProd.idx === this.occurrence) {\n const firstAfterfirstAfterAtLeastOneSep = head(currRest.concat(prevRest));\n this.result.isEndOfRule = firstAfterfirstAfterAtLeastOneSep === void 0;\n if (firstAfterfirstAfterAtLeastOneSep instanceof Terminal) {\n this.result.token = firstAfterfirstAfterAtLeastOneSep.terminalType;\n this.result.occurrence = firstAfterfirstAfterAtLeastOneSep.idx;\n }\n } else {\n super.walkAtLeastOneSep(atleastOneSepProd, currRest, prevRest);\n }\n }\n }\n function possiblePathsFrom(targetDef, maxLength, currPath = []) {\n currPath = clone(currPath);\n let result = [];\n let i = 0;\n function remainingPathWith(nextDef) {\n return nextDef.concat(drop(targetDef, i + 1));\n }\n function getAlternativesForProd(definition) {\n const alternatives = possiblePathsFrom(remainingPathWith(definition), maxLength, currPath);\n return result.concat(alternatives);\n }\n while (currPath.length < maxLength && i < targetDef.length) {\n const prod = targetDef[i];\n if (prod instanceof Alternative) {\n return getAlternativesForProd(prod.definition);\n } else if (prod instanceof NonTerminal) {\n return getAlternativesForProd(prod.definition);\n } else if (prod instanceof Option) {\n result = getAlternativesForProd(prod.definition);\n } else if (prod instanceof RepetitionMandatory) {\n const newDef = prod.definition.concat([\n new Repetition({\n definition: prod.definition\n })\n ]);\n return getAlternativesForProd(newDef);\n } else if (prod instanceof RepetitionMandatoryWithSeparator) {\n const newDef = [\n new Alternative({ definition: prod.definition }),\n new Repetition({\n definition: [new Terminal({ terminalType: prod.separator })].concat(prod.definition)\n })\n ];\n return getAlternativesForProd(newDef);\n } else if (prod instanceof RepetitionWithSeparator) {\n const newDef = prod.definition.concat([\n new Repetition({\n definition: [new Terminal({ terminalType: prod.separator })].concat(prod.definition)\n })\n ]);\n result = getAlternativesForProd(newDef);\n } else if (prod instanceof Repetition) {\n const newDef = prod.definition.concat([\n new Repetition({\n definition: prod.definition\n })\n ]);\n result = getAlternativesForProd(newDef);\n } else if (prod instanceof Alternation) {\n forEach(prod.definition, (currAlt) => {\n if (isEmpty(currAlt.definition) === false) {\n result = getAlternativesForProd(currAlt.definition);\n }\n });\n return result;\n } else if (prod instanceof Terminal) {\n currPath.push(prod.terminalType);\n } else {\n throw Error(\"non exhaustive match\");\n }\n i++;\n }\n result.push({\n partialPath: currPath,\n suffixDef: drop(targetDef, i)\n });\n return result;\n }\n function nextPossibleTokensAfter(initialDef, tokenVector, tokMatcher, maxLookAhead) {\n const EXIT_NON_TERMINAL = \"EXIT_NONE_TERMINAL\";\n const EXIT_NON_TERMINAL_ARR = [EXIT_NON_TERMINAL];\n const EXIT_ALTERNATIVE = \"EXIT_ALTERNATIVE\";\n let foundCompletePath = false;\n const tokenVectorLength = tokenVector.length;\n const minimalAlternativesIndex = tokenVectorLength - maxLookAhead - 1;\n const result = [];\n const possiblePaths = [];\n possiblePaths.push({\n idx: -1,\n def: initialDef,\n ruleStack: [],\n occurrenceStack: []\n });\n while (!isEmpty(possiblePaths)) {\n const currPath = possiblePaths.pop();\n if (currPath === EXIT_ALTERNATIVE) {\n if (foundCompletePath && last(possiblePaths).idx <= minimalAlternativesIndex) {\n possiblePaths.pop();\n }\n continue;\n }\n const currDef = currPath.def;\n const currIdx = currPath.idx;\n const currRuleStack = currPath.ruleStack;\n const currOccurrenceStack = currPath.occurrenceStack;\n if (isEmpty(currDef)) {\n continue;\n }\n const prod = currDef[0];\n if (prod === EXIT_NON_TERMINAL) {\n const nextPath = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: dropRight(currRuleStack),\n occurrenceStack: dropRight(currOccurrenceStack)\n };\n possiblePaths.push(nextPath);\n } else if (prod instanceof Terminal) {\n if (currIdx < tokenVectorLength - 1) {\n const nextIdx = currIdx + 1;\n const actualToken = tokenVector[nextIdx];\n if (tokMatcher(actualToken, prod.terminalType)) {\n const nextPath = {\n idx: nextIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPath);\n }\n } else if (currIdx === tokenVectorLength - 1) {\n result.push({\n nextTokenType: prod.terminalType,\n nextTokenOccurrence: prod.idx,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n });\n foundCompletePath = true;\n } else {\n throw Error(\"non exhaustive match\");\n }\n } else if (prod instanceof NonTerminal) {\n const newRuleStack = clone(currRuleStack);\n newRuleStack.push(prod.nonTerminalName);\n const newOccurrenceStack = clone(currOccurrenceStack);\n newOccurrenceStack.push(prod.idx);\n const nextPath = {\n idx: currIdx,\n def: prod.definition.concat(EXIT_NON_TERMINAL_ARR, drop(currDef)),\n ruleStack: newRuleStack,\n occurrenceStack: newOccurrenceStack\n };\n possiblePaths.push(nextPath);\n } else if (prod instanceof Option) {\n const nextPathWithout = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPathWithout);\n possiblePaths.push(EXIT_ALTERNATIVE);\n const nextPathWith = {\n idx: currIdx,\n def: prod.definition.concat(drop(currDef)),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPathWith);\n } else if (prod instanceof RepetitionMandatory) {\n const secondIteration = new Repetition({\n definition: prod.definition,\n idx: prod.idx\n });\n const nextDef = prod.definition.concat([secondIteration], drop(currDef));\n const nextPath = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPath);\n } else if (prod instanceof RepetitionMandatoryWithSeparator) {\n const separatorGast = new Terminal({\n terminalType: prod.separator\n });\n const secondIteration = new Repetition({\n definition: [separatorGast].concat(prod.definition),\n idx: prod.idx\n });\n const nextDef = prod.definition.concat([secondIteration], drop(currDef));\n const nextPath = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPath);\n } else if (prod instanceof RepetitionWithSeparator) {\n const nextPathWithout = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPathWithout);\n possiblePaths.push(EXIT_ALTERNATIVE);\n const separatorGast = new Terminal({\n terminalType: prod.separator\n });\n const nthRepetition = new Repetition({\n definition: [separatorGast].concat(prod.definition),\n idx: prod.idx\n });\n const nextDef = prod.definition.concat([nthRepetition], drop(currDef));\n const nextPathWith = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPathWith);\n } else if (prod instanceof Repetition) {\n const nextPathWithout = {\n idx: currIdx,\n def: drop(currDef),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPathWithout);\n possiblePaths.push(EXIT_ALTERNATIVE);\n const nthRepetition = new Repetition({\n definition: prod.definition,\n idx: prod.idx\n });\n const nextDef = prod.definition.concat([nthRepetition], drop(currDef));\n const nextPathWith = {\n idx: currIdx,\n def: nextDef,\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(nextPathWith);\n } else if (prod instanceof Alternation) {\n for (let i = prod.definition.length - 1; i >= 0; i--) {\n const currAlt = prod.definition[i];\n const currAltPath = {\n idx: currIdx,\n def: currAlt.definition.concat(drop(currDef)),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n };\n possiblePaths.push(currAltPath);\n possiblePaths.push(EXIT_ALTERNATIVE);\n }\n } else if (prod instanceof Alternative) {\n possiblePaths.push({\n idx: currIdx,\n def: prod.definition.concat(drop(currDef)),\n ruleStack: currRuleStack,\n occurrenceStack: currOccurrenceStack\n });\n } else if (prod instanceof Rule) {\n possiblePaths.push(expandTopLevelRule(prod, currIdx, currRuleStack, currOccurrenceStack));\n } else {\n throw Error(\"non exhaustive match\");\n }\n }\n return result;\n }\n function expandTopLevelRule(topRule, currIdx, currRuleStack, currOccurrenceStack) {\n const newRuleStack = clone(currRuleStack);\n newRuleStack.push(topRule.name);\n const newCurrOccurrenceStack = clone(currOccurrenceStack);\n newCurrOccurrenceStack.push(1);\n return {\n idx: currIdx,\n def: topRule.definition,\n ruleStack: newRuleStack,\n occurrenceStack: newCurrOccurrenceStack\n };\n }\n var PROD_TYPE;\n (function(PROD_TYPE2) {\n PROD_TYPE2[PROD_TYPE2[\"OPTION\"] = 0] = \"OPTION\";\n PROD_TYPE2[PROD_TYPE2[\"REPETITION\"] = 1] = \"REPETITION\";\n PROD_TYPE2[PROD_TYPE2[\"REPETITION_MANDATORY\"] = 2] = \"REPETITION_MANDATORY\";\n PROD_TYPE2[PROD_TYPE2[\"REPETITION_MANDATORY_WITH_SEPARATOR\"] = 3] = \"REPETITION_MANDATORY_WITH_SEPARATOR\";\n PROD_TYPE2[PROD_TYPE2[\"REPETITION_WITH_SEPARATOR\"] = 4] = \"REPETITION_WITH_SEPARATOR\";\n PROD_TYPE2[PROD_TYPE2[\"ALTERNATION\"] = 5] = \"ALTERNATION\";\n })(PROD_TYPE || (PROD_TYPE = {}));\n function getProdType(prod) {\n if (prod instanceof Option || prod === \"Option\") {\n return PROD_TYPE.OPTION;\n } else if (prod instanceof Repetition || prod === \"Repetition\") {\n return PROD_TYPE.REPETITION;\n } else if (prod instanceof RepetitionMandatory || prod === \"RepetitionMandatory\") {\n return PROD_TYPE.REPETITION_MANDATORY;\n } else if (prod instanceof RepetitionMandatoryWithSeparator || prod === \"RepetitionMandatoryWithSeparator\") {\n return PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR;\n } else if (prod instanceof RepetitionWithSeparator || prod === \"RepetitionWithSeparator\") {\n return PROD_TYPE.REPETITION_WITH_SEPARATOR;\n } else if (prod instanceof Alternation || prod === \"Alternation\") {\n return PROD_TYPE.ALTERNATION;\n } else {\n throw Error(\"non exhaustive match\");\n }\n }\n function buildLookaheadFuncForOr(occurrence, ruleGrammar, maxLookahead, hasPredicates, dynamicTokensEnabled, laFuncBuilder) {\n const lookAheadPaths = getLookaheadPathsForOr(occurrence, ruleGrammar, maxLookahead);\n const tokenMatcher2 = areTokenCategoriesNotUsed(lookAheadPaths) ? tokenStructuredMatcherNoCategories : tokenStructuredMatcher;\n return laFuncBuilder(lookAheadPaths, hasPredicates, tokenMatcher2, dynamicTokensEnabled);\n }\n function buildLookaheadFuncForOptionalProd(occurrence, ruleGrammar, k, dynamicTokensEnabled, prodType, lookaheadBuilder) {\n const lookAheadPaths = getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, k);\n const tokenMatcher2 = areTokenCategoriesNotUsed(lookAheadPaths) ? tokenStructuredMatcherNoCategories : tokenStructuredMatcher;\n return lookaheadBuilder(lookAheadPaths[0], tokenMatcher2, dynamicTokensEnabled);\n }\n function buildAlternativesLookAheadFunc(alts, hasPredicates, tokenMatcher2, dynamicTokensEnabled) {\n const numOfAlts = alts.length;\n const areAllOneTokenLookahead = every(alts, (currAlt) => {\n return every(currAlt, (currPath) => {\n return currPath.length === 1;\n });\n });\n if (hasPredicates) {\n return function(orAlts) {\n const predicates = map(orAlts, (currAlt) => currAlt.GATE);\n for (let t = 0; t < numOfAlts; t++) {\n const currAlt = alts[t];\n const currNumOfPaths = currAlt.length;\n const currPredicate = predicates[t];\n if (currPredicate !== void 0 && currPredicate.call(this) === false) {\n continue;\n }\n nextPath:\n for (let j = 0; j < currNumOfPaths; j++) {\n const currPath = currAlt[j];\n const currPathLength = currPath.length;\n for (let i = 0; i < currPathLength; i++) {\n const nextToken = this.LA(i + 1);\n if (tokenMatcher2(nextToken, currPath[i]) === false) {\n continue nextPath;\n }\n }\n return t;\n }\n }\n return void 0;\n };\n } else if (areAllOneTokenLookahead && !dynamicTokensEnabled) {\n const singleTokenAlts = map(alts, (currAlt) => {\n return flatten(currAlt);\n });\n const choiceToAlt = reduce(\n singleTokenAlts,\n (result, currAlt, idx) => {\n forEach(currAlt, (currTokType) => {\n if (!has(result, currTokType.tokenTypeIdx)) {\n result[currTokType.tokenTypeIdx] = idx;\n }\n forEach(currTokType.categoryMatches, (currExtendingType) => {\n if (!has(result, currExtendingType)) {\n result[currExtendingType] = idx;\n }\n });\n });\n return result;\n },\n {}\n );\n return function() {\n const nextToken = this.LA(1);\n return choiceToAlt[nextToken.tokenTypeIdx];\n };\n } else {\n return function() {\n for (let t = 0; t < numOfAlts; t++) {\n const currAlt = alts[t];\n const currNumOfPaths = currAlt.length;\n nextPath:\n for (let j = 0; j < currNumOfPaths; j++) {\n const currPath = currAlt[j];\n const currPathLength = currPath.length;\n for (let i = 0; i < currPathLength; i++) {\n const nextToken = this.LA(i + 1);\n if (tokenMatcher2(nextToken, currPath[i]) === false) {\n continue nextPath;\n }\n }\n return t;\n }\n }\n return void 0;\n };\n }\n }\n function buildSingleAlternativeLookaheadFunction(alt, tokenMatcher2, dynamicTokensEnabled) {\n const areAllOneTokenLookahead = every(alt, (currPath) => {\n return currPath.length === 1;\n });\n const numOfPaths = alt.length;\n if (areAllOneTokenLookahead && !dynamicTokensEnabled) {\n const singleTokensTypes = flatten(alt);\n if (singleTokensTypes.length === 1 && isEmpty(singleTokensTypes[0].categoryMatches)) {\n const expectedTokenType = singleTokensTypes[0];\n const expectedTokenUniqueKey = expectedTokenType.tokenTypeIdx;\n return function() {\n return this.LA(1).tokenTypeIdx === expectedTokenUniqueKey;\n };\n } else {\n const choiceToAlt = reduce(\n singleTokensTypes,\n (result, currTokType, idx) => {\n result[currTokType.tokenTypeIdx] = true;\n forEach(currTokType.categoryMatches, (currExtendingType) => {\n result[currExtendingType] = true;\n });\n return result;\n },\n []\n );\n return function() {\n const nextToken = this.LA(1);\n return choiceToAlt[nextToken.tokenTypeIdx] === true;\n };\n }\n } else {\n return function() {\n nextPath:\n for (let j = 0; j < numOfPaths; j++) {\n const currPath = alt[j];\n const currPathLength = currPath.length;\n for (let i = 0; i < currPathLength; i++) {\n const nextToken = this.LA(i + 1);\n if (tokenMatcher2(nextToken, currPath[i]) === false) {\n continue nextPath;\n }\n }\n return true;\n }\n return false;\n };\n }\n }\n class RestDefinitionFinderWalker extends RestWalker {\n constructor(topProd, targetOccurrence, targetProdType) {\n super();\n this.topProd = topProd;\n this.targetOccurrence = targetOccurrence;\n this.targetProdType = targetProdType;\n }\n startWalking() {\n this.walk(this.topProd);\n return this.restDef;\n }\n checkIsTarget(node, expectedProdType, currRest, prevRest) {\n if (node.idx === this.targetOccurrence && this.targetProdType === expectedProdType) {\n this.restDef = currRest.concat(prevRest);\n return true;\n }\n return false;\n }\n walkOption(optionProd, currRest, prevRest) {\n if (!this.checkIsTarget(optionProd, PROD_TYPE.OPTION, currRest, prevRest)) {\n super.walkOption(optionProd, currRest, prevRest);\n }\n }\n walkAtLeastOne(atLeastOneProd, currRest, prevRest) {\n if (!this.checkIsTarget(atLeastOneProd, PROD_TYPE.REPETITION_MANDATORY, currRest, prevRest)) {\n super.walkOption(atLeastOneProd, currRest, prevRest);\n }\n }\n walkAtLeastOneSep(atLeastOneSepProd, currRest, prevRest) {\n if (!this.checkIsTarget(atLeastOneSepProd, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR, currRest, prevRest)) {\n super.walkOption(atLeastOneSepProd, currRest, prevRest);\n }\n }\n walkMany(manyProd, currRest, prevRest) {\n if (!this.checkIsTarget(manyProd, PROD_TYPE.REPETITION, currRest, prevRest)) {\n super.walkOption(manyProd, currRest, prevRest);\n }\n }\n walkManySep(manySepProd, currRest, prevRest) {\n if (!this.checkIsTarget(manySepProd, PROD_TYPE.REPETITION_WITH_SEPARATOR, currRest, prevRest)) {\n super.walkOption(manySepProd, currRest, prevRest);\n }\n }\n }\n class InsideDefinitionFinderVisitor extends GAstVisitor {\n constructor(targetOccurrence, targetProdType, targetRef) {\n super();\n this.targetOccurrence = targetOccurrence;\n this.targetProdType = targetProdType;\n this.targetRef = targetRef;\n this.result = [];\n }\n checkIsTarget(node, expectedProdName) {\n if (node.idx === this.targetOccurrence && this.targetProdType === expectedProdName && (this.targetRef === void 0 || node === this.targetRef)) {\n this.result = node.definition;\n }\n }\n visitOption(node) {\n this.checkIsTarget(node, PROD_TYPE.OPTION);\n }\n visitRepetition(node) {\n this.checkIsTarget(node, PROD_TYPE.REPETITION);\n }\n visitRepetitionMandatory(node) {\n this.checkIsTarget(node, PROD_TYPE.REPETITION_MANDATORY);\n }\n visitRepetitionMandatoryWithSeparator(node) {\n this.checkIsTarget(node, PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR);\n }\n visitRepetitionWithSeparator(node) {\n this.checkIsTarget(node, PROD_TYPE.REPETITION_WITH_SEPARATOR);\n }\n visitAlternation(node) {\n this.checkIsTarget(node, PROD_TYPE.ALTERNATION);\n }\n }\n function initializeArrayOfArrays(size) {\n const result = new Array(size);\n for (let i = 0; i < size; i++) {\n result[i] = [];\n }\n return result;\n }\n function pathToHashKeys(path) {\n let keys2 = [\"\"];\n for (let i = 0; i < path.length; i++) {\n const tokType = path[i];\n const longerKeys = [];\n for (let j = 0; j < keys2.length; j++) {\n const currShorterKey = keys2[j];\n longerKeys.push(currShorterKey + \"_\" + tokType.tokenTypeIdx);\n for (let t = 0; t < tokType.categoryMatches.length; t++) {\n const categoriesKeySuffix = \"_\" + tokType.categoryMatches[t];\n longerKeys.push(currShorterKey + categoriesKeySuffix);\n }\n }\n keys2 = longerKeys;\n }\n return keys2;\n }\n function isUniquePrefixHash(altKnownPathsKeys, searchPathKeys, idx) {\n for (let currAltIdx = 0; currAltIdx < altKnownPathsKeys.length; currAltIdx++) {\n if (currAltIdx === idx) {\n continue;\n }\n const otherAltKnownPathsKeys = altKnownPathsKeys[currAltIdx];\n for (let searchIdx = 0; searchIdx < searchPathKeys.length; searchIdx++) {\n const searchKey = searchPathKeys[searchIdx];\n if (otherAltKnownPathsKeys[searchKey] === true) {\n return false;\n }\n }\n }\n return true;\n }\n function lookAheadSequenceFromAlternatives(altsDefs, k) {\n const partialAlts = map(altsDefs, (currAlt) => possiblePathsFrom([currAlt], 1));\n const finalResult = initializeArrayOfArrays(partialAlts.length);\n const altsHashes = map(partialAlts, (currAltPaths) => {\n const dict = {};\n forEach(currAltPaths, (item) => {\n const keys2 = pathToHashKeys(item.partialPath);\n forEach(keys2, (currKey) => {\n dict[currKey] = true;\n });\n });\n return dict;\n });\n let newData = partialAlts;\n for (let pathLength = 1; pathLength <= k; pathLength++) {\n const currDataset = newData;\n newData = initializeArrayOfArrays(currDataset.length);\n for (let altIdx = 0; altIdx < currDataset.length; altIdx++) {\n const currAltPathsAndSuffixes = currDataset[altIdx];\n for (let currPathIdx = 0; currPathIdx < currAltPathsAndSuffixes.length; currPathIdx++) {\n const currPathPrefix = currAltPathsAndSuffixes[currPathIdx].partialPath;\n const suffixDef = currAltPathsAndSuffixes[currPathIdx].suffixDef;\n const prefixKeys = pathToHashKeys(currPathPrefix);\n const isUnique = isUniquePrefixHash(altsHashes, prefixKeys, altIdx);\n if (isUnique || isEmpty(suffixDef) || currPathPrefix.length === k) {\n const currAltResult = finalResult[altIdx];\n if (containsPath(currAltResult, currPathPrefix) === false) {\n currAltResult.push(currPathPrefix);\n for (let j = 0; j < prefixKeys.length; j++) {\n const currKey = prefixKeys[j];\n altsHashes[altIdx][currKey] = true;\n }\n }\n } else {\n const newPartialPathsAndSuffixes = possiblePathsFrom(suffixDef, pathLength + 1, currPathPrefix);\n newData[altIdx] = newData[altIdx].concat(newPartialPathsAndSuffixes);\n forEach(newPartialPathsAndSuffixes, (item) => {\n const prefixKeys2 = pathToHashKeys(item.partialPath);\n forEach(prefixKeys2, (key) => {\n altsHashes[altIdx][key] = true;\n });\n });\n }\n }\n }\n }\n return finalResult;\n }\n function getLookaheadPathsForOr(occurrence, ruleGrammar, k, orProd) {\n const visitor = new InsideDefinitionFinderVisitor(occurrence, PROD_TYPE.ALTERNATION, orProd);\n ruleGrammar.accept(visitor);\n return lookAheadSequenceFromAlternatives(visitor.result, k);\n }\n function getLookaheadPathsForOptionalProd(occurrence, ruleGrammar, prodType, k) {\n const insideDefVisitor = new InsideDefinitionFinderVisitor(occurrence, prodType);\n ruleGrammar.accept(insideDefVisitor);\n const insideDef = insideDefVisitor.result;\n const afterDefWalker = new RestDefinitionFinderWalker(ruleGrammar, occurrence, prodType);\n const afterDef = afterDefWalker.startWalking();\n const insideFlat = new Alternative({ definition: insideDef });\n const afterFlat = new Alternative({ definition: afterDef });\n return lookAheadSequenceFromAlternatives([insideFlat, afterFlat], k);\n }\n function containsPath(alternative, searchPath) {\n compareOtherPath:\n for (let i = 0; i < alternative.length; i++) {\n const otherPath = alternative[i];\n if (otherPath.length !== searchPath.length) {\n continue;\n }\n for (let j = 0; j < otherPath.length; j++) {\n const searchTok = searchPath[j];\n const otherTok = otherPath[j];\n const matchingTokens = searchTok === otherTok || otherTok.categoryMatchesMap[searchTok.tokenTypeIdx] !== void 0;\n if (matchingTokens === false) {\n continue compareOtherPath;\n }\n }\n return true;\n }\n return false;\n }\n function isStrictPrefixOfPath(prefix, other) {\n return prefix.length < other.length && every(prefix, (tokType, idx) => {\n const otherTokType = other[idx];\n return tokType === otherTokType || otherTokType.categoryMatchesMap[tokType.tokenTypeIdx];\n });\n }\n function areTokenCategoriesNotUsed(lookAheadPaths) {\n return every(\n lookAheadPaths,\n (singleAltPaths) => every(singleAltPaths, (singlePath) => every(singlePath, (token) => isEmpty(token.categoryMatches)))\n );\n }\n function validateLookahead(options) {\n const lookaheadValidationErrorMessages = options.lookaheadStrategy.validate({\n rules: options.rules,\n tokenTypes: options.tokenTypes,\n grammarName: options.grammarName\n });\n return map(\n lookaheadValidationErrorMessages,\n (errorMessage) => Object.assign({ type: ParserDefinitionErrorType.CUSTOM_LOOKAHEAD_VALIDATION }, errorMessage)\n );\n }\n function validateGrammar$1(topLevels, tokenTypes, errMsgProvider, grammarName) {\n const duplicateErrors = flatMap(\n topLevels,\n (currTopLevel) => validateDuplicateProductions(currTopLevel, errMsgProvider)\n );\n const termsNamespaceConflictErrors = checkTerminalAndNoneTerminalsNameSpace(topLevels, tokenTypes, errMsgProvider);\n const tooManyAltsErrors = flatMap(topLevels, (curRule) => validateTooManyAlts(curRule, errMsgProvider));\n const duplicateRulesError = flatMap(\n topLevels,\n (curRule) => validateRuleDoesNotAlreadyExist(curRule, topLevels, grammarName, errMsgProvider)\n );\n return duplicateErrors.concat(termsNamespaceConflictErrors, tooManyAltsErrors, duplicateRulesError);\n }\n function validateDuplicateProductions(topLevelRule, errMsgProvider) {\n const collectorVisitor2 = new OccurrenceValidationCollector();\n topLevelRule.accept(collectorVisitor2);\n const allRuleProductions = collectorVisitor2.allProductions;\n const productionGroups = groupBy$1(allRuleProductions, identifyProductionForDuplicates);\n const duplicates = pickBy(productionGroups, (currGroup) => {\n return currGroup.length > 1;\n });\n const errors = map(values(duplicates), (currDuplicates) => {\n const firstProd = head(currDuplicates);\n const msg = errMsgProvider.buildDuplicateFoundError(topLevelRule, currDuplicates);\n const dslName = getProductionDslName(firstProd);\n const defError = {\n message: msg,\n type: ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,\n ruleName: topLevelRule.name,\n dslName,\n occurrence: firstProd.idx\n };\n const param = getExtraProductionArgument(firstProd);\n if (param) {\n defError.parameter = param;\n }\n return defError;\n });\n return errors;\n }\n function identifyProductionForDuplicates(prod) {\n return `${getProductionDslName(prod)}_#_${prod.idx}_#_${getExtraProductionArgument(prod)}`;\n }\n function getExtraProductionArgument(prod) {\n if (prod instanceof Terminal) {\n return prod.terminalType.name;\n } else if (prod instanceof NonTerminal) {\n return prod.nonTerminalName;\n } else {\n return \"\";\n }\n }\n class OccurrenceValidationCollector extends GAstVisitor {\n constructor() {\n super(...arguments);\n this.allProductions = [];\n }\n visitNonTerminal(subrule) {\n this.allProductions.push(subrule);\n }\n visitOption(option) {\n this.allProductions.push(option);\n }\n visitRepetitionWithSeparator(manySep) {\n this.allProductions.push(manySep);\n }\n visitRepetitionMandatory(atLeastOne) {\n this.allProductions.push(atLeastOne);\n }\n visitRepetitionMandatoryWithSeparator(atLeastOneSep) {\n this.allProductions.push(atLeastOneSep);\n }\n visitRepetition(many) {\n this.allProductions.push(many);\n }\n visitAlternation(or) {\n this.allProductions.push(or);\n }\n visitTerminal(terminal) {\n this.allProductions.push(terminal);\n }\n }\n function validateRuleDoesNotAlreadyExist(rule, allRules, className, errMsgProvider) {\n const errors = [];\n const occurrences = reduce(\n allRules,\n (result, curRule) => {\n if (curRule.name === rule.name) {\n return result + 1;\n }\n return result;\n },\n 0\n );\n if (occurrences > 1) {\n const errMsg = errMsgProvider.buildDuplicateRuleNameError({\n topLevelRule: rule,\n grammarName: className\n });\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.DUPLICATE_RULE_NAME,\n ruleName: rule.name\n });\n }\n return errors;\n }\n function validateRuleIsOverridden(ruleName, definedRulesNames, className) {\n const errors = [];\n let errMsg;\n if (!includes(definedRulesNames, ruleName)) {\n errMsg = `Invalid rule override, rule: ->${ruleName}<- cannot be overridden in the grammar: ->${className}<-as it is not defined in any of the super grammars `;\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,\n ruleName\n });\n }\n return errors;\n }\n function validateNoLeftRecursion(topRule, currRule, errMsgProvider, path = []) {\n const errors = [];\n const nextNonTerminals = getFirstNoneTerminal(currRule.definition);\n if (isEmpty(nextNonTerminals)) {\n return [];\n } else {\n const ruleName = topRule.name;\n const foundLeftRecursion = includes(nextNonTerminals, topRule);\n if (foundLeftRecursion) {\n errors.push({\n message: errMsgProvider.buildLeftRecursionError({\n topLevelRule: topRule,\n leftRecursionPath: path\n }),\n type: ParserDefinitionErrorType.LEFT_RECURSION,\n ruleName\n });\n }\n const validNextSteps = difference$1(nextNonTerminals, path.concat([topRule]));\n const errorsFromNextSteps = flatMap(validNextSteps, (currRefRule) => {\n const newPath = clone(path);\n newPath.push(currRefRule);\n return validateNoLeftRecursion(topRule, currRefRule, errMsgProvider, newPath);\n });\n return errors.concat(errorsFromNextSteps);\n }\n }\n function getFirstNoneTerminal(definition) {\n let result = [];\n if (isEmpty(definition)) {\n return result;\n }\n const firstProd = head(definition);\n if (firstProd instanceof NonTerminal) {\n result.push(firstProd.referencedRule);\n } else if (firstProd instanceof Alternative || firstProd instanceof Option || firstProd instanceof RepetitionMandatory || firstProd instanceof RepetitionMandatoryWithSeparator || firstProd instanceof RepetitionWithSeparator || firstProd instanceof Repetition) {\n result = result.concat(getFirstNoneTerminal(firstProd.definition));\n } else if (firstProd instanceof Alternation) {\n result = flatten(map(firstProd.definition, (currSubDef) => getFirstNoneTerminal(currSubDef.definition)));\n } else if (firstProd instanceof Terminal)\n ;\n else {\n throw Error(\"non exhaustive match\");\n }\n const isFirstOptional = isOptionalProd(firstProd);\n const hasMore = definition.length > 1;\n if (isFirstOptional && hasMore) {\n const rest = drop(definition);\n return result.concat(getFirstNoneTerminal(rest));\n } else {\n return result;\n }\n }\n class OrCollector extends GAstVisitor {\n constructor() {\n super(...arguments);\n this.alternations = [];\n }\n visitAlternation(node) {\n this.alternations.push(node);\n }\n }\n function validateEmptyOrAlternative(topLevelRule, errMsgProvider) {\n const orCollector = new OrCollector();\n topLevelRule.accept(orCollector);\n const ors = orCollector.alternations;\n const errors = flatMap(ors, (currOr) => {\n const exceptLast = dropRight(currOr.definition);\n return flatMap(exceptLast, (currAlternative, currAltIdx) => {\n const possibleFirstInAlt = nextPossibleTokensAfter([currAlternative], [], tokenStructuredMatcher, 1);\n if (isEmpty(possibleFirstInAlt)) {\n return [\n {\n message: errMsgProvider.buildEmptyAlternationError({\n topLevelRule,\n alternation: currOr,\n emptyChoiceIdx: currAltIdx\n }),\n type: ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,\n ruleName: topLevelRule.name,\n occurrence: currOr.idx,\n alternative: currAltIdx + 1\n }\n ];\n } else {\n return [];\n }\n });\n });\n return errors;\n }\n function validateAmbiguousAlternationAlternatives(topLevelRule, globalMaxLookahead, errMsgProvider) {\n const orCollector = new OrCollector();\n topLevelRule.accept(orCollector);\n let ors = orCollector.alternations;\n ors = reject(ors, (currOr) => currOr.ignoreAmbiguities === true);\n const errors = flatMap(ors, (currOr) => {\n const currOccurrence = currOr.idx;\n const actualMaxLookahead = currOr.maxLookahead || globalMaxLookahead;\n const alternatives = getLookaheadPathsForOr(currOccurrence, topLevelRule, actualMaxLookahead, currOr);\n const altsAmbiguityErrors = checkAlternativesAmbiguities(alternatives, currOr, topLevelRule, errMsgProvider);\n const altsPrefixAmbiguityErrors = checkPrefixAlternativesAmbiguities(\n alternatives,\n currOr,\n topLevelRule,\n errMsgProvider\n );\n return altsAmbiguityErrors.concat(altsPrefixAmbiguityErrors);\n });\n return errors;\n }\n class RepetitionCollector extends GAstVisitor {\n constructor() {\n super(...arguments);\n this.allProductions = [];\n }\n visitRepetitionWithSeparator(manySep) {\n this.allProductions.push(manySep);\n }\n visitRepetitionMandatory(atLeastOne) {\n this.allProductions.push(atLeastOne);\n }\n visitRepetitionMandatoryWithSeparator(atLeastOneSep) {\n this.allProductions.push(atLeastOneSep);\n }\n visitRepetition(many) {\n this.allProductions.push(many);\n }\n }\n function validateTooManyAlts(topLevelRule, errMsgProvider) {\n const orCollector = new OrCollector();\n topLevelRule.accept(orCollector);\n const ors = orCollector.alternations;\n const errors = flatMap(ors, (currOr) => {\n if (currOr.definition.length > 255) {\n return [\n {\n message: errMsgProvider.buildTooManyAlternativesError({\n topLevelRule,\n alternation: currOr\n }),\n type: ParserDefinitionErrorType.TOO_MANY_ALTS,\n ruleName: topLevelRule.name,\n occurrence: currOr.idx\n }\n ];\n } else {\n return [];\n }\n });\n return errors;\n }\n function validateSomeNonEmptyLookaheadPath(topLevelRules, maxLookahead, errMsgProvider) {\n const errors = [];\n forEach(topLevelRules, (currTopRule) => {\n const collectorVisitor2 = new RepetitionCollector();\n currTopRule.accept(collectorVisitor2);\n const allRuleProductions = collectorVisitor2.allProductions;\n forEach(allRuleProductions, (currProd) => {\n const prodType = getProdType(currProd);\n const actualMaxLookahead = currProd.maxLookahead || maxLookahead;\n const currOccurrence = currProd.idx;\n const paths = getLookaheadPathsForOptionalProd(currOccurrence, currTopRule, prodType, actualMaxLookahead);\n const pathsInsideProduction = paths[0];\n if (isEmpty(flatten(pathsInsideProduction))) {\n const errMsg = errMsgProvider.buildEmptyRepetitionError({\n topLevelRule: currTopRule,\n repetition: currProd\n });\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,\n ruleName: currTopRule.name\n });\n }\n });\n });\n return errors;\n }\n function checkAlternativesAmbiguities(alternatives, alternation, rule, errMsgProvider) {\n const foundAmbiguousPaths = [];\n const identicalAmbiguities = reduce(\n alternatives,\n (result, currAlt, currAltIdx) => {\n if (alternation.definition[currAltIdx].ignoreAmbiguities === true) {\n return result;\n }\n forEach(currAlt, (currPath) => {\n const altsCurrPathAppearsIn = [currAltIdx];\n forEach(alternatives, (currOtherAlt, currOtherAltIdx) => {\n if (currAltIdx !== currOtherAltIdx && containsPath(currOtherAlt, currPath) && // ignore (skip) ambiguities with this \"other\" alternative\n alternation.definition[currOtherAltIdx].ignoreAmbiguities !== true) {\n altsCurrPathAppearsIn.push(currOtherAltIdx);\n }\n });\n if (altsCurrPathAppearsIn.length > 1 && !containsPath(foundAmbiguousPaths, currPath)) {\n foundAmbiguousPaths.push(currPath);\n result.push({\n alts: altsCurrPathAppearsIn,\n path: currPath\n });\n }\n });\n return result;\n },\n []\n );\n const currErrors = map(identicalAmbiguities, (currAmbDescriptor) => {\n const ambgIndices = map(currAmbDescriptor.alts, (currAltIdx) => currAltIdx + 1);\n const currMessage = errMsgProvider.buildAlternationAmbiguityError({\n topLevelRule: rule,\n alternation,\n ambiguityIndices: ambgIndices,\n prefixPath: currAmbDescriptor.path\n });\n return {\n message: currMessage,\n type: ParserDefinitionErrorType.AMBIGUOUS_ALTS,\n ruleName: rule.name,\n occurrence: alternation.idx,\n alternatives: currAmbDescriptor.alts\n };\n });\n return currErrors;\n }\n function checkPrefixAlternativesAmbiguities(alternatives, alternation, rule, errMsgProvider) {\n const pathsAndIndices = reduce(\n alternatives,\n (result, currAlt, idx) => {\n const currPathsAndIdx = map(currAlt, (currPath) => {\n return { idx, path: currPath };\n });\n return result.concat(currPathsAndIdx);\n },\n []\n );\n const errors = compact(\n flatMap(pathsAndIndices, (currPathAndIdx) => {\n const alternativeGast = alternation.definition[currPathAndIdx.idx];\n if (alternativeGast.ignoreAmbiguities === true) {\n return [];\n }\n const targetIdx = currPathAndIdx.idx;\n const targetPath = currPathAndIdx.path;\n const prefixAmbiguitiesPathsAndIndices = filter(pathsAndIndices, (searchPathAndIdx) => {\n return (\n // ignore (skip) ambiguities with this \"other\" alternative\n alternation.definition[searchPathAndIdx.idx].ignoreAmbiguities !== true && searchPathAndIdx.idx < targetIdx && // checking for strict prefix because identical lookaheads\n // will be be detected using a different validation.\n isStrictPrefixOfPath(searchPathAndIdx.path, targetPath)\n );\n });\n const currPathPrefixErrors = map(prefixAmbiguitiesPathsAndIndices, (currAmbPathAndIdx) => {\n const ambgIndices = [currAmbPathAndIdx.idx + 1, targetIdx + 1];\n const occurrence = alternation.idx === 0 ? \"\" : alternation.idx;\n const message = errMsgProvider.buildAlternationPrefixAmbiguityError({\n topLevelRule: rule,\n alternation,\n ambiguityIndices: ambgIndices,\n prefixPath: currAmbPathAndIdx.path\n });\n return {\n message,\n type: ParserDefinitionErrorType.AMBIGUOUS_PREFIX_ALTS,\n ruleName: rule.name,\n occurrence,\n alternatives: ambgIndices\n };\n });\n return currPathPrefixErrors;\n })\n );\n return errors;\n }\n function checkTerminalAndNoneTerminalsNameSpace(topLevels, tokenTypes, errMsgProvider) {\n const errors = [];\n const tokenNames = map(tokenTypes, (currToken) => currToken.name);\n forEach(topLevels, (currRule) => {\n const currRuleName = currRule.name;\n if (includes(tokenNames, currRuleName)) {\n const errMsg = errMsgProvider.buildNamespaceConflictError(currRule);\n errors.push({\n message: errMsg,\n type: ParserDefinitionErrorType.CONFLICT_TOKENS_RULES_NAMESPACE,\n ruleName: currRuleName\n });\n }\n });\n return errors;\n }\n function resolveGrammar(options) {\n const actualOptions = defaults$1(options, {\n errMsgProvider: defaultGrammarResolverErrorProvider\n });\n const topRulesTable = {};\n forEach(options.rules, (rule) => {\n topRulesTable[rule.name] = rule;\n });\n return resolveGrammar$1(topRulesTable, actualOptions.errMsgProvider);\n }\n function validateGrammar(options) {\n options = defaults$1(options, {\n errMsgProvider: defaultGrammarValidatorErrorProvider\n });\n return validateGrammar$1(options.rules, options.tokenTypes, options.errMsgProvider, options.grammarName);\n }\n const MISMATCHED_TOKEN_EXCEPTION = \"MismatchedTokenException\";\n const NO_VIABLE_ALT_EXCEPTION = \"NoViableAltException\";\n const EARLY_EXIT_EXCEPTION = \"EarlyExitException\";\n const NOT_ALL_INPUT_PARSED_EXCEPTION = \"NotAllInputParsedException\";\n const RECOGNITION_EXCEPTION_NAMES = [\n MISMATCHED_TOKEN_EXCEPTION,\n NO_VIABLE_ALT_EXCEPTION,\n EARLY_EXIT_EXCEPTION,\n NOT_ALL_INPUT_PARSED_EXCEPTION\n ];\n Object.freeze(RECOGNITION_EXCEPTION_NAMES);\n function isRecognitionException(error) {\n return includes(RECOGNITION_EXCEPTION_NAMES, error.name);\n }\n class RecognitionException extends Error {\n constructor(message, token) {\n super(message);\n this.token = token;\n this.resyncedTokens = [];\n Object.setPrototypeOf(this, new.target.prototype);\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n }\n class MismatchedTokenException extends RecognitionException {\n constructor(message, token, previousToken) {\n super(message, token);\n this.previousToken = previousToken;\n this.name = MISMATCHED_TOKEN_EXCEPTION;\n }\n }\n class NoViableAltException extends RecognitionException {\n constructor(message, token, previousToken) {\n super(message, token);\n this.previousToken = previousToken;\n this.name = NO_VIABLE_ALT_EXCEPTION;\n }\n }\n class NotAllInputParsedException extends RecognitionException {\n constructor(message, token) {\n super(message, token);\n this.name = NOT_ALL_INPUT_PARSED_EXCEPTION;\n }\n }\n class EarlyExitException extends RecognitionException {\n constructor(message, token, previousToken) {\n super(message, token);\n this.previousToken = previousToken;\n this.name = EARLY_EXIT_EXCEPTION;\n }\n }\n const EOF_FOLLOW_KEY = {};\n const IN_RULE_RECOVERY_EXCEPTION = \"InRuleRecoveryException\";\n class InRuleRecoveryException extends Error {\n constructor(message) {\n super(message);\n this.name = IN_RULE_RECOVERY_EXCEPTION;\n }\n }\n class Recoverable {\n initRecoverable(config) {\n this.firstAfterRepMap = {};\n this.resyncFollows = {};\n this.recoveryEnabled = has(config, \"recoveryEnabled\") ? config.recoveryEnabled : DEFAULT_PARSER_CONFIG.recoveryEnabled;\n if (this.recoveryEnabled) {\n this.attemptInRepetitionRecovery = attemptInRepetitionRecovery;\n }\n }\n getTokenToInsert(tokType) {\n const tokToInsert = createTokenInstance(tokType, \"\", NaN, NaN, NaN, NaN, NaN, NaN);\n tokToInsert.isInsertedInRecovery = true;\n return tokToInsert;\n }\n canTokenTypeBeInsertedInRecovery(tokType) {\n return true;\n }\n canTokenTypeBeDeletedInRecovery(tokType) {\n return true;\n }\n tryInRepetitionRecovery(grammarRule, grammarRuleArgs, lookAheadFunc, expectedTokType) {\n const reSyncTokType = this.findReSyncTokenType();\n const savedLexerState = this.exportLexerState();\n const resyncedTokens = [];\n let passedResyncPoint = false;\n const nextTokenWithoutResync = this.LA(1);\n let currToken = this.LA(1);\n const generateErrorMessage = () => {\n const previousToken = this.LA(0);\n const msg = this.errorMessageProvider.buildMismatchTokenMessage({\n expected: expectedTokType,\n actual: nextTokenWithoutResync,\n previous: previousToken,\n ruleName: this.getCurrRuleFullName()\n });\n const error = new MismatchedTokenException(msg, nextTokenWithoutResync, this.LA(0));\n error.resyncedTokens = dropRight(resyncedTokens);\n this.SAVE_ERROR(error);\n };\n while (!passedResyncPoint) {\n if (this.tokenMatcher(currToken, expectedTokType)) {\n generateErrorMessage();\n return;\n } else if (lookAheadFunc.call(this)) {\n generateErrorMessage();\n grammarRule.apply(this, grammarRuleArgs);\n return;\n } else if (this.tokenMatcher(currToken, reSyncTokType)) {\n passedResyncPoint = true;\n } else {\n currToken = this.SKIP_TOKEN();\n this.addToResyncTokens(currToken, resyncedTokens);\n }\n }\n this.importLexerState(savedLexerState);\n }\n shouldInRepetitionRecoveryBeTried(expectTokAfterLastMatch, nextTokIdx, notStuck) {\n if (notStuck === false) {\n return false;\n }\n if (this.tokenMatcher(this.LA(1), expectTokAfterLastMatch)) {\n return false;\n }\n if (this.isBackTracking()) {\n return false;\n }\n if (this.canPerformInRuleRecovery(\n expectTokAfterLastMatch,\n this.getFollowsForInRuleRecovery(expectTokAfterLastMatch, nextTokIdx)\n )) {\n return false;\n }\n return true;\n }\n // Error Recovery functionality\n getFollowsForInRuleRecovery(tokType, tokIdxInRule) {\n const grammarPath = this.getCurrentGrammarPath(tokType, tokIdxInRule);\n const follows = this.getNextPossibleTokenTypes(grammarPath);\n return follows;\n }\n tryInRuleRecovery(expectedTokType, follows) {\n if (this.canRecoverWithSingleTokenInsertion(expectedTokType, follows)) {\n const tokToInsert = this.getTokenToInsert(expectedTokType);\n return tokToInsert;\n }\n if (this.canRecoverWithSingleTokenDeletion(expectedTokType)) {\n const nextTok = this.SKIP_TOKEN();\n this.consumeToken();\n return nextTok;\n }\n throw new InRuleRecoveryException(\"sad sad panda\");\n }\n canPerformInRuleRecovery(expectedToken, follows) {\n return this.canRecoverWithSingleTokenInsertion(expectedToken, follows) || this.canRecoverWithSingleTokenDeletion(expectedToken);\n }\n canRecoverWithSingleTokenInsertion(expectedTokType, follows) {\n if (!this.canTokenTypeBeInsertedInRecovery(expectedTokType)) {\n return false;\n }\n if (isEmpty(follows)) {\n return false;\n }\n const mismatchedTok = this.LA(1);\n const isMisMatchedTokInFollows = find$1(follows, (possibleFollowsTokType) => {\n return this.tokenMatcher(mismatchedTok, possibleFollowsTokType);\n }) !== void 0;\n return isMisMatchedTokInFollows;\n }\n canRecoverWithSingleTokenDeletion(expectedTokType) {\n if (!this.canTokenTypeBeDeletedInRecovery(expectedTokType)) {\n return false;\n }\n const isNextTokenWhatIsExpected = this.tokenMatcher(this.LA(2), expectedTokType);\n return isNextTokenWhatIsExpected;\n }\n isInCurrentRuleReSyncSet(tokenTypeIdx) {\n const followKey = this.getCurrFollowKey();\n const currentRuleReSyncSet = this.getFollowSetFromFollowKey(followKey);\n return includes(currentRuleReSyncSet, tokenTypeIdx);\n }\n findReSyncTokenType() {\n const allPossibleReSyncTokTypes = this.flattenFollowSet();\n let nextToken = this.LA(1);\n let k = 2;\n while (true) {\n const foundMatch = find$1(allPossibleReSyncTokTypes, (resyncTokType) => {\n const canMatch = tokenMatcher(nextToken, resyncTokType);\n return canMatch;\n });\n if (foundMatch !== void 0) {\n return foundMatch;\n }\n nextToken = this.LA(k);\n k++;\n }\n }\n getCurrFollowKey() {\n if (this.RULE_STACK.length === 1) {\n return EOF_FOLLOW_KEY;\n }\n const currRuleShortName = this.getLastExplicitRuleShortName();\n const currRuleIdx = this.getLastExplicitRuleOccurrenceIndex();\n const prevRuleShortName = this.getPreviousExplicitRuleShortName();\n return {\n ruleName: this.shortRuleNameToFullName(currRuleShortName),\n idxInCallingRule: currRuleIdx,\n inRule: this.shortRuleNameToFullName(prevRuleShortName)\n };\n }\n buildFullFollowKeyStack() {\n const explicitRuleStack = this.RULE_STACK;\n const explicitOccurrenceStack = this.RULE_OCCURRENCE_STACK;\n return map(explicitRuleStack, (ruleName, idx) => {\n if (idx === 0) {\n return EOF_FOLLOW_KEY;\n }\n return {\n ruleName: this.shortRuleNameToFullName(ruleName),\n idxInCallingRule: explicitOccurrenceStack[idx],\n inRule: this.shortRuleNameToFullName(explicitRuleStack[idx - 1])\n };\n });\n }\n flattenFollowSet() {\n const followStack = map(this.buildFullFollowKeyStack(), (currKey) => {\n return this.getFollowSetFromFollowKey(currKey);\n });\n return flatten(followStack);\n }\n getFollowSetFromFollowKey(followKey) {\n if (followKey === EOF_FOLLOW_KEY) {\n return [EOF];\n }\n const followName = followKey.ruleName + followKey.idxInCallingRule + IN + followKey.inRule;\n return this.resyncFollows[followName];\n }\n // It does not make any sense to include a virtual EOF token in the list of resynced tokens\n // as EOF does not really exist and thus does not contain any useful information (line/column numbers)\n addToResyncTokens(token, resyncTokens) {\n if (!this.tokenMatcher(token, EOF)) {\n resyncTokens.push(token);\n }\n return resyncTokens;\n }\n reSyncTo(tokType) {\n const resyncedTokens = [];\n let nextTok = this.LA(1);\n while (this.tokenMatcher(nextTok, tokType) === false) {\n nextTok = this.SKIP_TOKEN();\n this.addToResyncTokens(nextTok, resyncedTokens);\n }\n return dropRight(resyncedTokens);\n }\n attemptInRepetitionRecovery(prodFunc, args, lookaheadFunc, dslMethodIdx, prodOccurrence, nextToksWalker, notStuck) {\n }\n getCurrentGrammarPath(tokType, tokIdxInRule) {\n const pathRuleStack = this.getHumanReadableRuleStack();\n const pathOccurrenceStack = clone(this.RULE_OCCURRENCE_STACK);\n const grammarPath = {\n ruleStack: pathRuleStack,\n occurrenceStack: pathOccurrenceStack,\n lastTok: tokType,\n lastTokOccurrence: tokIdxInRule\n };\n return grammarPath;\n }\n getHumanReadableRuleStack() {\n return map(this.RULE_STACK, (currShortName) => this.shortRuleNameToFullName(currShortName));\n }\n }\n function attemptInRepetitionRecovery(prodFunc, args, lookaheadFunc, dslMethodIdx, prodOccurrence, nextToksWalker, notStuck) {\n const key = this.getKeyForAutomaticLookahead(dslMethodIdx, prodOccurrence);\n let firstAfterRepInfo = this.firstAfterRepMap[key];\n if (firstAfterRepInfo === void 0) {\n const currRuleName = this.getCurrRuleFullName();\n const ruleGrammar = this.getGAstProductions()[currRuleName];\n const walker = new nextToksWalker(ruleGrammar, prodOccurrence);\n firstAfterRepInfo = walker.startWalking();\n this.firstAfterRepMap[key] = firstAfterRepInfo;\n }\n let expectTokAfterLastMatch = firstAfterRepInfo.token;\n let nextTokIdx = firstAfterRepInfo.occurrence;\n const isEndOfRule = firstAfterRepInfo.isEndOfRule;\n if (this.RULE_STACK.length === 1 && isEndOfRule && expectTokAfterLastMatch === void 0) {\n expectTokAfterLastMatch = EOF;\n nextTokIdx = 1;\n }\n if (expectTokAfterLastMatch === void 0 || nextTokIdx === void 0) {\n return;\n }\n if (this.shouldInRepetitionRecoveryBeTried(expectTokAfterLastMatch, nextTokIdx, notStuck)) {\n this.tryInRepetitionRecovery(prodFunc, args, lookaheadFunc, expectTokAfterLastMatch);\n }\n }\n const BITS_FOR_METHOD_TYPE = 4;\n const BITS_FOR_OCCURRENCE_IDX = 8;\n const OR_IDX = 1 << BITS_FOR_OCCURRENCE_IDX;\n const OPTION_IDX = 2 << BITS_FOR_OCCURRENCE_IDX;\n const MANY_IDX = 3 << BITS_FOR_OCCURRENCE_IDX;\n const AT_LEAST_ONE_IDX = 4 << BITS_FOR_OCCURRENCE_IDX;\n const MANY_SEP_IDX = 5 << BITS_FOR_OCCURRENCE_IDX;\n const AT_LEAST_ONE_SEP_IDX = 6 << BITS_FOR_OCCURRENCE_IDX;\n function getKeyForAutomaticLookahead(ruleIdx, dslMethodIdx, occurrence) {\n return occurrence | dslMethodIdx | ruleIdx;\n }\n class LLkLookaheadStrategy {\n constructor(options) {\n var _a;\n this.maxLookahead = (_a = options === null || options === void 0 ? void 0 : options.maxLookahead) !== null && _a !== void 0 ? _a : DEFAULT_PARSER_CONFIG.maxLookahead;\n }\n validate(options) {\n const leftRecursionErrors = this.validateNoLeftRecursion(options.rules);\n if (isEmpty(leftRecursionErrors)) {\n const emptyAltErrors = this.validateEmptyOrAlternatives(options.rules);\n const ambiguousAltsErrors = this.validateAmbiguousAlternationAlternatives(options.rules, this.maxLookahead);\n const emptyRepetitionErrors = this.validateSomeNonEmptyLookaheadPath(options.rules, this.maxLookahead);\n const allErrors = [...leftRecursionErrors, ...emptyAltErrors, ...ambiguousAltsErrors, ...emptyRepetitionErrors];\n return allErrors;\n }\n return leftRecursionErrors;\n }\n validateNoLeftRecursion(rules) {\n return flatMap(\n rules,\n (currTopRule) => validateNoLeftRecursion(currTopRule, currTopRule, defaultGrammarValidatorErrorProvider)\n );\n }\n validateEmptyOrAlternatives(rules) {\n return flatMap(\n rules,\n (currTopRule) => validateEmptyOrAlternative(currTopRule, defaultGrammarValidatorErrorProvider)\n );\n }\n validateAmbiguousAlternationAlternatives(rules, maxLookahead) {\n return flatMap(\n rules,\n (currTopRule) => validateAmbiguousAlternationAlternatives(currTopRule, maxLookahead, defaultGrammarValidatorErrorProvider)\n );\n }\n validateSomeNonEmptyLookaheadPath(rules, maxLookahead) {\n return validateSomeNonEmptyLookaheadPath(rules, maxLookahead, defaultGrammarValidatorErrorProvider);\n }\n buildLookaheadForAlternation(options) {\n return buildLookaheadFuncForOr(\n options.prodOccurrence,\n options.rule,\n options.maxLookahead,\n options.hasPredicates,\n options.dynamicTokensEnabled,\n buildAlternativesLookAheadFunc\n );\n }\n buildLookaheadForOptional(options) {\n return buildLookaheadFuncForOptionalProd(\n options.prodOccurrence,\n options.rule,\n options.maxLookahead,\n options.dynamicTokensEnabled,\n getProdType(options.prodType),\n buildSingleAlternativeLookaheadFunction\n );\n }\n }\n class LooksAhead {\n initLooksAhead(config) {\n this.dynamicTokensEnabled = has(config, \"dynamicTokensEnabled\") ? config.dynamicTokensEnabled : DEFAULT_PARSER_CONFIG.dynamicTokensEnabled;\n this.maxLookahead = has(config, \"maxLookahead\") ? config.maxLookahead : DEFAULT_PARSER_CONFIG.maxLookahead;\n this.lookaheadStrategy = has(config, \"lookaheadStrategy\") ? config.lookaheadStrategy : new LLkLookaheadStrategy({ maxLookahead: this.maxLookahead });\n this.lookAheadFuncsCache = /* @__PURE__ */ new Map();\n }\n preComputeLookaheadFunctions(rules) {\n forEach(rules, (currRule) => {\n this.TRACE_INIT(`${currRule.name} Rule Lookahead`, () => {\n const {\n alternation,\n repetition,\n option,\n repetitionMandatory,\n repetitionMandatoryWithSeparator,\n repetitionWithSeparator\n } = collectMethods(currRule);\n forEach(alternation, (currProd) => {\n const prodIdx = currProd.idx === 0 ? \"\" : currProd.idx;\n this.TRACE_INIT(`${getProductionDslName(currProd)}${prodIdx}`, () => {\n const laFunc = this.lookaheadStrategy.buildLookaheadForAlternation({\n prodOccurrence: currProd.idx,\n rule: currRule,\n maxLookahead: currProd.maxLookahead || this.maxLookahead,\n hasPredicates: currProd.hasPredicates,\n dynamicTokensEnabled: this.dynamicTokensEnabled\n });\n const key = getKeyForAutomaticLookahead(this.fullRuleNameToShort[currRule.name], OR_IDX, currProd.idx);\n this.setLaFuncCache(key, laFunc);\n });\n });\n forEach(repetition, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n MANY_IDX,\n \"Repetition\",\n currProd.maxLookahead,\n getProductionDslName(currProd)\n );\n });\n forEach(option, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n OPTION_IDX,\n \"Option\",\n currProd.maxLookahead,\n getProductionDslName(currProd)\n );\n });\n forEach(repetitionMandatory, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n AT_LEAST_ONE_IDX,\n \"RepetitionMandatory\",\n currProd.maxLookahead,\n getProductionDslName(currProd)\n );\n });\n forEach(repetitionMandatoryWithSeparator, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n AT_LEAST_ONE_SEP_IDX,\n \"RepetitionMandatoryWithSeparator\",\n currProd.maxLookahead,\n getProductionDslName(currProd)\n );\n });\n forEach(repetitionWithSeparator, (currProd) => {\n this.computeLookaheadFunc(\n currRule,\n currProd.idx,\n MANY_SEP_IDX,\n \"RepetitionWithSeparator\",\n currProd.maxLookahead,\n getProductionDslName(currProd)\n );\n });\n });\n });\n }\n computeLookaheadFunc(rule, prodOccurrence, prodKey, prodType, prodMaxLookahead, dslMethodName) {\n this.TRACE_INIT(`${dslMethodName}${prodOccurrence === 0 ? \"\" : prodOccurrence}`, () => {\n const laFunc = this.lookaheadStrategy.buildLookaheadForOptional({\n prodOccurrence,\n rule,\n maxLookahead: prodMaxLookahead || this.maxLookahead,\n dynamicTokensEnabled: this.dynamicTokensEnabled,\n prodType\n });\n const key = getKeyForAutomaticLookahead(this.fullRuleNameToShort[rule.name], prodKey, prodOccurrence);\n this.setLaFuncCache(key, laFunc);\n });\n }\n // this actually returns a number, but it is always used as a string (object prop key)\n getKeyForAutomaticLookahead(dslMethodIdx, occurrence) {\n const currRuleShortName = this.getLastExplicitRuleShortName();\n return getKeyForAutomaticLookahead(currRuleShortName, dslMethodIdx, occurrence);\n }\n getLaFuncFromCache(key) {\n return this.lookAheadFuncsCache.get(key);\n }\n /* istanbul ignore next */\n setLaFuncCache(key, value) {\n this.lookAheadFuncsCache.set(key, value);\n }\n }\n class DslMethodsCollectorVisitor extends GAstVisitor {\n constructor() {\n super(...arguments);\n this.dslMethods = {\n option: [],\n alternation: [],\n repetition: [],\n repetitionWithSeparator: [],\n repetitionMandatory: [],\n repetitionMandatoryWithSeparator: []\n };\n }\n reset() {\n this.dslMethods = {\n option: [],\n alternation: [],\n repetition: [],\n repetitionWithSeparator: [],\n repetitionMandatory: [],\n repetitionMandatoryWithSeparator: []\n };\n }\n visitOption(option) {\n this.dslMethods.option.push(option);\n }\n visitRepetitionWithSeparator(manySep) {\n this.dslMethods.repetitionWithSeparator.push(manySep);\n }\n visitRepetitionMandatory(atLeastOne) {\n this.dslMethods.repetitionMandatory.push(atLeastOne);\n }\n visitRepetitionMandatoryWithSeparator(atLeastOneSep) {\n this.dslMethods.repetitionMandatoryWithSeparator.push(atLeastOneSep);\n }\n visitRepetition(many) {\n this.dslMethods.repetition.push(many);\n }\n visitAlternation(or) {\n this.dslMethods.alternation.push(or);\n }\n }\n const collectorVisitor = new DslMethodsCollectorVisitor();\n function collectMethods(rule) {\n collectorVisitor.reset();\n rule.accept(collectorVisitor);\n const dslMethods = collectorVisitor.dslMethods;\n collectorVisitor.reset();\n return dslMethods;\n }\n function setNodeLocationOnlyOffset(currNodeLocation, newLocationInfo) {\n if (isNaN(currNodeLocation.startOffset) === true) {\n currNodeLocation.startOffset = newLocationInfo.startOffset;\n currNodeLocation.endOffset = newLocationInfo.endOffset;\n } else if (currNodeLocation.endOffset < newLocationInfo.endOffset === true) {\n currNodeLocation.endOffset = newLocationInfo.endOffset;\n }\n }\n function setNodeLocationFull(currNodeLocation, newLocationInfo) {\n if (isNaN(currNodeLocation.startOffset) === true) {\n currNodeLocation.startOffset = newLocationInfo.startOffset;\n currNodeLocation.startColumn = newLocationInfo.startColumn;\n currNodeLocation.startLine = newLocationInfo.startLine;\n currNodeLocation.endOffset = newLocationInfo.endOffset;\n currNodeLocation.endColumn = newLocationInfo.endColumn;\n currNodeLocation.endLine = newLocationInfo.endLine;\n } else if (currNodeLocation.endOffset < newLocationInfo.endOffset === true) {\n currNodeLocation.endOffset = newLocationInfo.endOffset;\n currNodeLocation.endColumn = newLocationInfo.endColumn;\n currNodeLocation.endLine = newLocationInfo.endLine;\n }\n }\n function addTerminalToCst(node, token, tokenTypeName) {\n if (node.children[tokenTypeName] === void 0) {\n node.children[tokenTypeName] = [token];\n } else {\n node.children[tokenTypeName].push(token);\n }\n }\n function addNoneTerminalToCst(node, ruleName, ruleResult) {\n if (node.children[ruleName] === void 0) {\n node.children[ruleName] = [ruleResult];\n } else {\n node.children[ruleName].push(ruleResult);\n }\n }\n const NAME = \"name\";\n function defineNameProp(obj, nameValue) {\n Object.defineProperty(obj, NAME, {\n enumerable: false,\n configurable: true,\n writable: false,\n value: nameValue\n });\n }\n function defaultVisit(ctx, param) {\n const childrenNames = keys(ctx);\n const childrenNamesLength = childrenNames.length;\n for (let i = 0; i < childrenNamesLength; i++) {\n const currChildName = childrenNames[i];\n const currChildArray = ctx[currChildName];\n const currChildArrayLength = currChildArray.length;\n for (let j = 0; j < currChildArrayLength; j++) {\n const currChild = currChildArray[j];\n if (currChild.tokenTypeIdx === void 0) {\n this[currChild.name](currChild.children, param);\n }\n }\n }\n }\n function createBaseSemanticVisitorConstructor(grammarName, ruleNames) {\n const derivedConstructor = function() {\n };\n defineNameProp(derivedConstructor, grammarName + \"BaseSemantics\");\n const semanticProto = {\n visit: function(cstNode, param) {\n if (isArray$1(cstNode)) {\n cstNode = cstNode[0];\n }\n if (isUndefined(cstNode)) {\n return void 0;\n }\n return this[cstNode.name](cstNode.children, param);\n },\n validateVisitor: function() {\n const semanticDefinitionErrors = validateVisitor(this, ruleNames);\n if (!isEmpty(semanticDefinitionErrors)) {\n const errorMessages = map(semanticDefinitionErrors, (currDefError) => currDefError.msg);\n throw Error(\n `Errors Detected in CST Visitor <${this.constructor.name}>:\n\t${errorMessages.join(\"\\n\\n\").replace(/\\n/g, \"\\n\t\")}`\n );\n }\n }\n };\n derivedConstructor.prototype = semanticProto;\n derivedConstructor.prototype.constructor = derivedConstructor;\n derivedConstructor._RULE_NAMES = ruleNames;\n return derivedConstructor;\n }\n function createBaseVisitorConstructorWithDefaults(grammarName, ruleNames, baseConstructor) {\n const derivedConstructor = function() {\n };\n defineNameProp(derivedConstructor, grammarName + \"BaseSemanticsWithDefaults\");\n const withDefaultsProto = Object.create(baseConstructor.prototype);\n forEach(ruleNames, (ruleName) => {\n withDefaultsProto[ruleName] = defaultVisit;\n });\n derivedConstructor.prototype = withDefaultsProto;\n derivedConstructor.prototype.constructor = derivedConstructor;\n return derivedConstructor;\n }\n var CstVisitorDefinitionError;\n (function(CstVisitorDefinitionError2) {\n CstVisitorDefinitionError2[CstVisitorDefinitionError2[\"REDUNDANT_METHOD\"] = 0] = \"REDUNDANT_METHOD\";\n CstVisitorDefinitionError2[CstVisitorDefinitionError2[\"MISSING_METHOD\"] = 1] = \"MISSING_METHOD\";\n })(CstVisitorDefinitionError || (CstVisitorDefinitionError = {}));\n function validateVisitor(visitorInstance, ruleNames) {\n const missingErrors = validateMissingCstMethods(visitorInstance, ruleNames);\n return missingErrors;\n }\n function validateMissingCstMethods(visitorInstance, ruleNames) {\n const missingRuleNames = filter(ruleNames, (currRuleName) => {\n return isFunction(visitorInstance[currRuleName]) === false;\n });\n const errors = map(missingRuleNames, (currRuleName) => {\n return {\n msg: `Missing visitor method: <${currRuleName}> on ${visitorInstance.constructor.name} CST Visitor.`,\n type: CstVisitorDefinitionError.MISSING_METHOD,\n methodName: currRuleName\n };\n });\n return compact(errors);\n }\n class TreeBuilder {\n initTreeBuilder(config) {\n this.CST_STACK = [];\n this.outputCst = config.outputCst;\n this.nodeLocationTracking = has(config, \"nodeLocationTracking\") ? config.nodeLocationTracking : DEFAULT_PARSER_CONFIG.nodeLocationTracking;\n if (!this.outputCst) {\n this.cstInvocationStateUpdate = noop;\n this.cstFinallyStateUpdate = noop;\n this.cstPostTerminal = noop;\n this.cstPostNonTerminal = noop;\n this.cstPostRule = noop;\n } else {\n if (/full/i.test(this.nodeLocationTracking)) {\n if (this.recoveryEnabled) {\n this.setNodeLocationFromToken = setNodeLocationFull;\n this.setNodeLocationFromNode = setNodeLocationFull;\n this.cstPostRule = noop;\n this.setInitialNodeLocation = this.setInitialNodeLocationFullRecovery;\n } else {\n this.setNodeLocationFromToken = noop;\n this.setNodeLocationFromNode = noop;\n this.cstPostRule = this.cstPostRuleFull;\n this.setInitialNodeLocation = this.setInitialNodeLocationFullRegular;\n }\n } else if (/onlyOffset/i.test(this.nodeLocationTracking)) {\n if (this.recoveryEnabled) {\n this.setNodeLocationFromToken = setNodeLocationOnlyOffset;\n this.setNodeLocationFromNode = setNodeLocationOnlyOffset;\n this.cstPostRule = noop;\n this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRecovery;\n } else {\n this.setNodeLocationFromToken = noop;\n this.setNodeLocationFromNode = noop;\n this.cstPostRule = this.cstPostRuleOnlyOffset;\n this.setInitialNodeLocation = this.setInitialNodeLocationOnlyOffsetRegular;\n }\n } else if (/none/i.test(this.nodeLocationTracking)) {\n this.setNodeLocationFromToken = noop;\n this.setNodeLocationFromNode = noop;\n this.cstPostRule = noop;\n this.setInitialNodeLocation = noop;\n } else {\n throw Error(`Invalid <nodeLocationTracking> config option: \"${config.nodeLocationTracking}\"`);\n }\n }\n }\n setInitialNodeLocationOnlyOffsetRecovery(cstNode) {\n cstNode.location = {\n startOffset: NaN,\n endOffset: NaN\n };\n }\n setInitialNodeLocationOnlyOffsetRegular(cstNode) {\n cstNode.location = {\n // without error recovery the starting Location of a new CstNode is guaranteed\n // To be the next Token's startOffset (for valid inputs).\n // For invalid inputs there won't be any CSTOutput so this potential\n // inaccuracy does not matter\n startOffset: this.LA(1).startOffset,\n endOffset: NaN\n };\n }\n setInitialNodeLocationFullRecovery(cstNode) {\n cstNode.location = {\n startOffset: NaN,\n startLine: NaN,\n startColumn: NaN,\n endOffset: NaN,\n endLine: NaN,\n endColumn: NaN\n };\n }\n /**\n * @see setInitialNodeLocationOnlyOffsetRegular for explanation why this work\n \n * @param cstNode\n */\n setInitialNodeLocationFullRegular(cstNode) {\n const nextToken = this.LA(1);\n cstNode.location = {\n startOffset: nextToken.startOffset,\n startLine: nextToken.startLine,\n startColumn: nextToken.startColumn,\n endOffset: NaN,\n endLine: NaN,\n endColumn: NaN\n };\n }\n cstInvocationStateUpdate(fullRuleName) {\n const cstNode = {\n name: fullRuleName,\n children: /* @__PURE__ */ Object.create(null)\n };\n this.setInitialNodeLocation(cstNode);\n this.CST_STACK.push(cstNode);\n }\n cstFinallyStateUpdate() {\n this.CST_STACK.pop();\n }\n cstPostRuleFull(ruleCstNode) {\n const prevToken = this.LA(0);\n const loc = ruleCstNode.location;\n if (loc.startOffset <= prevToken.startOffset === true) {\n loc.endOffset = prevToken.endOffset;\n loc.endLine = prevToken.endLine;\n loc.endColumn = prevToken.endColumn;\n } else {\n loc.startOffset = NaN;\n loc.startLine = NaN;\n loc.startColumn = NaN;\n }\n }\n cstPostRuleOnlyOffset(ruleCstNode) {\n const prevToken = this.LA(0);\n const loc = ruleCstNode.location;\n if (loc.startOffset <= prevToken.startOffset === true) {\n loc.endOffset = prevToken.endOffset;\n } else {\n loc.startOffset = NaN;\n }\n }\n cstPostTerminal(key, consumedToken) {\n const rootCst = this.CST_STACK[this.CST_STACK.length - 1];\n addTerminalToCst(rootCst, consumedToken, key);\n this.setNodeLocationFromToken(rootCst.location, consumedToken);\n }\n cstPostNonTerminal(ruleCstResult, ruleName) {\n const preCstNode = this.CST_STACK[this.CST_STACK.length - 1];\n addNoneTerminalToCst(preCstNode, ruleName, ruleCstResult);\n this.setNodeLocationFromNode(preCstNode.location, ruleCstResult.location);\n }\n getBaseCstVisitorConstructor() {\n if (isUndefined(this.baseCstVisitorConstructor)) {\n const newBaseCstVisitorConstructor = createBaseSemanticVisitorConstructor(\n this.className,\n keys(this.gastProductionsCache)\n );\n this.baseCstVisitorConstructor = newBaseCstVisitorConstructor;\n return newBaseCstVisitorConstructor;\n }\n return this.baseCstVisitorConstructor;\n }\n getBaseCstVisitorConstructorWithDefaults() {\n if (isUndefined(this.baseCstVisitorWithDefaultsConstructor)) {\n const newConstructor = createBaseVisitorConstructorWithDefaults(\n this.className,\n keys(this.gastProductionsCache),\n this.getBaseCstVisitorConstructor()\n );\n this.baseCstVisitorWithDefaultsConstructor = newConstructor;\n return newConstructor;\n }\n return this.baseCstVisitorWithDefaultsConstructor;\n }\n getLastExplicitRuleShortName() {\n const ruleStack = this.RULE_STACK;\n return ruleStack[ruleStack.length - 1];\n }\n getPreviousExplicitRuleShortName() {\n const ruleStack = this.RULE_STACK;\n return ruleStack[ruleStack.length - 2];\n }\n getLastExplicitRuleOccurrenceIndex() {\n const occurrenceStack = this.RULE_OCCURRENCE_STACK;\n return occurrenceStack[occurrenceStack.length - 1];\n }\n }\n class LexerAdapter {\n initLexerAdapter() {\n this.tokVector = [];\n this.tokVectorLength = 0;\n this.currIdx = -1;\n }\n set input(newInput) {\n if (this.selfAnalysisDone !== true) {\n throw Error(`Missing <performSelfAnalysis> invocation at the end of the Parser's constructor.`);\n }\n this.reset();\n this.tokVector = newInput;\n this.tokVectorLength = newInput.length;\n }\n get input() {\n return this.tokVector;\n }\n // skips a token and returns the next token\n SKIP_TOKEN() {\n if (this.currIdx <= this.tokVector.length - 2) {\n this.consumeToken();\n return this.LA(1);\n } else {\n return END_OF_FILE;\n }\n }\n // Lexer (accessing Token vector) related methods which can be overridden to implement lazy lexers\n // or lexers dependent on parser context.\n LA(howMuch) {\n const soughtIdx = this.currIdx + howMuch;\n if (soughtIdx < 0 || this.tokVectorLength <= soughtIdx) {\n return END_OF_FILE;\n } else {\n return this.tokVector[soughtIdx];\n }\n }\n consumeToken() {\n this.currIdx++;\n }\n exportLexerState() {\n return this.currIdx;\n }\n importLexerState(newState) {\n this.currIdx = newState;\n }\n resetLexerState() {\n this.currIdx = -1;\n }\n moveToTerminatedState() {\n this.currIdx = this.tokVector.length - 1;\n }\n getLexerPosition() {\n return this.exportLexerState();\n }\n }\n class RecognizerApi {\n ACTION(impl) {\n return impl.call(this);\n }\n consume(idx, tokType, options) {\n return this.consumeInternal(tokType, idx, options);\n }\n subrule(idx, ruleToCall, options) {\n return this.subruleInternal(ruleToCall, idx, options);\n }\n option(idx, actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, idx);\n }\n or(idx, altsOrOpts) {\n return this.orInternal(altsOrOpts, idx);\n }\n many(idx, actionORMethodDef) {\n return this.manyInternal(idx, actionORMethodDef);\n }\n atLeastOne(idx, actionORMethodDef) {\n return this.atLeastOneInternal(idx, actionORMethodDef);\n }\n CONSUME(tokType, options) {\n return this.consumeInternal(tokType, 0, options);\n }\n CONSUME1(tokType, options) {\n return this.consumeInternal(tokType, 1, options);\n }\n CONSUME2(tokType, options) {\n return this.consumeInternal(tokType, 2, options);\n }\n CONSUME3(tokType, options) {\n return this.consumeInternal(tokType, 3, options);\n }\n CONSUME4(tokType, options) {\n return this.consumeInternal(tokType, 4, options);\n }\n CONSUME5(tokType, options) {\n return this.consumeInternal(tokType, 5, options);\n }\n CONSUME6(tokType, options) {\n return this.consumeInternal(tokType, 6, options);\n }\n CONSUME7(tokType, options) {\n return this.consumeInternal(tokType, 7, options);\n }\n CONSUME8(tokType, options) {\n return this.consumeInternal(tokType, 8, options);\n }\n CONSUME9(tokType, options) {\n return this.consumeInternal(tokType, 9, options);\n }\n SUBRULE(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 0, options);\n }\n SUBRULE1(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 1, options);\n }\n SUBRULE2(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 2, options);\n }\n SUBRULE3(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 3, options);\n }\n SUBRULE4(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 4, options);\n }\n SUBRULE5(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 5, options);\n }\n SUBRULE6(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 6, options);\n }\n SUBRULE7(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 7, options);\n }\n SUBRULE8(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 8, options);\n }\n SUBRULE9(ruleToCall, options) {\n return this.subruleInternal(ruleToCall, 9, options);\n }\n OPTION(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 0);\n }\n OPTION1(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 1);\n }\n OPTION2(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 2);\n }\n OPTION3(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 3);\n }\n OPTION4(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 4);\n }\n OPTION5(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 5);\n }\n OPTION6(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 6);\n }\n OPTION7(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 7);\n }\n OPTION8(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 8);\n }\n OPTION9(actionORMethodDef) {\n return this.optionInternal(actionORMethodDef, 9);\n }\n OR(altsOrOpts) {\n return this.orInternal(altsOrOpts, 0);\n }\n OR1(altsOrOpts) {\n return this.orInternal(altsOrOpts, 1);\n }\n OR2(altsOrOpts) {\n return this.orInternal(altsOrOpts, 2);\n }\n OR3(altsOrOpts) {\n return this.orInternal(altsOrOpts, 3);\n }\n OR4(altsOrOpts) {\n return this.orInternal(altsOrOpts, 4);\n }\n OR5(altsOrOpts) {\n return this.orInternal(altsOrOpts, 5);\n }\n OR6(altsOrOpts) {\n return this.orInternal(altsOrOpts, 6);\n }\n OR7(altsOrOpts) {\n return this.orInternal(altsOrOpts, 7);\n }\n OR8(altsOrOpts) {\n return this.orInternal(altsOrOpts, 8);\n }\n OR9(altsOrOpts) {\n return this.orInternal(altsOrOpts, 9);\n }\n MANY(actionORMethodDef) {\n this.manyInternal(0, actionORMethodDef);\n }\n MANY1(actionORMethodDef) {\n this.manyInternal(1, actionORMethodDef);\n }\n MANY2(actionORMethodDef) {\n this.manyInternal(2, actionORMethodDef);\n }\n MANY3(actionORMethodDef) {\n this.manyInternal(3, actionORMethodDef);\n }\n MANY4(actionORMethodDef) {\n this.manyInternal(4, actionORMethodDef);\n }\n MANY5(actionORMethodDef) {\n this.manyInternal(5, actionORMethodDef);\n }\n MANY6(actionORMethodDef) {\n this.manyInternal(6, actionORMethodDef);\n }\n MANY7(actionORMethodDef) {\n this.manyInternal(7, actionORMethodDef);\n }\n MANY8(actionORMethodDef) {\n this.manyInternal(8, actionORMethodDef);\n }\n MANY9(actionORMethodDef) {\n this.manyInternal(9, actionORMethodDef);\n }\n MANY_SEP(options) {\n this.manySepFirstInternal(0, options);\n }\n MANY_SEP1(options) {\n this.manySepFirstInternal(1, options);\n }\n MANY_SEP2(options) {\n this.manySepFirstInternal(2, options);\n }\n MANY_SEP3(options) {\n this.manySepFirstInternal(3, options);\n }\n MANY_SEP4(options) {\n this.manySepFirstInternal(4, options);\n }\n MANY_SEP5(options) {\n this.manySepFirstInternal(5, options);\n }\n MANY_SEP6(options) {\n this.manySepFirstInternal(6, options);\n }\n MANY_SEP7(options) {\n this.manySepFirstInternal(7, options);\n }\n MANY_SEP8(options) {\n this.manySepFirstInternal(8, options);\n }\n MANY_SEP9(options) {\n this.manySepFirstInternal(9, options);\n }\n AT_LEAST_ONE(actionORMethodDef) {\n this.atLeastOneInternal(0, actionORMethodDef);\n }\n AT_LEAST_ONE1(actionORMethodDef) {\n return this.atLeastOneInternal(1, actionORMethodDef);\n }\n AT_LEAST_ONE2(actionORMethodDef) {\n this.atLeastOneInternal(2, actionORMethodDef);\n }\n AT_LEAST_ONE3(actionORMethodDef) {\n this.atLeastOneInternal(3, actionORMethodDef);\n }\n AT_LEAST_ONE4(actionORMethodDef) {\n this.atLeastOneInternal(4, actionORMethodDef);\n }\n AT_LEAST_ONE5(actionORMethodDef) {\n this.atLeastOneInternal(5, actionORMethodDef);\n }\n AT_LEAST_ONE6(actionORMethodDef) {\n this.atLeastOneInternal(6, actionORMethodDef);\n }\n AT_LEAST_ONE7(actionORMethodDef) {\n this.atLeastOneInternal(7, actionORMethodDef);\n }\n AT_LEAST_ONE8(actionORMethodDef) {\n this.atLeastOneInternal(8, actionORMethodDef);\n }\n AT_LEAST_ONE9(actionORMethodDef) {\n this.atLeastOneInternal(9, actionORMethodDef);\n }\n AT_LEAST_ONE_SEP(options) {\n this.atLeastOneSepFirstInternal(0, options);\n }\n AT_LEAST_ONE_SEP1(options) {\n this.atLeastOneSepFirstInternal(1, options);\n }\n AT_LEAST_ONE_SEP2(options) {\n this.atLeastOneSepFirstInternal(2, options);\n }\n AT_LEAST_ONE_SEP3(options) {\n this.atLeastOneSepFirstInternal(3, options);\n }\n AT_LEAST_ONE_SEP4(options) {\n this.atLeastOneSepFirstInternal(4, options);\n }\n AT_LEAST_ONE_SEP5(options) {\n this.atLeastOneSepFirstInternal(5, options);\n }\n AT_LEAST_ONE_SEP6(options) {\n this.atLeastOneSepFirstInternal(6, options);\n }\n AT_LEAST_ONE_SEP7(options) {\n this.atLeastOneSepFirstInternal(7, options);\n }\n AT_LEAST_ONE_SEP8(options) {\n this.atLeastOneSepFirstInternal(8, options);\n }\n AT_LEAST_ONE_SEP9(options) {\n this.atLeastOneSepFirstInternal(9, options);\n }\n RULE(name, implementation, config = DEFAULT_RULE_CONFIG) {\n if (includes(this.definedRulesNames, name)) {\n const errMsg = defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({\n topLevelRule: name,\n grammarName: this.className\n });\n const error = {\n message: errMsg,\n type: ParserDefinitionErrorType.DUPLICATE_RULE_NAME,\n ruleName: name\n };\n this.definitionErrors.push(error);\n }\n this.definedRulesNames.push(name);\n const ruleImplementation = this.defineRule(name, implementation, config);\n this[name] = ruleImplementation;\n return ruleImplementation;\n }\n OVERRIDE_RULE(name, impl, config = DEFAULT_RULE_CONFIG) {\n const ruleErrors = validateRuleIsOverridden(name, this.definedRulesNames, this.className);\n this.definitionErrors = this.definitionErrors.concat(ruleErrors);\n const ruleImplementation = this.defineRule(name, impl, config);\n this[name] = ruleImplementation;\n return ruleImplementation;\n }\n BACKTRACK(grammarRule, args) {\n return function() {\n this.isBackTrackingStack.push(1);\n const orgState = this.saveRecogState();\n try {\n grammarRule.apply(this, args);\n return true;\n } catch (e) {\n if (isRecognitionException(e)) {\n return false;\n } else {\n throw e;\n }\n } finally {\n this.reloadRecogState(orgState);\n this.isBackTrackingStack.pop();\n }\n };\n }\n // GAST export APIs\n getGAstProductions() {\n return this.gastProductionsCache;\n }\n getSerializedGastProductions() {\n return serializeGrammar(values(this.gastProductionsCache));\n }\n }\n class RecognizerEngine {\n initRecognizerEngine(tokenVocabulary, config) {\n this.className = this.constructor.name;\n this.shortRuleNameToFull = {};\n this.fullRuleNameToShort = {};\n this.ruleShortNameIdx = 256;\n this.tokenMatcher = tokenStructuredMatcherNoCategories;\n this.subruleIdx = 0;\n this.definedRulesNames = [];\n this.tokensMap = {};\n this.isBackTrackingStack = [];\n this.RULE_STACK = [];\n this.RULE_OCCURRENCE_STACK = [];\n this.gastProductionsCache = {};\n if (has(config, \"serializedGrammar\")) {\n throw Error(\n \"The Parser's configuration can no longer contain a <serializedGrammar> property.\\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0\\n\tFor Further details.\"\n );\n }\n if (isArray$1(tokenVocabulary)) {\n if (isEmpty(tokenVocabulary)) {\n throw Error(\n \"A Token Vocabulary cannot be empty.\\n\tNote that the first argument for the parser constructor\\n\tis no longer a Token vector (since v4.0).\"\n );\n }\n if (typeof tokenVocabulary[0].startOffset === \"number\") {\n throw Error(\n \"The Parser constructor no longer accepts a token vector as the first argument.\\n\tSee: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0\\n\tFor Further details.\"\n );\n }\n }\n if (isArray$1(tokenVocabulary)) {\n this.tokensMap = reduce(\n tokenVocabulary,\n (acc, tokType) => {\n acc[tokType.name] = tokType;\n return acc;\n },\n {}\n );\n } else if (has(tokenVocabulary, \"modes\") && every(flatten(values(tokenVocabulary.modes)), isTokenType)) {\n const allTokenTypes2 = flatten(values(tokenVocabulary.modes));\n const uniqueTokens = uniq(allTokenTypes2);\n this.tokensMap = reduce(\n uniqueTokens,\n (acc, tokType) => {\n acc[tokType.name] = tokType;\n return acc;\n },\n {}\n );\n } else if (isObject(tokenVocabulary)) {\n this.tokensMap = clone(tokenVocabulary);\n } else {\n throw new Error(\n \"<tokensDictionary> argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition\"\n );\n }\n this.tokensMap[\"EOF\"] = EOF;\n const allTokenTypes = has(tokenVocabulary, \"modes\") ? flatten(values(tokenVocabulary.modes)) : values(tokenVocabulary);\n const noTokenCategoriesUsed = every(\n allTokenTypes,\n (tokenConstructor) => isEmpty(tokenConstructor.categoryMatches)\n );\n this.tokenMatcher = noTokenCategoriesUsed ? tokenStructuredMatcherNoCategories : tokenStructuredMatcher;\n augmentTokenTypes(values(this.tokensMap));\n }\n defineRule(ruleName, impl, config) {\n if (this.selfAnalysisDone) {\n throw Error(\n `Grammar rule <${ruleName}> may not be defined after the 'performSelfAnalysis' method has been called'\nMake sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`\n );\n }\n const resyncEnabled = has(config, \"resyncEnabled\") ? config.resyncEnabled : DEFAULT_RULE_CONFIG.resyncEnabled;\n const recoveryValueFunc = has(config, \"recoveryValueFunc\") ? config.recoveryValueFunc : DEFAULT_RULE_CONFIG.recoveryValueFunc;\n const shortName = this.ruleShortNameIdx << BITS_FOR_METHOD_TYPE + BITS_FOR_OCCURRENCE_IDX;\n this.ruleShortNameIdx++;\n this.shortRuleNameToFull[shortName] = ruleName;\n this.fullRuleNameToShort[ruleName] = shortName;\n let invokeRuleWithTry;\n if (this.outputCst === true) {\n invokeRuleWithTry = function invokeRuleWithTry2(...args) {\n try {\n this.ruleInvocationStateUpdate(shortName, ruleName, this.subruleIdx);\n impl.apply(this, args);\n const cst = this.CST_STACK[this.CST_STACK.length - 1];\n this.cstPostRule(cst);\n return cst;\n } catch (e) {\n return this.invokeRuleCatch(e, resyncEnabled, recoveryValueFunc);\n } finally {\n this.ruleFinallyStateUpdate();\n }\n };\n } else {\n invokeRuleWithTry = function invokeRuleWithTryCst(...args) {\n try {\n this.ruleInvocationStateUpdate(shortName, ruleName, this.subruleIdx);\n return impl.apply(this, args);\n } catch (e) {\n return this.invokeRuleCatch(e, resyncEnabled, recoveryValueFunc);\n } finally {\n this.ruleFinallyStateUpdate();\n }\n };\n }\n const wrappedGrammarRule = Object.assign(invokeRuleWithTry, { ruleName, originalGrammarAction: impl });\n return wrappedGrammarRule;\n }\n invokeRuleCatch(e, resyncEnabledConfig, recoveryValueFunc) {\n const isFirstInvokedRule = this.RULE_STACK.length === 1;\n const reSyncEnabled = resyncEnabledConfig && !this.isBackTracking() && this.recoveryEnabled;\n if (isRecognitionException(e)) {\n const recogError = e;\n if (reSyncEnabled) {\n const reSyncTokType = this.findReSyncTokenType();\n if (this.isInCurrentRuleReSyncSet(reSyncTokType)) {\n recogError.resyncedTokens = this.reSyncTo(reSyncTokType);\n if (this.outputCst) {\n const partialCstResult = this.CST_STACK[this.CST_STACK.length - 1];\n partialCstResult.recoveredNode = true;\n return partialCstResult;\n } else {\n return recoveryValueFunc(e);\n }\n } else {\n if (this.outputCst) {\n const partialCstResult = this.CST_STACK[this.CST_STACK.length - 1];\n partialCstResult.recoveredNode = true;\n recogError.partialCstResult = partialCstResult;\n }\n throw recogError;\n }\n } else if (isFirstInvokedRule) {\n this.moveToTerminatedState();\n return recoveryValueFunc(e);\n } else {\n throw recogError;\n }\n } else {\n throw e;\n }\n }\n // Implementation of parsing DSL\n optionInternal(actionORMethodDef, occurrence) {\n const key = this.getKeyForAutomaticLookahead(OPTION_IDX, occurrence);\n return this.optionInternalLogic(actionORMethodDef, occurrence, key);\n }\n optionInternalLogic(actionORMethodDef, occurrence, key) {\n let lookAheadFunc = this.getLaFuncFromCache(key);\n let action;\n if (typeof actionORMethodDef !== \"function\") {\n action = actionORMethodDef.DEF;\n const predicate = actionORMethodDef.GATE;\n if (predicate !== void 0) {\n const orgLookaheadFunction = lookAheadFunc;\n lookAheadFunc = () => {\n return predicate.call(this) && orgLookaheadFunction.call(this);\n };\n }\n } else {\n action = actionORMethodDef;\n }\n if (lookAheadFunc.call(this) === true) {\n return action.call(this);\n }\n return void 0;\n }\n atLeastOneInternal(prodOccurrence, actionORMethodDef) {\n const laKey = this.getKeyForAutomaticLookahead(AT_LEAST_ONE_IDX, prodOccurrence);\n return this.atLeastOneInternalLogic(prodOccurrence, actionORMethodDef, laKey);\n }\n atLeastOneInternalLogic(prodOccurrence, actionORMethodDef, key) {\n let lookAheadFunc = this.getLaFuncFromCache(key);\n let action;\n if (typeof actionORMethodDef !== \"function\") {\n action = actionORMethodDef.DEF;\n const predicate = actionORMethodDef.GATE;\n if (predicate !== void 0) {\n const orgLookaheadFunction = lookAheadFunc;\n lookAheadFunc = () => {\n return predicate.call(this) && orgLookaheadFunction.call(this);\n };\n }\n } else {\n action = actionORMethodDef;\n }\n if (lookAheadFunc.call(this) === true) {\n let notStuck = this.doSingleRepetition(action);\n while (lookAheadFunc.call(this) === true && notStuck === true) {\n notStuck = this.doSingleRepetition(action);\n }\n } else {\n throw this.raiseEarlyExitException(prodOccurrence, PROD_TYPE.REPETITION_MANDATORY, actionORMethodDef.ERR_MSG);\n }\n this.attemptInRepetitionRecovery(\n this.atLeastOneInternal,\n [prodOccurrence, actionORMethodDef],\n lookAheadFunc,\n AT_LEAST_ONE_IDX,\n prodOccurrence,\n NextTerminalAfterAtLeastOneWalker\n );\n }\n atLeastOneSepFirstInternal(prodOccurrence, options) {\n const laKey = this.getKeyForAutomaticLookahead(AT_LEAST_ONE_SEP_IDX, prodOccurrence);\n this.atLeastOneSepFirstInternalLogic(prodOccurrence, options, laKey);\n }\n atLeastOneSepFirstInternalLogic(prodOccurrence, options, key) {\n const action = options.DEF;\n const separator = options.SEP;\n const firstIterationLookaheadFunc = this.getLaFuncFromCache(key);\n if (firstIterationLookaheadFunc.call(this) === true) {\n action.call(this);\n const separatorLookAheadFunc = () => {\n return this.tokenMatcher(this.LA(1), separator);\n };\n while (this.tokenMatcher(this.LA(1), separator) === true) {\n this.CONSUME(separator);\n action.call(this);\n }\n this.attemptInRepetitionRecovery(\n this.repetitionSepSecondInternal,\n [prodOccurrence, separator, separatorLookAheadFunc, action, NextTerminalAfterAtLeastOneSepWalker],\n separatorLookAheadFunc,\n AT_LEAST_ONE_SEP_IDX,\n prodOccurrence,\n NextTerminalAfterAtLeastOneSepWalker\n );\n } else {\n throw this.raiseEarlyExitException(\n prodOccurrence,\n PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,\n options.ERR_MSG\n );\n }\n }\n manyInternal(prodOccurrence, actionORMethodDef) {\n const laKey = this.getKeyForAutomaticLookahead(MANY_IDX, prodOccurrence);\n return this.manyInternalLogic(prodOccurrence, actionORMethodDef, laKey);\n }\n manyInternalLogic(prodOccurrence, actionORMethodDef, key) {\n let lookaheadFunction = this.getLaFuncFromCache(key);\n let action;\n if (typeof actionORMethodDef !== \"function\") {\n action = actionORMethodDef.DEF;\n const predicate = actionORMethodDef.GATE;\n if (predicate !== void 0) {\n const orgLookaheadFunction = lookaheadFunction;\n lookaheadFunction = () => {\n return predicate.call(this) && orgLookaheadFunction.call(this);\n };\n }\n } else {\n action = actionORMethodDef;\n }\n let notStuck = true;\n while (lookaheadFunction.call(this) === true && notStuck === true) {\n notStuck = this.doSingleRepetition(action);\n }\n this.attemptInRepetitionRecovery(\n this.manyInternal,\n [prodOccurrence, actionORMethodDef],\n lookaheadFunction,\n MANY_IDX,\n prodOccurrence,\n NextTerminalAfterManyWalker,\n // The notStuck parameter is only relevant when \"attemptInRepetitionRecovery\"\n // is invoked from manyInternal, in the MANY_SEP case and AT_LEAST_ONE[_SEP]\n // An infinite loop cannot occur as:\n // - Either the lookahead is guaranteed to consume something (Single Token Separator)\n // - AT_LEAST_ONE by definition is guaranteed to consume something (or error out).\n notStuck\n );\n }\n manySepFirstInternal(prodOccurrence, options) {\n const laKey = this.getKeyForAutomaticLookahead(MANY_SEP_IDX, prodOccurrence);\n this.manySepFirstInternalLogic(prodOccurrence, options, laKey);\n }\n manySepFirstInternalLogic(prodOccurrence, options, key) {\n const action = options.DEF;\n const separator = options.SEP;\n const firstIterationLaFunc = this.getLaFuncFromCache(key);\n if (firstIterationLaFunc.call(this) === true) {\n action.call(this);\n const separatorLookAheadFunc = () => {\n return this.tokenMatcher(this.LA(1), separator);\n };\n while (this.tokenMatcher(this.LA(1), separator) === true) {\n this.CONSUME(separator);\n action.call(this);\n }\n this.attemptInRepetitionRecovery(\n this.repetitionSepSecondInternal,\n [prodOccurrence, separator, separatorLookAheadFunc, action, NextTerminalAfterManySepWalker],\n separatorLookAheadFunc,\n MANY_SEP_IDX,\n prodOccurrence,\n NextTerminalAfterManySepWalker\n );\n }\n }\n repetitionSepSecondInternal(prodOccurrence, separator, separatorLookAheadFunc, action, nextTerminalAfterWalker) {\n while (separatorLookAheadFunc()) {\n this.CONSUME(separator);\n action.call(this);\n }\n this.attemptInRepetitionRecovery(\n this.repetitionSepSecondInternal,\n [prodOccurrence, separator, separatorLookAheadFunc, action, nextTerminalAfterWalker],\n separatorLookAheadFunc,\n AT_LEAST_ONE_SEP_IDX,\n prodOccurrence,\n nextTerminalAfterWalker\n );\n }\n doSingleRepetition(action) {\n const beforeIteration = this.getLexerPosition();\n action.call(this);\n const afterIteration = this.getLexerPosition();\n return afterIteration > beforeIteration;\n }\n orInternal(altsOrOpts, occurrence) {\n const laKey = this.getKeyForAutomaticLookahead(OR_IDX, occurrence);\n const alts = isArray$1(altsOrOpts) ? altsOrOpts : altsOrOpts.DEF;\n const laFunc = this.getLaFuncFromCache(laKey);\n const altIdxToTake = laFunc.call(this, alts);\n if (altIdxToTake !== void 0) {\n const chosenAlternative = alts[altIdxToTake];\n return chosenAlternative.ALT.call(this);\n }\n this.raiseNoAltException(occurrence, altsOrOpts.ERR_MSG);\n }\n ruleFinallyStateUpdate() {\n this.RULE_STACK.pop();\n this.RULE_OCCURRENCE_STACK.pop();\n this.cstFinallyStateUpdate();\n if (this.RULE_STACK.length === 0 && this.isAtEndOfInput() === false) {\n const firstRedundantTok = this.LA(1);\n const errMsg = this.errorMessageProvider.buildNotAllInputParsedMessage({\n firstRedundant: firstRedundantTok,\n ruleName: this.getCurrRuleFullName()\n });\n this.SAVE_ERROR(new NotAllInputParsedException(errMsg, firstRedundantTok));\n }\n }\n subruleInternal(ruleToCall, idx, options) {\n let ruleResult;\n try {\n const args = options !== void 0 ? options.ARGS : void 0;\n this.subruleIdx = idx;\n ruleResult = ruleToCall.apply(this, args);\n this.cstPostNonTerminal(\n ruleResult,\n options !== void 0 && options.LABEL !== void 0 ? options.LABEL : ruleToCall.ruleName\n );\n return ruleResult;\n } catch (e) {\n throw this.subruleInternalError(e, options, ruleToCall.ruleName);\n }\n }\n subruleInternalError(e, options, ruleName) {\n if (isRecognitionException(e) && e.partialCstResult !== void 0) {\n this.cstPostNonTerminal(\n e.partialCstResult,\n options !== void 0 && options.LABEL !== void 0 ? options.LABEL : ruleName\n );\n delete e.partialCstResult;\n }\n throw e;\n }\n consumeInternal(tokType, idx, options) {\n let consumedToken;\n try {\n const nextToken = this.LA(1);\n if (this.tokenMatcher(nextToken, tokType) === true) {\n this.consumeToken();\n consumedToken = nextToken;\n } else {\n this.consumeInternalError(tokType, nextToken, options);\n }\n } catch (eFromConsumption) {\n consumedToken = this.consumeInternalRecovery(tokType, idx, eFromConsumption);\n }\n this.cstPostTerminal(\n options !== void 0 && options.LABEL !== void 0 ? options.LABEL : tokType.name,\n consumedToken\n );\n return consumedToken;\n }\n consumeInternalError(tokType, nextToken, options) {\n let msg;\n const previousToken = this.LA(0);\n if (options !== void 0 && options.ERR_MSG) {\n msg = options.ERR_MSG;\n } else {\n msg = this.errorMessageProvider.buildMismatchTokenMessage({\n expected: tokType,\n actual: nextToken,\n previous: previousToken,\n ruleName: this.getCurrRuleFullName()\n });\n }\n throw this.SAVE_ERROR(new MismatchedTokenException(msg, nextToken, previousToken));\n }\n consumeInternalRecovery(tokType, idx, eFromConsumption) {\n if (this.recoveryEnabled && // TODO: more robust checking of the exception type. Perhaps Typescript extending expressions?\n eFromConsumption.name === \"MismatchedTokenException\" && !this.isBackTracking()) {\n const follows = this.getFollowsForInRuleRecovery(tokType, idx);\n try {\n return this.tryInRuleRecovery(tokType, follows);\n } catch (eFromInRuleRecovery) {\n if (eFromInRuleRecovery.name === IN_RULE_RECOVERY_EXCEPTION) {\n throw eFromConsumption;\n } else {\n throw eFromInRuleRecovery;\n }\n }\n } else {\n throw eFromConsumption;\n }\n }\n saveRecogState() {\n const savedErrors = this.errors;\n const savedRuleStack = clone(this.RULE_STACK);\n return {\n errors: savedErrors,\n lexerState: this.exportLexerState(),\n RULE_STACK: savedRuleStack,\n CST_STACK: this.CST_STACK\n };\n }\n reloadRecogState(newState) {\n this.errors = newState.errors;\n this.importLexerState(newState.lexerState);\n this.RULE_STACK = newState.RULE_STACK;\n }\n ruleInvocationStateUpdate(shortName, fullName, idxInCallingRule) {\n this.RULE_OCCURRENCE_STACK.push(idxInCallingRule);\n this.RULE_STACK.push(shortName);\n this.cstInvocationStateUpdate(fullName);\n }\n isBackTracking() {\n return this.isBackTrackingStack.length !== 0;\n }\n getCurrRuleFullName() {\n const shortName = this.getLastExplicitRuleShortName();\n return this.shortRuleNameToFull[shortName];\n }\n shortRuleNameToFullName(shortName) {\n return this.shortRuleNameToFull[shortName];\n }\n isAtEndOfInput() {\n return this.tokenMatcher(this.LA(1), EOF);\n }\n reset() {\n this.resetLexerState();\n this.subruleIdx = 0;\n this.isBackTrackingStack = [];\n this.errors = [];\n this.RULE_STACK = [];\n this.CST_STACK = [];\n this.RULE_OCCURRENCE_STACK = [];\n }\n }\n class ErrorHandler {\n initErrorHandler(config) {\n this._errors = [];\n this.errorMessageProvider = has(config, \"errorMessageProvider\") ? config.errorMessageProvider : DEFAULT_PARSER_CONFIG.errorMessageProvider;\n }\n SAVE_ERROR(error) {\n if (isRecognitionException(error)) {\n error.context = {\n ruleStack: this.getHumanReadableRuleStack(),\n ruleOccurrenceStack: clone(this.RULE_OCCURRENCE_STACK)\n };\n this._errors.push(error);\n return error;\n } else {\n throw Error(\"Trying to save an Error which is not a RecognitionException\");\n }\n }\n get errors() {\n return clone(this._errors);\n }\n set errors(newErrors) {\n this._errors = newErrors;\n }\n // TODO: consider caching the error message computed information\n raiseEarlyExitException(occurrence, prodType, userDefinedErrMsg) {\n const ruleName = this.getCurrRuleFullName();\n const ruleGrammar = this.getGAstProductions()[ruleName];\n const lookAheadPathsPerAlternative = getLookaheadPathsForOptionalProd(\n occurrence,\n ruleGrammar,\n prodType,\n this.maxLookahead\n );\n const insideProdPaths = lookAheadPathsPerAlternative[0];\n const actualTokens = [];\n for (let i = 1; i <= this.maxLookahead; i++) {\n actualTokens.push(this.LA(i));\n }\n const msg = this.errorMessageProvider.buildEarlyExitMessage({\n expectedIterationPaths: insideProdPaths,\n actual: actualTokens,\n previous: this.LA(0),\n customUserDescription: userDefinedErrMsg,\n ruleName\n });\n throw this.SAVE_ERROR(new EarlyExitException(msg, this.LA(1), this.LA(0)));\n }\n // TODO: consider caching the error message computed information\n raiseNoAltException(occurrence, errMsgTypes) {\n const ruleName = this.getCurrRuleFullName();\n const ruleGrammar = this.getGAstProductions()[ruleName];\n const lookAheadPathsPerAlternative = getLookaheadPathsForOr(occurrence, ruleGrammar, this.maxLookahead);\n const actualTokens = [];\n for (let i = 1; i <= this.maxLookahead; i++) {\n actualTokens.push(this.LA(i));\n }\n const previousToken = this.LA(0);\n const errMsg = this.errorMessageProvider.buildNoViableAltMessage({\n expectedPathsPerAlt: lookAheadPathsPerAlternative,\n actual: actualTokens,\n previous: previousToken,\n customUserDescription: errMsgTypes,\n ruleName: this.getCurrRuleFullName()\n });\n throw this.SAVE_ERROR(new NoViableAltException(errMsg, this.LA(1), previousToken));\n }\n }\n class ContentAssist {\n initContentAssist() {\n }\n computeContentAssist(startRuleName, precedingInput) {\n const startRuleGast = this.gastProductionsCache[startRuleName];\n if (isUndefined(startRuleGast)) {\n throw Error(`Rule ->${startRuleName}<- does not exist in this grammar.`);\n }\n return nextPossibleTokensAfter([startRuleGast], precedingInput, this.tokenMatcher, this.maxLookahead);\n }\n // TODO: should this be a member method or a utility? it does not have any state or usage of 'this'...\n // TODO: should this be more explicitly part of the public API?\n getNextPossibleTokenTypes(grammarPath) {\n const topRuleName = head(grammarPath.ruleStack);\n const gastProductions = this.getGAstProductions();\n const topProduction = gastProductions[topRuleName];\n const nextPossibleTokenTypes = new NextAfterTokenWalker(topProduction, grammarPath).startWalking();\n return nextPossibleTokenTypes;\n }\n }\n const RECORDING_NULL_OBJECT = {\n description: \"This Object indicates the Parser is during Recording Phase\"\n };\n Object.freeze(RECORDING_NULL_OBJECT);\n const HANDLE_SEPARATOR = true;\n const MAX_METHOD_IDX = Math.pow(2, BITS_FOR_OCCURRENCE_IDX) - 1;\n const RFT = createToken2({ name: \"RECORDING_PHASE_TOKEN\", pattern: Lexer2.NA });\n augmentTokenTypes([RFT]);\n const RECORDING_PHASE_TOKEN = createTokenInstance(\n RFT,\n \"This IToken indicates the Parser is in Recording Phase\\n\tSee: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details\",\n // Using \"-1\" instead of NaN (as in EOF) because an actual number is less likely to\n // cause errors if the output of LA or CONSUME would be (incorrectly) used during the recording phase.\n -1,\n -1,\n -1,\n -1,\n -1,\n -1\n );\n Object.freeze(RECORDING_PHASE_TOKEN);\n const RECORDING_PHASE_CSTNODE = {\n name: \"This CSTNode indicates the Parser is in Recording Phase\\n\tSee: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details\",\n children: {}\n };\n class GastRecorder {\n initGastRecorder(config) {\n this.recordingProdStack = [];\n this.RECORDING_PHASE = false;\n }\n enableRecording() {\n this.RECORDING_PHASE = true;\n this.TRACE_INIT(\"Enable Recording\", () => {\n for (let i = 0; i < 10; i++) {\n const idx = i > 0 ? i : \"\";\n this[`CONSUME${idx}`] = function(arg1, arg2) {\n return this.consumeInternalRecord(arg1, i, arg2);\n };\n this[`SUBRULE${idx}`] = function(arg1, arg2) {\n return this.subruleInternalRecord(arg1, i, arg2);\n };\n this[`OPTION${idx}`] = function(arg1) {\n return this.optionInternalRecord(arg1, i);\n };\n this[`OR${idx}`] = function(arg1) {\n return this.orInternalRecord(arg1, i);\n };\n this[`MANY${idx}`] = function(arg1) {\n this.manyInternalRecord(i, arg1);\n };\n this[`MANY_SEP${idx}`] = function(arg1) {\n this.manySepFirstInternalRecord(i, arg1);\n };\n this[`AT_LEAST_ONE${idx}`] = function(arg1) {\n this.atLeastOneInternalRecord(i, arg1);\n };\n this[`AT_LEAST_ONE_SEP${idx}`] = function(arg1) {\n this.atLeastOneSepFirstInternalRecord(i, arg1);\n };\n }\n this[`consume`] = function(idx, arg1, arg2) {\n return this.consumeInternalRecord(arg1, idx, arg2);\n };\n this[`subrule`] = function(idx, arg1, arg2) {\n return this.subruleInternalRecord(arg1, idx, arg2);\n };\n this[`option`] = function(idx, arg1) {\n return this.optionInternalRecord(arg1, idx);\n };\n this[`or`] = function(idx, arg1) {\n return this.orInternalRecord(arg1, idx);\n };\n this[`many`] = function(idx, arg1) {\n this.manyInternalRecord(idx, arg1);\n };\n this[`atLeastOne`] = function(idx, arg1) {\n this.atLeastOneInternalRecord(idx, arg1);\n };\n this.ACTION = this.ACTION_RECORD;\n this.BACKTRACK = this.BACKTRACK_RECORD;\n this.LA = this.LA_RECORD;\n });\n }\n disableRecording() {\n this.RECORDING_PHASE = false;\n this.TRACE_INIT(\"Deleting Recording methods\", () => {\n const that = this;\n for (let i = 0; i < 10; i++) {\n const idx = i > 0 ? i : \"\";\n delete that[`CONSUME${idx}`];\n delete that[`SUBRULE${idx}`];\n delete that[`OPTION${idx}`];\n delete that[`OR${idx}`];\n delete that[`MANY${idx}`];\n delete that[`MANY_SEP${idx}`];\n delete that[`AT_LEAST_ONE${idx}`];\n delete that[`AT_LEAST_ONE_SEP${idx}`];\n }\n delete that[`consume`];\n delete that[`subrule`];\n delete that[`option`];\n delete that[`or`];\n delete that[`many`];\n delete that[`atLeastOne`];\n delete that.ACTION;\n delete that.BACKTRACK;\n delete that.LA;\n });\n }\n // Parser methods are called inside an ACTION?\n // Maybe try/catch/finally on ACTIONS while disabling the recorders state changes?\n // @ts-expect-error -- noop place holder\n ACTION_RECORD(impl) {\n }\n // Executing backtracking logic will break our recording logic assumptions\n BACKTRACK_RECORD(grammarRule, args) {\n return () => true;\n }\n // LA is part of the official API and may be used for custom lookahead logic\n // by end users who may forget to wrap it in ACTION or inside a GATE\n LA_RECORD(howMuch) {\n return END_OF_FILE;\n }\n topLevelRuleRecord(name, def) {\n try {\n const newTopLevelRule = new Rule({ definition: [], name });\n newTopLevelRule.name = name;\n this.recordingProdStack.push(newTopLevelRule);\n def.call(this);\n this.recordingProdStack.pop();\n return newTopLevelRule;\n } catch (originalError) {\n if (originalError.KNOWN_RECORDER_ERROR !== true) {\n try {\n originalError.message = originalError.message + '\\n\t This error was thrown during the \"grammar recording phase\" For more info see:\\n\thttps://chevrotain.io/docs/guide/internals.html#grammar-recording';\n } catch (mutabilityError) {\n throw originalError;\n }\n }\n throw originalError;\n }\n }\n // Implementation of parsing DSL\n optionInternalRecord(actionORMethodDef, occurrence) {\n return recordProd.call(this, Option, actionORMethodDef, occurrence);\n }\n atLeastOneInternalRecord(occurrence, actionORMethodDef) {\n recordProd.call(this, RepetitionMandatory, actionORMethodDef, occurrence);\n }\n atLeastOneSepFirstInternalRecord(occurrence, options) {\n recordProd.call(this, RepetitionMandatoryWithSeparator, options, occurrence, HANDLE_SEPARATOR);\n }\n manyInternalRecord(occurrence, actionORMethodDef) {\n recordProd.call(this, Repetition, actionORMethodDef, occurrence);\n }\n manySepFirstInternalRecord(occurrence, options) {\n recordProd.call(this, RepetitionWithSeparator, options, occurrence, HANDLE_SEPARATOR);\n }\n orInternalRecord(altsOrOpts, occurrence) {\n return recordOrProd.call(this, altsOrOpts, occurrence);\n }\n subruleInternalRecord(ruleToCall, occurrence, options) {\n assertMethodIdxIsValid(occurrence);\n if (!ruleToCall || has(ruleToCall, \"ruleName\") === false) {\n const error = new Error(\n `<SUBRULE${getIdxSuffix(occurrence)}> argument is invalid expecting a Parser method reference but got: <${JSON.stringify(ruleToCall)}>\n inside top level rule: <${this.recordingProdStack[0].name}>`\n );\n error.KNOWN_RECORDER_ERROR = true;\n throw error;\n }\n const prevProd = last(this.recordingProdStack);\n const ruleName = ruleToCall.ruleName;\n const newNoneTerminal = new NonTerminal({\n idx: occurrence,\n nonTerminalName: ruleName,\n label: options === null || options === void 0 ? void 0 : options.LABEL,\n // The resolving of the `referencedRule` property will be done once all the Rule's GASTs have been created\n referencedRule: void 0\n });\n prevProd.definition.push(newNoneTerminal);\n return this.outputCst ? RECORDING_PHASE_CSTNODE : RECORDING_NULL_OBJECT;\n }\n consumeInternalRecord(tokType, occurrence, options) {\n assertMethodIdxIsValid(occurrence);\n if (!hasShortKeyProperty(tokType)) {\n const error = new Error(\n `<CONSUME${getIdxSuffix(occurrence)}> argument is invalid expecting a TokenType reference but got: <${JSON.stringify(tokType)}>\n inside top level rule: <${this.recordingProdStack[0].name}>`\n );\n error.KNOWN_RECORDER_ERROR = true;\n throw error;\n }\n const prevProd = last(this.recordingProdStack);\n const newNoneTerminal = new Terminal({\n idx: occurrence,\n terminalType: tokType,\n label: options === null || options === void 0 ? void 0 : options.LABEL\n });\n prevProd.definition.push(newNoneTerminal);\n return RECORDING_PHASE_TOKEN;\n }\n }\n function recordProd(prodConstructor, mainProdArg, occurrence, handleSep = false) {\n assertMethodIdxIsValid(occurrence);\n const prevProd = last(this.recordingProdStack);\n const grammarAction = isFunction(mainProdArg) ? mainProdArg : mainProdArg.DEF;\n const newProd = new prodConstructor({ definition: [], idx: occurrence });\n if (handleSep) {\n newProd.separator = mainProdArg.SEP;\n }\n if (has(mainProdArg, \"MAX_LOOKAHEAD\")) {\n newProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD;\n }\n this.recordingProdStack.push(newProd);\n grammarAction.call(this);\n prevProd.definition.push(newProd);\n this.recordingProdStack.pop();\n return RECORDING_NULL_OBJECT;\n }\n function recordOrProd(mainProdArg, occurrence) {\n assertMethodIdxIsValid(occurrence);\n const prevProd = last(this.recordingProdStack);\n const hasOptions = isArray$1(mainProdArg) === false;\n const alts = hasOptions === false ? mainProdArg : mainProdArg.DEF;\n const newOrProd = new Alternation({\n definition: [],\n idx: occurrence,\n ignoreAmbiguities: hasOptions && mainProdArg.IGNORE_AMBIGUITIES === true\n });\n if (has(mainProdArg, \"MAX_LOOKAHEAD\")) {\n newOrProd.maxLookahead = mainProdArg.MAX_LOOKAHEAD;\n }\n const hasPredicates = some(alts, (currAlt) => isFunction(currAlt.GATE));\n newOrProd.hasPredicates = hasPredicates;\n prevProd.definition.push(newOrProd);\n forEach(alts, (currAlt) => {\n const currAltFlat = new Alternative({ definition: [] });\n newOrProd.definition.push(currAltFlat);\n if (has(currAlt, \"IGNORE_AMBIGUITIES\")) {\n currAltFlat.ignoreAmbiguities = currAlt.IGNORE_AMBIGUITIES;\n } else if (has(currAlt, \"GATE\")) {\n currAltFlat.ignoreAmbiguities = true;\n }\n this.recordingProdStack.push(currAltFlat);\n currAlt.ALT.call(this);\n this.recordingProdStack.pop();\n });\n return RECORDING_NULL_OBJECT;\n }\n function getIdxSuffix(idx) {\n return idx === 0 ? \"\" : `${idx}`;\n }\n function assertMethodIdxIsValid(idx) {\n if (idx < 0 || idx > MAX_METHOD_IDX) {\n const error = new Error(\n // The stack trace will contain all the needed details\n `Invalid DSL Method idx value: <${idx}>\n\tIdx value must be a none negative value smaller than ${MAX_METHOD_IDX + 1}`\n );\n error.KNOWN_RECORDER_ERROR = true;\n throw error;\n }\n }\n class PerformanceTracer {\n initPerformanceTracer(config) {\n if (has(config, \"traceInitPerf\")) {\n const userTraceInitPerf = config.traceInitPerf;\n const traceIsNumber = typeof userTraceInitPerf === \"number\";\n this.traceInitMaxIdent = traceIsNumber ? userTraceInitPerf : Infinity;\n this.traceInitPerf = traceIsNumber ? userTraceInitPerf > 0 : userTraceInitPerf;\n } else {\n this.traceInitMaxIdent = 0;\n this.traceInitPerf = DEFAULT_PARSER_CONFIG.traceInitPerf;\n }\n this.traceInitIndent = -1;\n }\n TRACE_INIT(phaseDesc, phaseImpl) {\n if (this.traceInitPerf === true) {\n this.traceInitIndent++;\n const indent = new Array(this.traceInitIndent + 1).join(\"\t\");\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n console.log(`${indent}--> <${phaseDesc}>`);\n }\n const { time, value } = timer(phaseImpl);\n const traceMethod = time > 10 ? console.warn : console.log;\n if (this.traceInitIndent < this.traceInitMaxIdent) {\n traceMethod(`${indent}<-- <${phaseDesc}> time: ${time}ms`);\n }\n this.traceInitIndent--;\n return value;\n } else {\n return phaseImpl();\n }\n }\n }\n function applyMixins(derivedCtor, baseCtors) {\n baseCtors.forEach((baseCtor) => {\n const baseProto = baseCtor.prototype;\n Object.getOwnPropertyNames(baseProto).forEach((propName) => {\n if (propName === \"constructor\") {\n return;\n }\n const basePropDescriptor = Object.getOwnPropertyDescriptor(baseProto, propName);\n if (basePropDescriptor && (basePropDescriptor.get || basePropDescriptor.set)) {\n Object.defineProperty(derivedCtor.prototype, propName, basePropDescriptor);\n } else {\n derivedCtor.prototype[propName] = baseCtor.prototype[propName];\n }\n });\n });\n }\n const END_OF_FILE = createTokenInstance(EOF, \"\", NaN, NaN, NaN, NaN, NaN, NaN);\n Object.freeze(END_OF_FILE);\n const DEFAULT_PARSER_CONFIG = Object.freeze({\n recoveryEnabled: false,\n maxLookahead: 3,\n dynamicTokensEnabled: false,\n outputCst: true,\n errorMessageProvider: defaultParserErrorProvider,\n nodeLocationTracking: \"none\",\n traceInitPerf: false,\n skipValidations: false\n });\n const DEFAULT_RULE_CONFIG = Object.freeze({\n recoveryValueFunc: () => void 0,\n resyncEnabled: true\n });\n var ParserDefinitionErrorType;\n (function(ParserDefinitionErrorType2) {\n ParserDefinitionErrorType2[ParserDefinitionErrorType2[\"INVALID_RULE_NAME\"] = 0] = \"INVALID_RULE_NAME\";\n ParserDefinitionErrorType2[ParserDefinitionErrorType2[\"DUPLICATE_RULE_NAME\"] = 1] = \"DUPLICATE_RULE_NAME\";\n ParserDefinitionErrorType2[ParserDefinitionErrorType2[\"INVALID_RULE_OVERRIDE\"] = 2] = \"INVALID_RULE_OVERRIDE\";\n ParserDefinitionErrorType2[ParserDefinitionErrorType2[\"DUPLICATE_PRODUCTIONS\"] = 3] = \"DUPLICATE_PRODUCTIONS\";\n ParserDefinitionErrorType2[ParserDefinitionErrorType2[\"UNRESOLVED_SUBRULE_REF\"] = 4] = \"UNRESOLVED_SUBRULE_REF\";\n ParserDefinitionErrorType2[ParserDefinitionErrorType2[\"LEFT_RECURSION\"] = 5] = \"LEFT_RECURSION\";\n ParserDefinitionErrorType2[ParserDefinitionErrorType2[\"NONE_LAST_EMPTY_ALT\"] = 6] = \"NONE_LAST_EMPTY_ALT\";\n ParserDefinitionErrorType2[ParserDefinitionErrorType2[\"AMBIGUOUS_ALTS\"] = 7] = \"AMBIGUOUS_ALTS\";\n ParserDefinitionErrorType2[ParserDefinitionErrorType2[\"CONFLICT_TOKENS_RULES_NAMESPACE\"] = 8] = \"CONFLICT_TOKENS_RULES_NAMESPACE\";\n ParserDefinitionErrorType2[ParserDefinitionErrorType2[\"INVALID_TOKEN_NAME\"] = 9] = \"INVALID_TOKEN_NAME\";\n ParserDefinitionErrorType2[ParserDefinitionErrorType2[\"NO_NON_EMPTY_LOOKAHEAD\"] = 10] = \"NO_NON_EMPTY_LOOKAHEAD\";\n ParserDefinitionErrorType2[ParserDefinitionErrorType2[\"AMBIGUOUS_PREFIX_ALTS\"] = 11] = \"AMBIGUOUS_PREFIX_ALTS\";\n ParserDefinitionErrorType2[ParserDefinitionErrorType2[\"TOO_MANY_ALTS\"] = 12] = \"TOO_MANY_ALTS\";\n ParserDefinitionErrorType2[ParserDefinitionErrorType2[\"CUSTOM_LOOKAHEAD_VALIDATION\"] = 13] = \"CUSTOM_LOOKAHEAD_VALIDATION\";\n })(ParserDefinitionErrorType || (ParserDefinitionErrorType = {}));\n class Parser {\n /**\n * @deprecated use the **instance** method with the same name instead\n */\n static performSelfAnalysis(parserInstance) {\n throw Error(\n \"The **static** `performSelfAnalysis` method has been deprecated.\t\\nUse the **instance** method with the same name instead.\"\n );\n }\n performSelfAnalysis() {\n this.TRACE_INIT(\"performSelfAnalysis\", () => {\n let defErrorsMsgs;\n this.selfAnalysisDone = true;\n const className = this.className;\n this.TRACE_INIT(\"toFastProps\", () => {\n toFastProperties(this);\n });\n this.TRACE_INIT(\"Grammar Recording\", () => {\n try {\n this.enableRecording();\n forEach(this.definedRulesNames, (currRuleName) => {\n const wrappedRule = this[currRuleName];\n const originalGrammarAction = wrappedRule[\"originalGrammarAction\"];\n let recordedRuleGast;\n this.TRACE_INIT(`${currRuleName} Rule`, () => {\n recordedRuleGast = this.topLevelRuleRecord(currRuleName, originalGrammarAction);\n });\n this.gastProductionsCache[currRuleName] = recordedRuleGast;\n });\n } finally {\n this.disableRecording();\n }\n });\n let resolverErrors = [];\n this.TRACE_INIT(\"Grammar Resolving\", () => {\n resolverErrors = resolveGrammar({\n rules: values(this.gastProductionsCache)\n });\n this.definitionErrors = this.definitionErrors.concat(resolverErrors);\n });\n this.TRACE_INIT(\"Grammar Validations\", () => {\n if (isEmpty(resolverErrors) && this.skipValidations === false) {\n const validationErrors = validateGrammar({\n rules: values(this.gastProductionsCache),\n tokenTypes: values(this.tokensMap),\n errMsgProvider: defaultGrammarValidatorErrorProvider,\n grammarName: className\n });\n const lookaheadValidationErrors = validateLookahead({\n lookaheadStrategy: this.lookaheadStrategy,\n rules: values(this.gastProductionsCache),\n tokenTypes: values(this.tokensMap),\n grammarName: className\n });\n this.definitionErrors = this.definitionErrors.concat(validationErrors, lookaheadValidationErrors);\n }\n });\n if (isEmpty(this.definitionErrors)) {\n if (this.recoveryEnabled) {\n this.TRACE_INIT(\"computeAllProdsFollows\", () => {\n const allFollows = computeAllProdsFollows(values(this.gastProductionsCache));\n this.resyncFollows = allFollows;\n });\n }\n this.TRACE_INIT(\"ComputeLookaheadFunctions\", () => {\n var _a, _b;\n (_b = (_a = this.lookaheadStrategy).initialize) === null || _b === void 0 ? void 0 : _b.call(_a, {\n rules: values(this.gastProductionsCache)\n });\n this.preComputeLookaheadFunctions(values(this.gastProductionsCache));\n });\n }\n if (!Parser.DEFER_DEFINITION_ERRORS_HANDLING && !isEmpty(this.definitionErrors)) {\n defErrorsMsgs = map(this.definitionErrors, (defError) => defError.message);\n throw new Error(\n `Parser Definition Errors detected:\n ${defErrorsMsgs.join(\"\\n-------------------------------\\n\")}`\n );\n }\n });\n }\n constructor(tokenVocabulary, config) {\n this.definitionErrors = [];\n this.selfAnalysisDone = false;\n const that = this;\n that.initErrorHandler(config);\n that.initLexerAdapter();\n that.initLooksAhead(config);\n that.initRecognizerEngine(tokenVocabulary, config);\n that.initRecoverable(config);\n that.initTreeBuilder(config);\n that.initContentAssist();\n that.initGastRecorder(config);\n that.initPerformanceTracer(config);\n if (has(config, \"ignoredIssues\")) {\n throw new Error(\n \"The <ignoredIssues> IParserConfig property has been deprecated.\\n\tPlease use the <IGNORE_AMBIGUITIES> flag on the relevant DSL method instead.\\n\tSee: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES\\n\tFor further details.\"\n );\n }\n this.skipValidations = has(config, \"skipValidations\") ? config.skipValidations : DEFAULT_PARSER_CONFIG.skipValidations;\n }\n }\n Parser.DEFER_DEFINITION_ERRORS_HANDLING = false;\n applyMixins(Parser, [\n Recoverable,\n LooksAhead,\n TreeBuilder,\n LexerAdapter,\n RecognizerEngine,\n RecognizerApi,\n ErrorHandler,\n ContentAssist,\n GastRecorder,\n PerformanceTracer\n ]);\n class CstParser2 extends Parser {\n constructor(tokenVocabulary, config = DEFAULT_PARSER_CONFIG) {\n const configClone = clone(config);\n configClone.outputCst = true;\n super(tokenVocabulary, configClone);\n }\n }\n return { CstParser: CstParser2, Lexer: Lexer2, createToken: createToken2 };\n})();\nexport {\n CstParser,\n Lexer,\n createToken\n};\n//# sourceMappingURL=chevrotain.js.map\n","import { Loader, LoaderUtils, FileLoader, Vector3, Vector2, TextureLoader, Scene, Object3D, Group, SphereGeometry, MeshBasicMaterial, BackSide, Mesh, PointsMaterial, Points, LineBasicMaterial, LineSegments, FrontSide, DoubleSide, MeshPhongMaterial, Color, DataTexture, BufferGeometry, Float32BufferAttribute, BoxGeometry, ConeGeometry, CylinderGeometry, Quaternion, ShapeUtils, BufferAttribute, RepeatWrapping, ClampToEdgeWrapping } from \"three\";\nimport { createToken, Lexer, CstParser } from \"../libs/chevrotain.js\";\nclass VRMLLoader extends Loader {\n constructor(manager) {\n super(manager);\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const path = scope.path === \"\" ? LoaderUtils.extractUrlBase(url) : scope.path;\n const loader = new FileLoader(scope.manager);\n loader.setPath(scope.path);\n loader.setRequestHeader(scope.requestHeader);\n loader.setWithCredentials(scope.withCredentials);\n loader.load(\n url,\n function(text) {\n try {\n onLoad(scope.parse(text, path));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(data, path) {\n const nodeMap = {};\n function generateVRMLTree(data2) {\n const tokenData = createTokens();\n const lexer = new VRMLLexer(tokenData.tokens);\n const parser = new VRMLParser(tokenData.tokenVocabulary);\n const visitor = createVisitor(parser.getBaseCstVisitorConstructor());\n const lexingResult = lexer.lex(data2);\n parser.input = lexingResult.tokens;\n const cstOutput = parser.vrml();\n if (parser.errors.length > 0) {\n console.error(parser.errors);\n throw Error(\"THREE.VRMLLoader: Parsing errors detected.\");\n }\n const ast = visitor.visit(cstOutput);\n return ast;\n }\n function createTokens() {\n const RouteIdentifier = createToken({\n name: \"RouteIdentifier\",\n pattern: /[^\\x30-\\x39\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d][^\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d]*[\\.][^\\x30-\\x39\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d][^\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d]*/\n });\n const Identifier = createToken({\n name: \"Identifier\",\n pattern: /[^\\x30-\\x39\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d][^\\0-\\x20\\x22\\x27\\x23\\x2b\\x2c\\x2d\\x2e\\x5b\\x5d\\x5c\\x7b\\x7d]*/,\n longer_alt: RouteIdentifier\n });\n const nodeTypes = [\n \"Anchor\",\n \"Billboard\",\n \"Collision\",\n \"Group\",\n \"Transform\",\n // grouping nodes\n \"Inline\",\n \"LOD\",\n \"Switch\",\n // special groups\n \"AudioClip\",\n \"DirectionalLight\",\n \"PointLight\",\n \"Script\",\n \"Shape\",\n \"Sound\",\n \"SpotLight\",\n \"WorldInfo\",\n // common nodes\n \"CylinderSensor\",\n \"PlaneSensor\",\n \"ProximitySensor\",\n \"SphereSensor\",\n \"TimeSensor\",\n \"TouchSensor\",\n \"VisibilitySensor\",\n // sensors\n \"Box\",\n \"Cone\",\n \"Cylinder\",\n \"ElevationGrid\",\n \"Extrusion\",\n \"IndexedFaceSet\",\n \"IndexedLineSet\",\n \"PointSet\",\n \"Sphere\",\n // geometries\n \"Color\",\n \"Coordinate\",\n \"Normal\",\n \"TextureCoordinate\",\n // geometric properties\n \"Appearance\",\n \"FontStyle\",\n \"ImageTexture\",\n \"Material\",\n \"MovieTexture\",\n \"PixelTexture\",\n \"TextureTransform\",\n // appearance\n \"ColorInterpolator\",\n \"CoordinateInterpolator\",\n \"NormalInterpolator\",\n \"OrientationInterpolator\",\n \"PositionInterpolator\",\n \"ScalarInterpolator\",\n // interpolators\n \"Background\",\n \"Fog\",\n \"NavigationInfo\",\n \"Viewpoint\",\n // bindable nodes\n \"Text\"\n // Text must be placed at the end of the regex so there are no matches for TextureTransform and TextureCoordinate\n ];\n const Version = createToken({\n name: \"Version\",\n pattern: /#VRML.*/,\n longer_alt: Identifier\n });\n const NodeName = createToken({\n name: \"NodeName\",\n pattern: new RegExp(nodeTypes.join(\"|\")),\n longer_alt: Identifier\n });\n const DEF = createToken({\n name: \"DEF\",\n pattern: /DEF/,\n longer_alt: Identifier\n });\n const USE = createToken({\n name: \"USE\",\n pattern: /USE/,\n longer_alt: Identifier\n });\n const ROUTE = createToken({\n name: \"ROUTE\",\n pattern: /ROUTE/,\n longer_alt: Identifier\n });\n const TO = createToken({\n name: \"TO\",\n pattern: /TO/,\n longer_alt: Identifier\n });\n const StringLiteral = createToken({\n name: \"StringLiteral\",\n pattern: /\"(?:[^\\\\\"\\n\\r]|\\\\[bfnrtv\"\\\\/]|\\\\u[0-9a-fA-F][0-9a-fA-F][0-9a-fA-F][0-9a-fA-F])*\"/\n });\n const HexLiteral = createToken({ name: \"HexLiteral\", pattern: /0[xX][0-9a-fA-F]+/ });\n const NumberLiteral = createToken({ name: \"NumberLiteral\", pattern: /[-+]?[0-9]*\\.?[0-9]+([eE][-+]?[0-9]+)?/ });\n const TrueLiteral = createToken({ name: \"TrueLiteral\", pattern: /TRUE/ });\n const FalseLiteral = createToken({ name: \"FalseLiteral\", pattern: /FALSE/ });\n const NullLiteral = createToken({ name: \"NullLiteral\", pattern: /NULL/ });\n const LSquare = createToken({ name: \"LSquare\", pattern: /\\[/ });\n const RSquare = createToken({ name: \"RSquare\", pattern: /]/ });\n const LCurly = createToken({ name: \"LCurly\", pattern: /{/ });\n const RCurly = createToken({ name: \"RCurly\", pattern: /}/ });\n const Comment = createToken({\n name: \"Comment\",\n pattern: /#.*/,\n group: Lexer.SKIPPED\n });\n const WhiteSpace = createToken({\n name: \"WhiteSpace\",\n pattern: /[ ,\\s]/,\n group: Lexer.SKIPPED\n });\n const tokens = [\n WhiteSpace,\n // keywords appear before the Identifier\n NodeName,\n DEF,\n USE,\n ROUTE,\n TO,\n TrueLiteral,\n FalseLiteral,\n NullLiteral,\n // the Identifier must appear after the keywords because all keywords are valid identifiers\n Version,\n Identifier,\n RouteIdentifier,\n StringLiteral,\n HexLiteral,\n NumberLiteral,\n LSquare,\n RSquare,\n LCurly,\n RCurly,\n Comment\n ];\n const tokenVocabulary = {};\n for (let i = 0, l = tokens.length; i < l; i++) {\n const token = tokens[i];\n tokenVocabulary[token.name] = token;\n }\n return { tokens, tokenVocabulary };\n }\n function createVisitor(BaseVRMLVisitor) {\n function VRMLToASTVisitor() {\n BaseVRMLVisitor.call(this);\n this.validateVisitor();\n }\n VRMLToASTVisitor.prototype = Object.assign(Object.create(BaseVRMLVisitor.prototype), {\n constructor: VRMLToASTVisitor,\n vrml: function(ctx) {\n const data2 = {\n version: this.visit(ctx.version),\n nodes: [],\n routes: []\n };\n for (let i = 0, l = ctx.node.length; i < l; i++) {\n const node = ctx.node[i];\n data2.nodes.push(this.visit(node));\n }\n if (ctx.route) {\n for (let i = 0, l = ctx.route.length; i < l; i++) {\n const route = ctx.route[i];\n data2.routes.push(this.visit(route));\n }\n }\n return data2;\n },\n version: function(ctx) {\n return ctx.Version[0].image;\n },\n node: function(ctx) {\n const data2 = {\n name: ctx.NodeName[0].image,\n fields: []\n };\n if (ctx.field) {\n for (let i = 0, l = ctx.field.length; i < l; i++) {\n const field = ctx.field[i];\n data2.fields.push(this.visit(field));\n }\n }\n if (ctx.def) {\n data2.DEF = this.visit(ctx.def[0]);\n }\n return data2;\n },\n field: function(ctx) {\n const data2 = {\n name: ctx.Identifier[0].image,\n type: null,\n values: null\n };\n let result;\n if (ctx.singleFieldValue) {\n result = this.visit(ctx.singleFieldValue[0]);\n }\n if (ctx.multiFieldValue) {\n result = this.visit(ctx.multiFieldValue[0]);\n }\n data2.type = result.type;\n data2.values = result.values;\n return data2;\n },\n def: function(ctx) {\n return (ctx.Identifier || ctx.NodeName)[0].image;\n },\n use: function(ctx) {\n return { USE: (ctx.Identifier || ctx.NodeName)[0].image };\n },\n singleFieldValue: function(ctx) {\n return processField(this, ctx);\n },\n multiFieldValue: function(ctx) {\n return processField(this, ctx);\n },\n route: function(ctx) {\n const data2 = {\n FROM: ctx.RouteIdentifier[0].image,\n TO: ctx.RouteIdentifier[1].image\n };\n return data2;\n }\n });\n function processField(scope, ctx) {\n const field = {\n type: null,\n values: []\n };\n if (ctx.node) {\n field.type = \"node\";\n for (let i = 0, l = ctx.node.length; i < l; i++) {\n const node = ctx.node[i];\n field.values.push(scope.visit(node));\n }\n }\n if (ctx.use) {\n field.type = \"use\";\n for (let i = 0, l = ctx.use.length; i < l; i++) {\n const use = ctx.use[i];\n field.values.push(scope.visit(use));\n }\n }\n if (ctx.StringLiteral) {\n field.type = \"string\";\n for (let i = 0, l = ctx.StringLiteral.length; i < l; i++) {\n const stringLiteral = ctx.StringLiteral[i];\n field.values.push(stringLiteral.image.replace(/'|\"/g, \"\"));\n }\n }\n if (ctx.NumberLiteral) {\n field.type = \"number\";\n for (let i = 0, l = ctx.NumberLiteral.length; i < l; i++) {\n const numberLiteral = ctx.NumberLiteral[i];\n field.values.push(parseFloat(numberLiteral.image));\n }\n }\n if (ctx.HexLiteral) {\n field.type = \"hex\";\n for (let i = 0, l = ctx.HexLiteral.length; i < l; i++) {\n const hexLiteral = ctx.HexLiteral[i];\n field.values.push(hexLiteral.image);\n }\n }\n if (ctx.TrueLiteral) {\n field.type = \"boolean\";\n for (let i = 0, l = ctx.TrueLiteral.length; i < l; i++) {\n const trueLiteral = ctx.TrueLiteral[i];\n if (trueLiteral.image === \"TRUE\")\n field.values.push(true);\n }\n }\n if (ctx.FalseLiteral) {\n field.type = \"boolean\";\n for (let i = 0, l = ctx.FalseLiteral.length; i < l; i++) {\n const falseLiteral = ctx.FalseLiteral[i];\n if (falseLiteral.image === \"FALSE\")\n field.values.push(false);\n }\n }\n if (ctx.NullLiteral) {\n field.type = \"null\";\n ctx.NullLiteral.forEach(function() {\n field.values.push(null);\n });\n }\n return field;\n }\n return new VRMLToASTVisitor();\n }\n function parseTree(tree2) {\n const nodes = tree2.nodes;\n const scene2 = new Scene();\n for (let i = 0, l = nodes.length; i < l; i++) {\n const node = nodes[i];\n buildNodeMap(node);\n }\n for (let i = 0, l = nodes.length; i < l; i++) {\n const node = nodes[i];\n const object = getNode(node);\n if (object instanceof Object3D)\n scene2.add(object);\n if (node.name === \"WorldInfo\")\n scene2.userData.worldInfo = object;\n }\n return scene2;\n }\n function buildNodeMap(node) {\n if (node.DEF) {\n nodeMap[node.DEF] = node;\n }\n const fields = node.fields;\n for (let i = 0, l = fields.length; i < l; i++) {\n const field = fields[i];\n if (field.type === \"node\") {\n const fieldValues = field.values;\n for (let j = 0, jl = fieldValues.length; j < jl; j++) {\n buildNodeMap(fieldValues[j]);\n }\n }\n }\n }\n function getNode(node) {\n if (node.USE) {\n return resolveUSE(node.USE);\n }\n if (node.build !== void 0)\n return node.build;\n node.build = buildNode(node);\n return node.build;\n }\n function buildNode(node) {\n const nodeName = node.name;\n let build;\n switch (nodeName) {\n case \"Group\":\n case \"Transform\":\n case \"Collision\":\n build = buildGroupingNode(node);\n break;\n case \"Background\":\n build = buildBackgroundNode(node);\n break;\n case \"Shape\":\n build = buildShapeNode(node);\n break;\n case \"Appearance\":\n build = buildAppearanceNode(node);\n break;\n case \"Material\":\n build = buildMaterialNode(node);\n break;\n case \"ImageTexture\":\n build = buildImageTextureNode(node);\n break;\n case \"PixelTexture\":\n build = buildPixelTextureNode(node);\n break;\n case \"TextureTransform\":\n build = buildTextureTransformNode(node);\n break;\n case \"IndexedFaceSet\":\n build = buildIndexedFaceSetNode(node);\n break;\n case \"IndexedLineSet\":\n build = buildIndexedLineSetNode(node);\n break;\n case \"PointSet\":\n build = buildPointSetNode(node);\n break;\n case \"Box\":\n build = buildBoxNode(node);\n break;\n case \"Cone\":\n build = buildConeNode(node);\n break;\n case \"Cylinder\":\n build = buildCylinderNode(node);\n break;\n case \"Sphere\":\n build = buildSphereNode(node);\n break;\n case \"ElevationGrid\":\n build = buildElevationGridNode(node);\n break;\n case \"Extrusion\":\n build = buildExtrusionNode(node);\n break;\n case \"Color\":\n case \"Coordinate\":\n case \"Normal\":\n case \"TextureCoordinate\":\n build = buildGeometricNode(node);\n break;\n case \"WorldInfo\":\n build = buildWorldInfoNode(node);\n break;\n case \"Anchor\":\n case \"Billboard\":\n case \"Inline\":\n case \"LOD\":\n case \"Switch\":\n case \"AudioClip\":\n case \"DirectionalLight\":\n case \"PointLight\":\n case \"Script\":\n case \"Sound\":\n case \"SpotLight\":\n case \"CylinderSensor\":\n case \"PlaneSensor\":\n case \"ProximitySensor\":\n case \"SphereSensor\":\n case \"TimeSensor\":\n case \"TouchSensor\":\n case \"VisibilitySensor\":\n case \"Text\":\n case \"FontStyle\":\n case \"MovieTexture\":\n case \"ColorInterpolator\":\n case \"CoordinateInterpolator\":\n case \"NormalInterpolator\":\n case \"OrientationInterpolator\":\n case \"PositionInterpolator\":\n case \"ScalarInterpolator\":\n case \"Fog\":\n case \"NavigationInfo\":\n case \"Viewpoint\":\n break;\n default:\n console.warn(\"THREE.VRMLLoader: Unknown node:\", nodeName);\n break;\n }\n if (build !== void 0 && node.DEF !== void 0 && build.hasOwnProperty(\"name\") === true) {\n build.name = node.DEF;\n }\n return build;\n }\n function buildGroupingNode(node) {\n const object = new Group();\n const fields = node.fields;\n for (let i = 0, l = fields.length; i < l; i++) {\n const field = fields[i];\n const fieldName = field.name;\n const fieldValues = field.values;\n switch (fieldName) {\n case \"bboxCenter\":\n break;\n case \"bboxSize\":\n break;\n case \"center\":\n break;\n case \"children\":\n parseFieldChildren(fieldValues, object);\n break;\n case \"collide\":\n break;\n case \"rotation\":\n const axis = new Vector3(fieldValues[0], fieldValues[1], fieldValues[2]).normalize();\n const angle = fieldValues[3];\n object.quaternion.setFromAxisAngle(axis, angle);\n break;\n case \"scale\":\n object.scale.set(fieldValues[0], fieldValues[1], fieldValues[2]);\n break;\n case \"scaleOrientation\":\n break;\n case \"translation\":\n object.position.set(fieldValues[0], fieldValues[1], fieldValues[2]);\n break;\n case \"proxy\":\n break;\n default:\n console.warn(\"THREE.VRMLLoader: Unknown field:\", fieldName);\n break;\n }\n }\n return object;\n }\n function buildBackgroundNode(node) {\n const group = new Group();\n let groundAngle, groundColor;\n let skyAngle, skyColor;\n const fields = node.fields;\n for (let i = 0, l = fields.length; i < l; i++) {\n const field = fields[i];\n const fieldName = field.name;\n const fieldValues = field.values;\n switch (fieldName) {\n case \"groundAngle\":\n groundAngle = fieldValues;\n break;\n case \"groundColor\":\n groundColor = fieldValues;\n break;\n case \"backUrl\":\n break;\n case \"bottomUrl\":\n break;\n case \"frontUrl\":\n break;\n case \"leftUrl\":\n break;\n case \"rightUrl\":\n break;\n case \"topUrl\":\n break;\n case \"skyAngle\":\n skyAngle = fieldValues;\n break;\n case \"skyColor\":\n skyColor = fieldValues;\n break;\n default:\n console.warn(\"THREE.VRMLLoader: Unknown field:\", fieldName);\n break;\n }\n }\n const radius = 1e4;\n if (skyColor) {\n const skyGeometry = new SphereGeometry(radius, 32, 16);\n const skyMaterial = new MeshBasicMaterial({ fog: false, side: BackSide, depthWrite: false, depthTest: false });\n if (skyColor.length > 3) {\n paintFaces(skyGeometry, radius, skyAngle, toColorArray(skyColor), true);\n skyMaterial.vertexColors = true;\n } else {\n skyMaterial.color.setRGB(skyColor[0], skyColor[1], skyColor[2]);\n }\n const sky = new Mesh(skyGeometry, skyMaterial);\n group.add(sky);\n }\n if (groundColor) {\n if (groundColor.length > 0) {\n const groundGeometry = new SphereGeometry(radius, 32, 16, 0, 2 * Math.PI, 0.5 * Math.PI, 1.5 * Math.PI);\n const groundMaterial = new MeshBasicMaterial({\n fog: false,\n side: BackSide,\n vertexColors: true,\n depthWrite: false,\n depthTest: false\n });\n paintFaces(groundGeometry, radius, groundAngle, toColorArray(groundColor), false);\n const ground = new Mesh(groundGeometry, groundMaterial);\n group.add(ground);\n }\n }\n group.renderOrder = -Infinity;\n return group;\n }\n function buildShapeNode(node) {\n const fields = node.fields;\n let material = new MeshBasicMaterial({ color: 0 });\n let geometry;\n for (let i = 0, l = fields.length; i < l; i++) {\n const field = fields[i];\n const fieldName = field.name;\n const fieldValues = field.values;\n switch (fieldName) {\n case \"appearance\":\n if (fieldValues[0] !== null) {\n material = getNode(fieldValues[0]);\n }\n break;\n case \"geometry\":\n if (fieldValues[0] !== null) {\n geometry = getNode(fieldValues[0]);\n }\n break;\n default:\n console.warn(\"THREE.VRMLLoader: Unknown field:\", fieldName);\n break;\n }\n }\n let object;\n if (geometry && geometry.attributes.position) {\n const type = geometry._type;\n if (type === \"points\") {\n const pointsMaterial = new PointsMaterial({ color: 16777215 });\n if (geometry.attributes.color !== void 0) {\n pointsMaterial.vertexColors = true;\n } else {\n if (material.isMeshPhongMaterial) {\n pointsMaterial.color.copy(material.emissive);\n }\n }\n object = new Points(geometry, pointsMaterial);\n } else if (type === \"line\") {\n const lineMaterial = new LineBasicMaterial({ color: 16777215 });\n if (geometry.attributes.color !== void 0) {\n lineMaterial.vertexColors = true;\n } else {\n if (material.isMeshPhongMaterial) {\n lineMaterial.color.copy(material.emissive);\n }\n }\n object = new LineSegments(geometry, lineMaterial);\n } else {\n if (geometry._solid !== void 0) {\n material.side = geometry._solid ? FrontSide : DoubleSide;\n }\n if (geometry.attributes.color !== void 0) {\n material.vertexColors = true;\n }\n object = new Mesh(geometry, material);\n }\n } else {\n object = new Object3D();\n object.visible = false;\n }\n return object;\n }\n function buildAppearanceNode(node) {\n let material = new MeshPhongMaterial();\n let transformData;\n const fields = node.fields;\n for (let i = 0, l = fields.length; i < l; i++) {\n const field = fields[i];\n const fieldName = field.name;\n const fieldValues = field.values;\n switch (fieldName) {\n case \"material\":\n if (fieldValues[0] !== null) {\n const materialData = getNode(fieldValues[0]);\n if (materialData.diffuseColor)\n material.color.copy(materialData.diffuseColor);\n if (materialData.emissiveColor)\n material.emissive.copy(materialData.emissiveColor);\n if (materialData.shininess)\n material.shininess = materialData.shininess;\n if (materialData.specularColor)\n material.specular.copy(materialData.specularColor);\n if (materialData.transparency)\n material.opacity = 1 - materialData.transparency;\n if (materialData.transparency > 0)\n material.transparent = true;\n } else {\n material = new MeshBasicMaterial({ color: 0 });\n }\n break;\n case \"texture\":\n const textureNode = fieldValues[0];\n if (textureNode !== null) {\n if (textureNode.name === \"ImageTexture\" || textureNode.name === \"PixelTexture\") {\n material.map = getNode(textureNode);\n }\n }\n break;\n case \"textureTransform\":\n if (fieldValues[0] !== null) {\n transformData = getNode(fieldValues[0]);\n }\n break;\n default:\n console.warn(\"THREE.VRMLLoader: Unknown field:\", fieldName);\n break;\n }\n }\n if (material.map) {\n if (material.map.__type) {\n switch (material.map.__type) {\n case TEXTURE_TYPE.INTENSITY_ALPHA:\n material.opacity = 1;\n break;\n case TEXTURE_TYPE.RGB:\n material.color.set(16777215);\n break;\n case TEXTURE_TYPE.RGBA:\n material.color.set(16777215);\n material.opacity = 1;\n break;\n }\n delete material.map.__type;\n }\n if (transformData) {\n material.map.center.copy(transformData.center);\n material.map.rotation = transformData.rotation;\n material.map.repeat.copy(transformData.scale);\n material.map.offset.copy(transformData.translation);\n }\n }\n return material;\n }\n function buildMaterialNode(node) {\n const materialData = {};\n const fields = node.fields;\n for (let i = 0, l = fields.length; i < l; i++) {\n const field = fields[i];\n const fieldName = field.name;\n const fieldValues = field.values;\n switch (fieldName) {\n case \"ambientIntensity\":\n break;\n case \"diffuseColor\":\n materialData.diffuseColor = new Color(fieldValues[0], fieldValues[1], fieldValues[2]);\n break;\n case \"emissiveColor\":\n materialData.emissiveColor = new Color(fieldValues[0], fieldValues[1], fieldValues[2]);\n break;\n case \"shininess\":\n materialData.shininess = fieldValues[0];\n break;\n case \"specularColor\":\n materialData.emissiveColor = new Color(fieldValues[0], fieldValues[1], fieldValues[2]);\n break;\n case \"transparency\":\n materialData.transparency = fieldValues[0];\n break;\n default:\n console.warn(\"THREE.VRMLLoader: Unknown field:\", fieldName);\n break;\n }\n }\n return materialData;\n }\n function parseHexColor(hex, textureType, color) {\n let value;\n switch (textureType) {\n case TEXTURE_TYPE.INTENSITY:\n value = parseInt(hex);\n color.r = value;\n color.g = value;\n color.b = value;\n color.a = 1;\n break;\n case TEXTURE_TYPE.INTENSITY_ALPHA:\n value = parseInt(\"0x\" + hex.substring(2, 4));\n color.r = value;\n color.g = value;\n color.b = value;\n color.a = parseInt(\"0x\" + hex.substring(4, 6));\n break;\n case TEXTURE_TYPE.RGB:\n color.r = parseInt(\"0x\" + hex.substring(2, 4));\n color.g = parseInt(\"0x\" + hex.substring(4, 6));\n color.b = parseInt(\"0x\" + hex.substring(6, 8));\n color.a = 1;\n break;\n case TEXTURE_TYPE.RGBA:\n color.r = parseInt(\"0x\" + hex.substring(2, 4));\n color.g = parseInt(\"0x\" + hex.substring(4, 6));\n color.b = parseInt(\"0x\" + hex.substring(6, 8));\n color.a = parseInt(\"0x\" + hex.substring(8, 10));\n break;\n }\n }\n function getTextureType(num_components) {\n let type;\n switch (num_components) {\n case 1:\n type = TEXTURE_TYPE.INTENSITY;\n break;\n case 2:\n type = TEXTURE_TYPE.INTENSITY_ALPHA;\n break;\n case 3:\n type = TEXTURE_TYPE.RGB;\n break;\n case 4:\n type = TEXTURE_TYPE.RGBA;\n break;\n }\n return type;\n }\n function buildPixelTextureNode(node) {\n let texture;\n let wrapS = RepeatWrapping;\n let wrapT = RepeatWrapping;\n const fields = node.fields;\n for (let i = 0, l = fields.length; i < l; i++) {\n const field = fields[i];\n const fieldName = field.name;\n const fieldValues = field.values;\n switch (fieldName) {\n case \"image\":\n const width = fieldValues[0];\n const height = fieldValues[1];\n const num_components = fieldValues[2];\n const textureType = getTextureType(num_components);\n const data2 = new Uint8Array(4 * width * height);\n const color = { r: 0, g: 0, b: 0, a: 0 };\n for (let j = 3, k = 0, jl = fieldValues.length; j < jl; j++, k++) {\n parseHexColor(fieldValues[j], textureType, color);\n const stride = k * 4;\n data2[stride + 0] = color.r;\n data2[stride + 1] = color.g;\n data2[stride + 2] = color.b;\n data2[stride + 3] = color.a;\n }\n texture = new DataTexture(data2, width, height);\n texture.needsUpdate = true;\n texture.__type = textureType;\n break;\n case \"repeatS\":\n if (fieldValues[0] === false)\n wrapS = ClampToEdgeWrapping;\n break;\n case \"repeatT\":\n if (fieldValues[0] === false)\n wrapT = ClampToEdgeWrapping;\n break;\n default:\n console.warn(\"THREE.VRMLLoader: Unknown field:\", fieldName);\n break;\n }\n }\n if (texture) {\n texture.wrapS = wrapS;\n texture.wrapT = wrapT;\n }\n return texture;\n }\n function buildImageTextureNode(node) {\n let texture;\n let wrapS = RepeatWrapping;\n let wrapT = RepeatWrapping;\n const fields = node.fields;\n for (let i = 0, l = fields.length; i < l; i++) {\n const field = fields[i];\n const fieldName = field.name;\n const fieldValues = field.values;\n switch (fieldName) {\n case \"url\":\n const url = fieldValues[0];\n if (url)\n texture = textureLoader.load(url);\n break;\n case \"repeatS\":\n if (fieldValues[0] === false)\n wrapS = ClampToEdgeWrapping;\n break;\n case \"repeatT\":\n if (fieldValues[0] === false)\n wrapT = ClampToEdgeWrapping;\n break;\n default:\n console.warn(\"THREE.VRMLLoader: Unknown field:\", fieldName);\n break;\n }\n }\n if (texture) {\n texture.wrapS = wrapS;\n texture.wrapT = wrapT;\n }\n return texture;\n }\n function buildTextureTransformNode(node) {\n const transformData = {\n center: new Vector2(),\n rotation: new Vector2(),\n scale: new Vector2(),\n translation: new Vector2()\n };\n const fields = node.fields;\n for (let i = 0, l = fields.length; i < l; i++) {\n const field = fields[i];\n const fieldName = field.name;\n const fieldValues = field.values;\n switch (fieldName) {\n case \"center\":\n transformData.center.set(fieldValues[0], fieldValues[1]);\n break;\n case \"rotation\":\n transformData.rotation = fieldValues[0];\n break;\n case \"scale\":\n transformData.scale.set(fieldValues[0], fieldValues[1]);\n break;\n case \"translation\":\n transformData.translation.set(fieldValues[0], fieldValues[1]);\n break;\n default:\n console.warn(\"THREE.VRMLLoader: Unknown field:\", fieldName);\n break;\n }\n }\n return transformData;\n }\n function buildGeometricNode(node) {\n return node.fields[0].values;\n }\n function buildWorldInfoNode(node) {\n const worldInfo = {};\n const fields = node.fields;\n for (let i = 0, l = fields.length; i < l; i++) {\n const field = fields[i];\n const fieldName = field.name;\n const fieldValues = field.values;\n switch (fieldName) {\n case \"title\":\n worldInfo.title = fieldValues[0];\n break;\n case \"info\":\n worldInfo.info = fieldValues;\n break;\n default:\n console.warn(\"THREE.VRMLLoader: Unknown field:\", fieldName);\n break;\n }\n }\n return worldInfo;\n }\n function buildIndexedFaceSetNode(node) {\n let color, coord, normal, texCoord;\n let ccw = true, solid = true, creaseAngle = 0;\n let colorIndex, coordIndex, normalIndex, texCoordIndex;\n let colorPerVertex = true, normalPerVertex = true;\n const fields = node.fields;\n for (let i = 0, l = fields.length; i < l; i++) {\n const field = fields[i];\n const fieldName = field.name;\n const fieldValues = field.values;\n switch (fieldName) {\n case \"color\":\n const colorNode = fieldValues[0];\n if (colorNode !== null) {\n color = getNode(colorNode);\n }\n break;\n case \"coord\":\n const coordNode = fieldValues[0];\n if (coordNode !== null) {\n coord = getNode(coordNode);\n }\n break;\n case \"normal\":\n const normalNode = fieldValues[0];\n if (normalNode !== null) {\n normal = getNode(normalNode);\n }\n break;\n case \"texCoord\":\n const texCoordNode = fieldValues[0];\n if (texCoordNode !== null) {\n texCoord = getNode(texCoordNode);\n }\n break;\n case \"ccw\":\n ccw = fieldValues[0];\n break;\n case \"colorIndex\":\n colorIndex = fieldValues;\n break;\n case \"colorPerVertex\":\n colorPerVertex = fieldValues[0];\n break;\n case \"convex\":\n break;\n case \"coordIndex\":\n coordIndex = fieldValues;\n break;\n case \"creaseAngle\":\n creaseAngle = fieldValues[0];\n break;\n case \"normalIndex\":\n normalIndex = fieldValues;\n break;\n case \"normalPerVertex\":\n normalPerVertex = fieldValues[0];\n break;\n case \"solid\":\n solid = fieldValues[0];\n break;\n case \"texCoordIndex\":\n texCoordIndex = fieldValues;\n break;\n default:\n console.warn(\"THREE.VRMLLoader: Unknown field:\", fieldName);\n break;\n }\n }\n if (coordIndex === void 0) {\n console.warn(\"THREE.VRMLLoader: Missing coordIndex.\");\n return new BufferGeometry();\n }\n const triangulatedCoordIndex = triangulateFaceIndex(coordIndex, ccw);\n let colorAttribute;\n let normalAttribute;\n let uvAttribute;\n if (color) {\n if (colorPerVertex === true) {\n if (colorIndex && colorIndex.length > 0) {\n const triangulatedColorIndex = triangulateFaceIndex(colorIndex, ccw);\n colorAttribute = computeAttributeFromIndexedData(triangulatedCoordIndex, triangulatedColorIndex, color, 3);\n } else {\n colorAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new Float32BufferAttribute(color, 3));\n }\n } else {\n if (colorIndex && colorIndex.length > 0) {\n const flattenFaceColors = flattenData(color, colorIndex);\n const triangulatedFaceColors = triangulateFaceData(flattenFaceColors, coordIndex);\n colorAttribute = computeAttributeFromFaceData(triangulatedCoordIndex, triangulatedFaceColors);\n } else {\n const triangulatedFaceColors = triangulateFaceData(color, coordIndex);\n colorAttribute = computeAttributeFromFaceData(triangulatedCoordIndex, triangulatedFaceColors);\n }\n }\n }\n if (normal) {\n if (normalPerVertex === true) {\n if (normalIndex && normalIndex.length > 0) {\n const triangulatedNormalIndex = triangulateFaceIndex(normalIndex, ccw);\n normalAttribute = computeAttributeFromIndexedData(\n triangulatedCoordIndex,\n triangulatedNormalIndex,\n normal,\n 3\n );\n } else {\n normalAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new Float32BufferAttribute(normal, 3));\n }\n } else {\n if (normalIndex && normalIndex.length > 0) {\n const flattenFaceNormals = flattenData(normal, normalIndex);\n const triangulatedFaceNormals = triangulateFaceData(flattenFaceNormals, coordIndex);\n normalAttribute = computeAttributeFromFaceData(triangulatedCoordIndex, triangulatedFaceNormals);\n } else {\n const triangulatedFaceNormals = triangulateFaceData(normal, coordIndex);\n normalAttribute = computeAttributeFromFaceData(triangulatedCoordIndex, triangulatedFaceNormals);\n }\n }\n } else {\n normalAttribute = computeNormalAttribute(triangulatedCoordIndex, coord, creaseAngle);\n }\n if (texCoord) {\n if (texCoordIndex && texCoordIndex.length > 0) {\n const triangulatedTexCoordIndex = triangulateFaceIndex(texCoordIndex, ccw);\n uvAttribute = computeAttributeFromIndexedData(triangulatedCoordIndex, triangulatedTexCoordIndex, texCoord, 2);\n } else {\n uvAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new Float32BufferAttribute(texCoord, 2));\n }\n }\n const geometry = new BufferGeometry();\n const positionAttribute = toNonIndexedAttribute(triangulatedCoordIndex, new Float32BufferAttribute(coord, 3));\n geometry.setAttribute(\"position\", positionAttribute);\n geometry.setAttribute(\"normal\", normalAttribute);\n if (colorAttribute)\n geometry.setAttribute(\"color\", colorAttribute);\n if (uvAttribute)\n geometry.setAttribute(\"uv\", uvAttribute);\n geometry._solid = solid;\n geometry._type = \"mesh\";\n return geometry;\n }\n function buildIndexedLineSetNode(node) {\n let color, coord;\n let colorIndex, coordIndex;\n let colorPerVertex = true;\n const fields = node.fields;\n for (let i = 0, l = fields.length; i < l; i++) {\n const field = fields[i];\n const fieldName = field.name;\n const fieldValues = field.values;\n switch (fieldName) {\n case \"color\":\n const colorNode = fieldValues[0];\n if (colorNode !== null) {\n color = getNode(colorNode);\n }\n break;\n case \"coord\":\n const coordNode = fieldValues[0];\n if (coordNode !== null) {\n coord = getNode(coordNode);\n }\n break;\n case \"colorIndex\":\n colorIndex = fieldValues;\n break;\n case \"colorPerVertex\":\n colorPerVertex = fieldValues[0];\n break;\n case \"coordIndex\":\n coordIndex = fieldValues;\n break;\n default:\n console.warn(\"THREE.VRMLLoader: Unknown field:\", fieldName);\n break;\n }\n }\n let colorAttribute;\n const expandedLineIndex = expandLineIndex(coordIndex);\n if (color) {\n if (colorPerVertex === true) {\n if (colorIndex.length > 0) {\n const expandedColorIndex = expandLineIndex(colorIndex);\n colorAttribute = computeAttributeFromIndexedData(expandedLineIndex, expandedColorIndex, color, 3);\n } else {\n colorAttribute = toNonIndexedAttribute(expandedLineIndex, new Float32BufferAttribute(color, 3));\n }\n } else {\n if (colorIndex.length > 0) {\n const flattenLineColors = flattenData(color, colorIndex);\n const expandedLineColors = expandLineData(flattenLineColors, coordIndex);\n colorAttribute = computeAttributeFromLineData(expandedLineIndex, expandedLineColors);\n } else {\n const expandedLineColors = expandLineData(color, coordIndex);\n colorAttribute = computeAttributeFromLineData(expandedLineIndex, expandedLineColors);\n }\n }\n }\n const geometry = new BufferGeometry();\n const positionAttribute = toNonIndexedAttribute(expandedLineIndex, new Float32BufferAttribute(coord, 3));\n geometry.setAttribute(\"position\", positionAttribute);\n if (colorAttribute)\n geometry.setAttribute(\"color\", colorAttribute);\n geometry._type = \"line\";\n return geometry;\n }\n function buildPointSetNode(node) {\n let color, coord;\n const fields = node.fields;\n for (let i = 0, l = fields.length; i < l; i++) {\n const field = fields[i];\n const fieldName = field.name;\n const fieldValues = field.values;\n switch (fieldName) {\n case \"color\":\n const colorNode = fieldValues[0];\n if (colorNode !== null) {\n color = getNode(colorNode);\n }\n break;\n case \"coord\":\n const coordNode = fieldValues[0];\n if (coordNode !== null) {\n coord = getNode(coordNode);\n }\n break;\n default:\n console.warn(\"THREE.VRMLLoader: Unknown field:\", fieldName);\n break;\n }\n }\n const geometry = new BufferGeometry();\n geometry.setAttribute(\"position\", new Float32BufferAttribute(coord, 3));\n if (color)\n geometry.setAttribute(\"color\", new Float32BufferAttribute(color, 3));\n geometry._type = \"points\";\n return geometry;\n }\n function buildBoxNode(node) {\n const size = new Vector3(2, 2, 2);\n const fields = node.fields;\n for (let i = 0, l = fields.length; i < l; i++) {\n const field = fields[i];\n const fieldName = field.name;\n const fieldValues = field.values;\n switch (fieldName) {\n case \"size\":\n size.x = fieldValues[0];\n size.y = fieldValues[1];\n size.z = fieldValues[2];\n break;\n default:\n console.warn(\"THREE.VRMLLoader: Unknown field:\", fieldName);\n break;\n }\n }\n const geometry = new BoxGeometry(size.x, size.y, size.z);\n return geometry;\n }\n function buildConeNode(node) {\n let radius = 1, height = 2, openEnded = false;\n const fields = node.fields;\n for (let i = 0, l = fields.length; i < l; i++) {\n const field = fields[i];\n const fieldName = field.name;\n const fieldValues = field.values;\n switch (fieldName) {\n case \"bottom\":\n openEnded = !fieldValues[0];\n break;\n case \"bottomRadius\":\n radius = fieldValues[0];\n break;\n case \"height\":\n height = fieldValues[0];\n break;\n case \"side\":\n break;\n default:\n console.warn(\"THREE.VRMLLoader: Unknown field:\", fieldName);\n break;\n }\n }\n const geometry = new ConeGeometry(radius, height, 16, 1, openEnded);\n return geometry;\n }\n function buildCylinderNode(node) {\n let radius = 1, height = 2;\n const fields = node.fields;\n for (let i = 0, l = fields.length; i < l; i++) {\n const field = fields[i];\n const fieldName = field.name;\n const fieldValues = field.values;\n switch (fieldName) {\n case \"bottom\":\n break;\n case \"radius\":\n radius = fieldValues[0];\n break;\n case \"height\":\n height = fieldValues[0];\n break;\n case \"side\":\n break;\n case \"top\":\n break;\n default:\n console.warn(\"THREE.VRMLLoader: Unknown field:\", fieldName);\n break;\n }\n }\n const geometry = new CylinderGeometry(radius, radius, height, 16, 1);\n return geometry;\n }\n function buildSphereNode(node) {\n let radius = 1;\n const fields = node.fields;\n for (let i = 0, l = fields.length; i < l; i++) {\n const field = fields[i];\n const fieldName = field.name;\n const fieldValues = field.values;\n switch (fieldName) {\n case \"radius\":\n radius = fieldValues[0];\n break;\n default:\n console.warn(\"THREE.VRMLLoader: Unknown field:\", fieldName);\n break;\n }\n }\n const geometry = new SphereGeometry(radius, 16, 16);\n return geometry;\n }\n function buildElevationGridNode(node) {\n let color;\n let normal;\n let texCoord;\n let height;\n let colorPerVertex = true;\n let normalPerVertex = true;\n let solid = true;\n let ccw = true;\n let creaseAngle = 0;\n let xDimension = 2;\n let zDimension = 2;\n let xSpacing = 1;\n let zSpacing = 1;\n const fields = node.fields;\n for (let i = 0, l = fields.length; i < l; i++) {\n const field = fields[i];\n const fieldName = field.name;\n const fieldValues = field.values;\n switch (fieldName) {\n case \"color\":\n const colorNode = fieldValues[0];\n if (colorNode !== null) {\n color = getNode(colorNode);\n }\n break;\n case \"normal\":\n const normalNode = fieldValues[0];\n if (normalNode !== null) {\n normal = getNode(normalNode);\n }\n break;\n case \"texCoord\":\n const texCoordNode = fieldValues[0];\n if (texCoordNode !== null) {\n texCoord = getNode(texCoordNode);\n }\n break;\n case \"height\":\n height = fieldValues;\n break;\n case \"ccw\":\n ccw = fieldValues[0];\n break;\n case \"colorPerVertex\":\n colorPerVertex = fieldValues[0];\n break;\n case \"creaseAngle\":\n creaseAngle = fieldValues[0];\n break;\n case \"normalPerVertex\":\n normalPerVertex = fieldValues[0];\n break;\n case \"solid\":\n solid = fieldValues[0];\n break;\n case \"xDimension\":\n xDimension = fieldValues[0];\n break;\n case \"xSpacing\":\n xSpacing = fieldValues[0];\n break;\n case \"zDimension\":\n zDimension = fieldValues[0];\n break;\n case \"zSpacing\":\n zSpacing = fieldValues[0];\n break;\n default:\n console.warn(\"THREE.VRMLLoader: Unknown field:\", fieldName);\n break;\n }\n }\n const vertices = [];\n const normals = [];\n const colors = [];\n const uvs = [];\n for (let i = 0; i < zDimension; i++) {\n for (let j = 0; j < xDimension; j++) {\n const index = i * xDimension + j;\n const x = xSpacing * i;\n const y = height[index];\n const z = zSpacing * j;\n vertices.push(x, y, z);\n if (color && colorPerVertex === true) {\n const r = color[index * 3 + 0];\n const g = color[index * 3 + 1];\n const b = color[index * 3 + 2];\n colors.push(r, g, b);\n }\n if (normal && normalPerVertex === true) {\n const xn = normal[index * 3 + 0];\n const yn = normal[index * 3 + 1];\n const zn = normal[index * 3 + 2];\n normals.push(xn, yn, zn);\n }\n if (texCoord) {\n const s = texCoord[index * 2 + 0];\n const t = texCoord[index * 2 + 1];\n uvs.push(s, t);\n } else {\n uvs.push(i / (xDimension - 1), j / (zDimension - 1));\n }\n }\n }\n const indices = [];\n for (let i = 0; i < xDimension - 1; i++) {\n for (let j = 0; j < zDimension - 1; j++) {\n const a = i + j * xDimension;\n const b = i + (j + 1) * xDimension;\n const c = i + 1 + (j + 1) * xDimension;\n const d = i + 1 + j * xDimension;\n if (ccw === true) {\n indices.push(a, c, b);\n indices.push(c, a, d);\n } else {\n indices.push(a, b, c);\n indices.push(c, d, a);\n }\n }\n }\n const positionAttribute = toNonIndexedAttribute(indices, new Float32BufferAttribute(vertices, 3));\n const uvAttribute = toNonIndexedAttribute(indices, new Float32BufferAttribute(uvs, 2));\n let colorAttribute;\n let normalAttribute;\n if (color) {\n if (colorPerVertex === false) {\n for (let i = 0; i < xDimension - 1; i++) {\n for (let j = 0; j < zDimension - 1; j++) {\n const index = i + j * (xDimension - 1);\n const r = color[index * 3 + 0];\n const g = color[index * 3 + 1];\n const b = color[index * 3 + 2];\n colors.push(r, g, b);\n colors.push(r, g, b);\n colors.push(r, g, b);\n colors.push(r, g, b);\n colors.push(r, g, b);\n colors.push(r, g, b);\n }\n }\n colorAttribute = new Float32BufferAttribute(colors, 3);\n } else {\n colorAttribute = toNonIndexedAttribute(indices, new Float32BufferAttribute(colors, 3));\n }\n }\n if (normal) {\n if (normalPerVertex === false) {\n for (let i = 0; i < xDimension - 1; i++) {\n for (let j = 0; j < zDimension - 1; j++) {\n const index = i + j * (xDimension - 1);\n const xn = normal[index * 3 + 0];\n const yn = normal[index * 3 + 1];\n const zn = normal[index * 3 + 2];\n normals.push(xn, yn, zn);\n normals.push(xn, yn, zn);\n normals.push(xn, yn, zn);\n normals.push(xn, yn, zn);\n normals.push(xn, yn, zn);\n normals.push(xn, yn, zn);\n }\n }\n normalAttribute = new Float32BufferAttribute(normals, 3);\n } else {\n normalAttribute = toNonIndexedAttribute(indices, new Float32BufferAttribute(normals, 3));\n }\n } else {\n normalAttribute = computeNormalAttribute(indices, vertices, creaseAngle);\n }\n const geometry = new BufferGeometry();\n geometry.setAttribute(\"position\", positionAttribute);\n geometry.setAttribute(\"normal\", normalAttribute);\n geometry.setAttribute(\"uv\", uvAttribute);\n if (colorAttribute)\n geometry.setAttribute(\"color\", colorAttribute);\n geometry._solid = solid;\n geometry._type = \"mesh\";\n return geometry;\n }\n function buildExtrusionNode(node) {\n let crossSection = [1, 1, 1, -1, -1, -1, -1, 1, 1, 1];\n let spine = [0, 0, 0, 0, 1, 0];\n let scale;\n let orientation;\n let beginCap = true;\n let ccw = true;\n let creaseAngle = 0;\n let endCap = true;\n let solid = true;\n const fields = node.fields;\n for (let i = 0, l = fields.length; i < l; i++) {\n const field = fields[i];\n const fieldName = field.name;\n const fieldValues = field.values;\n switch (fieldName) {\n case \"beginCap\":\n beginCap = fieldValues[0];\n break;\n case \"ccw\":\n ccw = fieldValues[0];\n break;\n case \"convex\":\n break;\n case \"creaseAngle\":\n creaseAngle = fieldValues[0];\n break;\n case \"crossSection\":\n crossSection = fieldValues;\n break;\n case \"endCap\":\n endCap = fieldValues[0];\n break;\n case \"orientation\":\n orientation = fieldValues;\n break;\n case \"scale\":\n scale = fieldValues;\n break;\n case \"solid\":\n solid = fieldValues[0];\n break;\n case \"spine\":\n spine = fieldValues;\n break;\n default:\n console.warn(\"THREE.VRMLLoader: Unknown field:\", fieldName);\n break;\n }\n }\n const crossSectionClosed = crossSection[0] === crossSection[crossSection.length - 2] && crossSection[1] === crossSection[crossSection.length - 1];\n const vertices = [];\n const spineVector = new Vector3();\n const scaling = new Vector3();\n const axis = new Vector3();\n const vertex = new Vector3();\n const quaternion = new Quaternion();\n for (let i = 0, j = 0, o = 0, il = spine.length; i < il; i += 3, j += 2, o += 4) {\n spineVector.fromArray(spine, i);\n scaling.x = scale ? scale[j + 0] : 1;\n scaling.y = 1;\n scaling.z = scale ? scale[j + 1] : 1;\n axis.x = orientation ? orientation[o + 0] : 0;\n axis.y = orientation ? orientation[o + 1] : 0;\n axis.z = orientation ? orientation[o + 2] : 1;\n const angle = orientation ? orientation[o + 3] : 0;\n for (let k = 0, kl = crossSection.length; k < kl; k += 2) {\n vertex.x = crossSection[k + 0];\n vertex.y = 0;\n vertex.z = crossSection[k + 1];\n vertex.multiply(scaling);\n quaternion.setFromAxisAngle(axis, angle);\n vertex.applyQuaternion(quaternion);\n vertex.add(spineVector);\n vertices.push(vertex.x, vertex.y, vertex.z);\n }\n }\n const indices = [];\n const spineCount = spine.length / 3;\n const crossSectionCount = crossSection.length / 2;\n for (let i = 0; i < spineCount - 1; i++) {\n for (let j = 0; j < crossSectionCount - 1; j++) {\n const a = j + i * crossSectionCount;\n let b = j + 1 + i * crossSectionCount;\n const c = j + (i + 1) * crossSectionCount;\n let d = j + 1 + (i + 1) * crossSectionCount;\n if (j === crossSectionCount - 2 && crossSectionClosed === true) {\n b = i * crossSectionCount;\n d = (i + 1) * crossSectionCount;\n }\n if (ccw === true) {\n indices.push(a, b, c);\n indices.push(c, b, d);\n } else {\n indices.push(a, c, b);\n indices.push(c, d, b);\n }\n }\n }\n if (beginCap === true || endCap === true) {\n const contour = [];\n for (let i = 0, l = crossSection.length; i < l; i += 2) {\n contour.push(new Vector2(crossSection[i], crossSection[i + 1]));\n }\n const faces = ShapeUtils.triangulateShape(contour, []);\n const capIndices = [];\n for (let i = 0, l = faces.length; i < l; i++) {\n const face = faces[i];\n capIndices.push(face[0], face[1], face[2]);\n }\n if (beginCap === true) {\n for (let i = 0, l = capIndices.length; i < l; i += 3) {\n if (ccw === true) {\n indices.push(capIndices[i + 0], capIndices[i + 1], capIndices[i + 2]);\n } else {\n indices.push(capIndices[i + 0], capIndices[i + 2], capIndices[i + 1]);\n }\n }\n }\n if (endCap === true) {\n const indexOffset = crossSectionCount * (spineCount - 1);\n for (let i = 0, l = capIndices.length; i < l; i += 3) {\n if (ccw === true) {\n indices.push(\n indexOffset + capIndices[i + 0],\n indexOffset + capIndices[i + 2],\n indexOffset + capIndices[i + 1]\n );\n } else {\n indices.push(\n indexOffset + capIndices[i + 0],\n indexOffset + capIndices[i + 1],\n indexOffset + capIndices[i + 2]\n );\n }\n }\n }\n }\n const positionAttribute = toNonIndexedAttribute(indices, new Float32BufferAttribute(vertices, 3));\n const normalAttribute = computeNormalAttribute(indices, vertices, creaseAngle);\n const geometry = new BufferGeometry();\n geometry.setAttribute(\"position\", positionAttribute);\n geometry.setAttribute(\"normal\", normalAttribute);\n geometry._solid = solid;\n geometry._type = \"mesh\";\n return geometry;\n }\n function resolveUSE(identifier) {\n const node = nodeMap[identifier];\n const build = getNode(node);\n return build.isObject3D || build.isMaterial ? build.clone() : build;\n }\n function parseFieldChildren(children, owner) {\n for (let i = 0, l = children.length; i < l; i++) {\n const object = getNode(children[i]);\n if (object instanceof Object3D)\n owner.add(object);\n }\n }\n function triangulateFaceIndex(index, ccw) {\n const indices = [];\n let start = 0;\n for (let i = 0, l = index.length; i < l; i++) {\n const i1 = index[start];\n const i2 = index[i + (ccw ? 1 : 2)];\n const i3 = index[i + (ccw ? 2 : 1)];\n indices.push(i1, i2, i3);\n if (index[i + 3] === -1 || i + 3 >= l) {\n i += 3;\n start = i + 1;\n }\n }\n return indices;\n }\n function triangulateFaceData(data2, index) {\n const triangulatedData = [];\n let start = 0;\n for (let i = 0, l = index.length; i < l; i++) {\n const stride = start * 3;\n const x = data2[stride];\n const y = data2[stride + 1];\n const z = data2[stride + 2];\n triangulatedData.push(x, y, z);\n if (index[i + 3] === -1 || i + 3 >= l) {\n i += 3;\n start++;\n }\n }\n return triangulatedData;\n }\n function flattenData(data2, index) {\n const flattenData2 = [];\n for (let i = 0, l = index.length; i < l; i++) {\n const i1 = index[i];\n const stride = i1 * 3;\n const x = data2[stride];\n const y = data2[stride + 1];\n const z = data2[stride + 2];\n flattenData2.push(x, y, z);\n }\n return flattenData2;\n }\n function expandLineIndex(index) {\n const indices = [];\n for (let i = 0, l = index.length; i < l; i++) {\n const i1 = index[i];\n const i2 = index[i + 1];\n indices.push(i1, i2);\n if (index[i + 2] === -1 || i + 2 >= l) {\n i += 2;\n }\n }\n return indices;\n }\n function expandLineData(data2, index) {\n const triangulatedData = [];\n let start = 0;\n for (let i = 0, l = index.length; i < l; i++) {\n const stride = start * 3;\n const x = data2[stride];\n const y = data2[stride + 1];\n const z = data2[stride + 2];\n triangulatedData.push(x, y, z);\n if (index[i + 2] === -1 || i + 2 >= l) {\n i += 2;\n start++;\n }\n }\n return triangulatedData;\n }\n const vA = new Vector3();\n const vB = new Vector3();\n const vC = new Vector3();\n const uvA = new Vector2();\n const uvB = new Vector2();\n const uvC = new Vector2();\n function computeAttributeFromIndexedData(coordIndex, index, data2, itemSize) {\n const array = [];\n for (let i = 0, l = coordIndex.length; i < l; i += 3) {\n const a = index[i];\n const b = index[i + 1];\n const c = index[i + 2];\n if (itemSize === 2) {\n uvA.fromArray(data2, a * itemSize);\n uvB.fromArray(data2, b * itemSize);\n uvC.fromArray(data2, c * itemSize);\n array.push(uvA.x, uvA.y);\n array.push(uvB.x, uvB.y);\n array.push(uvC.x, uvC.y);\n } else {\n vA.fromArray(data2, a * itemSize);\n vB.fromArray(data2, b * itemSize);\n vC.fromArray(data2, c * itemSize);\n array.push(vA.x, vA.y, vA.z);\n array.push(vB.x, vB.y, vB.z);\n array.push(vC.x, vC.y, vC.z);\n }\n }\n return new Float32BufferAttribute(array, itemSize);\n }\n function computeAttributeFromFaceData(index, faceData) {\n const array = [];\n for (let i = 0, j = 0, l = index.length; i < l; i += 3, j++) {\n vA.fromArray(faceData, j * 3);\n array.push(vA.x, vA.y, vA.z);\n array.push(vA.x, vA.y, vA.z);\n array.push(vA.x, vA.y, vA.z);\n }\n return new Float32BufferAttribute(array, 3);\n }\n function computeAttributeFromLineData(index, lineData) {\n const array = [];\n for (let i = 0, j = 0, l = index.length; i < l; i += 2, j++) {\n vA.fromArray(lineData, j * 3);\n array.push(vA.x, vA.y, vA.z);\n array.push(vA.x, vA.y, vA.z);\n }\n return new Float32BufferAttribute(array, 3);\n }\n function toNonIndexedAttribute(indices, attribute) {\n const array = attribute.array;\n const itemSize = attribute.itemSize;\n const array2 = new array.constructor(indices.length * itemSize);\n let index = 0, index2 = 0;\n for (let i = 0, l = indices.length; i < l; i++) {\n index = indices[i] * itemSize;\n for (let j = 0; j < itemSize; j++) {\n array2[index2++] = array[index++];\n }\n }\n return new Float32BufferAttribute(array2, itemSize);\n }\n const ab = new Vector3();\n const cb = new Vector3();\n function computeNormalAttribute(index, coord, creaseAngle) {\n const faces = [];\n const vertexNormals = {};\n for (let i = 0, l = index.length; i < l; i += 3) {\n const a = index[i];\n const b = index[i + 1];\n const c = index[i + 2];\n const face = new Face(a, b, c);\n vA.fromArray(coord, a * 3);\n vB.fromArray(coord, b * 3);\n vC.fromArray(coord, c * 3);\n cb.subVectors(vC, vB);\n ab.subVectors(vA, vB);\n cb.cross(ab);\n cb.normalize();\n face.normal.copy(cb);\n if (vertexNormals[a] === void 0)\n vertexNormals[a] = [];\n if (vertexNormals[b] === void 0)\n vertexNormals[b] = [];\n if (vertexNormals[c] === void 0)\n vertexNormals[c] = [];\n vertexNormals[a].push(face.normal);\n vertexNormals[b].push(face.normal);\n vertexNormals[c].push(face.normal);\n faces.push(face);\n }\n const normals = [];\n for (let i = 0, l = faces.length; i < l; i++) {\n const face = faces[i];\n const nA = weightedNormal(vertexNormals[face.a], face.normal, creaseAngle);\n const nB = weightedNormal(vertexNormals[face.b], face.normal, creaseAngle);\n const nC = weightedNormal(vertexNormals[face.c], face.normal, creaseAngle);\n vA.fromArray(coord, face.a * 3);\n vB.fromArray(coord, face.b * 3);\n vC.fromArray(coord, face.c * 3);\n normals.push(nA.x, nA.y, nA.z);\n normals.push(nB.x, nB.y, nB.z);\n normals.push(nC.x, nC.y, nC.z);\n }\n return new Float32BufferAttribute(normals, 3);\n }\n function weightedNormal(normals, vector, creaseAngle) {\n const normal = new Vector3();\n if (creaseAngle === 0) {\n normal.copy(vector);\n } else {\n for (let i = 0, l = normals.length; i < l; i++) {\n if (normals[i].angleTo(vector) < creaseAngle) {\n normal.add(normals[i]);\n }\n }\n }\n return normal.normalize();\n }\n function toColorArray(colors) {\n const array = [];\n for (let i = 0, l = colors.length; i < l; i += 3) {\n array.push(new Color(colors[i], colors[i + 1], colors[i + 2]));\n }\n return array;\n }\n function paintFaces(geometry, radius, angles, colors, topDown) {\n const thresholds = [];\n const startAngle = topDown === true ? 0 : Math.PI;\n for (let i = 0, l = colors.length; i < l; i++) {\n let angle = i === 0 ? 0 : angles[i - 1];\n angle = topDown === true ? angle : startAngle - angle;\n const point = new Vector3();\n point.setFromSphericalCoords(radius, angle, 0);\n thresholds.push(point);\n }\n const indices = geometry.index;\n const positionAttribute = geometry.attributes.position;\n const colorAttribute = new BufferAttribute(new Float32Array(geometry.attributes.position.count * 3), 3);\n const position = new Vector3();\n const color = new Color();\n for (let i = 0; i < indices.count; i++) {\n const index = indices.getX(i);\n position.fromBufferAttribute(positionAttribute, index);\n let thresholdIndexA, thresholdIndexB;\n let t = 1;\n for (let j = 1; j < thresholds.length; j++) {\n thresholdIndexA = j - 1;\n thresholdIndexB = j;\n const thresholdA = thresholds[thresholdIndexA];\n const thresholdB = thresholds[thresholdIndexB];\n if (topDown === true) {\n if (position.y <= thresholdA.y && position.y > thresholdB.y) {\n t = Math.abs(thresholdA.y - position.y) / Math.abs(thresholdA.y - thresholdB.y);\n break;\n }\n } else {\n if (position.y >= thresholdA.y && position.y < thresholdB.y) {\n t = Math.abs(thresholdA.y - position.y) / Math.abs(thresholdA.y - thresholdB.y);\n break;\n }\n }\n }\n const colorA = colors[thresholdIndexA];\n const colorB = colors[thresholdIndexB];\n color.copy(colorA).lerp(colorB, t);\n colorAttribute.setXYZ(index, color.r, color.g, color.b);\n }\n geometry.setAttribute(\"color\", colorAttribute);\n }\n const textureLoader = new TextureLoader(this.manager);\n textureLoader.setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin);\n if (data.indexOf(\"#VRML V2.0\") === -1) {\n throw Error(\"THREE.VRMLLexer: Version of VRML asset not supported.\");\n }\n const tree = generateVRMLTree(data);\n const scene = parseTree(tree);\n return scene;\n }\n}\nclass VRMLLexer {\n constructor(tokens) {\n this.lexer = new Lexer(tokens);\n }\n lex(inputText) {\n const lexingResult = this.lexer.tokenize(inputText);\n if (lexingResult.errors.length > 0) {\n console.error(lexingResult.errors);\n throw Error(\"THREE.VRMLLexer: Lexing errors detected.\");\n }\n return lexingResult;\n }\n}\nclass VRMLParser extends CstParser {\n constructor(tokenVocabulary) {\n super(tokenVocabulary);\n const $ = this;\n const Version = tokenVocabulary[\"Version\"];\n const LCurly = tokenVocabulary[\"LCurly\"];\n const RCurly = tokenVocabulary[\"RCurly\"];\n const LSquare = tokenVocabulary[\"LSquare\"];\n const RSquare = tokenVocabulary[\"RSquare\"];\n const Identifier = tokenVocabulary[\"Identifier\"];\n const RouteIdentifier = tokenVocabulary[\"RouteIdentifier\"];\n const StringLiteral = tokenVocabulary[\"StringLiteral\"];\n const HexLiteral = tokenVocabulary[\"HexLiteral\"];\n const NumberLiteral = tokenVocabulary[\"NumberLiteral\"];\n const TrueLiteral = tokenVocabulary[\"TrueLiteral\"];\n const FalseLiteral = tokenVocabulary[\"FalseLiteral\"];\n const NullLiteral = tokenVocabulary[\"NullLiteral\"];\n const DEF = tokenVocabulary[\"DEF\"];\n const USE = tokenVocabulary[\"USE\"];\n const ROUTE = tokenVocabulary[\"ROUTE\"];\n const TO = tokenVocabulary[\"TO\"];\n const NodeName = tokenVocabulary[\"NodeName\"];\n $.RULE(\"vrml\", function() {\n $.SUBRULE($.version);\n $.AT_LEAST_ONE(function() {\n $.SUBRULE($.node);\n });\n $.MANY(function() {\n $.SUBRULE($.route);\n });\n });\n $.RULE(\"version\", function() {\n $.CONSUME(Version);\n });\n $.RULE(\"node\", function() {\n $.OPTION(function() {\n $.SUBRULE($.def);\n });\n $.CONSUME(NodeName);\n $.CONSUME(LCurly);\n $.MANY(function() {\n $.SUBRULE($.field);\n });\n $.CONSUME(RCurly);\n });\n $.RULE(\"field\", function() {\n $.CONSUME(Identifier);\n $.OR2([\n {\n ALT: function() {\n $.SUBRULE($.singleFieldValue);\n }\n },\n {\n ALT: function() {\n $.SUBRULE($.multiFieldValue);\n }\n }\n ]);\n });\n $.RULE(\"def\", function() {\n $.CONSUME(DEF);\n $.OR([\n {\n ALT: function() {\n $.CONSUME(Identifier);\n }\n },\n {\n ALT: function() {\n $.CONSUME(NodeName);\n }\n }\n ]);\n });\n $.RULE(\"use\", function() {\n $.CONSUME(USE);\n $.OR([\n {\n ALT: function() {\n $.CONSUME(Identifier);\n }\n },\n {\n ALT: function() {\n $.CONSUME(NodeName);\n }\n }\n ]);\n });\n $.RULE(\"singleFieldValue\", function() {\n $.AT_LEAST_ONE(function() {\n $.OR([\n {\n ALT: function() {\n $.SUBRULE($.node);\n }\n },\n {\n ALT: function() {\n $.SUBRULE($.use);\n }\n },\n {\n ALT: function() {\n $.CONSUME(StringLiteral);\n }\n },\n {\n ALT: function() {\n $.CONSUME(HexLiteral);\n }\n },\n {\n ALT: function() {\n $.CONSUME(NumberLiteral);\n }\n },\n {\n ALT: function() {\n $.CONSUME(TrueLiteral);\n }\n },\n {\n ALT: function() {\n $.CONSUME(FalseLiteral);\n }\n },\n {\n ALT: function() {\n $.CONSUME(NullLiteral);\n }\n }\n ]);\n });\n });\n $.RULE(\"multiFieldValue\", function() {\n $.CONSUME(LSquare);\n $.MANY(function() {\n $.OR([\n {\n ALT: function() {\n $.SUBRULE($.node);\n }\n },\n {\n ALT: function() {\n $.SUBRULE($.use);\n }\n },\n {\n ALT: function() {\n $.CONSUME(StringLiteral);\n }\n },\n {\n ALT: function() {\n $.CONSUME(HexLiteral);\n }\n },\n {\n ALT: function() {\n $.CONSUME(NumberLiteral);\n }\n },\n {\n ALT: function() {\n $.CONSUME(NullLiteral);\n }\n }\n ]);\n });\n $.CONSUME(RSquare);\n });\n $.RULE(\"route\", function() {\n $.CONSUME(ROUTE);\n $.CONSUME(RouteIdentifier);\n $.CONSUME(TO);\n $.CONSUME2(RouteIdentifier);\n });\n this.performSelfAnalysis();\n }\n}\nclass Face {\n constructor(a, b, c) {\n this.a = a;\n this.b = b;\n this.c = c;\n this.normal = new Vector3();\n }\n}\nconst TEXTURE_TYPE = {\n INTENSITY: 1,\n INTENSITY_ALPHA: 2,\n RGB: 3,\n RGBA: 4\n};\nexport {\n VRMLLoader\n};\n//# sourceMappingURL=VRMLLoader.js.map\n","class WorkerPool {\n constructor(pool = 4) {\n this.pool = pool;\n this.queue = [];\n this.workers = [];\n this.workersResolve = [];\n this.workerStatus = 0;\n }\n _initWorker(workerId) {\n if (!this.workers[workerId]) {\n const worker = this.workerCreator();\n worker.addEventListener(\"message\", this._onMessage.bind(this, workerId));\n this.workers[workerId] = worker;\n }\n }\n _getIdleWorker() {\n for (let i = 0; i < this.pool; i++)\n if (!(this.workerStatus & 1 << i))\n return i;\n return -1;\n }\n _onMessage(workerId, msg) {\n const resolve = this.workersResolve[workerId];\n resolve && resolve(msg);\n if (this.queue.length) {\n const { resolve: resolve2, msg: msg2, transfer } = this.queue.shift();\n this.workersResolve[workerId] = resolve2;\n this.workers[workerId].postMessage(msg2, transfer);\n } else {\n this.workerStatus ^= 1 << workerId;\n }\n }\n setWorkerCreator(workerCreator) {\n this.workerCreator = workerCreator;\n }\n setWorkerLimit(pool) {\n this.pool = pool;\n }\n postMessage(msg, transfer) {\n return new Promise((resolve) => {\n const workerId = this._getIdleWorker();\n if (workerId !== -1) {\n this._initWorker(workerId);\n this.workerStatus |= 1 << workerId;\n this.workersResolve[workerId] = resolve;\n this.workers[workerId].postMessage(msg, transfer);\n } else {\n this.queue.push({ resolve, msg, transfer });\n }\n });\n }\n dispose() {\n this.workers.forEach((worker) => worker.terminate());\n this.workersResolve.length = 0;\n this.workers.length = 0;\n this.queue.length = 0;\n this.workerStatus = 0;\n }\n}\nexport {\n WorkerPool\n};\n//# sourceMappingURL=WorkerPool.js.map\n","const KHR_SUPERCOMPRESSION_NONE = 0;\nconst KHR_SUPERCOMPRESSION_ZSTD = 2;\nconst KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT = 0;\nconst KHR_DF_VENDORID_KHRONOS = 0;\nconst KHR_DF_VERSION = 2;\nconst KHR_DF_MODEL_UNSPECIFIED = 0;\nconst KHR_DF_FLAG_ALPHA_STRAIGHT = 0;\nconst KHR_DF_FLAG_ALPHA_PREMULTIPLIED = 1;\nconst KHR_DF_TRANSFER_SRGB = 2;\nconst KHR_DF_PRIMARIES_UNSPECIFIED = 0;\nconst KHR_DF_PRIMARIES_BT709 = 1;\nconst KHR_DF_PRIMARIES_DISPLAYP3 = 10;\nconst KHR_DF_SAMPLE_DATATYPE_SIGNED = 64;\nconst VK_FORMAT_UNDEFINED = 0;\nconst VK_FORMAT_R8_UNORM = 9;\nconst VK_FORMAT_R8_SRGB = 15;\nconst VK_FORMAT_R8G8_UNORM = 16;\nconst VK_FORMAT_R8G8_SRGB = 22;\nconst VK_FORMAT_R8G8B8A8_UNORM = 37;\nconst VK_FORMAT_R8G8B8A8_SRGB = 43;\nconst VK_FORMAT_R16_SFLOAT = 76;\nconst VK_FORMAT_R16G16_SFLOAT = 83;\nconst VK_FORMAT_R16G16B16A16_SFLOAT = 97;\nconst VK_FORMAT_R32_SFLOAT = 100;\nconst VK_FORMAT_R32G32_SFLOAT = 103;\nconst VK_FORMAT_R32G32B32A32_SFLOAT = 109;\nconst VK_FORMAT_ASTC_6x6_UNORM_BLOCK = 165;\nconst VK_FORMAT_ASTC_6x6_SRGB_BLOCK = 166;\nclass KTX2Container {\n constructor() {\n this.vkFormat = VK_FORMAT_UNDEFINED;\n this.typeSize = 1;\n this.pixelWidth = 0;\n this.pixelHeight = 0;\n this.pixelDepth = 0;\n this.layerCount = 0;\n this.faceCount = 1;\n this.supercompressionScheme = KHR_SUPERCOMPRESSION_NONE;\n this.levels = [];\n this.dataFormatDescriptor = [\n {\n vendorId: KHR_DF_VENDORID_KHRONOS,\n descriptorType: KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT,\n descriptorBlockSize: 0,\n versionNumber: KHR_DF_VERSION,\n colorModel: KHR_DF_MODEL_UNSPECIFIED,\n colorPrimaries: KHR_DF_PRIMARIES_BT709,\n transferFunction: KHR_DF_TRANSFER_SRGB,\n flags: KHR_DF_FLAG_ALPHA_STRAIGHT,\n texelBlockDimension: [0, 0, 0, 0],\n bytesPlane: [0, 0, 0, 0, 0, 0, 0, 0],\n samples: []\n }\n ];\n this.keyValue = {};\n this.globalData = null;\n }\n}\nclass BufferReader {\n constructor(data, byteOffset, byteLength, littleEndian) {\n this._dataView = void 0;\n this._littleEndian = void 0;\n this._offset = void 0;\n this._dataView = new DataView(data.buffer, data.byteOffset + byteOffset, byteLength);\n this._littleEndian = littleEndian;\n this._offset = 0;\n }\n _nextUint8() {\n const value = this._dataView.getUint8(this._offset);\n this._offset += 1;\n return value;\n }\n _nextUint16() {\n const value = this._dataView.getUint16(this._offset, this._littleEndian);\n this._offset += 2;\n return value;\n }\n _nextUint32() {\n const value = this._dataView.getUint32(this._offset, this._littleEndian);\n this._offset += 4;\n return value;\n }\n _nextUint64() {\n const left = this._dataView.getUint32(this._offset, this._littleEndian);\n const right = this._dataView.getUint32(this._offset + 4, this._littleEndian);\n const value = left + 2 ** 32 * right;\n this._offset += 8;\n return value;\n }\n _nextInt32() {\n const value = this._dataView.getInt32(this._offset, this._littleEndian);\n this._offset += 4;\n return value;\n }\n _nextUint8Array(len) {\n const value = new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + this._offset, len);\n this._offset += len;\n return value;\n }\n _skip(bytes) {\n this._offset += bytes;\n return this;\n }\n _scan(maxByteLength, term) {\n if (term === void 0) {\n term = 0;\n }\n const byteOffset = this._offset;\n let byteLength = 0;\n while (this._dataView.getUint8(this._offset) !== term && byteLength < maxByteLength) {\n byteLength++;\n this._offset++;\n }\n if (byteLength < maxByteLength)\n this._offset++;\n return new Uint8Array(this._dataView.buffer, this._dataView.byteOffset + byteOffset, byteLength);\n }\n}\nconst KTX2_ID = [\n // '´', 'K', 'T', 'X', '2', '0', 'ª', '\\r', '\\n', '\\x1A', '\\n'\n 171,\n 75,\n 84,\n 88,\n 32,\n 50,\n 48,\n 187,\n 13,\n 10,\n 26,\n 10\n];\nfunction decodeText(buffer) {\n if (typeof TextDecoder !== \"undefined\") {\n return new TextDecoder().decode(buffer);\n }\n return Buffer.from(buffer).toString(\"utf8\");\n}\nfunction read(data) {\n const id = new Uint8Array(data.buffer, data.byteOffset, KTX2_ID.length);\n if (id[0] !== KTX2_ID[0] || // '´'\n id[1] !== KTX2_ID[1] || // 'K'\n id[2] !== KTX2_ID[2] || // 'T'\n id[3] !== KTX2_ID[3] || // 'X'\n id[4] !== KTX2_ID[4] || // ' '\n id[5] !== KTX2_ID[5] || // '2'\n id[6] !== KTX2_ID[6] || // '0'\n id[7] !== KTX2_ID[7] || // 'ª'\n id[8] !== KTX2_ID[8] || // '\\r'\n id[9] !== KTX2_ID[9] || // '\\n'\n id[10] !== KTX2_ID[10] || // '\\x1A'\n id[11] !== KTX2_ID[11]) {\n throw new Error(\"Missing KTX 2.0 identifier.\");\n }\n const container = new KTX2Container();\n const headerByteLength = 17 * Uint32Array.BYTES_PER_ELEMENT;\n const headerReader = new BufferReader(data, KTX2_ID.length, headerByteLength, true);\n container.vkFormat = headerReader._nextUint32();\n container.typeSize = headerReader._nextUint32();\n container.pixelWidth = headerReader._nextUint32();\n container.pixelHeight = headerReader._nextUint32();\n container.pixelDepth = headerReader._nextUint32();\n container.layerCount = headerReader._nextUint32();\n container.faceCount = headerReader._nextUint32();\n const levelCount = headerReader._nextUint32();\n container.supercompressionScheme = headerReader._nextUint32();\n const dfdByteOffset = headerReader._nextUint32();\n const dfdByteLength = headerReader._nextUint32();\n const kvdByteOffset = headerReader._nextUint32();\n const kvdByteLength = headerReader._nextUint32();\n const sgdByteOffset = headerReader._nextUint64();\n const sgdByteLength = headerReader._nextUint64();\n const levelByteLength = levelCount * 3 * 8;\n const levelReader = new BufferReader(data, KTX2_ID.length + headerByteLength, levelByteLength, true);\n for (let i = 0; i < levelCount; i++) {\n container.levels.push({\n levelData: new Uint8Array(data.buffer, data.byteOffset + levelReader._nextUint64(), levelReader._nextUint64()),\n uncompressedByteLength: levelReader._nextUint64()\n });\n }\n const dfdReader = new BufferReader(data, dfdByteOffset, dfdByteLength, true);\n const dfd = {\n vendorId: dfdReader._skip(\n 4\n /* totalSize */\n )._nextUint16(),\n descriptorType: dfdReader._nextUint16(),\n versionNumber: dfdReader._nextUint16(),\n descriptorBlockSize: dfdReader._nextUint16(),\n colorModel: dfdReader._nextUint8(),\n colorPrimaries: dfdReader._nextUint8(),\n transferFunction: dfdReader._nextUint8(),\n flags: dfdReader._nextUint8(),\n texelBlockDimension: [\n dfdReader._nextUint8(),\n dfdReader._nextUint8(),\n dfdReader._nextUint8(),\n dfdReader._nextUint8()\n ],\n bytesPlane: [\n dfdReader._nextUint8(),\n dfdReader._nextUint8(),\n dfdReader._nextUint8(),\n dfdReader._nextUint8(),\n dfdReader._nextUint8(),\n dfdReader._nextUint8(),\n dfdReader._nextUint8(),\n dfdReader._nextUint8()\n ],\n samples: []\n };\n const sampleStart = 6;\n const sampleWords = 4;\n const numSamples = (dfd.descriptorBlockSize / 4 - sampleStart) / sampleWords;\n for (let i = 0; i < numSamples; i++) {\n const sample = {\n bitOffset: dfdReader._nextUint16(),\n bitLength: dfdReader._nextUint8(),\n channelType: dfdReader._nextUint8(),\n samplePosition: [dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8(), dfdReader._nextUint8()],\n sampleLower: -Infinity,\n sampleUpper: Infinity\n };\n if (sample.channelType & KHR_DF_SAMPLE_DATATYPE_SIGNED) {\n sample.sampleLower = dfdReader._nextInt32();\n sample.sampleUpper = dfdReader._nextInt32();\n } else {\n sample.sampleLower = dfdReader._nextUint32();\n sample.sampleUpper = dfdReader._nextUint32();\n }\n dfd.samples[i] = sample;\n }\n container.dataFormatDescriptor.length = 0;\n container.dataFormatDescriptor.push(dfd);\n const kvdReader = new BufferReader(data, kvdByteOffset, kvdByteLength, true);\n while (kvdReader._offset < kvdByteLength) {\n const keyValueByteLength = kvdReader._nextUint32();\n const keyData = kvdReader._scan(keyValueByteLength);\n const key = decodeText(keyData);\n container.keyValue[key] = kvdReader._nextUint8Array(keyValueByteLength - keyData.byteLength - 1);\n if (key.match(/^ktx/i)) {\n const text = decodeText(container.keyValue[key]);\n container.keyValue[key] = text.substring(0, text.lastIndexOf(\"\\0\"));\n }\n const kvPadding = keyValueByteLength % 4 ? 4 - keyValueByteLength % 4 : 0;\n kvdReader._skip(kvPadding);\n }\n if (sgdByteLength <= 0)\n return container;\n const sgdReader = new BufferReader(data, sgdByteOffset, sgdByteLength, true);\n const endpointCount = sgdReader._nextUint16();\n const selectorCount = sgdReader._nextUint16();\n const endpointsByteLength = sgdReader._nextUint32();\n const selectorsByteLength = sgdReader._nextUint32();\n const tablesByteLength = sgdReader._nextUint32();\n const extendedByteLength = sgdReader._nextUint32();\n const imageDescs = [];\n for (let i = 0; i < levelCount; i++) {\n imageDescs.push({\n imageFlags: sgdReader._nextUint32(),\n rgbSliceByteOffset: sgdReader._nextUint32(),\n rgbSliceByteLength: sgdReader._nextUint32(),\n alphaSliceByteOffset: sgdReader._nextUint32(),\n alphaSliceByteLength: sgdReader._nextUint32()\n });\n }\n const endpointsByteOffset = sgdByteOffset + sgdReader._offset;\n const selectorsByteOffset = endpointsByteOffset + endpointsByteLength;\n const tablesByteOffset = selectorsByteOffset + selectorsByteLength;\n const extendedByteOffset = tablesByteOffset + tablesByteLength;\n const endpointsData = new Uint8Array(data.buffer, data.byteOffset + endpointsByteOffset, endpointsByteLength);\n const selectorsData = new Uint8Array(data.buffer, data.byteOffset + selectorsByteOffset, selectorsByteLength);\n const tablesData = new Uint8Array(data.buffer, data.byteOffset + tablesByteOffset, tablesByteLength);\n const extendedData = new Uint8Array(data.buffer, data.byteOffset + extendedByteOffset, extendedByteLength);\n container.globalData = {\n endpointCount,\n selectorCount,\n imageDescs,\n endpointsData,\n selectorsData,\n tablesData,\n extendedData\n };\n return container;\n}\nexport {\n KHR_DF_FLAG_ALPHA_PREMULTIPLIED,\n KHR_DF_FLAG_ALPHA_STRAIGHT,\n KHR_DF_KHR_DESCRIPTORTYPE_BASICFORMAT,\n KHR_DF_MODEL_UNSPECIFIED,\n KHR_DF_PRIMARIES_BT709,\n KHR_DF_PRIMARIES_DISPLAYP3,\n KHR_DF_PRIMARIES_UNSPECIFIED,\n KHR_DF_SAMPLE_DATATYPE_SIGNED,\n KHR_DF_TRANSFER_SRGB,\n KHR_DF_VENDORID_KHRONOS,\n KHR_DF_VERSION,\n KHR_SUPERCOMPRESSION_NONE,\n KHR_SUPERCOMPRESSION_ZSTD,\n KTX2Container,\n VK_FORMAT_ASTC_6x6_SRGB_BLOCK,\n VK_FORMAT_ASTC_6x6_UNORM_BLOCK,\n VK_FORMAT_R16G16B16A16_SFLOAT,\n VK_FORMAT_R16G16_SFLOAT,\n VK_FORMAT_R16_SFLOAT,\n VK_FORMAT_R32G32B32A32_SFLOAT,\n VK_FORMAT_R32G32_SFLOAT,\n VK_FORMAT_R32_SFLOAT,\n VK_FORMAT_R8G8B8A8_SRGB,\n VK_FORMAT_R8G8B8A8_UNORM,\n VK_FORMAT_R8G8_SRGB,\n VK_FORMAT_R8G8_UNORM,\n VK_FORMAT_R8_SRGB,\n VK_FORMAT_R8_UNORM,\n VK_FORMAT_UNDEFINED,\n read\n};\n//# sourceMappingURL=ktx-parse.js.map\n","let init;\nlet instance;\nlet heap;\nconst IMPORT_OBJECT = {\n env: {\n emscripten_notify_memory_growth: function(index) {\n heap = new Uint8Array(instance.exports.memory.buffer);\n }\n }\n};\nclass ZSTDDecoder {\n init() {\n if (init)\n return init;\n if (typeof fetch !== \"undefined\") {\n init = fetch(\"data:application/wasm;base64,\" + wasm).then((response) => response.arrayBuffer()).then((arrayBuffer) => WebAssembly.instantiate(arrayBuffer, IMPORT_OBJECT)).then(this._init);\n } else {\n init = WebAssembly.instantiate(Buffer.from(wasm, \"base64\"), IMPORT_OBJECT).then(this._init);\n }\n return init;\n }\n _init(result) {\n instance = result.instance;\n IMPORT_OBJECT.env.emscripten_notify_memory_growth(0);\n }\n decode(array, uncompressedSize = 0) {\n if (!instance)\n throw new Error(`ZSTDDecoder: Await .init() before decoding.`);\n const compressedSize = array.byteLength;\n const compressedPtr = instance.exports.malloc(compressedSize);\n heap.set(array, compressedPtr);\n uncompressedSize = uncompressedSize || Number(instance.exports.ZSTD_findDecompressedSize(compressedPtr, compressedSize));\n const uncompressedPtr = instance.exports.malloc(uncompressedSize);\n const actualSize = instance.exports.ZSTD_decompress(\n uncompressedPtr,\n uncompressedSize,\n compressedPtr,\n compressedSize\n );\n const dec = heap.slice(uncompressedPtr, uncompressedPtr + actualSize);\n instance.exports.free(compressedPtr);\n instance.exports.free(uncompressedPtr);\n return dec;\n }\n}\nconst wasm = \"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IAMNACAEQQNxBEADQCACRQ0FIAAgAkF/aiICaiIDIAEgAmotAAA6AAAgA0EDcQ0ACwsgAkEDTQ0AA0AgACACQXxqIgJqIAEgAmooAgA2AgAgAkEDSw0ACwsgAkUNAgNAIAAgAkF/aiICaiABIAJqLQAAOgAAIAINAAsMAgsgAkEDTQ0AIAIhBANAIAMgASgCADYCACABQQRqIQEgA0EEaiEDIARBfGoiBEEDSw0ACyACQQNxIQILIAJFDQADQCADIAEtAAA6AAAgA0EBaiEDIAFBAWohASACQX9qIgINAAsLIAAL8wICAn8BfgJAIAJFDQAgACACaiIDQX9qIAE6AAAgACABOgAAIAJBA0kNACADQX5qIAE6AAAgACABOgABIANBfWogAToAACAAIAE6AAIgAkEHSQ0AIANBfGogAToAACAAIAE6AAMgAkEJSQ0AIABBACAAa0EDcSIEaiIDIAFB/wFxQYGChAhsIgE2AgAgAyACIARrQXxxIgRqIgJBfGogATYCACAEQQlJDQAgAyABNgIIIAMgATYCBCACQXhqIAE2AgAgAkF0aiABNgIAIARBGUkNACADIAE2AhggAyABNgIUIAMgATYCECADIAE2AgwgAkFwaiABNgIAIAJBbGogATYCACACQWhqIAE2AgAgAkFkaiABNgIAIAQgA0EEcUEYciIEayICQSBJDQAgAa0iBUIghiAFhCEFIAMgBGohAQNAIAEgBTcDGCABIAU3AxAgASAFNwMIIAEgBTcDACABQSBqIQEgAkFgaiICQR9LDQALCyAACy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAIajYCACADCy8BAn8gACgCBCAAKAIAQQJ0aiICLQACIQMgACACLwEAIAEgAi0AAxAFajYCACADCx8AIAAgASACKAIEEAg2AgAgARAEGiAAIAJBCGo2AgQLCAAgAGdBH3MLugUBDX8jAEEQayIKJAACfyAEQQNNBEAgCkEANgIMIApBDGogAyAEEAsaIAAgASACIApBDGpBBBAVIgBBbCAAEAMbIAAgACAESxsMAQsgAEEAIAEoAgBBAXRBAmoQECENQVQgAygAACIGQQ9xIgBBCksNABogAiAAQQVqNgIAIAMgBGoiAkF8aiEMIAJBeWohDiACQXtqIRAgAEEGaiELQQQh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ASIDNgLE4AEgACgCvOABIQQgACABNgK84AEgACABIAJqNgK44AEgACABIAQgA2tqNgLA4AELpgEBAX8gACAAKALs4QEQFjYCyOABIABCADcD+OABIABCADcDuOABIABBwOABakIANwMAIABBqNAAaiIBQYyAgOAANgIAIABBADYCmOIBIABCADcDiOEBIABCAzcDgOEBIABBrNABakHgEikCADcCACAAQbTQAWpB6BIoAgA2AgAgACABNgIMIAAgAEGYIGo2AgggACAAQaAwajYCBCAAIABBEGo2AgALYQEBf0G4fyEDAkAgAUEDSQ0AIAIgABAhIgFBA3YiADYCCCACIAFBAXE2AgQgAiABQQF2QQNxIgM2AgACQCADQX9qIgFBAksNAAJAIAFBAWsOAgEAAgtBbA8LIAAhAwsgAwsMACAAIAEgAkEAEC4LiAQCA38CfiADEBYhBCAAQQBBKBAQIQAgBCACSwRAIAQPCyABRQRAQX8PCwJAAkAgA0EBRg0AIAEoAAAiBkGo6r5pRg0AQXYhAyAGQXBxQdDUtMIBRw0BQQghAyACQQhJDQEgAEEAQSgQECEAIAEoAAQhASAAQQE2AhQgACABrTcDAEEADwsgASACIAMQLyIDIAJLDQAgACADNgIYQXIhAyABIARqIgVBf2otAAAiAkEIcQ0AIAJBIHEiBkUEQEFwIQMgBS0AACIFQacBSw0BIAVBB3GtQgEgBUEDdkEKaq2GIgdCA4h+IAd8IQggBEEBaiEECyACQQZ2IQMgAkECdiEFAkAgAkEDcUF/aiICQQJLBEBBACECDAELAkACQAJAIAJBAWsOAgECAAsgASAEai0AACECIARBAWohBAwCCyABIARqLwAAIQIgBEECaiEEDAELIAEgBGooAAAhAiAEQQRqIQQLIAVBAXEhBQJ+AkACQAJAIANBf2oiA0ECTQRAIANBAWsOAgIDAQtCfyAGRQ0DGiABIARqMQAADAMLIAEgBGovAACtQoACfAwCCyABIARqKAAArQwBCyABIARqKQAACyEHIAAgBTYCICAAIAI2AhwgACAHNwMAQQAhAyAAQQA2AhQgACAHIAggBhsiBzcDCCAAIAdCgIAIIAdCgIAIVBs+AhALIAMLWwEBf0G4fyEDIAIQFiICIAFNBH8gACACakF/ai0AACIAQQNxQQJ0QaAeaigCACACaiAAQQZ2IgFBAnRBsB5qKAIAaiAAQSBxIgBFaiABRSAAQQV2cWoFQbh/CwsdACAAKAKQ4gEQWiAAQQA2AqDiASAAQgA3A5DiAQu1AwEFfyMAQZACayIKJABBuH8hBgJAIAVFDQAgBCwAACIIQf8BcSEHAkAgCEF/TARAIAdBgn9qQQF2IgggBU8NAkFsIQYgB0GBf2oiBUGAAk8NAiAEQQFqIQdBACEGA0AgBiAFTwRAIAUhBiAIIQcMAwUgACAGaiAHIAZBAXZqIgQtAABBBHY6AAAgACAGQQFyaiAELQAAQQ9xOgAAIAZBAmohBgwBCwAACwALIAcgBU8NASAAIARBAWogByAKEFMiBhADDQELIAYhBEEAIQYgAUEAQTQQECEJQQAhBQNAIAQgBkcEQCAAIAZqIggtAAAiAUELSwRAQWwhBgwDBSAJIAFBAnRqIgEgASgCAEEBajYCACAGQQFqIQZBASAILQAAdEEBdSAFaiEFDAILAAsLQWwhBiAFRQ0AIAUQFEEBaiIBQQxLDQAgAyABNgIAQQFBASABdCAFayIDEBQiAXQgA0cNACAAIARqIAFBAWoiADoAACAJIABBAnRqIgAgACgCAEEBajYCACAJKAIEIgBBAkkgAEEBcXINACACIARBAWo2AgAgB0EBaiEGCyAKQZACaiQAIAYLxhEBDH8jAEHwAGsiBSQAQWwhCwJAIANBCkkNACACLwAAIQogAi8AAiEJIAIvAAQhByAFQQhqIAQQDgJAIAMgByAJIApqakEGaiIMSQ0AIAUtAAohCCAFQdgAaiACQQZqIgIgChAGIgsQAw0BIAVBQGsgAiAKaiICIAkQBiILEAMNASAFQShqIAIgCWoiAiAHEAYiCxADDQEgBUEQaiACIAdqIAMgDGsQBiILEAMNASAAIAFqIg9BfWohECAEQQRqIQZBASELIAAgAUEDakECdiIDaiIMIANqIgIgA2oiDiEDIAIhBCAMIQcDQCALIAMgEElxBEAgACAGIAVB2ABqIAgQAkECdGoiCS8BADsAACAFQdgAaiAJLQACEAEgCS0AAyELIAcgBiAFQUBrIAgQAkECdGoiCS8BADsAACAFQUBrIAktAAIQASAJLQADIQogBCAGIAVBKGogCBACQQJ0aiIJLwEAOwAAIAVBKGogCS0AAhABIAktAAMhCSADIAYgBUEQaiAIEAJBAnRqIg0vAQA7AAAgBUEQaiANLQACEAEgDS0AAyENIAAgC2oiCyAGIAVB2ABqIAgQAkECdGoiAC8BADsAACAFQdgAaiAALQACEAEgAC0AAyEAIAcgCmoiCiAGIAVBQGsgCBACQQJ0aiIHLwEAOwAAIAVBQGsgBy0AAhABIActAAMhByAEIAlqIgkgBiAFQShqIAgQAkECdGoiBC8BADsAACAFQShqIAQtAAIQASAELQADIQQgAyANaiIDIAYgBUEQaiAIEAJBAnRqIg0vAQA7AAAgBUEQaiANLQACEAEgACALaiEAIAcgCmohByAEIAlqIQQgAyANLQADaiEDIAVB2ABqEA0gBUFAaxANciAFQShqEA1yIAVBEGoQDXJFIQsMAQsLIAQgDksgByACS3INAEFsIQsgACAMSw0BIAxBfWohCQNAQQAgACAJSSAFQdgAahAEGwRAIAAgBiAFQdgAaiAIEAJBAnRqIgovAQA7AAAgBUHYAGogCi0AAhABIAAgCi0AA2oiACAGIAVB2ABqIAgQAkECdGoiCi8BADsAACAFQdgAaiAKLQACEAEgACAKLQADaiEADAEFIAxBfmohCgNAIAVB2ABqEAQgACAKS3JFBEAgACAGIAVB2ABqIAgQAkECdGoiCS8BADsAACAFQdgAaiAJLQACEAEgACAJLQADaiEADAELCwNAIAAgCk0EQCAAIAYgBUHYAGogCBACQQJ0aiIJLwEAOwAAIAVB2ABqIAktAAIQASAAIAktAANqIQAMAQsLAkAgACAMTw0AIAAgBiAFQdgAaiAIEAIiAEECdGoiDC0AADoAACAMLQADQQFGBEAgBUHYAGogDC0AAhABDAELIAUoAlxBH0sNACAFQdgAaiAGIABBAnRqLQACEAEgBSgCXEEhSQ0AIAVBIDYCXAsgAkF9aiEMA0BBACAHIAxJIAVBQGsQBBsEQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiIAIAYgBUFAayAIEAJBAnRqIgcvAQA7AAAgBUFAayAHLQACEAEgACAHLQADaiEHDAEFIAJBfmohDANAIAVBQGsQBCAHIAxLckUEQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiEHDAELCwNAIAcgDE0EQCAHIAYgBUFAayAIEAJBAnRqIgAvAQA7AAAgBUFAayAALQACEAEgByAALQADaiEHDAELCwJAIAcgAk8NACAHIAYgBUFAayAIEAIiAEECdGoiAi0AADoAACACLQADQQFGBEAgBUFAayACLQACEAEMAQsgBSgCREEfSw0AIAVBQGsgBiAAQQJ0ai0AAhABIAUoAkRBIUkNACAFQSA2AkQLIA5BfWohAgNAQQAgBCACSSAFQShqEAQbBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2oiACAGIAVBKGogCBACQQJ0aiIELwEAOwAAIAVBKGogBC0AAhABIAAgBC0AA2ohBAwBBSAOQX5qIQIDQCAFQShqEAQgBCACS3JFBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2ohBAwBCwsDQCAEIAJNBEAgBCAGIAVBKGogCBACQQJ0aiIALwEAOwAAIAVBKGogAC0AAhABIAQgAC0AA2ohBAwBCwsCQCAEIA5PDQAgBCAGIAVBKGogCBACIgBBAnRqIgItAAA6AAAgAi0AA0EBRgRAIAVBKGogAi0AAhABDAELIAUoAixBH0sNACAFQShqIAYgAEECdGotAAIQASAFKAIsQSFJDQAgBUEgNgIsCwNAQQAgAyAQSSAFQRBqEAQbBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2oiACAGIAVBEGogCBACQQJ0aiICLwEAOwAAIAVBEGogAi0AAhABIAAgAi0AA2ohAwwBBSAPQX5qIQIDQCAFQRBqEAQgAyACS3JFBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2ohAwwBCwsDQCADIAJNBEAgAyAGIAVBEGogCBACQQJ0aiIALwEAOwAAIAVBEGogAC0AAhABIAMgAC0AA2ohAwwBCwsCQCADIA9PDQAgAyAGIAVBEGogCBACIgBBAnRqIgItAAA6AAAgAi0AA0EBRgRAIAVBEGogAi0AAhABDAELIAUoAhRBH0sNACAFQRBqIAYgAEECdGotAAIQASAFKAIUQSFJDQAgBUEgNgIUCyABQWwgBUHYAGoQCiAFQUBrEApxIAVBKGoQCnEgBUEQahAKcRshCwwJCwAACwALAAALAAsAAAsACwAACwALQWwhCwsgBUHwAGokACALC7UEAQ5/IwBBEGsiBiQAIAZBBGogABAOQVQhBQJAIARB3AtJDQAgBi0ABCEHIANB8ARqQQBB7AAQECEIIAdBDEsNACADQdwJaiIJIAggBkEIaiAGQQxqIAEgAhAxIhAQA0UEQCAGKAIMIgQgB0sNASADQdwFaiEPIANBpAVqIREgAEEEaiESIANBqAVqIQEgBCEFA0AgBSICQX9qIQUgCCACQQJ0aigCAEUNAAsgAkEBaiEOQQEhBQNAIAUgDk9FBEAgCCAFQQJ0IgtqKAIAIQwgASALaiAKNgIAIAVBAWohBSAKIAxqIQoMAQsLIAEgCjYCAEEAIQUgBigCCCELA0AgBSALRkUEQCABIAUgCWotAAAiDEECdGoiDSANKAIAIg1BAWo2AgAgDyANQQF0aiINIAw6AAEgDSAFOgAAIAVBAWohBQwBCwtBACEBIANBADYCqAUgBEF/cyAHaiEJQQEhBQNAIAUgDk9FBEAgCCAFQQJ0IgtqKAIAIQwgAyALaiABNgIAIAwgBSAJanQgAWohASAFQQFqIQUMAQsLIAcgBEEBaiIBIAJrIgRrQQFqIQgDQEEBIQUgBCAIT0UEQANAIAUgDk9FBEAgBUECdCIJIAMgBEE0bGpqIAMgCWooAgAgBHY2AgAgBUEBaiEFDAELCyAEQQFqIQQMAQsLIBIgByAPIAogESADIAIgARBkIAZBAToABSAGIAc6AAYgACAGKAIENgIACyAQIQULIAZBEGokACAFC8ENAQt/IwBB8ABrIgUkAEFsIQkCQCADQQpJDQAgAi8AACEKIAIvAAIhDCACLwAEIQYgBUEIaiAEEA4CQCADIAYgCiAMampBBmoiDUkNACAFLQAKIQcgBUHYAGogAkEGaiICIAoQBiIJEAMNASAFQUBrIAIgCmoiAiAMEAYiCRADDQEgBUEoaiACIAxqIgIgBhAGIgkQAw0BIAVBEGogAiAGaiADIA1rEAYiCRADDQEgACABaiIOQX1qIQ8gBEEEaiEGQQEhCSAAIAFBA2pBAnYiAmoiCiACaiIMIAJqIg0hAyAMIQQgCiECA0AgCSADIA9JcQRAIAYgBUHYAGogBxACQQF0aiIILQAAIQsgBUHYAGogCC0AARABIAAgCzoAACAGIAVBQGsgBxACQQF0aiIILQAAIQsgBUFAayAILQABEAEgAiALOgAAIAYgBUEoaiAHEAJBAXRqIggtAAAhCyAFQShqIAgtAAEQASAEIAs6AAAgBiAFQRBqIAcQAkEBdGoiCC0AACELIAVBEGogCC0AARABIAMgCzoAACAGIAVB2ABqIAcQAkEBdGoiCC0AACELIAVB2ABqIAgtAAEQASAAIAs6AAEgBiAFQUBrIAcQAkEBdGoiCC0AACELIAVBQGsgCC0AARABIAIgCzoAASAGIAVBKGogBxACQQF0aiIILQAAIQsgBUEoaiAILQABEAEgBCALOgABIAYgBUEQaiAHEAJBAXRqIggtAAAhCyAFQRBqIAgtAAEQASADIAs6AAEgA0ECaiEDIARBAmohBCACQQJqIQIgAEECaiEAIAkgBUHYAGoQDUVxIAVBQGsQDUVxIAVBKGoQDUVxIAVBEGoQDUVxIQkMAQsLIAQgDUsgAiAMS3INAEFsIQkgACAKSw0BIApBfWohCQNAIAVB2ABqEAQgACAJT3JFBEAgBiAFQdgAaiAHEAJBAXRqIggtAAAhCyAFQdgAaiAILQABEAEgACALOgAAIAYgBUHYAGogBxACQQF0aiIILQAAIQsgBUHYAGogCC0AARABIAAgCzoAASAAQQJqIQAMAQsLA0AgBUHYAGoQBCAAIApPckUEQCAGIAVB2ABqIAcQAkEBdGoiCS0AACEIIAVB2ABqIAktAAEQASAAIAg6AAAgAEEBaiEADAELCwNAIAAgCkkEQCAGIAVB2ABqIAcQAkEBdGoiCS0AACEIIAVB2ABqIAktAAEQASAAIAg6AAAgAEEBaiEADAELCyAMQX1qIQADQCAFQUBrEAQgAiAAT3JFBEAgBiAFQUBrIAcQAkEBdGoiCi0AACEJIAVBQGsgCi0AARABIAIgCToAACAGIAVBQGsgBxACQQF0aiIKLQAAIQkgBUFAayAKLQABEAEgAiAJOgABIAJBAmohAgwBCwsDQCAFQUBrEAQgAiAMT3JFBEAgBiAFQUBrIAcQAkEBdGoiAC0AACEKIAVBQGsgAC0AARABIAIgCjoAACACQQFqIQIMAQsLA0AgAiAMSQRAIAYgBUFAayAHEAJBAXRqIgAtAAAhCiAFQUBrIAAtAAEQASACIAo6AAAgAkEBaiECDAELCyANQX1qIQADQCAFQShqEAQgBCAAT3JFBEAgBiAFQShqIAcQAkEBdGoiAi0AACEKIAVBKGogAi0AARABIAQgCjoAACAGIAVBKGogBxACQQF0aiICLQAAIQogBUEoaiACLQABEAEgBCAKOgABIARBAmohBAwBCwsDQCAFQShqEAQgBCANT3JFBEAgBiAFQShqIAcQAkEBdGoiAC0AACECIAVBKGogAC0AARABIAQgAjoAACAEQQFqIQQMAQsLA0AgBCANSQRAIAYgBUEoaiAHEAJBAXRqIgAtAAAhAiAFQShqIAAtAAEQASAEIAI6AAAgBEEBaiEEDAELCwNAIAVBEGoQBCADIA9PckUEQCAGIAVBEGogBxACQQF0aiIALQAAIQIgBUEQaiAALQABEAEgAyACOgAAIAYgBUEQaiAHEAJBAXRqIgAtAAAhAiAFQRBqIAAtAAEQASADIAI6AAEgA0ECaiEDDAELCwNAIAVBEGoQBCADIA5PckUEQCAGIAVBEGogBxACQQF0aiIALQAAIQIgBUEQaiAALQABEAEgAyACOgAAIANBAWohAwwBCwsDQCADIA5JBEAgBiAFQRBqIAcQAkEBdGoiAC0AACECIAVBEGogAC0AARABIAMgAjoAACADQQFqIQMMAQsLIAFBbCAFQdgAahAKIAVBQGsQCnEgBUEoahAKcSAFQRBqEApxGyEJDAELQWwhCQsgBUHwAGokACAJC8oCAQR/IwBBIGsiBSQAIAUgBBAOIAUtAAIhByAFQQhqIAIgAxAGIgIQA0UEQCAEQQRqIQIgACABaiIDQX1qIQQDQCAFQQhqEAQgACAET3JFBEAgAiAFQQhqIAcQAkEBdGoiBi0AACEIIAVBCGogBi0AARABIAAgCDoAACACIAVBCGogBxACQQF0aiIGLQAAIQggBUEIaiAGLQABEAEgACAIOgABIABBAmohAAwBCwsDQCAFQQhqEAQgACADT3JFBEAgAiAFQQhqIAcQAkEBdGoiBC0AACEGIAVBCGogBC0AARABIAAgBjoAACAAQQFqIQAMAQsLA0AgACADT0UEQCACIAVBCGogBxACQQF0aiIELQAAIQYgBUEIaiAELQABEAEgACAGOgAAIABBAWohAAwBCwsgAUFsIAVBCGoQChshAgsgBUEgaiQAIAILtgMBCX8jAEEQayIGJAAgBkEANgIMIAZBADYCCEFUIQQCQAJAIANBQGsiDCADIAZBCGogBkEMaiABIAIQMSICEAMNACAGQQRqIAAQDiAGKAIMIgcgBi0ABEEBaksNASAAQQRqIQogBkEAOgAFIAYgBzoABiAAIAYoAgQ2AgAgB0EBaiEJQQEhBANAIAQgCUkEQCADIARBAnRqIgEoAgAhACABIAU2AgAgACAEQX9qdCAFaiEFIARBAWohBAwBCwsgB0EBaiEHQQAhBSAGKAIIIQkDQCAFIAlGDQEgAyAFIAxqLQAAIgRBAnRqIgBBASAEdEEBdSILIAAoAgAiAWoiADYCACAHIARrIQhBACEEAkAgC0EDTQRAA0AgBCALRg0CIAogASAEakEBdGoiACAIOgABIAAgBToAACAEQQFqIQQMAAALAAsDQCABIABPDQEgCiABQQF0aiIEIAg6AAEgBCAFOgAAIAQgCDoAAyAEIAU6AAIgBCAIOgAFIAQgBToABCAEIAg6AAcgBCAFOgAGIAFBBGohAQwAAAsACyAFQQFqIQUMAAALAAsgAiEECyAGQRBqJAAgBAutAQECfwJAQYQgKAIAIABHIAAoAgBBAXYiAyABa0F4aiICQXhxQQhHcgR/IAIFIAMQJ0UNASACQQhqC0EQSQ0AIAAgACgCACICQQFxIAAgAWpBD2pBeHEiASAAa0EBdHI2AgAgASAANgIEIAEgASgCAEEBcSAAIAJBAXZqIAFrIgJBAXRyNgIAQYQgIAEgAkH/////B3FqQQRqQYQgKAIAIABGGyABNgIAIAEQJQsLygIBBX8CQAJAAkAgAEEIIABBCEsbZ0EfcyAAaUEBR2oiAUEESSAAIAF2cg0AIAFBAnRB/B5qKAIAIgJFDQADQCACQXhqIgMoAgBBAXZBeGoiBSAATwRAIAIgBUEIIAVBCEsbZ0Efc0ECdEGAH2oiASgCAEYEQCABIAIoAgQ2AgALDAMLIARBHksNASAEQQFqIQQgAigCBCICDQALC0EAIQMgAUEgTw0BA0AgAUECdEGAH2ooAgAiAkUEQCABQR5LIQIgAUEBaiEBIAJFDQEMAwsLIAIgAkF4aiIDKAIAQQF2QXhqIgFBCCABQQhLG2dBH3NBAnRBgB9qIgEoAgBGBEAgASACKAIENgIACwsgAigCACIBBEAgASACKAIENgIECyACKAIEIgEEQCABIAIoAgA2AgALIAMgAygCAEEBcjYCACADIAAQNwsgAwvhCwINfwV+IwBB8ABrIgckACAHIAAoAvDhASIINgJcIAEgAmohDSAIIAAoAoDiAWohDwJAAkAgBUUEQCABIQQMAQsgACgCxOABIRAgACgCwOABIREgACgCvOABIQ4gAEEBNgKM4QFBACEIA0AgCEEDRwRAIAcgCEECdCICaiAAIAJqQazQAWooAgA2AkQgCEEBaiEIDAELC0FsIQwgB0EYaiADIAQQBhADDQEgB0EsaiAHQRhqIAAoAgAQEyAHQTRqIAdBGGogACgCCBATIAdBPGogB0EYaiAAKAIEEBMgDUFgaiESIAEhBEEAIQwDQCAHKAIwIAcoAixBA3RqKQIAIhRCEIinQf8BcSEIIAcoAkAgBygCPEEDdGopAgAiFUIQiKdB/wFxIQsgBygCOCAHKAI0QQN0aikCACIWQiCIpyEJIBVCIIghFyAUQiCIpyECAkAgFkIQiKdB/wFxIgNBAk8EQAJAIAZFIANBGUlyRQRAIAkgB0EYaiADQSAgBygCHGsiCiAKIANLGyIKEAUgAyAKayIDdGohCSAHQRhqEAQaIANFDQEgB0EYaiADEAUgCWohCQwBCyAHQRhqIAMQBSAJaiEJIAdBGGoQBBoLIAcpAkQhGCAHIAk2AkQgByAYNwNIDAELAkAgA0UEQCACBEAgBygCRCEJDAMLIAcoAkghCQwBCwJAAkAgB0EYakEBEAUgCSACRWpqIgNBA0YEQCAHKAJEQX9qIgMgA0VqIQkMAQsgA0ECdCAHaigCRCIJIAlFaiEJIANBAUYNAQsgByAHKAJINgJMCwsgByAHKAJENgJIIAcgCTYCRAsgF6chAyALBEAgB0EYaiALEAUgA2ohAwsgCCALakEUTwRAIAdBGGoQBBoLIAgEQCAHQRhqIAgQBSACaiECCyAHQRhqEAQaIAcgB0EYaiAUQhiIp0H/AXEQCCAUp0H//wNxajYCLCAHIAdBGGogFUIYiKdB/wFxEAggFadB//8DcWo2AjwgB0EYahAEGiAHIAdBGGogFkIYiKdB/wFxEAggFqdB//8DcWo2AjQgByACNgJgIAcoAlwhCiAHIAk2AmggByADNgJkAkACQAJAIAQgAiADaiILaiASSw0AIAIgCmoiEyAPSw0AIA0gBGsgC0Egak8NAQsgByAHKQNoNwMQIAcgBykDYDcDCCAEIA0gB0EIaiAHQdwAaiAPIA4gESAQEB4hCwwBCyACIARqIQggBCAKEAcgAkERTwRAIARBEGohAgNAIAIgCkEQaiIKEAcgAkEQaiICIAhJDQALCyAIIAlrIQIgByATNgJcIAkgCCAOa0sEQCAJIAggEWtLBEBBbCELDAILIBAgAiAOayICaiIKIANqIBBNBEAgCCAKIAMQDxoMAgsgCCAKQQAgAmsQDyEIIAcgAiADaiIDNgJkIAggAmshCCAOIQILIAlBEE8EQCADIAhqIQMDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALDAELAkAgCUEHTQRAIAggAi0AADoAACAIIAItAAE6AAEgCCACLQACOgACIAggAi0AAzoAAyAIQQRqIAIgCUECdCIDQcAeaigCAGoiAhAXIAIgA0HgHmooAgBrIQIgBygCZCEDDAELIAggAhAMCyADQQlJDQAgAyAIaiEDIAhBCGoiCCACQQhqIgJrQQ9MBEADQCAIIAIQDCACQQhqIQIgCEEIaiIIIANJDQAMAgALAAsDQCAIIAIQByACQRBqIQIgCEEQaiIIIANJDQALCyAHQRhqEAQaIAsgDCALEAMiAhshDCAEIAQgC2ogAhshBCAFQX9qIgUNAAsgDBADDQFBbCEMIAdBGGoQBEECSQ0BQQAhCANAIAhBA0cEQCAAIAhBAnQiAmpBrNABaiACIAdqKAJENgIAIAhBAWohCAwBCwsgBygCXCEIC0G6fyEMIA8gCGsiACANIARrSw0AIAQEfyAEIAggABALIABqBUEACyABayEMCyAHQfAAaiQAIAwLkRcCFn8FfiMAQdABayIHJAAgByAAKALw4QEiCDYCvAEgASACaiESIAggACgCgOIBaiETAkACQCAFRQRAIAEhAwwBCyAAKALE4AEhESAAKALA4AEhFSAAKAK84AEhDyAAQQE2AozhAUEAIQgDQCAIQQNHBEAgByAIQQJ0IgJqIAAgAmpBrNABaigCADYCVCAIQQFqIQgMAQsLIAcgETYCZCAHIA82AmAgByABIA9rNgJoQWwhECAHQShqIAMgBBAGEAMNASAFQQQgBUEESBshFyAHQTxqIAdBKGogACgCABATIAdBxABqIAdBKGogACgCCBATIAdBzABqIAdB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IAdB0AFqJAAgEAslACAAQgA3AgAgAEEAOwEIIABBADoACyAAIAE2AgwgACACOgAKC7QFAQN/IwBBMGsiBCQAIABB/wFqIgVBfWohBgJAIAMvAQIEQCAEQRhqIAEgAhAGIgIQAw0BIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahASOgAAIAMgBEEIaiAEQRhqEBI6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0FIAEgBEEQaiAEQRhqEBI6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBSABIARBCGogBEEYahASOgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEjoAACABIAJqIABrIQIMAwsgAyAEQRBqIARBGGoQEjoAAiADIARBCGogBEEYahASOgADIANBBGohAwwAAAsACyAEQRhqIAEgAhAGIgIQAw0AIARBEGogBEEYaiADEBwgBEEIaiAEQRhqIAMQHCAAIQMDQAJAIARBGGoQBCADIAZPckUEQCADIARBEGogBEEYahAROgAAIAMgBEEIaiAEQRhqEBE6AAEgBEEYahAERQ0BIANBAmohAwsgBUF+aiEFAn8DQEG6fyECIAMiASAFSw0EIAEgBEEQaiAEQRhqEBE6AAAgAUEBaiEDIARBGGoQBEEDRgRAQQIhAiAEQQhqDAILIAMgBUsNBCABIARBCGogBEEYahAROgABIAFBAmohA0EDIQIgBEEYahAEQQNHDQALIARBEGoLIQUgAyAFIARBGGoQEToAACABIAJqIABrIQIMAgsgAyAEQRBqIARBGGoQEToAAiADIARBCGogBEEYahAROgADIANBBGohAwwAAAsACyAEQTBqJAAgAgtpAQF/An8CQAJAIAJBB00NACABKAAAQbfIwuF+Rw0AIAAgASgABDYCmOIBQWIgAEEQaiABIAIQPiIDEAMNAhogAEKBgICAEDcDiOEBIAAgASADaiACIANrECoMAQsgACABIAIQKgtBAAsLrQMBBn8jAEGAAWsiAyQAQWIhCAJAIAJBCUkNACAAQZjQAGogAUEIaiIEIAJBeGogAEGY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wOABCwutAgIEfwF+IwBBQGoiBCQAAkACQCACQQhJDQAgASgAAEFwcUHQ1LTCAUcNACABIAIQIiEBIABCADcDCCAAQQA2AgQgACABNgIADAELIARBGGogASACEC0iAxADBEAgACADEBoMAQsgAwRAIABBuH8QGgwBCyACIAQoAjAiA2shAiABIANqIQMDQAJAIAAgAyACIARBCGoQLCIFEAMEfyAFBSACIAVBA2oiBU8NAUG4fwsQGgwCCyAGQQFqIQYgAiAFayECIAMgBWohAyAEKAIMRQ0ACyAEKAI4BEAgAkEDTQRAIABBuH8QGgwCCyADQQRqIQMLIAQoAighAiAEKQMYIQcgAEEANgIEIAAgAyABazYCACAAIAIgBmytIAcgB0J/URs3AwgLIARBQGskAAslAQF/IwBBEGsiAiQAIAIgACABEFEgAigCACEAIAJBEGokACAAC30BBH8jAEGQBGsiBCQAIARB/wE2AggCQCAEQRBqIARBCGogBEEMaiABIAIQFSIGEAMEQCAGIQUMAQtBVCEFIAQoAgwiB0EGSw0AIAMgBEEQaiAEKAIIIAcQQSIFEAMNACAAIAEgBmogAiAGayADEDwhBQsgBEGQBGokACAFC4cBAgJ/An5BABAWIQMCQANAIAEgA08EQAJAIAAoAABBcHFB0NS0wgFGBEAgACABECIiAhADRQ0BQn4PCyAAIAEQVSIEQn1WDQMgBCAFfCIFIARUIQJCfiEEIAINAyAAIAEQUiICEAMNAwsgASACayEBIAAgAmohAAwBCwtCfiAFIAEbIQQLIAQLPwIBfwF+IwBBMGsiAiQAAn5CfiACQQhqIAAgARAtDQAaQgAgAigCHEEBRg0AGiACKQMICyEDIAJBMGokACADC40BAQJ/IwBBMGsiASQAAkAgAEUNACAAKAKI4gENACABIABB/OEBaigCADYCKCABIAApAvThATcDICAAEDAgACgCqOIBIQIgASABKAIoNgIYIAEgASkDIDcDECACIAFBEGoQGyAAQQA2AqjiASABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALKgECfyMAQRBrIgAkACAAQQA2AgggAEIANwMAIAAQWCEBIABBEGokACABC4cBAQN/IwBBEGsiAiQAAkAgACgCAEUgACgCBEVzDQAgAiAAKAIINgIIIAIgACkCADcDAAJ/IAIoAgAiAQRAIAIoAghBqOMJIAERBQAMAQtBqOMJECgLIgFFDQAgASAAKQIANwL04QEgAUH84QFqIAAoAgg2AgAgARBZIAEhAwsgAkEQaiQAIAMLywEBAn8jAEEgayIBJAAgAEGBgIDAADYCtOIBIABBADYCiOIBIABBADYC7OEBIABCADcDkOIBIABBADYCpOMJIABBADYC3OIBIABCADcCzOIBIABBADYCvOIBIABBADYCxOABIABCADcCnOIBIABBpOIBakIANwIAIABBrOIBakEANgIAIAFCADcCECABQgA3AhggASABKQMYNwMIIAEgASkDEDcDACABKAIIQQh2QQFxIQIgAEEANgLg4gEgACACNgKM4gEgAUEgaiQAC3YBA38jAEEwayIBJAAgAARAIAEgAEHE0AFqIgIoAgA2AiggASAAKQK80AE3AyAgACgCACEDIAEgAigCADYCGCABIAApArzQATcDECADIAFBEGoQGyABIAEoAig2AgggASABKQMgNwMAIAAgARAbCyABQTBqJAALzAEBAX8gACABKAK00AE2ApjiASAAIAEoAgQiAjYCwOABIAAgAjYCvOABIAAgAiABKAIIaiICNgK44AEgACACNgLE4AEgASgCuNABBEAgAEKBgICAEDcDiOEBIAAgAUGk0ABqNgIMIAAgAUGUIGo2AgggACABQZwwajYCBCAAIAFBDGo2AgAgAEGs0AFqIAFBqNABaigCADYCACAAQbDQAWogAUGs0AFqKAIANgIAIABBtNABaiABQbDQAWooAgA2AgAPCyAAQgA3A4jhAQs7ACACRQRAQbp/DwsgBEUEQEFsDwsgAiAEEGAEQCAAIAEgAiADIAQgBRBhDwsgACABIAIgAyAEIAUQZQtGAQF/IwBBEGsiBSQAIAVBCGogBBAOAn8gBS0ACQRAIAAgASACIAMgBBAyDAELIAAgASACIAMgBBA0CyEAIAVBEGokACAACzQAIAAgAyAEIAUQNiIFEAMEQCAFDwsgBSAESQR/IAEgAiADIAVqIAQgBWsgABA1BUG4fwsLRgEBfyMAQRBrIgUkACAFQQhqIAQQDgJ/IAUtAAkEQCAAIAEgAiADIAQQYgwBCyAAIAEgAiADIAQQNQshACAFQRBqJAAgAAtZAQF/QQ8hAiABIABJBEAgAUEE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\";\nexport {\n ZSTDDecoder\n};\n//# sourceMappingURL=zstddec.js.map\n","import { CompressedTexture, CubeReflectionMapping } from \"three\";\nclass CompressedCubeTexture extends CompressedTexture {\n constructor(images, format, type) {\n super(void 0, images[0].width, images[0].height, format, type, CubeReflectionMapping);\n this.isCompressedCubeTexture = true;\n this.isCubeTexture = true;\n this.image = images;\n }\n}\nexport {\n CompressedCubeTexture\n};\n//# sourceMappingURL=CompressedCubeTexture.js.map\n","import { CompressedTexture, ClampToEdgeWrapping } from \"three\";\nclass CompressedArrayTexture extends CompressedTexture {\n constructor(mipmaps, width, height, depth, format, type) {\n super(mipmaps, width, height, format, type);\n this.isCompressedArrayTexture = true;\n this.image.depth = depth;\n this.wrapR = ClampToEdgeWrapping;\n }\n}\nexport {\n CompressedArrayTexture\n};\n//# sourceMappingURL=CompressedArrayTexture.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Loader, RGBAFormat, RGBA_ASTC_4x4_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT5_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, FileLoader, UnsignedByteType, CompressedTexture, LinearFilter, LinearMipmapLinearFilter, FloatType, HalfFloatType, DataTexture, RGFormat, RedFormat, RGBA_ASTC_6x6_Format } from \"three\";\nimport { WorkerPool } from \"../utils/WorkerPool.js\";\nimport { KHR_DF_FLAG_ALPHA_PREMULTIPLIED, read, VK_FORMAT_UNDEFINED, KHR_SUPERCOMPRESSION_ZSTD, KHR_SUPERCOMPRESSION_NONE, KHR_DF_PRIMARIES_BT709, KHR_DF_TRANSFER_SRGB, KHR_DF_PRIMARIES_DISPLAYP3, KHR_DF_PRIMARIES_UNSPECIFIED, VK_FORMAT_R32G32B32A32_SFLOAT, VK_FORMAT_R16G16B16A16_SFLOAT, VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_R8G8B8A8_SRGB, VK_FORMAT_R32G32_SFLOAT, VK_FORMAT_R16G16_SFLOAT, VK_FORMAT_R8G8_UNORM, VK_FORMAT_R8G8_SRGB, VK_FORMAT_R32_SFLOAT, VK_FORMAT_R16_SFLOAT, VK_FORMAT_R8_SRGB, VK_FORMAT_R8_UNORM, VK_FORMAT_ASTC_6x6_SRGB_BLOCK, VK_FORMAT_ASTC_6x6_UNORM_BLOCK } from \"../libs/ktx-parse.js\";\nimport { ZSTDDecoder } from \"../libs/zstddec.js\";\nimport { CompressedCubeTexture } from \"../_polyfill/CompressedCubeTexture.js\";\nimport { CompressedArrayTexture } from \"../_polyfill/CompressedArrayTexture.js\";\nimport { Data3DTexture } from \"../_polyfill/Data3DTexture.js\";\nconst LinearEncoding = 3e3;\nconst sRGBEncoding = 3001;\nconst NoColorSpace = \"\";\nconst DisplayP3ColorSpace = \"display-p3\";\nconst LinearDisplayP3ColorSpace = \"display-p3-linear\";\nconst LinearSRGBColorSpace = \"srgb-linear\";\nconst SRGBColorSpace = \"srgb\";\nconst _taskCache = /* @__PURE__ */ new WeakMap();\nlet _activeLoaders = 0;\nlet _zstd;\nconst KTX2Loader = /* @__PURE__ */ (() => {\n const _KTX2Loader = class extends Loader {\n constructor(manager) {\n super(manager);\n this.transcoderPath = \"\";\n this.transcoderBinary = null;\n this.transcoderPending = null;\n this.workerPool = new WorkerPool();\n this.workerSourceURL = \"\";\n this.workerConfig = null;\n if (typeof MSC_TRANSCODER !== \"undefined\") {\n console.warn(\n 'THREE.KTX2Loader: Please update to latest \"basis_transcoder\". \"msc_basis_transcoder\" is no longer supported in three.js r125+.'\n );\n }\n }\n setTranscoderPath(path) {\n this.transcoderPath = path;\n return this;\n }\n setWorkerLimit(num) {\n this.workerPool.setWorkerLimit(num);\n return this;\n }\n detectSupport(renderer) {\n this.workerConfig = {\n astcSupported: renderer.extensions.has(\"WEBGL_compressed_texture_astc\"),\n etc1Supported: renderer.extensions.has(\"WEBGL_compressed_texture_etc1\"),\n etc2Supported: renderer.extensions.has(\"WEBGL_compressed_texture_etc\"),\n dxtSupported: renderer.extensions.has(\"WEBGL_compressed_texture_s3tc\"),\n bptcSupported: renderer.extensions.has(\"EXT_texture_compression_bptc\"),\n pvrtcSupported: renderer.extensions.has(\"WEBGL_compressed_texture_pvrtc\") || renderer.extensions.has(\"WEBKIT_WEBGL_compressed_texture_pvrtc\")\n };\n if (renderer.capabilities.isWebGL2) {\n this.workerConfig.etc1Supported = false;\n }\n return this;\n }\n init() {\n if (!this.transcoderPending) {\n const jsLoader = new FileLoader(this.manager);\n jsLoader.setPath(this.transcoderPath);\n jsLoader.setWithCredentials(this.withCredentials);\n const jsContent = jsLoader.loadAsync(\"basis_transcoder.js\");\n const binaryLoader = new FileLoader(this.manager);\n binaryLoader.setPath(this.transcoderPath);\n binaryLoader.setResponseType(\"arraybuffer\");\n binaryLoader.setWithCredentials(this.withCredentials);\n const binaryContent = binaryLoader.loadAsync(\"basis_transcoder.wasm\");\n this.transcoderPending = Promise.all([jsContent, binaryContent]).then(([jsContent2, binaryContent2]) => {\n const fn = _KTX2Loader.BasisWorker.toString();\n const body = [\n \"/* constants */\",\n \"let _EngineFormat = \" + JSON.stringify(_KTX2Loader.EngineFormat),\n \"let _TranscoderFormat = \" + JSON.stringify(_KTX2Loader.TranscoderFormat),\n \"let _BasisFormat = \" + JSON.stringify(_KTX2Loader.BasisFormat),\n \"/* basis_transcoder.js */\",\n jsContent2,\n \"/* worker */\",\n fn.substring(fn.indexOf(\"{\") + 1, fn.lastIndexOf(\"}\"))\n ].join(\"\\n\");\n this.workerSourceURL = URL.createObjectURL(new Blob([body]));\n this.transcoderBinary = binaryContent2;\n this.workerPool.setWorkerCreator(() => {\n const worker = new Worker(this.workerSourceURL);\n const transcoderBinary = this.transcoderBinary.slice(0);\n worker.postMessage({ type: \"init\", config: this.workerConfig, transcoderBinary }, [transcoderBinary]);\n return worker;\n });\n });\n if (_activeLoaders > 0) {\n console.warn(\n \"THREE.KTX2Loader: Multiple active KTX2 loaders may cause performance issues. Use a single KTX2Loader instance, or call .dispose() on old instances.\"\n );\n }\n _activeLoaders++;\n }\n return this.transcoderPending;\n }\n load(url, onLoad, onProgress, onError) {\n if (this.workerConfig === null) {\n throw new Error(\"THREE.KTX2Loader: Missing initialization with `.detectSupport( renderer )`.\");\n }\n const loader = new FileLoader(this.manager);\n loader.setResponseType(\"arraybuffer\");\n loader.setWithCredentials(this.withCredentials);\n loader.load(\n url,\n (buffer) => {\n if (_taskCache.has(buffer)) {\n const cachedTask = _taskCache.get(buffer);\n return cachedTask.promise.then(onLoad).catch(onError);\n }\n this._createTexture(buffer).then((texture) => onLoad ? onLoad(texture) : null).catch(onError);\n },\n onProgress,\n onError\n );\n }\n _createTextureFrom(transcodeResult, container) {\n const { faces, width, height, format, type, error, dfdFlags } = transcodeResult;\n if (type === \"error\")\n return Promise.reject(error);\n let texture;\n if (container.faceCount === 6) {\n texture = new CompressedCubeTexture(faces, format, UnsignedByteType);\n } else {\n const mipmaps = faces[0].mipmaps;\n texture = container.layerCount > 1 ? new CompressedArrayTexture(mipmaps, width, height, container.layerCount, format, UnsignedByteType) : new CompressedTexture(mipmaps, width, height, format, UnsignedByteType);\n }\n texture.minFilter = faces[0].mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter;\n texture.magFilter = LinearFilter;\n texture.generateMipmaps = false;\n texture.needsUpdate = true;\n const colorSpace = parseColorSpace(container);\n if (\"colorSpace\" in texture)\n texture.colorSpace = colorSpace;\n else\n texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding;\n texture.premultiplyAlpha = !!(dfdFlags & KHR_DF_FLAG_ALPHA_PREMULTIPLIED);\n return texture;\n }\n /**\n * @param {ArrayBuffer} buffer\n * @param {object?} config\n * @return {Promise<CompressedTexture|CompressedArrayTexture|DataTexture|Data3DTexture>}\n */\n async _createTexture(buffer, config = {}) {\n const container = read(new Uint8Array(buffer));\n if (container.vkFormat !== VK_FORMAT_UNDEFINED) {\n return createRawTexture(container);\n }\n const taskConfig = config;\n const texturePending = this.init().then(() => {\n return this.workerPool.postMessage({ type: \"transcode\", buffer, taskConfig }, [buffer]);\n }).then((e) => this._createTextureFrom(e.data, container));\n _taskCache.set(buffer, { promise: texturePending });\n return texturePending;\n }\n dispose() {\n this.workerPool.dispose();\n if (this.workerSourceURL)\n URL.revokeObjectURL(this.workerSourceURL);\n _activeLoaders--;\n return this;\n }\n };\n let KTX2Loader2 = _KTX2Loader;\n /* CONSTANTS */\n __publicField(KTX2Loader2, \"BasisFormat\", {\n ETC1S: 0,\n UASTC_4x4: 1\n });\n __publicField(KTX2Loader2, \"TranscoderFormat\", {\n ETC1: 0,\n ETC2: 1,\n BC1: 2,\n BC3: 3,\n BC4: 4,\n BC5: 5,\n BC7_M6_OPAQUE_ONLY: 6,\n BC7_M5: 7,\n PVRTC1_4_RGB: 8,\n PVRTC1_4_RGBA: 9,\n ASTC_4x4: 10,\n ATC_RGB: 11,\n ATC_RGBA_INTERPOLATED_ALPHA: 12,\n RGBA32: 13,\n RGB565: 14,\n BGR565: 15,\n RGBA4444: 16\n });\n __publicField(KTX2Loader2, \"EngineFormat\", {\n RGBAFormat,\n RGBA_ASTC_4x4_Format,\n RGBA_BPTC_Format,\n RGBA_ETC2_EAC_Format,\n RGBA_PVRTC_4BPPV1_Format,\n RGBA_S3TC_DXT5_Format,\n RGB_ETC1_Format,\n RGB_ETC2_Format,\n RGB_PVRTC_4BPPV1_Format,\n RGB_S3TC_DXT1_Format\n });\n /* WEB WORKER */\n __publicField(KTX2Loader2, \"BasisWorker\", function() {\n let config;\n let transcoderPending;\n let BasisModule;\n const EngineFormat = _EngineFormat;\n const TranscoderFormat = _TranscoderFormat;\n const BasisFormat = _BasisFormat;\n self.addEventListener(\"message\", function(e) {\n const message = e.data;\n switch (message.type) {\n case \"init\":\n config = message.config;\n init(message.transcoderBinary);\n break;\n case \"transcode\":\n transcoderPending.then(() => {\n try {\n const { faces, buffers, width, height, hasAlpha, format, dfdFlags } = transcode(message.buffer);\n self.postMessage(\n { type: \"transcode\", id: message.id, faces, width, height, hasAlpha, format, dfdFlags },\n buffers\n );\n } catch (error) {\n console.error(error);\n self.postMessage({ type: \"error\", id: message.id, error: error.message });\n }\n });\n break;\n }\n });\n function init(wasmBinary) {\n transcoderPending = new Promise((resolve) => {\n BasisModule = { wasmBinary, onRuntimeInitialized: resolve };\n BASIS(BasisModule);\n }).then(() => {\n BasisModule.initializeBasis();\n if (BasisModule.KTX2File === void 0) {\n console.warn(\"THREE.KTX2Loader: Please update Basis Universal transcoder.\");\n }\n });\n }\n function transcode(buffer) {\n const ktx2File = new BasisModule.KTX2File(new Uint8Array(buffer));\n function cleanup() {\n ktx2File.close();\n ktx2File.delete();\n }\n if (!ktx2File.isValid()) {\n cleanup();\n throw new Error(\"THREE.KTX2Loader:\tInvalid or unsupported .ktx2 file\");\n }\n const basisFormat = ktx2File.isUASTC() ? BasisFormat.UASTC_4x4 : BasisFormat.ETC1S;\n const width = ktx2File.getWidth();\n const height = ktx2File.getHeight();\n const layerCount = ktx2File.getLayers() || 1;\n const levelCount = ktx2File.getLevels();\n const faceCount = ktx2File.getFaces();\n const hasAlpha = ktx2File.getHasAlpha();\n const dfdFlags = ktx2File.getDFDFlags();\n const { transcoderFormat, engineFormat } = getTranscoderFormat(basisFormat, width, height, hasAlpha);\n if (!width || !height || !levelCount) {\n cleanup();\n throw new Error(\"THREE.KTX2Loader:\tInvalid texture\");\n }\n if (!ktx2File.startTranscoding()) {\n cleanup();\n throw new Error(\"THREE.KTX2Loader: .startTranscoding failed\");\n }\n const faces = [];\n const buffers = [];\n for (let face = 0; face < faceCount; face++) {\n const mipmaps = [];\n for (let mip = 0; mip < levelCount; mip++) {\n const layerMips = [];\n let mipWidth, mipHeight;\n for (let layer = 0; layer < layerCount; layer++) {\n const levelInfo = ktx2File.getImageLevelInfo(mip, layer, face);\n if (face === 0 && mip === 0 && layer === 0 && (levelInfo.origWidth % 4 !== 0 || levelInfo.origHeight % 4 !== 0)) {\n console.warn(\"THREE.KTX2Loader: ETC1S and UASTC textures should use multiple-of-four dimensions.\");\n }\n if (levelCount > 1) {\n mipWidth = levelInfo.origWidth;\n mipHeight = levelInfo.origHeight;\n } else {\n mipWidth = levelInfo.width;\n mipHeight = levelInfo.height;\n }\n const dst = new Uint8Array(ktx2File.getImageTranscodedSizeInBytes(mip, layer, 0, transcoderFormat));\n const status = ktx2File.transcodeImage(dst, mip, layer, face, transcoderFormat, 0, -1, -1);\n if (!status) {\n cleanup();\n throw new Error(\"THREE.KTX2Loader: .transcodeImage failed.\");\n }\n layerMips.push(dst);\n }\n const mipData = concat(layerMips);\n mipmaps.push({ data: mipData, width: mipWidth, height: mipHeight });\n buffers.push(mipData.buffer);\n }\n faces.push({ mipmaps, width, height, format: engineFormat });\n }\n cleanup();\n return { faces, buffers, width, height, hasAlpha, format: engineFormat, dfdFlags };\n }\n const FORMAT_OPTIONS = [\n {\n if: \"astcSupported\",\n basisFormat: [BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ASTC_4x4, TranscoderFormat.ASTC_4x4],\n engineFormat: [EngineFormat.RGBA_ASTC_4x4_Format, EngineFormat.RGBA_ASTC_4x4_Format],\n priorityETC1S: Infinity,\n priorityUASTC: 1,\n needsPowerOfTwo: false\n },\n {\n if: \"bptcSupported\",\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.BC7_M5, TranscoderFormat.BC7_M5],\n engineFormat: [EngineFormat.RGBA_BPTC_Format, EngineFormat.RGBA_BPTC_Format],\n priorityETC1S: 3,\n priorityUASTC: 2,\n needsPowerOfTwo: false\n },\n {\n if: \"dxtSupported\",\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.BC1, TranscoderFormat.BC3],\n engineFormat: [EngineFormat.RGB_S3TC_DXT1_Format, EngineFormat.RGBA_S3TC_DXT5_Format],\n priorityETC1S: 4,\n priorityUASTC: 5,\n needsPowerOfTwo: false\n },\n {\n if: \"etc2Supported\",\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ETC1, TranscoderFormat.ETC2],\n engineFormat: [EngineFormat.RGB_ETC2_Format, EngineFormat.RGBA_ETC2_EAC_Format],\n priorityETC1S: 1,\n priorityUASTC: 3,\n needsPowerOfTwo: false\n },\n {\n if: \"etc1Supported\",\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ETC1],\n engineFormat: [EngineFormat.RGB_ETC1_Format],\n priorityETC1S: 2,\n priorityUASTC: 4,\n needsPowerOfTwo: false\n },\n {\n if: \"pvrtcSupported\",\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.PVRTC1_4_RGB, TranscoderFormat.PVRTC1_4_RGBA],\n engineFormat: [EngineFormat.RGB_PVRTC_4BPPV1_Format, EngineFormat.RGBA_PVRTC_4BPPV1_Format],\n priorityETC1S: 5,\n priorityUASTC: 6,\n needsPowerOfTwo: true\n }\n ];\n const ETC1S_OPTIONS = FORMAT_OPTIONS.sort(function(a, b) {\n return a.priorityETC1S - b.priorityETC1S;\n });\n const UASTC_OPTIONS = FORMAT_OPTIONS.sort(function(a, b) {\n return a.priorityUASTC - b.priorityUASTC;\n });\n function getTranscoderFormat(basisFormat, width, height, hasAlpha) {\n let transcoderFormat;\n let engineFormat;\n const options = basisFormat === BasisFormat.ETC1S ? ETC1S_OPTIONS : UASTC_OPTIONS;\n for (let i = 0; i < options.length; i++) {\n const opt = options[i];\n if (!config[opt.if])\n continue;\n if (!opt.basisFormat.includes(basisFormat))\n continue;\n if (hasAlpha && opt.transcoderFormat.length < 2)\n continue;\n if (opt.needsPowerOfTwo && !(isPowerOfTwo(width) && isPowerOfTwo(height)))\n continue;\n transcoderFormat = opt.transcoderFormat[hasAlpha ? 1 : 0];\n engineFormat = opt.engineFormat[hasAlpha ? 1 : 0];\n return { transcoderFormat, engineFormat };\n }\n console.warn(\"THREE.KTX2Loader: No suitable compressed texture format found. Decoding to RGBA32.\");\n transcoderFormat = TranscoderFormat.RGBA32;\n engineFormat = EngineFormat.RGBAFormat;\n return { transcoderFormat, engineFormat };\n }\n function isPowerOfTwo(value) {\n if (value <= 2)\n return true;\n return (value & value - 1) === 0 && value !== 0;\n }\n function concat(arrays) {\n if (arrays.length === 1)\n return arrays[0];\n let totalByteLength = 0;\n for (let i = 0; i < arrays.length; i++) {\n const array = arrays[i];\n totalByteLength += array.byteLength;\n }\n const result = new Uint8Array(totalByteLength);\n let byteOffset = 0;\n for (let i = 0; i < arrays.length; i++) {\n const array = arrays[i];\n result.set(array, byteOffset);\n byteOffset += array.byteLength;\n }\n return result;\n }\n });\n return KTX2Loader2;\n})();\nconst UNCOMPRESSED_FORMATS = /* @__PURE__ */ new Set([RGBAFormat, RGFormat, RedFormat]);\nconst FORMAT_MAP = {\n [VK_FORMAT_R32G32B32A32_SFLOAT]: RGBAFormat,\n [VK_FORMAT_R16G16B16A16_SFLOAT]: RGBAFormat,\n [VK_FORMAT_R8G8B8A8_UNORM]: RGBAFormat,\n [VK_FORMAT_R8G8B8A8_SRGB]: RGBAFormat,\n [VK_FORMAT_R32G32_SFLOAT]: RGFormat,\n [VK_FORMAT_R16G16_SFLOAT]: RGFormat,\n [VK_FORMAT_R8G8_UNORM]: RGFormat,\n [VK_FORMAT_R8G8_SRGB]: RGFormat,\n [VK_FORMAT_R32_SFLOAT]: RedFormat,\n [VK_FORMAT_R16_SFLOAT]: RedFormat,\n [VK_FORMAT_R8_SRGB]: RedFormat,\n [VK_FORMAT_R8_UNORM]: RedFormat,\n [VK_FORMAT_ASTC_6x6_SRGB_BLOCK]: RGBA_ASTC_6x6_Format,\n [VK_FORMAT_ASTC_6x6_UNORM_BLOCK]: RGBA_ASTC_6x6_Format\n};\nconst TYPE_MAP = {\n [VK_FORMAT_R32G32B32A32_SFLOAT]: FloatType,\n [VK_FORMAT_R16G16B16A16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8G8B8A8_UNORM]: UnsignedByteType,\n [VK_FORMAT_R8G8B8A8_SRGB]: UnsignedByteType,\n [VK_FORMAT_R32G32_SFLOAT]: FloatType,\n [VK_FORMAT_R16G16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8G8_UNORM]: UnsignedByteType,\n [VK_FORMAT_R8G8_SRGB]: UnsignedByteType,\n [VK_FORMAT_R32_SFLOAT]: FloatType,\n [VK_FORMAT_R16_SFLOAT]: HalfFloatType,\n [VK_FORMAT_R8_SRGB]: UnsignedByteType,\n [VK_FORMAT_R8_UNORM]: UnsignedByteType,\n [VK_FORMAT_ASTC_6x6_SRGB_BLOCK]: UnsignedByteType,\n [VK_FORMAT_ASTC_6x6_UNORM_BLOCK]: UnsignedByteType\n};\nasync function createRawTexture(container) {\n const { vkFormat } = container;\n if (FORMAT_MAP[vkFormat] === void 0) {\n throw new Error(\"THREE.KTX2Loader: Unsupported vkFormat.\");\n }\n let zstd;\n if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD) {\n if (!_zstd) {\n _zstd = new Promise(async (resolve) => {\n const zstd2 = new ZSTDDecoder();\n await zstd2.init();\n resolve(zstd2);\n });\n }\n zstd = await _zstd;\n }\n const mipmaps = [];\n for (let levelIndex = 0; levelIndex < container.levels.length; levelIndex++) {\n const levelWidth = Math.max(1, container.pixelWidth >> levelIndex);\n const levelHeight = Math.max(1, container.pixelHeight >> levelIndex);\n const levelDepth = container.pixelDepth ? Math.max(1, container.pixelDepth >> levelIndex) : 0;\n const level = container.levels[levelIndex];\n let levelData;\n if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_NONE) {\n levelData = level.levelData;\n } else if (container.supercompressionScheme === KHR_SUPERCOMPRESSION_ZSTD) {\n levelData = zstd.decode(level.levelData, level.uncompressedByteLength);\n } else {\n throw new Error(\"THREE.KTX2Loader: Unsupported supercompressionScheme.\");\n }\n let data;\n if (TYPE_MAP[vkFormat] === FloatType) {\n data = new Float32Array(\n levelData.buffer,\n levelData.byteOffset,\n levelData.byteLength / Float32Array.BYTES_PER_ELEMENT\n );\n } else if (TYPE_MAP[vkFormat] === HalfFloatType) {\n data = new Uint16Array(\n levelData.buffer,\n levelData.byteOffset,\n levelData.byteLength / Uint16Array.BYTES_PER_ELEMENT\n );\n } else {\n data = levelData;\n }\n mipmaps.push({\n data,\n width: levelWidth,\n height: levelHeight,\n depth: levelDepth\n });\n }\n let texture;\n if (UNCOMPRESSED_FORMATS.has(FORMAT_MAP[vkFormat])) {\n texture = container.pixelDepth === 0 ? new DataTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight) : new Data3DTexture(mipmaps[0].data, container.pixelWidth, container.pixelHeight, container.pixelDepth);\n } else {\n if (container.pixelDepth > 0)\n throw new Error(\"THREE.KTX2Loader: Unsupported pixelDepth.\");\n texture = new CompressedTexture(mipmaps, container.pixelWidth, container.pixelHeight);\n }\n texture.mipmaps = mipmaps;\n texture.type = TYPE_MAP[vkFormat];\n texture.format = FORMAT_MAP[vkFormat];\n texture.needsUpdate = true;\n const colorSpace = parseColorSpace(container);\n if (\"colorSpace\" in texture)\n texture.colorSpace = colorSpace;\n else\n texture.encoding = colorSpace === SRGBColorSpace ? sRGBEncoding : LinearEncoding;\n return Promise.resolve(texture);\n}\nfunction parseColorSpace(container) {\n const dfd = container.dataFormatDescriptor[0];\n if (dfd.colorPrimaries === KHR_DF_PRIMARIES_BT709) {\n return dfd.transferFunction === KHR_DF_TRANSFER_SRGB ? SRGBColorSpace : LinearSRGBColorSpace;\n } else if (dfd.colorPrimaries === KHR_DF_PRIMARIES_DISPLAYP3) {\n return dfd.transferFunction === KHR_DF_TRANSFER_SRGB ? DisplayP3ColorSpace : LinearDisplayP3ColorSpace;\n } else if (dfd.colorPrimaries === KHR_DF_PRIMARIES_UNSPECIFIED) {\n return NoColorSpace;\n } else {\n console.warn(`THREE.KTX2Loader: Unsupported color primaries, \"${dfd.colorPrimaries}\"`);\n return NoColorSpace;\n }\n}\nexport {\n KTX2Loader\n};\n//# sourceMappingURL=KTX2Loader.js.map\n","const lottie = /* @__PURE__ */ (() => {\n if (typeof navigator === \"undefined\" || navigator.product === \"ReactNative\" || typeof document === \"undefined\" || typeof document.getElementsByTagName !== \"function\" || typeof document.createElement !== \"function\" || typeof CanvasRenderingContext2D === \"undefined\")\n return {};\n const svgNS = \"http://www.w3.org/2000/svg\";\n let locationHref = \"\";\n let _useWebWorker = false;\n const initialDefaultFrame = -999999;\n const setWebWorker = (flag) => {\n _useWebWorker = !!flag;\n };\n const getWebWorker = () => _useWebWorker;\n const setLocationHref = (value) => {\n locationHref = value;\n };\n const getLocationHref = () => locationHref;\n function createTag(type) {\n return document.createElement(type);\n }\n function extendPrototype(sources, destination) {\n var i;\n var len = sources.length;\n var sourcePrototype;\n for (i = 0; i < len; i += 1) {\n sourcePrototype = sources[i].prototype;\n for (var attr in sourcePrototype) {\n if (Object.prototype.hasOwnProperty.call(sourcePrototype, attr))\n destination.prototype[attr] = sourcePrototype[attr];\n }\n }\n }\n function getDescriptor(object, prop) {\n return Object.getOwnPropertyDescriptor(object, prop);\n }\n function createProxyFunction(prototype) {\n function ProxyFunction() {\n }\n ProxyFunction.prototype = prototype;\n return ProxyFunction;\n }\n const audioControllerFactory = function() {\n function AudioController(audioFactory) {\n this.audios = [];\n this.audioFactory = audioFactory;\n this._volume = 1;\n this._isMuted = false;\n }\n AudioController.prototype = {\n addAudio: function(audio) {\n this.audios.push(audio);\n },\n pause: function() {\n var i;\n var len = this.audios.length;\n for (i = 0; i < len; i += 1) {\n this.audios[i].pause();\n }\n },\n resume: function() {\n var i;\n var len = this.audios.length;\n for (i = 0; i < len; i += 1) {\n this.audios[i].resume();\n }\n },\n setRate: function(rateValue) {\n var i;\n var len = this.audios.length;\n for (i = 0; i < len; i += 1) {\n this.audios[i].setRate(rateValue);\n }\n },\n createAudio: function(assetPath) {\n if (this.audioFactory) {\n return this.audioFactory(assetPath);\n }\n if (window.Howl) {\n return new window.Howl({\n src: [assetPath]\n });\n }\n return {\n isPlaying: false,\n play: function() {\n this.isPlaying = true;\n },\n seek: function() {\n this.isPlaying = false;\n },\n playing: function() {\n },\n rate: function() {\n },\n setVolume: function() {\n }\n };\n },\n setAudioFactory: function(audioFactory) {\n this.audioFactory = audioFactory;\n },\n setVolume: function(value) {\n this._volume = value;\n this._updateVolume();\n },\n mute: function() {\n this._isMuted = true;\n this._updateVolume();\n },\n unmute: function() {\n this._isMuted = false;\n this._updateVolume();\n },\n getVolume: function() {\n return this._volume;\n },\n _updateVolume: function() {\n var i;\n var len = this.audios.length;\n for (i = 0; i < len; i += 1) {\n this.audios[i].volume(this._volume * (this._isMuted ? 0 : 1));\n }\n }\n };\n return function() {\n return new AudioController();\n };\n }();\n const createTypedArray = function() {\n function createRegularArray(type, len) {\n var i = 0;\n var arr = [];\n var value;\n switch (type) {\n case \"int16\":\n case \"uint8c\":\n value = 1;\n break;\n default:\n value = 1.1;\n break;\n }\n for (i = 0; i < len; i += 1) {\n arr.push(value);\n }\n return arr;\n }\n function createTypedArrayFactory(type, len) {\n if (type === \"float32\") {\n return new Float32Array(len);\n }\n if (type === \"int16\") {\n return new Int16Array(len);\n }\n if (type === \"uint8c\") {\n return new Uint8ClampedArray(len);\n }\n return createRegularArray(type, len);\n }\n if (typeof Uint8ClampedArray === \"function\" && typeof Float32Array === \"function\") {\n return createTypedArrayFactory;\n }\n return createRegularArray;\n }();\n function createSizedArray(len) {\n return Array.apply(null, { length: len });\n }\n let subframeEnabled = true;\n let expressionsPlugin = null;\n let idPrefix$1 = \"\";\n const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent);\n const bmPow = Math.pow;\n const bmSqrt = Math.sqrt;\n const bmFloor = Math.floor;\n const bmMin = Math.min;\n const BMMath = {};\n (function() {\n var propertyNames = [\n \"abs\",\n \"acos\",\n \"acosh\",\n \"asin\",\n \"asinh\",\n \"atan\",\n \"atanh\",\n \"atan2\",\n \"ceil\",\n \"cbrt\",\n \"expm1\",\n \"clz32\",\n \"cos\",\n \"cosh\",\n \"exp\",\n \"floor\",\n \"fround\",\n \"hypot\",\n \"imul\",\n \"log\",\n \"log1p\",\n \"log2\",\n \"log10\",\n \"max\",\n \"min\",\n \"pow\",\n \"random\",\n \"round\",\n \"sign\",\n \"sin\",\n \"sinh\",\n \"sqrt\",\n \"tan\",\n \"tanh\",\n \"trunc\",\n \"E\",\n \"LN10\",\n \"LN2\",\n \"LOG10E\",\n \"LOG2E\",\n \"PI\",\n \"SQRT1_2\",\n \"SQRT2\"\n ];\n var i;\n var len = propertyNames.length;\n for (i = 0; i < len; i += 1) {\n BMMath[propertyNames[i]] = Math[propertyNames[i]];\n }\n })();\n BMMath.random = Math.random;\n BMMath.abs = function(val) {\n var tOfVal = typeof val;\n if (tOfVal === \"object\" && val.length) {\n var absArr = createSizedArray(val.length);\n var i;\n var len = val.length;\n for (i = 0; i < len; i += 1) {\n absArr[i] = Math.abs(val[i]);\n }\n return absArr;\n }\n return Math.abs(val);\n };\n let defaultCurveSegments = 150;\n const degToRads = Math.PI / 180;\n const roundCorner = 0.5519;\n function BMEnterFrameEvent(type, currentTime, totalTime, frameMultiplier) {\n this.type = type;\n this.currentTime = currentTime;\n this.totalTime = totalTime;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n function BMCompleteEvent(type, frameMultiplier) {\n this.type = type;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n function BMCompleteLoopEvent(type, totalLoops, currentLoop, frameMultiplier) {\n this.type = type;\n this.currentLoop = currentLoop;\n this.totalLoops = totalLoops;\n this.direction = frameMultiplier < 0 ? -1 : 1;\n }\n function BMSegmentStartEvent(type, firstFrame, totalFrames) {\n this.type = type;\n this.firstFrame = firstFrame;\n this.totalFrames = totalFrames;\n }\n function BMDestroyEvent(type, target) {\n this.type = type;\n this.target = target;\n }\n function BMRenderFrameErrorEvent(nativeError, currentTime) {\n this.type = \"renderFrameError\";\n this.nativeError = nativeError;\n this.currentTime = currentTime;\n }\n function BMConfigErrorEvent(nativeError) {\n this.type = \"configError\";\n this.nativeError = nativeError;\n }\n const createElementID = function() {\n var _count = 0;\n return function createID() {\n _count += 1;\n return idPrefix$1 + \"__lottie_element_\" + _count;\n };\n }();\n function HSVtoRGB(h, s, v) {\n var r;\n var g;\n var b;\n var i;\n var f;\n var p;\n var q;\n var t;\n i = Math.floor(h * 6);\n f = h * 6 - i;\n p = v * (1 - s);\n q = v * (1 - f * s);\n t = v * (1 - (1 - f) * s);\n switch (i % 6) {\n case 0:\n r = v;\n g = t;\n b = p;\n break;\n case 1:\n r = q;\n g = v;\n b = p;\n break;\n case 2:\n r = p;\n g = v;\n b = t;\n break;\n case 3:\n r = p;\n g = q;\n b = v;\n break;\n case 4:\n r = t;\n g = p;\n b = v;\n break;\n case 5:\n r = v;\n g = p;\n b = q;\n break;\n }\n return [r, g, b];\n }\n function RGBtoHSV(r, g, b) {\n var max = Math.max(r, g, b);\n var min = Math.min(r, g, b);\n var d = max - min;\n var h;\n var s = max === 0 ? 0 : d / max;\n var v = max / 255;\n switch (max) {\n case min:\n h = 0;\n break;\n case r:\n h = g - b + d * (g < b ? 6 : 0);\n h /= 6 * d;\n break;\n case g:\n h = b - r + d * 2;\n h /= 6 * d;\n break;\n case b:\n h = r - g + d * 4;\n h /= 6 * d;\n break;\n }\n return [h, s, v];\n }\n function addSaturationToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[1] += offset;\n if (hsv[1] > 1) {\n hsv[1] = 1;\n } else if (hsv[1] <= 0) {\n hsv[1] = 0;\n }\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n function addBrightnessToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[2] += offset;\n if (hsv[2] > 1) {\n hsv[2] = 1;\n } else if (hsv[2] < 0) {\n hsv[2] = 0;\n }\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n function addHueToRGB(color, offset) {\n var hsv = RGBtoHSV(color[0] * 255, color[1] * 255, color[2] * 255);\n hsv[0] += offset / 360;\n if (hsv[0] > 1) {\n hsv[0] -= 1;\n } else if (hsv[0] < 0) {\n hsv[0] += 1;\n }\n return HSVtoRGB(hsv[0], hsv[1], hsv[2]);\n }\n (function() {\n var colorMap = [];\n var i;\n var hex;\n for (i = 0; i < 256; i += 1) {\n hex = i.toString(16);\n colorMap[i] = hex.length === 1 ? \"0\" + hex : hex;\n }\n return function(r, g, b) {\n if (r < 0) {\n r = 0;\n }\n if (g < 0) {\n g = 0;\n }\n if (b < 0) {\n b = 0;\n }\n return \"#\" + colorMap[r] + colorMap[g] + colorMap[b];\n };\n })();\n const setSubframeEnabled = (flag) => {\n subframeEnabled = !!flag;\n };\n const getSubframeEnabled = () => subframeEnabled;\n const setExpressionsPlugin = (value) => {\n expressionsPlugin = value;\n };\n const getExpressionsPlugin = () => expressionsPlugin;\n const setDefaultCurveSegments = (value) => {\n defaultCurveSegments = value;\n };\n const getDefaultCurveSegments = () => defaultCurveSegments;\n const setIdPrefix = (value) => {\n idPrefix$1 = value;\n };\n function createNS(type) {\n return document.createElementNS(svgNS, type);\n }\n const dataManager = function() {\n var _counterId = 1;\n var processes = [];\n var workerFn;\n var workerInstance;\n var workerProxy = {\n onmessage: function() {\n },\n postMessage: function(path) {\n workerFn({\n data: path\n });\n }\n };\n var _workerSelf = {\n postMessage: function(data) {\n workerProxy.onmessage({\n data\n });\n }\n };\n function createWorker(fn) {\n if (window.Worker && window.Blob && getWebWorker()) {\n var blob = new Blob([\"var _workerSelf = self; self.onmessage = \", fn.toString()], { type: \"text/javascript\" });\n var url = URL.createObjectURL(blob);\n return new Worker(url);\n }\n workerFn = fn;\n return workerProxy;\n }\n function setupWorker() {\n if (!workerInstance) {\n workerInstance = createWorker(function workerStart(e) {\n function dataFunctionManager() {\n function completeLayers(layers, comps) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n if (\"ks\" in layerData && !layerData.completed) {\n layerData.completed = true;\n if (layerData.tt) {\n layers[i - 1].td = layerData.tt;\n }\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k);\n } else {\n kLen = maskProps[j].pt.k.length;\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].s[0]);\n }\n if (maskProps[j].pt.k[k].e) {\n convertPathsToAbsoluteValues(maskProps[j].pt.k[k].e[0]);\n }\n }\n }\n }\n }\n if (layerData.ty === 0) {\n layerData.layers = findCompLayers(layerData.refId, comps);\n completeLayers(layerData.layers, comps);\n } else if (layerData.ty === 4) {\n completeShapes(layerData.shapes);\n } else if (layerData.ty === 5) {\n completeText(layerData);\n }\n }\n }\n }\n function completeChars(chars, assets) {\n if (chars) {\n var i = 0;\n var len = chars.length;\n for (i = 0; i < len; i += 1) {\n if (chars[i].t === 1) {\n chars[i].data.layers = findCompLayers(chars[i].data.refId, assets);\n completeLayers(chars[i].data.layers, assets);\n }\n }\n }\n }\n function findComp(id, comps) {\n var i = 0;\n var len = comps.length;\n while (i < len) {\n if (comps[i].id === id) {\n return comps[i];\n }\n i += 1;\n }\n return null;\n }\n function findCompLayers(id, comps) {\n var comp = findComp(id, comps);\n if (comp) {\n if (!comp.layers.__used) {\n comp.layers.__used = true;\n return comp.layers;\n }\n return JSON.parse(JSON.stringify(comp.layers));\n }\n return null;\n }\n function completeShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === \"sh\") {\n if (arr[i].ks.k.i) {\n convertPathsToAbsoluteValues(arr[i].ks.k);\n } else {\n jLen = arr[i].ks.k.length;\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].s[0]);\n }\n if (arr[i].ks.k[j].e) {\n convertPathsToAbsoluteValues(arr[i].ks.k[j].e[0]);\n }\n }\n }\n } else if (arr[i].ty === \"gr\") {\n completeShapes(arr[i].it);\n }\n }\n }\n function convertPathsToAbsoluteValues(path) {\n var i;\n var len = path.i.length;\n for (i = 0; i < len; i += 1) {\n path.i[i][0] += path.v[i][0];\n path.i[i][1] += path.v[i][1];\n path.o[i][0] += path.v[i][0];\n path.o[i][1] += path.v[i][1];\n }\n }\n function checkVersion(minimum, animVersionString) {\n var animVersion = animVersionString ? animVersionString.split(\".\") : [100, 100, 100];\n if (minimum[0] > animVersion[0]) {\n return true;\n }\n if (animVersion[0] > minimum[0]) {\n return false;\n }\n if (minimum[1] > animVersion[1]) {\n return true;\n }\n if (animVersion[1] > minimum[1]) {\n return false;\n }\n if (minimum[2] > animVersion[2]) {\n return true;\n }\n if (animVersion[2] > minimum[2]) {\n return false;\n }\n return null;\n }\n var checkText = function() {\n var minimumVersion = [4, 4, 14];\n function updateTextLayer(textLayer) {\n var documentData = textLayer.t.d;\n textLayer.t.d = {\n k: [\n {\n s: documentData,\n t: 0\n }\n ]\n };\n }\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n return function(animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n var checkChars = function() {\n var minimumVersion = [4, 7, 99];\n return function(animationData) {\n if (animationData.chars && !checkVersion(minimumVersion, animationData.v)) {\n var i;\n var len = animationData.chars.length;\n for (i = 0; i < len; i += 1) {\n var charData = animationData.chars[i];\n if (charData.data && charData.data.shapes) {\n completeShapes(charData.data.shapes);\n charData.data.ip = 0;\n charData.data.op = 99999;\n charData.data.st = 0;\n charData.data.sr = 1;\n charData.data.ks = {\n p: { k: [0, 0], a: 0 },\n s: { k: [100, 100], a: 0 },\n a: { k: [0, 0], a: 0 },\n r: { k: 0, a: 0 },\n o: { k: 100, a: 0 }\n };\n if (!animationData.chars[i].t) {\n charData.data.shapes.push({\n ty: \"no\"\n });\n charData.data.shapes[0].it.push({\n p: { k: [0, 0], a: 0 },\n s: { k: [100, 100], a: 0 },\n a: { k: [0, 0], a: 0 },\n r: { k: 0, a: 0 },\n o: { k: 100, a: 0 },\n sk: { k: 0, a: 0 },\n sa: { k: 0, a: 0 },\n ty: \"tr\"\n });\n }\n }\n }\n }\n };\n }();\n var checkPathProperties = function() {\n var minimumVersion = [5, 7, 15];\n function updateTextLayer(textLayer) {\n var pathData = textLayer.t.p;\n if (typeof pathData.a === \"number\") {\n pathData.a = {\n a: 0,\n k: pathData.a\n };\n }\n if (typeof pathData.p === \"number\") {\n pathData.p = {\n a: 0,\n k: pathData.p\n };\n }\n if (typeof pathData.r === \"number\") {\n pathData.r = {\n a: 0,\n k: pathData.r\n };\n }\n }\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 5) {\n updateTextLayer(layers[i]);\n }\n }\n }\n return function(animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n var checkColors = function() {\n var minimumVersion = [4, 1, 9];\n function iterateShapes(shapes) {\n var i;\n var len = shapes.length;\n var j;\n var jLen;\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === \"gr\") {\n iterateShapes(shapes[i].it);\n } else if (shapes[i].ty === \"fl\" || shapes[i].ty === \"st\") {\n if (shapes[i].c.k && shapes[i].c.k[0].i) {\n jLen = shapes[i].c.k.length;\n for (j = 0; j < jLen; j += 1) {\n if (shapes[i].c.k[j].s) {\n shapes[i].c.k[j].s[0] /= 255;\n shapes[i].c.k[j].s[1] /= 255;\n shapes[i].c.k[j].s[2] /= 255;\n shapes[i].c.k[j].s[3] /= 255;\n }\n if (shapes[i].c.k[j].e) {\n shapes[i].c.k[j].e[0] /= 255;\n shapes[i].c.k[j].e[1] /= 255;\n shapes[i].c.k[j].e[2] /= 255;\n shapes[i].c.k[j].e[3] /= 255;\n }\n }\n } else {\n shapes[i].c.k[0] /= 255;\n shapes[i].c.k[1] /= 255;\n shapes[i].c.k[2] /= 255;\n shapes[i].c.k[3] /= 255;\n }\n }\n }\n }\n function iterateLayers(layers) {\n var i;\n var len = layers.length;\n for (i = 0; i < len; i += 1) {\n if (layers[i].ty === 4) {\n iterateShapes(layers[i].shapes);\n }\n }\n }\n return function(animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n var checkShapes = function() {\n var minimumVersion = [4, 4, 18];\n function completeClosingShapes(arr) {\n var i;\n var len = arr.length;\n var j;\n var jLen;\n for (i = len - 1; i >= 0; i -= 1) {\n if (arr[i].ty === \"sh\") {\n if (arr[i].ks.k.i) {\n arr[i].ks.k.c = arr[i].closed;\n } else {\n jLen = arr[i].ks.k.length;\n for (j = 0; j < jLen; j += 1) {\n if (arr[i].ks.k[j].s) {\n arr[i].ks.k[j].s[0].c = arr[i].closed;\n }\n if (arr[i].ks.k[j].e) {\n arr[i].ks.k[j].e[0].c = arr[i].closed;\n }\n }\n }\n } else if (arr[i].ty === \"gr\") {\n completeClosingShapes(arr[i].it);\n }\n }\n }\n function iterateLayers(layers) {\n var layerData;\n var i;\n var len = layers.length;\n var j;\n var jLen;\n var k;\n var kLen;\n for (i = 0; i < len; i += 1) {\n layerData = layers[i];\n if (layerData.hasMask) {\n var maskProps = layerData.masksProperties;\n jLen = maskProps.length;\n for (j = 0; j < jLen; j += 1) {\n if (maskProps[j].pt.k.i) {\n maskProps[j].pt.k.c = maskProps[j].cl;\n } else {\n kLen = maskProps[j].pt.k.length;\n for (k = 0; k < kLen; k += 1) {\n if (maskProps[j].pt.k[k].s) {\n maskProps[j].pt.k[k].s[0].c = maskProps[j].cl;\n }\n if (maskProps[j].pt.k[k].e) {\n maskProps[j].pt.k[k].e[0].c = maskProps[j].cl;\n }\n }\n }\n }\n }\n if (layerData.ty === 4) {\n completeClosingShapes(layerData.shapes);\n }\n }\n }\n return function(animationData) {\n if (checkVersion(minimumVersion, animationData.v)) {\n iterateLayers(animationData.layers);\n if (animationData.assets) {\n var i;\n var len = animationData.assets.length;\n for (i = 0; i < len; i += 1) {\n if (animationData.assets[i].layers) {\n iterateLayers(animationData.assets[i].layers);\n }\n }\n }\n }\n };\n }();\n function completeData(animationData) {\n if (animationData.__complete) {\n return;\n }\n checkColors(animationData);\n checkText(animationData);\n checkChars(animationData);\n checkPathProperties(animationData);\n checkShapes(animationData);\n completeLayers(animationData.layers, animationData.assets);\n completeChars(animationData.chars, animationData.assets);\n animationData.__complete = true;\n }\n function completeText(data) {\n if (data.t.a.length === 0 && !(\"m\" in data.t.p))\n ;\n }\n var moduleOb = {};\n moduleOb.completeData = completeData;\n moduleOb.checkColors = checkColors;\n moduleOb.checkChars = checkChars;\n moduleOb.checkPathProperties = checkPathProperties;\n moduleOb.checkShapes = checkShapes;\n moduleOb.completeLayers = completeLayers;\n return moduleOb;\n }\n if (!_workerSelf.dataManager) {\n _workerSelf.dataManager = dataFunctionManager();\n }\n if (!_workerSelf.assetLoader) {\n _workerSelf.assetLoader = function() {\n function formatResponse(xhr) {\n var contentTypeHeader = xhr.getResponseHeader(\"content-type\");\n if (contentTypeHeader && xhr.responseType === \"json\" && contentTypeHeader.indexOf(\"json\") !== -1) {\n return xhr.response;\n }\n if (xhr.response && typeof xhr.response === \"object\") {\n return xhr.response;\n }\n if (xhr.response && typeof xhr.response === \"string\") {\n return JSON.parse(xhr.response);\n }\n if (xhr.responseText) {\n return JSON.parse(xhr.responseText);\n }\n return null;\n }\n function loadAsset(path, fullPath, callback, errorCallback) {\n var response;\n var xhr = new XMLHttpRequest();\n try {\n xhr.responseType = \"json\";\n } catch (err) {\n }\n xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n if (xhr.status === 200) {\n response = formatResponse(xhr);\n callback(response);\n } else {\n try {\n response = formatResponse(xhr);\n callback(response);\n } catch (err) {\n if (errorCallback) {\n errorCallback(err);\n }\n }\n }\n }\n };\n try {\n xhr.open(\"GET\", path, true);\n } catch (error) {\n xhr.open(\"GET\", fullPath + \"/\" + path, true);\n }\n xhr.send();\n }\n return {\n load: loadAsset\n };\n }();\n }\n if (e.data.type === \"loadAnimation\") {\n _workerSelf.assetLoader.load(\n e.data.path,\n e.data.fullPath,\n function(data) {\n _workerSelf.dataManager.completeData(data);\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: \"success\"\n });\n },\n function() {\n _workerSelf.postMessage({\n id: e.data.id,\n status: \"error\"\n });\n }\n );\n } else if (e.data.type === \"complete\") {\n var animation = e.data.animation;\n _workerSelf.dataManager.completeData(animation);\n _workerSelf.postMessage({\n id: e.data.id,\n payload: animation,\n status: \"success\"\n });\n } else if (e.data.type === \"loadData\") {\n _workerSelf.assetLoader.load(\n e.data.path,\n e.data.fullPath,\n function(data) {\n _workerSelf.postMessage({\n id: e.data.id,\n payload: data,\n status: \"success\"\n });\n },\n function() {\n _workerSelf.postMessage({\n id: e.data.id,\n status: \"error\"\n });\n }\n );\n }\n });\n workerInstance.onmessage = function(event) {\n var data = event.data;\n var id = data.id;\n var process = processes[id];\n processes[id] = null;\n if (data.status === \"success\") {\n process.onComplete(data.payload);\n } else if (process.onError) {\n process.onError();\n }\n };\n }\n }\n function createProcess(onComplete, onError) {\n _counterId += 1;\n var id = \"processId_\" + _counterId;\n processes[id] = {\n onComplete,\n onError\n };\n return id;\n }\n function loadAnimation2(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: \"loadAnimation\",\n path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId\n });\n }\n function loadData(path, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: \"loadData\",\n path,\n fullPath: window.location.origin + window.location.pathname,\n id: processId\n });\n }\n function completeAnimation(anim, onComplete, onError) {\n setupWorker();\n var processId = createProcess(onComplete, onError);\n workerInstance.postMessage({\n type: \"complete\",\n animation: anim,\n id: processId\n });\n }\n return {\n loadAnimation: loadAnimation2,\n loadData,\n completeAnimation\n };\n }();\n const ImagePreloader = function() {\n var proxyImage = function() {\n var canvas = createTag(\"canvas\");\n canvas.width = 1;\n canvas.height = 1;\n var ctx = canvas.getContext(\"2d\");\n ctx.fillStyle = \"rgba(0,0,0,0)\";\n ctx.fillRect(0, 0, 1, 1);\n return canvas;\n }();\n function imageLoaded() {\n this.loadedAssets += 1;\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n function footageLoaded() {\n this.loadedFootagesCount += 1;\n if (this.loadedAssets === this.totalImages && this.loadedFootagesCount === this.totalFootages) {\n if (this.imagesLoadedCb) {\n this.imagesLoadedCb(null);\n }\n }\n }\n function getAssetsPath(assetData, assetsPath, originalPath) {\n var path = \"\";\n if (assetData.e) {\n path = assetData.p;\n } else if (assetsPath) {\n var imagePath = assetData.p;\n if (imagePath.indexOf(\"images/\") !== -1) {\n imagePath = imagePath.split(\"/\")[1];\n }\n path = assetsPath + imagePath;\n } else {\n path = originalPath;\n path += assetData.u ? assetData.u : \"\";\n path += assetData.p;\n }\n return path;\n }\n function testImageLoaded(img) {\n var _count = 0;\n var intervalId = setInterval(\n function() {\n var box = img.getBBox();\n if (box.width || _count > 500) {\n this._imageLoaded();\n clearInterval(intervalId);\n }\n _count += 1;\n }.bind(this),\n 50\n );\n }\n function createImageData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createNS(\"image\");\n if (isSafari) {\n this.testImageLoaded(img);\n } else {\n img.addEventListener(\"load\", this._imageLoaded, false);\n }\n img.addEventListener(\n \"error\",\n function() {\n ob.img = proxyImage;\n this._imageLoaded();\n }.bind(this),\n false\n );\n img.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\", path);\n if (this._elementHelper.append) {\n this._elementHelper.append(img);\n } else {\n this._elementHelper.appendChild(img);\n }\n var ob = {\n img,\n assetData\n };\n return ob;\n }\n function createImgData(assetData) {\n var path = getAssetsPath(assetData, this.assetsPath, this.path);\n var img = createTag(\"img\");\n img.crossOrigin = \"anonymous\";\n img.addEventListener(\"load\", this._imageLoaded, false);\n img.addEventListener(\n \"error\",\n function() {\n ob.img = proxyImage;\n this._imageLoaded();\n }.bind(this),\n false\n );\n img.src = path;\n var ob = {\n img,\n assetData\n };\n return ob;\n }\n function createFootageData(data) {\n var ob = {\n assetData: data\n };\n var path = getAssetsPath(data, this.assetsPath, this.path);\n dataManager.loadData(\n path,\n function(footageData) {\n ob.img = footageData;\n this._footageLoaded();\n }.bind(this),\n function() {\n ob.img = {};\n this._footageLoaded();\n }.bind(this)\n );\n return ob;\n }\n function loadAssets(assets, cb) {\n this.imagesLoadedCb = cb;\n var i;\n var len = assets.length;\n for (i = 0; i < len; i += 1) {\n if (!assets[i].layers) {\n if (!assets[i].t || assets[i].t === \"seq\") {\n this.totalImages += 1;\n this.images.push(this._createImageData(assets[i]));\n } else if (assets[i].t === 3) {\n this.totalFootages += 1;\n this.images.push(this.createFootageData(assets[i]));\n }\n }\n }\n }\n function setPath(path) {\n this.path = path || \"\";\n }\n function setAssetsPath(path) {\n this.assetsPath = path || \"\";\n }\n function getAsset(assetData) {\n var i = 0;\n var len = this.images.length;\n while (i < len) {\n if (this.images[i].assetData === assetData) {\n return this.images[i].img;\n }\n i += 1;\n }\n return null;\n }\n function destroy() {\n this.imagesLoadedCb = null;\n this.images.length = 0;\n }\n function loadedImages() {\n return this.totalImages === this.loadedAssets;\n }\n function loadedFootages() {\n return this.totalFootages === this.loadedFootagesCount;\n }\n function setCacheType(type, elementHelper) {\n if (type === \"svg\") {\n this._elementHelper = elementHelper;\n this._createImageData = this.createImageData.bind(this);\n } else {\n this._createImageData = this.createImgData.bind(this);\n }\n }\n function ImagePreloaderFactory() {\n this._imageLoaded = imageLoaded.bind(this);\n this._footageLoaded = footageLoaded.bind(this);\n this.testImageLoaded = testImageLoaded.bind(this);\n this.createFootageData = createFootageData.bind(this);\n this.assetsPath = \"\";\n this.path = \"\";\n this.totalImages = 0;\n this.totalFootages = 0;\n this.loadedAssets = 0;\n this.loadedFootagesCount = 0;\n this.imagesLoadedCb = null;\n this.images = [];\n }\n ImagePreloaderFactory.prototype = {\n loadAssets,\n setAssetsPath,\n setPath,\n loadedImages,\n loadedFootages,\n destroy,\n getAsset,\n createImgData,\n createImageData,\n imageLoaded,\n footageLoaded,\n setCacheType\n };\n return ImagePreloaderFactory;\n }();\n function BaseEvent() {\n }\n BaseEvent.prototype = {\n triggerEvent: function(eventName, args) {\n if (this._cbs[eventName]) {\n var callbacks = this._cbs[eventName];\n for (var i = 0; i < callbacks.length; i += 1) {\n callbacks[i](args);\n }\n }\n },\n addEventListener: function(eventName, callback) {\n if (!this._cbs[eventName]) {\n this._cbs[eventName] = [];\n }\n this._cbs[eventName].push(callback);\n return function() {\n this.removeEventListener(eventName, callback);\n }.bind(this);\n },\n removeEventListener: function(eventName, callback) {\n if (!callback) {\n this._cbs[eventName] = null;\n } else if (this._cbs[eventName]) {\n var i = 0;\n var len = this._cbs[eventName].length;\n while (i < len) {\n if (this._cbs[eventName][i] === callback) {\n this._cbs[eventName].splice(i, 1);\n i -= 1;\n len -= 1;\n }\n i += 1;\n }\n if (!this._cbs[eventName].length) {\n this._cbs[eventName] = null;\n }\n }\n }\n };\n const markerParser = function() {\n function parsePayloadLines(payload) {\n var lines = payload.split(\"\\r\\n\");\n var keys = {};\n var line;\n var keysCount = 0;\n for (var i = 0; i < lines.length; i += 1) {\n line = lines[i].split(\":\");\n if (line.length === 2) {\n keys[line[0]] = line[1].trim();\n keysCount += 1;\n }\n }\n if (keysCount === 0) {\n throw new Error();\n }\n return keys;\n }\n return function(_markers) {\n var markers = [];\n for (var i = 0; i < _markers.length; i += 1) {\n var _marker = _markers[i];\n var markerData = {\n time: _marker.tm,\n duration: _marker.dr\n };\n try {\n markerData.payload = JSON.parse(_markers[i].cm);\n } catch (_) {\n try {\n markerData.payload = parsePayloadLines(_markers[i].cm);\n } catch (__) {\n markerData.payload = {\n name: _markers[i].cm\n };\n }\n }\n markers.push(markerData);\n }\n return markers;\n };\n }();\n const ProjectInterface = function() {\n function registerComposition(comp) {\n this.compositions.push(comp);\n }\n return function() {\n function _thisProjectFunction(name) {\n var i = 0;\n var len = this.compositions.length;\n while (i < len) {\n if (this.compositions[i].data && this.compositions[i].data.nm === name) {\n if (this.compositions[i].prepareFrame && this.compositions[i].data.xt) {\n this.compositions[i].prepareFrame(this.currentFrame);\n }\n return this.compositions[i].compInterface;\n }\n i += 1;\n }\n return null;\n }\n _thisProjectFunction.compositions = [];\n _thisProjectFunction.currentFrame = 0;\n _thisProjectFunction.registerComposition = registerComposition;\n return _thisProjectFunction;\n };\n }();\n const renderers = {};\n const registerRenderer = (key, value) => {\n renderers[key] = value;\n };\n function getRenderer(key) {\n return renderers[key];\n }\n const AnimationItem = function() {\n this._cbs = [];\n this.name = \"\";\n this.path = \"\";\n this.isLoaded = false;\n this.currentFrame = 0;\n this.currentRawFrame = 0;\n this.firstFrame = 0;\n this.totalFrames = 0;\n this.frameRate = 0;\n this.frameMult = 0;\n this.playSpeed = 1;\n this.playDirection = 1;\n this.playCount = 0;\n this.animationData = {};\n this.assets = [];\n this.isPaused = true;\n this.autoplay = false;\n this.loop = true;\n this.renderer = null;\n this.animationID = createElementID();\n this.assetsPath = \"\";\n this.timeCompleted = 0;\n this.segmentPos = 0;\n this.isSubframeEnabled = getSubframeEnabled();\n this.segments = [];\n this._idle = true;\n this._completedLoop = false;\n this.projectInterface = ProjectInterface();\n this.imagePreloader = new ImagePreloader();\n this.audioController = audioControllerFactory();\n this.markers = [];\n this.configAnimation = this.configAnimation.bind(this);\n this.onSetupError = this.onSetupError.bind(this);\n this.onSegmentComplete = this.onSegmentComplete.bind(this);\n this.drawnFrameEvent = new BMEnterFrameEvent(\"drawnFrame\", 0, 0, 0);\n };\n extendPrototype([BaseEvent], AnimationItem);\n AnimationItem.prototype.setParams = function(params) {\n if (params.wrapper || params.container) {\n this.wrapper = params.wrapper || params.container;\n }\n var animType = \"svg\";\n if (params.animType) {\n animType = params.animType;\n } else if (params.renderer) {\n animType = params.renderer;\n }\n const RendererClass = getRenderer(animType);\n this.renderer = new RendererClass(this, params.rendererSettings);\n this.imagePreloader.setCacheType(animType, this.renderer.globalData.defs);\n this.renderer.setProjectInterface(this.projectInterface);\n this.animType = animType;\n if (params.loop === \"\" || params.loop === null || params.loop === void 0 || params.loop === true) {\n this.loop = true;\n } else if (params.loop === false) {\n this.loop = false;\n } else {\n this.loop = parseInt(params.loop, 10);\n }\n this.autoplay = \"autoplay\" in params ? params.autoplay : true;\n this.name = params.name ? params.name : \"\";\n this.autoloadSegments = Object.prototype.hasOwnProperty.call(params, \"autoloadSegments\") ? params.autoloadSegments : true;\n this.assetsPath = params.assetsPath;\n this.initialSegment = params.initialSegment;\n if (params.audioFactory) {\n this.audioController.setAudioFactory(params.audioFactory);\n }\n if (params.animationData) {\n this.setupAnimation(params.animationData);\n } else if (params.path) {\n if (params.path.lastIndexOf(\"\\\\\") !== -1) {\n this.path = params.path.substr(0, params.path.lastIndexOf(\"\\\\\") + 1);\n } else {\n this.path = params.path.substr(0, params.path.lastIndexOf(\"/\") + 1);\n }\n this.fileName = params.path.substr(params.path.lastIndexOf(\"/\") + 1);\n this.fileName = this.fileName.substr(0, this.fileName.lastIndexOf(\".json\"));\n dataManager.loadAnimation(params.path, this.configAnimation, this.onSetupError);\n }\n };\n AnimationItem.prototype.onSetupError = function() {\n this.trigger(\"data_failed\");\n };\n AnimationItem.prototype.setupAnimation = function(data) {\n dataManager.completeAnimation(data, this.configAnimation);\n };\n AnimationItem.prototype.setData = function(wrapper, animationData) {\n if (animationData) {\n if (typeof animationData !== \"object\") {\n animationData = JSON.parse(animationData);\n }\n }\n var params = {\n wrapper,\n animationData\n };\n var wrapperAttributes = wrapper.attributes;\n params.path = wrapperAttributes.getNamedItem(\"data-animation-path\") ? wrapperAttributes.getNamedItem(\"data-animation-path\").value : wrapperAttributes.getNamedItem(\"data-bm-path\") ? wrapperAttributes.getNamedItem(\"data-bm-path\").value : wrapperAttributes.getNamedItem(\"bm-path\") ? wrapperAttributes.getNamedItem(\"bm-path\").value : \"\";\n params.animType = wrapperAttributes.getNamedItem(\"data-anim-type\") ? wrapperAttributes.getNamedItem(\"data-anim-type\").value : wrapperAttributes.getNamedItem(\"data-bm-type\") ? wrapperAttributes.getNamedItem(\"data-bm-type\").value : wrapperAttributes.getNamedItem(\"bm-type\") ? wrapperAttributes.getNamedItem(\"bm-type\").value : wrapperAttributes.getNamedItem(\"data-bm-renderer\") ? wrapperAttributes.getNamedItem(\"data-bm-renderer\").value : wrapperAttributes.getNamedItem(\"bm-renderer\") ? wrapperAttributes.getNamedItem(\"bm-renderer\").value : \"canvas\";\n var loop = wrapperAttributes.getNamedItem(\"data-anim-loop\") ? wrapperAttributes.getNamedItem(\"data-anim-loop\").value : wrapperAttributes.getNamedItem(\"data-bm-loop\") ? wrapperAttributes.getNamedItem(\"data-bm-loop\").value : wrapperAttributes.getNamedItem(\"bm-loop\") ? wrapperAttributes.getNamedItem(\"bm-loop\").value : \"\";\n if (loop === \"false\") {\n params.loop = false;\n } else if (loop === \"true\") {\n params.loop = true;\n } else if (loop !== \"\") {\n params.loop = parseInt(loop, 10);\n }\n var autoplay = wrapperAttributes.getNamedItem(\"data-anim-autoplay\") ? wrapperAttributes.getNamedItem(\"data-anim-autoplay\").value : wrapperAttributes.getNamedItem(\"data-bm-autoplay\") ? wrapperAttributes.getNamedItem(\"data-bm-autoplay\").value : wrapperAttributes.getNamedItem(\"bm-autoplay\") ? wrapperAttributes.getNamedItem(\"bm-autoplay\").value : true;\n params.autoplay = autoplay !== \"false\";\n params.name = wrapperAttributes.getNamedItem(\"data-name\") ? wrapperAttributes.getNamedItem(\"data-name\").value : wrapperAttributes.getNamedItem(\"data-bm-name\") ? wrapperAttributes.getNamedItem(\"data-bm-name\").value : wrapperAttributes.getNamedItem(\"bm-name\") ? wrapperAttributes.getNamedItem(\"bm-name\").value : \"\";\n var prerender = wrapperAttributes.getNamedItem(\"data-anim-prerender\") ? wrapperAttributes.getNamedItem(\"data-anim-prerender\").value : wrapperAttributes.getNamedItem(\"data-bm-prerender\") ? wrapperAttributes.getNamedItem(\"data-bm-prerender\").value : wrapperAttributes.getNamedItem(\"bm-prerender\") ? wrapperAttributes.getNamedItem(\"bm-prerender\").value : \"\";\n if (prerender === \"false\") {\n params.prerender = false;\n }\n this.setParams(params);\n };\n AnimationItem.prototype.includeLayers = function(data) {\n if (data.op > this.animationData.op) {\n this.animationData.op = data.op;\n this.totalFrames = Math.floor(data.op - this.animationData.ip);\n }\n var layers = this.animationData.layers;\n var i;\n var len = layers.length;\n var newLayers = data.layers;\n var j;\n var jLen = newLayers.length;\n for (j = 0; j < jLen; j += 1) {\n i = 0;\n while (i < len) {\n if (layers[i].id === newLayers[j].id) {\n layers[i] = newLayers[j];\n break;\n }\n i += 1;\n }\n }\n if (data.chars || data.fonts) {\n this.renderer.globalData.fontManager.addChars(data.chars);\n this.renderer.globalData.fontManager.addFonts(data.fonts, this.renderer.globalData.defs);\n }\n if (data.assets) {\n len = data.assets.length;\n for (i = 0; i < len; i += 1) {\n this.animationData.assets.push(data.assets[i]);\n }\n }\n this.animationData.__complete = false;\n dataManager.completeAnimation(this.animationData, this.onSegmentComplete);\n };\n AnimationItem.prototype.onSegmentComplete = function(data) {\n this.animationData = data;\n var expressionsPlugin2 = getExpressionsPlugin();\n if (expressionsPlugin2) {\n expressionsPlugin2.initExpressions(this);\n }\n this.loadNextSegment();\n };\n AnimationItem.prototype.loadNextSegment = function() {\n var segments = this.animationData.segments;\n if (!segments || segments.length === 0 || !this.autoloadSegments) {\n this.trigger(\"data_ready\");\n this.timeCompleted = this.totalFrames;\n return;\n }\n var segment = segments.shift();\n this.timeCompleted = segment.time * this.frameRate;\n var segmentPath = this.path + this.fileName + \"_\" + this.segmentPos + \".json\";\n this.segmentPos += 1;\n dataManager.loadData(\n segmentPath,\n this.includeLayers.bind(this),\n function() {\n this.trigger(\"data_failed\");\n }.bind(this)\n );\n };\n AnimationItem.prototype.loadSegments = function() {\n var segments = this.animationData.segments;\n if (!segments) {\n this.timeCompleted = this.totalFrames;\n }\n this.loadNextSegment();\n };\n AnimationItem.prototype.imagesLoaded = function() {\n this.trigger(\"loaded_images\");\n this.checkLoaded();\n };\n AnimationItem.prototype.preloadImages = function() {\n this.imagePreloader.setAssetsPath(this.assetsPath);\n this.imagePreloader.setPath(this.path);\n this.imagePreloader.loadAssets(this.animationData.assets, this.imagesLoaded.bind(this));\n };\n AnimationItem.prototype.configAnimation = function(animData) {\n if (!this.renderer) {\n return;\n }\n try {\n this.animationData = animData;\n if (this.initialSegment) {\n this.totalFrames = Math.floor(this.initialSegment[1] - this.initialSegment[0]);\n this.firstFrame = Math.round(this.initialSegment[0]);\n } else {\n this.totalFrames = Math.floor(this.animationData.op - this.animationData.ip);\n this.firstFrame = Math.round(this.animationData.ip);\n }\n this.renderer.configAnimation(animData);\n if (!animData.assets) {\n animData.assets = [];\n }\n this.assets = this.animationData.assets;\n this.frameRate = this.animationData.fr;\n this.frameMult = this.animationData.fr / 1e3;\n this.renderer.searchExtraCompositions(animData.assets);\n this.markers = markerParser(animData.markers || []);\n this.trigger(\"config_ready\");\n this.preloadImages();\n this.loadSegments();\n this.updaFrameModifier();\n this.waitForFontsLoaded();\n if (this.isPaused) {\n this.audioController.pause();\n }\n } catch (error) {\n this.triggerConfigError(error);\n }\n };\n AnimationItem.prototype.waitForFontsLoaded = function() {\n if (!this.renderer) {\n return;\n }\n if (this.renderer.globalData.fontManager.isLoaded) {\n this.checkLoaded();\n } else {\n setTimeout(this.waitForFontsLoaded.bind(this), 20);\n }\n };\n AnimationItem.prototype.checkLoaded = function() {\n if (!this.isLoaded && this.renderer.globalData.fontManager.isLoaded && (this.imagePreloader.loadedImages() || this.renderer.rendererType !== \"canvas\") && this.imagePreloader.loadedFootages()) {\n this.isLoaded = true;\n var expressionsPlugin2 = getExpressionsPlugin();\n if (expressionsPlugin2) {\n expressionsPlugin2.initExpressions(this);\n }\n this.renderer.initItems();\n setTimeout(\n function() {\n this.trigger(\"DOMLoaded\");\n }.bind(this),\n 0\n );\n this.gotoFrame();\n if (this.autoplay) {\n this.play();\n }\n }\n };\n AnimationItem.prototype.resize = function() {\n this.renderer.updateContainerSize();\n };\n AnimationItem.prototype.setSubframe = function(flag) {\n this.isSubframeEnabled = !!flag;\n };\n AnimationItem.prototype.gotoFrame = function() {\n this.currentFrame = this.isSubframeEnabled ? this.currentRawFrame : ~~this.currentRawFrame;\n if (this.timeCompleted !== this.totalFrames && this.currentFrame > this.timeCompleted) {\n this.currentFrame = this.timeCompleted;\n }\n this.trigger(\"enterFrame\");\n this.renderFrame();\n this.trigger(\"drawnFrame\");\n };\n AnimationItem.prototype.renderFrame = function() {\n if (this.isLoaded === false || !this.renderer) {\n return;\n }\n try {\n this.renderer.renderFrame(this.currentFrame + this.firstFrame);\n } catch (error) {\n this.triggerRenderFrameError(error);\n }\n };\n AnimationItem.prototype.play = function(name) {\n if (name && this.name !== name) {\n return;\n }\n if (this.isPaused === true) {\n this.isPaused = false;\n this.trigger(\"_pause\");\n this.audioController.resume();\n if (this._idle) {\n this._idle = false;\n this.trigger(\"_active\");\n }\n }\n };\n AnimationItem.prototype.pause = function(name) {\n if (name && this.name !== name) {\n return;\n }\n if (this.isPaused === false) {\n this.isPaused = true;\n this.trigger(\"_play\");\n this._idle = true;\n this.trigger(\"_idle\");\n this.audioController.pause();\n }\n };\n AnimationItem.prototype.togglePause = function(name) {\n if (name && this.name !== name) {\n return;\n }\n if (this.isPaused === true) {\n this.play();\n } else {\n this.pause();\n }\n };\n AnimationItem.prototype.stop = function(name) {\n if (name && this.name !== name) {\n return;\n }\n this.pause();\n this.playCount = 0;\n this._completedLoop = false;\n this.setCurrentRawFrameValue(0);\n };\n AnimationItem.prototype.getMarkerData = function(markerName) {\n var marker;\n for (var i = 0; i < this.markers.length; i += 1) {\n marker = this.markers[i];\n if (marker.payload && marker.payload.name === markerName) {\n return marker;\n }\n }\n return null;\n };\n AnimationItem.prototype.goToAndStop = function(value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n var numValue = Number(value);\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n if (marker) {\n this.goToAndStop(marker.time, true);\n }\n } else if (isFrame) {\n this.setCurrentRawFrameValue(value);\n } else {\n this.setCurrentRawFrameValue(value * this.frameModifier);\n }\n this.pause();\n };\n AnimationItem.prototype.goToAndPlay = function(value, isFrame, name) {\n if (name && this.name !== name) {\n return;\n }\n var numValue = Number(value);\n if (isNaN(numValue)) {\n var marker = this.getMarkerData(value);\n if (marker) {\n if (!marker.duration) {\n this.goToAndStop(marker.time, true);\n } else {\n this.playSegments([marker.time, marker.time + marker.duration], true);\n }\n }\n } else {\n this.goToAndStop(numValue, isFrame, name);\n }\n this.play();\n };\n AnimationItem.prototype.advanceTime = function(value) {\n if (this.isPaused === true || this.isLoaded === false) {\n return;\n }\n var nextValue = this.currentRawFrame + value * this.frameModifier;\n var _isComplete = false;\n if (nextValue >= this.totalFrames - 1 && this.frameModifier > 0) {\n if (!this.loop || this.playCount === this.loop) {\n if (!this.checkSegments(nextValue > this.totalFrames ? nextValue % this.totalFrames : 0)) {\n _isComplete = true;\n nextValue = this.totalFrames - 1;\n }\n } else if (nextValue >= this.totalFrames) {\n this.playCount += 1;\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n this.setCurrentRawFrameValue(nextValue % this.totalFrames);\n this._completedLoop = true;\n this.trigger(\"loopComplete\");\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n } else if (nextValue < 0) {\n if (!this.checkSegments(nextValue % this.totalFrames)) {\n if (this.loop && !(this.playCount-- <= 0 && this.loop !== true)) {\n this.setCurrentRawFrameValue(this.totalFrames + nextValue % this.totalFrames);\n if (!this._completedLoop) {\n this._completedLoop = true;\n } else {\n this.trigger(\"loopComplete\");\n }\n } else {\n _isComplete = true;\n nextValue = 0;\n }\n }\n } else {\n this.setCurrentRawFrameValue(nextValue);\n }\n if (_isComplete) {\n this.setCurrentRawFrameValue(nextValue);\n this.pause();\n this.trigger(\"complete\");\n }\n };\n AnimationItem.prototype.adjustSegment = function(arr, offset) {\n this.playCount = 0;\n if (arr[1] < arr[0]) {\n if (this.frameModifier > 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(-1);\n }\n }\n this.totalFrames = arr[0] - arr[1];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[1];\n this.setCurrentRawFrameValue(this.totalFrames - 1e-3 - offset);\n } else if (arr[1] > arr[0]) {\n if (this.frameModifier < 0) {\n if (this.playSpeed < 0) {\n this.setSpeed(-this.playSpeed);\n } else {\n this.setDirection(1);\n }\n }\n this.totalFrames = arr[1] - arr[0];\n this.timeCompleted = this.totalFrames;\n this.firstFrame = arr[0];\n this.setCurrentRawFrameValue(1e-3 + offset);\n }\n this.trigger(\"segmentStart\");\n };\n AnimationItem.prototype.setSegment = function(init, end) {\n var pendingFrame = -1;\n if (this.isPaused) {\n if (this.currentRawFrame + this.firstFrame < init) {\n pendingFrame = init;\n } else if (this.currentRawFrame + this.firstFrame > end) {\n pendingFrame = end - init;\n }\n }\n this.firstFrame = init;\n this.totalFrames = end - init;\n this.timeCompleted = this.totalFrames;\n if (pendingFrame !== -1) {\n this.goToAndStop(pendingFrame, true);\n }\n };\n AnimationItem.prototype.playSegments = function(arr, forceFlag) {\n if (forceFlag) {\n this.segments.length = 0;\n }\n if (typeof arr[0] === \"object\") {\n var i;\n var len = arr.length;\n for (i = 0; i < len; i += 1) {\n this.segments.push(arr[i]);\n }\n } else {\n this.segments.push(arr);\n }\n if (this.segments.length && forceFlag) {\n this.adjustSegment(this.segments.shift(), 0);\n }\n if (this.isPaused) {\n this.play();\n }\n };\n AnimationItem.prototype.resetSegments = function(forceFlag) {\n this.segments.length = 0;\n this.segments.push([this.animationData.ip, this.animationData.op]);\n if (forceFlag) {\n this.checkSegments(0);\n }\n };\n AnimationItem.prototype.checkSegments = function(offset) {\n if (this.segments.length) {\n this.adjustSegment(this.segments.shift(), offset);\n return true;\n }\n return false;\n };\n AnimationItem.prototype.destroy = function(name) {\n if (name && this.name !== name || !this.renderer) {\n return;\n }\n this.renderer.destroy();\n this.imagePreloader.destroy();\n this.trigger(\"destroy\");\n this._cbs = null;\n this.onEnterFrame = null;\n this.onLoopComplete = null;\n this.onComplete = null;\n this.onSegmentStart = null;\n this.onDestroy = null;\n this.renderer = null;\n this.renderer = null;\n this.imagePreloader = null;\n this.projectInterface = null;\n };\n AnimationItem.prototype.setCurrentRawFrameValue = function(value) {\n this.currentRawFrame = value;\n this.gotoFrame();\n };\n AnimationItem.prototype.setSpeed = function(val) {\n this.playSpeed = val;\n this.updaFrameModifier();\n };\n AnimationItem.prototype.setDirection = function(val) {\n this.playDirection = val < 0 ? -1 : 1;\n this.updaFrameModifier();\n };\n AnimationItem.prototype.setVolume = function(val, name) {\n if (name && this.name !== name) {\n return;\n }\n this.audioController.setVolume(val);\n };\n AnimationItem.prototype.getVolume = function() {\n return this.audioController.getVolume();\n };\n AnimationItem.prototype.mute = function(name) {\n if (name && this.name !== name) {\n return;\n }\n this.audioController.mute();\n };\n AnimationItem.prototype.unmute = function(name) {\n if (name && this.name !== name) {\n return;\n }\n this.audioController.unmute();\n };\n AnimationItem.prototype.updaFrameModifier = function() {\n this.frameModifier = this.frameMult * this.playSpeed * this.playDirection;\n this.audioController.setRate(this.playSpeed * this.playDirection);\n };\n AnimationItem.prototype.getPath = function() {\n return this.path;\n };\n AnimationItem.prototype.getAssetsPath = function(assetData) {\n var path = \"\";\n if (assetData.e) {\n path = assetData.p;\n } else if (this.assetsPath) {\n var imagePath = assetData.p;\n if (imagePath.indexOf(\"images/\") !== -1) {\n imagePath = imagePath.split(\"/\")[1];\n }\n path = this.assetsPath + imagePath;\n } else {\n path = this.path;\n path += assetData.u ? assetData.u : \"\";\n path += assetData.p;\n }\n return path;\n };\n AnimationItem.prototype.getAssetData = function(id) {\n var i = 0;\n var len = this.assets.length;\n while (i < len) {\n if (id === this.assets[i].id) {\n return this.assets[i];\n }\n i += 1;\n }\n return null;\n };\n AnimationItem.prototype.hide = function() {\n this.renderer.hide();\n };\n AnimationItem.prototype.show = function() {\n this.renderer.show();\n };\n AnimationItem.prototype.getDuration = function(isFrame) {\n return isFrame ? this.totalFrames : this.totalFrames / this.frameRate;\n };\n AnimationItem.prototype.updateDocumentData = function(path, documentData, index2) {\n try {\n var element = this.renderer.getElementByPath(path);\n element.updateDocumentData(documentData, index2);\n } catch (error) {\n }\n };\n AnimationItem.prototype.trigger = function(name) {\n if (this._cbs && this._cbs[name]) {\n switch (name) {\n case \"enterFrame\":\n this.triggerEvent(name, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameModifier));\n break;\n case \"drawnFrame\":\n this.drawnFrameEvent.currentTime = this.currentFrame;\n this.drawnFrameEvent.totalTime = this.totalFrames;\n this.drawnFrameEvent.direction = this.frameModifier;\n this.triggerEvent(name, this.drawnFrameEvent);\n break;\n case \"loopComplete\":\n this.triggerEvent(name, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n break;\n case \"complete\":\n this.triggerEvent(name, new BMCompleteEvent(name, this.frameMult));\n break;\n case \"segmentStart\":\n this.triggerEvent(name, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n break;\n case \"destroy\":\n this.triggerEvent(name, new BMDestroyEvent(name, this));\n break;\n default:\n this.triggerEvent(name);\n }\n }\n if (name === \"enterFrame\" && this.onEnterFrame) {\n this.onEnterFrame.call(this, new BMEnterFrameEvent(name, this.currentFrame, this.totalFrames, this.frameMult));\n }\n if (name === \"loopComplete\" && this.onLoopComplete) {\n this.onLoopComplete.call(this, new BMCompleteLoopEvent(name, this.loop, this.playCount, this.frameMult));\n }\n if (name === \"complete\" && this.onComplete) {\n this.onComplete.call(this, new BMCompleteEvent(name, this.frameMult));\n }\n if (name === \"segmentStart\" && this.onSegmentStart) {\n this.onSegmentStart.call(this, new BMSegmentStartEvent(name, this.firstFrame, this.totalFrames));\n }\n if (name === \"destroy\" && this.onDestroy) {\n this.onDestroy.call(this, new BMDestroyEvent(name, this));\n }\n };\n AnimationItem.prototype.triggerRenderFrameError = function(nativeError) {\n var error = new BMRenderFrameErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent(\"error\", error);\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n AnimationItem.prototype.triggerConfigError = function(nativeError) {\n var error = new BMConfigErrorEvent(nativeError, this.currentFrame);\n this.triggerEvent(\"error\", error);\n if (this.onError) {\n this.onError.call(this, error);\n }\n };\n const animationManager = function() {\n var moduleOb = {};\n var registeredAnimations = [];\n var initTime = 0;\n var len = 0;\n var playingAnimationsNum = 0;\n var _stopped = true;\n var _isFrozen = false;\n function removeElement(ev) {\n var i = 0;\n var animItem = ev.target;\n while (i < len) {\n if (registeredAnimations[i].animation === animItem) {\n registeredAnimations.splice(i, 1);\n i -= 1;\n len -= 1;\n if (!animItem.isPaused) {\n subtractPlayingCount();\n }\n }\n i += 1;\n }\n }\n function registerAnimation(element, animationData) {\n if (!element) {\n return null;\n }\n var i = 0;\n while (i < len) {\n if (registeredAnimations[i].elem === element && registeredAnimations[i].elem !== null) {\n return registeredAnimations[i].animation;\n }\n i += 1;\n }\n var animItem = new AnimationItem();\n setupAnimation(animItem, element);\n animItem.setData(element, animationData);\n return animItem;\n }\n function getRegisteredAnimations() {\n var i;\n var lenAnims = registeredAnimations.length;\n var animations = [];\n for (i = 0; i < lenAnims; i += 1) {\n animations.push(registeredAnimations[i].animation);\n }\n return animations;\n }\n function addPlayingCount() {\n playingAnimationsNum += 1;\n activate();\n }\n function subtractPlayingCount() {\n playingAnimationsNum -= 1;\n }\n function setupAnimation(animItem, element) {\n animItem.addEventListener(\"destroy\", removeElement);\n animItem.addEventListener(\"_active\", addPlayingCount);\n animItem.addEventListener(\"_idle\", subtractPlayingCount);\n registeredAnimations.push({ elem: element, animation: animItem });\n len += 1;\n }\n function loadAnimation2(params) {\n var animItem = new AnimationItem();\n setupAnimation(animItem, null);\n animItem.setParams(params);\n return animItem;\n }\n function setSpeed(val, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setSpeed(val, animation);\n }\n }\n function setDirection(val, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setDirection(val, animation);\n }\n }\n function play(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.play(animation);\n }\n }\n function resume(nowTime) {\n var elapsedTime = nowTime - initTime;\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.advanceTime(elapsedTime);\n }\n initTime = nowTime;\n if (playingAnimationsNum && !_isFrozen) {\n window.requestAnimationFrame(resume);\n } else {\n _stopped = true;\n }\n }\n function first(nowTime) {\n initTime = nowTime;\n window.requestAnimationFrame(resume);\n }\n function pause(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.pause(animation);\n }\n }\n function goToAndStop(value, isFrame, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.goToAndStop(value, isFrame, animation);\n }\n }\n function stop(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.stop(animation);\n }\n }\n function togglePause(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.togglePause(animation);\n }\n }\n function destroy(animation) {\n var i;\n for (i = len - 1; i >= 0; i -= 1) {\n registeredAnimations[i].animation.destroy(animation);\n }\n }\n function searchAnimations2(animationData, standalone, renderer) {\n var animElements = [].concat(\n [].slice.call(document.getElementsByClassName(\"lottie\")),\n [].slice.call(document.getElementsByClassName(\"bodymovin\"))\n );\n var i;\n var lenAnims = animElements.length;\n for (i = 0; i < lenAnims; i += 1) {\n if (renderer) {\n animElements[i].setAttribute(\"data-bm-type\", renderer);\n }\n registerAnimation(animElements[i], animationData);\n }\n if (standalone && lenAnims === 0) {\n if (!renderer) {\n renderer = \"svg\";\n }\n var body = document.getElementsByTagName(\"body\")[0];\n body.innerText = \"\";\n var div = createTag(\"div\");\n div.style.width = \"100%\";\n div.style.height = \"100%\";\n div.setAttribute(\"data-bm-type\", renderer);\n body.appendChild(div);\n registerAnimation(div, animationData);\n }\n }\n function resize() {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.resize();\n }\n }\n function activate() {\n if (!_isFrozen && playingAnimationsNum) {\n if (_stopped) {\n window.requestAnimationFrame(first);\n _stopped = false;\n }\n }\n }\n function freeze() {\n _isFrozen = true;\n }\n function unfreeze() {\n _isFrozen = false;\n activate();\n }\n function setVolume(val, animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.setVolume(val, animation);\n }\n }\n function mute(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.mute(animation);\n }\n }\n function unmute(animation) {\n var i;\n for (i = 0; i < len; i += 1) {\n registeredAnimations[i].animation.unmute(animation);\n }\n }\n moduleOb.registerAnimation = registerAnimation;\n moduleOb.loadAnimation = loadAnimation2;\n moduleOb.setSpeed = setSpeed;\n moduleOb.setDirection = setDirection;\n moduleOb.play = play;\n moduleOb.pause = pause;\n moduleOb.stop = stop;\n moduleOb.togglePause = togglePause;\n moduleOb.searchAnimations = searchAnimations2;\n moduleOb.resize = resize;\n moduleOb.goToAndStop = goToAndStop;\n moduleOb.destroy = destroy;\n moduleOb.freeze = freeze;\n moduleOb.unfreeze = unfreeze;\n moduleOb.setVolume = setVolume;\n moduleOb.mute = mute;\n moduleOb.unmute = unmute;\n moduleOb.getRegisteredAnimations = getRegisteredAnimations;\n return moduleOb;\n }();\n const BezierFactory = function() {\n var ob = {};\n ob.getBezierEasing = getBezierEasing;\n var beziers = {};\n function getBezierEasing(a, b, c, d, nm) {\n var str = nm || (\"bez_\" + a + \"_\" + b + \"_\" + c + \"_\" + d).replace(/\\./g, \"p\");\n if (beziers[str]) {\n return beziers[str];\n }\n var bezEasing = new BezierEasing([a, b, c, d]);\n beziers[str] = bezEasing;\n return bezEasing;\n }\n var NEWTON_ITERATIONS = 4;\n var NEWTON_MIN_SLOPE = 1e-3;\n var SUBDIVISION_PRECISION = 1e-7;\n var SUBDIVISION_MAX_ITERATIONS = 10;\n var kSplineTableSize = 11;\n var kSampleStepSize = 1 / (kSplineTableSize - 1);\n var float32ArraySupported = typeof Float32Array === \"function\";\n function A(aA1, aA2) {\n return 1 - 3 * aA2 + 3 * aA1;\n }\n function B(aA1, aA2) {\n return 3 * aA2 - 6 * aA1;\n }\n function C(aA1) {\n return 3 * aA1;\n }\n function calcBezier(aT, aA1, aA2) {\n return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT;\n }\n function getSlope(aT, aA1, aA2) {\n return 3 * A(aA1, aA2) * aT * aT + 2 * B(aA1, aA2) * aT + C(aA1);\n }\n function binarySubdivide(aX, aA, aB, mX1, mX2) {\n var currentX, currentT, i = 0;\n do {\n currentT = aA + (aB - aA) / 2;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if (currentX > 0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while (Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n }\n function newtonRaphsonIterate(aX, aGuessT, mX1, mX2) {\n for (var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if (currentSlope === 0)\n return aGuessT;\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n }\n function BezierEasing(points) {\n this._p = points;\n this._mSampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n this._precomputed = false;\n this.get = this.get.bind(this);\n }\n BezierEasing.prototype = {\n get: function(x) {\n var mX1 = this._p[0], mY1 = this._p[1], mX2 = this._p[2], mY2 = this._p[3];\n if (!this._precomputed)\n this._precompute();\n if (mX1 === mY1 && mX2 === mY2)\n return x;\n if (x === 0)\n return 0;\n if (x === 1)\n return 1;\n return calcBezier(this._getTForX(x), mY1, mY2);\n },\n // Private part\n _precompute: function() {\n var mX1 = this._p[0], mY1 = this._p[1], mX2 = this._p[2], mY2 = this._p[3];\n this._precomputed = true;\n if (mX1 !== mY1 || mX2 !== mY2) {\n this._calcSampleValues();\n }\n },\n _calcSampleValues: function() {\n var mX1 = this._p[0], mX2 = this._p[2];\n for (var i = 0; i < kSplineTableSize; ++i) {\n this._mSampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n },\n /**\n * getTForX chose the fastest heuristic to determine the percentage value precisely from a given X projection.\n */\n _getTForX: function(aX) {\n var mX1 = this._p[0], mX2 = this._p[2], mSampleValues = this._mSampleValues;\n var intervalStart = 0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n for (; currentSample !== lastSample && mSampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n var dist = (aX - mSampleValues[currentSample]) / (mSampleValues[currentSample + 1] - mSampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n var initialSlope = getSlope(guessForT, mX1, mX2);\n if (initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n }\n if (initialSlope === 0) {\n return guessForT;\n }\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n };\n return ob;\n }();\n const pooling = function() {\n function double(arr) {\n return arr.concat(createSizedArray(arr.length));\n }\n return {\n double\n };\n }();\n const poolFactory = function() {\n return function(initialLength, _create, _release) {\n var _length = 0;\n var _maxLength = initialLength;\n var pool = createSizedArray(_maxLength);\n var ob = {\n newElement,\n release\n };\n function newElement() {\n var element;\n if (_length) {\n _length -= 1;\n element = pool[_length];\n } else {\n element = _create();\n }\n return element;\n }\n function release(element) {\n if (_length === _maxLength) {\n pool = pooling.double(pool);\n _maxLength *= 2;\n }\n if (_release) {\n _release(element);\n }\n pool[_length] = element;\n _length += 1;\n }\n return ob;\n };\n }();\n const bezierLengthPool = function() {\n function create() {\n return {\n addedLength: 0,\n percents: createTypedArray(\"float32\", getDefaultCurveSegments()),\n lengths: createTypedArray(\"float32\", getDefaultCurveSegments())\n };\n }\n return poolFactory(8, create);\n }();\n const segmentsLengthPool = function() {\n function create() {\n return {\n lengths: [],\n totalLength: 0\n };\n }\n function release(element) {\n var i;\n var len = element.lengths.length;\n for (i = 0; i < len; i += 1) {\n bezierLengthPool.release(element.lengths[i]);\n }\n element.lengths.length = 0;\n }\n return poolFactory(8, create, release);\n }();\n function bezFunction() {\n var math = Math;\n function pointOnLine2D(x1, y1, x2, y2, x3, y3) {\n var det1 = x1 * y2 + y1 * x3 + x2 * y3 - x3 * y2 - y3 * x1 - x2 * y1;\n return det1 > -1e-3 && det1 < 1e-3;\n }\n function pointOnLine3D(x1, y1, z1, x2, y2, z2, x3, y3, z3) {\n if (z1 === 0 && z2 === 0 && z3 === 0) {\n return pointOnLine2D(x1, y1, x2, y2, x3, y3);\n }\n var dist1 = math.sqrt(math.pow(x2 - x1, 2) + math.pow(y2 - y1, 2) + math.pow(z2 - z1, 2));\n var dist2 = math.sqrt(math.pow(x3 - x1, 2) + math.pow(y3 - y1, 2) + math.pow(z3 - z1, 2));\n var dist3 = math.sqrt(math.pow(x3 - x2, 2) + math.pow(y3 - y2, 2) + math.pow(z3 - z2, 2));\n var diffDist;\n if (dist1 > dist2) {\n if (dist1 > dist3) {\n diffDist = dist1 - dist2 - dist3;\n } else {\n diffDist = dist3 - dist2 - dist1;\n }\n } else if (dist3 > dist2) {\n diffDist = dist3 - dist2 - dist1;\n } else {\n diffDist = dist2 - dist1 - dist3;\n }\n return diffDist > -1e-4 && diffDist < 1e-4;\n }\n var getBezierLength = function() {\n return function(pt1, pt2, pt3, pt4) {\n var curveSegments = getDefaultCurveSegments();\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point = [];\n var lastPoint = [];\n var lengthData = bezierLengthPool.newElement();\n len = pt3.length;\n for (k = 0; k < curveSegments; k += 1) {\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * pt3[i] + 3 * (1 - perc) * bmPow(perc, 2) * pt4[i] + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n if (lastPoint[i] !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n lastPoint[i] = point[i];\n }\n if (ptDistance) {\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n }\n lengthData.percents[k] = perc;\n lengthData.lengths[k] = addedLength;\n }\n lengthData.addedLength = addedLength;\n return lengthData;\n };\n }();\n function getSegmentsLength(shapeData) {\n var segmentsLength = segmentsLengthPool.newElement();\n var closed = shapeData.c;\n var pathV = shapeData.v;\n var pathO = shapeData.o;\n var pathI = shapeData.i;\n var i;\n var len = shapeData._length;\n var lengths = segmentsLength.lengths;\n var totalLength = 0;\n for (i = 0; i < len - 1; i += 1) {\n lengths[i] = getBezierLength(pathV[i], pathV[i + 1], pathO[i], pathI[i + 1]);\n totalLength += lengths[i].addedLength;\n }\n if (closed && len) {\n lengths[i] = getBezierLength(pathV[i], pathV[0], pathO[i], pathI[0]);\n totalLength += lengths[i].addedLength;\n }\n segmentsLength.totalLength = totalLength;\n return segmentsLength;\n }\n function BezierData(length) {\n this.segmentLength = 0;\n this.points = new Array(length);\n }\n function PointData(partial, point) {\n this.partialLength = partial;\n this.point = point;\n }\n var buildBezierData = function() {\n var storedData = {};\n return function(pt1, pt2, pt3, pt4) {\n var bezierName = (pt1[0] + \"_\" + pt1[1] + \"_\" + pt2[0] + \"_\" + pt2[1] + \"_\" + pt3[0] + \"_\" + pt3[1] + \"_\" + pt4[0] + \"_\" + pt4[1]).replace(/\\./g, \"p\");\n if (!storedData[bezierName]) {\n var curveSegments = getDefaultCurveSegments();\n var k;\n var i;\n var len;\n var ptCoord;\n var perc;\n var addedLength = 0;\n var ptDistance;\n var point;\n var lastPoint = null;\n if (pt1.length === 2 && (pt1[0] !== pt2[0] || pt1[1] !== pt2[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt1[0] + pt3[0], pt1[1] + pt3[1]) && pointOnLine2D(pt1[0], pt1[1], pt2[0], pt2[1], pt2[0] + pt4[0], pt2[1] + pt4[1])) {\n curveSegments = 2;\n }\n var bezierData = new BezierData(curveSegments);\n len = pt3.length;\n for (k = 0; k < curveSegments; k += 1) {\n point = createSizedArray(len);\n perc = k / (curveSegments - 1);\n ptDistance = 0;\n for (i = 0; i < len; i += 1) {\n ptCoord = bmPow(1 - perc, 3) * pt1[i] + 3 * bmPow(1 - perc, 2) * perc * (pt1[i] + pt3[i]) + 3 * (1 - perc) * bmPow(perc, 2) * (pt2[i] + pt4[i]) + bmPow(perc, 3) * pt2[i];\n point[i] = ptCoord;\n if (lastPoint !== null) {\n ptDistance += bmPow(point[i] - lastPoint[i], 2);\n }\n }\n ptDistance = bmSqrt(ptDistance);\n addedLength += ptDistance;\n bezierData.points[k] = new PointData(ptDistance, point);\n lastPoint = point;\n }\n bezierData.segmentLength = addedLength;\n storedData[bezierName] = bezierData;\n }\n return storedData[bezierName];\n };\n }();\n function getDistancePerc(perc, bezierData) {\n var percents = bezierData.percents;\n var lengths = bezierData.lengths;\n var len = percents.length;\n var initPos = bmFloor((len - 1) * perc);\n var lengthPos = perc * bezierData.addedLength;\n var lPerc = 0;\n if (initPos === len - 1 || initPos === 0 || lengthPos === lengths[initPos]) {\n return percents[initPos];\n }\n var dir = lengths[initPos] > lengthPos ? -1 : 1;\n var flag = true;\n while (flag) {\n if (lengths[initPos] <= lengthPos && lengths[initPos + 1] > lengthPos) {\n lPerc = (lengthPos - lengths[initPos]) / (lengths[initPos + 1] - lengths[initPos]);\n flag = false;\n } else {\n initPos += dir;\n }\n if (initPos < 0 || initPos >= len - 1) {\n if (initPos === len - 1) {\n return percents[initPos];\n }\n flag = false;\n }\n }\n return percents[initPos] + (percents[initPos + 1] - percents[initPos]) * lPerc;\n }\n function getPointInSegment(pt1, pt2, pt3, pt4, percent, bezierData) {\n var t1 = getDistancePerc(percent, bezierData);\n var u1 = 1 - t1;\n var ptX = math.round(\n (u1 * u1 * u1 * pt1[0] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[0] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[0] + t1 * t1 * t1 * pt2[0]) * 1e3\n ) / 1e3;\n var ptY = math.round(\n (u1 * u1 * u1 * pt1[1] + (t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1) * pt3[1] + (t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1) * pt4[1] + t1 * t1 * t1 * pt2[1]) * 1e3\n ) / 1e3;\n return [ptX, ptY];\n }\n var bezierSegmentPoints = createTypedArray(\"float32\", 8);\n function getNewSegment(pt1, pt2, pt3, pt4, startPerc, endPerc, bezierData) {\n if (startPerc < 0) {\n startPerc = 0;\n } else if (startPerc > 1) {\n startPerc = 1;\n }\n var t0 = getDistancePerc(startPerc, bezierData);\n endPerc = endPerc > 1 ? 1 : endPerc;\n var t1 = getDistancePerc(endPerc, bezierData);\n var i;\n var len = pt1.length;\n var u0 = 1 - t0;\n var u1 = 1 - t1;\n var u0u0u0 = u0 * u0 * u0;\n var t0u0u0_3 = t0 * u0 * u0 * 3;\n var t0t0u0_3 = t0 * t0 * u0 * 3;\n var t0t0t0 = t0 * t0 * t0;\n var u0u0u1 = u0 * u0 * u1;\n var t0u0u1_3 = t0 * u0 * u1 + u0 * t0 * u1 + u0 * u0 * t1;\n var t0t0u1_3 = t0 * t0 * u1 + u0 * t0 * t1 + t0 * u0 * t1;\n var t0t0t1 = t0 * t0 * t1;\n var u0u1u1 = u0 * u1 * u1;\n var t0u1u1_3 = t0 * u1 * u1 + u0 * t1 * u1 + u0 * u1 * t1;\n var t0t1u1_3 = t0 * t1 * u1 + u0 * t1 * t1 + t0 * u1 * t1;\n var t0t1t1 = t0 * t1 * t1;\n var u1u1u1 = u1 * u1 * u1;\n var t1u1u1_3 = t1 * u1 * u1 + u1 * t1 * u1 + u1 * u1 * t1;\n var t1t1u1_3 = t1 * t1 * u1 + u1 * t1 * t1 + t1 * u1 * t1;\n var t1t1t1 = t1 * t1 * t1;\n for (i = 0; i < len; i += 1) {\n bezierSegmentPoints[i * 4] = math.round((u0u0u0 * pt1[i] + t0u0u0_3 * pt3[i] + t0t0u0_3 * pt4[i] + t0t0t0 * pt2[i]) * 1e3) / 1e3;\n bezierSegmentPoints[i * 4 + 1] = math.round((u0u0u1 * pt1[i] + t0u0u1_3 * pt3[i] + t0t0u1_3 * pt4[i] + t0t0t1 * pt2[i]) * 1e3) / 1e3;\n bezierSegmentPoints[i * 4 + 2] = math.round((u0u1u1 * pt1[i] + t0u1u1_3 * pt3[i] + t0t1u1_3 * pt4[i] + t0t1t1 * pt2[i]) * 1e3) / 1e3;\n bezierSegmentPoints[i * 4 + 3] = math.round((u1u1u1 * pt1[i] + t1u1u1_3 * pt3[i] + t1t1u1_3 * pt4[i] + t1t1t1 * pt2[i]) * 1e3) / 1e3;\n }\n return bezierSegmentPoints;\n }\n return {\n getSegmentsLength,\n getNewSegment,\n getPointInSegment,\n buildBezierData,\n pointOnLine2D,\n pointOnLine3D\n };\n }\n const bez = bezFunction();\n const PropertyFactory = function() {\n var initFrame = initialDefaultFrame;\n var mathAbs = Math.abs;\n function interpolateValue(frameNum, caching) {\n var offsetTime = this.offsetTime;\n var newValue;\n if (this.propType === \"multidimensional\") {\n newValue = createTypedArray(\"float32\", this.pv.length);\n }\n var iterationIndex = caching.lastIndex;\n var i = iterationIndex;\n var len = this.keyframes.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n while (flag) {\n keyData = this.keyframes[i];\n nextKeyData = this.keyframes[i + 1];\n if (i === len - 1 && frameNum >= nextKeyData.t - offsetTime) {\n if (keyData.h) {\n keyData = nextKeyData;\n }\n iterationIndex = 0;\n break;\n }\n if (nextKeyData.t - offsetTime > frameNum) {\n iterationIndex = i;\n break;\n }\n if (i < len - 1) {\n i += 1;\n } else {\n iterationIndex = 0;\n flag = false;\n }\n }\n keyframeMetadata = this.keyframesMetadata[i] || {};\n var k;\n var kLen;\n var perc;\n var jLen;\n var j;\n var fnc;\n var nextKeyTime = nextKeyData.t - offsetTime;\n var keyTime = keyData.t - offsetTime;\n var endValue;\n if (keyData.to) {\n if (!keyframeMetadata.bezierData) {\n keyframeMetadata.bezierData = bez.buildBezierData(\n keyData.s,\n nextKeyData.s || keyData.e,\n keyData.to,\n keyData.ti\n );\n }\n var bezierData = keyframeMetadata.bezierData;\n if (frameNum >= nextKeyTime || frameNum < keyTime) {\n var ind = frameNum >= nextKeyTime ? bezierData.points.length - 1 : 0;\n kLen = bezierData.points[ind].point.length;\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[ind].point[k];\n }\n } else {\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y, keyData.n).get;\n keyframeMetadata.__fnct = fnc;\n }\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n var distanceInLine = bezierData.segmentLength * perc;\n var segmentPerc;\n var addedLength = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastAddedLength : 0;\n j = caching.lastFrame < frameNum && caching._lastKeyframeIndex === i ? caching._lastPoint : 0;\n flag = true;\n jLen = bezierData.points.length;\n while (flag) {\n addedLength += bezierData.points[j].partialLength;\n if (distanceInLine === 0 || perc === 0 || j === bezierData.points.length - 1) {\n kLen = bezierData.points[j].point.length;\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k];\n }\n break;\n } else if (distanceInLine >= addedLength && distanceInLine < addedLength + bezierData.points[j + 1].partialLength) {\n segmentPerc = (distanceInLine - addedLength) / bezierData.points[j + 1].partialLength;\n kLen = bezierData.points[j].point.length;\n for (k = 0; k < kLen; k += 1) {\n newValue[k] = bezierData.points[j].point[k] + (bezierData.points[j + 1].point[k] - bezierData.points[j].point[k]) * segmentPerc;\n }\n break;\n }\n if (j < jLen - 1) {\n j += 1;\n } else {\n flag = false;\n }\n }\n caching._lastPoint = j;\n caching._lastAddedLength = addedLength - bezierData.points[j].partialLength;\n caching._lastKeyframeIndex = i;\n }\n } else {\n var outX;\n var outY;\n var inX;\n var inY;\n var keyValue;\n len = keyData.s.length;\n endValue = nextKeyData.s || keyData.e;\n if (this.sh && keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n newValue[0] = endValue[0];\n newValue[1] = endValue[1];\n newValue[2] = endValue[2];\n } else if (frameNum <= keyTime) {\n newValue[0] = keyData.s[0];\n newValue[1] = keyData.s[1];\n newValue[2] = keyData.s[2];\n } else {\n var quatStart = createQuaternion(keyData.s);\n var quatEnd = createQuaternion(endValue);\n var time = (frameNum - keyTime) / (nextKeyTime - keyTime);\n quaternionToEuler(newValue, slerp(quatStart, quatEnd, time));\n }\n } else {\n for (i = 0; i < len; i += 1) {\n if (keyData.h !== 1) {\n if (frameNum >= nextKeyTime) {\n perc = 1;\n } else if (frameNum < keyTime) {\n perc = 0;\n } else {\n if (keyData.o.x.constructor === Array) {\n if (!keyframeMetadata.__fnct) {\n keyframeMetadata.__fnct = [];\n }\n if (!keyframeMetadata.__fnct[i]) {\n outX = keyData.o.x[i] === void 0 ? keyData.o.x[0] : keyData.o.x[i];\n outY = keyData.o.y[i] === void 0 ? keyData.o.y[0] : keyData.o.y[i];\n inX = keyData.i.x[i] === void 0 ? keyData.i.x[0] : keyData.i.x[i];\n inY = keyData.i.y[i] === void 0 ? keyData.i.y[0] : keyData.i.y[i];\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyframeMetadata.__fnct[i] = fnc;\n } else {\n fnc = keyframeMetadata.__fnct[i];\n }\n } else if (!keyframeMetadata.__fnct) {\n outX = keyData.o.x;\n outY = keyData.o.y;\n inX = keyData.i.x;\n inY = keyData.i.y;\n fnc = BezierFactory.getBezierEasing(outX, outY, inX, inY).get;\n keyData.keyframeMetadata = fnc;\n } else {\n fnc = keyframeMetadata.__fnct;\n }\n perc = fnc((frameNum - keyTime) / (nextKeyTime - keyTime));\n }\n }\n endValue = nextKeyData.s || keyData.e;\n keyValue = keyData.h === 1 ? keyData.s[i] : keyData.s[i] + (endValue[i] - keyData.s[i]) * perc;\n if (this.propType === \"multidimensional\") {\n newValue[i] = keyValue;\n } else {\n newValue = keyValue;\n }\n }\n }\n }\n caching.lastIndex = iterationIndex;\n return newValue;\n }\n function slerp(a, b, t) {\n var out = [];\n var ax = a[0];\n var ay = a[1];\n var az = a[2];\n var aw = a[3];\n var bx = b[0];\n var by = b[1];\n var bz = b[2];\n var bw = b[3];\n var omega;\n var cosom;\n var sinom;\n var scale0;\n var scale1;\n cosom = ax * bx + ay * by + az * bz + aw * bw;\n if (cosom < 0) {\n cosom = -cosom;\n bx = -bx;\n by = -by;\n bz = -bz;\n bw = -bw;\n }\n if (1 - cosom > 1e-6) {\n omega = Math.acos(cosom);\n sinom = Math.sin(omega);\n scale0 = Math.sin((1 - t) * omega) / sinom;\n scale1 = Math.sin(t * omega) / sinom;\n } else {\n scale0 = 1 - t;\n scale1 = t;\n }\n out[0] = scale0 * ax + scale1 * bx;\n out[1] = scale0 * ay + scale1 * by;\n out[2] = scale0 * az + scale1 * bz;\n out[3] = scale0 * aw + scale1 * bw;\n return out;\n }\n function quaternionToEuler(out, quat) {\n var qx = quat[0];\n var qy = quat[1];\n var qz = quat[2];\n var qw = quat[3];\n var heading = Math.atan2(2 * qy * qw - 2 * qx * qz, 1 - 2 * qy * qy - 2 * qz * qz);\n var attitude = Math.asin(2 * qx * qy + 2 * qz * qw);\n var bank = Math.atan2(2 * qx * qw - 2 * qy * qz, 1 - 2 * qx * qx - 2 * qz * qz);\n out[0] = heading / degToRads;\n out[1] = attitude / degToRads;\n out[2] = bank / degToRads;\n }\n function createQuaternion(values) {\n var heading = values[0] * degToRads;\n var attitude = values[1] * degToRads;\n var bank = values[2] * degToRads;\n var c1 = Math.cos(heading / 2);\n var c2 = Math.cos(attitude / 2);\n var c3 = Math.cos(bank / 2);\n var s1 = Math.sin(heading / 2);\n var s2 = Math.sin(attitude / 2);\n var s3 = Math.sin(bank / 2);\n var w = c1 * c2 * c3 - s1 * s2 * s3;\n var x = s1 * s2 * c3 + c1 * c2 * s3;\n var y = s1 * c2 * c3 + c1 * s2 * s3;\n var z = c1 * s2 * c3 - s1 * c2 * s3;\n return [x, y, z, w];\n }\n function getValueAtCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n if (!(frameNum === this._caching.lastFrame || this._caching.lastFrame !== initFrame && (this._caching.lastFrame >= endTime && frameNum >= endTime || this._caching.lastFrame < initTime && frameNum < initTime))) {\n if (this._caching.lastFrame >= frameNum) {\n this._caching._lastKeyframeIndex = -1;\n this._caching.lastIndex = 0;\n }\n var renderResult = this.interpolateValue(frameNum, this._caching);\n this.pv = renderResult;\n }\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n function setVValue(val) {\n var multipliedValue;\n if (this.propType === \"unidimensional\") {\n multipliedValue = val * this.mult;\n if (mathAbs(this.v - multipliedValue) > 1e-5) {\n this.v = multipliedValue;\n this._mdf = true;\n }\n } else {\n var i = 0;\n var len = this.v.length;\n while (i < len) {\n multipliedValue = val[i] * this.mult;\n if (mathAbs(this.v[i] - multipliedValue) > 1e-5) {\n this.v[i] = multipliedValue;\n this._mdf = true;\n }\n i += 1;\n }\n }\n }\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) {\n return;\n }\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n this.lock = true;\n this._mdf = this._isFirstFrame;\n var i;\n var len = this.effectsSequence.length;\n var finalValue = this.kf ? this.pv : this.data.k;\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n this.setVValue(finalValue);\n this._isFirstFrame = false;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n function ValueProperty(elem, data, mult, container) {\n this.propType = \"unidimensional\";\n this.mult = mult || 1;\n this.data = data;\n this.v = mult ? data.k * mult : data.k;\n this.pv = data.k;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.vel = 0;\n this.effectsSequence = [];\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n function MultiDimensionalProperty(elem, data, mult, container) {\n this.propType = \"multidimensional\";\n this.mult = mult || 1;\n this.data = data;\n this._mdf = false;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.k = false;\n this.kf = false;\n this.frameId = -1;\n var i;\n var len = data.k.length;\n this.v = createTypedArray(\"float32\", len);\n this.pv = createTypedArray(\"float32\", len);\n this.vel = createTypedArray(\"float32\", len);\n for (i = 0; i < len; i += 1) {\n this.v[i] = data.k[i] * this.mult;\n this.pv[i] = data.k[i];\n }\n this._isFirstFrame = true;\n this.effectsSequence = [];\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.addEffect = addEffect;\n }\n function KeyframedValueProperty(elem, data, mult, container) {\n this.propType = \"unidimensional\";\n this.keyframes = data.k;\n this.keyframesMetadata = [];\n this.offsetTime = elem.data.st;\n this.frameId = -1;\n this._caching = {\n lastFrame: initFrame,\n lastIndex: 0,\n value: 0,\n _lastKeyframeIndex: -1\n };\n this.k = true;\n this.kf = true;\n this.data = data;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.v = initFrame;\n this.pv = initFrame;\n this._isFirstFrame = true;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.addEffect = addEffect;\n }\n function KeyframedMultidimensionalProperty(elem, data, mult, container) {\n this.propType = \"multidimensional\";\n var i;\n var len = data.k.length;\n var s;\n var e;\n var to;\n var ti;\n for (i = 0; i < len - 1; i += 1) {\n if (data.k[i].to && data.k[i].s && data.k[i + 1] && data.k[i + 1].s) {\n s = data.k[i].s;\n e = data.k[i + 1].s;\n to = data.k[i].to;\n ti = data.k[i].ti;\n if (s.length === 2 && !(s[0] === e[0] && s[1] === e[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], s[0] + to[0], s[1] + to[1]) && bez.pointOnLine2D(s[0], s[1], e[0], e[1], e[0] + ti[0], e[1] + ti[1]) || s.length === 3 && !(s[0] === e[0] && s[1] === e[1] && s[2] === e[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], s[0] + to[0], s[1] + to[1], s[2] + to[2]) && bez.pointOnLine3D(s[0], s[1], s[2], e[0], e[1], e[2], e[0] + ti[0], e[1] + ti[1], e[2] + ti[2])) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n if (s[0] === e[0] && s[1] === e[1] && to[0] === 0 && to[1] === 0 && ti[0] === 0 && ti[1] === 0) {\n if (s.length === 2 || s[2] === e[2] && to[2] === 0 && ti[2] === 0) {\n data.k[i].to = null;\n data.k[i].ti = null;\n }\n }\n }\n }\n this.effectsSequence = [getValueAtCurrentTime.bind(this)];\n this.data = data;\n this.keyframes = data.k;\n this.keyframesMetadata = [];\n this.offsetTime = elem.data.st;\n this.k = true;\n this.kf = true;\n this._isFirstFrame = true;\n this.mult = mult || 1;\n this.elem = elem;\n this.container = container;\n this.comp = elem.comp;\n this.getValue = processEffectsSequence;\n this.setVValue = setVValue;\n this.interpolateValue = interpolateValue;\n this.frameId = -1;\n var arrLen = data.k[0].s.length;\n this.v = createTypedArray(\"float32\", arrLen);\n this.pv = createTypedArray(\"float32\", arrLen);\n for (i = 0; i < arrLen; i += 1) {\n this.v[i] = initFrame;\n this.pv[i] = initFrame;\n }\n this._caching = { lastFrame: initFrame, lastIndex: 0, value: createTypedArray(\"float32\", arrLen) };\n this.addEffect = addEffect;\n }\n function getProp(elem, data, type, mult, container) {\n var p;\n if (!data.k.length) {\n p = new ValueProperty(elem, data, mult, container);\n } else if (typeof data.k[0] === \"number\") {\n p = new MultiDimensionalProperty(elem, data, mult, container);\n } else {\n switch (type) {\n case 0:\n p = new KeyframedValueProperty(elem, data, mult, container);\n break;\n case 1:\n p = new KeyframedMultidimensionalProperty(elem, data, mult, container);\n break;\n }\n }\n if (p.effectsSequence.length) {\n container.addDynamicProperty(p);\n }\n return p;\n }\n var ob = {\n getProp\n };\n return ob;\n }();\n function DynamicPropertyContainer() {\n }\n DynamicPropertyContainer.prototype = {\n addDynamicProperty: function(prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n this.container.addDynamicProperty(this);\n this._isAnimated = true;\n }\n },\n iterateDynamicProperties: function() {\n this._mdf = false;\n var i;\n var len = this.dynamicProperties.length;\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n if (this.dynamicProperties[i]._mdf) {\n this._mdf = true;\n }\n }\n },\n initDynamicPropertyContainer: function(container) {\n this.container = container;\n this.dynamicProperties = [];\n this._mdf = false;\n this._isAnimated = false;\n }\n };\n const pointPool = function() {\n function create() {\n return createTypedArray(\"float32\", 2);\n }\n return poolFactory(8, create);\n }();\n function ShapePath() {\n this.c = false;\n this._length = 0;\n this._maxLength = 8;\n this.v = createSizedArray(this._maxLength);\n this.o = createSizedArray(this._maxLength);\n this.i = createSizedArray(this._maxLength);\n }\n ShapePath.prototype.setPathData = function(closed, len) {\n this.c = closed;\n this.setLength(len);\n var i = 0;\n while (i < len) {\n this.v[i] = pointPool.newElement();\n this.o[i] = pointPool.newElement();\n this.i[i] = pointPool.newElement();\n i += 1;\n }\n };\n ShapePath.prototype.setLength = function(len) {\n while (this._maxLength < len) {\n this.doubleArrayLength();\n }\n this._length = len;\n };\n ShapePath.prototype.doubleArrayLength = function() {\n this.v = this.v.concat(createSizedArray(this._maxLength));\n this.i = this.i.concat(createSizedArray(this._maxLength));\n this.o = this.o.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n };\n ShapePath.prototype.setXYAt = function(x, y, type, pos, replace) {\n var arr;\n this._length = Math.max(this._length, pos + 1);\n if (this._length >= this._maxLength) {\n this.doubleArrayLength();\n }\n switch (type) {\n case \"v\":\n arr = this.v;\n break;\n case \"i\":\n arr = this.i;\n break;\n case \"o\":\n arr = this.o;\n break;\n default:\n arr = [];\n break;\n }\n if (!arr[pos] || arr[pos] && !replace) {\n arr[pos] = pointPool.newElement();\n }\n arr[pos][0] = x;\n arr[pos][1] = y;\n };\n ShapePath.prototype.setTripleAt = function(vX, vY, oX, oY, iX, iY, pos, replace) {\n this.setXYAt(vX, vY, \"v\", pos, replace);\n this.setXYAt(oX, oY, \"o\", pos, replace);\n this.setXYAt(iX, iY, \"i\", pos, replace);\n };\n ShapePath.prototype.reverse = function() {\n var newPath = new ShapePath();\n newPath.setPathData(this.c, this._length);\n var vertices = this.v;\n var outPoints = this.o;\n var inPoints = this.i;\n var init = 0;\n if (this.c) {\n newPath.setTripleAt(\n vertices[0][0],\n vertices[0][1],\n inPoints[0][0],\n inPoints[0][1],\n outPoints[0][0],\n outPoints[0][1],\n 0,\n false\n );\n init = 1;\n }\n var cnt = this._length - 1;\n var len = this._length;\n var i;\n for (i = init; i < len; i += 1) {\n newPath.setTripleAt(\n vertices[cnt][0],\n vertices[cnt][1],\n inPoints[cnt][0],\n inPoints[cnt][1],\n outPoints[cnt][0],\n outPoints[cnt][1],\n i,\n false\n );\n cnt -= 1;\n }\n return newPath;\n };\n const shapePool = function() {\n function create() {\n return new ShapePath();\n }\n function release(shapePath) {\n var len = shapePath._length;\n var i;\n for (i = 0; i < len; i += 1) {\n pointPool.release(shapePath.v[i]);\n pointPool.release(shapePath.i[i]);\n pointPool.release(shapePath.o[i]);\n shapePath.v[i] = null;\n shapePath.i[i] = null;\n shapePath.o[i] = null;\n }\n shapePath._length = 0;\n shapePath.c = false;\n }\n function clone(shape) {\n var cloned = factory.newElement();\n var i;\n var len = shape._length === void 0 ? shape.v.length : shape._length;\n cloned.setLength(len);\n cloned.c = shape.c;\n for (i = 0; i < len; i += 1) {\n cloned.setTripleAt(shape.v[i][0], shape.v[i][1], shape.o[i][0], shape.o[i][1], shape.i[i][0], shape.i[i][1], i);\n }\n return cloned;\n }\n var factory = poolFactory(4, create, release);\n factory.clone = clone;\n return factory;\n }();\n function ShapeCollection() {\n this._length = 0;\n this._maxLength = 4;\n this.shapes = createSizedArray(this._maxLength);\n }\n ShapeCollection.prototype.addShape = function(shapeData) {\n if (this._length === this._maxLength) {\n this.shapes = this.shapes.concat(createSizedArray(this._maxLength));\n this._maxLength *= 2;\n }\n this.shapes[this._length] = shapeData;\n this._length += 1;\n };\n ShapeCollection.prototype.releaseShapes = function() {\n var i;\n for (i = 0; i < this._length; i += 1) {\n shapePool.release(this.shapes[i]);\n }\n this._length = 0;\n };\n const shapeCollectionPool = function() {\n var ob = {\n newShapeCollection,\n release\n };\n var _length = 0;\n var _maxLength = 4;\n var pool = createSizedArray(_maxLength);\n function newShapeCollection() {\n var shapeCollection;\n if (_length) {\n _length -= 1;\n shapeCollection = pool[_length];\n } else {\n shapeCollection = new ShapeCollection();\n }\n return shapeCollection;\n }\n function release(shapeCollection) {\n var i;\n var len = shapeCollection._length;\n for (i = 0; i < len; i += 1) {\n shapePool.release(shapeCollection.shapes[i]);\n }\n shapeCollection._length = 0;\n if (_length === _maxLength) {\n pool = pooling.double(pool);\n _maxLength *= 2;\n }\n pool[_length] = shapeCollection;\n _length += 1;\n }\n return ob;\n }();\n const ShapePropertyFactory = function() {\n var initFrame = -999999;\n function interpolateShape(frameNum, previousValue, caching) {\n var iterationIndex = caching.lastIndex;\n var keyPropS;\n var keyPropE;\n var isHold;\n var j;\n var k;\n var jLen;\n var kLen;\n var perc;\n var vertexValue;\n var kf = this.keyframes;\n if (frameNum < kf[0].t - this.offsetTime) {\n keyPropS = kf[0].s[0];\n isHold = true;\n iterationIndex = 0;\n } else if (frameNum >= kf[kf.length - 1].t - this.offsetTime) {\n keyPropS = kf[kf.length - 1].s ? kf[kf.length - 1].s[0] : kf[kf.length - 2].e[0];\n isHold = true;\n } else {\n var i = iterationIndex;\n var len = kf.length - 1;\n var flag = true;\n var keyData;\n var nextKeyData;\n var keyframeMetadata;\n while (flag) {\n keyData = kf[i];\n nextKeyData = kf[i + 1];\n if (nextKeyData.t - this.offsetTime > frameNum) {\n break;\n }\n if (i < len - 1) {\n i += 1;\n } else {\n flag = false;\n }\n }\n keyframeMetadata = this.keyframesMetadata[i] || {};\n isHold = keyData.h === 1;\n iterationIndex = i;\n if (!isHold) {\n if (frameNum >= nextKeyData.t - this.offsetTime) {\n perc = 1;\n } else if (frameNum < keyData.t - this.offsetTime) {\n perc = 0;\n } else {\n var fnc;\n if (keyframeMetadata.__fnct) {\n fnc = keyframeMetadata.__fnct;\n } else {\n fnc = BezierFactory.getBezierEasing(keyData.o.x, keyData.o.y, keyData.i.x, keyData.i.y).get;\n keyframeMetadata.__fnct = fnc;\n }\n perc = fnc(\n (frameNum - (keyData.t - this.offsetTime)) / (nextKeyData.t - this.offsetTime - (keyData.t - this.offsetTime))\n );\n }\n keyPropE = nextKeyData.s ? nextKeyData.s[0] : keyData.e[0];\n }\n keyPropS = keyData.s[0];\n }\n jLen = previousValue._length;\n kLen = keyPropS.i[0].length;\n caching.lastIndex = iterationIndex;\n for (j = 0; j < jLen; j += 1) {\n for (k = 0; k < kLen; k += 1) {\n vertexValue = isHold ? keyPropS.i[j][k] : keyPropS.i[j][k] + (keyPropE.i[j][k] - keyPropS.i[j][k]) * perc;\n previousValue.i[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.o[j][k] : keyPropS.o[j][k] + (keyPropE.o[j][k] - keyPropS.o[j][k]) * perc;\n previousValue.o[j][k] = vertexValue;\n vertexValue = isHold ? keyPropS.v[j][k] : keyPropS.v[j][k] + (keyPropE.v[j][k] - keyPropS.v[j][k]) * perc;\n previousValue.v[j][k] = vertexValue;\n }\n }\n }\n function interpolateShapeCurrentTime() {\n var frameNum = this.comp.renderedFrame - this.offsetTime;\n var initTime = this.keyframes[0].t - this.offsetTime;\n var endTime = this.keyframes[this.keyframes.length - 1].t - this.offsetTime;\n var lastFrame = this._caching.lastFrame;\n if (!(lastFrame !== initFrame && (lastFrame < initTime && frameNum < initTime || lastFrame > endTime && frameNum > endTime))) {\n this._caching.lastIndex = lastFrame < frameNum ? this._caching.lastIndex : 0;\n this.interpolateShape(frameNum, this.pv, this._caching);\n }\n this._caching.lastFrame = frameNum;\n return this.pv;\n }\n function resetShape() {\n this.paths = this.localShapeCollection;\n }\n function shapesEqual(shape1, shape2) {\n if (shape1._length !== shape2._length || shape1.c !== shape2.c) {\n return false;\n }\n var i;\n var len = shape1._length;\n for (i = 0; i < len; i += 1) {\n if (shape1.v[i][0] !== shape2.v[i][0] || shape1.v[i][1] !== shape2.v[i][1] || shape1.o[i][0] !== shape2.o[i][0] || shape1.o[i][1] !== shape2.o[i][1] || shape1.i[i][0] !== shape2.i[i][0] || shape1.i[i][1] !== shape2.i[i][1]) {\n return false;\n }\n }\n return true;\n }\n function setVValue(newPath) {\n if (!shapesEqual(this.v, newPath)) {\n this.v = shapePool.clone(newPath);\n this.localShapeCollection.releaseShapes();\n this.localShapeCollection.addShape(this.v);\n this._mdf = true;\n this.paths = this.localShapeCollection;\n }\n }\n function processEffectsSequence() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n if (!this.effectsSequence.length) {\n this._mdf = false;\n return;\n }\n if (this.lock) {\n this.setVValue(this.pv);\n return;\n }\n this.lock = true;\n this._mdf = false;\n var finalValue;\n if (this.kf) {\n finalValue = this.pv;\n } else if (this.data.ks) {\n finalValue = this.data.ks.k;\n } else {\n finalValue = this.data.pt.k;\n }\n var i;\n var len = this.effectsSequence.length;\n for (i = 0; i < len; i += 1) {\n finalValue = this.effectsSequence[i](finalValue);\n }\n this.setVValue(finalValue);\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n }\n function ShapeProperty(elem, data, type) {\n this.propType = \"shape\";\n this.comp = elem.comp;\n this.container = elem;\n this.elem = elem;\n this.data = data;\n this.k = false;\n this.kf = false;\n this._mdf = false;\n var pathData = type === 3 ? data.pt.k : data.ks.k;\n this.v = shapePool.clone(pathData);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.reset = resetShape;\n this.effectsSequence = [];\n }\n function addEffect(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.container.addDynamicProperty(this);\n }\n ShapeProperty.prototype.interpolateShape = interpolateShape;\n ShapeProperty.prototype.getValue = processEffectsSequence;\n ShapeProperty.prototype.setVValue = setVValue;\n ShapeProperty.prototype.addEffect = addEffect;\n function KeyframedShapeProperty(elem, data, type) {\n this.propType = \"shape\";\n this.comp = elem.comp;\n this.elem = elem;\n this.container = elem;\n this.offsetTime = elem.data.st;\n this.keyframes = type === 3 ? data.pt.k : data.ks.k;\n this.keyframesMetadata = [];\n this.k = true;\n this.kf = true;\n var len = this.keyframes[0].s[0].i.length;\n this.v = shapePool.newElement();\n this.v.setPathData(this.keyframes[0].s[0].c, len);\n this.pv = shapePool.clone(this.v);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.paths.addShape(this.v);\n this.lastFrame = initFrame;\n this.reset = resetShape;\n this._caching = { lastFrame: initFrame, lastIndex: 0 };\n this.effectsSequence = [interpolateShapeCurrentTime.bind(this)];\n }\n KeyframedShapeProperty.prototype.getValue = processEffectsSequence;\n KeyframedShapeProperty.prototype.interpolateShape = interpolateShape;\n KeyframedShapeProperty.prototype.setVValue = setVValue;\n KeyframedShapeProperty.prototype.addEffect = addEffect;\n var EllShapeProperty = function() {\n var cPoint = roundCorner;\n function EllShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.setPathData(true, 4);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.paths = this.localShapeCollection;\n this.localShapeCollection.addShape(this.v);\n this.d = data.d;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertEllToPath();\n }\n }\n EllShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n if (this._mdf) {\n this.convertEllToPath();\n }\n },\n convertEllToPath: function() {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var s0 = this.s.v[0] / 2;\n var s1 = this.s.v[1] / 2;\n var _cw = this.d !== 3;\n var _v = this.v;\n _v.v[0][0] = p0;\n _v.v[0][1] = p1 - s1;\n _v.v[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.v[1][1] = p1;\n _v.v[2][0] = p0;\n _v.v[2][1] = p1 + s1;\n _v.v[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.v[3][1] = p1;\n _v.i[0][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.i[0][1] = p1 - s1;\n _v.i[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.i[1][1] = p1 - s1 * cPoint;\n _v.i[2][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.i[2][1] = p1 + s1;\n _v.i[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.i[3][1] = p1 + s1 * cPoint;\n _v.o[0][0] = _cw ? p0 + s0 * cPoint : p0 - s0 * cPoint;\n _v.o[0][1] = p1 - s1;\n _v.o[1][0] = _cw ? p0 + s0 : p0 - s0;\n _v.o[1][1] = p1 + s1 * cPoint;\n _v.o[2][0] = _cw ? p0 - s0 * cPoint : p0 + s0 * cPoint;\n _v.o[2][1] = p1 + s1;\n _v.o[3][0] = _cw ? p0 - s0 : p0 + s0;\n _v.o[3][1] = p1 - s1 * cPoint;\n }\n };\n extendPrototype([DynamicPropertyContainer], EllShapePropertyFactory);\n return EllShapePropertyFactory;\n }();\n var StarShapeProperty = function() {\n function StarShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.setPathData(true, 0);\n this.elem = elem;\n this.comp = elem.comp;\n this.data = data;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n if (data.sy === 1) {\n this.ir = PropertyFactory.getProp(elem, data.ir, 0, 0, this);\n this.is = PropertyFactory.getProp(elem, data.is, 0, 0.01, this);\n this.convertToPath = this.convertStarToPath;\n } else {\n this.convertToPath = this.convertPolygonToPath;\n }\n this.pt = PropertyFactory.getProp(elem, data.pt, 0, 0, this);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, degToRads, this);\n this.or = PropertyFactory.getProp(elem, data.or, 0, 0, this);\n this.os = PropertyFactory.getProp(elem, data.os, 0, 0.01, this);\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertToPath();\n }\n }\n StarShapePropertyFactory.prototype = {\n reset: resetShape,\n getValue: function() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n if (this._mdf) {\n this.convertToPath();\n }\n },\n convertStarToPath: function() {\n var numPts = Math.floor(this.pt.v) * 2;\n var angle = Math.PI * 2 / numPts;\n var longFlag = true;\n var longRad = this.or.v;\n var shortRad = this.ir.v;\n var longRound = this.os.v;\n var shortRound = this.is.v;\n var longPerimSegment = 2 * Math.PI * longRad / (numPts * 2);\n var shortPerimSegment = 2 * Math.PI * shortRad / (numPts * 2);\n var i;\n var rad;\n var roundness;\n var perimSegment;\n var currentAng = -Math.PI / 2;\n currentAng += this.r.v;\n var dir = this.data.d === 3 ? -1 : 1;\n this.v._length = 0;\n for (i = 0; i < numPts; i += 1) {\n rad = longFlag ? longRad : shortRad;\n roundness = longFlag ? longRound : shortRound;\n perimSegment = longFlag ? longPerimSegment : shortPerimSegment;\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(\n x,\n y,\n x - ox * perimSegment * roundness * dir,\n y - oy * perimSegment * roundness * dir,\n x + ox * perimSegment * roundness * dir,\n y + oy * perimSegment * roundness * dir,\n i,\n true\n );\n longFlag = !longFlag;\n currentAng += angle * dir;\n }\n },\n convertPolygonToPath: function() {\n var numPts = Math.floor(this.pt.v);\n var angle = Math.PI * 2 / numPts;\n var rad = this.or.v;\n var roundness = this.os.v;\n var perimSegment = 2 * Math.PI * rad / (numPts * 4);\n var i;\n var currentAng = -Math.PI * 0.5;\n var dir = this.data.d === 3 ? -1 : 1;\n currentAng += this.r.v;\n this.v._length = 0;\n for (i = 0; i < numPts; i += 1) {\n var x = rad * Math.cos(currentAng);\n var y = rad * Math.sin(currentAng);\n var ox = x === 0 && y === 0 ? 0 : y / Math.sqrt(x * x + y * y);\n var oy = x === 0 && y === 0 ? 0 : -x / Math.sqrt(x * x + y * y);\n x += +this.p.v[0];\n y += +this.p.v[1];\n this.v.setTripleAt(\n x,\n y,\n x - ox * perimSegment * roundness * dir,\n y - oy * perimSegment * roundness * dir,\n x + ox * perimSegment * roundness * dir,\n y + oy * perimSegment * roundness * dir,\n i,\n true\n );\n currentAng += angle * dir;\n }\n this.paths.length = 0;\n this.paths[0] = this.v;\n }\n };\n extendPrototype([DynamicPropertyContainer], StarShapePropertyFactory);\n return StarShapePropertyFactory;\n }();\n var RectShapeProperty = function() {\n function RectShapePropertyFactory(elem, data) {\n this.v = shapePool.newElement();\n this.v.c = true;\n this.localShapeCollection = shapeCollectionPool.newShapeCollection();\n this.localShapeCollection.addShape(this.v);\n this.paths = this.localShapeCollection;\n this.elem = elem;\n this.comp = elem.comp;\n this.frameId = -1;\n this.d = data.d;\n this.initDynamicPropertyContainer(elem);\n this.p = PropertyFactory.getProp(elem, data.p, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, 0, this);\n this.r = PropertyFactory.getProp(elem, data.r, 0, 0, this);\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.k = false;\n this.convertRectToPath();\n }\n }\n RectShapePropertyFactory.prototype = {\n convertRectToPath: function() {\n var p0 = this.p.v[0];\n var p1 = this.p.v[1];\n var v0 = this.s.v[0] / 2;\n var v1 = this.s.v[1] / 2;\n var round = bmMin(v0, v1, this.r.v);\n var cPoint = round * (1 - roundCorner);\n this.v._length = 0;\n if (this.d === 2 || this.d === 1) {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, 0, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, p0 + v0, p1 + v1 - round, 1, true);\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, 2, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0 + round, p1 + v1, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, 4, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1 + round, 5, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, 6, true);\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, p0 + v0 - round, p1 - v1, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0 + cPoint, p1 + v1, p0 - v0, p1 + v1, 2);\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0, p1 - v1 + cPoint, p0 - v0, p1 - v1, 3);\n }\n } else {\n this.v.setTripleAt(p0 + v0, p1 - v1 + round, p0 + v0, p1 - v1 + cPoint, p0 + v0, p1 - v1 + round, 0, true);\n if (round !== 0) {\n this.v.setTripleAt(p0 + v0 - round, p1 - v1, p0 + v0 - round, p1 - v1, p0 + v0 - cPoint, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0 + round, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0 + round, p1 - v1, 2, true);\n this.v.setTripleAt(p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + round, p0 - v0, p1 - v1 + cPoint, 3, true);\n this.v.setTripleAt(p0 - v0, p1 + v1 - round, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1 - round, 4, true);\n this.v.setTripleAt(p0 - v0 + round, p1 + v1, p0 - v0 + round, p1 + v1, p0 - v0 + cPoint, p1 + v1, 5, true);\n this.v.setTripleAt(p0 + v0 - round, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0 - round, p1 + v1, 6, true);\n this.v.setTripleAt(p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - round, p0 + v0, p1 + v1 - cPoint, 7, true);\n } else {\n this.v.setTripleAt(p0 - v0, p1 - v1, p0 - v0 + cPoint, p1 - v1, p0 - v0, p1 - v1, 1, true);\n this.v.setTripleAt(p0 - v0, p1 + v1, p0 - v0, p1 + v1 - cPoint, p0 - v0, p1 + v1, 2, true);\n this.v.setTripleAt(p0 + v0, p1 + v1, p0 + v0 - cPoint, p1 + v1, p0 + v0, p1 + v1, 3, true);\n }\n }\n },\n getValue: function() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n if (this._mdf) {\n this.convertRectToPath();\n }\n },\n reset: resetShape\n };\n extendPrototype([DynamicPropertyContainer], RectShapePropertyFactory);\n return RectShapePropertyFactory;\n }();\n function getShapeProp(elem, data, type) {\n var prop;\n if (type === 3 || type === 4) {\n var dataProp = type === 3 ? data.pt : data.ks;\n var keys = dataProp.k;\n if (keys.length) {\n prop = new KeyframedShapeProperty(elem, data, type);\n } else {\n prop = new ShapeProperty(elem, data, type);\n }\n } else if (type === 5) {\n prop = new RectShapeProperty(elem, data);\n } else if (type === 6) {\n prop = new EllShapeProperty(elem, data);\n } else if (type === 7) {\n prop = new StarShapeProperty(elem, data);\n }\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n return prop;\n }\n function getConstructorFunction() {\n return ShapeProperty;\n }\n function getKeyframedConstructorFunction() {\n return KeyframedShapeProperty;\n }\n var ob = {};\n ob.getShapeProp = getShapeProp;\n ob.getConstructorFunction = getConstructorFunction;\n ob.getKeyframedConstructorFunction = getKeyframedConstructorFunction;\n return ob;\n }();\n /*!\n Transformation Matrix v2.0\n (c) Epistemex 2014-2015\n www.epistemex.com\n By Ken Fyrstenberg\n Contributions by leeoniya.\n License: MIT, header required.\n */\n const Matrix = function() {\n var _cos = Math.cos;\n var _sin = Math.sin;\n var _tan = Math.tan;\n var _rnd = Math.round;\n function reset() {\n this.props[0] = 1;\n this.props[1] = 0;\n this.props[2] = 0;\n this.props[3] = 0;\n this.props[4] = 0;\n this.props[5] = 1;\n this.props[6] = 0;\n this.props[7] = 0;\n this.props[8] = 0;\n this.props[9] = 0;\n this.props[10] = 1;\n this.props[11] = 0;\n this.props[12] = 0;\n this.props[13] = 0;\n this.props[14] = 0;\n this.props[15] = 1;\n return this;\n }\n function rotate(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n function rotateX(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(1, 0, 0, 0, 0, mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1);\n }\n function rotateY(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(mCos, 0, mSin, 0, 0, 1, 0, 0, -mSin, 0, mCos, 0, 0, 0, 0, 1);\n }\n function rotateZ(angle) {\n if (angle === 0) {\n return this;\n }\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n function shear(sx, sy) {\n return this._t(1, sy, sx, 1, 0, 0);\n }\n function skew(ax, ay) {\n return this.shear(_tan(ax), _tan(ay));\n }\n function skewFromAxis(ax, angle) {\n var mCos = _cos(angle);\n var mSin = _sin(angle);\n return this._t(mCos, mSin, 0, 0, -mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(1, 0, 0, 0, _tan(ax), 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1)._t(mCos, -mSin, 0, 0, mSin, mCos, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1);\n }\n function scale(sx, sy, sz) {\n if (!sz && sz !== 0) {\n sz = 1;\n }\n if (sx === 1 && sy === 1 && sz === 1) {\n return this;\n }\n return this._t(sx, 0, 0, 0, 0, sy, 0, 0, 0, 0, sz, 0, 0, 0, 0, 1);\n }\n function setTransform(a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p) {\n this.props[0] = a;\n this.props[1] = b;\n this.props[2] = c;\n this.props[3] = d;\n this.props[4] = e;\n this.props[5] = f;\n this.props[6] = g;\n this.props[7] = h;\n this.props[8] = i;\n this.props[9] = j;\n this.props[10] = k;\n this.props[11] = l;\n this.props[12] = m;\n this.props[13] = n;\n this.props[14] = o;\n this.props[15] = p;\n return this;\n }\n function translate(tx, ty, tz) {\n tz = tz || 0;\n if (tx !== 0 || ty !== 0 || tz !== 0) {\n return this._t(1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, tx, ty, tz, 1);\n }\n return this;\n }\n function transform(a2, b2, c2, d2, e2, f2, g2, h2, i2, j2, k2, l2, m2, n2, o2, p2) {\n var _p = this.props;\n if (a2 === 1 && b2 === 0 && c2 === 0 && d2 === 0 && e2 === 0 && f2 === 1 && g2 === 0 && h2 === 0 && i2 === 0 && j2 === 0 && k2 === 1 && l2 === 0) {\n _p[12] = _p[12] * a2 + _p[15] * m2;\n _p[13] = _p[13] * f2 + _p[15] * n2;\n _p[14] = _p[14] * k2 + _p[15] * o2;\n _p[15] *= p2;\n this._identityCalculated = false;\n return this;\n }\n var a1 = _p[0];\n var b1 = _p[1];\n var c1 = _p[2];\n var d1 = _p[3];\n var e1 = _p[4];\n var f1 = _p[5];\n var g1 = _p[6];\n var h1 = _p[7];\n var i1 = _p[8];\n var j1 = _p[9];\n var k1 = _p[10];\n var l1 = _p[11];\n var m1 = _p[12];\n var n1 = _p[13];\n var o1 = _p[14];\n var p1 = _p[15];\n _p[0] = a1 * a2 + b1 * e2 + c1 * i2 + d1 * m2;\n _p[1] = a1 * b2 + b1 * f2 + c1 * j2 + d1 * n2;\n _p[2] = a1 * c2 + b1 * g2 + c1 * k2 + d1 * o2;\n _p[3] = a1 * d2 + b1 * h2 + c1 * l2 + d1 * p2;\n _p[4] = e1 * a2 + f1 * e2 + g1 * i2 + h1 * m2;\n _p[5] = e1 * b2 + f1 * f2 + g1 * j2 + h1 * n2;\n _p[6] = e1 * c2 + f1 * g2 + g1 * k2 + h1 * o2;\n _p[7] = e1 * d2 + f1 * h2 + g1 * l2 + h1 * p2;\n _p[8] = i1 * a2 + j1 * e2 + k1 * i2 + l1 * m2;\n _p[9] = i1 * b2 + j1 * f2 + k1 * j2 + l1 * n2;\n _p[10] = i1 * c2 + j1 * g2 + k1 * k2 + l1 * o2;\n _p[11] = i1 * d2 + j1 * h2 + k1 * l2 + l1 * p2;\n _p[12] = m1 * a2 + n1 * e2 + o1 * i2 + p1 * m2;\n _p[13] = m1 * b2 + n1 * f2 + o1 * j2 + p1 * n2;\n _p[14] = m1 * c2 + n1 * g2 + o1 * k2 + p1 * o2;\n _p[15] = m1 * d2 + n1 * h2 + o1 * l2 + p1 * p2;\n this._identityCalculated = false;\n return this;\n }\n function isIdentity() {\n if (!this._identityCalculated) {\n this._identity = !(this.props[0] !== 1 || this.props[1] !== 0 || this.props[2] !== 0 || this.props[3] !== 0 || this.props[4] !== 0 || this.props[5] !== 1 || this.props[6] !== 0 || this.props[7] !== 0 || this.props[8] !== 0 || this.props[9] !== 0 || this.props[10] !== 1 || this.props[11] !== 0 || this.props[12] !== 0 || this.props[13] !== 0 || this.props[14] !== 0 || this.props[15] !== 1);\n this._identityCalculated = true;\n }\n return this._identity;\n }\n function equals(matr) {\n var i = 0;\n while (i < 16) {\n if (matr.props[i] !== this.props[i]) {\n return false;\n }\n i += 1;\n }\n return true;\n }\n function clone(matr) {\n var i;\n for (i = 0; i < 16; i += 1) {\n matr.props[i] = this.props[i];\n }\n return matr;\n }\n function cloneFromProps(props) {\n var i;\n for (i = 0; i < 16; i += 1) {\n this.props[i] = props[i];\n }\n }\n function applyToPoint(x, y, z) {\n return {\n x: x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n y: x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n z: x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\n };\n }\n function applyToX(x, y, z) {\n return x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12];\n }\n function applyToY(x, y, z) {\n return x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13];\n }\n function applyToZ(x, y, z) {\n return x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14];\n }\n function getInverseMatrix() {\n var determinant = this.props[0] * this.props[5] - this.props[1] * this.props[4];\n var a = this.props[5] / determinant;\n var b = -this.props[1] / determinant;\n var c = -this.props[4] / determinant;\n var d = this.props[0] / determinant;\n var e = (this.props[4] * this.props[13] - this.props[5] * this.props[12]) / determinant;\n var f = -(this.props[0] * this.props[13] - this.props[1] * this.props[12]) / determinant;\n var inverseMatrix = new Matrix();\n inverseMatrix.props[0] = a;\n inverseMatrix.props[1] = b;\n inverseMatrix.props[4] = c;\n inverseMatrix.props[5] = d;\n inverseMatrix.props[12] = e;\n inverseMatrix.props[13] = f;\n return inverseMatrix;\n }\n function inversePoint(pt) {\n var inverseMatrix = this.getInverseMatrix();\n return inverseMatrix.applyToPointArray(pt[0], pt[1], pt[2] || 0);\n }\n function inversePoints(pts) {\n var i;\n var len = pts.length;\n var retPts = [];\n for (i = 0; i < len; i += 1) {\n retPts[i] = inversePoint(pts[i]);\n }\n return retPts;\n }\n function applyToTriplePoints(pt1, pt2, pt3) {\n var arr = createTypedArray(\"float32\", 6);\n if (this.isIdentity()) {\n arr[0] = pt1[0];\n arr[1] = pt1[1];\n arr[2] = pt2[0];\n arr[3] = pt2[1];\n arr[4] = pt3[0];\n arr[5] = pt3[1];\n } else {\n var p0 = this.props[0];\n var p1 = this.props[1];\n var p4 = this.props[4];\n var p5 = this.props[5];\n var p12 = this.props[12];\n var p13 = this.props[13];\n arr[0] = pt1[0] * p0 + pt1[1] * p4 + p12;\n arr[1] = pt1[0] * p1 + pt1[1] * p5 + p13;\n arr[2] = pt2[0] * p0 + pt2[1] * p4 + p12;\n arr[3] = pt2[0] * p1 + pt2[1] * p5 + p13;\n arr[4] = pt3[0] * p0 + pt3[1] * p4 + p12;\n arr[5] = pt3[0] * p1 + pt3[1] * p5 + p13;\n }\n return arr;\n }\n function applyToPointArray(x, y, z) {\n var arr;\n if (this.isIdentity()) {\n arr = [x, y, z];\n } else {\n arr = [\n x * this.props[0] + y * this.props[4] + z * this.props[8] + this.props[12],\n x * this.props[1] + y * this.props[5] + z * this.props[9] + this.props[13],\n x * this.props[2] + y * this.props[6] + z * this.props[10] + this.props[14]\n ];\n }\n return arr;\n }\n function applyToPointStringified(x, y) {\n if (this.isIdentity()) {\n return x + \",\" + y;\n }\n var _p = this.props;\n return Math.round((x * _p[0] + y * _p[4] + _p[12]) * 100) / 100 + \",\" + Math.round((x * _p[1] + y * _p[5] + _p[13]) * 100) / 100;\n }\n function toCSS() {\n var i = 0;\n var props = this.props;\n var cssValue = \"matrix3d(\";\n var v = 1e4;\n while (i < 16) {\n cssValue += _rnd(props[i] * v) / v;\n cssValue += i === 15 ? \")\" : \",\";\n i += 1;\n }\n return cssValue;\n }\n function roundMatrixProperty(val) {\n var v = 1e4;\n if (val < 1e-6 && val > 0 || val > -1e-6 && val < 0) {\n return _rnd(val * v) / v;\n }\n return val;\n }\n function to2dCSS() {\n var props = this.props;\n var _a = roundMatrixProperty(props[0]);\n var _b = roundMatrixProperty(props[1]);\n var _c = roundMatrixProperty(props[4]);\n var _d = roundMatrixProperty(props[5]);\n var _e = roundMatrixProperty(props[12]);\n var _f = roundMatrixProperty(props[13]);\n return \"matrix(\" + _a + \",\" + _b + \",\" + _c + \",\" + _d + \",\" + _e + \",\" + _f + \")\";\n }\n return function() {\n this.reset = reset;\n this.rotate = rotate;\n this.rotateX = rotateX;\n this.rotateY = rotateY;\n this.rotateZ = rotateZ;\n this.skew = skew;\n this.skewFromAxis = skewFromAxis;\n this.shear = shear;\n this.scale = scale;\n this.setTransform = setTransform;\n this.translate = translate;\n this.transform = transform;\n this.applyToPoint = applyToPoint;\n this.applyToX = applyToX;\n this.applyToY = applyToY;\n this.applyToZ = applyToZ;\n this.applyToPointArray = applyToPointArray;\n this.applyToTriplePoints = applyToTriplePoints;\n this.applyToPointStringified = applyToPointStringified;\n this.toCSS = toCSS;\n this.to2dCSS = to2dCSS;\n this.clone = clone;\n this.cloneFromProps = cloneFromProps;\n this.equals = equals;\n this.inversePoints = inversePoints;\n this.inversePoint = inversePoint;\n this.getInverseMatrix = getInverseMatrix;\n this._t = this.transform;\n this.isIdentity = isIdentity;\n this._identity = true;\n this._identityCalculated = false;\n this.props = createTypedArray(\"float32\", 16);\n this.reset();\n };\n }();\n const lottie2 = {};\n function setLocation(href) {\n setLocationHref(href);\n }\n function searchAnimations() {\n {\n animationManager.searchAnimations();\n }\n }\n function setSubframeRendering(flag) {\n setSubframeEnabled(flag);\n }\n function setPrefix(prefix) {\n setIdPrefix(prefix);\n }\n function loadAnimation(params) {\n return animationManager.loadAnimation(params);\n }\n function setQuality(value) {\n if (typeof value === \"string\") {\n switch (value) {\n case \"high\":\n setDefaultCurveSegments(200);\n break;\n default:\n case \"medium\":\n setDefaultCurveSegments(50);\n break;\n case \"low\":\n setDefaultCurveSegments(10);\n break;\n }\n } else if (!isNaN(value) && value > 1) {\n setDefaultCurveSegments(value);\n }\n }\n function inBrowser() {\n return typeof navigator !== \"undefined\";\n }\n function installPlugin(type, plugin) {\n if (type === \"expressions\") {\n setExpressionsPlugin(plugin);\n }\n }\n function getFactory(name) {\n switch (name) {\n case \"propertyFactory\":\n return PropertyFactory;\n case \"shapePropertyFactory\":\n return ShapePropertyFactory;\n case \"matrix\":\n return Matrix;\n default:\n return null;\n }\n }\n lottie2.play = animationManager.play;\n lottie2.pause = animationManager.pause;\n lottie2.setLocationHref = setLocation;\n lottie2.togglePause = animationManager.togglePause;\n lottie2.setSpeed = animationManager.setSpeed;\n lottie2.setDirection = animationManager.setDirection;\n lottie2.stop = animationManager.stop;\n lottie2.searchAnimations = searchAnimations;\n lottie2.registerAnimation = animationManager.registerAnimation;\n lottie2.loadAnimation = loadAnimation;\n lottie2.setSubframeRendering = setSubframeRendering;\n lottie2.resize = animationManager.resize;\n lottie2.goToAndStop = animationManager.goToAndStop;\n lottie2.destroy = animationManager.destroy;\n lottie2.setQuality = setQuality;\n lottie2.inBrowser = inBrowser;\n lottie2.installPlugin = installPlugin;\n lottie2.freeze = animationManager.freeze;\n lottie2.unfreeze = animationManager.unfreeze;\n lottie2.setVolume = animationManager.setVolume;\n lottie2.mute = animationManager.mute;\n lottie2.unmute = animationManager.unmute;\n lottie2.getRegisteredAnimations = animationManager.getRegisteredAnimations;\n lottie2.useWebWorker = setWebWorker;\n lottie2.setIDPrefix = setPrefix;\n lottie2.__getFactory = getFactory;\n lottie2.version = \"[[BM_VERSION]]\";\n function checkReady() {\n if (document.readyState === \"complete\") {\n clearInterval(readyStateCheckInterval);\n searchAnimations();\n }\n }\n function getQueryVariable(variable) {\n var vars = queryString.split(\"&\");\n for (var i = 0; i < vars.length; i += 1) {\n var pair = vars[i].split(\"=\");\n if (decodeURIComponent(pair[0]) == variable) {\n return decodeURIComponent(pair[1]);\n }\n }\n return null;\n }\n var queryString = \"\";\n {\n var scripts = document.getElementsByTagName(\"script\");\n var index = scripts.length - 1;\n var myScript = scripts[index] || {\n src: \"\"\n };\n queryString = myScript.src ? myScript.src.replace(/^[^\\?]+\\??/, \"\") : \"\";\n getQueryVariable(\"renderer\");\n }\n var readyStateCheckInterval = setInterval(checkReady, 100);\n try {\n if (!(typeof exports === \"object\" && typeof module !== \"undefined\") && !(typeof define === \"function\" && define.amd)) {\n window.bodymovin = lottie2;\n }\n } catch (err) {\n }\n const ShapeModifiers = function() {\n var ob = {};\n var modifiers = {};\n ob.registerModifier = registerModifier;\n ob.getModifier = getModifier;\n function registerModifier(nm, factory) {\n if (!modifiers[nm]) {\n modifiers[nm] = factory;\n }\n }\n function getModifier(nm, elem, data) {\n return new modifiers[nm](elem, data);\n }\n return ob;\n }();\n function ShapeModifier() {\n }\n ShapeModifier.prototype.initModifierProperties = function() {\n };\n ShapeModifier.prototype.addShapeToModifier = function() {\n };\n ShapeModifier.prototype.addShape = function(data) {\n if (!this.closed) {\n data.sh.container.addDynamicProperty(data.sh);\n var shapeData = { shape: data.sh, data, localShapeCollection: shapeCollectionPool.newShapeCollection() };\n this.shapes.push(shapeData);\n this.addShapeToModifier(shapeData);\n if (this._isAnimated) {\n data.setAsAnimated();\n }\n }\n };\n ShapeModifier.prototype.init = function(elem, data) {\n this.shapes = [];\n this.elem = elem;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, data);\n this.frameId = initialDefaultFrame;\n this.closed = false;\n this.k = false;\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n ShapeModifier.prototype.processKeys = function() {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n extendPrototype([DynamicPropertyContainer], ShapeModifier);\n function TrimModifier() {\n }\n extendPrototype([ShapeModifier], TrimModifier);\n TrimModifier.prototype.initModifierProperties = function(elem, data) {\n this.s = PropertyFactory.getProp(elem, data.s, 0, 0.01, this);\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0.01, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0, this);\n this.sValue = 0;\n this.eValue = 0;\n this.getValue = this.processKeys;\n this.m = data.m;\n this._isAnimated = !!this.s.effectsSequence.length || !!this.e.effectsSequence.length || !!this.o.effectsSequence.length;\n };\n TrimModifier.prototype.addShapeToModifier = function(shapeData) {\n shapeData.pathsData = [];\n };\n TrimModifier.prototype.calculateShapeEdges = function(s, e, shapeLength, addedLength, totalModifierLength) {\n var segments = [];\n if (e <= 1) {\n segments.push({\n s,\n e\n });\n } else if (s >= 1) {\n segments.push({\n s: s - 1,\n e: e - 1\n });\n } else {\n segments.push({\n s,\n e: 1\n });\n segments.push({\n s: 0,\n e: e - 1\n });\n }\n var shapeSegments = [];\n var i;\n var len = segments.length;\n var segmentOb;\n for (i = 0; i < len; i += 1) {\n segmentOb = segments[i];\n if (!(segmentOb.e * totalModifierLength < addedLength || segmentOb.s * totalModifierLength > addedLength + shapeLength)) {\n var shapeS;\n var shapeE;\n if (segmentOb.s * totalModifierLength <= addedLength) {\n shapeS = 0;\n } else {\n shapeS = (segmentOb.s * totalModifierLength - addedLength) / shapeLength;\n }\n if (segmentOb.e * totalModifierLength >= addedLength + shapeLength) {\n shapeE = 1;\n } else {\n shapeE = (segmentOb.e * totalModifierLength - addedLength) / shapeLength;\n }\n shapeSegments.push([shapeS, shapeE]);\n }\n }\n if (!shapeSegments.length) {\n shapeSegments.push([0, 0]);\n }\n return shapeSegments;\n };\n TrimModifier.prototype.releasePathsData = function(pathsData) {\n var i;\n var len = pathsData.length;\n for (i = 0; i < len; i += 1) {\n segmentsLengthPool.release(pathsData[i]);\n }\n pathsData.length = 0;\n return pathsData;\n };\n TrimModifier.prototype.processShapes = function(_isFirstFrame) {\n var s;\n var e;\n if (this._mdf || _isFirstFrame) {\n var o = this.o.v % 360 / 360;\n if (o < 0) {\n o += 1;\n }\n if (this.s.v > 1) {\n s = 1 + o;\n } else if (this.s.v < 0) {\n s = 0 + o;\n } else {\n s = this.s.v + o;\n }\n if (this.e.v > 1) {\n e = 1 + o;\n } else if (this.e.v < 0) {\n e = 0 + o;\n } else {\n e = this.e.v + o;\n }\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n s = Math.round(s * 1e4) * 1e-4;\n e = Math.round(e * 1e4) * 1e-4;\n this.sValue = s;\n this.eValue = e;\n } else {\n s = this.sValue;\n e = this.eValue;\n }\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var pathsData;\n var pathData;\n var totalShapeLength;\n var totalModifierLength = 0;\n if (e === s) {\n for (i = 0; i < len; i += 1) {\n this.shapes[i].localShapeCollection.releaseShapes();\n this.shapes[i].shape._mdf = true;\n this.shapes[i].shape.paths = this.shapes[i].localShapeCollection;\n if (this._mdf) {\n this.shapes[i].pathsData.length = 0;\n }\n }\n } else if (!(e === 1 && s === 0 || e === 0 && s === 1)) {\n var segments = [];\n var shapeData;\n var localShapeCollection;\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n if (!shapeData.shape._mdf && !this._mdf && !_isFirstFrame && this.m !== 2) {\n shapeData.shape.paths = shapeData.localShapeCollection;\n } else {\n shapePaths = shapeData.shape.paths;\n jLen = shapePaths._length;\n totalShapeLength = 0;\n if (!shapeData.shape._mdf && shapeData.pathsData.length) {\n totalShapeLength = shapeData.totalShapeLength;\n } else {\n pathsData = this.releasePathsData(shapeData.pathsData);\n for (j = 0; j < jLen; j += 1) {\n pathData = bez.getSegmentsLength(shapePaths.shapes[j]);\n pathsData.push(pathData);\n totalShapeLength += pathData.totalLength;\n }\n shapeData.totalShapeLength = totalShapeLength;\n shapeData.pathsData = pathsData;\n }\n totalModifierLength += totalShapeLength;\n shapeData.shape._mdf = true;\n }\n }\n var shapeS = s;\n var shapeE = e;\n var addedLength = 0;\n var edges;\n for (i = len - 1; i >= 0; i -= 1) {\n shapeData = this.shapes[i];\n if (shapeData.shape._mdf) {\n localShapeCollection = shapeData.localShapeCollection;\n localShapeCollection.releaseShapes();\n if (this.m === 2 && len > 1) {\n edges = this.calculateShapeEdges(s, e, shapeData.totalShapeLength, addedLength, totalModifierLength);\n addedLength += shapeData.totalShapeLength;\n } else {\n edges = [[shapeS, shapeE]];\n }\n jLen = edges.length;\n for (j = 0; j < jLen; j += 1) {\n shapeS = edges[j][0];\n shapeE = edges[j][1];\n segments.length = 0;\n if (shapeE <= 1) {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength * shapeE\n });\n } else if (shapeS >= 1) {\n segments.push({\n s: shapeData.totalShapeLength * (shapeS - 1),\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n } else {\n segments.push({\n s: shapeData.totalShapeLength * shapeS,\n e: shapeData.totalShapeLength\n });\n segments.push({\n s: 0,\n e: shapeData.totalShapeLength * (shapeE - 1)\n });\n }\n var newShapesData = this.addShapes(shapeData, segments[0]);\n if (segments[0].s !== segments[0].e) {\n if (segments.length > 1) {\n var lastShapeInCollection = shapeData.shape.paths.shapes[shapeData.shape.paths._length - 1];\n if (lastShapeInCollection.c) {\n var lastShape = newShapesData.pop();\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1], lastShape);\n } else {\n this.addPaths(newShapesData, localShapeCollection);\n newShapesData = this.addShapes(shapeData, segments[1]);\n }\n }\n this.addPaths(newShapesData, localShapeCollection);\n }\n }\n shapeData.shape.paths = localShapeCollection;\n }\n }\n } else if (this._mdf) {\n for (i = 0; i < len; i += 1) {\n this.shapes[i].pathsData.length = 0;\n this.shapes[i].shape._mdf = true;\n }\n }\n };\n TrimModifier.prototype.addPaths = function(newPaths, localShapeCollection) {\n var i;\n var len = newPaths.length;\n for (i = 0; i < len; i += 1) {\n localShapeCollection.addShape(newPaths[i]);\n }\n };\n TrimModifier.prototype.addSegment = function(pt1, pt2, pt3, pt4, shapePath, pos, newShape) {\n shapePath.setXYAt(pt2[0], pt2[1], \"o\", pos);\n shapePath.setXYAt(pt3[0], pt3[1], \"i\", pos + 1);\n if (newShape) {\n shapePath.setXYAt(pt1[0], pt1[1], \"v\", pos);\n }\n shapePath.setXYAt(pt4[0], pt4[1], \"v\", pos + 1);\n };\n TrimModifier.prototype.addSegmentFromArray = function(points, shapePath, pos, newShape) {\n shapePath.setXYAt(points[1], points[5], \"o\", pos);\n shapePath.setXYAt(points[2], points[6], \"i\", pos + 1);\n if (newShape) {\n shapePath.setXYAt(points[0], points[4], \"v\", pos);\n }\n shapePath.setXYAt(points[3], points[7], \"v\", pos + 1);\n };\n TrimModifier.prototype.addShapes = function(shapeData, shapeSegment, shapePath) {\n var pathsData = shapeData.pathsData;\n var shapePaths = shapeData.shape.paths.shapes;\n var i;\n var len = shapeData.shape.paths._length;\n var j;\n var jLen;\n var addedLength = 0;\n var currentLengthData;\n var segmentCount;\n var lengths;\n var segment;\n var shapes = [];\n var initPos;\n var newShape = true;\n if (!shapePath) {\n shapePath = shapePool.newElement();\n segmentCount = 0;\n initPos = 0;\n } else {\n segmentCount = shapePath._length;\n initPos = shapePath._length;\n }\n shapes.push(shapePath);\n for (i = 0; i < len; i += 1) {\n lengths = pathsData[i].lengths;\n shapePath.c = shapePaths[i].c;\n jLen = shapePaths[i].c ? lengths.length : lengths.length + 1;\n for (j = 1; j < jLen; j += 1) {\n currentLengthData = lengths[j - 1];\n if (addedLength + currentLengthData.addedLength < shapeSegment.s) {\n addedLength += currentLengthData.addedLength;\n shapePath.c = false;\n } else if (addedLength > shapeSegment.e) {\n shapePath.c = false;\n break;\n } else {\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + currentLengthData.addedLength) {\n this.addSegment(\n shapePaths[i].v[j - 1],\n shapePaths[i].o[j - 1],\n shapePaths[i].i[j],\n shapePaths[i].v[j],\n shapePath,\n segmentCount,\n newShape\n );\n newShape = false;\n } else {\n segment = bez.getNewSegment(\n shapePaths[i].v[j - 1],\n shapePaths[i].v[j],\n shapePaths[i].o[j - 1],\n shapePaths[i].i[j],\n (shapeSegment.s - addedLength) / currentLengthData.addedLength,\n (shapeSegment.e - addedLength) / currentLengthData.addedLength,\n lengths[j - 1]\n );\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape);\n newShape = false;\n shapePath.c = false;\n }\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n }\n if (shapePaths[i].c && lengths.length) {\n currentLengthData = lengths[j - 1];\n if (addedLength <= shapeSegment.e) {\n var segmentLength = lengths[j - 1].addedLength;\n if (shapeSegment.s <= addedLength && shapeSegment.e >= addedLength + segmentLength) {\n this.addSegment(\n shapePaths[i].v[j - 1],\n shapePaths[i].o[j - 1],\n shapePaths[i].i[0],\n shapePaths[i].v[0],\n shapePath,\n segmentCount,\n newShape\n );\n newShape = false;\n } else {\n segment = bez.getNewSegment(\n shapePaths[i].v[j - 1],\n shapePaths[i].v[0],\n shapePaths[i].o[j - 1],\n shapePaths[i].i[0],\n (shapeSegment.s - addedLength) / segmentLength,\n (shapeSegment.e - addedLength) / segmentLength,\n lengths[j - 1]\n );\n this.addSegmentFromArray(segment, shapePath, segmentCount, newShape);\n newShape = false;\n shapePath.c = false;\n }\n } else {\n shapePath.c = false;\n }\n addedLength += currentLengthData.addedLength;\n segmentCount += 1;\n }\n if (shapePath._length) {\n shapePath.setXYAt(shapePath.v[initPos][0], shapePath.v[initPos][1], \"i\", initPos);\n shapePath.setXYAt(\n shapePath.v[shapePath._length - 1][0],\n shapePath.v[shapePath._length - 1][1],\n \"o\",\n shapePath._length - 1\n );\n }\n if (addedLength > shapeSegment.e) {\n break;\n }\n if (i < len - 1) {\n shapePath = shapePool.newElement();\n newShape = true;\n shapes.push(shapePath);\n segmentCount = 0;\n }\n }\n return shapes;\n };\n function PuckerAndBloatModifier() {\n }\n extendPrototype([ShapeModifier], PuckerAndBloatModifier);\n PuckerAndBloatModifier.prototype.initModifierProperties = function(elem, data) {\n this.getValue = this.processKeys;\n this.amount = PropertyFactory.getProp(elem, data.a, 0, null, this);\n this._isAnimated = !!this.amount.effectsSequence.length;\n };\n PuckerAndBloatModifier.prototype.processPath = function(path, amount) {\n var percent = amount / 100;\n var centerPoint = [0, 0];\n var pathLength = path._length;\n var i = 0;\n for (i = 0; i < pathLength; i += 1) {\n centerPoint[0] += path.v[i][0];\n centerPoint[1] += path.v[i][1];\n }\n centerPoint[0] /= pathLength;\n centerPoint[1] /= pathLength;\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n for (i = 0; i < pathLength; i += 1) {\n vX = path.v[i][0] + (centerPoint[0] - path.v[i][0]) * percent;\n vY = path.v[i][1] + (centerPoint[1] - path.v[i][1]) * percent;\n oX = path.o[i][0] + (centerPoint[0] - path.o[i][0]) * -percent;\n oY = path.o[i][1] + (centerPoint[1] - path.o[i][1]) * -percent;\n iX = path.i[i][0] + (centerPoint[0] - path.i[i][0]) * -percent;\n iY = path.i[i][1] + (centerPoint[1] - path.i[i][1]) * -percent;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, i);\n }\n return clonedPath;\n };\n PuckerAndBloatModifier.prototype.processShapes = function(_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var amount = this.amount.v;\n if (amount !== 0) {\n var shapeData;\n var localShapeCollection;\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], amount));\n }\n }\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n const TransformPropertyFactory = function() {\n var defaultVector = [0, 0];\n function applyToMatrix(mat) {\n var _mdf = this._mdf;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || _mdf;\n if (this.a) {\n mat.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n if (this.s) {\n mat.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n if (this.sk) {\n mat.skewFromAxis(-this.sk.v, this.sa.v);\n }\n if (this.r) {\n mat.rotate(-this.r.v);\n } else {\n mat.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n if (this.data.p.s) {\n if (this.data.p.z) {\n mat.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n mat.translate(this.px.v, this.py.v, 0);\n }\n } else {\n mat.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n function processKeys(forceRender) {\n if (this.elem.globalData.frameId === this.frameId) {\n return;\n }\n if (this._isDirty) {\n this.precalculateMatrix();\n this._isDirty = false;\n }\n this.iterateDynamicProperties();\n if (this._mdf || forceRender) {\n var frameRate;\n this.v.cloneFromProps(this.pre.props);\n if (this.appliedTransformations < 1) {\n this.v.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n }\n if (this.appliedTransformations < 2) {\n this.v.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n }\n if (this.sk && this.appliedTransformations < 3) {\n this.v.skewFromAxis(-this.sk.v, this.sa.v);\n }\n if (this.r && this.appliedTransformations < 4) {\n this.v.rotate(-this.r.v);\n } else if (!this.r && this.appliedTransformations < 4) {\n this.v.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n }\n if (this.autoOriented) {\n var v1;\n var v2;\n frameRate = this.elem.globalData.frameRate;\n if (this.p && this.p.keyframes && this.p.getValueAtTime) {\n if (this.p._caching.lastFrame + this.p.offsetTime <= this.p.keyframes[0].t) {\n v1 = this.p.getValueAtTime((this.p.keyframes[0].t + 0.01) / frameRate, 0);\n v2 = this.p.getValueAtTime(this.p.keyframes[0].t / frameRate, 0);\n } else if (this.p._caching.lastFrame + this.p.offsetTime >= this.p.keyframes[this.p.keyframes.length - 1].t) {\n v1 = this.p.getValueAtTime(this.p.keyframes[this.p.keyframes.length - 1].t / frameRate, 0);\n v2 = this.p.getValueAtTime((this.p.keyframes[this.p.keyframes.length - 1].t - 0.05) / frameRate, 0);\n } else {\n v1 = this.p.pv;\n v2 = this.p.getValueAtTime(\n (this.p._caching.lastFrame + this.p.offsetTime - 0.01) / frameRate,\n this.p.offsetTime\n );\n }\n } else if (this.px && this.px.keyframes && this.py.keyframes && this.px.getValueAtTime && this.py.getValueAtTime) {\n v1 = [];\n v2 = [];\n var px = this.px;\n var py = this.py;\n if (px._caching.lastFrame + px.offsetTime <= px.keyframes[0].t) {\n v1[0] = px.getValueAtTime((px.keyframes[0].t + 0.01) / frameRate, 0);\n v1[1] = py.getValueAtTime((py.keyframes[0].t + 0.01) / frameRate, 0);\n v2[0] = px.getValueAtTime(px.keyframes[0].t / frameRate, 0);\n v2[1] = py.getValueAtTime(py.keyframes[0].t / frameRate, 0);\n } else if (px._caching.lastFrame + px.offsetTime >= px.keyframes[px.keyframes.length - 1].t) {\n v1[0] = px.getValueAtTime(px.keyframes[px.keyframes.length - 1].t / frameRate, 0);\n v1[1] = py.getValueAtTime(py.keyframes[py.keyframes.length - 1].t / frameRate, 0);\n v2[0] = px.getValueAtTime((px.keyframes[px.keyframes.length - 1].t - 0.01) / frameRate, 0);\n v2[1] = py.getValueAtTime((py.keyframes[py.keyframes.length - 1].t - 0.01) / frameRate, 0);\n } else {\n v1 = [px.pv, py.pv];\n v2[0] = px.getValueAtTime((px._caching.lastFrame + px.offsetTime - 0.01) / frameRate, px.offsetTime);\n v2[1] = py.getValueAtTime((py._caching.lastFrame + py.offsetTime - 0.01) / frameRate, py.offsetTime);\n }\n } else {\n v2 = defaultVector;\n v1 = v2;\n }\n this.v.rotate(-Math.atan2(v1[1] - v2[1], v1[0] - v2[0]));\n }\n if (this.data.p && this.data.p.s) {\n if (this.data.p.z) {\n this.v.translate(this.px.v, this.py.v, -this.pz.v);\n } else {\n this.v.translate(this.px.v, this.py.v, 0);\n }\n } else {\n this.v.translate(this.p.v[0], this.p.v[1], -this.p.v[2]);\n }\n }\n this.frameId = this.elem.globalData.frameId;\n }\n function precalculateMatrix() {\n if (!this.a.k) {\n this.pre.translate(-this.a.v[0], -this.a.v[1], this.a.v[2]);\n this.appliedTransformations = 1;\n } else {\n return;\n }\n if (!this.s.effectsSequence.length) {\n this.pre.scale(this.s.v[0], this.s.v[1], this.s.v[2]);\n this.appliedTransformations = 2;\n } else {\n return;\n }\n if (this.sk) {\n if (!this.sk.effectsSequence.length && !this.sa.effectsSequence.length) {\n this.pre.skewFromAxis(-this.sk.v, this.sa.v);\n this.appliedTransformations = 3;\n } else {\n return;\n }\n }\n if (this.r) {\n if (!this.r.effectsSequence.length) {\n this.pre.rotate(-this.r.v);\n this.appliedTransformations = 4;\n }\n } else if (!this.rz.effectsSequence.length && !this.ry.effectsSequence.length && !this.rx.effectsSequence.length && !this.or.effectsSequence.length) {\n this.pre.rotateZ(-this.rz.v).rotateY(this.ry.v).rotateX(this.rx.v).rotateZ(-this.or.v[2]).rotateY(this.or.v[1]).rotateX(this.or.v[0]);\n this.appliedTransformations = 4;\n }\n }\n function autoOrient() {\n }\n function addDynamicProperty(prop) {\n this._addDynamicProperty(prop);\n this.elem.addDynamicProperty(prop);\n this._isDirty = true;\n }\n function TransformProperty(elem, data, container) {\n this.elem = elem;\n this.frameId = -1;\n this.propType = \"transform\";\n this.data = data;\n this.v = new Matrix();\n this.pre = new Matrix();\n this.appliedTransformations = 0;\n this.initDynamicPropertyContainer(container || elem);\n if (data.p && data.p.s) {\n this.px = PropertyFactory.getProp(elem, data.p.x, 0, 0, this);\n this.py = PropertyFactory.getProp(elem, data.p.y, 0, 0, this);\n if (data.p.z) {\n this.pz = PropertyFactory.getProp(elem, data.p.z, 0, 0, this);\n }\n } else {\n this.p = PropertyFactory.getProp(elem, data.p || { k: [0, 0, 0] }, 1, 0, this);\n }\n if (data.rx) {\n this.rx = PropertyFactory.getProp(elem, data.rx, 0, degToRads, this);\n this.ry = PropertyFactory.getProp(elem, data.ry, 0, degToRads, this);\n this.rz = PropertyFactory.getProp(elem, data.rz, 0, degToRads, this);\n if (data.or.k[0].ti) {\n var i;\n var len = data.or.k.length;\n for (i = 0; i < len; i += 1) {\n data.or.k[i].to = null;\n data.or.k[i].ti = null;\n }\n }\n this.or = PropertyFactory.getProp(elem, data.or, 1, degToRads, this);\n this.or.sh = true;\n } else {\n this.r = PropertyFactory.getProp(elem, data.r || { k: 0 }, 0, degToRads, this);\n }\n if (data.sk) {\n this.sk = PropertyFactory.getProp(elem, data.sk, 0, degToRads, this);\n this.sa = PropertyFactory.getProp(elem, data.sa, 0, degToRads, this);\n }\n this.a = PropertyFactory.getProp(elem, data.a || { k: [0, 0, 0] }, 1, 0, this);\n this.s = PropertyFactory.getProp(elem, data.s || { k: [100, 100, 100] }, 1, 0.01, this);\n if (data.o) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, elem);\n } else {\n this.o = { _mdf: false, v: 1 };\n }\n this._isDirty = true;\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n }\n TransformProperty.prototype = {\n applyToMatrix,\n getValue: processKeys,\n precalculateMatrix,\n autoOrient\n };\n extendPrototype([DynamicPropertyContainer], TransformProperty);\n TransformProperty.prototype.addDynamicProperty = addDynamicProperty;\n TransformProperty.prototype._addDynamicProperty = DynamicPropertyContainer.prototype.addDynamicProperty;\n function getTransformProperty(elem, data, container) {\n return new TransformProperty(elem, data, container);\n }\n return {\n getTransformProperty\n };\n }();\n function RepeaterModifier() {\n }\n extendPrototype([ShapeModifier], RepeaterModifier);\n RepeaterModifier.prototype.initModifierProperties = function(elem, data) {\n this.getValue = this.processKeys;\n this.c = PropertyFactory.getProp(elem, data.c, 0, null, this);\n this.o = PropertyFactory.getProp(elem, data.o, 0, null, this);\n this.tr = TransformPropertyFactory.getTransformProperty(elem, data.tr, this);\n this.so = PropertyFactory.getProp(elem, data.tr.so, 0, 0.01, this);\n this.eo = PropertyFactory.getProp(elem, data.tr.eo, 0, 0.01, this);\n this.data = data;\n if (!this.dynamicProperties.length) {\n this.getValue(true);\n }\n this._isAnimated = !!this.dynamicProperties.length;\n this.pMatrix = new Matrix();\n this.rMatrix = new Matrix();\n this.sMatrix = new Matrix();\n this.tMatrix = new Matrix();\n this.matrix = new Matrix();\n };\n RepeaterModifier.prototype.applyTransforms = function(pMatrix, rMatrix, sMatrix, transform, perc, inv) {\n var dir = inv ? -1 : 1;\n var scaleX = transform.s.v[0] + (1 - transform.s.v[0]) * (1 - perc);\n var scaleY = transform.s.v[1] + (1 - transform.s.v[1]) * (1 - perc);\n pMatrix.translate(transform.p.v[0] * dir * perc, transform.p.v[1] * dir * perc, transform.p.v[2]);\n rMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n rMatrix.rotate(-transform.r.v * dir * perc);\n rMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n sMatrix.translate(-transform.a.v[0], -transform.a.v[1], transform.a.v[2]);\n sMatrix.scale(inv ? 1 / scaleX : scaleX, inv ? 1 / scaleY : scaleY);\n sMatrix.translate(transform.a.v[0], transform.a.v[1], transform.a.v[2]);\n };\n RepeaterModifier.prototype.init = function(elem, arr, pos, elemsData) {\n this.elem = elem;\n this.arr = arr;\n this.pos = pos;\n this.elemsData = elemsData;\n this._currentCopies = 0;\n this._elements = [];\n this._groups = [];\n this.frameId = -1;\n this.initDynamicPropertyContainer(elem);\n this.initModifierProperties(elem, arr[pos]);\n while (pos > 0) {\n pos -= 1;\n this._elements.unshift(arr[pos]);\n }\n if (this.dynamicProperties.length) {\n this.k = true;\n } else {\n this.getValue(true);\n }\n };\n RepeaterModifier.prototype.resetElements = function(elements) {\n var i;\n var len = elements.length;\n for (i = 0; i < len; i += 1) {\n elements[i]._processed = false;\n if (elements[i].ty === \"gr\") {\n this.resetElements(elements[i].it);\n }\n }\n };\n RepeaterModifier.prototype.cloneElements = function(elements) {\n var newElements = JSON.parse(JSON.stringify(elements));\n this.resetElements(newElements);\n return newElements;\n };\n RepeaterModifier.prototype.changeGroupRender = function(elements, renderFlag) {\n var i;\n var len = elements.length;\n for (i = 0; i < len; i += 1) {\n elements[i]._render = renderFlag;\n if (elements[i].ty === \"gr\") {\n this.changeGroupRender(elements[i].it, renderFlag);\n }\n }\n };\n RepeaterModifier.prototype.processShapes = function(_isFirstFrame) {\n var items;\n var itemsTransform;\n var i;\n var dir;\n var cont;\n var hasReloaded = false;\n if (this._mdf || _isFirstFrame) {\n var copies = Math.ceil(this.c.v);\n if (this._groups.length < copies) {\n while (this._groups.length < copies) {\n var group = {\n it: this.cloneElements(this._elements),\n ty: \"gr\"\n };\n group.it.push({\n a: { a: 0, ix: 1, k: [0, 0] },\n nm: \"Transform\",\n o: { a: 0, ix: 7, k: 100 },\n p: { a: 0, ix: 2, k: [0, 0] },\n r: {\n a: 1,\n ix: 6,\n k: [\n { s: 0, e: 0, t: 0 },\n { s: 0, e: 0, t: 1 }\n ]\n },\n s: { a: 0, ix: 3, k: [100, 100] },\n sa: { a: 0, ix: 5, k: 0 },\n sk: { a: 0, ix: 4, k: 0 },\n ty: \"tr\"\n });\n this.arr.splice(0, 0, group);\n this._groups.splice(0, 0, group);\n this._currentCopies += 1;\n }\n this.elem.reloadShapes();\n hasReloaded = true;\n }\n cont = 0;\n var renderFlag;\n for (i = 0; i <= this._groups.length - 1; i += 1) {\n renderFlag = cont < copies;\n this._groups[i]._render = renderFlag;\n this.changeGroupRender(this._groups[i].it, renderFlag);\n if (!renderFlag) {\n var elems = this.elemsData[i].it;\n var transformData = elems[elems.length - 1];\n if (transformData.transform.op.v !== 0) {\n transformData.transform.op._mdf = true;\n transformData.transform.op.v = 0;\n } else {\n transformData.transform.op._mdf = false;\n }\n }\n cont += 1;\n }\n this._currentCopies = copies;\n var offset = this.o.v;\n var offsetModulo = offset % 1;\n var roundOffset = offset > 0 ? Math.floor(offset) : Math.ceil(offset);\n var pProps = this.pMatrix.props;\n var rProps = this.rMatrix.props;\n var sProps = this.sMatrix.props;\n this.pMatrix.reset();\n this.rMatrix.reset();\n this.sMatrix.reset();\n this.tMatrix.reset();\n this.matrix.reset();\n var iteration = 0;\n if (offset > 0) {\n while (iteration < roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n iteration += 1;\n }\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, offsetModulo, false);\n iteration += offsetModulo;\n }\n } else if (offset < 0) {\n while (iteration > roundOffset) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, true);\n iteration -= 1;\n }\n if (offsetModulo) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, -offsetModulo, true);\n iteration -= offsetModulo;\n }\n }\n i = this.data.m === 1 ? 0 : this._currentCopies - 1;\n dir = this.data.m === 1 ? 1 : -1;\n cont = this._currentCopies;\n var j;\n var jLen;\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n jLen = itemsTransform.length;\n items[items.length - 1].transform.mProps._mdf = true;\n items[items.length - 1].transform.op._mdf = true;\n items[items.length - 1].transform.op.v = this._currentCopies === 1 ? this.so.v : this.so.v + (this.eo.v - this.so.v) * (i / (this._currentCopies - 1));\n if (iteration !== 0) {\n if (i !== 0 && dir === 1 || i !== this._currentCopies - 1 && dir === -1) {\n this.applyTransforms(this.pMatrix, this.rMatrix, this.sMatrix, this.tr, 1, false);\n }\n this.matrix.transform(\n rProps[0],\n rProps[1],\n rProps[2],\n rProps[3],\n rProps[4],\n rProps[5],\n rProps[6],\n rProps[7],\n rProps[8],\n rProps[9],\n rProps[10],\n rProps[11],\n rProps[12],\n rProps[13],\n rProps[14],\n rProps[15]\n );\n this.matrix.transform(\n sProps[0],\n sProps[1],\n sProps[2],\n sProps[3],\n sProps[4],\n sProps[5],\n sProps[6],\n sProps[7],\n sProps[8],\n sProps[9],\n sProps[10],\n sProps[11],\n sProps[12],\n sProps[13],\n sProps[14],\n sProps[15]\n );\n this.matrix.transform(\n pProps[0],\n pProps[1],\n pProps[2],\n pProps[3],\n pProps[4],\n pProps[5],\n pProps[6],\n pProps[7],\n pProps[8],\n pProps[9],\n pProps[10],\n pProps[11],\n pProps[12],\n pProps[13],\n pProps[14],\n pProps[15]\n );\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n this.matrix.reset();\n } else {\n this.matrix.reset();\n for (j = 0; j < jLen; j += 1) {\n itemsTransform[j] = this.matrix.props[j];\n }\n }\n iteration += 1;\n cont -= 1;\n i += dir;\n }\n } else {\n cont = this._currentCopies;\n i = 0;\n dir = 1;\n while (cont) {\n items = this.elemsData[i].it;\n itemsTransform = items[items.length - 1].transform.mProps.v.props;\n items[items.length - 1].transform.mProps._mdf = false;\n items[items.length - 1].transform.op._mdf = false;\n cont -= 1;\n i += dir;\n }\n }\n return hasReloaded;\n };\n RepeaterModifier.prototype.addShape = function() {\n };\n function RoundCornersModifier() {\n }\n extendPrototype([ShapeModifier], RoundCornersModifier);\n RoundCornersModifier.prototype.initModifierProperties = function(elem, data) {\n this.getValue = this.processKeys;\n this.rd = PropertyFactory.getProp(elem, data.r, 0, null, this);\n this._isAnimated = !!this.rd.effectsSequence.length;\n };\n RoundCornersModifier.prototype.processPath = function(path, round) {\n var clonedPath = shapePool.newElement();\n clonedPath.c = path.c;\n var i;\n var len = path._length;\n var currentV;\n var currentI;\n var currentO;\n var closerV;\n var distance;\n var newPosPerc;\n var index2 = 0;\n var vX;\n var vY;\n var oX;\n var oY;\n var iX;\n var iY;\n for (i = 0; i < len; i += 1) {\n currentV = path.v[i];\n currentO = path.o[i];\n currentI = path.i[i];\n if (currentV[0] === currentO[0] && currentV[1] === currentO[1] && currentV[0] === currentI[0] && currentV[1] === currentI[1]) {\n if ((i === 0 || i === len - 1) && !path.c) {\n clonedPath.setTripleAt(currentV[0], currentV[1], currentO[0], currentO[1], currentI[0], currentI[1], index2);\n index2 += 1;\n } else {\n if (i === 0) {\n closerV = path.v[len - 1];\n } else {\n closerV = path.v[i - 1];\n }\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n iX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = iX;\n iY = currentV[1] - (currentV[1] - closerV[1]) * newPosPerc;\n vY = iY;\n oX = vX - (vX - currentV[0]) * roundCorner;\n oY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index2);\n index2 += 1;\n if (i === len - 1) {\n closerV = path.v[0];\n } else {\n closerV = path.v[i + 1];\n }\n distance = Math.sqrt(Math.pow(currentV[0] - closerV[0], 2) + Math.pow(currentV[1] - closerV[1], 2));\n newPosPerc = distance ? Math.min(distance / 2, round) / distance : 0;\n oX = currentV[0] + (closerV[0] - currentV[0]) * newPosPerc;\n vX = oX;\n oY = currentV[1] + (closerV[1] - currentV[1]) * newPosPerc;\n vY = oY;\n iX = vX - (vX - currentV[0]) * roundCorner;\n iY = vY - (vY - currentV[1]) * roundCorner;\n clonedPath.setTripleAt(vX, vY, oX, oY, iX, iY, index2);\n index2 += 1;\n }\n } else {\n clonedPath.setTripleAt(\n path.v[i][0],\n path.v[i][1],\n path.o[i][0],\n path.o[i][1],\n path.i[i][0],\n path.i[i][1],\n index2\n );\n index2 += 1;\n }\n }\n return clonedPath;\n };\n RoundCornersModifier.prototype.processShapes = function(_isFirstFrame) {\n var shapePaths;\n var i;\n var len = this.shapes.length;\n var j;\n var jLen;\n var rd = this.rd.v;\n if (rd !== 0) {\n var shapeData;\n var localShapeCollection;\n for (i = 0; i < len; i += 1) {\n shapeData = this.shapes[i];\n localShapeCollection = shapeData.localShapeCollection;\n if (!(!shapeData.shape._mdf && !this._mdf && !_isFirstFrame)) {\n localShapeCollection.releaseShapes();\n shapeData.shape._mdf = true;\n shapePaths = shapeData.shape.paths.shapes;\n jLen = shapeData.shape.paths._length;\n for (j = 0; j < jLen; j += 1) {\n localShapeCollection.addShape(this.processPath(shapePaths[j], rd));\n }\n }\n shapeData.shape.paths = shapeData.localShapeCollection;\n }\n }\n if (!this.dynamicProperties.length) {\n this._mdf = false;\n }\n };\n function getFontProperties(fontData) {\n var styles = fontData.fStyle ? fontData.fStyle.split(\" \") : [];\n var fWeight = \"normal\";\n var fStyle = \"normal\";\n var len = styles.length;\n var styleName;\n for (var i = 0; i < len; i += 1) {\n styleName = styles[i].toLowerCase();\n switch (styleName) {\n case \"italic\":\n fStyle = \"italic\";\n break;\n case \"bold\":\n fWeight = \"700\";\n break;\n case \"black\":\n fWeight = \"900\";\n break;\n case \"medium\":\n fWeight = \"500\";\n break;\n case \"regular\":\n case \"normal\":\n fWeight = \"400\";\n break;\n case \"light\":\n case \"thin\":\n fWeight = \"200\";\n break;\n }\n }\n return {\n style: fStyle,\n weight: fontData.fWeight || fWeight\n };\n }\n const FontManager = function() {\n var maxWaitingTime = 5e3;\n var emptyChar = {\n w: 0,\n size: 0,\n shapes: [],\n data: {\n shapes: []\n }\n };\n var combinedCharacters = [];\n combinedCharacters = combinedCharacters.concat([\n 2304,\n 2305,\n 2306,\n 2307,\n 2362,\n 2363,\n 2364,\n 2364,\n 2366,\n 2367,\n 2368,\n 2369,\n 2370,\n 2371,\n 2372,\n 2373,\n 2374,\n 2375,\n 2376,\n 2377,\n 2378,\n 2379,\n 2380,\n 2381,\n 2382,\n 2383,\n 2387,\n 2388,\n 2389,\n 2390,\n 2391,\n 2402,\n 2403\n ]);\n var surrogateModifiers = [\"d83cdffb\", \"d83cdffc\", \"d83cdffd\", \"d83cdffe\", \"d83cdfff\"];\n var zeroWidthJoiner = [65039, 8205];\n function trimFontOptions(font) {\n var familyArray = font.split(\",\");\n var i;\n var len = familyArray.length;\n var enabledFamilies = [];\n for (i = 0; i < len; i += 1) {\n if (familyArray[i] !== \"sans-serif\" && familyArray[i] !== \"monospace\") {\n enabledFamilies.push(familyArray[i]);\n }\n }\n return enabledFamilies.join(\",\");\n }\n function setUpNode(font, family) {\n var parentNode = createTag(\"span\");\n parentNode.setAttribute(\"aria-hidden\", true);\n parentNode.style.fontFamily = family;\n var node = createTag(\"span\");\n node.innerText = \"giItT1WQy@!-/#\";\n parentNode.style.position = \"absolute\";\n parentNode.style.left = \"-10000px\";\n parentNode.style.top = \"-10000px\";\n parentNode.style.fontSize = \"300px\";\n parentNode.style.fontVariant = \"normal\";\n parentNode.style.fontStyle = \"normal\";\n parentNode.style.fontWeight = \"normal\";\n parentNode.style.letterSpacing = \"0\";\n parentNode.appendChild(node);\n document.body.appendChild(parentNode);\n var width = node.offsetWidth;\n node.style.fontFamily = trimFontOptions(font) + \", \" + family;\n return { node, w: width, parent: parentNode };\n }\n function checkLoadedFonts() {\n var i;\n var len = this.fonts.length;\n var node;\n var w;\n var loadedCount = len;\n for (i = 0; i < len; i += 1) {\n if (this.fonts[i].loaded) {\n loadedCount -= 1;\n } else if (this.fonts[i].fOrigin === \"n\" || this.fonts[i].origin === 0) {\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].monoCase.node;\n w = this.fonts[i].monoCase.w;\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n } else {\n node = this.fonts[i].sansCase.node;\n w = this.fonts[i].sansCase.w;\n if (node.offsetWidth !== w) {\n loadedCount -= 1;\n this.fonts[i].loaded = true;\n }\n }\n if (this.fonts[i].loaded) {\n this.fonts[i].sansCase.parent.parentNode.removeChild(this.fonts[i].sansCase.parent);\n this.fonts[i].monoCase.parent.parentNode.removeChild(this.fonts[i].monoCase.parent);\n }\n }\n }\n if (loadedCount !== 0 && Date.now() - this.initTime < maxWaitingTime) {\n setTimeout(this.checkLoadedFontsBinded, 20);\n } else {\n setTimeout(this.setIsLoadedBinded, 10);\n }\n }\n function createHelper(fontData, def) {\n var engine = document.body && def ? \"svg\" : \"canvas\";\n var helper;\n var fontProps = getFontProperties(fontData);\n if (engine === \"svg\") {\n var tHelper = createNS(\"text\");\n tHelper.style.fontSize = \"100px\";\n tHelper.setAttribute(\"font-family\", fontData.fFamily);\n tHelper.setAttribute(\"font-style\", fontProps.style);\n tHelper.setAttribute(\"font-weight\", fontProps.weight);\n tHelper.textContent = \"1\";\n if (fontData.fClass) {\n tHelper.style.fontFamily = \"inherit\";\n tHelper.setAttribute(\"class\", fontData.fClass);\n } else {\n tHelper.style.fontFamily = fontData.fFamily;\n }\n def.appendChild(tHelper);\n helper = tHelper;\n } else {\n var tCanvasHelper = new OffscreenCanvas(500, 500).getContext(\"2d\");\n tCanvasHelper.font = fontProps.style + \" \" + fontProps.weight + \" 100px \" + fontData.fFamily;\n helper = tCanvasHelper;\n }\n function measure(text) {\n if (engine === \"svg\") {\n helper.textContent = text;\n return helper.getComputedTextLength();\n }\n return helper.measureText(text).width;\n }\n return {\n measureText: measure\n };\n }\n function addFonts(fontData, defs) {\n if (!fontData) {\n this.isLoaded = true;\n return;\n }\n if (this.chars) {\n this.isLoaded = true;\n this.fonts = fontData.list;\n return;\n }\n if (!document.body) {\n this.isLoaded = true;\n fontData.list.forEach((data) => {\n data.helper = createHelper(data);\n data.cache = {};\n });\n this.fonts = fontData.list;\n return;\n }\n var fontArr = fontData.list;\n var i;\n var len = fontArr.length;\n var _pendingFonts = len;\n for (i = 0; i < len; i += 1) {\n var shouldLoadFont = true;\n var loadedSelector;\n var j;\n fontArr[i].loaded = false;\n fontArr[i].monoCase = setUpNode(fontArr[i].fFamily, \"monospace\");\n fontArr[i].sansCase = setUpNode(fontArr[i].fFamily, \"sans-serif\");\n if (!fontArr[i].fPath) {\n fontArr[i].loaded = true;\n _pendingFonts -= 1;\n } else if (fontArr[i].fOrigin === \"p\" || fontArr[i].origin === 3) {\n loadedSelector = document.querySelectorAll(\n 'style[f-forigin=\"p\"][f-family=\"' + fontArr[i].fFamily + '\"], style[f-origin=\"3\"][f-family=\"' + fontArr[i].fFamily + '\"]'\n );\n if (loadedSelector.length > 0) {\n shouldLoadFont = false;\n }\n if (shouldLoadFont) {\n var s = createTag(\"style\");\n s.setAttribute(\"f-forigin\", fontArr[i].fOrigin);\n s.setAttribute(\"f-origin\", fontArr[i].origin);\n s.setAttribute(\"f-family\", fontArr[i].fFamily);\n s.type = \"text/css\";\n s.innerText = \"@font-face {font-family: \" + fontArr[i].fFamily + \"; font-style: normal; src: url('\" + fontArr[i].fPath + \"');}\";\n defs.appendChild(s);\n }\n } else if (fontArr[i].fOrigin === \"g\" || fontArr[i].origin === 1) {\n loadedSelector = document.querySelectorAll('link[f-forigin=\"g\"], link[f-origin=\"1\"]');\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (loadedSelector[j].href.indexOf(fontArr[i].fPath) !== -1) {\n shouldLoadFont = false;\n }\n }\n if (shouldLoadFont) {\n var l = createTag(\"link\");\n l.setAttribute(\"f-forigin\", fontArr[i].fOrigin);\n l.setAttribute(\"f-origin\", fontArr[i].origin);\n l.type = \"text/css\";\n l.rel = \"stylesheet\";\n l.href = fontArr[i].fPath;\n document.body.appendChild(l);\n }\n } else if (fontArr[i].fOrigin === \"t\" || fontArr[i].origin === 2) {\n loadedSelector = document.querySelectorAll('script[f-forigin=\"t\"], script[f-origin=\"2\"]');\n for (j = 0; j < loadedSelector.length; j += 1) {\n if (fontArr[i].fPath === loadedSelector[j].src) {\n shouldLoadFont = false;\n }\n }\n if (shouldLoadFont) {\n var sc = createTag(\"link\");\n sc.setAttribute(\"f-forigin\", fontArr[i].fOrigin);\n sc.setAttribute(\"f-origin\", fontArr[i].origin);\n sc.setAttribute(\"rel\", \"stylesheet\");\n sc.setAttribute(\"href\", fontArr[i].fPath);\n defs.appendChild(sc);\n }\n }\n fontArr[i].helper = createHelper(fontArr[i], defs);\n fontArr[i].cache = {};\n this.fonts.push(fontArr[i]);\n }\n if (_pendingFonts === 0) {\n this.isLoaded = true;\n } else {\n setTimeout(this.checkLoadedFonts.bind(this), 100);\n }\n }\n function addChars(chars) {\n if (!chars) {\n return;\n }\n if (!this.chars) {\n this.chars = [];\n }\n var i;\n var len = chars.length;\n var j;\n var jLen = this.chars.length;\n var found;\n for (i = 0; i < len; i += 1) {\n j = 0;\n found = false;\n while (j < jLen) {\n if (this.chars[j].style === chars[i].style && this.chars[j].fFamily === chars[i].fFamily && this.chars[j].ch === chars[i].ch) {\n found = true;\n }\n j += 1;\n }\n if (!found) {\n this.chars.push(chars[i]);\n jLen += 1;\n }\n }\n }\n function getCharData(char, style, font) {\n var i = 0;\n var len = this.chars.length;\n while (i < len) {\n if (this.chars[i].ch === char && this.chars[i].style === style && this.chars[i].fFamily === font) {\n return this.chars[i];\n }\n i += 1;\n }\n if ((typeof char === \"string\" && char.charCodeAt(0) !== 13 || !char) && console && console.warn && // eslint-disable-line no-console\n !this._warned) {\n this._warned = true;\n console.warn(\"Missing character from exported characters list: \", char, style, font);\n }\n return emptyChar;\n }\n function measureText(char, fontName, size) {\n var fontData = this.getFontByName(fontName);\n var index2 = char.charCodeAt(0);\n if (!fontData.cache[index2 + 1]) {\n var tHelper = fontData.helper;\n if (char === \" \") {\n var doubleSize = tHelper.measureText(\"|\" + char + \"|\");\n var singleSize = tHelper.measureText(\"||\");\n fontData.cache[index2 + 1] = (doubleSize - singleSize) / 100;\n } else {\n fontData.cache[index2 + 1] = tHelper.measureText(char) / 100;\n }\n }\n return fontData.cache[index2 + 1] * size;\n }\n function getFontByName(name) {\n var i = 0;\n var len = this.fonts.length;\n while (i < len) {\n if (this.fonts[i].fName === name) {\n return this.fonts[i];\n }\n i += 1;\n }\n return this.fonts[0];\n }\n function isModifier(firstCharCode, secondCharCode) {\n var sum = firstCharCode.toString(16) + secondCharCode.toString(16);\n return surrogateModifiers.indexOf(sum) !== -1;\n }\n function isZeroWidthJoiner(firstCharCode, secondCharCode) {\n if (!secondCharCode) {\n return firstCharCode === zeroWidthJoiner[1];\n }\n return firstCharCode === zeroWidthJoiner[0] && secondCharCode === zeroWidthJoiner[1];\n }\n function isCombinedCharacter(char) {\n return combinedCharacters.indexOf(char) !== -1;\n }\n function setIsLoaded() {\n this.isLoaded = true;\n }\n var Font = function() {\n this.fonts = [];\n this.chars = null;\n this.typekitLoaded = 0;\n this.isLoaded = false;\n this._warned = false;\n this.initTime = Date.now();\n this.setIsLoadedBinded = this.setIsLoaded.bind(this);\n this.checkLoadedFontsBinded = this.checkLoadedFonts.bind(this);\n };\n Font.isModifier = isModifier;\n Font.isZeroWidthJoiner = isZeroWidthJoiner;\n Font.isCombinedCharacter = isCombinedCharacter;\n var fontPrototype = {\n addChars,\n addFonts,\n getCharData,\n getFontByName,\n measureText,\n checkLoadedFonts,\n setIsLoaded\n };\n Font.prototype = fontPrototype;\n return Font;\n }();\n function RenderableElement() {\n }\n RenderableElement.prototype = {\n initRenderable: function() {\n this.isInRange = false;\n this.hidden = false;\n this.isTransparent = false;\n this.renderableComponents = [];\n },\n addRenderableComponent: function(component) {\n if (this.renderableComponents.indexOf(component) === -1) {\n this.renderableComponents.push(component);\n }\n },\n removeRenderableComponent: function(component) {\n if (this.renderableComponents.indexOf(component) !== -1) {\n this.renderableComponents.splice(this.renderableComponents.indexOf(component), 1);\n }\n },\n prepareRenderableFrame: function(num) {\n this.checkLayerLimits(num);\n },\n checkTransparency: function() {\n if (this.finalTransform.mProp.o.v <= 0) {\n if (!this.isTransparent && this.globalData.renderConfig.hideOnTransparent) {\n this.isTransparent = true;\n this.hide();\n }\n } else if (this.isTransparent) {\n this.isTransparent = false;\n this.show();\n }\n },\n /**\n * @function\n * Initializes frame related properties.\n *\n * @param {number} num\n * current frame number in Layer's time\n *\n */\n checkLayerLimits: function(num) {\n if (this.data.ip - this.data.st <= num && this.data.op - this.data.st > num) {\n if (this.isInRange !== true) {\n this.globalData._mdf = true;\n this._mdf = true;\n this.isInRange = true;\n this.show();\n }\n } else if (this.isInRange !== false) {\n this.globalData._mdf = true;\n this.isInRange = false;\n this.hide();\n }\n },\n renderRenderable: function() {\n var i;\n var len = this.renderableComponents.length;\n for (i = 0; i < len; i += 1) {\n this.renderableComponents[i].renderFrame(this._isFirstFrame);\n }\n },\n sourceRectAtTime: function() {\n return {\n top: 0,\n left: 0,\n width: 100,\n height: 100\n };\n },\n getLayerSize: function() {\n if (this.data.ty === 5) {\n return { w: this.data.textData.width, h: this.data.textData.height };\n }\n return { w: this.data.width, h: this.data.height };\n }\n };\n const MaskManagerInterface = function() {\n function MaskInterface(mask, data) {\n this._mask = mask;\n this._data = data;\n }\n Object.defineProperty(MaskInterface.prototype, \"maskPath\", {\n get: function() {\n if (this._mask.prop.k) {\n this._mask.prop.getValue();\n }\n return this._mask.prop;\n }\n });\n Object.defineProperty(MaskInterface.prototype, \"maskOpacity\", {\n get: function() {\n if (this._mask.op.k) {\n this._mask.op.getValue();\n }\n return this._mask.op.v * 100;\n }\n });\n var MaskManager = function(maskManager) {\n var _masksInterfaces = createSizedArray(maskManager.viewData.length);\n var i;\n var len = maskManager.viewData.length;\n for (i = 0; i < len; i += 1) {\n _masksInterfaces[i] = new MaskInterface(maskManager.viewData[i], maskManager.masksProperties[i]);\n }\n var maskFunction = function(name) {\n i = 0;\n while (i < len) {\n if (maskManager.masksProperties[i].nm === name) {\n return _masksInterfaces[i];\n }\n i += 1;\n }\n return null;\n };\n return maskFunction;\n };\n return MaskManager;\n }();\n const ExpressionPropertyInterface = function() {\n var defaultUnidimensionalValue = { pv: 0, v: 0, mult: 1 };\n var defaultMultidimensionalValue = { pv: [0, 0, 0], v: [0, 0, 0], mult: 1 };\n function completeProperty(expressionValue, property, type) {\n Object.defineProperty(expressionValue, \"velocity\", {\n get: function() {\n return property.getVelocityAtTime(property.comp.currentFrame);\n }\n });\n expressionValue.numKeys = property.keyframes ? property.keyframes.length : 0;\n expressionValue.key = function(pos) {\n if (!expressionValue.numKeys) {\n return 0;\n }\n var value = \"\";\n if (\"s\" in property.keyframes[pos - 1]) {\n value = property.keyframes[pos - 1].s;\n } else if (\"e\" in property.keyframes[pos - 2]) {\n value = property.keyframes[pos - 2].e;\n } else {\n value = property.keyframes[pos - 2].s;\n }\n var valueProp = type === \"unidimensional\" ? new Number(value) : Object.assign({}, value);\n valueProp.time = property.keyframes[pos - 1].t / property.elem.comp.globalData.frameRate;\n valueProp.value = type === \"unidimensional\" ? value[0] : value;\n return valueProp;\n };\n expressionValue.valueAtTime = property.getValueAtTime;\n expressionValue.speedAtTime = property.getSpeedAtTime;\n expressionValue.velocityAtTime = property.getVelocityAtTime;\n expressionValue.propertyGroup = property.propertyGroup;\n }\n function UnidimensionalPropertyInterface(property) {\n if (!property || !(\"pv\" in property)) {\n property = defaultUnidimensionalValue;\n }\n var mult = 1 / property.mult;\n var val = property.pv * mult;\n var expressionValue = new Number(val);\n expressionValue.value = val;\n completeProperty(expressionValue, property, \"unidimensional\");\n return function() {\n if (property.k) {\n property.getValue();\n }\n val = property.v * mult;\n if (expressionValue.value !== val) {\n expressionValue = new Number(val);\n expressionValue.value = val;\n completeProperty(expressionValue, property, \"unidimensional\");\n }\n return expressionValue;\n };\n }\n function MultidimensionalPropertyInterface(property) {\n if (!property || !(\"pv\" in property)) {\n property = defaultMultidimensionalValue;\n }\n var mult = 1 / property.mult;\n var len = property.data && property.data.l || property.pv.length;\n var expressionValue = createTypedArray(\"float32\", len);\n var arrValue = createTypedArray(\"float32\", len);\n expressionValue.value = arrValue;\n completeProperty(expressionValue, property, \"multidimensional\");\n return function() {\n if (property.k) {\n property.getValue();\n }\n for (var i = 0; i < len; i += 1) {\n arrValue[i] = property.v[i] * mult;\n expressionValue[i] = arrValue[i];\n }\n return expressionValue;\n };\n }\n function defaultGetter() {\n return defaultUnidimensionalValue;\n }\n return function(property) {\n if (!property) {\n return defaultGetter;\n }\n if (property.propType === \"unidimensional\") {\n return UnidimensionalPropertyInterface(property);\n }\n return MultidimensionalPropertyInterface(property);\n };\n }();\n const TransformExpressionInterface = function() {\n return function(transform) {\n function _thisFunction(name) {\n switch (name) {\n case \"scale\":\n case \"Scale\":\n case \"ADBE Scale\":\n case 6:\n return _thisFunction.scale;\n case \"rotation\":\n case \"Rotation\":\n case \"ADBE Rotation\":\n case \"ADBE Rotate Z\":\n case 10:\n return _thisFunction.rotation;\n case \"ADBE Rotate X\":\n return _thisFunction.xRotation;\n case \"ADBE Rotate Y\":\n return _thisFunction.yRotation;\n case \"position\":\n case \"Position\":\n case \"ADBE Position\":\n case 2:\n return _thisFunction.position;\n case \"ADBE Position_0\":\n return _thisFunction.xPosition;\n case \"ADBE Position_1\":\n return _thisFunction.yPosition;\n case \"ADBE Position_2\":\n return _thisFunction.zPosition;\n case \"anchorPoint\":\n case \"AnchorPoint\":\n case \"Anchor Point\":\n case \"ADBE AnchorPoint\":\n case 1:\n return _thisFunction.anchorPoint;\n case \"opacity\":\n case \"Opacity\":\n case 11:\n return _thisFunction.opacity;\n default:\n return null;\n }\n }\n Object.defineProperty(_thisFunction, \"rotation\", {\n get: ExpressionPropertyInterface(transform.r || transform.rz)\n });\n Object.defineProperty(_thisFunction, \"zRotation\", {\n get: ExpressionPropertyInterface(transform.rz || transform.r)\n });\n Object.defineProperty(_thisFunction, \"xRotation\", {\n get: ExpressionPropertyInterface(transform.rx)\n });\n Object.defineProperty(_thisFunction, \"yRotation\", {\n get: ExpressionPropertyInterface(transform.ry)\n });\n Object.defineProperty(_thisFunction, \"scale\", {\n get: ExpressionPropertyInterface(transform.s)\n });\n var _px;\n var _py;\n var _pz;\n var _transformFactory;\n if (transform.p) {\n _transformFactory = ExpressionPropertyInterface(transform.p);\n } else {\n _px = ExpressionPropertyInterface(transform.px);\n _py = ExpressionPropertyInterface(transform.py);\n if (transform.pz) {\n _pz = ExpressionPropertyInterface(transform.pz);\n }\n }\n Object.defineProperty(_thisFunction, \"position\", {\n get: function() {\n if (transform.p) {\n return _transformFactory();\n }\n return [_px(), _py(), _pz ? _pz() : 0];\n }\n });\n Object.defineProperty(_thisFunction, \"xPosition\", {\n get: ExpressionPropertyInterface(transform.px)\n });\n Object.defineProperty(_thisFunction, \"yPosition\", {\n get: ExpressionPropertyInterface(transform.py)\n });\n Object.defineProperty(_thisFunction, \"zPosition\", {\n get: ExpressionPropertyInterface(transform.pz)\n });\n Object.defineProperty(_thisFunction, \"anchorPoint\", {\n get: ExpressionPropertyInterface(transform.a)\n });\n Object.defineProperty(_thisFunction, \"opacity\", {\n get: ExpressionPropertyInterface(transform.o)\n });\n Object.defineProperty(_thisFunction, \"skew\", {\n get: ExpressionPropertyInterface(transform.sk)\n });\n Object.defineProperty(_thisFunction, \"skewAxis\", {\n get: ExpressionPropertyInterface(transform.sa)\n });\n Object.defineProperty(_thisFunction, \"orientation\", {\n get: ExpressionPropertyInterface(transform.or)\n });\n return _thisFunction;\n };\n }();\n const LayerExpressionInterface = function() {\n function getMatrix(time) {\n var toWorldMat = new Matrix();\n if (time !== void 0) {\n var propMatrix = this._elem.finalTransform.mProp.getValueAtTime(time);\n propMatrix.clone(toWorldMat);\n } else {\n var transformMat = this._elem.finalTransform.mProp;\n transformMat.applyToMatrix(toWorldMat);\n }\n return toWorldMat;\n }\n function toWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = 0;\n toWorldMat.props[13] = 0;\n toWorldMat.props[14] = 0;\n return this.applyPoint(toWorldMat, arr);\n }\n function toWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.applyPoint(toWorldMat, arr);\n }\n function fromWorldVec(arr, time) {\n var toWorldMat = this.getMatrix(time);\n toWorldMat.props[12] = 0;\n toWorldMat.props[13] = 0;\n toWorldMat.props[14] = 0;\n return this.invertPoint(toWorldMat, arr);\n }\n function fromWorld(arr, time) {\n var toWorldMat = this.getMatrix(time);\n return this.invertPoint(toWorldMat, arr);\n }\n function applyPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n return matrix.applyToPointArray(arr[0], arr[1], arr[2] || 0);\n }\n function invertPoint(matrix, arr) {\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(matrix);\n }\n }\n return matrix.inversePoint(arr);\n }\n function fromComp(arr) {\n var toWorldMat = new Matrix();\n toWorldMat.reset();\n this._elem.finalTransform.mProp.applyToMatrix(toWorldMat);\n if (this._elem.hierarchy && this._elem.hierarchy.length) {\n var i;\n var len = this._elem.hierarchy.length;\n for (i = 0; i < len; i += 1) {\n this._elem.hierarchy[i].finalTransform.mProp.applyToMatrix(toWorldMat);\n }\n return toWorldMat.inversePoint(arr);\n }\n return toWorldMat.inversePoint(arr);\n }\n function sampleImage() {\n return [1, 1, 1, 1];\n }\n return function(elem) {\n var transformInterface;\n function _registerMaskInterface(maskManager) {\n _thisLayerFunction.mask = new MaskManagerInterface(maskManager, elem);\n }\n function _registerEffectsInterface(effects) {\n _thisLayerFunction.effect = effects;\n }\n function _thisLayerFunction(name) {\n switch (name) {\n case \"ADBE Root Vectors Group\":\n case \"Contents\":\n case 2:\n return _thisLayerFunction.shapeInterface;\n case 1:\n case 6:\n case \"Transform\":\n case \"transform\":\n case \"ADBE Transform Group\":\n return transformInterface;\n case 4:\n case \"ADBE Effect Parade\":\n case \"effects\":\n case \"Effects\":\n return _thisLayerFunction.effect;\n case \"ADBE Text Properties\":\n return _thisLayerFunction.textInterface;\n default:\n return null;\n }\n }\n _thisLayerFunction.getMatrix = getMatrix;\n _thisLayerFunction.invertPoint = invertPoint;\n _thisLayerFunction.applyPoint = applyPoint;\n _thisLayerFunction.toWorld = toWorld;\n _thisLayerFunction.toWorldVec = toWorldVec;\n _thisLayerFunction.fromWorld = fromWorld;\n _thisLayerFunction.fromWorldVec = fromWorldVec;\n _thisLayerFunction.toComp = toWorld;\n _thisLayerFunction.fromComp = fromComp;\n _thisLayerFunction.sampleImage = sampleImage;\n _thisLayerFunction.sourceRectAtTime = elem.sourceRectAtTime.bind(elem);\n _thisLayerFunction._elem = elem;\n transformInterface = TransformExpressionInterface(elem.finalTransform.mProp);\n var anchorPointDescriptor = getDescriptor(transformInterface, \"anchorPoint\");\n Object.defineProperties(_thisLayerFunction, {\n hasParent: {\n get: function() {\n return elem.hierarchy.length;\n }\n },\n parent: {\n get: function() {\n return elem.hierarchy[0].layerInterface;\n }\n },\n rotation: getDescriptor(transformInterface, \"rotation\"),\n scale: getDescriptor(transformInterface, \"scale\"),\n position: getDescriptor(transformInterface, \"position\"),\n opacity: getDescriptor(transformInterface, \"opacity\"),\n anchorPoint: anchorPointDescriptor,\n anchor_point: anchorPointDescriptor,\n transform: {\n get: function() {\n return transformInterface;\n }\n },\n active: {\n get: function() {\n return elem.isInRange;\n }\n }\n });\n _thisLayerFunction.startTime = elem.data.st;\n _thisLayerFunction.index = elem.data.ind;\n _thisLayerFunction.source = elem.data.refId;\n _thisLayerFunction.height = elem.data.ty === 0 ? elem.data.h : 100;\n _thisLayerFunction.width = elem.data.ty === 0 ? elem.data.w : 100;\n _thisLayerFunction.inPoint = elem.data.ip / elem.comp.globalData.frameRate;\n _thisLayerFunction.outPoint = elem.data.op / elem.comp.globalData.frameRate;\n _thisLayerFunction._name = elem.data.nm;\n _thisLayerFunction.registerMaskInterface = _registerMaskInterface;\n _thisLayerFunction.registerEffectsInterface = _registerEffectsInterface;\n return _thisLayerFunction;\n };\n }();\n const propertyGroupFactory = function() {\n return function(interfaceFunction, parentPropertyGroup) {\n return function(val) {\n val = val === void 0 ? 1 : val;\n if (val <= 0) {\n return interfaceFunction;\n }\n return parentPropertyGroup(val - 1);\n };\n };\n }();\n const PropertyInterface = function() {\n return function(propertyName, propertyGroup) {\n var interfaceFunction = {\n _name: propertyName\n };\n function _propertyGroup(val) {\n val = val === void 0 ? 1 : val;\n if (val <= 0) {\n return interfaceFunction;\n }\n return propertyGroup(val - 1);\n }\n return _propertyGroup;\n };\n }();\n const EffectsExpressionInterface = function() {\n var ob = {\n createEffectsInterface\n };\n function createEffectsInterface(elem, propertyGroup) {\n if (elem.effectsManager) {\n var effectElements = [];\n var effectsData = elem.data.ef;\n var i;\n var len = elem.effectsManager.effectElements.length;\n for (i = 0; i < len; i += 1) {\n effectElements.push(\n createGroupInterface(effectsData[i], elem.effectsManager.effectElements[i], propertyGroup, elem)\n );\n }\n var effects = elem.data.ef || [];\n var groupInterface = function(name) {\n i = 0;\n len = effects.length;\n while (i < len) {\n if (name === effects[i].nm || name === effects[i].mn || name === effects[i].ix) {\n return effectElements[i];\n }\n i += 1;\n }\n return null;\n };\n Object.defineProperty(groupInterface, \"numProperties\", {\n get: function() {\n return effects.length;\n }\n });\n return groupInterface;\n }\n return null;\n }\n function createGroupInterface(data, elements, propertyGroup, elem) {\n function groupInterface(name) {\n var effects = data.ef;\n var i2 = 0;\n var len2 = effects.length;\n while (i2 < len2) {\n if (name === effects[i2].nm || name === effects[i2].mn || name === effects[i2].ix) {\n if (effects[i2].ty === 5) {\n return effectElements[i2];\n }\n return effectElements[i2]();\n }\n i2 += 1;\n }\n throw new Error();\n }\n var _propertyGroup = propertyGroupFactory(groupInterface, propertyGroup);\n var effectElements = [];\n var i;\n var len = data.ef.length;\n for (i = 0; i < len; i += 1) {\n if (data.ef[i].ty === 5) {\n effectElements.push(\n createGroupInterface(\n data.ef[i],\n elements.effectElements[i],\n elements.effectElements[i].propertyGroup,\n elem\n )\n );\n } else {\n effectElements.push(createValueInterface(elements.effectElements[i], data.ef[i].ty, elem, _propertyGroup));\n }\n }\n if (data.mn === \"ADBE Color Control\") {\n Object.defineProperty(groupInterface, \"color\", {\n get: function() {\n return effectElements[0]();\n }\n });\n }\n Object.defineProperties(groupInterface, {\n numProperties: {\n get: function() {\n return data.np;\n }\n },\n _name: { value: data.nm },\n propertyGroup: { value: _propertyGroup }\n });\n groupInterface.enabled = data.en !== 0;\n groupInterface.active = groupInterface.enabled;\n return groupInterface;\n }\n function createValueInterface(element, type, elem, propertyGroup) {\n var expressionProperty = ExpressionPropertyInterface(element.p);\n function interfaceFunction() {\n if (type === 10) {\n return elem.comp.compInterface(element.p.v);\n }\n return expressionProperty();\n }\n if (element.p.setGroupProperty) {\n element.p.setGroupProperty(PropertyInterface(\"\", propertyGroup));\n }\n return interfaceFunction;\n }\n return ob;\n }();\n const CompExpressionInterface = function() {\n return function(comp) {\n function _thisLayerFunction(name) {\n var i = 0;\n var len = comp.layers.length;\n while (i < len) {\n if (comp.layers[i].nm === name || comp.layers[i].ind === name) {\n return comp.elements[i].layerInterface;\n }\n i += 1;\n }\n return null;\n }\n Object.defineProperty(_thisLayerFunction, \"_name\", { value: comp.data.nm });\n _thisLayerFunction.layer = _thisLayerFunction;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.height = comp.data.h || comp.globalData.compSize.h;\n _thisLayerFunction.width = comp.data.w || comp.globalData.compSize.w;\n _thisLayerFunction.pixelAspect = 1;\n _thisLayerFunction.frameDuration = 1 / comp.globalData.frameRate;\n _thisLayerFunction.displayStartTime = 0;\n _thisLayerFunction.numLayers = comp.layers.length;\n return _thisLayerFunction;\n };\n }();\n const ShapePathInterface = function() {\n return function pathInterfaceFactory(shape, view, propertyGroup) {\n var prop = view.sh;\n function interfaceFunction(val) {\n if (val === \"Shape\" || val === \"shape\" || val === \"Path\" || val === \"path\" || val === \"ADBE Vector Shape\" || val === 2) {\n return interfaceFunction.path;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n prop.setGroupProperty(PropertyInterface(\"Path\", _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n path: {\n get: function() {\n if (prop.k) {\n prop.getValue();\n }\n return prop;\n }\n },\n shape: {\n get: function() {\n if (prop.k) {\n prop.getValue();\n }\n return prop;\n }\n },\n _name: { value: shape.nm },\n ix: { value: shape.ix },\n propertyIndex: { value: shape.ix },\n mn: { value: shape.mn },\n propertyGroup: { value: propertyGroup }\n });\n return interfaceFunction;\n };\n }();\n const ShapeExpressionInterface = function() {\n function iterateElements(shapes, view, propertyGroup) {\n var arr = [];\n var i;\n var len = shapes ? shapes.length : 0;\n for (i = 0; i < len; i += 1) {\n if (shapes[i].ty === \"gr\") {\n arr.push(groupInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === \"fl\") {\n arr.push(fillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === \"st\") {\n arr.push(strokeInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === \"tm\") {\n arr.push(trimInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === \"tr\")\n ;\n else if (shapes[i].ty === \"el\") {\n arr.push(ellipseInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === \"sr\") {\n arr.push(starInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === \"sh\") {\n arr.push(ShapePathInterface(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === \"rc\") {\n arr.push(rectInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === \"rd\") {\n arr.push(roundedInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === \"rp\") {\n arr.push(repeaterInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else if (shapes[i].ty === \"gf\") {\n arr.push(gradientFillInterfaceFactory(shapes[i], view[i], propertyGroup));\n } else {\n arr.push(defaultInterfaceFactory(shapes[i], view[i]));\n }\n }\n return arr;\n }\n function contentsInterfaceFactory(shape, view, propertyGroup) {\n var interfaces;\n var interfaceFunction = function _interfaceFunction(value) {\n var i = 0;\n var len = interfaces.length;\n while (i < len) {\n if (interfaces[i]._name === value || interfaces[i].mn === value || interfaces[i].propertyIndex === value || interfaces[i].ix === value || interfaces[i].ind === value) {\n return interfaces[i];\n }\n i += 1;\n }\n if (typeof value === \"number\") {\n return interfaces[value - 1];\n }\n return null;\n };\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n interfaces = iterateElements(shape.it, view.it, interfaceFunction.propertyGroup);\n interfaceFunction.numProperties = interfaces.length;\n var transformInterface = transformInterfaceFactory(\n shape.it[shape.it.length - 1],\n view.it[view.it.length - 1],\n interfaceFunction.propertyGroup\n );\n interfaceFunction.transform = transformInterface;\n interfaceFunction.propertyIndex = shape.cix;\n interfaceFunction._name = shape.nm;\n return interfaceFunction;\n }\n function groupInterfaceFactory(shape, view, propertyGroup) {\n var interfaceFunction = function _interfaceFunction(value) {\n switch (value) {\n case \"ADBE Vectors Group\":\n case \"Contents\":\n case 2:\n return interfaceFunction.content;\n default:\n return interfaceFunction.transform;\n }\n };\n interfaceFunction.propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var content = contentsInterfaceFactory(shape, view, interfaceFunction.propertyGroup);\n var transformInterface = transformInterfaceFactory(\n shape.it[shape.it.length - 1],\n view.it[view.it.length - 1],\n interfaceFunction.propertyGroup\n );\n interfaceFunction.content = content;\n interfaceFunction.transform = transformInterface;\n Object.defineProperty(interfaceFunction, \"_name\", {\n get: function() {\n return shape.nm;\n }\n });\n interfaceFunction.numProperties = shape.np;\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.nm = shape.nm;\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n function fillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === \"Color\" || val === \"color\") {\n return interfaceFunction.color;\n }\n if (val === \"Opacity\" || val === \"opacity\") {\n return interfaceFunction.opacity;\n }\n return null;\n }\n Object.defineProperties(interfaceFunction, {\n color: {\n get: ExpressionPropertyInterface(view.c)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n _name: { value: shape.nm },\n mn: { value: shape.mn }\n });\n view.c.setGroupProperty(PropertyInterface(\"Color\", propertyGroup));\n view.o.setGroupProperty(PropertyInterface(\"Opacity\", propertyGroup));\n return interfaceFunction;\n }\n function gradientFillInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === \"Start Point\" || val === \"start point\") {\n return interfaceFunction.startPoint;\n }\n if (val === \"End Point\" || val === \"end point\") {\n return interfaceFunction.endPoint;\n }\n if (val === \"Opacity\" || val === \"opacity\") {\n return interfaceFunction.opacity;\n }\n return null;\n }\n Object.defineProperties(interfaceFunction, {\n startPoint: {\n get: ExpressionPropertyInterface(view.s)\n },\n endPoint: {\n get: ExpressionPropertyInterface(view.e)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n type: {\n get: function() {\n return \"a\";\n }\n },\n _name: { value: shape.nm },\n mn: { value: shape.mn }\n });\n view.s.setGroupProperty(PropertyInterface(\"Start Point\", propertyGroup));\n view.e.setGroupProperty(PropertyInterface(\"End Point\", propertyGroup));\n view.o.setGroupProperty(PropertyInterface(\"Opacity\", propertyGroup));\n return interfaceFunction;\n }\n function defaultInterfaceFactory() {\n function interfaceFunction() {\n return null;\n }\n return interfaceFunction;\n }\n function strokeInterfaceFactory(shape, view, propertyGroup) {\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var _dashPropertyGroup = propertyGroupFactory(dashOb, _propertyGroup);\n function addPropertyToDashOb(i2) {\n Object.defineProperty(dashOb, shape.d[i2].nm, {\n get: ExpressionPropertyInterface(view.d.dataProps[i2].p)\n });\n }\n var i;\n var len = shape.d ? shape.d.length : 0;\n var dashOb = {};\n for (i = 0; i < len; i += 1) {\n addPropertyToDashOb(i);\n view.d.dataProps[i].p.setGroupProperty(_dashPropertyGroup);\n }\n function interfaceFunction(val) {\n if (val === \"Color\" || val === \"color\") {\n return interfaceFunction.color;\n }\n if (val === \"Opacity\" || val === \"opacity\") {\n return interfaceFunction.opacity;\n }\n if (val === \"Stroke Width\" || val === \"stroke width\") {\n return interfaceFunction.strokeWidth;\n }\n return null;\n }\n Object.defineProperties(interfaceFunction, {\n color: {\n get: ExpressionPropertyInterface(view.c)\n },\n opacity: {\n get: ExpressionPropertyInterface(view.o)\n },\n strokeWidth: {\n get: ExpressionPropertyInterface(view.w)\n },\n dash: {\n get: function() {\n return dashOb;\n }\n },\n _name: { value: shape.nm },\n mn: { value: shape.mn }\n });\n view.c.setGroupProperty(PropertyInterface(\"Color\", _propertyGroup));\n view.o.setGroupProperty(PropertyInterface(\"Opacity\", _propertyGroup));\n view.w.setGroupProperty(PropertyInterface(\"Stroke Width\", _propertyGroup));\n return interfaceFunction;\n }\n function trimInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(val) {\n if (val === shape.e.ix || val === \"End\" || val === \"end\") {\n return interfaceFunction.end;\n }\n if (val === shape.s.ix) {\n return interfaceFunction.start;\n }\n if (val === shape.o.ix) {\n return interfaceFunction.offset;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n interfaceFunction.propertyIndex = shape.ix;\n view.s.setGroupProperty(PropertyInterface(\"Start\", _propertyGroup));\n view.e.setGroupProperty(PropertyInterface(\"End\", _propertyGroup));\n view.o.setGroupProperty(PropertyInterface(\"Offset\", _propertyGroup));\n interfaceFunction.propertyIndex = shape.ix;\n interfaceFunction.propertyGroup = propertyGroup;\n Object.defineProperties(interfaceFunction, {\n start: {\n get: ExpressionPropertyInterface(view.s)\n },\n end: {\n get: ExpressionPropertyInterface(view.e)\n },\n offset: {\n get: ExpressionPropertyInterface(view.o)\n },\n _name: { value: shape.nm }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n function transformInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.a.ix === value || value === \"Anchor Point\") {\n return interfaceFunction.anchorPoint;\n }\n if (shape.o.ix === value || value === \"Opacity\") {\n return interfaceFunction.opacity;\n }\n if (shape.p.ix === value || value === \"Position\") {\n return interfaceFunction.position;\n }\n if (shape.r.ix === value || value === \"Rotation\" || value === \"ADBE Vector Rotation\") {\n return interfaceFunction.rotation;\n }\n if (shape.s.ix === value || value === \"Scale\") {\n return interfaceFunction.scale;\n }\n if (shape.sk && shape.sk.ix === value || value === \"Skew\") {\n return interfaceFunction.skew;\n }\n if (shape.sa && shape.sa.ix === value || value === \"Skew Axis\") {\n return interfaceFunction.skewAxis;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n view.transform.mProps.o.setGroupProperty(PropertyInterface(\"Opacity\", _propertyGroup));\n view.transform.mProps.p.setGroupProperty(PropertyInterface(\"Position\", _propertyGroup));\n view.transform.mProps.a.setGroupProperty(PropertyInterface(\"Anchor Point\", _propertyGroup));\n view.transform.mProps.s.setGroupProperty(PropertyInterface(\"Scale\", _propertyGroup));\n view.transform.mProps.r.setGroupProperty(PropertyInterface(\"Rotation\", _propertyGroup));\n if (view.transform.mProps.sk) {\n view.transform.mProps.sk.setGroupProperty(PropertyInterface(\"Skew\", _propertyGroup));\n view.transform.mProps.sa.setGroupProperty(PropertyInterface(\"Skew Angle\", _propertyGroup));\n }\n view.transform.op.setGroupProperty(PropertyInterface(\"Opacity\", _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n opacity: {\n get: ExpressionPropertyInterface(view.transform.mProps.o)\n },\n position: {\n get: ExpressionPropertyInterface(view.transform.mProps.p)\n },\n anchorPoint: {\n get: ExpressionPropertyInterface(view.transform.mProps.a)\n },\n scale: {\n get: ExpressionPropertyInterface(view.transform.mProps.s)\n },\n rotation: {\n get: ExpressionPropertyInterface(view.transform.mProps.r)\n },\n skew: {\n get: ExpressionPropertyInterface(view.transform.mProps.sk)\n },\n skewAxis: {\n get: ExpressionPropertyInterface(view.transform.mProps.sa)\n },\n _name: { value: shape.nm }\n });\n interfaceFunction.ty = \"tr\";\n interfaceFunction.mn = shape.mn;\n interfaceFunction.propertyGroup = propertyGroup;\n return interfaceFunction;\n }\n function ellipseInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n if (shape.s.ix === value) {\n return interfaceFunction.size;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n interfaceFunction.propertyIndex = shape.ix;\n var prop = view.sh.ty === \"tm\" ? view.sh.prop : view.sh;\n prop.s.setGroupProperty(PropertyInterface(\"Size\", _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface(\"Position\", _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n size: {\n get: ExpressionPropertyInterface(prop.s)\n },\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n _name: { value: shape.nm }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n function starInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n if (shape.r.ix === value) {\n return interfaceFunction.rotation;\n }\n if (shape.pt.ix === value) {\n return interfaceFunction.points;\n }\n if (shape.or.ix === value || value === \"ADBE Vector Star Outer Radius\") {\n return interfaceFunction.outerRadius;\n }\n if (shape.os.ix === value) {\n return interfaceFunction.outerRoundness;\n }\n if (shape.ir && (shape.ir.ix === value || value === \"ADBE Vector Star Inner Radius\")) {\n return interfaceFunction.innerRadius;\n }\n if (shape.is && shape.is.ix === value) {\n return interfaceFunction.innerRoundness;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var prop = view.sh.ty === \"tm\" ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.or.setGroupProperty(PropertyInterface(\"Outer Radius\", _propertyGroup));\n prop.os.setGroupProperty(PropertyInterface(\"Outer Roundness\", _propertyGroup));\n prop.pt.setGroupProperty(PropertyInterface(\"Points\", _propertyGroup));\n prop.p.setGroupProperty(PropertyInterface(\"Position\", _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface(\"Rotation\", _propertyGroup));\n if (shape.ir) {\n prop.ir.setGroupProperty(PropertyInterface(\"Inner Radius\", _propertyGroup));\n prop.is.setGroupProperty(PropertyInterface(\"Inner Roundness\", _propertyGroup));\n }\n Object.defineProperties(interfaceFunction, {\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n rotation: {\n get: ExpressionPropertyInterface(prop.r)\n },\n points: {\n get: ExpressionPropertyInterface(prop.pt)\n },\n outerRadius: {\n get: ExpressionPropertyInterface(prop.or)\n },\n outerRoundness: {\n get: ExpressionPropertyInterface(prop.os)\n },\n innerRadius: {\n get: ExpressionPropertyInterface(prop.ir)\n },\n innerRoundness: {\n get: ExpressionPropertyInterface(prop.is)\n },\n _name: { value: shape.nm }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n function rectInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.p.ix === value) {\n return interfaceFunction.position;\n }\n if (shape.r.ix === value) {\n return interfaceFunction.roundness;\n }\n if (shape.s.ix === value || value === \"Size\" || value === \"ADBE Vector Rect Size\") {\n return interfaceFunction.size;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var prop = view.sh.ty === \"tm\" ? view.sh.prop : view.sh;\n interfaceFunction.propertyIndex = shape.ix;\n prop.p.setGroupProperty(PropertyInterface(\"Position\", _propertyGroup));\n prop.s.setGroupProperty(PropertyInterface(\"Size\", _propertyGroup));\n prop.r.setGroupProperty(PropertyInterface(\"Rotation\", _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n position: {\n get: ExpressionPropertyInterface(prop.p)\n },\n roundness: {\n get: ExpressionPropertyInterface(prop.r)\n },\n size: {\n get: ExpressionPropertyInterface(prop.s)\n },\n _name: { value: shape.nm }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n function roundedInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.r.ix === value || value === \"Round Corners 1\") {\n return interfaceFunction.radius;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.rd.setGroupProperty(PropertyInterface(\"Radius\", _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n radius: {\n get: ExpressionPropertyInterface(prop.rd)\n },\n _name: { value: shape.nm }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n function repeaterInterfaceFactory(shape, view, propertyGroup) {\n function interfaceFunction(value) {\n if (shape.c.ix === value || value === \"Copies\") {\n return interfaceFunction.copies;\n }\n if (shape.o.ix === value || value === \"Offset\") {\n return interfaceFunction.offset;\n }\n return null;\n }\n var _propertyGroup = propertyGroupFactory(interfaceFunction, propertyGroup);\n var prop = view;\n interfaceFunction.propertyIndex = shape.ix;\n prop.c.setGroupProperty(PropertyInterface(\"Copies\", _propertyGroup));\n prop.o.setGroupProperty(PropertyInterface(\"Offset\", _propertyGroup));\n Object.defineProperties(interfaceFunction, {\n copies: {\n get: ExpressionPropertyInterface(prop.c)\n },\n offset: {\n get: ExpressionPropertyInterface(prop.o)\n },\n _name: { value: shape.nm }\n });\n interfaceFunction.mn = shape.mn;\n return interfaceFunction;\n }\n return function(shapes, view, propertyGroup) {\n var interfaces;\n function _interfaceFunction(value) {\n if (typeof value === \"number\") {\n value = value === void 0 ? 1 : value;\n if (value === 0) {\n return propertyGroup;\n }\n return interfaces[value - 1];\n }\n var i = 0;\n var len = interfaces.length;\n while (i < len) {\n if (interfaces[i]._name === value) {\n return interfaces[i];\n }\n i += 1;\n }\n return null;\n }\n function parentGroupWrapper() {\n return propertyGroup;\n }\n _interfaceFunction.propertyGroup = propertyGroupFactory(_interfaceFunction, parentGroupWrapper);\n interfaces = iterateElements(shapes, view, _interfaceFunction.propertyGroup);\n _interfaceFunction.numProperties = interfaces.length;\n _interfaceFunction._name = \"Contents\";\n return _interfaceFunction;\n };\n }();\n const TextExpressionInterface = function() {\n return function(elem) {\n var _prevValue;\n var _sourceText;\n function _thisLayerFunction(name) {\n switch (name) {\n case \"ADBE Text Document\":\n return _thisLayerFunction.sourceText;\n default:\n return null;\n }\n }\n Object.defineProperty(_thisLayerFunction, \"sourceText\", {\n get: function() {\n elem.textProperty.getValue();\n var stringValue = elem.textProperty.currentData.t;\n if (stringValue !== _prevValue) {\n elem.textProperty.currentData.t = _prevValue;\n _sourceText = new String(stringValue);\n _sourceText.value = stringValue || new String(stringValue);\n }\n return _sourceText;\n }\n });\n return _thisLayerFunction;\n };\n }();\n const getBlendMode = function() {\n var blendModeEnums = {\n 0: \"source-over\",\n 1: \"multiply\",\n 2: \"screen\",\n 3: \"overlay\",\n 4: \"darken\",\n 5: \"lighten\",\n 6: \"color-dodge\",\n 7: \"color-burn\",\n 8: \"hard-light\",\n 9: \"soft-light\",\n 10: \"difference\",\n 11: \"exclusion\",\n 12: \"hue\",\n 13: \"saturation\",\n 14: \"color\",\n 15: \"luminosity\"\n };\n return function(mode) {\n return blendModeEnums[mode] || \"\";\n };\n }();\n function SliderEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n function AngleEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n function ColorEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n function PointEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 1, 0, container);\n }\n function LayerIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n function MaskIndexEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n function CheckboxEffect(data, elem, container) {\n this.p = PropertyFactory.getProp(elem, data.v, 0, 0, container);\n }\n function NoValueEffect() {\n this.p = {};\n }\n function EffectsManager(data, element) {\n var effects = data.ef || [];\n this.effectElements = [];\n var i;\n var len = effects.length;\n var effectItem;\n for (i = 0; i < len; i += 1) {\n effectItem = new GroupEffect(effects[i], element);\n this.effectElements.push(effectItem);\n }\n }\n function GroupEffect(data, element) {\n this.init(data, element);\n }\n extendPrototype([DynamicPropertyContainer], GroupEffect);\n GroupEffect.prototype.getValue = GroupEffect.prototype.iterateDynamicProperties;\n GroupEffect.prototype.init = function(data, element) {\n this.data = data;\n this.effectElements = [];\n this.initDynamicPropertyContainer(element);\n var i;\n var len = this.data.ef.length;\n var eff;\n var effects = this.data.ef;\n for (i = 0; i < len; i += 1) {\n eff = null;\n switch (effects[i].ty) {\n case 0:\n eff = new SliderEffect(effects[i], element, this);\n break;\n case 1:\n eff = new AngleEffect(effects[i], element, this);\n break;\n case 2:\n eff = new ColorEffect(effects[i], element, this);\n break;\n case 3:\n eff = new PointEffect(effects[i], element, this);\n break;\n case 4:\n case 7:\n eff = new CheckboxEffect(effects[i], element, this);\n break;\n case 10:\n eff = new LayerIndexEffect(effects[i], element, this);\n break;\n case 11:\n eff = new MaskIndexEffect(effects[i], element, this);\n break;\n case 5:\n eff = new EffectsManager(effects[i], element);\n break;\n default:\n eff = new NoValueEffect(effects[i]);\n break;\n }\n if (eff) {\n this.effectElements.push(eff);\n }\n }\n };\n function BaseElement() {\n }\n BaseElement.prototype = {\n checkMasks: function() {\n if (!this.data.hasMask) {\n return false;\n }\n var i = 0;\n var len = this.data.masksProperties.length;\n while (i < len) {\n if (this.data.masksProperties[i].mode !== \"n\" && this.data.masksProperties[i].cl !== false) {\n return true;\n }\n i += 1;\n }\n return false;\n },\n initExpressions: function() {\n this.layerInterface = LayerExpressionInterface(this);\n if (this.data.hasMask && this.maskManager) {\n this.layerInterface.registerMaskInterface(this.maskManager);\n }\n var effectsInterface = EffectsExpressionInterface.createEffectsInterface(this, this.layerInterface);\n this.layerInterface.registerEffectsInterface(effectsInterface);\n if (this.data.ty === 0 || this.data.xt) {\n this.compInterface = CompExpressionInterface(this);\n } else if (this.data.ty === 4) {\n this.layerInterface.shapeInterface = ShapeExpressionInterface(\n this.shapesData,\n this.itemsData,\n this.layerInterface\n );\n this.layerInterface.content = this.layerInterface.shapeInterface;\n } else if (this.data.ty === 5) {\n this.layerInterface.textInterface = TextExpressionInterface(this);\n this.layerInterface.text = this.layerInterface.textInterface;\n }\n },\n setBlendMode: function() {\n var blendModeValue = getBlendMode(this.data.bm);\n var elem = this.baseElement || this.layerElement;\n elem.style[\"mix-blend-mode\"] = blendModeValue;\n },\n initBaseData: function(data, globalData, comp) {\n this.globalData = globalData;\n this.comp = comp;\n this.data = data;\n this.layerId = createElementID();\n if (!this.data.sr) {\n this.data.sr = 1;\n }\n this.effectsManager = new EffectsManager(this.data, this, this.dynamicProperties);\n },\n getType: function() {\n return this.type;\n },\n sourceRectAtTime: function() {\n }\n };\n function FrameElement() {\n }\n FrameElement.prototype = {\n /**\n * @function\n * Initializes frame related properties.\n *\n */\n initFrame: function() {\n this._isFirstFrame = false;\n this.dynamicProperties = [];\n this._mdf = false;\n },\n /**\n * @function\n * Calculates all dynamic values\n *\n * @param {number} num\n * current frame number in Layer's time\n * @param {boolean} isVisible\n * if layers is currently in range\n *\n */\n prepareProperties: function(num, isVisible) {\n var i;\n var len = this.dynamicProperties.length;\n for (i = 0; i < len; i += 1) {\n if (isVisible || this._isParent && this.dynamicProperties[i].propType === \"transform\") {\n this.dynamicProperties[i].getValue();\n if (this.dynamicProperties[i]._mdf) {\n this.globalData._mdf = true;\n this._mdf = true;\n }\n }\n }\n },\n addDynamicProperty: function(prop) {\n if (this.dynamicProperties.indexOf(prop) === -1) {\n this.dynamicProperties.push(prop);\n }\n }\n };\n const FootageInterface = function() {\n var outlineInterfaceFactory = function(elem) {\n var currentPropertyName = \"\";\n var currentProperty = elem.getFootageData();\n function init() {\n currentPropertyName = \"\";\n currentProperty = elem.getFootageData();\n return searchProperty;\n }\n function searchProperty(value) {\n if (currentProperty[value]) {\n currentPropertyName = value;\n currentProperty = currentProperty[value];\n if (typeof currentProperty === \"object\") {\n return searchProperty;\n }\n return currentProperty;\n }\n var propertyNameIndex = value.indexOf(currentPropertyName);\n if (propertyNameIndex !== -1) {\n var index2 = parseInt(value.substr(propertyNameIndex + currentPropertyName.length), 10);\n currentProperty = currentProperty[index2];\n if (typeof currentProperty === \"object\") {\n return searchProperty;\n }\n return currentProperty;\n }\n return \"\";\n }\n return init;\n };\n var dataInterfaceFactory = function(elem) {\n function interfaceFunction(value) {\n if (value === \"Outline\") {\n return interfaceFunction.outlineInterface();\n }\n return null;\n }\n interfaceFunction._name = \"Outline\";\n interfaceFunction.outlineInterface = outlineInterfaceFactory(elem);\n return interfaceFunction;\n };\n return function(elem) {\n function _interfaceFunction(value) {\n if (value === \"Data\") {\n return _interfaceFunction.dataInterface;\n }\n return null;\n }\n _interfaceFunction._name = \"Data\";\n _interfaceFunction.dataInterface = dataInterfaceFactory(elem);\n return _interfaceFunction;\n };\n }();\n function FootageElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.footageData = globalData.imageLoader.getAsset(this.assetData);\n this.initBaseData(data, globalData, comp);\n }\n FootageElement.prototype.prepareFrame = function() {\n };\n extendPrototype([RenderableElement, BaseElement, FrameElement], FootageElement);\n FootageElement.prototype.getBaseElement = function() {\n return null;\n };\n FootageElement.prototype.renderFrame = function() {\n };\n FootageElement.prototype.destroy = function() {\n };\n FootageElement.prototype.initExpressions = function() {\n this.layerInterface = FootageInterface(this);\n };\n FootageElement.prototype.getFootageData = function() {\n return this.footageData;\n };\n function AudioElement(data, globalData, comp) {\n this.initFrame();\n this.initRenderable();\n this.assetData = globalData.getAssetData(data.refId);\n this.initBaseData(data, globalData, comp);\n this._isPlaying = false;\n this._canPlay = false;\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.audio = this.globalData.audioController.createAudio(assetPath);\n this._currentTime = 0;\n this.globalData.audioController.addAudio(this);\n this._volumeMultiplier = 1;\n this._volume = 1;\n this._previousVolume = null;\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true };\n this.lv = PropertyFactory.getProp(this, data.au && data.au.lv ? data.au.lv : { k: [100] }, 1, 0.01, this);\n }\n AudioElement.prototype.prepareFrame = function(num) {\n this.prepareRenderableFrame(num, true);\n this.prepareProperties(num, true);\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n this._currentTime = timeRemapped;\n } else {\n this._currentTime = num / this.data.sr;\n }\n this._volume = this.lv.v[0];\n var totalVolume = this._volume * this._volumeMultiplier;\n if (this._previousVolume !== totalVolume) {\n this._previousVolume = totalVolume;\n this.audio.volume(totalVolume);\n }\n };\n extendPrototype([RenderableElement, BaseElement, FrameElement], AudioElement);\n AudioElement.prototype.renderFrame = function() {\n if (this.isInRange && this._canPlay) {\n if (!this._isPlaying) {\n this.audio.play();\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n this._isPlaying = true;\n } else if (!this.audio.playing() || Math.abs(this._currentTime / this.globalData.frameRate - this.audio.seek()) > 0.1) {\n this.audio.seek(this._currentTime / this.globalData.frameRate);\n }\n }\n };\n AudioElement.prototype.show = function() {\n };\n AudioElement.prototype.hide = function() {\n this.audio.pause();\n this._isPlaying = false;\n };\n AudioElement.prototype.pause = function() {\n this.audio.pause();\n this._isPlaying = false;\n this._canPlay = false;\n };\n AudioElement.prototype.resume = function() {\n this._canPlay = true;\n };\n AudioElement.prototype.setRate = function(rateValue) {\n this.audio.rate(rateValue);\n };\n AudioElement.prototype.volume = function(volumeValue) {\n this._volumeMultiplier = volumeValue;\n this._previousVolume = volumeValue * this._volume;\n this.audio.volume(this._previousVolume);\n };\n AudioElement.prototype.getBaseElement = function() {\n return null;\n };\n AudioElement.prototype.destroy = function() {\n };\n AudioElement.prototype.sourceRectAtTime = function() {\n };\n AudioElement.prototype.initExpressions = function() {\n };\n function BaseRenderer() {\n }\n BaseRenderer.prototype.checkLayers = function(num) {\n var i;\n var len = this.layers.length;\n var data;\n this.completeLayers = true;\n for (i = len - 1; i >= 0; i -= 1) {\n if (!this.elements[i]) {\n data = this.layers[i];\n if (data.ip - data.st <= num - this.layers[i].st && data.op - data.st > num - this.layers[i].st) {\n this.buildItem(i);\n }\n }\n this.completeLayers = this.elements[i] ? this.completeLayers : false;\n }\n this.checkPendingElements();\n };\n BaseRenderer.prototype.createItem = function(layer) {\n switch (layer.ty) {\n case 2:\n return this.createImage(layer);\n case 0:\n return this.createComp(layer);\n case 1:\n return this.createSolid(layer);\n case 3:\n return this.createNull(layer);\n case 4:\n return this.createShape(layer);\n case 5:\n return this.createText(layer);\n case 6:\n return this.createAudio(layer);\n case 13:\n return this.createCamera(layer);\n case 15:\n return this.createFootage(layer);\n default:\n return this.createNull(layer);\n }\n };\n BaseRenderer.prototype.createCamera = function() {\n throw new Error(\"You're using a 3d camera. Try the html renderer.\");\n };\n BaseRenderer.prototype.createAudio = function(data) {\n return new AudioElement(data, this.globalData, this);\n };\n BaseRenderer.prototype.createFootage = function(data) {\n return new FootageElement(data, this.globalData, this);\n };\n BaseRenderer.prototype.buildAllItems = function() {\n var i;\n var len = this.layers.length;\n for (i = 0; i < len; i += 1) {\n this.buildItem(i);\n }\n this.checkPendingElements();\n };\n BaseRenderer.prototype.includeLayers = function(newLayers) {\n this.completeLayers = false;\n var i;\n var len = newLayers.length;\n var j;\n var jLen = this.layers.length;\n for (i = 0; i < len; i += 1) {\n j = 0;\n while (j < jLen) {\n if (this.layers[j].id === newLayers[i].id) {\n this.layers[j] = newLayers[i];\n break;\n }\n j += 1;\n }\n }\n };\n BaseRenderer.prototype.setProjectInterface = function(pInterface) {\n this.globalData.projectInterface = pInterface;\n };\n BaseRenderer.prototype.initItems = function() {\n if (!this.globalData.progressiveLoad) {\n this.buildAllItems();\n }\n };\n BaseRenderer.prototype.buildElementParenting = function(element, parentName, hierarchy) {\n var elements = this.elements;\n var layers = this.layers;\n var i = 0;\n var len = layers.length;\n while (i < len) {\n if (layers[i].ind == parentName) {\n if (!elements[i] || elements[i] === true) {\n this.buildItem(i);\n this.addPendingElement(element);\n } else {\n hierarchy.push(elements[i]);\n elements[i].setAsParent();\n if (layers[i].parent !== void 0) {\n this.buildElementParenting(element, layers[i].parent, hierarchy);\n } else {\n element.setHierarchy(hierarchy);\n }\n }\n }\n i += 1;\n }\n };\n BaseRenderer.prototype.addPendingElement = function(element) {\n this.pendingElements.push(element);\n };\n BaseRenderer.prototype.searchExtraCompositions = function(assets) {\n var i;\n var len = assets.length;\n for (i = 0; i < len; i += 1) {\n if (assets[i].xt) {\n var comp = this.createComp(assets[i]);\n comp.initExpressions();\n this.globalData.projectInterface.registerComposition(comp);\n }\n }\n };\n BaseRenderer.prototype.getElementByPath = function(path) {\n var pathValue = path.shift();\n var element;\n if (typeof pathValue === \"number\") {\n element = this.elements[pathValue];\n } else {\n var i;\n var len = this.elements.length;\n for (i = 0; i < len; i += 1) {\n if (this.elements[i].data.nm === pathValue) {\n element = this.elements[i];\n break;\n }\n }\n }\n if (path.length === 0) {\n return element;\n }\n return element.getElementByPath(path);\n };\n BaseRenderer.prototype.setupGlobalData = function(animData, fontsContainer) {\n this.globalData.fontManager = new FontManager();\n this.globalData.fontManager.addChars(animData.chars);\n this.globalData.fontManager.addFonts(animData.fonts, fontsContainer);\n this.globalData.getAssetData = this.animationItem.getAssetData.bind(this.animationItem);\n this.globalData.getAssetsPath = this.animationItem.getAssetsPath.bind(this.animationItem);\n this.globalData.imageLoader = this.animationItem.imagePreloader;\n this.globalData.audioController = this.animationItem.audioController;\n this.globalData.frameId = 0;\n this.globalData.frameRate = animData.fr;\n this.globalData.nm = animData.nm;\n this.globalData.compSize = {\n w: animData.w,\n h: animData.h\n };\n };\n function TransformElement() {\n }\n TransformElement.prototype = {\n initTransform: function() {\n this.finalTransform = {\n mProp: this.data.ks ? TransformPropertyFactory.getTransformProperty(this, this.data.ks, this) : { o: 0 },\n _matMdf: false,\n _opMdf: false,\n mat: new Matrix()\n };\n if (this.data.ao) {\n this.finalTransform.mProp.autoOriented = true;\n }\n if (this.data.ty !== 11)\n ;\n },\n renderTransform: function() {\n this.finalTransform._opMdf = this.finalTransform.mProp.o._mdf || this._isFirstFrame;\n this.finalTransform._matMdf = this.finalTransform.mProp._mdf || this._isFirstFrame;\n if (this.hierarchy) {\n var mat;\n var finalMat = this.finalTransform.mat;\n var i = 0;\n var len = this.hierarchy.length;\n if (!this.finalTransform._matMdf) {\n while (i < len) {\n if (this.hierarchy[i].finalTransform.mProp._mdf) {\n this.finalTransform._matMdf = true;\n break;\n }\n i += 1;\n }\n }\n if (this.finalTransform._matMdf) {\n mat = this.finalTransform.mProp.v.props;\n finalMat.cloneFromProps(mat);\n for (i = 0; i < len; i += 1) {\n mat = this.hierarchy[i].finalTransform.mProp.v.props;\n finalMat.transform(\n mat[0],\n mat[1],\n mat[2],\n mat[3],\n mat[4],\n mat[5],\n mat[6],\n mat[7],\n mat[8],\n mat[9],\n mat[10],\n mat[11],\n mat[12],\n mat[13],\n mat[14],\n mat[15]\n );\n }\n }\n }\n },\n globalToLocal: function(pt) {\n var transforms = [];\n transforms.push(this.finalTransform);\n var flag = true;\n var comp = this.comp;\n while (flag) {\n if (comp.finalTransform) {\n if (comp.data.hasMask) {\n transforms.splice(0, 0, comp.finalTransform);\n }\n comp = comp.comp;\n } else {\n flag = false;\n }\n }\n var i;\n var len = transforms.length;\n var ptNew;\n for (i = 0; i < len; i += 1) {\n ptNew = transforms[i].mat.applyToPointArray(0, 0, 0);\n pt = [pt[0] - ptNew[0], pt[1] - ptNew[1], 0];\n }\n return pt;\n },\n mHelper: new Matrix()\n };\n function MaskElement(data, element, globalData) {\n this.data = data;\n this.element = element;\n this.globalData = globalData;\n this.storedData = [];\n this.masksProperties = this.data.masksProperties || [];\n this.maskElement = null;\n var defs = this.globalData.defs;\n var i;\n var len = this.masksProperties ? this.masksProperties.length : 0;\n this.viewData = createSizedArray(len);\n this.solidPath = \"\";\n var path;\n var properties = this.masksProperties;\n var count = 0;\n var currentMasks = [];\n var j;\n var jLen;\n var layerId = createElementID();\n var rect;\n var expansor;\n var feMorph;\n var x;\n var maskType = \"clipPath\";\n var maskRef = \"clip-path\";\n for (i = 0; i < len; i += 1) {\n if (properties[i].mode !== \"a\" && properties[i].mode !== \"n\" || properties[i].inv || properties[i].o.k !== 100 || properties[i].o.x) {\n maskType = \"mask\";\n maskRef = \"mask\";\n }\n if ((properties[i].mode === \"s\" || properties[i].mode === \"i\") && count === 0) {\n rect = createNS(\"rect\");\n rect.setAttribute(\"fill\", \"#ffffff\");\n rect.setAttribute(\"width\", this.element.comp.data.w || 0);\n rect.setAttribute(\"height\", this.element.comp.data.h || 0);\n currentMasks.push(rect);\n } else {\n rect = null;\n }\n path = createNS(\"path\");\n if (properties[i].mode === \"n\") {\n this.viewData[i] = {\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n elem: path,\n lastPath: \"\"\n };\n defs.appendChild(path);\n } else {\n count += 1;\n path.setAttribute(\"fill\", properties[i].mode === \"s\" ? \"#000000\" : \"#ffffff\");\n path.setAttribute(\"clip-rule\", \"nonzero\");\n var filterID;\n if (properties[i].x.k !== 0) {\n maskType = \"mask\";\n maskRef = \"mask\";\n x = PropertyFactory.getProp(this.element, properties[i].x, 0, null, this.element);\n filterID = createElementID();\n expansor = createNS(\"filter\");\n expansor.setAttribute(\"id\", filterID);\n feMorph = createNS(\"feMorphology\");\n feMorph.setAttribute(\"operator\", \"erode\");\n feMorph.setAttribute(\"in\", \"SourceGraphic\");\n feMorph.setAttribute(\"radius\", \"0\");\n expansor.appendChild(feMorph);\n defs.appendChild(expansor);\n path.setAttribute(\"stroke\", properties[i].mode === \"s\" ? \"#000000\" : \"#ffffff\");\n } else {\n feMorph = null;\n x = null;\n }\n this.storedData[i] = {\n elem: path,\n x,\n expan: feMorph,\n lastPath: \"\",\n lastOperator: \"\",\n filterId: filterID,\n lastRadius: 0\n };\n if (properties[i].mode === \"i\") {\n jLen = currentMasks.length;\n var g = createNS(\"g\");\n for (j = 0; j < jLen; j += 1) {\n g.appendChild(currentMasks[j]);\n }\n var mask = createNS(\"mask\");\n mask.setAttribute(\"mask-type\", \"alpha\");\n mask.setAttribute(\"id\", layerId + \"_\" + count);\n mask.appendChild(path);\n defs.appendChild(mask);\n g.setAttribute(\"mask\", \"url(\" + getLocationHref() + \"#\" + layerId + \"_\" + count + \")\");\n currentMasks.length = 0;\n currentMasks.push(g);\n } else {\n currentMasks.push(path);\n }\n if (properties[i].inv && !this.solidPath) {\n this.solidPath = this.createLayerSolidPath();\n }\n this.viewData[i] = {\n elem: path,\n lastPath: \"\",\n op: PropertyFactory.getProp(this.element, properties[i].o, 0, 0.01, this.element),\n prop: ShapePropertyFactory.getShapeProp(this.element, properties[i], 3),\n invRect: rect\n };\n if (!this.viewData[i].prop.k) {\n this.drawPath(properties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n }\n }\n this.maskElement = createNS(maskType);\n len = currentMasks.length;\n for (i = 0; i < len; i += 1) {\n this.maskElement.appendChild(currentMasks[i]);\n }\n if (count > 0) {\n this.maskElement.setAttribute(\"id\", layerId);\n this.element.maskedElement.setAttribute(maskRef, \"url(\" + getLocationHref() + \"#\" + layerId + \")\");\n defs.appendChild(this.maskElement);\n }\n if (this.viewData.length) {\n this.element.addRenderableComponent(this);\n }\n }\n MaskElement.prototype.getMaskProperty = function(pos) {\n return this.viewData[pos].prop;\n };\n MaskElement.prototype.renderFrame = function(isFirstFrame) {\n var finalMat = this.element.finalTransform.mat;\n var i;\n var len = this.masksProperties.length;\n for (i = 0; i < len; i += 1) {\n if (this.viewData[i].prop._mdf || isFirstFrame) {\n this.drawPath(this.masksProperties[i], this.viewData[i].prop.v, this.viewData[i]);\n }\n if (this.viewData[i].op._mdf || isFirstFrame) {\n this.viewData[i].elem.setAttribute(\"fill-opacity\", this.viewData[i].op.v);\n }\n if (this.masksProperties[i].mode !== \"n\") {\n if (this.viewData[i].invRect && (this.element.finalTransform.mProp._mdf || isFirstFrame)) {\n this.viewData[i].invRect.setAttribute(\"transform\", finalMat.getInverseMatrix().to2dCSS());\n }\n if (this.storedData[i].x && (this.storedData[i].x._mdf || isFirstFrame)) {\n var feMorph = this.storedData[i].expan;\n if (this.storedData[i].x.v < 0) {\n if (this.storedData[i].lastOperator !== \"erode\") {\n this.storedData[i].lastOperator = \"erode\";\n this.storedData[i].elem.setAttribute(\n \"filter\",\n \"url(\" + getLocationHref() + \"#\" + this.storedData[i].filterId + \")\"\n );\n }\n feMorph.setAttribute(\"radius\", -this.storedData[i].x.v);\n } else {\n if (this.storedData[i].lastOperator !== \"dilate\") {\n this.storedData[i].lastOperator = \"dilate\";\n this.storedData[i].elem.setAttribute(\"filter\", null);\n }\n this.storedData[i].elem.setAttribute(\"stroke-width\", this.storedData[i].x.v * 2);\n }\n }\n }\n }\n };\n MaskElement.prototype.getMaskelement = function() {\n return this.maskElement;\n };\n MaskElement.prototype.createLayerSolidPath = function() {\n var path = \"M0,0 \";\n path += \" h\" + this.globalData.compSize.w;\n path += \" v\" + this.globalData.compSize.h;\n path += \" h-\" + this.globalData.compSize.w;\n path += \" v-\" + this.globalData.compSize.h + \" \";\n return path;\n };\n MaskElement.prototype.drawPath = function(pathData, pathNodes, viewData) {\n var pathString = \" M\" + pathNodes.v[0][0] + \",\" + pathNodes.v[0][1];\n var i;\n var len;\n len = pathNodes._length;\n for (i = 1; i < len; i += 1) {\n pathString += \" C\" + pathNodes.o[i - 1][0] + \",\" + pathNodes.o[i - 1][1] + \" \" + pathNodes.i[i][0] + \",\" + pathNodes.i[i][1] + \" \" + pathNodes.v[i][0] + \",\" + pathNodes.v[i][1];\n }\n if (pathNodes.c && len > 1) {\n pathString += \" C\" + pathNodes.o[i - 1][0] + \",\" + pathNodes.o[i - 1][1] + \" \" + pathNodes.i[0][0] + \",\" + pathNodes.i[0][1] + \" \" + pathNodes.v[0][0] + \",\" + pathNodes.v[0][1];\n }\n if (viewData.lastPath !== pathString) {\n var pathShapeValue = \"\";\n if (viewData.elem) {\n if (pathNodes.c) {\n pathShapeValue = pathData.inv ? this.solidPath + pathString : pathString;\n }\n viewData.elem.setAttribute(\"d\", pathShapeValue);\n }\n viewData.lastPath = pathString;\n }\n };\n MaskElement.prototype.destroy = function() {\n this.element = null;\n this.globalData = null;\n this.maskElement = null;\n this.data = null;\n this.masksProperties = null;\n };\n const filtersFactory = function() {\n var ob = {};\n ob.createFilter = createFilter;\n ob.createAlphaToLuminanceFilter = createAlphaToLuminanceFilter;\n function createFilter(filId, skipCoordinates) {\n var fil = createNS(\"filter\");\n fil.setAttribute(\"id\", filId);\n if (skipCoordinates !== true) {\n fil.setAttribute(\"filterUnits\", \"objectBoundingBox\");\n fil.setAttribute(\"x\", \"0%\");\n fil.setAttribute(\"y\", \"0%\");\n fil.setAttribute(\"width\", \"100%\");\n fil.setAttribute(\"height\", \"100%\");\n }\n return fil;\n }\n function createAlphaToLuminanceFilter() {\n var feColorMatrix = createNS(\"feColorMatrix\");\n feColorMatrix.setAttribute(\"type\", \"matrix\");\n feColorMatrix.setAttribute(\"color-interpolation-filters\", \"sRGB\");\n feColorMatrix.setAttribute(\"values\", \"0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 1\");\n return feColorMatrix;\n }\n return ob;\n }();\n const featureSupport = function() {\n var ob = {\n maskType: true\n };\n if (/MSIE 10/i.test(navigator.userAgent) || /MSIE 9/i.test(navigator.userAgent) || /rv:11.0/i.test(navigator.userAgent) || /Edge\\/\\d./i.test(navigator.userAgent)) {\n ob.maskType = false;\n }\n return ob;\n }();\n var registeredEffects = {};\n var idPrefix = \"filter_result_\";\n function SVGEffects(elem) {\n var i;\n var source = \"SourceGraphic\";\n var len = elem.data.ef ? elem.data.ef.length : 0;\n var filId = createElementID();\n var fil = filtersFactory.createFilter(filId, true);\n var count = 0;\n this.filters = [];\n var filterManager;\n for (i = 0; i < len; i += 1) {\n filterManager = null;\n var type = elem.data.ef[i].ty;\n if (registeredEffects[type]) {\n var Effect = registeredEffects[type].effect;\n filterManager = new Effect(fil, elem.effectsManager.effectElements[i], elem, idPrefix + count, source);\n source = idPrefix + count;\n if (registeredEffects[type].countsAsEffect) {\n count += 1;\n }\n }\n if (filterManager) {\n this.filters.push(filterManager);\n }\n }\n if (count) {\n elem.globalData.defs.appendChild(fil);\n elem.layerElement.setAttribute(\"filter\", \"url(\" + getLocationHref() + \"#\" + filId + \")\");\n }\n if (this.filters.length) {\n elem.addRenderableComponent(this);\n }\n }\n SVGEffects.prototype.renderFrame = function(_isFirstFrame) {\n var i;\n var len = this.filters.length;\n for (i = 0; i < len; i += 1) {\n this.filters[i].renderFrame(_isFirstFrame);\n }\n };\n function SVGBaseElement() {\n }\n SVGBaseElement.prototype = {\n initRendererElement: function() {\n this.layerElement = createNS(\"g\");\n },\n createContainerElements: function() {\n this.matteElement = createNS(\"g\");\n this.transformedElement = this.layerElement;\n this.maskedElement = this.layerElement;\n this._sizeChanged = false;\n var layerElementParent = null;\n var filId;\n var fil;\n var gg;\n if (this.data.td) {\n if (this.data.td == 3 || this.data.td == 1) {\n var masker = createNS(\"mask\");\n masker.setAttribute(\"id\", this.layerId);\n masker.setAttribute(\"mask-type\", this.data.td == 3 ? \"luminance\" : \"alpha\");\n masker.appendChild(this.layerElement);\n layerElementParent = masker;\n this.globalData.defs.appendChild(masker);\n if (!featureSupport.maskType && this.data.td == 1) {\n masker.setAttribute(\"mask-type\", \"luminance\");\n filId = createElementID();\n fil = filtersFactory.createFilter(filId);\n this.globalData.defs.appendChild(fil);\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS(\"g\");\n gg.appendChild(this.layerElement);\n layerElementParent = gg;\n masker.appendChild(gg);\n gg.setAttribute(\"filter\", \"url(\" + getLocationHref() + \"#\" + filId + \")\");\n }\n } else if (this.data.td == 2) {\n var maskGroup = createNS(\"mask\");\n maskGroup.setAttribute(\"id\", this.layerId);\n maskGroup.setAttribute(\"mask-type\", \"alpha\");\n var maskGrouper = createNS(\"g\");\n maskGroup.appendChild(maskGrouper);\n filId = createElementID();\n fil = filtersFactory.createFilter(filId);\n var feCTr = createNS(\"feComponentTransfer\");\n feCTr.setAttribute(\"in\", \"SourceGraphic\");\n fil.appendChild(feCTr);\n var feFunc = createNS(\"feFuncA\");\n feFunc.setAttribute(\"type\", \"table\");\n feFunc.setAttribute(\"tableValues\", \"1.0 0.0\");\n feCTr.appendChild(feFunc);\n this.globalData.defs.appendChild(fil);\n var alphaRect = createNS(\"rect\");\n alphaRect.setAttribute(\"width\", this.comp.data.w);\n alphaRect.setAttribute(\"height\", this.comp.data.h);\n alphaRect.setAttribute(\"x\", \"0\");\n alphaRect.setAttribute(\"y\", \"0\");\n alphaRect.setAttribute(\"fill\", \"#ffffff\");\n alphaRect.setAttribute(\"opacity\", \"0\");\n maskGrouper.setAttribute(\"filter\", \"url(\" + getLocationHref() + \"#\" + filId + \")\");\n maskGrouper.appendChild(alphaRect);\n maskGrouper.appendChild(this.layerElement);\n layerElementParent = maskGrouper;\n if (!featureSupport.maskType) {\n maskGroup.setAttribute(\"mask-type\", \"luminance\");\n fil.appendChild(filtersFactory.createAlphaToLuminanceFilter());\n gg = createNS(\"g\");\n maskGrouper.appendChild(alphaRect);\n gg.appendChild(this.layerElement);\n layerElementParent = gg;\n maskGrouper.appendChild(gg);\n }\n this.globalData.defs.appendChild(maskGroup);\n }\n } else if (this.data.tt) {\n this.matteElement.appendChild(this.layerElement);\n layerElementParent = this.matteElement;\n this.baseElement = this.matteElement;\n } else {\n this.baseElement = this.layerElement;\n }\n if (this.data.ln) {\n this.layerElement.setAttribute(\"id\", this.data.ln);\n }\n if (this.data.cl) {\n this.layerElement.setAttribute(\"class\", this.data.cl);\n }\n if (this.data.ty === 0 && !this.data.hd) {\n var cp = createNS(\"clipPath\");\n var pt = createNS(\"path\");\n pt.setAttribute(\n \"d\",\n \"M0,0 L\" + this.data.w + \",0 L\" + this.data.w + \",\" + this.data.h + \" L0,\" + this.data.h + \"z\"\n );\n var clipId = createElementID();\n cp.setAttribute(\"id\", clipId);\n cp.appendChild(pt);\n this.globalData.defs.appendChild(cp);\n if (this.checkMasks()) {\n var cpGroup = createNS(\"g\");\n cpGroup.setAttribute(\"clip-path\", \"url(\" + getLocationHref() + \"#\" + clipId + \")\");\n cpGroup.appendChild(this.layerElement);\n this.transformedElement = cpGroup;\n if (layerElementParent) {\n layerElementParent.appendChild(this.transformedElement);\n } else {\n this.baseElement = this.transformedElement;\n }\n } else {\n this.layerElement.setAttribute(\"clip-path\", \"url(\" + getLocationHref() + \"#\" + clipId + \")\");\n }\n }\n if (this.data.bm !== 0) {\n this.setBlendMode();\n }\n },\n renderElement: function() {\n if (this.finalTransform._matMdf) {\n this.transformedElement.setAttribute(\"transform\", this.finalTransform.mat.to2dCSS());\n }\n if (this.finalTransform._opMdf) {\n this.transformedElement.setAttribute(\"opacity\", this.finalTransform.mProp.o.v);\n }\n },\n destroyBaseElement: function() {\n this.layerElement = null;\n this.matteElement = null;\n this.maskManager.destroy();\n },\n getBaseElement: function() {\n if (this.data.hd) {\n return null;\n }\n return this.baseElement;\n },\n createRenderableComponents: function() {\n this.maskManager = new MaskElement(this.data, this, this.globalData);\n this.renderableEffectsManager = new SVGEffects(this);\n },\n setMatte: function(id) {\n if (!this.matteElement) {\n return;\n }\n this.matteElement.setAttribute(\"mask\", \"url(\" + getLocationHref() + \"#\" + id + \")\");\n }\n };\n function HierarchyElement() {\n }\n HierarchyElement.prototype = {\n /**\n * @function\n * Initializes hierarchy properties\n *\n */\n initHierarchy: function() {\n this.hierarchy = [];\n this._isParent = false;\n this.checkParenting();\n },\n /**\n * @function\n * Sets layer's hierarchy.\n * @param {array} hierarch\n * layer's parent list\n *\n */\n setHierarchy: function(hierarchy) {\n this.hierarchy = hierarchy;\n },\n /**\n * @function\n * Sets layer as parent.\n *\n */\n setAsParent: function() {\n this._isParent = true;\n },\n /**\n * @function\n * Searches layer's parenting chain\n *\n */\n checkParenting: function() {\n if (this.data.parent !== void 0) {\n this.comp.buildElementParenting(this, this.data.parent, []);\n }\n }\n };\n function RenderableDOMElement() {\n }\n (function() {\n var _prototype = {\n initElement: function(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n },\n hide: function() {\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = \"none\";\n this.hidden = true;\n }\n },\n show: function() {\n if (this.isInRange && !this.isTransparent) {\n if (!this.data.hd) {\n var elem = this.baseElement || this.layerElement;\n elem.style.display = \"block\";\n }\n this.hidden = false;\n this._isFirstFrame = true;\n }\n },\n renderFrame: function() {\n if (this.data.hd || this.hidden) {\n return;\n }\n this.renderTransform();\n this.renderRenderable();\n this.renderElement();\n this.renderInnerContent();\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n renderInnerContent: function() {\n },\n prepareFrame: function(num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n this.checkTransparency();\n },\n destroy: function() {\n this.innerElem = null;\n this.destroyBaseElement();\n }\n };\n extendPrototype([RenderableElement, createProxyFunction(_prototype)], RenderableDOMElement);\n })();\n function IImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.initElement(data, globalData, comp);\n this.sourceRect = {\n top: 0,\n left: 0,\n width: this.assetData.w,\n height: this.assetData.h\n };\n }\n extendPrototype(\n [BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement],\n IImageElement\n );\n IImageElement.prototype.createContent = function() {\n var assetPath = this.globalData.getAssetsPath(this.assetData);\n this.innerElem = createNS(\"image\");\n this.innerElem.setAttribute(\"width\", this.assetData.w + \"px\");\n this.innerElem.setAttribute(\"height\", this.assetData.h + \"px\");\n this.innerElem.setAttribute(\n \"preserveAspectRatio\",\n this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio\n );\n this.innerElem.setAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\", assetPath);\n this.layerElement.appendChild(this.innerElem);\n };\n IImageElement.prototype.sourceRectAtTime = function() {\n return this.sourceRect;\n };\n function ProcessedElement(element, position) {\n this.elem = element;\n this.pos = position;\n }\n function IShapeElement() {\n }\n IShapeElement.prototype = {\n addShapeToModifiers: function(data) {\n var i;\n var len = this.shapeModifiers.length;\n for (i = 0; i < len; i += 1) {\n this.shapeModifiers[i].addShape(data);\n }\n },\n isShapeInAnimatedModifiers: function(data) {\n var i = 0;\n var len = this.shapeModifiers.length;\n while (i < len) {\n if (this.shapeModifiers[i].isAnimatedWithShape(data)) {\n return true;\n }\n }\n return false;\n },\n renderModifiers: function() {\n if (!this.shapeModifiers.length) {\n return;\n }\n var i;\n var len = this.shapes.length;\n for (i = 0; i < len; i += 1) {\n this.shapes[i].sh.reset();\n }\n len = this.shapeModifiers.length;\n var shouldBreakProcess;\n for (i = len - 1; i >= 0; i -= 1) {\n shouldBreakProcess = this.shapeModifiers[i].processShapes(this._isFirstFrame);\n if (shouldBreakProcess) {\n break;\n }\n }\n },\n searchProcessedElement: function(elem) {\n var elements = this.processedElements;\n var i = 0;\n var len = elements.length;\n while (i < len) {\n if (elements[i].elem === elem) {\n return elements[i].pos;\n }\n i += 1;\n }\n return 0;\n },\n addProcessedElement: function(elem, pos) {\n var elements = this.processedElements;\n var i = elements.length;\n while (i) {\n i -= 1;\n if (elements[i].elem === elem) {\n elements[i].pos = pos;\n return;\n }\n }\n elements.push(new ProcessedElement(elem, pos));\n },\n prepareFrame: function(num) {\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n }\n };\n const lineCapEnum = {\n 1: \"butt\",\n 2: \"round\",\n 3: \"square\"\n };\n const lineJoinEnum = {\n 1: \"miter\",\n 2: \"round\",\n 3: \"bevel\"\n };\n function SVGShapeData(transformers, level, shape) {\n this.caches = [];\n this.styles = [];\n this.transformers = transformers;\n this.lStr = \"\";\n this.sh = shape;\n this.lvl = level;\n this._isAnimated = !!shape.k;\n var i = 0;\n var len = transformers.length;\n while (i < len) {\n if (transformers[i].mProps.dynamicProperties.length) {\n this._isAnimated = true;\n break;\n }\n i += 1;\n }\n }\n SVGShapeData.prototype.setAsAnimated = function() {\n this._isAnimated = true;\n };\n function SVGStyleData(data, level) {\n this.data = data;\n this.type = data.ty;\n this.d = \"\";\n this.lvl = level;\n this._mdf = false;\n this.closed = data.hd === true;\n this.pElem = createNS(\"path\");\n this.msElem = null;\n }\n SVGStyleData.prototype.reset = function() {\n this.d = \"\";\n this._mdf = false;\n };\n function DashProperty(elem, data, renderer, container) {\n this.elem = elem;\n this.frameId = -1;\n this.dataProps = createSizedArray(data.length);\n this.renderer = renderer;\n this.k = false;\n this.dashStr = \"\";\n this.dashArray = createTypedArray(\"float32\", data.length ? data.length - 1 : 0);\n this.dashoffset = createTypedArray(\"float32\", 1);\n this.initDynamicPropertyContainer(container);\n var i;\n var len = data.length || 0;\n var prop;\n for (i = 0; i < len; i += 1) {\n prop = PropertyFactory.getProp(elem, data[i].v, 0, 0, this);\n this.k = prop.k || this.k;\n this.dataProps[i] = { n: data[i].n, p: prop };\n }\n if (!this.k) {\n this.getValue(true);\n }\n this._isAnimated = this.k;\n }\n DashProperty.prototype.getValue = function(forceRender) {\n if (this.elem.globalData.frameId === this.frameId && !forceRender) {\n return;\n }\n this.frameId = this.elem.globalData.frameId;\n this.iterateDynamicProperties();\n this._mdf = this._mdf || forceRender;\n if (this._mdf) {\n var i = 0;\n var len = this.dataProps.length;\n if (this.renderer === \"svg\") {\n this.dashStr = \"\";\n }\n for (i = 0; i < len; i += 1) {\n if (this.dataProps[i].n !== \"o\") {\n if (this.renderer === \"svg\") {\n this.dashStr += \" \" + this.dataProps[i].p.v;\n } else {\n this.dashArray[i] = this.dataProps[i].p.v;\n }\n } else {\n this.dashoffset[0] = this.dataProps[i].p.v;\n }\n }\n }\n };\n extendPrototype([DynamicPropertyContainer], DashProperty);\n function SVGStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, \"svg\", this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n this._isAnimated = !!this._isAnimated;\n }\n extendPrototype([DynamicPropertyContainer], SVGStrokeStyleData);\n function SVGFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.c = PropertyFactory.getProp(elem, data.c, 1, 255, this);\n this.style = styleOb;\n }\n extendPrototype([DynamicPropertyContainer], SVGFillStyleData);\n function SVGNoStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.style = styleOb;\n }\n extendPrototype([DynamicPropertyContainer], SVGNoStyleData);\n function GradientProperty(elem, data, container) {\n this.data = data;\n this.c = createTypedArray(\"uint8c\", data.p * 4);\n var cLength = data.k.k[0].s ? data.k.k[0].s.length - data.p * 4 : data.k.k.length - data.p * 4;\n this.o = createTypedArray(\"float32\", cLength);\n this._cmdf = false;\n this._omdf = false;\n this._collapsable = this.checkCollapsable();\n this._hasOpacity = cLength;\n this.initDynamicPropertyContainer(container);\n this.prop = PropertyFactory.getProp(elem, data.k, 1, null, this);\n this.k = this.prop.k;\n this.getValue(true);\n }\n GradientProperty.prototype.comparePoints = function(values, points) {\n var i = 0;\n var len = this.o.length / 2;\n var diff;\n while (i < len) {\n diff = Math.abs(values[i * 4] - values[points * 4 + i * 2]);\n if (diff > 0.01) {\n return false;\n }\n i += 1;\n }\n return true;\n };\n GradientProperty.prototype.checkCollapsable = function() {\n if (this.o.length / 2 !== this.c.length / 4) {\n return false;\n }\n if (this.data.k.k[0].s) {\n var i = 0;\n var len = this.data.k.k.length;\n while (i < len) {\n if (!this.comparePoints(this.data.k.k[i].s, this.data.p)) {\n return false;\n }\n i += 1;\n }\n } else if (!this.comparePoints(this.data.k.k, this.data.p)) {\n return false;\n }\n return true;\n };\n GradientProperty.prototype.getValue = function(forceRender) {\n this.prop.getValue();\n this._mdf = false;\n this._cmdf = false;\n this._omdf = false;\n if (this.prop._mdf || forceRender) {\n var i;\n var len = this.data.p * 4;\n var mult;\n var val;\n for (i = 0; i < len; i += 1) {\n mult = i % 4 === 0 ? 100 : 255;\n val = Math.round(this.prop.v[i] * mult);\n if (this.c[i] !== val) {\n this.c[i] = val;\n this._cmdf = !forceRender;\n }\n }\n if (this.o.length) {\n len = this.prop.v.length;\n for (i = this.data.p * 4; i < len; i += 1) {\n mult = i % 2 === 0 ? 100 : 1;\n val = i % 2 === 0 ? Math.round(this.prop.v[i] * 100) : this.prop.v[i];\n if (this.o[i - this.data.p * 4] !== val) {\n this.o[i - this.data.p * 4] = val;\n this._omdf = !forceRender;\n }\n }\n }\n this._mdf = !forceRender;\n }\n };\n extendPrototype([DynamicPropertyContainer], GradientProperty);\n function SVGGradientFillStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.initGradientData(elem, data, styleOb);\n }\n SVGGradientFillStyleData.prototype.initGradientData = function(elem, data, styleOb) {\n this.o = PropertyFactory.getProp(elem, data.o, 0, 0.01, this);\n this.s = PropertyFactory.getProp(elem, data.s, 1, null, this);\n this.e = PropertyFactory.getProp(elem, data.e, 1, null, this);\n this.h = PropertyFactory.getProp(elem, data.h || { k: 0 }, 0, 0.01, this);\n this.a = PropertyFactory.getProp(elem, data.a || { k: 0 }, 0, degToRads, this);\n this.g = new GradientProperty(elem, data.g, this);\n this.style = styleOb;\n this.stops = [];\n this.setGradientData(styleOb.pElem, data);\n this.setGradientOpacity(data, styleOb);\n this._isAnimated = !!this._isAnimated;\n };\n SVGGradientFillStyleData.prototype.setGradientData = function(pathElement, data) {\n var gradientId = createElementID();\n var gfill = createNS(data.t === 1 ? \"linearGradient\" : \"radialGradient\");\n gfill.setAttribute(\"id\", gradientId);\n gfill.setAttribute(\"spreadMethod\", \"pad\");\n gfill.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\n var stops = [];\n var stop;\n var j;\n var jLen;\n jLen = data.g.p * 4;\n for (j = 0; j < jLen; j += 4) {\n stop = createNS(\"stop\");\n gfill.appendChild(stop);\n stops.push(stop);\n }\n pathElement.setAttribute(data.ty === \"gf\" ? \"fill\" : \"stroke\", \"url(\" + getLocationHref() + \"#\" + gradientId + \")\");\n this.gf = gfill;\n this.cst = stops;\n };\n SVGGradientFillStyleData.prototype.setGradientOpacity = function(data, styleOb) {\n if (this.g._hasOpacity && !this.g._collapsable) {\n var stop;\n var j;\n var jLen;\n var mask = createNS(\"mask\");\n var maskElement = createNS(\"path\");\n mask.appendChild(maskElement);\n var opacityId = createElementID();\n var maskId = createElementID();\n mask.setAttribute(\"id\", maskId);\n var opFill = createNS(data.t === 1 ? \"linearGradient\" : \"radialGradient\");\n opFill.setAttribute(\"id\", opacityId);\n opFill.setAttribute(\"spreadMethod\", \"pad\");\n opFill.setAttribute(\"gradientUnits\", \"userSpaceOnUse\");\n jLen = data.g.k.k[0].s ? data.g.k.k[0].s.length : data.g.k.k.length;\n var stops = this.stops;\n for (j = data.g.p * 4; j < jLen; j += 2) {\n stop = createNS(\"stop\");\n stop.setAttribute(\"stop-color\", \"rgb(255,255,255)\");\n opFill.appendChild(stop);\n stops.push(stop);\n }\n maskElement.setAttribute(data.ty === \"gf\" ? \"fill\" : \"stroke\", \"url(\" + getLocationHref() + \"#\" + opacityId + \")\");\n if (data.ty === \"gs\") {\n maskElement.setAttribute(\"stroke-linecap\", lineCapEnum[data.lc || 2]);\n maskElement.setAttribute(\"stroke-linejoin\", lineJoinEnum[data.lj || 2]);\n if (data.lj === 1) {\n maskElement.setAttribute(\"stroke-miterlimit\", data.ml);\n }\n }\n this.of = opFill;\n this.ms = mask;\n this.ost = stops;\n this.maskId = maskId;\n styleOb.msElem = maskElement;\n }\n };\n extendPrototype([DynamicPropertyContainer], SVGGradientFillStyleData);\n function SVGGradientStrokeStyleData(elem, data, styleOb) {\n this.initDynamicPropertyContainer(elem);\n this.getValue = this.iterateDynamicProperties;\n this.w = PropertyFactory.getProp(elem, data.w, 0, null, this);\n this.d = new DashProperty(elem, data.d || {}, \"svg\", this);\n this.initGradientData(elem, data, styleOb);\n this._isAnimated = !!this._isAnimated;\n }\n extendPrototype([SVGGradientFillStyleData, DynamicPropertyContainer], SVGGradientStrokeStyleData);\n function ShapeGroupData() {\n this.it = [];\n this.prevViewData = [];\n this.gr = createNS(\"g\");\n }\n function SVGTransformData(mProps, op, container) {\n this.transform = {\n mProps,\n op,\n container\n };\n this.elements = [];\n this._isAnimated = this.transform.mProps.dynamicProperties.length || this.transform.op.effectsSequence.length;\n }\n const buildShapeString = function(pathNodes, length, closed, mat) {\n if (length === 0) {\n return \"\";\n }\n var _o = pathNodes.o;\n var _i = pathNodes.i;\n var _v = pathNodes.v;\n var i;\n var shapeString = \" M\" + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n for (i = 1; i < length; i += 1) {\n shapeString += \" C\" + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + \" \" + mat.applyToPointStringified(_i[i][0], _i[i][1]) + \" \" + mat.applyToPointStringified(_v[i][0], _v[i][1]);\n }\n if (closed && length) {\n shapeString += \" C\" + mat.applyToPointStringified(_o[i - 1][0], _o[i - 1][1]) + \" \" + mat.applyToPointStringified(_i[0][0], _i[0][1]) + \" \" + mat.applyToPointStringified(_v[0][0], _v[0][1]);\n shapeString += \"z\";\n }\n return shapeString;\n };\n const SVGElementsRenderer = function() {\n var _identityMatrix = new Matrix();\n var _matrixHelper = new Matrix();\n var ob = {\n createRenderFunction\n };\n function createRenderFunction(data) {\n switch (data.ty) {\n case \"fl\":\n return renderFill;\n case \"gf\":\n return renderGradient;\n case \"gs\":\n return renderGradientStroke;\n case \"st\":\n return renderStroke;\n case \"sh\":\n case \"el\":\n case \"rc\":\n case \"sr\":\n return renderPath;\n case \"tr\":\n return renderContentTransform;\n case \"no\":\n return renderNoop;\n default:\n return null;\n }\n }\n function renderContentTransform(styleData, itemData, isFirstFrame) {\n if (isFirstFrame || itemData.transform.op._mdf) {\n itemData.transform.container.setAttribute(\"opacity\", itemData.transform.op.v);\n }\n if (isFirstFrame || itemData.transform.mProps._mdf) {\n itemData.transform.container.setAttribute(\"transform\", itemData.transform.mProps.v.to2dCSS());\n }\n }\n function renderNoop() {\n }\n function renderPath(styleData, itemData, isFirstFrame) {\n var j;\n var jLen;\n var pathStringTransformed;\n var redraw;\n var pathNodes;\n var l;\n var lLen = itemData.styles.length;\n var lvl = itemData.lvl;\n var paths;\n var mat;\n var props;\n var iterations;\n var k;\n for (l = 0; l < lLen; l += 1) {\n redraw = itemData.sh._mdf || isFirstFrame;\n if (itemData.styles[l].lvl < lvl) {\n mat = _matrixHelper.reset();\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n while (!redraw && iterations > 0) {\n redraw = itemData.transformers[k].mProps._mdf || redraw;\n iterations -= 1;\n k -= 1;\n }\n if (redraw) {\n iterations = lvl - itemData.styles[l].lvl;\n k = itemData.transformers.length - 1;\n while (iterations > 0) {\n props = itemData.transformers[k].mProps.v.props;\n mat.transform(\n props[0],\n props[1],\n props[2],\n props[3],\n props[4],\n props[5],\n props[6],\n props[7],\n props[8],\n props[9],\n props[10],\n props[11],\n props[12],\n props[13],\n props[14],\n props[15]\n );\n iterations -= 1;\n k -= 1;\n }\n }\n } else {\n mat = _identityMatrix;\n }\n paths = itemData.sh.paths;\n jLen = paths._length;\n if (redraw) {\n pathStringTransformed = \"\";\n for (j = 0; j < jLen; j += 1) {\n pathNodes = paths.shapes[j];\n if (pathNodes && pathNodes._length) {\n pathStringTransformed += buildShapeString(pathNodes, pathNodes._length, pathNodes.c, mat);\n }\n }\n itemData.caches[l] = pathStringTransformed;\n } else {\n pathStringTransformed = itemData.caches[l];\n }\n itemData.styles[l].d += styleData.hd === true ? \"\" : pathStringTransformed;\n itemData.styles[l]._mdf = redraw || itemData.styles[l]._mdf;\n }\n }\n function renderFill(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n if (itemData.c._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute(\n \"fill\",\n \"rgb(\" + bmFloor(itemData.c.v[0]) + \",\" + bmFloor(itemData.c.v[1]) + \",\" + bmFloor(itemData.c.v[2]) + \")\"\n );\n }\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute(\"fill-opacity\", itemData.o.v);\n }\n }\n function renderGradientStroke(styleData, itemData, isFirstFrame) {\n renderGradient(styleData, itemData, isFirstFrame);\n renderStroke(styleData, itemData, isFirstFrame);\n }\n function renderGradient(styleData, itemData, isFirstFrame) {\n var gfill = itemData.gf;\n var hasOpacity = itemData.g._hasOpacity;\n var pt1 = itemData.s.v;\n var pt2 = itemData.e.v;\n if (itemData.o._mdf || isFirstFrame) {\n var attr = styleData.ty === \"gf\" ? \"fill-opacity\" : \"stroke-opacity\";\n itemData.style.pElem.setAttribute(attr, itemData.o.v);\n }\n if (itemData.s._mdf || isFirstFrame) {\n var attr1 = styleData.t === 1 ? \"x1\" : \"cx\";\n var attr2 = attr1 === \"x1\" ? \"y1\" : \"cy\";\n gfill.setAttribute(attr1, pt1[0]);\n gfill.setAttribute(attr2, pt1[1]);\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute(attr1, pt1[0]);\n itemData.of.setAttribute(attr2, pt1[1]);\n }\n }\n var stops;\n var i;\n var len;\n var stop;\n if (itemData.g._cmdf || isFirstFrame) {\n stops = itemData.cst;\n var cValues = itemData.g.c;\n len = stops.length;\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n stop.setAttribute(\"offset\", cValues[i * 4] + \"%\");\n stop.setAttribute(\n \"stop-color\",\n \"rgb(\" + cValues[i * 4 + 1] + \",\" + cValues[i * 4 + 2] + \",\" + cValues[i * 4 + 3] + \")\"\n );\n }\n }\n if (hasOpacity && (itemData.g._omdf || isFirstFrame)) {\n var oValues = itemData.g.o;\n if (itemData.g._collapsable) {\n stops = itemData.cst;\n } else {\n stops = itemData.ost;\n }\n len = stops.length;\n for (i = 0; i < len; i += 1) {\n stop = stops[i];\n if (!itemData.g._collapsable) {\n stop.setAttribute(\"offset\", oValues[i * 2] + \"%\");\n }\n stop.setAttribute(\"stop-opacity\", oValues[i * 2 + 1]);\n }\n }\n if (styleData.t === 1) {\n if (itemData.e._mdf || isFirstFrame) {\n gfill.setAttribute(\"x2\", pt2[0]);\n gfill.setAttribute(\"y2\", pt2[1]);\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute(\"x2\", pt2[0]);\n itemData.of.setAttribute(\"y2\", pt2[1]);\n }\n }\n } else {\n var rad;\n if (itemData.s._mdf || itemData.e._mdf || isFirstFrame) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n gfill.setAttribute(\"r\", rad);\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute(\"r\", rad);\n }\n }\n if (itemData.e._mdf || itemData.h._mdf || itemData.a._mdf || isFirstFrame) {\n if (!rad) {\n rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n }\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n var percent = itemData.h.v;\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\n }\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n gfill.setAttribute(\"fx\", x);\n gfill.setAttribute(\"fy\", y);\n if (hasOpacity && !itemData.g._collapsable) {\n itemData.of.setAttribute(\"fx\", x);\n itemData.of.setAttribute(\"fy\", y);\n }\n }\n }\n }\n function renderStroke(styleData, itemData, isFirstFrame) {\n var styleElem = itemData.style;\n var d = itemData.d;\n if (d && (d._mdf || isFirstFrame) && d.dashStr) {\n styleElem.pElem.setAttribute(\"stroke-dasharray\", d.dashStr);\n styleElem.pElem.setAttribute(\"stroke-dashoffset\", d.dashoffset[0]);\n }\n if (itemData.c && (itemData.c._mdf || isFirstFrame)) {\n styleElem.pElem.setAttribute(\n \"stroke\",\n \"rgb(\" + bmFloor(itemData.c.v[0]) + \",\" + bmFloor(itemData.c.v[1]) + \",\" + bmFloor(itemData.c.v[2]) + \")\"\n );\n }\n if (itemData.o._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute(\"stroke-opacity\", itemData.o.v);\n }\n if (itemData.w._mdf || isFirstFrame) {\n styleElem.pElem.setAttribute(\"stroke-width\", itemData.w.v);\n if (styleElem.msElem) {\n styleElem.msElem.setAttribute(\"stroke-width\", itemData.w.v);\n }\n }\n }\n return ob;\n }();\n function SVGShapeElement(data, globalData, comp) {\n this.shapes = [];\n this.shapesData = data.shapes;\n this.stylesList = [];\n this.shapeModifiers = [];\n this.itemsData = [];\n this.processedElements = [];\n this.animatedContents = [];\n this.initElement(data, globalData, comp);\n this.prevViewData = [];\n }\n extendPrototype(\n [\n BaseElement,\n TransformElement,\n SVGBaseElement,\n IShapeElement,\n HierarchyElement,\n FrameElement,\n RenderableDOMElement\n ],\n SVGShapeElement\n );\n SVGShapeElement.prototype.initSecondaryElement = function() {\n };\n SVGShapeElement.prototype.identityMatrix = new Matrix();\n SVGShapeElement.prototype.buildExpressionInterface = function() {\n };\n SVGShapeElement.prototype.createContent = function() {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n };\n SVGShapeElement.prototype.filterUniqueShapes = function() {\n var i;\n var len = this.shapes.length;\n var shape;\n var j;\n var jLen = this.stylesList.length;\n var style;\n var tempShapes = [];\n var areAnimated = false;\n for (j = 0; j < jLen; j += 1) {\n style = this.stylesList[j];\n areAnimated = false;\n tempShapes.length = 0;\n for (i = 0; i < len; i += 1) {\n shape = this.shapes[i];\n if (shape.styles.indexOf(style) !== -1) {\n tempShapes.push(shape);\n areAnimated = shape._isAnimated || areAnimated;\n }\n }\n if (tempShapes.length > 1 && areAnimated) {\n this.setShapesAsAnimated(tempShapes);\n }\n }\n };\n SVGShapeElement.prototype.setShapesAsAnimated = function(shapes) {\n var i;\n var len = shapes.length;\n for (i = 0; i < len; i += 1) {\n shapes[i].setAsAnimated();\n }\n };\n SVGShapeElement.prototype.createStyleElement = function(data, level) {\n var elementData;\n var styleOb = new SVGStyleData(data, level);\n var pathElement = styleOb.pElem;\n if (data.ty === \"st\") {\n elementData = new SVGStrokeStyleData(this, data, styleOb);\n } else if (data.ty === \"fl\") {\n elementData = new SVGFillStyleData(this, data, styleOb);\n } else if (data.ty === \"gf\" || data.ty === \"gs\") {\n var GradientConstructor = data.ty === \"gf\" ? SVGGradientFillStyleData : SVGGradientStrokeStyleData;\n elementData = new GradientConstructor(this, data, styleOb);\n this.globalData.defs.appendChild(elementData.gf);\n if (elementData.maskId) {\n this.globalData.defs.appendChild(elementData.ms);\n this.globalData.defs.appendChild(elementData.of);\n pathElement.setAttribute(\"mask\", \"url(\" + getLocationHref() + \"#\" + elementData.maskId + \")\");\n }\n } else if (data.ty === \"no\") {\n elementData = new SVGNoStyleData(this, data, styleOb);\n }\n if (data.ty === \"st\" || data.ty === \"gs\") {\n pathElement.setAttribute(\"stroke-linecap\", lineCapEnum[data.lc || 2]);\n pathElement.setAttribute(\"stroke-linejoin\", lineJoinEnum[data.lj || 2]);\n pathElement.setAttribute(\"fill-opacity\", \"0\");\n if (data.lj === 1) {\n pathElement.setAttribute(\"stroke-miterlimit\", data.ml);\n }\n }\n if (data.r === 2) {\n pathElement.setAttribute(\"fill-rule\", \"evenodd\");\n }\n if (data.ln) {\n pathElement.setAttribute(\"id\", data.ln);\n }\n if (data.cl) {\n pathElement.setAttribute(\"class\", data.cl);\n }\n if (data.bm) {\n pathElement.style[\"mix-blend-mode\"] = getBlendMode(data.bm);\n }\n this.stylesList.push(styleOb);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n SVGShapeElement.prototype.createGroupElement = function(data) {\n var elementData = new ShapeGroupData();\n if (data.ln) {\n elementData.gr.setAttribute(\"id\", data.ln);\n }\n if (data.cl) {\n elementData.gr.setAttribute(\"class\", data.cl);\n }\n if (data.bm) {\n elementData.gr.style[\"mix-blend-mode\"] = getBlendMode(data.bm);\n }\n return elementData;\n };\n SVGShapeElement.prototype.createTransformElement = function(data, container) {\n var transformProperty = TransformPropertyFactory.getTransformProperty(this, data, this);\n var elementData = new SVGTransformData(transformProperty, transformProperty.o, container);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n SVGShapeElement.prototype.createShapeElement = function(data, ownTransformers, level) {\n var ty = 4;\n if (data.ty === \"rc\") {\n ty = 5;\n } else if (data.ty === \"el\") {\n ty = 6;\n } else if (data.ty === \"sr\") {\n ty = 7;\n }\n var shapeProperty = ShapePropertyFactory.getShapeProp(this, data, ty, this);\n var elementData = new SVGShapeData(ownTransformers, level, shapeProperty);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n this.addToAnimatedContents(data, elementData);\n return elementData;\n };\n SVGShapeElement.prototype.addToAnimatedContents = function(data, element) {\n var i = 0;\n var len = this.animatedContents.length;\n while (i < len) {\n if (this.animatedContents[i].element === element) {\n return;\n }\n i += 1;\n }\n this.animatedContents.push({\n fn: SVGElementsRenderer.createRenderFunction(data),\n element,\n data\n });\n };\n SVGShapeElement.prototype.setElementStyles = function(elementData) {\n var arr = elementData.styles;\n var j;\n var jLen = this.stylesList.length;\n for (j = 0; j < jLen; j += 1) {\n if (!this.stylesList[j].closed) {\n arr.push(this.stylesList[j]);\n }\n }\n };\n SVGShapeElement.prototype.reloadShapes = function() {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, this.layerElement, 0, [], true);\n this.filterUniqueShapes();\n len = this.dynamicProperties.length;\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n this.renderModifiers();\n };\n SVGShapeElement.prototype.searchShapes = function(arr, itemsData, prevViewData, container, level, transformers, render) {\n var ownTransformers = [].concat(transformers);\n var i;\n var len = arr.length - 1;\n var j;\n var jLen;\n var ownStyles = [];\n var ownModifiers = [];\n var currentTransform;\n var modifier;\n var processedPos;\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n if (!processedPos) {\n arr[i]._render = render;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n if (arr[i].ty === \"fl\" || arr[i].ty === \"st\" || arr[i].ty === \"gf\" || arr[i].ty === \"gs\" || arr[i].ty === \"no\") {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], level);\n } else {\n itemsData[i].style.closed = false;\n }\n if (arr[i]._render) {\n if (itemsData[i].style.pElem.parentNode !== container) {\n container.appendChild(itemsData[i].style.pElem);\n }\n }\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty === \"gr\") {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n this.searchShapes(\n arr[i].it,\n itemsData[i].it,\n itemsData[i].prevViewData,\n itemsData[i].gr,\n level + 1,\n ownTransformers,\n render\n );\n if (arr[i]._render) {\n if (itemsData[i].gr.parentNode !== container) {\n container.appendChild(itemsData[i].gr);\n }\n }\n } else if (arr[i].ty === \"tr\") {\n if (!processedPos) {\n itemsData[i] = this.createTransformElement(arr[i], container);\n }\n currentTransform = itemsData[i].transform;\n ownTransformers.push(currentTransform);\n } else if (arr[i].ty === \"sh\" || arr[i].ty === \"rc\" || arr[i].ty === \"el\" || arr[i].ty === \"sr\") {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i], ownTransformers, level);\n }\n this.setElementStyles(itemsData[i]);\n } else if (arr[i].ty === \"tm\" || arr[i].ty === \"rd\" || arr[i].ty === \"ms\" || arr[i].ty === \"pb\") {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n ownModifiers.push(modifier);\n } else if (arr[i].ty === \"rp\") {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n render = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n ownModifiers.push(modifier);\n }\n this.addProcessedElement(arr[i], i + 1);\n }\n len = ownStyles.length;\n for (i = 0; i < len; i += 1) {\n ownStyles[i].closed = true;\n }\n len = ownModifiers.length;\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n SVGShapeElement.prototype.renderInnerContent = function() {\n this.renderModifiers();\n var i;\n var len = this.stylesList.length;\n for (i = 0; i < len; i += 1) {\n this.stylesList[i].reset();\n }\n this.renderShape();\n for (i = 0; i < len; i += 1) {\n if (this.stylesList[i]._mdf || this._isFirstFrame) {\n if (this.stylesList[i].msElem) {\n this.stylesList[i].msElem.setAttribute(\"d\", this.stylesList[i].d);\n this.stylesList[i].d = \"M0 0\" + this.stylesList[i].d;\n }\n this.stylesList[i].pElem.setAttribute(\"d\", this.stylesList[i].d || \"M0 0\");\n }\n }\n };\n SVGShapeElement.prototype.renderShape = function() {\n var i;\n var len = this.animatedContents.length;\n var animatedContent;\n for (i = 0; i < len; i += 1) {\n animatedContent = this.animatedContents[i];\n if ((this._isFirstFrame || animatedContent.element._isAnimated) && animatedContent.data !== true) {\n animatedContent.fn(animatedContent.data, animatedContent.element, this._isFirstFrame);\n }\n }\n };\n SVGShapeElement.prototype.destroy = function() {\n this.destroyBaseElement();\n this.shapesData = null;\n this.itemsData = null;\n };\n function LetterProps(o, sw, sc, fc, m, p) {\n this.o = o;\n this.sw = sw;\n this.sc = sc;\n this.fc = fc;\n this.m = m;\n this.p = p;\n this._mdf = {\n o: true,\n sw: !!sw,\n sc: !!sc,\n fc: !!fc,\n m: true,\n p: true\n };\n }\n LetterProps.prototype.update = function(o, sw, sc, fc, m, p) {\n this._mdf.o = false;\n this._mdf.sw = false;\n this._mdf.sc = false;\n this._mdf.fc = false;\n this._mdf.m = false;\n this._mdf.p = false;\n var updated = false;\n if (this.o !== o) {\n this.o = o;\n this._mdf.o = true;\n updated = true;\n }\n if (this.sw !== sw) {\n this.sw = sw;\n this._mdf.sw = true;\n updated = true;\n }\n if (this.sc !== sc) {\n this.sc = sc;\n this._mdf.sc = true;\n updated = true;\n }\n if (this.fc !== fc) {\n this.fc = fc;\n this._mdf.fc = true;\n updated = true;\n }\n if (this.m !== m) {\n this.m = m;\n this._mdf.m = true;\n updated = true;\n }\n if (p.length && (this.p[0] !== p[0] || this.p[1] !== p[1] || this.p[4] !== p[4] || this.p[5] !== p[5] || this.p[12] !== p[12] || this.p[13] !== p[13])) {\n this.p = p;\n this._mdf.p = true;\n updated = true;\n }\n return updated;\n };\n function TextProperty(elem, data) {\n this._frameId = initialDefaultFrame;\n this.pv = \"\";\n this.v = \"\";\n this.kf = false;\n this._isFirstFrame = true;\n this._mdf = false;\n this.data = data;\n this.elem = elem;\n this.comp = this.elem.comp;\n this.keysIndex = 0;\n this.canResize = false;\n this.minimumFontSize = 1;\n this.effectsSequence = [];\n this.currentData = {\n ascent: 0,\n boxWidth: this.defaultBoxWidth,\n f: \"\",\n fStyle: \"\",\n fWeight: \"\",\n fc: \"\",\n j: \"\",\n justifyOffset: \"\",\n l: [],\n lh: 0,\n lineWidths: [],\n ls: \"\",\n of: \"\",\n s: \"\",\n sc: \"\",\n sw: 0,\n t: 0,\n tr: 0,\n sz: 0,\n ps: null,\n fillColorAnim: false,\n strokeColorAnim: false,\n strokeWidthAnim: false,\n yOffset: 0,\n finalSize: 0,\n finalText: [],\n finalLineHeight: 0,\n __complete: false\n };\n this.copyData(this.currentData, this.data.d.k[0].s);\n if (!this.searchProperty()) {\n this.completeTextData(this.currentData);\n }\n }\n TextProperty.prototype.defaultBoxWidth = [0, 0];\n TextProperty.prototype.copyData = function(obj, data) {\n for (var s in data) {\n if (Object.prototype.hasOwnProperty.call(data, s)) {\n obj[s] = data[s];\n }\n }\n return obj;\n };\n TextProperty.prototype.setCurrentData = function(data) {\n if (!data.__complete) {\n this.completeTextData(data);\n }\n this.currentData = data;\n this.currentData.boxWidth = this.currentData.boxWidth || this.defaultBoxWidth;\n this._mdf = true;\n };\n TextProperty.prototype.searchProperty = function() {\n return this.searchKeyframes();\n };\n TextProperty.prototype.searchKeyframes = function() {\n this.kf = this.data.d.k.length > 1;\n if (this.kf) {\n this.addEffect(this.getKeyframeValue.bind(this));\n }\n return this.kf;\n };\n TextProperty.prototype.addEffect = function(effectFunction) {\n this.effectsSequence.push(effectFunction);\n this.elem.addDynamicProperty(this);\n };\n TextProperty.prototype.getValue = function(_finalValue) {\n if ((this.elem.globalData.frameId === this.frameId || !this.effectsSequence.length) && !_finalValue) {\n return;\n }\n this.currentData.t = this.data.d.k[this.keysIndex].s.t;\n var currentValue = this.currentData;\n var currentIndex = this.keysIndex;\n if (this.lock) {\n this.setCurrentData(this.currentData);\n return;\n }\n this.lock = true;\n this._mdf = false;\n var i;\n var len = this.effectsSequence.length;\n var finalValue = _finalValue || this.data.d.k[this.keysIndex].s;\n for (i = 0; i < len; i += 1) {\n if (currentIndex !== this.keysIndex) {\n finalValue = this.effectsSequence[i](finalValue, finalValue.t);\n } else {\n finalValue = this.effectsSequence[i](this.currentData, finalValue.t);\n }\n }\n if (currentValue !== finalValue) {\n this.setCurrentData(finalValue);\n }\n this.v = this.currentData;\n this.pv = this.v;\n this.lock = false;\n this.frameId = this.elem.globalData.frameId;\n };\n TextProperty.prototype.getKeyframeValue = function() {\n var textKeys = this.data.d.k;\n var frameNum = this.elem.comp.renderedFrame;\n var i = 0;\n var len = textKeys.length;\n while (i <= len - 1) {\n if (i === len - 1 || textKeys[i + 1].t > frameNum) {\n break;\n }\n i += 1;\n }\n if (this.keysIndex !== i) {\n this.keysIndex = i;\n }\n return this.data.d.k[this.keysIndex].s;\n };\n TextProperty.prototype.buildFinalText = function(text) {\n var charactersArray = [];\n var i = 0;\n var len = text.length;\n var charCode;\n var secondCharCode;\n var shouldCombine = false;\n while (i < len) {\n charCode = text.charCodeAt(i);\n if (FontManager.isCombinedCharacter(charCode)) {\n charactersArray[charactersArray.length - 1] += text.charAt(i);\n } else if (charCode >= 55296 && charCode <= 56319) {\n secondCharCode = text.charCodeAt(i + 1);\n if (secondCharCode >= 56320 && secondCharCode <= 57343) {\n if (shouldCombine || FontManager.isModifier(charCode, secondCharCode)) {\n charactersArray[charactersArray.length - 1] += text.substr(i, 2);\n shouldCombine = false;\n } else {\n charactersArray.push(text.substr(i, 2));\n }\n i += 1;\n } else {\n charactersArray.push(text.charAt(i));\n }\n } else if (charCode > 56319) {\n secondCharCode = text.charCodeAt(i + 1);\n if (FontManager.isZeroWidthJoiner(charCode, secondCharCode)) {\n shouldCombine = true;\n charactersArray[charactersArray.length - 1] += text.substr(i, 2);\n i += 1;\n } else {\n charactersArray.push(text.charAt(i));\n }\n } else if (FontManager.isZeroWidthJoiner(charCode)) {\n charactersArray[charactersArray.length - 1] += text.charAt(i);\n shouldCombine = true;\n } else {\n charactersArray.push(text.charAt(i));\n }\n i += 1;\n }\n return charactersArray;\n };\n TextProperty.prototype.completeTextData = function(documentData) {\n documentData.__complete = true;\n var fontManager = this.elem.globalData.fontManager;\n var data = this.data;\n var letters = [];\n var i;\n var len;\n var newLineFlag;\n var index2 = 0;\n var val;\n var anchorGrouping = data.m.g;\n var currentSize = 0;\n var currentPos = 0;\n var currentLine = 0;\n var lineWidths = [];\n var lineWidth = 0;\n var maxLineWidth = 0;\n var j;\n var jLen;\n var fontData = fontManager.getFontByName(documentData.f);\n var charData;\n var cLength = 0;\n var fontProps = getFontProperties(fontData);\n documentData.fWeight = fontProps.weight;\n documentData.fStyle = fontProps.style;\n documentData.finalSize = documentData.s;\n documentData.finalText = this.buildFinalText(documentData.t);\n len = documentData.finalText.length;\n documentData.finalLineHeight = documentData.lh;\n var trackingOffset = documentData.tr / 1e3 * documentData.finalSize;\n var charCode;\n if (documentData.sz) {\n var flag = true;\n var boxWidth = documentData.sz[0];\n var boxHeight = documentData.sz[1];\n var currentHeight;\n var finalText;\n while (flag) {\n finalText = this.buildFinalText(documentData.t);\n currentHeight = 0;\n lineWidth = 0;\n len = finalText.length;\n trackingOffset = documentData.tr / 1e3 * documentData.finalSize;\n var lastSpaceIndex = -1;\n for (i = 0; i < len; i += 1) {\n charCode = finalText[i].charCodeAt(0);\n newLineFlag = false;\n if (finalText[i] === \" \") {\n lastSpaceIndex = i;\n } else if (charCode === 13 || charCode === 3) {\n lineWidth = 0;\n newLineFlag = true;\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n }\n if (fontManager.chars) {\n charData = fontManager.getCharData(finalText[i], fontData.fStyle, fontData.fFamily);\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n } else {\n cLength = fontManager.measureText(finalText[i], documentData.f, documentData.finalSize);\n }\n if (lineWidth + cLength > boxWidth && finalText[i] !== \" \") {\n if (lastSpaceIndex === -1) {\n len += 1;\n } else {\n i = lastSpaceIndex;\n }\n currentHeight += documentData.finalLineHeight || documentData.finalSize * 1.2;\n finalText.splice(i, lastSpaceIndex === i ? 1 : 0, \"\\r\");\n lastSpaceIndex = -1;\n lineWidth = 0;\n } else {\n lineWidth += cLength;\n lineWidth += trackingOffset;\n }\n }\n currentHeight += fontData.ascent * documentData.finalSize / 100;\n if (this.canResize && documentData.finalSize > this.minimumFontSize && boxHeight < currentHeight) {\n documentData.finalSize -= 1;\n documentData.finalLineHeight = documentData.finalSize * documentData.lh / documentData.s;\n } else {\n documentData.finalText = finalText;\n len = documentData.finalText.length;\n flag = false;\n }\n }\n }\n lineWidth = -trackingOffset;\n cLength = 0;\n var uncollapsedSpaces = 0;\n var currentChar;\n for (i = 0; i < len; i += 1) {\n newLineFlag = false;\n currentChar = documentData.finalText[i];\n charCode = currentChar.charCodeAt(0);\n if (charCode === 13 || charCode === 3) {\n uncollapsedSpaces = 0;\n lineWidths.push(lineWidth);\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidth = -2 * trackingOffset;\n val = \"\";\n newLineFlag = true;\n currentLine += 1;\n } else {\n val = currentChar;\n }\n if (fontManager.chars) {\n charData = fontManager.getCharData(\n currentChar,\n fontData.fStyle,\n fontManager.getFontByName(documentData.f).fFamily\n );\n cLength = newLineFlag ? 0 : charData.w * documentData.finalSize / 100;\n } else {\n cLength = fontManager.measureText(val, documentData.f, documentData.finalSize);\n }\n if (currentChar === \" \") {\n uncollapsedSpaces += cLength + trackingOffset;\n } else {\n lineWidth += cLength + trackingOffset + uncollapsedSpaces;\n uncollapsedSpaces = 0;\n }\n letters.push({\n l: cLength,\n an: cLength,\n add: currentSize,\n n: newLineFlag,\n anIndexes: [],\n val,\n line: currentLine,\n animatorJustifyOffset: 0\n });\n if (anchorGrouping == 2) {\n currentSize += cLength;\n if (val === \"\" || val === \" \" || i === len - 1) {\n if (val === \"\" || val === \" \") {\n currentSize -= cLength;\n }\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index2;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n index2 += 1;\n currentSize = 0;\n }\n } else if (anchorGrouping == 3) {\n currentSize += cLength;\n if (val === \"\" || i === len - 1) {\n if (val === \"\") {\n currentSize -= cLength;\n }\n while (currentPos <= i) {\n letters[currentPos].an = currentSize;\n letters[currentPos].ind = index2;\n letters[currentPos].extra = cLength;\n currentPos += 1;\n }\n currentSize = 0;\n index2 += 1;\n }\n } else {\n letters[index2].ind = index2;\n letters[index2].extra = 0;\n index2 += 1;\n }\n }\n documentData.l = letters;\n maxLineWidth = lineWidth > maxLineWidth ? lineWidth : maxLineWidth;\n lineWidths.push(lineWidth);\n if (documentData.sz) {\n documentData.boxWidth = documentData.sz[0];\n documentData.justifyOffset = 0;\n } else {\n documentData.boxWidth = maxLineWidth;\n switch (documentData.j) {\n case 1:\n documentData.justifyOffset = -documentData.boxWidth;\n break;\n case 2:\n documentData.justifyOffset = -documentData.boxWidth / 2;\n break;\n default:\n documentData.justifyOffset = 0;\n }\n }\n documentData.lineWidths = lineWidths;\n var animators = data.a;\n var animatorData;\n var letterData;\n jLen = animators.length;\n var based;\n var ind;\n var indexes = [];\n for (j = 0; j < jLen; j += 1) {\n animatorData = animators[j];\n if (animatorData.a.sc) {\n documentData.strokeColorAnim = true;\n }\n if (animatorData.a.sw) {\n documentData.strokeWidthAnim = true;\n }\n if (animatorData.a.fc || animatorData.a.fh || animatorData.a.fs || animatorData.a.fb) {\n documentData.fillColorAnim = true;\n }\n ind = 0;\n based = animatorData.s.b;\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n letterData.anIndexes[j] = ind;\n if (based == 1 && letterData.val !== \"\" || based == 2 && letterData.val !== \"\" && letterData.val !== \" \" || based == 3 && (letterData.n || letterData.val == \" \" || i == len - 1) || based == 4 && (letterData.n || i == len - 1)) {\n if (animatorData.s.rn === 1) {\n indexes.push(ind);\n }\n ind += 1;\n }\n }\n data.a[j].s.totalChars = ind;\n var currentInd = -1;\n var newInd;\n if (animatorData.s.rn === 1) {\n for (i = 0; i < len; i += 1) {\n letterData = letters[i];\n if (currentInd != letterData.anIndexes[j]) {\n currentInd = letterData.anIndexes[j];\n newInd = indexes.splice(Math.floor(Math.random() * indexes.length), 1)[0];\n }\n letterData.anIndexes[j] = newInd;\n }\n }\n }\n documentData.yOffset = documentData.finalLineHeight || documentData.finalSize * 1.2;\n documentData.ls = documentData.ls || 0;\n documentData.ascent = fontData.ascent * documentData.finalSize / 100;\n };\n TextProperty.prototype.updateDocumentData = function(newData, index2) {\n index2 = index2 === void 0 ? this.keysIndex : index2;\n var dData = this.copyData({}, this.data.d.k[index2].s);\n dData = this.copyData(dData, newData);\n this.data.d.k[index2].s = dData;\n this.recalculate(index2);\n this.elem.addDynamicProperty(this);\n };\n TextProperty.prototype.recalculate = function(index2) {\n var dData = this.data.d.k[index2].s;\n dData.__complete = false;\n this.keysIndex = 0;\n this._isFirstFrame = true;\n this.getValue(dData);\n };\n TextProperty.prototype.canResizeFont = function(_canResize) {\n this.canResize = _canResize;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n };\n TextProperty.prototype.setMinimumFontSize = function(_fontValue) {\n this.minimumFontSize = Math.floor(_fontValue) || 1;\n this.recalculate(this.keysIndex);\n this.elem.addDynamicProperty(this);\n };\n const TextSelectorProp = function() {\n var max = Math.max;\n var min = Math.min;\n var floor = Math.floor;\n function TextSelectorPropFactory(elem, data) {\n this._currentTextLength = -1;\n this.k = false;\n this.data = data;\n this.elem = elem;\n this.comp = elem.comp;\n this.finalS = 0;\n this.finalE = 0;\n this.initDynamicPropertyContainer(elem);\n this.s = PropertyFactory.getProp(elem, data.s || { k: 0 }, 0, 0, this);\n if (\"e\" in data) {\n this.e = PropertyFactory.getProp(elem, data.e, 0, 0, this);\n } else {\n this.e = { v: 100 };\n }\n this.o = PropertyFactory.getProp(elem, data.o || { k: 0 }, 0, 0, this);\n this.xe = PropertyFactory.getProp(elem, data.xe || { k: 0 }, 0, 0, this);\n this.ne = PropertyFactory.getProp(elem, data.ne || { k: 0 }, 0, 0, this);\n this.sm = PropertyFactory.getProp(elem, data.sm || { k: 100 }, 0, 0, this);\n this.a = PropertyFactory.getProp(elem, data.a, 0, 0.01, this);\n if (!this.dynamicProperties.length) {\n this.getValue();\n }\n }\n TextSelectorPropFactory.prototype = {\n getMult: function(ind) {\n if (this._currentTextLength !== this.elem.textProperty.currentData.l.length) {\n this.getValue();\n }\n var x1 = 0;\n var y1 = 0;\n var x2 = 1;\n var y2 = 1;\n if (this.ne.v > 0) {\n x1 = this.ne.v / 100;\n } else {\n y1 = -this.ne.v / 100;\n }\n if (this.xe.v > 0) {\n x2 = 1 - this.xe.v / 100;\n } else {\n y2 = 1 + this.xe.v / 100;\n }\n var easer = BezierFactory.getBezierEasing(x1, y1, x2, y2).get;\n var mult = 0;\n var s = this.finalS;\n var e = this.finalE;\n var type = this.data.sh;\n if (type === 2) {\n if (e === s) {\n mult = ind >= e ? 1 : 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n mult = easer(mult);\n } else if (type === 3) {\n if (e === s) {\n mult = ind >= e ? 0 : 1;\n } else {\n mult = 1 - max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n }\n mult = easer(mult);\n } else if (type === 4) {\n if (e === s) {\n mult = 0;\n } else {\n mult = max(0, min(0.5 / (e - s) + (ind - s) / (e - s), 1));\n if (mult < 0.5) {\n mult *= 2;\n } else {\n mult = 1 - 2 * (mult - 0.5);\n }\n }\n mult = easer(mult);\n } else if (type === 5) {\n if (e === s) {\n mult = 0;\n } else {\n var tot = e - s;\n ind = min(max(0, ind + 0.5 - s), e - s);\n var x = -tot / 2 + ind;\n var a = tot / 2;\n mult = Math.sqrt(1 - x * x / (a * a));\n }\n mult = easer(mult);\n } else if (type === 6) {\n if (e === s) {\n mult = 0;\n } else {\n ind = min(max(0, ind + 0.5 - s), e - s);\n mult = (1 + Math.cos(Math.PI + Math.PI * 2 * ind / (e - s))) / 2;\n }\n mult = easer(mult);\n } else {\n if (ind >= floor(s)) {\n if (ind - s < 0) {\n mult = max(0, min(min(e, 1) - (s - ind), 1));\n } else {\n mult = max(0, min(e - ind, 1));\n }\n }\n mult = easer(mult);\n }\n if (this.sm.v !== 100) {\n var smoothness = this.sm.v * 0.01;\n if (smoothness === 0) {\n smoothness = 1e-8;\n }\n var threshold = 0.5 - smoothness * 0.5;\n if (mult < threshold) {\n mult = 0;\n } else {\n mult = (mult - threshold) / smoothness;\n if (mult > 1) {\n mult = 1;\n }\n }\n }\n return mult * this.a.v;\n },\n getValue: function(newCharsFlag) {\n this.iterateDynamicProperties();\n this._mdf = newCharsFlag || this._mdf;\n this._currentTextLength = this.elem.textProperty.currentData.l.length || 0;\n if (newCharsFlag && this.data.r === 2) {\n this.e.v = this._currentTextLength;\n }\n var divisor = this.data.r === 2 ? 1 : 100 / this.data.totalChars;\n var o = this.o.v / divisor;\n var s = this.s.v / divisor + o;\n var e = this.e.v / divisor + o;\n if (s > e) {\n var _s = s;\n s = e;\n e = _s;\n }\n this.finalS = s;\n this.finalE = e;\n }\n };\n extendPrototype([DynamicPropertyContainer], TextSelectorPropFactory);\n function getTextSelectorProp(elem, data, arr) {\n return new TextSelectorPropFactory(elem, data);\n }\n return {\n getTextSelectorProp\n };\n }();\n function TextAnimatorDataProperty(elem, animatorProps, container) {\n var defaultData = { propType: false };\n var getProp = PropertyFactory.getProp;\n var textAnimatorAnimatables = animatorProps.a;\n this.a = {\n r: textAnimatorAnimatables.r ? getProp(elem, textAnimatorAnimatables.r, 0, degToRads, container) : defaultData,\n rx: textAnimatorAnimatables.rx ? getProp(elem, textAnimatorAnimatables.rx, 0, degToRads, container) : defaultData,\n ry: textAnimatorAnimatables.ry ? getProp(elem, textAnimatorAnimatables.ry, 0, degToRads, container) : defaultData,\n sk: textAnimatorAnimatables.sk ? getProp(elem, textAnimatorAnimatables.sk, 0, degToRads, container) : defaultData,\n sa: textAnimatorAnimatables.sa ? getProp(elem, textAnimatorAnimatables.sa, 0, degToRads, container) : defaultData,\n s: textAnimatorAnimatables.s ? getProp(elem, textAnimatorAnimatables.s, 1, 0.01, container) : defaultData,\n a: textAnimatorAnimatables.a ? getProp(elem, textAnimatorAnimatables.a, 1, 0, container) : defaultData,\n o: textAnimatorAnimatables.o ? getProp(elem, textAnimatorAnimatables.o, 0, 0.01, container) : defaultData,\n p: textAnimatorAnimatables.p ? getProp(elem, textAnimatorAnimatables.p, 1, 0, container) : defaultData,\n sw: textAnimatorAnimatables.sw ? getProp(elem, textAnimatorAnimatables.sw, 0, 0, container) : defaultData,\n sc: textAnimatorAnimatables.sc ? getProp(elem, textAnimatorAnimatables.sc, 1, 0, container) : defaultData,\n fc: textAnimatorAnimatables.fc ? getProp(elem, textAnimatorAnimatables.fc, 1, 0, container) : defaultData,\n fh: textAnimatorAnimatables.fh ? getProp(elem, textAnimatorAnimatables.fh, 0, 0, container) : defaultData,\n fs: textAnimatorAnimatables.fs ? getProp(elem, textAnimatorAnimatables.fs, 0, 0.01, container) : defaultData,\n fb: textAnimatorAnimatables.fb ? getProp(elem, textAnimatorAnimatables.fb, 0, 0.01, container) : defaultData,\n t: textAnimatorAnimatables.t ? getProp(elem, textAnimatorAnimatables.t, 0, 0, container) : defaultData\n };\n this.s = TextSelectorProp.getTextSelectorProp(elem, animatorProps.s, container);\n this.s.t = animatorProps.s.t;\n }\n function TextAnimatorProperty(textData, renderType, elem) {\n this._isFirstFrame = true;\n this._hasMaskedPath = false;\n this._frameId = -1;\n this._textData = textData;\n this._renderType = renderType;\n this._elem = elem;\n this._animatorsData = createSizedArray(this._textData.a.length);\n this._pathData = {};\n this._moreOptions = {\n alignment: {}\n };\n this.renderedLetters = [];\n this.lettersChangedFlag = false;\n this.initDynamicPropertyContainer(elem);\n }\n TextAnimatorProperty.prototype.searchProperties = function() {\n var i;\n var len = this._textData.a.length;\n var animatorProps;\n var getProp = PropertyFactory.getProp;\n for (i = 0; i < len; i += 1) {\n animatorProps = this._textData.a[i];\n this._animatorsData[i] = new TextAnimatorDataProperty(this._elem, animatorProps, this);\n }\n if (this._textData.p && \"m\" in this._textData.p) {\n this._pathData = {\n a: getProp(this._elem, this._textData.p.a, 0, 0, this),\n f: getProp(this._elem, this._textData.p.f, 0, 0, this),\n l: getProp(this._elem, this._textData.p.l, 0, 0, this),\n r: getProp(this._elem, this._textData.p.r, 0, 0, this),\n p: getProp(this._elem, this._textData.p.p, 0, 0, this),\n m: this._elem.maskManager.getMaskProperty(this._textData.p.m)\n };\n this._hasMaskedPath = true;\n } else {\n this._hasMaskedPath = false;\n }\n this._moreOptions.alignment = getProp(this._elem, this._textData.m.a, 1, 0, this);\n };\n TextAnimatorProperty.prototype.getMeasures = function(documentData, lettersChangedFlag) {\n this.lettersChangedFlag = lettersChangedFlag;\n if (!this._mdf && !this._isFirstFrame && !lettersChangedFlag && (!this._hasMaskedPath || !this._pathData.m._mdf)) {\n return;\n }\n this._isFirstFrame = false;\n var alignment = this._moreOptions.alignment.v;\n var animators = this._animatorsData;\n var textData = this._textData;\n var matrixHelper = this.mHelper;\n var renderType = this._renderType;\n var renderedLettersCount = this.renderedLetters.length;\n var xPos;\n var yPos;\n var i;\n var len;\n var letters = documentData.l;\n var pathInfo;\n var currentLength;\n var currentPoint;\n var segmentLength;\n var flag;\n var pointInd;\n var segmentInd;\n var prevPoint;\n var points;\n var segments;\n var partialLength;\n var totalLength;\n var perc;\n var tanAngle;\n var mask;\n if (this._hasMaskedPath) {\n mask = this._pathData.m;\n if (!this._pathData.n || this._pathData._mdf) {\n var paths = mask.v;\n if (this._pathData.r.v) {\n paths = paths.reverse();\n }\n pathInfo = {\n tLength: 0,\n segments: []\n };\n len = paths._length - 1;\n var bezierData;\n totalLength = 0;\n for (i = 0; i < len; i += 1) {\n bezierData = bez.buildBezierData(\n paths.v[i],\n paths.v[i + 1],\n [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]],\n [paths.i[i + 1][0] - paths.v[i + 1][0], paths.i[i + 1][1] - paths.v[i + 1][1]]\n );\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n i = len;\n if (mask.v.c) {\n bezierData = bez.buildBezierData(\n paths.v[i],\n paths.v[0],\n [paths.o[i][0] - paths.v[i][0], paths.o[i][1] - paths.v[i][1]],\n [paths.i[0][0] - paths.v[0][0], paths.i[0][1] - paths.v[0][1]]\n );\n pathInfo.tLength += bezierData.segmentLength;\n pathInfo.segments.push(bezierData);\n totalLength += bezierData.segmentLength;\n }\n this._pathData.pi = pathInfo;\n }\n pathInfo = this._pathData.pi;\n currentLength = this._pathData.f.v;\n segmentInd = 0;\n pointInd = 1;\n segmentLength = 0;\n flag = true;\n segments = pathInfo.segments;\n if (currentLength < 0 && mask.v.c) {\n if (pathInfo.tLength < Math.abs(currentLength)) {\n currentLength = -Math.abs(currentLength) % pathInfo.tLength;\n }\n segmentInd = segments.length - 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n while (currentLength < 0) {\n currentLength += points[pointInd].partialLength;\n pointInd -= 1;\n if (pointInd < 0) {\n segmentInd -= 1;\n points = segments[segmentInd].points;\n pointInd = points.length - 1;\n }\n }\n }\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n len = letters.length;\n xPos = 0;\n yPos = 0;\n var yOff = documentData.finalSize * 1.2 * 0.714;\n var firstLine = true;\n var animatorProps;\n var animatorSelector;\n var j;\n var jLen;\n var letterValue;\n jLen = animators.length;\n var mult;\n var ind = -1;\n var offf;\n var xPathPos;\n var yPathPos;\n var initPathPos = currentLength;\n var initSegmentInd = segmentInd;\n var initPointInd = pointInd;\n var currentLine = -1;\n var elemOpacity;\n var sc;\n var sw;\n var fc;\n var k;\n var letterSw;\n var letterSc;\n var letterFc;\n var letterM = \"\";\n var letterP = this.defaultPropsArray;\n var letterO;\n if (documentData.j === 2 || documentData.j === 1) {\n var animatorJustifyOffset = 0;\n var animatorFirstCharOffset = 0;\n var justifyOffsetMult = documentData.j === 2 ? -0.5 : -1;\n var lastIndex = 0;\n var isNewLine = true;\n for (i = 0; i < len; i += 1) {\n if (letters[i].n) {\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n animatorJustifyOffset = 0;\n isNewLine = true;\n } else {\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.t.propType) {\n if (isNewLine && documentData.j === 2) {\n animatorFirstCharOffset += animatorProps.t.v * justifyOffsetMult;\n }\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (mult.length) {\n animatorJustifyOffset += animatorProps.t.v * mult[0] * justifyOffsetMult;\n } else {\n animatorJustifyOffset += animatorProps.t.v * mult * justifyOffsetMult;\n }\n }\n }\n isNewLine = false;\n }\n }\n if (animatorJustifyOffset) {\n animatorJustifyOffset += animatorFirstCharOffset;\n }\n while (lastIndex < i) {\n letters[lastIndex].animatorJustifyOffset = animatorJustifyOffset;\n lastIndex += 1;\n }\n }\n for (i = 0; i < len; i += 1) {\n matrixHelper.reset();\n elemOpacity = 1;\n if (letters[i].n) {\n xPos = 0;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n currentLength = initPathPos;\n firstLine = false;\n if (this._hasMaskedPath) {\n segmentInd = initSegmentInd;\n pointInd = initPointInd;\n points = segments[segmentInd].points;\n prevPoint = points[pointInd - 1];\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n segmentLength = 0;\n }\n letterM = \"\";\n letterFc = \"\";\n letterSw = \"\";\n letterO = \"\";\n letterP = this.defaultPropsArray;\n } else {\n if (this._hasMaskedPath) {\n if (currentLine !== letters[i].line) {\n switch (documentData.j) {\n case 1:\n currentLength += totalLength - documentData.lineWidths[letters[i].line];\n break;\n case 2:\n currentLength += (totalLength - documentData.lineWidths[letters[i].line]) / 2;\n break;\n }\n currentLine = letters[i].line;\n }\n if (ind !== letters[i].ind) {\n if (letters[ind]) {\n currentLength += letters[ind].extra;\n }\n currentLength += letters[i].an / 2;\n ind = letters[i].ind;\n }\n currentLength += alignment[0] * letters[i].an * 5e-3;\n var animatorOffset = 0;\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (mult.length) {\n animatorOffset += animatorProps.p.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.p.v[0] * mult;\n }\n }\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (mult.length) {\n animatorOffset += animatorProps.a.v[0] * mult[0];\n } else {\n animatorOffset += animatorProps.a.v[0] * mult;\n }\n }\n }\n flag = true;\n if (this._pathData.a.v) {\n currentLength = letters[0].an * 0.5 + (totalLength - this._pathData.f.v - letters[0].an * 0.5 - letters[letters.length - 1].an * 0.5) * ind / (len - 1);\n currentLength += this._pathData.f.v;\n }\n while (flag) {\n if (segmentLength + partialLength >= currentLength + animatorOffset || !points) {\n perc = (currentLength + animatorOffset - segmentLength) / currentPoint.partialLength;\n xPathPos = prevPoint.point[0] + (currentPoint.point[0] - prevPoint.point[0]) * perc;\n yPathPos = prevPoint.point[1] + (currentPoint.point[1] - prevPoint.point[1]) * perc;\n matrixHelper.translate(-alignment[0] * letters[i].an * 5e-3, -(alignment[1] * yOff) * 0.01);\n flag = false;\n } else if (points) {\n segmentLength += currentPoint.partialLength;\n pointInd += 1;\n if (pointInd >= points.length) {\n pointInd = 0;\n segmentInd += 1;\n if (!segments[segmentInd]) {\n if (mask.v.c) {\n pointInd = 0;\n segmentInd = 0;\n points = segments[segmentInd].points;\n } else {\n segmentLength -= currentPoint.partialLength;\n points = null;\n }\n } else {\n points = segments[segmentInd].points;\n }\n }\n if (points) {\n prevPoint = currentPoint;\n currentPoint = points[pointInd];\n partialLength = currentPoint.partialLength;\n }\n }\n }\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0);\n } else {\n offf = letters[i].an / 2 - letters[i].add;\n matrixHelper.translate(-offf, 0, 0);\n matrixHelper.translate(-alignment[0] * letters[i].an * 5e-3, -alignment[1] * yOff * 0.01, 0);\n }\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.t.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (xPos !== 0 || documentData.j !== 0) {\n if (this._hasMaskedPath) {\n if (mult.length) {\n currentLength += animatorProps.t.v * mult[0];\n } else {\n currentLength += animatorProps.t.v * mult;\n }\n } else if (mult.length) {\n xPos += animatorProps.t.v * mult[0];\n } else {\n xPos += animatorProps.t.v * mult;\n }\n }\n }\n }\n if (documentData.strokeWidthAnim) {\n sw = documentData.sw || 0;\n }\n if (documentData.strokeColorAnim) {\n if (documentData.sc) {\n sc = [documentData.sc[0], documentData.sc[1], documentData.sc[2]];\n } else {\n sc = [0, 0, 0];\n }\n }\n if (documentData.fillColorAnim && documentData.fc) {\n fc = [documentData.fc[0], documentData.fc[1], documentData.fc[2]];\n }\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.a.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (mult.length) {\n matrixHelper.translate(\n -animatorProps.a.v[0] * mult[0],\n -animatorProps.a.v[1] * mult[1],\n animatorProps.a.v[2] * mult[2]\n );\n } else {\n matrixHelper.translate(\n -animatorProps.a.v[0] * mult,\n -animatorProps.a.v[1] * mult,\n animatorProps.a.v[2] * mult\n );\n }\n }\n }\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.s.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (mult.length) {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult[0], 1 + (animatorProps.s.v[1] - 1) * mult[1], 1);\n } else {\n matrixHelper.scale(1 + (animatorProps.s.v[0] - 1) * mult, 1 + (animatorProps.s.v[1] - 1) * mult, 1);\n }\n }\n }\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (animatorProps.sk.propType) {\n if (mult.length) {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult[0], animatorProps.sa.v * mult[1]);\n } else {\n matrixHelper.skewFromAxis(-animatorProps.sk.v * mult, animatorProps.sa.v * mult);\n }\n }\n if (animatorProps.r.propType) {\n if (mult.length) {\n matrixHelper.rotateZ(-animatorProps.r.v * mult[2]);\n } else {\n matrixHelper.rotateZ(-animatorProps.r.v * mult);\n }\n }\n if (animatorProps.ry.propType) {\n if (mult.length) {\n matrixHelper.rotateY(animatorProps.ry.v * mult[1]);\n } else {\n matrixHelper.rotateY(animatorProps.ry.v * mult);\n }\n }\n if (animatorProps.rx.propType) {\n if (mult.length) {\n matrixHelper.rotateX(animatorProps.rx.v * mult[0]);\n } else {\n matrixHelper.rotateX(animatorProps.rx.v * mult);\n }\n }\n if (animatorProps.o.propType) {\n if (mult.length) {\n elemOpacity += (animatorProps.o.v * mult[0] - elemOpacity) * mult[0];\n } else {\n elemOpacity += (animatorProps.o.v * mult - elemOpacity) * mult;\n }\n }\n if (documentData.strokeWidthAnim && animatorProps.sw.propType) {\n if (mult.length) {\n sw += animatorProps.sw.v * mult[0];\n } else {\n sw += animatorProps.sw.v * mult;\n }\n }\n if (documentData.strokeColorAnim && animatorProps.sc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult[0];\n } else {\n sc[k] += (animatorProps.sc.v[k] - sc[k]) * mult;\n }\n }\n }\n if (documentData.fillColorAnim && documentData.fc) {\n if (animatorProps.fc.propType) {\n for (k = 0; k < 3; k += 1) {\n if (mult.length) {\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult[0];\n } else {\n fc[k] += (animatorProps.fc.v[k] - fc[k]) * mult;\n }\n }\n }\n if (animatorProps.fh.propType) {\n if (mult.length) {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult[0]);\n } else {\n fc = addHueToRGB(fc, animatorProps.fh.v * mult);\n }\n }\n if (animatorProps.fs.propType) {\n if (mult.length) {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult[0]);\n } else {\n fc = addSaturationToRGB(fc, animatorProps.fs.v * mult);\n }\n }\n if (animatorProps.fb.propType) {\n if (mult.length) {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult[0]);\n } else {\n fc = addBrightnessToRGB(fc, animatorProps.fb.v * mult);\n }\n }\n }\n }\n for (j = 0; j < jLen; j += 1) {\n animatorProps = animators[j].a;\n if (animatorProps.p.propType) {\n animatorSelector = animators[j].s;\n mult = animatorSelector.getMult(letters[i].anIndexes[j], textData.a[j].s.totalChars);\n if (this._hasMaskedPath) {\n if (mult.length) {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult[0], -animatorProps.p.v[2] * mult[1]);\n } else {\n matrixHelper.translate(0, animatorProps.p.v[1] * mult, -animatorProps.p.v[2] * mult);\n }\n } else if (mult.length) {\n matrixHelper.translate(\n animatorProps.p.v[0] * mult[0],\n animatorProps.p.v[1] * mult[1],\n -animatorProps.p.v[2] * mult[2]\n );\n } else {\n matrixHelper.translate(\n animatorProps.p.v[0] * mult,\n animatorProps.p.v[1] * mult,\n -animatorProps.p.v[2] * mult\n );\n }\n }\n }\n if (documentData.strokeWidthAnim) {\n letterSw = sw < 0 ? 0 : sw;\n }\n if (documentData.strokeColorAnim) {\n letterSc = \"rgb(\" + Math.round(sc[0] * 255) + \",\" + Math.round(sc[1] * 255) + \",\" + Math.round(sc[2] * 255) + \")\";\n }\n if (documentData.fillColorAnim && documentData.fc) {\n letterFc = \"rgb(\" + Math.round(fc[0] * 255) + \",\" + Math.round(fc[1] * 255) + \",\" + Math.round(fc[2] * 255) + \")\";\n }\n if (this._hasMaskedPath) {\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(0, alignment[1] * yOff * 0.01 + yPos, 0);\n if (this._pathData.p.v) {\n tanAngle = (currentPoint.point[1] - prevPoint.point[1]) / (currentPoint.point[0] - prevPoint.point[0]);\n var rot = Math.atan(tanAngle) * 180 / Math.PI;\n if (currentPoint.point[0] < prevPoint.point[0]) {\n rot += 180;\n }\n matrixHelper.rotate(-rot * Math.PI / 180);\n }\n matrixHelper.translate(xPathPos, yPathPos, 0);\n currentLength -= alignment[0] * letters[i].an * 5e-3;\n if (letters[i + 1] && ind !== letters[i + 1].ind) {\n currentLength += letters[i].an / 2;\n currentLength += documentData.tr * 1e-3 * documentData.finalSize;\n }\n } else {\n matrixHelper.translate(xPos, yPos, 0);\n if (documentData.ps) {\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(\n letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]),\n 0,\n 0\n );\n break;\n case 2:\n matrixHelper.translate(\n letters[i].animatorJustifyOffset + documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[letters[i].line]) / 2,\n 0,\n 0\n );\n break;\n }\n matrixHelper.translate(0, -documentData.ls);\n matrixHelper.translate(offf, 0, 0);\n matrixHelper.translate(alignment[0] * letters[i].an * 5e-3, alignment[1] * yOff * 0.01, 0);\n xPos += letters[i].l + documentData.tr * 1e-3 * documentData.finalSize;\n }\n if (renderType === \"html\") {\n letterM = matrixHelper.toCSS();\n } else if (renderType === \"svg\") {\n letterM = matrixHelper.to2dCSS();\n } else {\n letterP = [\n matrixHelper.props[0],\n matrixHelper.props[1],\n matrixHelper.props[2],\n matrixHelper.props[3],\n matrixHelper.props[4],\n matrixHelper.props[5],\n matrixHelper.props[6],\n matrixHelper.props[7],\n matrixHelper.props[8],\n matrixHelper.props[9],\n matrixHelper.props[10],\n matrixHelper.props[11],\n matrixHelper.props[12],\n matrixHelper.props[13],\n matrixHelper.props[14],\n matrixHelper.props[15]\n ];\n }\n letterO = elemOpacity;\n }\n if (renderedLettersCount <= i) {\n letterValue = new LetterProps(letterO, letterSw, letterSc, letterFc, letterM, letterP);\n this.renderedLetters.push(letterValue);\n renderedLettersCount += 1;\n this.lettersChangedFlag = true;\n } else {\n letterValue = this.renderedLetters[i];\n this.lettersChangedFlag = letterValue.update(letterO, letterSw, letterSc, letterFc, letterM, letterP) || this.lettersChangedFlag;\n }\n }\n };\n TextAnimatorProperty.prototype.getValue = function() {\n if (this._elem.globalData.frameId === this._frameId) {\n return;\n }\n this._frameId = this._elem.globalData.frameId;\n this.iterateDynamicProperties();\n };\n TextAnimatorProperty.prototype.mHelper = new Matrix();\n TextAnimatorProperty.prototype.defaultPropsArray = [];\n extendPrototype([DynamicPropertyContainer], TextAnimatorProperty);\n function ITextElement() {\n }\n ITextElement.prototype.initElement = function(data, globalData, comp) {\n this.lettersChangedFlag = true;\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.textProperty = new TextProperty(this, data.t, this.dynamicProperties);\n this.textAnimator = new TextAnimatorProperty(data.t, this.renderType, this);\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n this.initRenderable();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n this.createContent();\n this.hide();\n this.textAnimator.searchProperties(this.dynamicProperties);\n };\n ITextElement.prototype.prepareFrame = function(num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n if (this.textProperty._mdf || this.textProperty._isFirstFrame) {\n this.buildNewText();\n this.textProperty._isFirstFrame = false;\n this.textProperty._mdf = false;\n }\n };\n ITextElement.prototype.createPathShape = function(matrixHelper, shapes) {\n var j;\n var jLen = shapes.length;\n var pathNodes;\n var shapeStr = \"\";\n for (j = 0; j < jLen; j += 1) {\n if (shapes[j].ty === \"sh\") {\n pathNodes = shapes[j].ks.k;\n shapeStr += buildShapeString(pathNodes, pathNodes.i.length, true, matrixHelper);\n }\n }\n return shapeStr;\n };\n ITextElement.prototype.updateDocumentData = function(newData, index2) {\n this.textProperty.updateDocumentData(newData, index2);\n };\n ITextElement.prototype.canResizeFont = function(_canResize) {\n this.textProperty.canResizeFont(_canResize);\n };\n ITextElement.prototype.setMinimumFontSize = function(_fontSize) {\n this.textProperty.setMinimumFontSize(_fontSize);\n };\n ITextElement.prototype.applyTextPropertiesToMatrix = function(documentData, matrixHelper, lineNumber, xPos, yPos) {\n if (documentData.ps) {\n matrixHelper.translate(documentData.ps[0], documentData.ps[1] + documentData.ascent, 0);\n }\n matrixHelper.translate(0, -documentData.ls, 0);\n switch (documentData.j) {\n case 1:\n matrixHelper.translate(\n documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]),\n 0,\n 0\n );\n break;\n case 2:\n matrixHelper.translate(\n documentData.justifyOffset + (documentData.boxWidth - documentData.lineWidths[lineNumber]) / 2,\n 0,\n 0\n );\n break;\n }\n matrixHelper.translate(xPos, yPos, 0);\n };\n ITextElement.prototype.buildColor = function(colorData) {\n return \"rgb(\" + Math.round(colorData[0] * 255) + \",\" + Math.round(colorData[1] * 255) + \",\" + Math.round(colorData[2] * 255) + \")\";\n };\n ITextElement.prototype.emptyProp = new LetterProps();\n ITextElement.prototype.destroy = function() {\n };\n var emptyShapeData = {\n shapes: []\n };\n function SVGTextLottieElement(data, globalData, comp) {\n this.textSpans = [];\n this.renderType = \"svg\";\n this.initElement(data, globalData, comp);\n }\n extendPrototype(\n [BaseElement, TransformElement, SVGBaseElement, HierarchyElement, FrameElement, RenderableDOMElement, ITextElement],\n SVGTextLottieElement\n );\n SVGTextLottieElement.prototype.createContent = function() {\n if (this.data.singleShape && !this.globalData.fontManager.chars) {\n this.textContainer = createNS(\"text\");\n }\n };\n SVGTextLottieElement.prototype.buildTextContents = function(textArray) {\n var i = 0;\n var len = textArray.length;\n var textContents = [];\n var currentTextContent = \"\";\n while (i < len) {\n if (textArray[i] === String.fromCharCode(13) || textArray[i] === String.fromCharCode(3)) {\n textContents.push(currentTextContent);\n currentTextContent = \"\";\n } else {\n currentTextContent += textArray[i];\n }\n i += 1;\n }\n textContents.push(currentTextContent);\n return textContents;\n };\n SVGTextLottieElement.prototype.buildShapeData = function(data, scale) {\n if (data.shapes && data.shapes.length) {\n var shape = data.shapes[0];\n if (shape.it) {\n var shapeItem = shape.it[shape.it.length - 1];\n if (shapeItem.s) {\n shapeItem.s.k[0] = scale;\n shapeItem.s.k[1] = scale;\n }\n }\n }\n return data;\n };\n SVGTextLottieElement.prototype.buildNewText = function() {\n this.addDynamicProperty(this);\n var i;\n var len;\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData ? documentData.l.length : 0);\n if (documentData.fc) {\n this.layerElement.setAttribute(\"fill\", this.buildColor(documentData.fc));\n } else {\n this.layerElement.setAttribute(\"fill\", \"rgba(0,0,0,0)\");\n }\n if (documentData.sc) {\n this.layerElement.setAttribute(\"stroke\", this.buildColor(documentData.sc));\n this.layerElement.setAttribute(\"stroke-width\", documentData.sw);\n }\n this.layerElement.setAttribute(\"font-size\", documentData.finalSize);\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n if (fontData.fClass) {\n this.layerElement.setAttribute(\"class\", fontData.fClass);\n } else {\n this.layerElement.setAttribute(\"font-family\", fontData.fFamily);\n var fWeight = documentData.fWeight;\n var fStyle = documentData.fStyle;\n this.layerElement.setAttribute(\"font-style\", fStyle);\n this.layerElement.setAttribute(\"font-weight\", fWeight);\n }\n this.layerElement.setAttribute(\"aria-label\", documentData.t);\n var letters = documentData.l || [];\n var usesGlyphs = !!this.globalData.fontManager.chars;\n len = letters.length;\n var tSpan;\n var matrixHelper = this.mHelper;\n var shapeStr = \"\";\n var singleShape = this.data.singleShape;\n var xPos = 0;\n var yPos = 0;\n var firstLine = true;\n var trackingOffset = documentData.tr * 1e-3 * documentData.finalSize;\n if (singleShape && !usesGlyphs && !documentData.sz) {\n var tElement = this.textContainer;\n var justify = \"start\";\n switch (documentData.j) {\n case 1:\n justify = \"end\";\n break;\n case 2:\n justify = \"middle\";\n break;\n default:\n justify = \"start\";\n break;\n }\n tElement.setAttribute(\"text-anchor\", justify);\n tElement.setAttribute(\"letter-spacing\", trackingOffset);\n var textContent = this.buildTextContents(documentData.finalText);\n len = textContent.length;\n yPos = documentData.ps ? documentData.ps[1] + documentData.ascent : 0;\n for (i = 0; i < len; i += 1) {\n tSpan = this.textSpans[i].span || createNS(\"tspan\");\n tSpan.textContent = textContent[i];\n tSpan.setAttribute(\"x\", 0);\n tSpan.setAttribute(\"y\", yPos);\n tSpan.style.display = \"inherit\";\n tElement.appendChild(tSpan);\n if (!this.textSpans[i]) {\n this.textSpans[i] = {\n span: null,\n glyph: null\n };\n }\n this.textSpans[i].span = tSpan;\n yPos += documentData.finalLineHeight;\n }\n this.layerElement.appendChild(tElement);\n } else {\n var cachedSpansLength = this.textSpans.length;\n var charData;\n for (i = 0; i < len; i += 1) {\n if (!this.textSpans[i]) {\n this.textSpans[i] = {\n span: null,\n childSpan: null,\n glyph: null\n };\n }\n if (!usesGlyphs || !singleShape || i === 0) {\n tSpan = cachedSpansLength > i ? this.textSpans[i].span : createNS(usesGlyphs ? \"g\" : \"text\");\n if (cachedSpansLength <= i) {\n tSpan.setAttribute(\"stroke-linecap\", \"butt\");\n tSpan.setAttribute(\"stroke-linejoin\", \"round\");\n tSpan.setAttribute(\"stroke-miterlimit\", \"4\");\n this.textSpans[i].span = tSpan;\n if (usesGlyphs) {\n var childSpan = createNS(\"g\");\n tSpan.appendChild(childSpan);\n this.textSpans[i].childSpan = childSpan;\n }\n this.textSpans[i].span = tSpan;\n this.layerElement.appendChild(tSpan);\n }\n tSpan.style.display = \"inherit\";\n }\n matrixHelper.reset();\n if (singleShape) {\n if (letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n xPos += letters[i].l || 0;\n xPos += trackingOffset;\n }\n if (usesGlyphs) {\n charData = this.globalData.fontManager.getCharData(\n documentData.finalText[i],\n fontData.fStyle,\n this.globalData.fontManager.getFontByName(documentData.f).fFamily\n );\n var glyphElement;\n if (charData.t === 1) {\n glyphElement = new SVGCompElement(charData.data, this.globalData, this);\n } else {\n var data = emptyShapeData;\n if (charData.data && charData.data.shapes) {\n data = this.buildShapeData(charData.data, documentData.finalSize);\n }\n glyphElement = new SVGShapeElement(data, this.globalData, this);\n }\n if (this.textSpans[i].glyph) {\n var glyph = this.textSpans[i].glyph;\n this.textSpans[i].childSpan.removeChild(glyph.layerElement);\n glyph.destroy();\n }\n this.textSpans[i].glyph = glyphElement;\n glyphElement._debug = true;\n glyphElement.prepareFrame(0);\n glyphElement.renderFrame();\n this.textSpans[i].childSpan.appendChild(glyphElement.layerElement);\n if (charData.t === 1) {\n this.textSpans[i].childSpan.setAttribute(\n \"transform\",\n \"scale(\" + documentData.finalSize / 100 + \",\" + documentData.finalSize / 100 + \")\"\n );\n }\n } else {\n if (singleShape) {\n tSpan.setAttribute(\"transform\", \"translate(\" + matrixHelper.props[12] + \",\" + matrixHelper.props[13] + \")\");\n }\n tSpan.textContent = letters[i].val;\n tSpan.setAttributeNS(\"http://www.w3.org/XML/1998/namespace\", \"xml:space\", \"preserve\");\n }\n }\n if (singleShape && tSpan) {\n tSpan.setAttribute(\"d\", shapeStr);\n }\n }\n while (i < this.textSpans.length) {\n this.textSpans[i].span.style.display = \"none\";\n i += 1;\n }\n this._sizeChanged = true;\n };\n SVGTextLottieElement.prototype.sourceRectAtTime = function() {\n this.prepareFrame(this.comp.renderedFrame - this.data.st);\n this.renderInnerContent();\n if (this._sizeChanged) {\n this._sizeChanged = false;\n var textBox = this.layerElement.getBBox();\n this.bbox = {\n top: textBox.y,\n left: textBox.x,\n width: textBox.width,\n height: textBox.height\n };\n }\n return this.bbox;\n };\n SVGTextLottieElement.prototype.getValue = function() {\n var i;\n var len = this.textSpans.length;\n var glyphElement;\n this.renderedFrame = this.comp.renderedFrame;\n for (i = 0; i < len; i += 1) {\n glyphElement = this.textSpans[i].glyph;\n if (glyphElement) {\n glyphElement.prepareFrame(this.comp.renderedFrame - this.data.st);\n if (glyphElement._mdf) {\n this._mdf = true;\n }\n }\n }\n };\n SVGTextLottieElement.prototype.renderInnerContent = function() {\n if (!this.data.singleShape || this._mdf) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n if (this.lettersChangedFlag || this.textAnimator.lettersChangedFlag) {\n this._sizeChanged = true;\n var i;\n var len;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var textSpan;\n var glyphElement;\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n textSpan = this.textSpans[i].span;\n glyphElement = this.textSpans[i].glyph;\n if (glyphElement) {\n glyphElement.renderFrame();\n }\n if (renderedLetter._mdf.m) {\n textSpan.setAttribute(\"transform\", renderedLetter.m);\n }\n if (renderedLetter._mdf.o) {\n textSpan.setAttribute(\"opacity\", renderedLetter.o);\n }\n if (renderedLetter._mdf.sw) {\n textSpan.setAttribute(\"stroke-width\", renderedLetter.sw);\n }\n if (renderedLetter._mdf.sc) {\n textSpan.setAttribute(\"stroke\", renderedLetter.sc);\n }\n if (renderedLetter._mdf.fc) {\n textSpan.setAttribute(\"fill\", renderedLetter.fc);\n }\n }\n }\n }\n }\n };\n function ISolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n extendPrototype([IImageElement], ISolidElement);\n ISolidElement.prototype.createContent = function() {\n var rect = createNS(\"rect\");\n rect.setAttribute(\"width\", this.data.sw);\n rect.setAttribute(\"height\", this.data.sh);\n rect.setAttribute(\"fill\", this.data.sc);\n this.layerElement.appendChild(rect);\n };\n function NullElement(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initFrame();\n this.initTransform(data, globalData, comp);\n this.initHierarchy();\n }\n NullElement.prototype.prepareFrame = function(num) {\n this.prepareProperties(num, true);\n };\n NullElement.prototype.renderFrame = function() {\n };\n NullElement.prototype.getBaseElement = function() {\n return null;\n };\n NullElement.prototype.destroy = function() {\n };\n NullElement.prototype.sourceRectAtTime = function() {\n };\n NullElement.prototype.hide = function() {\n };\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement], NullElement);\n function SVGRendererBase() {\n }\n extendPrototype([BaseRenderer], SVGRendererBase);\n SVGRendererBase.prototype.createNull = function(data) {\n return new NullElement(data, this.globalData, this);\n };\n SVGRendererBase.prototype.createShape = function(data) {\n return new SVGShapeElement(data, this.globalData, this);\n };\n SVGRendererBase.prototype.createText = function(data) {\n return new SVGTextLottieElement(data, this.globalData, this);\n };\n SVGRendererBase.prototype.createImage = function(data) {\n return new IImageElement(data, this.globalData, this);\n };\n SVGRendererBase.prototype.createSolid = function(data) {\n return new ISolidElement(data, this.globalData, this);\n };\n SVGRendererBase.prototype.configAnimation = function(animData) {\n this.svgElement.setAttribute(\"xmlns\", \"http://www.w3.org/2000/svg\");\n if (this.renderConfig.viewBoxSize) {\n this.svgElement.setAttribute(\"viewBox\", this.renderConfig.viewBoxSize);\n } else {\n this.svgElement.setAttribute(\"viewBox\", \"0 0 \" + animData.w + \" \" + animData.h);\n }\n if (!this.renderConfig.viewBoxOnly) {\n this.svgElement.setAttribute(\"width\", animData.w);\n this.svgElement.setAttribute(\"height\", animData.h);\n this.svgElement.style.width = \"100%\";\n this.svgElement.style.height = \"100%\";\n this.svgElement.style.transform = \"translate3d(0,0,0)\";\n this.svgElement.style.contentVisibility = this.renderConfig.contentVisibility;\n }\n if (this.renderConfig.width) {\n this.svgElement.setAttribute(\"width\", this.renderConfig.width);\n }\n if (this.renderConfig.height) {\n this.svgElement.setAttribute(\"height\", this.renderConfig.height);\n }\n if (this.renderConfig.className) {\n this.svgElement.setAttribute(\"class\", this.renderConfig.className);\n }\n if (this.renderConfig.id) {\n this.svgElement.setAttribute(\"id\", this.renderConfig.id);\n }\n if (this.renderConfig.focusable !== void 0) {\n this.svgElement.setAttribute(\"focusable\", this.renderConfig.focusable);\n }\n this.svgElement.setAttribute(\"preserveAspectRatio\", this.renderConfig.preserveAspectRatio);\n this.animationItem.wrapper.appendChild(this.svgElement);\n var defs = this.globalData.defs;\n this.setupGlobalData(animData, defs);\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.data = animData;\n var maskElement = createNS(\"clipPath\");\n var rect = createNS(\"rect\");\n rect.setAttribute(\"width\", animData.w);\n rect.setAttribute(\"height\", animData.h);\n rect.setAttribute(\"x\", 0);\n rect.setAttribute(\"y\", 0);\n var maskId = createElementID();\n maskElement.setAttribute(\"id\", maskId);\n maskElement.appendChild(rect);\n this.layerElement.setAttribute(\"clip-path\", \"url(\" + getLocationHref() + \"#\" + maskId + \")\");\n defs.appendChild(maskElement);\n this.layers = animData.layers;\n this.elements = createSizedArray(animData.layers.length);\n };\n SVGRendererBase.prototype.destroy = function() {\n if (this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = \"\";\n }\n this.layerElement = null;\n this.globalData.defs = null;\n var i;\n var len = this.layers ? this.layers.length : 0;\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n this.elements.length = 0;\n this.destroyed = true;\n this.animationItem = null;\n };\n SVGRendererBase.prototype.updateContainerSize = function() {\n };\n SVGRendererBase.prototype.buildItem = function(pos) {\n var elements = this.elements;\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n elements[pos] = true;\n var element = this.createItem(this.layers[pos]);\n elements[pos] = element;\n if (getExpressionsPlugin()) {\n if (this.layers[pos].ty === 0) {\n this.globalData.projectInterface.registerComposition(element);\n }\n element.initExpressions();\n }\n this.appendElementInPos(element, pos);\n if (this.layers[pos].tt) {\n if (!this.elements[pos - 1] || this.elements[pos - 1] === true) {\n this.buildItem(pos - 1);\n this.addPendingElement(element);\n } else {\n element.setMatte(elements[pos - 1].layerId);\n }\n }\n };\n SVGRendererBase.prototype.checkPendingElements = function() {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n if (element.data.tt) {\n var i = 0;\n var len = this.elements.length;\n while (i < len) {\n if (this.elements[i] === element) {\n element.setMatte(this.elements[i - 1].layerId);\n break;\n }\n i += 1;\n }\n }\n }\n };\n SVGRendererBase.prototype.renderFrame = function(num) {\n if (this.renderedFrame === num || this.destroyed) {\n return;\n }\n if (num === null) {\n num = this.renderedFrame;\n } else {\n this.renderedFrame = num;\n }\n this.globalData.frameNum = num;\n this.globalData.frameId += 1;\n this.globalData.projectInterface.currentFrame = num;\n this.globalData._mdf = false;\n var i;\n var len = this.layers.length;\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n if (this.globalData._mdf) {\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n }\n };\n SVGRendererBase.prototype.appendElementInPos = function(element, pos) {\n var newElement = element.getBaseElement();\n if (!newElement) {\n return;\n }\n var i = 0;\n var nextElement;\n while (i < pos) {\n if (this.elements[i] && this.elements[i] !== true && this.elements[i].getBaseElement()) {\n nextElement = this.elements[i].getBaseElement();\n }\n i += 1;\n }\n if (nextElement) {\n this.layerElement.insertBefore(newElement, nextElement);\n } else {\n this.layerElement.appendChild(newElement);\n }\n };\n SVGRendererBase.prototype.hide = function() {\n this.layerElement.style.display = \"none\";\n };\n SVGRendererBase.prototype.show = function() {\n this.layerElement.style.display = \"block\";\n };\n function ICompElement() {\n }\n extendPrototype([BaseElement, TransformElement, HierarchyElement, FrameElement, RenderableDOMElement], ICompElement);\n ICompElement.prototype.initElement = function(data, globalData, comp) {\n this.initFrame();\n this.initBaseData(data, globalData, comp);\n this.initTransform(data, globalData, comp);\n this.initRenderable();\n this.initHierarchy();\n this.initRendererElement();\n this.createContainerElements();\n this.createRenderableComponents();\n if (this.data.xt || !globalData.progressiveLoad) {\n this.buildAllItems();\n }\n this.hide();\n };\n ICompElement.prototype.prepareFrame = function(num) {\n this._mdf = false;\n this.prepareRenderableFrame(num);\n this.prepareProperties(num, this.isInRange);\n if (!this.isInRange && !this.data.xt) {\n return;\n }\n if (!this.tm._placeholder) {\n var timeRemapped = this.tm.v;\n if (timeRemapped === this.data.op) {\n timeRemapped = this.data.op - 1;\n }\n this.renderedFrame = timeRemapped;\n } else {\n this.renderedFrame = num / this.data.sr;\n }\n var i;\n var len = this.elements.length;\n if (!this.completeLayers) {\n this.checkLayers(this.renderedFrame);\n }\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(this.renderedFrame - this.layers[i].st);\n if (this.elements[i]._mdf) {\n this._mdf = true;\n }\n }\n }\n };\n ICompElement.prototype.renderInnerContent = function() {\n var i;\n var len = this.layers.length;\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n ICompElement.prototype.setElements = function(elems) {\n this.elements = elems;\n };\n ICompElement.prototype.getElements = function() {\n return this.elements;\n };\n ICompElement.prototype.destroyElements = function() {\n var i;\n var len = this.layers.length;\n for (i = 0; i < len; i += 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n };\n ICompElement.prototype.destroy = function() {\n this.destroyElements();\n this.destroyBaseElement();\n };\n function SVGCompElement(data, globalData, comp) {\n this.layers = data.layers;\n this.supports3d = true;\n this.completeLayers = false;\n this.pendingElements = [];\n this.elements = this.layers ? createSizedArray(this.layers.length) : [];\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true };\n }\n extendPrototype([SVGRendererBase, ICompElement, SVGBaseElement], SVGCompElement);\n SVGCompElement.prototype.createComp = function(data) {\n return new SVGCompElement(data, this.globalData, this);\n };\n function SVGRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.layers = null;\n this.renderedFrame = -1;\n this.svgElement = createNS(\"svg\");\n var ariaLabel = \"\";\n if (config && config.title) {\n var titleElement = createNS(\"title\");\n var titleId = createElementID();\n titleElement.setAttribute(\"id\", titleId);\n titleElement.textContent = config.title;\n this.svgElement.appendChild(titleElement);\n ariaLabel += titleId;\n }\n if (config && config.description) {\n var descElement = createNS(\"desc\");\n var descId = createElementID();\n descElement.setAttribute(\"id\", descId);\n descElement.textContent = config.description;\n this.svgElement.appendChild(descElement);\n ariaLabel += \" \" + descId;\n }\n if (ariaLabel) {\n this.svgElement.setAttribute(\"aria-labelledby\", ariaLabel);\n }\n var defs = createNS(\"defs\");\n this.svgElement.appendChild(defs);\n var maskElement = createNS(\"g\");\n this.svgElement.appendChild(maskElement);\n this.layerElement = maskElement;\n this.renderConfig = {\n preserveAspectRatio: config && config.preserveAspectRatio || \"xMidYMid meet\",\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || \"xMidYMid slice\",\n contentVisibility: config && config.contentVisibility || \"visible\",\n progressiveLoad: config && config.progressiveLoad || false,\n hideOnTransparent: !(config && config.hideOnTransparent === false),\n viewBoxOnly: config && config.viewBoxOnly || false,\n viewBoxSize: config && config.viewBoxSize || false,\n className: config && config.className || \"\",\n id: config && config.id || \"\",\n focusable: config && config.focusable,\n filterSize: {\n width: config && config.filterSize && config.filterSize.width || \"100%\",\n height: config && config.filterSize && config.filterSize.height || \"100%\",\n x: config && config.filterSize && config.filterSize.x || \"0%\",\n y: config && config.filterSize && config.filterSize.y || \"0%\"\n },\n width: config && config.width,\n height: config && config.height\n };\n this.globalData = {\n _mdf: false,\n frameNum: -1,\n defs,\n renderConfig: this.renderConfig\n };\n this.elements = [];\n this.pendingElements = [];\n this.destroyed = false;\n this.rendererType = \"svg\";\n }\n extendPrototype([SVGRendererBase], SVGRenderer);\n SVGRenderer.prototype.createComp = function(data) {\n return new SVGCompElement(data, this.globalData, this);\n };\n function CVContextData() {\n this.saved = [];\n this.cArrPos = 0;\n this.cTr = new Matrix();\n this.cO = 1;\n var i;\n var len = 15;\n this.savedOp = createTypedArray(\"float32\", len);\n for (i = 0; i < len; i += 1) {\n this.saved[i] = createTypedArray(\"float32\", 16);\n }\n this._length = len;\n }\n CVContextData.prototype.duplicate = function() {\n var newLength = this._length * 2;\n var currentSavedOp = this.savedOp;\n this.savedOp = createTypedArray(\"float32\", newLength);\n this.savedOp.set(currentSavedOp);\n var i = 0;\n for (i = this._length; i < newLength; i += 1) {\n this.saved[i] = createTypedArray(\"float32\", 16);\n }\n this._length = newLength;\n };\n CVContextData.prototype.reset = function() {\n this.cArrPos = 0;\n this.cTr.reset();\n this.cO = 1;\n };\n function ShapeTransformManager() {\n this.sequences = {};\n this.sequenceList = [];\n this.transform_key_count = 0;\n }\n ShapeTransformManager.prototype = {\n addTransformSequence: function(transforms) {\n var i;\n var len = transforms.length;\n var key = \"_\";\n for (i = 0; i < len; i += 1) {\n key += transforms[i].transform.key + \"_\";\n }\n var sequence = this.sequences[key];\n if (!sequence) {\n sequence = {\n transforms: [].concat(transforms),\n finalTransform: new Matrix(),\n _mdf: false\n };\n this.sequences[key] = sequence;\n this.sequenceList.push(sequence);\n }\n return sequence;\n },\n processSequence: function(sequence, isFirstFrame) {\n var i = 0;\n var len = sequence.transforms.length;\n var _mdf = isFirstFrame;\n while (i < len && !isFirstFrame) {\n if (sequence.transforms[i].transform.mProps._mdf) {\n _mdf = true;\n break;\n }\n i += 1;\n }\n if (_mdf) {\n var props;\n sequence.finalTransform.reset();\n for (i = len - 1; i >= 0; i -= 1) {\n props = sequence.transforms[i].transform.mProps.v.props;\n sequence.finalTransform.transform(\n props[0],\n props[1],\n props[2],\n props[3],\n props[4],\n props[5],\n props[6],\n props[7],\n props[8],\n props[9],\n props[10],\n props[11],\n props[12],\n props[13],\n props[14],\n props[15]\n );\n }\n }\n sequence._mdf = _mdf;\n },\n processSequences: function(isFirstFrame) {\n var i;\n var len = this.sequenceList.length;\n for (i = 0; i < len; i += 1) {\n this.processSequence(this.sequenceList[i], isFirstFrame);\n }\n },\n getNewKey: function() {\n this.transform_key_count += 1;\n return \"_\" + this.transform_key_count;\n }\n };\n function CVEffects() {\n }\n CVEffects.prototype.renderFrame = function() {\n };\n function CVMaskElement(data, element) {\n this.data = data;\n this.element = element;\n this.masksProperties = this.data.masksProperties || [];\n this.viewData = createSizedArray(this.masksProperties.length);\n var i;\n var len = this.masksProperties.length;\n var hasMasks = false;\n for (i = 0; i < len; i += 1) {\n if (this.masksProperties[i].mode !== \"n\") {\n hasMasks = true;\n }\n this.viewData[i] = ShapePropertyFactory.getShapeProp(this.element, this.masksProperties[i], 3);\n }\n this.hasMasks = hasMasks;\n if (hasMasks) {\n this.element.addRenderableComponent(this);\n }\n }\n CVMaskElement.prototype.renderFrame = function() {\n if (!this.hasMasks) {\n return;\n }\n var transform = this.element.finalTransform.mat;\n var ctx = this.element.canvasContext;\n var i;\n var len = this.masksProperties.length;\n var pt;\n var pts;\n var data;\n ctx.beginPath();\n for (i = 0; i < len; i += 1) {\n if (this.masksProperties[i].mode !== \"n\") {\n if (this.masksProperties[i].inv) {\n ctx.moveTo(0, 0);\n ctx.lineTo(this.element.globalData.compSize.w, 0);\n ctx.lineTo(this.element.globalData.compSize.w, this.element.globalData.compSize.h);\n ctx.lineTo(0, this.element.globalData.compSize.h);\n ctx.lineTo(0, 0);\n }\n data = this.viewData[i].v;\n pt = transform.applyToPointArray(data.v[0][0], data.v[0][1], 0);\n ctx.moveTo(pt[0], pt[1]);\n var j;\n var jLen = data._length;\n for (j = 1; j < jLen; j += 1) {\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[j], data.v[j]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n pts = transform.applyToTriplePoints(data.o[j - 1], data.i[0], data.v[0]);\n ctx.bezierCurveTo(pts[0], pts[1], pts[2], pts[3], pts[4], pts[5]);\n }\n }\n this.element.globalData.renderer.save(true);\n ctx.clip();\n };\n CVMaskElement.prototype.getMaskProperty = MaskElement.prototype.getMaskProperty;\n CVMaskElement.prototype.destroy = function() {\n this.element = null;\n };\n function CVBaseElement() {\n }\n CVBaseElement.prototype = {\n createElements: function() {\n },\n initRendererElement: function() {\n },\n createContainerElements: function() {\n this.canvasContext = this.globalData.canvasContext;\n this.renderableEffectsManager = new CVEffects();\n },\n createContent: function() {\n },\n setBlendMode: function() {\n var globalData = this.globalData;\n if (globalData.blendMode !== this.data.bm) {\n globalData.blendMode = this.data.bm;\n var blendModeValue = getBlendMode(this.data.bm);\n globalData.canvasContext.globalCompositeOperation = blendModeValue;\n }\n },\n createRenderableComponents: function() {\n this.maskManager = new CVMaskElement(this.data, this);\n },\n hideElement: function() {\n if (!this.hidden && (!this.isInRange || this.isTransparent)) {\n this.hidden = true;\n }\n },\n showElement: function() {\n if (this.isInRange && !this.isTransparent) {\n this.hidden = false;\n this._isFirstFrame = true;\n this.maskManager._isFirstFrame = true;\n }\n },\n renderFrame: function() {\n if (this.hidden || this.data.hd) {\n return;\n }\n this.renderTransform();\n this.renderRenderable();\n this.setBlendMode();\n var forceRealStack = this.data.ty === 0;\n this.globalData.renderer.save(forceRealStack);\n this.globalData.renderer.ctxTransform(this.finalTransform.mat.props);\n this.globalData.renderer.ctxOpacity(this.finalTransform.mProp.o.v);\n this.renderInnerContent();\n this.globalData.renderer.restore(forceRealStack);\n if (this.maskManager.hasMasks) {\n this.globalData.renderer.restore(true);\n }\n if (this._isFirstFrame) {\n this._isFirstFrame = false;\n }\n },\n destroy: function() {\n this.canvasContext = null;\n this.data = null;\n this.globalData = null;\n this.maskManager.destroy();\n },\n mHelper: new Matrix()\n };\n CVBaseElement.prototype.hide = CVBaseElement.prototype.hideElement;\n CVBaseElement.prototype.show = CVBaseElement.prototype.showElement;\n function CVShapeData(element, data, styles, transformsManager) {\n this.styledShapes = [];\n this.tr = [0, 0, 0, 0, 0, 0];\n var ty = 4;\n if (data.ty === \"rc\") {\n ty = 5;\n } else if (data.ty === \"el\") {\n ty = 6;\n } else if (data.ty === \"sr\") {\n ty = 7;\n }\n this.sh = ShapePropertyFactory.getShapeProp(element, data, ty, element);\n var i;\n var len = styles.length;\n var styledShape;\n for (i = 0; i < len; i += 1) {\n if (!styles[i].closed) {\n styledShape = {\n transforms: transformsManager.addTransformSequence(styles[i].transforms),\n trNodes: []\n };\n this.styledShapes.push(styledShape);\n styles[i].elements.push(styledShape);\n }\n }\n }\n CVShapeData.prototype.setAsAnimated = SVGShapeData.prototype.setAsAnimated;\n function CVShapeElement(data, globalData, comp) {\n this.shapes = [];\n this.shapesData = data.shapes;\n this.stylesList = [];\n this.itemsData = [];\n this.prevViewData = [];\n this.shapeModifiers = [];\n this.processedElements = [];\n this.transformsManager = new ShapeTransformManager();\n this.initElement(data, globalData, comp);\n }\n extendPrototype(\n [BaseElement, TransformElement, CVBaseElement, IShapeElement, HierarchyElement, FrameElement, RenderableElement],\n CVShapeElement\n );\n CVShapeElement.prototype.initElement = RenderableDOMElement.prototype.initElement;\n CVShapeElement.prototype.transformHelper = { opacity: 1, _opMdf: false };\n CVShapeElement.prototype.dashResetter = [];\n CVShapeElement.prototype.createContent = function() {\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n };\n CVShapeElement.prototype.createStyleElement = function(data, transforms) {\n var styleElem = {\n data,\n type: data.ty,\n preTransforms: this.transformsManager.addTransformSequence(transforms),\n transforms: [],\n elements: [],\n closed: data.hd === true\n };\n var elementData = {};\n if (data.ty === \"fl\" || data.ty === \"st\") {\n elementData.c = PropertyFactory.getProp(this, data.c, 1, 255, this);\n if (!elementData.c.k) {\n styleElem.co = \"rgb(\" + bmFloor(elementData.c.v[0]) + \",\" + bmFloor(elementData.c.v[1]) + \",\" + bmFloor(elementData.c.v[2]) + \")\";\n }\n } else if (data.ty === \"gf\" || data.ty === \"gs\") {\n elementData.s = PropertyFactory.getProp(this, data.s, 1, null, this);\n elementData.e = PropertyFactory.getProp(this, data.e, 1, null, this);\n elementData.h = PropertyFactory.getProp(this, data.h || { k: 0 }, 0, 0.01, this);\n elementData.a = PropertyFactory.getProp(this, data.a || { k: 0 }, 0, degToRads, this);\n elementData.g = new GradientProperty(this, data.g, this);\n }\n elementData.o = PropertyFactory.getProp(this, data.o, 0, 0.01, this);\n if (data.ty === \"st\" || data.ty === \"gs\") {\n styleElem.lc = lineCapEnum[data.lc || 2];\n styleElem.lj = lineJoinEnum[data.lj || 2];\n if (data.lj == 1) {\n styleElem.ml = data.ml;\n }\n elementData.w = PropertyFactory.getProp(this, data.w, 0, null, this);\n if (!elementData.w.k) {\n styleElem.wi = elementData.w.v;\n }\n if (data.d) {\n var d = new DashProperty(this, data.d, \"canvas\", this);\n elementData.d = d;\n if (!elementData.d.k) {\n styleElem.da = elementData.d.dashArray;\n styleElem.do = elementData.d.dashoffset[0];\n }\n }\n } else {\n styleElem.r = data.r === 2 ? \"evenodd\" : \"nonzero\";\n }\n this.stylesList.push(styleElem);\n elementData.style = styleElem;\n return elementData;\n };\n CVShapeElement.prototype.createGroupElement = function() {\n var elementData = {\n it: [],\n prevViewData: []\n };\n return elementData;\n };\n CVShapeElement.prototype.createTransformElement = function(data) {\n var elementData = {\n transform: {\n opacity: 1,\n _opMdf: false,\n key: this.transformsManager.getNewKey(),\n op: PropertyFactory.getProp(this, data.o, 0, 0.01, this),\n mProps: TransformPropertyFactory.getTransformProperty(this, data, this)\n }\n };\n return elementData;\n };\n CVShapeElement.prototype.createShapeElement = function(data) {\n var elementData = new CVShapeData(this, data, this.stylesList, this.transformsManager);\n this.shapes.push(elementData);\n this.addShapeToModifiers(elementData);\n return elementData;\n };\n CVShapeElement.prototype.reloadShapes = function() {\n this._isFirstFrame = true;\n var i;\n var len = this.itemsData.length;\n for (i = 0; i < len; i += 1) {\n this.prevViewData[i] = this.itemsData[i];\n }\n this.searchShapes(this.shapesData, this.itemsData, this.prevViewData, true, []);\n len = this.dynamicProperties.length;\n for (i = 0; i < len; i += 1) {\n this.dynamicProperties[i].getValue();\n }\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n };\n CVShapeElement.prototype.addTransformToStyleList = function(transform) {\n var i;\n var len = this.stylesList.length;\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.push(transform);\n }\n }\n };\n CVShapeElement.prototype.removeTransformFromStyleList = function() {\n var i;\n var len = this.stylesList.length;\n for (i = 0; i < len; i += 1) {\n if (!this.stylesList[i].closed) {\n this.stylesList[i].transforms.pop();\n }\n }\n };\n CVShapeElement.prototype.closeStyles = function(styles) {\n var i;\n var len = styles.length;\n for (i = 0; i < len; i += 1) {\n styles[i].closed = true;\n }\n };\n CVShapeElement.prototype.searchShapes = function(arr, itemsData, prevViewData, shouldRender, transforms) {\n var i;\n var len = arr.length - 1;\n var j;\n var jLen;\n var ownStyles = [];\n var ownModifiers = [];\n var processedPos;\n var modifier;\n var currentTransform;\n var ownTransforms = [].concat(transforms);\n for (i = len; i >= 0; i -= 1) {\n processedPos = this.searchProcessedElement(arr[i]);\n if (!processedPos) {\n arr[i]._shouldRender = shouldRender;\n } else {\n itemsData[i] = prevViewData[processedPos - 1];\n }\n if (arr[i].ty === \"fl\" || arr[i].ty === \"st\" || arr[i].ty === \"gf\" || arr[i].ty === \"gs\") {\n if (!processedPos) {\n itemsData[i] = this.createStyleElement(arr[i], ownTransforms);\n } else {\n itemsData[i].style.closed = false;\n }\n ownStyles.push(itemsData[i].style);\n } else if (arr[i].ty === \"gr\") {\n if (!processedPos) {\n itemsData[i] = this.createGroupElement(arr[i]);\n } else {\n jLen = itemsData[i].it.length;\n for (j = 0; j < jLen; j += 1) {\n itemsData[i].prevViewData[j] = itemsData[i].it[j];\n }\n }\n this.searchShapes(arr[i].it, itemsData[i].it, itemsData[i].prevViewData, shouldRender, ownTransforms);\n } else if (arr[i].ty === \"tr\") {\n if (!processedPos) {\n currentTransform = this.createTransformElement(arr[i]);\n itemsData[i] = currentTransform;\n }\n ownTransforms.push(itemsData[i]);\n this.addTransformToStyleList(itemsData[i]);\n } else if (arr[i].ty === \"sh\" || arr[i].ty === \"rc\" || arr[i].ty === \"el\" || arr[i].ty === \"sr\") {\n if (!processedPos) {\n itemsData[i] = this.createShapeElement(arr[i]);\n }\n } else if (arr[i].ty === \"tm\" || arr[i].ty === \"rd\" || arr[i].ty === \"pb\") {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n modifier.init(this, arr[i]);\n itemsData[i] = modifier;\n this.shapeModifiers.push(modifier);\n } else {\n modifier = itemsData[i];\n modifier.closed = false;\n }\n ownModifiers.push(modifier);\n } else if (arr[i].ty === \"rp\") {\n if (!processedPos) {\n modifier = ShapeModifiers.getModifier(arr[i].ty);\n itemsData[i] = modifier;\n modifier.init(this, arr, i, itemsData);\n this.shapeModifiers.push(modifier);\n shouldRender = false;\n } else {\n modifier = itemsData[i];\n modifier.closed = true;\n }\n ownModifiers.push(modifier);\n }\n this.addProcessedElement(arr[i], i + 1);\n }\n this.removeTransformFromStyleList();\n this.closeStyles(ownStyles);\n len = ownModifiers.length;\n for (i = 0; i < len; i += 1) {\n ownModifiers[i].closed = true;\n }\n };\n CVShapeElement.prototype.renderInnerContent = function() {\n this.transformHelper.opacity = 1;\n this.transformHelper._opMdf = false;\n this.renderModifiers();\n this.transformsManager.processSequences(this._isFirstFrame);\n this.renderShape(this.transformHelper, this.shapesData, this.itemsData, true);\n };\n CVShapeElement.prototype.renderShapeTransform = function(parentTransform, groupTransform) {\n if (parentTransform._opMdf || groupTransform.op._mdf || this._isFirstFrame) {\n groupTransform.opacity = parentTransform.opacity;\n groupTransform.opacity *= groupTransform.op.v;\n groupTransform._opMdf = true;\n }\n };\n CVShapeElement.prototype.drawLayer = function() {\n var i;\n var len = this.stylesList.length;\n var j;\n var jLen;\n var k;\n var kLen;\n var elems;\n var nodes;\n var renderer = this.globalData.renderer;\n var ctx = this.globalData.canvasContext;\n var type;\n var currentStyle;\n for (i = 0; i < len; i += 1) {\n currentStyle = this.stylesList[i];\n type = currentStyle.type;\n if (!((type === \"st\" || type === \"gs\") && currentStyle.wi === 0 || !currentStyle.data._shouldRender || currentStyle.coOp === 0 || this.globalData.currentGlobalAlpha === 0)) {\n renderer.save();\n elems = currentStyle.elements;\n if (type === \"st\" || type === \"gs\") {\n ctx.strokeStyle = type === \"st\" ? currentStyle.co : currentStyle.grd;\n ctx.lineWidth = currentStyle.wi;\n ctx.lineCap = currentStyle.lc;\n ctx.lineJoin = currentStyle.lj;\n ctx.miterLimit = currentStyle.ml || 0;\n } else {\n ctx.fillStyle = type === \"fl\" ? currentStyle.co : currentStyle.grd;\n }\n renderer.ctxOpacity(currentStyle.coOp);\n if (type !== \"st\" && type !== \"gs\") {\n ctx.beginPath();\n }\n renderer.ctxTransform(currentStyle.preTransforms.finalTransform.props);\n jLen = elems.length;\n for (j = 0; j < jLen; j += 1) {\n if (type === \"st\" || type === \"gs\") {\n ctx.beginPath();\n if (currentStyle.da) {\n ctx.setLineDash(currentStyle.da);\n ctx.lineDashOffset = currentStyle.do;\n }\n }\n nodes = elems[j].trNodes;\n kLen = nodes.length;\n for (k = 0; k < kLen; k += 1) {\n if (nodes[k].t === \"m\") {\n ctx.moveTo(nodes[k].p[0], nodes[k].p[1]);\n } else if (nodes[k].t === \"c\") {\n ctx.bezierCurveTo(\n nodes[k].pts[0],\n nodes[k].pts[1],\n nodes[k].pts[2],\n nodes[k].pts[3],\n nodes[k].pts[4],\n nodes[k].pts[5]\n );\n } else {\n ctx.closePath();\n }\n }\n if (type === \"st\" || type === \"gs\") {\n ctx.stroke();\n if (currentStyle.da) {\n ctx.setLineDash(this.dashResetter);\n }\n }\n }\n if (type !== \"st\" && type !== \"gs\") {\n ctx.fill(currentStyle.r);\n }\n renderer.restore();\n }\n }\n };\n CVShapeElement.prototype.renderShape = function(parentTransform, items, data, isMain) {\n var i;\n var len = items.length - 1;\n var groupTransform;\n groupTransform = parentTransform;\n for (i = len; i >= 0; i -= 1) {\n if (items[i].ty === \"tr\") {\n groupTransform = data[i].transform;\n this.renderShapeTransform(parentTransform, groupTransform);\n } else if (items[i].ty === \"sh\" || items[i].ty === \"el\" || items[i].ty === \"rc\" || items[i].ty === \"sr\") {\n this.renderPath(items[i], data[i]);\n } else if (items[i].ty === \"fl\") {\n this.renderFill(items[i], data[i], groupTransform);\n } else if (items[i].ty === \"st\") {\n this.renderStroke(items[i], data[i], groupTransform);\n } else if (items[i].ty === \"gf\" || items[i].ty === \"gs\") {\n this.renderGradientFill(items[i], data[i], groupTransform);\n } else if (items[i].ty === \"gr\") {\n this.renderShape(groupTransform, items[i].it, data[i].it);\n } else if (items[i].ty === \"tm\")\n ;\n }\n if (isMain) {\n this.drawLayer();\n }\n };\n CVShapeElement.prototype.renderStyledShape = function(styledShape, shape) {\n if (this._isFirstFrame || shape._mdf || styledShape.transforms._mdf) {\n var shapeNodes = styledShape.trNodes;\n var paths = shape.paths;\n var i;\n var len;\n var j;\n var jLen = paths._length;\n shapeNodes.length = 0;\n var groupTransformMat = styledShape.transforms.finalTransform;\n for (j = 0; j < jLen; j += 1) {\n var pathNodes = paths.shapes[j];\n if (pathNodes && pathNodes.v) {\n len = pathNodes._length;\n for (i = 1; i < len; i += 1) {\n if (i === 1) {\n shapeNodes.push({\n t: \"m\",\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n shapeNodes.push({\n t: \"c\",\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[i], pathNodes.v[i])\n });\n }\n if (len === 1) {\n shapeNodes.push({\n t: \"m\",\n p: groupTransformMat.applyToPointArray(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n });\n }\n if (pathNodes.c && len) {\n shapeNodes.push({\n t: \"c\",\n pts: groupTransformMat.applyToTriplePoints(pathNodes.o[i - 1], pathNodes.i[0], pathNodes.v[0])\n });\n shapeNodes.push({\n t: \"z\"\n });\n }\n }\n }\n styledShape.trNodes = shapeNodes;\n }\n };\n CVShapeElement.prototype.renderPath = function(pathData, itemData) {\n if (pathData.hd !== true && pathData._shouldRender) {\n var i;\n var len = itemData.styledShapes.length;\n for (i = 0; i < len; i += 1) {\n this.renderStyledShape(itemData.styledShapes[i], itemData.sh);\n }\n }\n };\n CVShapeElement.prototype.renderFill = function(styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = \"rgb(\" + bmFloor(itemData.c.v[0]) + \",\" + bmFloor(itemData.c.v[1]) + \",\" + bmFloor(itemData.c.v[2]) + \")\";\n }\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n };\n CVShapeElement.prototype.renderGradientFill = function(styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var grd;\n if (!styleElem.grd || itemData.g._mdf || itemData.s._mdf || itemData.e._mdf || styleData.t !== 1 && (itemData.h._mdf || itemData.a._mdf)) {\n var ctx = this.globalData.canvasContext;\n var pt1 = itemData.s.v;\n var pt2 = itemData.e.v;\n if (styleData.t === 1) {\n grd = ctx.createLinearGradient(pt1[0], pt1[1], pt2[0], pt2[1]);\n } else {\n var rad = Math.sqrt(Math.pow(pt1[0] - pt2[0], 2) + Math.pow(pt1[1] - pt2[1], 2));\n var ang = Math.atan2(pt2[1] - pt1[1], pt2[0] - pt1[0]);\n var percent = itemData.h.v;\n if (percent >= 1) {\n percent = 0.99;\n } else if (percent <= -1) {\n percent = -0.99;\n }\n var dist = rad * percent;\n var x = Math.cos(ang + itemData.a.v) * dist + pt1[0];\n var y = Math.sin(ang + itemData.a.v) * dist + pt1[1];\n grd = ctx.createRadialGradient(x, y, 0, pt1[0], pt1[1], rad);\n }\n var i;\n var len = styleData.g.p;\n var cValues = itemData.g.c;\n var opacity = 1;\n for (i = 0; i < len; i += 1) {\n if (itemData.g._hasOpacity && itemData.g._collapsable) {\n opacity = itemData.g.o[i * 2 + 1];\n }\n grd.addColorStop(\n cValues[i * 4] / 100,\n \"rgba(\" + cValues[i * 4 + 1] + \",\" + cValues[i * 4 + 2] + \",\" + cValues[i * 4 + 3] + \",\" + opacity + \")\"\n );\n }\n styleElem.grd = grd;\n }\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n };\n CVShapeElement.prototype.renderStroke = function(styleData, itemData, groupTransform) {\n var styleElem = itemData.style;\n var d = itemData.d;\n if (d && (d._mdf || this._isFirstFrame)) {\n styleElem.da = d.dashArray;\n styleElem.do = d.dashoffset[0];\n }\n if (itemData.c._mdf || this._isFirstFrame) {\n styleElem.co = \"rgb(\" + bmFloor(itemData.c.v[0]) + \",\" + bmFloor(itemData.c.v[1]) + \",\" + bmFloor(itemData.c.v[2]) + \")\";\n }\n if (itemData.o._mdf || groupTransform._opMdf || this._isFirstFrame) {\n styleElem.coOp = itemData.o.v * groupTransform.opacity;\n }\n if (itemData.w._mdf || this._isFirstFrame) {\n styleElem.wi = itemData.w.v;\n }\n };\n CVShapeElement.prototype.destroy = function() {\n this.shapesData = null;\n this.globalData = null;\n this.canvasContext = null;\n this.stylesList.length = 0;\n this.itemsData.length = 0;\n };\n function CVTextElement(data, globalData, comp) {\n this.textSpans = [];\n this.yOffset = 0;\n this.fillColorAnim = false;\n this.strokeColorAnim = false;\n this.strokeWidthAnim = false;\n this.stroke = false;\n this.fill = false;\n this.justifyOffset = 0;\n this.currentRender = null;\n this.renderType = \"canvas\";\n this.values = {\n fill: \"rgba(0,0,0,0)\",\n stroke: \"rgba(0,0,0,0)\",\n sWidth: 0,\n fValue: \"\"\n };\n this.initElement(data, globalData, comp);\n }\n extendPrototype(\n [BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement, ITextElement],\n CVTextElement\n );\n CVTextElement.prototype.tHelper = createTag(\"canvas\").getContext(\"2d\");\n CVTextElement.prototype.buildNewText = function() {\n var documentData = this.textProperty.currentData;\n this.renderedLetters = createSizedArray(documentData.l ? documentData.l.length : 0);\n var hasFill = false;\n if (documentData.fc) {\n hasFill = true;\n this.values.fill = this.buildColor(documentData.fc);\n } else {\n this.values.fill = \"rgba(0,0,0,0)\";\n }\n this.fill = hasFill;\n var hasStroke = false;\n if (documentData.sc) {\n hasStroke = true;\n this.values.stroke = this.buildColor(documentData.sc);\n this.values.sWidth = documentData.sw;\n }\n var fontData = this.globalData.fontManager.getFontByName(documentData.f);\n var i;\n var len;\n var letters = documentData.l;\n var matrixHelper = this.mHelper;\n this.stroke = hasStroke;\n this.values.fValue = documentData.finalSize + \"px \" + this.globalData.fontManager.getFontByName(documentData.f).fFamily;\n len = documentData.finalText.length;\n var charData;\n var shapeData;\n var k;\n var kLen;\n var shapes;\n var j;\n var jLen;\n var pathNodes;\n var commands;\n var pathArr;\n var singleShape = this.data.singleShape;\n var trackingOffset = documentData.tr * 1e-3 * documentData.finalSize;\n var xPos = 0;\n var yPos = 0;\n var firstLine = true;\n var cnt = 0;\n for (i = 0; i < len; i += 1) {\n charData = this.globalData.fontManager.getCharData(\n documentData.finalText[i],\n fontData.fStyle,\n this.globalData.fontManager.getFontByName(documentData.f).fFamily\n );\n shapeData = charData && charData.data || {};\n matrixHelper.reset();\n if (singleShape && letters[i].n) {\n xPos = -trackingOffset;\n yPos += documentData.yOffset;\n yPos += firstLine ? 1 : 0;\n firstLine = false;\n }\n shapes = shapeData.shapes ? shapeData.shapes[0].it : [];\n jLen = shapes.length;\n matrixHelper.scale(documentData.finalSize / 100, documentData.finalSize / 100);\n if (singleShape) {\n this.applyTextPropertiesToMatrix(documentData, matrixHelper, letters[i].line, xPos, yPos);\n }\n commands = createSizedArray(jLen - 1);\n var commandsCounter = 0;\n for (j = 0; j < jLen; j += 1) {\n if (shapes[j].ty === \"sh\") {\n kLen = shapes[j].ks.k.i.length;\n pathNodes = shapes[j].ks.k;\n pathArr = [];\n for (k = 1; k < kLen; k += 1) {\n if (k === 1) {\n pathArr.push(\n matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0),\n matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n );\n }\n pathArr.push(\n matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0),\n matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0),\n matrixHelper.applyToX(pathNodes.i[k][0], pathNodes.i[k][1], 0),\n matrixHelper.applyToY(pathNodes.i[k][0], pathNodes.i[k][1], 0),\n matrixHelper.applyToX(pathNodes.v[k][0], pathNodes.v[k][1], 0),\n matrixHelper.applyToY(pathNodes.v[k][0], pathNodes.v[k][1], 0)\n );\n }\n pathArr.push(\n matrixHelper.applyToX(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0),\n matrixHelper.applyToY(pathNodes.o[k - 1][0], pathNodes.o[k - 1][1], 0),\n matrixHelper.applyToX(pathNodes.i[0][0], pathNodes.i[0][1], 0),\n matrixHelper.applyToY(pathNodes.i[0][0], pathNodes.i[0][1], 0),\n matrixHelper.applyToX(pathNodes.v[0][0], pathNodes.v[0][1], 0),\n matrixHelper.applyToY(pathNodes.v[0][0], pathNodes.v[0][1], 0)\n );\n commands[commandsCounter] = pathArr;\n commandsCounter += 1;\n }\n }\n if (singleShape) {\n xPos += letters[i].l;\n xPos += trackingOffset;\n }\n if (this.textSpans[cnt]) {\n this.textSpans[cnt].elem = commands;\n } else {\n this.textSpans[cnt] = { elem: commands };\n }\n cnt += 1;\n }\n };\n CVTextElement.prototype.renderInnerContent = function() {\n var ctx = this.canvasContext;\n ctx.font = this.values.fValue;\n ctx.lineCap = \"butt\";\n ctx.lineJoin = \"miter\";\n ctx.miterLimit = 4;\n if (!this.data.singleShape) {\n this.textAnimator.getMeasures(this.textProperty.currentData, this.lettersChangedFlag);\n }\n var i;\n var len;\n var j;\n var jLen;\n var k;\n var kLen;\n var renderedLetters = this.textAnimator.renderedLetters;\n var letters = this.textProperty.currentData.l;\n len = letters.length;\n var renderedLetter;\n var lastFill = null;\n var lastStroke = null;\n var lastStrokeW = null;\n var commands;\n var pathArr;\n for (i = 0; i < len; i += 1) {\n if (!letters[i].n) {\n renderedLetter = renderedLetters[i];\n if (renderedLetter) {\n this.globalData.renderer.save();\n this.globalData.renderer.ctxTransform(renderedLetter.p);\n this.globalData.renderer.ctxOpacity(renderedLetter.o);\n }\n if (this.fill) {\n if (renderedLetter && renderedLetter.fc) {\n if (lastFill !== renderedLetter.fc) {\n lastFill = renderedLetter.fc;\n ctx.fillStyle = renderedLetter.fc;\n }\n } else if (lastFill !== this.values.fill) {\n lastFill = this.values.fill;\n ctx.fillStyle = this.values.fill;\n }\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(\n pathArr[k],\n pathArr[k + 1],\n pathArr[k + 2],\n pathArr[k + 3],\n pathArr[k + 4],\n pathArr[k + 5]\n );\n }\n }\n this.globalData.canvasContext.closePath();\n this.globalData.canvasContext.fill();\n }\n if (this.stroke) {\n if (renderedLetter && renderedLetter.sw) {\n if (lastStrokeW !== renderedLetter.sw) {\n lastStrokeW = renderedLetter.sw;\n ctx.lineWidth = renderedLetter.sw;\n }\n } else if (lastStrokeW !== this.values.sWidth) {\n lastStrokeW = this.values.sWidth;\n ctx.lineWidth = this.values.sWidth;\n }\n if (renderedLetter && renderedLetter.sc) {\n if (lastStroke !== renderedLetter.sc) {\n lastStroke = renderedLetter.sc;\n ctx.strokeStyle = renderedLetter.sc;\n }\n } else if (lastStroke !== this.values.stroke) {\n lastStroke = this.values.stroke;\n ctx.strokeStyle = this.values.stroke;\n }\n commands = this.textSpans[i].elem;\n jLen = commands.length;\n this.globalData.canvasContext.beginPath();\n for (j = 0; j < jLen; j += 1) {\n pathArr = commands[j];\n kLen = pathArr.length;\n this.globalData.canvasContext.moveTo(pathArr[0], pathArr[1]);\n for (k = 2; k < kLen; k += 6) {\n this.globalData.canvasContext.bezierCurveTo(\n pathArr[k],\n pathArr[k + 1],\n pathArr[k + 2],\n pathArr[k + 3],\n pathArr[k + 4],\n pathArr[k + 5]\n );\n }\n }\n this.globalData.canvasContext.closePath();\n this.globalData.canvasContext.stroke();\n }\n if (renderedLetter) {\n this.globalData.renderer.restore();\n }\n }\n }\n };\n function CVImageElement(data, globalData, comp) {\n this.assetData = globalData.getAssetData(data.refId);\n this.img = globalData.imageLoader.getAsset(this.assetData);\n this.initElement(data, globalData, comp);\n }\n extendPrototype(\n [BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement],\n CVImageElement\n );\n CVImageElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVImageElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n CVImageElement.prototype.createContent = function() {\n if (this.img.width && (this.assetData.w !== this.img.width || this.assetData.h !== this.img.height)) {\n var canvas = createTag(\"canvas\");\n canvas.width = this.assetData.w;\n canvas.height = this.assetData.h;\n var ctx = canvas.getContext(\"2d\");\n var imgW = this.img.width;\n var imgH = this.img.height;\n var imgRel = imgW / imgH;\n var canvasRel = this.assetData.w / this.assetData.h;\n var widthCrop;\n var heightCrop;\n var par = this.assetData.pr || this.globalData.renderConfig.imagePreserveAspectRatio;\n if (imgRel > canvasRel && par === \"xMidYMid slice\" || imgRel < canvasRel && par !== \"xMidYMid slice\") {\n heightCrop = imgH;\n widthCrop = heightCrop * canvasRel;\n } else {\n widthCrop = imgW;\n heightCrop = widthCrop / canvasRel;\n }\n ctx.drawImage(\n this.img,\n (imgW - widthCrop) / 2,\n (imgH - heightCrop) / 2,\n widthCrop,\n heightCrop,\n 0,\n 0,\n this.assetData.w,\n this.assetData.h\n );\n this.img = canvas;\n }\n };\n CVImageElement.prototype.renderInnerContent = function() {\n this.canvasContext.drawImage(this.img, 0, 0);\n };\n CVImageElement.prototype.destroy = function() {\n this.img = null;\n };\n function CVSolidElement(data, globalData, comp) {\n this.initElement(data, globalData, comp);\n }\n extendPrototype(\n [BaseElement, TransformElement, CVBaseElement, HierarchyElement, FrameElement, RenderableElement],\n CVSolidElement\n );\n CVSolidElement.prototype.initElement = SVGShapeElement.prototype.initElement;\n CVSolidElement.prototype.prepareFrame = IImageElement.prototype.prepareFrame;\n CVSolidElement.prototype.renderInnerContent = function() {\n var ctx = this.canvasContext;\n ctx.fillStyle = this.data.sc;\n ctx.fillRect(0, 0, this.data.sw, this.data.sh);\n };\n function CanvasRendererBase(animationItem, config) {\n this.animationItem = animationItem;\n this.renderConfig = {\n clearCanvas: config && config.clearCanvas !== void 0 ? config.clearCanvas : true,\n context: config && config.context || null,\n progressiveLoad: config && config.progressiveLoad || false,\n preserveAspectRatio: config && config.preserveAspectRatio || \"xMidYMid meet\",\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || \"xMidYMid slice\",\n contentVisibility: config && config.contentVisibility || \"visible\",\n className: config && config.className || \"\",\n id: config && config.id || \"\"\n };\n this.renderConfig.dpr = config && config.dpr || 1;\n if (this.animationItem.wrapper) {\n this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n }\n this.renderedFrame = -1;\n this.globalData = {\n frameNum: -1,\n _mdf: false,\n renderConfig: this.renderConfig,\n currentGlobalAlpha: -1\n };\n this.contextData = new CVContextData();\n this.elements = [];\n this.pendingElements = [];\n this.transformMat = new Matrix();\n this.completeLayers = false;\n this.rendererType = \"canvas\";\n }\n extendPrototype([BaseRenderer], CanvasRendererBase);\n CanvasRendererBase.prototype.createShape = function(data) {\n return new CVShapeElement(data, this.globalData, this);\n };\n CanvasRendererBase.prototype.createText = function(data) {\n return new CVTextElement(data, this.globalData, this);\n };\n CanvasRendererBase.prototype.createImage = function(data) {\n return new CVImageElement(data, this.globalData, this);\n };\n CanvasRendererBase.prototype.createSolid = function(data) {\n return new CVSolidElement(data, this.globalData, this);\n };\n CanvasRendererBase.prototype.createNull = SVGRenderer.prototype.createNull;\n CanvasRendererBase.prototype.ctxTransform = function(props) {\n if (props[0] === 1 && props[1] === 0 && props[4] === 0 && props[5] === 1 && props[12] === 0 && props[13] === 0) {\n return;\n }\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.transform(props[0], props[1], props[4], props[5], props[12], props[13]);\n return;\n }\n this.transformMat.cloneFromProps(props);\n var cProps = this.contextData.cTr.props;\n this.transformMat.transform(\n cProps[0],\n cProps[1],\n cProps[2],\n cProps[3],\n cProps[4],\n cProps[5],\n cProps[6],\n cProps[7],\n cProps[8],\n cProps[9],\n cProps[10],\n cProps[11],\n cProps[12],\n cProps[13],\n cProps[14],\n cProps[15]\n );\n this.contextData.cTr.cloneFromProps(this.transformMat.props);\n var trProps = this.contextData.cTr.props;\n this.canvasContext.setTransform(trProps[0], trProps[1], trProps[4], trProps[5], trProps[12], trProps[13]);\n };\n CanvasRendererBase.prototype.ctxOpacity = function(op) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.globalAlpha *= op < 0 ? 0 : op;\n this.globalData.currentGlobalAlpha = this.contextData.cO;\n return;\n }\n this.contextData.cO *= op < 0 ? 0 : op;\n if (this.globalData.currentGlobalAlpha !== this.contextData.cO) {\n this.canvasContext.globalAlpha = this.contextData.cO;\n this.globalData.currentGlobalAlpha = this.contextData.cO;\n }\n };\n CanvasRendererBase.prototype.reset = function() {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n this.contextData.reset();\n };\n CanvasRendererBase.prototype.save = function(actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.save();\n return;\n }\n if (actionFlag) {\n this.canvasContext.save();\n }\n var props = this.contextData.cTr.props;\n if (this.contextData._length <= this.contextData.cArrPos) {\n this.contextData.duplicate();\n }\n var i;\n var arr = this.contextData.saved[this.contextData.cArrPos];\n for (i = 0; i < 16; i += 1) {\n arr[i] = props[i];\n }\n this.contextData.savedOp[this.contextData.cArrPos] = this.contextData.cO;\n this.contextData.cArrPos += 1;\n };\n CanvasRendererBase.prototype.restore = function(actionFlag) {\n if (!this.renderConfig.clearCanvas) {\n this.canvasContext.restore();\n return;\n }\n if (actionFlag) {\n this.canvasContext.restore();\n this.globalData.blendMode = \"source-over\";\n }\n this.contextData.cArrPos -= 1;\n var popped = this.contextData.saved[this.contextData.cArrPos];\n var i;\n var arr = this.contextData.cTr.props;\n for (i = 0; i < 16; i += 1) {\n arr[i] = popped[i];\n }\n this.canvasContext.setTransform(popped[0], popped[1], popped[4], popped[5], popped[12], popped[13]);\n popped = this.contextData.savedOp[this.contextData.cArrPos];\n this.contextData.cO = popped;\n if (this.globalData.currentGlobalAlpha !== popped) {\n this.canvasContext.globalAlpha = popped;\n this.globalData.currentGlobalAlpha = popped;\n }\n };\n CanvasRendererBase.prototype.configAnimation = function(animData) {\n if (this.animationItem.wrapper) {\n this.animationItem.container = createTag(\"canvas\");\n var containerStyle = this.animationItem.container.style;\n containerStyle.width = \"100%\";\n containerStyle.height = \"100%\";\n var origin = \"0px 0px 0px\";\n containerStyle.transformOrigin = origin;\n containerStyle.mozTransformOrigin = origin;\n containerStyle.webkitTransformOrigin = origin;\n containerStyle[\"-webkit-transform\"] = origin;\n containerStyle.contentVisibility = this.renderConfig.contentVisibility;\n this.animationItem.wrapper.appendChild(this.animationItem.container);\n this.canvasContext = this.animationItem.container.getContext(\"2d\");\n if (this.renderConfig.className) {\n this.animationItem.container.setAttribute(\"class\", this.renderConfig.className);\n }\n if (this.renderConfig.id) {\n this.animationItem.container.setAttribute(\"id\", this.renderConfig.id);\n }\n } else {\n this.canvasContext = this.renderConfig.context;\n }\n this.data = animData;\n this.layers = animData.layers;\n this.transformCanvas = {\n w: animData.w,\n h: animData.h,\n sx: 0,\n sy: 0,\n tx: 0,\n ty: 0\n };\n this.setupGlobalData(animData, document.body);\n this.globalData.canvasContext = this.canvasContext;\n this.globalData.renderer = this;\n this.globalData.isDashed = false;\n this.globalData.progressiveLoad = this.renderConfig.progressiveLoad;\n this.globalData.transformCanvas = this.transformCanvas;\n this.elements = createSizedArray(animData.layers.length);\n this.updateContainerSize();\n };\n CanvasRendererBase.prototype.updateContainerSize = function() {\n this.reset();\n var elementWidth;\n var elementHeight;\n if (this.animationItem.wrapper && this.animationItem.container) {\n elementWidth = this.animationItem.wrapper.offsetWidth;\n elementHeight = this.animationItem.wrapper.offsetHeight;\n this.animationItem.container.setAttribute(\"width\", elementWidth * this.renderConfig.dpr);\n this.animationItem.container.setAttribute(\"height\", elementHeight * this.renderConfig.dpr);\n } else {\n elementWidth = this.canvasContext.canvas.width * this.renderConfig.dpr;\n elementHeight = this.canvasContext.canvas.height * this.renderConfig.dpr;\n }\n var elementRel;\n var animationRel;\n if (this.renderConfig.preserveAspectRatio.indexOf(\"meet\") !== -1 || this.renderConfig.preserveAspectRatio.indexOf(\"slice\") !== -1) {\n var par = this.renderConfig.preserveAspectRatio.split(\" \");\n var fillType = par[1] || \"meet\";\n var pos = par[0] || \"xMidYMid\";\n var xPos = pos.substr(0, 4);\n var yPos = pos.substr(4);\n elementRel = elementWidth / elementHeight;\n animationRel = this.transformCanvas.w / this.transformCanvas.h;\n if (animationRel > elementRel && fillType === \"meet\" || animationRel < elementRel && fillType === \"slice\") {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n } else {\n this.transformCanvas.sx = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n }\n if (xPos === \"xMid\" && (animationRel < elementRel && fillType === \"meet\" || animationRel > elementRel && fillType === \"slice\")) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) / 2 * this.renderConfig.dpr;\n } else if (xPos === \"xMax\" && (animationRel < elementRel && fillType === \"meet\" || animationRel > elementRel && fillType === \"slice\")) {\n this.transformCanvas.tx = (elementWidth - this.transformCanvas.w * (elementHeight / this.transformCanvas.h)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.tx = 0;\n }\n if (yPos === \"YMid\" && (animationRel > elementRel && fillType === \"meet\" || animationRel < elementRel && fillType === \"slice\")) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) / 2 * this.renderConfig.dpr;\n } else if (yPos === \"YMax\" && (animationRel > elementRel && fillType === \"meet\" || animationRel < elementRel && fillType === \"slice\")) {\n this.transformCanvas.ty = (elementHeight - this.transformCanvas.h * (elementWidth / this.transformCanvas.w)) * this.renderConfig.dpr;\n } else {\n this.transformCanvas.ty = 0;\n }\n } else if (this.renderConfig.preserveAspectRatio === \"none\") {\n this.transformCanvas.sx = elementWidth / (this.transformCanvas.w / this.renderConfig.dpr);\n this.transformCanvas.sy = elementHeight / (this.transformCanvas.h / this.renderConfig.dpr);\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n } else {\n this.transformCanvas.sx = this.renderConfig.dpr;\n this.transformCanvas.sy = this.renderConfig.dpr;\n this.transformCanvas.tx = 0;\n this.transformCanvas.ty = 0;\n }\n this.transformCanvas.props = [\n this.transformCanvas.sx,\n 0,\n 0,\n 0,\n 0,\n this.transformCanvas.sy,\n 0,\n 0,\n 0,\n 0,\n 1,\n 0,\n this.transformCanvas.tx,\n this.transformCanvas.ty,\n 0,\n 1\n ];\n this.ctxTransform(this.transformCanvas.props);\n this.canvasContext.beginPath();\n this.canvasContext.rect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n this.canvasContext.closePath();\n this.canvasContext.clip();\n this.renderFrame(this.renderedFrame, true);\n };\n CanvasRendererBase.prototype.destroy = function() {\n if (this.renderConfig.clearCanvas && this.animationItem.wrapper) {\n this.animationItem.wrapper.innerText = \"\";\n }\n var i;\n var len = this.layers ? this.layers.length : 0;\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n this.elements.length = 0;\n this.globalData.canvasContext = null;\n this.animationItem.container = null;\n this.destroyed = true;\n };\n CanvasRendererBase.prototype.renderFrame = function(num, forceRender) {\n if (this.renderedFrame === num && this.renderConfig.clearCanvas === true && !forceRender || this.destroyed || num === -1) {\n return;\n }\n this.renderedFrame = num;\n this.globalData.frameNum = num - this.animationItem._isFirstFrame;\n this.globalData.frameId += 1;\n this.globalData._mdf = !this.renderConfig.clearCanvas || forceRender;\n this.globalData.projectInterface.currentFrame = num;\n var i;\n var len = this.layers.length;\n if (!this.completeLayers) {\n this.checkLayers(num);\n }\n for (i = 0; i < len; i += 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].prepareFrame(num - this.layers[i].st);\n }\n }\n if (this.globalData._mdf) {\n if (this.renderConfig.clearCanvas === true) {\n this.canvasContext.clearRect(0, 0, this.transformCanvas.w, this.transformCanvas.h);\n } else {\n this.save();\n }\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n if (this.renderConfig.clearCanvas !== true) {\n this.restore();\n }\n }\n };\n CanvasRendererBase.prototype.buildItem = function(pos) {\n var elements = this.elements;\n if (elements[pos] || this.layers[pos].ty === 99) {\n return;\n }\n var element = this.createItem(this.layers[pos], this, this.globalData);\n elements[pos] = element;\n element.initExpressions();\n };\n CanvasRendererBase.prototype.checkPendingElements = function() {\n while (this.pendingElements.length) {\n var element = this.pendingElements.pop();\n element.checkParenting();\n }\n };\n CanvasRendererBase.prototype.hide = function() {\n this.animationItem.container.style.display = \"none\";\n };\n CanvasRendererBase.prototype.show = function() {\n this.animationItem.container.style.display = \"block\";\n };\n function CVCompElement(data, globalData, comp) {\n this.completeLayers = false;\n this.layers = data.layers;\n this.pendingElements = [];\n this.elements = createSizedArray(this.layers.length);\n this.initElement(data, globalData, comp);\n this.tm = data.tm ? PropertyFactory.getProp(this, data.tm, 0, globalData.frameRate, this) : { _placeholder: true };\n }\n extendPrototype([CanvasRendererBase, ICompElement, CVBaseElement], CVCompElement);\n CVCompElement.prototype.renderInnerContent = function() {\n var ctx = this.canvasContext;\n ctx.beginPath();\n ctx.moveTo(0, 0);\n ctx.lineTo(this.data.w, 0);\n ctx.lineTo(this.data.w, this.data.h);\n ctx.lineTo(0, this.data.h);\n ctx.lineTo(0, 0);\n ctx.clip();\n var i;\n var len = this.layers.length;\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.completeLayers || this.elements[i]) {\n this.elements[i].renderFrame();\n }\n }\n };\n CVCompElement.prototype.destroy = function() {\n var i;\n var len = this.layers.length;\n for (i = len - 1; i >= 0; i -= 1) {\n if (this.elements[i]) {\n this.elements[i].destroy();\n }\n }\n this.layers = null;\n this.elements = null;\n };\n CVCompElement.prototype.createComp = function(data) {\n return new CVCompElement(data, this.globalData, this);\n };\n function CanvasRenderer(animationItem, config) {\n this.animationItem = animationItem;\n this.renderConfig = {\n clearCanvas: config && config.clearCanvas !== void 0 ? config.clearCanvas : true,\n context: config && config.context || null,\n progressiveLoad: config && config.progressiveLoad || false,\n preserveAspectRatio: config && config.preserveAspectRatio || \"xMidYMid meet\",\n imagePreserveAspectRatio: config && config.imagePreserveAspectRatio || \"xMidYMid slice\",\n contentVisibility: config && config.contentVisibility || \"visible\",\n className: config && config.className || \"\",\n id: config && config.id || \"\"\n };\n this.renderConfig.dpr = config && config.dpr || 1;\n if (this.animationItem.wrapper) {\n this.renderConfig.dpr = config && config.dpr || window.devicePixelRatio || 1;\n }\n this.renderedFrame = -1;\n this.globalData = {\n frameNum: -1,\n _mdf: false,\n renderConfig: this.renderConfig,\n currentGlobalAlpha: -1\n };\n this.contextData = new CVContextData();\n this.elements = [];\n this.pendingElements = [];\n this.transformMat = new Matrix();\n this.completeLayers = false;\n this.rendererType = \"canvas\";\n }\n extendPrototype([CanvasRendererBase], CanvasRenderer);\n CanvasRenderer.prototype.createComp = function(data) {\n return new CVCompElement(data, this.globalData, this);\n };\n registerRenderer(\"canvas\", CanvasRenderer);\n ShapeModifiers.registerModifier(\"tm\", TrimModifier);\n ShapeModifiers.registerModifier(\"pb\", PuckerAndBloatModifier);\n ShapeModifiers.registerModifier(\"rp\", RepeaterModifier);\n ShapeModifiers.registerModifier(\"rd\", RoundCornersModifier);\n const Expressions = function() {\n var ob = {};\n ob.initExpressions = initExpressions;\n function initExpressions(animation) {\n var stackCount = 0;\n var registers = [];\n function pushExpression() {\n stackCount += 1;\n }\n function popExpression() {\n stackCount -= 1;\n if (stackCount === 0) {\n releaseInstances();\n }\n }\n function registerExpressionProperty(expression) {\n if (registers.indexOf(expression) === -1) {\n registers.push(expression);\n }\n }\n function releaseInstances() {\n var i;\n var len = registers.length;\n for (i = 0; i < len; i += 1) {\n registers[i].release();\n }\n registers.length = 0;\n }\n animation.renderer.compInterface = CompExpressionInterface(animation.renderer);\n animation.renderer.globalData.projectInterface.registerComposition(animation.renderer);\n animation.renderer.globalData.pushExpression = pushExpression;\n animation.renderer.globalData.popExpression = popExpression;\n animation.renderer.globalData.registerExpressionProperty = registerExpressionProperty;\n }\n return ob;\n }();\n function seedRandom(pool, math) {\n var global = this, width = 256, chunks = 6, digits = 52, rngname = \"random\", startdenom = math.pow(width, chunks), significance = math.pow(2, digits), overflow = significance * 2, mask = width - 1, nodecrypto;\n function seedrandom(seed, options, callback) {\n var key = [];\n options = options === true ? { entropy: true } : options || {};\n var shortseed = mixkey(\n flatten(options.entropy ? [seed, tostring(pool)] : seed === null ? autoseed() : seed, 3),\n key\n );\n var arc4 = new ARC4(key);\n var prng = function() {\n var n = arc4.g(chunks), d = startdenom, x = 0;\n while (n < significance) {\n n = (n + x) * width;\n d *= width;\n x = arc4.g(1);\n }\n while (n >= overflow) {\n n /= 2;\n d /= 2;\n x >>>= 1;\n }\n return (n + x) / d;\n };\n prng.int32 = function() {\n return arc4.g(4) | 0;\n };\n prng.quick = function() {\n return arc4.g(4) / 4294967296;\n };\n prng.double = prng;\n mixkey(tostring(arc4.S), pool);\n return (options.pass || callback || function(prng2, seed2, is_math_call, state) {\n if (state) {\n if (state.S) {\n copy(state, arc4);\n }\n prng2.state = function() {\n return copy(arc4, {});\n };\n }\n if (is_math_call) {\n math[rngname] = prng2;\n return seed2;\n } else\n return prng2;\n })(prng, shortseed, \"global\" in options ? options.global : this == math, options.state);\n }\n math[\"seed\" + rngname] = seedrandom;\n function ARC4(key) {\n var t, keylen = key.length, me = this, i = 0, j = me.i = me.j = 0, s = me.S = [];\n if (!keylen) {\n key = [keylen++];\n }\n while (i < width) {\n s[i] = i++;\n }\n for (i = 0; i < width; i++) {\n s[i] = s[j = mask & j + key[i % keylen] + (t = s[i])];\n s[j] = t;\n }\n me.g = function(count) {\n var t2, r = 0, i2 = me.i, j2 = me.j, s2 = me.S;\n while (count--) {\n t2 = s2[i2 = mask & i2 + 1];\n r = r * width + s2[mask & (s2[i2] = s2[j2 = mask & j2 + t2]) + (s2[j2] = t2)];\n }\n me.i = i2;\n me.j = j2;\n return r;\n };\n }\n function copy(f, t) {\n t.i = f.i;\n t.j = f.j;\n t.S = f.S.slice();\n return t;\n }\n function flatten(obj, depth) {\n var result = [], typ = typeof obj, prop;\n if (depth && typ == \"object\") {\n for (prop in obj) {\n try {\n result.push(flatten(obj[prop], depth - 1));\n } catch (e) {\n }\n }\n }\n return result.length ? result : typ == \"string\" ? obj : obj + \"\\0\";\n }\n function mixkey(seed, key) {\n var stringseed = seed + \"\", smear, j = 0;\n while (j < stringseed.length) {\n key[mask & j] = mask & (smear ^= key[mask & j] * 19) + stringseed.charCodeAt(j++);\n }\n return tostring(key);\n }\n function autoseed() {\n try {\n if (nodecrypto)\n ;\n var out = new Uint8Array(width);\n (global.crypto || global.msCrypto).getRandomValues(out);\n return tostring(out);\n } catch (e) {\n var browser = global.navigator, plugins = browser && browser.plugins;\n return [+/* @__PURE__ */ new Date(), global, plugins, global.screen, tostring(pool)];\n }\n }\n function tostring(a) {\n return String.fromCharCode.apply(0, a);\n }\n mixkey(math.random(), pool);\n }\n function initialize$2(BMMath2) {\n seedRandom([], BMMath2);\n }\n const ExpressionManager = function() {\n var ob = {};\n var Math2 = BMMath;\n var window2 = null;\n var document2 = null;\n var XMLHttpRequest2 = null;\n var fetch = null;\n var frames = null;\n initialize$2(BMMath);\n function $bm_isInstanceOfArray(arr) {\n return arr.constructor === Array || arr.constructor === Float32Array;\n }\n function isNumerable(tOfV, v) {\n return tOfV === \"number\" || tOfV === \"boolean\" || tOfV === \"string\" || v instanceof Number;\n }\n function $bm_neg(a) {\n var tOfA = typeof a;\n if (tOfA === \"number\" || tOfA === \"boolean\" || a instanceof Number) {\n return -a;\n }\n if ($bm_isInstanceOfArray(a)) {\n var i;\n var lenA = a.length;\n var retArr = [];\n for (i = 0; i < lenA; i += 1) {\n retArr[i] = -a[i];\n }\n return retArr;\n }\n if (a.propType) {\n return a.v;\n }\n return -a;\n }\n BezierFactory.getBezierEasing(0.333, 0, 0.833, 0.833, \"easeIn\").get;\n BezierFactory.getBezierEasing(0.167, 0.167, 0.667, 1, \"easeOut\").get;\n BezierFactory.getBezierEasing(0.33, 0, 0.667, 1, \"easeInOut\").get;\n function sum(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n if (tOfA === \"string\" || tOfB === \"string\") {\n return a + b;\n }\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a + b;\n }\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] += b;\n return a;\n }\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a + b[0];\n return b;\n }\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0;\n var lenA = a.length;\n var lenB = b.length;\n var retArr = [];\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === \"number\" || a[i] instanceof Number) && (typeof b[i] === \"number\" || b[i] instanceof Number)) {\n retArr[i] = a[i] + b[i];\n } else {\n retArr[i] = b[i] === void 0 ? a[i] : a[i] || b[i];\n }\n i += 1;\n }\n return retArr;\n }\n return 0;\n }\n var add = sum;\n function sub(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n if (tOfA === \"string\") {\n a = parseInt(a, 10);\n }\n if (tOfB === \"string\") {\n b = parseInt(b, 10);\n }\n return a - b;\n }\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n a = a.slice(0);\n a[0] -= b;\n return a;\n }\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n b = b.slice(0);\n b[0] = a - b[0];\n return b;\n }\n if ($bm_isInstanceOfArray(a) && $bm_isInstanceOfArray(b)) {\n var i = 0;\n var lenA = a.length;\n var lenB = b.length;\n var retArr = [];\n while (i < lenA || i < lenB) {\n if ((typeof a[i] === \"number\" || a[i] instanceof Number) && (typeof b[i] === \"number\" || b[i] instanceof Number)) {\n retArr[i] = a[i] - b[i];\n } else {\n retArr[i] = b[i] === void 0 ? a[i] : a[i] || b[i];\n }\n i += 1;\n }\n return retArr;\n }\n return 0;\n }\n function mul(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n var arr;\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a * b;\n }\n var i;\n var len;\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray(\"float32\", len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] * b;\n }\n return arr;\n }\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray(\"float32\", len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a * b[i];\n }\n return arr;\n }\n return 0;\n }\n function div(a, b) {\n var tOfA = typeof a;\n var tOfB = typeof b;\n var arr;\n if (isNumerable(tOfA, a) && isNumerable(tOfB, b)) {\n return a / b;\n }\n var i;\n var len;\n if ($bm_isInstanceOfArray(a) && isNumerable(tOfB, b)) {\n len = a.length;\n arr = createTypedArray(\"float32\", len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a[i] / b;\n }\n return arr;\n }\n if (isNumerable(tOfA, a) && $bm_isInstanceOfArray(b)) {\n len = b.length;\n arr = createTypedArray(\"float32\", len);\n for (i = 0; i < len; i += 1) {\n arr[i] = a / b[i];\n }\n return arr;\n }\n return 0;\n }\n function mod(a, b) {\n if (typeof a === \"string\") {\n a = parseInt(a, 10);\n }\n if (typeof b === \"string\") {\n b = parseInt(b, 10);\n }\n return a % b;\n }\n var $bm_sum = sum;\n var $bm_sub = sub;\n var $bm_mul = mul;\n var $bm_div = div;\n var $bm_mod = mod;\n function clamp(num, min, max) {\n if (min > max) {\n var mm = max;\n max = min;\n min = mm;\n }\n return Math2.min(Math2.max(num, min), max);\n }\n function radiansToDegrees(val) {\n return val / degToRads;\n }\n var radians_to_degrees = radiansToDegrees;\n function degreesToRadians(val) {\n return val * degToRads;\n }\n var degrees_to_radians = radiansToDegrees;\n var helperLengthArray = [0, 0, 0, 0, 0, 0];\n function length(arr1, arr2) {\n if (typeof arr1 === \"number\" || arr1 instanceof Number) {\n arr2 = arr2 || 0;\n return Math2.abs(arr1 - arr2);\n }\n if (!arr2) {\n arr2 = helperLengthArray;\n }\n var i;\n var len = Math2.min(arr1.length, arr2.length);\n var addedLength = 0;\n for (i = 0; i < len; i += 1) {\n addedLength += Math2.pow(arr2[i] - arr1[i], 2);\n }\n return Math2.sqrt(addedLength);\n }\n function normalize(vec) {\n return div(vec, length(vec));\n }\n function rgbToHsl(val) {\n var r = val[0];\n var g = val[1];\n var b = val[2];\n var max = Math2.max(r, g, b);\n var min = Math2.min(r, g, b);\n var h;\n var s;\n var l = (max + min) / 2;\n if (max === min) {\n h = 0;\n s = 0;\n } else {\n var d = max - min;\n s = l > 0.5 ? d / (2 - max - min) : d / (max + min);\n switch (max) {\n case r:\n h = (g - b) / d + (g < b ? 6 : 0);\n break;\n case g:\n h = (b - r) / d + 2;\n break;\n case b:\n h = (r - g) / d + 4;\n break;\n }\n h /= 6;\n }\n return [h, s, l, val[3]];\n }\n function hue2rgb(p, q, t) {\n if (t < 0)\n t += 1;\n if (t > 1)\n t -= 1;\n if (t < 1 / 6)\n return p + (q - p) * 6 * t;\n if (t < 1 / 2)\n return q;\n if (t < 2 / 3)\n return p + (q - p) * (2 / 3 - t) * 6;\n return p;\n }\n function hslToRgb(val) {\n var h = val[0];\n var s = val[1];\n var l = val[2];\n var r;\n var g;\n var b;\n if (s === 0) {\n r = l;\n b = l;\n g = l;\n } else {\n var q = l < 0.5 ? l * (1 + s) : l + s - l * s;\n var p = 2 * l - q;\n r = hue2rgb(p, q, h + 1 / 3);\n g = hue2rgb(p, q, h);\n b = hue2rgb(p, q, h - 1 / 3);\n }\n return [r, g, b, val[3]];\n }\n function linear(t, tMin, tMax, value1, value2) {\n if (value1 === void 0 || value2 === void 0) {\n value1 = tMin;\n value2 = tMax;\n tMin = 0;\n tMax = 1;\n }\n if (tMax < tMin) {\n var _tMin = tMax;\n tMax = tMin;\n tMin = _tMin;\n }\n if (t <= tMin) {\n return value1;\n }\n if (t >= tMax) {\n return value2;\n }\n var perc = tMax === tMin ? 0 : (t - tMin) / (tMax - tMin);\n if (!value1.length) {\n return value1 + (value2 - value1) * perc;\n }\n var i;\n var len = value1.length;\n var arr = createTypedArray(\"float32\", len);\n for (i = 0; i < len; i += 1) {\n arr[i] = value1[i] + (value2[i] - value1[i]) * perc;\n }\n return arr;\n }\n function random(min, max) {\n if (max === void 0) {\n if (min === void 0) {\n min = 0;\n max = 1;\n } else {\n max = min;\n min = void 0;\n }\n }\n if (max.length) {\n var i;\n var len = max.length;\n if (!min) {\n min = createTypedArray(\"float32\", len);\n }\n var arr = createTypedArray(\"float32\", len);\n var rnd = BMMath.random();\n for (i = 0; i < len; i += 1) {\n arr[i] = min[i] + rnd * (max[i] - min[i]);\n }\n return arr;\n }\n if (min === void 0) {\n min = 0;\n }\n var rndm = BMMath.random();\n return min + rndm * (max - min);\n }\n function createPath(points, inTangents, outTangents, closed) {\n var i;\n var len = points.length;\n var path = shapePool.newElement();\n path.setPathData(!!closed, len);\n var arrPlaceholder = [0, 0];\n var inVertexPoint;\n var outVertexPoint;\n for (i = 0; i < len; i += 1) {\n inVertexPoint = inTangents && inTangents[i] ? inTangents[i] : arrPlaceholder;\n outVertexPoint = outTangents && outTangents[i] ? outTangents[i] : arrPlaceholder;\n path.setTripleAt(\n points[i][0],\n points[i][1],\n outVertexPoint[0] + points[i][0],\n outVertexPoint[1] + points[i][1],\n inVertexPoint[0] + points[i][0],\n inVertexPoint[1] + points[i][1],\n i,\n true\n );\n }\n return path;\n }\n function noOp(_value) {\n return _value;\n }\n function initiateExpression(elem, data, property) {\n return noOp;\n }\n ob.initiateExpression = initiateExpression;\n ob.__preventDeadCodeRemoval = [\n window2,\n document2,\n XMLHttpRequest2,\n fetch,\n frames,\n $bm_neg,\n add,\n $bm_sum,\n $bm_sub,\n $bm_mul,\n $bm_div,\n $bm_mod,\n clamp,\n radians_to_degrees,\n degreesToRadians,\n degrees_to_radians,\n normalize,\n rgbToHsl,\n hslToRgb,\n linear,\n random,\n createPath\n ];\n return ob;\n }();\n const expressionHelpers = function() {\n function searchExpressions(elem, data, prop) {\n if (data.x) {\n prop.k = true;\n prop.x = true;\n prop.initiateExpression = ExpressionManager.initiateExpression;\n prop.effectsSequence.push(prop.initiateExpression(elem, data, prop).bind(prop));\n }\n }\n function getValueAtTime(frameNum) {\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n if (frameNum !== this._cachingAtTime.lastFrame) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastFrame < frameNum ? this._cachingAtTime.lastIndex : 0;\n this._cachingAtTime.value = this.interpolateValue(frameNum, this._cachingAtTime);\n this._cachingAtTime.lastFrame = frameNum;\n }\n return this._cachingAtTime.value;\n }\n function getSpeedAtTime(frameNum) {\n var delta = -0.01;\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var speed = 0;\n if (v1.length) {\n var i;\n for (i = 0; i < v1.length; i += 1) {\n speed += Math.pow(v2[i] - v1[i], 2);\n }\n speed = Math.sqrt(speed) * 100;\n } else {\n speed = 0;\n }\n return speed;\n }\n function getVelocityAtTime(frameNum) {\n if (this.vel !== void 0) {\n return this.vel;\n }\n var delta = -1e-3;\n var v1 = this.getValueAtTime(frameNum);\n var v2 = this.getValueAtTime(frameNum + delta);\n var velocity;\n if (v1.length) {\n velocity = createTypedArray(\"float32\", v1.length);\n var i;\n for (i = 0; i < v1.length; i += 1) {\n velocity[i] = (v2[i] - v1[i]) / delta;\n }\n } else {\n velocity = (v2 - v1) / delta;\n }\n return velocity;\n }\n function getStaticValueAtTime() {\n return this.pv;\n }\n function setGroupProperty(propertyGroup) {\n this.propertyGroup = propertyGroup;\n }\n return {\n searchExpressions,\n getSpeedAtTime,\n getVelocityAtTime,\n getValueAtTime,\n getStaticValueAtTime,\n setGroupProperty\n };\n }();\n function addPropertyDecorator() {\n function loopOut(type, duration, durationFlag) {\n if (!this.k || !this.keyframes) {\n return this.pv;\n }\n type = type ? type.toLowerCase() : \"\";\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var lastKeyFrame = keyframes[keyframes.length - 1].t;\n if (currentFrame <= lastKeyFrame) {\n return this.pv;\n }\n var cycleDuration;\n var firstKeyFrame;\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n firstKeyFrame = keyframes[keyframes.length - 1 - duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, lastKeyFrame - this.elem.data.ip);\n } else {\n cycleDuration = Math.abs(lastKeyFrame - this.elem.comp.globalData.frameRate * duration);\n }\n firstKeyFrame = lastKeyFrame - cycleDuration;\n }\n var i;\n var len;\n var ret;\n if (type === \"pingpong\") {\n var iterations = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n if (iterations % 2 !== 0) {\n return this.getValueAtTime(\n (cycleDuration - (currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate,\n 0\n );\n }\n } else if (type === \"offset\") {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime(\n ((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate,\n 0\n );\n var repeats = Math.floor((currentFrame - firstKeyFrame) / cycleDuration);\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n for (i = 0; i < len; i += 1) {\n ret[i] = (endV[i] - initV[i]) * repeats + current[i];\n }\n return ret;\n }\n return (endV - initV) * repeats + current;\n } else if (type === \"continue\") {\n var lastValue = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var nextLastValue = this.getValueAtTime((lastKeyFrame - 1e-3) / this.comp.globalData.frameRate, 0);\n if (this.pv.length) {\n ret = new Array(lastValue.length);\n len = ret.length;\n for (i = 0; i < len; i += 1) {\n ret[i] = lastValue[i] + (lastValue[i] - nextLastValue[i]) * ((currentFrame - lastKeyFrame) / this.comp.globalData.frameRate) / 5e-4;\n }\n return ret;\n }\n return lastValue + (lastValue - nextLastValue) * ((currentFrame - lastKeyFrame) / 1e-3);\n }\n return this.getValueAtTime(\n ((currentFrame - firstKeyFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate,\n 0\n );\n }\n function loopIn(type, duration, durationFlag) {\n if (!this.k) {\n return this.pv;\n }\n type = type ? type.toLowerCase() : \"\";\n var currentFrame = this.comp.renderedFrame;\n var keyframes = this.keyframes;\n var firstKeyFrame = keyframes[0].t;\n if (currentFrame >= firstKeyFrame) {\n return this.pv;\n }\n var cycleDuration;\n var lastKeyFrame;\n if (!durationFlag) {\n if (!duration || duration > keyframes.length - 1) {\n duration = keyframes.length - 1;\n }\n lastKeyFrame = keyframes[duration].t;\n cycleDuration = lastKeyFrame - firstKeyFrame;\n } else {\n if (!duration) {\n cycleDuration = Math.max(0, this.elem.data.op - firstKeyFrame);\n } else {\n cycleDuration = Math.abs(this.elem.comp.globalData.frameRate * duration);\n }\n lastKeyFrame = firstKeyFrame + cycleDuration;\n }\n var i;\n var len;\n var ret;\n if (type === \"pingpong\") {\n var iterations = Math.floor((firstKeyFrame - currentFrame) / cycleDuration);\n if (iterations % 2 === 0) {\n return this.getValueAtTime(\n ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate,\n 0\n );\n }\n } else if (type === \"offset\") {\n var initV = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var endV = this.getValueAtTime(lastKeyFrame / this.comp.globalData.frameRate, 0);\n var current = this.getValueAtTime(\n (cycleDuration - (firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame) / this.comp.globalData.frameRate,\n 0\n );\n var repeats = Math.floor((firstKeyFrame - currentFrame) / cycleDuration) + 1;\n if (this.pv.length) {\n ret = new Array(initV.length);\n len = ret.length;\n for (i = 0; i < len; i += 1) {\n ret[i] = current[i] - (endV[i] - initV[i]) * repeats;\n }\n return ret;\n }\n return current - (endV - initV) * repeats;\n } else if (type === \"continue\") {\n var firstValue = this.getValueAtTime(firstKeyFrame / this.comp.globalData.frameRate, 0);\n var nextFirstValue = this.getValueAtTime((firstKeyFrame + 1e-3) / this.comp.globalData.frameRate, 0);\n if (this.pv.length) {\n ret = new Array(firstValue.length);\n len = ret.length;\n for (i = 0; i < len; i += 1) {\n ret[i] = firstValue[i] + (firstValue[i] - nextFirstValue[i]) * (firstKeyFrame - currentFrame) / 1e-3;\n }\n return ret;\n }\n return firstValue + (firstValue - nextFirstValue) * (firstKeyFrame - currentFrame) / 1e-3;\n }\n return this.getValueAtTime(\n (cycleDuration - ((firstKeyFrame - currentFrame) % cycleDuration + firstKeyFrame)) / this.comp.globalData.frameRate,\n 0\n );\n }\n function smooth(width, samples) {\n if (!this.k) {\n return this.pv;\n }\n width = (width || 0.4) * 0.5;\n samples = Math.floor(samples || 5);\n if (samples <= 1) {\n return this.pv;\n }\n var currentTime = this.comp.renderedFrame / this.comp.globalData.frameRate;\n var initFrame = currentTime - width;\n var endFrame = currentTime + width;\n var sampleFrequency = samples > 1 ? (endFrame - initFrame) / (samples - 1) : 1;\n var i = 0;\n var j = 0;\n var value;\n if (this.pv.length) {\n value = createTypedArray(\"float32\", this.pv.length);\n } else {\n value = 0;\n }\n var sampleValue;\n while (i < samples) {\n sampleValue = this.getValueAtTime(initFrame + i * sampleFrequency);\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] += sampleValue[j];\n }\n } else {\n value += sampleValue;\n }\n i += 1;\n }\n if (this.pv.length) {\n for (j = 0; j < this.pv.length; j += 1) {\n value[j] /= samples;\n }\n } else {\n value /= samples;\n }\n return value;\n }\n function getTransformValueAtTime(time) {\n if (!this._transformCachingAtTime) {\n this._transformCachingAtTime = {\n v: new Matrix()\n };\n }\n var matrix = this._transformCachingAtTime.v;\n matrix.cloneFromProps(this.pre.props);\n if (this.appliedTransformations < 1) {\n var anchor = this.a.getValueAtTime(time);\n matrix.translate(-anchor[0] * this.a.mult, -anchor[1] * this.a.mult, anchor[2] * this.a.mult);\n }\n if (this.appliedTransformations < 2) {\n var scale = this.s.getValueAtTime(time);\n matrix.scale(scale[0] * this.s.mult, scale[1] * this.s.mult, scale[2] * this.s.mult);\n }\n if (this.sk && this.appliedTransformations < 3) {\n var skew = this.sk.getValueAtTime(time);\n var skewAxis = this.sa.getValueAtTime(time);\n matrix.skewFromAxis(-skew * this.sk.mult, skewAxis * this.sa.mult);\n }\n if (this.r && this.appliedTransformations < 4) {\n var rotation = this.r.getValueAtTime(time);\n matrix.rotate(-rotation * this.r.mult);\n } else if (!this.r && this.appliedTransformations < 4) {\n var rotationZ = this.rz.getValueAtTime(time);\n var rotationY = this.ry.getValueAtTime(time);\n var rotationX = this.rx.getValueAtTime(time);\n var orientation = this.or.getValueAtTime(time);\n matrix.rotateZ(-rotationZ * this.rz.mult).rotateY(rotationY * this.ry.mult).rotateX(rotationX * this.rx.mult).rotateZ(-orientation[2] * this.or.mult).rotateY(orientation[1] * this.or.mult).rotateX(orientation[0] * this.or.mult);\n }\n if (this.data.p && this.data.p.s) {\n var positionX = this.px.getValueAtTime(time);\n var positionY = this.py.getValueAtTime(time);\n if (this.data.p.z) {\n var positionZ = this.pz.getValueAtTime(time);\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, -positionZ * this.pz.mult);\n } else {\n matrix.translate(positionX * this.px.mult, positionY * this.py.mult, 0);\n }\n } else {\n var position = this.p.getValueAtTime(time);\n matrix.translate(position[0] * this.p.mult, position[1] * this.p.mult, -position[2] * this.p.mult);\n }\n return matrix;\n }\n function getTransformStaticValueAtTime() {\n return this.v.clone(new Matrix());\n }\n var getTransformProperty = TransformPropertyFactory.getTransformProperty;\n TransformPropertyFactory.getTransformProperty = function(elem, data, container) {\n var prop = getTransformProperty(elem, data, container);\n if (prop.dynamicProperties.length) {\n prop.getValueAtTime = getTransformValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = getTransformStaticValueAtTime.bind(prop);\n }\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n return prop;\n };\n var propertyGetProp = PropertyFactory.getProp;\n PropertyFactory.getProp = function(elem, data, type, mult, container) {\n var prop = propertyGetProp(elem, data, type, mult, container);\n if (prop.kf) {\n prop.getValueAtTime = expressionHelpers.getValueAtTime.bind(prop);\n } else {\n prop.getValueAtTime = expressionHelpers.getStaticValueAtTime.bind(prop);\n }\n prop.setGroupProperty = expressionHelpers.setGroupProperty;\n prop.loopOut = loopOut;\n prop.loopIn = loopIn;\n prop.smooth = smooth;\n prop.getVelocityAtTime = expressionHelpers.getVelocityAtTime.bind(prop);\n prop.getSpeedAtTime = expressionHelpers.getSpeedAtTime.bind(prop);\n prop.numKeys = data.a === 1 ? data.k.length : 0;\n prop.propertyIndex = data.ix;\n var value = 0;\n if (type !== 0) {\n value = createTypedArray(\"float32\", data.a === 1 ? data.k[0].s.length : data.k.length);\n }\n prop._cachingAtTime = {\n lastFrame: initialDefaultFrame,\n lastIndex: 0,\n value\n };\n expressionHelpers.searchExpressions(elem, data, prop);\n if (prop.k) {\n container.addDynamicProperty(prop);\n }\n return prop;\n };\n function getShapeValueAtTime(frameNum) {\n if (!this._cachingAtTime) {\n this._cachingAtTime = {\n shapeValue: shapePool.clone(this.pv),\n lastIndex: 0,\n lastTime: initialDefaultFrame\n };\n }\n frameNum *= this.elem.globalData.frameRate;\n frameNum -= this.offsetTime;\n if (frameNum !== this._cachingAtTime.lastTime) {\n this._cachingAtTime.lastIndex = this._cachingAtTime.lastTime < frameNum ? this._caching.lastIndex : 0;\n this._cachingAtTime.lastTime = frameNum;\n this.interpolateShape(frameNum, this._cachingAtTime.shapeValue, this._cachingAtTime);\n }\n return this._cachingAtTime.shapeValue;\n }\n var ShapePropertyConstructorFunction = ShapePropertyFactory.getConstructorFunction();\n var KeyframedShapePropertyConstructorFunction = ShapePropertyFactory.getKeyframedConstructorFunction();\n function ShapeExpressions() {\n }\n ShapeExpressions.prototype = {\n vertices: function(prop, time) {\n if (this.k) {\n this.getValue();\n }\n var shapePath = this.v;\n if (time !== void 0) {\n shapePath = this.getValueAtTime(time, 0);\n }\n var i;\n var len = shapePath._length;\n var vertices = shapePath[prop];\n var points = shapePath.v;\n var arr = createSizedArray(len);\n for (i = 0; i < len; i += 1) {\n if (prop === \"i\" || prop === \"o\") {\n arr[i] = [vertices[i][0] - points[i][0], vertices[i][1] - points[i][1]];\n } else {\n arr[i] = [vertices[i][0], vertices[i][1]];\n }\n }\n return arr;\n },\n points: function(time) {\n return this.vertices(\"v\", time);\n },\n inTangents: function(time) {\n return this.vertices(\"i\", time);\n },\n outTangents: function(time) {\n return this.vertices(\"o\", time);\n },\n isClosed: function() {\n return this.v.c;\n },\n pointOnPath: function(perc, time) {\n var shapePath = this.v;\n if (time !== void 0) {\n shapePath = this.getValueAtTime(time, 0);\n }\n if (!this._segmentsLength) {\n this._segmentsLength = bez.getSegmentsLength(shapePath);\n }\n var segmentsLength = this._segmentsLength;\n var lengths = segmentsLength.lengths;\n var lengthPos = segmentsLength.totalLength * perc;\n var i = 0;\n var len = lengths.length;\n var accumulatedLength = 0;\n var pt;\n while (i < len) {\n if (accumulatedLength + lengths[i].addedLength > lengthPos) {\n var initIndex = i;\n var endIndex = shapePath.c && i === len - 1 ? 0 : i + 1;\n var segmentPerc = (lengthPos - accumulatedLength) / lengths[i].addedLength;\n pt = bez.getPointInSegment(\n shapePath.v[initIndex],\n shapePath.v[endIndex],\n shapePath.o[initIndex],\n shapePath.i[endIndex],\n segmentPerc,\n lengths[i]\n );\n break;\n } else {\n accumulatedLength += lengths[i].addedLength;\n }\n i += 1;\n }\n if (!pt) {\n pt = shapePath.c ? [shapePath.v[0][0], shapePath.v[0][1]] : [shapePath.v[shapePath._length - 1][0], shapePath.v[shapePath._length - 1][1]];\n }\n return pt;\n },\n vectorOnPath: function(perc, time, vectorType) {\n if (perc == 1) {\n perc = this.v.c;\n } else if (perc == 0) {\n perc = 0.999;\n }\n var pt1 = this.pointOnPath(perc, time);\n var pt2 = this.pointOnPath(perc + 1e-3, time);\n var xLength = pt2[0] - pt1[0];\n var yLength = pt2[1] - pt1[1];\n var magnitude = Math.sqrt(Math.pow(xLength, 2) + Math.pow(yLength, 2));\n if (magnitude === 0) {\n return [0, 0];\n }\n var unitVector = vectorType === \"tangent\" ? [xLength / magnitude, yLength / magnitude] : [-yLength / magnitude, xLength / magnitude];\n return unitVector;\n },\n tangentOnPath: function(perc, time) {\n return this.vectorOnPath(perc, time, \"tangent\");\n },\n normalOnPath: function(perc, time) {\n return this.vectorOnPath(perc, time, \"normal\");\n },\n setGroupProperty: expressionHelpers.setGroupProperty,\n getValueAtTime: expressionHelpers.getStaticValueAtTime\n };\n extendPrototype([ShapeExpressions], ShapePropertyConstructorFunction);\n extendPrototype([ShapeExpressions], KeyframedShapePropertyConstructorFunction);\n KeyframedShapePropertyConstructorFunction.prototype.getValueAtTime = getShapeValueAtTime;\n KeyframedShapePropertyConstructorFunction.prototype.initiateExpression = ExpressionManager.initiateExpression;\n var propertyGetShapeProp = ShapePropertyFactory.getShapeProp;\n ShapePropertyFactory.getShapeProp = function(elem, data, type, arr, trims) {\n var prop = propertyGetShapeProp(elem, data, type, arr, trims);\n prop.propertyIndex = data.ix;\n prop.lock = false;\n if (type === 3) {\n expressionHelpers.searchExpressions(elem, data.pt, prop);\n } else if (type === 4) {\n expressionHelpers.searchExpressions(elem, data.ks, prop);\n }\n if (prop.k) {\n elem.addDynamicProperty(prop);\n }\n return prop;\n };\n }\n function initialize$1() {\n addPropertyDecorator();\n }\n function addDecorator() {\n function searchExpressions() {\n if (this.data.d.x) {\n this.calculateExpression = ExpressionManager.initiateExpression.bind(this)(this.elem, this.data.d, this);\n this.addEffect(this.getExpressionValue.bind(this));\n return true;\n }\n return null;\n }\n TextProperty.prototype.getExpressionValue = function(currentValue, text) {\n var newValue = this.calculateExpression(text);\n if (currentValue.t !== newValue) {\n var newData = {};\n this.copyData(newData, currentValue);\n newData.t = newValue.toString();\n newData.__complete = false;\n return newData;\n }\n return currentValue;\n };\n TextProperty.prototype.searchProperty = function() {\n var isKeyframed = this.searchKeyframes();\n var hasExpressions = this.searchExpressions();\n this.kf = isKeyframed || hasExpressions;\n return this.kf;\n };\n TextProperty.prototype.searchExpressions = searchExpressions;\n }\n function initialize() {\n addDecorator();\n }\n setExpressionsPlugin(Expressions);\n initialize$1();\n initialize();\n return lottie2;\n})();\nexport {\n lottie as default\n};\n//# sourceMappingURL=lottie.js.map\n","import { Loader, CanvasTexture, NearestFilter, FileLoader } from \"three\";\nimport lottie from \"../libs/lottie.js\";\nclass LottieLoader extends Loader {\n setQuality(value) {\n this._quality = value;\n }\n load(url, onLoad, onProgress, onError) {\n const quality = this._quality || 1;\n const texture = new CanvasTexture();\n texture.minFilter = NearestFilter;\n const loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setWithCredentials(this.withCredentials);\n loader.load(\n url,\n function(text) {\n const data = JSON.parse(text);\n const container = document.createElement(\"div\");\n container.style.width = data.w + \"px\";\n container.style.height = data.h + \"px\";\n document.body.appendChild(container);\n const animation = lottie.loadAnimation({\n container,\n animType: \"canvas\",\n loop: true,\n autoplay: true,\n animationData: data,\n rendererSettings: { dpr: quality }\n });\n texture.animation = animation;\n texture.image = animation.container;\n animation.addEventListener(\"enterFrame\", function() {\n texture.needsUpdate = true;\n });\n container.style.display = \"none\";\n if (onLoad !== void 0) {\n onLoad(texture);\n }\n },\n onProgress,\n onError\n );\n return texture;\n }\n}\nexport {\n LottieLoader\n};\n//# sourceMappingURL=LottieLoader.js.map\n","const { parseBuffer } = /* @__PURE__ */ (() => {\n var TINF_OK = 0;\n var TINF_DATA_ERROR = -3;\n function Tree() {\n this.table = new Uint16Array(16);\n this.trans = new Uint16Array(288);\n }\n function Data(source, dest) {\n this.source = source;\n this.sourceIndex = 0;\n this.tag = 0;\n this.bitcount = 0;\n this.dest = dest;\n this.destLen = 0;\n this.ltree = new Tree();\n this.dtree = new Tree();\n }\n var sltree = new Tree();\n var sdtree = new Tree();\n var length_bits = new Uint8Array(30);\n var length_base = new Uint16Array(30);\n var dist_bits = new Uint8Array(30);\n var dist_base = new Uint16Array(30);\n var clcidx = new Uint8Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15]);\n var code_tree = new Tree();\n var lengths = new Uint8Array(288 + 32);\n function tinf_build_bits_base(bits, base, delta, first) {\n var i, sum;\n for (i = 0; i < delta; ++i) {\n bits[i] = 0;\n }\n for (i = 0; i < 30 - delta; ++i) {\n bits[i + delta] = i / delta | 0;\n }\n for (sum = first, i = 0; i < 30; ++i) {\n base[i] = sum;\n sum += 1 << bits[i];\n }\n }\n function tinf_build_fixed_trees(lt, dt) {\n var i;\n for (i = 0; i < 7; ++i) {\n lt.table[i] = 0;\n }\n lt.table[7] = 24;\n lt.table[8] = 152;\n lt.table[9] = 112;\n for (i = 0; i < 24; ++i) {\n lt.trans[i] = 256 + i;\n }\n for (i = 0; i < 144; ++i) {\n lt.trans[24 + i] = i;\n }\n for (i = 0; i < 8; ++i) {\n lt.trans[24 + 144 + i] = 280 + i;\n }\n for (i = 0; i < 112; ++i) {\n lt.trans[24 + 144 + 8 + i] = 144 + i;\n }\n for (i = 0; i < 5; ++i) {\n dt.table[i] = 0;\n }\n dt.table[5] = 32;\n for (i = 0; i < 32; ++i) {\n dt.trans[i] = i;\n }\n }\n var offs = new Uint16Array(16);\n function tinf_build_tree(t, lengths2, off, num) {\n var i, sum;\n for (i = 0; i < 16; ++i) {\n t.table[i] = 0;\n }\n for (i = 0; i < num; ++i) {\n t.table[lengths2[off + i]]++;\n }\n t.table[0] = 0;\n for (sum = 0, i = 0; i < 16; ++i) {\n offs[i] = sum;\n sum += t.table[i];\n }\n for (i = 0; i < num; ++i) {\n if (lengths2[off + i]) {\n t.trans[offs[lengths2[off + i]]++] = i;\n }\n }\n }\n function tinf_getbit(d) {\n if (!d.bitcount--) {\n d.tag = d.source[d.sourceIndex++];\n d.bitcount = 7;\n }\n var bit = d.tag & 1;\n d.tag >>>= 1;\n return bit;\n }\n function tinf_read_bits(d, num, base) {\n if (!num) {\n return base;\n }\n while (d.bitcount < 24) {\n d.tag |= d.source[d.sourceIndex++] << d.bitcount;\n d.bitcount += 8;\n }\n var val = d.tag & 65535 >>> 16 - num;\n d.tag >>>= num;\n d.bitcount -= num;\n return val + base;\n }\n function tinf_decode_symbol(d, t) {\n while (d.bitcount < 24) {\n d.tag |= d.source[d.sourceIndex++] << d.bitcount;\n d.bitcount += 8;\n }\n var sum = 0, cur = 0, len = 0;\n var tag = d.tag;\n do {\n cur = 2 * cur + (tag & 1);\n tag >>>= 1;\n ++len;\n sum += t.table[len];\n cur -= t.table[len];\n } while (cur >= 0);\n d.tag = tag;\n d.bitcount -= len;\n return t.trans[sum + cur];\n }\n function tinf_decode_trees(d, lt, dt) {\n var hlit, hdist, hclen;\n var i, num, length;\n hlit = tinf_read_bits(d, 5, 257);\n hdist = tinf_read_bits(d, 5, 1);\n hclen = tinf_read_bits(d, 4, 4);\n for (i = 0; i < 19; ++i) {\n lengths[i] = 0;\n }\n for (i = 0; i < hclen; ++i) {\n var clen = tinf_read_bits(d, 3, 0);\n lengths[clcidx[i]] = clen;\n }\n tinf_build_tree(code_tree, lengths, 0, 19);\n for (num = 0; num < hlit + hdist; ) {\n var sym = tinf_decode_symbol(d, code_tree);\n switch (sym) {\n case 16:\n var prev = lengths[num - 1];\n for (length = tinf_read_bits(d, 2, 3); length; --length) {\n lengths[num++] = prev;\n }\n break;\n case 17:\n for (length = tinf_read_bits(d, 3, 3); length; --length) {\n lengths[num++] = 0;\n }\n break;\n case 18:\n for (length = tinf_read_bits(d, 7, 11); length; --length) {\n lengths[num++] = 0;\n }\n break;\n default:\n lengths[num++] = sym;\n break;\n }\n }\n tinf_build_tree(lt, lengths, 0, hlit);\n tinf_build_tree(dt, lengths, hlit, hdist);\n }\n function tinf_inflate_block_data(d, lt, dt) {\n while (1) {\n var sym = tinf_decode_symbol(d, lt);\n if (sym === 256) {\n return TINF_OK;\n }\n if (sym < 256) {\n d.dest[d.destLen++] = sym;\n } else {\n var length, dist, offs2;\n var i;\n sym -= 257;\n length = tinf_read_bits(d, length_bits[sym], length_base[sym]);\n dist = tinf_decode_symbol(d, dt);\n offs2 = d.destLen - tinf_read_bits(d, dist_bits[dist], dist_base[dist]);\n for (i = offs2; i < offs2 + length; ++i) {\n d.dest[d.destLen++] = d.dest[i];\n }\n }\n }\n }\n function tinf_inflate_uncompressed_block(d) {\n var length, invlength;\n var i;\n while (d.bitcount > 8) {\n d.sourceIndex--;\n d.bitcount -= 8;\n }\n length = d.source[d.sourceIndex + 1];\n length = 256 * length + d.source[d.sourceIndex];\n invlength = d.source[d.sourceIndex + 3];\n invlength = 256 * invlength + d.source[d.sourceIndex + 2];\n if (length !== (~invlength & 65535)) {\n return TINF_DATA_ERROR;\n }\n d.sourceIndex += 4;\n for (i = length; i; --i) {\n d.dest[d.destLen++] = d.source[d.sourceIndex++];\n }\n d.bitcount = 0;\n return TINF_OK;\n }\n function tinf_uncompress(source, dest) {\n var d = new Data(source, dest);\n var bfinal, btype, res;\n do {\n bfinal = tinf_getbit(d);\n btype = tinf_read_bits(d, 2, 0);\n switch (btype) {\n case 0:\n res = tinf_inflate_uncompressed_block(d);\n break;\n case 1:\n res = tinf_inflate_block_data(d, sltree, sdtree);\n break;\n case 2:\n tinf_decode_trees(d, d.ltree, d.dtree);\n res = tinf_inflate_block_data(d, d.ltree, d.dtree);\n break;\n default:\n res = TINF_DATA_ERROR;\n }\n if (res !== TINF_OK) {\n throw new Error(\"Data error\");\n }\n } while (!bfinal);\n if (d.destLen < d.dest.length) {\n if (typeof d.dest.slice === \"function\") {\n return d.dest.slice(0, d.destLen);\n } else {\n return d.dest.subarray(0, d.destLen);\n }\n }\n return d.dest;\n }\n tinf_build_fixed_trees(sltree, sdtree);\n tinf_build_bits_base(length_bits, length_base, 4, 3);\n tinf_build_bits_base(dist_bits, dist_base, 2, 1);\n length_bits[28] = 0;\n length_base[28] = 258;\n var tinyInflate = tinf_uncompress;\n function derive(v0, v1, v2, v3, t) {\n return Math.pow(1 - t, 3) * v0 + 3 * Math.pow(1 - t, 2) * t * v1 + 3 * (1 - t) * Math.pow(t, 2) * v2 + Math.pow(t, 3) * v3;\n }\n function BoundingBox() {\n this.x1 = Number.NaN;\n this.y1 = Number.NaN;\n this.x2 = Number.NaN;\n this.y2 = Number.NaN;\n }\n BoundingBox.prototype.isEmpty = function() {\n return isNaN(this.x1) || isNaN(this.y1) || isNaN(this.x2) || isNaN(this.y2);\n };\n BoundingBox.prototype.addPoint = function(x, y) {\n if (typeof x === \"number\") {\n if (isNaN(this.x1) || isNaN(this.x2)) {\n this.x1 = x;\n this.x2 = x;\n }\n if (x < this.x1) {\n this.x1 = x;\n }\n if (x > this.x2) {\n this.x2 = x;\n }\n }\n if (typeof y === \"number\") {\n if (isNaN(this.y1) || isNaN(this.y2)) {\n this.y1 = y;\n this.y2 = y;\n }\n if (y < this.y1) {\n this.y1 = y;\n }\n if (y > this.y2) {\n this.y2 = y;\n }\n }\n };\n BoundingBox.prototype.addX = function(x) {\n this.addPoint(x, null);\n };\n BoundingBox.prototype.addY = function(y) {\n this.addPoint(null, y);\n };\n BoundingBox.prototype.addBezier = function(x0, y0, x1, y1, x2, y2, x, y) {\n var p0 = [x0, y0];\n var p1 = [x1, y1];\n var p2 = [x2, y2];\n var p3 = [x, y];\n this.addPoint(x0, y0);\n this.addPoint(x, y);\n for (var i = 0; i <= 1; i++) {\n var b = 6 * p0[i] - 12 * p1[i] + 6 * p2[i];\n var a = -3 * p0[i] + 9 * p1[i] - 9 * p2[i] + 3 * p3[i];\n var c = 3 * p1[i] - 3 * p0[i];\n if (a === 0) {\n if (b === 0) {\n continue;\n }\n var t = -c / b;\n if (0 < t && t < 1) {\n if (i === 0) {\n this.addX(derive(p0[i], p1[i], p2[i], p3[i], t));\n }\n if (i === 1) {\n this.addY(derive(p0[i], p1[i], p2[i], p3[i], t));\n }\n }\n continue;\n }\n var b2ac = Math.pow(b, 2) - 4 * c * a;\n if (b2ac < 0) {\n continue;\n }\n var t1 = (-b + Math.sqrt(b2ac)) / (2 * a);\n if (0 < t1 && t1 < 1) {\n if (i === 0) {\n this.addX(derive(p0[i], p1[i], p2[i], p3[i], t1));\n }\n if (i === 1) {\n this.addY(derive(p0[i], p1[i], p2[i], p3[i], t1));\n }\n }\n var t2 = (-b - Math.sqrt(b2ac)) / (2 * a);\n if (0 < t2 && t2 < 1) {\n if (i === 0) {\n this.addX(derive(p0[i], p1[i], p2[i], p3[i], t2));\n }\n if (i === 1) {\n this.addY(derive(p0[i], p1[i], p2[i], p3[i], t2));\n }\n }\n }\n };\n BoundingBox.prototype.addQuad = function(x0, y0, x1, y1, x, y) {\n var cp1x = x0 + 2 / 3 * (x1 - x0);\n var cp1y = y0 + 2 / 3 * (y1 - y0);\n var cp2x = cp1x + 1 / 3 * (x - x0);\n var cp2y = cp1y + 1 / 3 * (y - y0);\n this.addBezier(x0, y0, cp1x, cp1y, cp2x, cp2y, x, y);\n };\n function Path() {\n this.commands = [];\n this.fill = \"black\";\n this.stroke = null;\n this.strokeWidth = 1;\n }\n Path.prototype.moveTo = function(x, y) {\n this.commands.push({\n type: \"M\",\n x,\n y\n });\n };\n Path.prototype.lineTo = function(x, y) {\n this.commands.push({\n type: \"L\",\n x,\n y\n });\n };\n Path.prototype.curveTo = Path.prototype.bezierCurveTo = function(x1, y1, x2, y2, x, y) {\n this.commands.push({\n type: \"C\",\n x1,\n y1,\n x2,\n y2,\n x,\n y\n });\n };\n Path.prototype.quadTo = Path.prototype.quadraticCurveTo = function(x1, y1, x, y) {\n this.commands.push({\n type: \"Q\",\n x1,\n y1,\n x,\n y\n });\n };\n Path.prototype.close = Path.prototype.closePath = function() {\n this.commands.push({\n type: \"Z\"\n });\n };\n Path.prototype.extend = function(pathOrCommands) {\n if (pathOrCommands.commands) {\n pathOrCommands = pathOrCommands.commands;\n } else if (pathOrCommands instanceof BoundingBox) {\n var box = pathOrCommands;\n this.moveTo(box.x1, box.y1);\n this.lineTo(box.x2, box.y1);\n this.lineTo(box.x2, box.y2);\n this.lineTo(box.x1, box.y2);\n this.close();\n return;\n }\n Array.prototype.push.apply(this.commands, pathOrCommands);\n };\n Path.prototype.getBoundingBox = function() {\n var box = new BoundingBox();\n var startX = 0;\n var startY = 0;\n var prevX = 0;\n var prevY = 0;\n for (var i = 0; i < this.commands.length; i++) {\n var cmd = this.commands[i];\n switch (cmd.type) {\n case \"M\":\n box.addPoint(cmd.x, cmd.y);\n startX = prevX = cmd.x;\n startY = prevY = cmd.y;\n break;\n case \"L\":\n box.addPoint(cmd.x, cmd.y);\n prevX = cmd.x;\n prevY = cmd.y;\n break;\n case \"Q\":\n box.addQuad(prevX, prevY, cmd.x1, cmd.y1, cmd.x, cmd.y);\n prevX = cmd.x;\n prevY = cmd.y;\n break;\n case \"C\":\n box.addBezier(prevX, prevY, cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y);\n prevX = cmd.x;\n prevY = cmd.y;\n break;\n case \"Z\":\n prevX = startX;\n prevY = startY;\n break;\n default:\n throw new Error(\"Unexpected path command \" + cmd.type);\n }\n }\n if (box.isEmpty()) {\n box.addPoint(0, 0);\n }\n return box;\n };\n Path.prototype.draw = function(ctx) {\n ctx.beginPath();\n for (var i = 0; i < this.commands.length; i += 1) {\n var cmd = this.commands[i];\n if (cmd.type === \"M\") {\n ctx.moveTo(cmd.x, cmd.y);\n } else if (cmd.type === \"L\") {\n ctx.lineTo(cmd.x, cmd.y);\n } else if (cmd.type === \"C\") {\n ctx.bezierCurveTo(cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y);\n } else if (cmd.type === \"Q\") {\n ctx.quadraticCurveTo(cmd.x1, cmd.y1, cmd.x, cmd.y);\n } else if (cmd.type === \"Z\") {\n ctx.closePath();\n }\n }\n if (this.fill) {\n ctx.fillStyle = this.fill;\n ctx.fill();\n }\n if (this.stroke) {\n ctx.strokeStyle = this.stroke;\n ctx.lineWidth = this.strokeWidth;\n ctx.stroke();\n }\n };\n Path.prototype.toPathData = function(decimalPlaces) {\n decimalPlaces = decimalPlaces !== void 0 ? decimalPlaces : 2;\n function floatToString(v) {\n if (Math.round(v) === v) {\n return \"\" + Math.round(v);\n } else {\n return v.toFixed(decimalPlaces);\n }\n }\n function packValues() {\n var arguments$1 = arguments;\n var s = \"\";\n for (var i2 = 0; i2 < arguments.length; i2 += 1) {\n var v = arguments$1[i2];\n if (v >= 0 && i2 > 0) {\n s += \" \";\n }\n s += floatToString(v);\n }\n return s;\n }\n var d = \"\";\n for (var i = 0; i < this.commands.length; i += 1) {\n var cmd = this.commands[i];\n if (cmd.type === \"M\") {\n d += \"M\" + packValues(cmd.x, cmd.y);\n } else if (cmd.type === \"L\") {\n d += \"L\" + packValues(cmd.x, cmd.y);\n } else if (cmd.type === \"C\") {\n d += \"C\" + packValues(cmd.x1, cmd.y1, cmd.x2, cmd.y2, cmd.x, cmd.y);\n } else if (cmd.type === \"Q\") {\n d += \"Q\" + packValues(cmd.x1, cmd.y1, cmd.x, cmd.y);\n } else if (cmd.type === \"Z\") {\n d += \"Z\";\n }\n }\n return d;\n };\n Path.prototype.toSVG = function(decimalPlaces) {\n var svg = '<path d=\"';\n svg += this.toPathData(decimalPlaces);\n svg += '\"';\n if (this.fill && this.fill !== \"black\") {\n if (this.fill === null) {\n svg += ' fill=\"none\"';\n } else {\n svg += ' fill=\"' + this.fill + '\"';\n }\n }\n if (this.stroke) {\n svg += ' stroke=\"' + this.stroke + '\" stroke-width=\"' + this.strokeWidth + '\"';\n }\n svg += \"/>\";\n return svg;\n };\n Path.prototype.toDOMElement = function(decimalPlaces) {\n var temporaryPath = this.toPathData(decimalPlaces);\n var newPath = document.createElementNS(\"http://www.w3.org/2000/svg\", \"path\");\n newPath.setAttribute(\"d\", temporaryPath);\n return newPath;\n };\n function fail(message) {\n throw new Error(message);\n }\n function argument(predicate, message) {\n if (!predicate) {\n fail(message);\n }\n }\n var check = { fail, argument, assert: argument };\n var LIMIT16 = 32768;\n var LIMIT32 = 2147483648;\n var decode = {};\n var encode = {};\n var sizeOf = {};\n function constant(v) {\n return function() {\n return v;\n };\n }\n encode.BYTE = function(v) {\n check.argument(v >= 0 && v <= 255, \"Byte value should be between 0 and 255.\");\n return [v];\n };\n sizeOf.BYTE = constant(1);\n encode.CHAR = function(v) {\n return [v.charCodeAt(0)];\n };\n sizeOf.CHAR = constant(1);\n encode.CHARARRAY = function(v) {\n if (typeof v === \"undefined\") {\n v = \"\";\n console.warn(\n \"Undefined CHARARRAY encountered and treated as an empty string. This is probably caused by a missing glyph name.\"\n );\n }\n var b = [];\n for (var i = 0; i < v.length; i += 1) {\n b[i] = v.charCodeAt(i);\n }\n return b;\n };\n sizeOf.CHARARRAY = function(v) {\n if (typeof v === \"undefined\") {\n return 0;\n }\n return v.length;\n };\n encode.USHORT = function(v) {\n return [v >> 8 & 255, v & 255];\n };\n sizeOf.USHORT = constant(2);\n encode.SHORT = function(v) {\n if (v >= LIMIT16) {\n v = -(2 * LIMIT16 - v);\n }\n return [v >> 8 & 255, v & 255];\n };\n sizeOf.SHORT = constant(2);\n encode.UINT24 = function(v) {\n return [v >> 16 & 255, v >> 8 & 255, v & 255];\n };\n sizeOf.UINT24 = constant(3);\n encode.ULONG = function(v) {\n return [v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255];\n };\n sizeOf.ULONG = constant(4);\n encode.LONG = function(v) {\n if (v >= LIMIT32) {\n v = -(2 * LIMIT32 - v);\n }\n return [v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255];\n };\n sizeOf.LONG = constant(4);\n encode.FIXED = encode.ULONG;\n sizeOf.FIXED = sizeOf.ULONG;\n encode.FWORD = encode.SHORT;\n sizeOf.FWORD = sizeOf.SHORT;\n encode.UFWORD = encode.USHORT;\n sizeOf.UFWORD = sizeOf.USHORT;\n encode.LONGDATETIME = function(v) {\n return [0, 0, 0, 0, v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255];\n };\n sizeOf.LONGDATETIME = constant(8);\n encode.TAG = function(v) {\n check.argument(v.length === 4, \"Tag should be exactly 4 ASCII characters.\");\n return [v.charCodeAt(0), v.charCodeAt(1), v.charCodeAt(2), v.charCodeAt(3)];\n };\n sizeOf.TAG = constant(4);\n encode.Card8 = encode.BYTE;\n sizeOf.Card8 = sizeOf.BYTE;\n encode.Card16 = encode.USHORT;\n sizeOf.Card16 = sizeOf.USHORT;\n encode.OffSize = encode.BYTE;\n sizeOf.OffSize = sizeOf.BYTE;\n encode.SID = encode.USHORT;\n sizeOf.SID = sizeOf.USHORT;\n encode.NUMBER = function(v) {\n if (v >= -107 && v <= 107) {\n return [v + 139];\n } else if (v >= 108 && v <= 1131) {\n v = v - 108;\n return [(v >> 8) + 247, v & 255];\n } else if (v >= -1131 && v <= -108) {\n v = -v - 108;\n return [(v >> 8) + 251, v & 255];\n } else if (v >= -32768 && v <= 32767) {\n return encode.NUMBER16(v);\n } else {\n return encode.NUMBER32(v);\n }\n };\n sizeOf.NUMBER = function(v) {\n return encode.NUMBER(v).length;\n };\n encode.NUMBER16 = function(v) {\n return [28, v >> 8 & 255, v & 255];\n };\n sizeOf.NUMBER16 = constant(3);\n encode.NUMBER32 = function(v) {\n return [29, v >> 24 & 255, v >> 16 & 255, v >> 8 & 255, v & 255];\n };\n sizeOf.NUMBER32 = constant(5);\n encode.REAL = function(v) {\n var value = v.toString();\n var m = /\\.(\\d*?)(?:9{5,20}|0{5,20})\\d{0,2}(?:e(.+)|$)/.exec(value);\n if (m) {\n var epsilon = parseFloat(\"1e\" + ((m[2] ? +m[2] : 0) + m[1].length));\n value = (Math.round(v * epsilon) / epsilon).toString();\n }\n var nibbles = \"\";\n for (var i = 0, ii = value.length; i < ii; i += 1) {\n var c = value[i];\n if (c === \"e\") {\n nibbles += value[++i] === \"-\" ? \"c\" : \"b\";\n } else if (c === \".\") {\n nibbles += \"a\";\n } else if (c === \"-\") {\n nibbles += \"e\";\n } else {\n nibbles += c;\n }\n }\n nibbles += nibbles.length & 1 ? \"f\" : \"ff\";\n var out = [30];\n for (var i$1 = 0, ii$1 = nibbles.length; i$1 < ii$1; i$1 += 2) {\n out.push(parseInt(nibbles.substr(i$1, 2), 16));\n }\n return out;\n };\n sizeOf.REAL = function(v) {\n return encode.REAL(v).length;\n };\n encode.NAME = encode.CHARARRAY;\n sizeOf.NAME = sizeOf.CHARARRAY;\n encode.STRING = encode.CHARARRAY;\n sizeOf.STRING = sizeOf.CHARARRAY;\n decode.UTF8 = function(data, offset, numBytes) {\n var codePoints = [];\n var numChars = numBytes;\n for (var j = 0; j < numChars; j++, offset += 1) {\n codePoints[j] = data.getUint8(offset);\n }\n return String.fromCharCode.apply(null, codePoints);\n };\n decode.UTF16 = function(data, offset, numBytes) {\n var codePoints = [];\n var numChars = numBytes / 2;\n for (var j = 0; j < numChars; j++, offset += 2) {\n codePoints[j] = data.getUint16(offset);\n }\n return String.fromCharCode.apply(null, codePoints);\n };\n encode.UTF16 = function(v) {\n var b = [];\n for (var i = 0; i < v.length; i += 1) {\n var codepoint = v.charCodeAt(i);\n b[b.length] = codepoint >> 8 & 255;\n b[b.length] = codepoint & 255;\n }\n return b;\n };\n sizeOf.UTF16 = function(v) {\n return v.length * 2;\n };\n var eightBitMacEncodings = {\n // Python: 'mac_croatian'\n \"x-mac-croatian\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®Š™´¨≠ŽØ∞±≤≥∆µ∂∑∏š∫ªºΩžø¿¡¬√ƒ≈ƫȅ ÀÃÕŒœĐ—“”‘’÷◊©⁄€‹›Æ»–·‚„‰ÂćÁčÈÍÎÏÌÓÔđÒÚÛÙıˆ˜¯πË˚¸Êæˇ\",\n // Python: 'mac_cyrillic'\n \"x-mac-cyrillic\": \"АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ†°Ґ£§•¶І®©™Ђђ≠Ѓѓ∞±≤≥іµґЈЄєЇїЉљЊњјЅ¬√ƒ≈∆«»… ЋћЌќѕ–—“”‘’÷„ЎўЏџ№Ёёяабвгдежзийклмнопрстуфхцчшщъыьэю\",\n // http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/GAELIC.TXT\n \"x-mac-gaelic\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØḂ±≤≥ḃĊċḊḋḞḟĠġṀæøṁṖṗɼƒſṠ«»… ÀÃÕŒœ–—“”‘’ṡẛÿŸṪ€‹›Ŷŷṫ·Ỳỳ⁊ÂÊÁËÈÍÎÏÌÓÔ♣ÒÚÛÙıÝýŴŵẄẅẀẁẂẃ\",\n // Python: 'mac_greek'\n \"x-mac-greek\": \"Ĺ²É³ÖÜ΅àâä΄¨çéèê룙î‰ôö¦€ùûü†ΓΔΘΛΞΠß®©ΣΪ§≠°·Α±≤≥¥ΒΕΖΗΙΚΜΦΫΨΩάΝ¬ΟΡ≈Τ«»… ΥΧΆΈœ–―“”‘’÷ΉΊΌΎέήίόΏύαβψδεφγηιξκλμνοπώρστθωςχυζϊϋΐΰ­\",\n // Python: 'mac_iceland'\n \"x-mac-icelandic\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûüݰ¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€ÐðÞþý·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\",\n // http://unicode.org/Public/MAPPINGS/VENDORS/APPLE/INUIT.TXT\n \"x-mac-inuit\": \"ᐃᐄᐅᐆᐊᐋᐱᐲᐳᐴᐸᐹᑉᑎᑏᑐᑑᑕᑖᑦᑭᑮᑯᑰᑲᑳᒃᒋᒌᒍᒎᒐᒑ°ᒡᒥᒦ•¶ᒧ®©™ᒨᒪᒫᒻᓂᓃᓄᓅᓇᓈᓐᓯᓰᓱᓲᓴᓵᔅᓕᓖᓗᓘᓚᓛᓪᔨᔩᔪᔫᔭ… ᔮᔾᕕᕖᕗ–—“”‘’ᕘᕙᕚᕝᕆᕇᕈᕉᕋᕌᕐᕿᖀᖁᖂᖃᖄᖅᖏᖐᖑᖒᖓᖔᖕᙱᙲᙳᙴᙵᙶᖖᖠᖡᖢᖣᖤᖥᖦᕼŁł\",\n // Python: 'mac_latin2'\n \"x-mac-ce\": \"ÄĀāÉĄÖÜáąČäčĆć鏟ĎíďĒēĖóėôöõúĚěü†°Ę£§•¶ß®©™ę¨≠ģĮįĪ≤≥īĶ∂∑łĻļĽľĹĺŅņѬ√ńŇ∆«»… ňŐÕőŌ–—“”‘’÷◊ōŔŕŘ‹›řŖŗŠ‚„šŚśÁŤťÍŽžŪÓÔūŮÚůŰűŲųÝýķŻŁżĢˇ\",\n // Python: 'mac_roman'\n macintosh: \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›fifl‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\",\n // Python: 'mac_romanian'\n \"x-mac-romanian\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ĂȘ∞±≤≥¥µ∂∑∏π∫ªºΩăș¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸ⁄€‹›Țț‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙıˆ˜¯˘˙˚¸˝˛ˇ\",\n // Python: 'mac_turkish'\n \"x-mac-turkish\": \"ÄÅÇÉÑÖÜáàâäãåçéèêëíìîïñóòôöõúùûü†°¢£§•¶ß®©™´¨≠ÆØ∞±≤≥¥µ∂∑∏π∫ªºΩæø¿¡¬√ƒ≈∆«»… ÀÃÕŒœ–—“”‘’÷◊ÿŸĞğİıŞş‡·‚„‰ÂÊÁËÈÍÎÏÌÓÔÒÚÛÙˆ˜¯˘˙˚¸˝˛ˇ\"\n };\n decode.MACSTRING = function(dataView, offset, dataLength, encoding) {\n var table2 = eightBitMacEncodings[encoding];\n if (table2 === void 0) {\n return void 0;\n }\n var result = \"\";\n for (var i = 0; i < dataLength; i++) {\n var c = dataView.getUint8(offset + i);\n if (c <= 127) {\n result += String.fromCharCode(c);\n } else {\n result += table2[c & 127];\n }\n }\n return result;\n };\n var macEncodingTableCache = typeof WeakMap === \"function\" && /* @__PURE__ */ new WeakMap();\n var macEncodingCacheKeys;\n var getMacEncodingTable = function(encoding) {\n if (!macEncodingCacheKeys) {\n macEncodingCacheKeys = {};\n for (var e in eightBitMacEncodings) {\n macEncodingCacheKeys[e] = new String(e);\n }\n }\n var cacheKey = macEncodingCacheKeys[encoding];\n if (cacheKey === void 0) {\n return void 0;\n }\n if (macEncodingTableCache) {\n var cachedTable = macEncodingTableCache.get(cacheKey);\n if (cachedTable !== void 0) {\n return cachedTable;\n }\n }\n var decodingTable = eightBitMacEncodings[encoding];\n if (decodingTable === void 0) {\n return void 0;\n }\n var encodingTable = {};\n for (var i = 0; i < decodingTable.length; i++) {\n encodingTable[decodingTable.charCodeAt(i)] = i + 128;\n }\n if (macEncodingTableCache) {\n macEncodingTableCache.set(cacheKey, encodingTable);\n }\n return encodingTable;\n };\n encode.MACSTRING = function(str, encoding) {\n var table2 = getMacEncodingTable(encoding);\n if (table2 === void 0) {\n return void 0;\n }\n var result = [];\n for (var i = 0; i < str.length; i++) {\n var c = str.charCodeAt(i);\n if (c >= 128) {\n c = table2[c];\n if (c === void 0) {\n return void 0;\n }\n }\n result[i] = c;\n }\n return result;\n };\n sizeOf.MACSTRING = function(str, encoding) {\n var b = encode.MACSTRING(str, encoding);\n if (b !== void 0) {\n return b.length;\n } else {\n return 0;\n }\n };\n function isByteEncodable(value) {\n return value >= -128 && value <= 127;\n }\n function encodeVarDeltaRunAsZeroes(deltas, pos, result) {\n var runLength = 0;\n var numDeltas = deltas.length;\n while (pos < numDeltas && runLength < 64 && deltas[pos] === 0) {\n ++pos;\n ++runLength;\n }\n result.push(128 | runLength - 1);\n return pos;\n }\n function encodeVarDeltaRunAsBytes(deltas, offset, result) {\n var runLength = 0;\n var numDeltas = deltas.length;\n var pos = offset;\n while (pos < numDeltas && runLength < 64) {\n var value = deltas[pos];\n if (!isByteEncodable(value)) {\n break;\n }\n if (value === 0 && pos + 1 < numDeltas && deltas[pos + 1] === 0) {\n break;\n }\n ++pos;\n ++runLength;\n }\n result.push(runLength - 1);\n for (var i = offset; i < pos; ++i) {\n result.push(deltas[i] + 256 & 255);\n }\n return pos;\n }\n function encodeVarDeltaRunAsWords(deltas, offset, result) {\n var runLength = 0;\n var numDeltas = deltas.length;\n var pos = offset;\n while (pos < numDeltas && runLength < 64) {\n var value = deltas[pos];\n if (value === 0) {\n break;\n }\n if (isByteEncodable(value) && pos + 1 < numDeltas && isByteEncodable(deltas[pos + 1])) {\n break;\n }\n ++pos;\n ++runLength;\n }\n result.push(64 | runLength - 1);\n for (var i = offset; i < pos; ++i) {\n var val = deltas[i];\n result.push(val + 65536 >> 8 & 255, val + 256 & 255);\n }\n return pos;\n }\n encode.VARDELTAS = function(deltas) {\n var pos = 0;\n var result = [];\n while (pos < deltas.length) {\n var value = deltas[pos];\n if (value === 0) {\n pos = encodeVarDeltaRunAsZeroes(deltas, pos, result);\n } else if (value >= -128 && value <= 127) {\n pos = encodeVarDeltaRunAsBytes(deltas, pos, result);\n } else {\n pos = encodeVarDeltaRunAsWords(deltas, pos, result);\n }\n }\n return result;\n };\n encode.INDEX = function(l) {\n var offset = 1;\n var offsets = [offset];\n var data = [];\n for (var i = 0; i < l.length; i += 1) {\n var v = encode.OBJECT(l[i]);\n Array.prototype.push.apply(data, v);\n offset += v.length;\n offsets.push(offset);\n }\n if (data.length === 0) {\n return [0, 0];\n }\n var encodedOffsets = [];\n var offSize = 1 + Math.floor(Math.log(offset) / Math.log(2)) / 8 | 0;\n var offsetEncoder = [void 0, encode.BYTE, encode.USHORT, encode.UINT24, encode.ULONG][offSize];\n for (var i$1 = 0; i$1 < offsets.length; i$1 += 1) {\n var encodedOffset = offsetEncoder(offsets[i$1]);\n Array.prototype.push.apply(encodedOffsets, encodedOffset);\n }\n return Array.prototype.concat(encode.Card16(l.length), encode.OffSize(offSize), encodedOffsets, data);\n };\n sizeOf.INDEX = function(v) {\n return encode.INDEX(v).length;\n };\n encode.DICT = function(m) {\n var d = [];\n var keys = Object.keys(m);\n var length = keys.length;\n for (var i = 0; i < length; i += 1) {\n var k = parseInt(keys[i], 0);\n var v = m[k];\n d = d.concat(encode.OPERAND(v.value, v.type));\n d = d.concat(encode.OPERATOR(k));\n }\n return d;\n };\n sizeOf.DICT = function(m) {\n return encode.DICT(m).length;\n };\n encode.OPERATOR = function(v) {\n if (v < 1200) {\n return [v];\n } else {\n return [12, v - 1200];\n }\n };\n encode.OPERAND = function(v, type) {\n var d = [];\n if (Array.isArray(type)) {\n for (var i = 0; i < type.length; i += 1) {\n check.argument(v.length === type.length, \"Not enough arguments given for type\" + type);\n d = d.concat(encode.OPERAND(v[i], type[i]));\n }\n } else {\n if (type === \"SID\") {\n d = d.concat(encode.NUMBER(v));\n } else if (type === \"offset\") {\n d = d.concat(encode.NUMBER32(v));\n } else if (type === \"number\") {\n d = d.concat(encode.NUMBER(v));\n } else if (type === \"real\") {\n d = d.concat(encode.REAL(v));\n } else {\n throw new Error(\"Unknown operand type \" + type);\n }\n }\n return d;\n };\n encode.OP = encode.BYTE;\n sizeOf.OP = sizeOf.BYTE;\n var wmm = typeof WeakMap === \"function\" && /* @__PURE__ */ new WeakMap();\n encode.CHARSTRING = function(ops) {\n if (wmm) {\n var cachedValue = wmm.get(ops);\n if (cachedValue !== void 0) {\n return cachedValue;\n }\n }\n var d = [];\n var length = ops.length;\n for (var i = 0; i < length; i += 1) {\n var op = ops[i];\n d = d.concat(encode[op.type](op.value));\n }\n if (wmm) {\n wmm.set(ops, d);\n }\n return d;\n };\n sizeOf.CHARSTRING = function(ops) {\n return encode.CHARSTRING(ops).length;\n };\n encode.OBJECT = function(v) {\n var encodingFunction = encode[v.type];\n check.argument(encodingFunction !== void 0, \"No encoding function for type \" + v.type);\n return encodingFunction(v.value);\n };\n sizeOf.OBJECT = function(v) {\n var sizeOfFunction = sizeOf[v.type];\n check.argument(sizeOfFunction !== void 0, \"No sizeOf function for type \" + v.type);\n return sizeOfFunction(v.value);\n };\n encode.TABLE = function(table2) {\n var d = [];\n var length = table2.fields.length;\n var subtables = [];\n var subtableOffsets = [];\n for (var i = 0; i < length; i += 1) {\n var field = table2.fields[i];\n var encodingFunction = encode[field.type];\n check.argument(\n encodingFunction !== void 0,\n \"No encoding function for field type \" + field.type + \" (\" + field.name + \")\"\n );\n var value = table2[field.name];\n if (value === void 0) {\n value = field.value;\n }\n var bytes = encodingFunction(value);\n if (field.type === \"TABLE\") {\n subtableOffsets.push(d.length);\n d = d.concat([0, 0]);\n subtables.push(bytes);\n } else {\n d = d.concat(bytes);\n }\n }\n for (var i$1 = 0; i$1 < subtables.length; i$1 += 1) {\n var o = subtableOffsets[i$1];\n var offset = d.length;\n check.argument(offset < 65536, \"Table \" + table2.tableName + \" too big.\");\n d[o] = offset >> 8;\n d[o + 1] = offset & 255;\n d = d.concat(subtables[i$1]);\n }\n return d;\n };\n sizeOf.TABLE = function(table2) {\n var numBytes = 0;\n var length = table2.fields.length;\n for (var i = 0; i < length; i += 1) {\n var field = table2.fields[i];\n var sizeOfFunction = sizeOf[field.type];\n check.argument(\n sizeOfFunction !== void 0,\n \"No sizeOf function for field type \" + field.type + \" (\" + field.name + \")\"\n );\n var value = table2[field.name];\n if (value === void 0) {\n value = field.value;\n }\n numBytes += sizeOfFunction(value);\n if (field.type === \"TABLE\") {\n numBytes += 2;\n }\n }\n return numBytes;\n };\n encode.RECORD = encode.TABLE;\n sizeOf.RECORD = sizeOf.TABLE;\n encode.LITERAL = function(v) {\n return v;\n };\n sizeOf.LITERAL = function(v) {\n return v.length;\n };\n function Table(tableName, fields, options) {\n if (fields.length && (fields[0].name !== \"coverageFormat\" || fields[0].value === 1)) {\n for (var i = 0; i < fields.length; i += 1) {\n var field = fields[i];\n this[field.name] = field.value;\n }\n }\n this.tableName = tableName;\n this.fields = fields;\n if (options) {\n var optionKeys = Object.keys(options);\n for (var i$1 = 0; i$1 < optionKeys.length; i$1 += 1) {\n var k = optionKeys[i$1];\n var v = options[k];\n if (this[k] !== void 0) {\n this[k] = v;\n }\n }\n }\n }\n Table.prototype.encode = function() {\n return encode.TABLE(this);\n };\n Table.prototype.sizeOf = function() {\n return sizeOf.TABLE(this);\n };\n function ushortList(itemName, list, count) {\n if (count === void 0) {\n count = list.length;\n }\n var fields = new Array(list.length + 1);\n fields[0] = { name: itemName + \"Count\", type: \"USHORT\", value: count };\n for (var i = 0; i < list.length; i++) {\n fields[i + 1] = { name: itemName + i, type: \"USHORT\", value: list[i] };\n }\n return fields;\n }\n function tableList(itemName, records, itemCallback) {\n var count = records.length;\n var fields = new Array(count + 1);\n fields[0] = { name: itemName + \"Count\", type: \"USHORT\", value: count };\n for (var i = 0; i < count; i++) {\n fields[i + 1] = { name: itemName + i, type: \"TABLE\", value: itemCallback(records[i], i) };\n }\n return fields;\n }\n function recordList(itemName, records, itemCallback) {\n var count = records.length;\n var fields = [];\n fields[0] = { name: itemName + \"Count\", type: \"USHORT\", value: count };\n for (var i = 0; i < count; i++) {\n fields = fields.concat(itemCallback(records[i], i));\n }\n return fields;\n }\n function Coverage(coverageTable) {\n if (coverageTable.format === 1) {\n Table.call(\n this,\n \"coverageTable\",\n [{ name: \"coverageFormat\", type: \"USHORT\", value: 1 }].concat(ushortList(\"glyph\", coverageTable.glyphs))\n );\n } else if (coverageTable.format === 2) {\n Table.call(\n this,\n \"coverageTable\",\n [{ name: \"coverageFormat\", type: \"USHORT\", value: 2 }].concat(\n recordList(\"rangeRecord\", coverageTable.ranges, function(RangeRecord) {\n return [\n { name: \"startGlyphID\", type: \"USHORT\", value: RangeRecord.start },\n { name: \"endGlyphID\", type: \"USHORT\", value: RangeRecord.end },\n { name: \"startCoverageIndex\", type: \"USHORT\", value: RangeRecord.index }\n ];\n })\n )\n );\n } else {\n check.assert(false, \"Coverage format must be 1 or 2.\");\n }\n }\n Coverage.prototype = Object.create(Table.prototype);\n Coverage.prototype.constructor = Coverage;\n function ScriptList(scriptListTable) {\n Table.call(\n this,\n \"scriptListTable\",\n recordList(\"scriptRecord\", scriptListTable, function(scriptRecord, i) {\n var script = scriptRecord.script;\n var defaultLangSys = script.defaultLangSys;\n check.assert(\n !!defaultLangSys,\n \"Unable to write GSUB: script \" + scriptRecord.tag + \" has no default language system.\"\n );\n return [\n { name: \"scriptTag\" + i, type: \"TAG\", value: scriptRecord.tag },\n {\n name: \"script\" + i,\n type: \"TABLE\",\n value: new Table(\n \"scriptTable\",\n [\n {\n name: \"defaultLangSys\",\n type: \"TABLE\",\n value: new Table(\n \"defaultLangSys\",\n [\n { name: \"lookupOrder\", type: \"USHORT\", value: 0 },\n { name: \"reqFeatureIndex\", type: \"USHORT\", value: defaultLangSys.reqFeatureIndex }\n ].concat(ushortList(\"featureIndex\", defaultLangSys.featureIndexes))\n )\n }\n ].concat(\n recordList(\"langSys\", script.langSysRecords, function(langSysRecord, i2) {\n var langSys = langSysRecord.langSys;\n return [\n { name: \"langSysTag\" + i2, type: \"TAG\", value: langSysRecord.tag },\n {\n name: \"langSys\" + i2,\n type: \"TABLE\",\n value: new Table(\n \"langSys\",\n [\n { name: \"lookupOrder\", type: \"USHORT\", value: 0 },\n { name: \"reqFeatureIndex\", type: \"USHORT\", value: langSys.reqFeatureIndex }\n ].concat(ushortList(\"featureIndex\", langSys.featureIndexes))\n )\n }\n ];\n })\n )\n )\n }\n ];\n })\n );\n }\n ScriptList.prototype = Object.create(Table.prototype);\n ScriptList.prototype.constructor = ScriptList;\n function FeatureList(featureListTable) {\n Table.call(\n this,\n \"featureListTable\",\n recordList(\"featureRecord\", featureListTable, function(featureRecord, i) {\n var feature = featureRecord.feature;\n return [\n { name: \"featureTag\" + i, type: \"TAG\", value: featureRecord.tag },\n {\n name: \"feature\" + i,\n type: \"TABLE\",\n value: new Table(\n \"featureTable\",\n [{ name: \"featureParams\", type: \"USHORT\", value: feature.featureParams }].concat(\n ushortList(\"lookupListIndex\", feature.lookupListIndexes)\n )\n )\n }\n ];\n })\n );\n }\n FeatureList.prototype = Object.create(Table.prototype);\n FeatureList.prototype.constructor = FeatureList;\n function LookupList(lookupListTable, subtableMakers2) {\n Table.call(\n this,\n \"lookupListTable\",\n tableList(\"lookup\", lookupListTable, function(lookupTable) {\n var subtableCallback = subtableMakers2[lookupTable.lookupType];\n check.assert(!!subtableCallback, \"Unable to write GSUB lookup type \" + lookupTable.lookupType + \" tables.\");\n return new Table(\n \"lookupTable\",\n [\n { name: \"lookupType\", type: \"USHORT\", value: lookupTable.lookupType },\n { name: \"lookupFlag\", type: \"USHORT\", value: lookupTable.lookupFlag }\n ].concat(tableList(\"subtable\", lookupTable.subtables, subtableCallback))\n );\n })\n );\n }\n LookupList.prototype = Object.create(Table.prototype);\n LookupList.prototype.constructor = LookupList;\n var table = {\n Table,\n Record: Table,\n Coverage,\n ScriptList,\n FeatureList,\n LookupList,\n ushortList,\n tableList,\n recordList\n };\n function getByte(dataView, offset) {\n return dataView.getUint8(offset);\n }\n function getUShort(dataView, offset) {\n return dataView.getUint16(offset, false);\n }\n function getShort(dataView, offset) {\n return dataView.getInt16(offset, false);\n }\n function getULong(dataView, offset) {\n return dataView.getUint32(offset, false);\n }\n function getFixed(dataView, offset) {\n var decimal = dataView.getInt16(offset, false);\n var fraction = dataView.getUint16(offset + 2, false);\n return decimal + fraction / 65535;\n }\n function getTag(dataView, offset) {\n var tag = \"\";\n for (var i = offset; i < offset + 4; i += 1) {\n tag += String.fromCharCode(dataView.getInt8(i));\n }\n return tag;\n }\n function getOffset(dataView, offset, offSize) {\n var v = 0;\n for (var i = 0; i < offSize; i += 1) {\n v <<= 8;\n v += dataView.getUint8(offset + i);\n }\n return v;\n }\n function getBytes(dataView, startOffset, endOffset) {\n var bytes = [];\n for (var i = startOffset; i < endOffset; i += 1) {\n bytes.push(dataView.getUint8(i));\n }\n return bytes;\n }\n function bytesToString(bytes) {\n var s = \"\";\n for (var i = 0; i < bytes.length; i += 1) {\n s += String.fromCharCode(bytes[i]);\n }\n return s;\n }\n var typeOffsets = {\n byte: 1,\n uShort: 2,\n short: 2,\n uLong: 4,\n fixed: 4,\n longDateTime: 8,\n tag: 4\n };\n function Parser(data, offset) {\n this.data = data;\n this.offset = offset;\n this.relativeOffset = 0;\n }\n Parser.prototype.parseByte = function() {\n var v = this.data.getUint8(this.offset + this.relativeOffset);\n this.relativeOffset += 1;\n return v;\n };\n Parser.prototype.parseChar = function() {\n var v = this.data.getInt8(this.offset + this.relativeOffset);\n this.relativeOffset += 1;\n return v;\n };\n Parser.prototype.parseCard8 = Parser.prototype.parseByte;\n Parser.prototype.parseUShort = function() {\n var v = this.data.getUint16(this.offset + this.relativeOffset);\n this.relativeOffset += 2;\n return v;\n };\n Parser.prototype.parseCard16 = Parser.prototype.parseUShort;\n Parser.prototype.parseSID = Parser.prototype.parseUShort;\n Parser.prototype.parseOffset16 = Parser.prototype.parseUShort;\n Parser.prototype.parseShort = function() {\n var v = this.data.getInt16(this.offset + this.relativeOffset);\n this.relativeOffset += 2;\n return v;\n };\n Parser.prototype.parseF2Dot14 = function() {\n var v = this.data.getInt16(this.offset + this.relativeOffset) / 16384;\n this.relativeOffset += 2;\n return v;\n };\n Parser.prototype.parseULong = function() {\n var v = getULong(this.data, this.offset + this.relativeOffset);\n this.relativeOffset += 4;\n return v;\n };\n Parser.prototype.parseOffset32 = Parser.prototype.parseULong;\n Parser.prototype.parseFixed = function() {\n var v = getFixed(this.data, this.offset + this.relativeOffset);\n this.relativeOffset += 4;\n return v;\n };\n Parser.prototype.parseString = function(length) {\n var dataView = this.data;\n var offset = this.offset + this.relativeOffset;\n var string = \"\";\n this.relativeOffset += length;\n for (var i = 0; i < length; i++) {\n string += String.fromCharCode(dataView.getUint8(offset + i));\n }\n return string;\n };\n Parser.prototype.parseTag = function() {\n return this.parseString(4);\n };\n Parser.prototype.parseLongDateTime = function() {\n var v = getULong(this.data, this.offset + this.relativeOffset + 4);\n v -= 2082844800;\n this.relativeOffset += 8;\n return v;\n };\n Parser.prototype.parseVersion = function(minorBase) {\n var major = getUShort(this.data, this.offset + this.relativeOffset);\n var minor = getUShort(this.data, this.offset + this.relativeOffset + 2);\n this.relativeOffset += 4;\n if (minorBase === void 0) {\n minorBase = 4096;\n }\n return major + minor / minorBase / 10;\n };\n Parser.prototype.skip = function(type, amount) {\n if (amount === void 0) {\n amount = 1;\n }\n this.relativeOffset += typeOffsets[type] * amount;\n };\n Parser.prototype.parseULongList = function(count) {\n if (count === void 0) {\n count = this.parseULong();\n }\n var offsets = new Array(count);\n var dataView = this.data;\n var offset = this.offset + this.relativeOffset;\n for (var i = 0; i < count; i++) {\n offsets[i] = dataView.getUint32(offset);\n offset += 4;\n }\n this.relativeOffset += count * 4;\n return offsets;\n };\n Parser.prototype.parseOffset16List = Parser.prototype.parseUShortList = function(count) {\n if (count === void 0) {\n count = this.parseUShort();\n }\n var offsets = new Array(count);\n var dataView = this.data;\n var offset = this.offset + this.relativeOffset;\n for (var i = 0; i < count; i++) {\n offsets[i] = dataView.getUint16(offset);\n offset += 2;\n }\n this.relativeOffset += count * 2;\n return offsets;\n };\n Parser.prototype.parseShortList = function(count) {\n var list = new Array(count);\n var dataView = this.data;\n var offset = this.offset + this.relativeOffset;\n for (var i = 0; i < count; i++) {\n list[i] = dataView.getInt16(offset);\n offset += 2;\n }\n this.relativeOffset += count * 2;\n return list;\n };\n Parser.prototype.parseByteList = function(count) {\n var list = new Array(count);\n var dataView = this.data;\n var offset = this.offset + this.relativeOffset;\n for (var i = 0; i < count; i++) {\n list[i] = dataView.getUint8(offset++);\n }\n this.relativeOffset += count;\n return list;\n };\n Parser.prototype.parseList = function(count, itemCallback) {\n if (!itemCallback) {\n itemCallback = count;\n count = this.parseUShort();\n }\n var list = new Array(count);\n for (var i = 0; i < count; i++) {\n list[i] = itemCallback.call(this);\n }\n return list;\n };\n Parser.prototype.parseList32 = function(count, itemCallback) {\n if (!itemCallback) {\n itemCallback = count;\n count = this.parseULong();\n }\n var list = new Array(count);\n for (var i = 0; i < count; i++) {\n list[i] = itemCallback.call(this);\n }\n return list;\n };\n Parser.prototype.parseRecordList = function(count, recordDescription) {\n if (!recordDescription) {\n recordDescription = count;\n count = this.parseUShort();\n }\n var records = new Array(count);\n var fields = Object.keys(recordDescription);\n for (var i = 0; i < count; i++) {\n var rec = {};\n for (var j = 0; j < fields.length; j++) {\n var fieldName = fields[j];\n var fieldType = recordDescription[fieldName];\n rec[fieldName] = fieldType.call(this);\n }\n records[i] = rec;\n }\n return records;\n };\n Parser.prototype.parseRecordList32 = function(count, recordDescription) {\n if (!recordDescription) {\n recordDescription = count;\n count = this.parseULong();\n }\n var records = new Array(count);\n var fields = Object.keys(recordDescription);\n for (var i = 0; i < count; i++) {\n var rec = {};\n for (var j = 0; j < fields.length; j++) {\n var fieldName = fields[j];\n var fieldType = recordDescription[fieldName];\n rec[fieldName] = fieldType.call(this);\n }\n records[i] = rec;\n }\n return records;\n };\n Parser.prototype.parseStruct = function(description) {\n if (typeof description === \"function\") {\n return description.call(this);\n } else {\n var fields = Object.keys(description);\n var struct = {};\n for (var j = 0; j < fields.length; j++) {\n var fieldName = fields[j];\n var fieldType = description[fieldName];\n struct[fieldName] = fieldType.call(this);\n }\n return struct;\n }\n };\n Parser.prototype.parseValueRecord = function(valueFormat) {\n if (valueFormat === void 0) {\n valueFormat = this.parseUShort();\n }\n if (valueFormat === 0) {\n return;\n }\n var valueRecord = {};\n if (valueFormat & 1) {\n valueRecord.xPlacement = this.parseShort();\n }\n if (valueFormat & 2) {\n valueRecord.yPlacement = this.parseShort();\n }\n if (valueFormat & 4) {\n valueRecord.xAdvance = this.parseShort();\n }\n if (valueFormat & 8) {\n valueRecord.yAdvance = this.parseShort();\n }\n if (valueFormat & 16) {\n valueRecord.xPlaDevice = void 0;\n this.parseShort();\n }\n if (valueFormat & 32) {\n valueRecord.yPlaDevice = void 0;\n this.parseShort();\n }\n if (valueFormat & 64) {\n valueRecord.xAdvDevice = void 0;\n this.parseShort();\n }\n if (valueFormat & 128) {\n valueRecord.yAdvDevice = void 0;\n this.parseShort();\n }\n return valueRecord;\n };\n Parser.prototype.parseValueRecordList = function() {\n var valueFormat = this.parseUShort();\n var valueCount = this.parseUShort();\n var values = new Array(valueCount);\n for (var i = 0; i < valueCount; i++) {\n values[i] = this.parseValueRecord(valueFormat);\n }\n return values;\n };\n Parser.prototype.parsePointer = function(description) {\n var structOffset = this.parseOffset16();\n if (structOffset > 0) {\n return new Parser(this.data, this.offset + structOffset).parseStruct(description);\n }\n return void 0;\n };\n Parser.prototype.parsePointer32 = function(description) {\n var structOffset = this.parseOffset32();\n if (structOffset > 0) {\n return new Parser(this.data, this.offset + structOffset).parseStruct(description);\n }\n return void 0;\n };\n Parser.prototype.parseListOfLists = function(itemCallback) {\n var offsets = this.parseOffset16List();\n var count = offsets.length;\n var relativeOffset = this.relativeOffset;\n var list = new Array(count);\n for (var i = 0; i < count; i++) {\n var start = offsets[i];\n if (start === 0) {\n list[i] = void 0;\n continue;\n }\n this.relativeOffset = start;\n if (itemCallback) {\n var subOffsets = this.parseOffset16List();\n var subList = new Array(subOffsets.length);\n for (var j = 0; j < subOffsets.length; j++) {\n this.relativeOffset = start + subOffsets[j];\n subList[j] = itemCallback.call(this);\n }\n list[i] = subList;\n } else {\n list[i] = this.parseUShortList();\n }\n }\n this.relativeOffset = relativeOffset;\n return list;\n };\n Parser.prototype.parseCoverage = function() {\n var startOffset = this.offset + this.relativeOffset;\n var format = this.parseUShort();\n var count = this.parseUShort();\n if (format === 1) {\n return {\n format: 1,\n glyphs: this.parseUShortList(count)\n };\n } else if (format === 2) {\n var ranges = new Array(count);\n for (var i = 0; i < count; i++) {\n ranges[i] = {\n start: this.parseUShort(),\n end: this.parseUShort(),\n index: this.parseUShort()\n };\n }\n return {\n format: 2,\n ranges\n };\n }\n throw new Error(\"0x\" + startOffset.toString(16) + \": Coverage format must be 1 or 2.\");\n };\n Parser.prototype.parseClassDef = function() {\n var startOffset = this.offset + this.relativeOffset;\n var format = this.parseUShort();\n if (format === 1) {\n return {\n format: 1,\n startGlyph: this.parseUShort(),\n classes: this.parseUShortList()\n };\n } else if (format === 2) {\n return {\n format: 2,\n ranges: this.parseRecordList({\n start: Parser.uShort,\n end: Parser.uShort,\n classId: Parser.uShort\n })\n };\n }\n throw new Error(\"0x\" + startOffset.toString(16) + \": ClassDef format must be 1 or 2.\");\n };\n Parser.list = function(count, itemCallback) {\n return function() {\n return this.parseList(count, itemCallback);\n };\n };\n Parser.list32 = function(count, itemCallback) {\n return function() {\n return this.parseList32(count, itemCallback);\n };\n };\n Parser.recordList = function(count, recordDescription) {\n return function() {\n return this.parseRecordList(count, recordDescription);\n };\n };\n Parser.recordList32 = function(count, recordDescription) {\n return function() {\n return this.parseRecordList32(count, recordDescription);\n };\n };\n Parser.pointer = function(description) {\n return function() {\n return this.parsePointer(description);\n };\n };\n Parser.pointer32 = function(description) {\n return function() {\n return this.parsePointer32(description);\n };\n };\n Parser.tag = Parser.prototype.parseTag;\n Parser.byte = Parser.prototype.parseByte;\n Parser.uShort = Parser.offset16 = Parser.prototype.parseUShort;\n Parser.uShortList = Parser.prototype.parseUShortList;\n Parser.uLong = Parser.offset32 = Parser.prototype.parseULong;\n Parser.uLongList = Parser.prototype.parseULongList;\n Parser.struct = Parser.prototype.parseStruct;\n Parser.coverage = Parser.prototype.parseCoverage;\n Parser.classDef = Parser.prototype.parseClassDef;\n var langSysTable = {\n reserved: Parser.uShort,\n reqFeatureIndex: Parser.uShort,\n featureIndexes: Parser.uShortList\n };\n Parser.prototype.parseScriptList = function() {\n return this.parsePointer(\n Parser.recordList({\n tag: Parser.tag,\n script: Parser.pointer({\n defaultLangSys: Parser.pointer(langSysTable),\n langSysRecords: Parser.recordList({\n tag: Parser.tag,\n langSys: Parser.pointer(langSysTable)\n })\n })\n })\n ) || [];\n };\n Parser.prototype.parseFeatureList = function() {\n return this.parsePointer(\n Parser.recordList({\n tag: Parser.tag,\n feature: Parser.pointer({\n featureParams: Parser.offset16,\n lookupListIndexes: Parser.uShortList\n })\n })\n ) || [];\n };\n Parser.prototype.parseLookupList = function(lookupTableParsers) {\n return this.parsePointer(\n Parser.list(\n Parser.pointer(function() {\n var lookupType = this.parseUShort();\n check.argument(1 <= lookupType && lookupType <= 9, \"GPOS/GSUB lookup type \" + lookupType + \" unknown.\");\n var lookupFlag = this.parseUShort();\n var useMarkFilteringSet = lookupFlag & 16;\n return {\n lookupType,\n lookupFlag,\n subtables: this.parseList(Parser.pointer(lookupTableParsers[lookupType])),\n markFilteringSet: useMarkFilteringSet ? this.parseUShort() : void 0\n };\n })\n )\n ) || [];\n };\n Parser.prototype.parseFeatureVariationsList = function() {\n return this.parsePointer32(function() {\n var majorVersion = this.parseUShort();\n var minorVersion = this.parseUShort();\n check.argument(majorVersion === 1 && minorVersion < 1, \"GPOS/GSUB feature variations table unknown.\");\n var featureVariations = this.parseRecordList32({\n conditionSetOffset: Parser.offset32,\n featureTableSubstitutionOffset: Parser.offset32\n });\n return featureVariations;\n }) || [];\n };\n var parse = {\n getByte,\n getCard8: getByte,\n getUShort,\n getCard16: getUShort,\n getShort,\n getULong,\n getFixed,\n getTag,\n getOffset,\n getBytes,\n bytesToString,\n Parser\n };\n function parseCmapTableFormat12(cmap2, p) {\n p.parseUShort();\n cmap2.length = p.parseULong();\n cmap2.language = p.parseULong();\n var groupCount;\n cmap2.groupCount = groupCount = p.parseULong();\n cmap2.glyphIndexMap = {};\n for (var i = 0; i < groupCount; i += 1) {\n var startCharCode = p.parseULong();\n var endCharCode = p.parseULong();\n var startGlyphId = p.parseULong();\n for (var c = startCharCode; c <= endCharCode; c += 1) {\n cmap2.glyphIndexMap[c] = startGlyphId;\n startGlyphId++;\n }\n }\n }\n function parseCmapTableFormat4(cmap2, p, data, start, offset) {\n cmap2.length = p.parseUShort();\n cmap2.language = p.parseUShort();\n var segCount;\n cmap2.segCount = segCount = p.parseUShort() >> 1;\n p.skip(\"uShort\", 3);\n cmap2.glyphIndexMap = {};\n var endCountParser = new parse.Parser(data, start + offset + 14);\n var startCountParser = new parse.Parser(data, start + offset + 16 + segCount * 2);\n var idDeltaParser = new parse.Parser(data, start + offset + 16 + segCount * 4);\n var idRangeOffsetParser = new parse.Parser(data, start + offset + 16 + segCount * 6);\n var glyphIndexOffset = start + offset + 16 + segCount * 8;\n for (var i = 0; i < segCount - 1; i += 1) {\n var glyphIndex = void 0;\n var endCount = endCountParser.parseUShort();\n var startCount = startCountParser.parseUShort();\n var idDelta = idDeltaParser.parseShort();\n var idRangeOffset = idRangeOffsetParser.parseUShort();\n for (var c = startCount; c <= endCount; c += 1) {\n if (idRangeOffset !== 0) {\n glyphIndexOffset = idRangeOffsetParser.offset + idRangeOffsetParser.relativeOffset - 2;\n glyphIndexOffset += idRangeOffset;\n glyphIndexOffset += (c - startCount) * 2;\n glyphIndex = parse.getUShort(data, glyphIndexOffset);\n if (glyphIndex !== 0) {\n glyphIndex = glyphIndex + idDelta & 65535;\n }\n } else {\n glyphIndex = c + idDelta & 65535;\n }\n cmap2.glyphIndexMap[c] = glyphIndex;\n }\n }\n }\n function parseCmapTable(data, start) {\n var cmap2 = {};\n cmap2.version = parse.getUShort(data, start);\n check.argument(cmap2.version === 0, \"cmap table version should be 0.\");\n cmap2.numTables = parse.getUShort(data, start + 2);\n var offset = -1;\n for (var i = cmap2.numTables - 1; i >= 0; i -= 1) {\n var platformId = parse.getUShort(data, start + 4 + i * 8);\n var encodingId = parse.getUShort(data, start + 4 + i * 8 + 2);\n if (platformId === 3 && (encodingId === 0 || encodingId === 1 || encodingId === 10) || platformId === 0 && (encodingId === 0 || encodingId === 1 || encodingId === 2 || encodingId === 3 || encodingId === 4)) {\n offset = parse.getULong(data, start + 4 + i * 8 + 4);\n break;\n }\n }\n if (offset === -1) {\n throw new Error(\"No valid cmap sub-tables found.\");\n }\n var p = new parse.Parser(data, start + offset);\n cmap2.format = p.parseUShort();\n if (cmap2.format === 12) {\n parseCmapTableFormat12(cmap2, p);\n } else if (cmap2.format === 4) {\n parseCmapTableFormat4(cmap2, p, data, start, offset);\n } else {\n throw new Error(\"Only format 4 and 12 cmap tables are supported (found format \" + cmap2.format + \").\");\n }\n return cmap2;\n }\n function addSegment(t, code, glyphIndex) {\n t.segments.push({\n end: code,\n start: code,\n delta: -(code - glyphIndex),\n offset: 0,\n glyphIndex\n });\n }\n function addTerminatorSegment(t) {\n t.segments.push({\n end: 65535,\n start: 65535,\n delta: 1,\n offset: 0\n });\n }\n function makeCmapTable(glyphs) {\n var isPlan0Only = true;\n var i;\n for (i = glyphs.length - 1; i > 0; i -= 1) {\n var g = glyphs.get(i);\n if (g.unicode > 65535) {\n console.log(\"Adding CMAP format 12 (needed!)\");\n isPlan0Only = false;\n break;\n }\n }\n var cmapTable = [\n { name: \"version\", type: \"USHORT\", value: 0 },\n { name: \"numTables\", type: \"USHORT\", value: isPlan0Only ? 1 : 2 },\n // CMAP 4 header\n { name: \"platformID\", type: \"USHORT\", value: 3 },\n { name: \"encodingID\", type: \"USHORT\", value: 1 },\n { name: \"offset\", type: \"ULONG\", value: isPlan0Only ? 12 : 12 + 8 }\n ];\n if (!isPlan0Only) {\n cmapTable = cmapTable.concat([\n // CMAP 12 header\n { name: \"cmap12PlatformID\", type: \"USHORT\", value: 3 },\n // We encode only for PlatformID = 3 (Windows) because it is supported everywhere\n { name: \"cmap12EncodingID\", type: \"USHORT\", value: 10 },\n { name: \"cmap12Offset\", type: \"ULONG\", value: 0 }\n ]);\n }\n cmapTable = cmapTable.concat([\n // CMAP 4 Subtable\n { name: \"format\", type: \"USHORT\", value: 4 },\n { name: \"cmap4Length\", type: \"USHORT\", value: 0 },\n { name: \"language\", type: \"USHORT\", value: 0 },\n { name: \"segCountX2\", type: \"USHORT\", value: 0 },\n { name: \"searchRange\", type: \"USHORT\", value: 0 },\n { name: \"entrySelector\", type: \"USHORT\", value: 0 },\n { name: \"rangeShift\", type: \"USHORT\", value: 0 }\n ]);\n var t = new table.Table(\"cmap\", cmapTable);\n t.segments = [];\n for (i = 0; i < glyphs.length; i += 1) {\n var glyph = glyphs.get(i);\n for (var j = 0; j < glyph.unicodes.length; j += 1) {\n addSegment(t, glyph.unicodes[j], i);\n }\n t.segments = t.segments.sort(function(a, b) {\n return a.start - b.start;\n });\n }\n addTerminatorSegment(t);\n var segCount = t.segments.length;\n var segCountToRemove = 0;\n var endCounts = [];\n var startCounts = [];\n var idDeltas = [];\n var idRangeOffsets = [];\n var glyphIds = [];\n var cmap12Groups = [];\n for (i = 0; i < segCount; i += 1) {\n var segment = t.segments[i];\n if (segment.end <= 65535 && segment.start <= 65535) {\n endCounts = endCounts.concat({ name: \"end_\" + i, type: \"USHORT\", value: segment.end });\n startCounts = startCounts.concat({ name: \"start_\" + i, type: \"USHORT\", value: segment.start });\n idDeltas = idDeltas.concat({ name: \"idDelta_\" + i, type: \"SHORT\", value: segment.delta });\n idRangeOffsets = idRangeOffsets.concat({ name: \"idRangeOffset_\" + i, type: \"USHORT\", value: segment.offset });\n if (segment.glyphId !== void 0) {\n glyphIds = glyphIds.concat({ name: \"glyph_\" + i, type: \"USHORT\", value: segment.glyphId });\n }\n } else {\n segCountToRemove += 1;\n }\n if (!isPlan0Only && segment.glyphIndex !== void 0) {\n cmap12Groups = cmap12Groups.concat({ name: \"cmap12Start_\" + i, type: \"ULONG\", value: segment.start });\n cmap12Groups = cmap12Groups.concat({ name: \"cmap12End_\" + i, type: \"ULONG\", value: segment.end });\n cmap12Groups = cmap12Groups.concat({ name: \"cmap12Glyph_\" + i, type: \"ULONG\", value: segment.glyphIndex });\n }\n }\n t.segCountX2 = (segCount - segCountToRemove) * 2;\n t.searchRange = Math.pow(2, Math.floor(Math.log(segCount - segCountToRemove) / Math.log(2))) * 2;\n t.entrySelector = Math.log(t.searchRange / 2) / Math.log(2);\n t.rangeShift = t.segCountX2 - t.searchRange;\n t.fields = t.fields.concat(endCounts);\n t.fields.push({ name: \"reservedPad\", type: \"USHORT\", value: 0 });\n t.fields = t.fields.concat(startCounts);\n t.fields = t.fields.concat(idDeltas);\n t.fields = t.fields.concat(idRangeOffsets);\n t.fields = t.fields.concat(glyphIds);\n t.cmap4Length = 14 + // Subtable header\n endCounts.length * 2 + 2 + // reservedPad\n startCounts.length * 2 + idDeltas.length * 2 + idRangeOffsets.length * 2 + glyphIds.length * 2;\n if (!isPlan0Only) {\n var cmap12Length = 16 + // Subtable header\n cmap12Groups.length * 4;\n t.cmap12Offset = 12 + 2 * 2 + 4 + t.cmap4Length;\n t.fields = t.fields.concat([\n { name: \"cmap12Format\", type: \"USHORT\", value: 12 },\n { name: \"cmap12Reserved\", type: \"USHORT\", value: 0 },\n { name: \"cmap12Length\", type: \"ULONG\", value: cmap12Length },\n { name: \"cmap12Language\", type: \"ULONG\", value: 0 },\n { name: \"cmap12nGroups\", type: \"ULONG\", value: cmap12Groups.length / 3 }\n ]);\n t.fields = t.fields.concat(cmap12Groups);\n }\n return t;\n }\n var cmap = { parse: parseCmapTable, make: makeCmapTable };\n var cffStandardStrings = [\n \".notdef\",\n \"space\",\n \"exclam\",\n \"quotedbl\",\n \"numbersign\",\n \"dollar\",\n \"percent\",\n \"ampersand\",\n \"quoteright\",\n \"parenleft\",\n \"parenright\",\n \"asterisk\",\n \"plus\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"slash\",\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n \"colon\",\n \"semicolon\",\n \"less\",\n \"equal\",\n \"greater\",\n \"question\",\n \"at\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n \"bracketleft\",\n \"backslash\",\n \"bracketright\",\n \"asciicircum\",\n \"underscore\",\n \"quoteleft\",\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"e\",\n \"f\",\n \"g\",\n \"h\",\n \"i\",\n \"j\",\n \"k\",\n \"l\",\n \"m\",\n \"n\",\n \"o\",\n \"p\",\n \"q\",\n \"r\",\n \"s\",\n \"t\",\n \"u\",\n \"v\",\n \"w\",\n \"x\",\n \"y\",\n \"z\",\n \"braceleft\",\n \"bar\",\n \"braceright\",\n \"asciitilde\",\n \"exclamdown\",\n \"cent\",\n \"sterling\",\n \"fraction\",\n \"yen\",\n \"florin\",\n \"section\",\n \"currency\",\n \"quotesingle\",\n \"quotedblleft\",\n \"guillemotleft\",\n \"guilsinglleft\",\n \"guilsinglright\",\n \"fi\",\n \"fl\",\n \"endash\",\n \"dagger\",\n \"daggerdbl\",\n \"periodcentered\",\n \"paragraph\",\n \"bullet\",\n \"quotesinglbase\",\n \"quotedblbase\",\n \"quotedblright\",\n \"guillemotright\",\n \"ellipsis\",\n \"perthousand\",\n \"questiondown\",\n \"grave\",\n \"acute\",\n \"circumflex\",\n \"tilde\",\n \"macron\",\n \"breve\",\n \"dotaccent\",\n \"dieresis\",\n \"ring\",\n \"cedilla\",\n \"hungarumlaut\",\n \"ogonek\",\n \"caron\",\n \"emdash\",\n \"AE\",\n \"ordfeminine\",\n \"Lslash\",\n \"Oslash\",\n \"OE\",\n \"ordmasculine\",\n \"ae\",\n \"dotlessi\",\n \"lslash\",\n \"oslash\",\n \"oe\",\n \"germandbls\",\n \"onesuperior\",\n \"logicalnot\",\n \"mu\",\n \"trademark\",\n \"Eth\",\n \"onehalf\",\n \"plusminus\",\n \"Thorn\",\n \"onequarter\",\n \"divide\",\n \"brokenbar\",\n \"degree\",\n \"thorn\",\n \"threequarters\",\n \"twosuperior\",\n \"registered\",\n \"minus\",\n \"eth\",\n \"multiply\",\n \"threesuperior\",\n \"copyright\",\n \"Aacute\",\n \"Acircumflex\",\n \"Adieresis\",\n \"Agrave\",\n \"Aring\",\n \"Atilde\",\n \"Ccedilla\",\n \"Eacute\",\n \"Ecircumflex\",\n \"Edieresis\",\n \"Egrave\",\n \"Iacute\",\n \"Icircumflex\",\n \"Idieresis\",\n \"Igrave\",\n \"Ntilde\",\n \"Oacute\",\n \"Ocircumflex\",\n \"Odieresis\",\n \"Ograve\",\n \"Otilde\",\n \"Scaron\",\n \"Uacute\",\n \"Ucircumflex\",\n \"Udieresis\",\n \"Ugrave\",\n \"Yacute\",\n \"Ydieresis\",\n \"Zcaron\",\n \"aacute\",\n \"acircumflex\",\n \"adieresis\",\n \"agrave\",\n \"aring\",\n \"atilde\",\n \"ccedilla\",\n \"eacute\",\n \"ecircumflex\",\n \"edieresis\",\n \"egrave\",\n \"iacute\",\n \"icircumflex\",\n \"idieresis\",\n \"igrave\",\n \"ntilde\",\n \"oacute\",\n \"ocircumflex\",\n \"odieresis\",\n \"ograve\",\n \"otilde\",\n \"scaron\",\n \"uacute\",\n \"ucircumflex\",\n \"udieresis\",\n \"ugrave\",\n \"yacute\",\n \"ydieresis\",\n \"zcaron\",\n \"exclamsmall\",\n \"Hungarumlautsmall\",\n \"dollaroldstyle\",\n \"dollarsuperior\",\n \"ampersandsmall\",\n \"Acutesmall\",\n \"parenleftsuperior\",\n \"parenrightsuperior\",\n \"266 ff\",\n \"onedotenleader\",\n \"zerooldstyle\",\n \"oneoldstyle\",\n \"twooldstyle\",\n \"threeoldstyle\",\n \"fouroldstyle\",\n \"fiveoldstyle\",\n \"sixoldstyle\",\n \"sevenoldstyle\",\n \"eightoldstyle\",\n \"nineoldstyle\",\n \"commasuperior\",\n \"threequartersemdash\",\n \"periodsuperior\",\n \"questionsmall\",\n \"asuperior\",\n \"bsuperior\",\n \"centsuperior\",\n \"dsuperior\",\n \"esuperior\",\n \"isuperior\",\n \"lsuperior\",\n \"msuperior\",\n \"nsuperior\",\n \"osuperior\",\n \"rsuperior\",\n \"ssuperior\",\n \"tsuperior\",\n \"ff\",\n \"ffi\",\n \"ffl\",\n \"parenleftinferior\",\n \"parenrightinferior\",\n \"Circumflexsmall\",\n \"hyphensuperior\",\n \"Gravesmall\",\n \"Asmall\",\n \"Bsmall\",\n \"Csmall\",\n \"Dsmall\",\n \"Esmall\",\n \"Fsmall\",\n \"Gsmall\",\n \"Hsmall\",\n \"Ismall\",\n \"Jsmall\",\n \"Ksmall\",\n \"Lsmall\",\n \"Msmall\",\n \"Nsmall\",\n \"Osmall\",\n \"Psmall\",\n \"Qsmall\",\n \"Rsmall\",\n \"Ssmall\",\n \"Tsmall\",\n \"Usmall\",\n \"Vsmall\",\n \"Wsmall\",\n \"Xsmall\",\n \"Ysmall\",\n \"Zsmall\",\n \"colonmonetary\",\n \"onefitted\",\n \"rupiah\",\n \"Tildesmall\",\n \"exclamdownsmall\",\n \"centoldstyle\",\n \"Lslashsmall\",\n \"Scaronsmall\",\n \"Zcaronsmall\",\n \"Dieresissmall\",\n \"Brevesmall\",\n \"Caronsmall\",\n \"Dotaccentsmall\",\n \"Macronsmall\",\n \"figuredash\",\n \"hypheninferior\",\n \"Ogoneksmall\",\n \"Ringsmall\",\n \"Cedillasmall\",\n \"questiondownsmall\",\n \"oneeighth\",\n \"threeeighths\",\n \"fiveeighths\",\n \"seveneighths\",\n \"onethird\",\n \"twothirds\",\n \"zerosuperior\",\n \"foursuperior\",\n \"fivesuperior\",\n \"sixsuperior\",\n \"sevensuperior\",\n \"eightsuperior\",\n \"ninesuperior\",\n \"zeroinferior\",\n \"oneinferior\",\n \"twoinferior\",\n \"threeinferior\",\n \"fourinferior\",\n \"fiveinferior\",\n \"sixinferior\",\n \"seveninferior\",\n \"eightinferior\",\n \"nineinferior\",\n \"centinferior\",\n \"dollarinferior\",\n \"periodinferior\",\n \"commainferior\",\n \"Agravesmall\",\n \"Aacutesmall\",\n \"Acircumflexsmall\",\n \"Atildesmall\",\n \"Adieresissmall\",\n \"Aringsmall\",\n \"AEsmall\",\n \"Ccedillasmall\",\n \"Egravesmall\",\n \"Eacutesmall\",\n \"Ecircumflexsmall\",\n \"Edieresissmall\",\n \"Igravesmall\",\n \"Iacutesmall\",\n \"Icircumflexsmall\",\n \"Idieresissmall\",\n \"Ethsmall\",\n \"Ntildesmall\",\n \"Ogravesmall\",\n \"Oacutesmall\",\n \"Ocircumflexsmall\",\n \"Otildesmall\",\n \"Odieresissmall\",\n \"OEsmall\",\n \"Oslashsmall\",\n \"Ugravesmall\",\n \"Uacutesmall\",\n \"Ucircumflexsmall\",\n \"Udieresissmall\",\n \"Yacutesmall\",\n \"Thornsmall\",\n \"Ydieresissmall\",\n \"001.000\",\n \"001.001\",\n \"001.002\",\n \"001.003\",\n \"Black\",\n \"Bold\",\n \"Book\",\n \"Light\",\n \"Medium\",\n \"Regular\",\n \"Roman\",\n \"Semibold\"\n ];\n var cffStandardEncoding = [\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"space\",\n \"exclam\",\n \"quotedbl\",\n \"numbersign\",\n \"dollar\",\n \"percent\",\n \"ampersand\",\n \"quoteright\",\n \"parenleft\",\n \"parenright\",\n \"asterisk\",\n \"plus\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"slash\",\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n \"colon\",\n \"semicolon\",\n \"less\",\n \"equal\",\n \"greater\",\n \"question\",\n \"at\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n \"bracketleft\",\n \"backslash\",\n \"bracketright\",\n \"asciicircum\",\n \"underscore\",\n \"quoteleft\",\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"e\",\n \"f\",\n \"g\",\n \"h\",\n \"i\",\n \"j\",\n \"k\",\n \"l\",\n \"m\",\n \"n\",\n \"o\",\n \"p\",\n \"q\",\n \"r\",\n \"s\",\n \"t\",\n \"u\",\n \"v\",\n \"w\",\n \"x\",\n \"y\",\n \"z\",\n \"braceleft\",\n \"bar\",\n \"braceright\",\n \"asciitilde\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"exclamdown\",\n \"cent\",\n \"sterling\",\n \"fraction\",\n \"yen\",\n \"florin\",\n \"section\",\n \"currency\",\n \"quotesingle\",\n \"quotedblleft\",\n \"guillemotleft\",\n \"guilsinglleft\",\n \"guilsinglright\",\n \"fi\",\n \"fl\",\n \"\",\n \"endash\",\n \"dagger\",\n \"daggerdbl\",\n \"periodcentered\",\n \"\",\n \"paragraph\",\n \"bullet\",\n \"quotesinglbase\",\n \"quotedblbase\",\n \"quotedblright\",\n \"guillemotright\",\n \"ellipsis\",\n \"perthousand\",\n \"\",\n \"questiondown\",\n \"\",\n \"grave\",\n \"acute\",\n \"circumflex\",\n \"tilde\",\n \"macron\",\n \"breve\",\n \"dotaccent\",\n \"dieresis\",\n \"\",\n \"ring\",\n \"cedilla\",\n \"\",\n \"hungarumlaut\",\n \"ogonek\",\n \"caron\",\n \"emdash\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"AE\",\n \"\",\n \"ordfeminine\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"Lslash\",\n \"Oslash\",\n \"OE\",\n \"ordmasculine\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"ae\",\n \"\",\n \"\",\n \"\",\n \"dotlessi\",\n \"\",\n \"\",\n \"lslash\",\n \"oslash\",\n \"oe\",\n \"germandbls\"\n ];\n var cffExpertEncoding = [\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"space\",\n \"exclamsmall\",\n \"Hungarumlautsmall\",\n \"\",\n \"dollaroldstyle\",\n \"dollarsuperior\",\n \"ampersandsmall\",\n \"Acutesmall\",\n \"parenleftsuperior\",\n \"parenrightsuperior\",\n \"twodotenleader\",\n \"onedotenleader\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"fraction\",\n \"zerooldstyle\",\n \"oneoldstyle\",\n \"twooldstyle\",\n \"threeoldstyle\",\n \"fouroldstyle\",\n \"fiveoldstyle\",\n \"sixoldstyle\",\n \"sevenoldstyle\",\n \"eightoldstyle\",\n \"nineoldstyle\",\n \"colon\",\n \"semicolon\",\n \"commasuperior\",\n \"threequartersemdash\",\n \"periodsuperior\",\n \"questionsmall\",\n \"\",\n \"asuperior\",\n \"bsuperior\",\n \"centsuperior\",\n \"dsuperior\",\n \"esuperior\",\n \"\",\n \"\",\n \"isuperior\",\n \"\",\n \"\",\n \"lsuperior\",\n \"msuperior\",\n \"nsuperior\",\n \"osuperior\",\n \"\",\n \"\",\n \"rsuperior\",\n \"ssuperior\",\n \"tsuperior\",\n \"\",\n \"ff\",\n \"fi\",\n \"fl\",\n \"ffi\",\n \"ffl\",\n \"parenleftinferior\",\n \"\",\n \"parenrightinferior\",\n \"Circumflexsmall\",\n \"hyphensuperior\",\n \"Gravesmall\",\n \"Asmall\",\n \"Bsmall\",\n \"Csmall\",\n \"Dsmall\",\n \"Esmall\",\n \"Fsmall\",\n \"Gsmall\",\n \"Hsmall\",\n \"Ismall\",\n \"Jsmall\",\n \"Ksmall\",\n \"Lsmall\",\n \"Msmall\",\n \"Nsmall\",\n \"Osmall\",\n \"Psmall\",\n \"Qsmall\",\n \"Rsmall\",\n \"Ssmall\",\n \"Tsmall\",\n \"Usmall\",\n \"Vsmall\",\n \"Wsmall\",\n \"Xsmall\",\n \"Ysmall\",\n \"Zsmall\",\n \"colonmonetary\",\n \"onefitted\",\n \"rupiah\",\n \"Tildesmall\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"\",\n \"exclamdownsmall\",\n \"centoldstyle\",\n \"Lslashsmall\",\n \"\",\n \"\",\n \"Scaronsmall\",\n \"Zcaronsmall\",\n \"Dieresissmall\",\n \"Brevesmall\",\n \"Caronsmall\",\n \"\",\n \"Dotaccentsmall\",\n \"\",\n \"\",\n \"Macronsmall\",\n \"\",\n \"\",\n \"figuredash\",\n \"hypheninferior\",\n \"\",\n \"\",\n \"Ogoneksmall\",\n \"Ringsmall\",\n \"Cedillasmall\",\n \"\",\n \"\",\n \"\",\n \"onequarter\",\n \"onehalf\",\n \"threequarters\",\n \"questiondownsmall\",\n \"oneeighth\",\n \"threeeighths\",\n \"fiveeighths\",\n \"seveneighths\",\n \"onethird\",\n \"twothirds\",\n \"\",\n \"\",\n \"zerosuperior\",\n \"onesuperior\",\n \"twosuperior\",\n \"threesuperior\",\n \"foursuperior\",\n \"fivesuperior\",\n \"sixsuperior\",\n \"sevensuperior\",\n \"eightsuperior\",\n \"ninesuperior\",\n \"zeroinferior\",\n \"oneinferior\",\n \"twoinferior\",\n \"threeinferior\",\n \"fourinferior\",\n \"fiveinferior\",\n \"sixinferior\",\n \"seveninferior\",\n \"eightinferior\",\n \"nineinferior\",\n \"centinferior\",\n \"dollarinferior\",\n \"periodinferior\",\n \"commainferior\",\n \"Agravesmall\",\n \"Aacutesmall\",\n \"Acircumflexsmall\",\n \"Atildesmall\",\n \"Adieresissmall\",\n \"Aringsmall\",\n \"AEsmall\",\n \"Ccedillasmall\",\n \"Egravesmall\",\n \"Eacutesmall\",\n \"Ecircumflexsmall\",\n \"Edieresissmall\",\n \"Igravesmall\",\n \"Iacutesmall\",\n \"Icircumflexsmall\",\n \"Idieresissmall\",\n \"Ethsmall\",\n \"Ntildesmall\",\n \"Ogravesmall\",\n \"Oacutesmall\",\n \"Ocircumflexsmall\",\n \"Otildesmall\",\n \"Odieresissmall\",\n \"OEsmall\",\n \"Oslashsmall\",\n \"Ugravesmall\",\n \"Uacutesmall\",\n \"Ucircumflexsmall\",\n \"Udieresissmall\",\n \"Yacutesmall\",\n \"Thornsmall\",\n \"Ydieresissmall\"\n ];\n var standardNames = [\n \".notdef\",\n \".null\",\n \"nonmarkingreturn\",\n \"space\",\n \"exclam\",\n \"quotedbl\",\n \"numbersign\",\n \"dollar\",\n \"percent\",\n \"ampersand\",\n \"quotesingle\",\n \"parenleft\",\n \"parenright\",\n \"asterisk\",\n \"plus\",\n \"comma\",\n \"hyphen\",\n \"period\",\n \"slash\",\n \"zero\",\n \"one\",\n \"two\",\n \"three\",\n \"four\",\n \"five\",\n \"six\",\n \"seven\",\n \"eight\",\n \"nine\",\n \"colon\",\n \"semicolon\",\n \"less\",\n \"equal\",\n \"greater\",\n \"question\",\n \"at\",\n \"A\",\n \"B\",\n \"C\",\n \"D\",\n \"E\",\n \"F\",\n \"G\",\n \"H\",\n \"I\",\n \"J\",\n \"K\",\n \"L\",\n \"M\",\n \"N\",\n \"O\",\n \"P\",\n \"Q\",\n \"R\",\n \"S\",\n \"T\",\n \"U\",\n \"V\",\n \"W\",\n \"X\",\n \"Y\",\n \"Z\",\n \"bracketleft\",\n \"backslash\",\n \"bracketright\",\n \"asciicircum\",\n \"underscore\",\n \"grave\",\n \"a\",\n \"b\",\n \"c\",\n \"d\",\n \"e\",\n \"f\",\n \"g\",\n \"h\",\n \"i\",\n \"j\",\n \"k\",\n \"l\",\n \"m\",\n \"n\",\n \"o\",\n \"p\",\n \"q\",\n \"r\",\n \"s\",\n \"t\",\n \"u\",\n \"v\",\n \"w\",\n \"x\",\n \"y\",\n \"z\",\n \"braceleft\",\n \"bar\",\n \"braceright\",\n \"asciitilde\",\n \"Adieresis\",\n \"Aring\",\n \"Ccedilla\",\n \"Eacute\",\n \"Ntilde\",\n \"Odieresis\",\n \"Udieresis\",\n \"aacute\",\n \"agrave\",\n \"acircumflex\",\n \"adieresis\",\n \"atilde\",\n \"aring\",\n \"ccedilla\",\n \"eacute\",\n \"egrave\",\n \"ecircumflex\",\n \"edieresis\",\n \"iacute\",\n \"igrave\",\n \"icircumflex\",\n \"idieresis\",\n \"ntilde\",\n \"oacute\",\n \"ograve\",\n \"ocircumflex\",\n \"odieresis\",\n \"otilde\",\n \"uacute\",\n \"ugrave\",\n \"ucircumflex\",\n \"udieresis\",\n \"dagger\",\n \"degree\",\n \"cent\",\n \"sterling\",\n \"section\",\n \"bullet\",\n \"paragraph\",\n \"germandbls\",\n \"registered\",\n \"copyright\",\n \"trademark\",\n \"acute\",\n \"dieresis\",\n \"notequal\",\n \"AE\",\n \"Oslash\",\n \"infinity\",\n \"plusminus\",\n \"lessequal\",\n \"greaterequal\",\n \"yen\",\n \"mu\",\n \"partialdiff\",\n \"summation\",\n \"product\",\n \"pi\",\n \"integral\",\n \"ordfeminine\",\n \"ordmasculine\",\n \"Omega\",\n \"ae\",\n \"oslash\",\n \"questiondown\",\n \"exclamdown\",\n \"logicalnot\",\n \"radical\",\n \"florin\",\n \"approxequal\",\n \"Delta\",\n \"guillemotleft\",\n \"guillemotright\",\n \"ellipsis\",\n \"nonbreakingspace\",\n \"Agrave\",\n \"Atilde\",\n \"Otilde\",\n \"OE\",\n \"oe\",\n \"endash\",\n \"emdash\",\n \"quotedblleft\",\n \"quotedblright\",\n \"quoteleft\",\n \"quoteright\",\n \"divide\",\n \"lozenge\",\n \"ydieresis\",\n \"Ydieresis\",\n \"fraction\",\n \"currency\",\n \"guilsinglleft\",\n \"guilsinglright\",\n \"fi\",\n \"fl\",\n \"daggerdbl\",\n \"periodcentered\",\n \"quotesinglbase\",\n \"quotedblbase\",\n \"perthousand\",\n \"Acircumflex\",\n \"Ecircumflex\",\n \"Aacute\",\n \"Edieresis\",\n \"Egrave\",\n \"Iacute\",\n \"Icircumflex\",\n \"Idieresis\",\n \"Igrave\",\n \"Oacute\",\n \"Ocircumflex\",\n \"apple\",\n \"Ograve\",\n \"Uacute\",\n \"Ucircumflex\",\n \"Ugrave\",\n \"dotlessi\",\n \"circumflex\",\n \"tilde\",\n \"macron\",\n \"breve\",\n \"dotaccent\",\n \"ring\",\n \"cedilla\",\n \"hungarumlaut\",\n \"ogonek\",\n \"caron\",\n \"Lslash\",\n \"lslash\",\n \"Scaron\",\n \"scaron\",\n \"Zcaron\",\n \"zcaron\",\n \"brokenbar\",\n \"Eth\",\n \"eth\",\n \"Yacute\",\n \"yacute\",\n \"Thorn\",\n \"thorn\",\n \"minus\",\n \"multiply\",\n \"onesuperior\",\n \"twosuperior\",\n \"threesuperior\",\n \"onehalf\",\n \"onequarter\",\n \"threequarters\",\n \"franc\",\n \"Gbreve\",\n \"gbreve\",\n \"Idotaccent\",\n \"Scedilla\",\n \"scedilla\",\n \"Cacute\",\n \"cacute\",\n \"Ccaron\",\n \"ccaron\",\n \"dcroat\"\n ];\n function DefaultEncoding(font) {\n this.font = font;\n }\n DefaultEncoding.prototype.charToGlyphIndex = function(c) {\n var code = c.codePointAt(0);\n var glyphs = this.font.glyphs;\n if (glyphs) {\n for (var i = 0; i < glyphs.length; i += 1) {\n var glyph = glyphs.get(i);\n for (var j = 0; j < glyph.unicodes.length; j += 1) {\n if (glyph.unicodes[j] === code) {\n return i;\n }\n }\n }\n }\n return null;\n };\n function CmapEncoding(cmap2) {\n this.cmap = cmap2;\n }\n CmapEncoding.prototype.charToGlyphIndex = function(c) {\n return this.cmap.glyphIndexMap[c.codePointAt(0)] || 0;\n };\n function CffEncoding(encoding, charset) {\n this.encoding = encoding;\n this.charset = charset;\n }\n CffEncoding.prototype.charToGlyphIndex = function(s) {\n var code = s.codePointAt(0);\n var charName = this.encoding[code];\n return this.charset.indexOf(charName);\n };\n function GlyphNames(post2) {\n switch (post2.version) {\n case 1:\n this.names = standardNames.slice();\n break;\n case 2:\n this.names = new Array(post2.numberOfGlyphs);\n for (var i = 0; i < post2.numberOfGlyphs; i++) {\n if (post2.glyphNameIndex[i] < standardNames.length) {\n this.names[i] = standardNames[post2.glyphNameIndex[i]];\n } else {\n this.names[i] = post2.names[post2.glyphNameIndex[i] - standardNames.length];\n }\n }\n break;\n case 2.5:\n this.names = new Array(post2.numberOfGlyphs);\n for (var i$1 = 0; i$1 < post2.numberOfGlyphs; i$1++) {\n this.names[i$1] = standardNames[i$1 + post2.glyphNameIndex[i$1]];\n }\n break;\n case 3:\n this.names = [];\n break;\n default:\n this.names = [];\n break;\n }\n }\n GlyphNames.prototype.nameToGlyphIndex = function(name) {\n return this.names.indexOf(name);\n };\n GlyphNames.prototype.glyphIndexToName = function(gid) {\n return this.names[gid];\n };\n function addGlyphNamesAll(font) {\n var glyph;\n var glyphIndexMap = font.tables.cmap.glyphIndexMap;\n var charCodes = Object.keys(glyphIndexMap);\n for (var i = 0; i < charCodes.length; i += 1) {\n var c = charCodes[i];\n var glyphIndex = glyphIndexMap[c];\n glyph = font.glyphs.get(glyphIndex);\n glyph.addUnicode(parseInt(c));\n }\n for (var i$1 = 0; i$1 < font.glyphs.length; i$1 += 1) {\n glyph = font.glyphs.get(i$1);\n if (font.cffEncoding) {\n if (font.isCIDFont) {\n glyph.name = \"gid\" + i$1;\n } else {\n glyph.name = font.cffEncoding.charset[i$1];\n }\n } else if (font.glyphNames.names) {\n glyph.name = font.glyphNames.glyphIndexToName(i$1);\n }\n }\n }\n function addGlyphNamesToUnicodeMap(font) {\n font._IndexToUnicodeMap = {};\n var glyphIndexMap = font.tables.cmap.glyphIndexMap;\n var charCodes = Object.keys(glyphIndexMap);\n for (var i = 0; i < charCodes.length; i += 1) {\n var c = charCodes[i];\n var glyphIndex = glyphIndexMap[c];\n if (font._IndexToUnicodeMap[glyphIndex] === void 0) {\n font._IndexToUnicodeMap[glyphIndex] = {\n unicodes: [parseInt(c)]\n };\n } else {\n font._IndexToUnicodeMap[glyphIndex].unicodes.push(parseInt(c));\n }\n }\n }\n function addGlyphNames(font, opt) {\n if (opt.lowMemory) {\n addGlyphNamesToUnicodeMap(font);\n } else {\n addGlyphNamesAll(font);\n }\n }\n function line(ctx, x1, y1, x2, y2) {\n ctx.beginPath();\n ctx.moveTo(x1, y1);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n }\n var draw = { line };\n function getPathDefinition(glyph, path) {\n var _path = path || new Path();\n return {\n configurable: true,\n get: function() {\n if (typeof _path === \"function\") {\n _path = _path();\n }\n return _path;\n },\n set: function(p) {\n _path = p;\n }\n };\n }\n function Glyph(options) {\n this.bindConstructorValues(options);\n }\n Glyph.prototype.bindConstructorValues = function(options) {\n this.index = options.index || 0;\n this.name = options.name || null;\n this.unicode = options.unicode || void 0;\n this.unicodes = options.unicodes || options.unicode !== void 0 ? [options.unicode] : [];\n if (\"xMin\" in options) {\n this.xMin = options.xMin;\n }\n if (\"yMin\" in options) {\n this.yMin = options.yMin;\n }\n if (\"xMax\" in options) {\n this.xMax = options.xMax;\n }\n if (\"yMax\" in options) {\n this.yMax = options.yMax;\n }\n if (\"advanceWidth\" in options) {\n this.advanceWidth = options.advanceWidth;\n }\n Object.defineProperty(this, \"path\", getPathDefinition(this, options.path));\n };\n Glyph.prototype.addUnicode = function(unicode) {\n if (this.unicodes.length === 0) {\n this.unicode = unicode;\n }\n this.unicodes.push(unicode);\n };\n Glyph.prototype.getBoundingBox = function() {\n return this.path.getBoundingBox();\n };\n Glyph.prototype.getPath = function(x, y, fontSize, options, font) {\n x = x !== void 0 ? x : 0;\n y = y !== void 0 ? y : 0;\n fontSize = fontSize !== void 0 ? fontSize : 72;\n var commands;\n var hPoints;\n if (!options) {\n options = {};\n }\n var xScale = options.xScale;\n var yScale = options.yScale;\n if (options.hinting && font && font.hinting) {\n hPoints = this.path && font.hinting.exec(this, fontSize);\n }\n if (hPoints) {\n commands = font.hinting.getCommands(hPoints);\n x = Math.round(x);\n y = Math.round(y);\n xScale = yScale = 1;\n } else {\n commands = this.path.commands;\n var scale = 1 / (this.path.unitsPerEm || 1e3) * fontSize;\n if (xScale === void 0) {\n xScale = scale;\n }\n if (yScale === void 0) {\n yScale = scale;\n }\n }\n var p = new Path();\n for (var i = 0; i < commands.length; i += 1) {\n var cmd = commands[i];\n if (cmd.type === \"M\") {\n p.moveTo(x + cmd.x * xScale, y + -cmd.y * yScale);\n } else if (cmd.type === \"L\") {\n p.lineTo(x + cmd.x * xScale, y + -cmd.y * yScale);\n } else if (cmd.type === \"Q\") {\n p.quadraticCurveTo(x + cmd.x1 * xScale, y + -cmd.y1 * yScale, x + cmd.x * xScale, y + -cmd.y * yScale);\n } else if (cmd.type === \"C\") {\n p.curveTo(\n x + cmd.x1 * xScale,\n y + -cmd.y1 * yScale,\n x + cmd.x2 * xScale,\n y + -cmd.y2 * yScale,\n x + cmd.x * xScale,\n y + -cmd.y * yScale\n );\n } else if (cmd.type === \"Z\") {\n p.closePath();\n }\n }\n return p;\n };\n Glyph.prototype.getContours = function() {\n if (this.points === void 0) {\n return [];\n }\n var contours = [];\n var currentContour = [];\n for (var i = 0; i < this.points.length; i += 1) {\n var pt = this.points[i];\n currentContour.push(pt);\n if (pt.lastPointOfContour) {\n contours.push(currentContour);\n currentContour = [];\n }\n }\n check.argument(currentContour.length === 0, \"There are still points left in the current contour.\");\n return contours;\n };\n Glyph.prototype.getMetrics = function() {\n var commands = this.path.commands;\n var xCoords = [];\n var yCoords = [];\n for (var i = 0; i < commands.length; i += 1) {\n var cmd = commands[i];\n if (cmd.type !== \"Z\") {\n xCoords.push(cmd.x);\n yCoords.push(cmd.y);\n }\n if (cmd.type === \"Q\" || cmd.type === \"C\") {\n xCoords.push(cmd.x1);\n yCoords.push(cmd.y1);\n }\n if (cmd.type === \"C\") {\n xCoords.push(cmd.x2);\n yCoords.push(cmd.y2);\n }\n }\n var metrics = {\n xMin: Math.min.apply(null, xCoords),\n yMin: Math.min.apply(null, yCoords),\n xMax: Math.max.apply(null, xCoords),\n yMax: Math.max.apply(null, yCoords),\n leftSideBearing: this.leftSideBearing\n };\n if (!isFinite(metrics.xMin)) {\n metrics.xMin = 0;\n }\n if (!isFinite(metrics.xMax)) {\n metrics.xMax = this.advanceWidth;\n }\n if (!isFinite(metrics.yMin)) {\n metrics.yMin = 0;\n }\n if (!isFinite(metrics.yMax)) {\n metrics.yMax = 0;\n }\n metrics.rightSideBearing = this.advanceWidth - metrics.leftSideBearing - (metrics.xMax - metrics.xMin);\n return metrics;\n };\n Glyph.prototype.draw = function(ctx, x, y, fontSize, options) {\n this.getPath(x, y, fontSize, options).draw(ctx);\n };\n Glyph.prototype.drawPoints = function(ctx, x, y, fontSize) {\n function drawCircles(l, x2, y2, scale2) {\n ctx.beginPath();\n for (var j = 0; j < l.length; j += 1) {\n ctx.moveTo(x2 + l[j].x * scale2, y2 + l[j].y * scale2);\n ctx.arc(x2 + l[j].x * scale2, y2 + l[j].y * scale2, 2, 0, Math.PI * 2, false);\n }\n ctx.closePath();\n ctx.fill();\n }\n x = x !== void 0 ? x : 0;\n y = y !== void 0 ? y : 0;\n fontSize = fontSize !== void 0 ? fontSize : 24;\n var scale = 1 / this.path.unitsPerEm * fontSize;\n var blueCircles = [];\n var redCircles = [];\n var path = this.path;\n for (var i = 0; i < path.commands.length; i += 1) {\n var cmd = path.commands[i];\n if (cmd.x !== void 0) {\n blueCircles.push({ x: cmd.x, y: -cmd.y });\n }\n if (cmd.x1 !== void 0) {\n redCircles.push({ x: cmd.x1, y: -cmd.y1 });\n }\n if (cmd.x2 !== void 0) {\n redCircles.push({ x: cmd.x2, y: -cmd.y2 });\n }\n }\n ctx.fillStyle = \"blue\";\n drawCircles(blueCircles, x, y, scale);\n ctx.fillStyle = \"red\";\n drawCircles(redCircles, x, y, scale);\n };\n Glyph.prototype.drawMetrics = function(ctx, x, y, fontSize) {\n var scale;\n x = x !== void 0 ? x : 0;\n y = y !== void 0 ? y : 0;\n fontSize = fontSize !== void 0 ? fontSize : 24;\n scale = 1 / this.path.unitsPerEm * fontSize;\n ctx.lineWidth = 1;\n ctx.strokeStyle = \"black\";\n draw.line(ctx, x, -1e4, x, 1e4);\n draw.line(ctx, -1e4, y, 1e4, y);\n var xMin = this.xMin || 0;\n var yMin = this.yMin || 0;\n var xMax = this.xMax || 0;\n var yMax = this.yMax || 0;\n var advanceWidth = this.advanceWidth || 0;\n ctx.strokeStyle = \"blue\";\n draw.line(ctx, x + xMin * scale, -1e4, x + xMin * scale, 1e4);\n draw.line(ctx, x + xMax * scale, -1e4, x + xMax * scale, 1e4);\n draw.line(ctx, -1e4, y + -yMin * scale, 1e4, y + -yMin * scale);\n draw.line(ctx, -1e4, y + -yMax * scale, 1e4, y + -yMax * scale);\n ctx.strokeStyle = \"green\";\n draw.line(ctx, x + advanceWidth * scale, -1e4, x + advanceWidth * scale, 1e4);\n };\n function defineDependentProperty(glyph, externalName, internalName) {\n Object.defineProperty(glyph, externalName, {\n get: function() {\n glyph.path;\n return glyph[internalName];\n },\n set: function(newValue) {\n glyph[internalName] = newValue;\n },\n enumerable: true,\n configurable: true\n });\n }\n function GlyphSet(font, glyphs) {\n this.font = font;\n this.glyphs = {};\n if (Array.isArray(glyphs)) {\n for (var i = 0; i < glyphs.length; i++) {\n var glyph = glyphs[i];\n glyph.path.unitsPerEm = font.unitsPerEm;\n this.glyphs[i] = glyph;\n }\n }\n this.length = glyphs && glyphs.length || 0;\n }\n GlyphSet.prototype.get = function(index) {\n if (this.glyphs[index] === void 0) {\n this.font._push(index);\n if (typeof this.glyphs[index] === \"function\") {\n this.glyphs[index] = this.glyphs[index]();\n }\n var glyph = this.glyphs[index];\n var unicodeObj = this.font._IndexToUnicodeMap[index];\n if (unicodeObj) {\n for (var j = 0; j < unicodeObj.unicodes.length; j++) {\n glyph.addUnicode(unicodeObj.unicodes[j]);\n }\n }\n if (this.font.cffEncoding) {\n if (this.font.isCIDFont) {\n glyph.name = \"gid\" + index;\n } else {\n glyph.name = this.font.cffEncoding.charset[index];\n }\n } else if (this.font.glyphNames.names) {\n glyph.name = this.font.glyphNames.glyphIndexToName(index);\n }\n this.glyphs[index].advanceWidth = this.font._hmtxTableData[index].advanceWidth;\n this.glyphs[index].leftSideBearing = this.font._hmtxTableData[index].leftSideBearing;\n } else {\n if (typeof this.glyphs[index] === \"function\") {\n this.glyphs[index] = this.glyphs[index]();\n }\n }\n return this.glyphs[index];\n };\n GlyphSet.prototype.push = function(index, loader) {\n this.glyphs[index] = loader;\n this.length++;\n };\n function glyphLoader(font, index) {\n return new Glyph({ index, font });\n }\n function ttfGlyphLoader(font, index, parseGlyph2, data, position, buildPath2) {\n return function() {\n var glyph = new Glyph({ index, font });\n glyph.path = function() {\n parseGlyph2(glyph, data, position);\n var path = buildPath2(font.glyphs, glyph);\n path.unitsPerEm = font.unitsPerEm;\n return path;\n };\n defineDependentProperty(glyph, \"xMin\", \"_xMin\");\n defineDependentProperty(glyph, \"xMax\", \"_xMax\");\n defineDependentProperty(glyph, \"yMin\", \"_yMin\");\n defineDependentProperty(glyph, \"yMax\", \"_yMax\");\n return glyph;\n };\n }\n function cffGlyphLoader(font, index, parseCFFCharstring2, charstring) {\n return function() {\n var glyph = new Glyph({ index, font });\n glyph.path = function() {\n var path = parseCFFCharstring2(font, glyph, charstring);\n path.unitsPerEm = font.unitsPerEm;\n return path;\n };\n return glyph;\n };\n }\n var glyphset = {\n GlyphSet,\n glyphLoader,\n ttfGlyphLoader,\n cffGlyphLoader\n };\n function equals(a, b) {\n if (a === b) {\n return true;\n } else if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) {\n return false;\n }\n for (var i = 0; i < a.length; i += 1) {\n if (!equals(a[i], b[i])) {\n return false;\n }\n }\n return true;\n } else {\n return false;\n }\n }\n function calcCFFSubroutineBias(subrs) {\n var bias;\n if (subrs.length < 1240) {\n bias = 107;\n } else if (subrs.length < 33900) {\n bias = 1131;\n } else {\n bias = 32768;\n }\n return bias;\n }\n function parseCFFIndex(data, start, conversionFn) {\n var offsets = [];\n var objects = [];\n var count = parse.getCard16(data, start);\n var objectOffset;\n var endOffset;\n if (count !== 0) {\n var offsetSize = parse.getByte(data, start + 2);\n objectOffset = start + (count + 1) * offsetSize + 2;\n var pos = start + 3;\n for (var i = 0; i < count + 1; i += 1) {\n offsets.push(parse.getOffset(data, pos, offsetSize));\n pos += offsetSize;\n }\n endOffset = objectOffset + offsets[count];\n } else {\n endOffset = start + 2;\n }\n for (var i$1 = 0; i$1 < offsets.length - 1; i$1 += 1) {\n var value = parse.getBytes(data, objectOffset + offsets[i$1], objectOffset + offsets[i$1 + 1]);\n if (conversionFn) {\n value = conversionFn(value);\n }\n objects.push(value);\n }\n return { objects, startOffset: start, endOffset };\n }\n function parseCFFIndexLowMemory(data, start) {\n var offsets = [];\n var count = parse.getCard16(data, start);\n var objectOffset;\n var endOffset;\n if (count !== 0) {\n var offsetSize = parse.getByte(data, start + 2);\n objectOffset = start + (count + 1) * offsetSize + 2;\n var pos = start + 3;\n for (var i = 0; i < count + 1; i += 1) {\n offsets.push(parse.getOffset(data, pos, offsetSize));\n pos += offsetSize;\n }\n endOffset = objectOffset + offsets[count];\n } else {\n endOffset = start + 2;\n }\n return { offsets, startOffset: start, endOffset };\n }\n function getCffIndexObject(i, offsets, data, start, conversionFn) {\n var count = parse.getCard16(data, start);\n var objectOffset = 0;\n if (count !== 0) {\n var offsetSize = parse.getByte(data, start + 2);\n objectOffset = start + (count + 1) * offsetSize + 2;\n }\n var value = parse.getBytes(data, objectOffset + offsets[i], objectOffset + offsets[i + 1]);\n if (conversionFn) {\n value = conversionFn(value);\n }\n return value;\n }\n function parseFloatOperand(parser) {\n var s = \"\";\n var eof = 15;\n var lookup = [\"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \".\", \"E\", \"E-\", null, \"-\"];\n while (true) {\n var b = parser.parseByte();\n var n1 = b >> 4;\n var n2 = b & 15;\n if (n1 === eof) {\n break;\n }\n s += lookup[n1];\n if (n2 === eof) {\n break;\n }\n s += lookup[n2];\n }\n return parseFloat(s);\n }\n function parseOperand(parser, b0) {\n var b1;\n var b2;\n var b3;\n var b4;\n if (b0 === 28) {\n b1 = parser.parseByte();\n b2 = parser.parseByte();\n return b1 << 8 | b2;\n }\n if (b0 === 29) {\n b1 = parser.parseByte();\n b2 = parser.parseByte();\n b3 = parser.parseByte();\n b4 = parser.parseByte();\n return b1 << 24 | b2 << 16 | b3 << 8 | b4;\n }\n if (b0 === 30) {\n return parseFloatOperand(parser);\n }\n if (b0 >= 32 && b0 <= 246) {\n return b0 - 139;\n }\n if (b0 >= 247 && b0 <= 250) {\n b1 = parser.parseByte();\n return (b0 - 247) * 256 + b1 + 108;\n }\n if (b0 >= 251 && b0 <= 254) {\n b1 = parser.parseByte();\n return -(b0 - 251) * 256 - b1 - 108;\n }\n throw new Error(\"Invalid b0 \" + b0);\n }\n function entriesToObject(entries) {\n var o = {};\n for (var i = 0; i < entries.length; i += 1) {\n var key = entries[i][0];\n var values = entries[i][1];\n var value = void 0;\n if (values.length === 1) {\n value = values[0];\n } else {\n value = values;\n }\n if (o.hasOwnProperty(key) && !isNaN(o[key])) {\n throw new Error(\"Object \" + o + \" already has key \" + key);\n }\n o[key] = value;\n }\n return o;\n }\n function parseCFFDict(data, start, size) {\n start = start !== void 0 ? start : 0;\n var parser = new parse.Parser(data, start);\n var entries = [];\n var operands = [];\n size = size !== void 0 ? size : data.length;\n while (parser.relativeOffset < size) {\n var op = parser.parseByte();\n if (op <= 21) {\n if (op === 12) {\n op = 1200 + parser.parseByte();\n }\n entries.push([op, operands]);\n operands = [];\n } else {\n operands.push(parseOperand(parser, op));\n }\n }\n return entriesToObject(entries);\n }\n function getCFFString(strings, index) {\n if (index <= 390) {\n index = cffStandardStrings[index];\n } else {\n index = strings[index - 391];\n }\n return index;\n }\n function interpretDict(dict, meta2, strings) {\n var newDict = {};\n var value;\n for (var i = 0; i < meta2.length; i += 1) {\n var m = meta2[i];\n if (Array.isArray(m.type)) {\n var values = [];\n values.length = m.type.length;\n for (var j = 0; j < m.type.length; j++) {\n value = dict[m.op] !== void 0 ? dict[m.op][j] : void 0;\n if (value === void 0) {\n value = m.value !== void 0 && m.value[j] !== void 0 ? m.value[j] : null;\n }\n if (m.type[j] === \"SID\") {\n value = getCFFString(strings, value);\n }\n values[j] = value;\n }\n newDict[m.name] = values;\n } else {\n value = dict[m.op];\n if (value === void 0) {\n value = m.value !== void 0 ? m.value : null;\n }\n if (m.type === \"SID\") {\n value = getCFFString(strings, value);\n }\n newDict[m.name] = value;\n }\n }\n return newDict;\n }\n function parseCFFHeader(data, start) {\n var header = {};\n header.formatMajor = parse.getCard8(data, start);\n header.formatMinor = parse.getCard8(data, start + 1);\n header.size = parse.getCard8(data, start + 2);\n header.offsetSize = parse.getCard8(data, start + 3);\n header.startOffset = start;\n header.endOffset = start + 4;\n return header;\n }\n var TOP_DICT_META = [\n { name: \"version\", op: 0, type: \"SID\" },\n { name: \"notice\", op: 1, type: \"SID\" },\n { name: \"copyright\", op: 1200, type: \"SID\" },\n { name: \"fullName\", op: 2, type: \"SID\" },\n { name: \"familyName\", op: 3, type: \"SID\" },\n { name: \"weight\", op: 4, type: \"SID\" },\n { name: \"isFixedPitch\", op: 1201, type: \"number\", value: 0 },\n { name: \"italicAngle\", op: 1202, type: \"number\", value: 0 },\n { name: \"underlinePosition\", op: 1203, type: \"number\", value: -100 },\n { name: \"underlineThickness\", op: 1204, type: \"number\", value: 50 },\n { name: \"paintType\", op: 1205, type: \"number\", value: 0 },\n { name: \"charstringType\", op: 1206, type: \"number\", value: 2 },\n {\n name: \"fontMatrix\",\n op: 1207,\n type: [\"real\", \"real\", \"real\", \"real\", \"real\", \"real\"],\n value: [1e-3, 0, 0, 1e-3, 0, 0]\n },\n { name: \"uniqueId\", op: 13, type: \"number\" },\n { name: \"fontBBox\", op: 5, type: [\"number\", \"number\", \"number\", \"number\"], value: [0, 0, 0, 0] },\n { name: \"strokeWidth\", op: 1208, type: \"number\", value: 0 },\n { name: \"xuid\", op: 14, type: [], value: null },\n { name: \"charset\", op: 15, type: \"offset\", value: 0 },\n { name: \"encoding\", op: 16, type: \"offset\", value: 0 },\n { name: \"charStrings\", op: 17, type: \"offset\", value: 0 },\n { name: \"private\", op: 18, type: [\"number\", \"offset\"], value: [0, 0] },\n { name: \"ros\", op: 1230, type: [\"SID\", \"SID\", \"number\"] },\n { name: \"cidFontVersion\", op: 1231, type: \"number\", value: 0 },\n { name: \"cidFontRevision\", op: 1232, type: \"number\", value: 0 },\n { name: \"cidFontType\", op: 1233, type: \"number\", value: 0 },\n { name: \"cidCount\", op: 1234, type: \"number\", value: 8720 },\n { name: \"uidBase\", op: 1235, type: \"number\" },\n { name: \"fdArray\", op: 1236, type: \"offset\" },\n { name: \"fdSelect\", op: 1237, type: \"offset\" },\n { name: \"fontName\", op: 1238, type: \"SID\" }\n ];\n var PRIVATE_DICT_META = [\n { name: \"subrs\", op: 19, type: \"offset\", value: 0 },\n { name: \"defaultWidthX\", op: 20, type: \"number\", value: 0 },\n { name: \"nominalWidthX\", op: 21, type: \"number\", value: 0 }\n ];\n function parseCFFTopDict(data, strings) {\n var dict = parseCFFDict(data, 0, data.byteLength);\n return interpretDict(dict, TOP_DICT_META, strings);\n }\n function parseCFFPrivateDict(data, start, size, strings) {\n var dict = parseCFFDict(data, start, size);\n return interpretDict(dict, PRIVATE_DICT_META, strings);\n }\n function gatherCFFTopDicts(data, start, cffIndex, strings) {\n var topDictArray = [];\n for (var iTopDict = 0; iTopDict < cffIndex.length; iTopDict += 1) {\n var topDictData = new DataView(new Uint8Array(cffIndex[iTopDict]).buffer);\n var topDict = parseCFFTopDict(topDictData, strings);\n topDict._subrs = [];\n topDict._subrsBias = 0;\n topDict._defaultWidthX = 0;\n topDict._nominalWidthX = 0;\n var privateSize = topDict.private[0];\n var privateOffset = topDict.private[1];\n if (privateSize !== 0 && privateOffset !== 0) {\n var privateDict = parseCFFPrivateDict(data, privateOffset + start, privateSize, strings);\n topDict._defaultWidthX = privateDict.defaultWidthX;\n topDict._nominalWidthX = privateDict.nominalWidthX;\n if (privateDict.subrs !== 0) {\n var subrOffset = privateOffset + privateDict.subrs;\n var subrIndex = parseCFFIndex(data, subrOffset + start);\n topDict._subrs = subrIndex.objects;\n topDict._subrsBias = calcCFFSubroutineBias(topDict._subrs);\n }\n topDict._privateDict = privateDict;\n }\n topDictArray.push(topDict);\n }\n return topDictArray;\n }\n function parseCFFCharset(data, start, nGlyphs, strings) {\n var sid;\n var count;\n var parser = new parse.Parser(data, start);\n nGlyphs -= 1;\n var charset = [\".notdef\"];\n var format = parser.parseCard8();\n if (format === 0) {\n for (var i = 0; i < nGlyphs; i += 1) {\n sid = parser.parseSID();\n charset.push(getCFFString(strings, sid));\n }\n } else if (format === 1) {\n while (charset.length <= nGlyphs) {\n sid = parser.parseSID();\n count = parser.parseCard8();\n for (var i$1 = 0; i$1 <= count; i$1 += 1) {\n charset.push(getCFFString(strings, sid));\n sid += 1;\n }\n }\n } else if (format === 2) {\n while (charset.length <= nGlyphs) {\n sid = parser.parseSID();\n count = parser.parseCard16();\n for (var i$2 = 0; i$2 <= count; i$2 += 1) {\n charset.push(getCFFString(strings, sid));\n sid += 1;\n }\n }\n } else {\n throw new Error(\"Unknown charset format \" + format);\n }\n return charset;\n }\n function parseCFFEncoding(data, start, charset) {\n var code;\n var enc = {};\n var parser = new parse.Parser(data, start);\n var format = parser.parseCard8();\n if (format === 0) {\n var nCodes = parser.parseCard8();\n for (var i = 0; i < nCodes; i += 1) {\n code = parser.parseCard8();\n enc[code] = i;\n }\n } else if (format === 1) {\n var nRanges = parser.parseCard8();\n code = 1;\n for (var i$1 = 0; i$1 < nRanges; i$1 += 1) {\n var first = parser.parseCard8();\n var nLeft = parser.parseCard8();\n for (var j = first; j <= first + nLeft; j += 1) {\n enc[j] = code;\n code += 1;\n }\n }\n } else {\n throw new Error(\"Unknown encoding format \" + format);\n }\n return new CffEncoding(enc, charset);\n }\n function parseCFFCharstring(font, glyph, code) {\n var c1x;\n var c1y;\n var c2x;\n var c2y;\n var p = new Path();\n var stack = [];\n var nStems = 0;\n var haveWidth = false;\n var open = false;\n var x = 0;\n var y = 0;\n var subrs;\n var subrsBias;\n var defaultWidthX;\n var nominalWidthX;\n if (font.isCIDFont) {\n var fdIndex = font.tables.cff.topDict._fdSelect[glyph.index];\n var fdDict = font.tables.cff.topDict._fdArray[fdIndex];\n subrs = fdDict._subrs;\n subrsBias = fdDict._subrsBias;\n defaultWidthX = fdDict._defaultWidthX;\n nominalWidthX = fdDict._nominalWidthX;\n } else {\n subrs = font.tables.cff.topDict._subrs;\n subrsBias = font.tables.cff.topDict._subrsBias;\n defaultWidthX = font.tables.cff.topDict._defaultWidthX;\n nominalWidthX = font.tables.cff.topDict._nominalWidthX;\n }\n var width = defaultWidthX;\n function newContour(x2, y2) {\n if (open) {\n p.closePath();\n }\n p.moveTo(x2, y2);\n open = true;\n }\n function parseStems() {\n var hasWidthArg;\n hasWidthArg = stack.length % 2 !== 0;\n if (hasWidthArg && !haveWidth) {\n width = stack.shift() + nominalWidthX;\n }\n nStems += stack.length >> 1;\n stack.length = 0;\n haveWidth = true;\n }\n function parse2(code2) {\n var b1;\n var b2;\n var b3;\n var b4;\n var codeIndex;\n var subrCode;\n var jpx;\n var jpy;\n var c3x;\n var c3y;\n var c4x;\n var c4y;\n var i = 0;\n while (i < code2.length) {\n var v = code2[i];\n i += 1;\n switch (v) {\n case 1:\n parseStems();\n break;\n case 3:\n parseStems();\n break;\n case 4:\n if (stack.length > 1 && !haveWidth) {\n width = stack.shift() + nominalWidthX;\n haveWidth = true;\n }\n y += stack.pop();\n newContour(x, y);\n break;\n case 5:\n while (stack.length > 0) {\n x += stack.shift();\n y += stack.shift();\n p.lineTo(x, y);\n }\n break;\n case 6:\n while (stack.length > 0) {\n x += stack.shift();\n p.lineTo(x, y);\n if (stack.length === 0) {\n break;\n }\n y += stack.shift();\n p.lineTo(x, y);\n }\n break;\n case 7:\n while (stack.length > 0) {\n y += stack.shift();\n p.lineTo(x, y);\n if (stack.length === 0) {\n break;\n }\n x += stack.shift();\n p.lineTo(x, y);\n }\n break;\n case 8:\n while (stack.length > 0) {\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n case 10:\n codeIndex = stack.pop() + subrsBias;\n subrCode = subrs[codeIndex];\n if (subrCode) {\n parse2(subrCode);\n }\n break;\n case 11:\n return;\n case 12:\n v = code2[i];\n i += 1;\n switch (v) {\n case 35:\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n jpx = c2x + stack.shift();\n jpy = c2y + stack.shift();\n c3x = jpx + stack.shift();\n c3y = jpy + stack.shift();\n c4x = c3x + stack.shift();\n c4y = c3y + stack.shift();\n x = c4x + stack.shift();\n y = c4y + stack.shift();\n stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);\n p.curveTo(c3x, c3y, c4x, c4y, x, y);\n break;\n case 34:\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n jpx = c2x + stack.shift();\n jpy = c2y;\n c3x = jpx + stack.shift();\n c3y = c2y;\n c4x = c3x + stack.shift();\n c4y = y;\n x = c4x + stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);\n p.curveTo(c3x, c3y, c4x, c4y, x, y);\n break;\n case 36:\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n jpx = c2x + stack.shift();\n jpy = c2y;\n c3x = jpx + stack.shift();\n c3y = c2y;\n c4x = c3x + stack.shift();\n c4y = c3y + stack.shift();\n x = c4x + stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);\n p.curveTo(c3x, c3y, c4x, c4y, x, y);\n break;\n case 37:\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n jpx = c2x + stack.shift();\n jpy = c2y + stack.shift();\n c3x = jpx + stack.shift();\n c3y = jpy + stack.shift();\n c4x = c3x + stack.shift();\n c4y = c3y + stack.shift();\n if (Math.abs(c4x - x) > Math.abs(c4y - y)) {\n x = c4x + stack.shift();\n } else {\n y = c4y + stack.shift();\n }\n p.curveTo(c1x, c1y, c2x, c2y, jpx, jpy);\n p.curveTo(c3x, c3y, c4x, c4y, x, y);\n break;\n default:\n console.log(\"Glyph \" + glyph.index + \": unknown operator 1200\" + v);\n stack.length = 0;\n }\n break;\n case 14:\n if (stack.length > 0 && !haveWidth) {\n width = stack.shift() + nominalWidthX;\n haveWidth = true;\n }\n if (open) {\n p.closePath();\n open = false;\n }\n break;\n case 18:\n parseStems();\n break;\n case 19:\n case 20:\n parseStems();\n i += nStems + 7 >> 3;\n break;\n case 21:\n if (stack.length > 2 && !haveWidth) {\n width = stack.shift() + nominalWidthX;\n haveWidth = true;\n }\n y += stack.pop();\n x += stack.pop();\n newContour(x, y);\n break;\n case 22:\n if (stack.length > 1 && !haveWidth) {\n width = stack.shift() + nominalWidthX;\n haveWidth = true;\n }\n x += stack.pop();\n newContour(x, y);\n break;\n case 23:\n parseStems();\n break;\n case 24:\n while (stack.length > 2) {\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n x += stack.shift();\n y += stack.shift();\n p.lineTo(x, y);\n break;\n case 25:\n while (stack.length > 6) {\n x += stack.shift();\n y += stack.shift();\n p.lineTo(x, y);\n }\n c1x = x + stack.shift();\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n break;\n case 26:\n if (stack.length % 2) {\n x += stack.shift();\n }\n while (stack.length > 0) {\n c1x = x;\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x;\n y = c2y + stack.shift();\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n case 27:\n if (stack.length % 2) {\n y += stack.shift();\n }\n while (stack.length > 0) {\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y;\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n case 28:\n b1 = code2[i];\n b2 = code2[i + 1];\n stack.push((b1 << 24 | b2 << 16) >> 16);\n i += 2;\n break;\n case 29:\n codeIndex = stack.pop() + font.gsubrsBias;\n subrCode = font.gsubrs[codeIndex];\n if (subrCode) {\n parse2(subrCode);\n }\n break;\n case 30:\n while (stack.length > 0) {\n c1x = x;\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + (stack.length === 1 ? stack.shift() : 0);\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n if (stack.length === 0) {\n break;\n }\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n y = c2y + stack.shift();\n x = c2x + (stack.length === 1 ? stack.shift() : 0);\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n case 31:\n while (stack.length > 0) {\n c1x = x + stack.shift();\n c1y = y;\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n y = c2y + stack.shift();\n x = c2x + (stack.length === 1 ? stack.shift() : 0);\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n if (stack.length === 0) {\n break;\n }\n c1x = x;\n c1y = y + stack.shift();\n c2x = c1x + stack.shift();\n c2y = c1y + stack.shift();\n x = c2x + stack.shift();\n y = c2y + (stack.length === 1 ? stack.shift() : 0);\n p.curveTo(c1x, c1y, c2x, c2y, x, y);\n }\n break;\n default:\n if (v < 32) {\n console.log(\"Glyph \" + glyph.index + \": unknown operator \" + v);\n } else if (v < 247) {\n stack.push(v - 139);\n } else if (v < 251) {\n b1 = code2[i];\n i += 1;\n stack.push((v - 247) * 256 + b1 + 108);\n } else if (v < 255) {\n b1 = code2[i];\n i += 1;\n stack.push(-(v - 251) * 256 - b1 - 108);\n } else {\n b1 = code2[i];\n b2 = code2[i + 1];\n b3 = code2[i + 2];\n b4 = code2[i + 3];\n i += 4;\n stack.push((b1 << 24 | b2 << 16 | b3 << 8 | b4) / 65536);\n }\n }\n }\n }\n parse2(code);\n glyph.advanceWidth = width;\n return p;\n }\n function parseCFFFDSelect(data, start, nGlyphs, fdArrayCount) {\n var fdSelect = [];\n var fdIndex;\n var parser = new parse.Parser(data, start);\n var format = parser.parseCard8();\n if (format === 0) {\n for (var iGid = 0; iGid < nGlyphs; iGid++) {\n fdIndex = parser.parseCard8();\n if (fdIndex >= fdArrayCount) {\n throw new Error(\n \"CFF table CID Font FDSelect has bad FD index value \" + fdIndex + \" (FD count \" + fdArrayCount + \")\"\n );\n }\n fdSelect.push(fdIndex);\n }\n } else if (format === 3) {\n var nRanges = parser.parseCard16();\n var first = parser.parseCard16();\n if (first !== 0) {\n throw new Error(\"CFF Table CID Font FDSelect format 3 range has bad initial GID \" + first);\n }\n var next;\n for (var iRange = 0; iRange < nRanges; iRange++) {\n fdIndex = parser.parseCard8();\n next = parser.parseCard16();\n if (fdIndex >= fdArrayCount) {\n throw new Error(\n \"CFF table CID Font FDSelect has bad FD index value \" + fdIndex + \" (FD count \" + fdArrayCount + \")\"\n );\n }\n if (next > nGlyphs) {\n throw new Error(\"CFF Table CID Font FDSelect format 3 range has bad GID \" + next);\n }\n for (; first < next; first++) {\n fdSelect.push(fdIndex);\n }\n first = next;\n }\n if (next !== nGlyphs) {\n throw new Error(\"CFF Table CID Font FDSelect format 3 range has bad final GID \" + next);\n }\n } else {\n throw new Error(\"CFF Table CID Font FDSelect table has unsupported format \" + format);\n }\n return fdSelect;\n }\n function parseCFFTable(data, start, font, opt) {\n font.tables.cff = {};\n var header = parseCFFHeader(data, start);\n var nameIndex = parseCFFIndex(data, header.endOffset, parse.bytesToString);\n var topDictIndex = parseCFFIndex(data, nameIndex.endOffset);\n var stringIndex = parseCFFIndex(data, topDictIndex.endOffset, parse.bytesToString);\n var globalSubrIndex = parseCFFIndex(data, stringIndex.endOffset);\n font.gsubrs = globalSubrIndex.objects;\n font.gsubrsBias = calcCFFSubroutineBias(font.gsubrs);\n var topDictArray = gatherCFFTopDicts(data, start, topDictIndex.objects, stringIndex.objects);\n if (topDictArray.length !== 1) {\n throw new Error(\n \"CFF table has too many fonts in 'FontSet' - count of fonts NameIndex.length = \" + topDictArray.length\n );\n }\n var topDict = topDictArray[0];\n font.tables.cff.topDict = topDict;\n if (topDict._privateDict) {\n font.defaultWidthX = topDict._privateDict.defaultWidthX;\n font.nominalWidthX = topDict._privateDict.nominalWidthX;\n }\n if (topDict.ros[0] !== void 0 && topDict.ros[1] !== void 0) {\n font.isCIDFont = true;\n }\n if (font.isCIDFont) {\n var fdArrayOffset = topDict.fdArray;\n var fdSelectOffset = topDict.fdSelect;\n if (fdArrayOffset === 0 || fdSelectOffset === 0) {\n throw new Error(\"Font is marked as a CID font, but FDArray and/or FDSelect information is missing\");\n }\n fdArrayOffset += start;\n var fdArrayIndex = parseCFFIndex(data, fdArrayOffset);\n var fdArray = gatherCFFTopDicts(data, start, fdArrayIndex.objects, stringIndex.objects);\n topDict._fdArray = fdArray;\n fdSelectOffset += start;\n topDict._fdSelect = parseCFFFDSelect(data, fdSelectOffset, font.numGlyphs, fdArray.length);\n }\n var privateDictOffset = start + topDict.private[1];\n var privateDict = parseCFFPrivateDict(data, privateDictOffset, topDict.private[0], stringIndex.objects);\n font.defaultWidthX = privateDict.defaultWidthX;\n font.nominalWidthX = privateDict.nominalWidthX;\n if (privateDict.subrs !== 0) {\n var subrOffset = privateDictOffset + privateDict.subrs;\n var subrIndex = parseCFFIndex(data, subrOffset);\n font.subrs = subrIndex.objects;\n font.subrsBias = calcCFFSubroutineBias(font.subrs);\n } else {\n font.subrs = [];\n font.subrsBias = 0;\n }\n var charStringsIndex;\n if (opt.lowMemory) {\n charStringsIndex = parseCFFIndexLowMemory(data, start + topDict.charStrings);\n font.nGlyphs = charStringsIndex.offsets.length;\n } else {\n charStringsIndex = parseCFFIndex(data, start + topDict.charStrings);\n font.nGlyphs = charStringsIndex.objects.length;\n }\n var charset = parseCFFCharset(data, start + topDict.charset, font.nGlyphs, stringIndex.objects);\n if (topDict.encoding === 0) {\n font.cffEncoding = new CffEncoding(cffStandardEncoding, charset);\n } else if (topDict.encoding === 1) {\n font.cffEncoding = new CffEncoding(cffExpertEncoding, charset);\n } else {\n font.cffEncoding = parseCFFEncoding(data, start + topDict.encoding, charset);\n }\n font.encoding = font.encoding || font.cffEncoding;\n font.glyphs = new glyphset.GlyphSet(font);\n if (opt.lowMemory) {\n font._push = function(i2) {\n var charString2 = getCffIndexObject(i2, charStringsIndex.offsets, data, start + topDict.charStrings);\n font.glyphs.push(i2, glyphset.cffGlyphLoader(font, i2, parseCFFCharstring, charString2));\n };\n } else {\n for (var i = 0; i < font.nGlyphs; i += 1) {\n var charString = charStringsIndex.objects[i];\n font.glyphs.push(i, glyphset.cffGlyphLoader(font, i, parseCFFCharstring, charString));\n }\n }\n }\n function encodeString(s, strings) {\n var sid;\n var i = cffStandardStrings.indexOf(s);\n if (i >= 0) {\n sid = i;\n }\n i = strings.indexOf(s);\n if (i >= 0) {\n sid = i + cffStandardStrings.length;\n } else {\n sid = cffStandardStrings.length + strings.length;\n strings.push(s);\n }\n return sid;\n }\n function makeHeader() {\n return new table.Record(\"Header\", [\n { name: \"major\", type: \"Card8\", value: 1 },\n { name: \"minor\", type: \"Card8\", value: 0 },\n { name: \"hdrSize\", type: \"Card8\", value: 4 },\n { name: \"major\", type: \"Card8\", value: 1 }\n ]);\n }\n function makeNameIndex(fontNames) {\n var t = new table.Record(\"Name INDEX\", [{ name: \"names\", type: \"INDEX\", value: [] }]);\n t.names = [];\n for (var i = 0; i < fontNames.length; i += 1) {\n t.names.push({ name: \"name_\" + i, type: \"NAME\", value: fontNames[i] });\n }\n return t;\n }\n function makeDict(meta2, attrs, strings) {\n var m = {};\n for (var i = 0; i < meta2.length; i += 1) {\n var entry = meta2[i];\n var value = attrs[entry.name];\n if (value !== void 0 && !equals(value, entry.value)) {\n if (entry.type === \"SID\") {\n value = encodeString(value, strings);\n }\n m[entry.op] = { name: entry.name, type: entry.type, value };\n }\n }\n return m;\n }\n function makeTopDict(attrs, strings) {\n var t = new table.Record(\"Top DICT\", [{ name: \"dict\", type: \"DICT\", value: {} }]);\n t.dict = makeDict(TOP_DICT_META, attrs, strings);\n return t;\n }\n function makeTopDictIndex(topDict) {\n var t = new table.Record(\"Top DICT INDEX\", [{ name: \"topDicts\", type: \"INDEX\", value: [] }]);\n t.topDicts = [{ name: \"topDict_0\", type: \"TABLE\", value: topDict }];\n return t;\n }\n function makeStringIndex(strings) {\n var t = new table.Record(\"String INDEX\", [{ name: \"strings\", type: \"INDEX\", value: [] }]);\n t.strings = [];\n for (var i = 0; i < strings.length; i += 1) {\n t.strings.push({ name: \"string_\" + i, type: \"STRING\", value: strings[i] });\n }\n return t;\n }\n function makeGlobalSubrIndex() {\n return new table.Record(\"Global Subr INDEX\", [{ name: \"subrs\", type: \"INDEX\", value: [] }]);\n }\n function makeCharsets(glyphNames, strings) {\n var t = new table.Record(\"Charsets\", [{ name: \"format\", type: \"Card8\", value: 0 }]);\n for (var i = 0; i < glyphNames.length; i += 1) {\n var glyphName = glyphNames[i];\n var glyphSID = encodeString(glyphName, strings);\n t.fields.push({ name: \"glyph_\" + i, type: \"SID\", value: glyphSID });\n }\n return t;\n }\n function glyphToOps(glyph) {\n var ops = [];\n var path = glyph.path;\n ops.push({ name: \"width\", type: \"NUMBER\", value: glyph.advanceWidth });\n var x = 0;\n var y = 0;\n for (var i = 0; i < path.commands.length; i += 1) {\n var dx = void 0;\n var dy = void 0;\n var cmd = path.commands[i];\n if (cmd.type === \"Q\") {\n var _13 = 1 / 3;\n var _23 = 2 / 3;\n cmd = {\n type: \"C\",\n x: cmd.x,\n y: cmd.y,\n x1: Math.round(_13 * x + _23 * cmd.x1),\n y1: Math.round(_13 * y + _23 * cmd.y1),\n x2: Math.round(_13 * cmd.x + _23 * cmd.x1),\n y2: Math.round(_13 * cmd.y + _23 * cmd.y1)\n };\n }\n if (cmd.type === \"M\") {\n dx = Math.round(cmd.x - x);\n dy = Math.round(cmd.y - y);\n ops.push({ name: \"dx\", type: \"NUMBER\", value: dx });\n ops.push({ name: \"dy\", type: \"NUMBER\", value: dy });\n ops.push({ name: \"rmoveto\", type: \"OP\", value: 21 });\n x = Math.round(cmd.x);\n y = Math.round(cmd.y);\n } else if (cmd.type === \"L\") {\n dx = Math.round(cmd.x - x);\n dy = Math.round(cmd.y - y);\n ops.push({ name: \"dx\", type: \"NUMBER\", value: dx });\n ops.push({ name: \"dy\", type: \"NUMBER\", value: dy });\n ops.push({ name: \"rlineto\", type: \"OP\", value: 5 });\n x = Math.round(cmd.x);\n y = Math.round(cmd.y);\n } else if (cmd.type === \"C\") {\n var dx1 = Math.round(cmd.x1 - x);\n var dy1 = Math.round(cmd.y1 - y);\n var dx2 = Math.round(cmd.x2 - cmd.x1);\n var dy2 = Math.round(cmd.y2 - cmd.y1);\n dx = Math.round(cmd.x - cmd.x2);\n dy = Math.round(cmd.y - cmd.y2);\n ops.push({ name: \"dx1\", type: \"NUMBER\", value: dx1 });\n ops.push({ name: \"dy1\", type: \"NUMBER\", value: dy1 });\n ops.push({ name: \"dx2\", type: \"NUMBER\", value: dx2 });\n ops.push({ name: \"dy2\", type: \"NUMBER\", value: dy2 });\n ops.push({ name: \"dx\", type: \"NUMBER\", value: dx });\n ops.push({ name: \"dy\", type: \"NUMBER\", value: dy });\n ops.push({ name: \"rrcurveto\", type: \"OP\", value: 8 });\n x = Math.round(cmd.x);\n y = Math.round(cmd.y);\n }\n }\n ops.push({ name: \"endchar\", type: \"OP\", value: 14 });\n return ops;\n }\n function makeCharStringsIndex(glyphs) {\n var t = new table.Record(\"CharStrings INDEX\", [{ name: \"charStrings\", type: \"INDEX\", value: [] }]);\n for (var i = 0; i < glyphs.length; i += 1) {\n var glyph = glyphs.get(i);\n var ops = glyphToOps(glyph);\n t.charStrings.push({ name: glyph.name, type: \"CHARSTRING\", value: ops });\n }\n return t;\n }\n function makePrivateDict(attrs, strings) {\n var t = new table.Record(\"Private DICT\", [{ name: \"dict\", type: \"DICT\", value: {} }]);\n t.dict = makeDict(PRIVATE_DICT_META, attrs, strings);\n return t;\n }\n function makeCFFTable(glyphs, options) {\n var t = new table.Table(\"CFF \", [\n { name: \"header\", type: \"RECORD\" },\n { name: \"nameIndex\", type: \"RECORD\" },\n { name: \"topDictIndex\", type: \"RECORD\" },\n { name: \"stringIndex\", type: \"RECORD\" },\n { name: \"globalSubrIndex\", type: \"RECORD\" },\n { name: \"charsets\", type: \"RECORD\" },\n { name: \"charStringsIndex\", type: \"RECORD\" },\n { name: \"privateDict\", type: \"RECORD\" }\n ]);\n var fontScale = 1 / options.unitsPerEm;\n var attrs = {\n version: options.version,\n fullName: options.fullName,\n familyName: options.familyName,\n weight: options.weightName,\n fontBBox: options.fontBBox || [0, 0, 0, 0],\n fontMatrix: [fontScale, 0, 0, fontScale, 0, 0],\n charset: 999,\n encoding: 0,\n charStrings: 999,\n private: [0, 999]\n };\n var privateAttrs = {};\n var glyphNames = [];\n var glyph;\n for (var i = 1; i < glyphs.length; i += 1) {\n glyph = glyphs.get(i);\n glyphNames.push(glyph.name);\n }\n var strings = [];\n t.header = makeHeader();\n t.nameIndex = makeNameIndex([options.postScriptName]);\n var topDict = makeTopDict(attrs, strings);\n t.topDictIndex = makeTopDictIndex(topDict);\n t.globalSubrIndex = makeGlobalSubrIndex();\n t.charsets = makeCharsets(glyphNames, strings);\n t.charStringsIndex = makeCharStringsIndex(glyphs);\n t.privateDict = makePrivateDict(privateAttrs, strings);\n t.stringIndex = makeStringIndex(strings);\n var startOffset = t.header.sizeOf() + t.nameIndex.sizeOf() + t.topDictIndex.sizeOf() + t.stringIndex.sizeOf() + t.globalSubrIndex.sizeOf();\n attrs.charset = startOffset;\n attrs.encoding = 0;\n attrs.charStrings = attrs.charset + t.charsets.sizeOf();\n attrs.private[1] = attrs.charStrings + t.charStringsIndex.sizeOf();\n topDict = makeTopDict(attrs, strings);\n t.topDictIndex = makeTopDictIndex(topDict);\n return t;\n }\n var cff = { parse: parseCFFTable, make: makeCFFTable };\n function parseHeadTable(data, start) {\n var head2 = {};\n var p = new parse.Parser(data, start);\n head2.version = p.parseVersion();\n head2.fontRevision = Math.round(p.parseFixed() * 1e3) / 1e3;\n head2.checkSumAdjustment = p.parseULong();\n head2.magicNumber = p.parseULong();\n check.argument(head2.magicNumber === 1594834165, \"Font header has wrong magic number.\");\n head2.flags = p.parseUShort();\n head2.unitsPerEm = p.parseUShort();\n head2.created = p.parseLongDateTime();\n head2.modified = p.parseLongDateTime();\n head2.xMin = p.parseShort();\n head2.yMin = p.parseShort();\n head2.xMax = p.parseShort();\n head2.yMax = p.parseShort();\n head2.macStyle = p.parseUShort();\n head2.lowestRecPPEM = p.parseUShort();\n head2.fontDirectionHint = p.parseShort();\n head2.indexToLocFormat = p.parseShort();\n head2.glyphDataFormat = p.parseShort();\n return head2;\n }\n function makeHeadTable(options) {\n var timestamp = Math.round((/* @__PURE__ */ new Date()).getTime() / 1e3) + 2082844800;\n var createdTimestamp = timestamp;\n if (options.createdTimestamp) {\n createdTimestamp = options.createdTimestamp + 2082844800;\n }\n return new table.Table(\n \"head\",\n [\n { name: \"version\", type: \"FIXED\", value: 65536 },\n { name: \"fontRevision\", type: \"FIXED\", value: 65536 },\n { name: \"checkSumAdjustment\", type: \"ULONG\", value: 0 },\n { name: \"magicNumber\", type: \"ULONG\", value: 1594834165 },\n { name: \"flags\", type: \"USHORT\", value: 0 },\n { name: \"unitsPerEm\", type: \"USHORT\", value: 1e3 },\n { name: \"created\", type: \"LONGDATETIME\", value: createdTimestamp },\n { name: \"modified\", type: \"LONGDATETIME\", value: timestamp },\n { name: \"xMin\", type: \"SHORT\", value: 0 },\n { name: \"yMin\", type: \"SHORT\", value: 0 },\n { name: \"xMax\", type: \"SHORT\", value: 0 },\n { name: \"yMax\", type: \"SHORT\", value: 0 },\n { name: \"macStyle\", type: \"USHORT\", value: 0 },\n { name: \"lowestRecPPEM\", type: \"USHORT\", value: 0 },\n { name: \"fontDirectionHint\", type: \"SHORT\", value: 2 },\n { name: \"indexToLocFormat\", type: \"SHORT\", value: 0 },\n { name: \"glyphDataFormat\", type: \"SHORT\", value: 0 }\n ],\n options\n );\n }\n var head = { parse: parseHeadTable, make: makeHeadTable };\n function parseHheaTable(data, start) {\n var hhea2 = {};\n var p = new parse.Parser(data, start);\n hhea2.version = p.parseVersion();\n hhea2.ascender = p.parseShort();\n hhea2.descender = p.parseShort();\n hhea2.lineGap = p.parseShort();\n hhea2.advanceWidthMax = p.parseUShort();\n hhea2.minLeftSideBearing = p.parseShort();\n hhea2.minRightSideBearing = p.parseShort();\n hhea2.xMaxExtent = p.parseShort();\n hhea2.caretSlopeRise = p.parseShort();\n hhea2.caretSlopeRun = p.parseShort();\n hhea2.caretOffset = p.parseShort();\n p.relativeOffset += 8;\n hhea2.metricDataFormat = p.parseShort();\n hhea2.numberOfHMetrics = p.parseUShort();\n return hhea2;\n }\n function makeHheaTable(options) {\n return new table.Table(\n \"hhea\",\n [\n { name: \"version\", type: \"FIXED\", value: 65536 },\n { name: \"ascender\", type: \"FWORD\", value: 0 },\n { name: \"descender\", type: \"FWORD\", value: 0 },\n { name: \"lineGap\", type: \"FWORD\", value: 0 },\n { name: \"advanceWidthMax\", type: \"UFWORD\", value: 0 },\n { name: \"minLeftSideBearing\", type: \"FWORD\", value: 0 },\n { name: \"minRightSideBearing\", type: \"FWORD\", value: 0 },\n { name: \"xMaxExtent\", type: \"FWORD\", value: 0 },\n { name: \"caretSlopeRise\", type: \"SHORT\", value: 1 },\n { name: \"caretSlopeRun\", type: \"SHORT\", value: 0 },\n { name: \"caretOffset\", type: \"SHORT\", value: 0 },\n { name: \"reserved1\", type: \"SHORT\", value: 0 },\n { name: \"reserved2\", type: \"SHORT\", value: 0 },\n { name: \"reserved3\", type: \"SHORT\", value: 0 },\n { name: \"reserved4\", type: \"SHORT\", value: 0 },\n { name: \"metricDataFormat\", type: \"SHORT\", value: 0 },\n { name: \"numberOfHMetrics\", type: \"USHORT\", value: 0 }\n ],\n options\n );\n }\n var hhea = { parse: parseHheaTable, make: makeHheaTable };\n function parseHmtxTableAll(data, start, numMetrics, numGlyphs, glyphs) {\n var advanceWidth;\n var leftSideBearing;\n var p = new parse.Parser(data, start);\n for (var i = 0; i < numGlyphs; i += 1) {\n if (i < numMetrics) {\n advanceWidth = p.parseUShort();\n leftSideBearing = p.parseShort();\n }\n var glyph = glyphs.get(i);\n glyph.advanceWidth = advanceWidth;\n glyph.leftSideBearing = leftSideBearing;\n }\n }\n function parseHmtxTableOnLowMemory(font, data, start, numMetrics, numGlyphs) {\n font._hmtxTableData = {};\n var advanceWidth;\n var leftSideBearing;\n var p = new parse.Parser(data, start);\n for (var i = 0; i < numGlyphs; i += 1) {\n if (i < numMetrics) {\n advanceWidth = p.parseUShort();\n leftSideBearing = p.parseShort();\n }\n font._hmtxTableData[i] = {\n advanceWidth,\n leftSideBearing\n };\n }\n }\n function parseHmtxTable(font, data, start, numMetrics, numGlyphs, glyphs, opt) {\n if (opt.lowMemory) {\n parseHmtxTableOnLowMemory(font, data, start, numMetrics, numGlyphs);\n } else {\n parseHmtxTableAll(data, start, numMetrics, numGlyphs, glyphs);\n }\n }\n function makeHmtxTable(glyphs) {\n var t = new table.Table(\"hmtx\", []);\n for (var i = 0; i < glyphs.length; i += 1) {\n var glyph = glyphs.get(i);\n var advanceWidth = glyph.advanceWidth || 0;\n var leftSideBearing = glyph.leftSideBearing || 0;\n t.fields.push({ name: \"advanceWidth_\" + i, type: \"USHORT\", value: advanceWidth });\n t.fields.push({ name: \"leftSideBearing_\" + i, type: \"SHORT\", value: leftSideBearing });\n }\n return t;\n }\n var hmtx = { parse: parseHmtxTable, make: makeHmtxTable };\n function makeLtagTable(tags) {\n var result = new table.Table(\"ltag\", [\n { name: \"version\", type: \"ULONG\", value: 1 },\n { name: \"flags\", type: \"ULONG\", value: 0 },\n { name: \"numTags\", type: \"ULONG\", value: tags.length }\n ]);\n var stringPool = \"\";\n var stringPoolOffset = 12 + tags.length * 4;\n for (var i = 0; i < tags.length; ++i) {\n var pos = stringPool.indexOf(tags[i]);\n if (pos < 0) {\n pos = stringPool.length;\n stringPool += tags[i];\n }\n result.fields.push({ name: \"offset \" + i, type: \"USHORT\", value: stringPoolOffset + pos });\n result.fields.push({ name: \"length \" + i, type: \"USHORT\", value: tags[i].length });\n }\n result.fields.push({ name: \"stringPool\", type: \"CHARARRAY\", value: stringPool });\n return result;\n }\n function parseLtagTable(data, start) {\n var p = new parse.Parser(data, start);\n var tableVersion = p.parseULong();\n check.argument(tableVersion === 1, \"Unsupported ltag table version.\");\n p.skip(\"uLong\", 1);\n var numTags = p.parseULong();\n var tags = [];\n for (var i = 0; i < numTags; i++) {\n var tag = \"\";\n var offset = start + p.parseUShort();\n var length = p.parseUShort();\n for (var j = offset; j < offset + length; ++j) {\n tag += String.fromCharCode(data.getInt8(j));\n }\n tags.push(tag);\n }\n return tags;\n }\n var ltag = { make: makeLtagTable, parse: parseLtagTable };\n function parseMaxpTable(data, start) {\n var maxp2 = {};\n var p = new parse.Parser(data, start);\n maxp2.version = p.parseVersion();\n maxp2.numGlyphs = p.parseUShort();\n if (maxp2.version === 1) {\n maxp2.maxPoints = p.parseUShort();\n maxp2.maxContours = p.parseUShort();\n maxp2.maxCompositePoints = p.parseUShort();\n maxp2.maxCompositeContours = p.parseUShort();\n maxp2.maxZones = p.parseUShort();\n maxp2.maxTwilightPoints = p.parseUShort();\n maxp2.maxStorage = p.parseUShort();\n maxp2.maxFunctionDefs = p.parseUShort();\n maxp2.maxInstructionDefs = p.parseUShort();\n maxp2.maxStackElements = p.parseUShort();\n maxp2.maxSizeOfInstructions = p.parseUShort();\n maxp2.maxComponentElements = p.parseUShort();\n maxp2.maxComponentDepth = p.parseUShort();\n }\n return maxp2;\n }\n function makeMaxpTable(numGlyphs) {\n return new table.Table(\"maxp\", [\n { name: \"version\", type: \"FIXED\", value: 20480 },\n { name: \"numGlyphs\", type: \"USHORT\", value: numGlyphs }\n ]);\n }\n var maxp = { parse: parseMaxpTable, make: makeMaxpTable };\n var nameTableNames = [\n \"copyright\",\n // 0\n \"fontFamily\",\n // 1\n \"fontSubfamily\",\n // 2\n \"uniqueID\",\n // 3\n \"fullName\",\n // 4\n \"version\",\n // 5\n \"postScriptName\",\n // 6\n \"trademark\",\n // 7\n \"manufacturer\",\n // 8\n \"designer\",\n // 9\n \"description\",\n // 10\n \"manufacturerURL\",\n // 11\n \"designerURL\",\n // 12\n \"license\",\n // 13\n \"licenseURL\",\n // 14\n \"reserved\",\n // 15\n \"preferredFamily\",\n // 16\n \"preferredSubfamily\",\n // 17\n \"compatibleFullName\",\n // 18\n \"sampleText\",\n // 19\n \"postScriptFindFontName\",\n // 20\n \"wwsFamily\",\n // 21\n \"wwsSubfamily\"\n // 22\n ];\n var macLanguages = {\n 0: \"en\",\n 1: \"fr\",\n 2: \"de\",\n 3: \"it\",\n 4: \"nl\",\n 5: \"sv\",\n 6: \"es\",\n 7: \"da\",\n 8: \"pt\",\n 9: \"no\",\n 10: \"he\",\n 11: \"ja\",\n 12: \"ar\",\n 13: \"fi\",\n 14: \"el\",\n 15: \"is\",\n 16: \"mt\",\n 17: \"tr\",\n 18: \"hr\",\n 19: \"zh-Hant\",\n 20: \"ur\",\n 21: \"hi\",\n 22: \"th\",\n 23: \"ko\",\n 24: \"lt\",\n 25: \"pl\",\n 26: \"hu\",\n 27: \"es\",\n 28: \"lv\",\n 29: \"se\",\n 30: \"fo\",\n 31: \"fa\",\n 32: \"ru\",\n 33: \"zh\",\n 34: \"nl-BE\",\n 35: \"ga\",\n 36: \"sq\",\n 37: \"ro\",\n 38: \"cz\",\n 39: \"sk\",\n 40: \"si\",\n 41: \"yi\",\n 42: \"sr\",\n 43: \"mk\",\n 44: \"bg\",\n 45: \"uk\",\n 46: \"be\",\n 47: \"uz\",\n 48: \"kk\",\n 49: \"az-Cyrl\",\n 50: \"az-Arab\",\n 51: \"hy\",\n 52: \"ka\",\n 53: \"mo\",\n 54: \"ky\",\n 55: \"tg\",\n 56: \"tk\",\n 57: \"mn-CN\",\n 58: \"mn\",\n 59: \"ps\",\n 60: \"ks\",\n 61: \"ku\",\n 62: \"sd\",\n 63: \"bo\",\n 64: \"ne\",\n 65: \"sa\",\n 66: \"mr\",\n 67: \"bn\",\n 68: \"as\",\n 69: \"gu\",\n 70: \"pa\",\n 71: \"or\",\n 72: \"ml\",\n 73: \"kn\",\n 74: \"ta\",\n 75: \"te\",\n 76: \"si\",\n 77: \"my\",\n 78: \"km\",\n 79: \"lo\",\n 80: \"vi\",\n 81: \"id\",\n 82: \"tl\",\n 83: \"ms\",\n 84: \"ms-Arab\",\n 85: \"am\",\n 86: \"ti\",\n 87: \"om\",\n 88: \"so\",\n 89: \"sw\",\n 90: \"rw\",\n 91: \"rn\",\n 92: \"ny\",\n 93: \"mg\",\n 94: \"eo\",\n 128: \"cy\",\n 129: \"eu\",\n 130: \"ca\",\n 131: \"la\",\n 132: \"qu\",\n 133: \"gn\",\n 134: \"ay\",\n 135: \"tt\",\n 136: \"ug\",\n 137: \"dz\",\n 138: \"jv\",\n 139: \"su\",\n 140: \"gl\",\n 141: \"af\",\n 142: \"br\",\n 143: \"iu\",\n 144: \"gd\",\n 145: \"gv\",\n 146: \"ga\",\n 147: \"to\",\n 148: \"el-polyton\",\n 149: \"kl\",\n 150: \"az\",\n 151: \"nn\"\n };\n var macLanguageToScript = {\n 0: 0,\n // langEnglish → smRoman\n 1: 0,\n // langFrench → smRoman\n 2: 0,\n // langGerman → smRoman\n 3: 0,\n // langItalian → smRoman\n 4: 0,\n // langDutch → smRoman\n 5: 0,\n // langSwedish → smRoman\n 6: 0,\n // langSpanish → smRoman\n 7: 0,\n // langDanish → smRoman\n 8: 0,\n // langPortuguese → smRoman\n 9: 0,\n // langNorwegian → smRoman\n 10: 5,\n // langHebrew → smHebrew\n 11: 1,\n // langJapanese → smJapanese\n 12: 4,\n // langArabic → smArabic\n 13: 0,\n // langFinnish → smRoman\n 14: 6,\n // langGreek → smGreek\n 15: 0,\n // langIcelandic → smRoman (modified)\n 16: 0,\n // langMaltese → smRoman\n 17: 0,\n // langTurkish → smRoman (modified)\n 18: 0,\n // langCroatian → smRoman (modified)\n 19: 2,\n // langTradChinese → smTradChinese\n 20: 4,\n // langUrdu → smArabic\n 21: 9,\n // langHindi → smDevanagari\n 22: 21,\n // langThai → smThai\n 23: 3,\n // langKorean → smKorean\n 24: 29,\n // langLithuanian → smCentralEuroRoman\n 25: 29,\n // langPolish → smCentralEuroRoman\n 26: 29,\n // langHungarian → smCentralEuroRoman\n 27: 29,\n // langEstonian → smCentralEuroRoman\n 28: 29,\n // langLatvian → smCentralEuroRoman\n 29: 0,\n // langSami → smRoman\n 30: 0,\n // langFaroese → smRoman (modified)\n 31: 4,\n // langFarsi → smArabic (modified)\n 32: 7,\n // langRussian → smCyrillic\n 33: 25,\n // langSimpChinese → smSimpChinese\n 34: 0,\n // langFlemish → smRoman\n 35: 0,\n // langIrishGaelic → smRoman (modified)\n 36: 0,\n // langAlbanian → smRoman\n 37: 0,\n // langRomanian → smRoman (modified)\n 38: 29,\n // langCzech → smCentralEuroRoman\n 39: 29,\n // langSlovak → smCentralEuroRoman\n 40: 0,\n // langSlovenian → smRoman (modified)\n 41: 5,\n // langYiddish → smHebrew\n 42: 7,\n // langSerbian → smCyrillic\n 43: 7,\n // langMacedonian → smCyrillic\n 44: 7,\n // langBulgarian → smCyrillic\n 45: 7,\n // langUkrainian → smCyrillic (modified)\n 46: 7,\n // langByelorussian → smCyrillic\n 47: 7,\n // langUzbek → smCyrillic\n 48: 7,\n // langKazakh → smCyrillic\n 49: 7,\n // langAzerbaijani → smCyrillic\n 50: 4,\n // langAzerbaijanAr → smArabic\n 51: 24,\n // langArmenian → smArmenian\n 52: 23,\n // langGeorgian → smGeorgian\n 53: 7,\n // langMoldavian → smCyrillic\n 54: 7,\n // langKirghiz → smCyrillic\n 55: 7,\n // langTajiki → smCyrillic\n 56: 7,\n // langTurkmen → smCyrillic\n 57: 27,\n // langMongolian → smMongolian\n 58: 7,\n // langMongolianCyr → smCyrillic\n 59: 4,\n // langPashto → smArabic\n 60: 4,\n // langKurdish → smArabic\n 61: 4,\n // langKashmiri → smArabic\n 62: 4,\n // langSindhi → smArabic\n 63: 26,\n // langTibetan → smTibetan\n 64: 9,\n // langNepali → smDevanagari\n 65: 9,\n // langSanskrit → smDevanagari\n 66: 9,\n // langMarathi → smDevanagari\n 67: 13,\n // langBengali → smBengali\n 68: 13,\n // langAssamese → smBengali\n 69: 11,\n // langGujarati → smGujarati\n 70: 10,\n // langPunjabi → smGurmukhi\n 71: 12,\n // langOriya → smOriya\n 72: 17,\n // langMalayalam → smMalayalam\n 73: 16,\n // langKannada → smKannada\n 74: 14,\n // langTamil → smTamil\n 75: 15,\n // langTelugu → smTelugu\n 76: 18,\n // langSinhalese → smSinhalese\n 77: 19,\n // langBurmese → smBurmese\n 78: 20,\n // langKhmer → smKhmer\n 79: 22,\n // langLao → smLao\n 80: 30,\n // langVietnamese → smVietnamese\n 81: 0,\n // langIndonesian → smRoman\n 82: 0,\n // langTagalog → smRoman\n 83: 0,\n // langMalayRoman → smRoman\n 84: 4,\n // langMalayArabic → smArabic\n 85: 28,\n // langAmharic → smEthiopic\n 86: 28,\n // langTigrinya → smEthiopic\n 87: 28,\n // langOromo → smEthiopic\n 88: 0,\n // langSomali → smRoman\n 89: 0,\n // langSwahili → smRoman\n 90: 0,\n // langKinyarwanda → smRoman\n 91: 0,\n // langRundi → smRoman\n 92: 0,\n // langNyanja → smRoman\n 93: 0,\n // langMalagasy → smRoman\n 94: 0,\n // langEsperanto → smRoman\n 128: 0,\n // langWelsh → smRoman (modified)\n 129: 0,\n // langBasque → smRoman\n 130: 0,\n // langCatalan → smRoman\n 131: 0,\n // langLatin → smRoman\n 132: 0,\n // langQuechua → smRoman\n 133: 0,\n // langGuarani → smRoman\n 134: 0,\n // langAymara → smRoman\n 135: 7,\n // langTatar → smCyrillic\n 136: 4,\n // langUighur → smArabic\n 137: 26,\n // langDzongkha → smTibetan\n 138: 0,\n // langJavaneseRom → smRoman\n 139: 0,\n // langSundaneseRom → smRoman\n 140: 0,\n // langGalician → smRoman\n 141: 0,\n // langAfrikaans → smRoman\n 142: 0,\n // langBreton → smRoman (modified)\n 143: 28,\n // langInuktitut → smEthiopic (modified)\n 144: 0,\n // langScottishGaelic → smRoman (modified)\n 145: 0,\n // langManxGaelic → smRoman (modified)\n 146: 0,\n // langIrishGaelicScript → smRoman (modified)\n 147: 0,\n // langTongan → smRoman\n 148: 6,\n // langGreekAncient → smRoman\n 149: 0,\n // langGreenlandic → smRoman\n 150: 0,\n // langAzerbaijanRoman → smRoman\n 151: 0\n // langNynorsk → smRoman\n };\n var windowsLanguages = {\n 1078: \"af\",\n 1052: \"sq\",\n 1156: \"gsw\",\n 1118: \"am\",\n 5121: \"ar-DZ\",\n 15361: \"ar-BH\",\n 3073: \"ar\",\n 2049: \"ar-IQ\",\n 11265: \"ar-JO\",\n 13313: \"ar-KW\",\n 12289: \"ar-LB\",\n 4097: \"ar-LY\",\n 6145: \"ary\",\n 8193: \"ar-OM\",\n 16385: \"ar-QA\",\n 1025: \"ar-SA\",\n 10241: \"ar-SY\",\n 7169: \"aeb\",\n 14337: \"ar-AE\",\n 9217: \"ar-YE\",\n 1067: \"hy\",\n 1101: \"as\",\n 2092: \"az-Cyrl\",\n 1068: \"az\",\n 1133: \"ba\",\n 1069: \"eu\",\n 1059: \"be\",\n 2117: \"bn\",\n 1093: \"bn-IN\",\n 8218: \"bs-Cyrl\",\n 5146: \"bs\",\n 1150: \"br\",\n 1026: \"bg\",\n 1027: \"ca\",\n 3076: \"zh-HK\",\n 5124: \"zh-MO\",\n 2052: \"zh\",\n 4100: \"zh-SG\",\n 1028: \"zh-TW\",\n 1155: \"co\",\n 1050: \"hr\",\n 4122: \"hr-BA\",\n 1029: \"cs\",\n 1030: \"da\",\n 1164: \"prs\",\n 1125: \"dv\",\n 2067: \"nl-BE\",\n 1043: \"nl\",\n 3081: \"en-AU\",\n 10249: \"en-BZ\",\n 4105: \"en-CA\",\n 9225: \"en-029\",\n 16393: \"en-IN\",\n 6153: \"en-IE\",\n 8201: \"en-JM\",\n 17417: \"en-MY\",\n 5129: \"en-NZ\",\n 13321: \"en-PH\",\n 18441: \"en-SG\",\n 7177: \"en-ZA\",\n 11273: \"en-TT\",\n 2057: \"en-GB\",\n 1033: \"en\",\n 12297: \"en-ZW\",\n 1061: \"et\",\n 1080: \"fo\",\n 1124: \"fil\",\n 1035: \"fi\",\n 2060: \"fr-BE\",\n 3084: \"fr-CA\",\n 1036: \"fr\",\n 5132: \"fr-LU\",\n 6156: \"fr-MC\",\n 4108: \"fr-CH\",\n 1122: \"fy\",\n 1110: \"gl\",\n 1079: \"ka\",\n 3079: \"de-AT\",\n 1031: \"de\",\n 5127: \"de-LI\",\n 4103: \"de-LU\",\n 2055: \"de-CH\",\n 1032: \"el\",\n 1135: \"kl\",\n 1095: \"gu\",\n 1128: \"ha\",\n 1037: \"he\",\n 1081: \"hi\",\n 1038: \"hu\",\n 1039: \"is\",\n 1136: \"ig\",\n 1057: \"id\",\n 1117: \"iu\",\n 2141: \"iu-Latn\",\n 2108: \"ga\",\n 1076: \"xh\",\n 1077: \"zu\",\n 1040: \"it\",\n 2064: \"it-CH\",\n 1041: \"ja\",\n 1099: \"kn\",\n 1087: \"kk\",\n 1107: \"km\",\n 1158: \"quc\",\n 1159: \"rw\",\n 1089: \"sw\",\n 1111: \"kok\",\n 1042: \"ko\",\n 1088: \"ky\",\n 1108: \"lo\",\n 1062: \"lv\",\n 1063: \"lt\",\n 2094: \"dsb\",\n 1134: \"lb\",\n 1071: \"mk\",\n 2110: \"ms-BN\",\n 1086: \"ms\",\n 1100: \"ml\",\n 1082: \"mt\",\n 1153: \"mi\",\n 1146: \"arn\",\n 1102: \"mr\",\n 1148: \"moh\",\n 1104: \"mn\",\n 2128: \"mn-CN\",\n 1121: \"ne\",\n 1044: \"nb\",\n 2068: \"nn\",\n 1154: \"oc\",\n 1096: \"or\",\n 1123: \"ps\",\n 1045: \"pl\",\n 1046: \"pt\",\n 2070: \"pt-PT\",\n 1094: \"pa\",\n 1131: \"qu-BO\",\n 2155: \"qu-EC\",\n 3179: \"qu\",\n 1048: \"ro\",\n 1047: \"rm\",\n 1049: \"ru\",\n 9275: \"smn\",\n 4155: \"smj-NO\",\n 5179: \"smj\",\n 3131: \"se-FI\",\n 1083: \"se\",\n 2107: \"se-SE\",\n 8251: \"sms\",\n 6203: \"sma-NO\",\n 7227: \"sms\",\n 1103: \"sa\",\n 7194: \"sr-Cyrl-BA\",\n 3098: \"sr\",\n 6170: \"sr-Latn-BA\",\n 2074: \"sr-Latn\",\n 1132: \"nso\",\n 1074: \"tn\",\n 1115: \"si\",\n 1051: \"sk\",\n 1060: \"sl\",\n 11274: \"es-AR\",\n 16394: \"es-BO\",\n 13322: \"es-CL\",\n 9226: \"es-CO\",\n 5130: \"es-CR\",\n 7178: \"es-DO\",\n 12298: \"es-EC\",\n 17418: \"es-SV\",\n 4106: \"es-GT\",\n 18442: \"es-HN\",\n 2058: \"es-MX\",\n 19466: \"es-NI\",\n 6154: \"es-PA\",\n 15370: \"es-PY\",\n 10250: \"es-PE\",\n 20490: \"es-PR\",\n // Microsoft has defined two different language codes for\n // “Spanish with modern sorting” and “Spanish with traditional\n // sorting”. This makes sense for collation APIs, and it would be\n // possible to express this in BCP 47 language tags via Unicode\n // extensions (eg., es-u-co-trad is Spanish with traditional\n // sorting). However, for storing names in fonts, the distinction\n // does not make sense, so we give “es” in both cases.\n 3082: \"es\",\n 1034: \"es\",\n 21514: \"es-US\",\n 14346: \"es-UY\",\n 8202: \"es-VE\",\n 2077: \"sv-FI\",\n 1053: \"sv\",\n 1114: \"syr\",\n 1064: \"tg\",\n 2143: \"tzm\",\n 1097: \"ta\",\n 1092: \"tt\",\n 1098: \"te\",\n 1054: \"th\",\n 1105: \"bo\",\n 1055: \"tr\",\n 1090: \"tk\",\n 1152: \"ug\",\n 1058: \"uk\",\n 1070: \"hsb\",\n 1056: \"ur\",\n 2115: \"uz-Cyrl\",\n 1091: \"uz\",\n 1066: \"vi\",\n 1106: \"cy\",\n 1160: \"wo\",\n 1157: \"sah\",\n 1144: \"ii\",\n 1130: \"yo\"\n };\n function getLanguageCode(platformID, languageID, ltag2) {\n switch (platformID) {\n case 0:\n if (languageID === 65535) {\n return \"und\";\n } else if (ltag2) {\n return ltag2[languageID];\n }\n break;\n case 1:\n return macLanguages[languageID];\n case 3:\n return windowsLanguages[languageID];\n }\n return void 0;\n }\n var utf16 = \"utf-16\";\n var macScriptEncodings = {\n 0: \"macintosh\",\n // smRoman\n 1: \"x-mac-japanese\",\n // smJapanese\n 2: \"x-mac-chinesetrad\",\n // smTradChinese\n 3: \"x-mac-korean\",\n // smKorean\n 6: \"x-mac-greek\",\n // smGreek\n 7: \"x-mac-cyrillic\",\n // smCyrillic\n 9: \"x-mac-devanagai\",\n // smDevanagari\n 10: \"x-mac-gurmukhi\",\n // smGurmukhi\n 11: \"x-mac-gujarati\",\n // smGujarati\n 12: \"x-mac-oriya\",\n // smOriya\n 13: \"x-mac-bengali\",\n // smBengali\n 14: \"x-mac-tamil\",\n // smTamil\n 15: \"x-mac-telugu\",\n // smTelugu\n 16: \"x-mac-kannada\",\n // smKannada\n 17: \"x-mac-malayalam\",\n // smMalayalam\n 18: \"x-mac-sinhalese\",\n // smSinhalese\n 19: \"x-mac-burmese\",\n // smBurmese\n 20: \"x-mac-khmer\",\n // smKhmer\n 21: \"x-mac-thai\",\n // smThai\n 22: \"x-mac-lao\",\n // smLao\n 23: \"x-mac-georgian\",\n // smGeorgian\n 24: \"x-mac-armenian\",\n // smArmenian\n 25: \"x-mac-chinesesimp\",\n // smSimpChinese\n 26: \"x-mac-tibetan\",\n // smTibetan\n 27: \"x-mac-mongolian\",\n // smMongolian\n 28: \"x-mac-ethiopic\",\n // smEthiopic\n 29: \"x-mac-ce\",\n // smCentralEuroRoman\n 30: \"x-mac-vietnamese\",\n // smVietnamese\n 31: \"x-mac-extarabic\"\n // smExtArabic\n };\n var macLanguageEncodings = {\n 15: \"x-mac-icelandic\",\n // langIcelandic\n 17: \"x-mac-turkish\",\n // langTurkish\n 18: \"x-mac-croatian\",\n // langCroatian\n 24: \"x-mac-ce\",\n // langLithuanian\n 25: \"x-mac-ce\",\n // langPolish\n 26: \"x-mac-ce\",\n // langHungarian\n 27: \"x-mac-ce\",\n // langEstonian\n 28: \"x-mac-ce\",\n // langLatvian\n 30: \"x-mac-icelandic\",\n // langFaroese\n 37: \"x-mac-romanian\",\n // langRomanian\n 38: \"x-mac-ce\",\n // langCzech\n 39: \"x-mac-ce\",\n // langSlovak\n 40: \"x-mac-ce\",\n // langSlovenian\n 143: \"x-mac-inuit\",\n // langInuktitut\n 146: \"x-mac-gaelic\"\n // langIrishGaelicScript\n };\n function getEncoding(platformID, encodingID, languageID) {\n switch (platformID) {\n case 0:\n return utf16;\n case 1:\n return macLanguageEncodings[languageID] || macScriptEncodings[encodingID];\n case 3:\n if (encodingID === 1 || encodingID === 10) {\n return utf16;\n }\n break;\n }\n return void 0;\n }\n function parseNameTable(data, start, ltag2) {\n var name = {};\n var p = new parse.Parser(data, start);\n var format = p.parseUShort();\n var count = p.parseUShort();\n var stringOffset = p.offset + p.parseUShort();\n for (var i = 0; i < count; i++) {\n var platformID = p.parseUShort();\n var encodingID = p.parseUShort();\n var languageID = p.parseUShort();\n var nameID = p.parseUShort();\n var property = nameTableNames[nameID] || nameID;\n var byteLength = p.parseUShort();\n var offset = p.parseUShort();\n var language = getLanguageCode(platformID, languageID, ltag2);\n var encoding = getEncoding(platformID, encodingID, languageID);\n if (encoding !== void 0 && language !== void 0) {\n var text = void 0;\n if (encoding === utf16) {\n text = decode.UTF16(data, stringOffset + offset, byteLength);\n } else {\n text = decode.MACSTRING(data, stringOffset + offset, byteLength, encoding);\n }\n if (text) {\n var translations = name[property];\n if (translations === void 0) {\n translations = name[property] = {};\n }\n translations[language] = text;\n }\n }\n }\n if (format === 1) {\n p.parseUShort();\n }\n return name;\n }\n function reverseDict(dict) {\n var result = {};\n for (var key in dict) {\n result[dict[key]] = parseInt(key);\n }\n return result;\n }\n function makeNameRecord(platformID, encodingID, languageID, nameID, length, offset) {\n return new table.Record(\"NameRecord\", [\n { name: \"platformID\", type: \"USHORT\", value: platformID },\n { name: \"encodingID\", type: \"USHORT\", value: encodingID },\n { name: \"languageID\", type: \"USHORT\", value: languageID },\n { name: \"nameID\", type: \"USHORT\", value: nameID },\n { name: \"length\", type: \"USHORT\", value: length },\n { name: \"offset\", type: \"USHORT\", value: offset }\n ]);\n }\n function findSubArray(needle, haystack) {\n var needleLength = needle.length;\n var limit = haystack.length - needleLength + 1;\n loop:\n for (var pos = 0; pos < limit; pos++) {\n for (; pos < limit; pos++) {\n for (var k = 0; k < needleLength; k++) {\n if (haystack[pos + k] !== needle[k]) {\n continue loop;\n }\n }\n return pos;\n }\n }\n return -1;\n }\n function addStringToPool(s, pool) {\n var offset = findSubArray(s, pool);\n if (offset < 0) {\n offset = pool.length;\n var i = 0;\n var len = s.length;\n for (; i < len; ++i) {\n pool.push(s[i]);\n }\n }\n return offset;\n }\n function makeNameTable(names, ltag2) {\n var nameID;\n var nameIDs = [];\n var namesWithNumericKeys = {};\n var nameTableIds = reverseDict(nameTableNames);\n for (var key in names) {\n var id = nameTableIds[key];\n if (id === void 0) {\n id = key;\n }\n nameID = parseInt(id);\n if (isNaN(nameID)) {\n throw new Error('Name table entry \"' + key + '\" does not exist, see nameTableNames for complete list.');\n }\n namesWithNumericKeys[nameID] = names[key];\n nameIDs.push(nameID);\n }\n var macLanguageIds = reverseDict(macLanguages);\n var windowsLanguageIds = reverseDict(windowsLanguages);\n var nameRecords = [];\n var stringPool = [];\n for (var i = 0; i < nameIDs.length; i++) {\n nameID = nameIDs[i];\n var translations = namesWithNumericKeys[nameID];\n for (var lang in translations) {\n var text = translations[lang];\n var macPlatform = 1;\n var macLanguage = macLanguageIds[lang];\n var macScript = macLanguageToScript[macLanguage];\n var macEncoding = getEncoding(macPlatform, macScript, macLanguage);\n var macName = encode.MACSTRING(text, macEncoding);\n if (macName === void 0) {\n macPlatform = 0;\n macLanguage = ltag2.indexOf(lang);\n if (macLanguage < 0) {\n macLanguage = ltag2.length;\n ltag2.push(lang);\n }\n macScript = 4;\n macName = encode.UTF16(text);\n }\n var macNameOffset = addStringToPool(macName, stringPool);\n nameRecords.push(makeNameRecord(macPlatform, macScript, macLanguage, nameID, macName.length, macNameOffset));\n var winLanguage = windowsLanguageIds[lang];\n if (winLanguage !== void 0) {\n var winName = encode.UTF16(text);\n var winNameOffset = addStringToPool(winName, stringPool);\n nameRecords.push(makeNameRecord(3, 1, winLanguage, nameID, winName.length, winNameOffset));\n }\n }\n }\n nameRecords.sort(function(a, b) {\n return a.platformID - b.platformID || a.encodingID - b.encodingID || a.languageID - b.languageID || a.nameID - b.nameID;\n });\n var t = new table.Table(\"name\", [\n { name: \"format\", type: \"USHORT\", value: 0 },\n { name: \"count\", type: \"USHORT\", value: nameRecords.length },\n { name: \"stringOffset\", type: \"USHORT\", value: 6 + nameRecords.length * 12 }\n ]);\n for (var r = 0; r < nameRecords.length; r++) {\n t.fields.push({ name: \"record_\" + r, type: \"RECORD\", value: nameRecords[r] });\n }\n t.fields.push({ name: \"strings\", type: \"LITERAL\", value: stringPool });\n return t;\n }\n var _name = { parse: parseNameTable, make: makeNameTable };\n var unicodeRanges = [\n { begin: 0, end: 127 },\n // Basic Latin\n { begin: 128, end: 255 },\n // Latin-1 Supplement\n { begin: 256, end: 383 },\n // Latin Extended-A\n { begin: 384, end: 591 },\n // Latin Extended-B\n { begin: 592, end: 687 },\n // IPA Extensions\n { begin: 688, end: 767 },\n // Spacing Modifier Letters\n { begin: 768, end: 879 },\n // Combining Diacritical Marks\n { begin: 880, end: 1023 },\n // Greek and Coptic\n { begin: 11392, end: 11519 },\n // Coptic\n { begin: 1024, end: 1279 },\n // Cyrillic\n { begin: 1328, end: 1423 },\n // Armenian\n { begin: 1424, end: 1535 },\n // Hebrew\n { begin: 42240, end: 42559 },\n // Vai\n { begin: 1536, end: 1791 },\n // Arabic\n { begin: 1984, end: 2047 },\n // NKo\n { begin: 2304, end: 2431 },\n // Devanagari\n { begin: 2432, end: 2559 },\n // Bengali\n { begin: 2560, end: 2687 },\n // Gurmukhi\n { begin: 2688, end: 2815 },\n // Gujarati\n { begin: 2816, end: 2943 },\n // Oriya\n { begin: 2944, end: 3071 },\n // Tamil\n { begin: 3072, end: 3199 },\n // Telugu\n { begin: 3200, end: 3327 },\n // Kannada\n { begin: 3328, end: 3455 },\n // Malayalam\n { begin: 3584, end: 3711 },\n // Thai\n { begin: 3712, end: 3839 },\n // Lao\n { begin: 4256, end: 4351 },\n // Georgian\n { begin: 6912, end: 7039 },\n // Balinese\n { begin: 4352, end: 4607 },\n // Hangul Jamo\n { begin: 7680, end: 7935 },\n // Latin Extended Additional\n { begin: 7936, end: 8191 },\n // Greek Extended\n { begin: 8192, end: 8303 },\n // General Punctuation\n { begin: 8304, end: 8351 },\n // Superscripts And Subscripts\n { begin: 8352, end: 8399 },\n // Currency Symbol\n { begin: 8400, end: 8447 },\n // Combining Diacritical Marks For Symbols\n { begin: 8448, end: 8527 },\n // Letterlike Symbols\n { begin: 8528, end: 8591 },\n // Number Forms\n { begin: 8592, end: 8703 },\n // Arrows\n { begin: 8704, end: 8959 },\n // Mathematical Operators\n { begin: 8960, end: 9215 },\n // Miscellaneous Technical\n { begin: 9216, end: 9279 },\n // Control Pictures\n { begin: 9280, end: 9311 },\n // Optical Character Recognition\n { begin: 9312, end: 9471 },\n // Enclosed Alphanumerics\n { begin: 9472, end: 9599 },\n // Box Drawing\n { begin: 9600, end: 9631 },\n // Block Elements\n { begin: 9632, end: 9727 },\n // Geometric Shapes\n { begin: 9728, end: 9983 },\n // Miscellaneous Symbols\n { begin: 9984, end: 10175 },\n // Dingbats\n { begin: 12288, end: 12351 },\n // CJK Symbols And Punctuation\n { begin: 12352, end: 12447 },\n // Hiragana\n { begin: 12448, end: 12543 },\n // Katakana\n { begin: 12544, end: 12591 },\n // Bopomofo\n { begin: 12592, end: 12687 },\n // Hangul Compatibility Jamo\n { begin: 43072, end: 43135 },\n // Phags-pa\n { begin: 12800, end: 13055 },\n // Enclosed CJK Letters And Months\n { begin: 13056, end: 13311 },\n // CJK Compatibility\n { begin: 44032, end: 55215 },\n // Hangul Syllables\n { begin: 55296, end: 57343 },\n // Non-Plane 0 *\n { begin: 67840, end: 67871 },\n // Phoenicia\n { begin: 19968, end: 40959 },\n // CJK Unified Ideographs\n { begin: 57344, end: 63743 },\n // Private Use Area (plane 0)\n { begin: 12736, end: 12783 },\n // CJK Strokes\n { begin: 64256, end: 64335 },\n // Alphabetic Presentation Forms\n { begin: 64336, end: 65023 },\n // Arabic Presentation Forms-A\n { begin: 65056, end: 65071 },\n // Combining Half Marks\n { begin: 65040, end: 65055 },\n // Vertical Forms\n { begin: 65104, end: 65135 },\n // Small Form Variants\n { begin: 65136, end: 65279 },\n // Arabic Presentation Forms-B\n { begin: 65280, end: 65519 },\n // Halfwidth And Fullwidth Forms\n { begin: 65520, end: 65535 },\n // Specials\n { begin: 3840, end: 4095 },\n // Tibetan\n { begin: 1792, end: 1871 },\n // Syriac\n { begin: 1920, end: 1983 },\n // Thaana\n { begin: 3456, end: 3583 },\n // Sinhala\n { begin: 4096, end: 4255 },\n // Myanmar\n { begin: 4608, end: 4991 },\n // Ethiopic\n { begin: 5024, end: 5119 },\n // Cherokee\n { begin: 5120, end: 5759 },\n // Unified Canadian Aboriginal Syllabics\n { begin: 5760, end: 5791 },\n // Ogham\n { begin: 5792, end: 5887 },\n // Runic\n { begin: 6016, end: 6143 },\n // Khmer\n { begin: 6144, end: 6319 },\n // Mongolian\n { begin: 10240, end: 10495 },\n // Braille Patterns\n { begin: 40960, end: 42127 },\n // Yi Syllables\n { begin: 5888, end: 5919 },\n // Tagalog\n { begin: 66304, end: 66351 },\n // Old Italic\n { begin: 66352, end: 66383 },\n // Gothic\n { begin: 66560, end: 66639 },\n // Deseret\n { begin: 118784, end: 119039 },\n // Byzantine Musical Symbols\n { begin: 119808, end: 120831 },\n // Mathematical Alphanumeric Symbols\n { begin: 1044480, end: 1048573 },\n // Private Use (plane 15)\n { begin: 65024, end: 65039 },\n // Variation Selectors\n { begin: 917504, end: 917631 },\n // Tags\n { begin: 6400, end: 6479 },\n // Limbu\n { begin: 6480, end: 6527 },\n // Tai Le\n { begin: 6528, end: 6623 },\n // New Tai Lue\n { begin: 6656, end: 6687 },\n // Buginese\n { begin: 11264, end: 11359 },\n // Glagolitic\n { begin: 11568, end: 11647 },\n // Tifinagh\n { begin: 19904, end: 19967 },\n // Yijing Hexagram Symbols\n { begin: 43008, end: 43055 },\n // Syloti Nagri\n { begin: 65536, end: 65663 },\n // Linear B Syllabary\n { begin: 65856, end: 65935 },\n // Ancient Greek Numbers\n { begin: 66432, end: 66463 },\n // Ugaritic\n { begin: 66464, end: 66527 },\n // Old Persian\n { begin: 66640, end: 66687 },\n // Shavian\n { begin: 66688, end: 66735 },\n // Osmanya\n { begin: 67584, end: 67647 },\n // Cypriot Syllabary\n { begin: 68096, end: 68191 },\n // Kharoshthi\n { begin: 119552, end: 119647 },\n // Tai Xuan Jing Symbols\n { begin: 73728, end: 74751 },\n // Cuneiform\n { begin: 119648, end: 119679 },\n // Counting Rod Numerals\n { begin: 7040, end: 7103 },\n // Sundanese\n { begin: 7168, end: 7247 },\n // Lepcha\n { begin: 7248, end: 7295 },\n // Ol Chiki\n { begin: 43136, end: 43231 },\n // Saurashtra\n { begin: 43264, end: 43311 },\n // Kayah Li\n { begin: 43312, end: 43359 },\n // Rejang\n { begin: 43520, end: 43615 },\n // Cham\n { begin: 65936, end: 65999 },\n // Ancient Symbols\n { begin: 66e3, end: 66047 },\n // Phaistos Disc\n { begin: 66208, end: 66271 },\n // Carian\n { begin: 127024, end: 127135 }\n // Domino Tiles\n ];\n function getUnicodeRange(unicode) {\n for (var i = 0; i < unicodeRanges.length; i += 1) {\n var range = unicodeRanges[i];\n if (unicode >= range.begin && unicode < range.end) {\n return i;\n }\n }\n return -1;\n }\n function parseOS2Table(data, start) {\n var os22 = {};\n var p = new parse.Parser(data, start);\n os22.version = p.parseUShort();\n os22.xAvgCharWidth = p.parseShort();\n os22.usWeightClass = p.parseUShort();\n os22.usWidthClass = p.parseUShort();\n os22.fsType = p.parseUShort();\n os22.ySubscriptXSize = p.parseShort();\n os22.ySubscriptYSize = p.parseShort();\n os22.ySubscriptXOffset = p.parseShort();\n os22.ySubscriptYOffset = p.parseShort();\n os22.ySuperscriptXSize = p.parseShort();\n os22.ySuperscriptYSize = p.parseShort();\n os22.ySuperscriptXOffset = p.parseShort();\n os22.ySuperscriptYOffset = p.parseShort();\n os22.yStrikeoutSize = p.parseShort();\n os22.yStrikeoutPosition = p.parseShort();\n os22.sFamilyClass = p.parseShort();\n os22.panose = [];\n for (var i = 0; i < 10; i++) {\n os22.panose[i] = p.parseByte();\n }\n os22.ulUnicodeRange1 = p.parseULong();\n os22.ulUnicodeRange2 = p.parseULong();\n os22.ulUnicodeRange3 = p.parseULong();\n os22.ulUnicodeRange4 = p.parseULong();\n os22.achVendID = String.fromCharCode(p.parseByte(), p.parseByte(), p.parseByte(), p.parseByte());\n os22.fsSelection = p.parseUShort();\n os22.usFirstCharIndex = p.parseUShort();\n os22.usLastCharIndex = p.parseUShort();\n os22.sTypoAscender = p.parseShort();\n os22.sTypoDescender = p.parseShort();\n os22.sTypoLineGap = p.parseShort();\n os22.usWinAscent = p.parseUShort();\n os22.usWinDescent = p.parseUShort();\n if (os22.version >= 1) {\n os22.ulCodePageRange1 = p.parseULong();\n os22.ulCodePageRange2 = p.parseULong();\n }\n if (os22.version >= 2) {\n os22.sxHeight = p.parseShort();\n os22.sCapHeight = p.parseShort();\n os22.usDefaultChar = p.parseUShort();\n os22.usBreakChar = p.parseUShort();\n os22.usMaxContent = p.parseUShort();\n }\n return os22;\n }\n function makeOS2Table(options) {\n return new table.Table(\n \"OS/2\",\n [\n { name: \"version\", type: \"USHORT\", value: 3 },\n { name: \"xAvgCharWidth\", type: \"SHORT\", value: 0 },\n { name: \"usWeightClass\", type: \"USHORT\", value: 0 },\n { name: \"usWidthClass\", type: \"USHORT\", value: 0 },\n { name: \"fsType\", type: \"USHORT\", value: 0 },\n { name: \"ySubscriptXSize\", type: \"SHORT\", value: 650 },\n { name: \"ySubscriptYSize\", type: \"SHORT\", value: 699 },\n { name: \"ySubscriptXOffset\", type: \"SHORT\", value: 0 },\n { name: \"ySubscriptYOffset\", type: \"SHORT\", value: 140 },\n { name: \"ySuperscriptXSize\", type: \"SHORT\", value: 650 },\n { name: \"ySuperscriptYSize\", type: \"SHORT\", value: 699 },\n { name: \"ySuperscriptXOffset\", type: \"SHORT\", value: 0 },\n { name: \"ySuperscriptYOffset\", type: \"SHORT\", value: 479 },\n { name: \"yStrikeoutSize\", type: \"SHORT\", value: 49 },\n { name: \"yStrikeoutPosition\", type: \"SHORT\", value: 258 },\n { name: \"sFamilyClass\", type: \"SHORT\", value: 0 },\n { name: \"bFamilyType\", type: \"BYTE\", value: 0 },\n { name: \"bSerifStyle\", type: \"BYTE\", value: 0 },\n { name: \"bWeight\", type: \"BYTE\", value: 0 },\n { name: \"bProportion\", type: \"BYTE\", value: 0 },\n { name: \"bContrast\", type: \"BYTE\", value: 0 },\n { name: \"bStrokeVariation\", type: \"BYTE\", value: 0 },\n { name: \"bArmStyle\", type: \"BYTE\", value: 0 },\n { name: \"bLetterform\", type: \"BYTE\", value: 0 },\n { name: \"bMidline\", type: \"BYTE\", value: 0 },\n { name: \"bXHeight\", type: \"BYTE\", value: 0 },\n { name: \"ulUnicodeRange1\", type: \"ULONG\", value: 0 },\n { name: \"ulUnicodeRange2\", type: \"ULONG\", value: 0 },\n { name: \"ulUnicodeRange3\", type: \"ULONG\", value: 0 },\n { name: \"ulUnicodeRange4\", type: \"ULONG\", value: 0 },\n { name: \"achVendID\", type: \"CHARARRAY\", value: \"XXXX\" },\n { name: \"fsSelection\", type: \"USHORT\", value: 0 },\n { name: \"usFirstCharIndex\", type: \"USHORT\", value: 0 },\n { name: \"usLastCharIndex\", type: \"USHORT\", value: 0 },\n { name: \"sTypoAscender\", type: \"SHORT\", value: 0 },\n { name: \"sTypoDescender\", type: \"SHORT\", value: 0 },\n { name: \"sTypoLineGap\", type: \"SHORT\", value: 0 },\n { name: \"usWinAscent\", type: \"USHORT\", value: 0 },\n { name: \"usWinDescent\", type: \"USHORT\", value: 0 },\n { name: \"ulCodePageRange1\", type: \"ULONG\", value: 0 },\n { name: \"ulCodePageRange2\", type: \"ULONG\", value: 0 },\n { name: \"sxHeight\", type: \"SHORT\", value: 0 },\n { name: \"sCapHeight\", type: \"SHORT\", value: 0 },\n { name: \"usDefaultChar\", type: \"USHORT\", value: 0 },\n { name: \"usBreakChar\", type: \"USHORT\", value: 0 },\n { name: \"usMaxContext\", type: \"USHORT\", value: 0 }\n ],\n options\n );\n }\n var os2 = { parse: parseOS2Table, make: makeOS2Table, unicodeRanges, getUnicodeRange };\n function parsePostTable(data, start) {\n var post2 = {};\n var p = new parse.Parser(data, start);\n post2.version = p.parseVersion();\n post2.italicAngle = p.parseFixed();\n post2.underlinePosition = p.parseShort();\n post2.underlineThickness = p.parseShort();\n post2.isFixedPitch = p.parseULong();\n post2.minMemType42 = p.parseULong();\n post2.maxMemType42 = p.parseULong();\n post2.minMemType1 = p.parseULong();\n post2.maxMemType1 = p.parseULong();\n switch (post2.version) {\n case 1:\n post2.names = standardNames.slice();\n break;\n case 2:\n post2.numberOfGlyphs = p.parseUShort();\n post2.glyphNameIndex = new Array(post2.numberOfGlyphs);\n for (var i = 0; i < post2.numberOfGlyphs; i++) {\n post2.glyphNameIndex[i] = p.parseUShort();\n }\n post2.names = [];\n for (var i$1 = 0; i$1 < post2.numberOfGlyphs; i$1++) {\n if (post2.glyphNameIndex[i$1] >= standardNames.length) {\n var nameLength = p.parseChar();\n post2.names.push(p.parseString(nameLength));\n }\n }\n break;\n case 2.5:\n post2.numberOfGlyphs = p.parseUShort();\n post2.offset = new Array(post2.numberOfGlyphs);\n for (var i$2 = 0; i$2 < post2.numberOfGlyphs; i$2++) {\n post2.offset[i$2] = p.parseChar();\n }\n break;\n }\n return post2;\n }\n function makePostTable() {\n return new table.Table(\"post\", [\n { name: \"version\", type: \"FIXED\", value: 196608 },\n { name: \"italicAngle\", type: \"FIXED\", value: 0 },\n { name: \"underlinePosition\", type: \"FWORD\", value: 0 },\n { name: \"underlineThickness\", type: \"FWORD\", value: 0 },\n { name: \"isFixedPitch\", type: \"ULONG\", value: 0 },\n { name: \"minMemType42\", type: \"ULONG\", value: 0 },\n { name: \"maxMemType42\", type: \"ULONG\", value: 0 },\n { name: \"minMemType1\", type: \"ULONG\", value: 0 },\n { name: \"maxMemType1\", type: \"ULONG\", value: 0 }\n ]);\n }\n var post = { parse: parsePostTable, make: makePostTable };\n var subtableParsers = new Array(9);\n subtableParsers[1] = function parseLookup1() {\n var start = this.offset + this.relativeOffset;\n var substFormat = this.parseUShort();\n if (substFormat === 1) {\n return {\n substFormat: 1,\n coverage: this.parsePointer(Parser.coverage),\n deltaGlyphId: this.parseUShort()\n };\n } else if (substFormat === 2) {\n return {\n substFormat: 2,\n coverage: this.parsePointer(Parser.coverage),\n substitute: this.parseOffset16List()\n };\n }\n check.assert(false, \"0x\" + start.toString(16) + \": lookup type 1 format must be 1 or 2.\");\n };\n subtableParsers[2] = function parseLookup2() {\n var substFormat = this.parseUShort();\n check.argument(substFormat === 1, \"GSUB Multiple Substitution Subtable identifier-format must be 1\");\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n sequences: this.parseListOfLists()\n };\n };\n subtableParsers[3] = function parseLookup3() {\n var substFormat = this.parseUShort();\n check.argument(substFormat === 1, \"GSUB Alternate Substitution Subtable identifier-format must be 1\");\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n alternateSets: this.parseListOfLists()\n };\n };\n subtableParsers[4] = function parseLookup4() {\n var substFormat = this.parseUShort();\n check.argument(substFormat === 1, \"GSUB ligature table identifier-format must be 1\");\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n ligatureSets: this.parseListOfLists(function() {\n return {\n ligGlyph: this.parseUShort(),\n components: this.parseUShortList(this.parseUShort() - 1)\n };\n })\n };\n };\n var lookupRecordDesc = {\n sequenceIndex: Parser.uShort,\n lookupListIndex: Parser.uShort\n };\n subtableParsers[5] = function parseLookup5() {\n var start = this.offset + this.relativeOffset;\n var substFormat = this.parseUShort();\n if (substFormat === 1) {\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n ruleSets: this.parseListOfLists(function() {\n var glyphCount2 = this.parseUShort();\n var substCount2 = this.parseUShort();\n return {\n input: this.parseUShortList(glyphCount2 - 1),\n lookupRecords: this.parseRecordList(substCount2, lookupRecordDesc)\n };\n })\n };\n } else if (substFormat === 2) {\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n classDef: this.parsePointer(Parser.classDef),\n classSets: this.parseListOfLists(function() {\n var glyphCount2 = this.parseUShort();\n var substCount2 = this.parseUShort();\n return {\n classes: this.parseUShortList(glyphCount2 - 1),\n lookupRecords: this.parseRecordList(substCount2, lookupRecordDesc)\n };\n })\n };\n } else if (substFormat === 3) {\n var glyphCount = this.parseUShort();\n var substCount = this.parseUShort();\n return {\n substFormat,\n coverages: this.parseList(glyphCount, Parser.pointer(Parser.coverage)),\n lookupRecords: this.parseRecordList(substCount, lookupRecordDesc)\n };\n }\n check.assert(false, \"0x\" + start.toString(16) + \": lookup type 5 format must be 1, 2 or 3.\");\n };\n subtableParsers[6] = function parseLookup6() {\n var start = this.offset + this.relativeOffset;\n var substFormat = this.parseUShort();\n if (substFormat === 1) {\n return {\n substFormat: 1,\n coverage: this.parsePointer(Parser.coverage),\n chainRuleSets: this.parseListOfLists(function() {\n return {\n backtrack: this.parseUShortList(),\n input: this.parseUShortList(this.parseShort() - 1),\n lookahead: this.parseUShortList(),\n lookupRecords: this.parseRecordList(lookupRecordDesc)\n };\n })\n };\n } else if (substFormat === 2) {\n return {\n substFormat: 2,\n coverage: this.parsePointer(Parser.coverage),\n backtrackClassDef: this.parsePointer(Parser.classDef),\n inputClassDef: this.parsePointer(Parser.classDef),\n lookaheadClassDef: this.parsePointer(Parser.classDef),\n chainClassSet: this.parseListOfLists(function() {\n return {\n backtrack: this.parseUShortList(),\n input: this.parseUShortList(this.parseShort() - 1),\n lookahead: this.parseUShortList(),\n lookupRecords: this.parseRecordList(lookupRecordDesc)\n };\n })\n };\n } else if (substFormat === 3) {\n return {\n substFormat: 3,\n backtrackCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n inputCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n lookaheadCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n lookupRecords: this.parseRecordList(lookupRecordDesc)\n };\n }\n check.assert(false, \"0x\" + start.toString(16) + \": lookup type 6 format must be 1, 2 or 3.\");\n };\n subtableParsers[7] = function parseLookup7() {\n var substFormat = this.parseUShort();\n check.argument(substFormat === 1, \"GSUB Extension Substitution subtable identifier-format must be 1\");\n var extensionLookupType = this.parseUShort();\n var extensionParser = new Parser(this.data, this.offset + this.parseULong());\n return {\n substFormat: 1,\n lookupType: extensionLookupType,\n extension: subtableParsers[extensionLookupType].call(extensionParser)\n };\n };\n subtableParsers[8] = function parseLookup8() {\n var substFormat = this.parseUShort();\n check.argument(\n substFormat === 1,\n \"GSUB Reverse Chaining Contextual Single Substitution Subtable identifier-format must be 1\"\n );\n return {\n substFormat,\n coverage: this.parsePointer(Parser.coverage),\n backtrackCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n lookaheadCoverage: this.parseList(Parser.pointer(Parser.coverage)),\n substitutes: this.parseUShortList()\n };\n };\n function parseGsubTable(data, start) {\n start = start || 0;\n var p = new Parser(data, start);\n var tableVersion = p.parseVersion(1);\n check.argument(tableVersion === 1 || tableVersion === 1.1, \"Unsupported GSUB table version.\");\n if (tableVersion === 1) {\n return {\n version: tableVersion,\n scripts: p.parseScriptList(),\n features: p.parseFeatureList(),\n lookups: p.parseLookupList(subtableParsers)\n };\n } else {\n return {\n version: tableVersion,\n scripts: p.parseScriptList(),\n features: p.parseFeatureList(),\n lookups: p.parseLookupList(subtableParsers),\n variations: p.parseFeatureVariationsList()\n };\n }\n }\n var subtableMakers = new Array(9);\n subtableMakers[1] = function makeLookup1(subtable) {\n if (subtable.substFormat === 1) {\n return new table.Table(\"substitutionTable\", [\n { name: \"substFormat\", type: \"USHORT\", value: 1 },\n { name: \"coverage\", type: \"TABLE\", value: new table.Coverage(subtable.coverage) },\n { name: \"deltaGlyphID\", type: \"USHORT\", value: subtable.deltaGlyphId }\n ]);\n } else {\n return new table.Table(\n \"substitutionTable\",\n [\n { name: \"substFormat\", type: \"USHORT\", value: 2 },\n { name: \"coverage\", type: \"TABLE\", value: new table.Coverage(subtable.coverage) }\n ].concat(table.ushortList(\"substitute\", subtable.substitute))\n );\n }\n };\n subtableMakers[2] = function makeLookup2(subtable) {\n check.assert(subtable.substFormat === 1, \"Lookup type 2 substFormat must be 1.\");\n return new table.Table(\n \"substitutionTable\",\n [\n { name: \"substFormat\", type: \"USHORT\", value: 1 },\n { name: \"coverage\", type: \"TABLE\", value: new table.Coverage(subtable.coverage) }\n ].concat(\n table.tableList(\"seqSet\", subtable.sequences, function(sequenceSet) {\n return new table.Table(\"sequenceSetTable\", table.ushortList(\"sequence\", sequenceSet));\n })\n )\n );\n };\n subtableMakers[3] = function makeLookup3(subtable) {\n check.assert(subtable.substFormat === 1, \"Lookup type 3 substFormat must be 1.\");\n return new table.Table(\n \"substitutionTable\",\n [\n { name: \"substFormat\", type: \"USHORT\", value: 1 },\n { name: \"coverage\", type: \"TABLE\", value: new table.Coverage(subtable.coverage) }\n ].concat(\n table.tableList(\"altSet\", subtable.alternateSets, function(alternateSet) {\n return new table.Table(\"alternateSetTable\", table.ushortList(\"alternate\", alternateSet));\n })\n )\n );\n };\n subtableMakers[4] = function makeLookup4(subtable) {\n check.assert(subtable.substFormat === 1, \"Lookup type 4 substFormat must be 1.\");\n return new table.Table(\n \"substitutionTable\",\n [\n { name: \"substFormat\", type: \"USHORT\", value: 1 },\n { name: \"coverage\", type: \"TABLE\", value: new table.Coverage(subtable.coverage) }\n ].concat(\n table.tableList(\"ligSet\", subtable.ligatureSets, function(ligatureSet) {\n return new table.Table(\n \"ligatureSetTable\",\n table.tableList(\"ligature\", ligatureSet, function(ligature) {\n return new table.Table(\n \"ligatureTable\",\n [{ name: \"ligGlyph\", type: \"USHORT\", value: ligature.ligGlyph }].concat(\n table.ushortList(\"component\", ligature.components, ligature.components.length + 1)\n )\n );\n })\n );\n })\n )\n );\n };\n subtableMakers[6] = function makeLookup6(subtable) {\n if (subtable.substFormat === 1) {\n var returnTable = new table.Table(\n \"chainContextTable\",\n [\n { name: \"substFormat\", type: \"USHORT\", value: subtable.substFormat },\n { name: \"coverage\", type: \"TABLE\", value: new table.Coverage(subtable.coverage) }\n ].concat(\n table.tableList(\"chainRuleSet\", subtable.chainRuleSets, function(chainRuleSet) {\n return new table.Table(\n \"chainRuleSetTable\",\n table.tableList(\"chainRule\", chainRuleSet, function(chainRule) {\n var tableData2 = table.ushortList(\"backtrackGlyph\", chainRule.backtrack, chainRule.backtrack.length).concat(table.ushortList(\"inputGlyph\", chainRule.input, chainRule.input.length + 1)).concat(table.ushortList(\"lookaheadGlyph\", chainRule.lookahead, chainRule.lookahead.length)).concat(table.ushortList(\"substitution\", [], chainRule.lookupRecords.length));\n chainRule.lookupRecords.forEach(function(record, i) {\n tableData2 = tableData2.concat({ name: \"sequenceIndex\" + i, type: \"USHORT\", value: record.sequenceIndex }).concat({ name: \"lookupListIndex\" + i, type: \"USHORT\", value: record.lookupListIndex });\n });\n return new table.Table(\"chainRuleTable\", tableData2);\n })\n );\n })\n )\n );\n return returnTable;\n } else if (subtable.substFormat === 2) {\n check.assert(false, \"lookup type 6 format 2 is not yet supported.\");\n } else if (subtable.substFormat === 3) {\n var tableData = [{ name: \"substFormat\", type: \"USHORT\", value: subtable.substFormat }];\n tableData.push({ name: \"backtrackGlyphCount\", type: \"USHORT\", value: subtable.backtrackCoverage.length });\n subtable.backtrackCoverage.forEach(function(coverage, i) {\n tableData.push({ name: \"backtrackCoverage\" + i, type: \"TABLE\", value: new table.Coverage(coverage) });\n });\n tableData.push({ name: \"inputGlyphCount\", type: \"USHORT\", value: subtable.inputCoverage.length });\n subtable.inputCoverage.forEach(function(coverage, i) {\n tableData.push({ name: \"inputCoverage\" + i, type: \"TABLE\", value: new table.Coverage(coverage) });\n });\n tableData.push({ name: \"lookaheadGlyphCount\", type: \"USHORT\", value: subtable.lookaheadCoverage.length });\n subtable.lookaheadCoverage.forEach(function(coverage, i) {\n tableData.push({ name: \"lookaheadCoverage\" + i, type: \"TABLE\", value: new table.Coverage(coverage) });\n });\n tableData.push({ name: \"substitutionCount\", type: \"USHORT\", value: subtable.lookupRecords.length });\n subtable.lookupRecords.forEach(function(record, i) {\n tableData = tableData.concat({ name: \"sequenceIndex\" + i, type: \"USHORT\", value: record.sequenceIndex }).concat({ name: \"lookupListIndex\" + i, type: \"USHORT\", value: record.lookupListIndex });\n });\n var returnTable$1 = new table.Table(\"chainContextTable\", tableData);\n return returnTable$1;\n }\n check.assert(false, \"lookup type 6 format must be 1, 2 or 3.\");\n };\n function makeGsubTable(gsub2) {\n return new table.Table(\"GSUB\", [\n { name: \"version\", type: \"ULONG\", value: 65536 },\n { name: \"scripts\", type: \"TABLE\", value: new table.ScriptList(gsub2.scripts) },\n { name: \"features\", type: \"TABLE\", value: new table.FeatureList(gsub2.features) },\n { name: \"lookups\", type: \"TABLE\", value: new table.LookupList(gsub2.lookups, subtableMakers) }\n ]);\n }\n var gsub = { parse: parseGsubTable, make: makeGsubTable };\n function parseMetaTable(data, start) {\n var p = new parse.Parser(data, start);\n var tableVersion = p.parseULong();\n check.argument(tableVersion === 1, \"Unsupported META table version.\");\n p.parseULong();\n p.parseULong();\n var numDataMaps = p.parseULong();\n var tags = {};\n for (var i = 0; i < numDataMaps; i++) {\n var tag = p.parseTag();\n var dataOffset = p.parseULong();\n var dataLength = p.parseULong();\n var text = decode.UTF8(data, start + dataOffset, dataLength);\n tags[tag] = text;\n }\n return tags;\n }\n function makeMetaTable(tags) {\n var numTags = Object.keys(tags).length;\n var stringPool = \"\";\n var stringPoolOffset = 16 + numTags * 12;\n var result = new table.Table(\"meta\", [\n { name: \"version\", type: \"ULONG\", value: 1 },\n { name: \"flags\", type: \"ULONG\", value: 0 },\n { name: \"offset\", type: \"ULONG\", value: stringPoolOffset },\n { name: \"numTags\", type: \"ULONG\", value: numTags }\n ]);\n for (var tag in tags) {\n var pos = stringPool.length;\n stringPool += tags[tag];\n result.fields.push({ name: \"tag \" + tag, type: \"TAG\", value: tag });\n result.fields.push({ name: \"offset \" + tag, type: \"ULONG\", value: stringPoolOffset + pos });\n result.fields.push({ name: \"length \" + tag, type: \"ULONG\", value: tags[tag].length });\n }\n result.fields.push({ name: \"stringPool\", type: \"CHARARRAY\", value: stringPool });\n return result;\n }\n var meta = { parse: parseMetaTable, make: makeMetaTable };\n function log2(v) {\n return Math.log(v) / Math.log(2) | 0;\n }\n function computeCheckSum(bytes) {\n while (bytes.length % 4 !== 0) {\n bytes.push(0);\n }\n var sum = 0;\n for (var i = 0; i < bytes.length; i += 4) {\n sum += (bytes[i] << 24) + (bytes[i + 1] << 16) + (bytes[i + 2] << 8) + bytes[i + 3];\n }\n sum %= Math.pow(2, 32);\n return sum;\n }\n function makeTableRecord(tag, checkSum, offset, length) {\n return new table.Record(\"Table Record\", [\n { name: \"tag\", type: \"TAG\", value: tag !== void 0 ? tag : \"\" },\n { name: \"checkSum\", type: \"ULONG\", value: checkSum !== void 0 ? checkSum : 0 },\n { name: \"offset\", type: \"ULONG\", value: offset !== void 0 ? offset : 0 },\n { name: \"length\", type: \"ULONG\", value: length !== void 0 ? length : 0 }\n ]);\n }\n function makeSfntTable(tables) {\n var sfnt2 = new table.Table(\"sfnt\", [\n { name: \"version\", type: \"TAG\", value: \"OTTO\" },\n { name: \"numTables\", type: \"USHORT\", value: 0 },\n { name: \"searchRange\", type: \"USHORT\", value: 0 },\n { name: \"entrySelector\", type: \"USHORT\", value: 0 },\n { name: \"rangeShift\", type: \"USHORT\", value: 0 }\n ]);\n sfnt2.tables = tables;\n sfnt2.numTables = tables.length;\n var highestPowerOf2 = Math.pow(2, log2(sfnt2.numTables));\n sfnt2.searchRange = 16 * highestPowerOf2;\n sfnt2.entrySelector = log2(highestPowerOf2);\n sfnt2.rangeShift = sfnt2.numTables * 16 - sfnt2.searchRange;\n var recordFields = [];\n var tableFields = [];\n var offset = sfnt2.sizeOf() + makeTableRecord().sizeOf() * sfnt2.numTables;\n while (offset % 4 !== 0) {\n offset += 1;\n tableFields.push({ name: \"padding\", type: \"BYTE\", value: 0 });\n }\n for (var i = 0; i < tables.length; i += 1) {\n var t = tables[i];\n check.argument(t.tableName.length === 4, \"Table name\" + t.tableName + \" is invalid.\");\n var tableLength = t.sizeOf();\n var tableRecord = makeTableRecord(t.tableName, computeCheckSum(t.encode()), offset, tableLength);\n recordFields.push({ name: tableRecord.tag + \" Table Record\", type: \"RECORD\", value: tableRecord });\n tableFields.push({ name: t.tableName + \" table\", type: \"RECORD\", value: t });\n offset += tableLength;\n check.argument(!isNaN(offset), \"Something went wrong calculating the offset.\");\n while (offset % 4 !== 0) {\n offset += 1;\n tableFields.push({ name: \"padding\", type: \"BYTE\", value: 0 });\n }\n }\n recordFields.sort(function(r1, r2) {\n if (r1.value.tag > r2.value.tag) {\n return 1;\n } else {\n return -1;\n }\n });\n sfnt2.fields = sfnt2.fields.concat(recordFields);\n sfnt2.fields = sfnt2.fields.concat(tableFields);\n return sfnt2;\n }\n function metricsForChar(font, chars, notFoundMetrics) {\n for (var i = 0; i < chars.length; i += 1) {\n var glyphIndex = font.charToGlyphIndex(chars[i]);\n if (glyphIndex > 0) {\n var glyph = font.glyphs.get(glyphIndex);\n return glyph.getMetrics();\n }\n }\n return notFoundMetrics;\n }\n function average(vs) {\n var sum = 0;\n for (var i = 0; i < vs.length; i += 1) {\n sum += vs[i];\n }\n return sum / vs.length;\n }\n function fontToSfntTable(font) {\n var xMins = [];\n var yMins = [];\n var xMaxs = [];\n var yMaxs = [];\n var advanceWidths = [];\n var leftSideBearings = [];\n var rightSideBearings = [];\n var firstCharIndex;\n var lastCharIndex = 0;\n var ulUnicodeRange1 = 0;\n var ulUnicodeRange2 = 0;\n var ulUnicodeRange3 = 0;\n var ulUnicodeRange4 = 0;\n for (var i = 0; i < font.glyphs.length; i += 1) {\n var glyph = font.glyphs.get(i);\n var unicode = glyph.unicode | 0;\n if (isNaN(glyph.advanceWidth)) {\n throw new Error(\"Glyph \" + glyph.name + \" (\" + i + \"): advanceWidth is not a number.\");\n }\n if (firstCharIndex > unicode || firstCharIndex === void 0) {\n if (unicode > 0) {\n firstCharIndex = unicode;\n }\n }\n if (lastCharIndex < unicode) {\n lastCharIndex = unicode;\n }\n var position = os2.getUnicodeRange(unicode);\n if (position < 32) {\n ulUnicodeRange1 |= 1 << position;\n } else if (position < 64) {\n ulUnicodeRange2 |= 1 << position - 32;\n } else if (position < 96) {\n ulUnicodeRange3 |= 1 << position - 64;\n } else if (position < 123) {\n ulUnicodeRange4 |= 1 << position - 96;\n } else {\n throw new Error(\"Unicode ranges bits > 123 are reserved for internal usage\");\n }\n if (glyph.name === \".notdef\") {\n continue;\n }\n var metrics = glyph.getMetrics();\n xMins.push(metrics.xMin);\n yMins.push(metrics.yMin);\n xMaxs.push(metrics.xMax);\n yMaxs.push(metrics.yMax);\n leftSideBearings.push(metrics.leftSideBearing);\n rightSideBearings.push(metrics.rightSideBearing);\n advanceWidths.push(glyph.advanceWidth);\n }\n var globals = {\n xMin: Math.min.apply(null, xMins),\n yMin: Math.min.apply(null, yMins),\n xMax: Math.max.apply(null, xMaxs),\n yMax: Math.max.apply(null, yMaxs),\n advanceWidthMax: Math.max.apply(null, advanceWidths),\n advanceWidthAvg: average(advanceWidths),\n minLeftSideBearing: Math.min.apply(null, leftSideBearings),\n maxLeftSideBearing: Math.max.apply(null, leftSideBearings),\n minRightSideBearing: Math.min.apply(null, rightSideBearings)\n };\n globals.ascender = font.ascender;\n globals.descender = font.descender;\n var headTable = head.make({\n flags: 3,\n // 00000011 (baseline for font at y=0; left sidebearing point at x=0)\n unitsPerEm: font.unitsPerEm,\n xMin: globals.xMin,\n yMin: globals.yMin,\n xMax: globals.xMax,\n yMax: globals.yMax,\n lowestRecPPEM: 3,\n createdTimestamp: font.createdTimestamp\n });\n var hheaTable = hhea.make({\n ascender: globals.ascender,\n descender: globals.descender,\n advanceWidthMax: globals.advanceWidthMax,\n minLeftSideBearing: globals.minLeftSideBearing,\n minRightSideBearing: globals.minRightSideBearing,\n xMaxExtent: globals.maxLeftSideBearing + (globals.xMax - globals.xMin),\n numberOfHMetrics: font.glyphs.length\n });\n var maxpTable = maxp.make(font.glyphs.length);\n var os2Table = os2.make(\n Object.assign(\n {\n xAvgCharWidth: Math.round(globals.advanceWidthAvg),\n usFirstCharIndex: firstCharIndex,\n usLastCharIndex: lastCharIndex,\n ulUnicodeRange1,\n ulUnicodeRange2,\n ulUnicodeRange3,\n ulUnicodeRange4,\n // See http://typophile.com/node/13081 for more info on vertical metrics.\n // We get metrics for typical characters (such as \"x\" for xHeight).\n // We provide some fallback characters if characters are unavailable: their\n // ordering was chosen experimentally.\n sTypoAscender: globals.ascender,\n sTypoDescender: globals.descender,\n sTypoLineGap: 0,\n usWinAscent: globals.yMax,\n usWinDescent: Math.abs(globals.yMin),\n ulCodePageRange1: 1,\n // FIXME: hard-code Latin 1 support for now\n sxHeight: metricsForChar(font, \"xyvw\", { yMax: Math.round(globals.ascender / 2) }).yMax,\n sCapHeight: metricsForChar(font, \"HIKLEFJMNTZBDPRAGOQSUVWXY\", globals).yMax,\n usDefaultChar: font.hasChar(\" \") ? 32 : 0,\n // Use space as the default character, if available.\n usBreakChar: font.hasChar(\" \") ? 32 : 0\n // Use space as the break character, if available.\n },\n font.tables.os2\n )\n );\n var hmtxTable = hmtx.make(font.glyphs);\n var cmapTable = cmap.make(font.glyphs);\n var englishFamilyName = font.getEnglishName(\"fontFamily\");\n var englishStyleName = font.getEnglishName(\"fontSubfamily\");\n var englishFullName = englishFamilyName + \" \" + englishStyleName;\n var postScriptName = font.getEnglishName(\"postScriptName\");\n if (!postScriptName) {\n postScriptName = englishFamilyName.replace(/\\s/g, \"\") + \"-\" + englishStyleName;\n }\n var names = {};\n for (var n in font.names) {\n names[n] = font.names[n];\n }\n if (!names.uniqueID) {\n names.uniqueID = { en: font.getEnglishName(\"manufacturer\") + \":\" + englishFullName };\n }\n if (!names.postScriptName) {\n names.postScriptName = { en: postScriptName };\n }\n if (!names.preferredFamily) {\n names.preferredFamily = font.names.fontFamily;\n }\n if (!names.preferredSubfamily) {\n names.preferredSubfamily = font.names.fontSubfamily;\n }\n var languageTags = [];\n var nameTable = _name.make(names, languageTags);\n var ltagTable = languageTags.length > 0 ? ltag.make(languageTags) : void 0;\n var postTable = post.make();\n var cffTable = cff.make(font.glyphs, {\n version: font.getEnglishName(\"version\"),\n fullName: englishFullName,\n familyName: englishFamilyName,\n weightName: englishStyleName,\n postScriptName,\n unitsPerEm: font.unitsPerEm,\n fontBBox: [0, globals.yMin, globals.ascender, globals.advanceWidthMax]\n });\n var metaTable = font.metas && Object.keys(font.metas).length > 0 ? meta.make(font.metas) : void 0;\n var tables = [headTable, hheaTable, maxpTable, os2Table, nameTable, cmapTable, postTable, cffTable, hmtxTable];\n if (ltagTable) {\n tables.push(ltagTable);\n }\n if (font.tables.gsub) {\n tables.push(gsub.make(font.tables.gsub));\n }\n if (metaTable) {\n tables.push(metaTable);\n }\n var sfntTable = makeSfntTable(tables);\n var bytes = sfntTable.encode();\n var checkSum = computeCheckSum(bytes);\n var tableFields = sfntTable.fields;\n var checkSumAdjusted = false;\n for (var i$1 = 0; i$1 < tableFields.length; i$1 += 1) {\n if (tableFields[i$1].name === \"head table\") {\n tableFields[i$1].value.checkSumAdjustment = 2981146554 - checkSum;\n checkSumAdjusted = true;\n break;\n }\n }\n if (!checkSumAdjusted) {\n throw new Error(\"Could not find head table with checkSum to adjust.\");\n }\n return sfntTable;\n }\n var sfnt = { make: makeSfntTable, fontToTable: fontToSfntTable, computeCheckSum };\n function searchTag(arr, tag) {\n var imin = 0;\n var imax = arr.length - 1;\n while (imin <= imax) {\n var imid = imin + imax >>> 1;\n var val = arr[imid].tag;\n if (val === tag) {\n return imid;\n } else if (val < tag) {\n imin = imid + 1;\n } else {\n imax = imid - 1;\n }\n }\n return -imin - 1;\n }\n function binSearch(arr, value) {\n var imin = 0;\n var imax = arr.length - 1;\n while (imin <= imax) {\n var imid = imin + imax >>> 1;\n var val = arr[imid];\n if (val === value) {\n return imid;\n } else if (val < value) {\n imin = imid + 1;\n } else {\n imax = imid - 1;\n }\n }\n return -imin - 1;\n }\n function searchRange(ranges, value) {\n var range;\n var imin = 0;\n var imax = ranges.length - 1;\n while (imin <= imax) {\n var imid = imin + imax >>> 1;\n range = ranges[imid];\n var start = range.start;\n if (start === value) {\n return range;\n } else if (start < value) {\n imin = imid + 1;\n } else {\n imax = imid - 1;\n }\n }\n if (imin > 0) {\n range = ranges[imin - 1];\n if (value > range.end) {\n return 0;\n }\n return range;\n }\n }\n function Layout(font, tableName) {\n this.font = font;\n this.tableName = tableName;\n }\n Layout.prototype = {\n /**\n * Binary search an object by \"tag\" property\n * @instance\n * @function searchTag\n * @memberof opentype.Layout\n * @param {Array} arr\n * @param {string} tag\n * @return {number}\n */\n searchTag,\n /**\n * Binary search in a list of numbers\n * @instance\n * @function binSearch\n * @memberof opentype.Layout\n * @param {Array} arr\n * @param {number} value\n * @return {number}\n */\n binSearch,\n /**\n * Get or create the Layout table (GSUB, GPOS etc).\n * @param {boolean} create - Whether to create a new one.\n * @return {Object} The GSUB or GPOS table.\n */\n getTable: function(create) {\n var layout = this.font.tables[this.tableName];\n if (!layout && create) {\n layout = this.font.tables[this.tableName] = this.createDefaultTable();\n }\n return layout;\n },\n /**\n * Returns all scripts in the substitution table.\n * @instance\n * @return {Array}\n */\n getScriptNames: function() {\n var layout = this.getTable();\n if (!layout) {\n return [];\n }\n return layout.scripts.map(function(script) {\n return script.tag;\n });\n },\n /**\n * Returns the best bet for a script name.\n * Returns 'DFLT' if it exists.\n * If not, returns 'latn' if it exists.\n * If neither exist, returns undefined.\n */\n getDefaultScriptName: function() {\n var layout = this.getTable();\n if (!layout) {\n return;\n }\n var hasLatn = false;\n for (var i = 0; i < layout.scripts.length; i++) {\n var name = layout.scripts[i].tag;\n if (name === \"DFLT\") {\n return name;\n }\n if (name === \"latn\") {\n hasLatn = true;\n }\n }\n if (hasLatn) {\n return \"latn\";\n }\n },\n /**\n * Returns all LangSysRecords in the given script.\n * @instance\n * @param {string} [script='DFLT']\n * @param {boolean} create - forces the creation of this script table if it doesn't exist.\n * @return {Object} An object with tag and script properties.\n */\n getScriptTable: function(script, create) {\n var layout = this.getTable(create);\n if (layout) {\n script = script || \"DFLT\";\n var scripts = layout.scripts;\n var pos = searchTag(layout.scripts, script);\n if (pos >= 0) {\n return scripts[pos].script;\n } else if (create) {\n var scr = {\n tag: script,\n script: {\n defaultLangSys: { reserved: 0, reqFeatureIndex: 65535, featureIndexes: [] },\n langSysRecords: []\n }\n };\n scripts.splice(-1 - pos, 0, scr);\n return scr.script;\n }\n }\n },\n /**\n * Returns a language system table\n * @instance\n * @param {string} [script='DFLT']\n * @param {string} [language='dlft']\n * @param {boolean} create - forces the creation of this langSysTable if it doesn't exist.\n * @return {Object}\n */\n getLangSysTable: function(script, language, create) {\n var scriptTable = this.getScriptTable(script, create);\n if (scriptTable) {\n if (!language || language === \"dflt\" || language === \"DFLT\") {\n return scriptTable.defaultLangSys;\n }\n var pos = searchTag(scriptTable.langSysRecords, language);\n if (pos >= 0) {\n return scriptTable.langSysRecords[pos].langSys;\n } else if (create) {\n var langSysRecord = {\n tag: language,\n langSys: { reserved: 0, reqFeatureIndex: 65535, featureIndexes: [] }\n };\n scriptTable.langSysRecords.splice(-1 - pos, 0, langSysRecord);\n return langSysRecord.langSys;\n }\n }\n },\n /**\n * Get a specific feature table.\n * @instance\n * @param {string} [script='DFLT']\n * @param {string} [language='dlft']\n * @param {string} feature - One of the codes listed at https://www.microsoft.com/typography/OTSPEC/featurelist.htm\n * @param {boolean} create - forces the creation of the feature table if it doesn't exist.\n * @return {Object}\n */\n getFeatureTable: function(script, language, feature, create) {\n var langSysTable2 = this.getLangSysTable(script, language, create);\n if (langSysTable2) {\n var featureRecord;\n var featIndexes = langSysTable2.featureIndexes;\n var allFeatures = this.font.tables[this.tableName].features;\n for (var i = 0; i < featIndexes.length; i++) {\n featureRecord = allFeatures[featIndexes[i]];\n if (featureRecord.tag === feature) {\n return featureRecord.feature;\n }\n }\n if (create) {\n var index = allFeatures.length;\n check.assert(\n index === 0 || feature >= allFeatures[index - 1].tag,\n \"Features must be added in alphabetical order.\"\n );\n featureRecord = {\n tag: feature,\n feature: { params: 0, lookupListIndexes: [] }\n };\n allFeatures.push(featureRecord);\n featIndexes.push(index);\n return featureRecord.feature;\n }\n }\n },\n /**\n * Get the lookup tables of a given type for a script/language/feature.\n * @instance\n * @param {string} [script='DFLT']\n * @param {string} [language='dlft']\n * @param {string} feature - 4-letter feature code\n * @param {number} lookupType - 1 to 9\n * @param {boolean} create - forces the creation of the lookup table if it doesn't exist, with no subtables.\n * @return {Object[]}\n */\n getLookupTables: function(script, language, feature, lookupType, create) {\n var featureTable = this.getFeatureTable(script, language, feature, create);\n var tables = [];\n if (featureTable) {\n var lookupTable;\n var lookupListIndexes = featureTable.lookupListIndexes;\n var allLookups = this.font.tables[this.tableName].lookups;\n for (var i = 0; i < lookupListIndexes.length; i++) {\n lookupTable = allLookups[lookupListIndexes[i]];\n if (lookupTable.lookupType === lookupType) {\n tables.push(lookupTable);\n }\n }\n if (tables.length === 0 && create) {\n lookupTable = {\n lookupType,\n lookupFlag: 0,\n subtables: [],\n markFilteringSet: void 0\n };\n var index = allLookups.length;\n allLookups.push(lookupTable);\n lookupListIndexes.push(index);\n return [lookupTable];\n }\n }\n return tables;\n },\n /**\n * Find a glyph in a class definition table\n * https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#class-definition-table\n * @param {object} classDefTable - an OpenType Layout class definition table\n * @param {number} glyphIndex - the index of the glyph to find\n * @returns {number} -1 if not found\n */\n getGlyphClass: function(classDefTable, glyphIndex) {\n switch (classDefTable.format) {\n case 1:\n if (classDefTable.startGlyph <= glyphIndex && glyphIndex < classDefTable.startGlyph + classDefTable.classes.length) {\n return classDefTable.classes[glyphIndex - classDefTable.startGlyph];\n }\n return 0;\n case 2:\n var range = searchRange(classDefTable.ranges, glyphIndex);\n return range ? range.classId : 0;\n }\n },\n /**\n * Find a glyph in a coverage table\n * https://docs.microsoft.com/en-us/typography/opentype/spec/chapter2#coverage-table\n * @param {object} coverageTable - an OpenType Layout coverage table\n * @param {number} glyphIndex - the index of the glyph to find\n * @returns {number} -1 if not found\n */\n getCoverageIndex: function(coverageTable, glyphIndex) {\n switch (coverageTable.format) {\n case 1:\n var index = binSearch(coverageTable.glyphs, glyphIndex);\n return index >= 0 ? index : -1;\n case 2:\n var range = searchRange(coverageTable.ranges, glyphIndex);\n return range ? range.index + glyphIndex - range.start : -1;\n }\n },\n /**\n * Returns the list of glyph indexes of a coverage table.\n * Format 1: the list is stored raw\n * Format 2: compact list as range records.\n * @instance\n * @param {Object} coverageTable\n * @return {Array}\n */\n expandCoverage: function(coverageTable) {\n if (coverageTable.format === 1) {\n return coverageTable.glyphs;\n } else {\n var glyphs = [];\n var ranges = coverageTable.ranges;\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n var start = range.start;\n var end = range.end;\n for (var j = start; j <= end; j++) {\n glyphs.push(j);\n }\n }\n return glyphs;\n }\n }\n };\n function Position(font) {\n Layout.call(this, font, \"gpos\");\n }\n Position.prototype = Layout.prototype;\n Position.prototype.init = function() {\n var script = this.getDefaultScriptName();\n this.defaultKerningTables = this.getKerningTables(script);\n };\n Position.prototype.getKerningValue = function(kerningLookups, leftIndex, rightIndex) {\n for (var i = 0; i < kerningLookups.length; i++) {\n var subtables = kerningLookups[i].subtables;\n for (var j = 0; j < subtables.length; j++) {\n var subtable = subtables[j];\n var covIndex = this.getCoverageIndex(subtable.coverage, leftIndex);\n if (covIndex < 0) {\n continue;\n }\n switch (subtable.posFormat) {\n case 1:\n var pairSet = subtable.pairSets[covIndex];\n for (var k = 0; k < pairSet.length; k++) {\n var pair = pairSet[k];\n if (pair.secondGlyph === rightIndex) {\n return pair.value1 && pair.value1.xAdvance || 0;\n }\n }\n break;\n case 2:\n var class1 = this.getGlyphClass(subtable.classDef1, leftIndex);\n var class2 = this.getGlyphClass(subtable.classDef2, rightIndex);\n var pair$1 = subtable.classRecords[class1][class2];\n return pair$1.value1 && pair$1.value1.xAdvance || 0;\n }\n }\n }\n return 0;\n };\n Position.prototype.getKerningTables = function(script, language) {\n if (this.font.tables.gpos) {\n return this.getLookupTables(script, language, \"kern\", 2);\n }\n };\n function Substitution(font) {\n Layout.call(this, font, \"gsub\");\n }\n function arraysEqual(ar1, ar2) {\n var n = ar1.length;\n if (n !== ar2.length) {\n return false;\n }\n for (var i = 0; i < n; i++) {\n if (ar1[i] !== ar2[i]) {\n return false;\n }\n }\n return true;\n }\n function getSubstFormat(lookupTable, format, defaultSubtable) {\n var subtables = lookupTable.subtables;\n for (var i = 0; i < subtables.length; i++) {\n var subtable = subtables[i];\n if (subtable.substFormat === format) {\n return subtable;\n }\n }\n if (defaultSubtable) {\n subtables.push(defaultSubtable);\n return defaultSubtable;\n }\n return void 0;\n }\n Substitution.prototype = Layout.prototype;\n Substitution.prototype.createDefaultTable = function() {\n return {\n version: 1,\n scripts: [\n {\n tag: \"DFLT\",\n script: {\n defaultLangSys: { reserved: 0, reqFeatureIndex: 65535, featureIndexes: [] },\n langSysRecords: []\n }\n }\n ],\n features: [],\n lookups: []\n };\n };\n Substitution.prototype.getSingle = function(feature, script, language) {\n var substitutions = [];\n var lookupTables = this.getLookupTables(script, language, feature, 1);\n for (var idx = 0; idx < lookupTables.length; idx++) {\n var subtables = lookupTables[idx].subtables;\n for (var i = 0; i < subtables.length; i++) {\n var subtable = subtables[i];\n var glyphs = this.expandCoverage(subtable.coverage);\n var j = void 0;\n if (subtable.substFormat === 1) {\n var delta = subtable.deltaGlyphId;\n for (j = 0; j < glyphs.length; j++) {\n var glyph = glyphs[j];\n substitutions.push({ sub: glyph, by: glyph + delta });\n }\n } else {\n var substitute = subtable.substitute;\n for (j = 0; j < glyphs.length; j++) {\n substitutions.push({ sub: glyphs[j], by: substitute[j] });\n }\n }\n }\n }\n return substitutions;\n };\n Substitution.prototype.getMultiple = function(feature, script, language) {\n var substitutions = [];\n var lookupTables = this.getLookupTables(script, language, feature, 2);\n for (var idx = 0; idx < lookupTables.length; idx++) {\n var subtables = lookupTables[idx].subtables;\n for (var i = 0; i < subtables.length; i++) {\n var subtable = subtables[i];\n var glyphs = this.expandCoverage(subtable.coverage);\n var j = void 0;\n for (j = 0; j < glyphs.length; j++) {\n var glyph = glyphs[j];\n var replacements = subtable.sequences[j];\n substitutions.push({ sub: glyph, by: replacements });\n }\n }\n }\n return substitutions;\n };\n Substitution.prototype.getAlternates = function(feature, script, language) {\n var alternates = [];\n var lookupTables = this.getLookupTables(script, language, feature, 3);\n for (var idx = 0; idx < lookupTables.length; idx++) {\n var subtables = lookupTables[idx].subtables;\n for (var i = 0; i < subtables.length; i++) {\n var subtable = subtables[i];\n var glyphs = this.expandCoverage(subtable.coverage);\n var alternateSets = subtable.alternateSets;\n for (var j = 0; j < glyphs.length; j++) {\n alternates.push({ sub: glyphs[j], by: alternateSets[j] });\n }\n }\n }\n return alternates;\n };\n Substitution.prototype.getLigatures = function(feature, script, language) {\n var ligatures = [];\n var lookupTables = this.getLookupTables(script, language, feature, 4);\n for (var idx = 0; idx < lookupTables.length; idx++) {\n var subtables = lookupTables[idx].subtables;\n for (var i = 0; i < subtables.length; i++) {\n var subtable = subtables[i];\n var glyphs = this.expandCoverage(subtable.coverage);\n var ligatureSets = subtable.ligatureSets;\n for (var j = 0; j < glyphs.length; j++) {\n var startGlyph = glyphs[j];\n var ligSet = ligatureSets[j];\n for (var k = 0; k < ligSet.length; k++) {\n var lig = ligSet[k];\n ligatures.push({\n sub: [startGlyph].concat(lig.components),\n by: lig.ligGlyph\n });\n }\n }\n }\n }\n return ligatures;\n };\n Substitution.prototype.addSingle = function(feature, substitution, script, language) {\n var lookupTable = this.getLookupTables(script, language, feature, 1, true)[0];\n var subtable = getSubstFormat(lookupTable, 2, {\n // lookup type 1 subtable, format 2, coverage format 1\n substFormat: 2,\n coverage: { format: 1, glyphs: [] },\n substitute: []\n });\n check.assert(\n subtable.coverage.format === 1,\n \"Single: unable to modify coverage table format \" + subtable.coverage.format\n );\n var coverageGlyph = substitution.sub;\n var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);\n if (pos < 0) {\n pos = -1 - pos;\n subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);\n subtable.substitute.splice(pos, 0, 0);\n }\n subtable.substitute[pos] = substitution.by;\n };\n Substitution.prototype.addMultiple = function(feature, substitution, script, language) {\n check.assert(\n substitution.by instanceof Array && substitution.by.length > 1,\n 'Multiple: \"by\" must be an array of two or more ids'\n );\n var lookupTable = this.getLookupTables(script, language, feature, 2, true)[0];\n var subtable = getSubstFormat(lookupTable, 1, {\n // lookup type 2 subtable, format 1, coverage format 1\n substFormat: 1,\n coverage: { format: 1, glyphs: [] },\n sequences: []\n });\n check.assert(\n subtable.coverage.format === 1,\n \"Multiple: unable to modify coverage table format \" + subtable.coverage.format\n );\n var coverageGlyph = substitution.sub;\n var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);\n if (pos < 0) {\n pos = -1 - pos;\n subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);\n subtable.sequences.splice(pos, 0, 0);\n }\n subtable.sequences[pos] = substitution.by;\n };\n Substitution.prototype.addAlternate = function(feature, substitution, script, language) {\n var lookupTable = this.getLookupTables(script, language, feature, 3, true)[0];\n var subtable = getSubstFormat(lookupTable, 1, {\n // lookup type 3 subtable, format 1, coverage format 1\n substFormat: 1,\n coverage: { format: 1, glyphs: [] },\n alternateSets: []\n });\n check.assert(\n subtable.coverage.format === 1,\n \"Alternate: unable to modify coverage table format \" + subtable.coverage.format\n );\n var coverageGlyph = substitution.sub;\n var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);\n if (pos < 0) {\n pos = -1 - pos;\n subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);\n subtable.alternateSets.splice(pos, 0, 0);\n }\n subtable.alternateSets[pos] = substitution.by;\n };\n Substitution.prototype.addLigature = function(feature, ligature, script, language) {\n var lookupTable = this.getLookupTables(script, language, feature, 4, true)[0];\n var subtable = lookupTable.subtables[0];\n if (!subtable) {\n subtable = {\n // lookup type 4 subtable, format 1, coverage format 1\n substFormat: 1,\n coverage: { format: 1, glyphs: [] },\n ligatureSets: []\n };\n lookupTable.subtables[0] = subtable;\n }\n check.assert(\n subtable.coverage.format === 1,\n \"Ligature: unable to modify coverage table format \" + subtable.coverage.format\n );\n var coverageGlyph = ligature.sub[0];\n var ligComponents = ligature.sub.slice(1);\n var ligatureTable = {\n ligGlyph: ligature.by,\n components: ligComponents\n };\n var pos = this.binSearch(subtable.coverage.glyphs, coverageGlyph);\n if (pos >= 0) {\n var ligatureSet = subtable.ligatureSets[pos];\n for (var i = 0; i < ligatureSet.length; i++) {\n if (arraysEqual(ligatureSet[i].components, ligComponents)) {\n return;\n }\n }\n ligatureSet.push(ligatureTable);\n } else {\n pos = -1 - pos;\n subtable.coverage.glyphs.splice(pos, 0, coverageGlyph);\n subtable.ligatureSets.splice(pos, 0, [ligatureTable]);\n }\n };\n Substitution.prototype.getFeature = function(feature, script, language) {\n if (/ss\\d\\d/.test(feature)) {\n return this.getSingle(feature, script, language);\n }\n switch (feature) {\n case \"aalt\":\n case \"salt\":\n return this.getSingle(feature, script, language).concat(this.getAlternates(feature, script, language));\n case \"dlig\":\n case \"liga\":\n case \"rlig\":\n return this.getLigatures(feature, script, language);\n case \"ccmp\":\n return this.getMultiple(feature, script, language).concat(this.getLigatures(feature, script, language));\n case \"stch\":\n return this.getMultiple(feature, script, language);\n }\n return void 0;\n };\n Substitution.prototype.add = function(feature, sub, script, language) {\n if (/ss\\d\\d/.test(feature)) {\n return this.addSingle(feature, sub, script, language);\n }\n switch (feature) {\n case \"aalt\":\n case \"salt\":\n if (typeof sub.by === \"number\") {\n return this.addSingle(feature, sub, script, language);\n }\n return this.addAlternate(feature, sub, script, language);\n case \"dlig\":\n case \"liga\":\n case \"rlig\":\n return this.addLigature(feature, sub, script, language);\n case \"ccmp\":\n if (sub.by instanceof Array) {\n return this.addMultiple(feature, sub, script, language);\n }\n return this.addLigature(feature, sub, script, language);\n }\n return void 0;\n };\n function checkArgument(expression, message) {\n if (!expression) {\n throw message;\n }\n }\n function parseGlyphCoordinate(p, flag, previousValue, shortVectorBitMask, sameBitMask) {\n var v;\n if ((flag & shortVectorBitMask) > 0) {\n v = p.parseByte();\n if ((flag & sameBitMask) === 0) {\n v = -v;\n }\n v = previousValue + v;\n } else {\n if ((flag & sameBitMask) > 0) {\n v = previousValue;\n } else {\n v = previousValue + p.parseShort();\n }\n }\n return v;\n }\n function parseGlyph(glyph, data, start) {\n var p = new parse.Parser(data, start);\n glyph.numberOfContours = p.parseShort();\n glyph._xMin = p.parseShort();\n glyph._yMin = p.parseShort();\n glyph._xMax = p.parseShort();\n glyph._yMax = p.parseShort();\n var flags;\n var flag;\n if (glyph.numberOfContours > 0) {\n var endPointIndices = glyph.endPointIndices = [];\n for (var i = 0; i < glyph.numberOfContours; i += 1) {\n endPointIndices.push(p.parseUShort());\n }\n glyph.instructionLength = p.parseUShort();\n glyph.instructions = [];\n for (var i$1 = 0; i$1 < glyph.instructionLength; i$1 += 1) {\n glyph.instructions.push(p.parseByte());\n }\n var numberOfCoordinates = endPointIndices[endPointIndices.length - 1] + 1;\n flags = [];\n for (var i$2 = 0; i$2 < numberOfCoordinates; i$2 += 1) {\n flag = p.parseByte();\n flags.push(flag);\n if ((flag & 8) > 0) {\n var repeatCount = p.parseByte();\n for (var j = 0; j < repeatCount; j += 1) {\n flags.push(flag);\n i$2 += 1;\n }\n }\n }\n check.argument(flags.length === numberOfCoordinates, \"Bad flags.\");\n if (endPointIndices.length > 0) {\n var points = [];\n var point;\n if (numberOfCoordinates > 0) {\n for (var i$3 = 0; i$3 < numberOfCoordinates; i$3 += 1) {\n flag = flags[i$3];\n point = {};\n point.onCurve = !!(flag & 1);\n point.lastPointOfContour = endPointIndices.indexOf(i$3) >= 0;\n points.push(point);\n }\n var px = 0;\n for (var i$4 = 0; i$4 < numberOfCoordinates; i$4 += 1) {\n flag = flags[i$4];\n point = points[i$4];\n point.x = parseGlyphCoordinate(p, flag, px, 2, 16);\n px = point.x;\n }\n var py = 0;\n for (var i$5 = 0; i$5 < numberOfCoordinates; i$5 += 1) {\n flag = flags[i$5];\n point = points[i$5];\n point.y = parseGlyphCoordinate(p, flag, py, 4, 32);\n py = point.y;\n }\n }\n glyph.points = points;\n } else {\n glyph.points = [];\n }\n } else if (glyph.numberOfContours === 0) {\n glyph.points = [];\n } else {\n glyph.isComposite = true;\n glyph.points = [];\n glyph.components = [];\n var moreComponents = true;\n while (moreComponents) {\n flags = p.parseUShort();\n var component = {\n glyphIndex: p.parseUShort(),\n xScale: 1,\n scale01: 0,\n scale10: 0,\n yScale: 1,\n dx: 0,\n dy: 0\n };\n if ((flags & 1) > 0) {\n if ((flags & 2) > 0) {\n component.dx = p.parseShort();\n component.dy = p.parseShort();\n } else {\n component.matchedPoints = [p.parseUShort(), p.parseUShort()];\n }\n } else {\n if ((flags & 2) > 0) {\n component.dx = p.parseChar();\n component.dy = p.parseChar();\n } else {\n component.matchedPoints = [p.parseByte(), p.parseByte()];\n }\n }\n if ((flags & 8) > 0) {\n component.xScale = component.yScale = p.parseF2Dot14();\n } else if ((flags & 64) > 0) {\n component.xScale = p.parseF2Dot14();\n component.yScale = p.parseF2Dot14();\n } else if ((flags & 128) > 0) {\n component.xScale = p.parseF2Dot14();\n component.scale01 = p.parseF2Dot14();\n component.scale10 = p.parseF2Dot14();\n component.yScale = p.parseF2Dot14();\n }\n glyph.components.push(component);\n moreComponents = !!(flags & 32);\n }\n if (flags & 256) {\n glyph.instructionLength = p.parseUShort();\n glyph.instructions = [];\n for (var i$6 = 0; i$6 < glyph.instructionLength; i$6 += 1) {\n glyph.instructions.push(p.parseByte());\n }\n }\n }\n }\n function transformPoints(points, transform) {\n var newPoints = [];\n for (var i = 0; i < points.length; i += 1) {\n var pt = points[i];\n var newPt = {\n x: transform.xScale * pt.x + transform.scale01 * pt.y + transform.dx,\n y: transform.scale10 * pt.x + transform.yScale * pt.y + transform.dy,\n onCurve: pt.onCurve,\n lastPointOfContour: pt.lastPointOfContour\n };\n newPoints.push(newPt);\n }\n return newPoints;\n }\n function getContours(points) {\n var contours = [];\n var currentContour = [];\n for (var i = 0; i < points.length; i += 1) {\n var pt = points[i];\n currentContour.push(pt);\n if (pt.lastPointOfContour) {\n contours.push(currentContour);\n currentContour = [];\n }\n }\n check.argument(currentContour.length === 0, \"There are still points left in the current contour.\");\n return contours;\n }\n function getPath(points) {\n var p = new Path();\n if (!points) {\n return p;\n }\n var contours = getContours(points);\n for (var contourIndex = 0; contourIndex < contours.length; ++contourIndex) {\n var contour = contours[contourIndex];\n var prev = null;\n var curr = contour[contour.length - 1];\n var next = contour[0];\n if (curr.onCurve) {\n p.moveTo(curr.x, curr.y);\n } else {\n if (next.onCurve) {\n p.moveTo(next.x, next.y);\n } else {\n var start = { x: (curr.x + next.x) * 0.5, y: (curr.y + next.y) * 0.5 };\n p.moveTo(start.x, start.y);\n }\n }\n for (var i = 0; i < contour.length; ++i) {\n prev = curr;\n curr = next;\n next = contour[(i + 1) % contour.length];\n if (curr.onCurve) {\n p.lineTo(curr.x, curr.y);\n } else {\n var next2 = next;\n if (!prev.onCurve) {\n ({ x: (curr.x + prev.x) * 0.5, y: (curr.y + prev.y) * 0.5 });\n }\n if (!next.onCurve) {\n next2 = { x: (curr.x + next.x) * 0.5, y: (curr.y + next.y) * 0.5 };\n }\n p.quadraticCurveTo(curr.x, curr.y, next2.x, next2.y);\n }\n }\n p.closePath();\n }\n return p;\n }\n function buildPath(glyphs, glyph) {\n if (glyph.isComposite) {\n for (var j = 0; j < glyph.components.length; j += 1) {\n var component = glyph.components[j];\n var componentGlyph = glyphs.get(component.glyphIndex);\n componentGlyph.getPath();\n if (componentGlyph.points) {\n var transformedPoints = void 0;\n if (component.matchedPoints === void 0) {\n transformedPoints = transformPoints(componentGlyph.points, component);\n } else {\n if (component.matchedPoints[0] > glyph.points.length - 1 || component.matchedPoints[1] > componentGlyph.points.length - 1) {\n throw Error(\"Matched points out of range in \" + glyph.name);\n }\n var firstPt = glyph.points[component.matchedPoints[0]];\n var secondPt = componentGlyph.points[component.matchedPoints[1]];\n var transform = {\n xScale: component.xScale,\n scale01: component.scale01,\n scale10: component.scale10,\n yScale: component.yScale,\n dx: 0,\n dy: 0\n };\n secondPt = transformPoints([secondPt], transform)[0];\n transform.dx = firstPt.x - secondPt.x;\n transform.dy = firstPt.y - secondPt.y;\n transformedPoints = transformPoints(componentGlyph.points, transform);\n }\n glyph.points = glyph.points.concat(transformedPoints);\n }\n }\n }\n return getPath(glyph.points);\n }\n function parseGlyfTableAll(data, start, loca2, font) {\n var glyphs = new glyphset.GlyphSet(font);\n for (var i = 0; i < loca2.length - 1; i += 1) {\n var offset = loca2[i];\n var nextOffset = loca2[i + 1];\n if (offset !== nextOffset) {\n glyphs.push(i, glyphset.ttfGlyphLoader(font, i, parseGlyph, data, start + offset, buildPath));\n } else {\n glyphs.push(i, glyphset.glyphLoader(font, i));\n }\n }\n return glyphs;\n }\n function parseGlyfTableOnLowMemory(data, start, loca2, font) {\n var glyphs = new glyphset.GlyphSet(font);\n font._push = function(i) {\n var offset = loca2[i];\n var nextOffset = loca2[i + 1];\n if (offset !== nextOffset) {\n glyphs.push(i, glyphset.ttfGlyphLoader(font, i, parseGlyph, data, start + offset, buildPath));\n } else {\n glyphs.push(i, glyphset.glyphLoader(font, i));\n }\n };\n return glyphs;\n }\n function parseGlyfTable(data, start, loca2, font, opt) {\n if (opt.lowMemory) {\n return parseGlyfTableOnLowMemory(data, start, loca2, font);\n } else {\n return parseGlyfTableAll(data, start, loca2, font);\n }\n }\n var glyf = { getPath, parse: parseGlyfTable };\n var instructionTable;\n var exec;\n var execGlyph;\n var execComponent;\n function Hinting(font) {\n this.font = font;\n this.getCommands = function(hPoints) {\n return glyf.getPath(hPoints).commands;\n };\n this._fpgmState = this._prepState = void 0;\n this._errorState = 0;\n }\n function roundOff(v) {\n return v;\n }\n function roundToGrid(v) {\n return Math.sign(v) * Math.round(Math.abs(v));\n }\n function roundToDoubleGrid(v) {\n return Math.sign(v) * Math.round(Math.abs(v * 2)) / 2;\n }\n function roundToHalfGrid(v) {\n return Math.sign(v) * (Math.round(Math.abs(v) + 0.5) - 0.5);\n }\n function roundUpToGrid(v) {\n return Math.sign(v) * Math.ceil(Math.abs(v));\n }\n function roundDownToGrid(v) {\n return Math.sign(v) * Math.floor(Math.abs(v));\n }\n var roundSuper = function(v) {\n var period = this.srPeriod;\n var phase = this.srPhase;\n var threshold = this.srThreshold;\n var sign = 1;\n if (v < 0) {\n v = -v;\n sign = -1;\n }\n v += threshold - phase;\n v = Math.trunc(v / period) * period;\n v += phase;\n if (v < 0) {\n return phase * sign;\n }\n return v * sign;\n };\n var xUnitVector = {\n x: 1,\n y: 0,\n axis: \"x\",\n // Gets the projected distance between two points.\n // o1/o2 ... if true, respective original position is used.\n distance: function(p1, p2, o1, o2) {\n return (o1 ? p1.xo : p1.x) - (o2 ? p2.xo : p2.x);\n },\n // Moves point p so the moved position has the same relative\n // position to the moved positions of rp1 and rp2 than the\n // original positions had.\n //\n // See APPENDIX on INTERPOLATE at the bottom of this file.\n interpolate: function(p, rp1, rp2, pv) {\n var do1;\n var do2;\n var doa1;\n var doa2;\n var dm1;\n var dm2;\n var dt;\n if (!pv || pv === this) {\n do1 = p.xo - rp1.xo;\n do2 = p.xo - rp2.xo;\n dm1 = rp1.x - rp1.xo;\n dm2 = rp2.x - rp2.xo;\n doa1 = Math.abs(do1);\n doa2 = Math.abs(do2);\n dt = doa1 + doa2;\n if (dt === 0) {\n p.x = p.xo + (dm1 + dm2) / 2;\n return;\n }\n p.x = p.xo + (dm1 * doa2 + dm2 * doa1) / dt;\n return;\n }\n do1 = pv.distance(p, rp1, true, true);\n do2 = pv.distance(p, rp2, true, true);\n dm1 = pv.distance(rp1, rp1, false, true);\n dm2 = pv.distance(rp2, rp2, false, true);\n doa1 = Math.abs(do1);\n doa2 = Math.abs(do2);\n dt = doa1 + doa2;\n if (dt === 0) {\n xUnitVector.setRelative(p, p, (dm1 + dm2) / 2, pv, true);\n return;\n }\n xUnitVector.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true);\n },\n // Slope of line normal to this\n normalSlope: Number.NEGATIVE_INFINITY,\n // Sets the point 'p' relative to point 'rp'\n // by the distance 'd'.\n //\n // See APPENDIX on SETRELATIVE at the bottom of this file.\n //\n // p ... point to set\n // rp ... reference point\n // d ... distance on projection vector\n // pv ... projection vector (undefined = this)\n // org ... if true, uses the original position of rp as reference.\n setRelative: function(p, rp, d, pv, org) {\n if (!pv || pv === this) {\n p.x = (org ? rp.xo : rp.x) + d;\n return;\n }\n var rpx = org ? rp.xo : rp.x;\n var rpy = org ? rp.yo : rp.y;\n var rpdx = rpx + d * pv.x;\n var rpdy = rpy + d * pv.y;\n p.x = rpdx + (p.y - rpdy) / pv.normalSlope;\n },\n // Slope of vector line.\n slope: 0,\n // Touches the point p.\n touch: function(p) {\n p.xTouched = true;\n },\n // Tests if a point p is touched.\n touched: function(p) {\n return p.xTouched;\n },\n // Untouches the point p.\n untouch: function(p) {\n p.xTouched = false;\n }\n };\n var yUnitVector = {\n x: 0,\n y: 1,\n axis: \"y\",\n // Gets the projected distance between two points.\n // o1/o2 ... if true, respective original position is used.\n distance: function(p1, p2, o1, o2) {\n return (o1 ? p1.yo : p1.y) - (o2 ? p2.yo : p2.y);\n },\n // Moves point p so the moved position has the same relative\n // position to the moved positions of rp1 and rp2 than the\n // original positions had.\n //\n // See APPENDIX on INTERPOLATE at the bottom of this file.\n interpolate: function(p, rp1, rp2, pv) {\n var do1;\n var do2;\n var doa1;\n var doa2;\n var dm1;\n var dm2;\n var dt;\n if (!pv || pv === this) {\n do1 = p.yo - rp1.yo;\n do2 = p.yo - rp2.yo;\n dm1 = rp1.y - rp1.yo;\n dm2 = rp2.y - rp2.yo;\n doa1 = Math.abs(do1);\n doa2 = Math.abs(do2);\n dt = doa1 + doa2;\n if (dt === 0) {\n p.y = p.yo + (dm1 + dm2) / 2;\n return;\n }\n p.y = p.yo + (dm1 * doa2 + dm2 * doa1) / dt;\n return;\n }\n do1 = pv.distance(p, rp1, true, true);\n do2 = pv.distance(p, rp2, true, true);\n dm1 = pv.distance(rp1, rp1, false, true);\n dm2 = pv.distance(rp2, rp2, false, true);\n doa1 = Math.abs(do1);\n doa2 = Math.abs(do2);\n dt = doa1 + doa2;\n if (dt === 0) {\n yUnitVector.setRelative(p, p, (dm1 + dm2) / 2, pv, true);\n return;\n }\n yUnitVector.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true);\n },\n // Slope of line normal to this.\n normalSlope: 0,\n // Sets the point 'p' relative to point 'rp'\n // by the distance 'd'\n //\n // See APPENDIX on SETRELATIVE at the bottom of this file.\n //\n // p ... point to set\n // rp ... reference point\n // d ... distance on projection vector\n // pv ... projection vector (undefined = this)\n // org ... if true, uses the original position of rp as reference.\n setRelative: function(p, rp, d, pv, org) {\n if (!pv || pv === this) {\n p.y = (org ? rp.yo : rp.y) + d;\n return;\n }\n var rpx = org ? rp.xo : rp.x;\n var rpy = org ? rp.yo : rp.y;\n var rpdx = rpx + d * pv.x;\n var rpdy = rpy + d * pv.y;\n p.y = rpdy + pv.normalSlope * (p.x - rpdx);\n },\n // Slope of vector line.\n slope: Number.POSITIVE_INFINITY,\n // Touches the point p.\n touch: function(p) {\n p.yTouched = true;\n },\n // Tests if a point p is touched.\n touched: function(p) {\n return p.yTouched;\n },\n // Untouches the point p.\n untouch: function(p) {\n p.yTouched = false;\n }\n };\n Object.freeze(xUnitVector);\n Object.freeze(yUnitVector);\n function UnitVector(x, y) {\n this.x = x;\n this.y = y;\n this.axis = void 0;\n this.slope = y / x;\n this.normalSlope = -x / y;\n Object.freeze(this);\n }\n UnitVector.prototype.distance = function(p1, p2, o1, o2) {\n return this.x * xUnitVector.distance(p1, p2, o1, o2) + this.y * yUnitVector.distance(p1, p2, o1, o2);\n };\n UnitVector.prototype.interpolate = function(p, rp1, rp2, pv) {\n var dm1;\n var dm2;\n var do1;\n var do2;\n var doa1;\n var doa2;\n var dt;\n do1 = pv.distance(p, rp1, true, true);\n do2 = pv.distance(p, rp2, true, true);\n dm1 = pv.distance(rp1, rp1, false, true);\n dm2 = pv.distance(rp2, rp2, false, true);\n doa1 = Math.abs(do1);\n doa2 = Math.abs(do2);\n dt = doa1 + doa2;\n if (dt === 0) {\n this.setRelative(p, p, (dm1 + dm2) / 2, pv, true);\n return;\n }\n this.setRelative(p, p, (dm1 * doa2 + dm2 * doa1) / dt, pv, true);\n };\n UnitVector.prototype.setRelative = function(p, rp, d, pv, org) {\n pv = pv || this;\n var rpx = org ? rp.xo : rp.x;\n var rpy = org ? rp.yo : rp.y;\n var rpdx = rpx + d * pv.x;\n var rpdy = rpy + d * pv.y;\n var pvns = pv.normalSlope;\n var fvs = this.slope;\n var px = p.x;\n var py = p.y;\n p.x = (fvs * px - pvns * rpdx + rpdy - py) / (fvs - pvns);\n p.y = fvs * (p.x - px) + py;\n };\n UnitVector.prototype.touch = function(p) {\n p.xTouched = true;\n p.yTouched = true;\n };\n function getUnitVector(x, y) {\n var d = Math.sqrt(x * x + y * y);\n x /= d;\n y /= d;\n if (x === 1 && y === 0) {\n return xUnitVector;\n } else if (x === 0 && y === 1) {\n return yUnitVector;\n } else {\n return new UnitVector(x, y);\n }\n }\n function HPoint(x, y, lastPointOfContour, onCurve) {\n this.x = this.xo = Math.round(x * 64) / 64;\n this.y = this.yo = Math.round(y * 64) / 64;\n this.lastPointOfContour = lastPointOfContour;\n this.onCurve = onCurve;\n this.prevPointOnContour = void 0;\n this.nextPointOnContour = void 0;\n this.xTouched = false;\n this.yTouched = false;\n Object.preventExtensions(this);\n }\n HPoint.prototype.nextTouched = function(v) {\n var p = this.nextPointOnContour;\n while (!v.touched(p) && p !== this) {\n p = p.nextPointOnContour;\n }\n return p;\n };\n HPoint.prototype.prevTouched = function(v) {\n var p = this.prevPointOnContour;\n while (!v.touched(p) && p !== this) {\n p = p.prevPointOnContour;\n }\n return p;\n };\n var HPZero = Object.freeze(new HPoint(0, 0));\n var defaultState = {\n cvCutIn: 17 / 16,\n // control value cut in\n deltaBase: 9,\n deltaShift: 0.125,\n loop: 1,\n // loops some instructions\n minDis: 1,\n // minimum distance\n autoFlip: true\n };\n function State(env, prog) {\n this.env = env;\n this.stack = [];\n this.prog = prog;\n switch (env) {\n case \"glyf\":\n this.zp0 = this.zp1 = this.zp2 = 1;\n this.rp0 = this.rp1 = this.rp2 = 0;\n case \"prep\":\n this.fv = this.pv = this.dpv = xUnitVector;\n this.round = roundToGrid;\n }\n }\n Hinting.prototype.exec = function(glyph, ppem) {\n if (typeof ppem !== \"number\") {\n throw new Error(\"Point size is not a number!\");\n }\n if (this._errorState > 2) {\n return;\n }\n var font = this.font;\n var prepState = this._prepState;\n if (!prepState || prepState.ppem !== ppem) {\n var fpgmState = this._fpgmState;\n if (!fpgmState) {\n State.prototype = defaultState;\n fpgmState = this._fpgmState = new State(\"fpgm\", font.tables.fpgm);\n fpgmState.funcs = [];\n fpgmState.font = font;\n if (exports.DEBUG) {\n console.log(\"---EXEC FPGM---\");\n fpgmState.step = -1;\n }\n try {\n exec(fpgmState);\n } catch (e) {\n console.log(\"Hinting error in FPGM:\" + e);\n this._errorState = 3;\n return;\n }\n }\n State.prototype = fpgmState;\n prepState = this._prepState = new State(\"prep\", font.tables.prep);\n prepState.ppem = ppem;\n var oCvt = font.tables.cvt;\n if (oCvt) {\n var cvt = prepState.cvt = new Array(oCvt.length);\n var scale = ppem / font.unitsPerEm;\n for (var c = 0; c < oCvt.length; c++) {\n cvt[c] = oCvt[c] * scale;\n }\n } else {\n prepState.cvt = [];\n }\n if (exports.DEBUG) {\n console.log(\"---EXEC PREP---\");\n prepState.step = -1;\n }\n try {\n exec(prepState);\n } catch (e) {\n if (this._errorState < 2) {\n console.log(\"Hinting error in PREP:\" + e);\n }\n this._errorState = 2;\n }\n }\n if (this._errorState > 1) {\n return;\n }\n try {\n return execGlyph(glyph, prepState);\n } catch (e) {\n if (this._errorState < 1) {\n console.log(\"Hinting error:\" + e);\n console.log(\"Note: further hinting errors are silenced\");\n }\n this._errorState = 1;\n return void 0;\n }\n };\n execGlyph = function(glyph, prepState) {\n var xScale = prepState.ppem / prepState.font.unitsPerEm;\n var yScale = xScale;\n var components = glyph.components;\n var contours;\n var gZone;\n var state;\n State.prototype = prepState;\n if (!components) {\n state = new State(\"glyf\", glyph.instructions);\n if (exports.DEBUG) {\n console.log(\"---EXEC GLYPH---\");\n state.step = -1;\n }\n execComponent(glyph, state, xScale, yScale);\n gZone = state.gZone;\n } else {\n var font = prepState.font;\n gZone = [];\n contours = [];\n for (var i = 0; i < components.length; i++) {\n var c = components[i];\n var cg = font.glyphs.get(c.glyphIndex);\n state = new State(\"glyf\", cg.instructions);\n if (exports.DEBUG) {\n console.log(\"---EXEC COMP \" + i + \"---\");\n state.step = -1;\n }\n execComponent(cg, state, xScale, yScale);\n var dx = Math.round(c.dx * xScale);\n var dy = Math.round(c.dy * yScale);\n var gz = state.gZone;\n var cc = state.contours;\n for (var pi = 0; pi < gz.length; pi++) {\n var p = gz[pi];\n p.xTouched = p.yTouched = false;\n p.xo = p.x = p.x + dx;\n p.yo = p.y = p.y + dy;\n }\n var gLen = gZone.length;\n gZone.push.apply(gZone, gz);\n for (var j = 0; j < cc.length; j++) {\n contours.push(cc[j] + gLen);\n }\n }\n if (glyph.instructions && !state.inhibitGridFit) {\n state = new State(\"glyf\", glyph.instructions);\n state.gZone = state.z0 = state.z1 = state.z2 = gZone;\n state.contours = contours;\n gZone.push(new HPoint(0, 0), new HPoint(Math.round(glyph.advanceWidth * xScale), 0));\n if (exports.DEBUG) {\n console.log(\"---EXEC COMPOSITE---\");\n state.step = -1;\n }\n exec(state);\n gZone.length -= 2;\n }\n }\n return gZone;\n };\n execComponent = function(glyph, state, xScale, yScale) {\n var points = glyph.points || [];\n var pLen = points.length;\n var gZone = state.gZone = state.z0 = state.z1 = state.z2 = [];\n var contours = state.contours = [];\n var cp;\n for (var i = 0; i < pLen; i++) {\n cp = points[i];\n gZone[i] = new HPoint(cp.x * xScale, cp.y * yScale, cp.lastPointOfContour, cp.onCurve);\n }\n var sp;\n var np;\n for (var i$1 = 0; i$1 < pLen; i$1++) {\n cp = gZone[i$1];\n if (!sp) {\n sp = cp;\n contours.push(i$1);\n }\n if (cp.lastPointOfContour) {\n cp.nextPointOnContour = sp;\n sp.prevPointOnContour = cp;\n sp = void 0;\n } else {\n np = gZone[i$1 + 1];\n cp.nextPointOnContour = np;\n np.prevPointOnContour = cp;\n }\n }\n if (state.inhibitGridFit) {\n return;\n }\n if (exports.DEBUG) {\n console.log(\"PROCESSING GLYPH\", state.stack);\n for (var i$2 = 0; i$2 < pLen; i$2++) {\n console.log(i$2, gZone[i$2].x, gZone[i$2].y);\n }\n }\n gZone.push(new HPoint(0, 0), new HPoint(Math.round(glyph.advanceWidth * xScale), 0));\n exec(state);\n gZone.length -= 2;\n if (exports.DEBUG) {\n console.log(\"FINISHED GLYPH\", state.stack);\n for (var i$3 = 0; i$3 < pLen; i$3++) {\n console.log(i$3, gZone[i$3].x, gZone[i$3].y);\n }\n }\n };\n exec = function(state) {\n var prog = state.prog;\n if (!prog) {\n return;\n }\n var pLen = prog.length;\n var ins;\n for (state.ip = 0; state.ip < pLen; state.ip++) {\n if (exports.DEBUG) {\n state.step++;\n }\n ins = instructionTable[prog[state.ip]];\n if (!ins) {\n throw new Error(\"unknown instruction: 0x\" + Number(prog[state.ip]).toString(16));\n }\n ins(state);\n }\n };\n function initTZone(state) {\n var tZone = state.tZone = new Array(state.gZone.length);\n for (var i = 0; i < tZone.length; i++) {\n tZone[i] = new HPoint(0, 0);\n }\n }\n function skip(state, handleElse) {\n var prog = state.prog;\n var ip = state.ip;\n var nesting = 1;\n var ins;\n do {\n ins = prog[++ip];\n if (ins === 88) {\n nesting++;\n } else if (ins === 89) {\n nesting--;\n } else if (ins === 64) {\n ip += prog[ip + 1] + 1;\n } else if (ins === 65) {\n ip += 2 * prog[ip + 1] + 1;\n } else if (ins >= 176 && ins <= 183) {\n ip += ins - 176 + 1;\n } else if (ins >= 184 && ins <= 191) {\n ip += (ins - 184 + 1) * 2;\n } else if (handleElse && nesting === 1 && ins === 27) {\n break;\n }\n } while (nesting > 0);\n state.ip = ip;\n }\n function SVTCA(v, state) {\n if (exports.DEBUG) {\n console.log(state.step, \"SVTCA[\" + v.axis + \"]\");\n }\n state.fv = state.pv = state.dpv = v;\n }\n function SPVTCA(v, state) {\n if (exports.DEBUG) {\n console.log(state.step, \"SPVTCA[\" + v.axis + \"]\");\n }\n state.pv = state.dpv = v;\n }\n function SFVTCA(v, state) {\n if (exports.DEBUG) {\n console.log(state.step, \"SFVTCA[\" + v.axis + \"]\");\n }\n state.fv = v;\n }\n function SPVTL(a, state) {\n var stack = state.stack;\n var p2i = stack.pop();\n var p1i = stack.pop();\n var p2 = state.z2[p2i];\n var p1 = state.z1[p1i];\n if (exports.DEBUG) {\n console.log(\"SPVTL[\" + a + \"]\", p2i, p1i);\n }\n var dx;\n var dy;\n if (!a) {\n dx = p1.x - p2.x;\n dy = p1.y - p2.y;\n } else {\n dx = p2.y - p1.y;\n dy = p1.x - p2.x;\n }\n state.pv = state.dpv = getUnitVector(dx, dy);\n }\n function SFVTL(a, state) {\n var stack = state.stack;\n var p2i = stack.pop();\n var p1i = stack.pop();\n var p2 = state.z2[p2i];\n var p1 = state.z1[p1i];\n if (exports.DEBUG) {\n console.log(\"SFVTL[\" + a + \"]\", p2i, p1i);\n }\n var dx;\n var dy;\n if (!a) {\n dx = p1.x - p2.x;\n dy = p1.y - p2.y;\n } else {\n dx = p2.y - p1.y;\n dy = p1.x - p2.x;\n }\n state.fv = getUnitVector(dx, dy);\n }\n function SPVFS(state) {\n var stack = state.stack;\n var y = stack.pop();\n var x = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"SPVFS[]\", y, x);\n }\n state.pv = state.dpv = getUnitVector(x, y);\n }\n function SFVFS(state) {\n var stack = state.stack;\n var y = stack.pop();\n var x = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"SPVFS[]\", y, x);\n }\n state.fv = getUnitVector(x, y);\n }\n function GPV(state) {\n var stack = state.stack;\n var pv = state.pv;\n if (exports.DEBUG) {\n console.log(state.step, \"GPV[]\");\n }\n stack.push(pv.x * 16384);\n stack.push(pv.y * 16384);\n }\n function GFV(state) {\n var stack = state.stack;\n var fv = state.fv;\n if (exports.DEBUG) {\n console.log(state.step, \"GFV[]\");\n }\n stack.push(fv.x * 16384);\n stack.push(fv.y * 16384);\n }\n function SFVTPV(state) {\n state.fv = state.pv;\n if (exports.DEBUG) {\n console.log(state.step, \"SFVTPV[]\");\n }\n }\n function ISECT(state) {\n var stack = state.stack;\n var pa0i = stack.pop();\n var pa1i = stack.pop();\n var pb0i = stack.pop();\n var pb1i = stack.pop();\n var pi = stack.pop();\n var z0 = state.z0;\n var z1 = state.z1;\n var pa0 = z0[pa0i];\n var pa1 = z0[pa1i];\n var pb0 = z1[pb0i];\n var pb1 = z1[pb1i];\n var p = state.z2[pi];\n if (exports.DEBUG) {\n console.log(\"ISECT[], \", pa0i, pa1i, pb0i, pb1i, pi);\n }\n var x1 = pa0.x;\n var y1 = pa0.y;\n var x2 = pa1.x;\n var y2 = pa1.y;\n var x3 = pb0.x;\n var y3 = pb0.y;\n var x4 = pb1.x;\n var y4 = pb1.y;\n var div = (x1 - x2) * (y3 - y4) - (y1 - y2) * (x3 - x4);\n var f1 = x1 * y2 - y1 * x2;\n var f2 = x3 * y4 - y3 * x4;\n p.x = (f1 * (x3 - x4) - f2 * (x1 - x2)) / div;\n p.y = (f1 * (y3 - y4) - f2 * (y1 - y2)) / div;\n }\n function SRP0(state) {\n state.rp0 = state.stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"SRP0[]\", state.rp0);\n }\n }\n function SRP1(state) {\n state.rp1 = state.stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"SRP1[]\", state.rp1);\n }\n }\n function SRP2(state) {\n state.rp2 = state.stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"SRP2[]\", state.rp2);\n }\n }\n function SZP0(state) {\n var n = state.stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"SZP0[]\", n);\n }\n state.zp0 = n;\n switch (n) {\n case 0:\n if (!state.tZone) {\n initTZone(state);\n }\n state.z0 = state.tZone;\n break;\n case 1:\n state.z0 = state.gZone;\n break;\n default:\n throw new Error(\"Invalid zone pointer\");\n }\n }\n function SZP1(state) {\n var n = state.stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"SZP1[]\", n);\n }\n state.zp1 = n;\n switch (n) {\n case 0:\n if (!state.tZone) {\n initTZone(state);\n }\n state.z1 = state.tZone;\n break;\n case 1:\n state.z1 = state.gZone;\n break;\n default:\n throw new Error(\"Invalid zone pointer\");\n }\n }\n function SZP2(state) {\n var n = state.stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"SZP2[]\", n);\n }\n state.zp2 = n;\n switch (n) {\n case 0:\n if (!state.tZone) {\n initTZone(state);\n }\n state.z2 = state.tZone;\n break;\n case 1:\n state.z2 = state.gZone;\n break;\n default:\n throw new Error(\"Invalid zone pointer\");\n }\n }\n function SZPS(state) {\n var n = state.stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"SZPS[]\", n);\n }\n state.zp0 = state.zp1 = state.zp2 = n;\n switch (n) {\n case 0:\n if (!state.tZone) {\n initTZone(state);\n }\n state.z0 = state.z1 = state.z2 = state.tZone;\n break;\n case 1:\n state.z0 = state.z1 = state.z2 = state.gZone;\n break;\n default:\n throw new Error(\"Invalid zone pointer\");\n }\n }\n function SLOOP(state) {\n state.loop = state.stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"SLOOP[]\", state.loop);\n }\n }\n function RTG(state) {\n if (exports.DEBUG) {\n console.log(state.step, \"RTG[]\");\n }\n state.round = roundToGrid;\n }\n function RTHG(state) {\n if (exports.DEBUG) {\n console.log(state.step, \"RTHG[]\");\n }\n state.round = roundToHalfGrid;\n }\n function SMD(state) {\n var d = state.stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"SMD[]\", d);\n }\n state.minDis = d / 64;\n }\n function ELSE(state) {\n if (exports.DEBUG) {\n console.log(state.step, \"ELSE[]\");\n }\n skip(state, false);\n }\n function JMPR(state) {\n var o = state.stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"JMPR[]\", o);\n }\n state.ip += o - 1;\n }\n function SCVTCI(state) {\n var n = state.stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"SCVTCI[]\", n);\n }\n state.cvCutIn = n / 64;\n }\n function DUP(state) {\n var stack = state.stack;\n if (exports.DEBUG) {\n console.log(state.step, \"DUP[]\");\n }\n stack.push(stack[stack.length - 1]);\n }\n function POP(state) {\n if (exports.DEBUG) {\n console.log(state.step, \"POP[]\");\n }\n state.stack.pop();\n }\n function CLEAR(state) {\n if (exports.DEBUG) {\n console.log(state.step, \"CLEAR[]\");\n }\n state.stack.length = 0;\n }\n function SWAP(state) {\n var stack = state.stack;\n var a = stack.pop();\n var b = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"SWAP[]\");\n }\n stack.push(a);\n stack.push(b);\n }\n function DEPTH(state) {\n var stack = state.stack;\n if (exports.DEBUG) {\n console.log(state.step, \"DEPTH[]\");\n }\n stack.push(stack.length);\n }\n function LOOPCALL(state) {\n var stack = state.stack;\n var fn = stack.pop();\n var c = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"LOOPCALL[]\", fn, c);\n }\n var cip = state.ip;\n var cprog = state.prog;\n state.prog = state.funcs[fn];\n for (var i = 0; i < c; i++) {\n exec(state);\n if (exports.DEBUG) {\n console.log(++state.step, i + 1 < c ? \"next loopcall\" : \"done loopcall\", i);\n }\n }\n state.ip = cip;\n state.prog = cprog;\n }\n function CALL(state) {\n var fn = state.stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"CALL[]\", fn);\n }\n var cip = state.ip;\n var cprog = state.prog;\n state.prog = state.funcs[fn];\n exec(state);\n state.ip = cip;\n state.prog = cprog;\n if (exports.DEBUG) {\n console.log(++state.step, \"returning from\", fn);\n }\n }\n function CINDEX(state) {\n var stack = state.stack;\n var k = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"CINDEX[]\", k);\n }\n stack.push(stack[stack.length - k]);\n }\n function MINDEX(state) {\n var stack = state.stack;\n var k = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"MINDEX[]\", k);\n }\n stack.push(stack.splice(stack.length - k, 1)[0]);\n }\n function FDEF(state) {\n if (state.env !== \"fpgm\") {\n throw new Error(\"FDEF not allowed here\");\n }\n var stack = state.stack;\n var prog = state.prog;\n var ip = state.ip;\n var fn = stack.pop();\n var ipBegin = ip;\n if (exports.DEBUG) {\n console.log(state.step, \"FDEF[]\", fn);\n }\n while (prog[++ip] !== 45) {\n }\n state.ip = ip;\n state.funcs[fn] = prog.slice(ipBegin + 1, ip);\n }\n function MDAP(round, state) {\n var pi = state.stack.pop();\n var p = state.z0[pi];\n var fv = state.fv;\n var pv = state.pv;\n if (exports.DEBUG) {\n console.log(state.step, \"MDAP[\" + round + \"]\", pi);\n }\n var d = pv.distance(p, HPZero);\n if (round) {\n d = state.round(d);\n }\n fv.setRelative(p, HPZero, d, pv);\n fv.touch(p);\n state.rp0 = state.rp1 = pi;\n }\n function IUP(v, state) {\n var z2 = state.z2;\n var pLen = z2.length - 2;\n var cp;\n var pp;\n var np;\n if (exports.DEBUG) {\n console.log(state.step, \"IUP[\" + v.axis + \"]\");\n }\n for (var i = 0; i < pLen; i++) {\n cp = z2[i];\n if (v.touched(cp)) {\n continue;\n }\n pp = cp.prevTouched(v);\n if (pp === cp) {\n continue;\n }\n np = cp.nextTouched(v);\n if (pp === np) {\n v.setRelative(cp, cp, v.distance(pp, pp, false, true), v, true);\n }\n v.interpolate(cp, pp, np, v);\n }\n }\n function SHP(a, state) {\n var stack = state.stack;\n var rpi = a ? state.rp1 : state.rp2;\n var rp = (a ? state.z0 : state.z1)[rpi];\n var fv = state.fv;\n var pv = state.pv;\n var loop = state.loop;\n var z2 = state.z2;\n while (loop--) {\n var pi = stack.pop();\n var p = z2[pi];\n var d = pv.distance(rp, rp, false, true);\n fv.setRelative(p, p, d, pv);\n fv.touch(p);\n if (exports.DEBUG) {\n console.log(\n state.step,\n (state.loop > 1 ? \"loop \" + (state.loop - loop) + \": \" : \"\") + \"SHP[\" + (a ? \"rp1\" : \"rp2\") + \"]\",\n pi\n );\n }\n }\n state.loop = 1;\n }\n function SHC(a, state) {\n var stack = state.stack;\n var rpi = a ? state.rp1 : state.rp2;\n var rp = (a ? state.z0 : state.z1)[rpi];\n var fv = state.fv;\n var pv = state.pv;\n var ci = stack.pop();\n var sp = state.z2[state.contours[ci]];\n var p = sp;\n if (exports.DEBUG) {\n console.log(state.step, \"SHC[\" + a + \"]\", ci);\n }\n var d = pv.distance(rp, rp, false, true);\n do {\n if (p !== rp) {\n fv.setRelative(p, p, d, pv);\n }\n p = p.nextPointOnContour;\n } while (p !== sp);\n }\n function SHZ(a, state) {\n var stack = state.stack;\n var rpi = a ? state.rp1 : state.rp2;\n var rp = (a ? state.z0 : state.z1)[rpi];\n var fv = state.fv;\n var pv = state.pv;\n var e = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"SHZ[\" + a + \"]\", e);\n }\n var z;\n switch (e) {\n case 0:\n z = state.tZone;\n break;\n case 1:\n z = state.gZone;\n break;\n default:\n throw new Error(\"Invalid zone\");\n }\n var p;\n var d = pv.distance(rp, rp, false, true);\n var pLen = z.length - 2;\n for (var i = 0; i < pLen; i++) {\n p = z[i];\n fv.setRelative(p, p, d, pv);\n }\n }\n function SHPIX(state) {\n var stack = state.stack;\n var loop = state.loop;\n var fv = state.fv;\n var d = stack.pop() / 64;\n var z2 = state.z2;\n while (loop--) {\n var pi = stack.pop();\n var p = z2[pi];\n if (exports.DEBUG) {\n console.log(state.step, (state.loop > 1 ? \"loop \" + (state.loop - loop) + \": \" : \"\") + \"SHPIX[]\", pi, d);\n }\n fv.setRelative(p, p, d);\n fv.touch(p);\n }\n state.loop = 1;\n }\n function IP(state) {\n var stack = state.stack;\n var rp1i = state.rp1;\n var rp2i = state.rp2;\n var loop = state.loop;\n var rp1 = state.z0[rp1i];\n var rp2 = state.z1[rp2i];\n var fv = state.fv;\n var pv = state.dpv;\n var z2 = state.z2;\n while (loop--) {\n var pi = stack.pop();\n var p = z2[pi];\n if (exports.DEBUG) {\n console.log(\n state.step,\n (state.loop > 1 ? \"loop \" + (state.loop - loop) + \": \" : \"\") + \"IP[]\",\n pi,\n rp1i,\n \"<->\",\n rp2i\n );\n }\n fv.interpolate(p, rp1, rp2, pv);\n fv.touch(p);\n }\n state.loop = 1;\n }\n function MSIRP(a, state) {\n var stack = state.stack;\n var d = stack.pop() / 64;\n var pi = stack.pop();\n var p = state.z1[pi];\n var rp0 = state.z0[state.rp0];\n var fv = state.fv;\n var pv = state.pv;\n fv.setRelative(p, rp0, d, pv);\n fv.touch(p);\n if (exports.DEBUG) {\n console.log(state.step, \"MSIRP[\" + a + \"]\", d, pi);\n }\n state.rp1 = state.rp0;\n state.rp2 = pi;\n if (a) {\n state.rp0 = pi;\n }\n }\n function ALIGNRP(state) {\n var stack = state.stack;\n var rp0i = state.rp0;\n var rp0 = state.z0[rp0i];\n var loop = state.loop;\n var fv = state.fv;\n var pv = state.pv;\n var z1 = state.z1;\n while (loop--) {\n var pi = stack.pop();\n var p = z1[pi];\n if (exports.DEBUG) {\n console.log(state.step, (state.loop > 1 ? \"loop \" + (state.loop - loop) + \": \" : \"\") + \"ALIGNRP[]\", pi);\n }\n fv.setRelative(p, rp0, 0, pv);\n fv.touch(p);\n }\n state.loop = 1;\n }\n function RTDG(state) {\n if (exports.DEBUG) {\n console.log(state.step, \"RTDG[]\");\n }\n state.round = roundToDoubleGrid;\n }\n function MIAP(round, state) {\n var stack = state.stack;\n var n = stack.pop();\n var pi = stack.pop();\n var p = state.z0[pi];\n var fv = state.fv;\n var pv = state.pv;\n var cv = state.cvt[n];\n if (exports.DEBUG) {\n console.log(state.step, \"MIAP[\" + round + \"]\", n, \"(\", cv, \")\", pi);\n }\n var d = pv.distance(p, HPZero);\n if (round) {\n if (Math.abs(d - cv) < state.cvCutIn) {\n d = cv;\n }\n d = state.round(d);\n }\n fv.setRelative(p, HPZero, d, pv);\n if (state.zp0 === 0) {\n p.xo = p.x;\n p.yo = p.y;\n }\n fv.touch(p);\n state.rp0 = state.rp1 = pi;\n }\n function NPUSHB(state) {\n var prog = state.prog;\n var ip = state.ip;\n var stack = state.stack;\n var n = prog[++ip];\n if (exports.DEBUG) {\n console.log(state.step, \"NPUSHB[]\", n);\n }\n for (var i = 0; i < n; i++) {\n stack.push(prog[++ip]);\n }\n state.ip = ip;\n }\n function NPUSHW(state) {\n var ip = state.ip;\n var prog = state.prog;\n var stack = state.stack;\n var n = prog[++ip];\n if (exports.DEBUG) {\n console.log(state.step, \"NPUSHW[]\", n);\n }\n for (var i = 0; i < n; i++) {\n var w = prog[++ip] << 8 | prog[++ip];\n if (w & 32768) {\n w = -((w ^ 65535) + 1);\n }\n stack.push(w);\n }\n state.ip = ip;\n }\n function WS(state) {\n var stack = state.stack;\n var store = state.store;\n if (!store) {\n store = state.store = [];\n }\n var v = stack.pop();\n var l = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"WS\", v, l);\n }\n store[l] = v;\n }\n function RS(state) {\n var stack = state.stack;\n var store = state.store;\n var l = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"RS\", l);\n }\n var v = store && store[l] || 0;\n stack.push(v);\n }\n function WCVTP(state) {\n var stack = state.stack;\n var v = stack.pop();\n var l = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"WCVTP\", v, l);\n }\n state.cvt[l] = v / 64;\n }\n function RCVT(state) {\n var stack = state.stack;\n var cvte = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"RCVT\", cvte);\n }\n stack.push(state.cvt[cvte] * 64);\n }\n function GC(a, state) {\n var stack = state.stack;\n var pi = stack.pop();\n var p = state.z2[pi];\n if (exports.DEBUG) {\n console.log(state.step, \"GC[\" + a + \"]\", pi);\n }\n stack.push(state.dpv.distance(p, HPZero, a, false) * 64);\n }\n function MD(a, state) {\n var stack = state.stack;\n var pi2 = stack.pop();\n var pi1 = stack.pop();\n var p2 = state.z1[pi2];\n var p1 = state.z0[pi1];\n var d = state.dpv.distance(p1, p2, a, a);\n if (exports.DEBUG) {\n console.log(state.step, \"MD[\" + a + \"]\", pi2, pi1, \"->\", d);\n }\n state.stack.push(Math.round(d * 64));\n }\n function MPPEM(state) {\n if (exports.DEBUG) {\n console.log(state.step, \"MPPEM[]\");\n }\n state.stack.push(state.ppem);\n }\n function FLIPON(state) {\n if (exports.DEBUG) {\n console.log(state.step, \"FLIPON[]\");\n }\n state.autoFlip = true;\n }\n function LT(state) {\n var stack = state.stack;\n var e2 = stack.pop();\n var e1 = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"LT[]\", e2, e1);\n }\n stack.push(e1 < e2 ? 1 : 0);\n }\n function LTEQ(state) {\n var stack = state.stack;\n var e2 = stack.pop();\n var e1 = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"LTEQ[]\", e2, e1);\n }\n stack.push(e1 <= e2 ? 1 : 0);\n }\n function GT(state) {\n var stack = state.stack;\n var e2 = stack.pop();\n var e1 = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"GT[]\", e2, e1);\n }\n stack.push(e1 > e2 ? 1 : 0);\n }\n function GTEQ(state) {\n var stack = state.stack;\n var e2 = stack.pop();\n var e1 = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"GTEQ[]\", e2, e1);\n }\n stack.push(e1 >= e2 ? 1 : 0);\n }\n function EQ(state) {\n var stack = state.stack;\n var e2 = stack.pop();\n var e1 = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"EQ[]\", e2, e1);\n }\n stack.push(e2 === e1 ? 1 : 0);\n }\n function NEQ(state) {\n var stack = state.stack;\n var e2 = stack.pop();\n var e1 = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"NEQ[]\", e2, e1);\n }\n stack.push(e2 !== e1 ? 1 : 0);\n }\n function ODD(state) {\n var stack = state.stack;\n var n = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"ODD[]\", n);\n }\n stack.push(Math.trunc(n) % 2 ? 1 : 0);\n }\n function EVEN(state) {\n var stack = state.stack;\n var n = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"EVEN[]\", n);\n }\n stack.push(Math.trunc(n) % 2 ? 0 : 1);\n }\n function IF(state) {\n var test = state.stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"IF[]\", test);\n }\n if (!test) {\n skip(state, true);\n if (exports.DEBUG) {\n console.log(state.step, \"EIF[]\");\n }\n }\n }\n function EIF(state) {\n if (exports.DEBUG) {\n console.log(state.step, \"EIF[]\");\n }\n }\n function AND(state) {\n var stack = state.stack;\n var e2 = stack.pop();\n var e1 = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"AND[]\", e2, e1);\n }\n stack.push(e2 && e1 ? 1 : 0);\n }\n function OR(state) {\n var stack = state.stack;\n var e2 = stack.pop();\n var e1 = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"OR[]\", e2, e1);\n }\n stack.push(e2 || e1 ? 1 : 0);\n }\n function NOT(state) {\n var stack = state.stack;\n var e = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"NOT[]\", e);\n }\n stack.push(e ? 0 : 1);\n }\n function DELTAP123(b, state) {\n var stack = state.stack;\n var n = stack.pop();\n var fv = state.fv;\n var pv = state.pv;\n var ppem = state.ppem;\n var base = state.deltaBase + (b - 1) * 16;\n var ds = state.deltaShift;\n var z0 = state.z0;\n if (exports.DEBUG) {\n console.log(state.step, \"DELTAP[\" + b + \"]\", n, stack);\n }\n for (var i = 0; i < n; i++) {\n var pi = stack.pop();\n var arg = stack.pop();\n var appem = base + ((arg & 240) >> 4);\n if (appem !== ppem) {\n continue;\n }\n var mag = (arg & 15) - 8;\n if (mag >= 0) {\n mag++;\n }\n if (exports.DEBUG) {\n console.log(state.step, \"DELTAPFIX\", pi, \"by\", mag * ds);\n }\n var p = z0[pi];\n fv.setRelative(p, p, mag * ds, pv);\n }\n }\n function SDB(state) {\n var stack = state.stack;\n var n = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"SDB[]\", n);\n }\n state.deltaBase = n;\n }\n function SDS(state) {\n var stack = state.stack;\n var n = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"SDS[]\", n);\n }\n state.deltaShift = Math.pow(0.5, n);\n }\n function ADD(state) {\n var stack = state.stack;\n var n2 = stack.pop();\n var n1 = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"ADD[]\", n2, n1);\n }\n stack.push(n1 + n2);\n }\n function SUB(state) {\n var stack = state.stack;\n var n2 = stack.pop();\n var n1 = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"SUB[]\", n2, n1);\n }\n stack.push(n1 - n2);\n }\n function DIV(state) {\n var stack = state.stack;\n var n2 = stack.pop();\n var n1 = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"DIV[]\", n2, n1);\n }\n stack.push(n1 * 64 / n2);\n }\n function MUL(state) {\n var stack = state.stack;\n var n2 = stack.pop();\n var n1 = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"MUL[]\", n2, n1);\n }\n stack.push(n1 * n2 / 64);\n }\n function ABS(state) {\n var stack = state.stack;\n var n = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"ABS[]\", n);\n }\n stack.push(Math.abs(n));\n }\n function NEG(state) {\n var stack = state.stack;\n var n = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"NEG[]\", n);\n }\n stack.push(-n);\n }\n function FLOOR(state) {\n var stack = state.stack;\n var n = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"FLOOR[]\", n);\n }\n stack.push(Math.floor(n / 64) * 64);\n }\n function CEILING(state) {\n var stack = state.stack;\n var n = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"CEILING[]\", n);\n }\n stack.push(Math.ceil(n / 64) * 64);\n }\n function ROUND(dt, state) {\n var stack = state.stack;\n var n = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"ROUND[]\");\n }\n stack.push(state.round(n / 64) * 64);\n }\n function WCVTF(state) {\n var stack = state.stack;\n var v = stack.pop();\n var l = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"WCVTF[]\", v, l);\n }\n state.cvt[l] = v * state.ppem / state.font.unitsPerEm;\n }\n function DELTAC123(b, state) {\n var stack = state.stack;\n var n = stack.pop();\n var ppem = state.ppem;\n var base = state.deltaBase + (b - 1) * 16;\n var ds = state.deltaShift;\n if (exports.DEBUG) {\n console.log(state.step, \"DELTAC[\" + b + \"]\", n, stack);\n }\n for (var i = 0; i < n; i++) {\n var c = stack.pop();\n var arg = stack.pop();\n var appem = base + ((arg & 240) >> 4);\n if (appem !== ppem) {\n continue;\n }\n var mag = (arg & 15) - 8;\n if (mag >= 0) {\n mag++;\n }\n var delta = mag * ds;\n if (exports.DEBUG) {\n console.log(state.step, \"DELTACFIX\", c, \"by\", delta);\n }\n state.cvt[c] += delta;\n }\n }\n function SROUND(state) {\n var n = state.stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"SROUND[]\", n);\n }\n state.round = roundSuper;\n var period;\n switch (n & 192) {\n case 0:\n period = 0.5;\n break;\n case 64:\n period = 1;\n break;\n case 128:\n period = 2;\n break;\n default:\n throw new Error(\"invalid SROUND value\");\n }\n state.srPeriod = period;\n switch (n & 48) {\n case 0:\n state.srPhase = 0;\n break;\n case 16:\n state.srPhase = 0.25 * period;\n break;\n case 32:\n state.srPhase = 0.5 * period;\n break;\n case 48:\n state.srPhase = 0.75 * period;\n break;\n default:\n throw new Error(\"invalid SROUND value\");\n }\n n &= 15;\n if (n === 0) {\n state.srThreshold = 0;\n } else {\n state.srThreshold = (n / 8 - 0.5) * period;\n }\n }\n function S45ROUND(state) {\n var n = state.stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"S45ROUND[]\", n);\n }\n state.round = roundSuper;\n var period;\n switch (n & 192) {\n case 0:\n period = Math.sqrt(2) / 2;\n break;\n case 64:\n period = Math.sqrt(2);\n break;\n case 128:\n period = 2 * Math.sqrt(2);\n break;\n default:\n throw new Error(\"invalid S45ROUND value\");\n }\n state.srPeriod = period;\n switch (n & 48) {\n case 0:\n state.srPhase = 0;\n break;\n case 16:\n state.srPhase = 0.25 * period;\n break;\n case 32:\n state.srPhase = 0.5 * period;\n break;\n case 48:\n state.srPhase = 0.75 * period;\n break;\n default:\n throw new Error(\"invalid S45ROUND value\");\n }\n n &= 15;\n if (n === 0) {\n state.srThreshold = 0;\n } else {\n state.srThreshold = (n / 8 - 0.5) * period;\n }\n }\n function ROFF(state) {\n if (exports.DEBUG) {\n console.log(state.step, \"ROFF[]\");\n }\n state.round = roundOff;\n }\n function RUTG(state) {\n if (exports.DEBUG) {\n console.log(state.step, \"RUTG[]\");\n }\n state.round = roundUpToGrid;\n }\n function RDTG(state) {\n if (exports.DEBUG) {\n console.log(state.step, \"RDTG[]\");\n }\n state.round = roundDownToGrid;\n }\n function SCANCTRL(state) {\n var n = state.stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"SCANCTRL[]\", n);\n }\n }\n function SDPVTL(a, state) {\n var stack = state.stack;\n var p2i = stack.pop();\n var p1i = stack.pop();\n var p2 = state.z2[p2i];\n var p1 = state.z1[p1i];\n if (exports.DEBUG) {\n console.log(state.step, \"SDPVTL[\" + a + \"]\", p2i, p1i);\n }\n var dx;\n var dy;\n if (!a) {\n dx = p1.x - p2.x;\n dy = p1.y - p2.y;\n } else {\n dx = p2.y - p1.y;\n dy = p1.x - p2.x;\n }\n state.dpv = getUnitVector(dx, dy);\n }\n function GETINFO(state) {\n var stack = state.stack;\n var sel = stack.pop();\n var r = 0;\n if (exports.DEBUG) {\n console.log(state.step, \"GETINFO[]\", sel);\n }\n if (sel & 1) {\n r = 35;\n }\n if (sel & 32) {\n r |= 4096;\n }\n stack.push(r);\n }\n function ROLL(state) {\n var stack = state.stack;\n var a = stack.pop();\n var b = stack.pop();\n var c = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"ROLL[]\");\n }\n stack.push(b);\n stack.push(a);\n stack.push(c);\n }\n function MAX(state) {\n var stack = state.stack;\n var e2 = stack.pop();\n var e1 = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"MAX[]\", e2, e1);\n }\n stack.push(Math.max(e1, e2));\n }\n function MIN(state) {\n var stack = state.stack;\n var e2 = stack.pop();\n var e1 = stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"MIN[]\", e2, e1);\n }\n stack.push(Math.min(e1, e2));\n }\n function SCANTYPE(state) {\n var n = state.stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"SCANTYPE[]\", n);\n }\n }\n function INSTCTRL(state) {\n var s = state.stack.pop();\n var v = state.stack.pop();\n if (exports.DEBUG) {\n console.log(state.step, \"INSTCTRL[]\", s, v);\n }\n switch (s) {\n case 1:\n state.inhibitGridFit = !!v;\n return;\n case 2:\n state.ignoreCvt = !!v;\n return;\n default:\n throw new Error(\"invalid INSTCTRL[] selector\");\n }\n }\n function PUSHB(n, state) {\n var stack = state.stack;\n var prog = state.prog;\n var ip = state.ip;\n if (exports.DEBUG) {\n console.log(state.step, \"PUSHB[\" + n + \"]\");\n }\n for (var i = 0; i < n; i++) {\n stack.push(prog[++ip]);\n }\n state.ip = ip;\n }\n function PUSHW(n, state) {\n var ip = state.ip;\n var prog = state.prog;\n var stack = state.stack;\n if (exports.DEBUG) {\n console.log(state.ip, \"PUSHW[\" + n + \"]\");\n }\n for (var i = 0; i < n; i++) {\n var w = prog[++ip] << 8 | prog[++ip];\n if (w & 32768) {\n w = -((w ^ 65535) + 1);\n }\n stack.push(w);\n }\n state.ip = ip;\n }\n function MDRP_MIRP(indirect, setRp0, keepD, ro, dt, state) {\n var stack = state.stack;\n var cvte = indirect && stack.pop();\n var pi = stack.pop();\n var rp0i = state.rp0;\n var rp = state.z0[rp0i];\n var p = state.z1[pi];\n var md = state.minDis;\n var fv = state.fv;\n var pv = state.dpv;\n var od;\n var d;\n var sign;\n var cv;\n d = od = pv.distance(p, rp, true, true);\n sign = d >= 0 ? 1 : -1;\n d = Math.abs(d);\n if (indirect) {\n cv = state.cvt[cvte];\n if (ro && Math.abs(d - cv) < state.cvCutIn) {\n d = cv;\n }\n }\n if (keepD && d < md) {\n d = md;\n }\n if (ro) {\n d = state.round(d);\n }\n fv.setRelative(p, rp, sign * d, pv);\n fv.touch(p);\n if (exports.DEBUG) {\n console.log(\n state.step,\n (indirect ? \"MIRP[\" : \"MDRP[\") + (setRp0 ? \"M\" : \"m\") + (keepD ? \">\" : \"_\") + (ro ? \"R\" : \"_\") + (dt === 0 ? \"Gr\" : dt === 1 ? \"Bl\" : dt === 2 ? \"Wh\" : \"\") + \"]\",\n indirect ? cvte + \"(\" + state.cvt[cvte] + \",\" + cv + \")\" : \"\",\n pi,\n \"(d =\",\n od,\n \"->\",\n sign * d,\n \")\"\n );\n }\n state.rp1 = state.rp0;\n state.rp2 = pi;\n if (setRp0) {\n state.rp0 = pi;\n }\n }\n instructionTable = [\n /* 0x00 */\n SVTCA.bind(void 0, yUnitVector),\n /* 0x01 */\n SVTCA.bind(void 0, xUnitVector),\n /* 0x02 */\n SPVTCA.bind(void 0, yUnitVector),\n /* 0x03 */\n SPVTCA.bind(void 0, xUnitVector),\n /* 0x04 */\n SFVTCA.bind(void 0, yUnitVector),\n /* 0x05 */\n SFVTCA.bind(void 0, xUnitVector),\n /* 0x06 */\n SPVTL.bind(void 0, 0),\n /* 0x07 */\n SPVTL.bind(void 0, 1),\n /* 0x08 */\n SFVTL.bind(void 0, 0),\n /* 0x09 */\n SFVTL.bind(void 0, 1),\n /* 0x0A */\n SPVFS,\n /* 0x0B */\n SFVFS,\n /* 0x0C */\n GPV,\n /* 0x0D */\n GFV,\n /* 0x0E */\n SFVTPV,\n /* 0x0F */\n ISECT,\n /* 0x10 */\n SRP0,\n /* 0x11 */\n SRP1,\n /* 0x12 */\n SRP2,\n /* 0x13 */\n SZP0,\n /* 0x14 */\n SZP1,\n /* 0x15 */\n SZP2,\n /* 0x16 */\n SZPS,\n /* 0x17 */\n SLOOP,\n /* 0x18 */\n RTG,\n /* 0x19 */\n RTHG,\n /* 0x1A */\n SMD,\n /* 0x1B */\n ELSE,\n /* 0x1C */\n JMPR,\n /* 0x1D */\n SCVTCI,\n /* 0x1E */\n void 0,\n // TODO SSWCI\n /* 0x1F */\n void 0,\n // TODO SSW\n /* 0x20 */\n DUP,\n /* 0x21 */\n POP,\n /* 0x22 */\n CLEAR,\n /* 0x23 */\n SWAP,\n /* 0x24 */\n DEPTH,\n /* 0x25 */\n CINDEX,\n /* 0x26 */\n MINDEX,\n /* 0x27 */\n void 0,\n // TODO ALIGNPTS\n /* 0x28 */\n void 0,\n /* 0x29 */\n void 0,\n // TODO UTP\n /* 0x2A */\n LOOPCALL,\n /* 0x2B */\n CALL,\n /* 0x2C */\n FDEF,\n /* 0x2D */\n void 0,\n // ENDF (eaten by FDEF)\n /* 0x2E */\n MDAP.bind(void 0, 0),\n /* 0x2F */\n MDAP.bind(void 0, 1),\n /* 0x30 */\n IUP.bind(void 0, yUnitVector),\n /* 0x31 */\n IUP.bind(void 0, xUnitVector),\n /* 0x32 */\n SHP.bind(void 0, 0),\n /* 0x33 */\n SHP.bind(void 0, 1),\n /* 0x34 */\n SHC.bind(void 0, 0),\n /* 0x35 */\n SHC.bind(void 0, 1),\n /* 0x36 */\n SHZ.bind(void 0, 0),\n /* 0x37 */\n SHZ.bind(void 0, 1),\n /* 0x38 */\n SHPIX,\n /* 0x39 */\n IP,\n /* 0x3A */\n MSIRP.bind(void 0, 0),\n /* 0x3B */\n MSIRP.bind(void 0, 1),\n /* 0x3C */\n ALIGNRP,\n /* 0x3D */\n RTDG,\n /* 0x3E */\n MIAP.bind(void 0, 0),\n /* 0x3F */\n MIAP.bind(void 0, 1),\n /* 0x40 */\n NPUSHB,\n /* 0x41 */\n NPUSHW,\n /* 0x42 */\n WS,\n /* 0x43 */\n RS,\n /* 0x44 */\n WCVTP,\n /* 0x45 */\n RCVT,\n /* 0x46 */\n GC.bind(void 0, 0),\n /* 0x47 */\n GC.bind(void 0, 1),\n /* 0x48 */\n void 0,\n // TODO SCFS\n /* 0x49 */\n MD.bind(void 0, 0),\n /* 0x4A */\n MD.bind(void 0, 1),\n /* 0x4B */\n MPPEM,\n /* 0x4C */\n void 0,\n // TODO MPS\n /* 0x4D */\n FLIPON,\n /* 0x4E */\n void 0,\n // TODO FLIPOFF\n /* 0x4F */\n void 0,\n // TODO DEBUG\n /* 0x50 */\n LT,\n /* 0x51 */\n LTEQ,\n /* 0x52 */\n GT,\n /* 0x53 */\n GTEQ,\n /* 0x54 */\n EQ,\n /* 0x55 */\n NEQ,\n /* 0x56 */\n ODD,\n /* 0x57 */\n EVEN,\n /* 0x58 */\n IF,\n /* 0x59 */\n EIF,\n /* 0x5A */\n AND,\n /* 0x5B */\n OR,\n /* 0x5C */\n NOT,\n /* 0x5D */\n DELTAP123.bind(void 0, 1),\n /* 0x5E */\n SDB,\n /* 0x5F */\n SDS,\n /* 0x60 */\n ADD,\n /* 0x61 */\n SUB,\n /* 0x62 */\n DIV,\n /* 0x63 */\n MUL,\n /* 0x64 */\n ABS,\n /* 0x65 */\n NEG,\n /* 0x66 */\n FLOOR,\n /* 0x67 */\n CEILING,\n /* 0x68 */\n ROUND.bind(void 0, 0),\n /* 0x69 */\n ROUND.bind(void 0, 1),\n /* 0x6A */\n ROUND.bind(void 0, 2),\n /* 0x6B */\n ROUND.bind(void 0, 3),\n /* 0x6C */\n void 0,\n // TODO NROUND[ab]\n /* 0x6D */\n void 0,\n // TODO NROUND[ab]\n /* 0x6E */\n void 0,\n // TODO NROUND[ab]\n /* 0x6F */\n void 0,\n // TODO NROUND[ab]\n /* 0x70 */\n WCVTF,\n /* 0x71 */\n DELTAP123.bind(void 0, 2),\n /* 0x72 */\n DELTAP123.bind(void 0, 3),\n /* 0x73 */\n DELTAC123.bind(void 0, 1),\n /* 0x74 */\n DELTAC123.bind(void 0, 2),\n /* 0x75 */\n DELTAC123.bind(void 0, 3),\n /* 0x76 */\n SROUND,\n /* 0x77 */\n S45ROUND,\n /* 0x78 */\n void 0,\n // TODO JROT[]\n /* 0x79 */\n void 0,\n // TODO JROF[]\n /* 0x7A */\n ROFF,\n /* 0x7B */\n void 0,\n /* 0x7C */\n RUTG,\n /* 0x7D */\n RDTG,\n /* 0x7E */\n POP,\n // actually SANGW, supposed to do only a pop though\n /* 0x7F */\n POP,\n // actually AA, supposed to do only a pop though\n /* 0x80 */\n void 0,\n // TODO FLIPPT\n /* 0x81 */\n void 0,\n // TODO FLIPRGON\n /* 0x82 */\n void 0,\n // TODO FLIPRGOFF\n /* 0x83 */\n void 0,\n /* 0x84 */\n void 0,\n /* 0x85 */\n SCANCTRL,\n /* 0x86 */\n SDPVTL.bind(void 0, 0),\n /* 0x87 */\n SDPVTL.bind(void 0, 1),\n /* 0x88 */\n GETINFO,\n /* 0x89 */\n void 0,\n // TODO IDEF\n /* 0x8A */\n ROLL,\n /* 0x8B */\n MAX,\n /* 0x8C */\n MIN,\n /* 0x8D */\n SCANTYPE,\n /* 0x8E */\n INSTCTRL,\n /* 0x8F */\n void 0,\n /* 0x90 */\n void 0,\n /* 0x91 */\n void 0,\n /* 0x92 */\n void 0,\n /* 0x93 */\n void 0,\n /* 0x94 */\n void 0,\n /* 0x95 */\n void 0,\n /* 0x96 */\n void 0,\n /* 0x97 */\n void 0,\n /* 0x98 */\n void 0,\n /* 0x99 */\n void 0,\n /* 0x9A */\n void 0,\n /* 0x9B */\n void 0,\n /* 0x9C */\n void 0,\n /* 0x9D */\n void 0,\n /* 0x9E */\n void 0,\n /* 0x9F */\n void 0,\n /* 0xA0 */\n void 0,\n /* 0xA1 */\n void 0,\n /* 0xA2 */\n void 0,\n /* 0xA3 */\n void 0,\n /* 0xA4 */\n void 0,\n /* 0xA5 */\n void 0,\n /* 0xA6 */\n void 0,\n /* 0xA7 */\n void 0,\n /* 0xA8 */\n void 0,\n /* 0xA9 */\n void 0,\n /* 0xAA */\n void 0,\n /* 0xAB */\n void 0,\n /* 0xAC */\n void 0,\n /* 0xAD */\n void 0,\n /* 0xAE */\n void 0,\n /* 0xAF */\n void 0,\n /* 0xB0 */\n PUSHB.bind(void 0, 1),\n /* 0xB1 */\n PUSHB.bind(void 0, 2),\n /* 0xB2 */\n PUSHB.bind(void 0, 3),\n /* 0xB3 */\n PUSHB.bind(void 0, 4),\n /* 0xB4 */\n PUSHB.bind(void 0, 5),\n /* 0xB5 */\n PUSHB.bind(void 0, 6),\n /* 0xB6 */\n PUSHB.bind(void 0, 7),\n /* 0xB7 */\n PUSHB.bind(void 0, 8),\n /* 0xB8 */\n PUSHW.bind(void 0, 1),\n /* 0xB9 */\n PUSHW.bind(void 0, 2),\n /* 0xBA */\n PUSHW.bind(void 0, 3),\n /* 0xBB */\n PUSHW.bind(void 0, 4),\n /* 0xBC */\n PUSHW.bind(void 0, 5),\n /* 0xBD */\n PUSHW.bind(void 0, 6),\n /* 0xBE */\n PUSHW.bind(void 0, 7),\n /* 0xBF */\n PUSHW.bind(void 0, 8),\n /* 0xC0 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 0),\n /* 0xC1 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 1),\n /* 0xC2 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 2),\n /* 0xC3 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 0, 3),\n /* 0xC4 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 0),\n /* 0xC5 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 1),\n /* 0xC6 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 2),\n /* 0xC7 */\n MDRP_MIRP.bind(void 0, 0, 0, 0, 1, 3),\n /* 0xC8 */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 0),\n /* 0xC9 */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 1),\n /* 0xCA */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 2),\n /* 0xCB */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 0, 3),\n /* 0xCC */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 0),\n /* 0xCD */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 1),\n /* 0xCE */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 2),\n /* 0xCF */\n MDRP_MIRP.bind(void 0, 0, 0, 1, 1, 3),\n /* 0xD0 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 0),\n /* 0xD1 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 1),\n /* 0xD2 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 2),\n /* 0xD3 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 0, 3),\n /* 0xD4 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 0),\n /* 0xD5 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 1),\n /* 0xD6 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 2),\n /* 0xD7 */\n MDRP_MIRP.bind(void 0, 0, 1, 0, 1, 3),\n /* 0xD8 */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 0),\n /* 0xD9 */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 1),\n /* 0xDA */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 2),\n /* 0xDB */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 0, 3),\n /* 0xDC */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 0),\n /* 0xDD */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 1),\n /* 0xDE */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 2),\n /* 0xDF */\n MDRP_MIRP.bind(void 0, 0, 1, 1, 1, 3),\n /* 0xE0 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 0),\n /* 0xE1 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 1),\n /* 0xE2 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 2),\n /* 0xE3 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 0, 3),\n /* 0xE4 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 0),\n /* 0xE5 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 1),\n /* 0xE6 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 2),\n /* 0xE7 */\n MDRP_MIRP.bind(void 0, 1, 0, 0, 1, 3),\n /* 0xE8 */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 0),\n /* 0xE9 */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 1),\n /* 0xEA */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 2),\n /* 0xEB */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 0, 3),\n /* 0xEC */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 0),\n /* 0xED */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 1),\n /* 0xEE */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 2),\n /* 0xEF */\n MDRP_MIRP.bind(void 0, 1, 0, 1, 1, 3),\n /* 0xF0 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 0),\n /* 0xF1 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 1),\n /* 0xF2 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 2),\n /* 0xF3 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 0, 3),\n /* 0xF4 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 0),\n /* 0xF5 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 1),\n /* 0xF6 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 2),\n /* 0xF7 */\n MDRP_MIRP.bind(void 0, 1, 1, 0, 1, 3),\n /* 0xF8 */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 0),\n /* 0xF9 */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 1),\n /* 0xFA */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 2),\n /* 0xFB */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 0, 3),\n /* 0xFC */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 0),\n /* 0xFD */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 1),\n /* 0xFE */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 2),\n /* 0xFF */\n MDRP_MIRP.bind(void 0, 1, 1, 1, 1, 3)\n ];\n function Token(char) {\n this.char = char;\n this.state = {};\n this.activeState = null;\n }\n function ContextRange(startIndex, endOffset, contextName) {\n this.contextName = contextName;\n this.startIndex = startIndex;\n this.endOffset = endOffset;\n }\n function ContextChecker(contextName, checkStart, checkEnd) {\n this.contextName = contextName;\n this.openRange = null;\n this.ranges = [];\n this.checkStart = checkStart;\n this.checkEnd = checkEnd;\n }\n function ContextParams(context, currentIndex) {\n this.context = context;\n this.index = currentIndex;\n this.length = context.length;\n this.current = context[currentIndex];\n this.backtrack = context.slice(0, currentIndex);\n this.lookahead = context.slice(currentIndex + 1);\n }\n function Event(eventId) {\n this.eventId = eventId;\n this.subscribers = [];\n }\n function initializeCoreEvents(events) {\n var this$1$1 = this;\n var coreEvents = [\n \"start\",\n \"end\",\n \"next\",\n \"newToken\",\n \"contextStart\",\n \"contextEnd\",\n \"insertToken\",\n \"removeToken\",\n \"removeRange\",\n \"replaceToken\",\n \"replaceRange\",\n \"composeRUD\",\n \"updateContextsRanges\"\n ];\n coreEvents.forEach(function(eventId) {\n Object.defineProperty(this$1$1.events, eventId, {\n value: new Event(eventId)\n });\n });\n if (!!events) {\n coreEvents.forEach(function(eventId) {\n var event = events[eventId];\n if (typeof event === \"function\") {\n this$1$1.events[eventId].subscribe(event);\n }\n });\n }\n var requiresContextUpdate = [\n \"insertToken\",\n \"removeToken\",\n \"removeRange\",\n \"replaceToken\",\n \"replaceRange\",\n \"composeRUD\"\n ];\n requiresContextUpdate.forEach(function(eventId) {\n this$1$1.events[eventId].subscribe(this$1$1.updateContextsRanges);\n });\n }\n function Tokenizer(events) {\n this.tokens = [];\n this.registeredContexts = {};\n this.contextCheckers = [];\n this.events = {};\n this.registeredModifiers = [];\n initializeCoreEvents.call(this, events);\n }\n Token.prototype.setState = function(key, value) {\n this.state[key] = value;\n this.activeState = { key, value: this.state[key] };\n return this.activeState;\n };\n Token.prototype.getState = function(stateId) {\n return this.state[stateId] || null;\n };\n Tokenizer.prototype.inboundIndex = function(index) {\n return index >= 0 && index < this.tokens.length;\n };\n Tokenizer.prototype.composeRUD = function(RUDs) {\n var this$1$1 = this;\n var silent = true;\n var state = RUDs.map(function(RUD) {\n return this$1$1[RUD[0]].apply(this$1$1, RUD.slice(1).concat(silent));\n });\n var hasFAILObject = function(obj) {\n return typeof obj === \"object\" && obj.hasOwnProperty(\"FAIL\");\n };\n if (state.every(hasFAILObject)) {\n return {\n FAIL: \"composeRUD: one or more operations hasn't completed successfully\",\n report: state.filter(hasFAILObject)\n };\n }\n this.dispatch(\"composeRUD\", [\n state.filter(function(op) {\n return !hasFAILObject(op);\n })\n ]);\n };\n Tokenizer.prototype.replaceRange = function(startIndex, offset, tokens, silent) {\n offset = offset !== null ? offset : this.tokens.length;\n var isTokenType = tokens.every(function(token) {\n return token instanceof Token;\n });\n if (!isNaN(startIndex) && this.inboundIndex(startIndex) && isTokenType) {\n var replaced = this.tokens.splice.apply(this.tokens, [startIndex, offset].concat(tokens));\n if (!silent) {\n this.dispatch(\"replaceToken\", [startIndex, offset, tokens]);\n }\n return [replaced, tokens];\n } else {\n return { FAIL: \"replaceRange: invalid tokens or startIndex.\" };\n }\n };\n Tokenizer.prototype.replaceToken = function(index, token, silent) {\n if (!isNaN(index) && this.inboundIndex(index) && token instanceof Token) {\n var replaced = this.tokens.splice(index, 1, token);\n if (!silent) {\n this.dispatch(\"replaceToken\", [index, token]);\n }\n return [replaced[0], token];\n } else {\n return { FAIL: \"replaceToken: invalid token or index.\" };\n }\n };\n Tokenizer.prototype.removeRange = function(startIndex, offset, silent) {\n offset = !isNaN(offset) ? offset : this.tokens.length;\n var tokens = this.tokens.splice(startIndex, offset);\n if (!silent) {\n this.dispatch(\"removeRange\", [tokens, startIndex, offset]);\n }\n return tokens;\n };\n Tokenizer.prototype.removeToken = function(index, silent) {\n if (!isNaN(index) && this.inboundIndex(index)) {\n var token = this.tokens.splice(index, 1);\n if (!silent) {\n this.dispatch(\"removeToken\", [token, index]);\n }\n return token;\n } else {\n return { FAIL: \"removeToken: invalid token index.\" };\n }\n };\n Tokenizer.prototype.insertToken = function(tokens, index, silent) {\n var tokenType = tokens.every(function(token) {\n return token instanceof Token;\n });\n if (tokenType) {\n this.tokens.splice.apply(this.tokens, [index, 0].concat(tokens));\n if (!silent) {\n this.dispatch(\"insertToken\", [tokens, index]);\n }\n return tokens;\n } else {\n return { FAIL: \"insertToken: invalid token(s).\" };\n }\n };\n Tokenizer.prototype.registerModifier = function(modifierId, condition, modifier) {\n this.events.newToken.subscribe(function(token, contextParams) {\n var conditionParams = [token, contextParams];\n var canApplyModifier = condition === null || condition.apply(this, conditionParams) === true;\n var modifierParams = [token, contextParams];\n if (canApplyModifier) {\n var newStateValue = modifier.apply(this, modifierParams);\n token.setState(modifierId, newStateValue);\n }\n });\n this.registeredModifiers.push(modifierId);\n };\n Event.prototype.subscribe = function(eventHandler) {\n if (typeof eventHandler === \"function\") {\n return this.subscribers.push(eventHandler) - 1;\n } else {\n return { FAIL: \"invalid '\" + this.eventId + \"' event handler\" };\n }\n };\n Event.prototype.unsubscribe = function(subsId) {\n this.subscribers.splice(subsId, 1);\n };\n ContextParams.prototype.setCurrentIndex = function(index) {\n this.index = index;\n this.current = this.context[index];\n this.backtrack = this.context.slice(0, index);\n this.lookahead = this.context.slice(index + 1);\n };\n ContextParams.prototype.get = function(offset) {\n switch (true) {\n case offset === 0:\n return this.current;\n case (offset < 0 && Math.abs(offset) <= this.backtrack.length):\n return this.backtrack.slice(offset)[0];\n case (offset > 0 && offset <= this.lookahead.length):\n return this.lookahead[offset - 1];\n default:\n return null;\n }\n };\n Tokenizer.prototype.rangeToText = function(range) {\n if (range instanceof ContextRange) {\n return this.getRangeTokens(range).map(function(token) {\n return token.char;\n }).join(\"\");\n }\n };\n Tokenizer.prototype.getText = function() {\n return this.tokens.map(function(token) {\n return token.char;\n }).join(\"\");\n };\n Tokenizer.prototype.getContext = function(contextName) {\n var context = this.registeredContexts[contextName];\n return !!context ? context : null;\n };\n Tokenizer.prototype.on = function(eventName, eventHandler) {\n var event = this.events[eventName];\n if (!!event) {\n return event.subscribe(eventHandler);\n } else {\n return null;\n }\n };\n Tokenizer.prototype.dispatch = function(eventName, args) {\n var this$1$1 = this;\n var event = this.events[eventName];\n if (event instanceof Event) {\n event.subscribers.forEach(function(subscriber) {\n subscriber.apply(this$1$1, args || []);\n });\n }\n };\n Tokenizer.prototype.registerContextChecker = function(contextName, contextStartCheck, contextEndCheck) {\n if (!!this.getContext(contextName)) {\n return {\n FAIL: \"context name '\" + contextName + \"' is already registered.\"\n };\n }\n if (typeof contextStartCheck !== \"function\") {\n return {\n FAIL: \"missing context start check.\"\n };\n }\n if (typeof contextEndCheck !== \"function\") {\n return {\n FAIL: \"missing context end check.\"\n };\n }\n var contextCheckers = new ContextChecker(contextName, contextStartCheck, contextEndCheck);\n this.registeredContexts[contextName] = contextCheckers;\n this.contextCheckers.push(contextCheckers);\n return contextCheckers;\n };\n Tokenizer.prototype.getRangeTokens = function(range) {\n var endIndex = range.startIndex + range.endOffset;\n return [].concat(this.tokens.slice(range.startIndex, endIndex));\n };\n Tokenizer.prototype.getContextRanges = function(contextName) {\n var context = this.getContext(contextName);\n if (!!context) {\n return context.ranges;\n } else {\n return { FAIL: \"context checker '\" + contextName + \"' is not registered.\" };\n }\n };\n Tokenizer.prototype.resetContextsRanges = function() {\n var registeredContexts = this.registeredContexts;\n for (var contextName in registeredContexts) {\n if (registeredContexts.hasOwnProperty(contextName)) {\n var context = registeredContexts[contextName];\n context.ranges = [];\n }\n }\n };\n Tokenizer.prototype.updateContextsRanges = function() {\n this.resetContextsRanges();\n var chars = this.tokens.map(function(token) {\n return token.char;\n });\n for (var i = 0; i < chars.length; i++) {\n var contextParams = new ContextParams(chars, i);\n this.runContextCheck(contextParams);\n }\n this.dispatch(\"updateContextsRanges\", [this.registeredContexts]);\n };\n Tokenizer.prototype.setEndOffset = function(offset, contextName) {\n var startIndex = this.getContext(contextName).openRange.startIndex;\n var range = new ContextRange(startIndex, offset, contextName);\n var ranges = this.getContext(contextName).ranges;\n range.rangeId = contextName + \".\" + ranges.length;\n ranges.push(range);\n this.getContext(contextName).openRange = null;\n return range;\n };\n Tokenizer.prototype.runContextCheck = function(contextParams) {\n var this$1$1 = this;\n var index = contextParams.index;\n this.contextCheckers.forEach(function(contextChecker) {\n var contextName = contextChecker.contextName;\n var openRange = this$1$1.getContext(contextName).openRange;\n if (!openRange && contextChecker.checkStart(contextParams)) {\n openRange = new ContextRange(index, null, contextName);\n this$1$1.getContext(contextName).openRange = openRange;\n this$1$1.dispatch(\"contextStart\", [contextName, index]);\n }\n if (!!openRange && contextChecker.checkEnd(contextParams)) {\n var offset = index - openRange.startIndex + 1;\n var range = this$1$1.setEndOffset(offset, contextName);\n this$1$1.dispatch(\"contextEnd\", [contextName, range]);\n }\n });\n };\n Tokenizer.prototype.tokenize = function(text) {\n this.tokens = [];\n this.resetContextsRanges();\n var chars = Array.from(text);\n this.dispatch(\"start\");\n for (var i = 0; i < chars.length; i++) {\n var char = chars[i];\n var contextParams = new ContextParams(chars, i);\n this.dispatch(\"next\", [contextParams]);\n this.runContextCheck(contextParams);\n var token = new Token(char);\n this.tokens.push(token);\n this.dispatch(\"newToken\", [token, contextParams]);\n }\n this.dispatch(\"end\", [this.tokens]);\n return this.tokens;\n };\n function isArabicChar(c) {\n return /[\\u0600-\\u065F\\u066A-\\u06D2\\u06FA-\\u06FF]/.test(c);\n }\n function isIsolatedArabicChar(char) {\n return /[\\u0630\\u0690\\u0621\\u0631\\u0661\\u0671\\u0622\\u0632\\u0672\\u0692\\u06C2\\u0623\\u0673\\u0693\\u06C3\\u0624\\u0694\\u06C4\\u0625\\u0675\\u0695\\u06C5\\u06E5\\u0676\\u0696\\u06C6\\u0627\\u0677\\u0697\\u06C7\\u0648\\u0688\\u0698\\u06C8\\u0689\\u0699\\u06C9\\u068A\\u06CA\\u066B\\u068B\\u06CB\\u068C\\u068D\\u06CD\\u06FD\\u068E\\u06EE\\u06FE\\u062F\\u068F\\u06CF\\u06EF]/.test(\n char\n );\n }\n function isTashkeelArabicChar(char) {\n return /[\\u0600-\\u0605\\u060C-\\u060E\\u0610-\\u061B\\u061E\\u064B-\\u065F\\u0670\\u06D6-\\u06DC\\u06DF-\\u06E4\\u06E7\\u06E8\\u06EA-\\u06ED]/.test(\n char\n );\n }\n function isLatinChar(c) {\n return /[A-z]/.test(c);\n }\n function isWhiteSpace(c) {\n return /\\s/.test(c);\n }\n function FeatureQuery(font) {\n this.font = font;\n this.features = {};\n }\n function SubstitutionAction(action) {\n this.id = action.id;\n this.tag = action.tag;\n this.substitution = action.substitution;\n }\n function lookupCoverage(glyphIndex, coverage) {\n if (!glyphIndex) {\n return -1;\n }\n switch (coverage.format) {\n case 1:\n return coverage.glyphs.indexOf(glyphIndex);\n case 2:\n var ranges = coverage.ranges;\n for (var i = 0; i < ranges.length; i++) {\n var range = ranges[i];\n if (glyphIndex >= range.start && glyphIndex <= range.end) {\n var offset = glyphIndex - range.start;\n return range.index + offset;\n }\n }\n break;\n default:\n return -1;\n }\n return -1;\n }\n function singleSubstitutionFormat1(glyphIndex, subtable) {\n var substituteIndex = lookupCoverage(glyphIndex, subtable.coverage);\n if (substituteIndex === -1) {\n return null;\n }\n return glyphIndex + subtable.deltaGlyphId;\n }\n function singleSubstitutionFormat2(glyphIndex, subtable) {\n var substituteIndex = lookupCoverage(glyphIndex, subtable.coverage);\n if (substituteIndex === -1) {\n return null;\n }\n return subtable.substitute[substituteIndex];\n }\n function lookupCoverageList(coverageList, contextParams) {\n var lookupList = [];\n for (var i = 0; i < coverageList.length; i++) {\n var coverage = coverageList[i];\n var glyphIndex = contextParams.current;\n glyphIndex = Array.isArray(glyphIndex) ? glyphIndex[0] : glyphIndex;\n var lookupIndex = lookupCoverage(glyphIndex, coverage);\n if (lookupIndex !== -1) {\n lookupList.push(lookupIndex);\n }\n }\n if (lookupList.length !== coverageList.length) {\n return -1;\n }\n return lookupList;\n }\n function chainingSubstitutionFormat3(contextParams, subtable) {\n var lookupsCount = subtable.inputCoverage.length + subtable.lookaheadCoverage.length + subtable.backtrackCoverage.length;\n if (contextParams.context.length < lookupsCount) {\n return [];\n }\n var inputLookups = lookupCoverageList(subtable.inputCoverage, contextParams);\n if (inputLookups === -1) {\n return [];\n }\n var lookaheadOffset = subtable.inputCoverage.length - 1;\n if (contextParams.lookahead.length < subtable.lookaheadCoverage.length) {\n return [];\n }\n var lookaheadContext = contextParams.lookahead.slice(lookaheadOffset);\n while (lookaheadContext.length && isTashkeelArabicChar(lookaheadContext[0].char)) {\n lookaheadContext.shift();\n }\n var lookaheadParams = new ContextParams(lookaheadContext, 0);\n var lookaheadLookups = lookupCoverageList(subtable.lookaheadCoverage, lookaheadParams);\n var backtrackContext = [].concat(contextParams.backtrack);\n backtrackContext.reverse();\n while (backtrackContext.length && isTashkeelArabicChar(backtrackContext[0].char)) {\n backtrackContext.shift();\n }\n if (backtrackContext.length < subtable.backtrackCoverage.length) {\n return [];\n }\n var backtrackParams = new ContextParams(backtrackContext, 0);\n var backtrackLookups = lookupCoverageList(subtable.backtrackCoverage, backtrackParams);\n var contextRulesMatch = inputLookups.length === subtable.inputCoverage.length && lookaheadLookups.length === subtable.lookaheadCoverage.length && backtrackLookups.length === subtable.backtrackCoverage.length;\n var substitutions = [];\n if (contextRulesMatch) {\n for (var i = 0; i < subtable.lookupRecords.length; i++) {\n var lookupRecord = subtable.lookupRecords[i];\n var lookupListIndex = lookupRecord.lookupListIndex;\n var lookupTable = this.getLookupByIndex(lookupListIndex);\n for (var s = 0; s < lookupTable.subtables.length; s++) {\n var subtable$1 = lookupTable.subtables[s];\n var lookup = this.getLookupMethod(lookupTable, subtable$1);\n var substitutionType = this.getSubstitutionType(lookupTable, subtable$1);\n if (substitutionType === \"12\") {\n for (var n = 0; n < inputLookups.length; n++) {\n var glyphIndex = contextParams.get(n);\n var substitution = lookup(glyphIndex);\n if (substitution) {\n substitutions.push(substitution);\n }\n }\n }\n }\n }\n }\n return substitutions;\n }\n function ligatureSubstitutionFormat1(contextParams, subtable) {\n var glyphIndex = contextParams.current;\n var ligSetIndex = lookupCoverage(glyphIndex, subtable.coverage);\n if (ligSetIndex === -1) {\n return null;\n }\n var ligature;\n var ligatureSet = subtable.ligatureSets[ligSetIndex];\n for (var s = 0; s < ligatureSet.length; s++) {\n ligature = ligatureSet[s];\n for (var l = 0; l < ligature.components.length; l++) {\n var lookaheadItem = contextParams.lookahead[l];\n var component = ligature.components[l];\n if (lookaheadItem !== component) {\n break;\n }\n if (l === ligature.components.length - 1) {\n return ligature;\n }\n }\n }\n return null;\n }\n function decompositionSubstitutionFormat1(glyphIndex, subtable) {\n var substituteIndex = lookupCoverage(glyphIndex, subtable.coverage);\n if (substituteIndex === -1) {\n return null;\n }\n return subtable.sequences[substituteIndex];\n }\n FeatureQuery.prototype.getDefaultScriptFeaturesIndexes = function() {\n var scripts = this.font.tables.gsub.scripts;\n for (var s = 0; s < scripts.length; s++) {\n var script = scripts[s];\n if (script.tag === \"DFLT\") {\n return script.script.defaultLangSys.featureIndexes;\n }\n }\n return [];\n };\n FeatureQuery.prototype.getScriptFeaturesIndexes = function(scriptTag) {\n var tables = this.font.tables;\n if (!tables.gsub) {\n return [];\n }\n if (!scriptTag) {\n return this.getDefaultScriptFeaturesIndexes();\n }\n var scripts = this.font.tables.gsub.scripts;\n for (var i = 0; i < scripts.length; i++) {\n var script = scripts[i];\n if (script.tag === scriptTag && script.script.defaultLangSys) {\n return script.script.defaultLangSys.featureIndexes;\n } else {\n var langSysRecords = script.langSysRecords;\n if (!!langSysRecords) {\n for (var j = 0; j < langSysRecords.length; j++) {\n var langSysRecord = langSysRecords[j];\n if (langSysRecord.tag === scriptTag) {\n var langSys = langSysRecord.langSys;\n return langSys.featureIndexes;\n }\n }\n }\n }\n }\n return this.getDefaultScriptFeaturesIndexes();\n };\n FeatureQuery.prototype.mapTagsToFeatures = function(features, scriptTag) {\n var tags = {};\n for (var i = 0; i < features.length; i++) {\n var tag = features[i].tag;\n var feature = features[i].feature;\n tags[tag] = feature;\n }\n this.features[scriptTag].tags = tags;\n };\n FeatureQuery.prototype.getScriptFeatures = function(scriptTag) {\n var features = this.features[scriptTag];\n if (this.features.hasOwnProperty(scriptTag)) {\n return features;\n }\n var featuresIndexes = this.getScriptFeaturesIndexes(scriptTag);\n if (!featuresIndexes) {\n return null;\n }\n var gsub2 = this.font.tables.gsub;\n features = featuresIndexes.map(function(index) {\n return gsub2.features[index];\n });\n this.features[scriptTag] = features;\n this.mapTagsToFeatures(features, scriptTag);\n return features;\n };\n FeatureQuery.prototype.getSubstitutionType = function(lookupTable, subtable) {\n var lookupType = lookupTable.lookupType.toString();\n var substFormat = subtable.substFormat.toString();\n return lookupType + substFormat;\n };\n FeatureQuery.prototype.getLookupMethod = function(lookupTable, subtable) {\n var this$1$1 = this;\n var substitutionType = this.getSubstitutionType(lookupTable, subtable);\n switch (substitutionType) {\n case \"11\":\n return function(glyphIndex) {\n return singleSubstitutionFormat1.apply(this$1$1, [glyphIndex, subtable]);\n };\n case \"12\":\n return function(glyphIndex) {\n return singleSubstitutionFormat2.apply(this$1$1, [glyphIndex, subtable]);\n };\n case \"63\":\n return function(contextParams) {\n return chainingSubstitutionFormat3.apply(this$1$1, [contextParams, subtable]);\n };\n case \"41\":\n return function(contextParams) {\n return ligatureSubstitutionFormat1.apply(this$1$1, [contextParams, subtable]);\n };\n case \"21\":\n return function(glyphIndex) {\n return decompositionSubstitutionFormat1.apply(this$1$1, [glyphIndex, subtable]);\n };\n default:\n throw new Error(\n \"lookupType: \" + lookupTable.lookupType + \" - substFormat: \" + subtable.substFormat + \" is not yet supported\"\n );\n }\n };\n FeatureQuery.prototype.lookupFeature = function(query) {\n var contextParams = query.contextParams;\n var currentIndex = contextParams.index;\n var feature = this.getFeature({\n tag: query.tag,\n script: query.script\n });\n if (!feature) {\n return new Error(\n \"font '\" + this.font.names.fullName.en + \"' doesn't support feature '\" + query.tag + \"' for script '\" + query.script + \"'.\"\n );\n }\n var lookups = this.getFeatureLookups(feature);\n var substitutions = [].concat(contextParams.context);\n for (var l = 0; l < lookups.length; l++) {\n var lookupTable = lookups[l];\n var subtables = this.getLookupSubtables(lookupTable);\n for (var s = 0; s < subtables.length; s++) {\n var subtable = subtables[s];\n var substType = this.getSubstitutionType(lookupTable, subtable);\n var lookup = this.getLookupMethod(lookupTable, subtable);\n var substitution = void 0;\n switch (substType) {\n case \"11\":\n substitution = lookup(contextParams.current);\n if (substitution) {\n substitutions.splice(\n currentIndex,\n 1,\n new SubstitutionAction({\n id: 11,\n tag: query.tag,\n substitution\n })\n );\n }\n break;\n case \"12\":\n substitution = lookup(contextParams.current);\n if (substitution) {\n substitutions.splice(\n currentIndex,\n 1,\n new SubstitutionAction({\n id: 12,\n tag: query.tag,\n substitution\n })\n );\n }\n break;\n case \"63\":\n substitution = lookup(contextParams);\n if (Array.isArray(substitution) && substitution.length) {\n substitutions.splice(\n currentIndex,\n 1,\n new SubstitutionAction({\n id: 63,\n tag: query.tag,\n substitution\n })\n );\n }\n break;\n case \"41\":\n substitution = lookup(contextParams);\n if (substitution) {\n substitutions.splice(\n currentIndex,\n 1,\n new SubstitutionAction({\n id: 41,\n tag: query.tag,\n substitution\n })\n );\n }\n break;\n case \"21\":\n substitution = lookup(contextParams.current);\n if (substitution) {\n substitutions.splice(\n currentIndex,\n 1,\n new SubstitutionAction({\n id: 21,\n tag: query.tag,\n substitution\n })\n );\n }\n break;\n }\n contextParams = new ContextParams(substitutions, currentIndex);\n if (Array.isArray(substitution) && !substitution.length) {\n continue;\n }\n substitution = null;\n }\n }\n return substitutions.length ? substitutions : null;\n };\n FeatureQuery.prototype.supports = function(query) {\n if (!query.script) {\n return false;\n }\n this.getScriptFeatures(query.script);\n var supportedScript = this.features.hasOwnProperty(query.script);\n if (!query.tag) {\n return supportedScript;\n }\n var supportedFeature = this.features[query.script].some(function(feature) {\n return feature.tag === query.tag;\n });\n return supportedScript && supportedFeature;\n };\n FeatureQuery.prototype.getLookupSubtables = function(lookupTable) {\n return lookupTable.subtables || null;\n };\n FeatureQuery.prototype.getLookupByIndex = function(index) {\n var lookups = this.font.tables.gsub.lookups;\n return lookups[index] || null;\n };\n FeatureQuery.prototype.getFeatureLookups = function(feature) {\n return feature.lookupListIndexes.map(this.getLookupByIndex.bind(this));\n };\n FeatureQuery.prototype.getFeature = function getFeature(query) {\n if (!this.font) {\n return { FAIL: \"No font was found\" };\n }\n if (!this.features.hasOwnProperty(query.script)) {\n this.getScriptFeatures(query.script);\n }\n var scriptFeatures = this.features[query.script];\n if (!scriptFeatures) {\n return { FAIL: \"No feature for script \" + query.script };\n }\n if (!scriptFeatures.tags[query.tag]) {\n return null;\n }\n return this.features[query.script].tags[query.tag];\n };\n function arabicWordStartCheck(contextParams) {\n var char = contextParams.current;\n var prevChar = contextParams.get(-1);\n return (\n // ? arabic first char\n prevChar === null && isArabicChar(char) || // ? arabic char preceded with a non arabic char\n !isArabicChar(prevChar) && isArabicChar(char)\n );\n }\n function arabicWordEndCheck(contextParams) {\n var nextChar = contextParams.get(1);\n return (\n // ? last arabic char\n nextChar === null || // ? next char is not arabic\n !isArabicChar(nextChar)\n );\n }\n var arabicWordCheck = {\n startCheck: arabicWordStartCheck,\n endCheck: arabicWordEndCheck\n };\n function arabicSentenceStartCheck(contextParams) {\n var char = contextParams.current;\n var prevChar = contextParams.get(-1);\n return (\n // ? an arabic char preceded with a non arabic char\n (isArabicChar(char) || isTashkeelArabicChar(char)) && !isArabicChar(prevChar)\n );\n }\n function arabicSentenceEndCheck(contextParams) {\n var nextChar = contextParams.get(1);\n switch (true) {\n case nextChar === null:\n return true;\n case (!isArabicChar(nextChar) && !isTashkeelArabicChar(nextChar)):\n var nextIsWhitespace = isWhiteSpace(nextChar);\n if (!nextIsWhitespace) {\n return true;\n }\n if (nextIsWhitespace) {\n var arabicCharAhead = false;\n arabicCharAhead = contextParams.lookahead.some(function(c) {\n return isArabicChar(c) || isTashkeelArabicChar(c);\n });\n if (!arabicCharAhead) {\n return true;\n }\n }\n break;\n default:\n return false;\n }\n }\n var arabicSentenceCheck = {\n startCheck: arabicSentenceStartCheck,\n endCheck: arabicSentenceEndCheck\n };\n function singleSubstitutionFormat1$1(action, tokens, index) {\n tokens[index].setState(action.tag, action.substitution);\n }\n function singleSubstitutionFormat2$1(action, tokens, index) {\n tokens[index].setState(action.tag, action.substitution);\n }\n function chainingSubstitutionFormat3$1(action, tokens, index) {\n action.substitution.forEach(function(subst, offset) {\n var token = tokens[index + offset];\n token.setState(action.tag, subst);\n });\n }\n function ligatureSubstitutionFormat1$1(action, tokens, index) {\n var token = tokens[index];\n token.setState(action.tag, action.substitution.ligGlyph);\n var compsCount = action.substitution.components.length;\n for (var i = 0; i < compsCount; i++) {\n token = tokens[index + i + 1];\n token.setState(\"deleted\", true);\n }\n }\n var SUBSTITUTIONS = {\n 11: singleSubstitutionFormat1$1,\n 12: singleSubstitutionFormat2$1,\n 63: chainingSubstitutionFormat3$1,\n 41: ligatureSubstitutionFormat1$1\n };\n function applySubstitution(action, tokens, index) {\n if (action instanceof SubstitutionAction && SUBSTITUTIONS[action.id]) {\n SUBSTITUTIONS[action.id](action, tokens, index);\n }\n }\n function willConnectPrev(charContextParams) {\n var backtrack = [].concat(charContextParams.backtrack);\n for (var i = backtrack.length - 1; i >= 0; i--) {\n var prevChar = backtrack[i];\n var isolated = isIsolatedArabicChar(prevChar);\n var tashkeel = isTashkeelArabicChar(prevChar);\n if (!isolated && !tashkeel) {\n return true;\n }\n if (isolated) {\n return false;\n }\n }\n return false;\n }\n function willConnectNext(charContextParams) {\n if (isIsolatedArabicChar(charContextParams.current)) {\n return false;\n }\n for (var i = 0; i < charContextParams.lookahead.length; i++) {\n var nextChar = charContextParams.lookahead[i];\n var tashkeel = isTashkeelArabicChar(nextChar);\n if (!tashkeel) {\n return true;\n }\n }\n return false;\n }\n function arabicPresentationForms(range) {\n var this$1$1 = this;\n var script = \"arab\";\n var tags = this.featuresTags[script];\n var tokens = this.tokenizer.getRangeTokens(range);\n if (tokens.length === 1) {\n return;\n }\n var contextParams = new ContextParams(\n tokens.map(function(token) {\n return token.getState(\"glyphIndex\");\n }),\n 0\n );\n var charContextParams = new ContextParams(\n tokens.map(function(token) {\n return token.char;\n }),\n 0\n );\n tokens.forEach(function(token, index) {\n if (isTashkeelArabicChar(token.char)) {\n return;\n }\n contextParams.setCurrentIndex(index);\n charContextParams.setCurrentIndex(index);\n var CONNECT = 0;\n if (willConnectPrev(charContextParams)) {\n CONNECT |= 1;\n }\n if (willConnectNext(charContextParams)) {\n CONNECT |= 2;\n }\n var tag;\n switch (CONNECT) {\n case 1:\n tag = \"fina\";\n break;\n case 2:\n tag = \"init\";\n break;\n case 3:\n tag = \"medi\";\n break;\n }\n if (tags.indexOf(tag) === -1) {\n return;\n }\n var substitutions = this$1$1.query.lookupFeature({\n tag,\n script,\n contextParams\n });\n if (substitutions instanceof Error) {\n return console.info(substitutions.message);\n }\n substitutions.forEach(function(action, index2) {\n if (action instanceof SubstitutionAction) {\n applySubstitution(action, tokens, index2);\n contextParams.context[index2] = action.substitution;\n }\n });\n });\n }\n function getContextParams(tokens, index) {\n var context = tokens.map(function(token) {\n return token.activeState.value;\n });\n return new ContextParams(context, index || 0);\n }\n function arabicRequiredLigatures(range) {\n var this$1$1 = this;\n var script = \"arab\";\n var tokens = this.tokenizer.getRangeTokens(range);\n var contextParams = getContextParams(tokens);\n contextParams.context.forEach(function(glyphIndex, index) {\n contextParams.setCurrentIndex(index);\n var substitutions = this$1$1.query.lookupFeature({\n tag: \"rlig\",\n script,\n contextParams\n });\n if (substitutions.length) {\n substitutions.forEach(function(action) {\n return applySubstitution(action, tokens, index);\n });\n contextParams = getContextParams(tokens);\n }\n });\n }\n function latinWordStartCheck(contextParams) {\n var char = contextParams.current;\n var prevChar = contextParams.get(-1);\n return (\n // ? latin first char\n prevChar === null && isLatinChar(char) || // ? latin char preceded with a non latin char\n !isLatinChar(prevChar) && isLatinChar(char)\n );\n }\n function latinWordEndCheck(contextParams) {\n var nextChar = contextParams.get(1);\n return (\n // ? last latin char\n nextChar === null || // ? next char is not latin\n !isLatinChar(nextChar)\n );\n }\n var latinWordCheck = {\n startCheck: latinWordStartCheck,\n endCheck: latinWordEndCheck\n };\n function getContextParams$1(tokens, index) {\n var context = tokens.map(function(token) {\n return token.activeState.value;\n });\n return new ContextParams(context, index || 0);\n }\n function latinLigature(range) {\n var this$1$1 = this;\n var script = \"latn\";\n var tokens = this.tokenizer.getRangeTokens(range);\n var contextParams = getContextParams$1(tokens);\n contextParams.context.forEach(function(glyphIndex, index) {\n contextParams.setCurrentIndex(index);\n var substitutions = this$1$1.query.lookupFeature({\n tag: \"liga\",\n script,\n contextParams\n });\n if (substitutions.length) {\n substitutions.forEach(function(action) {\n return applySubstitution(action, tokens, index);\n });\n contextParams = getContextParams$1(tokens);\n }\n });\n }\n function Bidi(baseDir) {\n this.baseDir = baseDir || \"ltr\";\n this.tokenizer = new Tokenizer();\n this.featuresTags = {};\n }\n Bidi.prototype.setText = function(text) {\n this.text = text;\n };\n Bidi.prototype.contextChecks = {\n latinWordCheck,\n arabicWordCheck,\n arabicSentenceCheck\n };\n function registerContextChecker(checkId) {\n var check2 = this.contextChecks[checkId + \"Check\"];\n return this.tokenizer.registerContextChecker(checkId, check2.startCheck, check2.endCheck);\n }\n function tokenizeText() {\n registerContextChecker.call(this, \"latinWord\");\n registerContextChecker.call(this, \"arabicWord\");\n registerContextChecker.call(this, \"arabicSentence\");\n return this.tokenizer.tokenize(this.text);\n }\n function reverseArabicSentences() {\n var this$1$1 = this;\n var ranges = this.tokenizer.getContextRanges(\"arabicSentence\");\n ranges.forEach(function(range) {\n var rangeTokens = this$1$1.tokenizer.getRangeTokens(range);\n this$1$1.tokenizer.replaceRange(range.startIndex, range.endOffset, rangeTokens.reverse());\n });\n }\n Bidi.prototype.registerFeatures = function(script, tags) {\n var this$1$1 = this;\n var supportedTags = tags.filter(function(tag) {\n return this$1$1.query.supports({ script, tag });\n });\n if (!this.featuresTags.hasOwnProperty(script)) {\n this.featuresTags[script] = supportedTags;\n } else {\n this.featuresTags[script] = this.featuresTags[script].concat(supportedTags);\n }\n };\n Bidi.prototype.applyFeatures = function(font, features) {\n if (!font) {\n throw new Error(\"No valid font was provided to apply features\");\n }\n if (!this.query) {\n this.query = new FeatureQuery(font);\n }\n for (var f = 0; f < features.length; f++) {\n var feature = features[f];\n if (!this.query.supports({ script: feature.script })) {\n continue;\n }\n this.registerFeatures(feature.script, feature.tags);\n }\n };\n Bidi.prototype.registerModifier = function(modifierId, condition, modifier) {\n this.tokenizer.registerModifier(modifierId, condition, modifier);\n };\n function checkGlyphIndexStatus() {\n if (this.tokenizer.registeredModifiers.indexOf(\"glyphIndex\") === -1) {\n throw new Error(\"glyphIndex modifier is required to apply arabic presentation features.\");\n }\n }\n function applyArabicPresentationForms() {\n var this$1$1 = this;\n var script = \"arab\";\n if (!this.featuresTags.hasOwnProperty(script)) {\n return;\n }\n checkGlyphIndexStatus.call(this);\n var ranges = this.tokenizer.getContextRanges(\"arabicWord\");\n ranges.forEach(function(range) {\n arabicPresentationForms.call(this$1$1, range);\n });\n }\n function applyArabicRequireLigatures() {\n var this$1$1 = this;\n var script = \"arab\";\n if (!this.featuresTags.hasOwnProperty(script)) {\n return;\n }\n var tags = this.featuresTags[script];\n if (tags.indexOf(\"rlig\") === -1) {\n return;\n }\n checkGlyphIndexStatus.call(this);\n var ranges = this.tokenizer.getContextRanges(\"arabicWord\");\n ranges.forEach(function(range) {\n arabicRequiredLigatures.call(this$1$1, range);\n });\n }\n function applyLatinLigatures() {\n var this$1$1 = this;\n var script = \"latn\";\n if (!this.featuresTags.hasOwnProperty(script)) {\n return;\n }\n var tags = this.featuresTags[script];\n if (tags.indexOf(\"liga\") === -1) {\n return;\n }\n checkGlyphIndexStatus.call(this);\n var ranges = this.tokenizer.getContextRanges(\"latinWord\");\n ranges.forEach(function(range) {\n latinLigature.call(this$1$1, range);\n });\n }\n Bidi.prototype.checkContextReady = function(contextId) {\n return !!this.tokenizer.getContext(contextId);\n };\n Bidi.prototype.applyFeaturesToContexts = function() {\n if (this.checkContextReady(\"arabicWord\")) {\n applyArabicPresentationForms.call(this);\n applyArabicRequireLigatures.call(this);\n }\n if (this.checkContextReady(\"latinWord\")) {\n applyLatinLigatures.call(this);\n }\n if (this.checkContextReady(\"arabicSentence\")) {\n reverseArabicSentences.call(this);\n }\n };\n Bidi.prototype.processText = function(text) {\n if (!this.text || this.text !== text) {\n this.setText(text);\n tokenizeText.call(this);\n this.applyFeaturesToContexts();\n }\n };\n Bidi.prototype.getBidiText = function(text) {\n this.processText(text);\n return this.tokenizer.getText();\n };\n Bidi.prototype.getTextGlyphs = function(text) {\n this.processText(text);\n var indexes = [];\n for (var i = 0; i < this.tokenizer.tokens.length; i++) {\n var token = this.tokenizer.tokens[i];\n if (token.state.deleted) {\n continue;\n }\n var index = token.activeState.value;\n indexes.push(Array.isArray(index) ? index[0] : index);\n }\n return indexes;\n };\n function Font(options) {\n options = options || {};\n options.tables = options.tables || {};\n if (!options.empty) {\n checkArgument(options.familyName, \"When creating a new Font object, familyName is required.\");\n checkArgument(options.styleName, \"When creating a new Font object, styleName is required.\");\n checkArgument(options.unitsPerEm, \"When creating a new Font object, unitsPerEm is required.\");\n checkArgument(options.ascender, \"When creating a new Font object, ascender is required.\");\n checkArgument(options.descender <= 0, \"When creating a new Font object, negative descender value is required.\");\n this.names = {\n fontFamily: { en: options.familyName || \" \" },\n fontSubfamily: { en: options.styleName || \" \" },\n fullName: { en: options.fullName || options.familyName + \" \" + options.styleName },\n // postScriptName may not contain any whitespace\n postScriptName: { en: options.postScriptName || (options.familyName + options.styleName).replace(/\\s/g, \"\") },\n designer: { en: options.designer || \" \" },\n designerURL: { en: options.designerURL || \" \" },\n manufacturer: { en: options.manufacturer || \" \" },\n manufacturerURL: { en: options.manufacturerURL || \" \" },\n license: { en: options.license || \" \" },\n licenseURL: { en: options.licenseURL || \" \" },\n version: { en: options.version || \"Version 0.1\" },\n description: { en: options.description || \" \" },\n copyright: { en: options.copyright || \" \" },\n trademark: { en: options.trademark || \" \" }\n };\n this.unitsPerEm = options.unitsPerEm || 1e3;\n this.ascender = options.ascender;\n this.descender = options.descender;\n this.createdTimestamp = options.createdTimestamp;\n this.tables = Object.assign(options.tables, {\n os2: Object.assign(\n {\n usWeightClass: options.weightClass || this.usWeightClasses.MEDIUM,\n usWidthClass: options.widthClass || this.usWidthClasses.MEDIUM,\n fsSelection: options.fsSelection || this.fsSelectionValues.REGULAR\n },\n options.tables.os2\n )\n });\n }\n this.supported = true;\n this.glyphs = new glyphset.GlyphSet(this, options.glyphs || []);\n this.encoding = new DefaultEncoding(this);\n this.position = new Position(this);\n this.substitution = new Substitution(this);\n this.tables = this.tables || {};\n this._push = null;\n this._hmtxTableData = {};\n Object.defineProperty(this, \"hinting\", {\n get: function() {\n if (this._hinting) {\n return this._hinting;\n }\n if (this.outlinesFormat === \"truetype\") {\n return this._hinting = new Hinting(this);\n }\n }\n });\n }\n Font.prototype.hasChar = function(c) {\n return this.encoding.charToGlyphIndex(c) !== null;\n };\n Font.prototype.charToGlyphIndex = function(s) {\n return this.encoding.charToGlyphIndex(s);\n };\n Font.prototype.charToGlyph = function(c) {\n var glyphIndex = this.charToGlyphIndex(c);\n var glyph = this.glyphs.get(glyphIndex);\n if (!glyph) {\n glyph = this.glyphs.get(0);\n }\n return glyph;\n };\n Font.prototype.updateFeatures = function(options) {\n return this.defaultRenderOptions.features.map(function(feature) {\n if (feature.script === \"latn\") {\n return {\n script: \"latn\",\n tags: feature.tags.filter(function(tag) {\n return options[tag];\n })\n };\n } else {\n return feature;\n }\n });\n };\n Font.prototype.stringToGlyphs = function(s, options) {\n var this$1$1 = this;\n var bidi = new Bidi();\n var charToGlyphIndexMod = function(token) {\n return this$1$1.charToGlyphIndex(token.char);\n };\n bidi.registerModifier(\"glyphIndex\", null, charToGlyphIndexMod);\n var features = options ? this.updateFeatures(options.features) : this.defaultRenderOptions.features;\n bidi.applyFeatures(this, features);\n var indexes = bidi.getTextGlyphs(s);\n var length = indexes.length;\n var glyphs = new Array(length);\n var notdef = this.glyphs.get(0);\n for (var i = 0; i < length; i += 1) {\n glyphs[i] = this.glyphs.get(indexes[i]) || notdef;\n }\n return glyphs;\n };\n Font.prototype.nameToGlyphIndex = function(name) {\n return this.glyphNames.nameToGlyphIndex(name);\n };\n Font.prototype.nameToGlyph = function(name) {\n var glyphIndex = this.nameToGlyphIndex(name);\n var glyph = this.glyphs.get(glyphIndex);\n if (!glyph) {\n glyph = this.glyphs.get(0);\n }\n return glyph;\n };\n Font.prototype.glyphIndexToName = function(gid) {\n if (!this.glyphNames.glyphIndexToName) {\n return \"\";\n }\n return this.glyphNames.glyphIndexToName(gid);\n };\n Font.prototype.getKerningValue = function(leftGlyph, rightGlyph) {\n leftGlyph = leftGlyph.index || leftGlyph;\n rightGlyph = rightGlyph.index || rightGlyph;\n var gposKerning = this.position.defaultKerningTables;\n if (gposKerning) {\n return this.position.getKerningValue(gposKerning, leftGlyph, rightGlyph);\n }\n return this.kerningPairs[leftGlyph + \",\" + rightGlyph] || 0;\n };\n Font.prototype.defaultRenderOptions = {\n kerning: true,\n features: [\n /**\n * these 4 features are required to render Arabic text properly\n * and shouldn't be turned off when rendering arabic text.\n */\n { script: \"arab\", tags: [\"init\", \"medi\", \"fina\", \"rlig\"] },\n { script: \"latn\", tags: [\"liga\", \"rlig\"] }\n ]\n };\n Font.prototype.forEachGlyph = function(text, x, y, fontSize, options, callback) {\n x = x !== void 0 ? x : 0;\n y = y !== void 0 ? y : 0;\n fontSize = fontSize !== void 0 ? fontSize : 72;\n options = Object.assign({}, this.defaultRenderOptions, options);\n var fontScale = 1 / this.unitsPerEm * fontSize;\n var glyphs = this.stringToGlyphs(text, options);\n var kerningLookups;\n if (options.kerning) {\n var script = options.script || this.position.getDefaultScriptName();\n kerningLookups = this.position.getKerningTables(script, options.language);\n }\n for (var i = 0; i < glyphs.length; i += 1) {\n var glyph = glyphs[i];\n callback.call(this, glyph, x, y, fontSize, options);\n if (glyph.advanceWidth) {\n x += glyph.advanceWidth * fontScale;\n }\n if (options.kerning && i < glyphs.length - 1) {\n var kerningValue = kerningLookups ? this.position.getKerningValue(kerningLookups, glyph.index, glyphs[i + 1].index) : this.getKerningValue(glyph, glyphs[i + 1]);\n x += kerningValue * fontScale;\n }\n if (options.letterSpacing) {\n x += options.letterSpacing * fontSize;\n } else if (options.tracking) {\n x += options.tracking / 1e3 * fontSize;\n }\n }\n return x;\n };\n Font.prototype.getPath = function(text, x, y, fontSize, options) {\n var fullPath = new Path();\n this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) {\n var glyphPath = glyph.getPath(gX, gY, gFontSize, options, this);\n fullPath.extend(glyphPath);\n });\n return fullPath;\n };\n Font.prototype.getPaths = function(text, x, y, fontSize, options) {\n var glyphPaths = [];\n this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) {\n var glyphPath = glyph.getPath(gX, gY, gFontSize, options, this);\n glyphPaths.push(glyphPath);\n });\n return glyphPaths;\n };\n Font.prototype.getAdvanceWidth = function(text, fontSize, options) {\n return this.forEachGlyph(text, 0, 0, fontSize, options, function() {\n });\n };\n Font.prototype.draw = function(ctx, text, x, y, fontSize, options) {\n this.getPath(text, x, y, fontSize, options).draw(ctx);\n };\n Font.prototype.drawPoints = function(ctx, text, x, y, fontSize, options) {\n this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) {\n glyph.drawPoints(ctx, gX, gY, gFontSize);\n });\n };\n Font.prototype.drawMetrics = function(ctx, text, x, y, fontSize, options) {\n this.forEachGlyph(text, x, y, fontSize, options, function(glyph, gX, gY, gFontSize) {\n glyph.drawMetrics(ctx, gX, gY, gFontSize);\n });\n };\n Font.prototype.getEnglishName = function(name) {\n var translations = this.names[name];\n if (translations) {\n return translations.en;\n }\n };\n Font.prototype.validate = function() {\n var _this = this;\n function assert(predicate) {\n }\n function assertNamePresent(name) {\n var englishName = _this.getEnglishName(name);\n assert(englishName && englishName.trim().length > 0);\n }\n assertNamePresent(\"fontFamily\");\n assertNamePresent(\"weightName\");\n assertNamePresent(\"manufacturer\");\n assertNamePresent(\"copyright\");\n assertNamePresent(\"version\");\n assert(this.unitsPerEm > 0);\n };\n Font.prototype.toTables = function() {\n return sfnt.fontToTable(this);\n };\n Font.prototype.toBuffer = function() {\n console.warn(\"Font.toBuffer is deprecated. Use Font.toArrayBuffer instead.\");\n return this.toArrayBuffer();\n };\n Font.prototype.toArrayBuffer = function() {\n var sfntTable = this.toTables();\n var bytes = sfntTable.encode();\n var buffer = new ArrayBuffer(bytes.length);\n var intArray = new Uint8Array(buffer);\n for (var i = 0; i < bytes.length; i++) {\n intArray[i] = bytes[i];\n }\n return buffer;\n };\n Font.prototype.fsSelectionValues = {\n ITALIC: 1,\n //1\n UNDERSCORE: 2,\n //2\n NEGATIVE: 4,\n //4\n OUTLINED: 8,\n //8\n STRIKEOUT: 16,\n //16\n BOLD: 32,\n //32\n REGULAR: 64,\n //64\n USER_TYPO_METRICS: 128,\n //128\n WWS: 256,\n //256\n OBLIQUE: 512\n //512\n };\n Font.prototype.usWidthClasses = {\n ULTRA_CONDENSED: 1,\n EXTRA_CONDENSED: 2,\n CONDENSED: 3,\n SEMI_CONDENSED: 4,\n MEDIUM: 5,\n SEMI_EXPANDED: 6,\n EXPANDED: 7,\n EXTRA_EXPANDED: 8,\n ULTRA_EXPANDED: 9\n };\n Font.prototype.usWeightClasses = {\n THIN: 100,\n EXTRA_LIGHT: 200,\n LIGHT: 300,\n NORMAL: 400,\n MEDIUM: 500,\n SEMI_BOLD: 600,\n BOLD: 700,\n EXTRA_BOLD: 800,\n BLACK: 900\n };\n function addName(name, names) {\n var nameString = JSON.stringify(name);\n var nameID = 256;\n for (var nameKey in names) {\n var n = parseInt(nameKey);\n if (!n || n < 256) {\n continue;\n }\n if (JSON.stringify(names[nameKey]) === nameString) {\n return n;\n }\n if (nameID <= n) {\n nameID = n + 1;\n }\n }\n names[nameID] = name;\n return nameID;\n }\n function makeFvarAxis(n, axis, names) {\n var nameID = addName(axis.name, names);\n return [\n { name: \"tag_\" + n, type: \"TAG\", value: axis.tag },\n { name: \"minValue_\" + n, type: \"FIXED\", value: axis.minValue << 16 },\n { name: \"defaultValue_\" + n, type: \"FIXED\", value: axis.defaultValue << 16 },\n { name: \"maxValue_\" + n, type: \"FIXED\", value: axis.maxValue << 16 },\n { name: \"flags_\" + n, type: \"USHORT\", value: 0 },\n { name: \"nameID_\" + n, type: \"USHORT\", value: nameID }\n ];\n }\n function parseFvarAxis(data, start, names) {\n var axis = {};\n var p = new parse.Parser(data, start);\n axis.tag = p.parseTag();\n axis.minValue = p.parseFixed();\n axis.defaultValue = p.parseFixed();\n axis.maxValue = p.parseFixed();\n p.skip(\"uShort\", 1);\n axis.name = names[p.parseUShort()] || {};\n return axis;\n }\n function makeFvarInstance(n, inst, axes, names) {\n var nameID = addName(inst.name, names);\n var fields = [\n { name: \"nameID_\" + n, type: \"USHORT\", value: nameID },\n { name: \"flags_\" + n, type: \"USHORT\", value: 0 }\n ];\n for (var i = 0; i < axes.length; ++i) {\n var axisTag = axes[i].tag;\n fields.push({\n name: \"axis_\" + n + \" \" + axisTag,\n type: \"FIXED\",\n value: inst.coordinates[axisTag] << 16\n });\n }\n return fields;\n }\n function parseFvarInstance(data, start, axes, names) {\n var inst = {};\n var p = new parse.Parser(data, start);\n inst.name = names[p.parseUShort()] || {};\n p.skip(\"uShort\", 1);\n inst.coordinates = {};\n for (var i = 0; i < axes.length; ++i) {\n inst.coordinates[axes[i].tag] = p.parseFixed();\n }\n return inst;\n }\n function makeFvarTable(fvar2, names) {\n var result = new table.Table(\"fvar\", [\n { name: \"version\", type: \"ULONG\", value: 65536 },\n { name: \"offsetToData\", type: \"USHORT\", value: 0 },\n { name: \"countSizePairs\", type: \"USHORT\", value: 2 },\n { name: \"axisCount\", type: \"USHORT\", value: fvar2.axes.length },\n { name: \"axisSize\", type: \"USHORT\", value: 20 },\n { name: \"instanceCount\", type: \"USHORT\", value: fvar2.instances.length },\n { name: \"instanceSize\", type: \"USHORT\", value: 4 + fvar2.axes.length * 4 }\n ]);\n result.offsetToData = result.sizeOf();\n for (var i = 0; i < fvar2.axes.length; i++) {\n result.fields = result.fields.concat(makeFvarAxis(i, fvar2.axes[i], names));\n }\n for (var j = 0; j < fvar2.instances.length; j++) {\n result.fields = result.fields.concat(makeFvarInstance(j, fvar2.instances[j], fvar2.axes, names));\n }\n return result;\n }\n function parseFvarTable(data, start, names) {\n var p = new parse.Parser(data, start);\n var tableVersion = p.parseULong();\n check.argument(tableVersion === 65536, \"Unsupported fvar table version.\");\n var offsetToData = p.parseOffset16();\n p.skip(\"uShort\", 1);\n var axisCount = p.parseUShort();\n var axisSize = p.parseUShort();\n var instanceCount = p.parseUShort();\n var instanceSize = p.parseUShort();\n var axes = [];\n for (var i = 0; i < axisCount; i++) {\n axes.push(parseFvarAxis(data, start + offsetToData + i * axisSize, names));\n }\n var instances = [];\n var instanceStart = start + offsetToData + axisCount * axisSize;\n for (var j = 0; j < instanceCount; j++) {\n instances.push(parseFvarInstance(data, instanceStart + j * instanceSize, axes, names));\n }\n return { axes, instances };\n }\n var fvar = { make: makeFvarTable, parse: parseFvarTable };\n var attachList = function() {\n return {\n coverage: this.parsePointer(Parser.coverage),\n attachPoints: this.parseList(Parser.pointer(Parser.uShortList))\n };\n };\n var caretValue = function() {\n var format = this.parseUShort();\n check.argument(format === 1 || format === 2 || format === 3, \"Unsupported CaretValue table version.\");\n if (format === 1) {\n return { coordinate: this.parseShort() };\n } else if (format === 2) {\n return { pointindex: this.parseShort() };\n } else if (format === 3) {\n return { coordinate: this.parseShort() };\n }\n };\n var ligGlyph = function() {\n return this.parseList(Parser.pointer(caretValue));\n };\n var ligCaretList = function() {\n return {\n coverage: this.parsePointer(Parser.coverage),\n ligGlyphs: this.parseList(Parser.pointer(ligGlyph))\n };\n };\n var markGlyphSets = function() {\n this.parseUShort();\n return this.parseList(Parser.pointer(Parser.coverage));\n };\n function parseGDEFTable(data, start) {\n start = start || 0;\n var p = new Parser(data, start);\n var tableVersion = p.parseVersion(1);\n check.argument(\n tableVersion === 1 || tableVersion === 1.2 || tableVersion === 1.3,\n \"Unsupported GDEF table version.\"\n );\n var gdef2 = {\n version: tableVersion,\n classDef: p.parsePointer(Parser.classDef),\n attachList: p.parsePointer(attachList),\n ligCaretList: p.parsePointer(ligCaretList),\n markAttachClassDef: p.parsePointer(Parser.classDef)\n };\n if (tableVersion >= 1.2) {\n gdef2.markGlyphSets = p.parsePointer(markGlyphSets);\n }\n return gdef2;\n }\n var gdef = { parse: parseGDEFTable };\n var subtableParsers$1 = new Array(10);\n subtableParsers$1[1] = function parseLookup1() {\n var start = this.offset + this.relativeOffset;\n var posformat = this.parseUShort();\n if (posformat === 1) {\n return {\n posFormat: 1,\n coverage: this.parsePointer(Parser.coverage),\n value: this.parseValueRecord()\n };\n } else if (posformat === 2) {\n return {\n posFormat: 2,\n coverage: this.parsePointer(Parser.coverage),\n values: this.parseValueRecordList()\n };\n }\n check.assert(false, \"0x\" + start.toString(16) + \": GPOS lookup type 1 format must be 1 or 2.\");\n };\n subtableParsers$1[2] = function parseLookup2() {\n var start = this.offset + this.relativeOffset;\n var posFormat = this.parseUShort();\n check.assert(\n posFormat === 1 || posFormat === 2,\n \"0x\" + start.toString(16) + \": GPOS lookup type 2 format must be 1 or 2.\"\n );\n var coverage = this.parsePointer(Parser.coverage);\n var valueFormat1 = this.parseUShort();\n var valueFormat2 = this.parseUShort();\n if (posFormat === 1) {\n return {\n posFormat,\n coverage,\n valueFormat1,\n valueFormat2,\n pairSets: this.parseList(\n Parser.pointer(\n Parser.list(function() {\n return {\n // pairValueRecord\n secondGlyph: this.parseUShort(),\n value1: this.parseValueRecord(valueFormat1),\n value2: this.parseValueRecord(valueFormat2)\n };\n })\n )\n )\n };\n } else if (posFormat === 2) {\n var classDef1 = this.parsePointer(Parser.classDef);\n var classDef2 = this.parsePointer(Parser.classDef);\n var class1Count = this.parseUShort();\n var class2Count = this.parseUShort();\n return {\n // Class Pair Adjustment\n posFormat,\n coverage,\n valueFormat1,\n valueFormat2,\n classDef1,\n classDef2,\n class1Count,\n class2Count,\n classRecords: this.parseList(\n class1Count,\n Parser.list(class2Count, function() {\n return {\n value1: this.parseValueRecord(valueFormat1),\n value2: this.parseValueRecord(valueFormat2)\n };\n })\n )\n };\n }\n };\n subtableParsers$1[3] = function parseLookup3() {\n return { error: \"GPOS Lookup 3 not supported\" };\n };\n subtableParsers$1[4] = function parseLookup4() {\n return { error: \"GPOS Lookup 4 not supported\" };\n };\n subtableParsers$1[5] = function parseLookup5() {\n return { error: \"GPOS Lookup 5 not supported\" };\n };\n subtableParsers$1[6] = function parseLookup6() {\n return { error: \"GPOS Lookup 6 not supported\" };\n };\n subtableParsers$1[7] = function parseLookup7() {\n return { error: \"GPOS Lookup 7 not supported\" };\n };\n subtableParsers$1[8] = function parseLookup8() {\n return { error: \"GPOS Lookup 8 not supported\" };\n };\n subtableParsers$1[9] = function parseLookup9() {\n return { error: \"GPOS Lookup 9 not supported\" };\n };\n function parseGposTable(data, start) {\n start = start || 0;\n var p = new Parser(data, start);\n var tableVersion = p.parseVersion(1);\n check.argument(tableVersion === 1 || tableVersion === 1.1, \"Unsupported GPOS table version \" + tableVersion);\n if (tableVersion === 1) {\n return {\n version: tableVersion,\n scripts: p.parseScriptList(),\n features: p.parseFeatureList(),\n lookups: p.parseLookupList(subtableParsers$1)\n };\n } else {\n return {\n version: tableVersion,\n scripts: p.parseScriptList(),\n features: p.parseFeatureList(),\n lookups: p.parseLookupList(subtableParsers$1),\n variations: p.parseFeatureVariationsList()\n };\n }\n }\n var subtableMakers$1 = new Array(10);\n function makeGposTable(gpos2) {\n return new table.Table(\"GPOS\", [\n { name: \"version\", type: \"ULONG\", value: 65536 },\n { name: \"scripts\", type: \"TABLE\", value: new table.ScriptList(gpos2.scripts) },\n { name: \"features\", type: \"TABLE\", value: new table.FeatureList(gpos2.features) },\n { name: \"lookups\", type: \"TABLE\", value: new table.LookupList(gpos2.lookups, subtableMakers$1) }\n ]);\n }\n var gpos = { parse: parseGposTable, make: makeGposTable };\n function parseWindowsKernTable(p) {\n var pairs = {};\n p.skip(\"uShort\");\n var subtableVersion = p.parseUShort();\n check.argument(subtableVersion === 0, \"Unsupported kern sub-table version.\");\n p.skip(\"uShort\", 2);\n var nPairs = p.parseUShort();\n p.skip(\"uShort\", 3);\n for (var i = 0; i < nPairs; i += 1) {\n var leftIndex = p.parseUShort();\n var rightIndex = p.parseUShort();\n var value = p.parseShort();\n pairs[leftIndex + \",\" + rightIndex] = value;\n }\n return pairs;\n }\n function parseMacKernTable(p) {\n var pairs = {};\n p.skip(\"uShort\");\n var nTables = p.parseULong();\n if (nTables > 1) {\n console.warn(\"Only the first kern subtable is supported.\");\n }\n p.skip(\"uLong\");\n var coverage = p.parseUShort();\n var subtableVersion = coverage & 255;\n p.skip(\"uShort\");\n if (subtableVersion === 0) {\n var nPairs = p.parseUShort();\n p.skip(\"uShort\", 3);\n for (var i = 0; i < nPairs; i += 1) {\n var leftIndex = p.parseUShort();\n var rightIndex = p.parseUShort();\n var value = p.parseShort();\n pairs[leftIndex + \",\" + rightIndex] = value;\n }\n }\n return pairs;\n }\n function parseKernTable(data, start) {\n var p = new parse.Parser(data, start);\n var tableVersion = p.parseUShort();\n if (tableVersion === 0) {\n return parseWindowsKernTable(p);\n } else if (tableVersion === 1) {\n return parseMacKernTable(p);\n } else {\n throw new Error(\"Unsupported kern table version (\" + tableVersion + \").\");\n }\n }\n var kern = { parse: parseKernTable };\n function parseLocaTable(data, start, numGlyphs, shortVersion) {\n var p = new parse.Parser(data, start);\n var parseFn = shortVersion ? p.parseUShort : p.parseULong;\n var glyphOffsets = [];\n for (var i = 0; i < numGlyphs + 1; i += 1) {\n var glyphOffset = parseFn.call(p);\n if (shortVersion) {\n glyphOffset *= 2;\n }\n glyphOffsets.push(glyphOffset);\n }\n return glyphOffsets;\n }\n var loca = { parse: parseLocaTable };\n function parseOpenTypeTableEntries(data, numTables) {\n var tableEntries = [];\n var p = 12;\n for (var i = 0; i < numTables; i += 1) {\n var tag = parse.getTag(data, p);\n var checksum = parse.getULong(data, p + 4);\n var offset = parse.getULong(data, p + 8);\n var length = parse.getULong(data, p + 12);\n tableEntries.push({ tag, checksum, offset, length, compression: false });\n p += 16;\n }\n return tableEntries;\n }\n function parseWOFFTableEntries(data, numTables) {\n var tableEntries = [];\n var p = 44;\n for (var i = 0; i < numTables; i += 1) {\n var tag = parse.getTag(data, p);\n var offset = parse.getULong(data, p + 4);\n var compLength = parse.getULong(data, p + 8);\n var origLength = parse.getULong(data, p + 12);\n var compression = void 0;\n if (compLength < origLength) {\n compression = \"WOFF\";\n } else {\n compression = false;\n }\n tableEntries.push({\n tag,\n offset,\n compression,\n compressedLength: compLength,\n length: origLength\n });\n p += 20;\n }\n return tableEntries;\n }\n function uncompressTable(data, tableEntry) {\n if (tableEntry.compression === \"WOFF\") {\n var inBuffer = new Uint8Array(data.buffer, tableEntry.offset + 2, tableEntry.compressedLength - 2);\n var outBuffer = new Uint8Array(tableEntry.length);\n tinyInflate(inBuffer, outBuffer);\n if (outBuffer.byteLength !== tableEntry.length) {\n throw new Error(\"Decompression error: \" + tableEntry.tag + \" decompressed length doesn't match recorded length\");\n }\n var view = new DataView(outBuffer.buffer, 0);\n return { data: view, offset: 0 };\n } else {\n return { data, offset: tableEntry.offset };\n }\n }\n function parseBuffer2(buffer, opt) {\n opt = opt === void 0 || opt === null ? {} : opt;\n var indexToLocFormat;\n var ltagTable;\n var font = new Font({ empty: true });\n var data = new DataView(buffer, 0);\n var numTables;\n var tableEntries = [];\n var signature = parse.getTag(data, 0);\n if (signature === String.fromCharCode(0, 1, 0, 0) || signature === \"true\" || signature === \"typ1\") {\n font.outlinesFormat = \"truetype\";\n numTables = parse.getUShort(data, 4);\n tableEntries = parseOpenTypeTableEntries(data, numTables);\n } else if (signature === \"OTTO\") {\n font.outlinesFormat = \"cff\";\n numTables = parse.getUShort(data, 4);\n tableEntries = parseOpenTypeTableEntries(data, numTables);\n } else if (signature === \"wOFF\") {\n var flavor = parse.getTag(data, 4);\n if (flavor === String.fromCharCode(0, 1, 0, 0)) {\n font.outlinesFormat = \"truetype\";\n } else if (flavor === \"OTTO\") {\n font.outlinesFormat = \"cff\";\n } else {\n throw new Error(\"Unsupported OpenType flavor \" + signature);\n }\n numTables = parse.getUShort(data, 12);\n tableEntries = parseWOFFTableEntries(data, numTables);\n } else {\n throw new Error(\"Unsupported OpenType signature \" + signature);\n }\n var cffTableEntry;\n var fvarTableEntry;\n var glyfTableEntry;\n var gdefTableEntry;\n var gposTableEntry;\n var gsubTableEntry;\n var hmtxTableEntry;\n var kernTableEntry;\n var locaTableEntry;\n var nameTableEntry;\n var metaTableEntry;\n var p;\n for (var i = 0; i < numTables; i += 1) {\n var tableEntry = tableEntries[i];\n var table2 = void 0;\n switch (tableEntry.tag) {\n case \"cmap\":\n table2 = uncompressTable(data, tableEntry);\n font.tables.cmap = cmap.parse(table2.data, table2.offset);\n font.encoding = new CmapEncoding(font.tables.cmap);\n break;\n case \"cvt \":\n table2 = uncompressTable(data, tableEntry);\n p = new parse.Parser(table2.data, table2.offset);\n font.tables.cvt = p.parseShortList(tableEntry.length / 2);\n break;\n case \"fvar\":\n fvarTableEntry = tableEntry;\n break;\n case \"fpgm\":\n table2 = uncompressTable(data, tableEntry);\n p = new parse.Parser(table2.data, table2.offset);\n font.tables.fpgm = p.parseByteList(tableEntry.length);\n break;\n case \"head\":\n table2 = uncompressTable(data, tableEntry);\n font.tables.head = head.parse(table2.data, table2.offset);\n font.unitsPerEm = font.tables.head.unitsPerEm;\n indexToLocFormat = font.tables.head.indexToLocFormat;\n break;\n case \"hhea\":\n table2 = uncompressTable(data, tableEntry);\n font.tables.hhea = hhea.parse(table2.data, table2.offset);\n font.ascender = font.tables.hhea.ascender;\n font.descender = font.tables.hhea.descender;\n font.numberOfHMetrics = font.tables.hhea.numberOfHMetrics;\n break;\n case \"hmtx\":\n hmtxTableEntry = tableEntry;\n break;\n case \"ltag\":\n table2 = uncompressTable(data, tableEntry);\n ltagTable = ltag.parse(table2.data, table2.offset);\n break;\n case \"maxp\":\n table2 = uncompressTable(data, tableEntry);\n font.tables.maxp = maxp.parse(table2.data, table2.offset);\n font.numGlyphs = font.tables.maxp.numGlyphs;\n break;\n case \"name\":\n nameTableEntry = tableEntry;\n break;\n case \"OS/2\":\n table2 = uncompressTable(data, tableEntry);\n font.tables.os2 = os2.parse(table2.data, table2.offset);\n break;\n case \"post\":\n table2 = uncompressTable(data, tableEntry);\n font.tables.post = post.parse(table2.data, table2.offset);\n font.glyphNames = new GlyphNames(font.tables.post);\n break;\n case \"prep\":\n table2 = uncompressTable(data, tableEntry);\n p = new parse.Parser(table2.data, table2.offset);\n font.tables.prep = p.parseByteList(tableEntry.length);\n break;\n case \"glyf\":\n glyfTableEntry = tableEntry;\n break;\n case \"loca\":\n locaTableEntry = tableEntry;\n break;\n case \"CFF \":\n cffTableEntry = tableEntry;\n break;\n case \"kern\":\n kernTableEntry = tableEntry;\n break;\n case \"GDEF\":\n gdefTableEntry = tableEntry;\n break;\n case \"GPOS\":\n gposTableEntry = tableEntry;\n break;\n case \"GSUB\":\n gsubTableEntry = tableEntry;\n break;\n case \"meta\":\n metaTableEntry = tableEntry;\n break;\n }\n }\n var nameTable = uncompressTable(data, nameTableEntry);\n font.tables.name = _name.parse(nameTable.data, nameTable.offset, ltagTable);\n font.names = font.tables.name;\n if (glyfTableEntry && locaTableEntry) {\n var shortVersion = indexToLocFormat === 0;\n var locaTable = uncompressTable(data, locaTableEntry);\n var locaOffsets = loca.parse(locaTable.data, locaTable.offset, font.numGlyphs, shortVersion);\n var glyfTable = uncompressTable(data, glyfTableEntry);\n font.glyphs = glyf.parse(glyfTable.data, glyfTable.offset, locaOffsets, font, opt);\n } else if (cffTableEntry) {\n var cffTable = uncompressTable(data, cffTableEntry);\n cff.parse(cffTable.data, cffTable.offset, font, opt);\n } else {\n throw new Error(\"Font doesn't contain TrueType or CFF outlines.\");\n }\n var hmtxTable = uncompressTable(data, hmtxTableEntry);\n hmtx.parse(font, hmtxTable.data, hmtxTable.offset, font.numberOfHMetrics, font.numGlyphs, font.glyphs, opt);\n addGlyphNames(font, opt);\n if (kernTableEntry) {\n var kernTable = uncompressTable(data, kernTableEntry);\n font.kerningPairs = kern.parse(kernTable.data, kernTable.offset);\n } else {\n font.kerningPairs = {};\n }\n if (gdefTableEntry) {\n var gdefTable = uncompressTable(data, gdefTableEntry);\n font.tables.gdef = gdef.parse(gdefTable.data, gdefTable.offset);\n }\n if (gposTableEntry) {\n var gposTable = uncompressTable(data, gposTableEntry);\n font.tables.gpos = gpos.parse(gposTable.data, gposTable.offset);\n font.position.init();\n }\n if (gsubTableEntry) {\n var gsubTable = uncompressTable(data, gsubTableEntry);\n font.tables.gsub = gsub.parse(gsubTable.data, gsubTable.offset);\n }\n if (fvarTableEntry) {\n var fvarTable = uncompressTable(data, fvarTableEntry);\n font.tables.fvar = fvar.parse(fvarTable.data, fvarTable.offset, font.names);\n }\n if (metaTableEntry) {\n var metaTable = uncompressTable(data, metaTableEntry);\n font.tables.meta = meta.parse(metaTable.data, metaTable.offset);\n font.metas = font.tables.meta;\n }\n return font;\n }\n return { parseBuffer: parseBuffer2 };\n})();\nexport {\n parseBuffer as parse\n};\n//# sourceMappingURL=opentype.js.map\n","import { Loader, FileLoader } from \"three\";\nimport { parse as parseBuffer } from \"../libs/opentype.js\";\nclass TTFLoader extends Loader {\n constructor(manager) {\n super(manager);\n this.reversed = false;\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setResponseType(\"arraybuffer\");\n loader.setRequestHeader(this.requestHeader);\n loader.setWithCredentials(this.withCredentials);\n loader.load(\n url,\n function(buffer) {\n try {\n onLoad(parseBuffer(buffer));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(arraybuffer) {\n function convert(font, reversed) {\n const round = Math.round;\n const glyphs = {};\n const scale = 1e5 / ((font.unitsPerEm || 2048) * 72);\n const glyphIndexMap = font.encoding.cmap.glyphIndexMap;\n const unicodes = Object.keys(glyphIndexMap);\n for (let i = 0; i < unicodes.length; i++) {\n const unicode = unicodes[i];\n const glyph = font.glyphs.glyphs[glyphIndexMap[unicode]];\n if (unicode !== void 0) {\n const token = {\n ha: round(glyph.advanceWidth * scale),\n x_min: round(glyph.xMin * scale),\n x_max: round(glyph.xMax * scale),\n o: \"\"\n };\n if (reversed) {\n glyph.path.commands = reverseCommands(glyph.path.commands);\n }\n glyph.path.commands.forEach(function(command) {\n if (command.type.toLowerCase() === \"c\") {\n command.type = \"b\";\n }\n token.o += command.type.toLowerCase() + \" \";\n if (command.x !== void 0 && command.y !== void 0) {\n token.o += round(command.x * scale) + \" \" + round(command.y * scale) + \" \";\n }\n if (command.x1 !== void 0 && command.y1 !== void 0) {\n token.o += round(command.x1 * scale) + \" \" + round(command.y1 * scale) + \" \";\n }\n if (command.x2 !== void 0 && command.y2 !== void 0) {\n token.o += round(command.x2 * scale) + \" \" + round(command.y2 * scale) + \" \";\n }\n });\n glyphs[String.fromCodePoint(glyph.unicode)] = token;\n }\n }\n return {\n glyphs,\n familyName: font.getEnglishName(\"fullName\"),\n ascender: round(font.ascender * scale),\n descender: round(font.descender * scale),\n underlinePosition: font.tables.post.underlinePosition,\n underlineThickness: font.tables.post.underlineThickness,\n boundingBox: {\n xMin: font.tables.head.xMin,\n xMax: font.tables.head.xMax,\n yMin: font.tables.head.yMin,\n yMax: font.tables.head.yMax\n },\n resolution: 1e3,\n original_font_information: font.tables.name\n };\n }\n function reverseCommands(commands) {\n const paths = [];\n let path;\n commands.forEach(function(c) {\n if (c.type.toLowerCase() === \"m\") {\n path = [c];\n paths.push(path);\n } else if (c.type.toLowerCase() !== \"z\") {\n path.push(c);\n }\n });\n const reversed = [];\n paths.forEach(function(p) {\n const result = {\n type: \"m\",\n x: p[p.length - 1].x,\n y: p[p.length - 1].y\n };\n reversed.push(result);\n for (let i = p.length - 1; i > 0; i--) {\n const command = p[i];\n const result2 = { type: command.type };\n if (command.x2 !== void 0 && command.y2 !== void 0) {\n result2.x1 = command.x2;\n result2.y1 = command.y2;\n result2.x2 = command.x1;\n result2.y2 = command.y1;\n } else if (command.x1 !== void 0 && command.y1 !== void 0) {\n result2.x1 = command.x1;\n result2.y1 = command.y1;\n }\n result2.x = p[i - 1].x;\n result2.y = p[i - 1].y;\n reversed.push(result2);\n }\n });\n return reversed;\n }\n return convert(parseBuffer(arraybuffer), this.reversed);\n }\n}\nexport {\n TTFLoader\n};\n//# sourceMappingURL=TTFLoader.js.map\n","import { DataTextureLoader, HalfFloatType, FloatType, DataUtils, LinearFilter } from \"three\";\nclass RGBELoader extends DataTextureLoader {\n constructor(manager) {\n super(manager);\n this.type = HalfFloatType;\n }\n // adapted from http://www.graphics.cornell.edu/~bjw/rgbe.html\n parse(buffer) {\n const rgbe_read_error = 1, rgbe_write_error = 2, rgbe_format_error = 3, rgbe_memory_error = 4, rgbe_error = function(rgbe_error_code, msg) {\n switch (rgbe_error_code) {\n case rgbe_read_error:\n throw new Error(\"THREE.RGBELoader: Read Error: \" + (msg || \"\"));\n case rgbe_write_error:\n throw new Error(\"THREE.RGBELoader: Write Error: \" + (msg || \"\"));\n case rgbe_format_error:\n throw new Error(\"THREE.RGBELoader: Bad File Format: \" + (msg || \"\"));\n default:\n case rgbe_memory_error:\n throw new Error(\"THREE.RGBELoader: Memory Error: \" + (msg || \"\"));\n }\n }, RGBE_VALID_PROGRAMTYPE = 1, RGBE_VALID_FORMAT = 2, RGBE_VALID_DIMENSIONS = 4, NEWLINE = \"\\n\", fgets = function(buffer2, lineLimit, consume) {\n const chunkSize = 128;\n lineLimit = !lineLimit ? 1024 : lineLimit;\n let p = buffer2.pos, i = -1, len = 0, s = \"\", chunk = String.fromCharCode.apply(null, new Uint16Array(buffer2.subarray(p, p + chunkSize)));\n while (0 > (i = chunk.indexOf(NEWLINE)) && len < lineLimit && p < buffer2.byteLength) {\n s += chunk;\n len += chunk.length;\n p += chunkSize;\n chunk += String.fromCharCode.apply(null, new Uint16Array(buffer2.subarray(p, p + chunkSize)));\n }\n if (-1 < i) {\n if (false !== consume)\n buffer2.pos += len + i + 1;\n return s + chunk.slice(0, i);\n }\n return false;\n }, RGBE_ReadHeader = function(buffer2) {\n const magic_token_re = /^#\\?(\\S+)/, gamma_re = /^\\s*GAMMA\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/, exposure_re = /^\\s*EXPOSURE\\s*=\\s*(\\d+(\\.\\d+)?)\\s*$/, format_re = /^\\s*FORMAT=(\\S+)\\s*$/, dimensions_re = /^\\s*\\-Y\\s+(\\d+)\\s+\\+X\\s+(\\d+)\\s*$/, header = {\n valid: 0,\n string: \"\",\n comments: \"\",\n programtype: \"RGBE\",\n format: \"\",\n gamma: 1,\n exposure: 1,\n width: 0,\n height: 0\n };\n let line, match;\n if (buffer2.pos >= buffer2.byteLength || !(line = fgets(buffer2))) {\n rgbe_error(rgbe_read_error, \"no header found\");\n }\n if (!(match = line.match(magic_token_re))) {\n rgbe_error(rgbe_format_error, \"bad initial token\");\n }\n header.valid |= RGBE_VALID_PROGRAMTYPE;\n header.programtype = match[1];\n header.string += line + \"\\n\";\n while (true) {\n line = fgets(buffer2);\n if (false === line)\n break;\n header.string += line + \"\\n\";\n if (\"#\" === line.charAt(0)) {\n header.comments += line + \"\\n\";\n continue;\n }\n if (match = line.match(gamma_re)) {\n header.gamma = parseFloat(match[1]);\n }\n if (match = line.match(exposure_re)) {\n header.exposure = parseFloat(match[1]);\n }\n if (match = line.match(format_re)) {\n header.valid |= RGBE_VALID_FORMAT;\n header.format = match[1];\n }\n if (match = line.match(dimensions_re)) {\n header.valid |= RGBE_VALID_DIMENSIONS;\n header.height = parseInt(match[1], 10);\n header.width = parseInt(match[2], 10);\n }\n if (header.valid & RGBE_VALID_FORMAT && header.valid & RGBE_VALID_DIMENSIONS)\n break;\n }\n if (!(header.valid & RGBE_VALID_FORMAT)) {\n rgbe_error(rgbe_format_error, \"missing format specifier\");\n }\n if (!(header.valid & RGBE_VALID_DIMENSIONS)) {\n rgbe_error(rgbe_format_error, \"missing image size specifier\");\n }\n return header;\n }, RGBE_ReadPixels_RLE = function(buffer2, w2, h2) {\n const scanline_width = w2;\n if (\n // run length encoding is not allowed so read flat\n scanline_width < 8 || scanline_width > 32767 || // this file is not run length encoded\n 2 !== buffer2[0] || 2 !== buffer2[1] || buffer2[2] & 128\n ) {\n return new Uint8Array(buffer2);\n }\n if (scanline_width !== (buffer2[2] << 8 | buffer2[3])) {\n rgbe_error(rgbe_format_error, \"wrong scanline width\");\n }\n const data_rgba = new Uint8Array(4 * w2 * h2);\n if (!data_rgba.length) {\n rgbe_error(rgbe_memory_error, \"unable to allocate buffer space\");\n }\n let offset = 0, pos = 0;\n const ptr_end = 4 * scanline_width;\n const rgbeStart = new Uint8Array(4);\n const scanline_buffer = new Uint8Array(ptr_end);\n let num_scanlines = h2;\n while (num_scanlines > 0 && pos < buffer2.byteLength) {\n if (pos + 4 > buffer2.byteLength) {\n rgbe_error(rgbe_read_error);\n }\n rgbeStart[0] = buffer2[pos++];\n rgbeStart[1] = buffer2[pos++];\n rgbeStart[2] = buffer2[pos++];\n rgbeStart[3] = buffer2[pos++];\n if (2 != rgbeStart[0] || 2 != rgbeStart[1] || (rgbeStart[2] << 8 | rgbeStart[3]) != scanline_width) {\n rgbe_error(rgbe_format_error, \"bad rgbe scanline format\");\n }\n let ptr = 0, count;\n while (ptr < ptr_end && pos < buffer2.byteLength) {\n count = buffer2[pos++];\n const isEncodedRun = count > 128;\n if (isEncodedRun)\n count -= 128;\n if (0 === count || ptr + count > ptr_end) {\n rgbe_error(rgbe_format_error, \"bad scanline data\");\n }\n if (isEncodedRun) {\n const byteValue = buffer2[pos++];\n for (let i = 0; i < count; i++) {\n scanline_buffer[ptr++] = byteValue;\n }\n } else {\n scanline_buffer.set(buffer2.subarray(pos, pos + count), ptr);\n ptr += count;\n pos += count;\n }\n }\n const l = scanline_width;\n for (let i = 0; i < l; i++) {\n let off = 0;\n data_rgba[offset] = scanline_buffer[i + off];\n off += scanline_width;\n data_rgba[offset + 1] = scanline_buffer[i + off];\n off += scanline_width;\n data_rgba[offset + 2] = scanline_buffer[i + off];\n off += scanline_width;\n data_rgba[offset + 3] = scanline_buffer[i + off];\n offset += 4;\n }\n num_scanlines--;\n }\n return data_rgba;\n };\n const RGBEByteToRGBFloat = function(sourceArray, sourceOffset, destArray, destOffset) {\n const e = sourceArray[sourceOffset + 3];\n const scale = Math.pow(2, e - 128) / 255;\n destArray[destOffset + 0] = sourceArray[sourceOffset + 0] * scale;\n destArray[destOffset + 1] = sourceArray[sourceOffset + 1] * scale;\n destArray[destOffset + 2] = sourceArray[sourceOffset + 2] * scale;\n destArray[destOffset + 3] = 1;\n };\n const RGBEByteToRGBHalf = function(sourceArray, sourceOffset, destArray, destOffset) {\n const e = sourceArray[sourceOffset + 3];\n const scale = Math.pow(2, e - 128) / 255;\n destArray[destOffset + 0] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 0] * scale, 65504));\n destArray[destOffset + 1] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 1] * scale, 65504));\n destArray[destOffset + 2] = DataUtils.toHalfFloat(Math.min(sourceArray[sourceOffset + 2] * scale, 65504));\n destArray[destOffset + 3] = DataUtils.toHalfFloat(1);\n };\n const byteArray = new Uint8Array(buffer);\n byteArray.pos = 0;\n const rgbe_header_info = RGBE_ReadHeader(byteArray);\n const w = rgbe_header_info.width, h = rgbe_header_info.height, image_rgba_data = RGBE_ReadPixels_RLE(byteArray.subarray(byteArray.pos), w, h);\n let data, type;\n let numElements;\n switch (this.type) {\n case FloatType:\n numElements = image_rgba_data.length / 4;\n const floatArray = new Float32Array(numElements * 4);\n for (let j = 0; j < numElements; j++) {\n RGBEByteToRGBFloat(image_rgba_data, j * 4, floatArray, j * 4);\n }\n data = floatArray;\n type = FloatType;\n break;\n case HalfFloatType:\n numElements = image_rgba_data.length / 4;\n const halfArray = new Uint16Array(numElements * 4);\n for (let j = 0; j < numElements; j++) {\n RGBEByteToRGBHalf(image_rgba_data, j * 4, halfArray, j * 4);\n }\n data = halfArray;\n type = HalfFloatType;\n break;\n default:\n throw new Error(\"THREE.RGBELoader: Unsupported type: \" + this.type);\n }\n return {\n width: w,\n height: h,\n data,\n header: rgbe_header_info.string,\n gamma: rgbe_header_info.gamma,\n exposure: rgbe_header_info.exposure,\n type\n };\n }\n setDataType(value) {\n this.type = value;\n return this;\n }\n load(url, onLoad, onProgress, onError) {\n function onLoadCallback(texture, texData) {\n switch (texture.type) {\n case FloatType:\n case HalfFloatType:\n if (\"colorSpace\" in texture)\n texture.colorSpace = \"srgb-linear\";\n else\n texture.encoding = 3e3;\n texture.minFilter = LinearFilter;\n texture.magFilter = LinearFilter;\n texture.generateMipmaps = false;\n texture.flipY = true;\n break;\n }\n if (onLoad)\n onLoad(texture, texData);\n }\n return super.load(url, onLoadCallback, onProgress, onError);\n }\n}\nexport {\n RGBELoader\n};\n//# sourceMappingURL=RGBELoader.js.map\n","import { Loader, LoaderUtils, FileLoader, TextureLoader, Vector3, Quaternion, Matrix4, Skeleton, BufferGeometry, MeshLambertMaterial, BufferAttribute, Mesh, SkinnedMesh, Object3D, MeshPhongMaterial, Bone, Color } from \"three\";\nclass AssimpLoader extends Loader {\n load(url, onLoad, onProgress, onError) {\n var scope = this;\n var path = scope.path === \"\" ? LoaderUtils.extractUrlBase(url) : scope.path;\n var loader = new FileLoader(scope.manager);\n loader.setPath(scope.path);\n loader.setResponseType(\"arraybuffer\");\n loader.setRequestHeader(scope.requestHeader);\n loader.setWithCredentials(scope.withCredentials);\n loader.load(\n url,\n function(buffer) {\n try {\n onLoad(scope.parse(buffer, path));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(buffer, path) {\n var textureLoader = new TextureLoader(this.manager);\n textureLoader.setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin);\n var Virtulous = {};\n Virtulous.KeyFrame = class {\n constructor(time, matrix) {\n this.time = time;\n this.matrix = matrix.clone();\n this.position = new Vector3();\n this.quaternion = new Quaternion();\n this.scale = new Vector3(1, 1, 1);\n this.matrix.decompose(this.position, this.quaternion, this.scale);\n this.clone = function() {\n var n = new Virtulous.KeyFrame(this.time, this.matrix);\n return n;\n };\n this.lerp = function(nextKey, time2) {\n time2 -= this.time;\n var dist = nextKey.time - this.time;\n var l = time2 / dist;\n var l2 = 1 - l;\n var keypos = this.position;\n var keyrot = this.quaternion;\n var key2pos = nextKey.position;\n var key2rot = nextKey.quaternion;\n Virtulous.KeyFrame.tempAniPos.x = keypos.x * l2 + key2pos.x * l;\n Virtulous.KeyFrame.tempAniPos.y = keypos.y * l2 + key2pos.y * l;\n Virtulous.KeyFrame.tempAniPos.z = keypos.z * l2 + key2pos.z * l;\n Virtulous.KeyFrame.tempAniQuat.set(keyrot.x, keyrot.y, keyrot.z, keyrot.w);\n Virtulous.KeyFrame.tempAniQuat.slerp(key2rot, l);\n return Virtulous.KeyFrame.tempAniMatrix.compose(\n Virtulous.KeyFrame.tempAniPos,\n Virtulous.KeyFrame.tempAniQuat,\n Virtulous.KeyFrame.tempAniScale\n );\n };\n }\n };\n Virtulous.KeyFrame.tempAniPos = new Vector3();\n Virtulous.KeyFrame.tempAniQuat = new Quaternion();\n Virtulous.KeyFrame.tempAniScale = new Vector3(1, 1, 1);\n Virtulous.KeyFrame.tempAniMatrix = new Matrix4();\n Virtulous.KeyFrameTrack = function() {\n this.keys = [];\n this.target = null;\n this.time = 0;\n this.length = 0;\n this._accelTable = {};\n this.fps = 20;\n this.addKey = function(key) {\n this.keys.push(key);\n };\n this.init = function() {\n this.sortKeys();\n if (this.keys.length > 0)\n this.length = this.keys[this.keys.length - 1].time;\n else\n this.length = 0;\n if (!this.fps)\n return;\n for (let j = 0; j < this.length * this.fps; j++) {\n for (let i = 0; i < this.keys.length; i++) {\n if (this.keys[i].time == j) {\n this._accelTable[j] = i;\n break;\n } else if (this.keys[i].time < j / this.fps && this.keys[i + 1] && this.keys[i + 1].time >= j / this.fps) {\n this._accelTable[j] = i;\n break;\n }\n }\n }\n };\n this.parseFromThree = function(data) {\n var fps = data.fps;\n this.target = data.node;\n var track = data.hierarchy[0].keys;\n for (let i = 0; i < track.length; i++) {\n this.addKey(new Virtulous.KeyFrame(i / fps || track[i].time, track[i].targets[0].data));\n }\n this.init();\n };\n this.parseFromCollada = function(data) {\n var track = data.keys;\n var fps = this.fps;\n for (let i = 0; i < track.length; i++) {\n this.addKey(new Virtulous.KeyFrame(i / fps || track[i].time, track[i].matrix));\n }\n this.init();\n };\n this.sortKeys = function() {\n this.keys.sort(this.keySortFunc);\n };\n this.keySortFunc = function(a, b) {\n return a.time - b.time;\n };\n this.clone = function() {\n var t = new Virtulous.KeyFrameTrack();\n t.target = this.target;\n t.time = this.time;\n t.length = this.length;\n for (let i = 0; i < this.keys.length; i++) {\n t.addKey(this.keys[i].clone());\n }\n t.init();\n return t;\n };\n this.reTarget = function(root, compareitor) {\n if (!compareitor)\n compareitor = Virtulous.TrackTargetNodeNameCompare;\n this.target = compareitor(root, this.target);\n };\n this.keySearchAccel = function(time) {\n time *= this.fps;\n time = Math.floor(time);\n return this._accelTable[time] || 0;\n };\n this.setTime = function(time) {\n time = Math.abs(time);\n if (this.length)\n time = time % this.length + 0.05;\n var key0 = null;\n var key1 = null;\n for (let i = this.keySearchAccel(time); i < this.keys.length; i++) {\n if (this.keys[i].time == time) {\n key0 = this.keys[i];\n key1 = this.keys[i];\n break;\n } else if (this.keys[i].time < time && this.keys[i + 1] && this.keys[i + 1].time > time) {\n key0 = this.keys[i];\n key1 = this.keys[i + 1];\n break;\n } else if (this.keys[i].time < time && i == this.keys.length - 1) {\n key0 = this.keys[i];\n key1 = this.keys[0].clone();\n key1.time += this.length + 0.05;\n break;\n }\n }\n if (key0 && key1 && key0 !== key1) {\n this.target.matrixAutoUpdate = false;\n this.target.matrix.copy(key0.lerp(key1, time));\n this.target.matrixWorldNeedsUpdate = true;\n return;\n }\n if (key0 && key1 && key0 == key1) {\n this.target.matrixAutoUpdate = false;\n this.target.matrix.copy(key0.matrix);\n this.target.matrixWorldNeedsUpdate = true;\n return;\n }\n };\n };\n Virtulous.TrackTargetNodeNameCompare = function(root, target) {\n function find(node, name) {\n if (node.name == name)\n return node;\n for (let i = 0; i < node.children.length; i++) {\n var r = find(node.children[i], name);\n if (r)\n return r;\n }\n return null;\n }\n return find(root, target.name);\n };\n Virtulous.Animation = function() {\n this.tracks = [];\n this.length = 0;\n this.addTrack = function(track) {\n this.tracks.push(track);\n this.length = Math.max(track.length, this.length);\n };\n this.setTime = function(time) {\n this.time = time;\n for (let i = 0; i < this.tracks.length; i++)\n this.tracks[i].setTime(time);\n };\n this.clone = function(target, compareitor) {\n if (!compareitor)\n compareitor = Virtulous.TrackTargetNodeNameCompare;\n var n = new Virtulous.Animation();\n n.target = target;\n for (let i = 0; i < this.tracks.length; i++) {\n var track = this.tracks[i].clone();\n track.reTarget(target, compareitor);\n n.addTrack(track);\n }\n return n;\n };\n };\n var ASSBIN_CHUNK_AICAMERA = 4660;\n var ASSBIN_CHUNK_AILIGHT = 4661;\n var ASSBIN_CHUNK_AITEXTURE = 4662;\n var ASSBIN_CHUNK_AIMESH = 4663;\n var ASSBIN_CHUNK_AINODEANIM = 4664;\n var ASSBIN_CHUNK_AISCENE = 4665;\n var ASSBIN_CHUNK_AIBONE = 4666;\n var ASSBIN_CHUNK_AIANIMATION = 4667;\n var ASSBIN_CHUNK_AINODE = 4668;\n var ASSBIN_CHUNK_AIMATERIAL = 4669;\n var ASSBIN_CHUNK_AIMATERIALPROPERTY = 4670;\n var ASSBIN_MESH_HAS_POSITIONS = 1;\n var ASSBIN_MESH_HAS_NORMALS = 2;\n var ASSBIN_MESH_HAS_TANGENTS_AND_BITANGENTS = 4;\n var ASSBIN_MESH_HAS_TEXCOORD_BASE = 256;\n var ASSBIN_MESH_HAS_COLOR_BASE = 65536;\n var AI_MAX_NUMBER_OF_COLOR_SETS = 1;\n var AI_MAX_NUMBER_OF_TEXTURECOORDS = 4;\n //! A directional light source has a well-defined direction\n //! but is infinitely far away. That's quite a good\n //! approximation for sun light.\n var aiLightSource_DIRECTIONAL = 1;\n //! A point light source has a well-defined position\n //! in space but no direction - it emits light in all\n //! directions. A normal bulb is a point light.\n //! A spot light source emits light in a specific\n //! angle. It has a position and a direction it is pointing to.\n //! A good example for a spot light is a light spot in\n //! sport arenas.\n var aiLightSource_SPOT = 3;\n //! The generic light level of the world, including the bounces\n //! of all other lightsources.\n //! Typically, there's at most one ambient light in a scene.\n //! This light type doesn't have a valid position, direction, or\n //! other properties, just a color.\n var aiTextureType_DIFFUSE = 1;\n var aiTextureType_NORMALS = 6;\n var aiTextureType_OPACITY = 8;\n var aiTextureType_LIGHTMAP = 10;\n var BONESPERVERT = 4;\n function ASSBIN_MESH_HAS_TEXCOORD(n) {\n return ASSBIN_MESH_HAS_TEXCOORD_BASE << n;\n }\n function ASSBIN_MESH_HAS_COLOR(n) {\n return ASSBIN_MESH_HAS_COLOR_BASE << n;\n }\n function markBones(scene) {\n for (let i in scene.mMeshes) {\n var mesh = scene.mMeshes[i];\n for (let k in mesh.mBones) {\n var boneNode = scene.findNode(mesh.mBones[k].mName);\n if (boneNode)\n boneNode.isBone = true;\n }\n }\n }\n function cloneTreeToBones(root, scene) {\n var rootBone = new Bone();\n rootBone.matrix.copy(root.matrix);\n rootBone.matrixWorld.copy(root.matrixWorld);\n rootBone.position.copy(root.position);\n rootBone.quaternion.copy(root.quaternion);\n rootBone.scale.copy(root.scale);\n scene.nodeCount++;\n rootBone.name = \"bone_\" + root.name + scene.nodeCount.toString();\n if (!scene.nodeToBoneMap[root.name])\n scene.nodeToBoneMap[root.name] = [];\n scene.nodeToBoneMap[root.name].push(rootBone);\n for (let i in root.children) {\n var child = cloneTreeToBones(root.children[i], scene);\n rootBone.add(child);\n }\n return rootBone;\n }\n function sortWeights(indexes, weights) {\n var pairs = [];\n for (let i = 0; i < indexes.length; i++) {\n pairs.push({\n i: indexes[i],\n w: weights[i]\n });\n }\n pairs.sort(function(a, b) {\n return b.w - a.w;\n });\n while (pairs.length < 4) {\n pairs.push({\n i: 0,\n w: 0\n });\n }\n if (pairs.length > 4)\n pairs.length = 4;\n var sum = 0;\n for (let i = 0; i < 4; i++) {\n sum += pairs[i].w * pairs[i].w;\n }\n sum = Math.sqrt(sum);\n for (let i = 0; i < 4; i++) {\n pairs[i].w = pairs[i].w / sum;\n indexes[i] = pairs[i].i;\n weights[i] = pairs[i].w;\n }\n }\n function findMatchingBone(root, name) {\n if (root.name.indexOf(\"bone_\" + name) == 0)\n return root;\n for (let i in root.children) {\n var ret = findMatchingBone(root.children[i], name);\n if (ret)\n return ret;\n }\n return void 0;\n }\n class aiMesh {\n constructor() {\n this.mPrimitiveTypes = 0;\n this.mNumVertices = 0;\n this.mNumFaces = 0;\n this.mNumBones = 0;\n this.mMaterialIndex = 0;\n this.mVertices = [];\n this.mNormals = [];\n this.mTangents = [];\n this.mBitangents = [];\n this.mColors = [[]];\n this.mTextureCoords = [[]];\n this.mFaces = [];\n this.mBones = [];\n this.hookupSkeletons = function(scene) {\n if (this.mBones.length == 0)\n return;\n var allBones = [];\n var offsetMatrix = [];\n var skeletonRoot = scene.findNode(this.mBones[0].mName);\n while (skeletonRoot.mParent && skeletonRoot.mParent.isBone) {\n skeletonRoot = skeletonRoot.mParent;\n }\n var threeSkeletonRoot = skeletonRoot.toTHREE(scene);\n var threeSkeletonRootBone = cloneTreeToBones(threeSkeletonRoot, scene);\n this.threeNode.add(threeSkeletonRootBone);\n for (let i = 0; i < this.mBones.length; i++) {\n var bone = findMatchingBone(threeSkeletonRootBone, this.mBones[i].mName);\n if (bone) {\n var tbone = bone;\n allBones.push(tbone);\n offsetMatrix.push(this.mBones[i].mOffsetMatrix.toTHREE());\n } else {\n var skeletonRoot = scene.findNode(this.mBones[i].mName);\n if (!skeletonRoot)\n return;\n var threeSkeletonRoot = skeletonRoot.toTHREE(scene);\n var threeSkeletonRootBone = cloneTreeToBones(threeSkeletonRoot, scene);\n this.threeNode.add(threeSkeletonRootBone);\n var bone = findMatchingBone(threeSkeletonRootBone, this.mBones[i].mName);\n var tbone = bone;\n allBones.push(tbone);\n offsetMatrix.push(this.mBones[i].mOffsetMatrix.toTHREE());\n }\n }\n var skeleton = new Skeleton(allBones, offsetMatrix);\n this.threeNode.bind(skeleton, new Matrix4());\n this.threeNode.material.skinning = true;\n };\n this.toTHREE = function(scene) {\n if (this.threeNode)\n return this.threeNode;\n var geometry = new BufferGeometry();\n var mat;\n if (scene.mMaterials[this.mMaterialIndex])\n mat = scene.mMaterials[this.mMaterialIndex].toTHREE(scene);\n else\n mat = new MeshLambertMaterial();\n geometry.setIndex(new BufferAttribute(new Uint32Array(this.mIndexArray), 1));\n geometry.setAttribute(\"position\", new BufferAttribute(this.mVertexBuffer, 3));\n if (this.mNormalBuffer && this.mNormalBuffer.length > 0) {\n geometry.setAttribute(\"normal\", new BufferAttribute(this.mNormalBuffer, 3));\n }\n if (this.mColorBuffer && this.mColorBuffer.length > 0) {\n geometry.setAttribute(\"color\", new BufferAttribute(this.mColorBuffer, 4));\n }\n if (this.mTexCoordsBuffers[0] && this.mTexCoordsBuffers[0].length > 0) {\n geometry.setAttribute(\"uv\", new BufferAttribute(new Float32Array(this.mTexCoordsBuffers[0]), 2));\n }\n if (this.mTexCoordsBuffers[1] && this.mTexCoordsBuffers[1].length > 0) {\n geometry.setAttribute(\"uv1\", new BufferAttribute(new Float32Array(this.mTexCoordsBuffers[1]), 2));\n }\n if (this.mTangentBuffer && this.mTangentBuffer.length > 0) {\n geometry.setAttribute(\"tangents\", new BufferAttribute(this.mTangentBuffer, 3));\n }\n if (this.mBitangentBuffer && this.mBitangentBuffer.length > 0) {\n geometry.setAttribute(\"bitangents\", new BufferAttribute(this.mBitangentBuffer, 3));\n }\n if (this.mBones.length > 0) {\n var weights = [];\n var bones = [];\n for (let i = 0; i < this.mBones.length; i++) {\n for (let j = 0; j < this.mBones[i].mWeights.length; j++) {\n var weight = this.mBones[i].mWeights[j];\n if (weight) {\n if (!weights[weight.mVertexId])\n weights[weight.mVertexId] = [];\n if (!bones[weight.mVertexId])\n bones[weight.mVertexId] = [];\n weights[weight.mVertexId].push(weight.mWeight);\n bones[weight.mVertexId].push(parseInt(i));\n }\n }\n }\n for (let i in bones) {\n sortWeights(bones[i], weights[i]);\n }\n var _weights = [];\n var _bones = [];\n for (let i = 0; i < weights.length; i++) {\n for (let j = 0; j < 4; j++) {\n if (weights[i] && bones[i]) {\n _weights.push(weights[i][j]);\n _bones.push(bones[i][j]);\n } else {\n _weights.push(0);\n _bones.push(0);\n }\n }\n }\n geometry.setAttribute(\"skinWeight\", new BufferAttribute(new Float32Array(_weights), BONESPERVERT));\n geometry.setAttribute(\"skinIndex\", new BufferAttribute(new Float32Array(_bones), BONESPERVERT));\n }\n var mesh;\n if (this.mBones.length == 0)\n mesh = new Mesh(geometry, mat);\n if (this.mBones.length > 0) {\n mesh = new SkinnedMesh(geometry, mat);\n mesh.normalizeSkinWeights();\n }\n this.threeNode = mesh;\n return mesh;\n };\n }\n }\n class aiFace {\n constructor() {\n this.mNumIndices = 0;\n this.mIndices = [];\n }\n }\n class aiVector3D {\n constructor() {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n this.toTHREE = function() {\n return new Vector3(this.x, this.y, this.z);\n };\n }\n }\n class aiColor3D {\n constructor() {\n this.r = 0;\n this.g = 0;\n this.b = 0;\n this.a = 0;\n this.toTHREE = function() {\n return new Color(this.r, this.g, this.b);\n };\n }\n }\n class aiQuaternion {\n constructor() {\n this.x = 0;\n this.y = 0;\n this.z = 0;\n this.w = 0;\n this.toTHREE = function() {\n return new Quaternion(this.x, this.y, this.z, this.w);\n };\n }\n }\n class aiVertexWeight {\n constructor() {\n this.mVertexId = 0;\n this.mWeight = 0;\n }\n }\n class aiString {\n constructor() {\n this.data = [];\n this.toString = function() {\n var str = \"\";\n this.data.forEach(function(i) {\n str += String.fromCharCode(i);\n });\n return str.replace(/[^\\x20-\\x7E]+/g, \"\");\n };\n }\n }\n class aiVectorKey {\n constructor() {\n this.mTime = 0;\n this.mValue = null;\n }\n }\n class aiQuatKey {\n constructor() {\n this.mTime = 0;\n this.mValue = null;\n }\n }\n class aiNode {\n constructor() {\n this.mName = \"\";\n this.mTransformation = [];\n this.mNumChildren = 0;\n this.mNumMeshes = 0;\n this.mMeshes = [];\n this.mChildren = [];\n this.toTHREE = function(scene) {\n if (this.threeNode)\n return this.threeNode;\n var o = new Object3D();\n o.name = this.mName;\n o.matrix = this.mTransformation.toTHREE();\n for (let i = 0; i < this.mChildren.length; i++) {\n o.add(this.mChildren[i].toTHREE(scene));\n }\n for (let i = 0; i < this.mMeshes.length; i++) {\n o.add(scene.mMeshes[this.mMeshes[i]].toTHREE(scene));\n }\n this.threeNode = o;\n o.matrix.decompose(o.position, o.quaternion, o.scale);\n return o;\n };\n }\n }\n class aiBone {\n constructor() {\n this.mName = \"\";\n this.mNumWeights = 0;\n this.mOffsetMatrix = 0;\n }\n }\n class aiMaterialProperty {\n constructor() {\n this.mKey = \"\";\n this.mSemantic = 0;\n this.mIndex = 0;\n this.mData = [];\n this.mDataLength = 0;\n this.mType = 0;\n this.dataAsColor = function() {\n var array = new Uint8Array(this.mData).buffer;\n var reader = new DataView(array);\n var r = reader.getFloat32(0, true);\n var g = reader.getFloat32(4, true);\n var b = reader.getFloat32(8, true);\n return new Color(r, g, b);\n };\n this.dataAsFloat = function() {\n var array = new Uint8Array(this.mData).buffer;\n var reader = new DataView(array);\n var r = reader.getFloat32(0, true);\n return r;\n };\n this.dataAsBool = function() {\n var array = new Uint8Array(this.mData).buffer;\n var reader = new DataView(array);\n var r = reader.getFloat32(0, true);\n return !!r;\n };\n this.dataAsString = function() {\n var s = new aiString();\n s.data = this.mData;\n return s.toString();\n };\n this.dataAsMap = function() {\n var s = new aiString();\n s.data = this.mData;\n var path2 = s.toString();\n path2 = path2.replace(/\\\\/g, \"/\");\n if (path2.indexOf(\"/\") != -1) {\n path2 = path2.substr(path2.lastIndexOf(\"/\") + 1);\n }\n return textureLoader.load(path2);\n };\n }\n }\n var namePropMapping = {\n \"?mat.name\": \"name\",\n \"$mat.shadingm\": \"shading\",\n \"$mat.twosided\": \"twoSided\",\n \"$mat.wireframe\": \"wireframe\",\n \"$clr.ambient\": \"ambient\",\n \"$clr.diffuse\": \"color\",\n \"$clr.specular\": \"specular\",\n \"$clr.emissive\": \"emissive\",\n \"$clr.transparent\": \"transparent\",\n \"$clr.reflective\": \"reflect\",\n \"$mat.shininess\": \"shininess\",\n \"$mat.reflectivity\": \"reflectivity\",\n \"$mat.refracti\": \"refraction\",\n \"$tex.file\": \"map\"\n };\n var nameTypeMapping = {\n \"?mat.name\": \"string\",\n \"$mat.shadingm\": \"bool\",\n \"$mat.twosided\": \"bool\",\n \"$mat.wireframe\": \"bool\",\n \"$clr.ambient\": \"color\",\n \"$clr.diffuse\": \"color\",\n \"$clr.specular\": \"color\",\n \"$clr.emissive\": \"color\",\n \"$clr.transparent\": \"color\",\n \"$clr.reflective\": \"color\",\n \"$mat.shininess\": \"float\",\n \"$mat.reflectivity\": \"float\",\n \"$mat.refracti\": \"float\",\n \"$tex.file\": \"map\"\n };\n class aiMaterial {\n constructor() {\n this.mNumAllocated = 0;\n this.mNumProperties = 0;\n this.mProperties = [];\n this.toTHREE = function() {\n var mat = new MeshPhongMaterial();\n for (let i = 0; i < this.mProperties.length; i++) {\n if (nameTypeMapping[this.mProperties[i].mKey] == \"float\") {\n mat[namePropMapping[this.mProperties[i].mKey]] = this.mProperties[i].dataAsFloat();\n }\n if (nameTypeMapping[this.mProperties[i].mKey] == \"color\") {\n mat[namePropMapping[this.mProperties[i].mKey]] = this.mProperties[i].dataAsColor();\n }\n if (nameTypeMapping[this.mProperties[i].mKey] == \"bool\") {\n mat[namePropMapping[this.mProperties[i].mKey]] = this.mProperties[i].dataAsBool();\n }\n if (nameTypeMapping[this.mProperties[i].mKey] == \"string\") {\n mat[namePropMapping[this.mProperties[i].mKey]] = this.mProperties[i].dataAsString();\n }\n if (nameTypeMapping[this.mProperties[i].mKey] == \"map\") {\n var prop = this.mProperties[i];\n if (prop.mSemantic == aiTextureType_DIFFUSE)\n mat.map = this.mProperties[i].dataAsMap();\n if (prop.mSemantic == aiTextureType_NORMALS)\n mat.normalMap = this.mProperties[i].dataAsMap();\n if (prop.mSemantic == aiTextureType_LIGHTMAP)\n mat.lightMap = this.mProperties[i].dataAsMap();\n if (prop.mSemantic == aiTextureType_OPACITY)\n mat.alphaMap = this.mProperties[i].dataAsMap();\n }\n }\n mat.ambient.r = 0.53;\n mat.ambient.g = 0.53;\n mat.ambient.b = 0.53;\n mat.color.r = 1;\n mat.color.g = 1;\n mat.color.b = 1;\n return mat;\n };\n }\n }\n function veclerp(v1, v2, l) {\n var v = new Vector3();\n var lm1 = 1 - l;\n v.x = v1.x * l + v2.x * lm1;\n v.y = v1.y * l + v2.y * lm1;\n v.z = v1.z * l + v2.z * lm1;\n return v;\n }\n function quatlerp(q1, q2, l) {\n return q1.clone().slerp(q2, 1 - l);\n }\n function sampleTrack(keys, time, lne, lerp) {\n if (keys.length == 1)\n return keys[0].mValue.toTHREE();\n var dist = Infinity;\n var key = null;\n var nextKey = null;\n for (let i = 0; i < keys.length; i++) {\n var timeDist = Math.abs(keys[i].mTime - time);\n if (timeDist < dist && keys[i].mTime <= time) {\n dist = timeDist;\n key = keys[i];\n nextKey = keys[i + 1];\n }\n }\n if (!key) {\n return null;\n } else if (nextKey) {\n var dT = nextKey.mTime - key.mTime;\n var T = key.mTime - time;\n var l = T / dT;\n return lerp(key.mValue.toTHREE(), nextKey.mValue.toTHREE(), l);\n } else {\n nextKey = keys[0].clone();\n nextKey.mTime += lne;\n var dT = nextKey.mTime - key.mTime;\n var T = key.mTime - time;\n var l = T / dT;\n return lerp(key.mValue.toTHREE(), nextKey.mValue.toTHREE(), l);\n }\n }\n class aiNodeAnim {\n constructor() {\n this.mNodeName = \"\";\n this.mNumPositionKeys = 0;\n this.mNumRotationKeys = 0;\n this.mNumScalingKeys = 0;\n this.mPositionKeys = [];\n this.mRotationKeys = [];\n this.mScalingKeys = [];\n this.mPreState = \"\";\n this.mPostState = \"\";\n this.init = function(tps) {\n if (!tps)\n tps = 1;\n function t(t2) {\n t2.mTime /= tps;\n }\n this.mPositionKeys.forEach(t);\n this.mRotationKeys.forEach(t);\n this.mScalingKeys.forEach(t);\n };\n this.sortKeys = function() {\n function comp(a, b) {\n return a.mTime - b.mTime;\n }\n this.mPositionKeys.sort(comp);\n this.mRotationKeys.sort(comp);\n this.mScalingKeys.sort(comp);\n };\n this.getLength = function() {\n return Math.max(\n Math.max.apply(\n null,\n this.mPositionKeys.map(function(a) {\n return a.mTime;\n })\n ),\n Math.max.apply(\n null,\n this.mRotationKeys.map(function(a) {\n return a.mTime;\n })\n ),\n Math.max.apply(\n null,\n this.mScalingKeys.map(function(a) {\n return a.mTime;\n })\n )\n );\n };\n this.toTHREE = function(o) {\n this.sortKeys();\n var length = this.getLength();\n var track = new Virtulous.KeyFrameTrack();\n for (let i = 0; i < length; i += 0.05) {\n var matrix = new Matrix4();\n var time = i;\n var pos = sampleTrack(this.mPositionKeys, time, length, veclerp);\n var scale = sampleTrack(this.mScalingKeys, time, length, veclerp);\n var rotation = sampleTrack(this.mRotationKeys, time, length, quatlerp);\n matrix.compose(pos, rotation, scale);\n var key = new Virtulous.KeyFrame(time, matrix);\n track.addKey(key);\n }\n track.target = o.findNode(this.mNodeName).toTHREE();\n var tracks = [track];\n if (o.nodeToBoneMap[this.mNodeName]) {\n for (let i = 0; i < o.nodeToBoneMap[this.mNodeName].length; i++) {\n var t2 = track.clone();\n t2.target = o.nodeToBoneMap[this.mNodeName][i];\n tracks.push(t2);\n }\n }\n return tracks;\n };\n }\n }\n class aiAnimation {\n constructor() {\n this.mName = \"\";\n this.mDuration = 0;\n this.mTicksPerSecond = 0;\n this.mNumChannels = 0;\n this.mChannels = [];\n this.toTHREE = function(root) {\n var animationHandle = new Virtulous.Animation();\n for (let i in this.mChannels) {\n this.mChannels[i].init(this.mTicksPerSecond);\n var tracks = this.mChannels[i].toTHREE(root);\n for (let j in tracks) {\n tracks[j].init();\n animationHandle.addTrack(tracks[j]);\n }\n }\n animationHandle.length = Math.max.apply(\n null,\n animationHandle.tracks.map(function(e) {\n return e.length;\n })\n );\n return animationHandle;\n };\n }\n }\n class aiTexture {\n constructor() {\n this.mWidth = 0;\n this.mHeight = 0;\n this.texAchFormatHint = [];\n this.pcData = [];\n }\n }\n class aiLight {\n constructor() {\n this.mName = \"\";\n this.mType = 0;\n this.mAttenuationConstant = 0;\n this.mAttenuationLinear = 0;\n this.mAttenuationQuadratic = 0;\n this.mAngleInnerCone = 0;\n this.mAngleOuterCone = 0;\n this.mColorDiffuse = null;\n this.mColorSpecular = null;\n this.mColorAmbient = null;\n }\n }\n class aiCamera {\n constructor() {\n this.mName = \"\";\n this.mPosition = null;\n this.mLookAt = null;\n this.mUp = null;\n this.mHorizontalFOV = 0;\n this.mClipPlaneNear = 0;\n this.mClipPlaneFar = 0;\n this.mAspect = 0;\n }\n }\n class aiScene {\n constructor() {\n this.versionMajor = 0;\n this.versionMinor = 0;\n this.versionRevision = 0;\n this.compileFlags = 0;\n this.mFlags = 0;\n this.mNumMeshes = 0;\n this.mNumMaterials = 0;\n this.mNumAnimations = 0;\n this.mNumTextures = 0;\n this.mNumLights = 0;\n this.mNumCameras = 0;\n this.mRootNode = null;\n this.mMeshes = [];\n this.mMaterials = [];\n this.mAnimations = [];\n this.mLights = [];\n this.mCameras = [];\n this.nodeToBoneMap = {};\n this.findNode = function(name, root) {\n if (!root) {\n root = this.mRootNode;\n }\n if (root.mName == name) {\n return root;\n }\n for (let i = 0; i < root.mChildren.length; i++) {\n var ret = this.findNode(name, root.mChildren[i]);\n if (ret)\n return ret;\n }\n return null;\n };\n this.toTHREE = function() {\n this.nodeCount = 0;\n markBones(this);\n var o = this.mRootNode.toTHREE(this);\n for (let i in this.mMeshes)\n this.mMeshes[i].hookupSkeletons(this);\n if (this.mAnimations.length > 0) {\n var a = this.mAnimations[0].toTHREE(this);\n }\n return { object: o, animation: a };\n };\n }\n }\n class aiMatrix4 {\n constructor() {\n this.elements = [[], [], [], []];\n this.toTHREE = function() {\n var m = new Matrix4();\n for (let i = 0; i < 4; ++i) {\n for (let i2 = 0; i2 < 4; ++i2) {\n m.elements[i * 4 + i2] = this.elements[i2][i];\n }\n }\n return m;\n };\n }\n }\n var littleEndian = true;\n function readFloat(dataview) {\n var val = dataview.getFloat32(dataview.readOffset, littleEndian);\n dataview.readOffset += 4;\n return val;\n }\n function Read_double(dataview) {\n var val = dataview.getFloat64(dataview.readOffset, littleEndian);\n dataview.readOffset += 8;\n return val;\n }\n function Read_uint8_t(dataview) {\n var val = dataview.getUint8(dataview.readOffset);\n dataview.readOffset += 1;\n return val;\n }\n function Read_uint16_t(dataview) {\n var val = dataview.getUint16(dataview.readOffset, littleEndian);\n dataview.readOffset += 2;\n return val;\n }\n function Read_unsigned_int(dataview) {\n var val = dataview.getUint32(dataview.readOffset, littleEndian);\n dataview.readOffset += 4;\n return val;\n }\n function Read_uint32_t(dataview) {\n var val = dataview.getUint32(dataview.readOffset, littleEndian);\n dataview.readOffset += 4;\n return val;\n }\n function Read_aiVector3D(stream) {\n var v = new aiVector3D();\n v.x = readFloat(stream);\n v.y = readFloat(stream);\n v.z = readFloat(stream);\n return v;\n }\n function Read_aiColor3D(stream) {\n var c = new aiColor3D();\n c.r = readFloat(stream);\n c.g = readFloat(stream);\n c.b = readFloat(stream);\n return c;\n }\n function Read_aiQuaternion(stream) {\n var v = new aiQuaternion();\n v.w = readFloat(stream);\n v.x = readFloat(stream);\n v.y = readFloat(stream);\n v.z = readFloat(stream);\n return v;\n }\n function Read_aiString(stream) {\n var s = new aiString();\n var stringlengthbytes = Read_unsigned_int(stream);\n stream.ReadBytes(s.data, 1, stringlengthbytes);\n return s.toString();\n }\n function Read_aiVertexWeight(stream) {\n var w = new aiVertexWeight();\n w.mVertexId = Read_unsigned_int(stream);\n w.mWeight = readFloat(stream);\n return w;\n }\n function Read_aiMatrix4x4(stream) {\n var m = new aiMatrix4();\n for (let i = 0; i < 4; ++i) {\n for (let i2 = 0; i2 < 4; ++i2) {\n m.elements[i][i2] = readFloat(stream);\n }\n }\n return m;\n }\n function Read_aiVectorKey(stream) {\n var v = new aiVectorKey();\n v.mTime = Read_double(stream);\n v.mValue = Read_aiVector3D(stream);\n return v;\n }\n function Read_aiQuatKey(stream) {\n var v = new aiQuatKey();\n v.mTime = Read_double(stream);\n v.mValue = Read_aiQuaternion(stream);\n return v;\n }\n function ReadArray_aiVertexWeight(stream, data, size) {\n for (let i = 0; i < size; i++)\n data[i] = Read_aiVertexWeight(stream);\n }\n function ReadArray_aiVectorKey(stream, data, size) {\n for (let i = 0; i < size; i++)\n data[i] = Read_aiVectorKey(stream);\n }\n function ReadArray_aiQuatKey(stream, data, size) {\n for (let i = 0; i < size; i++)\n data[i] = Read_aiQuatKey(stream);\n }\n function ReadBounds(stream, T, n) {\n return stream.Seek(sizeof(T) * n, aiOrigin_CUR);\n }\n function ai_assert(bool) {\n if (!bool)\n throw \"asset failed\";\n }\n function ReadBinaryNode(stream, parent, depth) {\n var chunkID = Read_uint32_t(stream);\n ai_assert(chunkID == ASSBIN_CHUNK_AINODE);\n Read_uint32_t(stream);\n var node = new aiNode();\n node.mParent = parent;\n node.mDepth = depth;\n node.mName = Read_aiString(stream);\n node.mTransformation = Read_aiMatrix4x4(stream);\n node.mNumChildren = Read_unsigned_int(stream);\n node.mNumMeshes = Read_unsigned_int(stream);\n if (node.mNumMeshes) {\n node.mMeshes = [];\n for (let i = 0; i < node.mNumMeshes; ++i) {\n node.mMeshes[i] = Read_unsigned_int(stream);\n }\n }\n if (node.mNumChildren) {\n node.mChildren = [];\n for (let i = 0; i < node.mNumChildren; ++i) {\n var node2 = ReadBinaryNode(stream, node, depth++);\n node.mChildren[i] = node2;\n }\n }\n return node;\n }\n function ReadBinaryBone(stream, b) {\n var chunkID = Read_uint32_t(stream);\n ai_assert(chunkID == ASSBIN_CHUNK_AIBONE);\n Read_uint32_t(stream);\n b.mName = Read_aiString(stream);\n b.mNumWeights = Read_unsigned_int(stream);\n b.mOffsetMatrix = Read_aiMatrix4x4(stream);\n if (shortened) {\n ReadBounds(stream, b.mWeights, b.mNumWeights);\n } else {\n b.mWeights = [];\n ReadArray_aiVertexWeight(stream, b.mWeights, b.mNumWeights);\n }\n return b;\n }\n function ReadBinaryMesh(stream, mesh) {\n var chunkID = Read_uint32_t(stream);\n ai_assert(chunkID == ASSBIN_CHUNK_AIMESH);\n Read_uint32_t(stream);\n mesh.mPrimitiveTypes = Read_unsigned_int(stream);\n mesh.mNumVertices = Read_unsigned_int(stream);\n mesh.mNumFaces = Read_unsigned_int(stream);\n mesh.mNumBones = Read_unsigned_int(stream);\n mesh.mMaterialIndex = Read_unsigned_int(stream);\n mesh.mNumUVComponents = [];\n var c = Read_unsigned_int(stream);\n if (c & ASSBIN_MESH_HAS_POSITIONS) {\n if (shortened) {\n ReadBounds(stream, mesh.mVertices, mesh.mNumVertices);\n } else {\n mesh.mVertices = [];\n mesh.mVertexBuffer = stream.subArray32(stream.readOffset, stream.readOffset + mesh.mNumVertices * 3 * 4);\n stream.Seek(mesh.mNumVertices * 3 * 4, aiOrigin_CUR);\n }\n }\n if (c & ASSBIN_MESH_HAS_NORMALS) {\n if (shortened) {\n ReadBounds(stream, mesh.mNormals, mesh.mNumVertices);\n } else {\n mesh.mNormals = [];\n mesh.mNormalBuffer = stream.subArray32(stream.readOffset, stream.readOffset + mesh.mNumVertices * 3 * 4);\n stream.Seek(mesh.mNumVertices * 3 * 4, aiOrigin_CUR);\n }\n }\n if (c & ASSBIN_MESH_HAS_TANGENTS_AND_BITANGENTS) {\n if (shortened) {\n ReadBounds(stream, mesh.mTangents, mesh.mNumVertices);\n ReadBounds(stream, mesh.mBitangents, mesh.mNumVertices);\n } else {\n mesh.mTangents = [];\n mesh.mTangentBuffer = stream.subArray32(stream.readOffset, stream.readOffset + mesh.mNumVertices * 3 * 4);\n stream.Seek(mesh.mNumVertices * 3 * 4, aiOrigin_CUR);\n mesh.mBitangents = [];\n mesh.mBitangentBuffer = stream.subArray32(stream.readOffset, stream.readOffset + mesh.mNumVertices * 3 * 4);\n stream.Seek(mesh.mNumVertices * 3 * 4, aiOrigin_CUR);\n }\n }\n for (let n = 0; n < AI_MAX_NUMBER_OF_COLOR_SETS; ++n) {\n if (!(c & ASSBIN_MESH_HAS_COLOR(n)))\n break;\n if (shortened) {\n ReadBounds(stream, mesh.mColors[n], mesh.mNumVertices);\n } else {\n mesh.mColors[n] = [];\n mesh.mColorBuffer = stream.subArray32(stream.readOffset, stream.readOffset + mesh.mNumVertices * 4 * 4);\n stream.Seek(mesh.mNumVertices * 4 * 4, aiOrigin_CUR);\n }\n }\n mesh.mTexCoordsBuffers = [];\n for (let n = 0; n < AI_MAX_NUMBER_OF_TEXTURECOORDS; ++n) {\n if (!(c & ASSBIN_MESH_HAS_TEXCOORD(n)))\n break;\n mesh.mNumUVComponents[n] = Read_unsigned_int(stream);\n if (shortened) {\n ReadBounds(stream, mesh.mTextureCoords[n], mesh.mNumVertices);\n } else {\n mesh.mTextureCoords[n] = [];\n mesh.mTexCoordsBuffers[n] = [];\n for (let uv = 0; uv < mesh.mNumVertices; uv++) {\n mesh.mTexCoordsBuffers[n].push(readFloat(stream));\n mesh.mTexCoordsBuffers[n].push(readFloat(stream));\n readFloat(stream);\n }\n }\n }\n if (shortened) {\n Read_unsigned_int(stream);\n } else {\n mesh.mFaces = [];\n mesh.mIndexArray = [];\n for (let i = 0; i < mesh.mNumFaces; ++i) {\n var f = mesh.mFaces[i] = new aiFace();\n f.mNumIndices = Read_uint16_t(stream);\n f.mIndices = [];\n for (let a = 0; a < f.mNumIndices; ++a) {\n if (mesh.mNumVertices < 1 << 16) {\n f.mIndices[a] = Read_uint16_t(stream);\n } else {\n f.mIndices[a] = Read_unsigned_int(stream);\n }\n }\n if (f.mNumIndices === 3) {\n mesh.mIndexArray.push(f.mIndices[0]);\n mesh.mIndexArray.push(f.mIndices[1]);\n mesh.mIndexArray.push(f.mIndices[2]);\n } else if (f.mNumIndices === 4) {\n mesh.mIndexArray.push(f.mIndices[0]);\n mesh.mIndexArray.push(f.mIndices[1]);\n mesh.mIndexArray.push(f.mIndices[2]);\n mesh.mIndexArray.push(f.mIndices[2]);\n mesh.mIndexArray.push(f.mIndices[3]);\n mesh.mIndexArray.push(f.mIndices[0]);\n } else {\n throw new Error(\"Sorry, can't currently triangulate polys. Use the triangulate preprocessor in Assimp.\");\n }\n }\n }\n if (mesh.mNumBones) {\n mesh.mBones = [];\n for (let a = 0; a < mesh.mNumBones; ++a) {\n mesh.mBones[a] = new aiBone();\n ReadBinaryBone(stream, mesh.mBones[a]);\n }\n }\n }\n function ReadBinaryMaterialProperty(stream, prop) {\n var chunkID = Read_uint32_t(stream);\n ai_assert(chunkID == ASSBIN_CHUNK_AIMATERIALPROPERTY);\n Read_uint32_t(stream);\n prop.mKey = Read_aiString(stream);\n prop.mSemantic = Read_unsigned_int(stream);\n prop.mIndex = Read_unsigned_int(stream);\n prop.mDataLength = Read_unsigned_int(stream);\n prop.mType = Read_unsigned_int(stream);\n prop.mData = [];\n stream.ReadBytes(prop.mData, 1, prop.mDataLength);\n }\n function ReadBinaryMaterial(stream, mat) {\n var chunkID = Read_uint32_t(stream);\n ai_assert(chunkID == ASSBIN_CHUNK_AIMATERIAL);\n Read_uint32_t(stream);\n mat.mNumAllocated = mat.mNumProperties = Read_unsigned_int(stream);\n if (mat.mNumProperties) {\n if (mat.mProperties) {\n delete mat.mProperties;\n }\n mat.mProperties = [];\n for (let i = 0; i < mat.mNumProperties; ++i) {\n mat.mProperties[i] = new aiMaterialProperty();\n ReadBinaryMaterialProperty(stream, mat.mProperties[i]);\n }\n }\n }\n function ReadBinaryNodeAnim(stream, nd) {\n var chunkID = Read_uint32_t(stream);\n ai_assert(chunkID == ASSBIN_CHUNK_AINODEANIM);\n Read_uint32_t(stream);\n nd.mNodeName = Read_aiString(stream);\n nd.mNumPositionKeys = Read_unsigned_int(stream);\n nd.mNumRotationKeys = Read_unsigned_int(stream);\n nd.mNumScalingKeys = Read_unsigned_int(stream);\n nd.mPreState = Read_unsigned_int(stream);\n nd.mPostState = Read_unsigned_int(stream);\n if (nd.mNumPositionKeys) {\n if (shortened) {\n ReadBounds(stream, nd.mPositionKeys, nd.mNumPositionKeys);\n } else {\n nd.mPositionKeys = [];\n ReadArray_aiVectorKey(stream, nd.mPositionKeys, nd.mNumPositionKeys);\n }\n }\n if (nd.mNumRotationKeys) {\n if (shortened) {\n ReadBounds(stream, nd.mRotationKeys, nd.mNumRotationKeys);\n } else {\n nd.mRotationKeys = [];\n ReadArray_aiQuatKey(stream, nd.mRotationKeys, nd.mNumRotationKeys);\n }\n }\n if (nd.mNumScalingKeys) {\n if (shortened) {\n ReadBounds(stream, nd.mScalingKeys, nd.mNumScalingKeys);\n } else {\n nd.mScalingKeys = [];\n ReadArray_aiVectorKey(stream, nd.mScalingKeys, nd.mNumScalingKeys);\n }\n }\n }\n function ReadBinaryAnim(stream, anim) {\n var chunkID = Read_uint32_t(stream);\n ai_assert(chunkID == ASSBIN_CHUNK_AIANIMATION);\n Read_uint32_t(stream);\n anim.mName = Read_aiString(stream);\n anim.mDuration = Read_double(stream);\n anim.mTicksPerSecond = Read_double(stream);\n anim.mNumChannels = Read_unsigned_int(stream);\n if (anim.mNumChannels) {\n anim.mChannels = [];\n for (let a = 0; a < anim.mNumChannels; ++a) {\n anim.mChannels[a] = new aiNodeAnim();\n ReadBinaryNodeAnim(stream, anim.mChannels[a]);\n }\n }\n }\n function ReadBinaryTexture(stream, tex) {\n var chunkID = Read_uint32_t(stream);\n ai_assert(chunkID == ASSBIN_CHUNK_AITEXTURE);\n Read_uint32_t(stream);\n tex.mWidth = Read_unsigned_int(stream);\n tex.mHeight = Read_unsigned_int(stream);\n stream.ReadBytes(tex.achFormatHint, 1, 4);\n if (!shortened) {\n if (!tex.mHeight) {\n tex.pcData = [];\n stream.ReadBytes(tex.pcData, 1, tex.mWidth);\n } else {\n tex.pcData = [];\n stream.ReadBytes(tex.pcData, 1, tex.mWidth * tex.mHeight * 4);\n }\n }\n }\n function ReadBinaryLight(stream, l) {\n var chunkID = Read_uint32_t(stream);\n ai_assert(chunkID == ASSBIN_CHUNK_AILIGHT);\n Read_uint32_t(stream);\n l.mName = Read_aiString(stream);\n l.mType = Read_unsigned_int(stream);\n if (l.mType != aiLightSource_DIRECTIONAL) {\n l.mAttenuationConstant = readFloat(stream);\n l.mAttenuationLinear = readFloat(stream);\n l.mAttenuationQuadratic = readFloat(stream);\n }\n l.mColorDiffuse = Read_aiColor3D(stream);\n l.mColorSpecular = Read_aiColor3D(stream);\n l.mColorAmbient = Read_aiColor3D(stream);\n if (l.mType == aiLightSource_SPOT) {\n l.mAngleInnerCone = readFloat(stream);\n l.mAngleOuterCone = readFloat(stream);\n }\n }\n function ReadBinaryCamera(stream, cam) {\n var chunkID = Read_uint32_t(stream);\n ai_assert(chunkID == ASSBIN_CHUNK_AICAMERA);\n Read_uint32_t(stream);\n cam.mName = Read_aiString(stream);\n cam.mPosition = Read_aiVector3D(stream);\n cam.mLookAt = Read_aiVector3D(stream);\n cam.mUp = Read_aiVector3D(stream);\n cam.mHorizontalFOV = readFloat(stream);\n cam.mClipPlaneNear = readFloat(stream);\n cam.mClipPlaneFar = readFloat(stream);\n cam.mAspect = readFloat(stream);\n }\n function ReadBinaryScene(stream, scene) {\n var chunkID = Read_uint32_t(stream);\n ai_assert(chunkID == ASSBIN_CHUNK_AISCENE);\n Read_uint32_t(stream);\n scene.mFlags = Read_unsigned_int(stream);\n scene.mNumMeshes = Read_unsigned_int(stream);\n scene.mNumMaterials = Read_unsigned_int(stream);\n scene.mNumAnimations = Read_unsigned_int(stream);\n scene.mNumTextures = Read_unsigned_int(stream);\n scene.mNumLights = Read_unsigned_int(stream);\n scene.mNumCameras = Read_unsigned_int(stream);\n scene.mRootNode = new aiNode();\n scene.mRootNode = ReadBinaryNode(stream, null, 0);\n if (scene.mNumMeshes) {\n scene.mMeshes = [];\n for (let i = 0; i < scene.mNumMeshes; ++i) {\n scene.mMeshes[i] = new aiMesh();\n ReadBinaryMesh(stream, scene.mMeshes[i]);\n }\n }\n if (scene.mNumMaterials) {\n scene.mMaterials = [];\n for (let i = 0; i < scene.mNumMaterials; ++i) {\n scene.mMaterials[i] = new aiMaterial();\n ReadBinaryMaterial(stream, scene.mMaterials[i]);\n }\n }\n if (scene.mNumAnimations) {\n scene.mAnimations = [];\n for (let i = 0; i < scene.mNumAnimations; ++i) {\n scene.mAnimations[i] = new aiAnimation();\n ReadBinaryAnim(stream, scene.mAnimations[i]);\n }\n }\n if (scene.mNumTextures) {\n scene.mTextures = [];\n for (let i = 0; i < scene.mNumTextures; ++i) {\n scene.mTextures[i] = new aiTexture();\n ReadBinaryTexture(stream, scene.mTextures[i]);\n }\n }\n if (scene.mNumLights) {\n scene.mLights = [];\n for (let i = 0; i < scene.mNumLights; ++i) {\n scene.mLights[i] = new aiLight();\n ReadBinaryLight(stream, scene.mLights[i]);\n }\n }\n if (scene.mNumCameras) {\n scene.mCameras = [];\n for (let i = 0; i < scene.mNumCameras; ++i) {\n scene.mCameras[i] = new aiCamera();\n ReadBinaryCamera(stream, scene.mCameras[i]);\n }\n }\n }\n var aiOrigin_CUR = 0;\n var aiOrigin_BEG = 1;\n function extendStream(stream) {\n stream.readOffset = 0;\n stream.Seek = function(off, ori) {\n if (ori == aiOrigin_CUR) {\n stream.readOffset += off;\n }\n if (ori == aiOrigin_BEG) {\n stream.readOffset = off;\n }\n };\n stream.ReadBytes = function(buff, size, n) {\n var bytes = size * n;\n for (let i = 0; i < bytes; i++)\n buff[i] = Read_uint8_t(this);\n };\n stream.subArray32 = function(start, end) {\n var buff = this.buffer;\n var newbuff = buff.slice(start, end);\n return new Float32Array(newbuff);\n };\n stream.subArrayUint16 = function(start, end) {\n var buff = this.buffer;\n var newbuff = buff.slice(start, end);\n return new Uint16Array(newbuff);\n };\n stream.subArrayUint8 = function(start, end) {\n var buff = this.buffer;\n var newbuff = buff.slice(start, end);\n return new Uint8Array(newbuff);\n };\n stream.subArrayUint32 = function(start, end) {\n var buff = this.buffer;\n var newbuff = buff.slice(start, end);\n return new Uint32Array(newbuff);\n };\n }\n var shortened, compressed;\n function InternReadFile(pFiledata) {\n var pScene = new aiScene();\n var stream = new DataView(pFiledata);\n extendStream(stream);\n stream.Seek(44, aiOrigin_CUR);\n pScene.versionMajor = Read_unsigned_int(stream);\n pScene.versionMinor = Read_unsigned_int(stream);\n pScene.versionRevision = Read_unsigned_int(stream);\n pScene.compileFlags = Read_unsigned_int(stream);\n shortened = Read_uint16_t(stream) > 0;\n compressed = Read_uint16_t(stream) > 0;\n if (shortened)\n throw \"Shortened binaries are not supported!\";\n stream.Seek(256, aiOrigin_CUR);\n stream.Seek(128, aiOrigin_CUR);\n stream.Seek(64, aiOrigin_CUR);\n if (compressed) {\n var uncompressedSize = Read_uint32_t(stream);\n var compressedSize = stream.FileSize() - stream.Tell();\n var compressedData = [];\n stream.Read(compressedData, 1, compressedSize);\n var uncompressedData = [];\n uncompress(uncompressedData, uncompressedSize, compressedData, compressedSize);\n var buff = new ArrayBuffer(uncompressedData);\n ReadBinaryScene(buff, pScene);\n } else {\n ReadBinaryScene(stream, pScene);\n }\n return pScene.toTHREE();\n }\n return InternReadFile(buffer);\n }\n}\nexport {\n AssimpLoader\n};\n//# sourceMappingURL=AssimpLoader.js.map\n","import { Loader, FileLoader, NumberKeyframeTrack, AnimationClip, BufferAttribute } from \"three\";\nclass MDDLoader extends Loader {\n constructor(manager) {\n super(manager);\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setResponseType(\"arraybuffer\");\n loader.load(\n url,\n function(data) {\n onLoad(scope.parse(data));\n },\n onProgress,\n onError\n );\n }\n parse(data) {\n const view = new DataView(data);\n const totalFrames = view.getUint32(0);\n const totalPoints = view.getUint32(4);\n let offset = 8;\n const times = new Float32Array(totalFrames);\n const values = new Float32Array(totalFrames * totalFrames).fill(0);\n for (let i = 0; i < totalFrames; i++) {\n times[i] = view.getFloat32(offset);\n offset += 4;\n values[totalFrames * i + i] = 1;\n }\n const track = new NumberKeyframeTrack(\".morphTargetInfluences\", times, values);\n const clip = new AnimationClip(\"default\", times[times.length - 1], [track]);\n const morphTargets = [];\n for (let i = 0; i < totalFrames; i++) {\n const morphTarget = new Float32Array(totalPoints * 3);\n for (let j = 0; j < totalPoints; j++) {\n const stride = j * 3;\n morphTarget[stride + 0] = view.getFloat32(offset);\n offset += 4;\n morphTarget[stride + 1] = view.getFloat32(offset);\n offset += 4;\n morphTarget[stride + 2] = view.getFloat32(offset);\n offset += 4;\n }\n const attribute = new BufferAttribute(morphTarget, 3);\n attribute.name = \"morph_\" + i;\n morphTargets.push(attribute);\n }\n return {\n morphTargets,\n clip\n };\n }\n}\nexport {\n MDDLoader\n};\n//# sourceMappingURL=MDDLoader.js.map\n","import { DataTextureLoader, HalfFloatType, FloatType, RGBAFormat, RedFormat, LinearFilter, DataUtils } from \"three\";\nimport { unzlibSync } from \"fflate\";\nimport { version } from \"../_polyfill/constants.js\";\nconst hasColorSpace = version >= 152;\nclass EXRLoader extends DataTextureLoader {\n constructor(manager) {\n super(manager);\n this.type = HalfFloatType;\n }\n parse(buffer) {\n const USHORT_RANGE = 1 << 16;\n const BITMAP_SIZE = USHORT_RANGE >> 3;\n const HUF_ENCBITS = 16;\n const HUF_DECBITS = 14;\n const HUF_ENCSIZE = (1 << HUF_ENCBITS) + 1;\n const HUF_DECSIZE = 1 << HUF_DECBITS;\n const HUF_DECMASK = HUF_DECSIZE - 1;\n const NBITS = 16;\n const A_OFFSET = 1 << NBITS - 1;\n const MOD_MASK = (1 << NBITS) - 1;\n const SHORT_ZEROCODE_RUN = 59;\n const LONG_ZEROCODE_RUN = 63;\n const SHORTEST_LONG_RUN = 2 + LONG_ZEROCODE_RUN - SHORT_ZEROCODE_RUN;\n const ULONG_SIZE = 8;\n const FLOAT32_SIZE = 4;\n const INT32_SIZE = 4;\n const INT16_SIZE = 2;\n const INT8_SIZE = 1;\n const STATIC_HUFFMAN = 0;\n const DEFLATE = 1;\n const UNKNOWN = 0;\n const LOSSY_DCT = 1;\n const RLE = 2;\n const logBase = Math.pow(2.7182818, 2.2);\n function reverseLutFromBitmap(bitmap, lut) {\n var k = 0;\n for (var i = 0; i < USHORT_RANGE; ++i) {\n if (i == 0 || bitmap[i >> 3] & 1 << (i & 7)) {\n lut[k++] = i;\n }\n }\n var n = k - 1;\n while (k < USHORT_RANGE)\n lut[k++] = 0;\n return n;\n }\n function hufClearDecTable(hdec) {\n for (var i = 0; i < HUF_DECSIZE; i++) {\n hdec[i] = {};\n hdec[i].len = 0;\n hdec[i].lit = 0;\n hdec[i].p = null;\n }\n }\n const getBitsReturn = { l: 0, c: 0, lc: 0 };\n function getBits(nBits, c, lc, uInt8Array2, inOffset) {\n while (lc < nBits) {\n c = c << 8 | parseUint8Array(uInt8Array2, inOffset);\n lc += 8;\n }\n lc -= nBits;\n getBitsReturn.l = c >> lc & (1 << nBits) - 1;\n getBitsReturn.c = c;\n getBitsReturn.lc = lc;\n }\n const hufTableBuffer = new Array(59);\n function hufCanonicalCodeTable(hcode) {\n for (var i = 0; i <= 58; ++i)\n hufTableBuffer[i] = 0;\n for (var i = 0; i < HUF_ENCSIZE; ++i)\n hufTableBuffer[hcode[i]] += 1;\n var c = 0;\n for (var i = 58; i > 0; --i) {\n var nc = c + hufTableBuffer[i] >> 1;\n hufTableBuffer[i] = c;\n c = nc;\n }\n for (var i = 0; i < HUF_ENCSIZE; ++i) {\n var l = hcode[i];\n if (l > 0)\n hcode[i] = l | hufTableBuffer[l]++ << 6;\n }\n }\n function hufUnpackEncTable(uInt8Array2, inDataView, inOffset, ni, im, iM, hcode) {\n var p = inOffset;\n var c = 0;\n var lc = 0;\n for (; im <= iM; im++) {\n if (p.value - inOffset.value > ni)\n return false;\n getBits(6, c, lc, uInt8Array2, p);\n var l = getBitsReturn.l;\n c = getBitsReturn.c;\n lc = getBitsReturn.lc;\n hcode[im] = l;\n if (l == LONG_ZEROCODE_RUN) {\n if (p.value - inOffset.value > ni) {\n throw \"Something wrong with hufUnpackEncTable\";\n }\n getBits(8, c, lc, uInt8Array2, p);\n var zerun = getBitsReturn.l + SHORTEST_LONG_RUN;\n c = getBitsReturn.c;\n lc = getBitsReturn.lc;\n if (im + zerun > iM + 1) {\n throw \"Something wrong with hufUnpackEncTable\";\n }\n while (zerun--)\n hcode[im++] = 0;\n im--;\n } else if (l >= SHORT_ZEROCODE_RUN) {\n var zerun = l - SHORT_ZEROCODE_RUN + 2;\n if (im + zerun > iM + 1) {\n throw \"Something wrong with hufUnpackEncTable\";\n }\n while (zerun--)\n hcode[im++] = 0;\n im--;\n }\n }\n hufCanonicalCodeTable(hcode);\n }\n function hufLength(code) {\n return code & 63;\n }\n function hufCode(code) {\n return code >> 6;\n }\n function hufBuildDecTable(hcode, im, iM, hdecod) {\n for (; im <= iM; im++) {\n var c = hufCode(hcode[im]);\n var l = hufLength(hcode[im]);\n if (c >> l) {\n throw \"Invalid table entry\";\n }\n if (l > HUF_DECBITS) {\n var pl = hdecod[c >> l - HUF_DECBITS];\n if (pl.len) {\n throw \"Invalid table entry\";\n }\n pl.lit++;\n if (pl.p) {\n var p = pl.p;\n pl.p = new Array(pl.lit);\n for (var i = 0; i < pl.lit - 1; ++i) {\n pl.p[i] = p[i];\n }\n } else {\n pl.p = new Array(1);\n }\n pl.p[pl.lit - 1] = im;\n } else if (l) {\n var plOffset = 0;\n for (var i = 1 << HUF_DECBITS - l; i > 0; i--) {\n var pl = hdecod[(c << HUF_DECBITS - l) + plOffset];\n if (pl.len || pl.p) {\n throw \"Invalid table entry\";\n }\n pl.len = l;\n pl.lit = im;\n plOffset++;\n }\n }\n }\n return true;\n }\n const getCharReturn = { c: 0, lc: 0 };\n function getChar(c, lc, uInt8Array2, inOffset) {\n c = c << 8 | parseUint8Array(uInt8Array2, inOffset);\n lc += 8;\n getCharReturn.c = c;\n getCharReturn.lc = lc;\n }\n const getCodeReturn = { c: 0, lc: 0 };\n function getCode(po, rlc, c, lc, uInt8Array2, inDataView, inOffset, outBuffer, outBufferOffset, outBufferEndOffset) {\n if (po == rlc) {\n if (lc < 8) {\n getChar(c, lc, uInt8Array2, inOffset);\n c = getCharReturn.c;\n lc = getCharReturn.lc;\n }\n lc -= 8;\n var cs = c >> lc;\n var cs = new Uint8Array([cs])[0];\n if (outBufferOffset.value + cs > outBufferEndOffset) {\n return false;\n }\n var s = outBuffer[outBufferOffset.value - 1];\n while (cs-- > 0) {\n outBuffer[outBufferOffset.value++] = s;\n }\n } else if (outBufferOffset.value < outBufferEndOffset) {\n outBuffer[outBufferOffset.value++] = po;\n } else {\n return false;\n }\n getCodeReturn.c = c;\n getCodeReturn.lc = lc;\n }\n function UInt16(value) {\n return value & 65535;\n }\n function Int16(value) {\n var ref = UInt16(value);\n return ref > 32767 ? ref - 65536 : ref;\n }\n const wdec14Return = { a: 0, b: 0 };\n function wdec14(l, h) {\n var ls = Int16(l);\n var hs = Int16(h);\n var hi = hs;\n var ai = ls + (hi & 1) + (hi >> 1);\n var as = ai;\n var bs = ai - hi;\n wdec14Return.a = as;\n wdec14Return.b = bs;\n }\n function wdec16(l, h) {\n var m = UInt16(l);\n var d = UInt16(h);\n var bb = m - (d >> 1) & MOD_MASK;\n var aa = d + bb - A_OFFSET & MOD_MASK;\n wdec14Return.a = aa;\n wdec14Return.b = bb;\n }\n function wav2Decode(buffer2, j, nx, ox, ny, oy, mx) {\n var w14 = mx < 1 << 14;\n var n = nx > ny ? ny : nx;\n var p = 1;\n var p2;\n while (p <= n)\n p <<= 1;\n p >>= 1;\n p2 = p;\n p >>= 1;\n while (p >= 1) {\n var py = 0;\n var ey = py + oy * (ny - p2);\n var oy1 = oy * p;\n var oy2 = oy * p2;\n var ox1 = ox * p;\n var ox2 = ox * p2;\n var i00, i01, i10, i11;\n for (; py <= ey; py += oy2) {\n var px = py;\n var ex = py + ox * (nx - p2);\n for (; px <= ex; px += ox2) {\n var p01 = px + ox1;\n var p10 = px + oy1;\n var p11 = p10 + ox1;\n if (w14) {\n wdec14(buffer2[px + j], buffer2[p10 + j]);\n i00 = wdec14Return.a;\n i10 = wdec14Return.b;\n wdec14(buffer2[p01 + j], buffer2[p11 + j]);\n i01 = wdec14Return.a;\n i11 = wdec14Return.b;\n wdec14(i00, i01);\n buffer2[px + j] = wdec14Return.a;\n buffer2[p01 + j] = wdec14Return.b;\n wdec14(i10, i11);\n buffer2[p10 + j] = wdec14Return.a;\n buffer2[p11 + j] = wdec14Return.b;\n } else {\n wdec16(buffer2[px + j], buffer2[p10 + j]);\n i00 = wdec14Return.a;\n i10 = wdec14Return.b;\n wdec16(buffer2[p01 + j], buffer2[p11 + j]);\n i01 = wdec14Return.a;\n i11 = wdec14Return.b;\n wdec16(i00, i01);\n buffer2[px + j] = wdec14Return.a;\n buffer2[p01 + j] = wdec14Return.b;\n wdec16(i10, i11);\n buffer2[p10 + j] = wdec14Return.a;\n buffer2[p11 + j] = wdec14Return.b;\n }\n }\n if (nx & p) {\n var p10 = px + oy1;\n if (w14)\n wdec14(buffer2[px + j], buffer2[p10 + j]);\n else\n wdec16(buffer2[px + j], buffer2[p10 + j]);\n i00 = wdec14Return.a;\n buffer2[p10 + j] = wdec14Return.b;\n buffer2[px + j] = i00;\n }\n }\n if (ny & p) {\n var px = py;\n var ex = py + ox * (nx - p2);\n for (; px <= ex; px += ox2) {\n var p01 = px + ox1;\n if (w14)\n wdec14(buffer2[px + j], buffer2[p01 + j]);\n else\n wdec16(buffer2[px + j], buffer2[p01 + j]);\n i00 = wdec14Return.a;\n buffer2[p01 + j] = wdec14Return.b;\n buffer2[px + j] = i00;\n }\n }\n p2 = p;\n p >>= 1;\n }\n return py;\n }\n function hufDecode(encodingTable, decodingTable, uInt8Array2, inDataView, inOffset, ni, rlc, no, outBuffer, outOffset) {\n var c = 0;\n var lc = 0;\n var outBufferEndOffset = no;\n var inOffsetEnd = Math.trunc(inOffset.value + (ni + 7) / 8);\n while (inOffset.value < inOffsetEnd) {\n getChar(c, lc, uInt8Array2, inOffset);\n c = getCharReturn.c;\n lc = getCharReturn.lc;\n while (lc >= HUF_DECBITS) {\n var index = c >> lc - HUF_DECBITS & HUF_DECMASK;\n var pl = decodingTable[index];\n if (pl.len) {\n lc -= pl.len;\n getCode(pl.lit, rlc, c, lc, uInt8Array2, inDataView, inOffset, outBuffer, outOffset, outBufferEndOffset);\n c = getCodeReturn.c;\n lc = getCodeReturn.lc;\n } else {\n if (!pl.p) {\n throw \"hufDecode issues\";\n }\n var j;\n for (j = 0; j < pl.lit; j++) {\n var l = hufLength(encodingTable[pl.p[j]]);\n while (lc < l && inOffset.value < inOffsetEnd) {\n getChar(c, lc, uInt8Array2, inOffset);\n c = getCharReturn.c;\n lc = getCharReturn.lc;\n }\n if (lc >= l) {\n if (hufCode(encodingTable[pl.p[j]]) == (c >> lc - l & (1 << l) - 1)) {\n lc -= l;\n getCode(\n pl.p[j],\n rlc,\n c,\n lc,\n uInt8Array2,\n inDataView,\n inOffset,\n outBuffer,\n outOffset,\n outBufferEndOffset\n );\n c = getCodeReturn.c;\n lc = getCodeReturn.lc;\n break;\n }\n }\n }\n if (j == pl.lit) {\n throw \"hufDecode issues\";\n }\n }\n }\n }\n var i = 8 - ni & 7;\n c >>= i;\n lc -= i;\n while (lc > 0) {\n var pl = decodingTable[c << HUF_DECBITS - lc & HUF_DECMASK];\n if (pl.len) {\n lc -= pl.len;\n getCode(pl.lit, rlc, c, lc, uInt8Array2, inDataView, inOffset, outBuffer, outOffset, outBufferEndOffset);\n c = getCodeReturn.c;\n lc = getCodeReturn.lc;\n } else {\n throw \"hufDecode issues\";\n }\n }\n return true;\n }\n function hufUncompress(uInt8Array2, inDataView, inOffset, nCompressed, outBuffer, nRaw) {\n var outOffset = { value: 0 };\n var initialInOffset = inOffset.value;\n var im = parseUint32(inDataView, inOffset);\n var iM = parseUint32(inDataView, inOffset);\n inOffset.value += 4;\n var nBits = parseUint32(inDataView, inOffset);\n inOffset.value += 4;\n if (im < 0 || im >= HUF_ENCSIZE || iM < 0 || iM >= HUF_ENCSIZE) {\n throw \"Something wrong with HUF_ENCSIZE\";\n }\n var freq = new Array(HUF_ENCSIZE);\n var hdec = new Array(HUF_DECSIZE);\n hufClearDecTable(hdec);\n var ni = nCompressed - (inOffset.value - initialInOffset);\n hufUnpackEncTable(uInt8Array2, inDataView, inOffset, ni, im, iM, freq);\n if (nBits > 8 * (nCompressed - (inOffset.value - initialInOffset))) {\n throw \"Something wrong with hufUncompress\";\n }\n hufBuildDecTable(freq, im, iM, hdec);\n hufDecode(freq, hdec, uInt8Array2, inDataView, inOffset, nBits, iM, nRaw, outBuffer, outOffset);\n }\n function applyLut(lut, data, nData) {\n for (var i = 0; i < nData; ++i) {\n data[i] = lut[data[i]];\n }\n }\n function predictor(source) {\n for (var t = 1; t < source.length; t++) {\n var d = source[t - 1] + source[t] - 128;\n source[t] = d;\n }\n }\n function interleaveScalar(source, out) {\n var t1 = 0;\n var t2 = Math.floor((source.length + 1) / 2);\n var s = 0;\n var stop = source.length - 1;\n while (true) {\n if (s > stop)\n break;\n out[s++] = source[t1++];\n if (s > stop)\n break;\n out[s++] = source[t2++];\n }\n }\n function decodeRunLength(source) {\n var size = source.byteLength;\n var out = new Array();\n var p = 0;\n var reader = new DataView(source);\n while (size > 0) {\n var l = reader.getInt8(p++);\n if (l < 0) {\n var count = -l;\n size -= count + 1;\n for (var i = 0; i < count; i++) {\n out.push(reader.getUint8(p++));\n }\n } else {\n var count = l;\n size -= 2;\n var value = reader.getUint8(p++);\n for (var i = 0; i < count + 1; i++) {\n out.push(value);\n }\n }\n }\n return out;\n }\n function lossyDctDecode(cscSet, rowPtrs, channelData, acBuffer, dcBuffer, outBuffer) {\n var dataView = new DataView(outBuffer.buffer);\n var width = channelData[cscSet.idx[0]].width;\n var height = channelData[cscSet.idx[0]].height;\n var numComp = 3;\n var numFullBlocksX = Math.floor(width / 8);\n var numBlocksX = Math.ceil(width / 8);\n var numBlocksY = Math.ceil(height / 8);\n var leftoverX = width - (numBlocksX - 1) * 8;\n var leftoverY = height - (numBlocksY - 1) * 8;\n var currAcComp = { value: 0 };\n var currDcComp = new Array(numComp);\n var dctData = new Array(numComp);\n var halfZigBlock = new Array(numComp);\n var rowBlock = new Array(numComp);\n var rowOffsets = new Array(numComp);\n for (let comp2 = 0; comp2 < numComp; ++comp2) {\n rowOffsets[comp2] = rowPtrs[cscSet.idx[comp2]];\n currDcComp[comp2] = comp2 < 1 ? 0 : currDcComp[comp2 - 1] + numBlocksX * numBlocksY;\n dctData[comp2] = new Float32Array(64);\n halfZigBlock[comp2] = new Uint16Array(64);\n rowBlock[comp2] = new Uint16Array(numBlocksX * 64);\n }\n for (let blocky = 0; blocky < numBlocksY; ++blocky) {\n var maxY = 8;\n if (blocky == numBlocksY - 1)\n maxY = leftoverY;\n var maxX = 8;\n for (let blockx = 0; blockx < numBlocksX; ++blockx) {\n if (blockx == numBlocksX - 1)\n maxX = leftoverX;\n for (let comp2 = 0; comp2 < numComp; ++comp2) {\n halfZigBlock[comp2].fill(0);\n halfZigBlock[comp2][0] = dcBuffer[currDcComp[comp2]++];\n unRleAC(currAcComp, acBuffer, halfZigBlock[comp2]);\n unZigZag(halfZigBlock[comp2], dctData[comp2]);\n dctInverse(dctData[comp2]);\n }\n {\n csc709Inverse(dctData);\n }\n for (let comp2 = 0; comp2 < numComp; ++comp2) {\n convertToHalf(dctData[comp2], rowBlock[comp2], blockx * 64);\n }\n }\n let offset2 = 0;\n for (let comp2 = 0; comp2 < numComp; ++comp2) {\n const type2 = channelData[cscSet.idx[comp2]].type;\n for (let y2 = 8 * blocky; y2 < 8 * blocky + maxY; ++y2) {\n offset2 = rowOffsets[comp2][y2];\n for (let blockx = 0; blockx < numFullBlocksX; ++blockx) {\n const src = blockx * 64 + (y2 & 7) * 8;\n dataView.setUint16(offset2 + 0 * INT16_SIZE * type2, rowBlock[comp2][src + 0], true);\n dataView.setUint16(offset2 + 1 * INT16_SIZE * type2, rowBlock[comp2][src + 1], true);\n dataView.setUint16(offset2 + 2 * INT16_SIZE * type2, rowBlock[comp2][src + 2], true);\n dataView.setUint16(offset2 + 3 * INT16_SIZE * type2, rowBlock[comp2][src + 3], true);\n dataView.setUint16(offset2 + 4 * INT16_SIZE * type2, rowBlock[comp2][src + 4], true);\n dataView.setUint16(offset2 + 5 * INT16_SIZE * type2, rowBlock[comp2][src + 5], true);\n dataView.setUint16(offset2 + 6 * INT16_SIZE * type2, rowBlock[comp2][src + 6], true);\n dataView.setUint16(offset2 + 7 * INT16_SIZE * type2, rowBlock[comp2][src + 7], true);\n offset2 += 8 * INT16_SIZE * type2;\n }\n }\n if (numFullBlocksX != numBlocksX) {\n for (let y2 = 8 * blocky; y2 < 8 * blocky + maxY; ++y2) {\n const offset3 = rowOffsets[comp2][y2] + 8 * numFullBlocksX * INT16_SIZE * type2;\n const src = numFullBlocksX * 64 + (y2 & 7) * 8;\n for (let x2 = 0; x2 < maxX; ++x2) {\n dataView.setUint16(offset3 + x2 * INT16_SIZE * type2, rowBlock[comp2][src + x2], true);\n }\n }\n }\n }\n }\n var halfRow = new Uint16Array(width);\n var dataView = new DataView(outBuffer.buffer);\n for (var comp = 0; comp < numComp; ++comp) {\n channelData[cscSet.idx[comp]].decoded = true;\n var type = channelData[cscSet.idx[comp]].type;\n if (channelData[comp].type != 2)\n continue;\n for (var y = 0; y < height; ++y) {\n const offset2 = rowOffsets[comp][y];\n for (var x = 0; x < width; ++x) {\n halfRow[x] = dataView.getUint16(offset2 + x * INT16_SIZE * type, true);\n }\n for (var x = 0; x < width; ++x) {\n dataView.setFloat32(offset2 + x * INT16_SIZE * type, decodeFloat16(halfRow[x]), true);\n }\n }\n }\n }\n function unRleAC(currAcComp, acBuffer, halfZigBlock) {\n var acValue;\n var dctComp = 1;\n while (dctComp < 64) {\n acValue = acBuffer[currAcComp.value];\n if (acValue == 65280) {\n dctComp = 64;\n } else if (acValue >> 8 == 255) {\n dctComp += acValue & 255;\n } else {\n halfZigBlock[dctComp] = acValue;\n dctComp++;\n }\n currAcComp.value++;\n }\n }\n function unZigZag(src, dst) {\n dst[0] = decodeFloat16(src[0]);\n dst[1] = decodeFloat16(src[1]);\n dst[2] = decodeFloat16(src[5]);\n dst[3] = decodeFloat16(src[6]);\n dst[4] = decodeFloat16(src[14]);\n dst[5] = decodeFloat16(src[15]);\n dst[6] = decodeFloat16(src[27]);\n dst[7] = decodeFloat16(src[28]);\n dst[8] = decodeFloat16(src[2]);\n dst[9] = decodeFloat16(src[4]);\n dst[10] = decodeFloat16(src[7]);\n dst[11] = decodeFloat16(src[13]);\n dst[12] = decodeFloat16(src[16]);\n dst[13] = decodeFloat16(src[26]);\n dst[14] = decodeFloat16(src[29]);\n dst[15] = decodeFloat16(src[42]);\n dst[16] = decodeFloat16(src[3]);\n dst[17] = decodeFloat16(src[8]);\n dst[18] = decodeFloat16(src[12]);\n dst[19] = decodeFloat16(src[17]);\n dst[20] = decodeFloat16(src[25]);\n dst[21] = decodeFloat16(src[30]);\n dst[22] = decodeFloat16(src[41]);\n dst[23] = decodeFloat16(src[43]);\n dst[24] = decodeFloat16(src[9]);\n dst[25] = decodeFloat16(src[11]);\n dst[26] = decodeFloat16(src[18]);\n dst[27] = decodeFloat16(src[24]);\n dst[28] = decodeFloat16(src[31]);\n dst[29] = decodeFloat16(src[40]);\n dst[30] = decodeFloat16(src[44]);\n dst[31] = decodeFloat16(src[53]);\n dst[32] = decodeFloat16(src[10]);\n dst[33] = decodeFloat16(src[19]);\n dst[34] = decodeFloat16(src[23]);\n dst[35] = decodeFloat16(src[32]);\n dst[36] = decodeFloat16(src[39]);\n dst[37] = decodeFloat16(src[45]);\n dst[38] = decodeFloat16(src[52]);\n dst[39] = decodeFloat16(src[54]);\n dst[40] = decodeFloat16(src[20]);\n dst[41] = decodeFloat16(src[22]);\n dst[42] = decodeFloat16(src[33]);\n dst[43] = decodeFloat16(src[38]);\n dst[44] = decodeFloat16(src[46]);\n dst[45] = decodeFloat16(src[51]);\n dst[46] = decodeFloat16(src[55]);\n dst[47] = decodeFloat16(src[60]);\n dst[48] = decodeFloat16(src[21]);\n dst[49] = decodeFloat16(src[34]);\n dst[50] = decodeFloat16(src[37]);\n dst[51] = decodeFloat16(src[47]);\n dst[52] = decodeFloat16(src[50]);\n dst[53] = decodeFloat16(src[56]);\n dst[54] = decodeFloat16(src[59]);\n dst[55] = decodeFloat16(src[61]);\n dst[56] = decodeFloat16(src[35]);\n dst[57] = decodeFloat16(src[36]);\n dst[58] = decodeFloat16(src[48]);\n dst[59] = decodeFloat16(src[49]);\n dst[60] = decodeFloat16(src[57]);\n dst[61] = decodeFloat16(src[58]);\n dst[62] = decodeFloat16(src[62]);\n dst[63] = decodeFloat16(src[63]);\n }\n function dctInverse(data) {\n const a = 0.5 * Math.cos(3.14159 / 4);\n const b = 0.5 * Math.cos(3.14159 / 16);\n const c = 0.5 * Math.cos(3.14159 / 8);\n const d = 0.5 * Math.cos(3 * 3.14159 / 16);\n const e = 0.5 * Math.cos(5 * 3.14159 / 16);\n const f = 0.5 * Math.cos(3 * 3.14159 / 8);\n const g = 0.5 * Math.cos(7 * 3.14159 / 16);\n var alpha = new Array(4);\n var beta = new Array(4);\n var theta = new Array(4);\n var gamma = new Array(4);\n for (var row = 0; row < 8; ++row) {\n var rowPtr = row * 8;\n alpha[0] = c * data[rowPtr + 2];\n alpha[1] = f * data[rowPtr + 2];\n alpha[2] = c * data[rowPtr + 6];\n alpha[3] = f * data[rowPtr + 6];\n beta[0] = b * data[rowPtr + 1] + d * data[rowPtr + 3] + e * data[rowPtr + 5] + g * data[rowPtr + 7];\n beta[1] = d * data[rowPtr + 1] - g * data[rowPtr + 3] - b * data[rowPtr + 5] - e * data[rowPtr + 7];\n beta[2] = e * data[rowPtr + 1] - b * data[rowPtr + 3] + g * data[rowPtr + 5] + d * data[rowPtr + 7];\n beta[3] = g * data[rowPtr + 1] - e * data[rowPtr + 3] + d * data[rowPtr + 5] - b * data[rowPtr + 7];\n theta[0] = a * (data[rowPtr + 0] + data[rowPtr + 4]);\n theta[3] = a * (data[rowPtr + 0] - data[rowPtr + 4]);\n theta[1] = alpha[0] + alpha[3];\n theta[2] = alpha[1] - alpha[2];\n gamma[0] = theta[0] + theta[1];\n gamma[1] = theta[3] + theta[2];\n gamma[2] = theta[3] - theta[2];\n gamma[3] = theta[0] - theta[1];\n data[rowPtr + 0] = gamma[0] + beta[0];\n data[rowPtr + 1] = gamma[1] + beta[1];\n data[rowPtr + 2] = gamma[2] + beta[2];\n data[rowPtr + 3] = gamma[3] + beta[3];\n data[rowPtr + 4] = gamma[3] - beta[3];\n data[rowPtr + 5] = gamma[2] - beta[2];\n data[rowPtr + 6] = gamma[1] - beta[1];\n data[rowPtr + 7] = gamma[0] - beta[0];\n }\n for (var column = 0; column < 8; ++column) {\n alpha[0] = c * data[16 + column];\n alpha[1] = f * data[16 + column];\n alpha[2] = c * data[48 + column];\n alpha[3] = f * data[48 + column];\n beta[0] = b * data[8 + column] + d * data[24 + column] + e * data[40 + column] + g * data[56 + column];\n beta[1] = d * data[8 + column] - g * data[24 + column] - b * data[40 + column] - e * data[56 + column];\n beta[2] = e * data[8 + column] - b * data[24 + column] + g * data[40 + column] + d * data[56 + column];\n beta[3] = g * data[8 + column] - e * data[24 + column] + d * data[40 + column] - b * data[56 + column];\n theta[0] = a * (data[column] + data[32 + column]);\n theta[3] = a * (data[column] - data[32 + column]);\n theta[1] = alpha[0] + alpha[3];\n theta[2] = alpha[1] - alpha[2];\n gamma[0] = theta[0] + theta[1];\n gamma[1] = theta[3] + theta[2];\n gamma[2] = theta[3] - theta[2];\n gamma[3] = theta[0] - theta[1];\n data[0 + column] = gamma[0] + beta[0];\n data[8 + column] = gamma[1] + beta[1];\n data[16 + column] = gamma[2] + beta[2];\n data[24 + column] = gamma[3] + beta[3];\n data[32 + column] = gamma[3] - beta[3];\n data[40 + column] = gamma[2] - beta[2];\n data[48 + column] = gamma[1] - beta[1];\n data[56 + column] = gamma[0] - beta[0];\n }\n }\n function csc709Inverse(data) {\n for (var i = 0; i < 64; ++i) {\n var y = data[0][i];\n var cb = data[1][i];\n var cr = data[2][i];\n data[0][i] = y + 1.5747 * cr;\n data[1][i] = y - 0.1873 * cb - 0.4682 * cr;\n data[2][i] = y + 1.8556 * cb;\n }\n }\n function convertToHalf(src, dst, idx) {\n for (var i = 0; i < 64; ++i) {\n dst[idx + i] = DataUtils.toHalfFloat(toLinear(src[i]));\n }\n }\n function toLinear(float) {\n if (float <= 1) {\n return Math.sign(float) * Math.pow(Math.abs(float), 2.2);\n } else {\n return Math.sign(float) * Math.pow(logBase, Math.abs(float) - 1);\n }\n }\n function uncompressRAW(info) {\n return new DataView(info.array.buffer, info.offset.value, info.size);\n }\n function uncompressRLE(info) {\n var compressed = info.viewer.buffer.slice(info.offset.value, info.offset.value + info.size);\n var rawBuffer = new Uint8Array(decodeRunLength(compressed));\n var tmpBuffer = new Uint8Array(rawBuffer.length);\n predictor(rawBuffer);\n interleaveScalar(rawBuffer, tmpBuffer);\n return new DataView(tmpBuffer.buffer);\n }\n function uncompressZIP(info) {\n var compressed = info.array.slice(info.offset.value, info.offset.value + info.size);\n var rawBuffer = unzlibSync(compressed);\n var tmpBuffer = new Uint8Array(rawBuffer.length);\n predictor(rawBuffer);\n interleaveScalar(rawBuffer, tmpBuffer);\n return new DataView(tmpBuffer.buffer);\n }\n function uncompressPIZ(info) {\n var inDataView = info.viewer;\n var inOffset = { value: info.offset.value };\n var outBuffer = new Uint16Array(info.width * info.scanlineBlockSize * (info.channels * info.type));\n var bitmap = new Uint8Array(BITMAP_SIZE);\n var outBufferEnd = 0;\n var pizChannelData = new Array(info.channels);\n for (var i = 0; i < info.channels; i++) {\n pizChannelData[i] = {};\n pizChannelData[i][\"start\"] = outBufferEnd;\n pizChannelData[i][\"end\"] = pizChannelData[i][\"start\"];\n pizChannelData[i][\"nx\"] = info.width;\n pizChannelData[i][\"ny\"] = info.lines;\n pizChannelData[i][\"size\"] = info.type;\n outBufferEnd += pizChannelData[i].nx * pizChannelData[i].ny * pizChannelData[i].size;\n }\n var minNonZero = parseUint16(inDataView, inOffset);\n var maxNonZero = parseUint16(inDataView, inOffset);\n if (maxNonZero >= BITMAP_SIZE) {\n throw \"Something is wrong with PIZ_COMPRESSION BITMAP_SIZE\";\n }\n if (minNonZero <= maxNonZero) {\n for (var i = 0; i < maxNonZero - minNonZero + 1; i++) {\n bitmap[i + minNonZero] = parseUint8(inDataView, inOffset);\n }\n }\n var lut = new Uint16Array(USHORT_RANGE);\n var maxValue = reverseLutFromBitmap(bitmap, lut);\n var length = parseUint32(inDataView, inOffset);\n hufUncompress(info.array, inDataView, inOffset, length, outBuffer, outBufferEnd);\n for (var i = 0; i < info.channels; ++i) {\n var cd = pizChannelData[i];\n for (var j = 0; j < pizChannelData[i].size; ++j) {\n wav2Decode(outBuffer, cd.start + j, cd.nx, cd.size, cd.ny, cd.nx * cd.size, maxValue);\n }\n }\n applyLut(lut, outBuffer, outBufferEnd);\n var tmpOffset2 = 0;\n var tmpBuffer = new Uint8Array(outBuffer.buffer.byteLength);\n for (var y = 0; y < info.lines; y++) {\n for (var c = 0; c < info.channels; c++) {\n var cd = pizChannelData[c];\n var n = cd.nx * cd.size;\n var cp = new Uint8Array(outBuffer.buffer, cd.end * INT16_SIZE, n * INT16_SIZE);\n tmpBuffer.set(cp, tmpOffset2);\n tmpOffset2 += n * INT16_SIZE;\n cd.end += n;\n }\n }\n return new DataView(tmpBuffer.buffer);\n }\n function uncompressPXR(info) {\n var compressed = info.array.slice(info.offset.value, info.offset.value + info.size);\n var rawBuffer = unzlibSync(compressed);\n const sz = info.lines * info.channels * info.width;\n const tmpBuffer = info.type == 1 ? new Uint16Array(sz) : new Uint32Array(sz);\n let tmpBufferEnd = 0;\n let writePtr = 0;\n const ptr = new Array(4);\n for (let y = 0; y < info.lines; y++) {\n for (let c = 0; c < info.channels; c++) {\n let pixel = 0;\n switch (info.type) {\n case 1:\n ptr[0] = tmpBufferEnd;\n ptr[1] = ptr[0] + info.width;\n tmpBufferEnd = ptr[1] + info.width;\n for (let j = 0; j < info.width; ++j) {\n const diff = rawBuffer[ptr[0]++] << 8 | rawBuffer[ptr[1]++];\n pixel += diff;\n tmpBuffer[writePtr] = pixel;\n writePtr++;\n }\n break;\n case 2:\n ptr[0] = tmpBufferEnd;\n ptr[1] = ptr[0] + info.width;\n ptr[2] = ptr[1] + info.width;\n tmpBufferEnd = ptr[2] + info.width;\n for (let j = 0; j < info.width; ++j) {\n const diff = rawBuffer[ptr[0]++] << 24 | rawBuffer[ptr[1]++] << 16 | rawBuffer[ptr[2]++] << 8;\n pixel += diff;\n tmpBuffer[writePtr] = pixel;\n writePtr++;\n }\n break;\n }\n }\n }\n return new DataView(tmpBuffer.buffer);\n }\n function uncompressDWA(info) {\n var inDataView = info.viewer;\n var inOffset = { value: info.offset.value };\n var outBuffer = new Uint8Array(info.width * info.lines * (info.channels * info.type * INT16_SIZE));\n var dwaHeader = {\n version: parseInt64(inDataView, inOffset),\n unknownUncompressedSize: parseInt64(inDataView, inOffset),\n unknownCompressedSize: parseInt64(inDataView, inOffset),\n acCompressedSize: parseInt64(inDataView, inOffset),\n dcCompressedSize: parseInt64(inDataView, inOffset),\n rleCompressedSize: parseInt64(inDataView, inOffset),\n rleUncompressedSize: parseInt64(inDataView, inOffset),\n rleRawSize: parseInt64(inDataView, inOffset),\n totalAcUncompressedCount: parseInt64(inDataView, inOffset),\n totalDcUncompressedCount: parseInt64(inDataView, inOffset),\n acCompression: parseInt64(inDataView, inOffset)\n };\n if (dwaHeader.version < 2) {\n throw \"EXRLoader.parse: \" + EXRHeader.compression + \" version \" + dwaHeader.version + \" is unsupported\";\n }\n var channelRules = new Array();\n var ruleSize = parseUint16(inDataView, inOffset) - INT16_SIZE;\n while (ruleSize > 0) {\n var name = parseNullTerminatedString(inDataView.buffer, inOffset);\n var value = parseUint8(inDataView, inOffset);\n var compression = value >> 2 & 3;\n var csc = (value >> 4) - 1;\n var index = new Int8Array([csc])[0];\n var type = parseUint8(inDataView, inOffset);\n channelRules.push({\n name,\n index,\n type,\n compression\n });\n ruleSize -= name.length + 3;\n }\n var channels = EXRHeader.channels;\n var channelData = new Array(info.channels);\n for (var i = 0; i < info.channels; ++i) {\n var cd = channelData[i] = {};\n var channel = channels[i];\n cd.name = channel.name;\n cd.compression = UNKNOWN;\n cd.decoded = false;\n cd.type = channel.pixelType;\n cd.pLinear = channel.pLinear;\n cd.width = info.width;\n cd.height = info.lines;\n }\n var cscSet = {\n idx: new Array(3)\n };\n for (var offset2 = 0; offset2 < info.channels; ++offset2) {\n var cd = channelData[offset2];\n for (var i = 0; i < channelRules.length; ++i) {\n var rule = channelRules[i];\n if (cd.name == rule.name) {\n cd.compression = rule.compression;\n if (rule.index >= 0) {\n cscSet.idx[rule.index] = offset2;\n }\n cd.offset = offset2;\n }\n }\n }\n if (dwaHeader.acCompressedSize > 0) {\n switch (dwaHeader.acCompression) {\n case STATIC_HUFFMAN:\n var acBuffer = new Uint16Array(dwaHeader.totalAcUncompressedCount);\n hufUncompress(\n info.array,\n inDataView,\n inOffset,\n dwaHeader.acCompressedSize,\n acBuffer,\n dwaHeader.totalAcUncompressedCount\n );\n break;\n case DEFLATE:\n var compressed = info.array.slice(inOffset.value, inOffset.value + dwaHeader.totalAcUncompressedCount);\n var data = unzlibSync(compressed);\n var acBuffer = new Uint16Array(data.buffer);\n inOffset.value += dwaHeader.totalAcUncompressedCount;\n break;\n }\n }\n if (dwaHeader.dcCompressedSize > 0) {\n var zlibInfo = {\n array: info.array,\n offset: inOffset,\n size: dwaHeader.dcCompressedSize\n };\n var dcBuffer = new Uint16Array(uncompressZIP(zlibInfo).buffer);\n inOffset.value += dwaHeader.dcCompressedSize;\n }\n if (dwaHeader.rleRawSize > 0) {\n var compressed = info.array.slice(inOffset.value, inOffset.value + dwaHeader.rleCompressedSize);\n var data = unzlibSync(compressed);\n var rleBuffer = decodeRunLength(data.buffer);\n inOffset.value += dwaHeader.rleCompressedSize;\n }\n var outBufferEnd = 0;\n var rowOffsets = new Array(channelData.length);\n for (var i = 0; i < rowOffsets.length; ++i) {\n rowOffsets[i] = new Array();\n }\n for (var y = 0; y < info.lines; ++y) {\n for (var chan = 0; chan < channelData.length; ++chan) {\n rowOffsets[chan].push(outBufferEnd);\n outBufferEnd += channelData[chan].width * info.type * INT16_SIZE;\n }\n }\n lossyDctDecode(cscSet, rowOffsets, channelData, acBuffer, dcBuffer, outBuffer);\n for (var i = 0; i < channelData.length; ++i) {\n var cd = channelData[i];\n if (cd.decoded)\n continue;\n switch (cd.compression) {\n case RLE:\n var row = 0;\n var rleOffset = 0;\n for (var y = 0; y < info.lines; ++y) {\n var rowOffsetBytes = rowOffsets[i][row];\n for (var x = 0; x < cd.width; ++x) {\n for (var byte = 0; byte < INT16_SIZE * cd.type; ++byte) {\n outBuffer[rowOffsetBytes++] = rleBuffer[rleOffset + byte * cd.width * cd.height];\n }\n rleOffset++;\n }\n row++;\n }\n break;\n case LOSSY_DCT:\n default:\n throw \"EXRLoader.parse: unsupported channel compression\";\n }\n }\n return new DataView(outBuffer.buffer);\n }\n function parseNullTerminatedString(buffer2, offset2) {\n var uintBuffer = new Uint8Array(buffer2);\n var endOffset = 0;\n while (uintBuffer[offset2.value + endOffset] != 0) {\n endOffset += 1;\n }\n var stringValue = new TextDecoder().decode(uintBuffer.slice(offset2.value, offset2.value + endOffset));\n offset2.value = offset2.value + endOffset + 1;\n return stringValue;\n }\n function parseFixedLengthString(buffer2, offset2, size) {\n var stringValue = new TextDecoder().decode(new Uint8Array(buffer2).slice(offset2.value, offset2.value + size));\n offset2.value = offset2.value + size;\n return stringValue;\n }\n function parseRational(dataView, offset2) {\n var x = parseInt32(dataView, offset2);\n var y = parseUint32(dataView, offset2);\n return [x, y];\n }\n function parseTimecode(dataView, offset2) {\n var x = parseUint32(dataView, offset2);\n var y = parseUint32(dataView, offset2);\n return [x, y];\n }\n function parseInt32(dataView, offset2) {\n var Int32 = dataView.getInt32(offset2.value, true);\n offset2.value = offset2.value + INT32_SIZE;\n return Int32;\n }\n function parseUint32(dataView, offset2) {\n var Uint32 = dataView.getUint32(offset2.value, true);\n offset2.value = offset2.value + INT32_SIZE;\n return Uint32;\n }\n function parseUint8Array(uInt8Array2, offset2) {\n var Uint8 = uInt8Array2[offset2.value];\n offset2.value = offset2.value + INT8_SIZE;\n return Uint8;\n }\n function parseUint8(dataView, offset2) {\n var Uint8 = dataView.getUint8(offset2.value);\n offset2.value = offset2.value + INT8_SIZE;\n return Uint8;\n }\n const parseInt64 = function(dataView, offset2) {\n let int;\n if (\"getBigInt64\" in DataView.prototype) {\n int = Number(dataView.getBigInt64(offset2.value, true));\n } else {\n int = dataView.getUint32(offset2.value + 4, true) + Number(dataView.getUint32(offset2.value, true) << 32);\n }\n offset2.value += ULONG_SIZE;\n return int;\n };\n function parseFloat32(dataView, offset2) {\n var float = dataView.getFloat32(offset2.value, true);\n offset2.value += FLOAT32_SIZE;\n return float;\n }\n function decodeFloat32(dataView, offset2) {\n return DataUtils.toHalfFloat(parseFloat32(dataView, offset2));\n }\n function decodeFloat16(binary) {\n var exponent = (binary & 31744) >> 10, fraction = binary & 1023;\n return (binary >> 15 ? -1 : 1) * (exponent ? exponent === 31 ? fraction ? NaN : Infinity : Math.pow(2, exponent - 15) * (1 + fraction / 1024) : 6103515625e-14 * (fraction / 1024));\n }\n function parseUint16(dataView, offset2) {\n var Uint16 = dataView.getUint16(offset2.value, true);\n offset2.value += INT16_SIZE;\n return Uint16;\n }\n function parseFloat16(buffer2, offset2) {\n return decodeFloat16(parseUint16(buffer2, offset2));\n }\n function parseChlist(dataView, buffer2, offset2, size) {\n var startOffset = offset2.value;\n var channels = [];\n while (offset2.value < startOffset + size - 1) {\n var name = parseNullTerminatedString(buffer2, offset2);\n var pixelType = parseInt32(dataView, offset2);\n var pLinear = parseUint8(dataView, offset2);\n offset2.value += 3;\n var xSampling = parseInt32(dataView, offset2);\n var ySampling = parseInt32(dataView, offset2);\n channels.push({\n name,\n pixelType,\n pLinear,\n xSampling,\n ySampling\n });\n }\n offset2.value += 1;\n return channels;\n }\n function parseChromaticities(dataView, offset2) {\n var redX = parseFloat32(dataView, offset2);\n var redY = parseFloat32(dataView, offset2);\n var greenX = parseFloat32(dataView, offset2);\n var greenY = parseFloat32(dataView, offset2);\n var blueX = parseFloat32(dataView, offset2);\n var blueY = parseFloat32(dataView, offset2);\n var whiteX = parseFloat32(dataView, offset2);\n var whiteY = parseFloat32(dataView, offset2);\n return {\n redX,\n redY,\n greenX,\n greenY,\n blueX,\n blueY,\n whiteX,\n whiteY\n };\n }\n function parseCompression(dataView, offset2) {\n var compressionCodes = [\n \"NO_COMPRESSION\",\n \"RLE_COMPRESSION\",\n \"ZIPS_COMPRESSION\",\n \"ZIP_COMPRESSION\",\n \"PIZ_COMPRESSION\",\n \"PXR24_COMPRESSION\",\n \"B44_COMPRESSION\",\n \"B44A_COMPRESSION\",\n \"DWAA_COMPRESSION\",\n \"DWAB_COMPRESSION\"\n ];\n var compression = parseUint8(dataView, offset2);\n return compressionCodes[compression];\n }\n function parseBox2i(dataView, offset2) {\n var xMin = parseUint32(dataView, offset2);\n var yMin = parseUint32(dataView, offset2);\n var xMax = parseUint32(dataView, offset2);\n var yMax = parseUint32(dataView, offset2);\n return { xMin, yMin, xMax, yMax };\n }\n function parseLineOrder(dataView, offset2) {\n var lineOrders = [\"INCREASING_Y\"];\n var lineOrder = parseUint8(dataView, offset2);\n return lineOrders[lineOrder];\n }\n function parseV2f(dataView, offset2) {\n var x = parseFloat32(dataView, offset2);\n var y = parseFloat32(dataView, offset2);\n return [x, y];\n }\n function parseV3f(dataView, offset2) {\n var x = parseFloat32(dataView, offset2);\n var y = parseFloat32(dataView, offset2);\n var z = parseFloat32(dataView, offset2);\n return [x, y, z];\n }\n function parseValue(dataView, buffer2, offset2, type, size) {\n if (type === \"string\" || type === \"stringvector\" || type === \"iccProfile\") {\n return parseFixedLengthString(buffer2, offset2, size);\n } else if (type === \"chlist\") {\n return parseChlist(dataView, buffer2, offset2, size);\n } else if (type === \"chromaticities\") {\n return parseChromaticities(dataView, offset2);\n } else if (type === \"compression\") {\n return parseCompression(dataView, offset2);\n } else if (type === \"box2i\") {\n return parseBox2i(dataView, offset2);\n } else if (type === \"lineOrder\") {\n return parseLineOrder(dataView, offset2);\n } else if (type === \"float\") {\n return parseFloat32(dataView, offset2);\n } else if (type === \"v2f\") {\n return parseV2f(dataView, offset2);\n } else if (type === \"v3f\") {\n return parseV3f(dataView, offset2);\n } else if (type === \"int\") {\n return parseInt32(dataView, offset2);\n } else if (type === \"rational\") {\n return parseRational(dataView, offset2);\n } else if (type === \"timecode\") {\n return parseTimecode(dataView, offset2);\n } else if (type === \"preview\") {\n offset2.value += size;\n return \"skipped\";\n } else {\n offset2.value += size;\n return void 0;\n }\n }\n function parseHeader(dataView, buffer2, offset2) {\n const EXRHeader2 = {};\n if (dataView.getUint32(0, true) != 20000630) {\n throw \"THREE.EXRLoader: provided file doesn't appear to be in OpenEXR format.\";\n }\n EXRHeader2.version = dataView.getUint8(4);\n const spec = dataView.getUint8(5);\n EXRHeader2.spec = {\n singleTile: !!(spec & 2),\n longName: !!(spec & 4),\n deepFormat: !!(spec & 8),\n multiPart: !!(spec & 16)\n };\n offset2.value = 8;\n var keepReading = true;\n while (keepReading) {\n var attributeName = parseNullTerminatedString(buffer2, offset2);\n if (attributeName == 0) {\n keepReading = false;\n } else {\n var attributeType = parseNullTerminatedString(buffer2, offset2);\n var attributeSize = parseUint32(dataView, offset2);\n var attributeValue = parseValue(dataView, buffer2, offset2, attributeType, attributeSize);\n if (attributeValue === void 0) {\n console.warn(`EXRLoader.parse: skipped unknown header attribute type '${attributeType}'.`);\n } else {\n EXRHeader2[attributeName] = attributeValue;\n }\n }\n }\n if ((spec & ~4) != 0) {\n console.error(\"EXRHeader:\", EXRHeader2);\n throw \"THREE.EXRLoader: provided file is currently unsupported.\";\n }\n return EXRHeader2;\n }\n function setupDecoder(EXRHeader2, dataView, uInt8Array2, offset2, outputType) {\n const EXRDecoder2 = {\n size: 0,\n viewer: dataView,\n array: uInt8Array2,\n offset: offset2,\n width: EXRHeader2.dataWindow.xMax - EXRHeader2.dataWindow.xMin + 1,\n height: EXRHeader2.dataWindow.yMax - EXRHeader2.dataWindow.yMin + 1,\n channels: EXRHeader2.channels.length,\n bytesPerLine: null,\n lines: null,\n inputSize: null,\n type: EXRHeader2.channels[0].pixelType,\n uncompress: null,\n getter: null,\n format: null,\n [hasColorSpace ? \"colorSpace\" : \"encoding\"]: null\n };\n switch (EXRHeader2.compression) {\n case \"NO_COMPRESSION\":\n EXRDecoder2.lines = 1;\n EXRDecoder2.uncompress = uncompressRAW;\n break;\n case \"RLE_COMPRESSION\":\n EXRDecoder2.lines = 1;\n EXRDecoder2.uncompress = uncompressRLE;\n break;\n case \"ZIPS_COMPRESSION\":\n EXRDecoder2.lines = 1;\n EXRDecoder2.uncompress = uncompressZIP;\n break;\n case \"ZIP_COMPRESSION\":\n EXRDecoder2.lines = 16;\n EXRDecoder2.uncompress = uncompressZIP;\n break;\n case \"PIZ_COMPRESSION\":\n EXRDecoder2.lines = 32;\n EXRDecoder2.uncompress = uncompressPIZ;\n break;\n case \"PXR24_COMPRESSION\":\n EXRDecoder2.lines = 16;\n EXRDecoder2.uncompress = uncompressPXR;\n break;\n case \"DWAA_COMPRESSION\":\n EXRDecoder2.lines = 32;\n EXRDecoder2.uncompress = uncompressDWA;\n break;\n case \"DWAB_COMPRESSION\":\n EXRDecoder2.lines = 256;\n EXRDecoder2.uncompress = uncompressDWA;\n break;\n default:\n throw \"EXRLoader.parse: \" + EXRHeader2.compression + \" is unsupported\";\n }\n EXRDecoder2.scanlineBlockSize = EXRDecoder2.lines;\n if (EXRDecoder2.type == 1) {\n switch (outputType) {\n case FloatType:\n EXRDecoder2.getter = parseFloat16;\n EXRDecoder2.inputSize = INT16_SIZE;\n break;\n case HalfFloatType:\n EXRDecoder2.getter = parseUint16;\n EXRDecoder2.inputSize = INT16_SIZE;\n break;\n }\n } else if (EXRDecoder2.type == 2) {\n switch (outputType) {\n case FloatType:\n EXRDecoder2.getter = parseFloat32;\n EXRDecoder2.inputSize = FLOAT32_SIZE;\n break;\n case HalfFloatType:\n EXRDecoder2.getter = decodeFloat32;\n EXRDecoder2.inputSize = FLOAT32_SIZE;\n }\n } else {\n throw \"EXRLoader.parse: unsupported pixelType \" + EXRDecoder2.type + \" for \" + EXRHeader2.compression + \".\";\n }\n EXRDecoder2.blockCount = (EXRHeader2.dataWindow.yMax + 1) / EXRDecoder2.scanlineBlockSize;\n for (var i = 0; i < EXRDecoder2.blockCount; i++)\n parseInt64(dataView, offset2);\n EXRDecoder2.outputChannels = EXRDecoder2.channels == 3 ? 4 : EXRDecoder2.channels;\n const size = EXRDecoder2.width * EXRDecoder2.height * EXRDecoder2.outputChannels;\n switch (outputType) {\n case FloatType:\n EXRDecoder2.byteArray = new Float32Array(size);\n if (EXRDecoder2.channels < EXRDecoder2.outputChannels)\n EXRDecoder2.byteArray.fill(1, 0, size);\n break;\n case HalfFloatType:\n EXRDecoder2.byteArray = new Uint16Array(size);\n if (EXRDecoder2.channels < EXRDecoder2.outputChannels)\n EXRDecoder2.byteArray.fill(15360, 0, size);\n break;\n default:\n console.error(\"THREE.EXRLoader: unsupported type: \", outputType);\n break;\n }\n EXRDecoder2.bytesPerLine = EXRDecoder2.width * EXRDecoder2.inputSize * EXRDecoder2.channels;\n if (EXRDecoder2.outputChannels == 4)\n EXRDecoder2.format = RGBAFormat;\n else\n EXRDecoder2.format = RedFormat;\n if (hasColorSpace)\n EXRDecoder2.colorSpace = \"srgb-linear\";\n else\n EXRDecoder2.encoding = 3e3;\n return EXRDecoder2;\n }\n const bufferDataView = new DataView(buffer);\n const uInt8Array = new Uint8Array(buffer);\n const offset = { value: 0 };\n const EXRHeader = parseHeader(bufferDataView, buffer, offset);\n const EXRDecoder = setupDecoder(EXRHeader, bufferDataView, uInt8Array, offset, this.type);\n const tmpOffset = { value: 0 };\n const channelOffsets = { R: 0, G: 1, B: 2, A: 3, Y: 0 };\n for (let scanlineBlockIdx = 0; scanlineBlockIdx < EXRDecoder.height / EXRDecoder.scanlineBlockSize; scanlineBlockIdx++) {\n const line = parseUint32(bufferDataView, offset);\n EXRDecoder.size = parseUint32(bufferDataView, offset);\n EXRDecoder.lines = line + EXRDecoder.scanlineBlockSize > EXRDecoder.height ? EXRDecoder.height - line : EXRDecoder.scanlineBlockSize;\n const isCompressed = EXRDecoder.size < EXRDecoder.lines * EXRDecoder.bytesPerLine;\n const viewer = isCompressed ? EXRDecoder.uncompress(EXRDecoder) : uncompressRAW(EXRDecoder);\n offset.value += EXRDecoder.size;\n for (let line_y = 0; line_y < EXRDecoder.scanlineBlockSize; line_y++) {\n const true_y = line_y + scanlineBlockIdx * EXRDecoder.scanlineBlockSize;\n if (true_y >= EXRDecoder.height)\n break;\n for (let channelID = 0; channelID < EXRDecoder.channels; channelID++) {\n const cOff = channelOffsets[EXRHeader.channels[channelID].name];\n for (let x = 0; x < EXRDecoder.width; x++) {\n tmpOffset.value = (line_y * (EXRDecoder.channels * EXRDecoder.width) + channelID * EXRDecoder.width + x) * EXRDecoder.inputSize;\n const outIndex = (EXRDecoder.height - 1 - true_y) * (EXRDecoder.width * EXRDecoder.outputChannels) + x * EXRDecoder.outputChannels + cOff;\n EXRDecoder.byteArray[outIndex] = EXRDecoder.getter(viewer, tmpOffset);\n }\n }\n }\n }\n return {\n header: EXRHeader,\n width: EXRDecoder.width,\n height: EXRDecoder.height,\n data: EXRDecoder.byteArray,\n format: EXRDecoder.format,\n [hasColorSpace ? \"colorSpace\" : \"encoding\"]: EXRDecoder[hasColorSpace ? \"colorSpace\" : \"encoding\"],\n type: this.type\n };\n }\n setDataType(value) {\n this.type = value;\n return this;\n }\n load(url, onLoad, onProgress, onError) {\n function onLoadCallback(texture, texData) {\n if (hasColorSpace)\n texture.colorSpace = texData.colorSpace;\n else\n texture.encoding = texData.encoding;\n texture.minFilter = LinearFilter;\n texture.magFilter = LinearFilter;\n texture.generateMipmaps = false;\n texture.flipY = false;\n if (onLoad)\n onLoad(texture, texData);\n }\n return super.load(url, onLoadCallback, onProgress, onError);\n }\n}\nexport {\n EXRLoader\n};\n//# sourceMappingURL=EXRLoader.js.map\n","import { Loader, FileLoader, TextureLoader, Group, Color, Matrix4, BufferGeometry, Float32BufferAttribute, Mesh, MeshPhongMaterial, BufferAttribute, MeshStandardMaterial, RepeatWrapping, ClampToEdgeWrapping, MirroredRepeatWrapping, LinearFilter, LinearMipmapLinearFilter, NearestFilter } from \"three\";\nimport { unzipSync } from \"fflate\";\nimport { decodeText } from \"../_polyfill/LoaderUtils.js\";\nclass ThreeMFLoader extends Loader {\n constructor(manager) {\n super(manager);\n this.availableExtensions = [];\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const loader = new FileLoader(scope.manager);\n loader.setPath(scope.path);\n loader.setResponseType(\"arraybuffer\");\n loader.setRequestHeader(scope.requestHeader);\n loader.setWithCredentials(scope.withCredentials);\n loader.load(\n url,\n function(buffer) {\n try {\n onLoad(scope.parse(buffer));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(data) {\n const scope = this;\n const textureLoader = new TextureLoader(this.manager);\n function loadDocument(data2) {\n let zip = null;\n let file = null;\n let relsName;\n let modelRelsName;\n const modelPartNames = [];\n const texturesPartNames = [];\n let modelRels;\n const modelParts = {};\n const printTicketParts = {};\n const texturesParts = {};\n const otherParts = {};\n try {\n zip = unzipSync(new Uint8Array(data2));\n } catch (e) {\n if (e instanceof ReferenceError) {\n console.error(\"THREE.3MFLoader: fflate missing and file is compressed.\");\n return null;\n }\n }\n for (file in zip) {\n if (file.match(/\\_rels\\/.rels$/)) {\n relsName = file;\n } else if (file.match(/3D\\/_rels\\/.*\\.model\\.rels$/)) {\n modelRelsName = file;\n } else if (file.match(/^3D\\/.*\\.model$/)) {\n modelPartNames.push(file);\n } else if (file.match(/^3D\\/Metadata\\/.*\\.xml$/))\n ;\n else if (file.match(/^3D\\/Textures?\\/.*/)) {\n texturesPartNames.push(file);\n } else if (file.match(/^3D\\/Other\\/.*/))\n ;\n }\n const relsView = zip[relsName];\n const relsFileText = decodeText(relsView);\n const rels = parseRelsXml(relsFileText);\n if (modelRelsName) {\n const relsView2 = zip[modelRelsName];\n const relsFileText2 = decodeText(relsView2);\n modelRels = parseRelsXml(relsFileText2);\n }\n for (let i = 0; i < modelPartNames.length; i++) {\n const modelPart = modelPartNames[i];\n const view = zip[modelPart];\n const fileText = decodeText(view);\n const xmlData = new DOMParser().parseFromString(fileText, \"application/xml\");\n if (xmlData.documentElement.nodeName.toLowerCase() !== \"model\") {\n console.error(\"THREE.3MFLoader: Error loading 3MF - no 3MF document found: \", modelPart);\n }\n const modelNode = xmlData.querySelector(\"model\");\n const extensions = {};\n for (let i2 = 0; i2 < modelNode.attributes.length; i2++) {\n const attr = modelNode.attributes[i2];\n if (attr.name.match(/^xmlns:(.+)$/)) {\n extensions[attr.value] = RegExp.$1;\n }\n }\n const modelData = parseModelNode(modelNode);\n modelData[\"xml\"] = modelNode;\n if (0 < Object.keys(extensions).length) {\n modelData[\"extensions\"] = extensions;\n }\n modelParts[modelPart] = modelData;\n }\n for (let i = 0; i < texturesPartNames.length; i++) {\n const texturesPartName = texturesPartNames[i];\n texturesParts[texturesPartName] = zip[texturesPartName].buffer;\n }\n return {\n rels,\n modelRels,\n model: modelParts,\n printTicket: printTicketParts,\n texture: texturesParts,\n other: otherParts\n };\n }\n function parseRelsXml(relsFileText) {\n const relationships = [];\n const relsXmlData = new DOMParser().parseFromString(relsFileText, \"application/xml\");\n const relsNodes = relsXmlData.querySelectorAll(\"Relationship\");\n for (let i = 0; i < relsNodes.length; i++) {\n const relsNode = relsNodes[i];\n const relationship = {\n target: relsNode.getAttribute(\"Target\"),\n //required\n id: relsNode.getAttribute(\"Id\"),\n //required\n type: relsNode.getAttribute(\"Type\")\n //required\n };\n relationships.push(relationship);\n }\n return relationships;\n }\n function parseMetadataNodes(metadataNodes) {\n const metadataData = {};\n for (let i = 0; i < metadataNodes.length; i++) {\n const metadataNode = metadataNodes[i];\n const name = metadataNode.getAttribute(\"name\");\n const validNames = [\n \"Title\",\n \"Designer\",\n \"Description\",\n \"Copyright\",\n \"LicenseTerms\",\n \"Rating\",\n \"CreationDate\",\n \"ModificationDate\"\n ];\n if (0 <= validNames.indexOf(name)) {\n metadataData[name] = metadataNode.textContent;\n }\n }\n return metadataData;\n }\n function parseBasematerialsNode(basematerialsNode) {\n const basematerialsData = {\n id: basematerialsNode.getAttribute(\"id\"),\n // required\n basematerials: []\n };\n const basematerialNodes = basematerialsNode.querySelectorAll(\"base\");\n for (let i = 0; i < basematerialNodes.length; i++) {\n const basematerialNode = basematerialNodes[i];\n const basematerialData = parseBasematerialNode(basematerialNode);\n basematerialData.index = i;\n basematerialsData.basematerials.push(basematerialData);\n }\n return basematerialsData;\n }\n function parseTexture2DNode(texture2DNode) {\n const texture2dData = {\n id: texture2DNode.getAttribute(\"id\"),\n // required\n path: texture2DNode.getAttribute(\"path\"),\n // required\n contenttype: texture2DNode.getAttribute(\"contenttype\"),\n // required\n tilestyleu: texture2DNode.getAttribute(\"tilestyleu\"),\n tilestylev: texture2DNode.getAttribute(\"tilestylev\"),\n filter: texture2DNode.getAttribute(\"filter\")\n };\n return texture2dData;\n }\n function parseTextures2DGroupNode(texture2DGroupNode) {\n const texture2DGroupData = {\n id: texture2DGroupNode.getAttribute(\"id\"),\n // required\n texid: texture2DGroupNode.getAttribute(\"texid\"),\n // required\n displaypropertiesid: texture2DGroupNode.getAttribute(\"displaypropertiesid\")\n };\n const tex2coordNodes = texture2DGroupNode.querySelectorAll(\"tex2coord\");\n const uvs = [];\n for (let i = 0; i < tex2coordNodes.length; i++) {\n const tex2coordNode = tex2coordNodes[i];\n const u = tex2coordNode.getAttribute(\"u\");\n const v = tex2coordNode.getAttribute(\"v\");\n uvs.push(parseFloat(u), parseFloat(v));\n }\n texture2DGroupData[\"uvs\"] = new Float32Array(uvs);\n return texture2DGroupData;\n }\n function parseColorGroupNode(colorGroupNode) {\n const colorGroupData = {\n id: colorGroupNode.getAttribute(\"id\"),\n // required\n displaypropertiesid: colorGroupNode.getAttribute(\"displaypropertiesid\")\n };\n const colorNodes = colorGroupNode.querySelectorAll(\"color\");\n const colors = [];\n const colorObject = new Color();\n for (let i = 0; i < colorNodes.length; i++) {\n const colorNode = colorNodes[i];\n const color = colorNode.getAttribute(\"color\");\n colorObject.setStyle(color.substring(0, 7));\n colorObject.convertSRGBToLinear();\n colors.push(colorObject.r, colorObject.g, colorObject.b);\n }\n colorGroupData[\"colors\"] = new Float32Array(colors);\n return colorGroupData;\n }\n function parseMetallicDisplaypropertiesNode(metallicDisplaypropetiesNode) {\n const metallicDisplaypropertiesData = {\n id: metallicDisplaypropetiesNode.getAttribute(\"id\")\n // required\n };\n const metallicNodes = metallicDisplaypropetiesNode.querySelectorAll(\"pbmetallic\");\n const metallicData = [];\n for (let i = 0; i < metallicNodes.length; i++) {\n const metallicNode = metallicNodes[i];\n metallicData.push({\n name: metallicNode.getAttribute(\"name\"),\n // required\n metallicness: parseFloat(metallicNode.getAttribute(\"metallicness\")),\n // required\n roughness: parseFloat(metallicNode.getAttribute(\"roughness\"))\n // required\n });\n }\n metallicDisplaypropertiesData.data = metallicData;\n return metallicDisplaypropertiesData;\n }\n function parseBasematerialNode(basematerialNode) {\n const basematerialData = {};\n basematerialData[\"name\"] = basematerialNode.getAttribute(\"name\");\n basematerialData[\"displaycolor\"] = basematerialNode.getAttribute(\"displaycolor\");\n basematerialData[\"displaypropertiesid\"] = basematerialNode.getAttribute(\"displaypropertiesid\");\n return basematerialData;\n }\n function parseMeshNode(meshNode) {\n const meshData = {};\n const vertices = [];\n const vertexNodes = meshNode.querySelectorAll(\"vertices vertex\");\n for (let i = 0; i < vertexNodes.length; i++) {\n const vertexNode = vertexNodes[i];\n const x = vertexNode.getAttribute(\"x\");\n const y = vertexNode.getAttribute(\"y\");\n const z = vertexNode.getAttribute(\"z\");\n vertices.push(parseFloat(x), parseFloat(y), parseFloat(z));\n }\n meshData[\"vertices\"] = new Float32Array(vertices);\n const triangleProperties = [];\n const triangles = [];\n const triangleNodes = meshNode.querySelectorAll(\"triangles triangle\");\n for (let i = 0; i < triangleNodes.length; i++) {\n const triangleNode = triangleNodes[i];\n const v1 = triangleNode.getAttribute(\"v1\");\n const v2 = triangleNode.getAttribute(\"v2\");\n const v3 = triangleNode.getAttribute(\"v3\");\n const p1 = triangleNode.getAttribute(\"p1\");\n const p2 = triangleNode.getAttribute(\"p2\");\n const p3 = triangleNode.getAttribute(\"p3\");\n const pid = triangleNode.getAttribute(\"pid\");\n const triangleProperty = {};\n triangleProperty[\"v1\"] = parseInt(v1, 10);\n triangleProperty[\"v2\"] = parseInt(v2, 10);\n triangleProperty[\"v3\"] = parseInt(v3, 10);\n triangles.push(triangleProperty[\"v1\"], triangleProperty[\"v2\"], triangleProperty[\"v3\"]);\n if (p1) {\n triangleProperty[\"p1\"] = parseInt(p1, 10);\n }\n if (p2) {\n triangleProperty[\"p2\"] = parseInt(p2, 10);\n }\n if (p3) {\n triangleProperty[\"p3\"] = parseInt(p3, 10);\n }\n if (pid) {\n triangleProperty[\"pid\"] = pid;\n }\n if (0 < Object.keys(triangleProperty).length) {\n triangleProperties.push(triangleProperty);\n }\n }\n meshData[\"triangleProperties\"] = triangleProperties;\n meshData[\"triangles\"] = new Uint32Array(triangles);\n return meshData;\n }\n function parseComponentsNode(componentsNode) {\n const components = [];\n const componentNodes = componentsNode.querySelectorAll(\"component\");\n for (let i = 0; i < componentNodes.length; i++) {\n const componentNode = componentNodes[i];\n const componentData = parseComponentNode(componentNode);\n components.push(componentData);\n }\n return components;\n }\n function parseComponentNode(componentNode) {\n const componentData = {};\n componentData[\"objectId\"] = componentNode.getAttribute(\"objectid\");\n const transform = componentNode.getAttribute(\"transform\");\n if (transform) {\n componentData[\"transform\"] = parseTransform(transform);\n }\n return componentData;\n }\n function parseTransform(transform) {\n const t = [];\n transform.split(\" \").forEach(function(s) {\n t.push(parseFloat(s));\n });\n const matrix = new Matrix4();\n matrix.set(t[0], t[3], t[6], t[9], t[1], t[4], t[7], t[10], t[2], t[5], t[8], t[11], 0, 0, 0, 1);\n return matrix;\n }\n function parseObjectNode(objectNode) {\n const objectData = {\n type: objectNode.getAttribute(\"type\")\n };\n const id = objectNode.getAttribute(\"id\");\n if (id) {\n objectData[\"id\"] = id;\n }\n const pid = objectNode.getAttribute(\"pid\");\n if (pid) {\n objectData[\"pid\"] = pid;\n }\n const pindex = objectNode.getAttribute(\"pindex\");\n if (pindex) {\n objectData[\"pindex\"] = pindex;\n }\n const thumbnail = objectNode.getAttribute(\"thumbnail\");\n if (thumbnail) {\n objectData[\"thumbnail\"] = thumbnail;\n }\n const partnumber = objectNode.getAttribute(\"partnumber\");\n if (partnumber) {\n objectData[\"partnumber\"] = partnumber;\n }\n const name = objectNode.getAttribute(\"name\");\n if (name) {\n objectData[\"name\"] = name;\n }\n const meshNode = objectNode.querySelector(\"mesh\");\n if (meshNode) {\n objectData[\"mesh\"] = parseMeshNode(meshNode);\n }\n const componentsNode = objectNode.querySelector(\"components\");\n if (componentsNode) {\n objectData[\"components\"] = parseComponentsNode(componentsNode);\n }\n return objectData;\n }\n function parseResourcesNode(resourcesNode) {\n const resourcesData = {};\n resourcesData[\"basematerials\"] = {};\n const basematerialsNodes = resourcesNode.querySelectorAll(\"basematerials\");\n for (let i = 0; i < basematerialsNodes.length; i++) {\n const basematerialsNode = basematerialsNodes[i];\n const basematerialsData = parseBasematerialsNode(basematerialsNode);\n resourcesData[\"basematerials\"][basematerialsData[\"id\"]] = basematerialsData;\n }\n resourcesData[\"texture2d\"] = {};\n const textures2DNodes = resourcesNode.querySelectorAll(\"texture2d\");\n for (let i = 0; i < textures2DNodes.length; i++) {\n const textures2DNode = textures2DNodes[i];\n const texture2DData = parseTexture2DNode(textures2DNode);\n resourcesData[\"texture2d\"][texture2DData[\"id\"]] = texture2DData;\n }\n resourcesData[\"colorgroup\"] = {};\n const colorGroupNodes = resourcesNode.querySelectorAll(\"colorgroup\");\n for (let i = 0; i < colorGroupNodes.length; i++) {\n const colorGroupNode = colorGroupNodes[i];\n const colorGroupData = parseColorGroupNode(colorGroupNode);\n resourcesData[\"colorgroup\"][colorGroupData[\"id\"]] = colorGroupData;\n }\n resourcesData[\"pbmetallicdisplayproperties\"] = {};\n const pbmetallicdisplaypropertiesNodes = resourcesNode.querySelectorAll(\"pbmetallicdisplayproperties\");\n for (let i = 0; i < pbmetallicdisplaypropertiesNodes.length; i++) {\n const pbmetallicdisplaypropertiesNode = pbmetallicdisplaypropertiesNodes[i];\n const pbmetallicdisplaypropertiesData = parseMetallicDisplaypropertiesNode(pbmetallicdisplaypropertiesNode);\n resourcesData[\"pbmetallicdisplayproperties\"][pbmetallicdisplaypropertiesData[\"id\"]] = pbmetallicdisplaypropertiesData;\n }\n resourcesData[\"texture2dgroup\"] = {};\n const textures2DGroupNodes = resourcesNode.querySelectorAll(\"texture2dgroup\");\n for (let i = 0; i < textures2DGroupNodes.length; i++) {\n const textures2DGroupNode = textures2DGroupNodes[i];\n const textures2DGroupData = parseTextures2DGroupNode(textures2DGroupNode);\n resourcesData[\"texture2dgroup\"][textures2DGroupData[\"id\"]] = textures2DGroupData;\n }\n resourcesData[\"object\"] = {};\n const objectNodes = resourcesNode.querySelectorAll(\"object\");\n for (let i = 0; i < objectNodes.length; i++) {\n const objectNode = objectNodes[i];\n const objectData = parseObjectNode(objectNode);\n resourcesData[\"object\"][objectData[\"id\"]] = objectData;\n }\n return resourcesData;\n }\n function parseBuildNode(buildNode) {\n const buildData = [];\n const itemNodes = buildNode.querySelectorAll(\"item\");\n for (let i = 0; i < itemNodes.length; i++) {\n const itemNode = itemNodes[i];\n const buildItem = {\n objectId: itemNode.getAttribute(\"objectid\")\n };\n const transform = itemNode.getAttribute(\"transform\");\n if (transform) {\n buildItem[\"transform\"] = parseTransform(transform);\n }\n buildData.push(buildItem);\n }\n return buildData;\n }\n function parseModelNode(modelNode) {\n const modelData = { unit: modelNode.getAttribute(\"unit\") || \"millimeter\" };\n const metadataNodes = modelNode.querySelectorAll(\"metadata\");\n if (metadataNodes) {\n modelData[\"metadata\"] = parseMetadataNodes(metadataNodes);\n }\n const resourcesNode = modelNode.querySelector(\"resources\");\n if (resourcesNode) {\n modelData[\"resources\"] = parseResourcesNode(resourcesNode);\n }\n const buildNode = modelNode.querySelector(\"build\");\n if (buildNode) {\n modelData[\"build\"] = parseBuildNode(buildNode);\n }\n return modelData;\n }\n function buildTexture(texture2dgroup, objects2, modelData, textureData) {\n const texid = texture2dgroup.texid;\n const texture2ds = modelData.resources.texture2d;\n const texture2d = texture2ds[texid];\n if (texture2d) {\n const data2 = textureData[texture2d.path];\n const type = texture2d.contenttype;\n const blob = new Blob([data2], { type });\n const sourceURI = URL.createObjectURL(blob);\n const texture = textureLoader.load(sourceURI, function() {\n URL.revokeObjectURL(sourceURI);\n });\n if (\"colorSpace\" in texture)\n texture.colorSpace = \"srgb\";\n else\n texture.encoding = 3001;\n switch (texture2d.tilestyleu) {\n case \"wrap\":\n texture.wrapS = RepeatWrapping;\n break;\n case \"mirror\":\n texture.wrapS = MirroredRepeatWrapping;\n break;\n case \"none\":\n case \"clamp\":\n texture.wrapS = ClampToEdgeWrapping;\n break;\n default:\n texture.wrapS = RepeatWrapping;\n }\n switch (texture2d.tilestylev) {\n case \"wrap\":\n texture.wrapT = RepeatWrapping;\n break;\n case \"mirror\":\n texture.wrapT = MirroredRepeatWrapping;\n break;\n case \"none\":\n case \"clamp\":\n texture.wrapT = ClampToEdgeWrapping;\n break;\n default:\n texture.wrapT = RepeatWrapping;\n }\n switch (texture2d.filter) {\n case \"auto\":\n texture.magFilter = LinearFilter;\n texture.minFilter = LinearMipmapLinearFilter;\n break;\n case \"linear\":\n texture.magFilter = LinearFilter;\n texture.minFilter = LinearFilter;\n break;\n case \"nearest\":\n texture.magFilter = NearestFilter;\n texture.minFilter = NearestFilter;\n break;\n default:\n texture.magFilter = LinearFilter;\n texture.minFilter = LinearMipmapLinearFilter;\n }\n return texture;\n } else {\n return null;\n }\n }\n function buildBasematerialsMeshes(basematerials, triangleProperties, meshData, objects2, modelData, textureData, objectData) {\n const objectPindex = objectData.pindex;\n const materialMap = {};\n for (let i = 0, l = triangleProperties.length; i < l; i++) {\n const triangleProperty = triangleProperties[i];\n const pindex = triangleProperty.p1 !== void 0 ? triangleProperty.p1 : objectPindex;\n if (materialMap[pindex] === void 0)\n materialMap[pindex] = [];\n materialMap[pindex].push(triangleProperty);\n }\n const keys = Object.keys(materialMap);\n const meshes = [];\n for (let i = 0, l = keys.length; i < l; i++) {\n const materialIndex = keys[i];\n const trianglePropertiesProps = materialMap[materialIndex];\n const basematerialData = basematerials.basematerials[materialIndex];\n const material = getBuild(basematerialData, objects2, modelData, textureData, objectData, buildBasematerial);\n const geometry = new BufferGeometry();\n const positionData = [];\n const vertices = meshData.vertices;\n for (let j = 0, jl = trianglePropertiesProps.length; j < jl; j++) {\n const triangleProperty = trianglePropertiesProps[j];\n positionData.push(vertices[triangleProperty.v1 * 3 + 0]);\n positionData.push(vertices[triangleProperty.v1 * 3 + 1]);\n positionData.push(vertices[triangleProperty.v1 * 3 + 2]);\n positionData.push(vertices[triangleProperty.v2 * 3 + 0]);\n positionData.push(vertices[triangleProperty.v2 * 3 + 1]);\n positionData.push(vertices[triangleProperty.v2 * 3 + 2]);\n positionData.push(vertices[triangleProperty.v3 * 3 + 0]);\n positionData.push(vertices[triangleProperty.v3 * 3 + 1]);\n positionData.push(vertices[triangleProperty.v3 * 3 + 2]);\n }\n geometry.setAttribute(\"position\", new Float32BufferAttribute(positionData, 3));\n const mesh = new Mesh(geometry, material);\n meshes.push(mesh);\n }\n return meshes;\n }\n function buildTexturedMesh(texture2dgroup, triangleProperties, meshData, objects2, modelData, textureData, objectData) {\n const geometry = new BufferGeometry();\n const positionData = [];\n const uvData = [];\n const vertices = meshData.vertices;\n const uvs = texture2dgroup.uvs;\n for (let i = 0, l = triangleProperties.length; i < l; i++) {\n const triangleProperty = triangleProperties[i];\n positionData.push(vertices[triangleProperty.v1 * 3 + 0]);\n positionData.push(vertices[triangleProperty.v1 * 3 + 1]);\n positionData.push(vertices[triangleProperty.v1 * 3 + 2]);\n positionData.push(vertices[triangleProperty.v2 * 3 + 0]);\n positionData.push(vertices[triangleProperty.v2 * 3 + 1]);\n positionData.push(vertices[triangleProperty.v2 * 3 + 2]);\n positionData.push(vertices[triangleProperty.v3 * 3 + 0]);\n positionData.push(vertices[triangleProperty.v3 * 3 + 1]);\n positionData.push(vertices[triangleProperty.v3 * 3 + 2]);\n uvData.push(uvs[triangleProperty.p1 * 2 + 0]);\n uvData.push(uvs[triangleProperty.p1 * 2 + 1]);\n uvData.push(uvs[triangleProperty.p2 * 2 + 0]);\n uvData.push(uvs[triangleProperty.p2 * 2 + 1]);\n uvData.push(uvs[triangleProperty.p3 * 2 + 0]);\n uvData.push(uvs[triangleProperty.p3 * 2 + 1]);\n }\n geometry.setAttribute(\"position\", new Float32BufferAttribute(positionData, 3));\n geometry.setAttribute(\"uv\", new Float32BufferAttribute(uvData, 2));\n const texture = getBuild(texture2dgroup, objects2, modelData, textureData, objectData, buildTexture);\n const material = new MeshPhongMaterial({ map: texture, flatShading: true });\n const mesh = new Mesh(geometry, material);\n return mesh;\n }\n function buildVertexColorMesh(colorgroup, triangleProperties, meshData, objects2, modelData, objectData) {\n const geometry = new BufferGeometry();\n const positionData = [];\n const colorData = [];\n const vertices = meshData.vertices;\n const colors = colorgroup.colors;\n for (let i = 0, l = triangleProperties.length; i < l; i++) {\n const triangleProperty = triangleProperties[i];\n const v1 = triangleProperty.v1;\n const v2 = triangleProperty.v2;\n const v3 = triangleProperty.v3;\n positionData.push(vertices[v1 * 3 + 0]);\n positionData.push(vertices[v1 * 3 + 1]);\n positionData.push(vertices[v1 * 3 + 2]);\n positionData.push(vertices[v2 * 3 + 0]);\n positionData.push(vertices[v2 * 3 + 1]);\n positionData.push(vertices[v2 * 3 + 2]);\n positionData.push(vertices[v3 * 3 + 0]);\n positionData.push(vertices[v3 * 3 + 1]);\n positionData.push(vertices[v3 * 3 + 2]);\n const p1 = triangleProperty.p1 !== void 0 ? triangleProperty.p1 : objectData.pindex;\n const p2 = triangleProperty.p2 !== void 0 ? triangleProperty.p2 : p1;\n const p3 = triangleProperty.p3 !== void 0 ? triangleProperty.p3 : p1;\n colorData.push(colors[p1 * 3 + 0]);\n colorData.push(colors[p1 * 3 + 1]);\n colorData.push(colors[p1 * 3 + 2]);\n colorData.push(colors[p2 * 3 + 0]);\n colorData.push(colors[p2 * 3 + 1]);\n colorData.push(colors[p2 * 3 + 2]);\n colorData.push(colors[p3 * 3 + 0]);\n colorData.push(colors[p3 * 3 + 1]);\n colorData.push(colors[p3 * 3 + 2]);\n }\n geometry.setAttribute(\"position\", new Float32BufferAttribute(positionData, 3));\n geometry.setAttribute(\"color\", new Float32BufferAttribute(colorData, 3));\n const material = new MeshPhongMaterial({ vertexColors: true, flatShading: true });\n const mesh = new Mesh(geometry, material);\n return mesh;\n }\n function buildDefaultMesh(meshData) {\n const geometry = new BufferGeometry();\n geometry.setIndex(new BufferAttribute(meshData[\"triangles\"], 1));\n geometry.setAttribute(\"position\", new BufferAttribute(meshData[\"vertices\"], 3));\n const material = new MeshPhongMaterial({ color: 11184895, flatShading: true });\n const mesh = new Mesh(geometry, material);\n return mesh;\n }\n function buildMeshes(resourceMap, meshData, objects2, modelData, textureData, objectData) {\n const keys = Object.keys(resourceMap);\n const meshes = [];\n for (let i = 0, il = keys.length; i < il; i++) {\n const resourceId = keys[i];\n const triangleProperties = resourceMap[resourceId];\n const resourceType = getResourceType(resourceId, modelData);\n switch (resourceType) {\n case \"material\":\n const basematerials = modelData.resources.basematerials[resourceId];\n const newMeshes = buildBasematerialsMeshes(\n basematerials,\n triangleProperties,\n meshData,\n objects2,\n modelData,\n textureData,\n objectData\n );\n for (let j = 0, jl = newMeshes.length; j < jl; j++) {\n meshes.push(newMeshes[j]);\n }\n break;\n case \"texture\":\n const texture2dgroup = modelData.resources.texture2dgroup[resourceId];\n meshes.push(\n buildTexturedMesh(\n texture2dgroup,\n triangleProperties,\n meshData,\n objects2,\n modelData,\n textureData,\n objectData\n )\n );\n break;\n case \"vertexColors\":\n const colorgroup = modelData.resources.colorgroup[resourceId];\n meshes.push(buildVertexColorMesh(colorgroup, triangleProperties, meshData, objects2, modelData, objectData));\n break;\n case \"default\":\n meshes.push(buildDefaultMesh(meshData));\n break;\n default:\n console.error(\"THREE.3MFLoader: Unsupported resource type.\");\n }\n }\n return meshes;\n }\n function getResourceType(pid, modelData) {\n if (modelData.resources.texture2dgroup[pid] !== void 0) {\n return \"texture\";\n } else if (modelData.resources.basematerials[pid] !== void 0) {\n return \"material\";\n } else if (modelData.resources.colorgroup[pid] !== void 0) {\n return \"vertexColors\";\n } else if (pid === \"default\") {\n return \"default\";\n } else {\n return void 0;\n }\n }\n function analyzeObject(modelData, meshData, objectData) {\n const resourceMap = {};\n const triangleProperties = meshData[\"triangleProperties\"];\n const objectPid = objectData.pid;\n for (let i = 0, l = triangleProperties.length; i < l; i++) {\n const triangleProperty = triangleProperties[i];\n let pid = triangleProperty.pid !== void 0 ? triangleProperty.pid : objectPid;\n if (pid === void 0)\n pid = \"default\";\n if (resourceMap[pid] === void 0)\n resourceMap[pid] = [];\n resourceMap[pid].push(triangleProperty);\n }\n return resourceMap;\n }\n function buildGroup(meshData, objects2, modelData, textureData, objectData) {\n const group = new Group();\n const resourceMap = analyzeObject(modelData, meshData, objectData);\n const meshes = buildMeshes(resourceMap, meshData, objects2, modelData, textureData, objectData);\n for (let i = 0, l = meshes.length; i < l; i++) {\n group.add(meshes[i]);\n }\n return group;\n }\n function applyExtensions(extensions, meshData, modelXml) {\n if (!extensions) {\n return;\n }\n const availableExtensions = [];\n const keys = Object.keys(extensions);\n for (let i = 0; i < keys.length; i++) {\n const ns = keys[i];\n for (let j = 0; j < scope.availableExtensions.length; j++) {\n const extension = scope.availableExtensions[j];\n if (extension.ns === ns) {\n availableExtensions.push(extension);\n }\n }\n }\n for (let i = 0; i < availableExtensions.length; i++) {\n const extension = availableExtensions[i];\n extension.apply(modelXml, extensions[extension[\"ns\"]], meshData);\n }\n }\n function getBuild(data2, objects2, modelData, textureData, objectData, builder) {\n if (data2.build !== void 0)\n return data2.build;\n data2.build = builder(data2, objects2, modelData, textureData, objectData);\n return data2.build;\n }\n function buildBasematerial(materialData, objects2, modelData) {\n let material;\n const displaypropertiesid = materialData.displaypropertiesid;\n const pbmetallicdisplayproperties = modelData.resources.pbmetallicdisplayproperties;\n if (displaypropertiesid !== null && pbmetallicdisplayproperties[displaypropertiesid] !== void 0) {\n const pbmetallicdisplayproperty = pbmetallicdisplayproperties[displaypropertiesid];\n const metallicData = pbmetallicdisplayproperty.data[materialData.index];\n material = new MeshStandardMaterial({\n flatShading: true,\n roughness: metallicData.roughness,\n metalness: metallicData.metallicness\n });\n } else {\n material = new MeshPhongMaterial({ flatShading: true });\n }\n material.name = materialData.name;\n const displaycolor = materialData.displaycolor;\n const color = displaycolor.substring(0, 7);\n material.color.setStyle(color);\n material.color.convertSRGBToLinear();\n if (displaycolor.length === 9) {\n material.opacity = parseInt(displaycolor.charAt(7) + displaycolor.charAt(8), 16) / 255;\n }\n return material;\n }\n function buildComposite(compositeData, objects2, modelData, textureData) {\n const composite = new Group();\n for (let j = 0; j < compositeData.length; j++) {\n const component = compositeData[j];\n let build2 = objects2[component.objectId];\n if (build2 === void 0) {\n buildObject(component.objectId, objects2, modelData, textureData);\n build2 = objects2[component.objectId];\n }\n const object3D = build2.clone();\n const transform = component.transform;\n if (transform) {\n object3D.applyMatrix4(transform);\n }\n composite.add(object3D);\n }\n return composite;\n }\n function buildObject(objectId, objects2, modelData, textureData) {\n const objectData = modelData[\"resources\"][\"object\"][objectId];\n if (objectData[\"mesh\"]) {\n const meshData = objectData[\"mesh\"];\n const extensions = modelData[\"extensions\"];\n const modelXml = modelData[\"xml\"];\n applyExtensions(extensions, meshData, modelXml);\n objects2[objectData.id] = getBuild(meshData, objects2, modelData, textureData, objectData, buildGroup);\n } else {\n const compositeData = objectData[\"components\"];\n objects2[objectData.id] = getBuild(compositeData, objects2, modelData, textureData, objectData, buildComposite);\n }\n }\n function buildObjects(data3mf2) {\n const modelsData = data3mf2.model;\n const modelRels = data3mf2.modelRels;\n const objects2 = {};\n const modelsKeys = Object.keys(modelsData);\n const textureData = {};\n if (modelRels) {\n for (let i = 0, l = modelRels.length; i < l; i++) {\n const modelRel = modelRels[i];\n const textureKey = modelRel.target.substring(1);\n if (data3mf2.texture[textureKey]) {\n textureData[modelRel.target] = data3mf2.texture[textureKey];\n }\n }\n }\n for (let i = 0; i < modelsKeys.length; i++) {\n const modelsKey = modelsKeys[i];\n const modelData = modelsData[modelsKey];\n const objectIds = Object.keys(modelData[\"resources\"][\"object\"]);\n for (let j = 0; j < objectIds.length; j++) {\n const objectId = objectIds[j];\n buildObject(objectId, objects2, modelData, textureData);\n }\n }\n return objects2;\n }\n function fetch3DModelPart(rels) {\n for (let i = 0; i < rels.length; i++) {\n const rel = rels[i];\n const extension = rel.target.split(\".\").pop();\n if (extension.toLowerCase() === \"model\")\n return rel;\n }\n }\n function build(objects2, data3mf2) {\n const group = new Group();\n const relationship = fetch3DModelPart(data3mf2[\"rels\"]);\n const buildData = data3mf2.model[relationship[\"target\"].substring(1)][\"build\"];\n for (let i = 0; i < buildData.length; i++) {\n const buildItem = buildData[i];\n const object3D = objects2[buildItem[\"objectId\"]];\n const transform = buildItem[\"transform\"];\n if (transform) {\n object3D.applyMatrix4(transform);\n }\n group.add(object3D);\n }\n return group;\n }\n const data3mf = loadDocument(data);\n const objects = buildObjects(data3mf);\n return build(objects, data3mf);\n }\n addExtension(extension) {\n this.availableExtensions.push(extension);\n }\n}\nexport {\n ThreeMFLoader\n};\n//# sourceMappingURL=3MFLoader.js.map\n","import { Loader, FileLoader, BufferGeometry, Float32BufferAttribute } from \"three\";\nclass XYZLoader extends Loader {\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setRequestHeader(this.requestHeader);\n loader.setWithCredentials(this.withCredentials);\n loader.load(\n url,\n function(text) {\n try {\n onLoad(scope.parse(text));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(text) {\n const lines = text.split(\"\\n\");\n const vertices = [];\n const colors = [];\n for (let line of lines) {\n line = line.trim();\n if (line.charAt(0) === \"#\")\n continue;\n const lineValues = line.split(/\\s+/);\n if (lineValues.length === 3) {\n vertices.push(parseFloat(lineValues[0]));\n vertices.push(parseFloat(lineValues[1]));\n vertices.push(parseFloat(lineValues[2]));\n }\n if (lineValues.length === 6) {\n vertices.push(parseFloat(lineValues[0]));\n vertices.push(parseFloat(lineValues[1]));\n vertices.push(parseFloat(lineValues[2]));\n colors.push(parseFloat(lineValues[3]) / 255);\n colors.push(parseFloat(lineValues[4]) / 255);\n colors.push(parseFloat(lineValues[5]) / 255);\n }\n }\n const geometry = new BufferGeometry();\n geometry.setAttribute(\"position\", new Float32BufferAttribute(vertices, 3));\n if (colors.length > 0) {\n geometry.setAttribute(\"color\", new Float32BufferAttribute(colors, 3));\n }\n return geometry;\n }\n}\nexport {\n XYZLoader\n};\n//# sourceMappingURL=XYZLoader.js.map\n","import { Loader, FileLoader, BufferGeometry, Float32BufferAttribute, BufferAttribute } from \"three\";\nimport { unzlibSync } from \"fflate\";\nimport { decodeText } from \"../_polyfill/LoaderUtils.js\";\nclass VTKLoader extends Loader {\n constructor(manager) {\n super(manager);\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const loader = new FileLoader(scope.manager);\n loader.setPath(scope.path);\n loader.setResponseType(\"arraybuffer\");\n loader.setRequestHeader(scope.requestHeader);\n loader.setWithCredentials(scope.withCredentials);\n loader.load(\n url,\n function(text) {\n try {\n onLoad(scope.parse(text));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(data) {\n function parseASCII(data2) {\n var indices = [];\n var positions = [];\n var colors = [];\n var normals = [];\n var result;\n var patWord = /^[^\\d.\\s-]+/;\n var pat3Floats = /(\\-?\\d+\\.?[\\d\\-\\+e]*)\\s+(\\-?\\d+\\.?[\\d\\-\\+e]*)\\s+(\\-?\\d+\\.?[\\d\\-\\+e]*)/g;\n var patConnectivity = /^(\\d+)\\s+([\\s\\d]*)/;\n var patPOINTS = /^POINTS /;\n var patPOLYGONS = /^POLYGONS /;\n var patTRIANGLE_STRIPS = /^TRIANGLE_STRIPS /;\n var patPOINT_DATA = /^POINT_DATA[ ]+(\\d+)/;\n var patCELL_DATA = /^CELL_DATA[ ]+(\\d+)/;\n var patCOLOR_SCALARS = /^COLOR_SCALARS[ ]+(\\w+)[ ]+3/;\n var patNORMALS = /^NORMALS[ ]+(\\w+)[ ]+(\\w+)/;\n var inPointsSection = false;\n var inPolygonsSection = false;\n var inTriangleStripSection = false;\n var inPointDataSection = false;\n var inCellDataSection = false;\n var inColorSection = false;\n var inNormalsSection = false;\n var lines = data2.split(\"\\n\");\n for (var i in lines) {\n var line = lines[i].trim();\n if (line.indexOf(\"DATASET\") === 0) {\n var dataset = line.split(\" \")[1];\n if (dataset !== \"POLYDATA\")\n throw new Error(\"Unsupported DATASET type: \" + dataset);\n } else if (inPointsSection) {\n while ((result = pat3Floats.exec(line)) !== null) {\n if (patWord.exec(line) !== null)\n break;\n var x = parseFloat(result[1]);\n var y = parseFloat(result[2]);\n var z = parseFloat(result[3]);\n positions.push(x, y, z);\n }\n } else if (inPolygonsSection) {\n if ((result = patConnectivity.exec(line)) !== null) {\n var numVertices = parseInt(result[1]);\n var inds = result[2].split(/\\s+/);\n if (numVertices >= 3) {\n var i0 = parseInt(inds[0]);\n var i1, i2;\n var k = 1;\n for (var j = 0; j < numVertices - 2; ++j) {\n i1 = parseInt(inds[k]);\n i2 = parseInt(inds[k + 1]);\n indices.push(i0, i1, i2);\n k++;\n }\n }\n }\n } else if (inTriangleStripSection) {\n if ((result = patConnectivity.exec(line)) !== null) {\n var numVertices = parseInt(result[1]);\n var inds = result[2].split(/\\s+/);\n if (numVertices >= 3) {\n var i0, i1, i2;\n for (var j = 0; j < numVertices - 2; j++) {\n if (j % 2 === 1) {\n i0 = parseInt(inds[j]);\n i1 = parseInt(inds[j + 2]);\n i2 = parseInt(inds[j + 1]);\n indices.push(i0, i1, i2);\n } else {\n i0 = parseInt(inds[j]);\n i1 = parseInt(inds[j + 1]);\n i2 = parseInt(inds[j + 2]);\n indices.push(i0, i1, i2);\n }\n }\n }\n }\n } else if (inPointDataSection || inCellDataSection) {\n if (inColorSection) {\n while ((result = pat3Floats.exec(line)) !== null) {\n if (patWord.exec(line) !== null)\n break;\n var r = parseFloat(result[1]);\n var g = parseFloat(result[2]);\n var b = parseFloat(result[3]);\n colors.push(r, g, b);\n }\n } else if (inNormalsSection) {\n while ((result = pat3Floats.exec(line)) !== null) {\n if (patWord.exec(line) !== null)\n break;\n var nx = parseFloat(result[1]);\n var ny = parseFloat(result[2]);\n var nz = parseFloat(result[3]);\n normals.push(nx, ny, nz);\n }\n }\n }\n if (patPOLYGONS.exec(line) !== null) {\n inPolygonsSection = true;\n inPointsSection = false;\n inTriangleStripSection = false;\n } else if (patPOINTS.exec(line) !== null) {\n inPolygonsSection = false;\n inPointsSection = true;\n inTriangleStripSection = false;\n } else if (patTRIANGLE_STRIPS.exec(line) !== null) {\n inPolygonsSection = false;\n inPointsSection = false;\n inTriangleStripSection = true;\n } else if (patPOINT_DATA.exec(line) !== null) {\n inPointDataSection = true;\n inPointsSection = false;\n inPolygonsSection = false;\n inTriangleStripSection = false;\n } else if (patCELL_DATA.exec(line) !== null) {\n inCellDataSection = true;\n inPointsSection = false;\n inPolygonsSection = false;\n inTriangleStripSection = false;\n } else if (patCOLOR_SCALARS.exec(line) !== null) {\n inColorSection = true;\n inNormalsSection = false;\n inPointsSection = false;\n inPolygonsSection = false;\n inTriangleStripSection = false;\n } else if (patNORMALS.exec(line) !== null) {\n inNormalsSection = true;\n inColorSection = false;\n inPointsSection = false;\n inPolygonsSection = false;\n inTriangleStripSection = false;\n }\n }\n var geometry = new BufferGeometry();\n geometry.setIndex(indices);\n geometry.setAttribute(\"position\", new Float32BufferAttribute(positions, 3));\n if (normals.length === positions.length) {\n geometry.setAttribute(\"normal\", new Float32BufferAttribute(normals, 3));\n }\n if (colors.length !== indices.length) {\n if (colors.length === positions.length) {\n geometry.setAttribute(\"color\", new Float32BufferAttribute(colors, 3));\n }\n } else {\n geometry = geometry.toNonIndexed();\n var numTriangles = geometry.attributes.position.count / 3;\n if (colors.length === numTriangles * 3) {\n var newColors = [];\n for (var i = 0; i < numTriangles; i++) {\n var r = colors[3 * i + 0];\n var g = colors[3 * i + 1];\n var b = colors[3 * i + 2];\n newColors.push(r, g, b);\n newColors.push(r, g, b);\n newColors.push(r, g, b);\n }\n geometry.setAttribute(\"color\", new Float32BufferAttribute(newColors, 3));\n }\n }\n return geometry;\n }\n function parseBinary(data2) {\n var count, pointIndex, i, numberOfPoints, s;\n var buffer = new Uint8Array(data2);\n var dataView = new DataView(data2);\n var points = [];\n var normals = [];\n var indices = [];\n var index = 0;\n function findString(buffer2, start) {\n var index2 = start;\n var c = buffer2[index2];\n var s2 = [];\n while (c !== 10) {\n s2.push(String.fromCharCode(c));\n index2++;\n c = buffer2[index2];\n }\n return { start, end: index2, next: index2 + 1, parsedString: s2.join(\"\") };\n }\n var state, line;\n while (true) {\n state = findString(buffer, index);\n line = state.parsedString;\n if (line.indexOf(\"DATASET\") === 0) {\n var dataset = line.split(\" \")[1];\n if (dataset !== \"POLYDATA\")\n throw new Error(\"Unsupported DATASET type: \" + dataset);\n } else if (line.indexOf(\"POINTS\") === 0) {\n numberOfPoints = parseInt(line.split(\" \")[1], 10);\n count = numberOfPoints * 4 * 3;\n points = new Float32Array(numberOfPoints * 3);\n pointIndex = state.next;\n for (i = 0; i < numberOfPoints; i++) {\n points[3 * i] = dataView.getFloat32(pointIndex, false);\n points[3 * i + 1] = dataView.getFloat32(pointIndex + 4, false);\n points[3 * i + 2] = dataView.getFloat32(pointIndex + 8, false);\n pointIndex = pointIndex + 12;\n }\n state.next = state.next + count + 1;\n } else if (line.indexOf(\"TRIANGLE_STRIPS\") === 0) {\n var numberOfStrips = parseInt(line.split(\" \")[1], 10);\n var size = parseInt(line.split(\" \")[2], 10);\n count = size * 4;\n indices = new Uint32Array(3 * size - 9 * numberOfStrips);\n var indicesIndex = 0;\n pointIndex = state.next;\n for (i = 0; i < numberOfStrips; i++) {\n var indexCount = dataView.getInt32(pointIndex, false);\n var strip = [];\n pointIndex += 4;\n for (s = 0; s < indexCount; s++) {\n strip.push(dataView.getInt32(pointIndex, false));\n pointIndex += 4;\n }\n for (var j = 0; j < indexCount - 2; j++) {\n if (j % 2) {\n indices[indicesIndex++] = strip[j];\n indices[indicesIndex++] = strip[j + 2];\n indices[indicesIndex++] = strip[j + 1];\n } else {\n indices[indicesIndex++] = strip[j];\n indices[indicesIndex++] = strip[j + 1];\n indices[indicesIndex++] = strip[j + 2];\n }\n }\n }\n state.next = state.next + count + 1;\n } else if (line.indexOf(\"POLYGONS\") === 0) {\n var numberOfStrips = parseInt(line.split(\" \")[1], 10);\n var size = parseInt(line.split(\" \")[2], 10);\n count = size * 4;\n indices = new Uint32Array(3 * size - 9 * numberOfStrips);\n var indicesIndex = 0;\n pointIndex = state.next;\n for (i = 0; i < numberOfStrips; i++) {\n var indexCount = dataView.getInt32(pointIndex, false);\n var strip = [];\n pointIndex += 4;\n for (s = 0; s < indexCount; s++) {\n strip.push(dataView.getInt32(pointIndex, false));\n pointIndex += 4;\n }\n for (var j = 1; j < indexCount - 1; j++) {\n indices[indicesIndex++] = strip[0];\n indices[indicesIndex++] = strip[j];\n indices[indicesIndex++] = strip[j + 1];\n }\n }\n state.next = state.next + count + 1;\n } else if (line.indexOf(\"POINT_DATA\") === 0) {\n numberOfPoints = parseInt(line.split(\" \")[1], 10);\n state = findString(buffer, state.next);\n count = numberOfPoints * 4 * 3;\n normals = new Float32Array(numberOfPoints * 3);\n pointIndex = state.next;\n for (i = 0; i < numberOfPoints; i++) {\n normals[3 * i] = dataView.getFloat32(pointIndex, false);\n normals[3 * i + 1] = dataView.getFloat32(pointIndex + 4, false);\n normals[3 * i + 2] = dataView.getFloat32(pointIndex + 8, false);\n pointIndex += 12;\n }\n state.next = state.next + count;\n }\n index = state.next;\n if (index >= buffer.byteLength) {\n break;\n }\n }\n var geometry = new BufferGeometry();\n geometry.setIndex(new BufferAttribute(indices, 1));\n geometry.setAttribute(\"position\", new BufferAttribute(points, 3));\n if (normals.length === points.length) {\n geometry.setAttribute(\"normal\", new BufferAttribute(normals, 3));\n }\n return geometry;\n }\n function Float32Concat(first, second) {\n const firstLength = first.length, result = new Float32Array(firstLength + second.length);\n result.set(first);\n result.set(second, firstLength);\n return result;\n }\n function Int32Concat(first, second) {\n var firstLength = first.length, result = new Int32Array(firstLength + second.length);\n result.set(first);\n result.set(second, firstLength);\n return result;\n }\n function parseXML(stringFile) {\n function xmlToJson(xml) {\n var obj = {};\n if (xml.nodeType === 1) {\n if (xml.attributes) {\n if (xml.attributes.length > 0) {\n obj[\"attributes\"] = {};\n for (var j2 = 0; j2 < xml.attributes.length; j2++) {\n var attribute = xml.attributes.item(j2);\n obj[\"attributes\"][attribute.nodeName] = attribute.nodeValue.trim();\n }\n }\n }\n } else if (xml.nodeType === 3) {\n obj = xml.nodeValue.trim();\n }\n if (xml.hasChildNodes()) {\n for (var i2 = 0; i2 < xml.childNodes.length; i2++) {\n var item = xml.childNodes.item(i2);\n var nodeName = item.nodeName;\n if (typeof obj[nodeName] === \"undefined\") {\n var tmp = xmlToJson(item);\n if (tmp !== \"\")\n obj[nodeName] = tmp;\n } else {\n if (typeof obj[nodeName].push === \"undefined\") {\n var old = obj[nodeName];\n obj[nodeName] = [old];\n }\n var tmp = xmlToJson(item);\n if (tmp !== \"\")\n obj[nodeName].push(tmp);\n }\n }\n }\n return obj;\n }\n function Base64toByteArray(b64) {\n var Arr = typeof Uint8Array !== \"undefined\" ? Uint8Array : Array;\n var i2;\n var revLookup = [];\n var code = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n var len2 = code.length;\n for (i2 = 0; i2 < len2; i2++) {\n }\n for (i2 = 0; i2 < len2; ++i2) {\n revLookup[code.charCodeAt(i2)] = i2;\n }\n revLookup[\"-\".charCodeAt(0)] = 62;\n revLookup[\"_\".charCodeAt(0)] = 63;\n var j2, l, tmp, placeHolders, arr2;\n var len2 = b64.length;\n if (len2 % 4 > 0) {\n throw new Error(\"Invalid string. Length must be a multiple of 4\");\n }\n placeHolders = b64[len2 - 2] === \"=\" ? 2 : b64[len2 - 1] === \"=\" ? 1 : 0;\n arr2 = new Arr(len2 * 3 / 4 - placeHolders);\n l = placeHolders > 0 ? len2 - 4 : len2;\n var L = 0;\n for (i2 = 0, j2 = 0; i2 < l; i2 += 4, j2 += 3) {\n tmp = revLookup[b64.charCodeAt(i2)] << 18 | revLookup[b64.charCodeAt(i2 + 1)] << 12 | revLookup[b64.charCodeAt(i2 + 2)] << 6 | revLookup[b64.charCodeAt(i2 + 3)];\n arr2[L++] = (tmp & 16711680) >> 16;\n arr2[L++] = (tmp & 65280) >> 8;\n arr2[L++] = tmp & 255;\n }\n if (placeHolders === 2) {\n tmp = revLookup[b64.charCodeAt(i2)] << 2 | revLookup[b64.charCodeAt(i2 + 1)] >> 4;\n arr2[L++] = tmp & 255;\n } else if (placeHolders === 1) {\n tmp = revLookup[b64.charCodeAt(i2)] << 10 | revLookup[b64.charCodeAt(i2 + 1)] << 4 | revLookup[b64.charCodeAt(i2 + 2)] >> 2;\n arr2[L++] = tmp >> 8 & 255;\n arr2[L++] = tmp & 255;\n }\n return arr2;\n }\n function parseDataArray(ele, compressed2) {\n var numBytes = 0;\n if (json.attributes.header_type === \"UInt64\") {\n numBytes = 8;\n } else if (json.attributes.header_type === \"UInt32\") {\n numBytes = 4;\n }\n if (ele.attributes.format === \"binary\" && compressed2) {\n var rawData, content, byteData, blocks, cSizeStart, headerSize, padding, dataOffsets, currentOffset;\n if (ele.attributes.type === \"Float32\") {\n var txt = new Float32Array();\n } else if (ele.attributes.type === \"Int64\") {\n var txt = new Int32Array();\n }\n rawData = ele[\"#text\"];\n byteData = Base64toByteArray(rawData);\n blocks = byteData[0];\n for (var i2 = 1; i2 < numBytes - 1; i2++) {\n blocks = blocks | byteData[i2] << i2 * numBytes;\n }\n headerSize = (blocks + 3) * numBytes;\n padding = headerSize % 3 > 0 ? 3 - headerSize % 3 : 0;\n headerSize = headerSize + padding;\n dataOffsets = [];\n currentOffset = headerSize;\n dataOffsets.push(currentOffset);\n cSizeStart = 3 * numBytes;\n for (var i2 = 0; i2 < blocks; i2++) {\n var currentBlockSize = byteData[i2 * numBytes + cSizeStart];\n for (var j2 = 1; j2 < numBytes - 1; j2++) {\n currentBlockSize = currentBlockSize | byteData[i2 * numBytes + cSizeStart + j2] << j2 * 8;\n }\n currentOffset = currentOffset + currentBlockSize;\n dataOffsets.push(currentOffset);\n }\n for (var i2 = 0; i2 < dataOffsets.length - 1; i2++) {\n var data2 = unzlibSync(byteData.slice(dataOffsets[i2], dataOffsets[i2 + 1]));\n content = data2.buffer;\n if (ele.attributes.type === \"Float32\") {\n content = new Float32Array(content);\n txt = Float32Concat(txt, content);\n } else if (ele.attributes.type === \"Int64\") {\n content = new Int32Array(content);\n txt = Int32Concat(txt, content);\n }\n }\n delete ele[\"#text\"];\n if (ele.attributes.type === \"Int64\") {\n if (ele.attributes.format === \"binary\") {\n txt = txt.filter(function(el, idx) {\n if (idx % 2 !== 1)\n return true;\n });\n }\n }\n } else {\n if (ele.attributes.format === \"binary\" && !compressed2) {\n var content = Base64toByteArray(ele[\"#text\"]);\n content = content.slice(numBytes).buffer;\n } else {\n if (ele[\"#text\"]) {\n var content = ele[\"#text\"].split(/\\s+/).filter(function(el) {\n if (el !== \"\")\n return el;\n });\n } else {\n var content = new Int32Array(0).buffer;\n }\n }\n delete ele[\"#text\"];\n if (ele.attributes.type === \"Float32\") {\n var txt = new Float32Array(content);\n } else if (ele.attributes.type === \"Int32\") {\n var txt = new Int32Array(content);\n } else if (ele.attributes.type === \"Int64\") {\n var txt = new Int32Array(content);\n if (ele.attributes.format === \"binary\") {\n txt = txt.filter(function(el, idx) {\n if (idx % 2 !== 1)\n return true;\n });\n }\n }\n }\n return txt;\n }\n var dom = null;\n if (window.DOMParser) {\n try {\n dom = new DOMParser().parseFromString(stringFile, \"text/xml\");\n } catch (e) {\n dom = null;\n }\n } else if (window.ActiveXObject) {\n try {\n dom = new ActiveXObject(\"Microsoft.XMLDOM\");\n dom.async = false;\n if (!dom.loadXML(\n /* xml */\n )) {\n throw new Error(dom.parseError.reason + dom.parseError.srcText);\n }\n } catch (e) {\n dom = null;\n }\n } else {\n throw new Error(\"Cannot parse xml string!\");\n }\n var doc = dom.documentElement;\n var json = xmlToJson(doc);\n var points = [];\n var normals = [];\n var indices = [];\n if (json.PolyData) {\n var piece = json.PolyData.Piece;\n var compressed = json.attributes.hasOwnProperty(\"compressor\");\n var sections = [\"PointData\", \"Points\", \"Strips\", \"Polys\"];\n var sectionIndex = 0, numberOfSections = sections.length;\n while (sectionIndex < numberOfSections) {\n var section = piece[sections[sectionIndex]];\n if (section && section.DataArray) {\n if (Object.prototype.toString.call(section.DataArray) === \"[object Array]\") {\n var arr = section.DataArray;\n } else {\n var arr = [section.DataArray];\n }\n var dataArrayIndex = 0, numberOfDataArrays = arr.length;\n while (dataArrayIndex < numberOfDataArrays) {\n if (\"#text\" in arr[dataArrayIndex] && arr[dataArrayIndex][\"#text\"].length > 0) {\n arr[dataArrayIndex].text = parseDataArray(arr[dataArrayIndex], compressed);\n }\n dataArrayIndex++;\n }\n switch (sections[sectionIndex]) {\n case \"PointData\":\n var numberOfPoints = parseInt(piece.attributes.NumberOfPoints);\n var normalsName = section.attributes.Normals;\n if (numberOfPoints > 0) {\n for (var i = 0, len = arr.length; i < len; i++) {\n if (normalsName === arr[i].attributes.Name) {\n var components = arr[i].attributes.NumberOfComponents;\n normals = new Float32Array(numberOfPoints * components);\n normals.set(arr[i].text, 0);\n }\n }\n }\n break;\n case \"Points\":\n var numberOfPoints = parseInt(piece.attributes.NumberOfPoints);\n if (numberOfPoints > 0) {\n var components = section.DataArray.attributes.NumberOfComponents;\n points = new Float32Array(numberOfPoints * components);\n points.set(section.DataArray.text, 0);\n }\n break;\n case \"Strips\":\n var numberOfStrips = parseInt(piece.attributes.NumberOfStrips);\n if (numberOfStrips > 0) {\n var connectivity = new Int32Array(section.DataArray[0].text.length);\n var offset = new Int32Array(section.DataArray[1].text.length);\n connectivity.set(section.DataArray[0].text, 0);\n offset.set(section.DataArray[1].text, 0);\n var size = numberOfStrips + connectivity.length;\n indices = new Uint32Array(3 * size - 9 * numberOfStrips);\n var indicesIndex = 0;\n for (var i = 0, len = numberOfStrips; i < len; i++) {\n var strip = [];\n for (var s = 0, len1 = offset[i], len0 = 0; s < len1 - len0; s++) {\n strip.push(connectivity[s]);\n if (i > 0)\n len0 = offset[i - 1];\n }\n for (var j = 0, len1 = offset[i], len0 = 0; j < len1 - len0 - 2; j++) {\n if (j % 2) {\n indices[indicesIndex++] = strip[j];\n indices[indicesIndex++] = strip[j + 2];\n indices[indicesIndex++] = strip[j + 1];\n } else {\n indices[indicesIndex++] = strip[j];\n indices[indicesIndex++] = strip[j + 1];\n indices[indicesIndex++] = strip[j + 2];\n }\n if (i > 0)\n len0 = offset[i - 1];\n }\n }\n }\n break;\n case \"Polys\":\n var numberOfPolys = parseInt(piece.attributes.NumberOfPolys);\n if (numberOfPolys > 0) {\n var connectivity = new Int32Array(section.DataArray[0].text.length);\n var offset = new Int32Array(section.DataArray[1].text.length);\n connectivity.set(section.DataArray[0].text, 0);\n offset.set(section.DataArray[1].text, 0);\n var size = numberOfPolys + connectivity.length;\n indices = new Uint32Array(3 * size - 9 * numberOfPolys);\n var indicesIndex = 0, connectivityIndex = 0;\n var i = 0, len = numberOfPolys, len0 = 0;\n while (i < len) {\n var poly = [];\n var s = 0, len1 = offset[i];\n while (s < len1 - len0) {\n poly.push(connectivity[connectivityIndex++]);\n s++;\n }\n var j = 1;\n while (j < len1 - len0 - 1) {\n indices[indicesIndex++] = poly[0];\n indices[indicesIndex++] = poly[j];\n indices[indicesIndex++] = poly[j + 1];\n j++;\n }\n i++;\n len0 = offset[i - 1];\n }\n }\n break;\n }\n }\n sectionIndex++;\n }\n var geometry = new BufferGeometry();\n geometry.setIndex(new BufferAttribute(indices, 1));\n geometry.setAttribute(\"position\", new BufferAttribute(points, 3));\n if (normals.length === points.length) {\n geometry.setAttribute(\"normal\", new BufferAttribute(normals, 3));\n }\n return geometry;\n } else {\n throw new Error(\"Unsupported DATASET type\");\n }\n }\n var meta = decodeText(new Uint8Array(data, 0, 250)).split(\"\\n\");\n if (meta[0].indexOf(\"xml\") !== -1) {\n return parseXML(decodeText(data));\n } else if (meta[2].includes(\"ASCII\")) {\n return parseASCII(decodeText(data));\n } else {\n return parseBinary(data);\n }\n }\n}\nexport {\n VTKLoader\n};\n//# sourceMappingURL=VTKLoader.js.map\n","import { Loader, FileLoader, DataTexture, RGBAFormat, UnsignedByteType, LinearFilter, ClampToEdgeWrapping } from \"three\";\nimport { Data3DTexture } from \"../_polyfill/Data3DTexture.js\";\nclass LUT3dlLoader extends Loader {\n load(url, onLoad, onProgress, onError) {\n const loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setResponseType(\"text\");\n loader.load(\n url,\n (text) => {\n try {\n onLoad(this.parse(text));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n this.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(str) {\n str = str.replace(/^#.*?(\\n|\\r)/gm, \"\").replace(/^\\s*?(\\n|\\r)/gm, \"\").trim();\n const lines = str.split(/[\\n\\r]+/g);\n const gridLines = lines[0].trim().split(/\\s+/g).map((e) => parseFloat(e));\n const gridStep = gridLines[1] - gridLines[0];\n const size = gridLines.length;\n for (let i = 1, l = gridLines.length; i < l; i++) {\n if (gridStep !== gridLines[i] - gridLines[i - 1]) {\n throw new Error(\"LUT3dlLoader: Inconsistent grid size not supported.\");\n }\n }\n const dataArray = new Array(size * size * size * 4);\n let index = 0;\n let maxOutputValue = 0;\n for (let i = 1, l = lines.length; i < l; i++) {\n const line = lines[i].trim();\n const split = line.split(/\\s/g);\n const r = parseFloat(split[0]);\n const g = parseFloat(split[1]);\n const b = parseFloat(split[2]);\n maxOutputValue = Math.max(maxOutputValue, r, g, b);\n const bLayer = index % size;\n const gLayer = Math.floor(index / size) % size;\n const rLayer = Math.floor(index / (size * size)) % size;\n const pixelIndex = bLayer * size * size + gLayer * size + rLayer;\n dataArray[4 * pixelIndex + 0] = r;\n dataArray[4 * pixelIndex + 1] = g;\n dataArray[4 * pixelIndex + 2] = b;\n dataArray[4 * pixelIndex + 3] = 1;\n index += 1;\n }\n const bits = Math.ceil(Math.log2(maxOutputValue));\n const maxBitValue = Math.pow(2, bits);\n for (let i = 0, l = dataArray.length; i < l; i += 4) {\n const r = dataArray[i + 0];\n const g = dataArray[i + 1];\n const b = dataArray[i + 2];\n dataArray[i + 0] = 255 * r / maxBitValue;\n dataArray[i + 1] = 255 * g / maxBitValue;\n dataArray[i + 2] = 255 * b / maxBitValue;\n }\n const data = new Uint8Array(dataArray);\n const texture = new DataTexture();\n texture.image.data = data;\n texture.image.width = size;\n texture.image.height = size * size;\n texture.format = RGBAFormat;\n texture.type = UnsignedByteType;\n texture.magFilter = LinearFilter;\n texture.minFilter = LinearFilter;\n texture.wrapS = ClampToEdgeWrapping;\n texture.wrapT = ClampToEdgeWrapping;\n texture.generateMipmaps = false;\n texture.needsUpdate = true;\n const texture3D = new Data3DTexture();\n texture3D.image.data = data;\n texture3D.image.width = size;\n texture3D.image.height = size;\n texture3D.image.depth = size;\n texture3D.format = RGBAFormat;\n texture3D.type = UnsignedByteType;\n texture3D.magFilter = LinearFilter;\n texture3D.minFilter = LinearFilter;\n texture3D.wrapS = ClampToEdgeWrapping;\n texture3D.wrapT = ClampToEdgeWrapping;\n texture3D.wrapR = ClampToEdgeWrapping;\n texture3D.generateMipmaps = false;\n texture3D.needsUpdate = true;\n return {\n size,\n texture,\n texture3D\n };\n }\n}\nexport {\n LUT3dlLoader\n};\n//# sourceMappingURL=LUT3dlLoader.js.map\n","import { CompressedTextureLoader, RGBAFormat, RGB_ETC1_Format, RGBA_S3TC_DXT5_Format, RGBA_S3TC_DXT3_Format, RGB_S3TC_DXT1_Format } from \"three\";\nclass DDSLoader extends CompressedTextureLoader {\n constructor(manager) {\n super(manager);\n }\n parse(buffer, loadMipmaps) {\n const dds = { mipmaps: [], width: 0, height: 0, format: null, mipmapCount: 1 };\n const DDS_MAGIC = 542327876;\n const DDSD_MIPMAPCOUNT = 131072;\n const DDSCAPS2_CUBEMAP = 512;\n const DDSCAPS2_CUBEMAP_POSITIVEX = 1024;\n const DDSCAPS2_CUBEMAP_NEGATIVEX = 2048;\n const DDSCAPS2_CUBEMAP_POSITIVEY = 4096;\n const DDSCAPS2_CUBEMAP_NEGATIVEY = 8192;\n const DDSCAPS2_CUBEMAP_POSITIVEZ = 16384;\n const DDSCAPS2_CUBEMAP_NEGATIVEZ = 32768;\n const DDPF_FOURCC = 4;\n function fourCCToInt32(value) {\n return value.charCodeAt(0) + (value.charCodeAt(1) << 8) + (value.charCodeAt(2) << 16) + (value.charCodeAt(3) << 24);\n }\n function int32ToFourCC(value) {\n return String.fromCharCode(value & 255, value >> 8 & 255, value >> 16 & 255, value >> 24 & 255);\n }\n function loadARGBMip(buffer2, dataOffset2, width, height) {\n const dataLength = width * height * 4;\n const srcBuffer = new Uint8Array(buffer2, dataOffset2, dataLength);\n const byteArray = new Uint8Array(dataLength);\n let dst = 0;\n let src = 0;\n for (let y = 0; y < height; y++) {\n for (let x = 0; x < width; x++) {\n const b = srcBuffer[src];\n src++;\n const g = srcBuffer[src];\n src++;\n const r = srcBuffer[src];\n src++;\n const a = srcBuffer[src];\n src++;\n byteArray[dst] = r;\n dst++;\n byteArray[dst] = g;\n dst++;\n byteArray[dst] = b;\n dst++;\n byteArray[dst] = a;\n dst++;\n }\n }\n return byteArray;\n }\n const FOURCC_DXT1 = fourCCToInt32(\"DXT1\");\n const FOURCC_DXT3 = fourCCToInt32(\"DXT3\");\n const FOURCC_DXT5 = fourCCToInt32(\"DXT5\");\n const FOURCC_ETC1 = fourCCToInt32(\"ETC1\");\n const headerLengthInt = 31;\n const off_magic = 0;\n const off_size = 1;\n const off_flags = 2;\n const off_height = 3;\n const off_width = 4;\n const off_mipmapCount = 7;\n const off_pfFlags = 20;\n const off_pfFourCC = 21;\n const off_RGBBitCount = 22;\n const off_RBitMask = 23;\n const off_GBitMask = 24;\n const off_BBitMask = 25;\n const off_ABitMask = 26;\n const off_caps2 = 28;\n const header = new Int32Array(buffer, 0, headerLengthInt);\n if (header[off_magic] !== DDS_MAGIC) {\n console.error(\"THREE.DDSLoader.parse: Invalid magic number in DDS header.\");\n return dds;\n }\n if (!header[off_pfFlags] & DDPF_FOURCC) {\n console.error(\"THREE.DDSLoader.parse: Unsupported format, must contain a FourCC code.\");\n return dds;\n }\n let blockBytes;\n const fourCC = header[off_pfFourCC];\n let isRGBAUncompressed = false;\n switch (fourCC) {\n case FOURCC_DXT1:\n blockBytes = 8;\n dds.format = RGB_S3TC_DXT1_Format;\n break;\n case FOURCC_DXT3:\n blockBytes = 16;\n dds.format = RGBA_S3TC_DXT3_Format;\n break;\n case FOURCC_DXT5:\n blockBytes = 16;\n dds.format = RGBA_S3TC_DXT5_Format;\n break;\n case FOURCC_ETC1:\n blockBytes = 8;\n dds.format = RGB_ETC1_Format;\n break;\n default:\n if (header[off_RGBBitCount] === 32 && header[off_RBitMask] & 16711680 && header[off_GBitMask] & 65280 && header[off_BBitMask] & 255 && header[off_ABitMask] & 4278190080) {\n isRGBAUncompressed = true;\n blockBytes = 64;\n dds.format = RGBAFormat;\n } else {\n console.error(\"THREE.DDSLoader.parse: Unsupported FourCC code \", int32ToFourCC(fourCC));\n return dds;\n }\n }\n dds.mipmapCount = 1;\n if (header[off_flags] & DDSD_MIPMAPCOUNT && loadMipmaps !== false) {\n dds.mipmapCount = Math.max(1, header[off_mipmapCount]);\n }\n const caps2 = header[off_caps2];\n dds.isCubemap = caps2 & DDSCAPS2_CUBEMAP ? true : false;\n if (dds.isCubemap && (!(caps2 & DDSCAPS2_CUBEMAP_POSITIVEX) || !(caps2 & DDSCAPS2_CUBEMAP_NEGATIVEX) || !(caps2 & DDSCAPS2_CUBEMAP_POSITIVEY) || !(caps2 & DDSCAPS2_CUBEMAP_NEGATIVEY) || !(caps2 & DDSCAPS2_CUBEMAP_POSITIVEZ) || !(caps2 & DDSCAPS2_CUBEMAP_NEGATIVEZ))) {\n console.error(\"THREE.DDSLoader.parse: Incomplete cubemap faces\");\n return dds;\n }\n dds.width = header[off_width];\n dds.height = header[off_height];\n let dataOffset = header[off_size] + 4;\n const faces = dds.isCubemap ? 6 : 1;\n for (let face = 0; face < faces; face++) {\n let width = dds.width;\n let height = dds.height;\n for (let i = 0; i < dds.mipmapCount; i++) {\n let byteArray, dataLength;\n if (isRGBAUncompressed) {\n byteArray = loadARGBMip(buffer, dataOffset, width, height);\n dataLength = byteArray.length;\n } else {\n dataLength = Math.max(4, width) / 4 * Math.max(4, height) / 4 * blockBytes;\n byteArray = new Uint8Array(buffer, dataOffset, dataLength);\n }\n const mipmap = { data: byteArray, width, height };\n dds.mipmaps.push(mipmap);\n dataOffset += dataLength;\n width = Math.max(width >> 1, 1);\n height = Math.max(height >> 1, 1);\n }\n }\n return dds;\n }\n}\nexport {\n DDSLoader\n};\n//# sourceMappingURL=DDSLoader.js.map\n","import { CompressedTextureLoader, RGBA_PVRTC_4BPPV1_Format, RGB_PVRTC_4BPPV1_Format, RGBA_PVRTC_2BPPV1_Format, RGB_PVRTC_2BPPV1_Format } from \"three\";\nclass PVRLoader extends CompressedTextureLoader {\n constructor(manager) {\n super(manager);\n }\n parse(buffer, loadMipmaps) {\n const headerLengthInt = 13;\n const header = new Uint32Array(buffer, 0, headerLengthInt);\n const pvrDatas = {\n buffer,\n header,\n loadMipmaps\n };\n if (header[0] === 55727696) {\n return _parseV3(pvrDatas);\n } else if (header[11] === 559044176) {\n return _parseV2(pvrDatas);\n } else {\n console.error(\"THREE.PVRLoader: Unknown PVR format.\");\n }\n }\n}\nfunction _parseV3(pvrDatas) {\n const header = pvrDatas.header;\n let bpp, format;\n const metaLen = header[12], pixelFormat = header[2], height = header[6], width = header[7], numFaces = header[10], numMipmaps = header[11];\n switch (pixelFormat) {\n case 0:\n bpp = 2;\n format = RGB_PVRTC_2BPPV1_Format;\n break;\n case 1:\n bpp = 2;\n format = RGBA_PVRTC_2BPPV1_Format;\n break;\n case 2:\n bpp = 4;\n format = RGB_PVRTC_4BPPV1_Format;\n break;\n case 3:\n bpp = 4;\n format = RGBA_PVRTC_4BPPV1_Format;\n break;\n default:\n console.error(\"THREE.PVRLoader: Unsupported PVR format:\", pixelFormat);\n }\n pvrDatas.dataPtr = 52 + metaLen;\n pvrDatas.bpp = bpp;\n pvrDatas.format = format;\n pvrDatas.width = width;\n pvrDatas.height = height;\n pvrDatas.numSurfaces = numFaces;\n pvrDatas.numMipmaps = numMipmaps;\n pvrDatas.isCubemap = numFaces === 6;\n return _extract(pvrDatas);\n}\nfunction _parseV2(pvrDatas) {\n const header = pvrDatas.header;\n const headerLength = header[0], height = header[1], width = header[2], numMipmaps = header[3], flags = header[4], bitmaskAlpha = header[10], numSurfs = header[12];\n const TYPE_MASK = 255;\n const PVRTC_2 = 24, PVRTC_4 = 25;\n const formatFlags = flags & TYPE_MASK;\n let bpp, format;\n const _hasAlpha = bitmaskAlpha > 0;\n if (formatFlags === PVRTC_4) {\n format = _hasAlpha ? RGBA_PVRTC_4BPPV1_Format : RGB_PVRTC_4BPPV1_Format;\n bpp = 4;\n } else if (formatFlags === PVRTC_2) {\n format = _hasAlpha ? RGBA_PVRTC_2BPPV1_Format : RGB_PVRTC_2BPPV1_Format;\n bpp = 2;\n } else {\n console.error(\"THREE.PVRLoader: Unknown PVR format:\", formatFlags);\n }\n pvrDatas.dataPtr = headerLength;\n pvrDatas.bpp = bpp;\n pvrDatas.format = format;\n pvrDatas.width = width;\n pvrDatas.height = height;\n pvrDatas.numSurfaces = numSurfs;\n pvrDatas.numMipmaps = numMipmaps + 1;\n pvrDatas.isCubemap = numSurfs === 6;\n return _extract(pvrDatas);\n}\nfunction _extract(pvrDatas) {\n const pvr = {\n mipmaps: [],\n width: pvrDatas.width,\n height: pvrDatas.height,\n format: pvrDatas.format,\n mipmapCount: pvrDatas.numMipmaps,\n isCubemap: pvrDatas.isCubemap\n };\n const buffer = pvrDatas.buffer;\n let dataOffset = pvrDatas.dataPtr, dataSize = 0, blockSize = 0, blockWidth = 0, blockHeight = 0, widthBlocks = 0, heightBlocks = 0;\n const bpp = pvrDatas.bpp, numSurfs = pvrDatas.numSurfaces;\n if (bpp === 2) {\n blockWidth = 8;\n blockHeight = 4;\n } else {\n blockWidth = 4;\n blockHeight = 4;\n }\n blockSize = blockWidth * blockHeight * bpp / 8;\n pvr.mipmaps.length = pvrDatas.numMipmaps * numSurfs;\n let mipLevel = 0;\n while (mipLevel < pvrDatas.numMipmaps) {\n const sWidth = pvrDatas.width >> mipLevel, sHeight = pvrDatas.height >> mipLevel;\n widthBlocks = sWidth / blockWidth;\n heightBlocks = sHeight / blockHeight;\n if (widthBlocks < 2)\n widthBlocks = 2;\n if (heightBlocks < 2)\n heightBlocks = 2;\n dataSize = widthBlocks * heightBlocks * blockSize;\n for (let surfIndex = 0; surfIndex < numSurfs; surfIndex++) {\n const byteArray = new Uint8Array(buffer, dataOffset, dataSize);\n const mipmap = {\n data: byteArray,\n width: sWidth,\n height: sHeight\n };\n pvr.mipmaps[surfIndex * pvrDatas.numMipmaps + mipLevel] = mipmap;\n dataOffset += dataSize;\n }\n mipLevel++;\n }\n return pvr;\n}\nexport {\n PVRLoader\n};\n//# sourceMappingURL=PVRLoader.js.map\n","import { Loader, FileLoader, LineBasicMaterial, Group, Euler, BufferGeometry, Float32BufferAttribute, LineSegments } from \"three\";\nclass GCodeLoader extends Loader {\n constructor(manager) {\n super(manager);\n this.splitLayer = false;\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const loader = new FileLoader(scope.manager);\n loader.setPath(scope.path);\n loader.setRequestHeader(scope.requestHeader);\n loader.setWithCredentials(scope.withCredentials);\n loader.load(\n url,\n function(text) {\n try {\n onLoad(scope.parse(text));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(data) {\n let state = { x: 0, y: 0, z: 0, e: 0, f: 0, extruding: false, relative: false };\n let layers = [];\n let currentLayer = void 0;\n const pathMaterial = new LineBasicMaterial({ color: 16711680 });\n pathMaterial.name = \"path\";\n const extrudingMaterial = new LineBasicMaterial({ color: 65280 });\n extrudingMaterial.name = \"extruded\";\n function newLayer(line) {\n currentLayer = { vertex: [], pathVertex: [], z: line.z };\n layers.push(currentLayer);\n }\n function addSegment(p1, p2) {\n if (currentLayer === void 0) {\n newLayer(p1);\n }\n if (state.extruding) {\n currentLayer.vertex.push(p1.x, p1.y, p1.z);\n currentLayer.vertex.push(p2.x, p2.y, p2.z);\n } else {\n currentLayer.pathVertex.push(p1.x, p1.y, p1.z);\n currentLayer.pathVertex.push(p2.x, p2.y, p2.z);\n }\n }\n function delta(v1, v2) {\n return state.relative ? v2 : v2 - v1;\n }\n function absolute(v1, v2) {\n return state.relative ? v1 + v2 : v2;\n }\n let lines = data.replace(/;.+/g, \"\").split(\"\\n\");\n for (let i = 0; i < lines.length; i++) {\n let tokens = lines[i].split(\" \");\n let cmd = tokens[0].toUpperCase();\n let args = {};\n tokens.splice(1).forEach(function(token) {\n if (token[0] !== void 0) {\n let key = token[0].toLowerCase();\n let value = parseFloat(token.substring(1));\n args[key] = value;\n }\n });\n if (cmd === \"G0\" || cmd === \"G1\") {\n let line = {\n x: args.x !== void 0 ? absolute(state.x, args.x) : state.x,\n y: args.y !== void 0 ? absolute(state.y, args.y) : state.y,\n z: args.z !== void 0 ? absolute(state.z, args.z) : state.z,\n e: args.e !== void 0 ? absolute(state.e, args.e) : state.e,\n f: args.f !== void 0 ? absolute(state.f, args.f) : state.f\n };\n if (delta(state.e, line.e) > 0) {\n line.extruding = delta(state.e, line.e) > 0;\n if (currentLayer == void 0 || line.z != currentLayer.z) {\n newLayer(line);\n }\n }\n addSegment(state, line);\n state = line;\n } else if (cmd === \"G2\" || cmd === \"G3\")\n ;\n else if (cmd === \"G90\") {\n state.relative = false;\n } else if (cmd === \"G91\") {\n state.relative = true;\n } else if (cmd === \"G92\") {\n let line = state;\n line.x = args.x !== void 0 ? args.x : line.x;\n line.y = args.y !== void 0 ? args.y : line.y;\n line.z = args.z !== void 0 ? args.z : line.z;\n line.e = args.e !== void 0 ? args.e : line.e;\n state = line;\n } else\n ;\n }\n function addObject(vertex, extruding, i) {\n let geometry = new BufferGeometry();\n geometry.setAttribute(\"position\", new Float32BufferAttribute(vertex, 3));\n let segments = new LineSegments(geometry, extruding ? extrudingMaterial : pathMaterial);\n segments.name = \"layer\" + i;\n object.add(segments);\n }\n const object = new Group();\n object.name = \"gcode\";\n if (this.splitLayer) {\n for (let i = 0; i < layers.length; i++) {\n let layer = layers[i];\n addObject(layer.vertex, true, i);\n addObject(layer.pathVertex, false, i);\n }\n } else {\n const vertex = [], pathVertex = [];\n for (let i = 0; i < layers.length; i++) {\n let layer = layers[i];\n let layerVertex = layer.vertex;\n let layerPathVertex = layer.pathVertex;\n for (let j = 0; j < layerVertex.length; j++) {\n vertex.push(layerVertex[j]);\n }\n for (let j = 0; j < layerPathVertex.length; j++) {\n pathVertex.push(layerPathVertex[j]);\n }\n }\n addObject(vertex, true, layers.length);\n addObject(pathVertex, false, layers.length);\n }\n object.quaternion.setFromEuler(new Euler(-Math.PI / 2, 0, 0));\n return object;\n }\n}\nexport {\n GCodeLoader\n};\n//# sourceMappingURL=GCodeLoader.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Loader, RGBAFormat, RGBA_ASTC_4x4_Format, RGBA_BPTC_Format, RGBA_ETC2_EAC_Format, RGBA_PVRTC_4BPPV1_Format, RGBA_S3TC_DXT5_Format, RGB_ETC1_Format, RGB_ETC2_Format, RGB_PVRTC_4BPPV1_Format, RGB_S3TC_DXT1_Format, FileLoader, CompressedTexture, UnsignedByteType, LinearFilter, LinearMipmapLinearFilter } from \"three\";\nconst _taskCache = /* @__PURE__ */ new WeakMap();\nconst BasisTextureLoader = /* @__PURE__ */ (() => {\n const _BasisTextureLoader = class extends Loader {\n constructor(manager) {\n super(manager);\n this.transcoderPath = \"\";\n this.transcoderBinary = null;\n this.transcoderPending = null;\n this.workerLimit = 4;\n this.workerPool = [];\n this.workerNextTaskID = 1;\n this.workerSourceURL = \"\";\n this.workerConfig = null;\n }\n setTranscoderPath(path) {\n this.transcoderPath = path;\n return this;\n }\n setWorkerLimit(workerLimit) {\n this.workerLimit = workerLimit;\n return this;\n }\n detectSupport(renderer) {\n this.workerConfig = {\n astcSupported: renderer.extensions.has(\"WEBGL_compressed_texture_astc\"),\n etc1Supported: renderer.extensions.has(\"WEBGL_compressed_texture_etc1\"),\n etc2Supported: renderer.extensions.has(\"WEBGL_compressed_texture_etc\"),\n dxtSupported: renderer.extensions.has(\"WEBGL_compressed_texture_s3tc\"),\n bptcSupported: renderer.extensions.has(\"EXT_texture_compression_bptc\"),\n pvrtcSupported: renderer.extensions.has(\"WEBGL_compressed_texture_pvrtc\") || renderer.extensions.has(\"WEBKIT_WEBGL_compressed_texture_pvrtc\")\n };\n return this;\n }\n load(url, onLoad, onProgress, onError) {\n const loader = new FileLoader(this.manager);\n loader.setResponseType(\"arraybuffer\");\n loader.setWithCredentials(this.withCredentials);\n const texture = new CompressedTexture();\n loader.load(\n url,\n (buffer) => {\n if (_taskCache.has(buffer)) {\n const cachedTask = _taskCache.get(buffer);\n return cachedTask.promise.then(onLoad).catch(onError);\n }\n this._createTexture([buffer]).then(function(_texture) {\n texture.copy(_texture);\n texture.needsUpdate = true;\n if (onLoad)\n onLoad(texture);\n }).catch(onError);\n },\n onProgress,\n onError\n );\n return texture;\n }\n /** Low-level transcoding API, exposed for use by KTX2Loader. */\n parseInternalAsync(options) {\n const { levels } = options;\n const buffers = /* @__PURE__ */ new Set();\n for (let i = 0; i < levels.length; i++) {\n buffers.add(levels[i].data.buffer);\n }\n return this._createTexture(Array.from(buffers), { ...options, lowLevel: true });\n }\n /**\n * @param {ArrayBuffer[]} buffers\n * @param {object?} config\n * @return {Promise<CompressedTexture>}\n */\n _createTexture(buffers, config = {}) {\n let worker;\n let taskID;\n const taskConfig = config;\n let taskCost = 0;\n for (let i = 0; i < buffers.length; i++) {\n taskCost += buffers[i].byteLength;\n }\n const texturePending = this._allocateWorker(taskCost).then((_worker) => {\n worker = _worker;\n taskID = this.workerNextTaskID++;\n return new Promise((resolve, reject) => {\n worker._callbacks[taskID] = { resolve, reject };\n worker.postMessage({ type: \"transcode\", id: taskID, buffers, taskConfig }, buffers);\n });\n }).then((message) => {\n const { mipmaps, width, height, format } = message;\n const texture = new CompressedTexture(mipmaps, width, height, format, UnsignedByteType);\n texture.minFilter = mipmaps.length === 1 ? LinearFilter : LinearMipmapLinearFilter;\n texture.magFilter = LinearFilter;\n texture.generateMipmaps = false;\n texture.needsUpdate = true;\n return texture;\n });\n texturePending.catch(() => true).then(() => {\n if (worker && taskID) {\n worker._taskLoad -= taskCost;\n delete worker._callbacks[taskID];\n }\n });\n _taskCache.set(buffers[0], { promise: texturePending });\n return texturePending;\n }\n _initTranscoder() {\n if (!this.transcoderPending) {\n const jsLoader = new FileLoader(this.manager);\n jsLoader.setPath(this.transcoderPath);\n jsLoader.setWithCredentials(this.withCredentials);\n const jsContent = new Promise((resolve, reject) => {\n jsLoader.load(\"basis_transcoder.js\", resolve, void 0, reject);\n });\n const binaryLoader = new FileLoader(this.manager);\n binaryLoader.setPath(this.transcoderPath);\n binaryLoader.setResponseType(\"arraybuffer\");\n binaryLoader.setWithCredentials(this.withCredentials);\n const binaryContent = new Promise((resolve, reject) => {\n binaryLoader.load(\"basis_transcoder.wasm\", resolve, void 0, reject);\n });\n this.transcoderPending = Promise.all([jsContent, binaryContent]).then(([jsContent2, binaryContent2]) => {\n const fn = _BasisTextureLoader.BasisWorker.toString();\n const body = [\n \"/* constants */\",\n \"let _EngineFormat = \" + JSON.stringify(_BasisTextureLoader.EngineFormat),\n \"let _TranscoderFormat = \" + JSON.stringify(_BasisTextureLoader.TranscoderFormat),\n \"let _BasisFormat = \" + JSON.stringify(_BasisTextureLoader.BasisFormat),\n \"/* basis_transcoder.js */\",\n jsContent2,\n \"/* worker */\",\n fn.substring(fn.indexOf(\"{\") + 1, fn.lastIndexOf(\"}\"))\n ].join(\"\\n\");\n this.workerSourceURL = URL.createObjectURL(new Blob([body]));\n this.transcoderBinary = binaryContent2;\n });\n }\n return this.transcoderPending;\n }\n _allocateWorker(taskCost) {\n return this._initTranscoder().then(() => {\n if (this.workerPool.length < this.workerLimit) {\n const worker2 = new Worker(this.workerSourceURL);\n worker2._callbacks = {};\n worker2._taskLoad = 0;\n worker2.postMessage({\n type: \"init\",\n config: this.workerConfig,\n transcoderBinary: this.transcoderBinary\n });\n worker2.onmessage = function(e) {\n const message = e.data;\n switch (message.type) {\n case \"transcode\":\n worker2._callbacks[message.id].resolve(message);\n break;\n case \"error\":\n worker2._callbacks[message.id].reject(message);\n break;\n default:\n console.error('THREE.BasisTextureLoader: Unexpected message, \"' + message.type + '\"');\n }\n };\n this.workerPool.push(worker2);\n } else {\n this.workerPool.sort(function(a, b) {\n return a._taskLoad > b._taskLoad ? -1 : 1;\n });\n }\n const worker = this.workerPool[this.workerPool.length - 1];\n worker._taskLoad += taskCost;\n return worker;\n });\n }\n dispose() {\n for (let i = 0; i < this.workerPool.length; i++) {\n this.workerPool[i].terminate();\n }\n this.workerPool.length = 0;\n return this;\n }\n };\n let BasisTextureLoader2 = _BasisTextureLoader;\n /* CONSTANTS */\n __publicField(BasisTextureLoader2, \"BasisFormat\", {\n ETC1S: 0,\n UASTC_4x4: 1\n });\n __publicField(BasisTextureLoader2, \"TranscoderFormat\", {\n ETC1: 0,\n ETC2: 1,\n BC1: 2,\n BC3: 3,\n BC4: 4,\n BC5: 5,\n BC7_M6_OPAQUE_ONLY: 6,\n BC7_M5: 7,\n PVRTC1_4_RGB: 8,\n PVRTC1_4_RGBA: 9,\n ASTC_4x4: 10,\n ATC_RGB: 11,\n ATC_RGBA_INTERPOLATED_ALPHA: 12,\n RGBA32: 13,\n RGB565: 14,\n BGR565: 15,\n RGBA4444: 16\n });\n __publicField(BasisTextureLoader2, \"EngineFormat\", {\n RGBAFormat,\n RGBA_ASTC_4x4_Format,\n RGBA_BPTC_Format,\n RGBA_ETC2_EAC_Format,\n RGBA_PVRTC_4BPPV1_Format,\n RGBA_S3TC_DXT5_Format,\n RGB_ETC1_Format,\n RGB_ETC2_Format,\n RGB_PVRTC_4BPPV1_Format,\n RGB_S3TC_DXT1_Format\n });\n /* WEB WORKER */\n __publicField(BasisTextureLoader2, \"BasisWorker\", function() {\n let config;\n let transcoderPending;\n let BasisModule;\n const EngineFormat = _EngineFormat;\n const TranscoderFormat = _TranscoderFormat;\n const BasisFormat = _BasisFormat;\n onmessage = function(e) {\n const message = e.data;\n switch (message.type) {\n case \"init\":\n config = message.config;\n init(message.transcoderBinary);\n break;\n case \"transcode\":\n transcoderPending.then(() => {\n try {\n const { width, height, hasAlpha, mipmaps, format } = message.taskConfig.lowLevel ? transcodeLowLevel(message.taskConfig) : transcode(message.buffers[0]);\n const buffers = [];\n for (let i = 0; i < mipmaps.length; ++i) {\n buffers.push(mipmaps[i].data.buffer);\n }\n self.postMessage(\n { type: \"transcode\", id: message.id, width, height, hasAlpha, mipmaps, format },\n buffers\n );\n } catch (error) {\n console.error(error);\n self.postMessage({ type: \"error\", id: message.id, error: error.message });\n }\n });\n break;\n }\n };\n function init(wasmBinary) {\n transcoderPending = new Promise((resolve) => {\n BasisModule = { wasmBinary, onRuntimeInitialized: resolve };\n BASIS(BasisModule);\n }).then(() => {\n BasisModule.initializeBasis();\n });\n }\n function transcodeLowLevel(taskConfig) {\n const { basisFormat, width, height, hasAlpha } = taskConfig;\n const { transcoderFormat, engineFormat } = getTranscoderFormat(basisFormat, width, height, hasAlpha);\n const blockByteLength = BasisModule.getBytesPerBlockOrPixel(transcoderFormat);\n assert(BasisModule.isFormatSupported(transcoderFormat), \"THREE.BasisTextureLoader: Unsupported format.\");\n const mipmaps = [];\n if (basisFormat === BasisFormat.ETC1S) {\n const transcoder = new BasisModule.LowLevelETC1SImageTranscoder();\n const { endpointCount, endpointsData, selectorCount, selectorsData, tablesData } = taskConfig.globalData;\n try {\n let ok;\n ok = transcoder.decodePalettes(endpointCount, endpointsData, selectorCount, selectorsData);\n assert(ok, \"THREE.BasisTextureLoader: decodePalettes() failed.\");\n ok = transcoder.decodeTables(tablesData);\n assert(ok, \"THREE.BasisTextureLoader: decodeTables() failed.\");\n for (let i = 0; i < taskConfig.levels.length; i++) {\n const level = taskConfig.levels[i];\n const imageDesc = taskConfig.globalData.imageDescs[i];\n const dstByteLength = getTranscodedImageByteLength(transcoderFormat, level.width, level.height);\n const dst = new Uint8Array(dstByteLength);\n ok = transcoder.transcodeImage(\n transcoderFormat,\n dst,\n dstByteLength / blockByteLength,\n level.data,\n getWidthInBlocks(transcoderFormat, level.width),\n getHeightInBlocks(transcoderFormat, level.height),\n level.width,\n level.height,\n level.index,\n imageDesc.rgbSliceByteOffset,\n imageDesc.rgbSliceByteLength,\n imageDesc.alphaSliceByteOffset,\n imageDesc.alphaSliceByteLength,\n imageDesc.imageFlags,\n hasAlpha,\n false,\n 0,\n 0\n );\n assert(ok, \"THREE.BasisTextureLoader: transcodeImage() failed for level \" + level.index + \".\");\n mipmaps.push({ data: dst, width: level.width, height: level.height });\n }\n } finally {\n transcoder.delete();\n }\n } else {\n for (let i = 0; i < taskConfig.levels.length; i++) {\n const level = taskConfig.levels[i];\n const dstByteLength = getTranscodedImageByteLength(transcoderFormat, level.width, level.height);\n const dst = new Uint8Array(dstByteLength);\n const ok = BasisModule.transcodeUASTCImage(\n transcoderFormat,\n dst,\n dstByteLength / blockByteLength,\n level.data,\n getWidthInBlocks(transcoderFormat, level.width),\n getHeightInBlocks(transcoderFormat, level.height),\n level.width,\n level.height,\n level.index,\n 0,\n level.data.byteLength,\n 0,\n hasAlpha,\n false,\n 0,\n 0,\n -1,\n -1\n );\n assert(ok, \"THREE.BasisTextureLoader: transcodeUASTCImage() failed for level \" + level.index + \".\");\n mipmaps.push({ data: dst, width: level.width, height: level.height });\n }\n }\n return { width, height, hasAlpha, mipmaps, format: engineFormat };\n }\n function transcode(buffer) {\n const basisFile = new BasisModule.BasisFile(new Uint8Array(buffer));\n const basisFormat = basisFile.isUASTC() ? BasisFormat.UASTC_4x4 : BasisFormat.ETC1S;\n const width = basisFile.getImageWidth(0, 0);\n const height = basisFile.getImageHeight(0, 0);\n const levels = basisFile.getNumLevels(0);\n const hasAlpha = basisFile.getHasAlpha();\n function cleanup() {\n basisFile.close();\n basisFile.delete();\n }\n const { transcoderFormat, engineFormat } = getTranscoderFormat(basisFormat, width, height, hasAlpha);\n if (!width || !height || !levels) {\n cleanup();\n throw new Error(\"THREE.BasisTextureLoader:\tInvalid texture\");\n }\n if (!basisFile.startTranscoding()) {\n cleanup();\n throw new Error(\"THREE.BasisTextureLoader: .startTranscoding failed\");\n }\n const mipmaps = [];\n for (let mip = 0; mip < levels; mip++) {\n const mipWidth = basisFile.getImageWidth(0, mip);\n const mipHeight = basisFile.getImageHeight(0, mip);\n const dst = new Uint8Array(basisFile.getImageTranscodedSizeInBytes(0, mip, transcoderFormat));\n const status = basisFile.transcodeImage(dst, 0, mip, transcoderFormat, 0, hasAlpha);\n if (!status) {\n cleanup();\n throw new Error(\"THREE.BasisTextureLoader: .transcodeImage failed.\");\n }\n mipmaps.push({ data: dst, width: mipWidth, height: mipHeight });\n }\n cleanup();\n return { width, height, hasAlpha, mipmaps, format: engineFormat };\n }\n const FORMAT_OPTIONS = [\n {\n if: \"astcSupported\",\n basisFormat: [BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ASTC_4x4, TranscoderFormat.ASTC_4x4],\n engineFormat: [EngineFormat.RGBA_ASTC_4x4_Format, EngineFormat.RGBA_ASTC_4x4_Format],\n priorityETC1S: Infinity,\n priorityUASTC: 1,\n needsPowerOfTwo: false\n },\n {\n if: \"bptcSupported\",\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.BC7_M5, TranscoderFormat.BC7_M5],\n engineFormat: [EngineFormat.RGBA_BPTC_Format, EngineFormat.RGBA_BPTC_Format],\n priorityETC1S: 3,\n priorityUASTC: 2,\n needsPowerOfTwo: false\n },\n {\n if: \"dxtSupported\",\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.BC1, TranscoderFormat.BC3],\n engineFormat: [EngineFormat.RGB_S3TC_DXT1_Format, EngineFormat.RGBA_S3TC_DXT5_Format],\n priorityETC1S: 4,\n priorityUASTC: 5,\n needsPowerOfTwo: false\n },\n {\n if: \"etc2Supported\",\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ETC1, TranscoderFormat.ETC2],\n engineFormat: [EngineFormat.RGB_ETC2_Format, EngineFormat.RGBA_ETC2_EAC_Format],\n priorityETC1S: 1,\n priorityUASTC: 3,\n needsPowerOfTwo: false\n },\n {\n if: \"etc1Supported\",\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.ETC1, TranscoderFormat.ETC1],\n engineFormat: [EngineFormat.RGB_ETC1_Format, EngineFormat.RGB_ETC1_Format],\n priorityETC1S: 2,\n priorityUASTC: 4,\n needsPowerOfTwo: false\n },\n {\n if: \"pvrtcSupported\",\n basisFormat: [BasisFormat.ETC1S, BasisFormat.UASTC_4x4],\n transcoderFormat: [TranscoderFormat.PVRTC1_4_RGB, TranscoderFormat.PVRTC1_4_RGBA],\n engineFormat: [EngineFormat.RGB_PVRTC_4BPPV1_Format, EngineFormat.RGBA_PVRTC_4BPPV1_Format],\n priorityETC1S: 5,\n priorityUASTC: 6,\n needsPowerOfTwo: true\n }\n ];\n const ETC1S_OPTIONS = FORMAT_OPTIONS.sort(function(a, b) {\n return a.priorityETC1S - b.priorityETC1S;\n });\n const UASTC_OPTIONS = FORMAT_OPTIONS.sort(function(a, b) {\n return a.priorityUASTC - b.priorityUASTC;\n });\n function getTranscoderFormat(basisFormat, width, height, hasAlpha) {\n let transcoderFormat;\n let engineFormat;\n const options = basisFormat === BasisFormat.ETC1S ? ETC1S_OPTIONS : UASTC_OPTIONS;\n for (let i = 0; i < options.length; i++) {\n const opt = options[i];\n if (!config[opt.if])\n continue;\n if (!opt.basisFormat.includes(basisFormat))\n continue;\n if (opt.needsPowerOfTwo && !(isPowerOfTwo(width) && isPowerOfTwo(height)))\n continue;\n transcoderFormat = opt.transcoderFormat[hasAlpha ? 1 : 0];\n engineFormat = opt.engineFormat[hasAlpha ? 1 : 0];\n return { transcoderFormat, engineFormat };\n }\n console.warn(\"THREE.BasisTextureLoader: No suitable compressed texture format found. Decoding to RGBA32.\");\n transcoderFormat = TranscoderFormat.RGBA32;\n engineFormat = EngineFormat.RGBAFormat;\n return { transcoderFormat, engineFormat };\n }\n function assert(ok, message) {\n if (!ok)\n throw new Error(message);\n }\n function getWidthInBlocks(transcoderFormat, width) {\n return Math.ceil(width / BasisModule.getFormatBlockWidth(transcoderFormat));\n }\n function getHeightInBlocks(transcoderFormat, height) {\n return Math.ceil(height / BasisModule.getFormatBlockHeight(transcoderFormat));\n }\n function getTranscodedImageByteLength(transcoderFormat, width, height) {\n const blockByteLength = BasisModule.getBytesPerBlockOrPixel(transcoderFormat);\n if (BasisModule.formatIsUncompressed(transcoderFormat)) {\n return width * height * blockByteLength;\n }\n if (transcoderFormat === TranscoderFormat.PVRTC1_4_RGB || transcoderFormat === TranscoderFormat.PVRTC1_4_RGBA) {\n const paddedWidth = width + 3 & ~3;\n const paddedHeight = height + 3 & ~3;\n return (Math.max(8, paddedWidth) * Math.max(8, paddedHeight) * 4 + 7) / 8;\n }\n return getWidthInBlocks(transcoderFormat, width) * getHeightInBlocks(transcoderFormat, height) * blockByteLength;\n }\n function isPowerOfTwo(value) {\n if (value <= 2)\n return true;\n return (value & value - 1) === 0 && value !== 0;\n }\n });\n return BasisTextureLoader2;\n})();\nexport {\n BasisTextureLoader\n};\n//# sourceMappingURL=BasisTextureLoader.js.map\n","import { Loader, LoaderUtils, FileLoader, Group, MeshPhongMaterial, DoubleSide, AdditiveBlending, BufferGeometry, Mesh, Float32BufferAttribute, Matrix4, TextureLoader, Color } from \"three\";\nclass TDSLoader extends Loader {\n constructor(manager) {\n super(manager);\n this.debug = false;\n this.group = null;\n this.position = 0;\n this.materials = [];\n this.meshes = [];\n }\n /**\n * Load 3ds file from url.\n *\n * @method load\n * @param {[type]} url URL for the file.\n * @param {Function} onLoad onLoad callback, receives group Object3D as argument.\n * @param {Function} onProgress onProgress callback.\n * @param {Function} onError onError callback.\n */\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const path = this.path === \"\" ? LoaderUtils.extractUrlBase(url) : this.path;\n const loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setResponseType(\"arraybuffer\");\n loader.setRequestHeader(this.requestHeader);\n loader.setWithCredentials(this.withCredentials);\n loader.load(\n url,\n function(data) {\n try {\n onLoad(scope.parse(data, path));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n /**\n * Parse arraybuffer data and load 3ds file.\n *\n * @method parse\n * @param {ArrayBuffer} arraybuffer Arraybuffer data to be loaded.\n * @param {String} path Path for external resources.\n * @return {Group} Group loaded from 3ds file.\n */\n parse(arraybuffer, path) {\n this.group = new Group();\n this.position = 0;\n this.materials = [];\n this.meshes = [];\n this.readFile(arraybuffer, path);\n for (let i = 0; i < this.meshes.length; i++) {\n this.group.add(this.meshes[i]);\n }\n return this.group;\n }\n /**\n * Decode file content to read 3ds data.\n *\n * @method readFile\n * @param {ArrayBuffer} arraybuffer Arraybuffer data to be loaded.\n * @param {String} path Path for external resources.\n */\n readFile(arraybuffer, path) {\n const data = new DataView(arraybuffer);\n const chunk = this.readChunk(data);\n if (chunk.id === MLIBMAGIC || chunk.id === CMAGIC || chunk.id === M3DMAGIC) {\n let next = this.nextChunk(data, chunk);\n while (next !== 0) {\n if (next === M3D_VERSION) {\n const version = this.readDWord(data);\n this.debugMessage(\"3DS file version: \" + version);\n } else if (next === MDATA) {\n this.resetPosition(data);\n this.readMeshData(data, path);\n } else {\n this.debugMessage(\"Unknown main chunk: \" + next.toString(16));\n }\n next = this.nextChunk(data, chunk);\n }\n }\n this.debugMessage(\"Parsed \" + this.meshes.length + \" meshes\");\n }\n /**\n * Read mesh data chunk.\n *\n * @method readMeshData\n * @param {Dataview} data Dataview in use.\n * @param {String} path Path for external resources.\n */\n readMeshData(data, path) {\n const chunk = this.readChunk(data);\n let next = this.nextChunk(data, chunk);\n while (next !== 0) {\n if (next === MESH_VERSION) {\n const version = +this.readDWord(data);\n this.debugMessage(\"Mesh Version: \" + version);\n } else if (next === MASTER_SCALE) {\n const scale = this.readFloat(data);\n this.debugMessage(\"Master scale: \" + scale);\n this.group.scale.set(scale, scale, scale);\n } else if (next === NAMED_OBJECT) {\n this.debugMessage(\"Named Object\");\n this.resetPosition(data);\n this.readNamedObject(data);\n } else if (next === MAT_ENTRY) {\n this.debugMessage(\"Material\");\n this.resetPosition(data);\n this.readMaterialEntry(data, path);\n } else {\n this.debugMessage(\"Unknown MDATA chunk: \" + next.toString(16));\n }\n next = this.nextChunk(data, chunk);\n }\n }\n /**\n * Read named object chunk.\n *\n * @method readNamedObject\n * @param {Dataview} data Dataview in use.\n */\n readNamedObject(data) {\n const chunk = this.readChunk(data);\n const name = this.readString(data, 64);\n chunk.cur = this.position;\n let next = this.nextChunk(data, chunk);\n while (next !== 0) {\n if (next === N_TRI_OBJECT) {\n this.resetPosition(data);\n const mesh = this.readMesh(data);\n mesh.name = name;\n this.meshes.push(mesh);\n } else {\n this.debugMessage(\"Unknown named object chunk: \" + next.toString(16));\n }\n next = this.nextChunk(data, chunk);\n }\n this.endChunk(chunk);\n }\n /**\n * Read material data chunk and add it to the material list.\n *\n * @method readMaterialEntry\n * @param {Dataview} data Dataview in use.\n * @param {String} path Path for external resources.\n */\n readMaterialEntry(data, path) {\n const chunk = this.readChunk(data);\n let next = this.nextChunk(data, chunk);\n const material = new MeshPhongMaterial();\n while (next !== 0) {\n if (next === MAT_NAME) {\n material.name = this.readString(data, 64);\n this.debugMessage(\" Name: \" + material.name);\n } else if (next === MAT_WIRE) {\n this.debugMessage(\" Wireframe\");\n material.wireframe = true;\n } else if (next === MAT_WIRE_SIZE) {\n const value = this.readByte(data);\n material.wireframeLinewidth = value;\n this.debugMessage(\" Wireframe Thickness: \" + value);\n } else if (next === MAT_TWO_SIDE) {\n material.side = DoubleSide;\n this.debugMessage(\" DoubleSided\");\n } else if (next === MAT_ADDITIVE) {\n this.debugMessage(\" Additive Blending\");\n material.blending = AdditiveBlending;\n } else if (next === MAT_DIFFUSE) {\n this.debugMessage(\" Diffuse Color\");\n material.color = this.readColor(data);\n } else if (next === MAT_SPECULAR) {\n this.debugMessage(\" Specular Color\");\n material.specular = this.readColor(data);\n } else if (next === MAT_AMBIENT) {\n this.debugMessage(\" Ambient color\");\n material.color = this.readColor(data);\n } else if (next === MAT_SHININESS) {\n const shininess = this.readPercentage(data);\n material.shininess = shininess * 100;\n this.debugMessage(\" Shininess : \" + shininess);\n } else if (next === MAT_TRANSPARENCY) {\n const transparency = this.readPercentage(data);\n material.opacity = 1 - transparency;\n this.debugMessage(\" Transparency : \" + transparency);\n material.transparent = material.opacity < 1 ? true : false;\n } else if (next === MAT_TEXMAP) {\n this.debugMessage(\" ColorMap\");\n this.resetPosition(data);\n material.map = this.readMap(data, path);\n } else if (next === MAT_BUMPMAP) {\n this.debugMessage(\" BumpMap\");\n this.resetPosition(data);\n material.bumpMap = this.readMap(data, path);\n } else if (next === MAT_OPACMAP) {\n this.debugMessage(\" OpacityMap\");\n this.resetPosition(data);\n material.alphaMap = this.readMap(data, path);\n } else if (next === MAT_SPECMAP) {\n this.debugMessage(\" SpecularMap\");\n this.resetPosition(data);\n material.specularMap = this.readMap(data, path);\n } else {\n this.debugMessage(\" Unknown material chunk: \" + next.toString(16));\n }\n next = this.nextChunk(data, chunk);\n }\n this.endChunk(chunk);\n this.materials[material.name] = material;\n }\n /**\n * Read mesh data chunk.\n *\n * @method readMesh\n * @param {Dataview} data Dataview in use.\n * @return {Mesh} The parsed mesh.\n */\n readMesh(data) {\n const chunk = this.readChunk(data);\n let next = this.nextChunk(data, chunk);\n const geometry = new BufferGeometry();\n const material = new MeshPhongMaterial();\n const mesh = new Mesh(geometry, material);\n mesh.name = \"mesh\";\n while (next !== 0) {\n if (next === POINT_ARRAY) {\n const points = this.readWord(data);\n this.debugMessage(\" Vertex: \" + points);\n const vertices = [];\n for (let i = 0; i < points; i++) {\n vertices.push(this.readFloat(data));\n vertices.push(this.readFloat(data));\n vertices.push(this.readFloat(data));\n }\n geometry.setAttribute(\"position\", new Float32BufferAttribute(vertices, 3));\n } else if (next === FACE_ARRAY) {\n this.resetPosition(data);\n this.readFaceArray(data, mesh);\n } else if (next === TEX_VERTS) {\n const texels = this.readWord(data);\n this.debugMessage(\" UV: \" + texels);\n const uvs = [];\n for (let i = 0; i < texels; i++) {\n uvs.push(this.readFloat(data));\n uvs.push(this.readFloat(data));\n }\n geometry.setAttribute(\"uv\", new Float32BufferAttribute(uvs, 2));\n } else if (next === MESH_MATRIX) {\n this.debugMessage(\" Tranformation Matrix (TODO)\");\n const values = [];\n for (let i = 0; i < 12; i++) {\n values[i] = this.readFloat(data);\n }\n const matrix = new Matrix4();\n matrix.elements[0] = values[0];\n matrix.elements[1] = values[6];\n matrix.elements[2] = values[3];\n matrix.elements[3] = values[9];\n matrix.elements[4] = values[2];\n matrix.elements[5] = values[8];\n matrix.elements[6] = values[5];\n matrix.elements[7] = values[11];\n matrix.elements[8] = values[1];\n matrix.elements[9] = values[7];\n matrix.elements[10] = values[4];\n matrix.elements[11] = values[10];\n matrix.elements[12] = 0;\n matrix.elements[13] = 0;\n matrix.elements[14] = 0;\n matrix.elements[15] = 1;\n matrix.transpose();\n const inverse = new Matrix4();\n inverse.copy(matrix).invert();\n geometry.applyMatrix4(inverse);\n matrix.decompose(mesh.position, mesh.quaternion, mesh.scale);\n } else {\n this.debugMessage(\" Unknown mesh chunk: \" + next.toString(16));\n }\n next = this.nextChunk(data, chunk);\n }\n this.endChunk(chunk);\n geometry.computeVertexNormals();\n return mesh;\n }\n /**\n * Read face array data chunk.\n *\n * @method readFaceArray\n * @param {Dataview} data Dataview in use.\n * @param {Mesh} mesh Mesh to be filled with the data read.\n */\n readFaceArray(data, mesh) {\n const chunk = this.readChunk(data);\n const faces = this.readWord(data);\n this.debugMessage(\" Faces: \" + faces);\n const index = [];\n for (let i = 0; i < faces; ++i) {\n index.push(this.readWord(data), this.readWord(data), this.readWord(data));\n this.readWord(data);\n }\n mesh.geometry.setIndex(index);\n let materialIndex = 0;\n let start = 0;\n while (this.position < chunk.end) {\n const subchunk = this.readChunk(data);\n if (subchunk.id === MSH_MAT_GROUP) {\n this.debugMessage(\" Material Group\");\n this.resetPosition(data);\n const group = this.readMaterialGroup(data);\n const count = group.index.length * 3;\n mesh.geometry.addGroup(start, count, materialIndex);\n start += count;\n materialIndex++;\n const material = this.materials[group.name];\n if (Array.isArray(mesh.material) === false)\n mesh.material = [];\n if (material !== void 0) {\n mesh.material.push(material);\n }\n } else {\n this.debugMessage(\" Unknown face array chunk: \" + subchunk.toString(16));\n }\n this.endChunk(subchunk);\n }\n if (mesh.material.length === 1)\n mesh.material = mesh.material[0];\n this.endChunk(chunk);\n }\n /**\n * Read texture map data chunk.\n *\n * @method readMap\n * @param {Dataview} data Dataview in use.\n * @param {String} path Path for external resources.\n * @return {Texture} Texture read from this data chunk.\n */\n readMap(data, path) {\n const chunk = this.readChunk(data);\n let next = this.nextChunk(data, chunk);\n let texture = {};\n const loader = new TextureLoader(this.manager);\n loader.setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin);\n while (next !== 0) {\n if (next === MAT_MAPNAME) {\n const name = this.readString(data, 128);\n texture = loader.load(name);\n this.debugMessage(\" File: \" + path + name);\n } else if (next === MAT_MAP_UOFFSET) {\n texture.offset.x = this.readFloat(data);\n this.debugMessage(\" OffsetX: \" + texture.offset.x);\n } else if (next === MAT_MAP_VOFFSET) {\n texture.offset.y = this.readFloat(data);\n this.debugMessage(\" OffsetY: \" + texture.offset.y);\n } else if (next === MAT_MAP_USCALE) {\n texture.repeat.x = this.readFloat(data);\n this.debugMessage(\" RepeatX: \" + texture.repeat.x);\n } else if (next === MAT_MAP_VSCALE) {\n texture.repeat.y = this.readFloat(data);\n this.debugMessage(\" RepeatY: \" + texture.repeat.y);\n } else {\n this.debugMessage(\" Unknown map chunk: \" + next.toString(16));\n }\n next = this.nextChunk(data, chunk);\n }\n this.endChunk(chunk);\n return texture;\n }\n /**\n * Read material group data chunk.\n *\n * @method readMaterialGroup\n * @param {Dataview} data Dataview in use.\n * @return {Object} Object with name and index of the object.\n */\n readMaterialGroup(data) {\n this.readChunk(data);\n const name = this.readString(data, 64);\n const numFaces = this.readWord(data);\n this.debugMessage(\" Name: \" + name);\n this.debugMessage(\" Faces: \" + numFaces);\n const index = [];\n for (let i = 0; i < numFaces; ++i) {\n index.push(this.readWord(data));\n }\n return { name, index };\n }\n /**\n * Read a color value.\n *\n * @method readColor\n * @param {DataView} data Dataview.\n * @return {Color} Color value read..\n */\n readColor(data) {\n const chunk = this.readChunk(data);\n const color = new Color();\n if (chunk.id === COLOR_24 || chunk.id === LIN_COLOR_24) {\n const r = this.readByte(data);\n const g = this.readByte(data);\n const b = this.readByte(data);\n color.setRGB(r / 255, g / 255, b / 255);\n this.debugMessage(\" Color: \" + color.r + \", \" + color.g + \", \" + color.b);\n } else if (chunk.id === COLOR_F || chunk.id === LIN_COLOR_F) {\n const r = this.readFloat(data);\n const g = this.readFloat(data);\n const b = this.readFloat(data);\n color.setRGB(r, g, b);\n this.debugMessage(\" Color: \" + color.r + \", \" + color.g + \", \" + color.b);\n } else {\n this.debugMessage(\" Unknown color chunk: \" + chunk.toString(16));\n }\n this.endChunk(chunk);\n return color;\n }\n /**\n * Read next chunk of data.\n *\n * @method readChunk\n * @param {DataView} data Dataview.\n * @return {Object} Chunk of data read.\n */\n readChunk(data) {\n const chunk = {};\n chunk.cur = this.position;\n chunk.id = this.readWord(data);\n chunk.size = this.readDWord(data);\n chunk.end = chunk.cur + chunk.size;\n chunk.cur += 6;\n return chunk;\n }\n /**\n * Set position to the end of the current chunk of data.\n *\n * @method endChunk\n * @param {Object} chunk Data chunk.\n */\n endChunk(chunk) {\n this.position = chunk.end;\n }\n /**\n * Move to the next data chunk.\n *\n * @method nextChunk\n * @param {DataView} data Dataview.\n * @param {Object} chunk Data chunk.\n */\n nextChunk(data, chunk) {\n if (chunk.cur >= chunk.end) {\n return 0;\n }\n this.position = chunk.cur;\n try {\n const next = this.readChunk(data);\n chunk.cur += next.size;\n return next.id;\n } catch (e) {\n this.debugMessage(\"Unable to read chunk at \" + this.position);\n return 0;\n }\n }\n /**\n * Reset dataview position.\n *\n * @method resetPosition\n */\n resetPosition() {\n this.position -= 6;\n }\n /**\n * Read byte value.\n *\n * @method readByte\n * @param {DataView} data Dataview to read data from.\n * @return {Number} Data read from the dataview.\n */\n readByte(data) {\n const v = data.getUint8(this.position, true);\n this.position += 1;\n return v;\n }\n /**\n * Read 32 bit float value.\n *\n * @method readFloat\n * @param {DataView} data Dataview to read data from.\n * @return {Number} Data read from the dataview.\n */\n readFloat(data) {\n try {\n const v = data.getFloat32(this.position, true);\n this.position += 4;\n return v;\n } catch (e) {\n this.debugMessage(e + \" \" + this.position + \" \" + data.byteLength);\n }\n }\n /**\n * Read 32 bit signed integer value.\n *\n * @method readInt\n * @param {DataView} data Dataview to read data from.\n * @return {Number} Data read from the dataview.\n */\n readInt(data) {\n const v = data.getInt32(this.position, true);\n this.position += 4;\n return v;\n }\n /**\n * Read 16 bit signed integer value.\n *\n * @method readShort\n * @param {DataView} data Dataview to read data from.\n * @return {Number} Data read from the dataview.\n */\n readShort(data) {\n const v = data.getInt16(this.position, true);\n this.position += 2;\n return v;\n }\n /**\n * Read 64 bit unsigned integer value.\n *\n * @method readDWord\n * @param {DataView} data Dataview to read data from.\n * @return {Number} Data read from the dataview.\n */\n readDWord(data) {\n const v = data.getUint32(this.position, true);\n this.position += 4;\n return v;\n }\n /**\n * Read 32 bit unsigned integer value.\n *\n * @method readWord\n * @param {DataView} data Dataview to read data from.\n * @return {Number} Data read from the dataview.\n */\n readWord(data) {\n const v = data.getUint16(this.position, true);\n this.position += 2;\n return v;\n }\n /**\n * Read string value.\n *\n * @method readString\n * @param {DataView} data Dataview to read data from.\n * @param {Number} maxLength Max size of the string to be read.\n * @return {String} Data read from the dataview.\n */\n readString(data, maxLength) {\n let s = \"\";\n for (let i = 0; i < maxLength; i++) {\n const c = this.readByte(data);\n if (!c) {\n break;\n }\n s += String.fromCharCode(c);\n }\n return s;\n }\n /**\n * Read percentage value.\n *\n * @method readPercentage\n * @param {DataView} data Dataview to read data from.\n * @return {Number} Data read from the dataview.\n */\n readPercentage(data) {\n const chunk = this.readChunk(data);\n let value;\n switch (chunk.id) {\n case INT_PERCENTAGE:\n value = this.readShort(data) / 100;\n break;\n case FLOAT_PERCENTAGE:\n value = this.readFloat(data);\n break;\n default:\n this.debugMessage(\" Unknown percentage chunk: \" + chunk.toString(16));\n }\n this.endChunk(chunk);\n return value;\n }\n /**\n * Print debug message to the console.\n *\n * Is controlled by a flag to show or hide debug messages.\n *\n * @method debugMessage\n * @param {Object} message Debug message to print to the console.\n */\n debugMessage(message) {\n if (this.debug) {\n console.log(message);\n }\n }\n}\nconst M3DMAGIC = 19789;\nconst MLIBMAGIC = 15786;\nconst CMAGIC = 49725;\nconst M3D_VERSION = 2;\nconst COLOR_F = 16;\nconst COLOR_24 = 17;\nconst LIN_COLOR_24 = 18;\nconst LIN_COLOR_F = 19;\nconst INT_PERCENTAGE = 48;\nconst FLOAT_PERCENTAGE = 49;\nconst MDATA = 15677;\nconst MESH_VERSION = 15678;\nconst MASTER_SCALE = 256;\nconst MAT_ENTRY = 45055;\nconst MAT_NAME = 40960;\nconst MAT_AMBIENT = 40976;\nconst MAT_DIFFUSE = 40992;\nconst MAT_SPECULAR = 41008;\nconst MAT_SHININESS = 41024;\nconst MAT_TRANSPARENCY = 41040;\nconst MAT_TWO_SIDE = 41089;\nconst MAT_ADDITIVE = 41091;\nconst MAT_WIRE = 41093;\nconst MAT_WIRE_SIZE = 41095;\nconst MAT_TEXMAP = 41472;\nconst MAT_OPACMAP = 41488;\nconst MAT_BUMPMAP = 41520;\nconst MAT_SPECMAP = 41476;\nconst MAT_MAPNAME = 41728;\nconst MAT_MAP_USCALE = 41812;\nconst MAT_MAP_VSCALE = 41814;\nconst MAT_MAP_UOFFSET = 41816;\nconst MAT_MAP_VOFFSET = 41818;\nconst NAMED_OBJECT = 16384;\nconst N_TRI_OBJECT = 16640;\nconst POINT_ARRAY = 16656;\nconst FACE_ARRAY = 16672;\nconst MSH_MAT_GROUP = 16688;\nconst TEX_VERTS = 16704;\nconst MESH_MATRIX = 16736;\nexport {\n TDSLoader\n};\n//# sourceMappingURL=TDSLoader.js.map\n","import { Loader, FileLoader, MeshStandardMaterial, LineBasicMaterial, ShaderMaterial, UniformsUtils, UniformsLib, Color, Vector3, BufferGeometry, BufferAttribute, LineSegments, Mesh, Ray, Matrix4, Group } from \"three\";\nimport { version } from \"../_polyfill/constants.js\";\nconst FINISH_TYPE_DEFAULT = 0;\nconst FINISH_TYPE_CHROME = 1;\nconst FINISH_TYPE_PEARLESCENT = 2;\nconst FINISH_TYPE_RUBBER = 3;\nconst FINISH_TYPE_MATTE_METALLIC = 4;\nconst FINISH_TYPE_METAL = 5;\nconst FILE_LOCATION_AS_IS = 0;\nconst FILE_LOCATION_TRY_PARTS = 1;\nconst FILE_LOCATION_TRY_P = 2;\nconst FILE_LOCATION_TRY_MODELS = 3;\nconst FILE_LOCATION_TRY_RELATIVE = 4;\nconst FILE_LOCATION_TRY_ABSOLUTE = 5;\nconst FILE_LOCATION_NOT_FOUND = 6;\nconst MAIN_COLOUR_CODE = \"16\";\nconst MAIN_EDGE_COLOUR_CODE = \"24\";\nconst _tempVec0 = /* @__PURE__ */ new Vector3();\nconst _tempVec1 = /* @__PURE__ */ new Vector3();\nclass LDrawConditionalLineMaterial extends ShaderMaterial {\n constructor(parameters) {\n super({\n uniforms: UniformsUtils.merge([\n UniformsLib.fog,\n {\n diffuse: {\n value: new Color()\n },\n opacity: {\n value: 1\n }\n }\n ]),\n vertexShader: (\n /* glsl */\n `\n attribute vec3 control0;\n attribute vec3 control1;\n attribute vec3 direction;\n varying float discardFlag;\n\n #include <common>\n #include <color_pars_vertex>\n #include <fog_pars_vertex>\n #include <logdepthbuf_pars_vertex>\n #include <clipping_planes_pars_vertex>\n\n void main() {\n #include <color_vertex>\n\n vec4 mvPosition = modelViewMatrix * vec4(position, 1.0);\n gl_Position = projectionMatrix * mvPosition;\n\n // Transform the line segment ends and control points into camera clip space\n vec4 c0 = projectionMatrix * modelViewMatrix * vec4(control0, 1.0);\n vec4 c1 = projectionMatrix * modelViewMatrix * vec4(control1, 1.0);\n vec4 p0 = projectionMatrix * modelViewMatrix * vec4(position, 1.0);\n vec4 p1 = projectionMatrix * modelViewMatrix * vec4(position + direction, 1.0);\n\n c0.xy /= c0.w;\n c1.xy /= c1.w;\n p0.xy /= p0.w;\n p1.xy /= p1.w;\n\n // Get the direction of the segment and an orthogonal vector\n vec2 dir = p1.xy - p0.xy;\n vec2 norm = vec2(-dir.y, dir.x);\n\n // Get control point directions from the line\n vec2 c0dir = c0.xy - p1.xy;\n vec2 c1dir = c1.xy - p1.xy;\n\n // If the vectors to the controls points are pointed in different directions away\n // from the line segment then the line should not be drawn.\n float d0 = dot(normalize(norm), normalize(c0dir));\n float d1 = dot(normalize(norm), normalize(c1dir));\n discardFlag = float(sign(d0) != sign(d1));\n\n #include <logdepthbuf_vertex>\n #include <clipping_planes_vertex>\n #include <fog_vertex>\n }\n `\n ),\n fragmentShader: (\n /* glsl */\n `\n uniform vec3 diffuse;\n uniform float opacity;\n varying float discardFlag;\n\n #include <common>\n #include <color_pars_fragment>\n #include <fog_pars_fragment>\n #include <logdepthbuf_pars_fragment>\n #include <clipping_planes_pars_fragment>\n\n void main() {\n if (discardFlag > 0.5) discard;\n\n #include <clipping_planes_fragment>\n vec3 outgoingLight = vec3(0.0);\n vec4 diffuseColor = vec4(diffuse, opacity);\n #include <logdepthbuf_fragment>\n #include <color_fragment>\n outgoingLight = diffuseColor.rgb; // simple shader\n gl_FragColor = vec4(outgoingLight, diffuseColor.a);\n #include <tonemapping_fragment>\n #include <${version >= 154 ? \"colorspace_fragment\" : \"encodings_fragment\"}>\n #include <fog_fragment>\n #include <premultiplied_alpha_fragment>\n }\n `\n )\n });\n Object.defineProperties(this, {\n opacity: {\n get: function() {\n return this.uniforms.opacity.value;\n },\n set: function(value) {\n this.uniforms.opacity.value = value;\n }\n },\n color: {\n get: function() {\n return this.uniforms.diffuse.value;\n }\n }\n });\n this.setValues(parameters);\n this.isLDrawConditionalLineMaterial = true;\n }\n}\nclass ConditionalLineSegments extends LineSegments {\n constructor(geometry, material) {\n super(geometry, material);\n this.isConditionalLine = true;\n }\n}\nfunction generateFaceNormals(faces) {\n for (let i = 0, l = faces.length; i < l; i++) {\n const face = faces[i];\n const vertices = face.vertices;\n const v0 = vertices[0];\n const v1 = vertices[1];\n const v2 = vertices[2];\n _tempVec0.subVectors(v1, v0);\n _tempVec1.subVectors(v2, v1);\n face.faceNormal = new Vector3().crossVectors(_tempVec0, _tempVec1).normalize();\n }\n}\nconst _ray = /* @__PURE__ */ new Ray();\nfunction smoothNormals(faces, lineSegments, checkSubSegments = false) {\n const hashMultiplier = (1 + 1e-10) * 100;\n function hashVertex(v) {\n const x = ~~(v.x * hashMultiplier);\n const y = ~~(v.y * hashMultiplier);\n const z = ~~(v.z * hashMultiplier);\n return `${x},${y},${z}`;\n }\n function hashEdge(v0, v1) {\n return `${hashVertex(v0)}_${hashVertex(v1)}`;\n }\n function toNormalizedRay(v0, v1, targetRay) {\n targetRay.direction.subVectors(v1, v0).normalize();\n const scalar = v0.dot(targetRay.direction);\n targetRay.origin.copy(v0).addScaledVector(targetRay.direction, -scalar);\n return targetRay;\n }\n function hashRay(ray) {\n return hashEdge(ray.origin, ray.direction);\n }\n const hardEdges = /* @__PURE__ */ new Set();\n const hardEdgeRays = /* @__PURE__ */ new Map();\n const halfEdgeList = {};\n const normals = [];\n for (let i = 0, l = lineSegments.length; i < l; i++) {\n const ls = lineSegments[i];\n const vertices = ls.vertices;\n const v0 = vertices[0];\n const v1 = vertices[1];\n hardEdges.add(hashEdge(v0, v1));\n hardEdges.add(hashEdge(v1, v0));\n if (checkSubSegments) {\n const ray = toNormalizedRay(v0, v1, new Ray());\n const rh1 = hashRay(ray);\n if (!hardEdgeRays.has(rh1)) {\n toNormalizedRay(v1, v0, ray);\n const rh2 = hashRay(ray);\n const info2 = {\n ray,\n distances: []\n };\n hardEdgeRays.set(rh1, info2);\n hardEdgeRays.set(rh2, info2);\n }\n const info = hardEdgeRays.get(rh1);\n let d0 = info.ray.direction.dot(v0);\n let d1 = info.ray.direction.dot(v1);\n if (d0 > d1) {\n [d0, d1] = [d1, d0];\n }\n info.distances.push(d0, d1);\n }\n }\n for (let i = 0, l = faces.length; i < l; i++) {\n const tri = faces[i];\n const vertices = tri.vertices;\n const vertCount = vertices.length;\n for (let i2 = 0; i2 < vertCount; i2++) {\n const index = i2;\n const next = (i2 + 1) % vertCount;\n const v0 = vertices[index];\n const v1 = vertices[next];\n const hash = hashEdge(v0, v1);\n if (hardEdges.has(hash)) {\n continue;\n }\n if (checkSubSegments) {\n toNormalizedRay(v0, v1, _ray);\n const rayHash = hashRay(_ray);\n if (hardEdgeRays.has(rayHash)) {\n const info2 = hardEdgeRays.get(rayHash);\n const { ray, distances } = info2;\n let d0 = ray.direction.dot(v0);\n let d1 = ray.direction.dot(v1);\n if (d0 > d1) {\n [d0, d1] = [d1, d0];\n }\n let found = false;\n for (let i3 = 0, l2 = distances.length; i3 < l2; i3 += 2) {\n if (d0 >= distances[i3] && d1 <= distances[i3 + 1]) {\n found = true;\n break;\n }\n }\n if (found) {\n continue;\n }\n }\n }\n const info = {\n index,\n tri\n };\n halfEdgeList[hash] = info;\n }\n }\n while (true) {\n let halfEdge = null;\n for (const key in halfEdgeList) {\n halfEdge = halfEdgeList[key];\n break;\n }\n if (halfEdge === null) {\n break;\n }\n const queue = [halfEdge];\n while (queue.length > 0) {\n const tri = queue.pop().tri;\n const vertices = tri.vertices;\n const vertNormals = tri.normals;\n const faceNormal = tri.faceNormal;\n const vertCount = vertices.length;\n for (let i2 = 0; i2 < vertCount; i2++) {\n const index = i2;\n const next = (i2 + 1) % vertCount;\n const v0 = vertices[index];\n const v1 = vertices[next];\n const hash = hashEdge(v0, v1);\n delete halfEdgeList[hash];\n const reverseHash = hashEdge(v1, v0);\n const otherInfo = halfEdgeList[reverseHash];\n if (otherInfo) {\n const otherTri = otherInfo.tri;\n const otherIndex = otherInfo.index;\n const otherNormals = otherTri.normals;\n const otherVertCount = otherNormals.length;\n const otherFaceNormal = otherTri.faceNormal;\n if (Math.abs(otherTri.faceNormal.dot(tri.faceNormal)) < 0.25) {\n continue;\n }\n if (reverseHash in halfEdgeList) {\n queue.push(otherInfo);\n delete halfEdgeList[reverseHash];\n }\n const otherNext = (otherIndex + 1) % otherVertCount;\n if (vertNormals[index] && otherNormals[otherNext] && vertNormals[index] !== otherNormals[otherNext]) {\n otherNormals[otherNext].norm.add(vertNormals[index].norm);\n vertNormals[index].norm = otherNormals[otherNext].norm;\n }\n let sharedNormal1 = vertNormals[index] || otherNormals[otherNext];\n if (sharedNormal1 === null) {\n sharedNormal1 = { norm: new Vector3() };\n normals.push(sharedNormal1.norm);\n }\n if (vertNormals[index] === null) {\n vertNormals[index] = sharedNormal1;\n sharedNormal1.norm.add(faceNormal);\n }\n if (otherNormals[otherNext] === null) {\n otherNormals[otherNext] = sharedNormal1;\n sharedNormal1.norm.add(otherFaceNormal);\n }\n if (vertNormals[next] && otherNormals[otherIndex] && vertNormals[next] !== otherNormals[otherIndex]) {\n otherNormals[otherIndex].norm.add(vertNormals[next].norm);\n vertNormals[next].norm = otherNormals[otherIndex].norm;\n }\n let sharedNormal2 = vertNormals[next] || otherNormals[otherIndex];\n if (sharedNormal2 === null) {\n sharedNormal2 = { norm: new Vector3() };\n normals.push(sharedNormal2.norm);\n }\n if (vertNormals[next] === null) {\n vertNormals[next] = sharedNormal2;\n sharedNormal2.norm.add(faceNormal);\n }\n if (otherNormals[otherIndex] === null) {\n otherNormals[otherIndex] = sharedNormal2;\n sharedNormal2.norm.add(otherFaceNormal);\n }\n }\n }\n }\n }\n for (let i = 0, l = normals.length; i < l; i++) {\n normals[i].normalize();\n }\n}\nfunction isPartType(type) {\n return type === \"Part\" || type === \"Unofficial_Part\";\n}\nfunction isPrimitiveType(type) {\n return /primitive/i.test(type) || type === \"Subpart\";\n}\nclass LineParser {\n constructor(line, lineNumber) {\n this.line = line;\n this.lineLength = line.length;\n this.currentCharIndex = 0;\n this.currentChar = \" \";\n this.lineNumber = lineNumber;\n }\n seekNonSpace() {\n while (this.currentCharIndex < this.lineLength) {\n this.currentChar = this.line.charAt(this.currentCharIndex);\n if (this.currentChar !== \" \" && this.currentChar !== \"\t\") {\n return;\n }\n this.currentCharIndex++;\n }\n }\n getToken() {\n const pos0 = this.currentCharIndex++;\n while (this.currentCharIndex < this.lineLength) {\n this.currentChar = this.line.charAt(this.currentCharIndex);\n if (this.currentChar === \" \" || this.currentChar === \"\t\") {\n break;\n }\n this.currentCharIndex++;\n }\n const pos1 = this.currentCharIndex;\n this.seekNonSpace();\n return this.line.substring(pos0, pos1);\n }\n getVector() {\n return new Vector3(parseFloat(this.getToken()), parseFloat(this.getToken()), parseFloat(this.getToken()));\n }\n getRemainingString() {\n return this.line.substring(this.currentCharIndex, this.lineLength);\n }\n isAtTheEnd() {\n return this.currentCharIndex >= this.lineLength;\n }\n setToEnd() {\n this.currentCharIndex = this.lineLength;\n }\n getLineNumberString() {\n return this.lineNumber >= 0 ? \" at line \" + this.lineNumber : \"\";\n }\n}\nclass LDrawParsedCache {\n constructor(loader) {\n this.loader = loader;\n this._cache = {};\n }\n cloneResult(original) {\n const result = {};\n result.faces = original.faces.map((face) => {\n return {\n colorCode: face.colorCode,\n material: face.material,\n vertices: face.vertices.map((v) => v.clone()),\n normals: face.normals.map(() => null),\n faceNormal: null\n };\n });\n result.conditionalSegments = original.conditionalSegments.map((face) => {\n return {\n colorCode: face.colorCode,\n material: face.material,\n vertices: face.vertices.map((v) => v.clone()),\n controlPoints: face.controlPoints.map((v) => v.clone())\n };\n });\n result.lineSegments = original.lineSegments.map((face) => {\n return {\n colorCode: face.colorCode,\n material: face.material,\n vertices: face.vertices.map((v) => v.clone())\n };\n });\n result.type = original.type;\n result.category = original.category;\n result.keywords = original.keywords;\n result.subobjects = original.subobjects;\n result.totalFaces = original.totalFaces;\n result.startingConstructionStep = original.startingConstructionStep;\n result.materials = original.materials;\n result.group = null;\n return result;\n }\n async fetchData(fileName) {\n let triedLowerCase = false;\n let locationState = FILE_LOCATION_AS_IS;\n while (locationState !== FILE_LOCATION_NOT_FOUND) {\n let subobjectURL = fileName;\n switch (locationState) {\n case FILE_LOCATION_AS_IS:\n locationState = locationState + 1;\n break;\n case FILE_LOCATION_TRY_PARTS:\n subobjectURL = \"parts/\" + subobjectURL;\n locationState = locationState + 1;\n break;\n case FILE_LOCATION_TRY_P:\n subobjectURL = \"p/\" + subobjectURL;\n locationState = locationState + 1;\n break;\n case FILE_LOCATION_TRY_MODELS:\n subobjectURL = \"models/\" + subobjectURL;\n locationState = locationState + 1;\n break;\n case FILE_LOCATION_TRY_RELATIVE:\n subobjectURL = fileName.substring(0, fileName.lastIndexOf(\"/\") + 1) + subobjectURL;\n locationState = locationState + 1;\n break;\n case FILE_LOCATION_TRY_ABSOLUTE:\n if (triedLowerCase) {\n locationState = FILE_LOCATION_NOT_FOUND;\n } else {\n fileName = fileName.toLowerCase();\n subobjectURL = fileName;\n triedLowerCase = true;\n locationState = FILE_LOCATION_AS_IS;\n }\n break;\n }\n const loader = this.loader;\n const fileLoader = new FileLoader(loader.manager);\n fileLoader.setPath(loader.partsLibraryPath);\n fileLoader.setRequestHeader(loader.requestHeader);\n fileLoader.setWithCredentials(loader.withCredentials);\n try {\n const text = await fileLoader.loadAsync(subobjectURL);\n return text;\n } catch (e) {\n continue;\n }\n }\n throw new Error('LDrawLoader: Subobject \"' + fileName + '\" could not be loaded.');\n }\n parse(text, fileName = null) {\n const loader = this.loader;\n const faces = [];\n const lineSegments = [];\n const conditionalSegments = [];\n const subobjects = [];\n const materials = {};\n const getLocalMaterial = (colorCode) => {\n return materials[colorCode] || null;\n };\n let type = \"Model\";\n let category = null;\n let keywords = null;\n let totalFaces = 0;\n if (text.indexOf(\"\\r\\n\") !== -1) {\n text = text.replace(/\\r\\n/g, \"\\n\");\n }\n const lines = text.split(\"\\n\");\n const numLines = lines.length;\n let parsingEmbeddedFiles = false;\n let currentEmbeddedFileName = null;\n let currentEmbeddedText = null;\n let bfcCertified = false;\n let bfcCCW = true;\n let bfcInverted = false;\n let bfcCull = true;\n let startingConstructionStep = false;\n for (let lineIndex = 0; lineIndex < numLines; lineIndex++) {\n const line = lines[lineIndex];\n if (line.length === 0)\n continue;\n if (parsingEmbeddedFiles) {\n if (line.startsWith(\"0 FILE \")) {\n this.setData(currentEmbeddedFileName, currentEmbeddedText);\n currentEmbeddedFileName = line.substring(7);\n currentEmbeddedText = \"\";\n } else {\n currentEmbeddedText += line + \"\\n\";\n }\n continue;\n }\n const lp = new LineParser(line, lineIndex + 1);\n lp.seekNonSpace();\n if (lp.isAtTheEnd()) {\n continue;\n }\n const lineType = lp.getToken();\n let material;\n let colorCode;\n let segment;\n let ccw;\n let doubleSided;\n let v0, v1, v2, v3, c0, c1;\n switch (lineType) {\n case \"0\":\n const meta = lp.getToken();\n if (meta) {\n switch (meta) {\n case \"!LDRAW_ORG\":\n type = lp.getToken();\n break;\n case \"!COLOUR\":\n material = loader.parseColorMetaDirective(lp);\n if (material) {\n materials[material.userData.code] = material;\n } else {\n console.warn(\"LDrawLoader: Error parsing material\" + lp.getLineNumberString());\n }\n break;\n case \"!CATEGORY\":\n category = lp.getToken();\n break;\n case \"!KEYWORDS\":\n const newKeywords = lp.getRemainingString().split(\",\");\n if (newKeywords.length > 0) {\n if (!keywords) {\n keywords = [];\n }\n newKeywords.forEach(function(keyword) {\n keywords.push(keyword.trim());\n });\n }\n break;\n case \"FILE\":\n if (lineIndex > 0) {\n parsingEmbeddedFiles = true;\n currentEmbeddedFileName = lp.getRemainingString();\n currentEmbeddedText = \"\";\n bfcCertified = false;\n bfcCCW = true;\n }\n break;\n case \"BFC\":\n while (!lp.isAtTheEnd()) {\n const token = lp.getToken();\n switch (token) {\n case \"CERTIFY\":\n case \"NOCERTIFY\":\n bfcCertified = token === \"CERTIFY\";\n bfcCCW = true;\n break;\n case \"CW\":\n case \"CCW\":\n bfcCCW = token === \"CCW\";\n break;\n case \"INVERTNEXT\":\n bfcInverted = true;\n break;\n case \"CLIP\":\n case \"NOCLIP\":\n bfcCull = token === \"CLIP\";\n break;\n default:\n console.warn('THREE.LDrawLoader: BFC directive \"' + token + '\" is unknown.');\n break;\n }\n }\n break;\n case \"STEP\":\n startingConstructionStep = true;\n break;\n }\n }\n break;\n case \"1\":\n colorCode = lp.getToken();\n material = getLocalMaterial(colorCode);\n const posX = parseFloat(lp.getToken());\n const posY = parseFloat(lp.getToken());\n const posZ = parseFloat(lp.getToken());\n const m0 = parseFloat(lp.getToken());\n const m1 = parseFloat(lp.getToken());\n const m2 = parseFloat(lp.getToken());\n const m3 = parseFloat(lp.getToken());\n const m4 = parseFloat(lp.getToken());\n const m5 = parseFloat(lp.getToken());\n const m6 = parseFloat(lp.getToken());\n const m7 = parseFloat(lp.getToken());\n const m8 = parseFloat(lp.getToken());\n const matrix = new Matrix4().set(m0, m1, m2, posX, m3, m4, m5, posY, m6, m7, m8, posZ, 0, 0, 0, 1);\n let fileName2 = lp.getRemainingString().trim().replace(/\\\\/g, \"/\");\n if (loader.fileMap[fileName2]) {\n fileName2 = loader.fileMap[fileName2];\n } else {\n if (fileName2.startsWith(\"s/\")) {\n fileName2 = \"parts/\" + fileName2;\n } else if (fileName2.startsWith(\"48/\")) {\n fileName2 = \"p/\" + fileName2;\n }\n }\n subobjects.push({\n material,\n colorCode,\n matrix,\n fileName: fileName2,\n inverted: bfcInverted,\n startingConstructionStep\n });\n bfcInverted = false;\n break;\n case \"2\":\n colorCode = lp.getToken();\n material = getLocalMaterial(colorCode);\n v0 = lp.getVector();\n v1 = lp.getVector();\n segment = {\n material,\n colorCode,\n vertices: [v0, v1]\n };\n lineSegments.push(segment);\n break;\n case \"5\":\n colorCode = lp.getToken();\n material = getLocalMaterial(colorCode);\n v0 = lp.getVector();\n v1 = lp.getVector();\n c0 = lp.getVector();\n c1 = lp.getVector();\n segment = {\n material,\n colorCode,\n vertices: [v0, v1],\n controlPoints: [c0, c1]\n };\n conditionalSegments.push(segment);\n break;\n case \"3\":\n colorCode = lp.getToken();\n material = getLocalMaterial(colorCode);\n ccw = bfcCCW;\n doubleSided = !bfcCertified || !bfcCull;\n if (ccw === true) {\n v0 = lp.getVector();\n v1 = lp.getVector();\n v2 = lp.getVector();\n } else {\n v2 = lp.getVector();\n v1 = lp.getVector();\n v0 = lp.getVector();\n }\n faces.push({\n material,\n colorCode,\n faceNormal: null,\n vertices: [v0, v1, v2],\n normals: [null, null, null]\n });\n totalFaces++;\n if (doubleSided === true) {\n faces.push({\n material,\n colorCode,\n faceNormal: null,\n vertices: [v2, v1, v0],\n normals: [null, null, null]\n });\n totalFaces++;\n }\n break;\n case \"4\":\n colorCode = lp.getToken();\n material = getLocalMaterial(colorCode);\n ccw = bfcCCW;\n doubleSided = !bfcCertified || !bfcCull;\n if (ccw === true) {\n v0 = lp.getVector();\n v1 = lp.getVector();\n v2 = lp.getVector();\n v3 = lp.getVector();\n } else {\n v3 = lp.getVector();\n v2 = lp.getVector();\n v1 = lp.getVector();\n v0 = lp.getVector();\n }\n faces.push({\n material,\n colorCode,\n faceNormal: null,\n vertices: [v0, v1, v2, v3],\n normals: [null, null, null, null]\n });\n totalFaces += 2;\n if (doubleSided === true) {\n faces.push({\n material,\n colorCode,\n faceNormal: null,\n vertices: [v3, v2, v1, v0],\n normals: [null, null, null, null]\n });\n totalFaces += 2;\n }\n break;\n default:\n throw new Error('LDrawLoader: Unknown line type \"' + lineType + '\"' + lp.getLineNumberString() + \".\");\n }\n }\n if (parsingEmbeddedFiles) {\n this.setData(currentEmbeddedFileName, currentEmbeddedText);\n }\n return {\n faces,\n conditionalSegments,\n lineSegments,\n type,\n category,\n keywords,\n subobjects,\n totalFaces,\n startingConstructionStep,\n materials,\n fileName,\n group: null\n };\n }\n // returns an (optionally cloned) instance of the data\n getData(fileName, clone = true) {\n const key = fileName.toLowerCase();\n const result = this._cache[key];\n if (result === null || result instanceof Promise) {\n return null;\n }\n if (clone) {\n return this.cloneResult(result);\n } else {\n return result;\n }\n }\n // kicks off a fetch and parse of the requested data if it hasn't already been loaded. Returns when\n // the data is ready to use and can be retrieved synchronously with \"getData\".\n async ensureDataLoaded(fileName) {\n const key = fileName.toLowerCase();\n if (!(key in this._cache)) {\n this._cache[key] = this.fetchData(fileName).then((text) => {\n const info = this.parse(text, fileName);\n this._cache[key] = info;\n return info;\n });\n }\n await this._cache[key];\n }\n // sets the data in the cache from parsed data\n setData(fileName, text) {\n const key = fileName.toLowerCase();\n this._cache[key] = this.parse(text, fileName);\n }\n}\nfunction getMaterialFromCode(colorCode, parentColorCode, materialHierarchy, forEdge) {\n const isPassthrough = !forEdge && colorCode === MAIN_COLOUR_CODE || forEdge && colorCode === MAIN_EDGE_COLOUR_CODE;\n if (isPassthrough) {\n colorCode = parentColorCode;\n }\n return materialHierarchy[colorCode] || null;\n}\nclass LDrawPartsGeometryCache {\n constructor(loader) {\n this.loader = loader;\n this.parseCache = new LDrawParsedCache(loader);\n this._cache = {};\n }\n // Convert the given file information into a mesh by processing subobjects.\n async processIntoMesh(info) {\n const loader = this.loader;\n const parseCache = this.parseCache;\n const faceMaterials = /* @__PURE__ */ new Set();\n const processInfoSubobjects = async (info2, subobject = null) => {\n const subobjects = info2.subobjects;\n const promises = [];\n for (let i = 0, l = subobjects.length; i < l; i++) {\n const subobject2 = subobjects[i];\n const promise = parseCache.ensureDataLoaded(subobject2.fileName).then(() => {\n const subobjectInfo = parseCache.getData(subobject2.fileName, false);\n if (!isPrimitiveType(subobjectInfo.type)) {\n return this.loadModel(subobject2.fileName).catch((error) => {\n console.warn(error);\n return null;\n });\n }\n return processInfoSubobjects(parseCache.getData(subobject2.fileName), subobject2);\n });\n promises.push(promise);\n }\n const group2 = new Group();\n group2.userData.category = info2.category;\n group2.userData.keywords = info2.keywords;\n info2.group = group2;\n const subobjectInfos = await Promise.all(promises);\n for (let i = 0, l = subobjectInfos.length; i < l; i++) {\n const subobject2 = info2.subobjects[i];\n const subobjectInfo = subobjectInfos[i];\n if (subobjectInfo === null) {\n continue;\n }\n if (subobjectInfo.isGroup) {\n const subobjectGroup = subobjectInfo;\n subobject2.matrix.decompose(subobjectGroup.position, subobjectGroup.quaternion, subobjectGroup.scale);\n subobjectGroup.userData.startingConstructionStep = subobject2.startingConstructionStep;\n subobjectGroup.name = subobject2.fileName;\n loader.applyMaterialsToMesh(subobjectGroup, subobject2.colorCode, info2.materials);\n group2.add(subobjectGroup);\n continue;\n }\n if (subobjectInfo.group.children.length) {\n group2.add(subobjectInfo.group);\n }\n const parentLineSegments = info2.lineSegments;\n const parentConditionalSegments = info2.conditionalSegments;\n const parentFaces = info2.faces;\n const lineSegments = subobjectInfo.lineSegments;\n const conditionalSegments = subobjectInfo.conditionalSegments;\n const faces = subobjectInfo.faces;\n const matrix = subobject2.matrix;\n const inverted = subobject2.inverted;\n const matrixScaleInverted = matrix.determinant() < 0;\n const colorCode = subobject2.colorCode;\n const lineColorCode = colorCode === MAIN_COLOUR_CODE ? MAIN_EDGE_COLOUR_CODE : colorCode;\n for (let i2 = 0, l2 = lineSegments.length; i2 < l2; i2++) {\n const ls = lineSegments[i2];\n const vertices = ls.vertices;\n vertices[0].applyMatrix4(matrix);\n vertices[1].applyMatrix4(matrix);\n ls.colorCode = ls.colorCode === MAIN_EDGE_COLOUR_CODE ? lineColorCode : ls.colorCode;\n ls.material = ls.material || getMaterialFromCode(ls.colorCode, ls.colorCode, info2.materials, true);\n parentLineSegments.push(ls);\n }\n for (let i2 = 0, l2 = conditionalSegments.length; i2 < l2; i2++) {\n const os = conditionalSegments[i2];\n const vertices = os.vertices;\n const controlPoints = os.controlPoints;\n vertices[0].applyMatrix4(matrix);\n vertices[1].applyMatrix4(matrix);\n controlPoints[0].applyMatrix4(matrix);\n controlPoints[1].applyMatrix4(matrix);\n os.colorCode = os.colorCode === MAIN_EDGE_COLOUR_CODE ? lineColorCode : os.colorCode;\n os.material = os.material || getMaterialFromCode(os.colorCode, os.colorCode, info2.materials, true);\n parentConditionalSegments.push(os);\n }\n for (let i2 = 0, l2 = faces.length; i2 < l2; i2++) {\n const tri = faces[i2];\n const vertices = tri.vertices;\n for (let i3 = 0, l3 = vertices.length; i3 < l3; i3++) {\n vertices[i3].applyMatrix4(matrix);\n }\n tri.colorCode = tri.colorCode === MAIN_COLOUR_CODE ? colorCode : tri.colorCode;\n tri.material = tri.material || getMaterialFromCode(tri.colorCode, colorCode, info2.materials, false);\n faceMaterials.add(tri.colorCode);\n if (matrixScaleInverted !== inverted) {\n vertices.reverse();\n }\n parentFaces.push(tri);\n }\n info2.totalFaces += subobjectInfo.totalFaces;\n }\n if (subobject) {\n loader.applyMaterialsToMesh(group2, subobject.colorCode, info2.materials);\n }\n return info2;\n };\n for (let i = 0, l = info.faces; i < l; i++) {\n faceMaterials.add(info.faces[i].colorCode);\n }\n await processInfoSubobjects(info);\n if (loader.smoothNormals) {\n const checkSubSegments = faceMaterials.size > 1;\n generateFaceNormals(info.faces);\n smoothNormals(info.faces, info.lineSegments, checkSubSegments);\n }\n const group = info.group;\n if (info.faces.length > 0) {\n group.add(createObject(info.faces, 3, false, info.totalFaces));\n }\n if (info.lineSegments.length > 0) {\n group.add(createObject(info.lineSegments, 2));\n }\n if (info.conditionalSegments.length > 0) {\n group.add(createObject(info.conditionalSegments, 2, true));\n }\n return group;\n }\n hasCachedModel(fileName) {\n return fileName !== null && fileName.toLowerCase() in this._cache;\n }\n async getCachedModel(fileName) {\n if (fileName !== null && this.hasCachedModel(fileName)) {\n const key = fileName.toLowerCase();\n const group = await this._cache[key];\n return group.clone();\n } else {\n return null;\n }\n }\n // Loads and parses the model with the given file name. Returns a cached copy if available.\n async loadModel(fileName) {\n const parseCache = this.parseCache;\n const key = fileName.toLowerCase();\n if (this.hasCachedModel(fileName)) {\n return this.getCachedModel(fileName);\n } else {\n await parseCache.ensureDataLoaded(fileName);\n const info = parseCache.getData(fileName);\n const promise = this.processIntoMesh(info);\n if (this.hasCachedModel(fileName)) {\n return this.getCachedModel(fileName);\n }\n if (isPartType(info.type)) {\n this._cache[key] = promise;\n }\n const group = await promise;\n return group.clone();\n }\n }\n // parses the given model text into a renderable object. Returns cached copy if available.\n async parseModel(text) {\n const parseCache = this.parseCache;\n const info = parseCache.parse(text);\n if (isPartType(info.type) && this.hasCachedModel(info.fileName)) {\n return this.getCachedModel(info.fileName);\n }\n return this.processIntoMesh(info);\n }\n}\nfunction sortByMaterial(a, b) {\n if (a.colorCode === b.colorCode) {\n return 0;\n }\n if (a.colorCode < b.colorCode) {\n return -1;\n }\n return 1;\n}\nfunction createObject(elements, elementSize, isConditionalSegments = false, totalElements = null) {\n elements.sort(sortByMaterial);\n if (totalElements === null) {\n totalElements = elements.length;\n }\n const positions = new Float32Array(elementSize * totalElements * 3);\n const normals = elementSize === 3 ? new Float32Array(elementSize * totalElements * 3) : null;\n const materials = [];\n const quadArray = new Array(6);\n const bufferGeometry = new BufferGeometry();\n let prevMaterial = null;\n let index0 = 0;\n let numGroupVerts = 0;\n let offset = 0;\n for (let iElem = 0, nElem = elements.length; iElem < nElem; iElem++) {\n const elem = elements[iElem];\n let vertices = elem.vertices;\n if (vertices.length === 4) {\n quadArray[0] = vertices[0];\n quadArray[1] = vertices[1];\n quadArray[2] = vertices[2];\n quadArray[3] = vertices[0];\n quadArray[4] = vertices[2];\n quadArray[5] = vertices[3];\n vertices = quadArray;\n }\n for (let j = 0, l = vertices.length; j < l; j++) {\n const v = vertices[j];\n const index = offset + j * 3;\n positions[index + 0] = v.x;\n positions[index + 1] = v.y;\n positions[index + 2] = v.z;\n }\n if (elementSize === 3) {\n if (!elem.faceNormal) {\n const v0 = vertices[0];\n const v1 = vertices[1];\n const v2 = vertices[2];\n _tempVec0.subVectors(v1, v0);\n _tempVec1.subVectors(v2, v1);\n elem.faceNormal = new Vector3().crossVectors(_tempVec0, _tempVec1).normalize();\n }\n let elemNormals = elem.normals;\n if (elemNormals.length === 4) {\n quadArray[0] = elemNormals[0];\n quadArray[1] = elemNormals[1];\n quadArray[2] = elemNormals[2];\n quadArray[3] = elemNormals[0];\n quadArray[4] = elemNormals[2];\n quadArray[5] = elemNormals[3];\n elemNormals = quadArray;\n }\n for (let j = 0, l = elemNormals.length; j < l; j++) {\n let n = elem.faceNormal;\n if (elemNormals[j]) {\n n = elemNormals[j].norm;\n }\n const index = offset + j * 3;\n normals[index + 0] = n.x;\n normals[index + 1] = n.y;\n normals[index + 2] = n.z;\n }\n }\n if (prevMaterial !== elem.colorCode) {\n if (prevMaterial !== null) {\n bufferGeometry.addGroup(index0, numGroupVerts, materials.length - 1);\n }\n const material = elem.material;\n if (material !== null) {\n if (elementSize === 3) {\n materials.push(material);\n } else if (elementSize === 2) {\n if (material !== null) {\n if (isConditionalSegments) {\n materials.push(material.userData.edgeMaterial.userData.conditionalEdgeMaterial);\n } else {\n materials.push(material.userData.edgeMaterial);\n }\n } else {\n materials.push(null);\n }\n }\n } else {\n materials.push(elem.colorCode);\n }\n prevMaterial = elem.colorCode;\n index0 = offset / 3;\n numGroupVerts = vertices.length;\n } else {\n numGroupVerts += vertices.length;\n }\n offset += 3 * vertices.length;\n }\n if (numGroupVerts > 0) {\n bufferGeometry.addGroup(index0, Infinity, materials.length - 1);\n }\n bufferGeometry.setAttribute(\"position\", new BufferAttribute(positions, 3));\n if (normals !== null) {\n bufferGeometry.setAttribute(\"normal\", new BufferAttribute(normals, 3));\n }\n let object3d = null;\n if (elementSize === 2) {\n if (isConditionalSegments) {\n object3d = new ConditionalLineSegments(bufferGeometry, materials.length === 1 ? materials[0] : materials);\n } else {\n object3d = new LineSegments(bufferGeometry, materials.length === 1 ? materials[0] : materials);\n }\n } else if (elementSize === 3) {\n object3d = new Mesh(bufferGeometry, materials.length === 1 ? materials[0] : materials);\n }\n if (isConditionalSegments) {\n object3d.isConditionalLine = true;\n const controlArray0 = new Float32Array(elements.length * 3 * 2);\n const controlArray1 = new Float32Array(elements.length * 3 * 2);\n const directionArray = new Float32Array(elements.length * 3 * 2);\n for (let i = 0, l = elements.length; i < l; i++) {\n const os = elements[i];\n const vertices = os.vertices;\n const controlPoints = os.controlPoints;\n const c0 = controlPoints[0];\n const c1 = controlPoints[1];\n const v0 = vertices[0];\n const v1 = vertices[1];\n const index = i * 3 * 2;\n controlArray0[index + 0] = c0.x;\n controlArray0[index + 1] = c0.y;\n controlArray0[index + 2] = c0.z;\n controlArray0[index + 3] = c0.x;\n controlArray0[index + 4] = c0.y;\n controlArray0[index + 5] = c0.z;\n controlArray1[index + 0] = c1.x;\n controlArray1[index + 1] = c1.y;\n controlArray1[index + 2] = c1.z;\n controlArray1[index + 3] = c1.x;\n controlArray1[index + 4] = c1.y;\n controlArray1[index + 5] = c1.z;\n directionArray[index + 0] = v1.x - v0.x;\n directionArray[index + 1] = v1.y - v0.y;\n directionArray[index + 2] = v1.z - v0.z;\n directionArray[index + 3] = v1.x - v0.x;\n directionArray[index + 4] = v1.y - v0.y;\n directionArray[index + 5] = v1.z - v0.z;\n }\n bufferGeometry.setAttribute(\"control0\", new BufferAttribute(controlArray0, 3, false));\n bufferGeometry.setAttribute(\"control1\", new BufferAttribute(controlArray1, 3, false));\n bufferGeometry.setAttribute(\"direction\", new BufferAttribute(directionArray, 3, false));\n }\n return object3d;\n}\nclass LDrawLoader extends Loader {\n constructor(manager) {\n super(manager);\n this.materials = [];\n this.materialLibrary = {};\n this.partsCache = new LDrawPartsGeometryCache(this);\n this.fileMap = {};\n this.setMaterials([]);\n this.smoothNormals = true;\n this.partsLibraryPath = \"\";\n }\n setPartsLibraryPath(path) {\n this.partsLibraryPath = path;\n return this;\n }\n async preloadMaterials(url) {\n const fileLoader = new FileLoader(this.manager);\n fileLoader.setPath(this.path);\n fileLoader.setRequestHeader(this.requestHeader);\n fileLoader.setWithCredentials(this.withCredentials);\n const text = await fileLoader.loadAsync(url);\n const colorLineRegex = /^0 !COLOUR/;\n const lines = text.split(/[\\n\\r]/g);\n const materials = [];\n for (let i = 0, l = lines.length; i < l; i++) {\n const line = lines[i];\n if (colorLineRegex.test(line)) {\n const directive = line.replace(colorLineRegex, \"\");\n const material = this.parseColorMetaDirective(new LineParser(directive));\n materials.push(material);\n }\n }\n this.setMaterials(materials);\n }\n load(url, onLoad, onProgress, onError) {\n const fileLoader = new FileLoader(this.manager);\n fileLoader.setPath(this.path);\n fileLoader.setRequestHeader(this.requestHeader);\n fileLoader.setWithCredentials(this.withCredentials);\n fileLoader.load(\n url,\n (text) => {\n this.partsCache.parseModel(text, this.materialLibrary).then((group) => {\n this.applyMaterialsToMesh(group, MAIN_COLOUR_CODE, this.materialLibrary, true);\n this.computeConstructionSteps(group);\n onLoad(group);\n }).catch(onError);\n },\n onProgress,\n onError\n );\n }\n parse(text, onLoad) {\n this.partsCache.parseModel(text, this.materialLibrary).then((group) => {\n this.computeConstructionSteps(group);\n onLoad(group);\n });\n }\n setMaterials(materials) {\n this.materialLibrary = {};\n this.materials = [];\n for (let i = 0, l = materials.length; i < l; i++) {\n this.addMaterial(materials[i]);\n }\n this.addMaterial(this.parseColorMetaDirective(new LineParser(\"Main_Colour CODE 16 VALUE #FF8080 EDGE #333333\")));\n this.addMaterial(this.parseColorMetaDirective(new LineParser(\"Edge_Colour CODE 24 VALUE #A0A0A0 EDGE #333333\")));\n return this;\n }\n setFileMap(fileMap) {\n this.fileMap = fileMap;\n return this;\n }\n addMaterial(material) {\n const matLib = this.materialLibrary;\n if (!matLib[material.userData.code]) {\n this.materials.push(material);\n matLib[material.userData.code] = material;\n }\n return this;\n }\n getMaterial(colorCode) {\n if (colorCode.startsWith(\"0x2\")) {\n const color = colorCode.substring(3);\n return this.parseColorMetaDirective(\n new LineParser(\"Direct_Color_\" + color + \" CODE -1 VALUE #\" + color + \" EDGE #\" + color)\n );\n }\n return this.materialLibrary[colorCode] || null;\n }\n // Applies the appropriate materials to a prebuilt hierarchy of geometry. Assumes that color codes are present\n // in the material array if they need to be filled in.\n applyMaterialsToMesh(group, parentColorCode, materialHierarchy, finalMaterialPass = false) {\n const loader = this;\n const parentIsPassthrough = parentColorCode === MAIN_COLOUR_CODE;\n group.traverse((c) => {\n if (c.isMesh || c.isLineSegments) {\n if (Array.isArray(c.material)) {\n for (let i = 0, l = c.material.length; i < l; i++) {\n if (!c.material[i].isMaterial) {\n c.material[i] = getMaterial(c, c.material[i]);\n }\n }\n } else if (!c.material.isMaterial) {\n c.material = getMaterial(c, c.material);\n }\n }\n });\n function getMaterial(c, colorCode) {\n if (parentIsPassthrough && !(colorCode in materialHierarchy) && !finalMaterialPass) {\n return colorCode;\n }\n const forEdge = c.isLineSegments || c.isConditionalLine;\n const isPassthrough = !forEdge && colorCode === MAIN_COLOUR_CODE || forEdge && colorCode === MAIN_EDGE_COLOUR_CODE;\n if (isPassthrough) {\n colorCode = parentColorCode;\n }\n let material = null;\n if (colorCode in materialHierarchy) {\n material = materialHierarchy[colorCode];\n } else if (finalMaterialPass) {\n material = loader.getMaterial(colorCode);\n if (material === null) {\n throw new Error(`LDrawLoader: Material properties for code ${colorCode} not available.`);\n }\n } else {\n return colorCode;\n }\n if (c.isLineSegments) {\n material = material.userData.edgeMaterial;\n if (c.isConditionalLine) {\n material = material.userData.conditionalEdgeMaterial;\n }\n }\n return material;\n }\n }\n getMainMaterial() {\n return this.getMaterial(MAIN_COLOUR_CODE);\n }\n getMainEdgeMaterial() {\n return this.getMaterial(MAIN_EDGE_COLOUR_CODE);\n }\n parseColorMetaDirective(lineParser) {\n let code = null;\n let color = 16711935;\n let edgeColor = 16711935;\n let alpha = 1;\n let isTransparent = false;\n let luminance = 0;\n let finishType = FINISH_TYPE_DEFAULT;\n let edgeMaterial = null;\n const name = lineParser.getToken();\n if (!name) {\n throw new Error(\n 'LDrawLoader: Material name was expected after \"!COLOUR tag' + lineParser.getLineNumberString() + \".\"\n );\n }\n let token = null;\n while (true) {\n token = lineParser.getToken();\n if (!token) {\n break;\n }\n switch (token.toUpperCase()) {\n case \"CODE\":\n code = lineParser.getToken();\n break;\n case \"VALUE\":\n color = lineParser.getToken();\n if (color.startsWith(\"0x\")) {\n color = \"#\" + color.substring(2);\n } else if (!color.startsWith(\"#\")) {\n throw new Error(\n \"LDrawLoader: Invalid color while parsing material\" + lineParser.getLineNumberString() + \".\"\n );\n }\n break;\n case \"EDGE\":\n edgeColor = lineParser.getToken();\n if (edgeColor.startsWith(\"0x\")) {\n edgeColor = \"#\" + edgeColor.substring(2);\n } else if (!edgeColor.startsWith(\"#\")) {\n edgeMaterial = this.getMaterial(edgeColor);\n if (!edgeMaterial) {\n throw new Error(\n \"LDrawLoader: Invalid edge color while parsing material\" + lineParser.getLineNumberString() + \".\"\n );\n }\n edgeMaterial = edgeMaterial.userData.edgeMaterial;\n }\n break;\n case \"ALPHA\":\n alpha = parseInt(lineParser.getToken());\n if (isNaN(alpha)) {\n throw new Error(\n \"LDrawLoader: Invalid alpha value in material definition\" + lineParser.getLineNumberString() + \".\"\n );\n }\n alpha = Math.max(0, Math.min(1, alpha / 255));\n if (alpha < 1) {\n isTransparent = true;\n }\n break;\n case \"LUMINANCE\":\n luminance = parseInt(lineParser.getToken());\n if (isNaN(luminance)) {\n throw new Error(\n \"LDrawLoader: Invalid luminance value in material definition\" + LineParser.getLineNumberString() + \".\"\n );\n }\n luminance = Math.max(0, Math.min(1, luminance / 255));\n break;\n case \"CHROME\":\n finishType = FINISH_TYPE_CHROME;\n break;\n case \"PEARLESCENT\":\n finishType = FINISH_TYPE_PEARLESCENT;\n break;\n case \"RUBBER\":\n finishType = FINISH_TYPE_RUBBER;\n break;\n case \"MATTE_METALLIC\":\n finishType = FINISH_TYPE_MATTE_METALLIC;\n break;\n case \"METAL\":\n finishType = FINISH_TYPE_METAL;\n break;\n case \"MATERIAL\":\n lineParser.setToEnd();\n break;\n default:\n throw new Error(\n 'LDrawLoader: Unknown token \"' + token + '\" while parsing material' + lineParser.getLineNumberString() + \".\"\n );\n }\n }\n let material = null;\n switch (finishType) {\n case FINISH_TYPE_DEFAULT:\n material = new MeshStandardMaterial({ color, roughness: 0.3, metalness: 0 });\n break;\n case FINISH_TYPE_PEARLESCENT:\n material = new MeshStandardMaterial({ color, roughness: 0.3, metalness: 0.25 });\n break;\n case FINISH_TYPE_CHROME:\n material = new MeshStandardMaterial({ color, roughness: 0, metalness: 1 });\n break;\n case FINISH_TYPE_RUBBER:\n material = new MeshStandardMaterial({ color, roughness: 0.9, metalness: 0 });\n break;\n case FINISH_TYPE_MATTE_METALLIC:\n material = new MeshStandardMaterial({ color, roughness: 0.8, metalness: 0.4 });\n break;\n case FINISH_TYPE_METAL:\n material = new MeshStandardMaterial({ color, roughness: 0.2, metalness: 0.85 });\n break;\n }\n material.transparent = isTransparent;\n material.premultipliedAlpha = true;\n material.opacity = alpha;\n material.depthWrite = !isTransparent;\n material.polygonOffset = true;\n material.polygonOffsetFactor = 1;\n if (luminance !== 0) {\n material.emissive.set(material.color).multiplyScalar(luminance);\n }\n if (!edgeMaterial) {\n edgeMaterial = new LineBasicMaterial({\n color: edgeColor,\n transparent: isTransparent,\n opacity: alpha,\n depthWrite: !isTransparent\n });\n edgeMaterial.userData.code = code;\n edgeMaterial.name = name + \" - Edge\";\n edgeMaterial.userData.conditionalEdgeMaterial = new LDrawConditionalLineMaterial({\n fog: true,\n transparent: isTransparent,\n depthWrite: !isTransparent,\n color: edgeColor,\n opacity: alpha\n });\n }\n material.userData.code = code;\n material.name = name;\n material.userData.edgeMaterial = edgeMaterial;\n this.addMaterial(material);\n return material;\n }\n computeConstructionSteps(model) {\n let stepNumber = 0;\n model.traverse((c) => {\n if (c.isGroup) {\n if (c.userData.startingConstructionStep) {\n stepNumber++;\n }\n c.userData.constructionStep = stepNumber;\n }\n });\n model.userData.numConstructionSteps = stepNumber + 1;\n }\n}\nexport {\n LDrawLoader\n};\n//# sourceMappingURL=LDrawLoader.js.map\n","import { Loader, FileLoader, Matrix3, Vector2, Vector3, ShapeUtils, Box2, Shape, Path, BufferGeometry, Float32BufferAttribute, ShapePath } from \"three\";\nconst COLOR_SPACE_SVG = \"srgb\";\nconst SVGLoader = /* @__PURE__ */ (() => {\n class SVGLoader2 extends Loader {\n constructor(manager) {\n super(manager);\n this.defaultDPI = 90;\n this.defaultUnit = \"px\";\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const loader = new FileLoader(scope.manager);\n loader.setPath(scope.path);\n loader.setRequestHeader(scope.requestHeader);\n loader.setWithCredentials(scope.withCredentials);\n loader.load(\n url,\n function(text) {\n try {\n onLoad(scope.parse(text));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(text) {\n const scope = this;\n function parseNode(node, style) {\n if (node.nodeType !== 1)\n return;\n const transform = getNodeTransform(node);\n let isDefsNode = false;\n let path = null;\n switch (node.nodeName) {\n case \"svg\":\n style = parseStyle(node, style);\n break;\n case \"style\":\n parseCSSStylesheet(node);\n break;\n case \"g\":\n style = parseStyle(node, style);\n break;\n case \"path\":\n style = parseStyle(node, style);\n if (node.hasAttribute(\"d\"))\n path = parsePathNode(node);\n break;\n case \"rect\":\n style = parseStyle(node, style);\n path = parseRectNode(node);\n break;\n case \"polygon\":\n style = parseStyle(node, style);\n path = parsePolygonNode(node);\n break;\n case \"polyline\":\n style = parseStyle(node, style);\n path = parsePolylineNode(node);\n break;\n case \"circle\":\n style = parseStyle(node, style);\n path = parseCircleNode(node);\n break;\n case \"ellipse\":\n style = parseStyle(node, style);\n path = parseEllipseNode(node);\n break;\n case \"line\":\n style = parseStyle(node, style);\n path = parseLineNode(node);\n break;\n case \"defs\":\n isDefsNode = true;\n break;\n case \"use\":\n style = parseStyle(node, style);\n const href = node.getAttributeNS(\"http://www.w3.org/1999/xlink\", \"href\") || \"\";\n const usedNodeId = href.substring(1);\n const usedNode = node.viewportElement.getElementById(usedNodeId);\n if (usedNode) {\n parseNode(usedNode, style);\n } else {\n console.warn(\"SVGLoader: 'use node' references non-existent node id: \" + usedNodeId);\n }\n break;\n }\n if (path) {\n if (style.fill !== void 0 && style.fill !== \"none\") {\n path.color.setStyle(style.fill, COLOR_SPACE_SVG);\n }\n transformPath(path, currentTransform);\n paths.push(path);\n path.userData = { node, style };\n }\n const childNodes = node.childNodes;\n for (let i = 0; i < childNodes.length; i++) {\n const node2 = childNodes[i];\n if (isDefsNode && node2.nodeName !== \"style\" && node2.nodeName !== \"defs\") {\n continue;\n }\n parseNode(node2, style);\n }\n if (transform) {\n transformStack.pop();\n if (transformStack.length > 0) {\n currentTransform.copy(transformStack[transformStack.length - 1]);\n } else {\n currentTransform.identity();\n }\n }\n }\n function parsePathNode(node) {\n const path = new ShapePath();\n const point = new Vector2();\n const control = new Vector2();\n const firstPoint = new Vector2();\n let isFirstPoint = true;\n let doSetFirstPoint = false;\n const d = node.getAttribute(\"d\");\n if (d === \"\" || d === \"none\")\n return null;\n const commands = d.match(/[a-df-z][^a-df-z]*/gi);\n for (let i = 0, l = commands.length; i < l; i++) {\n const command = commands[i];\n const type = command.charAt(0);\n const data2 = command.slice(1).trim();\n if (isFirstPoint === true) {\n doSetFirstPoint = true;\n isFirstPoint = false;\n }\n let numbers;\n switch (type) {\n case \"M\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 2) {\n point.x = numbers[j + 0];\n point.y = numbers[j + 1];\n control.x = point.x;\n control.y = point.y;\n if (j === 0) {\n path.moveTo(point.x, point.y);\n } else {\n path.lineTo(point.x, point.y);\n }\n if (j === 0)\n firstPoint.copy(point);\n }\n break;\n case \"H\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j++) {\n point.x = numbers[j];\n control.x = point.x;\n control.y = point.y;\n path.lineTo(point.x, point.y);\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"V\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j++) {\n point.y = numbers[j];\n control.x = point.x;\n control.y = point.y;\n path.lineTo(point.x, point.y);\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"L\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 2) {\n point.x = numbers[j + 0];\n point.y = numbers[j + 1];\n control.x = point.x;\n control.y = point.y;\n path.lineTo(point.x, point.y);\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"C\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 6) {\n path.bezierCurveTo(\n numbers[j + 0],\n numbers[j + 1],\n numbers[j + 2],\n numbers[j + 3],\n numbers[j + 4],\n numbers[j + 5]\n );\n control.x = numbers[j + 2];\n control.y = numbers[j + 3];\n point.x = numbers[j + 4];\n point.y = numbers[j + 5];\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"S\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 4) {\n path.bezierCurveTo(\n getReflection(point.x, control.x),\n getReflection(point.y, control.y),\n numbers[j + 0],\n numbers[j + 1],\n numbers[j + 2],\n numbers[j + 3]\n );\n control.x = numbers[j + 0];\n control.y = numbers[j + 1];\n point.x = numbers[j + 2];\n point.y = numbers[j + 3];\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"Q\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 4) {\n path.quadraticCurveTo(numbers[j + 0], numbers[j + 1], numbers[j + 2], numbers[j + 3]);\n control.x = numbers[j + 0];\n control.y = numbers[j + 1];\n point.x = numbers[j + 2];\n point.y = numbers[j + 3];\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"T\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 2) {\n const rx = getReflection(point.x, control.x);\n const ry = getReflection(point.y, control.y);\n path.quadraticCurveTo(rx, ry, numbers[j + 0], numbers[j + 1]);\n control.x = rx;\n control.y = ry;\n point.x = numbers[j + 0];\n point.y = numbers[j + 1];\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"A\":\n numbers = parseFloats(data2, [3, 4], 7);\n for (let j = 0, jl = numbers.length; j < jl; j += 7) {\n if (numbers[j + 5] == point.x && numbers[j + 6] == point.y)\n continue;\n const start = point.clone();\n point.x = numbers[j + 5];\n point.y = numbers[j + 6];\n control.x = point.x;\n control.y = point.y;\n parseArcCommand(\n path,\n numbers[j],\n numbers[j + 1],\n numbers[j + 2],\n numbers[j + 3],\n numbers[j + 4],\n start,\n point\n );\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"m\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 2) {\n point.x += numbers[j + 0];\n point.y += numbers[j + 1];\n control.x = point.x;\n control.y = point.y;\n if (j === 0) {\n path.moveTo(point.x, point.y);\n } else {\n path.lineTo(point.x, point.y);\n }\n if (j === 0)\n firstPoint.copy(point);\n }\n break;\n case \"h\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j++) {\n point.x += numbers[j];\n control.x = point.x;\n control.y = point.y;\n path.lineTo(point.x, point.y);\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"v\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j++) {\n point.y += numbers[j];\n control.x = point.x;\n control.y = point.y;\n path.lineTo(point.x, point.y);\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"l\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 2) {\n point.x += numbers[j + 0];\n point.y += numbers[j + 1];\n control.x = point.x;\n control.y = point.y;\n path.lineTo(point.x, point.y);\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"c\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 6) {\n path.bezierCurveTo(\n point.x + numbers[j + 0],\n point.y + numbers[j + 1],\n point.x + numbers[j + 2],\n point.y + numbers[j + 3],\n point.x + numbers[j + 4],\n point.y + numbers[j + 5]\n );\n control.x = point.x + numbers[j + 2];\n control.y = point.y + numbers[j + 3];\n point.x += numbers[j + 4];\n point.y += numbers[j + 5];\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"s\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 4) {\n path.bezierCurveTo(\n getReflection(point.x, control.x),\n getReflection(point.y, control.y),\n point.x + numbers[j + 0],\n point.y + numbers[j + 1],\n point.x + numbers[j + 2],\n point.y + numbers[j + 3]\n );\n control.x = point.x + numbers[j + 0];\n control.y = point.y + numbers[j + 1];\n point.x += numbers[j + 2];\n point.y += numbers[j + 3];\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"q\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 4) {\n path.quadraticCurveTo(\n point.x + numbers[j + 0],\n point.y + numbers[j + 1],\n point.x + numbers[j + 2],\n point.y + numbers[j + 3]\n );\n control.x = point.x + numbers[j + 0];\n control.y = point.y + numbers[j + 1];\n point.x += numbers[j + 2];\n point.y += numbers[j + 3];\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"t\":\n numbers = parseFloats(data2);\n for (let j = 0, jl = numbers.length; j < jl; j += 2) {\n const rx = getReflection(point.x, control.x);\n const ry = getReflection(point.y, control.y);\n path.quadraticCurveTo(rx, ry, point.x + numbers[j + 0], point.y + numbers[j + 1]);\n control.x = rx;\n control.y = ry;\n point.x = point.x + numbers[j + 0];\n point.y = point.y + numbers[j + 1];\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"a\":\n numbers = parseFloats(data2, [3, 4], 7);\n for (let j = 0, jl = numbers.length; j < jl; j += 7) {\n if (numbers[j + 5] == 0 && numbers[j + 6] == 0)\n continue;\n const start = point.clone();\n point.x += numbers[j + 5];\n point.y += numbers[j + 6];\n control.x = point.x;\n control.y = point.y;\n parseArcCommand(\n path,\n numbers[j],\n numbers[j + 1],\n numbers[j + 2],\n numbers[j + 3],\n numbers[j + 4],\n start,\n point\n );\n if (j === 0 && doSetFirstPoint === true)\n firstPoint.copy(point);\n }\n break;\n case \"Z\":\n case \"z\":\n path.currentPath.autoClose = true;\n if (path.currentPath.curves.length > 0) {\n point.copy(firstPoint);\n path.currentPath.currentPoint.copy(point);\n isFirstPoint = true;\n }\n break;\n default:\n console.warn(command);\n }\n doSetFirstPoint = false;\n }\n return path;\n }\n function parseCSSStylesheet(node) {\n if (!node.sheet || !node.sheet.cssRules || !node.sheet.cssRules.length)\n return;\n for (let i = 0; i < node.sheet.cssRules.length; i++) {\n const stylesheet = node.sheet.cssRules[i];\n if (stylesheet.type !== 1)\n continue;\n const selectorList = stylesheet.selectorText.split(/,/gm).filter(Boolean).map((i2) => i2.trim());\n for (let j = 0; j < selectorList.length; j++) {\n const definitions = Object.fromEntries(Object.entries(stylesheet.style).filter(([, v]) => v !== \"\"));\n stylesheets[selectorList[j]] = Object.assign(stylesheets[selectorList[j]] || {}, definitions);\n }\n }\n }\n function parseArcCommand(path, rx, ry, x_axis_rotation, large_arc_flag, sweep_flag, start, end) {\n if (rx == 0 || ry == 0) {\n path.lineTo(end.x, end.y);\n return;\n }\n x_axis_rotation = x_axis_rotation * Math.PI / 180;\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n const dx2 = (start.x - end.x) / 2;\n const dy2 = (start.y - end.y) / 2;\n const x1p = Math.cos(x_axis_rotation) * dx2 + Math.sin(x_axis_rotation) * dy2;\n const y1p = -Math.sin(x_axis_rotation) * dx2 + Math.cos(x_axis_rotation) * dy2;\n let rxs = rx * rx;\n let rys = ry * ry;\n const x1ps = x1p * x1p;\n const y1ps = y1p * y1p;\n const cr = x1ps / rxs + y1ps / rys;\n if (cr > 1) {\n const s = Math.sqrt(cr);\n rx = s * rx;\n ry = s * ry;\n rxs = rx * rx;\n rys = ry * ry;\n }\n const dq = rxs * y1ps + rys * x1ps;\n const pq = (rxs * rys - dq) / dq;\n let q = Math.sqrt(Math.max(0, pq));\n if (large_arc_flag === sweep_flag)\n q = -q;\n const cxp = q * rx * y1p / ry;\n const cyp = -q * ry * x1p / rx;\n const cx = Math.cos(x_axis_rotation) * cxp - Math.sin(x_axis_rotation) * cyp + (start.x + end.x) / 2;\n const cy = Math.sin(x_axis_rotation) * cxp + Math.cos(x_axis_rotation) * cyp + (start.y + end.y) / 2;\n const theta = svgAngle(1, 0, (x1p - cxp) / rx, (y1p - cyp) / ry);\n const delta = svgAngle((x1p - cxp) / rx, (y1p - cyp) / ry, (-x1p - cxp) / rx, (-y1p - cyp) / ry) % (Math.PI * 2);\n path.currentPath.absellipse(cx, cy, rx, ry, theta, theta + delta, sweep_flag === 0, x_axis_rotation);\n }\n function svgAngle(ux, uy, vx, vy) {\n const dot = ux * vx + uy * vy;\n const len = Math.sqrt(ux * ux + uy * uy) * Math.sqrt(vx * vx + vy * vy);\n let ang = Math.acos(Math.max(-1, Math.min(1, dot / len)));\n if (ux * vy - uy * vx < 0)\n ang = -ang;\n return ang;\n }\n function parseRectNode(node) {\n const x = parseFloatWithUnits(node.getAttribute(\"x\") || 0);\n const y = parseFloatWithUnits(node.getAttribute(\"y\") || 0);\n const rx = parseFloatWithUnits(node.getAttribute(\"rx\") || node.getAttribute(\"ry\") || 0);\n const ry = parseFloatWithUnits(node.getAttribute(\"ry\") || node.getAttribute(\"rx\") || 0);\n const w = parseFloatWithUnits(node.getAttribute(\"width\"));\n const h = parseFloatWithUnits(node.getAttribute(\"height\"));\n const bci = 1 - 0.551915024494;\n const path = new ShapePath();\n path.moveTo(x + rx, y);\n path.lineTo(x + w - rx, y);\n if (rx !== 0 || ry !== 0) {\n path.bezierCurveTo(x + w - rx * bci, y, x + w, y + ry * bci, x + w, y + ry);\n }\n path.lineTo(x + w, y + h - ry);\n if (rx !== 0 || ry !== 0) {\n path.bezierCurveTo(x + w, y + h - ry * bci, x + w - rx * bci, y + h, x + w - rx, y + h);\n }\n path.lineTo(x + rx, y + h);\n if (rx !== 0 || ry !== 0) {\n path.bezierCurveTo(x + rx * bci, y + h, x, y + h - ry * bci, x, y + h - ry);\n }\n path.lineTo(x, y + ry);\n if (rx !== 0 || ry !== 0) {\n path.bezierCurveTo(x, y + ry * bci, x + rx * bci, y, x + rx, y);\n }\n return path;\n }\n function parsePolygonNode(node) {\n function iterator(match, a, b) {\n const x = parseFloatWithUnits(a);\n const y = parseFloatWithUnits(b);\n if (index === 0) {\n path.moveTo(x, y);\n } else {\n path.lineTo(x, y);\n }\n index++;\n }\n const regex = /([+-]?\\d*\\.?\\d+(?:e[+-]?\\d+)?)(?:,|\\s)([+-]?\\d*\\.?\\d+(?:e[+-]?\\d+)?)/g;\n const path = new ShapePath();\n let index = 0;\n node.getAttribute(\"points\").replace(regex, iterator);\n path.currentPath.autoClose = true;\n return path;\n }\n function parsePolylineNode(node) {\n function iterator(match, a, b) {\n const x = parseFloatWithUnits(a);\n const y = parseFloatWithUnits(b);\n if (index === 0) {\n path.moveTo(x, y);\n } else {\n path.lineTo(x, y);\n }\n index++;\n }\n const regex = /([+-]?\\d*\\.?\\d+(?:e[+-]?\\d+)?)(?:,|\\s)([+-]?\\d*\\.?\\d+(?:e[+-]?\\d+)?)/g;\n const path = new ShapePath();\n let index = 0;\n node.getAttribute(\"points\").replace(regex, iterator);\n path.currentPath.autoClose = false;\n return path;\n }\n function parseCircleNode(node) {\n const x = parseFloatWithUnits(node.getAttribute(\"cx\") || 0);\n const y = parseFloatWithUnits(node.getAttribute(\"cy\") || 0);\n const r = parseFloatWithUnits(node.getAttribute(\"r\") || 0);\n const subpath = new Path();\n subpath.absarc(x, y, r, 0, Math.PI * 2);\n const path = new ShapePath();\n path.subPaths.push(subpath);\n return path;\n }\n function parseEllipseNode(node) {\n const x = parseFloatWithUnits(node.getAttribute(\"cx\") || 0);\n const y = parseFloatWithUnits(node.getAttribute(\"cy\") || 0);\n const rx = parseFloatWithUnits(node.getAttribute(\"rx\") || 0);\n const ry = parseFloatWithUnits(node.getAttribute(\"ry\") || 0);\n const subpath = new Path();\n subpath.absellipse(x, y, rx, ry, 0, Math.PI * 2);\n const path = new ShapePath();\n path.subPaths.push(subpath);\n return path;\n }\n function parseLineNode(node) {\n const x1 = parseFloatWithUnits(node.getAttribute(\"x1\") || 0);\n const y1 = parseFloatWithUnits(node.getAttribute(\"y1\") || 0);\n const x2 = parseFloatWithUnits(node.getAttribute(\"x2\") || 0);\n const y2 = parseFloatWithUnits(node.getAttribute(\"y2\") || 0);\n const path = new ShapePath();\n path.moveTo(x1, y1);\n path.lineTo(x2, y2);\n path.currentPath.autoClose = false;\n return path;\n }\n function parseStyle(node, style) {\n style = Object.assign({}, style);\n let stylesheetStyles = {};\n if (node.hasAttribute(\"class\")) {\n const classSelectors = node.getAttribute(\"class\").split(/\\s/).filter(Boolean).map((i) => i.trim());\n for (let i = 0; i < classSelectors.length; i++) {\n stylesheetStyles = Object.assign(stylesheetStyles, stylesheets[\".\" + classSelectors[i]]);\n }\n }\n if (node.hasAttribute(\"id\")) {\n stylesheetStyles = Object.assign(stylesheetStyles, stylesheets[\"#\" + node.getAttribute(\"id\")]);\n }\n function addStyle(svgName, jsName, adjustFunction) {\n if (adjustFunction === void 0)\n adjustFunction = function copy(v) {\n if (v.startsWith(\"url\"))\n console.warn(\"SVGLoader: url access in attributes is not implemented.\");\n return v;\n };\n if (node.hasAttribute(svgName))\n style[jsName] = adjustFunction(node.getAttribute(svgName));\n if (stylesheetStyles[svgName])\n style[jsName] = adjustFunction(stylesheetStyles[svgName]);\n if (node.style && node.style[svgName] !== \"\")\n style[jsName] = adjustFunction(node.style[svgName]);\n }\n function clamp(v) {\n return Math.max(0, Math.min(1, parseFloatWithUnits(v)));\n }\n function positive(v) {\n return Math.max(0, parseFloatWithUnits(v));\n }\n addStyle(\"fill\", \"fill\");\n addStyle(\"fill-opacity\", \"fillOpacity\", clamp);\n addStyle(\"fill-rule\", \"fillRule\");\n addStyle(\"opacity\", \"opacity\", clamp);\n addStyle(\"stroke\", \"stroke\");\n addStyle(\"stroke-opacity\", \"strokeOpacity\", clamp);\n addStyle(\"stroke-width\", \"strokeWidth\", positive);\n addStyle(\"stroke-linejoin\", \"strokeLineJoin\");\n addStyle(\"stroke-linecap\", \"strokeLineCap\");\n addStyle(\"stroke-miterlimit\", \"strokeMiterLimit\", positive);\n addStyle(\"visibility\", \"visibility\");\n return style;\n }\n function getReflection(a, b) {\n return a - (b - a);\n }\n function parseFloats(input, flags, stride) {\n if (typeof input !== \"string\") {\n throw new TypeError(\"Invalid input: \" + typeof input);\n }\n const RE = {\n SEPARATOR: /[ \\t\\r\\n\\,.\\-+]/,\n WHITESPACE: /[ \\t\\r\\n]/,\n DIGIT: /[\\d]/,\n SIGN: /[-+]/,\n POINT: /\\./,\n COMMA: /,/,\n EXP: /e/i,\n FLAGS: /[01]/\n };\n const SEP = 0;\n const INT = 1;\n const FLOAT = 2;\n const EXP = 3;\n let state = SEP;\n let seenComma = true;\n let number = \"\", exponent = \"\";\n const result = [];\n function throwSyntaxError(current2, i, partial) {\n const error = new SyntaxError('Unexpected character \"' + current2 + '\" at index ' + i + \".\");\n error.partial = partial;\n throw error;\n }\n function newNumber() {\n if (number !== \"\") {\n if (exponent === \"\")\n result.push(Number(number));\n else\n result.push(Number(number) * Math.pow(10, Number(exponent)));\n }\n number = \"\";\n exponent = \"\";\n }\n let current;\n const length = input.length;\n for (let i = 0; i < length; i++) {\n current = input[i];\n if (Array.isArray(flags) && flags.includes(result.length % stride) && RE.FLAGS.test(current)) {\n state = INT;\n number = current;\n newNumber();\n continue;\n }\n if (state === SEP) {\n if (RE.WHITESPACE.test(current)) {\n continue;\n }\n if (RE.DIGIT.test(current) || RE.SIGN.test(current)) {\n state = INT;\n number = current;\n continue;\n }\n if (RE.POINT.test(current)) {\n state = FLOAT;\n number = current;\n continue;\n }\n if (RE.COMMA.test(current)) {\n if (seenComma) {\n throwSyntaxError(current, i, result);\n }\n seenComma = true;\n }\n }\n if (state === INT) {\n if (RE.DIGIT.test(current)) {\n number += current;\n continue;\n }\n if (RE.POINT.test(current)) {\n number += current;\n state = FLOAT;\n continue;\n }\n if (RE.EXP.test(current)) {\n state = EXP;\n continue;\n }\n if (RE.SIGN.test(current) && number.length === 1 && RE.SIGN.test(number[0])) {\n throwSyntaxError(current, i, result);\n }\n }\n if (state === FLOAT) {\n if (RE.DIGIT.test(current)) {\n number += current;\n continue;\n }\n if (RE.EXP.test(current)) {\n state = EXP;\n continue;\n }\n if (RE.POINT.test(current) && number[number.length - 1] === \".\") {\n throwSyntaxError(current, i, result);\n }\n }\n if (state === EXP) {\n if (RE.DIGIT.test(current)) {\n exponent += current;\n continue;\n }\n if (RE.SIGN.test(current)) {\n if (exponent === \"\") {\n exponent += current;\n continue;\n }\n if (exponent.length === 1 && RE.SIGN.test(exponent)) {\n throwSyntaxError(current, i, result);\n }\n }\n }\n if (RE.WHITESPACE.test(current)) {\n newNumber();\n state = SEP;\n seenComma = false;\n } else if (RE.COMMA.test(current)) {\n newNumber();\n state = SEP;\n seenComma = true;\n } else if (RE.SIGN.test(current)) {\n newNumber();\n state = INT;\n number = current;\n } else if (RE.POINT.test(current)) {\n newNumber();\n state = FLOAT;\n number = current;\n } else {\n throwSyntaxError(current, i, result);\n }\n }\n newNumber();\n return result;\n }\n const units = [\"mm\", \"cm\", \"in\", \"pt\", \"pc\", \"px\"];\n const unitConversion = {\n mm: {\n mm: 1,\n cm: 0.1,\n in: 1 / 25.4,\n pt: 72 / 25.4,\n pc: 6 / 25.4,\n px: -1\n },\n cm: {\n mm: 10,\n cm: 1,\n in: 1 / 2.54,\n pt: 72 / 2.54,\n pc: 6 / 2.54,\n px: -1\n },\n in: {\n mm: 25.4,\n cm: 2.54,\n in: 1,\n pt: 72,\n pc: 6,\n px: -1\n },\n pt: {\n mm: 25.4 / 72,\n cm: 2.54 / 72,\n in: 1 / 72,\n pt: 1,\n pc: 6 / 72,\n px: -1\n },\n pc: {\n mm: 25.4 / 6,\n cm: 2.54 / 6,\n in: 1 / 6,\n pt: 72 / 6,\n pc: 1,\n px: -1\n },\n px: {\n px: 1\n }\n };\n function parseFloatWithUnits(string) {\n let theUnit = \"px\";\n if (typeof string === \"string\" || string instanceof String) {\n for (let i = 0, n = units.length; i < n; i++) {\n const u = units[i];\n if (string.endsWith(u)) {\n theUnit = u;\n string = string.substring(0, string.length - u.length);\n break;\n }\n }\n }\n let scale = void 0;\n if (theUnit === \"px\" && scope.defaultUnit !== \"px\") {\n scale = unitConversion[\"in\"][scope.defaultUnit] / scope.defaultDPI;\n } else {\n scale = unitConversion[theUnit][scope.defaultUnit];\n if (scale < 0) {\n scale = unitConversion[theUnit][\"in\"] * scope.defaultDPI;\n }\n }\n return scale * parseFloat(string);\n }\n function getNodeTransform(node) {\n if (!(node.hasAttribute(\"transform\") || node.nodeName === \"use\" && (node.hasAttribute(\"x\") || node.hasAttribute(\"y\")))) {\n return null;\n }\n const transform = parseNodeTransform(node);\n if (transformStack.length > 0) {\n transform.premultiply(transformStack[transformStack.length - 1]);\n }\n currentTransform.copy(transform);\n transformStack.push(transform);\n return transform;\n }\n function parseNodeTransform(node) {\n const transform = new Matrix3();\n const currentTransform2 = tempTransform0;\n if (node.nodeName === \"use\" && (node.hasAttribute(\"x\") || node.hasAttribute(\"y\"))) {\n const tx = parseFloatWithUnits(node.getAttribute(\"x\"));\n const ty = parseFloatWithUnits(node.getAttribute(\"y\"));\n transform.translate(tx, ty);\n }\n if (node.hasAttribute(\"transform\")) {\n const transformsTexts = node.getAttribute(\"transform\").split(\")\");\n for (let tIndex = transformsTexts.length - 1; tIndex >= 0; tIndex--) {\n const transformText = transformsTexts[tIndex].trim();\n if (transformText === \"\")\n continue;\n const openParPos = transformText.indexOf(\"(\");\n const closeParPos = transformText.length;\n if (openParPos > 0 && openParPos < closeParPos) {\n const transformType = transformText.slice(0, openParPos);\n const array = parseFloats(transformText.slice(openParPos + 1));\n currentTransform2.identity();\n switch (transformType) {\n case \"translate\":\n if (array.length >= 1) {\n const tx = array[0];\n let ty = 0;\n if (array.length >= 2) {\n ty = array[1];\n }\n currentTransform2.translate(tx, ty);\n }\n break;\n case \"rotate\":\n if (array.length >= 1) {\n let angle = 0;\n let cx = 0;\n let cy = 0;\n angle = array[0] * Math.PI / 180;\n if (array.length >= 3) {\n cx = array[1];\n cy = array[2];\n }\n tempTransform1.makeTranslation(-cx, -cy);\n tempTransform2.makeRotation(angle);\n tempTransform3.multiplyMatrices(tempTransform2, tempTransform1);\n tempTransform1.makeTranslation(cx, cy);\n currentTransform2.multiplyMatrices(tempTransform1, tempTransform3);\n }\n break;\n case \"scale\":\n if (array.length >= 1) {\n const scaleX = array[0];\n let scaleY = scaleX;\n if (array.length >= 2) {\n scaleY = array[1];\n }\n currentTransform2.scale(scaleX, scaleY);\n }\n break;\n case \"skewX\":\n if (array.length === 1) {\n currentTransform2.set(1, Math.tan(array[0] * Math.PI / 180), 0, 0, 1, 0, 0, 0, 1);\n }\n break;\n case \"skewY\":\n if (array.length === 1) {\n currentTransform2.set(1, 0, 0, Math.tan(array[0] * Math.PI / 180), 1, 0, 0, 0, 1);\n }\n break;\n case \"matrix\":\n if (array.length === 6) {\n currentTransform2.set(array[0], array[2], array[4], array[1], array[3], array[5], 0, 0, 1);\n }\n break;\n }\n }\n transform.premultiply(currentTransform2);\n }\n }\n return transform;\n }\n function transformPath(path, m) {\n function transfVec2(v2) {\n tempV3.set(v2.x, v2.y, 1).applyMatrix3(m);\n v2.set(tempV3.x, tempV3.y);\n }\n function transfEllipseGeneric(curve) {\n const a = curve.xRadius;\n const b = curve.yRadius;\n const cosTheta = Math.cos(curve.aRotation);\n const sinTheta = Math.sin(curve.aRotation);\n const v1 = new Vector3(a * cosTheta, a * sinTheta, 0);\n const v2 = new Vector3(-b * sinTheta, b * cosTheta, 0);\n const f1 = v1.applyMatrix3(m);\n const f2 = v2.applyMatrix3(m);\n const mF = tempTransform0.set(f1.x, f2.x, 0, f1.y, f2.y, 0, 0, 0, 1);\n const mFInv = tempTransform1.copy(mF).invert();\n const mFInvT = tempTransform2.copy(mFInv).transpose();\n const mQ = mFInvT.multiply(mFInv);\n const mQe = mQ.elements;\n const ed = eigenDecomposition(mQe[0], mQe[1], mQe[4]);\n const rt1sqrt = Math.sqrt(ed.rt1);\n const rt2sqrt = Math.sqrt(ed.rt2);\n curve.xRadius = 1 / rt1sqrt;\n curve.yRadius = 1 / rt2sqrt;\n curve.aRotation = Math.atan2(ed.sn, ed.cs);\n const isFullEllipse = (curve.aEndAngle - curve.aStartAngle) % (2 * Math.PI) < Number.EPSILON;\n if (!isFullEllipse) {\n const mDsqrt = tempTransform1.set(rt1sqrt, 0, 0, 0, rt2sqrt, 0, 0, 0, 1);\n const mRT = tempTransform2.set(ed.cs, ed.sn, 0, -ed.sn, ed.cs, 0, 0, 0, 1);\n const mDRF = mDsqrt.multiply(mRT).multiply(mF);\n const transformAngle = (phi) => {\n const { x: cosR, y: sinR } = new Vector3(Math.cos(phi), Math.sin(phi), 0).applyMatrix3(mDRF);\n return Math.atan2(sinR, cosR);\n };\n curve.aStartAngle = transformAngle(curve.aStartAngle);\n curve.aEndAngle = transformAngle(curve.aEndAngle);\n if (isTransformFlipped(m)) {\n curve.aClockwise = !curve.aClockwise;\n }\n }\n }\n function transfEllipseNoSkew(curve) {\n const sx = getTransformScaleX(m);\n const sy = getTransformScaleY(m);\n curve.xRadius *= sx;\n curve.yRadius *= sy;\n const theta = sx > Number.EPSILON ? Math.atan2(m.elements[1], m.elements[0]) : Math.atan2(-m.elements[3], m.elements[4]);\n curve.aRotation += theta;\n if (isTransformFlipped(m)) {\n curve.aStartAngle *= -1;\n curve.aEndAngle *= -1;\n curve.aClockwise = !curve.aClockwise;\n }\n }\n const subPaths = path.subPaths;\n for (let i = 0, n = subPaths.length; i < n; i++) {\n const subPath = subPaths[i];\n const curves = subPath.curves;\n for (let j = 0; j < curves.length; j++) {\n const curve = curves[j];\n if (curve.isLineCurve) {\n transfVec2(curve.v1);\n transfVec2(curve.v2);\n } else if (curve.isCubicBezierCurve) {\n transfVec2(curve.v0);\n transfVec2(curve.v1);\n transfVec2(curve.v2);\n transfVec2(curve.v3);\n } else if (curve.isQuadraticBezierCurve) {\n transfVec2(curve.v0);\n transfVec2(curve.v1);\n transfVec2(curve.v2);\n } else if (curve.isEllipseCurve) {\n tempV2.set(curve.aX, curve.aY);\n transfVec2(tempV2);\n curve.aX = tempV2.x;\n curve.aY = tempV2.y;\n if (isTransformSkewed(m)) {\n transfEllipseGeneric(curve);\n } else {\n transfEllipseNoSkew(curve);\n }\n }\n }\n }\n }\n function isTransformFlipped(m) {\n const te = m.elements;\n return te[0] * te[4] - te[1] * te[3] < 0;\n }\n function isTransformSkewed(m) {\n const te = m.elements;\n const basisDot = te[0] * te[3] + te[1] * te[4];\n if (basisDot === 0)\n return false;\n const sx = getTransformScaleX(m);\n const sy = getTransformScaleY(m);\n return Math.abs(basisDot / (sx * sy)) > Number.EPSILON;\n }\n function getTransformScaleX(m) {\n const te = m.elements;\n return Math.sqrt(te[0] * te[0] + te[1] * te[1]);\n }\n function getTransformScaleY(m) {\n const te = m.elements;\n return Math.sqrt(te[3] * te[3] + te[4] * te[4]);\n }\n function eigenDecomposition(A, B, C) {\n let rt1, rt2, cs, sn, t;\n const sm = A + C;\n const df = A - C;\n const rt = Math.sqrt(df * df + 4 * B * B);\n if (sm > 0) {\n rt1 = 0.5 * (sm + rt);\n t = 1 / rt1;\n rt2 = A * t * C - B * t * B;\n } else if (sm < 0) {\n rt2 = 0.5 * (sm - rt);\n } else {\n rt1 = 0.5 * rt;\n rt2 = -0.5 * rt;\n }\n if (df > 0) {\n cs = df + rt;\n } else {\n cs = df - rt;\n }\n if (Math.abs(cs) > 2 * Math.abs(B)) {\n t = -2 * B / cs;\n sn = 1 / Math.sqrt(1 + t * t);\n cs = t * sn;\n } else if (Math.abs(B) === 0) {\n cs = 1;\n sn = 0;\n } else {\n t = -0.5 * cs / B;\n cs = 1 / Math.sqrt(1 + t * t);\n sn = t * cs;\n }\n if (df > 0) {\n t = cs;\n cs = -sn;\n sn = t;\n }\n return { rt1, rt2, cs, sn };\n }\n const paths = [];\n const stylesheets = {};\n const transformStack = [];\n const tempTransform0 = new Matrix3();\n const tempTransform1 = new Matrix3();\n const tempTransform2 = new Matrix3();\n const tempTransform3 = new Matrix3();\n const tempV2 = new Vector2();\n const tempV3 = new Vector3();\n const currentTransform = new Matrix3();\n const xml = new DOMParser().parseFromString(text, \"image/svg+xml\");\n parseNode(xml.documentElement, {\n fill: \"#000\",\n fillOpacity: 1,\n strokeOpacity: 1,\n strokeWidth: 1,\n strokeLineJoin: \"miter\",\n strokeLineCap: \"butt\",\n strokeMiterLimit: 4\n });\n const data = { paths, xml: xml.documentElement };\n return data;\n }\n static createShapes(shapePath) {\n const BIGNUMBER = 999999999;\n const IntersectionLocationType = {\n ORIGIN: 0,\n DESTINATION: 1,\n BETWEEN: 2,\n LEFT: 3,\n RIGHT: 4,\n BEHIND: 5,\n BEYOND: 6\n };\n const classifyResult = {\n loc: IntersectionLocationType.ORIGIN,\n t: 0\n };\n function findEdgeIntersection(a0, a1, b0, b1) {\n const x1 = a0.x;\n const x2 = a1.x;\n const x3 = b0.x;\n const x4 = b1.x;\n const y1 = a0.y;\n const y2 = a1.y;\n const y3 = b0.y;\n const y4 = b1.y;\n const nom1 = (x4 - x3) * (y1 - y3) - (y4 - y3) * (x1 - x3);\n const nom2 = (x2 - x1) * (y1 - y3) - (y2 - y1) * (x1 - x3);\n const denom = (y4 - y3) * (x2 - x1) - (x4 - x3) * (y2 - y1);\n const t1 = nom1 / denom;\n const t2 = nom2 / denom;\n if (denom === 0 && nom1 !== 0 || t1 <= 0 || t1 >= 1 || t2 < 0 || t2 > 1) {\n return null;\n } else if (nom1 === 0 && denom === 0) {\n for (let i = 0; i < 2; i++) {\n classifyPoint(i === 0 ? b0 : b1, a0, a1);\n if (classifyResult.loc == IntersectionLocationType.ORIGIN) {\n const point = i === 0 ? b0 : b1;\n return { x: point.x, y: point.y, t: classifyResult.t };\n } else if (classifyResult.loc == IntersectionLocationType.BETWEEN) {\n const x = +(x1 + classifyResult.t * (x2 - x1)).toPrecision(10);\n const y = +(y1 + classifyResult.t * (y2 - y1)).toPrecision(10);\n return { x, y, t: classifyResult.t };\n }\n }\n return null;\n } else {\n for (let i = 0; i < 2; i++) {\n classifyPoint(i === 0 ? b0 : b1, a0, a1);\n if (classifyResult.loc == IntersectionLocationType.ORIGIN) {\n const point = i === 0 ? b0 : b1;\n return { x: point.x, y: point.y, t: classifyResult.t };\n }\n }\n const x = +(x1 + t1 * (x2 - x1)).toPrecision(10);\n const y = +(y1 + t1 * (y2 - y1)).toPrecision(10);\n return { x, y, t: t1 };\n }\n }\n function classifyPoint(p, edgeStart, edgeEnd) {\n const ax = edgeEnd.x - edgeStart.x;\n const ay = edgeEnd.y - edgeStart.y;\n const bx = p.x - edgeStart.x;\n const by = p.y - edgeStart.y;\n const sa = ax * by - bx * ay;\n if (p.x === edgeStart.x && p.y === edgeStart.y) {\n classifyResult.loc = IntersectionLocationType.ORIGIN;\n classifyResult.t = 0;\n return;\n }\n if (p.x === edgeEnd.x && p.y === edgeEnd.y) {\n classifyResult.loc = IntersectionLocationType.DESTINATION;\n classifyResult.t = 1;\n return;\n }\n if (sa < -Number.EPSILON) {\n classifyResult.loc = IntersectionLocationType.LEFT;\n return;\n }\n if (sa > Number.EPSILON) {\n classifyResult.loc = IntersectionLocationType.RIGHT;\n return;\n }\n if (ax * bx < 0 || ay * by < 0) {\n classifyResult.loc = IntersectionLocationType.BEHIND;\n return;\n }\n if (Math.sqrt(ax * ax + ay * ay) < Math.sqrt(bx * bx + by * by)) {\n classifyResult.loc = IntersectionLocationType.BEYOND;\n return;\n }\n let t;\n if (ax !== 0) {\n t = bx / ax;\n } else {\n t = by / ay;\n }\n classifyResult.loc = IntersectionLocationType.BETWEEN;\n classifyResult.t = t;\n }\n function getIntersections(path1, path2) {\n const intersectionsRaw = [];\n const intersections = [];\n for (let index = 1; index < path1.length; index++) {\n const path1EdgeStart = path1[index - 1];\n const path1EdgeEnd = path1[index];\n for (let index2 = 1; index2 < path2.length; index2++) {\n const path2EdgeStart = path2[index2 - 1];\n const path2EdgeEnd = path2[index2];\n const intersection = findEdgeIntersection(path1EdgeStart, path1EdgeEnd, path2EdgeStart, path2EdgeEnd);\n if (intersection !== null && intersectionsRaw.find(\n (i) => i.t <= intersection.t + Number.EPSILON && i.t >= intersection.t - Number.EPSILON\n ) === void 0) {\n intersectionsRaw.push(intersection);\n intersections.push(new Vector2(intersection.x, intersection.y));\n }\n }\n }\n return intersections;\n }\n function getScanlineIntersections(scanline, boundingBox, paths) {\n const center = new Vector2();\n boundingBox.getCenter(center);\n const allIntersections = [];\n paths.forEach((path) => {\n if (path.boundingBox.containsPoint(center)) {\n const intersections = getIntersections(scanline, path.points);\n intersections.forEach((p) => {\n allIntersections.push({ identifier: path.identifier, isCW: path.isCW, point: p });\n });\n }\n });\n allIntersections.sort((i1, i2) => {\n return i1.point.x - i2.point.x;\n });\n return allIntersections;\n }\n function isHoleTo(simplePath, allPaths, scanlineMinX2, scanlineMaxX2, _fillRule) {\n if (_fillRule === null || _fillRule === void 0 || _fillRule === \"\") {\n _fillRule = \"nonzero\";\n }\n const centerBoundingBox = new Vector2();\n simplePath.boundingBox.getCenter(centerBoundingBox);\n const scanline = [\n new Vector2(scanlineMinX2, centerBoundingBox.y),\n new Vector2(scanlineMaxX2, centerBoundingBox.y)\n ];\n const scanlineIntersections = getScanlineIntersections(scanline, simplePath.boundingBox, allPaths);\n scanlineIntersections.sort((i1, i2) => {\n return i1.point.x - i2.point.x;\n });\n const baseIntersections = [];\n const otherIntersections = [];\n scanlineIntersections.forEach((i2) => {\n if (i2.identifier === simplePath.identifier) {\n baseIntersections.push(i2);\n } else {\n otherIntersections.push(i2);\n }\n });\n const firstXOfPath = baseIntersections[0].point.x;\n const stack = [];\n let i = 0;\n while (i < otherIntersections.length && otherIntersections[i].point.x < firstXOfPath) {\n if (stack.length > 0 && stack[stack.length - 1] === otherIntersections[i].identifier) {\n stack.pop();\n } else {\n stack.push(otherIntersections[i].identifier);\n }\n i++;\n }\n stack.push(simplePath.identifier);\n if (_fillRule === \"evenodd\") {\n const isHole = stack.length % 2 === 0 ? true : false;\n const isHoleFor = stack[stack.length - 2];\n return { identifier: simplePath.identifier, isHole, for: isHoleFor };\n } else if (_fillRule === \"nonzero\") {\n let isHole = true;\n let isHoleFor = null;\n let lastCWValue = null;\n for (let i2 = 0; i2 < stack.length; i2++) {\n const identifier = stack[i2];\n if (isHole) {\n lastCWValue = allPaths[identifier].isCW;\n isHole = false;\n isHoleFor = identifier;\n } else if (lastCWValue !== allPaths[identifier].isCW) {\n lastCWValue = allPaths[identifier].isCW;\n isHole = true;\n }\n }\n return { identifier: simplePath.identifier, isHole, for: isHoleFor };\n } else {\n console.warn('fill-rule: \"' + _fillRule + '\" is currently not implemented.');\n }\n }\n let scanlineMinX = BIGNUMBER;\n let scanlineMaxX = -BIGNUMBER;\n let simplePaths = shapePath.subPaths.map((p) => {\n const points = p.getPoints();\n let maxY = -BIGNUMBER;\n let minY = BIGNUMBER;\n let maxX = -BIGNUMBER;\n let minX = BIGNUMBER;\n for (let i = 0; i < points.length; i++) {\n const p2 = points[i];\n if (p2.y > maxY) {\n maxY = p2.y;\n }\n if (p2.y < minY) {\n minY = p2.y;\n }\n if (p2.x > maxX) {\n maxX = p2.x;\n }\n if (p2.x < minX) {\n minX = p2.x;\n }\n }\n if (scanlineMaxX <= maxX) {\n scanlineMaxX = maxX + 1;\n }\n if (scanlineMinX >= minX) {\n scanlineMinX = minX - 1;\n }\n return {\n curves: p.curves,\n points,\n isCW: ShapeUtils.isClockWise(points),\n identifier: -1,\n boundingBox: new Box2(new Vector2(minX, minY), new Vector2(maxX, maxY))\n };\n });\n simplePaths = simplePaths.filter((sp) => sp.points.length > 1);\n for (let identifier = 0; identifier < simplePaths.length; identifier++) {\n simplePaths[identifier].identifier = identifier;\n }\n const isAHole = simplePaths.map(\n (p) => isHoleTo(\n p,\n simplePaths,\n scanlineMinX,\n scanlineMaxX,\n shapePath.userData ? shapePath.userData.style.fillRule : void 0\n )\n );\n const shapesToReturn = [];\n simplePaths.forEach((p) => {\n const amIAHole = isAHole[p.identifier];\n if (!amIAHole.isHole) {\n const shape = new Shape();\n shape.curves = p.curves;\n const holes = isAHole.filter((h) => h.isHole && h.for === p.identifier);\n holes.forEach((h) => {\n const hole = simplePaths[h.identifier];\n const path = new Path();\n path.curves = hole.curves;\n shape.holes.push(path);\n });\n shapesToReturn.push(shape);\n }\n });\n return shapesToReturn;\n }\n static getStrokeStyle(width, color, lineJoin, lineCap, miterLimit) {\n width = width !== void 0 ? width : 1;\n color = color !== void 0 ? color : \"#000\";\n lineJoin = lineJoin !== void 0 ? lineJoin : \"miter\";\n lineCap = lineCap !== void 0 ? lineCap : \"butt\";\n miterLimit = miterLimit !== void 0 ? miterLimit : 4;\n return {\n strokeColor: color,\n strokeWidth: width,\n strokeLineJoin: lineJoin,\n strokeLineCap: lineCap,\n strokeMiterLimit: miterLimit\n };\n }\n static pointsToStroke(points, style, arcDivisions, minDistance) {\n const vertices = [];\n const normals = [];\n const uvs = [];\n if (SVGLoader2.pointsToStrokeWithBuffers(points, style, arcDivisions, minDistance, vertices, normals, uvs) === 0) {\n return null;\n }\n const geometry = new BufferGeometry();\n geometry.setAttribute(\"position\", new Float32BufferAttribute(vertices, 3));\n geometry.setAttribute(\"normal\", new Float32BufferAttribute(normals, 3));\n geometry.setAttribute(\"uv\", new Float32BufferAttribute(uvs, 2));\n return geometry;\n }\n static pointsToStrokeWithBuffers(points, style, arcDivisions, minDistance, vertices, normals, uvs, vertexOffset) {\n const tempV2_1 = new Vector2();\n const tempV2_2 = new Vector2();\n const tempV2_3 = new Vector2();\n const tempV2_4 = new Vector2();\n const tempV2_5 = new Vector2();\n const tempV2_6 = new Vector2();\n const tempV2_7 = new Vector2();\n const lastPointL = new Vector2();\n const lastPointR = new Vector2();\n const point0L = new Vector2();\n const point0R = new Vector2();\n const currentPointL = new Vector2();\n const currentPointR = new Vector2();\n const nextPointL = new Vector2();\n const nextPointR = new Vector2();\n const innerPoint = new Vector2();\n const outerPoint = new Vector2();\n arcDivisions = arcDivisions !== void 0 ? arcDivisions : 12;\n minDistance = minDistance !== void 0 ? minDistance : 1e-3;\n vertexOffset = vertexOffset !== void 0 ? vertexOffset : 0;\n points = removeDuplicatedPoints(points);\n const numPoints = points.length;\n if (numPoints < 2)\n return 0;\n const isClosed = points[0].equals(points[numPoints - 1]);\n let currentPoint;\n let previousPoint = points[0];\n let nextPoint;\n const strokeWidth2 = style.strokeWidth / 2;\n const deltaU = 1 / (numPoints - 1);\n let u0 = 0, u1;\n let innerSideModified;\n let joinIsOnLeftSide;\n let isMiter;\n let initialJoinIsOnLeftSide = false;\n let numVertices = 0;\n let currentCoordinate = vertexOffset * 3;\n let currentCoordinateUV = vertexOffset * 2;\n getNormal(points[0], points[1], tempV2_1).multiplyScalar(strokeWidth2);\n lastPointL.copy(points[0]).sub(tempV2_1);\n lastPointR.copy(points[0]).add(tempV2_1);\n point0L.copy(lastPointL);\n point0R.copy(lastPointR);\n for (let iPoint = 1; iPoint < numPoints; iPoint++) {\n currentPoint = points[iPoint];\n if (iPoint === numPoints - 1) {\n if (isClosed) {\n nextPoint = points[1];\n } else\n nextPoint = void 0;\n } else {\n nextPoint = points[iPoint + 1];\n }\n const normal1 = tempV2_1;\n getNormal(previousPoint, currentPoint, normal1);\n tempV2_3.copy(normal1).multiplyScalar(strokeWidth2);\n currentPointL.copy(currentPoint).sub(tempV2_3);\n currentPointR.copy(currentPoint).add(tempV2_3);\n u1 = u0 + deltaU;\n innerSideModified = false;\n if (nextPoint !== void 0) {\n getNormal(currentPoint, nextPoint, tempV2_2);\n tempV2_3.copy(tempV2_2).multiplyScalar(strokeWidth2);\n nextPointL.copy(currentPoint).sub(tempV2_3);\n nextPointR.copy(currentPoint).add(tempV2_3);\n joinIsOnLeftSide = true;\n tempV2_3.subVectors(nextPoint, previousPoint);\n if (normal1.dot(tempV2_3) < 0) {\n joinIsOnLeftSide = false;\n }\n if (iPoint === 1)\n initialJoinIsOnLeftSide = joinIsOnLeftSide;\n tempV2_3.subVectors(nextPoint, currentPoint);\n tempV2_3.normalize();\n const dot = Math.abs(normal1.dot(tempV2_3));\n if (dot > Number.EPSILON) {\n const miterSide = strokeWidth2 / dot;\n tempV2_3.multiplyScalar(-miterSide);\n tempV2_4.subVectors(currentPoint, previousPoint);\n tempV2_5.copy(tempV2_4).setLength(miterSide).add(tempV2_3);\n innerPoint.copy(tempV2_5).negate();\n const miterLength2 = tempV2_5.length();\n const segmentLengthPrev = tempV2_4.length();\n tempV2_4.divideScalar(segmentLengthPrev);\n tempV2_6.subVectors(nextPoint, currentPoint);\n const segmentLengthNext = tempV2_6.length();\n tempV2_6.divideScalar(segmentLengthNext);\n if (tempV2_4.dot(innerPoint) < segmentLengthPrev && tempV2_6.dot(innerPoint) < segmentLengthNext) {\n innerSideModified = true;\n }\n outerPoint.copy(tempV2_5).add(currentPoint);\n innerPoint.add(currentPoint);\n isMiter = false;\n if (innerSideModified) {\n if (joinIsOnLeftSide) {\n nextPointR.copy(innerPoint);\n currentPointR.copy(innerPoint);\n } else {\n nextPointL.copy(innerPoint);\n currentPointL.copy(innerPoint);\n }\n } else {\n makeSegmentTriangles();\n }\n switch (style.strokeLineJoin) {\n case \"bevel\":\n makeSegmentWithBevelJoin(joinIsOnLeftSide, innerSideModified, u1);\n break;\n case \"round\":\n createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide, innerSideModified);\n if (joinIsOnLeftSide) {\n makeCircularSector(currentPoint, currentPointL, nextPointL, u1, 0);\n } else {\n makeCircularSector(currentPoint, nextPointR, currentPointR, u1, 1);\n }\n break;\n case \"miter\":\n case \"miter-clip\":\n default:\n const miterFraction = strokeWidth2 * style.strokeMiterLimit / miterLength2;\n if (miterFraction < 1) {\n if (style.strokeLineJoin !== \"miter-clip\") {\n makeSegmentWithBevelJoin(joinIsOnLeftSide, innerSideModified, u1);\n break;\n } else {\n createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide, innerSideModified);\n if (joinIsOnLeftSide) {\n tempV2_6.subVectors(outerPoint, currentPointL).multiplyScalar(miterFraction).add(currentPointL);\n tempV2_7.subVectors(outerPoint, nextPointL).multiplyScalar(miterFraction).add(nextPointL);\n addVertex(currentPointL, u1, 0);\n addVertex(tempV2_6, u1, 0);\n addVertex(currentPoint, u1, 0.5);\n addVertex(currentPoint, u1, 0.5);\n addVertex(tempV2_6, u1, 0);\n addVertex(tempV2_7, u1, 0);\n addVertex(currentPoint, u1, 0.5);\n addVertex(tempV2_7, u1, 0);\n addVertex(nextPointL, u1, 0);\n } else {\n tempV2_6.subVectors(outerPoint, currentPointR).multiplyScalar(miterFraction).add(currentPointR);\n tempV2_7.subVectors(outerPoint, nextPointR).multiplyScalar(miterFraction).add(nextPointR);\n addVertex(currentPointR, u1, 1);\n addVertex(tempV2_6, u1, 1);\n addVertex(currentPoint, u1, 0.5);\n addVertex(currentPoint, u1, 0.5);\n addVertex(tempV2_6, u1, 1);\n addVertex(tempV2_7, u1, 1);\n addVertex(currentPoint, u1, 0.5);\n addVertex(tempV2_7, u1, 1);\n addVertex(nextPointR, u1, 1);\n }\n }\n } else {\n if (innerSideModified) {\n if (joinIsOnLeftSide) {\n addVertex(lastPointR, u0, 1);\n addVertex(lastPointL, u0, 0);\n addVertex(outerPoint, u1, 0);\n addVertex(lastPointR, u0, 1);\n addVertex(outerPoint, u1, 0);\n addVertex(innerPoint, u1, 1);\n } else {\n addVertex(lastPointR, u0, 1);\n addVertex(lastPointL, u0, 0);\n addVertex(outerPoint, u1, 1);\n addVertex(lastPointL, u0, 0);\n addVertex(innerPoint, u1, 0);\n addVertex(outerPoint, u1, 1);\n }\n if (joinIsOnLeftSide) {\n nextPointL.copy(outerPoint);\n } else {\n nextPointR.copy(outerPoint);\n }\n } else {\n if (joinIsOnLeftSide) {\n addVertex(currentPointL, u1, 0);\n addVertex(outerPoint, u1, 0);\n addVertex(currentPoint, u1, 0.5);\n addVertex(currentPoint, u1, 0.5);\n addVertex(outerPoint, u1, 0);\n addVertex(nextPointL, u1, 0);\n } else {\n addVertex(currentPointR, u1, 1);\n addVertex(outerPoint, u1, 1);\n addVertex(currentPoint, u1, 0.5);\n addVertex(currentPoint, u1, 0.5);\n addVertex(outerPoint, u1, 1);\n addVertex(nextPointR, u1, 1);\n }\n }\n isMiter = true;\n }\n break;\n }\n } else {\n makeSegmentTriangles();\n }\n } else {\n makeSegmentTriangles();\n }\n if (!isClosed && iPoint === numPoints - 1) {\n addCapGeometry(points[0], point0L, point0R, joinIsOnLeftSide, true, u0);\n }\n u0 = u1;\n previousPoint = currentPoint;\n lastPointL.copy(nextPointL);\n lastPointR.copy(nextPointR);\n }\n if (!isClosed) {\n addCapGeometry(currentPoint, currentPointL, currentPointR, joinIsOnLeftSide, false, u1);\n } else if (innerSideModified && vertices) {\n let lastOuter = outerPoint;\n let lastInner = innerPoint;\n if (initialJoinIsOnLeftSide !== joinIsOnLeftSide) {\n lastOuter = innerPoint;\n lastInner = outerPoint;\n }\n if (joinIsOnLeftSide) {\n if (isMiter || initialJoinIsOnLeftSide) {\n lastInner.toArray(vertices, 0 * 3);\n lastInner.toArray(vertices, 3 * 3);\n if (isMiter) {\n lastOuter.toArray(vertices, 1 * 3);\n }\n }\n } else {\n if (isMiter || !initialJoinIsOnLeftSide) {\n lastInner.toArray(vertices, 1 * 3);\n lastInner.toArray(vertices, 3 * 3);\n if (isMiter) {\n lastOuter.toArray(vertices, 0 * 3);\n }\n }\n }\n }\n return numVertices;\n function getNormal(p1, p2, result) {\n result.subVectors(p2, p1);\n return result.set(-result.y, result.x).normalize();\n }\n function addVertex(position, u, v) {\n if (vertices) {\n vertices[currentCoordinate] = position.x;\n vertices[currentCoordinate + 1] = position.y;\n vertices[currentCoordinate + 2] = 0;\n if (normals) {\n normals[currentCoordinate] = 0;\n normals[currentCoordinate + 1] = 0;\n normals[currentCoordinate + 2] = 1;\n }\n currentCoordinate += 3;\n if (uvs) {\n uvs[currentCoordinateUV] = u;\n uvs[currentCoordinateUV + 1] = v;\n currentCoordinateUV += 2;\n }\n }\n numVertices += 3;\n }\n function makeCircularSector(center, p1, p2, u, v) {\n tempV2_1.copy(p1).sub(center).normalize();\n tempV2_2.copy(p2).sub(center).normalize();\n let angle = Math.PI;\n const dot = tempV2_1.dot(tempV2_2);\n if (Math.abs(dot) < 1)\n angle = Math.abs(Math.acos(dot));\n angle /= arcDivisions;\n tempV2_3.copy(p1);\n for (let i = 0, il = arcDivisions - 1; i < il; i++) {\n tempV2_4.copy(tempV2_3).rotateAround(center, angle);\n addVertex(tempV2_3, u, v);\n addVertex(tempV2_4, u, v);\n addVertex(center, u, 0.5);\n tempV2_3.copy(tempV2_4);\n }\n addVertex(tempV2_4, u, v);\n addVertex(p2, u, v);\n addVertex(center, u, 0.5);\n }\n function makeSegmentTriangles() {\n addVertex(lastPointR, u0, 1);\n addVertex(lastPointL, u0, 0);\n addVertex(currentPointL, u1, 0);\n addVertex(lastPointR, u0, 1);\n addVertex(currentPointL, u1, 0);\n addVertex(currentPointR, u1, 1);\n }\n function makeSegmentWithBevelJoin(joinIsOnLeftSide2, innerSideModified2, u) {\n if (innerSideModified2) {\n if (joinIsOnLeftSide2) {\n addVertex(lastPointR, u0, 1);\n addVertex(lastPointL, u0, 0);\n addVertex(currentPointL, u1, 0);\n addVertex(lastPointR, u0, 1);\n addVertex(currentPointL, u1, 0);\n addVertex(innerPoint, u1, 1);\n addVertex(currentPointL, u, 0);\n addVertex(nextPointL, u, 0);\n addVertex(innerPoint, u, 0.5);\n } else {\n addVertex(lastPointR, u0, 1);\n addVertex(lastPointL, u0, 0);\n addVertex(currentPointR, u1, 1);\n addVertex(lastPointL, u0, 0);\n addVertex(innerPoint, u1, 0);\n addVertex(currentPointR, u1, 1);\n addVertex(currentPointR, u, 1);\n addVertex(innerPoint, u, 0);\n addVertex(nextPointR, u, 1);\n }\n } else {\n if (joinIsOnLeftSide2) {\n addVertex(currentPointL, u, 0);\n addVertex(nextPointL, u, 0);\n addVertex(currentPoint, u, 0.5);\n } else {\n addVertex(currentPointR, u, 1);\n addVertex(nextPointR, u, 0);\n addVertex(currentPoint, u, 0.5);\n }\n }\n }\n function createSegmentTrianglesWithMiddleSection(joinIsOnLeftSide2, innerSideModified2) {\n if (innerSideModified2) {\n if (joinIsOnLeftSide2) {\n addVertex(lastPointR, u0, 1);\n addVertex(lastPointL, u0, 0);\n addVertex(currentPointL, u1, 0);\n addVertex(lastPointR, u0, 1);\n addVertex(currentPointL, u1, 0);\n addVertex(innerPoint, u1, 1);\n addVertex(currentPointL, u0, 0);\n addVertex(currentPoint, u1, 0.5);\n addVertex(innerPoint, u1, 1);\n addVertex(currentPoint, u1, 0.5);\n addVertex(nextPointL, u0, 0);\n addVertex(innerPoint, u1, 1);\n } else {\n addVertex(lastPointR, u0, 1);\n addVertex(lastPointL, u0, 0);\n addVertex(currentPointR, u1, 1);\n addVertex(lastPointL, u0, 0);\n addVertex(innerPoint, u1, 0);\n addVertex(currentPointR, u1, 1);\n addVertex(currentPointR, u0, 1);\n addVertex(innerPoint, u1, 0);\n addVertex(currentPoint, u1, 0.5);\n addVertex(currentPoint, u1, 0.5);\n addVertex(innerPoint, u1, 0);\n addVertex(nextPointR, u0, 1);\n }\n }\n }\n function addCapGeometry(center, p1, p2, joinIsOnLeftSide2, start, u) {\n switch (style.strokeLineCap) {\n case \"round\":\n if (start) {\n makeCircularSector(center, p2, p1, u, 0.5);\n } else {\n makeCircularSector(center, p1, p2, u, 0.5);\n }\n break;\n case \"square\":\n if (start) {\n tempV2_1.subVectors(p1, center);\n tempV2_2.set(tempV2_1.y, -tempV2_1.x);\n tempV2_3.addVectors(tempV2_1, tempV2_2).add(center);\n tempV2_4.subVectors(tempV2_2, tempV2_1).add(center);\n if (joinIsOnLeftSide2) {\n tempV2_3.toArray(vertices, 1 * 3);\n tempV2_4.toArray(vertices, 0 * 3);\n tempV2_4.toArray(vertices, 3 * 3);\n } else {\n tempV2_3.toArray(vertices, 1 * 3);\n uvs[3 * 2 + 1] === 1 ? tempV2_4.toArray(vertices, 3 * 3) : tempV2_3.toArray(vertices, 3 * 3);\n tempV2_4.toArray(vertices, 0 * 3);\n }\n } else {\n tempV2_1.subVectors(p2, center);\n tempV2_2.set(tempV2_1.y, -tempV2_1.x);\n tempV2_3.addVectors(tempV2_1, tempV2_2).add(center);\n tempV2_4.subVectors(tempV2_2, tempV2_1).add(center);\n const vl = vertices.length;\n if (joinIsOnLeftSide2) {\n tempV2_3.toArray(vertices, vl - 1 * 3);\n tempV2_4.toArray(vertices, vl - 2 * 3);\n tempV2_4.toArray(vertices, vl - 4 * 3);\n } else {\n tempV2_4.toArray(vertices, vl - 2 * 3);\n tempV2_3.toArray(vertices, vl - 1 * 3);\n tempV2_4.toArray(vertices, vl - 4 * 3);\n }\n }\n break;\n }\n }\n function removeDuplicatedPoints(points2) {\n let dupPoints = false;\n for (let i = 1, n = points2.length - 1; i < n; i++) {\n if (points2[i].distanceTo(points2[i + 1]) < minDistance) {\n dupPoints = true;\n break;\n }\n }\n if (!dupPoints)\n return points2;\n const newPoints = [];\n newPoints.push(points2[0]);\n for (let i = 1, n = points2.length - 1; i < n; i++) {\n if (points2[i].distanceTo(points2[i + 1]) >= minDistance) {\n newPoints.push(points2[i]);\n }\n }\n newPoints.push(points2[points2.length - 1]);\n return newPoints;\n }\n }\n }\n return SVGLoader2;\n})();\nexport {\n SVGLoader\n};\n//# sourceMappingURL=SVGLoader.js.map\n","import { Loader, FileLoader, MeshStandardMaterial, Color, TextureLoader, Object3D, Matrix4, BufferGeometryLoader, DirectionalLight, PointLight, RectAreaLight, Vector3, SpotLight, CanvasTexture, LinearFilter, ClampToEdgeWrapping, SpriteMaterial, Sprite, LineBasicMaterial, Line, Mesh, PointsMaterial, Points } from \"three\";\nconst _taskCache = /* @__PURE__ */ new WeakMap();\nclass Rhino3dmLoader extends Loader {\n constructor(manager) {\n super(manager);\n this.libraryPath = \"\";\n this.libraryPending = null;\n this.libraryBinary = null;\n this.libraryConfig = {};\n this.url = \"\";\n this.workerLimit = 4;\n this.workerPool = [];\n this.workerNextTaskID = 1;\n this.workerSourceURL = \"\";\n this.workerConfig = {};\n this.materials = [];\n }\n setLibraryPath(path) {\n this.libraryPath = path;\n return this;\n }\n setWorkerLimit(workerLimit) {\n this.workerLimit = workerLimit;\n return this;\n }\n load(url, onLoad, onProgress, onError) {\n const loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setResponseType(\"arraybuffer\");\n loader.setRequestHeader(this.requestHeader);\n this.url = url;\n loader.load(\n url,\n (buffer) => {\n if (_taskCache.has(buffer)) {\n const cachedTask = _taskCache.get(buffer);\n return cachedTask.promise.then(onLoad).catch(onError);\n }\n this.decodeObjects(buffer, url).then(onLoad).catch(onError);\n },\n onProgress,\n onError\n );\n }\n debug() {\n console.log(\n \"Task load: \",\n this.workerPool.map((worker) => worker._taskLoad)\n );\n }\n decodeObjects(buffer, url) {\n let worker;\n let taskID;\n const taskCost = buffer.byteLength;\n const objectPending = this._getWorker(taskCost).then((_worker) => {\n worker = _worker;\n taskID = this.workerNextTaskID++;\n return new Promise((resolve, reject) => {\n worker._callbacks[taskID] = { resolve, reject };\n worker.postMessage({ type: \"decode\", id: taskID, buffer }, [buffer]);\n });\n }).then((message) => this._createGeometry(message.data));\n objectPending.catch(() => true).then(() => {\n if (worker && taskID) {\n this._releaseTask(worker, taskID);\n }\n });\n _taskCache.set(buffer, {\n url,\n promise: objectPending\n });\n return objectPending;\n }\n parse(data, onLoad, onError) {\n this.decodeObjects(data, \"\").then(onLoad).catch(onError);\n }\n _compareMaterials(material) {\n const mat = {};\n mat.name = material.name;\n mat.color = {};\n mat.color.r = material.color.r;\n mat.color.g = material.color.g;\n mat.color.b = material.color.b;\n mat.type = material.type;\n for (let i = 0; i < this.materials.length; i++) {\n const m = this.materials[i];\n const _mat = {};\n _mat.name = m.name;\n _mat.color = {};\n _mat.color.r = m.color.r;\n _mat.color.g = m.color.g;\n _mat.color.b = m.color.b;\n _mat.type = m.type;\n if (JSON.stringify(mat) === JSON.stringify(_mat)) {\n return m;\n }\n }\n this.materials.push(material);\n return material;\n }\n _createMaterial(material) {\n if (material === void 0) {\n return new MeshStandardMaterial({\n color: new Color(1, 1, 1),\n metalness: 0.8,\n name: \"default\",\n side: 2\n });\n }\n const _diffuseColor = material.diffuseColor;\n const diffusecolor = new Color(_diffuseColor.r / 255, _diffuseColor.g / 255, _diffuseColor.b / 255);\n if (_diffuseColor.r === 0 && _diffuseColor.g === 0 && _diffuseColor.b === 0) {\n diffusecolor.r = 1;\n diffusecolor.g = 1;\n diffusecolor.b = 1;\n }\n const mat = new MeshStandardMaterial({\n color: diffusecolor,\n name: material.name,\n side: 2,\n transparent: material.transparency > 0 ? true : false,\n opacity: 1 - material.transparency\n });\n const textureLoader = new TextureLoader();\n for (let i = 0; i < material.textures.length; i++) {\n const texture = material.textures[i];\n if (texture.image !== null) {\n const map = textureLoader.load(texture.image);\n switch (texture.type) {\n case \"Diffuse\":\n mat.map = map;\n break;\n case \"Bump\":\n mat.bumpMap = map;\n break;\n case \"Transparency\":\n mat.alphaMap = map;\n mat.transparent = true;\n break;\n case \"Emap\":\n mat.envMap = map;\n break;\n }\n }\n }\n return mat;\n }\n _createGeometry(data) {\n const object = new Object3D();\n const instanceDefinitionObjects = [];\n const instanceDefinitions = [];\n const instanceReferences = [];\n object.userData[\"layers\"] = data.layers;\n object.userData[\"groups\"] = data.groups;\n object.userData[\"settings\"] = data.settings;\n object.userData[\"objectType\"] = \"File3dm\";\n object.userData[\"materials\"] = null;\n object.name = this.url;\n let objects = data.objects;\n const materials = data.materials;\n for (let i = 0; i < objects.length; i++) {\n const obj = objects[i];\n const attributes = obj.attributes;\n switch (obj.objectType) {\n case \"InstanceDefinition\":\n instanceDefinitions.push(obj);\n break;\n case \"InstanceReference\":\n instanceReferences.push(obj);\n break;\n default:\n let _object;\n if (attributes.materialIndex >= 0) {\n const rMaterial = materials[attributes.materialIndex];\n let material = this._createMaterial(rMaterial);\n material = this._compareMaterials(material);\n _object = this._createObject(obj, material);\n } else {\n const material = this._createMaterial();\n _object = this._createObject(obj, material);\n }\n if (_object === void 0) {\n continue;\n }\n const layer = data.layers[attributes.layerIndex];\n _object.visible = layer ? data.layers[attributes.layerIndex].visible : true;\n if (attributes.isInstanceDefinitionObject) {\n instanceDefinitionObjects.push(_object);\n } else {\n object.add(_object);\n }\n break;\n }\n }\n for (let i = 0; i < instanceDefinitions.length; i++) {\n const iDef = instanceDefinitions[i];\n objects = [];\n for (let j = 0; j < iDef.attributes.objectIds.length; j++) {\n const objId = iDef.attributes.objectIds[j];\n for (let p = 0; p < instanceDefinitionObjects.length; p++) {\n const idoId = instanceDefinitionObjects[p].userData.attributes.id;\n if (objId === idoId) {\n objects.push(instanceDefinitionObjects[p]);\n }\n }\n }\n for (let j = 0; j < instanceReferences.length; j++) {\n const iRef = instanceReferences[j];\n if (iRef.geometry.parentIdefId === iDef.attributes.id) {\n const iRefObject = new Object3D();\n const xf = iRef.geometry.xform.array;\n const matrix = new Matrix4();\n matrix.set(\n xf[0],\n xf[1],\n xf[2],\n xf[3],\n xf[4],\n xf[5],\n xf[6],\n xf[7],\n xf[8],\n xf[9],\n xf[10],\n xf[11],\n xf[12],\n xf[13],\n xf[14],\n xf[15]\n );\n iRefObject.applyMatrix4(matrix);\n for (let p = 0; p < objects.length; p++) {\n iRefObject.add(objects[p].clone(true));\n }\n object.add(iRefObject);\n }\n }\n }\n object.userData[\"materials\"] = this.materials;\n return object;\n }\n _createObject(obj, mat) {\n const loader = new BufferGeometryLoader();\n const attributes = obj.attributes;\n let geometry, material, _color, color;\n switch (obj.objectType) {\n case \"Point\":\n case \"PointSet\":\n geometry = loader.parse(obj.geometry);\n if (geometry.attributes.hasOwnProperty(\"color\")) {\n material = new PointsMaterial({ vertexColors: true, sizeAttenuation: false, size: 2 });\n } else {\n _color = attributes.drawColor;\n color = new Color(_color.r / 255, _color.g / 255, _color.b / 255);\n material = new PointsMaterial({ color, sizeAttenuation: false, size: 2 });\n }\n material = this._compareMaterials(material);\n const points = new Points(geometry, material);\n points.userData[\"attributes\"] = attributes;\n points.userData[\"objectType\"] = obj.objectType;\n if (attributes.name) {\n points.name = attributes.name;\n }\n return points;\n case \"Mesh\":\n case \"Extrusion\":\n case \"SubD\":\n case \"Brep\":\n if (obj.geometry === null)\n return;\n geometry = loader.parse(obj.geometry);\n if (geometry.attributes.hasOwnProperty(\"color\")) {\n mat.vertexColors = true;\n }\n if (mat === null) {\n mat = this._createMaterial();\n mat = this._compareMaterials(mat);\n }\n const mesh = new Mesh(geometry, mat);\n mesh.castShadow = attributes.castsShadows;\n mesh.receiveShadow = attributes.receivesShadows;\n mesh.userData[\"attributes\"] = attributes;\n mesh.userData[\"objectType\"] = obj.objectType;\n if (attributes.name) {\n mesh.name = attributes.name;\n }\n return mesh;\n case \"Curve\":\n geometry = loader.parse(obj.geometry);\n _color = attributes.drawColor;\n color = new Color(_color.r / 255, _color.g / 255, _color.b / 255);\n material = new LineBasicMaterial({ color });\n material = this._compareMaterials(material);\n const lines = new Line(geometry, material);\n lines.userData[\"attributes\"] = attributes;\n lines.userData[\"objectType\"] = obj.objectType;\n if (attributes.name) {\n lines.name = attributes.name;\n }\n return lines;\n case \"TextDot\":\n geometry = obj.geometry;\n const ctx = document.createElement(\"canvas\").getContext(\"2d\");\n const font = `${geometry.fontHeight}px ${geometry.fontFace}`;\n ctx.font = font;\n const width = ctx.measureText(geometry.text).width + 10;\n const height = geometry.fontHeight + 10;\n const r = window.devicePixelRatio;\n ctx.canvas.width = width * r;\n ctx.canvas.height = height * r;\n ctx.canvas.style.width = width + \"px\";\n ctx.canvas.style.height = height + \"px\";\n ctx.setTransform(r, 0, 0, r, 0, 0);\n ctx.font = font;\n ctx.textBaseline = \"middle\";\n ctx.textAlign = \"center\";\n color = attributes.drawColor;\n ctx.fillStyle = `rgba(${color.r},${color.g},${color.b},${color.a})`;\n ctx.fillRect(0, 0, width, height);\n ctx.fillStyle = \"white\";\n ctx.fillText(geometry.text, width / 2, height / 2);\n const texture = new CanvasTexture(ctx.canvas);\n texture.minFilter = LinearFilter;\n texture.wrapS = ClampToEdgeWrapping;\n texture.wrapT = ClampToEdgeWrapping;\n material = new SpriteMaterial({ map: texture, depthTest: false });\n const sprite = new Sprite(material);\n sprite.position.set(geometry.point[0], geometry.point[1], geometry.point[2]);\n sprite.scale.set(width / 10, height / 10, 1);\n sprite.userData[\"attributes\"] = attributes;\n sprite.userData[\"objectType\"] = obj.objectType;\n if (attributes.name) {\n sprite.name = attributes.name;\n }\n return sprite;\n case \"Light\":\n geometry = obj.geometry;\n let light;\n if (geometry.isDirectionalLight) {\n light = new DirectionalLight();\n light.castShadow = attributes.castsShadows;\n light.position.set(geometry.location[0], geometry.location[1], geometry.location[2]);\n light.target.position.set(geometry.direction[0], geometry.direction[1], geometry.direction[2]);\n light.shadow.normalBias = 0.1;\n } else if (geometry.isPointLight) {\n light = new PointLight();\n light.castShadow = attributes.castsShadows;\n light.position.set(geometry.location[0], geometry.location[1], geometry.location[2]);\n light.shadow.normalBias = 0.1;\n } else if (geometry.isRectangularLight) {\n light = new RectAreaLight();\n const width2 = Math.abs(geometry.width[2]);\n const height2 = Math.abs(geometry.length[0]);\n light.position.set(geometry.location[0] - height2 / 2, geometry.location[1], geometry.location[2] - width2 / 2);\n light.height = height2;\n light.width = width2;\n light.lookAt(new Vector3(geometry.direction[0], geometry.direction[1], geometry.direction[2]));\n } else if (geometry.isSpotLight) {\n light = new SpotLight();\n light.castShadow = attributes.castsShadows;\n light.position.set(geometry.location[0], geometry.location[1], geometry.location[2]);\n light.target.position.set(geometry.direction[0], geometry.direction[1], geometry.direction[2]);\n light.angle = geometry.spotAngleRadians;\n light.shadow.normalBias = 0.1;\n } else if (geometry.isLinearLight) {\n console.warn(\"THREE.3DMLoader: No conversion exists for linear lights.\");\n return;\n }\n if (light) {\n light.intensity = geometry.intensity;\n _color = geometry.diffuse;\n color = new Color(_color.r / 255, _color.g / 255, _color.b / 255);\n light.color = color;\n light.userData[\"attributes\"] = attributes;\n light.userData[\"objectType\"] = obj.objectType;\n }\n return light;\n }\n }\n _initLibrary() {\n if (!this.libraryPending) {\n const jsLoader = new FileLoader(this.manager);\n jsLoader.setPath(this.libraryPath);\n const jsContent = new Promise((resolve, reject) => {\n jsLoader.load(\"rhino3dm.js\", resolve, void 0, reject);\n });\n const binaryLoader = new FileLoader(this.manager);\n binaryLoader.setPath(this.libraryPath);\n binaryLoader.setResponseType(\"arraybuffer\");\n const binaryContent = new Promise((resolve, reject) => {\n binaryLoader.load(\"rhino3dm.wasm\", resolve, void 0, reject);\n });\n this.libraryPending = Promise.all([jsContent, binaryContent]).then(([jsContent2, binaryContent2]) => {\n this.libraryConfig.wasmBinary = binaryContent2;\n const fn = Rhino3dmWorker.toString();\n const body = [\n \"/* rhino3dm.js */\",\n jsContent2,\n \"/* worker */\",\n fn.substring(fn.indexOf(\"{\") + 1, fn.lastIndexOf(\"}\"))\n ].join(\"\\n\");\n this.workerSourceURL = URL.createObjectURL(new Blob([body]));\n });\n }\n return this.libraryPending;\n }\n _getWorker(taskCost) {\n return this._initLibrary().then(() => {\n if (this.workerPool.length < this.workerLimit) {\n const worker2 = new Worker(this.workerSourceURL);\n worker2._callbacks = {};\n worker2._taskCosts = {};\n worker2._taskLoad = 0;\n worker2.postMessage({\n type: \"init\",\n libraryConfig: this.libraryConfig\n });\n worker2.onmessage = function(e) {\n const message = e.data;\n switch (message.type) {\n case \"decode\":\n worker2._callbacks[message.id].resolve(message);\n break;\n case \"error\":\n worker2._callbacks[message.id].reject(message);\n break;\n default:\n console.error('THREE.Rhino3dmLoader: Unexpected message, \"' + message.type + '\"');\n }\n };\n this.workerPool.push(worker2);\n } else {\n this.workerPool.sort(function(a, b) {\n return a._taskLoad > b._taskLoad ? -1 : 1;\n });\n }\n const worker = this.workerPool[this.workerPool.length - 1];\n worker._taskLoad += taskCost;\n return worker;\n });\n }\n _releaseTask(worker, taskID) {\n worker._taskLoad -= worker._taskCosts[taskID];\n delete worker._callbacks[taskID];\n delete worker._taskCosts[taskID];\n }\n dispose() {\n for (let i = 0; i < this.workerPool.length; ++i) {\n this.workerPool[i].terminate();\n }\n this.workerPool.length = 0;\n return this;\n }\n}\nfunction Rhino3dmWorker() {\n let libraryPending;\n let libraryConfig;\n let rhino;\n onmessage = function(e) {\n const message = e.data;\n switch (message.type) {\n case \"init\":\n libraryConfig = message.libraryConfig;\n const wasmBinary = libraryConfig.wasmBinary;\n let RhinoModule;\n libraryPending = new Promise(function(resolve) {\n RhinoModule = { wasmBinary, onRuntimeInitialized: resolve };\n rhino3dm(RhinoModule);\n }).then(() => {\n rhino = RhinoModule;\n });\n break;\n case \"decode\":\n const buffer = message.buffer;\n libraryPending.then(() => {\n const data = decodeObjects(rhino, buffer);\n self.postMessage({ type: \"decode\", id: message.id, data });\n });\n break;\n }\n };\n function decodeObjects(rhino2, buffer) {\n const arr = new Uint8Array(buffer);\n const doc = rhino2.File3dm.fromByteArray(arr);\n const objects = [];\n const materials = [];\n const layers = [];\n const views = [];\n const namedViews = [];\n const groups = [];\n const objs = doc.objects();\n const cnt = objs.count;\n for (let i = 0; i < cnt; i++) {\n const _object = objs.get(i);\n const object = extractObjectData(_object, doc);\n _object.delete();\n if (object) {\n objects.push(object);\n }\n }\n for (let i = 0; i < doc.instanceDefinitions().count(); i++) {\n const idef = doc.instanceDefinitions().get(i);\n const idefAttributes = extractProperties(idef);\n idefAttributes.objectIds = idef.getObjectIds();\n objects.push({ geometry: null, attributes: idefAttributes, objectType: \"InstanceDefinition\" });\n }\n const textureTypes = [\n // rhino.TextureType.Bitmap,\n rhino2.TextureType.Diffuse,\n rhino2.TextureType.Bump,\n rhino2.TextureType.Transparency,\n rhino2.TextureType.Opacity,\n rhino2.TextureType.Emap\n ];\n const pbrTextureTypes = [\n rhino2.TextureType.PBR_BaseColor,\n rhino2.TextureType.PBR_Subsurface,\n rhino2.TextureType.PBR_SubsurfaceScattering,\n rhino2.TextureType.PBR_SubsurfaceScatteringRadius,\n rhino2.TextureType.PBR_Metallic,\n rhino2.TextureType.PBR_Specular,\n rhino2.TextureType.PBR_SpecularTint,\n rhino2.TextureType.PBR_Roughness,\n rhino2.TextureType.PBR_Anisotropic,\n rhino2.TextureType.PBR_Anisotropic_Rotation,\n rhino2.TextureType.PBR_Sheen,\n rhino2.TextureType.PBR_SheenTint,\n rhino2.TextureType.PBR_Clearcoat,\n rhino2.TextureType.PBR_ClearcoatBump,\n rhino2.TextureType.PBR_ClearcoatRoughness,\n rhino2.TextureType.PBR_OpacityIor,\n rhino2.TextureType.PBR_OpacityRoughness,\n rhino2.TextureType.PBR_Emission,\n rhino2.TextureType.PBR_AmbientOcclusion,\n rhino2.TextureType.PBR_Displacement\n ];\n for (let i = 0; i < doc.materials().count(); i++) {\n const _material = doc.materials().get(i);\n const _pbrMaterial = _material.physicallyBased();\n let material = extractProperties(_material);\n const textures = [];\n for (let j = 0; j < textureTypes.length; j++) {\n const _texture = _material.getTexture(textureTypes[j]);\n if (_texture) {\n let textureType = textureTypes[j].constructor.name;\n textureType = textureType.substring(12, textureType.length);\n const texture = { type: textureType };\n const image = doc.getEmbeddedFileAsBase64(_texture.fileName);\n if (image) {\n texture.image = \"data:image/png;base64,\" + image;\n } else {\n console.warn(`THREE.3DMLoader: Image for ${textureType} texture not embedded in file.`);\n texture.image = null;\n }\n textures.push(texture);\n _texture.delete();\n }\n }\n material.textures = textures;\n if (_pbrMaterial.supported) {\n console.log(\"pbr true\");\n for (let j = 0; j < pbrTextureTypes.length; j++) {\n const _texture = _material.getTexture(textureTypes[j]);\n if (_texture) {\n const image = doc.getEmbeddedFileAsBase64(_texture.fileName);\n let textureType = textureTypes[j].constructor.name;\n textureType = textureType.substring(12, textureType.length);\n const texture = { type: textureType, image: \"data:image/png;base64,\" + image };\n textures.push(texture);\n _texture.delete();\n }\n }\n const pbMaterialProperties = extractProperties(_material.physicallyBased());\n material = Object.assign(pbMaterialProperties, material);\n }\n materials.push(material);\n _material.delete();\n _pbrMaterial.delete();\n }\n for (let i = 0; i < doc.layers().count(); i++) {\n const _layer = doc.layers().get(i);\n const layer = extractProperties(_layer);\n layers.push(layer);\n _layer.delete();\n }\n for (let i = 0; i < doc.views().count(); i++) {\n const _view = doc.views().get(i);\n const view = extractProperties(_view);\n views.push(view);\n _view.delete();\n }\n for (let i = 0; i < doc.namedViews().count(); i++) {\n const _namedView = doc.namedViews().get(i);\n const namedView = extractProperties(_namedView);\n namedViews.push(namedView);\n _namedView.delete();\n }\n for (let i = 0; i < doc.groups().count(); i++) {\n const _group = doc.groups().get(i);\n const group = extractProperties(_group);\n groups.push(group);\n _group.delete();\n }\n const settings = extractProperties(doc.settings());\n doc.delete();\n return { objects, materials, layers, views, namedViews, groups, settings };\n }\n function extractObjectData(object, doc) {\n const _geometry = object.geometry();\n const _attributes = object.attributes();\n let objectType = _geometry.objectType;\n let geometry, attributes, position, data, mesh;\n switch (objectType) {\n case rhino.ObjectType.Curve:\n const pts = curveToPoints(_geometry, 100);\n position = {};\n attributes = {};\n data = {};\n position.itemSize = 3;\n position.type = \"Float32Array\";\n position.array = [];\n for (let j = 0; j < pts.length; j++) {\n position.array.push(pts[j][0]);\n position.array.push(pts[j][1]);\n position.array.push(pts[j][2]);\n }\n attributes.position = position;\n data.attributes = attributes;\n geometry = { data };\n break;\n case rhino.ObjectType.Point:\n const pt = _geometry.location;\n position = {};\n const color = {};\n attributes = {};\n data = {};\n position.itemSize = 3;\n position.type = \"Float32Array\";\n position.array = [pt[0], pt[1], pt[2]];\n const _color = _attributes.drawColor(doc);\n color.itemSize = 3;\n color.type = \"Float32Array\";\n color.array = [_color.r / 255, _color.g / 255, _color.b / 255];\n attributes.position = position;\n attributes.color = color;\n data.attributes = attributes;\n geometry = { data };\n break;\n case rhino.ObjectType.PointSet:\n case rhino.ObjectType.Mesh:\n geometry = _geometry.toThreejsJSON();\n break;\n case rhino.ObjectType.Brep:\n const faces = _geometry.faces();\n mesh = new rhino.Mesh();\n for (let faceIndex = 0; faceIndex < faces.count; faceIndex++) {\n const face = faces.get(faceIndex);\n const _mesh = face.getMesh(rhino.MeshType.Any);\n if (_mesh) {\n mesh.append(_mesh);\n _mesh.delete();\n }\n face.delete();\n }\n if (mesh.faces().count > 0) {\n mesh.compact();\n geometry = mesh.toThreejsJSON();\n faces.delete();\n }\n mesh.delete();\n break;\n case rhino.ObjectType.Extrusion:\n mesh = _geometry.getMesh(rhino.MeshType.Any);\n if (mesh) {\n geometry = mesh.toThreejsJSON();\n mesh.delete();\n }\n break;\n case rhino.ObjectType.TextDot:\n geometry = extractProperties(_geometry);\n break;\n case rhino.ObjectType.Light:\n geometry = extractProperties(_geometry);\n break;\n case rhino.ObjectType.InstanceReference:\n geometry = extractProperties(_geometry);\n geometry.xform = extractProperties(_geometry.xform);\n geometry.xform.array = _geometry.xform.toFloatArray(true);\n break;\n case rhino.ObjectType.SubD:\n _geometry.subdivide(3);\n mesh = rhino.Mesh.createFromSubDControlNet(_geometry);\n if (mesh) {\n geometry = mesh.toThreejsJSON();\n mesh.delete();\n }\n break;\n default:\n console.warn(`THREE.3DMLoader: TODO: Implement ${objectType.constructor.name}`);\n break;\n }\n if (geometry) {\n attributes = extractProperties(_attributes);\n attributes.geometry = extractProperties(_geometry);\n if (_attributes.groupCount > 0) {\n attributes.groupIds = _attributes.getGroupList();\n }\n if (_attributes.userStringCount > 0) {\n attributes.userStrings = _attributes.getUserStrings();\n }\n if (_geometry.userStringCount > 0) {\n attributes.geometry.userStrings = _geometry.getUserStrings();\n }\n attributes.drawColor = _attributes.drawColor(doc);\n objectType = objectType.constructor.name;\n objectType = objectType.substring(11, objectType.length);\n return { geometry, attributes, objectType };\n } else {\n console.warn(`THREE.3DMLoader: ${objectType.constructor.name} has no associated mesh geometry.`);\n }\n }\n function extractProperties(object) {\n const result = {};\n for (const property in object) {\n const value = object[property];\n if (typeof value !== \"function\") {\n if (typeof value === \"object\" && value !== null && value.hasOwnProperty(\"constructor\")) {\n result[property] = { name: value.constructor.name, value: value.value };\n } else {\n result[property] = value;\n }\n }\n }\n return result;\n }\n function curveToPoints(curve, pointLimit) {\n let pointCount = pointLimit;\n let rc = [];\n const ts = [];\n if (curve instanceof rhino.LineCurve) {\n return [curve.pointAtStart, curve.pointAtEnd];\n }\n if (curve instanceof rhino.PolylineCurve) {\n pointCount = curve.pointCount;\n for (let i = 0; i < pointCount; i++) {\n rc.push(curve.point(i));\n }\n return rc;\n }\n if (curve instanceof rhino.PolyCurve) {\n const segmentCount = curve.segmentCount;\n for (let i = 0; i < segmentCount; i++) {\n const segment = curve.segmentCurve(i);\n const segmentArray = curveToPoints(segment, pointCount);\n rc = rc.concat(segmentArray);\n segment.delete();\n }\n return rc;\n }\n if (curve instanceof rhino.ArcCurve) {\n pointCount = Math.floor(curve.angleDegrees / 5);\n pointCount = pointCount < 2 ? 2 : pointCount;\n }\n if (curve instanceof rhino.NurbsCurve && curve.degree === 1) {\n const pLine = curve.tryGetPolyline();\n for (let i = 0; i < pLine.count; i++) {\n rc.push(pLine.get(i));\n }\n pLine.delete();\n return rc;\n }\n const domain = curve.domain;\n const divisions = pointCount - 1;\n for (let j = 0; j < pointCount; j++) {\n const t = domain[0] + j / divisions * (domain[1] - domain[0]);\n if (t === domain[0] || t === domain[1]) {\n ts.push(t);\n continue;\n }\n const tan = curve.tangentAt(t);\n const prevTan = curve.tangentAt(ts.slice(-1)[0]);\n const tS = tan[0] * tan[0] + tan[1] * tan[1] + tan[2] * tan[2];\n const ptS = prevTan[0] * prevTan[0] + prevTan[1] * prevTan[1] + prevTan[2] * prevTan[2];\n const denominator = Math.sqrt(tS * ptS);\n let angle;\n if (denominator === 0) {\n angle = Math.PI / 2;\n } else {\n const theta = (tan.x * prevTan.x + tan.y * prevTan.y + tan.z * prevTan.z) / denominator;\n angle = Math.acos(Math.max(-1, Math.min(1, theta)));\n }\n if (angle < 0.1)\n continue;\n ts.push(t);\n }\n rc = ts.map((t) => curve.pointAt(t));\n return rc;\n }\n}\nexport {\n Rhino3dmLoader\n};\n//# sourceMappingURL=3DMLoader.js.map\n","import { Loader, FileLoader, Group, BufferGeometry, Float32BufferAttribute, LineBasicMaterial, Material, PointsMaterial, MeshPhongMaterial, LineSegments, Points, Mesh, Vector3 } from \"three\";\nconst _object_pattern = /^[og]\\s*(.+)?/;\nconst _material_library_pattern = /^mtllib /;\nconst _material_use_pattern = /^usemtl /;\nconst _map_use_pattern = /^usemap /;\nconst _vA = /* @__PURE__ */ new Vector3();\nconst _vB = /* @__PURE__ */ new Vector3();\nconst _vC = /* @__PURE__ */ new Vector3();\nconst _ab = /* @__PURE__ */ new Vector3();\nconst _cb = /* @__PURE__ */ new Vector3();\nfunction ParserState() {\n const state = {\n objects: [],\n object: {},\n vertices: [],\n normals: [],\n colors: [],\n uvs: [],\n materials: {},\n materialLibraries: [],\n startObject: function(name, fromDeclaration) {\n if (this.object && this.object.fromDeclaration === false) {\n this.object.name = name;\n this.object.fromDeclaration = fromDeclaration !== false;\n return;\n }\n const previousMaterial = this.object && typeof this.object.currentMaterial === \"function\" ? this.object.currentMaterial() : void 0;\n if (this.object && typeof this.object._finalize === \"function\") {\n this.object._finalize(true);\n }\n this.object = {\n name: name || \"\",\n fromDeclaration: fromDeclaration !== false,\n geometry: {\n vertices: [],\n normals: [],\n colors: [],\n uvs: [],\n hasUVIndices: false\n },\n materials: [],\n smooth: true,\n startMaterial: function(name2, libraries) {\n const previous = this._finalize(false);\n if (previous && (previous.inherited || previous.groupCount <= 0)) {\n this.materials.splice(previous.index, 1);\n }\n const material = {\n index: this.materials.length,\n name: name2 || \"\",\n mtllib: Array.isArray(libraries) && libraries.length > 0 ? libraries[libraries.length - 1] : \"\",\n smooth: previous !== void 0 ? previous.smooth : this.smooth,\n groupStart: previous !== void 0 ? previous.groupEnd : 0,\n groupEnd: -1,\n groupCount: -1,\n inherited: false,\n clone: function(index) {\n const cloned = {\n index: typeof index === \"number\" ? index : this.index,\n name: this.name,\n mtllib: this.mtllib,\n smooth: this.smooth,\n groupStart: 0,\n groupEnd: -1,\n groupCount: -1,\n inherited: false\n };\n cloned.clone = this.clone.bind(cloned);\n return cloned;\n }\n };\n this.materials.push(material);\n return material;\n },\n currentMaterial: function() {\n if (this.materials.length > 0) {\n return this.materials[this.materials.length - 1];\n }\n return void 0;\n },\n _finalize: function(end) {\n const lastMultiMaterial = this.currentMaterial();\n if (lastMultiMaterial && lastMultiMaterial.groupEnd === -1) {\n lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;\n lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;\n lastMultiMaterial.inherited = false;\n }\n if (end && this.materials.length > 1) {\n for (let mi = this.materials.length - 1; mi >= 0; mi--) {\n if (this.materials[mi].groupCount <= 0) {\n this.materials.splice(mi, 1);\n }\n }\n }\n if (end && this.materials.length === 0) {\n this.materials.push({\n name: \"\",\n smooth: this.smooth\n });\n }\n return lastMultiMaterial;\n }\n };\n if (previousMaterial && previousMaterial.name && typeof previousMaterial.clone === \"function\") {\n const declared = previousMaterial.clone(0);\n declared.inherited = true;\n this.object.materials.push(declared);\n }\n this.objects.push(this.object);\n },\n finalize: function() {\n if (this.object && typeof this.object._finalize === \"function\") {\n this.object._finalize(true);\n }\n },\n parseVertexIndex: function(value, len) {\n const index = parseInt(value, 10);\n return (index >= 0 ? index - 1 : index + len / 3) * 3;\n },\n parseNormalIndex: function(value, len) {\n const index = parseInt(value, 10);\n return (index >= 0 ? index - 1 : index + len / 3) * 3;\n },\n parseUVIndex: function(value, len) {\n const index = parseInt(value, 10);\n return (index >= 0 ? index - 1 : index + len / 2) * 2;\n },\n addVertex: function(a, b, c) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n dst.push(src[b + 0], src[b + 1], src[b + 2]);\n dst.push(src[c + 0], src[c + 1], src[c + 2]);\n },\n addVertexPoint: function(a) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n },\n addVertexLine: function(a) {\n const src = this.vertices;\n const dst = this.object.geometry.vertices;\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n },\n addNormal: function(a, b, c) {\n const src = this.normals;\n const dst = this.object.geometry.normals;\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n dst.push(src[b + 0], src[b + 1], src[b + 2]);\n dst.push(src[c + 0], src[c + 1], src[c + 2]);\n },\n addFaceNormal: function(a, b, c) {\n const src = this.vertices;\n const dst = this.object.geometry.normals;\n _vA.fromArray(src, a);\n _vB.fromArray(src, b);\n _vC.fromArray(src, c);\n _cb.subVectors(_vC, _vB);\n _ab.subVectors(_vA, _vB);\n _cb.cross(_ab);\n _cb.normalize();\n dst.push(_cb.x, _cb.y, _cb.z);\n dst.push(_cb.x, _cb.y, _cb.z);\n dst.push(_cb.x, _cb.y, _cb.z);\n },\n addColor: function(a, b, c) {\n const src = this.colors;\n const dst = this.object.geometry.colors;\n if (src[a] !== void 0)\n dst.push(src[a + 0], src[a + 1], src[a + 2]);\n if (src[b] !== void 0)\n dst.push(src[b + 0], src[b + 1], src[b + 2]);\n if (src[c] !== void 0)\n dst.push(src[c + 0], src[c + 1], src[c + 2]);\n },\n addUV: function(a, b, c) {\n const src = this.uvs;\n const dst = this.object.geometry.uvs;\n dst.push(src[a + 0], src[a + 1]);\n dst.push(src[b + 0], src[b + 1]);\n dst.push(src[c + 0], src[c + 1]);\n },\n addDefaultUV: function() {\n const dst = this.object.geometry.uvs;\n dst.push(0, 0);\n dst.push(0, 0);\n dst.push(0, 0);\n },\n addUVLine: function(a) {\n const src = this.uvs;\n const dst = this.object.geometry.uvs;\n dst.push(src[a + 0], src[a + 1]);\n },\n addFace: function(a, b, c, ua, ub, uc, na, nb, nc) {\n const vLen = this.vertices.length;\n let ia = this.parseVertexIndex(a, vLen);\n let ib = this.parseVertexIndex(b, vLen);\n let ic = this.parseVertexIndex(c, vLen);\n this.addVertex(ia, ib, ic);\n this.addColor(ia, ib, ic);\n if (na !== void 0 && na !== \"\") {\n const nLen = this.normals.length;\n ia = this.parseNormalIndex(na, nLen);\n ib = this.parseNormalIndex(nb, nLen);\n ic = this.parseNormalIndex(nc, nLen);\n this.addNormal(ia, ib, ic);\n } else {\n this.addFaceNormal(ia, ib, ic);\n }\n if (ua !== void 0 && ua !== \"\") {\n const uvLen = this.uvs.length;\n ia = this.parseUVIndex(ua, uvLen);\n ib = this.parseUVIndex(ub, uvLen);\n ic = this.parseUVIndex(uc, uvLen);\n this.addUV(ia, ib, ic);\n this.object.geometry.hasUVIndices = true;\n } else {\n this.addDefaultUV();\n }\n },\n addPointGeometry: function(vertices) {\n this.object.geometry.type = \"Points\";\n const vLen = this.vertices.length;\n for (let vi = 0, l = vertices.length; vi < l; vi++) {\n const index = this.parseVertexIndex(vertices[vi], vLen);\n this.addVertexPoint(index);\n this.addColor(index);\n }\n },\n addLineGeometry: function(vertices, uvs) {\n this.object.geometry.type = \"Line\";\n const vLen = this.vertices.length;\n const uvLen = this.uvs.length;\n for (let vi = 0, l = vertices.length; vi < l; vi++) {\n this.addVertexLine(this.parseVertexIndex(vertices[vi], vLen));\n }\n for (let uvi = 0, l = uvs.length; uvi < l; uvi++) {\n this.addUVLine(this.parseUVIndex(uvs[uvi], uvLen));\n }\n }\n };\n state.startObject(\"\", false);\n return state;\n}\nclass OBJLoader extends Loader {\n constructor(manager) {\n super(manager);\n this.materials = null;\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setRequestHeader(this.requestHeader);\n loader.setWithCredentials(this.withCredentials);\n loader.load(\n url,\n function(text) {\n try {\n onLoad(scope.parse(text));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n setMaterials(materials) {\n this.materials = materials;\n return this;\n }\n parse(text) {\n const state = new ParserState();\n if (text.indexOf(\"\\r\\n\") !== -1) {\n text = text.replace(/\\r\\n/g, \"\\n\");\n }\n if (text.indexOf(\"\\\\\\n\") !== -1) {\n text = text.replace(/\\\\\\n/g, \"\");\n }\n const lines = text.split(\"\\n\");\n let line = \"\", lineFirstChar = \"\";\n let lineLength = 0;\n let result = [];\n const trimLeft = typeof \"\".trimLeft === \"function\";\n for (let i = 0, l = lines.length; i < l; i++) {\n line = lines[i];\n line = trimLeft ? line.trimLeft() : line.trim();\n lineLength = line.length;\n if (lineLength === 0)\n continue;\n lineFirstChar = line.charAt(0);\n if (lineFirstChar === \"#\")\n continue;\n if (lineFirstChar === \"v\") {\n const data = line.split(/\\s+/);\n switch (data[0]) {\n case \"v\":\n state.vertices.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]));\n if (data.length >= 7) {\n state.colors.push(parseFloat(data[4]), parseFloat(data[5]), parseFloat(data[6]));\n } else {\n state.colors.push(void 0, void 0, void 0);\n }\n break;\n case \"vn\":\n state.normals.push(parseFloat(data[1]), parseFloat(data[2]), parseFloat(data[3]));\n break;\n case \"vt\":\n state.uvs.push(parseFloat(data[1]), parseFloat(data[2]));\n break;\n }\n } else if (lineFirstChar === \"f\") {\n const lineData = line.substr(1).trim();\n const vertexData = lineData.split(/\\s+/);\n const faceVertices = [];\n for (let j = 0, jl = vertexData.length; j < jl; j++) {\n const vertex = vertexData[j];\n if (vertex.length > 0) {\n const vertexParts = vertex.split(\"/\");\n faceVertices.push(vertexParts);\n }\n }\n const v1 = faceVertices[0];\n for (let j = 1, jl = faceVertices.length - 1; j < jl; j++) {\n const v2 = faceVertices[j];\n const v3 = faceVertices[j + 1];\n state.addFace(v1[0], v2[0], v3[0], v1[1], v2[1], v3[1], v1[2], v2[2], v3[2]);\n }\n } else if (lineFirstChar === \"l\") {\n const lineParts = line.substring(1).trim().split(\" \");\n let lineVertices = [];\n const lineUVs = [];\n if (line.indexOf(\"/\") === -1) {\n lineVertices = lineParts;\n } else {\n for (let li = 0, llen = lineParts.length; li < llen; li++) {\n const parts = lineParts[li].split(\"/\");\n if (parts[0] !== \"\")\n lineVertices.push(parts[0]);\n if (parts[1] !== \"\")\n lineUVs.push(parts[1]);\n }\n }\n state.addLineGeometry(lineVertices, lineUVs);\n } else if (lineFirstChar === \"p\") {\n const lineData = line.substr(1).trim();\n const pointData = lineData.split(\" \");\n state.addPointGeometry(pointData);\n } else if ((result = _object_pattern.exec(line)) !== null) {\n const name = (\" \" + result[0].substr(1).trim()).substr(1);\n state.startObject(name);\n } else if (_material_use_pattern.test(line)) {\n state.object.startMaterial(line.substring(7).trim(), state.materialLibraries);\n } else if (_material_library_pattern.test(line)) {\n state.materialLibraries.push(line.substring(7).trim());\n } else if (_map_use_pattern.test(line)) {\n console.warn(\n 'THREE.OBJLoader: Rendering identifier \"usemap\" not supported. Textures must be defined in MTL files.'\n );\n } else if (lineFirstChar === \"s\") {\n result = line.split(\" \");\n if (result.length > 1) {\n const value = result[1].trim().toLowerCase();\n state.object.smooth = value !== \"0\" && value !== \"off\";\n } else {\n state.object.smooth = true;\n }\n const material = state.object.currentMaterial();\n if (material)\n material.smooth = state.object.smooth;\n } else {\n if (line === \"\\0\")\n continue;\n console.warn('THREE.OBJLoader: Unexpected line: \"' + line + '\"');\n }\n }\n state.finalize();\n const container = new Group();\n container.materialLibraries = [].concat(state.materialLibraries);\n const hasPrimitives = !(state.objects.length === 1 && state.objects[0].geometry.vertices.length === 0);\n if (hasPrimitives === true) {\n for (let i = 0, l = state.objects.length; i < l; i++) {\n const object = state.objects[i];\n const geometry = object.geometry;\n const materials = object.materials;\n const isLine = geometry.type === \"Line\";\n const isPoints = geometry.type === \"Points\";\n let hasVertexColors = false;\n if (geometry.vertices.length === 0)\n continue;\n const buffergeometry = new BufferGeometry();\n buffergeometry.setAttribute(\"position\", new Float32BufferAttribute(geometry.vertices, 3));\n if (geometry.normals.length > 0) {\n buffergeometry.setAttribute(\"normal\", new Float32BufferAttribute(geometry.normals, 3));\n }\n if (geometry.colors.length > 0) {\n hasVertexColors = true;\n buffergeometry.setAttribute(\"color\", new Float32BufferAttribute(geometry.colors, 3));\n }\n if (geometry.hasUVIndices === true) {\n buffergeometry.setAttribute(\"uv\", new Float32BufferAttribute(geometry.uvs, 2));\n }\n const createdMaterials = [];\n for (let mi = 0, miLen = materials.length; mi < miLen; mi++) {\n const sourceMaterial = materials[mi];\n const materialHash = sourceMaterial.name + \"_\" + sourceMaterial.smooth + \"_\" + hasVertexColors;\n let material = state.materials[materialHash];\n if (this.materials !== null) {\n material = this.materials.create(sourceMaterial.name);\n if (isLine && material && !(material instanceof LineBasicMaterial)) {\n const materialLine = new LineBasicMaterial();\n Material.prototype.copy.call(materialLine, material);\n materialLine.color.copy(material.color);\n material = materialLine;\n } else if (isPoints && material && !(material instanceof PointsMaterial)) {\n const materialPoints = new PointsMaterial({ size: 10, sizeAttenuation: false });\n Material.prototype.copy.call(materialPoints, material);\n materialPoints.color.copy(material.color);\n materialPoints.map = material.map;\n material = materialPoints;\n }\n }\n if (material === void 0) {\n if (isLine) {\n material = new LineBasicMaterial();\n } else if (isPoints) {\n material = new PointsMaterial({ size: 1, sizeAttenuation: false });\n } else {\n material = new MeshPhongMaterial();\n }\n material.name = sourceMaterial.name;\n material.flatShading = sourceMaterial.smooth ? false : true;\n material.vertexColors = hasVertexColors;\n state.materials[materialHash] = material;\n }\n createdMaterials.push(material);\n }\n let mesh;\n if (createdMaterials.length > 1) {\n for (let mi = 0, miLen = materials.length; mi < miLen; mi++) {\n const sourceMaterial = materials[mi];\n buffergeometry.addGroup(sourceMaterial.groupStart, sourceMaterial.groupCount, mi);\n }\n if (isLine) {\n mesh = new LineSegments(buffergeometry, createdMaterials);\n } else if (isPoints) {\n mesh = new Points(buffergeometry, createdMaterials);\n } else {\n mesh = new Mesh(buffergeometry, createdMaterials);\n }\n } else {\n if (isLine) {\n mesh = new LineSegments(buffergeometry, createdMaterials[0]);\n } else if (isPoints) {\n mesh = new Points(buffergeometry, createdMaterials[0]);\n } else {\n mesh = new Mesh(buffergeometry, createdMaterials[0]);\n }\n }\n mesh.name = object.name;\n container.add(mesh);\n }\n } else {\n if (state.vertices.length > 0) {\n const material = new PointsMaterial({ size: 1, sizeAttenuation: false });\n const buffergeometry = new BufferGeometry();\n buffergeometry.setAttribute(\"position\", new Float32BufferAttribute(state.vertices, 3));\n if (state.colors.length > 0 && state.colors[0] !== void 0) {\n buffergeometry.setAttribute(\"color\", new Float32BufferAttribute(state.colors, 3));\n material.vertexColors = true;\n }\n const points = new Points(buffergeometry, material);\n container.add(points);\n }\n }\n return container;\n }\n}\nexport {\n OBJLoader\n};\n//# sourceMappingURL=OBJLoader.js.map\n","import { Loader, FileLoader, Group, MeshPhongMaterial, Float32BufferAttribute, Color, BufferGeometry, Mesh } from \"three\";\nimport { unzipSync } from \"fflate\";\nimport { decodeText } from \"../_polyfill/LoaderUtils.js\";\nclass AMFLoader extends Loader {\n constructor(manager) {\n super(manager);\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const loader = new FileLoader(scope.manager);\n loader.setPath(scope.path);\n loader.setResponseType(\"arraybuffer\");\n loader.setRequestHeader(scope.requestHeader);\n loader.setWithCredentials(scope.withCredentials);\n loader.load(\n url,\n function(text) {\n try {\n onLoad(scope.parse(text));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(data) {\n function loadDocument(data2) {\n let view = new DataView(data2);\n const magic = String.fromCharCode(view.getUint8(0), view.getUint8(1));\n if (magic === \"PK\") {\n let zip = null;\n let file = null;\n console.log(\"THREE.AMFLoader: Loading Zip\");\n try {\n zip = unzipSync(new Uint8Array(data2));\n } catch (e) {\n if (e instanceof ReferenceError) {\n console.log(\"THREE.AMFLoader: fflate missing and file is compressed.\");\n return null;\n }\n }\n for (file in zip) {\n if (file.toLowerCase().substr(-4) === \".amf\") {\n break;\n }\n }\n console.log(\"THREE.AMFLoader: Trying to load file asset: \" + file);\n view = new DataView(zip[file].buffer);\n }\n const fileText = decodeText(view);\n const xmlData2 = new DOMParser().parseFromString(fileText, \"application/xml\");\n if (xmlData2.documentElement.nodeName.toLowerCase() !== \"amf\") {\n console.log(\"THREE.AMFLoader: Error loading AMF - no AMF document found.\");\n return null;\n }\n return xmlData2;\n }\n function loadDocumentScale(node) {\n let scale = 1;\n let unit = \"millimeter\";\n if (node.documentElement.attributes.unit !== void 0) {\n unit = node.documentElement.attributes.unit.value.toLowerCase();\n }\n const scaleUnits = {\n millimeter: 1,\n inch: 25.4,\n feet: 304.8,\n meter: 1e3,\n micron: 1e-3\n };\n if (scaleUnits[unit] !== void 0) {\n scale = scaleUnits[unit];\n }\n console.log(\"THREE.AMFLoader: Unit scale: \" + scale);\n return scale;\n }\n function loadMaterials(node) {\n let matName = \"AMF Material\";\n const matId = node.attributes.id.textContent;\n let color = { r: 1, g: 1, b: 1, a: 1 };\n let loadedMaterial = null;\n for (let i2 = 0; i2 < node.childNodes.length; i2++) {\n const matChildEl = node.childNodes[i2];\n if (matChildEl.nodeName === \"metadata\" && matChildEl.attributes.type !== void 0) {\n if (matChildEl.attributes.type.value === \"name\") {\n matName = matChildEl.textContent;\n }\n } else if (matChildEl.nodeName === \"color\") {\n color = loadColor(matChildEl);\n }\n }\n loadedMaterial = new MeshPhongMaterial({\n flatShading: true,\n color: new Color(color.r, color.g, color.b),\n name: matName\n });\n if (color.a !== 1) {\n loadedMaterial.transparent = true;\n loadedMaterial.opacity = color.a;\n }\n return { id: matId, material: loadedMaterial };\n }\n function loadColor(node) {\n const color = { r: 1, g: 1, b: 1, a: 1 };\n for (let i2 = 0; i2 < node.childNodes.length; i2++) {\n const matColor = node.childNodes[i2];\n if (matColor.nodeName === \"r\") {\n color.r = matColor.textContent;\n } else if (matColor.nodeName === \"g\") {\n color.g = matColor.textContent;\n } else if (matColor.nodeName === \"b\") {\n color.b = matColor.textContent;\n } else if (matColor.nodeName === \"a\") {\n color.a = matColor.textContent;\n }\n }\n return color;\n }\n function loadMeshVolume(node) {\n const volume = { name: \"\", triangles: [], materialid: null };\n let currVolumeNode = node.firstElementChild;\n if (node.attributes.materialid !== void 0) {\n volume.materialId = node.attributes.materialid.nodeValue;\n }\n while (currVolumeNode) {\n if (currVolumeNode.nodeName === \"metadata\") {\n if (currVolumeNode.attributes.type !== void 0) {\n if (currVolumeNode.attributes.type.value === \"name\") {\n volume.name = currVolumeNode.textContent;\n }\n }\n } else if (currVolumeNode.nodeName === \"triangle\") {\n const v1 = currVolumeNode.getElementsByTagName(\"v1\")[0].textContent;\n const v2 = currVolumeNode.getElementsByTagName(\"v2\")[0].textContent;\n const v3 = currVolumeNode.getElementsByTagName(\"v3\")[0].textContent;\n volume.triangles.push(v1, v2, v3);\n }\n currVolumeNode = currVolumeNode.nextElementSibling;\n }\n return volume;\n }\n function loadMeshVertices(node) {\n const vertArray = [];\n const normalArray = [];\n let currVerticesNode = node.firstElementChild;\n while (currVerticesNode) {\n if (currVerticesNode.nodeName === \"vertex\") {\n let vNode = currVerticesNode.firstElementChild;\n while (vNode) {\n if (vNode.nodeName === \"coordinates\") {\n const x = vNode.getElementsByTagName(\"x\")[0].textContent;\n const y = vNode.getElementsByTagName(\"y\")[0].textContent;\n const z = vNode.getElementsByTagName(\"z\")[0].textContent;\n vertArray.push(x, y, z);\n } else if (vNode.nodeName === \"normal\") {\n const nx = vNode.getElementsByTagName(\"nx\")[0].textContent;\n const ny = vNode.getElementsByTagName(\"ny\")[0].textContent;\n const nz = vNode.getElementsByTagName(\"nz\")[0].textContent;\n normalArray.push(nx, ny, nz);\n }\n vNode = vNode.nextElementSibling;\n }\n }\n currVerticesNode = currVerticesNode.nextElementSibling;\n }\n return { vertices: vertArray, normals: normalArray };\n }\n function loadObject(node) {\n const objId = node.attributes.id.textContent;\n const loadedObject = { name: \"amfobject\", meshes: [] };\n let currColor = null;\n let currObjNode = node.firstElementChild;\n while (currObjNode) {\n if (currObjNode.nodeName === \"metadata\") {\n if (currObjNode.attributes.type !== void 0) {\n if (currObjNode.attributes.type.value === \"name\") {\n loadedObject.name = currObjNode.textContent;\n }\n }\n } else if (currObjNode.nodeName === \"color\") {\n currColor = loadColor(currObjNode);\n } else if (currObjNode.nodeName === \"mesh\") {\n let currMeshNode = currObjNode.firstElementChild;\n const mesh = { vertices: [], normals: [], volumes: [], color: currColor };\n while (currMeshNode) {\n if (currMeshNode.nodeName === \"vertices\") {\n const loadedVertices = loadMeshVertices(currMeshNode);\n mesh.normals = mesh.normals.concat(loadedVertices.normals);\n mesh.vertices = mesh.vertices.concat(loadedVertices.vertices);\n } else if (currMeshNode.nodeName === \"volume\") {\n mesh.volumes.push(loadMeshVolume(currMeshNode));\n }\n currMeshNode = currMeshNode.nextElementSibling;\n }\n loadedObject.meshes.push(mesh);\n }\n currObjNode = currObjNode.nextElementSibling;\n }\n return { id: objId, obj: loadedObject };\n }\n const xmlData = loadDocument(data);\n let amfName = \"\";\n let amfAuthor = \"\";\n const amfScale = loadDocumentScale(xmlData);\n const amfMaterials = {};\n const amfObjects = {};\n const childNodes = xmlData.documentElement.childNodes;\n let i, j;\n for (i = 0; i < childNodes.length; i++) {\n const child = childNodes[i];\n if (child.nodeName === \"metadata\") {\n if (child.attributes.type !== void 0) {\n if (child.attributes.type.value === \"name\") {\n amfName = child.textContent;\n } else if (child.attributes.type.value === \"author\") {\n amfAuthor = child.textContent;\n }\n }\n } else if (child.nodeName === \"material\") {\n const loadedMaterial = loadMaterials(child);\n amfMaterials[loadedMaterial.id] = loadedMaterial.material;\n } else if (child.nodeName === \"object\") {\n const loadedObject = loadObject(child);\n amfObjects[loadedObject.id] = loadedObject.obj;\n }\n }\n const sceneObject = new Group();\n const defaultMaterial = new MeshPhongMaterial({ color: 11184895, flatShading: true });\n sceneObject.name = amfName;\n sceneObject.userData.author = amfAuthor;\n sceneObject.userData.loader = \"AMF\";\n for (const id in amfObjects) {\n const part = amfObjects[id];\n const meshes = part.meshes;\n const newObject = new Group();\n newObject.name = part.name || \"\";\n for (i = 0; i < meshes.length; i++) {\n let objDefaultMaterial = defaultMaterial;\n const mesh = meshes[i];\n const vertices = new Float32BufferAttribute(mesh.vertices, 3);\n let normals = null;\n if (mesh.normals.length) {\n normals = new Float32BufferAttribute(mesh.normals, 3);\n }\n if (mesh.color) {\n const color = mesh.color;\n objDefaultMaterial = defaultMaterial.clone();\n objDefaultMaterial.color = new Color(color.r, color.g, color.b);\n if (color.a !== 1) {\n objDefaultMaterial.transparent = true;\n objDefaultMaterial.opacity = color.a;\n }\n }\n const volumes = mesh.volumes;\n for (j = 0; j < volumes.length; j++) {\n const volume = volumes[j];\n const newGeometry = new BufferGeometry();\n let material = objDefaultMaterial;\n newGeometry.setIndex(volume.triangles);\n newGeometry.setAttribute(\"position\", vertices.clone());\n if (normals) {\n newGeometry.setAttribute(\"normal\", normals.clone());\n }\n if (amfMaterials[volume.materialId] !== void 0) {\n material = amfMaterials[volume.materialId];\n }\n newGeometry.scale(amfScale, amfScale, amfScale);\n newObject.add(new Mesh(newGeometry, material.clone()));\n }\n }\n sceneObject.add(newObject);\n }\n return sceneObject;\n }\n}\nexport {\n AMFLoader\n};\n//# sourceMappingURL=AMFLoader.js.map\n","import { Loader, FileLoader, LoaderUtils, SkinnedMesh, Skeleton, Bone, Vector3, Float32BufferAttribute, BufferGeometry, Uint16BufferAttribute, TextureLoader, Color, MultiplyOperation, AddOperation, MeshToonMaterial, NearestFilter, RepeatWrapping, AnimationClip, VectorKeyframeTrack, QuaternionKeyframeTrack, NumberKeyframeTrack, Quaternion, Euler, Interpolant, CustomBlending, SrcAlphaFactor, OneMinusSrcAlphaFactor, DstAlphaFactor, DoubleSide, FrontSide } from \"three\";\nimport { TGALoader } from \"./TGALoader.js\";\nimport { Parser } from \"../libs/mmdparser.js\";\nclass MMDLoader extends Loader {\n constructor(manager) {\n super(manager);\n this.loader = new FileLoader(this.manager);\n this.parser = null;\n this.meshBuilder = new MeshBuilder(this.manager);\n this.animationBuilder = new AnimationBuilder();\n }\n /**\n * @param {string} animationPath\n * @return {MMDLoader}\n */\n setAnimationPath(animationPath) {\n this.animationPath = animationPath;\n return this;\n }\n // Load MMD assets as Three.js Object\n /**\n * Loads Model file (.pmd or .pmx) as a SkinnedMesh.\n *\n * @param {string} url - url to Model(.pmd or .pmx) file\n * @param {function} onLoad\n * @param {function} onProgress\n * @param {function} onError\n */\n load(url, onLoad, onProgress, onError) {\n const builder = this.meshBuilder.setCrossOrigin(this.crossOrigin);\n let resourcePath;\n if (this.resourcePath !== \"\") {\n resourcePath = this.resourcePath;\n } else if (this.path !== \"\") {\n resourcePath = this.path;\n } else {\n resourcePath = LoaderUtils.extractUrlBase(url);\n }\n const modelExtension = this._extractExtension(url).toLowerCase();\n if (modelExtension !== \"pmd\" && modelExtension !== \"pmx\") {\n if (onError)\n onError(new Error(\"THREE.MMDLoader: Unknown model file extension .\" + modelExtension + \".\"));\n return;\n }\n this[modelExtension === \"pmd\" ? \"loadPMD\" : \"loadPMX\"](\n url,\n function(data) {\n onLoad(builder.build(data, resourcePath, onProgress, onError));\n },\n onProgress,\n onError\n );\n }\n /**\n * Loads Motion file(s) (.vmd) as a AnimationClip.\n * If two or more files are specified, they'll be merged.\n *\n * @param {string|Array<string>} url - url(s) to animation(.vmd) file(s)\n * @param {SkinnedMesh|THREE.Camera} object - tracks will be fitting to this object\n * @param {function} onLoad\n * @param {function} onProgress\n * @param {function} onError\n */\n loadAnimation(url, object, onLoad, onProgress, onError) {\n const builder = this.animationBuilder;\n this.loadVMD(\n url,\n function(vmd) {\n onLoad(object.isCamera ? builder.buildCameraAnimation(vmd) : builder.build(vmd, object));\n },\n onProgress,\n onError\n );\n }\n /**\n * Loads mode file and motion file(s) as an object containing\n * a SkinnedMesh and a AnimationClip.\n * Tracks of AnimationClip are fitting to the model.\n *\n * @param {string} modelUrl - url to Model(.pmd or .pmx) file\n * @param {string|Array{string}} vmdUrl - url(s) to animation(.vmd) file\n * @param {function} onLoad\n * @param {function} onProgress\n * @param {function} onError\n */\n loadWithAnimation(modelUrl, vmdUrl, onLoad, onProgress, onError) {\n const scope = this;\n this.load(\n modelUrl,\n function(mesh) {\n scope.loadAnimation(\n vmdUrl,\n mesh,\n function(animation) {\n onLoad({\n mesh,\n animation\n });\n },\n onProgress,\n onError\n );\n },\n onProgress,\n onError\n );\n }\n // Load MMD assets as Object data parsed by MMDParser\n /**\n * Loads .pmd file as an Object.\n *\n * @param {string} url - url to .pmd file\n * @param {function} onLoad\n * @param {function} onProgress\n * @param {function} onError\n */\n loadPMD(url, onLoad, onProgress, onError) {\n const parser = this._getParser();\n this.loader.setMimeType(void 0).setPath(this.path).setResponseType(\"arraybuffer\").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(\n url,\n function(buffer) {\n onLoad(parser.parsePmd(buffer, true));\n },\n onProgress,\n onError\n );\n }\n /**\n * Loads .pmx file as an Object.\n *\n * @param {string} url - url to .pmx file\n * @param {function} onLoad\n * @param {function} onProgress\n * @param {function} onError\n */\n loadPMX(url, onLoad, onProgress, onError) {\n const parser = this._getParser();\n this.loader.setMimeType(void 0).setPath(this.path).setResponseType(\"arraybuffer\").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(\n url,\n function(buffer) {\n onLoad(parser.parsePmx(buffer, true));\n },\n onProgress,\n onError\n );\n }\n /**\n * Loads .vmd file as an Object. If two or more files are specified\n * they'll be merged.\n *\n * @param {string|Array<string>} url - url(s) to .vmd file(s)\n * @param {function} onLoad\n * @param {function} onProgress\n * @param {function} onError\n */\n loadVMD(url, onLoad, onProgress, onError) {\n const urls = Array.isArray(url) ? url : [url];\n const vmds = [];\n const vmdNum = urls.length;\n const parser = this._getParser();\n this.loader.setMimeType(void 0).setPath(this.animationPath).setResponseType(\"arraybuffer\").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials);\n for (let i = 0, il = urls.length; i < il; i++) {\n this.loader.load(\n urls[i],\n function(buffer) {\n vmds.push(parser.parseVmd(buffer, true));\n if (vmds.length === vmdNum)\n onLoad(parser.mergeVmds(vmds));\n },\n onProgress,\n onError\n );\n }\n }\n /**\n * Loads .vpd file as an Object.\n *\n * @param {string} url - url to .vpd file\n * @param {boolean} isUnicode\n * @param {function} onLoad\n * @param {function} onProgress\n * @param {function} onError\n */\n loadVPD(url, isUnicode, onLoad, onProgress, onError) {\n const parser = this._getParser();\n this.loader.setMimeType(isUnicode ? void 0 : \"text/plain; charset=shift_jis\").setPath(this.animationPath).setResponseType(\"text\").setRequestHeader(this.requestHeader).setWithCredentials(this.withCredentials).load(\n url,\n function(text) {\n onLoad(parser.parseVpd(text, true));\n },\n onProgress,\n onError\n );\n }\n // private methods\n _extractExtension(url) {\n const index = url.lastIndexOf(\".\");\n return index < 0 ? \"\" : url.slice(index + 1);\n }\n _getParser() {\n if (this.parser === null) {\n this.parser = new Parser();\n }\n return this.parser;\n }\n}\nconst DEFAULT_TOON_TEXTURES = [\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=\",\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/bWiiMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh8aBHZBl14e8wAAAABJRU5ErkJggg==\",\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOUlEQVRYR+3WMREAMAwDsYY/yoDI7MLwIiP40+RJklfcCCBAgAABAgTqArfb/QMCCBAgQIAAgbbAB3z/e0F3js2cAAAAAElFTkSuQmCC\",\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAN0lEQVRYR+3WQREAMBACsZ5/B5ilMvgEBTt5cW37hjsBBAgQIECAwFwgyfYPCCBAgAABAgTWAh81dWyx0gFwKAAAAABJRU5ErkJggg==\",\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAOklEQVRYR+3WoREAMAwDsWb/UQtCy9wxTOQJ/oQ8SXKKGwEECBAgQIBAXeDt7f4BAQQIECBAgEBb4AOz8Hzx7WLY4wAAAABJRU5ErkJggg==\",\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABPUlEQVRYR+1XwW7CMAy1+f9fZOMysSEOEweEOPRNdm3HbdOyIhAcklPrOs/PLy9RygBALxzcCDQFmgJNgaZAU6Ap0BR4PwX8gsRMVLssMRH5HcpzJEaWL7EVg9F1IHRlyqQohgVr4FGUlUcMJSjcUlDw0zvjeun70cLWmneoyf7NgBTQSniBTQQSuJAZsOnnaczjIMb5hCiuHKxokCrJfVnrctyZL0PkJAJe1HMil4nxeyi3Ypfn1kX51jpPvo/JeCNC4PhVdHdJw2XjBR8brF8PEIhNVn12AgP7uHsTBguBn53MUZCqv7Lp07Pn5k1Ro+uWmUNn7D+M57rtk7aG0Vo73xyF/fbFf0bPJjDXngnGocDTdFhygZjwUQrMNrDcmZlQT50VJ/g/UwNyHpu778+yW+/ksOz/BFo54P4AsUXMfRq7XWsAAAAASUVORK5CYII=\",\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAACMElEQVRYR+2Xv4pTQRTGf2dubhLdICiii2KnYKHVolhauKWPoGAnNr6BD6CvIVaihYuI2i1ia0BY0MZGRHQXjZj/mSPnnskfNWiWZUlzJ5k7M2cm833nO5Mziej2DWWJRUoCpQKlAntSQCqgw39/iUWAGmh37jrRnVsKlgpiqmkoGVABA7E57fvY+pJDdgKqF6HzFCSADkDq+F6AHABtQ+UMVE5D7zXod7fFNhTEckTbj5XQgHzNN+5tQvc5NG7C6BNkp6D3EmpXHDR+dQAjFLchW3VS9rlw3JBh+B7ys5Cf9z0GW1C/7P32AyBAOAz1q4jGliIH3YPuBnSfQX4OGreTIgEYQb/pBDtPnEQ4CivXYPAWBk13oHrB54yA9QuSn2H4AcKRpEILDt0BUzj+RLR1V5EqjD66NPRBVpLcQwjHoHYJOhsQv6U4mnzmrIXJCFr4LDwm/xBUoboG9XX4cc9VKdYoSA2yk5NQLJaKDUjTBoveG3Z2TElTxwjNK4M3LEZgUdDdruvcXzKBpStgp2NPiWi3ks9ZXxIoFVi+AvHLdc9TqtjL3/aYjpPlrzOcEnK62Szhimdd7xX232zFDTgtxezOu3WNMRLjiKgjtOhHVMd1loynVHvOgjuIIJMaELEqhJAV/RCSLbWTcfPFakFgFlALTRRvx+ok6Hlp/Q+v3fmx90bMyUzaEAhmM3KvHlXTL5DxnbGf/1M8RNNACLL5MNtPxP/mypJAqcDSFfgFhpYqWUzhTEAAAAAASUVORK5CYII=\",\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=\",\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=\",\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=\",\n \"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAAAL0lEQVRYR+3QQREAAAzCsOFfNJPBJ1XQS9r2hsUAAQIECBAgQIAAAQIECBAgsBZ4MUx/ofm2I/kAAAAASUVORK5CYII=\"\n];\nclass MeshBuilder {\n constructor(manager) {\n this.crossOrigin = \"anonymous\";\n this.geometryBuilder = new GeometryBuilder();\n this.materialBuilder = new MaterialBuilder(manager);\n }\n /**\n * @param {string} crossOrigin\n * @return {MeshBuilder}\n */\n setCrossOrigin(crossOrigin) {\n this.crossOrigin = crossOrigin;\n return this;\n }\n /**\n * @param {Object} data - parsed PMD/PMX data\n * @param {string} resourcePath\n * @param {function} onProgress\n * @param {function} onError\n * @return {SkinnedMesh}\n */\n build(data, resourcePath, onProgress, onError) {\n const geometry = this.geometryBuilder.build(data);\n const material = this.materialBuilder.setCrossOrigin(this.crossOrigin).setResourcePath(resourcePath).build(data, geometry, onProgress, onError);\n const mesh = new SkinnedMesh(geometry, material);\n const skeleton = new Skeleton(initBones(mesh));\n mesh.bind(skeleton);\n return mesh;\n }\n}\nfunction initBones(mesh) {\n const geometry = mesh.geometry;\n const bones = [];\n if (geometry && geometry.bones !== void 0) {\n for (let i = 0, il = geometry.bones.length; i < il; i++) {\n const gbone = geometry.bones[i];\n const bone = new Bone();\n bones.push(bone);\n bone.name = gbone.name;\n bone.position.fromArray(gbone.pos);\n bone.quaternion.fromArray(gbone.rotq);\n if (gbone.scl !== void 0)\n bone.scale.fromArray(gbone.scl);\n }\n for (let i = 0, il = geometry.bones.length; i < il; i++) {\n const gbone = geometry.bones[i];\n if (gbone.parent !== -1 && gbone.parent !== null && bones[gbone.parent] !== void 0) {\n bones[gbone.parent].add(bones[i]);\n } else {\n mesh.add(bones[i]);\n }\n }\n }\n mesh.updateMatrixWorld(true);\n return bones;\n}\nclass GeometryBuilder {\n /**\n * @param {Object} data - parsed PMD/PMX data\n * @return {BufferGeometry}\n */\n build(data) {\n const positions = [];\n const uvs = [];\n const normals = [];\n const indices = [];\n const groups = [];\n const bones = [];\n const skinIndices = [];\n const skinWeights = [];\n const morphTargets = [];\n const morphPositions = [];\n const iks = [];\n const grants = [];\n const rigidBodies = [];\n const constraints = [];\n let offset = 0;\n const boneTypeTable = {};\n for (let i = 0; i < data.metadata.vertexCount; i++) {\n const v = data.vertices[i];\n for (let j = 0, jl = v.position.length; j < jl; j++) {\n positions.push(v.position[j]);\n }\n for (let j = 0, jl = v.normal.length; j < jl; j++) {\n normals.push(v.normal[j]);\n }\n for (let j = 0, jl = v.uv.length; j < jl; j++) {\n uvs.push(v.uv[j]);\n }\n for (let j = 0; j < 4; j++) {\n skinIndices.push(v.skinIndices.length - 1 >= j ? v.skinIndices[j] : 0);\n }\n for (let j = 0; j < 4; j++) {\n skinWeights.push(v.skinWeights.length - 1 >= j ? v.skinWeights[j] : 0);\n }\n }\n for (let i = 0; i < data.metadata.faceCount; i++) {\n const face = data.faces[i];\n for (let j = 0, jl = face.indices.length; j < jl; j++) {\n indices.push(face.indices[j]);\n }\n }\n for (let i = 0; i < data.metadata.materialCount; i++) {\n const material = data.materials[i];\n groups.push({\n offset: offset * 3,\n count: material.faceCount * 3\n });\n offset += material.faceCount;\n }\n for (let i = 0; i < data.metadata.rigidBodyCount; i++) {\n const body = data.rigidBodies[i];\n let value = boneTypeTable[body.boneIndex];\n value = value === void 0 ? body.type : Math.max(body.type, value);\n boneTypeTable[body.boneIndex] = value;\n }\n for (let i = 0; i < data.metadata.boneCount; i++) {\n const boneData = data.bones[i];\n const bone = {\n index: i,\n transformationClass: boneData.transformationClass,\n parent: boneData.parentIndex,\n name: boneData.name,\n pos: boneData.position.slice(0, 3),\n rotq: [0, 0, 0, 1],\n scl: [1, 1, 1],\n rigidBodyType: boneTypeTable[i] !== void 0 ? boneTypeTable[i] : -1\n };\n if (bone.parent !== -1) {\n bone.pos[0] -= data.bones[bone.parent].position[0];\n bone.pos[1] -= data.bones[bone.parent].position[1];\n bone.pos[2] -= data.bones[bone.parent].position[2];\n }\n bones.push(bone);\n }\n if (data.metadata.format === \"pmd\") {\n for (let i = 0; i < data.metadata.ikCount; i++) {\n const ik = data.iks[i];\n const param = {\n target: ik.target,\n effector: ik.effector,\n iteration: ik.iteration,\n maxAngle: ik.maxAngle * 4,\n links: []\n };\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = {};\n link.index = ik.links[j].index;\n link.enabled = true;\n if (data.bones[link.index].name.indexOf(\"ひざ\") >= 0) {\n link.limitation = new Vector3(1, 0, 0);\n }\n param.links.push(link);\n }\n iks.push(param);\n }\n } else {\n for (let i = 0; i < data.metadata.boneCount; i++) {\n const ik = data.bones[i].ik;\n if (ik === void 0)\n continue;\n const param = {\n target: i,\n effector: ik.effector,\n iteration: ik.iteration,\n maxAngle: ik.maxAngle,\n links: []\n };\n for (let j = 0, jl = ik.links.length; j < jl; j++) {\n const link = {};\n link.index = ik.links[j].index;\n link.enabled = true;\n if (ik.links[j].angleLimitation === 1) {\n const rotationMin = ik.links[j].lowerLimitationAngle;\n const rotationMax = ik.links[j].upperLimitationAngle;\n const tmp1 = -rotationMax[0];\n const tmp2 = -rotationMax[1];\n rotationMax[0] = -rotationMin[0];\n rotationMax[1] = -rotationMin[1];\n rotationMin[0] = tmp1;\n rotationMin[1] = tmp2;\n link.rotationMin = new Vector3().fromArray(rotationMin);\n link.rotationMax = new Vector3().fromArray(rotationMax);\n }\n param.links.push(link);\n }\n iks.push(param);\n bones[i].ik = param;\n }\n }\n if (data.metadata.format === \"pmx\") {\n let traverse = function(entry) {\n if (entry.param) {\n grants.push(entry.param);\n bones[entry.param.index].grant = entry.param;\n }\n entry.visited = true;\n for (let i = 0, il = entry.children.length; i < il; i++) {\n const child = entry.children[i];\n if (!child.visited)\n traverse(child);\n }\n };\n const grantEntryMap = {};\n for (let i = 0; i < data.metadata.boneCount; i++) {\n const boneData = data.bones[i];\n const grant = boneData.grant;\n if (grant === void 0)\n continue;\n const param = {\n index: i,\n parentIndex: grant.parentIndex,\n ratio: grant.ratio,\n isLocal: grant.isLocal,\n affectRotation: grant.affectRotation,\n affectPosition: grant.affectPosition,\n transformationClass: boneData.transformationClass\n };\n grantEntryMap[i] = { parent: null, children: [], param, visited: false };\n }\n const rootEntry = { parent: null, children: [], param: null, visited: false };\n for (const boneIndex in grantEntryMap) {\n const grantEntry = grantEntryMap[boneIndex];\n const parentGrantEntry = grantEntryMap[grantEntry.parentIndex] || rootEntry;\n grantEntry.parent = parentGrantEntry;\n parentGrantEntry.children.push(grantEntry);\n }\n traverse(rootEntry);\n }\n function updateAttributes(attribute, morph, ratio) {\n for (let i = 0; i < morph.elementCount; i++) {\n const element = morph.elements[i];\n let index;\n if (data.metadata.format === \"pmd\") {\n index = data.morphs[0].elements[element.index].index;\n } else {\n index = element.index;\n }\n attribute.array[index * 3 + 0] += element.position[0] * ratio;\n attribute.array[index * 3 + 1] += element.position[1] * ratio;\n attribute.array[index * 3 + 2] += element.position[2] * ratio;\n }\n }\n for (let i = 0; i < data.metadata.morphCount; i++) {\n const morph = data.morphs[i];\n const params = { name: morph.name };\n const attribute = new Float32BufferAttribute(data.metadata.vertexCount * 3, 3);\n attribute.name = morph.name;\n for (let j = 0; j < data.metadata.vertexCount * 3; j++) {\n attribute.array[j] = positions[j];\n }\n if (data.metadata.format === \"pmd\") {\n if (i !== 0) {\n updateAttributes(attribute, morph, 1);\n }\n } else {\n if (morph.type === 0) {\n for (let j = 0; j < morph.elementCount; j++) {\n const morph2 = data.morphs[morph.elements[j].index];\n const ratio = morph.elements[j].ratio;\n if (morph2.type === 1) {\n updateAttributes(attribute, morph2, ratio);\n }\n }\n } else if (morph.type === 1) {\n updateAttributes(attribute, morph, 1);\n } else if (morph.type === 2)\n ;\n else if (morph.type === 3)\n ;\n else if (morph.type === 4)\n ;\n else if (morph.type === 5)\n ;\n else if (morph.type === 6)\n ;\n else if (morph.type === 7)\n ;\n else if (morph.type === 8)\n ;\n }\n morphTargets.push(params);\n morphPositions.push(attribute);\n }\n for (let i = 0; i < data.metadata.rigidBodyCount; i++) {\n const rigidBody = data.rigidBodies[i];\n const params = {};\n for (const key in rigidBody) {\n params[key] = rigidBody[key];\n }\n if (data.metadata.format === \"pmx\") {\n if (params.boneIndex !== -1) {\n const bone = data.bones[params.boneIndex];\n params.position[0] -= bone.position[0];\n params.position[1] -= bone.position[1];\n params.position[2] -= bone.position[2];\n }\n }\n rigidBodies.push(params);\n }\n for (let i = 0; i < data.metadata.constraintCount; i++) {\n const constraint = data.constraints[i];\n const params = {};\n for (const key in constraint) {\n params[key] = constraint[key];\n }\n const bodyA = rigidBodies[params.rigidBodyIndex1];\n const bodyB = rigidBodies[params.rigidBodyIndex2];\n if (bodyA.type !== 0 && bodyB.type === 2) {\n if (bodyA.boneIndex !== -1 && bodyB.boneIndex !== -1 && data.bones[bodyB.boneIndex].parentIndex === bodyA.boneIndex) {\n bodyB.type = 1;\n }\n }\n constraints.push(params);\n }\n const geometry = new BufferGeometry();\n geometry.setAttribute(\"position\", new Float32BufferAttribute(positions, 3));\n geometry.setAttribute(\"normal\", new Float32BufferAttribute(normals, 3));\n geometry.setAttribute(\"uv\", new Float32BufferAttribute(uvs, 2));\n geometry.setAttribute(\"skinIndex\", new Uint16BufferAttribute(skinIndices, 4));\n geometry.setAttribute(\"skinWeight\", new Float32BufferAttribute(skinWeights, 4));\n geometry.setIndex(indices);\n for (let i = 0, il = groups.length; i < il; i++) {\n geometry.addGroup(groups[i].offset, groups[i].count, i);\n }\n geometry.bones = bones;\n geometry.morphTargets = morphTargets;\n geometry.morphAttributes.position = morphPositions;\n geometry.morphTargetsRelative = false;\n geometry.userData.MMD = {\n bones,\n iks,\n grants,\n rigidBodies,\n constraints,\n format: data.metadata.format\n };\n geometry.computeBoundingSphere();\n return geometry;\n }\n}\nclass MaterialBuilder {\n constructor(manager) {\n this.manager = manager;\n this.textureLoader = new TextureLoader(this.manager);\n this.tgaLoader = null;\n this.crossOrigin = \"anonymous\";\n this.resourcePath = void 0;\n }\n /**\n * @param {string} crossOrigin\n * @return {MaterialBuilder}\n */\n setCrossOrigin(crossOrigin) {\n this.crossOrigin = crossOrigin;\n return this;\n }\n /**\n * @param {string} resourcePath\n * @return {MaterialBuilder}\n */\n setResourcePath(resourcePath) {\n this.resourcePath = resourcePath;\n return this;\n }\n /**\n * @param {Object} data - parsed PMD/PMX data\n * @param {BufferGeometry} geometry - some properties are dependend on geometry\n * @param {function} onProgress\n * @param {function} onError\n * @return {Array<MeshToonMaterial>}\n */\n build(data, geometry) {\n const materials = [];\n const textures = {};\n this.textureLoader.setCrossOrigin(this.crossOrigin);\n for (let i = 0; i < data.metadata.materialCount; i++) {\n const material = data.materials[i];\n const params = { userData: {} };\n if (material.name !== void 0)\n params.name = material.name;\n params.color = new Color().fromArray(material.diffuse);\n params.opacity = material.diffuse[3];\n params.emissive = new Color().fromArray(material.ambient);\n params.transparent = params.opacity !== 1;\n params.skinning = geometry.bones.length > 0 ? true : false;\n params.morphTargets = geometry.morphTargets.length > 0 ? true : false;\n params.fog = true;\n params.blending = CustomBlending;\n params.blendSrc = SrcAlphaFactor;\n params.blendDst = OneMinusSrcAlphaFactor;\n params.blendSrcAlpha = SrcAlphaFactor;\n params.blendDstAlpha = DstAlphaFactor;\n if (data.metadata.format === \"pmx\" && (material.flag & 1) === 1) {\n params.side = DoubleSide;\n } else {\n params.side = params.opacity === 1 ? FrontSide : DoubleSide;\n }\n if (data.metadata.format === \"pmd\") {\n if (material.fileName) {\n const fileName = material.fileName;\n const fileNames = fileName.split(\"*\");\n params.map = this._loadTexture(fileNames[0], textures);\n if (fileNames.length > 1) {\n const extension = fileNames[1].slice(-4).toLowerCase();\n params.envMap = this._loadTexture(fileNames[1], textures);\n params.combine = extension === \".sph\" ? MultiplyOperation : AddOperation;\n }\n }\n const toonFileName = material.toonIndex === -1 ? \"toon00.bmp\" : data.toonTextures[material.toonIndex].fileName;\n params.gradientMap = this._loadTexture(toonFileName, textures, {\n isToonTexture: true,\n isDefaultToonTexture: this._isDefaultToonTexture(toonFileName)\n });\n params.userData.outlineParameters = {\n thickness: material.edgeFlag === 1 ? 3e-3 : 0,\n color: [0, 0, 0],\n alpha: 1,\n visible: material.edgeFlag === 1\n };\n } else {\n if (material.textureIndex !== -1) {\n params.map = this._loadTexture(data.textures[material.textureIndex], textures);\n }\n if (material.envTextureIndex !== -1 && (material.envFlag === 1 || material.envFlag == 2)) {\n params.envMap = this._loadTexture(data.textures[material.envTextureIndex], textures);\n params.combine = material.envFlag === 1 ? MultiplyOperation : AddOperation;\n }\n let toonFileName, isDefaultToon;\n if (material.toonIndex === -1 || material.toonFlag !== 0) {\n toonFileName = \"toon\" + (\"0\" + (material.toonIndex + 1)).slice(-2) + \".bmp\";\n isDefaultToon = true;\n } else {\n toonFileName = data.textures[material.toonIndex];\n isDefaultToon = false;\n }\n params.gradientMap = this._loadTexture(toonFileName, textures, {\n isToonTexture: true,\n isDefaultToonTexture: isDefaultToon\n });\n params.userData.outlineParameters = {\n thickness: material.edgeSize / 300,\n // TODO: better calculation?\n color: material.edgeColor.slice(0, 3),\n alpha: material.edgeColor[3],\n visible: (material.flag & 16) !== 0 && material.edgeSize > 0\n };\n }\n if (params.map !== void 0) {\n if (!params.transparent) {\n this._checkImageTransparency(params.map, geometry, i);\n }\n params.emissive.multiplyScalar(0.2);\n }\n materials.push(new MeshToonMaterial(params));\n }\n if (data.metadata.format === \"pmx\") {\n let checkAlphaMorph = function(elements, materials2) {\n for (let i = 0, il = elements.length; i < il; i++) {\n const element = elements[i];\n if (element.index === -1)\n continue;\n const material = materials2[element.index];\n if (material.opacity !== element.diffuse[3]) {\n material.transparent = true;\n }\n }\n };\n for (let i = 0, il = data.morphs.length; i < il; i++) {\n const morph = data.morphs[i];\n const elements = morph.elements;\n if (morph.type === 0) {\n for (let j = 0, jl = elements.length; j < jl; j++) {\n const morph2 = data.morphs[elements[j].index];\n if (morph2.type !== 8)\n continue;\n checkAlphaMorph(morph2.elements, materials);\n }\n } else if (morph.type === 8) {\n checkAlphaMorph(elements, materials);\n }\n }\n }\n return materials;\n }\n // private methods\n _getTGALoader() {\n if (this.tgaLoader === null) {\n if (TGALoader === void 0) {\n throw new Error(\"THREE.MMDLoader: Import TGALoader\");\n }\n this.tgaLoader = new TGALoader(this.manager);\n }\n return this.tgaLoader;\n }\n _isDefaultToonTexture(name) {\n if (name.length !== 10)\n return false;\n return /toon(10|0[0-9])\\.bmp/.test(name);\n }\n _loadTexture(filePath, textures, params, onProgress, onError) {\n params = params || {};\n const scope = this;\n let fullPath;\n if (params.isDefaultToonTexture === true) {\n let index;\n try {\n index = parseInt(filePath.match(/toon([0-9]{2})\\.bmp$/)[1]);\n } catch (e) {\n console.warn(\n \"THREE.MMDLoader: \" + filePath + \" seems like a not right default texture path. Using toon00.bmp instead.\"\n );\n index = 0;\n }\n fullPath = DEFAULT_TOON_TEXTURES[index];\n } else {\n fullPath = this.resourcePath + filePath;\n }\n if (textures[fullPath] !== void 0)\n return textures[fullPath];\n let loader = this.manager.getHandler(fullPath);\n if (loader === null) {\n loader = filePath.slice(-4).toLowerCase() === \".tga\" ? this._getTGALoader() : this.textureLoader;\n }\n const texture = loader.load(\n fullPath,\n function(t) {\n if (params.isToonTexture === true) {\n t.image = scope._getRotatedImage(t.image);\n t.magFilter = NearestFilter;\n t.minFilter = NearestFilter;\n }\n t.flipY = false;\n t.wrapS = RepeatWrapping;\n t.wrapT = RepeatWrapping;\n for (let i = 0; i < texture.readyCallbacks.length; i++) {\n texture.readyCallbacks[i](texture);\n }\n delete texture.readyCallbacks;\n },\n onProgress,\n onError\n );\n texture.readyCallbacks = [];\n textures[fullPath] = texture;\n return texture;\n }\n _getRotatedImage(image) {\n const canvas = document.createElement(\"canvas\");\n const context = canvas.getContext(\"2d\");\n const width = image.width;\n const height = image.height;\n canvas.width = width;\n canvas.height = height;\n context.clearRect(0, 0, width, height);\n context.translate(width / 2, height / 2);\n context.rotate(0.5 * Math.PI);\n context.translate(-width / 2, -height / 2);\n context.drawImage(image, 0, 0);\n return context.getImageData(0, 0, width, height);\n }\n // Check if the partial image area used by the texture is transparent.\n _checkImageTransparency(map, geometry, groupIndex) {\n map.readyCallbacks.push(function(texture) {\n function createImageData(image) {\n const canvas = document.createElement(\"canvas\");\n canvas.width = image.width;\n canvas.height = image.height;\n const context = canvas.getContext(\"2d\");\n context.drawImage(image, 0, 0);\n return context.getImageData(0, 0, canvas.width, canvas.height);\n }\n function detectImageTransparency(image, uvs, indices) {\n const width = image.width;\n const height = image.height;\n const data = image.data;\n const threshold = 253;\n if (data.length / (width * height) !== 4)\n return false;\n for (let i = 0; i < indices.length; i += 3) {\n const centerUV = { x: 0, y: 0 };\n for (let j = 0; j < 3; j++) {\n const index = indices[i * 3 + j];\n const uv = { x: uvs[index * 2 + 0], y: uvs[index * 2 + 1] };\n if (getAlphaByUv(image, uv) < threshold)\n return true;\n centerUV.x += uv.x;\n centerUV.y += uv.y;\n }\n centerUV.x /= 3;\n centerUV.y /= 3;\n if (getAlphaByUv(image, centerUV) < threshold)\n return true;\n }\n return false;\n }\n function getAlphaByUv(image, uv) {\n const width = image.width;\n const height = image.height;\n let x = Math.round(uv.x * width) % width;\n let y = Math.round(uv.y * height) % height;\n if (x < 0)\n x += width;\n if (y < 0)\n y += height;\n const index = y * width + x;\n return image.data[index * 4 + 3];\n }\n const imageData = texture.image.data !== void 0 ? texture.image : createImageData(texture.image);\n const group = geometry.groups[groupIndex];\n if (detectImageTransparency(\n imageData,\n geometry.attributes.uv.array,\n geometry.index.array.slice(group.start, group.start + group.count)\n )) {\n map.transparent = true;\n }\n });\n }\n}\nclass AnimationBuilder {\n /**\n * @param {Object} vmd - parsed VMD data\n * @param {SkinnedMesh} mesh - tracks will be fitting to mesh\n * @return {AnimationClip}\n */\n build(vmd, mesh) {\n const tracks = this.buildSkeletalAnimation(vmd, mesh).tracks;\n const tracks2 = this.buildMorphAnimation(vmd, mesh).tracks;\n for (let i = 0, il = tracks2.length; i < il; i++) {\n tracks.push(tracks2[i]);\n }\n return new AnimationClip(\"\", -1, tracks);\n }\n /**\n * @param {Object} vmd - parsed VMD data\n * @param {SkinnedMesh} mesh - tracks will be fitting to mesh\n * @return {AnimationClip}\n */\n buildSkeletalAnimation(vmd, mesh) {\n function pushInterpolation(array, interpolation, index) {\n array.push(interpolation[index + 0] / 127);\n array.push(interpolation[index + 8] / 127);\n array.push(interpolation[index + 4] / 127);\n array.push(interpolation[index + 12] / 127);\n }\n const tracks = [];\n const motions = {};\n const bones = mesh.skeleton.bones;\n const boneNameDictionary = {};\n for (let i = 0, il = bones.length; i < il; i++) {\n boneNameDictionary[bones[i].name] = true;\n }\n for (let i = 0; i < vmd.metadata.motionCount; i++) {\n const motion = vmd.motions[i];\n const boneName = motion.boneName;\n if (boneNameDictionary[boneName] === void 0)\n continue;\n motions[boneName] = motions[boneName] || [];\n motions[boneName].push(motion);\n }\n for (const key in motions) {\n const array = motions[key];\n array.sort(function(a, b) {\n return a.frameNum - b.frameNum;\n });\n const times = [];\n const positions = [];\n const rotations = [];\n const pInterpolations = [];\n const rInterpolations = [];\n const basePosition = mesh.skeleton.getBoneByName(key).position.toArray();\n for (let i = 0, il = array.length; i < il; i++) {\n const time = array[i].frameNum / 30;\n const position = array[i].position;\n const rotation = array[i].rotation;\n const interpolation = array[i].interpolation;\n times.push(time);\n for (let j = 0; j < 3; j++)\n positions.push(basePosition[j] + position[j]);\n for (let j = 0; j < 4; j++)\n rotations.push(rotation[j]);\n for (let j = 0; j < 3; j++)\n pushInterpolation(pInterpolations, interpolation, j);\n pushInterpolation(rInterpolations, interpolation, 3);\n }\n const targetName = \".bones[\" + key + \"]\";\n tracks.push(this._createTrack(targetName + \".position\", VectorKeyframeTrack, times, positions, pInterpolations));\n tracks.push(\n this._createTrack(targetName + \".quaternion\", QuaternionKeyframeTrack, times, rotations, rInterpolations)\n );\n }\n return new AnimationClip(\"\", -1, tracks);\n }\n /**\n * @param {Object} vmd - parsed VMD data\n * @param {SkinnedMesh} mesh - tracks will be fitting to mesh\n * @return {AnimationClip}\n */\n buildMorphAnimation(vmd, mesh) {\n const tracks = [];\n const morphs = {};\n const morphTargetDictionary = mesh.morphTargetDictionary;\n for (let i = 0; i < vmd.metadata.morphCount; i++) {\n const morph = vmd.morphs[i];\n const morphName = morph.morphName;\n if (morphTargetDictionary[morphName] === void 0)\n continue;\n morphs[morphName] = morphs[morphName] || [];\n morphs[morphName].push(morph);\n }\n for (const key in morphs) {\n const array = morphs[key];\n array.sort(function(a, b) {\n return a.frameNum - b.frameNum;\n });\n const times = [];\n const values = [];\n for (let i = 0, il = array.length; i < il; i++) {\n times.push(array[i].frameNum / 30);\n values.push(array[i].weight);\n }\n tracks.push(new NumberKeyframeTrack(\".morphTargetInfluences[\" + morphTargetDictionary[key] + \"]\", times, values));\n }\n return new AnimationClip(\"\", -1, tracks);\n }\n /**\n * @param {Object} vmd - parsed VMD data\n * @return {AnimationClip}\n */\n buildCameraAnimation(vmd) {\n function pushVector3(array, vec) {\n array.push(vec.x);\n array.push(vec.y);\n array.push(vec.z);\n }\n function pushQuaternion(array, q) {\n array.push(q.x);\n array.push(q.y);\n array.push(q.z);\n array.push(q.w);\n }\n function pushInterpolation(array, interpolation, index) {\n array.push(interpolation[index * 4 + 0] / 127);\n array.push(interpolation[index * 4 + 1] / 127);\n array.push(interpolation[index * 4 + 2] / 127);\n array.push(interpolation[index * 4 + 3] / 127);\n }\n const cameras = vmd.cameras === void 0 ? [] : vmd.cameras.slice();\n cameras.sort(function(a, b) {\n return a.frameNum - b.frameNum;\n });\n const times = [];\n const centers = [];\n const quaternions = [];\n const positions = [];\n const fovs = [];\n const cInterpolations = [];\n const qInterpolations = [];\n const pInterpolations = [];\n const fInterpolations = [];\n const quaternion = new Quaternion();\n const euler = new Euler();\n const position = new Vector3();\n const center = new Vector3();\n for (let i = 0, il = cameras.length; i < il; i++) {\n const motion = cameras[i];\n const time = motion.frameNum / 30;\n const pos = motion.position;\n const rot = motion.rotation;\n const distance = motion.distance;\n const fov = motion.fov;\n const interpolation = motion.interpolation;\n times.push(time);\n position.set(0, 0, -distance);\n center.set(pos[0], pos[1], pos[2]);\n euler.set(-rot[0], -rot[1], -rot[2]);\n quaternion.setFromEuler(euler);\n position.add(center);\n position.applyQuaternion(quaternion);\n pushVector3(centers, center);\n pushQuaternion(quaternions, quaternion);\n pushVector3(positions, position);\n fovs.push(fov);\n for (let j = 0; j < 3; j++) {\n pushInterpolation(cInterpolations, interpolation, j);\n }\n pushInterpolation(qInterpolations, interpolation, 3);\n for (let j = 0; j < 3; j++) {\n pushInterpolation(pInterpolations, interpolation, 4);\n }\n pushInterpolation(fInterpolations, interpolation, 5);\n }\n const tracks = [];\n tracks.push(this._createTrack(\"target.position\", VectorKeyframeTrack, times, centers, cInterpolations));\n tracks.push(this._createTrack(\".quaternion\", QuaternionKeyframeTrack, times, quaternions, qInterpolations));\n tracks.push(this._createTrack(\".position\", VectorKeyframeTrack, times, positions, pInterpolations));\n tracks.push(this._createTrack(\".fov\", NumberKeyframeTrack, times, fovs, fInterpolations));\n return new AnimationClip(\"\", -1, tracks);\n }\n // private method\n _createTrack(node, typedKeyframeTrack, times, values, interpolations) {\n if (times.length > 2) {\n times = times.slice();\n values = values.slice();\n interpolations = interpolations.slice();\n const stride = values.length / times.length;\n const interpolateStride = interpolations.length / times.length;\n let index = 1;\n for (let aheadIndex = 2, endIndex = times.length; aheadIndex < endIndex; aheadIndex++) {\n for (let i = 0; i < stride; i++) {\n if (values[index * stride + i] !== values[(index - 1) * stride + i] || values[index * stride + i] !== values[aheadIndex * stride + i]) {\n index++;\n break;\n }\n }\n if (aheadIndex > index) {\n times[index] = times[aheadIndex];\n for (let i = 0; i < stride; i++) {\n values[index * stride + i] = values[aheadIndex * stride + i];\n }\n for (let i = 0; i < interpolateStride; i++) {\n interpolations[index * interpolateStride + i] = interpolations[aheadIndex * interpolateStride + i];\n }\n }\n }\n times.length = index + 1;\n values.length = (index + 1) * stride;\n interpolations.length = (index + 1) * interpolateStride;\n }\n const track = new typedKeyframeTrack(node, times, values);\n track.createInterpolant = function InterpolantFactoryMethodCubicBezier(result) {\n return new CubicBezierInterpolation(\n this.times,\n this.values,\n this.getValueSize(),\n result,\n new Float32Array(interpolations)\n );\n };\n return track;\n }\n}\nclass CubicBezierInterpolation extends Interpolant {\n constructor(parameterPositions, sampleValues, sampleSize, resultBuffer, params) {\n super(parameterPositions, sampleValues, sampleSize, resultBuffer);\n this.interpolationParams = params;\n }\n interpolate_(i1, t0, t, t1) {\n const result = this.resultBuffer;\n const values = this.sampleValues;\n const stride = this.valueSize;\n const params = this.interpolationParams;\n const offset1 = i1 * stride;\n const offset0 = offset1 - stride;\n const weight1 = t1 - t0 < 1 / 30 * 1.5 ? 0 : (t - t0) / (t1 - t0);\n if (stride === 4) {\n const x1 = params[i1 * 4 + 0];\n const x2 = params[i1 * 4 + 1];\n const y1 = params[i1 * 4 + 2];\n const y2 = params[i1 * 4 + 3];\n const ratio = this._calculate(x1, x2, y1, y2, weight1);\n Quaternion.slerpFlat(result, 0, values, offset0, values, offset1, ratio);\n } else if (stride === 3) {\n for (let i = 0; i !== stride; ++i) {\n const x1 = params[i1 * 12 + i * 4 + 0];\n const x2 = params[i1 * 12 + i * 4 + 1];\n const y1 = params[i1 * 12 + i * 4 + 2];\n const y2 = params[i1 * 12 + i * 4 + 3];\n const ratio = this._calculate(x1, x2, y1, y2, weight1);\n result[i] = values[offset0 + i] * (1 - ratio) + values[offset1 + i] * ratio;\n }\n } else {\n const x1 = params[i1 * 4 + 0];\n const x2 = params[i1 * 4 + 1];\n const y1 = params[i1 * 4 + 2];\n const y2 = params[i1 * 4 + 3];\n const ratio = this._calculate(x1, x2, y1, y2, weight1);\n result[0] = values[offset0] * (1 - ratio) + values[offset1] * ratio;\n }\n return result;\n }\n _calculate(x1, x2, y1, y2, x) {\n let c = 0.5;\n let t = c;\n let s = 1 - t;\n const loop = 15;\n const eps = 1e-5;\n const math = Math;\n let sst3, stt3, ttt;\n for (let i = 0; i < loop; i++) {\n sst3 = 3 * s * s * t;\n stt3 = 3 * s * t * t;\n ttt = t * t * t;\n const ft = sst3 * x1 + stt3 * x2 + ttt - x;\n if (math.abs(ft) < eps)\n break;\n c /= 2;\n t += ft < 0 ? c : -c;\n s = 1 - t;\n }\n return sst3 * y1 + stt3 * y2 + ttt;\n }\n}\nexport {\n MMDLoader\n};\n//# sourceMappingURL=MMDLoader.js.map\n","import { CompressedTextureLoader } from \"three\";\nclass KTXLoader extends CompressedTextureLoader {\n constructor(manager) {\n super(manager);\n }\n parse(buffer, loadMipmaps) {\n const ktx = new KhronosTextureContainer(buffer, 1);\n return {\n mipmaps: ktx.mipmaps(loadMipmaps),\n width: ktx.pixelWidth,\n height: ktx.pixelHeight,\n format: ktx.glInternalFormat,\n isCubemap: ktx.numberOfFaces === 6,\n mipmapCount: ktx.numberOfMipmapLevels\n };\n }\n}\nconst HEADER_LEN = 12 + 13 * 4;\nconst COMPRESSED_2D = 0;\nclass KhronosTextureContainer {\n /**\n * @param {ArrayBuffer} arrayBuffer- contents of the KTX container file\n * @param {number} facesExpected- should be either 1 or 6, based whether a cube texture or or\n * @param {boolean} threeDExpected- provision for indicating that data should be a 3D texture, not implemented\n * @param {boolean} textureArrayExpected- provision for indicating that data should be a texture array, not implemented\n */\n constructor(arrayBuffer, facesExpected) {\n this.arrayBuffer = arrayBuffer;\n const identifier = new Uint8Array(this.arrayBuffer, 0, 12);\n if (identifier[0] !== 171 || identifier[1] !== 75 || identifier[2] !== 84 || identifier[3] !== 88 || identifier[4] !== 32 || identifier[5] !== 49 || identifier[6] !== 49 || identifier[7] !== 187 || identifier[8] !== 13 || identifier[9] !== 10 || identifier[10] !== 26 || identifier[11] !== 10) {\n console.error(\"texture missing KTX identifier\");\n return;\n }\n const dataSize = Uint32Array.BYTES_PER_ELEMENT;\n const headerDataView = new DataView(this.arrayBuffer, 12, 13 * dataSize);\n const endianness = headerDataView.getUint32(0, true);\n const littleEndian = endianness === 67305985;\n this.glType = headerDataView.getUint32(1 * dataSize, littleEndian);\n this.glTypeSize = headerDataView.getUint32(2 * dataSize, littleEndian);\n this.glFormat = headerDataView.getUint32(3 * dataSize, littleEndian);\n this.glInternalFormat = headerDataView.getUint32(4 * dataSize, littleEndian);\n this.glBaseInternalFormat = headerDataView.getUint32(5 * dataSize, littleEndian);\n this.pixelWidth = headerDataView.getUint32(6 * dataSize, littleEndian);\n this.pixelHeight = headerDataView.getUint32(7 * dataSize, littleEndian);\n this.pixelDepth = headerDataView.getUint32(8 * dataSize, littleEndian);\n this.numberOfArrayElements = headerDataView.getUint32(9 * dataSize, littleEndian);\n this.numberOfFaces = headerDataView.getUint32(10 * dataSize, littleEndian);\n this.numberOfMipmapLevels = headerDataView.getUint32(11 * dataSize, littleEndian);\n this.bytesOfKeyValueData = headerDataView.getUint32(12 * dataSize, littleEndian);\n if (this.glType !== 0) {\n console.warn(\"only compressed formats currently supported\");\n return;\n } else {\n this.numberOfMipmapLevels = Math.max(1, this.numberOfMipmapLevels);\n }\n if (this.pixelHeight === 0 || this.pixelDepth !== 0) {\n console.warn(\"only 2D textures currently supported\");\n return;\n }\n if (this.numberOfArrayElements !== 0) {\n console.warn(\"texture arrays not currently supported\");\n return;\n }\n if (this.numberOfFaces !== facesExpected) {\n console.warn(\"number of faces expected\" + facesExpected + \", but found \" + this.numberOfFaces);\n return;\n }\n this.loadType = COMPRESSED_2D;\n }\n mipmaps(loadMipmaps) {\n const mipmaps = [];\n let dataOffset = HEADER_LEN + this.bytesOfKeyValueData;\n let width = this.pixelWidth;\n let height = this.pixelHeight;\n const mipmapCount = loadMipmaps ? this.numberOfMipmapLevels : 1;\n for (let level = 0; level < mipmapCount; level++) {\n const imageSize = new Int32Array(this.arrayBuffer, dataOffset, 1)[0];\n dataOffset += 4;\n for (let face = 0; face < this.numberOfFaces; face++) {\n const byteArray = new Uint8Array(this.arrayBuffer, dataOffset, imageSize);\n mipmaps.push({ data: byteArray, width, height });\n dataOffset += imageSize;\n dataOffset += 3 - (imageSize + 3) % 4;\n }\n width = Math.max(1, width * 0.5);\n height = Math.max(1, height * 0.5);\n }\n return mipmaps;\n }\n}\nexport {\n KTXLoader\n};\n//# sourceMappingURL=KTXLoader.js.map\n","import { Loader, FileLoader, Group, Mesh, BufferGeometry, Vector3, Quaternion, BufferAttribute, MeshBasicMaterial, DoubleSide, RawShaderMaterial, TextureLoader } from \"three\";\nimport { unzipSync, strFromU8 } from \"fflate\";\nclass TiltLoader extends Loader {\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setResponseType(\"arraybuffer\");\n loader.setWithCredentials(this.withCredentials);\n loader.load(\n url,\n function(buffer) {\n try {\n onLoad(scope.parse(buffer));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(buffer) {\n const group = new Group();\n const zip = unzipSync(new Uint8Array(buffer.slice(16)));\n const metadata = JSON.parse(strFromU8(zip[\"metadata.json\"]));\n const data = new DataView(zip[\"data.sketch\"].buffer);\n const num_strokes = data.getInt32(16, true);\n const brushes = {};\n let offset = 20;\n for (let i = 0; i < num_strokes; i++) {\n const brush_index = data.getInt32(offset, true);\n const brush_color = [\n data.getFloat32(offset + 4, true),\n data.getFloat32(offset + 8, true),\n data.getFloat32(offset + 12, true),\n data.getFloat32(offset + 16, true)\n ];\n const brush_size = data.getFloat32(offset + 20, true);\n const stroke_mask = data.getUint32(offset + 24, true);\n const controlpoint_mask = data.getUint32(offset + 28, true);\n let offset_stroke_mask = 0;\n let offset_controlpoint_mask = 0;\n for (let j = 0; j < 4; j++) {\n const byte = 1 << j;\n if ((stroke_mask & byte) > 0)\n offset_stroke_mask += 4;\n if ((controlpoint_mask & byte) > 0)\n offset_controlpoint_mask += 4;\n }\n offset = offset + 28 + offset_stroke_mask + 4;\n const num_control_points = data.getInt32(offset, true);\n const positions = new Float32Array(num_control_points * 3);\n const quaternions = new Float32Array(num_control_points * 4);\n offset = offset + 4;\n for (let j = 0, k = 0; j < positions.length; j += 3, k += 4) {\n positions[j + 0] = data.getFloat32(offset + 0, true);\n positions[j + 1] = data.getFloat32(offset + 4, true);\n positions[j + 2] = data.getFloat32(offset + 8, true);\n quaternions[k + 0] = data.getFloat32(offset + 12, true);\n quaternions[k + 1] = data.getFloat32(offset + 16, true);\n quaternions[k + 2] = data.getFloat32(offset + 20, true);\n quaternions[k + 3] = data.getFloat32(offset + 24, true);\n offset = offset + 28 + offset_controlpoint_mask;\n }\n if (brush_index in brushes === false) {\n brushes[brush_index] = [];\n }\n brushes[brush_index].push([positions, quaternions, brush_size, brush_color]);\n }\n for (const brush_index in brushes) {\n const geometry = new StrokeGeometry(brushes[brush_index]);\n const material = getMaterial(metadata.BrushIndex[brush_index]);\n group.add(new Mesh(geometry, material));\n }\n return group;\n }\n}\nclass StrokeGeometry extends BufferGeometry {\n constructor(strokes) {\n super();\n const vertices = [];\n const colors = [];\n const uvs = [];\n const position = new Vector3();\n const prevPosition = new Vector3();\n const quaternion = new Quaternion();\n const prevQuaternion = new Quaternion();\n const vector1 = new Vector3();\n const vector2 = new Vector3();\n const vector3 = new Vector3();\n const vector4 = new Vector3();\n for (const k in strokes) {\n const stroke = strokes[k];\n const positions = stroke[0];\n const quaternions = stroke[1];\n const size = stroke[2];\n const color = stroke[3];\n prevPosition.fromArray(positions, 0);\n prevQuaternion.fromArray(quaternions, 0);\n for (let i = 3, j = 4, l = positions.length; i < l; i += 3, j += 4) {\n position.fromArray(positions, i);\n quaternion.fromArray(quaternions, j);\n vector1.set(-size, 0, 0);\n vector1.applyQuaternion(quaternion);\n vector1.add(position);\n vector2.set(size, 0, 0);\n vector2.applyQuaternion(quaternion);\n vector2.add(position);\n vector3.set(size, 0, 0);\n vector3.applyQuaternion(prevQuaternion);\n vector3.add(prevPosition);\n vector4.set(-size, 0, 0);\n vector4.applyQuaternion(prevQuaternion);\n vector4.add(prevPosition);\n vertices.push(vector1.x, vector1.y, -vector1.z);\n vertices.push(vector2.x, vector2.y, -vector2.z);\n vertices.push(vector4.x, vector4.y, -vector4.z);\n vertices.push(vector2.x, vector2.y, -vector2.z);\n vertices.push(vector3.x, vector3.y, -vector3.z);\n vertices.push(vector4.x, vector4.y, -vector4.z);\n prevPosition.copy(position);\n prevQuaternion.copy(quaternion);\n colors.push(...color);\n colors.push(...color);\n colors.push(...color);\n colors.push(...color);\n colors.push(...color);\n colors.push(...color);\n const p1 = i / l;\n const p2 = (i - 3) / l;\n uvs.push(p1, 0);\n uvs.push(p1, 1);\n uvs.push(p2, 0);\n uvs.push(p1, 1);\n uvs.push(p2, 1);\n uvs.push(p2, 0);\n }\n }\n this.setAttribute(\"position\", new BufferAttribute(new Float32Array(vertices), 3));\n this.setAttribute(\"color\", new BufferAttribute(new Float32Array(colors), 4));\n this.setAttribute(\"uv\", new BufferAttribute(new Float32Array(uvs), 2));\n }\n}\nconst BRUSH_LIST_ARRAY = {\n \"89d104cd-d012-426b-b5b3-bbaee63ac43c\": \"Bubbles\",\n \"700f3aa8-9a7c-2384-8b8a-ea028905dd8c\": \"CelVinyl\",\n \"0f0ff7b2-a677-45eb-a7d6-0cd7206f4816\": \"ChromaticWave\",\n \"1161af82-50cf-47db-9706-0c3576d43c43\": \"CoarseBristles\",\n \"79168f10-6961-464a-8be1-57ed364c5600\": \"CoarseBristlesSingleSided\",\n \"1caa6d7d-f015-3f54-3a4b-8b5354d39f81\": \"Comet\",\n \"c8313697-2563-47fc-832e-290f4c04b901\": \"DiamondHull\",\n \"4391aaaa-df73-4396-9e33-31e4e4930b27\": \"Disco\",\n \"d1d991f2-e7a0-4cf1-b328-f57e915e6260\": \"DotMarker\",\n \"6a1cf9f9-032c-45ec-9b1d-a6680bee30f7\": \"Dots\",\n \"0d3889f3-3ede-470c-8af4-f44813306126\": \"DoubleTaperedFlat\",\n \"0d3889f3-3ede-470c-8af4-de4813306126\": \"DoubleTaperedMarker\",\n \"d0262945-853c-4481-9cbd-88586bed93cb\": \"DuctTape\",\n \"3ca16e2f-bdcd-4da2-8631-dcef342f40f1\": \"DuctTapeSingleSided\",\n \"f6e85de3-6dcc-4e7f-87fd-cee8c3d25d51\": \"Electricity\",\n \"02ffb866-7fb2-4d15-b761-1012cefb1360\": \"Embers\",\n \"cb92b597-94ca-4255-b017-0e3f42f12f9e\": \"Fire\",\n \"2d35bcf0-e4d8-452c-97b1-3311be063130\": \"Flat\",\n \"55303bc4-c749-4a72-98d9-d23e68e76e18\": \"FlatDeprecated\",\n \"280c0a7a-aad8-416c-a7d2-df63d129ca70\": \"FlatSingleSided\",\n \"cf019139-d41c-4eb0-a1d0-5cf54b0a42f3\": \"Highlighter\",\n \"6a1cf9f9-032c-45ec-9b6e-a6680bee32e9\": \"HyperGrid\",\n \"dce872c2-7b49-4684-b59b-c45387949c5c\": \"Hypercolor\",\n \"e8ef32b1-baa8-460a-9c2c-9cf8506794f5\": \"HypercolorSingleSided\",\n \"2f212815-f4d3-c1a4-681a-feeaf9c6dc37\": \"Icing\",\n \"f5c336cf-5108-4b40-ade9-c687504385ab\": \"Ink\",\n \"c0012095-3ffd-4040-8ee1-fc180d346eaa\": \"InkSingleSided\",\n \"4a76a27a-44d8-4bfe-9a8c-713749a499b0\": \"Leaves\",\n \"ea19de07-d0c0-4484-9198-18489a3c1487\": \"LeavesSingleSided\",\n \"2241cd32-8ba2-48a5-9ee7-2caef7e9ed62\": \"Light\",\n \"4391aaaa-df81-4396-9e33-31e4e4930b27\": \"LightWire\",\n \"d381e0f5-3def-4a0d-8853-31e9200bcbda\": \"Lofted\",\n \"429ed64a-4e97-4466-84d3-145a861ef684\": \"Marker\",\n \"79348357-432d-4746-8e29-0e25c112e3aa\": \"MatteHull\",\n \"b2ffef01-eaaa-4ab5-aa64-95a2c4f5dbc6\": \"NeonPulse\",\n \"f72ec0e7-a844-4e38-82e3-140c44772699\": \"OilPaint\",\n \"c515dad7-4393-4681-81ad-162ef052241b\": \"OilPaintSingleSided\",\n \"f1114e2e-eb8d-4fde-915a-6e653b54e9f5\": \"Paper\",\n \"759f1ebd-20cd-4720-8d41-234e0da63716\": \"PaperSingleSided\",\n \"e0abbc80-0f80-e854-4970-8924a0863dcc\": \"Petal\",\n \"c33714d1-b2f9-412e-bd50-1884c9d46336\": \"Plasma\",\n \"ad1ad437-76e2-450d-a23a-e17f8310b960\": \"Rainbow\",\n \"faaa4d44-fcfb-4177-96be-753ac0421ba3\": \"ShinyHull\",\n \"70d79cca-b159-4f35-990c-f02193947fe8\": \"Smoke\",\n \"d902ed8b-d0d1-476c-a8de-878a79e3a34c\": \"Snow\",\n \"accb32f5-4509-454f-93f8-1df3fd31df1b\": \"SoftHighlighter\",\n \"cf7f0059-7aeb-53a4-2b67-c83d863a9ffa\": \"Spikes\",\n \"8dc4a70c-d558-4efd-a5ed-d4e860f40dc3\": \"Splatter\",\n \"7a1c8107-50c5-4b70-9a39-421576d6617e\": \"SplatterSingleSided\",\n \"0eb4db27-3f82-408d-b5a1-19ebd7d5b711\": \"Stars\",\n \"44bb800a-fbc3-4592-8426-94ecb05ddec3\": \"Streamers\",\n \"0077f88c-d93a-42f3-b59b-b31c50cdb414\": \"Taffy\",\n \"b468c1fb-f254-41ed-8ec9-57030bc5660c\": \"TaperedFlat\",\n \"c8ccb53d-ae13-45ef-8afb-b730d81394eb\": \"TaperedFlatSingleSided\",\n \"d90c6ad8-af0f-4b54-b422-e0f92abe1b3c\": \"TaperedMarker\",\n \"1a26b8c0-8a07-4f8a-9fac-d2ef36e0cad0\": \"TaperedMarker_Flat\",\n \"75b32cf0-fdd6-4d89-a64b-e2a00b247b0f\": \"ThickPaint\",\n \"fdf0326a-c0d1-4fed-b101-9db0ff6d071f\": \"ThickPaintSingleSided\",\n \"4391385a-df73-4396-9e33-31e4e4930b27\": \"Toon\",\n \"a8fea537-da7c-4d4b-817f-24f074725d6d\": \"UnlitHull\",\n \"d229d335-c334-495a-a801-660ac8a87360\": \"VelvetInk\",\n \"10201aa3-ebc2-42d8-84b7-2e63f6eeb8ab\": \"Waveform\",\n \"b67c0e81-ce6d-40a8-aeb0-ef036b081aa3\": \"WetPaint\",\n \"dea67637-cd1a-27e4-c9b1-52f4bbcb84e5\": \"WetPaintSingleSided\",\n \"5347acf0-a8e2-47b6-8346-30c70719d763\": \"WigglyGraphite\",\n \"e814fef1-97fd-7194-4a2f-50c2bb918be2\": \"WigglyGraphiteSingleSided\",\n \"4391385a-cf83-4396-9e33-31e4e4930b27\": \"Wire\"\n};\nconst common = {\n colors: {\n BloomColor: `\n\t\t\tvec3 BloomColor(vec3 color, float gain) {\n\t\t\t\t// Guarantee that there's at least a little bit of all 3 channels.\n\t\t\t\t// This makes fully-saturated strokes (which only have 2 non-zero\n\t\t\t\t// color channels) eventually clip to white rather than to a secondary.\n\t\t\t\tfloat cmin = length(color.rgb) * .05;\n\t\t\t\tcolor.rgb = max(color.rgb, vec3(cmin, cmin, cmin));\n\t\t\t\t// If we try to remove this pow() from .a, it brightens up\n\t\t\t\t// pressure-sensitive strokes; looks better as-is.\n\t\t\t\tcolor = pow(color, vec3(2.2));\n\t\t\t\tcolor.rgb *= 2. * exp(gain * 10.);\n\t\t\t\treturn color;\n\t\t\t}\n\t\t`,\n LinearToSrgb: `\n\t\t\tvec3 LinearToSrgb(vec3 color) {\n\t\t\t\t// Approximation http://chilliant.blogspot.com/2012/08/srgb-approximations-for-hlsl.html\n\t\t\t\tvec3 linearColor = color.rgb;\n\t\t\t\tvec3 S1 = sqrt(linearColor);\n\t\t\t\tvec3 S2 = sqrt(S1);\n\t\t\t\tvec3 S3 = sqrt(S2);\n\t\t\t\tcolor.rgb = 0.662002687 * S1 + 0.684122060 * S2 - 0.323583601 * S3 - 0.0225411470 * linearColor;\n\t\t\t\treturn color;\n\t\t\t}\n\t\t`,\n hsv: `\n\t\t\t// uniform sampler2D lookupTex;\n\t\t\tvec4 lookup(vec4 textureColor) {\n\t\t\t\treturn textureColor;\n\t\t\t}\n\n\t\t\tvec3 lookup(vec3 textureColor) {\n\t\t\t\treturn textureColor;\n\t\t\t}\n\n\t\t\tvec3 hsv2rgb( vec3 hsv ) {\n\t\t\t\tvec3 rgb = clamp( abs(mod(hsv.x*6.0+vec3(0.0,4.0,2.0),6.0)-3.0)-1.0, 0.0, 1.0 );\n\t\t\t\treturn hsv.z * mix( vec3(1.0), rgb, hsv.y);\n\t\t\t}\n\n\t\t\tvec3 rgb2hsv( vec3 rgb ) {\n\t\t\t\tvec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0);\n\t\t\t\tvec4 p = mix(vec4(rgb.bg, K.wz), vec4(rgb.gb, K.xy), step(rgb.b, rgb.g));\n\t\t\t\tvec4 q = mix(vec4(p.xyw, rgb.r), vec4(rgb.r, p.yzx), step(p.x, rgb.r));\n\n\t\t\t\tfloat d = q.x - min(q.w, q.y);\n\t\t\t\tfloat e = 1.0e-10;\n\n\t\t\t\treturn vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x);\n\t\t\t}\n\t\t`,\n SrgbToLinear: `\n\t\t\tvec3 SrgbToLinear(vec3 color) {\n\t\t\t\t// Approximation http://chilliant.blogspot.com/2012/08/srgb-approximations-for-hlsl.html\n\t\t\t\tvec3 sRGB = color.rgb;\n\t\t\t\tcolor.rgb = sRGB * (sRGB * (sRGB * 0.305306011 + 0.682171111) + 0.012522878);\n\t\t\t\treturn color;\n\t\t\t}\n\t\t`\n }\n};\nconst shaders = () => ({\n Light: {\n uniforms: {\n mainTex: {\n value: new TextureLoader().setPath(\"./textures/tiltbrush/\").loader.load(\"Light.webp\")\n },\n alphaTest: { value: 0.067 },\n emission_gain: { value: 0.45 },\n alpha: { value: 1 }\n },\n vertexShader: `\n\t\t\tprecision highp float;\n\t\t\tprecision highp int;\n\n\t\t\tattribute vec2 uv;\n\t\t\tattribute vec4 color;\n\t\t\tattribute vec3 position;\n\n\t\t\tuniform mat4 modelMatrix;\n\t\t\tuniform mat4 modelViewMatrix;\n\t\t\tuniform mat4 projectionMatrix;\n\t\t\tuniform mat4 viewMatrix;\n\t\t\tuniform mat3 normalMatrix;\n\t\t\tuniform vec3 cameraPosition;\n\n\t\t\tvarying vec2 vUv;\n\t\t\tvarying vec3 vColor;\n\n\t\t\t${common.colors.LinearToSrgb}\n\t\t\t${common.colors.hsv}\n\n\t\t\tvoid main() {\n\n\t\t\t\tvUv = uv;\n\n\t\t\t\tvColor = lookup(color.rgb);\n\n\t\t\t\tvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n\n\t\t\t\tgl_Position = projectionMatrix * mvPosition;\n\n\t\t\t}\n\t\t`,\n fragmentShader: `\n\t\t\tprecision highp float;\n\t\t\tprecision highp int;\n\n\t\t\tuniform float emission_gain;\n\n\t\t\tuniform sampler2D mainTex;\n\t\t\tuniform float alphaTest;\n\n\t\t\tvarying vec2 vUv;\n\t\t\tvarying vec3 vColor;\n\n\t\t\t${common.colors.BloomColor}\n\t\t\t${common.colors.SrgbToLinear}\n\n\t\t\tvoid main(){\n\t\t\t\tvec4 col = texture2D(mainTex, vUv);\n\t\t\t\tvec3 color = vColor;\n\t\t\t\tcolor = BloomColor(color, emission_gain);\n\t\t\t\tcolor = color * col.rgb;\n\t\t\t\tcolor = color * col.a;\n\t\t\t\tcolor = SrgbToLinear(color);\n\t\t\t\tgl_FragColor = vec4(color, 1.0);\n\t\t\t}\n\t\t`,\n side: 2,\n transparent: true,\n depthFunc: 2,\n depthWrite: true,\n depthTest: false,\n blending: 5,\n blendDst: 201,\n blendDstAlpha: 201,\n blendEquation: 100,\n blendEquationAlpha: 100,\n blendSrc: 201,\n blendSrcAlpha: 201\n }\n});\nfunction getMaterial(GUID) {\n const name = BRUSH_LIST_ARRAY[GUID];\n switch (name) {\n case \"Light\":\n return new RawShaderMaterial(shaders().Light);\n default:\n return new MeshBasicMaterial({ vertexColors: true, side: DoubleSide });\n }\n}\nexport {\n TiltLoader\n};\n//# sourceMappingURL=TiltLoader.js.map\n","import { Loader, FileLoader, BufferGeometry, BufferAttribute } from \"three\";\nconst _taskCache = /* @__PURE__ */ new WeakMap();\nclass DRACOLoader extends Loader {\n constructor(manager) {\n super(manager);\n this.decoderPath = \"\";\n this.decoderConfig = {};\n this.decoderBinary = null;\n this.decoderPending = null;\n this.workerLimit = 4;\n this.workerPool = [];\n this.workerNextTaskID = 1;\n this.workerSourceURL = \"\";\n this.defaultAttributeIDs = {\n position: \"POSITION\",\n normal: \"NORMAL\",\n color: \"COLOR\",\n uv: \"TEX_COORD\"\n };\n this.defaultAttributeTypes = {\n position: \"Float32Array\",\n normal: \"Float32Array\",\n color: \"Float32Array\",\n uv: \"Float32Array\"\n };\n }\n setDecoderPath(path) {\n this.decoderPath = path;\n return this;\n }\n setDecoderConfig(config) {\n this.decoderConfig = config;\n return this;\n }\n setWorkerLimit(workerLimit) {\n this.workerLimit = workerLimit;\n return this;\n }\n load(url, onLoad, onProgress, onError) {\n const loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setResponseType(\"arraybuffer\");\n loader.setRequestHeader(this.requestHeader);\n loader.setWithCredentials(this.withCredentials);\n loader.load(\n url,\n (buffer) => {\n const taskConfig = {\n attributeIDs: this.defaultAttributeIDs,\n attributeTypes: this.defaultAttributeTypes,\n useUniqueIDs: false\n };\n this.decodeGeometry(buffer, taskConfig).then(onLoad).catch(onError);\n },\n onProgress,\n onError\n );\n }\n /** @deprecated Kept for backward-compatibility with previous DRACOLoader versions. */\n decodeDracoFile(buffer, callback, attributeIDs, attributeTypes) {\n const taskConfig = {\n attributeIDs: attributeIDs || this.defaultAttributeIDs,\n attributeTypes: attributeTypes || this.defaultAttributeTypes,\n useUniqueIDs: !!attributeIDs\n };\n this.decodeGeometry(buffer, taskConfig).then(callback);\n }\n decodeGeometry(buffer, taskConfig) {\n for (const attribute in taskConfig.attributeTypes) {\n const type = taskConfig.attributeTypes[attribute];\n if (type.BYTES_PER_ELEMENT !== void 0) {\n taskConfig.attributeTypes[attribute] = type.name;\n }\n }\n const taskKey = JSON.stringify(taskConfig);\n if (_taskCache.has(buffer)) {\n const cachedTask = _taskCache.get(buffer);\n if (cachedTask.key === taskKey) {\n return cachedTask.promise;\n } else if (buffer.byteLength === 0) {\n throw new Error(\n \"THREE.DRACOLoader: Unable to re-decode a buffer with different settings. Buffer has already been transferred.\"\n );\n }\n }\n let worker;\n const taskID = this.workerNextTaskID++;\n const taskCost = buffer.byteLength;\n const geometryPending = this._getWorker(taskID, taskCost).then((_worker) => {\n worker = _worker;\n return new Promise((resolve, reject) => {\n worker._callbacks[taskID] = { resolve, reject };\n worker.postMessage({ type: \"decode\", id: taskID, taskConfig, buffer }, [buffer]);\n });\n }).then((message) => this._createGeometry(message.geometry));\n geometryPending.catch(() => true).then(() => {\n if (worker && taskID) {\n this._releaseTask(worker, taskID);\n }\n });\n _taskCache.set(buffer, {\n key: taskKey,\n promise: geometryPending\n });\n return geometryPending;\n }\n _createGeometry(geometryData) {\n const geometry = new BufferGeometry();\n if (geometryData.index) {\n geometry.setIndex(new BufferAttribute(geometryData.index.array, 1));\n }\n for (let i = 0; i < geometryData.attributes.length; i++) {\n const attribute = geometryData.attributes[i];\n const name = attribute.name;\n const array = attribute.array;\n const itemSize = attribute.itemSize;\n geometry.setAttribute(name, new BufferAttribute(array, itemSize));\n }\n return geometry;\n }\n _loadLibrary(url, responseType) {\n const loader = new FileLoader(this.manager);\n loader.setPath(this.decoderPath);\n loader.setResponseType(responseType);\n loader.setWithCredentials(this.withCredentials);\n return new Promise((resolve, reject) => {\n loader.load(url, resolve, void 0, reject);\n });\n }\n preload() {\n this._initDecoder();\n return this;\n }\n _initDecoder() {\n if (this.decoderPending)\n return this.decoderPending;\n const useJS = typeof WebAssembly !== \"object\" || this.decoderConfig.type === \"js\";\n const librariesPending = [];\n if (useJS) {\n librariesPending.push(this._loadLibrary(\"draco_decoder.js\", \"text\"));\n } else {\n librariesPending.push(this._loadLibrary(\"draco_wasm_wrapper.js\", \"text\"));\n librariesPending.push(this._loadLibrary(\"draco_decoder.wasm\", \"arraybuffer\"));\n }\n this.decoderPending = Promise.all(librariesPending).then((libraries) => {\n const jsContent = libraries[0];\n if (!useJS) {\n this.decoderConfig.wasmBinary = libraries[1];\n }\n const fn = DRACOWorker.toString();\n const body = [\n \"/* draco decoder */\",\n jsContent,\n \"\",\n \"/* worker */\",\n fn.substring(fn.indexOf(\"{\") + 1, fn.lastIndexOf(\"}\"))\n ].join(\"\\n\");\n this.workerSourceURL = URL.createObjectURL(new Blob([body]));\n });\n return this.decoderPending;\n }\n _getWorker(taskID, taskCost) {\n return this._initDecoder().then(() => {\n if (this.workerPool.length < this.workerLimit) {\n const worker2 = new Worker(this.workerSourceURL);\n worker2._callbacks = {};\n worker2._taskCosts = {};\n worker2._taskLoad = 0;\n worker2.postMessage({ type: \"init\", decoderConfig: this.decoderConfig });\n worker2.onmessage = function(e) {\n const message = e.data;\n switch (message.type) {\n case \"decode\":\n worker2._callbacks[message.id].resolve(message);\n break;\n case \"error\":\n worker2._callbacks[message.id].reject(message);\n break;\n default:\n console.error('THREE.DRACOLoader: Unexpected message, \"' + message.type + '\"');\n }\n };\n this.workerPool.push(worker2);\n } else {\n this.workerPool.sort(function(a, b) {\n return a._taskLoad > b._taskLoad ? -1 : 1;\n });\n }\n const worker = this.workerPool[this.workerPool.length - 1];\n worker._taskCosts[taskID] = taskCost;\n worker._taskLoad += taskCost;\n return worker;\n });\n }\n _releaseTask(worker, taskID) {\n worker._taskLoad -= worker._taskCosts[taskID];\n delete worker._callbacks[taskID];\n delete worker._taskCosts[taskID];\n }\n debug() {\n console.log(\n \"Task load: \",\n this.workerPool.map((worker) => worker._taskLoad)\n );\n }\n dispose() {\n for (let i = 0; i < this.workerPool.length; ++i) {\n this.workerPool[i].terminate();\n }\n this.workerPool.length = 0;\n return this;\n }\n}\nfunction DRACOWorker() {\n let decoderConfig;\n let decoderPending;\n onmessage = function(e) {\n const message = e.data;\n switch (message.type) {\n case \"init\":\n decoderConfig = message.decoderConfig;\n decoderPending = new Promise(function(resolve) {\n decoderConfig.onModuleLoaded = function(draco) {\n resolve({ draco });\n };\n DracoDecoderModule(decoderConfig);\n });\n break;\n case \"decode\":\n const buffer = message.buffer;\n const taskConfig = message.taskConfig;\n decoderPending.then((module) => {\n const draco = module.draco;\n const decoder = new draco.Decoder();\n const decoderBuffer = new draco.DecoderBuffer();\n decoderBuffer.Init(new Int8Array(buffer), buffer.byteLength);\n try {\n const geometry = decodeGeometry(draco, decoder, decoderBuffer, taskConfig);\n const buffers = geometry.attributes.map((attr) => attr.array.buffer);\n if (geometry.index)\n buffers.push(geometry.index.array.buffer);\n self.postMessage({ type: \"decode\", id: message.id, geometry }, buffers);\n } catch (error) {\n console.error(error);\n self.postMessage({ type: \"error\", id: message.id, error: error.message });\n } finally {\n draco.destroy(decoderBuffer);\n draco.destroy(decoder);\n }\n });\n break;\n }\n };\n function decodeGeometry(draco, decoder, decoderBuffer, taskConfig) {\n const attributeIDs = taskConfig.attributeIDs;\n const attributeTypes = taskConfig.attributeTypes;\n let dracoGeometry;\n let decodingStatus;\n const geometryType = decoder.GetEncodedGeometryType(decoderBuffer);\n if (geometryType === draco.TRIANGULAR_MESH) {\n dracoGeometry = new draco.Mesh();\n decodingStatus = decoder.DecodeBufferToMesh(decoderBuffer, dracoGeometry);\n } else if (geometryType === draco.POINT_CLOUD) {\n dracoGeometry = new draco.PointCloud();\n decodingStatus = decoder.DecodeBufferToPointCloud(decoderBuffer, dracoGeometry);\n } else {\n throw new Error(\"THREE.DRACOLoader: Unexpected geometry type.\");\n }\n if (!decodingStatus.ok() || dracoGeometry.ptr === 0) {\n throw new Error(\"THREE.DRACOLoader: Decoding failed: \" + decodingStatus.error_msg());\n }\n const geometry = { index: null, attributes: [] };\n for (const attributeName in attributeIDs) {\n const attributeType = self[attributeTypes[attributeName]];\n let attribute;\n let attributeID;\n if (taskConfig.useUniqueIDs) {\n attributeID = attributeIDs[attributeName];\n attribute = decoder.GetAttributeByUniqueId(dracoGeometry, attributeID);\n } else {\n attributeID = decoder.GetAttributeId(dracoGeometry, draco[attributeIDs[attributeName]]);\n if (attributeID === -1)\n continue;\n attribute = decoder.GetAttribute(dracoGeometry, attributeID);\n }\n geometry.attributes.push(decodeAttribute(draco, decoder, dracoGeometry, attributeName, attributeType, attribute));\n }\n if (geometryType === draco.TRIANGULAR_MESH) {\n geometry.index = decodeIndex(draco, decoder, dracoGeometry);\n }\n draco.destroy(dracoGeometry);\n return geometry;\n }\n function decodeIndex(draco, decoder, dracoGeometry) {\n const numFaces = dracoGeometry.num_faces();\n const numIndices = numFaces * 3;\n const byteLength = numIndices * 4;\n const ptr = draco._malloc(byteLength);\n decoder.GetTrianglesUInt32Array(dracoGeometry, byteLength, ptr);\n const index = new Uint32Array(draco.HEAPF32.buffer, ptr, numIndices).slice();\n draco._free(ptr);\n return { array: index, itemSize: 1 };\n }\n function decodeAttribute(draco, decoder, dracoGeometry, attributeName, attributeType, attribute) {\n const numComponents = attribute.num_components();\n const numPoints = dracoGeometry.num_points();\n const numValues = numPoints * numComponents;\n const byteLength = numValues * attributeType.BYTES_PER_ELEMENT;\n const dataType = getDracoDataType(draco, attributeType);\n const ptr = draco._malloc(byteLength);\n decoder.GetAttributeDataArrayForAllPoints(dracoGeometry, attribute, dataType, byteLength, ptr);\n const array = new attributeType(draco.HEAPF32.buffer, ptr, numValues).slice();\n draco._free(ptr);\n return {\n name: attributeName,\n array,\n itemSize: numComponents\n };\n }\n function getDracoDataType(draco, attributeType) {\n switch (attributeType) {\n case Float32Array:\n return draco.DT_FLOAT32;\n case Int8Array:\n return draco.DT_INT8;\n case Int16Array:\n return draco.DT_INT16;\n case Int32Array:\n return draco.DT_INT32;\n case Uint8Array:\n return draco.DT_UINT8;\n case Uint16Array:\n return draco.DT_UINT16;\n case Uint32Array:\n return draco.DT_UINT32;\n }\n }\n}\nexport {\n DRACOLoader\n};\n//# sourceMappingURL=DRACOLoader.js.map\n","import { Loader, HalfFloatType, CubeTexture, LinearFilter, FloatType, FileLoader, DataTexture } from \"three\";\nimport { RGBELoader } from \"./RGBELoader.js\";\nclass HDRCubeTextureLoader extends Loader {\n constructor(manager) {\n super(manager);\n this.hdrLoader = new RGBELoader();\n this.type = HalfFloatType;\n }\n load(urls, onLoad, onProgress, onError) {\n if (typeof urls === \"string\") {\n urls = [urls];\n } else if (!Array.isArray(urls)) {\n console.warn(\"THREE.HDRCubeTextureLoader signature has changed. Use .setDataType() instead.\");\n this.setDataType(urls);\n urls = onLoad;\n onLoad = onProgress;\n onProgress = onError;\n onError = arguments[4];\n }\n const texture = new CubeTexture();\n texture.type = this.type;\n switch (texture.type) {\n case FloatType:\n case HalfFloatType:\n if (\"colorSpace\" in texture)\n texture.colorSpace = \"srgb-linear\";\n else\n texture.encoding = 3e3;\n texture.minFilter = LinearFilter;\n texture.magFilter = LinearFilter;\n texture.generateMipmaps = false;\n break;\n }\n const scope = this;\n let loaded = 0;\n function loadHDRData(i, onLoad2, onProgress2, onError2) {\n new FileLoader(scope.manager).setPath(scope.path).setResponseType(\"arraybuffer\").setWithCredentials(scope.withCredentials).load(\n urls[i],\n function(buffer) {\n loaded++;\n const texData = scope.hdrLoader.parse(buffer);\n if (!texData)\n return;\n if (texData.data !== void 0) {\n const dataTexture = new DataTexture(texData.data, texData.width, texData.height);\n dataTexture.type = texture.type;\n if (\"colorSpace\" in dataTexture)\n dataTexture.colorSpace = texture.SRGBColorSpace;\n else\n dataTexture.encoding = texture.encoding;\n dataTexture.format = texture.format;\n dataTexture.minFilter = texture.minFilter;\n dataTexture.magFilter = texture.magFilter;\n dataTexture.generateMipmaps = texture.generateMipmaps;\n texture.images[i] = dataTexture;\n }\n if (loaded === 6) {\n texture.needsUpdate = true;\n if (onLoad2)\n onLoad2(texture);\n }\n },\n onProgress2,\n onError2\n );\n }\n for (let i = 0; i < urls.length; i++) {\n loadHDRData(i, onLoad, onProgress, onError);\n }\n return texture;\n }\n setDataType(value) {\n this.type = value;\n this.hdrLoader.setDataType(value);\n return this;\n }\n}\nexport {\n HDRCubeTextureLoader\n};\n//# sourceMappingURL=HDRCubeTextureLoader.js.map\n","import { Loader, FileLoader, BufferGeometry, Float32BufferAttribute } from \"three\";\nclass PDBLoader extends Loader {\n constructor(manager) {\n super(manager);\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const loader = new FileLoader(scope.manager);\n loader.setPath(scope.path);\n loader.setRequestHeader(scope.requestHeader);\n loader.setWithCredentials(scope.withCredentials);\n loader.load(\n url,\n function(text) {\n try {\n onLoad(scope.parse(text));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n // Based on CanvasMol PDB parser\n parse(text) {\n function trim(text2) {\n return text2.replace(/^\\s\\s*/, \"\").replace(/\\s\\s*$/, \"\");\n }\n function capitalize(text2) {\n return text2.charAt(0).toUpperCase() + text2.substr(1).toLowerCase();\n }\n function hash(s, e) {\n return \"s\" + Math.min(s, e) + \"e\" + Math.max(s, e);\n }\n function parseBond(start, length, satom, i) {\n const eatom = parseInt(lines[i].substr(start, length));\n if (eatom) {\n const h = hash(satom, eatom);\n if (_bhash[h] === void 0) {\n _bonds.push([satom - 1, eatom - 1, 1]);\n _bhash[h] = _bonds.length - 1;\n }\n }\n }\n function buildGeometry() {\n const build = {\n geometryAtoms: new BufferGeometry(),\n geometryBonds: new BufferGeometry(),\n json: {\n atoms\n }\n };\n const geometryAtoms = build.geometryAtoms;\n const geometryBonds = build.geometryBonds;\n const verticesAtoms = [];\n const colorsAtoms = [];\n const verticesBonds = [];\n for (let i = 0, l = atoms.length; i < l; i++) {\n const atom = atoms[i];\n const x = atom[0];\n const y = atom[1];\n const z = atom[2];\n verticesAtoms.push(x, y, z);\n const r = atom[3][0] / 255;\n const g = atom[3][1] / 255;\n const b = atom[3][2] / 255;\n colorsAtoms.push(r, g, b);\n }\n for (let i = 0, l = _bonds.length; i < l; i++) {\n const bond = _bonds[i];\n const start = bond[0];\n const end = bond[1];\n const startAtom = _atomMap[start];\n const endAtom = _atomMap[end];\n let x = startAtom[0];\n let y = startAtom[1];\n let z = startAtom[2];\n verticesBonds.push(x, y, z);\n x = endAtom[0];\n y = endAtom[1];\n z = endAtom[2];\n verticesBonds.push(x, y, z);\n }\n geometryAtoms.setAttribute(\"position\", new Float32BufferAttribute(verticesAtoms, 3));\n geometryAtoms.setAttribute(\"color\", new Float32BufferAttribute(colorsAtoms, 3));\n geometryBonds.setAttribute(\"position\", new Float32BufferAttribute(verticesBonds, 3));\n return build;\n }\n const CPK = {\n h: [255, 255, 255],\n he: [217, 255, 255],\n li: [204, 128, 255],\n be: [194, 255, 0],\n b: [255, 181, 181],\n c: [144, 144, 144],\n n: [48, 80, 248],\n o: [255, 13, 13],\n f: [144, 224, 80],\n ne: [179, 227, 245],\n na: [171, 92, 242],\n mg: [138, 255, 0],\n al: [191, 166, 166],\n si: [240, 200, 160],\n p: [255, 128, 0],\n s: [255, 255, 48],\n cl: [31, 240, 31],\n ar: [128, 209, 227],\n k: [143, 64, 212],\n ca: [61, 255, 0],\n sc: [230, 230, 230],\n ti: [191, 194, 199],\n v: [166, 166, 171],\n cr: [138, 153, 199],\n mn: [156, 122, 199],\n fe: [224, 102, 51],\n co: [240, 144, 160],\n ni: [80, 208, 80],\n cu: [200, 128, 51],\n zn: [125, 128, 176],\n ga: [194, 143, 143],\n ge: [102, 143, 143],\n as: [189, 128, 227],\n se: [255, 161, 0],\n br: [166, 41, 41],\n kr: [92, 184, 209],\n rb: [112, 46, 176],\n sr: [0, 255, 0],\n y: [148, 255, 255],\n zr: [148, 224, 224],\n nb: [115, 194, 201],\n mo: [84, 181, 181],\n tc: [59, 158, 158],\n ru: [36, 143, 143],\n rh: [10, 125, 140],\n pd: [0, 105, 133],\n ag: [192, 192, 192],\n cd: [255, 217, 143],\n in: [166, 117, 115],\n sn: [102, 128, 128],\n sb: [158, 99, 181],\n te: [212, 122, 0],\n i: [148, 0, 148],\n xe: [66, 158, 176],\n cs: [87, 23, 143],\n ba: [0, 201, 0],\n la: [112, 212, 255],\n ce: [255, 255, 199],\n pr: [217, 255, 199],\n nd: [199, 255, 199],\n pm: [163, 255, 199],\n sm: [143, 255, 199],\n eu: [97, 255, 199],\n gd: [69, 255, 199],\n tb: [48, 255, 199],\n dy: [31, 255, 199],\n ho: [0, 255, 156],\n er: [0, 230, 117],\n tm: [0, 212, 82],\n yb: [0, 191, 56],\n lu: [0, 171, 36],\n hf: [77, 194, 255],\n ta: [77, 166, 255],\n w: [33, 148, 214],\n re: [38, 125, 171],\n os: [38, 102, 150],\n ir: [23, 84, 135],\n pt: [208, 208, 224],\n au: [255, 209, 35],\n hg: [184, 184, 208],\n tl: [166, 84, 77],\n pb: [87, 89, 97],\n bi: [158, 79, 181],\n po: [171, 92, 0],\n at: [117, 79, 69],\n rn: [66, 130, 150],\n fr: [66, 0, 102],\n ra: [0, 125, 0],\n ac: [112, 171, 250],\n th: [0, 186, 255],\n pa: [0, 161, 255],\n u: [0, 143, 255],\n np: [0, 128, 255],\n pu: [0, 107, 255],\n am: [84, 92, 242],\n cm: [120, 92, 227],\n bk: [138, 79, 227],\n cf: [161, 54, 212],\n es: [179, 31, 212],\n fm: [179, 31, 186],\n md: [179, 13, 166],\n no: [189, 13, 135],\n lr: [199, 0, 102],\n rf: [204, 0, 89],\n db: [209, 0, 79],\n sg: [217, 0, 69],\n bh: [224, 0, 56],\n hs: [230, 0, 46],\n mt: [235, 0, 38],\n ds: [235, 0, 38],\n rg: [235, 0, 38],\n cn: [235, 0, 38],\n uut: [235, 0, 38],\n uuq: [235, 0, 38],\n uup: [235, 0, 38],\n uuh: [235, 0, 38],\n uus: [235, 0, 38],\n uuo: [235, 0, 38]\n };\n const atoms = [];\n const _bonds = [];\n const _bhash = {};\n const _atomMap = {};\n const lines = text.split(\"\\n\");\n for (let i = 0, l = lines.length; i < l; i++) {\n if (lines[i].substr(0, 4) === \"ATOM\" || lines[i].substr(0, 6) === \"HETATM\") {\n const x = parseFloat(lines[i].substr(30, 7));\n const y = parseFloat(lines[i].substr(38, 7));\n const z = parseFloat(lines[i].substr(46, 7));\n const index = parseInt(lines[i].substr(6, 5)) - 1;\n let e = trim(lines[i].substr(76, 2)).toLowerCase();\n if (e === \"\") {\n e = trim(lines[i].substr(12, 2)).toLowerCase();\n }\n const atomData = [x, y, z, CPK[e], capitalize(e)];\n atoms.push(atomData);\n _atomMap[index] = atomData;\n } else if (lines[i].substr(0, 6) === \"CONECT\") {\n const satom = parseInt(lines[i].substr(6, 5));\n parseBond(11, 5, satom, i);\n parseBond(16, 5, satom, i);\n parseBond(21, 5, satom, i);\n parseBond(26, 5, satom, i);\n }\n }\n return buildGeometry();\n }\n}\nexport {\n PDBLoader\n};\n//# sourceMappingURL=PDBLoader.js.map\n","import { Loader, FileLoader, BufferGeometry, BufferAttribute } from \"three\";\nlet bigEndianPlatform = null;\nfunction isBigEndianPlatform() {\n if (bigEndianPlatform === null) {\n const buffer = new ArrayBuffer(2), uint8Array = new Uint8Array(buffer), uint16Array = new Uint16Array(buffer);\n uint8Array[0] = 170;\n uint8Array[1] = 187;\n bigEndianPlatform = uint16Array[0] === 43707;\n }\n return bigEndianPlatform;\n}\nconst InvertedEncodingTypes = [\n null,\n Float32Array,\n null,\n Int8Array,\n Int16Array,\n null,\n Int32Array,\n Uint8Array,\n Uint16Array,\n null,\n Uint32Array\n];\nconst getMethods = {\n Uint16Array: \"getUint16\",\n Uint32Array: \"getUint32\",\n Int16Array: \"getInt16\",\n Int32Array: \"getInt32\",\n Float32Array: \"getFloat32\",\n Float64Array: \"getFloat64\"\n};\nfunction copyFromBuffer(sourceArrayBuffer, viewType, position, length, fromBigEndian) {\n const bytesPerElement = viewType.BYTES_PER_ELEMENT;\n let result;\n if (fromBigEndian === isBigEndianPlatform() || bytesPerElement === 1) {\n result = new viewType(sourceArrayBuffer, position, length);\n } else {\n const readView = new DataView(sourceArrayBuffer, position, length * bytesPerElement), getMethod = getMethods[viewType.name], littleEndian = !fromBigEndian;\n result = new viewType(length);\n for (let i = 0; i < length; i++) {\n result[i] = readView[getMethod](i * bytesPerElement, littleEndian);\n }\n }\n return result;\n}\nfunction decodePrwm(buffer) {\n const array = new Uint8Array(buffer), version = array[0];\n let flags = array[1];\n const indexedGeometry = !!(flags >> 7 & 1), indicesType = flags >> 6 & 1, bigEndian = (flags >> 5 & 1) === 1, attributesNumber = flags & 31;\n let valuesNumber = 0, indicesNumber = 0;\n if (bigEndian) {\n valuesNumber = (array[2] << 16) + (array[3] << 8) + array[4];\n indicesNumber = (array[5] << 16) + (array[6] << 8) + array[7];\n } else {\n valuesNumber = array[2] + (array[3] << 8) + (array[4] << 16);\n indicesNumber = array[5] + (array[6] << 8) + (array[7] << 16);\n }\n if (version === 0) {\n throw new Error(\"PRWM decoder: Invalid format version: 0\");\n } else if (version !== 1) {\n throw new Error(\"PRWM decoder: Unsupported format version: \" + version);\n }\n if (!indexedGeometry) {\n if (indicesType !== 0) {\n throw new Error(\"PRWM decoder: Indices type must be set to 0 for non-indexed geometries\");\n } else if (indicesNumber !== 0) {\n throw new Error(\"PRWM decoder: Number of indices must be set to 0 for non-indexed geometries\");\n }\n }\n let pos = 8;\n const attributes = {};\n for (let i = 0; i < attributesNumber; i++) {\n let attributeName = \"\";\n while (pos < array.length) {\n const char = array[pos];\n pos++;\n if (char === 0) {\n break;\n } else {\n attributeName += String.fromCharCode(char);\n }\n }\n flags = array[pos];\n const attributeType = flags >> 7 & 1;\n const cardinality = (flags >> 4 & 3) + 1;\n const encodingType = flags & 15;\n const arrayType = InvertedEncodingTypes[encodingType];\n pos++;\n pos = Math.ceil(pos / 4) * 4;\n const values = copyFromBuffer(buffer, arrayType, pos, cardinality * valuesNumber, bigEndian);\n pos += arrayType.BYTES_PER_ELEMENT * cardinality * valuesNumber;\n attributes[attributeName] = {\n type: attributeType,\n cardinality,\n values\n };\n }\n pos = Math.ceil(pos / 4) * 4;\n let indices = null;\n if (indexedGeometry) {\n indices = copyFromBuffer(buffer, indicesType === 1 ? Uint32Array : Uint16Array, pos, indicesNumber, bigEndian);\n }\n return {\n version,\n attributes,\n indices\n };\n}\nconst PRWMLoader = /* @__PURE__ */ (() => {\n class PRWMLoader2 extends Loader {\n constructor(manager) {\n super(manager);\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const loader = new FileLoader(scope.manager);\n loader.setPath(scope.path);\n loader.setResponseType(\"arraybuffer\");\n loader.setRequestHeader(scope.requestHeader);\n loader.setWithCredentials(scope.withCredentials);\n url = url.replace(/\\*/g, isBigEndianPlatform() ? \"be\" : \"le\");\n loader.load(\n url,\n function(arrayBuffer) {\n try {\n onLoad(scope.parse(arrayBuffer));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(arrayBuffer) {\n const data = decodePrwm(arrayBuffer), attributesKey = Object.keys(data.attributes), bufferGeometry = new BufferGeometry();\n for (let i = 0; i < attributesKey.length; i++) {\n const attribute = data.attributes[attributesKey[i]];\n bufferGeometry.setAttribute(\n attributesKey[i],\n new BufferAttribute(attribute.values, attribute.cardinality, attribute.normalized)\n );\n }\n if (data.indices !== null) {\n bufferGeometry.setIndex(new BufferAttribute(data.indices, 1));\n }\n return bufferGeometry;\n }\n static isBigEndianPlatform() {\n return isBigEndianPlatform();\n }\n }\n return PRWMLoader2;\n})();\nexport {\n PRWMLoader\n};\n//# sourceMappingURL=PRWMLoader.js.map\n","import { DataTextureLoader, HalfFloatType, CubeTexture, RGBAFormat, LinearFilter, DataUtils } from \"three\";\nlet UPNG;\nfunction init() {\n if (UPNG)\n return UPNG;\n UPNG = {};\n UPNG.toRGBA8 = function(out) {\n var w = out.width, h = out.height;\n if (out.tabs.acTL == null)\n return [UPNG.toRGBA8.decodeImage(out.data, w, h, out).buffer];\n var frms = [];\n if (out.frames[0].data == null)\n out.frames[0].data = out.data;\n var len = w * h * 4, img = new Uint8Array(len), empty = new Uint8Array(len), prev = new Uint8Array(len);\n for (var i = 0; i < out.frames.length; i++) {\n var frm = out.frames[i];\n var fx = frm.rect.x, fy = frm.rect.y, fw = frm.rect.width, fh = frm.rect.height;\n var fdata = UPNG.toRGBA8.decodeImage(frm.data, fw, fh, out);\n if (i != 0)\n for (var j = 0; j < len; j++)\n prev[j] = img[j];\n if (frm.blend == 0)\n UPNG._copyTile(fdata, fw, fh, img, w, h, fx, fy, 0);\n else if (frm.blend == 1)\n UPNG._copyTile(fdata, fw, fh, img, w, h, fx, fy, 1);\n frms.push(img.buffer.slice(0));\n if (frm.dispose == 1)\n UPNG._copyTile(empty, fw, fh, img, w, h, fx, fy, 0);\n else if (frm.dispose == 2)\n for (var j = 0; j < len; j++)\n img[j] = prev[j];\n }\n return frms;\n };\n UPNG.toRGBA8.decodeImage = function(data, w, h, out) {\n var area = w * h, bpp = UPNG.decode._getBPP(out);\n var bpl = Math.ceil(w * bpp / 8);\n var bf = new Uint8Array(area * 4), bf32 = new Uint32Array(bf.buffer);\n var ctype = out.ctype, depth = out.depth;\n var rs = UPNG._bin.readUshort;\n if (ctype == 6) {\n var qarea = area << 2;\n if (depth == 8) {\n for (var i = 0; i < qarea; i += 4) {\n bf[i] = data[i];\n bf[i + 1] = data[i + 1];\n bf[i + 2] = data[i + 2];\n bf[i + 3] = data[i + 3];\n }\n }\n if (depth == 16) {\n for (var i = 0; i < qarea; i++) {\n bf[i] = data[i << 1];\n }\n }\n } else if (ctype == 2) {\n var ts = out.tabs[\"tRNS\"];\n if (ts == null) {\n if (depth == 8) {\n for (var i = 0; i < area; i++) {\n var ti = i * 3;\n bf32[i] = 255 << 24 | data[ti + 2] << 16 | data[ti + 1] << 8 | data[ti];\n }\n }\n if (depth == 16) {\n for (var i = 0; i < area; i++) {\n var ti = i * 6;\n bf32[i] = 255 << 24 | data[ti + 4] << 16 | data[ti + 2] << 8 | data[ti];\n }\n }\n } else {\n var tr = ts[0], tg = ts[1], tb = ts[2];\n if (depth == 8) {\n for (var i = 0; i < area; i++) {\n var qi = i << 2, ti = i * 3;\n bf32[i] = 255 << 24 | data[ti + 2] << 16 | data[ti + 1] << 8 | data[ti];\n if (data[ti] == tr && data[ti + 1] == tg && data[ti + 2] == tb)\n bf[qi + 3] = 0;\n }\n }\n if (depth == 16) {\n for (var i = 0; i < area; i++) {\n var qi = i << 2, ti = i * 6;\n bf32[i] = 255 << 24 | data[ti + 4] << 16 | data[ti + 2] << 8 | data[ti];\n if (rs(data, ti) == tr && rs(data, ti + 2) == tg && rs(data, ti + 4) == tb)\n bf[qi + 3] = 0;\n }\n }\n }\n } else if (ctype == 3) {\n var p = out.tabs[\"PLTE\"], ap = out.tabs[\"tRNS\"], tl = ap ? ap.length : 0;\n if (depth == 1) {\n for (var y = 0; y < h; y++) {\n var s0 = y * bpl, t0 = y * w;\n for (var i = 0; i < w; i++) {\n var qi = t0 + i << 2, j = data[s0 + (i >> 3)] >> 7 - ((i & 7) << 0) & 1, cj = 3 * j;\n bf[qi] = p[cj];\n bf[qi + 1] = p[cj + 1];\n bf[qi + 2] = p[cj + 2];\n bf[qi + 3] = j < tl ? ap[j] : 255;\n }\n }\n }\n if (depth == 2) {\n for (var y = 0; y < h; y++) {\n var s0 = y * bpl, t0 = y * w;\n for (var i = 0; i < w; i++) {\n var qi = t0 + i << 2, j = data[s0 + (i >> 2)] >> 6 - ((i & 3) << 1) & 3, cj = 3 * j;\n bf[qi] = p[cj];\n bf[qi + 1] = p[cj + 1];\n bf[qi + 2] = p[cj + 2];\n bf[qi + 3] = j < tl ? ap[j] : 255;\n }\n }\n }\n if (depth == 4) {\n for (var y = 0; y < h; y++) {\n var s0 = y * bpl, t0 = y * w;\n for (var i = 0; i < w; i++) {\n var qi = t0 + i << 2, j = data[s0 + (i >> 1)] >> 4 - ((i & 1) << 2) & 15, cj = 3 * j;\n bf[qi] = p[cj];\n bf[qi + 1] = p[cj + 1];\n bf[qi + 2] = p[cj + 2];\n bf[qi + 3] = j < tl ? ap[j] : 255;\n }\n }\n }\n if (depth == 8) {\n for (var i = 0; i < area; i++) {\n var qi = i << 2, j = data[i], cj = 3 * j;\n bf[qi] = p[cj];\n bf[qi + 1] = p[cj + 1];\n bf[qi + 2] = p[cj + 2];\n bf[qi + 3] = j < tl ? ap[j] : 255;\n }\n }\n } else if (ctype == 4) {\n if (depth == 8) {\n for (var i = 0; i < area; i++) {\n var qi = i << 2, di = i << 1, gr = data[di];\n bf[qi] = gr;\n bf[qi + 1] = gr;\n bf[qi + 2] = gr;\n bf[qi + 3] = data[di + 1];\n }\n }\n if (depth == 16) {\n for (var i = 0; i < area; i++) {\n var qi = i << 2, di = i << 2, gr = data[di];\n bf[qi] = gr;\n bf[qi + 1] = gr;\n bf[qi + 2] = gr;\n bf[qi + 3] = data[di + 2];\n }\n }\n } else if (ctype == 0) {\n var tr = out.tabs[\"tRNS\"] ? out.tabs[\"tRNS\"] : -1;\n for (var y = 0; y < h; y++) {\n var off = y * bpl, to = y * w;\n if (depth == 1) {\n for (var x = 0; x < w; x++) {\n var gr = 255 * (data[off + (x >>> 3)] >>> 7 - (x & 7) & 1), al = gr == tr * 255 ? 0 : 255;\n bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;\n }\n } else if (depth == 2) {\n for (var x = 0; x < w; x++) {\n var gr = 85 * (data[off + (x >>> 2)] >>> 6 - ((x & 3) << 1) & 3), al = gr == tr * 85 ? 0 : 255;\n bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;\n }\n } else if (depth == 4) {\n for (var x = 0; x < w; x++) {\n var gr = 17 * (data[off + (x >>> 1)] >>> 4 - ((x & 1) << 2) & 15), al = gr == tr * 17 ? 0 : 255;\n bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;\n }\n } else if (depth == 8) {\n for (var x = 0; x < w; x++) {\n var gr = data[off + x], al = gr == tr ? 0 : 255;\n bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;\n }\n } else if (depth == 16) {\n for (var x = 0; x < w; x++) {\n var gr = data[off + (x << 1)], al = rs(data, off + (x << 1)) == tr ? 0 : 255;\n bf32[to + x] = al << 24 | gr << 16 | gr << 8 | gr;\n }\n }\n }\n }\n return bf;\n };\n UPNG.decode = function(buff) {\n var data = new Uint8Array(buff), offset = 8, bin = UPNG._bin, rUs = bin.readUshort, rUi = bin.readUint;\n var out = { tabs: {}, frames: [] };\n var dd = new Uint8Array(data.length), doff = 0;\n var fd, foff = 0;\n var text, keyw, bfr;\n var mgck = [137, 80, 78, 71, 13, 10, 26, 10];\n for (var i = 0; i < 8; i++)\n if (data[i] != mgck[i])\n throw new Error(\"The input is not a PNG file!\");\n while (offset < data.length) {\n var len = bin.readUint(data, offset);\n offset += 4;\n var type = bin.readASCII(data, offset, 4);\n offset += 4;\n if (type == \"IHDR\") {\n UPNG.decode._IHDR(data, offset, out);\n } else if (type == \"CgBI\") {\n out.tabs[type] = data.slice(offset, offset + 4);\n } else if (type == \"IDAT\") {\n for (var i = 0; i < len; i++)\n dd[doff + i] = data[offset + i];\n doff += len;\n } else if (type == \"acTL\") {\n out.tabs[type] = { num_frames: rUi(data, offset), num_plays: rUi(data, offset + 4) };\n fd = new Uint8Array(data.length);\n } else if (type == \"fcTL\") {\n if (foff != 0) {\n var fr = out.frames[out.frames.length - 1];\n fr.data = UPNG.decode._decompress(out, fd.slice(0, foff), fr.rect.width, fr.rect.height);\n foff = 0;\n }\n var rct = {\n x: rUi(data, offset + 12),\n y: rUi(data, offset + 16),\n width: rUi(data, offset + 4),\n height: rUi(data, offset + 8)\n };\n var del = rUs(data, offset + 22);\n del = rUs(data, offset + 20) / (del == 0 ? 100 : del);\n var frm = { rect: rct, delay: Math.round(del * 1e3), dispose: data[offset + 24], blend: data[offset + 25] };\n out.frames.push(frm);\n } else if (type == \"fdAT\") {\n for (var i = 0; i < len - 4; i++)\n fd[foff + i] = data[offset + i + 4];\n foff += len - 4;\n } else if (type == \"pHYs\") {\n out.tabs[type] = [bin.readUint(data, offset), bin.readUint(data, offset + 4), data[offset + 8]];\n } else if (type == \"cHRM\") {\n out.tabs[type] = [];\n for (var i = 0; i < 8; i++)\n out.tabs[type].push(bin.readUint(data, offset + i * 4));\n } else if (type == \"tEXt\" || type == \"zTXt\") {\n if (out.tabs[type] == null)\n out.tabs[type] = {};\n var nz = bin.nextZero(data, offset);\n keyw = bin.readASCII(data, offset, nz - offset);\n var tl = offset + len - nz - 1;\n if (type == \"tEXt\") {\n text = bin.readASCII(data, nz + 1, tl);\n } else {\n bfr = UPNG.decode._inflate(data.slice(nz + 2, nz + 2 + tl));\n text = bin.readUTF8(bfr, 0, bfr.length);\n }\n out.tabs[type][keyw] = text;\n } else if (type == \"iTXt\") {\n if (out.tabs[type] == null)\n out.tabs[type] = {};\n var nz = 0, off = offset;\n nz = bin.nextZero(data, off);\n keyw = bin.readASCII(data, off, nz - off);\n off = nz + 1;\n var cflag = data[off];\n off += 2;\n nz = bin.nextZero(data, off);\n bin.readASCII(data, off, nz - off);\n off = nz + 1;\n nz = bin.nextZero(data, off);\n bin.readUTF8(data, off, nz - off);\n off = nz + 1;\n var tl = len - (off - offset);\n if (cflag == 0) {\n text = bin.readUTF8(data, off, tl);\n } else {\n bfr = UPNG.decode._inflate(data.slice(off, off + tl));\n text = bin.readUTF8(bfr, 0, bfr.length);\n }\n out.tabs[type][keyw] = text;\n } else if (type == \"PLTE\") {\n out.tabs[type] = bin.readBytes(data, offset, len);\n } else if (type == \"hIST\") {\n var pl = out.tabs[\"PLTE\"].length / 3;\n out.tabs[type] = [];\n for (var i = 0; i < pl; i++)\n out.tabs[type].push(rUs(data, offset + i * 2));\n } else if (type == \"tRNS\") {\n if (out.ctype == 3)\n out.tabs[type] = bin.readBytes(data, offset, len);\n else if (out.ctype == 0)\n out.tabs[type] = rUs(data, offset);\n else if (out.ctype == 2)\n out.tabs[type] = [rUs(data, offset), rUs(data, offset + 2), rUs(data, offset + 4)];\n } else if (type == \"gAMA\") {\n out.tabs[type] = bin.readUint(data, offset) / 1e5;\n } else if (type == \"sRGB\") {\n out.tabs[type] = data[offset];\n } else if (type == \"bKGD\") {\n if (out.ctype == 0 || out.ctype == 4) {\n out.tabs[type] = [rUs(data, offset)];\n } else if (out.ctype == 2 || out.ctype == 6) {\n out.tabs[type] = [rUs(data, offset), rUs(data, offset + 2), rUs(data, offset + 4)];\n } else if (out.ctype == 3) {\n out.tabs[type] = data[offset];\n }\n } else if (type == \"IEND\") {\n break;\n }\n offset += len;\n bin.readUint(data, offset);\n offset += 4;\n }\n if (foff != 0) {\n var fr = out.frames[out.frames.length - 1];\n fr.data = UPNG.decode._decompress(out, fd.slice(0, foff), fr.rect.width, fr.rect.height);\n }\n out.data = UPNG.decode._decompress(out, dd, out.width, out.height);\n delete out.compress;\n delete out.interlace;\n delete out.filter;\n return out;\n };\n UPNG.decode._decompress = function(out, dd, w, h) {\n var bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w * bpp / 8), buff = new Uint8Array((bpl + 1 + out.interlace) * h);\n if (out.tabs[\"CgBI\"])\n dd = UPNG.inflateRaw(dd, buff);\n else\n dd = UPNG.decode._inflate(dd, buff);\n if (out.interlace == 0)\n dd = UPNG.decode._filterZero(dd, out, 0, w, h);\n else if (out.interlace == 1)\n dd = UPNG.decode._readInterlace(dd, out);\n return dd;\n };\n UPNG.decode._inflate = function(data, buff) {\n var out = UPNG[\"inflateRaw\"](new Uint8Array(data.buffer, 2, data.length - 6), buff);\n return out;\n };\n UPNG.inflateRaw = function() {\n var H = {};\n H.H = {};\n H.H.N = function(N, W) {\n var R = Uint8Array, i = 0, m = 0, J = 0, h = 0, Q = 0, X = 0, u = 0, w = 0, d = 0, v, C;\n if (N[0] == 3 && N[1] == 0)\n return W ? W : new R(0);\n var V = H.H, n = V.b, A = V.e, l = V.R, M = V.n, I = V.A, e = V.Z, b = V.m, Z = W == null;\n if (Z)\n W = new R(N.length >>> 2 << 5);\n while (i == 0) {\n i = n(N, d, 1);\n m = n(N, d + 1, 2);\n d += 3;\n if (m == 0) {\n if ((d & 7) != 0)\n d += 8 - (d & 7);\n var D = (d >>> 3) + 4, q = N[D - 4] | N[D - 3] << 8;\n if (Z)\n W = H.H.W(W, w + q);\n W.set(new R(N.buffer, N.byteOffset + D, q), w);\n d = D + q << 3;\n w += q;\n continue;\n }\n if (Z)\n W = H.H.W(W, w + (1 << 17));\n if (m == 1) {\n v = b.J;\n C = b.h;\n X = (1 << 9) - 1;\n u = (1 << 5) - 1;\n }\n if (m == 2) {\n J = A(N, d, 5) + 257;\n h = A(N, d + 5, 5) + 1;\n Q = A(N, d + 10, 4) + 4;\n d += 14;\n var j = 1;\n for (var c = 0; c < 38; c += 2) {\n b.Q[c] = 0;\n b.Q[c + 1] = 0;\n }\n for (var c = 0; c < Q; c++) {\n var K = A(N, d + c * 3, 3);\n b.Q[(b.X[c] << 1) + 1] = K;\n if (K > j)\n j = K;\n }\n d += 3 * Q;\n M(b.Q, j);\n I(b.Q, j, b.u);\n v = b.w;\n C = b.d;\n d = l(b.u, (1 << j) - 1, J + h, N, d, b.v);\n var r = V.V(b.v, 0, J, b.C);\n X = (1 << r) - 1;\n var S = V.V(b.v, J, h, b.D);\n u = (1 << S) - 1;\n M(b.C, r);\n I(b.C, r, v);\n M(b.D, S);\n I(b.D, S, C);\n }\n while (true) {\n var T = v[e(N, d) & X];\n d += T & 15;\n var p = T >>> 4;\n if (p >>> 8 == 0) {\n W[w++] = p;\n } else if (p == 256) {\n break;\n } else {\n var z = w + p - 254;\n if (p > 264) {\n var _ = b.q[p - 257];\n z = w + (_ >>> 3) + A(N, d, _ & 7);\n d += _ & 7;\n }\n var $ = C[e(N, d) & u];\n d += $ & 15;\n var s = $ >>> 4, Y = b.c[s], a = (Y >>> 4) + n(N, d, Y & 15);\n d += Y & 15;\n while (w < z) {\n W[w] = W[w++ - a];\n W[w] = W[w++ - a];\n W[w] = W[w++ - a];\n W[w] = W[w++ - a];\n }\n w = z;\n }\n }\n }\n return W.length == w ? W : W.slice(0, w);\n };\n H.H.W = function(N, W) {\n var R = N.length;\n if (W <= R)\n return N;\n var V = new Uint8Array(R << 1);\n V.set(N, 0);\n return V;\n };\n H.H.R = function(N, W, R, V, n, A) {\n var l = H.H.e, M = H.H.Z, I = 0;\n while (I < R) {\n var e = N[M(V, n) & W];\n n += e & 15;\n var b = e >>> 4;\n if (b <= 15) {\n A[I] = b;\n I++;\n } else {\n var Z = 0, m = 0;\n if (b == 16) {\n m = 3 + l(V, n, 2);\n n += 2;\n Z = A[I - 1];\n } else if (b == 17) {\n m = 3 + l(V, n, 3);\n n += 3;\n } else if (b == 18) {\n m = 11 + l(V, n, 7);\n n += 7;\n }\n var J = I + m;\n while (I < J) {\n A[I] = Z;\n I++;\n }\n }\n }\n return n;\n };\n H.H.V = function(N, W, R, V) {\n var n = 0, A = 0, l = V.length >>> 1;\n while (A < R) {\n var M = N[A + W];\n V[A << 1] = 0;\n V[(A << 1) + 1] = M;\n if (M > n)\n n = M;\n A++;\n }\n while (A < l) {\n V[A << 1] = 0;\n V[(A << 1) + 1] = 0;\n A++;\n }\n return n;\n };\n H.H.n = function(N, W) {\n var R = H.H.m, V = N.length, n, A, l, M, I, e = R.j;\n for (var M = 0; M <= W; M++)\n e[M] = 0;\n for (M = 1; M < V; M += 2)\n e[N[M]]++;\n var b = R.K;\n n = 0;\n e[0] = 0;\n for (A = 1; A <= W; A++) {\n n = n + e[A - 1] << 1;\n b[A] = n;\n }\n for (l = 0; l < V; l += 2) {\n I = N[l + 1];\n if (I != 0) {\n N[l] = b[I];\n b[I]++;\n }\n }\n };\n H.H.A = function(N, W, R) {\n var V = N.length, n = H.H.m, A = n.r;\n for (var l = 0; l < V; l += 2) {\n if (N[l + 1] != 0) {\n var M = l >> 1, I = N[l + 1], e = M << 4 | I, b = W - I, Z = N[l] << b, m = Z + (1 << b);\n while (Z != m) {\n var J = A[Z] >>> 15 - W;\n R[J] = e;\n Z++;\n }\n }\n }\n };\n H.H.l = function(N, W) {\n var R = H.H.m.r, V = 15 - W;\n for (var n = 0; n < N.length; n += 2) {\n var A = N[n] << W - N[n + 1];\n N[n] = R[A] >>> V;\n }\n };\n H.H.M = function(N, W, R) {\n R = R << (W & 7);\n var V = W >>> 3;\n N[V] |= R;\n N[V + 1] |= R >>> 8;\n };\n H.H.I = function(N, W, R) {\n R = R << (W & 7);\n var V = W >>> 3;\n N[V] |= R;\n N[V + 1] |= R >>> 8;\n N[V + 2] |= R >>> 16;\n };\n H.H.e = function(N, W, R) {\n return (N[W >>> 3] | N[(W >>> 3) + 1] << 8) >>> (W & 7) & (1 << R) - 1;\n };\n H.H.b = function(N, W, R) {\n return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16) >>> (W & 7) & (1 << R) - 1;\n };\n H.H.Z = function(N, W) {\n return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16) >>> (W & 7);\n };\n H.H.i = function(N, W) {\n return (N[W >>> 3] | N[(W >>> 3) + 1] << 8 | N[(W >>> 3) + 2] << 16 | N[(W >>> 3) + 3] << 24) >>> (W & 7);\n };\n H.H.m = function() {\n var N = Uint16Array, W = Uint32Array;\n return {\n K: new N(16),\n j: new N(16),\n X: [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15],\n S: [\n 3,\n 4,\n 5,\n 6,\n 7,\n 8,\n 9,\n 10,\n 11,\n 13,\n 15,\n 17,\n 19,\n 23,\n 27,\n 31,\n 35,\n 43,\n 51,\n 59,\n 67,\n 83,\n 99,\n 115,\n 131,\n 163,\n 195,\n 227,\n 258,\n 999,\n 999,\n 999\n ],\n T: [0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, 0, 0, 0],\n q: new N(32),\n p: [\n 1,\n 2,\n 3,\n 4,\n 5,\n 7,\n 9,\n 13,\n 17,\n 25,\n 33,\n 49,\n 65,\n 97,\n 129,\n 193,\n 257,\n 385,\n 513,\n 769,\n 1025,\n 1537,\n 2049,\n 3073,\n 4097,\n 6145,\n 8193,\n 12289,\n 16385,\n 24577,\n 65535,\n 65535\n ],\n z: [0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, 0, 0],\n c: new W(32),\n J: new N(512),\n _: [],\n h: new N(32),\n $: [],\n w: new N(32768),\n C: [],\n v: [],\n d: new N(32768),\n D: [],\n u: new N(512),\n Q: [],\n r: new N(1 << 15),\n s: new W(286),\n Y: new W(30),\n a: new W(19),\n t: new W(15e3),\n k: new N(1 << 16),\n g: new N(1 << 15)\n };\n }();\n (function() {\n var N = H.H.m, W = 1 << 15;\n for (var R = 0; R < W; R++) {\n var V = R;\n V = (V & 2863311530) >>> 1 | (V & 1431655765) << 1;\n V = (V & 3435973836) >>> 2 | (V & 858993459) << 2;\n V = (V & 4042322160) >>> 4 | (V & 252645135) << 4;\n V = (V & 4278255360) >>> 8 | (V & 16711935) << 8;\n N.r[R] = (V >>> 16 | V << 16) >>> 17;\n }\n function n(A, l, M) {\n while (l-- != 0)\n A.push(0, M);\n }\n for (var R = 0; R < 32; R++) {\n N.q[R] = N.S[R] << 3 | N.T[R];\n N.c[R] = N.p[R] << 4 | N.z[R];\n }\n n(N._, 144, 8);\n n(N._, 255 - 143, 9);\n n(N._, 279 - 255, 7);\n n(N._, 287 - 279, 8);\n H.H.n(N._, 9);\n H.H.A(N._, 9, N.J);\n H.H.l(N._, 9);\n n(N.$, 32, 5);\n H.H.n(N.$, 5);\n H.H.A(N.$, 5, N.h);\n H.H.l(N.$, 5);\n n(N.Q, 19, 0);\n n(N.C, 286, 0);\n n(N.D, 30, 0);\n n(N.v, 320, 0);\n })();\n return H.H.N;\n }();\n UPNG.decode._readInterlace = function(data, out) {\n var w = out.width, h = out.height;\n var bpp = UPNG.decode._getBPP(out), cbpp = bpp >> 3, bpl = Math.ceil(w * bpp / 8);\n var img = new Uint8Array(h * bpl);\n var di = 0;\n var starting_row = [0, 0, 4, 0, 2, 0, 1];\n var starting_col = [0, 4, 0, 2, 0, 1, 0];\n var row_increment = [8, 8, 8, 4, 4, 2, 2];\n var col_increment = [8, 8, 4, 4, 2, 2, 1];\n var pass = 0;\n while (pass < 7) {\n var ri = row_increment[pass], ci = col_increment[pass];\n var sw = 0, sh = 0;\n var cr = starting_row[pass];\n while (cr < h) {\n cr += ri;\n sh++;\n }\n var cc = starting_col[pass];\n while (cc < w) {\n cc += ci;\n sw++;\n }\n var bpll = Math.ceil(sw * bpp / 8);\n UPNG.decode._filterZero(data, out, di, sw, sh);\n var y = 0, row = starting_row[pass];\n var val;\n while (row < h) {\n var col = starting_col[pass];\n var cdi = di + y * bpll << 3;\n while (col < w) {\n if (bpp == 1) {\n val = data[cdi >> 3];\n val = val >> 7 - (cdi & 7) & 1;\n img[row * bpl + (col >> 3)] |= val << 7 - ((col & 7) << 0);\n }\n if (bpp == 2) {\n val = data[cdi >> 3];\n val = val >> 6 - (cdi & 7) & 3;\n img[row * bpl + (col >> 2)] |= val << 6 - ((col & 3) << 1);\n }\n if (bpp == 4) {\n val = data[cdi >> 3];\n val = val >> 4 - (cdi & 7) & 15;\n img[row * bpl + (col >> 1)] |= val << 4 - ((col & 1) << 2);\n }\n if (bpp >= 8) {\n var ii = row * bpl + col * cbpp;\n for (var j = 0; j < cbpp; j++)\n img[ii + j] = data[(cdi >> 3) + j];\n }\n cdi += bpp;\n col += ci;\n }\n y++;\n row += ri;\n }\n if (sw * sh != 0)\n di += sh * (1 + bpll);\n pass = pass + 1;\n }\n return img;\n };\n UPNG.decode._getBPP = function(out) {\n var noc = [1, null, 3, 1, 2, null, 4][out.ctype];\n return noc * out.depth;\n };\n UPNG.decode._filterZero = function(data, out, off, w, h) {\n var bpp = UPNG.decode._getBPP(out), bpl = Math.ceil(w * bpp / 8), paeth = UPNG.decode._paeth;\n bpp = Math.ceil(bpp / 8);\n var i, di, type = data[off], x = 0;\n if (type > 1)\n data[off] = [0, 0, 1][type - 2];\n if (type == 3)\n for (x = bpp; x < bpl; x++)\n data[x + 1] = data[x + 1] + (data[x + 1 - bpp] >>> 1) & 255;\n for (var y = 0; y < h; y++) {\n i = off + y * bpl;\n di = i + y + 1;\n type = data[di - 1];\n x = 0;\n if (type == 0) {\n for (; x < bpl; x++)\n data[i + x] = data[di + x];\n } else if (type == 1) {\n for (; x < bpp; x++)\n data[i + x] = data[di + x];\n for (; x < bpl; x++)\n data[i + x] = data[di + x] + data[i + x - bpp];\n } else if (type == 2) {\n for (; x < bpl; x++)\n data[i + x] = data[di + x] + data[i + x - bpl];\n } else if (type == 3) {\n for (; x < bpp; x++)\n data[i + x] = data[di + x] + (data[i + x - bpl] >>> 1);\n for (; x < bpl; x++)\n data[i + x] = data[di + x] + (data[i + x - bpl] + data[i + x - bpp] >>> 1);\n } else {\n for (; x < bpp; x++)\n data[i + x] = data[di + x] + paeth(0, data[i + x - bpl], 0);\n for (; x < bpl; x++) {\n data[i + x] = data[di + x] + paeth(data[i + x - bpp], data[i + x - bpl], data[i + x - bpp - bpl]);\n }\n }\n }\n return data;\n };\n UPNG.decode._paeth = function(a, b, c) {\n var p = a + b - c, pa = p - a, pb = p - b, pc = p - c;\n if (pa * pa <= pb * pb && pa * pa <= pc * pc)\n return a;\n else if (pb * pb <= pc * pc)\n return b;\n return c;\n };\n UPNG.decode._IHDR = function(data, offset, out) {\n var bin = UPNG._bin;\n out.width = bin.readUint(data, offset);\n offset += 4;\n out.height = bin.readUint(data, offset);\n offset += 4;\n out.depth = data[offset];\n offset++;\n out.ctype = data[offset];\n offset++;\n out.compress = data[offset];\n offset++;\n out.filter = data[offset];\n offset++;\n out.interlace = data[offset];\n offset++;\n };\n UPNG._bin = {\n nextZero: function(data, p) {\n while (data[p] != 0)\n p++;\n return p;\n },\n readUshort: function(buff, p) {\n return buff[p] << 8 | buff[p + 1];\n },\n writeUshort: function(buff, p, n) {\n buff[p] = n >> 8 & 255;\n buff[p + 1] = n & 255;\n },\n readUint: function(buff, p) {\n return buff[p] * (256 * 256 * 256) + (buff[p + 1] << 16 | buff[p + 2] << 8 | buff[p + 3]);\n },\n writeUint: function(buff, p, n) {\n buff[p] = n >> 24 & 255;\n buff[p + 1] = n >> 16 & 255;\n buff[p + 2] = n >> 8 & 255;\n buff[p + 3] = n & 255;\n },\n readASCII: function(buff, p, l) {\n var s = \"\";\n for (var i = 0; i < l; i++)\n s += String.fromCharCode(buff[p + i]);\n return s;\n },\n writeASCII: function(data, p, s) {\n for (var i = 0; i < s.length; i++)\n data[p + i] = s.charCodeAt(i);\n },\n readBytes: function(buff, p, l) {\n var arr = [];\n for (var i = 0; i < l; i++)\n arr.push(buff[p + i]);\n return arr;\n },\n pad: function(n) {\n return n.length < 2 ? \"0\" + n : n;\n },\n readUTF8: function(buff, p, l) {\n var s = \"\", ns;\n for (var i = 0; i < l; i++)\n s += \"%\" + UPNG._bin.pad(buff[p + i].toString(16));\n try {\n ns = decodeURIComponent(s);\n } catch (e) {\n return UPNG._bin.readASCII(buff, p, l);\n }\n return ns;\n }\n };\n UPNG._copyTile = function(sb, sw, sh, tb, tw, th, xoff, yoff, mode) {\n var w = Math.min(sw, tw), h = Math.min(sh, th);\n var si = 0, ti = 0;\n for (var y = 0; y < h; y++) {\n for (var x = 0; x < w; x++) {\n if (xoff >= 0 && yoff >= 0) {\n si = y * sw + x << 2;\n ti = (yoff + y) * tw + xoff + x << 2;\n } else {\n si = (-yoff + y) * sw - xoff + x << 2;\n ti = y * tw + x << 2;\n }\n if (mode == 0) {\n tb[ti] = sb[si];\n tb[ti + 1] = sb[si + 1];\n tb[ti + 2] = sb[si + 2];\n tb[ti + 3] = sb[si + 3];\n } else if (mode == 1) {\n var fa = sb[si + 3] * (1 / 255), fr = sb[si] * fa, fg = sb[si + 1] * fa, fb = sb[si + 2] * fa;\n var ba = tb[ti + 3] * (1 / 255), br = tb[ti] * ba, bg = tb[ti + 1] * ba, bb = tb[ti + 2] * ba;\n var ifa = 1 - fa, oa = fa + ba * ifa, ioa = oa == 0 ? 0 : 1 / oa;\n tb[ti + 3] = 255 * oa;\n tb[ti + 0] = (fr + br * ifa) * ioa;\n tb[ti + 1] = (fg + bg * ifa) * ioa;\n tb[ti + 2] = (fb + bb * ifa) * ioa;\n } else if (mode == 2) {\n var fa = sb[si + 3], fr = sb[si], fg = sb[si + 1], fb = sb[si + 2];\n var ba = tb[ti + 3], br = tb[ti], bg = tb[ti + 1], bb = tb[ti + 2];\n if (fa == ba && fr == br && fg == bg && fb == bb) {\n tb[ti] = 0;\n tb[ti + 1] = 0;\n tb[ti + 2] = 0;\n tb[ti + 3] = 0;\n } else {\n tb[ti] = fr;\n tb[ti + 1] = fg;\n tb[ti + 2] = fb;\n tb[ti + 3] = fa;\n }\n } else if (mode == 3) {\n var fa = sb[si + 3], fr = sb[si], fg = sb[si + 1], fb = sb[si + 2];\n var ba = tb[ti + 3], br = tb[ti], bg = tb[ti + 1], bb = tb[ti + 2];\n if (fa == ba && fr == br && fg == bg && fb == bb)\n continue;\n if (fa < 220 && ba > 20)\n return false;\n }\n }\n }\n return true;\n };\n}\nclass RGBMLoader extends DataTextureLoader {\n constructor(manager) {\n super(manager);\n this.type = HalfFloatType;\n this.maxRange = 7;\n }\n setDataType(value) {\n this.type = value;\n return this;\n }\n setMaxRange(value) {\n this.maxRange = value;\n return this;\n }\n loadCubemap(urls, onLoad, onProgress, onError) {\n const texture = new CubeTexture();\n let loaded = 0;\n const scope = this;\n function loadTexture(i) {\n scope.load(\n urls[i],\n function(image) {\n texture.images[i] = image;\n loaded++;\n if (loaded === 6) {\n texture.needsUpdate = true;\n if (onLoad)\n onLoad(texture);\n }\n },\n void 0,\n onError\n );\n }\n for (let i = 0; i < urls.length; ++i) {\n loadTexture(i);\n }\n texture.type = this.type;\n texture.format = RGBAFormat;\n texture.minFilter = LinearFilter;\n texture.generateMipmaps = false;\n return texture;\n }\n parse(buffer) {\n init();\n const img = UPNG.decode(buffer);\n const rgba = UPNG.toRGBA8(img)[0];\n const data = new Uint8Array(rgba);\n const size = img.width * img.height * 4;\n const output = this.type === HalfFloatType ? new Uint16Array(size) : new Float32Array(size);\n for (let i = 0; i < data.length; i += 4) {\n const r = data[i + 0] / 255;\n const g = data[i + 1] / 255;\n const b = data[i + 2] / 255;\n const a = data[i + 3] / 255;\n if (this.type === HalfFloatType) {\n output[i + 0] = DataUtils.toHalfFloat(Math.min(r * a * this.maxRange, 65504));\n output[i + 1] = DataUtils.toHalfFloat(Math.min(g * a * this.maxRange, 65504));\n output[i + 2] = DataUtils.toHalfFloat(Math.min(b * a * this.maxRange, 65504));\n output[i + 3] = DataUtils.toHalfFloat(1);\n } else {\n output[i + 0] = r * a * this.maxRange;\n output[i + 1] = g * a * this.maxRange;\n output[i + 2] = b * a * this.maxRange;\n output[i + 3] = 1;\n }\n }\n return {\n width: img.width,\n height: img.height,\n data: output,\n format: RGBAFormat,\n type: this.type,\n flipY: true\n };\n }\n}\nexport {\n RGBMLoader\n};\n//# sourceMappingURL=RGBMLoader.js.map\n","import { Loader, FileLoader, Mesh, BufferGeometry, Float32BufferAttribute, MeshStandardMaterial, RedFormat, NearestFilter, LinearFilter } from \"three\";\nimport { Data3DTexture } from \"../_polyfill/Data3DTexture.js\";\nclass VOXLoader extends Loader {\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const loader = new FileLoader(scope.manager);\n loader.setPath(scope.path);\n loader.setResponseType(\"arraybuffer\");\n loader.setRequestHeader(scope.requestHeader);\n loader.load(\n url,\n function(buffer) {\n try {\n onLoad(scope.parse(buffer));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(buffer) {\n const data = new DataView(buffer);\n const id = data.getUint32(0, true);\n const version = data.getUint32(4, true);\n if (id !== 542658390 || version !== 150) {\n console.error(\"Not a valid VOX file\");\n return;\n }\n const DEFAULT_PALETTE = [\n 0,\n 4294967295,\n 4291624959,\n 4288282623,\n 4284940287,\n 4281597951,\n 4278255615,\n 4294954239,\n 4291611903,\n 4288269567,\n 4284927231,\n 4281584895,\n 4278242559,\n 4294941183,\n 4291598847,\n 4288256511,\n 4284914175,\n 4281571839,\n 4278229503,\n 4294928127,\n 4291585791,\n 4288243455,\n 4284901119,\n 4281558783,\n 4278216447,\n 4294915071,\n 4291572735,\n 4288230399,\n 4284888063,\n 4281545727,\n 4278203391,\n 4294902015,\n 4291559679,\n 4288217343,\n 4284875007,\n 4281532671,\n 4278190335,\n 4294967244,\n 4291624908,\n 4288282572,\n 4284940236,\n 4281597900,\n 4278255564,\n 4294954188,\n 4291611852,\n 4288269516,\n 4284927180,\n 4281584844,\n 4278242508,\n 4294941132,\n 4291598796,\n 4288256460,\n 4284914124,\n 4281571788,\n 4278229452,\n 4294928076,\n 4291585740,\n 4288243404,\n 4284901068,\n 4281558732,\n 4278216396,\n 4294915020,\n 4291572684,\n 4288230348,\n 4284888012,\n 4281545676,\n 4278203340,\n 4294901964,\n 4291559628,\n 4288217292,\n 4284874956,\n 4281532620,\n 4278190284,\n 4294967193,\n 4291624857,\n 4288282521,\n 4284940185,\n 4281597849,\n 4278255513,\n 4294954137,\n 4291611801,\n 4288269465,\n 4284927129,\n 4281584793,\n 4278242457,\n 4294941081,\n 4291598745,\n 4288256409,\n 4284914073,\n 4281571737,\n 4278229401,\n 4294928025,\n 4291585689,\n 4288243353,\n 4284901017,\n 4281558681,\n 4278216345,\n 4294914969,\n 4291572633,\n 4288230297,\n 4284887961,\n 4281545625,\n 4278203289,\n 4294901913,\n 4291559577,\n 4288217241,\n 4284874905,\n 4281532569,\n 4278190233,\n 4294967142,\n 4291624806,\n 4288282470,\n 4284940134,\n 4281597798,\n 4278255462,\n 4294954086,\n 4291611750,\n 4288269414,\n 4284927078,\n 4281584742,\n 4278242406,\n 4294941030,\n 4291598694,\n 4288256358,\n 4284914022,\n 4281571686,\n 4278229350,\n 4294927974,\n 4291585638,\n 4288243302,\n 4284900966,\n 4281558630,\n 4278216294,\n 4294914918,\n 4291572582,\n 4288230246,\n 4284887910,\n 4281545574,\n 4278203238,\n 4294901862,\n 4291559526,\n 4288217190,\n 4284874854,\n 4281532518,\n 4278190182,\n 4294967091,\n 4291624755,\n 4288282419,\n 4284940083,\n 4281597747,\n 4278255411,\n 4294954035,\n 4291611699,\n 4288269363,\n 4284927027,\n 4281584691,\n 4278242355,\n 4294940979,\n 4291598643,\n 4288256307,\n 4284913971,\n 4281571635,\n 4278229299,\n 4294927923,\n 4291585587,\n 4288243251,\n 4284900915,\n 4281558579,\n 4278216243,\n 4294914867,\n 4291572531,\n 4288230195,\n 4284887859,\n 4281545523,\n 4278203187,\n 4294901811,\n 4291559475,\n 4288217139,\n 4284874803,\n 4281532467,\n 4278190131,\n 4294967040,\n 4291624704,\n 4288282368,\n 4284940032,\n 4281597696,\n 4278255360,\n 4294953984,\n 4291611648,\n 4288269312,\n 4284926976,\n 4281584640,\n 4278242304,\n 4294940928,\n 4291598592,\n 4288256256,\n 4284913920,\n 4281571584,\n 4278229248,\n 4294927872,\n 4291585536,\n 4288243200,\n 4284900864,\n 4281558528,\n 4278216192,\n 4294914816,\n 4291572480,\n 4288230144,\n 4284887808,\n 4281545472,\n 4278203136,\n 4294901760,\n 4291559424,\n 4288217088,\n 4284874752,\n 4281532416,\n 4278190318,\n 4278190301,\n 4278190267,\n 4278190250,\n 4278190216,\n 4278190199,\n 4278190165,\n 4278190148,\n 4278190114,\n 4278190097,\n 4278251008,\n 4278246656,\n 4278237952,\n 4278233600,\n 4278224896,\n 4278220544,\n 4278211840,\n 4278207488,\n 4278198784,\n 4278194432,\n 4293787648,\n 4292673536,\n 4290445312,\n 4289331200,\n 4287102976,\n 4285988864,\n 4283760640,\n 4282646528,\n 4280418304,\n 4279304192,\n 4293848814,\n 4292730333,\n 4290493371,\n 4289374890,\n 4287137928,\n 4286019447,\n 4283782485,\n 4282664004,\n 4280427042,\n 4279308561\n ];\n let i = 8;\n let chunk;\n const chunks = [];\n while (i < data.byteLength) {\n let id2 = \"\";\n for (let j = 0; j < 4; j++) {\n id2 += String.fromCharCode(data.getUint8(i++));\n }\n const chunkSize = data.getUint32(i, true);\n i += 4;\n i += 4;\n if (id2 === \"SIZE\") {\n const x = data.getUint32(i, true);\n i += 4;\n const y = data.getUint32(i, true);\n i += 4;\n const z = data.getUint32(i, true);\n i += 4;\n chunk = {\n palette: DEFAULT_PALETTE,\n size: { x, y, z }\n };\n chunks.push(chunk);\n i += chunkSize - 3 * 4;\n } else if (id2 === \"XYZI\") {\n const numVoxels = data.getUint32(i, true);\n i += 4;\n chunk.data = new Uint8Array(buffer, i, numVoxels * 4);\n i += numVoxels * 4;\n } else if (id2 === \"RGBA\") {\n const palette = [0];\n for (let j = 0; j < 256; j++) {\n palette[j + 1] = data.getUint32(i, true);\n i += 4;\n }\n chunk.palette = palette;\n } else {\n i += chunkSize;\n }\n }\n return chunks;\n }\n}\nclass VOXMesh extends Mesh {\n constructor(chunk) {\n const data = chunk.data;\n const size = chunk.size;\n const palette = chunk.palette;\n const vertices = [];\n const colors = [];\n const nx = [0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1];\n const px = [1, 0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0];\n const py = [0, 0, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1, 0, 1];\n const ny = [0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0];\n const nz = [0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 0, 0, 0];\n const pz = [0, 1, 1, 1, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 1, 1, 1];\n function add(tile, x, y, z, r, g, b) {\n x -= size.x / 2;\n y -= size.z / 2;\n z += size.y / 2;\n for (let i = 0; i < 18; i += 3) {\n vertices.push(tile[i + 0] + x, tile[i + 1] + y, tile[i + 2] + z);\n colors.push(r, g, b);\n }\n }\n const offsety = size.x;\n const offsetz = size.x * size.y;\n const array = new Uint8Array(size.x * size.y * size.z);\n for (let j = 0; j < data.length; j += 4) {\n const x = data[j + 0];\n const y = data[j + 1];\n const z = data[j + 2];\n const index = x + y * offsety + z * offsetz;\n array[index] = 255;\n }\n let hasColors = false;\n for (let j = 0; j < data.length; j += 4) {\n const x = data[j + 0];\n const y = data[j + 1];\n const z = data[j + 2];\n const c = data[j + 3];\n const hex = palette[c];\n const r = (hex >> 0 & 255) / 255;\n const g = (hex >> 8 & 255) / 255;\n const b = (hex >> 16 & 255) / 255;\n if (r > 0 || g > 0 || b > 0)\n hasColors = true;\n const index = x + y * offsety + z * offsetz;\n if (array[index + 1] === 0 || x === size.x - 1)\n add(px, x, z, -y, r, g, b);\n if (array[index - 1] === 0 || x === 0)\n add(nx, x, z, -y, r, g, b);\n if (array[index + offsety] === 0 || y === size.y - 1)\n add(ny, x, z, -y, r, g, b);\n if (array[index - offsety] === 0 || y === 0)\n add(py, x, z, -y, r, g, b);\n if (array[index + offsetz] === 0 || z === size.z - 1)\n add(pz, x, z, -y, r, g, b);\n if (array[index - offsetz] === 0 || z === 0)\n add(nz, x, z, -y, r, g, b);\n }\n const geometry = new BufferGeometry();\n geometry.setAttribute(\"position\", new Float32BufferAttribute(vertices, 3));\n geometry.computeVertexNormals();\n const material = new MeshStandardMaterial();\n if (hasColors) {\n geometry.setAttribute(\"color\", new Float32BufferAttribute(colors, 3));\n material.vertexColors = true;\n }\n super(geometry, material);\n }\n}\nclass VOXData3DTexture extends Data3DTexture {\n constructor(chunk) {\n const data = chunk.data;\n const size = chunk.size;\n const offsety = size.x;\n const offsetz = size.x * size.y;\n const array = new Uint8Array(size.x * size.y * size.z);\n for (let j = 0; j < data.length; j += 4) {\n const x = data[j + 0];\n const y = data[j + 1];\n const z = data[j + 2];\n const index = x + y * offsety + z * offsetz;\n array[index] = 255;\n }\n super(array, size.x, size.y, size.z);\n this.format = RedFormat;\n this.minFilter = NearestFilter;\n this.magFilter = LinearFilter;\n this.unpackAlignment = 1;\n this.needsUpdate = true;\n }\n}\nexport {\n VOXData3DTexture,\n VOXLoader,\n VOXMesh\n};\n//# sourceMappingURL=VOXLoader.js.map\n","import { Loader, FileLoader, BufferGeometry, Float32BufferAttribute, PointsMaterial, Points } from \"three\";\nimport { decodeText } from \"../_polyfill/LoaderUtils.js\";\nclass PCDLoader extends Loader {\n constructor(manager) {\n super(manager);\n this.littleEndian = true;\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const loader = new FileLoader(scope.manager);\n loader.setPath(scope.path);\n loader.setResponseType(\"arraybuffer\");\n loader.setRequestHeader(scope.requestHeader);\n loader.setWithCredentials(scope.withCredentials);\n loader.load(\n url,\n function(data) {\n try {\n onLoad(scope.parse(data, url));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(data, url) {\n function decompressLZF(inData, outLength) {\n const inLength = inData.length;\n const outData = new Uint8Array(outLength);\n let inPtr = 0;\n let outPtr = 0;\n let ctrl;\n let len;\n let ref;\n do {\n ctrl = inData[inPtr++];\n if (ctrl < 1 << 5) {\n ctrl++;\n if (outPtr + ctrl > outLength)\n throw new Error(\"Output buffer is not large enough\");\n if (inPtr + ctrl > inLength)\n throw new Error(\"Invalid compressed data\");\n do {\n outData[outPtr++] = inData[inPtr++];\n } while (--ctrl);\n } else {\n len = ctrl >> 5;\n ref = outPtr - ((ctrl & 31) << 8) - 1;\n if (inPtr >= inLength)\n throw new Error(\"Invalid compressed data\");\n if (len === 7) {\n len += inData[inPtr++];\n if (inPtr >= inLength)\n throw new Error(\"Invalid compressed data\");\n }\n ref -= inData[inPtr++];\n if (outPtr + len + 2 > outLength)\n throw new Error(\"Output buffer is not large enough\");\n if (ref < 0)\n throw new Error(\"Invalid compressed data\");\n if (ref >= outPtr)\n throw new Error(\"Invalid compressed data\");\n do {\n outData[outPtr++] = outData[ref++];\n } while (--len + 2);\n }\n } while (inPtr < inLength);\n return outData;\n }\n function parseHeader(data2) {\n const PCDheader2 = {};\n const result1 = data2.search(/[\\r\\n]DATA\\s(\\S*)\\s/i);\n const result2 = /[\\r\\n]DATA\\s(\\S*)\\s/i.exec(data2.substr(result1 - 1));\n PCDheader2.data = result2[1];\n PCDheader2.headerLen = result2[0].length + result1;\n PCDheader2.str = data2.substr(0, PCDheader2.headerLen);\n PCDheader2.str = PCDheader2.str.replace(/\\#.*/gi, \"\");\n PCDheader2.version = /VERSION (.*)/i.exec(PCDheader2.str);\n PCDheader2.fields = /FIELDS (.*)/i.exec(PCDheader2.str);\n PCDheader2.size = /SIZE (.*)/i.exec(PCDheader2.str);\n PCDheader2.type = /TYPE (.*)/i.exec(PCDheader2.str);\n PCDheader2.count = /COUNT (.*)/i.exec(PCDheader2.str);\n PCDheader2.width = /WIDTH (.*)/i.exec(PCDheader2.str);\n PCDheader2.height = /HEIGHT (.*)/i.exec(PCDheader2.str);\n PCDheader2.viewpoint = /VIEWPOINT (.*)/i.exec(PCDheader2.str);\n PCDheader2.points = /POINTS (.*)/i.exec(PCDheader2.str);\n if (PCDheader2.version !== null)\n PCDheader2.version = parseFloat(PCDheader2.version[1]);\n if (PCDheader2.fields !== null)\n PCDheader2.fields = PCDheader2.fields[1].split(\" \");\n if (PCDheader2.type !== null)\n PCDheader2.type = PCDheader2.type[1].split(\" \");\n if (PCDheader2.width !== null)\n PCDheader2.width = parseInt(PCDheader2.width[1]);\n if (PCDheader2.height !== null)\n PCDheader2.height = parseInt(PCDheader2.height[1]);\n if (PCDheader2.viewpoint !== null)\n PCDheader2.viewpoint = PCDheader2.viewpoint[1];\n if (PCDheader2.points !== null)\n PCDheader2.points = parseInt(PCDheader2.points[1], 10);\n if (PCDheader2.points === null)\n PCDheader2.points = PCDheader2.width * PCDheader2.height;\n if (PCDheader2.size !== null) {\n PCDheader2.size = PCDheader2.size[1].split(\" \").map(function(x) {\n return parseInt(x, 10);\n });\n }\n if (PCDheader2.count !== null) {\n PCDheader2.count = PCDheader2.count[1].split(\" \").map(function(x) {\n return parseInt(x, 10);\n });\n } else {\n PCDheader2.count = [];\n for (let i = 0, l = PCDheader2.fields.length; i < l; i++) {\n PCDheader2.count.push(1);\n }\n }\n PCDheader2.offset = {};\n let sizeSum = 0;\n for (let i = 0, l = PCDheader2.fields.length; i < l; i++) {\n if (PCDheader2.data === \"ascii\") {\n PCDheader2.offset[PCDheader2.fields[i]] = i;\n } else {\n PCDheader2.offset[PCDheader2.fields[i]] = sizeSum;\n sizeSum += PCDheader2.size[i] * PCDheader2.count[i];\n }\n }\n PCDheader2.rowSize = sizeSum;\n return PCDheader2;\n }\n const textData = decodeText(new Uint8Array(data));\n const PCDheader = parseHeader(textData);\n const position = [];\n const normal = [];\n const color = [];\n if (PCDheader.data === \"ascii\") {\n const offset = PCDheader.offset;\n const pcdData = textData.substr(PCDheader.headerLen);\n const lines = pcdData.split(\"\\n\");\n for (let i = 0, l = lines.length; i < l; i++) {\n if (lines[i] === \"\")\n continue;\n const line = lines[i].split(\" \");\n if (offset.x !== void 0) {\n position.push(parseFloat(line[offset.x]));\n position.push(parseFloat(line[offset.y]));\n position.push(parseFloat(line[offset.z]));\n }\n if (offset.rgb !== void 0) {\n const rgb = parseFloat(line[offset.rgb]);\n const r = rgb >> 16 & 255;\n const g = rgb >> 8 & 255;\n const b = rgb >> 0 & 255;\n color.push(r / 255, g / 255, b / 255);\n }\n if (offset.normal_x !== void 0) {\n normal.push(parseFloat(line[offset.normal_x]));\n normal.push(parseFloat(line[offset.normal_y]));\n normal.push(parseFloat(line[offset.normal_z]));\n }\n }\n }\n if (PCDheader.data === \"binary_compressed\") {\n const sizes = new Uint32Array(data.slice(PCDheader.headerLen, PCDheader.headerLen + 8));\n const compressedSize = sizes[0];\n const decompressedSize = sizes[1];\n const decompressed = decompressLZF(\n new Uint8Array(data, PCDheader.headerLen + 8, compressedSize),\n decompressedSize\n );\n const dataview = new DataView(decompressed.buffer);\n const offset = PCDheader.offset;\n for (let i = 0; i < PCDheader.points; i++) {\n if (offset.x !== void 0) {\n position.push(dataview.getFloat32(PCDheader.points * offset.x + PCDheader.size[0] * i, this.littleEndian));\n position.push(dataview.getFloat32(PCDheader.points * offset.y + PCDheader.size[1] * i, this.littleEndian));\n position.push(dataview.getFloat32(PCDheader.points * offset.z + PCDheader.size[2] * i, this.littleEndian));\n }\n if (offset.rgb !== void 0) {\n color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 2) / 255);\n color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 1) / 255);\n color.push(dataview.getUint8(PCDheader.points * offset.rgb + PCDheader.size[3] * i + 0) / 255);\n }\n if (offset.normal_x !== void 0) {\n normal.push(\n dataview.getFloat32(PCDheader.points * offset.normal_x + PCDheader.size[4] * i, this.littleEndian)\n );\n normal.push(\n dataview.getFloat32(PCDheader.points * offset.normal_y + PCDheader.size[5] * i, this.littleEndian)\n );\n normal.push(\n dataview.getFloat32(PCDheader.points * offset.normal_z + PCDheader.size[6] * i, this.littleEndian)\n );\n }\n }\n }\n if (PCDheader.data === \"binary\") {\n const dataview = new DataView(data, PCDheader.headerLen);\n const offset = PCDheader.offset;\n for (let i = 0, row = 0; i < PCDheader.points; i++, row += PCDheader.rowSize) {\n if (offset.x !== void 0) {\n position.push(dataview.getFloat32(row + offset.x, this.littleEndian));\n position.push(dataview.getFloat32(row + offset.y, this.littleEndian));\n position.push(dataview.getFloat32(row + offset.z, this.littleEndian));\n }\n if (offset.rgb !== void 0) {\n color.push(dataview.getUint8(row + offset.rgb + 2) / 255);\n color.push(dataview.getUint8(row + offset.rgb + 1) / 255);\n color.push(dataview.getUint8(row + offset.rgb + 0) / 255);\n }\n if (offset.normal_x !== void 0) {\n normal.push(dataview.getFloat32(row + offset.normal_x, this.littleEndian));\n normal.push(dataview.getFloat32(row + offset.normal_y, this.littleEndian));\n normal.push(dataview.getFloat32(row + offset.normal_z, this.littleEndian));\n }\n }\n }\n const geometry = new BufferGeometry();\n if (position.length > 0)\n geometry.setAttribute(\"position\", new Float32BufferAttribute(position, 3));\n if (normal.length > 0)\n geometry.setAttribute(\"normal\", new Float32BufferAttribute(normal, 3));\n if (color.length > 0)\n geometry.setAttribute(\"color\", new Float32BufferAttribute(color, 3));\n geometry.computeBoundingSphere();\n const material = new PointsMaterial({ size: 5e-3 });\n if (color.length > 0) {\n material.vertexColors = true;\n } else {\n material.color.setHex(Math.random() * 16777215);\n }\n const mesh = new Points(geometry, material);\n let name = url.split(\"\").reverse().join(\"\");\n name = /([^\\/]*)/.exec(name);\n name = name[1].split(\"\").reverse().join(\"\");\n mesh.name = name;\n return mesh;\n }\n}\nexport {\n PCDLoader\n};\n//# sourceMappingURL=PCDLoader.js.map\n","class LWO2Parser {\n constructor(IFFParser) {\n this.IFF = IFFParser;\n }\n parseBlock() {\n this.IFF.debugger.offset = this.IFF.reader.offset;\n this.IFF.debugger.closeForms();\n const blockID = this.IFF.reader.getIDTag();\n let length = this.IFF.reader.getUint32();\n if (length > this.IFF.reader.dv.byteLength - this.IFF.reader.offset) {\n this.IFF.reader.offset -= 4;\n length = this.IFF.reader.getUint16();\n }\n this.IFF.debugger.dataOffset = this.IFF.reader.offset;\n this.IFF.debugger.length = length;\n switch (blockID) {\n case \"FORM\":\n this.IFF.parseForm(length);\n break;\n case \"ICON\":\n case \"VMPA\":\n case \"BBOX\":\n case \"NORM\":\n case \"PRE \":\n case \"POST\":\n case \"KEY \":\n case \"SPAN\":\n case \"TIME\":\n case \"CLRS\":\n case \"CLRA\":\n case \"FILT\":\n case \"DITH\":\n case \"CONT\":\n case \"BRIT\":\n case \"SATR\":\n case \"HUE \":\n case \"GAMM\":\n case \"NEGA\":\n case \"IFLT\":\n case \"PFLT\":\n case \"PROJ\":\n case \"AXIS\":\n case \"AAST\":\n case \"PIXB\":\n case \"AUVO\":\n case \"STCK\":\n case \"PROC\":\n case \"VALU\":\n case \"FUNC\":\n case \"PNAM\":\n case \"INAM\":\n case \"GRST\":\n case \"GREN\":\n case \"GRPT\":\n case \"FKEY\":\n case \"IKEY\":\n case \"CSYS\":\n case \"OPAQ\":\n case \"CMAP\":\n case \"NLOC\":\n case \"NZOM\":\n case \"NVER\":\n case \"NSRV\":\n case \"NVSK\":\n case \"NCRD\":\n case \"WRPW\":\n case \"WRPH\":\n case \"NMOD\":\n case \"NSEL\":\n case \"NPRW\":\n case \"NPLA\":\n case \"NODS\":\n case \"VERS\":\n case \"ENUM\":\n case \"TAG \":\n case \"OPAC\":\n case \"CGMD\":\n case \"CGTY\":\n case \"CGST\":\n case \"CGEN\":\n case \"CGTS\":\n case \"CGTE\":\n case \"OSMP\":\n case \"OMDE\":\n case \"OUTR\":\n case \"FLAG\":\n case \"TRNL\":\n case \"GLOW\":\n case \"GVAL\":\n case \"SHRP\":\n case \"RFOP\":\n case \"RSAN\":\n case \"TROP\":\n case \"RBLR\":\n case \"TBLR\":\n case \"CLRH\":\n case \"CLRF\":\n case \"ADTR\":\n case \"LINE\":\n case \"ALPH\":\n case \"VCOL\":\n case \"ENAB\":\n this.IFF.debugger.skipped = true;\n this.IFF.reader.skip(length);\n break;\n case \"SURF\":\n this.IFF.parseSurfaceLwo2(length);\n break;\n case \"CLIP\":\n this.IFF.parseClipLwo2(length);\n break;\n case \"IPIX\":\n case \"IMIP\":\n case \"IMOD\":\n case \"AMOD\":\n case \"IINV\":\n case \"INCR\":\n case \"IAXS\":\n case \"IFOT\":\n case \"ITIM\":\n case \"IWRL\":\n case \"IUTI\":\n case \"IINX\":\n case \"IINY\":\n case \"IINZ\":\n case \"IREF\":\n if (length === 4)\n this.IFF.currentNode[blockID] = this.IFF.reader.getInt32();\n else\n this.IFF.reader.skip(length);\n break;\n case \"OTAG\":\n this.IFF.parseObjectTag();\n break;\n case \"LAYR\":\n this.IFF.parseLayer(length);\n break;\n case \"PNTS\":\n this.IFF.parsePoints(length);\n break;\n case \"VMAP\":\n this.IFF.parseVertexMapping(length);\n break;\n case \"AUVU\":\n case \"AUVN\":\n this.IFF.reader.skip(length - 1);\n this.IFF.reader.getVariableLengthIndex();\n break;\n case \"POLS\":\n this.IFF.parsePolygonList(length);\n break;\n case \"TAGS\":\n this.IFF.parseTagStrings(length);\n break;\n case \"PTAG\":\n this.IFF.parsePolygonTagMapping(length);\n break;\n case \"VMAD\":\n this.IFF.parseVertexMapping(length, true);\n break;\n case \"DESC\":\n this.IFF.currentForm.description = this.IFF.reader.getString();\n break;\n case \"TEXT\":\n case \"CMNT\":\n case \"NCOM\":\n this.IFF.currentForm.comment = this.IFF.reader.getString();\n break;\n case \"NAME\":\n this.IFF.currentForm.channelName = this.IFF.reader.getString();\n break;\n case \"WRAP\":\n this.IFF.currentForm.wrap = { w: this.IFF.reader.getUint16(), h: this.IFF.reader.getUint16() };\n break;\n case \"IMAG\":\n const index = this.IFF.reader.getVariableLengthIndex();\n this.IFF.currentForm.imageIndex = index;\n break;\n case \"OREF\":\n this.IFF.currentForm.referenceObject = this.IFF.reader.getString();\n break;\n case \"ROID\":\n this.IFF.currentForm.referenceObjectID = this.IFF.reader.getUint32();\n break;\n case \"SSHN\":\n this.IFF.currentSurface.surfaceShaderName = this.IFF.reader.getString();\n break;\n case \"AOVN\":\n this.IFF.currentSurface.surfaceCustomAOVName = this.IFF.reader.getString();\n break;\n case \"NSTA\":\n this.IFF.currentForm.disabled = this.IFF.reader.getUint16();\n break;\n case \"NRNM\":\n this.IFF.currentForm.realName = this.IFF.reader.getString();\n break;\n case \"NNME\":\n this.IFF.currentForm.refName = this.IFF.reader.getString();\n this.IFF.currentSurface.nodes[this.IFF.currentForm.refName] = this.IFF.currentForm;\n break;\n case \"INME\":\n if (!this.IFF.currentForm.nodeName)\n this.IFF.currentForm.nodeName = [];\n this.IFF.currentForm.nodeName.push(this.IFF.reader.getString());\n break;\n case \"IINN\":\n if (!this.IFF.currentForm.inputNodeName)\n this.IFF.currentForm.inputNodeName = [];\n this.IFF.currentForm.inputNodeName.push(this.IFF.reader.getString());\n break;\n case \"IINM\":\n if (!this.IFF.currentForm.inputName)\n this.IFF.currentForm.inputName = [];\n this.IFF.currentForm.inputName.push(this.IFF.reader.getString());\n break;\n case \"IONM\":\n if (!this.IFF.currentForm.inputOutputName)\n this.IFF.currentForm.inputOutputName = [];\n this.IFF.currentForm.inputOutputName.push(this.IFF.reader.getString());\n break;\n case \"FNAM\":\n this.IFF.currentForm.fileName = this.IFF.reader.getString();\n break;\n case \"CHAN\":\n if (length === 4)\n this.IFF.currentForm.textureChannel = this.IFF.reader.getIDTag();\n else\n this.IFF.reader.skip(length);\n break;\n case \"SMAN\":\n const maxSmoothingAngle = this.IFF.reader.getFloat32();\n this.IFF.currentSurface.attributes.smooth = maxSmoothingAngle < 0 ? false : true;\n break;\n case \"COLR\":\n this.IFF.currentSurface.attributes.Color = { value: this.IFF.reader.getFloat32Array(3) };\n this.IFF.reader.skip(2);\n break;\n case \"LUMI\":\n this.IFF.currentSurface.attributes.Luminosity = { value: this.IFF.reader.getFloat32() };\n this.IFF.reader.skip(2);\n break;\n case \"SPEC\":\n this.IFF.currentSurface.attributes.Specular = { value: this.IFF.reader.getFloat32() };\n this.IFF.reader.skip(2);\n break;\n case \"DIFF\":\n this.IFF.currentSurface.attributes.Diffuse = { value: this.IFF.reader.getFloat32() };\n this.IFF.reader.skip(2);\n break;\n case \"REFL\":\n this.IFF.currentSurface.attributes.Reflection = { value: this.IFF.reader.getFloat32() };\n this.IFF.reader.skip(2);\n break;\n case \"GLOS\":\n this.IFF.currentSurface.attributes.Glossiness = { value: this.IFF.reader.getFloat32() };\n this.IFF.reader.skip(2);\n break;\n case \"TRAN\":\n this.IFF.currentSurface.attributes.opacity = this.IFF.reader.getFloat32();\n this.IFF.reader.skip(2);\n break;\n case \"BUMP\":\n this.IFF.currentSurface.attributes.bumpStrength = this.IFF.reader.getFloat32();\n this.IFF.reader.skip(2);\n break;\n case \"SIDE\":\n this.IFF.currentSurface.attributes.side = this.IFF.reader.getUint16();\n break;\n case \"RIMG\":\n this.IFF.currentSurface.attributes.reflectionMap = this.IFF.reader.getVariableLengthIndex();\n break;\n case \"RIND\":\n this.IFF.currentSurface.attributes.refractiveIndex = this.IFF.reader.getFloat32();\n this.IFF.reader.skip(2);\n break;\n case \"TIMG\":\n this.IFF.currentSurface.attributes.refractionMap = this.IFF.reader.getVariableLengthIndex();\n break;\n case \"IMAP\":\n this.IFF.reader.skip(2);\n break;\n case \"TMAP\":\n this.IFF.debugger.skipped = true;\n this.IFF.reader.skip(length);\n break;\n case \"IUVI\":\n this.IFF.currentNode.UVChannel = this.IFF.reader.getString(length);\n break;\n case \"IUTL\":\n this.IFF.currentNode.widthWrappingMode = this.IFF.reader.getUint32();\n break;\n case \"IVTL\":\n this.IFF.currentNode.heightWrappingMode = this.IFF.reader.getUint32();\n break;\n case \"BLOK\":\n break;\n default:\n this.IFF.parseUnknownCHUNK(blockID, length);\n }\n if (blockID != \"FORM\") {\n this.IFF.debugger.node = 1;\n this.IFF.debugger.nodeID = blockID;\n this.IFF.debugger.log();\n }\n if (this.IFF.reader.offset >= this.IFF.currentFormEnd) {\n this.IFF.currentForm = this.IFF.parentForm;\n }\n }\n}\nexport {\n LWO2Parser\n};\n//# sourceMappingURL=LWO2Parser.js.map\n","class LWO3Parser {\n constructor(IFFParser) {\n this.IFF = IFFParser;\n }\n parseBlock() {\n this.IFF.debugger.offset = this.IFF.reader.offset;\n this.IFF.debugger.closeForms();\n const blockID = this.IFF.reader.getIDTag();\n const length = this.IFF.reader.getUint32();\n this.IFF.debugger.dataOffset = this.IFF.reader.offset;\n this.IFF.debugger.length = length;\n switch (blockID) {\n case \"FORM\":\n this.IFF.parseForm(length);\n break;\n case \"ICON\":\n case \"VMPA\":\n case \"BBOX\":\n case \"NORM\":\n case \"PRE \":\n case \"POST\":\n case \"KEY \":\n case \"SPAN\":\n case \"TIME\":\n case \"CLRS\":\n case \"CLRA\":\n case \"FILT\":\n case \"DITH\":\n case \"CONT\":\n case \"BRIT\":\n case \"SATR\":\n case \"HUE \":\n case \"GAMM\":\n case \"NEGA\":\n case \"IFLT\":\n case \"PFLT\":\n case \"PROJ\":\n case \"AXIS\":\n case \"AAST\":\n case \"PIXB\":\n case \"STCK\":\n case \"VALU\":\n case \"PNAM\":\n case \"INAM\":\n case \"GRST\":\n case \"GREN\":\n case \"GRPT\":\n case \"FKEY\":\n case \"IKEY\":\n case \"CSYS\":\n case \"OPAQ\":\n case \"CMAP\":\n case \"NLOC\":\n case \"NZOM\":\n case \"NVER\":\n case \"NSRV\":\n case \"NCRD\":\n case \"NMOD\":\n case \"NSEL\":\n case \"NPRW\":\n case \"NPLA\":\n case \"VERS\":\n case \"ENUM\":\n case \"TAG \":\n case \"CGMD\":\n case \"CGTY\":\n case \"CGST\":\n case \"CGEN\":\n case \"CGTS\":\n case \"CGTE\":\n case \"OSMP\":\n case \"OMDE\":\n case \"OUTR\":\n case \"FLAG\":\n case \"TRNL\":\n case \"SHRP\":\n case \"RFOP\":\n case \"RSAN\":\n case \"TROP\":\n case \"RBLR\":\n case \"TBLR\":\n case \"CLRH\":\n case \"CLRF\":\n case \"ADTR\":\n case \"GLOW\":\n case \"LINE\":\n case \"ALPH\":\n case \"VCOL\":\n case \"ENAB\":\n this.IFF.debugger.skipped = true;\n this.IFF.reader.skip(length);\n break;\n case \"IPIX\":\n case \"IMIP\":\n case \"IMOD\":\n case \"AMOD\":\n case \"IINV\":\n case \"INCR\":\n case \"IAXS\":\n case \"IFOT\":\n case \"ITIM\":\n case \"IWRL\":\n case \"IUTI\":\n case \"IINX\":\n case \"IINY\":\n case \"IINZ\":\n case \"IREF\":\n if (length === 4)\n this.IFF.currentNode[blockID] = this.IFF.reader.getInt32();\n else\n this.IFF.reader.skip(length);\n break;\n case \"OTAG\":\n this.IFF.parseObjectTag();\n break;\n case \"LAYR\":\n this.IFF.parseLayer(length);\n break;\n case \"PNTS\":\n this.IFF.parsePoints(length);\n break;\n case \"VMAP\":\n this.IFF.parseVertexMapping(length);\n break;\n case \"POLS\":\n this.IFF.parsePolygonList(length);\n break;\n case \"TAGS\":\n this.IFF.parseTagStrings(length);\n break;\n case \"PTAG\":\n this.IFF.parsePolygonTagMapping(length);\n break;\n case \"VMAD\":\n this.IFF.parseVertexMapping(length, true);\n break;\n case \"DESC\":\n this.IFF.currentForm.description = this.IFF.reader.getString();\n break;\n case \"TEXT\":\n case \"CMNT\":\n case \"NCOM\":\n this.IFF.currentForm.comment = this.IFF.reader.getString();\n break;\n case \"NAME\":\n this.IFF.currentForm.channelName = this.IFF.reader.getString();\n break;\n case \"WRAP\":\n this.IFF.currentForm.wrap = { w: this.IFF.reader.getUint16(), h: this.IFF.reader.getUint16() };\n break;\n case \"IMAG\":\n const index = this.IFF.reader.getVariableLengthIndex();\n this.IFF.currentForm.imageIndex = index;\n break;\n case \"OREF\":\n this.IFF.currentForm.referenceObject = this.IFF.reader.getString();\n break;\n case \"ROID\":\n this.IFF.currentForm.referenceObjectID = this.IFF.reader.getUint32();\n break;\n case \"SSHN\":\n this.IFF.currentSurface.surfaceShaderName = this.IFF.reader.getString();\n break;\n case \"AOVN\":\n this.IFF.currentSurface.surfaceCustomAOVName = this.IFF.reader.getString();\n break;\n case \"NSTA\":\n this.IFF.currentForm.disabled = this.IFF.reader.getUint16();\n break;\n case \"NRNM\":\n this.IFF.currentForm.realName = this.IFF.reader.getString();\n break;\n case \"NNME\":\n this.IFF.currentForm.refName = this.IFF.reader.getString();\n this.IFF.currentSurface.nodes[this.IFF.currentForm.refName] = this.IFF.currentForm;\n break;\n case \"INME\":\n if (!this.IFF.currentForm.nodeName)\n this.IFF.currentForm.nodeName = [];\n this.IFF.currentForm.nodeName.push(this.IFF.reader.getString());\n break;\n case \"IINN\":\n if (!this.IFF.currentForm.inputNodeName)\n this.IFF.currentForm.inputNodeName = [];\n this.IFF.currentForm.inputNodeName.push(this.IFF.reader.getString());\n break;\n case \"IINM\":\n if (!this.IFF.currentForm.inputName)\n this.IFF.currentForm.inputName = [];\n this.IFF.currentForm.inputName.push(this.IFF.reader.getString());\n break;\n case \"IONM\":\n if (!this.IFF.currentForm.inputOutputName)\n this.IFF.currentForm.inputOutputName = [];\n this.IFF.currentForm.inputOutputName.push(this.IFF.reader.getString());\n break;\n case \"FNAM\":\n this.IFF.currentForm.fileName = this.IFF.reader.getString();\n break;\n case \"CHAN\":\n if (length === 4)\n this.IFF.currentForm.textureChannel = this.IFF.reader.getIDTag();\n else\n this.IFF.reader.skip(length);\n break;\n case \"SMAN\":\n const maxSmoothingAngle = this.IFF.reader.getFloat32();\n this.IFF.currentSurface.attributes.smooth = maxSmoothingAngle < 0 ? false : true;\n break;\n case \"COLR\":\n this.IFF.currentSurface.attributes.Color = { value: this.IFF.reader.getFloat32Array(3) };\n this.IFF.reader.skip(2);\n break;\n case \"LUMI\":\n this.IFF.currentSurface.attributes.Luminosity = { value: this.IFF.reader.getFloat32() };\n this.IFF.reader.skip(2);\n break;\n case \"SPEC\":\n this.IFF.currentSurface.attributes.Specular = { value: this.IFF.reader.getFloat32() };\n this.IFF.reader.skip(2);\n break;\n case \"DIFF\":\n this.IFF.currentSurface.attributes.Diffuse = { value: this.IFF.reader.getFloat32() };\n this.IFF.reader.skip(2);\n break;\n case \"REFL\":\n this.IFF.currentSurface.attributes.Reflection = { value: this.IFF.reader.getFloat32() };\n this.IFF.reader.skip(2);\n break;\n case \"GLOS\":\n this.IFF.currentSurface.attributes.Glossiness = { value: this.IFF.reader.getFloat32() };\n this.IFF.reader.skip(2);\n break;\n case \"TRAN\":\n this.IFF.currentSurface.attributes.opacity = this.IFF.reader.getFloat32();\n this.IFF.reader.skip(2);\n break;\n case \"BUMP\":\n this.IFF.currentSurface.attributes.bumpStrength = this.IFF.reader.getFloat32();\n this.IFF.reader.skip(2);\n break;\n case \"SIDE\":\n this.IFF.currentSurface.attributes.side = this.IFF.reader.getUint16();\n break;\n case \"RIMG\":\n this.IFF.currentSurface.attributes.reflectionMap = this.IFF.reader.getVariableLengthIndex();\n break;\n case \"RIND\":\n this.IFF.currentSurface.attributes.refractiveIndex = this.IFF.reader.getFloat32();\n this.IFF.reader.skip(2);\n break;\n case \"TIMG\":\n this.IFF.currentSurface.attributes.refractionMap = this.IFF.reader.getVariableLengthIndex();\n break;\n case \"IMAP\":\n this.IFF.currentSurface.attributes.imageMapIndex = this.IFF.reader.getUint32();\n break;\n case \"IUVI\":\n this.IFF.currentNode.UVChannel = this.IFF.reader.getString(length);\n break;\n case \"IUTL\":\n this.IFF.currentNode.widthWrappingMode = this.IFF.reader.getUint32();\n break;\n case \"IVTL\":\n this.IFF.currentNode.heightWrappingMode = this.IFF.reader.getUint32();\n break;\n default:\n this.IFF.parseUnknownCHUNK(blockID, length);\n }\n if (blockID != \"FORM\") {\n this.IFF.debugger.node = 1;\n this.IFF.debugger.nodeID = blockID;\n this.IFF.debugger.log();\n }\n if (this.IFF.reader.offset >= this.IFF.currentFormEnd) {\n this.IFF.currentForm = this.IFF.parentForm;\n }\n }\n}\nexport {\n LWO3Parser\n};\n//# sourceMappingURL=LWO3Parser.js.map\n","import { LWO2Parser } from \"./LWO2Parser.js\";\nimport { LWO3Parser } from \"./LWO3Parser.js\";\nclass IFFParser {\n constructor() {\n this.debugger = new Debugger();\n }\n parse(buffer) {\n this.reader = new DataViewReader(buffer);\n this.tree = {\n materials: {},\n layers: [],\n tags: [],\n textures: []\n };\n this.currentLayer = this.tree;\n this.currentForm = this.tree;\n this.parseTopForm();\n if (this.tree.format === void 0)\n return;\n if (this.tree.format === \"LWO2\") {\n this.parser = new LWO2Parser(this);\n while (!this.reader.endOfFile())\n this.parser.parseBlock();\n } else if (this.tree.format === \"LWO3\") {\n this.parser = new LWO3Parser(this);\n while (!this.reader.endOfFile())\n this.parser.parseBlock();\n }\n this.debugger.offset = this.reader.offset;\n this.debugger.closeForms();\n return this.tree;\n }\n parseTopForm() {\n this.debugger.offset = this.reader.offset;\n var topForm = this.reader.getIDTag();\n if (topForm !== \"FORM\") {\n console.warn(\"LWOLoader: Top-level FORM missing.\");\n return;\n }\n var length = this.reader.getUint32();\n this.debugger.dataOffset = this.reader.offset;\n this.debugger.length = length;\n var type = this.reader.getIDTag();\n if (type === \"LWO2\") {\n this.tree.format = type;\n } else if (type === \"LWO3\") {\n this.tree.format = type;\n }\n this.debugger.node = 0;\n this.debugger.nodeID = type;\n this.debugger.log();\n return;\n }\n ///\n // FORM PARSING METHODS\n ///\n // Forms are organisational and can contain any number of sub chunks and sub forms\n // FORM ::= 'FORM'[ID4], length[U4], type[ID4], ( chunk[CHUNK] | form[FORM] ) * }\n parseForm(length) {\n var type = this.reader.getIDTag();\n switch (type) {\n case \"ISEQ\":\n case \"ANIM\":\n case \"STCC\":\n case \"VPVL\":\n case \"VPRM\":\n case \"NROT\":\n case \"WRPW\":\n case \"WRPH\":\n case \"FUNC\":\n case \"FALL\":\n case \"OPAC\":\n case \"GRAD\":\n case \"ENVS\":\n case \"VMOP\":\n case \"VMBG\":\n case \"OMAX\":\n case \"STEX\":\n case \"CKBG\":\n case \"CKEY\":\n case \"VMLA\":\n case \"VMLB\":\n this.debugger.skipped = true;\n this.skipForm(length);\n break;\n case \"META\":\n case \"NNDS\":\n case \"NODS\":\n case \"NDTA\":\n case \"ADAT\":\n case \"AOVS\":\n case \"BLOK\":\n case \"IBGC\":\n case \"IOPC\":\n case \"IIMG\":\n case \"TXTR\":\n this.debugger.length = 4;\n this.debugger.skipped = true;\n break;\n case \"IFAL\":\n case \"ISCL\":\n case \"IPOS\":\n case \"IROT\":\n case \"IBMP\":\n case \"IUTD\":\n case \"IVTD\":\n this.parseTextureNodeAttribute(type);\n break;\n case \"ENVL\":\n this.parseEnvelope(length);\n break;\n case \"CLIP\":\n if (this.tree.format === \"LWO2\") {\n this.parseForm(length);\n } else {\n this.parseClip(length);\n }\n break;\n case \"STIL\":\n this.parseImage();\n break;\n case \"XREF\":\n this.reader.skip(8);\n this.currentForm.referenceTexture = {\n index: this.reader.getUint32(),\n refName: this.reader.getString()\n // internal unique ref\n };\n break;\n case \"IMST\":\n this.parseImageStateForm(length);\n break;\n case \"SURF\":\n this.parseSurfaceForm(length);\n break;\n case \"VALU\":\n this.parseValueForm(length);\n break;\n case \"NTAG\":\n this.parseSubNode(length);\n break;\n case \"ATTR\":\n case \"SATR\":\n this.setupForm(\"attributes\", length);\n break;\n case \"NCON\":\n this.parseConnections(length);\n break;\n case \"SSHA\":\n this.parentForm = this.currentForm;\n this.currentForm = this.currentSurface;\n this.setupForm(\"surfaceShader\", length);\n break;\n case \"SSHD\":\n this.setupForm(\"surfaceShaderData\", length);\n break;\n case \"ENTR\":\n this.parseEntryForm(length);\n break;\n case \"IMAP\":\n this.parseImageMap(length);\n break;\n case \"TAMP\":\n this.parseXVAL(\"amplitude\", length);\n break;\n case \"TMAP\":\n this.setupForm(\"textureMap\", length);\n break;\n case \"CNTR\":\n this.parseXVAL3(\"center\", length);\n break;\n case \"SIZE\":\n this.parseXVAL3(\"scale\", length);\n break;\n case \"ROTA\":\n this.parseXVAL3(\"rotation\", length);\n break;\n default:\n this.parseUnknownForm(type, length);\n }\n this.debugger.node = 0;\n this.debugger.nodeID = type;\n this.debugger.log();\n }\n setupForm(type, length) {\n if (!this.currentForm)\n this.currentForm = this.currentNode;\n this.currentFormEnd = this.reader.offset + length;\n this.parentForm = this.currentForm;\n if (!this.currentForm[type]) {\n this.currentForm[type] = {};\n this.currentForm = this.currentForm[type];\n } else {\n console.warn(\"LWOLoader: form already exists on parent: \", type, this.currentForm);\n this.currentForm = this.currentForm[type];\n }\n }\n skipForm(length) {\n this.reader.skip(length - 4);\n }\n parseUnknownForm(type, length) {\n console.warn(\"LWOLoader: unknown FORM encountered: \" + type, length);\n printBuffer(this.reader.dv.buffer, this.reader.offset, length - 4);\n this.reader.skip(length - 4);\n }\n parseSurfaceForm(length) {\n this.reader.skip(8);\n var name = this.reader.getString();\n var surface = {\n attributes: {},\n // LWO2 style non-node attributes will go here\n connections: {},\n name,\n inputName: name,\n nodes: {},\n source: this.reader.getString()\n };\n this.tree.materials[name] = surface;\n this.currentSurface = surface;\n this.parentForm = this.tree.materials;\n this.currentForm = surface;\n this.currentFormEnd = this.reader.offset + length;\n }\n parseSurfaceLwo2(length) {\n var name = this.reader.getString();\n var surface = {\n attributes: {},\n // LWO2 style non-node attributes will go here\n connections: {},\n name,\n nodes: {},\n source: this.reader.getString()\n };\n this.tree.materials[name] = surface;\n this.currentSurface = surface;\n this.parentForm = this.tree.materials;\n this.currentForm = surface;\n this.currentFormEnd = this.reader.offset + length;\n }\n parseSubNode(length) {\n this.reader.skip(8);\n var name = this.reader.getString();\n var node = {\n name\n };\n this.currentForm = node;\n this.currentNode = node;\n this.currentFormEnd = this.reader.offset + length;\n }\n // collect attributes from all nodes at the top level of a surface\n parseConnections(length) {\n this.currentFormEnd = this.reader.offset + length;\n this.parentForm = this.currentForm;\n this.currentForm = this.currentSurface.connections;\n }\n // surface node attribute data, e.g. specular, roughness etc\n parseEntryForm(length) {\n this.reader.skip(8);\n var name = this.reader.getString();\n this.currentForm = this.currentNode.attributes;\n this.setupForm(name, length);\n }\n // parse values from material - doesn't match up to other LWO3 data types\n // sub form of entry form\n parseValueForm() {\n this.reader.skip(8);\n var valueType = this.reader.getString();\n if (valueType === \"double\") {\n this.currentForm.value = this.reader.getUint64();\n } else if (valueType === \"int\") {\n this.currentForm.value = this.reader.getUint32();\n } else if (valueType === \"vparam\") {\n this.reader.skip(24);\n this.currentForm.value = this.reader.getFloat64();\n } else if (valueType === \"vparam3\") {\n this.reader.skip(24);\n this.currentForm.value = this.reader.getFloat64Array(3);\n }\n }\n // holds various data about texture node image state\n // Data other thanmipMapLevel unknown\n parseImageStateForm() {\n this.reader.skip(8);\n this.currentForm.mipMapLevel = this.reader.getFloat32();\n }\n // LWO2 style image data node OR LWO3 textures defined at top level in editor (not as SURF node)\n parseImageMap(length) {\n this.currentFormEnd = this.reader.offset + length;\n this.parentForm = this.currentForm;\n if (!this.currentForm.maps)\n this.currentForm.maps = [];\n var map = {};\n this.currentForm.maps.push(map);\n this.currentForm = map;\n this.reader.skip(10);\n }\n parseTextureNodeAttribute(type) {\n this.reader.skip(28);\n this.reader.skip(20);\n switch (type) {\n case \"ISCL\":\n this.currentNode.scale = this.reader.getFloat32Array(3);\n break;\n case \"IPOS\":\n this.currentNode.position = this.reader.getFloat32Array(3);\n break;\n case \"IROT\":\n this.currentNode.rotation = this.reader.getFloat32Array(3);\n break;\n case \"IFAL\":\n this.currentNode.falloff = this.reader.getFloat32Array(3);\n break;\n case \"IBMP\":\n this.currentNode.amplitude = this.reader.getFloat32();\n break;\n case \"IUTD\":\n this.currentNode.uTiles = this.reader.getFloat32();\n break;\n case \"IVTD\":\n this.currentNode.vTiles = this.reader.getFloat32();\n break;\n }\n this.reader.skip(2);\n }\n // ENVL forms are currently ignored\n parseEnvelope(length) {\n this.reader.skip(length - 4);\n }\n ///\n // CHUNK PARSING METHODS\n ///\n // clips can either be defined inside a surface node, or at the top\n // level and they have a different format in each case\n parseClip(length) {\n var tag = this.reader.getIDTag();\n if (tag === \"FORM\") {\n this.reader.skip(16);\n this.currentNode.fileName = this.reader.getString();\n return;\n }\n this.reader.setOffset(this.reader.offset - 4);\n this.currentFormEnd = this.reader.offset + length;\n this.parentForm = this.currentForm;\n this.reader.skip(8);\n var texture = {\n index: this.reader.getUint32()\n };\n this.tree.textures.push(texture);\n this.currentForm = texture;\n }\n parseClipLwo2(length) {\n var texture = {\n index: this.reader.getUint32(),\n fileName: \"\"\n };\n while (true) {\n var tag = this.reader.getIDTag();\n var n_length = this.reader.getUint16();\n if (tag === \"STIL\") {\n texture.fileName = this.reader.getString();\n break;\n }\n if (n_length >= length) {\n break;\n }\n }\n this.tree.textures.push(texture);\n this.currentForm = texture;\n }\n parseImage() {\n this.reader.skip(8);\n this.currentForm.fileName = this.reader.getString();\n }\n parseXVAL(type, length) {\n var endOffset = this.reader.offset + length - 4;\n this.reader.skip(8);\n this.currentForm[type] = this.reader.getFloat32();\n this.reader.setOffset(endOffset);\n }\n parseXVAL3(type, length) {\n var endOffset = this.reader.offset + length - 4;\n this.reader.skip(8);\n this.currentForm[type] = {\n x: this.reader.getFloat32(),\n y: this.reader.getFloat32(),\n z: this.reader.getFloat32()\n };\n this.reader.setOffset(endOffset);\n }\n // Tags associated with an object\n // OTAG { type[ID4], tag-string[S0] }\n parseObjectTag() {\n if (!this.tree.objectTags)\n this.tree.objectTags = {};\n this.tree.objectTags[this.reader.getIDTag()] = {\n tagString: this.reader.getString()\n };\n }\n // Signals the start of a new layer. All the data chunks which follow will be included in this layer until another layer chunk is encountered.\n // LAYR: number[U2], flags[U2], pivot[VEC12], name[S0], parent[U2]\n parseLayer(length) {\n var layer = {\n number: this.reader.getUint16(),\n flags: this.reader.getUint16(),\n // If the least significant bit of flags is set, the layer is hidden.\n pivot: this.reader.getFloat32Array(3),\n // Note: this seems to be superflous, as the geometry is translated when pivot is present\n name: this.reader.getString()\n };\n this.tree.layers.push(layer);\n this.currentLayer = layer;\n var parsedLength = 16 + stringOffset(this.currentLayer.name);\n this.currentLayer.parent = parsedLength < length ? this.reader.getUint16() : -1;\n }\n // VEC12 * ( F4 + F4 + F4 ) array of x,y,z vectors\n // Converting from left to right handed coordinate system:\n // x -> -x and switch material FrontSide -> BackSide\n parsePoints(length) {\n this.currentPoints = [];\n for (var i = 0; i < length / 4; i += 3) {\n this.currentPoints.push(this.reader.getFloat32(), this.reader.getFloat32(), -this.reader.getFloat32());\n }\n }\n // parse VMAP or VMAD\n // Associates a set of floating-point vectors with a set of points.\n // VMAP: { type[ID4], dimension[U2], name[S0], ( vert[VX], value[F4] # dimension ) * }\n // VMAD Associates a set of floating-point vectors with the vertices of specific polygons.\n // Similar to VMAP UVs, but associates with polygon vertices rather than points\n // to solve to problem of UV seams: VMAD chunks are paired with VMAPs of the same name,\n // if they exist. The vector values in the VMAD will then replace those in the\n // corresponding VMAP, but only for calculations involving the specified polygons.\n // VMAD { type[ID4], dimension[U2], name[S0], ( vert[VX], poly[VX], value[F4] # dimension ) * }\n parseVertexMapping(length, discontinuous) {\n var finalOffset = this.reader.offset + length;\n var channelName = this.reader.getString();\n if (this.reader.offset === finalOffset) {\n this.currentForm.UVChannel = channelName;\n return;\n }\n this.reader.setOffset(this.reader.offset - stringOffset(channelName));\n var type = this.reader.getIDTag();\n this.reader.getUint16();\n var name = this.reader.getString();\n var remainingLength = length - 6 - stringOffset(name);\n switch (type) {\n case \"TXUV\":\n this.parseUVMapping(name, finalOffset, discontinuous);\n break;\n case \"MORF\":\n case \"SPOT\":\n this.parseMorphTargets(name, finalOffset, type);\n break;\n case \"APSL\":\n case \"NORM\":\n case \"WGHT\":\n case \"MNVW\":\n case \"PICK\":\n case \"RGB \":\n case \"RGBA\":\n this.reader.skip(remainingLength);\n break;\n default:\n console.warn(\"LWOLoader: unknown vertex map type: \" + type);\n this.reader.skip(remainingLength);\n }\n }\n parseUVMapping(name, finalOffset, discontinuous) {\n var uvIndices = [];\n var polyIndices = [];\n var uvs = [];\n while (this.reader.offset < finalOffset) {\n uvIndices.push(this.reader.getVariableLengthIndex());\n if (discontinuous)\n polyIndices.push(this.reader.getVariableLengthIndex());\n uvs.push(this.reader.getFloat32(), this.reader.getFloat32());\n }\n if (discontinuous) {\n if (!this.currentLayer.discontinuousUVs)\n this.currentLayer.discontinuousUVs = {};\n this.currentLayer.discontinuousUVs[name] = {\n uvIndices,\n polyIndices,\n uvs\n };\n } else {\n if (!this.currentLayer.uvs)\n this.currentLayer.uvs = {};\n this.currentLayer.uvs[name] = {\n uvIndices,\n uvs\n };\n }\n }\n parseMorphTargets(name, finalOffset, type) {\n var indices = [];\n var points = [];\n type = type === \"MORF\" ? \"relative\" : \"absolute\";\n while (this.reader.offset < finalOffset) {\n indices.push(this.reader.getVariableLengthIndex());\n points.push(this.reader.getFloat32(), this.reader.getFloat32(), -this.reader.getFloat32());\n }\n if (!this.currentLayer.morphTargets)\n this.currentLayer.morphTargets = {};\n this.currentLayer.morphTargets[name] = {\n indices,\n points,\n type\n };\n }\n // A list of polygons for the current layer.\n // POLS { type[ID4], ( numvert+flags[U2], vert[VX] # numvert ) * }\n parsePolygonList(length) {\n var finalOffset = this.reader.offset + length;\n var type = this.reader.getIDTag();\n var indices = [];\n var polygonDimensions = [];\n while (this.reader.offset < finalOffset) {\n var numverts = this.reader.getUint16();\n numverts = numverts & 1023;\n polygonDimensions.push(numverts);\n for (var j = 0; j < numverts; j++)\n indices.push(this.reader.getVariableLengthIndex());\n }\n var geometryData = {\n type,\n vertexIndices: indices,\n polygonDimensions,\n points: this.currentPoints\n };\n if (polygonDimensions[0] === 1)\n geometryData.type = \"points\";\n else if (polygonDimensions[0] === 2)\n geometryData.type = \"lines\";\n this.currentLayer.geometry = geometryData;\n }\n // Lists the tag strings that can be associated with polygons by the PTAG chunk.\n // TAGS { tag-string[S0] * }\n parseTagStrings(length) {\n this.tree.tags = this.reader.getStringArray(length);\n }\n // Associates tags of a given type with polygons in the most recent POLS chunk.\n // PTAG { type[ID4], ( poly[VX], tag[U2] ) * }\n parsePolygonTagMapping(length) {\n var finalOffset = this.reader.offset + length;\n var type = this.reader.getIDTag();\n if (type === \"SURF\")\n this.parseMaterialIndices(finalOffset);\n else {\n this.reader.skip(length - 4);\n }\n }\n parseMaterialIndices(finalOffset) {\n this.currentLayer.geometry.materialIndices = [];\n while (this.reader.offset < finalOffset) {\n var polygonIndex = this.reader.getVariableLengthIndex();\n var materialIndex = this.reader.getUint16();\n this.currentLayer.geometry.materialIndices.push(polygonIndex, materialIndex);\n }\n }\n parseUnknownCHUNK(blockID, length) {\n console.warn(\"LWOLoader: unknown chunk type: \" + blockID + \" length: \" + length);\n var data = this.reader.getString(length);\n this.currentForm[blockID] = data;\n }\n}\nclass DataViewReader {\n constructor(buffer) {\n this.dv = new DataView(buffer);\n this.offset = 0;\n this._textDecoder = new TextDecoder();\n this._bytes = new Uint8Array(buffer);\n }\n size() {\n return this.dv.buffer.byteLength;\n }\n setOffset(offset) {\n if (offset > 0 && offset < this.dv.buffer.byteLength) {\n this.offset = offset;\n } else {\n console.error(\"LWOLoader: invalid buffer offset\");\n }\n }\n endOfFile() {\n if (this.offset >= this.size())\n return true;\n return false;\n }\n skip(length) {\n this.offset += length;\n }\n getUint8() {\n var value = this.dv.getUint8(this.offset);\n this.offset += 1;\n return value;\n }\n getUint16() {\n var value = this.dv.getUint16(this.offset);\n this.offset += 2;\n return value;\n }\n getInt32() {\n var value = this.dv.getInt32(this.offset, false);\n this.offset += 4;\n return value;\n }\n getUint32() {\n var value = this.dv.getUint32(this.offset, false);\n this.offset += 4;\n return value;\n }\n getUint64() {\n var low, high;\n high = this.getUint32();\n low = this.getUint32();\n return high * 4294967296 + low;\n }\n getFloat32() {\n var value = this.dv.getFloat32(this.offset, false);\n this.offset += 4;\n return value;\n }\n getFloat32Array(size) {\n var a = [];\n for (var i = 0; i < size; i++) {\n a.push(this.getFloat32());\n }\n return a;\n }\n getFloat64() {\n var value = this.dv.getFloat64(this.offset, this.littleEndian);\n this.offset += 8;\n return value;\n }\n getFloat64Array(size) {\n var a = [];\n for (var i = 0; i < size; i++) {\n a.push(this.getFloat64());\n }\n return a;\n }\n // get variable-length index data type\n // VX ::= index[U2] | (index + 0xFF000000)[U4]\n // If the index value is less than 65,280 (0xFF00),then VX === U2\n // otherwise VX === U4 with bits 24-31 set\n // When reading an index, if the first byte encountered is 255 (0xFF), then\n // the four-byte form is being used and the first byte should be discarded or masked out.\n getVariableLengthIndex() {\n var firstByte = this.getUint8();\n if (firstByte === 255) {\n return this.getUint8() * 65536 + this.getUint8() * 256 + this.getUint8();\n }\n return firstByte * 256 + this.getUint8();\n }\n // An ID tag is a sequence of 4 bytes containing 7-bit ASCII values\n getIDTag() {\n return this.getString(4);\n }\n getString(size) {\n if (size === 0)\n return;\n const start = this.offset;\n let result;\n let length;\n if (size) {\n length = size;\n result = this._textDecoder.decode(new Uint8Array(this.dv.buffer, start, size));\n } else {\n length = this._bytes.indexOf(0, start) - start;\n result = this._textDecoder.decode(new Uint8Array(this.dv.buffer, start, length));\n length++;\n length += length % 2;\n }\n this.skip(length);\n return result;\n }\n getStringArray(size) {\n var a = this.getString(size);\n a = a.split(\"\\0\");\n return a.filter(Boolean);\n }\n}\nclass Debugger {\n constructor() {\n this.active = false;\n this.depth = 0;\n this.formList = [];\n }\n enable() {\n this.active = true;\n }\n log() {\n if (!this.active)\n return;\n var nodeType;\n switch (this.node) {\n case 0:\n nodeType = \"FORM\";\n break;\n case 1:\n nodeType = \"CHK\";\n break;\n case 2:\n nodeType = \"S-CHK\";\n break;\n }\n console.log(\n \"| \".repeat(this.depth) + nodeType,\n this.nodeID,\n `( ${this.offset} ) -> ( ${this.dataOffset + this.length} )`,\n this.node == 0 ? \" {\" : \"\",\n this.skipped ? \"SKIPPED\" : \"\",\n this.node == 0 && this.skipped ? \"}\" : \"\"\n );\n if (this.node == 0 && !this.skipped) {\n this.depth += 1;\n this.formList.push(this.dataOffset + this.length);\n }\n this.skipped = false;\n }\n closeForms() {\n if (!this.active)\n return;\n for (var i = this.formList.length - 1; i >= 0; i--) {\n if (this.offset >= this.formList[i]) {\n this.depth -= 1;\n console.log(\"| \".repeat(this.depth) + \"}\");\n this.formList.splice(-1, 1);\n }\n }\n }\n}\nfunction isEven(num) {\n return num % 2;\n}\nfunction stringOffset(string) {\n return string.length + 1 + (isEven(string.length + 1) ? 1 : 0);\n}\nfunction printBuffer(buffer, from, to) {\n console.log(new TextDecoder().decode(new Uint8Array(buffer, from, to)));\n}\nexport {\n IFFParser\n};\n//# sourceMappingURL=IFFParser.js.map\n","import { Loader, FileLoader, TextureLoader, Points, LineSegments, Mesh, PointsMaterial, LineBasicMaterial, BufferAttribute, MeshPhongMaterial, BackSide, DoubleSide, FrontSide, Vector2, Color, AddOperation, EquirectangularRefractionMapping, EquirectangularReflectionMapping, ClampToEdgeWrapping, MirroredRepeatWrapping, RepeatWrapping, MeshPhysicalMaterial, MeshStandardMaterial, BufferGeometry, Float32BufferAttribute } from \"three\";\nimport { IFFParser } from \"./lwo/IFFParser.js\";\nimport { UV1 } from \"../_polyfill/uv1.js\";\nlet _lwoTree;\nclass LWOLoader extends Loader {\n constructor(manager, parameters = {}) {\n super(manager);\n this.resourcePath = parameters.resourcePath !== void 0 ? parameters.resourcePath : \"\";\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const path = scope.path === \"\" ? extractParentUrl(url, \"Objects\") : scope.path;\n const modelName = url.split(path).pop().split(\".\")[0];\n const loader = new FileLoader(this.manager);\n loader.setPath(scope.path);\n loader.setResponseType(\"arraybuffer\");\n loader.load(\n url,\n function(buffer) {\n try {\n onLoad(scope.parse(buffer, path, modelName));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n parse(iffBuffer, path, modelName) {\n _lwoTree = new IFFParser().parse(iffBuffer);\n const textureLoader = new TextureLoader(this.manager).setPath(this.resourcePath || path).setCrossOrigin(this.crossOrigin);\n return new LWOTreeParser(textureLoader).parse(modelName);\n }\n}\nclass LWOTreeParser {\n constructor(textureLoader) {\n this.textureLoader = textureLoader;\n }\n parse(modelName) {\n this.materials = new MaterialParser(this.textureLoader).parse();\n this.defaultLayerName = modelName;\n this.meshes = this.parseLayers();\n return {\n materials: this.materials,\n meshes: this.meshes\n };\n }\n parseLayers() {\n const meshes = [];\n const finalMeshes = [];\n const geometryParser = new GeometryParser();\n const scope = this;\n _lwoTree.layers.forEach(function(layer) {\n const geometry = geometryParser.parse(layer.geometry, layer);\n const mesh = scope.parseMesh(geometry, layer);\n meshes[layer.number] = mesh;\n if (layer.parent === -1)\n finalMeshes.push(mesh);\n else\n meshes[layer.parent].add(mesh);\n });\n this.applyPivots(finalMeshes);\n return finalMeshes;\n }\n parseMesh(geometry, layer) {\n let mesh;\n const materials = this.getMaterials(geometry.userData.matNames, layer.geometry.type);\n if (UV1 === \"uv2\")\n this.duplicateUVs(geometry, materials);\n if (layer.geometry.type === \"points\")\n mesh = new Points(geometry, materials);\n else if (layer.geometry.type === \"lines\")\n mesh = new LineSegments(geometry, materials);\n else\n mesh = new Mesh(geometry, materials);\n if (layer.name)\n mesh.name = layer.name;\n else\n mesh.name = this.defaultLayerName + \"_layer_\" + layer.number;\n mesh.userData.pivot = layer.pivot;\n return mesh;\n }\n // TODO: may need to be reversed in z to convert LWO to three.js coordinates\n applyPivots(meshes) {\n meshes.forEach(function(mesh) {\n mesh.traverse(function(child) {\n const pivot = child.userData.pivot;\n child.position.x += pivot[0];\n child.position.y += pivot[1];\n child.position.z += pivot[2];\n if (child.parent) {\n const parentPivot = child.parent.userData.pivot;\n child.position.x -= parentPivot[0];\n child.position.y -= parentPivot[1];\n child.position.z -= parentPivot[2];\n }\n });\n });\n }\n getMaterials(namesArray, type) {\n const materials = [];\n const scope = this;\n namesArray.forEach(function(name, i) {\n materials[i] = scope.getMaterialByName(name);\n });\n if (type === \"points\" || type === \"lines\") {\n materials.forEach(function(mat, i) {\n const spec = {\n color: mat.color\n };\n if (type === \"points\") {\n spec.size = 0.1;\n spec.map = mat.map;\n spec.morphTargets = mat.morphTargets;\n materials[i] = new PointsMaterial(spec);\n } else if (type === \"lines\") {\n materials[i] = new LineBasicMaterial(spec);\n }\n });\n }\n const filtered = materials.filter(Boolean);\n if (filtered.length === 1)\n return filtered[0];\n return materials;\n }\n getMaterialByName(name) {\n return this.materials.filter(function(m) {\n return m.name === name;\n })[0];\n }\n // If the material has an aoMap, duplicate UVs\n duplicateUVs(geometry, materials) {\n let duplicateUVs = false;\n if (!Array.isArray(materials)) {\n if (materials.aoMap)\n duplicateUVs = true;\n } else {\n materials.forEach(function(material) {\n if (material.aoMap)\n duplicateUVs = true;\n });\n }\n if (!duplicateUVs)\n return;\n geometry.setAttribute(\"uv2\", new BufferAttribute(geometry.attributes.uv.array, 2));\n }\n}\nclass MaterialParser {\n constructor(textureLoader) {\n this.textureLoader = textureLoader;\n }\n parse() {\n const materials = [];\n this.textures = {};\n for (const name in _lwoTree.materials) {\n if (_lwoTree.format === \"LWO3\") {\n materials.push(this.parseMaterial(_lwoTree.materials[name], name, _lwoTree.textures));\n } else if (_lwoTree.format === \"LWO2\") {\n materials.push(this.parseMaterialLwo2(_lwoTree.materials[name], name, _lwoTree.textures));\n }\n }\n return materials;\n }\n parseMaterial(materialData, name, textures) {\n let params = {\n name,\n side: this.getSide(materialData.attributes),\n flatShading: this.getSmooth(materialData.attributes)\n };\n const connections = this.parseConnections(materialData.connections, materialData.nodes);\n const maps = this.parseTextureNodes(connections.maps);\n this.parseAttributeImageMaps(connections.attributes, textures, maps, materialData.maps);\n const attributes = this.parseAttributes(connections.attributes, maps);\n this.parseEnvMap(connections, maps, attributes);\n params = Object.assign(maps, params);\n params = Object.assign(params, attributes);\n const materialType = this.getMaterialType(connections.attributes);\n return new materialType(params);\n }\n parseMaterialLwo2(materialData, name) {\n let params = {\n name,\n side: this.getSide(materialData.attributes),\n flatShading: this.getSmooth(materialData.attributes)\n };\n const attributes = this.parseAttributes(materialData.attributes, {});\n params = Object.assign(params, attributes);\n return new MeshPhongMaterial(params);\n }\n // Note: converting from left to right handed coords by switching x -> -x in vertices, and\n // then switching mat FrontSide -> BackSide\n // NB: this means that FrontSide and BackSide have been switched!\n getSide(attributes) {\n if (!attributes.side)\n return BackSide;\n switch (attributes.side) {\n case 0:\n case 1:\n return BackSide;\n case 2:\n return FrontSide;\n case 3:\n return DoubleSide;\n }\n }\n getSmooth(attributes) {\n if (!attributes.smooth)\n return true;\n return !attributes.smooth;\n }\n parseConnections(connections, nodes) {\n const materialConnections = {\n maps: {}\n };\n const inputName = connections.inputName;\n const inputNodeName = connections.inputNodeName;\n const nodeName = connections.nodeName;\n const scope = this;\n inputName.forEach(function(name, index) {\n if (name === \"Material\") {\n const matNode = scope.getNodeByRefName(inputNodeName[index], nodes);\n materialConnections.attributes = matNode.attributes;\n materialConnections.envMap = matNode.fileName;\n materialConnections.name = inputNodeName[index];\n }\n });\n nodeName.forEach(function(name, index) {\n if (name === materialConnections.name) {\n materialConnections.maps[inputName[index]] = scope.getNodeByRefName(inputNodeName[index], nodes);\n }\n });\n return materialConnections;\n }\n getNodeByRefName(refName, nodes) {\n for (const name in nodes) {\n if (nodes[name].refName === refName)\n return nodes[name];\n }\n }\n parseTextureNodes(textureNodes) {\n const maps = {};\n for (const name in textureNodes) {\n const node = textureNodes[name];\n const path = node.fileName;\n if (!path)\n return;\n const texture = this.loadTexture(path);\n if (node.widthWrappingMode !== void 0)\n texture.wrapS = this.getWrappingType(node.widthWrappingMode);\n if (node.heightWrappingMode !== void 0)\n texture.wrapT = this.getWrappingType(node.heightWrappingMode);\n switch (name) {\n case \"Color\":\n maps.map = texture;\n break;\n case \"Roughness\":\n maps.roughnessMap = texture;\n maps.roughness = 0.5;\n break;\n case \"Specular\":\n maps.specularMap = texture;\n maps.specular = 16777215;\n break;\n case \"Luminous\":\n maps.emissiveMap = texture;\n maps.emissive = 8421504;\n break;\n case \"Luminous Color\":\n maps.emissive = 8421504;\n break;\n case \"Metallic\":\n maps.metalnessMap = texture;\n maps.metalness = 0.5;\n break;\n case \"Transparency\":\n case \"Alpha\":\n maps.alphaMap = texture;\n maps.transparent = true;\n break;\n case \"Normal\":\n maps.normalMap = texture;\n if (node.amplitude !== void 0)\n maps.normalScale = new Vector2(node.amplitude, node.amplitude);\n break;\n case \"Bump\":\n maps.bumpMap = texture;\n break;\n }\n }\n if (maps.roughnessMap && maps.specularMap)\n delete maps.specularMap;\n return maps;\n }\n // maps can also be defined on individual material attributes, parse those here\n // This occurs on Standard (Phong) surfaces\n parseAttributeImageMaps(attributes, textures, maps) {\n for (const name in attributes) {\n const attribute = attributes[name];\n if (attribute.maps) {\n const mapData = attribute.maps[0];\n const path = this.getTexturePathByIndex(mapData.imageIndex, textures);\n if (!path)\n return;\n const texture = this.loadTexture(path);\n if (mapData.wrap !== void 0)\n texture.wrapS = this.getWrappingType(mapData.wrap.w);\n if (mapData.wrap !== void 0)\n texture.wrapT = this.getWrappingType(mapData.wrap.h);\n switch (name) {\n case \"Color\":\n maps.map = texture;\n break;\n case \"Diffuse\":\n maps.aoMap = texture;\n break;\n case \"Roughness\":\n maps.roughnessMap = texture;\n maps.roughness = 1;\n break;\n case \"Specular\":\n maps.specularMap = texture;\n maps.specular = 16777215;\n break;\n case \"Luminosity\":\n maps.emissiveMap = texture;\n maps.emissive = 8421504;\n break;\n case \"Metallic\":\n maps.metalnessMap = texture;\n maps.metalness = 1;\n break;\n case \"Transparency\":\n case \"Alpha\":\n maps.alphaMap = texture;\n maps.transparent = true;\n break;\n case \"Normal\":\n maps.normalMap = texture;\n break;\n case \"Bump\":\n maps.bumpMap = texture;\n break;\n }\n }\n }\n }\n parseAttributes(attributes, maps) {\n const params = {};\n if (attributes.Color && !maps.map) {\n params.color = new Color().fromArray(attributes.Color.value);\n } else {\n params.color = new Color();\n }\n if (attributes.Transparency && attributes.Transparency.value !== 0) {\n params.opacity = 1 - attributes.Transparency.value;\n params.transparent = true;\n }\n if (attributes[\"Bump Height\"])\n params.bumpScale = attributes[\"Bump Height\"].value * 0.1;\n if (attributes[\"Refraction Index\"])\n params.refractionRatio = 1 / attributes[\"Refraction Index\"].value;\n this.parsePhysicalAttributes(params, attributes, maps);\n this.parseStandardAttributes(params, attributes, maps);\n this.parsePhongAttributes(params, attributes, maps);\n return params;\n }\n parsePhysicalAttributes(params, attributes) {\n if (attributes.Clearcoat && attributes.Clearcoat.value > 0) {\n params.clearcoat = attributes.Clearcoat.value;\n if (attributes[\"Clearcoat Gloss\"]) {\n params.clearcoatRoughness = 0.5 * (1 - attributes[\"Clearcoat Gloss\"].value);\n }\n }\n }\n parseStandardAttributes(params, attributes, maps) {\n if (attributes.Luminous) {\n params.emissiveIntensity = attributes.Luminous.value;\n if (attributes[\"Luminous Color\"] && !maps.emissive) {\n params.emissive = new Color().fromArray(attributes[\"Luminous Color\"].value);\n } else {\n params.emissive = new Color(8421504);\n }\n }\n if (attributes.Roughness && !maps.roughnessMap)\n params.roughness = attributes.Roughness.value;\n if (attributes.Metallic && !maps.metalnessMap)\n params.metalness = attributes.Metallic.value;\n }\n parsePhongAttributes(params, attributes, maps) {\n if (attributes.Diffuse)\n params.color.multiplyScalar(attributes.Diffuse.value);\n if (attributes.Reflection) {\n params.reflectivity = attributes.Reflection.value;\n params.combine = AddOperation;\n }\n if (attributes.Luminosity) {\n params.emissiveIntensity = attributes.Luminosity.value;\n if (!maps.emissiveMap && !maps.map) {\n params.emissive = params.color;\n } else {\n params.emissive = new Color(8421504);\n }\n }\n if (!attributes.Roughness && attributes.Specular && !maps.specularMap) {\n if (attributes[\"Color Highlight\"]) {\n params.specular = new Color().setScalar(attributes.Specular.value).lerp(params.color.clone().multiplyScalar(attributes.Specular.value), attributes[\"Color Highlight\"].value);\n } else {\n params.specular = new Color().setScalar(attributes.Specular.value);\n }\n }\n if (params.specular && attributes.Glossiness) {\n params.shininess = 7 + Math.pow(2, attributes.Glossiness.value * 12 + 2);\n }\n }\n parseEnvMap(connections, maps, attributes) {\n if (connections.envMap) {\n const envMap = this.loadTexture(connections.envMap);\n if (attributes.transparent && attributes.opacity < 0.999) {\n envMap.mapping = EquirectangularRefractionMapping;\n if (attributes.reflectivity !== void 0) {\n delete attributes.reflectivity;\n delete attributes.combine;\n }\n if (attributes.metalness !== void 0) {\n delete attributes.metalness;\n }\n } else {\n envMap.mapping = EquirectangularReflectionMapping;\n }\n maps.envMap = envMap;\n }\n }\n // get texture defined at top level by its index\n getTexturePathByIndex(index) {\n let fileName = \"\";\n if (!_lwoTree.textures)\n return fileName;\n _lwoTree.textures.forEach(function(texture) {\n if (texture.index === index)\n fileName = texture.fileName;\n });\n return fileName;\n }\n loadTexture(path) {\n if (!path)\n return null;\n const texture = this.textureLoader.load(path, void 0, void 0, function() {\n console.warn(\n \"LWOLoader: non-standard resource hierarchy. Use `resourcePath` parameter to specify root content directory.\"\n );\n });\n return texture;\n }\n // 0 = Reset, 1 = Repeat, 2 = Mirror, 3 = Edge\n getWrappingType(num) {\n switch (num) {\n case 0:\n console.warn('LWOLoader: \"Reset\" texture wrapping type is not supported in three.js');\n return ClampToEdgeWrapping;\n case 1:\n return RepeatWrapping;\n case 2:\n return MirroredRepeatWrapping;\n case 3:\n return ClampToEdgeWrapping;\n }\n }\n getMaterialType(nodeData) {\n if (nodeData.Clearcoat && nodeData.Clearcoat.value > 0)\n return MeshPhysicalMaterial;\n if (nodeData.Roughness)\n return MeshStandardMaterial;\n return MeshPhongMaterial;\n }\n}\nclass GeometryParser {\n parse(geoData, layer) {\n const geometry = new BufferGeometry();\n geometry.setAttribute(\"position\", new Float32BufferAttribute(geoData.points, 3));\n const indices = this.splitIndices(geoData.vertexIndices, geoData.polygonDimensions);\n geometry.setIndex(indices);\n this.parseGroups(geometry, geoData);\n geometry.computeVertexNormals();\n this.parseUVs(geometry, layer, indices);\n this.parseMorphTargets(geometry, layer, indices);\n geometry.translate(-layer.pivot[0], -layer.pivot[1], -layer.pivot[2]);\n return geometry;\n }\n // split quads into tris\n splitIndices(indices, polygonDimensions) {\n const remappedIndices = [];\n let i = 0;\n polygonDimensions.forEach(function(dim) {\n if (dim < 4) {\n for (let k = 0; k < dim; k++)\n remappedIndices.push(indices[i + k]);\n } else if (dim === 4) {\n remappedIndices.push(\n indices[i],\n indices[i + 1],\n indices[i + 2],\n indices[i],\n indices[i + 2],\n indices[i + 3]\n );\n } else if (dim > 4) {\n for (let k = 1; k < dim - 1; k++) {\n remappedIndices.push(indices[i], indices[i + k], indices[i + k + 1]);\n }\n console.warn(\"LWOLoader: polygons with greater than 4 sides are not supported\");\n }\n i += dim;\n });\n return remappedIndices;\n }\n // NOTE: currently ignoring poly indices and assuming that they are intelligently ordered\n parseGroups(geometry, geoData) {\n const tags = _lwoTree.tags;\n const matNames = [];\n let elemSize = 3;\n if (geoData.type === \"lines\")\n elemSize = 2;\n if (geoData.type === \"points\")\n elemSize = 1;\n const remappedIndices = this.splitMaterialIndices(geoData.polygonDimensions, geoData.materialIndices);\n let indexNum = 0;\n const indexPairs = {};\n let prevMaterialIndex;\n let materialIndex;\n let prevStart = 0;\n let currentCount = 0;\n for (let i = 0; i < remappedIndices.length; i += 2) {\n materialIndex = remappedIndices[i + 1];\n if (i === 0)\n matNames[indexNum] = tags[materialIndex];\n if (prevMaterialIndex === void 0)\n prevMaterialIndex = materialIndex;\n if (materialIndex !== prevMaterialIndex) {\n let currentIndex;\n if (indexPairs[tags[prevMaterialIndex]]) {\n currentIndex = indexPairs[tags[prevMaterialIndex]];\n } else {\n currentIndex = indexNum;\n indexPairs[tags[prevMaterialIndex]] = indexNum;\n matNames[indexNum] = tags[prevMaterialIndex];\n indexNum++;\n }\n geometry.addGroup(prevStart, currentCount, currentIndex);\n prevStart += currentCount;\n prevMaterialIndex = materialIndex;\n currentCount = 0;\n }\n currentCount += elemSize;\n }\n if (geometry.groups.length > 0) {\n let currentIndex;\n if (indexPairs[tags[materialIndex]]) {\n currentIndex = indexPairs[tags[materialIndex]];\n } else {\n currentIndex = indexNum;\n indexPairs[tags[materialIndex]] = indexNum;\n matNames[indexNum] = tags[materialIndex];\n }\n geometry.addGroup(prevStart, currentCount, currentIndex);\n }\n geometry.userData.matNames = matNames;\n }\n splitMaterialIndices(polygonDimensions, indices) {\n const remappedIndices = [];\n polygonDimensions.forEach(function(dim, i) {\n if (dim <= 3) {\n remappedIndices.push(indices[i * 2], indices[i * 2 + 1]);\n } else if (dim === 4) {\n remappedIndices.push(indices[i * 2], indices[i * 2 + 1], indices[i * 2], indices[i * 2 + 1]);\n } else {\n for (let k = 0; k < dim - 2; k++) {\n remappedIndices.push(indices[i * 2], indices[i * 2 + 1]);\n }\n }\n });\n return remappedIndices;\n }\n // UV maps:\n // 1: are defined via index into an array of points, not into a geometry\n // - the geometry is also defined by an index into this array, but the indexes may not match\n // 2: there can be any number of UV maps for a single geometry. Here these are combined,\n // \twith preference given to the first map encountered\n // 3: UV maps can be partial - that is, defined for only a part of the geometry\n // 4: UV maps can be VMAP or VMAD (discontinuous, to allow for seams). In practice, most\n // UV maps are defined as partially VMAP and partially VMAD\n // VMADs are currently not supported\n parseUVs(geometry, layer) {\n const remappedUVs = Array.from(Array(geometry.attributes.position.count * 2), function() {\n return 0;\n });\n for (const name in layer.uvs) {\n const uvs = layer.uvs[name].uvs;\n const uvIndices = layer.uvs[name].uvIndices;\n uvIndices.forEach(function(i, j) {\n remappedUVs[i * 2] = uvs[j * 2];\n remappedUVs[i * 2 + 1] = uvs[j * 2 + 1];\n });\n }\n geometry.setAttribute(\"uv\", new Float32BufferAttribute(remappedUVs, 2));\n }\n parseMorphTargets(geometry, layer) {\n let num = 0;\n for (const name in layer.morphTargets) {\n const remappedPoints = geometry.attributes.position.array.slice();\n if (!geometry.morphAttributes.position)\n geometry.morphAttributes.position = [];\n const morphPoints = layer.morphTargets[name].points;\n const morphIndices = layer.morphTargets[name].indices;\n const type = layer.morphTargets[name].type;\n morphIndices.forEach(function(i, j) {\n if (type === \"relative\") {\n remappedPoints[i * 3] += morphPoints[j * 3];\n remappedPoints[i * 3 + 1] += morphPoints[j * 3 + 1];\n remappedPoints[i * 3 + 2] += morphPoints[j * 3 + 2];\n } else {\n remappedPoints[i * 3] = morphPoints[j * 3];\n remappedPoints[i * 3 + 1] = morphPoints[j * 3 + 1];\n remappedPoints[i * 3 + 2] = morphPoints[j * 3 + 2];\n }\n });\n geometry.morphAttributes.position[num] = new Float32BufferAttribute(remappedPoints, 3);\n geometry.morphAttributes.position[num].name = name;\n num++;\n }\n geometry.morphTargetsRelative = false;\n }\n}\nfunction extractParentUrl(url, dir) {\n const index = url.indexOf(dir);\n if (index === -1)\n return \"./\";\n return url.substr(0, index);\n}\nexport {\n LWOLoader\n};\n//# sourceMappingURL=LWOLoader.js.map\n","import { Loader, FileLoader, BufferGeometry, Float32BufferAttribute } from \"three\";\nimport { decodeText } from \"../_polyfill/LoaderUtils.js\";\nclass PLYLoader extends Loader {\n constructor(manager) {\n super(manager);\n this.propertyNameMapping = {};\n }\n load(url, onLoad, onProgress, onError) {\n const scope = this;\n const loader = new FileLoader(this.manager);\n loader.setPath(this.path);\n loader.setResponseType(\"arraybuffer\");\n loader.setRequestHeader(this.requestHeader);\n loader.setWithCredentials(this.withCredentials);\n loader.load(\n url,\n function(text) {\n try {\n onLoad(scope.parse(text));\n } catch (e) {\n if (onError) {\n onError(e);\n } else {\n console.error(e);\n }\n scope.manager.itemError(url);\n }\n },\n onProgress,\n onError\n );\n }\n setPropertyNameMapping(mapping) {\n this.propertyNameMapping = mapping;\n }\n parse(data) {\n function parseHeader(data2) {\n const patternHeader = /ply([\\s\\S]*)end_header\\r?\\n/;\n let headerText = \"\";\n let headerLength = 0;\n const result = patternHeader.exec(data2);\n if (result !== null) {\n headerText = result[1];\n headerLength = new Blob([result[0]]).size;\n }\n const header = {\n comments: [],\n elements: [],\n headerLength,\n objInfo: \"\"\n };\n const lines = headerText.split(\"\\n\");\n let currentElement;\n function make_ply_element_property(propertValues, propertyNameMapping) {\n const property = { type: propertValues[0] };\n if (property.type === \"list\") {\n property.name = propertValues[3];\n property.countType = propertValues[1];\n property.itemType = propertValues[2];\n } else {\n property.name = propertValues[1];\n }\n if (property.name in propertyNameMapping) {\n property.name = propertyNameMapping[property.name];\n }\n return property;\n }\n for (let i = 0; i < lines.length; i++) {\n let line = lines[i];\n line = line.trim();\n if (line === \"\")\n continue;\n const lineValues = line.split(/\\s+/);\n const lineType = lineValues.shift();\n line = lineValues.join(\" \");\n switch (lineType) {\n case \"format\":\n header.format = lineValues[0];\n header.version = lineValues[1];\n break;\n case \"comment\":\n header.comments.push(line);\n break;\n case \"element\":\n if (currentElement !== void 0) {\n header.elements.push(currentElement);\n }\n currentElement = {};\n currentElement.name = lineValues[0];\n currentElement.count = parseInt(lineValues[1]);\n currentElement.properties = [];\n break;\n case \"property\":\n currentElement.properties.push(make_ply_element_property(lineValues, scope.propertyNameMapping));\n break;\n case \"obj_info\":\n header.objInfo = line;\n break;\n default:\n console.log(\"unhandled\", lineType, lineValues);\n }\n }\n if (currentElement !== void 0) {\n header.elements.push(currentElement);\n }\n return header;\n }\n function parseASCIINumber(n, type) {\n switch (type) {\n case \"char\":\n case \"uchar\":\n case \"short\":\n case \"ushort\":\n case \"int\":\n case \"uint\":\n case \"int8\":\n case \"uint8\":\n case \"int16\":\n case \"uint16\":\n case \"int32\":\n case \"uint32\":\n return parseInt(n);\n case \"float\":\n case \"double\":\n case \"float32\":\n case \"float64\":\n return parseFloat(n);\n }\n }\n function parseASCIIElement(properties, line) {\n const values = line.split(/\\s+/);\n const element = {};\n for (let i = 0; i < properties.length; i++) {\n if (properties[i].type === \"list\") {\n const list = [];\n const n = parseASCIINumber(values.shift(), properties[i].countType);\n for (let j = 0; j < n; j++) {\n list.push(parseASCIINumber(values.shift(), properties[i].itemType));\n }\n element[properties[i].name] = list;\n } else {\n element[properties[i].name] = parseASCIINumber(values.shift(), properties[i].type);\n }\n }\n return element;\n }\n function parseASCII(data2, header) {\n const buffer = {\n indices: [],\n vertices: [],\n normals: [],\n uvs: [],\n faceVertexUvs: [],\n colors: []\n };\n let result;\n const patternBody = /end_header\\s([\\s\\S]*)$/;\n let body = \"\";\n if ((result = patternBody.exec(data2)) !== null) {\n body = result[1];\n }\n const lines = body.split(\"\\n\");\n let currentElement = 0;\n let currentElementCount = 0;\n for (let i = 0; i < lines.length; i++) {\n let line = lines[i];\n line = line.trim();\n if (line === \"\") {\n continue;\n }\n if (currentElementCount >= header.elements[currentElement].count) {\n currentElement++;\n currentElementCount = 0;\n }\n const element = parseASCIIElement(header.elements[currentElement].properties, line);\n handleElement(buffer, header.elements[currentElement].name, element);\n currentElementCount++;\n }\n return postProcess(buffer);\n }\n function postProcess(buffer) {\n let geometry2 = new BufferGeometry();\n if (buffer.indices.length > 0) {\n geometry2.setIndex(buffer.indices);\n }\n geometry2.setAttribute(\"position\", new Float32BufferAttribute(buffer.vertices, 3));\n if (buffer.normals.length > 0) {\n geometry2.setAttribute(\"normal\", new Float32BufferAttribute(buffer.normals, 3));\n }\n if (buffer.uvs.length > 0) {\n geometry2.setAttribute(\"uv\", new Float32BufferAttribute(buffer.uvs, 2));\n }\n if (buffer.colors.length > 0) {\n geometry2.setAttribute(\"color\", new Float32BufferAttribute(buffer.colors, 3));\n }\n if (buffer.faceVertexUvs.length > 0) {\n geometry2 = geometry2.toNonIndexed();\n geometry2.setAttribute(\"uv\", new Float32BufferAttribute(buffer.faceVertexUvs, 2));\n }\n geometry2.computeBoundingSphere();\n return geometry2;\n }\n function handleElement(buffer, elementName, element) {\n if (elementName === \"vertex\") {\n buffer.vertices.push(element.x, element.y, element.z);\n if (\"nx\" in element && \"ny\" in element && \"nz\" in element) {\n buffer.normals.push(element.nx, element.ny, element.nz);\n }\n if (\"s\" in element && \"t\" in element) {\n buffer.uvs.push(element.s, element.t);\n }\n if (\"red\" in element && \"green\" in element && \"blue\" in element) {\n buffer.colors.push(element.red / 255, element.green / 255, element.blue / 255);\n }\n } else if (elementName === \"face\") {\n const vertex_indices = element.vertex_indices || element.vertex_index;\n const texcoord = element.texcoord;\n if (vertex_indices.length === 3) {\n buffer.indices.push(vertex_indices[0], vertex_indices[1], vertex_indices[2]);\n if (texcoord && texcoord.length === 6) {\n buffer.faceVertexUvs.push(texcoord[0], texcoord[1]);\n buffer.faceVertexUvs.push(texcoord[2], texcoord[3]);\n buffer.faceVertexUvs.push(texcoord[4], texcoord[5]);\n }\n } else if (vertex_indices.length === 4) {\n buffer.indices.push(vertex_indices[0], vertex_indices[1], vertex_indices[3]);\n buffer.indices.push(vertex_indices[1], vertex_indices[2], vertex_indices[3]);\n }\n }\n }\n function binaryRead(dataview, at, type, little_endian) {\n switch (type) {\n case \"int8\":\n case \"char\":\n return [dataview.getInt8(at), 1];\n case \"uint8\":\n case \"uchar\":\n return [dataview.getUint8(at), 1];\n case \"int16\":\n case \"short\":\n return [dataview.getInt16(at, little_endian), 2];\n case \"uint16\":\n case \"ushort\":\n return [dataview.getUint16(at, little_endian), 2];\n case \"int32\":\n case \"int\":\n return [dataview.getInt32(at, little_endian), 4];\n case \"uint32\":\n case \"uint\":\n return [dataview.getUint32(at, little_endian), 4];\n case \"float32\":\n case \"float\":\n return [dataview.getFloat32(at, little_endian), 4];\n case \"float64\":\n case \"double\":\n return [dataview.getFloat64(at, little_endian), 8];\n }\n }\n function binaryReadElement(dataview, at, properties, little_endian) {\n const element = {};\n let result, read = 0;\n for (let i = 0; i < properties.length; i++) {\n if (properties[i].type === \"list\") {\n const list = [];\n result = binaryRead(dataview, at + read, properties[i].countType, little_endian);\n const n = result[0];\n read += result[1];\n for (let j = 0; j < n; j++) {\n result = binaryRead(dataview, at + read, properties[i].itemType, little_endian);\n list.push(result[0]);\n read += result[1];\n }\n element[properties[i].name] = list;\n } else {\n result = binaryRead(dataview, at + read, properties[i].type, little_endian);\n element[properties[i].name] = result[0];\n read += result[1];\n }\n }\n return [element, read];\n }\n function parseBinary(data2, header) {\n const buffer = {\n indices: [],\n vertices: [],\n normals: [],\n uvs: [],\n faceVertexUvs: [],\n colors: []\n };\n const little_endian = header.format === \"binary_little_endian\";\n const body = new DataView(data2, header.headerLength);\n let result, loc = 0;\n for (let currentElement = 0; currentElement < header.elements.length; currentElement++) {\n for (let currentElementCount = 0; currentElementCount < header.elements[currentElement].count; currentElementCount++) {\n result = binaryReadElement(body, loc, header.elements[currentElement].properties, little_endian);\n loc += result[1];\n const element = result[0];\n handleElement(buffer, header.elements[currentElement].name, element);\n }\n }\n return postProcess(buffer);\n }\n let geometry;\n const scope = this;\n if (data instanceof ArrayBuffer) {\n const text = decodeText(new Uint8Array(data));\n const header = parseHeader(text);\n geometry = header.format === \"ascii\" ? parseASCII(text, header) : parseBinary(data, header);\n } else {\n geometry = parseASCII(data, parseHeader(data));\n }\n return geometry;\n }\n}\nexport {\n PLYLoader\n};\n//# sourceMappingURL=PLYLoader.js.map\n","import { InstancedBufferGeometry, Float32BufferAttribute, InstancedInterleavedBuffer, InterleavedBufferAttribute, WireframeGeometry, Box3, Sphere, Vector3 } from \"three\";\nconst _box = /* @__PURE__ */ new Box3();\nconst _vector = /* @__PURE__ */ new Vector3();\nclass LineSegmentsGeometry extends InstancedBufferGeometry {\n constructor() {\n super();\n this.isLineSegmentsGeometry = true;\n this.type = \"LineSegmentsGeometry\";\n const positions = [-1, 2, 0, 1, 2, 0, -1, 1, 0, 1, 1, 0, -1, 0, 0, 1, 0, 0, -1, -1, 0, 1, -1, 0];\n const uvs = [-1, 2, 1, 2, -1, 1, 1, 1, -1, -1, 1, -1, -1, -2, 1, -2];\n const index = [0, 2, 1, 2, 3, 1, 2, 4, 3, 4, 5, 3, 4, 6, 5, 6, 7, 5];\n this.setIndex(index);\n this.setAttribute(\"position\", new Float32BufferAttribute(positions, 3));\n this.setAttribute(\"uv\", new Float32BufferAttribute(uvs, 2));\n }\n applyMatrix4(matrix) {\n const start = this.attributes.instanceStart;\n const end = this.attributes.instanceEnd;\n if (start !== void 0) {\n start.applyMatrix4(matrix);\n end.applyMatrix4(matrix);\n start.needsUpdate = true;\n }\n if (this.boundingBox !== null) {\n this.computeBoundingBox();\n }\n if (this.boundingSphere !== null) {\n this.computeBoundingSphere();\n }\n return this;\n }\n setPositions(array) {\n let lineSegments;\n if (array instanceof Float32Array) {\n lineSegments = array;\n } else if (Array.isArray(array)) {\n lineSegments = new Float32Array(array);\n }\n const instanceBuffer = new InstancedInterleavedBuffer(lineSegments, 6, 1);\n this.setAttribute(\"instanceStart\", new InterleavedBufferAttribute(instanceBuffer, 3, 0));\n this.setAttribute(\"instanceEnd\", new InterleavedBufferAttribute(instanceBuffer, 3, 3));\n this.computeBoundingBox();\n this.computeBoundingSphere();\n return this;\n }\n setColors(array, itemSize = 3) {\n let colors;\n if (array instanceof Float32Array) {\n colors = array;\n } else if (Array.isArray(array)) {\n colors = new Float32Array(array);\n }\n const instanceColorBuffer = new InstancedInterleavedBuffer(colors, itemSize * 2, 1);\n this.setAttribute(\"instanceColorStart\", new InterleavedBufferAttribute(instanceColorBuffer, itemSize, 0));\n this.setAttribute(\"instanceColorEnd\", new InterleavedBufferAttribute(instanceColorBuffer, itemSize, itemSize));\n return this;\n }\n fromWireframeGeometry(geometry) {\n this.setPositions(geometry.attributes.position.array);\n return this;\n }\n fromEdgesGeometry(geometry) {\n this.setPositions(geometry.attributes.position.array);\n return this;\n }\n fromMesh(mesh) {\n this.fromWireframeGeometry(new WireframeGeometry(mesh.geometry));\n return this;\n }\n fromLineSegments(lineSegments) {\n const geometry = lineSegments.geometry;\n this.setPositions(geometry.attributes.position.array);\n return this;\n }\n computeBoundingBox() {\n if (this.boundingBox === null) {\n this.boundingBox = new Box3();\n }\n const start = this.attributes.instanceStart;\n const end = this.attributes.instanceEnd;\n if (start !== void 0 && end !== void 0) {\n this.boundingBox.setFromBufferAttribute(start);\n _box.setFromBufferAttribute(end);\n this.boundingBox.union(_box);\n }\n }\n computeBoundingSphere() {\n if (this.boundingSphere === null) {\n this.boundingSphere = new Sphere();\n }\n if (this.boundingBox === null) {\n this.computeBoundingBox();\n }\n const start = this.attributes.instanceStart;\n const end = this.attributes.instanceEnd;\n if (start !== void 0 && end !== void 0) {\n const center = this.boundingSphere.center;\n this.boundingBox.getCenter(center);\n let maxRadiusSq = 0;\n for (let i = 0, il = start.count; i < il; i++) {\n _vector.fromBufferAttribute(start, i);\n maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector));\n _vector.fromBufferAttribute(end, i);\n maxRadiusSq = Math.max(maxRadiusSq, center.distanceToSquared(_vector));\n }\n this.boundingSphere.radius = Math.sqrt(maxRadiusSq);\n if (isNaN(this.boundingSphere.radius)) {\n console.error(\n \"THREE.LineSegmentsGeometry.computeBoundingSphere(): Computed radius is NaN. The instanced position data is likely to have NaN values.\",\n this\n );\n }\n }\n }\n toJSON() {\n }\n applyMatrix(matrix) {\n console.warn(\"THREE.LineSegmentsGeometry: applyMatrix() has been renamed to applyMatrix4().\");\n return this.applyMatrix4(matrix);\n }\n}\nexport {\n LineSegmentsGeometry\n};\n//# sourceMappingURL=LineSegmentsGeometry.js.map\n","import { LineSegmentsGeometry } from \"./LineSegmentsGeometry.js\";\nclass LineGeometry extends LineSegmentsGeometry {\n constructor() {\n super();\n this.isLineGeometry = true;\n this.type = \"LineGeometry\";\n }\n setPositions(array) {\n const length = array.length - 3;\n const points = new Float32Array(2 * length);\n for (let i = 0; i < length; i += 3) {\n points[2 * i] = array[i];\n points[2 * i + 1] = array[i + 1];\n points[2 * i + 2] = array[i + 2];\n points[2 * i + 3] = array[i + 3];\n points[2 * i + 4] = array[i + 4];\n points[2 * i + 5] = array[i + 5];\n }\n super.setPositions(points);\n return this;\n }\n setColors(array, itemSize = 3) {\n const length = array.length - itemSize;\n const colors = new Float32Array(2 * length);\n if (itemSize === 3) {\n for (let i = 0; i < length; i += itemSize) {\n colors[2 * i] = array[i];\n colors[2 * i + 1] = array[i + 1];\n colors[2 * i + 2] = array[i + 2];\n colors[2 * i + 3] = array[i + 3];\n colors[2 * i + 4] = array[i + 4];\n colors[2 * i + 5] = array[i + 5];\n }\n } else {\n for (let i = 0; i < length; i += itemSize) {\n colors[2 * i] = array[i];\n colors[2 * i + 1] = array[i + 1];\n colors[2 * i + 2] = array[i + 2];\n colors[2 * i + 3] = array[i + 3];\n colors[2 * i + 4] = array[i + 4];\n colors[2 * i + 5] = array[i + 5];\n colors[2 * i + 6] = array[i + 6];\n colors[2 * i + 7] = array[i + 7];\n }\n }\n super.setColors(colors, itemSize);\n return this;\n }\n fromLine(line) {\n const geometry = line.geometry;\n this.setPositions(geometry.attributes.position.array);\n return this;\n }\n}\nexport {\n LineGeometry\n};\n//# sourceMappingURL=LineGeometry.js.map\n","import { ShaderMaterial, UniformsUtils, UniformsLib, Vector2 } from \"three\";\nimport { version } from \"../_polyfill/constants.js\";\nclass LineMaterial extends ShaderMaterial {\n constructor(parameters) {\n super({\n type: \"LineMaterial\",\n uniforms: UniformsUtils.clone(\n UniformsUtils.merge([\n UniformsLib.common,\n UniformsLib.fog,\n {\n worldUnits: { value: 1 },\n linewidth: { value: 1 },\n resolution: { value: new Vector2(1, 1) },\n dashOffset: { value: 0 },\n dashScale: { value: 1 },\n dashSize: { value: 1 },\n gapSize: { value: 1 }\n // todo FIX - maybe change to totalSize\n }\n ])\n ),\n vertexShader: (\n /* glsl */\n `\n\t\t\t\t#include <common>\n\t\t\t\t#include <fog_pars_vertex>\n\t\t\t\t#include <logdepthbuf_pars_vertex>\n\t\t\t\t#include <clipping_planes_pars_vertex>\n\n\t\t\t\tuniform float linewidth;\n\t\t\t\tuniform vec2 resolution;\n\n\t\t\t\tattribute vec3 instanceStart;\n\t\t\t\tattribute vec3 instanceEnd;\n\n\t\t\t\t#ifdef USE_COLOR\n\t\t\t\t\t#ifdef USE_LINE_COLOR_ALPHA\n\t\t\t\t\t\tvarying vec4 vLineColor;\n\t\t\t\t\t\tattribute vec4 instanceColorStart;\n\t\t\t\t\t\tattribute vec4 instanceColorEnd;\n\t\t\t\t\t#else\n\t\t\t\t\t\tvarying vec3 vLineColor;\n\t\t\t\t\t\tattribute vec3 instanceColorStart;\n\t\t\t\t\t\tattribute vec3 instanceColorEnd;\n\t\t\t\t\t#endif\n\t\t\t\t#endif\n\n\t\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\t\tvarying vec4 worldPos;\n\t\t\t\t\tvarying vec3 worldStart;\n\t\t\t\t\tvarying vec3 worldEnd;\n\n\t\t\t\t\t#ifdef USE_DASH\n\n\t\t\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t#else\n\n\t\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\t#endif\n\n\t\t\t\t#ifdef USE_DASH\n\n\t\t\t\t\tuniform float dashScale;\n\t\t\t\t\tattribute float instanceDistanceStart;\n\t\t\t\t\tattribute float instanceDistanceEnd;\n\t\t\t\t\tvarying float vLineDistance;\n\n\t\t\t\t#endif\n\n\t\t\t\tvoid trimSegment( const in vec4 start, inout vec4 end ) {\n\n\t\t\t\t\t// trim end segment so it terminates between the camera plane and the near plane\n\n\t\t\t\t\t// conservative estimate of the near plane\n\t\t\t\t\tfloat a = projectionMatrix[ 2 ][ 2 ]; // 3nd entry in 3th column\n\t\t\t\t\tfloat b = projectionMatrix[ 3 ][ 2 ]; // 3nd entry in 4th column\n\t\t\t\t\tfloat nearEstimate = - 0.5 * b / a;\n\n\t\t\t\t\tfloat alpha = ( nearEstimate - start.z ) / ( end.z - start.z );\n\n\t\t\t\t\tend.xyz = mix( start.xyz, end.xyz, alpha );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\t#ifdef USE_COLOR\n\n\t\t\t\t\t\tvLineColor = ( position.y < 0.5 ) ? instanceColorStart : instanceColorEnd;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#ifdef USE_DASH\n\n\t\t\t\t\t\tvLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;\n\t\t\t\t\t\tvUv = uv;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t\tfloat aspect = resolution.x / resolution.y;\n\n\t\t\t\t\t// camera space\n\t\t\t\t\tvec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );\n\t\t\t\t\tvec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );\n\n\t\t\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\t\t\tworldStart = start.xyz;\n\t\t\t\t\t\tworldEnd = end.xyz;\n\n\t\t\t\t\t#else\n\n\t\t\t\t\t\tvUv = uv;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t\t// special case for perspective projection, and segments that terminate either in, or behind, the camera plane\n\t\t\t\t\t// clearly the gpu firmware has a way of addressing this issue when projecting into ndc space\n\t\t\t\t\t// but we need to perform ndc-space calculations in the shader, so we must address this issue directly\n\t\t\t\t\t// perhaps there is a more elegant solution -- WestLangley\n\n\t\t\t\t\tbool perspective = ( projectionMatrix[ 2 ][ 3 ] == - 1.0 ); // 4th entry in the 3rd column\n\n\t\t\t\t\tif ( perspective ) {\n\n\t\t\t\t\t\tif ( start.z < 0.0 && end.z >= 0.0 ) {\n\n\t\t\t\t\t\t\ttrimSegment( start, end );\n\n\t\t\t\t\t\t} else if ( end.z < 0.0 && start.z >= 0.0 ) {\n\n\t\t\t\t\t\t\ttrimSegment( end, start );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t}\n\n\t\t\t\t\t// clip space\n\t\t\t\t\tvec4 clipStart = projectionMatrix * start;\n\t\t\t\t\tvec4 clipEnd = projectionMatrix * end;\n\n\t\t\t\t\t// ndc space\n\t\t\t\t\tvec3 ndcStart = clipStart.xyz / clipStart.w;\n\t\t\t\t\tvec3 ndcEnd = clipEnd.xyz / clipEnd.w;\n\n\t\t\t\t\t// direction\n\t\t\t\t\tvec2 dir = ndcEnd.xy - ndcStart.xy;\n\n\t\t\t\t\t// account for clip-space aspect ratio\n\t\t\t\t\tdir.x *= aspect;\n\t\t\t\t\tdir = normalize( dir );\n\n\t\t\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\t\t\t// get the offset direction as perpendicular to the view vector\n\t\t\t\t\t\tvec3 worldDir = normalize( end.xyz - start.xyz );\n\t\t\t\t\t\tvec3 offset;\n\t\t\t\t\t\tif ( position.y < 0.5 ) {\n\n\t\t\t\t\t\t\toffset = normalize( cross( start.xyz, worldDir ) );\n\n\t\t\t\t\t\t} else {\n\n\t\t\t\t\t\t\toffset = normalize( cross( end.xyz, worldDir ) );\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// sign flip\n\t\t\t\t\t\tif ( position.x < 0.0 ) offset *= - 1.0;\n\n\t\t\t\t\t\tfloat forwardOffset = dot( worldDir, vec3( 0.0, 0.0, 1.0 ) );\n\n\t\t\t\t\t\t// don't extend the line if we're rendering dashes because we\n\t\t\t\t\t\t// won't be rendering the endcaps\n\t\t\t\t\t\t#ifndef USE_DASH\n\n\t\t\t\t\t\t\t// extend the line bounds to encompass endcaps\n\t\t\t\t\t\t\tstart.xyz += - worldDir * linewidth * 0.5;\n\t\t\t\t\t\t\tend.xyz += worldDir * linewidth * 0.5;\n\n\t\t\t\t\t\t\t// shift the position of the quad so it hugs the forward edge of the line\n\t\t\t\t\t\t\toffset.xy -= dir * forwardOffset;\n\t\t\t\t\t\t\toffset.z += 0.5;\n\n\t\t\t\t\t\t#endif\n\n\t\t\t\t\t\t// endcaps\n\t\t\t\t\t\tif ( position.y > 1.0 || position.y < 0.0 ) {\n\n\t\t\t\t\t\t\toffset.xy += dir * 2.0 * forwardOffset;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// adjust for linewidth\n\t\t\t\t\t\toffset *= linewidth * 0.5;\n\n\t\t\t\t\t\t// set the world position\n\t\t\t\t\t\tworldPos = ( position.y < 0.5 ) ? start : end;\n\t\t\t\t\t\tworldPos.xyz += offset;\n\n\t\t\t\t\t\t// project the worldpos\n\t\t\t\t\t\tvec4 clip = projectionMatrix * worldPos;\n\n\t\t\t\t\t\t// shift the depth of the projected points so the line\n\t\t\t\t\t\t// segments overlap neatly\n\t\t\t\t\t\tvec3 clipPose = ( position.y < 0.5 ) ? ndcStart : ndcEnd;\n\t\t\t\t\t\tclip.z = clipPose.z * clip.w;\n\n\t\t\t\t\t#else\n\n\t\t\t\t\t\tvec2 offset = vec2( dir.y, - dir.x );\n\t\t\t\t\t\t// undo aspect ratio adjustment\n\t\t\t\t\t\tdir.x /= aspect;\n\t\t\t\t\t\toffset.x /= aspect;\n\n\t\t\t\t\t\t// sign flip\n\t\t\t\t\t\tif ( position.x < 0.0 ) offset *= - 1.0;\n\n\t\t\t\t\t\t// endcaps\n\t\t\t\t\t\tif ( position.y < 0.0 ) {\n\n\t\t\t\t\t\t\toffset += - dir;\n\n\t\t\t\t\t\t} else if ( position.y > 1.0 ) {\n\n\t\t\t\t\t\t\toffset += dir;\n\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// adjust for linewidth\n\t\t\t\t\t\toffset *= linewidth;\n\n\t\t\t\t\t\t// adjust for clip-space to screen-space conversion // maybe resolution should be based on viewport ...\n\t\t\t\t\t\toffset /= resolution.y;\n\n\t\t\t\t\t\t// select end\n\t\t\t\t\t\tvec4 clip = ( position.y < 0.5 ) ? clipStart : clipEnd;\n\n\t\t\t\t\t\t// back to clip space\n\t\t\t\t\t\toffset *= clip.w;\n\n\t\t\t\t\t\tclip.xy += offset;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t\tgl_Position = clip;\n\n\t\t\t\t\tvec4 mvPosition = ( position.y < 0.5 ) ? start : end; // this is an approximation\n\n\t\t\t\t\t#include <logdepthbuf_vertex>\n\t\t\t\t\t#include <clipping_planes_vertex>\n\t\t\t\t\t#include <fog_vertex>\n\n\t\t\t\t}\n\t\t\t`\n ),\n fragmentShader: (\n /* glsl */\n `\n\t\t\t\tuniform vec3 diffuse;\n\t\t\t\tuniform float opacity;\n\t\t\t\tuniform float linewidth;\n\n\t\t\t\t#ifdef USE_DASH\n\n\t\t\t\t\tuniform float dashOffset;\n\t\t\t\t\tuniform float dashSize;\n\t\t\t\t\tuniform float gapSize;\n\n\t\t\t\t#endif\n\n\t\t\t\tvarying float vLineDistance;\n\n\t\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\t\tvarying vec4 worldPos;\n\t\t\t\t\tvarying vec3 worldStart;\n\t\t\t\t\tvarying vec3 worldEnd;\n\n\t\t\t\t\t#ifdef USE_DASH\n\n\t\t\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\t\t#endif\n\n\t\t\t\t#else\n\n\t\t\t\t\tvarying vec2 vUv;\n\n\t\t\t\t#endif\n\n\t\t\t\t#include <common>\n\t\t\t\t#include <fog_pars_fragment>\n\t\t\t\t#include <logdepthbuf_pars_fragment>\n\t\t\t\t#include <clipping_planes_pars_fragment>\n\n\t\t\t\t#ifdef USE_COLOR\n\t\t\t\t\t#ifdef USE_LINE_COLOR_ALPHA\n\t\t\t\t\t\tvarying vec4 vLineColor;\n\t\t\t\t\t#else\n\t\t\t\t\t\tvarying vec3 vLineColor;\n\t\t\t\t\t#endif\n\t\t\t\t#endif\n\n\t\t\t\tvec2 closestLineToLine(vec3 p1, vec3 p2, vec3 p3, vec3 p4) {\n\n\t\t\t\t\tfloat mua;\n\t\t\t\t\tfloat mub;\n\n\t\t\t\t\tvec3 p13 = p1 - p3;\n\t\t\t\t\tvec3 p43 = p4 - p3;\n\n\t\t\t\t\tvec3 p21 = p2 - p1;\n\n\t\t\t\t\tfloat d1343 = dot( p13, p43 );\n\t\t\t\t\tfloat d4321 = dot( p43, p21 );\n\t\t\t\t\tfloat d1321 = dot( p13, p21 );\n\t\t\t\t\tfloat d4343 = dot( p43, p43 );\n\t\t\t\t\tfloat d2121 = dot( p21, p21 );\n\n\t\t\t\t\tfloat denom = d2121 * d4343 - d4321 * d4321;\n\n\t\t\t\t\tfloat numer = d1343 * d4321 - d1321 * d4343;\n\n\t\t\t\t\tmua = numer / denom;\n\t\t\t\t\tmua = clamp( mua, 0.0, 1.0 );\n\t\t\t\t\tmub = ( d1343 + d4321 * ( mua ) ) / d4343;\n\t\t\t\t\tmub = clamp( mub, 0.0, 1.0 );\n\n\t\t\t\t\treturn vec2( mua, mub );\n\n\t\t\t\t}\n\n\t\t\t\tvoid main() {\n\n\t\t\t\t\t#include <clipping_planes_fragment>\n\n\t\t\t\t\t#ifdef USE_DASH\n\n\t\t\t\t\t\tif ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps\n\n\t\t\t\t\t\tif ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX\n\n\t\t\t\t\t#endif\n\n\t\t\t\t\tfloat alpha = opacity;\n\n\t\t\t\t\t#ifdef WORLD_UNITS\n\n\t\t\t\t\t\t// Find the closest points on the view ray and the line segment\n\t\t\t\t\t\tvec3 rayEnd = normalize( worldPos.xyz ) * 1e5;\n\t\t\t\t\t\tvec3 lineDir = worldEnd - worldStart;\n\t\t\t\t\t\tvec2 params = closestLineToLine( worldStart, worldEnd, vec3( 0.0, 0.0, 0.0 ), rayEnd );\n\n\t\t\t\t\t\tvec3 p1 = worldStart + lineDir * params.x;\n\t\t\t\t\t\tvec3 p2 = rayEnd * params.y;\n\t\t\t\t\t\tvec3 delta = p1 - p2;\n\t\t\t\t\t\tfloat len = length( delta );\n\t\t\t\t\t\tfloat norm = len / linewidth;\n\n\t\t\t\t\t\t#ifndef USE_DASH\n\n\t\t\t\t\t\t\t#ifdef USE_ALPHA_TO_COVERAGE\n\n\t\t\t\t\t\t\t\tfloat dnorm = fwidth( norm );\n\t\t\t\t\t\t\t\talpha = 1.0 - smoothstep( 0.5 - dnorm, 0.5 + dnorm, norm );\n\n\t\t\t\t\t\t\t#else\n\n\t\t\t\t\t\t\t\tif ( norm > 0.5 ) {\n\n\t\t\t\t\t\t\t\t\tdiscard;\n\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t#endif\n\n\t\t\t\t\t\t#endif\n\n\t\t\t\t\t#else\n\n\t\t\t\t\t\t#ifdef USE_ALPHA_TO_COVERAGE\n\n\t\t\t\t\t\t\t// artifacts appear on some hardware if a derivative is taken within a conditional\n\t\t\t\t\t\t\tfloat a = vUv.x;\n\t\t\t\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\t\t\t\tfloat len2 = a * a + b * b;\n\t\t\t\t\t\t\tfloat dlen = fwidth( len2 );\n\n\t\t\t\t\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\t\t\t\t\talpha = 1.0 - smoothstep( 1.0 - dlen, 1.0 + dlen, len2 );\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t#else\n\n\t\t\t\t\t\t\tif ( abs( vUv.y ) > 1.0 ) {\n\n\t\t\t\t\t\t\t\tfloat a = vUv.x;\n\t\t\t\t\t\t\t\tfloat b = ( vUv.y > 0.0 ) ? vUv.y - 1.0 : vUv.y + 1.0;\n\t\t\t\t\t\t\t\tfloat len2 = a * a + b * b;\n\n\t\t\t\t\t\t\t\tif ( len2 > 1.0 ) discard;\n\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t#endif\n\n\t\t\t\t\t#endif\n\n\t\t\t\t\tvec4 diffuseColor = vec4( diffuse, alpha );\n\t\t\t\t\t#ifdef USE_COLOR\n\t\t\t\t\t\t#ifdef USE_LINE_COLOR_ALPHA\n\t\t\t\t\t\t\tdiffuseColor *= vLineColor;\n\t\t\t\t\t\t#else\n\t\t\t\t\t\t\tdiffuseColor.rgb *= vLineColor;\n\t\t\t\t\t\t#endif\n\t\t\t\t\t#endif\n\n\t\t\t\t\t#include <logdepthbuf_fragment>\n\n\t\t\t\t\tgl_FragColor = diffuseColor;\n\n\t\t\t\t\t#include <tonemapping_fragment>\n\t\t\t\t\t#include <${version >= 154 ? \"colorspace_fragment\" : \"encodings_fragment\"}>\n\t\t\t\t\t#include <fog_fragment>\n\t\t\t\t\t#include <premultiplied_alpha_fragment>\n\n\t\t\t\t}\n\t\t\t`\n ),\n clipping: true\n // required for clipping support\n });\n this.isLineMaterial = true;\n this.onBeforeCompile = function() {\n if (this.transparent) {\n this.defines.USE_LINE_COLOR_ALPHA = \"1\";\n } else {\n delete this.defines.USE_LINE_COLOR_ALPHA;\n }\n };\n Object.defineProperties(this, {\n color: {\n enumerable: true,\n get: function() {\n return this.uniforms.diffuse.value;\n },\n set: function(value) {\n this.uniforms.diffuse.value = value;\n }\n },\n worldUnits: {\n enumerable: true,\n get: function() {\n return \"WORLD_UNITS\" in this.defines;\n },\n set: function(value) {\n if (value === true) {\n this.defines.WORLD_UNITS = \"\";\n } else {\n delete this.defines.WORLD_UNITS;\n }\n }\n },\n linewidth: {\n enumerable: true,\n get: function() {\n return this.uniforms.linewidth.value;\n },\n set: function(value) {\n this.uniforms.linewidth.value = value;\n }\n },\n dashed: {\n enumerable: true,\n get: function() {\n return Boolean(\"USE_DASH\" in this.defines);\n },\n set(value) {\n if (Boolean(value) !== Boolean(\"USE_DASH\" in this.defines)) {\n this.needsUpdate = true;\n }\n if (value === true) {\n this.defines.USE_DASH = \"\";\n } else {\n delete this.defines.USE_DASH;\n }\n }\n },\n dashScale: {\n enumerable: true,\n get: function() {\n return this.uniforms.dashScale.value;\n },\n set: function(value) {\n this.uniforms.dashScale.value = value;\n }\n },\n dashSize: {\n enumerable: true,\n get: function() {\n return this.uniforms.dashSize.value;\n },\n set: function(value) {\n this.uniforms.dashSize.value = value;\n }\n },\n dashOffset: {\n enumerable: true,\n get: function() {\n return this.uniforms.dashOffset.value;\n },\n set: function(value) {\n this.uniforms.dashOffset.value = value;\n }\n },\n gapSize: {\n enumerable: true,\n get: function() {\n return this.uniforms.gapSize.value;\n },\n set: function(value) {\n this.uniforms.gapSize.value = value;\n }\n },\n opacity: {\n enumerable: true,\n get: function() {\n return this.uniforms.opacity.value;\n },\n set: function(value) {\n this.uniforms.opacity.value = value;\n }\n },\n resolution: {\n enumerable: true,\n get: function() {\n return this.uniforms.resolution.value;\n },\n set: function(value) {\n this.uniforms.resolution.value.copy(value);\n }\n },\n alphaToCoverage: {\n enumerable: true,\n get: function() {\n return Boolean(\"USE_ALPHA_TO_COVERAGE\" in this.defines);\n },\n set: function(value) {\n if (Boolean(value) !== Boolean(\"USE_ALPHA_TO_COVERAGE\" in this.defines)) {\n this.needsUpdate = true;\n }\n if (value === true) {\n this.defines.USE_ALPHA_TO_COVERAGE = \"\";\n this.extensions.derivatives = true;\n } else {\n delete this.defines.USE_ALPHA_TO_COVERAGE;\n this.extensions.derivatives = false;\n }\n }\n }\n });\n this.setValues(parameters);\n }\n}\nexport {\n LineMaterial\n};\n//# sourceMappingURL=LineMaterial.js.map\n","import { Mesh, InstancedInterleavedBuffer, InterleavedBufferAttribute, Vector3, Vector4 } from \"three\";\nimport { LineSegmentsGeometry } from \"./LineSegmentsGeometry.js\";\nimport { LineMaterial } from \"./LineMaterial.js\";\nconst _start = /* @__PURE__ */ new Vector3();\nconst _end = /* @__PURE__ */ new Vector3();\nconst _viewport = /* @__PURE__ */ new Vector4();\nclass Wireframe extends Mesh {\n constructor(geometry = new LineSegmentsGeometry(), material = new LineMaterial({ color: Math.random() * 16777215 })) {\n super(geometry, material);\n this.isWireframe = true;\n this.type = \"Wireframe\";\n }\n // for backwards-compatibility, but could be a method of LineSegmentsGeometry...\n computeLineDistances() {\n const geometry = this.geometry;\n const instanceStart = geometry.attributes.instanceStart;\n const instanceEnd = geometry.attributes.instanceEnd;\n const lineDistances = new Float32Array(2 * instanceStart.count);\n for (let i = 0, j = 0, l = instanceStart.count; i < l; i++, j += 2) {\n _start.fromBufferAttribute(instanceStart, i);\n _end.fromBufferAttribute(instanceEnd, i);\n lineDistances[j] = j === 0 ? 0 : lineDistances[j - 1];\n lineDistances[j + 1] = lineDistances[j] + _start.distanceTo(_end);\n }\n const instanceDistanceBuffer = new InstancedInterleavedBuffer(lineDistances, 2, 1);\n geometry.setAttribute(\"instanceDistanceStart\", new InterleavedBufferAttribute(instanceDistanceBuffer, 1, 0));\n geometry.setAttribute(\"instanceDistanceEnd\", new InterleavedBufferAttribute(instanceDistanceBuffer, 1, 1));\n return this;\n }\n onBeforeRender(renderer) {\n const uniforms = this.material.uniforms;\n if (uniforms && uniforms.resolution) {\n renderer.getViewport(_viewport);\n this.material.uniforms.resolution.value.set(_viewport.z, _viewport.w);\n }\n }\n}\nexport {\n Wireframe\n};\n//# sourceMappingURL=Wireframe.js.map\n","import { WireframeGeometry } from \"three\";\nimport { LineSegmentsGeometry } from \"./LineSegmentsGeometry.js\";\nclass WireframeGeometry2 extends LineSegmentsGeometry {\n constructor(geometry) {\n super();\n this.isWireframeGeometry2 = true;\n this.type = \"WireframeGeometry2\";\n this.fromWireframeGeometry(new WireframeGeometry(geometry));\n }\n}\nexport {\n WireframeGeometry2\n};\n//# sourceMappingURL=WireframeGeometry2.js.map\n","import { Mesh, InstancedInterleavedBuffer, InterleavedBufferAttribute, Vector4, Vector3, Box3, Sphere, MathUtils, Matrix4, Line3 } from \"three\";\nimport { LineSegmentsGeometry } from \"./LineSegmentsGeometry.js\";\nimport { LineMaterial } from \"./LineMaterial.js\";\nimport { UV1 } from \"../_polyfill/uv1.js\";\nconst _viewport = /* @__PURE__ */ new Vector4();\nconst _start = /* @__PURE__ */ new Vector3();\nconst _end = /* @__PURE__ */ new Vector3();\nconst _start4 = /* @__PURE__ */ new Vector4();\nconst _end4 = /* @__PURE__ */ new Vector4();\nconst _ssOrigin = /* @__PURE__ */ new Vector4();\nconst _ssOrigin3 = /* @__PURE__ */ new Vector3();\nconst _mvMatrix = /* @__PURE__ */ new Matrix4();\nconst _line = /* @__PURE__ */ new Line3();\nconst _closestPoint = /* @__PURE__ */ new Vector3();\nconst _box = /* @__PURE__ */ new Box3();\nconst _sphere = /* @__PURE__ */ new Sphere();\nconst _clipToWorldVector = /* @__PURE__ */ new Vector4();\nlet _ray, _lineWidth;\nfunction getWorldSpaceHalfWidth(camera, distance, resolution) {\n _clipToWorldVector.set(0, 0, -distance, 1).applyMatrix4(camera.projectionMatrix);\n _clipToWorldVector.multiplyScalar(1 / _clipToWorldVector.w);\n _clipToWorldVector.x = _lineWidth / resolution.width;\n _clipToWorldVector.y = _lineWidth / resolution.height;\n _clipToWorldVector.applyMatrix4(camera.projectionMatrixInverse);\n _clipToWorldVector.multiplyScalar(1 / _clipToWorldVector.w);\n return Math.abs(Math.max(_clipToWorldVector.x, _clipToWorldVector.y));\n}\nfunction raycastWorldUnits(lineSegments, intersects) {\n const matrixWorld = lineSegments.matrixWorld;\n const geometry = lineSegments.geometry;\n const instanceStart = geometry.attributes.instanceStart;\n const instanceEnd = geometry.attributes.instanceEnd;\n const segmentCount = Math.min(geometry.instanceCount, instanceStart.count);\n for (let i = 0, l = segmentCount; i < l; i++) {\n _line.start.fromBufferAttribute(instanceStart, i);\n _line.end.fromBufferAttribute(instanceEnd, i);\n _line.applyMatrix4(matrixWorld);\n const pointOnLine = new Vector3();\n const point = new Vector3();\n _ray.distanceSqToSegment(_line.start, _line.end, point, pointOnLine);\n const isInside = point.distanceTo(pointOnLine) < _lineWidth * 0.5;\n if (isInside) {\n intersects.push({\n point,\n pointOnLine,\n distance: _ray.origin.distanceTo(point),\n object: lineSegments,\n face: null,\n faceIndex: i,\n uv: null,\n [UV1]: null\n });\n }\n }\n}\nfunction raycastScreenSpace(lineSegments, camera, intersects) {\n const projectionMatrix = camera.projectionMatrix;\n const material = lineSegments.material;\n const resolution = material.resolution;\n const matrixWorld = lineSegments.matrixWorld;\n const geometry = lineSegments.geometry;\n const instanceStart = geometry.attributes.instanceStart;\n const instanceEnd = geometry.attributes.instanceEnd;\n const segmentCount = Math.min(geometry.instanceCount, instanceStart.count);\n const near = -camera.near;\n _ray.at(1, _ssOrigin);\n _ssOrigin.w = 1;\n _ssOrigin.applyMatrix4(camera.matrixWorldInverse);\n _ssOrigin.applyMatrix4(projectionMatrix);\n _ssOrigin.multiplyScalar(1 / _ssOrigin.w);\n _ssOrigin.x *= resolution.x / 2;\n _ssOrigin.y *= resolution.y / 2;\n _ssOrigin.z = 0;\n _ssOrigin3.copy(_ssOrigin);\n _mvMatrix.multiplyMatrices(camera.matrixWorldInverse, matrixWorld);\n for (let i = 0, l = segmentCount; i < l; i++) {\n _start4.fromBufferAttribute(instanceStart, i);\n _end4.fromBufferAttribute(instanceEnd, i);\n _start4.w = 1;\n _end4.w = 1;\n _start4.applyMatrix4(_mvMatrix);\n _end4.applyMatrix4(_mvMatrix);\n const isBehindCameraNear = _start4.z > near && _end4.z > near;\n if (isBehindCameraNear) {\n continue;\n }\n if (_start4.z > near) {\n const deltaDist = _start4.z - _end4.z;\n const t = (_start4.z - near) / deltaDist;\n _start4.lerp(_end4, t);\n } else if (_end4.z > near) {\n const deltaDist = _end4.z - _start4.z;\n const t = (_end4.z - near) / deltaDist;\n _end4.lerp(_start4, t);\n }\n _start4.applyMatrix4(projectionMatrix);\n _end4.applyMatrix4(projectionMatrix);\n _start4.multiplyScalar(1 / _start4.w);\n _end4.multiplyScalar(1 / _end4.w);\n _start4.x *= resolution.x / 2;\n _start4.y *= resolution.y / 2;\n _end4.x *= resolution.x / 2;\n _end4.y *= resolution.y / 2;\n _line.start.copy(_start4);\n _line.start.z = 0;\n _line.end.copy(_end4);\n _line.end.z = 0;\n const param = _line.closestPointToPointParameter(_ssOrigin3, true);\n _line.at(param, _closestPoint);\n const zPos = MathUtils.lerp(_start4.z, _end4.z, param);\n const isInClipSpace = zPos >= -1 && zPos <= 1;\n const isInside = _ssOrigin3.distanceTo(_closestPoint) < _lineWidth * 0.5;\n if (isInClipSpace && isInside) {\n _line.start.fromBufferAttribute(instanceStart, i);\n _line.end.fromBufferAttribute(instanceEnd, i);\n _line.start.applyMatrix4(matrixWorld);\n _line.end.applyMatrix4(matrixWorld);\n const pointOnLine = new Vector3();\n const point = new Vector3();\n _ray.distanceSqToSegment(_line.start, _line.end, point, pointOnLine);\n intersects.push({\n point,\n pointOnLine,\n distance: _ray.origin.distanceTo(point),\n object: lineSegments,\n face: null,\n faceIndex: i,\n uv: null,\n [UV1]: null\n });\n }\n }\n}\nclass LineSegments2 extends Mesh {\n constructor(geometry = new LineSegmentsGeometry(), material = new LineMaterial({ color: Math.random() * 16777215 })) {\n super(geometry, material);\n this.isLineSegments2 = true;\n this.type = \"LineSegments2\";\n }\n // for backwards-compatibility, but could be a method of LineSegmentsGeometry...\n computeLineDistances() {\n const geometry = this.geometry;\n const instanceStart = geometry.attributes.instanceStart;\n const instanceEnd = geometry.attributes.instanceEnd;\n const lineDistances = new Float32Array(2 * instanceStart.count);\n for (let i = 0, j = 0, l = instanceStart.count; i < l; i++, j += 2) {\n _start.fromBufferAttribute(instanceStart, i);\n _end.fromBufferAttribute(instanceEnd, i);\n lineDistances[j] = j === 0 ? 0 : lineDistances[j - 1];\n lineDistances[j + 1] = lineDistances[j] + _start.distanceTo(_end);\n }\n const instanceDistanceBuffer = new InstancedInterleavedBuffer(lineDistances, 2, 1);\n geometry.setAttribute(\"instanceDistanceStart\", new InterleavedBufferAttribute(instanceDistanceBuffer, 1, 0));\n geometry.setAttribute(\"instanceDistanceEnd\", new InterleavedBufferAttribute(instanceDistanceBuffer, 1, 1));\n return this;\n }\n raycast(raycaster, intersects) {\n const worldUnits = this.material.worldUnits;\n const camera = raycaster.camera;\n if (camera === null && !worldUnits) {\n console.error(\n 'LineSegments2: \"Raycaster.camera\" needs to be set in order to raycast against LineSegments2 while worldUnits is set to false.'\n );\n }\n const threshold = raycaster.params.Line2 !== void 0 ? raycaster.params.Line2.threshold || 0 : 0;\n _ray = raycaster.ray;\n const matrixWorld = this.matrixWorld;\n const geometry = this.geometry;\n const material = this.material;\n _lineWidth = material.linewidth + threshold;\n if (geometry.boundingSphere === null) {\n geometry.computeBoundingSphere();\n }\n _sphere.copy(geometry.boundingSphere).applyMatrix4(matrixWorld);\n let sphereMargin;\n if (worldUnits) {\n sphereMargin = _lineWidth * 0.5;\n } else {\n const distanceToSphere = Math.max(camera.near, _sphere.distanceToPoint(_ray.origin));\n sphereMargin = getWorldSpaceHalfWidth(camera, distanceToSphere, material.resolution);\n }\n _sphere.radius += sphereMargin;\n if (_ray.intersectsSphere(_sphere) === false) {\n return;\n }\n if (geometry.boundingBox === null) {\n geometry.computeBoundingBox();\n }\n _box.copy(geometry.boundingBox).applyMatrix4(matrixWorld);\n let boxMargin;\n if (worldUnits) {\n boxMargin = _lineWidth * 0.5;\n } else {\n const distanceToBox = Math.max(camera.near, _box.distanceToPoint(_ray.origin));\n boxMargin = getWorldSpaceHalfWidth(camera, distanceToBox, material.resolution);\n }\n _box.expandByScalar(boxMargin);\n if (_ray.intersectsBox(_box) === false) {\n return;\n }\n if (worldUnits) {\n raycastWorldUnits(this, intersects);\n } else {\n raycastScreenSpace(this, camera, intersects);\n }\n }\n onBeforeRender(renderer) {\n const uniforms = this.material.uniforms;\n if (uniforms && uniforms.resolution) {\n renderer.getViewport(_viewport);\n this.material.uniforms.resolution.value.set(_viewport.z, _viewport.w);\n }\n }\n}\nexport {\n LineSegments2\n};\n//# sourceMappingURL=LineSegments2.js.map\n","import { LineSegments2 } from \"./LineSegments2.js\";\nimport { LineGeometry } from \"./LineGeometry.js\";\nimport { LineMaterial } from \"./LineMaterial.js\";\nclass Line2 extends LineSegments2 {\n constructor(geometry = new LineGeometry(), material = new LineMaterial({ color: Math.random() * 16777215 })) {\n super(geometry, material);\n this.isLine2 = true;\n this.type = \"Line2\";\n }\n}\nexport {\n Line2\n};\n//# sourceMappingURL=Line2.js.map\n","import { Mesh, ShaderMaterial, SphereGeometry } from \"three\";\nclass LightProbeHelper extends Mesh {\n constructor(lightProbe, size) {\n const material = new ShaderMaterial({\n type: \"LightProbeHelperMaterial\",\n uniforms: {\n sh: { value: lightProbe.sh.coefficients },\n // by reference\n intensity: { value: lightProbe.intensity }\n },\n vertexShader: [\n \"varying vec3 vNormal;\",\n \"void main() {\",\n \"\tvNormal = normalize( normalMatrix * normal );\",\n \"\tgl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\",\n \"}\"\n ].join(\"\\n\"),\n fragmentShader: [\n \"#define RECIPROCAL_PI 0.318309886\",\n \"vec3 inverseTransformDirection( in vec3 normal, in mat4 matrix ) {\",\n \"\t// matrix is assumed to be orthogonal\",\n \"\treturn normalize( ( vec4( normal, 0.0 ) * matrix ).xyz );\",\n \"}\",\n \"// source: https://graphics.stanford.edu/papers/envmap/envmap.pdf\",\n \"vec3 shGetIrradianceAt( in vec3 normal, in vec3 shCoefficients[ 9 ] ) {\",\n \"\t// normal is assumed to have unit length\",\n \"\tfloat x = normal.x, y = normal.y, z = normal.z;\",\n \"\t// band 0\",\n \"\tvec3 result = shCoefficients[ 0 ] * 0.886227;\",\n \"\t// band 1\",\n \"\tresult += shCoefficients[ 1 ] * 2.0 * 0.511664 * y;\",\n \"\tresult += shCoefficients[ 2 ] * 2.0 * 0.511664 * z;\",\n \"\tresult += shCoefficients[ 3 ] * 2.0 * 0.511664 * x;\",\n \"\t// band 2\",\n \"\tresult += shCoefficients[ 4 ] * 2.0 * 0.429043 * x * y;\",\n \"\tresult += shCoefficients[ 5 ] * 2.0 * 0.429043 * y * z;\",\n \"\tresult += shCoefficients[ 6 ] * ( 0.743125 * z * z - 0.247708 );\",\n \"\tresult += shCoefficients[ 7 ] * 2.0 * 0.429043 * x * z;\",\n \"\tresult += shCoefficients[ 8 ] * 0.429043 * ( x * x - y * y );\",\n \"\treturn result;\",\n \"}\",\n \"uniform vec3 sh[ 9 ]; // sh coefficients\",\n \"uniform float intensity; // light probe intensity\",\n \"varying vec3 vNormal;\",\n \"void main() {\",\n \"\tvec3 normal = normalize( vNormal );\",\n \"\tvec3 worldNormal = inverseTransformDirection( normal, viewMatrix );\",\n \"\tvec3 irradiance = shGetIrradianceAt( worldNormal, sh );\",\n \"\tvec3 outgoingLight = RECIPROCAL_PI * irradiance * intensity;\",\n \"\tgl_FragColor = linearToOutputTexel( vec4( outgoingLight, 1.0 ) );\",\n \"}\"\n ].join(\"\\n\")\n });\n const geometry = new SphereGeometry(1, 32, 16);\n super(geometry, material);\n this.lightProbe = lightProbe;\n this.size = size;\n this.type = \"LightProbeHelper\";\n this.onBeforeRender();\n }\n dispose() {\n this.geometry.dispose();\n this.material.dispose();\n }\n onBeforeRender() {\n this.position.copy(this.lightProbe.position);\n this.scale.set(1, 1, 1).multiplyScalar(this.size);\n this.material.uniforms.intensity.value = this.lightProbe.intensity;\n }\n}\nexport {\n LightProbeHelper\n};\n//# sourceMappingURL=LightProbeHelper.js.map\n","var __defProp = Object.defineProperty;\nvar __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;\nvar __publicField = (obj, key, value) => {\n __defNormalProp(obj, typeof key !== \"symbol\" ? key + \"\" : key, value);\n return value;\n};\nimport { Object3D, Mesh, SphereGeometry, MeshBasicMaterial, BufferGeometry, Float32BufferAttribute, Line, LineBasicMaterial, InstancedMesh, Vector3 } from \"three\";\nconst _o = /* @__PURE__ */ new Object3D();\nconst _v = /* @__PURE__ */ new Vector3();\nclass RaycasterHelper extends Object3D {\n constructor(raycaster, numberOfHitsToVisualize = 20) {\n super();\n __publicField(this, \"raycaster\");\n __publicField(this, \"hits\");\n __publicField(this, \"origin\");\n __publicField(this, \"near\");\n __publicField(this, \"far\");\n __publicField(this, \"nearToFar\");\n __publicField(this, \"originToNear\");\n __publicField(this, \"hitPoints\");\n __publicField(this, \"colors\", {\n near: 16777215,\n far: 16777215,\n originToNear: 3355443,\n nearToFar: 16777215,\n origin: [978050, 16711771]\n });\n __publicField(this, \"setColors\", (colors) => {\n const _colors = {\n ...this.colors,\n ...colors\n };\n this.near.material.color.set(_colors.near);\n this.far.material.color.set(_colors.far);\n this.nearToFar.material.color.set(_colors.nearToFar);\n this.originToNear.material.color.set(_colors.originToNear);\n });\n __publicField(this, \"update\", () => {\n var _a;\n const origin = this.raycaster.ray.origin;\n const direction = this.raycaster.ray.direction;\n this.origin.position.copy(origin);\n this.near.position.copy(origin).add(direction.clone().multiplyScalar(this.raycaster.near));\n this.far.position.copy(origin).add(direction.clone().multiplyScalar(this.raycaster.far));\n this.far.lookAt(origin);\n this.near.lookAt(origin);\n let pos = this.nearToFar.geometry.getAttribute(\"position\");\n pos.set([...this.near.position.toArray(), ...this.far.position.toArray()]);\n pos.needsUpdate = true;\n pos = this.originToNear.geometry.getAttribute(\"position\");\n pos.set([...origin.toArray(), ...this.near.position.toArray()]);\n pos.needsUpdate = true;\n for (let i = 0; i < this.numberOfHitsToVisualize; i++) {\n const hit = (_a = this.hits) == null ? void 0 : _a[i];\n if (hit) {\n const { point } = hit;\n _o.position.copy(point);\n _o.scale.setScalar(1);\n } else {\n _o.scale.setScalar(0);\n }\n _o.updateMatrix();\n this.hitPoints.setMatrixAt(i, _o.matrix);\n }\n this.hitPoints.instanceMatrix.needsUpdate = true;\n this.origin.material.color.set(this.hits.length > 0 ? this.colors.origin[0] : this.colors.origin[1]);\n });\n __publicField(this, \"dispose\", () => {\n this.origin.geometry.dispose();\n this.origin.material.dispose();\n this.near.geometry.dispose();\n this.near.material.dispose();\n this.far.geometry.dispose();\n this.far.material.dispose();\n this.nearToFar.geometry.dispose();\n this.nearToFar.material.dispose();\n this.originToNear.geometry.dispose();\n this.originToNear.material.dispose();\n this.hitPoints.dispose();\n });\n this.numberOfHitsToVisualize = numberOfHitsToVisualize;\n this.raycaster = raycaster;\n this.hits = [];\n this.origin = new Mesh(new SphereGeometry(0.04, 32), new MeshBasicMaterial());\n this.origin.name = \"RaycasterHelper_origin\";\n this.origin.raycast = () => null;\n const size = 0.1;\n let geometry = new BufferGeometry();\n geometry.setAttribute(\"position\", new Float32BufferAttribute([\n -size,\n size,\n 0,\n size,\n size,\n 0,\n size,\n -size,\n 0,\n -size,\n -size,\n 0,\n -size,\n size,\n 0\n ], 3));\n this.near = new Line(geometry, new LineBasicMaterial());\n this.near.name = \"RaycasterHelper_near\";\n this.near.raycast = () => null;\n this.far = new Line(geometry, new LineBasicMaterial());\n this.far.name = \"RaycasterHelper_far\";\n this.far.raycast = () => null;\n this.nearToFar = new Line(new BufferGeometry(), new LineBasicMaterial());\n this.nearToFar.name = \"RaycasterHelper_nearToFar\";\n this.nearToFar.raycast = () => null;\n this.nearToFar.geometry.setFromPoints([_v, _v]);\n this.originToNear = new Line(this.nearToFar.geometry.clone(), new LineBasicMaterial());\n this.originToNear.name = \"RaycasterHelper_originToNear\";\n this.originToNear.raycast = () => null;\n this.hitPoints = new InstancedMesh(new SphereGeometry(0.04), new MeshBasicMaterial(), this.numberOfHitsToVisualize);\n this.hitPoints.name = \"RaycasterHelper_hits\";\n this.hitPoints.raycast = () => null;\n this.add(this.nearToFar);\n this.add(this.originToNear);\n this.add(this.near);\n this.add(this.far);\n this.add(this.origin);\n this.add(this.hitPoints);\n this.setColors();\n }\n}\nexport {\n RaycasterHelper\n};\n//# sourceMappingURL=RaycasterHelper.js.map\n","import { LineSegments, BufferGeometry, Float32BufferAttribute, LineBasicMaterial, Vector3 } from \"three\";\nconst _v1 = /* @__PURE__ */ new Vector3();\nconst _v2 = /* @__PURE__ */ new Vector3();\nclass VertexTangentsHelper extends LineSegments {\n constructor(object, size = 1, color = 65535) {\n const geometry = new BufferGeometry();\n const nTangents = object.geometry.attributes.tangent.count;\n const positions = new Float32BufferAttribute(nTangents * 2 * 3, 3);\n geometry.setAttribute(\"position\", positions);\n super(geometry, new LineBasicMaterial({ color, toneMapped: false }));\n this.object = object;\n this.size = size;\n this.type = \"VertexTangentsHelper\";\n this.matrixAutoUpdate = false;\n this.update();\n }\n update() {\n this.object.updateMatrixWorld(true);\n const matrixWorld = this.object.matrixWorld;\n const position = this.geometry.attributes.position;\n const objGeometry = this.object.geometry;\n const objPos = objGeometry.attributes.position;\n const objTan = objGeometry.attributes.tangent;\n let idx = 0;\n for (let j = 0, jl = objPos.count; j < jl; j++) {\n _v1.fromBufferAttribute(objPos, j).applyMatrix4(matrixWorld);\n _v2.fromBufferAttribute(objTan, j);\n _v2.transformDirection(matrixWorld).multiplyScalar(this.size).add(_v1);\n position.setXYZ(idx, _v1.x, _v1.y, _v1.z);\n idx = idx + 1;\n position.setXYZ(idx, _v2.x, _v2.y, _v2.z);\n idx = idx + 1;\n }\n position.needsUpdate = true;\n }\n dispose() {\n this.geometry.dispose();\n this.material.dispose();\n }\n}\nexport {\n VertexTangentsHelper\n};\n//# sourceMappingURL=VertexTangentsHelper.js.map\n","import { Line, BufferGeometry, BufferAttribute, LineBasicMaterial, MathUtils } from \"three\";\nclass PositionalAudioHelper extends Line {\n constructor(audio, range = 1, divisionsInnerAngle = 16, divisionsOuterAngle = 2) {\n const geometry = new BufferGeometry();\n const divisions = divisionsInnerAngle + divisionsOuterAngle * 2;\n const positions = new Float32Array((divisions * 3 + 3) * 3);\n geometry.setAttribute(\"position\", new BufferAttribute(positions, 3));\n const materialInnerAngle = new LineBasicMaterial({ color: 65280 });\n const materialOuterAngle = new LineBasicMaterial({ color: 16776960 });\n super(geometry, [materialOuterAngle, materialInnerAngle]);\n this.type = \"PositionalAudioHelper\";\n this.audio = audio;\n this.range = range;\n this.divisionsInnerAngle = divisionsInnerAngle;\n this.divisionsOuterAngle = divisionsOuterAngle;\n this.update();\n }\n update() {\n const audio = this.audio;\n const range = this.range;\n const divisionsInnerAngle = this.divisionsInnerAngle;\n const divisionsOuterAngle = this.divisionsOuterAngle;\n const coneInnerAngle = MathUtils.degToRad(audio.panner.coneInnerAngle);\n const coneOuterAngle = MathUtils.degToRad(audio.panner.coneOuterAngle);\n const halfConeInnerAngle = coneInnerAngle / 2;\n const halfConeOuterAngle = coneOuterAngle / 2;\n let start = 0;\n let count = 0;\n let i, stride;\n const geometry = this.geometry;\n const positionAttribute = geometry.attributes.position;\n geometry.clearGroups();\n function generateSegment(from, to, divisions, materialIndex) {\n const step = (to - from) / divisions;\n positionAttribute.setXYZ(start, 0, 0, 0);\n count++;\n for (i = from; i < to; i += step) {\n stride = start + count;\n positionAttribute.setXYZ(stride, Math.sin(i) * range, 0, Math.cos(i) * range);\n positionAttribute.setXYZ(\n stride + 1,\n Math.sin(Math.min(i + step, to)) * range,\n 0,\n Math.cos(Math.min(i + step, to)) * range\n );\n positionAttribute.setXYZ(stride + 2, 0, 0, 0);\n count += 3;\n }\n geometry.addGroup(start, count, materialIndex);\n start += count;\n count = 0;\n }\n generateSegment(-halfConeOuterAngle, -halfConeInnerAngle, divisionsOuterAngle, 0);\n generateSegment(-halfConeInnerAngle, halfConeInnerAngle, divisionsInnerAngle, 1);\n generateSegment(halfConeInnerAngle, halfConeOuterAngle, divisionsOuterAngle, 0);\n positionAttribute.needsUpdate = true;\n if (coneInnerAngle === coneOuterAngle)\n this.material[0].visible = false;\n }\n dispose() {\n this.geometry.dispose();\n this.material[0].dispose();\n this.material[1].dispose();\n }\n}\nexport {\n PositionalAudioHelper\n};\n//# sourceMappingURL=PositionalAudioHelper.js.map\n","import { LineSegments, BufferGeometry, Float32BufferAttribute, LineBasicMaterial, Vector3, Matrix3 } from \"three\";\nconst _v1 = /* @__PURE__ */ new Vector3();\nconst _v2 = /* @__PURE__ */ new Vector3();\nconst _normalMatrix = /* @__PURE__ */ new Matrix3();\nclass VertexNormalsHelper extends LineSegments {\n constructor(object, size = 1, color = 16711680) {\n const geometry = new BufferGeometry();\n const nNormals = object.geometry.attributes.normal.count;\n const positions = new Float32BufferAttribute(nNormals * 2 * 3, 3);\n geometry.setAttribute(\"position\", positions);\n super(geometry, new LineBasicMaterial({ color, toneMapped: false }));\n this.object = object;\n this.size = size;\n this.type = \"VertexNormalsHelper\";\n this.matrixAutoUpdate = false;\n this.update();\n }\n update() {\n this.object.updateMatrixWorld(true);\n _normalMatrix.getNormalMatrix(this.object.matrixWorld);\n const matrixWorld = this.object.matrixWorld;\n const position = this.geometry.attributes.position;\n const objGeometry = this.object.geometry;\n if (objGeometry) {\n const objPos = objGeometry.attributes.position;\n const objNorm = objGeometry.attributes.normal;\n let idx = 0;\n for (let j = 0, jl = objPos.count; j < jl; j++) {\n _v1.fromBufferAttribute(objPos, j).applyMatrix4(matrixWorld);\n _v2.fromBufferAttribute(objNorm, j);\n _v2.applyMatrix3(_normalMatrix).normalize().multiplyScalar(this.size).add(_v1);\n position.setXYZ(idx, _v1.x, _v1.y, _v1.z);\n idx = idx + 1;\n position.setXYZ(idx, _v2.x, _v2.y, _v2.z);\n idx = idx + 1;\n }\n }\n position.needsUpdate = true;\n }\n dispose() {\n this.geometry.dispose();\n this.material.dispose();\n }\n}\nexport {\n VertexNormalsHelper\n};\n//# sourceMappingURL=VertexNormalsHelper.js.map\n","import { Line, BufferGeometry, Float32BufferAttribute, LineBasicMaterial, Mesh, MeshBasicMaterial, BackSide } from \"three\";\nclass RectAreaLightHelper extends Line {\n constructor(light, color) {\n const positions = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, -1, 0, 1, 1, 0];\n const geometry = new BufferGeometry();\n geometry.setAttribute(\"position\", new Float32BufferAttribute(positions, 3));\n geometry.computeBoundingSphere();\n const material = new LineBasicMaterial({ fog: false });\n super(geometry, material);\n this.light = light;\n this.color = color;\n this.type = \"RectAreaLightHelper\";\n const positions2 = [1, 1, 0, -1, 1, 0, -1, -1, 0, 1, 1, 0, -1, -1, 0, 1, -1, 0];\n const geometry2 = new BufferGeometry();\n geometry2.setAttribute(\"position\", new Float32BufferAttribute(positions2, 3));\n geometry2.computeBoundingSphere();\n this.add(new Mesh(geometry2, new MeshBasicMaterial({ side: BackSide, fog: false })));\n }\n updateMatrixWorld() {\n this.scale.set(0.5 * this.light.width, 0.5 * this.light.height, 1);\n if (this.color !== void 0) {\n this.material.color.set(this.color);\n this.children[0].material.color.set(this.color);\n } else {\n this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity);\n const c = this.material.color;\n const max = Math.max(c.r, c.g, c.b);\n if (max > 1)\n c.multiplyScalar(1 / max);\n this.children[0].material.color.copy(this.material.color);\n }\n this.matrixWorld.extractRotation(this.light.matrixWorld).scale(this.scale).copyPosition(this.light.matrixWorld);\n this.children[0].matrixWorld.copy(this.matrixWorld);\n }\n dispose() {\n this.geometry.dispose();\n this.material.dispose();\n this.children[0].geometry.dispose();\n this.children[0].material.dispose();\n }\n}\nexport {\n RectAreaLightHelper\n};\n//# sourceMappingURL=RectAreaLightHelper.js.map\n","import { UniformsLib, DataTexture, RGBAFormat, FloatType, UVMapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, DataUtils, HalfFloatType } from \"three\";\nconst RectAreaLightUniformsLib = {\n init() {\n const LTC_MAT_1 = [\n 1,\n 0,\n 0,\n 2e-5,\n 1,\n 0,\n 0,\n 503905e-9,\n 1,\n 0,\n 0,\n 201562e-8,\n 1,\n 0,\n 0,\n 453516e-8,\n 1,\n 0,\n 0,\n 806253e-8,\n 1,\n 0,\n 0,\n 0.0125978,\n 1,\n 0,\n 0,\n 0.018141,\n 1,\n 0,\n 0,\n 0.0246924,\n 1,\n 0,\n 0,\n 0.0322525,\n 1,\n 0,\n 0,\n 0.0408213,\n 1,\n 0,\n 0,\n 0.0503999,\n 1,\n 0,\n 0,\n 0.0609894,\n 1,\n 0,\n 0,\n 0.0725906,\n 1,\n 0,\n 0,\n 0.0852058,\n 1,\n 0,\n 0,\n 0.0988363,\n 1,\n 0,\n 0,\n 0.113484,\n 1,\n 0,\n 0,\n 0.129153,\n 1,\n 0,\n 0,\n 0.145839,\n 1,\n 0,\n 0,\n 0.163548,\n 1,\n 0,\n 0,\n 0.182266,\n 1,\n 0,\n 0,\n 0.201942,\n 1,\n 0,\n 0,\n 0.222314,\n 1,\n 0,\n 0,\n 0.241906,\n 1,\n 0,\n 0,\n 0.262314,\n 1,\n 0,\n 0,\n 0.285754,\n 1,\n 0,\n 0,\n 0.310159,\n 1,\n 0,\n 0,\n 0.335426,\n 1,\n 0,\n 0,\n 0.361341,\n 1,\n 0,\n 0,\n 0.387445,\n 1,\n 0,\n 0,\n 0.412784,\n 1,\n 0,\n 0,\n 0.438197,\n 1,\n 0,\n 0,\n 0.466966,\n 1,\n 0,\n 0,\n 0.49559,\n 1,\n 0,\n 0,\n 0.523448,\n 1,\n 0,\n 0,\n 0.549938,\n 1,\n 0,\n 0,\n 0.57979,\n 1,\n 0,\n 0,\n 0.608746,\n 1,\n 0,\n 0,\n 0.636185,\n 1,\n 0,\n 0,\n 0.664748,\n 1,\n 0,\n 0,\n 0.69313,\n 1,\n 0,\n 0,\n 0.71966,\n 1,\n 0,\n 0,\n 0.747662,\n 1,\n 0,\n 0,\n 0.774023,\n 1,\n 0,\n 0,\n 0.799775,\n 1,\n 0,\n 0,\n 0.825274,\n 1,\n 0,\n 0,\n 0.849156,\n 1,\n 0,\n 0,\n 0.873248,\n 1,\n 0,\n 0,\n 0.89532,\n 1,\n 0,\n 0,\n 0.917565,\n 1,\n 0,\n 0,\n 0.937863,\n 1,\n 0,\n 0,\n 0.958139,\n 1,\n 0,\n 0,\n 0.976563,\n 1,\n 0,\n 0,\n 0.994658,\n 1,\n 0,\n 0,\n 1.0112,\n 1,\n 0,\n 0,\n 1.02712,\n 1,\n 0,\n 0,\n 1.04189,\n 1,\n 0,\n 0,\n 1.05568,\n 1,\n 0,\n 0,\n 1.06877,\n 1,\n 0,\n 0,\n 1.08058,\n 1,\n 0,\n 0,\n 1.09194,\n 1,\n 0,\n 0,\n 1.10191,\n 1,\n 0,\n 0,\n 1.11161,\n 1,\n 0,\n 0,\n 1.1199,\n 1,\n 0,\n 0,\n 1.12813,\n 0.999547,\n -448815e-12,\n 0.0224417,\n 199902e-10,\n 0.999495,\n -113079e-10,\n 0.0224406,\n 503651e-9,\n 0.999496,\n -452317e-10,\n 0.0224406,\n 201461e-8,\n 0.999496,\n -101772e-9,\n 0.0224406,\n 453287e-8,\n 0.999495,\n -180928e-9,\n 0.0224406,\n 805845e-8,\n 0.999497,\n -282702e-9,\n 0.0224406,\n 0.0125914,\n 0.999496,\n -407096e-9,\n 0.0224406,\n 0.0181319,\n 0.999498,\n -554114e-9,\n 0.0224406,\n 0.02468,\n 0.999499,\n -723768e-9,\n 0.0224406,\n 0.0322363,\n 0.999495,\n -916058e-9,\n 0.0224405,\n 0.0408009,\n 0.999499,\n -113101e-8,\n 0.0224408,\n 0.050375,\n 0.999494,\n -136863e-8,\n 0.0224405,\n 0.0609586,\n 0.999489,\n -162896e-8,\n 0.0224401,\n 0.0725537,\n 0.999489,\n -191201e-8,\n 0.0224414,\n 0.0851619,\n 0.999498,\n -221787e-8,\n 0.0224413,\n 0.0987867,\n 0.999492,\n -254642e-8,\n 0.0224409,\n 0.113426,\n 0.999507,\n -289779e-8,\n 0.0224417,\n 0.129088,\n 0.999494,\n -32716e-7,\n 0.0224386,\n 0.145767,\n 0.999546,\n -36673e-7,\n 0.0224424,\n 0.163472,\n 0.999543,\n -408166e-8,\n 0.0224387,\n 0.182182,\n 0.999499,\n -450056e-8,\n 0.0224338,\n 0.201843,\n 0.999503,\n -483661e-8,\n 0.0224203,\n 0.222198,\n 0.999546,\n -452928e-8,\n 0.022315,\n 0.241714,\n 0.999508,\n -587403e-8,\n 0.0224329,\n 0.262184,\n 0.999509,\n -638806e-8,\n 0.0224271,\n 0.285609,\n 0.999501,\n -691028e-8,\n 0.0224166,\n 0.309998,\n 0.999539,\n -741979e-8,\n 0.0223989,\n 0.335262,\n 0.999454,\n -786282e-8,\n 0.0223675,\n 0.361154,\n 0.999529,\n -811928e-8,\n 0.0222828,\n 0.387224,\n 0.999503,\n -799941e-8,\n 0.0221063,\n 0.41252,\n 0.999561,\n -952753e-8,\n 0.0223057,\n 0.438006,\n 0.999557,\n -99134e-7,\n 0.0222065,\n 0.466735,\n 0.999541,\n -0.0100935,\n 0.0220402,\n 0.495332,\n 0.999562,\n -996821e-8,\n 0.0218067,\n 0.523197,\n 0.999556,\n -0.0105031,\n 0.0217096,\n 0.550223,\n 0.999561,\n -0.0114191,\n 0.0217215,\n 0.579498,\n 0.999588,\n -0.0111818,\n 0.0213357,\n 0.608416,\n 0.999633,\n -0.0107725,\n 0.0208689,\n 0.635965,\n 0.999527,\n -0.0121671,\n 0.0210149,\n 0.664476,\n 0.999508,\n -0.0116005,\n 0.020431,\n 0.692786,\n 0.999568,\n -0.0115604,\n 0.0199791,\n 0.719709,\n 0.999671,\n -0.0121117,\n 0.0197415,\n 0.74737,\n 0.999688,\n -0.0110769,\n 0.0188846,\n 0.773692,\n 0.99962,\n -0.0122368,\n 0.0188452,\n 0.799534,\n 0.999823,\n -0.0110325,\n 0.0178001,\n 0.825046,\n 0.999599,\n -0.0114923,\n 0.0174221,\n 0.849075,\n 0.999619,\n -0.0105923,\n 0.0164345,\n 0.872999,\n 0.999613,\n -0.0105988,\n 0.0158227,\n 0.895371,\n 0.99964,\n -979861e-8,\n 0.0148131,\n 0.917364,\n 0.99977,\n -967238e-8,\n 0.0140721,\n 0.938002,\n 0.999726,\n -869175e-8,\n 0.0129543,\n 0.957917,\n 0.99973,\n -866872e-8,\n 0.0122329,\n 0.976557,\n 0.999773,\n -731956e-8,\n 0.0108958,\n 0.994459,\n 0.999811,\n -756027e-8,\n 0.0102715,\n 1.01118,\n 0.999862,\n -583732e-8,\n 878781e-8,\n 1.02701,\n 0.999835,\n -631438e-8,\n 827529e-8,\n 1.04186,\n 0.999871,\n -450785e-8,\n 674583e-8,\n 1.05569,\n 0.999867,\n -486079e-8,\n 621041e-8,\n 1.06861,\n 0.999939,\n -322072e-8,\n 478301e-8,\n 1.08064,\n 0.999918,\n -318199e-8,\n 406395e-8,\n 1.09181,\n 1.00003,\n -193348e-8,\n 280682e-8,\n 1.10207,\n 0.999928,\n -153729e-8,\n 198741e-8,\n 1.11152,\n 0.999933,\n -623666e-9,\n 917714e-9,\n 1.12009,\n 1,\n -102387e-11,\n 907581e-12,\n 1.12813,\n 0.997866,\n -896716e-12,\n 0.0448334,\n 199584e-10,\n 0.997987,\n -225945e-10,\n 0.0448389,\n 502891e-9,\n 0.997987,\n -903781e-10,\n 0.0448388,\n 201156e-8,\n 0.997985,\n -203351e-9,\n 0.0448388,\n 452602e-8,\n 0.997986,\n -361514e-9,\n 0.0448388,\n 804629e-8,\n 0.997987,\n -56487e-8,\n 0.0448389,\n 0.0125724,\n 0.997988,\n -813423e-9,\n 0.0448389,\n 0.0181045,\n 0.997984,\n -110718e-8,\n 0.0448387,\n 0.0246427,\n 0.997985,\n -144616e-8,\n 0.0448388,\n 0.0321875,\n 0.997987,\n -183038e-8,\n 0.044839,\n 0.0407392,\n 0.997983,\n -225987e-8,\n 0.0448387,\n 0.0502986,\n 0.997991,\n -273467e-8,\n 0.0448389,\n 0.0608667,\n 0.997984,\n -325481e-8,\n 0.0448384,\n 0.0724444,\n 0.998002,\n -382043e-8,\n 0.044839,\n 0.0850348,\n 0.997997,\n -443145e-8,\n 0.0448396,\n 0.0986372,\n 0.998007,\n -508796e-8,\n 0.0448397,\n 0.113255,\n 0.998008,\n -578985e-8,\n 0.04484,\n 0.128891,\n 0.998003,\n -653683e-8,\n 0.0448384,\n 0.145548,\n 0.997983,\n -732713e-8,\n 0.0448358,\n 0.163221,\n 0.997985,\n -815454e-8,\n 0.0448358,\n 0.181899,\n 0.998005,\n -898985e-8,\n 0.0448286,\n 0.201533,\n 0.998026,\n -964404e-8,\n 0.0447934,\n 0.221821,\n 0.998055,\n -922677e-8,\n 0.044611,\n 0.241282,\n 0.99804,\n -0.0117361,\n 0.0448245,\n 0.261791,\n 0.998048,\n -0.0127628,\n 0.0448159,\n 0.285181,\n 0.998088,\n -0.0138055,\n 0.0447996,\n 0.30954,\n 0.998058,\n -0.0148206,\n 0.0447669,\n 0.334751,\n 0.998099,\n -0.0156998,\n 0.044697,\n 0.36061,\n 0.998116,\n -0.0161976,\n 0.0445122,\n 0.386603,\n 0.998195,\n -0.015945,\n 0.0441711,\n 0.411844,\n 0.998168,\n -0.0183947,\n 0.0444255,\n 0.43773,\n 0.998184,\n -0.0197913,\n 0.0443809,\n 0.466009,\n 0.998251,\n -0.0201426,\n 0.0440689,\n 0.494574,\n 0.998305,\n -0.0198847,\n 0.0435632,\n 0.522405,\n 0.998273,\n -0.0210577,\n 0.043414,\n 0.549967,\n 0.998254,\n -0.0227901,\n 0.0433943,\n 0.578655,\n 0.998349,\n -0.0223108,\n 0.0426529,\n 0.60758,\n 0.99843,\n -0.0223088,\n 0.042,\n 0.635524,\n 0.998373,\n -0.0241141,\n 0.0418987,\n 0.663621,\n 0.998425,\n -0.0231446,\n 0.0408118,\n 0.691906,\n 0.998504,\n -0.0233684,\n 0.0400565,\n 0.719339,\n 0.998443,\n -0.0241652,\n 0.0394634,\n 0.74643,\n 0.99848,\n -0.0228715,\n 0.0380002,\n 0.773086,\n 0.998569,\n -0.023519,\n 0.0372322,\n 0.798988,\n 0.998619,\n -0.0223108,\n 0.0356468,\n 0.824249,\n 0.998594,\n -0.0223105,\n 0.034523,\n 0.848808,\n 0.998622,\n -0.0213426,\n 0.0328887,\n 0.87227,\n 0.998669,\n -0.0207912,\n 0.0314374,\n 0.895157,\n 0.998705,\n -0.0198416,\n 0.0296925,\n 0.916769,\n 0.998786,\n -0.0189168,\n 0.0279634,\n 0.937773,\n 0.998888,\n -0.0178811,\n 0.0261597,\n 0.957431,\n 0.99906,\n -0.0166845,\n 0.0242159,\n 0.976495,\n 0.999038,\n -0.0155464,\n 0.0222638,\n 0.994169,\n 0.999237,\n -0.0141349,\n 0.0201967,\n 1.01112,\n 0.999378,\n -0.0129324,\n 0.0181744,\n 1.02692,\n 0.999433,\n -0.0113192,\n 0.0159898,\n 1.04174,\n 0.999439,\n -0.0101244,\n 0.0140385,\n 1.05559,\n 0.999614,\n -837456e-8,\n 0.0117826,\n 1.06852,\n 0.999722,\n -721769e-8,\n 983745e-8,\n 1.08069,\n 0.999817,\n -554067e-8,\n 769002e-8,\n 1.09176,\n 0.99983,\n -426961e-8,\n 5782e-6,\n 1.10211,\n 0.999964,\n -273904e-8,\n 374503e-8,\n 1.11152,\n 1.00001,\n -136739e-8,\n 187176e-8,\n 1.12031,\n 0.999946,\n 393227e-10,\n -28919e-9,\n 1.12804,\n 0.995847,\n -13435e-10,\n 0.0671785,\n 19916e-9,\n 0.995464,\n -338387e-10,\n 0.0671527,\n 501622e-9,\n 0.99547,\n -135355e-9,\n 0.0671531,\n 200649e-8,\n 0.995471,\n -30455e-8,\n 0.0671532,\n 451461e-8,\n 0.99547,\n -541423e-9,\n 0.0671531,\n 8026e-6,\n 0.995471,\n -84598e-8,\n 0.0671531,\n 0.0125407,\n 0.99547,\n -121823e-8,\n 0.0671531,\n 0.0180589,\n 0.99547,\n -165817e-8,\n 0.0671531,\n 0.0245806,\n 0.995463,\n -216583e-8,\n 0.0671526,\n 0.0321062,\n 0.995468,\n -274127e-8,\n 0.0671527,\n 0.0406366,\n 0.995474,\n -338447e-8,\n 0.0671534,\n 0.0501717,\n 0.995473,\n -409554e-8,\n 0.0671533,\n 0.0607131,\n 0.995478,\n -487451e-8,\n 0.0671531,\n 0.0722618,\n 0.995476,\n -572148e-8,\n 0.0671532,\n 0.0848191,\n 0.995477,\n -663658e-8,\n 0.0671539,\n 0.0983882,\n 0.995498,\n -761986e-8,\n 0.0671541,\n 0.112972,\n 0.995509,\n -867094e-8,\n 0.0671542,\n 0.128568,\n 0.995509,\n -978951e-8,\n 0.0671531,\n 0.145183,\n 0.995503,\n -0.0109725,\n 0.0671491,\n 0.162808,\n 0.995501,\n -0.012211,\n 0.0671465,\n 0.181441,\n 0.99553,\n -0.0134565,\n 0.0671371,\n 0.201015,\n 0.99555,\n -0.014391,\n 0.0670831,\n 0.221206,\n 0.99558,\n -0.014351,\n 0.0668883,\n 0.240813,\n 0.995577,\n -0.0173997,\n 0.0671055,\n 0.261257,\n 0.995602,\n -0.0191111,\n 0.0671178,\n 0.284467,\n 0.995623,\n -0.0206705,\n 0.0670946,\n 0.308765,\n 0.995658,\n -0.022184,\n 0.0670472,\n 0.333905,\n 0.995705,\n -0.0234832,\n 0.0669417,\n 0.359677,\n 0.995719,\n -0.0241933,\n 0.0666714,\n 0.385554,\n 0.995786,\n -0.0243539,\n 0.066266,\n 0.410951,\n 0.995887,\n -0.0271866,\n 0.0664367,\n 0.437163,\n 0.995944,\n -0.0296012,\n 0.0664931,\n 0.464842,\n 0.996004,\n -0.0301045,\n 0.0660105,\n 0.49332,\n 0.996128,\n -0.0298311,\n 0.0652694,\n 0.521131,\n 0.996253,\n -0.0316426,\n 0.0650739,\n 0.549167,\n 0.996244,\n -0.0339043,\n 0.0649433,\n 0.57737,\n 0.996309,\n -0.033329,\n 0.0638926,\n 0.606073,\n 0.996417,\n -0.0338935,\n 0.0630849,\n 0.634527,\n 0.996372,\n -0.0353104,\n 0.0625083,\n 0.66256,\n 0.996542,\n -0.0348942,\n 0.0611986,\n 0.690516,\n 0.996568,\n -0.0351614,\n 0.060069,\n 0.718317,\n 0.996711,\n -0.0354317,\n 0.0588522,\n 0.74528,\n 0.996671,\n -0.0349513,\n 0.0571902,\n 0.772061,\n 0.996865,\n -0.0345622,\n 0.0555321,\n 0.798089,\n 0.996802,\n -0.0342566,\n 0.0537816,\n 0.823178,\n 0.996992,\n -0.0330862,\n 0.0516095,\n 0.847949,\n 0.996944,\n -0.0324666,\n 0.0495537,\n 0.871431,\n 0.997146,\n -0.0309544,\n 0.0470302,\n 0.894357,\n 0.997189,\n -0.0299372,\n 0.0446043,\n 0.916142,\n 0.997471,\n -0.0281389,\n 0.0418812,\n 0.937193,\n 0.997515,\n -0.0268702,\n 0.0391823,\n 0.957,\n 0.997812,\n -0.0247166,\n 0.0361338,\n 0.975936,\n 0.998027,\n -0.0233525,\n 0.0333945,\n 0.99391,\n 0.998233,\n -0.0209839,\n 0.0301917,\n 1.01075,\n 0.998481,\n -0.0194309,\n 0.027271,\n 1.02669,\n 0.998859,\n -0.0169728,\n 0.0240162,\n 1.04173,\n 0.99894,\n -0.0152322,\n 0.0210517,\n 1.05551,\n 0.999132,\n -0.0127497,\n 0.0178632,\n 1.06856,\n 0.999369,\n -0.0108282,\n 0.014787,\n 1.08054,\n 0.999549,\n -845886e-8,\n 0.0116185,\n 1.09185,\n 0.999805,\n -63937e-7,\n 867209e-8,\n 1.10207,\n 0.99985,\n -414582e-8,\n 566823e-8,\n 1.1117,\n 0.999912,\n -207443e-8,\n 277562e-8,\n 1.12022,\n 1.00001,\n 870226e-10,\n -53766e-9,\n 1.12832,\n 0.991943,\n -178672e-11,\n 0.0893382,\n 198384e-10,\n 0.991952,\n -450183e-10,\n 0.089339,\n 499849e-9,\n 0.991956,\n -180074e-9,\n 0.0893394,\n 19994e-7,\n 0.991955,\n -405167e-9,\n 0.0893393,\n 449867e-8,\n 0.991953,\n -720298e-9,\n 0.0893391,\n 799764e-8,\n 0.991955,\n -112548e-8,\n 0.0893393,\n 0.0124964,\n 0.991957,\n -16207e-7,\n 0.0893395,\n 0.0179951,\n 0.991958,\n -220601e-8,\n 0.0893396,\n 0.0244939,\n 0.991947,\n -288137e-8,\n 0.0893385,\n 0.0319929,\n 0.991962,\n -364693e-8,\n 0.0893399,\n 0.0404933,\n 0.991965,\n -450264e-8,\n 0.0893399,\n 0.049995,\n 0.99198,\n -544862e-8,\n 0.0893411,\n 0.0604995,\n 0.99197,\n -648491e-8,\n 0.0893397,\n 0.0720074,\n 0.991976,\n -761164e-8,\n 0.089341,\n 0.0845207,\n 0.99198,\n -882891e-8,\n 0.0893405,\n 0.0980413,\n 0.991982,\n -0.0101367,\n 0.0893396,\n 0.112571,\n 0.992008,\n -0.011535,\n 0.0893415,\n 0.128115,\n 0.992026,\n -0.0130228,\n 0.0893414,\n 0.144672,\n 0.992064,\n -0.0145966,\n 0.0893418,\n 0.162241,\n 0.992041,\n -0.0162421,\n 0.0893359,\n 0.180801,\n 0.992086,\n -0.0178888,\n 0.0893214,\n 0.200302,\n 0.992157,\n -0.0190368,\n 0.0892401,\n 0.220332,\n 0.992181,\n -0.0195584,\n 0.0890525,\n 0.240144,\n 0.992175,\n -0.0227257,\n 0.0892153,\n 0.260728,\n 0.99221,\n -0.0254195,\n 0.089304,\n 0.283473,\n 0.99222,\n -0.0274883,\n 0.0892703,\n 0.307673,\n 0.992317,\n -0.0294905,\n 0.0892027,\n 0.332729,\n 0.992374,\n -0.0311861,\n 0.0890577,\n 0.358387,\n 0.992505,\n -0.0320656,\n 0.0886994,\n 0.384102,\n 0.992568,\n -0.0329715,\n 0.0883198,\n 0.409767,\n 0.992675,\n -0.036006,\n 0.0883602,\n 0.436145,\n 0.992746,\n -0.0392897,\n 0.0884591,\n 0.463217,\n 0.992873,\n -0.0399337,\n 0.0878287,\n 0.491557,\n 0.992934,\n -0.040231,\n 0.0870108,\n 0.519516,\n 0.993091,\n -0.0422013,\n 0.0865857,\n 0.547741,\n 0.993259,\n -0.0443503,\n 0.0861937,\n 0.575792,\n 0.993455,\n -0.0446368,\n 0.0851187,\n 0.604233,\n 0.993497,\n -0.0454299,\n 0.0840576,\n 0.632925,\n 0.993694,\n -0.0463296,\n 0.0829671,\n 0.660985,\n 0.993718,\n -0.0470619,\n 0.0817185,\n 0.688714,\n 0.993973,\n -0.0468838,\n 0.0800294,\n 0.716743,\n 0.994207,\n -0.046705,\n 0.0781286,\n 0.74377,\n 0.994168,\n -0.0469698,\n 0.0763337,\n 0.77042,\n 0.9945,\n -0.0456816,\n 0.0738184,\n 0.796659,\n 0.994356,\n -0.0455518,\n 0.0715545,\n 0.821868,\n 0.994747,\n -0.0439488,\n 0.0686085,\n 0.846572,\n 0.994937,\n -0.0430056,\n 0.065869,\n 0.870435,\n 0.995142,\n -0.0413414,\n 0.0626446,\n 0.893272,\n 0.995451,\n -0.0396521,\n 0.05929,\n 0.915376,\n 0.995445,\n -0.0378453,\n 0.0558503,\n 0.936196,\n 0.995967,\n -0.0355219,\n 0.0520949,\n 0.956376,\n 0.996094,\n -0.0335146,\n 0.048377,\n 0.975327,\n 0.996622,\n -0.030682,\n 0.0442575,\n 0.993471,\n 0.996938,\n -0.0285504,\n 0.0404693,\n 1.01052,\n 0.997383,\n -0.0253399,\n 0.0360903,\n 1.02637,\n 0.997714,\n -0.0231651,\n 0.0322176,\n 1.04139,\n 0.998249,\n -0.0198138,\n 0.0278433,\n 1.05542,\n 0.998596,\n -0.0174337,\n 0.0238759,\n 1.06846,\n 0.998946,\n -0.0141349,\n 0.0195944,\n 1.08056,\n 0.99928,\n -0.0115603,\n 0.0156279,\n 1.09181,\n 0.999507,\n -839065e-8,\n 0.0114607,\n 1.10213,\n 0.999697,\n -5666e-6,\n 763325e-8,\n 1.11169,\n 0.999869,\n -269902e-8,\n 364946e-8,\n 1.12042,\n 1.00001,\n 623836e-10,\n -319288e-10,\n 1.12832,\n 0.987221,\n -222675e-11,\n 0.111332,\n 197456e-10,\n 0.98739,\n -561116e-10,\n 0.111351,\n 497563e-9,\n 0.987448,\n -224453e-9,\n 0.111357,\n 199031e-8,\n 0.987441,\n -505019e-9,\n 0.111357,\n 44782e-7,\n 0.987442,\n -897816e-9,\n 0.111357,\n 796129e-8,\n 0.987442,\n -140284e-8,\n 0.111357,\n 0.0124396,\n 0.987444,\n -202012e-8,\n 0.111357,\n 0.0179132,\n 0.987442,\n -274964e-8,\n 0.111357,\n 0.0243824,\n 0.987446,\n -359147e-8,\n 0.111357,\n 0.0318474,\n 0.987435,\n -454562e-8,\n 0.111356,\n 0.0403086,\n 0.987461,\n -561225e-8,\n 0.111358,\n 0.0497678,\n 0.987458,\n -679125e-8,\n 0.111358,\n 0.0602239,\n 0.987443,\n -80828e-7,\n 0.111356,\n 0.0716792,\n 0.987476,\n -94872e-7,\n 0.111358,\n 0.0841364,\n 0.98749,\n -0.0110044,\n 0.111361,\n 0.097597,\n 0.987508,\n -0.0126344,\n 0.111362,\n 0.112062,\n 0.987494,\n -0.0143767,\n 0.111357,\n 0.127533,\n 0.987526,\n -0.0162307,\n 0.111359,\n 0.144015,\n 0.987558,\n -0.0181912,\n 0.111361,\n 0.161502,\n 0.987602,\n -0.0202393,\n 0.111355,\n 0.179979,\n 0.987692,\n -0.022273,\n 0.111346,\n 0.199386,\n 0.987702,\n -0.0235306,\n 0.111215,\n 0.219183,\n 0.987789,\n -0.0247628,\n 0.111061,\n 0.239202,\n 0.987776,\n -0.0280668,\n 0.111171,\n 0.259957,\n 0.987856,\n -0.0316751,\n 0.111327,\n 0.282198,\n 0.987912,\n -0.0342468,\n 0.111282,\n 0.306294,\n 0.988,\n -0.0367205,\n 0.111198,\n 0.331219,\n 0.988055,\n -0.0387766,\n 0.110994,\n 0.356708,\n 0.988241,\n -0.0397722,\n 0.110547,\n 0.382234,\n 0.988399,\n -0.0416076,\n 0.110198,\n 0.408227,\n 0.988539,\n -0.0448192,\n 0.110137,\n 0.434662,\n 0.988661,\n -0.0483793,\n 0.110143,\n 0.461442,\n 0.988967,\n -0.0495895,\n 0.109453,\n 0.489318,\n 0.989073,\n -0.0506797,\n 0.108628,\n 0.517516,\n 0.989274,\n -0.0526953,\n 0.108003,\n 0.545844,\n 0.989528,\n -0.054578,\n 0.107255,\n 0.573823,\n 0.989709,\n -0.0561503,\n 0.106294,\n 0.601944,\n 0.989991,\n -0.056866,\n 0.104896,\n 0.630855,\n 0.990392,\n -0.0572914,\n 0.103336,\n 0.658925,\n 0.990374,\n -0.0586224,\n 0.10189,\n 0.686661,\n 0.990747,\n -0.0584764,\n 0.099783,\n 0.714548,\n 0.991041,\n -0.0582662,\n 0.0974309,\n 0.74186,\n 0.991236,\n -0.0584118,\n 0.0951678,\n 0.768422,\n 0.991585,\n -0.0573055,\n 0.0921581,\n 0.794817,\n 0.991984,\n -0.0564241,\n 0.0891167,\n 0.820336,\n 0.9921,\n -0.0553608,\n 0.085805,\n 0.84493,\n 0.992749,\n -0.0533816,\n 0.0820354,\n 0.868961,\n 0.99288,\n -0.0518661,\n 0.0782181,\n 0.891931,\n 0.993511,\n -0.0492492,\n 0.0738935,\n 0.914186,\n 0.993617,\n -0.0471956,\n 0.0696402,\n 0.93532,\n 0.99411,\n -0.044216,\n 0.0649659,\n 0.95543,\n 0.994595,\n -0.0416654,\n 0.0603177,\n 0.974685,\n 0.994976,\n -0.0384314,\n 0.0553493,\n 0.992807,\n 0.995579,\n -0.0353491,\n 0.0503942,\n 1.00996,\n 0.996069,\n -0.0319787,\n 0.0452123,\n 1.02606,\n 0.996718,\n -0.028472,\n 0.0400112,\n 1.04114,\n 0.997173,\n -0.0250789,\n 0.0349456,\n 1.05517,\n 0.997818,\n -0.0213326,\n 0.029653,\n 1.0683,\n 0.998318,\n -0.0178509,\n 0.024549,\n 1.0805,\n 0.998853,\n -0.0141118,\n 0.0194197,\n 1.09177,\n 0.999218,\n -0.0105914,\n 0.0143869,\n 1.1022,\n 0.999594,\n -693474e-8,\n 943517e-8,\n 1.11175,\n 0.99975,\n -340478e-8,\n 464051e-8,\n 1.12056,\n 1.00001,\n 109172e-9,\n -112821e-9,\n 1.12853,\n 0.983383,\n -266524e-11,\n 0.133358,\n 196534e-10,\n 0.981942,\n -671009e-10,\n 0.133162,\n 494804e-9,\n 0.981946,\n -268405e-9,\n 0.133163,\n 197923e-8,\n 0.981944,\n -603912e-9,\n 0.133163,\n 445326e-8,\n 0.981941,\n -107362e-8,\n 0.133162,\n 791693e-8,\n 0.981946,\n -167755e-8,\n 0.133163,\n 0.0123703,\n 0.981944,\n -241569e-8,\n 0.133162,\n 0.0178135,\n 0.981945,\n -328807e-8,\n 0.133163,\n 0.0242466,\n 0.981945,\n -429472e-8,\n 0.133162,\n 0.03167,\n 0.981955,\n -543573e-8,\n 0.133164,\n 0.0400846,\n 0.981951,\n -671105e-8,\n 0.133163,\n 0.0494901,\n 0.981968,\n -812092e-8,\n 0.133165,\n 0.0598886,\n 0.981979,\n -966541e-8,\n 0.133166,\n 0.0712811,\n 0.981996,\n -0.0113446,\n 0.133168,\n 0.083669,\n 0.982014,\n -0.0131585,\n 0.133169,\n 0.0970533,\n 0.982011,\n -0.0151073,\n 0.133167,\n 0.111438,\n 0.982062,\n -0.0171906,\n 0.133172,\n 0.126826,\n 0.9821,\n -0.0194067,\n 0.133175,\n 0.143215,\n 0.982149,\n -0.0217502,\n 0.133176,\n 0.160609,\n 0.982163,\n -0.0241945,\n 0.133173,\n 0.178981,\n 0.982247,\n -0.0265907,\n 0.133148,\n 0.198249,\n 0.982291,\n -0.027916,\n 0.132974,\n 0.217795,\n 0.982396,\n -0.0299663,\n 0.132868,\n 0.238042,\n 0.982456,\n -0.0334544,\n 0.132934,\n 0.258901,\n 0.982499,\n -0.0378636,\n 0.133137,\n 0.280639,\n 0.982617,\n -0.0409274,\n 0.133085,\n 0.304604,\n 0.98274,\n -0.0438523,\n 0.132985,\n 0.329376,\n 0.982944,\n -0.0462288,\n 0.132728,\n 0.354697,\n 0.98308,\n -0.0475995,\n 0.132228,\n 0.380102,\n 0.983391,\n -0.0501901,\n 0.131924,\n 0.406256,\n 0.983514,\n -0.0535899,\n 0.131737,\n 0.432735,\n 0.98373,\n -0.0571858,\n 0.131567,\n 0.459359,\n 0.984056,\n -0.0592353,\n 0.130932,\n 0.486637,\n 0.984234,\n -0.0610488,\n 0.130092,\n 0.51509,\n 0.984748,\n -0.0630758,\n 0.12923,\n 0.543461,\n 0.985073,\n -0.0647398,\n 0.128174,\n 0.571376,\n 0.985195,\n -0.0671941,\n 0.127133,\n 0.599414,\n 0.985734,\n -0.0681345,\n 0.125576,\n 0.628134,\n 0.986241,\n -0.0686089,\n 0.123639,\n 0.656399,\n 0.986356,\n -0.0698511,\n 0.121834,\n 0.684258,\n 0.986894,\n -0.0700931,\n 0.119454,\n 0.711818,\n 0.987382,\n -0.0698321,\n 0.116718,\n 0.739511,\n 0.988109,\n -0.0693975,\n 0.113699,\n 0.766267,\n 0.988363,\n -0.0689584,\n 0.110454,\n 0.792456,\n 0.989112,\n -0.0672353,\n 0.106602,\n 0.81813,\n 0.989241,\n -0.0662034,\n 0.10267,\n 0.842889,\n 0.990333,\n -0.0638938,\n 0.0981381,\n 0.867204,\n 0.990591,\n -0.0618534,\n 0.0935388,\n 0.89038,\n 0.991106,\n -0.0593117,\n 0.088553,\n 0.912576,\n 0.991919,\n -0.0562676,\n 0.0832187,\n 0.934118,\n 0.992111,\n -0.0534085,\n 0.0778302,\n 0.954254,\n 0.992997,\n -0.0495459,\n 0.0720453,\n 0.973722,\n 0.993317,\n -0.0463707,\n 0.0663458,\n 0.991949,\n 0.994133,\n -0.0421245,\n 0.0601883,\n 1.00936,\n 0.994705,\n -0.0384977,\n 0.0542501,\n 1.02559,\n 0.995495,\n -0.0340956,\n 0.0479862,\n 1.04083,\n 0.996206,\n -0.030105,\n 0.041887,\n 1.05497,\n 0.996971,\n -0.0256095,\n 0.0355355,\n 1.06824,\n 0.997796,\n -0.0213932,\n 0.0293655,\n 1.08056,\n 0.998272,\n -0.0169612,\n 0.0232926,\n 1.09182,\n 0.998857,\n -0.0126756,\n 0.0172786,\n 1.10219,\n 0.99939,\n -832486e-8,\n 0.0113156,\n 1.11192,\n 0.999752,\n -410826e-8,\n 557892e-8,\n 1.12075,\n 1,\n 150957e-9,\n -119101e-9,\n 1.12885,\n 0.975169,\n -309397e-11,\n 0.154669,\n 195073e-10,\n 0.975439,\n -779608e-10,\n 0.154712,\n 491534e-9,\n 0.975464,\n -311847e-9,\n 0.154716,\n 196617e-8,\n 0.975464,\n -701656e-9,\n 0.154716,\n 442387e-8,\n 0.975462,\n -12474e-7,\n 0.154715,\n 78647e-7,\n 0.975461,\n -194906e-8,\n 0.154715,\n 0.0122886,\n 0.975464,\n -280667e-8,\n 0.154715,\n 0.0176959,\n 0.975468,\n -382025e-8,\n 0.154716,\n 0.0240867,\n 0.975471,\n -498985e-8,\n 0.154716,\n 0.0314612,\n 0.975472,\n -631541e-8,\n 0.154717,\n 0.0398199,\n 0.975486,\n -779719e-8,\n 0.154718,\n 0.0491639,\n 0.975489,\n -943505e-8,\n 0.154718,\n 0.0594932,\n 0.975509,\n -0.0112295,\n 0.154721,\n 0.0708113,\n 0.97554,\n -0.0131802,\n 0.154724,\n 0.0831176,\n 0.975557,\n -0.0152876,\n 0.154726,\n 0.096415,\n 0.975585,\n -0.0175512,\n 0.154728,\n 0.110705,\n 0.975605,\n -0.0199713,\n 0.154729,\n 0.125992,\n 0.975645,\n -0.0225447,\n 0.154729,\n 0.142272,\n 0.975711,\n -0.0252649,\n 0.154735,\n 0.159549,\n 0.975788,\n -0.0280986,\n 0.154736,\n 0.177805,\n 0.975872,\n -0.0308232,\n 0.154704,\n 0.196911,\n 0.975968,\n -0.0324841,\n 0.154525,\n 0.216324,\n 0.976063,\n -0.0351281,\n 0.154432,\n 0.236628,\n 0.976157,\n -0.0388618,\n 0.15446,\n 0.257539,\n 0.976204,\n -0.0437704,\n 0.154665,\n 0.278975,\n 0.976358,\n -0.047514,\n 0.154652,\n 0.302606,\n 0.976571,\n -0.0508638,\n 0.154535,\n 0.327204,\n 0.976725,\n -0.0534995,\n 0.154221,\n 0.352276,\n 0.977013,\n -0.0555547,\n 0.153737,\n 0.377696,\n 0.977294,\n -0.0586728,\n 0.153403,\n 0.403855,\n 0.977602,\n -0.0622715,\n 0.15312,\n 0.430333,\n 0.977932,\n -0.0658166,\n 0.152755,\n 0.456855,\n 0.978241,\n -0.0689877,\n 0.152233,\n 0.483668,\n 0.978602,\n -0.0712805,\n 0.15132,\n 0.512097,\n 0.979234,\n -0.0732775,\n 0.150235,\n 0.540455,\n 0.97977,\n -0.075163,\n 0.148978,\n 0.568486,\n 0.979995,\n -0.0778026,\n 0.147755,\n 0.596524,\n 0.98078,\n -0.0791854,\n 0.146019,\n 0.624825,\n 0.981628,\n -0.0799666,\n 0.143906,\n 0.653403,\n 0.982067,\n -0.0808532,\n 0.141561,\n 0.681445,\n 0.98271,\n -0.0816024,\n 0.139025,\n 0.708918,\n 0.983734,\n -0.0812511,\n 0.135764,\n 0.736594,\n 0.98431,\n -0.0806201,\n 0.132152,\n 0.763576,\n 0.985071,\n -0.0801605,\n 0.12846,\n 0.789797,\n 0.98618,\n -0.0784208,\n 0.124084,\n 0.815804,\n 0.986886,\n -0.0766643,\n 0.1193,\n 0.840869,\n 0.987485,\n -0.0747744,\n 0.114236,\n 0.864952,\n 0.988431,\n -0.0716701,\n 0.108654,\n 0.888431,\n 0.988886,\n -0.0691609,\n 0.102994,\n 0.910963,\n 0.990024,\n -0.0654048,\n 0.0967278,\n 0.932629,\n 0.990401,\n -0.0619765,\n 0.090384,\n 0.95313,\n 0.991093,\n -0.0579296,\n 0.0837885,\n 0.972587,\n 0.992018,\n -0.0536576,\n 0.0770171,\n 0.991184,\n 0.992536,\n -0.0493719,\n 0.0701486,\n 1.00863,\n 0.993421,\n -0.0444813,\n 0.062953,\n 1.02494,\n 0.993928,\n -0.040008,\n 0.0560455,\n 1.04017,\n 0.994994,\n -0.0347982,\n 0.04856,\n 1.05463,\n 0.995866,\n -0.0301017,\n 0.0416152,\n 1.06807,\n 0.996916,\n -0.0248225,\n 0.0342597,\n 1.08039,\n 0.997766,\n -0.0199229,\n 0.0271668,\n 1.09177,\n 0.998479,\n -0.0147422,\n 0.0201387,\n 1.10235,\n 0.99921,\n -980173e-8,\n 0.0131944,\n 1.11206,\n 0.999652,\n -47426e-7,\n 640712e-8,\n 1.12104,\n 0.999998,\n 891673e-10,\n -10379e-8,\n 1.12906,\n 0.967868,\n -351885e-11,\n 0.175947,\n 193569e-10,\n 0.968001,\n -886733e-10,\n 0.175972,\n 487782e-9,\n 0.96801,\n -354697e-9,\n 0.175973,\n 195115e-8,\n 0.968012,\n -798063e-9,\n 0.175974,\n 439006e-8,\n 0.968011,\n -141879e-8,\n 0.175973,\n 780461e-8,\n 0.968011,\n -221686e-8,\n 0.175973,\n 0.0121948,\n 0.968016,\n -319231e-8,\n 0.175974,\n 0.0175607,\n 0.968019,\n -434515e-8,\n 0.175974,\n 0.0239027,\n 0.968018,\n -567538e-8,\n 0.175974,\n 0.0312208,\n 0.968033,\n -718308e-8,\n 0.175977,\n 0.0395158,\n 0.968049,\n -886836e-8,\n 0.175979,\n 0.0487885,\n 0.968047,\n -0.0107312,\n 0.175978,\n 0.0590394,\n 0.968072,\n -0.0127719,\n 0.175981,\n 0.0702705,\n 0.968108,\n -0.0149905,\n 0.175986,\n 0.0824836,\n 0.968112,\n -0.0173866,\n 0.175985,\n 0.0956783,\n 0.968173,\n -0.0199611,\n 0.175993,\n 0.109862,\n 0.96827,\n -0.0227128,\n 0.176008,\n 0.125033,\n 0.968292,\n -0.025639,\n 0.17601,\n 0.141193,\n 0.968339,\n -0.0287299,\n 0.176007,\n 0.158336,\n 0.968389,\n -0.0319399,\n 0.176001,\n 0.176441,\n 0.968501,\n -0.034941,\n 0.175962,\n 0.195359,\n 0.968646,\n -0.0370812,\n 0.175793,\n 0.214686,\n 0.968789,\n -0.0402329,\n 0.175708,\n 0.234973,\n 0.96886,\n -0.0442601,\n 0.1757,\n 0.255871,\n 0.969013,\n -0.049398,\n 0.175876,\n 0.277238,\n 0.969242,\n -0.0539932,\n 0.17594,\n 0.300326,\n 0.969419,\n -0.0577299,\n 0.175781,\n 0.324702,\n 0.969763,\n -0.0605643,\n 0.175432,\n 0.349527,\n 0.970093,\n -0.0634488,\n 0.174992,\n 0.374976,\n 0.970361,\n -0.0670589,\n 0.174611,\n 0.401097,\n 0.970825,\n -0.0708246,\n 0.174226,\n 0.427496,\n 0.971214,\n -0.0742871,\n 0.173684,\n 0.453858,\n 0.971622,\n -0.0782608,\n 0.173186,\n 0.480637,\n 0.972175,\n -0.0813151,\n 0.172288,\n 0.508655,\n 0.972944,\n -0.0832678,\n 0.170979,\n 0.536973,\n 0.973595,\n -0.0855964,\n 0.169573,\n 0.565138,\n 0.974345,\n -0.0882163,\n 0.168152,\n 0.593222,\n 0.975233,\n -0.0901671,\n 0.166314,\n 0.621201,\n 0.976239,\n -0.0912111,\n 0.163931,\n 0.649919,\n 0.977289,\n -0.0916959,\n 0.161106,\n 0.678011,\n 0.978076,\n -0.0927061,\n 0.158272,\n 0.705717,\n 0.979533,\n -0.0925562,\n 0.15475,\n 0.733228,\n 0.980335,\n -0.0918159,\n 0.150638,\n 0.760454,\n 0.981808,\n -0.0908508,\n 0.146201,\n 0.786918,\n 0.983061,\n -0.0896172,\n 0.141386,\n 0.812953,\n 0.984148,\n -0.0871588,\n 0.135837,\n 0.838281,\n 0.985047,\n -0.0850624,\n 0.130135,\n 0.862594,\n 0.986219,\n -0.0818541,\n 0.123882,\n 0.88633,\n 0.987043,\n -0.0784523,\n 0.117126,\n 0.908952,\n 0.988107,\n -0.0749601,\n 0.110341,\n 0.930744,\n 0.988955,\n -0.0703548,\n 0.102885,\n 0.951728,\n 0.989426,\n -0.0662798,\n 0.0954167,\n 0.971166,\n 0.990421,\n -0.0610834,\n 0.0876331,\n 0.989984,\n 0.991032,\n -0.0562936,\n 0.0797785,\n 1.00765,\n 0.992041,\n -0.0508154,\n 0.0718166,\n 1.02434,\n 0.992794,\n -0.0454045,\n 0.0637125,\n 1.03976,\n 0.993691,\n -0.0398194,\n 0.0555338,\n 1.05418,\n 0.994778,\n -0.0341482,\n 0.0473388,\n 1.06772,\n 0.995915,\n -0.028428,\n 0.0391016,\n 1.08028,\n 0.997109,\n -0.022642,\n 0.0309953,\n 1.09185,\n 0.998095,\n -0.0168738,\n 0.0230288,\n 1.10247,\n 0.998985,\n -0.0111274,\n 0.0150722,\n 1.11229,\n 0.999581,\n -543881e-8,\n 740605e-8,\n 1.12131,\n 1.00003,\n 162239e-9,\n -105549e-9,\n 1.12946,\n 0.959505,\n -393734e-11,\n 0.196876,\n 191893e-10,\n 0.959599,\n -992157e-10,\n 0.196895,\n 483544e-9,\n 0.959641,\n -396868e-9,\n 0.196903,\n 19342e-7,\n 0.959599,\n -892948e-9,\n 0.196895,\n 435193e-8,\n 0.959603,\n -158747e-8,\n 0.196896,\n 77368e-7,\n 0.959604,\n -248042e-8,\n 0.196896,\n 0.0120888,\n 0.959605,\n -357184e-8,\n 0.196896,\n 0.0174082,\n 0.959605,\n -486169e-8,\n 0.196896,\n 0.0236949,\n 0.959613,\n -635008e-8,\n 0.196897,\n 0.0309497,\n 0.959619,\n -803696e-8,\n 0.196898,\n 0.0391725,\n 0.959636,\n -992255e-8,\n 0.196901,\n 0.0483649,\n 0.959634,\n -0.0120067,\n 0.1969,\n 0.0585266,\n 0.959675,\n -0.0142898,\n 0.196906,\n 0.0696609,\n 0.959712,\n -0.0167717,\n 0.196911,\n 0.0817678,\n 0.959752,\n -0.0194524,\n 0.196918,\n 0.0948494,\n 0.959807,\n -0.0223321,\n 0.196925,\n 0.10891,\n 0.959828,\n -0.0254091,\n 0.196924,\n 0.123947,\n 0.959906,\n -0.0286815,\n 0.196934,\n 0.139968,\n 0.960005,\n -0.0321371,\n 0.196944,\n 0.156968,\n 0.960071,\n -0.0357114,\n 0.196936,\n 0.17491,\n 0.960237,\n -0.0389064,\n 0.196882,\n 0.193597,\n 0.960367,\n -0.041623,\n 0.196731,\n 0.21285,\n 0.960562,\n -0.0452655,\n 0.196654,\n 0.233075,\n 0.960735,\n -0.0496207,\n 0.196643,\n 0.253941,\n 0.960913,\n -0.0549379,\n 0.196774,\n 0.275278,\n 0.961121,\n -0.0603414,\n 0.196893,\n 0.297733,\n 0.96139,\n -0.0644244,\n 0.196717,\n 0.321877,\n 0.961818,\n -0.067556,\n 0.196314,\n 0.346476,\n 0.962175,\n -0.0712709,\n 0.195917,\n 0.371907,\n 0.96255,\n -0.0752848,\n 0.1955,\n 0.397916,\n 0.963164,\n -0.0792073,\n 0.195026,\n 0.424229,\n 0.963782,\n -0.0828225,\n 0.194424,\n 0.450637,\n 0.964306,\n -0.0873119,\n 0.193831,\n 0.477288,\n 0.964923,\n -0.0911051,\n 0.192973,\n 0.504716,\n 0.966048,\n -0.093251,\n 0.19151,\n 0.533053,\n 0.967024,\n -0.0958983,\n 0.190013,\n 0.561366,\n 0.968038,\n -0.09835,\n 0.188253,\n 0.589464,\n 0.969152,\n -0.100754,\n 0.186257,\n 0.617433,\n 0.970557,\n -0.102239,\n 0.183775,\n 0.645801,\n 0.972104,\n -0.102767,\n 0.180645,\n 0.674278,\n 0.973203,\n -0.103492,\n 0.177242,\n 0.702004,\n 0.975123,\n -0.103793,\n 0.17345,\n 0.729529,\n 0.97641,\n -0.102839,\n 0.168886,\n 0.756712,\n 0.978313,\n -0.101687,\n 0.163892,\n 0.783801,\n 0.980036,\n -0.100314,\n 0.158439,\n 0.809671,\n 0.981339,\n -0.097836,\n 0.152211,\n 0.835402,\n 0.982794,\n -0.0950006,\n 0.145679,\n 0.860081,\n 0.984123,\n -0.0920994,\n 0.138949,\n 0.883757,\n 0.984918,\n -0.0878641,\n 0.131283,\n 0.90685,\n 0.985999,\n -0.083939,\n 0.123464,\n 0.928786,\n 0.987151,\n -0.0791234,\n 0.115324,\n 0.94983,\n 0.987827,\n -0.0739332,\n 0.106854,\n 0.96962,\n 0.988806,\n -0.0688088,\n 0.0982691,\n 0.98861,\n 0.989588,\n -0.0628962,\n 0.0893456,\n 1.00667,\n 0.990438,\n -0.0573146,\n 0.0805392,\n 1.02344,\n 0.991506,\n -0.0509433,\n 0.0713725,\n 1.03933,\n 0.992492,\n -0.0448724,\n 0.0623732,\n 1.05378,\n 0.993663,\n -0.0383497,\n 0.0530838,\n 1.06747,\n 0.994956,\n -0.0319593,\n 0.0439512,\n 1.08007,\n 0.99634,\n -0.025401,\n 0.0347803,\n 1.09182,\n 0.99761,\n -0.0189687,\n 0.0257954,\n 1.1025,\n 0.99863,\n -0.0124441,\n 0.0169893,\n 1.11247,\n 0.99947,\n -614003e-8,\n 829498e-8,\n 1.12151,\n 1.00008,\n 216624e-9,\n -146107e-9,\n 1.12993,\n 0.950129,\n -434955e-11,\n 0.217413,\n 190081e-10,\n 0.950264,\n -10957e-8,\n 0.217444,\n 47884e-8,\n 0.9503,\n -438299e-9,\n 0.217451,\n 191543e-8,\n 0.950246,\n -986124e-9,\n 0.21744,\n 430951e-8,\n 0.950246,\n -175311e-8,\n 0.21744,\n 766137e-8,\n 0.950245,\n -273923e-8,\n 0.21744,\n 0.011971,\n 0.950253,\n -394453e-8,\n 0.217441,\n 0.0172385,\n 0.950258,\n -536897e-8,\n 0.217442,\n 0.0234641,\n 0.950267,\n -701262e-8,\n 0.217444,\n 0.030648,\n 0.950277,\n -887551e-8,\n 0.217446,\n 0.038791,\n 0.950284,\n -0.0109576,\n 0.217446,\n 0.0478931,\n 0.950312,\n -0.0132591,\n 0.217451,\n 0.0579568,\n 0.950334,\n -0.01578,\n 0.217454,\n 0.0689821,\n 0.950378,\n -0.0185204,\n 0.217462,\n 0.0809714,\n 0.950417,\n -0.0214803,\n 0.217467,\n 0.0939265,\n 0.950488,\n -0.0246594,\n 0.217479,\n 0.10785,\n 0.950534,\n -0.0280565,\n 0.217483,\n 0.122743,\n 0.950633,\n -0.0316685,\n 0.217498,\n 0.138611,\n 0.950698,\n -0.0354787,\n 0.217499,\n 0.155442,\n 0.950844,\n -0.0394003,\n 0.217507,\n 0.173208,\n 0.950999,\n -0.0426812,\n 0.217419,\n 0.191605,\n 0.951221,\n -0.0461302,\n 0.217317,\n 0.21084,\n 0.951412,\n -0.0502131,\n 0.217238,\n 0.230945,\n 0.951623,\n -0.0549183,\n 0.21722,\n 0.251745,\n 0.951867,\n -0.0604493,\n 0.217306,\n 0.273001,\n 0.952069,\n -0.0665189,\n 0.217466,\n 0.294874,\n 0.952459,\n -0.0709179,\n 0.217266,\n 0.318732,\n 0.952996,\n -0.0746112,\n 0.216891,\n 0.34318,\n 0.953425,\n -0.0789252,\n 0.216503,\n 0.36849,\n 0.953885,\n -0.0833293,\n 0.216042,\n 0.394373,\n 0.954617,\n -0.087371,\n 0.215469,\n 0.420505,\n 0.955429,\n -0.0914054,\n 0.214802,\n 0.446907,\n 0.956068,\n -0.0961671,\n 0.214146,\n 0.473522,\n 0.957094,\n -0.10048,\n 0.213286,\n 0.50052,\n 0.958372,\n -0.103248,\n 0.211796,\n 0.528715,\n 0.959654,\n -0.106033,\n 0.21016,\n 0.557065,\n 0.961305,\n -0.108384,\n 0.208149,\n 0.585286,\n 0.962785,\n -0.111122,\n 0.206024,\n 0.613334,\n 0.964848,\n -0.112981,\n 0.203442,\n 0.641334,\n 0.966498,\n -0.113717,\n 0.19996,\n 0.669955,\n 0.968678,\n -0.114121,\n 0.196105,\n 0.698094,\n 0.970489,\n -0.114524,\n 0.191906,\n 0.725643,\n 0.972903,\n -0.113792,\n 0.186963,\n 0.752856,\n 0.974701,\n -0.112406,\n 0.181343,\n 0.780013,\n 0.976718,\n -0.110685,\n 0.175185,\n 0.806268,\n 0.978905,\n -0.108468,\n 0.168535,\n 0.832073,\n 0.980267,\n -0.105061,\n 0.161106,\n 0.857149,\n 0.981967,\n -0.101675,\n 0.153387,\n 0.881145,\n 0.983063,\n -0.0974492,\n 0.145199,\n 0.904255,\n 0.984432,\n -0.0925815,\n 0.136527,\n 0.926686,\n 0.985734,\n -0.0877983,\n 0.127584,\n 0.947901,\n 0.986228,\n -0.081884,\n 0.118125,\n 0.968111,\n 0.98719,\n -0.0761208,\n 0.108594,\n 0.98719,\n 0.988228,\n -0.0698196,\n 0.0989996,\n 1.00559,\n 0.989046,\n -0.0632739,\n 0.0890074,\n 1.02246,\n 0.990242,\n -0.056522,\n 0.0790832,\n 1.03841,\n 0.991252,\n -0.0495272,\n 0.0689182,\n 1.05347,\n 0.992542,\n -0.0425373,\n 0.0588592,\n 1.06724,\n 0.994096,\n -0.0353198,\n 0.0486833,\n 1.08009,\n 0.995593,\n -0.028235,\n 0.0385977,\n 1.09177,\n 0.99711,\n -0.0209511,\n 0.0286457,\n 1.10274,\n 0.998263,\n -0.0139289,\n 0.0188497,\n 1.11262,\n 0.999254,\n -67359e-7,\n 9208e-6,\n 1.12191,\n 0.999967,\n 141846e-9,\n -657764e-10,\n 1.13024,\n 0.935608,\n -474692e-11,\n 0.236466,\n 187817e-10,\n 0.93996,\n -11971e-8,\n 0.237568,\n 473646e-9,\n 0.939959,\n -478845e-9,\n 0.237567,\n 18946e-7,\n 0.939954,\n -10774e-7,\n 0.237566,\n 426284e-8,\n 0.939956,\n -191538e-8,\n 0.237566,\n 757842e-8,\n 0.939954,\n -299277e-8,\n 0.237566,\n 0.0118413,\n 0.93996,\n -430961e-8,\n 0.237567,\n 0.0170518,\n 0.939969,\n -586589e-8,\n 0.237569,\n 0.02321,\n 0.939982,\n -766166e-8,\n 0.237572,\n 0.0303164,\n 0.939987,\n -969686e-8,\n 0.237572,\n 0.0383711,\n 0.939997,\n -0.0119715,\n 0.237574,\n 0.0473751,\n 0.940031,\n -0.0144858,\n 0.237581,\n 0.0573298,\n 0.940073,\n -0.0172399,\n 0.237589,\n 0.0682366,\n 0.94012,\n -0.0202335,\n 0.237598,\n 0.080097,\n 0.940162,\n -0.0234663,\n 0.237604,\n 0.0929116,\n 0.940237,\n -0.0269387,\n 0.237615,\n 0.106686,\n 0.940328,\n -0.0306489,\n 0.237632,\n 0.121421,\n 0.940419,\n -0.0345917,\n 0.237645,\n 0.137115,\n 0.940522,\n -0.0387481,\n 0.237654,\n 0.153766,\n 0.940702,\n -0.0429906,\n 0.237661,\n 0.17133,\n 0.940871,\n -0.0465089,\n 0.237561,\n 0.189502,\n 0.941103,\n -0.050531,\n 0.23748,\n 0.208616,\n 0.941369,\n -0.0550657,\n 0.237423,\n 0.228595,\n 0.941641,\n -0.0601337,\n 0.237399,\n 0.249287,\n 0.941903,\n -0.0658804,\n 0.237443,\n 0.270467,\n 0.942224,\n -0.0722674,\n 0.237597,\n 0.292024,\n 0.942633,\n -0.0771788,\n 0.237419,\n 0.315272,\n 0.943172,\n -0.0815623,\n 0.237068,\n 0.339579,\n 0.943691,\n -0.0863973,\n 0.236682,\n 0.364717,\n 0.944382,\n -0.0911536,\n 0.236213,\n 0.390435,\n 0.945392,\n -0.0952967,\n 0.235562,\n 0.416425,\n 0.946185,\n -0.0998948,\n 0.234832,\n 0.442772,\n 0.947212,\n -0.104796,\n 0.234114,\n 0.469347,\n 0.948778,\n -0.10928,\n 0.233222,\n 0.496162,\n 0.950149,\n -0.113081,\n 0.231845,\n 0.523978,\n 0.951989,\n -0.115893,\n 0.230005,\n 0.552295,\n 0.953921,\n -0.11846,\n 0.227862,\n 0.580569,\n 0.955624,\n -0.12115,\n 0.225439,\n 0.608698,\n 0.958234,\n -0.123373,\n 0.222635,\n 0.636696,\n 0.960593,\n -0.124519,\n 0.219093,\n 0.665208,\n 0.963201,\n -0.124736,\n 0.214749,\n 0.693557,\n 0.965642,\n -0.125012,\n 0.210059,\n 0.721334,\n 0.968765,\n -0.124661,\n 0.204935,\n 0.748613,\n 0.971753,\n -0.122996,\n 0.198661,\n 0.776224,\n 0.973751,\n -0.120998,\n 0.191823,\n 0.802461,\n 0.976709,\n -0.118583,\n 0.184359,\n 0.828399,\n 0.977956,\n -0.115102,\n 0.176437,\n 0.853693,\n 0.979672,\n -0.111077,\n 0.167681,\n 0.877962,\n 0.981816,\n -0.10688,\n 0.158872,\n 0.901564,\n 0.98238,\n -0.101469,\n 0.149398,\n 0.924057,\n 0.983964,\n -0.0960013,\n 0.139436,\n 0.945751,\n 0.984933,\n -0.0899626,\n 0.12943,\n 0.966272,\n 0.985694,\n -0.0832973,\n 0.11894,\n 0.985741,\n 0.986822,\n -0.0767082,\n 0.108349,\n 1.00407,\n 0.987725,\n -0.0693614,\n 0.0976026,\n 1.02154,\n 0.98877,\n -0.06211,\n 0.086652,\n 1.03757,\n 0.990129,\n -0.0544143,\n 0.0756182,\n 1.05296,\n 0.991337,\n -0.046744,\n 0.0645753,\n 1.06683,\n 0.992978,\n -0.0387931,\n 0.0534683,\n 1.0798,\n 0.994676,\n -0.030973,\n 0.0424137,\n 1.09181,\n 0.99645,\n -0.0230311,\n 0.0314035,\n 1.10286,\n 0.997967,\n -0.0152065,\n 0.0206869,\n 1.11291,\n 0.99922,\n -744837e-8,\n 0.010155,\n 1.12237,\n 1.00002,\n 240209e-9,\n -752767e-10,\n 1.13089,\n 0.922948,\n -515351e-11,\n 0.255626,\n 186069e-10,\n 0.928785,\n -129623e-9,\n 0.257244,\n 468009e-9,\n 0.928761,\n -51849e-8,\n 0.257237,\n 187202e-8,\n 0.928751,\n -11666e-7,\n 0.257235,\n 421204e-8,\n 0.928751,\n -207395e-8,\n 0.257234,\n 74881e-7,\n 0.928754,\n -324055e-8,\n 0.257235,\n 0.0117002,\n 0.92876,\n -466639e-8,\n 0.257236,\n 0.0168486,\n 0.928763,\n -635149e-8,\n 0.257237,\n 0.0229334,\n 0.928774,\n -829584e-8,\n 0.257239,\n 0.029955,\n 0.928791,\n -0.0104995,\n 0.257243,\n 0.0379139,\n 0.928804,\n -0.0129623,\n 0.257245,\n 0.0468108,\n 0.928847,\n -0.0156846,\n 0.257255,\n 0.0566473,\n 0.92889,\n -0.0186661,\n 0.257263,\n 0.0674246,\n 0.928924,\n -0.0219067,\n 0.257268,\n 0.0791433,\n 0.928989,\n -0.0254066,\n 0.257282,\n 0.0918076,\n 0.92909,\n -0.0291651,\n 0.257301,\n 0.105419,\n 0.92918,\n -0.0331801,\n 0.257316,\n 0.119978,\n 0.92929,\n -0.0374469,\n 0.257332,\n 0.135491,\n 0.929453,\n -0.041939,\n 0.257357,\n 0.151948,\n 0.929586,\n -0.0464612,\n 0.257347,\n 0.169275,\n 0.929858,\n -0.0503426,\n 0.257269,\n 0.187257,\n 0.930125,\n -0.0548409,\n 0.257199,\n 0.206204,\n 0.930403,\n -0.0598063,\n 0.257149,\n 0.22601,\n 0.930726,\n -0.0652437,\n 0.257122,\n 0.246561,\n 0.931098,\n -0.0712376,\n 0.257153,\n 0.267618,\n 0.931396,\n -0.0777506,\n 0.257237,\n 0.288993,\n 0.931947,\n -0.0832374,\n 0.257124,\n 0.311527,\n 0.932579,\n -0.0883955,\n 0.25683,\n 0.335697,\n 0.933194,\n -0.0937037,\n 0.256444,\n 0.360634,\n 0.934013,\n -0.0987292,\n 0.255939,\n 0.386126,\n 0.935307,\n -0.103215,\n 0.255282,\n 0.412018,\n 0.936374,\n -0.108234,\n 0.254538,\n 0.438292,\n 0.93776,\n -0.113234,\n 0.253728,\n 0.464805,\n 0.939599,\n -0.118013,\n 0.25275,\n 0.491464,\n 0.941036,\n -0.122661,\n 0.251404,\n 0.518751,\n 0.94337,\n -0.125477,\n 0.249435,\n 0.547133,\n 0.945318,\n -0.128374,\n 0.247113,\n 0.575456,\n 0.947995,\n -0.130996,\n 0.244441,\n 0.60372,\n 0.950818,\n -0.133438,\n 0.241352,\n 0.63174,\n 0.954378,\n -0.135004,\n 0.237849,\n 0.659971,\n 0.957151,\n -0.135313,\n 0.233188,\n 0.688478,\n 0.960743,\n -0.13521,\n 0.228001,\n 0.716767,\n 0.964352,\n -0.135007,\n 0.222249,\n 0.744349,\n 0.967273,\n -0.133523,\n 0.21542,\n 0.771786,\n 0.969767,\n -0.131155,\n 0.208039,\n 0.798639,\n 0.973195,\n -0.128492,\n 0.200076,\n 0.824774,\n 0.975557,\n -0.125094,\n 0.191451,\n 0.850222,\n 0.977692,\n -0.120578,\n 0.18184,\n 0.874761,\n 0.98026,\n -0.115882,\n 0.172102,\n 0.898497,\n 0.981394,\n -0.110372,\n 0.161859,\n 0.921636,\n 0.982386,\n -0.10415,\n 0.15108,\n 0.943467,\n 0.983783,\n -0.0978128,\n 0.140407,\n 0.964045,\n 0.98422,\n -0.0906171,\n 0.129058,\n 0.98398,\n 0.985447,\n -0.0832921,\n 0.117614,\n 1.00276,\n 0.986682,\n -0.0754412,\n 0.10585,\n 1.02047,\n 0.987326,\n -0.0673885,\n 0.0940943,\n 1.03678,\n 0.988707,\n -0.0592565,\n 0.0822093,\n 1.05218,\n 0.990185,\n -0.050717,\n 0.070192,\n 1.06652,\n 0.991866,\n -0.0423486,\n 0.0582081,\n 1.07965,\n 0.993897,\n -0.0336118,\n 0.0460985,\n 1.09188,\n 0.995841,\n -0.0252178,\n 0.0342737,\n 1.10307,\n 0.997605,\n -0.0164893,\n 0.0224829,\n 1.11324,\n 0.999037,\n -817112e-8,\n 0.0110647,\n 1.12262,\n 1.00003,\n 291686e-9,\n -168673e-9,\n 1.13139,\n 0.915304,\n -552675e-11,\n 0.275999,\n 183285e-10,\n 0.91668,\n -139285e-9,\n 0.276414,\n 461914e-9,\n 0.916664,\n -55713e-8,\n 0.276409,\n 184763e-8,\n 0.916653,\n -125354e-8,\n 0.276406,\n 415715e-8,\n 0.916651,\n -222851e-8,\n 0.276405,\n 739053e-8,\n 0.916655,\n -348205e-8,\n 0.276406,\n 0.0115478,\n 0.916653,\n -501414e-8,\n 0.276405,\n 0.0166291,\n 0.916667,\n -682478e-8,\n 0.276409,\n 0.0226346,\n 0.91668,\n -891398e-8,\n 0.276412,\n 0.0295648,\n 0.91669,\n -0.0112817,\n 0.276413,\n 0.0374199,\n 0.916727,\n -0.013928,\n 0.276422,\n 0.0462016,\n 0.916759,\n -0.0168528,\n 0.276429,\n 0.0559101,\n 0.916793,\n -0.0200558,\n 0.276436,\n 0.0665466,\n 0.916849,\n -0.0235373,\n 0.276448,\n 0.0781139,\n 0.916964,\n -0.0272973,\n 0.276474,\n 0.0906156,\n 0.917047,\n -0.0313344,\n 0.276491,\n 0.104051,\n 0.917152,\n -0.0356465,\n 0.276511,\n 0.118424,\n 0.917286,\n -0.0402271,\n 0.276533,\n 0.133736,\n 0.917469,\n -0.0450408,\n 0.276564,\n 0.149978,\n 0.917686,\n -0.0497872,\n 0.276563,\n 0.167057,\n 0.917953,\n -0.0540937,\n 0.276493,\n 0.184846,\n 0.918228,\n -0.0590709,\n 0.276437,\n 0.203614,\n 0.918572,\n -0.0644277,\n 0.276398,\n 0.223212,\n 0.918918,\n -0.0702326,\n 0.276362,\n 0.243584,\n 0.919356,\n -0.076484,\n 0.276383,\n 0.264465,\n 0.919842,\n -0.0830808,\n 0.276434,\n 0.285701,\n 0.920451,\n -0.0892972,\n 0.276407,\n 0.307559,\n 0.921113,\n -0.095016,\n 0.276128,\n 0.331501,\n 0.921881,\n -0.100771,\n 0.275754,\n 0.356207,\n 0.923027,\n -0.106029,\n 0.275254,\n 0.381477,\n 0.924364,\n -0.111029,\n 0.274595,\n 0.40722,\n 0.925818,\n -0.116345,\n 0.273841,\n 0.433385,\n 0.92746,\n -0.121424,\n 0.272913,\n 0.459848,\n 0.929167,\n -0.12657,\n 0.271837,\n 0.486493,\n 0.931426,\n -0.131581,\n 0.270575,\n 0.513432,\n 0.934001,\n -0.135038,\n 0.268512,\n 0.541502,\n 0.936296,\n -0.138039,\n 0.266135,\n 0.569658,\n 0.939985,\n -0.140687,\n 0.263271,\n 0.598375,\n 0.943516,\n -0.143247,\n 0.260058,\n 0.626563,\n 0.94782,\n -0.145135,\n 0.256138,\n 0.654711,\n 0.951023,\n -0.145733,\n 0.251154,\n 0.683285,\n 0.955338,\n -0.145554,\n 0.245562,\n 0.711831,\n 0.959629,\n -0.145008,\n 0.239265,\n 0.739573,\n 0.963123,\n -0.144003,\n 0.232064,\n 0.767027,\n 0.966742,\n -0.141289,\n 0.224036,\n 0.794359,\n 0.969991,\n -0.138247,\n 0.215305,\n 0.820361,\n 0.973403,\n -0.134786,\n 0.206051,\n 0.846548,\n 0.975317,\n -0.129966,\n 0.195914,\n 0.871541,\n 0.977647,\n -0.12471,\n 0.185184,\n 0.895313,\n 0.980137,\n -0.119086,\n 0.174161,\n 0.918398,\n 0.981031,\n -0.112297,\n 0.162792,\n 0.940679,\n 0.982037,\n -0.105372,\n 0.150952,\n 0.961991,\n 0.983164,\n -0.097821,\n 0.138921,\n 0.981913,\n 0.983757,\n -0.0897245,\n 0.126611,\n 1.00109,\n 0.985036,\n -0.0815974,\n 0.114228,\n 1.01902,\n 0.986289,\n -0.0727725,\n 0.101389,\n 1.03604,\n 0.987329,\n -0.0639323,\n 0.0886476,\n 1.05149,\n 0.989193,\n -0.0548109,\n 0.0756837,\n 1.06619,\n 0.990716,\n -0.045687,\n 0.0627581,\n 1.07948,\n 0.992769,\n -0.0364315,\n 0.0498337,\n 1.09172,\n 0.99524,\n -0.0271761,\n 0.0370305,\n 1.1033,\n 0.997154,\n -0.0179609,\n 0.0243959,\n 1.11353,\n 0.998845,\n -878063e-8,\n 0.0119567,\n 1.12319,\n 1.00002,\n 259038e-9,\n -108146e-9,\n 1.13177,\n 0.903945,\n -591681e-11,\n 0.295126,\n 181226e-10,\n 0.903668,\n -148672e-9,\n 0.295037,\n 455367e-9,\n 0.903677,\n -594683e-9,\n 0.29504,\n 182145e-8,\n 0.903673,\n -133805e-8,\n 0.295039,\n 409831e-8,\n 0.903666,\n -237872e-8,\n 0.295036,\n 728584e-8,\n 0.903668,\n -371676e-8,\n 0.295037,\n 0.0113842,\n 0.903679,\n -535212e-8,\n 0.29504,\n 0.0163936,\n 0.903684,\n -728479e-8,\n 0.295041,\n 0.0223141,\n 0.903698,\n -951473e-8,\n 0.295044,\n 0.0291462,\n 0.903718,\n -0.0120419,\n 0.295049,\n 0.0368904,\n 0.903754,\n -0.0148664,\n 0.295058,\n 0.0455477,\n 0.903801,\n -0.017988,\n 0.29507,\n 0.0551194,\n 0.903851,\n -0.0214064,\n 0.295082,\n 0.0656058,\n 0.903921,\n -0.0251219,\n 0.295097,\n 0.0770109,\n 0.904002,\n -0.0291337,\n 0.295116,\n 0.0893354,\n 0.904111,\n -0.033441,\n 0.29514,\n 0.102583,\n 0.904246,\n -0.0380415,\n 0.295169,\n 0.116755,\n 0.904408,\n -0.0429258,\n 0.295202,\n 0.131853,\n 0.904637,\n -0.0480468,\n 0.295245,\n 0.147869,\n 0.904821,\n -0.0529208,\n 0.295214,\n 0.164658,\n 0.905163,\n -0.0577748,\n 0.295185,\n 0.182274,\n 0.905469,\n -0.0631763,\n 0.295143,\n 0.200828,\n 0.905851,\n -0.068917,\n 0.295112,\n 0.2202,\n 0.906322,\n -0.0750861,\n 0.295104,\n 0.240372,\n 0.906761,\n -0.0815855,\n 0.295086,\n 0.261082,\n 0.90735,\n -0.0882138,\n 0.295095,\n 0.282123,\n 0.908087,\n -0.095082,\n 0.295139,\n 0.303563,\n 0.908826,\n -0.101488,\n 0.29492,\n 0.327028,\n 0.909832,\n -0.107577,\n 0.294577,\n 0.351464,\n 0.911393,\n -0.113033,\n 0.294115,\n 0.376497,\n 0.912804,\n -0.118629,\n 0.293446,\n 0.402115,\n 0.914081,\n -0.124232,\n 0.292581,\n 0.428111,\n 0.91637,\n -0.129399,\n 0.29166,\n 0.454442,\n 0.91814,\n -0.134892,\n 0.290422,\n 0.481024,\n 0.921179,\n -0.140069,\n 0.289194,\n 0.507924,\n 0.924544,\n -0.144431,\n 0.287421,\n 0.535557,\n 0.927995,\n -0.147498,\n 0.284867,\n 0.563984,\n 0.931556,\n -0.150197,\n 0.281722,\n 0.5923,\n 0.935777,\n -0.152711,\n 0.278207,\n 0.620832,\n 0.940869,\n -0.154836,\n 0.274148,\n 0.649069,\n 0.945994,\n -0.155912,\n 0.269057,\n 0.677746,\n 0.949634,\n -0.155641,\n 0.262799,\n 0.706293,\n 0.955032,\n -0.154809,\n 0.256097,\n 0.734278,\n 0.95917,\n -0.153678,\n 0.248618,\n 0.761751,\n 0.962931,\n -0.151253,\n 0.239794,\n 0.789032,\n 0.966045,\n -0.147625,\n 0.230281,\n 0.815422,\n 0.96971,\n -0.143964,\n 0.220382,\n 0.841787,\n 0.972747,\n -0.139464,\n 0.209846,\n 0.867446,\n 0.975545,\n -0.133459,\n 0.198189,\n 0.892004,\n 0.978381,\n -0.127424,\n 0.186362,\n 0.915458,\n 0.979935,\n -0.120506,\n 0.173964,\n 0.937948,\n 0.980948,\n -0.11282,\n 0.161429,\n 0.959732,\n 0.982234,\n -0.104941,\n 0.148557,\n 0.980118,\n 0.982767,\n -0.0962905,\n 0.135508,\n 0.999463,\n 0.983544,\n -0.0873625,\n 0.122338,\n 1.01756,\n 0.984965,\n -0.0783447,\n 0.108669,\n 1.03492,\n 0.986233,\n -0.0684798,\n 0.0949911,\n 1.05087,\n 0.987796,\n -0.0590867,\n 0.0811386,\n 1.0656,\n 0.989885,\n -0.0489145,\n 0.0673099,\n 1.0794,\n 0.991821,\n -0.0391,\n 0.0535665,\n 1.09174,\n 0.99448,\n -0.029087,\n 0.0397529,\n 1.10341,\n 0.996769,\n -0.019114,\n 0.0261463,\n 1.11383,\n 0.998641,\n -947007e-8,\n 0.0128731,\n 1.1237,\n 0.999978,\n 446316e-9,\n -169093e-9,\n 1.13253,\n 0.888362,\n -627064e-11,\n 0.312578,\n 178215e-10,\n 0.889988,\n -157791e-9,\n 0.313148,\n 448451e-9,\n 0.889825,\n -631076e-9,\n 0.313092,\n 179356e-8,\n 0.88984,\n -141994e-8,\n 0.313097,\n 403554e-8,\n 0.889828,\n -25243e-7,\n 0.313092,\n 717429e-8,\n 0.889831,\n -394421e-8,\n 0.313093,\n 0.0112099,\n 0.889831,\n -567962e-8,\n 0.313093,\n 0.0161425,\n 0.889844,\n -773051e-8,\n 0.313096,\n 0.0219724,\n 0.889858,\n -0.0100968,\n 0.3131,\n 0.0286999,\n 0.889882,\n -0.0127786,\n 0.313106,\n 0.0363256,\n 0.889918,\n -0.0157757,\n 0.313116,\n 0.0448509,\n 0.889967,\n -0.0190878,\n 0.313129,\n 0.0542758,\n 0.89003,\n -0.022715,\n 0.313145,\n 0.0646032,\n 0.890108,\n -0.0266566,\n 0.313165,\n 0.0758339,\n 0.890218,\n -0.0309131,\n 0.313193,\n 0.0879729,\n 0.890351,\n -0.0354819,\n 0.313226,\n 0.101019,\n 0.89051,\n -0.0403613,\n 0.313263,\n 0.114979,\n 0.890672,\n -0.0455385,\n 0.313294,\n 0.129848,\n 0.890882,\n -0.0509444,\n 0.313333,\n 0.145616,\n 0.891189,\n -0.0559657,\n 0.313324,\n 0.162122,\n 0.891457,\n -0.0613123,\n 0.313281,\n 0.179524,\n 0.891856,\n -0.0671488,\n 0.313281,\n 0.197855,\n 0.892312,\n -0.0732732,\n 0.313268,\n 0.216991,\n 0.892819,\n -0.0797865,\n 0.313263,\n 0.236924,\n 0.893369,\n -0.0865269,\n 0.313247,\n 0.257433,\n 0.894045,\n -0.0931592,\n 0.313205,\n 0.278215,\n 0.894884,\n -0.100532,\n 0.313276,\n 0.299467,\n 0.895832,\n -0.107716,\n 0.313205,\n 0.322276,\n 0.897043,\n -0.114099,\n 0.312873,\n 0.34642,\n 0.898515,\n -0.119941,\n 0.312331,\n 0.371187,\n 0.900191,\n -0.126044,\n 0.311731,\n 0.396656,\n 0.90188,\n -0.131808,\n 0.310859,\n 0.422488,\n 0.904359,\n -0.137289,\n 0.309857,\n 0.448744,\n 0.906923,\n -0.142991,\n 0.308714,\n 0.475239,\n 0.910634,\n -0.148253,\n 0.307465,\n 0.501983,\n 0.914502,\n -0.153332,\n 0.305774,\n 0.529254,\n 0.919046,\n -0.156646,\n 0.303156,\n 0.557709,\n 0.923194,\n -0.159612,\n 0.299928,\n 0.586267,\n 0.928858,\n -0.162027,\n 0.296245,\n 0.614925,\n 0.934464,\n -0.164203,\n 0.291832,\n 0.643187,\n 0.939824,\n -0.165602,\n 0.286565,\n 0.671601,\n 0.944582,\n -0.165383,\n 0.280073,\n 0.700213,\n 0.949257,\n -0.164439,\n 0.272891,\n 0.728432,\n 0.954389,\n -0.162953,\n 0.264771,\n 0.756082,\n 0.958595,\n -0.161007,\n 0.255927,\n 0.78369,\n 0.962138,\n -0.157243,\n 0.245769,\n 0.810769,\n 0.966979,\n -0.152872,\n 0.235127,\n 0.836999,\n 0.969566,\n -0.148209,\n 0.22347,\n 0.862684,\n 0.972372,\n -0.142211,\n 0.211147,\n 0.887847,\n 0.975916,\n -0.135458,\n 0.198606,\n 0.911843,\n 0.978026,\n -0.128398,\n 0.185498,\n 0.934795,\n 0.979686,\n -0.120313,\n 0.17171,\n 0.956787,\n 0.980748,\n -0.11166,\n 0.158159,\n 0.978046,\n 0.981622,\n -0.103035,\n 0.144399,\n 0.997693,\n 0.982356,\n -0.0930328,\n 0.13001,\n 1.01642,\n 0.983308,\n -0.0834627,\n 0.115778,\n 1.03366,\n 0.985037,\n -0.0732249,\n 0.101327,\n 1.05014,\n 0.986493,\n -0.0628145,\n 0.086554,\n 1.06507,\n 0.988484,\n -0.0526556,\n 0.0720413,\n 1.07907,\n 0.991051,\n -0.0415744,\n 0.0571151,\n 1.09189,\n 0.993523,\n -0.0314275,\n 0.0426643,\n 1.10369,\n 0.99628,\n -0.0203603,\n 0.0279325,\n 1.11423,\n 0.998344,\n -0.0102446,\n 0.0138182,\n 1.12421,\n 0.999997,\n 42612e-8,\n -193628e-9,\n 1.1333,\n 0.871555,\n -660007e-11,\n 0.329176,\n 174749e-10,\n 0.875255,\n -166579e-9,\n 0.330571,\n 441051e-9,\n 0.875644,\n -666394e-9,\n 0.330718,\n 176441e-8,\n 0.875159,\n -149903e-8,\n 0.330536,\n 396899e-8,\n 0.87516,\n -266493e-8,\n 0.330536,\n 7056e-6,\n 0.875158,\n -416393e-8,\n 0.330535,\n 0.0110251,\n 0.87516,\n -599598e-8,\n 0.330535,\n 0.0158764,\n 0.875163,\n -816108e-8,\n 0.330536,\n 0.0216101,\n 0.875174,\n -0.0106591,\n 0.330538,\n 0.0282266,\n 0.875199,\n -0.0134899,\n 0.330545,\n 0.0357266,\n 0.875257,\n -0.0166538,\n 0.330563,\n 0.0441117,\n 0.875304,\n -0.0201501,\n 0.330575,\n 0.0533821,\n 0.875373,\n -0.0239785,\n 0.330595,\n 0.0635395,\n 0.875464,\n -0.0281389,\n 0.330619,\n 0.0745872,\n 0.875565,\n -0.0326301,\n 0.330645,\n 0.0865255,\n 0.875691,\n -0.0374516,\n 0.330676,\n 0.0993599,\n 0.875897,\n -0.0425993,\n 0.330733,\n 0.113093,\n 0.876091,\n -0.0480576,\n 0.330776,\n 0.127722,\n 0.876353,\n -0.0537216,\n 0.330826,\n 0.143227,\n 0.876649,\n -0.0589807,\n 0.330809,\n 0.159462,\n 0.877034,\n -0.0647865,\n 0.330819,\n 0.176642,\n 0.877443,\n -0.0709789,\n 0.330817,\n 0.194702,\n 0.877956,\n -0.0774782,\n 0.330832,\n 0.213577,\n 0.878499,\n -0.0843175,\n 0.330822,\n 0.233246,\n 0.879144,\n -0.0912714,\n 0.330804,\n 0.253512,\n 0.879982,\n -0.0980824,\n 0.330766,\n 0.274137,\n 0.88097,\n -0.105823,\n 0.330864,\n 0.295209,\n 0.882051,\n -0.113671,\n 0.330896,\n 0.317226,\n 0.883397,\n -0.120303,\n 0.330545,\n 0.341068,\n 0.884987,\n -0.12667,\n 0.330068,\n 0.365613,\n 0.886789,\n -0.133118,\n 0.329418,\n 0.390807,\n 0.889311,\n -0.139024,\n 0.328683,\n 0.416494,\n 0.891995,\n -0.144971,\n 0.327729,\n 0.442618,\n 0.895106,\n -0.150747,\n 0.326521,\n 0.469131,\n 0.899527,\n -0.156283,\n 0.325229,\n 0.495921,\n 0.90504,\n -0.161707,\n 0.32378,\n 0.523162,\n 0.909875,\n -0.165661,\n 0.32122,\n 0.55092,\n 0.91561,\n -0.168755,\n 0.317942,\n 0.579928,\n 0.921225,\n -0.171193,\n 0.313983,\n 0.608539,\n 0.927308,\n -0.17319,\n 0.309636,\n 0.636854,\n 0.933077,\n -0.174819,\n 0.304262,\n 0.66523,\n 0.938766,\n -0.175002,\n 0.297563,\n 0.693609,\n 0.943667,\n -0.173946,\n 0.289613,\n 0.722157,\n 0.949033,\n -0.172221,\n 0.281227,\n 0.750021,\n 0.953765,\n -0.169869,\n 0.271545,\n 0.777466,\n 0.95804,\n -0.166578,\n 0.261034,\n 0.804853,\n 0.962302,\n -0.161761,\n 0.249434,\n 0.831569,\n 0.966544,\n -0.156636,\n 0.237484,\n 0.857779,\n 0.969372,\n -0.150784,\n 0.224395,\n 0.883051,\n 0.972486,\n -0.143672,\n 0.210786,\n 0.907864,\n 0.975853,\n -0.135772,\n 0.196556,\n 0.931223,\n 0.977975,\n -0.127942,\n 0.182307,\n 0.954061,\n 0.979122,\n -0.118347,\n 0.167607,\n 0.97531,\n 0.980719,\n -0.109112,\n 0.152739,\n 0.995666,\n 0.981223,\n -0.0991789,\n 0.137932,\n 1.01475,\n 0.98216,\n -0.0883553,\n 0.122692,\n 1.03253,\n 0.983379,\n -0.0780825,\n 0.107493,\n 1.04917,\n 0.985434,\n -0.0665646,\n 0.0917791,\n 1.06464,\n 0.987332,\n -0.0557714,\n 0.0764949,\n 1.07896,\n 0.990004,\n -0.0442805,\n 0.060721,\n 1.09199,\n 0.992975,\n -0.0331676,\n 0.0452284,\n 1.10393,\n 0.995811,\n -0.0219547,\n 0.0297934,\n 1.11476,\n 0.9982,\n -0.0107613,\n 0.0146415,\n 1.12484,\n 1.00002,\n 248678e-9,\n -14555e-8,\n 1.13413,\n 0.859519,\n -693595e-11,\n 0.347264,\n 171673e-10,\n 0.859843,\n -17503e-8,\n 0.347394,\n 433219e-9,\n 0.859656,\n -700076e-9,\n 0.347319,\n 173277e-8,\n 0.859671,\n -157517e-8,\n 0.347325,\n 389875e-8,\n 0.859669,\n -280028e-8,\n 0.347324,\n 693112e-8,\n 0.85967,\n -43754e-7,\n 0.347324,\n 0.01083,\n 0.859665,\n -630049e-8,\n 0.347321,\n 0.0155954,\n 0.859685,\n -85755e-7,\n 0.347328,\n 0.0212278,\n 0.859694,\n -0.0112003,\n 0.347329,\n 0.0277273,\n 0.859718,\n -0.0141747,\n 0.347336,\n 0.0350946,\n 0.85976,\n -0.0174988,\n 0.347348,\n 0.0433314,\n 0.85982,\n -0.0211722,\n 0.347366,\n 0.0524384,\n 0.859892,\n -0.0251941,\n 0.347387,\n 0.0624168,\n 0.860006,\n -0.0295649,\n 0.347422,\n 0.0732708,\n 0.860122,\n -0.0342825,\n 0.347453,\n 0.0849999,\n 0.860282,\n -0.0393462,\n 0.347499,\n 0.0976102,\n 0.860482,\n -0.0447513,\n 0.347554,\n 0.111104,\n 0.860719,\n -0.0504775,\n 0.347614,\n 0.125479,\n 0.860998,\n -0.0563577,\n 0.347666,\n 0.140703,\n 0.861322,\n -0.0619473,\n 0.347662,\n 0.156681,\n 0.861724,\n -0.0681277,\n 0.347684,\n 0.173597,\n 0.862198,\n -0.0746567,\n 0.347709,\n 0.191371,\n 0.862733,\n -0.0815234,\n 0.347727,\n 0.209976,\n 0.863371,\n -0.0886643,\n 0.347744,\n 0.229351,\n 0.86414,\n -0.0957908,\n 0.347734,\n 0.24934,\n 0.865138,\n -0.102912,\n 0.34772,\n 0.269797,\n 0.866182,\n -0.110924,\n 0.3478,\n 0.290654,\n 0.867436,\n -0.119223,\n 0.347911,\n 0.312074,\n 0.869087,\n -0.126197,\n 0.347649,\n 0.335438,\n 0.870859,\n -0.133145,\n 0.347222,\n 0.359732,\n 0.872997,\n -0.139869,\n 0.346645,\n 0.38467,\n 0.875939,\n -0.146089,\n 0.345935,\n 0.41019,\n 0.879012,\n -0.152334,\n 0.345012,\n 0.436218,\n 0.883353,\n -0.15821,\n 0.343924,\n 0.462641,\n 0.888362,\n -0.164097,\n 0.342636,\n 0.489449,\n 0.895026,\n -0.169528,\n 0.341351,\n 0.516629,\n 0.900753,\n -0.174408,\n 0.339115,\n 0.544109,\n 0.906814,\n -0.17751,\n 0.335809,\n 0.572857,\n 0.912855,\n -0.180101,\n 0.331597,\n 0.601554,\n 0.919438,\n -0.182116,\n 0.32698,\n 0.630198,\n 0.925962,\n -0.183494,\n 0.321449,\n 0.658404,\n 0.931734,\n -0.184159,\n 0.314595,\n 0.686625,\n 0.93762,\n -0.18304,\n 0.306462,\n 0.71531,\n 0.943858,\n -0.181323,\n 0.297514,\n 0.744272,\n 0.948662,\n -0.178683,\n 0.287447,\n 0.771462,\n 0.953299,\n -0.175379,\n 0.276166,\n 0.798593,\n 0.957346,\n -0.170395,\n 0.263758,\n 0.8256,\n 0.962565,\n -0.165042,\n 0.251019,\n 0.852575,\n 0.966075,\n -0.158655,\n 0.237011,\n 0.878316,\n 0.969048,\n -0.151707,\n 0.222518,\n 0.90329,\n 0.972423,\n -0.143271,\n 0.207848,\n 0.927745,\n 0.975833,\n -0.134824,\n 0.192463,\n 0.950859,\n 0.977629,\n -0.125444,\n 0.1768,\n 0.972947,\n 0.978995,\n -0.114949,\n 0.161033,\n 0.993263,\n 0.980533,\n -0.104936,\n 0.145523,\n 1.01337,\n 0.980745,\n -0.0935577,\n 0.129799,\n 1.03128,\n 0.981814,\n -0.0822956,\n 0.113486,\n 1.04825,\n 0.983943,\n -0.0710082,\n 0.0972925,\n 1.06405,\n 0.986141,\n -0.0587931,\n 0.0808138,\n 1.0785,\n 0.988878,\n -0.0472755,\n 0.0644915,\n 1.09204,\n 0.992132,\n -0.0349128,\n 0.0478128,\n 1.10413,\n 0.9953,\n -0.0232407,\n 0.031621,\n 1.11527,\n 0.998117,\n -0.0112713,\n 0.0154935,\n 1.12551,\n 1.00003,\n 339743e-9,\n -195763e-9,\n 1.13504,\n 0.845441,\n -729126e-11,\n 0.364305,\n 169208e-10,\n 0.843588,\n -183164e-9,\n 0.363506,\n 425067e-9,\n 0.843412,\n -73253e-8,\n 0.36343,\n 169999e-8,\n 0.843401,\n -164818e-8,\n 0.363426,\n 382495e-8,\n 0.843399,\n -293008e-8,\n 0.363425,\n 679993e-8,\n 0.843401,\n -457822e-8,\n 0.363425,\n 0.010625,\n 0.843394,\n -659249e-8,\n 0.363421,\n 0.0153002,\n 0.843398,\n -897282e-8,\n 0.363421,\n 0.0208258,\n 0.843415,\n -0.0117191,\n 0.363426,\n 0.0272024,\n 0.843438,\n -0.0148312,\n 0.363432,\n 0.0344305,\n 0.843483,\n -0.018309,\n 0.363447,\n 0.0425116,\n 0.84356,\n -0.0221521,\n 0.363472,\n 0.0514471,\n 0.843646,\n -0.0263597,\n 0.363499,\n 0.061238,\n 0.843743,\n -0.0309315,\n 0.363527,\n 0.0718873,\n 0.84388,\n -0.0358658,\n 0.363569,\n 0.0833969,\n 0.844079,\n -0.0411624,\n 0.363631,\n 0.0957742,\n 0.844279,\n -0.0468128,\n 0.363688,\n 0.109015,\n 0.844549,\n -0.0527923,\n 0.363761,\n 0.123124,\n 0.844858,\n -0.0588204,\n 0.363817,\n 0.138044,\n 0.84522,\n -0.0647573,\n 0.36383,\n 0.153755,\n 0.845669,\n -0.0713181,\n 0.363879,\n 0.170394,\n 0.846155,\n -0.0781697,\n 0.363908,\n 0.187861,\n 0.846789,\n -0.0853913,\n 0.363969,\n 0.206176,\n 0.847502,\n -0.0928086,\n 0.363999,\n 0.225244,\n 0.8484,\n -0.10005,\n 0.363997,\n 0.244926,\n 0.849461,\n -0.107615,\n 0.364008,\n 0.265188,\n 0.850562,\n -0.115814,\n 0.364055,\n 0.28587,\n 0.851962,\n -0.124334,\n 0.364179,\n 0.306926,\n 0.854326,\n -0.131995,\n 0.364233,\n 0.329605,\n 0.856295,\n -0.139338,\n 0.363856,\n 0.35359,\n 0.858857,\n -0.146346,\n 0.363347,\n 0.37831,\n 0.862428,\n -0.152994,\n 0.362807,\n 0.403722,\n 0.866203,\n -0.159463,\n 0.361963,\n 0.429537,\n 0.871629,\n -0.165623,\n 0.36112,\n 0.456,\n 0.877365,\n -0.171649,\n 0.359917,\n 0.482773,\n 0.883744,\n -0.177151,\n 0.35848,\n 0.509705,\n 0.890693,\n -0.182381,\n 0.356523,\n 0.537215,\n 0.897278,\n -0.186076,\n 0.3533,\n 0.565493,\n 0.903958,\n -0.188602,\n 0.349095,\n 0.594293,\n 0.910908,\n -0.190755,\n 0.344215,\n 0.623165,\n 0.918117,\n -0.192063,\n 0.338606,\n 0.651573,\n 0.924644,\n -0.192758,\n 0.331544,\n 0.679869,\n 0.931054,\n -0.192238,\n 0.323163,\n 0.708668,\n 0.937303,\n -0.190035,\n 0.313529,\n 0.737201,\n 0.943387,\n -0.187162,\n 0.303152,\n 0.764977,\n 0.948494,\n -0.183876,\n 0.29146,\n 0.792683,\n 0.952546,\n -0.178901,\n 0.277917,\n 0.819228,\n 0.958077,\n -0.173173,\n 0.264753,\n 0.846559,\n 0.962462,\n -0.16645,\n 0.25002,\n 0.872962,\n 0.966569,\n -0.159452,\n 0.234873,\n 0.898729,\n 0.969108,\n -0.15074,\n 0.218752,\n 0.923126,\n 0.973072,\n -0.141523,\n 0.202673,\n 0.947278,\n 0.975452,\n -0.132075,\n 0.186326,\n 0.969938,\n 0.977784,\n -0.121257,\n 0.169396,\n 0.991325,\n 0.97899,\n -0.110182,\n 0.153044,\n 1.01123,\n 0.979777,\n -0.0989634,\n 0.136485,\n 1.0299,\n 0.980865,\n -0.0865894,\n 0.119343,\n 1.04727,\n 0.982432,\n -0.0746115,\n 0.102452,\n 1.06341,\n 0.984935,\n -0.0621822,\n 0.0852423,\n 1.07834,\n 0.987776,\n -0.0495694,\n 0.0678546,\n 1.092,\n 0.99103,\n -0.0372386,\n 0.0506917,\n 1.1043,\n 0.99474,\n -0.0244353,\n 0.0333316,\n 1.11576,\n 0.997768,\n -0.0121448,\n 0.0164348,\n 1.12617,\n 1.00003,\n 31774e-8,\n -169504e-9,\n 1.13598,\n 0.825551,\n -756799e-11,\n 0.378425,\n 165099e-10,\n 0.82664,\n -190922e-9,\n 0.378923,\n 416504e-9,\n 0.826323,\n -763495e-9,\n 0.378779,\n 16656e-7,\n 0.826359,\n -171789e-8,\n 0.378795,\n 374768e-8,\n 0.82636,\n -305402e-8,\n 0.378795,\n 666259e-8,\n 0.826368,\n -477185e-8,\n 0.378798,\n 0.0104104,\n 0.826364,\n -687131e-8,\n 0.378795,\n 0.0149912,\n 0.826368,\n -935232e-8,\n 0.378795,\n 0.0204054,\n 0.826376,\n -0.0122146,\n 0.378797,\n 0.0266532,\n 0.826399,\n -0.0154581,\n 0.378803,\n 0.0337355,\n 0.82646,\n -0.0190825,\n 0.378824,\n 0.0416537,\n 0.826525,\n -0.0230873,\n 0.378846,\n 0.0504091,\n 0.826614,\n -0.0274719,\n 0.378876,\n 0.0600032,\n 0.82674,\n -0.0322355,\n 0.378917,\n 0.0704393,\n 0.826888,\n -0.0373766,\n 0.378964,\n 0.0817195,\n 0.827078,\n -0.0428936,\n 0.379024,\n 0.0938492,\n 0.827318,\n -0.0487778,\n 0.379099,\n 0.106828,\n 0.82764,\n -0.0549935,\n 0.379199,\n 0.120659,\n 0.827926,\n -0.0611058,\n 0.379227,\n 0.13526,\n 0.828325,\n -0.0675054,\n 0.379275,\n 0.150713,\n 0.828801,\n -0.0743455,\n 0.379332,\n 0.167034,\n 0.8294,\n -0.0815523,\n 0.379415,\n 0.184209,\n 0.830094,\n -0.0890779,\n 0.379495,\n 0.202203,\n 0.8309,\n -0.096736,\n 0.379555,\n 0.220945,\n 0.831943,\n -0.104135,\n 0.379577,\n 0.240306,\n 0.833037,\n -0.112106,\n 0.379604,\n 0.260317,\n 0.834278,\n -0.120554,\n 0.379668,\n 0.2808,\n 0.836192,\n -0.129128,\n 0.3799,\n 0.301654,\n 0.838671,\n -0.137541,\n 0.380109,\n 0.323502,\n 0.840939,\n -0.14523,\n 0.379809,\n 0.347176,\n 0.844575,\n -0.15248,\n 0.379593,\n 0.371706,\n 0.848379,\n -0.159607,\n 0.37909,\n 0.39688,\n 0.853616,\n -0.166267,\n 0.378617,\n 0.422702,\n 0.858921,\n -0.172698,\n 0.377746,\n 0.448919,\n 0.865324,\n -0.178823,\n 0.376749,\n 0.475661,\n 0.872207,\n -0.184542,\n 0.375363,\n 0.502599,\n 0.880018,\n -0.189836,\n 0.373657,\n 0.529914,\n 0.88694,\n -0.194294,\n 0.370673,\n 0.557683,\n 0.894779,\n -0.197022,\n 0.36662,\n 0.586848,\n 0.902242,\n -0.199108,\n 0.36138,\n 0.615831,\n 0.909914,\n -0.200398,\n 0.355434,\n 0.644478,\n 0.917088,\n -0.20094,\n 0.348173,\n 0.672905,\n 0.923888,\n -0.200671,\n 0.339482,\n 0.701327,\n 0.930495,\n -0.198773,\n 0.32956,\n 0.730101,\n 0.937247,\n -0.195394,\n 0.318363,\n 0.758383,\n 0.943108,\n -0.191956,\n 0.306323,\n 0.786539,\n 0.948296,\n -0.187227,\n 0.292576,\n 0.813637,\n 0.953472,\n -0.181165,\n 0.278234,\n 0.840793,\n 0.958485,\n -0.174119,\n 0.263054,\n 0.867712,\n 0.962714,\n -0.166564,\n 0.246756,\n 0.893635,\n 0.966185,\n -0.158181,\n 0.229945,\n 0.919028,\n 0.970146,\n -0.148275,\n 0.212633,\n 0.943413,\n 0.973491,\n -0.138157,\n 0.195229,\n 0.966627,\n 0.975741,\n -0.127574,\n 0.178048,\n 0.988817,\n 0.977238,\n -0.11554,\n 0.160312,\n 1.00924,\n 0.978411,\n -0.10364,\n 0.142857,\n 1.02845,\n 0.979811,\n -0.0913122,\n 0.125317,\n 1.04648,\n 0.98116,\n -0.0782558,\n 0.107627,\n 1.06284,\n 0.983543,\n -0.0655957,\n 0.0895862,\n 1.07798,\n 0.986789,\n -0.0520411,\n 0.0713756,\n 1.092,\n 0.990292,\n -0.0389727,\n 0.053228,\n 1.10484,\n 0.994187,\n -0.025808,\n 0.0351945,\n 1.11642,\n 0.997499,\n -0.0126071,\n 0.0173198,\n 1.12703,\n 0.999999,\n 275604e-9,\n -148602e-9,\n 1.13674,\n 0.81075,\n -78735e-10,\n 0.394456,\n 161829e-10,\n 0.808692,\n -198293e-9,\n 0.393453,\n 407564e-9,\n 0.80846,\n -792877e-9,\n 0.39334,\n 162965e-8,\n 0.808595,\n -178416e-8,\n 0.393407,\n 366711e-8,\n 0.808597,\n -317182e-8,\n 0.393408,\n 651934e-8,\n 0.808598,\n -495589e-8,\n 0.393408,\n 0.0101866,\n 0.808591,\n -713627e-8,\n 0.393403,\n 0.0146689,\n 0.808592,\n -971285e-8,\n 0.393402,\n 0.0199667,\n 0.80861,\n -0.0126855,\n 0.393407,\n 0.0260803,\n 0.808633,\n -0.0160538,\n 0.393413,\n 0.0330107,\n 0.80868,\n -0.0198175,\n 0.393429,\n 0.0407589,\n 0.808748,\n -0.0239758,\n 0.393453,\n 0.0493264,\n 0.808854,\n -0.0285286,\n 0.39349,\n 0.0587161,\n 0.808992,\n -0.0334748,\n 0.39354,\n 0.0689304,\n 0.809141,\n -0.0388116,\n 0.393588,\n 0.0799707,\n 0.809352,\n -0.0445375,\n 0.39366,\n 0.0918432,\n 0.809608,\n -0.0506427,\n 0.393742,\n 0.104549,\n 0.809915,\n -0.0570708,\n 0.393834,\n 0.118085,\n 0.810253,\n -0.0633526,\n 0.393885,\n 0.132377,\n 0.810687,\n -0.0700966,\n 0.393953,\n 0.147537,\n 0.811233,\n -0.0772274,\n 0.394047,\n 0.163543,\n 0.811865,\n -0.0847629,\n 0.394148,\n 0.180394,\n 0.812648,\n -0.0925663,\n 0.394265,\n 0.198051,\n 0.813583,\n -0.100416,\n 0.394363,\n 0.216443,\n 0.814683,\n -0.108119,\n 0.394402,\n 0.235502,\n 0.815948,\n -0.11644,\n 0.394489,\n 0.255242,\n 0.817278,\n -0.125036,\n 0.394542,\n 0.275441,\n 0.819605,\n -0.133655,\n 0.39486,\n 0.296094,\n 0.822256,\n -0.142682,\n 0.395248,\n 0.317309,\n 0.825349,\n -0.150756,\n 0.395241,\n 0.340516,\n 0.829605,\n -0.158392,\n 0.395285,\n 0.364819,\n 0.83391,\n -0.165801,\n 0.394922,\n 0.389736,\n 0.839808,\n -0.172677,\n 0.394691,\n 0.415409,\n 0.845708,\n -0.179448,\n 0.394006,\n 0.441546,\n 0.853025,\n -0.185746,\n 0.393279,\n 0.46832,\n 0.859666,\n -0.191684,\n 0.391655,\n 0.495302,\n 0.86789,\n -0.197146,\n 0.390068,\n 0.52262,\n 0.875845,\n -0.201904,\n 0.38727,\n 0.550336,\n 0.882634,\n -0.205023,\n 0.382688,\n 0.578825,\n 0.891076,\n -0.207098,\n 0.377543,\n 0.608103,\n 0.900589,\n -0.208474,\n 0.371752,\n 0.63723,\n 0.90791,\n -0.209068,\n 0.364016,\n 0.665769,\n 0.915971,\n -0.208655,\n 0.355593,\n 0.694428,\n 0.923455,\n -0.20729,\n 0.345439,\n 0.723224,\n 0.931514,\n -0.203821,\n 0.334099,\n 0.751925,\n 0.937885,\n -0.19986,\n 0.321069,\n 0.780249,\n 0.943136,\n -0.194993,\n 0.306571,\n 0.8077,\n 0.948818,\n -0.189132,\n 0.291556,\n 0.83497,\n 0.954433,\n -0.181617,\n 0.275745,\n 0.86188,\n 0.959078,\n -0.173595,\n 0.258695,\n 0.888562,\n 0.962705,\n -0.164855,\n 0.240825,\n 0.914008,\n 0.966753,\n -0.155129,\n 0.22268,\n 0.939145,\n 0.970704,\n -0.144241,\n 0.204542,\n 0.963393,\n 0.973367,\n -0.133188,\n 0.185927,\n 0.985983,\n 0.975984,\n -0.121146,\n 0.167743,\n 1.00704,\n 0.976994,\n -0.108366,\n 0.149218,\n 1.02715,\n 0.978485,\n -0.0956746,\n 0.13131,\n 1.0455,\n 0.980074,\n -0.0820733,\n 0.112513,\n 1.06221,\n 0.98225,\n -0.0684061,\n 0.0938323,\n 1.07782,\n 0.98553,\n -0.0549503,\n 0.0749508,\n 1.09199,\n 0.989529,\n -0.0407857,\n 0.055848,\n 1.10508,\n 0.993536,\n -0.0271978,\n 0.0368581,\n 1.11684,\n 0.997247,\n -0.0132716,\n 0.0181845,\n 1.12789,\n 1,\n 431817e-9,\n -198809e-9,\n 1.13792,\n 0.785886,\n -812608e-11,\n 0.405036,\n 157669e-10,\n 0.790388,\n -205278e-9,\n 0.407355,\n 398297e-9,\n 0.790145,\n -820824e-9,\n 0.407231,\n 159263e-8,\n 0.790135,\n -184681e-8,\n 0.407226,\n 358336e-8,\n 0.790119,\n -328316e-8,\n 0.407218,\n 637039e-8,\n 0.790126,\n -512988e-8,\n 0.40722,\n 99539e-7,\n 0.79013,\n -738684e-8,\n 0.407221,\n 0.0143339,\n 0.790135,\n -0.0100538,\n 0.407221,\n 0.0195107,\n 0.790134,\n -0.0131306,\n 0.407217,\n 0.0254848,\n 0.79016,\n -0.0166169,\n 0.407224,\n 0.0322572,\n 0.790197,\n -0.020512,\n 0.407236,\n 0.0398284,\n 0.790273,\n -0.0248157,\n 0.407263,\n 0.0482014,\n 0.790381,\n -0.029527,\n 0.407304,\n 0.0573777,\n 0.790521,\n -0.0346446,\n 0.407355,\n 0.0673602,\n 0.790704,\n -0.0401665,\n 0.40742,\n 0.0781522,\n 0.790925,\n -0.0460896,\n 0.407499,\n 0.0897582,\n 0.791195,\n -0.0524017,\n 0.407589,\n 0.10218,\n 0.791522,\n -0.0590121,\n 0.407691,\n 0.11541,\n 0.791878,\n -0.0654876,\n 0.407748,\n 0.12939,\n 0.792361,\n -0.0725207,\n 0.407849,\n 0.144237,\n 0.792942,\n -0.0799844,\n 0.407963,\n 0.159924,\n 0.79362,\n -0.0877896,\n 0.408087,\n 0.176425,\n 0.794529,\n -0.0958451,\n 0.408259,\n 0.193733,\n 0.795521,\n -0.103827,\n 0.408362,\n 0.211756,\n 0.796778,\n -0.111937,\n 0.408482,\n 0.230524,\n 0.798027,\n -0.120521,\n 0.408547,\n 0.249967,\n 0.799813,\n -0.129242,\n 0.408721,\n 0.269926,\n 0.802387,\n -0.138048,\n 0.409148,\n 0.290338,\n 0.805279,\n -0.147301,\n 0.409641,\n 0.311193,\n 0.809251,\n -0.155895,\n 0.410154,\n 0.333611,\n 0.813733,\n -0.163942,\n 0.410297,\n 0.357615,\n 0.819081,\n -0.171666,\n 0.410373,\n 0.382339,\n 0.825427,\n -0.178905,\n 0.410348,\n 0.407828,\n 0.83172,\n -0.185812,\n 0.409486,\n 0.434034,\n 0.83877,\n -0.192318,\n 0.408776,\n 0.460493,\n 0.845817,\n -0.198249,\n 0.407176,\n 0.487346,\n 0.854664,\n -0.204034,\n 0.405719,\n 0.514832,\n 0.863495,\n -0.208908,\n 0.403282,\n 0.542401,\n 0.871883,\n -0.212765,\n 0.399293,\n 0.570683,\n 0.88065,\n -0.214911,\n 0.393803,\n 0.599947,\n 0.89004,\n -0.216214,\n 0.387536,\n 0.62932,\n 0.898476,\n -0.216745,\n 0.379846,\n 0.658319,\n 0.906738,\n -0.216387,\n 0.370625,\n 0.687138,\n 0.914844,\n -0.215053,\n 0.360139,\n 0.71601,\n 0.923877,\n -0.212007,\n 0.348849,\n 0.745124,\n 0.931925,\n -0.207481,\n 0.335639,\n 0.773366,\n 0.938054,\n -0.202418,\n 0.320798,\n 0.801636,\n 0.943895,\n -0.196507,\n 0.304772,\n 0.829055,\n 0.949468,\n -0.189009,\n 0.288033,\n 0.856097,\n 0.955152,\n -0.180539,\n 0.270532,\n 0.88301,\n 0.959403,\n -0.171437,\n 0.251639,\n 0.909296,\n 0.963309,\n -0.161661,\n 0.232563,\n 0.934868,\n 0.967399,\n -0.150425,\n 0.213231,\n 0.959662,\n 0.972009,\n -0.138659,\n 0.194247,\n 0.98302,\n 0.97433,\n -0.126595,\n 0.174718,\n 1.00517,\n 0.975823,\n -0.113205,\n 0.155518,\n 1.02566,\n 0.976371,\n -0.0996096,\n 0.136709,\n 1.04418,\n 0.978705,\n -0.0860754,\n 0.117571,\n 1.06146,\n 0.981477,\n -0.0714438,\n 0.0980046,\n 1.07777,\n 0.984263,\n -0.0572304,\n 0.0782181,\n 1.09214,\n 0.988423,\n -0.0428875,\n 0.0584052,\n 1.10553,\n 0.993,\n -0.0282442,\n 0.038522,\n 1.11758,\n 0.99704,\n -0.0140183,\n 0.0190148,\n 1.12864,\n 0.999913,\n 369494e-9,\n -145203e-9,\n 1.13901,\n 0.777662,\n -84153e-10,\n 0.423844,\n 154403e-10,\n 0.770458,\n -211714e-9,\n 0.419915,\n 38845e-8,\n 0.770716,\n -846888e-9,\n 0.420055,\n 155386e-8,\n 0.770982,\n -190567e-8,\n 0.420202,\n 349653e-8,\n 0.770981,\n -338782e-8,\n 0.420201,\n 621606e-8,\n 0.77098,\n -529338e-8,\n 0.4202,\n 971274e-8,\n 0.770983,\n -762223e-8,\n 0.4202,\n 0.0139867,\n 0.770985,\n -0.0103741,\n 0.420198,\n 0.0190381,\n 0.770996,\n -0.0135489,\n 0.4202,\n 0.0248677,\n 0.771029,\n -0.0171461,\n 0.420212,\n 0.0314764,\n 0.771052,\n -0.0211647,\n 0.420215,\n 0.0388648,\n 0.771131,\n -0.0256048,\n 0.420245,\n 0.047036,\n 0.771235,\n -0.0304647,\n 0.420284,\n 0.0559911,\n 0.771383,\n -0.0357436,\n 0.420341,\n 0.0657346,\n 0.771591,\n -0.0414392,\n 0.420423,\n 0.0762694,\n 0.771819,\n -0.0475462,\n 0.420506,\n 0.0875984,\n 0.772123,\n -0.0540506,\n 0.420617,\n 0.099727,\n 0.772464,\n -0.060797,\n 0.42072,\n 0.112637,\n 0.772855,\n -0.0675393,\n 0.420799,\n 0.126313,\n 0.773317,\n -0.0748323,\n 0.420893,\n 0.140824,\n 0.773981,\n -0.0825681,\n 0.421058,\n 0.15617,\n 0.774746,\n -0.0906307,\n 0.421226,\n 0.172322,\n 0.77566,\n -0.0988982,\n 0.421397,\n 0.189253,\n 0.776837,\n -0.106994,\n 0.421569,\n 0.206912,\n 0.778097,\n -0.115528,\n 0.421704,\n 0.225359,\n 0.779588,\n -0.124317,\n 0.421849,\n 0.24447,\n 0.781574,\n -0.133139,\n 0.422097,\n 0.264156,\n 0.784451,\n -0.142179,\n 0.422615,\n 0.284318,\n 0.787682,\n -0.15165,\n 0.423269,\n 0.304902,\n 0.792433,\n -0.160771,\n 0.424396,\n 0.3265,\n 0.797359,\n -0.169166,\n 0.424772,\n 0.35014,\n 0.803986,\n -0.177149,\n 0.425475,\n 0.374768,\n 0.809504,\n -0.184745,\n 0.424996,\n 0.399928,\n 0.815885,\n -0.19173,\n 0.424247,\n 0.425796,\n 0.823513,\n -0.198525,\n 0.423515,\n 0.452287,\n 0.832549,\n -0.204709,\n 0.422787,\n 0.479321,\n 0.841653,\n -0.210447,\n 0.421187,\n 0.506718,\n 0.850401,\n -0.215501,\n 0.418519,\n 0.53432,\n 0.859854,\n -0.219752,\n 0.414715,\n 0.56242,\n 0.869364,\n -0.222305,\n 0.409462,\n 0.591558,\n 0.878837,\n -0.223744,\n 0.402926,\n 0.621074,\n 0.888636,\n -0.224065,\n 0.395043,\n 0.650538,\n 0.898132,\n -0.223742,\n 0.38564,\n 0.679538,\n 0.907181,\n -0.222308,\n 0.375378,\n 0.708674,\n 0.915621,\n -0.219837,\n 0.363212,\n 0.737714,\n 0.9239,\n -0.215233,\n 0.349313,\n 0.767014,\n 0.931644,\n -0.209592,\n 0.334162,\n 0.795133,\n 0.938887,\n -0.203644,\n 0.317943,\n 0.823228,\n 0.945282,\n -0.196349,\n 0.300581,\n 0.850822,\n 0.950758,\n -0.18742,\n 0.282195,\n 0.877594,\n 0.956146,\n -0.177879,\n 0.262481,\n 0.904564,\n 0.960355,\n -0.167643,\n 0.242487,\n 0.930741,\n 0.965256,\n -0.156671,\n 0.222668,\n 0.955868,\n 0.968029,\n -0.144123,\n 0.201907,\n 0.979869,\n 0.97251,\n -0.131305,\n 0.18202,\n 1.00291,\n 0.974925,\n -0.118335,\n 0.161909,\n 1.02392,\n 0.975402,\n -0.103714,\n 0.142129,\n 1.0433,\n 0.976987,\n -0.089415,\n 0.122447,\n 1.06089,\n 0.979677,\n -0.0748858,\n 0.102248,\n 1.07713,\n 0.983184,\n -0.0596086,\n 0.0814851,\n 1.09218,\n 0.987466,\n -0.0447671,\n 0.0609484,\n 1.10585,\n 0.992348,\n -0.0295217,\n 0.0401835,\n 1.11829,\n 0.996674,\n -0.0143917,\n 0.0198163,\n 1.12966,\n 1.00003,\n 321364e-9,\n -149983e-9,\n 1.1402,\n 0.757901,\n -869074e-11,\n 0.436176,\n 151011e-10,\n 0.751195,\n -217848e-9,\n 0.432317,\n 378533e-9,\n 0.751178,\n -871373e-9,\n 0.432307,\n 15141e-7,\n 0.751195,\n -196061e-8,\n 0.432317,\n 34068e-7,\n 0.751198,\n -348552e-8,\n 0.432318,\n 605659e-8,\n 0.751195,\n -544599e-8,\n 0.432315,\n 946353e-8,\n 0.751207,\n -784203e-8,\n 0.43232,\n 0.013628,\n 0.751213,\n -0.0106732,\n 0.43232,\n 0.0185499,\n 0.751221,\n -0.0139393,\n 0.432319,\n 0.0242302,\n 0.751244,\n -0.0176398,\n 0.432325,\n 0.0306694,\n 0.7513,\n -0.0217743,\n 0.432348,\n 0.0378698,\n 0.751358,\n -0.0263412,\n 0.432367,\n 0.0458321,\n 0.751458,\n -0.0313396,\n 0.432404,\n 0.0545587,\n 0.751608,\n -0.0367682,\n 0.432464,\n 0.0640543,\n 0.7518,\n -0.0426246,\n 0.43254,\n 0.0743222,\n 0.752065,\n -0.0489031,\n 0.432645,\n 0.0853668,\n 0.752376,\n -0.0555828,\n 0.432762,\n 0.0971911,\n 0.752715,\n -0.0623861,\n 0.432859,\n 0.109768,\n 0.753137,\n -0.069415,\n 0.432958,\n 0.123126,\n 0.753676,\n -0.0770039,\n 0.433099,\n 0.137308,\n 0.754345,\n -0.084971,\n 0.433272,\n 0.15229,\n 0.755235,\n -0.0932681,\n 0.433504,\n 0.168075,\n 0.756186,\n -0.10171,\n 0.433693,\n 0.184625,\n 0.757363,\n -0.110019,\n 0.433857,\n 0.201897,\n 0.75884,\n -0.11887,\n 0.434102,\n 0.220014,\n 0.760467,\n -0.127881,\n 0.434306,\n 0.238778,\n 0.762969,\n -0.136766,\n 0.434751,\n 0.258172,\n 0.765823,\n -0.14612,\n 0.43529,\n 0.278062,\n 0.769676,\n -0.15566,\n 0.436236,\n 0.298437,\n 0.774909,\n -0.165177,\n 0.437754,\n 0.319532,\n 0.77994,\n -0.17402,\n 0.438343,\n 0.342505,\n 0.785757,\n -0.182201,\n 0.438609,\n 0.366693,\n 0.792487,\n -0.190104,\n 0.438762,\n 0.391668,\n 0.80038,\n -0.197438,\n 0.438795,\n 0.417494,\n 0.808494,\n -0.204365,\n 0.438226,\n 0.443933,\n 0.817695,\n -0.210714,\n 0.437283,\n 0.470929,\n 0.828111,\n -0.216651,\n 0.436087,\n 0.498569,\n 0.837901,\n -0.221804,\n 0.433717,\n 0.526165,\n 0.847813,\n -0.226318,\n 0.430133,\n 0.554155,\n 0.858314,\n -0.229297,\n 0.425213,\n 0.582822,\n 0.868891,\n -0.230999,\n 0.418576,\n 0.612847,\n 0.878941,\n -0.231155,\n 0.410405,\n 0.642445,\n 0.888809,\n -0.230935,\n 0.400544,\n 0.672024,\n 0.898089,\n -0.229343,\n 0.389613,\n 0.701366,\n 0.908081,\n -0.226886,\n 0.377197,\n 0.730763,\n 0.916819,\n -0.222676,\n 0.363397,\n 0.759642,\n 0.924968,\n -0.216835,\n 0.347437,\n 0.788775,\n 0.932906,\n -0.210245,\n 0.32995,\n 0.817135,\n 0.940025,\n -0.202992,\n 0.312262,\n 0.844912,\n 0.946101,\n -0.19436,\n 0.293313,\n 0.872164,\n 0.952835,\n -0.184125,\n 0.273638,\n 0.899443,\n 0.957347,\n -0.173657,\n 0.252385,\n 0.926389,\n 0.961434,\n -0.162204,\n 0.231038,\n 0.951947,\n 0.965522,\n -0.14979,\n 0.209834,\n 0.976751,\n 0.969412,\n -0.136307,\n 0.188821,\n 1.00022,\n 0.973902,\n -0.122527,\n 0.168013,\n 1.02229,\n 0.974045,\n -0.108213,\n 0.147634,\n 1.04199,\n 0.975775,\n -0.0927397,\n 0.12705,\n 1.06019,\n 0.978383,\n -0.0778212,\n 0.106309,\n 1.07711,\n 0.98211,\n -0.0621216,\n 0.0849279,\n 1.09245,\n 0.986517,\n -0.0463847,\n 0.0633519,\n 1.10651,\n 0.991696,\n -0.0309353,\n 0.0419698,\n 1.11903,\n 0.996349,\n -0.0150914,\n 0.0206272,\n 1.13073,\n 1.00003,\n 442449e-9,\n -231396e-9,\n 1.14146,\n 0.727498,\n -885074e-11,\n 0.441528,\n 145832e-10,\n 0.730897,\n -223525e-9,\n 0.443589,\n 368298e-9,\n 0.730796,\n -893996e-9,\n 0.443528,\n 147303e-8,\n 0.730805,\n -201149e-8,\n 0.443533,\n 331433e-8,\n 0.730814,\n -357596e-8,\n 0.443538,\n 589222e-8,\n 0.730815,\n -558734e-8,\n 0.443538,\n 920678e-8,\n 0.730822,\n -804544e-8,\n 0.44354,\n 0.0132582,\n 0.730836,\n -0.0109501,\n 0.443545,\n 0.0180468,\n 0.730848,\n -0.0143008,\n 0.443546,\n 0.0235732,\n 0.730871,\n -0.0180969,\n 0.443552,\n 0.0298382,\n 0.730915,\n -0.022338,\n 0.443567,\n 0.0368438,\n 0.730982,\n -0.0270225,\n 0.443591,\n 0.044591,\n 0.731076,\n -0.0321491,\n 0.443627,\n 0.0530831,\n 0.731245,\n -0.0377166,\n 0.443699,\n 0.0623243,\n 0.73144,\n -0.0437216,\n 0.443777,\n 0.0723181,\n 0.7317,\n -0.0501576,\n 0.443881,\n 0.0830691,\n 0.732034,\n -0.0569942,\n 0.444014,\n 0.0945809,\n 0.732388,\n -0.0638756,\n 0.444113,\n 0.106825,\n 0.732853,\n -0.071203,\n 0.444247,\n 0.119859,\n 0.733473,\n -0.0790076,\n 0.444442,\n 0.13369,\n 0.734195,\n -0.0871937,\n 0.444645,\n 0.148304,\n 0.735069,\n -0.095696,\n 0.444877,\n 0.163702,\n 0.736169,\n -0.10426,\n 0.445133,\n 0.179861,\n 0.73747,\n -0.112853,\n 0.44537,\n 0.196778,\n 0.738991,\n -0.12199,\n 0.445651,\n 0.214496,\n 0.740865,\n -0.131153,\n 0.445958,\n 0.232913,\n 0.743637,\n -0.140245,\n 0.446548,\n 0.251977,\n 0.746797,\n -0.149722,\n 0.447246,\n 0.271551,\n 0.751517,\n -0.159341,\n 0.448656,\n 0.291774,\n 0.756156,\n -0.169106,\n 0.449866,\n 0.312455,\n 0.761519,\n -0.178436,\n 0.450919,\n 0.334552,\n 0.768295,\n -0.186904,\n 0.451776,\n 0.358491,\n 0.776613,\n -0.195117,\n 0.452832,\n 0.383446,\n 0.783966,\n -0.202695,\n 0.45249,\n 0.408945,\n 0.793542,\n -0.20985,\n 0.452587,\n 0.435364,\n 0.803192,\n -0.216403,\n 0.451852,\n 0.462336,\n 0.813892,\n -0.22251,\n 0.450708,\n 0.48987,\n 0.824968,\n -0.227676,\n 0.4486,\n 0.517697,\n 0.835859,\n -0.232443,\n 0.445156,\n 0.545975,\n 0.846825,\n -0.235775,\n 0.440351,\n 0.574483,\n 0.858085,\n -0.237897,\n 0.433641,\n 0.604246,\n 0.868825,\n -0.238074,\n 0.425354,\n 0.634101,\n 0.879638,\n -0.237661,\n 0.415383,\n 0.664201,\n 0.889966,\n -0.236186,\n 0.404136,\n 0.693918,\n 0.899479,\n -0.233599,\n 0.390917,\n 0.723481,\n 0.908769,\n -0.229737,\n 0.376352,\n 0.75258,\n 0.917966,\n -0.223836,\n 0.360372,\n 0.781764,\n 0.926304,\n -0.217067,\n 0.342551,\n 0.811139,\n 0.934626,\n -0.209309,\n 0.324238,\n 0.839585,\n 0.941841,\n -0.20071,\n 0.304484,\n 0.867044,\n 0.94789,\n -0.190602,\n 0.283607,\n 0.894579,\n 0.954196,\n -0.179253,\n 0.262205,\n 0.921743,\n 0.958383,\n -0.167646,\n 0.239847,\n 0.948026,\n 0.963119,\n -0.155073,\n 0.218078,\n 0.973296,\n 0.966941,\n -0.141426,\n 0.195899,\n 0.998135,\n 0.970836,\n -0.126849,\n 0.174121,\n 1.02021,\n 0.973301,\n -0.112296,\n 0.153052,\n 1.04085,\n 0.97448,\n -0.0964965,\n 0.131733,\n 1.05946,\n 0.977045,\n -0.080489,\n 0.10997,\n 1.07693,\n 0.980751,\n -0.064844,\n 0.0881657,\n 1.09254,\n 0.985475,\n -0.0481938,\n 0.0657987,\n 1.10697,\n 0.991089,\n -0.0319185,\n 0.0435215,\n 1.12004,\n 0.996122,\n -0.0158088,\n 0.0214779,\n 1.13173,\n 1.00001,\n 372455e-9,\n -200295e-9,\n 1.14291,\n 0.708622,\n -907597e-11,\n 0.45304,\n 141962e-10,\n 0.711162,\n -228911e-9,\n 0.454662,\n 358052e-9,\n 0.709812,\n -914446e-9,\n 0.453797,\n 143034e-8,\n 0.709865,\n -205819e-8,\n 0.453834,\n 321935e-8,\n 0.709864,\n -365894e-8,\n 0.453833,\n 572331e-8,\n 0.709855,\n -571692e-8,\n 0.453826,\n 894278e-8,\n 0.709862,\n -823201e-8,\n 0.453828,\n 0.012878,\n 0.709875,\n -0.011204,\n 0.453832,\n 0.0175295,\n 0.709896,\n -0.0146323,\n 0.453839,\n 0.0228978,\n 0.709925,\n -0.0185163,\n 0.453847,\n 0.0289839,\n 0.709974,\n -0.0228551,\n 0.453866,\n 0.0357894,\n 0.710045,\n -0.0276473,\n 0.453892,\n 0.0433161,\n 0.710133,\n -0.032891,\n 0.453924,\n 0.0515665,\n 0.710292,\n -0.0385851,\n 0.453992,\n 0.0605458,\n 0.710485,\n -0.0447254,\n 0.45407,\n 0.0702574,\n 0.710769,\n -0.0513051,\n 0.454192,\n 0.0807077,\n 0.711106,\n -0.0582733,\n 0.454329,\n 0.091896,\n 0.711516,\n -0.0652866,\n 0.45446,\n 0.103814,\n 0.712071,\n -0.0728426,\n 0.454653,\n 0.116508,\n 0.712676,\n -0.0808307,\n 0.45484,\n 0.129968,\n 0.713476,\n -0.0892216,\n 0.455096,\n 0.144206,\n 0.714377,\n -0.0979047,\n 0.455346,\n 0.159212,\n 0.715579,\n -0.106531,\n 0.455647,\n 0.174973,\n 0.716977,\n -0.115492,\n 0.455961,\n 0.191504,\n 0.71862,\n -0.124821,\n 0.456315,\n 0.208835,\n 0.72084,\n -0.134079,\n 0.4568,\n 0.226869,\n 0.723786,\n -0.143427,\n 0.457521,\n 0.245582,\n 0.727464,\n -0.153061,\n 0.458475,\n 0.264957,\n 0.732771,\n -0.162768,\n 0.460239,\n 0.284948,\n 0.736515,\n -0.172627,\n 0.460899,\n 0.30522,\n 0.743519,\n -0.182487,\n 0.463225,\n 0.326717,\n 0.750041,\n -0.191295,\n 0.464027,\n 0.350113,\n 0.758589,\n -0.199746,\n 0.465227,\n 0.374782,\n 0.767703,\n -0.207584,\n 0.465877,\n 0.400226,\n 0.777484,\n -0.214973,\n 0.465996,\n 0.426442,\n 0.788792,\n -0.221796,\n 0.466019,\n 0.453688,\n 0.800194,\n -0.228038,\n 0.465083,\n 0.481246,\n 0.811234,\n -0.233346,\n 0.462506,\n 0.509086,\n 0.822859,\n -0.238073,\n 0.459257,\n 0.537338,\n 0.835082,\n -0.241764,\n 0.454863,\n 0.566108,\n 0.846332,\n -0.244241,\n 0.448163,\n 0.595126,\n 0.858355,\n -0.244736,\n 0.439709,\n 0.625574,\n 0.87034,\n -0.244278,\n 0.429837,\n 0.65617,\n 0.881027,\n -0.24255,\n 0.418002,\n 0.686029,\n 0.891007,\n -0.239912,\n 0.404325,\n 0.716039,\n 0.900874,\n -0.236133,\n 0.389222,\n 0.745518,\n 0.911072,\n -0.230672,\n 0.373269,\n 0.775026,\n 0.920359,\n -0.22356,\n 0.355083,\n 0.804521,\n 0.928604,\n -0.215591,\n 0.335533,\n 0.834045,\n 0.937175,\n -0.206503,\n 0.315278,\n 0.861612,\n 0.942825,\n -0.196684,\n 0.293653,\n 0.889131,\n 0.949805,\n -0.185116,\n 0.271503,\n 0.916853,\n 0.955535,\n -0.172703,\n 0.248821,\n 0.943541,\n 0.959843,\n -0.159978,\n 0.225591,\n 0.970132,\n 0.964393,\n -0.146375,\n 0.202719,\n 0.994709,\n 0.968008,\n -0.131269,\n 0.179928,\n 1.0186,\n 0.971013,\n -0.11569,\n 0.158007,\n 1.03928,\n 0.973334,\n -0.1003,\n 0.13624,\n 1.05887,\n 0.975775,\n -0.0833352,\n 0.1138,\n 1.07652,\n 0.979579,\n -0.0668981,\n 0.0913141,\n 1.09297,\n 0.984323,\n -0.0500902,\n 0.0683051,\n 1.10734,\n 0.990351,\n -0.0332377,\n 0.0451771,\n 1.12084,\n 0.995823,\n -0.0161491,\n 0.0221705,\n 1.13296,\n 1.0001,\n 234083e-9,\n -108712e-9,\n 1.14441,\n 0.683895,\n -924677e-11,\n 0.46015,\n 137429e-10,\n 0.68833,\n -233383e-9,\n 0.463134,\n 346865e-9,\n 0.688368,\n -933547e-9,\n 0.463159,\n 138748e-8,\n 0.688367,\n -210049e-8,\n 0.463159,\n 312187e-8,\n 0.688369,\n -373415e-8,\n 0.463159,\n 555004e-8,\n 0.688377,\n -583449e-8,\n 0.463163,\n 867216e-8,\n 0.688386,\n -840128e-8,\n 0.463166,\n 0.0124884,\n 0.688398,\n -0.0114343,\n 0.463169,\n 0.0169993,\n 0.688418,\n -0.0149329,\n 0.463175,\n 0.0222054,\n 0.688453,\n -0.0188964,\n 0.463188,\n 0.028108,\n 0.688515,\n -0.0233239,\n 0.463214,\n 0.0347085,\n 0.68857,\n -0.0282136,\n 0.463231,\n 0.0420091,\n 0.688679,\n -0.033564,\n 0.463276,\n 0.0500132,\n 0.688854,\n -0.0393733,\n 0.463356,\n 0.0587255,\n 0.689038,\n -0.0456354,\n 0.46343,\n 0.0681476,\n 0.689321,\n -0.0523433,\n 0.463553,\n 0.0782897,\n 0.689662,\n -0.059412,\n 0.463693,\n 0.0891501,\n 0.690188,\n -0.0665736,\n 0.4639,\n 0.100735,\n 0.690755,\n -0.0743106,\n 0.464107,\n 0.113074,\n 0.691405,\n -0.0824722,\n 0.464329,\n 0.126161,\n 0.692198,\n -0.0910484,\n 0.464585,\n 0.140007,\n 0.693196,\n -0.0998778,\n 0.464893,\n 0.154612,\n 0.69454,\n -0.108651,\n 0.465285,\n 0.169984,\n 0.695921,\n -0.117855,\n 0.465596,\n 0.186106,\n 0.697749,\n -0.12734,\n 0.466056,\n 0.203034,\n 0.700375,\n -0.136714,\n 0.466771,\n 0.220703,\n 0.703395,\n -0.146386,\n 0.467579,\n 0.239062,\n 0.707904,\n -0.156096,\n 0.469067,\n 0.258188,\n 0.711673,\n -0.165904,\n 0.469851,\n 0.277759,\n 0.717489,\n -0.175812,\n 0.471815,\n 0.297935,\n 0.724051,\n -0.185931,\n 0.47389,\n 0.318916,\n 0.731965,\n -0.195238,\n 0.47587,\n 0.341591,\n 0.741151,\n -0.204021,\n 0.477523,\n 0.366062,\n 0.751416,\n -0.212113,\n 0.478881,\n 0.391396,\n 0.761848,\n -0.21979,\n 0.479226,\n 0.417599,\n 0.771886,\n -0.2267,\n 0.478495,\n 0.444401,\n 0.783998,\n -0.232991,\n 0.477622,\n 0.472084,\n 0.796523,\n -0.238645,\n 0.475833,\n 0.500193,\n 0.808851,\n -0.243396,\n 0.472568,\n 0.52865,\n 0.821191,\n -0.247226,\n 0.467857,\n 0.557362,\n 0.834261,\n -0.250102,\n 0.461871,\n 0.586768,\n 0.846762,\n -0.251056,\n 0.453543,\n 0.617085,\n 0.859867,\n -0.250604,\n 0.443494,\n 0.647659,\n 0.871948,\n -0.248783,\n 0.431711,\n 0.678119,\n 0.882967,\n -0.245855,\n 0.417911,\n 0.708399,\n 0.892826,\n -0.242168,\n 0.401993,\n 0.738256,\n 0.90332,\n -0.237062,\n 0.385371,\n 0.767999,\n 0.913633,\n -0.22997,\n 0.366837,\n 0.798191,\n 0.922774,\n -0.221687,\n 0.346372,\n 0.827756,\n 0.931371,\n -0.212345,\n 0.325682,\n 0.856425,\n 0.938929,\n -0.20206,\n 0.303665,\n 0.884299,\n 0.944821,\n -0.190981,\n 0.280786,\n 0.912023,\n 0.951792,\n -0.178065,\n 0.2573,\n 0.939669,\n 0.957712,\n -0.164634,\n 0.233448,\n 0.96655,\n 0.961912,\n -0.150863,\n 0.209504,\n 0.992366,\n 0.966382,\n -0.13577,\n 0.18597,\n 1.01633,\n 0.969588,\n -0.119593,\n 0.162905,\n 1.03843,\n 0.971777,\n -0.103203,\n 0.14053,\n 1.05841,\n 0.97433,\n -0.0865888,\n 0.117909,\n 1.07632,\n 0.978686,\n -0.0690829,\n 0.0944101,\n 1.09326,\n 0.983281,\n -0.0516568,\n 0.0705671,\n 1.10796,\n 0.989562,\n -0.034558,\n 0.0468592,\n 1.12182,\n 0.995465,\n -0.0167808,\n 0.0229846,\n 1.1342,\n 0.999991,\n 373016e-9,\n -235606e-9,\n 1.1459,\n 0.662251,\n -939016e-11,\n 0.468575,\n 132714e-10,\n 0.666634,\n -237624e-9,\n 0.471675,\n 335842e-9,\n 0.666411,\n -950385e-9,\n 0.471516,\n 134321e-8,\n 0.666399,\n -213833e-8,\n 0.471509,\n 302221e-8,\n 0.666386,\n -38014e-7,\n 0.471499,\n 537283e-8,\n 0.666405,\n -593958e-8,\n 0.471511,\n 839533e-8,\n 0.666406,\n -855253e-8,\n 0.471508,\n 0.0120898,\n 0.666428,\n -0.0116401,\n 0.471519,\n 0.0164569,\n 0.666444,\n -0.0152015,\n 0.471522,\n 0.0214971,\n 0.66649,\n -0.0192362,\n 0.471543,\n 0.027212,\n 0.666537,\n -0.0237428,\n 0.471558,\n 0.033603,\n 0.666617,\n -0.0287198,\n 0.471591,\n 0.0406728,\n 0.666718,\n -0.0341647,\n 0.471631,\n 0.0484238,\n 0.666889,\n -0.0400759,\n 0.47171,\n 0.0568621,\n 0.667104,\n -0.0464479,\n 0.471805,\n 0.0659915,\n 0.667374,\n -0.0532677,\n 0.471923,\n 0.0758178,\n 0.667772,\n -0.0603805,\n 0.472098,\n 0.0863425,\n 0.668371,\n -0.0677392,\n 0.472363,\n 0.0975917,\n 0.668971,\n -0.0756028,\n 0.472596,\n 0.109567,\n 0.669696,\n -0.0839293,\n 0.472869,\n 0.122272,\n 0.670481,\n -0.0926683,\n 0.473126,\n 0.135718,\n 0.6715,\n -0.1016,\n 0.473442,\n 0.149914,\n 0.672911,\n -0.110566,\n 0.47389,\n 0.164882,\n 0.674512,\n -0.119984,\n 0.474354,\n 0.180602,\n 0.67651,\n -0.129574,\n 0.474922,\n 0.19711,\n 0.679292,\n -0.139106,\n 0.475764,\n 0.214371,\n 0.682798,\n -0.148993,\n 0.476886,\n 0.232405,\n 0.686955,\n -0.158737,\n 0.478179,\n 0.251153,\n 0.691406,\n -0.168754,\n 0.479432,\n 0.270436,\n 0.697438,\n -0.178703,\n 0.481481,\n 0.290374,\n 0.704761,\n -0.188955,\n 0.484143,\n 0.311044,\n 0.713599,\n -0.198814,\n 0.487007,\n 0.333003,\n 0.723194,\n -0.207869,\n 0.488962,\n 0.357144,\n 0.732601,\n -0.216189,\n 0.489815,\n 0.382169,\n 0.744193,\n -0.22398,\n 0.490888,\n 0.408227,\n 0.754907,\n -0.231156,\n 0.490355,\n 0.434928,\n 0.767403,\n -0.23747,\n 0.489548,\n 0.462599,\n 0.78107,\n -0.243503,\n 0.488274,\n 0.490908,\n 0.793893,\n -0.248114,\n 0.484843,\n 0.519421,\n 0.807296,\n -0.25222,\n 0.4803,\n 0.548561,\n 0.820529,\n -0.255265,\n 0.474097,\n 0.577772,\n 0.833716,\n -0.256741,\n 0.466041,\n 0.607782,\n 0.848403,\n -0.25637,\n 0.456547,\n 0.638807,\n 0.860755,\n -0.254804,\n 0.443946,\n 0.670058,\n 0.874012,\n -0.251834,\n 0.430852,\n 0.700749,\n 0.885619,\n -0.247867,\n 0.414903,\n 0.731446,\n 0.896069,\n -0.242634,\n 0.397276,\n 0.761191,\n 0.906266,\n -0.236093,\n 0.378535,\n 0.791053,\n 0.916759,\n -0.227543,\n 0.358038,\n 0.821298,\n 0.92523,\n -0.21783,\n 0.335705,\n 0.850747,\n 0.93436,\n -0.207534,\n 0.313797,\n 0.879258,\n 0.941631,\n -0.195983,\n 0.289671,\n 0.907734,\n 0.947564,\n -0.183567,\n 0.265319,\n 0.935206,\n 0.953681,\n -0.169345,\n 0.240815,\n 0.962739,\n 0.960008,\n -0.154909,\n 0.216119,\n 0.989227,\n 0.964145,\n -0.140161,\n 0.192096,\n 1.01465,\n 0.968171,\n -0.123411,\n 0.167855,\n 1.03737,\n 0.969859,\n -0.106525,\n 0.144817,\n 1.05767,\n 0.972666,\n -0.0891023,\n 0.12149,\n 1.0761,\n 0.977055,\n -0.0718094,\n 0.0975306,\n 1.09336,\n 0.982527,\n -0.0534213,\n 0.0730217,\n 1.10878,\n 0.989001,\n -0.0355579,\n 0.0483366,\n 1.12285,\n 0.99512,\n -0.0176383,\n 0.023938,\n 1.13548,\n 1.00007,\n 368831e-9,\n -211581e-9,\n 1.14744,\n 0.651047,\n -960845e-11,\n 0.484101,\n 12922e-9,\n 0.644145,\n -241347e-9,\n 0.478968,\n 324578e-9,\n 0.64396,\n -965142e-9,\n 0.478831,\n 129798e-8,\n 0.64396,\n -217154e-8,\n 0.47883,\n 292046e-8,\n 0.643968,\n -386049e-8,\n 0.478835,\n 519202e-8,\n 0.643974,\n -603186e-8,\n 0.478838,\n 81128e-7,\n 0.643977,\n -86854e-7,\n 0.478836,\n 0.011683,\n 0.643982,\n -0.0118207,\n 0.478834,\n 0.0159031,\n 0.644024,\n -0.0154374,\n 0.478856,\n 0.0207743,\n 0.644059,\n -0.0195343,\n 0.478868,\n 0.0262975,\n 0.644122,\n -0.0241103,\n 0.478896,\n 0.0324747,\n 0.644207,\n -0.0291638,\n 0.478933,\n 0.039309,\n 0.64432,\n -0.0346919,\n 0.478981,\n 0.0468029,\n 0.644481,\n -0.0406919,\n 0.479053,\n 0.0549614,\n 0.644722,\n -0.047159,\n 0.479169,\n 0.0637909,\n 0.645013,\n -0.0540748,\n 0.479302,\n 0.0732974,\n 0.645503,\n -0.0612001,\n 0.479541,\n 0.0834898,\n 0.646117,\n -0.0687303,\n 0.479829,\n 0.0943873,\n 0.646707,\n -0.0767846,\n 0.480061,\n 0.105991,\n 0.647431,\n -0.0852465,\n 0.480343,\n 0.11831,\n 0.64831,\n -0.0940719,\n 0.48066,\n 0.131348,\n 0.649486,\n -0.103056,\n 0.481083,\n 0.14514,\n 0.650864,\n -0.112261,\n 0.481528,\n 0.159676,\n 0.652604,\n -0.121852,\n 0.482102,\n 0.174979,\n 0.654825,\n -0.131505,\n 0.482813,\n 0.191079,\n 0.657876,\n -0.141189,\n 0.483876,\n 0.207927,\n 0.661339,\n -0.151239,\n 0.48499,\n 0.225586,\n 0.665463,\n -0.161091,\n 0.486279,\n 0.243947,\n 0.670542,\n -0.171235,\n 0.487968,\n 0.262957,\n 0.677361,\n -0.181347,\n 0.49053,\n 0.282781,\n 0.685672,\n -0.191679,\n 0.493862,\n 0.303311,\n 0.694551,\n -0.201781,\n 0.49699,\n 0.324607,\n 0.703753,\n -0.211164,\n 0.498884,\n 0.347916,\n 0.713703,\n -0.219675,\n 0.500086,\n 0.372628,\n 0.725911,\n -0.227836,\n 0.501554,\n 0.398694,\n 0.73862,\n -0.23533,\n 0.502193,\n 0.425529,\n 0.752118,\n -0.241786,\n 0.501811,\n 0.453209,\n 0.76579,\n -0.247865,\n 0.500185,\n 0.481381,\n 0.779568,\n -0.252696,\n 0.497159,\n 0.51011,\n 0.793991,\n -0.256802,\n 0.492765,\n 0.539322,\n 0.808182,\n -0.259942,\n 0.486827,\n 0.569078,\n 0.821698,\n -0.261703,\n 0.478386,\n 0.598818,\n 0.836009,\n -0.262006,\n 0.468772,\n 0.629762,\n 0.849824,\n -0.260333,\n 0.456352,\n 0.661366,\n 0.863888,\n -0.257398,\n 0.442533,\n 0.69295,\n 0.876585,\n -0.253264,\n 0.426573,\n 0.723608,\n 0.888665,\n -0.248026,\n 0.408964,\n 0.754378,\n 0.899537,\n -0.241487,\n 0.389677,\n 0.784761,\n 0.9094,\n -0.233463,\n 0.368516,\n 0.814688,\n 0.920166,\n -0.223397,\n 0.346624,\n 0.845009,\n 0.928899,\n -0.21255,\n 0.322717,\n 0.874431,\n 0.937156,\n -0.200869,\n 0.298698,\n 0.902922,\n 0.943861,\n -0.188387,\n 0.273491,\n 0.931356,\n 0.949557,\n -0.174341,\n 0.247866,\n 0.958854,\n 0.955862,\n -0.158994,\n 0.222496,\n 0.986098,\n 0.961721,\n -0.143664,\n 0.197522,\n 1.01229,\n 0.965976,\n -0.127412,\n 0.17302,\n 1.03571,\n 0.968652,\n -0.109798,\n 0.148954,\n 1.05699,\n 0.971084,\n -0.0916787,\n 0.125044,\n 1.07587,\n 0.975584,\n -0.0739634,\n 0.100577,\n 1.09372,\n 0.98122,\n -0.055322,\n 0.0753666,\n 1.10948,\n 0.988253,\n -0.0366825,\n 0.0498899,\n 1.12394,\n 0.99482,\n -0.0180389,\n 0.024611,\n 1.13694,\n 1.00001,\n 229839e-9,\n -188283e-9,\n 1.14919,\n 0.613867,\n -964198e-11,\n 0.479449,\n 123452e-10,\n 0.621485,\n -244534e-9,\n 0.485399,\n 313091e-9,\n 0.621429,\n -978202e-9,\n 0.485353,\n 125245e-8,\n 0.62112,\n -220004e-8,\n 0.485114,\n 281687e-8,\n 0.621119,\n -39111e-7,\n 0.485112,\n 500783e-8,\n 0.621122,\n -611091e-8,\n 0.485112,\n 782498e-8,\n 0.621133,\n -879922e-8,\n 0.485117,\n 0.0112687,\n 0.621152,\n -0.0119756,\n 0.485125,\n 0.0153394,\n 0.621183,\n -0.0156396,\n 0.485139,\n 0.0200382,\n 0.621227,\n -0.0197898,\n 0.485158,\n 0.0253663,\n 0.621298,\n -0.0244253,\n 0.485192,\n 0.0313261,\n 0.621388,\n -0.0295441,\n 0.485233,\n 0.0379204,\n 0.621507,\n -0.0351432,\n 0.485286,\n 0.0451523,\n 0.621693,\n -0.0412198,\n 0.485378,\n 0.0530277,\n 0.621933,\n -0.0477673,\n 0.485495,\n 0.0615522,\n 0.622232,\n -0.0547574,\n 0.485635,\n 0.0707316,\n 0.622809,\n -0.0619417,\n 0.485943,\n 0.0805883,\n 0.623407,\n -0.069625,\n 0.486232,\n 0.0911267,\n 0.62406,\n -0.077796,\n 0.486516,\n 0.102354,\n 0.624835,\n -0.0863731,\n 0.486838,\n 0.114279,\n 0.625758,\n -0.095251,\n 0.487188,\n 0.126902,\n 0.627043,\n -0.104299,\n 0.487695,\n 0.140285,\n 0.628438,\n -0.113724,\n 0.488163,\n 0.154397,\n 0.630325,\n -0.123417,\n 0.488858,\n 0.169267,\n 0.632801,\n -0.133137,\n 0.489754,\n 0.184941,\n 0.635784,\n -0.143052,\n 0.490815,\n 0.20136,\n 0.639406,\n -0.153132,\n 0.492048,\n 0.218643,\n 0.643872,\n -0.163143,\n 0.49363,\n 0.236615,\n 0.6499,\n -0.17333,\n 0.496009,\n 0.255449,\n 0.657201,\n -0.183622,\n 0.498994,\n 0.275006,\n 0.666221,\n -0.194019,\n 0.502888,\n 0.295354,\n 0.674419,\n -0.204192,\n 0.505459,\n 0.316244,\n 0.683729,\n -0.21406,\n 0.507771,\n 0.33849,\n 0.695584,\n -0.222854,\n 0.510245,\n 0.363166,\n 0.708583,\n -0.231315,\n 0.512293,\n 0.389071,\n 0.721233,\n -0.238911,\n 0.512747,\n 0.415737,\n 0.735134,\n -0.245657,\n 0.512482,\n 0.443331,\n 0.750179,\n -0.251879,\n 0.511526,\n 0.471891,\n 0.765073,\n -0.256911,\n 0.508935,\n 0.500892,\n 0.779794,\n -0.261144,\n 0.504341,\n 0.530294,\n 0.794801,\n -0.264316,\n 0.498515,\n 0.560144,\n 0.810339,\n -0.266276,\n 0.491015,\n 0.590213,\n 0.824818,\n -0.266981,\n 0.481126,\n 0.620865,\n 0.839375,\n -0.265778,\n 0.468685,\n 0.652687,\n 0.853043,\n -0.262748,\n 0.453925,\n 0.684759,\n 0.867335,\n -0.258474,\n 0.437912,\n 0.716209,\n 0.88037,\n -0.253187,\n 0.419648,\n 0.747508,\n 0.891711,\n -0.246476,\n 0.39982,\n 0.77797,\n 0.902896,\n -0.238735,\n 0.37879,\n 0.808586,\n 0.913601,\n -0.22885,\n 0.355891,\n 0.838843,\n 0.923019,\n -0.217656,\n 0.331773,\n 0.869014,\n 0.933432,\n -0.205539,\n 0.307356,\n 0.898512,\n 0.939691,\n -0.192595,\n 0.281321,\n 0.9269,\n 0.946938,\n -0.178945,\n 0.255441,\n 0.955297,\n 0.952372,\n -0.163587,\n 0.229013,\n 0.983231,\n 0.95909,\n -0.147214,\n 0.203179,\n 1.00971,\n 0.963675,\n -0.13064,\n 0.17792,\n 1.03438,\n 0.968247,\n -0.113121,\n 0.152898,\n 1.05625,\n 0.97001,\n -0.0945824,\n 0.128712,\n 1.07598,\n 0.974458,\n -0.0755648,\n 0.103349,\n 1.094,\n 0.980168,\n -0.0571998,\n 0.0776731,\n 1.1104,\n 0.987295,\n -0.0377994,\n 0.0514445,\n 1.12491,\n 0.994432,\n -0.0186417,\n 0.025429,\n 1.13851,\n 0.999975,\n 542714e-9,\n -282356e-9,\n 1.15108,\n 0.592656,\n -980249e-11,\n 0.486018,\n 119532e-10,\n 0.598467,\n -247275e-9,\n 0.490781,\n 301531e-9,\n 0.597934,\n -988317e-9,\n 0.490343,\n 120517e-8,\n 0.597903,\n -222366e-8,\n 0.490319,\n 27116e-7,\n 0.597913,\n -395315e-8,\n 0.490327,\n 482077e-8,\n 0.597919,\n -617653e-8,\n 0.490329,\n 753264e-8,\n 0.597936,\n -889375e-8,\n 0.490339,\n 0.0108478,\n 0.597956,\n -0.0121043,\n 0.490347,\n 0.0147668,\n 0.597992,\n -0.0158073,\n 0.490365,\n 0.0192905,\n 0.598032,\n -0.0200017,\n 0.490382,\n 0.0244204,\n 0.598109,\n -0.0246865,\n 0.49042,\n 0.0301593,\n 0.598215,\n -0.0298594,\n 0.490474,\n 0.03651,\n 0.59833,\n -0.0355167,\n 0.490524,\n 0.0434757,\n 0.598525,\n -0.0416559,\n 0.490624,\n 0.0510629,\n 0.598778,\n -0.0482692,\n 0.490753,\n 0.0592781,\n 0.599135,\n -0.0553114,\n 0.49094,\n 0.0681304,\n 0.599802,\n -0.062542,\n 0.491328,\n 0.0776467,\n 0.600361,\n -0.0703638,\n 0.491598,\n 0.0878184,\n 0.60101,\n -0.0786256,\n 0.491882,\n 0.0986573,\n 0.601811,\n -0.0872962,\n 0.492232,\n 0.11018,\n 0.602861,\n -0.0962284,\n 0.492684,\n 0.1224,\n 0.604167,\n -0.10538,\n 0.493213,\n 0.135354,\n 0.605693,\n -0.114896,\n 0.493799,\n 0.149034,\n 0.607682,\n -0.124654,\n 0.494576,\n 0.163469,\n 0.610672,\n -0.13456,\n 0.4959,\n 0.178747,\n 0.613313,\n -0.144581,\n 0.496713,\n 0.194723,\n 0.617603,\n -0.154703,\n 0.498499,\n 0.211617,\n 0.622174,\n -0.16489,\n 0.500188,\n 0.229183,\n 0.628855,\n -0.175164,\n 0.503072,\n 0.247786,\n 0.636963,\n -0.185565,\n 0.506798,\n 0.267116,\n 0.644866,\n -0.195911,\n 0.509719,\n 0.28702,\n 0.653741,\n -0.206104,\n 0.512776,\n 0.307763,\n 0.664942,\n -0.216447,\n 0.516812,\n 0.329631,\n 0.67633,\n -0.22552,\n 0.519181,\n 0.353515,\n 0.690012,\n -0.234316,\n 0.521681,\n 0.379226,\n 0.704243,\n -0.242032,\n 0.523129,\n 0.405901,\n 0.719396,\n -0.249172,\n 0.523768,\n 0.433585,\n 0.734471,\n -0.255543,\n 0.522541,\n 0.462085,\n 0.750539,\n -0.260697,\n 0.520217,\n 0.491233,\n 0.766365,\n -0.26501,\n 0.516293,\n 0.521094,\n 0.781677,\n -0.268409,\n 0.509708,\n 0.551014,\n 0.797132,\n -0.270399,\n 0.501944,\n 0.581463,\n 0.812655,\n -0.271247,\n 0.492025,\n 0.612402,\n 0.828592,\n -0.270708,\n 0.480424,\n 0.643798,\n 0.844044,\n -0.268085,\n 0.465955,\n 0.67682,\n 0.857305,\n -0.263459,\n 0.448425,\n 0.708496,\n 0.87114,\n -0.258151,\n 0.430243,\n 0.74046,\n 0.884936,\n -0.251171,\n 0.410578,\n 0.771583,\n 0.895772,\n -0.243305,\n 0.38862,\n 0.802234,\n 0.906961,\n -0.234037,\n 0.365214,\n 0.833179,\n 0.917775,\n -0.222714,\n 0.34116,\n 0.86353,\n 0.927883,\n -0.210175,\n 0.31572,\n 0.893557,\n 0.936617,\n -0.196925,\n 0.289159,\n 0.922976,\n 0.943384,\n -0.182788,\n 0.261996,\n 0.951606,\n 0.949713,\n -0.167965,\n 0.235324,\n 0.979958,\n 0.955818,\n -0.151109,\n 0.208408,\n 1.00765,\n 0.961344,\n -0.133834,\n 0.182591,\n 1.03329,\n 0.965469,\n -0.115987,\n 0.156958,\n 1.0557,\n 0.968693,\n -0.09746,\n 0.132239,\n 1.07583,\n 0.973165,\n -0.0778514,\n 0.106195,\n 1.09451,\n 0.979387,\n -0.0585067,\n 0.0797669,\n 1.11137,\n 0.98671,\n -0.0390409,\n 0.0530263,\n 1.12643,\n 0.994093,\n -0.019408,\n 0.0263163,\n 1.14016,\n 1.00002,\n 540029e-9,\n -194487e-9,\n 1.15299,\n 0.574483,\n -989066e-11,\n 0.494533,\n 114896e-10,\n 0.574478,\n -249127e-9,\n 0.494528,\n 289403e-9,\n 0.574607,\n -996811e-9,\n 0.494637,\n 115797e-8,\n 0.574396,\n -224241e-8,\n 0.494458,\n 260498e-8,\n 0.574377,\n -398632e-8,\n 0.49444,\n 463102e-8,\n 0.574386,\n -622836e-8,\n 0.494445,\n 723623e-8,\n 0.574401,\n -89683e-7,\n 0.494453,\n 0.010421,\n 0.574419,\n -0.0122056,\n 0.49446,\n 0.0141859,\n 0.574459,\n -0.0159396,\n 0.494481,\n 0.0185322,\n 0.574525,\n -0.0201692,\n 0.49452,\n 0.0234617,\n 0.574587,\n -0.0248924,\n 0.494547,\n 0.0289762,\n 0.574697,\n -0.0301074,\n 0.494604,\n 0.0350797,\n 0.574853,\n -0.0358114,\n 0.494688,\n 0.0417767,\n 0.575027,\n -0.041999,\n 0.494772,\n 0.0490718,\n 0.575294,\n -0.0486618,\n 0.494915,\n 0.0569728,\n 0.575733,\n -0.0557148,\n 0.495173,\n 0.0654955,\n 0.576356,\n -0.0630489,\n 0.495537,\n 0.0746612,\n 0.576944,\n -0.0709285,\n 0.495836,\n 0.0844615,\n 0.57765,\n -0.0792723,\n 0.496177,\n 0.0949142,\n 0.578491,\n -0.0880167,\n 0.496563,\n 0.10603,\n 0.579639,\n -0.0969462,\n 0.497096,\n 0.117841,\n 0.580989,\n -0.10622,\n 0.497684,\n 0.130367,\n 0.582587,\n -0.115861,\n 0.498337,\n 0.143609,\n 0.584951,\n -0.125605,\n 0.499414,\n 0.157625,\n 0.587602,\n -0.135608,\n 0.500518,\n 0.172413,\n 0.59076,\n -0.145742,\n 0.501767,\n 0.187999,\n 0.594992,\n -0.155934,\n 0.503542,\n 0.20445,\n 0.600656,\n -0.166303,\n 0.506135,\n 0.221764,\n 0.607816,\n -0.176681,\n 0.509542,\n 0.24002,\n 0.61522,\n -0.187071,\n 0.51263,\n 0.258992,\n 0.623702,\n -0.197465,\n 0.516021,\n 0.278773,\n 0.634192,\n -0.207816,\n 0.520422,\n 0.299377,\n 0.644936,\n -0.218183,\n 0.524073,\n 0.320802,\n 0.657888,\n -0.2278,\n 0.528049,\n 0.34384,\n 0.670666,\n -0.236747,\n 0.52986,\n 0.36916,\n 0.685626,\n -0.24484,\n 0.531892,\n 0.395867,\n 0.701304,\n -0.252071,\n 0.532727,\n 0.423488,\n 0.717727,\n -0.258714,\n 0.532146,\n 0.452201,\n 0.733914,\n -0.264211,\n 0.529883,\n 0.481579,\n 0.750529,\n -0.26859,\n 0.5259,\n 0.511558,\n 0.76747,\n -0.272046,\n 0.51999,\n 0.542042,\n 0.785189,\n -0.274225,\n 0.513083,\n 0.572799,\n 0.800954,\n -0.275189,\n 0.502936,\n 0.603816,\n 0.816962,\n -0.274946,\n 0.490921,\n 0.635461,\n 0.83336,\n -0.272695,\n 0.47684,\n 0.6676,\n 0.848143,\n -0.268223,\n 0.459405,\n 0.70051,\n 0.861818,\n -0.262768,\n 0.440319,\n 0.732902,\n 0.876828,\n -0.255872,\n 0.420123,\n 0.765084,\n 0.889312,\n -0.247703,\n 0.398379,\n 0.796391,\n 0.900412,\n -0.238381,\n 0.374496,\n 0.827333,\n 0.912251,\n -0.227783,\n 0.349874,\n 0.858385,\n 0.921792,\n -0.214832,\n 0.323181,\n 0.888652,\n 0.931273,\n -0.200949,\n 0.296624,\n 0.917763,\n 0.940295,\n -0.186537,\n 0.269211,\n 0.947878,\n 0.946812,\n -0.171538,\n 0.241447,\n 0.977016,\n 0.953588,\n -0.155254,\n 0.213829,\n 1.00501,\n 0.958841,\n -0.137156,\n 0.186807,\n 1.03179,\n 0.963746,\n -0.118699,\n 0.160706,\n 1.05502,\n 0.966468,\n -0.0998358,\n 0.135504,\n 1.07568,\n 0.971178,\n -0.0805186,\n 0.109131,\n 1.09479,\n 0.97831,\n -0.0599348,\n 0.0818293,\n 1.1123,\n 0.985886,\n -0.0399661,\n 0.0545872,\n 1.12771,\n 0.994021,\n -0.0198682,\n 0.0269405,\n 1.14186,\n 1.00009,\n 271022e-9,\n -12989e-8,\n 1.15514,\n 0.538716,\n -990918e-11,\n 0.486732,\n 109675e-10,\n 0.550656,\n -250642e-9,\n 0.497518,\n 277412e-9,\n 0.55057,\n -100265e-8,\n 0.497441,\n 110974e-8,\n 0.550903,\n -225672e-8,\n 0.497733,\n 249779e-8,\n 0.550568,\n -401046e-8,\n 0.497438,\n 443906e-8,\n 0.550574,\n -626613e-8,\n 0.49744,\n 693637e-8,\n 0.550591,\n -90226e-7,\n 0.497449,\n 998921e-8,\n 0.550623,\n -0.0122795,\n 0.497469,\n 0.0135984,\n 0.550667,\n -0.0160361,\n 0.497495,\n 0.0177654,\n 0.550724,\n -0.0202908,\n 0.497526,\n 0.0224915,\n 0.550792,\n -0.0250421,\n 0.497557,\n 0.0277795,\n 0.550918,\n -0.0302878,\n 0.49763,\n 0.0336334,\n 0.551058,\n -0.0360241,\n 0.497701,\n 0.0400573,\n 0.551276,\n -0.0422473,\n 0.497824,\n 0.0470585,\n 0.551551,\n -0.0489441,\n 0.497977,\n 0.0546433,\n 0.552074,\n -0.0559596,\n 0.498312,\n 0.0628367,\n 0.552681,\n -0.0633978,\n 0.498679,\n 0.071646,\n 0.553324,\n -0.0713176,\n 0.499031,\n 0.0810746,\n 0.554011,\n -0.0797268,\n 0.499365,\n 0.091129,\n 0.55488,\n -0.0885238,\n 0.499779,\n 0.101837,\n 0.556171,\n -0.0974417,\n 0.500444,\n 0.113239,\n 0.557498,\n -0.106841,\n 0.501025,\n 0.125316,\n 0.559299,\n -0.116533,\n 0.501864,\n 0.138128,\n 0.561647,\n -0.126298,\n 0.502967,\n 0.151695,\n 0.564347,\n -0.136388,\n 0.504129,\n 0.16604,\n 0.567863,\n -0.146576,\n 0.505713,\n 0.181207,\n 0.572569,\n -0.156832,\n 0.507953,\n 0.197259,\n 0.578919,\n -0.167323,\n 0.511186,\n 0.214258,\n 0.585387,\n -0.177712,\n 0.514042,\n 0.232038,\n 0.593134,\n -0.188184,\n 0.517484,\n 0.250733,\n 0.603295,\n -0.198717,\n 0.522345,\n 0.270454,\n 0.613854,\n -0.209177,\n 0.526751,\n 0.290807,\n 0.626092,\n -0.219644,\n 0.531595,\n 0.312202,\n 0.637868,\n -0.229494,\n 0.534721,\n 0.334435,\n 0.652458,\n -0.238718,\n 0.538304,\n 0.359184,\n 0.666985,\n -0.247061,\n 0.539875,\n 0.385637,\n 0.683301,\n -0.254652,\n 0.541042,\n 0.41328,\n 0.69998,\n -0.261376,\n 0.540735,\n 0.441903,\n 0.717824,\n -0.267085,\n 0.539139,\n 0.471609,\n 0.734617,\n -0.271465,\n 0.534958,\n 0.501446,\n 0.753663,\n -0.27528,\n 0.53032,\n 0.532571,\n 0.770512,\n -0.277617,\n 0.522134,\n 0.563641,\n 0.787356,\n -0.278525,\n 0.51206,\n 0.595067,\n 0.806252,\n -0.278512,\n 0.50119,\n 0.627226,\n 0.822061,\n -0.277023,\n 0.486791,\n 0.659402,\n 0.838959,\n -0.273175,\n 0.470467,\n 0.692874,\n 0.85379,\n -0.267238,\n 0.450688,\n 0.725702,\n 0.868268,\n -0.260327,\n 0.429741,\n 0.75832,\n 0.881994,\n -0.251946,\n 0.407223,\n 0.790189,\n 0.893885,\n -0.242432,\n 0.383214,\n 0.821625,\n 0.905118,\n -0.231904,\n 0.357297,\n 0.853011,\n 0.916045,\n -0.219545,\n 0.330733,\n 0.883773,\n 0.927614,\n -0.205378,\n 0.303916,\n 0.914435,\n 0.936005,\n -0.190388,\n 0.275941,\n 0.944502,\n 0.944533,\n -0.1749,\n 0.247493,\n 0.974439,\n 0.950758,\n -0.158588,\n 0.218996,\n 1.00286,\n 0.957078,\n -0.141027,\n 0.191559,\n 1.0304,\n 0.962448,\n -0.121507,\n 0.164457,\n 1.05466,\n 0.964993,\n -0.102068,\n 0.138636,\n 1.0761,\n 0.970017,\n -0.0822598,\n 0.111861,\n 1.09541,\n 0.97661,\n -0.062033,\n 0.0843438,\n 1.11317,\n 0.985073,\n -0.0409832,\n 0.0558496,\n 1.12911,\n 0.993515,\n -0.020146,\n 0.0275331,\n 1.1438,\n 1.00006,\n 27329e-8,\n -107883e-9,\n 1.15736,\n 0.525324,\n -999341e-11,\n 0.498153,\n 105385e-10,\n 0.526513,\n -251605e-9,\n 0.499277,\n 265329e-9,\n 0.526517,\n -100641e-8,\n 0.499282,\n 10613e-7,\n 0.526588,\n -226466e-8,\n 0.499337,\n 238823e-8,\n 0.526539,\n -40255e-7,\n 0.499302,\n 424535e-8,\n 0.526547,\n -628954e-8,\n 0.499306,\n 663364e-8,\n 0.526561,\n -905628e-8,\n 0.499313,\n 955337e-8,\n 0.526593,\n -0.0123253,\n 0.499334,\n 0.0130054,\n 0.526642,\n -0.0160957,\n 0.499365,\n 0.0169911,\n 0.5267,\n -0.0203661,\n 0.499396,\n 0.0215122,\n 0.526792,\n -0.0251347,\n 0.499451,\n 0.0265718,\n 0.526904,\n -0.0303985,\n 0.499511,\n 0.0321732,\n 0.527079,\n -0.0361554,\n 0.499617,\n 0.0383231,\n 0.527285,\n -0.0423982,\n 0.499731,\n 0.045026,\n 0.527602,\n -0.0491121,\n 0.499924,\n 0.0522936,\n 0.528166,\n -0.0561127,\n 0.500306,\n 0.0601528,\n 0.52879,\n -0.0635988,\n 0.5007,\n 0.0686059,\n 0.529421,\n -0.071581,\n 0.501048,\n 0.0776518,\n 0.530144,\n -0.0799854,\n 0.501421,\n 0.0873148,\n 0.531062,\n -0.0888032,\n 0.501884,\n 0.0976084,\n 0.532374,\n -0.0977643,\n 0.50259,\n 0.108588,\n 0.533828,\n -0.107197,\n 0.50329,\n 0.120234,\n 0.53581,\n -0.116887,\n 0.504312,\n 0.132602,\n 0.538063,\n -0.126755,\n 0.505365,\n 0.145721,\n 0.5409,\n -0.136819,\n 0.506668,\n 0.159617,\n 0.544882,\n -0.147117,\n 0.508731,\n 0.174369,\n 0.550238,\n -0.157446,\n 0.511601,\n 0.190028,\n 0.556038,\n -0.167988,\n 0.514431,\n 0.206587,\n 0.563031,\n -0.178364,\n 0.517808,\n 0.224046,\n 0.571543,\n -0.189007,\n 0.521937,\n 0.242503,\n 0.582255,\n -0.199546,\n 0.527415,\n 0.261977,\n 0.59272,\n -0.210084,\n 0.531682,\n 0.282162,\n 0.605648,\n -0.220448,\n 0.537123,\n 0.303426,\n 0.61785,\n -0.230593,\n 0.540664,\n 0.325323,\n 0.632223,\n -0.240238,\n 0.544467,\n 0.348993,\n 0.648819,\n -0.24887,\n 0.547594,\n 0.375462,\n 0.665825,\n -0.256657,\n 0.54912,\n 0.403024,\n 0.683389,\n -0.263711,\n 0.549294,\n 0.431773,\n 0.701495,\n -0.269666,\n 0.547649,\n 0.461494,\n 0.719197,\n -0.274169,\n 0.543786,\n 0.491623,\n 0.737906,\n -0.278124,\n 0.538644,\n 0.522994,\n 0.756652,\n -0.280632,\n 0.531057,\n 0.554775,\n 0.775279,\n -0.281741,\n 0.521972,\n 0.586441,\n 0.792688,\n -0.281652,\n 0.509613,\n 0.618596,\n 0.811894,\n -0.280345,\n 0.496497,\n 0.651462,\n 0.827938,\n -0.277128,\n 0.47968,\n 0.684023,\n 0.844837,\n -0.271646,\n 0.460688,\n 0.718024,\n 0.859239,\n -0.264397,\n 0.438872,\n 0.751207,\n 0.874088,\n -0.256144,\n 0.41577,\n 0.784232,\n 0.887693,\n -0.246311,\n 0.391369,\n 0.816191,\n 0.899402,\n -0.235497,\n 0.365872,\n 0.847828,\n 0.910973,\n -0.223631,\n 0.338618,\n 0.87934,\n 0.92204,\n -0.209874,\n 0.310803,\n 0.910325,\n 0.930987,\n -0.194265,\n 0.281802,\n 0.940695,\n 0.94,\n -0.178125,\n 0.252836,\n 0.970958,\n 0.948018,\n -0.161479,\n 0.224239,\n 1.00078,\n 0.955141,\n -0.144038,\n 0.195857,\n 1.0288,\n 0.960513,\n -0.124915,\n 0.168487,\n 1.05371,\n 0.963964,\n -0.104284,\n 0.141495,\n 1.07596,\n 0.968713,\n -0.0838732,\n 0.114437,\n 1.09628,\n 0.975524,\n -0.0635579,\n 0.0863105,\n 1.11448,\n 0.98431,\n -0.042291,\n 0.0574774,\n 1.13069,\n 0.992916,\n -0.0209131,\n 0.0284343,\n 1.14568,\n 0.999926,\n 743097e-9,\n -379265e-9,\n 1.15955,\n 0.501042,\n -998428e-11,\n 0.498726,\n 100306e-10,\n 0.502992,\n -252112e-9,\n 0.500665,\n 253283e-9,\n 0.502417,\n -100791e-8,\n 0.500092,\n 101259e-8,\n 0.502965,\n -226919e-8,\n 0.500621,\n 227978e-8,\n 0.502318,\n -403109e-8,\n 0.499994,\n 405011e-8,\n 0.502333,\n -629832e-8,\n 0.500005,\n 632868e-8,\n 0.502362,\n -906907e-8,\n 0.500027,\n 911446e-8,\n 0.502369,\n -0.0123423,\n 0.500023,\n 0.0124078,\n 0.50243,\n -0.0161178,\n 0.500066,\n 0.016211,\n 0.502493,\n -0.0203937,\n 0.500103,\n 0.0205256,\n 0.502592,\n -0.0251684,\n 0.500166,\n 0.0253548,\n 0.502707,\n -0.0304389,\n 0.50023,\n 0.0307029,\n 0.502881,\n -0.0362015,\n 0.500335,\n 0.0365753,\n 0.503124,\n -0.0424507,\n 0.500488,\n 0.0429798,\n 0.503443,\n -0.0491582,\n 0.500686,\n 0.0499268,\n 0.504083,\n -0.0561476,\n 0.501155,\n 0.0574541,\n 0.504668,\n -0.0636846,\n 0.501524,\n 0.0655408,\n 0.505319,\n -0.0716834,\n 0.501904,\n 0.0742072,\n 0.50609,\n -0.0800925,\n 0.502321,\n 0.0834699,\n 0.507122,\n -0.0888425,\n 0.502896,\n 0.0933603,\n 0.508414,\n -0.097855,\n 0.503603,\n 0.10391,\n 0.509955,\n -0.107304,\n 0.504416,\n 0.115113,\n 0.512061,\n -0.116921,\n 0.505565,\n 0.127054,\n 0.514419,\n -0.12689,\n 0.506732,\n 0.139709,\n 0.517529,\n -0.136934,\n 0.508338,\n 0.153173,\n 0.522085,\n -0.147327,\n 0.510987,\n 0.167528,\n 0.526986,\n -0.157612,\n 0.513527,\n 0.182708,\n 0.533122,\n -0.168213,\n 0.516717,\n 0.198881,\n 0.540807,\n -0.178688,\n 0.520832,\n 0.215986,\n 0.550687,\n -0.189511,\n 0.52632,\n 0.234335,\n 0.560567,\n -0.199998,\n 0.531009,\n 0.253375,\n 0.571698,\n -0.210652,\n 0.535839,\n 0.273499,\n 0.584364,\n -0.220917,\n 0.541091,\n 0.294355,\n 0.599066,\n -0.23137,\n 0.546875,\n 0.316525,\n 0.614148,\n -0.241206,\n 0.551306,\n 0.339671,\n 0.631157,\n -0.250379,\n 0.555187,\n 0.36531,\n 0.647919,\n -0.258397,\n 0.556595,\n 0.392767,\n 0.666112,\n -0.265528,\n 0.556949,\n 0.421397,\n 0.686158,\n -0.271827,\n 0.556617,\n 0.451433,\n 0.704838,\n -0.27674,\n 0.552975,\n 0.482131,\n 0.723957,\n -0.280733,\n 0.547814,\n 0.513458,\n 0.74262,\n -0.283359,\n 0.53997,\n 0.545446,\n 0.762009,\n -0.284541,\n 0.530422,\n 0.57775,\n 0.781314,\n -0.284507,\n 0.518546,\n 0.610434,\n 0.799116,\n -0.283309,\n 0.504178,\n 0.643178,\n 0.817604,\n -0.280378,\n 0.48843,\n 0.676248,\n 0.83459,\n -0.275619,\n 0.469457,\n 0.709698,\n 0.850974,\n -0.26856,\n 0.447698,\n 0.744245,\n 0.866747,\n -0.260094,\n 0.424791,\n 0.777695,\n 0.881412,\n -0.249929,\n 0.399913,\n 0.810392,\n 0.8936,\n -0.239137,\n 0.37308,\n 0.842872,\n 0.905943,\n -0.226818,\n 0.345705,\n 0.874677,\n 0.916408,\n -0.213699,\n 0.31706,\n 0.906257,\n 0.927215,\n -0.198428,\n 0.288444,\n 0.936881,\n 0.935625,\n -0.181643,\n 0.258329,\n 0.96795,\n 0.944076,\n -0.164386,\n 0.228488,\n 0.998216,\n 0.951229,\n -0.146339,\n 0.199763,\n 1.02689,\n 0.958793,\n -0.127709,\n 0.172153,\n 1.0535,\n 0.963219,\n -0.107244,\n 0.144989,\n 1.07646,\n 0.967562,\n -0.0857764,\n 0.11685,\n 1.09675,\n 0.974866,\n -0.0645377,\n 0.0880571,\n 1.11576,\n 0.983353,\n -0.0431732,\n 0.0587352,\n 1.13227,\n 0.992503,\n -0.0218356,\n 0.0294181,\n 1.1478,\n 1.00003,\n 605203e-9,\n -231013e-9,\n 1.16207,\n 0.482935,\n -101177e-10,\n 0.504695,\n 968142e-11,\n 0.477554,\n -251521e-9,\n 0.499071,\n 240676e-9,\n 0.477904,\n -100683e-8,\n 0.499436,\n 96342e-8,\n 0.478368,\n -226636e-8,\n 0.499899,\n 21687e-7,\n 0.477977,\n -402719e-8,\n 0.499513,\n 385384e-8,\n 0.477993,\n -629226e-8,\n 0.499525,\n 60221e-7,\n 0.478011,\n -906011e-8,\n 0.499536,\n 867289e-8,\n 0.478051,\n -0.0123305,\n 0.499566,\n 0.0118074,\n 0.478089,\n -0.016102,\n 0.499587,\n 0.0154269,\n 0.478171,\n -0.0203736,\n 0.499645,\n 0.0195341,\n 0.478254,\n -0.025143,\n 0.499692,\n 0.0241318,\n 0.47839,\n -0.0304071,\n 0.499779,\n 0.0292247,\n 0.478588,\n -0.0361631,\n 0.499911,\n 0.0348196,\n 0.478812,\n -0.0424023,\n 0.500046,\n 0.0409231,\n 0.479208,\n -0.0490724,\n 0.500326,\n 0.047552,\n 0.479841,\n -0.0560722,\n 0.500805,\n 0.0547377,\n 0.480392,\n -0.0636125,\n 0.501152,\n 0.0624607,\n 0.481068,\n -0.0716134,\n 0.501561,\n 0.0707473,\n 0.481898,\n -0.0800062,\n 0.502054,\n 0.0796118,\n 0.483022,\n -0.0886568,\n 0.502728,\n 0.0890974,\n 0.484332,\n -0.0977553,\n 0.503479,\n 0.0992099,\n 0.486126,\n -0.107173,\n 0.504546,\n 0.10999,\n 0.488066,\n -0.11677,\n 0.50557,\n 0.121476,\n 0.490521,\n -0.126725,\n 0.506849,\n 0.133672,\n 0.494232,\n -0.136793,\n 0.50911,\n 0.146731,\n 0.498302,\n -0.147116,\n 0.511345,\n 0.160577,\n 0.503565,\n -0.157446,\n 0.514344,\n 0.175335,\n 0.510902,\n -0.168121,\n 0.518824,\n 0.191207,\n 0.519263,\n -0.178799,\n 0.523666,\n 0.208058,\n 0.528204,\n -0.189407,\n 0.528296,\n 0.225875,\n 0.538854,\n -0.200145,\n 0.533724,\n 0.244782,\n 0.551278,\n -0.210701,\n 0.539833,\n 0.264753,\n 0.565222,\n -0.221303,\n 0.546131,\n 0.285745,\n 0.579403,\n -0.231688,\n 0.551496,\n 0.307592,\n 0.595469,\n -0.241718,\n 0.556809,\n 0.330582,\n 0.610929,\n -0.250992,\n 0.559641,\n 0.354995,\n 0.629433,\n -0.259602,\n 0.562379,\n 0.382471,\n 0.648504,\n -0.267038,\n 0.563676,\n 0.411126,\n 0.66756,\n -0.273388,\n 0.562092,\n 0.440924,\n 0.689143,\n -0.278788,\n 0.560807,\n 0.472118,\n 0.709056,\n -0.282783,\n 0.555701,\n 0.503774,\n 0.729855,\n -0.285836,\n 0.548698,\n 0.536364,\n 0.748954,\n -0.287078,\n 0.538544,\n 0.56895,\n 0.768373,\n -0.287133,\n 0.526711,\n 0.601991,\n 0.78827,\n -0.285839,\n 0.512511,\n 0.635403,\n 0.807465,\n -0.283238,\n 0.496323,\n 0.668797,\n 0.825194,\n -0.27906,\n 0.477638,\n 0.702584,\n 0.842203,\n -0.272286,\n 0.456253,\n 0.736393,\n 0.857749,\n -0.263854,\n 0.432412,\n 0.77096,\n 0.874799,\n -0.253943,\n 0.407806,\n 0.80489,\n 0.887497,\n -0.24237,\n 0.38033,\n 0.83771,\n 0.89966,\n -0.230278,\n 0.352446,\n 0.870376,\n 0.911753,\n -0.21646,\n 0.323268,\n 0.902256,\n 0.923011,\n -0.202071,\n 0.294314,\n 0.933306,\n 0.932375,\n -0.185519,\n 0.264104,\n 0.965177,\n 0.940537,\n -0.167604,\n 0.234035,\n 0.996303,\n 0.948904,\n -0.149068,\n 0.20412,\n 1.0261,\n 0.955263,\n -0.129539,\n 0.175431,\n 1.05304,\n 0.960303,\n -0.109932,\n 0.148116,\n 1.07617,\n 0.965512,\n -0.0880572,\n 0.119693,\n 1.09742,\n 0.973466,\n -0.0660548,\n 0.0901619,\n 1.11721,\n 0.98284,\n -0.0439228,\n 0.0599875,\n 1.13436,\n 0.992216,\n -0.0219588,\n 0.0298975,\n 1.15006,\n 0.999946,\n 119402e-9,\n -208547e-10,\n 1.16471,\n 0.447827,\n -100414e-10,\n 0.491543,\n 914833e-11,\n 0.454778,\n -251257e-9,\n 0.499172,\n 22891e-8,\n 0.453519,\n -100342e-8,\n 0.497787,\n 914184e-9,\n 0.45357,\n -225776e-8,\n 0.497847,\n 205701e-8,\n 0.453578,\n -401371e-8,\n 0.497855,\n 365705e-8,\n 0.45357,\n -627107e-8,\n 0.497841,\n 571453e-8,\n 0.453598,\n -902968e-8,\n 0.497864,\n 823019e-8,\n 0.453627,\n -0.0122888,\n 0.497882,\n 0.0112049,\n 0.453684,\n -0.0160475,\n 0.497923,\n 0.0146405,\n 0.453764,\n -0.0203044,\n 0.49798,\n 0.0185394,\n 0.453866,\n -0.0250576,\n 0.498049,\n 0.0229054,\n 0.453996,\n -0.0303028,\n 0.49813,\n 0.0277424,\n 0.454196,\n -0.0360379,\n 0.498267,\n 0.0330587,\n 0.454457,\n -0.0422521,\n 0.498445,\n 0.0388613,\n 0.454926,\n -0.0488393,\n 0.498812,\n 0.0451767,\n 0.455525,\n -0.0558653,\n 0.499272,\n 0.0520153,\n 0.456074,\n -0.0633772,\n 0.499625,\n 0.0593754,\n 0.456752,\n -0.0713606,\n 0.500049,\n 0.0672751,\n 0.457648,\n -0.07971,\n 0.500615,\n 0.0757447,\n 0.458849,\n -0.0883032,\n 0.501399,\n 0.0848231,\n 0.46029,\n -0.0974095,\n 0.502293,\n 0.0945135,\n 0.462,\n -0.106729,\n 0.503301,\n 0.104848,\n 0.464121,\n -0.116354,\n 0.504533,\n 0.115884,\n 0.466889,\n -0.126214,\n 0.506172,\n 0.127652,\n 0.470744,\n -0.136324,\n 0.508667,\n 0.14024,\n 0.47488,\n -0.146595,\n 0.510995,\n 0.153673,\n 0.480845,\n -0.157027,\n 0.514832,\n 0.168053,\n 0.488262,\n -0.167658,\n 0.519506,\n 0.183508,\n 0.496547,\n -0.178343,\n 0.524347,\n 0.199948,\n 0.506254,\n -0.188916,\n 0.52983,\n 0.217503,\n 0.517961,\n -0.199975,\n 0.536357,\n 0.236272,\n 0.531484,\n -0.210624,\n 0.543641,\n 0.256096,\n 0.545496,\n -0.221227,\n 0.550048,\n 0.277085,\n 0.559497,\n -0.231568,\n 0.555076,\n 0.298615,\n 0.575752,\n -0.241698,\n 0.560541,\n 0.321547,\n 0.591999,\n -0.251172,\n 0.564156,\n 0.345602,\n 0.610654,\n -0.260178,\n 0.567607,\n 0.371851,\n 0.630484,\n -0.268094,\n 0.56923,\n 0.40076,\n 0.651807,\n -0.274661,\n 0.569779,\n 0.430801,\n 0.67239,\n -0.280331,\n 0.566791,\n 0.461939,\n 0.693024,\n -0.284501,\n 0.562007,\n 0.493854,\n 0.715473,\n -0.287852,\n 0.555791,\n 0.526992,\n 0.736323,\n -0.28929,\n 0.546345,\n 0.560102,\n 0.755771,\n -0.289405,\n 0.534,\n 0.593543,\n 0.775424,\n -0.2881,\n 0.519114,\n 0.627256,\n 0.795447,\n -0.285562,\n 0.502543,\n 0.661464,\n 0.815319,\n -0.281416,\n 0.484773,\n 0.695206,\n 0.831769,\n -0.275523,\n 0.463445,\n 0.729044,\n 0.849464,\n -0.267516,\n 0.440269,\n 0.764069,\n 0.866775,\n -0.257584,\n 0.415049,\n 0.799089,\n 0.881252,\n -0.245817,\n 0.388049,\n 0.831948,\n 0.894209,\n -0.233127,\n 0.35889,\n 0.865526,\n 0.906922,\n -0.219579,\n 0.329915,\n 0.89818,\n 0.919686,\n -0.204491,\n 0.300441,\n 0.930013,\n 0.929044,\n -0.188962,\n 0.269445,\n 0.962061,\n 0.938393,\n -0.171079,\n 0.238402,\n 0.994214,\n 0.94661,\n -0.15199,\n 0.208204,\n 1.02533,\n 0.953095,\n -0.131953,\n 0.178653,\n 1.0529,\n 0.958644,\n -0.111233,\n 0.150684,\n 1.0771,\n 0.963925,\n -0.0903098,\n 0.122359,\n 1.09855,\n 0.971995,\n -0.0680505,\n 0.0923342,\n 1.11874,\n 0.981658,\n -0.0448512,\n 0.0614195,\n 1.13635,\n 0.991649,\n -0.0221931,\n 0.0303582,\n 1.15238,\n 0.999985,\n 393403e-9,\n -111086e-9,\n 1.16772,\n 0.396806,\n -971563e-11,\n 0.457671,\n 842355e-11,\n 0.429186,\n -249421e-9,\n 0.495017,\n 21625e-8,\n 0.429324,\n -998052e-9,\n 0.495173,\n 865322e-9,\n 0.429175,\n -224487e-8,\n 0.494999,\n 194637e-8,\n 0.429129,\n -399041e-8,\n 0.494952,\n 346004e-8,\n 0.429153,\n -623476e-8,\n 0.494974,\n 540684e-8,\n 0.429168,\n -89773e-7,\n 0.494983,\n 778714e-8,\n 0.429207,\n -0.0122175,\n 0.495012,\n 0.0106022,\n 0.429257,\n -0.0159542,\n 0.495047,\n 0.0138535,\n 0.429338,\n -0.0201864,\n 0.495106,\n 0.0175443,\n 0.429431,\n -0.0249104,\n 0.495165,\n 0.0216774,\n 0.429587,\n -0.0301252,\n 0.495279,\n 0.0262594,\n 0.429796,\n -0.0358249,\n 0.495432,\n 0.0312968,\n 0.430065,\n -0.0419972,\n 0.495621,\n 0.0367985,\n 0.430588,\n -0.0485144,\n 0.496061,\n 0.042798,\n 0.43113,\n -0.0555028,\n 0.496472,\n 0.0492914,\n 0.431743,\n -0.0629852,\n 0.496904,\n 0.0562907,\n 0.432448,\n -0.0709256,\n 0.497369,\n 0.0638056,\n 0.433414,\n -0.0791942,\n 0.498032,\n 0.071885,\n 0.434638,\n -0.0877346,\n 0.498854,\n 0.0805517,\n 0.43611,\n -0.0968056,\n 0.499812,\n 0.0898047,\n 0.437859,\n -0.106002,\n 0.500891,\n 0.0997142,\n 0.440017,\n -0.115648,\n 0.502198,\n 0.110289,\n 0.443236,\n -0.125427,\n 0.504389,\n 0.121644,\n 0.44697,\n -0.135492,\n 0.506809,\n 0.133769,\n 0.451689,\n -0.145746,\n 0.509858,\n 0.146787,\n 0.45811,\n -0.156219,\n 0.514247,\n 0.160793,\n 0.465305,\n -0.166834,\n 0.518816,\n 0.175791,\n 0.474085,\n -0.177546,\n 0.524331,\n 0.191906,\n 0.484808,\n -0.188262,\n 0.53104,\n 0.209199,\n 0.49732,\n -0.199346,\n 0.538511,\n 0.227825,\n 0.509693,\n -0.209951,\n 0.544554,\n 0.247269,\n 0.524367,\n -0.220533,\n 0.551616,\n 0.267978,\n 0.539228,\n -0.231082,\n 0.557368,\n 0.289672,\n 0.55644,\n -0.241342,\n 0.563782,\n 0.31268,\n 0.574204,\n -0.250964,\n 0.568851,\n 0.33651,\n 0.593388,\n -0.260306,\n 0.57312,\n 0.362219,\n 0.613358,\n -0.268667,\n 0.574916,\n 0.390322,\n 0.634512,\n -0.275591,\n 0.575053,\n 0.420478,\n 0.65563,\n -0.281328,\n 0.572404,\n 0.451614,\n 0.678265,\n -0.285948,\n 0.568893,\n 0.484112,\n 0.70011,\n -0.289408,\n 0.561878,\n 0.517348,\n 0.723005,\n -0.291328,\n 0.55359,\n 0.551355,\n 0.743744,\n -0.291418,\n 0.541099,\n 0.585109,\n 0.763949,\n -0.290252,\n 0.526489,\n 0.619487,\n 0.784186,\n -0.287648,\n 0.509496,\n 0.65404,\n 0.804304,\n -0.283782,\n 0.491484,\n 0.688649,\n 0.823629,\n -0.278067,\n 0.470517,\n 0.723133,\n 0.84094,\n -0.270588,\n 0.44705,\n 0.757163,\n 0.857852,\n -0.261188,\n 0.421252,\n 0.792816,\n 0.874934,\n -0.249313,\n 0.394191,\n 0.827248,\n 0.888709,\n -0.236492,\n 0.365359,\n 0.861074,\n 0.902589,\n -0.222185,\n 0.336016,\n 0.894417,\n 0.914201,\n -0.207314,\n 0.30527,\n 0.926825,\n 0.925978,\n -0.191146,\n 0.274532,\n 0.9595,\n 0.93512,\n -0.174135,\n 0.243393,\n 0.991583,\n 0.943656,\n -0.155231,\n 0.212414,\n 1.02356,\n 0.951719,\n -0.134403,\n 0.182005,\n 1.05239,\n 0.957164,\n -0.113023,\n 0.153043,\n 1.07754,\n 0.962656,\n -0.0914493,\n 0.124186,\n 1.09984,\n 0.970695,\n -0.0694179,\n 0.0941654,\n 1.12,\n 0.980749,\n -0.0466199,\n 0.0629671,\n 1.13849,\n 0.991205,\n -0.0227032,\n 0.0311146,\n 1.15494,\n 0.999884,\n 632388e-9,\n -254483e-9,\n 1.1706,\n 0.379821,\n -957289e-11,\n 0.460637,\n 789337e-11,\n 0.405188,\n -247483e-9,\n 0.491396,\n 204064e-9,\n 0.404796,\n -989434e-9,\n 0.490914,\n 815853e-9,\n 0.40483,\n -222607e-8,\n 0.490949,\n 183559e-8,\n 0.40473,\n -395723e-8,\n 0.49084,\n 326332e-8,\n 0.404731,\n -618287e-8,\n 0.490836,\n 509945e-8,\n 0.404768,\n -890258e-8,\n 0.490871,\n 734463e-8,\n 0.404791,\n -0.0121156,\n 0.490883,\n 999992e-8,\n 0.404857,\n -0.0158214,\n 0.490938,\n 0.0130676,\n 0.404943,\n -0.0200178,\n 0.491004,\n 0.0165503,\n 0.405059,\n -0.0247027,\n 0.491093,\n 0.0204521,\n 0.405213,\n -0.0298729,\n 0.491205,\n 0.0247788,\n 0.405399,\n -0.0355226,\n 0.491333,\n 0.0295373,\n 0.405731,\n -0.0416352,\n 0.491604,\n 0.034741,\n 0.406303,\n -0.0480807,\n 0.492116,\n 0.0404255,\n 0.406814,\n -0.0550458,\n 0.492506,\n 0.0465732,\n 0.407404,\n -0.0624652,\n 0.492926,\n 0.0532058,\n 0.408149,\n -0.0702958,\n 0.493442,\n 0.0603442,\n 0.409128,\n -0.0784623,\n 0.494136,\n 0.0680297,\n 0.410408,\n -0.087007,\n 0.495054,\n 0.0762786,\n 0.411813,\n -0.0959639,\n 0.495962,\n 0.0851046,\n 0.413735,\n -0.105075,\n 0.497257,\n 0.0945878,\n 0.416137,\n -0.114646,\n 0.498882,\n 0.104725,\n 0.41934,\n -0.124394,\n 0.501132,\n 0.11563,\n 0.423326,\n -0.134328,\n 0.503883,\n 0.127325,\n 0.428419,\n -0.14458,\n 0.50747,\n 0.139911,\n 0.43484,\n -0.154979,\n 0.511964,\n 0.153481,\n 0.442641,\n -0.165628,\n 0.517328,\n 0.168114,\n 0.452511,\n -0.176365,\n 0.524258,\n 0.183995,\n 0.463473,\n -0.187298,\n 0.531248,\n 0.200953,\n 0.475564,\n -0.198244,\n 0.538367,\n 0.219176,\n 0.488664,\n -0.208938,\n 0.545175,\n 0.238514,\n 0.504073,\n -0.219599,\n 0.553227,\n 0.259129,\n 0.520832,\n -0.230378,\n 0.560653,\n 0.280997,\n 0.538455,\n -0.240703,\n 0.567523,\n 0.303821,\n 0.55709,\n -0.250548,\n 0.573287,\n 0.327948,\n 0.576646,\n -0.259964,\n 0.577795,\n 0.353362,\n 0.596705,\n -0.268721,\n 0.580077,\n 0.380336,\n 0.618053,\n -0.276054,\n 0.58018,\n 0.4101,\n 0.640303,\n -0.282176,\n 0.578747,\n 0.44161,\n 0.662365,\n -0.286931,\n 0.574294,\n 0.474106,\n 0.684542,\n -0.290521,\n 0.567035,\n 0.507549,\n 0.707984,\n -0.292672,\n 0.558687,\n 0.541853,\n 0.730913,\n -0.293189,\n 0.547606,\n 0.576581,\n 0.752948,\n -0.292199,\n 0.533471,\n 0.61172,\n 0.773452,\n -0.289508,\n 0.516395,\n 0.646339,\n 0.794715,\n -0.285716,\n 0.497873,\n 0.682131,\n 0.814251,\n -0.280051,\n 0.476845,\n 0.716396,\n 0.833057,\n -0.272873,\n 0.453449,\n 0.751503,\n 0.84959,\n -0.263982,\n 0.427857,\n 0.786085,\n 0.867022,\n -0.252745,\n 0.400335,\n 0.821355,\n 0.882277,\n -0.239655,\n 0.371304,\n 0.85646,\n 0.895375,\n -0.225386,\n 0.340397,\n 0.890828,\n 0.909347,\n -0.209587,\n 0.310005,\n 0.923532,\n 0.921885,\n -0.193433,\n 0.2796,\n 0.956419,\n 0.932127,\n -0.176135,\n 0.247276,\n 0.989445,\n 0.941869,\n -0.157872,\n 0.216186,\n 1.02221,\n 0.949735,\n -0.137577,\n 0.185602,\n 1.05195,\n 0.956617,\n -0.115285,\n 0.155767,\n 1.07822,\n 0.961974,\n -0.0928418,\n 0.126103,\n 1.10149,\n 0.96972,\n -0.0700592,\n 0.0956758,\n 1.12207,\n 0.98012,\n -0.0474671,\n 0.0643269,\n 1.1408,\n 0.990825,\n -0.0238113,\n 0.0320863,\n 1.1577,\n 0.999876,\n 381574e-9,\n -812203e-10,\n 1.17403,\n 0.367636,\n -961342e-11,\n 0.469176,\n 753287e-11,\n 0.380377,\n -244772e-9,\n 0.485434,\n 191797e-9,\n 0.380416,\n -978857e-9,\n 0.485475,\n 767015e-9,\n 0.380376,\n -220165e-8,\n 0.485435,\n 172522e-8,\n 0.380419,\n -391408e-8,\n 0.485487,\n 306734e-8,\n 0.380438,\n -611549e-8,\n 0.485505,\n 479332e-8,\n 0.380462,\n -880558e-8,\n 0.485525,\n 690391e-8,\n 0.380496,\n -0.0119837,\n 0.485551,\n 940039e-8,\n 0.38056,\n -0.0156487,\n 0.485605,\n 0.0122848,\n 0.38064,\n -0.0197988,\n 0.485666,\n 0.0155601,\n 0.380767,\n -0.0244324,\n 0.48577,\n 0.0192313,\n 0.380909,\n -0.0295444,\n 0.485871,\n 0.0233032,\n 0.381142,\n -0.0351321,\n 0.48606,\n 0.0277861,\n 0.381472,\n -0.0411535,\n 0.486336,\n 0.0326939,\n 0.382015,\n -0.0475408,\n 0.486833,\n 0.0380565,\n 0.382523,\n -0.0544395,\n 0.487231,\n 0.0438615,\n 0.383129,\n -0.061784,\n 0.487683,\n 0.0501332,\n 0.383952,\n -0.0695085,\n 0.488313,\n 0.0568996,\n 0.38498,\n -0.0775819,\n 0.489077,\n 0.0641952,\n 0.386331,\n -0.0860443,\n 0.490113,\n 0.0720324,\n 0.387788,\n -0.0948406,\n 0.491099,\n 0.0804379,\n 0.389808,\n -0.103899,\n 0.492566,\n 0.0894899,\n 0.39252,\n -0.113313,\n 0.494601,\n 0.0992098,\n 0.395493,\n -0.123007,\n 0.496619,\n 0.109641,\n 0.399826,\n -0.132859,\n 0.499912,\n 0.120919,\n 0.405341,\n -0.143077,\n 0.504061,\n 0.133107,\n 0.411932,\n -0.153465,\n 0.508905,\n 0.146263,\n 0.420591,\n -0.164108,\n 0.515482,\n 0.160544,\n 0.43101,\n -0.174893,\n 0.523191,\n 0.176123,\n 0.441881,\n -0.185839,\n 0.53026,\n 0.192757,\n 0.453919,\n -0.196633,\n 0.537295,\n 0.210535,\n 0.468715,\n -0.207611,\n 0.546156,\n 0.229886,\n 0.485182,\n -0.218517,\n 0.555173,\n 0.250543,\n 0.501926,\n -0.229249,\n 0.562728,\n 0.27221,\n 0.51785,\n -0.239481,\n 0.567494,\n 0.294892,\n 0.536947,\n -0.249395,\n 0.573889,\n 0.318987,\n 0.557115,\n -0.259,\n 0.578831,\n 0.344348,\n 0.577966,\n -0.268075,\n 0.582055,\n 0.371223,\n 0.599489,\n -0.276115,\n 0.583307,\n 0.399834,\n 0.62479,\n -0.282523,\n 0.583902,\n 0.431415,\n 0.647504,\n -0.287663,\n 0.57953,\n 0.464301,\n 0.670601,\n -0.291538,\n 0.573103,\n 0.498123,\n 0.693539,\n -0.293842,\n 0.563731,\n 0.532662,\n 0.717385,\n -0.294681,\n 0.553169,\n 0.567925,\n 0.741533,\n -0.293717,\n 0.539908,\n 0.603502,\n 0.762142,\n -0.291156,\n 0.521902,\n 0.639074,\n 0.783014,\n -0.28719,\n 0.502815,\n 0.674439,\n 0.805158,\n -0.281773,\n 0.482598,\n 0.710497,\n 0.823646,\n -0.274682,\n 0.458949,\n 0.7456,\n 0.841879,\n -0.266184,\n 0.433129,\n 0.781085,\n 0.859515,\n -0.255682,\n 0.406064,\n 0.816,\n 0.875335,\n -0.242849,\n 0.376509,\n 0.851074,\n 0.890147,\n -0.228329,\n 0.345502,\n 0.886473,\n 0.903144,\n -0.212491,\n 0.31428,\n 0.920751,\n 0.916618,\n -0.195695,\n 0.282994,\n 0.954606,\n 0.927953,\n -0.178267,\n 0.251091,\n 0.988402,\n 0.937414,\n -0.159549,\n 0.219107,\n 1.02141,\n 0.946823,\n -0.140022,\n 0.18896,\n 1.05167,\n 0.954651,\n -0.118154,\n 0.158667,\n 1.07819,\n 0.959955,\n -0.0946636,\n 0.128808,\n 1.1025,\n 0.96858,\n -0.0711792,\n 0.0973787,\n 1.12391,\n 0.97938,\n -0.0475046,\n 0.0650965,\n 1.14322,\n 0.990498,\n -0.024059,\n 0.0326267,\n 1.16077,\n 0.999844,\n -512408e-10,\n 112444e-9,\n 1.17727,\n 0.316912,\n -934977e-11,\n 0.425996,\n 695559e-11,\n 0.356423,\n -241372e-9,\n 0.479108,\n 179562e-9,\n 0.356272,\n -965292e-9,\n 0.478897,\n 71811e-8,\n 0.356262,\n -217182e-8,\n 0.478894,\n 161574e-8,\n 0.356265,\n -386092e-8,\n 0.478895,\n 287261e-8,\n 0.356278,\n -60324e-7,\n 0.478905,\n 448907e-8,\n 0.356293,\n -868565e-8,\n 0.478914,\n 646572e-8,\n 0.356346,\n -0.0118207,\n 0.478965,\n 880438e-8,\n 0.356395,\n -0.0154355,\n 0.479001,\n 0.0115066,\n 0.356484,\n -0.019529,\n 0.479075,\n 0.0145762,\n 0.356609,\n -0.0240991,\n 0.47918,\n 0.018018,\n 0.356766,\n -0.0291413,\n 0.479305,\n 0.0218379,\n 0.357009,\n -0.0346498,\n 0.479512,\n 0.0260454,\n 0.357424,\n -0.0405462,\n 0.479909,\n 0.0306657,\n 0.357899,\n -0.0468825,\n 0.480337,\n 0.0357054,\n 0.358424,\n -0.0536887,\n 0.480771,\n 0.0411728,\n 0.359041,\n -0.0609416,\n 0.481242,\n 0.0470841,\n 0.359903,\n -0.0685239,\n 0.481943,\n 0.0534831,\n 0.360932,\n -0.0764883,\n 0.482741,\n 0.0603795,\n 0.362196,\n -0.0848364,\n 0.483688,\n 0.0678028,\n 0.363847,\n -0.0935002,\n 0.484947,\n 0.0758086,\n 0.365972,\n -0.102471,\n 0.486588,\n 0.0844173,\n 0.368741,\n -0.111751,\n 0.488787,\n 0.0937199,\n 0.372146,\n -0.121334,\n 0.491405,\n 0.103732,\n 0.377114,\n -0.131147,\n 0.495604,\n 0.114608,\n 0.38226,\n -0.141213,\n 0.499436,\n 0.126345,\n 0.389609,\n -0.151632,\n 0.505334,\n 0.139116,\n 0.397925,\n -0.162073,\n 0.51168,\n 0.152995,\n 0.407824,\n -0.172819,\n 0.518876,\n 0.168071,\n 0.420014,\n -0.183929,\n 0.527639,\n 0.184495,\n 0.434266,\n -0.195032,\n 0.537588,\n 0.20232,\n 0.447352,\n -0.205792,\n 0.544379,\n 0.221189,\n 0.463726,\n -0.216704,\n 0.553422,\n 0.241616,\n 0.481406,\n -0.227531,\n 0.562074,\n 0.263298,\n 0.498707,\n -0.238017,\n 0.568227,\n 0.286116,\n 0.518039,\n -0.247936,\n 0.574473,\n 0.3101,\n 0.538277,\n -0.257437,\n 0.579191,\n 0.335401,\n 0.561166,\n -0.266829,\n 0.584807,\n 0.362246,\n 0.583189,\n -0.275329,\n 0.586476,\n 0.390609,\n 0.606024,\n -0.28234,\n 0.585578,\n 0.420998,\n 0.632419,\n -0.287924,\n 0.584496,\n 0.454357,\n 0.656128,\n -0.291972,\n 0.577766,\n 0.488233,\n 0.679953,\n -0.29456,\n 0.56875,\n 0.523248,\n 0.704654,\n -0.295816,\n 0.558388,\n 0.559168,\n 0.729016,\n -0.295157,\n 0.544826,\n 0.595326,\n 0.752062,\n -0.292779,\n 0.528273,\n 0.631864,\n 0.773138,\n -0.288681,\n 0.508482,\n 0.667793,\n 0.794869,\n -0.283358,\n 0.487341,\n 0.704035,\n 0.815101,\n -0.27608,\n 0.46354,\n 0.739925,\n 0.834212,\n -0.26767,\n 0.438672,\n 0.775539,\n 0.852368,\n -0.257397,\n 0.411239,\n 0.810895,\n 0.870207,\n -0.245689,\n 0.3829,\n 0.846472,\n 0.884063,\n -0.231452,\n 0.351496,\n 0.881788,\n 0.898284,\n -0.215561,\n 0.31895,\n 0.917438,\n 0.912964,\n -0.198208,\n 0.287367,\n 0.952422,\n 0.924666,\n -0.180426,\n 0.254487,\n 0.987551,\n 0.934429,\n -0.161525,\n 0.222226,\n 1.02142,\n 0.943485,\n -0.141197,\n 0.191143,\n 1.05218,\n 0.9521,\n -0.120085,\n 0.161112,\n 1.07937,\n 0.957876,\n -0.0975881,\n 0.130982,\n 1.10403,\n 0.966943,\n -0.0726842,\n 0.0990553,\n 1.12616,\n 0.978313,\n -0.0483705,\n 0.0662818,\n 1.14619,\n 0.990048,\n -0.0239072,\n 0.0329243,\n 1.16413,\n 0.999984,\n 461885e-9,\n -772859e-10,\n 1.18099,\n 0.321287,\n -935049e-11,\n 0.455413,\n 659662e-11,\n 0.332595,\n -237513e-9,\n 0.471437,\n 167562e-9,\n 0.332729,\n -949964e-9,\n 0.471618,\n 670192e-9,\n 0.332305,\n -213618e-8,\n 0.471028,\n 150712e-8,\n 0.332326,\n -379765e-8,\n 0.471055,\n 267959e-8,\n 0.332344,\n -593353e-8,\n 0.471072,\n 418751e-8,\n 0.332356,\n -854349e-8,\n 0.471077,\n 603172e-8,\n 0.332403,\n -0.0116268,\n 0.471121,\n 821362e-8,\n 0.332461,\n -0.0151824,\n 0.47117,\n 0.0107357,\n 0.332552,\n -0.0192088,\n 0.471251,\n 0.0136014,\n 0.332657,\n -0.0237024,\n 0.47133,\n 0.0168152,\n 0.332835,\n -0.0286615,\n 0.471487,\n 0.0203853,\n 0.333083,\n -0.0340765,\n 0.471708,\n 0.0243212,\n 0.333547,\n -0.0398563,\n 0.47219,\n 0.0286518,\n 0.333989,\n -0.0460916,\n 0.472587,\n 0.0333763,\n 0.334532,\n -0.0527897,\n 0.473054,\n 0.0385084,\n 0.335167,\n -0.0599284,\n 0.473568,\n 0.0440638,\n 0.33608,\n -0.0673514,\n 0.474362,\n 0.0500962,\n 0.337146,\n -0.0752237,\n 0.475231,\n 0.0566022,\n 0.338462,\n -0.083418,\n 0.476282,\n 0.0636272,\n 0.34014,\n -0.0919382,\n 0.477615,\n 0.0712153,\n 0.342341,\n -0.100741,\n 0.479404,\n 0.079417,\n 0.345088,\n -0.109905,\n 0.481618,\n 0.0882631,\n 0.349049,\n -0.119369,\n 0.485081,\n 0.0978851,\n 0.353939,\n -0.129033,\n 0.489317,\n 0.108336,\n 0.359893,\n -0.139038,\n 0.494309,\n 0.119698,\n 0.366945,\n -0.149411,\n 0.499983,\n 0.132024,\n 0.375814,\n -0.159843,\n 0.507185,\n 0.145558,\n 0.387112,\n -0.170664,\n 0.516392,\n 0.160433,\n 0.40023,\n -0.181897,\n 0.526519,\n 0.176648,\n 0.412555,\n -0.192785,\n 0.53423,\n 0.193922,\n 0.427023,\n -0.203663,\n 0.542741,\n 0.212662,\n 0.443685,\n -0.214695,\n 0.552066,\n 0.232944,\n 0.461499,\n -0.225561,\n 0.560762,\n 0.254495,\n 0.480975,\n -0.236257,\n 0.569421,\n 0.277531,\n 0.501,\n -0.24639,\n 0.576101,\n 0.301724,\n 0.521691,\n -0.256101,\n 0.581493,\n 0.327112,\n 0.543478,\n -0.265289,\n 0.585221,\n 0.353917,\n 0.566094,\n -0.273938,\n 0.587614,\n 0.381941,\n 0.589578,\n -0.281679,\n 0.587991,\n 0.41172,\n 0.614583,\n -0.287655,\n 0.585928,\n 0.444148,\n 0.641813,\n -0.292228,\n 0.582092,\n 0.478617,\n 0.666189,\n -0.295172,\n 0.57398,\n 0.51397,\n 0.690475,\n -0.29648,\n 0.561676,\n 0.550118,\n 0.715543,\n -0.296203,\n 0.548758,\n 0.586933,\n 0.740405,\n -0.293999,\n 0.532792,\n 0.62384,\n 0.762183,\n -0.28998,\n 0.512735,\n 0.660723,\n 0.786069,\n -0.28478,\n 0.492402,\n 0.69807,\n 0.806812,\n -0.277568,\n 0.469058,\n 0.734422,\n 0.826987,\n -0.268951,\n 0.443017,\n 0.770946,\n 0.844588,\n -0.259049,\n 0.415501,\n 0.80699,\n 0.863725,\n -0.2471,\n 0.387328,\n 0.842107,\n 0.879137,\n -0.234157,\n 0.356108,\n 0.878078,\n 0.894634,\n -0.218719,\n 0.324315,\n 0.914058,\n 0.909162,\n -0.201293,\n 0.291813,\n 0.949922,\n 0.92072,\n -0.18267,\n 0.258474,\n 0.985337,\n 0.93158,\n -0.163212,\n 0.225593,\n 1.0205,\n 0.941238,\n -0.142771,\n 0.193986,\n 1.05273,\n 0.949293,\n -0.120956,\n 0.163392,\n 1.08075,\n 0.956226,\n -0.0985743,\n 0.132934,\n 1.10559,\n 0.96546,\n -0.075118,\n 0.101255,\n 1.12823,\n 0.977403,\n -0.0497921,\n 0.0675441,\n 1.149,\n 0.989648,\n -0.0241574,\n 0.0334681,\n 1.16765,\n 1.00001,\n 5762e-7,\n -184807e-9,\n 1.18519,\n 0.303474,\n -916603e-11,\n 0.4542,\n 61243e-10,\n 0.308894,\n -232869e-9,\n 0.462306,\n 155592e-9,\n 0.309426,\n -931661e-9,\n 0.463093,\n 622499e-9,\n 0.308643,\n -20949e-7,\n 0.461933,\n 139979e-8,\n 0.308651,\n -37242e-7,\n 0.461941,\n 248874e-8,\n 0.308662,\n -581873e-8,\n 0.46195,\n 388933e-8,\n 0.308687,\n -837818e-8,\n 0.461974,\n 560247e-8,\n 0.308728,\n -0.0114016,\n 0.462011,\n 762948e-8,\n 0.308789,\n -0.0148884,\n 0.462067,\n 997326e-8,\n 0.308882,\n -0.0188369,\n 0.462151,\n 0.0126375,\n 0.309007,\n -0.0232436,\n 0.462263,\n 0.0156271,\n 0.30918,\n -0.0281054,\n 0.462417,\n 0.0189498,\n 0.309442,\n -0.0334065,\n 0.462667,\n 0.0226167,\n 0.309901,\n -0.0390589,\n 0.463162,\n 0.0266614,\n 0.310331,\n -0.0452042,\n 0.463555,\n 0.0310715,\n 0.310858,\n -0.0517735,\n 0.464019,\n 0.0358698,\n 0.311576,\n -0.0587359,\n 0.464669,\n 0.0410848,\n 0.312436,\n -0.0660383,\n 0.465406,\n 0.0467453,\n 0.313526,\n -0.0737266,\n 0.466339,\n 0.0528718,\n 0.314903,\n -0.0817574,\n 0.467504,\n 0.0595039,\n 0.316814,\n -0.090167,\n 0.469226,\n 0.0666888,\n 0.318965,\n -0.0987555,\n 0.470981,\n 0.0744658,\n 0.322077,\n -0.107792,\n 0.473814,\n 0.082912,\n 0.325947,\n -0.117098,\n 0.477241,\n 0.0920846,\n 0.331008,\n -0.126602,\n 0.48184,\n 0.102137,\n 0.337893,\n -0.136619,\n 0.488334,\n 0.113135,\n 0.345106,\n -0.146838,\n 0.494415,\n 0.12511,\n 0.355111,\n -0.157357,\n 0.503275,\n 0.138356,\n 0.365095,\n -0.167955,\n 0.510966,\n 0.152686,\n 0.378344,\n -0.179157,\n 0.521508,\n 0.16856,\n 0.391599,\n -0.190143,\n 0.530455,\n 0.18561,\n 0.407786,\n -0.20123,\n 0.541275,\n 0.204308,\n 0.425294,\n -0.212456,\n 0.551784,\n 0.224623,\n 0.444021,\n -0.223568,\n 0.561493,\n 0.246172,\n 0.463418,\n -0.234154,\n 0.569886,\n 0.268979,\n 0.484077,\n -0.244546,\n 0.577116,\n 0.293411,\n 0.505513,\n -0.254301,\n 0.582914,\n 0.318936,\n 0.527672,\n -0.263564,\n 0.587208,\n 0.345856,\n 0.550565,\n -0.272332,\n 0.589277,\n 0.374054,\n 0.573656,\n -0.280011,\n 0.588426,\n 0.403276,\n 0.59827,\n -0.286924,\n 0.587504,\n 0.43474,\n 0.624731,\n -0.291994,\n 0.583401,\n 0.468767,\n 0.652396,\n -0.295159,\n 0.576997,\n 0.504411,\n 0.67732,\n -0.296954,\n 0.565863,\n 0.54114,\n 0.703147,\n -0.296877,\n 0.552316,\n 0.57816,\n 0.728715,\n -0.295147,\n 0.536773,\n 0.616124,\n 0.752448,\n -0.291275,\n 0.51771,\n 0.653885,\n 0.775169,\n -0.285905,\n 0.496087,\n 0.691537,\n 0.799307,\n -0.279064,\n 0.474232,\n 0.729251,\n 0.819482,\n -0.270294,\n 0.447676,\n 0.766267,\n 0.837659,\n -0.260032,\n 0.419656,\n 0.802616,\n 0.856903,\n -0.248497,\n 0.391328,\n 0.838583,\n 0.873325,\n -0.235252,\n 0.360285,\n 0.874711,\n 0.889788,\n -0.221126,\n 0.329215,\n 0.91077,\n 0.904486,\n -0.204304,\n 0.296392,\n 0.94653,\n 0.917711,\n -0.185562,\n 0.262159,\n 0.983828,\n 0.928969,\n -0.165635,\n 0.229142,\n 1.01955,\n 0.939707,\n -0.14442,\n 0.19673,\n 1.05317,\n 0.948167,\n -0.122147,\n 0.165095,\n 1.0823,\n 0.955222,\n -0.099098,\n 0.13451,\n 1.10791,\n 0.964401,\n -0.0755332,\n 0.102476,\n 1.1312,\n 0.976605,\n -0.0513817,\n 0.0689667,\n 1.15218,\n 0.989085,\n -0.0258499,\n 0.034506,\n 1.17129,\n 0.999908,\n 617773e-9,\n -271268e-9,\n 1.18961,\n 0.285803,\n -905752e-11,\n 0.452348,\n 572272e-11,\n 0.284689,\n -22732e-8,\n 0.450581,\n 143626e-9,\n 0.285263,\n -910214e-9,\n 0.451482,\n 575099e-9,\n 0.285302,\n -204784e-8,\n 0.451553,\n 129395e-8,\n 0.285318,\n -364057e-8,\n 0.451574,\n 23006e-7,\n 0.28533,\n -568813e-8,\n 0.451585,\n 359547e-8,\n 0.285361,\n -819001e-8,\n 0.451618,\n 517934e-8,\n 0.285397,\n -0.0111458,\n 0.45165,\n 7054e-6,\n 0.285447,\n -0.0145536,\n 0.451688,\n 922167e-8,\n 0.285527,\n -0.0184127,\n 0.451758,\n 0.0116869,\n 0.285688,\n -0.0227207,\n 0.451929,\n 0.0144555,\n 0.28584,\n -0.0274712,\n 0.452055,\n 0.0175341,\n 0.286136,\n -0.0326278,\n 0.452369,\n 0.0209406,\n 0.286574,\n -0.0381792,\n 0.452853,\n 0.0246965,\n 0.287012,\n -0.0441879,\n 0.453272,\n 0.0287996,\n 0.287542,\n -0.0506096,\n 0.453752,\n 0.033268,\n 0.288299,\n -0.0573634,\n 0.454488,\n 0.0381504,\n 0.289186,\n -0.0645458,\n 0.455294,\n 0.0434447,\n 0.290302,\n -0.0720405,\n 0.456301,\n 0.0491973,\n 0.291776,\n -0.0799046,\n 0.457648,\n 0.0554453,\n 0.29372,\n -0.088117,\n 0.459483,\n 0.0622311,\n 0.296052,\n -0.0965328,\n 0.461571,\n 0.0695992,\n 0.299563,\n -0.105409,\n 0.465085,\n 0.077658,\n 0.30335,\n -0.114553,\n 0.468506,\n 0.0864176,\n 0.309167,\n -0.123917,\n 0.474423,\n 0.0961078,\n 0.31529,\n -0.13381,\n 0.47995,\n 0.106643,\n 0.324163,\n -0.144021,\n 0.488592,\n 0.118322,\n 0.333272,\n -0.154382,\n 0.496461,\n 0.131133,\n 0.344224,\n -0.165015,\n 0.50562,\n 0.145208,\n 0.357733,\n -0.176168,\n 0.516719,\n 0.16073,\n 0.373046,\n -0.187468,\n 0.528513,\n 0.177807,\n 0.38788,\n -0.198488,\n 0.537713,\n 0.196072,\n 0.405133,\n -0.209545,\n 0.547999,\n 0.21605,\n 0.423845,\n -0.220724,\n 0.55759,\n 0.237484,\n 0.443777,\n -0.231518,\n 0.566246,\n 0.26039,\n 0.464824,\n -0.242035,\n 0.574326,\n 0.284835,\n 0.486635,\n -0.251898,\n 0.58037,\n 0.310518,\n 0.51012,\n -0.261304,\n 0.58568,\n 0.337678,\n 0.535301,\n -0.270384,\n 0.590197,\n 0.366242,\n 0.559193,\n -0.27841,\n 0.590569,\n 0.395873,\n 0.583544,\n -0.285325,\n 0.588161,\n 0.426857,\n 0.608834,\n -0.291113,\n 0.584249,\n 0.459477,\n 0.635753,\n -0.294882,\n 0.57763,\n 0.494734,\n 0.664367,\n -0.297088,\n 0.569479,\n 0.532023,\n 0.689688,\n -0.297364,\n 0.555064,\n 0.569629,\n 0.715732,\n -0.295949,\n 0.539522,\n 0.608124,\n 0.741307,\n -0.292259,\n 0.521613,\n 0.646231,\n 0.764949,\n -0.287063,\n 0.49969,\n 0.684938,\n 0.788599,\n -0.28012,\n 0.476747,\n 0.723548,\n 0.81048,\n -0.27153,\n 0.45116,\n 0.761135,\n 0.831372,\n -0.261289,\n 0.424101,\n 0.798916,\n 0.850092,\n -0.249559,\n 0.39443,\n 0.835952,\n 0.867777,\n -0.236348,\n 0.363849,\n 0.871606,\n 0.884632,\n -0.221569,\n 0.332477,\n 0.907843,\n 0.90047,\n -0.20618,\n 0.300667,\n 0.944187,\n 0.914524,\n -0.188771,\n 0.266552,\n 0.981371,\n 0.926892,\n -0.168362,\n 0.232349,\n 1.01841,\n 0.937951,\n -0.146761,\n 0.199359,\n 1.05308,\n 0.947236,\n -0.123813,\n 0.1675,\n 1.0839,\n 0.954367,\n -0.099984,\n 0.136166,\n 1.11047,\n 0.963907,\n -0.0759278,\n 0.103808,\n 1.13414,\n 0.976218,\n -0.0511367,\n 0.0697061,\n 1.15575,\n 0.988772,\n -0.0267415,\n 0.0352529,\n 1.17531,\n 0.999888,\n -520778e-9,\n 289926e-9,\n 1.19389,\n 0.263546,\n -883274e-11,\n 0.441896,\n 526783e-11,\n 0.262352,\n -221849e-9,\n 0.439889,\n 132311e-9,\n 0.262325,\n -886683e-9,\n 0.439848,\n 528824e-9,\n 0.26228,\n -199476e-8,\n 0.439765,\n 118975e-8,\n 0.262372,\n -354671e-8,\n 0.439922,\n 211568e-8,\n 0.26239,\n -554141e-8,\n 0.439941,\n 330652e-8,\n 0.262412,\n -797888e-8,\n 0.439961,\n 476346e-8,\n 0.262453,\n -0.0108584,\n 0.440002,\n 648818e-8,\n 0.262528,\n -0.0141788,\n 0.440085,\n 84835e-7,\n 0.262615,\n -0.017938,\n 0.440166,\n 0.0107533,\n 0.262744,\n -0.0221346,\n 0.440291,\n 0.0133044,\n 0.262939,\n -0.026762,\n 0.440493,\n 0.0161445,\n 0.263277,\n -0.0317573,\n 0.440889,\n 0.0192974,\n 0.26368,\n -0.0371832,\n 0.441338,\n 0.0227699,\n 0.264106,\n -0.0430371,\n 0.441753,\n 0.0265698,\n 0.264624,\n -0.0493035,\n 0.442227,\n 0.0307178,\n 0.265378,\n -0.0558669,\n 0.442985,\n 0.0352616,\n 0.266253,\n -0.0628718,\n 0.443795,\n 0.0401968,\n 0.267478,\n -0.0701569,\n 0.445008,\n 0.04559,\n 0.269062,\n -0.077845,\n 0.446599,\n 0.0514539,\n 0.270926,\n -0.0857941,\n 0.448349,\n 0.0578382,\n 0.273693,\n -0.0940773,\n 0.451221,\n 0.0648363,\n 0.276746,\n -0.102704,\n 0.454097,\n 0.0724389,\n 0.281693,\n -0.111735,\n 0.459517,\n 0.0808744,\n 0.287335,\n -0.121004,\n 0.46531,\n 0.0901551,\n 0.29448,\n -0.130734,\n 0.472605,\n 0.100371,\n 0.30257,\n -0.140777,\n 0.480251,\n 0.111644,\n 0.312465,\n -0.15111,\n 0.489444,\n 0.124111,\n 0.324856,\n -0.16189,\n 0.500919,\n 0.137979,\n 0.33774,\n -0.172946,\n 0.511317,\n 0.153163,\n 0.35255,\n -0.184152,\n 0.522684,\n 0.169817,\n 0.367786,\n -0.19522,\n 0.53248,\n 0.187886,\n 0.385474,\n -0.20632,\n 0.543326,\n 0.207634,\n 0.404976,\n -0.217744,\n 0.554109,\n 0.229165,\n 0.425203,\n -0.228691,\n 0.563395,\n 0.252068,\n 0.446704,\n -0.239299,\n 0.571565,\n 0.276471,\n 0.468951,\n -0.249348,\n 0.577935,\n 0.302323,\n 0.493487,\n -0.258933,\n 0.584309,\n 0.329882,\n 0.517861,\n -0.268009,\n 0.58773,\n 0.358525,\n 0.543309,\n -0.276238,\n 0.589612,\n 0.388585,\n 0.569704,\n -0.28356,\n 0.589294,\n 0.419787,\n 0.594871,\n -0.289497,\n 0.585137,\n 0.452114,\n 0.622555,\n -0.294452,\n 0.580356,\n 0.486466,\n 0.651167,\n -0.296918,\n 0.57185,\n 0.523079,\n 0.677332,\n -0.297647,\n 0.558428,\n 0.5611,\n 0.703718,\n -0.296321,\n 0.542232,\n 0.599592,\n 0.730262,\n -0.293339,\n 0.524541,\n 0.639138,\n 0.754304,\n -0.288036,\n 0.502691,\n 0.677978,\n 0.778051,\n -0.281018,\n 0.479212,\n 0.716537,\n 0.801557,\n -0.272414,\n 0.454071,\n 0.75586,\n 0.822559,\n -0.262419,\n 0.425952,\n 0.794477,\n 0.843051,\n -0.250702,\n 0.397313,\n 0.832664,\n 0.86232,\n -0.237264,\n 0.366534,\n 0.869876,\n 0.879044,\n -0.222716,\n 0.334816,\n 0.906973,\n 0.896362,\n -0.206827,\n 0.303143,\n 0.943558,\n 0.910342,\n -0.189659,\n 0.269699,\n 0.979759,\n 0.924119,\n -0.171108,\n 0.236411,\n 1.01718,\n 0.935374,\n -0.149579,\n 0.202224,\n 1.05289,\n 0.944295,\n -0.126295,\n 0.16989,\n 1.08496,\n 0.952227,\n -0.101511,\n 0.138089,\n 1.11256,\n 0.962041,\n -0.0766392,\n 0.105053,\n 1.1375,\n 0.97528,\n -0.0511967,\n 0.070329,\n 1.15983,\n 0.988476,\n -0.025463,\n 0.0351268,\n 1.17987,\n 0.999962,\n 286808e-10,\n 145564e-10,\n 1.19901,\n 0.227089,\n -841413e-11,\n 0.404216,\n 472707e-11,\n 0.239725,\n -215083e-9,\n 0.426708,\n 120833e-9,\n 0.239904,\n -860718e-9,\n 0.427028,\n 483555e-9,\n 0.239911,\n -193661e-8,\n 0.427039,\n 108806e-8,\n 0.239914,\n -344276e-8,\n 0.42704,\n 193457e-8,\n 0.239933,\n -537907e-8,\n 0.427064,\n 302363e-8,\n 0.239944,\n -774482e-8,\n 0.427065,\n 435604e-8,\n 0.239993,\n -0.01054,\n 0.427122,\n 593398e-8,\n 0.240052,\n -0.0137626,\n 0.427179,\n 775987e-8,\n 0.240148,\n -0.0174115,\n 0.427279,\n 983854e-8,\n 0.240278,\n -0.021484,\n 0.42741,\n 0.0121763,\n 0.240472,\n -0.0259729,\n 0.427618,\n 0.0147827,\n 0.240839,\n -0.0308131,\n 0.428086,\n 0.0176837,\n 0.241201,\n -0.0360893,\n 0.428482,\n 0.0208775,\n 0.241626,\n -0.0417723,\n 0.428907,\n 0.0243821,\n 0.242207,\n -0.0478337,\n 0.42952,\n 0.0282228,\n 0.24298,\n -0.0542199,\n 0.430332,\n 0.0324333,\n 0.243881,\n -0.0610015,\n 0.431222,\n 0.0370252,\n 0.245123,\n -0.0680874,\n 0.432512,\n 0.0420535,\n 0.24667,\n -0.0755482,\n 0.434088,\n 0.0475414,\n 0.248779,\n -0.0832873,\n 0.436323,\n 0.0535542,\n 0.251665,\n -0.0913546,\n 0.439509,\n 0.0601716,\n 0.255305,\n -0.0998489,\n 0.443478,\n 0.0674282,\n 0.260049,\n -0.108576,\n 0.448713,\n 0.0754673,\n 0.266192,\n -0.117754,\n 0.455524,\n 0.084339,\n 0.273158,\n -0.127294,\n 0.4627,\n 0.0941683,\n 0.282131,\n -0.137311,\n 0.472068,\n 0.10515,\n 0.293332,\n -0.147736,\n 0.483565,\n 0.117402,\n 0.304667,\n -0.158357,\n 0.493702,\n 0.130824,\n 0.317785,\n -0.169274,\n 0.504708,\n 0.145724,\n 0.333245,\n -0.180595,\n 0.517107,\n 0.16215,\n 0.349843,\n -0.191892,\n 0.528849,\n 0.180149,\n 0.367944,\n -0.203168,\n 0.540301,\n 0.199746,\n 0.387579,\n -0.214443,\n 0.551514,\n 0.221047,\n 0.408247,\n -0.225624,\n 0.560906,\n 0.243981,\n 0.43014,\n -0.236422,\n 0.56959,\n 0.268513,\n 0.452669,\n -0.24654,\n 0.576098,\n 0.294409,\n 0.476196,\n -0.256157,\n 0.580925,\n 0.322002,\n 0.501157,\n -0.265289,\n 0.584839,\n 0.351052,\n 0.527632,\n -0.273671,\n 0.587614,\n 0.3812,\n 0.555754,\n -0.281254,\n 0.589119,\n 0.412994,\n 0.581682,\n -0.287448,\n 0.585204,\n 0.445498,\n 0.608196,\n -0.292614,\n 0.579006,\n 0.479505,\n 0.635661,\n -0.296068,\n 0.571297,\n 0.514643,\n 0.664999,\n -0.297395,\n 0.560855,\n 0.552213,\n 0.691039,\n -0.296645,\n 0.544525,\n 0.591365,\n 0.7179,\n -0.293785,\n 0.526535,\n 0.630883,\n 0.744059,\n -0.289089,\n 0.50545,\n 0.670932,\n 0.76863,\n -0.282239,\n 0.482514,\n 0.710904,\n 0.793273,\n -0.273688,\n 0.457246,\n 0.750259,\n 0.814731,\n -0.26328,\n 0.428872,\n 0.78948,\n 0.835603,\n -0.251526,\n 0.399384,\n 0.828597,\n 0.85489,\n -0.238339,\n 0.368811,\n 0.866892,\n 0.872828,\n -0.223607,\n 0.336617,\n 0.90563,\n 0.889462,\n -0.207538,\n 0.303997,\n 0.943538,\n 0.904929,\n -0.190297,\n 0.270812,\n 0.980591,\n 0.919101,\n -0.172034,\n 0.237453,\n 1.01935,\n 0.930536,\n -0.152058,\n 0.204431,\n 1.05498,\n 0.941223,\n -0.129515,\n 0.172495,\n 1.08717,\n 0.94982,\n -0.104263,\n 0.140175,\n 1.11551,\n 0.960592,\n -0.0781944,\n 0.106465,\n 1.14098,\n 0.974629,\n -0.051688,\n 0.0711592,\n 1.16418,\n 0.98811,\n -0.0253929,\n 0.0354432,\n 1.18465,\n 1.00004,\n 804378e-9,\n -330876e-9,\n 1.20462,\n 0.214668,\n -821282e-11,\n 0.406619,\n 433582e-11,\n 0.218053,\n -208144e-9,\n 0.413025,\n 109887e-9,\n 0.217987,\n -832212e-9,\n 0.412901,\n 439362e-9,\n 0.217971,\n -187246e-8,\n 0.412876,\n 988623e-9,\n 0.217968,\n -332855e-8,\n 0.41286,\n 175772e-8,\n 0.217985,\n -520055e-8,\n 0.412882,\n 274729e-8,\n 0.218014,\n -748814e-8,\n 0.412916,\n 395842e-8,\n 0.218054,\n -0.0101901,\n 0.412957,\n 539274e-8,\n 0.218106,\n -0.0133057,\n 0.413005,\n 705348e-8,\n 0.218217,\n -0.0168342,\n 0.413139,\n 894581e-8,\n 0.218338,\n -0.0207707,\n 0.413258,\n 0.0110754,\n 0.21855,\n -0.0251001,\n 0.413509,\n 0.0134551,\n 0.218913,\n -0.0297861,\n 0.413992,\n 0.0161081,\n 0.219265,\n -0.0348956,\n 0.414383,\n 0.0190307,\n 0.219696,\n -0.0403909,\n 0.414839,\n 0.0222458,\n 0.220329,\n -0.0462003,\n 0.415567,\n 0.025792,\n 0.220989,\n -0.0524208,\n 0.41621,\n 0.0296637,\n 0.222027,\n -0.058948,\n 0.417385,\n 0.0339323,\n 0.223301,\n -0.0658208,\n 0.418779,\n 0.0386055,\n 0.224988,\n -0.0730347,\n 0.420665,\n 0.0437355,\n 0.227211,\n -0.0805274,\n 0.423198,\n 0.0493844,\n 0.230131,\n -0.088395,\n 0.426566,\n 0.0556135,\n 0.233908,\n -0.0966208,\n 0.43091,\n 0.0624829,\n 0.239092,\n -0.105223,\n 0.437148,\n 0.0701636,\n 0.245315,\n -0.11424,\n 0.444302,\n 0.0786949,\n 0.253166,\n -0.12368,\n 0.453262,\n 0.0882382,\n 0.262374,\n -0.133569,\n 0.463211,\n 0.0988682,\n 0.273145,\n -0.143836,\n 0.474271,\n 0.110727,\n 0.285512,\n -0.154577,\n 0.4863,\n 0.123945,\n 0.299512,\n -0.165501,\n 0.498817,\n 0.138581,\n 0.314287,\n -0.176698,\n 0.510341,\n 0.154676,\n 0.331083,\n -0.188066,\n 0.522583,\n 0.172459,\n 0.349615,\n -0.199597,\n 0.534879,\n 0.191979,\n 0.369318,\n -0.210843,\n 0.546083,\n 0.21309,\n 0.390377,\n -0.222068,\n 0.5562,\n 0.235998,\n 0.412411,\n -0.233059,\n 0.564704,\n 0.260518,\n 0.435715,\n -0.24357,\n 0.572314,\n 0.286795,\n 0.461196,\n -0.253356,\n 0.579395,\n 0.314559,\n 0.485587,\n -0.262362,\n 0.581985,\n 0.343581,\n 0.511908,\n -0.270895,\n 0.584347,\n 0.374367,\n 0.539798,\n -0.278452,\n 0.58505,\n 0.406015,\n 0.567974,\n -0.284877,\n 0.583344,\n 0.439168,\n 0.594303,\n -0.290124,\n 0.577348,\n 0.473005,\n 0.622951,\n -0.294183,\n 0.570751,\n 0.508534,\n 0.652404,\n -0.296389,\n 0.561541,\n 0.544764,\n 0.679291,\n -0.296605,\n 0.546426,\n 0.582927,\n 0.706437,\n -0.294095,\n 0.528599,\n 0.622681,\n 0.734485,\n -0.28978,\n 0.508676,\n 0.663567,\n 0.758841,\n -0.283363,\n 0.484768,\n 0.704092,\n 0.78537,\n -0.275015,\n 0.460434,\n 0.745101,\n 0.807315,\n -0.264689,\n 0.432166,\n 0.784712,\n 0.8271,\n -0.252597,\n 0.401807,\n 0.824241,\n 0.849191,\n -0.239154,\n 0.371458,\n 0.863803,\n 0.867046,\n -0.224451,\n 0.338873,\n 0.903063,\n 0.8852,\n -0.208342,\n 0.306175,\n 0.942763,\n 0.901771,\n -0.190684,\n 0.272759,\n 0.981559,\n 0.915958,\n -0.172105,\n 0.239306,\n 1.02048,\n 0.928046,\n -0.152214,\n 0.206071,\n 1.05765,\n 0.939961,\n -0.130247,\n 0.17367,\n 1.08999,\n 0.948711,\n -0.10672,\n 0.142201,\n 1.11829,\n 0.959305,\n -0.0808688,\n 0.108454,\n 1.14467,\n 0.973009,\n -0.0539145,\n 0.0728109,\n 1.16839,\n 0.987631,\n -0.0262947,\n 0.0360625,\n 1.19004,\n 0.999978,\n 132758e-8,\n -559424e-9,\n 1.21058,\n 0.193925,\n -793421e-11,\n 0.391974,\n 392537e-11,\n 0.196746,\n -200315e-9,\n 0.397675,\n 991033e-10,\n 0.19667,\n -801099e-9,\n 0.397521,\n 396342e-9,\n 0.196633,\n -180246e-8,\n 0.397445,\n 891829e-9,\n 0.196654,\n -320443e-8,\n 0.397482,\n 158582e-8,\n 0.196659,\n -500647e-8,\n 0.39748,\n 247867e-8,\n 0.196683,\n -72086e-7,\n 0.397506,\n 357167e-8,\n 0.196728,\n -981001e-8,\n 0.397562,\n 486675e-8,\n 0.196792,\n -0.0128096,\n 0.397633,\n 636707e-8,\n 0.19689,\n -0.0162055,\n 0.397746,\n 807752e-8,\n 0.197017,\n -0.0199943,\n 0.397884,\n 0.0100052,\n 0.19729,\n -0.024139,\n 0.39827,\n 0.0121691,\n 0.197583,\n -0.0286671,\n 0.398639,\n 0.0145755,\n 0.197927,\n -0.0335858,\n 0.399034,\n 0.0172355,\n 0.198383,\n -0.0388806,\n 0.399554,\n 0.0201718,\n 0.199002,\n -0.0444736,\n 0.400289,\n 0.0234194,\n 0.199739,\n -0.0504583,\n 0.401111,\n 0.026984,\n 0.200784,\n -0.056729,\n 0.402349,\n 0.0309217,\n 0.202075,\n -0.0633643,\n 0.403841,\n 0.0352496,\n 0.203898,\n -0.0703247,\n 0.406076,\n 0.0400313,\n 0.206199,\n -0.0775565,\n 0.408841,\n 0.0453282,\n 0.209252,\n -0.085184,\n 0.41259,\n 0.0511794,\n 0.213638,\n -0.0931994,\n 0.418288,\n 0.0577459,\n 0.21881,\n -0.101617,\n 0.424681,\n 0.0650508,\n 0.225642,\n -0.11052,\n 0.433429,\n 0.0732759,\n 0.233717,\n -0.119772,\n 0.442897,\n 0.0824683,\n 0.242823,\n -0.129505,\n 0.452888,\n 0.0927484,\n 0.254772,\n -0.139906,\n 0.466407,\n 0.104417,\n 0.266603,\n -0.150402,\n 0.477413,\n 0.117211,\n 0.28073,\n -0.161395,\n 0.490519,\n 0.131598,\n 0.295399,\n -0.172465,\n 0.50201,\n 0.147407,\n 0.312705,\n -0.183982,\n 0.515311,\n 0.165031,\n 0.331335,\n -0.195532,\n 0.52786,\n 0.184336,\n 0.351037,\n -0.206971,\n 0.5392,\n 0.205361,\n 0.372175,\n -0.218117,\n 0.54941,\n 0.228043,\n 0.394548,\n -0.229327,\n 0.558642,\n 0.25267,\n 0.419598,\n -0.240052,\n 0.567861,\n 0.279071,\n 0.443922,\n -0.249937,\n 0.573332,\n 0.306882,\n 0.471495,\n -0.259407,\n 0.58013,\n 0.33661,\n 0.496769,\n -0.267749,\n 0.580564,\n 0.367328,\n 0.524951,\n -0.275524,\n 0.581696,\n 0.399753,\n 0.55318,\n -0.282148,\n 0.579885,\n 0.433134,\n 0.581577,\n -0.287533,\n 0.575471,\n 0.467534,\n 0.609231,\n -0.291612,\n 0.567445,\n 0.502943,\n 0.637478,\n -0.293911,\n 0.557657,\n 0.53871,\n 0.667795,\n -0.295096,\n 0.546535,\n 0.576568,\n 0.694272,\n -0.294073,\n 0.529561,\n 0.614929,\n 0.722937,\n -0.290386,\n 0.510561,\n 0.655909,\n 0.749682,\n -0.284481,\n 0.487846,\n 0.697663,\n 0.774754,\n -0.276188,\n 0.462487,\n 0.738515,\n 0.799301,\n -0.266215,\n 0.43481,\n 0.779802,\n 0.820762,\n -0.254116,\n 0.404879,\n 0.820045,\n 0.843231,\n -0.240393,\n 0.374559,\n 0.860294,\n 0.861857,\n -0.225503,\n 0.341582,\n 0.900965,\n 0.880815,\n -0.209382,\n 0.308778,\n 0.941727,\n 0.89766,\n -0.19155,\n 0.275232,\n 0.980916,\n 0.912926,\n -0.172346,\n 0.240938,\n 1.02162,\n 0.926391,\n -0.151799,\n 0.207223,\n 1.0597,\n 0.938429,\n -0.129968,\n 0.17484,\n 1.09291,\n 0.947834,\n -0.10651,\n 0.142984,\n 1.12248,\n 0.958432,\n -0.0824098,\n 0.109902,\n 1.149,\n 0.972402,\n -0.0565242,\n 0.0744454,\n 1.1733,\n 0.987191,\n -0.028427,\n 0.0373794,\n 1.19538,\n 0.999975,\n 385685e-10,\n -4203e-8,\n 1.21676,\n 0.178114,\n -766075e-11,\n 0.385418,\n 354027e-11,\n 0.176074,\n -191966e-9,\n 0.381002,\n 887135e-10,\n 0.17601,\n -767549e-9,\n 0.380861,\n 354715e-9,\n 0.17598,\n -172696e-8,\n 0.380798,\n 798168e-9,\n 0.175994,\n -307012e-8,\n 0.380824,\n 141928e-8,\n 0.176017,\n -479684e-8,\n 0.380858,\n 221859e-8,\n 0.176019,\n -690648e-8,\n 0.380839,\n 319714e-8,\n 0.176072,\n -939888e-8,\n 0.380913,\n 43572e-7,\n 0.176131,\n -0.0122726,\n 0.380979,\n 5702e-6,\n 0.176239,\n -0.0155264,\n 0.38112,\n 723689e-8,\n 0.176371,\n -0.0191551,\n 0.381272,\n 896907e-8,\n 0.176638,\n -0.023117,\n 0.381669,\n 0.0109194,\n 0.176912,\n -0.0274633,\n 0.382015,\n 0.0130903,\n 0.177279,\n -0.032173,\n 0.382476,\n 0.0154949,\n 0.17774,\n -0.0372219,\n 0.383041,\n 0.0181669,\n 0.178344,\n -0.0426132,\n 0.38378,\n 0.0211209,\n 0.179153,\n -0.0483309,\n 0.384773,\n 0.0243899,\n 0.180197,\n -0.0543447,\n 0.386076,\n 0.0280062,\n 0.181581,\n -0.0607122,\n 0.387809,\n 0.032004,\n 0.18344,\n -0.0673855,\n 0.390205,\n 0.036453,\n 0.186139,\n -0.0743989,\n 0.393944,\n 0.0414162,\n 0.189432,\n -0.0817731,\n 0.39832,\n 0.0469394,\n 0.193795,\n -0.0895464,\n 0.404188,\n 0.0531442,\n 0.199641,\n -0.0978264,\n 0.4121,\n 0.0601374,\n 0.206679,\n -0.106499,\n 0.421425,\n 0.0680078,\n 0.214865,\n -0.115654,\n 0.431504,\n 0.076919,\n 0.224406,\n -0.125268,\n 0.442526,\n 0.0868835,\n 0.235876,\n -0.135475,\n 0.455465,\n 0.0981875,\n 0.248335,\n -0.146023,\n 0.4681,\n 0.110759,\n 0.262868,\n -0.157016,\n 0.482069,\n 0.124885,\n 0.278962,\n -0.168245,\n 0.496182,\n 0.140645,\n 0.295082,\n -0.17958,\n 0.507401,\n 0.157838,\n 0.313738,\n -0.191227,\n 0.520252,\n 0.17695,\n 0.333573,\n -0.202718,\n 0.531708,\n 0.197817,\n 0.356433,\n -0.214424,\n 0.544509,\n 0.220785,\n 0.378853,\n -0.225492,\n 0.55373,\n 0.245306,\n 0.402717,\n -0.236236,\n 0.561348,\n 0.271593,\n 0.428375,\n -0.246568,\n 0.568538,\n 0.299776,\n 0.454724,\n -0.255941,\n 0.573462,\n 0.329433,\n 0.482291,\n -0.264511,\n 0.576356,\n 0.360598,\n 0.509706,\n -0.272129,\n 0.576446,\n 0.393204,\n 0.538805,\n -0.278979,\n 0.575298,\n 0.427227,\n 0.568919,\n -0.284528,\n 0.572154,\n 0.462157,\n 0.596804,\n -0.288801,\n 0.564691,\n 0.497997,\n 0.625987,\n -0.291334,\n 0.555134,\n 0.534467,\n 0.656414,\n -0.292722,\n 0.545051,\n 0.571736,\n 0.683916,\n -0.292185,\n 0.528813,\n 0.610158,\n 0.711809,\n -0.290043,\n 0.51106,\n 0.649061,\n 0.739547,\n -0.285246,\n 0.490103,\n 0.690081,\n 0.766914,\n -0.277647,\n 0.465523,\n 0.732554,\n 0.791375,\n -0.267603,\n 0.437718,\n 0.773982,\n 0.814772,\n -0.256109,\n 0.40882,\n 0.81609,\n 0.836691,\n -0.242281,\n 0.377823,\n 0.856849,\n 0.856984,\n -0.227155,\n 0.34496,\n 0.898363,\n 0.876332,\n -0.210395,\n 0.311335,\n 0.939471,\n 0.894988,\n -0.192612,\n 0.277703,\n 0.980799,\n 0.911113,\n -0.173236,\n 0.243019,\n 1.02215,\n 0.924092,\n -0.152258,\n 0.209037,\n 1.06139,\n 0.936828,\n -0.129575,\n 0.175909,\n 1.09635,\n 0.946869,\n -0.10594,\n 0.143852,\n 1.12707,\n 0.958284,\n -0.081318,\n 0.110289,\n 1.15419,\n 0.972325,\n -0.0556133,\n 0.0747232,\n 1.17909,\n 0.986878,\n -0.0297899,\n 0.0383149,\n 1.20163,\n 0.999936,\n -197169e-8,\n 912402e-9,\n 1.22338,\n 0.151174,\n -720365e-11,\n 0.351531,\n 309789e-11,\n 0.155594,\n -18279e-8,\n 0.361806,\n 78608e-9,\n 0.156099,\n -731569e-9,\n 0.362982,\n 314615e-9,\n 0.156053,\n -164578e-8,\n 0.362869,\n 707845e-9,\n 0.156093,\n -29261e-7,\n 0.362961,\n 125884e-8,\n 0.156099,\n -457155e-8,\n 0.362959,\n 196783e-8,\n 0.15612,\n -658224e-8,\n 0.362982,\n 283622e-8,\n 0.156168,\n -895774e-8,\n 0.363048,\n 386625e-8,\n 0.156221,\n -0.0116962,\n 0.363101,\n 506109e-8,\n 0.156324,\n -0.0147973,\n 0.363241,\n 642675e-8,\n 0.156476,\n -0.0182503,\n 0.363448,\n 797175e-8,\n 0.156731,\n -0.0220266,\n 0.36384,\n 971484e-8,\n 0.156994,\n -0.026176,\n 0.364179,\n 0.0116575,\n 0.157341,\n -0.0306701,\n 0.36462,\n 0.0138207,\n 0.157867,\n -0.0354591,\n 0.365364,\n 0.0162356,\n 0.15846,\n -0.0406141,\n 0.366111,\n 0.0189092,\n 0.159308,\n -0.0460519,\n 0.367248,\n 0.021885,\n 0.160426,\n -0.0518096,\n 0.368767,\n 0.0252004,\n 0.161877,\n -0.0578906,\n 0.370745,\n 0.0288825,\n 0.163995,\n -0.0642812,\n 0.373831,\n 0.0330139,\n 0.16655,\n -0.0710067,\n 0.377366,\n 0.0376283,\n 0.170237,\n -0.0781522,\n 0.382799,\n 0.0428493,\n 0.175096,\n -0.0857172,\n 0.389915,\n 0.0487324,\n 0.181069,\n -0.0938025,\n 0.398487,\n 0.0554214,\n 0.188487,\n -0.102363,\n 0.408799,\n 0.0630189,\n 0.197029,\n -0.111343,\n 0.419991,\n 0.071634,\n 0.206684,\n -0.120812,\n 0.431455,\n 0.0812797,\n 0.218698,\n -0.131033,\n 0.445746,\n 0.0923651,\n 0.230726,\n -0.141373,\n 0.457471,\n 0.104545,\n 0.245516,\n -0.152387,\n 0.472388,\n 0.118449,\n 0.261551,\n -0.163628,\n 0.486671,\n 0.133923,\n 0.277437,\n -0.174814,\n 0.49762,\n 0.150849,\n 0.296662,\n -0.186713,\n 0.51162,\n 0.169924,\n 0.31795,\n -0.198513,\n 0.525435,\n 0.190848,\n 0.339422,\n -0.210119,\n 0.536267,\n 0.213504,\n 0.362143,\n -0.221354,\n 0.545982,\n 0.237947,\n 0.387198,\n -0.23224,\n 0.555364,\n 0.264427,\n 0.412349,\n -0.24257,\n 0.561489,\n 0.292519,\n 0.439274,\n -0.252284,\n 0.566903,\n 0.322561,\n 0.466779,\n -0.261023,\n 0.569614,\n 0.353952,\n 0.496011,\n -0.26899,\n 0.571589,\n 0.387278,\n 0.524964,\n -0.275498,\n 0.570325,\n 0.421356,\n 0.556518,\n -0.281449,\n 0.568792,\n 0.457314,\n 0.584363,\n -0.285526,\n 0.560268,\n 0.493199,\n 0.614214,\n -0.28844,\n 0.55205,\n 0.530276,\n 0.645684,\n -0.289777,\n 0.541906,\n 0.56855,\n 0.673446,\n -0.289722,\n 0.526464,\n 0.606927,\n 0.701924,\n -0.287792,\n 0.509872,\n 0.645945,\n 0.73037,\n -0.284315,\n 0.490649,\n 0.685564,\n 0.757405,\n -0.278804,\n 0.467964,\n 0.726511,\n 0.784025,\n -0.269543,\n 0.441468,\n 0.768601,\n 0.808255,\n -0.258117,\n 0.41216,\n 0.811321,\n 0.830739,\n -0.244728,\n 0.380606,\n 0.853496,\n 0.851914,\n -0.229428,\n 0.348111,\n 0.895374,\n 0.872586,\n -0.212508,\n 0.314732,\n 0.937674,\n 0.891581,\n -0.194025,\n 0.280338,\n 0.979869,\n 0.907641,\n -0.174711,\n 0.245203,\n 1.02253,\n 0.922233,\n -0.153509,\n 0.21077,\n 1.06371,\n 0.935878,\n -0.130418,\n 0.177399,\n 1.09972,\n 0.946338,\n -0.105558,\n 0.144507,\n 1.13124,\n 0.957265,\n -0.080059,\n 0.110508,\n 1.15973,\n 0.971668,\n -0.0539766,\n 0.0742311,\n 1.18515,\n 0.9866,\n -0.0277101,\n 0.0375224,\n 1.20858,\n 1.00021,\n -515531e-9,\n 135226e-9,\n 1.23135,\n 0.137468,\n -686011e-11,\n 0.345041,\n 273315e-11,\n 0.13703,\n -173378e-9,\n 0.343936,\n 690761e-10,\n 0.136986,\n -693048e-9,\n 0.34383,\n 276126e-9,\n 0.136964,\n -155931e-8,\n 0.343761,\n 621337e-9,\n 0.137003,\n -277211e-8,\n 0.343863,\n 110494e-8,\n 0.137012,\n -433103e-8,\n 0.343868,\n 172744e-8,\n 0.137043,\n -623606e-8,\n 0.343916,\n 249022e-8,\n 0.13709,\n -84868e-7,\n 0.343986,\n 339559e-8,\n 0.137145,\n -0.0110814,\n 0.344045,\n 444687e-8,\n 0.137242,\n -0.0140187,\n 0.344177,\n 565007e-8,\n 0.137431,\n -0.0172713,\n 0.344491,\n 701868e-8,\n 0.137644,\n -0.0208605,\n 0.344805,\n 856042e-8,\n 0.13791,\n -0.024792,\n 0.345172,\n 0.0102863,\n 0.138295,\n -0.0290461,\n 0.345734,\n 0.0122185,\n 0.138764,\n -0.0335957,\n 0.346371,\n 0.0143771,\n 0.139415,\n -0.038467,\n 0.347298,\n 0.0167894,\n 0.140272,\n -0.0436176,\n 0.348527,\n 0.0194895,\n 0.141457,\n -0.0491016,\n 0.350276,\n 0.0225043,\n 0.14303,\n -0.0548764,\n 0.352646,\n 0.0258962,\n 0.145289,\n -0.0610096,\n 0.356206,\n 0.0297168,\n 0.148502,\n -0.0674777,\n 0.361488,\n 0.0340562,\n 0.152188,\n -0.074345,\n 0.367103,\n 0.0389534,\n 0.157359,\n -0.0817442,\n 0.375247,\n 0.0445541,\n 0.16379,\n -0.0896334,\n 0.385064,\n 0.0509535,\n 0.171376,\n -0.098005,\n 0.396082,\n 0.0582611,\n 0.179901,\n -0.106817,\n 0.407418,\n 0.06654,\n 0.189892,\n -0.116239,\n 0.420031,\n 0.075994,\n 0.201838,\n -0.12627,\n 0.434321,\n 0.0867239,\n 0.214311,\n -0.136701,\n 0.447631,\n 0.0987517,\n 0.228902,\n -0.147616,\n 0.462046,\n 0.112353,\n 0.245107,\n -0.158871,\n 0.476942,\n 0.127605,\n 0.262292,\n -0.170261,\n 0.490285,\n 0.144469,\n 0.281215,\n -0.182017,\n 0.503783,\n 0.163282,\n 0.301058,\n -0.193729,\n 0.515505,\n 0.183873,\n 0.322752,\n -0.205512,\n 0.52682,\n 0.206466,\n 0.347547,\n -0.217214,\n 0.539473,\n 0.231194,\n 0.370969,\n -0.227966,\n 0.546625,\n 0.257288,\n 0.397533,\n -0.238555,\n 0.55472,\n 0.285789,\n 0.42398,\n -0.248278,\n 0.559468,\n 0.315746,\n 0.452928,\n -0.257422,\n 0.564095,\n 0.347724,\n 0.482121,\n -0.265306,\n 0.565426,\n 0.380922,\n 0.510438,\n -0.272043,\n 0.563205,\n 0.415639,\n 0.541188,\n -0.277614,\n 0.561087,\n 0.451702,\n 0.571667,\n -0.281927,\n 0.554922,\n 0.48845,\n 0.602432,\n -0.285015,\n 0.546838,\n 0.526442,\n 0.634126,\n -0.286512,\n 0.537415,\n 0.564896,\n 0.662816,\n -0.286388,\n 0.522906,\n 0.604037,\n 0.692411,\n -0.284734,\n 0.507003,\n 0.643795,\n 0.720946,\n -0.281297,\n 0.488398,\n 0.68298,\n 0.748293,\n -0.276262,\n 0.466353,\n 0.723466,\n 0.776931,\n -0.269978,\n 0.443573,\n 0.764565,\n 0.801065,\n -0.260305,\n 0.415279,\n 0.805838,\n 0.825843,\n -0.247426,\n 0.384773,\n 0.849985,\n 0.84807,\n -0.232437,\n 0.352555,\n 0.893174,\n 0.869122,\n -0.215806,\n 0.318642,\n 0.936564,\n 0.888963,\n -0.197307,\n 0.28381,\n 0.980253,\n 0.905547,\n -0.177203,\n 0.247888,\n 1.02463,\n 0.918554,\n -0.155542,\n 0.212904,\n 1.06714,\n 0.931395,\n -0.131948,\n 0.1787,\n 1.10451,\n 0.941749,\n -0.106723,\n 0.145902,\n 1.13694,\n 0.954551,\n -0.0804939,\n 0.111193,\n 1.1666,\n 0.970279,\n -0.0534239,\n 0.0744697,\n 1.19249,\n 0.986117,\n -0.0257452,\n 0.0368788,\n 1.21665,\n 0.999938,\n 190634e-8,\n -10291e-7,\n 1.23981,\n 0.118493,\n -647439e-11,\n 0.32272,\n 23772e-10,\n 0.118765,\n -163023e-9,\n 0.323456,\n 598573e-10,\n 0.118772,\n -65212e-8,\n 0.323477,\n 239447e-9,\n 0.118843,\n -146741e-8,\n 0.323657,\n 538881e-9,\n 0.118804,\n -260846e-8,\n 0.323553,\n 95826e-8,\n 0.118826,\n -407576e-8,\n 0.323595,\n 149845e-8,\n 0.118846,\n -586826e-8,\n 0.323617,\n 216047e-8,\n 0.118886,\n -798578e-8,\n 0.32367,\n 294679e-8,\n 0.118947,\n -0.0104273,\n 0.323753,\n 386124e-8,\n 0.119055,\n -0.0131909,\n 0.323922,\n 490999e-8,\n 0.119241,\n -0.0162444,\n 0.324251,\n 610804e-8,\n 0.11944,\n -0.0196339,\n 0.324544,\n 745805e-8,\n 0.119739,\n -0.0233378,\n 0.325026,\n 897805e-8,\n 0.12011,\n -0.0273179,\n 0.325586,\n 0.0106895,\n 0.120571,\n -0.0316143,\n 0.326231,\n 0.0126073,\n 0.12124,\n -0.0361939,\n 0.327264,\n 0.0147654,\n 0.122162,\n -0.0410511,\n 0.328733,\n 0.0172001,\n 0.123378,\n -0.0462233,\n 0.330659,\n 0.0199375,\n 0.125183,\n -0.0517109,\n 0.333754,\n 0.0230498,\n 0.127832,\n -0.0575652,\n 0.338507,\n 0.026597,\n 0.130909,\n -0.0637441,\n 0.343666,\n 0.0306345,\n 0.135221,\n -0.0704302,\n 0.351063,\n 0.035273,\n 0.14082,\n -0.0776364,\n 0.360604,\n 0.0406137,\n 0.146781,\n -0.0852293,\n 0.369638,\n 0.0466788,\n 0.155121,\n -0.0935351,\n 0.3827,\n 0.0537628,\n 0.16398,\n -0.102234,\n 0.39522,\n 0.0617985,\n 0.173926,\n -0.111465,\n 0.40793,\n 0.07097,\n 0.185137,\n -0.121296,\n 0.42105,\n 0.0813426,\n 0.19826,\n -0.13169,\n 0.435735,\n 0.0931596,\n 0.212938,\n -0.142614,\n 0.450932,\n 0.106547,\n 0.229046,\n -0.153884,\n 0.465726,\n 0.121575,\n 0.246246,\n -0.165382,\n 0.479461,\n 0.138286,\n 0.264637,\n -0.176806,\n 0.492106,\n 0.15666,\n 0.284959,\n -0.188793,\n 0.504774,\n 0.17728,\n 0.308157,\n -0.200763,\n 0.518805,\n 0.19988,\n 0.330951,\n -0.21239,\n 0.528231,\n 0.224293,\n 0.3549,\n -0.223521,\n 0.536376,\n 0.250541,\n 0.381502,\n -0.234169,\n 0.544846,\n 0.278902,\n 0.409529,\n -0.244077,\n 0.551717,\n 0.309227,\n 0.437523,\n -0.253363,\n 0.55517,\n 0.341426,\n 0.467624,\n -0.261659,\n 0.557772,\n 0.37518,\n 0.497268,\n -0.268498,\n 0.556442,\n 0.41007,\n 0.528294,\n -0.274018,\n 0.553915,\n 0.446445,\n 0.559053,\n -0.278169,\n 0.549153,\n 0.483779,\n 0.589329,\n -0.281229,\n 0.539878,\n 0.522249,\n 0.622503,\n -0.282902,\n 0.53162,\n 0.561754,\n 0.652382,\n -0.282815,\n 0.518119,\n 0.601544,\n 0.681847,\n -0.281247,\n 0.502187,\n 0.641574,\n 0.712285,\n -0.277986,\n 0.484824,\n 0.682633,\n 0.740094,\n -0.273017,\n 0.463483,\n 0.723426,\n 0.768478,\n -0.266692,\n 0.441299,\n 0.763747,\n 0.794556,\n -0.258358,\n 0.415238,\n 0.805565,\n 0.819408,\n -0.248807,\n 0.386912,\n 0.847254,\n 0.843411,\n -0.236214,\n 0.356165,\n 0.891091,\n 0.862397,\n -0.219794,\n 0.320562,\n 0.936174,\n 0.883113,\n -0.201768,\n 0.285322,\n 0.982562,\n 0.90023,\n -0.181672,\n 0.249713,\n 1.02862,\n 0.915192,\n -0.159279,\n 0.214546,\n 1.07163,\n 0.928458,\n -0.134725,\n 0.180285,\n 1.10995,\n 0.94069,\n -0.10913,\n 0.147119,\n 1.14354,\n 0.953409,\n -0.0821315,\n 0.112492,\n 1.17372,\n 0.969537,\n -0.0542677,\n 0.0752014,\n 1.20043,\n 0.985612,\n -0.0259096,\n 0.0370361,\n 1.22528,\n 0.999835,\n 298198e-8,\n -151801e-8,\n 1.24959,\n 0.10097,\n -602574e-11,\n 0.300277,\n 202619e-11,\n 0.101577,\n -152164e-9,\n 0.302077,\n 511662e-10,\n 0.101572,\n -608889e-9,\n 0.302066,\n 204751e-9,\n 0.101566,\n -136997e-8,\n 0.302047,\n 460753e-9,\n 0.101592,\n -243557e-8,\n 0.302114,\n 819497e-9,\n 0.101608,\n -38053e-7,\n 0.30214,\n 128154e-8,\n 0.101627,\n -547906e-8,\n 0.30216,\n 18483e-7,\n 0.101669,\n -745647e-8,\n 0.302224,\n 252223e-8,\n 0.101732,\n -973615e-8,\n 0.302318,\n 330716e-8,\n 0.101844,\n -0.0123097,\n 0.302513,\n 421061e-8,\n 0.102025,\n -0.0151681,\n 0.30285,\n 524481e-8,\n 0.102224,\n -0.0183334,\n 0.303166,\n 64154e-7,\n 0.102515,\n -0.0217819,\n 0.303654,\n 774063e-8,\n 0.102886,\n -0.0255067,\n 0.304243,\n 92398e-7,\n 0.103395,\n -0.029514,\n 0.305089,\n 0.0109339,\n 0.104109,\n -0.0337912,\n 0.306301,\n 0.0128561,\n 0.105074,\n -0.0383565,\n 0.30798,\n 0.0150338,\n 0.10654,\n -0.0432132,\n 0.310726,\n 0.0175228,\n 0.108478,\n -0.0484244,\n 0.314351,\n 0.0203648,\n 0.111015,\n -0.0539339,\n 0.319032,\n 0.0236325,\n 0.114682,\n -0.0598885,\n 0.32605,\n 0.0274188,\n 0.11911,\n -0.0663375,\n 0.334109,\n 0.0317905,\n 0.124736,\n -0.0733011,\n 0.344013,\n 0.0368502,\n 0.131479,\n -0.0807744,\n 0.355358,\n 0.0427104,\n 0.139283,\n -0.0888204,\n 0.367614,\n 0.0494788,\n 0.148054,\n -0.0973394,\n 0.380072,\n 0.0572367,\n 0.159037,\n -0.10665,\n 0.395678,\n 0.0662704,\n 0.169794,\n -0.116221,\n 0.40795,\n 0.0763192,\n 0.18314,\n -0.126632,\n 0.423546,\n 0.087956,\n 0.197515,\n -0.137383,\n 0.438213,\n 0.101042,\n 0.213514,\n -0.148641,\n 0.453248,\n 0.115827,\n 0.23065,\n -0.160117,\n 0.46688,\n 0.132283,\n 0.249148,\n -0.171807,\n 0.479962,\n 0.150644,\n 0.270219,\n -0.183695,\n 0.494618,\n 0.171073,\n 0.292338,\n -0.195574,\n 0.506937,\n 0.193378,\n 0.314999,\n -0.207205,\n 0.516463,\n 0.217585,\n 0.340991,\n -0.218955,\n 0.528123,\n 0.24428,\n 0.367982,\n -0.229917,\n 0.537025,\n 0.272784,\n 0.39432,\n -0.239737,\n 0.541627,\n 0.302742,\n 0.423364,\n -0.249048,\n 0.546466,\n 0.335112,\n 0.453751,\n -0.257329,\n 0.549466,\n 0.369032,\n 0.48416,\n -0.264623,\n 0.549503,\n 0.404577,\n 0.515262,\n -0.270411,\n 0.547008,\n 0.441337,\n 0.547036,\n -0.274581,\n 0.542249,\n 0.479162,\n 0.576614,\n -0.277266,\n 0.533015,\n 0.517904,\n 0.611143,\n -0.279144,\n 0.525512,\n 0.558508,\n 0.640989,\n -0.279001,\n 0.51154,\n 0.598995,\n 0.671182,\n -0.277324,\n 0.495641,\n 0.639935,\n 0.700848,\n -0.273908,\n 0.477526,\n 0.681017,\n 0.729862,\n -0.269063,\n 0.457955,\n 0.722764,\n 0.758273,\n -0.262282,\n 0.434846,\n 0.764349,\n 0.784121,\n -0.254281,\n 0.409203,\n 0.806206,\n 0.809798,\n -0.24505,\n 0.382694,\n 0.848617,\n 0.834953,\n -0.233861,\n 0.354034,\n 0.892445,\n 0.856817,\n -0.221308,\n 0.321764,\n 0.936263,\n 0.877609,\n -0.205996,\n 0.288118,\n 0.982401,\n 0.897489,\n -0.186702,\n 0.253277,\n 1.02975,\n 0.913792,\n -0.164618,\n 0.217963,\n 1.07488,\n 0.92785,\n -0.140023,\n 0.183221,\n 1.11487,\n 0.940378,\n -0.11328,\n 0.149385,\n 1.14947,\n 0.95273,\n -0.0853958,\n 0.114152,\n 1.1807,\n 0.969059,\n -0.0568698,\n 0.0769845,\n 1.20912,\n 0.985574,\n -0.0276502,\n 0.0381186,\n 1.23498,\n 0.999943,\n 239052e-8,\n -126861e-8,\n 1.25987,\n 0.0852715,\n -560067e-11,\n 0.279021,\n 171162e-11,\n 0.0854143,\n -140871e-9,\n 0.279483,\n 430516e-10,\n 0.0854191,\n -563385e-9,\n 0.2795,\n 172184e-9,\n 0.0854188,\n -126753e-8,\n 0.279493,\n 387464e-9,\n 0.0854229,\n -225337e-8,\n 0.279501,\n 68918e-8,\n 0.0854443,\n -352086e-8,\n 0.279549,\n 107803e-8,\n 0.0854697,\n -506962e-8,\n 0.279591,\n 155536e-8,\n 0.0855093,\n -689873e-8,\n 0.279652,\n 212354e-8,\n 0.0855724,\n -900821e-8,\n 0.279752,\n 278703e-8,\n 0.0856991,\n -0.0113799,\n 0.280011,\n 35551e-7,\n 0.085855,\n -0.0140314,\n 0.280297,\n 443449e-8,\n 0.0860682,\n -0.016963,\n 0.280682,\n 543636e-8,\n 0.086344,\n -0.0201438,\n 0.281159,\n 65788e-7,\n 0.0867426,\n -0.0235999,\n 0.281886,\n 787977e-8,\n 0.087239,\n -0.0273069,\n 0.282745,\n 93606e-7,\n 0.0879815,\n -0.031269,\n 0.284139,\n 0.011056,\n 0.0891258,\n -0.035531,\n 0.28647,\n 0.0130065,\n 0.0906909,\n -0.0400947,\n 0.289708,\n 0.0152495,\n 0.0927624,\n -0.0449638,\n 0.293904,\n 0.0178454,\n 0.0958376,\n -0.0502427,\n 0.300471,\n 0.0208915,\n 0.0995827,\n -0.0559514,\n 0.30806,\n 0.0244247,\n 0.104526,\n -0.0622152,\n 0.317874,\n 0.0285721,\n 0.110532,\n -0.0690046,\n 0.329332,\n 0.0334227,\n 0.117385,\n -0.0763068,\n 0.341217,\n 0.0390466,\n 0.12522,\n -0.084184,\n 0.353968,\n 0.0455786,\n 0.134037,\n -0.0925248,\n 0.366797,\n 0.0530773,\n 0.144014,\n -0.101487,\n 0.380209,\n 0.0617424,\n 0.156013,\n -0.111273,\n 0.395956,\n 0.071777,\n 0.168872,\n -0.121431,\n 0.41053,\n 0.0830905,\n 0.183089,\n -0.132105,\n 0.425073,\n 0.0959341,\n 0.198763,\n -0.143286,\n 0.439833,\n 0.110448,\n 0.216159,\n -0.154841,\n 0.454507,\n 0.126769,\n 0.234859,\n -0.166588,\n 0.468368,\n 0.14495,\n 0.255879,\n -0.178626,\n 0.482846,\n 0.165233,\n 0.27677,\n -0.190218,\n 0.493489,\n 0.187217,\n 0.301184,\n -0.202227,\n 0.506549,\n 0.211659,\n 0.325852,\n -0.213764,\n 0.5158,\n 0.237922,\n 0.352824,\n -0.22487,\n 0.525442,\n 0.26632,\n 0.380882,\n -0.235246,\n 0.532487,\n 0.296691,\n 0.410137,\n -0.244847,\n 0.537703,\n 0.329179,\n 0.439787,\n -0.253122,\n 0.540361,\n 0.363135,\n 0.472291,\n -0.260517,\n 0.542734,\n 0.399222,\n 0.501856,\n -0.266519,\n 0.538826,\n 0.436352,\n 0.534816,\n -0.270905,\n 0.535152,\n 0.474505,\n 0.565069,\n -0.273826,\n 0.525979,\n 0.513988,\n 0.597154,\n -0.275333,\n 0.516394,\n 0.554852,\n 0.630473,\n -0.275314,\n 0.506206,\n 0.596592,\n 0.660574,\n -0.273323,\n 0.489769,\n 0.638117,\n 0.692015,\n -0.270008,\n 0.472578,\n 0.680457,\n 0.720647,\n -0.265001,\n 0.452134,\n 0.723008,\n 0.750528,\n -0.258311,\n 0.430344,\n 0.765954,\n 0.777568,\n -0.250046,\n 0.405624,\n 0.809012,\n 0.80387,\n -0.240114,\n 0.378339,\n 0.852425,\n 0.828439,\n -0.228737,\n 0.349877,\n 0.895346,\n 0.851472,\n -0.216632,\n 0.318968,\n 0.940695,\n 0.873906,\n -0.202782,\n 0.287489,\n 0.987235,\n 0.89467,\n -0.187059,\n 0.254394,\n 1.03348,\n 0.912281,\n -0.168818,\n 0.221294,\n 1.07812,\n 0.927358,\n -0.146494,\n 0.18675,\n 1.11928,\n 0.940385,\n -0.120009,\n 0.152322,\n 1.15609,\n 0.952672,\n -0.0917183,\n 0.117514,\n 1.18875,\n 0.968496,\n -0.0620321,\n 0.0797405,\n 1.21821,\n 0.985236,\n -0.0314945,\n 0.0402383,\n 1.24523,\n 0.99998,\n -575153e-9,\n 110644e-9,\n 1.27133,\n 0.0702429,\n -512222e-11,\n 0.255273,\n 140947e-11,\n 0.0702981,\n -128826e-9,\n 0.255469,\n 354488e-10,\n 0.0703691,\n -515562e-9,\n 0.255727,\n 141874e-9,\n 0.0703805,\n -116e-5,\n 0.255754,\n 31929e-8,\n 0.0703961,\n -206224e-8,\n 0.255813,\n 567999e-9,\n 0.0704102,\n -322223e-8,\n 0.255839,\n 88871e-8,\n 0.0704298,\n -463928e-8,\n 0.255863,\n 128272e-8,\n 0.0704759,\n -631375e-8,\n 0.255953,\n 175283e-8,\n 0.0705434,\n -824317e-8,\n 0.256079,\n 230342e-8,\n 0.0706693,\n -0.010412,\n 0.25636,\n 29443e-7,\n 0.0708189,\n -0.0128439,\n 0.256647,\n 368031e-8,\n 0.0710364,\n -0.0155177,\n 0.257084,\n 452614e-8,\n 0.0713223,\n -0.0184374,\n 0.257637,\n 549706e-8,\n 0.0717182,\n -0.0216002,\n 0.258416,\n 661246e-8,\n 0.072321,\n -0.0249966,\n 0.259699,\n 790147e-8,\n 0.0731446,\n -0.0286566,\n 0.261475,\n 93884e-7,\n 0.0743352,\n -0.0325888,\n 0.264132,\n 0.0111186,\n 0.0760676,\n -0.036843,\n 0.26815,\n 0.013145,\n 0.078454,\n -0.0414292,\n 0.273636,\n 0.0155251,\n 0.0818618,\n -0.0464634,\n 0.281653,\n 0.0183525,\n 0.0857382,\n -0.0519478,\n 0.289992,\n 0.0216642,\n 0.0908131,\n -0.0579836,\n 0.30066,\n 0.0255956,\n 0.0967512,\n -0.0645124,\n 0.312204,\n 0.0301954,\n 0.103717,\n -0.0716505,\n 0.325001,\n 0.0356017,\n 0.111596,\n -0.0793232,\n 0.338129,\n 0.041896,\n 0.120933,\n -0.087645,\n 0.352853,\n 0.0492447,\n 0.130787,\n -0.096492,\n 0.366192,\n 0.0576749,\n 0.142311,\n -0.105973,\n 0.380864,\n 0.0673969,\n 0.155344,\n -0.116182,\n 0.396575,\n 0.0785899,\n 0.169535,\n -0.126815,\n 0.411443,\n 0.0912377,\n 0.185173,\n -0.138015,\n 0.426256,\n 0.105607,\n 0.201755,\n -0.149325,\n 0.439607,\n 0.121551,\n 0.221334,\n -0.161207,\n 0.455467,\n 0.139608,\n 0.241461,\n -0.173162,\n 0.469096,\n 0.159591,\n 0.26294,\n -0.18504,\n 0.481014,\n 0.18156,\n 0.286776,\n -0.196881,\n 0.493291,\n 0.205781,\n 0.311596,\n -0.208311,\n 0.503556,\n 0.231819,\n 0.338667,\n -0.219671,\n 0.513268,\n 0.260274,\n 0.366021,\n -0.230451,\n 0.519414,\n 0.290862,\n 0.395875,\n -0.240131,\n 0.526766,\n 0.323196,\n 0.425564,\n -0.248566,\n 0.52905,\n 0.357071,\n 0.457094,\n -0.256195,\n 0.530796,\n 0.393262,\n 0.488286,\n -0.262331,\n 0.528703,\n 0.430797,\n 0.522291,\n -0.267141,\n 0.52727,\n 0.470231,\n 0.554172,\n -0.270411,\n 0.519848,\n 0.510477,\n 0.586427,\n -0.271986,\n 0.510307,\n 0.551594,\n 0.619638,\n -0.27192,\n 0.499158,\n 0.593849,\n 0.650656,\n -0.269817,\n 0.483852,\n 0.636314,\n 0.68284,\n -0.266267,\n 0.467515,\n 0.679679,\n 0.714356,\n -0.26113,\n 0.44931,\n 0.723884,\n 0.742717,\n -0.254067,\n 0.425789,\n 0.767245,\n 0.770894,\n -0.245652,\n 0.401144,\n 0.811819,\n 0.797358,\n -0.235554,\n 0.374224,\n 0.856315,\n 0.823377,\n -0.223896,\n 0.346167,\n 0.901077,\n 0.847456,\n -0.210865,\n 0.316056,\n 0.946502,\n 0.870697,\n -0.196574,\n 0.284503,\n 0.993711,\n 0.891068,\n -0.180814,\n 0.251628,\n 1.04134,\n 0.909267,\n -0.163314,\n 0.219065,\n 1.08609,\n 0.925653,\n -0.143304,\n 0.186446,\n 1.12702,\n 0.940017,\n -0.121322,\n 0.153416,\n 1.16371,\n 0.952398,\n -0.0973872,\n 0.120334,\n 1.19712,\n 0.967568,\n -0.0698785,\n 0.08352,\n 1.22791,\n 0.984772,\n -0.0390031,\n 0.0439209,\n 1.25672,\n 1.00026,\n -70087e-7,\n 315668e-8,\n 1.28428,\n 0.0556653,\n -459654e-11,\n 0.227325,\n 112556e-11,\n 0.0565238,\n -116382e-9,\n 0.230826,\n 284985e-10,\n 0.0565717,\n -465666e-9,\n 0.231026,\n 114036e-9,\n 0.0565859,\n -104773e-8,\n 0.231079,\n 256656e-9,\n 0.0565761,\n -186255e-8,\n 0.231025,\n 45663e-8,\n 0.0565913,\n -291002e-8,\n 0.231058,\n 714664e-9,\n 0.0566108,\n -418998e-8,\n 0.231085,\n 103224e-8,\n 0.0566532,\n -570206e-8,\n 0.231169,\n 141202e-8,\n 0.0567473,\n -743666e-8,\n 0.231417,\n 186018e-8,\n 0.0568567,\n -940298e-8,\n 0.231661,\n 238264e-8,\n 0.0569859,\n -0.0115991,\n 0.231895,\n 298699e-8,\n 0.0572221,\n -0.0140096,\n 0.232456,\n 368957e-8,\n 0.057519,\n -0.0166508,\n 0.233096,\n 450303e-8,\n 0.0579534,\n -0.01951,\n 0.234094,\n 544945e-8,\n 0.0585922,\n -0.0225991,\n 0.235629,\n 655564e-8,\n 0.0595647,\n -0.0259416,\n 0.238106,\n 785724e-8,\n 0.0609109,\n -0.0295661,\n 0.241557,\n 939127e-8,\n 0.0628751,\n -0.0335126,\n 0.246652,\n 0.0112198,\n 0.0656908,\n -0.0378604,\n 0.254091,\n 0.0134168,\n 0.0691347,\n -0.0426543,\n 0.262666,\n 0.0160374,\n 0.0732165,\n -0.0478967,\n 0.272029,\n 0.0191514,\n 0.0782863,\n -0.0536716,\n 0.283007,\n 0.0228597,\n 0.0843973,\n -0.0600683,\n 0.295732,\n 0.0272829,\n 0.0913598,\n -0.0670095,\n 0.308779,\n 0.032484,\n 0.0994407,\n -0.0745516,\n 0.322886,\n 0.0385886,\n 0.108189,\n -0.082712,\n 0.336408,\n 0.0457133,\n 0.118574,\n -0.0914927,\n 0.351692,\n 0.0539832,\n 0.129989,\n -0.100854,\n 0.366502,\n 0.0635162,\n 0.142722,\n -0.110837,\n 0.381675,\n 0.0744386,\n 0.156654,\n -0.121353,\n 0.3963,\n 0.0868483,\n 0.172151,\n -0.132414,\n 0.411477,\n 0.100963,\n 0.188712,\n -0.143809,\n 0.42508,\n 0.116795,\n 0.208093,\n -0.155765,\n 0.441328,\n 0.134715,\n 0.227936,\n -0.167608,\n 0.454328,\n 0.154396,\n 0.249495,\n -0.179579,\n 0.467235,\n 0.176179,\n 0.27362,\n -0.191488,\n 0.480248,\n 0.200193,\n 0.296371,\n -0.202618,\n 0.487886,\n 0.225775,\n 0.324234,\n -0.214133,\n 0.499632,\n 0.25441,\n 0.353049,\n -0.225212,\n 0.509532,\n 0.285077,\n 0.381785,\n -0.234875,\n 0.514265,\n 0.317047,\n 0.414038,\n -0.244205,\n 0.521282,\n 0.351874,\n 0.445251,\n -0.252145,\n 0.522931,\n 0.388279,\n 0.476819,\n -0.258433,\n 0.520947,\n 0.425825,\n 0.509209,\n -0.263411,\n 0.517669,\n 0.465104,\n 0.542759,\n -0.266732,\n 0.512841,\n 0.505741,\n 0.574822,\n -0.268263,\n 0.503317,\n 0.547611,\n 0.609324,\n -0.268489,\n 0.493035,\n 0.590953,\n 0.641772,\n -0.266941,\n 0.478816,\n 0.63488,\n 0.674049,\n -0.263297,\n 0.462863,\n 0.679072,\n 0.705071,\n -0.257618,\n 0.442931,\n 0.723487,\n 0.734709,\n -0.250625,\n 0.421299,\n 0.768708,\n 0.763704,\n -0.24179,\n 0.397085,\n 0.814375,\n 0.791818,\n -0.231115,\n 0.370577,\n 0.859907,\n 0.817439,\n -0.21922,\n 0.34232,\n 0.906715,\n 0.843202,\n -0.205658,\n 0.312627,\n 0.953943,\n 0.866639,\n -0.190563,\n 0.280933,\n 1.00185,\n 0.888129,\n -0.173978,\n 0.248393,\n 1.05105,\n 0.907239,\n -0.155485,\n 0.216007,\n 1.09704,\n 0.923893,\n -0.134782,\n 0.183233,\n 1.13857,\n 0.938882,\n -0.11249,\n 0.150376,\n 1.17539,\n 0.952464,\n -0.0890706,\n 0.117177,\n 1.20924,\n 0.968529,\n -0.0646523,\n 0.0813095,\n 1.24055,\n 0.984763,\n -0.038606,\n 0.0439378,\n 1.27018,\n 1.00053,\n -0.01238,\n 598668e-8,\n 1.29873,\n 0.0437928,\n -409594e-11,\n 0.204012,\n 879224e-12,\n 0.0440166,\n -103395e-9,\n 0.205049,\n 221946e-10,\n 0.0440529,\n -413633e-9,\n 0.205225,\n 887981e-10,\n 0.0440493,\n -930594e-9,\n 0.2052,\n 199858e-9,\n 0.0439884,\n -165352e-8,\n 0.204901,\n 355495e-9,\n 0.0440716,\n -25849e-7,\n 0.205255,\n 556983e-9,\n 0.0440968,\n -372222e-8,\n 0.205311,\n 805326e-9,\n 0.0441359,\n -506478e-8,\n 0.205391,\n 110333e-8,\n 0.0442231,\n -660384e-8,\n 0.205638,\n 145768e-8,\n 0.0443254,\n -835246e-8,\n 0.205877,\n 187275e-8,\n 0.0444832,\n -0.0102992,\n 0.20627,\n 235938e-8,\n 0.0447001,\n -0.0124449,\n 0.206796,\n 29299e-7,\n 0.0450168,\n -0.0147935,\n 0.207593,\n 36005e-7,\n 0.0454816,\n -0.017336,\n 0.208819,\n 439246e-8,\n 0.0462446,\n -0.0201156,\n 0.211036,\n 533864e-8,\n 0.0473694,\n -0.0231568,\n 0.214388,\n 646984e-8,\n 0.0490191,\n -0.0264941,\n 0.219357,\n 783856e-8,\n 0.0512776,\n -0.030184,\n 0.226061,\n 950182e-8,\n 0.0541279,\n -0.0342661,\n 0.234094,\n 0.0115156,\n 0.0578989,\n -0.0388539,\n 0.244297,\n 0.0139687,\n 0.0620835,\n -0.0438735,\n 0.254457,\n 0.0169015,\n 0.0673497,\n -0.04951,\n 0.266706,\n 0.0204554,\n 0.0731759,\n -0.0556263,\n 0.278753,\n 0.0246606,\n 0.0803937,\n -0.0624585,\n 0.29309,\n 0.0297126,\n 0.0879287,\n -0.0697556,\n 0.305856,\n 0.0355868,\n 0.0970669,\n -0.0778795,\n 0.321059,\n 0.0425768,\n 0.106508,\n -0.0863541,\n 0.333873,\n 0.05056,\n 0.11776,\n -0.0955935,\n 0.349008,\n 0.0598972,\n 0.130081,\n -0.105438,\n 0.363776,\n 0.0706314,\n 0.144454,\n -0.115899,\n 0.380112,\n 0.0828822,\n 0.1596,\n -0.126827,\n 0.394843,\n 0.0967611,\n 0.176097,\n -0.138161,\n 0.409033,\n 0.112381,\n 0.194726,\n -0.149904,\n 0.424257,\n 0.129952,\n 0.213944,\n -0.161675,\n 0.436945,\n 0.149333,\n 0.235516,\n -0.173659,\n 0.450176,\n 0.170892,\n 0.260564,\n -0.185963,\n 0.466305,\n 0.194984,\n 0.285183,\n -0.197582,\n 0.477328,\n 0.220805,\n 0.311095,\n -0.208697,\n 0.486566,\n 0.248694,\n 0.338924,\n -0.219519,\n 0.494811,\n 0.279015,\n 0.369757,\n -0.229766,\n 0.504065,\n 0.311725,\n 0.3996,\n -0.238879,\n 0.507909,\n 0.345844,\n 0.430484,\n -0.246802,\n 0.509805,\n 0.381749,\n 0.46413,\n -0.253924,\n 0.511436,\n 0.420251,\n 0.497077,\n -0.259319,\n 0.508787,\n 0.459957,\n 0.530434,\n -0.263297,\n 0.50394,\n 0.501356,\n 0.565725,\n -0.265619,\n 0.49804,\n 0.544252,\n 0.599254,\n -0.265842,\n 0.487346,\n 0.587856,\n 0.631251,\n -0.263978,\n 0.472975,\n 0.631969,\n 0.663972,\n -0.26043,\n 0.457135,\n 0.677471,\n 0.697724,\n -0.255358,\n 0.439844,\n 0.723744,\n 0.727725,\n -0.248308,\n 0.417872,\n 0.770653,\n 0.756417,\n -0.239181,\n 0.39273,\n 0.817357,\n 0.785419,\n -0.22814,\n 0.367839,\n 0.864221,\n 0.81266,\n -0.215681,\n 0.339449,\n 0.912701,\n 0.839391,\n -0.201623,\n 0.309279,\n 0.962419,\n 0.86366,\n -0.185624,\n 0.278029,\n 1.0122,\n 0.885028,\n -0.16797,\n 0.245294,\n 1.06186,\n 0.904639,\n -0.148336,\n 0.212689,\n 1.10934,\n 0.922048,\n -0.12637,\n 0.179616,\n 1.15063,\n 0.936952,\n -0.102928,\n 0.146749,\n 1.18885,\n 0.951895,\n -0.0785268,\n 0.112733,\n 1.22352,\n 0.967198,\n -0.0530153,\n 0.0760056,\n 1.25681,\n 0.984405,\n -0.02649,\n 0.0383183,\n 1.28762,\n 1.00021,\n 70019e-8,\n -20039e-8,\n 1.31656,\n 0.0325964,\n -355447e-11,\n 0.176706,\n 655682e-12,\n 0.0329333,\n -899174e-10,\n 0.178527,\n 165869e-10,\n 0.0329181,\n -359637e-9,\n 0.178453,\n 663498e-10,\n 0.0329085,\n -808991e-9,\n 0.178383,\n 149332e-9,\n 0.0329181,\n -143826e-8,\n 0.178394,\n 265873e-9,\n 0.0329425,\n -224678e-8,\n 0.178517,\n 416597e-9,\n 0.0329511,\n -323575e-8,\n 0.17849,\n 603299e-9,\n 0.033011,\n -439875e-8,\n 0.178695,\n 829422e-9,\n 0.0330733,\n -574059e-8,\n 0.178843,\n 109908e-8,\n 0.0331857,\n -725896e-8,\n 0.179176,\n 141933e-8,\n 0.0333445,\n -895289e-8,\n 0.179618,\n 17999e-7,\n 0.0335674,\n -0.0108219,\n 0.180238,\n 225316e-8,\n 0.033939,\n -0.0128687,\n 0.181417,\n 279765e-8,\n 0.0345239,\n -0.015114,\n 0.183395,\n 34564e-7,\n 0.0354458,\n -0.017596,\n 0.186616,\n 425864e-8,\n 0.0368313,\n -0.0203524,\n 0.191547,\n 524936e-8,\n 0.0386115,\n -0.0234105,\n 0.197508,\n 647033e-8,\n 0.0410303,\n -0.0268509,\n 0.205395,\n 798121e-8,\n 0.0442245,\n -0.0307481,\n 0.215365,\n 98557e-7,\n 0.0478659,\n -0.0350863,\n 0.225595,\n 0.0121417,\n 0.0522416,\n -0.0399506,\n 0.236946,\n 0.0149385,\n 0.0574513,\n -0.045357,\n 0.249442,\n 0.0183189,\n 0.0631208,\n -0.0512863,\n 0.261222,\n 0.0223644,\n 0.0701124,\n -0.0579273,\n 0.275418,\n 0.0272418,\n 0.0777331,\n -0.0650652,\n 0.288989,\n 0.0329458,\n 0.0862709,\n -0.0728813,\n 0.302546,\n 0.0396819,\n 0.096103,\n -0.081363,\n 0.317164,\n 0.04757,\n 0.106976,\n -0.0904463,\n 0.331733,\n 0.0567012,\n 0.119175,\n -0.100105,\n 0.34661,\n 0.067202,\n 0.132919,\n -0.110375,\n 0.362249,\n 0.0792588,\n 0.147727,\n -0.121115,\n 0.376978,\n 0.0928672,\n 0.163618,\n -0.132299,\n 0.390681,\n 0.108228,\n 0.182234,\n -0.143887,\n 0.406571,\n 0.125502,\n 0.201809,\n -0.155827,\n 0.42042,\n 0.144836,\n 0.225041,\n -0.168357,\n 0.438411,\n 0.166706,\n 0.247621,\n -0.18004,\n 0.450368,\n 0.189909,\n 0.27097,\n -0.191536,\n 0.460083,\n 0.215251,\n 0.296658,\n -0.203024,\n 0.469765,\n 0.243164,\n 0.325892,\n -0.214056,\n 0.481837,\n 0.273388,\n 0.35406,\n -0.224104,\n 0.487474,\n 0.305344,\n 0.384372,\n -0.233489,\n 0.492773,\n 0.339741,\n 0.41749,\n -0.241874,\n 0.498451,\n 0.376287,\n 0.45013,\n -0.248834,\n 0.499632,\n 0.414195,\n 0.481285,\n -0.254658,\n 0.495233,\n 0.454077,\n 0.519183,\n -0.259367,\n 0.496401,\n 0.496352,\n 0.551544,\n -0.261818,\n 0.487686,\n 0.538798,\n 0.587349,\n -0.262964,\n 0.479453,\n 0.583626,\n 0.621679,\n -0.262128,\n 0.467709,\n 0.629451,\n 0.654991,\n -0.258998,\n 0.452123,\n 0.67566,\n 0.686873,\n -0.254119,\n 0.433495,\n 0.723248,\n 0.719801,\n -0.246946,\n 0.413657,\n 0.771156,\n 0.750355,\n -0.237709,\n 0.390366,\n 0.81989,\n 0.780033,\n -0.226549,\n 0.364947,\n 0.868601,\n 0.809254,\n -0.214186,\n 0.337256,\n 0.920034,\n 0.836576,\n -0.199639,\n 0.307395,\n 0.971706,\n 0.861774,\n -0.183169,\n 0.275431,\n 1.02479,\n 0.885707,\n -0.165111,\n 0.243431,\n 1.07837,\n 0.904742,\n -0.144363,\n 0.210921,\n 1.12783,\n 0.915604,\n -0.121305,\n 0.17647,\n 1.17254,\n 0.930959,\n -0.0962119,\n 0.143106,\n 1.21012,\n 0.948404,\n -0.069969,\n 0.108112,\n 1.24474,\n 0.967012,\n -0.0427586,\n 0.0708478,\n 1.27718,\n 0.984183,\n -0.0147043,\n 0.032335,\n 1.3083,\n 0.999577,\n 0.0142165,\n -726867e-8,\n 1.3382,\n 0.0229227,\n -299799e-11,\n 0.148623,\n 462391e-12,\n 0.0232194,\n -758796e-10,\n 0.15054,\n 117033e-10,\n 0.0232315,\n -303636e-9,\n 0.15063,\n 468397e-10,\n 0.0232354,\n -683189e-9,\n 0.150624,\n 105472e-9,\n 0.0232092,\n -12136e-7,\n 0.150445,\n 187744e-9,\n 0.0232523,\n -189765e-8,\n 0.150679,\n 294847e-9,\n 0.0232828,\n -273247e-8,\n 0.150789,\n 428013e-9,\n 0.0233371,\n -371287e-8,\n 0.150995,\n 591134e-9,\n 0.0234015,\n -484794e-8,\n 0.15118,\n 787642e-9,\n 0.023514,\n -612877e-8,\n 0.151562,\n 102547e-8,\n 0.023679,\n -756125e-8,\n 0.152116,\n 131351e-8,\n 0.0239559,\n -914651e-8,\n 0.153162,\n 166594e-8,\n 0.0244334,\n -0.010904,\n 0.155133,\n 210182e-8,\n 0.025139,\n -0.0128615,\n 0.158035,\n 264406e-8,\n 0.0262598,\n -0.0150628,\n 0.162751,\n 332923e-8,\n 0.0277875,\n -0.0175532,\n 0.168944,\n 419773e-8,\n 0.0298472,\n -0.0203981,\n 0.176835,\n 530034e-8,\n 0.0325444,\n -0.023655,\n 0.186686,\n 669777e-8,\n 0.0355581,\n -0.0272982,\n 0.196248,\n 842661e-8,\n 0.0392841,\n -0.0314457,\n 0.207352,\n 0.0105854,\n 0.0436815,\n -0.0361157,\n 0.219279,\n 0.0132458,\n 0.0485272,\n -0.0412932,\n 0.230728,\n 0.0164736,\n 0.0541574,\n -0.0470337,\n 0.242994,\n 0.0203715,\n 0.0609479,\n -0.0535002,\n 0.257042,\n 0.0250953,\n 0.0685228,\n -0.0605409,\n 0.27102,\n 0.0306856,\n 0.0768042,\n -0.0680553,\n 0.28406,\n 0.037193,\n 0.0864844,\n -0.0765011,\n 0.299186,\n 0.0449795,\n 0.0969415,\n -0.0852674,\n 0.3132,\n 0.0538316,\n 0.108478,\n -0.0947333,\n 0.327138,\n 0.0641149,\n 0.121705,\n -0.10481,\n 0.342345,\n 0.0759185,\n 0.136743,\n -0.115474,\n 0.358472,\n 0.0894116,\n 0.152986,\n -0.126536,\n 0.374067,\n 0.104562,\n 0.170397,\n -0.138061,\n 0.388267,\n 0.121632,\n 0.191392,\n -0.150203,\n 0.406467,\n 0.140996,\n 0.211566,\n -0.161751,\n 0.418641,\n 0.161696,\n 0.233567,\n -0.173407,\n 0.430418,\n 0.184557,\n 0.257769,\n -0.185397,\n 0.44277,\n 0.210092,\n 0.28531,\n -0.197048,\n 0.457191,\n 0.237827,\n 0.311726,\n -0.20784,\n 0.464712,\n 0.267253,\n 0.340537,\n -0.218345,\n 0.472539,\n 0.299332,\n 0.372921,\n -0.228306,\n 0.482331,\n 0.333988,\n 0.402924,\n -0.236665,\n 0.484378,\n 0.369722,\n 0.434475,\n -0.244097,\n 0.484717,\n 0.407836,\n 0.469736,\n -0.250547,\n 0.487093,\n 0.448465,\n 0.505045,\n -0.25511,\n 0.485575,\n 0.490263,\n 0.540262,\n -0.258444,\n 0.481225,\n 0.534495,\n 0.576347,\n -0.259903,\n 0.473481,\n 0.579451,\n 0.608656,\n -0.259572,\n 0.4603,\n 0.625604,\n 0.646679,\n -0.257908,\n 0.450341,\n 0.674511,\n 0.679902,\n -0.253663,\n 0.431561,\n 0.723269,\n 0.714159,\n -0.247419,\n 0.412684,\n 0.773263,\n 0.745345,\n -0.239122,\n 0.389388,\n 0.824182,\n 0.778248,\n -0.228837,\n 0.365361,\n 0.876634,\n 0.807208,\n -0.216197,\n 0.337667,\n 0.92945,\n 0.835019,\n -0.201772,\n 0.307197,\n 0.985261,\n 0.860261,\n -0.185291,\n 0.274205,\n 1.04299,\n 0.877601,\n -0.165809,\n 0.240178,\n 1.09816,\n 0.898211,\n -0.143897,\n 0.207571,\n 1.14694,\n 0.915789,\n -0.119513,\n 0.174904,\n 1.19008,\n 0.931831,\n -0.0932919,\n 0.141423,\n 1.2297,\n 0.949244,\n -0.0656528,\n 0.105603,\n 1.26553,\n 0.967527,\n -0.0370262,\n 0.0679551,\n 1.29986,\n 0.984139,\n -730117e-8,\n 0.0283133,\n 1.33252,\n 0.999713,\n 0.0234648,\n -0.0121785,\n 1.36397,\n 0.0152135,\n -245447e-11,\n 0.122795,\n 304092e-12,\n 0.0151652,\n -615778e-10,\n 0.122399,\n 76292e-10,\n 0.0151181,\n -245948e-9,\n 0.122023,\n 304802e-10,\n 0.0151203,\n -553394e-9,\n 0.12203,\n 686634e-10,\n 0.015125,\n -983841e-9,\n 0.122037,\n 122463e-9,\n 0.0151427,\n -153774e-8,\n 0.12214,\n 192706e-9,\n 0.0151708,\n -22103e-7,\n 0.122237,\n 281219e-9,\n 0.0152115,\n -300741e-8,\n 0.12238,\n 390804e-9,\n 0.0152877,\n -392494e-8,\n 0.1227,\n 526317e-9,\n 0.015412,\n -496597e-8,\n 0.123244,\n 69443e-8,\n 0.0156201,\n -613314e-8,\n 0.124228,\n 90547e-8,\n 0.0159658,\n -744113e-8,\n 0.125945,\n 11732e-7,\n 0.0165674,\n -892546e-8,\n 0.129098,\n 151888e-8,\n 0.017487,\n -0.010627,\n 0.133865,\n 197007e-8,\n 0.018839,\n -0.0126043,\n 0.140682,\n 25637e-7,\n 0.020554,\n -0.0148814,\n 0.148534,\n 333637e-8,\n 0.0226727,\n -0.0175123,\n 0.157381,\n 433738e-8,\n 0.0251879,\n -0.0205266,\n 0.166685,\n 561664e-8,\n 0.0283635,\n -0.0240319,\n 0.177796,\n 725563e-8,\n 0.0318694,\n -0.0279432,\n 0.188251,\n 928811e-8,\n 0.0361044,\n -0.0324313,\n 0.200038,\n 0.011835,\n 0.0406656,\n -0.0373527,\n 0.210685,\n 0.0149146,\n 0.0463846,\n -0.0430132,\n 0.224182,\n 0.0187254,\n 0.0525696,\n -0.0491013,\n 0.23634,\n 0.0232283,\n 0.0598083,\n -0.0559175,\n 0.250013,\n 0.0286521,\n 0.0679437,\n -0.0633657,\n 0.263981,\n 0.0350634,\n 0.0771181,\n -0.0714602,\n 0.278072,\n 0.0425882,\n 0.0881273,\n -0.0803502,\n 0.29511,\n 0.0514487,\n 0.0996628,\n -0.0896903,\n 0.309976,\n 0.0615766,\n 0.112702,\n -0.099644,\n 0.325611,\n 0.0732139,\n 0.126488,\n -0.109829,\n 0.339321,\n 0.0862324,\n 0.142625,\n -0.120859,\n 0.35574,\n 0.101275,\n 0.15953,\n -0.131956,\n 0.369845,\n 0.117892,\n 0.176991,\n -0.143145,\n 0.38146,\n 0.136205,\n 0.199715,\n -0.155292,\n 0.40052,\n 0.157252,\n 0.220787,\n -0.167066,\n 0.412055,\n 0.179966,\n 0.243697,\n -0.178396,\n 0.423133,\n 0.204418,\n 0.272106,\n -0.190433,\n 0.439524,\n 0.232141,\n 0.297637,\n -0.201265,\n 0.447041,\n 0.261109,\n 0.325273,\n -0.211834,\n 0.454488,\n 0.292627,\n 0.357219,\n -0.221889,\n 0.465004,\n 0.326669,\n 0.387362,\n -0.230729,\n 0.468527,\n 0.362426,\n 0.423131,\n -0.23924,\n 0.475836,\n 0.401533,\n 0.45543,\n -0.246067,\n 0.475017,\n 0.441902,\n 0.493393,\n -0.251557,\n 0.478017,\n 0.484239,\n 0.526253,\n -0.255571,\n 0.4709,\n 0.528586,\n 0.560554,\n -0.257752,\n 0.463167,\n 0.574346,\n 0.599306,\n -0.258076,\n 0.456452,\n 0.621655,\n 0.634541,\n -0.256471,\n 0.443725,\n 0.670492,\n 0.668907,\n -0.253283,\n 0.428719,\n 0.721943,\n 0.705619,\n -0.247562,\n 0.411348,\n 0.772477,\n 0.739034,\n -0.240626,\n 0.388939,\n 0.8264,\n 0.771408,\n -0.231493,\n 0.36425,\n 0.881702,\n 0.803312,\n -0.220125,\n 0.337321,\n 0.9385,\n 0.828457,\n -0.206645,\n 0.305364,\n 0.997437,\n 0.854819,\n -0.190664,\n 0.273715,\n 1.05693,\n 0.878666,\n -0.171429,\n 0.242218,\n 1.11251,\n 0.898404,\n -0.149235,\n 0.209556,\n 1.16398,\n 0.917416,\n -0.12435,\n 0.176863,\n 1.21014,\n 0.933133,\n -0.0972703,\n 0.142775,\n 1.25178,\n 0.95066,\n -0.0683607,\n 0.106735,\n 1.29028,\n 0.968589,\n -0.0378724,\n 0.0681609,\n 1.32703,\n 0.984776,\n -605712e-8,\n 0.0273966,\n 1.36158,\n 0.99994,\n 0.0263276,\n -0.0138124,\n 1.3943,\n 867437e-8,\n -186005e-11,\n 0.0928979,\n 173682e-12,\n 864003e-8,\n -466389e-10,\n 0.0925237,\n 435505e-11,\n 864593e-8,\n -186594e-9,\n 0.0925806,\n 174322e-10,\n 864095e-8,\n -419639e-9,\n 0.0924903,\n 392862e-10,\n 863851e-8,\n -746272e-9,\n 0.0924589,\n 702598e-10,\n 868531e-8,\n -116456e-8,\n 0.0929,\n 111188e-9,\n 869667e-8,\n -167711e-8,\n 0.0928529,\n 163867e-9,\n 874332e-8,\n -228051e-8,\n 0.0930914,\n 23104e-8,\n 882709e-8,\n -297864e-8,\n 0.0935679,\n 31741e-8,\n 898874e-8,\n -377557e-8,\n 0.0946165,\n 430186e-9,\n 929346e-8,\n -469247e-8,\n 0.0967406,\n 580383e-9,\n 978271e-8,\n -575491e-8,\n 0.100084,\n 783529e-9,\n 0.0105746,\n -701514e-8,\n 0.105447,\n 106304e-8,\n 0.0116949,\n -851797e-8,\n 0.112494,\n 144685e-8,\n 0.0130419,\n -0.0102757,\n 0.119876,\n 196439e-8,\n 0.0148375,\n -0.012381,\n 0.129034,\n 266433e-8,\n 0.0168725,\n -0.01482,\n 0.137812,\n 358364e-8,\n 0.0193689,\n -0.0176563,\n 0.147696,\n 478132e-8,\n 0.0222691,\n -0.0209211,\n 0.157795,\n 631721e-8,\n 0.0256891,\n -0.0246655,\n 0.168431,\n 826346e-8,\n 0.0294686,\n -0.0288597,\n 0.178587,\n 0.0106714,\n 0.0340412,\n -0.0336441,\n 0.190251,\n 0.0136629,\n 0.0393918,\n -0.039033,\n 0.202999,\n 0.0173272,\n 0.0453947,\n -0.0450087,\n 0.215655,\n 0.0217448,\n 0.0521936,\n -0.0515461,\n 0.228686,\n 0.0269941,\n 0.0600279,\n -0.058817,\n 0.242838,\n 0.033272,\n 0.0692398,\n -0.0667228,\n 0.258145,\n 0.0406457,\n 0.0793832,\n -0.0752401,\n 0.273565,\n 0.0492239,\n 0.0902297,\n -0.0841851,\n 0.287735,\n 0.0590105,\n 0.102014,\n -0.0936479,\n 0.301161,\n 0.0702021,\n 0.116054,\n -0.103967,\n 0.317438,\n 0.0832001,\n 0.13191,\n -0.114622,\n 0.334166,\n 0.0977951,\n 0.148239,\n -0.125452,\n 0.348192,\n 0.113985,\n 0.165809,\n -0.136453,\n 0.361094,\n 0.131928,\n 0.184616,\n -0.147648,\n 0.373534,\n 0.151811,\n 0.207491,\n -0.159607,\n 0.39101,\n 0.174476,\n 0.230106,\n -0.171119,\n 0.402504,\n 0.198798,\n 0.257036,\n -0.182906,\n 0.418032,\n 0.225796,\n 0.281172,\n -0.193605,\n 0.425468,\n 0.254027,\n 0.312034,\n -0.204771,\n 0.440379,\n 0.285713,\n 0.340402,\n -0.214988,\n 0.445406,\n 0.319196,\n 0.370231,\n -0.224711,\n 0.44968,\n 0.35537,\n 0.407105,\n -0.233516,\n 0.460747,\n 0.393838,\n 0.439037,\n -0.240801,\n 0.460624,\n 0.433747,\n 0.47781,\n -0.24762,\n 0.465957,\n 0.477234,\n 0.510655,\n -0.251823,\n 0.460054,\n 0.52044,\n 0.550584,\n -0.255552,\n 0.459172,\n 0.567853,\n 0.585872,\n -0.257036,\n 0.450311,\n 0.615943,\n 0.620466,\n -0.257535,\n 0.437763,\n 0.667693,\n 0.660496,\n -0.255248,\n 0.426639,\n 0.718988,\n 0.695578,\n -0.251141,\n 0.409185,\n 0.772503,\n 0.732176,\n -0.244718,\n 0.39015,\n 0.827023,\n 0.760782,\n -0.236782,\n 0.362594,\n 0.885651,\n 0.79422,\n -0.225923,\n 0.33711,\n 0.943756,\n 0.824521,\n -0.213855,\n 0.308272,\n 1.00874,\n 0.854964,\n -0.197723,\n 0.278529,\n 1.06764,\n 0.878065,\n -0.179209,\n 0.246208,\n 1.12836,\n 0.899834,\n -0.157569,\n 0.21329,\n 1.18318,\n 0.918815,\n -0.133206,\n 0.181038,\n 1.23161,\n 0.934934,\n -0.106545,\n 0.146993,\n 1.27644,\n 0.952115,\n -0.0780574,\n 0.111175,\n 1.31842,\n 0.96906,\n -0.0478279,\n 0.0728553,\n 1.35839,\n 0.985178,\n -0.0160014,\n 0.032579,\n 1.39697,\n 1.00039,\n 0.0173126,\n -95256e-7,\n 1.43312,\n 384146e-8,\n -124311e-11,\n 0.0613583,\n 778271e-13,\n 390023e-8,\n -314043e-10,\n 0.0622919,\n 196626e-11,\n 389971e-8,\n -125622e-9,\n 0.0622632,\n 787379e-11,\n 389491e-8,\n -282352e-9,\n 0.0620659,\n 1778e-8,\n 391618e-8,\n -502512e-9,\n 0.0624687,\n 320918e-10,\n 392662e-8,\n -784458e-9,\n 0.0625113,\n 515573e-10,\n 396053e-8,\n -112907e-8,\n 0.0628175,\n 778668e-10,\n 401911e-8,\n -153821e-8,\n 0.0633286,\n 113811e-9,\n 414994e-8,\n -20208e-7,\n 0.0646443,\n 16445e-8,\n 441223e-8,\n -260007e-8,\n 0.0673886,\n 237734e-9,\n 484427e-8,\n -33097e-7,\n 0.0716528,\n 345929e-9,\n 549109e-8,\n -418966e-8,\n 0.0774998,\n 505987e-9,\n 636293e-8,\n -527331e-8,\n 0.0844758,\n 739208e-9,\n 746566e-8,\n -660428e-8,\n 0.0921325,\n 107347e-8,\n 876625e-8,\n -818826e-8,\n 0.0997067,\n 153691e-8,\n 0.0103125,\n -0.0100811,\n 0.107433,\n 217153e-8,\n 0.0123309,\n -0.0123643,\n 0.117088,\n 303427e-8,\n 0.0146274,\n -0.0150007,\n 0.126438,\n 416018e-8,\n 0.0172295,\n -0.0180531,\n 0.135672,\n 561513e-8,\n 0.0204248,\n -0.0215962,\n 0.146244,\n 7478e-6,\n 0.0241597,\n -0.0256234,\n 0.157481,\n 981046e-8,\n 0.0284693,\n -0.0302209,\n 0.169125,\n 0.0127148,\n 0.033445,\n -0.0353333,\n 0.181659,\n 0.0162453,\n 0.0391251,\n -0.0410845,\n 0.1944,\n 0.0205417,\n 0.0454721,\n -0.0473451,\n 0.207082,\n 0.0256333,\n 0.0530983,\n -0.0542858,\n 0.221656,\n 0.0317036,\n 0.0615356,\n -0.0618384,\n 0.236036,\n 0.0388319,\n 0.0703363,\n -0.0697631,\n 0.248398,\n 0.046974,\n 0.0810391,\n -0.0784757,\n 0.263611,\n 0.0565246,\n 0.0920144,\n -0.0873488,\n 0.275857,\n 0.0671724,\n 0.105584,\n -0.0973652,\n 0.292555,\n 0.0798105,\n 0.119506,\n -0.107271,\n 0.306333,\n 0.0935945,\n 0.134434,\n -0.117608,\n 0.318888,\n 0.109106,\n 0.153399,\n -0.128938,\n 0.337552,\n 0.127074,\n 0.171258,\n -0.139944,\n 0.349955,\n 0.14643,\n 0.191059,\n -0.151288,\n 0.361545,\n 0.168,\n 0.215069,\n -0.163018,\n 0.378421,\n 0.192082,\n 0.237838,\n -0.174226,\n 0.38879,\n 0.217838,\n 0.266965,\n -0.186063,\n 0.405857,\n 0.246931,\n 0.292827,\n -0.196909,\n 0.414146,\n 0.277505,\n 0.324352,\n -0.207473,\n 0.426955,\n 0.310711,\n 0.354427,\n -0.217713,\n 0.433429,\n 0.346794,\n 0.389854,\n -0.227183,\n 0.443966,\n 0.385237,\n 0.420749,\n -0.235131,\n 0.44471,\n 0.424955,\n 0.459597,\n -0.242786,\n 0.451729,\n 0.468446,\n 0.495316,\n -0.248767,\n 0.45072,\n 0.513422,\n 0.534903,\n -0.253351,\n 0.450924,\n 0.560618,\n 0.572369,\n -0.256277,\n 0.445266,\n 0.609677,\n 0.612383,\n -0.2576,\n 0.438798,\n 0.660995,\n 0.644037,\n -0.256931,\n 0.421693,\n 0.713807,\n 0.686749,\n -0.254036,\n 0.4109,\n 0.767616,\n 0.719814,\n -0.249785,\n 0.390151,\n 0.82533,\n 0.754719,\n -0.244283,\n 0.367847,\n 0.888311,\n 0.792022,\n -0.235076,\n 0.345013,\n 0.948177,\n 0.822404,\n -0.225061,\n 0.316193,\n 1.01661,\n 0.853084,\n -0.211113,\n 0.287013,\n 1.08075,\n 0.879871,\n -0.19449,\n 0.255424,\n 1.14501,\n 0.901655,\n -0.174023,\n 0.222879,\n 1.20203,\n 0.919957,\n -0.1509,\n 0.18989,\n 1.25698,\n 0.938412,\n -0.124923,\n 0.15606,\n 1.30588,\n 0.953471,\n -0.0968139,\n 0.120512,\n 1.3529,\n 0.970451,\n -0.066734,\n 0.0828515,\n 1.3986,\n 0.985522,\n -0.034734,\n 0.0424458,\n 1.44148,\n 1.00099,\n -102222e-8,\n 678929e-9,\n 1.48398,\n 965494e-9,\n -627338e-12,\n 0.0306409,\n 197672e-13,\n 99168e-8,\n -158573e-10,\n 0.0314638,\n 499803e-12,\n 991068e-9,\n -634012e-10,\n 0.031363,\n 200682e-11,\n 974567e-9,\n -14144e-8,\n 0.03036,\n 457312e-11,\n 998079e-9,\n -252812e-9,\n 0.031496,\n 860131e-11,\n 102243e-8,\n -396506e-9,\n 0.0319955,\n 148288e-10,\n 107877e-8,\n -577593e-9,\n 0.0331376,\n 249141e-10,\n 121622e-8,\n -816816e-9,\n 0.0359396,\n 423011e-10,\n 14455e-7,\n -113761e-8,\n 0.0399652,\n 724613e-10,\n 178791e-8,\n -156959e-8,\n 0.0450556,\n 123929e-9,\n 225668e-8,\n -214064e-8,\n 0.0508025,\n 208531e-9,\n 285627e-8,\n -287655e-8,\n 0.0568443,\n 341969e-9,\n 35991e-7,\n -380271e-8,\n 0.0630892,\n 544158e-9,\n 455524e-8,\n -496264e-8,\n 0.0702204,\n 842423e-9,\n 569143e-8,\n -63793e-7,\n 0.0773426,\n 126704e-8,\n 716928e-8,\n -813531e-8,\n 0.0860839,\n 186642e-8,\n 885307e-8,\n -0.0101946,\n 0.0944079,\n 267014e-8,\n 0.0109316,\n -0.0126386,\n 0.103951,\n 374033e-8,\n 0.0133704,\n -0.0154876,\n 0.113786,\n 51304e-7,\n 0.0161525,\n -0.0187317,\n 0.123477,\n 688858e-8,\n 0.0194267,\n -0.0224652,\n 0.133986,\n 910557e-8,\n 0.0230967,\n -0.0265976,\n 0.143979,\n 0.0118074,\n 0.0273627,\n -0.0312848,\n 0.154645,\n 0.0151266,\n 0.0323898,\n -0.0365949,\n 0.166765,\n 0.0191791,\n 0.0379225,\n -0.0422914,\n 0.177932,\n 0.0239236,\n 0.0447501,\n -0.0487469,\n 0.19167,\n 0.0296568,\n 0.0519391,\n -0.0556398,\n 0.203224,\n 0.0362924,\n 0.0599464,\n -0.0631646,\n 0.215652,\n 0.0440585,\n 0.0702427,\n -0.0714308,\n 0.232089,\n 0.0531619,\n 0.0806902,\n -0.0800605,\n 0.245258,\n 0.0634564,\n 0.0923194,\n -0.0892815,\n 0.258609,\n 0.0752481,\n 0.106938,\n -0.09931,\n 0.276654,\n 0.0888914,\n 0.121238,\n -0.109575,\n 0.289847,\n 0.104055,\n 0.138817,\n -0.120461,\n 0.307566,\n 0.121266,\n 0.15595,\n -0.131209,\n 0.320117,\n 0.139944,\n 0.178418,\n -0.143049,\n 0.339677,\n 0.161591,\n 0.197875,\n -0.154074,\n 0.349886,\n 0.184303,\n 0.224368,\n -0.166307,\n 0.369352,\n 0.210669,\n 0.252213,\n -0.178051,\n 0.386242,\n 0.238895,\n 0.277321,\n -0.189335,\n 0.395294,\n 0.269182,\n 0.310332,\n -0.200683,\n 0.412148,\n 0.302508,\n 0.338809,\n -0.210856,\n 0.418266,\n 0.337264,\n 0.372678,\n -0.220655,\n 0.428723,\n 0.374881,\n 0.405632,\n -0.230053,\n 0.433887,\n 0.415656,\n 0.442293,\n -0.237993,\n 0.439911,\n 0.457982,\n 0.477256,\n -0.244897,\n 0.440175,\n 0.502831,\n 0.515592,\n -0.250657,\n 0.441079,\n 0.550277,\n 0.550969,\n -0.255459,\n 0.435219,\n 0.601102,\n 0.592883,\n -0.257696,\n 0.432882,\n 0.651785,\n 0.629092,\n -0.259894,\n 0.421054,\n 0.708961,\n 0.672033,\n -0.258592,\n 0.41177,\n 0.763806,\n 0.709147,\n -0.256525,\n 0.395267,\n 0.824249,\n 0.745367,\n -0.254677,\n 0.375013,\n 0.8951,\n 0.784715,\n -0.247892,\n 0.353906,\n 0.959317,\n 0.818107,\n -0.240162,\n 0.327801,\n 1.03153,\n 0.847895,\n -0.229741,\n 0.298821,\n 1.10601,\n 0.879603,\n -0.213084,\n 0.269115,\n 1.164,\n 0.902605,\n -0.195242,\n 0.236606,\n 1.22854,\n 0.922788,\n -0.174505,\n 0.203442,\n 1.29017,\n 0.944831,\n -0.150169,\n 0.169594,\n 1.34157,\n 0.959656,\n -0.124099,\n 0.135909,\n 1.3956,\n 0.972399,\n -0.0960626,\n 0.0990563,\n 1.45128,\n 0.986549,\n -0.0657097,\n 0.0602348,\n 1.50312,\n 1.00013,\n -0.0333558,\n 0.0186694,\n 1.55364,\n 619747e-11,\n -1e-7,\n 778326e-8,\n 796756e-16,\n 237499e-13,\n -999999e-13,\n 282592e-10,\n 114596e-15,\n 100292e-11,\n -166369e-11,\n 250354e-9,\n 677492e-14,\n 350752e-11,\n -637769e-11,\n 357289e-9,\n 631655e-13,\n 826445e-11,\n -174689e-10,\n 516179e-9,\n 31851e-11,\n 242481e-10,\n -450868e-10,\n 10223e-7,\n 130577e-11,\n 455631e-10,\n -89044e-9,\n 144302e-8,\n 374587e-11,\n 971222e-10,\n -178311e-9,\n 241912e-8,\n 102584e-10,\n 171403e-9,\n -313976e-9,\n 354938e-8,\n 236481e-10,\n 292747e-9,\n -520026e-9,\n 513765e-8,\n 496014e-10,\n 789827e-9,\n -118187e-8,\n 0.0238621,\n 139056e-9,\n 114093e-8,\n -171827e-8,\n 0.0286691,\n 244093e-9,\n 176119e-8,\n -249667e-8,\n 0.0368565,\n 420623e-9,\n 22233e-7,\n -333742e-8,\n 0.0400469,\n 65673e-8,\n 343382e-8,\n -481976e-8,\n 0.0535751,\n 109323e-8,\n 427602e-8,\n -600755e-8,\n 0.057099,\n 155268e-8,\n 461435e-8,\n -737637e-8,\n 0.0551084,\n 215031e-8,\n 695698e-8,\n -971401e-8,\n 0.0715767,\n 316529e-8,\n 867619e-8,\n -0.0120943,\n 0.0793314,\n 436995e-8,\n 0.0106694,\n -0.0148202,\n 0.0869391,\n 58959e-7,\n 0.0140351,\n -0.0183501,\n 0.101572,\n 798757e-8,\n 0.0168939,\n -0.022006,\n 0.11018,\n 0.0104233,\n 0.020197,\n -0.0261568,\n 0.119041,\n 0.0134167,\n 0.0254702,\n -0.0312778,\n 0.135404,\n 0.0173009,\n 0.0298384,\n -0.0362469,\n 0.1437,\n 0.0215428,\n 0.035159,\n -0.042237,\n 0.15512,\n 0.0268882,\n 0.0427685,\n -0.0488711,\n 0.17128,\n 0.033235,\n 0.0494848,\n -0.0557997,\n 0.181813,\n 0.0404443,\n 0.0592394,\n -0.0635578,\n 0.198745,\n 0.0490043,\n 0.0681463,\n -0.071838,\n 0.210497,\n 0.0588239,\n 0.0804753,\n -0.0809297,\n 0.228864,\n 0.0702835,\n 0.0942205,\n -0.0906488,\n 0.247008,\n 0.0834012,\n 0.106777,\n -0.100216,\n 0.258812,\n 0.0975952,\n 0.124471,\n -0.110827,\n 0.278617,\n 0.114162,\n 0.138389,\n -0.121193,\n 0.287049,\n 0.131983,\n 0.159543,\n -0.13253,\n 0.307151,\n 0.152541,\n 0.176432,\n -0.143611,\n 0.31564,\n 0.174673,\n 0.201723,\n -0.15548,\n 0.33538,\n 0.199842,\n 0.229721,\n -0.167166,\n 0.355256,\n 0.227097,\n 0.250206,\n -0.178238,\n 0.360047,\n 0.256014,\n 0.282118,\n -0.189905,\n 0.378761,\n 0.28855,\n 0.312821,\n -0.201033,\n 0.39181,\n 0.323348,\n 0.341482,\n -0.211584,\n 0.397716,\n 0.360564,\n 0.377368,\n -0.221314,\n 0.410141,\n 0.400004,\n 0.418229,\n -0.230474,\n 0.423485,\n 0.442371,\n 0.444881,\n -0.239443,\n 0.418874,\n 0.488796,\n 0.488899,\n -0.245987,\n 0.427545,\n 0.535012,\n 0.520317,\n -0.253948,\n 0.422147,\n 0.589678,\n 0.568566,\n -0.256616,\n 0.42719,\n 0.637683,\n 0.599607,\n -0.26376,\n 0.415114,\n 0.703363,\n 0.64222,\n -0.268687,\n 0.408715,\n 0.771363,\n 0.685698,\n -0.2694,\n 0.399722,\n 0.83574,\n 0.732327,\n -0.266642,\n 0.388651,\n 0.897764,\n 0.769873,\n -0.267712,\n 0.369198,\n 0.983312,\n 0.806733,\n -0.263479,\n 0.346802,\n 1.06222,\n 0.843466,\n -0.254575,\n 0.321368,\n 1.13477,\n 0.873008,\n -0.242749,\n 0.29211,\n 1.20712,\n 0.908438,\n -0.22725,\n 0.262143,\n 1.27465,\n 0.936321,\n -0.207621,\n 0.228876,\n 1.33203,\n 0.950353,\n -0.187932,\n 0.19484,\n 1.40439,\n 0.96442,\n -0.165154,\n 0.163178,\n 1.4732,\n 0.979856,\n -0.139302,\n 0.127531,\n 1.53574,\n 0.982561,\n -0.11134,\n 0.0903457,\n 1.59982,\n 0.996389,\n -0.0808124,\n 0.0489007,\n 1.6577\n ];\n const LTC_MAT_2 = [\n 1,\n 0,\n 0,\n 0,\n 1,\n 791421e-36,\n 0,\n 0,\n 1,\n 104392e-29,\n 0,\n 0,\n 1,\n 349405e-26,\n 0,\n 0,\n 1,\n 109923e-23,\n 0,\n 0,\n 1,\n 947414e-22,\n 0,\n 0,\n 1,\n 359627e-20,\n 0,\n 0,\n 1,\n 772053e-19,\n 0,\n 0,\n 1,\n 108799e-17,\n 0,\n 0,\n 1,\n 110655e-16,\n 0,\n 0,\n 1,\n 865818e-16,\n 0,\n 0,\n 0.999998,\n 545037e-15,\n 0,\n 0,\n 0.999994,\n 285095e-14,\n 0,\n 0,\n 0.999989,\n 126931e-13,\n 0,\n 0,\n 0.999973,\n 489938e-13,\n 0,\n 0,\n 0.999947,\n 166347e-12,\n 0,\n 0,\n 0.999894,\n 502694e-12,\n 0,\n 0,\n 0.999798,\n 136532e-11,\n 0,\n 0,\n 0.999617,\n 335898e-11,\n 0,\n 0,\n 0.999234,\n 752126e-11,\n 0,\n 0,\n 0.998258,\n 152586e-10,\n 0,\n 0,\n 0.99504,\n 266207e-10,\n 0,\n 0,\n 0.980816,\n 236802e-10,\n 0,\n 0,\n 0.967553,\n 207684e-11,\n 0,\n 0,\n 0.966877,\n 403733e-11,\n 0,\n 0,\n 0.965752,\n 741174e-11,\n 0,\n 0,\n 0.96382,\n 127746e-10,\n 0,\n 0,\n 0.960306,\n 202792e-10,\n 0,\n 0,\n 0.953619,\n 280232e-10,\n 0,\n 0,\n 0.941103,\n 278816e-10,\n 0,\n 0,\n 0.926619,\n 160221e-10,\n 0,\n 0,\n 0.920983,\n 235164e-10,\n 0,\n 0,\n 0.912293,\n 311924e-10,\n 0,\n 0.0158731,\n 0.899277,\n 348118e-10,\n 0,\n 0.0476191,\n 0.880884,\n 26041e-9,\n 0,\n 0.0793651,\n 0.870399,\n 338726e-10,\n 0,\n 0.111111,\n 0.856138,\n 392906e-10,\n 0,\n 0.142857,\n 0.837436,\n 372874e-10,\n 0,\n 0.174603,\n 0.820973,\n 392558e-10,\n 0,\n 0.206349,\n 0.803583,\n 434658e-10,\n 0,\n 0.238095,\n 0.782168,\n 40256e-9,\n 0,\n 0.269841,\n 0.764107,\n 448159e-10,\n 0,\n 0.301587,\n 0.743092,\n 457627e-10,\n 0,\n 0.333333,\n 0.721626,\n 455314e-10,\n 0,\n 0.365079,\n 0.700375,\n 477335e-10,\n 0,\n 0.396825,\n 0.677334,\n 461072e-10,\n 0,\n 0.428571,\n 0.655702,\n 484393e-10,\n 0,\n 0.460317,\n 0.632059,\n 464583e-10,\n 0,\n 0.492064,\n 0.610125,\n 483923e-10,\n 0,\n 0.52381,\n 0.58653,\n 464342e-10,\n 0,\n 0.555556,\n 0.564508,\n 477033e-10,\n 0,\n 0.587302,\n 0.541405,\n 459263e-10,\n 0,\n 0.619048,\n 0.519556,\n 46412e-9,\n 0,\n 0.650794,\n 0.497292,\n 448913e-10,\n 0,\n 0.68254,\n 0.475898,\n 445789e-10,\n 0,\n 0.714286,\n 0.454722,\n 433496e-10,\n 0,\n 0.746032,\n 0.434042,\n 423054e-10,\n 0,\n 0.777778,\n 0.414126,\n 413737e-10,\n 0,\n 0.809524,\n 0.394387,\n 397265e-10,\n 0,\n 0.84127,\n 0.375841,\n 390709e-10,\n 0,\n 0.873016,\n 0.357219,\n 369938e-10,\n 0,\n 0.904762,\n 0.340084,\n 365618e-10,\n 0,\n 0.936508,\n 0.322714,\n 342533e-10,\n 0,\n 0.968254,\n 0.306974,\n 339596e-10,\n 0,\n 1,\n 1,\n 101524e-23,\n 0,\n 0,\n 1,\n 10292e-22,\n 0,\n 0,\n 1,\n 130908e-23,\n 0,\n 0,\n 1,\n 473331e-23,\n 0,\n 0,\n 1,\n 625319e-22,\n 0,\n 0,\n 1,\n 107932e-20,\n 0,\n 0,\n 1,\n 163779e-19,\n 0,\n 0,\n 1,\n 203198e-18,\n 0,\n 0,\n 1,\n 204717e-17,\n 0,\n 0,\n 0.999999,\n 168995e-16,\n 0,\n 0,\n 0.999998,\n 115855e-15,\n 0,\n 0,\n 0.999996,\n 66947e-14,\n 0,\n 0,\n 0.999991,\n 330863e-14,\n 0,\n 0,\n 0.999983,\n 141737e-13,\n 0,\n 0,\n 0.999968,\n 532626e-13,\n 0,\n 0,\n 0.99994,\n 177431e-12,\n 0,\n 0,\n 0.999891,\n 528835e-12,\n 0,\n 0,\n 0.999797,\n 142169e-11,\n 0,\n 0,\n 0.999617,\n 347057e-11,\n 0,\n 0,\n 0.999227,\n 77231e-10,\n 0,\n 0,\n 0.998239,\n 155753e-10,\n 0,\n 0,\n 0.994937,\n 268495e-10,\n 0,\n 0,\n 0.980225,\n 213742e-10,\n 0,\n 0,\n 0.967549,\n 21631e-10,\n 0,\n 0,\n 0.966865,\n 417989e-11,\n 0,\n 0,\n 0.965739,\n 763341e-11,\n 0,\n 0,\n 0.963794,\n 130892e-10,\n 0,\n 0,\n 0.960244,\n 206456e-10,\n 0,\n 0,\n 0.953495,\n 282016e-10,\n 0,\n 148105e-9,\n 0.940876,\n 271581e-10,\n 0,\n 2454e-6,\n 0.926569,\n 164159e-10,\n 0,\n 867491e-8,\n 0.920905,\n 239521e-10,\n 0,\n 0.01956,\n 0.912169,\n 315127e-10,\n 0,\n 0.035433,\n 0.899095,\n 346626e-10,\n 0,\n 0.056294,\n 0.882209,\n 290223e-10,\n 0,\n 0.0818191,\n 0.870272,\n 342992e-10,\n 0,\n 0.111259,\n 0.855977,\n 394164e-10,\n 0,\n 0.142857,\n 0.837431,\n 372343e-10,\n 0,\n 0.174603,\n 0.820826,\n 396691e-10,\n 0,\n 0.206349,\n 0.803408,\n 435395e-10,\n 0,\n 0.238095,\n 0.782838,\n 419579e-10,\n 0,\n 0.269841,\n 0.763941,\n 450953e-10,\n 0,\n 0.301587,\n 0.742904,\n 455847e-10,\n 0,\n 0.333333,\n 0.721463,\n 458833e-10,\n 0,\n 0.365079,\n 0.700197,\n 477159e-10,\n 0,\n 0.396825,\n 0.677501,\n 470641e-10,\n 0,\n 0.428571,\n 0.655527,\n 484732e-10,\n 0,\n 0.460317,\n 0.6324,\n 476834e-10,\n 0,\n 0.492064,\n 0.609964,\n 484213e-10,\n 0,\n 0.52381,\n 0.586839,\n 475541e-10,\n 0,\n 0.555556,\n 0.564353,\n 476951e-10,\n 0,\n 0.587302,\n 0.541589,\n 467611e-10,\n 0,\n 0.619048,\n 0.519413,\n 463493e-10,\n 0,\n 0.650794,\n 0.497337,\n 453994e-10,\n 0,\n 0.68254,\n 0.475797,\n 445308e-10,\n 0,\n 0.714286,\n 0.454659,\n 435787e-10,\n 0,\n 0.746032,\n 0.434065,\n 424839e-10,\n 0,\n 0.777778,\n 0.414018,\n 41436e-9,\n 0,\n 0.809524,\n 0.39455,\n 401902e-10,\n 0,\n 0.84127,\n 0.375742,\n 390813e-10,\n 0,\n 0.873016,\n 0.357501,\n 377116e-10,\n 0,\n 0.904762,\n 0.339996,\n 36535e-9,\n 0,\n 0.936508,\n 0.323069,\n 351265e-10,\n 0,\n 0.968254,\n 0.306897,\n 339112e-10,\n 0,\n 1,\n 1,\n 10396e-19,\n 0,\n 0,\n 1,\n 104326e-20,\n 0,\n 0,\n 1,\n 110153e-20,\n 0,\n 0,\n 1,\n 144668e-20,\n 0,\n 0,\n 1,\n 34528e-19,\n 0,\n 0,\n 1,\n 175958e-19,\n 0,\n 0,\n 1,\n 12627e-17,\n 0,\n 0,\n 1,\n 936074e-18,\n 0,\n 0,\n 1,\n 645742e-17,\n 0,\n 0,\n 0.999998,\n 401228e-16,\n 0,\n 0,\n 0.999997,\n 222338e-15,\n 0,\n 0,\n 0.999995,\n 10967e-13,\n 0,\n 0,\n 0.999991,\n 482132e-14,\n 0,\n 0,\n 0.999981,\n 189434e-13,\n 0,\n 0,\n 0.999967,\n 667716e-13,\n 0,\n 0,\n 0.999938,\n 212066e-12,\n 0,\n 0,\n 0.999886,\n 60977e-11,\n 0,\n 0,\n 0.999792,\n 159504e-11,\n 0,\n 0,\n 0.999608,\n 381191e-11,\n 0,\n 0,\n 0.999209,\n 833727e-11,\n 0,\n 0,\n 0.998179,\n 165288e-10,\n 0,\n 0,\n 0.994605,\n 274387e-10,\n 0,\n 0,\n 0.979468,\n 167316e-10,\n 0,\n 0,\n 0.967529,\n 242877e-11,\n 0,\n 0,\n 0.966836,\n 461696e-11,\n 0,\n 0,\n 0.96569,\n 830977e-11,\n 0,\n 0,\n 0.963706,\n 140427e-10,\n 0,\n 244659e-11,\n 0.960063,\n 217353e-10,\n 0,\n 760774e-9,\n 0.953113,\n 286606e-10,\n 0,\n 367261e-8,\n 0.940192,\n 247691e-10,\n 0,\n 940263e-8,\n 0.927731,\n 195814e-10,\n 0,\n 0.018333,\n 0.920669,\n 252531e-10,\n 0,\n 0.0306825,\n 0.911799,\n 324277e-10,\n 0,\n 0.0465556,\n 0.89857,\n 340982e-10,\n 0,\n 0.0659521,\n 0.883283,\n 319622e-10,\n 0,\n 0.0887677,\n 0.86989,\n 35548e-9,\n 0,\n 0.114784,\n 0.855483,\n 397143e-10,\n 0,\n 0.143618,\n 0.837987,\n 391665e-10,\n 0,\n 0.174606,\n 0.820546,\n 411306e-10,\n 0,\n 0.206349,\n 0.802878,\n 436753e-10,\n 0,\n 0.238095,\n 0.783402,\n 444e-7,\n 0,\n 0.269841,\n 0.763439,\n 458726e-10,\n 0,\n 0.301587,\n 0.742925,\n 467097e-10,\n 0,\n 0.333333,\n 0.721633,\n 478887e-10,\n 0,\n 0.365079,\n 0.69985,\n 481251e-10,\n 0,\n 0.396825,\n 0.67783,\n 491811e-10,\n 0,\n 0.428571,\n 0.655126,\n 488199e-10,\n 0,\n 0.460318,\n 0.632697,\n 496025e-10,\n 0,\n 0.492064,\n 0.609613,\n 48829e-9,\n 0,\n 0.52381,\n 0.587098,\n 492754e-10,\n 0,\n 0.555556,\n 0.564119,\n 482625e-10,\n 0,\n 0.587302,\n 0.541813,\n 482807e-10,\n 0,\n 0.619048,\n 0.519342,\n 471552e-10,\n 0,\n 0.650794,\n 0.497514,\n 466765e-10,\n 0,\n 0.68254,\n 0.475879,\n 455582e-10,\n 0,\n 0.714286,\n 0.454789,\n 446007e-10,\n 0,\n 0.746032,\n 0.434217,\n 435382e-10,\n 0,\n 0.777778,\n 0.414086,\n 421753e-10,\n 0,\n 0.809524,\n 0.394744,\n 412093e-10,\n 0,\n 0.84127,\n 0.375782,\n 396634e-10,\n 0,\n 0.873016,\n 0.357707,\n 386419e-10,\n 0,\n 0.904762,\n 0.340038,\n 370345e-10,\n 0,\n 0.936508,\n 0.323284,\n 359725e-10,\n 0,\n 0.968254,\n 0.306954,\n 3436e-8,\n 0,\n 1,\n 1,\n 599567e-19,\n 0,\n 0,\n 1,\n 600497e-19,\n 0,\n 0,\n 1,\n 614839e-19,\n 0,\n 0,\n 1,\n 686641e-19,\n 0,\n 0,\n 1,\n 972658e-19,\n 0,\n 0,\n 1,\n 221271e-18,\n 0,\n 0,\n 1,\n 833195e-18,\n 0,\n 0,\n 1,\n 403601e-17,\n 0,\n 0,\n 0.999999,\n 206001e-16,\n 0,\n 0,\n 0.999998,\n 101739e-15,\n 0,\n 0,\n 0.999997,\n 470132e-15,\n 0,\n 0,\n 0.999993,\n 200436e-14,\n 0,\n 0,\n 0.999988,\n 783682e-14,\n 0,\n 0,\n 0.999979,\n 280338e-13,\n 0,\n 0,\n 0.999962,\n 917033e-13,\n 0,\n 0,\n 0.999933,\n 274514e-12,\n 0,\n 0,\n 0.999881,\n 753201e-12,\n 0,\n 0,\n 0.999783,\n 189826e-11,\n 0,\n 0,\n 0.999594,\n 440279e-11,\n 0,\n 0,\n 0.999178,\n 93898e-10,\n 0,\n 0,\n 0.998073,\n 181265e-10,\n 0,\n 0,\n 0.993993,\n 280487e-10,\n 0,\n 0,\n 0.979982,\n 149422e-10,\n 0,\n 0,\n 0.968145,\n 378481e-11,\n 0,\n 0,\n 0.966786,\n 53771e-10,\n 0,\n 0,\n 0.965611,\n 947508e-11,\n 0,\n 388934e-10,\n 0.963557,\n 156616e-10,\n 0,\n 9693e-7,\n 0.959752,\n 235144e-10,\n 0,\n 370329e-8,\n 0.952461,\n 291568e-10,\n 0,\n 868428e-8,\n 0.940193,\n 240102e-10,\n 0,\n 0.0161889,\n 0.929042,\n 231235e-10,\n 0,\n 0.0263948,\n 0.920266,\n 273968e-10,\n 0,\n 0.0394088,\n 0.911178,\n 337915e-10,\n 0,\n 0.0552818,\n 0.897873,\n 333629e-10,\n 0,\n 0.0740138,\n 0.884053,\n 351405e-10,\n 0,\n 0.0955539,\n 0.869455,\n 378034e-10,\n 0,\n 0.119795,\n 0.854655,\n 399378e-10,\n 0,\n 0.14656,\n 0.838347,\n 419108e-10,\n 0,\n 0.175573,\n 0.820693,\n 440831e-10,\n 0,\n 0.206388,\n 0.802277,\n 445599e-10,\n 0,\n 0.238095,\n 0.783634,\n 472691e-10,\n 0,\n 0.269841,\n 0.763159,\n 476984e-10,\n 0,\n 0.301587,\n 0.742914,\n 491487e-10,\n 0,\n 0.333333,\n 0.721662,\n 502312e-10,\n 0,\n 0.365079,\n 0.699668,\n 502817e-10,\n 0,\n 0.396825,\n 0.677839,\n 51406e-9,\n 0,\n 0.428571,\n 0.655091,\n 511095e-10,\n 0,\n 0.460317,\n 0.632665,\n 516067e-10,\n 0,\n 0.492064,\n 0.609734,\n 512255e-10,\n 0,\n 0.52381,\n 0.587043,\n 510263e-10,\n 0,\n 0.555556,\n 0.564298,\n 50565e-9,\n 0,\n 0.587302,\n 0.541769,\n 497951e-10,\n 0,\n 0.619048,\n 0.519529,\n 492698e-10,\n 0,\n 0.650794,\n 0.497574,\n 482066e-10,\n 0,\n 0.68254,\n 0.476028,\n 473689e-10,\n 0,\n 0.714286,\n 0.454961,\n 461941e-10,\n 0,\n 0.746032,\n 0.434341,\n 450618e-10,\n 0,\n 0.777778,\n 0.414364,\n 438355e-10,\n 0,\n 0.809524,\n 0.394832,\n 424196e-10,\n 0,\n 0.84127,\n 0.376109,\n 412563e-10,\n 0,\n 0.873016,\n 0.35779,\n 396226e-10,\n 0,\n 0.904762,\n 0.340379,\n 384886e-10,\n 0,\n 0.936508,\n 0.323385,\n 368214e-10,\n 0,\n 0.968254,\n 0.307295,\n 356636e-10,\n 0,\n 1,\n 1,\n 106465e-17,\n 0,\n 0,\n 1,\n 106555e-17,\n 0,\n 0,\n 1,\n 107966e-17,\n 0,\n 0,\n 1,\n 114601e-17,\n 0,\n 0,\n 1,\n 137123e-17,\n 0,\n 0,\n 1,\n 21243e-16,\n 0,\n 0,\n 0.999999,\n 489653e-17,\n 0,\n 0,\n 0.999999,\n 160283e-16,\n 0,\n 0,\n 0.999998,\n 62269e-15,\n 0,\n 0,\n 0.999997,\n 251859e-15,\n 0,\n 0,\n 0.999996,\n 996192e-15,\n 0,\n 0,\n 0.999992,\n 374531e-14,\n 0,\n 0,\n 0.999986,\n 132022e-13,\n 0,\n 0,\n 0.999975,\n 433315e-13,\n 0,\n 0,\n 0.999959,\n 131956e-12,\n 0,\n 0,\n 0.999927,\n 372249e-12,\n 0,\n 0,\n 0.999871,\n 972461e-12,\n 0,\n 0,\n 0.999771,\n 235343e-11,\n 0,\n 0,\n 0.999572,\n 52768e-10,\n 0,\n 0,\n 0.999133,\n 109237e-10,\n 0,\n 0,\n 0.997912,\n 203675e-10,\n 0,\n 0,\n 0.993008,\n 279396e-10,\n 0,\n 0,\n 0.980645,\n 139604e-10,\n 0,\n 0,\n 0.970057,\n 646596e-11,\n 0,\n 0,\n 0.966717,\n 65089e-10,\n 0,\n 474145e-10,\n 0.965497,\n 111863e-10,\n 0,\n 89544e-8,\n 0.96334,\n 179857e-10,\n 0,\n 32647e-7,\n 0.959294,\n 259045e-10,\n 0,\n 75144e-7,\n 0.951519,\n 292327e-10,\n 0,\n 0.0138734,\n 0.940517,\n 249769e-10,\n 0,\n 0.0224952,\n 0.93014,\n 26803e-9,\n 0,\n 0.0334828,\n 0.91972,\n 303656e-10,\n 0,\n 0.0468973,\n 0.910294,\n 353323e-10,\n 0,\n 0.0627703,\n 0.897701,\n 351002e-10,\n 0,\n 0.0811019,\n 0.884522,\n 388104e-10,\n 0,\n 0.10186,\n 0.869489,\n 412932e-10,\n 0,\n 0.124985,\n 0.853983,\n 415781e-10,\n 0,\n 0.150372,\n 0.838425,\n 454066e-10,\n 0,\n 0.177868,\n 0.820656,\n 471624e-10,\n 0,\n 0.207245,\n 0.801875,\n 475243e-10,\n 0,\n 0.238143,\n 0.783521,\n 505621e-10,\n 0,\n 0.269841,\n 0.763131,\n 50721e-9,\n 0,\n 0.301587,\n 0.74261,\n 523293e-10,\n 0,\n 0.333333,\n 0.72148,\n 528699e-10,\n 0,\n 0.365079,\n 0.699696,\n 538677e-10,\n 0,\n 0.396825,\n 0.677592,\n 539255e-10,\n 0,\n 0.428571,\n 0.65525,\n 546367e-10,\n 0,\n 0.460317,\n 0.632452,\n 541348e-10,\n 0,\n 0.492064,\n 0.609903,\n 544976e-10,\n 0,\n 0.52381,\n 0.586928,\n 536201e-10,\n 0,\n 0.555556,\n 0.564464,\n 535185e-10,\n 0,\n 0.587302,\n 0.541801,\n 524949e-10,\n 0,\n 0.619048,\n 0.519681,\n 51812e-9,\n 0,\n 0.650794,\n 0.497685,\n 507687e-10,\n 0,\n 0.68254,\n 0.47622,\n 496243e-10,\n 0,\n 0.714286,\n 0.455135,\n 485714e-10,\n 0,\n 0.746032,\n 0.4346,\n 471847e-10,\n 0,\n 0.777778,\n 0.414564,\n 459294e-10,\n 0,\n 0.809524,\n 0.395165,\n 444705e-10,\n 0,\n 0.84127,\n 0.376333,\n 430772e-10,\n 0,\n 0.873016,\n 0.358197,\n 416229e-10,\n 0,\n 0.904762,\n 0.34064,\n 401019e-10,\n 0,\n 0.936508,\n 0.323816,\n 386623e-10,\n 0,\n 0.968254,\n 0.307581,\n 370933e-10,\n 0,\n 1,\n 1,\n 991541e-17,\n 0,\n 0,\n 1,\n 992077e-17,\n 0,\n 0,\n 1,\n 100041e-16,\n 0,\n 0,\n 1,\n 10385e-15,\n 0,\n 0,\n 1,\n 115777e-16,\n 0,\n 0,\n 1,\n 150215e-16,\n 0,\n 0,\n 0.999999,\n 254738e-16,\n 0,\n 0,\n 0.999999,\n 598822e-16,\n 0,\n 0,\n 0.999998,\n 179597e-15,\n 0,\n 0,\n 0.999997,\n 602367e-15,\n 0,\n 0,\n 0.999994,\n 206835e-14,\n 0,\n 0,\n 0.99999,\n 694952e-14,\n 0,\n 0,\n 0.999984,\n 223363e-13,\n 0,\n 0,\n 0.999972,\n 678578e-13,\n 0,\n 0,\n 0.999952,\n 193571e-12,\n 0,\n 0,\n 0.999919,\n 516594e-12,\n 0,\n 0,\n 0.99986,\n 128739e-11,\n 0,\n 0,\n 0.999753,\n 299298e-11,\n 0,\n 0,\n 0.999546,\n 648258e-11,\n 0,\n 0,\n 0.999074,\n 129985e-10,\n 0,\n 0,\n 0.997671,\n 232176e-10,\n 0,\n 0,\n 0.991504,\n 256701e-10,\n 0,\n 0,\n 0.981148,\n 131141e-10,\n 0,\n 0,\n 0.971965,\n 869048e-11,\n 0,\n 280182e-10,\n 0.966624,\n 808301e-11,\n 0,\n 695475e-9,\n 0.965344,\n 135235e-10,\n 0,\n 265522e-8,\n 0.963048,\n 210592e-10,\n 0,\n 622975e-8,\n 0.958673,\n 287473e-10,\n 0,\n 0.0116234,\n 0.950262,\n 281379e-10,\n 0,\n 0.018976,\n 0.940836,\n 271089e-10,\n 0,\n 0.0283844,\n 0.930996,\n 30926e-9,\n 0,\n 0.0399151,\n 0.919848,\n 348359e-10,\n 0,\n 0.0536063,\n 0.909136,\n 366092e-10,\n 0,\n 0.0694793,\n 0.897554,\n 384162e-10,\n 0,\n 0.0875342,\n 0.884691,\n 430971e-10,\n 0,\n 0.107749,\n 0.869414,\n 447803e-10,\n 0,\n 0.130087,\n 0.853462,\n 452858e-10,\n 0,\n 0.154481,\n 0.838187,\n 495769e-10,\n 0,\n 0.180833,\n 0.820381,\n 502709e-10,\n 0,\n 0.209005,\n 0.801844,\n 522713e-10,\n 0,\n 0.238791,\n 0.783061,\n 541505e-10,\n 0,\n 0.269869,\n 0.763205,\n 553712e-10,\n 0,\n 0.301587,\n 0.742362,\n 564909e-10,\n 0,\n 0.333333,\n 0.721393,\n 572646e-10,\n 0,\n 0.365079,\n 0.699676,\n 581012e-10,\n 0,\n 0.396825,\n 0.677395,\n 58096e-9,\n 0,\n 0.428571,\n 0.655208,\n 585766e-10,\n 0,\n 0.460317,\n 0.632451,\n 583602e-10,\n 0,\n 0.492064,\n 0.609839,\n 580234e-10,\n 0,\n 0.52381,\n 0.587093,\n 577161e-10,\n 0,\n 0.555556,\n 0.564467,\n 568447e-10,\n 0,\n 0.587302,\n 0.542043,\n 563166e-10,\n 0,\n 0.619048,\n 0.519826,\n 55156e-9,\n 0,\n 0.650794,\n 0.497952,\n 541682e-10,\n 0,\n 0.68254,\n 0.476477,\n 528971e-10,\n 0,\n 0.714286,\n 0.455412,\n 514952e-10,\n 0,\n 0.746032,\n 0.434926,\n 502222e-10,\n 0,\n 0.777778,\n 0.4149,\n 485779e-10,\n 0,\n 0.809524,\n 0.395552,\n 472242e-10,\n 0,\n 0.84127,\n 0.376712,\n 454891e-10,\n 0,\n 0.873016,\n 0.358622,\n 440924e-10,\n 0,\n 0.904762,\n 0.341048,\n 422984e-10,\n 0,\n 0.936508,\n 0.324262,\n 408582e-10,\n 0,\n 0.968254,\n 0.308013,\n 390839e-10,\n 0,\n 1,\n 1,\n 613913e-16,\n 0,\n 0,\n 1,\n 614145e-16,\n 0,\n 0,\n 1,\n 617708e-16,\n 0,\n 0,\n 1,\n 633717e-16,\n 0,\n 0,\n 1,\n 681648e-16,\n 0,\n 0,\n 1,\n 808291e-16,\n 0,\n 0,\n 1,\n 114608e-15,\n 0,\n 0,\n 0.999998,\n 210507e-15,\n 0,\n 0,\n 0.999997,\n 499595e-15,\n 0,\n 0,\n 0.999995,\n 139897e-14,\n 0,\n 0,\n 0.999994,\n 419818e-14,\n 0,\n 0,\n 0.999988,\n 127042e-13,\n 0,\n 0,\n 0.999979,\n 375153e-13,\n 0,\n 0,\n 0.999965,\n 106206e-12,\n 0,\n 0,\n 0.999945,\n 285381e-12,\n 0,\n 0,\n 0.999908,\n 723611e-12,\n 0,\n 0,\n 0.999846,\n 17255e-10,\n 0,\n 0,\n 0.999733,\n 386104e-11,\n 0,\n 0,\n 0.999511,\n 808493e-11,\n 0,\n 0,\n 0.998993,\n 156884e-10,\n 0,\n 0,\n 0.997326,\n 265538e-10,\n 0,\n 0,\n 0.989706,\n 206466e-10,\n 0,\n 0,\n 0.981713,\n 130756e-10,\n 0,\n 70005e-10,\n 0.973636,\n 106473e-10,\n 0,\n 464797e-9,\n 0.966509,\n 10194e-9,\n 0,\n 201743e-8,\n 0.965149,\n 165881e-10,\n 0,\n 497549e-8,\n 0.962669,\n 249147e-10,\n 0,\n 953262e-8,\n 0.95786,\n 317449e-10,\n 0,\n 0.0158211,\n 0.949334,\n 281045e-10,\n 0,\n 0.0239343,\n 0.941041,\n 303263e-10,\n 0,\n 0.0339372,\n 0.931575,\n 356754e-10,\n 0,\n 0.0458738,\n 0.920102,\n 397075e-10,\n 0,\n 0.059772,\n 0.908002,\n 384886e-10,\n 0,\n 0.075645,\n 0.897269,\n 43027e-9,\n 0,\n 0.0934929,\n 0.884559,\n 479925e-10,\n 0,\n 0.113302,\n 0.869161,\n 48246e-9,\n 0,\n 0.135045,\n 0.853342,\n 509505e-10,\n 0,\n 0.158678,\n 0.837633,\n 542846e-10,\n 0,\n 0.184136,\n 0.820252,\n 554139e-10,\n 0,\n 0.211325,\n 0.801872,\n 581412e-10,\n 0,\n 0.240113,\n 0.782418,\n 585535e-10,\n 0,\n 0.270306,\n 0.7631,\n 610923e-10,\n 0,\n 0.301594,\n 0.742183,\n 613678e-10,\n 0,\n 0.333333,\n 0.721098,\n 627275e-10,\n 0,\n 0.365079,\n 0.699512,\n 629413e-10,\n 0,\n 0.396825,\n 0.677372,\n 636351e-10,\n 0,\n 0.428571,\n 0.655059,\n 633555e-10,\n 0,\n 0.460317,\n 0.632567,\n 636513e-10,\n 0,\n 0.492064,\n 0.609784,\n 628965e-10,\n 0,\n 0.52381,\n 0.587237,\n 625546e-10,\n 0,\n 0.555556,\n 0.564525,\n 615825e-10,\n 0,\n 0.587302,\n 0.542181,\n 605048e-10,\n 0,\n 0.619048,\n 0.520017,\n 596329e-10,\n 0,\n 0.650794,\n 0.498204,\n 581516e-10,\n 0,\n 0.68254,\n 0.476742,\n 569186e-10,\n 0,\n 0.714286,\n 0.455803,\n 553833e-10,\n 0,\n 0.746032,\n 0.435251,\n 537807e-10,\n 0,\n 0.777778,\n 0.415374,\n 522025e-10,\n 0,\n 0.809524,\n 0.395921,\n 503421e-10,\n 0,\n 0.84127,\n 0.377253,\n 488211e-10,\n 0,\n 0.873016,\n 0.359021,\n 468234e-10,\n 0,\n 0.904762,\n 0.341637,\n 453269e-10,\n 0,\n 0.936508,\n 0.3247,\n 433014e-10,\n 0,\n 0.968254,\n 0.308625,\n 418007e-10,\n 0,\n 1,\n 1,\n 286798e-15,\n 0,\n 0,\n 1,\n 286877e-15,\n 0,\n 0,\n 1,\n 288094e-15,\n 0,\n 0,\n 1,\n 293506e-15,\n 0,\n 0,\n 1,\n 309262e-15,\n 0,\n 0,\n 0.999999,\n 348593e-15,\n 0,\n 0,\n 0.999999,\n 444582e-15,\n 0,\n 0,\n 0.999998,\n 688591e-15,\n 0,\n 0,\n 0.999996,\n 134391e-14,\n 0,\n 0,\n 0.999993,\n 317438e-14,\n 0,\n 0,\n 0.999989,\n 835609e-14,\n 0,\n 0,\n 0.999983,\n 228677e-13,\n 0,\n 0,\n 0.999974,\n 623361e-13,\n 0,\n 0,\n 0.999959,\n 165225e-12,\n 0,\n 0,\n 0.999936,\n 419983e-12,\n 0,\n 0,\n 0.999896,\n 101546e-11,\n 0,\n 0,\n 0.99983,\n 232376e-11,\n 0,\n 0,\n 0.999709,\n 50156e-10,\n 0,\n 0,\n 0.999469,\n 10167e-9,\n 0,\n 0,\n 0.998886,\n 190775e-10,\n 0,\n 0,\n 0.996819,\n 300511e-10,\n 0,\n 0,\n 0.988837,\n 185092e-10,\n 0,\n 168222e-12,\n 0.982178,\n 134622e-10,\n 0,\n 259622e-9,\n 0.975017,\n 125961e-10,\n 0,\n 142595e-8,\n 0.967101,\n 13507e-9,\n 0,\n 382273e-8,\n 0.964905,\n 205003e-10,\n 0,\n 764164e-8,\n 0.96218,\n 29546e-9,\n 0,\n 0.0130121,\n 0.956821,\n 343738e-10,\n 0,\n 0.0200253,\n 0.948829,\n 305063e-10,\n 0,\n 0.0287452,\n 0.941092,\n 346487e-10,\n 0,\n 0.039218,\n 0.931883,\n 412061e-10,\n 0,\n 0.0514748,\n 0.920211,\n 444651e-10,\n 0,\n 0.0655351,\n 0.907307,\n 431252e-10,\n 0,\n 0.0814082,\n 0.89684,\n 490382e-10,\n 0,\n 0.0990939,\n 0.884119,\n 53334e-9,\n 0,\n 0.118583,\n 0.869148,\n 54114e-9,\n 0,\n 0.139856,\n 0.853377,\n 578536e-10,\n 0,\n 0.162882,\n 0.836753,\n 592285e-10,\n 0,\n 0.187615,\n 0.820063,\n 622787e-10,\n 0,\n 0.213991,\n 0.801694,\n 645492e-10,\n 0,\n 0.241918,\n 0.782116,\n 65353e-9,\n 0,\n 0.271267,\n 0.762673,\n 674344e-10,\n 0,\n 0.301847,\n 0.742133,\n 682788e-10,\n 0,\n 0.333333,\n 0.720779,\n 691959e-10,\n 0,\n 0.365079,\n 0.699386,\n 696817e-10,\n 0,\n 0.396826,\n 0.67732,\n 699583e-10,\n 0,\n 0.428572,\n 0.654888,\n 698447e-10,\n 0,\n 0.460318,\n 0.632499,\n 694063e-10,\n 0,\n 0.492064,\n 0.609825,\n 691612e-10,\n 0,\n 0.52381,\n 0.587287,\n 681576e-10,\n 0,\n 0.555556,\n 0.564743,\n 674138e-10,\n 0,\n 0.587302,\n 0.542409,\n 661617e-10,\n 0,\n 0.619048,\n 0.520282,\n 647785e-10,\n 0,\n 0.650794,\n 0.498506,\n 633836e-10,\n 0,\n 0.68254,\n 0.477102,\n 615905e-10,\n 0,\n 0.714286,\n 0.456167,\n 601013e-10,\n 0,\n 0.746032,\n 0.435728,\n 581457e-10,\n 0,\n 0.777778,\n 0.415809,\n 564215e-10,\n 0,\n 0.809524,\n 0.396517,\n 544997e-10,\n 0,\n 0.84127,\n 0.377737,\n 525061e-10,\n 0,\n 0.873016,\n 0.359698,\n 506831e-10,\n 0,\n 0.904762,\n 0.342164,\n 48568e-9,\n 0,\n 0.936508,\n 0.325417,\n 467826e-10,\n 0,\n 0.968254,\n 0.309186,\n 446736e-10,\n 0,\n 1,\n 1,\n 109018e-14,\n 0,\n 0,\n 1,\n 10904e-13,\n 0,\n 0,\n 1,\n 109393e-14,\n 0,\n 0,\n 1,\n 11095e-13,\n 0,\n 0,\n 1,\n 1154e-12,\n 0,\n 0,\n 1,\n 126089e-14,\n 0,\n 0,\n 0.999999,\n 15059e-13,\n 0,\n 0,\n 0.999997,\n 207899e-14,\n 0,\n 0,\n 0.999994,\n 348164e-14,\n 0,\n 0,\n 0.999993,\n 705728e-14,\n 0,\n 0,\n 0.999987,\n 163692e-13,\n 0,\n 0,\n 0.999981,\n 406033e-13,\n 0,\n 0,\n 0.999969,\n 10245e-11,\n 0,\n 0,\n 0.999953,\n 255023e-12,\n 0,\n 0,\n 0.999925,\n 61511e-11,\n 0,\n 0,\n 0.999881,\n 142218e-11,\n 0,\n 0,\n 0.99981,\n 313086e-11,\n 0,\n 0,\n 0.99968,\n 653119e-11,\n 0,\n 0,\n 0.999418,\n 12832e-9,\n 0,\n 0,\n 0.998748,\n 232497e-10,\n 0,\n 0,\n 0.996066,\n 329522e-10,\n 0,\n 0,\n 0.988379,\n 179613e-10,\n 0,\n 108799e-9,\n 0.982567,\n 143715e-10,\n 0,\n 921302e-9,\n 0.976097,\n 148096e-10,\n 0,\n 280738e-8,\n 0.968475,\n 178905e-10,\n 0,\n 596622e-8,\n 0.964606,\n 253921e-10,\n 0,\n 0.0105284,\n 0.961564,\n 348623e-10,\n 0,\n 0.0165848,\n 0.955517,\n 357612e-10,\n 0,\n 0.0242,\n 0.948381,\n 343493e-10,\n 0,\n 0.03342,\n 0.941095,\n 405849e-10,\n 0,\n 0.0442777,\n 0.931923,\n 475394e-10,\n 0,\n 0.0567958,\n 0.91996,\n 484328e-10,\n 0,\n 0.0709879,\n 0.907419,\n 502146e-10,\n 0,\n 0.086861,\n 0.89618,\n 561654e-10,\n 0,\n 0.104415,\n 0.88337,\n 587612e-10,\n 0,\n 0.123643,\n 0.869046,\n 618057e-10,\n 0,\n 0.144531,\n 0.853278,\n 657392e-10,\n 0,\n 0.167057,\n 0.836091,\n 66303e-9,\n 0,\n 0.191188,\n 0.819644,\n 704445e-10,\n 0,\n 0.216878,\n 0.801246,\n 714071e-10,\n 0,\n 0.244062,\n 0.782031,\n 740093e-10,\n 0,\n 0.272649,\n 0.762066,\n 74685e-9,\n 0,\n 0.302509,\n 0.741964,\n 766647e-10,\n 0,\n 0.333442,\n 0.720554,\n 766328e-10,\n 0,\n 0.365079,\n 0.699098,\n 777857e-10,\n 0,\n 0.396826,\n 0.677189,\n 774633e-10,\n 0,\n 0.428572,\n 0.65484,\n 776235e-10,\n 0,\n 0.460318,\n 0.632496,\n 770316e-10,\n 0,\n 0.492064,\n 0.609908,\n 762669e-10,\n 0,\n 0.52381,\n 0.587312,\n 753972e-10,\n 0,\n 0.555556,\n 0.564938,\n 739994e-10,\n 0,\n 0.587302,\n 0.542577,\n 728382e-10,\n 0,\n 0.619048,\n 0.52062,\n 71112e-9,\n 0,\n 0.650794,\n 0.498819,\n 694004e-10,\n 0,\n 0.68254,\n 0.477555,\n 675575e-10,\n 0,\n 0.714286,\n 0.456568,\n 653449e-10,\n 0,\n 0.746032,\n 0.436278,\n 636068e-10,\n 0,\n 0.777778,\n 0.41637,\n 613466e-10,\n 0,\n 0.809524,\n 0.397144,\n 594177e-10,\n 0,\n 0.84127,\n 0.378412,\n 570987e-10,\n 0,\n 0.873016,\n 0.360376,\n 550419e-10,\n 0,\n 0.904762,\n 0.342906,\n 527422e-10,\n 0,\n 0.936508,\n 0.326136,\n 506544e-10,\n 0,\n 0.968254,\n 0.30997,\n 484307e-10,\n 0,\n 1,\n 1,\n 354014e-14,\n 0,\n 0,\n 1,\n 354073e-14,\n 0,\n 0,\n 1,\n 354972e-14,\n 0,\n 0,\n 1,\n 358929e-14,\n 0,\n 0,\n 1,\n 370093e-14,\n 0,\n 0,\n 0.999999,\n 396194e-14,\n 0,\n 0,\n 0.999998,\n 453352e-14,\n 0,\n 0,\n 0.999997,\n 578828e-14,\n 0,\n 0,\n 0.999994,\n 863812e-14,\n 0,\n 0,\n 0.999991,\n 153622e-13,\n 0,\n 0,\n 0.999985,\n 316356e-13,\n 0,\n 0,\n 0.999977,\n 712781e-13,\n 0,\n 0,\n 0.999964,\n 166725e-12,\n 0,\n 0,\n 0.999945,\n 390501e-12,\n 0,\n 0,\n 0.999912,\n 895622e-12,\n 0,\n 0,\n 0.999866,\n 198428e-11,\n 0,\n 0,\n 0.999786,\n 421038e-11,\n 0,\n 0,\n 0.999647,\n 850239e-11,\n 0,\n 0,\n 0.999356,\n 162059e-10,\n 0,\n 0,\n 0.998563,\n 282652e-10,\n 0,\n 0,\n 0.994928,\n 336309e-10,\n 0,\n 244244e-10,\n 0.987999,\n 178458e-10,\n 0,\n 523891e-9,\n 0.982893,\n 159162e-10,\n 0,\n 194729e-8,\n 0.977044,\n 178056e-10,\n 0,\n 451099e-8,\n 0.969972,\n 230624e-10,\n 0,\n 835132e-8,\n 0.964237,\n 313922e-10,\n 0,\n 0.013561,\n 0.960791,\n 406145e-10,\n 0,\n 0.0202056,\n 0.954292,\n 372796e-10,\n 0,\n 0.0283321,\n 0.948052,\n 403199e-10,\n 0,\n 0.0379739,\n 0.940938,\n 479537e-10,\n 0,\n 0.0491551,\n 0.931689,\n 545292e-10,\n 0,\n 0.0618918,\n 0.91987,\n 54038e-9,\n 0,\n 0.0761941,\n 0.907665,\n 589909e-10,\n 0,\n 0.0920672,\n 0.895281,\n 642651e-10,\n 0,\n 0.109511,\n 0.882621,\n 659707e-10,\n 0,\n 0.12852,\n 0.86873,\n 709973e-10,\n 0,\n 0.149085,\n 0.853008,\n 742221e-10,\n 0,\n 0.171189,\n 0.835944,\n 761754e-10,\n 0,\n 0.194809,\n 0.818949,\n 797052e-10,\n 0,\n 0.21991,\n 0.800951,\n 812434e-10,\n 0,\n 0.246447,\n 0.781847,\n 838075e-10,\n 0,\n 0.274352,\n 0.761649,\n 84501e-9,\n 0,\n 0.303535,\n 0.74152,\n 860258e-10,\n 0,\n 0.333857,\n 0.720495,\n 866233e-10,\n 0,\n 0.365104,\n 0.698742,\n 868326e-10,\n 0,\n 0.396826,\n 0.677096,\n 87133e-9,\n 0,\n 0.428572,\n 0.654782,\n 863497e-10,\n 0,\n 0.460318,\n 0.632335,\n 860206e-10,\n 0,\n 0.492064,\n 0.610031,\n 849337e-10,\n 0,\n 0.52381,\n 0.587457,\n 838279e-10,\n 0,\n 0.555556,\n 0.56513,\n 82309e-9,\n 0,\n 0.587302,\n 0.542877,\n 803542e-10,\n 0,\n 0.619048,\n 0.5209,\n 786928e-10,\n 0,\n 0.650794,\n 0.499291,\n 765171e-10,\n 0,\n 0.68254,\n 0.477971,\n 744753e-10,\n 0,\n 0.714286,\n 0.457221,\n 72209e-9,\n 0,\n 0.746032,\n 0.436803,\n 697448e-10,\n 0,\n 0.777778,\n 0.417083,\n 675333e-10,\n 0,\n 0.809524,\n 0.397749,\n 648058e-10,\n 0,\n 0.84127,\n 0.379177,\n 625759e-10,\n 0,\n 0.873016,\n 0.361061,\n 598584e-10,\n 0,\n 0.904762,\n 0.343713,\n 575797e-10,\n 0,\n 0.936508,\n 0.326894,\n 549999e-10,\n 0,\n 0.968254,\n 0.310816,\n 527482e-10,\n 0,\n 1,\n 1,\n 10153e-12,\n 0,\n 0,\n 1,\n 101544e-13,\n 0,\n 0,\n 1,\n 101751e-13,\n 0,\n 0,\n 1,\n 102662e-13,\n 0,\n 0,\n 1,\n 10521e-12,\n 0,\n 0,\n 0.999999,\n 111049e-13,\n 0,\n 0,\n 0.999999,\n 123408e-13,\n 0,\n 0,\n 0.999996,\n 14924e-12,\n 0,\n 0,\n 0.999992,\n 204471e-13,\n 0,\n 0,\n 0.999989,\n 326539e-13,\n 0,\n 0,\n 0.99998,\n 603559e-13,\n 0,\n 0,\n 0.999971,\n 123936e-12,\n 0,\n 0,\n 0.999955,\n 269058e-12,\n 0,\n 0,\n 0.999933,\n 593604e-12,\n 0,\n 0,\n 0.999901,\n 129633e-11,\n 0,\n 0,\n 0.999847,\n 275621e-11,\n 0,\n 0,\n 0.999761,\n 564494e-11,\n 0,\n 0,\n 0.999607,\n 110485e-10,\n 0,\n 0,\n 0.999282,\n 204388e-10,\n 0,\n 0,\n 0.99831,\n 341084e-10,\n 0,\n 22038e-11,\n 0.993288,\n 294949e-10,\n 0,\n 242388e-9,\n 0.987855,\n 192736e-10,\n 0,\n 12503e-7,\n 0.983167,\n 182383e-10,\n 0,\n 32745e-7,\n 0.977908,\n 218633e-10,\n 0,\n 646321e-8,\n 0.971194,\n 290662e-10,\n 0,\n 0.0109133,\n 0.963867,\n 386401e-10,\n 0,\n 0.0166927,\n 0.95982,\n 462827e-10,\n 0,\n 0.0238494,\n 0.953497,\n 420705e-10,\n 0,\n 0.0324178,\n 0.947621,\n 477743e-10,\n 0,\n 0.0424225,\n 0.940611,\n 568258e-10,\n 0,\n 0.0538808,\n 0.931174,\n 618061e-10,\n 0,\n 0.0668047,\n 0.919919,\n 627098e-10,\n 0,\n 0.0812014,\n 0.907856,\n 694714e-10,\n 0,\n 0.0970745,\n 0.894509,\n 735008e-10,\n 0,\n 0.114424,\n 0.881954,\n 763369e-10,\n 0,\n 0.133246,\n 0.868309,\n 821896e-10,\n 0,\n 0.153534,\n 0.852511,\n 83769e-9,\n 0,\n 0.175275,\n 0.835821,\n 881615e-10,\n 0,\n 0.198453,\n 0.817981,\n 896368e-10,\n 0,\n 0.223042,\n 0.800504,\n 930906e-10,\n 0,\n 0.249009,\n 0.78141,\n 945056e-10,\n 0,\n 0.276304,\n 0.761427,\n 963605e-10,\n 0,\n 0.304862,\n 0.74094,\n 968088e-10,\n 0,\n 0.334584,\n 0.720233,\n 981481e-10,\n 0,\n 0.365322,\n 0.698592,\n 979122e-10,\n 0,\n 0.396826,\n 0.676763,\n 981057e-10,\n 0,\n 0.428571,\n 0.654808,\n 973956e-10,\n 0,\n 0.460318,\n 0.632326,\n 962619e-10,\n 0,\n 0.492064,\n 0.610049,\n 952996e-10,\n 0,\n 0.52381,\n 0.58763,\n 933334e-10,\n 0,\n 0.555556,\n 0.565261,\n 917573e-10,\n 0,\n 0.587302,\n 0.543244,\n 896636e-10,\n 0,\n 0.619048,\n 0.521273,\n 873304e-10,\n 0,\n 0.650794,\n 0.499818,\n 852648e-10,\n 0,\n 0.68254,\n 0.478536,\n 823961e-10,\n 0,\n 0.714286,\n 0.457826,\n 79939e-9,\n 0,\n 0.746032,\n 0.437549,\n 77126e-9,\n 0,\n 0.777778,\n 0.41776,\n 743043e-10,\n 0,\n 0.809524,\n 0.39863,\n 716426e-10,\n 0,\n 0.84127,\n 0.379954,\n 686456e-10,\n 0,\n 0.873016,\n 0.362025,\n 660514e-10,\n 0,\n 0.904762,\n 0.344581,\n 630755e-10,\n 0,\n 0.936508,\n 0.327909,\n 605439e-10,\n 0,\n 0.968254,\n 0.311736,\n 576345e-10,\n 0,\n 1,\n 1,\n 263344e-13,\n 0,\n 0,\n 1,\n 263373e-13,\n 0,\n 0,\n 1,\n 263815e-13,\n 0,\n 0,\n 1,\n 265753e-13,\n 0,\n 0,\n 1,\n 271132e-13,\n 0,\n 0,\n 0.999999,\n 283279e-13,\n 0,\n 0,\n 0.999997,\n 30833e-12,\n 0,\n 0,\n 0.999995,\n 358711e-13,\n 0,\n 0,\n 0.999992,\n 461266e-13,\n 0,\n 0,\n 0.999985,\n 67574e-12,\n 0,\n 0,\n 0.999977,\n 11358e-11,\n 0,\n 0,\n 0.999966,\n 213657e-12,\n 0,\n 0,\n 0.999948,\n 431151e-12,\n 0,\n 0,\n 0.999923,\n 896656e-12,\n 0,\n 0,\n 0.999884,\n 186603e-11,\n 0,\n 0,\n 0.999826,\n 381115e-11,\n 0,\n 0,\n 0.999732,\n 754184e-11,\n 0,\n 0,\n 0.999561,\n 143192e-10,\n 0,\n 0,\n 0.999191,\n 257061e-10,\n 0,\n 0,\n 0.997955,\n 405724e-10,\n 0,\n 744132e-10,\n 0.992228,\n 276537e-10,\n 0,\n 716477e-9,\n 0.987638,\n 208885e-10,\n 0,\n 22524e-7,\n 0.983395,\n 215226e-10,\n 0,\n 484816e-8,\n 0.978614,\n 270795e-10,\n 0,\n 860962e-8,\n 0.972389,\n 365282e-10,\n 0,\n 0.0136083,\n 0.964392,\n 474747e-10,\n 0,\n 0.0198941,\n 0.95861,\n 509141e-10,\n 0,\n 0.0275023,\n 0.952806,\n 48963e-9,\n 0,\n 0.0364584,\n 0.94712,\n 571119e-10,\n 0,\n 0.04678,\n 0.940104,\n 671704e-10,\n 0,\n 0.0584799,\n 0.930398,\n 687586e-10,\n 0,\n 0.0715665,\n 0.919866,\n 738161e-10,\n 0,\n 0.086045,\n 0.907853,\n 813235e-10,\n 0,\n 0.101918,\n 0.894078,\n 834582e-10,\n 0,\n 0.119186,\n 0.881177,\n 892093e-10,\n 0,\n 0.137845,\n 0.867575,\n 944548e-10,\n 0,\n 0.157891,\n 0.852107,\n 969607e-10,\n 0,\n 0.179316,\n 0.835502,\n 101456e-9,\n 0,\n 0.202106,\n 0.81756,\n 103256e-9,\n 0,\n 0.226243,\n 0.79984,\n 106954e-9,\n 0,\n 0.251704,\n 0.780998,\n 108066e-9,\n 0,\n 0.278451,\n 0.761132,\n 110111e-9,\n 0,\n 0.306436,\n 0.740429,\n 110459e-9,\n 0,\n 0.335586,\n 0.719836,\n 111219e-9,\n 0,\n 0.365796,\n 0.698467,\n 11145e-8,\n 0,\n 0.3969,\n 0.676446,\n 110393e-9,\n 0,\n 0.428571,\n 0.654635,\n 110035e-9,\n 0,\n 0.460318,\n 0.632411,\n 108548e-9,\n 0,\n 0.492064,\n 0.609986,\n 106963e-9,\n 0,\n 0.52381,\n 0.587872,\n 105238e-9,\n 0,\n 0.555556,\n 0.565528,\n 102665e-9,\n 0,\n 0.587302,\n 0.543563,\n 100543e-9,\n 0,\n 0.619048,\n 0.52176,\n 976182e-10,\n 0,\n 0.650794,\n 0.500188,\n 947099e-10,\n 0,\n 0.68254,\n 0.479204,\n 919929e-10,\n 0,\n 0.714286,\n 0.458413,\n 886139e-10,\n 0,\n 0.746032,\n 0.438314,\n 857839e-10,\n 0,\n 0.777778,\n 0.418573,\n 82411e-9,\n 0,\n 0.809524,\n 0.39947,\n 792211e-10,\n 0,\n 0.84127,\n 0.380892,\n 759546e-10,\n 0,\n 0.873016,\n 0.362953,\n 727571e-10,\n 0,\n 0.904762,\n 0.345601,\n 695738e-10,\n 0,\n 0.936508,\n 0.328895,\n 664907e-10,\n 0,\n 0.968254,\n 0.312808,\n 634277e-10,\n 0,\n 1,\n 1,\n 628647e-13,\n 0,\n 0,\n 1,\n 628705e-13,\n 0,\n 0,\n 1,\n 629587e-13,\n 0,\n 0,\n 1,\n 633441e-13,\n 0,\n 0,\n 0.999999,\n 644087e-13,\n 0,\n 0,\n 0.999998,\n 667856e-13,\n 0,\n 0,\n 0.999997,\n 715889e-13,\n 0,\n 0,\n 0.999995,\n 809577e-13,\n 0,\n 0,\n 0.999989,\n 992764e-13,\n 0,\n 0,\n 0.999983,\n 135834e-12,\n 0,\n 0,\n 0.999974,\n 210482e-12,\n 0,\n 0,\n 0.999959,\n 365215e-12,\n 0,\n 0,\n 0.999939,\n 686693e-12,\n 0,\n 0,\n 0.999911,\n 13472e-10,\n 0,\n 0,\n 0.999868,\n 26731e-10,\n 0,\n 0,\n 0.999804,\n 524756e-11,\n 0,\n 0,\n 0.9997,\n 100403e-10,\n 0,\n 0,\n 0.99951,\n 185019e-10,\n 0,\n 0,\n 0.999078,\n 322036e-10,\n 0,\n 620676e-11,\n 0.997428,\n 470002e-10,\n 0,\n 341552e-9,\n 0.99162,\n 287123e-10,\n 0,\n 143727e-8,\n 0.987479,\n 234706e-10,\n 0,\n 349201e-8,\n 0.983582,\n 260083e-10,\n 0,\n 66242e-7,\n 0.979186,\n 337927e-10,\n 0,\n 0.0109113,\n 0.97325,\n 454689e-10,\n 0,\n 0.0164064,\n 0.965221,\n 573759e-10,\n 0,\n 0.0231463,\n 0.957262,\n 544114e-10,\n 0,\n 0.0311571,\n 0.952211,\n 587006e-10,\n 0,\n 0.0404572,\n 0.946631,\n 692256e-10,\n 0,\n 0.0510592,\n 0.939391,\n 787819e-10,\n 0,\n 0.0629723,\n 0.929795,\n 792368e-10,\n 0,\n 0.0762025,\n 0.91965,\n 875075e-10,\n 0,\n 0.090753,\n 0.907737,\n 950903e-10,\n 0,\n 0.106626,\n 0.893899,\n 972963e-10,\n 0,\n 0.123822,\n 0.880239,\n 10459e-8,\n 0,\n 0.142337,\n 0.866562,\n 107689e-9,\n 0,\n 0.16217,\n 0.85164,\n 113081e-9,\n 0,\n 0.183314,\n 0.835021,\n 116636e-9,\n 0,\n 0.20576,\n 0.817311,\n 120074e-9,\n 0,\n 0.229496,\n 0.798845,\n 121921e-9,\n 0,\n 0.254502,\n 0.780479,\n 12475e-8,\n 0,\n 0.280753,\n 0.760694,\n 125255e-9,\n 0,\n 0.308212,\n 0.740142,\n 126719e-9,\n 0,\n 0.336825,\n 0.719248,\n 12636e-8,\n 0,\n 0.366517,\n 0.698209,\n 126712e-9,\n 0,\n 0.397167,\n 0.676398,\n 125769e-9,\n 0,\n 0.428578,\n 0.654378,\n 124432e-9,\n 0,\n 0.460318,\n 0.632484,\n 123272e-9,\n 0,\n 0.492064,\n 0.610113,\n 12085e-8,\n 0,\n 0.52381,\n 0.587931,\n 118411e-9,\n 0,\n 0.555556,\n 0.565872,\n 11569e-8,\n 0,\n 0.587302,\n 0.543814,\n 112521e-9,\n 0,\n 0.619048,\n 0.522265,\n 109737e-9,\n 0,\n 0.650794,\n 0.500835,\n 106228e-9,\n 0,\n 0.68254,\n 0.479818,\n 102591e-9,\n 0,\n 0.714286,\n 0.459258,\n 991288e-10,\n 0,\n 0.746032,\n 0.439061,\n 952325e-10,\n 0,\n 0.777778,\n 0.419552,\n 91895e-9,\n 0,\n 0.809524,\n 0.400399,\n 879051e-10,\n 0,\n 0.84127,\n 0.381976,\n 844775e-10,\n 0,\n 0.873016,\n 0.364009,\n 806316e-10,\n 0,\n 0.904762,\n 0.346761,\n 771848e-10,\n 0,\n 0.936508,\n 0.330049,\n 735429e-10,\n 0,\n 0.968254,\n 0.314018,\n 702103e-10,\n 0,\n 1,\n 1,\n 139968e-12,\n 0,\n 0,\n 1,\n 139979e-12,\n 0,\n 0,\n 1,\n 140145e-12,\n 0,\n 0,\n 1,\n 14087e-11,\n 0,\n 0,\n 0.999999,\n 142865e-12,\n 0,\n 0,\n 0.999998,\n 147279e-12,\n 0,\n 0,\n 0.999997,\n 156057e-12,\n 0,\n 0,\n 0.999992,\n 17276e-11,\n 0,\n 0,\n 0.999989,\n 204352e-12,\n 0,\n 0,\n 0.99998,\n 26494e-11,\n 0,\n 0,\n 0.999969,\n 383435e-12,\n 0,\n 0,\n 0.999953,\n 618641e-12,\n 0,\n 0,\n 0.999929,\n 108755e-11,\n 0,\n 0,\n 0.999898,\n 201497e-11,\n 0,\n 0,\n 0.999849,\n 381346e-11,\n 0,\n 0,\n 0.999778,\n 719815e-11,\n 0,\n 0,\n 0.999661,\n 133215e-10,\n 0,\n 0,\n 0.999451,\n 238313e-10,\n 0,\n 0,\n 0.998936,\n 401343e-10,\n 0,\n 113724e-9,\n 0.99662,\n 517346e-10,\n 0,\n 820171e-9,\n 0.991094,\n 304323e-10,\n 0,\n 238143e-8,\n 0.987487,\n 281757e-10,\n 0,\n 493527e-8,\n 0.983731,\n 320048e-10,\n 0,\n 856859e-8,\n 0.979647,\n 423905e-10,\n 0,\n 0.0133393,\n 0.973837,\n 562935e-10,\n 0,\n 0.0192863,\n 0.96584,\n 677442e-10,\n 0,\n 0.0264369,\n 0.956309,\n 623073e-10,\n 0,\n 0.03481,\n 0.951523,\n 704131e-10,\n 0,\n 0.0444184,\n 0.946003,\n 836594e-10,\n 0,\n 0.0552713,\n 0.938454,\n 911736e-10,\n 0,\n 0.0673749,\n 0.929279,\n 938264e-10,\n 0,\n 0.0807329,\n 0.919239,\n 103754e-9,\n 0,\n 0.0953479,\n 0.907293,\n 109928e-9,\n 0,\n 0.111221,\n 0.893936,\n 115257e-9,\n 0,\n 0.128352,\n 0.879674,\n 122265e-9,\n 0,\n 0.14674,\n 0.865668,\n 125733e-9,\n 0,\n 0.166382,\n 0.850998,\n 132305e-9,\n 0,\n 0.187276,\n 0.834498,\n 134844e-9,\n 0,\n 0.209413,\n 0.816903,\n 139276e-9,\n 0,\n 0.232786,\n 0.798235,\n 140984e-9,\n 0,\n 0.257382,\n 0.779724,\n 14378e-8,\n 0,\n 0.283181,\n 0.760251,\n 144623e-9,\n 0,\n 0.310156,\n 0.739808,\n 145228e-9,\n 0,\n 0.338269,\n 0.718762,\n 14539e-8,\n 0,\n 0.367461,\n 0.697815,\n 144432e-9,\n 0,\n 0.397646,\n 0.67631,\n 143893e-9,\n 0,\n 0.428685,\n 0.654278,\n 141846e-9,\n 0,\n 0.460318,\n 0.632347,\n 13935e-8,\n 0,\n 0.492064,\n 0.610296,\n 137138e-9,\n 0,\n 0.52381,\n 0.588039,\n 133806e-9,\n 0,\n 0.555556,\n 0.566218,\n 130755e-9,\n 0,\n 0.587302,\n 0.544346,\n 127128e-9,\n 0,\n 0.619048,\n 0.522701,\n 123002e-9,\n 0,\n 0.650794,\n 0.501542,\n 119443e-9,\n 0,\n 0.68254,\n 0.480508,\n 115055e-9,\n 0,\n 0.714286,\n 0.460092,\n 111032e-9,\n 0,\n 0.746032,\n 0.440021,\n 106635e-9,\n 0,\n 0.777778,\n 0.420446,\n 102162e-9,\n 0,\n 0.809524,\n 0.401512,\n 98184e-9,\n 0,\n 0.84127,\n 0.38299,\n 936497e-10,\n 0,\n 0.873016,\n 0.365232,\n 89813e-9,\n 0,\n 0.904762,\n 0.347865,\n 853073e-10,\n 0,\n 0.936508,\n 0.331342,\n 817068e-10,\n 0,\n 0.968254,\n 0.315202,\n 773818e-10,\n 0,\n 1,\n 1,\n 29368e-11,\n 0,\n 0,\n 1,\n 2937e-10,\n 0,\n 0,\n 1,\n 293998e-12,\n 0,\n 0,\n 1,\n 295298e-12,\n 0,\n 0,\n 0.999999,\n 298865e-12,\n 0,\n 0,\n 0.999998,\n 3067e-10,\n 0,\n 0,\n 0.999995,\n 322082e-12,\n 0,\n 0,\n 0.999992,\n 350767e-12,\n 0,\n 0,\n 0.999986,\n 403538e-12,\n 0,\n 0,\n 0.999976,\n 501372e-12,\n 0,\n 0,\n 0.999964,\n 68562e-11,\n 0,\n 0,\n 0.999945,\n 10374e-10,\n 0,\n 0,\n 0.999919,\n 171269e-11,\n 0,\n 0,\n 0.999882,\n 300175e-11,\n 0,\n 0,\n 0.999829,\n 542144e-11,\n 0,\n 0,\n 0.999749,\n 984182e-11,\n 0,\n 0,\n 0.99962,\n 176213e-10,\n 0,\n 0,\n 0.999382,\n 305995e-10,\n 0,\n 138418e-10,\n 0.998751,\n 496686e-10,\n 0,\n 389844e-9,\n 0.995344,\n 510733e-10,\n 0,\n 150343e-8,\n 0.990768,\n 345829e-10,\n 0,\n 352451e-8,\n 0.987464,\n 342841e-10,\n 0,\n 655379e-8,\n 0.983846,\n 399072e-10,\n 0,\n 0.0106554,\n 0.980007,\n 533219e-10,\n 0,\n 0.0158723,\n 0.974494,\n 696992e-10,\n 0,\n 0.0222333,\n 0.96622,\n 776754e-10,\n 0,\n 0.029758,\n 0.956273,\n 747718e-10,\n 0,\n 0.0384596,\n 0.950952,\n 864611e-10,\n 0,\n 0.0483473,\n 0.945215,\n 100464e-9,\n 0,\n 0.0594266,\n 0.937287,\n 103729e-9,\n 0,\n 0.0717019,\n 0.928649,\n 111665e-9,\n 0,\n 0.0851752,\n 0.918791,\n 12353e-8,\n 0,\n 0.0998479,\n 0.906685,\n 127115e-9,\n 0,\n 0.115721,\n 0.893706,\n 13628e-8,\n 0,\n 0.132794,\n 0.879248,\n 142427e-9,\n 0,\n 0.151067,\n 0.864685,\n 148091e-9,\n 0,\n 0.170538,\n 0.850032,\n 153517e-9,\n 0,\n 0.191204,\n 0.833853,\n 157322e-9,\n 0,\n 0.213063,\n 0.816353,\n 161086e-9,\n 0,\n 0.236107,\n 0.797834,\n 164111e-9,\n 0,\n 0.260329,\n 0.778831,\n 165446e-9,\n 0,\n 0.285714,\n 0.759756,\n 167492e-9,\n 0,\n 0.312243,\n 0.739419,\n 166928e-9,\n 0,\n 0.339887,\n 0.718491,\n 167e-6,\n 0,\n 0.368604,\n 0.697392,\n 165674e-9,\n 0,\n 0.398329,\n 0.676102,\n 163815e-9,\n 0,\n 0.428961,\n 0.654243,\n 162003e-9,\n 0,\n 0.460331,\n 0.632176,\n 158831e-9,\n 0,\n 0.492064,\n 0.610407,\n 155463e-9,\n 0,\n 0.52381,\n 0.588394,\n 152062e-9,\n 0,\n 0.555556,\n 0.56645,\n 147665e-9,\n 0,\n 0.587302,\n 0.5449,\n 14375e-8,\n 0,\n 0.619048,\n 0.523276,\n 138905e-9,\n 0,\n 0.650794,\n 0.502179,\n 134189e-9,\n 0,\n 0.68254,\n 0.481359,\n 129392e-9,\n 0,\n 0.714286,\n 0.46092,\n 124556e-9,\n 0,\n 0.746032,\n 0.441084,\n 11957e-8,\n 0,\n 0.777778,\n 0.421517,\n 114652e-9,\n 0,\n 0.809524,\n 0.402721,\n 109688e-9,\n 0,\n 0.84127,\n 0.384222,\n 104667e-9,\n 0,\n 0.873016,\n 0.366534,\n 999633e-10,\n 0,\n 0.904762,\n 0.349205,\n 950177e-10,\n 0,\n 0.936508,\n 0.332702,\n 907301e-10,\n 0,\n 0.968254,\n 0.316599,\n 859769e-10,\n 0,\n 1,\n 1,\n 585473e-12,\n 0,\n 0,\n 1,\n 585507e-12,\n 0,\n 0,\n 1,\n 58602e-11,\n 0,\n 0,\n 0.999999,\n 588259e-12,\n 0,\n 0,\n 0.999999,\n 594381e-12,\n 0,\n 0,\n 0.999998,\n 607754e-12,\n 0,\n 0,\n 0.999995,\n 633729e-12,\n 0,\n 0,\n 0.99999,\n 68137e-11,\n 0,\n 0,\n 0.999984,\n 767003e-12,\n 0,\n 0,\n 0.999973,\n 921212e-12,\n 0,\n 0,\n 0.999959,\n 120218e-11,\n 0,\n 0,\n 0.999936,\n 172024e-11,\n 0,\n 0,\n 0.999907,\n 268088e-11,\n 0,\n 0,\n 0.999866,\n 445512e-11,\n 0,\n 0,\n 0.999806,\n 768481e-11,\n 0,\n 0,\n 0.999716,\n 1342e-8,\n 0,\n 0,\n 0.999576,\n 232473e-10,\n 0,\n 0,\n 0.9993,\n 391694e-10,\n 0,\n 129917e-9,\n 0.998498,\n 608429e-10,\n 0,\n 845035e-9,\n 0.994132,\n 489743e-10,\n 0,\n 237616e-8,\n 0.99031,\n 384644e-10,\n 0,\n 484456e-8,\n 0.987409,\n 421768e-10,\n 0,\n 832472e-8,\n 0.983981,\n 504854e-10,\n 0,\n 0.0128643,\n 0.980268,\n 671028e-10,\n 0,\n 0.0184947,\n 0.974875,\n 852749e-10,\n 0,\n 0.025237,\n 0.966063,\n 85531e-9,\n 0,\n 0.0331046,\n 0.956779,\n 900588e-10,\n 0,\n 0.0421067,\n 0.950259,\n 10577e-8,\n 0,\n 0.0522487,\n 0.944239,\n 119458e-9,\n 0,\n 0.0635343,\n 0.936341,\n 122164e-9,\n 0,\n 0.0759654,\n 0.928047,\n 134929e-9,\n 0,\n 0.0895434,\n 0.918065,\n 145544e-9,\n 0,\n 0.104269,\n 0.906267,\n 150531e-9,\n 0,\n 0.120142,\n 0.893419,\n 161652e-9,\n 0,\n 0.137163,\n 0.878758,\n 16593e-8,\n 0,\n 0.15533,\n 0.863699,\n 174014e-9,\n 0,\n 0.174645,\n 0.848876,\n 177877e-9,\n 0,\n 0.195106,\n 0.833032,\n 184049e-9,\n 0,\n 0.21671,\n 0.815557,\n 186088e-9,\n 0,\n 0.239454,\n 0.797323,\n 19054e-8,\n 0,\n 0.263332,\n 0.778124,\n 191765e-9,\n 0,\n 0.288336,\n 0.758929,\n 192535e-9,\n 0,\n 0.314451,\n 0.738979,\n 192688e-9,\n 0,\n 0.341658,\n 0.718213,\n 191522e-9,\n 0,\n 0.369924,\n 0.696947,\n 190491e-9,\n 0,\n 0.399202,\n 0.675807,\n 187913e-9,\n 0,\n 0.429416,\n 0.654147,\n 184451e-9,\n 0,\n 0.460447,\n 0.63229,\n 181442e-9,\n 0,\n 0.492064,\n 0.610499,\n 177139e-9,\n 0,\n 0.523809,\n 0.588747,\n 172596e-9,\n 0,\n 0.555555,\n 0.566783,\n 167457e-9,\n 0,\n 0.587301,\n 0.545359,\n 162518e-9,\n 0,\n 0.619048,\n 0.523984,\n 156818e-9,\n 0,\n 0.650794,\n 0.502917,\n 151884e-9,\n 0,\n 0.68254,\n 0.482294,\n 145514e-9,\n 0,\n 0.714286,\n 0.461945,\n 140199e-9,\n 0,\n 0.746032,\n 0.442133,\n 134101e-9,\n 0,\n 0.777778,\n 0.422705,\n 128374e-9,\n 0,\n 0.809524,\n 0.403916,\n 122996e-9,\n 0,\n 0.84127,\n 0.38554,\n 116808e-9,\n 0,\n 0.873016,\n 0.367909,\n 111973e-9,\n 0,\n 0.904762,\n 0.350651,\n 105938e-9,\n 0,\n 0.936508,\n 0.334208,\n 101355e-9,\n 0,\n 0.968254,\n 0.318123,\n 957629e-10,\n 0,\n 1,\n 1,\n 111633e-11,\n 0,\n 0,\n 1,\n 111639e-11,\n 0,\n 0,\n 1,\n 111725e-11,\n 0,\n 0,\n 1,\n 112096e-11,\n 0,\n 0,\n 0.999999,\n 11311e-10,\n 0,\n 0,\n 0.999997,\n 115315e-11,\n 0,\n 0,\n 0.999995,\n 11956e-10,\n 0,\n 0,\n 0.999989,\n 127239e-11,\n 0,\n 0,\n 0.999981,\n 140772e-11,\n 0,\n 0,\n 0.999969,\n 164541e-11,\n 0,\n 0,\n 0.999952,\n 206607e-11,\n 0,\n 0,\n 0.999928,\n 281783e-11,\n 0,\n 0,\n 0.999895,\n 416835e-11,\n 0,\n 0,\n 0.999848,\n 658728e-11,\n 0,\n 0,\n 0.999781,\n 108648e-10,\n 0,\n 0,\n 0.999682,\n 182579e-10,\n 0,\n 0,\n 0.999523,\n 306003e-10,\n 0,\n 159122e-10,\n 0.999205,\n 499862e-10,\n 0,\n 391184e-9,\n 0.998131,\n 73306e-9,\n 0,\n 147534e-8,\n 0.993334,\n 513229e-10,\n 0,\n 34227e-7,\n 0.99016,\n 467783e-10,\n 0,\n 632232e-8,\n 0.987321,\n 523413e-10,\n 0,\n 0.0102295,\n 0.984099,\n 64267e-9,\n 0,\n 0.0151794,\n 0.980432,\n 843042e-10,\n 0,\n 0.0211947,\n 0.974976,\n 102819e-9,\n 0,\n 0.0282899,\n 0.966429,\n 996234e-10,\n 0,\n 0.0364739,\n 0.957633,\n 111074e-9,\n 0,\n 0.0457522,\n 0.949422,\n 128644e-9,\n 0,\n 0.0561278,\n 0.943045,\n 140076e-9,\n 0,\n 0.0676023,\n 0.935448,\n 146349e-9,\n 0,\n 0.0801762,\n 0.927225,\n 161854e-9,\n 0,\n 0.0938499,\n 0.917033,\n 169135e-9,\n 0,\n 0.108623,\n 0.905762,\n 179987e-9,\n 0,\n 0.124496,\n 0.892879,\n 189832e-9,\n 0,\n 0.141469,\n 0.878435,\n 195881e-9,\n 0,\n 0.159541,\n 0.863114,\n 20466e-8,\n 0,\n 0.178713,\n 0.84776,\n 209473e-9,\n 0,\n 0.198985,\n 0.832084,\n 214861e-9,\n 0,\n 0.220355,\n 0.814915,\n 217695e-9,\n 0,\n 0.242823,\n 0.796711,\n 220313e-9,\n 0,\n 0.266385,\n 0.777603,\n 22313e-8,\n 0,\n 0.291036,\n 0.757991,\n 222471e-9,\n 0,\n 0.316767,\n 0.738371,\n 222869e-9,\n 0,\n 0.343563,\n 0.717872,\n 221243e-9,\n 0,\n 0.371402,\n 0.696619,\n 218089e-9,\n 0,\n 0.400248,\n 0.675379,\n 21562e-8,\n 0,\n 0.430047,\n 0.65411,\n 21169e-8,\n 0,\n 0.460709,\n 0.63241,\n 206947e-9,\n 0,\n 0.492079,\n 0.61046,\n 201709e-9,\n 0,\n 0.52381,\n 0.58903,\n 196753e-9,\n 0,\n 0.555556,\n 0.567267,\n 189637e-9,\n 0,\n 0.587302,\n 0.545886,\n 184735e-9,\n 0,\n 0.619048,\n 0.524714,\n 177257e-9,\n 0,\n 0.650794,\n 0.503789,\n 171424e-9,\n 0,\n 0.68254,\n 0.483204,\n 164688e-9,\n 0,\n 0.714286,\n 0.462976,\n 157172e-9,\n 0,\n 0.746032,\n 0.443294,\n 151341e-9,\n 0,\n 0.777778,\n 0.423988,\n 143737e-9,\n 0,\n 0.809524,\n 0.405325,\n 138098e-9,\n 0,\n 0.84127,\n 0.386981,\n 130698e-9,\n 0,\n 0.873016,\n 0.369436,\n 125276e-9,\n 0,\n 0.904762,\n 0.35219,\n 118349e-9,\n 0,\n 0.936508,\n 0.335804,\n 11312e-8,\n 0,\n 0.968254,\n 0.319749,\n 106687e-9,\n 0,\n 1,\n 1,\n 204685e-11,\n 0,\n 0,\n 1,\n 204694e-11,\n 0,\n 0,\n 1,\n 204831e-11,\n 0,\n 0,\n 0.999999,\n 205428e-11,\n 0,\n 0,\n 0.999999,\n 207056e-11,\n 0,\n 0,\n 0.999997,\n 210581e-11,\n 0,\n 0,\n 0.999993,\n 21732e-10,\n 0,\n 0,\n 0.999987,\n 229365e-11,\n 0,\n 0,\n 0.999979,\n 250243e-11,\n 0,\n 0,\n 0.999965,\n 286127e-11,\n 0,\n 0,\n 0.999947,\n 348028e-11,\n 0,\n 0,\n 0.999918,\n 455588e-11,\n 0,\n 0,\n 0.999881,\n 643303e-11,\n 0,\n 0,\n 0.999828,\n 970064e-11,\n 0,\n 0,\n 0.999753,\n 153233e-10,\n 0,\n 0,\n 0.999642,\n 24793e-9,\n 0,\n 0,\n 0.999464,\n 402032e-10,\n 0,\n 122947e-9,\n 0.999089,\n 635852e-10,\n 0,\n 807414e-9,\n 0.997567,\n 857026e-10,\n 0,\n 227206e-8,\n 0.992903,\n 594912e-10,\n 0,\n 462812e-8,\n 0.990011,\n 578515e-10,\n 0,\n 794162e-8,\n 0.987192,\n 65399e-9,\n 0,\n 0.0122534,\n 0.98418,\n 819675e-10,\n 0,\n 0.0175888,\n 0.980491,\n 105514e-9,\n 0,\n 0.0239635,\n 0.974779,\n 121532e-9,\n 0,\n 0.031387,\n 0.96675,\n 119144e-9,\n 0,\n 0.0398644,\n 0.958248,\n 136125e-9,\n 0,\n 0.0493982,\n 0.948884,\n 155408e-9,\n 0,\n 0.0599896,\n 0.941673,\n 162281e-9,\n 0,\n 0.0716382,\n 0.934521,\n 176754e-9,\n 0,\n 0.0843437,\n 0.926205,\n 192873e-9,\n 0,\n 0.0981056,\n 0.916089,\n 200038e-9,\n 0,\n 0.112923,\n 0.904963,\n 213624e-9,\n 0,\n 0.128796,\n 0.892089,\n 221834e-9,\n 0,\n 0.145725,\n 0.878028,\n 232619e-9,\n 0,\n 0.163709,\n 0.86249,\n 238632e-9,\n 0,\n 0.182749,\n 0.846587,\n 247002e-9,\n 0,\n 0.202847,\n 0.830988,\n 250702e-9,\n 0,\n 0.224001,\n 0.814165,\n 255562e-9,\n 0,\n 0.246214,\n 0.796135,\n 257505e-9,\n 0,\n 0.269482,\n 0.777052,\n 258625e-9,\n 0,\n 0.293805,\n 0.757201,\n 258398e-9,\n 0,\n 0.319176,\n 0.737655,\n 256714e-9,\n 0,\n 0.345587,\n 0.717477,\n 255187e-9,\n 0,\n 0.373021,\n 0.696433,\n 251792e-9,\n 0,\n 0.401454,\n 0.675084,\n 247223e-9,\n 0,\n 0.430844,\n 0.653907,\n 242213e-9,\n 0,\n 0.461125,\n 0.632561,\n 237397e-9,\n 0,\n 0.492187,\n 0.610658,\n 229313e-9,\n 0,\n 0.52381,\n 0.589322,\n 224402e-9,\n 0,\n 0.555556,\n 0.567857,\n 216116e-9,\n 0,\n 0.587302,\n 0.54652,\n 209124e-9,\n 0,\n 0.619048,\n 0.525433,\n 201601e-9,\n 0,\n 0.650794,\n 0.504679,\n 192957e-9,\n 0,\n 0.68254,\n 0.484203,\n 186052e-9,\n 0,\n 0.714286,\n 0.464203,\n 177672e-9,\n 0,\n 0.746032,\n 0.444549,\n 170005e-9,\n 0,\n 0.777778,\n 0.425346,\n 162401e-9,\n 0,\n 0.809524,\n 0.406706,\n 1544e-7,\n 0,\n 0.84127,\n 0.388576,\n 147437e-9,\n 0,\n 0.873016,\n 0.37094,\n 139493e-9,\n 0,\n 0.904762,\n 0.353996,\n 133219e-9,\n 0,\n 0.936508,\n 0.337391,\n 125573e-9,\n 0,\n 0.968254,\n 0.321648,\n 119867e-9,\n 0,\n 1,\n 1,\n 362511e-11,\n 0,\n 0,\n 1,\n 362525e-11,\n 0,\n 0,\n 1,\n 362739e-11,\n 0,\n 0,\n 0.999999,\n 363673e-11,\n 0,\n 0,\n 0.999998,\n 366214e-11,\n 0,\n 0,\n 0.999996,\n 371698e-11,\n 0,\n 0,\n 0.999992,\n 382116e-11,\n 0,\n 0,\n 0.999986,\n 400554e-11,\n 0,\n 0,\n 0.999976,\n 432058e-11,\n 0,\n 0,\n 0.999961,\n 485194e-11,\n 0,\n 0,\n 0.999938,\n 574808e-11,\n 0,\n 0,\n 0.999908,\n 726643e-11,\n 0,\n 0,\n 0.999865,\n 984707e-11,\n 0,\n 0,\n 0.999807,\n 142217e-10,\n 0,\n 0,\n 0.999723,\n 215581e-10,\n 0,\n 0,\n 0.999602,\n 336114e-10,\n 0,\n 119113e-10,\n 0.999398,\n 527353e-10,\n 0,\n 355813e-9,\n 0.998946,\n 805809e-10,\n 0,\n 137768e-8,\n 0.996647,\n 942908e-10,\n 0,\n 322469e-8,\n 0.992298,\n 668733e-10,\n 0,\n 597897e-8,\n 0.989802,\n 716564e-10,\n 0,\n 968903e-8,\n 0.987019,\n 821355e-10,\n 0,\n 0.0143845,\n 0.984219,\n 104555e-9,\n 0,\n 0.0200831,\n 0.980425,\n 131245e-9,\n 0,\n 0.0267948,\n 0.974241,\n 139613e-9,\n 0,\n 0.034525,\n 0.967006,\n 145931e-9,\n 0,\n 0.0432757,\n 0.95893,\n 167153e-9,\n 0,\n 0.0530471,\n 0.949157,\n 188146e-9,\n 0,\n 0.0638386,\n 0.94062,\n 194625e-9,\n 0,\n 0.0756487,\n 0.933509,\n 213721e-9,\n 0,\n 0.0884762,\n 0.925088,\n 229616e-9,\n 0,\n 0.10232,\n 0.915178,\n 239638e-9,\n 0,\n 0.117178,\n 0.904093,\n 254814e-9,\n 0,\n 0.133051,\n 0.891337,\n 263685e-9,\n 0,\n 0.149939,\n 0.877326,\n 274789e-9,\n 0,\n 0.167841,\n 0.861794,\n 280534e-9,\n 0,\n 0.18676,\n 0.845758,\n 289534e-9,\n 0,\n 0.206696,\n 0.829792,\n 294446e-9,\n 0,\n 0.22765,\n 0.813037,\n 296877e-9,\n 0,\n 0.249625,\n 0.795285,\n 300217e-9,\n 0,\n 0.27262,\n 0.776323,\n 299826e-9,\n 0,\n 0.296636,\n 0.756673,\n 299787e-9,\n 0,\n 0.321671,\n 0.736856,\n 297867e-9,\n 0,\n 0.347718,\n 0.716883,\n 294052e-9,\n 0,\n 0.374768,\n 0.696089,\n 289462e-9,\n 0,\n 0.402804,\n 0.67505,\n 285212e-9,\n 0,\n 0.431796,\n 0.653509,\n 27653e-8,\n 0,\n 0.461695,\n 0.63258,\n 271759e-9,\n 0,\n 0.49242,\n 0.61104,\n 262811e-9,\n 0,\n 0.523822,\n 0.589567,\n 255151e-9,\n 0,\n 0.555556,\n 0.568322,\n 246434e-9,\n 0,\n 0.587302,\n 0.547235,\n 237061e-9,\n 0,\n 0.619048,\n 0.52616,\n 228343e-9,\n 0,\n 0.650794,\n 0.505716,\n 219236e-9,\n 0,\n 0.68254,\n 0.485274,\n 209595e-9,\n 0,\n 0.714286,\n 0.465411,\n 201011e-9,\n 0,\n 0.746032,\n 0.445854,\n 19109e-8,\n 0,\n 0.777778,\n 0.426911,\n 182897e-9,\n 0,\n 0.809524,\n 0.408222,\n 173569e-9,\n 0,\n 0.84127,\n 0.390307,\n 165496e-9,\n 0,\n 0.873016,\n 0.372624,\n 156799e-9,\n 0,\n 0.904762,\n 0.355804,\n 14917e-8,\n 0,\n 0.936508,\n 0.33924,\n 140907e-9,\n 0,\n 0.968254,\n 0.323534,\n 134062e-9,\n 0,\n 1,\n 1,\n 622487e-11,\n 0,\n 0,\n 1,\n 62251e-10,\n 0,\n 0,\n 1,\n 622837e-11,\n 0,\n 0,\n 0.999999,\n 624259e-11,\n 0,\n 0,\n 0.999998,\n 628127e-11,\n 0,\n 0,\n 0.999996,\n 636451e-11,\n 0,\n 0,\n 0.999991,\n 65218e-10,\n 0,\n 0,\n 0.999984,\n 679782e-11,\n 0,\n 0,\n 0.999973,\n 726361e-11,\n 0,\n 0,\n 0.999955,\n 803644e-11,\n 0,\n 0,\n 0.999931,\n 931397e-11,\n 0,\n 0,\n 0.999896,\n 114299e-10,\n 0,\n 0,\n 0.999847,\n 149402e-10,\n 0,\n 0,\n 0.999784,\n 207461e-10,\n 0,\n 0,\n 0.999692,\n 302493e-10,\n 0,\n 0,\n 0.999554,\n 454957e-10,\n 0,\n 997275e-10,\n 0.999326,\n 690762e-10,\n 0,\n 724813e-9,\n 0.998757,\n 101605e-9,\n 0,\n 20972e-7,\n 0.995367,\n 958745e-10,\n 0,\n 432324e-8,\n 0.99209,\n 832808e-10,\n 0,\n 746347e-8,\n 0.989517,\n 887601e-10,\n 0,\n 0.0115534,\n 0.987008,\n 10564e-8,\n 0,\n 0.0166134,\n 0.98421,\n 133179e-9,\n 0,\n 0.0226552,\n 0.98021,\n 161746e-9,\n 0,\n 0.0296838,\n 0.973676,\n 161821e-9,\n 0,\n 0.0377016,\n 0.967052,\n 178635e-9,\n 0,\n 0.0467079,\n 0.959385,\n 206765e-9,\n 0,\n 0.0567013,\n 0.949461,\n 22476e-8,\n 0,\n 0.0676796,\n 0.939578,\n 23574e-8,\n 0,\n 0.0796403,\n 0.932416,\n 25893e-8,\n 0,\n 0.0925812,\n 0.923759,\n 271228e-9,\n 0,\n 0.106501,\n 0.914223,\n 289165e-9,\n 0,\n 0.121397,\n 0.902942,\n 301156e-9,\n 0,\n 0.13727,\n 0.890419,\n 313852e-9,\n 0,\n 0.15412,\n 0.876639,\n 324408e-9,\n 0,\n 0.171946,\n 0.861316,\n 33249e-8,\n 0,\n 0.190751,\n 0.84496,\n 338497e-9,\n 0,\n 0.210537,\n 0.828427,\n 345861e-9,\n 0,\n 0.231305,\n 0.811871,\n 347863e-9,\n 0,\n 0.253057,\n 0.794397,\n 350225e-9,\n 0,\n 0.275797,\n 0.775726,\n 349915e-9,\n 0,\n 0.299525,\n 0.75617,\n 347297e-9,\n 0,\n 0.324242,\n 0.736091,\n 344232e-9,\n 0,\n 0.349947,\n 0.716213,\n 340835e-9,\n 0,\n 0.376633,\n 0.695736,\n 332369e-9,\n 0,\n 0.404289,\n 0.674961,\n 327943e-9,\n 0,\n 0.432895,\n 0.653518,\n 318533e-9,\n 0,\n 0.462415,\n 0.632574,\n 310391e-9,\n 0,\n 0.492788,\n 0.61134,\n 300755e-9,\n 0,\n 0.523909,\n 0.590017,\n 290506e-9,\n 0,\n 0.555556,\n 0.568752,\n 280446e-9,\n 0,\n 0.587302,\n 0.548061,\n 269902e-9,\n 0,\n 0.619048,\n 0.52711,\n 258815e-9,\n 0,\n 0.650794,\n 0.506682,\n 248481e-9,\n 0,\n 0.68254,\n 0.486524,\n 237141e-9,\n 0,\n 0.714286,\n 0.466812,\n 226872e-9,\n 0,\n 0.746032,\n 0.44732,\n 216037e-9,\n 0,\n 0.777778,\n 0.428473,\n 205629e-9,\n 0,\n 0.809524,\n 0.409921,\n 195691e-9,\n 0,\n 0.84127,\n 0.392028,\n 185457e-9,\n 0,\n 0.873016,\n 0.374606,\n 176436e-9,\n 0,\n 0.904762,\n 0.357601,\n 166508e-9,\n 0,\n 0.936508,\n 0.341348,\n 158385e-9,\n 0,\n 0.968254,\n 0.32542,\n 149203e-9,\n 0,\n 1,\n 1,\n 103967e-10,\n 0,\n 0,\n 1,\n 10397e-9,\n 0,\n 0,\n 1,\n 104019e-10,\n 0,\n 0,\n 0.999999,\n 104231e-10,\n 0,\n 0,\n 0.999998,\n 104806e-10,\n 0,\n 0,\n 0.999995,\n 106042e-10,\n 0,\n 0,\n 0.999991,\n 108366e-10,\n 0,\n 0,\n 0.999982,\n 112415e-10,\n 0,\n 0,\n 0.999968,\n 119174e-10,\n 0,\n 0,\n 0.99995,\n 130227e-10,\n 0,\n 0,\n 0.999922,\n 148176e-10,\n 0,\n 0,\n 0.999884,\n 177303e-10,\n 0,\n 0,\n 0.99983,\n 224564e-10,\n 0,\n 0,\n 0.999758,\n 300966e-10,\n 0,\n 0,\n 0.999654,\n 423193e-10,\n 0,\n 549083e-11,\n 0.999503,\n 614848e-10,\n 0,\n 296087e-9,\n 0.999237,\n 903576e-10,\n 0,\n 123144e-8,\n 0.998491,\n 1271e-7,\n 0,\n 295954e-8,\n 0.994594,\n 107754e-9,\n 0,\n 555829e-8,\n 0.99178,\n 103025e-9,\n 0,\n 907209e-8,\n 0.989265,\n 11154e-8,\n 0,\n 0.0135257,\n 0.986998,\n 136296e-9,\n 0,\n 0.0189327,\n 0.984137,\n 169154e-9,\n 0,\n 0.0252993,\n 0.979798,\n 196671e-9,\n 0,\n 0.0326272,\n 0.97337,\n 196678e-9,\n 0,\n 0.0409157,\n 0.967239,\n 223121e-9,\n 0,\n 0.0501623,\n 0.959543,\n 253809e-9,\n 0,\n 0.0603638,\n 0.949466,\n 265972e-9,\n 0,\n 0.0715171,\n 0.939074,\n 288372e-9,\n 0,\n 0.0836187,\n 0.931118,\n 310983e-9,\n 0,\n 0.0966657,\n 0.922525,\n 325561e-9,\n 0,\n 0.110656,\n 0.912983,\n 345725e-9,\n 0,\n 0.125588,\n 0.901617,\n 3556e-7,\n 0,\n 0.141461,\n 0.889487,\n 374012e-9,\n 0,\n 0.158275,\n 0.875787,\n 383445e-9,\n 0,\n 0.176031,\n 0.860654,\n 393972e-9,\n 0,\n 0.19473,\n 0.844417,\n 400311e-9,\n 0,\n 0.214374,\n 0.82741,\n 405004e-9,\n 0,\n 0.234967,\n 0.810545,\n 407378e-9,\n 0,\n 0.256512,\n 0.793312,\n 407351e-9,\n 0,\n 0.279011,\n 0.774847,\n 406563e-9,\n 0,\n 0.302468,\n 0.755621,\n 404903e-9,\n 0,\n 0.326887,\n 0.735511,\n 397486e-9,\n 0,\n 0.352266,\n 0.715435,\n 39357e-8,\n 0,\n 0.378605,\n 0.695403,\n 384739e-9,\n 0,\n 0.405897,\n 0.674681,\n 376108e-9,\n 0,\n 0.43413,\n 0.65359,\n 365997e-9,\n 0,\n 0.463277,\n 0.632471,\n 354957e-9,\n 0,\n 0.493295,\n 0.61151,\n 343593e-9,\n 0,\n 0.524106,\n 0.59064,\n 331841e-9,\n 0,\n 0.555561,\n 0.569386,\n 318891e-9,\n 0,\n 0.587302,\n 0.548785,\n 3072e-7,\n 0,\n 0.619048,\n 0.528146,\n 29361e-8,\n 0,\n 0.650794,\n 0.507872,\n 281709e-9,\n 0,\n 0.68254,\n 0.487805,\n 268627e-9,\n 0,\n 0.714286,\n 0.468196,\n 255887e-9,\n 0,\n 0.746032,\n 0.448922,\n 243997e-9,\n 0,\n 0.777778,\n 0.430093,\n 231662e-9,\n 0,\n 0.809524,\n 0.411845,\n 220339e-9,\n 0,\n 0.84127,\n 0.393808,\n 208694e-9,\n 0,\n 0.873016,\n 0.376615,\n 198045e-9,\n 0,\n 0.904762,\n 0.359655,\n 187375e-9,\n 0,\n 0.936508,\n 0.343452,\n 177371e-9,\n 0,\n 0.968254,\n 0.32765,\n 167525e-9,\n 0,\n 1,\n 1,\n 169351e-10,\n 0,\n 0,\n 1,\n 169356e-10,\n 0,\n 0,\n 1,\n 169427e-10,\n 0,\n 0,\n 0.999999,\n 169736e-10,\n 0,\n 0,\n 0.999998,\n 170575e-10,\n 0,\n 0,\n 0.999995,\n 172372e-10,\n 0,\n 0,\n 0.99999,\n 175739e-10,\n 0,\n 0,\n 0.999979,\n 181568e-10,\n 0,\n 0,\n 0.999966,\n 191206e-10,\n 0,\n 0,\n 0.999944,\n 20677e-9,\n 0,\n 0,\n 0.999912,\n 231644e-10,\n 0,\n 0,\n 0.999869,\n 271268e-10,\n 0,\n 0,\n 0.999811,\n 334272e-10,\n 0,\n 0,\n 0.99973,\n 433979e-10,\n 0,\n 0,\n 0.999617,\n 590083e-10,\n 0,\n 680315e-10,\n 0.999445,\n 829497e-10,\n 0,\n 612796e-9,\n 0.999138,\n 118019e-9,\n 0,\n 187408e-8,\n 0.998095,\n 156712e-9,\n 0,\n 395791e-8,\n 0.993919,\n 125054e-9,\n 0,\n 692144e-8,\n 0.991333,\n 126091e-9,\n 0,\n 0.0107962,\n 0.989226,\n 144912e-9,\n 0,\n 0.0155986,\n 0.986954,\n 175737e-9,\n 0,\n 0.0213364,\n 0.983982,\n 213883e-9,\n 0,\n 0.0280114,\n 0.979128,\n 234526e-9,\n 0,\n 0.0356226,\n 0.973327,\n 243725e-9,\n 0,\n 0.0441668,\n 0.967416,\n 2773e-7,\n 0,\n 0.0536399,\n 0.959729,\n 308799e-9,\n 0,\n 0.0640376,\n 0.949758,\n 322447e-9,\n 0,\n 0.0753554,\n 0.939173,\n 350021e-9,\n 0,\n 0.0875893,\n 0.9296,\n 370089e-9,\n 0,\n 0.100736,\n 0.921181,\n 391365e-9,\n 0,\n 0.114793,\n 0.91164,\n 413636e-9,\n 0,\n 0.129759,\n 0.900435,\n 427068e-9,\n 0,\n 0.145632,\n 0.888183,\n 441046e-9,\n 0,\n 0.162412,\n 0.874772,\n 454968e-9,\n 0,\n 0.180101,\n 0.859566,\n 461882e-9,\n 0,\n 0.1987,\n 0.843579,\n 471556e-9,\n 0,\n 0.218213,\n 0.826453,\n 474335e-9,\n 0,\n 0.238641,\n 0.809164,\n 477078e-9,\n 0,\n 0.259989,\n 0.792179,\n 47755e-8,\n 0,\n 0.282262,\n 0.773866,\n 472573e-9,\n 0,\n 0.305464,\n 0.754944,\n 469765e-9,\n 0,\n 0.329599,\n 0.735133,\n 462371e-9,\n 0,\n 0.35467,\n 0.714858,\n 453674e-9,\n 0,\n 0.380678,\n 0.694829,\n 443888e-9,\n 0,\n 0.407622,\n 0.674453,\n 432052e-9,\n 0,\n 0.435493,\n 0.653685,\n 420315e-9,\n 0,\n 0.464275,\n 0.632666,\n 406829e-9,\n 0,\n 0.493938,\n 0.611676,\n 392234e-9,\n 0,\n 0.524422,\n 0.591193,\n 379208e-9,\n 0,\n 0.555624,\n 0.570145,\n 36319e-8,\n 0,\n 0.587302,\n 0.549566,\n 349111e-9,\n 0,\n 0.619048,\n 0.529278,\n 334166e-9,\n 0,\n 0.650794,\n 0.509026,\n 318456e-9,\n 0,\n 0.68254,\n 0.489186,\n 30449e-8,\n 0,\n 0.714286,\n 0.469662,\n 289051e-9,\n 0,\n 0.746032,\n 0.450691,\n 275494e-9,\n 0,\n 0.777778,\n 0.431841,\n 261437e-9,\n 0,\n 0.809524,\n 0.413752,\n 247846e-9,\n 0,\n 0.84127,\n 0.395951,\n 235085e-9,\n 0,\n 0.873016,\n 0.378633,\n 222245e-9,\n 0,\n 0.904762,\n 0.36194,\n 210533e-9,\n 0,\n 0.936508,\n 0.345599,\n 198494e-9,\n 0,\n 0.968254,\n 0.329999,\n 188133e-9,\n 0,\n 1,\n 1,\n 269663e-10,\n 0,\n 0,\n 1,\n 26967e-9,\n 0,\n 0,\n 1,\n 269772e-10,\n 0,\n 0,\n 0.999999,\n 270214e-10,\n 0,\n 0,\n 0.999998,\n 271415e-10,\n 0,\n 0,\n 0.999994,\n 27398e-9,\n 0,\n 0,\n 0.999988,\n 278771e-10,\n 0,\n 0,\n 0.999977,\n 287019e-10,\n 0,\n 0,\n 0.999961,\n 300544e-10,\n 0,\n 0,\n 0.999937,\n 322138e-10,\n 0,\n 0,\n 0.999904,\n 356163e-10,\n 0,\n 0,\n 0.999854,\n 409465e-10,\n 0,\n 0,\n 0.99979,\n 492651e-10,\n 0,\n 0,\n 0.999699,\n 621722e-10,\n 0,\n 88288e-11,\n 0.999572,\n 819715e-10,\n 0,\n 223369e-9,\n 0.999381,\n 111689e-9,\n 0,\n 105414e-8,\n 0.999016,\n 153862e-9,\n 0,\n 26493e-7,\n 0.997437,\n 187667e-9,\n 0,\n 508608e-8,\n 0.993545,\n 155672e-9,\n 0,\n 840554e-8,\n 0.991135,\n 161455e-9,\n 0,\n 0.012629,\n 0.989157,\n 188241e-9,\n 0,\n 0.0177661,\n 0.986874,\n 226229e-9,\n 0,\n 0.0238198,\n 0.983714,\n 268668e-9,\n 0,\n 0.0307887,\n 0.978301,\n 277109e-9,\n 0,\n 0.0386688,\n 0.973227,\n 303446e-9,\n 0,\n 0.0474554,\n 0.967317,\n 341851e-9,\n 0,\n 0.0571428,\n 0.959477,\n 370885e-9,\n 0,\n 0.0677256,\n 0.950012,\n 392753e-9,\n 0,\n 0.0791988,\n 0.939484,\n 42781e-8,\n 0,\n 0.0915576,\n 0.928135,\n 443866e-9,\n 0,\n 0.104798,\n 0.919819,\n 472959e-9,\n 0,\n 0.118918,\n 0.910049,\n 491551e-9,\n 0,\n 0.133915,\n 0.899181,\n 512616e-9,\n 0,\n 0.149788,\n 0.886881,\n 523563e-9,\n 0,\n 0.166537,\n 0.87359,\n 540183e-9,\n 0,\n 0.184164,\n 0.858613,\n 547386e-9,\n 0,\n 0.202669,\n 0.842809,\n 554809e-9,\n 0,\n 0.222056,\n 0.825727,\n 558316e-9,\n 0,\n 0.242329,\n 0.808086,\n 557824e-9,\n 0,\n 0.263492,\n 0.790728,\n 556346e-9,\n 0,\n 0.285551,\n 0.772987,\n 552672e-9,\n 0,\n 0.30851,\n 0.7541,\n 543738e-9,\n 0,\n 0.332376,\n 0.734669,\n 536107e-9,\n 0,\n 0.357153,\n 0.714411,\n 523342e-9,\n 0,\n 0.382845,\n 0.694196,\n 512238e-9,\n 0,\n 0.409454,\n 0.674252,\n 497465e-9,\n 0,\n 0.436977,\n 0.65357,\n 481096e-9,\n 0,\n 0.465404,\n 0.632999,\n 467054e-9,\n 0,\n 0.494713,\n 0.611994,\n 448771e-9,\n 0,\n 0.524864,\n 0.591604,\n 431889e-9,\n 0,\n 0.555779,\n 0.571134,\n 415238e-9,\n 0,\n 0.587302,\n 0.550528,\n 396369e-9,\n 0,\n 0.619048,\n 0.530292,\n 379477e-9,\n 0,\n 0.650794,\n 0.510364,\n 361488e-9,\n 0,\n 0.68254,\n 0.490749,\n 343787e-9,\n 0,\n 0.714286,\n 0.471266,\n 327822e-9,\n 0,\n 0.746032,\n 0.452462,\n 310626e-9,\n 0,\n 0.777778,\n 0.433907,\n 295352e-9,\n 0,\n 0.809524,\n 0.415659,\n 279179e-9,\n 0,\n 0.84127,\n 0.398138,\n 264685e-9,\n 0,\n 0.873016,\n 0.380833,\n 249905e-9,\n 0,\n 0.904762,\n 0.364247,\n 236282e-9,\n 0,\n 0.936508,\n 0.348041,\n 222905e-9,\n 0,\n 0.968254,\n 0.332389,\n 210522e-9,\n 0,\n 1,\n 1,\n 420604e-10,\n 0,\n 0,\n 1,\n 420614e-10,\n 0,\n 0,\n 1,\n 420757e-10,\n 0,\n 0,\n 0.999999,\n 42138e-9,\n 0,\n 0,\n 0.999997,\n 423067e-10,\n 0,\n 0,\n 0.999993,\n 426668e-10,\n 0,\n 0,\n 0.999986,\n 433372e-10,\n 0,\n 0,\n 0.999974,\n 444857e-10,\n 0,\n 0,\n 0.999956,\n 463554e-10,\n 0,\n 0,\n 0.99993,\n 493105e-10,\n 0,\n 0,\n 0.999892,\n 539077e-10,\n 0,\n 0,\n 0.999838,\n 610005e-10,\n 0,\n 0,\n 0.999767,\n 718822e-10,\n 0,\n 0,\n 0.999666,\n 884581e-10,\n 0,\n 365471e-10,\n 0.999525,\n 113398e-9,\n 0,\n 485623e-9,\n 0.999311,\n 150043e-9,\n 0,\n 162096e-8,\n 0.998865,\n 200063e-9,\n 0,\n 355319e-8,\n 0.996278,\n 211014e-9,\n 0,\n 633818e-8,\n 0.992956,\n 189672e-9,\n 0,\n 0.0100043,\n 0.991017,\n 210262e-9,\n 0,\n 0.0145648,\n 0.989055,\n 244292e-9,\n 0,\n 0.0200237,\n 0.986741,\n 290481e-9,\n 0,\n 0.0263798,\n 0.983288,\n 334303e-9,\n 0,\n 0.033629,\n 0.977784,\n 340307e-9,\n 0,\n 0.0417652,\n 0.973037,\n 377864e-9,\n 0,\n 0.0507821,\n 0.967181,\n 4239e-7,\n 0,\n 0.060673,\n 0.958971,\n 443854e-9,\n 0,\n 0.0714314,\n 0.950093,\n 483039e-9,\n 0,\n 0.0830518,\n 0.939552,\n 517934e-9,\n 0,\n 0.0955288,\n 0.927678,\n 539449e-9,\n 0,\n 0.108859,\n 0.918278,\n 568604e-9,\n 0,\n 0.123038,\n 0.908449,\n 588505e-9,\n 0,\n 0.138065,\n 0.897713,\n 612473e-9,\n 0,\n 0.153938,\n 0.885533,\n 625575e-9,\n 0,\n 0.170657,\n 0.872131,\n 63854e-8,\n 0,\n 0.188224,\n 0.857517,\n 647034e-9,\n 0,\n 0.20664,\n 0.841796,\n 65209e-8,\n 0,\n 0.225909,\n 0.824726,\n 6544e-7,\n 0,\n 0.246035,\n 0.807297,\n 655744e-9,\n 0,\n 0.267022,\n 0.789058,\n 646716e-9,\n 0,\n 0.288878,\n 0.77189,\n 643898e-9,\n 0,\n 0.311607,\n 0.753082,\n 629973e-9,\n 0,\n 0.335216,\n 0.7341,\n 621564e-9,\n 0,\n 0.359713,\n 0.714094,\n 605171e-9,\n 0,\n 0.385103,\n 0.693839,\n 588752e-9,\n 0,\n 0.41139,\n 0.673891,\n 573294e-9,\n 0,\n 0.438576,\n 0.653565,\n 552682e-9,\n 0,\n 0.466656,\n 0.633326,\n 533446e-9,\n 0,\n 0.495617,\n 0.612582,\n 514635e-9,\n 0,\n 0.525431,\n 0.59205,\n 49303e-8,\n 0,\n 0.556041,\n 0.571918,\n 471842e-9,\n 0,\n 0.587338,\n 0.551572,\n 451713e-9,\n 0,\n 0.619048,\n 0.531553,\n 430049e-9,\n 0,\n 0.650794,\n 0.51175,\n 410445e-9,\n 0,\n 0.68254,\n 0.49238,\n 390098e-9,\n 0,\n 0.714286,\n 0.473143,\n 370033e-9,\n 0,\n 0.746032,\n 0.45423,\n 351205e-9,\n 0,\n 0.777778,\n 0.435963,\n 332049e-9,\n 0,\n 0.809524,\n 0.41787,\n 315021e-9,\n 0,\n 0.84127,\n 0.400387,\n 297315e-9,\n 0,\n 0.873016,\n 0.383332,\n 281385e-9,\n 0,\n 0.904762,\n 0.366665,\n 265397e-9,\n 0,\n 0.936508,\n 0.350633,\n 250601e-9,\n 0,\n 0.968254,\n 0.334964,\n 23589e-8,\n 0,\n 1,\n 1,\n 643736e-10,\n 0,\n 0,\n 1,\n 64375e-9,\n 0,\n 0,\n 1,\n 643947e-10,\n 0,\n 0,\n 0.999999,\n 64481e-9,\n 0,\n 0,\n 0.999997,\n 647143e-10,\n 0,\n 0,\n 0.999994,\n 652119e-10,\n 0,\n 0,\n 0.999985,\n 661359e-10,\n 0,\n 0,\n 0.999972,\n 677116e-10,\n 0,\n 0,\n 0.999952,\n 702599e-10,\n 0,\n 0,\n 0.999922,\n 742517e-10,\n 0,\n 0,\n 0.99988,\n 803906e-10,\n 0,\n 0,\n 0.99982,\n 897315e-10,\n 0,\n 0,\n 0.999741,\n 103838e-9,\n 0,\n 0,\n 0.999629,\n 12496e-8,\n 0,\n 149024e-9,\n 0.999474,\n 156161e-9,\n 0,\n 861027e-9,\n 0.999229,\n 201034e-9,\n 0,\n 231198e-8,\n 0.998662,\n 259069e-9,\n 0,\n 458147e-8,\n 0.995299,\n 245439e-9,\n 0,\n 770895e-8,\n 0.992732,\n 24498e-8,\n 0,\n 0.0117126,\n 0.990847,\n 273211e-9,\n 0,\n 0.0165989,\n 0.988911,\n 316492e-9,\n 0,\n 0.0223674,\n 0.98654,\n 37161e-8,\n 0,\n 0.0290135,\n 0.982636,\n 410352e-9,\n 0,\n 0.0365309,\n 0.977346,\n 421756e-9,\n 0,\n 0.0449117,\n 0.972909,\n 475578e-9,\n 0,\n 0.0541481,\n 0.966821,\n 522482e-9,\n 0,\n 0.0642326,\n 0.958686,\n 545008e-9,\n 0,\n 0.075158,\n 0.949754,\n 589286e-9,\n 0,\n 0.0869181,\n 0.939184,\n 619995e-9,\n 0,\n 0.0995074,\n 0.927505,\n 654266e-9,\n 0,\n 0.112922,\n 0.916606,\n 682362e-9,\n 0,\n 0.127157,\n 0.906707,\n 704286e-9,\n 0,\n 0.142212,\n 0.895937,\n 725909e-9,\n 0,\n 0.158085,\n 0.883913,\n 743939e-9,\n 0,\n 0.174776,\n 0.870642,\n 755157e-9,\n 0,\n 0.192287,\n 0.856241,\n 764387e-9,\n 0,\n 0.210619,\n 0.84069,\n 771032e-9,\n 0,\n 0.229775,\n 0.823728,\n 765906e-9,\n 0,\n 0.249761,\n 0.806481,\n 767604e-9,\n 0,\n 0.270582,\n 0.787924,\n 754385e-9,\n 0,\n 0.292243,\n 0.770588,\n 749668e-9,\n 0,\n 0.314753,\n 0.751991,\n 731613e-9,\n 0,\n 0.338118,\n 0.733407,\n 717655e-9,\n 0,\n 0.362347,\n 0.713688,\n 700604e-9,\n 0,\n 0.387447,\n 0.693595,\n 678765e-9,\n 0,\n 0.413424,\n 0.673426,\n 657042e-9,\n 0,\n 0.440284,\n 0.65359,\n 635892e-9,\n 0,\n 0.468027,\n 0.633576,\n 611569e-9,\n 0,\n 0.496645,\n 0.613144,\n 586011e-9,\n 0,\n 0.526122,\n 0.592711,\n 563111e-9,\n 0,\n 0.556417,\n 0.572722,\n 537699e-9,\n 0,\n 0.587451,\n 0.552762,\n 512556e-9,\n 0,\n 0.619048,\n 0.532985,\n 489757e-9,\n 0,\n 0.650794,\n 0.513219,\n 464139e-9,\n 0,\n 0.68254,\n 0.493992,\n 442193e-9,\n 0,\n 0.714286,\n 0.47509,\n 418629e-9,\n 0,\n 0.746032,\n 0.456287,\n 397045e-9,\n 0,\n 0.777778,\n 0.438152,\n 375504e-9,\n 0,\n 0.809524,\n 0.420294,\n 35492e-8,\n 0,\n 0.84127,\n 0.402749,\n 335327e-9,\n 0,\n 0.873016,\n 0.385879,\n 316422e-9,\n 0,\n 0.904762,\n 0.369352,\n 298333e-9,\n 0,\n 0.936508,\n 0.353301,\n 281417e-9,\n 0,\n 0.968254,\n 0.337781,\n 265203e-9,\n 0,\n 1,\n 1,\n 968267e-10,\n 0,\n 0,\n 1,\n 968284e-10,\n 0,\n 0,\n 1,\n 968556e-10,\n 0,\n 0,\n 0.999999,\n 969733e-10,\n 0,\n 0,\n 0.999997,\n 972913e-10,\n 0,\n 0,\n 0.999993,\n 979688e-10,\n 0,\n 0,\n 0.999984,\n 992239e-10,\n 0,\n 0,\n 0.999969,\n 101356e-9,\n 0,\n 0,\n 0.999946,\n 104784e-9,\n 0,\n 0,\n 0.999913,\n 110111e-9,\n 0,\n 0,\n 0.999868,\n 118217e-9,\n 0,\n 0,\n 0.999801,\n 130396e-9,\n 0,\n 0,\n 0.999712,\n 148523e-9,\n 0,\n 124907e-10,\n 0.999589,\n 175233e-9,\n 0,\n 355405e-9,\n 0.999416,\n 213999e-9,\n 0,\n 13528e-7,\n 0.999136,\n 268529e-9,\n 0,\n 312557e-8,\n 0.998367,\n 333088e-9,\n 0,\n 573045e-8,\n 0.994701,\n 304757e-9,\n 0,\n 919397e-8,\n 0.992497,\n 318031e-9,\n 0,\n 0.0135261,\n 0.990608,\n 353863e-9,\n 0,\n 0.0187278,\n 0.988715,\n 409044e-9,\n 0,\n 0.0247947,\n 0.986241,\n 472967e-9,\n 0,\n 0.0317196,\n 0.981696,\n 495104e-9,\n 0,\n 0.039494,\n 0.977097,\n 532873e-9,\n 0,\n 0.0481087,\n 0.972583,\n 594447e-9,\n 0,\n 0.0575549,\n 0.966142,\n 636867e-9,\n 0,\n 0.0678242,\n 0.95823,\n 669899e-9,\n 0,\n 0.0789089,\n 0.949677,\n 719499e-9,\n 0,\n 0.0908023,\n 0.939226,\n 750584e-9,\n 0,\n 0.103499,\n 0.927501,\n 793183e-9,\n 0,\n 0.116993,\n 0.915199,\n 81995e-8,\n 0,\n 0.131282,\n 0.90498,\n 847654e-9,\n 0,\n 0.146364,\n 0.894243,\n 868929e-9,\n 0,\n 0.162237,\n 0.882154,\n 884278e-9,\n 0,\n 0.178902,\n 0.869161,\n 898108e-9,\n 0,\n 0.196358,\n 0.854751,\n 901254e-9,\n 0,\n 0.21461,\n 0.839368,\n 90679e-8,\n 0,\n 0.23366,\n 0.822874,\n 901541e-9,\n 0,\n 0.253512,\n 0.805514,\n 897297e-9,\n 0,\n 0.274174,\n 0.78716,\n 881856e-9,\n 0,\n 0.29565,\n 0.769061,\n 870032e-9,\n 0,\n 0.31795,\n 0.751,\n 851719e-9,\n 0,\n 0.341081,\n 0.732614,\n 830671e-9,\n 0,\n 0.365053,\n 0.713171,\n 806569e-9,\n 0,\n 0.389874,\n 0.693472,\n 78338e-8,\n 0,\n 0.415553,\n 0.673528,\n 756404e-9,\n 0,\n 0.442098,\n 0.653397,\n 726872e-9,\n 0,\n 0.469512,\n 0.633781,\n 700494e-9,\n 0,\n 0.497794,\n 0.613877,\n 67105e-8,\n 0,\n 0.526935,\n 0.593506,\n 640361e-9,\n 0,\n 0.556908,\n 0.573667,\n 613502e-9,\n 0,\n 0.587657,\n 0.553932,\n 583177e-9,\n 0,\n 0.61906,\n 0.534345,\n 554375e-9,\n 0,\n 0.650794,\n 0.515042,\n 527811e-9,\n 0,\n 0.68254,\n 0.495674,\n 499367e-9,\n 0,\n 0.714286,\n 0.477132,\n 47429e-8,\n 0,\n 0.746032,\n 0.458609,\n 447726e-9,\n 0,\n 0.777778,\n 0.440354,\n 424205e-9,\n 0,\n 0.809524,\n 0.422765,\n 399549e-9,\n 0,\n 0.84127,\n 0.405472,\n 378315e-9,\n 0,\n 0.873016,\n 0.388482,\n 355327e-9,\n 0,\n 0.904762,\n 0.372191,\n 336122e-9,\n 0,\n 0.936508,\n 0.356099,\n 315247e-9,\n 0,\n 0.968254,\n 0.340737,\n 29794e-8,\n 0,\n 1,\n 1,\n 143327e-9,\n 0,\n 0,\n 1,\n 14333e-8,\n 0,\n 0,\n 1,\n 143366e-9,\n 0,\n 0,\n 0.999999,\n 143524e-9,\n 0,\n 0,\n 0.999996,\n 143952e-9,\n 0,\n 0,\n 0.999991,\n 144862e-9,\n 0,\n 0,\n 0.999981,\n 146544e-9,\n 0,\n 0,\n 0.999966,\n 149391e-9,\n 0,\n 0,\n 0.999941,\n 153946e-9,\n 0,\n 0,\n 0.999905,\n 160971e-9,\n 0,\n 0,\n 0.999852,\n 171562e-9,\n 0,\n 0,\n 0.99978,\n 18729e-8,\n 0,\n 0,\n 0.999681,\n 210386e-9,\n 0,\n 826239e-10,\n 0.999546,\n 243906e-9,\n 0,\n 664807e-9,\n 0.999352,\n 291739e-9,\n 0,\n 196192e-8,\n 0.999027,\n 357419e-9,\n 0,\n 405941e-8,\n 0.997886,\n 422349e-9,\n 0,\n 699664e-8,\n 0.99419,\n 385008e-9,\n 0,\n 0.0107896,\n 0.99214,\n 409775e-9,\n 0,\n 0.0154415,\n 0.990274,\n 456418e-9,\n 0,\n 0.0209488,\n 0.988455,\n 527008e-9,\n 0,\n 0.0273037,\n 0.985804,\n 597685e-9,\n 0,\n 0.0344969,\n 0.98103,\n 613124e-9,\n 0,\n 0.0425183,\n 0.976674,\n 668321e-9,\n 0,\n 0.0513575,\n 0.972021,\n 736985e-9,\n 0,\n 0.0610046,\n 0.965274,\n 773789e-9,\n 0,\n 0.0714508,\n 0.958046,\n 830852e-9,\n 0,\n 0.0826877,\n 0.949333,\n 875766e-9,\n 0,\n 0.0947085,\n 0.939135,\n 917088e-9,\n 0,\n 0.107507,\n 0.927119,\n 952244e-9,\n 0,\n 0.121078,\n 0.91469,\n 990626e-9,\n 0,\n 0.135419,\n 0.903006,\n 101304e-8,\n 0,\n 0.150526,\n 0.892368,\n 103834e-8,\n 0,\n 0.166399,\n 0.880231,\n 105002e-8,\n 0,\n 0.183038,\n 0.867432,\n 106331e-8,\n 0,\n 0.200443,\n 0.853208,\n 106783e-8,\n 0,\n 0.218618,\n 0.837956,\n 106458e-8,\n 0,\n 0.237566,\n 0.821772,\n 105945e-8,\n 0,\n 0.257291,\n 0.804328,\n 104685e-8,\n 0,\n 0.2778,\n 0.786465,\n 103178e-8,\n 0,\n 0.2991,\n 0.768004,\n 101077e-8,\n 0,\n 0.321199,\n 0.74972,\n 985504e-9,\n 0,\n 0.344106,\n 0.731682,\n 962893e-9,\n 0,\n 0.36783,\n 0.712813,\n 932146e-9,\n 0,\n 0.392383,\n 0.693139,\n 89871e-8,\n 0,\n 0.417774,\n 0.673566,\n 869678e-9,\n 0,\n 0.444013,\n 0.653483,\n 835525e-9,\n 0,\n 0.471107,\n 0.633891,\n 799853e-9,\n 0,\n 0.49906,\n 0.614433,\n 766838e-9,\n 0,\n 0.527869,\n 0.594586,\n 732227e-9,\n 0,\n 0.557517,\n 0.574769,\n 696442e-9,\n 0,\n 0.587966,\n 0.555149,\n 663935e-9,\n 0,\n 0.61913,\n 0.535898,\n 629826e-9,\n 0,\n 0.650794,\n 0.516753,\n 596486e-9,\n 0,\n 0.68254,\n 0.497816,\n 567078e-9,\n 0,\n 0.714286,\n 0.479034,\n 534399e-9,\n 0,\n 0.746032,\n 0.460975,\n 507013e-9,\n 0,\n 0.777778,\n 0.442935,\n 477421e-9,\n 0,\n 0.809524,\n 0.425263,\n 451101e-9,\n 0,\n 0.84127,\n 0.408248,\n 424964e-9,\n 0,\n 0.873016,\n 0.391339,\n 39993e-8,\n 0,\n 0.904762,\n 0.37513,\n 377619e-9,\n 0,\n 0.936508,\n 0.359172,\n 354418e-9,\n 0,\n 0.968254,\n 0.343876,\n 334823e-9,\n 0,\n 1,\n 1,\n 209042e-9,\n 0,\n 0,\n 1,\n 209045e-9,\n 0,\n 0,\n 1,\n 209093e-9,\n 0,\n 0,\n 0.999999,\n 209304e-9,\n 0,\n 0,\n 0.999996,\n 209871e-9,\n 0,\n 0,\n 0.999991,\n 211078e-9,\n 0,\n 0,\n 0.999979,\n 213304e-9,\n 0,\n 0,\n 0.999963,\n 217061e-9,\n 0,\n 0,\n 0.999933,\n 223042e-9,\n 0,\n 0,\n 0.999894,\n 232206e-9,\n 0,\n 0,\n 0.999837,\n 245901e-9,\n 0,\n 0,\n 0.999756,\n 266023e-9,\n 0,\n 102927e-11,\n 0.999648,\n 295204e-9,\n 0,\n 233468e-9,\n 0.999499,\n 336958e-9,\n 0,\n 108237e-8,\n 0.999283,\n 395563e-9,\n 0,\n 268832e-8,\n 0.998896,\n 473785e-9,\n 0,\n 511138e-8,\n 0.997006,\n 520008e-9,\n 0,\n 837705e-8,\n 0.993819,\n 497261e-9,\n 0,\n 0.0124928,\n 0.991632,\n 523722e-9,\n 0,\n 0.0174561,\n 0.989875,\n 587258e-9,\n 0,\n 0.0232596,\n 0.988109,\n 676329e-9,\n 0,\n 0.0298932,\n 0.985155,\n 747701e-9,\n 0,\n 0.0373453,\n 0.980479,\n 768803e-9,\n 0,\n 0.0456045,\n 0.976271,\n 841054e-9,\n 0,\n 0.0546593,\n 0.971347,\n 911469e-9,\n 0,\n 0.0644994,\n 0.964528,\n 953057e-9,\n 0,\n 0.0751152,\n 0.957632,\n 102221e-8,\n 0,\n 0.0864981,\n 0.948681,\n 106122e-8,\n 0,\n 0.0986407,\n 0.938716,\n 111857e-8,\n 0,\n 0.111537,\n 0.926629,\n 114762e-8,\n 0,\n 0.125182,\n 0.914025,\n 118995e-8,\n 0,\n 0.139571,\n 0.901026,\n 121228e-8,\n 0,\n 0.154703,\n 0.890358,\n 123946e-8,\n 0,\n 0.170576,\n 0.878283,\n 12527e-7,\n 0,\n 0.18719,\n 0.865459,\n 125536e-8,\n 0,\n 0.204547,\n 0.851407,\n 126134e-8,\n 0,\n 0.222648,\n 0.836276,\n 124759e-8,\n 0,\n 0.241498,\n 0.820436,\n 124443e-8,\n 0,\n 0.261101,\n 0.803253,\n 122071e-8,\n 0,\n 0.281465,\n 0.785562,\n 120107e-8,\n 0,\n 0.302595,\n 0.76718,\n 117762e-8,\n 0,\n 0.324501,\n 0.748551,\n 114289e-8,\n 0,\n 0.347192,\n 0.730564,\n 110872e-8,\n 0,\n 0.370679,\n 0.712253,\n 107636e-8,\n 0,\n 0.394973,\n 0.692867,\n 103646e-8,\n 0,\n 0.420085,\n 0.673695,\n 996793e-9,\n 0,\n 0.446027,\n 0.653912,\n 95675e-8,\n 0,\n 0.47281,\n 0.634129,\n 916739e-9,\n 0,\n 0.500441,\n 0.615004,\n 874401e-9,\n 0,\n 0.528921,\n 0.595587,\n 833411e-9,\n 0,\n 0.558244,\n 0.575965,\n 794556e-9,\n 0,\n 0.588384,\n 0.5566,\n 75196e-8,\n 0,\n 0.619281,\n 0.537428,\n 716381e-9,\n 0,\n 0.650795,\n 0.518623,\n 676558e-9,\n 0,\n 0.68254,\n 0.499964,\n 64074e-8,\n 0,\n 0.714286,\n 0.481356,\n 605984e-9,\n 0,\n 0.746032,\n 0.463279,\n 570256e-9,\n 0,\n 0.777778,\n 0.445673,\n 540138e-9,\n 0,\n 0.809524,\n 0.428032,\n 507299e-9,\n 0,\n 0.84127,\n 0.411112,\n 479553e-9,\n 0,\n 0.873016,\n 0.394444,\n 450737e-9,\n 0,\n 0.904762,\n 0.378247,\n 424269e-9,\n 0,\n 0.936508,\n 0.362415,\n 399111e-9,\n 0,\n 0.968254,\n 0.347103,\n 375274e-9,\n 0,\n 1,\n 1,\n 300729e-9,\n 0,\n 0,\n 1,\n 300733e-9,\n 0,\n 0,\n 1,\n 300797e-9,\n 0,\n 0,\n 0.999998,\n 301072e-9,\n 0,\n 0,\n 0.999996,\n 301817e-9,\n 0,\n 0,\n 0.999989,\n 303398e-9,\n 0,\n 0,\n 0.999977,\n 306309e-9,\n 0,\n 0,\n 0.999958,\n 311209e-9,\n 0,\n 0,\n 0.999927,\n 318975e-9,\n 0,\n 0,\n 0.999884,\n 330804e-9,\n 0,\n 0,\n 0.99982,\n 34834e-8,\n 0,\n 0,\n 0.999733,\n 373854e-9,\n 0,\n 326995e-10,\n 0.999613,\n 410424e-9,\n 0,\n 477174e-9,\n 0.999447,\n 462047e-9,\n 0,\n 161099e-8,\n 0.999204,\n 533322e-9,\n 0,\n 353153e-8,\n 0.998725,\n 624964e-9,\n 0,\n 627965e-8,\n 0.995871,\n 631786e-9,\n 0,\n 98693e-7,\n 0.993194,\n 632017e-9,\n 0,\n 0.0143011,\n 0.991541,\n 68923e-8,\n 0,\n 0.019568,\n 0.989773,\n 766892e-9,\n 0,\n 0.0256593,\n 0.987647,\n 863668e-9,\n 0,\n 0.0325625,\n 0.984193,\n 922089e-9,\n 0,\n 0.0402647,\n 0.980016,\n 970749e-9,\n 0,\n 0.0487532,\n 0.975859,\n 106027e-8,\n 0,\n 0.058016,\n 0.970514,\n 112239e-8,\n 0,\n 0.0680419,\n 0.963625,\n 117212e-8,\n 0,\n 0.0788208,\n 0.956959,\n 125211e-8,\n 0,\n 0.0903439,\n 0.947956,\n 129411e-8,\n 0,\n 0.102604,\n 0.93809,\n 135879e-8,\n 0,\n 0.115594,\n 0.92659,\n 139309e-8,\n 0,\n 0.129309,\n 0.913829,\n 143253e-8,\n 0,\n 0.143745,\n 0.90005,\n 145809e-8,\n 0,\n 0.158901,\n 0.888129,\n 14748e-7,\n 0,\n 0.174774,\n 0.87607,\n 148756e-8,\n 0,\n 0.191365,\n 0.863461,\n 148714e-8,\n 0,\n 0.208674,\n 0.849594,\n 148892e-8,\n 0,\n 0.226705,\n 0.834531,\n 146496e-8,\n 0,\n 0.245461,\n 0.81903,\n 14579e-7,\n 0,\n 0.264947,\n 0.802122,\n 143039e-8,\n 0,\n 0.28517,\n 0.78445,\n 139717e-8,\n 0,\n 0.306137,\n 0.766434,\n 136312e-8,\n 0,\n 0.327857,\n 0.747816,\n 132597e-8,\n 0,\n 0.350341,\n 0.729519,\n 128323e-8,\n 0,\n 0.373598,\n 0.711454,\n 123803e-8,\n 0,\n 0.397642,\n 0.692699,\n 119097e-8,\n 0,\n 0.422485,\n 0.673723,\n 114565e-8,\n 0,\n 0.448139,\n 0.654386,\n 109552e-8,\n 0,\n 0.474619,\n 0.634673,\n 104553e-8,\n 0,\n 0.501933,\n 0.615554,\n 99985e-8,\n 0,\n 0.530089,\n 0.596462,\n 948207e-9,\n 0,\n 0.559087,\n 0.577385,\n 902299e-9,\n 0,\n 0.588913,\n 0.558257,\n 856448e-9,\n 0,\n 0.619525,\n 0.5392,\n 810395e-9,\n 0,\n 0.650826,\n 0.520543,\n 768558e-9,\n 0,\n 0.68254,\n 0.502206,\n 7239e-7,\n 0,\n 0.714286,\n 0.48402,\n 685794e-9,\n 0,\n 0.746032,\n 0.465779,\n 64471e-8,\n 0,\n 0.777778,\n 0.448455,\n 609583e-9,\n 0,\n 0.809524,\n 0.431091,\n 57227e-8,\n 0,\n 0.84127,\n 0.414147,\n 54042e-8,\n 0,\n 0.873016,\n 0.39765,\n 506545e-9,\n 0,\n 0.904762,\n 0.381576,\n 477635e-9,\n 0,\n 0.936508,\n 0.365881,\n 448446e-9,\n 0,\n 0.968254,\n 0.350582,\n 421424e-9,\n 0,\n 1,\n 1,\n 427144e-9,\n 0,\n 0,\n 1,\n 427151e-9,\n 0,\n 0,\n 1,\n 427232e-9,\n 0,\n 0,\n 0.999998,\n 42759e-8,\n 0,\n 0,\n 0.999995,\n 428555e-9,\n 0,\n 0,\n 0.999988,\n 430603e-9,\n 0,\n 0,\n 0.999976,\n 434368e-9,\n 0,\n 0,\n 0.999952,\n 440688e-9,\n 0,\n 0,\n 0.999919,\n 450667e-9,\n 0,\n 0,\n 0.999871,\n 46578e-8,\n 0,\n 0,\n 0.999801,\n 488024e-9,\n 0,\n 0,\n 0.999704,\n 520092e-9,\n 0,\n 129791e-9,\n 0.999572,\n 565553e-9,\n 0,\n 821056e-9,\n 0.999389,\n 628906e-9,\n 0,\n 225241e-8,\n 0.999114,\n 714911e-9,\n 0,\n 449109e-8,\n 0.998488,\n 819218e-9,\n 0,\n 756249e-8,\n 0.995234,\n 80415e-8,\n 0,\n 0.0114716,\n 0.993021,\n 830181e-9,\n 0,\n 0.0162131,\n 0.991407,\n 902645e-9,\n 0,\n 0.021776,\n 0.989625,\n 996934e-9,\n 0,\n 0.0281471,\n 0.987064,\n 109707e-8,\n 0,\n 0.0353118,\n 0.983265,\n 114353e-8,\n 0,\n 0.0432562,\n 0.979535,\n 12272e-7,\n 0,\n 0.0519665,\n 0.975224,\n 132642e-8,\n 0,\n 0.0614298,\n 0.969574,\n 138092e-8,\n 0,\n 0.0716348,\n 0.963021,\n 145896e-8,\n 0,\n 0.0825709,\n 0.956046,\n 152834e-8,\n 0,\n 0.094229,\n 0.947136,\n 158217e-8,\n 0,\n 0.106602,\n 0.937313,\n 16347e-7,\n 0,\n 0.119682,\n 0.926073,\n 168383e-8,\n 0,\n 0.133465,\n 0.913121,\n 171627e-8,\n 0,\n 0.147947,\n 0.899165,\n 174229e-8,\n 0,\n 0.163125,\n 0.885891,\n 176137e-8,\n 0,\n 0.178998,\n 0.873783,\n 176406e-8,\n 0,\n 0.195566,\n 0.861331,\n 176156e-8,\n 0,\n 0.21283,\n 0.847569,\n 175346e-8,\n 0,\n 0.230793,\n 0.832785,\n 172753e-8,\n 0,\n 0.249459,\n 0.817442,\n 170204e-8,\n 0,\n 0.268832,\n 0.800613,\n 166576e-8,\n 0,\n 0.28892,\n 0.783597,\n 162909e-8,\n 0,\n 0.30973,\n 0.76571,\n 15826e-7,\n 0,\n 0.331271,\n 0.747021,\n 153106e-8,\n 0,\n 0.353554,\n 0.728593,\n 148036e-8,\n 0,\n 0.37659,\n 0.710661,\n 142808e-8,\n 0,\n 0.400391,\n 0.692426,\n 136906e-8,\n 0,\n 0.424973,\n 0.673623,\n 131066e-8,\n 0,\n 0.450347,\n 0.65494,\n 125569e-8,\n 0,\n 0.476531,\n 0.635448,\n 119517e-8,\n 0,\n 0.503535,\n 0.616221,\n 113828e-8,\n 0,\n 0.531372,\n 0.597531,\n 10816e-7,\n 0,\n 0.560047,\n 0.578795,\n 102673e-8,\n 0,\n 0.589554,\n 0.559892,\n 970985e-9,\n 0,\n 0.619869,\n 0.541307,\n 919773e-9,\n 0,\n 0.650923,\n 0.522608,\n 868479e-9,\n 0,\n 0.68254,\n 0.504484,\n 82137e-8,\n 0,\n 0.714286,\n 0.486603,\n 772916e-9,\n 0,\n 0.746032,\n 0.468802,\n 730353e-9,\n 0,\n 0.777778,\n 0.451172,\n 684955e-9,\n 0,\n 0.809524,\n 0.434348,\n 647565e-9,\n 0,\n 0.84127,\n 0.417445,\n 605863e-9,\n 0,\n 0.873016,\n 0.401077,\n 571885e-9,\n 0,\n 0.904762,\n 0.385039,\n 536034e-9,\n 0,\n 0.936508,\n 0.369483,\n 504227e-9,\n 0,\n 0.968254,\n 0.354272,\n 473165e-9,\n 0,\n 1,\n 1,\n 599525e-9,\n 0,\n 0,\n 1,\n 599533e-9,\n 0,\n 0,\n 1,\n 599639e-9,\n 0,\n 0,\n 0.999998,\n 600097e-9,\n 0,\n 0,\n 0.999994,\n 601336e-9,\n 0,\n 0,\n 0.999987,\n 603958e-9,\n 0,\n 0,\n 0.999972,\n 608775e-9,\n 0,\n 0,\n 0.999949,\n 616842e-9,\n 0,\n 0,\n 0.999912,\n 629534e-9,\n 0,\n 0,\n 0.999857,\n 648658e-9,\n 0,\n 0,\n 0.999781,\n 676615e-9,\n 0,\n 538873e-11,\n 0.999674,\n 716574e-9,\n 0,\n 308602e-9,\n 0.999528,\n 772641e-9,\n 0,\n 127003e-8,\n 0.999326,\n 849806e-9,\n 0,\n 300783e-8,\n 0.999009,\n 952682e-9,\n 0,\n 556637e-8,\n 0.998112,\n 106394e-8,\n 0,\n 895889e-8,\n 0.994496,\n 102228e-8,\n 0,\n 0.0131827,\n 0.992806,\n 108586e-8,\n 0,\n 0.0182277,\n 0.991211,\n 11759e-7,\n 0,\n 0.0240795,\n 0.989415,\n 128955e-8,\n 0,\n 0.030723,\n 0.986499,\n 139038e-8,\n 0,\n 0.0381418,\n 0.982679,\n 144539e-8,\n 0,\n 0.046321,\n 0.978839,\n 153954e-8,\n 0,\n 0.0552459,\n 0.974295,\n 164417e-8,\n 0,\n 0.0649034,\n 0.968784,\n 171517e-8,\n 0,\n 0.0752814,\n 0.962324,\n 180282e-8,\n 0,\n 0.0863693,\n 0.954956,\n 186387e-8,\n 0,\n 0.0981578,\n 0.94624,\n 193817e-8,\n 0,\n 0.110639,\n 0.936517,\n 198156e-8,\n 0,\n 0.123806,\n 0.925186,\n 203042e-8,\n 0,\n 0.137655,\n 0.91252,\n 20664e-7,\n 0,\n 0.15218,\n 0.898441,\n 207822e-8,\n 0,\n 0.16738,\n 0.884394,\n 20992e-7,\n 0,\n 0.183253,\n 0.871273,\n 208748e-8,\n 0,\n 0.199799,\n 0.859057,\n 208686e-8,\n 0,\n 0.21702,\n 0.845243,\n 205519e-8,\n 0,\n 0.234918,\n 0.830723,\n 202868e-8,\n 0,\n 0.253496,\n 0.815801,\n 199501e-8,\n 0,\n 0.272761,\n 0.79914,\n 194193e-8,\n 0,\n 0.292719,\n 0.782372,\n 188824e-8,\n 0,\n 0.313377,\n 0.76482,\n 183695e-8,\n 0,\n 0.334745,\n 0.746586,\n 177418e-8,\n 0,\n 0.356833,\n 0.7281,\n 170628e-8,\n 0,\n 0.379654,\n 0.709842,\n 164063e-8,\n 0,\n 0.403221,\n 0.692019,\n 157355e-8,\n 0,\n 0.427548,\n 0.67364,\n 150262e-8,\n 0,\n 0.452651,\n 0.655277,\n 143473e-8,\n 0,\n 0.478545,\n 0.636438,\n 136371e-8,\n 0,\n 0.505246,\n 0.617364,\n 129911e-8,\n 0,\n 0.532768,\n 0.598603,\n 123014e-8,\n 0,\n 0.561122,\n 0.580195,\n 116587e-8,\n 0,\n 0.590309,\n 0.561786,\n 110398e-8,\n 0,\n 0.620318,\n 0.543377,\n 104148e-8,\n 0,\n 0.651102,\n 0.525093,\n 983984e-9,\n 0,\n 0.682545,\n 0.506791,\n 92667e-8,\n 0,\n 0.714286,\n 0.489291,\n 874326e-9,\n 0,\n 0.746032,\n 0.471811,\n 821734e-9,\n 0,\n 0.777778,\n 0.454435,\n 774698e-9,\n 0,\n 0.809524,\n 0.437493,\n 727302e-9,\n 0,\n 0.84127,\n 0.420977,\n 684039e-9,\n 0,\n 0.873016,\n 0.404729,\n 64373e-8,\n 0,\n 0.904762,\n 0.388756,\n 60285e-8,\n 0,\n 0.936508,\n 0.373344,\n 56765e-8,\n 0,\n 0.968254,\n 0.358191,\n 531929e-9,\n 0,\n 1,\n 1,\n 832169e-9,\n 0,\n 0,\n 1,\n 832178e-9,\n 0,\n 0,\n 1,\n 83231e-8,\n 0,\n 0,\n 0.999998,\n 832893e-9,\n 0,\n 0,\n 0.999995,\n 834465e-9,\n 0,\n 0,\n 0.999985,\n 837791e-9,\n 0,\n 0,\n 0.999969,\n 843893e-9,\n 0,\n 0,\n 0.999944,\n 854086e-9,\n 0,\n 0,\n 0.999903,\n 870071e-9,\n 0,\n 0,\n 0.999843,\n 894042e-9,\n 0,\n 0,\n 0.999759,\n 928865e-9,\n 0,\n 531805e-10,\n 0.999643,\n 978242e-9,\n 0,\n 579365e-9,\n 0.99948,\n 104684e-8,\n 0,\n 182774e-8,\n 0.999255,\n 114012e-8,\n 0,\n 387804e-8,\n 0.998885,\n 126188e-8,\n 0,\n 675709e-8,\n 0.997405,\n 135888e-8,\n 0,\n 0.010468,\n 0.99424,\n 133626e-8,\n 0,\n 0.0150018,\n 0.992458,\n 140905e-8,\n 0,\n 0.0203443,\n 0.990929,\n 152305e-8,\n 0,\n 0.0264786,\n 0.989116,\n 165882e-8,\n 0,\n 0.0333875,\n 0.985624,\n 174128e-8,\n 0,\n 0.0410536,\n 0.982003,\n 182108e-8,\n 0,\n 0.0494609,\n 0.978336,\n 194498e-8,\n 0,\n 0.0585941,\n 0.973184,\n 202708e-8,\n 0,\n 0.0684396,\n 0.9678,\n 212166e-8,\n 0,\n 0.0789851,\n 0.961348,\n 221366e-8,\n 0,\n 0.0902199,\n 0.953841,\n 228219e-8,\n 0,\n 0.102134,\n 0.94534,\n 235662e-8,\n 0,\n 0.114721,\n 0.935552,\n 240572e-8,\n 0,\n 0.127972,\n 0.924064,\n 244405e-8,\n 0,\n 0.141884,\n 0.911827,\n 247557e-8,\n 0,\n 0.156451,\n 0.897731,\n 248374e-8,\n 0,\n 0.171672,\n 0.883409,\n 249863e-8,\n 0,\n 0.187545,\n 0.868625,\n 246688e-8,\n 0,\n 0.20407,\n 0.856529,\n 246523e-8,\n 0,\n 0.221249,\n 0.842999,\n 242368e-8,\n 0,\n 0.239083,\n 0.828505,\n 237354e-8,\n 0,\n 0.257578,\n 0.813825,\n 232588e-8,\n 0,\n 0.276738,\n 0.797813,\n 226731e-8,\n 0,\n 0.296569,\n 0.781097,\n 219704e-8,\n 0,\n 0.31708,\n 0.764038,\n 212394e-8,\n 0,\n 0.338281,\n 0.746067,\n 204786e-8,\n 0,\n 0.360181,\n 0.727687,\n 196728e-8,\n 0,\n 0.382794,\n 0.709571,\n 188779e-8,\n 0,\n 0.406133,\n 0.691503,\n 180532e-8,\n 0,\n 0.430213,\n 0.673673,\n 171849e-8,\n 0,\n 0.45505,\n 0.655732,\n 164147e-8,\n 0,\n 0.480662,\n 0.637399,\n 155858e-8,\n 0,\n 0.507065,\n 0.618616,\n 147641e-8,\n 0,\n 0.534278,\n 0.60005,\n 140125e-8,\n 0,\n 0.562313,\n 0.581713,\n 132441e-8,\n 0,\n 0.59118,\n 0.563546,\n 125014e-8,\n 0,\n 0.620875,\n 0.545605,\n 118249e-8,\n 0,\n 0.651373,\n 0.527559,\n 11116e-7,\n 0,\n 0.682593,\n 0.509764,\n 104979e-8,\n 0,\n 0.714286,\n 0.49193,\n 985977e-9,\n 0,\n 0.746032,\n 0.475011,\n 928592e-9,\n 0,\n 0.777778,\n 0.457878,\n 873466e-9,\n 0,\n 0.809524,\n 0.440979,\n 819585e-9,\n 0,\n 0.84127,\n 0.424613,\n 772365e-9,\n 0,\n 0.873016,\n 0.408549,\n 722195e-9,\n 0,\n 0.904762,\n 0.392771,\n 680014e-9,\n 0,\n 0.936508,\n 0.377317,\n 636797e-9,\n 0,\n 0.968254,\n 0.362352,\n 598318e-9,\n 0,\n 1,\n 1,\n 114313e-8,\n 0,\n 0,\n 1,\n 114314e-8,\n 0,\n 0,\n 0.999999,\n 114331e-8,\n 0,\n 0,\n 0.999998,\n 114404e-8,\n 0,\n 0,\n 0.999994,\n 114601e-8,\n 0,\n 0,\n 0.999984,\n 115019e-8,\n 0,\n 0,\n 0.999967,\n 115784e-8,\n 0,\n 0,\n 0.999937,\n 11706e-7,\n 0,\n 0,\n 0.999894,\n 119054e-8,\n 0,\n 0,\n 0.999828,\n 122031e-8,\n 0,\n 0,\n 0.999735,\n 126331e-8,\n 0,\n 169263e-9,\n 0.999606,\n 132382e-8,\n 0,\n 949167e-9,\n 0.999426,\n 14071e-7,\n 0,\n 249668e-8,\n 0.999173,\n 151895e-8,\n 0,\n 486392e-8,\n 0.99873,\n 166102e-8,\n 0,\n 806323e-8,\n 0.996243,\n 17023e-7,\n 0,\n 0.0120895,\n 0.993779,\n 172782e-8,\n 0,\n 0.0169288,\n 0.9919,\n 18108e-7,\n 0,\n 0.0225633,\n 0.990524,\n 196028e-8,\n 0,\n 0.028974,\n 0.98868,\n 212014e-8,\n 0,\n 0.036142,\n 0.984663,\n 217598e-8,\n 0,\n 0.044049,\n 0.981457,\n 230563e-8,\n 0,\n 0.0526781,\n 0.977608,\n 243966e-8,\n 0,\n 0.0620137,\n 0.972215,\n 251336e-8,\n 0,\n 0.0720418,\n 0.966798,\n 26285e-7,\n 0,\n 0.0827499,\n 0.960241,\n 271409e-8,\n 0,\n 0.0941271,\n 0.952489,\n 278381e-8,\n 0,\n 0.106164,\n 0.944127,\n 285399e-8,\n 0,\n 0.118852,\n 0.934282,\n 290994e-8,\n 0,\n 0.132185,\n 0.923271,\n 294558e-8,\n 0,\n 0.146157,\n 0.910803,\n 296269e-8,\n 0,\n 0.160766,\n 0.896705,\n 296803e-8,\n 0,\n 0.176007,\n 0.88238,\n 296637e-8,\n 0,\n 0.19188,\n 0.867116,\n 293163e-8,\n 0,\n 0.208385,\n 0.853636,\n 289418e-8,\n 0,\n 0.225523,\n 0.840469,\n 284663e-8,\n 0,\n 0.243296,\n 0.82639,\n 278594e-8,\n 0,\n 0.261709,\n 0.811759,\n 271618e-8,\n 0,\n 0.280767,\n 0.796113,\n 263187e-8,\n 0,\n 0.300476,\n 0.779518,\n 254589e-8,\n 0,\n 0.320845,\n 0.763142,\n 246003e-8,\n 0,\n 0.341883,\n 0.745464,\n 236529e-8,\n 0,\n 0.363601,\n 0.727491,\n 226536e-8,\n 0,\n 0.386011,\n 0.709414,\n 216375e-8,\n 0,\n 0.409128,\n 0.691396,\n 207127e-8,\n 0,\n 0.432967,\n 0.67368,\n 197106e-8,\n 0,\n 0.457545,\n 0.656049,\n 187022e-8,\n 0,\n 0.482881,\n 0.638188,\n 177605e-8,\n 0,\n 0.508992,\n 0.620177,\n 168482e-8,\n 0,\n 0.535899,\n 0.601506,\n 158909e-8,\n 0,\n 0.563619,\n 0.58362,\n 150583e-8,\n 0,\n 0.592165,\n 0.565496,\n 141791e-8,\n 0,\n 0.621544,\n 0.54789,\n 133693e-8,\n 0,\n 0.651743,\n 0.530323,\n 126038e-8,\n 0,\n 0.682709,\n 0.512795,\n 118556e-8,\n 0,\n 0.714286,\n 0.495199,\n 111527e-8,\n 0,\n 0.746032,\n 0.478101,\n 10489e-7,\n 0,\n 0.777778,\n 0.461511,\n 984264e-9,\n 0,\n 0.809524,\n 0.444879,\n 92591e-8,\n 0,\n 0.84127,\n 0.428424,\n 866582e-9,\n 0,\n 0.873016,\n 0.412495,\n 814463e-9,\n 0,\n 0.904762,\n 0.396975,\n 764498e-9,\n 0,\n 0.936508,\n 0.381614,\n 715967e-9,\n 0,\n 0.968254,\n 0.366732,\n 672483e-9,\n 0,\n 1,\n 1,\n 155501e-8,\n 0,\n 0,\n 1,\n 155503e-8,\n 0,\n 0,\n 1,\n 155524e-8,\n 0,\n 0,\n 0.999998,\n 155615e-8,\n 0,\n 0,\n 0.999994,\n 15586e-7,\n 0,\n 0,\n 0.999983,\n 156379e-8,\n 0,\n 0,\n 0.999963,\n 15733e-7,\n 0,\n 0,\n 0.999932,\n 158911e-8,\n 0,\n 0,\n 0.999882,\n 161376e-8,\n 0,\n 0,\n 0.99981,\n 165041e-8,\n 0,\n 100875e-10,\n 0.999708,\n 170304e-8,\n 0,\n 367658e-9,\n 0.999565,\n 177658e-8,\n 0,\n 14234e-7,\n 0.999368,\n 187688e-8,\n 0,\n 327939e-8,\n 0.999081,\n 200989e-8,\n 0,\n 596629e-8,\n 0.99852,\n 217177e-8,\n 0,\n 94852e-7,\n 0.99549,\n 21745e-7,\n 0,\n 0.013824,\n 0.993252,\n 222357e-8,\n 0,\n 0.0189642,\n 0.991727,\n 235022e-8,\n 0,\n 0.0248856,\n 0.989951,\n 250561e-8,\n 0,\n 0.0315669,\n 0.988029,\n 268829e-8,\n 0,\n 0.0389882,\n 0.984029,\n 27496e-7,\n 0,\n 0.0471302,\n 0.980683,\n 289793e-8,\n 0,\n 0.0559754,\n 0.976554,\n 303315e-8,\n 0,\n 0.0655081,\n 0.97139,\n 313257e-8,\n 0,\n 0.0757138,\n 0.965544,\n 323656e-8,\n 0,\n 0.08658,\n 0.95912,\n 333432e-8,\n 0,\n 0.0980954,\n 0.951183,\n 34039e-7,\n 0,\n 0.110251,\n 0.942974,\n 347515e-8,\n 0,\n 0.123038,\n 0.932642,\n 350381e-8,\n 0,\n 0.13645,\n 0.922158,\n 354519e-8,\n 0,\n 0.150482,\n 0.909404,\n 353851e-8,\n 0,\n 0.165129,\n 0.896071,\n 35435e-7,\n 0,\n 0.18039,\n 0.881206,\n 349936e-8,\n 0,\n 0.196263,\n 0.866077,\n 347256e-8,\n 0,\n 0.212748,\n 0.85093,\n 3415e-6,\n 0,\n 0.229847,\n 0.837703,\n 333367e-8,\n 0,\n 0.247561,\n 0.823878,\n 3249e-6,\n 0,\n 0.265895,\n 0.809449,\n 316347e-8,\n 0,\n 0.284854,\n 0.794379,\n 306351e-8,\n 0,\n 0.304445,\n 0.778138,\n 29499e-7,\n 0,\n 0.324675,\n 0.761997,\n 284099e-8,\n 0,\n 0.345555,\n 0.744938,\n 272104e-8,\n 0,\n 0.367095,\n 0.727212,\n 260715e-8,\n 0,\n 0.389309,\n 0.709549,\n 248855e-8,\n 0,\n 0.41221,\n 0.691704,\n 236783e-8,\n 0,\n 0.435814,\n 0.673689,\n 225178e-8,\n 0,\n 0.460138,\n 0.656453,\n 213765e-8,\n 0,\n 0.485203,\n 0.639128,\n 202178e-8,\n 0,\n 0.511028,\n 0.621512,\n 191443e-8,\n 0,\n 0.537634,\n 0.603598,\n 180977e-8,\n 0,\n 0.565041,\n 0.58559,\n 170456e-8,\n 0,\n 0.593268,\n 0.567852,\n 160927e-8,\n 0,\n 0.622327,\n 0.5503,\n 151395e-8,\n 0,\n 0.652217,\n 0.533033,\n 142499e-8,\n 0,\n 0.682907,\n 0.515942,\n 133955e-8,\n 0,\n 0.714296,\n 0.498814,\n 12602e-7,\n 0,\n 0.746032,\n 0.481595,\n 118188e-8,\n 0,\n 0.777778,\n 0.465117,\n 111171e-8,\n 0,\n 0.809524,\n 0.448865,\n 104091e-8,\n 0,\n 0.84127,\n 0.432711,\n 976618e-9,\n 0,\n 0.873016,\n 0.416822,\n 91859e-8,\n 0,\n 0.904762,\n 0.401272,\n 857704e-9,\n 0,\n 0.936508,\n 0.386226,\n 807172e-9,\n 0,\n 0.968254,\n 0.371321,\n 75464e-8,\n 0,\n 1,\n 1,\n 209596e-8,\n 0,\n 0,\n 1,\n 209598e-8,\n 0,\n 0,\n 1,\n 209624e-8,\n 0,\n 0,\n 0.999997,\n 209736e-8,\n 0,\n 0,\n 0.999991,\n 210039e-8,\n 0,\n 0,\n 0.999979,\n 210678e-8,\n 0,\n 0,\n 0.999959,\n 211847e-8,\n 0,\n 0,\n 0.999925,\n 21379e-7,\n 0,\n 0,\n 0.99987,\n 216809e-8,\n 0,\n 0,\n 0.999791,\n 221281e-8,\n 0,\n 681487e-10,\n 0.999677,\n 227669e-8,\n 0,\n 658161e-9,\n 0.999521,\n 236533e-8,\n 0,\n 200635e-8,\n 0.999301,\n 248514e-8,\n 0,\n 41779e-7,\n 0.998977,\n 264185e-8,\n 0,\n 718648e-8,\n 0.998191,\n 281695e-8,\n 0,\n 0.0110239,\n 0.994801,\n 278518e-8,\n 0,\n 0.015672,\n 0.993091,\n 288774e-8,\n 0,\n 0.0211091,\n 0.991571,\n 303931e-8,\n 0,\n 0.0273123,\n 0.9897,\n 321643e-8,\n 0,\n 0.034259,\n 0.987023,\n 337332e-8,\n 0,\n 0.0419282,\n 0.983289,\n 346146e-8,\n 0,\n 0.0502998,\n 0.979892,\n 363704e-8,\n 0,\n 0.0593562,\n 0.975111,\n 373601e-8,\n 0,\n 0.069081,\n 0.970351,\n 38842e-7,\n 0,\n 0.0794598,\n 0.964131,\n 397053e-8,\n 0,\n 0.0904798,\n 0.957747,\n 408078e-8,\n 0,\n 0.10213,\n 0.949536,\n 413533e-8,\n 0,\n 0.1144,\n 0.941372,\n 420305e-8,\n 0,\n 0.127284,\n 0.931049,\n 422815e-8,\n 0,\n 0.140772,\n 0.920647,\n 425048e-8,\n 0,\n 0.154862,\n 0.908033,\n 42281e-7,\n 0,\n 0.169548,\n 0.895028,\n 422026e-8,\n 0,\n 0.184828,\n 0.879968,\n 415042e-8,\n 0,\n 0.200701,\n 0.864875,\n 408821e-8,\n 0,\n 0.217167,\n 0.84918,\n 400909e-8,\n 0,\n 0.234227,\n 0.834934,\n 391178e-8,\n 0,\n 0.251884,\n 0.821397,\n 380066e-8,\n 0,\n 0.270141,\n 0.807135,\n 367974e-8,\n 0,\n 0.289004,\n 0.792363,\n 355172e-8,\n 0,\n 0.308479,\n 0.776661,\n 3411e-6,\n 0,\n 0.328575,\n 0.760705,\n 328123e-8,\n 0,\n 0.349301,\n 0.744408,\n 314003e-8,\n 0,\n 0.370668,\n 0.726994,\n 29906e-7,\n 0,\n 0.392689,\n 0.709598,\n 285034e-8,\n 0,\n 0.415379,\n 0.692112,\n 271179e-8,\n 0,\n 0.438754,\n 0.674435,\n 257185e-8,\n 0,\n 0.46283,\n 0.65676,\n 243425e-8,\n 0,\n 0.48763,\n 0.639982,\n 230351e-8,\n 0,\n 0.513173,\n 0.622983,\n 21777e-7,\n 0,\n 0.539482,\n 0.605471,\n 204991e-8,\n 0,\n 0.566579,\n 0.58796,\n 193759e-8,\n 0,\n 0.594488,\n 0.570463,\n 181976e-8,\n 0,\n 0.623226,\n 0.553058,\n 171497e-8,\n 0,\n 0.6528,\n 0.535894,\n 161109e-8,\n 0,\n 0.683198,\n 0.519089,\n 151394e-8,\n 0,\n 0.714354,\n 0.502454,\n 142122e-8,\n 0,\n 0.746032,\n 0.485681,\n 133488e-8,\n 0,\n 0.777778,\n 0.468935,\n 124975e-8,\n 0,\n 0.809524,\n 0.452951,\n 117309e-8,\n 0,\n 0.84127,\n 0.437139,\n 110155e-8,\n 0,\n 0.873016,\n 0.421446,\n 103124e-8,\n 0,\n 0.904762,\n 0.405951,\n 966387e-9,\n 0,\n 0.936508,\n 0.391003,\n 908119e-9,\n 0,\n 0.968254,\n 0.376198,\n 848057e-9,\n 0,\n 1,\n 1,\n 280076e-8,\n 0,\n 0,\n 1,\n 280078e-8,\n 0,\n 0,\n 0.999999,\n 280109e-8,\n 0,\n 0,\n 0.999997,\n 280246e-8,\n 0,\n 0,\n 0.999992,\n 280616e-8,\n 0,\n 0,\n 0.999979,\n 281396e-8,\n 0,\n 0,\n 0.999956,\n 282822e-8,\n 0,\n 0,\n 0.999916,\n 285186e-8,\n 0,\n 0,\n 0.999857,\n 28885e-7,\n 0,\n 0,\n 0.999768,\n 294259e-8,\n 0,\n 196026e-9,\n 0.999645,\n 301946e-8,\n 0,\n 104842e-8,\n 0.99947,\n 312541e-8,\n 0,\n 270199e-8,\n 0.999229,\n 326733e-8,\n 0,\n 519449e-8,\n 0.998852,\n 344992e-8,\n 0,\n 852602e-8,\n 0.997558,\n 361052e-8,\n 0,\n 0.0126804,\n 0.994417,\n 35898e-7,\n 0,\n 0.017635,\n 0.992824,\n 372393e-8,\n 0,\n 0.023365,\n 0.991344,\n 390695e-8,\n 0,\n 0.0298456,\n 0.989337,\n 410392e-8,\n 0,\n 0.0370529,\n 0.985811,\n 420987e-8,\n 0,\n 0.0449651,\n 0.982772,\n 437488e-8,\n 0,\n 0.0535615,\n 0.979001,\n 455069e-8,\n 0,\n 0.0628243,\n 0.974102,\n 464462e-8,\n 0,\n 0.0727368,\n 0.969197,\n 480577e-8,\n 0,\n 0.0832844,\n 0.962759,\n 487818e-8,\n 0,\n 0.0944545,\n 0.956207,\n 498176e-8,\n 0,\n 0.106236,\n 0.947909,\n 503392e-8,\n 0,\n 0.118619,\n 0.939596,\n 507474e-8,\n 0,\n 0.131595,\n 0.929642,\n 509798e-8,\n 0,\n 0.145159,\n 0.918807,\n 508476e-8,\n 0,\n 0.159305,\n 0.906921,\n 505634e-8,\n 0,\n 0.174028,\n 0.893312,\n 498845e-8,\n 0,\n 0.189327,\n 0.878933,\n 49133e-7,\n 0,\n 0.2052,\n 0.863986,\n 48259e-7,\n 0,\n 0.221647,\n 0.847936,\n 470848e-8,\n 0,\n 0.23867,\n 0.832253,\n 456889e-8,\n 0,\n 0.25627,\n 0.818619,\n 442726e-8,\n 0,\n 0.274453,\n 0.804788,\n 427677e-8,\n 0,\n 0.293222,\n 0.790241,\n 411906e-8,\n 0,\n 0.312585,\n 0.775162,\n 394833e-8,\n 0,\n 0.33255,\n 0.759463,\n 377366e-8,\n 0,\n 0.353126,\n 0.743598,\n 361026e-8,\n 0,\n 0.374324,\n 0.72697,\n 343627e-8,\n 0,\n 0.396158,\n 0.709646,\n 326422e-8,\n 0,\n 0.418641,\n 0.69277,\n 309717e-8,\n 0,\n 0.44179,\n 0.675371,\n 29356e-7,\n 0,\n 0.465624,\n 0.657863,\n 277712e-8,\n 0,\n 0.490163,\n 0.640772,\n 261738e-8,\n 0,\n 0.515429,\n 0.624441,\n 24737e-7,\n 0,\n 0.541445,\n 0.607497,\n 233125e-8,\n 0,\n 0.568236,\n 0.590438,\n 218994e-8,\n 0,\n 0.595828,\n 0.573224,\n 20664e-7,\n 0,\n 0.624242,\n 0.556168,\n 193526e-8,\n 0,\n 0.653496,\n 0.539232,\n 182463e-8,\n 0,\n 0.683588,\n 0.522352,\n 170735e-8,\n 0,\n 0.714482,\n 0.506172,\n 160555e-8,\n 0,\n 0.746032,\n 0.489842,\n 150451e-8,\n 0,\n 0.777778,\n 0.473463,\n 140938e-8,\n 0,\n 0.809524,\n 0.457266,\n 132568e-8,\n 0,\n 0.84127,\n 0.441609,\n 12376e-7,\n 0,\n 0.873016,\n 0.426348,\n 116265e-8,\n 0,\n 0.904762,\n 0.411002,\n 108935e-8,\n 0,\n 0.936508,\n 0.396045,\n 101946e-8,\n 0,\n 0.968254,\n 0.381448,\n 955665e-9,\n 0,\n 1,\n 1,\n 37121e-7,\n 0,\n 0,\n 1,\n 371213e-8,\n 0,\n 0,\n 1,\n 371251e-8,\n 0,\n 0,\n 0.999997,\n 371417e-8,\n 0,\n 0,\n 0.99999,\n 371863e-8,\n 0,\n 0,\n 0.999977,\n 372807e-8,\n 0,\n 0,\n 0.99995,\n 374529e-8,\n 0,\n 0,\n 0.999908,\n 37738e-7,\n 0,\n 0,\n 0.999843,\n 381789e-8,\n 0,\n 123596e-10,\n 0.999745,\n 388273e-8,\n 0,\n 407442e-9,\n 0.999608,\n 397443e-8,\n 0,\n 15447e-7,\n 0.999415,\n 409998e-8,\n 0,\n 351385e-8,\n 0.999143,\n 426662e-8,\n 0,\n 63316e-7,\n 0.9987,\n 447625e-8,\n 0,\n 998679e-8,\n 0.996363,\n 455323e-8,\n 0,\n 0.0144569,\n 0.994021,\n 461052e-8,\n 0,\n 0.0197151,\n 0.992372,\n 476359e-8,\n 0,\n 0.0257344,\n 0.991007,\n 499101e-8,\n 0,\n 0.0324882,\n 0.988767,\n 51972e-7,\n 0,\n 0.0399517,\n 0.984872,\n 528407e-8,\n 0,\n 0.0481022,\n 0.982004,\n 548926e-8,\n 0,\n 0.0569191,\n 0.977714,\n 564385e-8,\n 0,\n 0.0663839,\n 0.973076,\n 57693e-7,\n 0,\n 0.0764801,\n 0.967565,\n 58924e-7,\n 0,\n 0.0871928,\n 0.961384,\n 599629e-8,\n 0,\n 0.0985095,\n 0.954435,\n 605998e-8,\n 0,\n 0.110419,\n 0.946303,\n 61133e-7,\n 0,\n 0.122912,\n 0.937662,\n 612028e-8,\n 0,\n 0.13598,\n 0.927867,\n 612209e-8,\n 0,\n 0.149617,\n 0.916475,\n 604813e-8,\n 0,\n 0.163817,\n 0.90541,\n 603088e-8,\n 0,\n 0.178577,\n 0.891591,\n 592218e-8,\n 0,\n 0.193894,\n 0.877573,\n 578854e-8,\n 0,\n 0.209767,\n 0.862511,\n 566648e-8,\n 0,\n 0.226196,\n 0.846861,\n 551481e-8,\n 0,\n 0.243182,\n 0.83068,\n 533754e-8,\n 0,\n 0.260728,\n 0.815725,\n 515487e-8,\n 0,\n 0.278837,\n 0.802321,\n 49655e-7,\n 0,\n 0.297515,\n 0.787826,\n 475421e-8,\n 0,\n 0.316768,\n 0.773454,\n 456002e-8,\n 0,\n 0.336605,\n 0.758224,\n 434727e-8,\n 0,\n 0.357034,\n 0.74265,\n 414444e-8,\n 0,\n 0.378067,\n 0.726729,\n 393738e-8,\n 0,\n 0.399717,\n 0.710155,\n 373575e-8,\n 0,\n 0.421998,\n 0.693312,\n 353736e-8,\n 0,\n 0.444928,\n 0.67653,\n 334368e-8,\n 0,\n 0.468523,\n 0.659444,\n 315981e-8,\n 0,\n 0.492806,\n 0.642051,\n 297809e-8,\n 0,\n 0.517798,\n 0.625758,\n 280592e-8,\n 0,\n 0.543525,\n 0.609615,\n 264254e-8,\n 0,\n 0.570012,\n 0.592919,\n 248459e-8,\n 0,\n 0.597288,\n 0.576298,\n 233327e-8,\n 0,\n 0.625379,\n 0.559489,\n 219519e-8,\n 0,\n 0.654307,\n 0.542891,\n 205441e-8,\n 0,\n 0.684084,\n 0.526255,\n 193385e-8,\n 0,\n 0.714693,\n 0.509853,\n 180745e-8,\n 0,\n 0.746044,\n 0.494131,\n 169817e-8,\n 0,\n 0.777778,\n 0.478114,\n 15913e-7,\n 0,\n 0.809524,\n 0.462274,\n 148981e-8,\n 0,\n 0.84127,\n 0.446412,\n 139537e-8,\n 0,\n 0.873016,\n 0.431274,\n 130984e-8,\n 0,\n 0.904762,\n 0.41635,\n 122403e-8,\n 0,\n 0.936508,\n 0.401476,\n 114809e-8,\n 0,\n 0.968254,\n 0.386993,\n 107563e-8,\n 0,\n 1,\n 1,\n 488216e-8,\n 0,\n 0,\n 1,\n 48822e-7,\n 0,\n 0,\n 1,\n 488265e-8,\n 0,\n 0,\n 0.999997,\n 488463e-8,\n 0,\n 0,\n 0.999988,\n 488999e-8,\n 0,\n 0,\n 0.999974,\n 490129e-8,\n 0,\n 0,\n 0.999946,\n 492191e-8,\n 0,\n 0,\n 0.999897,\n 495598e-8,\n 0,\n 0,\n 0.999825,\n 500855e-8,\n 0,\n 744791e-10,\n 0.999718,\n 508559e-8,\n 0,\n 712744e-9,\n 0.999565,\n 5194e-6,\n 0,\n 215249e-8,\n 0.999352,\n 534147e-8,\n 0,\n 444576e-8,\n 0.999046,\n 553523e-8,\n 0,\n 759218e-8,\n 0.998492,\n 577016e-8,\n 0,\n 0.0115714,\n 0.995564,\n 578487e-8,\n 0,\n 0.0163557,\n 0.993339,\n 586414e-8,\n 0,\n 0.021915,\n 0.991834,\n 606002e-8,\n 0,\n 0.0282201,\n 0.990496,\n 633312e-8,\n 0,\n 0.0352433,\n 0.987826,\n 651941e-8,\n 0,\n 0.042959,\n 0.98383,\n 660842e-8,\n 0,\n 0.0513439,\n 0.98109,\n 685523e-8,\n 0,\n 0.0603772,\n 0.976131,\n 695778e-8,\n 0,\n 0.0700402,\n 0.971922,\n 714236e-8,\n 0,\n 0.0803163,\n 0.965901,\n 721437e-8,\n 0,\n 0.0911908,\n 0.959606,\n 732017e-8,\n 0,\n 0.102651,\n 0.952504,\n 735788e-8,\n 0,\n 0.114686,\n 0.944365,\n 738493e-8,\n 0,\n 0.127286,\n 0.935652,\n 737969e-8,\n 0,\n 0.140443,\n 0.925813,\n 733612e-8,\n 0,\n 0.154151,\n 0.914397,\n 723094e-8,\n 0,\n 0.168405,\n 0.903257,\n 714002e-8,\n 0,\n 0.183201,\n 0.890015,\n 700149e-8,\n 0,\n 0.198536,\n 0.876014,\n 682813e-8,\n 0,\n 0.214409,\n 0.861436,\n 665567e-8,\n 0,\n 0.23082,\n 0.845752,\n 644526e-8,\n 0,\n 0.24777,\n 0.829169,\n 621635e-8,\n 0,\n 0.265263,\n 0.813435,\n 597789e-8,\n 0,\n 0.283301,\n 0.799701,\n 575694e-8,\n 0,\n 0.301889,\n 0.785726,\n 549866e-8,\n 0,\n 0.321035,\n 0.77152,\n 52503e-7,\n 0,\n 0.340746,\n 0.75683,\n 499619e-8,\n 0,\n 0.361032,\n 0.741951,\n 47543e-7,\n 0,\n 0.381904,\n 0.726367,\n 45084e-7,\n 0,\n 0.403374,\n 0.710537,\n 426784e-8,\n 0,\n 0.425457,\n 0.693965,\n 403487e-8,\n 0,\n 0.448169,\n 0.677724,\n 38075e-7,\n 0,\n 0.47153,\n 0.66117,\n 359431e-8,\n 0,\n 0.495561,\n 0.644274,\n 338354e-8,\n 0,\n 0.520284,\n 0.627449,\n 318163e-8,\n 0,\n 0.545725,\n 0.611645,\n 299672e-8,\n 0,\n 0.571911,\n 0.595614,\n 281016e-8,\n 0,\n 0.598873,\n 0.579426,\n 264252e-8,\n 0,\n 0.62664,\n 0.563016,\n 247509e-8,\n 0,\n 0.655239,\n 0.546728,\n 232647e-8,\n 0,\n 0.684692,\n 0.530539,\n 217803e-8,\n 0,\n 0.714999,\n 0.514164,\n 204216e-8,\n 0,\n 0.746106,\n 0.498344,\n 191403e-8,\n 0,\n 0.777778,\n 0.482957,\n 179203e-8,\n 0,\n 0.809524,\n 0.467336,\n 167695e-8,\n 0,\n 0.84127,\n 0.451994,\n 157567e-8,\n 0,\n 0.873016,\n 0.436514,\n 147113e-8,\n 0,\n 0.904762,\n 0.42178,\n 138034e-8,\n 0,\n 0.936508,\n 0.407271,\n 129219e-8,\n 0,\n 0.968254,\n 0.392822,\n 12098e-7,\n 0,\n 1,\n 1,\n 637427e-8,\n 0,\n 0,\n 1,\n 637431e-8,\n 0,\n 0,\n 0.999999,\n 637485e-8,\n 0,\n 0,\n 0.999996,\n 637721e-8,\n 0,\n 0,\n 0.999987,\n 638357e-8,\n 0,\n 0,\n 0.999971,\n 6397e-6,\n 0,\n 0,\n 0.999939,\n 642142e-8,\n 0,\n 0,\n 0.999888,\n 646177e-8,\n 0,\n 0,\n 0.999807,\n 652387e-8,\n 0,\n 207916e-9,\n 0.999689,\n 661454e-8,\n 0,\n 112051e-8,\n 0.99952,\n 674155e-8,\n 0,\n 287719e-8,\n 0.999283,\n 691313e-8,\n 0,\n 550145e-8,\n 0.998936,\n 713598e-8,\n 0,\n 897928e-8,\n 0.998165,\n 738501e-8,\n 0,\n 0.0132829,\n 0.994847,\n 734388e-8,\n 0,\n 0.01838,\n 0.993182,\n 749991e-8,\n 0,\n 0.0242381,\n 0.991665,\n 77246e-7,\n 0,\n 0.030826,\n 0.989708,\n 797579e-8,\n 0,\n 0.0381152,\n 0.986663,\n 813011e-8,\n 0,\n 0.0460794,\n 0.983288,\n 830365e-8,\n 0,\n 0.0546951,\n 0.980104,\n 853496e-8,\n 0,\n 0.0639411,\n 0.974855,\n 861045e-8,\n 0,\n 0.0737988,\n 0.97045,\n 879133e-8,\n 0,\n 0.0842516,\n 0.964509,\n 886377e-8,\n 0,\n 0.0952848,\n 0.957594,\n 890346e-8,\n 0,\n 0.106886,\n 0.950546,\n 893289e-8,\n 0,\n 0.119044,\n 0.942225,\n 890074e-8,\n 0,\n 0.131749,\n 0.933365,\n 886826e-8,\n 0,\n 0.144994,\n 0.923202,\n 87316e-7,\n 0,\n 0.158772,\n 0.912605,\n 863082e-8,\n 0,\n 0.173078,\n 0.901099,\n 847403e-8,\n 0,\n 0.187908,\n 0.888177,\n 825838e-8,\n 0,\n 0.203261,\n 0.873955,\n 801834e-8,\n 0,\n 0.219134,\n 0.860091,\n 779026e-8,\n 0,\n 0.235527,\n 0.84434,\n 752478e-8,\n 0,\n 0.252443,\n 0.828517,\n 724074e-8,\n 0,\n 0.269883,\n 0.81239,\n 693769e-8,\n 0,\n 0.287851,\n 0.79721,\n 664817e-8,\n 0,\n 0.306352,\n 0.783489,\n 634763e-8,\n 0,\n 0.325393,\n 0.769514,\n 604221e-8,\n 0,\n 0.344981,\n 0.755419,\n 573568e-8,\n 0,\n 0.365126,\n 0.741083,\n 544359e-8,\n 0,\n 0.385839,\n 0.726059,\n 515515e-8,\n 0,\n 0.407132,\n 0.710809,\n 487139e-8,\n 0,\n 0.42902,\n 0.695052,\n 459846e-8,\n 0,\n 0.45152,\n 0.678886,\n 433412e-8,\n 0,\n 0.474651,\n 0.663042,\n 407981e-8,\n 0,\n 0.498433,\n 0.646634,\n 384264e-8,\n 0,\n 0.52289,\n 0.630117,\n 360897e-8,\n 0,\n 0.548048,\n 0.613804,\n 338863e-8,\n 0,\n 0.573936,\n 0.598338,\n 318486e-8,\n 0,\n 0.600584,\n 0.582687,\n 298377e-8,\n 0,\n 0.628027,\n 0.566809,\n 280082e-8,\n 0,\n 0.656295,\n 0.550817,\n 262255e-8,\n 0,\n 0.685417,\n 0.534937,\n 245835e-8,\n 0,\n 0.715406,\n 0.519151,\n 230574e-8,\n 0,\n 0.74624,\n 0.503118,\n 21549e-7,\n 0,\n 0.777778,\n 0.487723,\n 202008e-8,\n 0,\n 0.809524,\n 0.472725,\n 189355e-8,\n 0,\n 0.84127,\n 0.457599,\n 177108e-8,\n 0,\n 0.873016,\n 0.442558,\n 165843e-8,\n 0,\n 0.904762,\n 0.427624,\n 155494e-8,\n 0,\n 0.936508,\n 0.413171,\n 145273e-8,\n 0,\n 0.968254,\n 0.399122,\n 136454e-8,\n 0,\n 1,\n 1,\n 826496e-8,\n 0,\n 0,\n 1,\n 826499e-8,\n 0,\n 0,\n 1,\n 826564e-8,\n 0,\n 0,\n 0.999996,\n 826842e-8,\n 0,\n 0,\n 0.999987,\n 827589e-8,\n 0,\n 0,\n 0.999967,\n 829167e-8,\n 0,\n 0,\n 0.999933,\n 832037e-8,\n 0,\n 0,\n 0.999876,\n 836768e-8,\n 0,\n 109338e-10,\n 0.999786,\n 844031e-8,\n 0,\n 427145e-9,\n 0.999655,\n 854603e-8,\n 0,\n 16384e-7,\n 0.999468,\n 869337e-8,\n 0,\n 372392e-8,\n 0.999203,\n 8891e-6,\n 0,\n 668513e-8,\n 0.998803,\n 914387e-8,\n 0,\n 0.0104968,\n 0.99748,\n 935838e-8,\n 0,\n 0.015125,\n 0.994446,\n 933309e-8,\n 0,\n 0.0205338,\n 0.99292,\n 953084e-8,\n 0,\n 0.0266884,\n 0.991414,\n 97893e-7,\n 0,\n 0.0335565,\n 0.989049,\n 0.0100228,\n 0,\n 0.0411086,\n 0.98582,\n 0.0101664,\n 0,\n 0.0493181,\n 0.982441,\n 0.0103582,\n 0,\n 0.0581613,\n 0.978595,\n 0.0105292,\n 0,\n 0.0676169,\n 0.973495,\n 0.0106274,\n 0,\n 0.0776661,\n 0.968405,\n 0.0107261,\n 0,\n 0.0882926,\n 0.962717,\n 0.0108234,\n 0,\n 0.0994817,\n 0.955478,\n 0.0108102,\n 0,\n 0.111221,\n 0.948275,\n 0.0107914,\n 0,\n 0.123499,\n 0.940006,\n 0.0107161,\n 0,\n 0.136308,\n 0.930831,\n 0.0106309,\n 0,\n 0.149639,\n 0.920648,\n 0.0104083,\n 0,\n 0.163485,\n 0.910205,\n 0.0102312,\n 0,\n 0.177843,\n 0.898445,\n 0.0100051,\n 0,\n 0.192707,\n 0.885986,\n 971928e-8,\n 0,\n 0.208077,\n 0.872204,\n 940747e-8,\n 0,\n 0.22395,\n 0.858436,\n 91085e-7,\n 0,\n 0.240326,\n 0.843454,\n 876595e-8,\n 0,\n 0.257208,\n 0.827437,\n 839794e-8,\n 0,\n 0.274596,\n 0.811488,\n 803692e-8,\n 0,\n 0.292496,\n 0.796039,\n 767352e-8,\n 0,\n 0.310911,\n 0.781083,\n 73097e-7,\n 0,\n 0.329849,\n 0.767642,\n 694032e-8,\n 0,\n 0.349316,\n 0.753901,\n 657476e-8,\n 0,\n 0.369323,\n 0.740131,\n 622699e-8,\n 0,\n 0.38988,\n 0.725845,\n 58838e-7,\n 0,\n 0.410999,\n 0.710991,\n 555586e-8,\n 0,\n 0.432696,\n 0.696002,\n 523089e-8,\n 0,\n 0.454987,\n 0.680461,\n 492494e-8,\n 0,\n 0.47789,\n 0.664875,\n 463464e-8,\n 0,\n 0.501426,\n 0.649273,\n 435422e-8,\n 0,\n 0.52562,\n 0.63302,\n 40875e-7,\n 0,\n 0.550498,\n 0.61705,\n 384075e-8,\n 0,\n 0.576089,\n 0.601154,\n 359557e-8,\n 0,\n 0.602427,\n 0.586008,\n 337636e-8,\n 0,\n 0.629544,\n 0.570699,\n 316019e-8,\n 0,\n 0.657479,\n 0.555166,\n 296033e-8,\n 0,\n 0.686264,\n 0.539645,\n 277552e-8,\n 0,\n 0.715924,\n 0.524159,\n 259499e-8,\n 0,\n 0.746459,\n 0.508682,\n 243257e-8,\n 0,\n 0.777789,\n 0.493163,\n 227851e-8,\n 0,\n 0.809524,\n 0.478004,\n 213083e-8,\n 0,\n 0.84127,\n 0.46347,\n 199502e-8,\n 0,\n 0.873016,\n 0.448778,\n 186967e-8,\n 0,\n 0.904762,\n 0.434105,\n 174732e-8,\n 0,\n 0.936508,\n 0.419576,\n 163861e-8,\n 0,\n 0.968254,\n 0.405541,\n 153341e-8,\n 0,\n 1,\n 1,\n 0.0106462,\n 0,\n 0,\n 1,\n 0.0106462,\n 0,\n 0,\n 0.999999,\n 0.010647,\n 0,\n 0,\n 0.999995,\n 0.0106502,\n 0,\n 0,\n 0.999985,\n 0.0106589,\n 0,\n 0,\n 0.999964,\n 0.0106773,\n 0,\n 0,\n 0.999925,\n 0.0107106,\n 0,\n 0,\n 0.999861,\n 0.0107655,\n 0,\n 712986e-10,\n 0.999763,\n 0.0108497,\n 0,\n 743959e-9,\n 0.999616,\n 0.0109716,\n 0,\n 227361e-8,\n 0.999408,\n 0.0111408,\n 0,\n 46983e-7,\n 0.999112,\n 0.0113659,\n 0,\n 800158e-8,\n 0.998637,\n 0.0116475,\n 0,\n 0.0121493,\n 0.996223,\n 0.0117231,\n 0,\n 0.0171023,\n 0.994006,\n 0.0118064,\n 0,\n 0.0228218,\n 0.992444,\n 0.0120254,\n 0,\n 0.0292711,\n 0.991028,\n 0.0123314,\n 0,\n 0.036417,\n 0.98803,\n 0.0124954,\n 0,\n 0.0442295,\n 0.984816,\n 0.0126538,\n 0,\n 0.0526815,\n 0.981399,\n 0.0128537,\n 0,\n 0.0617492,\n 0.977085,\n 0.0129694,\n 0,\n 0.0714114,\n 0.972154,\n 0.013091,\n 0,\n 0.0816495,\n 0.966617,\n 0.0131166,\n 0,\n 0.0924472,\n 0.960628,\n 0.0131583,\n 0,\n 0.10379,\n 0.953295,\n 0.0131094,\n 0,\n 0.115665,\n 0.94575,\n 0.0129966,\n 0,\n 0.128062,\n 0.937654,\n 0.0128796,\n 0,\n 0.140972,\n 0.927716,\n 0.0126477,\n 0,\n 0.154387,\n 0.917932,\n 0.0123889,\n 0,\n 0.168301,\n 0.907719,\n 0.012131,\n 0,\n 0.182709,\n 0.89584,\n 0.0118013,\n 0,\n 0.197608,\n 0.883526,\n 0.0114145,\n 0,\n 0.212994,\n 0.870301,\n 0.0110075,\n 0,\n 0.228867,\n 0.856272,\n 0.0106019,\n 0,\n 0.245227,\n 0.842251,\n 0.0101938,\n 0,\n 0.262074,\n 0.826466,\n 973254e-8,\n 0,\n 0.279412,\n 0.810859,\n 92846e-7,\n 0,\n 0.297244,\n 0.795051,\n 883304e-8,\n 0,\n 0.315575,\n 0.780053,\n 840272e-8,\n 0,\n 0.334412,\n 0.76575,\n 796438e-8,\n 0,\n 0.35376,\n 0.752298,\n 752526e-8,\n 0,\n 0.373631,\n 0.739153,\n 711486e-8,\n 0,\n 0.394034,\n 0.725514,\n 670361e-8,\n 0,\n 0.414983,\n 0.711473,\n 632656e-8,\n 0,\n 0.436491,\n 0.696936,\n 595206e-8,\n 0,\n 0.458575,\n 0.682126,\n 559191e-8,\n 0,\n 0.481253,\n 0.667027,\n 525362e-8,\n 0,\n 0.504547,\n 0.651875,\n 493805e-8,\n 0,\n 0.528481,\n 0.636463,\n 462848e-8,\n 0,\n 0.553081,\n 0.620641,\n 433936e-8,\n 0,\n 0.578377,\n 0.604931,\n 407e-5,\n 0,\n 0.604404,\n 0.589549,\n 380864e-8,\n 0,\n 0.631197,\n 0.574712,\n 357049e-8,\n 0,\n 0.658795,\n 0.559775,\n 334466e-8,\n 0,\n 0.687238,\n 0.544514,\n 312505e-8,\n 0,\n 0.716559,\n 0.529555,\n 293199e-8,\n 0,\n 0.746776,\n 0.514402,\n 274204e-8,\n 0,\n 0.777849,\n 0.499302,\n 256647e-8,\n 0,\n 0.809524,\n 0.484114,\n 239901e-8,\n 0,\n 0.84127,\n 0.469308,\n 225148e-8,\n 0,\n 0.873016,\n 0.455133,\n 210178e-8,\n 0,\n 0.904762,\n 0.440939,\n 19727e-7,\n 0,\n 0.936508,\n 0.426627,\n 184382e-8,\n 0,\n 0.968254,\n 0.412509,\n 172548e-8,\n 0,\n 1,\n 1,\n 0.013628,\n 0,\n 0,\n 1,\n 0.0136281,\n 0,\n 0,\n 0.999999,\n 0.0136289,\n 0,\n 0,\n 0.999995,\n 0.0136327,\n 0,\n 0,\n 0.999983,\n 0.0136427,\n 0,\n 0,\n 0.99996,\n 0.0136638,\n 0,\n 0,\n 0.999917,\n 0.0137022,\n 0,\n 0,\n 0.999846,\n 0.0137652,\n 0,\n 204597e-9,\n 0.999736,\n 0.0138615,\n 0,\n 116837e-8,\n 0.999573,\n 0.0140007,\n 0,\n 303325e-8,\n 0.99934,\n 0.0141927,\n 0,\n 580613e-8,\n 0.999004,\n 0.0144457,\n 0,\n 945626e-8,\n 0.998407,\n 0.0147489,\n 0,\n 0.0139421,\n 0.995464,\n 0.014731,\n 0,\n 0.0192202,\n 0.993328,\n 0.0148283,\n 0,\n 0.0252495,\n 0.991799,\n 0.0150797,\n 0,\n 0.0319921,\n 0.990397,\n 0.0154316,\n 0,\n 0.0394138,\n 0.986835,\n 0.0155005,\n 0,\n 0.0474843,\n 0.983938,\n 0.0157308,\n 0,\n 0.0561763,\n 0.980154,\n 0.0158753,\n 0,\n 0.0654661,\n 0.975659,\n 0.0159581,\n 0,\n 0.0753326,\n 0.970171,\n 0.0159832,\n 0,\n 0.0857571,\n 0.964803,\n 0.0160084,\n 0,\n 0.0967236,\n 0.958366,\n 0.0159484,\n 0,\n 0.108218,\n 0.950613,\n 0.0158001,\n 0,\n 0.120227,\n 0.942874,\n 0.0155845,\n 0,\n 0.132741,\n 0.935005,\n 0.0154292,\n 0,\n 0.145751,\n 0.924991,\n 0.0150742,\n 0,\n 0.159249,\n 0.914814,\n 0.0146757,\n 0,\n 0.17323,\n 0.904743,\n 0.0143097,\n 0,\n 0.187687,\n 0.893216,\n 0.0138695,\n 0,\n 0.202619,\n 0.880769,\n 0.0133706,\n 0,\n 0.218021,\n 0.868136,\n 0.0128606,\n 0,\n 0.233894,\n 0.85469,\n 0.0123403,\n 0,\n 0.250238,\n 0.840593,\n 0.0118091,\n 0,\n 0.267052,\n 0.825808,\n 0.011253,\n 0,\n 0.284341,\n 0.81009,\n 0.0107099,\n 0,\n 0.302106,\n 0.79504,\n 0.0101636,\n 0,\n 0.320354,\n 0.779757,\n 964041e-8,\n 0,\n 0.33909,\n 0.764697,\n 911896e-8,\n 0,\n 0.358322,\n 0.750913,\n 859533e-8,\n 0,\n 0.378059,\n 0.738175,\n 811592e-8,\n 0,\n 0.398311,\n 0.725242,\n 764504e-8,\n 0,\n 0.41909,\n 0.711864,\n 718885e-8,\n 0,\n 0.440412,\n 0.698009,\n 675843e-8,\n 0,\n 0.462292,\n 0.683841,\n 634984e-8,\n 0,\n 0.484748,\n 0.669391,\n 595502e-8,\n 0,\n 0.507802,\n 0.654731,\n 558671e-8,\n 0,\n 0.531477,\n 0.639805,\n 523578e-8,\n 0,\n 0.555802,\n 0.624789,\n 490834e-8,\n 0,\n 0.580805,\n 0.609325,\n 459448e-8,\n 0,\n 0.606522,\n 0.593975,\n 430342e-8,\n 0,\n 0.63299,\n 0.578983,\n 403019e-8,\n 0,\n 0.66025,\n 0.564442,\n 37707e-7,\n 0,\n 0.688346,\n 0.549835,\n 35316e-7,\n 0,\n 0.717319,\n 0.535039,\n 330255e-8,\n 0,\n 0.7472,\n 0.520403,\n 308932e-8,\n 0,\n 0.777982,\n 0.505687,\n 289335e-8,\n 0,\n 0.809524,\n 0.490939,\n 270818e-8,\n 0,\n 0.84127,\n 0.476233,\n 25343e-7,\n 0,\n 0.873016,\n 0.461624,\n 237097e-8,\n 0,\n 0.904762,\n 0.447833,\n 222065e-8,\n 0,\n 0.936508,\n 0.433992,\n 207561e-8,\n 0,\n 0.968254,\n 0.420147,\n 194955e-8,\n 0,\n 1,\n 1,\n 0.0173415,\n 0,\n 0,\n 1,\n 0.0173416,\n 0,\n 0,\n 0.999999,\n 0.0173426,\n 0,\n 0,\n 0.999995,\n 0.0173468,\n 0,\n 0,\n 0.999983,\n 0.0173582,\n 0,\n 0,\n 0.999954,\n 0.0173822,\n 0,\n 0,\n 0.999908,\n 0.0174258,\n 0,\n 669501e-11,\n 0.999828,\n 0.0174973,\n 0,\n 427399e-9,\n 0.999705,\n 0.0176063,\n 0,\n 171019e-8,\n 0.999524,\n 0.0177631,\n 0,\n 39248e-7,\n 0.999263,\n 0.0179781,\n 0,\n 705382e-8,\n 0.998878,\n 0.018258,\n 0,\n 0.0110552,\n 0.998012,\n 0.0185551,\n 0,\n 0.0158812,\n 0.994614,\n 0.0184264,\n 0,\n 0.0214852,\n 0.993132,\n 0.0186385,\n 0,\n 0.0278239,\n 0.991563,\n 0.0189067,\n 0,\n 0.0348585,\n 0.989298,\n 0.0191577,\n 0,\n 0.0425544,\n 0.986036,\n 0.0192522,\n 0,\n 0.050881,\n 0.982558,\n 0.0194063,\n 0,\n 0.059811,\n 0.978531,\n 0.019486,\n 0,\n 0.0693209,\n 0.974198,\n 0.0195847,\n 0,\n 0.0793895,\n 0.968148,\n 0.0194749,\n 0,\n 0.0899984,\n 0.962565,\n 0.0194277,\n 0,\n 0.101132,\n 0.956041,\n 0.0192991,\n 0,\n 0.112775,\n 0.947749,\n 0.0189893,\n 0,\n 0.124917,\n 0.94018,\n 0.018704,\n 0,\n 0.137547,\n 0.93165,\n 0.0183458,\n 0,\n 0.150655,\n 0.921798,\n 0.0178775,\n 0,\n 0.164236,\n 0.911573,\n 0.0173618,\n 0,\n 0.178281,\n 0.901569,\n 0.0168482,\n 0,\n 0.192788,\n 0.890341,\n 0.016265,\n 0,\n 0.207752,\n 0.877835,\n 0.0156199,\n 0,\n 0.223171,\n 0.865472,\n 0.0149516,\n 0,\n 0.239044,\n 0.852905,\n 0.0143274,\n 0,\n 0.255371,\n 0.838906,\n 0.0136643,\n 0,\n 0.272153,\n 0.824888,\n 0.0129903,\n 0,\n 0.289393,\n 0.809977,\n 0.0123218,\n 0,\n 0.307093,\n 0.794697,\n 0.0116572,\n 0,\n 0.325259,\n 0.780028,\n 0.0110307,\n 0,\n 0.343896,\n 0.765124,\n 0.0104236,\n 0,\n 0.363012,\n 0.750411,\n 98219e-7,\n 0,\n 0.382617,\n 0.737264,\n 924397e-8,\n 0,\n 0.402719,\n 0.724799,\n 868719e-8,\n 0,\n 0.423332,\n 0.712253,\n 816476e-8,\n 0,\n 0.444469,\n 0.699267,\n 767262e-8,\n 0,\n 0.466146,\n 0.685618,\n 719746e-8,\n 0,\n 0.488383,\n 0.671736,\n 673916e-8,\n 0,\n 0.511199,\n 0.657777,\n 631937e-8,\n 0,\n 0.534618,\n 0.643497,\n 592411e-8,\n 0,\n 0.558668,\n 0.62889,\n 553928e-8,\n 0,\n 0.58338,\n 0.614299,\n 51934e-7,\n 0,\n 0.608787,\n 0.599197,\n 485985e-8,\n 0,\n 0.634929,\n 0.584175,\n 454357e-8,\n 0,\n 0.661849,\n 0.569541,\n 425787e-8,\n 0,\n 0.689594,\n 0.555193,\n 397905e-8,\n 0,\n 0.718211,\n 0.540947,\n 372364e-8,\n 0,\n 0.747742,\n 0.526593,\n 348599e-8,\n 0,\n 0.778205,\n 0.512335,\n 326103e-8,\n 0,\n 0.80953,\n 0.498017,\n 305137e-8,\n 0,\n 0.84127,\n 0.483609,\n 285485e-8,\n 0,\n 0.873016,\n 0.469368,\n 267472e-8,\n 0,\n 0.904762,\n 0.455037,\n 249945e-8,\n 0,\n 0.936508,\n 0.441493,\n 234792e-8,\n 0,\n 0.968254,\n 0.428147,\n 219936e-8,\n 0,\n 1,\n 1,\n 0.0219422,\n 0,\n 0,\n 1,\n 0.0219423,\n 0,\n 0,\n 0.999998,\n 0.0219434,\n 0,\n 0,\n 0.999993,\n 0.0219481,\n 0,\n 0,\n 0.999981,\n 0.021961,\n 0,\n 0,\n 0.999949,\n 0.0219879,\n 0,\n 0,\n 0.999896,\n 0.0220367,\n 0,\n 593194e-10,\n 0.999808,\n 0.0221167,\n 0,\n 75364e-8,\n 0.99967,\n 0.0222383,\n 0,\n 237884e-8,\n 0.999466,\n 0.0224125,\n 0,\n 495612e-8,\n 0.999174,\n 0.0226495,\n 0,\n 844887e-8,\n 0.998725,\n 0.0229525,\n 0,\n 0.0128058,\n 0.996979,\n 0.0231123,\n 0,\n 0.0179742,\n 0.994317,\n 0.0230742,\n 0,\n 0.0239047,\n 0.992781,\n 0.0232895,\n 0,\n 0.0305526,\n 0.991191,\n 0.0235734,\n 0,\n 0.0378786,\n 0.987787,\n 0.0236152,\n 0,\n 0.0458475,\n 0.985092,\n 0.0237994,\n 0,\n 0.0544287,\n 0.981121,\n 0.0238553,\n 0,\n 0.0635952,\n 0.976924,\n 0.0238706,\n 0,\n 0.0733233,\n 0.97218,\n 0.0238704,\n 0,\n 0.0835922,\n 0.965956,\n 0.0236598,\n 0,\n 0.0943839,\n 0.959998,\n 0.0234735,\n 0,\n 0.105682,\n 0.953245,\n 0.0232277,\n 0,\n 0.117474,\n 0.944445,\n 0.0226973,\n 0,\n 0.129747,\n 0.937087,\n 0.0223527,\n 0,\n 0.142491,\n 0.928341,\n 0.0218144,\n 0,\n 0.155697,\n 0.9184,\n 0.0211516,\n 0,\n 0.169358,\n 0.907959,\n 0.0204553,\n 0,\n 0.183469,\n 0.89808,\n 0.0197673,\n 0,\n 0.198024,\n 0.887047,\n 0.0189915,\n 0,\n 0.21302,\n 0.875221,\n 0.0182082,\n 0,\n 0.228455,\n 0.86269,\n 0.0173584,\n 0,\n 0.244329,\n 0.850735,\n 0.0165718,\n 0,\n 0.260639,\n 0.837545,\n 0.0157524,\n 0,\n 0.277389,\n 0.823639,\n 0.0149482,\n 0,\n 0.29458,\n 0.809699,\n 0.0141431,\n 0,\n 0.312216,\n 0.794797,\n 0.0133527,\n 0,\n 0.3303,\n 0.780578,\n 0.0126193,\n 0,\n 0.34884,\n 0.766019,\n 0.0118914,\n 0,\n 0.367842,\n 0.751447,\n 0.0111839,\n 0,\n 0.387315,\n 0.737275,\n 0.010514,\n 0,\n 0.40727,\n 0.724545,\n 987277e-8,\n 0,\n 0.427717,\n 0.712644,\n 926569e-8,\n 0,\n 0.448671,\n 0.700432,\n 869029e-8,\n 0,\n 0.470149,\n 0.687664,\n 814691e-8,\n 0,\n 0.492167,\n 0.674288,\n 763012e-8,\n 0,\n 0.514746,\n 0.660966,\n 714437e-8,\n 0,\n 0.537911,\n 0.647264,\n 668457e-8,\n 0,\n 0.561688,\n 0.633431,\n 626581e-8,\n 0,\n 0.586108,\n 0.619133,\n 585593e-8,\n 0,\n 0.611206,\n 0.604935,\n 548188e-8,\n 0,\n 0.637022,\n 0.590236,\n 513288e-8,\n 0,\n 0.663599,\n 0.575473,\n 47906e-7,\n 0,\n 0.690989,\n 0.561228,\n 448895e-8,\n 0,\n 0.719242,\n 0.547054,\n 420233e-8,\n 0,\n 0.748411,\n 0.533175,\n 392869e-8,\n 0,\n 0.778531,\n 0.519163,\n 367445e-8,\n 0,\n 0.809583,\n 0.505328,\n 344097e-8,\n 0,\n 0.84127,\n 0.491446,\n 322003e-8,\n 0,\n 0.873016,\n 0.477356,\n 301283e-8,\n 0,\n 0.904762,\n 0.46356,\n 282592e-8,\n 0,\n 0.936508,\n 0.449623,\n 264956e-8,\n 0,\n 0.968254,\n 0.436068,\n 246956e-8,\n 0,\n 1,\n 1,\n 0.0276135,\n 0,\n 0,\n 1,\n 0.0276136,\n 0,\n 0,\n 0.999998,\n 0.0276148,\n 0,\n 0,\n 0.999993,\n 0.0276201,\n 0,\n 0,\n 0.999976,\n 0.0276342,\n 0,\n 0,\n 0.999945,\n 0.027664,\n 0,\n 0,\n 0.999884,\n 0.0277179,\n 0,\n 18679e-8,\n 0.999784,\n 0.027806,\n 0,\n 119607e-8,\n 0.99963,\n 0.0279394,\n 0,\n 318407e-8,\n 0.999401,\n 0.0281295,\n 0,\n 613601e-8,\n 0.999066,\n 0.0283858,\n 0,\n 999963e-8,\n 0.998524,\n 0.0287027,\n 0,\n 0.0147164,\n 0.995702,\n 0.0286256,\n 0,\n 0.0202295,\n 0.993593,\n 0.0286733,\n 0,\n 0.0264876,\n 0.992067,\n 0.0288989,\n 0,\n 0.0334452,\n 0.990548,\n 0.0292135,\n 0,\n 0.0410621,\n 0.986775,\n 0.0291296,\n 0,\n 0.0493032,\n 0.984054,\n 0.0293099,\n 0,\n 0.0581381,\n 0.979481,\n 0.0291881,\n 0,\n 0.0675397,\n 0.975297,\n 0.0291598,\n 0,\n 0.0774848,\n 0.96981,\n 0.028954,\n 0,\n 0.0879528,\n 0.963524,\n 0.028628,\n 0,\n 0.0989258,\n 0.957398,\n 0.0283135,\n 0,\n 0.110388,\n 0.950088,\n 0.0278469,\n 0,\n 0.122327,\n 0.941538,\n 0.0271798,\n 0,\n 0.134729,\n 0.933332,\n 0.0265388,\n 0,\n 0.147587,\n 0.924392,\n 0.0257776,\n 0,\n 0.160889,\n 0.914581,\n 0.024916,\n 0,\n 0.174631,\n 0.904347,\n 0.0240242,\n 0,\n 0.188806,\n 0.894324,\n 0.0231229,\n 0,\n 0.203409,\n 0.883724,\n 0.022153,\n 0,\n 0.218437,\n 0.872207,\n 0.0211355,\n 0,\n 0.233888,\n 0.859927,\n 0.0201048,\n 0,\n 0.249761,\n 0.848373,\n 0.0191263,\n 0,\n 0.266056,\n 0.836023,\n 0.0181306,\n 0,\n 0.282774,\n 0.82289,\n 0.0171718,\n 0,\n 0.299917,\n 0.809324,\n 0.0162196,\n 0,\n 0.317488,\n 0.795361,\n 0.0152622,\n 0,\n 0.335493,\n 0.781253,\n 0.01439,\n 0,\n 0.353936,\n 0.767338,\n 0.013533,\n 0,\n 0.372825,\n 0.753156,\n 0.0127244,\n 0,\n 0.392168,\n 0.739122,\n 0.0119454,\n 0,\n 0.411976,\n 0.725358,\n 0.0112054,\n 0,\n 0.432259,\n 0.712949,\n 0.010487,\n 0,\n 0.453032,\n 0.701621,\n 984032e-8,\n 0,\n 0.47431,\n 0.689703,\n 921495e-8,\n 0,\n 0.496111,\n 0.677216,\n 862492e-8,\n 0,\n 0.518456,\n 0.664217,\n 806882e-8,\n 0,\n 0.541367,\n 0.65137,\n 755922e-8,\n 0,\n 0.564872,\n 0.638,\n 705705e-8,\n 0,\n 0.589001,\n 0.62453,\n 661266e-8,\n 0,\n 0.613789,\n 0.610601,\n 618432e-8,\n 0,\n 0.639277,\n 0.59676,\n 578033e-8,\n 0,\n 0.66551,\n 0.582433,\n 540927e-8,\n 0,\n 0.692539,\n 0.568026,\n 506104e-8,\n 0,\n 0.720422,\n 0.55414,\n 47353e-7,\n 0,\n 0.749216,\n 0.540178,\n 442889e-8,\n 0,\n 0.778974,\n 0.526513,\n 414363e-8,\n 0,\n 0.809711,\n 0.512954,\n 388237e-8,\n 0,\n 0.84127,\n 0.499403,\n 362875e-8,\n 0,\n 0.873016,\n 0.486026,\n 340827e-8,\n 0,\n 0.904762,\n 0.472345,\n 318598e-8,\n 0,\n 0.936508,\n 0.458828,\n 297635e-8,\n 0,\n 0.968254,\n 0.445379,\n 279447e-8,\n 0,\n 1,\n 1,\n 0.0345716,\n 0,\n 0,\n 1,\n 0.0345717,\n 0,\n 0,\n 0.999999,\n 0.034573,\n 0,\n 0,\n 0.999991,\n 0.0345787,\n 0,\n 0,\n 0.999974,\n 0.0345941,\n 0,\n 0,\n 0.999937,\n 0.0346263,\n 0,\n 188589e-11,\n 0.999869,\n 0.0346847,\n 0,\n 409238e-9,\n 0.999757,\n 0.0347798,\n 0,\n 17674e-7,\n 0.999582,\n 0.0349233,\n 0,\n 413658e-8,\n 0.999322,\n 0.0351265,\n 0,\n 747408e-8,\n 0.998939,\n 0.0353967,\n 0,\n 0.0117157,\n 0.998219,\n 0.0357018,\n 0,\n 0.0167966,\n 0.994974,\n 0.0354726,\n 0,\n 0.0226572,\n 0.993201,\n 0.0355621,\n 0,\n 0.0292445,\n 0.991573,\n 0.0357641,\n 0,\n 0.0365123,\n 0.989301,\n 0.0359252,\n 0,\n 0.0444203,\n 0.985712,\n 0.0358017,\n 0,\n 0.0529334,\n 0.982411,\n 0.0358353,\n 0,\n 0.0620214,\n 0.977827,\n 0.035617,\n 0,\n 0.0716574,\n 0.973278,\n 0.0354398,\n 0,\n 0.0818186,\n 0.967397,\n 0.0350483,\n 0,\n 0.0924846,\n 0.960696,\n 0.0344795,\n 0,\n 0.103638,\n 0.954349,\n 0.0339861,\n 0,\n 0.115263,\n 0.946066,\n 0.0331323,\n 0,\n 0.127348,\n 0.938012,\n 0.032359,\n 0,\n 0.13988,\n 0.929413,\n 0.0314413,\n 0,\n 0.152849,\n 0.920355,\n 0.0304103,\n 0,\n 0.166248,\n 0.910586,\n 0.0292785,\n 0,\n 0.18007,\n 0.900609,\n 0.0281391,\n 0,\n 0.194308,\n 0.890093,\n 0.0269103,\n 0,\n 0.208958,\n 0.880013,\n 0.0257269,\n 0,\n 0.224018,\n 0.869001,\n 0.0244671,\n 0,\n 0.239485,\n 0.85751,\n 0.0232252,\n 0,\n 0.255359,\n 0.84582,\n 0.0220117,\n 0,\n 0.271638,\n 0.834383,\n 0.0208274,\n 0,\n 0.288324,\n 0.822158,\n 0.0196628,\n 0,\n 0.305419,\n 0.809056,\n 0.0185306,\n 0,\n 0.322927,\n 0.795832,\n 0.0174174,\n 0,\n 0.340851,\n 0.782547,\n 0.0163758,\n 0,\n 0.359199,\n 0.7689,\n 0.015391,\n 0,\n 0.377975,\n 0.755526,\n 0.0144488,\n 0,\n 0.397189,\n 0.741681,\n 0.0135372,\n 0,\n 0.416851,\n 0.728178,\n 0.0126957,\n 0,\n 0.436971,\n 0.714642,\n 0.0118812,\n 0,\n 0.457564,\n 0.702756,\n 0.0111165,\n 0,\n 0.478644,\n 0.69175,\n 0.0104145,\n 0,\n 0.500229,\n 0.680159,\n 974439e-8,\n 0,\n 0.522339,\n 0.668073,\n 911926e-8,\n 0,\n 0.544997,\n 0.655405,\n 851393e-8,\n 0,\n 0.56823,\n 0.642921,\n 797637e-8,\n 0,\n 0.592068,\n 0.629993,\n 745119e-8,\n 0,\n 0.616546,\n 0.616828,\n 696972e-8,\n 0,\n 0.641705,\n 0.603305,\n 652425e-8,\n 0,\n 0.66759,\n 0.589833,\n 610188e-8,\n 0,\n 0.694255,\n 0.575945,\n 570834e-8,\n 0,\n 0.72176,\n 0.561745,\n 533384e-8,\n 0,\n 0.750168,\n 0.548277,\n 500001e-8,\n 0,\n 0.779545,\n 0.534467,\n 467582e-8,\n 0,\n 0.809933,\n 0.521032,\n 438092e-8,\n 0,\n 0.841272,\n 0.507877,\n 410348e-8,\n 0,\n 0.873016,\n 0.494654,\n 383618e-8,\n 0,\n 0.904762,\n 0.481592,\n 358699e-8,\n 0,\n 0.936508,\n 0.468509,\n 337281e-8,\n 0,\n 0.968254,\n 0.455293,\n 316196e-8,\n 0,\n 1,\n 1,\n 0.0430698,\n 0,\n 0,\n 1,\n 0.0430699,\n 0,\n 0,\n 0.999998,\n 0.0430713,\n 0,\n 0,\n 0.999991,\n 0.0430773,\n 0,\n 0,\n 0.99997,\n 0.0430936,\n 0,\n 0,\n 0.999928,\n 0.0431277,\n 0,\n 406396e-10,\n 0.999852,\n 0.0431893,\n 0,\n 744376e-9,\n 0.999724,\n 0.0432895,\n 0,\n 24806e-7,\n 0.999527,\n 0.0434397,\n 0,\n 524779e-8,\n 0.99923,\n 0.0436507,\n 0,\n 898164e-8,\n 0.998783,\n 0.0439255,\n 0,\n 0.0136083,\n 0.997507,\n 0.0441104,\n 0,\n 0.0190582,\n 0.994418,\n 0.0438225,\n 0,\n 0.0252694,\n 0.992864,\n 0.0439396,\n 0,\n 0.0321879,\n 0.991127,\n 0.0440962,\n 0,\n 0.039767,\n 0.987331,\n 0.0438408,\n 0,\n 0.0479667,\n 0.984819,\n 0.0438991,\n 0,\n 0.056752,\n 0.980384,\n 0.0435906,\n 0,\n 0.0660929,\n 0.975846,\n 0.0432543,\n 0,\n 0.075963,\n 0.970748,\n 0.0428293,\n 0,\n 0.0863398,\n 0.964303,\n 0.042153,\n 0,\n 0.0972035,\n 0.95772,\n 0.0414111,\n 0,\n 0.108537,\n 0.950747,\n 0.0405893,\n 0,\n 0.120325,\n 0.942533,\n 0.0394887,\n 0,\n 0.132554,\n 0.934045,\n 0.0383544,\n 0,\n 0.145215,\n 0.924942,\n 0.037057,\n 0,\n 0.158296,\n 0.915811,\n 0.0356993,\n 0,\n 0.17179,\n 0.90612,\n 0.0342401,\n 0,\n 0.185691,\n 0.896434,\n 0.0328078,\n 0,\n 0.199993,\n 0.886021,\n 0.031288,\n 0,\n 0.214691,\n 0.876081,\n 0.0297776,\n 0,\n 0.229782,\n 0.865608,\n 0.0282334,\n 0,\n 0.245265,\n 0.854924,\n 0.026749,\n 0,\n 0.261138,\n 0.843607,\n 0.02526,\n 0,\n 0.277401,\n 0.832456,\n 0.0238214,\n 0,\n 0.294056,\n 0.821342,\n 0.0224682,\n 0,\n 0.311104,\n 0.809303,\n 0.0211297,\n 0,\n 0.328548,\n 0.796468,\n 0.0198387,\n 0,\n 0.346394,\n 0.784046,\n 0.0186227,\n 0,\n 0.364645,\n 0.771262,\n 0.0174561,\n 0,\n 0.38331,\n 0.758118,\n 0.0163806,\n 0,\n 0.402396,\n 0.745075,\n 0.0153287,\n 0,\n 0.421912,\n 0.731926,\n 0.0143647,\n 0,\n 0.44187,\n 0.71863,\n 0.0134363,\n 0,\n 0.462283,\n 0.705414,\n 0.0125603,\n 0,\n 0.483165,\n 0.693792,\n 0.0117508,\n 0,\n 0.504535,\n 0.683108,\n 0.0110016,\n 0,\n 0.52641,\n 0.67183,\n 0.0102757,\n 0,\n 0.548816,\n 0.66015,\n 962044e-8,\n 0,\n 0.571776,\n 0.647907,\n 898031e-8,\n 0,\n 0.595323,\n 0.635734,\n 840811e-8,\n 0,\n 0.619489,\n 0.623208,\n 786211e-8,\n 0,\n 0.644317,\n 0.610438,\n 734953e-8,\n 0,\n 0.669852,\n 0.597345,\n 687688e-8,\n 0,\n 0.696148,\n 0.584138,\n 643469e-8,\n 0,\n 0.723267,\n 0.5707,\n 602236e-8,\n 0,\n 0.75128,\n 0.556966,\n 56324e-7,\n 0,\n 0.780258,\n 0.543607,\n 528277e-8,\n 0,\n 0.810268,\n 0.530213,\n 493999e-8,\n 0,\n 0.841311,\n 0.516912,\n 462265e-8,\n 0,\n 0.873016,\n 0.503916,\n 43307e-7,\n 0,\n 0.904762,\n 0.491146,\n 406858e-8,\n 0,\n 0.936508,\n 0.478439,\n 381436e-8,\n 0,\n 0.968254,\n 0.465834,\n 358003e-8,\n 0,\n 1,\n 1,\n 0.0534039,\n 0,\n 0,\n 1,\n 0.053404,\n 0,\n 0,\n 0.999998,\n 0.0534055,\n 0,\n 0,\n 0.999989,\n 0.0534116,\n 0,\n 0,\n 0.999968,\n 0.0534283,\n 0,\n 0,\n 0.999918,\n 0.0534633,\n 0,\n 155895e-9,\n 0.99983,\n 0.0535262,\n 0,\n 120914e-8,\n 0.999685,\n 0.0536281,\n 0,\n 334944e-8,\n 0.999461,\n 0.0537799,\n 0,\n 653077e-8,\n 0.999119,\n 0.0539902,\n 0,\n 0.0106718,\n 0.998582,\n 0.0542524,\n 0,\n 0.0156907,\n 0.995919,\n 0.0540318,\n 0,\n 0.0215147,\n 0.993735,\n 0.0538914,\n 0,\n 0.0280801,\n 0.992126,\n 0.0539557,\n 0,\n 0.0353323,\n 0.990266,\n 0.0540401,\n 0,\n 0.0432247,\n 0.986317,\n 0.0536064,\n 0,\n 0.0517172,\n 0.983213,\n 0.0534425,\n 0,\n 0.0607754,\n 0.978303,\n 0.0528622,\n 0,\n 0.0703698,\n 0.973665,\n 0.0523363,\n 0,\n 0.0804742,\n 0.968091,\n 0.0516165,\n 0,\n 0.0910667,\n 0.961026,\n 0.0505434,\n 0,\n 0.102128,\n 0.954333,\n 0.049523,\n 0,\n 0.113641,\n 0.946372,\n 0.0481698,\n 0,\n 0.125591,\n 0.938254,\n 0.0467674,\n 0,\n 0.137965,\n 0.929516,\n 0.0452341,\n 0,\n 0.150754,\n 0.920106,\n 0.0435083,\n 0,\n 0.163947,\n 0.910899,\n 0.0417399,\n 0,\n 0.177537,\n 0.901532,\n 0.0399389,\n 0,\n 0.191516,\n 0.891919,\n 0.0380901,\n 0,\n 0.205881,\n 0.882006,\n 0.0362341,\n 0,\n 0.220626,\n 0.871965,\n 0.0343444,\n 0,\n 0.235749,\n 0.862145,\n 0.0324832,\n 0,\n 0.251248,\n 0.852058,\n 0.0306681,\n 0,\n 0.267121,\n 0.84161,\n 0.0289097,\n 0,\n 0.283368,\n 0.830806,\n 0.0272079,\n 0,\n 0.299992,\n 0.820476,\n 0.0256089,\n 0,\n 0.316992,\n 0.809514,\n 0.0240394,\n 0,\n 0.334374,\n 0.797865,\n 0.0225379,\n 0,\n 0.35214,\n 0.785621,\n 0.0211235,\n 0,\n 0.370296,\n 0.773765,\n 0.0197908,\n 0,\n 0.388849,\n 0.761629,\n 0.0185235,\n 0,\n 0.407807,\n 0.748891,\n 0.0173358,\n 0,\n 0.427178,\n 0.736437,\n 0.0162305,\n 0,\n 0.446974,\n 0.723707,\n 0.0151778,\n 0,\n 0.467207,\n 0.710606,\n 0.0141791,\n 0,\n 0.487892,\n 0.698019,\n 0.0132592,\n 0,\n 0.509046,\n 0.686203,\n 0.0123887,\n 0,\n 0.530687,\n 0.675692,\n 0.0115976,\n 0,\n 0.552839,\n 0.664826,\n 0.0108325,\n 0,\n 0.575527,\n 0.65349,\n 0.0101348,\n 0,\n 0.59878,\n 0.641774,\n 947756e-8,\n 0,\n 0.622634,\n 0.629794,\n 886058e-8,\n 0,\n 0.647128,\n 0.617647,\n 828526e-8,\n 0,\n 0.672308,\n 0.60534,\n 775312e-8,\n 0,\n 0.698231,\n 0.592718,\n 726033e-8,\n 0,\n 0.724958,\n 0.579746,\n 679731e-8,\n 0,\n 0.752563,\n 0.566763,\n 636111e-8,\n 0,\n 0.781127,\n 0.553515,\n 595228e-8,\n 0,\n 0.810733,\n 0.540118,\n 556876e-8,\n 0,\n 0.841426,\n 0.527325,\n 523051e-8,\n 0,\n 0.873016,\n 0.514265,\n 490712e-8,\n 0,\n 0.904762,\n 0.501406,\n 460297e-8,\n 0,\n 0.936508,\n 0.488922,\n 431247e-8,\n 0,\n 0.968254,\n 0.476541,\n 40472e-7,\n 0,\n 1,\n 1,\n 0.0659184,\n 0,\n 0,\n 1,\n 0.0659185,\n 0,\n 0,\n 0.999998,\n 0.06592,\n 0,\n 0,\n 0.999988,\n 0.0659259,\n 0,\n 0,\n 0.999963,\n 0.0659423,\n 0,\n 0,\n 0.999907,\n 0.0659764,\n 0,\n 374198e-9,\n 0.999806,\n 0.0660376,\n 0,\n 182071e-8,\n 0.999639,\n 0.0661361,\n 0,\n 43894e-7,\n 0.999378,\n 0.0662814,\n 0,\n 800055e-8,\n 0.998985,\n 0.0664779,\n 0,\n 0.0125594,\n 0.998285,\n 0.0666914,\n 0,\n 0.0179786,\n 0.995071,\n 0.0661989,\n 0,\n 0.0241822,\n 0.993172,\n 0.0660454,\n 0,\n 0.031106,\n 0.991438,\n 0.0660105,\n 0,\n 0.0386952,\n 0.988428,\n 0.0656875,\n 0,\n 0.0469032,\n 0.985218,\n 0.0652913,\n 0,\n 0.0556905,\n 0.981128,\n 0.0647107,\n 0,\n 0.065023,\n 0.976015,\n 0.0638491,\n 0,\n 0.0748717,\n 0.97097,\n 0.062993,\n 0,\n 0.0852112,\n 0.964582,\n 0.0617927,\n 0,\n 0.0960199,\n 0.957383,\n 0.0603626,\n 0,\n 0.107279,\n 0.949969,\n 0.0588128,\n 0,\n 0.118971,\n 0.941843,\n 0.0570274,\n 0,\n 0.131084,\n 0.933624,\n 0.0551885,\n 0,\n 0.143604,\n 0.924543,\n 0.053122,\n 0,\n 0.156521,\n 0.914919,\n 0.0508897,\n 0,\n 0.169825,\n 0.905773,\n 0.0486418,\n 0,\n 0.18351,\n 0.896434,\n 0.0463364,\n 0,\n 0.197569,\n 0.887195,\n 0.0440623,\n 0,\n 0.211997,\n 0.877706,\n 0.0417799,\n 0,\n 0.226789,\n 0.867719,\n 0.03945,\n 0,\n 0.241944,\n 0.858587,\n 0.037243,\n 0,\n 0.257458,\n 0.849317,\n 0.0350956,\n 0,\n 0.273331,\n 0.839585,\n 0.0329852,\n 0,\n 0.289563,\n 0.829856,\n 0.0310028,\n 0,\n 0.306154,\n 0.819589,\n 0.0290953,\n 0,\n 0.323108,\n 0.809714,\n 0.0272738,\n 0,\n 0.340426,\n 0.79934,\n 0.0255631,\n 0,\n 0.358113,\n 0.788224,\n 0.0239175,\n 0,\n 0.376175,\n 0.776619,\n 0.0223831,\n 0,\n 0.394616,\n 0.76521,\n 0.0209298,\n 0,\n 0.413445,\n 0.753716,\n 0.0195786,\n 0,\n 0.432671,\n 0.741564,\n 0.0183001,\n 0,\n 0.452305,\n 0.729413,\n 0.0171259,\n 0,\n 0.472358,\n 0.717146,\n 0.0159933,\n 0,\n 0.492845,\n 0.70436,\n 0.0149495,\n 0,\n 0.513783,\n 0.69219,\n 0.0139681,\n 0,\n 0.535189,\n 0.680289,\n 0.0130577,\n 0,\n 0.557087,\n 0.669611,\n 0.0122198,\n 0,\n 0.5795,\n 0.659113,\n 0.0114174,\n 0,\n 0.602459,\n 0.648148,\n 0.0106729,\n 0,\n 0.625997,\n 0.636905,\n 998997e-8,\n 0,\n 0.650154,\n 0.625154,\n 934313e-8,\n 0,\n 0.674976,\n 0.613481,\n 874839e-8,\n 0,\n 0.700518,\n 0.60154,\n 818265e-8,\n 0,\n 0.726845,\n 0.58943,\n 766889e-8,\n 0,\n 0.754032,\n 0.576828,\n 717153e-8,\n 0,\n 0.782167,\n 0.564194,\n 672696e-8,\n 0,\n 0.811344,\n 0.551501,\n 630863e-8,\n 0,\n 0.841644,\n 0.538635,\n 592177e-8,\n 0,\n 0.873016,\n 0.525724,\n 554888e-8,\n 0,\n 0.904762,\n 0.513209,\n 520225e-8,\n 0,\n 0.936508,\n 0.500457,\n 488231e-8,\n 0,\n 0.968254,\n 0.48799,\n 457153e-8,\n 0,\n 1,\n 1,\n 0.0810131,\n 0,\n 0,\n 1,\n 0.0810133,\n 0,\n 0,\n 0.999997,\n 0.0810145,\n 0,\n 0,\n 0.999985,\n 0.08102,\n 0,\n 0,\n 0.999956,\n 0.0810347,\n 0,\n 195026e-10,\n 0.999893,\n 0.0810656,\n 0,\n 719316e-9,\n 0.999777,\n 0.0811205,\n 0,\n 259774e-8,\n 0.999583,\n 0.081208,\n 0,\n 561807e-8,\n 0.999281,\n 0.0813343,\n 0,\n 967472e-8,\n 0.998813,\n 0.0814969,\n 0,\n 0.0146627,\n 0.997597,\n 0.0815217,\n 0,\n 0.0204902,\n 0.994379,\n 0.0808502,\n 0,\n 0.0270802,\n 0.992744,\n 0.0806792,\n 0,\n 0.0343674,\n 0.990745,\n 0.0804589,\n 0,\n 0.0422974,\n 0.986646,\n 0.0796107,\n 0,\n 0.0508242,\n 0.983611,\n 0.0790913,\n 0,\n 0.0599087,\n 0.978869,\n 0.0780746,\n 0,\n 0.0695175,\n 0.973475,\n 0.0768218,\n 0,\n 0.0796223,\n 0.967845,\n 0.0754926,\n 0,\n 0.0901983,\n 0.960778,\n 0.0737063,\n 0,\n 0.101224,\n 0.953333,\n 0.0718052,\n 0,\n 0.112682,\n 0.945274,\n 0.0695946,\n 0,\n 0.124555,\n 0.936955,\n 0.0672492,\n 0,\n 0.136831,\n 0.928319,\n 0.0647732,\n 0,\n 0.149496,\n 0.919075,\n 0.0620947,\n 0,\n 0.162542,\n 0.909114,\n 0.0591816,\n 0,\n 0.175958,\n 0.900137,\n 0.0563917,\n 0,\n 0.189739,\n 0.891069,\n 0.0535392,\n 0,\n 0.203877,\n 0.882262,\n 0.0507642,\n 0,\n 0.218368,\n 0.873232,\n 0.0479793,\n 0,\n 0.233208,\n 0.864042,\n 0.045226,\n 0,\n 0.248393,\n 0.855002,\n 0.0425413,\n 0,\n 0.263923,\n 0.846569,\n 0.0400126,\n 0,\n 0.279796,\n 0.837714,\n 0.0375269,\n 0,\n 0.296012,\n 0.828918,\n 0.0352027,\n 0,\n 0.312573,\n 0.819783,\n 0.0330011,\n 0,\n 0.329479,\n 0.810129,\n 0.0308908,\n 0,\n 0.346734,\n 0.800866,\n 0.0289112,\n 0,\n 0.364342,\n 0.79093,\n 0.0270255,\n 0,\n 0.382307,\n 0.780593,\n 0.0252758,\n 0,\n 0.400637,\n 0.769511,\n 0.0236178,\n 0,\n 0.419337,\n 0.758558,\n 0.0220652,\n 0,\n 0.438418,\n 0.747632,\n 0.0206289,\n 0,\n 0.457889,\n 0.736146,\n 0.0192873,\n 0,\n 0.477761,\n 0.724093,\n 0.0180333,\n 0,\n 0.49805,\n 0.71234,\n 0.0168264,\n 0,\n 0.51877,\n 0.700201,\n 0.015746,\n 0,\n 0.53994,\n 0.687949,\n 0.0147027,\n 0,\n 0.561581,\n 0.676163,\n 0.0137512,\n 0,\n 0.583718,\n 0.665001,\n 0.0128655,\n 0,\n 0.60638,\n 0.65472,\n 0.0120366,\n 0,\n 0.629599,\n 0.644213,\n 0.0112604,\n 0,\n 0.653415,\n 0.633382,\n 0.0105413,\n 0,\n 0.677874,\n 0.62212,\n 986498e-8,\n 0,\n 0.70303,\n 0.610631,\n 923308e-8,\n 0,\n 0.728948,\n 0.599078,\n 864206e-8,\n 0,\n 0.755706,\n 0.587519,\n 811784e-8,\n 0,\n 0.783396,\n 0.575505,\n 761237e-8,\n 0,\n 0.812121,\n 0.563148,\n 713949e-8,\n 0,\n 0.841989,\n 0.550828,\n 668379e-8,\n 0,\n 0.873035,\n 0.538458,\n 627715e-8,\n 0,\n 0.904762,\n 0.525905,\n 588336e-8,\n 0,\n 0.936508,\n 0.513517,\n 552687e-8,\n 0,\n 0.968254,\n 0.501395,\n 519681e-8,\n 0,\n 1,\n 1,\n 0.0991506,\n 0,\n 0,\n 1,\n 0.0991504,\n 0,\n 0,\n 0.999996,\n 0.0991515,\n 0,\n 0,\n 0.999984,\n 0.0991558,\n 0,\n 0,\n 0.999947,\n 0.0991672,\n 0,\n 114389e-9,\n 0.999874,\n 0.0991912,\n 0,\n 121503e-8,\n 0.999739,\n 0.0992331,\n 0,\n 356108e-8,\n 0.999514,\n 0.0992983,\n 0,\n 705578e-8,\n 0.999159,\n 0.0993877,\n 0,\n 0.011574,\n 0.998586,\n 0.0994837,\n 0,\n 0.017003,\n 0.995731,\n 0.0988425,\n 0,\n 0.0232484,\n 0.993384,\n 0.098276,\n 0,\n 0.0302318,\n 0.991615,\n 0.0979269,\n 0,\n 0.0378884,\n 0.989029,\n 0.0973432,\n 0,\n 0.0461641,\n 0.985373,\n 0.0963539,\n 0,\n 0.0550136,\n 0.981278,\n 0.0952306,\n 0,\n 0.0643988,\n 0.975777,\n 0.0936233,\n 0,\n 0.0742868,\n 0.970526,\n 0.0920219,\n 0,\n 0.0846501,\n 0.963755,\n 0.0898912,\n 0,\n 0.0954644,\n 0.956676,\n 0.0876064,\n 0,\n 0.106709,\n 0.948099,\n 0.0847751,\n 0,\n 0.118367,\n 0.939718,\n 0.0818638,\n 0,\n 0.130423,\n 0.931305,\n 0.078857,\n 0,\n 0.142862,\n 0.922342,\n 0.0756127,\n 0,\n 0.155674,\n 0.912842,\n 0.0721473,\n 0,\n 0.168849,\n 0.903304,\n 0.0686195,\n 0,\n 0.182378,\n 0.89411,\n 0.0650589,\n 0,\n 0.196255,\n 0.885512,\n 0.0616022,\n 0,\n 0.210473,\n 0.877193,\n 0.0582434,\n 0,\n 0.225027,\n 0.86877,\n 0.0548979,\n 0,\n 0.239915,\n 0.860267,\n 0.0516095,\n 0,\n 0.255132,\n 0.851915,\n 0.048468,\n 0,\n 0.270678,\n 0.843912,\n 0.0454447,\n 0,\n 0.286551,\n 0.83604,\n 0.0425612,\n 0,\n 0.302751,\n 0.828245,\n 0.0398752,\n 0,\n 0.31928,\n 0.820159,\n 0.0373198,\n 0,\n 0.336138,\n 0.81167,\n 0.034916,\n 0,\n 0.35333,\n 0.802659,\n 0.0326402,\n 0,\n 0.370858,\n 0.793921,\n 0.0304901,\n 0,\n 0.388728,\n 0.784713,\n 0.0284857,\n 0,\n 0.406944,\n 0.774946,\n 0.0266186,\n 0,\n 0.425515,\n 0.76448,\n 0.0248593,\n 0,\n 0.444449,\n 0.753793,\n 0.0232114,\n 0,\n 0.463756,\n 0.743506,\n 0.0217039,\n 0,\n 0.483447,\n 0.732555,\n 0.0202841,\n 0,\n 0.503535,\n 0.720965,\n 0.0189648,\n 0,\n 0.524036,\n 0.709422,\n 0.0177189,\n 0,\n 0.544968,\n 0.697756,\n 0.0165626,\n 0,\n 0.56635,\n 0.685565,\n 0.015483,\n 0,\n 0.588208,\n 0.673987,\n 0.0144892,\n 0,\n 0.610569,\n 0.66244,\n 0.0135607,\n 0,\n 0.633466,\n 0.651675,\n 0.0126956,\n 0,\n 0.656936,\n 0.641598,\n 0.0118788,\n 0,\n 0.681025,\n 0.63121,\n 0.0111261,\n 0,\n 0.705788,\n 0.620514,\n 0.010437,\n 0,\n 0.731289,\n 0.609366,\n 978747e-8,\n 0,\n 0.757606,\n 0.598137,\n 917257e-8,\n 0,\n 0.784834,\n 0.586966,\n 859778e-8,\n 0,\n 0.813085,\n 0.575549,\n 806803e-8,\n 0,\n 0.842485,\n 0.563797,\n 757294e-8,\n 0,\n 0.87313,\n 0.551758,\n 710592e-8,\n 0,\n 0.904762,\n 0.539894,\n 66841e-7,\n 0,\n 0.936508,\n 0.527901,\n 627901e-8,\n 0,\n 0.968254,\n 0.515819,\n 590506e-8,\n 0,\n 1,\n 1,\n 0.120864,\n 0,\n 0,\n 1,\n 0.120864,\n 0,\n 0,\n 0.999996,\n 0.120864,\n 0,\n 0,\n 0.99998,\n 0.120867,\n 0,\n 0,\n 0.99994,\n 0.120872,\n 0,\n 323781e-9,\n 0.999852,\n 0.120884,\n 0,\n 188693e-8,\n 0.999693,\n 0.120903,\n 0,\n 473489e-8,\n 0.999426,\n 0.120929,\n 0,\n 872704e-8,\n 0.999002,\n 0.120955,\n 0,\n 0.0137237,\n 0.998235,\n 0.120918,\n 0,\n 0.0196068,\n 0.994608,\n 0.119764,\n 0,\n 0.0262803,\n 0.992997,\n 0.119265,\n 0,\n 0.0336657,\n 0.990968,\n 0.11863,\n 0,\n 0.0416987,\n 0.987002,\n 0.117261,\n 0,\n 0.0503261,\n 0.983524,\n 0.116009,\n 0,\n 0.0595035,\n 0.97875,\n 0.114252,\n 0,\n 0.0691935,\n 0.972652,\n 0.11193,\n 0,\n 0.0793645,\n 0.966613,\n 0.109555,\n 0,\n 0.0899894,\n 0.959275,\n 0.106612,\n 0,\n 0.101045,\n 0.951272,\n 0.103375,\n 0,\n 0.112512,\n 0.942323,\n 0.0996594,\n 0,\n 0.124372,\n 0.933679,\n 0.0958841,\n 0,\n 0.136611,\n 0.924822,\n 0.0919265,\n 0,\n 0.149216,\n 0.915742,\n 0.0878061,\n 0,\n 0.162176,\n 0.906348,\n 0.0834894,\n 0,\n 0.175482,\n 0.896883,\n 0.079085,\n 0,\n 0.189125,\n 0.88774,\n 0.0746745,\n 0,\n 0.203098,\n 0.87986,\n 0.0705773,\n 0,\n 0.217396,\n 0.871998,\n 0.0665005,\n 0,\n 0.232015,\n 0.864325,\n 0.0625413,\n 0,\n 0.24695,\n 0.856685,\n 0.0586781,\n 0,\n 0.2622,\n 0.84925,\n 0.0550063,\n 0,\n 0.277761,\n 0.841719,\n 0.0514727,\n 0,\n 0.293634,\n 0.834755,\n 0.0481398,\n 0,\n 0.309819,\n 0.827853,\n 0.0450172,\n 0,\n 0.326315,\n 0.820888,\n 0.0420969,\n 0,\n 0.343126,\n 0.813616,\n 0.0393702,\n 0,\n 0.360254,\n 0.805767,\n 0.0367771,\n 0,\n 0.377701,\n 0.797338,\n 0.0343274,\n 0,\n 0.395474,\n 0.789122,\n 0.0320529,\n 0,\n 0.413577,\n 0.780601,\n 0.0299485,\n 0,\n 0.432018,\n 0.771424,\n 0.0279812,\n 0,\n 0.450804,\n 0.761502,\n 0.0261054,\n 0,\n 0.469944,\n 0.751166,\n 0.0243942,\n 0,\n 0.489451,\n 0.741276,\n 0.0228087,\n 0,\n 0.509337,\n 0.730898,\n 0.0213265,\n 0,\n 0.529617,\n 0.719878,\n 0.0199307,\n 0,\n 0.550307,\n 0.708379,\n 0.0186574,\n 0,\n 0.571428,\n 0.697165,\n 0.0174446,\n 0,\n 0.593003,\n 0.685554,\n 0.0163144,\n 0,\n 0.615059,\n 0.673631,\n 0.015276,\n 0,\n 0.637628,\n 0.662385,\n 0.0143003,\n 0,\n 0.660746,\n 0.651059,\n 0.0134112,\n 0,\n 0.68446,\n 0.640451,\n 0.0125794,\n 0,\n 0.70882,\n 0.630536,\n 0.011793,\n 0,\n 0.733893,\n 0.620316,\n 0.0110547,\n 0,\n 0.759756,\n 0.609722,\n 0.0103668,\n 0,\n 0.786505,\n 0.598804,\n 973009e-8,\n 0,\n 0.814259,\n 0.587871,\n 912812e-8,\n 0,\n 0.843157,\n 0.577121,\n 858916e-8,\n 0,\n 0.87334,\n 0.566019,\n 807333e-8,\n 0,\n 0.904762,\n 0.554664,\n 759687e-8,\n 0,\n 0.936508,\n 0.543101,\n 714759e-8,\n 0,\n 0.968254,\n 0.531558,\n 673418e-8,\n 0,\n 1,\n 1,\n 0.146767,\n 0,\n 0,\n 1,\n 0.146767,\n 0,\n 0,\n 0.999997,\n 0.146767,\n 0,\n 0,\n 0.999977,\n 0.146765,\n 0,\n 320658e-11,\n 0.999929,\n 0.146762,\n 0,\n 682576e-9,\n 0.999823,\n 0.146753,\n 0,\n 276402e-8,\n 0.999633,\n 0.146735,\n 0,\n 614771e-8,\n 0.999314,\n 0.146699,\n 0,\n 0.0106613,\n 0.998796,\n 0.14662,\n 0,\n 0.0161546,\n 0.997124,\n 0.146107,\n 0,\n 0.0225063,\n 0.994062,\n 0.144857,\n 0,\n 0.0296198,\n 0.992154,\n 0.144011,\n 0,\n 0.037417,\n 0.989186,\n 0.142712,\n 0,\n 0.0458348,\n 0.985279,\n 0.140926,\n 0,\n 0.0548211,\n 0.980826,\n 0.13885,\n 0,\n 0.0643326,\n 0.975056,\n 0.136168,\n 0,\n 0.074333,\n 0.969005,\n 0.133217,\n 0,\n 0.0847917,\n 0.961554,\n 0.12959,\n 0,\n 0.0956828,\n 0.954206,\n 0.125886,\n 0,\n 0.106984,\n 0.945046,\n 0.121335,\n 0,\n 0.118675,\n 0.935678,\n 0.116492,\n 0,\n 0.130741,\n 0.926748,\n 0.111635,\n 0,\n 0.143166,\n 0.917764,\n 0.106625,\n 0,\n 0.155939,\n 0.908358,\n 0.101325,\n 0,\n 0.169049,\n 0.899219,\n 0.0960249,\n 0,\n 0.182487,\n 0.890089,\n 0.0906527,\n 0,\n 0.196245,\n 0.881488,\n 0.0853905,\n 0,\n 0.210317,\n 0.874031,\n 0.0804177,\n 0,\n 0.224697,\n 0.866932,\n 0.0756005,\n 0,\n 0.23938,\n 0.859976,\n 0.0709019,\n 0,\n 0.254364,\n 0.853375,\n 0.0664391,\n 0,\n 0.269646,\n 0.846971,\n 0.0622012,\n 0,\n 0.285223,\n 0.840483,\n 0.058129,\n 0,\n 0.301096,\n 0.833969,\n 0.0542762,\n 0,\n 0.317265,\n 0.82806,\n 0.0507042,\n 0,\n 0.333729,\n 0.822128,\n 0.047368,\n 0,\n 0.350491,\n 0.815989,\n 0.044272,\n 0,\n 0.367554,\n 0.809336,\n 0.0413444,\n 0,\n 0.38492,\n 0.802177,\n 0.038601,\n 0,\n 0.402594,\n 0.79441,\n 0.0360227,\n 0,\n 0.420582,\n 0.786573,\n 0.0336383,\n 0,\n 0.438891,\n 0.778619,\n 0.0314321,\n 0,\n 0.457527,\n 0.77,\n 0.029362,\n 0,\n 0.476499,\n 0.760698,\n 0.0274102,\n 0,\n 0.49582,\n 0.750932,\n 0.0256146,\n 0,\n 0.5155,\n 0.740993,\n 0.023974,\n 0,\n 0.535555,\n 0.731159,\n 0.0224182,\n 0,\n 0.556,\n 0.720836,\n 0.0209889,\n 0,\n 0.576855,\n 0.709913,\n 0.0196411,\n 0,\n 0.598143,\n 0.698415,\n 0.0183824,\n 0,\n 0.619888,\n 0.68745,\n 0.0172222,\n 0,\n 0.642123,\n 0.676154,\n 0.0161509,\n 0,\n 0.664883,\n 0.664383,\n 0.0151397,\n 0,\n 0.688211,\n 0.6533,\n 0.0141873,\n 0,\n 0.71216,\n 0.642072,\n 0.0133105,\n 0,\n 0.736792,\n 0.631412,\n 0.0124932,\n 0,\n 0.762186,\n 0.621622,\n 0.0117408,\n 0,\n 0.788439,\n 0.611681,\n 0.0110358,\n 0,\n 0.815672,\n 0.60142,\n 0.0103775,\n 0,\n 0.844034,\n 0.59083,\n 975623e-8,\n 0,\n 0.873699,\n 0.580254,\n 918084e-8,\n 0,\n 0.904765,\n 0.569841,\n 864721e-8,\n 0,\n 0.936508,\n 0.559224,\n 815731e-8,\n 0,\n 0.968254,\n 0.548315,\n 767924e-8,\n 0,\n 1,\n 1,\n 0.177563,\n 0,\n 0,\n 1,\n 0.177563,\n 0,\n 0,\n 0.999994,\n 0.177562,\n 0,\n 0,\n 0.999972,\n 0.177555,\n 0,\n 664171e-10,\n 0.999914,\n 0.177536,\n 0,\n 12276e-7,\n 0.999787,\n 0.177496,\n 0,\n 388025e-8,\n 0.999556,\n 0.17742,\n 0,\n 783463e-8,\n 0.999165,\n 0.177285,\n 0,\n 0.0128953,\n 0.9985,\n 0.177037,\n 0,\n 0.0189053,\n 0.995388,\n 0.175634,\n 0,\n 0.025742,\n 0.993102,\n 0.174375,\n 0,\n 0.033309,\n 0.990992,\n 0.173121,\n 0,\n 0.0415298,\n 0.986932,\n 0.170896,\n 0,\n 0.0503425,\n 0.982786,\n 0.16847,\n 0,\n 0.0596964,\n 0.977592,\n 0.165455,\n 0,\n 0.0695498,\n 0.971075,\n 0.161676,\n 0,\n 0.0798676,\n 0.963967,\n 0.157458,\n 0,\n 0.0906201,\n 0.956397,\n 0.152836,\n 0,\n 0.101783,\n 0.947489,\n 0.147467,\n 0,\n 0.113333,\n 0.937564,\n 0.14145,\n 0,\n 0.125254,\n 0.928182,\n 0.135383,\n 0,\n 0.137529,\n 0.919027,\n 0.129212,\n 0,\n 0.150144,\n 0.909618,\n 0.12276,\n 0,\n 0.163088,\n 0.900492,\n 0.116273,\n 0,\n 0.176351,\n 0.891671,\n 0.1098,\n 0,\n 0.189924,\n 0.883146,\n 0.103362,\n 0,\n 0.203799,\n 0.875151,\n 0.0970799,\n 0,\n 0.21797,\n 0.868338,\n 0.0911732,\n 0,\n 0.232433,\n 0.862033,\n 0.0854966,\n 0,\n 0.247182,\n 0.856107,\n 0.0800691,\n 0,\n 0.262216,\n 0.850644,\n 0.0749618,\n 0,\n 0.27753,\n 0.845261,\n 0.070079,\n 0,\n 0.293124,\n 0.839885,\n 0.0654321,\n 0,\n 0.308997,\n 0.834609,\n 0.0610975,\n 0,\n 0.325149,\n 0.829083,\n 0.0569741,\n 0,\n 0.341581,\n 0.82404,\n 0.0531736,\n 0,\n 0.358294,\n 0.818968,\n 0.049665,\n 0,\n 0.37529,\n 0.813496,\n 0.0463856,\n 0,\n 0.392573,\n 0.807533,\n 0.0433217,\n 0,\n 0.410148,\n 0.80099,\n 0.0404402,\n 0,\n 0.428019,\n 0.793891,\n 0.0377578,\n 0,\n 0.446192,\n 0.786281,\n 0.0352616,\n 0,\n 0.464676,\n 0.778773,\n 0.0329577,\n 0,\n 0.483478,\n 0.770737,\n 0.030808,\n 0,\n 0.502608,\n 0.762094,\n 0.0287964,\n 0,\n 0.522079,\n 0.752898,\n 0.0269254,\n 0,\n 0.541905,\n 0.743306,\n 0.0251926,\n 0,\n 0.5621,\n 0.733416,\n 0.023595,\n 0,\n 0.582684,\n 0.723742,\n 0.0221155,\n 0,\n 0.603677,\n 0.713542,\n 0.0207435,\n 0,\n 0.625106,\n 0.702755,\n 0.019434,\n 0,\n 0.646998,\n 0.691484,\n 0.0182046,\n 0,\n 0.66939,\n 0.680531,\n 0.0170771,\n 0,\n 0.692324,\n 0.66953,\n 0.0160339,\n 0,\n 0.715849,\n 0.658126,\n 0.0150677,\n 0,\n 0.740028,\n 0.646933,\n 0.0141551,\n 0,\n 0.764937,\n 0.636107,\n 0.0133179,\n 0,\n 0.790673,\n 0.625271,\n 0.0125284,\n 0,\n 0.817358,\n 0.615225,\n 0.0117937,\n 0,\n 0.84515,\n 0.605678,\n 0.0111181,\n 0,\n 0.874244,\n 0.59583,\n 0.0104759,\n 0,\n 0.904828,\n 0.585704,\n 986672e-8,\n 0,\n 0.936508,\n 0.575413,\n 929712e-8,\n 0,\n 0.968254,\n 0.565373,\n 876713e-8,\n 0,\n 1,\n 1,\n 0.214058,\n 0,\n 0,\n 0.999999,\n 0.214058,\n 0,\n 0,\n 0.999994,\n 0.214055,\n 0,\n 0,\n 0.999966,\n 0.214039,\n 0,\n 259642e-9,\n 0.999893,\n 0.213998,\n 0,\n 200075e-8,\n 0.999737,\n 0.21391,\n 0,\n 527775e-8,\n 0.999449,\n 0.213745,\n 0,\n 983959e-8,\n 0.99896,\n 0.213458,\n 0,\n 0.0154755,\n 0.9979,\n 0.212855,\n 0,\n 0.0220249,\n 0.994278,\n 0.210779,\n 0,\n 0.0293654,\n 0.992254,\n 0.20926,\n 0,\n 0.0374021,\n 0.98881,\n 0.206908,\n 0,\n 0.0460604,\n 0.984715,\n 0.204009,\n 0,\n 0.0552802,\n 0.979738,\n 0.200471,\n 0,\n 0.0650127,\n 0.972884,\n 0.195813,\n 0,\n 0.0752175,\n 0.965996,\n 0.190856,\n 0,\n 0.0858612,\n 0.957974,\n 0.185077,\n 0,\n 0.0969155,\n 0.949155,\n 0.17868,\n 0,\n 0.108356,\n 0.939288,\n 0.171513,\n 0,\n 0.120163,\n 0.928996,\n 0.163838,\n 0,\n 0.132319,\n 0.919563,\n 0.156246,\n 0,\n 0.144808,\n 0.910004,\n 0.148359,\n 0,\n 0.157618,\n 0.900791,\n 0.140417,\n 0,\n 0.170737,\n 0.892135,\n 0.132569,\n 0,\n 0.184155,\n 0.883803,\n 0.124741,\n 0,\n 0.197866,\n 0.876034,\n 0.117091,\n 0,\n 0.211861,\n 0.869219,\n 0.109835,\n 0,\n 0.226134,\n 0.863062,\n 0.102859,\n 0,\n 0.240682,\n 0.857795,\n 0.0962928,\n 0,\n 0.255499,\n 0.853009,\n 0.0900725,\n 0,\n 0.270583,\n 0.848603,\n 0.0842101,\n 0,\n 0.285931,\n 0.844335,\n 0.0786527,\n 0,\n 0.301542,\n 0.840208,\n 0.0734397,\n 0,\n 0.317415,\n 0.836035,\n 0.0685334,\n 0,\n 0.33355,\n 0.83172,\n 0.0639275,\n 0,\n 0.349948,\n 0.827135,\n 0.0595909,\n 0,\n 0.36661,\n 0.822797,\n 0.0556204,\n 0,\n 0.383539,\n 0.818387,\n 0.0519394,\n 0,\n 0.400738,\n 0.813565,\n 0.0485317,\n 0,\n 0.41821,\n 0.808142,\n 0.0453138,\n 0,\n 0.435961,\n 0.802212,\n 0.0423354,\n 0,\n 0.453997,\n 0.79573,\n 0.0395553,\n 0,\n 0.472324,\n 0.788741,\n 0.036988,\n 0,\n 0.490951,\n 0.781093,\n 0.0345688,\n 0,\n 0.509887,\n 0.773597,\n 0.0323297,\n 0,\n 0.529144,\n 0.765622,\n 0.0302719,\n 0,\n 0.548735,\n 0.757083,\n 0.0283477,\n 0,\n 0.568674,\n 0.747992,\n 0.0265562,\n 0,\n 0.588979,\n 0.738591,\n 0.0248844,\n 0,\n 0.609671,\n 0.728719,\n 0.0233342,\n 0,\n 0.630773,\n 0.719146,\n 0.0219081,\n 0,\n 0.652314,\n 0.709165,\n 0.0205711,\n 0,\n 0.674328,\n 0.69875,\n 0.0193248,\n 0,\n 0.696854,\n 0.687884,\n 0.0181582,\n 0,\n 0.719942,\n 0.676818,\n 0.0170746,\n 0,\n 0.743651,\n 0.666247,\n 0.0160718,\n 0,\n 0.768057,\n 0.655284,\n 0.0151262,\n 0,\n 0.793253,\n 0.64401,\n 0.0142561,\n 0,\n 0.819363,\n 0.633353,\n 0.0134327,\n 0,\n 0.846547,\n 0.622674,\n 0.012653,\n 0,\n 0.875017,\n 0.612265,\n 0.0119354,\n 0,\n 0.905021,\n 0.602455,\n 0.0112533,\n 0,\n 0.936508,\n 0.593147,\n 0.0106234,\n 0,\n 0.968254,\n 0.583592,\n 0.0100213,\n 0,\n 1,\n 1,\n 0.25717,\n 0,\n 0,\n 1,\n 0.25717,\n 0,\n 0,\n 0.999992,\n 0.257164,\n 0,\n 0,\n 0.999958,\n 0.257135,\n 0,\n 641715e-9,\n 0.999864,\n 0.25706,\n 0,\n 305314e-8,\n 0.999666,\n 0.256897,\n 0,\n 700975e-8,\n 0.999302,\n 0.256596,\n 0,\n 0.0122194,\n 0.998663,\n 0.25607,\n 0,\n 0.0184622,\n 0.995607,\n 0.254123,\n 0,\n 0.0255773,\n 0.993094,\n 0.252081,\n 0,\n 0.0334439,\n 0.9907,\n 0.249867,\n 0,\n 0.0419696,\n 0.98594,\n 0.246118,\n 0,\n 0.0510823,\n 0.981214,\n 0.242049,\n 0,\n 0.0607242,\n 0.974966,\n 0.236869,\n 0,\n 0.0708486,\n 0.967589,\n 0.230724,\n 0,\n 0.081417,\n 0.95915,\n 0.223635,\n 0,\n 0.0923974,\n 0.950257,\n 0.21596,\n 0,\n 0.103763,\n 0.940165,\n 0.207296,\n 0,\n 0.115491,\n 0.929396,\n 0.197901,\n 0,\n 0.127562,\n 0.919288,\n 0.188437,\n 0,\n 0.13996,\n 0.909428,\n 0.178762,\n 0,\n 0.15267,\n 0.900105,\n 0.169072,\n 0,\n 0.165679,\n 0.891418,\n 0.159478,\n 0,\n 0.178979,\n 0.883347,\n 0.15002,\n 0,\n 0.192558,\n 0.875992,\n 0.140813,\n 0,\n 0.20641,\n 0.869466,\n 0.13196,\n 0,\n 0.220529,\n 0.863699,\n 0.123501,\n 0,\n 0.234907,\n 0.858553,\n 0.115436,\n 0,\n 0.249542,\n 0.854379,\n 0.107901,\n 0,\n 0.264428,\n 0.850894,\n 0.10088,\n 0,\n 0.279564,\n 0.847632,\n 0.0942296,\n 0,\n 0.294947,\n 0.844571,\n 0.0879861,\n 0,\n 0.310575,\n 0.84163,\n 0.0821534,\n 0,\n 0.326448,\n 0.838542,\n 0.0766409,\n 0,\n 0.342566,\n 0.835412,\n 0.0715322,\n 0,\n 0.358929,\n 0.831899,\n 0.0666883,\n 0,\n 0.37554,\n 0.828177,\n 0.0622175,\n 0,\n 0.392399,\n 0.82416,\n 0.0580452,\n 0,\n 0.409511,\n 0.820393,\n 0.054267,\n 0,\n 0.426878,\n 0.816068,\n 0.0507172,\n 0,\n 0.444506,\n 0.811201,\n 0.0474041,\n 0,\n 0.4624,\n 0.805785,\n 0.0443174,\n 0,\n 0.480566,\n 0.799878,\n 0.0414562,\n 0,\n 0.499013,\n 0.793469,\n 0.0388147,\n 0,\n 0.517749,\n 0.786473,\n 0.0363453,\n 0,\n 0.536785,\n 0.778874,\n 0.0340225,\n 0,\n 0.556134,\n 0.771277,\n 0.0318599,\n 0,\n 0.575809,\n 0.763426,\n 0.0298859,\n 0,\n 0.595827,\n 0.755044,\n 0.0280357,\n 0,\n 0.616207,\n 0.746161,\n 0.0262979,\n 0,\n 0.636973,\n 0.737124,\n 0.0247295,\n 0,\n 0.65815,\n 0.72761,\n 0.0232514,\n 0,\n 0.679772,\n 0.717822,\n 0.0218755,\n 0,\n 0.701876,\n 0.708279,\n 0.0205942,\n 0,\n 0.724509,\n 0.698333,\n 0.0193947,\n 0,\n 0.74773,\n 0.68802,\n 0.0182717,\n 0,\n 0.771609,\n 0.677321,\n 0.0172044,\n 0,\n 0.79624,\n 0.666504,\n 0.0162122,\n 0,\n 0.821743,\n 0.656184,\n 0.0152924,\n 0,\n 0.84828,\n 0.64556,\n 0.0144326,\n 0,\n 0.876069,\n 0.634636,\n 0.0136157,\n 0,\n 0.905404,\n 0.624124,\n 0.0128612,\n 0,\n 0.936508,\n 0.613914,\n 0.0121435,\n 0,\n 0.968254,\n 0.603589,\n 0.0114887,\n 0,\n 1,\n 1,\n 0.307946,\n 0,\n 0,\n 0.999999,\n 0.307945,\n 0,\n 0,\n 0.999988,\n 0.307934,\n 0,\n 204479e-10,\n 0.999944,\n 0.307886,\n 0,\n 127833e-8,\n 0.999824,\n 0.307756,\n 0,\n 445047e-8,\n 0.999565,\n 0.30748,\n 0,\n 914673e-8,\n 0.999085,\n 0.306966,\n 0,\n 0.0150498,\n 0.998103,\n 0.306004,\n 0,\n 0.0219367,\n 0.994249,\n 0.303028,\n 0,\n 0.0296485,\n 0.991807,\n 0.300435,\n 0,\n 0.038068,\n 0.987773,\n 0.296554,\n 0,\n 0.0471062,\n 0.982673,\n 0.2916,\n 0,\n 0.0566942,\n 0.976623,\n 0.285641,\n 0,\n 0.0667768,\n 0.968757,\n 0.27815,\n 0,\n 0.0773099,\n 0.959849,\n 0.269529,\n 0,\n 0.088257,\n 0.950663,\n 0.260248,\n 0,\n 0.0995879,\n 0.940129,\n 0.249704,\n 0,\n 0.111277,\n 0.92895,\n 0.238291,\n 0,\n 0.123304,\n 0.917996,\n 0.226501,\n 0,\n 0.13565,\n 0.907813,\n 0.214669,\n 0,\n 0.148299,\n 0.898305,\n 0.202835,\n 0,\n 0.161237,\n 0.889626,\n 0.191158,\n 0,\n 0.174455,\n 0.88175,\n 0.179695,\n 0,\n 0.187941,\n 0.874715,\n 0.168548,\n 0,\n 0.201687,\n 0.868746,\n 0.15792,\n 0,\n 0.215687,\n 0.863703,\n 0.147807,\n 0,\n 0.229933,\n 0.859315,\n 0.138149,\n 0,\n 0.24442,\n 0.855538,\n 0.128993,\n 0,\n 0.259145,\n 0.852428,\n 0.120414,\n 0,\n 0.274103,\n 0.850168,\n 0.112498,\n 0,\n 0.289293,\n 0.848132,\n 0.105054,\n 0,\n 0.304711,\n 0.846291,\n 0.0981087,\n 0,\n 0.320357,\n 0.844431,\n 0.0915942,\n 0,\n 0.33623,\n 0.842493,\n 0.0855056,\n 0,\n 0.35233,\n 0.840368,\n 0.0798204,\n 0,\n 0.368658,\n 0.83798,\n 0.0745097,\n 0,\n 0.385214,\n 0.83523,\n 0.0695424,\n 0,\n 0.402002,\n 0.832091,\n 0.0649092,\n 0,\n 0.419023,\n 0.828667,\n 0.0606291,\n 0,\n 0.436282,\n 0.824805,\n 0.0566523,\n 0,\n 0.453782,\n 0.820988,\n 0.0530229,\n 0,\n 0.471529,\n 0.816635,\n 0.0496364,\n 0,\n 0.489528,\n 0.811725,\n 0.0464658,\n 0,\n 0.507788,\n 0.806316,\n 0.0435082,\n 0,\n 0.526317,\n 0.800469,\n 0.0407873,\n 0,\n 0.545124,\n 0.794107,\n 0.038255,\n 0,\n 0.564221,\n 0.787218,\n 0.0358825,\n 0,\n 0.583621,\n 0.779872,\n 0.0336785,\n 0,\n 0.603341,\n 0.772097,\n 0.0316379,\n 0,\n 0.623397,\n 0.764484,\n 0.0297379,\n 0,\n 0.643812,\n 0.756428,\n 0.0279581,\n 0,\n 0.664611,\n 0.748022,\n 0.0263153,\n 0,\n 0.685824,\n 0.739268,\n 0.0247799,\n 0,\n 0.707488,\n 0.73024,\n 0.0233385,\n 0,\n 0.729646,\n 0.720893,\n 0.0220035,\n 0,\n 0.752354,\n 0.71119,\n 0.0207555,\n 0,\n 0.77568,\n 0.701791,\n 0.0195843,\n 0,\n 0.799715,\n 0.692184,\n 0.0184891,\n 0,\n 0.824574,\n 0.682258,\n 0.0174541,\n 0,\n 0.850417,\n 0.67206,\n 0.0164873,\n 0,\n 0.877466,\n 0.661717,\n 0.0155959,\n 0,\n 0.90604,\n 0.651462,\n 0.0147519,\n 0,\n 0.936528,\n 0.641467,\n 0.0139727,\n 0,\n 0.968254,\n 0.631229,\n 0.0132363,\n 0,\n 1,\n 1,\n 0.367573,\n 0,\n 0,\n 0.999999,\n 0.367571,\n 0,\n 0,\n 0.999984,\n 0.367553,\n 0,\n 183382e-9,\n 0.999925,\n 0.367473,\n 0,\n 225254e-8,\n 0.999759,\n 0.367259,\n 0,\n 628165e-8,\n 0.99941,\n 0.366801,\n 0,\n 0.0117858,\n 0.998739,\n 0.365946,\n 0,\n 0.0184359,\n 0.995529,\n 0.363191,\n 0,\n 0.0260114,\n 0.992875,\n 0.360171,\n 0,\n 0.0343581,\n 0.989135,\n 0.355981,\n 0,\n 0.0433637,\n 0.984166,\n 0.350401,\n 0,\n 0.0529438,\n 0.977871,\n 0.343348,\n 0,\n 0.0630334,\n 0.96951,\n 0.334341,\n 0,\n 0.0735805,\n 0.959964,\n 0.323862,\n 0,\n 0.0845437,\n 0.950162,\n 0.312521,\n 0,\n 0.095889,\n 0.938882,\n 0.299577,\n 0,\n 0.107588,\n 0.926992,\n 0.285573,\n 0,\n 0.119617,\n 0.915589,\n 0.271212,\n 0,\n 0.131957,\n 0.904791,\n 0.256611,\n 0,\n 0.144591,\n 0.895177,\n 0.242224,\n 0,\n 0.157503,\n 0.886403,\n 0.227952,\n 0,\n 0.170682,\n 0.878957,\n 0.214192,\n 0,\n 0.184117,\n 0.872418,\n 0.200795,\n 0,\n 0.197799,\n 0.867029,\n 0.188015,\n 0,\n 0.21172,\n 0.862835,\n 0.175975,\n 0,\n 0.225873,\n 0.859411,\n 0.164526,\n 0,\n 0.240253,\n 0.856655,\n 0.153693,\n 0,\n 0.254854,\n 0.854519,\n 0.14352,\n 0,\n 0.269673,\n 0.852828,\n 0.13397,\n 0,\n 0.284707,\n 0.851412,\n 0.124984,\n 0,\n 0.299953,\n 0.850609,\n 0.116748,\n 0,\n 0.315408,\n 0.849855,\n 0.10905,\n 0,\n 0.331073,\n 0.849017,\n 0.101839,\n 0,\n 0.346946,\n 0.848079,\n 0.0951359,\n 0,\n 0.363028,\n 0.846911,\n 0.0888774,\n 0,\n 0.379318,\n 0.845445,\n 0.0830375,\n 0,\n 0.395818,\n 0.84362,\n 0.0775844,\n 0,\n 0.41253,\n 0.841411,\n 0.0725054,\n 0,\n 0.429457,\n 0.838768,\n 0.0677691,\n 0,\n 0.446602,\n 0.835801,\n 0.0634016,\n 0,\n 0.463968,\n 0.832341,\n 0.0593095,\n 0,\n 0.481561,\n 0.828424,\n 0.0555121,\n 0,\n 0.499386,\n 0.824312,\n 0.052024,\n 0,\n 0.51745,\n 0.819918,\n 0.0487865,\n 0,\n 0.535761,\n 0.815072,\n 0.0457801,\n 0,\n 0.554328,\n 0.809863,\n 0.0430184,\n 0,\n 0.573162,\n 0.804164,\n 0.0404245,\n 0,\n 0.592275,\n 0.798034,\n 0.0380146,\n 0,\n 0.611681,\n 0.791436,\n 0.0357436,\n 0,\n 0.631398,\n 0.784498,\n 0.0336475,\n 0,\n 0.651445,\n 0.777125,\n 0.0316666,\n 0,\n 0.671845,\n 0.769365,\n 0.0298122,\n 0,\n 0.692628,\n 0.761579,\n 0.0281001,\n 0,\n 0.713827,\n 0.753746,\n 0.0265049,\n 0,\n 0.735484,\n 0.745573,\n 0.0250067,\n 0,\n 0.75765,\n 0.737083,\n 0.0236026,\n 0,\n 0.78039,\n 0.728545,\n 0.0223302,\n 0,\n 0.803789,\n 0.719691,\n 0.0211243,\n 0,\n 0.82796,\n 0.710569,\n 0.0199983,\n 0,\n 0.853056,\n 0.701216,\n 0.0189569,\n 0,\n 0.879298,\n 0.692094,\n 0.0179702,\n 0,\n 0.907014,\n 0.682909,\n 0.0170418,\n 0,\n 0.936691,\n 0.673509,\n 0.0161732,\n 0,\n 0.968254,\n 0.663863,\n 0.0153406,\n 0,\n 1,\n 1,\n 0.437395,\n 0,\n 0,\n 0.999998,\n 0.437394,\n 0,\n 0,\n 0.99998,\n 0.437363,\n 0,\n 616704e-9,\n 0.999891,\n 0.437232,\n 0,\n 367925e-8,\n 0.999656,\n 0.436877,\n 0,\n 867446e-8,\n 0.999148,\n 0.436121,\n 0,\n 0.0150679,\n 0.997959,\n 0.434564,\n 0,\n 0.022531,\n 0.993464,\n 0.430134,\n 0,\n 0.0308507,\n 0.990606,\n 0.426077,\n 0,\n 0.0398805,\n 0.985027,\n 0.419397,\n 0,\n 0.0495148,\n 0.978491,\n 0.41118,\n 0,\n 0.0596749,\n 0.969643,\n 0.40048,\n 0,\n 0.0703001,\n 0.959189,\n 0.38769,\n 0,\n 0.0813427,\n 0.948223,\n 0.373575,\n 0,\n 0.0927641,\n 0.935955,\n 0.357622,\n 0,\n 0.104533,\n 0.923237,\n 0.34043,\n 0,\n 0.116624,\n 0.911074,\n 0.322735,\n 0,\n 0.129015,\n 0.899724,\n 0.30479,\n 0,\n 0.141687,\n 0.890189,\n 0.287392,\n 0,\n 0.154626,\n 0.881796,\n 0.270248,\n 0,\n 0.167818,\n 0.874781,\n 0.253659,\n 0,\n 0.181252,\n 0.869166,\n 0.237786,\n 0,\n 0.194918,\n 0.864725,\n 0.222618,\n 0,\n 0.208807,\n 0.861565,\n 0.208356,\n 0,\n 0.222913,\n 0.859284,\n 0.194867,\n 0,\n 0.237229,\n 0.857677,\n 0.18212,\n 0,\n 0.25175,\n 0.856714,\n 0.17018,\n 0,\n 0.266473,\n 0.856155,\n 0.158969,\n 0,\n 0.281392,\n 0.8558,\n 0.148413,\n 0,\n 0.296505,\n 0.855672,\n 0.138578,\n 0,\n 0.311811,\n 0.855538,\n 0.129345,\n 0,\n 0.327306,\n 0.855689,\n 0.120861,\n 0,\n 0.342991,\n 0.855767,\n 0.112969,\n 0,\n 0.358864,\n 0.855618,\n 0.105593,\n 0,\n 0.374925,\n 0.85525,\n 0.0987451,\n 0,\n 0.391176,\n 0.854583,\n 0.0923727,\n 0,\n 0.407616,\n 0.853534,\n 0.0864143,\n 0,\n 0.424249,\n 0.852061,\n 0.0808338,\n 0,\n 0.441076,\n 0.850253,\n 0.0756771,\n 0,\n 0.4581,\n 0.848004,\n 0.0708612,\n 0,\n 0.475324,\n 0.845333,\n 0.0663784,\n 0,\n 0.492754,\n 0.842376,\n 0.0622631,\n 0,\n 0.510394,\n 0.838956,\n 0.0584112,\n 0,\n 0.528251,\n 0.835121,\n 0.0548328,\n 0,\n 0.546331,\n 0.830842,\n 0.0514838,\n 0,\n 0.564644,\n 0.826212,\n 0.048355,\n 0,\n 0.583198,\n 0.821522,\n 0.0454714,\n 0,\n 0.602005,\n 0.816551,\n 0.0428263,\n 0,\n 0.621078,\n 0.811211,\n 0.0403612,\n 0,\n 0.640434,\n 0.805479,\n 0.038039,\n 0,\n 0.660089,\n 0.799409,\n 0.0358739,\n 0,\n 0.680066,\n 0.79306,\n 0.0338727,\n 0,\n 0.70039,\n 0.786395,\n 0.0319985,\n 0,\n 0.721094,\n 0.779416,\n 0.030241,\n 0,\n 0.742215,\n 0.77214,\n 0.0285951,\n 0,\n 0.7638,\n 0.764636,\n 0.0270747,\n 0,\n 0.785912,\n 0.756836,\n 0.0256354,\n 0,\n 0.808628,\n 0.749315,\n 0.0243027,\n 0,\n 0.832055,\n 0.741561,\n 0.0230497,\n 0,\n 0.856338,\n 0.733589,\n 0.0218801,\n 0,\n 0.88169,\n 0.725479,\n 0.020784,\n 0,\n 0.908441,\n 0.717255,\n 0.0197702,\n 0,\n 0.937125,\n 0.708829,\n 0.0188168,\n 0,\n 0.968254,\n 0.700191,\n 0.0179113,\n 0,\n 1,\n 1,\n 0.518937,\n 0,\n 0,\n 0.999998,\n 0.518933,\n 0,\n 0,\n 0.999967,\n 0.518883,\n 0,\n 147741e-8,\n 0.999832,\n 0.51866,\n 0,\n 573221e-8,\n 0.999466,\n 0.518057,\n 0,\n 0.011826,\n 0.998644,\n 0.516752,\n 0,\n 0.0192116,\n 0.994458,\n 0.512347,\n 0,\n 0.027573,\n 0.991223,\n 0.507675,\n 0,\n 0.0367099,\n 0.985515,\n 0.500188,\n 0,\n 0.046487,\n 0.978308,\n 0.490408,\n 0,\n 0.0568071,\n 0.968359,\n 0.477357,\n 0,\n 0.0675984,\n 0.95682,\n 0.461752,\n 0,\n 0.0788059,\n 0.943929,\n 0.443796,\n 0,\n 0.090386,\n 0.930224,\n 0.423893,\n 0,\n 0.102304,\n 0.916514,\n 0.402682,\n 0,\n 0.114532,\n 0.903653,\n 0.380914,\n 0,\n 0.127047,\n 0.892315,\n 0.359212,\n 0,\n 0.139828,\n 0.882942,\n 0.338102,\n 0,\n 0.152861,\n 0.875438,\n 0.31773,\n 0,\n 0.16613,\n 0.869642,\n 0.298186,\n 0,\n 0.179624,\n 0.865304,\n 0.279491,\n 0,\n 0.193332,\n 0.862382,\n 0.261804,\n 0,\n 0.207247,\n 0.860666,\n 0.245146,\n 0,\n 0.22136,\n 0.859788,\n 0.229406,\n 0,\n 0.235666,\n 0.859608,\n 0.214605,\n 0,\n 0.250158,\n 0.859912,\n 0.200691,\n 0,\n 0.264832,\n 0.86053,\n 0.187623,\n 0,\n 0.279684,\n 0.861368,\n 0.17539,\n 0,\n 0.294711,\n 0.862237,\n 0.163901,\n 0,\n 0.309911,\n 0.863127,\n 0.153175,\n 0,\n 0.32528,\n 0.863923,\n 0.143147,\n 0,\n 0.340819,\n 0.864567,\n 0.133781,\n 0,\n 0.356524,\n 0.865013,\n 0.125042,\n 0,\n 0.372397,\n 0.86539,\n 0.116952,\n 0,\n 0.388438,\n 0.865591,\n 0.109476,\n 0,\n 0.404645,\n 0.865517,\n 0.102542,\n 0,\n 0.421022,\n 0.865084,\n 0.0960688,\n 0,\n 0.437569,\n 0.864309,\n 0.0900499,\n 0,\n 0.454287,\n 0.863151,\n 0.0844328,\n 0,\n 0.471181,\n 0.861649,\n 0.0792218,\n 0,\n 0.488253,\n 0.859742,\n 0.0743482,\n 0,\n 0.505507,\n 0.857446,\n 0.0697963,\n 0,\n 0.522947,\n 0.854757,\n 0.0655364,\n 0,\n 0.54058,\n 0.851783,\n 0.061608,\n 0,\n 0.558412,\n 0.848516,\n 0.0579701,\n 0,\n 0.576449,\n 0.844897,\n 0.0545742,\n 0,\n 0.594701,\n 0.840956,\n 0.0514167,\n 0,\n 0.613178,\n 0.836676,\n 0.0484598,\n 0,\n 0.631892,\n 0.832075,\n 0.0456934,\n 0,\n 0.650856,\n 0.827191,\n 0.0431178,\n 0,\n 0.670088,\n 0.822295,\n 0.0407718,\n 0,\n 0.689606,\n 0.817294,\n 0.0386032,\n 0,\n 0.709434,\n 0.812013,\n 0.0365675,\n 0,\n 0.7296,\n 0.806465,\n 0.0346547,\n 0,\n 0.750138,\n 0.800691,\n 0.0328717,\n 0,\n 0.771093,\n 0.794709,\n 0.031211,\n 0,\n 0.792519,\n 0.788493,\n 0.0296504,\n 0,\n 0.814488,\n 0.782049,\n 0.0281782,\n 0,\n 0.837097,\n 0.775403,\n 0.0267965,\n 0,\n 0.860481,\n 0.76857,\n 0.0255002,\n 0,\n 0.884842,\n 0.761536,\n 0.0242759,\n 0,\n 0.910494,\n 0.754303,\n 0.0231142,\n 0,\n 0.937985,\n 0.74692,\n 0.0220305,\n 0,\n 0.968254,\n 0.739745,\n 0.0210192,\n 0,\n 1,\n 1,\n 0.613914,\n 0,\n 0,\n 0.999996,\n 0.613907,\n 0,\n 963597e-10,\n 0.999942,\n 0.613814,\n 0,\n 301247e-8,\n 0.999704,\n 0.613407,\n 0,\n 870385e-8,\n 0.999046,\n 0.612302,\n 0,\n 0.0160714,\n 0.995516,\n 0.608266,\n 0,\n 0.0245899,\n 0.991726,\n 0.602863,\n 0,\n 0.0339681,\n 0.985157,\n 0.593956,\n 0,\n 0.0440254,\n 0.97642,\n 0.581748,\n 0,\n 0.0546409,\n 0.964404,\n 0.565183,\n 0,\n 0.0657284,\n 0.950601,\n 0.545273,\n 0,\n 0.0772246,\n 0.935158,\n 0.522129,\n 0,\n 0.0890812,\n 0.919364,\n 0.496782,\n 0,\n 0.10126,\n 0.904754,\n 0.470571,\n 0,\n 0.113731,\n 0.89176,\n 0.444037,\n 0,\n 0.126469,\n 0.881492,\n 0.418322,\n 0,\n 0.139454,\n 0.873656,\n 0.393522,\n 0,\n 0.15267,\n 0.868053,\n 0.369795,\n 0,\n 0.166101,\n 0.864336,\n 0.347171,\n 0,\n 0.179736,\n 0.862259,\n 0.325737,\n 0,\n 0.193565,\n 0.861556,\n 0.305532,\n 0,\n 0.207578,\n 0.861776,\n 0.286416,\n 0,\n 0.221769,\n 0.862661,\n 0.268355,\n 0,\n 0.23613,\n 0.864015,\n 0.251334,\n 0,\n 0.250656,\n 0.865711,\n 0.235352,\n 0,\n 0.265343,\n 0.867519,\n 0.220302,\n 0,\n 0.280187,\n 0.869351,\n 0.206161,\n 0,\n 0.295183,\n 0.871144,\n 0.192908,\n 0,\n 0.31033,\n 0.872839,\n 0.180505,\n 0,\n 0.325624,\n 0.874307,\n 0.168848,\n 0,\n 0.341065,\n 0.875667,\n 0.158021,\n 0,\n 0.35665,\n 0.876758,\n 0.147877,\n 0,\n 0.37238,\n 0.87764,\n 0.138441,\n 0,\n 0.388253,\n 0.878237,\n 0.129627,\n 0,\n 0.404269,\n 0.878563,\n 0.121415,\n 0,\n 0.42043,\n 0.878572,\n 0.113741,\n 0,\n 0.436735,\n 0.87842,\n 0.106652,\n 0,\n 0.453187,\n 0.878057,\n 0.100097,\n 0,\n 0.469786,\n 0.877413,\n 0.0940128,\n 0,\n 0.486536,\n 0.87646,\n 0.0883462,\n 0,\n 0.503439,\n 0.875233,\n 0.0830924,\n 0,\n 0.520498,\n 0.8737,\n 0.0781975,\n 0,\n 0.537717,\n 0.871873,\n 0.07364,\n 0,\n 0.555102,\n 0.86978,\n 0.0694103,\n 0,\n 0.572657,\n 0.867405,\n 0.0654696,\n 0,\n 0.59039,\n 0.864751,\n 0.0617914,\n 0,\n 0.608307,\n 0.861818,\n 0.0583491,\n 0,\n 0.626419,\n 0.858645,\n 0.0551443,\n 0,\n 0.644733,\n 0.855307,\n 0.0521894,\n 0,\n 0.663264,\n 0.851736,\n 0.0494334,\n 0,\n 0.682025,\n 0.847927,\n 0.0468504,\n 0,\n 0.701032,\n 0.843888,\n 0.0444261,\n 0,\n 0.720308,\n 0.839629,\n 0.0421497,\n 0,\n 0.739875,\n 0.835158,\n 0.0400082,\n 0,\n 0.759764,\n 0.830509,\n 0.0380076,\n 0,\n 0.780014,\n 0.825714,\n 0.0361488,\n 0,\n 0.800673,\n 0.820729,\n 0.0343956,\n 0,\n 0.821803,\n 0.815751,\n 0.0327781,\n 0,\n 0.843492,\n 0.810752,\n 0.031275,\n 0,\n 0.86586,\n 0.805587,\n 0.0298542,\n 0,\n 0.889087,\n 0.800317,\n 0.0285397,\n 0,\n 0.913466,\n 0.79489,\n 0.0272948,\n 0,\n 0.93952,\n 0.789314,\n 0.0261139,\n 0,\n 0.96835,\n 0.783593,\n 0.0249938,\n 0,\n 1,\n 1,\n 0.724258,\n 0,\n 0,\n 0.999992,\n 0.724243,\n 0,\n 726889e-9,\n 0.99987,\n 0.724044,\n 0,\n 569574e-8,\n 0.999336,\n 0.72317,\n 0,\n 0.0131702,\n 0.996271,\n 0.719432,\n 0,\n 0.0220738,\n 0.991159,\n 0.712576,\n 0,\n 0.0319405,\n 0.982465,\n 0.700927,\n 0,\n 0.0425202,\n 0.97049,\n 0.684297,\n 0,\n 0.0536599,\n 0.953973,\n 0.661244,\n 0,\n 0.065258,\n 0.935546,\n 0.633804,\n 0,\n 0.0772427,\n 0.916596,\n 0.603071,\n 0,\n 0.0895616,\n 0.899353,\n 0.57105,\n 0,\n 0.102175,\n 0.885216,\n 0.539206,\n 0,\n 0.11505,\n 0.875076,\n 0.508714,\n 0,\n 0.128164,\n 0.868334,\n 0.479571,\n 0,\n 0.141495,\n 0.864414,\n 0.451796,\n 0,\n 0.155026,\n 0.862678,\n 0.425328,\n 0,\n 0.168745,\n 0.862835,\n 0.400352,\n 0,\n 0.182639,\n 0.864067,\n 0.376532,\n 0,\n 0.196699,\n 0.866086,\n 0.35391,\n 0,\n 0.210915,\n 0.868557,\n 0.332424,\n 0,\n 0.225282,\n 0.871271,\n 0.312053,\n 0,\n 0.239792,\n 0.874058,\n 0.292764,\n 0,\n 0.25444,\n 0.8768,\n 0.27453,\n 0,\n 0.269223,\n 0.87939,\n 0.257297,\n 0,\n 0.284135,\n 0.8819,\n 0.24114,\n 0,\n 0.299174,\n 0.884187,\n 0.225934,\n 0,\n 0.314337,\n 0.886262,\n 0.211669,\n 0,\n 0.329622,\n 0.888119,\n 0.198311,\n 0,\n 0.345026,\n 0.889709,\n 0.185783,\n 0,\n 0.360549,\n 0.891054,\n 0.174063,\n 0,\n 0.376189,\n 0.892196,\n 0.163143,\n 0,\n 0.391946,\n 0.893101,\n 0.152952,\n 0,\n 0.407819,\n 0.893803,\n 0.143475,\n 0,\n 0.423808,\n 0.894277,\n 0.134647,\n 0,\n 0.439914,\n 0.894532,\n 0.126434,\n 0,\n 0.456137,\n 0.894576,\n 0.1188,\n 0,\n 0.472479,\n 0.894393,\n 0.111694,\n 0,\n 0.48894,\n 0.893976,\n 0.105069,\n 0,\n 0.505523,\n 0.893346,\n 0.0989077,\n 0,\n 0.52223,\n 0.892502,\n 0.0931724,\n 0,\n 0.539064,\n 0.891441,\n 0.0878276,\n 0,\n 0.556028,\n 0.890276,\n 0.082903,\n 0,\n 0.573125,\n 0.888972,\n 0.0783505,\n 0,\n 0.590361,\n 0.887469,\n 0.0741083,\n 0,\n 0.607741,\n 0.885785,\n 0.0701633,\n 0,\n 0.62527,\n 0.883914,\n 0.0664835,\n 0,\n 0.642957,\n 0.881872,\n 0.0630567,\n 0,\n 0.660809,\n 0.879651,\n 0.0598527,\n 0,\n 0.678836,\n 0.877267,\n 0.0568615,\n 0,\n 0.69705,\n 0.874717,\n 0.05406,\n 0,\n 0.715465,\n 0.872012,\n 0.0514378,\n 0,\n 0.734098,\n 0.869157,\n 0.0489805,\n 0,\n 0.752968,\n 0.866155,\n 0.0466727,\n 0,\n 0.772101,\n 0.863014,\n 0.0445056,\n 0,\n 0.791529,\n 0.859748,\n 0.0424733,\n 0,\n 0.81129,\n 0.856416,\n 0.0405957,\n 0,\n 0.831438,\n 0.852958,\n 0.0388273,\n 0,\n 0.852044,\n 0.849382,\n 0.0371619,\n 0,\n 0.87321,\n 0.845694,\n 0.0355959,\n 0,\n 0.89509,\n 0.841893,\n 0.0341155,\n 0,\n 0.917932,\n 0.837981,\n 0.0327141,\n 0,\n 0.942204,\n 0.833963,\n 0.0313856,\n 0,\n 0.968981,\n 0.829847,\n 0.0301275,\n 0,\n 1,\n 1,\n 0.85214,\n 0,\n 0,\n 0.999969,\n 0.852095,\n 0,\n 279627e-8,\n 0.999483,\n 0.851408,\n 0,\n 0.0107635,\n 0.994545,\n 0.84579,\n 0,\n 0.0206454,\n 0.986188,\n 0.835231,\n 0,\n 0.0315756,\n 0.969847,\n 0.814687,\n 0,\n 0.0432021,\n 0.945951,\n 0.783735,\n 0,\n 0.0553396,\n 0.91917,\n 0.746074,\n 0,\n 0.0678766,\n 0.895488,\n 0.706938,\n 0,\n 0.0807395,\n 0.878232,\n 0.669534,\n 0,\n 0.0938767,\n 0.868252,\n 0.635168,\n 0,\n 0.10725,\n 0.863873,\n 0.603069,\n 0,\n 0.120832,\n 0.863369,\n 0.572514,\n 0,\n 0.134598,\n 0.86545,\n 0.543169,\n 0,\n 0.148533,\n 0.868803,\n 0.514578,\n 0,\n 0.16262,\n 0.872794,\n 0.486762,\n 0,\n 0.176849,\n 0.87702,\n 0.459811,\n 0,\n 0.19121,\n 0.881054,\n 0.433654,\n 0,\n 0.205694,\n 0.884974,\n 0.408574,\n 0,\n 0.220294,\n 0.888587,\n 0.384525,\n 0,\n 0.235005,\n 0.891877,\n 0.36156,\n 0,\n 0.24982,\n 0.894793,\n 0.339661,\n 0,\n 0.264737,\n 0.89743,\n 0.318913,\n 0,\n 0.279751,\n 0.899796,\n 0.299302,\n 0,\n 0.294859,\n 0.901943,\n 0.280843,\n 0,\n 0.310058,\n 0.903858,\n 0.263481,\n 0,\n 0.325346,\n 0.905574,\n 0.247197,\n 0,\n 0.340721,\n 0.907069,\n 0.231915,\n 0,\n 0.356181,\n 0.908379,\n 0.217614,\n 0,\n 0.371725,\n 0.90952,\n 0.20425,\n 0,\n 0.387353,\n 0.910483,\n 0.191758,\n 0,\n 0.403063,\n 0.91128,\n 0.180092,\n 0,\n 0.418854,\n 0.911936,\n 0.169222,\n 0,\n 0.434727,\n 0.912454,\n 0.159098,\n 0,\n 0.450682,\n 0.912835,\n 0.149668,\n 0,\n 0.466718,\n 0.913078,\n 0.140884,\n 0,\n 0.482837,\n 0.913192,\n 0.132709,\n 0,\n 0.499038,\n 0.913175,\n 0.125095,\n 0,\n 0.515324,\n 0.91304,\n 0.118012,\n 0,\n 0.531695,\n 0.912781,\n 0.111417,\n 0,\n 0.548153,\n 0.91241,\n 0.105281,\n 0,\n 0.5647,\n 0.911924,\n 0.0995691,\n 0,\n 0.581338,\n 0.911331,\n 0.0942531,\n 0,\n 0.59807,\n 0.910637,\n 0.0893076,\n 0,\n 0.6149,\n 0.90984,\n 0.0846998,\n 0,\n 0.63183,\n 0.908941,\n 0.0804044,\n 0,\n 0.648865,\n 0.907944,\n 0.0763984,\n 0,\n 0.666011,\n 0.906857,\n 0.0726638,\n 0,\n 0.683273,\n 0.90568,\n 0.0691783,\n 0,\n 0.700659,\n 0.904416,\n 0.0659222,\n 0,\n 0.718176,\n 0.903067,\n 0.0628782,\n 0,\n 0.735834,\n 0.901637,\n 0.0600307,\n 0,\n 0.753646,\n 0.900128,\n 0.0573647,\n 0,\n 0.771625,\n 0.898544,\n 0.0548668,\n 0,\n 0.78979,\n 0.89689,\n 0.052527,\n 0,\n 0.808162,\n 0.895165,\n 0.0503306,\n 0,\n 0.826771,\n 0.893371,\n 0.0482668,\n 0,\n 0.845654,\n 0.891572,\n 0.0463605,\n 0,\n 0.864863,\n 0.889763,\n 0.0445998,\n 0,\n 0.884472,\n 0.887894,\n 0.0429451,\n 0,\n 0.904592,\n 0.885967,\n 0.0413884,\n 0,\n 0.925407,\n 0.883984,\n 0.0399225,\n 0,\n 0.947271,\n 0.881945,\n 0.0385405,\n 0,\n 0.97105,\n 0.879854,\n 0.0372362,\n 0,\n 1,\n 0.999804,\n 0.995833,\n 0,\n 0,\n 0.938155,\n 0.933611,\n 0,\n 0.0158731,\n 0.864755,\n 0.854311,\n 0,\n 0.0317461,\n 0.888594,\n 0.865264,\n 0,\n 0.0476191,\n 0.905575,\n 0.863922,\n 0,\n 0.0634921,\n 0.915125,\n 0.850558,\n 0,\n 0.0793651,\n 0.920665,\n 0.829254,\n 0,\n 0.0952381,\n 0.924073,\n 0.802578,\n 0,\n 0.111111,\n 0.926304,\n 0.772211,\n 0,\n 0.126984,\n 0.927829,\n 0.739366,\n 0,\n 0.142857,\n 0.928924,\n 0.705033,\n 0,\n 0.15873,\n 0.92973,\n 0.670019,\n 0,\n 0.174603,\n 0.930339,\n 0.634993,\n 0,\n 0.190476,\n 0.930811,\n 0.600485,\n 0,\n 0.206349,\n 0.931191,\n 0.566897,\n 0,\n 0.222222,\n 0.93149,\n 0.534485,\n 0,\n 0.238095,\n 0.931737,\n 0.503429,\n 0,\n 0.253968,\n 0.931939,\n 0.473811,\n 0,\n 0.269841,\n 0.932108,\n 0.445668,\n 0,\n 0.285714,\n 0.93225,\n 0.418993,\n 0,\n 0.301587,\n 0.932371,\n 0.393762,\n 0,\n 0.31746,\n 0.932474,\n 0.369939,\n 0,\n 0.333333,\n 0.932562,\n 0.347479,\n 0,\n 0.349206,\n 0.932638,\n 0.326336,\n 0,\n 0.365079,\n 0.932703,\n 0.306462,\n 0,\n 0.380952,\n 0.93276,\n 0.287805,\n 0,\n 0.396825,\n 0.932809,\n 0.270313,\n 0,\n 0.412698,\n 0.932851,\n 0.253933,\n 0,\n 0.428571,\n 0.932887,\n 0.23861,\n 0,\n 0.444444,\n 0.932917,\n 0.224289,\n 0,\n 0.460317,\n 0.932943,\n 0.210917,\n 0,\n 0.47619,\n 0.932965,\n 0.19844,\n 0,\n 0.492063,\n 0.932982,\n 0.186807,\n 0,\n 0.507937,\n 0.932995,\n 0.175966,\n 0,\n 0.52381,\n 0.933005,\n 0.165869,\n 0,\n 0.539683,\n 0.933011,\n 0.156468,\n 0,\n 0.555556,\n 0.933013,\n 0.147719,\n 0,\n 0.571429,\n 0.933013,\n 0.139579,\n 0,\n 0.587302,\n 0.93301,\n 0.132007,\n 0,\n 0.603175,\n 0.933004,\n 0.124965,\n 0,\n 0.619048,\n 0.932994,\n 0.118416,\n 0,\n 0.634921,\n 0.932982,\n 0.112326,\n 0,\n 0.650794,\n 0.932968,\n 0.106663,\n 0,\n 0.666667,\n 0.93295,\n 0.101397,\n 0,\n 0.68254,\n 0.932931,\n 0.0964993,\n 0,\n 0.698413,\n 0.932908,\n 0.0919438,\n 0,\n 0.714286,\n 0.932883,\n 0.0877057,\n 0,\n 0.730159,\n 0.932856,\n 0.0837623,\n 0,\n 0.746032,\n 0.932827,\n 0.0800921,\n 0,\n 0.761905,\n 0.932796,\n 0.0766754,\n 0,\n 0.777778,\n 0.932762,\n 0.0734936,\n 0,\n 0.793651,\n 0.932727,\n 0.0705296,\n 0,\n 0.809524,\n 0.932689,\n 0.0677676,\n 0,\n 0.825397,\n 0.93265,\n 0.0651929,\n 0,\n 0.84127,\n 0.932609,\n 0.0627917,\n 0,\n 0.857143,\n 0.932565,\n 0.0605515,\n 0,\n 0.873016,\n 0.932521,\n 0.0584606,\n 0,\n 0.888889,\n 0.932474,\n 0.0565082,\n 0,\n 0.904762,\n 0.932427,\n 0.0546841,\n 0,\n 0.920635,\n 0.932377,\n 0.0529793,\n 0,\n 0.936508,\n 0.932326,\n 0.0513851,\n 0,\n 0.952381,\n 0.932274,\n 0.0498936,\n 0,\n 0.968254,\n 0.93222,\n 0.0484975,\n 0,\n 0.984127,\n 0.932164,\n 0.0471899,\n 0,\n 1\n ];\n const ltc_float_1 = new Float32Array(LTC_MAT_1);\n const ltc_float_2 = new Float32Array(LTC_MAT_2);\n UniformsLib.LTC_FLOAT_1 = new DataTexture(\n ltc_float_1,\n 64,\n 64,\n RGBAFormat,\n FloatType,\n UVMapping,\n ClampToEdgeWrapping,\n ClampToEdgeWrapping,\n LinearFilter,\n NearestFilter,\n 1\n );\n UniformsLib.LTC_FLOAT_2 = new DataTexture(\n ltc_float_2,\n 64,\n 64,\n RGBAFormat,\n FloatType,\n UVMapping,\n ClampToEdgeWrapping,\n ClampToEdgeWrapping,\n LinearFilter,\n NearestFilter,\n 1\n );\n UniformsLib.LTC_FLOAT_1.needsUpdate = true;\n UniformsLib.LTC_FLOAT_2.needsUpdate = true;\n const ltc_half_1 = new Uint16Array(LTC_MAT_1.length);\n LTC_MAT_1.forEach(function(x, index) {\n ltc_half_1[index] = DataUtils.toHalfFloat(x);\n });\n const ltc_half_2 = new Uint16Array(LTC_MAT_2.length);\n LTC_MAT_2.forEach(function(x, index) {\n ltc_half_2[index] = DataUtils.toHalfFloat(x);\n });\n UniformsLib.LTC_HALF_1 = new DataTexture(\n ltc_half_1,\n 64,\n 64,\n RGBAFormat,\n HalfFloatType,\n UVMapping,\n ClampToEdgeWrapping,\n ClampToEdgeWrapping,\n LinearFilter,\n NearestFilter,\n 1\n );\n UniformsLib.LTC_HALF_2 = new DataTexture(\n ltc_half_2,\n 64,\n 64,\n RGBAFormat,\n HalfFloatType,\n UVMapping,\n ClampToEdgeWrapping,\n ClampToEdgeWrapping,\n LinearFilter,\n NearestFilter,\n 1\n );\n UniformsLib.LTC_HALF_1.needsUpdate = true;\n UniformsLib.LTC_HALF_2.needsUpdate = true;\n }\n};\nexport {\n RectAreaLightUniformsLib\n};\n//# sourceMappingURL=RectAreaLightUniformsLib.js.map\n","import { Vector3, Color, SphericalHarmonics3, LightProbe } from \"three\";\nconst LightProbeGenerator = {\n // https://www.ppsloan.org/publications/StupidSH36.pdf\n fromCubeTexture(cubeTexture) {\n let totalWeight = 0;\n const coord = new Vector3();\n const dir = new Vector3();\n const color = new Color();\n const shBasis = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n const sh = new SphericalHarmonics3();\n const shCoefficients = sh.coefficients;\n for (let faceIndex = 0; faceIndex < 6; faceIndex++) {\n const image = cubeTexture.image[faceIndex];\n const width = image.width;\n const height = image.height;\n const canvas = document.createElement(\"canvas\");\n canvas.width = width;\n canvas.height = height;\n const context = canvas.getContext(\"2d\");\n context.drawImage(image, 0, 0, width, height);\n const imageData = context.getImageData(0, 0, width, height);\n const data = imageData.data;\n const imageWidth = imageData.width;\n const pixelSize = 2 / imageWidth;\n for (let i = 0, il = data.length; i < il; i += 4) {\n color.setRGB(data[i] / 255, data[i + 1] / 255, data[i + 2] / 255);\n if (\"colorSpace\" in cubeTexture) {\n if (cubeTexture.colorSpace === \"srgb\") {\n color.convertSRGBToLinear();\n }\n } else if (cubeTexture.encoding === 3001) {\n color.convertSRGBToLinear();\n }\n const pixelIndex = i / 4;\n const col = -1 + (pixelIndex % imageWidth + 0.5) * pixelSize;\n const row = 1 - (Math.floor(pixelIndex / imageWidth) + 0.5) * pixelSize;\n switch (faceIndex) {\n case 0:\n coord.set(-1, row, -col);\n break;\n case 1:\n coord.set(1, row, col);\n break;\n case 2:\n coord.set(-col, 1, -row);\n break;\n case 3:\n coord.set(-col, -1, row);\n break;\n case 4:\n coord.set(-col, row, 1);\n break;\n case 5:\n coord.set(col, row, -1);\n break;\n }\n const lengthSq = coord.lengthSq();\n const weight = 4 / (Math.sqrt(lengthSq) * lengthSq);\n totalWeight += weight;\n dir.copy(coord).normalize();\n SphericalHarmonics3.getBasisAt(dir, shBasis);\n for (let j = 0; j < 9; j++) {\n shCoefficients[j].x += shBasis[j] * color.r * weight;\n shCoefficients[j].y += shBasis[j] * color.g * weight;\n shCoefficients[j].z += shBasis[j] * color.b * weight;\n }\n }\n }\n const norm = 4 * Math.PI / totalWeight;\n for (let j = 0; j < 9; j++) {\n shCoefficients[j].x *= norm;\n shCoefficients[j].y *= norm;\n shCoefficients[j].z *= norm;\n }\n return new LightProbe(sh);\n },\n fromCubeRenderTarget(renderer, cubeRenderTarget) {\n let totalWeight = 0;\n const coord = new Vector3();\n const dir = new Vector3();\n const color = new Color();\n const shBasis = [0, 0, 0, 0, 0, 0, 0, 0, 0];\n const sh = new SphericalHarmonics3();\n const shCoefficients = sh.coefficients;\n for (let faceIndex = 0; faceIndex < 6; faceIndex++) {\n const imageWidth = cubeRenderTarget.width;\n const data = new Uint8Array(imageWidth * imageWidth * 4);\n renderer.readRenderTargetPixels(cubeRenderTarget, 0, 0, imageWidth, imageWidth, data, faceIndex);\n const pixelSize = 2 / imageWidth;\n for (let i = 0, il = data.length; i < il; i += 4) {\n color.setRGB(data[i] / 255, data[i + 1] / 255, data[i + 2] / 255);\n if (\"colorSpace\" in cubeRenderTarget.texture) {\n if (cubeRenderTarget.texture.colorSpace === \"srgb\") {\n color.convertSRGBToLinear();\n }\n } else if (cubeRenderTarget.texture.encoding === 3001) {\n color.convertSRGBToLinear();\n }\n const pixelIndex = i / 4;\n const col = -1 + (pixelIndex % imageWidth + 0.5) * pixelSize;\n const row = 1 - (Math.floor(pixelIndex / imageWidth) + 0.5) * pixelSize;\n switch (faceIndex) {\n case 0:\n coord.set(1, row, -col);\n break;\n case 1:\n coord.set(-1, row, col);\n break;\n case 2:\n coord.set(col, 1, -row);\n break;\n case 3:\n coord.set(col, -1, row);\n break;\n case 4:\n coord.set(col, row, 1);\n break;\n case 5:\n coord.set(-col, row, -1);\n break;\n }\n const lengthSq = coord.lengthSq();\n const weight = 4 / (Math.sqrt(lengthSq) * lengthSq);\n totalWeight += weight;\n dir.copy(coord).normalize();\n SphericalHarmonics3.getBasisAt(dir, shBasis);\n for (let j = 0; j < 9; j++) {\n shCoefficients[j].x += shBasis[j] * color.r * weight;\n shCoefficients[j].y += shBasis[j] * color.g * weight;\n shCoefficients[j].z += shBasis[j] * color.b * weight;\n }\n }\n }\n const norm = 4 * Math.PI / totalWeight;\n for (let j = 0; j < 9; j++) {\n shCoefficients[j].x *= norm;\n shCoefficients[j].y *= norm;\n shCoefficients[j].z *= norm;\n }\n return new LightProbe(sh);\n }\n};\nexport {\n LightProbeGenerator\n};\n//# sourceMappingURL=LightProbeGenerator.js.map\n","import { Vector4 } from \"three\";\nimport { calcSurfacePoint } from \"./NURBSUtils.js\";\nclass NURBSSurface {\n constructor(degree1, degree2, knots1, knots2, controlPoints) {\n this.degree1 = degree1;\n this.degree2 = degree2;\n this.knots1 = knots1;\n this.knots2 = knots2;\n this.controlPoints = [];\n const len1 = knots1.length - degree1 - 1;\n const len2 = knots2.length - degree2 - 1;\n for (let i = 0; i < len1; ++i) {\n this.controlPoints[i] = [];\n for (let j = 0; j < len2; ++j) {\n const point = controlPoints[i][j];\n this.controlPoints[i][j] = new Vector4(point.x, point.y, point.z, point.w);\n }\n }\n }\n getPoint(t1, t2, target) {\n const u = this.knots1[0] + t1 * (this.knots1[this.knots1.length - 1] - this.knots1[0]);\n const v = this.knots2[0] + t2 * (this.knots2[this.knots2.length - 1] - this.knots2[0]);\n calcSurfacePoint(this.degree1, this.degree2, this.knots1, this.knots2, this.controlPoints, u, v, target);\n }\n}\nexport {\n NURBSSurface\n};\n//# sourceMappingURL=NURBSSurface.js.map\n","import { Curve, Vector3 } from \"three\";\nclass GrannyKnot extends Curve {\n getPoint(t, optionalTarget = new Vector3()) {\n const point = optionalTarget;\n t = 2 * Math.PI * t;\n const x = -0.22 * Math.cos(t) - 1.28 * Math.sin(t) - 0.44 * Math.cos(3 * t) - 0.78 * Math.sin(3 * t);\n const y = -0.1 * Math.cos(2 * t) - 0.27 * Math.sin(2 * t) + 0.38 * Math.cos(4 * t) + 0.46 * Math.sin(4 * t);\n const z = 0.7 * Math.cos(3 * t) - 0.4 * Math.sin(3 * t);\n return point.set(x, y, z).multiplyScalar(20);\n }\n}\nclass HeartCurve extends Curve {\n constructor(scale = 5) {\n super();\n this.scale = scale;\n }\n getPoint(t, optionalTarget = new Vector3()) {\n const point = optionalTarget;\n t *= 2 * Math.PI;\n const x = 16 * Math.pow(Math.sin(t), 3);\n const y = 13 * Math.cos(t) - 5 * Math.cos(2 * t) - 2 * Math.cos(3 * t) - Math.cos(4 * t);\n const z = 0;\n return point.set(x, y, z).multiplyScalar(this.scale);\n }\n}\nclass VivianiCurve extends Curve {\n constructor(scale = 70) {\n super();\n this.scale = scale;\n }\n getPoint(t, optionalTarget = new Vector3()) {\n const point = optionalTarget;\n t = t * 4 * Math.PI;\n const a = this.scale / 2;\n const x = a * (1 + Math.cos(t));\n const y = a * Math.sin(t);\n const z = 2 * a * Math.sin(t / 2);\n return point.set(x, y, z);\n }\n}\nclass KnotCurve extends Curve {\n getPoint(t, optionalTarget = new Vector3()) {\n const point = optionalTarget;\n t *= 2 * Math.PI;\n const R = 10;\n const s = 50;\n const x = s * Math.sin(t);\n const y = Math.cos(t) * (R + s * Math.cos(t));\n const z = Math.sin(t) * (R + s * Math.cos(t));\n return point.set(x, y, z);\n }\n}\nclass HelixCurve extends Curve {\n getPoint(t, optionalTarget = new Vector3()) {\n const point = optionalTarget;\n const a = 30;\n const b = 150;\n const t2 = 2 * Math.PI * t * b / 30;\n const x = Math.cos(t2) * a;\n const y = Math.sin(t2) * a;\n const z = b * t;\n return point.set(x, y, z);\n }\n}\nclass TrefoilKnot extends Curve {\n constructor(scale = 10) {\n super();\n this.scale = scale;\n }\n getPoint(t, optionalTarget = new Vector3()) {\n const point = optionalTarget;\n t *= Math.PI * 2;\n const x = (2 + Math.cos(3 * t)) * Math.cos(2 * t);\n const y = (2 + Math.cos(3 * t)) * Math.sin(2 * t);\n const z = Math.sin(3 * t);\n return point.set(x, y, z).multiplyScalar(this.scale);\n }\n}\nclass TorusKnot extends Curve {\n constructor(scale = 10) {\n super();\n this.scale = scale;\n }\n getPoint(t, optionalTarget = new Vector3()) {\n const point = optionalTarget;\n const p = 3;\n const q = 4;\n t *= Math.PI * 2;\n const x = (2 + Math.cos(q * t)) * Math.cos(p * t);\n const y = (2 + Math.cos(q * t)) * Math.sin(p * t);\n const z = Math.sin(q * t);\n return point.set(x, y, z).multiplyScalar(this.scale);\n }\n}\nclass CinquefoilKnot extends Curve {\n constructor(scale = 10) {\n super();\n this.scale = scale;\n }\n getPoint(t, optionalTarget = new Vector3()) {\n const point = optionalTarget;\n const p = 2;\n const q = 5;\n t *= Math.PI * 2;\n const x = (2 + Math.cos(q * t)) * Math.cos(p * t);\n const y = (2 + Math.cos(q * t)) * Math.sin(p * t);\n const z = Math.sin(q * t);\n return point.set(x, y, z).multiplyScalar(this.scale);\n }\n}\nclass TrefoilPolynomialKnot extends Curve {\n constructor(scale = 10) {\n super();\n this.scale = scale;\n }\n getPoint(t, optionalTarget = new Vector3()) {\n const point = optionalTarget;\n t = t * 4 - 2;\n const x = Math.pow(t, 3) - 3 * t;\n const y = Math.pow(t, 4) - 4 * t * t;\n const z = 1 / 5 * Math.pow(t, 5) - 2 * t;\n return point.set(x, y, z).multiplyScalar(this.scale);\n }\n}\nfunction scaleTo(x, y, t) {\n const r = y - x;\n return t * r + x;\n}\nclass FigureEightPolynomialKnot extends Curve {\n constructor(scale = 1) {\n super();\n this.scale = scale;\n }\n getPoint(t, optionalTarget = new Vector3()) {\n const point = optionalTarget;\n t = scaleTo(-4, 4, t);\n const x = 2 / 5 * t * (t * t - 7) * (t * t - 10);\n const y = Math.pow(t, 4) - 13 * t * t;\n const z = 1 / 10 * t * (t * t - 4) * (t * t - 9) * (t * t - 12);\n return point.set(x, y, z).multiplyScalar(this.scale);\n }\n}\nclass DecoratedTorusKnot4a extends Curve {\n constructor(scale = 40) {\n super();\n this.scale = scale;\n }\n getPoint(t, optionalTarget = new Vector3()) {\n const point = optionalTarget;\n t *= Math.PI * 2;\n const x = Math.cos(2 * t) * (1 + 0.6 * (Math.cos(5 * t) + 0.75 * Math.cos(10 * t)));\n const y = Math.sin(2 * t) * (1 + 0.6 * (Math.cos(5 * t) + 0.75 * Math.cos(10 * t)));\n const z = 0.35 * Math.sin(5 * t);\n return point.set(x, y, z).multiplyScalar(this.scale);\n }\n}\nclass DecoratedTorusKnot4b extends Curve {\n constructor(scale = 40) {\n super();\n this.scale = scale;\n }\n getPoint(t, optionalTarget = new Vector3()) {\n const point = optionalTarget;\n const fi = t * Math.PI * 2;\n const x = Math.cos(2 * fi) * (1 + 0.45 * Math.cos(3 * fi) + 0.4 * Math.cos(9 * fi));\n const y = Math.sin(2 * fi) * (1 + 0.45 * Math.cos(3 * fi) + 0.4 * Math.cos(9 * fi));\n const z = 0.2 * Math.sin(9 * fi);\n return point.set(x, y, z).multiplyScalar(this.scale);\n }\n}\nclass DecoratedTorusKnot5a extends Curve {\n constructor(scale = 40) {\n super();\n this.scale = scale;\n }\n getPoint(t, optionalTarget = new Vector3()) {\n const point = optionalTarget;\n const fi = t * Math.PI * 2;\n const x = Math.cos(3 * fi) * (1 + 0.3 * Math.cos(5 * fi) + 0.5 * Math.cos(10 * fi));\n const y = Math.sin(3 * fi) * (1 + 0.3 * Math.cos(5 * fi) + 0.5 * Math.cos(10 * fi));\n const z = 0.2 * Math.sin(20 * fi);\n return point.set(x, y, z).multiplyScalar(this.scale);\n }\n}\nclass DecoratedTorusKnot5c extends Curve {\n constructor(scale = 40) {\n super();\n this.scale = scale;\n }\n getPoint(t, optionalTarget = new Vector3()) {\n const point = optionalTarget;\n const fi = t * Math.PI * 2;\n const x = Math.cos(4 * fi) * (1 + 0.5 * (Math.cos(5 * fi) + 0.4 * Math.cos(20 * fi)));\n const y = Math.sin(4 * fi) * (1 + 0.5 * (Math.cos(5 * fi) + 0.4 * Math.cos(20 * fi)));\n const z = 0.35 * Math.sin(15 * fi);\n return point.set(x, y, z).multiplyScalar(this.scale);\n }\n}\nexport {\n CinquefoilKnot,\n DecoratedTorusKnot4a,\n DecoratedTorusKnot4b,\n DecoratedTorusKnot5a,\n DecoratedTorusKnot5c,\n FigureEightPolynomialKnot,\n GrannyKnot,\n HeartCurve,\n HelixCurve,\n KnotCurve,\n TorusKnot,\n TrefoilKnot,\n TrefoilPolynomialKnot,\n VivianiCurve\n};\n//# sourceMappingURL=CurveExtras.js.map\n","import { Vector3, Color, EventDispatcher, BufferGeometry, Float32BufferAttribute, MathUtils, Matrix3, Matrix4, Box3, Sphere, BufferAttribute, Vector2, Object3D } from \"three\";\nconst _m1 = /* @__PURE__ */ new Matrix4();\nconst _obj = /* @__PURE__ */ new Object3D();\nconst _offset = /* @__PURE__ */ new Vector3();\nconst Geometry = /* @__PURE__ */ (() => {\n class Geometry2 extends EventDispatcher {\n static createBufferGeometryFromObject(object) {\n let buffergeometry = new BufferGeometry();\n const geometry = object.geometry;\n if (object.isPoints || object.isLine) {\n const positions = new Float32BufferAttribute(geometry.vertices.length * 3, 3);\n const colors = new Float32BufferAttribute(geometry.colors.length * 3, 3);\n buffergeometry.setAttribute(\"position\", positions.copyVector3sArray(geometry.vertices));\n buffergeometry.setAttribute(\"color\", colors.copyColorsArray(geometry.colors));\n if (geometry.lineDistances && geometry.lineDistances.length === geometry.vertices.length) {\n const lineDistances = new Float32BufferAttribute(geometry.lineDistances.length, 1);\n buffergeometry.setAttribute(\"lineDistance\", lineDistances.copyArray(geometry.lineDistances));\n }\n if (geometry.boundingSphere !== null) {\n buffergeometry.boundingSphere = geometry.boundingSphere.clone();\n }\n if (geometry.boundingBox !== null) {\n buffergeometry.boundingBox = geometry.boundingBox.clone();\n }\n } else if (object.isMesh) {\n buffergeometry = geometry.toBufferGeometry();\n }\n return buffergeometry;\n }\n constructor() {\n super();\n this.isGeometry = true;\n this.uuid = MathUtils.generateUUID();\n this.name = \"\";\n this.type = \"Geometry\";\n this.vertices = [];\n this.colors = [];\n this.faces = [];\n this.faceVertexUvs = [[]];\n this.morphTargets = [];\n this.morphNormals = [];\n this.skinWeights = [];\n this.skinIndices = [];\n this.lineDistances = [];\n this.boundingBox = null;\n this.boundingSphere = null;\n this.elementsNeedUpdate = false;\n this.verticesNeedUpdate = false;\n this.uvsNeedUpdate = false;\n this.normalsNeedUpdate = false;\n this.colorsNeedUpdate = false;\n this.lineDistancesNeedUpdate = false;\n this.groupsNeedUpdate = false;\n }\n applyMatrix4(matrix) {\n const normalMatrix = new Matrix3().getNormalMatrix(matrix);\n for (let i = 0, il = this.vertices.length; i < il; i++) {\n const vertex = this.vertices[i];\n vertex.applyMatrix4(matrix);\n }\n for (let i = 0, il = this.faces.length; i < il; i++) {\n const face = this.faces[i];\n face.normal.applyMatrix3(normalMatrix).normalize();\n for (let j = 0, jl = face.vertexNormals.length; j < jl; j++) {\n face.vertexNormals[j].applyMatrix3(normalMatrix).normalize();\n }\n }\n if (this.boundingBox !== null) {\n this.computeBoundingBox();\n }\n if (this.boundingSphere !== null) {\n this.computeBoundingSphere();\n }\n this.verticesNeedUpdate = true;\n this.normalsNeedUpdate = true;\n return this;\n }\n rotateX(angle) {\n _m1.makeRotationX(angle);\n this.applyMatrix4(_m1);\n return this;\n }\n rotateY(angle) {\n _m1.makeRotationY(angle);\n this.applyMatrix4(_m1);\n return this;\n }\n rotateZ(angle) {\n _m1.makeRotationZ(angle);\n this.applyMatrix4(_m1);\n return this;\n }\n translate(x, y, z) {\n _m1.makeTranslation(x, y, z);\n this.applyMatrix4(_m1);\n return this;\n }\n scale(x, y, z) {\n _m1.makeScale(x, y, z);\n this.applyMatrix4(_m1);\n return this;\n }\n lookAt(vector) {\n _obj.lookAt(vector);\n _obj.updateMatrix();\n this.applyMatrix4(_obj.matrix);\n return this;\n }\n fromBufferGeometry(geometry) {\n const scope = this;\n const index = geometry.index !== null ? geometry.index : void 0;\n const attributes = geometry.attributes;\n if (attributes.position === void 0) {\n console.error(\"THREE.Geometry.fromBufferGeometry(): Position attribute required for conversion.\");\n return this;\n }\n const position = attributes.position;\n const normal = attributes.normal;\n const color = attributes.color;\n const uv = attributes.uv;\n const uv2 = attributes.uv2;\n if (uv2 !== void 0)\n this.faceVertexUvs[1] = [];\n for (let i = 0; i < position.count; i++) {\n scope.vertices.push(new Vector3().fromBufferAttribute(position, i));\n if (color !== void 0) {\n scope.colors.push(new Color().fromBufferAttribute(color, i));\n }\n }\n function addFace(a, b, c, materialIndex) {\n const vertexColors = color === void 0 ? [] : [scope.colors[a].clone(), scope.colors[b].clone(), scope.colors[c].clone()];\n const vertexNormals = normal === void 0 ? [] : [\n new Vector3().fromBufferAttribute(normal, a),\n new Vector3().fromBufferAttribute(normal, b),\n new Vector3().fromBufferAttribute(normal, c)\n ];\n const face = new Face3(a, b, c, vertexNormals, vertexColors, materialIndex);\n scope.faces.push(face);\n if (uv !== void 0) {\n scope.faceVertexUvs[0].push([\n new Vector2().fromBufferAttribute(uv, a),\n new Vector2().fromBufferAttribute(uv, b),\n new Vector2().fromBufferAttribute(uv, c)\n ]);\n }\n if (uv2 !== void 0) {\n scope.faceVertexUvs[1].push([\n new Vector2().fromBufferAttribute(uv2, a),\n new Vector2().fromBufferAttribute(uv2, b),\n new Vector2().fromBufferAttribute(uv2, c)\n ]);\n }\n }\n const groups = geometry.groups;\n if (groups.length > 0) {\n for (let i = 0; i < groups.length; i++) {\n const group = groups[i];\n const start = group.start;\n const count = group.count;\n for (let j = start, jl = start + count; j < jl; j += 3) {\n if (index !== void 0) {\n addFace(index.getX(j), index.getX(j + 1), index.getX(j + 2), group.materialIndex);\n } else {\n addFace(j, j + 1, j + 2, group.materialIndex);\n }\n }\n }\n } else {\n if (index !== void 0) {\n for (let i = 0; i < index.count; i += 3) {\n addFace(index.getX(i), index.getX(i + 1), index.getX(i + 2));\n }\n } else {\n for (let i = 0; i < position.count; i += 3) {\n addFace(i, i + 1, i + 2);\n }\n }\n }\n this.computeFaceNormals();\n if (geometry.boundingBox !== null) {\n this.boundingBox = geometry.boundingBox.clone();\n }\n if (geometry.boundingSphere !== null) {\n this.boundingSphere = geometry.boundingSphere.clone();\n }\n return this;\n }\n center() {\n this.computeBoundingBox();\n this.boundingBox.getCenter(_offset).negate();\n this.translate(_offset.x, _offset.y, _offset.z);\n return this;\n }\n normalize() {\n this.computeBoundingSphere();\n const center = this.boundingSphere.center;\n const radius = this.boundingSphere.radius;\n const s = radius === 0 ? 1 : 1 / radius;\n const matrix = new Matrix4();\n matrix.set(s, 0, 0, -s * center.x, 0, s, 0, -s * center.y, 0, 0, s, -s * center.z, 0, 0, 0, 1);\n this.applyMatrix4(matrix);\n return this;\n }\n computeFaceNormals() {\n const cb = new Vector3(), ab = new Vector3();\n for (let f = 0, fl = this.faces.length; f < fl; f++) {\n const face = this.faces[f];\n const vA = this.vertices[face.a];\n const vB = this.vertices[face.b];\n const vC = this.vertices[face.c];\n cb.subVectors(vC, vB);\n ab.subVectors(vA, vB);\n cb.cross(ab);\n cb.normalize();\n face.normal.copy(cb);\n }\n }\n computeVertexNormals(areaWeighted = true) {\n const vertices = new Array(this.vertices.length);\n for (let v = 0, vl = this.vertices.length; v < vl; v++) {\n vertices[v] = new Vector3();\n }\n if (areaWeighted) {\n const cb = new Vector3(), ab = new Vector3();\n for (let f = 0, fl = this.faces.length; f < fl; f++) {\n const face = this.faces[f];\n const vA = this.vertices[face.a];\n const vB = this.vertices[face.b];\n const vC = this.vertices[face.c];\n cb.subVectors(vC, vB);\n ab.subVectors(vA, vB);\n cb.cross(ab);\n vertices[face.a].add(cb);\n vertices[face.b].add(cb);\n vertices[face.c].add(cb);\n }\n } else {\n this.computeFaceNormals();\n for (let f = 0, fl = this.faces.length; f < fl; f++) {\n const face = this.faces[f];\n vertices[face.a].add(face.normal);\n vertices[face.b].add(face.normal);\n vertices[face.c].add(face.normal);\n }\n }\n for (let v = 0, vl = this.vertices.length; v < vl; v++) {\n vertices[v].normalize();\n }\n for (let f = 0, fl = this.faces.length; f < fl; f++) {\n const face = this.faces[f];\n const vertexNormals = face.vertexNormals;\n if (vertexNormals.length === 3) {\n vertexNormals[0].copy(vertices[face.a]);\n vertexNormals[1].copy(vertices[face.b]);\n vertexNormals[2].copy(vertices[face.c]);\n } else {\n vertexNormals[0] = vertices[face.a].clone();\n vertexNormals[1] = vertices[face.b].clone();\n vertexNormals[2] = vertices[face.c].clone();\n }\n }\n if (this.faces.length > 0) {\n this.normalsNeedUpdate = true;\n }\n }\n computeFlatVertexNormals() {\n this.computeFaceNormals();\n for (let f = 0, fl = this.faces.length; f < fl; f++) {\n const face = this.faces[f];\n const vertexNormals = face.vertexNormals;\n if (vertexNormals.length === 3) {\n vertexNormals[0].copy(face.normal);\n vertexNormals[1].copy(face.normal);\n vertexNormals[2].copy(face.normal);\n } else {\n vertexNormals[0] = face.normal.clone();\n vertexNormals[1] = face.normal.clone();\n vertexNormals[2] = face.normal.clone();\n }\n }\n if (this.faces.length > 0) {\n this.normalsNeedUpdate = true;\n }\n }\n computeMorphNormals() {\n for (let f = 0, fl = this.faces.length; f < fl; f++) {\n const face = this.faces[f];\n if (!face.__originalFaceNormal) {\n face.__originalFaceNormal = face.normal.clone();\n } else {\n face.__originalFaceNormal.copy(face.normal);\n }\n if (!face.__originalVertexNormals)\n face.__originalVertexNormals = [];\n for (let i = 0, il = face.vertexNormals.length; i < il; i++) {\n if (!face.__originalVertexNormals[i]) {\n face.__originalVertexNormals[i] = face.vertexNormals[i].clone();\n } else {\n face.__originalVertexNormals[i].copy(face.vertexNormals[i]);\n }\n }\n }\n const tmpGeo = new Geometry2();\n tmpGeo.faces = this.faces;\n for (let i = 0, il = this.morphTargets.length; i < il; i++) {\n if (!this.morphNormals[i]) {\n this.morphNormals[i] = {};\n this.morphNormals[i].faceNormals = [];\n this.morphNormals[i].vertexNormals = [];\n const dstNormalsFace = this.morphNormals[i].faceNormals;\n const dstNormalsVertex = this.morphNormals[i].vertexNormals;\n for (let f = 0, fl = this.faces.length; f < fl; f++) {\n const faceNormal = new Vector3();\n const vertexNormals = {\n a: new Vector3(),\n b: new Vector3(),\n c: new Vector3()\n };\n dstNormalsFace.push(faceNormal);\n dstNormalsVertex.push(vertexNormals);\n }\n }\n const morphNormals = this.morphNormals[i];\n tmpGeo.vertices = this.morphTargets[i].vertices;\n tmpGeo.computeFaceNormals();\n tmpGeo.computeVertexNormals();\n for (let f = 0, fl = this.faces.length; f < fl; f++) {\n const face = this.faces[f];\n const faceNormal = morphNormals.faceNormals[f];\n const vertexNormals = morphNormals.vertexNormals[f];\n faceNormal.copy(face.normal);\n vertexNormals.a.copy(face.vertexNormals[0]);\n vertexNormals.b.copy(face.vertexNormals[1]);\n vertexNormals.c.copy(face.vertexNormals[2]);\n }\n }\n for (let f = 0, fl = this.faces.length; f < fl; f++) {\n const face = this.faces[f];\n face.normal = face.__originalFaceNormal;\n face.vertexNormals = face.__originalVertexNormals;\n }\n }\n computeBoundingBox() {\n if (this.boundingBox === null) {\n this.boundingBox = new Box3();\n }\n this.boundingBox.setFromPoints(this.vertices);\n }\n computeBoundingSphere() {\n if (this.boundingSphere === null) {\n this.boundingSphere = new Sphere();\n }\n this.boundingSphere.setFromPoints(this.vertices);\n }\n merge(geometry, matrix, materialIndexOffset = 0) {\n if (!(geometry && geometry.isGeometry)) {\n console.error(\"THREE.Geometry.merge(): geometry not an instance of THREE.Geometry.\", geometry);\n return;\n }\n let normalMatrix;\n const vertexOffset = this.vertices.length, vertices1 = this.vertices, vertices2 = geometry.vertices, faces1 = this.faces, faces2 = geometry.faces, colors1 = this.colors, colors2 = geometry.colors;\n if (matrix !== void 0) {\n normalMatrix = new Matrix3().getNormalMatrix(matrix);\n }\n for (let i = 0, il = vertices2.length; i < il; i++) {\n const vertex = vertices2[i];\n const vertexCopy = vertex.clone();\n if (matrix !== void 0)\n vertexCopy.applyMatrix4(matrix);\n vertices1.push(vertexCopy);\n }\n for (let i = 0, il = colors2.length; i < il; i++) {\n colors1.push(colors2[i].clone());\n }\n for (let i = 0, il = faces2.length; i < il; i++) {\n const face = faces2[i];\n let normal, color;\n const faceVertexNormals = face.vertexNormals, faceVertexColors = face.vertexColors;\n const faceCopy = new Face3(face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset);\n faceCopy.normal.copy(face.normal);\n if (normalMatrix !== void 0) {\n faceCopy.normal.applyMatrix3(normalMatrix).normalize();\n }\n for (let j = 0, jl = faceVertexNormals.length; j < jl; j++) {\n normal = faceVertexNormals[j].clone();\n if (normalMatrix !== void 0) {\n normal.applyMatrix3(normalMatrix).normalize();\n }\n faceCopy.vertexNormals.push(normal);\n }\n faceCopy.color.copy(face.color);\n for (let j = 0, jl = faceVertexColors.length; j < jl; j++) {\n color = faceVertexColors[j];\n faceCopy.vertexColors.push(color.clone());\n }\n faceCopy.materialIndex = face.materialIndex + materialIndexOffset;\n faces1.push(faceCopy);\n }\n for (let i = 0, il = geometry.faceVertexUvs.length; i < il; i++) {\n const faceVertexUvs2 = geometry.faceVertexUvs[i];\n if (this.faceVertexUvs[i] === void 0)\n this.faceVertexUvs[i] = [];\n for (let j = 0, jl = faceVertexUvs2.length; j < jl; j++) {\n const uvs2 = faceVertexUvs2[j], uvsCopy = [];\n for (let k = 0, kl = uvs2.length; k < kl; k++) {\n uvsCopy.push(uvs2[k].clone());\n }\n this.faceVertexUvs[i].push(uvsCopy);\n }\n }\n }\n mergeMesh(mesh) {\n if (!(mesh && mesh.isMesh)) {\n console.error(\"THREE.Geometry.mergeMesh(): mesh not an instance of THREE.Mesh.\", mesh);\n return;\n }\n if (mesh.matrixAutoUpdate)\n mesh.updateMatrix();\n this.merge(mesh.geometry, mesh.matrix);\n }\n /*\n * Checks for duplicate vertices with hashmap.\n * Duplicated vertices are removed\n * and faces' vertices are updated.\n */\n mergeVertices(precisionPoints = 4) {\n const verticesMap = {};\n const unique = [], changes = [];\n const precision = Math.pow(10, precisionPoints);\n for (let i = 0, il = this.vertices.length; i < il; i++) {\n const v = this.vertices[i];\n const key = `${Math.round(v.x * precision)}_${Math.round(v.y * precision)}_${Math.round(v.z * precision)}`;\n if (verticesMap[key] === void 0) {\n verticesMap[key] = i;\n unique.push(this.vertices[i]);\n changes[i] = unique.length - 1;\n } else {\n changes[i] = changes[verticesMap[key]];\n }\n }\n const faceIndicesToRemove = [];\n for (let i = 0, il = this.faces.length; i < il; i++) {\n const face = this.faces[i];\n face.a = changes[face.a];\n face.b = changes[face.b];\n face.c = changes[face.c];\n const indices = [face.a, face.b, face.c];\n for (let n = 0; n < 3; n++) {\n if (indices[n] === indices[(n + 1) % 3]) {\n faceIndicesToRemove.push(i);\n break;\n }\n }\n }\n for (let i = faceIndicesToRemove.length - 1; i >= 0; i--) {\n const idx = faceIndicesToRemove[i];\n this.faces.splice(idx, 1);\n for (let j = 0, jl = this.faceVertexUvs.length; j < jl; j++) {\n this.faceVertexUvs[j].splice(idx, 1);\n }\n }\n const diff = this.vertices.length - unique.length;\n this.vertices = unique;\n return diff;\n }\n setFromPoints(points) {\n this.vertices = [];\n for (let i = 0, l = points.length; i < l; i++) {\n const point = points[i];\n this.vertices.push(new Vector3(point.x, point.y, point.z || 0));\n }\n return this;\n }\n sortFacesByMaterialIndex() {\n const faces = this.faces;\n const length = faces.length;\n for (let i = 0; i < length; i++) {\n faces[i]._id = i;\n }\n function materialIndexSort(a, b) {\n return a.materialIndex - b.materialIndex;\n }\n faces.sort(materialIndexSort);\n const uvs1 = this.faceVertexUvs[0];\n const uvs2 = this.faceVertexUvs[1];\n let newUvs1, newUvs2;\n if (uvs1 && uvs1.length === length)\n newUvs1 = [];\n if (uvs2 && uvs2.length === length)\n newUvs2 = [];\n for (let i = 0; i < length; i++) {\n const id = faces[i]._id;\n if (newUvs1)\n newUvs1.push(uvs1[id]);\n if (newUvs2)\n newUvs2.push(uvs2[id]);\n }\n if (newUvs1)\n this.faceVertexUvs[0] = newUvs1;\n if (newUvs2)\n this.faceVertexUvs[1] = newUvs2;\n }\n toJSON() {\n const data = {\n metadata: {\n version: 4.5,\n type: \"Geometry\",\n generator: \"Geometry.toJSON\"\n }\n };\n data.uuid = this.uuid;\n data.type = this.type;\n if (this.name !== \"\")\n data.name = this.name;\n if (this.parameters !== void 0) {\n const parameters = this.parameters;\n for (let key in parameters) {\n if (parameters[key] !== void 0)\n data[key] = parameters[key];\n }\n return data;\n }\n const vertices = [];\n for (let i = 0; i < this.vertices.length; i++) {\n const vertex = this.vertices[i];\n vertices.push(vertex.x, vertex.y, vertex.z);\n }\n const faces = [];\n const normals = [];\n const normalsHash = {};\n const colors = [];\n const colorsHash = {};\n const uvs = [];\n const uvsHash = {};\n for (let i = 0; i < this.faces.length; i++) {\n const face = this.faces[i];\n const hasMaterial = true;\n const hasFaceUv = false;\n const hasFaceVertexUv = this.faceVertexUvs[0][i] !== void 0;\n const hasFaceNormal = face.normal.length() > 0;\n const hasFaceVertexNormal = face.vertexNormals.length > 0;\n const hasFaceColor = face.color.r !== 1 || face.color.g !== 1 || face.color.b !== 1;\n const hasFaceVertexColor = face.vertexColors.length > 0;\n let faceType = 0;\n faceType = setBit(faceType, 0, 0);\n faceType = setBit(faceType, 1, hasMaterial);\n faceType = setBit(faceType, 2, hasFaceUv);\n faceType = setBit(faceType, 3, hasFaceVertexUv);\n faceType = setBit(faceType, 4, hasFaceNormal);\n faceType = setBit(faceType, 5, hasFaceVertexNormal);\n faceType = setBit(faceType, 6, hasFaceColor);\n faceType = setBit(faceType, 7, hasFaceVertexColor);\n faces.push(faceType);\n faces.push(face.a, face.b, face.c);\n faces.push(face.materialIndex);\n if (hasFaceVertexUv) {\n const faceVertexUvs = this.faceVertexUvs[0][i];\n faces.push(getUvIndex(faceVertexUvs[0]), getUvIndex(faceVertexUvs[1]), getUvIndex(faceVertexUvs[2]));\n }\n if (hasFaceNormal) {\n faces.push(getNormalIndex(face.normal));\n }\n if (hasFaceVertexNormal) {\n const vertexNormals = face.vertexNormals;\n faces.push(\n getNormalIndex(vertexNormals[0]),\n getNormalIndex(vertexNormals[1]),\n getNormalIndex(vertexNormals[2])\n );\n }\n if (hasFaceColor) {\n faces.push(getColorIndex(face.color));\n }\n if (hasFaceVertexColor) {\n const vertexColors = face.vertexColors;\n faces.push(getColorIndex(vertexColors[0]), getColorIndex(vertexColors[1]), getColorIndex(vertexColors[2]));\n }\n }\n function setBit(value, position, enabled) {\n return enabled ? value | 1 << position : value & ~(1 << position);\n }\n function getNormalIndex(normal) {\n const hash = normal.x.toString() + normal.y.toString() + normal.z.toString();\n if (normalsHash[hash] !== void 0) {\n return normalsHash[hash];\n }\n normalsHash[hash] = normals.length / 3;\n normals.push(normal.x, normal.y, normal.z);\n return normalsHash[hash];\n }\n function getColorIndex(color) {\n const hash = color.r.toString() + color.g.toString() + color.b.toString();\n if (colorsHash[hash] !== void 0) {\n return colorsHash[hash];\n }\n colorsHash[hash] = colors.length;\n colors.push(color.getHex());\n return colorsHash[hash];\n }\n function getUvIndex(uv) {\n const hash = uv.x.toString() + uv.y.toString();\n if (uvsHash[hash] !== void 0) {\n return uvsHash[hash];\n }\n uvsHash[hash] = uvs.length / 2;\n uvs.push(uv.x, uv.y);\n return uvsHash[hash];\n }\n data.data = {};\n data.data.vertices = vertices;\n data.data.normals = normals;\n if (colors.length > 0)\n data.data.colors = colors;\n if (uvs.length > 0)\n data.data.uvs = [uvs];\n data.data.faces = faces;\n return data;\n }\n clone() {\n return new Geometry2().copy(this);\n }\n copy(source) {\n this.vertices = [];\n this.colors = [];\n this.faces = [];\n this.faceVertexUvs = [[]];\n this.morphTargets = [];\n this.morphNormals = [];\n this.skinWeights = [];\n this.skinIndices = [];\n this.lineDistances = [];\n this.boundingBox = null;\n this.boundingSphere = null;\n this.name = source.name;\n const vertices = source.vertices;\n for (let i = 0, il = vertices.length; i < il; i++) {\n this.vertices.push(vertices[i].clone());\n }\n const colors = source.colors;\n for (let i = 0, il = colors.length; i < il; i++) {\n this.colors.push(colors[i].clone());\n }\n const faces = source.faces;\n for (let i = 0, il = faces.length; i < il; i++) {\n this.faces.push(faces[i].clone());\n }\n for (let i = 0, il = source.faceVertexUvs.length; i < il; i++) {\n const faceVertexUvs = source.faceVertexUvs[i];\n if (this.faceVertexUvs[i] === void 0) {\n this.faceVertexUvs[i] = [];\n }\n for (let j = 0, jl = faceVertexUvs.length; j < jl; j++) {\n const uvs = faceVertexUvs[j], uvsCopy = [];\n for (let k = 0, kl = uvs.length; k < kl; k++) {\n const uv = uvs[k];\n uvsCopy.push(uv.clone());\n }\n this.faceVertexUvs[i].push(uvsCopy);\n }\n }\n const morphTargets = source.morphTargets;\n for (let i = 0, il = morphTargets.length; i < il; i++) {\n const morphTarget = {};\n morphTarget.name = morphTargets[i].name;\n if (morphTargets[i].vertices !== void 0) {\n morphTarget.vertices = [];\n for (let j = 0, jl = morphTargets[i].vertices.length; j < jl; j++) {\n morphTarget.vertices.push(morphTargets[i].vertices[j].clone());\n }\n }\n if (morphTargets[i].normals !== void 0) {\n morphTarget.normals = [];\n for (let j = 0, jl = morphTargets[i].normals.length; j < jl; j++) {\n morphTarget.normals.push(morphTargets[i].normals[j].clone());\n }\n }\n this.morphTargets.push(morphTarget);\n }\n const morphNormals = source.morphNormals;\n for (let i = 0, il = morphNormals.length; i < il; i++) {\n const morphNormal = {};\n if (morphNormals[i].vertexNormals !== void 0) {\n morphNormal.vertexNormals = [];\n for (let j = 0, jl = morphNormals[i].vertexNormals.length; j < jl; j++) {\n const srcVertexNormal = morphNormals[i].vertexNormals[j];\n const destVertexNormal = {};\n destVertexNormal.a = srcVertexNormal.a.clone();\n destVertexNormal.b = srcVertexNormal.b.clone();\n destVertexNormal.c = srcVertexNormal.c.clone();\n morphNormal.vertexNormals.push(destVertexNormal);\n }\n }\n if (morphNormals[i].faceNormals !== void 0) {\n morphNormal.faceNormals = [];\n for (let j = 0, jl = morphNormals[i].faceNormals.length; j < jl; j++) {\n morphNormal.faceNormals.push(morphNormals[i].faceNormals[j].clone());\n }\n }\n this.morphNormals.push(morphNormal);\n }\n const skinWeights = source.skinWeights;\n for (let i = 0, il = skinWeights.length; i < il; i++) {\n this.skinWeights.push(skinWeights[i].clone());\n }\n const skinIndices = source.skinIndices;\n for (let i = 0, il = skinIndices.length; i < il; i++) {\n this.skinIndices.push(skinIndices[i].clone());\n }\n const lineDistances = source.lineDistances;\n for (let i = 0, il = lineDistances.length; i < il; i++) {\n this.lineDistances.push(lineDistances[i]);\n }\n const boundingBox = source.boundingBox;\n if (boundingBox !== null) {\n this.boundingBox = boundingBox.clone();\n }\n const boundingSphere = source.boundingSphere;\n if (boundingSphere !== null) {\n this.boundingSphere = boundingSphere.clone();\n }\n this.elementsNeedUpdate = source.elementsNeedUpdate;\n this.verticesNeedUpdate = source.verticesNeedUpdate;\n this.uvsNeedUpdate = source.uvsNeedUpdate;\n this.normalsNeedUpdate = source.normalsNeedUpdate;\n this.colorsNeedUpdate = source.colorsNeedUpdate;\n this.lineDistancesNeedUpdate = source.lineDistancesNeedUpdate;\n this.groupsNeedUpdate = source.groupsNeedUpdate;\n return this;\n }\n toBufferGeometry() {\n const geometry = new DirectGeometry().fromGeometry(this);\n const buffergeometry = new BufferGeometry();\n const positions = new Float32Array(geometry.vertices.length * 3);\n buffergeometry.setAttribute(\"position\", new BufferAttribute(positions, 3).copyVector3sArray(geometry.vertices));\n if (geometry.normals.length > 0) {\n const normals = new Float32Array(geometry.normals.length * 3);\n buffergeometry.setAttribute(\"normal\", new BufferAttribute(normals, 3).copyVector3sArray(geometry.normals));\n }\n if (geometry.colors.length > 0) {\n const colors = new Float32Array(geometry.colors.length * 3);\n buffergeometry.setAttribute(\"color\", new BufferAttribute(colors, 3).copyColorsArray(geometry.colors));\n }\n if (geometry.uvs.length > 0) {\n const uvs = new Float32Array(geometry.uvs.length * 2);\n buffergeometry.setAttribute(\"uv\", new BufferAttribute(uvs, 2).copyVector2sArray(geometry.uvs));\n }\n if (geometry.uvs2.length > 0) {\n const uvs2 = new Float32Array(geometry.uvs2.length * 2);\n buffergeometry.setAttribute(\"uv2\", new BufferAttribute(uvs2, 2).copyVector2sArray(geometry.uvs2));\n }\n buffergeometry.groups = geometry.groups;\n for (let name in geometry.morphTargets) {\n const array = [];\n const morphTargets = geometry.morphTargets[name];\n for (let i = 0, l = morphTargets.length; i < l; i++) {\n const morphTarget = morphTargets[i];\n const attribute = new Float32BufferAttribute(morphTarget.data.length * 3, 3);\n attribute.name = morphTarget.name;\n array.push(attribute.copyVector3sArray(morphTarget.data));\n }\n buffergeometry.morphAttributes[name] = array;\n }\n if (geometry.skinIndices.length > 0) {\n const skinIndices = new Float32BufferAttribute(geometry.skinIndices.length * 4, 4);\n buffergeometry.setAttribute(\"skinIndex\", skinIndices.copyVector4sArray(geometry.skinIndices));\n }\n if (geometry.skinWeights.length > 0) {\n const skinWeights = new Float32BufferAttribute(geometry.skinWeights.length * 4, 4);\n buffergeometry.setAttribute(\"skinWeight\", skinWeights.copyVector4sArray(geometry.skinWeights));\n }\n if (geometry.boundingSphere !== null) {\n buffergeometry.boundingSphere = geometry.boundingSphere.clone();\n }\n if (geometry.boundingBox !== null) {\n buffergeometry.boundingBox = geometry.boundingBox.clone();\n }\n return buffergeometry;\n }\n computeTangents() {\n console.error(\"THREE.Geometry: .computeTangents() has been removed.\");\n }\n computeLineDistances() {\n console.error(\n \"THREE.Geometry: .computeLineDistances() has been removed. Use THREE.Line.computeLineDistances() instead.\"\n );\n }\n applyMatrix(matrix) {\n console.warn(\"THREE.Geometry: .applyMatrix() has been renamed to .applyMatrix4().\");\n return this.applyMatrix4(matrix);\n }\n dispose() {\n this.dispatchEvent({ type: \"dispose\" });\n }\n }\n return Geometry2;\n})();\nclass DirectGeometry {\n constructor() {\n this.vertices = [];\n this.normals = [];\n this.colors = [];\n this.uvs = [];\n this.uvs2 = [];\n this.groups = [];\n this.morphTargets = {};\n this.skinWeights = [];\n this.skinIndices = [];\n this.boundingBox = null;\n this.boundingSphere = null;\n this.verticesNeedUpdate = false;\n this.normalsNeedUpdate = false;\n this.colorsNeedUpdate = false;\n this.uvsNeedUpdate = false;\n this.groupsNeedUpdate = false;\n }\n computeGroups(geometry) {\n const groups = [];\n let group, i;\n let materialIndex = void 0;\n const faces = geometry.faces;\n for (i = 0; i < faces.length; i++) {\n const face = faces[i];\n if (face.materialIndex !== materialIndex) {\n materialIndex = face.materialIndex;\n if (group !== void 0) {\n group.count = i * 3 - group.start;\n groups.push(group);\n }\n group = {\n start: i * 3,\n materialIndex\n };\n }\n }\n if (group !== void 0) {\n group.count = i * 3 - group.start;\n groups.push(group);\n }\n this.groups = groups;\n }\n fromGeometry(geometry) {\n const faces = geometry.faces;\n const vertices = geometry.vertices;\n const faceVertexUvs = geometry.faceVertexUvs;\n const hasFaceVertexUv = faceVertexUvs[0] && faceVertexUvs[0].length > 0;\n const hasFaceVertexUv2 = faceVertexUvs[1] && faceVertexUvs[1].length > 0;\n const morphTargets = geometry.morphTargets;\n const morphTargetsLength = morphTargets.length;\n let morphTargetsPosition;\n if (morphTargetsLength > 0) {\n morphTargetsPosition = [];\n for (let i = 0; i < morphTargetsLength; i++) {\n morphTargetsPosition[i] = {\n name: morphTargets[i].name,\n data: []\n };\n }\n this.morphTargets.position = morphTargetsPosition;\n }\n const morphNormals = geometry.morphNormals;\n const morphNormalsLength = morphNormals.length;\n let morphTargetsNormal;\n if (morphNormalsLength > 0) {\n morphTargetsNormal = [];\n for (let i = 0; i < morphNormalsLength; i++) {\n morphTargetsNormal[i] = {\n name: morphNormals[i].name,\n data: []\n };\n }\n this.morphTargets.normal = morphTargetsNormal;\n }\n const skinIndices = geometry.skinIndices;\n const skinWeights = geometry.skinWeights;\n const hasSkinIndices = skinIndices.length === vertices.length;\n const hasSkinWeights = skinWeights.length === vertices.length;\n if (vertices.length > 0 && faces.length === 0) {\n console.error(\"THREE.DirectGeometry: Faceless geometries are not supported.\");\n }\n for (let i = 0; i < faces.length; i++) {\n const face = faces[i];\n this.vertices.push(vertices[face.a], vertices[face.b], vertices[face.c]);\n const vertexNormals = face.vertexNormals;\n if (vertexNormals.length === 3) {\n this.normals.push(vertexNormals[0], vertexNormals[1], vertexNormals[2]);\n } else {\n const normal = face.normal;\n this.normals.push(normal, normal, normal);\n }\n const vertexColors = face.vertexColors;\n if (vertexColors.length === 3) {\n this.colors.push(vertexColors[0], vertexColors[1], vertexColors[2]);\n } else {\n const color = face.color;\n this.colors.push(color, color, color);\n }\n if (hasFaceVertexUv === true) {\n const vertexUvs = faceVertexUvs[0][i];\n if (vertexUvs !== void 0) {\n this.uvs.push(vertexUvs[0], vertexUvs[1], vertexUvs[2]);\n } else {\n console.warn(\"THREE.DirectGeometry.fromGeometry(): Undefined vertexUv \", i);\n this.uvs.push(new Vector2(), new Vector2(), new Vector2());\n }\n }\n if (hasFaceVertexUv2 === true) {\n const vertexUvs = faceVertexUvs[1][i];\n if (vertexUvs !== void 0) {\n this.uvs2.push(vertexUvs[0], vertexUvs[1], vertexUvs[2]);\n } else {\n console.warn(\"THREE.DirectGeometry.fromGeometry(): Undefined vertexUv2 \", i);\n this.uvs2.push(new Vector2(), new Vector2(), new Vector2());\n }\n }\n for (let j = 0; j < morphTargetsLength; j++) {\n const morphTarget = morphTargets[j].vertices;\n morphTargetsPosition[j].data.push(morphTarget[face.a], morphTarget[face.b], morphTarget[face.c]);\n }\n for (let j = 0; j < morphNormalsLength; j++) {\n const morphNormal = morphNormals[j].vertexNormals[i];\n morphTargetsNormal[j].data.push(morphNormal.a, morphNormal.b, morphNormal.c);\n }\n if (hasSkinIndices) {\n this.skinIndices.push(skinIndices[face.a], skinIndices[face.b], skinIndices[face.c]);\n }\n if (hasSkinWeights) {\n this.skinWeights.push(skinWeights[face.a], skinWeights[face.b], skinWeights[face.c]);\n }\n }\n this.computeGroups(geometry);\n this.verticesNeedUpdate = geometry.verticesNeedUpdate;\n this.normalsNeedUpdate = geometry.normalsNeedUpdate;\n this.colorsNeedUpdate = geometry.colorsNeedUpdate;\n this.uvsNeedUpdate = geometry.uvsNeedUpdate;\n this.groupsNeedUpdate = geometry.groupsNeedUpdate;\n if (geometry.boundingSphere !== null) {\n this.boundingSphere = geometry.boundingSphere.clone();\n }\n if (geometry.boundingBox !== null) {\n this.boundingBox = geometry.boundingBox.clone();\n }\n return this;\n }\n}\nclass Face3 {\n constructor(a, b, c, normal, color, materialIndex = 0) {\n this.a = a;\n this.b = b;\n this.c = c;\n this.normal = normal && normal.isVector3 ? normal : new Vector3();\n this.vertexNormals = Array.isArray(normal) ? normal : [];\n this.color = color && color.isColor ? color : new Color();\n this.vertexColors = Array.isArray(color) ? color : [];\n this.materialIndex = materialIndex;\n }\n clone() {\n return new this.constructor().copy(this);\n }\n copy(source) {\n this.a = source.a;\n this.b = source.b;\n this.c = source.c;\n this.normal.copy(source.normal);\n this.color.copy(source.color);\n this.materialIndex = source.materialIndex;\n for (let i = 0, il = source.vertexNormals.length; i < il; i++) {\n this.vertexNormals[i] = source.vertexNormals[i].clone();\n }\n for (let i = 0, il = source.vertexColors.length; i < il; i++) {\n this.vertexColors[i] = source.vertexColors[i].clone();\n }\n return this;\n }\n}\nexport {\n Face3,\n Geometry\n};\n//# sourceMappingURL=Geometry.js.map\n","let generated;\nconst MeshoptDecoder = () => {\n if (generated)\n return generated;\n const wasm_base = \"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\";\n const wasm_simd = \"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\";\n const detector = new Uint8Array([\n 0,\n 97,\n 115,\n 109,\n 1,\n 0,\n 0,\n 0,\n 1,\n 4,\n 1,\n 96,\n 0,\n 0,\n 3,\n 3,\n 2,\n 0,\n 0,\n 5,\n 3,\n 1,\n 0,\n 1,\n 12,\n 1,\n 0,\n 10,\n 22,\n 2,\n 12,\n 0,\n 65,\n 0,\n 65,\n 0,\n 65,\n 0,\n 252,\n 10,\n 0,\n 0,\n 11,\n 7,\n 0,\n 65,\n 0,\n 253,\n 15,\n 26,\n 11\n ]);\n const wasmpack = new Uint8Array([\n 32,\n 0,\n 65,\n 253,\n 3,\n 1,\n 2,\n 34,\n 4,\n 106,\n 6,\n 5,\n 11,\n 8,\n 7,\n 20,\n 13,\n 33,\n 12,\n 16,\n 128,\n 9,\n 116,\n 64,\n 19,\n 113,\n 127,\n 15,\n 10,\n 21,\n 22,\n 14,\n 255,\n 66,\n 24,\n 54,\n 136,\n 107,\n 18,\n 23,\n 192,\n 26,\n 114,\n 118,\n 132,\n 17,\n 77,\n 101,\n 130,\n 144,\n 27,\n 87,\n 131,\n 44,\n 45,\n 74,\n 156,\n 154,\n 70,\n 167\n ]);\n if (typeof WebAssembly !== \"object\") {\n return {\n supported: false\n };\n }\n let wasm = wasm_base;\n if (WebAssembly.validate(detector)) {\n wasm = wasm_simd;\n }\n let instance;\n const promise = WebAssembly.instantiate(unpack(wasm), {}).then((result) => {\n instance = result.instance;\n instance.exports.__wasm_call_ctors();\n });\n function unpack(data) {\n const result = new Uint8Array(data.length);\n for (let i = 0; i < data.length; ++i) {\n const ch = data.charCodeAt(i);\n result[i] = ch > 96 ? ch - 71 : ch > 64 ? ch - 65 : ch > 47 ? ch + 4 : ch > 46 ? 63 : 62;\n }\n let write = 0;\n for (let i = 0; i < data.length; ++i) {\n result[write++] = result[i] < 60 ? wasmpack[result[i]] : (result[i] - 60) * 64 + result[++i];\n }\n return result.buffer.slice(0, write);\n }\n function decode(fun, target, count, size, source, filter) {\n const sbrk = instance.exports.sbrk;\n const count4 = count + 3 & ~3;\n const tp = sbrk(count4 * size);\n const sp = sbrk(source.length);\n const heap = new Uint8Array(instance.exports.memory.buffer);\n heap.set(source, sp);\n const res = fun(tp, count, size, sp, source.length);\n if (res === 0 && filter) {\n filter(tp, count4, size);\n }\n target.set(heap.subarray(tp, tp + count * size));\n sbrk(tp - sbrk(0));\n if (res !== 0) {\n throw new Error(`Malformed buffer data: ${res}`);\n }\n }\n const filters = {\n // legacy index-based enums for glTF\n 0: \"\",\n 1: \"meshopt_decodeFilterOct\",\n 2: \"meshopt_decodeFilterQuat\",\n 3: \"meshopt_decodeFilterExp\",\n // string-based enums for glTF\n NONE: \"\",\n OCTAHEDRAL: \"meshopt_decodeFilterOct\",\n QUATERNION: \"meshopt_decodeFilterQuat\",\n EXPONENTIAL: \"meshopt_decodeFilterExp\"\n };\n const decoders = {\n // legacy index-based enums for glTF\n 0: \"meshopt_decodeVertexBuffer\",\n 1: \"meshopt_decodeIndexBuffer\",\n 2: \"meshopt_decodeIndexSequence\",\n // string-based enums for glTF\n ATTRIBUTES: \"meshopt_decodeVertexBuffer\",\n TRIANGLES: \"meshopt_decodeIndexBuffer\",\n INDICES: \"meshopt_decodeIndexSequence\"\n };\n generated = {\n ready: promise,\n supported: true,\n decodeVertexBuffer(target, count, size, source, filter) {\n decode(\n instance.exports.meshopt_decodeVertexBuffer,\n target,\n count,\n size,\n source,\n instance.exports[filters[filter]]\n );\n },\n decodeIndexBuffer(target, count, size, source) {\n decode(instance.exports.meshopt_decodeIndexBuffer, target, count, size, source);\n },\n decodeIndexSequence(target, count, size, source) {\n decode(instance.exports.meshopt_decodeIndexSequence, target, count, size, source);\n },\n decodeGltfBuffer(target, count, size, source, mode, filter) {\n decode(\n instance.exports[decoders[mode]],\n target,\n count,\n size,\n source,\n instance.exports[filters[filter]]\n );\n }\n };\n return generated;\n};\nexport {\n MeshoptDecoder\n};\n//# sourceMappingURL=MeshoptDecoder.js.map\n"],"x_google_ignoreList":[32],"mappings":"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I;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,MAAM;GACN,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,MAAM;GACN,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,MAAM;GACN,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,MAAM;GACN,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,MAAM;GACN,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,KAAK;GACL,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,MAAM;GACN,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,MAAM;GACN,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,KAAK;GACL,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,MAAM;GACN,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAAO;GACP,OAA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Ac;GAC5C,IAAI,KAAK,cACP,SAAS,aAAa,OAAO,EAAE,cAAc;GAC/C,IAAI,KAAK,QAAQ,IAAI,cACnB,QAAQ,KACN,oHACF;EACJ;EACA,KAAK,KAAK,UAAU;CACtB;AACF;AACA,IAAM,YAAY,IAAI,WAAW;CAC/B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF,CAAC;AACD,IAAM,WAAW,IAAI,WAAW;CAC9B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;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;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC;GACX;IAAC;IAAG;IAAG;IAAG;GAAC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EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;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pB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GAEA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,MAAM,iBAAiB;GACrB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,MAAM;EACN,OAAO,QAAQ;EACf,WAAW,aAAa,KAAK,IAAI,KAAK,IAAI,GAAG,KAAK,MAAM,QAAQ,KAAK,EAAE,IAAI;EAC3E,SAAS,WAAW,KAAK,IAAI,OAAO;EACpC,MAAM,QAAQ,KAAK,IAAI,OAAO;EAC9B,OAAO,SAAS,KAAK,IAAI,OAAO;EAChC,SAAS,WAAW,KAAK,IAAI,OAAO;EACpC,MAAM,aAAa;EACnB,QAAQ,UAAU,KAAK,IAAI,OAA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;IAAG;IAClD;KAAE,MAAM;KAAkB,MAAM;KAAU,OAAO;IAAE;IACnD;KAAE,MAAM;KAAgB,MAAM;KAAS,OAAO;IAAa;IAC3D;KAAE,MAAM;KAAkB,MAAM;KAAS,OAAO;IAAE;IAClD;KAAE,MAAM;KAAiB,MAAM;KAAS,OAAO,aAAa,SAAS;IAAE;GACzE,CAAC;GACD,EAAE,SAAS,EAAE,OAAO,OAAO,YAAY;EACzC;EACA,OAAO;CACT;CACA,IAAI,OAAO;EAAE,OAAO;EAAgB,MAAM;CAAc;CACxD,IAAI,qBAAqB;EACvB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,IAAI,sBAAsB;EACxB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,IAAI,oBAAoB;EACtB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,IAAI,gBAAgB;EAClB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;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KAAK;EAEL,KAAK;EAEL,KAAK;EAEL,KAAK;EAEL,KAAK;CAEP;CACA,IAAI,mBAAmB;EACrB,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,OAAO;EACP,MAAM;EACN,MAAM;EACN,OAAO;EACP,OAAO;EACP,OAAO;EACP,MAAM;EACN,MAAM;EACN,MAAM;EACN,OAAO;EACP,MAAM;EACN,OAAO;EACP,MAAM;EACN,OAAO;EACP,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,OAAO;EACP,MAAM;EACN,MAAM;EACN,OAAO;EACP,MAAM;EACN,MAAM;EACN,OAAO;EACP,MAAM;EACN,OAAO;EACP,OAAO;EACP,MAAM;EACN,OAAO;EACP,MAAM;EACN,MAAM;EACN,OAAO;EACP,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EACN,MAAM;EA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K,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;EAEpC,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;CACtC;CACA,SAAS,MAAM,MAAM;EACnB,KAAK,OAAO;EACZ,KAAK,QAAQ,CAAC;EACd,KAAK,cAAc;CACrB;CACA,SAAS,aAAa,YAAY,WAAW,aAAa;EACxD,KAAK,cAAc;EACnB,KAAK,aAAa;EAClB,KAAK,YAAY;CACnB;CACA,SAAS,eAAe,aAAa,YAAY,UAAU;EACzD,KAAK,cAAc;EACnB,KAAK,YAAY;EACjB,KAAK,SAAS,CAAC;EACf,KAAK,aAAa;EAClB,KAAK,WAAW;CAClB;CACA,SAAS,cAAc,SAAS,cAAc;EAC5C,KAAK,UAAU;EACf,KAAK,QAAQ;EACb,KAAK,SAAS,QAAQ;EACtB,KAAK,UAAU,QAAQ;EACvB,KAAK,YAAY,QAAQ,MAAM,GAAG,YAAY;EAC9C,KAAK,YAAY,QAAQ,MAAM,eAAe,CAAC;CACjD;CACA,SAAS,MAAM,SAAS;EACtB,KAAK,UAAU;EACf,KAAK,cAAc,CAAC;CACtB;CACA,SAAS,qBAAqB,QAAQ;EACpC,IAAI,WAAW;EACf,IAAI,aAAa;GACf;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,WAAW,QAAQ,SAAS,SAAS;GACnC,OAAO,eAAe,SAAS,QAAQ,SAAS,EAC9C,OAAO,IAAI,MAAM,OAAO,EAC1B,CAAC;EACH,CAAC;EACD,IAAI,CAAC,CAAC,QACJ,WAAW,QAAQ,SAAS,SAAS;GACnC,IAAI,QAAQ,OAAO;GACnB,IAAI,OAAO,UAAU,YACnB,SAAS,OAAO,SAAS,UAAU,KAAK;EAE5C,CAAC;EAUH;GAPE;GACA;GACA;GACA;GACA;GACA;EAEkB,EAAE,QAAQ,SAAS,SAAS;GAC9C,SAAS,OAAO,SAAS,UAAU,SAAS,oBAAoB;EAClE,CAAC;CACH;CACA,SAAS,UAAU,QAAQ;EACzB,KAAK,SAAS,CAAC;EACf,KAAK,qBAAqB,CAAC;EAC3B,KAAK,kBAAkB,CAAC;EACxB,KAAK,SAAS,CAAC;EACf,KAAK,sBAAsB,CAAC;EAC5B,qBAAqB,KAAK,MAAM,MAAM;CACxC;CACA,MAAM,UAAU,WAAW,SAAS,KAAK,OAAO;EAC9C,KAAK,MAAM,OAAO;EAClB,KAAK,cAAc;GAAE;GAAK,OAAO,KAAK,MAAM;EAAK;EACjD,OAAO,KAAK;CACd;CACA,MAAM,UAAU,WAAW,SAAS,SAAS;EAC3C,OAAO,KAAK,MAAM,YAAY;CAChC;CACA,UAAU,UAAU,eAAe,SAAS,OAAO;EACjD,OAAO,SAAS,KAAK,QAAQ,KAAK,OAAO;CAC3C;CACA,UAAU,UAAU,aAAa,SAAS,MAAM;EAC9C,IAAI,WAAW;EACf,IAAI,SAAS;EACb,IAAI,QAAQ,KAAK,IAAI,SAAS,KAAK;GACjC,OAAO,SAAS,IAAI,IAAI,MAAM,UAAU,IAAI,MAAM,CAAC,EAAE,OAAO,MAAM,CAAC;EACrE,CAAC;EACD,IAAI,gBAAgB,SAAS,KAAK;GAChC,OAAO,OAAO,QAAQ,YAAY,IAAI,eAAe,MAAM;EAC7D;EACA,IAAI,MAAM,MAAM,aAAa,GAC3B,OAAO;GACL,MAAM;GACN,QAAQ,MAAM,OAAO,aAAa;EACpC;EAEF,KAAK,SAAS,cAAc,CAC1B,MAAM,OAAO,SAAS,IAAI;GACxB,OAAO,CAAC,cAAc,EAAE;EAC1B,CAAC,CACH,CAAC;CACH;CACA,UAAU,UAAU,eAAe,SAAS,YAAY,QAAQ,QAAQ,QAAQ;EAC9E,SAAS,WAAW,OAAO,SAAS,KAAK,OAAO;EAChD,IAAI,cAAc,OAAO,MAAM,SAAS,OAAO;GAC7C,OAAO,iBAAiB;EAC1B,CAAC;EACD,IAAI,CAAC,MAAM,UAAU,KAAK,KAAK,aAAa,UAAU,KAAK,aAAa;GACtE,IAAI,WAAW,KAAK,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,YAAY,MAAM,EAAE,OAAO,MAAM,CAAC;GACxF,IAAI,CAAC,QACH,KAAK,SAAS,gBAAgB;IAAC;IAAY;IAAQ;GAAM,CAAC;GAE5D,OAAO,CAAC,UAAU,MAAM;EAC1B,OACE,OAAO,EAAE,MAAM,8CAA8C;CAEjE;CACA,UAAU,UAAU,eAAe,SAAS,OAAO,OAAO,QAAQ;EAChE,IAAI,CAAC,MAAM,KAAK,KAAK,KAAK,aAAa,KAAK,KAAK,iBAAiB,OAAO;GACvE,IAAI,WAAW,KAAK,OAAO,OAAO,OAAO,GAAG,KAAK;GACjD,IAAI,CAAC,QACH,KAAK,SAAS,gBAAgB,CAAC,OAAO,KAAK,CAAC;GAE9C,OAAO,CAAC,SAAS,IAAI,KAAK;EAC5B,OACE,OAAO,EAAE,MAAM,wCAAwC;CAE3D;CACA,UAAU,UAAU,cAAc,SAAS,YAAY,QAAQ,QAAQ;EACrE,SAAS,CAAC,MAAM,MAAM,IAAI,SAAS,KAAK,OAAO;EAC/C,IAAI,SAAS,KAAK,OAAO,OAAO,YAAY,MAAM;EAClD,IAAI,CAAC,QACH,KAAK,SAAS,eAAe;GAAC;GAAQ;GAAY;EAAM,CAAC;EAE3D,OAAO;CACT;CACA,UAAU,UAAU,cAAc,SAAS,OAAO,QAAQ;EACxD,IAAI,CAAC,MAAM,KAAK,KAAK,KAAK,aAAa,KAAK,GAAG;GAC7C,IAAI,QAAQ,KAAK,OAAO,OAAO,OAAO,CAAC;GACvC,IAAI,CAAC,QACH,KAAK,SAAS,eAAe,CAAC,OAAO,KAAK,CAAC;GAE7C,OAAO;EACT,OACE,OAAO,EAAE,MAAM,oCAAoC;CAEvD;CACA,UAAU,UAAU,cAAc,SAAS,QAAQ,OAAO,QAAQ;EAIhE,IAHgB,OAAO,MAAM,SAAS,OAAO;GAC3C,OAAO,iBAAiB;EAC1B,CACY,GAAG;GACb,KAAK,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,MAAM,CAAC;GAC/D,IAAI,CAAC,QACH,KAAK,SAAS,eAAe,CAAC,QAAQ,KAAK,CAAC;GAE9C,OAAO;EACT,OACE,OAAO,EAAE,MAAM,iCAAiC;CAEpD;CACA,UAAU,UAAU,mBAAmB,SAAS,YAAY,WAAW,UAAU;EAC/E,KAAK,OAAO,SAAS,UAAU,SAAS,OAAO,eAAe;GAC5D,IAAI,kBAAkB,CAAC,OAAO,aAAa;GAC3C,IAAI,mBAAmB,cAAc,QAAQ,UAAU,MAAM,MAAM,eAAe,MAAM;GACxF,IAAI,iBAAiB,CAAC,OAAO,aAAa;GAC1C,IAAI,kBAAkB;IACpB,IAAI,gBAAgB,SAAS,MAAM,MAAM,cAAc;IACvD,MAAM,SAAS,YAAY,aAAa;GAC1C;EACF,CAAC;EACD,KAAK,oBAAoB,KAAK,UAAU;CAC1C;CACA,MAAM,UAAU,YAAY,SAAS,cAAc;EACjD,IAAI,OAAO,iBAAiB,YAC1B,OAAO,KAAK,YAAY,KAAK,YAAY,IAAI;OAE7C,OAAO,EAAE,MAAM,cAAc,KAAK,UAAU,kBAAkB;CAElE;CACA,MAAM,UAAU,cAAc,SAAS,QAAQ;EAC7C,KAAK,YAAY,OAAO,QAAQ,CAAC;CACnC;CACA,cAAc,UAAU,kBAAkB,SAAS,OAAO;EACxD,KAAK,QAAQ;EACb,KAAK,UAAU,KAAK,QAAQ;EAC5B,KAAK,YAAY,KAAK,QAAQ,MAAM,GAAG,KAAK;EAC5C,KAAK,YAAY,KAAK,QAAQ,MAAM,QAAQ,CAAC;CAC/C;CACA,cAAc,UAAU,MAAM,SAAS,QAAQ;EAC7C,QAAQ,MAAR;GACE,KAAK,WAAW,GACd,OAAO,KAAK;GACd,KAAM,SAAS,KAAK,KAAK,IAAI,MAAM,KAAK,KAAK,UAAU,QACrD,OAAO,KAAK,UAAU,MAAM,MAAM,EAAE;GACtC,KAAM,SAAS,KAAK,UAAU,KAAK,UAAU,QAC3C,OAAO,KAAK,UAAU,SAAS;GACjC,SACE,OAAO;EACX;CACF;CACA,UAAU,UAAU,cAAc,SAAS,OAAO;EAChD,IAAI,iBAAiB,cACnB,OAAO,KAAK,eAAe,KAAK,EAAE,IAAI,SAAS,OAAO;GACpD,OAAO,MAAM;EACf,CAAC,EAAE,KAAK,EAAE;CAEd;CACA,UAAU,UAAU,UAAU,WAAW;EACvC,OAAO,KAAK,OAAO,IAAI,SAAS,OAAO;GACrC,OAAO,MAAM;EACf,CAAC,EAAE,KAAK,EAAE;CACZ;CACA,UAAU,UAAU,aAAa,SAAS,aAAa;EACrD,IAAI,UAAU,KAAK,mBAAmB;EACtC,OAAO,CAAC,CAAC,UAAU,UAAU;CAC/B;CACA,UAAU,UAAU,KAAK,SAAS,WAAW,cAAc;EACzD,IAAI,QAAQ,KAAK,OAAO;EACxB,IAAI,CAAC,CAAC,OACJ,OAAO,MAAM,UAAU,YAAY;OAEnC,OAAO;CAEX;CACA,UAAU,UAAU,WAAW,SAAS,WAAW,MAAM;EACvD,IAAI,WAAW;EACf,IAAI,QAAQ,KAAK,OAAO;EACxB,IAAI,iBAAiB,OACnB,MAAM,YAAY,QAAQ,SAAS,YAAY;GAC7C,WAAW,MAAM,UAAU,QAAQ,CAAC,CAAC;EACvC,CAAC;CAEL;CACA,UAAU,UAAU,yBAAyB,SAAS,aAAa,mBAAmB,iBAAiB;EACrG,IAAI,CAAC,CAAC,KAAK,WAAW,WAAW,GAC/B,OAAO,EACL,MAAM,mBAAmB,cAAc,2BACzC;EAEF,IAAI,OAAO,sBAAsB,YAC/B,OAAO,EACL,MAAM,+BACR;EAEF,IAAI,OAAO,oBAAoB,YAC7B,OAAO,EACL,MAAM,6BACR;EAEF,IAAI,kBAAkB,IAAI,eAAe,aAAa,mBAAmB,eAAe;EACxF,KAAK,mBAAmB,eAAe;EACvC,KAAK,gBAAgB,KAAK,eAAe;EACzC,OAAO;CACT;CACA,UAAU,UAAU,iBAAiB,SAAS,OAAO;EACnD,IAAI,WAAW,MAAM,aAAa,MAAM;EACxC,OAAO,CAAC,EAAE,OAAO,KAAK,OAAO,MAAM,MAAM,YAAY,QAAQ,CAAC;CAChE;CACA,UAAU,UAAU,mBAAmB,SAAS,aAAa;EAC3D,IAAI,UAAU,KAAK,WAAW,WAAW;EACzC,IAAI,CAAC,CAAC,SACJ,OAAO,QAAQ;OAEf,OAAO,EAAE,MAAM,sBAAsB,cAAc,uBAAuB;CAE9E;CACA,UAAU,UAAU,sBAAsB,WAAW;EACnD,IAAI,qBAAqB,KAAK;EAC9B,KAAK,IAAI,eAAe,oBACtB,IAAI,mBAAmB,eAAe,WAAW,GAAG;GAClD,IAAI,UAAU,mBAAmB;GACjC,QAAQ,SAAS,CAAC;EACpB;CAEJ;CACA,UAAU,UAAU,uBAAuB,WAAW;EACpD,KAAK,oBAAoB;EACzB,IAAI,QAAQ,KAAK,OAAO,IAAI,SAAS,OAAO;GAC1C,OAAO,MAAM;EACf,CAAC;EACD,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;GACrC,IAAI,gBAAgB,IAAI,cAAc,OAAO,CAAC;GAC9C,KAAK,gBAAgB,aAAa;EACpC;EACA,KAAK,SAAS,wBAAwB,CAAC,KAAK,kBAAkB,CAAC;CACjE;CACA,UAAU,UAAU,eAAe,SAAS,QAAQ,aAAa;EAC/D,IAAI,aAAa,KAAK,WAAW,WAAW,EAAE,UAAU;EACxD,IAAI,QAAQ,IAAI,aAAa,YAAY,QAAQ,WAAW;EAC5D,IAAI,SAAS,KAAK,WAAW,WAAW,EAAE;EAC1C,MAAM,UAAU,cAAc,MAAM,OAAO;EAC3C,OAAO,KAAK,KAAK;EACjB,KAAK,WAAW,WAAW,EAAE,YAAY;EACzC,OAAO;CACT;CACA,UAAU,UAAU,kBAAkB,SAAS,eAAe;EAC5D,IAAI,WAAW;EACf,IAAI,QAAQ,cAAc;EAC1B,KAAK,gBAAgB,QAAQ,SAAS,gBAAgB;GACpD,IAAI,cAAc,eAAe;GACjC,IAAI,YAAY,SAAS,WAAW,WAAW,EAAE;GACjD,IAAI,CAAC,aAAa,eAAe,WAAW,aAAa,GAAG;IAC1D,YAAY,IAAI,aAAa,OAAO,MAAM,WAAW;IACrD,SAAS,WAAW,WAAW,EAAE,YAAY;IAC7C,SAAS,SAAS,gBAAgB,CAAC,aAAa,KAAK,CAAC;GACxD;GACA,IAAI,CAAC,CAAC,aAAa,eAAe,SAAS,aAAa,GAAG;IACzD,IAAI,SAAS,QAAQ,UAAU,aAAa;IAC5C,IAAI,QAAQ,SAAS,aAAa,QAAQ,WAAW;IACrD,SAAS,SAAS,cAAc,CAAC,aAAa,KAAK,CAAC;GACtD;EACF,CAAC;CACH;CACA,UAAU,UAAU,WAAW,SAAS,MAAM;EAC5C,KAAK,SAAS,CAAC;EACf,KAAK,oBAAoB;EACzB,IAAI,QAAQ,MAAM,KAAK,IAAI;EAC3B,KAAK,SAAS,OAAO;EACrB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;GACrC,IAAI,OAAO,MAAM;GACjB,IAAI,gBAAgB,IAAI,cAAc,OAAO,CAAC;GAC9C,KAAK,SAAS,QAAQ,CAAC,aAAa,CAAC;GACrC,KAAK,gBAAgB,aAAa;GAClC,IAAI,QAAQ,IAAI,MAAM,IAAI;GAC1B,KAAK,OAAO,KAAK,KAAK;GACtB,KAAK,SAAS,YAAY,CAAC,OAAO,aAAa,CAAC;EAClD;EACA,KAAK,SAAS,OAAO,CAAC,KAAK,MAAM,CAAC;EAClC,OAAO,KAAK;CACd;CACA,SAAS,aAAa,GAAG;EACvB,OAAO,4CAA4C,KAAK,CAAC;CAC3D;CACA,SAAS,qBAAqB,MAAM;EAClC,OAAO,mUAAmU,KACxU,IACF;CACF;CACA,SAAS,qBAAqB,MAAM;EAClC,OAAO,wHAAwH,KAC7H,IACF;CACF;CACA,SAAS,YAAY,GAAG;EACtB,OAAO,QAAQ,KAAK,CAAC;CACvB;CACA,SAAS,aAAa,GAAG;EACvB,OAAO,KAAK,KAAK,CAAC;CACpB;CACA,SAAS,aAAa,MAAM;EAC1B,KAAK,OAAO;EACZ,KAAK,WAAW,CAAC;CACnB;CACA,SAAS,mBAAmB,QAAQ;EAClC,KAAK,KAAK,OAAO;EACjB,KAAK,MAAM,OAAO;EAClB,KAAK,eAAe,OAAO;CAC7B;CACA,SAAS,eAAe,YAAY,UAAU;EAC5C,IAAI,CAAC,YACH,OAAO;EAET,QAAQ,SAAS,QAAjB;GACE,KAAK,GACH,OAAO,SAAS,OAAO,QAAQ,UAAU;GAC3C,KAAK;IACH,IAAI,SAAS,SAAS;IACtB,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;KACtC,IAAI,QAAQ,OAAO;KACnB,IAAI,cAAc,MAAM,SAAS,cAAc,MAAM,KAAK;MACxD,IAAI,SAAS,aAAa,MAAM;MAChC,OAAO,MAAM,QAAQ;KACvB;IACF;IACA;GACF,SACE,OAAO;EACX;EACA,OAAO;CACT;CACA,SAAS,0BAA0B,YAAY,UAAU;EAEvD,IADsB,eAAe,YAAY,SAAS,QACxC,MAAM,IACtB,OAAO;EAET,OAAO,aAAa,SAAS;CAC/B;CACA,SAAS,0BAA0B,YAAY,UAAU;EACvD,IAAI,kBAAkB,eAAe,YAAY,SAAS,QAAQ;EAClE,IAAI,oBAAoB,IACtB,OAAO;EAET,OAAO,SAAS,WAAW;CAC7B;CACA,SAAS,mBAAmB,cAAc,eAAe;EACvD,IAAI,aAAa,CAAC;EAClB,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;GAC5C,IAAI,WAAW,aAAa;GAC5B,IAAI,aAAa,cAAc;GAC/B,aAAa,MAAM,QAAQ,UAAU,IAAI,WAAW,KAAK;GACzD,IAAI,cAAc,eAAe,YAAY,QAAQ;GACrD,IAAI,gBAAgB,IAClB,WAAW,KAAK,WAAW;EAE/B;EACA,IAAI,WAAW,WAAW,aAAa,QACrC,OAAO;EAET,OAAO;CACT;CACA,SAAS,4BAA4B,eAAe,UAAU;EAC5D,IAAI,eAAe,SAAS,cAAc,SAAS,SAAS,kBAAkB,SAAS,SAAS,kBAAkB;EAClH,IAAI,cAAc,QAAQ,SAAS,cACjC,OAAO,CAAC;EAEV,IAAI,eAAe,mBAAmB,SAAS,eAAe,aAAa;EAC3E,IAAI,iBAAiB,IACnB,OAAO,CAAC;EAEV,IAAI,kBAAkB,SAAS,cAAc,SAAS;EACtD,IAAI,cAAc,UAAU,SAAS,SAAS,kBAAkB,QAC9D,OAAO,CAAC;EAEV,IAAI,mBAAmB,cAAc,UAAU,MAAM,eAAe;EACpE,OAAO,iBAAiB,UAAU,qBAAqB,iBAAiB,GAAG,IAAI,GAC7E,iBAAiB,MAAM;EAEzB,IAAI,kBAAkB,IAAI,cAAc,kBAAkB,CAAC;EAC3D,IAAI,mBAAmB,mBAAmB,SAAS,mBAAmB,eAAe;EACrF,IAAI,mBAAmB,CAAC,EAAE,OAAO,cAAc,SAAS;EACxD,iBAAiB,QAAQ;EACzB,OAAO,iBAAiB,UAAU,qBAAqB,iBAAiB,GAAG,IAAI,GAC7E,iBAAiB,MAAM;EAEzB,IAAI,iBAAiB,SAAS,SAAS,kBAAkB,QACvD,OAAO,CAAC;EAEV,IAAI,kBAAkB,IAAI,cAAc,kBAAkB,CAAC;EAC3D,IAAI,mBAAmB,mBAAmB,SAAS,mBAAmB,eAAe;EACrF,IAAI,oBAAoB,aAAa,WAAW,SAAS,cAAc,UAAU,iBAAiB,WAAW,SAAS,kBAAkB,UAAU,iBAAiB,WAAW,SAAS,kBAAkB;EACzM,IAAI,gBAAgB,CAAC;EACrB,IAAI,mBACF,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,cAAc,QAAQ,KAAK;GAEtD,IAAI,kBADe,SAAS,cAAc,GACP;GACnC,IAAI,cAAc,KAAK,iBAAiB,eAAe;GACvD,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,UAAU,QAAQ,KAAK;IACrD,IAAI,aAAa,YAAY,UAAU;IACvC,IAAI,SAAS,KAAK,gBAAgB,aAAa,UAAU;IAEzD,IADuB,KAAK,oBAAoB,aAAa,UAC1C,MAAM,MACvB,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;KAE5C,IAAI,eAAe,OADF,cAAc,IAAI,CACA,CAAC;KACpC,IAAI,cACF,cAAc,KAAK,YAAY;IAEnC;GAEJ;EACF;EAEF,OAAO;CACT;CACA,SAAS,4BAA4B,eAAe,UAAU;EAC5D,IAAI,aAAa,cAAc;EAC/B,IAAI,cAAc,eAAe,YAAY,SAAS,QAAQ;EAC9D,IAAI,gBAAgB,IAClB,OAAO;EAET,IAAI;EACJ,IAAI,cAAc,SAAS,aAAa;EACxC,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;GAC3C,WAAW,YAAY;GACvB,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,WAAW,QAAQ,KAAK;IAGnD,IAFoB,cAAc,UAAU,OAC5B,SAAS,WAAW,IAElC;IAEF,IAAI,MAAM,SAAS,WAAW,SAAS,GACrC,OAAO;GAEX;EACF;EACA,OAAO;CACT;CACA,SAAS,iCAAiC,YAAY,UAAU;EAC9D,IAAI,kBAAkB,eAAe,YAAY,SAAS,QAAQ;EAClE,IAAI,oBAAoB,IACtB,OAAO;EAET,OAAO,SAAS,UAAU;CAC5B;CACA,aAAa,UAAU,kCAAkC,WAAW;EAClE,IAAI,UAAU,KAAK,KAAK,OAAO,KAAK;EACpC,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;GACvC,IAAI,SAAS,QAAQ;GACrB,IAAI,OAAO,QAAQ,QACjB,OAAO,OAAO,OAAO,eAAe;EAExC;EACA,OAAO,CAAC;CACV;CACA,aAAa,UAAU,2BAA2B,SAAS,WAAW;EAEpE,IAAI,CADS,KAAK,KAAK,OACX,MACV,OAAO,CAAC;EAEV,IAAI,CAAC,WACH,OAAO,KAAK,gCAAgC;EAE9C,IAAI,UAAU,KAAK,KAAK,OAAO,KAAK;EACpC,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;GACvC,IAAI,SAAS,QAAQ;GACrB,IAAI,OAAO,QAAQ,aAAa,OAAO,OAAO,gBAC5C,OAAO,OAAO,OAAO,eAAe;QAC/B;IACL,IAAI,iBAAiB,OAAO;IAC5B,IAAI,CAAC,CAAC,gBACJ,KAAK,IAAI,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;KAC9C,IAAI,gBAAgB,eAAe;KACnC,IAAI,cAAc,QAAQ,WAExB,OADc,cAAc,QACb;IAEnB;GAEJ;EACF;EACA,OAAO,KAAK,gCAAgC;CAC9C;CACA,aAAa,UAAU,oBAAoB,SAAS,UAAU,WAAW;EACvE,IAAI,OAAO,CAAC;EACZ,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;GACxC,IAAI,MAAM,SAAS,GAAG;GAEtB,KAAK,OADS,SAAS,GAAG;EAE5B;EACA,KAAK,SAAS,WAAW,OAAO;CAClC;CACA,aAAa,UAAU,oBAAoB,SAAS,WAAW;EAC7D,IAAI,WAAW,KAAK,SAAS;EAC7B,IAAI,KAAK,SAAS,eAAe,SAAS,GACxC,OAAO;EAET,IAAI,kBAAkB,KAAK,yBAAyB,SAAS;EAC7D,IAAI,CAAC,iBACH,OAAO;EAET,IAAI,QAAQ,KAAK,KAAK,OAAO;EAC7B,WAAW,gBAAgB,IAAI,SAAS,OAAO;GAC7C,OAAO,MAAM,SAAS;EACxB,CAAC;EACD,KAAK,SAAS,aAAa;EAC3B,KAAK,kBAAkB,UAAU,SAAS;EAC1C,OAAO;CACT;CACA,aAAa,UAAU,sBAAsB,SAAS,aAAa,UAAU;EAG3E,OAFiB,YAAY,WAAW,SAExB,IADE,SAAS,YAAY,SACT;CAChC;CACA,aAAa,UAAU,kBAAkB,SAAS,aAAa,UAAU;EACvE,IAAI,WAAW;EAEf,QADuB,KAAK,oBAAoB,aAAa,QACtC,GAAvB;GACE,KAAK,MACH,OAAO,SAAS,YAAY;IAC1B,OAAO,0BAA0B,MAAM,UAAU,CAAC,YAAY,QAAQ,CAAC;GACzE;GACF,KAAK,MACH,OAAO,SAAS,YAAY;IAC1B,OAAO,0BAA0B,MAAM,UAAU,CAAC,YAAY,QAAQ,CAAC;GACzE;GACF,KAAK,MACH,OAAO,SAAS,eAAe;IAC7B,OAAO,4BAA4B,MAAM,UAAU,CAAC,eAAe,QAAQ,CAAC;GAC9E;GACF,KAAK,MACH,OAAO,SAAS,eAAe;IAC7B,OAAO,4BAA4B,MAAM,UAAU,CAAC,eAAe,QAAQ,CAAC;GAC9E;GACF,KAAK,MACH,OAAO,SAAS,YAAY;IAC1B,OAAO,iCAAiC,MAAM,UAAU,CAAC,YAAY,QAAQ,CAAC;GAChF;GACF,SACE,MAAM,IAAI,MACR,iBAAiB,YAAY,aAAa,qBAAqB,SAAS,cAAc,uBACxF;EACJ;CACF;CACA,aAAa,UAAU,gBAAgB,SAAS,OAAO;EACrD,IAAI,gBAAgB,MAAM;EAC1B,IAAI,eAAe,cAAc;EACjC,IAAI,UAAU,KAAK,WAAW;GAC5B,KAAK,MAAM;GACX,QAAQ,MAAM;EAChB,CAAC;EACD,IAAI,CAAC,SACH,uBAAO,IAAI,MACT,WAAW,KAAK,KAAK,MAAM,SAAS,KAAK,gCAAgC,MAAM,MAAM,mBAAmB,MAAM,SAAS,IACzH;EAEF,IAAI,UAAU,KAAK,kBAAkB,OAAO;EAC5C,IAAI,gBAAgB,CAAC,EAAE,OAAO,cAAc,OAAO;EACnD,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;GACvC,IAAI,cAAc,QAAQ;GAC1B,IAAI,YAAY,KAAK,mBAAmB,WAAW;GACnD,KAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;IACzC,IAAI,WAAW,UAAU;IACzB,IAAI,YAAY,KAAK,oBAAoB,aAAa,QAAQ;IAC9D,IAAI,SAAS,KAAK,gBAAgB,aAAa,QAAQ;IACvD,IAAI,eAAe,KAAK;IACxB,QAAQ,WAAR;KACE,KAAK;MACH,eAAe,OAAO,cAAc,OAAO;MAC3C,IAAI,cACF,cAAc,OACZ,cACA,GACA,IAAI,mBAAmB;OACrB,IAAI;OACJ,KAAK,MAAM;OACX;MACF,CAAC,CACH;MAEF;KACF,KAAK;MACH,eAAe,OAAO,cAAc,OAAO;MAC3C,IAAI,cACF,cAAc,OACZ,cACA,GACA,IAAI,mBAAmB;OACrB,IAAI;OACJ,KAAK,MAAM;OACX;MACF,CAAC,CACH;MAEF;KACF,KAAK;MACH,eAAe,OAAO,aAAa;MACnC,IAAI,MAAM,QAAQ,YAAY,KAAK,aAAa,QAC9C,cAAc,OACZ,cACA,GACA,IAAI,mBAAmB;OACrB,IAAI;OACJ,KAAK,MAAM;OACX;MACF,CAAC,CACH;MAEF;KACF,KAAK;MACH,eAAe,OAAO,aAAa;MACnC,IAAI,cACF,cAAc,OACZ,cACA,GACA,IAAI,mBAAmB;OACrB,IAAI;OACJ,KAAK,MAAM;OACX;MACF,CAAC,CACH;MAEF;KACF,KAAK;MACH,eAAe,OAAO,cAAc,OAAO;MAC3C,IAAI,cACF,cAAc,OACZ,cACA,GACA,IAAI,mBAAmB;OACrB,IAAI;OACJ,KAAK,MAAM;OACX;MACF,CAAC,CACH;MAEF;IACJ;IACA,gBAAgB,IAAI,cAAc,eAAe,YAAY;IAC7D,IAAI,MAAM,QAAQ,YAAY,KAAK,CAAC,aAAa,QAC/C;IAEF,eAAe;GACjB;EACF;EACA,OAAO,cAAc,SAAS,gBAAgB;CAChD;CACA,aAAa,UAAU,WAAW,SAAS,OAAO;EAChD,IAAI,CAAC,MAAM,QACT,OAAO;EAET,KAAK,kBAAkB,MAAM,MAAM;EACnC,IAAI,kBAAkB,KAAK,SAAS,eAAe,MAAM,MAAM;EAC/D,IAAI,CAAC,MAAM,KACT,OAAO;EAET,IAAI,mBAAmB,KAAK,SAAS,MAAM,QAAQ,KAAK,SAAS,SAAS;GACxE,OAAO,QAAQ,QAAQ,MAAM;EAC/B,CAAC;EACD,OAAO,mBAAmB;CAC5B;CACA,aAAa,UAAU,qBAAqB,SAAS,aAAa;EAChE,OAAO,YAAY,aAAa;CAClC;CACA,aAAa,UAAU,mBAAmB,SAAS,OAAO;EAExD,OADc,KAAK,KAAK,OAAO,KAAK,QACrB,UAAU;CAC3B;CACA,aAAa,UAAU,oBAAoB,SAAS,SAAS;EAC3D,OAAO,QAAQ,kBAAkB,IAAI,KAAK,iBAAiB,KAAK,IAAI,CAAC;CACvE;CACA,aAAa,UAAU,aAAa,SAAS,WAAW,OAAO;EAC7D,IAAI,CAAC,KAAK,MACR,OAAO,EAAE,MAAM,oBAAoB;EAErC,IAAI,CAAC,KAAK,SAAS,eAAe,MAAM,MAAM,GAC5C,KAAK,kBAAkB,MAAM,MAAM;EAErC,IAAI,iBAAiB,KAAK,SAAS,MAAM;EACzC,IAAI,CAAC,gBACH,OAAO,EAAE,MAAM,2BAA2B,MAAM,OAAO;EAEzD,IAAI,CAAC,eAAe,KAAK,MAAM,MAC7B,OAAO;EAET,OAAO,KAAK,SAAS,MAAM,QAAQ,KAAK,MAAM;CAChD;CACA,SAAS,qBAAqB,eAAe;EAC3C,IAAI,OAAO,cAAc;EACzB,IAAI,WAAW,cAAc,IAAI,EAAE;EACnC,OAEE,aAAa,QAAQ,aAAa,IAAI,KACtC,CAAC,aAAa,QAAQ,KAAK,aAAa,IAAI;CAEhD;CACA,SAAS,mBAAmB,eAAe;EACzC,IAAI,WAAW,cAAc,IAAI,CAAC;EAClC,OAEE,aAAa,QACb,CAAC,aAAa,QAAQ;CAE1B;CACA,IAAI,kBAAkB;EACpB,YAAY;EACZ,UAAU;CACZ;CACA,SAAS,yBAAyB,eAAe;EAC/C,IAAI,OAAO,cAAc;EACzB,IAAI,WAAW,cAAc,IAAI,EAAE;EACnC,QAEG,aAAa,IAAI,KAAK,qBAAqB,IAAI,MAAM,CAAC,aAAa,QAAQ;CAEhF;CACA,SAAS,uBAAuB,eAAe;EAC7C,IAAI,WAAW,cAAc,IAAI,CAAC;EAClC,QAAQ,MAAR;GACE,KAAK,aAAa,MAChB,OAAO;GACT,KAAM,CAAC,aAAa,QAAQ,KAAK,CAAC,qBAAqB,QAAQ;IAC7D,IAAI,mBAAmB,aAAa,QAAQ;IAC5C,IAAI,CAAC,kBACH,OAAO;IAET,IAAI,kBAAkB;KACpB,IAAI,kBAAkB;KACtB,kBAAkB,cAAc,UAAU,KAAK,SAAS,GAAG;MACzD,OAAO,aAAa,CAAC,KAAK,qBAAqB,CAAC;KAClD,CAAC;KACD,IAAI,CAAC,iBACH,OAAO;IAEX;IACA;GACF,SACE,OAAO;EACX;CACF;CACA,IAAI,sBAAsB;EACxB,YAAY;EACZ,UAAU;CACZ;CACA,SAAS,4BAA4B,QAAQ,QAAQ,OAAO;EAC1D,OAAO,OAAO,SAAS,OAAO,KAAK,OAAO,YAAY;CACxD;CACA,SAAS,4BAA4B,QAAQ,QAAQ,OAAO;EAC1D,OAAO,OAAO,SAAS,OAAO,KAAK,OAAO,YAAY;CACxD;CACA,SAAS,8BAA8B,QAAQ,QAAQ,OAAO;EAC5D,OAAO,aAAa,QAAQ,SAAS,OAAO,QAAQ;GAElD,OADmB,QAAQ,QACrB,SAAS,OAAO,KAAK,KAAK;EAClC,CAAC;CACH;CACA,SAAS,8BAA8B,QAAQ,QAAQ,OAAO;EAC5D,IAAI,QAAQ,OAAO;EACnB,MAAM,SAAS,OAAO,KAAK,OAAO,aAAa,QAAQ;EACvD,IAAI,aAAa,OAAO,aAAa,WAAW;EAChD,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,KAAK;GACnC,QAAQ,OAAO,QAAQ,IAAI;GAC3B,MAAM,SAAS,WAAW,IAAI;EAChC;CACF;CACA,IAAI,gBAAgB;EAClB,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;CACN;CACA,SAAS,kBAAkB,QAAQ,QAAQ,OAAO;EAChD,IAAI,kBAAkB,sBAAsB,cAAc,OAAO,KAC/D,cAAc,OAAO,IAAI,QAAQ,QAAQ,KAAK;CAElD;CACA,SAAS,gBAAgB,mBAAmB;EAC1C,IAAI,YAAY,CAAC,EAAE,OAAO,kBAAkB,SAAS;EACrD,KAAK,IAAI,IAAI,UAAU,SAAS,GAAG,KAAK,GAAG,KAAK;GAC9C,IAAI,WAAW,UAAU;GACzB,IAAI,WAAW,qBAAqB,QAAQ;GAC5C,IAAI,WAAW,qBAAqB,QAAQ;GAC5C,IAAI,CAAC,YAAY,CAAC,UAChB,OAAO;GAET,IAAI,UACF,OAAO;EAEX;EACA,OAAO;CACT;CACA,SAAS,gBAAgB,mBAAmB;EAC1C,IAAI,qBAAqB,kBAAkB,OAAO,GAChD,OAAO;EAET,KAAK,IAAI,IAAI,GAAG,IAAI,kBAAkB,UAAU,QAAQ,KAAK;GAC3D,IAAI,WAAW,kBAAkB,UAAU;GAE3C,IAAI,CADW,qBAAqB,QACxB,GACV,OAAO;EAEX;EACA,OAAO;CACT;CACA,SAAS,wBAAwB,OAAO;EACtC,IAAI,WAAW;EACf,IAAI,SAAS;EACb,IAAI,OAAO,KAAK,aAAa;EAC7B,IAAI,SAAS,KAAK,UAAU,eAAe,KAAK;EAChD,IAAI,OAAO,WAAW,GACpB;EAEF,IAAI,gBAAgB,IAAI,cACtB,OAAO,IAAI,SAAS,OAAO;GACzB,OAAO,MAAM,SAAS,YAAY;EACpC,CAAC,GACD,CACF;EACA,IAAI,oBAAoB,IAAI,cAC1B,OAAO,IAAI,SAAS,OAAO;GACzB,OAAO,MAAM;EACf,CAAC,GACD,CACF;EACA,OAAO,QAAQ,SAAS,OAAO,OAAO;GACpC,IAAI,qBAAqB,MAAM,IAAI,GACjC;GAEF,cAAc,gBAAgB,KAAK;GACnC,kBAAkB,gBAAgB,KAAK;GACvC,IAAI,UAAU;GACd,IAAI,gBAAgB,iBAAiB,GACnC,WAAW;GAEb,IAAI,gBAAgB,iBAAiB,GACnC,WAAW;GAEb,IAAI;GACJ,QAAQ,SAAR;IACE,KAAK;KACH,MAAM;KACN;IACF,KAAK;KACH,MAAM;KACN;IACF,KAAK;KACH,MAAM;KACN;GACJ;GACA,IAAI,KAAK,QAAQ,GAAG,MAAM,IACxB;GAEF,IAAI,gBAAgB,SAAS,MAAM,cAAc;IAC/C;IACA;IACA;GACF,CAAC;GACD,IAAI,yBAAyB,OAC3B,OAAO,QAAQ,KAAK,cAAc,OAAO;GAE3C,cAAc,QAAQ,SAAS,QAAQ,QAAQ;IAC7C,IAAI,kBAAkB,oBAAoB;KACxC,kBAAkB,QAAQ,QAAQ,MAAM;KACxC,cAAc,QAAQ,UAAU,OAAO;IACzC;GACF,CAAC;EACH,CAAC;CACH;CACA,SAAS,iBAAiB,QAAQ,OAAO;EAIvC,OAAO,IAAI,cAHG,OAAO,IAAI,SAAS,OAAO;GACvC,OAAO,MAAM,YAAY;EAC3B,CAC+B,GAAG,SAAS,CAAC;CAC9C;CACA,SAAS,wBAAwB,OAAO;EACtC,IAAI,WAAW;EACf,IAAI,SAAS;EACb,IAAI,SAAS,KAAK,UAAU,eAAe,KAAK;EAChD,IAAI,gBAAgB,iBAAiB,MAAM;EAC3C,cAAc,QAAQ,QAAQ,SAAS,YAAY,OAAO;GACxD,cAAc,gBAAgB,KAAK;GACnC,IAAI,gBAAgB,SAAS,MAAM,cAAc;IAC/C,KAAK;IACL;IACA;GACF,CAAC;GACD,IAAI,cAAc,QAAQ;IACxB,cAAc,QAAQ,SAAS,QAAQ;KACrC,OAAO,kBAAkB,QAAQ,QAAQ,KAAK;IAChD,CAAC;IACD,gBAAgB,iBAAiB,MAAM;GACzC;EACF,CAAC;CACH;CACA,SAAS,oBAAoB,eAAe;EAC1C,IAAI,OAAO,cAAc;EACzB,IAAI,WAAW,cAAc,IAAI,EAAE;EACnC,OAEE,aAAa,QAAQ,YAAY,IAAI,KACrC,CAAC,YAAY,QAAQ,KAAK,YAAY,IAAI;CAE9C;CACA,SAAS,kBAAkB,eAAe;EACxC,IAAI,WAAW,cAAc,IAAI,CAAC;EAClC,OAEE,aAAa,QACb,CAAC,YAAY,QAAQ;CAEzB;CACA,IAAI,iBAAiB;EACnB,YAAY;EACZ,UAAU;CACZ;CACA,SAAS,mBAAmB,QAAQ,OAAO;EAIzC,OAAO,IAAI,cAHG,OAAO,IAAI,SAAS,OAAO;GACvC,OAAO,MAAM,YAAY;EAC3B,CAC+B,GAAG,SAAS,CAAC;CAC9C;CACA,SAAS,cAAc,OAAO;EAC5B,IAAI,WAAW;EACf,IAAI,SAAS;EACb,IAAI,SAAS,KAAK,UAAU,eAAe,KAAK;EAChD,IAAI,gBAAgB,mBAAmB,MAAM;EAC7C,cAAc,QAAQ,QAAQ,SAAS,YAAY,OAAO;GACxD,cAAc,gBAAgB,KAAK;GACnC,IAAI,gBAAgB,SAAS,MAAM,cAAc;IAC/C,KAAK;IACL;IACA;GACF,CAAC;GACD,IAAI,cAAc,QAAQ;IACxB,cAAc,QAAQ,SAAS,QAAQ;KACrC,OAAO,kBAAkB,QAAQ,QAAQ,KAAK;IAChD,CAAC;IACD,gBAAgB,mBAAmB,MAAM;GAC3C;EACF,CAAC;CACH;CACA,SAAS,KAAK,SAAS;EACrB,KAAK,UAAU,WAAW;EAC1B,KAAK,YAAY,IAAI,UAAU;EAC/B,KAAK,eAAe,CAAC;CACvB;CACA,KAAK,UAAU,UAAU,SAAS,MAAM;EACtC,KAAK,OAAO;CACd;CACA,KAAK,UAAU,gBAAgB;EAC7B;EACA;EACA;CACF;CACA,SAAS,uBAAuB,SAAS;EACvC,IAAI,SAAS,KAAK,cAAc,UAAU;EAC1C,OAAO,KAAK,UAAU,uBAAuB,SAAS,OAAO,YAAY,OAAO,QAAQ;CAC1F;CACA,SAAS,eAAe;EACtB,uBAAuB,KAAK,MAAM,WAAW;EAC7C,uBAAuB,KAAK,MAAM,YAAY;EAC9C,uBAAuB,KAAK,MAAM,gBAAgB;EAClD,OAAO,KAAK,UAAU,SAAS,KAAK,IAAI;CAC1C;CACA,SAAS,yBAAyB;EAChC,IAAI,WAAW;EAEf,KADkB,UAAU,iBAAiB,gBACxC,EAAE,QAAQ,SAAS,OAAO;GAC7B,IAAI,cAAc,SAAS,UAAU,eAAe,KAAK;GACzD,SAAS,UAAU,aAAa,MAAM,YAAY,MAAM,WAAW,YAAY,QAAQ,CAAC;EAC1F,CAAC;CACH;CACA,KAAK,UAAU,mBAAmB,SAAS,QAAQ,MAAM;EACvD,IAAI,WAAW;EACf,IAAI,gBAAgB,KAAK,OAAO,SAAS,KAAK;GAC5C,OAAO,SAAS,MAAM,SAAS;IAAE;IAAQ;GAAI,CAAC;EAChD,CAAC;EACD,IAAI,CAAC,KAAK,aAAa,eAAe,MAAM,GAC1C,KAAK,aAAa,UAAU;OAE5B,KAAK,aAAa,UAAU,KAAK,aAAa,QAAQ,OAAO,aAAa;CAE9E;CACA,KAAK,UAAU,gBAAgB,SAAS,MAAM,UAAU;EACtD,IAAI,CAAC,MACH,MAAM,IAAI,MAAM,8CAA8C;EAEhE,IAAI,CAAC,KAAK,OACR,KAAK,QAAQ,IAAI,aAAa,IAAI;EAEpC,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;GACxC,IAAI,UAAU,SAAS;GACvB,IAAI,CAAC,KAAK,MAAM,SAAS,EAAE,QAAQ,QAAQ,OAAO,CAAC,GACjD;GAEF,KAAK,iBAAiB,QAAQ,QAAQ,QAAQ,IAAI;EACpD;CACF;CACA,KAAK,UAAU,mBAAmB,SAAS,YAAY,WAAW,UAAU;EAC1E,KAAK,UAAU,iBAAiB,YAAY,WAAW,QAAQ;CACjE;CACA,SAAS,wBAAwB;EAC/B,IAAI,KAAK,UAAU,oBAAoB,QAAQ,YAAY,MAAM,IAC/D,MAAM,IAAI,MAAM,wEAAwE;CAE5F;CACA,SAAS,+BAA+B;EACtC,IAAI,WAAW;EAEf,IAAI,CAAC,KAAK,aAAa,eAAe,MAAM,GAC1C;EAEF,sBAAsB,KAAK,IAAI;EAE/B,KADkB,UAAU,iBAAiB,YACxC,EAAE,QAAQ,SAAS,OAAO;GAC7B,wBAAwB,KAAK,UAAU,KAAK;EAC9C,CAAC;CACH;CACA,SAAS,8BAA8B;EACrC,IAAI,WAAW;EACf,IAAI,SAAS;EACb,IAAI,CAAC,KAAK,aAAa,eAAe,MAAM,GAC1C;EAGF,IADW,KAAK,aAAa,QACpB,QAAQ,MAAM,MAAM,IAC3B;EAEF,sBAAsB,KAAK,IAAI;EAE/B,KADkB,UAAU,iBAAiB,YACxC,EAAE,QAAQ,SAAS,OAAO;GAC7B,wBAAwB,KAAK,UAAU,KAAK;EAC9C,CAAC;CACH;CACA,SAAS,sBAAsB;EAC7B,IAAI,WAAW;EACf,IAAI,SAAS;EACb,IAAI,CAAC,KAAK,aAAa,eAAe,MAAM,GAC1C;EAGF,IADW,KAAK,aAAa,QACpB,QAAQ,MAAM,MAAM,IAC3B;EAEF,sBAAsB,KAAK,IAAI;EAE/B,KADkB,UAAU,iBAAiB,WACxC,EAAE,QAAQ,SAAS,OAAO;GAC7B,cAAc,KAAK,UAAU,KAAK;EACpC,CAAC;CACH;CACA,KAAK,UAAU,oBAAoB,SAAS,WAAW;EACrD,OAAO,CAAC,CAAC,KAAK,UAAU,WAAW,SAAS;CAC9C;CACA,KAAK,UAAU,0BAA0B,WAAW;EAClD,IAAI,KAAK,kBAAkB,YAAY,GAAG;GACxC,6BAA6B,KAAK,IAAI;GACtC,4BAA4B,KAAK,IAAI;EACvC;EACA,IAAI,KAAK,kBAAkB,WAAW,GACpC,oBAAoB,KAAK,IAAI;EAE/B,IAAI,KAAK,kBAAkB,gBAAgB,GACzC,uBAAuB,KAAK,IAAI;CAEpC;CACA,KAAK,UAAU,cAAc,SAAS,MAAM;EAC1C,IAAI,CAAC,KAAK,QAAQ,KAAK,SAAS,MAAM;GACpC,KAAK,QAAQ,IAAI;GACjB,aAAa,KAAK,IAAI;GACtB,KAAK,wBAAwB;EAC/B;CACF;CACA,KAAK,UAAU,cAAc,SAAS,MAAM;EAC1C,KAAK,YAAY,IAAI;EACrB,OAAO,KAAK,UAAU,QAAQ;CAChC;CACA,KAAK,UAAU,gBAAgB,SAAS,MAAM;EAC5C,KAAK,YAAY,IAAI;EACrB,IAAI,UAAU,CAAC;EACf,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,UAAU,OAAO,QAAQ,KAAK;GACrD,IAAI,QAAQ,KAAK,UAAU,OAAO;GAClC,IAAI,MAAM,MAAM,SACd;GAEF,IAAI,QAAQ,MAAM,YAAY;GAC9B,QAAQ,KAAK,MAAM,QAAQ,KAAK,IAAI,MAAM,KAAK,KAAK;EACtD;EACA,OAAO;CACT;CACA,SAAS,KAAK,SAAS;EACrB,UAAU,WAAW,CAAC;EACtB,QAAQ,SAAS,QAAQ,UAAU,CAAC;EACpC,IAAI,CAAC,QAAQ,OAAO;GAClB,cAAc,QAAQ,YAAY,0DAA0D;GAC5F,cAAc,QAAQ,WAAW,yDAAyD;GAC1F,cAAc,QAAQ,YAAY,0DAA0D;GAC5F,cAAc,QAAQ,UAAU,wDAAwD;GACxF,cAAc,QAAQ,aAAa,GAAG,wEAAwE;GAC9G,KAAK,QAAQ;IACX,YAAY,EAAE,IAAI,QAAQ,cAAc,IAAI;IAC5C,eAAe,EAAE,IAAI,QAAQ,aAAa,IAAI;IAC9C,UAAU,EAAE,IAAI,QAAQ,YAAY,QAAQ,aAAa,MAAM,QAAQ,UAAU;IAEjF,gBAAgB,EAAE,IAAI,QAAQ,mBAAmB,QAAQ,aAAa,QAAQ,WAAW,QAAQ,OAAO,EAAE,EAAE;IAC5G,UAAU,EAAE,IAAI,QAAQ,YAAY,IAAI;IACxC,aAAa,EAAE,IAAI,QAAQ,eAAe,IAAI;IAC9C,cAAc,EAAE,IAAI,QAAQ,gBAAgB,IAAI;IAChD,iBAAiB,EAAE,IAAI,QAAQ,mBAAmB,IAAI;IACtD,SAAS,EAAE,IAAI,QAAQ,WAAW,IAAI;IACtC,YAAY,EAAE,IAAI,QAAQ,cAAc,IAAI;IAC5C,SAAS,EAAE,IAAI,QAAQ,WAAW,cAAc;IAChD,aAAa,EAAE,IAAI,QAAQ,eAAe,IAAI;IAC9C,WAAW,EAAE,IAAI,QAAQ,aAAa,IAAI;IAC1C,WAAW,EAAE,IAAI,QAAQ,aAAa,IAAI;GAC5C;GACA,KAAK,aAAa,QAAQ,cAAc;GACxC,KAAK,WAAW,QAAQ;GACxB,KAAK,YAAY,QAAQ;GACzB,KAAK,mBAAmB,QAAQ;GAChC,KAAK,SAAS,OAAO,OAAO,QAAQ,QAAQ,EAC1C,KAAK,OAAO,OACV;IACE,eAAe,QAAQ,eAAe,KAAK,gBAAgB;IAC3D,cAAc,QAAQ,cAAc,KAAK,eAAe;IACxD,aAAa,QAAQ,eAAe,KAAK,kBAAkB;GAC7D,GACA,QAAQ,OAAO,GACjB,EACF,CAAC;EACH;EACA,KAAK,YAAY;EACjB,KAAK,SAAS,IAAI,SAAS,SAAS,MAAM,QAAQ,UAAU,CAAC,CAAC;EAC9D,KAAK,WAAW,IAAI,gBAAgB,IAAI;EACxC,KAAK,WAAW,IAAI,SAAS,IAAI;EACjC,KAAK,eAAe,IAAI,aAAa,IAAI;EACzC,KAAK,SAAS,KAAK,UAAU,CAAC;EAC9B,KAAK,QAAQ;EACb,KAAK,iBAAiB,CAAC;EACvB,OAAO,eAAe,MAAM,WAAW,EACrC,KAAK,WAAW;GACd,IAAI,KAAK,UACP,OAAO,KAAK;GAEd,IAAI,KAAK,mBAAmB,YAC1B,OAAO,KAAK,WAAW,IAAI,QAAQ,IAAI;EAE3C,EACF,CAAC;CACH;CACA,KAAK,UAAU,UAAU,SAAS,GAAG;EACnC,OAAO,KAAK,SAAS,iBAAiB,CAAC,MAAM;CAC/C;CACA,KAAK,UAAU,mBAAmB,SAAS,GAAG;EAC5C,OAAO,KAAK,SAAS,iBAAiB,CAAC;CACzC;CACA,KAAK,UAAU,cAAc,SAAS,GAAG;EACvC,IAAI,aAAa,KAAK,iBAAiB,CAAC;EACxC,IAAI,QAAQ,KAAK,OAAO,IAAI,UAAU;EACtC,IAAI,CAAC,OACH,QAAQ,KAAK,OAAO,IAAI,CAAC;EAE3B,OAAO;CACT;CACA,KAAK,UAAU,iBAAiB,SAAS,SAAS;EAChD,OAAO,KAAK,qBAAqB,SAAS,IAAI,SAAS,SAAS;GAC9D,IAAI,QAAQ,WAAW,QACrB,OAAO;IACL,QAAQ;IACR,MAAM,QAAQ,KAAK,OAAO,SAAS,KAAK;KACtC,OAAO,QAAQ;IACjB,CAAC;GACH;QAEA,OAAO;EAEX,CAAC;CACH;CACA,KAAK,UAAU,iBAAiB,SAAS,GAAG,SAAS;EACnD,IAAI,WAAW;EACf,IAAI,OAAO,IAAI,KAAK;EACpB,IAAI,sBAAsB,SAAS,OAAO;GACxC,OAAO,SAAS,iBAAiB,MAAM,IAAI;EAC7C;EACA,KAAK,iBAAiB,cAAc,MAAM,mBAAmB;EAC7D,IAAI,WAAW,UAAU,KAAK,eAAe,QAAQ,QAAQ,IAAI,KAAK,qBAAqB;EAC3F,KAAK,cAAc,MAAM,QAAQ;EACjC,IAAI,UAAU,KAAK,cAAc,CAAC;EAClC,IAAI,SAAS,QAAQ;EACrB,IAAI,SAAS,IAAI,MAAM,MAAM;EAC7B,IAAI,SAAS,KAAK,OAAO,IAAI,CAAC;EAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK,GAC/B,OAAO,KAAK,KAAK,OAAO,IAAI,QAAQ,EAAE,KAAK;EAE7C,OAAO;CACT;CACA,KAAK,UAAU,mBAAmB,SAAS,MAAM;EAC/C,OAAO,KAAK,WAAW,iBAAiB,IAAI;CAC9C;CACA,KAAK,UAAU,cAAc,SAAS,MAAM;EAC1C,IAAI,aAAa,KAAK,iBAAiB,IAAI;EAC3C,IAAI,QAAQ,KAAK,OAAO,IAAI,UAAU;EACtC,IAAI,CAAC,OACH,QAAQ,KAAK,OAAO,IAAI,CAAC;EAE3B,OAAO;CACT;CACA,KAAK,UAAU,mBAAmB,SAAS,KAAK;EAC9C,IAAI,CAAC,KAAK,WAAW,kBACnB,OAAO;EAET,OAAO,KAAK,WAAW,iBAAiB,GAAG;CAC7C;CACA,KAAK,UAAU,kBAAkB,SAAS,WAAW,YAAY;EAC/D,YAAY,UAAU,SAAS;EAC/B,aAAa,WAAW,SAAS;EACjC,IAAI,cAAc,KAAK,SAAS;EAChC,IAAI,aACF,OAAO,KAAK,SAAS,gBAAgB,aAAa,WAAW,UAAU;EAEzE,OAAO,KAAK,aAAa,YAAY,MAAM,eAAe;CAC5D;CACA,KAAK,UAAU,uBAAuB;EACpC,SAAS;EACT,UAAU;;;;;EAKR;GAAE,QAAQ;GAAQ,MAAM;IAAC;IAAQ;IAAQ;IAAQ;GAAM;EAAE,IACzD;GAAE,QAAQ;GAAQ,MAAM,CAAC,QAAQ,MAAM;EAAE,CAC3C;CACF;CACA,KAAK,UAAU,eAAe,SAAS,MAAM,GAAG,GAAG,UAAU,SAAS,UAAU;EAC9E,IAAI,MAAM,KAAK,IAAI,IAAI;EACvB,IAAI,MAAM,KAAK,IAAI,IAAI;EACvB,WAAW,aAAa,KAAK,IAAI,WAAW;EAC5C,UAAU,OAAO,OAAO,CAAC,GAAG,KAAK,sBAAsB,OAAO;EAC9D,IAAI,YAAY,IAAI,KAAK,aAAa;EACtC,IAAI,SAAS,KAAK,eAAe,MAAM,OAAO;EAC9C,IAAI;EACJ,IAAI,QAAQ,SAAS;GACnB,IAAI,SAAS,QAAQ,UAAU,KAAK,SAAS,qBAAqB;GAClE,iBAAiB,KAAK,SAAS,iBAAiB,QAAQ,QAAQ,QAAQ;EAC1E;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK,GAAG;GACzC,IAAI,QAAQ,OAAO;GACnB,SAAS,KAAK,MAAM,OAAO,GAAG,GAAG,UAAU,OAAO;GAClD,IAAI,MAAM,cACR,KAAK,MAAM,eAAe;GAE5B,IAAI,QAAQ,WAAW,IAAI,OAAO,SAAS,GAAG;IAC5C,IAAI,eAAe,iBAAiB,KAAK,SAAS,gBAAgB,gBAAgB,MAAM,OAAO,OAAO,IAAI,GAAG,KAAK,IAAI,KAAK,gBAAgB,OAAO,OAAO,IAAI,EAAE;IAC/J,KAAK,eAAe;GACtB;GACA,IAAI,QAAQ,eACV,KAAK,QAAQ,gBAAgB;QACxB,IAAI,QAAQ,UACjB,KAAK,QAAQ,WAAW,MAAM;EAElC;EACA,OAAO;CACT;CACA,KAAK,UAAU,UAAU,SAAS,MAAM,GAAG,GAAG,UAAU,SAAS;EAC/D,IAAI,WAAW,IAAI,KAAK;EACxB,KAAK,aAAa,MAAM,GAAG,GAAG,UAAU,SAAS,SAAS,OAAO,IAAI,IAAI,WAAW;GAClF,IAAI,YAAY,MAAM,QAAQ,IAAI,IAAI,WAAW,SAAS,IAAI;GAC9D,SAAS,OAAO,SAAS;EAC3B,CAAC;EACD,OAAO;CACT;CACA,KAAK,UAAU,WAAW,SAAS,MAAM,GAAG,GAAG,UAAU,SAAS;EAChE,IAAI,aAAa,CAAC;EAClB,KAAK,aAAa,MAAM,GAAG,GAAG,UAAU,SAAS,SAAS,OAAO,IAAI,IAAI,WAAW;GAClF,IAAI,YAAY,MAAM,QAAQ,IAAI,IAAI,WAAW,SAAS,IAAI;GAC9D,WAAW,KAAK,SAAS;EAC3B,CAAC;EACD,OAAO;CACT;CACA,KAAK,UAAU,kBAAkB,SAAS,MAAM,UAAU,SAAS;EACjE,OAAO,KAAK,aAAa,MAAM,GAAG,GAAG,UAAU,SAAS,WAAW,CACnE,CAAC;CACH;CACA,KAAK,UAAU,OAAO,SAAS,KAAK,MAAM,GAAG,GAAG,UAAU,SAAS;EACjE,KAAK,QAAQ,MAAM,GAAG,GAAG,UAAU,OAAO,EAAE,KAAK,GAAG;CACtD;CACA,KAAK,UAAU,aAAa,SAAS,KAAK,MAAM,GAAG,GAAG,UAAU,SAAS;EACvE,KAAK,aAAa,MAAM,GAAG,GAAG,UAAU,SAAS,SAAS,OAAO,IAAI,IAAI,WAAW;GAClF,MAAM,WAAW,KAAK,IAAI,IAAI,SAAS;EACzC,CAAC;CACH;CACA,KAAK,UAAU,cAAc,SAAS,KAAK,MAAM,GAAG,GAAG,UAAU,SAAS;EACxE,KAAK,aAAa,MAAM,GAAG,GAAG,UAAU,SAAS,SAAS,OAAO,IAAI,IAAI,WAAW;GAClF,MAAM,YAAY,KAAK,IAAI,IAAI,SAAS;EAC1C,CAAC;CACH;CACA,KAAK,UAAU,iBAAiB,SAAS,MAAM;EAC7C,IAAI,eAAe,KAAK,MAAM;EAC9B,IAAI,cACF,OAAO,aAAa;CAExB;CACA,KAAK,UAAU,WAAW,WAAW;EACnC,IAAI,QAAQ;EAGZ,SAAS,kBAAkB,MAAM;GAC/B,IAAI,cAAc,MAAM,eAAe,IAAI;GACpC,eAAe,YAAY,KAAK,EAAE;EAC3C;EACA,kBAAkB,YAAY;EAC9B,kBAAkB,YAAY;EAC9B,kBAAkB,cAAc;EAChC,kBAAkB,WAAW;EAC7B,kBAAkB,SAAS;EAC3B,KAAY;CACd;CACA,KAAK,UAAU,WAAW,WAAW;EACnC,OAAO,KAAK,YAAY,IAAI;CAC9B;CACA,KAAK,UAAU,WAAW,WAAW;EACnC,QAAQ,KAAK,8DAA8D;EAC3E,OAAO,KAAK,cAAc;CAC5B;CACA,KAAK,UAAU,gBAAgB,WAAW;EAExC,IAAI,QADY,KAAK,SACD,EAAE,OAAO;EAC7B,IAAI,SAAS,IAAI,YAAY,MAAM,MAAM;EACzC,IAAI,WAAW,IAAI,WAAW,MAAM;EACpC,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAChC,SAAS,KAAK,MAAM;EAEtB,OAAO;CACT;CACA,KAAK,UAAU,oBAAoB;EACjC,QAAQ;EAER,YAAY;EAEZ,UAAU;EAEV,UAAU;EAEV,WAAW;EAEX,MAAM;EAEN,SAAS;EAET,mBAAmB;EAEnB,KAAK;EAEL,SAAS;CAEX;CACA,KAAK,UAAU,iBAAiB;EAC9B,iBAAiB;EACjB,iBAAiB;EACjB,WAAW;EACX,gBAAgB;EAChB,QAAQ;EACR,eAAe;EACf,UAAU;EACV,gBAAgB;EAChB,gBAAgB;CAClB;CACA,KAAK,UAAU,kBAAkB;EAC/B,MAAM;EACN,aAAa;EACb,OAAO;EACP,QAAQ;EACR,QAAQ;EACR,WAAW;EACX,MAAM;EACN,YAAY;EACZ,OAAO;CACT;CACA,SAAS,QAAQ,MAAM,OAAO;EAC5B,IAAI,aAAa,KAAK,UAAU,IAAI;EACpC,IAAI,SAAS;EACb,KAAK,IAAI,WAAW,OAAO;GACzB,IAAI,IAAI,SAAS,OAAO;GACxB,IAAI,CAAC,KAAK,IAAI,KACZ;GAEF,IAAI,KAAK,UAAU,MAAM,QAAQ,MAAM,YACrC,OAAO;GAET,IAAI,UAAU,GACZ,SAAS,IAAI;EAEjB;EACA,MAAM,UAAU;EAChB,OAAO;CACT;CACA,SAAS,aAAa,GAAG,MAAM,OAAO;EACpC,IAAI,SAAS,QAAQ,KAAK,MAAM,KAAK;EACrC,OAAO;GACL;IAAE,MAAM,SAAS;IAAG,MAAM;IAAO,OAAO,KAAK;GAAI;GACjD;IAAE,MAAM,cAAc;IAAG,MAAM;IAAS,OAAO,KAAK,YAAY;GAAG;GACnE;IAAE,MAAM,kBAAkB;IAAG,MAAM;IAAS,OAAO,KAAK,gBAAgB;GAAG;GAC3E;IAAE,MAAM,cAAc;IAAG,MAAM;IAAS,OAAO,KAAK,YAAY;GAAG;GACnE;IAAE,MAAM,WAAW;IAAG,MAAM;IAAU,OAAO;GAAE;GAC/C;IAAE,MAAM,YAAY;IAAG,MAAM;IAAU,OAAO;GAAO;EACvD;CACF;CACA,SAAS,cAAc,MAAM,OAAO,OAAO;EACzC,IAAI,OAAO,CAAC;EACZ,IAAI,IAAI,IAAI,MAAM,OAAO,MAAM,KAAK;EACpC,KAAK,MAAM,EAAE,SAAS;EACtB,KAAK,WAAW,EAAE,WAAW;EAC7B,KAAK,eAAe,EAAE,WAAW;EACjC,KAAK,WAAW,EAAE,WAAW;EAC7B,EAAE,KAAK,UAAU,CAAC;EAClB,KAAK,OAAO,MAAM,EAAE,YAAY,MAAM,CAAC;EACvC,OAAO;CACT;CACA,SAAS,iBAAiB,GAAG,MAAM,MAAM,OAAO;EAC9C,IAAI,SAAS,QAAQ,KAAK,MAAM,KAAK;EACrC,IAAI,SAAS,CACX;GAAE,MAAM,YAAY;GAAG,MAAM;GAAU,OAAO;EAAO,GACrD;GAAE,MAAM,WAAW;GAAG,MAAM;GAAU,OAAO;EAAE,CACjD;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;GACpC,IAAI,UAAU,KAAK,GAAG;GACtB,OAAO,KAAK;IACV,MAAM,UAAU,IAAI,MAAM;IAC1B,MAAM;IACN,OAAO,KAAK,YAAY,YAAY;GACtC,CAAC;EACH;EACA,OAAO;CACT;CACA,SAAS,kBAAkB,MAAM,OAAO,MAAM,OAAO;EACnD,IAAI,OAAO,CAAC;EACZ,IAAI,IAAI,IAAI,MAAM,OAAO,MAAM,KAAK;EACpC,KAAK,OAAO,MAAM,EAAE,YAAY,MAAM,CAAC;EACvC,EAAE,KAAK,UAAU,CAAC;EAClB,KAAK,cAAc,CAAC;EACpB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GACjC,KAAK,YAAY,KAAK,GAAG,OAAO,EAAE,WAAW;EAE/C,OAAO;CACT;CACA,SAAS,cAAc,OAAO,OAAO;EACnC,IAAI,SAAS,IAAI,MAAM,MAAM,QAAQ;GACnC;IAAE,MAAM;IAAW,MAAM;IAAS,OAAO;GAAM;GAC/C;IAAE,MAAM;IAAgB,MAAM;IAAU,OAAO;GAAE;GACjD;IAAE,MAAM;IAAkB,MAAM;IAAU,OAAO;GAAE;GACnD;IAAE,MAAM;IAAa,MAAM;IAAU,OAAO,MAAM,KAAK;GAAO;GAC9D;IAAE,MAAM;IAAY,MAAM;IAAU,OAAO;GAAG;GAC9C;IAAE,MAAM;IAAiB,MAAM;IAAU,OAAO,MAAM,UAAU;GAAO;GACvE;IAAE,MAAM;IAAgB,MAAM;IAAU,OAAO,IAAI,MAAM,KAAK,SAAS;GAAE;EAC3E,CAAC;EACD,OAAO,eAAe,OAAO,OAAO;EACpC,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,KAAK,QAAQ,KACrC,OAAO,SAAS,OAAO,OAAO,OAAO,aAAa,GAAG,MAAM,KAAK,IAAI,KAAK,CAAC;EAE5E,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,UAAU,QAAQ,KAC1C,OAAO,SAAS,OAAO,OAAO,OAAO,iBAAiB,GAAG,MAAM,UAAU,IAAI,MAAM,MAAM,KAAK,CAAC;EAEjG,OAAO;CACT;CACA,SAAS,eAAe,MAAM,OAAO,OAAO;EAC1C,IAAI,IAAI,IAAI,MAAM,OAAO,MAAM,KAAK;EACpC,IAAI,eAAe,EAAE,WAAW;EAChC,MAAM,SAAS,iBAAiB,OAAO,iCAAiC;EACxE,IAAI,eAAe,EAAE,cAAc;EACnC,EAAE,KAAK,UAAU,CAAC;EAClB,IAAI,YAAY,EAAE,YAAY;EAC9B,IAAI,WAAW,EAAE,YAAY;EAC7B,IAAI,gBAAgB,EAAE,YAAY;EAClC,IAAI,eAAe,EAAE,YAAY;EACjC,IAAI,OAAO,CAAC;EACZ,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAC7B,KAAK,KAAK,cAAc,MAAM,QAAQ,eAAe,IAAI,UAAU,KAAK,CAAC;EAE3E,IAAI,YAAY,CAAC;EACjB,IAAI,gBAAgB,QAAQ,eAAe,YAAY;EACvD,KAAK,IAAI,IAAI,GAAG,IAAI,eAAe,KACjC,UAAU,KAAK,kBAAkB,MAAM,gBAAgB,IAAI,cAAc,MAAM,KAAK,CAAC;EAEvF,OAAO;GAAE;GAAM;EAAU;CAC3B;CACA,IAAI,OAAO;EAAE,MAAM;EAAe,OAAO;CAAe;CACxD,IAAI,aAAa,WAAW;EAC1B,OAAO;GACL,UAAU,KAAK,aAAa,OAAO,QAAQ;GAC3C,cAAc,KAAK,UAAU,OAAO,QAAQ,OAAO,UAAU,CAAC;EAChE;CACF;CACA,IAAI,aAAa,WAAW;EAC1B,IAAI,SAAS,KAAK,YAAY;EAC9B,MAAM,SAAS,WAAW,KAAK,WAAW,KAAK,WAAW,GAAG,uCAAuC;EACpG,IAAI,WAAW,GACb,OAAO,EAAE,YAAY,KAAK,WAAW,EAAE;OAClC,IAAI,WAAW,GACpB,OAAO,EAAE,YAAY,KAAK,WAAW,EAAE;OAClC,IAAI,WAAW,GACpB,OAAO,EAAE,YAAY,KAAK,WAAW,EAAE;CAE3C;CACA,IAAI,WAAW,WAAW;EACxB,OAAO,KAAK,UAAU,OAAO,QAAQ,UAAU,CAAC;CAClD;CACA,IAAI,eAAe,WAAW;EAC5B,OAAO;GACL,UAAU,KAAK,aAAa,OAAO,QAAQ;GAC3C,WAAW,KAAK,UAAU,OAAO,QAAQ,QAAQ,CAAC;EACpD;CACF;CACA,IAAI,gBAAgB,WAAW;EAC7B,KAAK,YAAY;EACjB,OAAO,KAAK,UAAU,OAAO,QAAQ,OAAO,QAAQ,CAAC;CACvD;CACA,SAAS,eAAe,MAAM,OAAO;EACnC,QAAQ,SAAS;EACjB,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK;EAC9B,IAAI,eAAe,EAAE,aAAa,CAAC;EACnC,MAAM,SACJ,iBAAiB,KAAK,iBAAiB,OAAO,iBAAiB,KAC/D,iCACF;EACA,IAAI,QAAQ;GACV,SAAS;GACT,UAAU,EAAE,aAAa,OAAO,QAAQ;GACxC,YAAY,EAAE,aAAa,UAAU;GACrC,cAAc,EAAE,aAAa,YAAY;GACzC,oBAAoB,EAAE,aAAa,OAAO,QAAQ;EACpD;EACA,IAAI,gBAAgB,KAClB,MAAM,gBAAgB,EAAE,aAAa,aAAa;EAEpD,OAAO;CACT;CACA,IAAI,OAAO,EAAE,OAAO,eAAe;CACnC,IAAI,oBAAoB,IAAI,MAAM,EAAE;CACpC,kBAAkB,KAAK,SAAS,eAAe;EAC7C,IAAI,QAAQ,KAAK,SAAS,KAAK;EAC/B,IAAI,YAAY,KAAK,YAAY;EACjC,IAAI,cAAc,GAChB,OAAO;GACL,WAAW;GACX,UAAU,KAAK,aAAa,OAAO,QAAQ;GAC3C,OAAO,KAAK,iBAAiB;EAC/B;OACK,IAAI,cAAc,GACvB,OAAO;GACL,WAAW;GACX,UAAU,KAAK,aAAa,OAAO,QAAQ;GAC3C,QAAQ,KAAK,qBAAqB;EACpC;EAEF,MAAM,OAAO,OAAO,OAAO,MAAM,SAAS,EAAE,IAAI,6CAA6C;CAC/F;CACA,kBAAkB,KAAK,SAAS,eAAe;EAC7C,IAAI,QAAQ,KAAK,SAAS,KAAK;EAC/B,IAAI,YAAY,KAAK,YAAY;EACjC,MAAM,OACJ,cAAc,KAAK,cAAc,GACjC,OAAO,MAAM,SAAS,EAAE,IAAI,6CAC9B;EACA,IAAI,WAAW,KAAK,aAAa,OAAO,QAAQ;EAChD,IAAI,eAAe,KAAK,YAAY;EACpC,IAAI,eAAe,KAAK,YAAY;EACpC,IAAI,cAAc,GAChB,OAAO;GACL;GACA;GACA;GACA;GACA,UAAU,KAAK,UACb,OAAO,QACL,OAAO,KAAK,WAAW;IACrB,OAAO;KAEL,aAAa,KAAK,YAAY;KAC9B,QAAQ,KAAK,iBAAiB,YAAY;KAC1C,QAAQ,KAAK,iBAAiB,YAAY;IAC5C;GACF,CAAC,CACH,CACF;EACF;OACK,IAAI,cAAc,GAAG;GAC1B,IAAI,YAAY,KAAK,aAAa,OAAO,QAAQ;GACjD,IAAI,YAAY,KAAK,aAAa,OAAO,QAAQ;GACjD,IAAI,cAAc,KAAK,YAAY;GACnC,IAAI,cAAc,KAAK,YAAY;GACnC,OAAO;IAEL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,cAAc,KAAK,UACjB,aACA,OAAO,KAAK,aAAa,WAAW;KAClC,OAAO;MACL,QAAQ,KAAK,iBAAiB,YAAY;MAC1C,QAAQ,KAAK,iBAAiB,YAAY;KAC5C;IACF,CAAC,CACH;GACF;EACF;CACF;CACA,kBAAkB,KAAK,SAAS,eAAe;EAC7C,OAAO,EAAE,OAAO,8BAA8B;CAChD;CACA,kBAAkB,KAAK,SAAS,eAAe;EAC7C,OAAO,EAAE,OAAO,8BAA8B;CAChD;CACA,kBAAkB,KAAK,SAAS,eAAe;EAC7C,OAAO,EAAE,OAAO,8BAA8B;CAChD;CACA,kBAAkB,KAAK,SAAS,eAAe;EAC7C,OAAO,EAAE,OAAO,8BAA8B;CAChD;CACA,kBAAkB,KAAK,SAAS,eAAe;EAC7C,OAAO,EAAE,OAAO,8BAA8B;CAChD;CACA,kBAAkB,KAAK,SAAS,eAAe;EAC7C,OAAO,EAAE,OAAO,8BAA8B;CAChD;CACA,kBAAkB,KAAK,SAAS,eAAe;EAC7C,OAAO,EAAE,OAAO,8BAA8B;CAChD;CACA,SAAS,eAAe,MAAM,OAAO;EACnC,QAAQ,SAAS;EACjB,IAAI,IAAI,IAAI,OAAO,MAAM,KAAK;EAC9B,IAAI,eAAe,EAAE,aAAa,CAAC;EACnC,MAAM,SAAS,iBAAiB,KAAK,iBAAiB,KAAK,oCAAoC,YAAY;EAC3G,IAAI,iBAAiB,GACnB,OAAO;GACL,SAAS;GACT,SAAS,EAAE,gBAAgB;GAC3B,UAAU,EAAE,iBAAiB;GAC7B,SAAS,EAAE,gBAAgB,iBAAiB;EAC9C;OAEA,OAAO;GACL,SAAS;GACT,SAAS,EAAE,gBAAgB;GAC3B,UAAU,EAAE,iBAAiB;GAC7B,SAAS,EAAE,gBAAgB,iBAAiB;GAC5C,YAAY,EAAE,2BAA2B;EAC3C;CAEJ;CACA,IAAI,mBAAmB,IAAI,MAAM,EAAE;CACnC,SAAS,cAAc,OAAO;EAC5B,OAAO,IAAI,MAAM,MAAM,QAAQ;GAC7B;IAAE,MAAM;IAAW,MAAM;IAAS,OAAO;GAAM;GAC/C;IAAE,MAAM;IAAW,MAAM;IAAS,OAAO,IAAI,MAAM,WAAW,MAAM,OAAO;GAAE;GAC7E;IAAE,MAAM;IAAY,MAAM;IAAS,OAAO,IAAI,MAAM,YAAY,MAAM,QAAQ;GAAE;GAChF;IAAE,MAAM;IAAW,MAAM;IAAS,OAAO,IAAI,MAAM,WAAW,MAAM,SAAS,gBAAgB;GAAE;EACjG,CAAC;CACH;CACA,IAAI,OAAO;EAAE,OAAO;EAAgB,MAAM;CAAc;CACxD,SAAS,sBAAsB,GAAG;EAChC,IAAI,QAAQ,CAAC;EACb,EAAE,KAAK,QAAQ;EACf,IAAI,kBAAkB,EAAE,YAAY;EACpC,MAAM,SAAS,oBAAoB,GAAG,qCAAqC;EAC3E,EAAE,KAAK,UAAU,CAAC;EAClB,IAAI,SAAS,EAAE,YAAY;EAC3B,EAAE,KAAK,UAAU,CAAC;EAClB,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK,GAAG;GAClC,IAAI,YAAY,EAAE,YAAY;GAC9B,IAAI,aAAa,EAAE,YAAY;GAC/B,IAAI,QAAQ,EAAE,WAAW;GACzB,MAAM,YAAY,MAAM,cAAc;EACxC;EACA,OAAO;CACT;CACA,SAAS,kBAAkB,GAAG;EAC5B,IAAI,QAAQ,CAAC;EACb,EAAE,KAAK,QAAQ;EAEf,IADc,EAAE,WACN,IAAI,GACZ,QAAQ,KAAK,4CAA4C;EAE3D,EAAE,KAAK,OAAO;EAEd,IAAI,kBADW,EAAE,YACY,IAAI;EACjC,EAAE,KAAK,QAAQ;EACf,IAAI,oBAAoB,GAAG;GACzB,IAAI,SAAS,EAAE,YAAY;GAC3B,EAAE,KAAK,UAAU,CAAC;GAClB,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK,GAAG;IAClC,IAAI,YAAY,EAAE,YAAY;IAC9B,IAAI,aAAa,EAAE,YAAY;IAC/B,IAAI,QAAQ,EAAE,WAAW;IACzB,MAAM,YAAY,MAAM,cAAc;GACxC;EACF;EACA,OAAO;CACT;CACA,SAAS,eAAe,MAAM,OAAO;EACnC,IAAI,IAAI,IAAI,MAAM,OAAO,MAAM,KAAK;EACpC,IAAI,eAAe,EAAE,YAAY;EACjC,IAAI,iBAAiB,GACnB,OAAO,sBAAsB,CAAC;OACzB,IAAI,iBAAiB,GAC1B,OAAO,kBAAkB,CAAC;OAE1B,MAAM,IAAI,MAAM,qCAAqC,eAAe,IAAI;CAE5E;CACA,IAAI,OAAO,EAAE,OAAO,eAAe;CACnC,SAAS,eAAe,MAAM,OAAO,WAAW,cAAc;EAC5D,IAAI,IAAI,IAAI,MAAM,OAAO,MAAM,KAAK;EACpC,IAAI,UAAU,eAAe,EAAE,cAAc,EAAE;EAC/C,IAAI,eAAe,CAAC;EACpB,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,GAAG,KAAK,GAAG;GACzC,IAAI,cAAc,QAAQ,KAAK,CAAC;GAChC,IAAI,cACF,eAAe;GAEjB,aAAa,KAAK,WAAW;EAC/B;EACA,OAAO;CACT;CACA,IAAI,OAAO,EAAE,OAAO,eAAe;CACnC,SAAS,0BAA0B,MAAM,WAAW;EAClD,IAAI,eAAe,CAAC;EACpB,IAAI,IAAI;EACR,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK,GAAG;GACrC,IAAI,MAAM,MAAM,OAAO,MAAM,CAAC;GAC9B,IAAI,WAAW,MAAM,SAAS,MAAM,IAAI,CAAC;GACzC,IAAI,SAAS,MAAM,SAAS,MAAM,IAAI,CAAC;GACvC,IAAI,SAAS,MAAM,SAAS,MAAM,IAAI,EAAE;GACxC,aAAa,KAAK;IAAE;IAAK;IAAU;IAAQ;IAAQ,aAAa;GAAM,CAAC;GACvE,KAAK;EACP;EACA,OAAO;CACT;CACA,SAAS,sBAAsB,MAAM,WAAW;EAC9C,IAAI,eAAe,CAAC;EACpB,IAAI,IAAI;EACR,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK,GAAG;GACrC,IAAI,MAAM,MAAM,OAAO,MAAM,CAAC;GAC9B,IAAI,SAAS,MAAM,SAAS,MAAM,IAAI,CAAC;GACvC,IAAI,aAAa,MAAM,SAAS,MAAM,IAAI,CAAC;GAC3C,IAAI,aAAa,MAAM,SAAS,MAAM,IAAI,EAAE;GAC5C,IAAI,cAAc,KAAK;GACvB,IAAI,aAAa,YACf,cAAc;QAEd,cAAc;GAEhB,aAAa,KAAK;IAChB;IACA;IACA;IACA,kBAAkB;IAClB,QAAQ;GACV,CAAC;GACD,KAAK;EACP;EACA,OAAO;CACT;CACA,SAAS,gBAAgB,MAAM,YAAY;EACzC,IAAI,WAAW,gBAAgB,QAAQ;GACrC,IAAI,WAAW,IAAI,WAAW,KAAK,QAAQ,WAAW,SAAS,GAAG,WAAW,mBAAmB,CAAC;GACjG,IAAI,YAAY,IAAI,WAAW,WAAW,MAAM;GAChD,YAAY,UAAU,SAAS;GAC/B,IAAI,UAAU,eAAe,WAAW,QACtC,MAAM,IAAI,MAAM,0BAA0B,WAAW,MAAM,oDAAoD;GAGjH,OAAO;IAAE,MAAM,IADA,SAAS,UAAU,QAAQ,CACxB;IAAG,QAAQ;GAAE;EACjC,OACE,OAAO;GAAE;GAAM,QAAQ,WAAW;EAAO;CAE7C;CACA,SAAS,aAAa,QAAQ,KAAK;EACjC,MAAM,QAAQ,KAAK,KAAK,QAAQ,OAAO,CAAC,IAAI;EAC5C,IAAI;EACJ,IAAI;EACJ,IAAI,OAAO,IAAI,KAAK,EAAE,OAAO,KAAK,CAAC;EACnC,IAAI,OAAO,IAAI,SAAS,QAAQ,CAAC;EACjC,IAAI;EACJ,IAAI,eAAe,CAAC;EACpB,IAAI,YAAY,MAAM,OAAO,MAAM,CAAC;EACpC,IAAI,cAAc,OAAO,aAAa,GAAG,GAAG,GAAG,CAAC,KAAK,cAAc,UAAU,cAAc,QAAQ;GACjG,KAAK,iBAAiB;GACtB,YAAY,MAAM,UAAU,MAAM,CAAC;GACnC,eAAe,0BAA0B,MAAM,SAAS;EAC1D,OAAO,IAAI,cAAc,QAAQ;GAC/B,KAAK,iBAAiB;GACtB,YAAY,MAAM,UAAU,MAAM,CAAC;GACnC,eAAe,0BAA0B,MAAM,SAAS;EAC1D,OAAO,IAAI,cAAc,QAAQ;GAC/B,IAAI,SAAS,MAAM,OAAO,MAAM,CAAC;GACjC,IAAI,WAAW,OAAO,aAAa,GAAG,GAAG,GAAG,CAAC,GAC3C,KAAK,iBAAiB;QACjB,IAAI,WAAW,QACpB,KAAK,iBAAiB;QAEtB,MAAM,IAAI,MAAM,iCAAiC,SAAS;GAE5D,YAAY,MAAM,UAAU,MAAM,EAAE;GACpC,eAAe,sBAAsB,MAAM,SAAS;EACtD,OACE,MAAM,IAAI,MAAM,oCAAoC,SAAS;EAE/D,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK,GAAG;GACrC,IAAI,aAAa,aAAa;GAC9B,IAAI,SAAS,KAAK;GAClB,QAAQ,WAAW,KAAnB;IACE,KAAK;KACH,SAAS,gBAAgB,MAAM,UAAU;KACzC,KAAK,OAAO,OAAO,KAAK,MAAM,OAAO,MAAM,OAAO,MAAM;KACxD,KAAK,WAAW,IAAI,aAAa,KAAK,OAAO,IAAI;KACjD;IACF,KAAK;KACH,SAAS,gBAAgB,MAAM,UAAU;KACzC,IAAI,IAAI,MAAM,OAAO,OAAO,MAAM,OAAO,MAAM;KAC/C,KAAK,OAAO,MAAM,EAAE,eAAe,WAAW,SAAS,CAAC;KACxD;IACF,KAAK;KACH,iBAAiB;KACjB;IACF,KAAK;KACH,SAAS,gBAAgB,MAAM,UAAU;KACzC,IAAI,IAAI,MAAM,OAAO,OAAO,MAAM,OAAO,MAAM;KAC/C,KAAK,OAAO,OAAO,EAAE,cAAc,WAAW,MAAM;KACpD;IACF,KAAK;KACH,SAAS,gBAAgB,MAAM,UAAU;KACzC,KAAK,OAAO,OAAO,KAAK,MAAM,OAAO,MAAM,OAAO,MAAM;KACxD,KAAK,aAAa,KAAK,OAAO,KAAK;KACnC,mBAAmB,KAAK,OAAO,KAAK;KACpC;IACF,KAAK;KACH,SAAS,gBAAgB,MAAM,UAAU;KACzC,KAAK,OAAO,OAAO,KAAK,MAAM,OAAO,MAAM,OAAO,MAAM;KACxD,KAAK,WAAW,KAAK,OAAO,KAAK;KACjC,KAAK,YAAY,KAAK,OAAO,KAAK;KAClC,KAAK,mBAAmB,KAAK,OAAO,KAAK;KACzC;IACF,KAAK;KACH,iBAAiB;KACjB;IACF,KAAK;KACH,SAAS,gBAAgB,MAAM,UAAU;KACzC,YAAY,KAAK,MAAM,OAAO,MAAM,OAAO,MAAM;KACjD;IACF,KAAK;KACH,SAAS,gBAAgB,MAAM,UAAU;KACzC,KAAK,OAAO,OAAO,KAAK,MAAM,OAAO,MAAM,OAAO,MAAM;KACxD,KAAK,YAAY,KAAK,OAAO,KAAK;KAClC;IACF,KAAK;KACH,iBAAiB;KACjB;IACF,KAAK;KACH,SAAS,gBAAgB,MAAM,UAAU;KACzC,KAAK,OAAO,MAAM,IAAI,MAAM,OAAO,MAAM,OAAO,MAAM;KACtD;IACF,KAAK;KACH,SAAS,gBAAgB,MAAM,UAAU;KACzC,KAAK,OAAO,OAAO,KAAK,MAAM,OAAO,MAAM,OAAO,MAAM;KACxD,KAAK,aAAa,IAAI,WAAW,KAAK,OAAO,IAAI;KACjD;IACF,KAAK;KACH,SAAS,gBAAgB,MAAM,UAAU;KACzC,IAAI,IAAI,MAAM,OAAO,OAAO,MAAM,OAAO,MAAM;KAC/C,KAAK,OAAO,OAAO,EAAE,cAAc,WAAW,MAAM;KACpD;IACF,KAAK;KACH,iBAAiB;KACjB;IACF,KAAK;KACH,iBAAiB;KACjB;IACF,KAAK;KACH,gBAAgB;KAChB;IACF,KAAK;KACH,iBAAiB;KACjB;IACF,KAAK;KACH,iBAAiB;KACjB;IACF,KAAK;KACH,iBAAiB;KACjB;IACF,KAAK;KACH,iBAAiB;KACjB;IACF,KAAK;KACH,iBAAiB;KACjB;GACJ;EACF;EACA,IAAI,YAAY,gBAAgB,MAAM,cAAc;EACpD,KAAK,OAAO,OAAO,MAAM,MAAM,UAAU,MAAM,UAAU,QAAQ,SAAS;EAC1E,KAAK,QAAQ,KAAK,OAAO;EACzB,IAAI,kBAAkB,gBAAgB;GACpC,IAAI,eAAe,qBAAqB;GACxC,IAAI,YAAY,gBAAgB,MAAM,cAAc;GACpD,IAAI,cAAc,KAAK,MAAM,UAAU,MAAM,UAAU,QAAQ,KAAK,WAAW,YAAY;GAC3F,IAAI,YAAY,gBAAgB,MAAM,cAAc;GACpD,KAAK,SAAS,KAAK,MAAM,UAAU,MAAM,UAAU,QAAQ,aAAa,MAAM,GAAG;EACnF,OAAO,IAAI,eAAe;GACxB,IAAI,WAAW,gBAAgB,MAAM,aAAa;GAClD,IAAI,MAAM,SAAS,MAAM,SAAS,QAAQ,MAAM,GAAG;EACrD,OACE,MAAM,IAAI,MAAM,gDAAgD;EAElE,IAAI,YAAY,gBAAgB,MAAM,cAAc;EACpD,KAAK,MAAM,MAAM,UAAU,MAAM,UAAU,QAAQ,KAAK,kBAAkB,KAAK,WAAW,KAAK,QAAQ,GAAG;EAC1G,cAAc,MAAM,GAAG;EACvB,IAAI,gBAAgB;GAClB,IAAI,YAAY,gBAAgB,MAAM,cAAc;GACpD,KAAK,eAAe,KAAK,MAAM,UAAU,MAAM,UAAU,MAAM;EACjE,OACE,KAAK,eAAe,CAAC;EAEvB,IAAI,gBAAgB;GAClB,IAAI,YAAY,gBAAgB,MAAM,cAAc;GACpD,KAAK,OAAO,OAAO,KAAK,MAAM,UAAU,MAAM,UAAU,MAAM;EAChE;EACA,IAAI,gBAAgB;GAClB,IAAI,YAAY,gBAAgB,MAAM,cAAc;GACpD,KAAK,OAAO,OAAO,KAAK,MAAM,UAAU,MAAM,UAAU,MAAM;GAC9D,KAAK,SAAS,KAAK;EACrB;EACA,IAAI,gBAAgB;GAClB,IAAI,YAAY,gBAAgB,MAAM,cAAc;GACpD,KAAK,OAAO,OAAO,KAAK,MAAM,UAAU,MAAM,UAAU,MAAM;EAChE;EACA,IAAI,gBAAgB;GAClB,IAAI,YAAY,gBAAgB,MAAM,cAAc;GACpD,KAAK,OAAO,OAAO,KAAK,MAAM,UAAU,MAAM,UAAU,QAAQ,KAAK,KAAK;EAC5E;EACA,IAAI,gBAAgB;GAClB,IAAI,YAAY,gBAAgB,MAAM,cAAc;GACpD,KAAK,OAAO,OAAO,KAAK,MAAM,UAAU,MAAM,UAAU,MAAM;GAC9D,KAAK,QAAQ,KAAK,OAAO;EAC3B;EACA,OAAO;CACT;CACA,OAAO,EAAE,aAAa,aAAa;AACrC,GAAG;;;ACjyXH,IAAM,YAAN,cAAwB,OAAO;CAC7B,YAAY,SAAS;EACnB,MAAM,OAAO;EACb,KAAK,WAAW;CAClB;CACA,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,MAAM,QAAQ;EACd,MAAM,SAAS,IAAI,WAAW,KAAK,OAAO;EAC1C,OAAO,QAAQ,KAAK,IAAI;EACxB,OAAO,gBAAgB,aAAa;EACpC,OAAO,iBAAiB,KAAK,aAAa;EAC1C,OAAO,mBAAmB,KAAK,eAAe;EAC9C,OAAO,KACL,KACA,SAAS,QAAQ;GACf,IAAI;IACF,OAAO,YAAY,MAAM,CAAC;GAC5B,SAAS,GAAG;IACV,IAAI,SACF,QAAQ,CAAC;SAET,QAAQ,MAAM,CAAC;IAEjB,MAAM,QAAQ,UAAU,GAAG;GAC7B;EACF,GACA,YACA,OACF;CACF;CACA,MAAM,aAAa;EACjB,SAAS,QAAQ,MAAM,UAAU;GAC/B,MAAM,QAAQ,KAAK;GACnB,MAAM,SAAS,CAAC;GAChB,MAAM,QAAQ,QAAQ,KAAK,cAAc,QAAQ;GACjD,MAAM,gBAAgB,KAAK,SAAS,KAAK;GACzC,MAAM,WAAW,OAAO,KAAK,aAAa;GAC1C,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;IACxC,MAAM,UAAU,SAAS;IACzB,MAAM,QAAQ,KAAK,OAAO,OAAO,cAAc;IAC/C,IAAI,YAAY,KAAK,GAAG;KACtB,MAAM,QAAQ;MACZ,IAAI,MAAM,MAAM,eAAe,KAAK;MACpC,OAAO,MAAM,MAAM,OAAO,KAAK;MAC/B,OAAO,MAAM,MAAM,OAAO,KAAK;MAC/B,GAAG;KACL;KACA,IAAI,UACF,MAAM,KAAK,WAAW,gBAAgB,MAAM,KAAK,QAAQ;KAE3D,MAAM,KAAK,SAAS,QAAQ,SAAS,SAAS;MAC5C,IAAI,QAAQ,KAAK,YAAY,MAAM,KACjC,QAAQ,OAAO;MAEjB,MAAM,KAAK,QAAQ,KAAK,YAAY,IAAI;MACxC,IAAI,QAAQ,MAAM,KAAK,KAAK,QAAQ,MAAM,KAAK,GAC7C,MAAM,KAAK,MAAM,QAAQ,IAAI,KAAK,IAAI,MAAM,MAAM,QAAQ,IAAI,KAAK,IAAI;MAEzE,IAAI,QAAQ,OAAO,KAAK,KAAK,QAAQ,OAAO,KAAK,GAC/C,MAAM,KAAK,MAAM,QAAQ,KAAK,KAAK,IAAI,MAAM,MAAM,QAAQ,KAAK,KAAK,IAAI;MAE3E,IAAI,QAAQ,OAAO,KAAK,KAAK,QAAQ,OAAO,KAAK,GAC/C,MAAM,KAAK,MAAM,QAAQ,KAAK,KAAK,IAAI,MAAM,MAAM,QAAQ,KAAK,KAAK,IAAI;KAE7E,CAAC;KACD,OAAO,OAAO,cAAc,MAAM,OAAO,KAAK;IAChD;GACF;GACA,OAAO;IACL;IACA,YAAY,KAAK,eAAe,UAAU;IAC1C,UAAU,MAAM,KAAK,WAAW,KAAK;IACrC,WAAW,MAAM,KAAK,YAAY,KAAK;IACvC,mBAAmB,KAAK,OAAO,KAAK;IACpC,oBAAoB,KAAK,OAAO,KAAK;IACrC,aAAa;KACX,MAAM,KAAK,OAAO,KAAK;KACvB,MAAM,KAAK,OAAO,KAAK;KACvB,MAAM,KAAK,OAAO,KAAK;KACvB,MAAM,KAAK,OAAO,KAAK;IACzB;IACA,YAAY;IACZ,2BAA2B,KAAK,OAAO;GACzC;EACF;EACA,SAAS,gBAAgB,UAAU;GACjC,MAAM,QAAQ,CAAC;GACf,IAAI;GACJ,SAAS,QAAQ,SAAS,GAAG;IAC3B,IAAI,EAAE,KAAK,YAAY,MAAM,KAAK;KAChC,OAAO,CAAC,CAAC;KACT,MAAM,KAAK,IAAI;IACjB,OAAO,IAAI,EAAE,KAAK,YAAY,MAAM,KAClC,KAAK,KAAK,CAAC;GAEf,CAAC;GACD,MAAM,WAAW,CAAC;GAClB,MAAM,QAAQ,SAAS,GAAG;IACxB,MAAM,SAAS;KACb,MAAM;KACN,GAAG,EAAE,EAAE,SAAS,GAAG;KACnB,GAAG,EAAE,EAAE,SAAS,GAAG;IACrB;IACA,SAAS,KAAK,MAAM;IACpB,KAAK,IAAI,IAAI,EAAE,SAAS,GAAG,IAAI,GAAG,KAAK;KACrC,MAAM,UAAU,EAAE;KAClB,MAAM,UAAU,EAAE,MAAM,QAAQ,KAAK;KACrC,IAAI,QAAQ,OAAO,KAAK,KAAK,QAAQ,OAAO,KAAK,GAAG;MAClD,QAAQ,KAAK,QAAQ;MACrB,QAAQ,KAAK,QAAQ;MACrB,QAAQ,KAAK,QAAQ;MACrB,QAAQ,KAAK,QAAQ;KACvB,OAAO,IAAI,QAAQ,OAAO,KAAK,KAAK,QAAQ,OAAO,KAAK,GAAG;MACzD,QAAQ,KAAK,QAAQ;MACrB,QAAQ,KAAK,QAAQ;KACvB;KACA,QAAQ,IAAI,EAAE,IAAI,GAAG;KACrB,QAAQ,IAAI,EAAE,IAAI,GAAG;KACrB,SAAS,KAAK,OAAO;IACvB;GACF,CAAC;GACD,OAAO;EACT;EACA,OAAO,QAAQ,YAAY,WAAW,GAAG,KAAK,QAAQ;CACxD;AACF;;;AC9HA,IAAM,aAAN,cAAyB,kBAAkB;CACzC,YAAY,SAAS;EACnB,MAAM,OAAO;EACb,KAAK,OAAO;CACd;CAEA,MAAM,QAAQ;EACZ,MAAM,kBAAkB,GAAG,mBAAmB,GAAG,oBAAoB,GAAG,oBAAoB,GAAG,aAAa,SAAS,iBAAiB,KAAK;GACzI,QAAQ,iBAAR;IACE,KAAK,iBACH,MAAM,IAAI,MAAM,oCAAoC,OAAO,GAAG;IAChE,KAAK,kBACH,MAAM,IAAI,MAAM,qCAAqC,OAAO,GAAG;IACjE,KAAK,mBACH,MAAM,IAAI,MAAM,yCAAyC,OAAO,GAAG;IACrE;IACA,KAAK,mBACH,MAAM,IAAI,MAAM,sCAAsC,OAAO,GAAG;GACpE;EACF,GAAG,yBAAyB,GAAG,oBAAoB,GAAG,wBAAwB,GAAG,UAAU,MAAM,QAAQ,SAAS,SAAS,WAAW,SAAS;GAC7I,MAAM,YAAY;GAClB,YAAY,CAAC,YAAY,OAAO;GAChC,IAAI,IAAI,QAAQ,KAAK,IAAI,IAAI,MAAM,GAAG,IAAI,IAAI,QAAQ,OAAO,aAAa,MAAM,MAAM,IAAI,YAAY,QAAQ,SAAS,GAAG,IAAI,SAAS,CAAC,CAAC;GACzI,OAAO,KAAK,IAAI,MAAM,QAAQ,OAAO,MAAM,MAAM,aAAa,IAAI,QAAQ,YAAY;IACpF,KAAK;IACL,OAAO,MAAM;IACb,KAAK;IACL,SAAS,OAAO,aAAa,MAAM,MAAM,IAAI,YAAY,QAAQ,SAAS,GAAG,IAAI,SAAS,CAAC,CAAC;GAC9F;GACA,IAAI,KAAK,GAAG;IACV,IAAI,UAAU,SACZ,QAAQ,OAAO,MAAM,IAAI;IAC3B,OAAO,IAAI,MAAM,MAAM,GAAG,CAAC;GAC7B;GACA,OAAO;EACT,GAAG,kBAAkB,SAAS,SAAS;GACrC,MAAM,iBAAiB,aAAa,WAAW,qCAAqC,cAAc,wCAAwC,YAAY,wBAAwB,gBAAgB,qCAAqC,SAAS;IAC1O,OAAO;IACP,QAAQ;IACR,UAAU;IACV,aAAa;IACb,QAAQ;IACR,OAAO;IACP,UAAU;IACV,OAAO;IACP,QAAQ;GACV;GACA,IAAI,MAAM;GACV,IAAI,QAAQ,OAAO,QAAQ,cAAc,EAAE,OAAO,MAAM,OAAO,IAC7D,WAAW,iBAAiB,iBAAiB;GAE/C,IAAI,EAAE,QAAQ,KAAK,MAAM,cAAc,IACrC,WAAW,mBAAmB,mBAAmB;GAEnD,OAAO,SAAS;GAChB,OAAO,cAAc,MAAM;GAC3B,OAAO,UAAU,OAAO;GACxB,OAAO,MAAM;IACX,OAAO,MAAM,OAAO;IACpB,IAAI,UAAU,MACZ;IACF,OAAO,UAAU,OAAO;IACxB,IAAI,QAAQ,KAAK,OAAO,CAAC,GAAG;KAC1B,OAAO,YAAY,OAAO;KAC1B;IACF;IACA,IAAI,QAAQ,KAAK,MAAM,QAAQ,GAC7B,OAAO,QAAQ,WAAW,MAAM,EAAE;IAEpC,IAAI,QAAQ,KAAK,MAAM,WAAW,GAChC,OAAO,WAAW,WAAW,MAAM,EAAE;IAEvC,IAAI,QAAQ,KAAK,MAAM,SAAS,GAAG;KACjC,OAAO,SAAS;KAChB,OAAO,SAAS,MAAM;IACxB;IACA,IAAI,QAAQ,KAAK,MAAM,aAAa,GAAG;KACrC,OAAO,SAAS;KAChB,OAAO,SAAS,SAAS,MAAM,IAAI,EAAE;KACrC,OAAO,QAAQ,SAAS,MAAM,IAAI,EAAE;IACtC;IACA,IAAI,OAAO,QAAQ,qBAAqB,OAAO,QAAQ,uBACrD;GACJ;GACA,IAAI,EAAE,OAAO,QAAQ,oBACnB,WAAW,mBAAmB,0BAA0B;GAE1D,IAAI,EAAE,OAAO,QAAQ,wBACnB,WAAW,mBAAmB,8BAA8B;GAE9D,OAAO;EACT,GAAG,sBAAsB,SAAS,SAAS,IAAI,IAAI;GACjD,MAAM,iBAAiB;GACvB,IAEE,iBAAiB,KAAK,iBAAiB,SACvC,MAAM,QAAQ,MAAM,MAAM,QAAQ,MAAM,QAAQ,KAAK,KAErD,OAAO,IAAI,WAAW,OAAO;GAE/B,IAAI,oBAAoB,QAAQ,MAAM,IAAI,QAAQ,KAChD,WAAW,mBAAmB,sBAAsB;GAEtD,MAAM,YAAY,IAAI,WAAW,IAAI,KAAK,EAAE;GAC5C,IAAI,CAAC,UAAU,QACb,WAAW,mBAAmB,iCAAiC;GAEjE,IAAI,SAAS,GAAG,MAAM;GACtB,MAAM,UAAU,IAAI;GACpB,MAAM,YAAY,IAAI,WAAW,CAAC;GAClC,MAAM,kBAAkB,IAAI,WAAW,OAAO;GAC9C,IAAI,gBAAgB;GACpB,OAAO,gBAAgB,KAAK,MAAM,QAAQ,YAAY;IACpD,IAAI,MAAM,IAAI,QAAQ,YACpB,WAAW,eAAe;IAE5B,UAAU,KAAK,QAAQ;IACvB,UAAU,KAAK,QAAQ;IACvB,UAAU,KAAK,QAAQ;IACvB,UAAU,KAAK,QAAQ;IACvB,IAAI,KAAK,UAAU,MAAM,KAAK,UAAU,OAAO,UAAU,MAAM,IAAI,UAAU,OAAO,gBAClF,WAAW,mBAAmB,0BAA0B;IAE1D,IAAI,MAAM,GAAG;IACb,OAAO,MAAM,WAAW,MAAM,QAAQ,YAAY;KAChD,QAAQ,QAAQ;KAChB,MAAM,eAAe,QAAQ;KAC7B,IAAI,cACF,SAAS;KACX,IAAI,MAAM,SAAS,MAAM,QAAQ,SAC/B,WAAW,mBAAmB,mBAAmB;KAEnD,IAAI,cAAc;MAChB,MAAM,YAAY,QAAQ;MAC1B,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KACzB,gBAAgB,SAAS;KAE7B,OAAO;MACL,gBAAgB,IAAI,QAAQ,SAAS,KAAK,MAAM,KAAK,GAAG,GAAG;MAC3D,OAAO;MACP,OAAO;KACT;IACF;IACA,MAAM,IAAI;IACV,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;KAC1B,IAAI,MAAM;KACV,UAAU,UAAU,gBAAgB,IAAI;KACxC,OAAO;KACP,UAAU,SAAS,KAAK,gBAAgB,IAAI;KAC5C,OAAO;KACP,UAAU,SAAS,KAAK,gBAAgB,IAAI;KAC5C,OAAO;KACP,UAAU,SAAS,KAAK,gBAAgB,IAAI;KAC5C,UAAU;IACZ;IACA;GACF;GACA,OAAO;EACT;EACA,MAAM,qBAAqB,SAAS,aAAa,cAAc,WAAW,YAAY;GACpF,MAAM,IAAI,YAAY,eAAe;GACrC,MAAM,QAAQ,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI;GACrC,UAAU,aAAa,KAAK,YAAY,eAAe,KAAK;GAC5D,UAAU,aAAa,KAAK,YAAY,eAAe,KAAK;GAC5D,UAAU,aAAa,KAAK,YAAY,eAAe,KAAK;GAC5D,UAAU,aAAa,KAAK;EAC9B;EACA,MAAM,oBAAoB,SAAS,aAAa,cAAc,WAAW,YAAY;GACnF,MAAM,IAAI,YAAY,eAAe;GACrC,MAAM,QAAQ,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI;GACrC,UAAU,aAAa,KAAK,UAAU,YAAY,KAAK,IAAI,YAAY,eAAe,KAAK,OAAO,KAAK,CAAC;GACxG,UAAU,aAAa,KAAK,UAAU,YAAY,KAAK,IAAI,YAAY,eAAe,KAAK,OAAO,KAAK,CAAC;GACxG,UAAU,aAAa,KAAK,UAAU,YAAY,KAAK,IAAI,YAAY,eAAe,KAAK,OAAO,KAAK,CAAC;GACxG,UAAU,aAAa,KAAK,UAAU,YAAY,CAAC;EACrD;EACA,MAAM,YAAY,IAAI,WAAW,MAAM;EACvC,UAAU,MAAM;EAChB,MAAM,mBAAmB,gBAAgB,SAAS;EAClD,MAAM,IAAI,iBAAiB,OAAO,IAAI,iBAAiB,QAAQ,kBAAkB,oBAAoB,UAAU,SAAS,UAAU,GAAG,GAAG,GAAG,CAAC;EAC5I,IAAI,MAAM;EACV,IAAI;EACJ,QAAQ,KAAK,MAAb;GACE,KAAK;IACH,cAAc,gBAAgB,SAAS;IACvC,MAAM,aAAa,IAAI,aAAa,cAAc,CAAC;IACnD,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,KAC/B,mBAAmB,iBAAiB,IAAI,GAAG,YAAY,IAAI,CAAC;IAE9D,OAAO;IACP,OAAO;IACP;GACF,KAAK;IACH,cAAc,gBAAgB,SAAS;IACvC,MAAM,YAAY,IAAI,YAAY,cAAc,CAAC;IACjD,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,KAC/B,kBAAkB,iBAAiB,IAAI,GAAG,WAAW,IAAI,CAAC;IAE5D,OAAO;IACP,OAAO;IACP;GACF,SACE,MAAM,IAAI,MAAM,yCAAyC,KAAK,IAAI;EACtE;EACA,OAAO;GACL,OAAO;GACP,QAAQ;GACR;GACA,QAAQ,iBAAiB;GACzB,OAAO,iBAAiB;GACxB,UAAU,iBAAiB;GAC3B;EACF;CACF;CACA,YAAY,OAAO;EACjB,KAAK,OAAO;EACZ,OAAO;CACT;CACA,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,SAAS,eAAe,SAAS,SAAS;GACxC,QAAQ,QAAQ,MAAhB;IACE,KAAK;IACL,KAAK;KACH,IAAI,gBAAgB,SAClB,QAAQ,aAAa;UAErB,QAAQ,WAAW;KACrB,QAAQ,YAAY;KACpB,QAAQ,YAAY;KACpB,QAAQ,kBAAkB;KAC1B,QAAQ,QAAQ;KAChB;GACJ;GACA,IAAI,QACF,OAAO,SAAS,OAAO;EAC3B;EACA,OAAO,MAAM,KAAK,KAAK,gBAAgB,YAAY,OAAO;CAC5D;AACF;;;AC7OA,IAAM,eAAN,cAA2B,OAAO;CAChC,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,IAAI,QAAQ;EACZ,IAAI,OAAO,MAAM,SAAS,KAAK,YAAY,eAAe,GAAG,IAAI,MAAM;EACvE,IAAI,SAAS,IAAI,WAAW,MAAM,OAAO;EACzC,OAAO,QAAQ,MAAM,IAAI;EACzB,OAAO,gBAAgB,aAAa;EACpC,OAAO,iBAAiB,MAAM,aAAa;EAC3C,OAAO,mBAAmB,MAAM,eAAe;EAC/C,OAAO,KACL,KACA,SAAS,QAAQ;GACf,IAAI;IACF,OAAO,MAAM,MAAM,QAAQ,IAAI,CAAC;GAClC,SAAS,GAAG;IACV,IAAI,SACF,QAAQ,CAAC;SAET,QAAQ,MAAM,CAAC;IAEjB,MAAM,QAAQ,UAAU,GAAG;GAC7B;EACF,GACA,YACA,OACF;CACF;CACA,MAAM,QAAQ,MAAM;EAClB,IAAI,gBAAgB,IAAI,cAAc,KAAK,OAAO;EAClD,cAAc,QAAQ,KAAK,gBAAgB,IAAI,EAAE,eAAe,KAAK,WAAW;EAChF,IAAI,YAAY,CAAC;EACjB,UAAU,WAAW,MAAM;GACzB,YAAY,MAAM,QAAQ;IACxB,KAAK,OAAO;IACZ,KAAK,SAAS,OAAO,MAAM;IAC3B,KAAK,WAAW,IAAI,QAAQ;IAC5B,KAAK,aAAa,IAAI,WAAW;IACjC,KAAK,QAAQ,IAAI,QAAQ,GAAG,GAAG,CAAC;IAChC,KAAK,OAAO,UAAU,KAAK,UAAU,KAAK,YAAY,KAAK,KAAK;IAChE,KAAK,QAAQ,WAAW;KAEtB,OAAO,IADK,UAAU,SAAS,KAAK,MAAM,KAAK,MACxC;IACT;IACA,KAAK,OAAO,SAAS,SAAS,OAAO;KACnC,SAAS,KAAK;KACd,IAAI,OAAO,QAAQ,OAAO,KAAK;KAC/B,IAAI,IAAI,QAAQ;KAChB,IAAI,KAAK,IAAI;KACb,IAAI,SAAS,KAAK;KAClB,IAAI,SAAS,KAAK;KAClB,IAAI,UAAU,QAAQ;KACtB,IAAI,UAAU,QAAQ;KACtB,UAAU,SAAS,WAAW,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI;KAC9D,UAAU,SAAS,WAAW,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI;KAC9D,UAAU,SAAS,WAAW,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI;KAC9D,UAAU,SAAS,YAAY,IAAI,OAAO,GAAG,OAAO,GAAG,OAAO,GAAG,OAAO,CAAC;KACzE,UAAU,SAAS,YAAY,MAAM,SAAS,CAAC;KAC/C,OAAO,UAAU,SAAS,cAAc,QACtC,UAAU,SAAS,YACnB,UAAU,SAAS,aACnB,UAAU,SAAS,YACrB;IACF;GACF;EACF;EACA,UAAU,SAAS,aAAa,IAAI,QAAQ;EAC5C,UAAU,SAAS,cAAc,IAAI,WAAW;EAChD,UAAU,SAAS,eAAe,IAAI,QAAQ,GAAG,GAAG,CAAC;EACrD,UAAU,SAAS,gBAAgB,IAAI,QAAQ;EAC/C,UAAU,gBAAgB,WAAW;GACnC,KAAK,OAAO,CAAC;GACb,KAAK,SAAS;GACd,KAAK,OAAO;GACZ,KAAK,SAAS;GACd,KAAK,cAAc,CAAC;GACpB,KAAK,MAAM;GACX,KAAK,SAAS,SAAS,KAAK;IAC1B,KAAK,KAAK,KAAK,GAAG;GACpB;GACA,KAAK,OAAO,WAAW;IACrB,KAAK,SAAS;IACd,IAAI,KAAK,KAAK,SAAS,GACrB,KAAK,SAAS,KAAK,KAAK,KAAK,KAAK,SAAS,GAAG;SAE9C,KAAK,SAAS;IAChB,IAAI,CAAC,KAAK,KACR;IACF,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,KAAK,KAAK,KAC1C,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,KACpC,IAAI,KAAK,KAAK,GAAG,QAAQ,GAAG;KAC1B,KAAK,YAAY,KAAK;KACtB;IACF,OAAO,IAAI,KAAK,KAAK,GAAG,OAAO,IAAI,KAAK,OAAO,KAAK,KAAK,IAAI,MAAM,KAAK,KAAK,IAAI,GAAG,QAAQ,IAAI,KAAK,KAAK;KACxG,KAAK,YAAY,KAAK;KACtB;IACF;GAGN;GACA,KAAK,iBAAiB,SAAS,MAAM;IACnC,IAAI,MAAM,KAAK;IACf,KAAK,SAAS,KAAK;IACnB,IAAI,QAAQ,KAAK,UAAU,GAAG;IAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAChC,KAAK,OAAO,IAAI,UAAU,SAAS,IAAI,OAAO,MAAM,GAAG,MAAM,MAAM,GAAG,QAAQ,GAAG,IAAI,CAAC;IAExF,KAAK,KAAK;GACZ;GACA,KAAK,mBAAmB,SAAS,MAAM;IACrC,IAAI,QAAQ,KAAK;IACjB,IAAI,MAAM,KAAK;IACf,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAChC,KAAK,OAAO,IAAI,UAAU,SAAS,IAAI,OAAO,MAAM,GAAG,MAAM,MAAM,GAAG,MAAM,CAAC;IAE/E,KAAK,KAAK;GACZ;GACA,KAAK,WAAW,WAAW;IACzB,KAAK,KAAK,KAAK,KAAK,WAAW;GACjC;GACA,KAAK,cAAc,SAAS,GAAG,GAAG;IAChC,OAAO,EAAE,OAAO,EAAE;GACpB;GACA,KAAK,QAAQ,WAAW;IACtB,IAAI,IAAI,IAAI,UAAU,cAAc;IACpC,EAAE,SAAS,KAAK;IAChB,EAAE,OAAO,KAAK;IACd,EAAE,SAAS,KAAK;IAChB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,KACpC,EAAE,OAAO,KAAK,KAAK,GAAG,MAAM,CAAC;IAE/B,EAAE,KAAK;IACP,OAAO;GACT;GACA,KAAK,WAAW,SAAS,MAAM,aAAa;IAC1C,IAAI,CAAC,aACH,cAAc,UAAU;IAC1B,KAAK,SAAS,YAAY,MAAM,KAAK,MAAM;GAC7C;GACA,KAAK,iBAAiB,SAAS,MAAM;IACnC,QAAQ,KAAK;IACb,OAAO,KAAK,MAAM,IAAI;IACtB,OAAO,KAAK,YAAY,SAAS;GACnC;GACA,KAAK,UAAU,SAAS,MAAM;IAC5B,OAAO,KAAK,IAAI,IAAI;IACpB,IAAI,KAAK,QACP,OAAO,OAAO,KAAK,SAAS;IAC9B,IAAI,OAAO;IACX,IAAI,OAAO;IACX,KAAK,IAAI,IAAI,KAAK,eAAe,IAAI,GAAG,IAAI,KAAK,KAAK,QAAQ,KAC5D,IAAI,KAAK,KAAK,GAAG,QAAQ,MAAM;KAC7B,OAAO,KAAK,KAAK;KACjB,OAAO,KAAK,KAAK;KACjB;IACF,OAAO,IAAI,KAAK,KAAK,GAAG,OAAO,QAAQ,KAAK,KAAK,IAAI,MAAM,KAAK,KAAK,IAAI,GAAG,OAAO,MAAM;KACvF,OAAO,KAAK,KAAK;KACjB,OAAO,KAAK,KAAK,IAAI;KACrB;IACF,OAAO,IAAI,KAAK,KAAK,GAAG,OAAO,QAAQ,KAAK,KAAK,KAAK,SAAS,GAAG;KAChE,OAAO,KAAK,KAAK;KACjB,OAAO,KAAK,KAAK,GAAG,MAAM;KAC1B,KAAK,QAAQ,KAAK,SAAS;KAC3B;IACF;IAEF,IAAI,QAAQ,QAAQ,SAAS,MAAM;KACjC,KAAK,OAAO,mBAAmB;KAC/B,KAAK,OAAO,OAAO,KAAK,KAAK,KAAK,MAAM,IAAI,CAAC;KAC7C,KAAK,OAAO,yBAAyB;KACrC;IACF;IACA,IAAI,QAAQ,QAAQ,QAAQ,MAAM;KAChC,KAAK,OAAO,mBAAmB;KAC/B,KAAK,OAAO,OAAO,KAAK,KAAK,MAAM;KACnC,KAAK,OAAO,yBAAyB;KACrC;IACF;GACF;EACF;EACA,UAAU,6BAA6B,SAAS,MAAM,QAAQ;GAC5D,SAAS,KAAK,MAAM,MAAM;IACxB,IAAI,KAAK,QAAQ,MACf,OAAO;IACT,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,QAAQ,KAAK;KAC7C,IAAI,IAAI,KAAK,KAAK,SAAS,IAAI,IAAI;KACnC,IAAI,GACF,OAAO;IACX;IACA,OAAO;GACT;GACA,OAAO,KAAK,MAAM,OAAO,IAAI;EAC/B;EACA,UAAU,YAAY,WAAW;GAC/B,KAAK,SAAS,CAAC;GACf,KAAK,SAAS;GACd,KAAK,WAAW,SAAS,OAAO;IAC9B,KAAK,OAAO,KAAK,KAAK;IACtB,KAAK,SAAS,KAAK,IAAI,MAAM,QAAQ,KAAK,MAAM;GAClD;GACA,KAAK,UAAU,SAAS,MAAM;IAC5B,KAAK,OAAO;IACZ,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KACtC,KAAK,OAAO,GAAG,QAAQ,IAAI;GAC/B;GACA,KAAK,QAAQ,SAAS,QAAQ,aAAa;IACzC,IAAI,CAAC,aACH,cAAc,UAAU;IAC1B,IAAI,IAAI,IAAI,UAAU,UAAU;IAChC,EAAE,SAAS;IACX,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KAAK;KAC3C,IAAI,QAAQ,KAAK,OAAO,GAAG,MAAM;KACjC,MAAM,SAAS,QAAQ,WAAW;KAClC,EAAE,SAAS,KAAK;IAClB;IACA,OAAO;GACT;EACF;EACA,IAAI,wBAAwB;EAC5B,IAAI,uBAAuB;EAC3B,IAAI,yBAAyB;EAC7B,IAAI,sBAAsB;EAC1B,IAAI,0BAA0B;EAC9B,IAAI,uBAAuB;EAC3B,IAAI,sBAAsB;EAC1B,IAAI,2BAA2B;EAC/B,IAAI,sBAAsB;EAC1B,IAAI,0BAA0B;EAC9B,IAAI,kCAAkC;EACtC,IAAI,4BAA4B;EAChC,IAAI,0BAA0B;EAC9B,IAAI,0CAA0C;EAC9C,IAAI,gCAAgC;EACpC,IAAI,6BAA6B;EACjC,IAAI,8BAA8B;EAClC,IAAI,iCAAiC;;;;EAIrC,IAAI,4BAA4B;;;;;;;;EAQhC,IAAI,qBAAqB;;;;;;EAMzB,IAAI,wBAAwB;EAC5B,IAAI,wBAAwB;EAC5B,IAAI,wBAAwB;EAC5B,IAAI,yBAAyB;EAC7B,IAAI,eAAe;EACnB,SAAS,yBAAyB,GAAG;GACnC,OAAO,iCAAiC;EAC1C;EACA,SAAS,sBAAsB,GAAG;GAChC,OAAO,8BAA8B;EACvC;EACA,SAAS,UAAU,OAAO;GACxB,KAAK,IAAI,KAAK,MAAM,SAAS;IAC3B,IAAI,OAAO,MAAM,QAAQ;IACzB,KAAK,IAAI,KAAK,KAAK,QAAQ;KACzB,IAAI,WAAW,MAAM,SAAS,KAAK,OAAO,GAAG,KAAK;KAClD,IAAI,UACF,SAAS,SAAS;IACtB;GACF;EACF;EACA,SAAS,iBAAiB,MAAM,OAAO;GACrC,IAAI,WAAW,IAAI,KAAK;GACxB,SAAS,OAAO,KAAK,KAAK,MAAM;GAChC,SAAS,YAAY,KAAK,KAAK,WAAW;GAC1C,SAAS,SAAS,KAAK,KAAK,QAAQ;GACpC,SAAS,WAAW,KAAK,KAAK,UAAU;GACxC,SAAS,MAAM,KAAK,KAAK,KAAK;GAC9B,MAAM;GACN,SAAS,OAAO,UAAU,KAAK,OAAO,MAAM,UAAU,SAAS;GAC/D,IAAI,CAAC,MAAM,cAAc,KAAK,OAC5B,MAAM,cAAc,KAAK,QAAQ,CAAC;GACpC,MAAM,cAAc,KAAK,MAAM,KAAK,QAAQ;GAC5C,KAAK,IAAI,KAAK,KAAK,UAAU;IAC3B,IAAI,QAAQ,iBAAiB,KAAK,SAAS,IAAI,KAAK;IACpD,SAAS,IAAI,KAAK;GACpB;GACA,OAAO;EACT;EACA,SAAS,YAAY,SAAS,SAAS;GACrC,IAAI,QAAQ,CAAC;GACb,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAClC,MAAM,KAAK;IACT,GAAG,QAAQ;IACX,GAAG,QAAQ;GACb,CAAC;GAEH,MAAM,KAAK,SAAS,GAAG,GAAG;IACxB,OAAO,EAAE,IAAI,EAAE;GACjB,CAAC;GACD,OAAO,MAAM,SAAS,GACpB,MAAM,KAAK;IACT,GAAG;IACH,GAAG;GACL,CAAC;GAEH,IAAI,MAAM,SAAS,GACjB,MAAM,SAAS;GACjB,IAAI,MAAM;GACV,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,OAAO,MAAM,GAAG,IAAI,MAAM,GAAG;GAE/B,MAAM,KAAK,KAAK,GAAG;GACnB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;IAC1B,MAAM,GAAG,IAAI,MAAM,GAAG,IAAI;IAC1B,QAAQ,KAAK,MAAM,GAAG;IACtB,QAAQ,KAAK,MAAM,GAAG;GACxB;EACF;EACA,SAAS,iBAAiB,MAAM,MAAM;GACpC,IAAI,KAAK,KAAK,QAAQ,UAAU,IAAI,KAAK,GACvC,OAAO;GACT,KAAK,IAAI,KAAK,KAAK,UAAU;IAC3B,IAAI,MAAM,iBAAiB,KAAK,SAAS,IAAI,IAAI;IACjD,IAAI,KACF,OAAO;GACX;EAEF;EACA,MAAM,OAAO;GACX,cAAc;IACZ,KAAK,kBAAkB;IACvB,KAAK,eAAe;IACpB,KAAK,YAAY;IACjB,KAAK,YAAY;IACjB,KAAK,iBAAiB;IACtB,KAAK,YAAY,CAAC;IAClB,KAAK,WAAW,CAAC;IACjB,KAAK,YAAY,CAAC;IAClB,KAAK,cAAc,CAAC;IACpB,KAAK,UAAU,CAAC,CAAC,CAAC;IAClB,KAAK,iBAAiB,CAAC,CAAC,CAAC;IACzB,KAAK,SAAS,CAAC;IACf,KAAK,SAAS,CAAC;IACf,KAAK,kBAAkB,SAAS,OAAO;KACrC,IAAI,KAAK,OAAO,UAAU,GACxB;KACF,IAAI,WAAW,CAAC;KAChB,IAAI,eAAe,CAAC;KACpB,IAAI,eAAe,MAAM,SAAS,KAAK,OAAO,GAAG,KAAK;KACtD,OAAO,aAAa,WAAW,aAAa,QAAQ,QAClD,eAAe,aAAa;KAE9B,IAAI,oBAAoB,aAAa,QAAQ,KAAK;KAClD,IAAI,wBAAwB,iBAAiB,mBAAmB,KAAK;KACrE,KAAK,UAAU,IAAI,qBAAqB;KACxC,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KAAK;MAC3C,IAAI,OAAO,iBAAiB,uBAAuB,KAAK,OAAO,GAAG,KAAK;MACvE,IAAI,MAAM;OACR,IAAI,QAAQ;OACZ,SAAS,KAAK,KAAK;OACnB,aAAa,KAAK,KAAK,OAAO,GAAG,cAAc,QAAQ,CAAC;MAC1D,OAAO;OACL,IAAI,eAAe,MAAM,SAAS,KAAK,OAAO,GAAG,KAAK;OACtD,IAAI,CAAC,cACH;OACF,IAAI,oBAAoB,aAAa,QAAQ,KAAK;OAClD,IAAI,wBAAwB,iBAAiB,mBAAmB,KAAK;OACrE,KAAK,UAAU,IAAI,qBAAqB;OACxC,IAAI,OAAO,iBAAiB,uBAAuB,KAAK,OAAO,GAAG,KAAK;OACvE,IAAI,QAAQ;OACZ,SAAS,KAAK,KAAK;OACnB,aAAa,KAAK,KAAK,OAAO,GAAG,cAAc,QAAQ,CAAC;MAC1D;KACF;KACA,IAAI,WAAW,IAAI,SAAS,UAAU,YAAY;KAClD,KAAK,UAAU,KAAK,UAAU,IAAI,QAAQ,CAAC;KAC3C,KAAK,UAAU,SAAS,WAAW;IACrC;IACA,KAAK,UAAU,SAAS,OAAO;KAC7B,IAAI,KAAK,WACP,OAAO,KAAK;KACd,IAAI,WAAW,IAAI,eAAe;KAClC,IAAI;KACJ,IAAI,MAAM,WAAW,KAAK,iBACxB,MAAM,MAAM,WAAW,KAAK,gBAAgB,QAAQ,KAAK;UAEzD,MAAM,IAAI,oBAAoB;KAChC,SAAS,SAAS,IAAI,gBAAgB,IAAI,YAAY,KAAK,WAAW,GAAG,CAAC,CAAC;KAC3E,SAAS,aAAa,YAAY,IAAI,gBAAgB,KAAK,eAAe,CAAC,CAAC;KAC5E,IAAI,KAAK,iBAAiB,KAAK,cAAc,SAAS,GACpD,SAAS,aAAa,UAAU,IAAI,gBAAgB,KAAK,eAAe,CAAC,CAAC;KAE5E,IAAI,KAAK,gBAAgB,KAAK,aAAa,SAAS,GAClD,SAAS,aAAa,SAAS,IAAI,gBAAgB,KAAK,cAAc,CAAC,CAAC;KAE1E,IAAI,KAAK,kBAAkB,MAAM,KAAK,kBAAkB,GAAG,SAAS,GAClE,SAAS,aAAa,MAAM,IAAI,gBAAgB,IAAI,aAAa,KAAK,kBAAkB,EAAE,GAAG,CAAC,CAAC;KAEjG,IAAI,KAAK,kBAAkB,MAAM,KAAK,kBAAkB,GAAG,SAAS,GAClE,SAAS,aAAa,OAAO,IAAI,gBAAgB,IAAI,aAAa,KAAK,kBAAkB,EAAE,GAAG,CAAC,CAAC;KAElG,IAAI,KAAK,kBAAkB,KAAK,eAAe,SAAS,GACtD,SAAS,aAAa,YAAY,IAAI,gBAAgB,KAAK,gBAAgB,CAAC,CAAC;KAE/E,IAAI,KAAK,oBAAoB,KAAK,iBAAiB,SAAS,GAC1D,SAAS,aAAa,cAAc,IAAI,gBAAgB,KAAK,kBAAkB,CAAC,CAAC;KAEnF,IAAI,KAAK,OAAO,SAAS,GAAG;MAC1B,IAAI,UAAU,CAAC;MACf,IAAI,QAAQ,CAAC;MACb,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KACtC,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,OAAO,GAAG,SAAS,QAAQ,KAAK;OACvD,IAAI,SAAS,KAAK,OAAO,GAAG,SAAS;OACrC,IAAI,QAAQ;QACV,IAAI,CAAC,QAAQ,OAAO,YAClB,QAAQ,OAAO,aAAa,CAAC;QAC/B,IAAI,CAAC,MAAM,OAAO,YAChB,MAAM,OAAO,aAAa,CAAC;QAC7B,QAAQ,OAAO,WAAW,KAAK,OAAO,OAAO;QAC7C,MAAM,OAAO,WAAW,KAAK,SAAS,CAAC,CAAC;OAC1C;MACF;MAEF,KAAK,IAAI,KAAK,OACZ,YAAY,MAAM,IAAI,QAAQ,EAAE;MAElC,IAAI,WAAW,CAAC;MAChB,IAAI,SAAS,CAAC;MACd,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAClC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,IAAI,QAAQ,MAAM,MAAM,IAAI;OAC1B,SAAS,KAAK,QAAQ,GAAG,EAAE;OAC3B,OAAO,KAAK,MAAM,GAAG,EAAE;MACzB,OAAO;OACL,SAAS,KAAK,CAAC;OACf,OAAO,KAAK,CAAC;MACf;MAGJ,SAAS,aAAa,cAAc,IAAI,gBAAgB,IAAI,aAAa,QAAQ,GAAG,YAAY,CAAC;MACjG,SAAS,aAAa,aAAa,IAAI,gBAAgB,IAAI,aAAa,MAAM,GAAG,YAAY,CAAC;KAChG;KACA,IAAI;KACJ,IAAI,KAAK,OAAO,UAAU,GACxB,OAAO,IAAI,KAAK,UAAU,GAAG;KAC/B,IAAI,KAAK,OAAO,SAAS,GAAG;MAC1B,OAAO,IAAI,YAAY,UAAU,GAAG;MACpC,KAAK,qBAAqB;KAC5B;KACA,KAAK,YAAY;KACjB,OAAO;IACT;GACF;EACF;EACA,MAAM,OAAO;GACX,cAAc;IACZ,KAAK,cAAc;IACnB,KAAK,WAAW,CAAC;GACnB;EACF;EACA,MAAM,WAAW;GACf,cAAc;IACZ,KAAK,IAAI;IACT,KAAK,IAAI;IACT,KAAK,IAAI;IACT,KAAK,UAAU,WAAW;KACxB,OAAO,IAAI,QAAQ,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IAC3C;GACF;EACF;EACA,MAAM,UAAU;GACd,cAAc;IACZ,KAAK,IAAI;IACT,KAAK,IAAI;IACT,KAAK,IAAI;IACT,KAAK,IAAI;IACT,KAAK,UAAU,WAAW;KACxB,OAAO,IAAI,MAAM,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IACzC;GACF;EACF;EACA,MAAM,aAAa;GACjB,cAAc;IACZ,KAAK,IAAI;IACT,KAAK,IAAI;IACT,KAAK,IAAI;IACT,KAAK,IAAI;IACT,KAAK,UAAU,WAAW;KACxB,OAAO,IAAI,WAAW,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IACtD;GACF;EACF;EACA,MAAM,eAAe;GACnB,cAAc;IACZ,KAAK,YAAY;IACjB,KAAK,UAAU;GACjB;EACF;EACA,MAAM,SAAS;GACb,cAAc;IACZ,KAAK,OAAO,CAAC;IACb,KAAK,WAAW,WAAW;KACzB,IAAI,MAAM;KACV,KAAK,KAAK,QAAQ,SAAS,GAAG;MAC5B,OAAO,OAAO,aAAa,CAAC;KAC9B,CAAC;KACD,OAAO,IAAI,QAAQ,kBAAkB,EAAE;IACzC;GACF;EACF;EACA,MAAM,YAAY;GAChB,cAAc;IACZ,KAAK,QAAQ;IACb,KAAK,SAAS;GAChB;EACF;EACA,MAAM,UAAU;GACd,cAAc;IACZ,KAAK,QAAQ;IACb,KAAK,SAAS;GAChB;EACF;EACA,MAAM,OAAO;GACX,cAAc;IACZ,KAAK,QAAQ;IACb,KAAK,kBAAkB,CAAC;IACxB,KAAK,eAAe;IACpB,KAAK,aAAa;IAClB,KAAK,UAAU,CAAC;IAChB,KAAK,YAAY,CAAC;IAClB,KAAK,UAAU,SAAS,OAAO;KAC7B,IAAI,KAAK,WACP,OAAO,KAAK;KACd,IAAI,IAAI,IAAI,SAAS;KACrB,EAAE,OAAO,KAAK;KACd,EAAE,SAAS,KAAK,gBAAgB,QAAQ;KACxC,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,KACzC,EAAE,IAAI,KAAK,UAAU,GAAG,QAAQ,KAAK,CAAC;KAExC,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,QAAQ,KACvC,EAAE,IAAI,MAAM,QAAQ,KAAK,QAAQ,IAAI,QAAQ,KAAK,CAAC;KAErD,KAAK,YAAY;KACjB,EAAE,OAAO,UAAU,EAAE,UAAU,EAAE,YAAY,EAAE,KAAK;KACpD,OAAO;IACT;GACF;EACF;EACA,MAAM,OAAO;GACX,cAAc;IACZ,KAAK,QAAQ;IACb,KAAK,cAAc;IACnB,KAAK,gBAAgB;GACvB;EACF;EACA,MAAM,mBAAmB;GACvB,cAAc;IACZ,KAAK,OAAO;IACZ,KAAK,YAAY;IACjB,KAAK,SAAS;IACd,KAAK,QAAQ,CAAC;IACd,KAAK,cAAc;IACnB,KAAK,QAAQ;IACb,KAAK,cAAc,WAAW;KAC5B,IAAI,QAAQ,IAAI,WAAW,KAAK,KAAK,EAAE;KACvC,IAAI,SAAS,IAAI,SAAS,KAAK;KAI/B,OAAO,IAAI,MAHH,OAAO,WAAW,GAAG,IAGZ,GAFT,OAAO,WAAW,GAAG,IAET,GADZ,OAAO,WAAW,GAAG,IACN,CAAC;IAC1B;IACA,KAAK,cAAc,WAAW;KAC5B,IAAI,QAAQ,IAAI,WAAW,KAAK,KAAK,EAAE;KAGvC,OADQ,IADS,SAAS,KACb,EAAE,WAAW,GAAG,IACtB;IACT;IACA,KAAK,aAAa,WAAW;KAC3B,IAAI,QAAQ,IAAI,WAAW,KAAK,KAAK,EAAE;KAGvC,OAAO,CAAC,CADA,IADS,SAAS,KACb,EAAE,WAAW,GAAG,IACpB;IACX;IACA,KAAK,eAAe,WAAW;KAC7B,IAAI,IAAI,IAAI,SAAS;KACrB,EAAE,OAAO,KAAK;KACd,OAAO,EAAE,SAAS;IACpB;IACA,KAAK,YAAY,WAAW;KAC1B,IAAI,IAAI,IAAI,SAAS;KACrB,EAAE,OAAO,KAAK;KACd,IAAI,QAAQ,EAAE,SAAS;KACvB,QAAQ,MAAM,QAAQ,OAAO,GAAG;KAChC,IAAI,MAAM,QAAQ,GAAG,KAAK,IACxB,QAAQ,MAAM,OAAO,MAAM,YAAY,GAAG,IAAI,CAAC;KAEjD,OAAO,cAAc,KAAK,KAAK;IACjC;GACF;EACF;EACA,IAAI,kBAAkB;GACpB,aAAa;GACb,iBAAiB;GACjB,iBAAiB;GACjB,kBAAkB;GAClB,gBAAgB;GAChB,gBAAgB;GAChB,iBAAiB;GACjB,iBAAiB;GACjB,oBAAoB;GACpB,mBAAmB;GACnB,kBAAkB;GAClB,qBAAqB;GACrB,iBAAiB;GACjB,aAAa;EACf;EACA,IAAI,kBAAkB;GACpB,aAAa;GACb,iBAAiB;GACjB,iBAAiB;GACjB,kBAAkB;GAClB,gBAAgB;GAChB,gBAAgB;GAChB,iBAAiB;GACjB,iBAAiB;GACjB,oBAAoB;GACpB,mBAAmB;GACnB,kBAAkB;GAClB,qBAAqB;GACrB,iBAAiB;GACjB,aAAa;EACf;EACA,MAAM,WAAW;GACf,cAAc;IACZ,KAAK,gBAAgB;IACrB,KAAK,iBAAiB;IACtB,KAAK,cAAc,CAAC;IACpB,KAAK,UAAU,WAAW;KACxB,IAAI,MAAM,IAAI,kBAAkB;KAChC,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,YAAY,QAAQ,KAAK;MAChD,IAAI,gBAAgB,KAAK,YAAY,GAAG,SAAS,SAC/C,IAAI,gBAAgB,KAAK,YAAY,GAAG,SAAS,KAAK,YAAY,GAAG,YAAY;MAEnF,IAAI,gBAAgB,KAAK,YAAY,GAAG,SAAS,SAC/C,IAAI,gBAAgB,KAAK,YAAY,GAAG,SAAS,KAAK,YAAY,GAAG,YAAY;MAEnF,IAAI,gBAAgB,KAAK,YAAY,GAAG,SAAS,QAC/C,IAAI,gBAAgB,KAAK,YAAY,GAAG,SAAS,KAAK,YAAY,GAAG,WAAW;MAElF,IAAI,gBAAgB,KAAK,YAAY,GAAG,SAAS,UAC/C,IAAI,gBAAgB,KAAK,YAAY,GAAG,SAAS,KAAK,YAAY,GAAG,aAAa;MAEpF,IAAI,gBAAgB,KAAK,YAAY,GAAG,SAAS,OAAO;OACtD,IAAI,OAAO,KAAK,YAAY;OAC5B,IAAI,KAAK,aAAa,uBACpB,IAAI,MAAM,KAAK,YAAY,GAAG,UAAU;OAC1C,IAAI,KAAK,aAAa,uBACpB,IAAI,YAAY,KAAK,YAAY,GAAG,UAAU;OAChD,IAAI,KAAK,aAAa,wBACpB,IAAI,WAAW,KAAK,YAAY,GAAG,UAAU;OAC/C,IAAI,KAAK,aAAa,uBACpB,IAAI,WAAW,KAAK,YAAY,GAAG,UAAU;MACjD;KACF;KACA,IAAI,QAAQ,IAAI;KAChB,IAAI,QAAQ,IAAI;KAChB,IAAI,QAAQ,IAAI;KAChB,IAAI,MAAM,IAAI;KACd,IAAI,MAAM,IAAI;KACd,IAAI,MAAM,IAAI;KACd,OAAO;IACT;GACF;EACF;EACA,SAAS,QAAQ,IAAI,IAAI,GAAG;GAC1B,IAAI,IAAI,IAAI,QAAQ;GACpB,IAAI,MAAM,IAAI;GACd,EAAE,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI;GACxB,EAAE,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI;GACxB,EAAE,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI;GACxB,OAAO;EACT;EACA,SAAS,SAAS,IAAI,IAAI,GAAG;GAC3B,OAAO,GAAG,MAAM,EAAE,MAAM,IAAI,IAAI,CAAC;EACnC;EACA,SAAS,YAAY,MAAM,MAAM,KAAK,MAAM;GAC1C,IAAI,KAAK,UAAU,GACjB,OAAO,KAAK,GAAG,OAAO,QAAQ;GAChC,IAAI,OAAO;GACX,IAAI,MAAM;GACV,IAAI,UAAU;GACd,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;IACpC,IAAI,WAAW,KAAK,IAAI,KAAK,GAAG,QAAQ,IAAI;IAC5C,IAAI,WAAW,QAAQ,KAAK,GAAG,SAAS,MAAM;KAC5C,OAAO;KACP,MAAM,KAAK;KACX,UAAU,KAAK,IAAI;IACrB;GACF;GACA,IAAI,CAAC,KACH,OAAO;QACF,IAAI,SAAS;IAClB,IAAI,KAAK,QAAQ,QAAQ,IAAI;IAC7B,IAAI,IAAI,IAAI,QAAQ;IACpB,IAAI,IAAI,IAAI;IACZ,OAAO,KAAK,IAAI,OAAO,QAAQ,GAAG,QAAQ,OAAO,QAAQ,GAAG,CAAC;GAC/D,OAAO;IACL,UAAU,KAAK,GAAG,MAAM;IACxB,QAAQ,SAAS;IACjB,IAAI,KAAK,QAAQ,QAAQ,IAAI;IAC7B,IAAI,IAAI,IAAI,QAAQ;IACpB,IAAI,IAAI,IAAI;IACZ,OAAO,KAAK,IAAI,OAAO,QAAQ,GAAG,QAAQ,OAAO,QAAQ,GAAG,CAAC;GAC/D;EACF;EACA,MAAM,WAAW;GACf,cAAc;IACZ,KAAK,YAAY;IACjB,KAAK,mBAAmB;IACxB,KAAK,mBAAmB;IACxB,KAAK,kBAAkB;IACvB,KAAK,gBAAgB,CAAC;IACtB,KAAK,gBAAgB,CAAC;IACtB,KAAK,eAAe,CAAC;IACrB,KAAK,YAAY;IACjB,KAAK,aAAa;IAClB,KAAK,OAAO,SAAS,KAAK;KACxB,IAAI,CAAC,KACH,MAAM;KACR,SAAS,EAAE,IAAI;MACb,GAAG,SAAS;KACd;KACA,KAAK,cAAc,QAAQ,CAAC;KAC5B,KAAK,cAAc,QAAQ,CAAC;KAC5B,KAAK,aAAa,QAAQ,CAAC;IAC7B;IACA,KAAK,WAAW,WAAW;KACzB,SAAS,KAAK,GAAG,GAAG;MAClB,OAAO,EAAE,QAAQ,EAAE;KACrB;KACA,KAAK,cAAc,KAAK,IAAI;KAC5B,KAAK,cAAc,KAAK,IAAI;KAC5B,KAAK,aAAa,KAAK,IAAI;IAC7B;IACA,KAAK,YAAY,WAAW;KAC1B,OAAO,KAAK,IACV,KAAK,IAAI,MACP,MACA,KAAK,cAAc,IAAI,SAAS,GAAG;MACjC,OAAO,EAAE;KACX,CAAC,CACH,GACA,KAAK,IAAI,MACP,MACA,KAAK,cAAc,IAAI,SAAS,GAAG;MACjC,OAAO,EAAE;KACX,CAAC,CACH,GACA,KAAK,IAAI,MACP,MACA,KAAK,aAAa,IAAI,SAAS,GAAG;MAChC,OAAO,EAAE;KACX,CAAC,CACH,CACF;IACF;IACA,KAAK,UAAU,SAAS,GAAG;KACzB,KAAK,SAAS;KACd,IAAI,SAAS,KAAK,UAAU;KAC5B,IAAI,QAAQ,IAAI,UAAU,cAAc;KACxC,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK,KAAM;MACrC,IAAI,SAAS,IAAI,QAAQ;MACzB,IAAI,OAAO;MACX,IAAI,MAAM,YAAY,KAAK,eAAe,MAAM,QAAQ,OAAO;MAC/D,IAAI,QAAQ,YAAY,KAAK,cAAc,MAAM,QAAQ,OAAO;MAChE,IAAI,WAAW,YAAY,KAAK,eAAe,MAAM,QAAQ,QAAQ;MACrE,OAAO,QAAQ,KAAK,UAAU,KAAK;MACnC,IAAI,MAAM,IAAI,UAAU,SAAS,MAAM,MAAM;MAC7C,MAAM,OAAO,GAAG;KAClB;KACA,MAAM,SAAS,EAAE,SAAS,KAAK,SAAS,EAAE,QAAQ;KAClD,IAAI,SAAS,CAAC,KAAK;KACnB,IAAI,EAAE,cAAc,KAAK,YACvB,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,cAAc,KAAK,WAAW,QAAQ,KAAK;MAC/D,IAAI,KAAK,MAAM,MAAM;MACrB,GAAG,SAAS,EAAE,cAAc,KAAK,WAAW;MAC5C,OAAO,KAAK,EAAE;KAChB;KAEF,OAAO;IACT;GACF;EACF;EACA,MAAM,YAAY;GAChB,cAAc;IACZ,KAAK,QAAQ;IACb,KAAK,YAAY;IACjB,KAAK,kBAAkB;IACvB,KAAK,eAAe;IACpB,KAAK,YAAY,CAAC;IAClB,KAAK,UAAU,SAAS,MAAM;KAC5B,IAAI,kBAAkB,IAAI,UAAU,UAAU;KAC9C,KAAK,IAAI,KAAK,KAAK,WAAW;MAC5B,KAAK,UAAU,GAAG,KAAK,KAAK,eAAe;MAC3C,IAAI,SAAS,KAAK,UAAU,GAAG,QAAQ,IAAI;MAC3C,KAAK,IAAI,KAAK,QAAQ;OACpB,OAAO,GAAG,KAAK;OACf,gBAAgB,SAAS,OAAO,EAAE;MACpC;KACF;KACA,gBAAgB,SAAS,KAAK,IAAI,MAChC,MACA,gBAAgB,OAAO,IAAI,SAAS,GAAG;MACrC,OAAO,EAAE;KACX,CAAC,CACH;KACA,OAAO;IACT;GACF;EACF;EACA,MAAM,UAAU;GACd,cAAc;IACZ,KAAK,SAAS;IACd,KAAK,UAAU;IACf,KAAK,mBAAmB,CAAC;IACzB,KAAK,SAAS,CAAC;GACjB;EACF;EACA,MAAM,QAAQ;GACZ,cAAc;IACZ,KAAK,QAAQ;IACb,KAAK,QAAQ;IACb,KAAK,uBAAuB;IAC5B,KAAK,qBAAqB;IAC1B,KAAK,wBAAwB;IAC7B,KAAK,kBAAkB;IACvB,KAAK,kBAAkB;IACvB,KAAK,gBAAgB;IACrB,KAAK,iBAAiB;IACtB,KAAK,gBAAgB;GACvB;EACF;EACA,MAAM,SAAS;GACb,cAAc;IACZ,KAAK,QAAQ;IACb,KAAK,YAAY;IACjB,KAAK,UAAU;IACf,KAAK,MAAM;IACX,KAAK,iBAAiB;IACtB,KAAK,iBAAiB;IACtB,KAAK,gBAAgB;IACrB,KAAK,UAAU;GACjB;EACF;EACA,MAAM,QAAQ;GACZ,cAAc;IACZ,KAAK,eAAe;IACpB,KAAK,eAAe;IACpB,KAAK,kBAAkB;IACvB,KAAK,eAAe;IACpB,KAAK,SAAS;IACd,KAAK,aAAa;IAClB,KAAK,gBAAgB;IACrB,KAAK,iBAAiB;IACtB,KAAK,eAAe;IACpB,KAAK,aAAa;IAClB,KAAK,cAAc;IACnB,KAAK,YAAY;IACjB,KAAK,UAAU,CAAC;IAChB,KAAK,aAAa,CAAC;IACnB,KAAK,cAAc,CAAC;IACpB,KAAK,UAAU,CAAC;IAChB,KAAK,WAAW,CAAC;IACjB,KAAK,gBAAgB,CAAC;IACtB,KAAK,WAAW,SAAS,MAAM,MAAM;KACnC,IAAI,CAAC,MACH,OAAO,KAAK;KAEd,IAAI,KAAK,SAAS,MAChB,OAAO;KAET,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,KAAK;MAC9C,IAAI,MAAM,KAAK,SAAS,MAAM,KAAK,UAAU,EAAE;MAC/C,IAAI,KACF,OAAO;KACX;KACA,OAAO;IACT;IACA,KAAK,UAAU,WAAW;KACxB,KAAK,YAAY;KACjB,UAAU,IAAI;KACd,IAAI,IAAI,KAAK,UAAU,QAAQ,IAAI;KACnC,KAAK,IAAI,KAAK,KAAK,SACjB,KAAK,QAAQ,GAAG,gBAAgB,IAAI;KACtC,IAAI,KAAK,YAAY,SAAS,GAC5B,IAAI,IAAI,KAAK,YAAY,GAAG,QAAQ,IAAI;KAE1C,OAAO;MAAE,QAAQ;MAAG,WAAW;KAAE;IACnC;GACF;EACF;EACA,MAAM,UAAU;GACd,cAAc;IACZ,KAAK,WAAW;KAAC,CAAC;KAAG,CAAC;KAAG,CAAC;KAAG,CAAC;IAAC;IAC/B,KAAK,UAAU,WAAW;KACxB,IAAI,IAAI,IAAI,QAAQ;KACpB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,GACvB,KAAK,IAAI,KAAK,GAAG,KAAK,GAAG,EAAE,IACzB,EAAE,SAAS,IAAI,IAAI,MAAM,KAAK,SAAS,IAAI;KAG/C,OAAO;IACT;GACF;EACF;EACA,IAAI,eAAe;EACnB,SAAS,UAAU,UAAU;GAC3B,IAAI,MAAM,SAAS,WAAW,SAAS,YAAY,YAAY;GAC/D,SAAS,cAAc;GACvB,OAAO;EACT;EACA,SAAS,YAAY,UAAU;GAC7B,IAAI,MAAM,SAAS,WAAW,SAAS,YAAY,YAAY;GAC/D,SAAS,cAAc;GACvB,OAAO;EACT;EACA,SAAS,aAAa,UAAU;GAC9B,IAAI,MAAM,SAAS,SAAS,SAAS,UAAU;GAC/C,SAAS,cAAc;GACvB,OAAO;EACT;EACA,SAAS,cAAc,UAAU;GAC/B,IAAI,MAAM,SAAS,UAAU,SAAS,YAAY,YAAY;GAC9D,SAAS,cAAc;GACvB,OAAO;EACT;EACA,SAAS,kBAAkB,UAAU;GACnC,IAAI,MAAM,SAAS,UAAU,SAAS,YAAY,YAAY;GAC9D,SAAS,cAAc;GACvB,OAAO;EACT;EACA,SAAS,cAAc,UAAU;GAC/B,IAAI,MAAM,SAAS,UAAU,SAAS,YAAY,YAAY;GAC9D,SAAS,cAAc;GACvB,OAAO;EACT;EACA,SAAS,gBAAgB,QAAQ;GAC/B,IAAI,IAAI,IAAI,WAAW;GACvB,EAAE,IAAI,UAAU,MAAM;GACtB,EAAE,IAAI,UAAU,MAAM;GACtB,EAAE,IAAI,UAAU,MAAM;GACtB,OAAO;EACT;EACA,SAAS,eAAe,QAAQ;GAC9B,IAAI,IAAI,IAAI,UAAU;GACtB,EAAE,IAAI,UAAU,MAAM;GACtB,EAAE,IAAI,UAAU,MAAM;GACtB,EAAE,IAAI,UAAU,MAAM;GACtB,OAAO;EACT;EACA,SAAS,kBAAkB,QAAQ;GACjC,IAAI,IAAI,IAAI,aAAa;GACzB,EAAE,IAAI,UAAU,MAAM;GACtB,EAAE,IAAI,UAAU,MAAM;GACtB,EAAE,IAAI,UAAU,MAAM;GACtB,EAAE,IAAI,UAAU,MAAM;GACtB,OAAO;EACT;EACA,SAAS,cAAc,QAAQ;GAC7B,IAAI,IAAI,IAAI,SAAS;GACrB,IAAI,oBAAoB,kBAAkB,MAAM;GAChD,OAAO,UAAU,EAAE,MAAM,GAAG,iBAAiB;GAC7C,OAAO,EAAE,SAAS;EACpB;EACA,SAAS,oBAAoB,QAAQ;GACnC,IAAI,IAAI,IAAI,eAAe;GAC3B,EAAE,YAAY,kBAAkB,MAAM;GACtC,EAAE,UAAU,UAAU,MAAM;GAC5B,OAAO;EACT;EACA,SAAS,iBAAiB,QAAQ;GAChC,IAAI,IAAI,IAAI,UAAU;GACtB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,EAAE,GACvB,KAAK,IAAI,KAAK,GAAG,KAAK,GAAG,EAAE,IACzB,EAAE,SAAS,GAAG,MAAM,UAAU,MAAM;GAGxC,OAAO;EACT;EACA,SAAS,iBAAiB,QAAQ;GAChC,IAAI,IAAI,IAAI,YAAY;GACxB,EAAE,QAAQ,YAAY,MAAM;GAC5B,EAAE,SAAS,gBAAgB,MAAM;GACjC,OAAO;EACT;EACA,SAAS,eAAe,QAAQ;GAC9B,IAAI,IAAI,IAAI,UAAU;GACtB,EAAE,QAAQ,YAAY,MAAM;GAC5B,EAAE,SAAS,kBAAkB,MAAM;GACnC,OAAO;EACT;EACA,SAAS,yBAAyB,QAAQ,MAAM,MAAM;GACpD,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,KACxB,KAAK,KAAK,oBAAoB,MAAM;EACxC;EACA,SAAS,sBAAsB,QAAQ,MAAM,MAAM;GACjD,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,KACxB,KAAK,KAAK,iBAAiB,MAAM;EACrC;EACA,SAAS,oBAAoB,QAAQ,MAAM,MAAM;GAC/C,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,KACxB,KAAK,KAAK,eAAe,MAAM;EACnC;EACA,SAAS,WAAW,QAAQ,GAAG,GAAG;GAChC,OAAO,OAAO,KAAK,OAAO,CAAC,IAAI,GAAG,YAAY;EAChD;EACA,SAAS,UAAU,MAAM;GACvB,IAAI,CAAC,MACH,MAAM;EACV;EACA,SAAS,eAAe,QAAQ,QAAQ,OAAO;GAE7C,UADc,cAAc,MACZ,KAAK,mBAAmB;GACxC,cAAc,MAAM;GACpB,IAAI,OAAO,IAAI,OAAO;GACtB,KAAK,UAAU;GACf,KAAK,SAAS;GACd,KAAK,QAAQ,cAAc,MAAM;GACjC,KAAK,kBAAkB,iBAAiB,MAAM;GAC9C,KAAK,eAAe,kBAAkB,MAAM;GAC5C,KAAK,aAAa,kBAAkB,MAAM;GAC1C,IAAI,KAAK,YAAY;IACnB,KAAK,UAAU,CAAC;IAChB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,YAAY,EAAE,GACrC,KAAK,QAAQ,KAAK,kBAAkB,MAAM;GAE9C;GACA,IAAI,KAAK,cAAc;IACrB,KAAK,YAAY,CAAC;IAClB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,cAAc,EAAE,GAAG;KAC1C,IAAI,QAAQ,eAAe,QAAQ,MAAM,OAAO;KAChD,KAAK,UAAU,KAAK;IACtB;GACF;GACA,OAAO;EACT;EACA,SAAS,eAAe,QAAQ,GAAG;GAEjC,UADc,cAAc,MACZ,KAAK,mBAAmB;GACxC,cAAc,MAAM;GACpB,EAAE,QAAQ,cAAc,MAAM;GAC9B,EAAE,cAAc,kBAAkB,MAAM;GACxC,EAAE,gBAAgB,iBAAiB,MAAM;GACzC,IAAI,WACF,WAAW,QAAQ,EAAE,UAAU,EAAE,WAAW;QACvC;IACL,EAAE,WAAW,CAAC;IACd,yBAAyB,QAAQ,EAAE,UAAU,EAAE,WAAW;GAC5D;GACA,OAAO;EACT;EACA,SAAS,eAAe,QAAQ,MAAM;GAEpC,UADc,cAAc,MACZ,KAAK,mBAAmB;GACxC,cAAc,MAAM;GACpB,KAAK,kBAAkB,kBAAkB,MAAM;GAC/C,KAAK,eAAe,kBAAkB,MAAM;GAC5C,KAAK,YAAY,kBAAkB,MAAM;GACzC,KAAK,YAAY,kBAAkB,MAAM;GACzC,KAAK,iBAAiB,kBAAkB,MAAM;GAC9C,KAAK,mBAAmB,CAAC;GACzB,IAAI,IAAI,kBAAkB,MAAM;GAChC,IAAI,IAAI,2BACN,IAAI,WACF,WAAW,QAAQ,KAAK,WAAW,KAAK,YAAY;QAC/C;IACL,KAAK,YAAY,CAAC;IAClB,KAAK,gBAAgB,OAAO,WAAW,OAAO,YAAY,OAAO,aAAa,KAAK,eAAe,IAAI,CAAC;IACvG,OAAO,KAAK,KAAK,eAAe,IAAI,GAAG,YAAY;GACrD;GAEF,IAAI,IAAI,yBACN,IAAI,WACF,WAAW,QAAQ,KAAK,UAAU,KAAK,YAAY;QAC9C;IACL,KAAK,WAAW,CAAC;IACjB,KAAK,gBAAgB,OAAO,WAAW,OAAO,YAAY,OAAO,aAAa,KAAK,eAAe,IAAI,CAAC;IACvG,OAAO,KAAK,KAAK,eAAe,IAAI,GAAG,YAAY;GACrD;GAEF,IAAI,IAAI,yCACN,IAAI,WAAW;IACb,WAAW,QAAQ,KAAK,WAAW,KAAK,YAAY;IACpD,WAAW,QAAQ,KAAK,aAAa,KAAK,YAAY;GACxD,OAAO;IACL,KAAK,YAAY,CAAC;IAClB,KAAK,iBAAiB,OAAO,WAAW,OAAO,YAAY,OAAO,aAAa,KAAK,eAAe,IAAI,CAAC;IACxG,OAAO,KAAK,KAAK,eAAe,IAAI,GAAG,YAAY;IACnD,KAAK,cAAc,CAAC;IACpB,KAAK,mBAAmB,OAAO,WAAW,OAAO,YAAY,OAAO,aAAa,KAAK,eAAe,IAAI,CAAC;IAC1G,OAAO,KAAK,KAAK,eAAe,IAAI,GAAG,YAAY;GACrD;GAEF,KAAK,IAAI,IAAI,GAAG,IAAI,6BAA6B,EAAE,GAAG;IACpD,IAAI,EAAE,IAAI,sBAAsB,CAAC,IAC/B;IACF,IAAI,WACF,WAAW,QAAQ,KAAK,QAAQ,IAAI,KAAK,YAAY;SAChD;KACL,KAAK,QAAQ,KAAK,CAAC;KACnB,KAAK,eAAe,OAAO,WAAW,OAAO,YAAY,OAAO,aAAa,KAAK,eAAe,IAAI,CAAC;KACtG,OAAO,KAAK,KAAK,eAAe,IAAI,GAAG,YAAY;IACrD;GACF;GACA,KAAK,oBAAoB,CAAC;GAC1B,KAAK,IAAI,IAAI,GAAG,IAAI,gCAAgC,EAAE,GAAG;IACvD,IAAI,EAAE,IAAI,yBAAyB,CAAC,IAClC;IACF,KAAK,iBAAiB,KAAK,kBAAkB,MAAM;IACnD,IAAI,WACF,WAAW,QAAQ,KAAK,eAAe,IAAI,KAAK,YAAY;SACvD;KACL,KAAK,eAAe,KAAK,CAAC;KAC1B,KAAK,kBAAkB,KAAK,CAAC;KAC7B,KAAK,IAAI,KAAK,GAAG,KAAK,KAAK,cAAc,MAAM;MAC7C,KAAK,kBAAkB,GAAG,KAAK,UAAU,MAAM,CAAC;MAChD,KAAK,kBAAkB,GAAG,KAAK,UAAU,MAAM,CAAC;MAChD,UAAU,MAAM;KAClB;IACF;GACF;GACA,IAAI,WACF,kBAAkB,MAAM;QACnB;IACL,KAAK,SAAS,CAAC;IACf,KAAK,cAAc,CAAC;IACpB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,WAAW,EAAE,GAAG;KACvC,IAAI,IAAI,KAAK,OAAO,KAAK,IAAI,OAAO;KACpC,EAAE,cAAc,cAAc,MAAM;KACpC,EAAE,WAAW,CAAC;KACd,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,aAAa,EAAE,GACnC,IAAI,KAAK,eAAe,OACtB,EAAE,SAAS,KAAK,cAAc,MAAM;UAEpC,EAAE,SAAS,KAAK,kBAAkB,MAAM;KAG5C,IAAI,EAAE,gBAAgB,GAAG;MACvB,KAAK,YAAY,KAAK,EAAE,SAAS,EAAE;MACnC,KAAK,YAAY,KAAK,EAAE,SAAS,EAAE;MACnC,KAAK,YAAY,KAAK,EAAE,SAAS,EAAE;KACrC,OAAO,IAAI,EAAE,gBAAgB,GAAG;MAC9B,KAAK,YAAY,KAAK,EAAE,SAAS,EAAE;MACnC,KAAK,YAAY,KAAK,EAAE,SAAS,EAAE;MACnC,KAAK,YAAY,KAAK,EAAE,SAAS,EAAE;MACnC,KAAK,YAAY,KAAK,EAAE,SAAS,EAAE;MACnC,KAAK,YAAY,KAAK,EAAE,SAAS,EAAE;MACnC,KAAK,YAAY,KAAK,EAAE,SAAS,EAAE;KACrC,OACE,MAAM,IAAI,MAAM,uFAAuF;IAE3G;GACF;GACA,IAAI,KAAK,WAAW;IAClB,KAAK,SAAS,CAAC;IACf,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,WAAW,EAAE,GAAG;KACvC,KAAK,OAAO,KAAK,IAAI,OAAO;KAC5B,eAAe,QAAQ,KAAK,OAAO,EAAE;IACvC;GACF;EACF;EACA,SAAS,2BAA2B,QAAQ,MAAM;GAEhD,UADc,cAAc,MACZ,KAAK,+BAA+B;GACpD,cAAc,MAAM;GACpB,KAAK,OAAO,cAAc,MAAM;GAChC,KAAK,YAAY,kBAAkB,MAAM;GACzC,KAAK,SAAS,kBAAkB,MAAM;GACtC,KAAK,cAAc,kBAAkB,MAAM;GAC3C,KAAK,QAAQ,kBAAkB,MAAM;GACrC,KAAK,QAAQ,CAAC;GACd,OAAO,UAAU,KAAK,OAAO,GAAG,KAAK,WAAW;EAClD;EACA,SAAS,mBAAmB,QAAQ,KAAK;GAEvC,UADc,cAAc,MACZ,KAAK,uBAAuB;GAC5C,cAAc,MAAM;GACpB,IAAI,gBAAgB,IAAI,iBAAiB,kBAAkB,MAAM;GACjE,IAAI,IAAI,gBAAgB;IACtB,IAAI,IAAI,aACN,OAAO,IAAI;IAEb,IAAI,cAAc,CAAC;IACnB,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,gBAAgB,EAAE,GAAG;KAC3C,IAAI,YAAY,KAAK,IAAI,mBAAmB;KAC5C,2BAA2B,QAAQ,IAAI,YAAY,EAAE;IACvD;GACF;EACF;EACA,SAAS,mBAAmB,QAAQ,IAAI;GAEtC,UADc,cAAc,MACZ,KAAK,uBAAuB;GAC5C,cAAc,MAAM;GACpB,GAAG,YAAY,cAAc,MAAM;GACnC,GAAG,mBAAmB,kBAAkB,MAAM;GAC9C,GAAG,mBAAmB,kBAAkB,MAAM;GAC9C,GAAG,kBAAkB,kBAAkB,MAAM;GAC7C,GAAG,YAAY,kBAAkB,MAAM;GACvC,GAAG,aAAa,kBAAkB,MAAM;GACxC,IAAI,GAAG,kBACL,IAAI,WACF,WAAW,QAAQ,GAAG,eAAe,GAAG,gBAAgB;QACnD;IACL,GAAG,gBAAgB,CAAC;IACpB,sBAAsB,QAAQ,GAAG,eAAe,GAAG,gBAAgB;GACrE;GAEF,IAAI,GAAG,kBACL,IAAI,WACF,WAAW,QAAQ,GAAG,eAAe,GAAG,gBAAgB;QACnD;IACL,GAAG,gBAAgB,CAAC;IACpB,oBAAoB,QAAQ,GAAG,eAAe,GAAG,gBAAgB;GACnE;GAEF,IAAI,GAAG,iBACL,IAAI,WACF,WAAW,QAAQ,GAAG,cAAc,GAAG,eAAe;QACjD;IACL,GAAG,eAAe,CAAC;IACnB,sBAAsB,QAAQ,GAAG,cAAc,GAAG,eAAe;GACnE;EAEJ;EACA,SAAS,eAAe,QAAQ,MAAM;GAEpC,UADc,cAAc,MACZ,KAAK,wBAAwB;GAC7C,cAAc,MAAM;GACpB,KAAK,QAAQ,cAAc,MAAM;GACjC,KAAK,YAAY,YAAY,MAAM;GACnC,KAAK,kBAAkB,YAAY,MAAM;GACzC,KAAK,eAAe,kBAAkB,MAAM;GAC5C,IAAI,KAAK,cAAc;IACrB,KAAK,YAAY,CAAC;IAClB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,cAAc,EAAE,GAAG;KAC1C,KAAK,UAAU,KAAK,IAAI,WAAW;KACnC,mBAAmB,QAAQ,KAAK,UAAU,EAAE;IAC9C;GACF;EACF;EACA,SAAS,kBAAkB,QAAQ,KAAK;GAEtC,UADc,cAAc,MACZ,KAAK,sBAAsB;GAC3C,cAAc,MAAM;GACpB,IAAI,SAAS,kBAAkB,MAAM;GACrC,IAAI,UAAU,kBAAkB,MAAM;GACtC,OAAO,UAAU,IAAI,eAAe,GAAG,CAAC;GACxC,IAAI,CAAC,WACH,IAAI,CAAC,IAAI,SAAS;IAChB,IAAI,SAAS,CAAC;IACd,OAAO,UAAU,IAAI,QAAQ,GAAG,IAAI,MAAM;GAC5C,OAAO;IACL,IAAI,SAAS,CAAC;IACd,OAAO,UAAU,IAAI,QAAQ,GAAG,IAAI,SAAS,IAAI,UAAU,CAAC;GAC9D;EAEJ;EACA,SAAS,gBAAgB,QAAQ,GAAG;GAElC,UADc,cAAc,MACZ,KAAK,oBAAoB;GACzC,cAAc,MAAM;GACpB,EAAE,QAAQ,cAAc,MAAM;GAC9B,EAAE,QAAQ,kBAAkB,MAAM;GAClC,IAAI,EAAE,SAAS,2BAA2B;IACxC,EAAE,uBAAuB,UAAU,MAAM;IACzC,EAAE,qBAAqB,UAAU,MAAM;IACvC,EAAE,wBAAwB,UAAU,MAAM;GAC5C;GACA,EAAE,gBAAgB,eAAe,MAAM;GACvC,EAAE,iBAAiB,eAAe,MAAM;GACxC,EAAE,gBAAgB,eAAe,MAAM;GACvC,IAAI,EAAE,SAAS,oBAAoB;IACjC,EAAE,kBAAkB,UAAU,MAAM;IACpC,EAAE,kBAAkB,UAAU,MAAM;GACtC;EACF;EACA,SAAS,iBAAiB,QAAQ,KAAK;GAErC,UADc,cAAc,MACZ,KAAK,qBAAqB;GAC1C,cAAc,MAAM;GACpB,IAAI,QAAQ,cAAc,MAAM;GAChC,IAAI,YAAY,gBAAgB,MAAM;GACtC,IAAI,UAAU,gBAAgB,MAAM;GACpC,IAAI,MAAM,gBAAgB,MAAM;GAChC,IAAI,iBAAiB,UAAU,MAAM;GACrC,IAAI,iBAAiB,UAAU,MAAM;GACrC,IAAI,gBAAgB,UAAU,MAAM;GACpC,IAAI,UAAU,UAAU,MAAM;EAChC;EACA,SAAS,gBAAgB,QAAQ,OAAO;GAEtC,UADc,cAAc,MACZ,KAAK,oBAAoB;GACzC,cAAc,MAAM;GACpB,MAAM,SAAS,kBAAkB,MAAM;GACvC,MAAM,aAAa,kBAAkB,MAAM;GAC3C,MAAM,gBAAgB,kBAAkB,MAAM;GAC9C,MAAM,iBAAiB,kBAAkB,MAAM;GAC/C,MAAM,eAAe,kBAAkB,MAAM;GAC7C,MAAM,aAAa,kBAAkB,MAAM;GAC3C,MAAM,cAAc,kBAAkB,MAAM;GAC5C,MAAM,YAAY,IAAI,OAAO;GAC7B,MAAM,YAAY,eAAe,QAAQ,MAAM,CAAC;GAChD,IAAI,MAAM,YAAY;IACpB,MAAM,UAAU,CAAC;IACjB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,YAAY,EAAE,GAAG;KACzC,MAAM,QAAQ,KAAK,IAAI,OAAO;KAC9B,eAAe,QAAQ,MAAM,QAAQ,EAAE;IACzC;GACF;GACA,IAAI,MAAM,eAAe;IACvB,MAAM,aAAa,CAAC;IACpB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,eAAe,EAAE,GAAG;KAC5C,MAAM,WAAW,KAAK,IAAI,WAAW;KACrC,mBAAmB,QAAQ,MAAM,WAAW,EAAE;IAChD;GACF;GACA,IAAI,MAAM,gBAAgB;IACxB,MAAM,cAAc,CAAC;IACrB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,gBAAgB,EAAE,GAAG;KAC7C,MAAM,YAAY,KAAK,IAAI,YAAY;KACvC,eAAe,QAAQ,MAAM,YAAY,EAAE;IAC7C;GACF;GACA,IAAI,MAAM,cAAc;IACtB,MAAM,YAAY,CAAC;IACnB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,cAAc,EAAE,GAAG;KAC3C,MAAM,UAAU,KAAK,IAAI,UAAU;KACnC,kBAAkB,QAAQ,MAAM,UAAU,EAAE;IAC9C;GACF;GACA,IAAI,MAAM,YAAY;IACpB,MAAM,UAAU,CAAC;IACjB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,YAAY,EAAE,GAAG;KACzC,MAAM,QAAQ,KAAK,IAAI,QAAQ;KAC/B,gBAAgB,QAAQ,MAAM,QAAQ,EAAE;IAC1C;GACF;GACA,IAAI,MAAM,aAAa;IACrB,MAAM,WAAW,CAAC;IAClB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,aAAa,EAAE,GAAG;KAC1C,MAAM,SAAS,KAAK,IAAI,SAAS;KACjC,iBAAiB,QAAQ,MAAM,SAAS,EAAE;IAC5C;GACF;EACF;EACA,IAAI,eAAe;EACnB,IAAI,eAAe;EACnB,SAAS,aAAa,QAAQ;GAC5B,OAAO,aAAa;GACpB,OAAO,OAAO,SAAS,KAAK,KAAK;IAC/B,IAAI,OAAO,cACT,OAAO,cAAc;IAEvB,IAAI,OAAO,cACT,OAAO,aAAa;GAExB;GACA,OAAO,YAAY,SAAS,MAAM,MAAM,GAAG;IACzC,IAAI,QAAQ,OAAO;IACnB,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KACzB,KAAK,KAAK,aAAa,IAAI;GAC/B;GACA,OAAO,aAAa,SAAS,OAAO,KAAK;IAEvC,IAAI,UADO,KAAK,OACG,MAAM,OAAO,GAAG;IACnC,OAAO,IAAI,aAAa,OAAO;GACjC;GACA,OAAO,iBAAiB,SAAS,OAAO,KAAK;IAE3C,IAAI,UADO,KAAK,OACG,MAAM,OAAO,GAAG;IACnC,OAAO,IAAI,YAAY,OAAO;GAChC;GACA,OAAO,gBAAgB,SAAS,OAAO,KAAK;IAE1C,IAAI,UADO,KAAK,OACG,MAAM,OAAO,GAAG;IACnC,OAAO,IAAI,WAAW,OAAO;GAC/B;GACA,OAAO,iBAAiB,SAAS,OAAO,KAAK;IAE3C,IAAI,UADO,KAAK,OACG,MAAM,OAAO,GAAG;IACnC,OAAO,IAAI,YAAY,OAAO;GAChC;EACF;EACA,IAAI,WAAW;EACf,SAAS,eAAe,WAAW;GACjC,IAAI,SAAS,IAAI,QAAQ;GACzB,IAAI,SAAS,IAAI,SAAS,SAAS;GACnC,aAAa,MAAM;GACnB,OAAO,KAAK,IAAI,YAAY;GAC5B,OAAO,eAAe,kBAAkB,MAAM;GAC9C,OAAO,eAAe,kBAAkB,MAAM;GAC9C,OAAO,kBAAkB,kBAAkB,MAAM;GACjD,OAAO,eAAe,kBAAkB,MAAM;GAC9C,YAAY,cAAc,MAAM,IAAI;GACpC,aAAa,cAAc,MAAM,IAAI;GACrC,IAAI,WACF,MAAM;GACR,OAAO,KAAK,KAAK,YAAY;GAC7B,OAAO,KAAK,KAAK,YAAY;GAC7B,OAAO,KAAK,IAAI,YAAY;GAC5B,IAAI,YAAY;IACd,IAAI,mBAAmB,cAAc,MAAM;IAC3C,IAAI,iBAAiB,OAAO,SAAS,IAAI,OAAO,KAAK;IACrD,IAAI,iBAAiB,CAAC;IACtB,OAAO,KAAK,gBAAgB,GAAG,cAAc;IAC7C,IAAI,mBAAmB,CAAC;IACxB,WAAW,kBAAkB,kBAAkB,gBAAgB,cAAc;IAE7E,gBAAgB,IADD,YAAY,gBACR,GAAG,MAAM;GAC9B,OACE,gBAAgB,QAAQ,MAAM;GAEhC,OAAO,OAAO,QAAQ;EACxB;EACA,OAAO,eAAe,MAAM;CAC9B;AACF;;;ACr5CA,IAAM,YAAN,cAAwB,OAAO;CAC7B,YAAY,SAAS;EACnB,MAAM,OAAO;CACf;CACA,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,MAAM,QAAQ;EACd,MAAM,SAAS,IAAI,WAAW,KAAK,OAAO;EAC1C,OAAO,QAAQ,KAAK,IAAI;EACxB,OAAO,gBAAgB,aAAa;EACpC,OAAO,KACL,KACA,SAAS,MAAM;GACb,OAAO,MAAM,MAAM,IAAI,CAAC;EAC1B,GACA,YACA,OACF;CACF;CACA,MAAM,MAAM;EACV,MAAM,OAAO,IAAI,SAAS,IAAI;EAC9B,MAAM,cAAc,KAAK,UAAU,CAAC;EACpC,MAAM,cAAc,KAAK,UAAU,CAAC;EACpC,IAAI,SAAS;EACb,MAAM,QAAQ,IAAI,aAAa,WAAW;EAC1C,MAAM,SAAS,IAAI,aAAa,cAAc,WAAW,EAAE,KAAK,CAAC;EACjE,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,KAAK;GACpC,MAAM,KAAK,KAAK,WAAW,MAAM;GACjC,UAAU;GACV,OAAO,cAAc,IAAI,KAAK;EAChC;EACA,MAAM,QAAQ,IAAI,oBAAoB,0BAA0B,OAAO,MAAM;EAC7E,MAAM,OAAO,IAAI,cAAc,WAAW,MAAM,MAAM,SAAS,IAAI,CAAC,KAAK,CAAC;EAC1E,MAAM,eAAe,CAAC;EACtB,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,KAAK;GACpC,MAAM,cAAc,IAAI,aAAa,cAAc,CAAC;GACpD,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,KAAK;IACpC,MAAM,SAAS,IAAI;IACnB,YAAY,SAAS,KAAK,KAAK,WAAW,MAAM;IAChD,UAAU;IACV,YAAY,SAAS,KAAK,KAAK,WAAW,MAAM;IAChD,UAAU;IACV,YAAY,SAAS,KAAK,KAAK,WAAW,MAAM;IAChD,UAAU;GACZ;GACA,MAAM,YAAY,IAAI,gBAAgB,aAAa,CAAC;GACpD,UAAU,OAAO,WAAW;GAC5B,aAAa,KAAK,SAAS;EAC7B;EACA,OAAO;GACL;GACA;EACF;CACF;AACF;;;ACnDA,IAAM,gBAAgB,WAAW;AACjC,IAAM,YAAN,cAAwB,kBAAkB;CACxC,YAAY,SAAS;EACnB,MAAM,OAAO;EACb,KAAK,OAAO;CACd;CACA,MAAM,QAAQ;EACZ,MAAM,eAAe;EACrB,MAAM,cAAc;EAEpB,MAAM,cAAc;EACpB,MAAM,cAAc;EACpB,MAAM,cAAc,KAAK;EACzB,MAAM,cAAc,cAAc;EAClC,MAAM,QAAQ;EACd,MAAM,WAAW,KAAK,QAAQ;EAC9B,MAAM,YAAY,KAAK,SAAS;EAChC,MAAM,qBAAqB;EAC3B,MAAM,oBAAoB;EAC1B,MAAM,oBAAoB,KAAwB;EAClD,MAAM,aAAa;EACnB,MAAM,eAAe;EACrB,MAAM,aAAa;EACnB,MAAM,aAAa;EACnB,MAAM,YAAY;EAClB,MAAM,iBAAiB;EACvB,MAAM,UAAU;EAChB,MAAM,UAAU;EAChB,MAAM,YAAY;EAClB,MAAM,MAAM;EACZ,MAAM,UAAU,KAAK,IAAI,WAAW,GAAG;EACvC,SAAS,qBAAqB,QAAQ,KAAK;GACzC,IAAI,IAAI;GACR,KAAK,IAAI,IAAI,GAAG,IAAI,cAAc,EAAE,GAClC,IAAI,KAAK,KAAK,OAAO,KAAK,KAAK,MAAM,IAAI,IACvC,IAAI,OAAO;GAGf,IAAI,IAAI,IAAI;GACZ,OAAO,IAAI,cACT,IAAI,OAAO;GACb,OAAO;EACT;EACA,SAAS,iBAAiB,MAAM;GAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,KAAK;IACpC,KAAK,KAAK,CAAC;IACX,KAAK,GAAG,MAAM;IACd,KAAK,GAAG,MAAM;IACd,KAAK,GAAG,IAAI;GACd;EACF;EACA,MAAM,gBAAgB;GAAE,GAAG;GAAG,GAAG;GAAG,IAAI;EAAE;EAC1C,SAAS,QAAQ,OAAO,GAAG,IAAI,aAAa,UAAU;GACpD,OAAO,KAAK,OAAO;IACjB,IAAI,KAAK,IAAI,gBAAgB,aAAa,QAAQ;IAClD,MAAM;GACR;GACA,MAAM;GACN,cAAc,IAAI,KAAK,MAAM,KAAK,SAAS;GAC3C,cAAc,IAAI;GAClB,cAAc,KAAK;EACrB;EACA,MAAM,iBAAiB,IAAI,MAAM,EAAE;EACnC,SAAS,sBAAsB,OAAO;GACpC,KAAK,IAAI,IAAI,GAAG,KAAK,IAAI,EAAE,GACzB,eAAe,KAAK;GACtB,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,EAAE,GACjC,eAAe,MAAM,OAAO;GAC9B,IAAI,IAAI;GACR,KAAK,IAAI,IAAI,IAAI,IAAI,GAAG,EAAE,GAAG;IAC3B,IAAI,KAAK,IAAI,eAAe,MAAM;IAClC,eAAe,KAAK;IACpB,IAAI;GACN;GACA,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,EAAE,GAAG;IACpC,IAAI,IAAI,MAAM;IACd,IAAI,IAAI,GACN,MAAM,KAAK,IAAI,eAAe,QAAQ;GAC1C;EACF;EACA,SAAS,kBAAkB,aAAa,YAAY,UAAU,IAAI,IAAI,IAAI,OAAO;GAC/E,IAAI,IAAI;GACR,IAAI,IAAI;GACR,IAAI,KAAK;GACT,OAAO,MAAM,IAAI,MAAM;IACrB,IAAI,EAAE,QAAQ,SAAS,QAAQ,IAC7B,OAAO;IACT,QAAQ,GAAG,GAAG,IAAI,aAAa,CAAC;IAChC,IAAI,IAAI,cAAc;IACtB,IAAI,cAAc;IAClB,KAAK,cAAc;IACnB,MAAM,MAAM;IACZ,IAAI,KAAK,mBAAmB;KAC1B,IAAI,EAAE,QAAQ,SAAS,QAAQ,IAC7B,MAAM;KAER,QAAQ,GAAG,GAAG,IAAI,aAAa,CAAC;KAChC,IAAI,QAAQ,cAAc,IAAI;KAC9B,IAAI,cAAc;KAClB,KAAK,cAAc;KACnB,IAAI,KAAK,QAAQ,KAAK,GACpB,MAAM;KAER,OAAO,SACL,MAAM,QAAQ;KAChB;IACF,OAAO,IAAI,KAAK,oBAAoB;KAClC,IAAI,QAAQ,IAAI,qBAAqB;KACrC,IAAI,KAAK,QAAQ,KAAK,GACpB,MAAM;KAER,OAAO,SACL,MAAM,QAAQ;KAChB;IACF;GACF;GACA,sBAAsB,KAAK;EAC7B;EACA,SAAS,UAAU,MAAM;GACvB,OAAO,OAAO;EAChB;EACA,SAAS,QAAQ,MAAM;GACrB,OAAO,QAAQ;EACjB;EACA,SAAS,iBAAiB,OAAO,IAAI,IAAI,QAAQ;GAC/C,OAAO,MAAM,IAAI,MAAM;IACrB,IAAI,IAAI,QAAQ,MAAM,GAAG;IACzB,IAAI,IAAI,UAAU,MAAM,GAAG;IAC3B,IAAI,KAAK,GACP,MAAM;IAER,IAAI,IAAI,aAAa;KACnB,IAAI,KAAK,OAAO,KAAK,IAAI;KACzB,IAAI,GAAG,KACL,MAAM;KAER,GAAG;KACH,IAAI,GAAG,GAAG;MACR,IAAI,IAAI,GAAG;MACX,GAAG,IAAI,IAAI,MAAM,GAAG,GAAG;MACvB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,MAAM,GAAG,EAAE,GAChC,GAAG,EAAE,KAAK,EAAE;KAEhB,OACE,GAAG,IAAI,IAAI,MAAM,CAAC;KAEpB,GAAG,EAAE,GAAG,MAAM,KAAK;IACrB,OAAO,IAAI,GAAG;KACZ,IAAI,WAAW;KACf,KAAK,IAAI,IAAI,KAAK,cAAc,GAAG,IAAI,GAAG,KAAK;MAC7C,IAAI,KAAK,QAAQ,KAAK,cAAc,KAAK;MACzC,IAAI,GAAG,OAAO,GAAG,GACf,MAAM;MAER,GAAG,MAAM;MACT,GAAG,MAAM;MACT;KACF;IACF;GACF;GACA,OAAO;EACT;EACA,MAAM,gBAAgB;GAAE,GAAG;GAAG,IAAI;EAAE;EACpC,SAAS,QAAQ,GAAG,IAAI,aAAa,UAAU;GAC7C,IAAI,KAAK,IAAI,gBAAgB,aAAa,QAAQ;GAClD,MAAM;GACN,cAAc,IAAI;GAClB,cAAc,KAAK;EACrB;EACA,MAAM,gBAAgB;GAAE,GAAG;GAAG,IAAI;EAAE;EACpC,SAAS,QAAQ,IAAI,KAAK,GAAG,IAAI,aAAa,YAAY,UAAU,WAAW,iBAAiB,oBAAoB;GAClH,IAAI,MAAM,KAAK;IACb,IAAI,KAAK,GAAG;KACV,QAAQ,GAAG,IAAI,aAAa,QAAQ;KACpC,IAAI,cAAc;KAClB,KAAK,cAAc;IACrB;IACA,MAAM;IACN,IAAI,KAAK,KAAK;IACd,IAAI,KAAK,IAAI,WAAW,CAAC,EAAE,CAAC,EAAE;IAC9B,IAAI,gBAAgB,QAAQ,KAAK,oBAC/B,OAAO;IAET,IAAI,IAAI,UAAU,gBAAgB,QAAQ;IAC1C,OAAO,OAAO,GACZ,UAAU,gBAAgB,WAAW;GAEzC,OAAO,IAAI,gBAAgB,QAAQ,oBACjC,UAAU,gBAAgB,WAAW;QAErC,OAAO;GAET,cAAc,IAAI;GAClB,cAAc,KAAK;EACrB;EACA,SAAS,OAAO,OAAO;GACrB,OAAO,QAAQ;EACjB;EACA,SAAS,MAAM,OAAO;GACpB,IAAI,MAAM,OAAO,KAAK;GACtB,OAAO,MAAM,QAAQ,MAAM,QAAQ;EACrC;EACA,MAAM,eAAe;GAAE,GAAG;GAAG,GAAG;EAAE;EAClC,SAAS,OAAO,GAAG,GAAG;GACpB,IAAI,KAAK,MAAM,CAAC;GAEhB,IAAI,KADK,MAAM,CACL;GACV,IAAI,KAAK,MAAM,KAAK,MAAM,MAAM;GAChC,IAAI,KAAK;GACT,IAAI,KAAK,KAAK;GACd,aAAa,IAAI;GACjB,aAAa,IAAI;EACnB;EACA,SAAS,OAAO,GAAG,GAAG;GACpB,IAAI,IAAI,OAAO,CAAC;GAChB,IAAI,IAAI,OAAO,CAAC;GAChB,IAAI,KAAK,KAAK,KAAK,KAAK;GAExB,aAAa,IADJ,IAAI,KAAK,WAAW;GAE7B,aAAa,IAAI;EACnB;EACA,SAAS,WAAW,SAAS,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI;GAClD,IAAI,MAAM,KAAK;GACf,IAAI,IAAI,KAAK,KAAK,KAAK;GACvB,IAAI,IAAI;GACR,IAAI;GACJ,OAAO,KAAK,GACV,MAAM;GACR,MAAM;GACN,KAAK;GACL,MAAM;GACN,OAAO,KAAK,GAAG;IACb,IAAI,KAAK;IACT,IAAI,KAAK,KAAK,MAAM,KAAK;IACzB,IAAI,MAAM,KAAK;IACf,IAAI,MAAM,KAAK;IACf,IAAI,MAAM,KAAK;IACf,IAAI,MAAM,KAAK;IACf,IAAI,KAAK,KAAK,KAAK;IACnB,OAAO,MAAM,IAAI,MAAM,KAAK;KAC1B,IAAI,KAAK;KACT,IAAI,KAAK,KAAK,MAAM,KAAK;KACzB,OAAO,MAAM,IAAI,MAAM,KAAK;MAC1B,IAAI,MAAM,KAAK;MACf,IAAI,MAAM,KAAK;MACf,IAAI,MAAM,MAAM;MAChB,IAAI,KAAK;OACP,OAAO,QAAQ,KAAK,IAAI,QAAQ,MAAM,EAAE;OACxC,MAAM,aAAa;OACnB,MAAM,aAAa;OACnB,OAAO,QAAQ,MAAM,IAAI,QAAQ,MAAM,EAAE;OACzC,MAAM,aAAa;OACnB,MAAM,aAAa;OACnB,OAAO,KAAK,GAAG;OACf,QAAQ,KAAK,KAAK,aAAa;OAC/B,QAAQ,MAAM,KAAK,aAAa;OAChC,OAAO,KAAK,GAAG;OACf,QAAQ,MAAM,KAAK,aAAa;OAChC,QAAQ,MAAM,KAAK,aAAa;MAClC,OAAO;OACL,OAAO,QAAQ,KAAK,IAAI,QAAQ,MAAM,EAAE;OACxC,MAAM,aAAa;OACnB,MAAM,aAAa;OACnB,OAAO,QAAQ,MAAM,IAAI,QAAQ,MAAM,EAAE;OACzC,MAAM,aAAa;OACnB,MAAM,aAAa;OACnB,OAAO,KAAK,GAAG;OACf,QAAQ,KAAK,KAAK,aAAa;OAC/B,QAAQ,MAAM,KAAK,aAAa;OAChC,OAAO,KAAK,GAAG;OACf,QAAQ,MAAM,KAAK,aAAa;OAChC,QAAQ,MAAM,KAAK,aAAa;MAClC;KACF;KACA,IAAI,KAAK,GAAG;MACV,IAAI,MAAM,KAAK;MACf,IAAI,KACF,OAAO,QAAQ,KAAK,IAAI,QAAQ,MAAM,EAAE;WAExC,OAAO,QAAQ,KAAK,IAAI,QAAQ,MAAM,EAAE;MAC1C,MAAM,aAAa;MACnB,QAAQ,MAAM,KAAK,aAAa;MAChC,QAAQ,KAAK,KAAK;KACpB;IACF;IACA,IAAI,KAAK,GAAG;KACV,IAAI,KAAK;KACT,IAAI,KAAK,KAAK,MAAM,KAAK;KACzB,OAAO,MAAM,IAAI,MAAM,KAAK;MAC1B,IAAI,MAAM,KAAK;MACf,IAAI,KACF,OAAO,QAAQ,KAAK,IAAI,QAAQ,MAAM,EAAE;WAExC,OAAO,QAAQ,KAAK,IAAI,QAAQ,MAAM,EAAE;MAC1C,MAAM,aAAa;MACnB,QAAQ,MAAM,KAAK,aAAa;MAChC,QAAQ,KAAK,KAAK;KACpB;IACF;IACA,KAAK;IACL,MAAM;GACR;GACA,OAAO;EACT;EACA,SAAS,UAAU,eAAe,eAAe,aAAa,YAAY,UAAU,IAAI,KAAK,IAAI,WAAW,WAAW;GACrH,IAAI,IAAI;GACR,IAAI,KAAK;GACT,IAAI,qBAAqB;GACzB,IAAI,cAAc,KAAK,MAAM,SAAS,SAAS,KAAK,KAAK,CAAC;GAC1D,OAAO,SAAS,QAAQ,aAAa;IACnC,QAAQ,GAAG,IAAI,aAAa,QAAQ;IACpC,IAAI,cAAc;IAClB,KAAK,cAAc;IACnB,OAAO,MAAM,aAAa;KAExB,IAAI,KAAK,cADG,KAAK,KAAK,cAAc;KAEpC,IAAI,GAAG,KAAK;MACV,MAAM,GAAG;MACT,QAAQ,GAAG,KAAK,KAAK,GAAG,IAAI,aAAa,YAAY,UAAU,WAAW,WAAW,kBAAkB;MACvG,IAAI,cAAc;MAClB,KAAK,cAAc;KACrB,OAAO;MACL,IAAI,CAAC,GAAG,GACN,MAAM;MAER,IAAI;MACJ,KAAK,IAAI,GAAG,IAAI,GAAG,KAAK,KAAK;OAC3B,IAAI,IAAI,UAAU,cAAc,GAAG,EAAE,GAAG;OACxC,OAAO,KAAK,KAAK,SAAS,QAAQ,aAAa;QAC7C,QAAQ,GAAG,IAAI,aAAa,QAAQ;QACpC,IAAI,cAAc;QAClB,KAAK,cAAc;OACrB;OACA,IAAI,MAAM;YACJ,QAAQ,cAAc,GAAG,EAAE,GAAG,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI;SACnE,MAAM;SACN,QACE,GAAG,EAAE,IACL,KACA,GACA,IACA,aACA,YACA,UACA,WACA,WACA,kBACF;SACA,IAAI,cAAc;SAClB,KAAK,cAAc;SACnB;QACF;;MAEJ;MACA,IAAI,KAAK,GAAG,KACV,MAAM;KAEV;IACF;GACF;GACA,IAAI,IAAI,IAAI,KAAK;GACjB,MAAM;GACN,MAAM;GACN,OAAO,KAAK,GAAG;IACb,IAAI,KAAK,cAAc,KAAK,cAAc,KAAK;IAC/C,IAAI,GAAG,KAAK;KACV,MAAM,GAAG;KACT,QAAQ,GAAG,KAAK,KAAK,GAAG,IAAI,aAAa,YAAY,UAAU,WAAW,WAAW,kBAAkB;KACvG,IAAI,cAAc;KAClB,KAAK,cAAc;IACrB,OACE,MAAM;GAEV;GACA,OAAO;EACT;EACA,SAAS,cAAc,aAAa,YAAY,UAAU,aAAa,WAAW,MAAM;GACtF,IAAI,YAAY,EAAE,OAAO,EAAE;GAC3B,IAAI,kBAAkB,SAAS;GAC/B,IAAI,KAAK,YAAY,YAAY,QAAQ;GACzC,IAAI,KAAK,YAAY,YAAY,QAAQ;GACzC,SAAS,SAAS;GAClB,IAAI,QAAQ,YAAY,YAAY,QAAQ;GAC5C,SAAS,SAAS;GAClB,IAAI,KAAK,KAAK,MAAM,eAAe,KAAK,KAAK,MAAM,aACjD,MAAM;GAER,IAAI,OAAO,IAAI,MAAM,WAAW;GAChC,IAAI,OAAO,IAAI,MAAM,WAAW;GAChC,iBAAiB,IAAI;GAErB,kBAAkB,aAAa,YAAY,UADlC,eAAe,SAAS,QAAQ,kBACgB,IAAI,IAAI,IAAI;GACrE,IAAI,QAAQ,KAAK,eAAe,SAAS,QAAQ,mBAC/C,MAAM;GAER,iBAAiB,MAAM,IAAI,IAAI,IAAI;GACnC,UAAU,MAAM,MAAM,aAAa,YAAY,UAAU,OAAO,IAAI,MAAM,WAAW,SAAS;EAChG;EACA,SAAS,SAAS,KAAK,MAAM,OAAO;GAClC,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,EAAE,GAC3B,KAAK,KAAK,IAAI,KAAK;EAEvB;EACA,SAAS,UAAU,QAAQ;GACzB,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAEjC,OAAO,KADC,OAAO,IAAI,KAAK,OAAO,KAAK;EAGxC;EACA,SAAS,iBAAiB,QAAQ,KAAK;GACrC,IAAI,KAAK;GACT,IAAI,KAAK,KAAK,OAAO,OAAO,SAAS,KAAK,CAAC;GAC3C,IAAI,IAAI;GACR,IAAI,OAAO,OAAO,SAAS;GAC3B,OAAO,MAAM;IACX,IAAI,IAAI,MACN;IACF,IAAI,OAAO,OAAO;IAClB,IAAI,IAAI,MACN;IACF,IAAI,OAAO,OAAO;GACpB;EACF;EACA,SAAS,gBAAgB,QAAQ;GAC/B,IAAI,OAAO,OAAO;GAClB,IAAI,MAAM,IAAI,MAAM;GACpB,IAAI,IAAI;GACR,IAAI,SAAS,IAAI,SAAS,MAAM;GAChC,OAAO,OAAO,GAAG;IACf,IAAI,IAAI,OAAO,QAAQ,GAAG;IAC1B,IAAI,IAAI,GAAG;KACT,IAAI,QAAQ,CAAC;KACb,QAAQ,QAAQ;KAChB,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KACzB,IAAI,KAAK,OAAO,SAAS,GAAG,CAAC;IAEjC,OAAO;KACL,IAAI,QAAQ;KACZ,QAAQ;KACR,IAAI,QAAQ,OAAO,SAAS,GAAG;KAC/B,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,GAAG,KAC7B,IAAI,KAAK,KAAK;IAElB;GACF;GACA,OAAO;EACT;EACA,SAAS,eAAe,QAAQ,SAAS,aAAa,UAAU,UAAU,WAAW;GACnF,IAAI,WAAW,IAAI,SAAS,UAAU,MAAM;GAC5C,IAAI,QAAQ,YAAY,OAAO,IAAI,IAAI;GACvC,IAAI,SAAS,YAAY,OAAO,IAAI,IAAI;GACxC,IAAI,UAAU;GACd,IAAI,iBAAiB,KAAK,MAAM,QAAQ,CAAC;GACzC,IAAI,aAAa,KAAK,KAAK,QAAQ,CAAC;GACpC,IAAI,aAAa,KAAK,KAAK,SAAS,CAAC;GACrC,IAAI,YAAY,SAAS,aAAa,KAAK;GAC3C,IAAI,YAAY,UAAU,aAAa,KAAK;GAC5C,IAAI,aAAa,EAAE,OAAO,EAAE;GAC5B,IAAI,aAAa,IAAI,MAAM,OAAO;GAClC,IAAI,UAAU,IAAI,MAAM,OAAO;GAC/B,IAAI,eAAe,IAAI,MAAM,OAAO;GACpC,IAAI,WAAW,IAAI,MAAM,OAAO;GAChC,IAAI,aAAa,IAAI,MAAM,OAAO;GAClC,KAAK,IAAI,QAAQ,GAAG,QAAQ,SAAS,EAAE,OAAO;IAC5C,WAAW,SAAS,QAAQ,OAAO,IAAI;IACvC,WAAW,SAAS,QAAQ,IAAI,IAAI,WAAW,QAAQ,KAAK,aAAa;IACzE,QAAQ,SAAS,IAAI,aAAa,EAAE;IACpC,aAAa,SAAS,IAAI,YAAY,EAAE;IACxC,SAAS,SAAS,IAAI,YAAY,aAAa,EAAE;GACnD;GACA,KAAK,IAAI,SAAS,GAAG,SAAS,YAAY,EAAE,QAAQ;IAClD,IAAI,OAAO;IACX,IAAI,UAAU,aAAa,GACzB,OAAO;IACT,IAAI,OAAO;IACX,KAAK,IAAI,SAAS,GAAG,SAAS,YAAY,EAAE,QAAQ;KAClD,IAAI,UAAU,aAAa,GACzB,OAAO;KACT,KAAK,IAAI,QAAQ,GAAG,QAAQ,SAAS,EAAE,OAAO;MAC5C,aAAa,OAAO,KAAK,CAAC;MAC1B,aAAa,OAAO,KAAK,SAAS,WAAW;MAC7C,QAAQ,YAAY,UAAU,aAAa,MAAM;MACjD,SAAS,aAAa,QAAQ,QAAQ,MAAM;MAC5C,WAAW,QAAQ,MAAM;KAC3B;KAEE,cAAc,OAAO;KAEvB,KAAK,IAAI,QAAQ,GAAG,QAAQ,SAAS,EAAE,OACrC,cAAc,QAAQ,QAAQ,SAAS,QAAQ,SAAS,EAAE;IAE9D;IACA,IAAI,UAAU;IACd,KAAK,IAAI,QAAQ,GAAG,QAAQ,SAAS,EAAE,OAAO;KAC5C,MAAM,QAAQ,YAAY,OAAO,IAAI,QAAQ;KAC7C,KAAK,IAAI,KAAK,IAAI,QAAQ,KAAK,IAAI,SAAS,MAAM,EAAE,IAAI;MACtD,UAAU,WAAW,OAAO;MAC5B,KAAK,IAAI,SAAS,GAAG,SAAS,gBAAgB,EAAE,QAAQ;OACtD,MAAM,MAAM,SAAS,MAAM,KAAK,KAAK;OACrC,SAAS,UAAU,UAAU,IAAI,aAAa,OAAO,SAAS,OAAO,MAAM,IAAI,IAAI;OACnF,SAAS,UAAU,UAAU,IAAI,aAAa,OAAO,SAAS,OAAO,MAAM,IAAI,IAAI;OACnF,SAAS,UAAU,UAAU,IAAI,aAAa,OAAO,SAAS,OAAO,MAAM,IAAI,IAAI;OACnF,SAAS,UAAU,UAAU,IAAI,aAAa,OAAO,SAAS,OAAO,MAAM,IAAI,IAAI;OACnF,SAAS,UAAU,UAAU,IAAI,aAAa,OAAO,SAAS,OAAO,MAAM,IAAI,IAAI;OACnF,SAAS,UAAU,UAAU,IAAI,aAAa,OAAO,SAAS,OAAO,MAAM,IAAI,IAAI;OACnF,SAAS,UAAU,UAAU,IAAI,aAAa,OAAO,SAAS,OAAO,MAAM,IAAI,IAAI;OACnF,SAAS,UAAU,UAAU,IAAI,aAAa,OAAO,SAAS,OAAO,MAAM,IAAI,IAAI;OACnF,WAAW,IAAI,aAAa;MAC9B;KACF;KACA,IAAI,kBAAkB,YACpB,KAAK,IAAI,KAAK,IAAI,QAAQ,KAAK,IAAI,SAAS,MAAM,EAAE,IAAI;MACtD,MAAM,UAAU,WAAW,OAAO,MAAM,IAAI,iBAAiB,aAAa;MAC1E,MAAM,MAAM,iBAAiB,MAAM,KAAK,KAAK;MAC7C,KAAK,IAAI,KAAK,GAAG,KAAK,MAAM,EAAE,IAC5B,SAAS,UAAU,UAAU,KAAK,aAAa,OAAO,SAAS,OAAO,MAAM,KAAK,IAAI;KAEzF;IAEJ;GACF;GACA,IAAI,UAAU,IAAI,YAAY,KAAK;GACnC,IAAI,WAAW,IAAI,SAAS,UAAU,MAAM;GAC5C,KAAK,IAAI,OAAO,GAAG,OAAO,SAAS,EAAE,MAAM;IACzC,YAAY,OAAO,IAAI,OAAO,UAAU;IACxC,IAAI,OAAO,YAAY,OAAO,IAAI,OAAO;IACzC,IAAI,YAAY,MAAM,QAAQ,GAC5B;IACF,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,EAAE,GAAG;KAC/B,MAAM,UAAU,WAAW,MAAM;KACjC,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,EAAE,GAC3B,QAAQ,KAAK,SAAS,UAAU,UAAU,IAAI,aAAa,MAAM,IAAI;KAEvE,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,EAAE,GAC3B,SAAS,WAAW,UAAU,IAAI,aAAa,MAAM,cAAc,QAAQ,EAAE,GAAG,IAAI;IAExF;GACF;EACF;EACA,SAAS,QAAQ,YAAY,UAAU,cAAc;GACnD,IAAI;GACJ,IAAI,UAAU;GACd,OAAO,UAAU,IAAI;IACnB,UAAU,SAAS,WAAW;IAC9B,IAAI,WAAW,OACb,UAAU;SACL,IAAI,WAAW,KAAK,KACzB,WAAW,UAAU;SAChB;KACL,aAAa,WAAW;KACxB;IACF;IACA,WAAW;GACb;EACF;EACA,SAAS,SAAS,KAAK,KAAK;GAC1B,IAAI,KAAK,cAAc,IAAI,EAAE;GAC7B,IAAI,KAAK,cAAc,IAAI,EAAE;GAC7B,IAAI,KAAK,cAAc,IAAI,EAAE;GAC7B,IAAI,KAAK,cAAc,IAAI,EAAE;GAC7B,IAAI,KAAK,cAAc,IAAI,GAAG;GAC9B,IAAI,KAAK,cAAc,IAAI,GAAG;GAC9B,IAAI,KAAK,cAAc,IAAI,GAAG;GAC9B,IAAI,KAAK,cAAc,IAAI,GAAG;GAC9B,IAAI,KAAK,cAAc,IAAI,EAAE;GAC7B,IAAI,KAAK,cAAc,IAAI,EAAE;GAC7B,IAAI,MAAM,cAAc,IAAI,EAAE;GAC9B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,EAAE;GAC9B,IAAI,MAAM,cAAc,IAAI,EAAE;GAC9B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,EAAE;GAC9B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;GAC/B,IAAI,MAAM,cAAc,IAAI,GAAG;EACjC;EACA,SAAS,WAAW,MAAM;GACxB,MAAM,IAAI,KAAM,KAAK,IAAI,UAAU,CAAC;GACpC,MAAM,IAAI,KAAM,KAAK,IAAI,UAAU,EAAE;GACrC,MAAM,IAAI,KAAM,KAAK,IAAI,UAAU,CAAC;GACpC,MAAM,IAAI,KAAM,KAAK,IAAI,IAAI,UAAU,EAAE;GACzC,MAAM,IAAI,KAAM,KAAK,IAAI,IAAI,UAAU,EAAE;GACzC,MAAM,IAAI,KAAM,KAAK,IAAI,IAAI,UAAU,CAAC;GACxC,MAAM,IAAI,KAAM,KAAK,IAAI,IAAI,UAAU,EAAE;GACzC,IAAI,QAAQ,IAAI,MAAM,CAAC;GACvB,IAAI,OAAO,IAAI,MAAM,CAAC;GACtB,IAAI,QAAQ,IAAI,MAAM,CAAC;GACvB,IAAI,QAAQ,IAAI,MAAM,CAAC;GACvB,KAAK,IAAI,MAAM,GAAG,MAAM,GAAG,EAAE,KAAK;IAChC,IAAI,SAAS,MAAM;IACnB,MAAM,KAAK,IAAI,KAAK,SAAS;IAC7B,MAAM,KAAK,IAAI,KAAK,SAAS;IAC7B,MAAM,KAAK,IAAI,KAAK,SAAS;IAC7B,MAAM,KAAK,IAAI,KAAK,SAAS;IAC7B,KAAK,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS;IACjG,KAAK,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS;IACjG,KAAK,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS;IACjG,KAAK,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS;IACjG,MAAM,KAAK,KAAK,KAAK,SAAS,KAAK,KAAK,SAAS;IACjD,MAAM,KAAK,KAAK,KAAK,SAAS,KAAK,KAAK,SAAS;IACjD,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,KAAK,SAAS,KAAK,MAAM,KAAK,KAAK;IACnC,KAAK,SAAS,KAAK,MAAM,KAAK,KAAK;IACnC,KAAK,SAAS,KAAK,MAAM,KAAK,KAAK;IACnC,KAAK,SAAS,KAAK,MAAM,KAAK,KAAK;IACnC,KAAK,SAAS,KAAK,MAAM,KAAK,KAAK;IACnC,KAAK,SAAS,KAAK,MAAM,KAAK,KAAK;IACnC,KAAK,SAAS,KAAK,MAAM,KAAK,KAAK;IACnC,KAAK,SAAS,KAAK,MAAM,KAAK,KAAK;GACrC;GACA,KAAK,IAAI,SAAS,GAAG,SAAS,GAAG,EAAE,QAAQ;IACzC,MAAM,KAAK,IAAI,KAAK,KAAK;IACzB,MAAM,KAAK,IAAI,KAAK,KAAK;IACzB,MAAM,KAAK,IAAI,KAAK,KAAK;IACzB,MAAM,KAAK,IAAI,KAAK,KAAK;IACzB,KAAK,KAAK,IAAI,KAAK,IAAI,UAAU,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK;IAC/F,KAAK,KAAK,IAAI,KAAK,IAAI,UAAU,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK;IAC/F,KAAK,KAAK,IAAI,KAAK,IAAI,UAAU,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK;IAC/F,KAAK,KAAK,IAAI,KAAK,IAAI,UAAU,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK;IAC/F,MAAM,KAAK,KAAK,KAAK,UAAU,KAAK,KAAK;IACzC,MAAM,KAAK,KAAK,KAAK,UAAU,KAAK,KAAK;IACzC,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,MAAM,KAAK,MAAM,KAAK,MAAM;IAC5B,KAAK,IAAI,UAAU,MAAM,KAAK,KAAK;IACnC,KAAK,IAAI,UAAU,MAAM,KAAK,KAAK;IACnC,KAAK,KAAK,UAAU,MAAM,KAAK,KAAK;IACpC,KAAK,KAAK,UAAU,MAAM,KAAK,KAAK;IACpC,KAAK,KAAK,UAAU,MAAM,KAAK,KAAK;IACpC,KAAK,KAAK,UAAU,MAAM,KAAK,KAAK;IACpC,KAAK,KAAK,UAAU,MAAM,KAAK,KAAK;IACpC,KAAK,KAAK,UAAU,MAAM,KAAK,KAAK;GACtC;EACF;EACA,SAAS,cAAc,MAAM;GAC3B,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,GAAG;IAC3B,IAAI,IAAI,KAAK,GAAG;IAChB,IAAI,KAAK,KAAK,GAAG;IACjB,IAAI,KAAK,KAAK,GAAG;IACjB,KAAK,GAAG,KAAK,IAAI,SAAS;IAC1B,KAAK,GAAG,KAAK,IAAI,QAAS,KAAK,QAAS;IACxC,KAAK,GAAG,KAAK,IAAI,SAAS;GAC5B;EACF;EACA,SAAS,cAAc,KAAK,KAAK,KAAK;GACpC,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,GACxB,IAAI,MAAM,KAAK,UAAU,YAAY,SAAS,IAAI,EAAE,CAAC;EAEzD;EACA,SAAS,SAAS,OAAO;GACvB,IAAI,SAAS,GACX,OAAO,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,GAAG;QAEvD,OAAO,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI,SAAS,KAAK,IAAI,KAAK,IAAI,CAAC;EAEnE;EACA,SAAS,cAAc,MAAM;GAC3B,OAAO,IAAI,SAAS,KAAK,MAAM,QAAQ,KAAK,OAAO,OAAO,KAAK,IAAI;EACrE;EACA,SAAS,cAAc,MAAM;GAC3B,IAAI,aAAa,KAAK,OAAO,OAAO,MAAM,KAAK,OAAO,OAAO,KAAK,OAAO,QAAQ,KAAK,IAAI;GAC1F,IAAI,YAAY,IAAI,WAAW,gBAAgB,UAAU,CAAC;GAC1D,IAAI,YAAY,IAAI,WAAW,UAAU,MAAM;GAC/C,UAAU,SAAS;GACnB,iBAAiB,WAAW,SAAS;GACrC,OAAO,IAAI,SAAS,UAAU,MAAM;EACtC;EACA,SAAS,cAAc,MAAM;GAE3B,IAAI,YAAY,WADC,KAAK,MAAM,MAAM,KAAK,OAAO,OAAO,KAAK,OAAO,QAAQ,KAAK,IAC1C,CAAC;GACrC,IAAI,YAAY,IAAI,WAAW,UAAU,MAAM;GAC/C,UAAU,SAAS;GACnB,iBAAiB,WAAW,SAAS;GACrC,OAAO,IAAI,SAAS,UAAU,MAAM;EACtC;EACA,SAAS,cAAc,MAAM;GAC3B,IAAI,aAAa,KAAK;GACtB,IAAI,WAAW,EAAE,OAAO,KAAK,OAAO,MAAM;GAC1C,IAAI,YAAY,IAAI,YAAY,KAAK,QAAQ,KAAK,qBAAqB,KAAK,WAAW,KAAK,KAAK;GACjG,IAAI,SAAS,IAAI,WAAW,WAAW;GACvC,IAAI,eAAe;GACnB,IAAI,iBAAiB,IAAI,MAAM,KAAK,QAAQ;GAC5C,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,UAAU,KAAK;IACtC,eAAe,KAAK,CAAC;IACrB,eAAe,GAAG,WAAW;IAC7B,eAAe,GAAG,SAAS,eAAe,GAAG;IAC7C,eAAe,GAAG,QAAQ,KAAK;IAC/B,eAAe,GAAG,QAAQ,KAAK;IAC/B,eAAe,GAAG,UAAU,KAAK;IACjC,gBAAgB,eAAe,GAAG,KAAK,eAAe,GAAG,KAAK,eAAe,GAAG;GAClF;GACA,IAAI,aAAa,YAAY,YAAY,QAAQ;GACjD,IAAI,aAAa,YAAY,YAAY,QAAQ;GACjD,IAAI,cAAc,aAChB,MAAM;GAER,IAAI,cAAc,YAChB,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,aAAa,GAAG,KAC/C,OAAO,IAAI,cAAc,WAAW,YAAY,QAAQ;GAG5D,IAAI,MAAM,IAAI,YAAY,YAAY;GACtC,IAAI,WAAW,qBAAqB,QAAQ,GAAG;GAC/C,IAAI,SAAS,YAAY,YAAY,QAAQ;GAC7C,cAAc,KAAK,OAAO,YAAY,UAAU,QAAQ,WAAW,YAAY;GAC/E,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,UAAU,EAAE,GAAG;IACtC,IAAI,KAAK,eAAe;IACxB,KAAK,IAAI,IAAI,GAAG,IAAI,eAAe,GAAG,MAAM,EAAE,GAC5C,WAAW,WAAW,GAAG,QAAQ,GAAG,GAAG,IAAI,GAAG,MAAM,GAAG,IAAI,GAAG,KAAK,GAAG,MAAM,QAAQ;GAExF;GACA,SAAS,KAAK,WAAW,YAAY;GACrC,IAAI,aAAa;GACjB,IAAI,YAAY,IAAI,WAAW,UAAU,OAAO,UAAU;GAC1D,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,OAAO,KAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,UAAU,KAAK;IACtC,IAAI,KAAK,eAAe;IACxB,IAAI,IAAI,GAAG,KAAK,GAAG;IACnB,IAAI,KAAK,IAAI,WAAW,UAAU,QAAQ,GAAG,MAAM,YAAY,IAAI,UAAU;IAC7E,UAAU,IAAI,IAAI,UAAU;IAC5B,cAAc,IAAI;IAClB,GAAG,OAAO;GACZ;GAEF,OAAO,IAAI,SAAS,UAAU,MAAM;EACtC;EACA,SAAS,cAAc,MAAM;GAE3B,IAAI,YAAY,WADC,KAAK,MAAM,MAAM,KAAK,OAAO,OAAO,KAAK,OAAO,QAAQ,KAAK,IAC1C,CAAC;GACrC,MAAM,KAAK,KAAK,QAAQ,KAAK,WAAW,KAAK;GAC7C,MAAM,YAAY,KAAK,QAAQ,IAAI,IAAI,YAAY,EAAE,IAAI,IAAI,YAAY,EAAE;GAC3E,IAAI,eAAe;GACnB,IAAI,WAAW;GACf,MAAM,MAAM,IAAI,MAAM,CAAC;GACvB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,OAAO,KAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,UAAU,KAAK;IACtC,IAAI,QAAQ;IACZ,QAAQ,KAAK,MAAb;KACE,KAAK;MACH,IAAI,KAAK;MACT,IAAI,KAAK,IAAI,KAAK,KAAK;MACvB,eAAe,IAAI,KAAK,KAAK;MAC7B,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,OAAO,EAAE,GAAG;OACnC,MAAM,OAAO,UAAU,IAAI,SAAS,IAAI,UAAU,IAAI;OACtD,SAAS;OACT,UAAU,YAAY;OACtB;MACF;MACA;KACF,KAAK;MACH,IAAI,KAAK;MACT,IAAI,KAAK,IAAI,KAAK,KAAK;MACvB,IAAI,KAAK,IAAI,KAAK,KAAK;MACvB,eAAe,IAAI,KAAK,KAAK;MAC7B,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,OAAO,EAAE,GAAG;OACnC,MAAM,OAAO,UAAU,IAAI,SAAS,KAAK,UAAU,IAAI,SAAS,KAAK,UAAU,IAAI,SAAS;OAC5F,SAAS;OACT,UAAU,YAAY;OACtB;MACF;MACA;IACJ;GACF;GAEF,OAAO,IAAI,SAAS,UAAU,MAAM;EACtC;EACA,SAAS,cAAc,MAAM;GAC3B,IAAI,aAAa,KAAK;GACtB,IAAI,WAAW,EAAE,OAAO,KAAK,OAAO,MAAM;GAC1C,IAAI,YAAY,IAAI,WAAW,KAAK,QAAQ,KAAK,SAAS,KAAK,WAAW,KAAK,OAAO,WAAW;GACjG,IAAI,YAAY;IACd,SAAS,WAAW,YAAY,QAAQ;IACxC,yBAAyB,WAAW,YAAY,QAAQ;IACxD,uBAAuB,WAAW,YAAY,QAAQ;IACtD,kBAAkB,WAAW,YAAY,QAAQ;IACjD,kBAAkB,WAAW,YAAY,QAAQ;IACjD,mBAAmB,WAAW,YAAY,QAAQ;IAClD,qBAAqB,WAAW,YAAY,QAAQ;IACpD,YAAY,WAAW,YAAY,QAAQ;IAC3C,0BAA0B,WAAW,YAAY,QAAQ;IACzD,0BAA0B,WAAW,YAAY,QAAQ;IACzD,eAAe,WAAW,YAAY,QAAQ;GAChD;GACA,IAAI,UAAU,UAAU,GACtB,MAAM,sBAAsB,UAAU,cAAc,cAAc,UAAU,UAAU;GAExF,IAAI,eAAe,IAAI,MAAM;GAC7B,IAAI,WAAW,YAAY,YAAY,QAAQ,IAAI;GACnD,OAAO,WAAW,GAAG;IACnB,IAAI,OAAO,0BAA0B,WAAW,QAAQ,QAAQ;IAChE,IAAI,QAAQ,WAAW,YAAY,QAAQ;IAC3C,IAAI,cAAc,SAAS,IAAI;IAC/B,IAAI,OAAO,SAAS,KAAK;IACzB,IAAI,QAAQ,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE;IACjC,IAAI,OAAO,WAAW,YAAY,QAAQ;IAC1C,aAAa,KAAK;KAChB;KACA;KACA;KACA;IACF,CAAC;IACD,YAAY,KAAK,SAAS;GAC5B;GACA,IAAI,WAAW,UAAU;GACzB,IAAI,cAAc,IAAI,MAAM,KAAK,QAAQ;GACzC,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,UAAU,EAAE,GAAG;IACtC,IAAI,KAAK,YAAY,KAAK,CAAC;IAC3B,IAAI,UAAU,SAAS;IACvB,GAAG,OAAO,QAAQ;IAClB,GAAG,cAAc;IACjB,GAAG,UAAU;IACb,GAAG,OAAO,QAAQ;IAClB,GAAG,UAAU,QAAQ;IACrB,GAAG,QAAQ,KAAK;IAChB,GAAG,SAAS,KAAK;GACnB;GACA,IAAI,SAAS,EACX,KAAK,IAAI,MAAM,CAAC,EAClB;GACA,KAAK,IAAI,UAAU,GAAG,UAAU,KAAK,UAAU,EAAE,SAAS;IACxD,IAAI,KAAK,YAAY;IACrB,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,EAAE,GAAG;KAC5C,IAAI,OAAO,aAAa;KACxB,IAAI,GAAG,QAAQ,KAAK,MAAM;MACxB,GAAG,cAAc,KAAK;MACtB,IAAI,KAAK,SAAS,GAChB,OAAO,IAAI,KAAK,SAAS;MAE3B,GAAG,SAAS;KACd;IACF;GACF;GACA,IAAI,UAAU,mBAAmB,GAC/B,QAAQ,UAAU,eAAlB;IACE,KAAK;KACH,IAAI,WAAW,IAAI,YAAY,UAAU,wBAAwB;KACjE,cACE,KAAK,OACL,YACA,UACA,UAAU,kBACV,UACA,UAAU,wBACZ;KACA;IACF,KAAK;KACH,IAAI,aAAa,KAAK,MAAM,MAAM,SAAS,OAAO,SAAS,QAAQ,UAAU,wBAAwB;KACrG,IAAI,OAAO,WAAW,UAAU;KAChC,IAAI,WAAW,IAAI,YAAY,KAAK,MAAM;KAC1C,SAAS,SAAS,UAAU;KAC5B;GACJ;GAEF,IAAI,UAAU,mBAAmB,GAAG;IAClC,IAAI,WAAW;KACb,OAAO,KAAK;KACZ,QAAQ;KACR,MAAM,UAAU;IAClB;IACA,IAAI,WAAW,IAAI,YAAY,cAAc,QAAQ,EAAE,MAAM;IAC7D,SAAS,SAAS,UAAU;GAC9B;GACA,IAAI,UAAU,aAAa,GAAG;IAC5B,IAAI,aAAa,KAAK,MAAM,MAAM,SAAS,OAAO,SAAS,QAAQ,UAAU,iBAAiB;IAC9F,IAAI,OAAO,WAAW,UAAU;IAChC,IAAI,YAAY,gBAAgB,KAAK,MAAM;IAC3C,SAAS,SAAS,UAAU;GAC9B;GACA,IAAI,eAAe;GACnB,IAAI,aAAa,IAAI,MAAM,YAAY,MAAM;GAC7C,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,EAAE,GACvC,WAAW,KAAK,IAAI,MAAM;GAE5B,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,OAAO,EAAE,GAChC,KAAK,IAAI,OAAO,GAAG,OAAO,YAAY,QAAQ,EAAE,MAAM;IACpD,WAAW,MAAM,KAAK,YAAY;IAClC,gBAAgB,YAAY,MAAM,QAAQ,KAAK,OAAO;GACxD;GAEF,eAAe,QAAQ,YAAY,aAAa,UAAU,UAAU,SAAS;GAC7E,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,QAAQ,EAAE,GAAG;IAC3C,IAAI,KAAK,YAAY;IACrB,IAAI,GAAG,SACL;IACF,QAAQ,GAAG,aAAX;KACE,KAAK;MACH,IAAI,MAAM;MACV,IAAI,YAAY;MAChB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,OAAO,EAAE,GAAG;OACnC,IAAI,iBAAiB,WAAW,GAAG;OACnC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,OAAO,EAAE,GAAG;QACjC,KAAK,IAAI,OAAO,GAAG,OAAO,aAAa,GAAG,MAAM,EAAE,MAChD,UAAU,oBAAoB,UAAU,YAAY,OAAO,GAAG,QAAQ,GAAG;QAE3E;OACF;OACA;MACF;MACA;KACF,KAAK;KACL,SACE,MAAM;IACV;GACF;GACA,OAAO,IAAI,SAAS,UAAU,MAAM;EACtC;EACA,SAAS,0BAA0B,SAAS,SAAS;GACnD,IAAI,aAAa,IAAI,WAAW,OAAO;GACvC,IAAI,YAAY;GAChB,OAAO,WAAW,QAAQ,QAAQ,cAAc,GAC9C,aAAa;GAEf,IAAI,cAAc,IAAI,YAAY,EAAE,OAAO,WAAW,MAAM,QAAQ,OAAO,QAAQ,QAAQ,SAAS,CAAC;GACrG,QAAQ,QAAQ,QAAQ,QAAQ,YAAY;GAC5C,OAAO;EACT;EACA,SAAS,uBAAuB,SAAS,SAAS,MAAM;GACtD,IAAI,cAAc,IAAI,YAAY,EAAE,OAAO,IAAI,WAAW,OAAO,EAAE,MAAM,QAAQ,OAAO,QAAQ,QAAQ,IAAI,CAAC;GAC7G,QAAQ,QAAQ,QAAQ,QAAQ;GAChC,OAAO;EACT;EACA,SAAS,cAAc,UAAU,SAAS;GAGxC,OAAO,CAFC,WAAW,UAAU,OAErB,GADA,YAAY,UAAU,OACnB,CAAC;EACd;EACA,SAAS,cAAc,UAAU,SAAS;GAGxC,OAAO,CAFC,YAAY,UAAU,OAEtB,GADA,YAAY,UAAU,OACnB,CAAC;EACd;EACA,SAAS,WAAW,UAAU,SAAS;GACrC,IAAI,QAAQ,SAAS,SAAS,QAAQ,OAAO,IAAI;GACjD,QAAQ,QAAQ,QAAQ,QAAQ;GAChC,OAAO;EACT;EACA,SAAS,YAAY,UAAU,SAAS;GACtC,IAAI,SAAS,SAAS,UAAU,QAAQ,OAAO,IAAI;GACnD,QAAQ,QAAQ,QAAQ,QAAQ;GAChC,OAAO;EACT;EACA,SAAS,gBAAgB,aAAa,SAAS;GAC7C,IAAI,QAAQ,YAAY,QAAQ;GAChC,QAAQ,QAAQ,QAAQ,QAAQ;GAChC,OAAO;EACT;EACA,SAAS,WAAW,UAAU,SAAS;GACrC,IAAI,QAAQ,SAAS,SAAS,QAAQ,KAAK;GAC3C,QAAQ,QAAQ,QAAQ,QAAQ;GAChC,OAAO;EACT;EACA,MAAM,aAAa,SAAS,UAAU,SAAS;GAC7C,IAAI;GACJ,IAAI,iBAAiB,SAAS,WAC5B,MAAM,OAAO,SAAS,YAAY,QAAQ,OAAO,IAAI,CAAC;QAEtD,MAAM,SAAS,UAAU,QAAQ,QAAQ,GAAG,IAAI,IAAI,OAAO,SAAS,UAAU,QAAQ,OAAO,IAAI,KAAK,EAAE;GAE1G,QAAQ,SAAS;GACjB,OAAO;EACT;EACA,SAAS,aAAa,UAAU,SAAS;GACvC,IAAI,QAAQ,SAAS,WAAW,QAAQ,OAAO,IAAI;GACnD,QAAQ,SAAS;GACjB,OAAO;EACT;EACA,SAAS,cAAc,UAAU,SAAS;GACxC,OAAO,UAAU,YAAY,aAAa,UAAU,OAAO,CAAC;EAC9D;EACA,SAAS,cAAc,QAAQ;GAC7B,IAAI,YAAY,SAAS,UAAU,IAAI,WAAW,SAAS;GAC3D,QAAQ,UAAU,KAAK,KAAK,MAAM,WAAW,aAAa,KAAK,WAAW,MAAM,WAAW,KAAK,IAAI,GAAG,WAAW,EAAE,KAAK,IAAI,WAAW,QAAQ,kBAAkB,WAAW;EAC/K;EACA,SAAS,YAAY,UAAU,SAAS;GACtC,IAAI,SAAS,SAAS,UAAU,QAAQ,OAAO,IAAI;GACnD,QAAQ,SAAS;GACjB,OAAO;EACT;EACA,SAAS,aAAa,SAAS,SAAS;GACtC,OAAO,cAAc,YAAY,SAAS,OAAO,CAAC;EACpD;EACA,SAAS,YAAY,UAAU,SAAS,SAAS,MAAM;GACrD,IAAI,cAAc,QAAQ;GAC1B,IAAI,WAAW,CAAC;GAChB,OAAO,QAAQ,QAAQ,cAAc,OAAO,GAAG;IAC7C,IAAI,OAAO,0BAA0B,SAAS,OAAO;IACrD,IAAI,YAAY,WAAW,UAAU,OAAO;IAC5C,IAAI,UAAU,WAAW,UAAU,OAAO;IAC1C,QAAQ,SAAS;IACjB,IAAI,YAAY,WAAW,UAAU,OAAO;IAC5C,IAAI,YAAY,WAAW,UAAU,OAAO;IAC5C,SAAS,KAAK;KACZ;KACA;KACA;KACA;KACA;IACF,CAAC;GACH;GACA,QAAQ,SAAS;GACjB,OAAO;EACT;EACA,SAAS,oBAAoB,UAAU,SAAS;GAS9C,OAAO;IACL,MATS,aAAa,UAAU,OAS7B;IACH,MATS,aAAa,UAAU,OAS7B;IACH,QATW,aAAa,UAAU,OAS7B;IACL,QATW,aAAa,UAAU,OAS7B;IACL,OATU,aAAa,UAAU,OAS7B;IACJ,OATU,aAAa,UAAU,OAS7B;IACJ,QATW,aAAa,UAAU,OAS7B;IACL,QATW,aAAa,UAAU,OAS7B;GACP;EACF;EACA,SAAS,iBAAiB,UAAU,SAAS;GAc3C,OAAO;IAZL;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GAGoB,EADJ,WAAW,UAAU,OACL;EACpC;EACA,SAAS,WAAW,UAAU,SAAS;GAKrC,OAAO;IAAE,MAJE,YAAY,UAAU,OAIrB;IAAG,MAHJ,YAAY,UAAU,OAGf;IAAG,MAFV,YAAY,UAAU,OAET;IAAG,MADhB,YAAY,UAAU,OACH;GAAE;EAClC;EACA,SAAS,eAAe,UAAU,SAAS;GAGzC,OAAO,CAFW,cAEF,EADA,WAAW,UAAU,OACX;EAC5B;EACA,SAAS,SAAS,UAAU,SAAS;GAGnC,OAAO,CAFC,aAAa,UAAU,OAEvB,GADA,aAAa,UAAU,OACpB,CAAC;EACd;EACA,SAAS,SAAS,UAAU,SAAS;GAInC,OAAO;IAHC,aAAa,UAAU,OAGvB;IAFA,aAAa,UAAU,OAEpB;IADH,aAAa,UAAU,OACjB;GAAC;EACjB;EACA,SAAS,WAAW,UAAU,SAAS,SAAS,MAAM,MAAM;GAC1D,IAAI,SAAS,YAAY,SAAS,kBAAkB,SAAS,cAC3D,OAAO,uBAAuB,SAAS,SAAS,IAAI;QAC/C,IAAI,SAAS,UAClB,OAAO,YAAY,UAAU,SAAS,SAAS,IAAI;QAC9C,IAAI,SAAS,kBAClB,OAAO,oBAAoB,UAAU,OAAO;QACvC,IAAI,SAAS,eAClB,OAAO,iBAAiB,UAAU,OAAO;QACpC,IAAI,SAAS,SAClB,OAAO,WAAW,UAAU,OAAO;QAC9B,IAAI,SAAS,aAClB,OAAO,eAAe,UAAU,OAAO;QAClC,IAAI,SAAS,SAClB,OAAO,aAAa,UAAU,OAAO;QAChC,IAAI,SAAS,OAClB,OAAO,SAAS,UAAU,OAAO;QAC5B,IAAI,SAAS,OAClB,OAAO,SAAS,UAAU,OAAO;QAC5B,IAAI,SAAS,OAClB,OAAO,WAAW,UAAU,OAAO;QAC9B,IAAI,SAAS,YAClB,OAAO,cAAc,UAAU,OAAO;QACjC,IAAI,SAAS,YAClB,OAAO,cAAc,UAAU,OAAO;QACjC,IAAI,SAAS,WAAW;IAC7B,QAAQ,SAAS;IACjB,OAAO;GACT,OAAO;IACL,QAAQ,SAAS;IACjB;GACF;EACF;EACA,SAAS,YAAY,UAAU,SAAS,SAAS;GAC/C,MAAM,aAAa,CAAC;GACpB,IAAI,SAAS,UAAU,GAAG,IAAI,KAAK,UACjC,MAAM;GAER,WAAW,UAAU,SAAS,SAAS,CAAC;GACxC,MAAM,OAAO,SAAS,SAAS,CAAC;GAChC,WAAW,OAAO;IAChB,YAAY,CAAC,EAAE,OAAO;IACtB,UAAU,CAAC,EAAE,OAAO;IACpB,YAAY,CAAC,EAAE,OAAO;IACtB,WAAW,CAAC,EAAE,OAAO;GACvB;GACA,QAAQ,QAAQ;GAChB,IAAI,cAAc;GAClB,OAAO,aAAa;IAClB,IAAI,gBAAgB,0BAA0B,SAAS,OAAO;IAC9D,IAAI,iBAAiB,GACnB,cAAc;SACT;KACL,IAAI,gBAAgB,0BAA0B,SAAS,OAAO;KAE9D,IAAI,iBAAiB,WAAW,UAAU,SAAS,SAAS,eADxC,YAAY,UAAU,OAC6C,CAAC;KACxF,IAAI,mBAAmB,KAAK,GAC1B,QAAQ,KAAK,2DAA2D,cAAc,GAAG;UAEzF,WAAW,iBAAiB;IAEhC;GACF;GACA,KAAK,OAAO,OAAO,GAAG;IACpB,QAAQ,MAAM,cAAc,UAAU;IACtC,MAAM;GACR;GACA,OAAO;EACT;EACA,SAAS,aAAa,YAAY,UAAU,aAAa,SAAS,YAAY;GAC5E,MAAM,cAAc;IAClB,MAAM;IACN,QAAQ;IACR,OAAO;IACP,QAAQ;IACR,OAAO,WAAW,WAAW,OAAO,WAAW,WAAW,OAAO;IACjE,QAAQ,WAAW,WAAW,OAAO,WAAW,WAAW,OAAO;IAClE,UAAU,WAAW,SAAS;IAC9B,cAAc;IACd,OAAO;IACP,WAAW;IACX,MAAM,WAAW,SAAS,GAAG;IAC7B,YAAY;IACZ,QAAQ;IACR,QAAQ;KACP,gBAAgB,eAAe,aAAa;GAC/C;GACA,QAAQ,WAAW,aAAnB;IACE,KAAK;KACH,YAAY,QAAQ;KACpB,YAAY,aAAa;KACzB;IACF,KAAK;KACH,YAAY,QAAQ;KACpB,YAAY,aAAa;KACzB;IACF,KAAK;KACH,YAAY,QAAQ;KACpB,YAAY,aAAa;KACzB;IACF,KAAK;KACH,YAAY,QAAQ;KACpB,YAAY,aAAa;KACzB;IACF,KAAK;KACH,YAAY,QAAQ;KACpB,YAAY,aAAa;KACzB;IACF,KAAK;KACH,YAAY,QAAQ;KACpB,YAAY,aAAa;KACzB;IACF,KAAK;KACH,YAAY,QAAQ;KACpB,YAAY,aAAa;KACzB;IACF,KAAK;KACH,YAAY,QAAQ;KACpB,YAAY,aAAa;KACzB;IACF,SACE,MAAM,sBAAsB,WAAW,cAAc;GACzD;GACA,YAAY,oBAAoB,YAAY;GAC5C,IAAI,YAAY,QAAQ,GACtB,QAAQ,YAAR;IACE,KAAK;KACH,YAAY,SAAS;KACrB,YAAY,YAAY;KACxB;IACF,KAAK;KACH,YAAY,SAAS;KACrB,YAAY,YAAY;KACxB;GACJ;QACK,IAAI,YAAY,QAAQ,GAC7B,QAAQ,YAAR;IACE,KAAK;KACH,YAAY,SAAS;KACrB,YAAY,YAAY;KACxB;IACF,KAAK;KACH,YAAY,SAAS;KACrB,YAAY,YAAY;GAC5B;QAEA,MAAM,4CAA4C,YAAY,OAAO,UAAU,WAAW,cAAc;GAE1G,YAAY,cAAc,WAAW,WAAW,OAAO,KAAK,YAAY;GACxE,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,YAAY,KAC1C,WAAW,UAAU,OAAO;GAC9B,YAAY,iBAAiB,YAAY,YAAY,IAAI,IAAI,YAAY;GACzE,MAAM,OAAO,YAAY,QAAQ,YAAY,SAAS,YAAY;GAClE,QAAQ,YAAR;IACE,KAAK;KACH,YAAY,YAAY,IAAI,aAAa,IAAI;KAC7C,IAAI,YAAY,WAAW,YAAY,gBACrC,YAAY,UAAU,KAAK,GAAG,GAAG,IAAI;KACvC;IACF,KAAK;KACH,YAAY,YAAY,IAAI,YAAY,IAAI;KAC5C,IAAI,YAAY,WAAW,YAAY,gBACrC,YAAY,UAAU,KAAK,OAAO,GAAG,IAAI;KAC3C;IACF;KACE,QAAQ,MAAM,uCAAuC,UAAU;KAC/D;GACJ;GACA,YAAY,eAAe,YAAY,QAAQ,YAAY,YAAY,YAAY;GACnF,IAAI,YAAY,kBAAkB,GAChC,YAAY,SAAS;QAErB,YAAY,SAAS;GACvB,IAAI,eACF,YAAY,aAAa;QAEzB,YAAY,WAAW;GACzB,OAAO;EACT;EACA,MAAM,iBAAiB,IAAI,SAAS,MAAM;EAC1C,MAAM,aAAa,IAAI,WAAW,MAAM;EACxC,MAAM,SAAS,EAAE,OAAO,EAAE;EAC1B,MAAM,YAAY,YAAY,gBAAgB,QAAQ,MAAM;EAC5D,MAAM,aAAa,aAAa,WAAW,gBAAgB,YAAY,QAAQ,KAAK,IAAI;EACxF,MAAM,YAAY,EAAE,OAAO,EAAE;EAC7B,MAAM,iBAAiB;GAAE,GAAG;GAAG,GAAG;GAAG,GAAG;GAAG,GAAG;GAAG,GAAG;EAAE;EACtD,KAAK,IAAI,mBAAmB,GAAG,mBAAmB,WAAW,SAAS,WAAW,mBAAmB,oBAAoB;GACtH,MAAM,OAAO,YAAY,gBAAgB,MAAM;GAC/C,WAAW,OAAO,YAAY,gBAAgB,MAAM;GACpD,WAAW,QAAQ,OAAO,WAAW,oBAAoB,WAAW,SAAS,WAAW,SAAS,OAAO,WAAW;GAEnH,MAAM,SADe,WAAW,OAAO,WAAW,QAAQ,WAAW,eACvC,WAAW,WAAW,UAAU,IAAI,cAAc,UAAU;GAC1F,OAAO,SAAS,WAAW;GAC3B,KAAK,IAAI,SAAS,GAAG,SAAS,WAAW,mBAAmB,UAAU;IACpE,MAAM,SAAS,SAAS,mBAAmB,WAAW;IACtD,IAAI,UAAU,WAAW,QACvB;IACF,KAAK,IAAI,YAAY,GAAG,YAAY,WAAW,UAAU,aAAa;KACpE,MAAM,OAAO,eAAe,UAAU,SAAS,WAAW;KAC1D,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,OAAO,KAAK;MACzC,UAAU,SAAS,UAAU,WAAW,WAAW,WAAW,SAAS,YAAY,WAAW,QAAQ,KAAK,WAAW;MACtH,MAAM,YAAY,WAAW,SAAS,IAAI,WAAW,WAAW,QAAQ,WAAW,kBAAkB,IAAI,WAAW,iBAAiB;MACrI,WAAW,UAAU,YAAY,WAAW,OAAO,QAAQ,SAAS;KACtE;IACF;GACF;EACF;EACA,OAAO;GACL,QAAQ;GACR,OAAO,WAAW;GAClB,QAAQ,WAAW;GACnB,MAAM,WAAW;GACjB,QAAQ,WAAW;IAClB,gBAAgB,eAAe,aAAa,WAAW,gBAAgB,eAAe;GACvF,MAAM,KAAK;EACb;CACF;CACA,YAAY,OAAO;EACjB,KAAK,OAAO;EACZ,OAAO;CACT;CACA,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,SAAS,eAAe,SAAS,SAAS;GACxC,IAAI,eACF,QAAQ,aAAa,QAAQ;QAE7B,QAAQ,WAAW,QAAQ;GAC7B,QAAQ,YAAY;GACpB,QAAQ,YAAY;GACpB,QAAQ,kBAAkB;GAC1B,QAAQ,QAAQ;GAChB,IAAI,QACF,OAAO,SAAS,OAAO;EAC3B;EACA,OAAO,MAAM,KAAK,KAAK,gBAAgB,YAAY,OAAO;CAC5D;AACF;;;ACt0CA,IAAM,gBAAN,cAA4B,OAAO;CACjC,YAAY,SAAS;EACnB,MAAM,OAAO;EACb,KAAK,sBAAsB,CAAC;CAC9B;CACA,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,MAAM,QAAQ;EACd,MAAM,SAAS,IAAI,WAAW,MAAM,OAAO;EAC3C,OAAO,QAAQ,MAAM,IAAI;EACzB,OAAO,gBAAgB,aAAa;EACpC,OAAO,iBAAiB,MAAM,aAAa;EAC3C,OAAO,mBAAmB,MAAM,eAAe;EAC/C,OAAO,KACL,KACA,SAAS,QAAQ;GACf,IAAI;IACF,OAAO,MAAM,MAAM,MAAM,CAAC;GAC5B,SAAS,GAAG;IACV,IAAI,SACF,QAAQ,CAAC;SAET,QAAQ,MAAM,CAAC;IAEjB,MAAM,QAAQ,UAAU,GAAG;GAC7B;EACF,GACA,YACA,OACF;CACF;CACA,MAAM,MAAM;EACV,MAAM,QAAQ;EACd,MAAM,gBAAgB,IAAI,cAAc,KAAK,OAAO;EACpD,SAAS,aAAa,OAAO;GAC3B,IAAI,MAAM;GACV,IAAI,OAAO;GACX,IAAI;GACJ,IAAI;GACJ,MAAM,iBAAiB,CAAC;GACxB,MAAM,oBAAoB,CAAC;GAC3B,IAAI;GACJ,MAAM,aAAa,CAAC;GACpB,MAAM,mBAAmB,CAAC;GAC1B,MAAM,gBAAgB,CAAC;GACvB,MAAM,aAAa,CAAC;GACpB,IAAI;IACF,MAAM,UAAU,IAAI,WAAW,KAAK,CAAC;GACvC,SAAS,GAAG;IACV,IAAI,aAAa,gBAAgB;KAC/B,QAAQ,MAAM,yDAAyD;KACvE,OAAO;IACT;GACF;GACA,KAAK,QAAQ,KACX,IAAI,KAAK,MAAM,gBAAgB,GAC7B,WAAW;QACN,IAAI,KAAK,MAAM,6BAA6B,GACjD,gBAAgB;QACX,IAAI,KAAK,MAAM,iBAAiB,GACrC,eAAe,KAAK,IAAI;QACnB,IAAI,KAAK,MAAM,yBAAyB;QAE1C,IAAI,KAAK,MAAM,oBAAoB,GACtC,kBAAkB,KAAK,IAAI;QACtB,IAAI,KAAK,MAAM,gBAAgB;GAGxC,MAAM,WAAW,IAAI;GAErB,MAAM,OAAO,aADQC,aAAW,QACK,CAAC;GACtC,IAAI,eAAe;IACjB,MAAM,YAAY,IAAI;IAEtB,YAAY,aADUA,aAAW,SACI,CAAC;GACxC;GACA,KAAK,IAAI,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;IAC9C,MAAM,YAAY,eAAe;IACjC,MAAM,OAAO,IAAI;IACjB,MAAM,WAAWA,aAAW,IAAI;IAChC,MAAM,UAAU,IAAI,UAAU,EAAE,gBAAgB,UAAU,iBAAiB;IAC3E,IAAI,QAAQ,gBAAgB,SAAS,YAAY,MAAM,SACrD,QAAQ,MAAM,gEAAgE,SAAS;IAEzF,MAAM,YAAY,QAAQ,cAAc,OAAO;IAC/C,MAAM,aAAa,CAAC;IACpB,KAAK,IAAI,KAAK,GAAG,KAAK,UAAU,WAAW,QAAQ,MAAM;KACvD,MAAM,OAAO,UAAU,WAAW;KAClC,IAAI,KAAK,KAAK,MAAM,cAAc,GAChC,WAAW,KAAK,SAAS,OAAO;IAEpC;IACA,MAAM,YAAY,eAAe,SAAS;IAC1C,UAAU,SAAS;IACnB,IAAI,IAAI,OAAO,KAAK,UAAU,EAAE,QAC9B,UAAU,gBAAgB;IAE5B,WAAW,aAAa;GAC1B;GACA,KAAK,IAAI,IAAI,GAAG,IAAI,kBAAkB,QAAQ,KAAK;IACjD,MAAM,mBAAmB,kBAAkB;IAC3C,cAAc,oBAAoB,IAAI,kBAAkB;GAC1D;GACA,OAAO;IACL;IACA;IACA,OAAO;IACP,aAAa;IACb,SAAS;IACT,OAAO;GACT;EACF;EACA,SAAS,aAAa,cAAc;GAClC,MAAM,gBAAgB,CAAC;GAEvB,MAAM,YADc,IAAI,UAAU,EAAE,gBAAgB,cAAc,iBACtC,EAAE,iBAAiB,cAAc;GAC7D,KAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;IACzC,MAAM,WAAW,UAAU;IAC3B,MAAM,eAAe;KACnB,QAAQ,SAAS,aAAa,QAAQ;KAEtC,IAAI,SAAS,aAAa,IAAI;KAE9B,MAAM,SAAS,aAAa,MAAM;IAEpC;IACA,cAAc,KAAK,YAAY;GACjC;GACA,OAAO;EACT;EACA,SAAS,mBAAmB,eAAe;GACzC,MAAM,eAAe,CAAC;GACtB,KAAK,IAAI,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;IAC7C,MAAM,eAAe,cAAc;IACnC,MAAM,OAAO,aAAa,aAAa,MAAM;IAW7C,IAAI,KAAK;KATP;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IAEgB,EAAE,QAAQ,IAAI,GAC9B,aAAa,QAAQ,aAAa;GAEtC;GACA,OAAO;EACT;EACA,SAAS,uBAAuB,mBAAmB;GACjD,MAAM,oBAAoB;IACxB,IAAI,kBAAkB,aAAa,IAAI;IAEvC,eAAe,CAAC;GAClB;GACA,MAAM,oBAAoB,kBAAkB,iBAAiB,MAAM;GACnE,KAAK,IAAI,IAAI,GAAG,IAAI,kBAAkB,QAAQ,KAAK;IACjD,MAAM,mBAAmB,kBAAkB;IAC3C,MAAM,mBAAmB,sBAAsB,gBAAgB;IAC/D,iBAAiB,QAAQ;IACzB,kBAAkB,cAAc,KAAK,gBAAgB;GACvD;GACA,OAAO;EACT;EACA,SAAS,mBAAmB,eAAe;GAYzC,OAAO;IAVL,IAAI,cAAc,aAAa,IAAI;IAEnC,MAAM,cAAc,aAAa,MAAM;IAEvC,aAAa,cAAc,aAAa,aAAa;IAErD,YAAY,cAAc,aAAa,YAAY;IACnD,YAAY,cAAc,aAAa,YAAY;IACnD,QAAQ,cAAc,aAAa,QAAQ;GAE1B;EACrB;EACA,SAAS,yBAAyB,oBAAoB;GACpD,MAAM,qBAAqB;IACzB,IAAI,mBAAmB,aAAa,IAAI;IAExC,OAAO,mBAAmB,aAAa,OAAO;IAE9C,qBAAqB,mBAAmB,aAAa,qBAAqB;GAC5E;GACA,MAAM,iBAAiB,mBAAmB,iBAAiB,WAAW;GACtE,MAAM,MAAM,CAAC;GACb,KAAK,IAAI,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;IAC9C,MAAM,gBAAgB,eAAe;IACrC,MAAM,IAAI,cAAc,aAAa,GAAG;IACxC,MAAM,IAAI,cAAc,aAAa,GAAG;IACxC,IAAI,KAAK,WAAW,CAAC,GAAG,WAAW,CAAC,CAAC;GACvC;GACA,mBAAmB,SAAS,IAAI,aAAa,GAAG;GAChD,OAAO;EACT;EACA,SAAS,oBAAoB,gBAAgB;GAC3C,MAAM,iBAAiB;IACrB,IAAI,eAAe,aAAa,IAAI;IAEpC,qBAAqB,eAAe,aAAa,qBAAqB;GACxE;GACA,MAAM,aAAa,eAAe,iBAAiB,OAAO;GAC1D,MAAM,SAAS,CAAC;GAChB,MAAM,cAAc,IAAI,MAAM;GAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;IAE1C,MAAM,QADY,WAAW,GACL,aAAa,OAAO;IAC5C,YAAY,SAAS,MAAM,UAAU,GAAG,CAAC,CAAC;IAC1C,YAAY,oBAAoB;IAChC,OAAO,KAAK,YAAY,GAAG,YAAY,GAAG,YAAY,CAAC;GACzD;GACA,eAAe,YAAY,IAAI,aAAa,MAAM;GAClD,OAAO;EACT;EACA,SAAS,mCAAmC,8BAA8B;GACxE,MAAM,gCAAgC,EACpC,IAAI,6BAA6B,aAAa,IAAI,EAEpD;GACA,MAAM,gBAAgB,6BAA6B,iBAAiB,YAAY;GAChF,MAAM,eAAe,CAAC;GACtB,KAAK,IAAI,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;IAC7C,MAAM,eAAe,cAAc;IACnC,aAAa,KAAK;KAChB,MAAM,aAAa,aAAa,MAAM;KAEtC,cAAc,WAAW,aAAa,aAAa,cAAc,CAAC;KAElE,WAAW,WAAW,aAAa,aAAa,WAAW,CAAC;IAE9D,CAAC;GACH;GACA,8BAA8B,OAAO;GACrC,OAAO;EACT;EACA,SAAS,sBAAsB,kBAAkB;GAC/C,MAAM,mBAAmB,CAAC;GAC1B,iBAAiB,UAAU,iBAAiB,aAAa,MAAM;GAC/D,iBAAiB,kBAAkB,iBAAiB,aAAa,cAAc;GAC/E,iBAAiB,yBAAyB,iBAAiB,aAAa,qBAAqB;GAC7F,OAAO;EACT;EACA,SAAS,cAAc,UAAU;GAC/B,MAAM,WAAW,CAAC;GAClB,MAAM,WAAW,CAAC;GAClB,MAAM,cAAc,SAAS,iBAAiB,iBAAiB;GAC/D,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;IAC3C,MAAM,aAAa,YAAY;IAC/B,MAAM,IAAI,WAAW,aAAa,GAAG;IACrC,MAAM,IAAI,WAAW,aAAa,GAAG;IACrC,MAAM,IAAI,WAAW,aAAa,GAAG;IACrC,SAAS,KAAK,WAAW,CAAC,GAAG,WAAW,CAAC,GAAG,WAAW,CAAC,CAAC;GAC3D;GACA,SAAS,cAAc,IAAI,aAAa,QAAQ;GAChD,MAAM,qBAAqB,CAAC;GAC5B,MAAM,YAAY,CAAC;GACnB,MAAM,gBAAgB,SAAS,iBAAiB,oBAAoB;GACpE,KAAK,IAAI,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;IAC7C,MAAM,eAAe,cAAc;IACnC,MAAM,KAAK,aAAa,aAAa,IAAI;IACzC,MAAM,KAAK,aAAa,aAAa,IAAI;IACzC,MAAM,KAAK,aAAa,aAAa,IAAI;IACzC,MAAM,KAAK,aAAa,aAAa,IAAI;IACzC,MAAM,KAAK,aAAa,aAAa,IAAI;IACzC,MAAM,KAAK,aAAa,aAAa,IAAI;IACzC,MAAM,MAAM,aAAa,aAAa,KAAK;IAC3C,MAAM,mBAAmB,CAAC;IAC1B,iBAAiB,QAAQ,SAAS,IAAI,EAAE;IACxC,iBAAiB,QAAQ,SAAS,IAAI,EAAE;IACxC,iBAAiB,QAAQ,SAAS,IAAI,EAAE;IACxC,UAAU,KAAK,iBAAiB,OAAO,iBAAiB,OAAO,iBAAiB,KAAK;IACrF,IAAI,IACF,iBAAiB,QAAQ,SAAS,IAAI,EAAE;IAE1C,IAAI,IACF,iBAAiB,QAAQ,SAAS,IAAI,EAAE;IAE1C,IAAI,IACF,iBAAiB,QAAQ,SAAS,IAAI,EAAE;IAE1C,IAAI,KACF,iBAAiB,SAAS;IAE5B,IAAI,IAAI,OAAO,KAAK,gBAAgB,EAAE,QACpC,mBAAmB,KAAK,gBAAgB;GAE5C;GACA,SAAS,wBAAwB;GACjC,SAAS,eAAe,IAAI,YAAY,SAAS;GACjD,OAAO;EACT;EACA,SAAS,oBAAoB,gBAAgB;GAC3C,MAAM,aAAa,CAAC;GACpB,MAAM,iBAAiB,eAAe,iBAAiB,WAAW;GAClE,KAAK,IAAI,IAAI,GAAG,IAAI,eAAe,QAAQ,KAAK;IAC9C,MAAM,gBAAgB,eAAe;IACrC,MAAM,gBAAgB,mBAAmB,aAAa;IACtD,WAAW,KAAK,aAAa;GAC/B;GACA,OAAO;EACT;EACA,SAAS,mBAAmB,eAAe;GACzC,MAAM,gBAAgB,CAAC;GACvB,cAAc,cAAc,cAAc,aAAa,UAAU;GACjE,MAAM,YAAY,cAAc,aAAa,WAAW;GACxD,IAAI,WACF,cAAc,eAAe,eAAe,SAAS;GAEvD,OAAO;EACT;EACA,SAAS,eAAe,WAAW;GACjC,MAAM,IAAI,CAAC;GACX,UAAU,MAAM,GAAG,EAAE,QAAQ,SAAS,GAAG;IACvC,EAAE,KAAK,WAAW,CAAC,CAAC;GACtB,CAAC;GACD,MAAM,SAAS,IAAI,QAAQ;GAC3B,OAAO,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,GAAG,GAAG,GAAG,CAAC;GAC/F,OAAO;EACT;EACA,SAAS,gBAAgB,YAAY;GACnC,MAAM,aAAa,EACjB,MAAM,WAAW,aAAa,MAAM,EACtC;GACA,MAAM,KAAK,WAAW,aAAa,IAAI;GACvC,IAAI,IACF,WAAW,QAAQ;GAErB,MAAM,MAAM,WAAW,aAAa,KAAK;GACzC,IAAI,KACF,WAAW,SAAS;GAEtB,MAAM,SAAS,WAAW,aAAa,QAAQ;GAC/C,IAAI,QACF,WAAW,YAAY;GAEzB,MAAM,YAAY,WAAW,aAAa,WAAW;GACrD,IAAI,WACF,WAAW,eAAe;GAE5B,MAAM,aAAa,WAAW,aAAa,YAAY;GACvD,IAAI,YACF,WAAW,gBAAgB;GAE7B,MAAM,OAAO,WAAW,aAAa,MAAM;GAC3C,IAAI,MACF,WAAW,UAAU;GAEvB,MAAM,WAAW,WAAW,cAAc,MAAM;GAChD,IAAI,UACF,WAAW,UAAU,cAAc,QAAQ;GAE7C,MAAM,iBAAiB,WAAW,cAAc,YAAY;GAC5D,IAAI,gBACF,WAAW,gBAAgB,oBAAoB,cAAc;GAE/D,OAAO;EACT;EACA,SAAS,mBAAmB,eAAe;GACzC,MAAM,gBAAgB,CAAC;GACvB,cAAc,mBAAmB,CAAC;GAClC,MAAM,qBAAqB,cAAc,iBAAiB,eAAe;GACzE,KAAK,IAAI,IAAI,GAAG,IAAI,mBAAmB,QAAQ,KAAK;IAClD,MAAM,oBAAoB,mBAAmB;IAC7C,MAAM,oBAAoB,uBAAuB,iBAAiB;IAClE,cAAc,iBAAiB,kBAAkB,SAAS;GAC5D;GACA,cAAc,eAAe,CAAC;GAC9B,MAAM,kBAAkB,cAAc,iBAAiB,WAAW;GAClE,KAAK,IAAI,IAAI,GAAG,IAAI,gBAAgB,QAAQ,KAAK;IAC/C,MAAM,iBAAiB,gBAAgB;IACvC,MAAM,gBAAgB,mBAAmB,cAAc;IACvD,cAAc,aAAa,cAAc,SAAS;GACpD;GACA,cAAc,gBAAgB,CAAC;GAC/B,MAAM,kBAAkB,cAAc,iBAAiB,YAAY;GACnE,KAAK,IAAI,IAAI,GAAG,IAAI,gBAAgB,QAAQ,KAAK;IAC/C,MAAM,iBAAiB,gBAAgB;IACvC,MAAM,iBAAiB,oBAAoB,cAAc;IACzD,cAAc,cAAc,eAAe,SAAS;GACtD;GACA,cAAc,iCAAiC,CAAC;GAChD,MAAM,mCAAmC,cAAc,iBAAiB,6BAA6B;GACrG,KAAK,IAAI,IAAI,GAAG,IAAI,iCAAiC,QAAQ,KAAK;IAChE,MAAM,kCAAkC,iCAAiC;IACzE,MAAM,kCAAkC,mCAAmC,+BAA+B;IAC1G,cAAc,+BAA+B,gCAAgC,SAAS;GACxF;GACA,cAAc,oBAAoB,CAAC;GACnC,MAAM,uBAAuB,cAAc,iBAAiB,gBAAgB;GAC5E,KAAK,IAAI,IAAI,GAAG,IAAI,qBAAqB,QAAQ,KAAK;IACpD,MAAM,sBAAsB,qBAAqB;IACjD,MAAM,sBAAsB,yBAAyB,mBAAmB;IACxE,cAAc,kBAAkB,oBAAoB,SAAS;GAC/D;GACA,cAAc,YAAY,CAAC;GAC3B,MAAM,cAAc,cAAc,iBAAiB,QAAQ;GAC3D,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;IAC3C,MAAM,aAAa,YAAY;IAC/B,MAAM,aAAa,gBAAgB,UAAU;IAC7C,cAAc,UAAU,WAAW,SAAS;GAC9C;GACA,OAAO;EACT;EACA,SAAS,eAAe,WAAW;GACjC,MAAM,YAAY,CAAC;GACnB,MAAM,YAAY,UAAU,iBAAiB,MAAM;GACnD,KAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;IACzC,MAAM,WAAW,UAAU;IAC3B,MAAM,YAAY,EAChB,UAAU,SAAS,aAAa,UAAU,EAC5C;IACA,MAAM,YAAY,SAAS,aAAa,WAAW;IACnD,IAAI,WACF,UAAU,eAAe,eAAe,SAAS;IAEnD,UAAU,KAAK,SAAS;GAC1B;GACA,OAAO;EACT;EACA,SAAS,eAAe,WAAW;GACjC,MAAM,YAAY,EAAE,MAAM,UAAU,aAAa,MAAM,KAAK,aAAa;GACzE,MAAM,gBAAgB,UAAU,iBAAiB,UAAU;GAC3D,IAAI,eACF,UAAU,cAAc,mBAAmB,aAAa;GAE1D,MAAM,gBAAgB,UAAU,cAAc,WAAW;GACzD,IAAI,eACF,UAAU,eAAe,mBAAmB,aAAa;GAE3D,MAAM,YAAY,UAAU,cAAc,OAAO;GACjD,IAAI,WACF,UAAU,WAAW,eAAe,SAAS;GAE/C,OAAO;EACT;EACA,SAAS,aAAa,gBAAgB,UAAU,WAAW,aAAa;GACtE,MAAM,QAAQ,eAAe;GAE7B,MAAM,YADa,UAAU,UAAU,UACV;GAC7B,IAAI,WAAW;IACb,MAAM,QAAQ,YAAY,UAAU;IACpC,MAAM,OAAO,UAAU;IACvB,MAAM,OAAO,IAAI,KAAK,CAAC,KAAK,GAAG,EAAE,KAAK,CAAC;IACvC,MAAM,YAAY,IAAI,gBAAgB,IAAI;IAC1C,MAAM,UAAU,cAAc,KAAK,WAAW,WAAW;KACvD,IAAI,gBAAgB,SAAS;IAC/B,CAAC;IACD,IAAI,gBAAgB,SAClB,QAAQ,aAAa;SAErB,QAAQ,WAAW;IACrB,QAAQ,UAAU,YAAlB;KACE,KAAK;MACH,QAAQ,QAAQ;MAChB;KACF,KAAK;MACH,QAAQ,QAAQ;MAChB;KACF,KAAK;KACL,KAAK;MACH,QAAQ,QAAQ;MAChB;KACF,SACE,QAAQ,QAAQ;IACpB;IACA,QAAQ,UAAU,YAAlB;KACE,KAAK;MACH,QAAQ,QAAQ;MAChB;KACF,KAAK;MACH,QAAQ,QAAQ;MAChB;KACF,KAAK;KACL,KAAK;MACH,QAAQ,QAAQ;MAChB;KACF,SACE,QAAQ,QAAQ;IACpB;IACA,QAAQ,UAAU,QAAlB;KACE,KAAK;MACH,QAAQ,YAAY;MACpB,QAAQ,YAAY;MACpB;KACF,KAAK;MACH,QAAQ,YAAY;MACpB,QAAQ,YAAY;MACpB;KACF,KAAK;MACH,QAAQ,YAAY;MACpB,QAAQ,YAAY;MACpB;KACF;MACE,QAAQ,YAAY;MACpB,QAAQ,YAAY;IACxB;IACA,OAAO;GACT,OACE,OAAO;EAEX;EACA,SAAS,yBAAyB,eAAe,oBAAoB,UAAU,UAAU,WAAW,aAAa,YAAY;GAC3H,MAAM,eAAe,WAAW;GAChC,MAAM,cAAc,CAAC;GACrB,KAAK,IAAI,IAAI,GAAG,IAAI,mBAAmB,QAAQ,IAAI,GAAG,KAAK;IACzD,MAAM,mBAAmB,mBAAmB;IAC5C,MAAM,SAAS,iBAAiB,OAAO,KAAK,IAAI,iBAAiB,KAAK;IACtE,IAAI,YAAY,YAAY,KAAK,GAC/B,YAAY,UAAU,CAAC;IACzB,YAAY,QAAQ,KAAK,gBAAgB;GAC3C;GACA,MAAM,OAAO,OAAO,KAAK,WAAW;GACpC,MAAM,SAAS,CAAC;GAChB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAI,GAAG,KAAK;IAC3C,MAAM,gBAAgB,KAAK;IAC3B,MAAM,0BAA0B,YAAY;IAC5C,MAAM,mBAAmB,cAAc,cAAc;IACrD,MAAM,WAAW,SAAS,kBAAkB,UAAU,WAAW,aAAa,YAAY,iBAAiB;IAC3G,MAAM,WAAW,IAAI,eAAe;IACpC,MAAM,eAAe,CAAC;IACtB,MAAM,WAAW,SAAS;IAC1B,KAAK,IAAI,IAAI,GAAG,KAAK,wBAAwB,QAAQ,IAAI,IAAI,KAAK;KAChE,MAAM,mBAAmB,wBAAwB;KACjD,aAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,EAAE;KACvD,aAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,EAAE;KACvD,aAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,EAAE;KACvD,aAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,EAAE;KACvD,aAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,EAAE;KACvD,aAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,EAAE;KACvD,aAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,EAAE;KACvD,aAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,EAAE;KACvD,aAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,EAAE;IACzD;IACA,SAAS,aAAa,YAAY,IAAI,uBAAuB,cAAc,CAAC,CAAC;IAC7E,MAAM,OAAO,IAAI,KAAK,UAAU,QAAQ;IACxC,OAAO,KAAK,IAAI;GAClB;GACA,OAAO;EACT;EACA,SAAS,kBAAkB,gBAAgB,oBAAoB,UAAU,UAAU,WAAW,aAAa,YAAY;GACrH,MAAM,WAAW,IAAI,eAAe;GACpC,MAAM,eAAe,CAAC;GACtB,MAAM,SAAS,CAAC;GAChB,MAAM,WAAW,SAAS;GAC1B,MAAM,MAAM,eAAe;GAC3B,KAAK,IAAI,IAAI,GAAG,IAAI,mBAAmB,QAAQ,IAAI,GAAG,KAAK;IACzD,MAAM,mBAAmB,mBAAmB;IAC5C,aAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,EAAE;IACvD,aAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,EAAE;IACvD,aAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,EAAE;IACvD,aAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,EAAE;IACvD,aAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,EAAE;IACvD,aAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,EAAE;IACvD,aAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,EAAE;IACvD,aAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,EAAE;IACvD,aAAa,KAAK,SAAS,iBAAiB,KAAK,IAAI,EAAE;IACvD,OAAO,KAAK,IAAI,iBAAiB,KAAK,IAAI,EAAE;IAC5C,OAAO,KAAK,IAAI,iBAAiB,KAAK,IAAI,EAAE;IAC5C,OAAO,KAAK,IAAI,iBAAiB,KAAK,IAAI,EAAE;IAC5C,OAAO,KAAK,IAAI,iBAAiB,KAAK,IAAI,EAAE;IAC5C,OAAO,KAAK,IAAI,iBAAiB,KAAK,IAAI,EAAE;IAC5C,OAAO,KAAK,IAAI,iBAAiB,KAAK,IAAI,EAAE;GAC9C;GACA,SAAS,aAAa,YAAY,IAAI,uBAAuB,cAAc,CAAC,CAAC;GAC7E,SAAS,aAAa,MAAM,IAAI,uBAAuB,QAAQ,CAAC,CAAC;GAIjE,OAAO,IADU,KAAK,UAAU,IADX,kBAAkB;IAAE,KADzB,SAAS,gBAAgB,UAAU,WAAW,aAAa,YAAY,YACnC;IAAG,aAAa;GAAK,CAClC,CAC7B;EACZ;EACA,SAAS,qBAAqB,YAAY,oBAAoB,UAAU,UAAU,WAAW,YAAY;GACvG,MAAM,WAAW,IAAI,eAAe;GACpC,MAAM,eAAe,CAAC;GACtB,MAAM,YAAY,CAAC;GACnB,MAAM,WAAW,SAAS;GAC1B,MAAM,SAAS,WAAW;GAC1B,KAAK,IAAI,IAAI,GAAG,IAAI,mBAAmB,QAAQ,IAAI,GAAG,KAAK;IACzD,MAAM,mBAAmB,mBAAmB;IAC5C,MAAM,KAAK,iBAAiB;IAC5B,MAAM,KAAK,iBAAiB;IAC5B,MAAM,KAAK,iBAAiB;IAC5B,aAAa,KAAK,SAAS,KAAK,IAAI,EAAE;IACtC,aAAa,KAAK,SAAS,KAAK,IAAI,EAAE;IACtC,aAAa,KAAK,SAAS,KAAK,IAAI,EAAE;IACtC,aAAa,KAAK,SAAS,KAAK,IAAI,EAAE;IACtC,aAAa,KAAK,SAAS,KAAK,IAAI,EAAE;IACtC,aAAa,KAAK,SAAS,KAAK,IAAI,EAAE;IACtC,aAAa,KAAK,SAAS,KAAK,IAAI,EAAE;IACtC,aAAa,KAAK,SAAS,KAAK,IAAI,EAAE;IACtC,aAAa,KAAK,SAAS,KAAK,IAAI,EAAE;IACtC,MAAM,KAAK,iBAAiB,OAAO,KAAK,IAAI,iBAAiB,KAAK,WAAW;IAC7E,MAAM,KAAK,iBAAiB,OAAO,KAAK,IAAI,iBAAiB,KAAK;IAClE,MAAM,KAAK,iBAAiB,OAAO,KAAK,IAAI,iBAAiB,KAAK;IAClE,UAAU,KAAK,OAAO,KAAK,IAAI,EAAE;IACjC,UAAU,KAAK,OAAO,KAAK,IAAI,EAAE;IACjC,UAAU,KAAK,OAAO,KAAK,IAAI,EAAE;IACjC,UAAU,KAAK,OAAO,KAAK,IAAI,EAAE;IACjC,UAAU,KAAK,OAAO,KAAK,IAAI,EAAE;IACjC,UAAU,KAAK,OAAO,KAAK,IAAI,EAAE;IACjC,UAAU,KAAK,OAAO,KAAK,IAAI,EAAE;IACjC,UAAU,KAAK,OAAO,KAAK,IAAI,EAAE;IACjC,UAAU,KAAK,OAAO,KAAK,IAAI,EAAE;GACnC;GACA,SAAS,aAAa,YAAY,IAAI,uBAAuB,cAAc,CAAC,CAAC;GAC7E,SAAS,aAAa,SAAS,IAAI,uBAAuB,WAAW,CAAC,CAAC;GAGvE,OAAO,IADU,KAAK,UAAU,IADX,kBAAkB;IAAE,cAAc;IAAM,aAAa;GAAK,CACxC,CAC7B;EACZ;EACA,SAAS,iBAAiB,UAAU;GAClC,MAAM,WAAW,IAAI,eAAe;GACpC,SAAS,SAAS,IAAI,gBAAgB,SAAS,cAAc,CAAC,CAAC;GAC/D,SAAS,aAAa,YAAY,IAAI,gBAAgB,SAAS,aAAa,CAAC,CAAC;GAG9E,OAAO,IADU,KAAK,UAAU,IADX,kBAAkB;IAAE,OAAO;IAAU,aAAa;GAAK,CACrC,CAC7B;EACZ;EACA,SAAS,YAAY,aAAa,UAAU,UAAU,WAAW,aAAa,YAAY;GACxF,MAAM,OAAO,OAAO,KAAK,WAAW;GACpC,MAAM,SAAS,CAAC;GAChB,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK,QAAQ,IAAI,IAAI,KAAK;IAC7C,MAAM,aAAa,KAAK;IACxB,MAAM,qBAAqB,YAAY;IAEvC,QADqB,gBAAgB,YAAY,SAC9B,GAAnB;KACE,KAAK;MACH,MAAM,gBAAgB,UAAU,UAAU,cAAc;MACxD,MAAM,YAAY,yBAChB,eACA,oBACA,UACA,UACA,WACA,aACA,UACF;MACA,KAAK,IAAI,IAAI,GAAG,KAAK,UAAU,QAAQ,IAAI,IAAI,KAC7C,OAAO,KAAK,UAAU,EAAE;MAE1B;KACF,KAAK;MACH,MAAM,iBAAiB,UAAU,UAAU,eAAe;MAC1D,OAAO,KACL,kBACE,gBACA,oBACA,UACA,UACA,WACA,aACA,UACF,CACF;MACA;KACF,KAAK;MACH,MAAM,aAAa,UAAU,UAAU,WAAW;MAClD,OAAO,KAAK,qBAAqB,YAAY,oBAAoB,UAAU,UAAU,WAAW,UAAU,CAAC;MAC3G;KACF,KAAK;MACH,OAAO,KAAK,iBAAiB,QAAQ,CAAC;MACtC;KACF,SACE,QAAQ,MAAM,6CAA6C;IAC/D;GACF;GACA,OAAO;EACT;EACA,SAAS,gBAAgB,KAAK,WAAW;GACvC,IAAI,UAAU,UAAU,eAAe,SAAS,KAAK,GACnD,OAAO;QACF,IAAI,UAAU,UAAU,cAAc,SAAS,KAAK,GACzD,OAAO;QACF,IAAI,UAAU,UAAU,WAAW,SAAS,KAAK,GACtD,OAAO;QACF,IAAI,QAAQ,WACjB,OAAO;QAEP;EAEJ;EACA,SAAS,cAAc,WAAW,UAAU,YAAY;GACtD,MAAM,cAAc,CAAC;GACrB,MAAM,qBAAqB,SAAS;GACpC,MAAM,YAAY,WAAW;GAC7B,KAAK,IAAI,IAAI,GAAG,IAAI,mBAAmB,QAAQ,IAAI,GAAG,KAAK;IACzD,MAAM,mBAAmB,mBAAmB;IAC5C,IAAI,MAAM,iBAAiB,QAAQ,KAAK,IAAI,iBAAiB,MAAM;IACnE,IAAI,QAAQ,KAAK,GACf,MAAM;IACR,IAAI,YAAY,SAAS,KAAK,GAC5B,YAAY,OAAO,CAAC;IACtB,YAAY,KAAK,KAAK,gBAAgB;GACxC;GACA,OAAO;EACT;EACA,SAAS,WAAW,UAAU,UAAU,WAAW,aAAa,YAAY;GAC1E,MAAM,QAAQ,IAAI,MAAM;GAExB,MAAM,SAAS,YADK,cAAc,WAAW,UAAU,UAClB,GAAG,UAAU,UAAU,WAAW,aAAa,UAAU;GAC9F,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,IAAI,GAAG,KACxC,MAAM,IAAI,OAAO,EAAE;GAErB,OAAO;EACT;EACA,SAAS,gBAAgB,YAAY,UAAU,UAAU;GACvD,IAAI,CAAC,YACH;GAEF,MAAM,sBAAsB,CAAC;GAC7B,MAAM,OAAO,OAAO,KAAK,UAAU;GACnC,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;IACpC,MAAM,KAAK,KAAK;IAChB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,oBAAoB,QAAQ,KAAK;KACzD,MAAM,YAAY,MAAM,oBAAoB;KAC5C,IAAI,UAAU,OAAO,IACnB,oBAAoB,KAAK,SAAS;IAEtC;GACF;GACA,KAAK,IAAI,IAAI,GAAG,IAAI,oBAAoB,QAAQ,KAAK;IACnD,MAAM,YAAY,oBAAoB;IACtC,UAAU,MAAM,UAAU,WAAW,UAAU,QAAQ,QAAQ;GACjE;EACF;EACA,SAAS,SAAS,OAAO,UAAU,WAAW,aAAa,YAAY,SAAS;GAC9E,IAAI,MAAM,UAAU,KAAK,GACvB,OAAO,MAAM;GACf,MAAM,QAAQ,QAAQ,OAAO,UAAU,WAAW,aAAa,UAAU;GACzE,OAAO,MAAM;EACf;EACA,SAAS,kBAAkB,cAAc,UAAU,WAAW;GAC5D,IAAI;GACJ,MAAM,sBAAsB,aAAa;GACzC,MAAM,8BAA8B,UAAU,UAAU;GACxD,IAAI,wBAAwB,QAAQ,4BAA4B,yBAAyB,KAAK,GAAG;IAE/F,MAAM,eAD4B,4BAA4B,qBACf,KAAK,aAAa;IACjE,WAAW,IAAI,qBAAqB;KAClC,aAAa;KACb,WAAW,aAAa;KACxB,WAAW,aAAa;IAC1B,CAAC;GACH,OACE,WAAW,IAAI,kBAAkB,EAAE,aAAa,KAAK,CAAC;GAExD,SAAS,OAAO,aAAa;GAC7B,MAAM,eAAe,aAAa;GAClC,MAAM,QAAQ,aAAa,UAAU,GAAG,CAAC;GACzC,SAAS,MAAM,SAAS,KAAK;GAC7B,SAAS,MAAM,oBAAoB;GACnC,IAAI,aAAa,WAAW,GAC1B,SAAS,UAAU,SAAS,aAAa,OAAO,CAAC,IAAI,aAAa,OAAO,CAAC,GAAG,EAAE,IAAI;GAErF,OAAO;EACT;EACA,SAAS,eAAe,eAAe,UAAU,WAAW,aAAa;GACvE,MAAM,YAAY,IAAI,MAAM;GAC5B,KAAK,IAAI,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;IAC7C,MAAM,YAAY,cAAc;IAChC,IAAI,SAAS,SAAS,UAAU;IAChC,IAAI,WAAW,KAAK,GAAG;KACrB,YAAY,UAAU,UAAU,UAAU,WAAW,WAAW;KAChE,SAAS,SAAS,UAAU;IAC9B;IACA,MAAM,WAAW,OAAO,MAAM;IAC9B,MAAM,YAAY,UAAU;IAC5B,IAAI,WACF,SAAS,aAAa,SAAS;IAEjC,UAAU,IAAI,QAAQ;GACxB;GACA,OAAO;EACT;EACA,SAAS,YAAY,UAAU,UAAU,WAAW,aAAa;GAC/D,MAAM,aAAa,UAAU,aAAa,UAAU;GACpD,IAAI,WAAW,SAAS;IACtB,MAAM,WAAW,WAAW;IAC5B,MAAM,aAAa,UAAU;IAC7B,MAAM,WAAW,UAAU;IAC3B,gBAAgB,YAAY,UAAU,QAAQ;IAC9C,SAAS,WAAW,MAAM,SAAS,UAAU,UAAU,WAAW,aAAa,YAAY,UAAU;GACvG,OAAO;IACL,MAAM,gBAAgB,WAAW;IACjC,SAAS,WAAW,MAAM,SAAS,eAAe,UAAU,WAAW,aAAa,YAAY,cAAc;GAChH;EACF;EACA,SAAS,aAAa,UAAU;GAC9B,MAAM,aAAa,SAAS;GAC5B,MAAM,YAAY,SAAS;GAC3B,MAAM,WAAW,CAAC;GAClB,MAAM,aAAa,OAAO,KAAK,UAAU;GACzC,MAAM,cAAc,CAAC;GACrB,IAAI,WACF,KAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,GAAG,KAAK;IAChD,MAAM,WAAW,UAAU;IAC3B,MAAM,aAAa,SAAS,OAAO,UAAU,CAAC;IAC9C,IAAI,SAAS,QAAQ,aACnB,YAAY,SAAS,UAAU,SAAS,QAAQ;GAEpD;GAEF,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;IAE1C,MAAM,YAAY,WADA,WAAW;IAE7B,MAAM,YAAY,OAAO,KAAK,UAAU,aAAa,SAAS;IAC9D,KAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;KACzC,MAAM,WAAW,UAAU;KAC3B,YAAY,UAAU,UAAU,WAAW,WAAW;IACxD;GACF;GACA,OAAO;EACT;EACA,SAAS,iBAAiB,MAAM;GAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;IACpC,MAAM,MAAM,KAAK;IAEjB,IADkB,IAAI,OAAO,MAAM,GAAG,EAAE,IAC5B,EAAE,YAAY,MAAM,SAC9B,OAAO;GACX;EACF;EACA,SAAS,MAAM,UAAU,UAAU;GACjC,MAAM,QAAQ,IAAI,MAAM;GACxB,MAAM,eAAe,iBAAiB,SAAS,OAAO;GACtD,MAAM,YAAY,SAAS,MAAM,aAAa,UAAU,UAAU,CAAC,GAAG;GACtE,KAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;IACzC,MAAM,YAAY,UAAU;IAC5B,MAAM,WAAW,SAAS,UAAU;IACpC,MAAM,YAAY,UAAU;IAC5B,IAAI,WACF,SAAS,aAAa,SAAS;IAEjC,MAAM,IAAI,QAAQ;GACpB;GACA,OAAO;EACT;EACA,MAAM,UAAU,aAAa,IAAI;EAEjC,OAAO,MADS,aAAa,OACV,GAAG,OAAO;CAC/B;CACA,aAAa,WAAW;EACtB,KAAK,oBAAoB,KAAK,SAAS;CACzC;AACF;;;AC/0BA,IAAM,YAAN,cAAwB,OAAO;CAC7B,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,MAAM,QAAQ;EACd,MAAM,SAAS,IAAI,WAAW,KAAK,OAAO;EAC1C,OAAO,QAAQ,KAAK,IAAI;EACxB,OAAO,iBAAiB,KAAK,aAAa;EAC1C,OAAO,mBAAmB,KAAK,eAAe;EAC9C,OAAO,KACL,KACA,SAAS,MAAM;GACb,IAAI;IACF,OAAO,MAAM,MAAM,IAAI,CAAC;GAC1B,SAAS,GAAG;IACV,IAAI,SACF,QAAQ,CAAC;SAET,QAAQ,MAAM,CAAC;IAEjB,MAAM,QAAQ,UAAU,GAAG;GAC7B;EACF,GACA,YACA,OACF;CACF;CACA,MAAM,MAAM;EACV,MAAM,QAAQ,KAAK,MAAM,IAAI;EAC7B,MAAM,WAAW,CAAC;EAClB,MAAM,SAAS,CAAC;EAChB,KAAK,IAAI,QAAQ,OAAO;GACtB,OAAO,KAAK,KAAK;GACjB,IAAI,KAAK,OAAO,CAAC,MAAM,KACrB;GACF,MAAM,aAAa,KAAK,MAAM,KAAK;GACnC,IAAI,WAAW,WAAW,GAAG;IAC3B,SAAS,KAAK,WAAW,WAAW,EAAE,CAAC;IACvC,SAAS,KAAK,WAAW,WAAW,EAAE,CAAC;IACvC,SAAS,KAAK,WAAW,WAAW,EAAE,CAAC;GACzC;GACA,IAAI,WAAW,WAAW,GAAG;IAC3B,SAAS,KAAK,WAAW,WAAW,EAAE,CAAC;IACvC,SAAS,KAAK,WAAW,WAAW,EAAE,CAAC;IACvC,SAAS,KAAK,WAAW,WAAW,EAAE,CAAC;IACvC,OAAO,KAAK,WAAW,WAAW,EAAE,IAAI,GAAG;IAC3C,OAAO,KAAK,WAAW,WAAW,EAAE,IAAI,GAAG;IAC3C,OAAO,KAAK,WAAW,WAAW,EAAE,IAAI,GAAG;GAC7C;EACF;EACA,MAAM,WAAW,IAAI,eAAe;EACpC,SAAS,aAAa,YAAY,IAAI,uBAAuB,UAAU,CAAC,CAAC;EACzE,IAAI,OAAO,SAAS,GAClB,SAAS,aAAa,SAAS,IAAI,uBAAuB,QAAQ,CAAC,CAAC;EAEtE,OAAO;CACT;AACF;;;ACrDA,IAAM,YAAN,cAAwB,OAAO;CAC7B,YAAY,SAAS;EACnB,MAAM,OAAO;CACf;CACA,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,MAAM,QAAQ;EACd,MAAM,SAAS,IAAI,WAAW,MAAM,OAAO;EAC3C,OAAO,QAAQ,MAAM,IAAI;EACzB,OAAO,gBAAgB,aAAa;EACpC,OAAO,iBAAiB,MAAM,aAAa;EAC3C,OAAO,mBAAmB,MAAM,eAAe;EAC/C,OAAO,KACL,KACA,SAAS,MAAM;GACb,IAAI;IACF,OAAO,MAAM,MAAM,IAAI,CAAC;GAC1B,SAAS,GAAG;IACV,IAAI,SACF,QAAQ,CAAC;SAET,QAAQ,MAAM,CAAC;IAEjB,MAAM,QAAQ,UAAU,GAAG;GAC7B;EACF,GACA,YACA,OACF;CACF;CACA,MAAM,MAAM;EACV,SAAS,WAAW,OAAO;GACzB,IAAI,UAAU,CAAC;GACf,IAAI,YAAY,CAAC;GACjB,IAAI,SAAS,CAAC;GACd,IAAI,UAAU,CAAC;GACf,IAAI;GACJ,IAAI,UAAU;GACd,IAAI,aAAa;GACjB,IAAI,kBAAkB;GACtB,IAAI,YAAY;GAChB,IAAI,cAAc;GAClB,IAAI,qBAAqB;GACzB,IAAI,gBAAgB;GACpB,IAAI,eAAe;GACnB,IAAI,mBAAmB;GACvB,IAAI,aAAa;GACjB,IAAI,kBAAkB;GACtB,IAAI,oBAAoB;GACxB,IAAI,yBAAyB;GAC7B,IAAI,qBAAqB;GACzB,IAAI,oBAAoB;GACxB,IAAI,iBAAiB;GACrB,IAAI,mBAAmB;GACvB,IAAI,QAAQ,MAAM,MAAM,IAAI;GAC5B,KAAK,IAAI,KAAK,OAAO;IACnB,IAAI,OAAO,MAAM,GAAG,KAAK;IACzB,IAAI,KAAK,QAAQ,SAAS,MAAM,GAAG;KACjC,IAAI,UAAU,KAAK,MAAM,GAAG,EAAE;KAC9B,IAAI,YAAY,YACd,MAAM,IAAI,MAAM,+BAA+B,OAAO;IAC1D,OAAO,IAAI,iBACT,QAAQ,SAAS,WAAW,KAAK,IAAI,OAAO,MAAM;KAChD,IAAI,QAAQ,KAAK,IAAI,MAAM,MACzB;KACF,IAAI,IAAI,WAAW,OAAO,EAAE;KAC5B,IAAI,IAAI,WAAW,OAAO,EAAE;KAC5B,IAAI,IAAI,WAAW,OAAO,EAAE;KAC5B,UAAU,KAAK,GAAG,GAAG,CAAC;IACxB;SACK,IAAI;UACJ,SAAS,gBAAgB,KAAK,IAAI,OAAO,MAAM;MAClD,IAAI,cAAc,SAAS,OAAO,EAAE;MACpC,IAAI,OAAO,OAAO,GAAG,MAAM,KAAK;MAChC,IAAI,eAAe,GAAG;OACpB,IAAI,KAAK,SAAS,KAAK,EAAE;OACzB,IAAI,IAAI;OACR,IAAI,IAAI;OACR,KAAK,IAAI,IAAI,GAAG,IAAI,cAAc,GAAG,EAAE,GAAG;QACxC,KAAK,SAAS,KAAK,EAAE;QACrB,KAAK,SAAS,KAAK,IAAI,EAAE;QACzB,QAAQ,KAAK,IAAI,IAAI,EAAE;QACvB;OACF;MACF;KACF;WACK,IAAI;UACJ,SAAS,gBAAgB,KAAK,IAAI,OAAO,MAAM;MAClD,IAAI,cAAc,SAAS,OAAO,EAAE;MACpC,IAAI,OAAO,OAAO,GAAG,MAAM,KAAK;MAChC,IAAI,eAAe,GAAG;OACpB,IAAI,IAAI,IAAI;OACZ,KAAK,IAAI,IAAI,GAAG,IAAI,cAAc,GAAG,KACnC,IAAI,IAAI,MAAM,GAAG;QACf,KAAK,SAAS,KAAK,EAAE;QACrB,KAAK,SAAS,KAAK,IAAI,EAAE;QACzB,KAAK,SAAS,KAAK,IAAI,EAAE;QACzB,QAAQ,KAAK,IAAI,IAAI,EAAE;OACzB,OAAO;QACL,KAAK,SAAS,KAAK,EAAE;QACrB,KAAK,SAAS,KAAK,IAAI,EAAE;QACzB,KAAK,SAAS,KAAK,IAAI,EAAE;QACzB,QAAQ,KAAK,IAAI,IAAI,EAAE;OACzB;MAEJ;KACF;WACK,IAAI,sBAAsB;SAC3B,gBACF,QAAQ,SAAS,WAAW,KAAK,IAAI,OAAO,MAAM;MAChD,IAAI,QAAQ,KAAK,IAAI,MAAM,MACzB;MACF,IAAI,IAAI,WAAW,OAAO,EAAE;MAC5B,IAAI,IAAI,WAAW,OAAO,EAAE;MAC5B,IAAI,IAAI,WAAW,OAAO,EAAE;MAC5B,OAAO,KAAK,GAAG,GAAG,CAAC;KACrB;UACK,IAAI,kBACT,QAAQ,SAAS,WAAW,KAAK,IAAI,OAAO,MAAM;MAChD,IAAI,QAAQ,KAAK,IAAI,MAAM,MACzB;MACF,IAAI,KAAK,WAAW,OAAO,EAAE;MAC7B,IAAI,KAAK,WAAW,OAAO,EAAE;MAC7B,IAAI,KAAK,WAAW,OAAO,EAAE;MAC7B,QAAQ,KAAK,IAAI,IAAI,EAAE;KACzB;;IAGJ,IAAI,YAAY,KAAK,IAAI,MAAM,MAAM;KACnC,oBAAoB;KACpB,kBAAkB;KAClB,yBAAyB;IAC3B,OAAO,IAAI,UAAU,KAAK,IAAI,MAAM,MAAM;KACxC,oBAAoB;KACpB,kBAAkB;KAClB,yBAAyB;IAC3B,OAAO,IAAI,mBAAmB,KAAK,IAAI,MAAM,MAAM;KACjD,oBAAoB;KACpB,kBAAkB;KAClB,yBAAyB;IAC3B,OAAO,IAAI,cAAc,KAAK,IAAI,MAAM,MAAM;KAC5C,qBAAqB;KACrB,kBAAkB;KAClB,oBAAoB;KACpB,yBAAyB;IAC3B,OAAO,IAAI,aAAa,KAAK,IAAI,MAAM,MAAM;KAC3C,oBAAoB;KACpB,kBAAkB;KAClB,oBAAoB;KACpB,yBAAyB;IAC3B,OAAO,IAAI,iBAAiB,KAAK,IAAI,MAAM,MAAM;KAC/C,iBAAiB;KACjB,mBAAmB;KACnB,kBAAkB;KAClB,oBAAoB;KACpB,yBAAyB;IAC3B,OAAO,IAAI,WAAW,KAAK,IAAI,MAAM,MAAM;KACzC,mBAAmB;KACnB,iBAAiB;KACjB,kBAAkB;KAClB,oBAAoB;KACpB,yBAAyB;IAC3B;GACF;GACA,IAAI,WAAW,IAAI,eAAe;GAClC,SAAS,SAAS,OAAO;GACzB,SAAS,aAAa,YAAY,IAAI,uBAAuB,WAAW,CAAC,CAAC;GAC1E,IAAI,QAAQ,WAAW,UAAU,QAC/B,SAAS,aAAa,UAAU,IAAI,uBAAuB,SAAS,CAAC,CAAC;GAExE,IAAI,OAAO,WAAW,QAAQ;QACxB,OAAO,WAAW,UAAU,QAC9B,SAAS,aAAa,SAAS,IAAI,uBAAuB,QAAQ,CAAC,CAAC;GAAA,OAEjE;IACL,WAAW,SAAS,aAAa;IACjC,IAAI,eAAe,SAAS,WAAW,SAAS,QAAQ;IACxD,IAAI,OAAO,WAAW,eAAe,GAAG;KACtC,IAAI,YAAY,CAAC;KACjB,KAAK,IAAI,IAAI,GAAG,IAAI,cAAc,KAAK;MACrC,IAAI,IAAI,OAAO,IAAI,IAAI;MACvB,IAAI,IAAI,OAAO,IAAI,IAAI;MACvB,IAAI,IAAI,OAAO,IAAI,IAAI;MACvB,UAAU,KAAK,GAAG,GAAG,CAAC;MACtB,UAAU,KAAK,GAAG,GAAG,CAAC;MACtB,UAAU,KAAK,GAAG,GAAG,CAAC;KACxB;KACA,SAAS,aAAa,SAAS,IAAI,uBAAuB,WAAW,CAAC,CAAC;IACzE;GACF;GACA,OAAO;EACT;EACA,SAAS,YAAY,OAAO;GAC1B,IAAI,OAAO,YAAY,GAAG,gBAAgB;GAC1C,IAAI,SAAS,IAAI,WAAW,KAAK;GACjC,IAAI,WAAW,IAAI,SAAS,KAAK;GACjC,IAAI,SAAS,CAAC;GACd,IAAI,UAAU,CAAC;GACf,IAAI,UAAU,CAAC;GACf,IAAI,QAAQ;GACZ,SAAS,WAAW,SAAS,OAAO;IAClC,IAAI,SAAS;IACb,IAAI,IAAI,QAAQ;IAChB,IAAI,KAAK,CAAC;IACV,OAAO,MAAM,IAAI;KACf,GAAG,KAAK,OAAO,aAAa,CAAC,CAAC;KAC9B;KACA,IAAI,QAAQ;IACd;IACA,OAAO;KAAE;KAAO,KAAK;KAAQ,MAAM,SAAS;KAAG,cAAc,GAAG,KAAK,EAAE;IAAE;GAC3E;GACA,IAAI,OAAO;GACX,OAAO,MAAM;IACX,QAAQ,WAAW,QAAQ,KAAK;IAChC,OAAO,MAAM;IACb,IAAI,KAAK,QAAQ,SAAS,MAAM,GAAG;KACjC,IAAI,UAAU,KAAK,MAAM,GAAG,EAAE;KAC9B,IAAI,YAAY,YACd,MAAM,IAAI,MAAM,+BAA+B,OAAO;IAC1D,OAAO,IAAI,KAAK,QAAQ,QAAQ,MAAM,GAAG;KACvC,iBAAiB,SAAS,KAAK,MAAM,GAAG,EAAE,IAAI,EAAE;KAChD,QAAQ,iBAAiB,IAAI;KAC7B,SAAS,IAAI,aAAa,iBAAiB,CAAC;KAC5C,aAAa,MAAM;KACnB,KAAK,IAAI,GAAG,IAAI,gBAAgB,KAAK;MACnC,OAAO,IAAI,KAAK,SAAS,WAAW,YAAY,KAAK;MACrD,OAAO,IAAI,IAAI,KAAK,SAAS,WAAW,aAAa,GAAG,KAAK;MAC7D,OAAO,IAAI,IAAI,KAAK,SAAS,WAAW,aAAa,GAAG,KAAK;MAC7D,aAAa,aAAa;KAC5B;KACA,MAAM,OAAO,MAAM,OAAO,QAAQ;IACpC,OAAO,IAAI,KAAK,QAAQ,iBAAiB,MAAM,GAAG;KAChD,IAAI,iBAAiB,SAAS,KAAK,MAAM,GAAG,EAAE,IAAI,EAAE;KACpD,IAAI,OAAO,SAAS,KAAK,MAAM,GAAG,EAAE,IAAI,EAAE;KAC1C,QAAQ,OAAO;KACf,UAAU,IAAI,YAAY,IAAI,OAAO,IAAI,cAAc;KACvD,IAAI,eAAe;KACnB,aAAa,MAAM;KACnB,KAAK,IAAI,GAAG,IAAI,gBAAgB,KAAK;MACnC,IAAI,aAAa,SAAS,SAAS,YAAY,KAAK;MACpD,IAAI,QAAQ,CAAC;MACb,cAAc;MACd,KAAK,IAAI,GAAG,IAAI,YAAY,KAAK;OAC/B,MAAM,KAAK,SAAS,SAAS,YAAY,KAAK,CAAC;OAC/C,cAAc;MAChB;MACA,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,GAAG,KAClC,IAAI,IAAI,GAAG;OACT,QAAQ,kBAAkB,MAAM;OAChC,QAAQ,kBAAkB,MAAM,IAAI;OACpC,QAAQ,kBAAkB,MAAM,IAAI;MACtC,OAAO;OACL,QAAQ,kBAAkB,MAAM;OAChC,QAAQ,kBAAkB,MAAM,IAAI;OACpC,QAAQ,kBAAkB,MAAM,IAAI;MACtC;KAEJ;KACA,MAAM,OAAO,MAAM,OAAO,QAAQ;IACpC,OAAO,IAAI,KAAK,QAAQ,UAAU,MAAM,GAAG;KACzC,IAAI,iBAAiB,SAAS,KAAK,MAAM,GAAG,EAAE,IAAI,EAAE;KACpD,IAAI,OAAO,SAAS,KAAK,MAAM,GAAG,EAAE,IAAI,EAAE;KAC1C,QAAQ,OAAO;KACf,UAAU,IAAI,YAAY,IAAI,OAAO,IAAI,cAAc;KACvD,IAAI,eAAe;KACnB,aAAa,MAAM;KACnB,KAAK,IAAI,GAAG,IAAI,gBAAgB,KAAK;MACnC,IAAI,aAAa,SAAS,SAAS,YAAY,KAAK;MACpD,IAAI,QAAQ,CAAC;MACb,cAAc;MACd,KAAK,IAAI,GAAG,IAAI,YAAY,KAAK;OAC/B,MAAM,KAAK,SAAS,SAAS,YAAY,KAAK,CAAC;OAC/C,cAAc;MAChB;MACA,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,GAAG,KAAK;OACvC,QAAQ,kBAAkB,MAAM;OAChC,QAAQ,kBAAkB,MAAM;OAChC,QAAQ,kBAAkB,MAAM,IAAI;MACtC;KACF;KACA,MAAM,OAAO,MAAM,OAAO,QAAQ;IACpC,OAAO,IAAI,KAAK,QAAQ,YAAY,MAAM,GAAG;KAC3C,iBAAiB,SAAS,KAAK,MAAM,GAAG,EAAE,IAAI,EAAE;KAChD,QAAQ,WAAW,QAAQ,MAAM,IAAI;KACrC,QAAQ,iBAAiB,IAAI;KAC7B,UAAU,IAAI,aAAa,iBAAiB,CAAC;KAC7C,aAAa,MAAM;KACnB,KAAK,IAAI,GAAG,IAAI,gBAAgB,KAAK;MACnC,QAAQ,IAAI,KAAK,SAAS,WAAW,YAAY,KAAK;MACtD,QAAQ,IAAI,IAAI,KAAK,SAAS,WAAW,aAAa,GAAG,KAAK;MAC9D,QAAQ,IAAI,IAAI,KAAK,SAAS,WAAW,aAAa,GAAG,KAAK;MAC9D,cAAc;KAChB;KACA,MAAM,OAAO,MAAM,OAAO;IAC5B;IACA,QAAQ,MAAM;IACd,IAAI,SAAS,OAAO,YAClB;GAEJ;GACA,IAAI,WAAW,IAAI,eAAe;GAClC,SAAS,SAAS,IAAI,gBAAgB,SAAS,CAAC,CAAC;GACjD,SAAS,aAAa,YAAY,IAAI,gBAAgB,QAAQ,CAAC,CAAC;GAChE,IAAI,QAAQ,WAAW,OAAO,QAC5B,SAAS,aAAa,UAAU,IAAI,gBAAgB,SAAS,CAAC,CAAC;GAEjE,OAAO;EACT;EACA,SAAS,cAAc,OAAO,QAAQ;GACpC,MAAM,cAAc,MAAM,QAAQ,SAAS,IAAI,aAAa,cAAc,OAAO,MAAM;GACvF,OAAO,IAAI,KAAK;GAChB,OAAO,IAAI,QAAQ,WAAW;GAC9B,OAAO;EACT;EACA,SAAS,YAAY,OAAO,QAAQ;GAClC,IAAI,cAAc,MAAM,QAAQ,SAAS,IAAI,WAAW,cAAc,OAAO,MAAM;GACnF,OAAO,IAAI,KAAK;GAChB,OAAO,IAAI,QAAQ,WAAW;GAC9B,OAAO;EACT;EACA,SAAS,SAAS,YAAY;GAC5B,SAAS,UAAU,KAAK;IACtB,IAAI,MAAM,CAAC;IACX,IAAI,IAAI,aAAa;SACf,IAAI;UACF,IAAI,WAAW,SAAS,GAAG;OAC7B,IAAI,gBAAgB,CAAC;OACrB,KAAK,IAAI,KAAK,GAAG,KAAK,IAAI,WAAW,QAAQ,MAAM;QACjD,IAAI,YAAY,IAAI,WAAW,KAAK,EAAE;QACtC,IAAI,cAAc,UAAU,YAAY,UAAU,UAAU,KAAK;OACnE;MACF;;WAEG,IAAI,IAAI,aAAa,GAC1B,MAAM,IAAI,UAAU,KAAK;IAE3B,IAAI,IAAI,cAAc,GACpB,KAAK,IAAI,KAAK,GAAG,KAAK,IAAI,WAAW,QAAQ,MAAM;KACjD,IAAI,OAAO,IAAI,WAAW,KAAK,EAAE;KACjC,IAAI,WAAW,KAAK;KACpB,IAAI,OAAO,IAAI,cAAc,aAAa;MACxC,IAAI,MAAM,UAAU,IAAI;MACxB,IAAI,QAAQ,IACV,IAAI,YAAY;KACpB,OAAO;MACL,IAAI,OAAO,IAAI,UAAU,SAAS,aAAa;OAC7C,IAAI,MAAM,IAAI;OACd,IAAI,YAAY,CAAC,GAAG;MACtB;MACA,IAAI,MAAM,UAAU,IAAI;MACxB,IAAI,QAAQ,IACV,IAAI,UAAU,KAAK,GAAG;KAC1B;IACF;IAEF,OAAO;GACT;GACA,SAAS,kBAAkB,KAAK;IAC9B,IAAI,MAAM,OAAO,eAAe,cAAc,aAAa;IAC3D,IAAI;IACJ,IAAI,YAAY,CAAC;IACjB,IAAI,OAAO;IACX,IAAI,OAAO,KAAK;IAChB,KAAK,KAAK,GAAG,KAAK,MAAM;IAExB,KAAK,KAAK,GAAG,KAAK,MAAM,EAAE,IACxB,UAAU,KAAK,WAAW,EAAE,KAAK;IAEnC,UAAU,IAAI,WAAW,CAAC,KAAK;IAC/B,UAAU,IAAI,WAAW,CAAC,KAAK;IAC/B,IAAI,IAAI,GAAG,KAAK,cAAc;IAC9B,IAAI,OAAO,IAAI;IACf,IAAI,OAAO,IAAI,GACb,MAAM,IAAI,MAAM,gDAAgD;IAElE,eAAe,IAAI,OAAO,OAAO,MAAM,IAAI,IAAI,OAAO,OAAO,MAAM,IAAI;IACvE,OAAO,IAAI,IAAI,OAAO,IAAI,IAAI,YAAY;IAC1C,IAAI,eAAe,IAAI,OAAO,IAAI;IAClC,IAAI,IAAI;IACR,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG;KAC7C,MAAM,UAAU,IAAI,WAAW,EAAE,MAAM,KAAK,UAAU,IAAI,WAAW,KAAK,CAAC,MAAM,KAAK,UAAU,IAAI,WAAW,KAAK,CAAC,MAAM,IAAI,UAAU,IAAI,WAAW,KAAK,CAAC;KAC9J,KAAK,QAAQ,MAAM,aAAa;KAChC,KAAK,QAAQ,MAAM,UAAU;KAC7B,KAAK,OAAO,MAAM;IACpB;IACA,IAAI,iBAAiB,GAAG;KACtB,MAAM,UAAU,IAAI,WAAW,EAAE,MAAM,IAAI,UAAU,IAAI,WAAW,KAAK,CAAC,MAAM;KAChF,KAAK,OAAO,MAAM;IACpB,OAAO,IAAI,iBAAiB,GAAG;KAC7B,MAAM,UAAU,IAAI,WAAW,EAAE,MAAM,KAAK,UAAU,IAAI,WAAW,KAAK,CAAC,MAAM,IAAI,UAAU,IAAI,WAAW,KAAK,CAAC,MAAM;KAC1H,KAAK,OAAO,OAAO,IAAI;KACvB,KAAK,OAAO,MAAM;IACpB;IACA,OAAO;GACT;GACA,SAAS,eAAe,KAAK,aAAa;IACxC,IAAI,WAAW;IACf,IAAI,KAAK,WAAW,gBAAgB,UAClC,WAAW;SACN,IAAI,KAAK,WAAW,gBAAgB,UACzC,WAAW;IAEb,IAAI,IAAI,WAAW,WAAW,YAAY,aAAa;KACrD,IAAI,SAAS,SAAS,UAAU,QAAQ,YAAY,YAAY,SAAS,aAAa;KACtF,IAAI,IAAI,WAAW,SAAS,WAC1B,IAAI,MAAM,IAAI,aAAa;UACtB,IAAI,IAAI,WAAW,SAAS,SACjC,IAAI,MAAM,IAAI,WAAW;KAE3B,UAAU,IAAI;KACd,WAAW,kBAAkB,OAAO;KACpC,SAAS,SAAS;KAClB,KAAK,IAAI,KAAK,GAAG,KAAK,WAAW,GAAG,MAClC,SAAS,SAAS,SAAS,OAAO,KAAK;KAEzC,cAAc,SAAS,KAAK;KAC5B,UAAU,aAAa,IAAI,IAAI,IAAI,aAAa,IAAI;KACpD,aAAa,aAAa;KAC1B,cAAc,CAAC;KACf,gBAAgB;KAChB,YAAY,KAAK,aAAa;KAC9B,aAAa,IAAI;KACjB,KAAK,IAAI,KAAK,GAAG,KAAK,QAAQ,MAAM;MAClC,IAAI,mBAAmB,SAAS,KAAK,WAAW;MAChD,KAAK,IAAI,KAAK,GAAG,KAAK,WAAW,GAAG,MAClC,mBAAmB,mBAAmB,SAAS,KAAK,WAAW,aAAa,OAAO,KAAK;MAE1F,gBAAgB,gBAAgB;MAChC,YAAY,KAAK,aAAa;KAChC;KACA,KAAK,IAAI,KAAK,GAAG,KAAK,YAAY,SAAS,GAAG,MAAM;MAElD,UADY,WAAW,SAAS,MAAM,YAAY,KAAK,YAAY,KAAK,EAAE,CAC5D,EAAE;MAChB,IAAI,IAAI,WAAW,SAAS,WAAW;OACrC,UAAU,IAAI,aAAa,OAAO;OAClC,MAAM,cAAc,KAAK,OAAO;MAClC,OAAO,IAAI,IAAI,WAAW,SAAS,SAAS;OAC1C,UAAU,IAAI,WAAW,OAAO;OAChC,MAAM,YAAY,KAAK,OAAO;MAChC;KACF;KACA,OAAO,IAAI;KACX,IAAI,IAAI,WAAW,SAAS;UACtB,IAAI,WAAW,WAAW,UAC5B,MAAM,IAAI,OAAO,SAAS,IAAI,KAAK;OACjC,IAAI,MAAM,MAAM,GACd,OAAO;MACX,CAAC;KAAA;IAGP,OAAO;KACL,IAAI,IAAI,WAAW,WAAW,YAAY,CAAC,aAAa;MACtD,IAAI,UAAU,kBAAkB,IAAI,QAAQ;MAC5C,UAAU,QAAQ,MAAM,QAAQ,EAAE;KACpC,OACE,IAAI,IAAI,UACN,IAAI,UAAU,IAAI,SAAS,MAAM,KAAK,EAAE,OAAO,SAAS,IAAI;MAC1D,IAAI,OAAO,IACT,OAAO;KACX,CAAC;UAED,IAAI,UAAU,IAAI,WAAW,CAAC,EAAE;KAGpC,OAAO,IAAI;KACX,IAAI,IAAI,WAAW,SAAS,WAC1B,IAAI,MAAM,IAAI,aAAa,OAAO;UAC7B,IAAI,IAAI,WAAW,SAAS,SACjC,IAAI,MAAM,IAAI,WAAW,OAAO;UAC3B,IAAI,IAAI,WAAW,SAAS,SAAS;MAC1C,IAAI,MAAM,IAAI,WAAW,OAAO;MAChC,IAAI,IAAI,WAAW,WAAW,UAC5B,MAAM,IAAI,OAAO,SAAS,IAAI,KAAK;OACjC,IAAI,MAAM,MAAM,GACd,OAAO;MACX,CAAC;KAEL;IACF;IACA,OAAO;GACT;GACA,IAAI,MAAM;GACV,IAAI,OAAO,WACT,IAAI;IACF,MAAM,IAAI,UAAU,EAAE,gBAAgB,YAAY,UAAU;GAC9D,SAAS,GAAG;IACV,MAAM;GACR;QACK,IAAI,OAAO,eAChB,IAAI;IACF,MAAM,IAAI,cAAc,kBAAkB;IAC1C,IAAI,QAAQ;IACZ,IAAI,CAAC,IAAI,QAET,GACE,MAAM,IAAI,MAAM,IAAI,WAAW,SAAS,IAAI,WAAW,OAAO;GAElE,SAAS,GAAG;IACV,MAAM;GACR;QAEA,MAAM,IAAI,MAAM,0BAA0B;GAE5C,IAAI,MAAM,IAAI;GACd,IAAI,OAAO,UAAU,GAAG;GACxB,IAAI,SAAS,CAAC;GACd,IAAI,UAAU,CAAC;GACf,IAAI,UAAU,CAAC;GACf,IAAI,KAAK,UAAU;IACjB,IAAI,QAAQ,KAAK,SAAS;IAC1B,IAAI,aAAa,KAAK,WAAW,eAAe,YAAY;IAC5D,IAAI,WAAW;KAAC;KAAa;KAAU;KAAU;IAAO;IACxD,IAAI,eAAe,GAAG,mBAAmB,SAAS;IAClD,OAAO,eAAe,kBAAkB;KACtC,IAAI,UAAU,MAAM,SAAS;KAC7B,IAAI,WAAW,QAAQ,WAAW;MAChC,IAAI,OAAO,UAAU,SAAS,KAAK,QAAQ,SAAS,MAAM,kBACxD,IAAI,MAAM,QAAQ;WAElB,IAAI,MAAM,CAAC,QAAQ,SAAS;MAE9B,IAAI,iBAAiB,GAAG,qBAAqB,IAAI;MACjD,OAAO,iBAAiB,oBAAoB;OAC1C,IAAI,WAAW,IAAI,mBAAmB,IAAI,gBAAgB,SAAS,SAAS,GAC1E,IAAI,gBAAgB,OAAO,eAAe,IAAI,iBAAiB,UAAU;OAE3E;MACF;MACA,QAAQ,SAAS,eAAjB;OACE,KAAK;QACH,IAAI,iBAAiB,SAAS,MAAM,WAAW,cAAc;QAC7D,IAAI,cAAc,QAAQ,WAAW;QACrC,IAAI,iBAAiB;cACd,IAAI,IAAI,GAAG,MAAM,IAAI,QAAQ,IAAI,KAAK,KACzC,IAAI,gBAAgB,IAAI,GAAG,WAAW,MAAM;UAC1C,IAAI,aAAa,IAAI,GAAG,WAAW;UACnC,UAAU,IAAI,aAAa,iBAAiB,UAAU;UACtD,QAAQ,IAAI,IAAI,GAAG,MAAM,CAAC;SAC5B;;QAGJ;OACF,KAAK;QACH,IAAI,iBAAiB,SAAS,MAAM,WAAW,cAAc;QAC7D,IAAI,iBAAiB,GAAG;SACtB,IAAI,aAAa,QAAQ,UAAU,WAAW;SAC9C,SAAS,IAAI,aAAa,iBAAiB,UAAU;SACrD,OAAO,IAAI,QAAQ,UAAU,MAAM,CAAC;QACtC;QACA;OACF,KAAK;QACH,IAAI,iBAAiB,SAAS,MAAM,WAAW,cAAc;QAC7D,IAAI,iBAAiB,GAAG;SACtB,IAAI,eAAe,IAAI,WAAW,QAAQ,UAAU,GAAG,KAAK,MAAM;SAClE,IAAI,SAAS,IAAI,WAAW,QAAQ,UAAU,GAAG,KAAK,MAAM;SAC5D,aAAa,IAAI,QAAQ,UAAU,GAAG,MAAM,CAAC;SAC7C,OAAO,IAAI,QAAQ,UAAU,GAAG,MAAM,CAAC;SACvC,IAAI,OAAO,iBAAiB,aAAa;SACzC,UAAU,IAAI,YAAY,IAAI,OAAO,IAAI,cAAc;SACvD,IAAI,eAAe;SACnB,KAAK,IAAI,IAAI,GAAG,MAAM,gBAAgB,IAAI,KAAK,KAAK;UAClD,IAAI,QAAQ,CAAC;UACb,KAAK,IAAI,IAAI,GAAG,OAAO,OAAO,IAAI,OAAO,GAAG,IAAI,OAAO,MAAM,KAAK;WAChE,MAAM,KAAK,aAAa,EAAE;WAC1B,IAAI,IAAI,GACN,OAAO,OAAO,IAAI;UACtB;UACA,KAAK,IAAI,IAAI,GAAG,OAAO,OAAO,IAAI,OAAO,GAAG,IAAI,OAAO,OAAO,GAAG,KAAK;WACpE,IAAI,IAAI,GAAG;YACT,QAAQ,kBAAkB,MAAM;YAChC,QAAQ,kBAAkB,MAAM,IAAI;YACpC,QAAQ,kBAAkB,MAAM,IAAI;WACtC,OAAO;YACL,QAAQ,kBAAkB,MAAM;YAChC,QAAQ,kBAAkB,MAAM,IAAI;YACpC,QAAQ,kBAAkB,MAAM,IAAI;WACtC;WACA,IAAI,IAAI,GACN,OAAO,OAAO,IAAI;UACtB;SACF;QACF;QACA;OACF,KAAK;QACH,IAAI,gBAAgB,SAAS,MAAM,WAAW,aAAa;QAC3D,IAAI,gBAAgB,GAAG;SACrB,IAAI,eAAe,IAAI,WAAW,QAAQ,UAAU,GAAG,KAAK,MAAM;SAClE,IAAI,SAAS,IAAI,WAAW,QAAQ,UAAU,GAAG,KAAK,MAAM;SAC5D,aAAa,IAAI,QAAQ,UAAU,GAAG,MAAM,CAAC;SAC7C,OAAO,IAAI,QAAQ,UAAU,GAAG,MAAM,CAAC;SACvC,IAAI,OAAO,gBAAgB,aAAa;SACxC,UAAU,IAAI,YAAY,IAAI,OAAO,IAAI,aAAa;SACtD,IAAI,eAAe,GAAG,oBAAoB;SAC1C,IAAI,IAAI,GAAG,MAAM,eAAe,OAAO;SACvC,OAAO,IAAI,KAAK;UACd,IAAI,OAAO,CAAC;UACZ,IAAI,IAAI,GAAG,OAAO,OAAO;UACzB,OAAO,IAAI,OAAO,MAAM;WACtB,KAAK,KAAK,aAAa,oBAAoB;WAC3C;UACF;UACA,IAAI,IAAI;UACR,OAAO,IAAI,OAAO,OAAO,GAAG;WAC1B,QAAQ,kBAAkB,KAAK;WAC/B,QAAQ,kBAAkB,KAAK;WAC/B,QAAQ,kBAAkB,KAAK,IAAI;WACnC;UACF;UACA;UACA,OAAO,OAAO,IAAI;SACpB;QACF;QACA;MACJ;KACF;KACA;IACF;IACA,IAAI,WAAW,IAAI,eAAe;IAClC,SAAS,SAAS,IAAI,gBAAgB,SAAS,CAAC,CAAC;IACjD,SAAS,aAAa,YAAY,IAAI,gBAAgB,QAAQ,CAAC,CAAC;IAChE,IAAI,QAAQ,WAAW,OAAO,QAC5B,SAAS,aAAa,UAAU,IAAI,gBAAgB,SAAS,CAAC,CAAC;IAEjE,OAAO;GACT,OACE,MAAM,IAAI,MAAM,0BAA0B;EAE9C;EACA,IAAI,OAAOC,aAAW,IAAI,WAAW,MAAM,GAAG,GAAG,CAAC,EAAE,MAAM,IAAI;EAC9D,IAAI,KAAK,GAAG,QAAQ,KAAK,MAAM,IAC7B,OAAO,SAASA,aAAW,IAAI,CAAC;OAC3B,IAAI,KAAK,GAAG,SAAS,OAAO,GACjC,OAAO,WAAWA,aAAW,IAAI,CAAC;OAElC,OAAO,YAAY,IAAI;CAE3B;AACF;;;AC7nBA,IAAM,eAAN,cAA2B,OAAO;CAChC,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,MAAM,SAAS,IAAI,WAAW,KAAK,OAAO;EAC1C,OAAO,QAAQ,KAAK,IAAI;EACxB,OAAO,gBAAgB,MAAM;EAC7B,OAAO,KACL,MACC,SAAS;GACR,IAAI;IACF,OAAO,KAAK,MAAM,IAAI,CAAC;GACzB,SAAS,GAAG;IACV,IAAI,SACF,QAAQ,CAAC;SAET,QAAQ,MAAM,CAAC;IAEjB,KAAK,QAAQ,UAAU,GAAG;GAC5B;EACF,GACA,YACA,OACF;CACF;CACA,MAAM,KAAK;EACT,MAAM,IAAI,QAAQ,kBAAkB,EAAE,EAAE,QAAQ,kBAAkB,EAAE,EAAE,KAAK;EAC3E,MAAM,QAAQ,IAAI,MAAM,UAAU;EAClC,MAAM,YAAY,MAAM,GAAG,KAAK,EAAE,MAAM,MAAM,EAAE,KAAK,MAAM,WAAW,CAAC,CAAC;EACxE,MAAM,WAAW,UAAU,KAAK,UAAU;EAC1C,MAAM,OAAO,UAAU;EACvB,KAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,GAAG,KAC3C,IAAI,aAAa,UAAU,KAAK,UAAU,IAAI,IAC5C,MAAM,IAAI,MAAM,qDAAqD;EAGzE,MAAM,YAAY,IAAI,MAAM,OAAO,OAAO,OAAO,CAAC;EAClD,IAAI,QAAQ;EACZ,IAAI,iBAAiB;EACrB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;GAE5C,MAAM,QADO,MAAM,GAAG,KACL,EAAE,MAAM,KAAK;GAC9B,MAAM,IAAI,WAAW,MAAM,EAAE;GAC7B,MAAM,IAAI,WAAW,MAAM,EAAE;GAC7B,MAAM,IAAI,WAAW,MAAM,EAAE;GAC7B,iBAAiB,KAAK,IAAI,gBAAgB,GAAG,GAAG,CAAC;GACjD,MAAM,SAAS,QAAQ;GACvB,MAAM,SAAS,KAAK,MAAM,QAAQ,IAAI,IAAI;GAC1C,MAAM,SAAS,KAAK,MAAM,SAAS,OAAO,KAAK,IAAI;GACnD,MAAM,aAAa,SAAS,OAAO,OAAO,SAAS,OAAO;GAC1D,UAAU,IAAI,aAAa,KAAK;GAChC,UAAU,IAAI,aAAa,KAAK;GAChC,UAAU,IAAI,aAAa,KAAK;GAChC,UAAU,IAAI,aAAa,KAAK;GAChC,SAAS;EACX;EAEA,MAAM,cAAc,KAAK,IAAI,GADhB,KAAK,KAAK,KAAK,KAAK,cAAc,CACZ,CAAC;EACpC,KAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,GAAG,KAAK,GAAG;GACnD,MAAM,IAAI,UAAU,IAAI;GACxB,MAAM,IAAI,UAAU,IAAI;GACxB,MAAM,IAAI,UAAU,IAAI;GACxB,UAAU,IAAI,KAAK,MAAM,IAAI;GAC7B,UAAU,IAAI,KAAK,MAAM,IAAI;GAC7B,UAAU,IAAI,KAAK,MAAM,IAAI;EAC/B;EACA,MAAM,OAAO,IAAI,WAAW,SAAS;EACrC,MAAM,UAAU,IAAI,YAAY;EAChC,QAAQ,MAAM,OAAO;EACrB,QAAQ,MAAM,QAAQ;EACtB,QAAQ,MAAM,SAAS,OAAO;EAC9B,QAAQ,SAAS;EACjB,QAAQ,OAAO;EACf,QAAQ,YAAY;EACpB,QAAQ,YAAY;EACpB,QAAQ,QAAQ;EAChB,QAAQ,QAAQ;EAChB,QAAQ,kBAAkB;EAC1B,QAAQ,cAAc;EACtB,MAAM,YAAY,IAAI,cAAc;EACpC,UAAU,MAAM,OAAO;EACvB,UAAU,MAAM,QAAQ;EACxB,UAAU,MAAM,SAAS;EACzB,UAAU,MAAM,QAAQ;EACxB,UAAU,SAAS;EACnB,UAAU,OAAO;EACjB,UAAU,YAAY;EACtB,UAAU,YAAY;EACtB,UAAU,QAAQ;EAClB,UAAU,QAAQ;EAClB,UAAU,QAAQ;EAClB,UAAU,kBAAkB;EAC5B,UAAU,cAAc;EACxB,OAAO;GACL;GACA;GACA;EACF;CACF;AACF;;;AClGA,IAAM,YAAN,cAAwB,wBAAwB;CAC9C,YAAY,SAAS;EACnB,MAAM,OAAO;CACf;CACA,MAAM,QAAQ,aAAa;EACzB,MAAM,MAAM;GAAE,SAAS,CAAC;GAAG,OAAO;GAAG,QAAQ;GAAG,QAAQ;GAAM,aAAa;EAAE;EAC7E,MAAM,YAAY;EAClB,MAAM,mBAAmB;EACzB,MAAM,mBAAmB;EACzB,MAAM,6BAA6B;EACnC,MAAM,6BAA6B;EACnC,MAAM,6BAA6B;EACnC,MAAM,6BAA6B;EACnC,MAAM,6BAA6B;EACnC,MAAM,6BAA6B;EACnC,MAAM,cAAc;EACpB,SAAS,cAAc,OAAO;GAC5B,OAAO,MAAM,WAAW,CAAC,KAAK,MAAM,WAAW,CAAC,KAAK,MAAM,MAAM,WAAW,CAAC,KAAK,OAAO,MAAM,WAAW,CAAC,KAAK;EAClH;EACA,SAAS,cAAc,OAAO;GAC5B,OAAO,OAAO,aAAa,QAAQ,KAAK,SAAS,IAAI,KAAK,SAAS,KAAK,KAAK,SAAS,KAAK,GAAG;EAChG;EACA,SAAS,YAAY,SAAS,aAAa,OAAO,QAAQ;GACxD,MAAM,aAAa,QAAQ,SAAS;GACpC,MAAM,YAAY,IAAI,WAAW,SAAS,aAAa,UAAU;GACjE,MAAM,YAAY,IAAI,WAAW,UAAU;GAC3C,IAAI,MAAM;GACV,IAAI,MAAM;GACV,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAC1B,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KAAK;IAC9B,MAAM,IAAI,UAAU;IACpB;IACA,MAAM,IAAI,UAAU;IACpB;IACA,MAAM,IAAI,UAAU;IACpB;IACA,MAAM,IAAI,UAAU;IACpB;IACA,UAAU,OAAO;IACjB;IACA,UAAU,OAAO;IACjB;IACA,UAAU,OAAO;IACjB;IACA,UAAU,OAAO;IACjB;GACF;GAEF,OAAO;EACT;EACA,MAAM,cAAc,cAAc,MAAM;EACxC,MAAM,cAAc,cAAc,MAAM;EACxC,MAAM,cAAc,cAAc,MAAM;EACxC,MAAM,cAAc,cAAc,MAAM;EACxC,MAAM,kBAAkB;EACxB,MAAM,YAAY;EAClB,MAAM,WAAW;EACjB,MAAM,YAAY;EAClB,MAAM,aAAa;EACnB,MAAM,YAAY;EAClB,MAAM,kBAAkB;EACxB,MAAM,cAAc;EACpB,MAAM,eAAe;EACrB,MAAM,kBAAkB;EACxB,MAAM,eAAe;EACrB,MAAM,eAAe;EACrB,MAAM,eAAe;EACrB,MAAM,eAAe;EACrB,MAAM,YAAY;EAClB,MAAM,SAAS,IAAI,WAAW,QAAQ,GAAG,eAAe;EACxD,IAAI,OAAO,eAAe,WAAW;GACnC,QAAQ,MAAM,4DAA4D;GAC1E,OAAO;EACT;EACA,IAAI,CAAC,OAAO,eAAe,aAAa;GACtC,QAAQ,MAAM,wEAAwE;GACtF,OAAO;EACT;EACA,IAAI;EACJ,MAAM,SAAS,OAAO;EACtB,IAAI,qBAAqB;EACzB,QAAQ,QAAR;GACE,KAAK;IACH,aAAa;IACb,IAAI,SAAS;IACb;GACF,KAAK;IACH,aAAa;IACb,IAAI,SAAS;IACb;GACF,KAAK;IACH,aAAa;IACb,IAAI,SAAS;IACb;GACF,KAAK;IACH,aAAa;IACb,IAAI,SAAS;IACb;GACF,SACE,IAAI,OAAO,qBAAqB,MAAM,OAAO,gBAAgB,YAAY,OAAO,gBAAgB,SAAS,OAAO,gBAAgB,OAAO,OAAO,gBAAgB,YAAY;IACxK,qBAAqB;IACrB,aAAa;IACb,IAAI,SAAS;GACf,OAAO;IACL,QAAQ,MAAM,mDAAmD,cAAc,MAAM,CAAC;IACtF,OAAO;GACT;EACJ;EACA,IAAI,cAAc;EAClB,IAAI,OAAO,aAAa,oBAAoB,gBAAgB,OAC1D,IAAI,cAAc,KAAK,IAAI,GAAG,OAAO,gBAAgB;EAEvD,MAAM,QAAQ,OAAO;EACrB,IAAI,YAAY,QAAQ,mBAAmB,OAAO;EAClD,IAAI,IAAI,cAAc,EAAE,QAAQ,+BAA+B,EAAE,QAAQ,+BAA+B,EAAE,QAAQ,+BAA+B,EAAE,QAAQ,+BAA+B,EAAE,QAAQ,+BAA+B,EAAE,QAAQ,8BAA8B;GACzQ,QAAQ,MAAM,iDAAiD;GAC/D,OAAO;EACT;EACA,IAAI,QAAQ,OAAO;EACnB,IAAI,SAAS,OAAO;EACpB,IAAI,aAAa,OAAO,YAAY;EACpC,MAAM,QAAQ,IAAI,YAAY,IAAI;EAClC,KAAK,IAAI,OAAO,GAAG,OAAO,OAAO,QAAQ;GACvC,IAAI,QAAQ,IAAI;GAChB,IAAI,SAAS,IAAI;GACjB,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,aAAa,KAAK;IACxC,IAAI,WAAW;IACf,IAAI,oBAAoB;KACtB,YAAY,YAAY,QAAQ,YAAY,OAAO,MAAM;KACzD,aAAa,UAAU;IACzB,OAAO;KACL,aAAa,KAAK,IAAI,GAAG,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,MAAM,IAAI,IAAI;KAChE,YAAY,IAAI,WAAW,QAAQ,YAAY,UAAU;IAC3D;IACA,MAAM,SAAS;KAAE,MAAM;KAAW;KAAO;IAAO;IAChD,IAAI,QAAQ,KAAK,MAAM;IACvB,cAAc;IACd,QAAQ,KAAK,IAAI,SAAS,GAAG,CAAC;IAC9B,SAAS,KAAK,IAAI,UAAU,GAAG,CAAC;GAClC;EACF;EACA,OAAO;CACT;AACF;;;AC/IA,IAAM,YAAN,cAAwB,wBAAwB;CAC9C,YAAY,SAAS;EACnB,MAAM,OAAO;CACf;CACA,MAAM,QAAQ,aAAa;EAEzB,MAAM,SAAS,IAAI,YAAY,QAAQ,GAAG,EAAe;EACzD,MAAM,WAAW;GACf;GACA;GACA;EACF;EACA,IAAI,OAAO,OAAO,UAChB,OAAO,SAAS,QAAQ;OACnB,IAAI,OAAO,QAAQ,WACxB,OAAO,SAAS,QAAQ;OAExB,QAAQ,MAAM,sCAAsC;CAExD;AACF;AACA,SAAS,SAAS,UAAU;CAC1B,MAAM,SAAS,SAAS;CACxB,IAAI,KAAK;CACT,MAAM,UAAU,OAAO,KAAK,cAAc,OAAO,IAAI,SAAS,OAAO,IAAI,QAAQ,OAAO,IAAI,WAAW,OAAO,KAAK,aAAa,OAAO;CACvI,QAAQ,aAAR;EACE,KAAK;GACH,MAAM;GACN,SAAS;GACT;EACF,KAAK;GACH,MAAM;GACN,SAAS;GACT;EACF,KAAK;GACH,MAAM;GACN,SAAS;GACT;EACF,KAAK;GACH,MAAM;GACN,SAAS;GACT;EACF,SACE,QAAQ,MAAM,4CAA4C,WAAW;CACzE;CACA,SAAS,UAAU,KAAK;CACxB,SAAS,MAAM;CACf,SAAS,SAAS;CAClB,SAAS,QAAQ;CACjB,SAAS,SAAS;CAClB,SAAS,cAAc;CACvB,SAAS,aAAa;CACtB,SAAS,YAAY,aAAa;CAClC,OAAO,SAAS,QAAQ;AAC1B;AACA,SAAS,SAAS,UAAU;CAC1B,MAAM,SAAS,SAAS;CACxB,MAAM,eAAe,OAAO,IAAI,SAAS,OAAO,IAAI,QAAQ,OAAO,IAAI,aAAa,OAAO,IAAI,QAAQ,OAAO,IAAI,eAAe,OAAO,KAAK,WAAW,OAAO;CAC/J,MAAM,YAAY;CAClB,MAAM,UAAU,IAAI,UAAU;CAC9B,MAAM,cAAc,QAAQ;CAC5B,IAAI,KAAK;CACT,MAAM,YAAY,eAAe;CACjC,IAAI,gBAAgB,SAAS;EAC3B,SAAS,YAAY,2BAA2B;EAChD,MAAM;CACR,OAAO,IAAI,gBAAgB,SAAS;EAClC,SAAS,YAAY,2BAA2B;EAChD,MAAM;CACR,OACE,QAAQ,MAAM,wCAAwC,WAAW;CAEnE,SAAS,UAAU;CACnB,SAAS,MAAM;CACf,SAAS,SAAS;CAClB,SAAS,QAAQ;CACjB,SAAS,SAAS;CAClB,SAAS,cAAc;CACvB,SAAS,aAAa,aAAa;CACnC,SAAS,YAAY,aAAa;CAClC,OAAO,SAAS,QAAQ;AAC1B;AACA,SAAS,SAAS,UAAU;CAC1B,MAAM,MAAM;EACV,SAAS,CAAC;EACV,OAAO,SAAS;EAChB,QAAQ,SAAS;EACjB,QAAQ,SAAS;EACjB,aAAa,SAAS;EACtB,WAAW,SAAS;CACtB;CACA,MAAM,SAAS,SAAS;CACxB,IAAI,aAAa,SAAS,SAAS,WAAW,GAAG,YAAY,GAAG,aAAa,GAAG,cAAc,GAAG,cAAc,GAAG,eAAe;CACjI,MAAM,MAAM,SAAS,KAAK,WAAW,SAAS;CAC9C,IAAI,QAAQ,GAAG;EACb,aAAa;EACb,cAAc;CAChB,OAAO;EACL,aAAa;EACb,cAAc;CAChB;CACA,YAAY,aAAa,cAAc,MAAM;CAC7C,IAAI,QAAQ,SAAS,SAAS,aAAa;CAC3C,IAAI,WAAW;CACf,OAAO,WAAW,SAAS,YAAY;EACrC,MAAM,SAAS,SAAS,SAAS,UAAU,UAAU,SAAS,UAAU;EACxE,cAAc,SAAS;EACvB,eAAe,UAAU;EACzB,IAAI,cAAc,GAChB,cAAc;EAChB,IAAI,eAAe,GACjB,eAAe;EACjB,WAAW,cAAc,eAAe;EACxC,KAAK,IAAI,YAAY,GAAG,YAAY,UAAU,aAAa;GAEzD,MAAM,SAAS;IACb,MAAM,IAFc,WAAW,QAAQ,YAAY,QAErC;IACd,OAAO;IACP,QAAQ;GACV;GACA,IAAI,QAAQ,YAAY,SAAS,aAAa,YAAY;GAC1D,cAAc;EAChB;EACA;CACF;CACA,OAAO;AACT;;;AC9HA,IAAM,cAAN,cAA0B,OAAO;CAC/B,YAAY,SAAS;EACnB,MAAM,OAAO;EACb,KAAK,aAAa;CACpB;CACA,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,MAAM,QAAQ;EACd,MAAM,SAAS,IAAI,WAAW,MAAM,OAAO;EAC3C,OAAO,QAAQ,MAAM,IAAI;EACzB,OAAO,iBAAiB,MAAM,aAAa;EAC3C,OAAO,mBAAmB,MAAM,eAAe;EAC/C,OAAO,KACL,KACA,SAAS,MAAM;GACb,IAAI;IACF,OAAO,MAAM,MAAM,IAAI,CAAC;GAC1B,SAAS,GAAG;IACV,IAAI,SACF,QAAQ,CAAC;SAET,QAAQ,MAAM,CAAC;IAEjB,MAAM,QAAQ,UAAU,GAAG;GAC7B;EACF,GACA,YACA,OACF;CACF;CACA,MAAM,MAAM;EACV,IAAI,QAAQ;GAAE,GAAG;GAAG,GAAG;GAAG,GAAG;GAAG,GAAG;GAAG,GAAG;GAAG,WAAW;GAAO,UAAU;EAAM;EAC9E,IAAI,SAAS,CAAC;EACd,IAAI,eAAe,KAAK;EACxB,MAAM,eAAe,IAAI,kBAAkB,EAAE,OAAO,SAAS,CAAC;EAC9D,aAAa,OAAO;EACpB,MAAM,oBAAoB,IAAI,kBAAkB,EAAE,OAAO,MAAM,CAAC;EAChE,kBAAkB,OAAO;EACzB,SAAS,SAAS,MAAM;GACtB,eAAe;IAAE,QAAQ,CAAC;IAAG,YAAY,CAAC;IAAG,GAAG,KAAK;GAAE;GACvD,OAAO,KAAK,YAAY;EAC1B;EACA,SAAS,WAAW,IAAI,IAAI;GAC1B,IAAI,iBAAiB,KAAK,GACxB,SAAS,EAAE;GAEb,IAAI,MAAM,WAAW;IACnB,aAAa,OAAO,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACzC,aAAa,OAAO,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;GAC3C,OAAO;IACL,aAAa,WAAW,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IAC7C,aAAa,WAAW,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;GAC/C;EACF;EACA,SAAS,MAAM,IAAI,IAAI;GACrB,OAAO,MAAM,WAAW,KAAK,KAAK;EACpC;EACA,SAAS,SAAS,IAAI,IAAI;GACxB,OAAO,MAAM,WAAW,KAAK,KAAK;EACpC;EACA,IAAI,QAAQ,KAAK,QAAQ,QAAQ,EAAE,EAAE,MAAM,IAAI;EAC/C,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;GACrC,IAAI,SAAS,MAAM,GAAG,MAAM,GAAG;GAC/B,IAAI,MAAM,OAAO,GAAG,YAAY;GAChC,IAAI,OAAO,CAAC;GACZ,OAAO,OAAO,CAAC,EAAE,QAAQ,SAAS,OAAO;IACvC,IAAI,MAAM,OAAO,KAAK,GAAG;KACvB,IAAI,MAAM,MAAM,GAAG,YAAY;KAE/B,KAAK,OADO,WAAW,MAAM,UAAU,CAAC,CACxB;IAClB;GACF,CAAC;GACD,IAAI,QAAQ,QAAQ,QAAQ,MAAM;IAChC,IAAI,OAAO;KACT,GAAG,KAAK,MAAM,KAAK,IAAI,SAAS,MAAM,GAAG,KAAK,CAAC,IAAI,MAAM;KACzD,GAAG,KAAK,MAAM,KAAK,IAAI,SAAS,MAAM,GAAG,KAAK,CAAC,IAAI,MAAM;KACzD,GAAG,KAAK,MAAM,KAAK,IAAI,SAAS,MAAM,GAAG,KAAK,CAAC,IAAI,MAAM;KACzD,GAAG,KAAK,MAAM,KAAK,IAAI,SAAS,MAAM,GAAG,KAAK,CAAC,IAAI,MAAM;KACzD,GAAG,KAAK,MAAM,KAAK,IAAI,SAAS,MAAM,GAAG,KAAK,CAAC,IAAI,MAAM;IAC3D;IACA,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,GAAG;KAC9B,KAAK,YAAY,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI;KAC1C,IAAI,gBAAgB,KAAK,KAAK,KAAK,KAAK,aAAa,GACnD,SAAS,IAAI;IAEjB;IACA,WAAW,OAAO,IAAI;IACtB,QAAQ;GACV,OAAO,IAAI,QAAQ,QAAQ,QAAQ;QAE9B,IAAI,QAAQ,OACf,MAAM,WAAW;QACZ,IAAI,QAAQ,OACjB,MAAM,WAAW;QACZ,IAAI,QAAQ,OAAO;IACxB,IAAI,OAAO;IACX,KAAK,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK;IAC3C,KAAK,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK;IAC3C,KAAK,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK;IAC3C,KAAK,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK;IAC3C,QAAQ;GACV;EAEF;EACA,SAAS,UAAU,QAAQ,WAAW,GAAG;GACvC,IAAI,WAAW,IAAI,eAAe;GAClC,SAAS,aAAa,YAAY,IAAI,uBAAuB,QAAQ,CAAC,CAAC;GACvE,IAAI,WAAW,IAAI,aAAa,UAAU,YAAY,oBAAoB,YAAY;GACtF,SAAS,OAAO,UAAU;GAC1B,OAAO,IAAI,QAAQ;EACrB;EACA,MAAM,SAAS,IAAI,MAAM;EACzB,OAAO,OAAO;EACd,IAAI,KAAK,YACP,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;GACtC,IAAI,QAAQ,OAAO;GACnB,UAAU,MAAM,QAAQ,MAAM,CAAC;GAC/B,UAAU,MAAM,YAAY,OAAO,CAAC;EACtC;OACK;GACL,MAAM,SAAS,CAAC,GAAG,aAAa,CAAC;GACjC,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;IACtC,IAAI,QAAQ,OAAO;IACnB,IAAI,cAAc,MAAM;IACxB,IAAI,kBAAkB,MAAM;IAC5B,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,QAAQ,KACtC,OAAO,KAAK,YAAY,EAAE;IAE5B,KAAK,IAAI,IAAI,GAAG,IAAI,gBAAgB,QAAQ,KAC1C,WAAW,KAAK,gBAAgB,EAAE;GAEtC;GACA,UAAU,QAAQ,MAAM,OAAO,MAAM;GACrC,UAAU,YAAY,OAAO,OAAO,MAAM;EAC5C;EACA,OAAO,WAAW,aAAa,IAAI,MAAM,CAAC,KAAK,KAAK,GAAG,GAAG,CAAC,CAAC;EAC5D,OAAO;CACT;AACF;;;AC1IA,IAAIC,cAAY,OAAO;AACvB,IAAIC,qBAAmB,KAAK,KAAK,UAAU,OAAO,MAAMD,YAAU,KAAK,KAAK;CAAE,YAAY;CAAM,cAAc;CAAM,UAAU;CAAM;AAAM,CAAC,IAAI,IAAI,OAAO;AAC1J,IAAIE,mBAAiB,KAAK,KAAK,UAAU;CACvC,kBAAgB,KAAK,OAAO,QAAQ,WAAW,MAAM,KAAK,KAAK,KAAK;CACpE,OAAO;AACT;AAEA,IAAMC,+BAA6B,IAAI,QAAQ;AAC/C,IAAM,qBAAqC,uBAAO;CAChD,MAAM,sBAAsB,cAAc,OAAO;EAC/C,YAAY,SAAS;GACnB,MAAM,OAAO;GACb,KAAK,iBAAiB;GACtB,KAAK,mBAAmB;GACxB,KAAK,oBAAoB;GACzB,KAAK,cAAc;GACnB,KAAK,aAAa,CAAC;GACnB,KAAK,mBAAmB;GACxB,KAAK,kBAAkB;GACvB,KAAK,eAAe;EACtB;EACA,kBAAkB,MAAM;GACtB,KAAK,iBAAiB;GACtB,OAAO;EACT;EACA,eAAe,aAAa;GAC1B,KAAK,cAAc;GACnB,OAAO;EACT;EACA,cAAc,UAAU;GACtB,KAAK,eAAe;IAClB,eAAe,SAAS,WAAW,IAAI,+BAA+B;IACtE,eAAe,SAAS,WAAW,IAAI,+BAA+B;IACtE,eAAe,SAAS,WAAW,IAAI,8BAA8B;IACrE,cAAc,SAAS,WAAW,IAAI,+BAA+B;IACrE,eAAe,SAAS,WAAW,IAAI,8BAA8B;IACrE,gBAAgB,SAAS,WAAW,IAAI,gCAAgC,KAAK,SAAS,WAAW,IAAI,uCAAuC;GAC9I;GACA,OAAO;EACT;EACA,KAAK,KAAK,QAAQ,YAAY,SAAS;GACrC,MAAM,SAAS,IAAI,WAAW,KAAK,OAAO;GAC1C,OAAO,gBAAgB,aAAa;GACpC,OAAO,mBAAmB,KAAK,eAAe;GAC9C,MAAM,UAAU,IAAI,kBAAkB;GACtC,OAAO,KACL,MACC,WAAW;IACV,IAAIA,aAAW,IAAI,MAAM,GAEvB,OADmBA,aAAW,IAAI,MAClB,EAAE,QAAQ,KAAK,MAAM,EAAE,MAAM,OAAO;IAEtD,KAAK,eAAe,CAAC,MAAM,CAAC,EAAE,KAAK,SAAS,UAAU;KACpD,QAAQ,KAAK,QAAQ;KACrB,QAAQ,cAAc;KACtB,IAAI,QACF,OAAO,OAAO;IAClB,CAAC,EAAE,MAAM,OAAO;GAClB,GACA,YACA,OACF;GACA,OAAO;EACT;;EAEA,mBAAmB,SAAS;GAC1B,MAAM,EAAE,WAAW;GACnB,MAAM,0BAA0B,IAAI,IAAI;GACxC,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KACjC,QAAQ,IAAI,OAAO,GAAG,KAAK,MAAM;GAEnC,OAAO,KAAK,eAAe,MAAM,KAAK,OAAO,GAAG;IAAE,GAAG;IAAS,UAAU;GAAK,CAAC;EAChF;;;;;;EAMA,eAAe,SAAS,SAAS,CAAC,GAAG;GACnC,IAAI;GACJ,IAAI;GACJ,MAAM,aAAa;GACnB,IAAI,WAAW;GACf,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAClC,YAAY,QAAQ,GAAG;GAEzB,MAAM,iBAAiB,KAAK,gBAAgB,QAAQ,EAAE,MAAM,YAAY;IACtE,SAAS;IACT,SAAS,KAAK;IACd,OAAO,IAAI,SAAS,SAAS,WAAW;KACtC,OAAO,WAAW,UAAU;MAAE;MAAS;KAAO;KAC9C,OAAO,YAAY;MAAE,MAAM;MAAa,IAAI;MAAQ;MAAS;KAAW,GAAG,OAAO;IACpF,CAAC;GACH,CAAC,EAAE,MAAM,YAAY;IACnB,MAAM,EAAE,SAAS,OAAO,QAAQ,WAAW;IAC3C,MAAM,UAAU,IAAI,kBAAkB,SAAS,OAAO,QAAQ,QAAQ,gBAAgB;IACtF,QAAQ,YAAY,QAAQ,WAAW,IAAI,eAAe;IAC1D,QAAQ,YAAY;IACpB,QAAQ,kBAAkB;IAC1B,QAAQ,cAAc;IACtB,OAAO;GACT,CAAC;GACD,eAAe,YAAY,IAAI,EAAE,WAAW;IAC1C,IAAI,UAAU,QAAQ;KACpB,OAAO,aAAa;KACpB,OAAO,OAAO,WAAW;IAC3B;GACF,CAAC;GACD,aAAW,IAAI,QAAQ,IAAI,EAAE,SAAS,eAAe,CAAC;GACtD,OAAO;EACT;EACA,kBAAkB;GAChB,IAAI,CAAC,KAAK,mBAAmB;IAC3B,MAAM,WAAW,IAAI,WAAW,KAAK,OAAO;IAC5C,SAAS,QAAQ,KAAK,cAAc;IACpC,SAAS,mBAAmB,KAAK,eAAe;IAChD,MAAM,YAAY,IAAI,SAAS,SAAS,WAAW;KACjD,SAAS,KAAK,uBAAuB,SAAS,KAAK,GAAG,MAAM;IAC9D,CAAC;IACD,MAAM,eAAe,IAAI,WAAW,KAAK,OAAO;IAChD,aAAa,QAAQ,KAAK,cAAc;IACxC,aAAa,gBAAgB,aAAa;IAC1C,aAAa,mBAAmB,KAAK,eAAe;IACpD,MAAM,gBAAgB,IAAI,SAAS,SAAS,WAAW;KACrD,aAAa,KAAK,yBAAyB,SAAS,KAAK,GAAG,MAAM;IACpE,CAAC;IACD,KAAK,oBAAoB,QAAQ,IAAI,CAAC,WAAW,aAAa,CAAC,EAAE,MAAM,CAAC,YAAY,oBAAoB;KACtG,MAAM,KAAK,oBAAoB,YAAY,SAAS;KACpD,MAAM,OAAO;MACX;MACA,yBAAyB,KAAK,UAAU,oBAAoB,YAAY;MACxE,6BAA6B,KAAK,UAAU,oBAAoB,gBAAgB;MAChF,wBAAwB,KAAK,UAAU,oBAAoB,WAAW;MACtE;MACA;MACA;MACA,GAAG,UAAU,GAAG,QAAQ,GAAG,IAAI,GAAG,GAAG,YAAY,GAAG,CAAC;KACvD,EAAE,KAAK,IAAI;KACX,KAAK,kBAAkB,IAAI,gBAAgB,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;KAC3D,KAAK,mBAAmB;IAC1B,CAAC;GACH;GACA,OAAO,KAAK;EACd;EACA,gBAAgB,UAAU;GACxB,OAAO,KAAK,gBAAgB,EAAE,WAAW;IACvC,IAAI,KAAK,WAAW,SAAS,KAAK,aAAa;KAC7C,MAAM,UAAU,IAAI,OAAO,KAAK,eAAe;KAC/C,QAAQ,aAAa,CAAC;KACtB,QAAQ,YAAY;KACpB,QAAQ,YAAY;MAClB,MAAM;MACN,QAAQ,KAAK;MACb,kBAAkB,KAAK;KACzB,CAAC;KACD,QAAQ,YAAY,SAAS,GAAG;MAC9B,MAAM,UAAU,EAAE;MAClB,QAAQ,QAAQ,MAAhB;OACE,KAAK;QACH,QAAQ,WAAW,QAAQ,IAAI,QAAQ,OAAO;QAC9C;OACF,KAAK;QACH,QAAQ,WAAW,QAAQ,IAAI,OAAO,OAAO;QAC7C;OACF,SACE,QAAQ,MAAM,qDAAoD,QAAQ,OAAO,IAAG;MACxF;KACF;KACA,KAAK,WAAW,KAAK,OAAO;IAC9B,OACE,KAAK,WAAW,KAAK,SAAS,GAAG,GAAG;KAClC,OAAO,EAAE,YAAY,EAAE,YAAY,KAAK;IAC1C,CAAC;IAEH,MAAM,SAAS,KAAK,WAAW,KAAK,WAAW,SAAS;IACxD,OAAO,aAAa;IACpB,OAAO;GACT,CAAC;EACH;EACA,UAAU;GACR,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,KAC1C,KAAK,WAAW,GAAG,UAAU;GAE/B,KAAK,WAAW,SAAS;GACzB,OAAO;EACT;CACF;CACA,IAAI,sBAAsB;CAE1B,gBAAc,qBAAqB,eAAe;EAChD,OAAO;EACP,WAAW;CACb,CAAC;CACD,gBAAc,qBAAqB,oBAAoB;EACrD,MAAM;EACN,MAAM;EACN,KAAK;EACL,KAAK;EACL,KAAK;EACL,KAAK;EACL,oBAAoB;EACpB,QAAQ;EACR,cAAc;EACd,eAAe;EACf,UAAU;EACV,SAAS;EACT,6BAA6B;EAC7B,QAAQ;EACR,QAAQ;EACR,QAAQ;EACR,UAAU;CACZ,CAAC;CACD,gBAAc,qBAAqB,gBAAgB;EACjD;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CAED,gBAAc,qBAAqB,eAAe,WAAW;EAC3D,IAAI;EACJ,IAAI;EACJ,IAAI;EACJ,MAAM,eAAe;EACrB,MAAM,mBAAmB;EACzB,MAAM,cAAc;EACpB,YAAY,SAAS,GAAG;GACtB,MAAM,UAAU,EAAE;GAClB,QAAQ,QAAQ,MAAhB;IACE,KAAK;KACH,SAAS,QAAQ;KACjB,KAAK,QAAQ,gBAAgB;KAC7B;IACF,KAAK;KACH,kBAAkB,WAAW;MAC3B,IAAI;OACF,MAAM,EAAE,OAAO,QAAQ,UAAU,SAAS,WAAW,QAAQ,WAAW,WAAW,kBAAkB,QAAQ,UAAU,IAAI,UAAU,QAAQ,QAAQ,EAAE;OACvJ,MAAM,UAAU,CAAC;OACjB,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,EAAE,GACpC,QAAQ,KAAK,QAAQ,GAAG,KAAK,MAAM;OAErC,KAAK,YACH;QAAE,MAAM;QAAa,IAAI,QAAQ;QAAI;QAAO;QAAQ;QAAU;QAAS;OAAO,GAC9E,OACF;MACF,SAAS,OAAO;OACd,QAAQ,MAAM,KAAK;OACnB,KAAK,YAAY;QAAE,MAAM;QAAS,IAAI,QAAQ;QAAI,OAAO,MAAM;OAAQ,CAAC;MAC1E;KACF,CAAC;KACD;GACJ;EACF;EACA,SAAS,KAAK,YAAY;GACxB,oBAAoB,IAAI,SAAS,YAAY;IAC3C,cAAc;KAAE;KAAY,sBAAsB;IAAQ;IAC1D,MAAM,WAAW;GACnB,CAAC,EAAE,WAAW;IACZ,YAAY,gBAAgB;GAC9B,CAAC;EACH;EACA,SAAS,kBAAkB,YAAY;GACrC,MAAM,EAAE,aAAa,OAAO,QAAQ,aAAa;GACjD,MAAM,EAAE,kBAAkB,iBAAiB,oBAAoB,aAAa,OAAO,QAAQ,QAAQ;GACnG,MAAM,kBAAkB,YAAY,wBAAwB,gBAAgB;GAC5E,OAAO,YAAY,kBAAkB,gBAAgB,GAAG,+CAA+C;GACvG,MAAM,UAAU,CAAC;GACjB,IAAI,gBAAgB,YAAY,OAAO;IACrC,MAAM,aAAa,IAAI,YAAY,6BAA6B;IAChE,MAAM,EAAE,eAAe,eAAe,eAAe,eAAe,eAAe,WAAW;IAC9F,IAAI;KACF,IAAI;KACJ,KAAK,WAAW,eAAe,eAAe,eAAe,eAAe,aAAa;KACzF,OAAO,IAAI,oDAAoD;KAC/D,KAAK,WAAW,aAAa,UAAU;KACvC,OAAO,IAAI,kDAAkD;KAC7D,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,OAAO,QAAQ,KAAK;MACjD,MAAM,QAAQ,WAAW,OAAO;MAChC,MAAM,YAAY,WAAW,WAAW,WAAW;MACnD,MAAM,gBAAgB,6BAA6B,kBAAkB,MAAM,OAAO,MAAM,MAAM;MAC9F,MAAM,MAAM,IAAI,WAAW,aAAa;MACxC,KAAK,WAAW,eACd,kBACA,KACA,gBAAgB,iBAChB,MAAM,MACN,iBAAiB,kBAAkB,MAAM,KAAK,GAC9C,kBAAkB,kBAAkB,MAAM,MAAM,GAChD,MAAM,OACN,MAAM,QACN,MAAM,OACN,UAAU,oBACV,UAAU,oBACV,UAAU,sBACV,UAAU,sBACV,UAAU,YACV,UACA,OACA,GACA,CACF;MACA,OAAO,IAAI,iEAAiE,MAAM,QAAQ,GAAG;MAC7F,QAAQ,KAAK;OAAE,MAAM;OAAK,OAAO,MAAM;OAAO,QAAQ,MAAM;MAAO,CAAC;KACtE;IACF,UAAU;KACR,WAAW,OAAO;IACpB;GACF,OACE,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,OAAO,QAAQ,KAAK;IACjD,MAAM,QAAQ,WAAW,OAAO;IAChC,MAAM,gBAAgB,6BAA6B,kBAAkB,MAAM,OAAO,MAAM,MAAM;IAC9F,MAAM,MAAM,IAAI,WAAW,aAAa;IAqBxC,OApBW,YAAY,oBACrB,kBACA,KACA,gBAAgB,iBAChB,MAAM,MACN,iBAAiB,kBAAkB,MAAM,KAAK,GAC9C,kBAAkB,kBAAkB,MAAM,MAAM,GAChD,MAAM,OACN,MAAM,QACN,MAAM,OACN,GACA,MAAM,KAAK,YACX,GACA,UACA,OACA,GACA,GACA,IACA,EAEM,GAAG,sEAAsE,MAAM,QAAQ,GAAG;IAClG,QAAQ,KAAK;KAAE,MAAM;KAAK,OAAO,MAAM;KAAO,QAAQ,MAAM;IAAO,CAAC;GACtE;GAEF,OAAO;IAAE;IAAO;IAAQ;IAAU;IAAS,QAAQ;GAAa;EAClE;EACA,SAAS,UAAU,QAAQ;GACzB,MAAM,YAAY,IAAI,YAAY,UAAU,IAAI,WAAW,MAAM,CAAC;GAClE,MAAM,cAAc,UAAU,QAAQ,IAAI,YAAY,YAAY,YAAY;GAC9E,MAAM,QAAQ,UAAU,cAAc,GAAG,CAAC;GAC1C,MAAM,SAAS,UAAU,eAAe,GAAG,CAAC;GAC5C,MAAM,SAAS,UAAU,aAAa,CAAC;GACvC,MAAM,WAAW,UAAU,YAAY;GACvC,SAAS,UAAU;IACjB,UAAU,MAAM;IAChB,UAAU,OAAO;GACnB;GACA,MAAM,EAAE,kBAAkB,iBAAiB,oBAAoB,aAAa,OAAO,QAAQ,QAAQ;GACnG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,QAAQ;IAChC,QAAQ;IACR,MAAM,IAAI,MAAM,2CAA2C;GAC7D;GACA,IAAI,CAAC,UAAU,iBAAiB,GAAG;IACjC,QAAQ;IACR,MAAM,IAAI,MAAM,oDAAoD;GACtE;GACA,MAAM,UAAU,CAAC;GACjB,KAAK,IAAI,MAAM,GAAG,MAAM,QAAQ,OAAO;IACrC,MAAM,WAAW,UAAU,cAAc,GAAG,GAAG;IAC/C,MAAM,YAAY,UAAU,eAAe,GAAG,GAAG;IACjD,MAAM,MAAM,IAAI,WAAW,UAAU,8BAA8B,GAAG,KAAK,gBAAgB,CAAC;IAE5F,IAAI,CADW,UAAU,eAAe,KAAK,GAAG,KAAK,kBAAkB,GAAG,QAChE,GAAG;KACX,QAAQ;KACR,MAAM,IAAI,MAAM,mDAAmD;IACrE;IACA,QAAQ,KAAK;KAAE,MAAM;KAAK,OAAO;KAAU,QAAQ;IAAU,CAAC;GAChE;GACA,QAAQ;GACR,OAAO;IAAE;IAAO;IAAQ;IAAU;IAAS,QAAQ;GAAa;EAClE;EACA,MAAM,iBAAiB;GACrB;IACE,IAAI;IACJ,aAAa,CAAC,YAAY,SAAS;IACnC,kBAAkB,CAAC,iBAAiB,UAAU,iBAAiB,QAAQ;IACvE,cAAc,CAAC,aAAa,sBAAsB,aAAa,oBAAoB;IACnF,eAAe;IACf,eAAe;IACf,iBAAiB;GACnB;GACA;IACE,IAAI;IACJ,aAAa,CAAC,YAAY,OAAO,YAAY,SAAS;IACtD,kBAAkB,CAAC,iBAAiB,QAAQ,iBAAiB,MAAM;IACnE,cAAc,CAAC,aAAa,kBAAkB,aAAa,gBAAgB;IAC3E,eAAe;IACf,eAAe;IACf,iBAAiB;GACnB;GACA;IACE,IAAI;IACJ,aAAa,CAAC,YAAY,OAAO,YAAY,SAAS;IACtD,kBAAkB,CAAC,iBAAiB,KAAK,iBAAiB,GAAG;IAC7D,cAAc,CAAC,aAAa,sBAAsB,aAAa,qBAAqB;IACpF,eAAe;IACf,eAAe;IACf,iBAAiB;GACnB;GACA;IACE,IAAI;IACJ,aAAa,CAAC,YAAY,OAAO,YAAY,SAAS;IACtD,kBAAkB,CAAC,iBAAiB,MAAM,iBAAiB,IAAI;IAC/D,cAAc,CAAC,aAAa,iBAAiB,aAAa,oBAAoB;IAC9E,eAAe;IACf,eAAe;IACf,iBAAiB;GACnB;GACA;IACE,IAAI;IACJ,aAAa,CAAC,YAAY,OAAO,YAAY,SAAS;IACtD,kBAAkB,CAAC,iBAAiB,MAAM,iBAAiB,IAAI;IAC/D,cAAc,CAAC,aAAa,iBAAiB,aAAa,eAAe;IACzE,eAAe;IACf,eAAe;IACf,iBAAiB;GACnB;GACA;IACE,IAAI;IACJ,aAAa,CAAC,YAAY,OAAO,YAAY,SAAS;IACtD,kBAAkB,CAAC,iBAAiB,cAAc,iBAAiB,aAAa;IAChF,cAAc,CAAC,aAAa,yBAAyB,aAAa,wBAAwB;IAC1F,eAAe;IACf,eAAe;IACf,iBAAiB;GACnB;EACF;EACA,MAAM,gBAAgB,eAAe,KAAK,SAAS,GAAG,GAAG;GACvD,OAAO,EAAE,gBAAgB,EAAE;EAC7B,CAAC;EACD,MAAM,gBAAgB,eAAe,KAAK,SAAS,GAAG,GAAG;GACvD,OAAO,EAAE,gBAAgB,EAAE;EAC7B,CAAC;EACD,SAAS,oBAAoB,aAAa,OAAO,QAAQ,UAAU;GACjE,IAAI;GACJ,IAAI;GACJ,MAAM,UAAU,gBAAgB,YAAY,QAAQ,gBAAgB;GACpE,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;IACvC,MAAM,MAAM,QAAQ;IACpB,IAAI,CAAC,OAAO,IAAI,KACd;IACF,IAAI,CAAC,IAAI,YAAY,SAAS,WAAW,GACvC;IACF,IAAI,IAAI,mBAAmB,EAAE,aAAa,KAAK,KAAK,aAAa,MAAM,IACrE;IACF,mBAAmB,IAAI,iBAAiB,WAAW,IAAI;IACvD,eAAe,IAAI,aAAa,WAAW,IAAI;IAC/C,OAAO;KAAE;KAAkB;IAAa;GAC1C;GACA,QAAQ,KAAK,4FAA4F;GACzG,mBAAmB,iBAAiB;GACpC,eAAe,aAAa;GAC5B,OAAO;IAAE;IAAkB;GAAa;EAC1C;EACA,SAAS,OAAO,IAAI,SAAS;GAC3B,IAAI,CAAC,IACH,MAAM,IAAI,MAAM,OAAO;EAC3B;EACA,SAAS,iBAAiB,kBAAkB,OAAO;GACjD,OAAO,KAAK,KAAK,QAAQ,YAAY,oBAAoB,gBAAgB,CAAC;EAC5E;EACA,SAAS,kBAAkB,kBAAkB,QAAQ;GACnD,OAAO,KAAK,KAAK,SAAS,YAAY,qBAAqB,gBAAgB,CAAC;EAC9E;EACA,SAAS,6BAA6B,kBAAkB,OAAO,QAAQ;GACrE,MAAM,kBAAkB,YAAY,wBAAwB,gBAAgB;GAC5E,IAAI,YAAY,qBAAqB,gBAAgB,GACnD,OAAO,QAAQ,SAAS;GAE1B,IAAI,qBAAqB,iBAAiB,gBAAgB,qBAAqB,iBAAiB,eAAe;IAC7G,MAAM,cAAc,QAAQ,IAAI;IAChC,MAAM,eAAe,SAAS,IAAI;IAClC,QAAQ,KAAK,IAAI,GAAG,WAAW,IAAI,KAAK,IAAI,GAAG,YAAY,IAAI,IAAI,KAAK;GAC1E;GACA,OAAO,iBAAiB,kBAAkB,KAAK,IAAI,kBAAkB,kBAAkB,MAAM,IAAI;EACnG;EACA,SAAS,aAAa,OAAO;GAC3B,IAAI,SAAS,GACX,OAAO;GACT,QAAQ,QAAQ,QAAQ,OAAO,KAAK,UAAU;EAChD;CACF,CAAC;CACD,OAAO;AACT,GAAG;;;AC1eH,IAAM,YAAN,cAAwB,OAAO;CAC7B,YAAY,SAAS;EACnB,MAAM,OAAO;EACb,KAAK,QAAQ;EACb,KAAK,QAAQ;EACb,KAAK,WAAW;EAChB,KAAK,YAAY,CAAC;EAClB,KAAK,SAAS,CAAC;CACjB;;;;;;;;;;CAUA,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,MAAM,QAAQ;EACd,MAAM,OAAO,KAAK,SAAS,KAAK,YAAY,eAAe,GAAG,IAAI,KAAK;EACvE,MAAM,SAAS,IAAI,WAAW,KAAK,OAAO;EAC1C,OAAO,QAAQ,KAAK,IAAI;EACxB,OAAO,gBAAgB,aAAa;EACpC,OAAO,iBAAiB,KAAK,aAAa;EAC1C,OAAO,mBAAmB,KAAK,eAAe;EAC9C,OAAO,KACL,KACA,SAAS,MAAM;GACb,IAAI;IACF,OAAO,MAAM,MAAM,MAAM,IAAI,CAAC;GAChC,SAAS,GAAG;IACV,IAAI,SACF,QAAQ,CAAC;SAET,QAAQ,MAAM,CAAC;IAEjB,MAAM,QAAQ,UAAU,GAAG;GAC7B;EACF,GACA,YACA,OACF;CACF;;;;;;;;;CASA,MAAM,aAAa,MAAM;EACvB,KAAK,QAAQ,IAAI,MAAM;EACvB,KAAK,WAAW;EAChB,KAAK,YAAY,CAAC;EAClB,KAAK,SAAS,CAAC;EACf,KAAK,SAAS,aAAa,IAAI;EAC/B,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,OAAO,QAAQ,KACtC,KAAK,MAAM,IAAI,KAAK,OAAO,EAAE;EAE/B,OAAO,KAAK;CACd;;;;;;;;CAQA,SAAS,aAAa,MAAM;EAC1B,MAAM,OAAO,IAAI,SAAS,WAAW;EACrC,MAAM,QAAQ,KAAK,UAAU,IAAI;EACjC,IAAI,MAAM,OAAO,aAAa,MAAM,OAAO,UAAU,MAAM,OAAO,UAAU;GAC1E,IAAI,OAAO,KAAK,UAAU,MAAM,KAAK;GACrC,OAAO,SAAS,GAAG;IACjB,IAAI,SAAS,aAAa;KACxB,MAAM,UAAU,KAAK,UAAU,IAAI;KACnC,KAAK,aAAa,uBAAuB,OAAO;IAClD,OAAO,IAAI,SAAS,OAAO;KACzB,KAAK,cAAc,IAAI;KACvB,KAAK,aAAa,MAAM,IAAI;IAC9B,OACE,KAAK,aAAa,yBAAyB,KAAK,SAAS,EAAE,CAAC;IAE9D,OAAO,KAAK,UAAU,MAAM,KAAK;GACnC;EACF;EACA,KAAK,aAAa,YAAY,KAAK,OAAO,SAAS,SAAS;CAC9D;;;;;;;;CAQA,aAAa,MAAM,MAAM;EACvB,MAAM,QAAQ,KAAK,UAAU,IAAI;EACjC,IAAI,OAAO,KAAK,UAAU,MAAM,KAAK;EACrC,OAAO,SAAS,GAAG;GACjB,IAAI,SAAS,cAAc;IACzB,MAAM,UAAU,CAAC,KAAK,UAAU,IAAI;IACpC,KAAK,aAAa,mBAAmB,OAAO;GAC9C,OAAO,IAAI,SAAS,cAAc;IAChC,MAAM,QAAQ,KAAK,UAAU,IAAI;IACjC,KAAK,aAAa,mBAAmB,KAAK;IAC1C,KAAK,MAAM,MAAM,IAAI,OAAO,OAAO,KAAK;GAC1C,OAAO,IAAI,SAAS,cAAc;IAChC,KAAK,aAAa,cAAc;IAChC,KAAK,cAAc,IAAI;IACvB,KAAK,gBAAgB,IAAI;GAC3B,OAAO,IAAI,SAAS,WAAW;IAC7B,KAAK,aAAa,UAAU;IAC5B,KAAK,cAAc,IAAI;IACvB,KAAK,kBAAkB,MAAM,IAAI;GACnC,OACE,KAAK,aAAa,0BAA0B,KAAK,SAAS,EAAE,CAAC;GAE/D,OAAO,KAAK,UAAU,MAAM,KAAK;EACnC;CACF;;;;;;;CAOA,gBAAgB,MAAM;EACpB,MAAM,QAAQ,KAAK,UAAU,IAAI;EACjC,MAAM,OAAO,KAAK,WAAW,MAAM,EAAE;EACrC,MAAM,MAAM,KAAK;EACjB,IAAI,OAAO,KAAK,UAAU,MAAM,KAAK;EACrC,OAAO,SAAS,GAAG;GACjB,IAAI,SAAS,cAAc;IACzB,KAAK,cAAc,IAAI;IACvB,MAAM,OAAO,KAAK,SAAS,IAAI;IAC/B,KAAK,OAAO;IACZ,KAAK,OAAO,KAAK,IAAI;GACvB,OACE,KAAK,aAAa,iCAAiC,KAAK,SAAS,EAAE,CAAC;GAEtE,OAAO,KAAK,UAAU,MAAM,KAAK;EACnC;EACA,KAAK,SAAS,KAAK;CACrB;;;;;;;;CAQA,kBAAkB,MAAM,MAAM;EAC5B,MAAM,QAAQ,KAAK,UAAU,IAAI;EACjC,IAAI,OAAO,KAAK,UAAU,MAAM,KAAK;EACrC,MAAM,WAAW,IAAI,kBAAkB;EACvC,OAAO,SAAS,GAAG;GACjB,IAAI,SAAS,UAAU;IACrB,SAAS,OAAO,KAAK,WAAW,MAAM,EAAE;IACxC,KAAK,aAAa,cAAc,SAAS,IAAI;GAC/C,OAAO,IAAI,SAAS,UAAU;IAC5B,KAAK,aAAa,cAAc;IAChC,SAAS,YAAY;GACvB,OAAO,IAAI,SAAS,eAAe;IACjC,MAAM,QAAQ,KAAK,SAAS,IAAI;IAChC,SAAS,qBAAqB;IAC9B,KAAK,aAAa,6BAA6B,KAAK;GACtD,OAAO,IAAI,SAAS,cAAc;IAChC,SAAS,OAAA;IACT,KAAK,aAAa,gBAAgB;GACpC,OAAO,IAAI,SAAS,cAAc;IAChC,KAAK,aAAa,sBAAsB;IACxC,SAAS,WAAA;GACX,OAAO,IAAI,SAAS,aAAa;IAC/B,KAAK,aAAa,kBAAkB;IACpC,SAAS,QAAQ,KAAK,UAAU,IAAI;GACtC,OAAO,IAAI,SAAS,cAAc;IAChC,KAAK,aAAa,mBAAmB;IACrC,SAAS,WAAW,KAAK,UAAU,IAAI;GACzC,OAAO,IAAI,SAAS,aAAa;IAC/B,KAAK,aAAa,kBAAkB;IACpC,SAAS,QAAQ,KAAK,UAAU,IAAI;GACtC,OAAO,IAAI,SAAS,eAAe;IACjC,MAAM,YAAY,KAAK,eAAe,IAAI;IAC1C,SAAS,YAAY,YAAY;IACjC,KAAK,aAAa,oBAAoB,SAAS;GACjD,OAAO,IAAI,SAAS,kBAAkB;IACpC,MAAM,eAAe,KAAK,eAAe,IAAI;IAC7C,SAAS,UAAU,IAAI;IACvB,KAAK,aAAa,sBAAsB,YAAY;IACpD,SAAS,cAAc,SAAS,UAAU,IAAI,OAAO;GACvD,OAAO,IAAI,SAAS,YAAY;IAC9B,KAAK,aAAa,aAAa;IAC/B,KAAK,cAAc,IAAI;IACvB,SAAS,MAAM,KAAK,QAAQ,MAAM,IAAI;GACxC,OAAO,IAAI,SAAS,aAAa;IAC/B,KAAK,aAAa,YAAY;IAC9B,KAAK,cAAc,IAAI;IACvB,SAAS,UAAU,KAAK,QAAQ,MAAM,IAAI;GAC5C,OAAO,IAAI,SAAS,aAAa;IAC/B,KAAK,aAAa,eAAe;IACjC,KAAK,cAAc,IAAI;IACvB,SAAS,WAAW,KAAK,QAAQ,MAAM,IAAI;GAC7C,OAAO,IAAI,SAAS,aAAa;IAC/B,KAAK,aAAa,gBAAgB;IAClC,KAAK,cAAc,IAAI;IACvB,SAAS,cAAc,KAAK,QAAQ,MAAM,IAAI;GAChD,OACE,KAAK,aAAa,gCAAgC,KAAK,SAAS,EAAE,CAAC;GAErE,OAAO,KAAK,UAAU,MAAM,KAAK;EACnC;EACA,KAAK,SAAS,KAAK;EACnB,KAAK,UAAU,SAAS,QAAQ;CAClC;;;;;;;;CAQA,SAAS,MAAM;EACb,MAAM,QAAQ,KAAK,UAAU,IAAI;EACjC,IAAI,OAAO,KAAK,UAAU,MAAM,KAAK;EACrC,MAAM,WAAW,IAAI,eAAe;EAEpC,MAAM,OAAO,IAAI,KAAK,UAAU,IADX,kBACkB,CAAC;EACxC,KAAK,OAAO;EACZ,OAAO,SAAS,GAAG;GACjB,IAAI,SAAS,aAAa;IACxB,MAAM,SAAS,KAAK,SAAS,IAAI;IACjC,KAAK,aAAa,gBAAgB,MAAM;IACxC,MAAM,WAAW,CAAC;IAClB,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK;KAC/B,SAAS,KAAK,KAAK,UAAU,IAAI,CAAC;KAClC,SAAS,KAAK,KAAK,UAAU,IAAI,CAAC;KAClC,SAAS,KAAK,KAAK,UAAU,IAAI,CAAC;IACpC;IACA,SAAS,aAAa,YAAY,IAAI,uBAAuB,UAAU,CAAC,CAAC;GAC3E,OAAO,IAAI,SAAS,YAAY;IAC9B,KAAK,cAAc,IAAI;IACvB,KAAK,cAAc,MAAM,IAAI;GAC/B,OAAO,IAAI,SAAS,WAAW;IAC7B,MAAM,SAAS,KAAK,SAAS,IAAI;IACjC,KAAK,aAAa,YAAY,MAAM;IACpC,MAAM,MAAM,CAAC;IACb,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK;KAC/B,IAAI,KAAK,KAAK,UAAU,IAAI,CAAC;KAC7B,IAAI,KAAK,KAAK,UAAU,IAAI,CAAC;IAC/B;IACA,SAAS,aAAa,MAAM,IAAI,uBAAuB,KAAK,CAAC,CAAC;GAChE,OAAO,IAAI,SAAS,aAAa;IAC/B,KAAK,aAAa,gCAAgC;IAClD,MAAM,SAAS,CAAC;IAChB,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KACtB,OAAO,KAAK,KAAK,UAAU,IAAI;IAEjC,MAAM,SAAS,IAAI,QAAQ;IAC3B,OAAO,SAAS,KAAK,OAAO;IAC5B,OAAO,SAAS,KAAK,OAAO;IAC5B,OAAO,SAAS,KAAK,OAAO;IAC5B,OAAO,SAAS,KAAK,OAAO;IAC5B,OAAO,SAAS,KAAK,OAAO;IAC5B,OAAO,SAAS,KAAK,OAAO;IAC5B,OAAO,SAAS,KAAK,OAAO;IAC5B,OAAO,SAAS,KAAK,OAAO;IAC5B,OAAO,SAAS,KAAK,OAAO;IAC5B,OAAO,SAAS,KAAK,OAAO;IAC5B,OAAO,SAAS,MAAM,OAAO;IAC7B,OAAO,SAAS,MAAM,OAAO;IAC7B,OAAO,SAAS,MAAM;IACtB,OAAO,SAAS,MAAM;IACtB,OAAO,SAAS,MAAM;IACtB,OAAO,SAAS,MAAM;IACtB,OAAO,UAAU;IACjB,MAAM,UAAU,IAAI,QAAQ;IAC5B,QAAQ,KAAK,MAAM,EAAE,OAAO;IAC5B,SAAS,aAAa,OAAO;IAC7B,OAAO,UAAU,KAAK,UAAU,KAAK,YAAY,KAAK,KAAK;GAC7D,OACE,KAAK,aAAa,4BAA4B,KAAK,SAAS,EAAE,CAAC;GAEjE,OAAO,KAAK,UAAU,MAAM,KAAK;EACnC;EACA,KAAK,SAAS,KAAK;EACnB,SAAS,qBAAqB;EAC9B,OAAO;CACT;;;;;;;;CAQA,cAAc,MAAM,MAAM;EACxB,MAAM,QAAQ,KAAK,UAAU,IAAI;EACjC,MAAM,QAAQ,KAAK,SAAS,IAAI;EAChC,KAAK,aAAa,eAAe,KAAK;EACtC,MAAM,QAAQ,CAAC;EACf,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,EAAE,GAAG;GAC9B,MAAM,KAAK,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,IAAI,CAAC;GACxE,KAAK,SAAS,IAAI;EACpB;EACA,KAAK,SAAS,SAAS,KAAK;EAC5B,IAAI,gBAAgB;EACpB,IAAI,QAAQ;EACZ,OAAO,KAAK,WAAW,MAAM,KAAK;GAChC,MAAM,WAAW,KAAK,UAAU,IAAI;GACpC,IAAI,SAAS,OAAO,eAAe;IACjC,KAAK,aAAa,sBAAsB;IACxC,KAAK,cAAc,IAAI;IACvB,MAAM,QAAQ,KAAK,kBAAkB,IAAI;IACzC,MAAM,QAAQ,MAAM,MAAM,SAAS;IACnC,KAAK,SAAS,SAAS,OAAO,OAAO,aAAa;IAClD,SAAS;IACT;IACA,MAAM,WAAW,KAAK,UAAU,MAAM;IACtC,IAAI,MAAM,QAAQ,KAAK,QAAQ,MAAM,OACnC,KAAK,WAAW,CAAC;IACnB,IAAI,aAAa,KAAK,GACpB,KAAK,SAAS,KAAK,QAAQ;GAE/B,OACE,KAAK,aAAa,qCAAqC,SAAS,SAAS,EAAE,CAAC;GAE9E,KAAK,SAAS,QAAQ;EACxB;EACA,IAAI,KAAK,SAAS,WAAW,GAC3B,KAAK,WAAW,KAAK,SAAS;EAChC,KAAK,SAAS,KAAK;CACrB;;;;;;;;;CASA,QAAQ,MAAM,MAAM;EAClB,MAAM,QAAQ,KAAK,UAAU,IAAI;EACjC,IAAI,OAAO,KAAK,UAAU,MAAM,KAAK;EACrC,IAAI,UAAU,CAAC;EACf,MAAM,SAAS,IAAI,cAAc,KAAK,OAAO;EAC7C,OAAO,QAAQ,KAAK,gBAAgB,IAAI,EAAE,eAAe,KAAK,WAAW;EACzE,OAAO,SAAS,GAAG;GACjB,IAAI,SAAS,aAAa;IACxB,MAAM,OAAO,KAAK,WAAW,MAAM,GAAG;IACtC,UAAU,OAAO,KAAK,IAAI;IAC1B,KAAK,aAAa,iBAAiB,OAAO,IAAI;GAChD,OAAO,IAAI,SAAS,iBAAiB;IACnC,QAAQ,OAAO,IAAI,KAAK,UAAU,IAAI;IACtC,KAAK,aAAa,oBAAoB,QAAQ,OAAO,CAAC;GACxD,OAAO,IAAI,SAAS,iBAAiB;IACnC,QAAQ,OAAO,IAAI,KAAK,UAAU,IAAI;IACtC,KAAK,aAAa,oBAAoB,QAAQ,OAAO,CAAC;GACxD,OAAO,IAAI,SAAS,gBAAgB;IAClC,QAAQ,OAAO,IAAI,KAAK,UAAU,IAAI;IACtC,KAAK,aAAa,oBAAoB,QAAQ,OAAO,CAAC;GACxD,OAAO,IAAI,SAAS,gBAAgB;IAClC,QAAQ,OAAO,IAAI,KAAK,UAAU,IAAI;IACtC,KAAK,aAAa,oBAAoB,QAAQ,OAAO,CAAC;GACxD,OACE,KAAK,aAAa,8BAA8B,KAAK,SAAS,EAAE,CAAC;GAEnE,OAAO,KAAK,UAAU,MAAM,KAAK;EACnC;EACA,KAAK,SAAS,KAAK;EACnB,OAAO;CACT;;;;;;;;CAQA,kBAAkB,MAAM;EACtB,KAAK,UAAU,IAAI;EACnB,MAAM,OAAO,KAAK,WAAW,MAAM,EAAE;EACrC,MAAM,WAAW,KAAK,SAAS,IAAI;EACnC,KAAK,aAAa,oBAAoB,IAAI;EAC1C,KAAK,aAAa,qBAAqB,QAAQ;EAC/C,MAAM,QAAQ,CAAC;EACf,KAAK,IAAI,IAAI,GAAG,IAAI,UAAU,EAAE,GAC9B,MAAM,KAAK,KAAK,SAAS,IAAI,CAAC;EAEhC,OAAO;GAAE;GAAM;EAAM;CACvB;;;;;;;;CAQA,UAAU,MAAM;EACd,MAAM,QAAQ,KAAK,UAAU,IAAI;EACjC,MAAM,QAAQ,IAAI,MAAM;EACxB,IAAI,MAAM,OAAO,YAAY,MAAM,OAAO,cAAc;GACtD,MAAM,IAAI,KAAK,SAAS,IAAI;GAC5B,MAAM,IAAI,KAAK,SAAS,IAAI;GAC5B,MAAM,IAAI,KAAK,SAAS,IAAI;GAC5B,MAAM,OAAO,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG;GACtC,KAAK,aAAa,kBAAkB,MAAM,IAAI,OAAO,MAAM,IAAI,OAAO,MAAM,CAAC;EAC/E,OAAO,IAAI,MAAM,OAAO,WAAW,MAAM,OAAO,aAAa;GAC3D,MAAM,IAAI,KAAK,UAAU,IAAI;GAC7B,MAAM,IAAI,KAAK,UAAU,IAAI;GAC7B,MAAM,IAAI,KAAK,UAAU,IAAI;GAC7B,MAAM,OAAO,GAAG,GAAG,CAAC;GACpB,KAAK,aAAa,kBAAkB,MAAM,IAAI,OAAO,MAAM,IAAI,OAAO,MAAM,CAAC;EAC/E,OACE,KAAK,aAAa,gCAAgC,MAAM,SAAS,EAAE,CAAC;EAEtE,KAAK,SAAS,KAAK;EACnB,OAAO;CACT;;;;;;;;CAQA,UAAU,MAAM;EACd,MAAM,QAAQ,CAAC;EACf,MAAM,MAAM,KAAK;EACjB,MAAM,KAAK,KAAK,SAAS,IAAI;EAC7B,MAAM,OAAO,KAAK,UAAU,IAAI;EAChC,MAAM,MAAM,MAAM,MAAM,MAAM;EAC9B,MAAM,OAAO;EACb,OAAO;CACT;;;;;;;CAOA,SAAS,OAAO;EACd,KAAK,WAAW,MAAM;CACxB;;;;;;;;CAQA,UAAU,MAAM,OAAO;EACrB,IAAI,MAAM,OAAO,MAAM,KACrB,OAAO;EAET,KAAK,WAAW,MAAM;EACtB,IAAI;GACF,MAAM,OAAO,KAAK,UAAU,IAAI;GAChC,MAAM,OAAO,KAAK;GAClB,OAAO,KAAK;EACd,SAAS,GAAG;GACV,KAAK,aAAa,6BAA6B,KAAK,QAAQ;GAC5D,OAAO;EACT;CACF;;;;;;CAMA,gBAAgB;EACd,KAAK,YAAY;CACnB;;;;;;;;CAQA,SAAS,MAAM;EACb,MAAM,IAAI,KAAK,SAAS,KAAK,UAAU,IAAI;EAC3C,KAAK,YAAY;EACjB,OAAO;CACT;;;;;;;;CAQA,UAAU,MAAM;EACd,IAAI;GACF,MAAM,IAAI,KAAK,WAAW,KAAK,UAAU,IAAI;GAC7C,KAAK,YAAY;GACjB,OAAO;EACT,SAAS,GAAG;GACV,KAAK,aAAa,IAAI,MAAM,KAAK,WAAW,MAAM,KAAK,UAAU;EACnE;CACF;;;;;;;;CAQA,QAAQ,MAAM;EACZ,MAAM,IAAI,KAAK,SAAS,KAAK,UAAU,IAAI;EAC3C,KAAK,YAAY;EACjB,OAAO;CACT;;;;;;;;CAQA,UAAU,MAAM;EACd,MAAM,IAAI,KAAK,SAAS,KAAK,UAAU,IAAI;EAC3C,KAAK,YAAY;EACjB,OAAO;CACT;;;;;;;;CAQA,UAAU,MAAM;EACd,MAAM,IAAI,KAAK,UAAU,KAAK,UAAU,IAAI;EAC5C,KAAK,YAAY;EACjB,OAAO;CACT;;;;;;;;CAQA,SAAS,MAAM;EACb,MAAM,IAAI,KAAK,UAAU,KAAK,UAAU,IAAI;EAC5C,KAAK,YAAY;EACjB,OAAO;CACT;;;;;;;;;CASA,WAAW,MAAM,WAAW;EAC1B,IAAI,IAAI;EACR,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,KAAK;GAClC,MAAM,IAAI,KAAK,SAAS,IAAI;GAC5B,IAAI,CAAC,GACH;GAEF,KAAK,OAAO,aAAa,CAAC;EAC5B;EACA,OAAO;CACT;;;;;;;;CAQA,eAAe,MAAM;EACnB,MAAM,QAAQ,KAAK,UAAU,IAAI;EACjC,IAAI;EACJ,QAAQ,MAAM,IAAd;GACE,KAAK;IACH,QAAQ,KAAK,UAAU,IAAI,IAAI;IAC/B;GACF,KAAK;IACH,QAAQ,KAAK,UAAU,IAAI;IAC3B;GACF,SACE,KAAK,aAAa,qCAAqC,MAAM,SAAS,EAAE,CAAC;EAC7E;EACA,KAAK,SAAS,KAAK;EACnB,OAAO;CACT;;;;;;;;;CASA,aAAa,SAAS;EACpB,IAAI,KAAK,OACP,QAAQ,IAAI,OAAO;CAEvB;AACF;AACA,IAAM,WAAW;AACjB,IAAM,YAAY;AAClB,IAAM,SAAS;AACf,IAAM,cAAc;AACpB,IAAM,UAAU;AAChB,IAAM,WAAW;AACjB,IAAM,eAAe;AACrB,IAAM,cAAc;AACpB,IAAM,iBAAiB;AACvB,IAAM,mBAAmB;AACzB,IAAM,QAAQ;AACd,IAAM,eAAe;AACrB,IAAM,eAAe;AACrB,IAAM,YAAY;AAClB,IAAM,WAAW;AACjB,IAAM,cAAc;AACpB,IAAM,cAAc;AACpB,IAAM,eAAe;AACrB,IAAM,gBAAgB;AACtB,IAAM,mBAAmB;AACzB,IAAM,eAAe;AACrB,IAAM,eAAe;AACrB,IAAM,WAAW;AACjB,IAAM,gBAAgB;AACtB,IAAM,aAAa;AACnB,IAAM,cAAc;AACpB,IAAM,cAAc;AACpB,IAAM,cAAc;AACpB,IAAM,cAAc;AACpB,IAAM,iBAAiB;AACvB,IAAM,iBAAiB;AACvB,IAAM,kBAAkB;AACxB,IAAM,kBAAkB;AACxB,IAAM,eAAe;AACrB,IAAM,eAAe;AACrB,IAAM,cAAc;AACpB,IAAM,aAAa;AACnB,IAAM,gBAAgB;AACtB,IAAM,YAAY;AAClB,IAAM,cAAc;;;ACpoBpB,IAAM,sBAAsB;AAC5B,IAAM,qBAAqB;AAC3B,IAAM,0BAA0B;AAChC,IAAM,qBAAqB;AAC3B,IAAM,6BAA6B;AACnC,IAAM,oBAAoB;AAC1B,IAAM,sBAAsB;AAC5B,IAAM,0BAA0B;AAChC,IAAM,sBAAsB;AAC5B,IAAM,2BAA2B;AACjC,IAAM,6BAA6B;AACnC,IAAM,6BAA6B;AACnC,IAAM,0BAA0B;AAChC,IAAM,mBAAmB;AACzB,IAAM,wBAAwB;AAC9B,IAAM,4BAA4B,IAAI,QAAQ;AAC9C,IAAM,4BAA4B,IAAI,QAAQ;AAC9C,IAAM,+BAAN,cAA2C,eAAe;CACxD,YAAY,YAAY;EACtB,MAAM;GACJ,UAAU,cAAc,MAAM,CAC5B,YAAY,KACZ;IACE,SAAS,EACP,OAAO,IAAI,MAAM,EACnB;IACA,SAAS,EACP,OAAO,EACT;GACF,CACF,CAAC;GACD,cAEE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAiDF,gBAEE;;;;;;;;;;;;;;;;;;;;;;sBAsBc,WAAW,MAAM,wBAAwB,qBAAqB;;;;;EAMhF,CAAC;EACD,OAAO,iBAAiB,MAAM;GAC5B,SAAS;IACP,KAAK,WAAW;KACd,OAAO,KAAK,SAAS,QAAQ;IAC/B;IACA,KAAK,SAAS,OAAO;KACnB,KAAK,SAAS,QAAQ,QAAQ;IAChC;GACF;GACA,OAAO,EACL,KAAK,WAAW;IACd,OAAO,KAAK,SAAS,QAAQ;GAC/B,EACF;EACF,CAAC;EACD,KAAK,UAAU,UAAU;EACzB,KAAK,iCAAiC;CACxC;AACF;AACA,IAAM,0BAAN,cAAsC,aAAa;CACjD,YAAY,UAAU,UAAU;EAC9B,MAAM,UAAU,QAAQ;EACxB,KAAK,oBAAoB;CAC3B;AACF;AACA,SAAS,oBAAoB,OAAO;CAClC,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;EAC5C,MAAM,OAAO,MAAM;EACnB,MAAM,WAAW,KAAK;EACtB,MAAM,KAAK,SAAS;EACpB,MAAM,KAAK,SAAS;EACpB,MAAM,KAAK,SAAS;EACpB,UAAU,WAAW,IAAI,EAAE;EAC3B,UAAU,WAAW,IAAI,EAAE;EAC3B,KAAK,aAAa,IAAI,QAAQ,EAAE,aAAa,WAAW,SAAS,EAAE,UAAU;CAC/E;AACF;AACA,IAAMC,yBAAuB,IAAI,IAAI;AACrC,SAAS,cAAc,OAAO,cAAc,mBAAmB,OAAO;CACpE,MAAM,iBAAkB,eAAa;CACrC,SAAS,WAAW,GAAG;EAIrB,OAAO,GAAG,CAHC,EAAE,EAAE,IAAI,gBAGP,GAAG,CAFJ,EAAE,EAAE,IAAI,gBAEF,GAAG,CADT,EAAE,EAAE,IAAI;CAErB;CACA,SAAS,SAAS,IAAI,IAAI;EACxB,OAAO,GAAG,WAAW,EAAE,EAAE,GAAG,WAAW,EAAE;CAC3C;CACA,SAAS,gBAAgB,IAAI,IAAI,WAAW;EAC1C,UAAU,UAAU,WAAW,IAAI,EAAE,EAAE,UAAU;EACjD,MAAM,SAAS,GAAG,IAAI,UAAU,SAAS;EACzC,UAAU,OAAO,KAAK,EAAE,EAAE,gBAAgB,UAAU,WAAW,CAAC,MAAM;EACtE,OAAO;CACT;CACA,SAAS,QAAQ,KAAK;EACpB,OAAO,SAAS,IAAI,QAAQ,IAAI,SAAS;CAC3C;CACA,MAAM,4BAA4B,IAAI,IAAI;CAC1C,MAAM,+BAA+B,IAAI,IAAI;CAC7C,MAAM,eAAe,CAAC;CACtB,MAAM,UAAU,CAAC;CACjB,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,IAAI,GAAG,KAAK;EAEnD,MAAM,WADK,aAAa,GACJ;EACpB,MAAM,KAAK,SAAS;EACpB,MAAM,KAAK,SAAS;EACpB,UAAU,IAAI,SAAS,IAAI,EAAE,CAAC;EAC9B,UAAU,IAAI,SAAS,IAAI,EAAE,CAAC;EAC9B,IAAI,kBAAkB;GACpB,MAAM,MAAM,gBAAgB,IAAI,IAAI,IAAI,IAAI,CAAC;GAC7C,MAAM,MAAM,QAAQ,GAAG;GACvB,IAAI,CAAC,aAAa,IAAI,GAAG,GAAG;IAC1B,gBAAgB,IAAI,IAAI,GAAG;IAC3B,MAAM,MAAM,QAAQ,GAAG;IACvB,MAAM,QAAQ;KACZ;KACA,WAAW,CAAC;IACd;IACA,aAAa,IAAI,KAAK,KAAK;IAC3B,aAAa,IAAI,KAAK,KAAK;GAC7B;GACA,MAAM,OAAO,aAAa,IAAI,GAAG;GACjC,IAAI,KAAK,KAAK,IAAI,UAAU,IAAI,EAAE;GAClC,IAAI,KAAK,KAAK,IAAI,UAAU,IAAI,EAAE;GAClC,IAAI,KAAK,IACP,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE;GAEpB,KAAK,UAAU,KAAK,IAAI,EAAE;EAC5B;CACF;CACA,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;EAC5C,MAAM,MAAM,MAAM;EAClB,MAAM,WAAW,IAAI;EACrB,MAAM,YAAY,SAAS;EAC3B,KAAK,IAAI,KAAK,GAAG,KAAK,WAAW,MAAM;GACrC,MAAM,QAAQ;GACd,MAAM,QAAQ,KAAK,KAAK;GACxB,MAAM,KAAK,SAAS;GACpB,MAAM,KAAK,SAAS;GACpB,MAAM,OAAO,SAAS,IAAI,EAAE;GAC5B,IAAI,UAAU,IAAI,IAAI,GACpB;GAEF,IAAI,kBAAkB;IACpB,gBAAgB,IAAI,IAAIA,MAAI;IAC5B,MAAM,UAAU,QAAQA,MAAI;IAC5B,IAAI,aAAa,IAAI,OAAO,GAAG;KAE7B,MAAM,EAAE,KAAK,cADC,aAAa,IAAI,OACA;KAC/B,IAAI,KAAK,IAAI,UAAU,IAAI,EAAE;KAC7B,IAAI,KAAK,IAAI,UAAU,IAAI,EAAE;KAC7B,IAAI,KAAK,IACP,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE;KAEpB,IAAI,QAAQ;KACZ,KAAK,IAAI,KAAK,GAAG,KAAK,UAAU,QAAQ,KAAK,IAAI,MAAM,GACrD,IAAI,MAAM,UAAU,OAAO,MAAM,UAAU,KAAK,IAAI;MAClD,QAAQ;MACR;KACF;KAEF,IAAI,OACF;IAEJ;GACF;GAKA,aAAa,QAAQ;IAHnB;IACA;GAEsB;EAC1B;CACF;CACA,OAAO,MAAM;EACX,IAAI,WAAW;EACf,KAAK,MAAM,OAAO,cAAc;GAC9B,WAAW,aAAa;GACxB;EACF;EACA,IAAI,aAAa,MACf;EAEF,MAAM,QAAQ,CAAC,QAAQ;EACvB,OAAO,MAAM,SAAS,GAAG;GACvB,MAAM,MAAM,MAAM,IAAI,EAAE;GACxB,MAAM,WAAW,IAAI;GACrB,MAAM,cAAc,IAAI;GACxB,MAAM,aAAa,IAAI;GACvB,MAAM,YAAY,SAAS;GAC3B,KAAK,IAAI,KAAK,GAAG,KAAK,WAAW,MAAM;IACrC,MAAM,QAAQ;IACd,MAAM,QAAQ,KAAK,KAAK;IACxB,MAAM,KAAK,SAAS;IACpB,MAAM,KAAK,SAAS;IACpB,MAAM,OAAO,SAAS,IAAI,EAAE;IAC5B,OAAO,aAAa;IACpB,MAAM,cAAc,SAAS,IAAI,EAAE;IACnC,MAAM,YAAY,aAAa;IAC/B,IAAI,WAAW;KACb,MAAM,WAAW,UAAU;KAC3B,MAAM,aAAa,UAAU;KAC7B,MAAM,eAAe,SAAS;KAC9B,MAAM,iBAAiB,aAAa;KACpC,MAAM,kBAAkB,SAAS;KACjC,IAAI,KAAK,IAAI,SAAS,WAAW,IAAI,IAAI,UAAU,CAAC,IAAI,KACtD;KAEF,IAAI,eAAe,cAAc;MAC/B,MAAM,KAAK,SAAS;MACpB,OAAO,aAAa;KACtB;KACA,MAAM,aAAa,aAAa,KAAK;KACrC,IAAI,YAAY,UAAU,aAAa,cAAc,YAAY,WAAW,aAAa,YAAY;MACnG,aAAa,WAAW,KAAK,IAAI,YAAY,OAAO,IAAI;MACxD,YAAY,OAAO,OAAO,aAAa,WAAW;KACpD;KACA,IAAI,gBAAgB,YAAY,UAAU,aAAa;KACvD,IAAI,kBAAkB,MAAM;MAC1B,gBAAgB,EAAE,MAAM,IAAI,QAAQ,EAAE;MACtC,QAAQ,KAAK,cAAc,IAAI;KACjC;KACA,IAAI,YAAY,WAAW,MAAM;MAC/B,YAAY,SAAS;MACrB,cAAc,KAAK,IAAI,UAAU;KACnC;KACA,IAAI,aAAa,eAAe,MAAM;MACpC,aAAa,aAAa;MAC1B,cAAc,KAAK,IAAI,eAAe;KACxC;KACA,IAAI,YAAY,SAAS,aAAa,eAAe,YAAY,UAAU,aAAa,aAAa;MACnG,aAAa,YAAY,KAAK,IAAI,YAAY,MAAM,IAAI;MACxD,YAAY,MAAM,OAAO,aAAa,YAAY;KACpD;KACA,IAAI,gBAAgB,YAAY,SAAS,aAAa;KACtD,IAAI,kBAAkB,MAAM;MAC1B,gBAAgB,EAAE,MAAM,IAAI,QAAQ,EAAE;MACtC,QAAQ,KAAK,cAAc,IAAI;KACjC;KACA,IAAI,YAAY,UAAU,MAAM;MAC9B,YAAY,QAAQ;MACpB,cAAc,KAAK,IAAI,UAAU;KACnC;KACA,IAAI,aAAa,gBAAgB,MAAM;MACrC,aAAa,cAAc;MAC3B,cAAc,KAAK,IAAI,eAAe;KACxC;IACF;GACF;EACF;CACF;CACA,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,IAAI,GAAG,KACzC,QAAQ,GAAG,UAAU;AAEzB;AACA,SAAS,WAAW,MAAM;CACxB,OAAO,SAAS,UAAU,SAAS;AACrC;AACA,SAAS,gBAAgB,MAAM;CAC7B,OAAO,aAAa,KAAK,IAAI,KAAK,SAAS;AAC7C;AACA,IAAM,aAAN,MAAiB;CACf,YAAY,MAAM,YAAY;EAC5B,KAAK,OAAO;EACZ,KAAK,aAAa,KAAK;EACvB,KAAK,mBAAmB;EACxB,KAAK,cAAc;EACnB,KAAK,aAAa;CACpB;CACA,eAAe;EACb,OAAO,KAAK,mBAAmB,KAAK,YAAY;GAC9C,KAAK,cAAc,KAAK,KAAK,OAAO,KAAK,gBAAgB;GACzD,IAAI,KAAK,gBAAgB,OAAO,KAAK,gBAAgB,KACnD;GAEF,KAAK;EACP;CACF;CACA,WAAW;EACT,MAAM,OAAO,KAAK;EAClB,OAAO,KAAK,mBAAmB,KAAK,YAAY;GAC9C,KAAK,cAAc,KAAK,KAAK,OAAO,KAAK,gBAAgB;GACzD,IAAI,KAAK,gBAAgB,OAAO,KAAK,gBAAgB,KACnD;GAEF,KAAK;EACP;EACA,MAAM,OAAO,KAAK;EAClB,KAAK,aAAa;EAClB,OAAO,KAAK,KAAK,UAAU,MAAM,IAAI;CACvC;CACA,YAAY;EACV,OAAO,IAAI,QAAQ,WAAW,KAAK,SAAS,CAAC,GAAG,WAAW,KAAK,SAAS,CAAC,GAAG,WAAW,KAAK,SAAS,CAAC,CAAC;CAC1G;CACA,qBAAqB;EACnB,OAAO,KAAK,KAAK,UAAU,KAAK,kBAAkB,KAAK,UAAU;CACnE;CACA,aAAa;EACX,OAAO,KAAK,oBAAoB,KAAK;CACvC;CACA,WAAW;EACT,KAAK,mBAAmB,KAAK;CAC/B;CACA,sBAAsB;EACpB,OAAO,KAAK,cAAc,IAAI,cAAc,KAAK,aAAa;CAChE;AACF;AACA,IAAM,mBAAN,MAAuB;CACrB,YAAY,QAAQ;EAClB,KAAK,SAAS;EACd,KAAK,SAAS,CAAC;CACjB;CACA,YAAY,UAAU;EACpB,MAAM,SAAS,CAAC;EAChB,OAAO,QAAQ,SAAS,MAAM,KAAK,SAAS;GAC1C,OAAO;IACL,WAAW,KAAK;IAChB,UAAU,KAAK;IACf,UAAU,KAAK,SAAS,KAAK,MAAM,EAAE,MAAM,CAAC;IAC5C,SAAS,KAAK,QAAQ,UAAU,IAAI;IACpC,YAAY;GACd;EACF,CAAC;EACD,OAAO,sBAAsB,SAAS,oBAAoB,KAAK,SAAS;GACtE,OAAO;IACL,WAAW,KAAK;IAChB,UAAU,KAAK;IACf,UAAU,KAAK,SAAS,KAAK,MAAM,EAAE,MAAM,CAAC;IAC5C,eAAe,KAAK,cAAc,KAAK,MAAM,EAAE,MAAM,CAAC;GACxD;EACF,CAAC;EACD,OAAO,eAAe,SAAS,aAAa,KAAK,SAAS;GACxD,OAAO;IACL,WAAW,KAAK;IAChB,UAAU,KAAK;IACf,UAAU,KAAK,SAAS,KAAK,MAAM,EAAE,MAAM,CAAC;GAC9C;EACF,CAAC;EACD,OAAO,OAAO,SAAS;EACvB,OAAO,WAAW,SAAS;EAC3B,OAAO,WAAW,SAAS;EAC3B,OAAO,aAAa,SAAS;EAC7B,OAAO,aAAa,SAAS;EAC7B,OAAO,2BAA2B,SAAS;EAC3C,OAAO,YAAY,SAAS;EAC5B,OAAO,QAAQ;EACf,OAAO;CACT;CACA,MAAM,UAAU,UAAU;EACxB,IAAI,iBAAiB;EACrB,IAAI,gBAAgB;EACpB,OAAO,kBAAkB,yBAAyB;GAChD,IAAI,eAAe;GACnB,QAAQ,eAAR;IACE,KAAK;KACH,gBAAgB,gBAAgB;KAChC;IACF,KAAK;KACH,eAAe,WAAW;KAC1B,gBAAgB,gBAAgB;KAChC;IACF,KAAK;KACH,eAAe,OAAO;KACtB,gBAAgB,gBAAgB;KAChC;IACF,KAAK;KACH,eAAe,YAAY;KAC3B,gBAAgB,gBAAgB;KAChC;IACF,KAAK;KACH,eAAe,SAAS,UAAU,GAAG,SAAS,YAAY,GAAG,IAAI,CAAC,IAAI;KACtE,gBAAgB,gBAAgB;KAChC;IACF,KAAK;KACH,IAAI,gBACF,gBAAgB;UACX;MACL,WAAW,SAAS,YAAY;MAChC,eAAe;MACf,iBAAiB;MACjB,gBAAgB;KAClB;KACA;GACJ;GACA,MAAM,SAAS,KAAK;GACpB,MAAM,aAAa,IAAI,WAAW,OAAO,OAAO;GAChD,WAAW,QAAQ,OAAO,gBAAgB;GAC1C,WAAW,iBAAiB,OAAO,aAAa;GAChD,WAAW,mBAAmB,OAAO,eAAe;GACpD,IAAI;IAEF,OAAO,MADY,WAAW,UAAU,YAAY;GAEtD,SAAS,GAAG;IACV;GACF;EACF;EACA,MAAM,IAAI,MAAM,8BAA6B,WAAW,yBAAwB;CAClF;CACA,MAAM,MAAM,WAAW,MAAM;EAC3B,MAAM,SAAS,KAAK;EACpB,MAAM,QAAQ,CAAC;EACf,MAAM,eAAe,CAAC;EACtB,MAAM,sBAAsB,CAAC;EAC7B,MAAM,aAAa,CAAC;EACpB,MAAM,YAAY,CAAC;EACnB,MAAM,oBAAoB,cAAc;GACtC,OAAO,UAAU,cAAc;EACjC;EACA,IAAI,OAAO;EACX,IAAI,WAAW;EACf,IAAI,WAAW;EACf,IAAI,aAAa;EACjB,IAAI,KAAK,QAAQ,MAAM,MAAM,IAC3B,OAAO,KAAK,QAAQ,SAAS,IAAI;EAEnC,MAAM,QAAQ,KAAK,MAAM,IAAI;EAC7B,MAAM,WAAW,MAAM;EACvB,IAAI,uBAAuB;EAC3B,IAAI,0BAA0B;EAC9B,IAAI,sBAAsB;EAC1B,IAAI,eAAe;EACnB,IAAI,SAAS;EACb,IAAI,cAAc;EAClB,IAAI,UAAU;EACd,IAAI,2BAA2B;EAC/B,KAAK,IAAI,YAAY,GAAG,YAAY,UAAU,aAAa;GACzD,MAAM,OAAO,MAAM;GACnB,IAAI,KAAK,WAAW,GAClB;GACF,IAAI,sBAAsB;IACxB,IAAI,KAAK,WAAW,SAAS,GAAG;KAC9B,KAAK,QAAQ,yBAAyB,mBAAmB;KACzD,0BAA0B,KAAK,UAAU,CAAC;KAC1C,sBAAsB;IACxB,OACE,uBAAuB,OAAO;IAEhC;GACF;GACA,MAAM,KAAK,IAAI,WAAW,MAAM,YAAY,CAAC;GAC7C,GAAG,aAAa;GAChB,IAAI,GAAG,WAAW,GAChB;GAEF,MAAM,WAAW,GAAG,SAAS;GAC7B,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;GACxB,QAAQ,UAAR;IACE,KAAK;KACH,MAAM,OAAO,GAAG,SAAS;KACzB,IAAI,MACF,QAAQ,MAAR;MACE,KAAK;OACH,OAAO,GAAG,SAAS;OACnB;MACF,KAAK;OACH,WAAW,OAAO,wBAAwB,EAAE;OAC5C,IAAI,UACF,UAAU,SAAS,SAAS,QAAQ;YAEpC,QAAQ,KAAK,wCAAwC,GAAG,oBAAoB,CAAC;OAE/E;MACF,KAAK;OACH,WAAW,GAAG,SAAS;OACvB;MACF,KAAK;OACH,MAAM,cAAc,GAAG,mBAAmB,EAAE,MAAM,GAAG;OACrD,IAAI,YAAY,SAAS,GAAG;QAC1B,IAAI,CAAC,UACH,WAAW,CAAC;QAEd,YAAY,QAAQ,SAAS,SAAS;SACpC,SAAS,KAAK,QAAQ,KAAK,CAAC;QAC9B,CAAC;OACH;OACA;MACF,KAAK;OACH,IAAI,YAAY,GAAG;QACjB,uBAAuB;QACvB,0BAA0B,GAAG,mBAAmB;QAChD,sBAAsB;QACtB,eAAe;QACf,SAAS;OACX;OACA;MACF,KAAK;OACH,OAAO,CAAC,GAAG,WAAW,GAAG;QACvB,MAAM,QAAQ,GAAG,SAAS;QAC1B,QAAQ,OAAR;SACE,KAAK;SACL,KAAK;UACH,eAAe,UAAU;UACzB,SAAS;UACT;SACF,KAAK;SACL,KAAK;UACH,SAAS,UAAU;UACnB;SACF,KAAK;UACH,cAAc;UACd;SACF,KAAK;SACL,KAAK;UACH,UAAU,UAAU;UACpB;SACF;UACE,QAAQ,KAAK,wCAAuC,QAAQ,gBAAe;UAC3E;QACJ;OACF;OACA;MACF,KAAK;OACH,2BAA2B;OAC3B;KACJ;KAEF;IACF,KAAK;KACH,YAAY,GAAG,SAAS;KACxB,WAAW,iBAAiB,SAAS;KACrC,MAAM,OAAO,WAAW,GAAG,SAAS,CAAC;KACrC,MAAM,OAAO,WAAW,GAAG,SAAS,CAAC;KACrC,MAAM,OAAO,WAAW,GAAG,SAAS,CAAC;KACrC,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;KACnC,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;KACnC,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;KACnC,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;KACnC,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;KACnC,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;KACnC,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;KACnC,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;KACnC,MAAM,KAAK,WAAW,GAAG,SAAS,CAAC;KACnC,MAAM,SAAS,IAAI,QAAQ,EAAE,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,MAAM,GAAG,GAAG,GAAG,CAAC;KACjG,IAAI,YAAY,GAAG,mBAAmB,EAAE,KAAK,EAAE,QAAQ,OAAO,GAAG;KACjE,IAAI,OAAO,QAAQ,YACjB,YAAY,OAAO,QAAQ;UAE3B,IAAI,UAAU,WAAW,IAAI,GAC3B,YAAY,WAAW;UAClB,IAAI,UAAU,WAAW,KAAK,GACnC,YAAY,OAAO;KAGvB,WAAW,KAAK;MACd;MACA;MACA;MACA,UAAU;MACV,UAAU;MACV;KACF,CAAC;KACD,cAAc;KACd;IACF,KAAK;KACH,YAAY,GAAG,SAAS;KACxB,WAAW,iBAAiB,SAAS;KACrC,KAAK,GAAG,UAAU;KAClB,KAAK,GAAG,UAAU;KAClB,UAAU;MACR;MACA;MACA,UAAU,CAAC,IAAI,EAAE;KACnB;KACA,aAAa,KAAK,OAAO;KACzB;IACF,KAAK;KACH,YAAY,GAAG,SAAS;KACxB,WAAW,iBAAiB,SAAS;KACrC,KAAK,GAAG,UAAU;KAClB,KAAK,GAAG,UAAU;KAClB,KAAK,GAAG,UAAU;KAClB,KAAK,GAAG,UAAU;KAClB,UAAU;MACR;MACA;MACA,UAAU,CAAC,IAAI,EAAE;MACjB,eAAe,CAAC,IAAI,EAAE;KACxB;KACA,oBAAoB,KAAK,OAAO;KAChC;IACF,KAAK;KACH,YAAY,GAAG,SAAS;KACxB,WAAW,iBAAiB,SAAS;KACrC,MAAM;KACN,cAAc,CAAC,gBAAgB,CAAC;KAChC,IAAI,QAAQ,MAAM;MAChB,KAAK,GAAG,UAAU;MAClB,KAAK,GAAG,UAAU;MAClB,KAAK,GAAG,UAAU;KACpB,OAAO;MACL,KAAK,GAAG,UAAU;MAClB,KAAK,GAAG,UAAU;MAClB,KAAK,GAAG,UAAU;KACpB;KACA,MAAM,KAAK;MACT;MACA;MACA,YAAY;MACZ,UAAU;OAAC;OAAI;OAAI;MAAE;MACrB,SAAS;OAAC;OAAM;OAAM;MAAI;KAC5B,CAAC;KACD;KACA,IAAI,gBAAgB,MAAM;MACxB,MAAM,KAAK;OACT;OACA;OACA,YAAY;OACZ,UAAU;QAAC;QAAI;QAAI;OAAE;OACrB,SAAS;QAAC;QAAM;QAAM;OAAI;MAC5B,CAAC;MACD;KACF;KACA;IACF,KAAK;KACH,YAAY,GAAG,SAAS;KACxB,WAAW,iBAAiB,SAAS;KACrC,MAAM;KACN,cAAc,CAAC,gBAAgB,CAAC;KAChC,IAAI,QAAQ,MAAM;MAChB,KAAK,GAAG,UAAU;MAClB,KAAK,GAAG,UAAU;MAClB,KAAK,GAAG,UAAU;MAClB,KAAK,GAAG,UAAU;KACpB,OAAO;MACL,KAAK,GAAG,UAAU;MAClB,KAAK,GAAG,UAAU;MAClB,KAAK,GAAG,UAAU;MAClB,KAAK,GAAG,UAAU;KACpB;KACA,MAAM,KAAK;MACT;MACA;MACA,YAAY;MACZ,UAAU;OAAC;OAAI;OAAI;OAAI;MAAE;MACzB,SAAS;OAAC;OAAM;OAAM;OAAM;MAAI;KAClC,CAAC;KACD,cAAc;KACd,IAAI,gBAAgB,MAAM;MACxB,MAAM,KAAK;OACT;OACA;OACA,YAAY;OACZ,UAAU;QAAC;QAAI;QAAI;QAAI;OAAE;OACzB,SAAS;QAAC;QAAM;QAAM;QAAM;OAAI;MAClC,CAAC;MACD,cAAc;KAChB;KACA;IACF,SACE,MAAM,IAAI,MAAM,sCAAqC,WAAW,OAAM,GAAG,oBAAoB,IAAI,GAAG;GACxG;EACF;EACA,IAAI,sBACF,KAAK,QAAQ,yBAAyB,mBAAmB;EAE3D,OAAO;GACL;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA,OAAO;EACT;CACF;CAEA,QAAQ,UAAU,QAAQ,MAAM;EAC9B,MAAM,MAAM,SAAS,YAAY;EACjC,MAAM,SAAS,KAAK,OAAO;EAC3B,IAAI,WAAW,QAAQ,kBAAkB,SACvC,OAAO;EAET,IAAI,OACF,OAAO,KAAK,YAAY,MAAM;OAE9B,OAAO;CAEX;CAGA,MAAM,iBAAiB,UAAU;EAC/B,MAAM,MAAM,SAAS,YAAY;EACjC,IAAI,EAAE,OAAO,KAAK,SAChB,KAAK,OAAO,OAAO,KAAK,UAAU,QAAQ,EAAE,MAAM,SAAS;GACzD,MAAM,OAAO,KAAK,MAAM,MAAM,QAAQ;GACtC,KAAK,OAAO,OAAO;GACnB,OAAO;EACT,CAAC;EAEH,MAAM,KAAK,OAAO;CACpB;CAEA,QAAQ,UAAU,MAAM;EACtB,MAAM,MAAM,SAAS,YAAY;EACjC,KAAK,OAAO,OAAO,KAAK,MAAM,MAAM,QAAQ;CAC9C;AACF;AACA,SAAS,oBAAoB,WAAW,iBAAiB,mBAAmB,SAAS;CAEnF,IADsB,CAAC,WAAW,cAAc,oBAAoB,WAAW,cAAc,uBAE3F,YAAY;CAEd,OAAO,kBAAkB,cAAc;AACzC;AACA,IAAM,0BAAN,MAA8B;CAC5B,YAAY,QAAQ;EAClB,KAAK,SAAS;EACd,KAAK,aAAa,IAAI,iBAAiB,MAAM;EAC7C,KAAK,SAAS,CAAC;CACjB;CAEA,MAAM,gBAAgB,MAAM;EAC1B,MAAM,SAAS,KAAK;EACpB,MAAM,aAAa,KAAK;EACxB,MAAM,gCAAgC,IAAI,IAAI;EAC9C,MAAM,wBAAwB,OAAO,OAAO,YAAY,SAAS;GAC/D,MAAM,aAAa,MAAM;GACzB,MAAM,WAAW,CAAC;GAClB,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,IAAI,GAAG,KAAK;IACjD,MAAM,aAAa,WAAW;IAC9B,MAAM,UAAU,WAAW,iBAAiB,WAAW,QAAQ,EAAE,WAAW;KAE1E,IAAI,CAAC,gBADiB,WAAW,QAAQ,WAAW,UAAU,KAC7B,EAAE,IAAI,GACrC,OAAO,KAAK,UAAU,WAAW,QAAQ,EAAE,OAAO,UAAU;MAC1D,QAAQ,KAAK,KAAK;MAClB,OAAO;KACT,CAAC;KAEH,OAAO,sBAAsB,WAAW,QAAQ,WAAW,QAAQ,GAAG,UAAU;IAClF,CAAC;IACD,SAAS,KAAK,OAAO;GACvB;GACA,MAAM,SAAS,IAAI,MAAM;GACzB,OAAO,SAAS,WAAW,MAAM;GACjC,OAAO,SAAS,WAAW,MAAM;GACjC,MAAM,QAAQ;GACd,MAAM,iBAAiB,MAAM,QAAQ,IAAI,QAAQ;GACjD,KAAK,IAAI,IAAI,GAAG,IAAI,eAAe,QAAQ,IAAI,GAAG,KAAK;IACrD,MAAM,aAAa,MAAM,WAAW;IACpC,MAAM,gBAAgB,eAAe;IACrC,IAAI,kBAAkB,MACpB;IAEF,IAAI,cAAc,SAAS;KACzB,MAAM,iBAAiB;KACvB,WAAW,OAAO,UAAU,eAAe,UAAU,eAAe,YAAY,eAAe,KAAK;KACpG,eAAe,SAAS,2BAA2B,WAAW;KAC9D,eAAe,OAAO,WAAW;KACjC,OAAO,qBAAqB,gBAAgB,WAAW,WAAW,MAAM,SAAS;KACjF,OAAO,IAAI,cAAc;KACzB;IACF;IACA,IAAI,cAAc,MAAM,SAAS,QAC/B,OAAO,IAAI,cAAc,KAAK;IAEhC,MAAM,qBAAqB,MAAM;IACjC,MAAM,4BAA4B,MAAM;IACxC,MAAM,cAAc,MAAM;IAC1B,MAAM,eAAe,cAAc;IACnC,MAAM,sBAAsB,cAAc;IAC1C,MAAM,QAAQ,cAAc;IAC5B,MAAM,SAAS,WAAW;IAC1B,MAAM,WAAW,WAAW;IAC5B,MAAM,sBAAsB,OAAO,YAAY,IAAI;IACnD,MAAM,YAAY,WAAW;IAC7B,MAAM,gBAAgB,cAAc,mBAAmB,wBAAwB;IAC/E,KAAK,IAAI,KAAK,GAAG,KAAK,aAAa,QAAQ,KAAK,IAAI,MAAM;KACxD,MAAM,KAAK,aAAa;KACxB,MAAM,WAAW,GAAG;KACpB,SAAS,GAAG,aAAa,MAAM;KAC/B,SAAS,GAAG,aAAa,MAAM;KAC/B,GAAG,YAAY,GAAG,cAAc,wBAAwB,gBAAgB,GAAG;KAC3E,GAAG,WAAW,GAAG,YAAY,oBAAoB,GAAG,WAAW,GAAG,WAAW,MAAM,WAAW,IAAI;KAClG,mBAAmB,KAAK,EAAE;IAC5B;IACA,KAAK,IAAI,KAAK,GAAG,KAAK,oBAAoB,QAAQ,KAAK,IAAI,MAAM;KAC/D,MAAM,KAAK,oBAAoB;KAC/B,MAAM,WAAW,GAAG;KACpB,MAAM,gBAAgB,GAAG;KACzB,SAAS,GAAG,aAAa,MAAM;KAC/B,SAAS,GAAG,aAAa,MAAM;KAC/B,cAAc,GAAG,aAAa,MAAM;KACpC,cAAc,GAAG,aAAa,MAAM;KACpC,GAAG,YAAY,GAAG,cAAc,wBAAwB,gBAAgB,GAAG;KAC3E,GAAG,WAAW,GAAG,YAAY,oBAAoB,GAAG,WAAW,GAAG,WAAW,MAAM,WAAW,IAAI;KAClG,0BAA0B,KAAK,EAAE;IACnC;IACA,KAAK,IAAI,KAAK,GAAG,KAAK,MAAM,QAAQ,KAAK,IAAI,MAAM;KACjD,MAAM,MAAM,MAAM;KAClB,MAAM,WAAW,IAAI;KACrB,KAAK,IAAI,KAAK,GAAG,KAAK,SAAS,QAAQ,KAAK,IAAI,MAC9C,SAAS,IAAI,aAAa,MAAM;KAElC,IAAI,YAAY,IAAI,cAAc,mBAAmB,YAAY,IAAI;KACrE,IAAI,WAAW,IAAI,YAAY,oBAAoB,IAAI,WAAW,WAAW,MAAM,WAAW,KAAK;KACnG,cAAc,IAAI,IAAI,SAAS;KAC/B,IAAI,wBAAwB,UAC1B,SAAS,QAAQ;KAEnB,YAAY,KAAK,GAAG;IACtB;IACA,MAAM,cAAc,cAAc;GACpC;GACA,IAAI,WACF,OAAO,qBAAqB,QAAQ,UAAU,WAAW,MAAM,SAAS;GAE1E,OAAO;EACT;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,OAAO,IAAI,GAAG,KACrC,cAAc,IAAI,KAAK,MAAM,GAAG,SAAS;EAE3C,MAAM,sBAAsB,IAAI;EAChC,IAAI,OAAO,eAAe;GACxB,MAAM,mBAAmB,cAAc,OAAO;GAC9C,oBAAoB,KAAK,KAAK;GAC9B,cAAc,KAAK,OAAO,KAAK,cAAc,gBAAgB;EAC/D;EACA,MAAM,QAAQ,KAAK;EACnB,IAAI,KAAK,MAAM,SAAS,GACtB,MAAM,IAAI,aAAa,KAAK,OAAO,GAAG,OAAO,KAAK,UAAU,CAAC;EAE/D,IAAI,KAAK,aAAa,SAAS,GAC7B,MAAM,IAAI,aAAa,KAAK,cAAc,CAAC,CAAC;EAE9C,IAAI,KAAK,oBAAoB,SAAS,GACpC,MAAM,IAAI,aAAa,KAAK,qBAAqB,GAAG,IAAI,CAAC;EAE3D,OAAO;CACT;CACA,eAAe,UAAU;EACvB,OAAO,aAAa,QAAQ,SAAS,YAAY,KAAK,KAAK;CAC7D;CACA,MAAM,eAAe,UAAU;EAC7B,IAAI,aAAa,QAAQ,KAAK,eAAe,QAAQ,GAAG;GACtD,MAAM,MAAM,SAAS,YAAY;GAEjC,QAAO,MADa,KAAK,OAAO,MACnB,MAAM;EACrB,OACE,OAAO;CAEX;CAEA,MAAM,UAAU,UAAU;EACxB,MAAM,aAAa,KAAK;EACxB,MAAM,MAAM,SAAS,YAAY;EACjC,IAAI,KAAK,eAAe,QAAQ,GAC9B,OAAO,KAAK,eAAe,QAAQ;OAC9B;GACL,MAAM,WAAW,iBAAiB,QAAQ;GAC1C,MAAM,OAAO,WAAW,QAAQ,QAAQ;GACxC,MAAM,UAAU,KAAK,gBAAgB,IAAI;GACzC,IAAI,KAAK,eAAe,QAAQ,GAC9B,OAAO,KAAK,eAAe,QAAQ;GAErC,IAAI,WAAW,KAAK,IAAI,GACtB,KAAK,OAAO,OAAO;GAGrB,QAAO,MADa,SACP,MAAM;EACrB;CACF;CAEA,MAAM,WAAW,MAAM;EAErB,MAAM,OADa,KAAK,WACA,MAAM,IAAI;EAClC,IAAI,WAAW,KAAK,IAAI,KAAK,KAAK,eAAe,KAAK,QAAQ,GAC5D,OAAO,KAAK,eAAe,KAAK,QAAQ;EAE1C,OAAO,KAAK,gBAAgB,IAAI;CAClC;AACF;AACA,SAAS,eAAe,GAAG,GAAG;CAC5B,IAAI,EAAE,cAAc,EAAE,WACpB,OAAO;CAET,IAAI,EAAE,YAAY,EAAE,WAClB,OAAO;CAET,OAAO;AACT;AACA,SAAS,aAAa,UAAU,aAAa,wBAAwB,OAAO,gBAAgB,MAAM;CAChG,SAAS,KAAK,cAAc;CAC5B,IAAI,kBAAkB,MACpB,gBAAgB,SAAS;CAE3B,MAAM,YAAY,IAAI,aAAa,cAAc,gBAAgB,CAAC;CAClE,MAAM,UAAU,gBAAgB,IAAI,IAAI,aAAa,cAAc,gBAAgB,CAAC,IAAI;CACxF,MAAM,YAAY,CAAC;CACnB,MAAM,YAAY,IAAI,MAAM,CAAC;CAC7B,MAAM,iBAAiB,IAAI,eAAe;CAC1C,IAAI,eAAe;CACnB,IAAI,SAAS;CACb,IAAI,gBAAgB;CACpB,IAAI,SAAS;CACb,KAAK,IAAI,QAAQ,GAAG,QAAQ,SAAS,QAAQ,QAAQ,OAAO,SAAS;EACnE,MAAM,OAAO,SAAS;EACtB,IAAI,WAAW,KAAK;EACpB,IAAI,SAAS,WAAW,GAAG;GACzB,UAAU,KAAK,SAAS;GACxB,UAAU,KAAK,SAAS;GACxB,UAAU,KAAK,SAAS;GACxB,UAAU,KAAK,SAAS;GACxB,UAAU,KAAK,SAAS;GACxB,UAAU,KAAK,SAAS;GACxB,WAAW;EACb;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,IAAI,GAAG,KAAK;GAC/C,MAAM,IAAI,SAAS;GACnB,MAAM,QAAQ,SAAS,IAAI;GAC3B,UAAU,QAAQ,KAAK,EAAE;GACzB,UAAU,QAAQ,KAAK,EAAE;GACzB,UAAU,QAAQ,KAAK,EAAE;EAC3B;EACA,IAAI,gBAAgB,GAAG;GACrB,IAAI,CAAC,KAAK,YAAY;IACpB,MAAM,KAAK,SAAS;IACpB,MAAM,KAAK,SAAS;IACpB,MAAM,KAAK,SAAS;IACpB,UAAU,WAAW,IAAI,EAAE;IAC3B,UAAU,WAAW,IAAI,EAAE;IAC3B,KAAK,aAAa,IAAI,QAAQ,EAAE,aAAa,WAAW,SAAS,EAAE,UAAU;GAC/E;GACA,IAAI,cAAc,KAAK;GACvB,IAAI,YAAY,WAAW,GAAG;IAC5B,UAAU,KAAK,YAAY;IAC3B,UAAU,KAAK,YAAY;IAC3B,UAAU,KAAK,YAAY;IAC3B,UAAU,KAAK,YAAY;IAC3B,UAAU,KAAK,YAAY;IAC3B,UAAU,KAAK,YAAY;IAC3B,cAAc;GAChB;GACA,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,QAAQ,IAAI,GAAG,KAAK;IAClD,IAAI,IAAI,KAAK;IACb,IAAI,YAAY,IACd,IAAI,YAAY,GAAG;IAErB,MAAM,QAAQ,SAAS,IAAI;IAC3B,QAAQ,QAAQ,KAAK,EAAE;IACvB,QAAQ,QAAQ,KAAK,EAAE;IACvB,QAAQ,QAAQ,KAAK,EAAE;GACzB;EACF;EACA,IAAI,iBAAiB,KAAK,WAAW;GACnC,IAAI,iBAAiB,MACnB,eAAe,SAAS,QAAQ,eAAe,UAAU,SAAS,CAAC;GAErE,MAAM,WAAW,KAAK;GACtB,IAAI,aAAa;QACX,gBAAgB,GAClB,UAAU,KAAK,QAAQ;SAClB,IAAI,gBAAgB,GACzB,IAAI,aAAa,MACf,IAAI,uBACF,UAAU,KAAK,SAAS,SAAS,aAAa,SAAS,uBAAuB;SAE9E,UAAU,KAAK,SAAS,SAAS,YAAY;SAG/C,UAAU,KAAK,IAAI;GAAA,OAIvB,UAAU,KAAK,KAAK,SAAS;GAE/B,eAAe,KAAK;GACpB,SAAS,SAAS;GAClB,gBAAgB,SAAS;EAC3B,OACE,iBAAiB,SAAS;EAE5B,UAAU,IAAI,SAAS;CACzB;CACA,IAAI,gBAAgB,GAClB,eAAe,SAAS,QAAQ,UAAU,UAAU,SAAS,CAAC;CAEhE,eAAe,aAAa,YAAY,IAAI,gBAAgB,WAAW,CAAC,CAAC;CACzE,IAAI,YAAY,MACd,eAAe,aAAa,UAAU,IAAI,gBAAgB,SAAS,CAAC,CAAC;CAEvE,IAAI,WAAW;CACf,IAAI,gBAAgB,GAClB,IAAI,uBACF,WAAW,IAAI,wBAAwB,gBAAgB,UAAU,WAAW,IAAI,UAAU,KAAK,SAAS;MAExG,WAAW,IAAI,aAAa,gBAAgB,UAAU,WAAW,IAAI,UAAU,KAAK,SAAS;MAE1F,IAAI,gBAAgB,GACzB,WAAW,IAAI,KAAK,gBAAgB,UAAU,WAAW,IAAI,UAAU,KAAK,SAAS;CAEvF,IAAI,uBAAuB;EACzB,SAAS,oBAAoB;EAC7B,MAAM,gBAAgB,IAAI,aAAa,SAAS,SAAS,IAAI,CAAC;EAC9D,MAAM,gBAAgB,IAAI,aAAa,SAAS,SAAS,IAAI,CAAC;EAC9D,MAAM,iBAAiB,IAAI,aAAa,SAAS,SAAS,IAAI,CAAC;EAC/D,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,IAAI,GAAG,KAAK;GAC/C,MAAM,KAAK,SAAS;GACpB,MAAM,WAAW,GAAG;GACpB,MAAM,gBAAgB,GAAG;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,cAAc;GACzB,MAAM,KAAK,SAAS;GACpB,MAAM,KAAK,SAAS;GACpB,MAAM,QAAQ,IAAI,IAAI;GACtB,cAAc,QAAQ,KAAK,GAAG;GAC9B,cAAc,QAAQ,KAAK,GAAG;GAC9B,cAAc,QAAQ,KAAK,GAAG;GAC9B,cAAc,QAAQ,KAAK,GAAG;GAC9B,cAAc,QAAQ,KAAK,GAAG;GAC9B,cAAc,QAAQ,KAAK,GAAG;GAC9B,cAAc,QAAQ,KAAK,GAAG;GAC9B,cAAc,QAAQ,KAAK,GAAG;GAC9B,cAAc,QAAQ,KAAK,GAAG;GAC9B,cAAc,QAAQ,KAAK,GAAG;GAC9B,cAAc,QAAQ,KAAK,GAAG;GAC9B,cAAc,QAAQ,KAAK,GAAG;GAC9B,eAAe,QAAQ,KAAK,GAAG,IAAI,GAAG;GACtC,eAAe,QAAQ,KAAK,GAAG,IAAI,GAAG;GACtC,eAAe,QAAQ,KAAK,GAAG,IAAI,GAAG;GACtC,eAAe,QAAQ,KAAK,GAAG,IAAI,GAAG;GACtC,eAAe,QAAQ,KAAK,GAAG,IAAI,GAAG;GACtC,eAAe,QAAQ,KAAK,GAAG,IAAI,GAAG;EACxC;EACA,eAAe,aAAa,YAAY,IAAI,gBAAgB,eAAe,GAAG,KAAK,CAAC;EACpF,eAAe,aAAa,YAAY,IAAI,gBAAgB,eAAe,GAAG,KAAK,CAAC;EACpF,eAAe,aAAa,aAAa,IAAI,gBAAgB,gBAAgB,GAAG,KAAK,CAAC;CACxF;CACA,OAAO;AACT;AACA,IAAM,cAAN,cAA0B,OAAO;CAC/B,YAAY,SAAS;EACnB,MAAM,OAAO;EACb,KAAK,YAAY,CAAC;EAClB,KAAK,kBAAkB,CAAC;EACxB,KAAK,aAAa,IAAI,wBAAwB,IAAI;EAClD,KAAK,UAAU,CAAC;EAChB,KAAK,aAAa,CAAC,CAAC;EACpB,KAAK,gBAAgB;EACrB,KAAK,mBAAmB;CAC1B;CACA,oBAAoB,MAAM;EACxB,KAAK,mBAAmB;EACxB,OAAO;CACT;CACA,MAAM,iBAAiB,KAAK;EAC1B,MAAM,aAAa,IAAI,WAAW,KAAK,OAAO;EAC9C,WAAW,QAAQ,KAAK,IAAI;EAC5B,WAAW,iBAAiB,KAAK,aAAa;EAC9C,WAAW,mBAAmB,KAAK,eAAe;EAClD,MAAM,OAAO,MAAM,WAAW,UAAU,GAAG;EAC3C,MAAM,iBAAiB;EACvB,MAAM,QAAQ,KAAK,MAAM,SAAS;EAClC,MAAM,YAAY,CAAC;EACnB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;GAC5C,MAAM,OAAO,MAAM;GACnB,IAAI,eAAe,KAAK,IAAI,GAAG;IAC7B,MAAM,YAAY,KAAK,QAAQ,gBAAgB,EAAE;IACjD,MAAM,WAAW,KAAK,wBAAwB,IAAI,WAAW,SAAS,CAAC;IACvE,UAAU,KAAK,QAAQ;GACzB;EACF;EACA,KAAK,aAAa,SAAS;CAC7B;CACA,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,MAAM,aAAa,IAAI,WAAW,KAAK,OAAO;EAC9C,WAAW,QAAQ,KAAK,IAAI;EAC5B,WAAW,iBAAiB,KAAK,aAAa;EAC9C,WAAW,mBAAmB,KAAK,eAAe;EAClD,WAAW,KACT,MACC,SAAS;GACR,KAAK,WAAW,WAAW,MAAM,KAAK,eAAe,EAAE,MAAM,UAAU;IACrE,KAAK,qBAAqB,OAAO,kBAAkB,KAAK,iBAAiB,IAAI;IAC7E,KAAK,yBAAyB,KAAK;IACnC,OAAO,KAAK;GACd,CAAC,EAAE,MAAM,OAAO;EAClB,GACA,YACA,OACF;CACF;CACA,MAAM,MAAM,QAAQ;EAClB,KAAK,WAAW,WAAW,MAAM,KAAK,eAAe,EAAE,MAAM,UAAU;GACrE,KAAK,yBAAyB,KAAK;GACnC,OAAO,KAAK;EACd,CAAC;CACH;CACA,aAAa,WAAW;EACtB,KAAK,kBAAkB,CAAC;EACxB,KAAK,YAAY,CAAC;EAClB,KAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,GAAG,KAC3C,KAAK,YAAY,UAAU,EAAE;EAE/B,KAAK,YAAY,KAAK,wBAAwB,IAAI,WAAW,gDAAgD,CAAC,CAAC;EAC/G,KAAK,YAAY,KAAK,wBAAwB,IAAI,WAAW,gDAAgD,CAAC,CAAC;EAC/G,OAAO;CACT;CACA,WAAW,SAAS;EAClB,KAAK,UAAU;EACf,OAAO;CACT;CACA,YAAY,UAAU;EACpB,MAAM,SAAS,KAAK;EACpB,IAAI,CAAC,OAAO,SAAS,SAAS,OAAO;GACnC,KAAK,UAAU,KAAK,QAAQ;GAC5B,OAAO,SAAS,SAAS,QAAQ;EACnC;EACA,OAAO;CACT;CACA,YAAY,WAAW;EACrB,IAAI,UAAU,WAAW,KAAK,GAAG;GAC/B,MAAM,QAAQ,UAAU,UAAU,CAAC;GACnC,OAAO,KAAK,wBACV,IAAI,WAAW,kBAAkB,QAAQ,qBAAqB,QAAQ,YAAY,KAAK,CACzF;EACF;EACA,OAAO,KAAK,gBAAgB,cAAc;CAC5C;CAGA,qBAAqB,OAAO,iBAAiB,mBAAmB,oBAAoB,OAAO;EACzF,MAAM,SAAS;EACf,MAAM,sBAAsB,oBAAoB;EAChD,MAAM,UAAU,MAAM;GACpB,IAAI,EAAE,UAAU,EAAE;QACZ,MAAM,QAAQ,EAAE,QAAQ;UACrB,IAAI,IAAI,GAAG,IAAI,EAAE,SAAS,QAAQ,IAAI,GAAG,KAC5C,IAAI,CAAC,EAAE,SAAS,GAAG,YACjB,EAAE,SAAS,KAAK,YAAY,GAAG,EAAE,SAAS,EAAE;IAAA,OAG3C,IAAI,CAAC,EAAE,SAAS,YACrB,EAAE,WAAW,YAAY,GAAG,EAAE,QAAQ;GAAA;EAG5C,CAAC;EACD,SAAS,YAAY,GAAG,WAAW;GACjC,IAAI,uBAAuB,EAAE,aAAa,sBAAsB,CAAC,mBAC/D,OAAO;GAET,MAAM,UAAU,EAAE,kBAAkB,EAAE;GAEtC,IADsB,CAAC,WAAW,cAAc,oBAAoB,WAAW,cAAc,uBAE3F,YAAY;GAEd,IAAI,WAAW;GACf,IAAI,aAAa,mBACf,WAAW,kBAAkB;QACxB,IAAI,mBAAmB;IAC5B,WAAW,OAAO,YAAY,SAAS;IACvC,IAAI,aAAa,MACf,MAAM,IAAI,MAAM,6CAA6C,UAAU,gBAAgB;GAE3F,OACE,OAAO;GAET,IAAI,EAAE,gBAAgB;IACpB,WAAW,SAAS,SAAS;IAC7B,IAAI,EAAE,mBACJ,WAAW,SAAS,SAAS;GAEjC;GACA,OAAO;EACT;CACF;CACA,kBAAkB;EAChB,OAAO,KAAK,YAAY,gBAAgB;CAC1C;CACA,sBAAsB;EACpB,OAAO,KAAK,YAAY,qBAAqB;CAC/C;CACA,wBAAwB,YAAY;EAClC,IAAI,OAAO;EACX,IAAI,QAAQ;EACZ,IAAI,YAAY;EAChB,IAAI,QAAQ;EACZ,IAAI,gBAAgB;EACpB,IAAI,YAAY;EAChB,IAAI,aAAa;EACjB,IAAI,eAAe;EACnB,MAAM,OAAO,WAAW,SAAS;EACjC,IAAI,CAAC,MACH,MAAM,IAAI,MACR,gEAA+D,WAAW,oBAAoB,IAAI,GACpG;EAEF,IAAI,QAAQ;EACZ,OAAO,MAAM;GACX,QAAQ,WAAW,SAAS;GAC5B,IAAI,CAAC,OACH;GAEF,QAAQ,MAAM,YAAY,GAA1B;IACE,KAAK;KACH,OAAO,WAAW,SAAS;KAC3B;IACF,KAAK;KACH,QAAQ,WAAW,SAAS;KAC5B,IAAI,MAAM,WAAW,IAAI,GACvB,QAAQ,MAAM,MAAM,UAAU,CAAC;UAC1B,IAAI,CAAC,MAAM,WAAW,GAAG,GAC9B,MAAM,IAAI,MACR,sDAAsD,WAAW,oBAAoB,IAAI,GAC3F;KAEF;IACF,KAAK;KACH,YAAY,WAAW,SAAS;KAChC,IAAI,UAAU,WAAW,IAAI,GAC3B,YAAY,MAAM,UAAU,UAAU,CAAC;UAClC,IAAI,CAAC,UAAU,WAAW,GAAG,GAAG;MACrC,eAAe,KAAK,YAAY,SAAS;MACzC,IAAI,CAAC,cACH,MAAM,IAAI,MACR,2DAA2D,WAAW,oBAAoB,IAAI,GAChG;MAEF,eAAe,aAAa,SAAS;KACvC;KACA;IACF,KAAK;KACH,QAAQ,SAAS,WAAW,SAAS,CAAC;KACtC,IAAI,MAAM,KAAK,GACb,MAAM,IAAI,MACR,4DAA4D,WAAW,oBAAoB,IAAI,GACjG;KAEF,QAAQ,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,QAAQ,GAAG,CAAC;KAC5C,IAAI,QAAQ,GACV,gBAAgB;KAElB;IACF,KAAK;KACH,YAAY,SAAS,WAAW,SAAS,CAAC;KAC1C,IAAI,MAAM,SAAS,GACjB,MAAM,IAAI,MACR,gEAAgE,WAAW,oBAAoB,IAAI,GACrG;KAEF,YAAY,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,YAAY,GAAG,CAAC;KACpD;IACF,KAAK;KACH,aAAa;KACb;IACF,KAAK;KACH,aAAa;KACb;IACF,KAAK;KACH,aAAa;KACb;IACF,KAAK;KACH,aAAa;KACb;IACF,KAAK;KACH,aAAa;KACb;IACF,KAAK;KACH,WAAW,SAAS;KACpB;IACF,SACE,MAAM,IAAI,MACR,kCAAiC,QAAQ,8BAA6B,WAAW,oBAAoB,IAAI,GAC3G;GACJ;EACF;EACA,IAAI,WAAW;EACf,QAAQ,YAAR;GACE,KAAK;IACH,WAAW,IAAI,qBAAqB;KAAE;KAAO,WAAW;KAAK,WAAW;IAAE,CAAC;IAC3E;GACF,KAAK;IACH,WAAW,IAAI,qBAAqB;KAAE;KAAO,WAAW;KAAK,WAAW;IAAK,CAAC;IAC9E;GACF,KAAK;IACH,WAAW,IAAI,qBAAqB;KAAE;KAAO,WAAW;KAAG,WAAW;IAAE,CAAC;IACzE;GACF,KAAK;IACH,WAAW,IAAI,qBAAqB;KAAE;KAAO,WAAW;KAAK,WAAW;IAAE,CAAC;IAC3E;GACF,KAAK;IACH,WAAW,IAAI,qBAAqB;KAAE;KAAO,WAAW;KAAK,WAAW;IAAI,CAAC;IAC7E;GACF,KAAK;IACH,WAAW,IAAI,qBAAqB;KAAE;KAAO,WAAW;KAAK,WAAW;IAAK,CAAC;IAC9E;EACJ;EACA,SAAS,cAAc;EACvB,SAAS,qBAAqB;EAC9B,SAAS,UAAU;EACnB,SAAS,aAAa,CAAC;EACvB,SAAS,gBAAgB;EACzB,SAAS,sBAAsB;EAC/B,IAAI,cAAc,GAChB,SAAS,SAAS,IAAI,SAAS,KAAK,EAAE,eAAe,SAAS;EAEhE,IAAI,CAAC,cAAc;GACjB,eAAe,IAAI,kBAAkB;IACnC,OAAO;IACP,aAAa;IACb,SAAS;IACT,YAAY,CAAC;GACf,CAAC;GACD,aAAa,SAAS,OAAO;GAC7B,aAAa,OAAO,OAAO;GAC3B,aAAa,SAAS,0BAA0B,IAAI,6BAA6B;IAC/E,KAAK;IACL,aAAa;IACb,YAAY,CAAC;IACb,OAAO;IACP,SAAS;GACX,CAAC;EACH;EACA,SAAS,SAAS,OAAO;EACzB,SAAS,OAAO;EAChB,SAAS,SAAS,eAAe;EACjC,KAAK,YAAY,QAAQ;EACzB,OAAO;CACT;CACA,yBAAyB,OAAO;EAC9B,IAAI,aAAa;EACjB,MAAM,UAAU,MAAM;GACpB,IAAI,EAAE,SAAS;IACb,IAAI,EAAE,SAAS,0BACb;IAEF,EAAE,SAAS,mBAAmB;GAChC;EACF,CAAC;EACD,MAAM,SAAS,uBAAuB,aAAa;CACrD;AACF;;;ACt4CA,IAAM,kBAAkB;AACxB,IAAM,YAA4B,uBAAO;CACvC,MAAM,mBAAmB,OAAO;EAC9B,YAAY,SAAS;GACnB,MAAM,OAAO;GACb,KAAK,aAAa;GAClB,KAAK,cAAc;EACrB;EACA,KAAK,KAAK,QAAQ,YAAY,SAAS;GACrC,MAAM,QAAQ;GACd,MAAM,SAAS,IAAI,WAAW,MAAM,OAAO;GAC3C,OAAO,QAAQ,MAAM,IAAI;GACzB,OAAO,iBAAiB,MAAM,aAAa;GAC3C,OAAO,mBAAmB,MAAM,eAAe;GAC/C,OAAO,KACL,KACA,SAAS,MAAM;IACb,IAAI;KACF,OAAO,MAAM,MAAM,IAAI,CAAC;IAC1B,SAAS,GAAG;KACV,IAAI,SACF,QAAQ,CAAC;UAET,QAAQ,MAAM,CAAC;KAEjB,MAAM,QAAQ,UAAU,GAAG;IAC7B;GACF,GACA,YACA,OACF;EACF;EACA,MAAM,MAAM;GACV,MAAM,QAAQ;GACd,SAAS,UAAU,MAAM,OAAO;IAC9B,IAAI,KAAK,aAAa,GACpB;IACF,MAAM,YAAY,iBAAiB,IAAI;IACvC,IAAI,aAAa;IACjB,IAAI,OAAO;IACX,QAAQ,KAAK,UAAb;KACE,KAAK;MACH,QAAQ,WAAW,MAAM,KAAK;MAC9B;KACF,KAAK;MACH,mBAAmB,IAAI;MACvB;KACF,KAAK;MACH,QAAQ,WAAW,MAAM,KAAK;MAC9B;KACF,KAAK;MACH,QAAQ,WAAW,MAAM,KAAK;MAC9B,IAAI,KAAK,aAAa,GAAG,GACvB,OAAO,cAAc,IAAI;MAC3B;KACF,KAAK;MACH,QAAQ,WAAW,MAAM,KAAK;MAC9B,OAAO,cAAc,IAAI;MACzB;KACF,KAAK;MACH,QAAQ,WAAW,MAAM,KAAK;MAC9B,OAAO,iBAAiB,IAAI;MAC5B;KACF,KAAK;MACH,QAAQ,WAAW,MAAM,KAAK;MAC9B,OAAO,kBAAkB,IAAI;MAC7B;KACF,KAAK;MACH,QAAQ,WAAW,MAAM,KAAK;MAC9B,OAAO,gBAAgB,IAAI;MAC3B;KACF,KAAK;MACH,QAAQ,WAAW,MAAM,KAAK;MAC9B,OAAO,iBAAiB,IAAI;MAC5B;KACF,KAAK;MACH,QAAQ,WAAW,MAAM,KAAK;MAC9B,OAAO,cAAc,IAAI;MACzB;KACF,KAAK;MACH,aAAa;MACb;KACF,KAAK;MACH,QAAQ,WAAW,MAAM,KAAK;MAE9B,MAAM,cADO,KAAK,eAAe,gCAAgC,MAAM,KAAK,IACpD,UAAU,CAAC;MACnC,MAAM,WAAW,KAAK,gBAAgB,eAAe,UAAU;MAC/D,IAAI,UACF,UAAU,UAAU,KAAK;WAEzB,QAAQ,KAAK,4DAA4D,UAAU;MAErF;IACJ;IACA,IAAI,MAAM;KACR,IAAI,MAAM,SAAS,KAAK,KAAK,MAAM,SAAS,QAC1C,KAAK,MAAM,SAAS,MAAM,MAAM,eAAe;KAEjD,cAAc,MAAM,gBAAgB;KACpC,MAAM,KAAK,IAAI;KACf,KAAK,WAAW;MAAE;MAAM;KAAM;IAChC;IACA,MAAM,aAAa,KAAK;IACxB,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;KAC1C,MAAM,QAAQ,WAAW;KACzB,IAAI,cAAc,MAAM,aAAa,WAAW,MAAM,aAAa,QACjE;KAEF,UAAU,OAAO,KAAK;IACxB;IACA,IAAI,WAAW;KACb,eAAe,IAAI;KACnB,IAAI,eAAe,SAAS,GAC1B,iBAAiB,KAAK,eAAe,eAAe,SAAS,EAAE;UAE/D,iBAAiB,SAAS;IAE9B;GACF;GACA,SAAS,cAAc,MAAM;IAC3B,MAAM,OAAO,IAAI,UAAU;IAC3B,MAAM,QAAQ,IAAI,QAAQ;IAC1B,MAAM,UAAU,IAAI,QAAQ;IAC5B,MAAM,aAAa,IAAI,QAAQ;IAC/B,IAAI,eAAe;IACnB,IAAI,kBAAkB;IACtB,MAAM,IAAI,KAAK,aAAa,GAAG;IAC/B,IAAI,MAAM,MAAM,MAAM,QACpB,OAAO;IACT,MAAM,WAAW,EAAE,MAAM,sBAAsB;IAC/C,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,IAAI,GAAG,KAAK;KAC/C,MAAM,UAAU,SAAS;KACzB,MAAM,OAAO,QAAQ,OAAO,CAAC;KAC7B,MAAM,QAAQ,QAAQ,MAAM,CAAC,EAAE,KAAK;KACpC,IAAI,iBAAiB,MAAM;MACzB,kBAAkB;MAClB,eAAe;KACjB;KACA,IAAI;KACJ,QAAQ,MAAR;MACE,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,MAAM,IAAI,QAAQ,IAAI;QACtB,MAAM,IAAI,QAAQ,IAAI;QACtB,QAAQ,IAAI,MAAM;QAClB,QAAQ,IAAI,MAAM;QAClB,IAAI,MAAM,GACR,KAAK,OAAO,MAAM,GAAG,MAAM,CAAC;aAE5B,KAAK,OAAO,MAAM,GAAG,MAAM,CAAC;QAE9B,IAAI,MAAM,GACR,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK;QAChD,MAAM,IAAI,QAAQ;QAClB,QAAQ,IAAI,MAAM;QAClB,QAAQ,IAAI,MAAM;QAClB,KAAK,OAAO,MAAM,GAAG,MAAM,CAAC;QAC5B,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK;QAChD,MAAM,IAAI,QAAQ;QAClB,QAAQ,IAAI,MAAM;QAClB,QAAQ,IAAI,MAAM;QAClB,KAAK,OAAO,MAAM,GAAG,MAAM,CAAC;QAC5B,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,MAAM,IAAI,QAAQ,IAAI;QACtB,MAAM,IAAI,QAAQ,IAAI;QACtB,QAAQ,IAAI,MAAM;QAClB,QAAQ,IAAI,MAAM;QAClB,KAAK,OAAO,MAAM,GAAG,MAAM,CAAC;QAC5B,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,KAAK,cACH,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,QAAQ,IAAI,EACd;QACA,QAAQ,IAAI,QAAQ,IAAI;QACxB,QAAQ,IAAI,QAAQ,IAAI;QACxB,MAAM,IAAI,QAAQ,IAAI;QACtB,MAAM,IAAI,QAAQ,IAAI;QACtB,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,KAAK,cACH,cAAc,MAAM,GAAG,QAAQ,CAAC,GAChC,cAAc,MAAM,GAAG,QAAQ,CAAC,GAChC,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,QAAQ,IAAI,EACd;QACA,QAAQ,IAAI,QAAQ,IAAI;QACxB,QAAQ,IAAI,QAAQ,IAAI;QACxB,MAAM,IAAI,QAAQ,IAAI;QACtB,MAAM,IAAI,QAAQ,IAAI;QACtB,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,KAAK,iBAAiB,QAAQ,IAAI,IAAI,QAAQ,IAAI,IAAI,QAAQ,IAAI,IAAI,QAAQ,IAAI,EAAE;QACpF,QAAQ,IAAI,QAAQ,IAAI;QACxB,QAAQ,IAAI,QAAQ,IAAI;QACxB,MAAM,IAAI,QAAQ,IAAI;QACtB,MAAM,IAAI,QAAQ,IAAI;QACtB,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,MAAM,KAAK,cAAc,MAAM,GAAG,QAAQ,CAAC;QAC3C,MAAM,KAAK,cAAc,MAAM,GAAG,QAAQ,CAAC;QAC3C,KAAK,iBAAiB,IAAI,IAAI,QAAQ,IAAI,IAAI,QAAQ,IAAI,EAAE;QAC5D,QAAQ,IAAI;QACZ,QAAQ,IAAI;QACZ,MAAM,IAAI,QAAQ,IAAI;QACtB,MAAM,IAAI,QAAQ,IAAI;QACtB,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;OACtC,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,IAAI,QAAQ,IAAI,MAAM,MAAM,KAAK,QAAQ,IAAI,MAAM,MAAM,GACvD;QACF,MAAM,QAAQ,MAAM,MAAM;QAC1B,MAAM,IAAI,QAAQ,IAAI;QACtB,MAAM,IAAI,QAAQ,IAAI;QACtB,QAAQ,IAAI,MAAM;QAClB,QAAQ,IAAI,MAAM;QAClB,gBACE,MACA,QAAQ,IACR,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,OACA,KACF;QACA,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,MAAM,KAAK,QAAQ,IAAI;QACvB,MAAM,KAAK,QAAQ,IAAI;QACvB,QAAQ,IAAI,MAAM;QAClB,QAAQ,IAAI,MAAM;QAClB,IAAI,MAAM,GACR,KAAK,OAAO,MAAM,GAAG,MAAM,CAAC;aAE5B,KAAK,OAAO,MAAM,GAAG,MAAM,CAAC;QAE9B,IAAI,MAAM,GACR,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK;QAChD,MAAM,KAAK,QAAQ;QACnB,QAAQ,IAAI,MAAM;QAClB,QAAQ,IAAI,MAAM;QAClB,KAAK,OAAO,MAAM,GAAG,MAAM,CAAC;QAC5B,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK;QAChD,MAAM,KAAK,QAAQ;QACnB,QAAQ,IAAI,MAAM;QAClB,QAAQ,IAAI,MAAM;QAClB,KAAK,OAAO,MAAM,GAAG,MAAM,CAAC;QAC5B,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,MAAM,KAAK,QAAQ,IAAI;QACvB,MAAM,KAAK,QAAQ,IAAI;QACvB,QAAQ,IAAI,MAAM;QAClB,QAAQ,IAAI,MAAM;QAClB,KAAK,OAAO,MAAM,GAAG,MAAM,CAAC;QAC5B,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,KAAK,cACH,MAAM,IAAI,QAAQ,IAAI,IACtB,MAAM,IAAI,QAAQ,IAAI,IACtB,MAAM,IAAI,QAAQ,IAAI,IACtB,MAAM,IAAI,QAAQ,IAAI,IACtB,MAAM,IAAI,QAAQ,IAAI,IACtB,MAAM,IAAI,QAAQ,IAAI,EACxB;QACA,QAAQ,IAAI,MAAM,IAAI,QAAQ,IAAI;QAClC,QAAQ,IAAI,MAAM,IAAI,QAAQ,IAAI;QAClC,MAAM,KAAK,QAAQ,IAAI;QACvB,MAAM,KAAK,QAAQ,IAAI;QACvB,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,KAAK,cACH,cAAc,MAAM,GAAG,QAAQ,CAAC,GAChC,cAAc,MAAM,GAAG,QAAQ,CAAC,GAChC,MAAM,IAAI,QAAQ,IAAI,IACtB,MAAM,IAAI,QAAQ,IAAI,IACtB,MAAM,IAAI,QAAQ,IAAI,IACtB,MAAM,IAAI,QAAQ,IAAI,EACxB;QACA,QAAQ,IAAI,MAAM,IAAI,QAAQ,IAAI;QAClC,QAAQ,IAAI,MAAM,IAAI,QAAQ,IAAI;QAClC,MAAM,KAAK,QAAQ,IAAI;QACvB,MAAM,KAAK,QAAQ,IAAI;QACvB,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,KAAK,iBACH,MAAM,IAAI,QAAQ,IAAI,IACtB,MAAM,IAAI,QAAQ,IAAI,IACtB,MAAM,IAAI,QAAQ,IAAI,IACtB,MAAM,IAAI,QAAQ,IAAI,EACxB;QACA,QAAQ,IAAI,MAAM,IAAI,QAAQ,IAAI;QAClC,QAAQ,IAAI,MAAM,IAAI,QAAQ,IAAI;QAClC,MAAM,KAAK,QAAQ,IAAI;QACvB,MAAM,KAAK,QAAQ,IAAI;QACvB,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,KAAK;OAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,MAAM,KAAK,cAAc,MAAM,GAAG,QAAQ,CAAC;QAC3C,MAAM,KAAK,cAAc,MAAM,GAAG,QAAQ,CAAC;QAC3C,KAAK,iBAAiB,IAAI,IAAI,MAAM,IAAI,QAAQ,IAAI,IAAI,MAAM,IAAI,QAAQ,IAAI,EAAE;QAChF,QAAQ,IAAI;QACZ,QAAQ,IAAI;QACZ,MAAM,IAAI,MAAM,IAAI,QAAQ,IAAI;QAChC,MAAM,IAAI,MAAM,IAAI,QAAQ,IAAI;QAChC,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;OACH,UAAU,YAAY,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;OACtC,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,GAAG;QACnD,IAAI,QAAQ,IAAI,MAAM,KAAK,QAAQ,IAAI,MAAM,GAC3C;QACF,MAAM,QAAQ,MAAM,MAAM;QAC1B,MAAM,KAAK,QAAQ,IAAI;QACvB,MAAM,KAAK,QAAQ,IAAI;QACvB,QAAQ,IAAI,MAAM;QAClB,QAAQ,IAAI,MAAM;QAClB,gBACE,MACA,QAAQ,IACR,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,OACA,KACF;QACA,IAAI,MAAM,KAAK,oBAAoB,MACjC,WAAW,KAAK,KAAK;OACzB;OACA;MACF,KAAK;MACL,KAAK;OACH,KAAK,YAAY,YAAY;OAC7B,IAAI,KAAK,YAAY,OAAO,SAAS,GAAG;QACtC,MAAM,KAAK,UAAU;QACrB,KAAK,YAAY,aAAa,KAAK,KAAK;QACxC,eAAe;OACjB;OACA;MACF,SACE,QAAQ,KAAK,OAAO;KACxB;KACA,kBAAkB;IACpB;IACA,OAAO;GACT;GACA,SAAS,mBAAmB,MAAM;IAChC,IAAI,CAAC,KAAK,SAAS,CAAC,KAAK,MAAM,YAAY,CAAC,KAAK,MAAM,SAAS,QAC9D;IACF,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,MAAM,SAAS,QAAQ,KAAK;KACnD,MAAM,aAAa,KAAK,MAAM,SAAS;KACvC,IAAI,WAAW,SAAS,GACtB;KACF,MAAM,eAAe,WAAW,aAAa,MAAM,KAAK,EAAE,OAAO,OAAO,EAAE,KAAK,OAAO,GAAG,KAAK,CAAC;KAC/F,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;MAC5C,MAAM,cAAc,OAAO,YAAY,OAAO,QAAQ,WAAW,KAAK,EAAE,QAAQ,GAAG,OAAO,MAAM,EAAE,CAAC;MACnG,YAAY,aAAa,MAAM,OAAO,OAAO,YAAY,aAAa,OAAO,CAAC,GAAG,WAAW;KAC9F;IACF;GACF;GACA,SAAS,gBAAgB,MAAM,IAAI,IAAI,iBAAiB,gBAAgB,YAAY,OAAO,KAAK;IAC9F,IAAI,MAAM,KAAK,MAAM,GAAG;KACtB,KAAK,OAAO,IAAI,GAAG,IAAI,CAAC;KACxB;IACF;IACA,kBAAkB,kBAAkB,KAAK,KAAK;IAC9C,KAAK,KAAK,IAAI,EAAE;IAChB,KAAK,KAAK,IAAI,EAAE;IAChB,MAAM,OAAO,MAAM,IAAI,IAAI,KAAK;IAChC,MAAM,OAAO,MAAM,IAAI,IAAI,KAAK;IAChC,MAAM,MAAM,KAAK,IAAI,eAAe,IAAI,MAAM,KAAK,IAAI,eAAe,IAAI;IAC1E,MAAM,MAAM,CAAC,KAAK,IAAI,eAAe,IAAI,MAAM,KAAK,IAAI,eAAe,IAAI;IAC3E,IAAI,MAAM,KAAK;IACf,IAAI,MAAM,KAAK;IACf,MAAM,OAAO,MAAM;IACnB,MAAM,OAAO,MAAM;IACnB,MAAM,KAAK,OAAO,MAAM,OAAO;IAC/B,IAAI,KAAK,GAAG;KACV,MAAM,IAAI,KAAK,KAAK,EAAE;KACtB,KAAK,IAAI;KACT,KAAK,IAAI;KACT,MAAM,KAAK;KACX,MAAM,KAAK;IACb;IACA,MAAM,KAAK,MAAM,OAAO,MAAM;IAC9B,MAAM,MAAM,MAAM,MAAM,MAAM;IAC9B,IAAI,IAAI,KAAK,KAAK,KAAK,IAAI,GAAG,EAAE,CAAC;IACjC,IAAI,mBAAmB,YACrB,IAAI,CAAC;IACP,MAAM,MAAM,IAAI,KAAK,MAAM;IAC3B,MAAM,MAAM,CAAC,IAAI,KAAK,MAAM;IAC5B,MAAM,KAAK,KAAK,IAAI,eAAe,IAAI,MAAM,KAAK,IAAI,eAAe,IAAI,OAAO,MAAM,IAAI,IAAI,KAAK;IACnG,MAAM,KAAK,KAAK,IAAI,eAAe,IAAI,MAAM,KAAK,IAAI,eAAe,IAAI,OAAO,MAAM,IAAI,IAAI,KAAK;IACnG,MAAM,QAAQ,SAAS,GAAG,IAAI,MAAM,OAAO,KAAK,MAAM,OAAO,EAAE;IAC/D,MAAM,QAAQ,UAAU,MAAM,OAAO,KAAK,MAAM,OAAO,KAAK,CAAC,MAAM,OAAO,KAAK,CAAC,MAAM,OAAO,EAAE,KAAK,KAAK,KAAK;IAC9G,KAAK,YAAY,WAAW,IAAI,IAAI,IAAI,IAAI,OAAO,QAAQ,OAAO,eAAe,GAAG,eAAe;GACrG;GACA,SAAS,SAAS,IAAI,IAAI,IAAI,IAAI;IAChC,MAAM,MAAM,KAAK,KAAK,KAAK;IAC3B,MAAM,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE;IACtE,IAAI,MAAM,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,MAAM,GAAG,CAAC,CAAC;IACxD,IAAI,KAAK,KAAK,KAAK,KAAK,GACtB,MAAM,CAAC;IACT,OAAO;GACT;GACA,SAAS,cAAc,MAAM;IAC3B,MAAM,IAAI,oBAAoB,KAAK,aAAa,GAAG,KAAK,CAAC;IACzD,MAAM,IAAI,oBAAoB,KAAK,aAAa,GAAG,KAAK,CAAC;IACzD,MAAM,KAAK,oBAAoB,KAAK,aAAa,IAAI,KAAK,KAAK,aAAa,IAAI,KAAK,CAAC;IACtF,MAAM,KAAK,oBAAoB,KAAK,aAAa,IAAI,KAAK,KAAK,aAAa,IAAI,KAAK,CAAC;IACtF,MAAM,IAAI,oBAAoB,KAAK,aAAa,OAAO,CAAC;IACxD,MAAM,IAAI,oBAAoB,KAAK,aAAa,QAAQ,CAAC;IACzD,MAAM,MAAM;IACZ,MAAM,OAAO,IAAI,UAAU;IAC3B,KAAK,OAAO,IAAI,IAAI,CAAC;IACrB,KAAK,OAAO,IAAI,IAAI,IAAI,CAAC;IACzB,IAAI,OAAO,KAAK,OAAO,GACrB,KAAK,cAAc,IAAI,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,IAAI,KAAK,KAAK,IAAI,GAAG,IAAI,EAAE;IAE5E,KAAK,OAAO,IAAI,GAAG,IAAI,IAAI,EAAE;IAC7B,IAAI,OAAO,KAAK,OAAO,GACrB,KAAK,cAAc,IAAI,GAAG,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,IAAI,GAAG,IAAI,IAAI,IAAI,IAAI,CAAC;IAExF,KAAK,OAAO,IAAI,IAAI,IAAI,CAAC;IACzB,IAAI,OAAO,KAAK,OAAO,GACrB,KAAK,cAAc,IAAI,KAAK,KAAK,IAAI,GAAG,GAAG,IAAI,IAAI,KAAK,KAAK,GAAG,IAAI,IAAI,EAAE;IAE5E,KAAK,OAAO,GAAG,IAAI,EAAE;IACrB,IAAI,OAAO,KAAK,OAAO,GACrB,KAAK,cAAc,GAAG,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK,GAAG,IAAI,IAAI,CAAC;IAEhE,OAAO;GACT;GACA,SAAS,iBAAiB,MAAM;IAC9B,SAAS,SAAS,OAAO,GAAG,GAAG;KAC7B,MAAM,IAAI,oBAAoB,CAAC;KAC/B,MAAM,IAAI,oBAAoB,CAAC;KAC/B,IAAI,UAAU,GACZ,KAAK,OAAO,GAAG,CAAC;UAEhB,KAAK,OAAO,GAAG,CAAC;KAElB;IACF;IACA,MAAM,QAAQ;IACd,MAAM,OAAO,IAAI,UAAU;IAC3B,IAAI,QAAQ;IACZ,KAAK,aAAa,QAAQ,EAAE,QAAQ,OAAO,QAAQ;IACnD,KAAK,YAAY,YAAY;IAC7B,OAAO;GACT;GACA,SAAS,kBAAkB,MAAM;IAC/B,SAAS,SAAS,OAAO,GAAG,GAAG;KAC7B,MAAM,IAAI,oBAAoB,CAAC;KAC/B,MAAM,IAAI,oBAAoB,CAAC;KAC/B,IAAI,UAAU,GACZ,KAAK,OAAO,GAAG,CAAC;UAEhB,KAAK,OAAO,GAAG,CAAC;KAElB;IACF;IACA,MAAM,QAAQ;IACd,MAAM,OAAO,IAAI,UAAU;IAC3B,IAAI,QAAQ;IACZ,KAAK,aAAa,QAAQ,EAAE,QAAQ,OAAO,QAAQ;IACnD,KAAK,YAAY,YAAY;IAC7B,OAAO;GACT;GACA,SAAS,gBAAgB,MAAM;IAC7B,MAAM,IAAI,oBAAoB,KAAK,aAAa,IAAI,KAAK,CAAC;IAC1D,MAAM,IAAI,oBAAoB,KAAK,aAAa,IAAI,KAAK,CAAC;IAC1D,MAAM,IAAI,oBAAoB,KAAK,aAAa,GAAG,KAAK,CAAC;IACzD,MAAM,UAAU,IAAI,KAAK;IACzB,QAAQ,OAAO,GAAG,GAAG,GAAG,GAAG,KAAK,KAAK,CAAC;IACtC,MAAM,OAAO,IAAI,UAAU;IAC3B,KAAK,SAAS,KAAK,OAAO;IAC1B,OAAO;GACT;GACA,SAAS,iBAAiB,MAAM;IAC9B,MAAM,IAAI,oBAAoB,KAAK,aAAa,IAAI,KAAK,CAAC;IAC1D,MAAM,IAAI,oBAAoB,KAAK,aAAa,IAAI,KAAK,CAAC;IAC1D,MAAM,KAAK,oBAAoB,KAAK,aAAa,IAAI,KAAK,CAAC;IAC3D,MAAM,KAAK,oBAAoB,KAAK,aAAa,IAAI,KAAK,CAAC;IAC3D,MAAM,UAAU,IAAI,KAAK;IACzB,QAAQ,WAAW,GAAG,GAAG,IAAI,IAAI,GAAG,KAAK,KAAK,CAAC;IAC/C,MAAM,OAAO,IAAI,UAAU;IAC3B,KAAK,SAAS,KAAK,OAAO;IAC1B,OAAO;GACT;GACA,SAAS,cAAc,MAAM;IAC3B,MAAM,KAAK,oBAAoB,KAAK,aAAa,IAAI,KAAK,CAAC;IAC3D,MAAM,KAAK,oBAAoB,KAAK,aAAa,IAAI,KAAK,CAAC;IAC3D,MAAM,KAAK,oBAAoB,KAAK,aAAa,IAAI,KAAK,CAAC;IAC3D,MAAM,KAAK,oBAAoB,KAAK,aAAa,IAAI,KAAK,CAAC;IAC3D,MAAM,OAAO,IAAI,UAAU;IAC3B,KAAK,OAAO,IAAI,EAAE;IAClB,KAAK,OAAO,IAAI,EAAE;IAClB,KAAK,YAAY,YAAY;IAC7B,OAAO;GACT;GACA,SAAS,WAAW,MAAM,OAAO;IAC/B,QAAQ,OAAO,OAAO,CAAC,GAAG,KAAK;IAC/B,IAAI,mBAAmB,CAAC;IACxB,IAAI,KAAK,aAAa,OAAO,GAAG;KAC9B,MAAM,iBAAiB,KAAK,aAAa,OAAO,EAAE,MAAM,IAAI,EAAE,OAAO,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,CAAC;KACjG,KAAK,IAAI,IAAI,GAAG,IAAI,eAAe,QAAQ,KACzC,mBAAmB,OAAO,OAAO,kBAAkB,YAAY,MAAM,eAAe,GAAG;IAE3F;IACA,IAAI,KAAK,aAAa,IAAI,GACxB,mBAAmB,OAAO,OAAO,kBAAkB,YAAY,MAAM,KAAK,aAAa,IAAI,EAAE;IAE/F,SAAS,SAAS,SAAS,QAAQ,gBAAgB;KACjD,IAAI,mBAAmB,KAAK,GAC1B,iBAAiB,SAAS,KAAK,GAAG;MAChC,IAAI,EAAE,WAAW,KAAK,GACpB,QAAQ,KAAK,yDAAyD;MACxE,OAAO;KACT;KACF,IAAI,KAAK,aAAa,OAAO,GAC3B,MAAM,UAAU,eAAe,KAAK,aAAa,OAAO,CAAC;KAC3D,IAAI,iBAAiB,UACnB,MAAM,UAAU,eAAe,iBAAiB,QAAQ;KAC1D,IAAI,KAAK,SAAS,KAAK,MAAM,aAAa,IACxC,MAAM,UAAU,eAAe,KAAK,MAAM,QAAQ;IACtD;IACA,SAAS,MAAM,GAAG;KAChB,OAAO,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,oBAAoB,CAAC,CAAC,CAAC;IACxD;IACA,SAAS,SAAS,GAAG;KACnB,OAAO,KAAK,IAAI,GAAG,oBAAoB,CAAC,CAAC;IAC3C;IACA,SAAS,QAAQ,MAAM;IACvB,SAAS,gBAAgB,eAAe,KAAK;IAC7C,SAAS,aAAa,UAAU;IAChC,SAAS,WAAW,WAAW,KAAK;IACpC,SAAS,UAAU,QAAQ;IAC3B,SAAS,kBAAkB,iBAAiB,KAAK;IACjD,SAAS,gBAAgB,eAAe,QAAQ;IAChD,SAAS,mBAAmB,gBAAgB;IAC5C,SAAS,kBAAkB,eAAe;IAC1C,SAAS,qBAAqB,oBAAoB,QAAQ;IAC1D,SAAS,cAAc,YAAY;IACnC,OAAO;GACT;GACA,SAAS,cAAc,GAAG,GAAG;IAC3B,OAAO,KAAK,IAAI;GAClB;GACA,SAAS,YAAY,OAAO,OAAO,QAAQ;IACzC,IAAI,OAAO,UAAU,UACnB,MAAM,IAAI,UAAU,oBAAoB,OAAO,KAAK;IAEtD,MAAM,KAAK;KACT,WAAW;KACX,YAAY;KACZ,OAAO;KACP,MAAM;KACN,OAAO;KACP,OAAO;KACP,KAAK;KACL,OAAO;IACT;IACA,MAAM,MAAM;IACZ,MAAM,MAAM;IACZ,MAAM,QAAQ;IACd,MAAM,MAAM;IACZ,IAAI,QAAQ;IACZ,IAAI,YAAY;IAChB,IAAI,SAAS,IAAI,WAAW;IAC5B,MAAM,SAAS,CAAC;IAChB,SAAS,iBAAiB,UAAU,GAAG,SAAS;KAC9C,MAAM,wBAAQ,IAAI,YAAY,4BAA2B,WAAW,iBAAgB,IAAI,GAAG;KAC3F,MAAM,UAAU;KAChB,MAAM;IACR;IACA,SAAS,YAAY;KACnB,IAAI,WAAW,IACb,IAAI,aAAa,IACf,OAAO,KAAK,OAAO,MAAM,CAAC;UAE1B,OAAO,KAAK,OAAO,MAAM,IAAI,KAAK,IAAI,IAAI,OAAO,QAAQ,CAAC,CAAC;KAE/D,SAAS;KACT,WAAW;IACb;IACA,IAAI;IACJ,MAAM,SAAS,MAAM;IACrB,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK;KAC/B,UAAU,MAAM;KAChB,IAAI,MAAM,QAAQ,KAAK,KAAK,MAAM,SAAS,OAAO,SAAS,MAAM,KAAK,GAAG,MAAM,KAAK,OAAO,GAAG;MAC5F,QAAQ;MACR,SAAS;MACT,UAAU;MACV;KACF;KACA,IAAI,UAAU,KAAK;MACjB,IAAI,GAAG,WAAW,KAAK,OAAO,GAC5B;MAEF,IAAI,GAAG,MAAM,KAAK,OAAO,KAAK,GAAG,KAAK,KAAK,OAAO,GAAG;OACnD,QAAQ;OACR,SAAS;OACT;MACF;MACA,IAAI,GAAG,MAAM,KAAK,OAAO,GAAG;OAC1B,QAAQ;OACR,SAAS;OACT;MACF;MACA,IAAI,GAAG,MAAM,KAAK,OAAO,GAAG;OAC1B,IAAI,WACF,iBAAiB,SAAS,GAAG,MAAM;OAErC,YAAY;MACd;KACF;KACA,IAAI,UAAU,KAAK;MACjB,IAAI,GAAG,MAAM,KAAK,OAAO,GAAG;OAC1B,UAAU;OACV;MACF;MACA,IAAI,GAAG,MAAM,KAAK,OAAO,GAAG;OAC1B,UAAU;OACV,QAAQ;OACR;MACF;MACA,IAAI,GAAG,IAAI,KAAK,OAAO,GAAG;OACxB,QAAQ;OACR;MACF;MACA,IAAI,GAAG,KAAK,KAAK,OAAO,KAAK,OAAO,WAAW,KAAK,GAAG,KAAK,KAAK,OAAO,EAAE,GACxE,iBAAiB,SAAS,GAAG,MAAM;KAEvC;KACA,IAAI,UAAU,OAAO;MACnB,IAAI,GAAG,MAAM,KAAK,OAAO,GAAG;OAC1B,UAAU;OACV;MACF;MACA,IAAI,GAAG,IAAI,KAAK,OAAO,GAAG;OACxB,QAAQ;OACR;MACF;MACA,IAAI,GAAG,MAAM,KAAK,OAAO,KAAK,OAAO,OAAO,SAAS,OAAO,KAC1D,iBAAiB,SAAS,GAAG,MAAM;KAEvC;KACA,IAAI,UAAU,KAAK;MACjB,IAAI,GAAG,MAAM,KAAK,OAAO,GAAG;OAC1B,YAAY;OACZ;MACF;MACA,IAAI,GAAG,KAAK,KAAK,OAAO,GAAG;OACzB,IAAI,aAAa,IAAI;QACnB,YAAY;QACZ;OACF;OACA,IAAI,SAAS,WAAW,KAAK,GAAG,KAAK,KAAK,QAAQ,GAChD,iBAAiB,SAAS,GAAG,MAAM;MAEvC;KACF;KACA,IAAI,GAAG,WAAW,KAAK,OAAO,GAAG;MAC/B,UAAU;MACV,QAAQ;MACR,YAAY;KACd,OAAO,IAAI,GAAG,MAAM,KAAK,OAAO,GAAG;MACjC,UAAU;MACV,QAAQ;MACR,YAAY;KACd,OAAO,IAAI,GAAG,KAAK,KAAK,OAAO,GAAG;MAChC,UAAU;MACV,QAAQ;MACR,SAAS;KACX,OAAO,IAAI,GAAG,MAAM,KAAK,OAAO,GAAG;MACjC,UAAU;MACV,QAAQ;MACR,SAAS;KACX,OACE,iBAAiB,SAAS,GAAG,MAAM;IAEvC;IACA,UAAU;IACV,OAAO;GACT;GACA,MAAM,QAAQ;IAAC;IAAM;IAAM;IAAM;IAAM;IAAM;GAAI;GACjD,MAAM,iBAAiB;IACrB,IAAI;KACF,IAAI;KACJ,IAAI;KACJ,IAAI,IAAI;KACR,IAAI,KAAK;KACT,IAAI,IAAI;KACR,IAAI;IACN;IACA,IAAI;KACF,IAAI;KACJ,IAAI;KACJ,IAAI,IAAI;KACR,IAAI,KAAK;KACT,IAAI,IAAI;KACR,IAAI;IACN;IACA,IAAI;KACF,IAAI;KACJ,IAAI;KACJ,IAAI;KACJ,IAAI;KACJ,IAAI;KACJ,IAAI;IACN;IACA,IAAI;KACF,IAAI,OAAO;KACX,IAAI,OAAO;KACX,IAAI,IAAI;KACR,IAAI;KACJ,IAAI,IAAI;KACR,IAAI;IACN;IACA,IAAI;KACF,IAAI,OAAO;KACX,IAAI,OAAO;KACX,IAAI,IAAI;KACR,IAAI,KAAK;KACT,IAAI;KACJ,IAAI;IACN;IACA,IAAI,EACF,IAAI,EACN;GACF;GACA,SAAS,oBAAoB,QAAQ;IACnC,IAAI,UAAU;IACd,IAAI,OAAO,WAAW,YAAY,kBAAkB,QAClD,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;KAC5C,MAAM,IAAI,MAAM;KAChB,IAAI,OAAO,SAAS,CAAC,GAAG;MACtB,UAAU;MACV,SAAS,OAAO,UAAU,GAAG,OAAO,SAAS,EAAE,MAAM;MACrD;KACF;IACF;IAEF,IAAI,QAAQ,KAAK;IACjB,IAAI,YAAY,QAAQ,MAAM,gBAAgB,MAC5C,QAAQ,eAAe,MAAM,MAAM,eAAe,MAAM;SACnD;KACL,QAAQ,eAAe,SAAS,MAAM;KACtC,IAAI,QAAQ,GACV,QAAQ,eAAe,SAAS,QAAQ,MAAM;IAElD;IACA,OAAO,QAAQ,WAAW,MAAM;GAClC;GACA,SAAS,iBAAiB,MAAM;IAC9B,IAAI,EAAE,KAAK,aAAa,WAAW,KAAK,KAAK,aAAa,UAAU,KAAK,aAAa,GAAG,KAAK,KAAK,aAAa,GAAG,KACjH,OAAO;IAET,MAAM,YAAY,mBAAmB,IAAI;IACzC,IAAI,eAAe,SAAS,GAC1B,UAAU,YAAY,eAAe,eAAe,SAAS,EAAE;IAEjE,iBAAiB,KAAK,SAAS;IAC/B,eAAe,KAAK,SAAS;IAC7B,OAAO;GACT;GACA,SAAS,mBAAmB,MAAM;IAChC,MAAM,YAAY,IAAI,QAAQ;IAC9B,MAAM,oBAAoB;IAC1B,IAAI,KAAK,aAAa,UAAU,KAAK,aAAa,GAAG,KAAK,KAAK,aAAa,GAAG,IAAI;KACjF,MAAM,KAAK,oBAAoB,KAAK,aAAa,GAAG,CAAC;KACrD,MAAM,KAAK,oBAAoB,KAAK,aAAa,GAAG,CAAC;KACrD,UAAU,UAAU,IAAI,EAAE;IAC5B;IACA,IAAI,KAAK,aAAa,WAAW,GAAG;KAClC,MAAM,kBAAkB,KAAK,aAAa,WAAW,EAAE,MAAM,GAAG;KAChE,KAAK,IAAI,SAAS,gBAAgB,SAAS,GAAG,UAAU,GAAG,UAAU;MACnE,MAAM,gBAAgB,gBAAgB,QAAQ,KAAK;MACnD,IAAI,kBAAkB,IACpB;MACF,MAAM,aAAa,cAAc,QAAQ,GAAG;MAC5C,MAAM,cAAc,cAAc;MAClC,IAAI,aAAa,KAAK,aAAa,aAAa;OAC9C,MAAM,gBAAgB,cAAc,MAAM,GAAG,UAAU;OACvD,MAAM,QAAQ,YAAY,cAAc,MAAM,aAAa,CAAC,CAAC;OAC7D,kBAAkB,SAAS;OAC3B,QAAQ,eAAR;QACE,KAAK;SACH,IAAI,MAAM,UAAU,GAAG;UACrB,MAAM,KAAK,MAAM;UACjB,IAAI,KAAK;UACT,IAAI,MAAM,UAAU,GAClB,KAAK,MAAM;UAEb,kBAAkB,UAAU,IAAI,EAAE;SACpC;SACA;QACF,KAAK;SACH,IAAI,MAAM,UAAU,GAAG;UACrB,IAAI,QAAQ;UACZ,IAAI,KAAK;UACT,IAAI,KAAK;UACT,QAAQ,MAAM,KAAK,KAAK,KAAK;UAC7B,IAAI,MAAM,UAAU,GAAG;WACrB,KAAK,MAAM;WACX,KAAK,MAAM;UACb;UACA,eAAe,gBAAgB,CAAC,IAAI,CAAC,EAAE;UACvC,eAAe,aAAa,KAAK;UACjC,eAAe,iBAAiB,gBAAgB,cAAc;UAC9D,eAAe,gBAAgB,IAAI,EAAE;UACrC,kBAAkB,iBAAiB,gBAAgB,cAAc;SACnE;SACA;QACF,KAAK;SACH,IAAI,MAAM,UAAU,GAAG;UACrB,MAAM,SAAS,MAAM;UACrB,IAAI,SAAS;UACb,IAAI,MAAM,UAAU,GAClB,SAAS,MAAM;UAEjB,kBAAkB,MAAM,QAAQ,MAAM;SACxC;SACA;QACF,KAAK;SACH,IAAI,MAAM,WAAW,GACnB,kBAAkB,IAAI,GAAG,KAAK,IAAI,MAAM,KAAK,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;SAElF;QACF,KAAK;SACH,IAAI,MAAM,WAAW,GACnB,kBAAkB,IAAI,GAAG,GAAG,GAAG,KAAK,IAAI,MAAM,KAAK,KAAK,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;SAElF;QACF,KAAK;SACH,IAAI,MAAM,WAAW,GACnB,kBAAkB,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,GAAG,GAAG,CAAC;SAE3F;OACJ;MACF;MACA,UAAU,YAAY,iBAAiB;KACzC;IACF;IACA,OAAO;GACT;GACA,SAAS,cAAc,MAAM,GAAG;IAC9B,SAAS,WAAW,IAAI;KACtB,OAAO,IAAI,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,aAAa,CAAC;KACxC,GAAG,IAAI,OAAO,GAAG,OAAO,CAAC;IAC3B;IACA,SAAS,qBAAqB,OAAO;KACnC,MAAM,IAAI,MAAM;KAChB,MAAM,IAAI,MAAM;KAChB,MAAM,WAAW,KAAK,IAAI,MAAM,SAAS;KACzC,MAAM,WAAW,KAAK,IAAI,MAAM,SAAS;KACzC,MAAM,KAAK,IAAI,QAAQ,IAAI,UAAU,IAAI,UAAU,CAAC;KACpD,MAAM,KAAK,IAAI,QAAQ,CAAC,IAAI,UAAU,IAAI,UAAU,CAAC;KACrD,MAAM,KAAK,GAAG,aAAa,CAAC;KAC5B,MAAM,KAAK,GAAG,aAAa,CAAC;KAC5B,MAAM,KAAK,eAAe,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;KACnE,MAAM,QAAQ,eAAe,KAAK,EAAE,EAAE,OAAO;KAG7C,MAAM,MAFS,eAAe,KAAK,KAAK,EAAE,UAC1B,EAAE,SAAS,KACd,EAAE;KACf,MAAM,KAAK,mBAAmB,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;KACpD,MAAM,UAAU,KAAK,KAAK,GAAG,GAAG;KAChC,MAAM,UAAU,KAAK,KAAK,GAAG,GAAG;KAChC,MAAM,UAAU,IAAI;KACpB,MAAM,UAAU,IAAI;KACpB,MAAM,YAAY,KAAK,MAAM,GAAG,IAAI,GAAG,EAAE;KAEzC,IAAI,GADmB,MAAM,YAAY,MAAM,gBAAgB,IAAI,KAAK,MAAM,OAAO,UACjE;MAClB,MAAM,SAAS,eAAe,IAAI,SAAS,GAAG,GAAG,GAAG,SAAS,GAAG,GAAG,GAAG,CAAC;MACvE,MAAM,MAAM,eAAe,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC;MACzE,MAAM,OAAO,OAAO,SAAS,GAAG,EAAE,SAAS,EAAE;MAC7C,MAAM,kBAAkB,QAAQ;OAC9B,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,IAAI,QAAQ,KAAK,IAAI,GAAG,GAAG,KAAK,IAAI,GAAG,GAAG,CAAC,EAAE,aAAa,IAAI;OAC3F,OAAO,KAAK,MAAM,MAAM,IAAI;MAC9B;MACA,MAAM,cAAc,eAAe,MAAM,WAAW;MACpD,MAAM,YAAY,eAAe,MAAM,SAAS;MAChD,IAAI,mBAAmB,CAAC,GACtB,MAAM,aAAa,CAAC,MAAM;KAE9B;IACF;IACA,SAAS,oBAAoB,OAAO;KAClC,MAAM,KAAK,mBAAmB,CAAC;KAC/B,MAAM,KAAK,mBAAmB,CAAC;KAC/B,MAAM,WAAW;KACjB,MAAM,WAAW;KACjB,MAAM,QAAQ,KAAK,OAAO,UAAU,KAAK,MAAM,EAAE,SAAS,IAAI,EAAE,SAAS,EAAE,IAAI,KAAK,MAAM,CAAC,EAAE,SAAS,IAAI,EAAE,SAAS,EAAE;KACvH,MAAM,aAAa;KACnB,IAAI,mBAAmB,CAAC,GAAG;MACzB,MAAM,eAAe;MACrB,MAAM,aAAa;MACnB,MAAM,aAAa,CAAC,MAAM;KAC5B;IACF;IACA,MAAM,WAAW,KAAK;IACtB,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,IAAI,GAAG,KAAK;KAE/C,MAAM,SADU,SAAS,GACF;KACvB,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;MACtC,MAAM,QAAQ,OAAO;MACrB,IAAI,MAAM,aAAa;OACrB,WAAW,MAAM,EAAE;OACnB,WAAW,MAAM,EAAE;MACrB,OAAO,IAAI,MAAM,oBAAoB;OACnC,WAAW,MAAM,EAAE;OACnB,WAAW,MAAM,EAAE;OACnB,WAAW,MAAM,EAAE;OACnB,WAAW,MAAM,EAAE;MACrB,OAAO,IAAI,MAAM,wBAAwB;OACvC,WAAW,MAAM,EAAE;OACnB,WAAW,MAAM,EAAE;OACnB,WAAW,MAAM,EAAE;MACrB,OAAO,IAAI,MAAM,gBAAgB;OAC/B,OAAO,IAAI,MAAM,IAAI,MAAM,EAAE;OAC7B,WAAW,MAAM;OACjB,MAAM,KAAK,OAAO;OAClB,MAAM,KAAK,OAAO;OAClB,IAAI,kBAAkB,CAAC,GACrB,qBAAqB,KAAK;YAE1B,oBAAoB,KAAK;MAE7B;KACF;IACF;GACF;GACA,SAAS,mBAAmB,GAAG;IAC7B,MAAM,KAAK,EAAE;IACb,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK;GACzC;GACA,SAAS,kBAAkB,GAAG;IAC5B,MAAM,KAAK,EAAE;IACb,MAAM,WAAW,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG;IAC5C,IAAI,aAAa,GACf,OAAO;IACT,MAAM,KAAK,mBAAmB,CAAC;IAC/B,MAAM,KAAK,mBAAmB,CAAC;IAC/B,OAAO,KAAK,IAAI,YAAY,KAAK,GAAG,IAAI,OAAO;GACjD;GACA,SAAS,mBAAmB,GAAG;IAC7B,MAAM,KAAK,EAAE;IACb,OAAO,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,EAAE;GAChD;GACA,SAAS,mBAAmB,GAAG;IAC7B,MAAM,KAAK,EAAE;IACb,OAAO,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,KAAK,GAAG,EAAE;GAChD;GACA,SAAS,mBAAmB,GAAG,GAAG,GAAG;IACnC,IAAI,KAAK,KAAK,IAAI,IAAI;IACtB,MAAM,KAAK,IAAI;IACf,MAAM,KAAK,IAAI;IACf,MAAM,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,CAAC;IACxC,IAAI,KAAK,GAAG;KACV,MAAM,MAAO,KAAK;KAClB,IAAI,IAAI;KACR,MAAM,IAAI,IAAI,IAAI,IAAI,IAAI;IAC5B,OAAO,IAAI,KAAK,GACd,MAAM,MAAO,KAAK;SACb;KACL,MAAM,KAAM;KACZ,MAAM,MAAO;IACf;IACA,IAAI,KAAK,GACP,KAAK,KAAK;SAEV,KAAK,KAAK;IAEZ,IAAI,KAAK,IAAI,EAAE,IAAI,IAAI,KAAK,IAAI,CAAC,GAAG;KAClC,IAAI,KAAK,IAAI;KACb,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC;KAC5B,KAAK,IAAI;IACX,OAAO,IAAI,KAAK,IAAI,CAAC,MAAM,GAAG;KAC5B,KAAK;KACL,KAAK;IACP,OAAO;KACL,IAAI,MAAO,KAAK;KAChB,KAAK,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC;KAC5B,KAAK,IAAI;IACX;IACA,IAAI,KAAK,GAAG;KACV,IAAI;KACJ,KAAK,CAAC;KACN,KAAK;IACP;IACA,OAAO;KAAE;KAAK;KAAK;KAAI;IAAG;GAC5B;GACA,MAAM,QAAQ,CAAC;GACf,MAAM,cAAc,CAAC;GACrB,MAAM,iBAAiB,CAAC;GACxB,MAAM,iBAAiB,IAAI,QAAQ;GACnC,MAAM,iBAAiB,IAAI,QAAQ;GACnC,MAAM,iBAAiB,IAAI,QAAQ;GACnC,MAAM,iBAAiB,IAAI,QAAQ;GACnC,MAAM,SAAS,IAAI,QAAQ;GAC3B,MAAM,SAAS,IAAI,QAAQ;GAC3B,MAAM,mBAAmB,IAAI,QAAQ;GACrC,MAAM,MAAM,IAAI,UAAU,EAAE,gBAAgB,MAAM,eAAe;GACjE,UAAU,IAAI,iBAAiB;IAC7B,MAAM;IACN,aAAa;IACb,eAAe;IACf,aAAa;IACb,gBAAgB;IAChB,eAAe;IACf,kBAAkB;GACpB,CAAC;GAED,OAAO;IADQ;IAAO,KAAK,IAAI;GACrB;EACZ;EACA,OAAO,aAAa,WAAW;GAC7B,MAAM,YAAY;GAClB,MAAM,2BAA2B;IAC/B,QAAQ;IACR,aAAa;IACb,SAAS;IACT,MAAM;IACN,OAAO;IACP,QAAQ;IACR,QAAQ;GACV;GACA,MAAM,iBAAiB;IACrB,KAAK,yBAAyB;IAC9B,GAAG;GACL;GACA,SAAS,qBAAqB,IAAI,IAAI,IAAI,IAAI;IAC5C,MAAM,KAAK,GAAG;IACd,MAAM,KAAK,GAAG;IACd,MAAM,KAAK,GAAG;IACd,MAAM,KAAK,GAAG;IACd,MAAM,KAAK,GAAG;IACd,MAAM,KAAK,GAAG;IACd,MAAM,KAAK,GAAG;IACd,MAAM,KAAK,GAAG;IACd,MAAM,QAAQ,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK;IACvD,MAAM,QAAQ,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK;IACvD,MAAM,SAAS,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK;IACxD,MAAM,KAAK,OAAO;IAClB,MAAM,KAAK,OAAO;IAClB,IAAI,UAAU,KAAK,SAAS,KAAK,MAAM,KAAK,MAAM,KAAK,KAAK,KAAK,KAAK,GACpE,OAAO;SACF,IAAI,SAAS,KAAK,UAAU,GAAG;KACpC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;MAC1B,cAAc,MAAM,IAAI,KAAK,IAAI,IAAI,EAAE;MACvC,IAAI,eAAe,OAAO,yBAAyB,QAAQ;OACzD,MAAM,QAAQ,MAAM,IAAI,KAAK;OAC7B,OAAO;QAAE,GAAG,MAAM;QAAG,GAAG,MAAM;QAAG,GAAG,eAAe;OAAE;MACvD,OAAO,IAAI,eAAe,OAAO,yBAAyB,SAGxD,OAAO;OAAE,GAAA,EAFG,KAAK,eAAe,KAAK,KAAK,KAAK,YAAY,EAAE;OAEjD,GAAA,EADA,KAAK,eAAe,KAAK,KAAK,KAAK,YAAY,EAAE;OAC9C,GAAG,eAAe;MAAE;KAEvC;KACA,OAAO;IACT,OAAO;KACL,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;MAC1B,cAAc,MAAM,IAAI,KAAK,IAAI,IAAI,EAAE;MACvC,IAAI,eAAe,OAAO,yBAAyB,QAAQ;OACzD,MAAM,QAAQ,MAAM,IAAI,KAAK;OAC7B,OAAO;QAAE,GAAG,MAAM;QAAG,GAAG,MAAM;QAAG,GAAG,eAAe;OAAE;MACvD;KACF;KAGA,OAAO;MAAE,GAAA,EAFG,KAAK,MAAM,KAAK,KAAK,YAAY,EAAE;MAEnC,GAAA,EADA,KAAK,MAAM,KAAK,KAAK,YAAY,EAAE;MAChC,GAAG;KAAG;IACvB;GACF;GACA,SAAS,cAAc,GAAG,WAAW,SAAS;IAC5C,MAAM,KAAK,QAAQ,IAAI,UAAU;IACjC,MAAM,KAAK,QAAQ,IAAI,UAAU;IACjC,MAAM,KAAK,EAAE,IAAI,UAAU;IAC3B,MAAM,KAAK,EAAE,IAAI,UAAU;IAC3B,MAAM,KAAK,KAAK,KAAK,KAAK;IAC1B,IAAI,EAAE,MAAM,UAAU,KAAK,EAAE,MAAM,UAAU,GAAG;KAC9C,eAAe,MAAM,yBAAyB;KAC9C,eAAe,IAAI;KACnB;IACF;IACA,IAAI,EAAE,MAAM,QAAQ,KAAK,EAAE,MAAM,QAAQ,GAAG;KAC1C,eAAe,MAAM,yBAAyB;KAC9C,eAAe,IAAI;KACnB;IACF;IACA,IAAI,KAAK,CAAC,OAAO,SAAS;KACxB,eAAe,MAAM,yBAAyB;KAC9C;IACF;IACA,IAAI,KAAK,OAAO,SAAS;KACvB,eAAe,MAAM,yBAAyB;KAC9C;IACF;IACA,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;KAC9B,eAAe,MAAM,yBAAyB;KAC9C;IACF;IACA,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,EAAE,GAAG;KAC/D,eAAe,MAAM,yBAAyB;KAC9C;IACF;IACA,IAAI;IACJ,IAAI,OAAO,GACT,IAAI,KAAK;SAET,IAAI,KAAK;IAEX,eAAe,MAAM,yBAAyB;IAC9C,eAAe,IAAI;GACrB;GACA,SAAS,iBAAiB,OAAO,OAAO;IACtC,MAAM,mBAAmB,CAAC;IAC1B,MAAM,gBAAgB,CAAC;IACvB,KAAK,IAAI,QAAQ,GAAG,QAAQ,MAAM,QAAQ,SAAS;KACjD,MAAM,iBAAiB,MAAM,QAAQ;KACrC,MAAM,eAAe,MAAM;KAC3B,KAAK,IAAI,SAAS,GAAG,SAAS,MAAM,QAAQ,UAAU;MACpD,MAAM,iBAAiB,MAAM,SAAS;MACtC,MAAM,eAAe,MAAM;MAC3B,MAAM,eAAe,qBAAqB,gBAAgB,cAAc,gBAAgB,YAAY;MACpG,IAAI,iBAAiB,QAAQ,iBAAiB,MAC3C,MAAM,EAAE,KAAK,aAAa,IAAI,OAAO,WAAW,EAAE,KAAK,aAAa,IAAI,OAAO,OAClF,MAAM,KAAK,GAAG;OACZ,iBAAiB,KAAK,YAAY;OAClC,cAAc,KAAK,IAAI,QAAQ,aAAa,GAAG,aAAa,CAAC,CAAC;MAChE;KACF;IACF;IACA,OAAO;GACT;GACA,SAAS,yBAAyB,UAAU,aAAa,OAAO;IAC9D,MAAM,SAAS,IAAI,QAAQ;IAC3B,YAAY,UAAU,MAAM;IAC5B,MAAM,mBAAmB,CAAC;IAC1B,MAAM,SAAS,SAAS;KACtB,IAAI,KAAK,YAAY,cAAc,MAAM,GAEvC,iBADuC,UAAU,KAAK,MAC1C,EAAE,SAAS,MAAM;MAC3B,iBAAiB,KAAK;OAAE,YAAY,KAAK;OAAY,MAAM,KAAK;OAAM,OAAO;MAAE,CAAC;KAClF,CAAC;IAEL,CAAC;IACD,iBAAiB,MAAM,IAAI,OAAO;KAChC,OAAO,GAAG,MAAM,IAAI,GAAG,MAAM;IAC/B,CAAC;IACD,OAAO;GACT;GACA,SAAS,SAAS,YAAY,UAAU,eAAe,eAAe,WAAW;IAC/E,IAAI,cAAc,QAAQ,cAAc,KAAK,KAAK,cAAc,IAC9D,YAAY;IAEd,MAAM,oBAAoB,IAAI,QAAQ;IACtC,WAAW,YAAY,UAAU,iBAAiB;IAKlD,MAAM,wBAAwB,yBAAyB,CAHrD,IAAI,QAAQ,eAAe,kBAAkB,CAAC,GAC9C,IAAI,QAAQ,eAAe,kBAAkB,CAAC,CAEc,GAAG,WAAW,aAAa,QAAQ;IACjG,sBAAsB,MAAM,IAAI,OAAO;KACrC,OAAO,GAAG,MAAM,IAAI,GAAG,MAAM;IAC/B,CAAC;IACD,MAAM,oBAAoB,CAAC;IAC3B,MAAM,qBAAqB,CAAC;IAC5B,sBAAsB,SAAS,OAAO;KACpC,IAAI,GAAG,eAAe,WAAW,YAC/B,kBAAkB,KAAK,EAAE;UAEzB,mBAAmB,KAAK,EAAE;IAE9B,CAAC;IACD,MAAM,eAAe,kBAAkB,GAAG,MAAM;IAChD,MAAM,QAAQ,CAAC;IACf,IAAI,IAAI;IACR,OAAO,IAAI,mBAAmB,UAAU,mBAAmB,GAAG,MAAM,IAAI,cAAc;KACpF,IAAI,MAAM,SAAS,KAAK,MAAM,MAAM,SAAS,OAAO,mBAAmB,GAAG,YACxE,MAAM,IAAI;UAEV,MAAM,KAAK,mBAAmB,GAAG,UAAU;KAE7C;IACF;IACA,MAAM,KAAK,WAAW,UAAU;IAChC,IAAI,cAAc,WAAW;KAC3B,MAAM,SAAS,MAAM,SAAS,MAAM,IAAI,OAAO;KAC/C,MAAM,YAAY,MAAM,MAAM,SAAS;KACvC,OAAO;MAAE,YAAY,WAAW;MAAY;MAAQ,KAAK;KAAU;IACrE,OAAO,IAAI,cAAc,WAAW;KAClC,IAAI,SAAS;KACb,IAAI,YAAY;KAChB,IAAI,cAAc;KAClB,KAAK,IAAI,KAAK,GAAG,KAAK,MAAM,QAAQ,MAAM;MACxC,MAAM,aAAa,MAAM;MACzB,IAAI,QAAQ;OACV,cAAc,SAAS,YAAY;OACnC,SAAS;OACT,YAAY;MACd,OAAO,IAAI,gBAAgB,SAAS,YAAY,MAAM;OACpD,cAAc,SAAS,YAAY;OACnC,SAAS;MACX;KACF;KACA,OAAO;MAAE,YAAY,WAAW;MAAY;MAAQ,KAAK;KAAU;IACrE,OACE,QAAQ,KAAK,kBAAiB,YAAY,kCAAiC;GAE/E;GACA,IAAI,eAAe;GACnB,IAAI,eAAe;GACnB,IAAI,cAAc,UAAU,SAAS,KAAK,MAAM;IAC9C,MAAM,SAAS,EAAE,UAAU;IAC3B,IAAI,OAAO;IACX,IAAI,OAAO;IACX,IAAI,OAAO;IACX,IAAI,OAAO;IACX,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;KACtC,MAAM,KAAK,OAAO;KAClB,IAAI,GAAG,IAAI,MACT,OAAO,GAAG;KAEZ,IAAI,GAAG,IAAI,MACT,OAAO,GAAG;KAEZ,IAAI,GAAG,IAAI,MACT,OAAO,GAAG;KAEZ,IAAI,GAAG,IAAI,MACT,OAAO,GAAG;IAEd;IACA,IAAI,gBAAgB,MAClB,eAAe,OAAO;IAExB,IAAI,gBAAgB,MAClB,eAAe,OAAO;IAExB,OAAO;KACL,QAAQ,EAAE;KACV;KACA,MAAM,WAAW,YAAY,MAAM;KACnC,YAAY;KACZ,aAAa,IAAI,KAAK,IAAI,QAAQ,MAAM,IAAI,GAAG,IAAI,QAAQ,MAAM,IAAI,CAAC;IACxE;GACF,CAAC;GACD,cAAc,YAAY,QAAQ,OAAO,GAAG,OAAO,SAAS,CAAC;GAC7D,KAAK,IAAI,aAAa,GAAG,aAAa,YAAY,QAAQ,cACxD,YAAY,YAAY,aAAa;GAEvC,MAAM,UAAU,YAAY,KACzB,MAAM,SACL,GACA,aACA,cACA,cACA,UAAU,WAAW,UAAU,SAAS,MAAM,WAAW,KAAK,CAChE,CACF;GACA,MAAM,iBAAiB,CAAC;GACxB,YAAY,SAAS,MAAM;IAEzB,IAAI,CADa,QAAQ,EAAE,YACb,QAAQ;KACpB,MAAM,QAAQ,IAAI,MAAM;KACxB,MAAM,SAAS,EAAE;KAEjB,QADsB,QAAQ,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,UACxD,EAAE,SAAS,MAAM;MACnB,MAAM,OAAO,YAAY,EAAE;MAC3B,MAAM,OAAO,IAAI,KAAK;MACtB,KAAK,SAAS,KAAK;MACnB,MAAM,MAAM,KAAK,IAAI;KACvB,CAAC;KACD,eAAe,KAAK,KAAK;IAC3B;GACF,CAAC;GACD,OAAO;EACT;EACA,OAAO,eAAe,OAAO,OAAO,UAAU,SAAS,YAAY;GACjE,QAAQ,UAAU,KAAK,IAAI,QAAQ;GACnC,QAAQ,UAAU,KAAK,IAAI,QAAQ;GACnC,WAAW,aAAa,KAAK,IAAI,WAAW;GAC5C,UAAU,YAAY,KAAK,IAAI,UAAU;GACzC,aAAa,eAAe,KAAK,IAAI,aAAa;GAClD,OAAO;IACL,aAAa;IACb,aAAa;IACb,gBAAgB;IAChB,eAAe;IACf,kBAAkB;GACpB;EACF;EACA,OAAO,eAAe,QAAQ,OAAO,cAAc,aAAa;GAC9D,MAAM,WAAW,CAAC;GAClB,MAAM,UAAU,CAAC;GACjB,MAAM,MAAM,CAAC;GACb,IAAI,WAAW,0BAA0B,QAAQ,OAAO,cAAc,aAAa,UAAU,SAAS,GAAG,MAAM,GAC7G,OAAO;GAET,MAAM,WAAW,IAAI,eAAe;GACpC,SAAS,aAAa,YAAY,IAAI,uBAAuB,UAAU,CAAC,CAAC;GACzE,SAAS,aAAa,UAAU,IAAI,uBAAuB,SAAS,CAAC,CAAC;GACtE,SAAS,aAAa,MAAM,IAAI,uBAAuB,KAAK,CAAC,CAAC;GAC9D,OAAO;EACT;EACA,OAAO,0BAA0B,QAAQ,OAAO,cAAc,aAAa,UAAU,SAAS,KAAK,cAAc;GAC/G,MAAM,WAAW,IAAI,QAAQ;GAC7B,MAAM,WAAW,IAAI,QAAQ;GAC7B,MAAM,WAAW,IAAI,QAAQ;GAC7B,MAAM,WAAW,IAAI,QAAQ;GAC7B,MAAM,WAAW,IAAI,QAAQ;GAC7B,MAAM,WAAW,IAAI,QAAQ;GAC7B,MAAM,WAAW,IAAI,QAAQ;GAC7B,MAAM,aAAa,IAAI,QAAQ;GAC/B,MAAM,aAAa,IAAI,QAAQ;GAC/B,MAAM,UAAU,IAAI,QAAQ;GAC5B,MAAM,UAAU,IAAI,QAAQ;GAC5B,MAAM,gBAAgB,IAAI,QAAQ;GAClC,MAAM,gBAAgB,IAAI,QAAQ;GAClC,MAAM,aAAa,IAAI,QAAQ;GAC/B,MAAM,aAAa,IAAI,QAAQ;GAC/B,MAAM,aAAa,IAAI,QAAQ;GAC/B,MAAM,aAAa,IAAI,QAAQ;GAC/B,eAAe,iBAAiB,KAAK,IAAI,eAAe;GACxD,cAAc,gBAAgB,KAAK,IAAI,cAAc;GACrD,eAAe,iBAAiB,KAAK,IAAI,eAAe;GACxD,SAAS,uBAAuB,MAAM;GACtC,MAAM,YAAY,OAAO;GACzB,IAAI,YAAY,GACd,OAAO;GACT,MAAM,WAAW,OAAO,GAAG,OAAO,OAAO,YAAY,EAAE;GACvD,IAAI;GACJ,IAAI,gBAAgB,OAAO;GAC3B,IAAI;GACJ,MAAM,eAAe,MAAM,cAAc;GACzC,MAAM,SAAS,KAAK,YAAY;GAChC,IAAI,KAAK,GAAG;GACZ,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,IAAI,0BAA0B;GAC9B,IAAI,cAAc;GAClB,IAAI,oBAAoB,eAAe;GACvC,IAAI,sBAAsB,eAAe;GACzC,UAAU,OAAO,IAAI,OAAO,IAAI,QAAQ,EAAE,eAAe,YAAY;GACrE,WAAW,KAAK,OAAO,EAAE,EAAE,IAAI,QAAQ;GACvC,WAAW,KAAK,OAAO,EAAE,EAAE,IAAI,QAAQ;GACvC,QAAQ,KAAK,UAAU;GACvB,QAAQ,KAAK,UAAU;GACvB,KAAK,IAAI,SAAS,GAAG,SAAS,WAAW,UAAU;IACjD,eAAe,OAAO;IACtB,IAAI,WAAW,YAAY,GACzB,IAAI,UACF,YAAY,OAAO;SAEnB,YAAY,KAAK;SAEnB,YAAY,OAAO,SAAS;IAE9B,MAAM,UAAU;IAChB,UAAU,eAAe,cAAc,OAAO;IAC9C,SAAS,KAAK,OAAO,EAAE,eAAe,YAAY;IAClD,cAAc,KAAK,YAAY,EAAE,IAAI,QAAQ;IAC7C,cAAc,KAAK,YAAY,EAAE,IAAI,QAAQ;IAC7C,KAAK,KAAK;IACV,oBAAoB;IACpB,IAAI,cAAc,KAAK,GAAG;KACxB,UAAU,cAAc,WAAW,QAAQ;KAC3C,SAAS,KAAK,QAAQ,EAAE,eAAe,YAAY;KACnD,WAAW,KAAK,YAAY,EAAE,IAAI,QAAQ;KAC1C,WAAW,KAAK,YAAY,EAAE,IAAI,QAAQ;KAC1C,mBAAmB;KACnB,SAAS,WAAW,WAAW,aAAa;KAC5C,IAAI,QAAQ,IAAI,QAAQ,IAAI,GAC1B,mBAAmB;KAErB,IAAI,WAAW,GACb,0BAA0B;KAC5B,SAAS,WAAW,WAAW,YAAY;KAC3C,SAAS,UAAU;KACnB,MAAM,MAAM,KAAK,IAAI,QAAQ,IAAI,QAAQ,CAAC;KAC1C,IAAI,MAAM,OAAO,SAAS;MACxB,MAAM,YAAY,eAAe;MACjC,SAAS,eAAe,CAAC,SAAS;MAClC,SAAS,WAAW,cAAc,aAAa;MAC/C,SAAS,KAAK,QAAQ,EAAE,UAAU,SAAS,EAAE,IAAI,QAAQ;MACzD,WAAW,KAAK,QAAQ,EAAE,OAAO;MACjC,MAAM,eAAe,SAAS,OAAO;MACrC,MAAM,oBAAoB,SAAS,OAAO;MAC1C,SAAS,aAAa,iBAAiB;MACvC,SAAS,WAAW,WAAW,YAAY;MAC3C,MAAM,oBAAoB,SAAS,OAAO;MAC1C,SAAS,aAAa,iBAAiB;MACvC,IAAI,SAAS,IAAI,UAAU,IAAI,qBAAqB,SAAS,IAAI,UAAU,IAAI,mBAC7E,oBAAoB;MAEtB,WAAW,KAAK,QAAQ,EAAE,IAAI,YAAY;MAC1C,WAAW,IAAI,YAAY;MAC3B,UAAU;MACV,IAAI,mBACF,IAAI,kBAAkB;OACpB,WAAW,KAAK,UAAU;OAC1B,cAAc,KAAK,UAAU;MAC/B,OAAO;OACL,WAAW,KAAK,UAAU;OAC1B,cAAc,KAAK,UAAU;MAC/B;WAEA,qBAAqB;MAEvB,QAAQ,MAAM,gBAAd;OACE,KAAK;QACH,yBAAyB,kBAAkB,mBAAmB,EAAE;QAChE;OACF,KAAK;QACH,wCAAwC,kBAAkB,iBAAiB;QAC3E,IAAI,kBACF,mBAAmB,cAAc,eAAe,YAAY,IAAI,CAAC;aAEjE,mBAAmB,cAAc,YAAY,eAAe,IAAI,CAAC;QAEnE;OAGF;QACE,MAAM,gBAAgB,eAAe,MAAM,mBAAmB;QAC9D,IAAI,gBAAgB,GAClB,IAAI,MAAM,mBAAmB,cAAc;SACzC,yBAAyB,kBAAkB,mBAAmB,EAAE;SAChE;QACF,OAAO;SACL,wCAAwC,kBAAkB,iBAAiB;SAC3E,IAAI,kBAAkB;UACpB,SAAS,WAAW,YAAY,aAAa,EAAE,eAAe,aAAa,EAAE,IAAI,aAAa;UAC9F,SAAS,WAAW,YAAY,UAAU,EAAE,eAAe,aAAa,EAAE,IAAI,UAAU;UACxF,UAAU,eAAe,IAAI,CAAC;UAC9B,UAAU,UAAU,IAAI,CAAC;UACzB,UAAU,cAAc,IAAI,EAAG;UAC/B,UAAU,cAAc,IAAI,EAAG;UAC/B,UAAU,UAAU,IAAI,CAAC;UACzB,UAAU,UAAU,IAAI,CAAC;UACzB,UAAU,cAAc,IAAI,EAAG;UAC/B,UAAU,UAAU,IAAI,CAAC;UACzB,UAAU,YAAY,IAAI,CAAC;SAC7B,OAAO;UACL,SAAS,WAAW,YAAY,aAAa,EAAE,eAAe,aAAa,EAAE,IAAI,aAAa;UAC9F,SAAS,WAAW,YAAY,UAAU,EAAE,eAAe,aAAa,EAAE,IAAI,UAAU;UACxF,UAAU,eAAe,IAAI,CAAC;UAC9B,UAAU,UAAU,IAAI,CAAC;UACzB,UAAU,cAAc,IAAI,EAAG;UAC/B,UAAU,cAAc,IAAI,EAAG;UAC/B,UAAU,UAAU,IAAI,CAAC;UACzB,UAAU,UAAU,IAAI,CAAC;UACzB,UAAU,cAAc,IAAI,EAAG;UAC/B,UAAU,UAAU,IAAI,CAAC;UACzB,UAAU,YAAY,IAAI,CAAC;SAC7B;QACF;aACK;SACL,IAAI,mBAAmB;UACrB,IAAI,kBAAkB;WACpB,UAAU,YAAY,IAAI,CAAC;WAC3B,UAAU,YAAY,IAAI,CAAC;WAC3B,UAAU,YAAY,IAAI,CAAC;WAC3B,UAAU,YAAY,IAAI,CAAC;WAC3B,UAAU,YAAY,IAAI,CAAC;WAC3B,UAAU,YAAY,IAAI,CAAC;UAC7B,OAAO;WACL,UAAU,YAAY,IAAI,CAAC;WAC3B,UAAU,YAAY,IAAI,CAAC;WAC3B,UAAU,YAAY,IAAI,CAAC;WAC3B,UAAU,YAAY,IAAI,CAAC;WAC3B,UAAU,YAAY,IAAI,CAAC;WAC3B,UAAU,YAAY,IAAI,CAAC;UAC7B;UACA,IAAI,kBACF,WAAW,KAAK,UAAU;eAE1B,WAAW,KAAK,UAAU;SAE9B,OACE,IAAI,kBAAkB;UACpB,UAAU,eAAe,IAAI,CAAC;UAC9B,UAAU,YAAY,IAAI,CAAC;UAC3B,UAAU,cAAc,IAAI,EAAG;UAC/B,UAAU,cAAc,IAAI,EAAG;UAC/B,UAAU,YAAY,IAAI,CAAC;UAC3B,UAAU,YAAY,IAAI,CAAC;SAC7B,OAAO;UACL,UAAU,eAAe,IAAI,CAAC;UAC9B,UAAU,YAAY,IAAI,CAAC;UAC3B,UAAU,cAAc,IAAI,EAAG;UAC/B,UAAU,cAAc,IAAI,EAAG;UAC/B,UAAU,YAAY,IAAI,CAAC;UAC3B,UAAU,YAAY,IAAI,CAAC;SAC7B;SAEF,UAAU;QACZ;QACA;MACJ;KACF,OACE,qBAAqB;IAEzB,OACE,qBAAqB;IAEvB,IAAI,CAAC,YAAY,WAAW,YAAY,GACtC,eAAe,OAAO,IAAI,SAAS,SAAS,kBAAkB,MAAM,EAAE;IAExE,KAAK;IACL,gBAAgB;IAChB,WAAW,KAAK,UAAU;IAC1B,WAAW,KAAK,UAAU;GAC5B;GACA,IAAI,CAAC,UACH,eAAe,cAAc,eAAe,eAAe,kBAAkB,OAAO,EAAE;QACjF,IAAI,qBAAqB,UAAU;IACxC,IAAI,YAAY;IAChB,IAAI,YAAY;IAChB,IAAI,4BAA4B,kBAAkB;KAChD,YAAY;KACZ,YAAY;IACd;IACA,IAAI;SACE,WAAW,yBAAyB;MACtC,UAAU,QAAQ,UAAU,CAAK;MACjC,UAAU,QAAQ,UAAU,CAAK;MACjC,IAAI,SACF,UAAU,QAAQ,UAAU,CAAK;KAErC;WAEA,IAAI,WAAW,CAAC,yBAAyB;KACvC,UAAU,QAAQ,UAAU,CAAK;KACjC,UAAU,QAAQ,UAAU,CAAK;KACjC,IAAI,SACF,UAAU,QAAQ,UAAU,CAAK;IAErC;GAEJ;GACA,OAAO;GACP,SAAS,UAAU,IAAI,IAAI,QAAQ;IACjC,OAAO,WAAW,IAAI,EAAE;IACxB,OAAO,OAAO,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,EAAE,UAAU;GACnD;GACA,SAAS,UAAU,UAAU,GAAG,GAAG;IACjC,IAAI,UAAU;KACZ,SAAS,qBAAqB,SAAS;KACvC,SAAS,oBAAoB,KAAK,SAAS;KAC3C,SAAS,oBAAoB,KAAK;KAClC,IAAI,SAAS;MACX,QAAQ,qBAAqB;MAC7B,QAAQ,oBAAoB,KAAK;MACjC,QAAQ,oBAAoB,KAAK;KACnC;KACA,qBAAqB;KACrB,IAAI,KAAK;MACP,IAAI,uBAAuB;MAC3B,IAAI,sBAAsB,KAAK;MAC/B,uBAAuB;KACzB;IACF;IACA,eAAe;GACjB;GACA,SAAS,mBAAmB,QAAQ,IAAI,IAAI,GAAG,GAAG;IAChD,SAAS,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,UAAU;IACxC,SAAS,KAAK,EAAE,EAAE,IAAI,MAAM,EAAE,UAAU;IACxC,IAAI,QAAQ,KAAK;IACjB,MAAM,MAAM,SAAS,IAAI,QAAQ;IACjC,IAAI,KAAK,IAAI,GAAG,IAAI,GAClB,QAAQ,KAAK,IAAI,KAAK,KAAK,GAAG,CAAC;IACjC,SAAS;IACT,SAAS,KAAK,EAAE;IAChB,KAAK,IAAI,IAAI,GAAG,KAAK,eAAe,GAAG,IAAI,IAAI,KAAK;KAClD,SAAS,KAAK,QAAQ,EAAE,aAAa,QAAQ,KAAK;KAClD,UAAU,UAAU,GAAG,CAAC;KACxB,UAAU,UAAU,GAAG,CAAC;KACxB,UAAU,QAAQ,GAAG,EAAG;KACxB,SAAS,KAAK,QAAQ;IACxB;IACA,UAAU,UAAU,GAAG,CAAC;IACxB,UAAU,IAAI,GAAG,CAAC;IAClB,UAAU,QAAQ,GAAG,EAAG;GAC1B;GACA,SAAS,uBAAuB;IAC9B,UAAU,YAAY,IAAI,CAAC;IAC3B,UAAU,YAAY,IAAI,CAAC;IAC3B,UAAU,eAAe,IAAI,CAAC;IAC9B,UAAU,YAAY,IAAI,CAAC;IAC3B,UAAU,eAAe,IAAI,CAAC;IAC9B,UAAU,eAAe,IAAI,CAAC;GAChC;GACA,SAAS,yBAAyB,mBAAmB,oBAAoB,GAAG;IAC1E,IAAI,oBACF,IAAI,mBAAmB;KACrB,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,eAAe,IAAI,CAAC;KAC9B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,eAAe,IAAI,CAAC;KAC9B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,eAAe,GAAG,CAAC;KAC7B,UAAU,YAAY,GAAG,CAAC;KAC1B,UAAU,YAAY,GAAG,EAAG;IAC9B,OAAO;KACL,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,eAAe,IAAI,CAAC;KAC9B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,eAAe,IAAI,CAAC;KAC9B,UAAU,eAAe,GAAG,CAAC;KAC7B,UAAU,YAAY,GAAG,CAAC;KAC1B,UAAU,YAAY,GAAG,CAAC;IAC5B;SAEA,IAAI,mBAAmB;KACrB,UAAU,eAAe,GAAG,CAAC;KAC7B,UAAU,YAAY,GAAG,CAAC;KAC1B,UAAU,cAAc,GAAG,EAAG;IAChC,OAAO;KACL,UAAU,eAAe,GAAG,CAAC;KAC7B,UAAU,YAAY,GAAG,CAAC;KAC1B,UAAU,cAAc,GAAG,EAAG;IAChC;GAEJ;GACA,SAAS,wCAAwC,mBAAmB,oBAAoB;IACtF,IAAI,oBACF,IAAI,mBAAmB;KACrB,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,eAAe,IAAI,CAAC;KAC9B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,eAAe,IAAI,CAAC;KAC9B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,eAAe,IAAI,CAAC;KAC9B,UAAU,cAAc,IAAI,EAAG;KAC/B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,cAAc,IAAI,EAAG;KAC/B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,YAAY,IAAI,CAAC;IAC7B,OAAO;KACL,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,eAAe,IAAI,CAAC;KAC9B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,eAAe,IAAI,CAAC;KAC9B,UAAU,eAAe,IAAI,CAAC;KAC9B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,cAAc,IAAI,EAAG;KAC/B,UAAU,cAAc,IAAI,EAAG;KAC/B,UAAU,YAAY,IAAI,CAAC;KAC3B,UAAU,YAAY,IAAI,CAAC;IAC7B;GAEJ;GACA,SAAS,eAAe,QAAQ,IAAI,IAAI,mBAAmB,OAAO,GAAG;IACnE,QAAQ,MAAM,eAAd;KACE,KAAK;MACH,IAAI,OACF,mBAAmB,QAAQ,IAAI,IAAI,GAAG,EAAG;WAEzC,mBAAmB,QAAQ,IAAI,IAAI,GAAG,EAAG;MAE3C;KACF,KAAK;MACH,IAAI,OAAO;OACT,SAAS,WAAW,IAAI,MAAM;OAC9B,SAAS,IAAI,SAAS,GAAG,CAAC,SAAS,CAAC;OACpC,SAAS,WAAW,UAAU,QAAQ,EAAE,IAAI,MAAM;OAClD,SAAS,WAAW,UAAU,QAAQ,EAAE,IAAI,MAAM;OAClD,IAAI,mBAAmB;QACrB,SAAS,QAAQ,UAAU,CAAK;QAChC,SAAS,QAAQ,UAAU,CAAK;QAChC,SAAS,QAAQ,UAAU,CAAK;OAClC,OAAO;QACL,SAAS,QAAQ,UAAU,CAAK;QAChC,IAAI,OAAe,IAAI,SAAS,QAAQ,UAAU,CAAK,IAAI,SAAS,QAAQ,UAAU,CAAK;QAC3F,SAAS,QAAQ,UAAU,CAAK;OAClC;MACF,OAAO;OACL,SAAS,WAAW,IAAI,MAAM;OAC9B,SAAS,IAAI,SAAS,GAAG,CAAC,SAAS,CAAC;OACpC,SAAS,WAAW,UAAU,QAAQ,EAAE,IAAI,MAAM;OAClD,SAAS,WAAW,UAAU,QAAQ,EAAE,IAAI,MAAM;OAClD,MAAM,KAAK,SAAS;OACpB,IAAI,mBAAmB;QACrB,SAAS,QAAQ,UAAU,KAAK,CAAK;QACrC,SAAS,QAAQ,UAAU,KAAK,CAAK;QACrC,SAAS,QAAQ,UAAU,KAAK,EAAK;OACvC,OAAO;QACL,SAAS,QAAQ,UAAU,KAAK,CAAK;QACrC,SAAS,QAAQ,UAAU,KAAK,CAAK;QACrC,SAAS,QAAQ,UAAU,KAAK,EAAK;OACvC;MACF;MACA;IACJ;GACF;GACA,SAAS,uBAAuB,SAAS;IACvC,IAAI,YAAY;IAChB,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,SAAS,GAAG,IAAI,GAAG,KAC7C,IAAI,QAAQ,GAAG,WAAW,QAAQ,IAAI,EAAE,IAAI,aAAa;KACvD,YAAY;KACZ;IACF;IAEF,IAAI,CAAC,WACH,OAAO;IACT,MAAM,YAAY,CAAC;IACnB,UAAU,KAAK,QAAQ,EAAE;IACzB,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,SAAS,GAAG,IAAI,GAAG,KAC7C,IAAI,QAAQ,GAAG,WAAW,QAAQ,IAAI,EAAE,KAAK,aAC3C,UAAU,KAAK,QAAQ,EAAE;IAG7B,UAAU,KAAK,QAAQ,QAAQ,SAAS,EAAE;IAC1C,OAAO;GACT;EACF;CACF;CACA,OAAO;AACT,GAAG;;;ACzxDH,IAAMC,+BAA6B,IAAI,QAAQ;AAC/C,IAAM,iBAAN,cAA6B,OAAO;CAClC,YAAY,SAAS;EACnB,MAAM,OAAO;EACb,KAAK,cAAc;EACnB,KAAK,iBAAiB;EACtB,KAAK,gBAAgB;EACrB,KAAK,gBAAgB,CAAC;EACtB,KAAK,MAAM;EACX,KAAK,cAAc;EACnB,KAAK,aAAa,CAAC;EACnB,KAAK,mBAAmB;EACxB,KAAK,kBAAkB;EACvB,KAAK,eAAe,CAAC;EACrB,KAAK,YAAY,CAAC;CACpB;CACA,eAAe,MAAM;EACnB,KAAK,cAAc;EACnB,OAAO;CACT;CACA,eAAe,aAAa;EAC1B,KAAK,cAAc;EACnB,OAAO;CACT;CACA,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,MAAM,SAAS,IAAI,WAAW,KAAK,OAAO;EAC1C,OAAO,QAAQ,KAAK,IAAI;EACxB,OAAO,gBAAgB,aAAa;EACpC,OAAO,iBAAiB,KAAK,aAAa;EAC1C,KAAK,MAAM;EACX,OAAO,KACL,MACC,WAAW;GACV,IAAIA,aAAW,IAAI,MAAM,GAEvB,OADmBA,aAAW,IAAI,MAClB,EAAE,QAAQ,KAAK,MAAM,EAAE,MAAM,OAAO;GAEtD,KAAK,cAAc,QAAQ,GAAG,EAAE,KAAK,MAAM,EAAE,MAAM,OAAO;EAC5D,GACA,YACA,OACF;CACF;CACA,QAAQ;EACN,QAAQ,IACN,eACA,KAAK,WAAW,KAAK,WAAW,OAAO,SAAS,CAClD;CACF;CACA,cAAc,QAAQ,KAAK;EACzB,IAAI;EACJ,IAAI;EACJ,MAAM,WAAW,OAAO;EACxB,MAAM,gBAAgB,KAAK,WAAW,QAAQ,EAAE,MAAM,YAAY;GAChE,SAAS;GACT,SAAS,KAAK;GACd,OAAO,IAAI,SAAS,SAAS,WAAW;IACtC,OAAO,WAAW,UAAU;KAAE;KAAS;IAAO;IAC9C,OAAO,YAAY;KAAE,MAAM;KAAU,IAAI;KAAQ;IAAO,GAAG,CAAC,MAAM,CAAC;GACrE,CAAC;EACH,CAAC,EAAE,MAAM,YAAY,KAAK,gBAAgB,QAAQ,IAAI,CAAC;EACvD,cAAc,YAAY,IAAI,EAAE,WAAW;GACzC,IAAI,UAAU,QACZ,KAAK,aAAa,QAAQ,MAAM;EAEpC,CAAC;EACD,aAAW,IAAI,QAAQ;GACrB;GACA,SAAS;EACX,CAAC;EACD,OAAO;CACT;CACA,MAAM,MAAM,QAAQ,SAAS;EAC3B,KAAK,cAAc,MAAM,EAAE,EAAE,KAAK,MAAM,EAAE,MAAM,OAAO;CACzD;CACA,kBAAkB,UAAU;EAC1B,MAAM,MAAM,CAAC;EACb,IAAI,OAAO,SAAS;EACpB,IAAI,QAAQ,CAAC;EACb,IAAI,MAAM,IAAI,SAAS,MAAM;EAC7B,IAAI,MAAM,IAAI,SAAS,MAAM;EAC7B,IAAI,MAAM,IAAI,SAAS,MAAM;EAC7B,IAAI,OAAO,SAAS;EACpB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,UAAU,QAAQ,KAAK;GAC9C,MAAM,IAAI,KAAK,UAAU;GACzB,MAAM,OAAO,CAAC;GACd,KAAK,OAAO,EAAE;GACd,KAAK,QAAQ,CAAC;GACd,KAAK,MAAM,IAAI,EAAE,MAAM;GACvB,KAAK,MAAM,IAAI,EAAE,MAAM;GACvB,KAAK,MAAM,IAAI,EAAE,MAAM;GACvB,KAAK,OAAO,EAAE;GACd,IAAI,KAAK,UAAU,GAAG,MAAM,KAAK,UAAU,IAAI,GAC7C,OAAO;EAEX;EACA,KAAK,UAAU,KAAK,QAAQ;EAC5B,OAAO;CACT;CACA,gBAAgB,UAAU;EACxB,IAAI,aAAa,KAAK,GACpB,OAAO,IAAI,qBAAqB;GAC9B,OAAO,IAAI,MAAM,GAAG,GAAG,CAAC;GACxB,WAAW;GACX,MAAM;GACN,MAAM;EACR,CAAC;EAEH,MAAM,gBAAgB,SAAS;EAC/B,MAAM,eAAe,IAAI,MAAM,cAAc,IAAI,KAAK,cAAc,IAAI,KAAK,cAAc,IAAI,GAAG;EAClG,IAAI,cAAc,MAAM,KAAK,cAAc,MAAM,KAAK,cAAc,MAAM,GAAG;GAC3E,aAAa,IAAI;GACjB,aAAa,IAAI;GACjB,aAAa,IAAI;EACnB;EACA,MAAM,MAAM,IAAI,qBAAqB;GACnC,OAAO;GACP,MAAM,SAAS;GACf,MAAM;GACN,aAAa,SAAS,eAAe,IAAI,OAAO;GAChD,SAAS,IAAI,SAAS;EACxB,CAAC;EACD,MAAM,gBAAgB,IAAI,cAAc;EACxC,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,SAAS,QAAQ,KAAK;GACjD,MAAM,UAAU,SAAS,SAAS;GAClC,IAAI,QAAQ,UAAU,MAAM;IAC1B,MAAM,MAAM,cAAc,KAAK,QAAQ,KAAK;IAC5C,QAAQ,QAAQ,MAAhB;KACE,KAAK;MACH,IAAI,MAAM;MACV;KACF,KAAK;MACH,IAAI,UAAU;MACd;KACF,KAAK;MACH,IAAI,WAAW;MACf,IAAI,cAAc;MAClB;KACF,KAAK;MACH,IAAI,SAAS;MACb;IACJ;GACF;EACF;EACA,OAAO;CACT;CACA,gBAAgB,MAAM;EACpB,MAAM,SAAS,IAAI,SAAS;EAC5B,MAAM,4BAA4B,CAAC;EACnC,MAAM,sBAAsB,CAAC;EAC7B,MAAM,qBAAqB,CAAC;EAC5B,OAAO,SAAS,YAAY,KAAK;EACjC,OAAO,SAAS,YAAY,KAAK;EACjC,OAAO,SAAS,cAAc,KAAK;EACnC,OAAO,SAAS,gBAAgB;EAChC,OAAO,SAAS,eAAe;EAC/B,OAAO,OAAO,KAAK;EACnB,IAAI,UAAU,KAAK;EACnB,MAAM,YAAY,KAAK;EACvB,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;GACvC,MAAM,MAAM,QAAQ;GACpB,MAAM,aAAa,IAAI;GACvB,QAAQ,IAAI,YAAZ;IACE,KAAK;KACH,oBAAoB,KAAK,GAAG;KAC5B;IACF,KAAK;KACH,mBAAmB,KAAK,GAAG;KAC3B;IACF;KACE,IAAI;KACJ,IAAI,WAAW,iBAAiB,GAAG;MACjC,MAAM,YAAY,UAAU,WAAW;MACvC,IAAI,WAAW,KAAK,gBAAgB,SAAS;MAC7C,WAAW,KAAK,kBAAkB,QAAQ;MAC1C,UAAU,KAAK,cAAc,KAAK,QAAQ;KAC5C,OAAO;MACL,MAAM,WAAW,KAAK,gBAAgB;MACtC,UAAU,KAAK,cAAc,KAAK,QAAQ;KAC5C;KACA,IAAI,YAAY,KAAK,GACnB;KAEF,MAAM,QAAQ,KAAK,OAAO,WAAW;KACrC,QAAQ,UAAU,QAAQ,KAAK,OAAO,WAAW,YAAY,UAAU;KACvE,IAAI,WAAW,4BACb,0BAA0B,KAAK,OAAO;UAEtC,OAAO,IAAI,OAAO;KAEpB;GACJ;EACF;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,oBAAoB,QAAQ,KAAK;GACnD,MAAM,OAAO,oBAAoB;GACjC,UAAU,CAAC;GACX,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,WAAW,UAAU,QAAQ,KAAK;IACzD,MAAM,QAAQ,KAAK,WAAW,UAAU;IACxC,KAAK,IAAI,IAAI,GAAG,IAAI,0BAA0B,QAAQ,KAEpD,IAAI,UADU,0BAA0B,GAAG,SAAS,WAAW,IAE7D,QAAQ,KAAK,0BAA0B,EAAE;GAG/C;GACA,KAAK,IAAI,IAAI,GAAG,IAAI,mBAAmB,QAAQ,KAAK;IAClD,MAAM,OAAO,mBAAmB;IAChC,IAAI,KAAK,SAAS,iBAAiB,KAAK,WAAW,IAAI;KACrD,MAAM,aAAa,IAAI,SAAS;KAChC,MAAM,KAAK,KAAK,SAAS,MAAM;KAC/B,MAAM,SAAS,IAAI,QAAQ;KAC3B,OAAO,IACL,GAAG,IACH,GAAG,IACH,GAAG,IACH,GAAG,IACH,GAAG,IACH,GAAG,IACH,GAAG,IACH,GAAG,IACH,GAAG,IACH,GAAG,IACH,GAAG,KACH,GAAG,KACH,GAAG,KACH,GAAG,KACH,GAAG,KACH,GAAG,GACL;KACA,WAAW,aAAa,MAAM;KAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAClC,WAAW,IAAI,QAAQ,GAAG,MAAM,IAAI,CAAC;KAEvC,OAAO,IAAI,UAAU;IACvB;GACF;EACF;EACA,OAAO,SAAS,eAAe,KAAK;EACpC,OAAO;CACT;CACA,cAAc,KAAK,KAAK;EACtB,MAAM,SAAS,IAAI,qBAAqB;EACxC,MAAM,aAAa,IAAI;EACvB,IAAI,UAAU,UAAU,QAAQ;EAChC,QAAQ,IAAI,YAAZ;GACE,KAAK;GACL,KAAK;IACH,WAAW,OAAO,MAAM,IAAI,QAAQ;IACpC,IAAI,SAAS,WAAW,eAAe,OAAO,GAC5C,WAAW,IAAI,eAAe;KAAE,cAAc;KAAM,iBAAiB;KAAO,MAAM;IAAE,CAAC;SAChF;KACL,SAAS,WAAW;KACpB,QAAQ,IAAI,MAAM,OAAO,IAAI,KAAK,OAAO,IAAI,KAAK,OAAO,IAAI,GAAG;KAChE,WAAW,IAAI,eAAe;MAAE;MAAO,iBAAiB;MAAO,MAAM;KAAE,CAAC;IAC1E;IACA,WAAW,KAAK,kBAAkB,QAAQ;IAC1C,MAAM,SAAS,IAAI,OAAO,UAAU,QAAQ;IAC5C,OAAO,SAAS,gBAAgB;IAChC,OAAO,SAAS,gBAAgB,IAAI;IACpC,IAAI,WAAW,MACb,OAAO,OAAO,WAAW;IAE3B,OAAO;GACT,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;IACH,IAAI,IAAI,aAAa,MACnB;IACF,WAAW,OAAO,MAAM,IAAI,QAAQ;IACpC,IAAI,SAAS,WAAW,eAAe,OAAO,GAC5C,IAAI,eAAe;IAErB,IAAI,QAAQ,MAAM;KAChB,MAAM,KAAK,gBAAgB;KAC3B,MAAM,KAAK,kBAAkB,GAAG;IAClC;IACA,MAAM,OAAO,IAAI,KAAK,UAAU,GAAG;IACnC,KAAK,aAAa,WAAW;IAC7B,KAAK,gBAAgB,WAAW;IAChC,KAAK,SAAS,gBAAgB;IAC9B,KAAK,SAAS,gBAAgB,IAAI;IAClC,IAAI,WAAW,MACb,KAAK,OAAO,WAAW;IAEzB,OAAO;GACT,KAAK;IACH,WAAW,OAAO,MAAM,IAAI,QAAQ;IACpC,SAAS,WAAW;IACpB,QAAQ,IAAI,MAAM,OAAO,IAAI,KAAK,OAAO,IAAI,KAAK,OAAO,IAAI,GAAG;IAChE,WAAW,IAAI,kBAAkB,EAAE,MAAM,CAAC;IAC1C,WAAW,KAAK,kBAAkB,QAAQ;IAC1C,MAAM,QAAQ,IAAI,KAAK,UAAU,QAAQ;IACzC,MAAM,SAAS,gBAAgB;IAC/B,MAAM,SAAS,gBAAgB,IAAI;IACnC,IAAI,WAAW,MACb,MAAM,OAAO,WAAW;IAE1B,OAAO;GACT,KAAK;IACH,WAAW,IAAI;IACf,MAAM,MAAM,SAAS,cAAc,QAAQ,EAAE,WAAW,IAAI;IAC5D,MAAM,OAAO,GAAG,SAAS,WAAW,KAAK,SAAS;IAClD,IAAI,OAAO;IACX,MAAM,QAAQ,IAAI,YAAY,SAAS,IAAI,EAAE,QAAQ;IACrD,MAAM,SAAS,SAAS,aAAa;IACrC,MAAM,IAAI,OAAO;IACjB,IAAI,OAAO,QAAQ,QAAQ;IAC3B,IAAI,OAAO,SAAS,SAAS;IAC7B,IAAI,OAAO,MAAM,QAAQ,QAAQ;IACjC,IAAI,OAAO,MAAM,SAAS,SAAS;IACnC,IAAI,aAAa,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;IACjC,IAAI,OAAO;IACX,IAAI,eAAe;IACnB,IAAI,YAAY;IAChB,QAAQ,WAAW;IACnB,IAAI,YAAY,QAAQ,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE,GAAG,MAAM,EAAE;IACjE,IAAI,SAAS,GAAG,GAAG,OAAO,MAAM;IAChC,IAAI,YAAY;IAChB,IAAI,SAAS,SAAS,MAAM,QAAQ,GAAG,SAAS,CAAC;IACjD,MAAM,UAAU,IAAI,cAAc,IAAI,MAAM;IAC5C,QAAQ,YAAY;IACpB,QAAQ,QAAQ;IAChB,QAAQ,QAAQ;IAChB,WAAW,IAAI,eAAe;KAAE,KAAK;KAAS,WAAW;IAAM,CAAC;IAChE,MAAM,SAAS,IAAI,OAAO,QAAQ;IAClC,OAAO,SAAS,IAAI,SAAS,MAAM,IAAI,SAAS,MAAM,IAAI,SAAS,MAAM,EAAE;IAC3E,OAAO,MAAM,IAAI,QAAQ,IAAI,SAAS,IAAI,CAAC;IAC3C,OAAO,SAAS,gBAAgB;IAChC,OAAO,SAAS,gBAAgB,IAAI;IACpC,IAAI,WAAW,MACb,OAAO,OAAO,WAAW;IAE3B,OAAO;GACT,KAAK;IACH,WAAW,IAAI;IACf,IAAI;IACJ,IAAI,SAAS,oBAAoB;KAC/B,QAAQ,IAAI,iBAAiB;KAC7B,MAAM,aAAa,WAAW;KAC9B,MAAM,SAAS,IAAI,SAAS,SAAS,IAAI,SAAS,SAAS,IAAI,SAAS,SAAS,EAAE;KACnF,MAAM,OAAO,SAAS,IAAI,SAAS,UAAU,IAAI,SAAS,UAAU,IAAI,SAAS,UAAU,EAAE;KAC7F,MAAM,OAAO,aAAa;IAC5B,OAAO,IAAI,SAAS,cAAc;KAChC,QAAQ,IAAI,WAAW;KACvB,MAAM,aAAa,WAAW;KAC9B,MAAM,SAAS,IAAI,SAAS,SAAS,IAAI,SAAS,SAAS,IAAI,SAAS,SAAS,EAAE;KACnF,MAAM,OAAO,aAAa;IAC5B,OAAO,IAAI,SAAS,oBAAoB;KACtC,QAAQ,IAAI,cAAc;KAC1B,MAAM,SAAS,KAAK,IAAI,SAAS,MAAM,EAAE;KACzC,MAAM,UAAU,KAAK,IAAI,SAAS,OAAO,EAAE;KAC3C,MAAM,SAAS,IAAI,SAAS,SAAS,KAAK,UAAU,GAAG,SAAS,SAAS,IAAI,SAAS,SAAS,KAAK,SAAS,CAAC;KAC9G,MAAM,SAAS;KACf,MAAM,QAAQ;KACd,MAAM,OAAO,IAAI,QAAQ,SAAS,UAAU,IAAI,SAAS,UAAU,IAAI,SAAS,UAAU,EAAE,CAAC;IAC/F,OAAO,IAAI,SAAS,aAAa;KAC/B,QAAQ,IAAI,UAAU;KACtB,MAAM,aAAa,WAAW;KAC9B,MAAM,SAAS,IAAI,SAAS,SAAS,IAAI,SAAS,SAAS,IAAI,SAAS,SAAS,EAAE;KACnF,MAAM,OAAO,SAAS,IAAI,SAAS,UAAU,IAAI,SAAS,UAAU,IAAI,SAAS,UAAU,EAAE;KAC7F,MAAM,QAAQ,SAAS;KACvB,MAAM,OAAO,aAAa;IAC5B,OAAO,IAAI,SAAS,eAAe;KACjC,QAAQ,KAAK,2DAA2D;KACxE;IACF;IACA,IAAI,OAAO;KACT,MAAM,YAAY,SAAS;KAC3B,SAAS,SAAS;KAClB,QAAQ,IAAI,MAAM,OAAO,IAAI,KAAK,OAAO,IAAI,KAAK,OAAO,IAAI,GAAG;KAChE,MAAM,QAAQ;KACd,MAAM,SAAS,gBAAgB;KAC/B,MAAM,SAAS,gBAAgB,IAAI;IACrC;IACA,OAAO;EACX;CACF;CACA,eAAe;EACb,IAAI,CAAC,KAAK,gBAAgB;GACxB,MAAM,WAAW,IAAI,WAAW,KAAK,OAAO;GAC5C,SAAS,QAAQ,KAAK,WAAW;GACjC,MAAM,YAAY,IAAI,SAAS,SAAS,WAAW;IACjD,SAAS,KAAK,eAAe,SAAS,KAAK,GAAG,MAAM;GACtD,CAAC;GACD,MAAM,eAAe,IAAI,WAAW,KAAK,OAAO;GAChD,aAAa,QAAQ,KAAK,WAAW;GACrC,aAAa,gBAAgB,aAAa;GAC1C,MAAM,gBAAgB,IAAI,SAAS,SAAS,WAAW;IACrD,aAAa,KAAK,iBAAiB,SAAS,KAAK,GAAG,MAAM;GAC5D,CAAC;GACD,KAAK,iBAAiB,QAAQ,IAAI,CAAC,WAAW,aAAa,CAAC,EAAE,MAAM,CAAC,YAAY,oBAAoB;IACnG,KAAK,cAAc,aAAa;IAChC,MAAM,KAAK,eAAe,SAAS;IACnC,MAAM,OAAO;KACX;KACA;KACA;KACA,GAAG,UAAU,GAAG,QAAQ,GAAG,IAAI,GAAG,GAAG,YAAY,GAAG,CAAC;IACvD,EAAE,KAAK,IAAI;IACX,KAAK,kBAAkB,IAAI,gBAAgB,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;GAC7D,CAAC;EACH;EACA,OAAO,KAAK;CACd;CACA,WAAW,UAAU;EACnB,OAAO,KAAK,aAAa,EAAE,WAAW;GACpC,IAAI,KAAK,WAAW,SAAS,KAAK,aAAa;IAC7C,MAAM,UAAU,IAAI,OAAO,KAAK,eAAe;IAC/C,QAAQ,aAAa,CAAC;IACtB,QAAQ,aAAa,CAAC;IACtB,QAAQ,YAAY;IACpB,QAAQ,YAAY;KAClB,MAAM;KACN,eAAe,KAAK;IACtB,CAAC;IACD,QAAQ,YAAY,SAAS,GAAG;KAC9B,MAAM,UAAU,EAAE;KAClB,QAAQ,QAAQ,MAAhB;MACE,KAAK;OACH,QAAQ,WAAW,QAAQ,IAAI,QAAQ,OAAO;OAC9C;MACF,KAAK;OACH,QAAQ,WAAW,QAAQ,IAAI,OAAO,OAAO;OAC7C;MACF,SACE,QAAQ,MAAM,iDAAgD,QAAQ,OAAO,IAAG;KACpF;IACF;IACA,KAAK,WAAW,KAAK,OAAO;GAC9B,OACE,KAAK,WAAW,KAAK,SAAS,GAAG,GAAG;IAClC,OAAO,EAAE,YAAY,EAAE,YAAY,KAAK;GAC1C,CAAC;GAEH,MAAM,SAAS,KAAK,WAAW,KAAK,WAAW,SAAS;GACxD,OAAO,aAAa;GACpB,OAAO;EACT,CAAC;CACH;CACA,aAAa,QAAQ,QAAQ;EAC3B,OAAO,aAAa,OAAO,WAAW;EACtC,OAAO,OAAO,WAAW;EACzB,OAAO,OAAO,WAAW;CAC3B;CACA,UAAU;EACR,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,EAAE,GAC5C,KAAK,WAAW,GAAG,UAAU;EAE/B,KAAK,WAAW,SAAS;EACzB,OAAO;CACT;AACF;AACA,SAAS,iBAAiB;CACxB,IAAI;CACJ,IAAI;CACJ,IAAI;CACJ,YAAY,SAAS,GAAG;EACtB,MAAM,UAAU,EAAE;EAClB,QAAQ,QAAQ,MAAhB;GACE,KAAK;IACH,gBAAgB,QAAQ;IACxB,MAAM,aAAa,cAAc;IACjC,IAAI;IACJ,iBAAiB,IAAI,QAAQ,SAAS,SAAS;KAC7C,cAAc;MAAE;MAAY,sBAAsB;KAAQ;KAC1D,SAAS,WAAW;IACtB,CAAC,EAAE,WAAW;KACZ,QAAQ;IACV,CAAC;IACD;GACF,KAAK;IACH,MAAM,SAAS,QAAQ;IACvB,eAAe,WAAW;KACxB,MAAM,OAAO,cAAc,OAAO,MAAM;KACxC,KAAK,YAAY;MAAE,MAAM;MAAU,IAAI,QAAQ;MAAI;KAAK,CAAC;IAC3D,CAAC;IACD;EACJ;CACF;CACA,SAAS,cAAc,QAAQ,QAAQ;EACrC,MAAM,MAAM,IAAI,WAAW,MAAM;EACjC,MAAM,MAAM,OAAO,QAAQ,cAAc,GAAG;EAC5C,MAAM,UAAU,CAAC;EACjB,MAAM,YAAY,CAAC;EACnB,MAAM,SAAS,CAAC;EAChB,MAAM,QAAQ,CAAC;EACf,MAAM,aAAa,CAAC;EACpB,MAAM,SAAS,CAAC;EAChB,MAAM,OAAO,IAAI,QAAQ;EACzB,MAAM,MAAM,KAAK;EACjB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK;GAC5B,MAAM,UAAU,KAAK,IAAI,CAAC;GAC1B,MAAM,SAAS,kBAAkB,SAAS,GAAG;GAC7C,QAAQ,OAAO;GACf,IAAI,QACF,QAAQ,KAAK,MAAM;EAEvB;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,oBAAoB,EAAE,MAAM,GAAG,KAAK;GAC1D,MAAM,OAAO,IAAI,oBAAoB,EAAE,IAAI,CAAC;GAC5C,MAAM,iBAAiB,kBAAkB,IAAI;GAC7C,eAAe,YAAY,KAAK,aAAa;GAC7C,QAAQ,KAAK;IAAE,UAAU;IAAM,YAAY;IAAgB,YAAY;GAAqB,CAAC;EAC/F;EACA,MAAM,eAAe;GAEnB,OAAO,YAAY;GACnB,OAAO,YAAY;GACnB,OAAO,YAAY;GACnB,OAAO,YAAY;GACnB,OAAO,YAAY;EACrB;EACA,MAAM,kBAAkB;GACtB,OAAO,YAAY;GACnB,OAAO,YAAY;GACnB,OAAO,YAAY;GACnB,OAAO,YAAY;GACnB,OAAO,YAAY;GACnB,OAAO,YAAY;GACnB,OAAO,YAAY;GACnB,OAAO,YAAY;GACnB,OAAO,YAAY;GACnB,OAAO,YAAY;GACnB,OAAO,YAAY;GACnB,OAAO,YAAY;GACnB,OAAO,YAAY;GACnB,OAAO,YAAY;GACnB,OAAO,YAAY;GACnB,OAAO,YAAY;GACnB,OAAO,YAAY;GACnB,OAAO,YAAY;GACnB,OAAO,YAAY;GACnB,OAAO,YAAY;EACrB;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,UAAU,EAAE,MAAM,GAAG,KAAK;GAChD,MAAM,YAAY,IAAI,UAAU,EAAE,IAAI,CAAC;GACvC,MAAM,eAAe,UAAU,gBAAgB;GAC/C,IAAI,WAAW,kBAAkB,SAAS;GAC1C,MAAM,WAAW,CAAC;GAClB,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK;IAC5C,MAAM,WAAW,UAAU,WAAW,aAAa,EAAE;IACrD,IAAI,UAAU;KACZ,IAAI,cAAc,aAAa,GAAG,YAAY;KAC9C,cAAc,YAAY,UAAU,IAAI,YAAY,MAAM;KAC1D,MAAM,UAAU,EAAE,MAAM,YAAY;KACpC,MAAM,QAAQ,IAAI,wBAAwB,SAAS,QAAQ;KAC3D,IAAI,OACF,QAAQ,QAAQ,2BAA2B;UACtC;MACL,QAAQ,KAAK,8BAA8B,YAAY,+BAA+B;MACtF,QAAQ,QAAQ;KAClB;KACA,SAAS,KAAK,OAAO;KACrB,SAAS,OAAO;IAClB;GACF;GACA,SAAS,WAAW;GACpB,IAAI,aAAa,WAAW;IAC1B,QAAQ,IAAI,UAAU;IACtB,KAAK,IAAI,IAAI,GAAG,IAAI,gBAAgB,QAAQ,KAAK;KAC/C,MAAM,WAAW,UAAU,WAAW,aAAa,EAAE;KACrD,IAAI,UAAU;MACZ,MAAM,QAAQ,IAAI,wBAAwB,SAAS,QAAQ;MAC3D,IAAI,cAAc,aAAa,GAAG,YAAY;MAC9C,cAAc,YAAY,UAAU,IAAI,YAAY,MAAM;MAC1D,MAAM,UAAU;OAAE,MAAM;OAAa,OAAO,2BAA2B;MAAM;MAC7E,SAAS,KAAK,OAAO;MACrB,SAAS,OAAO;KAClB;IACF;IACA,MAAM,uBAAuB,kBAAkB,UAAU,gBAAgB,CAAC;IAC1E,WAAW,OAAO,OAAO,sBAAsB,QAAQ;GACzD;GACA,UAAU,KAAK,QAAQ;GACvB,UAAU,OAAO;GACjB,aAAa,OAAO;EACtB;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,OAAO,EAAE,MAAM,GAAG,KAAK;GAC7C,MAAM,SAAS,IAAI,OAAO,EAAE,IAAI,CAAC;GACjC,MAAM,QAAQ,kBAAkB,MAAM;GACtC,OAAO,KAAK,KAAK;GACjB,OAAO,OAAO;EAChB;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,MAAM,EAAE,MAAM,GAAG,KAAK;GAC5C,MAAM,QAAQ,IAAI,MAAM,EAAE,IAAI,CAAC;GAC/B,MAAM,OAAO,kBAAkB,KAAK;GACpC,MAAM,KAAK,IAAI;GACf,MAAM,OAAO;EACf;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,WAAW,EAAE,MAAM,GAAG,KAAK;GACjD,MAAM,aAAa,IAAI,WAAW,EAAE,IAAI,CAAC;GACzC,MAAM,YAAY,kBAAkB,UAAU;GAC9C,WAAW,KAAK,SAAS;GACzB,WAAW,OAAO;EACpB;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,OAAO,EAAE,MAAM,GAAG,KAAK;GAC7C,MAAM,SAAS,IAAI,OAAO,EAAE,IAAI,CAAC;GACjC,MAAM,QAAQ,kBAAkB,MAAM;GACtC,OAAO,KAAK,KAAK;GACjB,OAAO,OAAO;EAChB;EACA,MAAM,WAAW,kBAAkB,IAAI,SAAS,CAAC;EACjD,IAAI,OAAO;EACX,OAAO;GAAE;GAAS;GAAW;GAAQ;GAAO;GAAY;GAAQ;EAAS;CAC3E;CACA,SAAS,kBAAkB,QAAQ,KAAK;EACtC,MAAM,YAAY,OAAO,SAAS;EAClC,MAAM,cAAc,OAAO,WAAW;EACtC,IAAI,aAAa,UAAU;EAC3B,IAAI,UAAU,YAAY,UAAU,MAAM;EAC1C,QAAQ,YAAR;GACE,KAAK,MAAM,WAAW;IACpB,MAAM,MAAM,cAAc,WAAW,GAAG;IACxC,WAAW,CAAC;IACZ,aAAa,CAAC;IACd,OAAO,CAAC;IACR,SAAS,WAAW;IACpB,SAAS,OAAO;IAChB,SAAS,QAAQ,CAAC;IAClB,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;KACnC,SAAS,MAAM,KAAK,IAAI,GAAG,EAAE;KAC7B,SAAS,MAAM,KAAK,IAAI,GAAG,EAAE;KAC7B,SAAS,MAAM,KAAK,IAAI,GAAG,EAAE;IAC/B;IACA,WAAW,WAAW;IACtB,KAAK,aAAa;IAClB,WAAW,EAAE,KAAK;IAClB;GACF,KAAK,MAAM,WAAW;IACpB,MAAM,KAAK,UAAU;IACrB,WAAW,CAAC;IACZ,MAAM,QAAQ,CAAC;IACf,aAAa,CAAC;IACd,OAAO,CAAC;IACR,SAAS,WAAW;IACpB,SAAS,OAAO;IAChB,SAAS,QAAQ;KAAC,GAAG;KAAI,GAAG;KAAI,GAAG;IAAE;IACrC,MAAM,SAAS,YAAY,UAAU,GAAG;IACxC,MAAM,WAAW;IACjB,MAAM,OAAO;IACb,MAAM,QAAQ;KAAC,OAAO,IAAI;KAAK,OAAO,IAAI;KAAK,OAAO,IAAI;IAAG;IAC7D,WAAW,WAAW;IACtB,WAAW,QAAQ;IACnB,KAAK,aAAa;IAClB,WAAW,EAAE,KAAK;IAClB;GACF,KAAK,MAAM,WAAW;GACtB,KAAK,MAAM,WAAW;IACpB,WAAW,UAAU,cAAc;IACnC;GACF,KAAK,MAAM,WAAW;IACpB,MAAM,QAAQ,UAAU,MAAM;IAC9B,OAAO,IAAI,MAAM,KAAK;IACtB,KAAK,IAAI,YAAY,GAAG,YAAY,MAAM,OAAO,aAAa;KAC5D,MAAM,OAAO,MAAM,IAAI,SAAS;KAChC,MAAM,QAAQ,KAAK,QAAQ,MAAM,SAAS,GAAG;KAC7C,IAAI,OAAO;MACT,KAAK,OAAO,KAAK;MACjB,MAAM,OAAO;KACf;KACA,KAAK,OAAO;IACd;IACA,IAAI,KAAK,MAAM,EAAE,QAAQ,GAAG;KAC1B,KAAK,QAAQ;KACb,WAAW,KAAK,cAAc;KAC9B,MAAM,OAAO;IACf;IACA,KAAK,OAAO;IACZ;GACF,KAAK,MAAM,WAAW;IACpB,OAAO,UAAU,QAAQ,MAAM,SAAS,GAAG;IAC3C,IAAI,MAAM;KACR,WAAW,KAAK,cAAc;KAC9B,KAAK,OAAO;IACd;IACA;GACF,KAAK,MAAM,WAAW;IACpB,WAAW,kBAAkB,SAAS;IACtC;GACF,KAAK,MAAM,WAAW;IACpB,WAAW,kBAAkB,SAAS;IACtC;GACF,KAAK,MAAM,WAAW;IACpB,WAAW,kBAAkB,SAAS;IACtC,SAAS,QAAQ,kBAAkB,UAAU,KAAK;IAClD,SAAS,MAAM,QAAQ,UAAU,MAAM,aAAa,IAAI;IACxD;GACF,KAAK,MAAM,WAAW;IACpB,UAAU,UAAU,CAAC;IACrB,OAAO,MAAM,KAAK,yBAAyB,SAAS;IACpD,IAAI,MAAM;KACR,WAAW,KAAK,cAAc;KAC9B,KAAK,OAAO;IACd;IACA;GACF;IACE,QAAQ,KAAK,oCAAoC,WAAW,YAAY,MAAM;IAC9E;EACJ;EACA,IAAI,UAAU;GACZ,aAAa,kBAAkB,WAAW;GAC1C,WAAW,WAAW,kBAAkB,SAAS;GACjD,IAAI,YAAY,aAAa,GAC3B,WAAW,WAAW,YAAY,aAAa;GAEjD,IAAI,YAAY,kBAAkB,GAChC,WAAW,cAAc,YAAY,eAAe;GAEtD,IAAI,UAAU,kBAAkB,GAC9B,WAAW,SAAS,cAAc,UAAU,eAAe;GAE7D,WAAW,YAAY,YAAY,UAAU,GAAG;GAChD,aAAa,WAAW,YAAY;GACpC,aAAa,WAAW,UAAU,IAAI,WAAW,MAAM;GACvD,OAAO;IAAE;IAAU;IAAY;GAAW;EAC5C,OACE,QAAQ,KAAK,oBAAoB,WAAW,YAAY,KAAK,kCAAkC;CAEnG;CACA,SAAS,kBAAkB,QAAQ;EACjC,MAAM,SAAS,CAAC;EAChB,KAAK,MAAM,YAAY,QAAQ;GAC7B,MAAM,QAAQ,OAAO;GACrB,IAAI,OAAO,UAAU,YACnB,IAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,MAAM,eAAe,aAAa,GACnF,OAAO,YAAY;IAAE,MAAM,MAAM,YAAY;IAAM,OAAO,MAAM;GAAM;QAEtE,OAAO,YAAY;EAGzB;EACA,OAAO;CACT;CACA,SAAS,cAAc,OAAO,YAAY;EACxC,IAAI,aAAa;EACjB,IAAI,KAAK,CAAC;EACV,MAAM,KAAK,CAAC;EACZ,IAAI,iBAAiB,MAAM,WACzB,OAAO,CAAC,MAAM,cAAc,MAAM,UAAU;EAE9C,IAAI,iBAAiB,MAAM,eAAe;GACxC,aAAa,MAAM;GACnB,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,KAC9B,GAAG,KAAK,MAAM,MAAM,CAAC,CAAC;GAExB,OAAO;EACT;EACA,IAAI,iBAAiB,MAAM,WAAW;GACpC,MAAM,eAAe,MAAM;GAC3B,KAAK,IAAI,IAAI,GAAG,IAAI,cAAc,KAAK;IACrC,MAAM,UAAU,MAAM,aAAa,CAAC;IACpC,MAAM,eAAe,cAAc,SAAS,UAAU;IACtD,KAAK,GAAG,OAAO,YAAY;IAC3B,QAAQ,OAAO;GACjB;GACA,OAAO;EACT;EACA,IAAI,iBAAiB,MAAM,UAAU;GACnC,aAAa,KAAK,MAAM,MAAM,eAAe,CAAC;GAC9C,aAAa,aAAa,IAAI,IAAI;EACpC;EACA,IAAI,iBAAiB,MAAM,cAAc,MAAM,WAAW,GAAG;GAC3D,MAAM,QAAQ,MAAM,eAAe;GACnC,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,OAAO,KAC/B,GAAG,KAAK,MAAM,IAAI,CAAC,CAAC;GAEtB,MAAM,OAAO;GACb,OAAO;EACT;EACA,MAAM,SAAS,MAAM;EACrB,MAAM,YAAY,aAAa;EAC/B,KAAK,IAAI,IAAI,GAAG,IAAI,YAAY,KAAK;GACnC,MAAM,IAAI,OAAO,KAAK,IAAI,aAAa,OAAO,KAAK,OAAO;GAC1D,IAAI,MAAM,OAAO,MAAM,MAAM,OAAO,IAAI;IACtC,GAAG,KAAK,CAAC;IACT;GACF;GACA,MAAM,MAAM,MAAM,UAAU,CAAC;GAC7B,MAAM,UAAU,MAAM,UAAU,GAAG,MAAM,EAAE,EAAE,EAAE;GAC/C,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI;GAC5D,MAAM,MAAM,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ,KAAK,QAAQ;GACrF,MAAM,cAAc,KAAK,KAAK,KAAK,GAAG;GACtC,IAAI;GACJ,IAAI,gBAAgB,GAClB,QAAQ,KAAK,KAAK;QACb;IACL,MAAM,SAAS,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,KAAK;IAC5E,QAAQ,KAAK,KAAK,KAAK,IAAI,IAAI,KAAK,IAAI,GAAG,KAAK,CAAC,CAAC;GACpD;GACA,IAAI,QAAQ,IACV;GACF,GAAG,KAAK,CAAC;EACX;EACA,KAAK,GAAG,KAAK,MAAM,MAAM,QAAQ,CAAC,CAAC;EACnC,OAAO;CACT;AACF;;;AC7xBA,IAAM,kBAAkB;AACxB,IAAM,4BAA4B;AAClC,IAAM,wBAAwB;AAC9B,IAAM,mBAAmB;AACzB,IAAM,sBAAsB,IAAI,QAAQ;AACxC,IAAM,sBAAsB,IAAI,QAAQ;AACxC,IAAM,sBAAsB,IAAI,QAAQ;AACxC,IAAM,sBAAsB,IAAI,QAAQ;AACxC,IAAM,sBAAsB,IAAI,QAAQ;AACxC,SAAS,cAAc;CACrB,MAAM,QAAQ;EACZ,SAAS,CAAC;EACV,QAAQ,CAAC;EACT,UAAU,CAAC;EACX,SAAS,CAAC;EACV,QAAQ,CAAC;EACT,KAAK,CAAC;EACN,WAAW,CAAC;EACZ,mBAAmB,CAAC;EACpB,aAAa,SAAS,MAAM,iBAAiB;GAC3C,IAAI,KAAK,UAAU,KAAK,OAAO,oBAAoB,OAAO;IACxD,KAAK,OAAO,OAAO;IACnB,KAAK,OAAO,kBAAkB,oBAAoB;IAClD;GACF;GACA,MAAM,mBAAmB,KAAK,UAAU,OAAO,KAAK,OAAO,oBAAoB,aAAa,KAAK,OAAO,gBAAgB,IAAI,KAAK;GACjI,IAAI,KAAK,UAAU,OAAO,KAAK,OAAO,cAAc,YAClD,KAAK,OAAO,UAAU,IAAI;GAE5B,KAAK,SAAS;IACZ,MAAM,QAAQ;IACd,iBAAiB,oBAAoB;IACrC,UAAU;KACR,UAAU,CAAC;KACX,SAAS,CAAC;KACV,QAAQ,CAAC;KACT,KAAK,CAAC;KACN,cAAc;IAChB;IACA,WAAW,CAAC;IACZ,QAAQ;IACR,eAAe,SAAS,OAAO,WAAW;KACxC,MAAM,WAAW,KAAK,UAAU,KAAK;KACrC,IAAI,aAAa,SAAS,aAAa,SAAS,cAAc,IAC5D,KAAK,UAAU,OAAO,SAAS,OAAO,CAAC;KAEzC,MAAM,WAAW;MACf,OAAO,KAAK,UAAU;MACtB,MAAM,SAAS;MACf,QAAQ,MAAM,QAAQ,SAAS,KAAK,UAAU,SAAS,IAAI,UAAU,UAAU,SAAS,KAAK;MAC7F,QAAQ,aAAa,KAAK,IAAI,SAAS,SAAS,KAAK;MACrD,YAAY,aAAa,KAAK,IAAI,SAAS,WAAW;MACtD,UAAU;MACV,YAAY;MACZ,WAAW;MACX,OAAO,SAAS,OAAO;OACrB,MAAM,SAAS;QACb,OAAO,OAAO,UAAU,WAAW,QAAQ,KAAK;QAChD,MAAM,KAAK;QACX,QAAQ,KAAK;QACb,QAAQ,KAAK;QACb,YAAY;QACZ,UAAU;QACV,YAAY;QACZ,WAAW;OACb;OACA,OAAO,QAAQ,KAAK,MAAM,KAAK,MAAM;OACrC,OAAO;MACT;KACF;KACA,KAAK,UAAU,KAAK,QAAQ;KAC5B,OAAO;IACT;IACA,iBAAiB,WAAW;KAC1B,IAAI,KAAK,UAAU,SAAS,GAC1B,OAAO,KAAK,UAAU,KAAK,UAAU,SAAS;IAGlD;IACA,WAAW,SAAS,KAAK;KACvB,MAAM,oBAAoB,KAAK,gBAAgB;KAC/C,IAAI,qBAAqB,kBAAkB,aAAa,IAAI;MAC1D,kBAAkB,WAAW,KAAK,SAAS,SAAS,SAAS;MAC7D,kBAAkB,aAAa,kBAAkB,WAAW,kBAAkB;MAC9E,kBAAkB,YAAY;KAChC;KACA,IAAI,OAAO,KAAK,UAAU,SAAS;WAC5B,IAAI,KAAK,KAAK,UAAU,SAAS,GAAG,MAAM,GAAG,MAChD,IAAI,KAAK,UAAU,IAAI,cAAc,GACnC,KAAK,UAAU,OAAO,IAAI,CAAC;KAAA;KAIjC,IAAI,OAAO,KAAK,UAAU,WAAW,GACnC,KAAK,UAAU,KAAK;MAClB,MAAM;MACN,QAAQ,KAAK;KACf,CAAC;KAEH,OAAO;IACT;GACF;GACA,IAAI,oBAAoB,iBAAiB,QAAQ,OAAO,iBAAiB,UAAU,YAAY;IAC7F,MAAM,WAAW,iBAAiB,MAAM,CAAC;IACzC,SAAS,YAAY;IACrB,KAAK,OAAO,UAAU,KAAK,QAAQ;GACrC;GACA,KAAK,QAAQ,KAAK,KAAK,MAAM;EAC/B;EACA,UAAU,WAAW;GACnB,IAAI,KAAK,UAAU,OAAO,KAAK,OAAO,cAAc,YAClD,KAAK,OAAO,UAAU,IAAI;EAE9B;EACA,kBAAkB,SAAS,OAAO,KAAK;GACrC,MAAM,QAAQ,SAAS,OAAO,EAAE;GAChC,QAAQ,SAAS,IAAI,QAAQ,IAAI,QAAQ,MAAM,KAAK;EACtD;EACA,kBAAkB,SAAS,OAAO,KAAK;GACrC,MAAM,QAAQ,SAAS,OAAO,EAAE;GAChC,QAAQ,SAAS,IAAI,QAAQ,IAAI,QAAQ,MAAM,KAAK;EACtD;EACA,cAAc,SAAS,OAAO,KAAK;GACjC,MAAM,QAAQ,SAAS,OAAO,EAAE;GAChC,QAAQ,SAAS,IAAI,QAAQ,IAAI,QAAQ,MAAM,KAAK;EACtD;EACA,WAAW,SAAS,GAAG,GAAG,GAAG;GAC3B,MAAM,MAAM,KAAK;GACjB,MAAM,MAAM,KAAK,OAAO,SAAS;GACjC,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;GAC3C,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;GAC3C,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;EAC7C;EACA,gBAAgB,SAAS,GAAG;GAC1B,MAAM,MAAM,KAAK;GAEjB,KADiB,OAAO,SAAS,SAC7B,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;EAC7C;EACA,eAAe,SAAS,GAAG;GACzB,MAAM,MAAM,KAAK;GAEjB,KADiB,OAAO,SAAS,SAC7B,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;EAC7C;EACA,WAAW,SAAS,GAAG,GAAG,GAAG;GAC3B,MAAM,MAAM,KAAK;GACjB,MAAM,MAAM,KAAK,OAAO,SAAS;GACjC,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;GAC3C,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;GAC3C,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;EAC7C;EACA,eAAe,SAAS,GAAG,GAAG,GAAG;GAC/B,MAAM,MAAM,KAAK;GACjB,MAAM,MAAM,KAAK,OAAO,SAAS;GACjC,IAAI,UAAU,KAAK,CAAC;GACpB,IAAI,UAAU,KAAK,CAAC;GACpB,IAAI,UAAU,KAAK,CAAC;GACpB,IAAI,WAAW,KAAK,GAAG;GACvB,IAAI,WAAW,KAAK,GAAG;GACvB,IAAI,MAAM,GAAG;GACb,IAAI,UAAU;GACd,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;GAC5B,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;GAC5B,IAAI,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;EAC9B;EACA,UAAU,SAAS,GAAG,GAAG,GAAG;GAC1B,MAAM,MAAM,KAAK;GACjB,MAAM,MAAM,KAAK,OAAO,SAAS;GACjC,IAAI,IAAI,OAAO,KAAK,GAClB,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;GAC7C,IAAI,IAAI,OAAO,KAAK,GAClB,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;GAC7C,IAAI,IAAI,OAAO,KAAK,GAClB,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;EAC/C;EACA,OAAO,SAAS,GAAG,GAAG,GAAG;GACvB,MAAM,MAAM,KAAK;GACjB,MAAM,MAAM,KAAK,OAAO,SAAS;GACjC,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;GAC/B,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;GAC/B,IAAI,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;EACjC;EACA,cAAc,WAAW;GACvB,MAAM,MAAM,KAAK,OAAO,SAAS;GACjC,IAAI,KAAK,GAAG,CAAC;GACb,IAAI,KAAK,GAAG,CAAC;GACb,IAAI,KAAK,GAAG,CAAC;EACf;EACA,WAAW,SAAS,GAAG;GACrB,MAAM,MAAM,KAAK;GAEjB,KADiB,OAAO,SAAS,IAC7B,KAAK,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;EACjC;EACA,SAAS,SAAS,GAAG,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI;GACjD,MAAM,OAAO,KAAK,SAAS;GAC3B,IAAI,KAAK,KAAK,iBAAiB,GAAG,IAAI;GACtC,IAAI,KAAK,KAAK,iBAAiB,GAAG,IAAI;GACtC,IAAI,KAAK,KAAK,iBAAiB,GAAG,IAAI;GACtC,KAAK,UAAU,IAAI,IAAI,EAAE;GACzB,KAAK,SAAS,IAAI,IAAI,EAAE;GACxB,IAAI,OAAO,KAAK,KAAK,OAAO,IAAI;IAC9B,MAAM,OAAO,KAAK,QAAQ;IAC1B,KAAK,KAAK,iBAAiB,IAAI,IAAI;IACnC,KAAK,KAAK,iBAAiB,IAAI,IAAI;IACnC,KAAK,KAAK,iBAAiB,IAAI,IAAI;IACnC,KAAK,UAAU,IAAI,IAAI,EAAE;GAC3B,OACE,KAAK,cAAc,IAAI,IAAI,EAAE;GAE/B,IAAI,OAAO,KAAK,KAAK,OAAO,IAAI;IAC9B,MAAM,QAAQ,KAAK,IAAI;IACvB,KAAK,KAAK,aAAa,IAAI,KAAK;IAChC,KAAK,KAAK,aAAa,IAAI,KAAK;IAChC,KAAK,KAAK,aAAa,IAAI,KAAK;IAChC,KAAK,MAAM,IAAI,IAAI,EAAE;IACrB,KAAK,OAAO,SAAS,eAAe;GACtC,OACE,KAAK,aAAa;EAEtB;EACA,kBAAkB,SAAS,UAAU;GACnC,KAAK,OAAO,SAAS,OAAO;GAC5B,MAAM,OAAO,KAAK,SAAS;GAC3B,KAAK,IAAI,KAAK,GAAG,IAAI,SAAS,QAAQ,KAAK,GAAG,MAAM;IAClD,MAAM,QAAQ,KAAK,iBAAiB,SAAS,KAAK,IAAI;IACtD,KAAK,eAAe,KAAK;IACzB,KAAK,SAAS,KAAK;GACrB;EACF;EACA,iBAAiB,SAAS,UAAU,KAAK;GACvC,KAAK,OAAO,SAAS,OAAO;GAC5B,MAAM,OAAO,KAAK,SAAS;GAC3B,MAAM,QAAQ,KAAK,IAAI;GACvB,KAAK,IAAI,KAAK,GAAG,IAAI,SAAS,QAAQ,KAAK,GAAG,MAC5C,KAAK,cAAc,KAAK,iBAAiB,SAAS,KAAK,IAAI,CAAC;GAE9D,KAAK,IAAI,MAAM,GAAG,IAAI,IAAI,QAAQ,MAAM,GAAG,OACzC,KAAK,UAAU,KAAK,aAAa,IAAI,MAAM,KAAK,CAAC;EAErD;CACF;CACA,MAAM,YAAY,IAAI,KAAK;CAC3B,OAAO;AACT;AACA,IAAM,YAAN,cAAwB,OAAO;CAC7B,YAAY,SAAS;EACnB,MAAM,OAAO;EACb,KAAK,YAAY;CACnB;CACA,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,MAAM,QAAQ;EACd,MAAM,SAAS,IAAI,WAAW,KAAK,OAAO;EAC1C,OAAO,QAAQ,KAAK,IAAI;EACxB,OAAO,iBAAiB,KAAK,aAAa;EAC1C,OAAO,mBAAmB,KAAK,eAAe;EAC9C,OAAO,KACL,KACA,SAAS,MAAM;GACb,IAAI;IACF,OAAO,MAAM,MAAM,IAAI,CAAC;GAC1B,SAAS,GAAG;IACV,IAAI,SACF,QAAQ,CAAC;SAET,QAAQ,MAAM,CAAC;IAEjB,MAAM,QAAQ,UAAU,GAAG;GAC7B;EACF,GACA,YACA,OACF;CACF;CACA,aAAa,WAAW;EACtB,KAAK,YAAY;EACjB,OAAO;CACT;CACA,MAAM,MAAM;EACV,MAAM,QAAQ,IAAI,YAAY;EAC9B,IAAI,KAAK,QAAQ,MAAM,MAAM,IAC3B,OAAO,KAAK,QAAQ,SAAS,IAAI;EAEnC,IAAI,KAAK,QAAQ,MAAM,MAAM,IAC3B,OAAO,KAAK,QAAQ,SAAS,EAAE;EAEjC,MAAM,QAAQ,KAAK,MAAM,IAAI;EAC7B,IAAI,OAAO,IAAI,gBAAgB;EAC/B,IAAI,aAAa;EACjB,IAAI,SAAS,CAAC;EACd,MAAM,WAAW,OAAO,GAAG,aAAa;EACxC,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;GAC5C,OAAO,MAAM;GACb,OAAO,WAAW,KAAK,SAAS,IAAI,KAAK,KAAK;GAC9C,aAAa,KAAK;GAClB,IAAI,eAAe,GACjB;GACF,gBAAgB,KAAK,OAAO,CAAC;GAC7B,IAAI,kBAAkB,KACpB;GACF,IAAI,kBAAkB,KAAK;IACzB,MAAM,OAAO,KAAK,MAAM,KAAK;IAC7B,QAAQ,KAAK,IAAb;KACE,KAAK;MACH,MAAM,SAAS,KAAK,WAAW,KAAK,EAAE,GAAG,WAAW,KAAK,EAAE,GAAG,WAAW,KAAK,EAAE,CAAC;MACjF,IAAI,KAAK,UAAU,GACjB,MAAM,OAAO,KAAK,WAAW,KAAK,EAAE,GAAG,WAAW,KAAK,EAAE,GAAG,WAAW,KAAK,EAAE,CAAC;WAE/E,MAAM,OAAO,KAAK,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;MAE1C;KACF,KAAK;MACH,MAAM,QAAQ,KAAK,WAAW,KAAK,EAAE,GAAG,WAAW,KAAK,EAAE,GAAG,WAAW,KAAK,EAAE,CAAC;MAChF;KACF,KAAK;MACH,MAAM,IAAI,KAAK,WAAW,KAAK,EAAE,GAAG,WAAW,KAAK,EAAE,CAAC;MACvD;IACJ;GACF,OAAO,IAAI,kBAAkB,KAAK;IAEhC,MAAM,aADW,KAAK,OAAO,CAAC,EAAE,KACN,EAAE,MAAM,KAAK;IACvC,MAAM,eAAe,CAAC;IACtB,KAAK,IAAI,IAAI,GAAG,KAAK,WAAW,QAAQ,IAAI,IAAI,KAAK;KACnD,MAAM,SAAS,WAAW;KAC1B,IAAI,OAAO,SAAS,GAAG;MACrB,MAAM,cAAc,OAAO,MAAM,GAAG;MACpC,aAAa,KAAK,WAAW;KAC/B;IACF;IACA,MAAM,KAAK,aAAa;IACxB,KAAK,IAAI,IAAI,GAAG,KAAK,aAAa,SAAS,GAAG,IAAI,IAAI,KAAK;KACzD,MAAM,KAAK,aAAa;KACxB,MAAM,KAAK,aAAa,IAAI;KAC5B,MAAM,QAAQ,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,EAAE;IAC7E;GACF,OAAO,IAAI,kBAAkB,KAAK;IAChC,MAAM,YAAY,KAAK,UAAU,CAAC,EAAE,KAAK,EAAE,MAAM,GAAG;IACpD,IAAI,eAAe,CAAC;IACpB,MAAM,UAAU,CAAC;IACjB,IAAI,KAAK,QAAQ,GAAG,MAAM,IACxB,eAAe;SAEf,KAAK,IAAI,KAAK,GAAG,OAAO,UAAU,QAAQ,KAAK,MAAM,MAAM;KACzD,MAAM,QAAQ,UAAU,IAAI,MAAM,GAAG;KACrC,IAAI,MAAM,OAAO,IACf,aAAa,KAAK,MAAM,EAAE;KAC5B,IAAI,MAAM,OAAO,IACf,QAAQ,KAAK,MAAM,EAAE;IACzB;IAEF,MAAM,gBAAgB,cAAc,OAAO;GAC7C,OAAO,IAAI,kBAAkB,KAAK;IAEhC,MAAM,YADW,KAAK,OAAO,CAAC,EAAE,KACP,EAAE,MAAM,GAAG;IACpC,MAAM,iBAAiB,SAAS;GAClC,OAAO,KAAK,SAAS,gBAAgB,KAAK,IAAI,OAAO,MAAM;IACzD,MAAM,QAAQ,MAAM,OAAO,GAAG,OAAO,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC;IACxD,MAAM,YAAY,IAAI;GACxB,OAAO,IAAI,sBAAsB,KAAK,IAAI,GACxC,MAAM,OAAO,cAAc,KAAK,UAAU,CAAC,EAAE,KAAK,GAAG,MAAM,iBAAiB;QACvE,IAAI,0BAA0B,KAAK,IAAI,GAC5C,MAAM,kBAAkB,KAAK,KAAK,UAAU,CAAC,EAAE,KAAK,CAAC;QAChD,IAAI,iBAAiB,KAAK,IAAI,GACnC,QAAQ,KACN,wGACF;QACK,IAAI,kBAAkB,KAAK;IAChC,SAAS,KAAK,MAAM,GAAG;IACvB,IAAI,OAAO,SAAS,GAAG;KACrB,MAAM,QAAQ,OAAO,GAAG,KAAK,EAAE,YAAY;KAC3C,MAAM,OAAO,SAAS,UAAU,OAAO,UAAU;IACnD,OACE,MAAM,OAAO,SAAS;IAExB,MAAM,WAAW,MAAM,OAAO,gBAAgB;IAC9C,IAAI,UACF,SAAS,SAAS,MAAM,OAAO;GACnC,OAAO;IACL,IAAI,SAAS,MACX;IACF,QAAQ,KAAK,yCAAwC,OAAO,IAAG;GACjE;EACF;EACA,MAAM,SAAS;EACf,MAAM,YAAY,IAAI,MAAM;EAC5B,UAAU,oBAAoB,CAAC,EAAE,OAAO,MAAM,iBAAiB;EAE/D,IAAI,EADoB,MAAM,QAAQ,WAAW,KAAK,MAAM,QAAQ,GAAG,SAAS,SAAS,WAAW,OAC9E,MACpB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,QAAQ,IAAI,GAAG,KAAK;GACpD,MAAM,SAAS,MAAM,QAAQ;GAC7B,MAAM,WAAW,OAAO;GACxB,MAAM,YAAY,OAAO;GACzB,MAAM,SAAS,SAAS,SAAS;GACjC,MAAM,WAAW,SAAS,SAAS;GACnC,IAAI,kBAAkB;GACtB,IAAI,SAAS,SAAS,WAAW,GAC/B;GACF,MAAM,iBAAiB,IAAI,eAAe;GAC1C,eAAe,aAAa,YAAY,IAAI,uBAAuB,SAAS,UAAU,CAAC,CAAC;GACxF,IAAI,SAAS,QAAQ,SAAS,GAC5B,eAAe,aAAa,UAAU,IAAI,uBAAuB,SAAS,SAAS,CAAC,CAAC;GAEvF,IAAI,SAAS,OAAO,SAAS,GAAG;IAC9B,kBAAkB;IAClB,eAAe,aAAa,SAAS,IAAI,uBAAuB,SAAS,QAAQ,CAAC,CAAC;GACrF;GACA,IAAI,SAAS,iBAAiB,MAC5B,eAAe,aAAa,MAAM,IAAI,uBAAuB,SAAS,KAAK,CAAC,CAAC;GAE/E,MAAM,mBAAmB,CAAC;GAC1B,KAAK,IAAI,KAAK,GAAG,QAAQ,UAAU,QAAQ,KAAK,OAAO,MAAM;IAC3D,MAAM,iBAAiB,UAAU;IACjC,MAAM,eAAe,eAAe,OAAO,MAAM,eAAe,SAAS,MAAM;IAC/E,IAAI,WAAW,MAAM,UAAU;IAC/B,IAAI,KAAK,cAAc,MAAM;KAC3B,WAAW,KAAK,UAAU,OAAO,eAAe,IAAI;KACpD,IAAI,UAAU,YAAY,EAAE,oBAAoB,oBAAoB;MAClE,MAAM,eAAe,IAAI,kBAAkB;MAC3C,SAAS,UAAU,KAAK,KAAK,cAAc,QAAQ;MACnD,aAAa,MAAM,KAAK,SAAS,KAAK;MACtC,WAAW;KACb,OAAO,IAAI,YAAY,YAAY,EAAE,oBAAoB,iBAAiB;MACxE,MAAM,iBAAiB,IAAI,eAAe;OAAE,MAAM;OAAI,iBAAiB;MAAM,CAAC;MAC9E,SAAS,UAAU,KAAK,KAAK,gBAAgB,QAAQ;MACrD,eAAe,MAAM,KAAK,SAAS,KAAK;MACxC,eAAe,MAAM,SAAS;MAC9B,WAAW;KACb;IACF;IACA,IAAI,aAAa,KAAK,GAAG;KACvB,IAAI,QACF,WAAW,IAAI,kBAAkB;UAC5B,IAAI,UACT,WAAW,IAAI,eAAe;MAAE,MAAM;MAAG,iBAAiB;KAAM,CAAC;UAEjE,WAAW,IAAI,kBAAkB;KAEnC,SAAS,OAAO,eAAe;KAC/B,SAAS,cAAc,eAAe,SAAS,QAAQ;KACvD,SAAS,eAAe;KACxB,MAAM,UAAU,gBAAgB;IAClC;IACA,iBAAiB,KAAK,QAAQ;GAChC;GACA,IAAI;GACJ,IAAI,iBAAiB,SAAS,GAAG;IAC/B,KAAK,IAAI,KAAK,GAAG,QAAQ,UAAU,QAAQ,KAAK,OAAO,MAAM;KAC3D,MAAM,iBAAiB,UAAU;KACjC,eAAe,SAAS,eAAe,YAAY,eAAe,YAAY,EAAE;IAClF;IACA,IAAI,QACF,OAAO,IAAI,aAAa,gBAAgB,gBAAgB;SACnD,IAAI,UACT,OAAO,IAAI,OAAO,gBAAgB,gBAAgB;SAElD,OAAO,IAAI,KAAK,gBAAgB,gBAAgB;GAEpD,OACE,IAAI,QACF,OAAO,IAAI,aAAa,gBAAgB,iBAAiB,EAAE;QACtD,IAAI,UACT,OAAO,IAAI,OAAO,gBAAgB,iBAAiB,EAAE;QAErD,OAAO,IAAI,KAAK,gBAAgB,iBAAiB,EAAE;GAGvD,KAAK,OAAO,OAAO;GACnB,UAAU,IAAI,IAAI;EACpB;OAEA,IAAI,MAAM,SAAS,SAAS,GAAG;GAC7B,MAAM,WAAW,IAAI,eAAe;IAAE,MAAM;IAAG,iBAAiB;GAAM,CAAC;GACvE,MAAM,iBAAiB,IAAI,eAAe;GAC1C,eAAe,aAAa,YAAY,IAAI,uBAAuB,MAAM,UAAU,CAAC,CAAC;GACrF,IAAI,MAAM,OAAO,SAAS,KAAK,MAAM,OAAO,OAAO,KAAK,GAAG;IACzD,eAAe,aAAa,SAAS,IAAI,uBAAuB,MAAM,QAAQ,CAAC,CAAC;IAChF,SAAS,eAAe;GAC1B;GACA,MAAM,SAAS,IAAI,OAAO,gBAAgB,QAAQ;GAClD,UAAU,IAAI,MAAM;EACtB;EAEF,OAAO;CACT;AACF;;;ACheA,IAAM,YAAN,cAAwB,OAAO;CAC7B,YAAY,SAAS;EACnB,MAAM,OAAO;CACf;CACA,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,MAAM,QAAQ;EACd,MAAM,SAAS,IAAI,WAAW,MAAM,OAAO;EAC3C,OAAO,QAAQ,MAAM,IAAI;EACzB,OAAO,gBAAgB,aAAa;EACpC,OAAO,iBAAiB,MAAM,aAAa;EAC3C,OAAO,mBAAmB,MAAM,eAAe;EAC/C,OAAO,KACL,KACA,SAAS,MAAM;GACb,IAAI;IACF,OAAO,MAAM,MAAM,IAAI,CAAC;GAC1B,SAAS,GAAG;IACV,IAAI,SACF,QAAQ,CAAC;SAET,QAAQ,MAAM,CAAC;IAEjB,MAAM,QAAQ,UAAU,GAAG;GAC7B;EACF,GACA,YACA,OACF;CACF;CACA,MAAM,MAAM;EACV,SAAS,aAAa,OAAO;GAC3B,IAAI,OAAO,IAAI,SAAS,KAAK;GAE7B,IADc,OAAO,aAAa,KAAK,SAAS,CAAC,GAAG,KAAK,SAAS,CAAC,CAC3D,MAAM,MAAM;IAClB,IAAI,MAAM;IACV,IAAI,OAAO;IACX,QAAQ,IAAI,8BAA8B;IAC1C,IAAI;KACF,MAAM,UAAU,IAAI,WAAW,KAAK,CAAC;IACvC,SAAS,GAAG;KACV,IAAI,aAAa,gBAAgB;MAC/B,QAAQ,IAAI,yDAAyD;MACrE,OAAO;KACT;IACF;IACA,KAAK,QAAQ,KACX,IAAI,KAAK,YAAY,EAAE,OAAO,EAAE,MAAM,QACpC;IAGJ,QAAQ,IAAI,iDAAiD,IAAI;IACjE,OAAO,IAAI,SAAS,IAAI,MAAM,MAAM;GACtC;GACA,MAAM,WAAWC,aAAW,IAAI;GAChC,MAAM,WAAW,IAAI,UAAU,EAAE,gBAAgB,UAAU,iBAAiB;GAC5E,IAAI,SAAS,gBAAgB,SAAS,YAAY,MAAM,OAAO;IAC7D,QAAQ,IAAI,6DAA6D;IACzE,OAAO;GACT;GACA,OAAO;EACT;EACA,SAAS,kBAAkB,MAAM;GAC/B,IAAI,QAAQ;GACZ,IAAI,OAAO;GACX,IAAI,KAAK,gBAAgB,WAAW,SAAS,KAAK,GAChD,OAAO,KAAK,gBAAgB,WAAW,KAAK,MAAM,YAAY;GAEhE,MAAM,aAAa;IACjB,YAAY;IACZ,MAAM;IACN,MAAM;IACN,OAAO;IACP,QAAQ;GACV;GACA,IAAI,WAAW,UAAU,KAAK,GAC5B,QAAQ,WAAW;GAErB,QAAQ,IAAI,kCAAkC,KAAK;GACnD,OAAO;EACT;EACA,SAAS,cAAc,MAAM;GAC3B,IAAI,UAAU;GACd,MAAM,QAAQ,KAAK,WAAW,GAAG;GACjC,IAAI,QAAQ;IAAE,GAAG;IAAG,GAAG;IAAG,GAAG;IAAG,GAAG;GAAE;GACrC,IAAI,iBAAiB;GACrB,KAAK,IAAI,KAAK,GAAG,KAAK,KAAK,WAAW,QAAQ,MAAM;IAClD,MAAM,aAAa,KAAK,WAAW;IACnC,IAAI,WAAW,aAAa,cAAc,WAAW,WAAW,SAAS,KAAK;SACxE,WAAW,WAAW,KAAK,UAAU,QACvC,UAAU,WAAW;IAAA,OAElB,IAAI,WAAW,aAAa,SACjC,QAAQ,UAAU,UAAU;GAEhC;GACA,iBAAiB,IAAI,kBAAkB;IACrC,aAAa;IACb,OAAO,IAAI,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAC1C,MAAM;GACR,CAAC;GACD,IAAI,MAAM,MAAM,GAAG;IACjB,eAAe,cAAc;IAC7B,eAAe,UAAU,MAAM;GACjC;GACA,OAAO;IAAE,IAAI;IAAO,UAAU;GAAe;EAC/C;EACA,SAAS,UAAU,MAAM;GACvB,MAAM,QAAQ;IAAE,GAAG;IAAG,GAAG;IAAG,GAAG;IAAG,GAAG;GAAE;GACvC,KAAK,IAAI,KAAK,GAAG,KAAK,KAAK,WAAW,QAAQ,MAAM;IAClD,MAAM,WAAW,KAAK,WAAW;IACjC,IAAI,SAAS,aAAa,KACxB,MAAM,IAAI,SAAS;SACd,IAAI,SAAS,aAAa,KAC/B,MAAM,IAAI,SAAS;SACd,IAAI,SAAS,aAAa,KAC/B,MAAM,IAAI,SAAS;SACd,IAAI,SAAS,aAAa,KAC/B,MAAM,IAAI,SAAS;GAEvB;GACA,OAAO;EACT;EACA,SAAS,eAAe,MAAM;GAC5B,MAAM,SAAS;IAAE,MAAM;IAAI,WAAW,CAAC;IAAG,YAAY;GAAK;GAC3D,IAAI,iBAAiB,KAAK;GAC1B,IAAI,KAAK,WAAW,eAAe,KAAK,GACtC,OAAO,aAAa,KAAK,WAAW,WAAW;GAEjD,OAAO,gBAAgB;IACrB,IAAI,eAAe,aAAa;SAC1B,eAAe,WAAW,SAAS,KAAK;UACtC,eAAe,WAAW,KAAK,UAAU,QAC3C,OAAO,OAAO,eAAe;KAAA;IAC/B,OAEG,IAAI,eAAe,aAAa,YAAY;KACjD,MAAM,KAAK,eAAe,qBAAqB,IAAI,EAAE,GAAG;KACxD,MAAM,KAAK,eAAe,qBAAqB,IAAI,EAAE,GAAG;KACxD,MAAM,KAAK,eAAe,qBAAqB,IAAI,EAAE,GAAG;KACxD,OAAO,UAAU,KAAK,IAAI,IAAI,EAAE;IAClC;IACA,iBAAiB,eAAe;GAClC;GACA,OAAO;EACT;EACA,SAAS,iBAAiB,MAAM;GAC9B,MAAM,YAAY,CAAC;GACnB,MAAM,cAAc,CAAC;GACrB,IAAI,mBAAmB,KAAK;GAC5B,OAAO,kBAAkB;IACvB,IAAI,iBAAiB,aAAa,UAAU;KAC1C,IAAI,QAAQ,iBAAiB;KAC7B,OAAO,OAAO;MACZ,IAAI,MAAM,aAAa,eAAe;OACpC,MAAM,IAAI,MAAM,qBAAqB,GAAG,EAAE,GAAG;OAC7C,MAAM,IAAI,MAAM,qBAAqB,GAAG,EAAE,GAAG;OAC7C,MAAM,IAAI,MAAM,qBAAqB,GAAG,EAAE,GAAG;OAC7C,UAAU,KAAK,GAAG,GAAG,CAAC;MACxB,OAAO,IAAI,MAAM,aAAa,UAAU;OACtC,MAAM,KAAK,MAAM,qBAAqB,IAAI,EAAE,GAAG;OAC/C,MAAM,KAAK,MAAM,qBAAqB,IAAI,EAAE,GAAG;OAC/C,MAAM,KAAK,MAAM,qBAAqB,IAAI,EAAE,GAAG;OAC/C,YAAY,KAAK,IAAI,IAAI,EAAE;MAC7B;MACA,QAAQ,MAAM;KAChB;IACF;IACA,mBAAmB,iBAAiB;GACtC;GACA,OAAO;IAAE,UAAU;IAAW,SAAS;GAAY;EACrD;EACA,SAAS,WAAW,MAAM;GACxB,MAAM,QAAQ,KAAK,WAAW,GAAG;GACjC,MAAM,eAAe;IAAE,MAAM;IAAa,QAAQ,CAAC;GAAE;GACrD,IAAI,YAAY;GAChB,IAAI,cAAc,KAAK;GACvB,OAAO,aAAa;IAClB,IAAI,YAAY,aAAa;SACvB,YAAY,WAAW,SAAS,KAAK;UACnC,YAAY,WAAW,KAAK,UAAU,QACxC,aAAa,OAAO,YAAY;KAAA;IAClC,OAEG,IAAI,YAAY,aAAa,SAClC,YAAY,UAAU,WAAW;SAC5B,IAAI,YAAY,aAAa,QAAQ;KAC1C,IAAI,eAAe,YAAY;KAC/B,MAAM,OAAO;MAAE,UAAU,CAAC;MAAG,SAAS,CAAC;MAAG,SAAS,CAAC;MAAG,OAAO;KAAU;KACxE,OAAO,cAAc;MACnB,IAAI,aAAa,aAAa,YAAY;OACxC,MAAM,iBAAiB,iBAAiB,YAAY;OACpD,KAAK,UAAU,KAAK,QAAQ,OAAO,eAAe,OAAO;OACzD,KAAK,WAAW,KAAK,SAAS,OAAO,eAAe,QAAQ;MAC9D,OAAO,IAAI,aAAa,aAAa,UACnC,KAAK,QAAQ,KAAK,eAAe,YAAY,CAAC;MAEhD,eAAe,aAAa;KAC9B;KACA,aAAa,OAAO,KAAK,IAAI;IAC/B;IACA,cAAc,YAAY;GAC5B;GACA,OAAO;IAAE,IAAI;IAAO,KAAK;GAAa;EACxC;EACA,MAAM,UAAU,aAAa,IAAI;EACjC,IAAI,UAAU;EACd,IAAI,YAAY;EAChB,MAAM,WAAW,kBAAkB,OAAO;EAC1C,MAAM,eAAe,CAAC;EACtB,MAAM,aAAa,CAAC;EACpB,MAAM,aAAa,QAAQ,gBAAgB;EAC3C,IAAI,GAAG;EACP,KAAK,IAAI,GAAG,IAAI,WAAW,QAAQ,KAAK;GACtC,MAAM,QAAQ,WAAW;GACzB,IAAI,MAAM,aAAa;QACjB,MAAM,WAAW,SAAS,KAAK;SAC7B,MAAM,WAAW,KAAK,UAAU,QAClC,UAAU,MAAM;UACX,IAAI,MAAM,WAAW,KAAK,UAAU,UACzC,YAAY,MAAM;IAAA;GACpB,OAEG,IAAI,MAAM,aAAa,YAAY;IACxC,MAAM,iBAAiB,cAAc,KAAK;IAC1C,aAAa,eAAe,MAAM,eAAe;GACnD,OAAO,IAAI,MAAM,aAAa,UAAU;IACtC,MAAM,eAAe,WAAW,KAAK;IACrC,WAAW,aAAa,MAAM,aAAa;GAC7C;EACF;EACA,MAAM,cAAc,IAAI,MAAM;EAC9B,MAAM,kBAAkB,IAAI,kBAAkB;GAAE,OAAO;GAAU,aAAa;EAAK,CAAC;EACpF,YAAY,OAAO;EACnB,YAAY,SAAS,SAAS;EAC9B,YAAY,SAAS,SAAS;EAC9B,KAAK,MAAM,MAAM,YAAY;GAC3B,MAAM,OAAO,WAAW;GACxB,MAAM,SAAS,KAAK;GACpB,MAAM,YAAY,IAAI,MAAM;GAC5B,UAAU,OAAO,KAAK,QAAQ;GAC9B,KAAK,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;IAClC,IAAI,qBAAqB;IACzB,MAAM,OAAO,OAAO;IACpB,MAAM,WAAW,IAAI,uBAAuB,KAAK,UAAU,CAAC;IAC5D,IAAI,UAAU;IACd,IAAI,KAAK,QAAQ,QACf,UAAU,IAAI,uBAAuB,KAAK,SAAS,CAAC;IAEtD,IAAI,KAAK,OAAO;KACd,MAAM,QAAQ,KAAK;KACnB,qBAAqB,gBAAgB,MAAM;KAC3C,mBAAmB,QAAQ,IAAI,MAAM,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;KAC9D,IAAI,MAAM,MAAM,GAAG;MACjB,mBAAmB,cAAc;MACjC,mBAAmB,UAAU,MAAM;KACrC;IACF;IACA,MAAM,UAAU,KAAK;IACrB,KAAK,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;KACnC,MAAM,SAAS,QAAQ;KACvB,MAAM,cAAc,IAAI,eAAe;KACvC,IAAI,WAAW;KACf,YAAY,SAAS,OAAO,SAAS;KACrC,YAAY,aAAa,YAAY,SAAS,MAAM,CAAC;KACrD,IAAI,SACF,YAAY,aAAa,UAAU,QAAQ,MAAM,CAAC;KAEpD,IAAI,aAAa,OAAO,gBAAgB,KAAK,GAC3C,WAAW,aAAa,OAAO;KAEjC,YAAY,MAAM,UAAU,UAAU,QAAQ;KAC9C,UAAU,IAAI,IAAI,KAAK,aAAa,SAAS,MAAM,CAAC,CAAC;IACvD;GACF;GACA,YAAY,IAAI,SAAS;EAC3B;EACA,OAAO;CACT;AACF;;;ACtRA,IAAM,YAAN,cAAwB,OAAO;CAC7B,YAAY,SAAS;EACnB,MAAM,OAAO;EACb,KAAK,SAAS,IAAI,WAAW,KAAK,OAAO;EACzC,KAAK,SAAS;EACd,KAAK,cAAc,IAAI,YAAY,KAAK,OAAO;EAC/C,KAAK,mBAAmB,IAAI,iBAAiB;CAC/C;;;;;CAKA,iBAAiB,eAAe;EAC9B,KAAK,gBAAgB;EACrB,OAAO;CACT;;;;;;;;;CAUA,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,MAAM,UAAU,KAAK,YAAY,eAAe,KAAK,WAAW;EAChE,IAAI;EACJ,IAAI,KAAK,iBAAiB,IACxB,eAAe,KAAK;OACf,IAAI,KAAK,SAAS,IACvB,eAAe,KAAK;OAEpB,eAAe,YAAY,eAAe,GAAG;EAE/C,MAAM,iBAAiB,KAAK,kBAAkB,GAAG,EAAE,YAAY;EAC/D,IAAI,mBAAmB,SAAS,mBAAmB,OAAO;GACxD,IAAI,SACF,wBAAQ,IAAI,MAAM,oDAAoD,iBAAiB,GAAG,CAAC;GAC7F;EACF;EACA,KAAK,mBAAmB,QAAQ,YAAY,WAC1C,KACA,SAAS,MAAM;GACb,OAAO,QAAQ,MAAM,MAAM,cAAc,YAAY,OAAO,CAAC;EAC/D,GACA,YACA,OACF;CACF;;;;;;;;;;;CAWA,cAAc,KAAK,QAAQ,QAAQ,YAAY,SAAS;EACtD,MAAM,UAAU,KAAK;EACrB,KAAK,QACH,KACA,SAAS,KAAK;GACZ,OAAO,OAAO,WAAW,QAAQ,qBAAqB,GAAG,IAAI,QAAQ,MAAM,KAAK,MAAM,CAAC;EACzF,GACA,YACA,OACF;CACF;;;;;;;;;;;;CAYA,kBAAkB,UAAU,QAAQ,QAAQ,YAAY,SAAS;EAC/D,MAAM,QAAQ;EACd,KAAK,KACH,UACA,SAAS,MAAM;GACb,MAAM,cACJ,QACA,MACA,SAAS,WAAW;IAClB,OAAO;KACL;KACA;IACF,CAAC;GACH,GACA,YACA,OACF;EACF,GACA,YACA,OACF;CACF;;;;;;;;;CAUA,QAAQ,KAAK,QAAQ,YAAY,SAAS;EACxC,MAAM,SAAS,KAAK,WAAW;EAC/B,KAAK,OAAO,YAAY,KAAK,CAAC,EAAE,QAAQ,KAAK,IAAI,EAAE,gBAAgB,aAAa,EAAE,iBAAiB,KAAK,aAAa,EAAE,mBAAmB,KAAK,eAAe,EAAE,KAC9J,KACA,SAAS,QAAQ;GACf,OAAO,OAAO,SAAS,QAAQ,IAAI,CAAC;EACtC,GACA,YACA,OACF;CACF;;;;;;;;;CASA,QAAQ,KAAK,QAAQ,YAAY,SAAS;EACxC,MAAM,SAAS,KAAK,WAAW;EAC/B,KAAK,OAAO,YAAY,KAAK,CAAC,EAAE,QAAQ,KAAK,IAAI,EAAE,gBAAgB,aAAa,EAAE,iBAAiB,KAAK,aAAa,EAAE,mBAAmB,KAAK,eAAe,EAAE,KAC9J,KACA,SAAS,QAAQ;GACf,OAAO,OAAO,SAAS,QAAQ,IAAI,CAAC;EACtC,GACA,YACA,OACF;CACF;;;;;;;;;;CAUA,QAAQ,KAAK,QAAQ,YAAY,SAAS;EACxC,MAAM,OAAO,MAAM,QAAQ,GAAG,IAAI,MAAM,CAAC,GAAG;EAC5C,MAAM,OAAO,CAAC;EACd,MAAM,SAAS,KAAK;EACpB,MAAM,SAAS,KAAK,WAAW;EAC/B,KAAK,OAAO,YAAY,KAAK,CAAC,EAAE,QAAQ,KAAK,aAAa,EAAE,gBAAgB,aAAa,EAAE,iBAAiB,KAAK,aAAa,EAAE,mBAAmB,KAAK,eAAe;EACvK,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK,QAAQ,IAAI,IAAI,KACxC,KAAK,OAAO,KACV,KAAK,IACL,SAAS,QAAQ;GACf,KAAK,KAAK,OAAO,SAAS,QAAQ,IAAI,CAAC;GACvC,IAAI,KAAK,WAAW,QAClB,OAAO,OAAO,UAAU,IAAI,CAAC;EACjC,GACA,YACA,OACF;CAEJ;;;;;;;;;;CAUA,QAAQ,KAAK,WAAW,QAAQ,YAAY,SAAS;EACnD,MAAM,SAAS,KAAK,WAAW;EAC/B,KAAK,OAAO,YAAY,YAAY,KAAK,IAAI,+BAA+B,EAAE,QAAQ,KAAK,aAAa,EAAE,gBAAgB,MAAM,EAAE,iBAAiB,KAAK,aAAa,EAAE,mBAAmB,KAAK,eAAe,EAAE,KAC9M,KACA,SAAS,MAAM;GACb,OAAO,OAAO,SAAS,MAAM,IAAI,CAAC;EACpC,GACA,YACA,OACF;CACF;CAEA,kBAAkB,KAAK;EACrB,MAAM,QAAQ,IAAI,YAAY,GAAG;EACjC,OAAO,QAAQ,IAAI,KAAK,IAAI,MAAM,QAAQ,CAAC;CAC7C;CACA,aAAa;EACX,IAAI,KAAK,WAAW,MAClB,KAAK,SAAS,IAAI,OAAO;EAE3B,OAAO,KAAK;CACd;AACF;AACA,IAAM,wBAAwB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AACA,IAAM,cAAN,MAAkB;CAChB,YAAY,SAAS;EACnB,KAAK,cAAc;EACnB,KAAK,kBAAkB,IAAI,gBAAgB;EAC3C,KAAK,kBAAkB,IAAI,gBAAgB,OAAO;CACpD;;;;;CAKA,eAAe,aAAa;EAC1B,KAAK,cAAc;EACnB,OAAO;CACT;;;;;;;;CAQA,MAAM,MAAM,cAAc,YAAY,SAAS;EAC7C,MAAM,WAAW,KAAK,gBAAgB,MAAM,IAAI;EAEhD,MAAM,OAAO,IAAI,YAAY,UADZ,KAAK,gBAAgB,eAAe,KAAK,WAAW,EAAE,gBAAgB,YAAY,EAAE,MAAM,MAAM,UAAU,YAAY,OACzF,CAAC;EAC/C,MAAM,WAAW,IAAI,SAAS,UAAU,IAAI,CAAC;EAC7C,KAAK,KAAK,QAAQ;EAClB,OAAO;CACT;AACF;AACA,SAAS,UAAU,MAAM;CACvB,MAAM,WAAW,KAAK;CACtB,MAAM,QAAQ,CAAC;CACf,IAAI,YAAY,SAAS,UAAU,KAAK,GAAG;EACzC,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,MAAM,QAAQ,IAAI,IAAI,KAAK;GACvD,MAAM,QAAQ,SAAS,MAAM;GAC7B,MAAM,OAAO,IAAI,KAAK;GACtB,MAAM,KAAK,IAAI;GACf,KAAK,OAAO,MAAM;GAClB,KAAK,SAAS,UAAU,MAAM,GAAG;GACjC,KAAK,WAAW,UAAU,MAAM,IAAI;GACpC,IAAI,MAAM,QAAQ,KAAK,GACrB,KAAK,MAAM,UAAU,MAAM,GAAG;EAClC;EACA,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,MAAM,QAAQ,IAAI,IAAI,KAAK;GACvD,MAAM,QAAQ,SAAS,MAAM;GAC7B,IAAI,MAAM,WAAW,MAAM,MAAM,WAAW,QAAQ,MAAM,MAAM,YAAY,KAAK,GAC/E,MAAM,MAAM,QAAQ,IAAI,MAAM,EAAE;QAEhC,KAAK,IAAI,MAAM,EAAE;EAErB;CACF;CACA,KAAK,kBAAkB,IAAI;CAC3B,OAAO;AACT;AACA,IAAM,kBAAN,MAAsB;;;;;CAKpB,MAAM,MAAM;EACV,MAAM,YAAY,CAAC;EACnB,MAAM,MAAM,CAAC;EACb,MAAM,UAAU,CAAC;EACjB,MAAM,UAAU,CAAC;EACjB,MAAM,SAAS,CAAC;EAChB,MAAM,QAAQ,CAAC;EACf,MAAM,cAAc,CAAC;EACrB,MAAM,cAAc,CAAC;EACrB,MAAM,eAAe,CAAC;EACtB,MAAM,iBAAiB,CAAC;EACxB,MAAM,MAAM,CAAC;EACb,MAAM,SAAS,CAAC;EAChB,MAAM,cAAc,CAAC;EACrB,MAAM,cAAc,CAAC;EACrB,IAAI,SAAS;EACb,MAAM,gBAAgB,CAAC;EACvB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,aAAa,KAAK;GAClD,MAAM,IAAI,KAAK,SAAS;GACxB,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE,SAAS,QAAQ,IAAI,IAAI,KAC9C,UAAU,KAAK,EAAE,SAAS,EAAE;GAE9B,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE,OAAO,QAAQ,IAAI,IAAI,KAC5C,QAAQ,KAAK,EAAE,OAAO,EAAE;GAE1B,KAAK,IAAI,IAAI,GAAG,KAAK,EAAE,GAAG,QAAQ,IAAI,IAAI,KACxC,IAAI,KAAK,EAAE,GAAG,EAAE;GAElB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,YAAY,KAAK,EAAE,YAAY,SAAS,KAAK,IAAI,EAAE,YAAY,KAAK,CAAC;GAEvE,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,YAAY,KAAK,EAAE,YAAY,SAAS,KAAK,IAAI,EAAE,YAAY,KAAK,CAAC;EAEzE;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,WAAW,KAAK;GAChD,MAAM,OAAO,KAAK,MAAM;GACxB,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAChD,QAAQ,KAAK,KAAK,QAAQ,EAAE;EAEhC;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,eAAe,KAAK;GACpD,MAAM,WAAW,KAAK,UAAU;GAChC,OAAO,KAAK;IACV,QAAQ,SAAS;IACjB,OAAO,SAAS,YAAY;GAC9B,CAAC;GACD,UAAU,SAAS;EACrB;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,gBAAgB,KAAK;GACrD,MAAM,OAAO,KAAK,YAAY;GAC9B,IAAI,QAAQ,cAAc,KAAK;GAC/B,QAAQ,UAAU,KAAK,IAAI,KAAK,OAAO,KAAK,IAAI,KAAK,MAAM,KAAK;GAChE,cAAc,KAAK,aAAa;EAClC;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,WAAW,KAAK;GAChD,MAAM,WAAW,KAAK,MAAM;GAC5B,MAAM,OAAO;IACX,OAAO;IACP,qBAAqB,SAAS;IAC9B,QAAQ,SAAS;IACjB,MAAM,SAAS;IACf,KAAK,SAAS,SAAS,MAAM,GAAG,CAAC;IACjC,MAAM;KAAC;KAAG;KAAG;KAAG;IAAC;IACjB,KAAK;KAAC;KAAG;KAAG;IAAC;IACb,eAAe,cAAc,OAAO,KAAK,IAAI,cAAc,KAAK;GAClE;GACA,IAAI,KAAK,WAAW,IAAI;IACtB,KAAK,IAAI,MAAM,KAAK,MAAM,KAAK,QAAQ,SAAS;IAChD,KAAK,IAAI,MAAM,KAAK,MAAM,KAAK,QAAQ,SAAS;IAChD,KAAK,IAAI,MAAM,KAAK,MAAM,KAAK,QAAQ,SAAS;GAClD;GACA,MAAM,KAAK,IAAI;EACjB;EACA,IAAI,KAAK,SAAS,WAAW,OAC3B,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,SAAS,KAAK;GAC9C,MAAM,KAAK,KAAK,IAAI;GACpB,MAAM,QAAQ;IACZ,QAAQ,GAAG;IACX,UAAU,GAAG;IACb,WAAW,GAAG;IACd,UAAU,GAAG,WAAW;IACxB,OAAO,CAAC;GACV;GACA,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,MAAM,QAAQ,IAAI,IAAI,KAAK;IACjD,MAAM,OAAO,CAAC;IACd,KAAK,QAAQ,GAAG,MAAM,GAAG;IACzB,KAAK,UAAU;IACf,IAAI,KAAK,MAAM,KAAK,OAAO,KAAK,QAAQ,IAAI,KAAK,GAC/C,KAAK,aAAa,IAAI,QAAQ,GAAG,GAAG,CAAC;IAEvC,MAAM,MAAM,KAAK,IAAI;GACvB;GACA,IAAI,KAAK,KAAK;EAChB;OAEA,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,WAAW,KAAK;GAChD,MAAM,KAAK,KAAK,MAAM,GAAG;GACzB,IAAI,OAAO,KAAK,GACd;GACF,MAAM,QAAQ;IACZ,QAAQ;IACR,UAAU,GAAG;IACb,WAAW,GAAG;IACd,UAAU,GAAG;IACb,OAAO,CAAC;GACV;GACA,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,MAAM,QAAQ,IAAI,IAAI,KAAK;IACjD,MAAM,OAAO,CAAC;IACd,KAAK,QAAQ,GAAG,MAAM,GAAG;IACzB,KAAK,UAAU;IACf,IAAI,GAAG,MAAM,GAAG,oBAAoB,GAAG;KACrC,MAAM,cAAc,GAAG,MAAM,GAAG;KAChC,MAAM,cAAc,GAAG,MAAM,GAAG;KAChC,MAAM,OAAO,CAAC,YAAY;KAC1B,MAAM,OAAO,CAAC,YAAY;KAC1B,YAAY,KAAK,CAAC,YAAY;KAC9B,YAAY,KAAK,CAAC,YAAY;KAC9B,YAAY,KAAK;KACjB,YAAY,KAAK;KACjB,KAAK,cAAc,IAAI,QAAQ,EAAE,UAAU,WAAW;KACtD,KAAK,cAAc,IAAI,QAAQ,EAAE,UAAU,WAAW;IACxD;IACA,MAAM,MAAM,KAAK,IAAI;GACvB;GACA,IAAI,KAAK,KAAK;GACd,MAAM,GAAG,KAAK;EAChB;EAEF,IAAI,KAAK,SAAS,WAAW,OAAO;GAClC,IAAI,WAAW,SAAS,OAAO;IAC7B,IAAI,MAAM,OAAO;KACf,OAAO,KAAK,MAAM,KAAK;KACvB,MAAM,MAAM,MAAM,OAAO,QAAQ,MAAM;IACzC;IACA,MAAM,UAAU;IAChB,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,SAAS,QAAQ,IAAI,IAAI,KAAK;KACvD,MAAM,QAAQ,MAAM,SAAS;KAC7B,IAAI,CAAC,MAAM,SACT,SAAS,KAAK;IAClB;GACF;GACA,MAAM,gBAAgB,CAAC;GACvB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,WAAW,KAAK;IAChD,MAAM,WAAW,KAAK,MAAM;IAC5B,MAAM,QAAQ,SAAS;IACvB,IAAI,UAAU,KAAK,GACjB;IAUF,cAAc,KAAK;KAAE,QAAQ;KAAM,UAAU,CAAC;KAAG,OAAA;MAR/C,OAAO;MACP,aAAa,MAAM;MACnB,OAAO,MAAM;MACb,SAAS,MAAM;MACf,gBAAgB,MAAM;MACtB,gBAAgB,MAAM;MACtB,qBAAqB,SAAS;KAEqB;KAAG,SAAS;IAAM;GACzE;GACA,MAAM,YAAY;IAAE,QAAQ;IAAM,UAAU,CAAC;IAAG,OAAO;IAAM,SAAS;GAAM;GAC5E,KAAK,MAAM,aAAa,eAAe;IACrC,MAAM,aAAa,cAAc;IACjC,MAAM,mBAAmB,cAAc,WAAW,gBAAgB;IAClE,WAAW,SAAS;IACpB,iBAAiB,SAAS,KAAK,UAAU;GAC3C;GACA,SAAS,SAAS;EACpB;EACA,SAAS,iBAAiB,WAAW,OAAO,OAAO;GACjD,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,cAAc,KAAK;IAC3C,MAAM,UAAU,MAAM,SAAS;IAC/B,IAAI;IACJ,IAAI,KAAK,SAAS,WAAW,OAC3B,QAAQ,KAAK,OAAO,GAAG,SAAS,QAAQ,OAAO;SAE/C,QAAQ,QAAQ;IAElB,UAAU,MAAM,QAAQ,IAAI,MAAM,QAAQ,SAAS,KAAK;IACxD,UAAU,MAAM,QAAQ,IAAI,MAAM,QAAQ,SAAS,KAAK;IACxD,UAAU,MAAM,QAAQ,IAAI,MAAM,QAAQ,SAAS,KAAK;GAC1D;EACF;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,YAAY,KAAK;GACjD,MAAM,QAAQ,KAAK,OAAO;GAC1B,MAAM,SAAS,EAAE,MAAM,MAAM,KAAK;GAClC,MAAM,YAAY,IAAI,uBAAuB,KAAK,SAAS,cAAc,GAAG,CAAC;GAC7E,UAAU,OAAO,MAAM;GACvB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,cAAc,GAAG,KACjD,UAAU,MAAM,KAAK,UAAU;GAEjC,IAAI,KAAK,SAAS,WAAW;QACvB,MAAM,GACR,iBAAiB,WAAW,OAAO,CAAC;GAAA,OAGtC,IAAI,MAAM,SAAS,GACjB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,cAAc,KAAK;IAC3C,MAAM,SAAS,KAAK,OAAO,MAAM,SAAS,GAAG;IAC7C,MAAM,QAAQ,MAAM,SAAS,GAAG;IAChC,IAAI,OAAO,SAAS,GAClB,iBAAiB,WAAW,QAAQ,KAAK;GAE7C;QACK,IAAI,MAAM,SAAS,GACxB,iBAAiB,WAAW,OAAO,CAAC;QAC/B,IAAI,MAAM,SAAS;QAErB,IAAI,MAAM,SAAS;QAEnB,IAAI,MAAM,SAAS;QAEnB,IAAI,MAAM,SAAS;QAEnB,IAAI,MAAM,SAAS;QAEnB,IAAI,MAAM,SAAS;QAEnB,IAAI,MAAM,SAAS;GAG1B,aAAa,KAAK,MAAM;GACxB,eAAe,KAAK,SAAS;EAC/B;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,gBAAgB,KAAK;GACrD,MAAM,YAAY,KAAK,YAAY;GACnC,MAAM,SAAS,CAAC;GAChB,KAAK,MAAM,OAAO,WAChB,OAAO,OAAO,UAAU;GAE1B,IAAI,KAAK,SAAS,WAAW;QACvB,OAAO,cAAc,IAAI;KAC3B,MAAM,OAAO,KAAK,MAAM,OAAO;KAC/B,OAAO,SAAS,MAAM,KAAK,SAAS;KACpC,OAAO,SAAS,MAAM,KAAK,SAAS;KACpC,OAAO,SAAS,MAAM,KAAK,SAAS;IACtC;;GAEF,YAAY,KAAK,MAAM;EACzB;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,iBAAiB,KAAK;GACtD,MAAM,aAAa,KAAK,YAAY;GACpC,MAAM,SAAS,CAAC;GAChB,KAAK,MAAM,OAAO,YAChB,OAAO,OAAO,WAAW;GAE3B,MAAM,QAAQ,YAAY,OAAO;GACjC,MAAM,QAAQ,YAAY,OAAO;GACjC,IAAI,MAAM,SAAS,KAAK,MAAM,SAAS;QACjC,MAAM,cAAc,MAAM,MAAM,cAAc,MAAM,KAAK,MAAM,MAAM,WAAW,gBAAgB,MAAM,WACxG,MAAM,OAAO;GAAA;GAGjB,YAAY,KAAK,MAAM;EACzB;EACA,MAAM,WAAW,IAAI,eAAe;EACpC,SAAS,aAAa,YAAY,IAAI,uBAAuB,WAAW,CAAC,CAAC;EAC1E,SAAS,aAAa,UAAU,IAAI,uBAAuB,SAAS,CAAC,CAAC;EACtE,SAAS,aAAa,MAAM,IAAI,uBAAuB,KAAK,CAAC,CAAC;EAC9D,SAAS,aAAa,aAAa,IAAI,sBAAsB,aAAa,CAAC,CAAC;EAC5E,SAAS,aAAa,cAAc,IAAI,uBAAuB,aAAa,CAAC,CAAC;EAC9E,SAAS,SAAS,OAAO;EACzB,KAAK,IAAI,IAAI,GAAG,KAAK,OAAO,QAAQ,IAAI,IAAI,KAC1C,SAAS,SAAS,OAAO,GAAG,QAAQ,OAAO,GAAG,OAAO,CAAC;EAExD,SAAS,QAAQ;EACjB,SAAS,eAAe;EACxB,SAAS,gBAAgB,WAAW;EACpC,SAAS,uBAAuB;EAChC,SAAS,SAAS,MAAM;GACtB;GACA;GACA;GACA;GACA;GACA,QAAQ,KAAK,SAAS;EACxB;EACA,SAAS,sBAAsB;EAC/B,OAAO;CACT;AACF;AACA,IAAM,kBAAN,MAAsB;CACpB,YAAY,SAAS;EACnB,KAAK,UAAU;EACf,KAAK,gBAAgB,IAAI,cAAc,KAAK,OAAO;EACnD,KAAK,YAAY;EACjB,KAAK,cAAc;EACnB,KAAK,eAAe,KAAK;CAC3B;;;;;CAKA,eAAe,aAAa;EAC1B,KAAK,cAAc;EACnB,OAAO;CACT;;;;;CAKA,gBAAgB,cAAc;EAC5B,KAAK,eAAe;EACpB,OAAO;CACT;;;;;;;;CAQA,MAAM,MAAM,UAAU;EACpB,MAAM,YAAY,CAAC;EACnB,MAAM,WAAW,CAAC;EAClB,KAAK,cAAc,eAAe,KAAK,WAAW;EAClD,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,SAAS,eAAe,KAAK;GACpD,MAAM,WAAW,KAAK,UAAU;GAChC,MAAM,SAAS,EAAE,UAAU,CAAC,EAAE;GAC9B,IAAI,SAAS,SAAS,KAAK,GACzB,OAAO,OAAO,SAAS;GACzB,OAAO,QAAQ,IAAI,MAAM,EAAE,UAAU,SAAS,OAAO;GACrD,OAAO,UAAU,SAAS,QAAQ;GAClC,OAAO,WAAW,IAAI,MAAM,EAAE,UAAU,SAAS,OAAO;GACxD,OAAO,cAAc,OAAO,YAAY;GACxC,OAAO,WAAW,SAAS,MAAM,SAAS,IAAI,OAAO;GACrD,OAAO,eAAe,SAAS,aAAa,SAAS,IAAI,OAAO;GAChE,OAAO,MAAM;GACb,OAAO,WAAA;GACP,OAAO,WAAA;GACP,OAAO,WAAA;GACP,OAAO,gBAAA;GACP,OAAO,gBAAA;GACP,IAAI,KAAK,SAAS,WAAW,UAAU,SAAS,OAAO,OAAO,GAC5D,OAAO,OAAA;QAEP,OAAO,OAAO,OAAO,YAAY,IAAA,IAAA;GAEnC,IAAI,KAAK,SAAS,WAAW,OAAO;IAClC,IAAI,SAAS,UAAU;KAErB,MAAM,YADW,SAAS,SACC,MAAM,GAAG;KACpC,OAAO,MAAM,KAAK,aAAa,UAAU,IAAI,QAAQ;KACrD,IAAI,UAAU,SAAS,GAAG;MACxB,MAAM,YAAY,UAAU,GAAG,MAAM,EAAE,EAAE,YAAY;MACrD,OAAO,SAAS,KAAK,aAAa,UAAU,IAAI,QAAQ;MACxD,OAAO,UAAU,cAAc,SAAA,IAAA;KACjC;IACF;IACA,MAAM,eAAe,SAAS,cAAc,KAAK,eAAe,KAAK,aAAa,SAAS,WAAW;IACtG,OAAO,cAAc,KAAK,aAAa,cAAc,UAAU;KAC7D,eAAe;KACf,sBAAsB,KAAK,sBAAsB,YAAY;IAC/D,CAAC;IACD,OAAO,SAAS,oBAAoB;KAClC,WAAW,SAAS,aAAa,IAAI,OAAO;KAC5C,OAAO;MAAC;MAAG;MAAG;KAAC;KACf,OAAO;KACP,SAAS,SAAS,aAAa;IACjC;GACF,OAAO;IACL,IAAI,SAAS,iBAAiB,IAC5B,OAAO,MAAM,KAAK,aAAa,KAAK,SAAS,SAAS,eAAe,QAAQ;IAE/E,IAAI,SAAS,oBAAoB,OAAO,SAAS,YAAY,KAAK,SAAS,WAAW,IAAI;KACxF,OAAO,SAAS,KAAK,aAAa,KAAK,SAAS,SAAS,kBAAkB,QAAQ;KACnF,OAAO,UAAU,SAAS,YAAY,IAAA,IAAA;IACxC;IACA,IAAI,cAAc;IAClB,IAAI,SAAS,cAAc,MAAM,SAAS,aAAa,GAAG;KACxD,eAAe,UAAU,OAAO,SAAS,YAAY,IAAI,MAAM,EAAE,IAAI;KACrE,gBAAgB;IAClB,OAAO;KACL,eAAe,KAAK,SAAS,SAAS;KACtC,gBAAgB;IAClB;IACA,OAAO,cAAc,KAAK,aAAa,cAAc,UAAU;KAC7D,eAAe;KACf,sBAAsB;IACxB,CAAC;IACD,OAAO,SAAS,oBAAoB;KAClC,WAAW,SAAS,WAAW;KAE/B,OAAO,SAAS,UAAU,MAAM,GAAG,CAAC;KACpC,OAAO,SAAS,UAAU;KAC1B,UAAU,SAAS,OAAO,QAAQ,KAAK,SAAS,WAAW;IAC7D;GACF;GACA,IAAI,OAAO,QAAQ,KAAK,GAAG;IACzB,IAAI,CAAC,OAAO,aACV,KAAK,wBAAwB,OAAO,KAAK,UAAU,CAAC;IAEtD,OAAO,SAAS,eAAe,EAAG;GACpC;GACA,UAAU,KAAK,IAAI,iBAAiB,MAAM,CAAC;EAC7C;EACA,IAAI,KAAK,SAAS,WAAW,OAAO;GAClC,IAAI,kBAAkB,SAAS,UAAU,YAAY;IACnD,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,QAAQ,IAAI,IAAI,KAAK;KACjD,MAAM,UAAU,SAAS;KACzB,IAAI,QAAQ,UAAU,IACpB;KACF,MAAM,WAAW,WAAW,QAAQ;KACpC,IAAI,SAAS,YAAY,QAAQ,QAAQ,IACvC,SAAS,cAAc;IAE3B;GACF;GACA,KAAK,IAAI,IAAI,GAAG,KAAK,KAAK,OAAO,QAAQ,IAAI,IAAI,KAAK;IACpD,MAAM,QAAQ,KAAK,OAAO;IAC1B,MAAM,WAAW,MAAM;IACvB,IAAI,MAAM,SAAS,GACjB,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,QAAQ,IAAI,IAAI,KAAK;KACjD,MAAM,SAAS,KAAK,OAAO,SAAS,GAAG;KACvC,IAAI,OAAO,SAAS,GAClB;KACF,gBAAgB,OAAO,UAAU,SAAS;IAC5C;SACK,IAAI,MAAM,SAAS,GACxB,gBAAgB,UAAU,SAAS;GAEvC;EACF;EACA,OAAO;CACT;CAEA,gBAAgB;EACd,IAAI,KAAK,cAAc,MAAM;GAC3B,IAAI,cAAc,KAAK,GACrB,MAAM,IAAI,MAAM,mCAAmC;GAErD,KAAK,YAAY,IAAI,UAAU,KAAK,OAAO;EAC7C;EACA,OAAO,KAAK;CACd;CACA,sBAAsB,MAAM;EAC1B,IAAI,KAAK,WAAW,IAClB,OAAO;EACT,OAAO,uBAAuB,KAAK,IAAI;CACzC;CACA,aAAa,UAAU,UAAU,QAAQ,YAAY,SAAS;EAC5D,SAAS,UAAU,CAAC;EACpB,MAAM,QAAQ;EACd,IAAI;EACJ,IAAI,OAAO,yBAAyB,MAAM;GACxC,IAAI;GACJ,IAAI;IACF,QAAQ,SAAS,SAAS,MAAM,sBAAsB,EAAE,EAAE;GAC5D,SAAS,GAAG;IACV,QAAQ,KACN,sBAAsB,WAAW,yEACnC;IACA,QAAQ;GACV;GACA,WAAW,sBAAsB;EACnC,OACE,WAAW,KAAK,eAAe;EAEjC,IAAI,SAAS,cAAc,KAAK,GAC9B,OAAO,SAAS;EAClB,IAAI,SAAS,KAAK,QAAQ,WAAW,QAAQ;EAC7C,IAAI,WAAW,MACb,SAAS,SAAS,MAAM,EAAE,EAAE,YAAY,MAAM,SAAS,KAAK,cAAc,IAAI,KAAK;EAErF,MAAM,UAAU,OAAO,KACrB,UACA,SAAS,GAAG;GACV,IAAI,OAAO,kBAAkB,MAAM;IACjC,EAAE,QAAQ,MAAM,iBAAiB,EAAE,KAAK;IACxC,EAAE,YAAY;IACd,EAAE,YAAY;GAChB;GACA,EAAE,QAAQ;GACV,EAAE,QAAQ;GACV,EAAE,QAAQ;GACV,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,eAAe,QAAQ,KACjD,QAAQ,eAAe,GAAG,OAAO;GAEnC,OAAO,QAAQ;EACjB,GACA,YACA,OACF;EACA,QAAQ,iBAAiB,CAAC;EAC1B,SAAS,YAAY;EACrB,OAAO;CACT;CACA,iBAAiB,OAAO;EACtB,MAAM,SAAS,SAAS,cAAc,QAAQ;EAC9C,MAAM,UAAU,OAAO,WAAW,IAAI;EACtC,MAAM,QAAQ,MAAM;EACpB,MAAM,SAAS,MAAM;EACrB,OAAO,QAAQ;EACf,OAAO,SAAS;EAChB,QAAQ,UAAU,GAAG,GAAG,OAAO,MAAM;EACrC,QAAQ,UAAU,QAAQ,GAAG,SAAS,CAAC;EACvC,QAAQ,OAAO,KAAM,KAAK,EAAE;EAC5B,QAAQ,UAAU,CAAC,QAAQ,GAAG,CAAC,SAAS,CAAC;EACzC,QAAQ,UAAU,OAAO,GAAG,CAAC;EAC7B,OAAO,QAAQ,aAAa,GAAG,GAAG,OAAO,MAAM;CACjD;CAEA,wBAAwB,KAAK,UAAU,YAAY;EACjD,IAAI,eAAe,KAAK,SAAS,SAAS;GACxC,SAAS,gBAAgB,OAAO;IAC9B,MAAM,SAAS,SAAS,cAAc,QAAQ;IAC9C,OAAO,QAAQ,MAAM;IACrB,OAAO,SAAS,MAAM;IACtB,MAAM,UAAU,OAAO,WAAW,IAAI;IACtC,QAAQ,UAAU,OAAO,GAAG,CAAC;IAC7B,OAAO,QAAQ,aAAa,GAAG,GAAG,OAAO,OAAO,OAAO,MAAM;GAC/D;GACA,SAAS,wBAAwB,OAAO,KAAK,SAAS;IACpD,MAAM,QAAQ,MAAM;IACpB,MAAM,SAAS,MAAM;IACrB,MAAM,OAAO,MAAM;IACnB,MAAM,YAAY;IAClB,IAAI,KAAK,UAAU,QAAQ,YAAY,GACrC,OAAO;IACT,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK,GAAG;KAC1C,MAAM,WAAW;MAAE,GAAG;MAAG,GAAG;KAAE;KAC9B,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;MAC1B,MAAM,QAAQ,QAAQ,IAAI,IAAI;MAC9B,MAAM,KAAK;OAAE,GAAG,IAAI,QAAQ,IAAI;OAAI,GAAG,IAAI,QAAQ,IAAI;MAAG;MAC1D,IAAI,aAAa,OAAO,EAAE,IAAI,WAC5B,OAAO;MACT,SAAS,KAAK,GAAG;MACjB,SAAS,KAAK,GAAG;KACnB;KACA,SAAS,KAAK;KACd,SAAS,KAAK;KACd,IAAI,aAAa,OAAO,QAAQ,IAAI,WAClC,OAAO;IACX;IACA,OAAO;GACT;GACA,SAAS,aAAa,OAAO,IAAI;IAC/B,MAAM,QAAQ,MAAM;IACpB,MAAM,SAAS,MAAM;IACrB,IAAI,IAAI,KAAK,MAAM,GAAG,IAAI,KAAK,IAAI;IACnC,IAAI,IAAI,KAAK,MAAM,GAAG,IAAI,MAAM,IAAI;IACpC,IAAI,IAAI,GACN,KAAK;IACP,IAAI,IAAI,GACN,KAAK;IACP,MAAM,QAAQ,IAAI,QAAQ;IAC1B,OAAO,MAAM,KAAK,QAAQ,IAAI;GAChC;GACA,MAAM,YAAY,QAAQ,MAAM,SAAS,KAAK,IAAI,QAAQ,QAAQ,gBAAgB,QAAQ,KAAK;GAC/F,MAAM,QAAQ,SAAS,OAAO;GAC9B,IAAI,wBACF,WACA,SAAS,WAAW,GAAG,OACvB,SAAS,MAAM,MAAM,MAAM,MAAM,OAAO,MAAM,QAAQ,MAAM,KAAK,CACnE,GACE,IAAI,cAAc;EAEtB,CAAC;CACH;AACF;AACA,IAAM,mBAAN,MAAuB;;;;;;CAMrB,MAAM,KAAK,MAAM;EACf,MAAM,SAAS,KAAK,uBAAuB,KAAK,IAAI,EAAE;EACtD,MAAM,UAAU,KAAK,oBAAoB,KAAK,IAAI,EAAE;EACpD,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAC3C,OAAO,KAAK,QAAQ,EAAE;EAExB,OAAO,IAAI,cAAc,IAAI,IAAI,MAAM;CACzC;;;;;;CAMA,uBAAuB,KAAK,MAAM;EAChC,SAAS,kBAAkB,OAAO,eAAe,OAAO;GACtD,MAAM,KAAK,cAAc,QAAQ,KAAK,GAAG;GACzC,MAAM,KAAK,cAAc,QAAQ,KAAK,GAAG;GACzC,MAAM,KAAK,cAAc,QAAQ,KAAK,GAAG;GACzC,MAAM,KAAK,cAAc,QAAQ,MAAM,GAAG;EAC5C;EACA,MAAM,SAAS,CAAC;EAChB,MAAM,UAAU,CAAC;EACjB,MAAM,QAAQ,KAAK,SAAS;EAC5B,MAAM,qBAAqB,CAAC;EAC5B,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,QAAQ,IAAI,IAAI,KACzC,mBAAmB,MAAM,GAAG,QAAQ;EAEtC,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,SAAS,aAAa,KAAK;GACjD,MAAM,SAAS,IAAI,QAAQ;GAC3B,MAAM,WAAW,OAAO;GACxB,IAAI,mBAAmB,cAAc,KAAK,GACxC;GACF,QAAQ,YAAY,QAAQ,aAAa,CAAC;GAC1C,QAAQ,UAAU,KAAK,MAAM;EAC/B;EACA,KAAK,MAAM,OAAO,SAAS;GACzB,MAAM,QAAQ,QAAQ;GACtB,MAAM,KAAK,SAAS,GAAG,GAAG;IACxB,OAAO,EAAE,WAAW,EAAE;GACxB,CAAC;GACD,MAAM,QAAQ,CAAC;GACf,MAAM,YAAY,CAAC;GACnB,MAAM,YAAY,CAAC;GACnB,MAAM,kBAAkB,CAAC;GACzB,MAAM,kBAAkB,CAAC;GACzB,MAAM,eAAe,KAAK,SAAS,cAAc,GAAG,EAAE,SAAS,QAAQ;GACvE,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,QAAQ,IAAI,IAAI,KAAK;IAC9C,MAAM,OAAO,MAAM,GAAG,WAAW;IACjC,MAAM,WAAW,MAAM,GAAG;IAC1B,MAAM,WAAW,MAAM,GAAG;IAC1B,MAAM,gBAAgB,MAAM,GAAG;IAC/B,MAAM,KAAK,IAAI;IACf,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,UAAU,KAAK,aAAa,KAAK,SAAS,EAAE;IAC9C,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,UAAU,KAAK,SAAS,EAAE;IAC5B,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,kBAAkB,iBAAiB,eAAe,CAAC;IACrD,kBAAkB,iBAAiB,eAAe,CAAC;GACrD;GACA,MAAM,aAAa,YAAY,MAAM;GACrC,OAAO,KAAK,KAAK,aAAa,aAAa,aAAa,qBAAqB,OAAO,WAAW,eAAe,CAAC;GAC/G,OAAO,KACL,KAAK,aAAa,aAAa,eAAe,yBAAyB,OAAO,WAAW,eAAe,CAC1G;EACF;EACA,OAAO,IAAI,cAAc,IAAI,IAAI,MAAM;CACzC;;;;;;CAMA,oBAAoB,KAAK,MAAM;EAC7B,MAAM,SAAS,CAAC;EAChB,MAAM,SAAS,CAAC;EAChB,MAAM,wBAAwB,KAAK;EACnC,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,SAAS,YAAY,KAAK;GAChD,MAAM,QAAQ,IAAI,OAAO;GACzB,MAAM,YAAY,MAAM;GACxB,IAAI,sBAAsB,eAAe,KAAK,GAC5C;GACF,OAAO,aAAa,OAAO,cAAc,CAAC;GAC1C,OAAO,WAAW,KAAK,KAAK;EAC9B;EACA,KAAK,MAAM,OAAO,QAAQ;GACxB,MAAM,QAAQ,OAAO;GACrB,MAAM,KAAK,SAAS,GAAG,GAAG;IACxB,OAAO,EAAE,WAAW,EAAE;GACxB,CAAC;GACD,MAAM,QAAQ,CAAC;GACf,MAAM,SAAS,CAAC;GAChB,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,QAAQ,IAAI,IAAI,KAAK;IAC9C,MAAM,KAAK,MAAM,GAAG,WAAW,EAAE;IACjC,OAAO,KAAK,MAAM,GAAG,MAAM;GAC7B;GACA,OAAO,KAAK,IAAI,oBAAoB,4BAA4B,sBAAsB,OAAO,KAAK,OAAO,MAAM,CAAC;EAClH;EACA,OAAO,IAAI,cAAc,IAAI,IAAI,MAAM;CACzC;;;;;CAKA,qBAAqB,KAAK;EACxB,SAAS,YAAY,OAAO,KAAK;GAC/B,MAAM,KAAK,IAAI,CAAC;GAChB,MAAM,KAAK,IAAI,CAAC;GAChB,MAAM,KAAK,IAAI,CAAC;EAClB;EACA,SAAS,eAAe,OAAO,GAAG;GAChC,MAAM,KAAK,EAAE,CAAC;GACd,MAAM,KAAK,EAAE,CAAC;GACd,MAAM,KAAK,EAAE,CAAC;GACd,MAAM,KAAK,EAAE,CAAC;EAChB;EACA,SAAS,kBAAkB,OAAO,eAAe,OAAO;GACtD,MAAM,KAAK,cAAc,QAAQ,IAAI,KAAK,GAAG;GAC7C,MAAM,KAAK,cAAc,QAAQ,IAAI,KAAK,GAAG;GAC7C,MAAM,KAAK,cAAc,QAAQ,IAAI,KAAK,GAAG;GAC7C,MAAM,KAAK,cAAc,QAAQ,IAAI,KAAK,GAAG;EAC/C;EACA,MAAM,UAAU,IAAI,YAAY,KAAK,IAAI,CAAC,IAAI,IAAI,QAAQ,MAAM;EAChE,QAAQ,KAAK,SAAS,GAAG,GAAG;GAC1B,OAAO,EAAE,WAAW,EAAE;EACxB,CAAC;EACD,MAAM,QAAQ,CAAC;EACf,MAAM,UAAU,CAAC;EACjB,MAAM,cAAc,CAAC;EACrB,MAAM,YAAY,CAAC;EACnB,MAAM,OAAO,CAAC;EACd,MAAM,kBAAkB,CAAC;EACzB,MAAM,kBAAkB,CAAC;EACzB,MAAM,kBAAkB,CAAC;EACzB,MAAM,kBAAkB,CAAC;EACzB,MAAM,aAAa,IAAI,WAAW;EAClC,MAAM,QAAQ,IAAI,MAAM;EACxB,MAAM,WAAW,IAAI,QAAQ;EAC7B,MAAM,SAAS,IAAI,QAAQ;EAC3B,KAAK,IAAI,IAAI,GAAG,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK;GAChD,MAAM,SAAS,QAAQ;GACvB,MAAM,OAAO,OAAO,WAAW;GAC/B,MAAM,MAAM,OAAO;GACnB,MAAM,MAAM,OAAO;GACnB,MAAM,WAAW,OAAO;GACxB,MAAM,MAAM,OAAO;GACnB,MAAM,gBAAgB,OAAO;GAC7B,MAAM,KAAK,IAAI;GACf,SAAS,IAAI,GAAG,GAAG,CAAC,QAAQ;GAC5B,OAAO,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,EAAE;GACjC,MAAM,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE;GACnC,WAAW,aAAa,KAAK;GAC7B,SAAS,IAAI,MAAM;GACnB,SAAS,gBAAgB,UAAU;GACnC,YAAY,SAAS,MAAM;GAC3B,eAAe,aAAa,UAAU;GACtC,YAAY,WAAW,QAAQ;GAC/B,KAAK,KAAK,GAAG;GACb,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,kBAAkB,iBAAiB,eAAe,CAAC;GAErD,kBAAkB,iBAAiB,eAAe,CAAC;GACnD,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,kBAAkB,iBAAiB,eAAe,CAAC;GAErD,kBAAkB,iBAAiB,eAAe,CAAC;EACrD;EACA,MAAM,SAAS,CAAC;EAChB,OAAO,KAAK,KAAK,aAAa,mBAAmB,qBAAqB,OAAO,SAAS,eAAe,CAAC;EACtG,OAAO,KAAK,KAAK,aAAa,eAAe,yBAAyB,OAAO,aAAa,eAAe,CAAC;EAC1G,OAAO,KAAK,KAAK,aAAa,aAAa,qBAAqB,OAAO,WAAW,eAAe,CAAC;EAClG,OAAO,KAAK,KAAK,aAAa,QAAQ,qBAAqB,OAAO,MAAM,eAAe,CAAC;EACxF,OAAO,IAAI,cAAc,IAAI,IAAI,MAAM;CACzC;CAEA,aAAa,MAAM,oBAAoB,OAAO,QAAQ,gBAAgB;EACpE,IAAI,MAAM,SAAS,GAAG;GACpB,QAAQ,MAAM,MAAM;GACpB,SAAS,OAAO,MAAM;GACtB,iBAAiB,eAAe,MAAM;GACtC,MAAM,SAAS,OAAO,SAAS,MAAM;GACrC,MAAM,oBAAoB,eAAe,SAAS,MAAM;GACxD,IAAI,QAAQ;GACZ,KAAK,IAAI,aAAa,GAAG,WAAW,MAAM,QAAQ,aAAa,UAAU,cAAc;IACrF,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAC1B,IAAI,OAAO,QAAQ,SAAS,OAAO,QAAQ,QAAQ,KAAK,SAAS,MAAM,OAAO,QAAQ,SAAS,OAAO,OAAO,aAAa,SAAS,IAAI;KACrI;KACA;IACF;IAEF,IAAI,aAAa,OAAO;KACtB,MAAM,SAAS,MAAM;KACrB,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAC1B,OAAO,QAAQ,SAAS,KAAK,OAAO,aAAa,SAAS;KAE5D,KAAK,IAAI,IAAI,GAAG,IAAI,mBAAmB,KACrC,eAAe,QAAQ,oBAAoB,KAAK,eAAe,aAAa,oBAAoB;IAEpG;GACF;GACA,MAAM,SAAS,QAAQ;GACvB,OAAO,UAAU,QAAQ,KAAK;GAC9B,eAAe,UAAU,QAAQ,KAAK;EACxC;EACA,MAAM,QAAQ,IAAI,mBAAmB,MAAM,OAAO,MAAM;EACxD,MAAM,oBAAoB,SAAS,oCAAoC,QAAQ;GAC7E,OAAO,IAAI,yBACT,KAAK,OACL,KAAK,QACL,KAAK,aAAa,GAClB,QACA,IAAI,aAAa,cAAc,CACjC;EACF;EACA,OAAO;CACT;AACF;AACA,IAAM,2BAAN,cAAuC,YAAY;CACjD,YAAY,oBAAoB,cAAc,YAAY,cAAc,QAAQ;EAC9E,MAAM,oBAAoB,cAAc,YAAY,YAAY;EAChE,KAAK,sBAAsB;CAC7B;CACA,aAAa,IAAI,IAAI,GAAG,IAAI;EAC1B,MAAM,SAAS,KAAK;EACpB,MAAM,SAAS,KAAK;EACpB,MAAM,SAAS,KAAK;EACpB,MAAM,SAAS,KAAK;EACpB,MAAM,UAAU,KAAK;EACrB,MAAM,UAAU,UAAU;EAC1B,MAAM,UAAU,KAAK,KAAK,IAAI,KAAK,MAAM,KAAK,IAAI,OAAO,KAAK;EAC9D,IAAI,WAAW,GAAG;GAChB,MAAM,KAAK,OAAO,KAAK,IAAI;GAC3B,MAAM,KAAK,OAAO,KAAK,IAAI;GAC3B,MAAM,KAAK,OAAO,KAAK,IAAI;GAC3B,MAAM,KAAK,OAAO,KAAK,IAAI;GAC3B,MAAM,QAAQ,KAAK,WAAW,IAAI,IAAI,IAAI,IAAI,OAAO;GACrD,WAAW,UAAU,QAAQ,GAAG,QAAQ,SAAS,QAAQ,SAAS,KAAK;EACzE,OAAO,IAAI,WAAW,GACpB,KAAK,IAAI,IAAI,GAAG,MAAM,QAAQ,EAAE,GAAG;GACjC,MAAM,KAAK,OAAO,KAAK,KAAK,IAAI,IAAI;GACpC,MAAM,KAAK,OAAO,KAAK,KAAK,IAAI,IAAI;GACpC,MAAM,KAAK,OAAO,KAAK,KAAK,IAAI,IAAI;GACpC,MAAM,KAAK,OAAO,KAAK,KAAK,IAAI,IAAI;GACpC,MAAM,QAAQ,KAAK,WAAW,IAAI,IAAI,IAAI,IAAI,OAAO;GACrD,OAAO,KAAK,OAAO,UAAU,MAAM,IAAI,SAAS,OAAO,UAAU,KAAK;EACxE;OACK;GACL,MAAM,KAAK,OAAO,KAAK,IAAI;GAC3B,MAAM,KAAK,OAAO,KAAK,IAAI;GAC3B,MAAM,KAAK,OAAO,KAAK,IAAI;GAC3B,MAAM,KAAK,OAAO,KAAK,IAAI;GAC3B,MAAM,QAAQ,KAAK,WAAW,IAAI,IAAI,IAAI,IAAI,OAAO;GACrD,OAAO,KAAK,OAAO,YAAY,IAAI,SAAS,OAAO,WAAW;EAChE;EACA,OAAO;CACT;CACA,WAAW,IAAI,IAAI,IAAI,IAAI,GAAG;EAC5B,IAAI,IAAI;EACR,IAAI,IAAI;EACR,IAAI,IAAI,IAAI;EACZ,MAAM,OAAO;EACb,MAAM,MAAM;EACZ,MAAM,OAAO;EACb,IAAI,MAAM,MAAM;EAChB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,KAAK;GAC7B,OAAO,IAAI,IAAI,IAAI;GACnB,OAAO,IAAI,IAAI,IAAI;GACnB,MAAM,IAAI,IAAI;GACd,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,MAAM;GACzC,IAAI,KAAK,IAAI,EAAE,IAAI,KACjB;GACF,KAAK;GACL,KAAK,KAAK,IAAI,IAAI,CAAC;GACnB,IAAI,IAAI;EACV;EACA,OAAO,OAAO,KAAK,OAAO,KAAK;CACjC;AACF;;;ACjmCA,IAAM,YAAN,cAAwB,wBAAwB;CAC9C,YAAY,SAAS;EACnB,MAAM,OAAO;CACf;CACA,MAAM,QAAQ,aAAa;EACzB,MAAM,MAAM,IAAI,wBAAwB,QAAQ,CAAC;EACjD,OAAO;GACL,SAAS,IAAI,QAAQ,WAAW;GAChC,OAAO,IAAI;GACX,QAAQ,IAAI;GACZ,QAAQ,IAAI;GACZ,WAAW,IAAI,kBAAkB;GACjC,aAAa,IAAI;EACnB;CACF;AACF;AACA,IAAM,aAAa;AACnB,IAAM,gBAAgB;AACtB,IAAM,0BAAN,MAA8B;;;;;;;CAO5B,YAAY,aAAa,eAAe;EACtC,KAAK,cAAc;EACnB,MAAM,aAAa,IAAI,WAAW,KAAK,aAAa,GAAG,EAAE;EACzD,IAAI,WAAW,OAAO,OAAO,WAAW,OAAO,MAAM,WAAW,OAAO,MAAM,WAAW,OAAO,MAAM,WAAW,OAAO,MAAM,WAAW,OAAO,MAAM,WAAW,OAAO,MAAM,WAAW,OAAO,OAAO,WAAW,OAAO,MAAM,WAAW,OAAO,MAAM,WAAW,QAAQ,MAAM,WAAW,QAAQ,IAAI;GACpS,QAAQ,MAAM,gCAAgC;GAC9C;EACF;EACA,MAAM,WAAW,YAAY;EAC7B,MAAM,iBAAiB,IAAI,SAAS,KAAK,aAAa,IAAI,KAAK,QAAQ;EAEvE,MAAM,eADa,eAAe,UAAU,GAAG,IACjB,MAAM;EACpC,KAAK,SAAS,eAAe,UAAU,IAAI,UAAU,YAAY;EACjE,KAAK,aAAa,eAAe,UAAU,IAAI,UAAU,YAAY;EACrE,KAAK,WAAW,eAAe,UAAU,IAAI,UAAU,YAAY;EACnE,KAAK,mBAAmB,eAAe,UAAU,IAAI,UAAU,YAAY;EAC3E,KAAK,uBAAuB,eAAe,UAAU,IAAI,UAAU,YAAY;EAC/E,KAAK,aAAa,eAAe,UAAU,IAAI,UAAU,YAAY;EACrE,KAAK,cAAc,eAAe,UAAU,IAAI,UAAU,YAAY;EACtE,KAAK,aAAa,eAAe,UAAU,IAAI,UAAU,YAAY;EACrE,KAAK,wBAAwB,eAAe,UAAU,IAAI,UAAU,YAAY;EAChF,KAAK,gBAAgB,eAAe,UAAU,KAAK,UAAU,YAAY;EACzE,KAAK,uBAAuB,eAAe,UAAU,KAAK,UAAU,YAAY;EAChF,KAAK,sBAAsB,eAAe,UAAU,KAAK,UAAU,YAAY;EAC/E,IAAI,KAAK,WAAW,GAAG;GACrB,QAAQ,KAAK,6CAA6C;GAC1D;EACF,OACE,KAAK,uBAAuB,KAAK,IAAI,GAAG,KAAK,oBAAoB;EAEnE,IAAI,KAAK,gBAAgB,KAAK,KAAK,eAAe,GAAG;GACnD,QAAQ,KAAK,sCAAsC;GACnD;EACF;EACA,IAAI,KAAK,0BAA0B,GAAG;GACpC,QAAQ,KAAK,wCAAwC;GACrD;EACF;EACA,IAAI,KAAK,kBAAkB,eAAe;GACxC,QAAQ,KAAK,6BAA6B,gBAAgB,iBAAiB,KAAK,aAAa;GAC7F;EACF;EACA,KAAK,WAAW;CAClB;CACA,QAAQ,aAAa;EACnB,MAAM,UAAU,CAAC;EACjB,IAAI,aAAa,aAAa,KAAK;EACnC,IAAI,QAAQ,KAAK;EACjB,IAAI,SAAS,KAAK;EAClB,MAAM,cAAc,cAAc,KAAK,uBAAuB;EAC9D,KAAK,IAAI,QAAQ,GAAG,QAAQ,aAAa,SAAS;GAChD,MAAM,YAAY,IAAI,WAAW,KAAK,aAAa,YAAY,CAAC,EAAE;GAClE,cAAc;GACd,KAAK,IAAI,OAAO,GAAG,OAAO,KAAK,eAAe,QAAQ;IACpD,MAAM,YAAY,IAAI,WAAW,KAAK,aAAa,YAAY,SAAS;IACxE,QAAQ,KAAK;KAAE,MAAM;KAAW;KAAO;IAAO,CAAC;IAC/C,cAAc;IACd,cAAc,KAAK,YAAY,KAAK;GACtC;GACA,QAAQ,KAAK,IAAI,GAAG,QAAQ,EAAG;GAC/B,SAAS,KAAK,IAAI,GAAG,SAAS,EAAG;EACnC;EACA,OAAO;CACT;AACF;;;ACvFA,IAAM,aAAN,cAAyB,OAAO;CAC9B,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,MAAM,QAAQ;EACd,MAAM,SAAS,IAAI,WAAW,KAAK,OAAO;EAC1C,OAAO,QAAQ,KAAK,IAAI;EACxB,OAAO,gBAAgB,aAAa;EACpC,OAAO,mBAAmB,KAAK,eAAe;EAC9C,OAAO,KACL,KACA,SAAS,QAAQ;GACf,IAAI;IACF,OAAO,MAAM,MAAM,MAAM,CAAC;GAC5B,SAAS,GAAG;IACV,IAAI,SACF,QAAQ,CAAC;SAET,QAAQ,MAAM,CAAC;IAEjB,MAAM,QAAQ,UAAU,GAAG;GAC7B;EACF,GACA,YACA,OACF;CACF;CACA,MAAM,QAAQ;EACZ,MAAM,QAAQ,IAAI,MAAM;EACxB,MAAM,MAAM,UAAU,IAAI,WAAW,OAAO,MAAM,EAAE,CAAC,CAAC;EACtD,MAAM,WAAW,KAAK,MAAM,UAAU,IAAI,gBAAgB,CAAC;EAC3D,MAAM,OAAO,IAAI,SAAS,IAAI,eAAe,MAAM;EACnD,MAAM,cAAc,KAAK,SAAS,IAAI,IAAI;EAC1C,MAAM,UAAU,CAAC;EACjB,IAAI,SAAS;EACb,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,KAAK;GACpC,MAAM,cAAc,KAAK,SAAS,QAAQ,IAAI;GAC9C,MAAM,cAAc;IAClB,KAAK,WAAW,SAAS,GAAG,IAAI;IAChC,KAAK,WAAW,SAAS,GAAG,IAAI;IAChC,KAAK,WAAW,SAAS,IAAI,IAAI;IACjC,KAAK,WAAW,SAAS,IAAI,IAAI;GACnC;GACA,MAAM,aAAa,KAAK,WAAW,SAAS,IAAI,IAAI;GACpD,MAAM,cAAc,KAAK,UAAU,SAAS,IAAI,IAAI;GACpD,MAAM,oBAAoB,KAAK,UAAU,SAAS,IAAI,IAAI;GAC1D,IAAI,qBAAqB;GACzB,IAAI,2BAA2B;GAC/B,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;IAC1B,MAAM,OAAO,KAAK;IAClB,KAAK,cAAc,QAAQ,GACzB,sBAAsB;IACxB,KAAK,oBAAoB,QAAQ,GAC/B,4BAA4B;GAChC;GACA,SAAS,SAAS,KAAK,qBAAqB;GAC5C,MAAM,qBAAqB,KAAK,SAAS,QAAQ,IAAI;GACrD,MAAM,YAAY,IAAI,aAAa,qBAAqB,CAAC;GACzD,MAAM,cAAc,IAAI,aAAa,qBAAqB,CAAC;GAC3D,SAAS,SAAS;GAClB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK,GAAG,KAAK,GAAG;IAC3D,UAAU,IAAI,KAAK,KAAK,WAAW,SAAS,GAAG,IAAI;IACnD,UAAU,IAAI,KAAK,KAAK,WAAW,SAAS,GAAG,IAAI;IACnD,UAAU,IAAI,KAAK,KAAK,WAAW,SAAS,GAAG,IAAI;IACnD,YAAY,IAAI,KAAK,KAAK,WAAW,SAAS,IAAI,IAAI;IACtD,YAAY,IAAI,KAAK,KAAK,WAAW,SAAS,IAAI,IAAI;IACtD,YAAY,IAAI,KAAK,KAAK,WAAW,SAAS,IAAI,IAAI;IACtD,YAAY,IAAI,KAAK,KAAK,WAAW,SAAS,IAAI,IAAI;IACtD,SAAS,SAAS,KAAK;GACzB;GACA,IAAI,eAAe,YAAY,OAC7B,QAAQ,eAAe,CAAC;GAE1B,QAAQ,aAAa,KAAK;IAAC;IAAW;IAAa;IAAY;GAAW,CAAC;EAC7E;EACA,KAAK,MAAM,eAAe,SAAS;GACjC,MAAM,WAAW,IAAI,eAAe,QAAQ,YAAY;GACxD,MAAM,WAAW,YAAY,SAAS,WAAW,YAAY;GAC7D,MAAM,IAAI,IAAI,KAAK,UAAU,QAAQ,CAAC;EACxC;EACA,OAAO;CACT;AACF;AACA,IAAM,iBAAN,cAA6B,eAAe;CAC1C,YAAY,SAAS;EACnB,MAAM;EACN,MAAM,WAAW,CAAC;EAClB,MAAM,SAAS,CAAC;EAChB,MAAM,MAAM,CAAC;EACb,MAAM,WAAW,IAAI,QAAQ;EAC7B,MAAM,eAAe,IAAI,QAAQ;EACjC,MAAM,aAAa,IAAI,WAAW;EAClC,MAAM,iBAAiB,IAAI,WAAW;EACtC,MAAM,UAAU,IAAI,QAAQ;EAC5B,MAAM,UAAU,IAAI,QAAQ;EAC5B,MAAM,UAAU,IAAI,QAAQ;EAC5B,MAAM,UAAU,IAAI,QAAQ;EAC5B,KAAK,MAAM,KAAK,SAAS;GACvB,MAAM,SAAS,QAAQ;GACvB,MAAM,YAAY,OAAO;GACzB,MAAM,cAAc,OAAO;GAC3B,MAAM,OAAO,OAAO;GACpB,MAAM,QAAQ,OAAO;GACrB,aAAa,UAAU,WAAW,CAAC;GACnC,eAAe,UAAU,aAAa,CAAC;GACvC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,UAAU,QAAQ,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG;IAClE,SAAS,UAAU,WAAW,CAAC;IAC/B,WAAW,UAAU,aAAa,CAAC;IACnC,QAAQ,IAAI,CAAC,MAAM,GAAG,CAAC;IACvB,QAAQ,gBAAgB,UAAU;IAClC,QAAQ,IAAI,QAAQ;IACpB,QAAQ,IAAI,MAAM,GAAG,CAAC;IACtB,QAAQ,gBAAgB,UAAU;IAClC,QAAQ,IAAI,QAAQ;IACpB,QAAQ,IAAI,MAAM,GAAG,CAAC;IACtB,QAAQ,gBAAgB,cAAc;IACtC,QAAQ,IAAI,YAAY;IACxB,QAAQ,IAAI,CAAC,MAAM,GAAG,CAAC;IACvB,QAAQ,gBAAgB,cAAc;IACtC,QAAQ,IAAI,YAAY;IACxB,SAAS,KAAK,QAAQ,GAAG,QAAQ,GAAG,CAAC,QAAQ,CAAC;IAC9C,SAAS,KAAK,QAAQ,GAAG,QAAQ,GAAG,CAAC,QAAQ,CAAC;IAC9C,SAAS,KAAK,QAAQ,GAAG,QAAQ,GAAG,CAAC,QAAQ,CAAC;IAC9C,SAAS,KAAK,QAAQ,GAAG,QAAQ,GAAG,CAAC,QAAQ,CAAC;IAC9C,SAAS,KAAK,QAAQ,GAAG,QAAQ,GAAG,CAAC,QAAQ,CAAC;IAC9C,SAAS,KAAK,QAAQ,GAAG,QAAQ,GAAG,CAAC,QAAQ,CAAC;IAC9C,aAAa,KAAK,QAAQ;IAC1B,eAAe,KAAK,UAAU;IAC9B,OAAO,KAAK,GAAG,KAAK;IACpB,OAAO,KAAK,GAAG,KAAK;IACpB,OAAO,KAAK,GAAG,KAAK;IACpB,OAAO,KAAK,GAAG,KAAK;IACpB,OAAO,KAAK,GAAG,KAAK;IACpB,OAAO,KAAK,GAAG,KAAK;IACpB,MAAM,KAAK,IAAI;IACf,MAAM,MAAM,IAAI,KAAK;IACrB,IAAI,KAAK,IAAI,CAAC;IACd,IAAI,KAAK,IAAI,CAAC;IACd,IAAI,KAAK,IAAI,CAAC;IACd,IAAI,KAAK,IAAI,CAAC;IACd,IAAI,KAAK,IAAI,CAAC;IACd,IAAI,KAAK,IAAI,CAAC;GAChB;EACF;EACA,KAAK,aAAa,YAAY,IAAI,gBAAgB,IAAI,aAAa,QAAQ,GAAG,CAAC,CAAC;EAChF,KAAK,aAAa,SAAS,IAAI,gBAAgB,IAAI,aAAa,MAAM,GAAG,CAAC,CAAC;EAC3E,KAAK,aAAa,MAAM,IAAI,gBAAgB,IAAI,aAAa,GAAG,GAAG,CAAC,CAAC;CACvE;AACF;AACA,IAAM,mBAAmB;CACvB,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;CACxC,wCAAwC;AAC1C;AACA,IAAM,SAAS,EACb,QAAQ;CACN,YAAY;;;;;;;;;;;;;;CAcZ,cAAc;;;;;;;;;;;CAWd,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;CA0BL,cAAc;;;;;;;;AAQhB,EACF;AACA,IAAM,iBAAiB,EACrB,OAAO;CACL,UAAU;EACR,SAAS,EACP,OAAO,IAAI,cAAc,EAAE,QAAQ,uBAAuB,EAAE,OAAO,KAAK,YAAY,EACtF;EACA,WAAW,EAAE,OAAO,KAAM;EAC1B,eAAe,EAAE,OAAO,IAAK;EAC7B,OAAO,EAAE,OAAO,EAAE;CACpB;CACA,cAAc;;;;;;;;;;;;;;;;;;KAkBb,OAAO,OAAO,aAAa;KAC3B,OAAO,OAAO,IAAI;;;;;;;;;;;;;;CAcnB,gBAAgB;;;;;;;;;;;;KAYf,OAAO,OAAO,WAAW;KACzB,OAAO,OAAO,aAAa;;;;;;;;;;;;CAY5B,MAAM;CACN,aAAa;CACb,WAAW;CACX,YAAY;CACZ,WAAW;CACX,UAAU;CACV,UAAU;CACV,eAAe;CACf,eAAe;CACf,oBAAoB;CACpB,UAAU;CACV,eAAe;AACjB,EACF;AACA,SAAS,YAAY,MAAM;CAEzB,QADa,iBAAiB,OAC9B;EACE,KAAK,SACH,OAAO,IAAI,kBAAkB,QAAQ,EAAE,KAAK;EAC9C,SACE,OAAO,IAAI,kBAAkB;GAAE,cAAc;GAAM,MAAA;EAAiB,CAAC;CACzE;AACF;;;AClXA,IAAM,6BAA6B,IAAI,QAAQ;AAC/C,IAAM,cAAN,cAA0B,OAAO;CAC/B,YAAY,SAAS;EACnB,MAAM,OAAO;EACb,KAAK,cAAc;EACnB,KAAK,gBAAgB,CAAC;EACtB,KAAK,gBAAgB;EACrB,KAAK,iBAAiB;EACtB,KAAK,cAAc;EACnB,KAAK,aAAa,CAAC;EACnB,KAAK,mBAAmB;EACxB,KAAK,kBAAkB;EACvB,KAAK,sBAAsB;GACzB,UAAU;GACV,QAAQ;GACR,OAAO;GACP,IAAI;EACN;EACA,KAAK,wBAAwB;GAC3B,UAAU;GACV,QAAQ;GACR,OAAO;GACP,IAAI;EACN;CACF;CACA,eAAe,MAAM;EACnB,KAAK,cAAc;EACnB,OAAO;CACT;CACA,iBAAiB,QAAQ;EACvB,KAAK,gBAAgB;EACrB,OAAO;CACT;CACA,eAAe,aAAa;EAC1B,KAAK,cAAc;EACnB,OAAO;CACT;CACA,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,MAAM,SAAS,IAAI,WAAW,KAAK,OAAO;EAC1C,OAAO,QAAQ,KAAK,IAAI;EACxB,OAAO,gBAAgB,aAAa;EACpC,OAAO,iBAAiB,KAAK,aAAa;EAC1C,OAAO,mBAAmB,KAAK,eAAe;EAC9C,OAAO,KACL,MACC,WAAW;GACV,MAAM,aAAa;IACjB,cAAc,KAAK;IACnB,gBAAgB,KAAK;IACrB,cAAc;GAChB;GACA,KAAK,eAAe,QAAQ,UAAU,EAAE,KAAK,MAAM,EAAE,MAAM,OAAO;EACpE,GACA,YACA,OACF;CACF;;CAEA,gBAAgB,QAAQ,UAAU,cAAc,gBAAgB;EAC9D,MAAM,aAAa;GACjB,cAAc,gBAAgB,KAAK;GACnC,gBAAgB,kBAAkB,KAAK;GACvC,cAAc,CAAC,CAAC;EAClB;EACA,KAAK,eAAe,QAAQ,UAAU,EAAE,KAAK,QAAQ;CACvD;CACA,eAAe,QAAQ,YAAY;EACjC,KAAK,MAAM,aAAa,WAAW,gBAAgB;GACjD,MAAM,OAAO,WAAW,eAAe;GACvC,IAAI,KAAK,sBAAsB,KAAK,GAClC,WAAW,eAAe,aAAa,KAAK;EAEhD;EACA,MAAM,UAAU,KAAK,UAAU,UAAU;EACzC,IAAI,WAAW,IAAI,MAAM,GAAG;GAC1B,MAAM,aAAa,WAAW,IAAI,MAAM;GACxC,IAAI,WAAW,QAAQ,SACrB,OAAO,WAAW;QACb,IAAI,OAAO,eAAe,GAC/B,MAAM,IAAI,MACR,+GACF;EAEJ;EACA,IAAI;EACJ,MAAM,SAAS,KAAK;EACpB,MAAM,WAAW,OAAO;EACxB,MAAM,kBAAkB,KAAK,WAAW,QAAQ,QAAQ,EAAE,MAAM,YAAY;GAC1E,SAAS;GACT,OAAO,IAAI,SAAS,SAAS,WAAW;IACtC,OAAO,WAAW,UAAU;KAAE;KAAS;IAAO;IAC9C,OAAO,YAAY;KAAE,MAAM;KAAU,IAAI;KAAQ;KAAY;IAAO,GAAG,CAAC,MAAM,CAAC;GACjF,CAAC;EACH,CAAC,EAAE,MAAM,YAAY,KAAK,gBAAgB,QAAQ,QAAQ,CAAC;EAC3D,gBAAgB,YAAY,IAAI,EAAE,WAAW;GAC3C,IAAI,UAAU,QACZ,KAAK,aAAa,QAAQ,MAAM;EAEpC,CAAC;EACD,WAAW,IAAI,QAAQ;GACrB,KAAK;GACL,SAAS;EACX,CAAC;EACD,OAAO;CACT;CACA,gBAAgB,cAAc;EAC5B,MAAM,WAAW,IAAI,eAAe;EACpC,IAAI,aAAa,OACf,SAAS,SAAS,IAAI,gBAAgB,aAAa,MAAM,OAAO,CAAC,CAAC;EAEpE,KAAK,IAAI,IAAI,GAAG,IAAI,aAAa,WAAW,QAAQ,KAAK;GACvD,MAAM,YAAY,aAAa,WAAW;GAC1C,MAAM,OAAO,UAAU;GACvB,MAAM,QAAQ,UAAU;GACxB,MAAM,WAAW,UAAU;GAC3B,SAAS,aAAa,MAAM,IAAI,gBAAgB,OAAO,QAAQ,CAAC;EAClE;EACA,OAAO;CACT;CACA,aAAa,KAAK,cAAc;EAC9B,MAAM,SAAS,IAAI,WAAW,KAAK,OAAO;EAC1C,OAAO,QAAQ,KAAK,WAAW;EAC/B,OAAO,gBAAgB,YAAY;EACnC,OAAO,mBAAmB,KAAK,eAAe;EAC9C,OAAO,IAAI,SAAS,SAAS,WAAW;GACtC,OAAO,KAAK,KAAK,SAAS,KAAK,GAAG,MAAM;EAC1C,CAAC;CACH;CACA,UAAU;EACR,KAAK,aAAa;EAClB,OAAO;CACT;CACA,eAAe;EACb,IAAI,KAAK,gBACP,OAAO,KAAK;EACd,MAAM,QAAQ,OAAO,gBAAgB,YAAY,KAAK,cAAc,SAAS;EAC7E,MAAM,mBAAmB,CAAC;EAC1B,IAAI,OACF,iBAAiB,KAAK,KAAK,aAAa,oBAAoB,MAAM,CAAC;OAC9D;GACL,iBAAiB,KAAK,KAAK,aAAa,yBAAyB,MAAM,CAAC;GACxE,iBAAiB,KAAK,KAAK,aAAa,sBAAsB,aAAa,CAAC;EAC9E;EACA,KAAK,iBAAiB,QAAQ,IAAI,gBAAgB,EAAE,MAAM,cAAc;GACtE,MAAM,YAAY,UAAU;GAC5B,IAAI,CAAC,OACH,KAAK,cAAc,aAAa,UAAU;GAE5C,MAAM,KAAK,YAAY,SAAS;GAChC,MAAM,OAAO;IACX;IACA;IACA;IACA;IACA,GAAG,UAAU,GAAG,QAAQ,GAAG,IAAI,GAAG,GAAG,YAAY,GAAG,CAAC;GACvD,EAAE,KAAK,IAAI;GACX,KAAK,kBAAkB,IAAI,gBAAgB,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC;EAC7D,CAAC;EACD,OAAO,KAAK;CACd;CACA,WAAW,QAAQ,UAAU;EAC3B,OAAO,KAAK,aAAa,EAAE,WAAW;GACpC,IAAI,KAAK,WAAW,SAAS,KAAK,aAAa;IAC7C,MAAM,UAAU,IAAI,OAAO,KAAK,eAAe;IAC/C,QAAQ,aAAa,CAAC;IACtB,QAAQ,aAAa,CAAC;IACtB,QAAQ,YAAY;IACpB,QAAQ,YAAY;KAAE,MAAM;KAAQ,eAAe,KAAK;IAAc,CAAC;IACvE,QAAQ,YAAY,SAAS,GAAG;KAC9B,MAAM,UAAU,EAAE;KAClB,QAAQ,QAAQ,MAAhB;MACE,KAAK;OACH,QAAQ,WAAW,QAAQ,IAAI,QAAQ,OAAO;OAC9C;MACF,KAAK;OACH,QAAQ,WAAW,QAAQ,IAAI,OAAO,OAAO;OAC7C;MACF,SACE,QAAQ,MAAM,8CAA6C,QAAQ,OAAO,IAAG;KACjF;IACF;IACA,KAAK,WAAW,KAAK,OAAO;GAC9B,OACE,KAAK,WAAW,KAAK,SAAS,GAAG,GAAG;IAClC,OAAO,EAAE,YAAY,EAAE,YAAY,KAAK;GAC1C,CAAC;GAEH,MAAM,SAAS,KAAK,WAAW,KAAK,WAAW,SAAS;GACxD,OAAO,WAAW,UAAU;GAC5B,OAAO,aAAa;GACpB,OAAO;EACT,CAAC;CACH;CACA,aAAa,QAAQ,QAAQ;EAC3B,OAAO,aAAa,OAAO,WAAW;EACtC,OAAO,OAAO,WAAW;EACzB,OAAO,OAAO,WAAW;CAC3B;CACA,QAAQ;EACN,QAAQ,IACN,eACA,KAAK,WAAW,KAAK,WAAW,OAAO,SAAS,CAClD;CACF;CACA,UAAU;EACR,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,WAAW,QAAQ,EAAE,GAC5C,KAAK,WAAW,GAAG,UAAU;EAE/B,KAAK,WAAW,SAAS;EACzB,OAAO;CACT;AACF;AACA,SAAS,cAAc;CACrB,IAAI;CACJ,IAAI;CACJ,YAAY,SAAS,GAAG;EACtB,MAAM,UAAU,EAAE;EAClB,QAAQ,QAAQ,MAAhB;GACE,KAAK;IACH,gBAAgB,QAAQ;IACxB,iBAAiB,IAAI,QAAQ,SAAS,SAAS;KAC7C,cAAc,iBAAiB,SAAS,OAAO;MAC7C,QAAQ,EAAE,MAAM,CAAC;KACnB;KACA,mBAAmB,aAAa;IAClC,CAAC;IACD;GACF,KAAK;IACH,MAAM,SAAS,QAAQ;IACvB,MAAM,aAAa,QAAQ;IAC3B,eAAe,MAAM,WAAW;KAC9B,MAAM,QAAQ,OAAO;KACrB,MAAM,UAAU,IAAI,MAAM,QAAQ;KAClC,MAAM,gBAAgB,IAAI,MAAM,cAAc;KAC9C,cAAc,KAAK,IAAI,UAAU,MAAM,GAAG,OAAO,UAAU;KAC3D,IAAI;MACF,MAAM,WAAW,eAAe,OAAO,SAAS,eAAe,UAAU;MACzE,MAAM,UAAU,SAAS,WAAW,KAAK,SAAS,KAAK,MAAM,MAAM;MACnE,IAAI,SAAS,OACX,QAAQ,KAAK,SAAS,MAAM,MAAM,MAAM;MAC1C,KAAK,YAAY;OAAE,MAAM;OAAU,IAAI,QAAQ;OAAI;MAAS,GAAG,OAAO;KACxE,SAAS,OAAO;MACd,QAAQ,MAAM,KAAK;MACnB,KAAK,YAAY;OAAE,MAAM;OAAS,IAAI,QAAQ;OAAI,OAAO,MAAM;MAAQ,CAAC;KAC1E,UAAU;MACR,MAAM,QAAQ,aAAa;MAC3B,MAAM,QAAQ,OAAO;KACvB;IACF,CAAC;IACD;EACJ;CACF;CACA,SAAS,eAAe,OAAO,SAAS,eAAe,YAAY;EACjE,MAAM,eAAe,WAAW;EAChC,MAAM,iBAAiB,WAAW;EAClC,IAAI;EACJ,IAAI;EACJ,MAAM,eAAe,QAAQ,uBAAuB,aAAa;EACjE,IAAI,iBAAiB,MAAM,iBAAiB;GAC1C,gBAAgB,IAAI,MAAM,KAAK;GAC/B,iBAAiB,QAAQ,mBAAmB,eAAe,aAAa;EAC1E,OAAO,IAAI,iBAAiB,MAAM,aAAa;GAC7C,gBAAgB,IAAI,MAAM,WAAW;GACrC,iBAAiB,QAAQ,yBAAyB,eAAe,aAAa;EAChF,OACE,MAAM,IAAI,MAAM,8CAA8C;EAEhE,IAAI,CAAC,eAAe,GAAG,KAAK,cAAc,QAAQ,GAChD,MAAM,IAAI,MAAM,yCAAyC,eAAe,UAAU,CAAC;EAErF,MAAM,WAAW;GAAE,OAAO;GAAM,YAAY,CAAC;EAAE;EAC/C,KAAK,MAAM,iBAAiB,cAAc;GACxC,MAAM,gBAAgB,KAAK,eAAe;GAC1C,IAAI;GACJ,IAAI;GACJ,IAAI,WAAW,cAAc;IAC3B,cAAc,aAAa;IAC3B,YAAY,QAAQ,uBAAuB,eAAe,WAAW;GACvE,OAAO;IACL,cAAc,QAAQ,eAAe,eAAe,MAAM,aAAa,eAAe;IACtF,IAAI,gBAAgB,IAClB;IACF,YAAY,QAAQ,aAAa,eAAe,WAAW;GAC7D;GACA,SAAS,WAAW,KAAK,gBAAgB,OAAO,SAAS,eAAe,eAAe,eAAe,SAAS,CAAC;EAClH;EACA,IAAI,iBAAiB,MAAM,iBACzB,SAAS,QAAQ,YAAY,OAAO,SAAS,aAAa;EAE5D,MAAM,QAAQ,aAAa;EAC3B,OAAO;CACT;CACA,SAAS,YAAY,OAAO,SAAS,eAAe;EAElD,MAAM,aADW,cAAc,UACL,IAAI;EAC9B,MAAM,aAAa,aAAa;EAChC,MAAM,MAAM,MAAM,QAAQ,UAAU;EACpC,QAAQ,wBAAwB,eAAe,YAAY,GAAG;EAC9D,MAAM,QAAQ,IAAI,YAAY,MAAM,QAAQ,QAAQ,KAAK,UAAU,EAAE,MAAM;EAC3E,MAAM,MAAM,GAAG;EACf,OAAO;GAAE,OAAO;GAAO,UAAU;EAAE;CACrC;CACA,SAAS,gBAAgB,OAAO,SAAS,eAAe,eAAe,eAAe,WAAW;EAC/F,MAAM,gBAAgB,UAAU,eAAe;EAE/C,MAAM,YADY,cAAc,WACN,IAAI;EAC9B,MAAM,aAAa,YAAY,cAAc;EAC7C,MAAM,WAAW,iBAAiB,OAAO,aAAa;EACtD,MAAM,MAAM,MAAM,QAAQ,UAAU;EACpC,QAAQ,kCAAkC,eAAe,WAAW,UAAU,YAAY,GAAG;EAC7F,MAAM,QAAQ,IAAI,cAAc,MAAM,QAAQ,QAAQ,KAAK,SAAS,EAAE,MAAM;EAC5E,MAAM,MAAM,GAAG;EACf,OAAO;GACL,MAAM;GACN;GACA,UAAU;EACZ;CACF;CACA,SAAS,iBAAiB,OAAO,eAAe;EAC9C,QAAQ,eAAR;GACE,KAAK,cACH,OAAO,MAAM;GACf,KAAK,WACH,OAAO,MAAM;GACf,KAAK,YACH,OAAO,MAAM;GACf,KAAK,YACH,OAAO,MAAM;GACf,KAAK,YACH,OAAO,MAAM;GACf,KAAK,aACH,OAAO,MAAM;GACf,KAAK,aACH,OAAO,MAAM;EACjB;CACF;AACF;;;AC/UA,IAAM,uBAAN,cAAmC,OAAO;CACxC,YAAY,SAAS;EACnB,MAAM,OAAO;EACb,KAAK,YAAY,IAAI,WAAW;EAChC,KAAK,OAAO;CACd;CACA,KAAK,MAAM,QAAQ,YAAY,SAAS;EACtC,IAAI,OAAO,SAAS,UAClB,OAAO,CAAC,IAAI;OACP,IAAI,CAAC,MAAM,QAAQ,IAAI,GAAG;GAC/B,QAAQ,KAAK,+EAA+E;GAC5F,KAAK,YAAY,IAAI;GACrB,OAAO;GACP,SAAS;GACT,aAAa;GACb,UAAU,UAAU;EACtB;EACA,MAAM,UAAU,IAAI,YAAY;EAChC,QAAQ,OAAO,KAAK;EACpB,QAAQ,QAAQ,MAAhB;GACE,KAAK;GACL,KAAK;IACH,IAAI,gBAAgB,SAClB,QAAQ,aAAa;SAErB,QAAQ,WAAW;IACrB,QAAQ,YAAY;IACpB,QAAQ,YAAY;IACpB,QAAQ,kBAAkB;IAC1B;EACJ;EACA,MAAM,QAAQ;EACd,IAAI,SAAS;EACb,SAAS,YAAY,GAAG,SAAS,aAAa,UAAU;GACtD,IAAI,WAAW,MAAM,OAAO,EAAE,QAAQ,MAAM,IAAI,EAAE,gBAAgB,aAAa,EAAE,mBAAmB,MAAM,eAAe,EAAE,KACzH,KAAK,IACL,SAAS,QAAQ;IACf;IACA,MAAM,UAAU,MAAM,UAAU,MAAM,MAAM;IAC5C,IAAI,CAAC,SACH;IACF,IAAI,QAAQ,SAAS,KAAK,GAAG;KAC3B,MAAM,cAAc,IAAI,YAAY,QAAQ,MAAM,QAAQ,OAAO,QAAQ,MAAM;KAC/E,YAAY,OAAO,QAAQ;KAC3B,IAAI,gBAAgB,aAClB,YAAY,aAAa,QAAQ;UAEjC,YAAY,WAAW,QAAQ;KACjC,YAAY,SAAS,QAAQ;KAC7B,YAAY,YAAY,QAAQ;KAChC,YAAY,YAAY,QAAQ;KAChC,YAAY,kBAAkB,QAAQ;KACtC,QAAQ,OAAO,KAAK;IACtB;IACA,IAAI,WAAW,GAAG;KAChB,QAAQ,cAAc;KACtB,IAAI,SACF,QAAQ,OAAO;IACnB;GACF,GACA,aACA,QACF;EACF;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAC/B,YAAY,GAAG,QAAQ,YAAY,OAAO;EAE5C,OAAO;CACT;CACA,YAAY,OAAO;EACjB,KAAK,OAAO;EACZ,KAAK,UAAU,YAAY,KAAK;EAChC,OAAO;CACT;AACF;;;AC3EA,IAAM,YAAN,cAAwB,OAAO;CAC7B,YAAY,SAAS;EACnB,MAAM,OAAO;CACf;CACA,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,MAAM,QAAQ;EACd,MAAM,SAAS,IAAI,WAAW,MAAM,OAAO;EAC3C,OAAO,QAAQ,MAAM,IAAI;EACzB,OAAO,iBAAiB,MAAM,aAAa;EAC3C,OAAO,mBAAmB,MAAM,eAAe;EAC/C,OAAO,KACL,KACA,SAAS,MAAM;GACb,IAAI;IACF,OAAO,MAAM,MAAM,IAAI,CAAC;GAC1B,SAAS,GAAG;IACV,IAAI,SACF,QAAQ,CAAC;SAET,QAAQ,MAAM,CAAC;IAEjB,MAAM,QAAQ,UAAU,GAAG;GAC7B;EACF,GACA,YACA,OACF;CACF;CAEA,MAAM,MAAM;EACV,SAAS,KAAK,OAAO;GACnB,OAAO,MAAM,QAAQ,UAAU,EAAE,EAAE,QAAQ,UAAU,EAAE;EACzD;EACA,SAAS,WAAW,OAAO;GACzB,OAAO,MAAM,OAAO,CAAC,EAAE,YAAY,IAAI,MAAM,OAAO,CAAC,EAAE,YAAY;EACrE;EACA,SAAS,KAAK,GAAG,GAAG;GAClB,OAAO,MAAM,KAAK,IAAI,GAAG,CAAC,IAAI,MAAM,KAAK,IAAI,GAAG,CAAC;EACnD;EACA,SAAS,UAAU,OAAO,QAAQ,OAAO,GAAG;GAC1C,MAAM,QAAQ,SAAS,MAAM,GAAG,OAAO,OAAO,MAAM,CAAC;GACrD,IAAI,OAAO;IACT,MAAM,IAAI,KAAK,OAAO,KAAK;IAC3B,IAAI,OAAO,OAAO,KAAK,GAAG;KACxB,OAAO,KAAK;MAAC,QAAQ;MAAG,QAAQ;MAAG;KAAC,CAAC;KACrC,OAAO,KAAK,OAAO,SAAS;IAC9B;GACF;EACF;EACA,SAAS,gBAAgB;GACvB,MAAM,QAAQ;IACZ,eAAe,IAAI,eAAe;IAClC,eAAe,IAAI,eAAe;IAClC,MAAM,EACJ,MACF;GACF;GACA,MAAM,gBAAgB,MAAM;GAC5B,MAAM,gBAAgB,MAAM;GAC5B,MAAM,gBAAgB,CAAC;GACvB,MAAM,cAAc,CAAC;GACrB,MAAM,gBAAgB,CAAC;GACvB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;IAC5C,MAAM,OAAO,MAAM;IACnB,MAAM,IAAI,KAAK;IACf,MAAM,IAAI,KAAK;IACf,MAAM,IAAI,KAAK;IACf,cAAc,KAAK,GAAG,GAAG,CAAC;IAC1B,MAAM,IAAI,KAAK,GAAG,KAAK;IACvB,MAAM,IAAI,KAAK,GAAG,KAAK;IACvB,MAAM,IAAI,KAAK,GAAG,KAAK;IACvB,YAAY,KAAK,GAAG,GAAG,CAAC;GAC1B;GACA,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,QAAQ,IAAI,GAAG,KAAK;IAC7C,MAAM,OAAO,OAAO;IACpB,MAAM,QAAQ,KAAK;IACnB,MAAM,MAAM,KAAK;IACjB,MAAM,YAAY,SAAS;IAC3B,MAAM,UAAU,SAAS;IACzB,IAAI,IAAI,UAAU;IAClB,IAAI,IAAI,UAAU;IAClB,IAAI,IAAI,UAAU;IAClB,cAAc,KAAK,GAAG,GAAG,CAAC;IAC1B,IAAI,QAAQ;IACZ,IAAI,QAAQ;IACZ,IAAI,QAAQ;IACZ,cAAc,KAAK,GAAG,GAAG,CAAC;GAC5B;GACA,cAAc,aAAa,YAAY,IAAI,uBAAuB,eAAe,CAAC,CAAC;GACnF,cAAc,aAAa,SAAS,IAAI,uBAAuB,aAAa,CAAC,CAAC;GAC9E,cAAc,aAAa,YAAY,IAAI,uBAAuB,eAAe,CAAC,CAAC;GACnF,OAAO;EACT;EACA,MAAM,MAAM;GACV,GAAG;IAAC;IAAK;IAAK;GAAG;GACjB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAK;IAAK;GAAC;GAChB,GAAG;IAAC;IAAK;IAAK;GAAG;GACjB,GAAG;IAAC;IAAK;IAAK;GAAG;GACjB,GAAG;IAAC;IAAI;IAAI;GAAG;GACf,GAAG;IAAC;IAAK;IAAI;GAAE;GACf,GAAG;IAAC;IAAK;IAAK;GAAE;GAChB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAK;IAAI;GAAG;GACjB,IAAI;IAAC;IAAK;IAAK;GAAC;GAChB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,GAAG;IAAC;IAAK;IAAK;GAAC;GACf,GAAG;IAAC;IAAK;IAAK;GAAE;GAChB,IAAI;IAAC;IAAI;IAAK;GAAE;GAChB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,GAAG;IAAC;IAAK;IAAI;GAAG;GAChB,IAAI;IAAC;IAAI;IAAK;GAAC;GACf,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,GAAG;IAAC;IAAK;IAAK;GAAG;GACjB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAK;IAAK;GAAE;GACjB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAI;IAAK;GAAE;GAChB,IAAI;IAAC;IAAK;IAAK;GAAE;GACjB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAK;IAAK;GAAC;GAChB,IAAI;IAAC;IAAK;IAAI;GAAE;GAChB,IAAI;IAAC;IAAI;IAAK;GAAG;GACjB,IAAI;IAAC;IAAK;IAAI;GAAG;GACjB,IAAI;IAAC;IAAG;IAAK;GAAC;GACd,GAAG;IAAC;IAAK;IAAK;GAAG;GACjB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAI;IAAK;GAAG;GACjB,IAAI;IAAC;IAAI;IAAK;GAAG;GACjB,IAAI;IAAC;IAAI;IAAK;GAAG;GACjB,IAAI;IAAC;IAAI;IAAK;GAAG;GACjB,IAAI;IAAC;IAAG;IAAK;GAAG;GAChB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAK;IAAI;GAAG;GACjB,IAAI;IAAC;IAAK;IAAK;GAAC;GAChB,GAAG;IAAC;IAAK;IAAG;GAAG;GACf,IAAI;IAAC;IAAI;IAAK;GAAG;GACjB,IAAI;IAAC;IAAI;IAAI;GAAG;GAChB,IAAI;IAAC;IAAG;IAAK;GAAC;GACd,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAI;IAAK;GAAG;GACjB,IAAI;IAAC;IAAI;IAAK;GAAG;GACjB,IAAI;IAAC;IAAI;IAAK;GAAG;GACjB,IAAI;IAAC;IAAI;IAAK;GAAG;GACjB,IAAI;IAAC;IAAG;IAAK;GAAG;GAChB,IAAI;IAAC;IAAG;IAAK;GAAG;GAChB,IAAI;IAAC;IAAG;IAAK;GAAE;GACf,IAAI;IAAC;IAAG;IAAK;GAAE;GACf,IAAI;IAAC;IAAG;IAAK;GAAE;GACf,IAAI;IAAC;IAAI;IAAK;GAAG;GACjB,IAAI;IAAC;IAAI;IAAK;GAAG;GACjB,GAAG;IAAC;IAAI;IAAK;GAAG;GAChB,IAAI;IAAC;IAAI;IAAK;GAAG;GACjB,IAAI;IAAC;IAAI;IAAK;GAAG;GACjB,IAAI;IAAC;IAAI;IAAI;GAAG;GAChB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAK;IAAK;GAAE;GACjB,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAK;IAAI;GAAE;GAChB,IAAI;IAAC;IAAI;IAAI;GAAE;GACf,IAAI;IAAC;IAAK;IAAI;GAAG;GACjB,IAAI;IAAC;IAAK;IAAI;GAAC;GACf,IAAI;IAAC;IAAK;IAAI;GAAE;GAChB,IAAI;IAAC;IAAI;IAAK;GAAG;GACjB,IAAI;IAAC;IAAI;IAAG;GAAG;GACf,IAAI;IAAC;IAAG;IAAK;GAAC;GACd,IAAI;IAAC;IAAK;IAAK;GAAG;GAClB,IAAI;IAAC;IAAG;IAAK;GAAG;GAChB,IAAI;IAAC;IAAG;IAAK;GAAG;GAChB,GAAG;IAAC;IAAG;IAAK;GAAG;GACf,IAAI;IAAC;IAAG;IAAK;GAAG;GAChB,IAAI;IAAC;IAAG;IAAK;GAAG;GAChB,IAAI;IAAC;IAAI;IAAI;GAAG;GAChB,IAAI;IAAC;IAAK;IAAI;GAAG;GACjB,IAAI;IAAC;IAAK;IAAI;GAAG;GACjB,IAAI;IAAC;IAAK;IAAI;GAAG;GACjB,IAAI;IAAC;IAAK;IAAI;GAAG;GACjB,IAAI;IAAC;IAAK;IAAI;GAAG;GACjB,IAAI;IAAC;IAAK;IAAI;GAAG;GACjB,IAAI;IAAC;IAAK;IAAI;GAAG;GACjB,IAAI;IAAC;IAAK;IAAG;GAAG;GAChB,IAAI;IAAC;IAAK;IAAG;GAAE;GACf,IAAI;IAAC;IAAK;IAAG;GAAE;GACf,IAAI;IAAC;IAAK;IAAG;GAAE;GACf,IAAI;IAAC;IAAK;IAAG;GAAE;GACf,IAAI;IAAC;IAAK;IAAG;GAAE;GACf,IAAI;IAAC;IAAK;IAAG;GAAE;GACf,IAAI;IAAC;IAAK;IAAG;GAAE;GACf,IAAI;IAAC;IAAK;IAAG;GAAE;GACf,IAAI;IAAC;IAAK;IAAG;GAAE;GACf,KAAK;IAAC;IAAK;IAAG;GAAE;GAChB,KAAK;IAAC;IAAK;IAAG;GAAE;GAChB,KAAK;IAAC;IAAK;IAAG;GAAE;GAChB,KAAK;IAAC;IAAK;IAAG;GAAE;GAChB,KAAK;IAAC;IAAK;IAAG;GAAE;GAChB,KAAK;IAAC;IAAK;IAAG;GAAE;EAClB;EACA,MAAM,QAAQ,CAAC;EACf,MAAM,SAAS,CAAC;EAChB,MAAM,SAAS,CAAC;EAChB,MAAM,WAAW,CAAC;EAClB,MAAM,QAAQ,KAAK,MAAM,IAAI;EAC7B,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KACvC,IAAI,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,UAAU,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,UAAU;GAC1E,MAAM,IAAI,WAAW,MAAM,GAAG,OAAO,IAAI,CAAC,CAAC;GAC3C,MAAM,IAAI,WAAW,MAAM,GAAG,OAAO,IAAI,CAAC,CAAC;GAC3C,MAAM,IAAI,WAAW,MAAM,GAAG,OAAO,IAAI,CAAC,CAAC;GAC3C,MAAM,QAAQ,SAAS,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC,IAAI;GAChD,IAAI,IAAI,KAAK,MAAM,GAAG,OAAO,IAAI,CAAC,CAAC,EAAE,YAAY;GACjD,IAAI,MAAM,IACR,IAAI,KAAK,MAAM,GAAG,OAAO,IAAI,CAAC,CAAC,EAAE,YAAY;GAE/C,MAAM,WAAW;IAAC;IAAG;IAAG;IAAG,IAAI;IAAI,WAAW,CAAC;GAAC;GAChD,MAAM,KAAK,QAAQ;GACnB,SAAS,SAAS;EACpB,OAAO,IAAI,MAAM,GAAG,OAAO,GAAG,CAAC,MAAM,UAAU;GAC7C,MAAM,QAAQ,SAAS,MAAM,GAAG,OAAO,GAAG,CAAC,CAAC;GAC5C,UAAU,IAAI,GAAG,OAAO,CAAC;GACzB,UAAU,IAAI,GAAG,OAAO,CAAC;GACzB,UAAU,IAAI,GAAG,OAAO,CAAC;GACzB,UAAU,IAAI,GAAG,OAAO,CAAC;EAC3B;EAEF,OAAO,cAAc;CACvB;AACF;;;ACjPA,IAAI,oBAAoB;AACxB,SAAS,sBAAsB;CAC7B,IAAI,sBAAsB,MAAM;EAC9B,MAAM,yBAAS,IAAI,YAAY,CAAC,GAAG,aAAa,IAAI,WAAW,MAAM,GAAG,cAAc,IAAI,YAAY,MAAM;EAC5G,WAAW,KAAK;EAChB,WAAW,KAAK;EAChB,oBAAoB,YAAY,OAAO;CACzC;CACA,OAAO;AACT;AACA,IAAM,wBAAwB;CAC5B;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;CACA;AACF;AACA,IAAM,aAAa;CACjB,aAAa;CACb,aAAa;CACb,YAAY;CACZ,YAAY;CACZ,cAAc;CACd,cAAc;AAChB;AACA,SAAS,eAAe,mBAAmB,UAAU,UAAU,QAAQ,eAAe;CACpF,MAAM,kBAAkB,SAAS;CACjC,IAAI;CACJ,IAAI,kBAAkB,oBAAoB,KAAK,oBAAoB,GACjE,SAAS,IAAI,SAAS,mBAAmB,UAAU,MAAM;MACpD;EACL,MAAM,WAAW,IAAI,SAAS,mBAAmB,UAAU,SAAS,eAAe,GAAG,YAAY,WAAW,SAAS,OAAO,eAAe,CAAC;EAC7I,SAAS,IAAI,SAAS,MAAM;EAC5B,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAC1B,OAAO,KAAK,SAAS,WAAW,IAAI,iBAAiB,YAAY;CAErE;CACA,OAAO;AACT;AACA,SAAS,WAAW,QAAQ;CAC1B,MAAM,QAAQ,IAAI,WAAW,MAAM,GAAG,UAAU,MAAM;CACtD,IAAI,QAAQ,MAAM;CAClB,MAAM,kBAAkB,CAAC,EAAE,SAAS,IAAI,IAAI,cAAc,SAAS,IAAI,GAAG,aAAa,SAAS,IAAI,OAAO,GAAG,mBAAmB,QAAQ;CACzI,IAAI,eAAe,GAAG,gBAAgB;CACtC,IAAI,WAAW;EACb,gBAAgB,MAAM,MAAM,OAAO,MAAM,MAAM,KAAK,MAAM;EAC1D,iBAAiB,MAAM,MAAM,OAAO,MAAM,MAAM,KAAK,MAAM;CAC7D,OAAO;EACL,eAAe,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM;EACzD,gBAAgB,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM;CAC5D;CACA,IAAI,YAAY,GACd,MAAM,IAAI,MAAM,yCAAyC;MACpD,IAAI,YAAY,GACrB,MAAM,IAAI,MAAM,+CAA+C,OAAO;CAExE,IAAI,CAAC;MACC,gBAAgB,GAClB,MAAM,IAAI,MAAM,wEAAwE;OACnF,IAAI,kBAAkB,GAC3B,MAAM,IAAI,MAAM,6EAA6E;CAAA;CAGjG,IAAI,MAAM;CACV,MAAM,aAAa,CAAC;CACpB,KAAK,IAAI,IAAI,GAAG,IAAI,kBAAkB,KAAK;EACzC,IAAI,gBAAgB;EACpB,OAAO,MAAM,MAAM,QAAQ;GACzB,MAAM,OAAO,MAAM;GACnB;GACA,IAAI,SAAS,GACX;QAEA,iBAAiB,OAAO,aAAa,IAAI;EAE7C;EACA,QAAQ,MAAM;EACd,MAAM,gBAAgB,SAAS,IAAI;EACnC,MAAM,eAAe,SAAS,IAAI,KAAK;EAEvC,MAAM,YAAY,sBADG,QAAQ;EAE7B;EACA,MAAM,KAAK,KAAK,MAAM,CAAC,IAAI;EAC3B,MAAM,SAAS,eAAe,QAAQ,WAAW,KAAK,cAAc,cAAc,SAAS;EAC3F,OAAO,UAAU,oBAAoB,cAAc;EACnD,WAAW,iBAAiB;GAC1B,MAAM;GACN;GACA;EACF;CACF;CACA,MAAM,KAAK,KAAK,MAAM,CAAC,IAAI;CAC3B,IAAI,UAAU;CACd,IAAI,iBACF,UAAU,eAAe,QAAQ,gBAAgB,IAAI,cAAc,aAAa,KAAK,eAAe,SAAS;CAE/G,OAAO;EACL;EACA;EACA;CACF;AACF;AACA,IAAM,aAA6B,uBAAO;CACxC,MAAM,oBAAoB,OAAO;EAC/B,YAAY,SAAS;GACnB,MAAM,OAAO;EACf;EACA,KAAK,KAAK,QAAQ,YAAY,SAAS;GACrC,MAAM,QAAQ;GACd,MAAM,SAAS,IAAI,WAAW,MAAM,OAAO;GAC3C,OAAO,QAAQ,MAAM,IAAI;GACzB,OAAO,gBAAgB,aAAa;GACpC,OAAO,iBAAiB,MAAM,aAAa;GAC3C,OAAO,mBAAmB,MAAM,eAAe;GAC/C,MAAM,IAAI,QAAQ,OAAO,oBAAoB,IAAI,OAAO,IAAI;GAC5D,OAAO,KACL,KACA,SAAS,aAAa;IACpB,IAAI;KACF,OAAO,MAAM,MAAM,WAAW,CAAC;IACjC,SAAS,GAAG;KACV,IAAI,SACF,QAAQ,CAAC;UAET,QAAQ,MAAM,CAAC;KAEjB,MAAM,QAAQ,UAAU,GAAG;IAC7B;GACF,GACA,YACA,OACF;EACF;EACA,MAAM,aAAa;GACjB,MAAM,OAAO,WAAW,WAAW,GAAG,gBAAgB,OAAO,KAAK,KAAK,UAAU,GAAG,iBAAiB,IAAI,eAAe;GACxH,KAAK,IAAI,IAAI,GAAG,IAAI,cAAc,QAAQ,KAAK;IAC7C,MAAM,YAAY,KAAK,WAAW,cAAc;IAChD,eAAe,aACb,cAAc,IACd,IAAI,gBAAgB,UAAU,QAAQ,UAAU,aAAa,UAAU,UAAU,CACnF;GACF;GACA,IAAI,KAAK,YAAY,MACnB,eAAe,SAAS,IAAI,gBAAgB,KAAK,SAAS,CAAC,CAAC;GAE9D,OAAO;EACT;EACA,OAAO,sBAAsB;GAC3B,OAAO,oBAAoB;EAC7B;CACF;CACA,OAAO;AACT,GAAG;;;AC9JH,IAAI;AACJ,SAAS,OAAO;CACd,IAAI,MACF,OAAO;CACT,OAAO,CAAC;CACR,KAAK,UAAU,SAAS,KAAK;EAC3B,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI;EAC3B,IAAI,IAAI,KAAK,QAAQ,MACnB,OAAO,CAAC,KAAK,QAAQ,YAAY,IAAI,MAAM,GAAG,GAAG,GAAG,EAAE,MAAM;EAC9D,IAAI,OAAO,CAAC;EACZ,IAAI,IAAI,OAAO,GAAG,QAAQ,MACxB,IAAI,OAAO,GAAG,OAAO,IAAI;EAC3B,IAAI,MAAM,IAAI,IAAI,GAAG,MAAM,IAAI,WAAW,GAAG,GAAG,QAAQ,IAAI,WAAW,GAAG,GAAG,OAAO,IAAI,WAAW,GAAG;EACtG,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,OAAO,QAAQ,KAAK;GAC1C,IAAI,MAAM,IAAI,OAAO;GACrB,IAAI,KAAK,IAAI,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,KAAK,IAAI,KAAK,OAAO,KAAK,IAAI,KAAK;GACzE,IAAI,QAAQ,KAAK,QAAQ,YAAY,IAAI,MAAM,IAAI,IAAI,GAAG;GAC1D,IAAI,KAAK,GACP,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KACvB,KAAK,KAAK,IAAI;GAClB,IAAI,IAAI,SAAS,GACf,KAAK,UAAU,OAAO,IAAI,IAAI,KAAK,GAAG,GAAG,IAAI,IAAI,CAAC;QAC/C,IAAI,IAAI,SAAS,GACpB,KAAK,UAAU,OAAO,IAAI,IAAI,KAAK,GAAG,GAAG,IAAI,IAAI,CAAC;GACpD,KAAK,KAAK,IAAI,OAAO,MAAM,CAAC,CAAC;GAC7B,IAAI,IAAI,WAAW,GACjB,KAAK,UAAU,OAAO,IAAI,IAAI,KAAK,GAAG,GAAG,IAAI,IAAI,CAAC;QAC/C,IAAI,IAAI,WAAW,GACtB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KACvB,IAAI,KAAK,KAAK;EACpB;EACA,OAAO;CACT;CACA,KAAK,QAAQ,cAAc,SAAS,MAAM,GAAG,GAAG,KAAK;EACnD,IAAI,OAAO,IAAI,GAAG,MAAM,KAAK,OAAO,QAAQ,GAAG;EAC/C,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC;EAC/B,IAAI,KAAK,IAAI,WAAW,OAAO,CAAC,GAAG,OAAO,IAAI,YAAY,GAAG,MAAM;EACnE,IAAI,QAAQ,IAAI,OAAO,QAAQ,IAAI;EACnC,IAAI,KAAK,KAAK,KAAK;EACnB,IAAI,SAAS,GAAG;GACd,IAAI,QAAQ,QAAQ;GACpB,IAAI,SAAS,GACX,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KAAK,GAAG;IACjC,GAAG,KAAK,KAAK;IACb,GAAG,IAAI,KAAK,KAAK,IAAI;IACrB,GAAG,IAAI,KAAK,KAAK,IAAI;IACrB,GAAG,IAAI,KAAK,KAAK,IAAI;GACvB;GAEF,IAAI,SAAS,IACX,KAAK,IAAI,IAAI,GAAG,IAAI,OAAO,KACzB,GAAG,KAAK,KAAK,KAAK;EAGxB,OAAO,IAAI,SAAS,GAAG;GACrB,IAAI,KAAK,IAAI,KAAK;GAClB,IAAI,MAAM,MAAM;IACd,IAAI,SAAS,GACX,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,KAAK;KAC7B,IAAI,KAAK,IAAI;KACb,KAAK,KAAK,OAAO,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM,IAAI,KAAK;IACtE;IAEF,IAAI,SAAS,IACX,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,KAAK;KAC7B,IAAI,KAAK,IAAI;KACb,KAAK,KAAK,OAAO,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM,IAAI,KAAK;IACtE;GAEJ,OAAO;IACL,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG,IAAI,KAAK,GAAG;IACpC,IAAI,SAAS,GACX,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,KAAK;KAC7B,IAAI,KAAK,KAAK,GAAG,KAAK,IAAI;KAC1B,KAAK,KAAK,OAAO,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM,IAAI,KAAK;KACpE,IAAI,KAAK,OAAO,MAAM,KAAK,KAAK,MAAM,MAAM,KAAK,KAAK,MAAM,IAC1D,GAAG,KAAK,KAAK;IACjB;IAEF,IAAI,SAAS,IACX,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,KAAK;KAC7B,IAAI,KAAK,KAAK,GAAG,KAAK,IAAI;KAC1B,KAAK,KAAK,OAAO,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,KAAK,MAAM,IAAI,KAAK;KACpE,IAAI,GAAG,MAAM,EAAE,KAAK,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,MAAM,GAAG,MAAM,KAAK,CAAC,KAAK,IACtE,GAAG,KAAK,KAAK;IACjB;GAEJ;EACF,OAAO,IAAI,SAAS,GAAG;GACrB,IAAI,IAAI,IAAI,KAAK,SAAS,KAAK,IAAI,KAAK,SAAS,KAAK,KAAK,GAAG,SAAS;GACvE,IAAI,SAAS,GACX,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;IAC1B,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI;IAC3B,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;KAC1B,IAAI,KAAK,KAAK,KAAK,GAAG,IAAI,KAAK,MAAM,KAAK,OAAO,MAAM,IAAI,MAAM,KAAK,GAAG,KAAK,IAAI;KAClF,GAAG,MAAM,EAAE;KACX,GAAG,KAAK,KAAK,EAAE,KAAK;KACpB,GAAG,KAAK,KAAK,EAAE,KAAK;KACpB,GAAG,KAAK,KAAK,IAAI,KAAK,GAAG,KAAK;IAChC;GACF;GAEF,IAAI,SAAS,GACX,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;IAC1B,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI;IAC3B,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;KAC1B,IAAI,KAAK,KAAK,KAAK,GAAG,IAAI,KAAK,MAAM,KAAK,OAAO,MAAM,IAAI,MAAM,KAAK,GAAG,KAAK,IAAI;KAClF,GAAG,MAAM,EAAE;KACX,GAAG,KAAK,KAAK,EAAE,KAAK;KACpB,GAAG,KAAK,KAAK,EAAE,KAAK;KACpB,GAAG,KAAK,KAAK,IAAI,KAAK,GAAG,KAAK;IAChC;GACF;GAEF,IAAI,SAAS,GACX,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;IAC1B,IAAI,KAAK,IAAI,KAAK,KAAK,IAAI;IAC3B,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;KAC1B,IAAI,KAAK,KAAK,KAAK,GAAG,IAAI,KAAK,MAAM,KAAK,OAAO,MAAM,IAAI,MAAM,KAAK,IAAI,KAAK,IAAI;KACnF,GAAG,MAAM,EAAE;KACX,GAAG,KAAK,KAAK,EAAE,KAAK;KACpB,GAAG,KAAK,KAAK,EAAE,KAAK;KACpB,GAAG,KAAK,KAAK,IAAI,KAAK,GAAG,KAAK;IAChC;GACF;GAEF,IAAI,SAAS,GACX,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,KAAK;IAC7B,IAAI,KAAK,KAAK,GAAG,IAAI,KAAK,IAAI,KAAK,IAAI;IACvC,GAAG,MAAM,EAAE;IACX,GAAG,KAAK,KAAK,EAAE,KAAK;IACpB,GAAG,KAAK,KAAK,EAAE,KAAK;IACpB,GAAG,KAAK,KAAK,IAAI,KAAK,GAAG,KAAK;GAChC;EAEJ,OAAO,IAAI,SAAS,GAAG;GACrB,IAAI,SAAS,GACX,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,KAAK;IAC7B,IAAI,KAAK,KAAK,GAAG,KAAK,KAAK,GAAG,KAAK,KAAK;IACxC,GAAG,MAAM;IACT,GAAG,KAAK,KAAK;IACb,GAAG,KAAK,KAAK;IACb,GAAG,KAAK,KAAK,KAAK,KAAK;GACzB;GAEF,IAAI,SAAS,IACX,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,KAAK;IAC7B,IAAI,KAAK,KAAK,GAAG,KAAK,KAAK,GAAG,KAAK,KAAK;IACxC,GAAG,MAAM;IACT,GAAG,KAAK,KAAK;IACb,GAAG,KAAK,KAAK;IACb,GAAG,KAAK,KAAK,KAAK,KAAK;GACzB;EAEJ,OAAO,IAAI,SAAS,GAAG;GACrB,IAAI,KAAK,IAAI,KAAK,UAAU,IAAI,KAAK,UAAU;GAC/C,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;IAC1B,IAAI,MAAM,IAAI,KAAK,KAAK,IAAI;IAC5B,IAAI,SAAS,GACX,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;KAC1B,IAAI,KAAK,OAAO,KAAK,OAAO,MAAM,QAAQ,KAAK,IAAI,KAAK,IAAI,KAAK,MAAM,KAAK,MAAM,IAAI;KACtF,KAAK,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,IAAI;IACjD;SACK,IAAI,SAAS,GAClB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;KAC1B,IAAI,KAAK,MAAM,KAAK,OAAO,MAAM,QAAQ,MAAM,IAAI,MAAM,KAAK,IAAI,KAAK,MAAM,KAAK,KAAK,IAAI;KAC3F,KAAK,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,IAAI;IACjD;SACK,IAAI,SAAS,GAClB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;KAC1B,IAAI,KAAK,MAAM,KAAK,OAAO,MAAM,QAAQ,MAAM,IAAI,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,IAAI;KAC5F,KAAK,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,IAAI;IACjD;SACK,IAAI,SAAS,GAClB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;KAC1B,IAAI,KAAK,KAAK,MAAM,IAAI,KAAK,MAAM,KAAK,IAAI;KAC5C,KAAK,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,IAAI;IACjD;SACK,IAAI,SAAS,IAClB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;KAC1B,IAAI,KAAK,KAAK,OAAO,KAAK,KAAK,KAAK,GAAG,MAAM,OAAO,KAAK,EAAE,KAAK,KAAK,IAAI;KACzE,KAAK,KAAK,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,IAAI;IACjD;GAEJ;EACF;EACA,OAAO;CACT;CACA,KAAK,SAAS,SAAS,MAAM;EAC3B,IAAI,OAAO,IAAI,WAAW,IAAI,GAAG,SAAS,GAAG,MAAM,KAAK,MAAM,MAAM,IAAI,YAAY,MAAM,IAAI;EAC9F,IAAI,MAAM;GAAE,MAAM,CAAC;GAAG,QAAQ,CAAC;EAAE;EACjC,IAAI,KAAK,IAAI,WAAW,KAAK,MAAM,GAAG,OAAO;EAC7C,IAAI,IAAI,OAAO;EACf,IAAI,MAAM,MAAM;EAChB,IAAI,OAAO;GAAC;GAAK;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;EAAE;EAC3C,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,IAAI,KAAK,MAAM,KAAK,IAClB,MAAM,IAAI,MAAM,8BAA8B;EAClD,OAAO,SAAS,KAAK,QAAQ;GAC3B,IAAI,MAAM,IAAI,SAAS,MAAM,MAAM;GACnC,UAAU;GACV,IAAI,OAAO,IAAI,UAAU,MAAM,QAAQ,CAAC;GACxC,UAAU;GACV,IAAI,QAAQ,QACV,KAAK,OAAO,MAAM,MAAM,QAAQ,GAAG;QAC9B,IAAI,QAAQ,QACjB,IAAI,KAAK,QAAQ,KAAK,MAAM,QAAQ,SAAS,CAAC;QACzC,IAAI,QAAQ,QAAQ;IACzB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KACvB,GAAG,OAAO,KAAK,KAAK,SAAS;IAC/B,QAAQ;GACV,OAAO,IAAI,QAAQ,QAAQ;IACzB,IAAI,KAAK,QAAQ;KAAE,YAAY,IAAI,MAAM,MAAM;KAAG,WAAW,IAAI,MAAM,SAAS,CAAC;IAAE;IACnF,KAAK,IAAI,WAAW,KAAK,MAAM;GACjC,OAAO,IAAI,QAAQ,QAAQ;IACzB,IAAI,QAAQ,GAAG;KACb,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,SAAS;KACxC,GAAG,OAAO,KAAK,OAAO,YAAY,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG,GAAG,KAAK,OAAO,GAAG,KAAK,MAAM;KACvF,OAAO;IACT;IACA,IAAI,MAAM;KACR,GAAG,IAAI,MAAM,SAAS,EAAE;KACxB,GAAG,IAAI,MAAM,SAAS,EAAE;KACxB,OAAO,IAAI,MAAM,SAAS,CAAC;KAC3B,QAAQ,IAAI,MAAM,SAAS,CAAC;IAC9B;IACA,IAAI,MAAM,IAAI,MAAM,SAAS,EAAE;IAC/B,MAAM,IAAI,MAAM,SAAS,EAAE,KAAK,OAAO,IAAI,MAAM;IACjD,IAAI,MAAM;KAAE,MAAM;KAAK,OAAO,KAAK,MAAM,MAAM,GAAG;KAAG,SAAS,KAAK,SAAS;KAAK,OAAO,KAAK,SAAS;IAAI;IAC1G,IAAI,OAAO,KAAK,GAAG;GACrB,OAAO,IAAI,QAAQ,QAAQ;IACzB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,GAAG,KAC3B,GAAG,OAAO,KAAK,KAAK,SAAS,IAAI;IACnC,QAAQ,MAAM;GAChB,OAAO,IAAI,QAAQ,QACjB,IAAI,KAAK,QAAQ;IAAC,IAAI,SAAS,MAAM,MAAM;IAAG,IAAI,SAAS,MAAM,SAAS,CAAC;IAAG,KAAK,SAAS;GAAE;QACzF,IAAI,QAAQ,QAAQ;IACzB,IAAI,KAAK,QAAQ,CAAC;IAClB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,IAAI,KAAK,MAAM,KAAK,IAAI,SAAS,MAAM,SAAS,IAAI,CAAC,CAAC;GAC1D,OAAO,IAAI,QAAQ,UAAU,QAAQ,QAAQ;IAC3C,IAAI,IAAI,KAAK,SAAS,MACpB,IAAI,KAAK,QAAQ,CAAC;IACpB,IAAI,KAAK,IAAI,SAAS,MAAM,MAAM;IAClC,OAAO,IAAI,UAAU,MAAM,QAAQ,KAAK,MAAM;IAC9C,IAAI,KAAK,SAAS,MAAM,KAAK;IAC7B,IAAI,QAAQ,QACV,OAAO,IAAI,UAAU,MAAM,KAAK,GAAG,EAAE;SAChC;KACL,MAAM,KAAK,OAAO,SAAS,KAAK,MAAM,KAAK,GAAG,KAAK,IAAI,EAAE,CAAC;KAC1D,OAAO,IAAI,SAAS,KAAK,GAAG,IAAI,MAAM;IACxC;IACA,IAAI,KAAK,MAAM,QAAQ;GACzB,OAAO,IAAI,QAAQ,QAAQ;IACzB,IAAI,IAAI,KAAK,SAAS,MACpB,IAAI,KAAK,QAAQ,CAAC;IACpB,IAAI,KAAK,GAAG,MAAM;IAClB,KAAK,IAAI,SAAS,MAAM,GAAG;IAC3B,OAAO,IAAI,UAAU,MAAM,KAAK,KAAK,GAAG;IACxC,MAAM,KAAK;IACX,IAAI,QAAQ,KAAK;IACjB,OAAO;IACP,KAAK,IAAI,SAAS,MAAM,GAAG;IAC3B,IAAI,UAAU,MAAM,KAAK,KAAK,GAAG;IACjC,MAAM,KAAK;IACX,KAAK,IAAI,SAAS,MAAM,GAAG;IAC3B,IAAI,SAAS,MAAM,KAAK,KAAK,GAAG;IAChC,MAAM,KAAK;IACX,IAAI,KAAK,OAAO,MAAM;IACtB,IAAI,SAAS,GACX,OAAO,IAAI,SAAS,MAAM,KAAK,EAAE;SAC5B;KACL,MAAM,KAAK,OAAO,SAAS,KAAK,MAAM,KAAK,MAAM,EAAE,CAAC;KACpD,OAAO,IAAI,SAAS,KAAK,GAAG,IAAI,MAAM;IACxC;IACA,IAAI,KAAK,MAAM,QAAQ;GACzB,OAAO,IAAI,QAAQ,QACjB,IAAI,KAAK,QAAQ,IAAI,UAAU,MAAM,QAAQ,GAAG;QAC3C,IAAI,QAAQ,QAAQ;IACzB,IAAI,KAAK,IAAI,KAAK,QAAQ,SAAS;IACnC,IAAI,KAAK,QAAQ,CAAC;IAClB,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KACtB,IAAI,KAAK,MAAM,KAAK,IAAI,MAAM,SAAS,IAAI,CAAC,CAAC;GACjD,OAAO,IAAI,QAAQ;QACb,IAAI,SAAS,GACf,IAAI,KAAK,QAAQ,IAAI,UAAU,MAAM,QAAQ,GAAG;SAC7C,IAAI,IAAI,SAAS,GACpB,IAAI,KAAK,QAAQ,IAAI,MAAM,MAAM;SAC9B,IAAI,IAAI,SAAS,GACpB,IAAI,KAAK,QAAQ;KAAC,IAAI,MAAM,MAAM;KAAG,IAAI,MAAM,SAAS,CAAC;KAAG,IAAI,MAAM,SAAS,CAAC;IAAC;GAAA,OAC9E,IAAI,QAAQ,QACjB,IAAI,KAAK,QAAQ,IAAI,SAAS,MAAM,MAAM,IAAI;QACzC,IAAI,QAAQ,QACjB,IAAI,KAAK,QAAQ,KAAK;QACjB,IAAI,QAAQ;QACb,IAAI,SAAS,KAAK,IAAI,SAAS,GACjC,IAAI,KAAK,QAAQ,CAAC,IAAI,MAAM,MAAM,CAAC;SAC9B,IAAI,IAAI,SAAS,KAAK,IAAI,SAAS,GACxC,IAAI,KAAK,QAAQ;KAAC,IAAI,MAAM,MAAM;KAAG,IAAI,MAAM,SAAS,CAAC;KAAG,IAAI,MAAM,SAAS,CAAC;IAAC;SAC5E,IAAI,IAAI,SAAS,GACtB,IAAI,KAAK,QAAQ,KAAK;GAAA,OAEnB,IAAI,QAAQ,QACjB;GAEF,UAAU;GACV,IAAI,SAAS,MAAM,MAAM;GACzB,UAAU;EACZ;EACA,IAAI,QAAQ,GAAG;GACb,IAAI,KAAK,IAAI,OAAO,IAAI,OAAO,SAAS;GACxC,GAAG,OAAO,KAAK,OAAO,YAAY,KAAK,GAAG,MAAM,GAAG,IAAI,GAAG,GAAG,KAAK,OAAO,GAAG,KAAK,MAAM;EACzF;EACA,IAAI,OAAO,KAAK,OAAO,YAAY,KAAK,IAAI,IAAI,OAAO,IAAI,MAAM;EACjE,OAAO,IAAI;EACX,OAAO,IAAI;EACX,OAAO,IAAI;EACX,OAAO;CACT;CACA,KAAK,OAAO,cAAc,SAAS,KAAK,IAAI,GAAG,GAAG;EAChD,IAAI,MAAM,KAAK,OAAO,QAAQ,GAAG,GAAG,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC,GAAG,OAAO,IAAI,YAAY,MAAM,IAAI,IAAI,aAAa,CAAC;EACrH,IAAI,IAAI,KAAK,SACX,KAAK,KAAK,WAAW,IAAI,IAAI;OAE7B,KAAK,KAAK,OAAO,SAAS,IAAI,IAAI;EACpC,IAAI,IAAI,aAAa,GACnB,KAAK,KAAK,OAAO,YAAY,IAAI,KAAK,GAAG,GAAG,CAAC;OAC1C,IAAI,IAAI,aAAa,GACxB,KAAK,KAAK,OAAO,eAAe,IAAI,GAAG;EACzC,OAAO;CACT;CACA,KAAK,OAAO,WAAW,SAAS,MAAM,MAAM;EAE1C,OADU,KAAK,cAAc,IAAI,WAAW,KAAK,QAAQ,GAAG,KAAK,SAAS,CAAC,GAAG,IACrE;CACX;CACA,KAAK,aAAa,WAAW;EAC3B,IAAI,IAAI,CAAC;EACT,EAAE,IAAI,CAAC;EACP,EAAE,EAAE,IAAI,SAAS,GAAG,GAAG;GACrB,IAAI,IAAI,YAAY,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG;GACtF,IAAI,EAAE,MAAM,KAAK,EAAE,MAAM,GACvB,OAAO,IAAI,IAAI,IAAI,EAAE,CAAC;GACxB,IAAI,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,KAAK;GACrF,IAAI,GACF,IAAI,IAAI,EAAE,EAAE,WAAW,KAAK,CAAC;GAC/B,OAAO,KAAK,GAAG;IACb,IAAI,EAAE,GAAG,GAAG,CAAC;IACb,IAAI,EAAE,GAAG,IAAI,GAAG,CAAC;IACjB,KAAK;IACL,IAAI,KAAK,GAAG;KACV,KAAK,IAAI,MAAM,GACb,KAAK,KAAK,IAAI;KAChB,IAAI,KAAK,MAAM,KAAK,GAAG,IAAI,EAAE,IAAI,KAAK,EAAE,IAAI,MAAM;KAClD,IAAI,GACF,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,CAAC;KACpB,EAAE,IAAI,IAAI,EAAE,EAAE,QAAQ,EAAE,aAAa,GAAG,CAAC,GAAG,CAAC;KAC7C,IAAI,IAAI,KAAK;KACb,KAAK;KACL;IACF;IACA,IAAI,GACF,IAAI,EAAE,EAAE,EAAE,GAAG,KAAK,KAAK,GAAG;IAC5B,IAAI,KAAK,GAAG;KACV,IAAI,EAAE;KACN,IAAI,EAAE;KACN,IAAI;KACJ,IAAI;IACN;IACA,IAAI,KAAK,GAAG;KACV,IAAI,EAAE,GAAG,GAAG,CAAC,IAAI;KACjB,IAAI,EAAE,GAAG,IAAI,GAAG,CAAC,IAAI;KACrB,IAAI,EAAE,GAAG,IAAI,IAAI,CAAC,IAAI;KACtB,KAAK;KACL,IAAI,IAAI;KACR,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG;MAC9B,EAAE,EAAE,KAAK;MACT,EAAE,EAAE,IAAI,KAAK;KACf;KACA,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;MAC1B,IAAI,IAAI,EAAE,GAAG,IAAI,IAAI,GAAG,CAAC;MACzB,EAAE,GAAG,EAAE,EAAE,MAAM,KAAK,KAAK;MACzB,IAAI,IAAI,GACN,IAAI;KACR;KACA,KAAK,IAAI;KACT,EAAE,EAAE,GAAG,CAAC;KACR,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC;KACb,IAAI,EAAE;KACN,IAAI,EAAE;KACN,IAAI,EAAE,EAAE,IAAI,KAAK,KAAK,GAAG,IAAI,GAAG,GAAG,GAAG,EAAE,CAAC;KACzC,IAAI,IAAI,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;KAC1B,KAAK,KAAK,KAAK;KACf,IAAI,IAAI,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,EAAE,CAAC;KAC1B,KAAK,KAAK,KAAK;KACf,EAAE,EAAE,GAAG,CAAC;KACR,EAAE,EAAE,GAAG,GAAG,CAAC;KACX,EAAE,EAAE,GAAG,CAAC;KACR,EAAE,EAAE,GAAG,GAAG,CAAC;IACb;IACA,OAAO,MAAM;KACX,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI;KACpB,KAAK,IAAI;KACT,IAAI,IAAI,MAAM;KACd,IAAI,MAAM,KAAK,GACb,EAAE,OAAO;UACJ,IAAI,KAAK,KACd;UACK;MACL,IAAI,IAAI,IAAI,IAAI;MAChB,IAAI,IAAI,KAAK;OACX,IAAI,IAAI,EAAE,EAAE,IAAI;OAChB,IAAI,KAAK,MAAM,KAAK,EAAE,GAAG,GAAG,IAAI,CAAC;OACjC,KAAK,IAAI;MACX;MACA,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI;MACpB,KAAK,IAAI;MACT,IAAI,IAAI,MAAM,GAAG,IAAI,EAAE,EAAE,IAAI,KAAK,MAAM,KAAK,EAAE,GAAG,GAAG,IAAI,EAAE;MAC3D,KAAK,IAAI;MACT,OAAO,IAAI,GAAG;OACZ,EAAE,KAAK,EAAE,MAAM;OACf,EAAE,KAAK,EAAE,MAAM;OACf,EAAE,KAAK,EAAE,MAAM;OACf,EAAE,KAAK,EAAE,MAAM;MACjB;MACA,IAAI;KACN;IACF;GACF;GACA,OAAO,EAAE,UAAU,IAAI,IAAI,EAAE,MAAM,GAAG,CAAC;EACzC;EACA,EAAE,EAAE,IAAI,SAAS,GAAG,GAAG;GACrB,IAAI,IAAI,EAAE;GACV,IAAI,KAAK,GACP,OAAO;GACT,IAAI,IAAI,IAAI,WAAW,KAAK,CAAC;GAC7B,EAAE,IAAI,GAAG,CAAC;GACV,OAAO;EACT;EACA,EAAE,EAAE,IAAI,SAAS,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;GACjC,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,EAAE,GAAG,IAAI;GAC9B,OAAO,IAAI,GAAG;IACZ,IAAI,IAAI,EAAE,EAAE,GAAG,CAAC,IAAI;IACpB,KAAK,IAAI;IACT,IAAI,IAAI,MAAM;IACd,IAAI,KAAK,IAAI;KACX,EAAE,KAAK;KACP;IACF,OAAO;KACL,IAAI,IAAI,GAAG,IAAI;KACf,IAAI,KAAK,IAAI;MACX,IAAI,IAAI,EAAE,GAAG,GAAG,CAAC;MACjB,KAAK;MACL,IAAI,EAAE,IAAI;KACZ,OAAO,IAAI,KAAK,IAAI;MAClB,IAAI,IAAI,EAAE,GAAG,GAAG,CAAC;MACjB,KAAK;KACP,OAAO,IAAI,KAAK,IAAI;MAClB,IAAI,KAAK,EAAE,GAAG,GAAG,CAAC;MAClB,KAAK;KACP;KACA,IAAI,IAAI,IAAI;KACZ,OAAO,IAAI,GAAG;MACZ,EAAE,KAAK;MACP;KACF;IACF;GACF;GACA,OAAO;EACT;EACA,EAAE,EAAE,IAAI,SAAS,GAAG,GAAG,GAAG,GAAG;GAC3B,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,EAAE,WAAW;GACnC,OAAO,IAAI,GAAG;IACZ,IAAI,IAAI,EAAE,IAAI;IACd,EAAE,KAAK,KAAK;IACZ,GAAG,KAAK,KAAK,KAAK;IAClB,IAAI,IAAI,GACN,IAAI;IACN;GACF;GACA,OAAO,IAAI,GAAG;IACZ,EAAE,KAAK,KAAK;IACZ,GAAG,KAAK,KAAK,KAAK;IAClB;GACF;GACA,OAAO;EACT;EACA,EAAE,EAAE,IAAI,SAAS,GAAG,GAAG;GACrB,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI,EAAE,QAAQ,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,EAAE;GAClD,KAAK,IAAI,IAAI,GAAG,KAAK,GAAG,KACtB,EAAE,KAAK;GACT,KAAK,IAAI,GAAG,IAAI,GAAG,KAAK,GACtB,EAAE,EAAE;GACN,IAAI,IAAI,EAAE;GACV,IAAI;GACJ,EAAE,KAAK;GACP,KAAK,IAAI,GAAG,KAAK,GAAG,KAAK;IACvB,IAAI,IAAI,EAAE,IAAI,MAAM;IACpB,EAAE,KAAK;GACT;GACA,KAAK,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG;IACzB,IAAI,EAAE,IAAI;IACV,IAAI,KAAK,GAAG;KACV,EAAE,KAAK,EAAE;KACT,EAAE;IACJ;GACF;EACF;EACA,EAAE,EAAE,IAAI,SAAS,GAAG,GAAG,GAAG;GACxB,IAAI,IAAI,EAAE,QAAmB,IAAP,EAAE,EAAE,EAAS;GACnC,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK,GAC1B,IAAI,EAAE,IAAI,MAAM,GAAG;IACjB,IAAI,IAAI,KAAK,GAAG,IAAI,EAAE,IAAI,IAAI,IAAI,KAAK,IAAI,GAAG,IAAI,IAAI,GAAG,IAAI,EAAE,MAAM,GAAG,IAAI,KAAK,KAAK;IACtF,OAAO,KAAK,GAAG;KACb,IAAI,IAAI,EAAE,OAAO,KAAK;KACtB,EAAE,KAAK;KACP;IACF;GACF;EAEJ;EACA,EAAE,EAAE,IAAI,SAAS,GAAG,GAAG;GACrB,IAAI,IAAI,EAAE,EAAE,EAAE,GAAG,IAAI,KAAK;GAC1B,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,KAAK,GAEjC,EAAE,KAAK,EADC,EAAE,MAAM,IAAI,EAAE,IAAI,QACV;EAEpB;EACA,EAAE,EAAE,IAAI,SAAS,GAAG,GAAG,GAAG;GACxB,IAAI,MAAM,IAAI;GACd,IAAI,IAAI,MAAM;GACd,EAAE,MAAM;GACR,EAAE,IAAI,MAAM,MAAM;EACpB;EACA,EAAE,EAAE,IAAI,SAAS,GAAG,GAAG,GAAG;GACxB,IAAI,MAAM,IAAI;GACd,IAAI,IAAI,MAAM;GACd,EAAE,MAAM;GACR,EAAE,IAAI,MAAM,MAAM;GAClB,EAAE,IAAI,MAAM,MAAM;EACpB;EACA,EAAE,EAAE,IAAI,SAAS,GAAG,GAAG,GAAG;GACxB,QAAQ,EAAE,MAAM,KAAK,GAAG,MAAM,KAAK,MAAM,QAAQ,IAAI,MAAM,KAAK,KAAK;EACvE;EACA,EAAE,EAAE,IAAI,SAAS,GAAG,GAAG,GAAG;GACxB,QAAQ,EAAE,MAAM,KAAK,GAAG,MAAM,KAAK,MAAM,IAAI,GAAG,MAAM,KAAK,MAAM,SAAS,IAAI,MAAM,KAAK,KAAK;EAChG;EACA,EAAE,EAAE,IAAI,SAAS,GAAG,GAAG;GACrB,QAAQ,EAAE,MAAM,KAAK,GAAG,MAAM,KAAK,MAAM,IAAI,GAAG,MAAM,KAAK,MAAM,SAAS,IAAI;EAChF;EACA,EAAE,EAAE,IAAI,SAAS,GAAG,GAAG;GACrB,QAAQ,EAAE,MAAM,KAAK,GAAG,MAAM,KAAK,MAAM,IAAI,GAAG,MAAM,KAAK,MAAM,KAAK,GAAG,MAAM,KAAK,MAAM,SAAS,IAAI;EACzG;EACA,EAAE,EAAE,IAAI,WAAW;GACjB,IAAI,IAAI,aAAa,IAAI;GACzB,OAAO;IACL,GAAG,IAAI,EAAE,EAAE;IACX,GAAG,IAAI,EAAE,EAAE;IACX,GAAG;KAAC;KAAI;KAAI;KAAI;KAAG;KAAG;KAAG;KAAG;KAAG;KAAI;KAAG;KAAI;KAAG;KAAI;KAAG;KAAI;KAAG;KAAI;KAAG;IAAE;IACpE,GAAG;KACD;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IACF;IACA,GAAG;KAAC;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;IAAC;IAClG,GAAG,IAAI,EAAE,EAAE;IACX,GAAG;KACD;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;KACA;IACF;IACA,GAAG;KAAC;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAG;KAAI;KAAI;KAAI;KAAI;KAAI;KAAI;KAAI;KAAI;KAAG;IAAC;IAC1G,GAAG,IAAI,EAAE,EAAE;IACX,GAAG,IAAI,EAAE,GAAG;IACZ,GAAG,CAAC;IACJ,GAAG,IAAI,EAAE,EAAE;IACX,GAAG,CAAC;IACJ,GAAG,IAAI,EAAE,KAAK;IACd,GAAG,CAAC;IACJ,GAAG,CAAC;IACJ,GAAG,IAAI,EAAE,KAAK;IACd,GAAG,CAAC;IACJ,GAAG,IAAI,EAAE,GAAG;IACZ,GAAG,CAAC;IACJ,GAAG,IAAI,EAAE,KAAO;IAChB,GAAG,IAAI,EAAE,GAAG;IACZ,GAAG,IAAI,EAAE,EAAE;IACX,GAAG,IAAI,EAAE,EAAE;IACX,GAAG,IAAI,EAAE,IAAI;IACb,GAAG,IAAI,EAAE,KAAO;IAChB,GAAG,IAAI,EAAE,KAAO;GAClB;EACF,EAAE;EACF,CAAC,WAAW;GACV,IAAI,IAAI,EAAE,EAAE,GAAG,IAAI;GACnB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;IAC1B,IAAI,IAAI;IACR,KAAK,IAAI,gBAAgB,KAAK,IAAI,eAAe;IACjD,KAAK,IAAI,gBAAgB,KAAK,IAAI,cAAc;IAChD,KAAK,IAAI,gBAAgB,KAAK,IAAI,cAAc;IAChD,KAAK,IAAI,gBAAgB,KAAK,IAAI,aAAa;IAC/C,EAAE,EAAE,MAAM,MAAM,KAAK,KAAK,QAAQ;GACpC;GACA,SAAS,EAAE,GAAG,GAAG,GAAG;IAClB,OAAO,OAAO,GACZ,EAAE,KAAK,GAAG,CAAC;GACf;GACA,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK;IAC3B,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE;IAC3B,EAAE,EAAE,KAAK,EAAE,EAAE,MAAM,IAAI,EAAE,EAAE;GAC7B;GACA,EAAE,EAAE,GAAG,KAAK,CAAC;GACb,EAAE,EAAE,GAAG,KAAW,CAAC;GACnB,EAAE,EAAE,GAAG,IAAW,CAAC;GACnB,EAAE,EAAE,GAAG,GAAW,CAAC;GACnB,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;GACZ,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC;GACjB,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;GACZ,EAAE,EAAE,GAAG,IAAI,CAAC;GACZ,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;GACZ,EAAE,EAAE,EAAE,EAAE,GAAG,GAAG,EAAE,CAAC;GACjB,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC;GACZ,EAAE,EAAE,GAAG,IAAI,CAAC;GACZ,EAAE,EAAE,GAAG,KAAK,CAAC;GACb,EAAE,EAAE,GAAG,IAAI,CAAC;GACZ,EAAE,EAAE,GAAG,KAAK,CAAC;EACf,GAAG;EACH,OAAO,EAAE,EAAE;CACb,EAAE;CACF,KAAK,OAAO,iBAAiB,SAAS,MAAM,KAAK;EAC/C,IAAI,IAAI,IAAI,OAAO,IAAI,IAAI;EAC3B,IAAI,MAAM,KAAK,OAAO,QAAQ,GAAG,GAAG,OAAO,OAAO,GAAG,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC;EAChF,IAAI,MAAM,IAAI,WAAW,IAAI,GAAG;EAChC,IAAI,KAAK;EACT,IAAI,eAAe;GAAC;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;EAAC;EACvC,IAAI,eAAe;GAAC;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;EAAC;EACvC,IAAI,gBAAgB;GAAC;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;EAAC;EACxC,IAAI,gBAAgB;GAAC;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;EAAC;EACxC,IAAI,OAAO;EACX,OAAO,OAAO,GAAG;GACf,IAAI,KAAK,cAAc,OAAO,KAAK,cAAc;GACjD,IAAI,KAAK,GAAG,KAAK;GACjB,IAAI,KAAK,aAAa;GACtB,OAAO,KAAK,GAAG;IACb,MAAM;IACN;GACF;GACA,IAAI,KAAK,aAAa;GACtB,OAAO,KAAK,GAAG;IACb,MAAM;IACN;GACF;GACA,IAAI,OAAO,KAAK,KAAK,KAAK,MAAM,CAAC;GACjC,KAAK,OAAO,YAAY,MAAM,KAAK,IAAI,IAAI,EAAE;GAC7C,IAAI,IAAI,GAAG,MAAM,aAAa;GAC9B,IAAI;GACJ,OAAO,MAAM,GAAG;IACd,IAAI,MAAM,aAAa;IACvB,IAAI,MAAM,KAAK,IAAI,QAAQ;IAC3B,OAAO,MAAM,GAAG;KACd,IAAI,OAAO,GAAG;MACZ,MAAM,KAAK,OAAO;MAClB,MAAM,OAAO,KAAK,MAAM,KAAK;MAC7B,IAAI,MAAM,OAAO,OAAO,OAAO,OAAO,MAAM,MAAM,MAAM;KAC1D;KACA,IAAI,OAAO,GAAG;MACZ,MAAM,KAAK,OAAO;MAClB,MAAM,OAAO,KAAK,MAAM,KAAK;MAC7B,IAAI,MAAM,OAAO,OAAO,OAAO,OAAO,MAAM,MAAM,MAAM;KAC1D;KACA,IAAI,OAAO,GAAG;MACZ,MAAM,KAAK,OAAO;MAClB,MAAM,OAAO,KAAK,MAAM,KAAK;MAC7B,IAAI,MAAM,OAAO,OAAO,OAAO,OAAO,MAAM,MAAM,MAAM;KAC1D;KACA,IAAI,OAAO,GAAG;MACZ,IAAI,KAAK,MAAM,MAAM,MAAM;MAC3B,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,KACxB,IAAI,KAAK,KAAK,MAAM,OAAO,KAAK;KACpC;KACA,OAAO;KACP,OAAO;IACT;IACA;IACA,OAAO;GACT;GACA,IAAI,KAAK,MAAM,GACb,MAAM,MAAM,IAAI;GAClB,OAAO,OAAO;EAChB;EACA,OAAO;CACT;CACA,KAAK,OAAO,UAAU,SAAS,KAAK;EAElC,OADU;GAAC;GAAG;GAAM;GAAG;GAAG;GAAG;GAAM;EAAC,EAAE,IAAI,SAC7B,IAAI;CACnB;CACA,KAAK,OAAO,cAAc,SAAS,MAAM,KAAK,KAAK,GAAG,GAAG;EACvD,IAAI,MAAM,KAAK,OAAO,QAAQ,GAAG,GAAG,MAAM,KAAK,KAAK,IAAI,MAAM,CAAC,GAAG,QAAQ,KAAK,OAAO;EACtF,MAAM,KAAK,KAAK,MAAM,CAAC;EACvB,IAAI,GAAG,IAAI,OAAO,KAAK,MAAM,IAAI;EACjC,IAAI,OAAO,GACT,KAAK,OAAO;GAAC;GAAG;GAAG;EAAC,EAAE,OAAO;EAC/B,IAAI,QAAQ,GACV,KAAK,IAAI,KAAK,IAAI,KAAK,KACrB,KAAK,IAAI,KAAK,KAAK,IAAI,MAAM,KAAK,IAAI,IAAI,SAAS,KAAK;EAC5D,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;GAC1B,IAAI,MAAM,IAAI;GACd,KAAK,IAAI,IAAI;GACb,OAAO,KAAK,KAAK;GACjB,IAAI;GACJ,IAAI,QAAQ,GACV,OAAO,IAAI,KAAK,KACd,KAAK,IAAI,KAAK,KAAK,KAAK;QACrB,IAAI,QAAQ,GAAG;IACpB,OAAO,IAAI,KAAK,KACd,KAAK,IAAI,KAAK,KAAK,KAAK;IAC1B,OAAO,IAAI,KAAK,KACd,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI;GAC9C,OAAO,IAAI,QAAQ,GACjB,OAAO,IAAI,KAAK,KACd,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI;QACvC,IAAI,QAAQ,GAAG;IACpB,OAAO,IAAI,KAAK,KACd,KAAK,IAAI,KAAK,KAAK,KAAK,MAAM,KAAK,IAAI,IAAI,SAAS;IACtD,OAAO,IAAI,KAAK,KACd,KAAK,IAAI,KAAK,KAAK,KAAK,MAAM,KAAK,IAAI,IAAI,OAAO,KAAK,IAAI,IAAI,SAAS;GAC5E,OAAO;IACL,OAAO,IAAI,KAAK,KACd,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,MAAM,GAAG,KAAK,IAAI,IAAI,MAAM,CAAC;IAC5D,OAAO,IAAI,KAAK,KACd,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,IAAI,MAAM,IAAI;GAEpG;EACF;EACA,OAAO;CACT;CACA,KAAK,OAAO,SAAS,SAAS,GAAG,GAAG,GAAG;EACrC,IAAI,IAAI,IAAI,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,IAAI,GAAG,KAAK,IAAI;EACpD,IAAI,KAAK,MAAM,KAAK,MAAM,KAAK,MAAM,KAAK,IACxC,OAAO;OACJ,IAAI,KAAK,MAAM,KAAK,IACvB,OAAO;EACT,OAAO;CACT;CACA,KAAK,OAAO,QAAQ,SAAS,MAAM,QAAQ,KAAK;EAC9C,IAAI,MAAM,KAAK;EACf,IAAI,QAAQ,IAAI,SAAS,MAAM,MAAM;EACrC,UAAU;EACV,IAAI,SAAS,IAAI,SAAS,MAAM,MAAM;EACtC,UAAU;EACV,IAAI,QAAQ,KAAK;EACjB;EACA,IAAI,QAAQ,KAAK;EACjB;EACA,IAAI,WAAW,KAAK;EACpB;EACA,IAAI,SAAS,KAAK;EAClB;EACA,IAAI,YAAY,KAAK;EACrB;CACF;CACA,KAAK,OAAO;EACV,UAAU,SAAS,MAAM,GAAG;GAC1B,OAAO,KAAK,MAAM,GAChB;GACF,OAAO;EACT;EACA,YAAY,SAAS,MAAM,GAAG;GAC5B,OAAO,KAAK,MAAM,IAAI,KAAK,IAAI;EACjC;EACA,aAAa,SAAS,MAAM,GAAG,GAAG;GAChC,KAAK,KAAK,KAAK,IAAI;GACnB,KAAK,IAAI,KAAK,IAAI;EACpB;EACA,UAAU,SAAS,MAAM,GAAG;GAC1B,OAAO,KAAK,MAAM,MAAM,MAAM,QAAQ,KAAK,IAAI,MAAM,KAAK,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI;EACxF;EACA,WAAW,SAAS,MAAM,GAAG,GAAG;GAC9B,KAAK,KAAK,KAAK,KAAK;GACpB,KAAK,IAAI,KAAK,KAAK,KAAK;GACxB,KAAK,IAAI,KAAK,KAAK,IAAI;GACvB,KAAK,IAAI,KAAK,IAAI;EACpB;EACA,WAAW,SAAS,MAAM,GAAG,GAAG;GAC9B,IAAI,IAAI;GACR,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,KAAK,OAAO,aAAa,KAAK,IAAI,EAAE;GACtC,OAAO;EACT;EACA,YAAY,SAAS,MAAM,GAAG,GAAG;GAC/B,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,QAAQ,KAC5B,KAAK,IAAI,KAAK,EAAE,WAAW,CAAC;EAChC;EACA,WAAW,SAAS,MAAM,GAAG,GAAG;GAC9B,IAAI,MAAM,CAAC;GACX,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,IAAI,KAAK,KAAK,IAAI,EAAE;GACtB,OAAO;EACT;EACA,KAAK,SAAS,GAAG;GACf,OAAO,EAAE,SAAS,IAAI,MAAM,IAAI;EAClC;EACA,UAAU,SAAS,MAAM,GAAG,GAAG;GAC7B,IAAI,IAAI,IAAI;GACZ,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,KAAK,MAAM,KAAK,KAAK,IAAI,KAAK,IAAI,GAAG,SAAS,EAAE,CAAC;GACnD,IAAI;IACF,KAAK,mBAAmB,CAAC;GAC3B,SAAS,GAAG;IACV,OAAO,KAAK,KAAK,UAAU,MAAM,GAAG,CAAC;GACvC;GACA,OAAO;EACT;CACF;CACA,KAAK,YAAY,SAAS,IAAI,IAAI,IAAI,IAAI,IAAI,IAAI,MAAM,MAAM,MAAM;EAClE,IAAI,IAAI,KAAK,IAAI,IAAI,EAAE,GAAG,IAAI,KAAK,IAAI,IAAI,EAAE;EAC7C,IAAI,KAAK,GAAG,KAAK;EACjB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;GAC1B,IAAI,QAAQ,KAAK,QAAQ,GAAG;IAC1B,KAAK,IAAI,KAAK,KAAK;IACnB,MAAM,OAAO,KAAK,KAAK,OAAO,KAAK;GACrC,OAAO;IACL,MAAM,CAAC,OAAO,KAAK,KAAK,OAAO,KAAK;IACpC,KAAK,IAAI,KAAK,KAAK;GACrB;GACA,IAAI,QAAQ,GAAG;IACb,GAAG,MAAM,GAAG;IACZ,GAAG,KAAK,KAAK,GAAG,KAAK;IACrB,GAAG,KAAK,KAAK,GAAG,KAAK;IACrB,GAAG,KAAK,KAAK,GAAG,KAAK;GACvB,OAAO,IAAI,QAAQ,GAAG;IACpB,IAAI,KAAK,GAAG,KAAK,MAAM,IAAI,MAAM,KAAK,GAAG,MAAM,IAAI,KAAK,GAAG,KAAK,KAAK,IAAI,KAAK,GAAG,KAAK,KAAK;IAC3F,IAAI,KAAK,GAAG,KAAK,MAAM,IAAI,MAAM,KAAK,GAAG,MAAM,IAAI,KAAK,GAAG,KAAK,KAAK,IAAI,KAAK,GAAG,KAAK,KAAK;IAC3F,IAAI,MAAM,IAAI,IAAI,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,IAAI,IAAI,IAAI;IAC9D,GAAG,KAAK,KAAK,MAAM;IACnB,GAAG,KAAK,MAAM,KAAK,KAAK,OAAO;IAC/B,GAAG,KAAK,MAAM,KAAK,KAAK,OAAO;IAC/B,GAAG,KAAK,MAAM,KAAK,KAAK,OAAO;GACjC,OAAO,IAAI,QAAQ,GAAG;IACpB,IAAI,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,KAAK,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,KAAK;IAChE,IAAI,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,KAAK,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,KAAK;IAChE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI;KAChD,GAAG,MAAM;KACT,GAAG,KAAK,KAAK;KACb,GAAG,KAAK,KAAK;KACb,GAAG,KAAK,KAAK;IACf,OAAO;KACL,GAAG,MAAM;KACT,GAAG,KAAK,KAAK;KACb,GAAG,KAAK,KAAK;KACb,GAAG,KAAK,KAAK;IACf;GACF,OAAO,IAAI,QAAQ,GAAG;IACpB,IAAI,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,KAAK,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,KAAK;IAChE,IAAI,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,KAAK,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,KAAK;IAChE,IAAI,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAC5C;IACF,IAAI,KAAK,OAAO,KAAK,IACnB,OAAO;GACX;EACF;EAEF,OAAO;CACT;AACF;AACA,IAAM,aAAN,cAAyB,kBAAkB;CACzC,YAAY,SAAS;EACnB,MAAM,OAAO;EACb,KAAK,OAAO;EACZ,KAAK,WAAW;CAClB;CACA,YAAY,OAAO;EACjB,KAAK,OAAO;EACZ,OAAO;CACT;CACA,YAAY,OAAO;EACjB,KAAK,WAAW;EAChB,OAAO;CACT;CACA,YAAY,MAAM,QAAQ,YAAY,SAAS;EAC7C,MAAM,UAAU,IAAI,YAAY;EAChC,IAAI,SAAS;EACb,MAAM,QAAQ;EACd,SAAS,YAAY,GAAG;GACtB,MAAM,KACJ,KAAK,IACL,SAAS,OAAO;IACd,QAAQ,OAAO,KAAK;IACpB;IACA,IAAI,WAAW,GAAG;KAChB,QAAQ,cAAc;KACtB,IAAI,QACF,OAAO,OAAO;IAClB;GACF,GACA,KAAK,GACL,OACF;EACF;EACA,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GACjC,YAAY,CAAC;EAEf,QAAQ,OAAO,KAAK;EACpB,QAAQ,SAAS;EACjB,QAAQ,YAAY;EACpB,QAAQ,kBAAkB;EAC1B,OAAO;CACT;CACA,MAAM,QAAQ;EACZ,KAAK;EACL,MAAM,MAAM,KAAK,OAAO,MAAM;EAC9B,MAAM,OAAO,KAAK,QAAQ,GAAG,EAAE;EAC/B,MAAM,OAAO,IAAI,WAAW,IAAI;EAChC,MAAM,OAAO,IAAI,QAAQ,IAAI,SAAS;EACtC,MAAM,SAAS,KAAK,SAAA,OAAyB,IAAI,YAAY,IAAI,IAAI,IAAI,aAAa,IAAI;EAC1F,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK,GAAG;GACvC,MAAM,IAAI,KAAK,IAAI,KAAK;GACxB,MAAM,IAAI,KAAK,IAAI,KAAK;GACxB,MAAM,IAAI,KAAK,IAAI,KAAK;GACxB,MAAM,IAAI,KAAK,IAAI,KAAK;GACxB,IAAI,KAAK,SAAA,MAAwB;IAC/B,OAAO,IAAI,KAAK,UAAU,YAAY,KAAK,IAAI,IAAI,IAAI,KAAK,UAAU,KAAK,CAAC;IAC5E,OAAO,IAAI,KAAK,UAAU,YAAY,KAAK,IAAI,IAAI,IAAI,KAAK,UAAU,KAAK,CAAC;IAC5E,OAAO,IAAI,KAAK,UAAU,YAAY,KAAK,IAAI,IAAI,IAAI,KAAK,UAAU,KAAK,CAAC;IAC5E,OAAO,IAAI,KAAK,UAAU,YAAY,CAAC;GACzC,OAAO;IACL,OAAO,IAAI,KAAK,IAAI,IAAI,KAAK;IAC7B,OAAO,IAAI,KAAK,IAAI,IAAI,KAAK;IAC7B,OAAO,IAAI,KAAK,IAAI,IAAI,KAAK;IAC7B,OAAO,IAAI,KAAK;GAClB;EACF;EACA,OAAO;GACL,OAAO,IAAI;GACX,QAAQ,IAAI;GACZ,MAAM;GACN,QAAQ;GACR,MAAM,KAAK;GACX,OAAO;EACT;CACF;AACF;;;ACt+BA,IAAM,YAAN,cAAwB,OAAO;CAC7B,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,MAAM,QAAQ;EACd,MAAM,SAAS,IAAI,WAAW,MAAM,OAAO;EAC3C,OAAO,QAAQ,MAAM,IAAI;EACzB,OAAO,gBAAgB,aAAa;EACpC,OAAO,iBAAiB,MAAM,aAAa;EAC3C,OAAO,KACL,KACA,SAAS,QAAQ;GACf,IAAI;IACF,OAAO,MAAM,MAAM,MAAM,CAAC;GAC5B,SAAS,GAAG;IACV,IAAI,SACF,QAAQ,CAAC;SAET,QAAQ,MAAM,CAAC;IAEjB,MAAM,QAAQ,UAAU,GAAG;GAC7B;EACF,GACA,YACA,OACF;CACF;CACA,MAAM,QAAQ;EACZ,MAAM,OAAO,IAAI,SAAS,MAAM;EAChC,MAAM,KAAK,KAAK,UAAU,GAAG,IAAI;EACjC,MAAM,UAAU,KAAK,UAAU,GAAG,IAAI;EACtC,IAAI,OAAO,aAAa,YAAY,KAAK;GACvC,QAAQ,MAAM,sBAAsB;GACpC;EACF;EACA,MAAM,kBAAkB;GACtB;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF;EACA,IAAI,IAAI;EACR,IAAI;EACJ,MAAM,SAAS,CAAC;EAChB,OAAO,IAAI,KAAK,YAAY;GAC1B,IAAI,MAAM;GACV,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,OAAO,OAAO,aAAa,KAAK,SAAS,GAAG,CAAC;GAE/C,MAAM,YAAY,KAAK,UAAU,GAAG,IAAI;GACxC,KAAK;GACL,KAAK;GACL,IAAI,QAAQ,QAAQ;IAClB,MAAM,IAAI,KAAK,UAAU,GAAG,IAAI;IAChC,KAAK;IACL,MAAM,IAAI,KAAK,UAAU,GAAG,IAAI;IAChC,KAAK;IACL,MAAM,IAAI,KAAK,UAAU,GAAG,IAAI;IAChC,KAAK;IACL,QAAQ;KACN,SAAS;KACT,MAAM;MAAE;MAAG;MAAG;KAAE;IAClB;IACA,OAAO,KAAK,KAAK;IACjB,KAAK,YAAY;GACnB,OAAO,IAAI,QAAQ,QAAQ;IACzB,MAAM,YAAY,KAAK,UAAU,GAAG,IAAI;IACxC,KAAK;IACL,MAAM,OAAO,IAAI,WAAW,QAAQ,GAAG,YAAY,CAAC;IACpD,KAAK,YAAY;GACnB,OAAO,IAAI,QAAQ,QAAQ;IACzB,MAAM,UAAU,CAAC,CAAC;IAClB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KAAK;KAC5B,QAAQ,IAAI,KAAK,KAAK,UAAU,GAAG,IAAI;KACvC,KAAK;IACP;IACA,MAAM,UAAU;GAClB,OACE,KAAK;EAET;EACA,OAAO;CACT;AACF;AACA,IAAM,UAAN,cAAsB,KAAK;CACzB,YAAY,OAAO;EACjB,MAAM,OAAO,MAAM;EACnB,MAAM,OAAO,MAAM;EACnB,MAAM,UAAU,MAAM;EACtB,MAAM,WAAW,CAAC;EAClB,MAAM,SAAS,CAAC;EAChB,MAAM,KAAK;GAAC;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;EAAC;EAChE,MAAM,KAAK;GAAC;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;EAAC;EAChE,MAAM,KAAK;GAAC;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;EAAC;EAChE,MAAM,KAAK;GAAC;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;EAAC;EAChE,MAAM,KAAK;GAAC;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;EAAC;EAChE,MAAM,KAAK;GAAC;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;EAAC;EAChE,SAAS,IAAI,MAAM,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG;GACnC,KAAK,KAAK,IAAI;GACd,KAAK,KAAK,IAAI;GACd,KAAK,KAAK,IAAI;GACd,KAAK,IAAI,IAAI,GAAG,IAAI,IAAI,KAAK,GAAG;IAC9B,SAAS,KAAK,KAAK,IAAI,KAAK,GAAG,KAAK,IAAI,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC;IAC/D,OAAO,KAAK,GAAG,GAAG,CAAC;GACrB;EACF;EACA,MAAM,UAAU,KAAK;EACrB,MAAM,UAAU,KAAK,IAAI,KAAK;EAC9B,MAAM,QAAQ,IAAI,WAAW,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC;EACrD,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK,GAAG;GACvC,MAAM,IAAI,KAAK,IAAI;GACnB,MAAM,IAAI,KAAK,IAAI;GACnB,MAAM,IAAI,KAAK,IAAI;GACnB,MAAM,QAAQ,IAAI,IAAI,UAAU,IAAI;GACpC,MAAM,SAAS;EACjB;EACA,IAAI,YAAY;EAChB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK,GAAG;GACvC,MAAM,IAAI,KAAK,IAAI;GACnB,MAAM,IAAI,KAAK,IAAI;GACnB,MAAM,IAAI,KAAK,IAAI;GAEnB,MAAM,MAAM,QADF,KAAK,IAAI;GAEnB,MAAM,KAAK,OAAO,IAAI,OAAO;GAC7B,MAAM,KAAK,OAAO,IAAI,OAAO;GAC7B,MAAM,KAAK,OAAO,KAAK,OAAO;GAC9B,IAAI,IAAI,KAAK,IAAI,KAAK,IAAI,GACxB,YAAY;GACd,MAAM,QAAQ,IAAI,IAAI,UAAU,IAAI;GACpC,IAAI,MAAM,QAAQ,OAAO,KAAK,MAAM,KAAK,IAAI,GAC3C,IAAI,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;GAC3B,IAAI,MAAM,QAAQ,OAAO,KAAK,MAAM,GAClC,IAAI,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;GAC3B,IAAI,MAAM,QAAQ,aAAa,KAAK,MAAM,KAAK,IAAI,GACjD,IAAI,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;GAC3B,IAAI,MAAM,QAAQ,aAAa,KAAK,MAAM,GACxC,IAAI,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;GAC3B,IAAI,MAAM,QAAQ,aAAa,KAAK,MAAM,KAAK,IAAI,GACjD,IAAI,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;GAC3B,IAAI,MAAM,QAAQ,aAAa,KAAK,MAAM,GACxC,IAAI,IAAI,GAAG,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;EAC7B;EACA,MAAM,WAAW,IAAI,eAAe;EACpC,SAAS,aAAa,YAAY,IAAI,uBAAuB,UAAU,CAAC,CAAC;EACzE,SAAS,qBAAqB;EAC9B,MAAM,WAAW,IAAI,qBAAqB;EAC1C,IAAI,WAAW;GACb,SAAS,aAAa,SAAS,IAAI,uBAAuB,QAAQ,CAAC,CAAC;GACpE,SAAS,eAAe;EAC1B;EACA,MAAM,UAAU,QAAQ;CAC1B;AACF;AACA,IAAM,mBAAN,cAA+B,cAAc;CAC3C,YAAY,OAAO;EACjB,MAAM,OAAO,MAAM;EACnB,MAAM,OAAO,MAAM;EACnB,MAAM,UAAU,KAAK;EACrB,MAAM,UAAU,KAAK,IAAI,KAAK;EAC9B,MAAM,QAAQ,IAAI,WAAW,KAAK,IAAI,KAAK,IAAI,KAAK,CAAC;EACrD,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK,GAAG;GACvC,MAAM,IAAI,KAAK,IAAI;GACnB,MAAM,IAAI,KAAK,IAAI;GACnB,MAAM,IAAI,KAAK,IAAI;GACnB,MAAM,QAAQ,IAAI,IAAI,UAAU,IAAI;GACpC,MAAM,SAAS;EACjB;EACA,MAAM,OAAO,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;EACnC,KAAK,SAAS;EACd,KAAK,YAAY;EACjB,KAAK,YAAY;EACjB,KAAK,kBAAkB;EACvB,KAAK,cAAc;CACrB;AACF;;;ACxaA,IAAM,YAAN,cAAwB,OAAO;CAC7B,YAAY,SAAS;EACnB,MAAM,OAAO;EACb,KAAK,eAAe;CACtB;CACA,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,MAAM,QAAQ;EACd,MAAM,SAAS,IAAI,WAAW,MAAM,OAAO;EAC3C,OAAO,QAAQ,MAAM,IAAI;EACzB,OAAO,gBAAgB,aAAa;EACpC,OAAO,iBAAiB,MAAM,aAAa;EAC3C,OAAO,mBAAmB,MAAM,eAAe;EAC/C,OAAO,KACL,KACA,SAAS,MAAM;GACb,IAAI;IACF,OAAO,MAAM,MAAM,MAAM,GAAG,CAAC;GAC/B,SAAS,GAAG;IACV,IAAI,SACF,QAAQ,CAAC;SAET,QAAQ,MAAM,CAAC;IAEjB,MAAM,QAAQ,UAAU,GAAG;GAC7B;EACF,GACA,YACA,OACF;CACF;CACA,MAAM,MAAM,KAAK;EACf,SAAS,cAAc,QAAQ,WAAW;GACxC,MAAM,WAAW,OAAO;GACxB,MAAM,UAAU,IAAI,WAAW,SAAS;GACxC,IAAI,QAAQ;GACZ,IAAI,SAAS;GACb,IAAI;GACJ,IAAI;GACJ,IAAI;GACJ,GAAG;IACD,OAAO,OAAO;IACd,IAAI,OAAO,IAAQ;KACjB;KACA,IAAI,SAAS,OAAO,WAClB,MAAM,IAAI,MAAM,mCAAmC;KACrD,IAAI,QAAQ,OAAO,UACjB,MAAM,IAAI,MAAM,yBAAyB;KAC3C;MACE,QAAQ,YAAY,OAAO;YACpB,EAAE;IACb,OAAO;KACL,MAAM,QAAQ;KACd,MAAM,WAAW,OAAO,OAAO,KAAK;KACpC,IAAI,SAAS,UACX,MAAM,IAAI,MAAM,yBAAyB;KAC3C,IAAI,QAAQ,GAAG;MACb,OAAO,OAAO;MACd,IAAI,SAAS,UACX,MAAM,IAAI,MAAM,yBAAyB;KAC7C;KACA,OAAO,OAAO;KACd,IAAI,SAAS,MAAM,IAAI,WACrB,MAAM,IAAI,MAAM,mCAAmC;KACrD,IAAI,MAAM,GACR,MAAM,IAAI,MAAM,yBAAyB;KAC3C,IAAI,OAAO,QACT,MAAM,IAAI,MAAM,yBAAyB;KAC3C;MACE,QAAQ,YAAY,QAAQ;YACrB,EAAE,MAAM;IACnB;GACF,SAAS,QAAQ;GACjB,OAAO;EACT;EACA,SAAS,YAAY,OAAO;GAC1B,MAAM,aAAa,CAAC;GACpB,MAAM,UAAU,MAAM,OAAO,sBAAsB;GACnD,MAAM,UAAU,uBAAuB,KAAK,MAAM,OAAO,UAAU,CAAC,CAAC;GACrE,WAAW,OAAO,QAAQ;GAC1B,WAAW,YAAY,QAAQ,GAAG,SAAS;GAC3C,WAAW,MAAM,MAAM,OAAO,GAAG,WAAW,SAAS;GACrD,WAAW,MAAM,WAAW,IAAI,QAAQ,UAAU,EAAE;GACpD,WAAW,UAAU,gBAAgB,KAAK,WAAW,GAAG;GACxD,WAAW,SAAS,eAAe,KAAK,WAAW,GAAG;GACtD,WAAW,OAAO,aAAa,KAAK,WAAW,GAAG;GAClD,WAAW,OAAO,aAAa,KAAK,WAAW,GAAG;GAClD,WAAW,QAAQ,cAAc,KAAK,WAAW,GAAG;GACpD,WAAW,QAAQ,cAAc,KAAK,WAAW,GAAG;GACpD,WAAW,SAAS,eAAe,KAAK,WAAW,GAAG;GACtD,WAAW,YAAY,kBAAkB,KAAK,WAAW,GAAG;GAC5D,WAAW,SAAS,eAAe,KAAK,WAAW,GAAG;GACtD,IAAI,WAAW,YAAY,MACzB,WAAW,UAAU,WAAW,WAAW,QAAQ,EAAE;GACvD,IAAI,WAAW,WAAW,MACxB,WAAW,SAAS,WAAW,OAAO,GAAG,MAAM,GAAG;GACpD,IAAI,WAAW,SAAS,MACtB,WAAW,OAAO,WAAW,KAAK,GAAG,MAAM,GAAG;GAChD,IAAI,WAAW,UAAU,MACvB,WAAW,QAAQ,SAAS,WAAW,MAAM,EAAE;GACjD,IAAI,WAAW,WAAW,MACxB,WAAW,SAAS,SAAS,WAAW,OAAO,EAAE;GACnD,IAAI,WAAW,cAAc,MAC3B,WAAW,YAAY,WAAW,UAAU;GAC9C,IAAI,WAAW,WAAW,MACxB,WAAW,SAAS,SAAS,WAAW,OAAO,IAAI,EAAE;GACvD,IAAI,WAAW,WAAW,MACxB,WAAW,SAAS,WAAW,QAAQ,WAAW;GACpD,IAAI,WAAW,SAAS,MACtB,WAAW,OAAO,WAAW,KAAK,GAAG,MAAM,GAAG,EAAE,IAAI,SAAS,GAAG;IAC9D,OAAO,SAAS,GAAG,EAAE;GACvB,CAAC;GAEH,IAAI,WAAW,UAAU,MACvB,WAAW,QAAQ,WAAW,MAAM,GAAG,MAAM,GAAG,EAAE,IAAI,SAAS,GAAG;IAChE,OAAO,SAAS,GAAG,EAAE;GACvB,CAAC;QACI;IACL,WAAW,QAAQ,CAAC;IACpB,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,OAAO,QAAQ,IAAI,GAAG,KACnD,WAAW,MAAM,KAAK,CAAC;GAE3B;GACA,WAAW,SAAS,CAAC;GACrB,IAAI,UAAU;GACd,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,OAAO,QAAQ,IAAI,GAAG,KACnD,IAAI,WAAW,SAAS,SACtB,WAAW,OAAO,WAAW,OAAO,MAAM;QACrC;IACL,WAAW,OAAO,WAAW,OAAO,MAAM;IAC1C,WAAW,WAAW,KAAK,KAAK,WAAW,MAAM;GACnD;GAEF,WAAW,UAAU;GACrB,OAAO;EACT;EACA,MAAM,WAAWC,aAAW,IAAI,WAAW,IAAI,CAAC;EAChD,MAAM,YAAY,YAAY,QAAQ;EACtC,MAAM,WAAW,CAAC;EAClB,MAAM,SAAS,CAAC;EAChB,MAAM,QAAQ,CAAC;EACf,IAAI,UAAU,SAAS,SAAS;GAC9B,MAAM,SAAS,UAAU;GAEzB,MAAM,QADU,SAAS,OAAO,UAAU,SACtB,EAAE,MAAM,IAAI;GAChC,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAI,GAAG,KAAK;IAC5C,IAAI,MAAM,OAAO,IACf;IACF,MAAM,OAAO,MAAM,GAAG,MAAM,GAAG;IAC/B,IAAI,OAAO,MAAM,KAAK,GAAG;KACvB,SAAS,KAAK,WAAW,KAAK,OAAO,EAAE,CAAC;KACxC,SAAS,KAAK,WAAW,KAAK,OAAO,EAAE,CAAC;KACxC,SAAS,KAAK,WAAW,KAAK,OAAO,EAAE,CAAC;IAC1C;IACA,IAAI,OAAO,QAAQ,KAAK,GAAG;KACzB,MAAM,MAAM,WAAW,KAAK,OAAO,IAAI;KACvC,MAAM,IAAI,OAAO,KAAK;KACtB,MAAM,IAAI,OAAO,IAAI;KACrB,MAAM,IAAI,OAAO,IAAI;KACrB,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,GAAG;IACtC;IACA,IAAI,OAAO,aAAa,KAAK,GAAG;KAC9B,OAAO,KAAK,WAAW,KAAK,OAAO,SAAS,CAAC;KAC7C,OAAO,KAAK,WAAW,KAAK,OAAO,SAAS,CAAC;KAC7C,OAAO,KAAK,WAAW,KAAK,OAAO,SAAS,CAAC;IAC/C;GACF;EACF;EACA,IAAI,UAAU,SAAS,qBAAqB;GAC1C,MAAM,QAAQ,IAAI,YAAY,KAAK,MAAM,UAAU,WAAW,UAAU,YAAY,CAAC,CAAC;GACtF,MAAM,iBAAiB,MAAM;GAC7B,MAAM,mBAAmB,MAAM;GAC/B,MAAM,eAAe,cACnB,IAAI,WAAW,MAAM,UAAU,YAAY,GAAG,cAAc,GAC5D,gBACF;GACA,MAAM,WAAW,IAAI,SAAS,aAAa,MAAM;GACjD,MAAM,SAAS,UAAU;GACzB,KAAK,IAAI,IAAI,GAAG,IAAI,UAAU,QAAQ,KAAK;IACzC,IAAI,OAAO,MAAM,KAAK,GAAG;KACvB,SAAS,KAAK,SAAS,WAAW,UAAU,SAAS,OAAO,IAAI,UAAU,KAAK,KAAK,GAAG,KAAK,YAAY,CAAC;KACzG,SAAS,KAAK,SAAS,WAAW,UAAU,SAAS,OAAO,IAAI,UAAU,KAAK,KAAK,GAAG,KAAK,YAAY,CAAC;KACzG,SAAS,KAAK,SAAS,WAAW,UAAU,SAAS,OAAO,IAAI,UAAU,KAAK,KAAK,GAAG,KAAK,YAAY,CAAC;IAC3G;IACA,IAAI,OAAO,QAAQ,KAAK,GAAG;KACzB,MAAM,KAAK,SAAS,SAAS,UAAU,SAAS,OAAO,MAAM,UAAU,KAAK,KAAK,IAAI,CAAC,IAAI,GAAG;KAC7F,MAAM,KAAK,SAAS,SAAS,UAAU,SAAS,OAAO,MAAM,UAAU,KAAK,KAAK,IAAI,CAAC,IAAI,GAAG;KAC7F,MAAM,KAAK,SAAS,SAAS,UAAU,SAAS,OAAO,MAAM,UAAU,KAAK,KAAK,IAAI,CAAC,IAAI,GAAG;IAC/F;IACA,IAAI,OAAO,aAAa,KAAK,GAAG;KAC9B,OAAO,KACL,SAAS,WAAW,UAAU,SAAS,OAAO,WAAW,UAAU,KAAK,KAAK,GAAG,KAAK,YAAY,CACnG;KACA,OAAO,KACL,SAAS,WAAW,UAAU,SAAS,OAAO,WAAW,UAAU,KAAK,KAAK,GAAG,KAAK,YAAY,CACnG;KACA,OAAO,KACL,SAAS,WAAW,UAAU,SAAS,OAAO,WAAW,UAAU,KAAK,KAAK,GAAG,KAAK,YAAY,CACnG;IACF;GACF;EACF;EACA,IAAI,UAAU,SAAS,UAAU;GAC/B,MAAM,WAAW,IAAI,SAAS,MAAM,UAAU,SAAS;GACvD,MAAM,SAAS,UAAU;GACzB,KAAK,IAAI,IAAI,GAAG,MAAM,GAAG,IAAI,UAAU,QAAQ,KAAK,OAAO,UAAU,SAAS;IAC5E,IAAI,OAAO,MAAM,KAAK,GAAG;KACvB,SAAS,KAAK,SAAS,WAAW,MAAM,OAAO,GAAG,KAAK,YAAY,CAAC;KACpE,SAAS,KAAK,SAAS,WAAW,MAAM,OAAO,GAAG,KAAK,YAAY,CAAC;KACpE,SAAS,KAAK,SAAS,WAAW,MAAM,OAAO,GAAG,KAAK,YAAY,CAAC;IACtE;IACA,IAAI,OAAO,QAAQ,KAAK,GAAG;KACzB,MAAM,KAAK,SAAS,SAAS,MAAM,OAAO,MAAM,CAAC,IAAI,GAAG;KACxD,MAAM,KAAK,SAAS,SAAS,MAAM,OAAO,MAAM,CAAC,IAAI,GAAG;KACxD,MAAM,KAAK,SAAS,SAAS,MAAM,OAAO,MAAM,CAAC,IAAI,GAAG;IAC1D;IACA,IAAI,OAAO,aAAa,KAAK,GAAG;KAC9B,OAAO,KAAK,SAAS,WAAW,MAAM,OAAO,UAAU,KAAK,YAAY,CAAC;KACzE,OAAO,KAAK,SAAS,WAAW,MAAM,OAAO,UAAU,KAAK,YAAY,CAAC;KACzE,OAAO,KAAK,SAAS,WAAW,MAAM,OAAO,UAAU,KAAK,YAAY,CAAC;IAC3E;GACF;EACF;EACA,MAAM,WAAW,IAAI,eAAe;EACpC,IAAI,SAAS,SAAS,GACpB,SAAS,aAAa,YAAY,IAAI,uBAAuB,UAAU,CAAC,CAAC;EAC3E,IAAI,OAAO,SAAS,GAClB,SAAS,aAAa,UAAU,IAAI,uBAAuB,QAAQ,CAAC,CAAC;EACvE,IAAI,MAAM,SAAS,GACjB,SAAS,aAAa,SAAS,IAAI,uBAAuB,OAAO,CAAC,CAAC;EACrE,SAAS,sBAAsB;EAC/B,MAAM,WAAW,IAAI,eAAe,EAAE,MAAM,KAAK,CAAC;EAClD,IAAI,MAAM,SAAS,GACjB,SAAS,eAAe;OAExB,SAAS,MAAM,OAAO,KAAK,OAAO,IAAI,QAAQ;EAEhD,MAAM,OAAO,IAAI,OAAO,UAAU,QAAQ;EAC1C,IAAI,OAAO,IAAI,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;EAC1C,OAAO,WAAW,KAAK,IAAI;EAC3B,OAAO,KAAK,GAAG,MAAM,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE;EAC1C,KAAK,OAAO;EACZ,OAAO;CACT;AACF;;;ACrPA,IAAM,aAAN,MAAiB;CACf,YAAY,WAAW;EACrB,KAAK,MAAM;CACb;CACA,aAAa;EACX,KAAK,IAAI,SAAS,SAAS,KAAK,IAAI,OAAO;EAC3C,KAAK,IAAI,SAAS,WAAW;EAC7B,MAAM,UAAU,KAAK,IAAI,OAAO,SAAS;EACzC,IAAI,SAAS,KAAK,IAAI,OAAO,UAAU;EACvC,IAAI,SAAS,KAAK,IAAI,OAAO,GAAG,aAAa,KAAK,IAAI,OAAO,QAAQ;GACnE,KAAK,IAAI,OAAO,UAAU;GAC1B,SAAS,KAAK,IAAI,OAAO,UAAU;EACrC;EACA,KAAK,IAAI,SAAS,aAAa,KAAK,IAAI,OAAO;EAC/C,KAAK,IAAI,SAAS,SAAS;EAC3B,QAAQ,SAAR;GACE,KAAK;IACH,KAAK,IAAI,UAAU,MAAM;IACzB;GACF,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;IACH,KAAK,IAAI,SAAS,UAAU;IAC5B,KAAK,IAAI,OAAO,KAAK,MAAM;IAC3B;GACF,KAAK;IACH,KAAK,IAAI,iBAAiB,MAAM;IAChC;GACF,KAAK;IACH,KAAK,IAAI,cAAc,MAAM;IAC7B;GACF,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;IACH,IAAI,WAAW,GACb,KAAK,IAAI,YAAY,WAAW,KAAK,IAAI,OAAO,SAAS;SAEzD,KAAK,IAAI,OAAO,KAAK,MAAM;IAC7B;GACF,KAAK;IACH,KAAK,IAAI,eAAe;IACxB;GACF,KAAK;IACH,KAAK,IAAI,WAAW,MAAM;IAC1B;GACF,KAAK;IACH,KAAK,IAAI,YAAY,MAAM;IAC3B;GACF,KAAK;IACH,KAAK,IAAI,mBAAmB,MAAM;IAClC;GACF,KAAK;GACL,KAAK;IACH,KAAK,IAAI,OAAO,KAAK,SAAS,CAAC;IAC/B,KAAK,IAAI,OAAO,uBAAuB;IACvC;GACF,KAAK;IACH,KAAK,IAAI,iBAAiB,MAAM;IAChC;GACF,KAAK;IACH,KAAK,IAAI,gBAAgB,MAAM;IAC/B;GACF,KAAK;IACH,KAAK,IAAI,uBAAuB,MAAM;IACtC;GACF,KAAK;IACH,KAAK,IAAI,mBAAmB,QAAQ,IAAI;IACxC;GACF,KAAK;IACH,KAAK,IAAI,YAAY,cAAc,KAAK,IAAI,OAAO,UAAU;IAC7D;GACF,KAAK;GACL,KAAK;GACL,KAAK;IACH,KAAK,IAAI,YAAY,UAAU,KAAK,IAAI,OAAO,UAAU;IACzD;GACF,KAAK;IACH,KAAK,IAAI,YAAY,cAAc,KAAK,IAAI,OAAO,UAAU;IAC7D;GACF,KAAK;IACH,KAAK,IAAI,YAAY,OAAO;KAAE,GAAG,KAAK,IAAI,OAAO,UAAU;KAAG,GAAG,KAAK,IAAI,OAAO,UAAU;IAAE;IAC7F;GACF,KAAK;IACH,MAAM,QAAQ,KAAK,IAAI,OAAO,uBAAuB;IACrD,KAAK,IAAI,YAAY,aAAa;IAClC;GACF,KAAK;IACH,KAAK,IAAI,YAAY,kBAAkB,KAAK,IAAI,OAAO,UAAU;IACjE;GACF,KAAK;IACH,KAAK,IAAI,YAAY,oBAAoB,KAAK,IAAI,OAAO,UAAU;IACnE;GACF,KAAK;IACH,KAAK,IAAI,eAAe,oBAAoB,KAAK,IAAI,OAAO,UAAU;IACtE;GACF,KAAK;IACH,KAAK,IAAI,eAAe,uBAAuB,KAAK,IAAI,OAAO,UAAU;IACzE;GACF,KAAK;IACH,KAAK,IAAI,YAAY,WAAW,KAAK,IAAI,OAAO,UAAU;IAC1D;GACF,KAAK;IACH,KAAK,IAAI,YAAY,WAAW,KAAK,IAAI,OAAO,UAAU;IAC1D;GACF,KAAK;IACH,KAAK,IAAI,YAAY,UAAU,KAAK,IAAI,OAAO,UAAU;IACzD,KAAK,IAAI,eAAe,MAAM,KAAK,IAAI,YAAY,WAAW,KAAK,IAAI;IACvE;GACF,KAAK;IACH,IAAI,CAAC,KAAK,IAAI,YAAY,UACxB,KAAK,IAAI,YAAY,WAAW,CAAC;IACnC,KAAK,IAAI,YAAY,SAAS,KAAK,KAAK,IAAI,OAAO,UAAU,CAAC;IAC9D;GACF,KAAK;IACH,IAAI,CAAC,KAAK,IAAI,YAAY,eACxB,KAAK,IAAI,YAAY,gBAAgB,CAAC;IACxC,KAAK,IAAI,YAAY,cAAc,KAAK,KAAK,IAAI,OAAO,UAAU,CAAC;IACnE;GACF,KAAK;IACH,IAAI,CAAC,KAAK,IAAI,YAAY,WACxB,KAAK,IAAI,YAAY,YAAY,CAAC;IACpC,KAAK,IAAI,YAAY,UAAU,KAAK,KAAK,IAAI,OAAO,UAAU,CAAC;IAC/D;GACF,KAAK;IACH,IAAI,CAAC,KAAK,IAAI,YAAY,iBACxB,KAAK,IAAI,YAAY,kBAAkB,CAAC;IAC1C,KAAK,IAAI,YAAY,gBAAgB,KAAK,KAAK,IAAI,OAAO,UAAU,CAAC;IACrE;GACF,KAAK;IACH,KAAK,IAAI,YAAY,WAAW,KAAK,IAAI,OAAO,UAAU;IAC1D;GACF,KAAK;IACH,IAAI,WAAW,GACb,KAAK,IAAI,YAAY,iBAAiB,KAAK,IAAI,OAAO,SAAS;SAE/D,KAAK,IAAI,OAAO,KAAK,MAAM;IAC7B;GACF,KAAK;IACH,MAAM,oBAAoB,KAAK,IAAI,OAAO,WAAW;IACrD,KAAK,IAAI,eAAe,WAAW,SAAS,oBAAoB,IAAI,QAAQ;IAC5E;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,QAAQ,EAAE,OAAO,KAAK,IAAI,OAAO,gBAAgB,CAAC,EAAE;IACvF,KAAK,IAAI,OAAO,KAAK,CAAC;IACtB;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,aAAa,EAAE,OAAO,KAAK,IAAI,OAAO,WAAW,EAAE;IACtF,KAAK,IAAI,OAAO,KAAK,CAAC;IACtB;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,WAAW,EAAE,OAAO,KAAK,IAAI,OAAO,WAAW,EAAE;IACpF,KAAK,IAAI,OAAO,KAAK,CAAC;IACtB;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,UAAU,EAAE,OAAO,KAAK,IAAI,OAAO,WAAW,EAAE;IACnF,KAAK,IAAI,OAAO,KAAK,CAAC;IACtB;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,aAAa,EAAE,OAAO,KAAK,IAAI,OAAO,WAAW,EAAE;IACtF,KAAK,IAAI,OAAO,KAAK,CAAC;IACtB;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,aAAa,EAAE,OAAO,KAAK,IAAI,OAAO,WAAW,EAAE;IACtF,KAAK,IAAI,OAAO,KAAK,CAAC;IACtB;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,UAAU,KAAK,IAAI,OAAO,WAAW;IACxE,KAAK,IAAI,OAAO,KAAK,CAAC;IACtB;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,eAAe,KAAK,IAAI,OAAO,WAAW;IAC7E,KAAK,IAAI,OAAO,KAAK,CAAC;IACtB;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,OAAO,KAAK,IAAI,OAAO,UAAU;IACpE;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,gBAAgB,KAAK,IAAI,OAAO,uBAAuB;IAC1F;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,kBAAkB,KAAK,IAAI,OAAO,WAAW;IAChF,KAAK,IAAI,OAAO,KAAK,CAAC;IACtB;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,gBAAgB,KAAK,IAAI,OAAO,uBAAuB;IAC1F;GACF,KAAK;IACH,KAAK,IAAI,OAAO,KAAK,CAAC;IACtB;GACF,KAAK;IACH,KAAK,IAAI,SAAS,UAAU;IAC5B,KAAK,IAAI,OAAO,KAAK,MAAM;IAC3B;GACF,KAAK;IACH,KAAK,IAAI,YAAY,YAAY,KAAK,IAAI,OAAO,UAAU,MAAM;IACjE;GACF,KAAK;IACH,KAAK,IAAI,YAAY,oBAAoB,KAAK,IAAI,OAAO,UAAU;IACnE;GACF,KAAK;IACH,KAAK,IAAI,YAAY,qBAAqB,KAAK,IAAI,OAAO,UAAU;IACpE;GACF,KAAK,QACH;GACF,SACE,KAAK,IAAI,kBAAkB,SAAS,MAAM;EAC9C;EACA,IAAI,WAAW,QAAQ;GACrB,KAAK,IAAI,SAAS,OAAO;GACzB,KAAK,IAAI,SAAS,SAAS;GAC3B,KAAK,IAAI,SAAS,IAAI;EACxB;EACA,IAAI,KAAK,IAAI,OAAO,UAAU,KAAK,IAAI,gBACrC,KAAK,IAAI,cAAc,KAAK,IAAI;CAEpC;AACF;;;ACpTA,IAAM,aAAN,MAAiB;CACf,YAAY,WAAW;EACrB,KAAK,MAAM;CACb;CACA,aAAa;EACX,KAAK,IAAI,SAAS,SAAS,KAAK,IAAI,OAAO;EAC3C,KAAK,IAAI,SAAS,WAAW;EAC7B,MAAM,UAAU,KAAK,IAAI,OAAO,SAAS;EACzC,MAAM,SAAS,KAAK,IAAI,OAAO,UAAU;EACzC,KAAK,IAAI,SAAS,aAAa,KAAK,IAAI,OAAO;EAC/C,KAAK,IAAI,SAAS,SAAS;EAC3B,QAAQ,SAAR;GACE,KAAK;IACH,KAAK,IAAI,UAAU,MAAM;IACzB;GACF,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;IACH,KAAK,IAAI,SAAS,UAAU;IAC5B,KAAK,IAAI,OAAO,KAAK,MAAM;IAC3B;GACF,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;IACH,IAAI,WAAW,GACb,KAAK,IAAI,YAAY,WAAW,KAAK,IAAI,OAAO,SAAS;SAEzD,KAAK,IAAI,OAAO,KAAK,MAAM;IAC7B;GACF,KAAK;IACH,KAAK,IAAI,eAAe;IACxB;GACF,KAAK;IACH,KAAK,IAAI,WAAW,MAAM;IAC1B;GACF,KAAK;IACH,KAAK,IAAI,YAAY,MAAM;IAC3B;GACF,KAAK;IACH,KAAK,IAAI,mBAAmB,MAAM;IAClC;GACF,KAAK;IACH,KAAK,IAAI,iBAAiB,MAAM;IAChC;GACF,KAAK;IACH,KAAK,IAAI,gBAAgB,MAAM;IAC/B;GACF,KAAK;IACH,KAAK,IAAI,uBAAuB,MAAM;IACtC;GACF,KAAK;IACH,KAAK,IAAI,mBAAmB,QAAQ,IAAI;IACxC;GACF,KAAK;IACH,KAAK,IAAI,YAAY,cAAc,KAAK,IAAI,OAAO,UAAU;IAC7D;GACF,KAAK;GACL,KAAK;GACL,KAAK;IACH,KAAK,IAAI,YAAY,UAAU,KAAK,IAAI,OAAO,UAAU;IACzD;GACF,KAAK;IACH,KAAK,IAAI,YAAY,cAAc,KAAK,IAAI,OAAO,UAAU;IAC7D;GACF,KAAK;IACH,KAAK,IAAI,YAAY,OAAO;KAAE,GAAG,KAAK,IAAI,OAAO,UAAU;KAAG,GAAG,KAAK,IAAI,OAAO,UAAU;IAAE;IAC7F;GACF,KAAK;IACH,MAAM,QAAQ,KAAK,IAAI,OAAO,uBAAuB;IACrD,KAAK,IAAI,YAAY,aAAa;IAClC;GACF,KAAK;IACH,KAAK,IAAI,YAAY,kBAAkB,KAAK,IAAI,OAAO,UAAU;IACjE;GACF,KAAK;IACH,KAAK,IAAI,YAAY,oBAAoB,KAAK,IAAI,OAAO,UAAU;IACnE;GACF,KAAK;IACH,KAAK,IAAI,eAAe,oBAAoB,KAAK,IAAI,OAAO,UAAU;IACtE;GACF,KAAK;IACH,KAAK,IAAI,eAAe,uBAAuB,KAAK,IAAI,OAAO,UAAU;IACzE;GACF,KAAK;IACH,KAAK,IAAI,YAAY,WAAW,KAAK,IAAI,OAAO,UAAU;IAC1D;GACF,KAAK;IACH,KAAK,IAAI,YAAY,WAAW,KAAK,IAAI,OAAO,UAAU;IAC1D;GACF,KAAK;IACH,KAAK,IAAI,YAAY,UAAU,KAAK,IAAI,OAAO,UAAU;IACzD,KAAK,IAAI,eAAe,MAAM,KAAK,IAAI,YAAY,WAAW,KAAK,IAAI;IACvE;GACF,KAAK;IACH,IAAI,CAAC,KAAK,IAAI,YAAY,UACxB,KAAK,IAAI,YAAY,WAAW,CAAC;IACnC,KAAK,IAAI,YAAY,SAAS,KAAK,KAAK,IAAI,OAAO,UAAU,CAAC;IAC9D;GACF,KAAK;IACH,IAAI,CAAC,KAAK,IAAI,YAAY,eACxB,KAAK,IAAI,YAAY,gBAAgB,CAAC;IACxC,KAAK,IAAI,YAAY,cAAc,KAAK,KAAK,IAAI,OAAO,UAAU,CAAC;IACnE;GACF,KAAK;IACH,IAAI,CAAC,KAAK,IAAI,YAAY,WACxB,KAAK,IAAI,YAAY,YAAY,CAAC;IACpC,KAAK,IAAI,YAAY,UAAU,KAAK,KAAK,IAAI,OAAO,UAAU,CAAC;IAC/D;GACF,KAAK;IACH,IAAI,CAAC,KAAK,IAAI,YAAY,iBACxB,KAAK,IAAI,YAAY,kBAAkB,CAAC;IAC1C,KAAK,IAAI,YAAY,gBAAgB,KAAK,KAAK,IAAI,OAAO,UAAU,CAAC;IACrE;GACF,KAAK;IACH,KAAK,IAAI,YAAY,WAAW,KAAK,IAAI,OAAO,UAAU;IAC1D;GACF,KAAK;IACH,IAAI,WAAW,GACb,KAAK,IAAI,YAAY,iBAAiB,KAAK,IAAI,OAAO,SAAS;SAE/D,KAAK,IAAI,OAAO,KAAK,MAAM;IAC7B;GACF,KAAK;IACH,MAAM,oBAAoB,KAAK,IAAI,OAAO,WAAW;IACrD,KAAK,IAAI,eAAe,WAAW,SAAS,oBAAoB,IAAI,QAAQ;IAC5E;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,QAAQ,EAAE,OAAO,KAAK,IAAI,OAAO,gBAAgB,CAAC,EAAE;IACvF,KAAK,IAAI,OAAO,KAAK,CAAC;IACtB;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,aAAa,EAAE,OAAO,KAAK,IAAI,OAAO,WAAW,EAAE;IACtF,KAAK,IAAI,OAAO,KAAK,CAAC;IACtB;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,WAAW,EAAE,OAAO,KAAK,IAAI,OAAO,WAAW,EAAE;IACpF,KAAK,IAAI,OAAO,KAAK,CAAC;IACtB;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,UAAU,EAAE,OAAO,KAAK,IAAI,OAAO,WAAW,EAAE;IACnF,KAAK,IAAI,OAAO,KAAK,CAAC;IACtB;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,aAAa,EAAE,OAAO,KAAK,IAAI,OAAO,WAAW,EAAE;IACtF,KAAK,IAAI,OAAO,KAAK,CAAC;IACtB;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,aAAa,EAAE,OAAO,KAAK,IAAI,OAAO,WAAW,EAAE;IACtF,KAAK,IAAI,OAAO,KAAK,CAAC;IACtB;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,UAAU,KAAK,IAAI,OAAO,WAAW;IACxE,KAAK,IAAI,OAAO,KAAK,CAAC;IACtB;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,eAAe,KAAK,IAAI,OAAO,WAAW;IAC7E,KAAK,IAAI,OAAO,KAAK,CAAC;IACtB;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,OAAO,KAAK,IAAI,OAAO,UAAU;IACpE;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,gBAAgB,KAAK,IAAI,OAAO,uBAAuB;IAC1F;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,kBAAkB,KAAK,IAAI,OAAO,WAAW;IAChF,KAAK,IAAI,OAAO,KAAK,CAAC;IACtB;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,gBAAgB,KAAK,IAAI,OAAO,uBAAuB;IAC1F;GACF,KAAK;IACH,KAAK,IAAI,eAAe,WAAW,gBAAgB,KAAK,IAAI,OAAO,UAAU;IAC7E;GACF,KAAK;IACH,KAAK,IAAI,YAAY,YAAY,KAAK,IAAI,OAAO,UAAU,MAAM;IACjE;GACF,KAAK;IACH,KAAK,IAAI,YAAY,oBAAoB,KAAK,IAAI,OAAO,UAAU;IACnE;GACF,KAAK;IACH,KAAK,IAAI,YAAY,qBAAqB,KAAK,IAAI,OAAO,UAAU;IACpE;GACF,SACE,KAAK,IAAI,kBAAkB,SAAS,MAAM;EAC9C;EACA,IAAI,WAAW,QAAQ;GACrB,KAAK,IAAI,SAAS,OAAO;GACzB,KAAK,IAAI,SAAS,SAAS;GAC3B,KAAK,IAAI,SAAS,IAAI;EACxB;EACA,IAAI,KAAK,IAAI,OAAO,UAAU,KAAK,IAAI,gBACrC,KAAK,IAAI,cAAc,KAAK,IAAI;CAEpC;AACF;;;ACpRA,IAAM,YAAN,MAAgB;CACd,cAAc;EACZ,KAAK,WAAW,IAAI,SAAS;CAC/B;CACA,MAAM,QAAQ;EACZ,KAAK,SAAS,IAAI,eAAe,MAAM;EACvC,KAAK,OAAO;GACV,WAAW,CAAC;GACZ,QAAQ,CAAC;GACT,MAAM,CAAC;GACP,UAAU,CAAC;EACb;EACA,KAAK,eAAe,KAAK;EACzB,KAAK,cAAc,KAAK;EACxB,KAAK,aAAa;EAClB,IAAI,KAAK,KAAK,WAAW,KAAK,GAC5B;EACF,IAAI,KAAK,KAAK,WAAW,QAAQ;GAC/B,KAAK,SAAS,IAAI,WAAW,IAAI;GACjC,OAAO,CAAC,KAAK,OAAO,UAAU,GAC5B,KAAK,OAAO,WAAW;EAC3B,OAAO,IAAI,KAAK,KAAK,WAAW,QAAQ;GACtC,KAAK,SAAS,IAAI,WAAW,IAAI;GACjC,OAAO,CAAC,KAAK,OAAO,UAAU,GAC5B,KAAK,OAAO,WAAW;EAC3B;EACA,KAAK,SAAS,SAAS,KAAK,OAAO;EACnC,KAAK,SAAS,WAAW;EACzB,OAAO,KAAK;CACd;CACA,eAAe;EACb,KAAK,SAAS,SAAS,KAAK,OAAO;EAEnC,IADc,KAAK,OAAO,SAChB,MAAM,QAAQ;GACtB,QAAQ,KAAK,oCAAoC;GACjD;EACF;EACA,IAAI,SAAS,KAAK,OAAO,UAAU;EACnC,KAAK,SAAS,aAAa,KAAK,OAAO;EACvC,KAAK,SAAS,SAAS;EACvB,IAAI,OAAO,KAAK,OAAO,SAAS;EAChC,IAAI,SAAS,QACX,KAAK,KAAK,SAAS;OACd,IAAI,SAAS,QAClB,KAAK,KAAK,SAAS;EAErB,KAAK,SAAS,OAAO;EACrB,KAAK,SAAS,SAAS;EACvB,KAAK,SAAS,IAAI;CAEpB;CAMA,UAAU,QAAQ;EAChB,IAAI,OAAO,KAAK,OAAO,SAAS;EAChC,QAAQ,MAAR;GACE,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;IACH,KAAK,SAAS,UAAU;IACxB,KAAK,SAAS,MAAM;IACpB;GACF,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;IACH,KAAK,SAAS,SAAS;IACvB,KAAK,SAAS,UAAU;IACxB;GACF,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;IACH,KAAK,0BAA0B,IAAI;IACnC;GACF,KAAK;IACH,KAAK,cAAc,MAAM;IACzB;GACF,KAAK;IACH,IAAI,KAAK,KAAK,WAAW,QACvB,KAAK,UAAU,MAAM;SAErB,KAAK,UAAU,MAAM;IAEvB;GACF,KAAK;IACH,KAAK,WAAW;IAChB;GACF,KAAK;IACH,KAAK,OAAO,KAAK,CAAC;IAClB,KAAK,YAAY,mBAAmB;KAClC,OAAO,KAAK,OAAO,UAAU;KAC7B,SAAS,KAAK,OAAO,UAAU;IAEjC;IACA;GACF,KAAK;IACH,KAAK,oBAAoB,MAAM;IAC/B;GACF,KAAK;IACH,KAAK,iBAAiB,MAAM;IAC5B;GACF,KAAK;IACH,KAAK,eAAe,MAAM;IAC1B;GACF,KAAK;IACH,KAAK,aAAa,MAAM;IACxB;GACF,KAAK;GACL,KAAK;IACH,KAAK,UAAU,cAAc,MAAM;IACnC;GACF,KAAK;IACH,KAAK,iBAAiB,MAAM;IAC5B;GACF,KAAK;IACH,KAAK,aAAa,KAAK;IACvB,KAAK,cAAc,KAAK;IACxB,KAAK,UAAU,iBAAiB,MAAM;IACtC;GACF,KAAK;IACH,KAAK,UAAU,qBAAqB,MAAM;IAC1C;GACF,KAAK;IACH,KAAK,eAAe,MAAM;IAC1B;GACF,KAAK;IACH,KAAK,cAAc,MAAM;IACzB;GACF,KAAK;IACH,KAAK,UAAU,aAAa,MAAM;IAClC;GACF,KAAK;IACH,KAAK,UAAU,cAAc,MAAM;IACnC;GACF,KAAK;IACH,KAAK,WAAW,UAAU,MAAM;IAChC;GACF,KAAK;IACH,KAAK,WAAW,SAAS,MAAM;IAC/B;GACF,KAAK;IACH,KAAK,WAAW,YAAY,MAAM;IAClC;GACF,SACE,KAAK,iBAAiB,MAAM,MAAM;EACtC;EACA,KAAK,SAAS,OAAO;EACrB,KAAK,SAAS,SAAS;EACvB,KAAK,SAAS,IAAI;CACpB;CACA,UAAU,MAAM,QAAQ;EACtB,IAAI,CAAC,KAAK,aACR,KAAK,cAAc,KAAK;EAC1B,KAAK,iBAAiB,KAAK,OAAO,SAAS;EAC3C,KAAK,aAAa,KAAK;EACvB,IAAI,CAAC,KAAK,YAAY,OAAO;GAC3B,KAAK,YAAY,QAAQ,CAAC;GAC1B,KAAK,cAAc,KAAK,YAAY;EACtC,OAAO;GACL,QAAQ,KAAK,8CAA8C,MAAM,KAAK,WAAW;GACjF,KAAK,cAAc,KAAK,YAAY;EACtC;CACF;CACA,SAAS,QAAQ;EACf,KAAK,OAAO,KAAK,SAAS,CAAC;CAC7B;CACA,iBAAiB,MAAM,QAAQ;EAC7B,QAAQ,KAAK,0CAA0C,MAAM,MAAM;EACnE,YAAY,KAAK,OAAO,GAAG,QAAQ,KAAK,OAAO,QAAQ,SAAS,CAAC;EACjE,KAAK,OAAO,KAAK,SAAS,CAAC;CAC7B;CACA,iBAAiB,QAAQ;EACvB,KAAK,OAAO,KAAK,CAAC;EAClB,IAAI,OAAO,KAAK,OAAO,UAAU;EACjC,IAAI,UAAU;GACZ,YAAY,CAAC;GAEb,aAAa,CAAC;GACd;GACA,WAAW;GACX,OAAO,CAAC;GACR,QAAQ,KAAK,OAAO,UAAU;EAChC;EACA,KAAK,KAAK,UAAU,QAAQ;EAC5B,KAAK,iBAAiB;EACtB,KAAK,aAAa,KAAK,KAAK;EAC5B,KAAK,cAAc;EACnB,KAAK,iBAAiB,KAAK,OAAO,SAAS;CAC7C;CACA,iBAAiB,QAAQ;EACvB,IAAI,OAAO,KAAK,OAAO,UAAU;EACjC,IAAI,UAAU;GACZ,YAAY,CAAC;GAEb,aAAa,CAAC;GACd;GACA,OAAO,CAAC;GACR,QAAQ,KAAK,OAAO,UAAU;EAChC;EACA,KAAK,KAAK,UAAU,QAAQ;EAC5B,KAAK,iBAAiB;EACtB,KAAK,aAAa,KAAK,KAAK;EAC5B,KAAK,cAAc;EACnB,KAAK,iBAAiB,KAAK,OAAO,SAAS;CAC7C;CACA,aAAa,QAAQ;EACnB,KAAK,OAAO,KAAK,CAAC;EAElB,IAAI,OAAO,EACT,MAFS,KAAK,OAAO,UAElB,EACL;EACA,KAAK,cAAc;EACnB,KAAK,cAAc;EACnB,KAAK,iBAAiB,KAAK,OAAO,SAAS;CAC7C;CAEA,iBAAiB,QAAQ;EACvB,KAAK,iBAAiB,KAAK,OAAO,SAAS;EAC3C,KAAK,aAAa,KAAK;EACvB,KAAK,cAAc,KAAK,eAAe;CACzC;CAEA,eAAe,QAAQ;EACrB,KAAK,OAAO,KAAK,CAAC;EAClB,IAAI,OAAO,KAAK,OAAO,UAAU;EACjC,KAAK,cAAc,KAAK,YAAY;EACpC,KAAK,UAAU,MAAM,MAAM;CAC7B;CAGA,iBAAiB;EACf,KAAK,OAAO,KAAK,CAAC;EAClB,IAAI,YAAY,KAAK,OAAO,UAAU;EACtC,IAAI,cAAc,UAChB,KAAK,YAAY,QAAQ,KAAK,OAAO,UAAU;OAC1C,IAAI,cAAc,OACvB,KAAK,YAAY,QAAQ,KAAK,OAAO,UAAU;OAC1C,IAAI,cAAc,UAAU;GACjC,KAAK,OAAO,KAAK,EAAE;GACnB,KAAK,YAAY,QAAQ,KAAK,OAAO,WAAW;EAClD,OAAO,IAAI,cAAc,WAAW;GAClC,KAAK,OAAO,KAAK,EAAE;GACnB,KAAK,YAAY,QAAQ,KAAK,OAAO,gBAAgB,CAAC;EACxD;CACF;CAGA,sBAAsB;EACpB,KAAK,OAAO,KAAK,CAAC;EAClB,KAAK,YAAY,cAAc,KAAK,OAAO,WAAW;CACxD;CAEA,cAAc,QAAQ;EACpB,KAAK,iBAAiB,KAAK,OAAO,SAAS;EAC3C,KAAK,aAAa,KAAK;EACvB,IAAI,CAAC,KAAK,YAAY,MACpB,KAAK,YAAY,OAAO,CAAC;EAC3B,IAAI,MAAM,CAAC;EACX,KAAK,YAAY,KAAK,KAAK,GAAG;EAC9B,KAAK,cAAc;EACnB,KAAK,OAAO,KAAK,EAAE;CACrB;CACA,0BAA0B,MAAM;EAC9B,KAAK,OAAO,KAAK,EAAE;EACnB,KAAK,OAAO,KAAK,EAAE;EACnB,QAAQ,MAAR;GACE,KAAK;IACH,KAAK,YAAY,QAAQ,KAAK,OAAO,gBAAgB,CAAC;IACtD;GACF,KAAK;IACH,KAAK,YAAY,WAAW,KAAK,OAAO,gBAAgB,CAAC;IACzD;GACF,KAAK;IACH,KAAK,YAAY,WAAW,KAAK,OAAO,gBAAgB,CAAC;IACzD;GACF,KAAK;IACH,KAAK,YAAY,UAAU,KAAK,OAAO,gBAAgB,CAAC;IACxD;GACF,KAAK;IACH,KAAK,YAAY,YAAY,KAAK,OAAO,WAAW;IACpD;GACF,KAAK;IACH,KAAK,YAAY,SAAS,KAAK,OAAO,WAAW;IACjD;GACF,KAAK;IACH,KAAK,YAAY,SAAS,KAAK,OAAO,WAAW;IACjD;EACJ;EACA,KAAK,OAAO,KAAK,CAAC;CACpB;CAEA,cAAc,QAAQ;EACpB,KAAK,OAAO,KAAK,SAAS,CAAC;CAC7B;CAMA,UAAU,QAAQ;EAEhB,IADU,KAAK,OAAO,SAChB,MAAM,QAAQ;GAClB,KAAK,OAAO,KAAK,EAAE;GACnB,KAAK,YAAY,WAAW,KAAK,OAAO,UAAU;GAClD;EACF;EACA,KAAK,OAAO,UAAU,KAAK,OAAO,SAAS,CAAC;EAC5C,KAAK,iBAAiB,KAAK,OAAO,SAAS;EAC3C,KAAK,aAAa,KAAK;EACvB,KAAK,OAAO,KAAK,CAAC;EAClB,IAAI,UAAU,EACZ,OAAO,KAAK,OAAO,UAAU,EAC/B;EACA,KAAK,KAAK,SAAS,KAAK,OAAO;EAC/B,KAAK,cAAc;CACrB;CACA,cAAc,QAAQ;EACpB,IAAI,UAAU;GACZ,OAAO,KAAK,OAAO,UAAU;GAC7B,UAAU;EACZ;EACA,OAAO,MAAM;GACX,IAAI,MAAM,KAAK,OAAO,SAAS;GAC/B,IAAI,WAAW,KAAK,OAAO,UAAU;GACrC,IAAI,QAAQ,QAAQ;IAClB,QAAQ,WAAW,KAAK,OAAO,UAAU;IACzC;GACF;GACA,IAAI,YAAY,QACd;EAEJ;EACA,KAAK,KAAK,SAAS,KAAK,OAAO;EAC/B,KAAK,cAAc;CACrB;CACA,aAAa;EACX,KAAK,OAAO,KAAK,CAAC;EAClB,KAAK,YAAY,WAAW,KAAK,OAAO,UAAU;CACpD;CACA,UAAU,MAAM,QAAQ;EACtB,IAAI,YAAY,KAAK,OAAO,SAAS,SAAS;EAC9C,KAAK,OAAO,KAAK,CAAC;EAClB,KAAK,YAAY,QAAQ,KAAK,OAAO,WAAW;EAChD,KAAK,OAAO,UAAU,SAAS;CACjC;CACA,WAAW,MAAM,QAAQ;EACvB,IAAI,YAAY,KAAK,OAAO,SAAS,SAAS;EAC9C,KAAK,OAAO,KAAK,CAAC;EAClB,KAAK,YAAY,QAAQ;GACvB,GAAG,KAAK,OAAO,WAAW;GAC1B,GAAG,KAAK,OAAO,WAAW;GAC1B,GAAG,KAAK,OAAO,WAAW;EAC5B;EACA,KAAK,OAAO,UAAU,SAAS;CACjC;CAGA,iBAAiB;EACf,IAAI,CAAC,KAAK,KAAK,YACb,KAAK,KAAK,aAAa,CAAC;EAC1B,KAAK,KAAK,WAAW,KAAK,OAAO,SAAS,KAAK,EAC7C,WAAW,KAAK,OAAO,UAAU,EACnC;CACF;CAGA,WAAW,QAAQ;EACjB,IAAI,QAAQ;GACV,QAAQ,KAAK,OAAO,UAAU;GAC9B,OAAO,KAAK,OAAO,UAAU;GAE7B,OAAO,KAAK,OAAO,gBAAgB,CAAC;GAEpC,MAAM,KAAK,OAAO,UAAU;EAC9B;EACA,KAAK,KAAK,OAAO,KAAK,KAAK;EAC3B,KAAK,eAAe;EACpB,IAAI,eAAe,KAAK,aAAa,KAAK,aAAa,IAAI;EAC3D,KAAK,aAAa,SAAS,eAAe,SAAS,KAAK,OAAO,UAAU,IAAI;CAC/E;CAIA,YAAY,QAAQ;EAClB,KAAK,gBAAgB,CAAC;EACtB,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,GAAG,KAAK,GACnC,KAAK,cAAc,KAAK,KAAK,OAAO,WAAW,GAAG,KAAK,OAAO,WAAW,GAAG,CAAC,KAAK,OAAO,WAAW,CAAC;CAEzG;CAUA,mBAAmB,QAAQ,eAAe;EACxC,IAAI,cAAc,KAAK,OAAO,SAAS;EACvC,IAAI,cAAc,KAAK,OAAO,UAAU;EACxC,IAAI,KAAK,OAAO,WAAW,aAAa;GACtC,KAAK,YAAY,YAAY;GAC7B;EACF;EACA,KAAK,OAAO,UAAU,KAAK,OAAO,SAAS,aAAa,WAAW,CAAC;EACpE,IAAI,OAAO,KAAK,OAAO,SAAS;EAChC,KAAK,OAAO,UAAU;EACtB,IAAI,OAAO,KAAK,OAAO,UAAU;EACjC,IAAI,kBAAkB,SAAS,IAAI,aAAa,IAAI;EACpD,QAAQ,MAAR;GACE,KAAK;IACH,KAAK,eAAe,MAAM,aAAa,aAAa;IACpD;GACF,KAAK;GACL,KAAK;IACH,KAAK,kBAAkB,MAAM,aAAa,IAAI;IAC9C;GACF,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK;IACH,KAAK,OAAO,KAAK,eAAe;IAChC;GACF;IACE,QAAQ,KAAK,yCAAyC,IAAI;IAC1D,KAAK,OAAO,KAAK,eAAe;EACpC;CACF;CACA,eAAe,MAAM,aAAa,eAAe;EAC/C,IAAI,YAAY,CAAC;EACjB,IAAI,cAAc,CAAC;EACnB,IAAI,MAAM,CAAC;EACX,OAAO,KAAK,OAAO,SAAS,aAAa;GACvC,UAAU,KAAK,KAAK,OAAO,uBAAuB,CAAC;GACnD,IAAI,eACF,YAAY,KAAK,KAAK,OAAO,uBAAuB,CAAC;GACvD,IAAI,KAAK,KAAK,OAAO,WAAW,GAAG,KAAK,OAAO,WAAW,CAAC;EAC7D;EACA,IAAI,eAAe;GACjB,IAAI,CAAC,KAAK,aAAa,kBACrB,KAAK,aAAa,mBAAmB,CAAC;GACxC,KAAK,aAAa,iBAAiB,QAAQ;IACzC;IACA;IACA;GACF;EACF,OAAO;GACL,IAAI,CAAC,KAAK,aAAa,KACrB,KAAK,aAAa,MAAM,CAAC;GAC3B,KAAK,aAAa,IAAI,QAAQ;IAC5B;IACA;GACF;EACF;CACF;CACA,kBAAkB,MAAM,aAAa,MAAM;EACzC,IAAI,UAAU,CAAC;EACf,IAAI,SAAS,CAAC;EACd,OAAO,SAAS,SAAS,aAAa;EACtC,OAAO,KAAK,OAAO,SAAS,aAAa;GACvC,QAAQ,KAAK,KAAK,OAAO,uBAAuB,CAAC;GACjD,OAAO,KAAK,KAAK,OAAO,WAAW,GAAG,KAAK,OAAO,WAAW,GAAG,CAAC,KAAK,OAAO,WAAW,CAAC;EAC3F;EACA,IAAI,CAAC,KAAK,aAAa,cACrB,KAAK,aAAa,eAAe,CAAC;EACpC,KAAK,aAAa,aAAa,QAAQ;GACrC;GACA;GACA;EACF;CACF;CAGA,iBAAiB,QAAQ;EACvB,IAAI,cAAc,KAAK,OAAO,SAAS;EACvC,IAAI,OAAO,KAAK,OAAO,SAAS;EAChC,IAAI,UAAU,CAAC;EACf,IAAI,oBAAoB,CAAC;EACzB,OAAO,KAAK,OAAO,SAAS,aAAa;GACvC,IAAI,WAAW,KAAK,OAAO,UAAU;GACrC,WAAW,WAAW;GACtB,kBAAkB,KAAK,QAAQ;GAC/B,KAAK,IAAI,IAAI,GAAG,IAAI,UAAU,KAC5B,QAAQ,KAAK,KAAK,OAAO,uBAAuB,CAAC;EACrD;EACA,IAAI,eAAe;GACjB;GACA,eAAe;GACf;GACA,QAAQ,KAAK;EACf;EACA,IAAI,kBAAkB,OAAO,GAC3B,aAAa,OAAO;OACjB,IAAI,kBAAkB,OAAO,GAChC,aAAa,OAAO;EACtB,KAAK,aAAa,WAAW;CAC/B;CAGA,gBAAgB,QAAQ;EACtB,KAAK,KAAK,OAAO,KAAK,OAAO,eAAe,MAAM;CACpD;CAGA,uBAAuB,QAAQ;EAC7B,IAAI,cAAc,KAAK,OAAO,SAAS;EAEvC,IADW,KAAK,OAAO,SAChB,MAAM,QACX,KAAK,qBAAqB,WAAW;OAErC,KAAK,OAAO,KAAK,SAAS,CAAC;CAE/B;CACA,qBAAqB,aAAa;EAChC,KAAK,aAAa,SAAS,kBAAkB,CAAC;EAC9C,OAAO,KAAK,OAAO,SAAS,aAAa;GACvC,IAAI,eAAe,KAAK,OAAO,uBAAuB;GACtD,IAAI,gBAAgB,KAAK,OAAO,UAAU;GAC1C,KAAK,aAAa,SAAS,gBAAgB,KAAK,cAAc,aAAa;EAC7E;CACF;CACA,kBAAkB,SAAS,QAAQ;EACjC,QAAQ,KAAK,oCAAoC,UAAU,cAAc,MAAM;EAC/E,IAAI,OAAO,KAAK,OAAO,UAAU,MAAM;EACvC,KAAK,YAAY,WAAW;CAC9B;AACF;AACA,IAAM,iBAAN,MAAqB;CACnB,YAAY,QAAQ;EAClB,KAAK,KAAK,IAAI,SAAS,MAAM;EAC7B,KAAK,SAAS;EACd,KAAK,eAAe,IAAI,YAAY;EACpC,KAAK,SAAS,IAAI,WAAW,MAAM;CACrC;CACA,OAAO;EACL,OAAO,KAAK,GAAG,OAAO;CACxB;CACA,UAAU,QAAQ;EAChB,IAAI,SAAS,KAAK,SAAS,KAAK,GAAG,OAAO,YACxC,KAAK,SAAS;OAEd,QAAQ,MAAM,kCAAkC;CAEpD;CACA,YAAY;EACV,IAAI,KAAK,UAAU,KAAK,KAAK,GAC3B,OAAO;EACT,OAAO;CACT;CACA,KAAK,QAAQ;EACX,KAAK,UAAU;CACjB;CACA,WAAW;EACT,IAAI,QAAQ,KAAK,GAAG,SAAS,KAAK,MAAM;EACxC,KAAK,UAAU;EACf,OAAO;CACT;CACA,YAAY;EACV,IAAI,QAAQ,KAAK,GAAG,UAAU,KAAK,MAAM;EACzC,KAAK,UAAU;EACf,OAAO;CACT;CACA,WAAW;EACT,IAAI,QAAQ,KAAK,GAAG,SAAS,KAAK,QAAQ,KAAK;EAC/C,KAAK,UAAU;EACf,OAAO;CACT;CACA,YAAY;EACV,IAAI,QAAQ,KAAK,GAAG,UAAU,KAAK,QAAQ,KAAK;EAChD,KAAK,UAAU;EACf,OAAO;CACT;CACA,YAAY;EACV,IAAI,KAAK,OACF,KAAK,UAAU;EACtB,MAAM,KAAK,UAAU;EACrB,OAAO,OAAO,aAAa;CAC7B;CACA,aAAa;EACX,IAAI,QAAQ,KAAK,GAAG,WAAW,KAAK,QAAQ,KAAK;EACjD,KAAK,UAAU;EACf,OAAO;CACT;CACA,gBAAgB,MAAM;EACpB,IAAI,IAAI,CAAC;EACT,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,KACxB,EAAE,KAAK,KAAK,WAAW,CAAC;EAE1B,OAAO;CACT;CACA,aAAa;EACX,IAAI,QAAQ,KAAK,GAAG,WAAW,KAAK,QAAQ,KAAK,YAAY;EAC7D,KAAK,UAAU;EACf,OAAO;CACT;CACA,gBAAgB,MAAM;EACpB,IAAI,IAAI,CAAC;EACT,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,KACxB,EAAE,KAAK,KAAK,WAAW,CAAC;EAE1B,OAAO;CACT;CAOA,yBAAyB;EACvB,IAAI,YAAY,KAAK,SAAS;EAC9B,IAAI,cAAc,KAChB,OAAO,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS;EAEzE,OAAO,YAAY,MAAM,KAAK,SAAS;CACzC;CAEA,WAAW;EACT,OAAO,KAAK,UAAU,CAAC;CACzB;CACA,UAAU,MAAM;EACd,IAAI,SAAS,GACX;EACF,MAAM,QAAQ,KAAK;EACnB,IAAI;EACJ,IAAI;EACJ,IAAI,MAAM;GACR,SAAS;GACT,SAAS,KAAK,aAAa,OAAO,IAAI,WAAW,KAAK,GAAG,QAAQ,OAAO,IAAI,CAAC;EAC/E,OAAO;GACL,SAAS,KAAK,OAAO,QAAQ,GAAG,KAAK,IAAI;GACzC,SAAS,KAAK,aAAa,OAAO,IAAI,WAAW,KAAK,GAAG,QAAQ,OAAO,MAAM,CAAC;GAC/E;GACA,UAAU,SAAS;EACrB;EACA,KAAK,KAAK,MAAM;EAChB,OAAO;CACT;CACA,eAAe,MAAM;EACnB,IAAI,IAAI,KAAK,UAAU,IAAI;EAC3B,IAAI,EAAE,MAAM,IAAI;EAChB,OAAO,EAAE,OAAO,OAAO;CACzB;AACF;AACA,IAAM,WAAN,MAAe;CACb,cAAc;EACZ,KAAK,SAAS;EACd,KAAK,QAAQ;EACb,KAAK,WAAW,CAAC;CACnB;CACA,SAAS;EACP,KAAK,SAAS;CAChB;CACA,MAAM;EACJ,IAAI,CAAC,KAAK,QACR;EACF,IAAI;EACJ,QAAQ,KAAK,MAAb;GACE,KAAK;IACH,WAAW;IACX;GACF,KAAK;IACH,WAAW;IACX;GACF,KAAK;IACH,WAAW;IACX;EACJ;EACA,QAAQ,IACN,KAAK,OAAO,KAAK,KAAK,IAAI,UAC1B,KAAK,QACL,KAAK,KAAK,OAAO,UAAU,KAAK,aAAa,KAAK,OAAO,KACzD,KAAK,QAAQ,IAAI,OAAO,IACxB,KAAK,UAAU,YAAY,IAC3B,KAAK,QAAQ,KAAK,KAAK,UAAU,MAAM,EACzC;EACA,IAAI,KAAK,QAAQ,KAAK,CAAC,KAAK,SAAS;GACnC,KAAK,SAAS;GACd,KAAK,SAAS,KAAK,KAAK,aAAa,KAAK,MAAM;EAClD;EACA,KAAK,UAAU;CACjB;CACA,aAAa;EACX,IAAI,CAAC,KAAK,QACR;EACF,KAAK,IAAI,IAAI,KAAK,SAAS,SAAS,GAAG,KAAK,GAAG,KAC7C,IAAI,KAAK,UAAU,KAAK,SAAS,IAAI;GACnC,KAAK,SAAS;GACd,QAAQ,IAAI,KAAK,OAAO,KAAK,KAAK,IAAI,GAAG;GACzC,KAAK,SAAS,OAAO,IAAI,CAAC;EAC5B;CAEJ;AACF;AACA,SAAS,OAAO,KAAK;CACnB,OAAO,MAAM;AACf;AACA,SAAS,aAAa,QAAQ;CAC5B,OAAO,OAAO,SAAS,KAAK,OAAO,OAAO,SAAS,CAAC,IAAI,IAAI;AAC9D;AACA,SAAS,YAAY,QAAQ,MAAM,IAAI;CACrC,QAAQ,IAAI,IAAI,YAAY,EAAE,OAAO,IAAI,WAAW,QAAQ,MAAM,EAAE,CAAC,CAAC;AACxE;;;AChuBA,IAAI;AACJ,IAAM,YAAN,cAAwB,OAAO;CAC7B,YAAY,SAAS,aAAa,CAAC,GAAG;EACpC,MAAM,OAAO;EACb,KAAK,eAAe,WAAW,iBAAiB,KAAK,IAAI,WAAW,eAAe;CACrF;CACA,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,MAAM,QAAQ;EACd,MAAM,OAAO,MAAM,SAAS,KAAK,iBAAiB,KAAK,SAAS,IAAI,MAAM;EAC1E,MAAM,YAAY,IAAI,MAAM,IAAI,EAAE,IAAI,EAAE,MAAM,GAAG,EAAE;EACnD,MAAM,SAAS,IAAI,WAAW,KAAK,OAAO;EAC1C,OAAO,QAAQ,MAAM,IAAI;EACzB,OAAO,gBAAgB,aAAa;EACpC,OAAO,KACL,KACA,SAAS,QAAQ;GACf,IAAI;IACF,OAAO,MAAM,MAAM,QAAQ,MAAM,SAAS,CAAC;GAC7C,SAAS,GAAG;IACV,IAAI,SACF,QAAQ,CAAC;SAET,QAAQ,MAAM,CAAC;IAEjB,MAAM,QAAQ,UAAU,GAAG;GAC7B;EACF,GACA,YACA,OACF;CACF;CACA,MAAM,WAAW,MAAM,WAAW;EAChC,WAAW,IAAI,UAAU,EAAE,MAAM,SAAS;EAE1C,OAAO,IAAI,cADW,IAAI,cAAc,KAAK,OAAO,EAAE,QAAQ,KAAK,gBAAgB,IAAI,EAAE,eAAe,KAAK,WACxE,CAAC,EAAE,MAAM,SAAS;CACzD;AACF;AACA,IAAM,gBAAN,MAAoB;CAClB,YAAY,eAAe;EACzB,KAAK,gBAAgB;CACvB;CACA,MAAM,WAAW;EACf,KAAK,YAAY,IAAI,eAAe,KAAK,aAAa,EAAE,MAAM;EAC9D,KAAK,mBAAmB;EACxB,KAAK,SAAS,KAAK,YAAY;EAC/B,OAAO;GACL,WAAW,KAAK;GAChB,QAAQ,KAAK;EACf;CACF;CACA,cAAc;EACZ,MAAM,SAAS,CAAC;EAChB,MAAM,cAAc,CAAC;EACrB,MAAM,iBAAiB,IAAI,eAAe;EAC1C,MAAM,QAAQ;EACd,SAAS,OAAO,QAAQ,SAAS,OAAO;GACtC,MAAM,WAAW,eAAe,MAAM,MAAM,UAAU,KAAK;GAC3D,MAAM,OAAO,MAAM,UAAU,UAAU,KAAK;GAC5C,OAAO,MAAM,UAAU;GACvB,IAAI,MAAM,WAAW,IACnB,YAAY,KAAK,IAAI;QAErB,OAAO,MAAM,QAAQ,IAAI,IAAI;EACjC,CAAC;EACD,KAAK,YAAY,WAAW;EAC5B,OAAO;CACT;CACA,UAAU,UAAU,OAAO;EACzB,IAAI;EACJ,MAAM,YAAY,KAAK,aAAa,SAAS,SAAS,UAAU,MAAM,SAAS,IAAI;EACnF,IAAI,QAAQ,OACV,KAAK,aAAa,UAAU,SAAS;EACvC,IAAI,MAAM,SAAS,SAAS,UAC1B,OAAO,IAAI,OAAO,UAAU,SAAS;OAClC,IAAI,MAAM,SAAS,SAAS,SAC/B,OAAO,IAAI,aAAa,UAAU,SAAS;OAE3C,OAAO,IAAI,KAAK,UAAU,SAAS;EACrC,IAAI,MAAM,MACR,KAAK,OAAO,MAAM;OAElB,KAAK,OAAO,KAAK,mBAAmB,YAAY,MAAM;EACxD,KAAK,SAAS,QAAQ,MAAM;EAC5B,OAAO;CACT;CAEA,YAAY,QAAQ;EAClB,OAAO,QAAQ,SAAS,MAAM;GAC5B,KAAK,SAAS,SAAS,OAAO;IAC5B,MAAM,QAAQ,MAAM,SAAS;IAC7B,MAAM,SAAS,KAAK,MAAM;IAC1B,MAAM,SAAS,KAAK,MAAM;IAC1B,MAAM,SAAS,KAAK,MAAM;IAC1B,IAAI,MAAM,QAAQ;KAChB,MAAM,cAAc,MAAM,OAAO,SAAS;KAC1C,MAAM,SAAS,KAAK,YAAY;KAChC,MAAM,SAAS,KAAK,YAAY;KAChC,MAAM,SAAS,KAAK,YAAY;IAClC;GACF,CAAC;EACH,CAAC;CACH;CACA,aAAa,YAAY,MAAM;EAC7B,MAAM,YAAY,CAAC;EACnB,MAAM,QAAQ;EACd,WAAW,QAAQ,SAAS,MAAM,GAAG;GACnC,UAAU,KAAK,MAAM,kBAAkB,IAAI;EAC7C,CAAC;EACD,IAAI,SAAS,YAAY,SAAS,SAChC,UAAU,QAAQ,SAAS,KAAK,GAAG;GACjC,MAAM,OAAO,EACX,OAAO,IAAI,MACb;GACA,IAAI,SAAS,UAAU;IACrB,KAAK,OAAO;IACZ,KAAK,MAAM,IAAI;IACf,KAAK,eAAe,IAAI;IACxB,UAAU,KAAK,IAAI,eAAe,IAAI;GACxC,OAAO,IAAI,SAAS,SAClB,UAAU,KAAK,IAAI,kBAAkB,IAAI;EAE7C,CAAC;EAEH,MAAM,WAAW,UAAU,OAAO,OAAO;EACzC,IAAI,SAAS,WAAW,GACtB,OAAO,SAAS;EAClB,OAAO;CACT;CACA,kBAAkB,MAAM;EACtB,OAAO,KAAK,UAAU,OAAO,SAAS,GAAG;GACvC,OAAO,EAAE,SAAS;EACpB,CAAC,EAAE;CACL;CAEA,aAAa,UAAU,WAAW;EAChC,IAAI,eAAe;EACnB,IAAI,CAAC,MAAM,QAAQ,SAAS;OACtB,UAAU,OACZ,eAAe;EAAA,OAEjB,UAAU,QAAQ,SAAS,UAAU;GACnC,IAAI,SAAS,OACX,eAAe;EACnB,CAAC;EAEH,IAAI,CAAC,cACH;EACF,SAAS,aAAa,OAAO,IAAI,gBAAgB,SAAS,WAAW,GAAG,OAAO,CAAC,CAAC;CACnF;AACF;AACA,IAAM,iBAAN,MAAqB;CACnB,YAAY,eAAe;EACzB,KAAK,gBAAgB;CACvB;CACA,QAAQ;EACN,MAAM,YAAY,CAAC;EACnB,KAAK,WAAW,CAAC;EACjB,KAAK,MAAM,QAAQ,SAAS,WAC1B,IAAI,SAAS,WAAW,QACtB,UAAU,KAAK,KAAK,cAAc,SAAS,UAAU,OAAO,MAAM,SAAS,QAAQ,CAAC;OAC/E,IAAI,SAAS,WAAW,QAC7B,UAAU,KAAK,KAAK,kBAAkB,SAAS,UAAU,OAAO,MAAM,SAAS,QAAQ,CAAC;EAG5F,OAAO;CACT;CACA,cAAc,cAAc,MAAM,UAAU;EAC1C,IAAI,SAAS;GACX;GACA,MAAM,KAAK,QAAQ,aAAa,UAAU;GAC1C,aAAa,KAAK,UAAU,aAAa,UAAU;EACrD;EACA,MAAM,cAAc,KAAK,iBAAiB,aAAa,aAAa,aAAa,KAAK;EACtF,MAAM,OAAO,KAAK,kBAAkB,YAAY,IAAI;EACpD,KAAK,wBAAwB,YAAY,YAAY,UAAU,MAAM,aAAa,IAAI;EACtF,MAAM,aAAa,KAAK,gBAAgB,YAAY,YAAY,IAAI;EACpE,KAAK,YAAY,aAAa,MAAM,UAAU;EAC9C,SAAS,OAAO,OAAO,MAAM,MAAM;EACnC,SAAS,OAAO,OAAO,QAAQ,UAAU;EAEzC,OAAO,KADc,KAAK,gBAAgB,YAAY,UAChC,GAAE,MAAM;CAChC;CACA,kBAAkB,cAAc,MAAM;EACpC,IAAI,SAAS;GACX;GACA,MAAM,KAAK,QAAQ,aAAa,UAAU;GAC1C,aAAa,KAAK,UAAU,aAAa,UAAU;EACrD;EACA,MAAM,aAAa,KAAK,gBAAgB,aAAa,YAAY,CAAC,CAAC;EACnE,SAAS,OAAO,OAAO,QAAQ,UAAU;EACzC,OAAO,IAAI,kBAAkB,MAAM;CACrC;CAIA,QAAQ,YAAY;EAClB,IAAI,CAAC,WAAW,MACd,OAAA;EACF,QAAQ,WAAW,MAAnB;GACE,KAAK;GACL,KAAK,GACH,OAAA;GACF,KAAK,GACH,OAAA;GACF,KAAK,GACH,OAAA;EACJ;CACF;CACA,UAAU,YAAY;EACpB,IAAI,CAAC,WAAW,QACd,OAAO;EACT,OAAO,CAAC,WAAW;CACrB;CACA,iBAAiB,aAAa,OAAO;EACnC,MAAM,sBAAsB,EAC1B,MAAM,CAAC,EACT;EACA,MAAM,YAAY,YAAY;EAC9B,MAAM,gBAAgB,YAAY;EAClC,MAAM,WAAW,YAAY;EAC7B,MAAM,QAAQ;EACd,UAAU,QAAQ,SAAS,MAAM,OAAO;GACtC,IAAI,SAAS,YAAY;IACvB,MAAM,UAAU,MAAM,iBAAiB,cAAc,QAAQ,KAAK;IAClE,oBAAoB,aAAa,QAAQ;IACzC,oBAAoB,SAAS,QAAQ;IACrC,oBAAoB,OAAO,cAAc;GAC3C;EACF,CAAC;EACD,SAAS,QAAQ,SAAS,MAAM,OAAO;GACrC,IAAI,SAAS,oBAAoB,MAC/B,oBAAoB,KAAK,UAAU,UAAU,MAAM,iBAAiB,cAAc,QAAQ,KAAK;EAEnG,CAAC;EACD,OAAO;CACT;CACA,iBAAiB,SAAS,OAAO;EAC/B,KAAK,MAAM,QAAQ,OACjB,IAAI,MAAM,MAAM,YAAY,SAC1B,OAAO,MAAM;CAEnB;CACA,kBAAkB,cAAc;EAC9B,MAAM,OAAO,CAAC;EACd,KAAK,MAAM,QAAQ,cAAc;GAC/B,MAAM,OAAO,aAAa;GAC1B,MAAM,OAAO,KAAK;GAClB,IAAI,CAAC,MACH;GACF,MAAM,UAAU,KAAK,YAAY,IAAI;GACrC,IAAI,KAAK,sBAAsB,KAAK,GAClC,QAAQ,QAAQ,KAAK,gBAAgB,KAAK,iBAAiB;GAC7D,IAAI,KAAK,uBAAuB,KAAK,GACnC,QAAQ,QAAQ,KAAK,gBAAgB,KAAK,kBAAkB;GAC9D,QAAQ,MAAR;IACE,KAAK;KACH,KAAK,MAAM;KACX;IACF,KAAK;KACH,KAAK,eAAe;KACpB,KAAK,YAAY;KACjB;IACF,KAAK;KACH,KAAK,cAAc;KACnB,KAAK,WAAW;KAChB;IACF,KAAK;KACH,KAAK,cAAc;KACnB,KAAK,WAAW;KAChB;IACF,KAAK;KACH,KAAK,WAAW;KAChB;IACF,KAAK;KACH,KAAK,eAAe;KACpB,KAAK,YAAY;KACjB;IACF,KAAK;IACL,KAAK;KACH,KAAK,WAAW;KAChB,KAAK,cAAc;KACnB;IACF,KAAK;KACH,KAAK,YAAY;KACjB,IAAI,KAAK,cAAc,KAAK,GAC1B,KAAK,cAAc,IAAI,QAAQ,KAAK,WAAW,KAAK,SAAS;KAC/D;IACF,KAAK;KACH,KAAK,UAAU;KACf;GACJ;EACF;EACA,IAAI,KAAK,gBAAgB,KAAK,aAC5B,OAAO,KAAK;EACd,OAAO;CACT;CAGA,wBAAwB,YAAY,UAAU,MAAM;EAClD,KAAK,MAAM,QAAQ,YAAY;GAC7B,MAAM,YAAY,WAAW;GAC7B,IAAI,UAAU,MAAM;IAClB,MAAM,UAAU,UAAU,KAAK;IAC/B,MAAM,OAAO,KAAK,sBAAsB,QAAQ,YAAY,QAAQ;IACpE,IAAI,CAAC,MACH;IACF,MAAM,UAAU,KAAK,YAAY,IAAI;IACrC,IAAI,QAAQ,SAAS,KAAK,GACxB,QAAQ,QAAQ,KAAK,gBAAgB,QAAQ,KAAK,CAAC;IACrD,IAAI,QAAQ,SAAS,KAAK,GACxB,QAAQ,QAAQ,KAAK,gBAAgB,QAAQ,KAAK,CAAC;IACrD,QAAQ,MAAR;KACE,KAAK;MACH,KAAK,MAAM;MACX;KACF,KAAK;MACH,KAAK,QAAQ;MACb;KACF,KAAK;MACH,KAAK,eAAe;MACpB,KAAK,YAAY;MACjB;KACF,KAAK;MACH,KAAK,cAAc;MACnB,KAAK,WAAW;MAChB;KACF,KAAK;MACH,KAAK,cAAc;MACnB,KAAK,WAAW;MAChB;KACF,KAAK;MACH,KAAK,eAAe;MACpB,KAAK,YAAY;MACjB;KACF,KAAK;KACL,KAAK;MACH,KAAK,WAAW;MAChB,KAAK,cAAc;MACnB;KACF,KAAK;MACH,KAAK,YAAY;MACjB;KACF,KAAK;MACH,KAAK,UAAU;MACf;IACJ;GACF;EACF;CACF;CACA,gBAAgB,YAAY,MAAM;EAChC,MAAM,SAAS,CAAC;EAChB,IAAI,WAAW,SAAS,CAAC,KAAK,KAC5B,OAAO,QAAQ,IAAI,MAAM,EAAE,UAAU,WAAW,MAAM,KAAK;OAE3D,OAAO,QAAQ,IAAI,MAAM;EAE3B,IAAI,WAAW,gBAAgB,WAAW,aAAa,UAAU,GAAG;GAClE,OAAO,UAAU,IAAI,WAAW,aAAa;GAC7C,OAAO,cAAc;EACvB;EACA,IAAI,WAAW,gBACb,OAAO,YAAY,WAAW,eAAe,QAAQ;EACvD,IAAI,WAAW,qBACb,OAAO,kBAAkB,IAAI,WAAW,oBAAoB;EAC9D,KAAK,wBAAwB,QAAQ,YAAY,IAAI;EACrD,KAAK,wBAAwB,QAAQ,YAAY,IAAI;EACrD,KAAK,qBAAqB,QAAQ,YAAY,IAAI;EAClD,OAAO;CACT;CACA,wBAAwB,QAAQ,YAAY;EAC1C,IAAI,WAAW,aAAa,WAAW,UAAU,QAAQ,GAAG;GAC1D,OAAO,YAAY,WAAW,UAAU;GACxC,IAAI,WAAW,oBACb,OAAO,qBAAqB,MAAO,IAAI,WAAW,mBAAmB;EAEzE;CACF;CACA,wBAAwB,QAAQ,YAAY,MAAM;EAChD,IAAI,WAAW,UAAU;GACvB,OAAO,oBAAoB,WAAW,SAAS;GAC/C,IAAI,WAAW,qBAAqB,CAAC,KAAK,UACxC,OAAO,WAAW,IAAI,MAAM,EAAE,UAAU,WAAW,kBAAkB,KAAK;QAE1E,OAAO,WAAW,IAAI,MAAM,OAAO;EAEvC;EACA,IAAI,WAAW,aAAa,CAAC,KAAK,cAChC,OAAO,YAAY,WAAW,UAAU;EAC1C,IAAI,WAAW,YAAY,CAAC,KAAK,cAC/B,OAAO,YAAY,WAAW,SAAS;CAC3C;CACA,qBAAqB,QAAQ,YAAY,MAAM;EAC7C,IAAI,WAAW,SACb,OAAO,MAAM,eAAe,WAAW,QAAQ,KAAK;EACtD,IAAI,WAAW,YAAY;GACzB,OAAO,eAAe,WAAW,WAAW;GAC5C,OAAO,UAAA;EACT;EACA,IAAI,WAAW,YAAY;GACzB,OAAO,oBAAoB,WAAW,WAAW;GACjD,IAAI,CAAC,KAAK,eAAe,CAAC,KAAK,KAC7B,OAAO,WAAW,OAAO;QAEzB,OAAO,WAAW,IAAI,MAAM,OAAO;EAEvC;EACA,IAAI,CAAC,WAAW,aAAa,WAAW,YAAY,CAAC,KAAK,aACxD,IAAI,WAAW,oBACb,OAAO,WAAW,IAAI,MAAM,EAAE,UAAU,WAAW,SAAS,KAAK,EAAE,KAAK,OAAO,MAAM,MAAM,EAAE,eAAe,WAAW,SAAS,KAAK,GAAG,WAAW,mBAAmB,KAAK;OAE3K,OAAO,WAAW,IAAI,MAAM,EAAE,UAAU,WAAW,SAAS,KAAK;EAGrE,IAAI,OAAO,YAAY,WAAW,YAChC,OAAO,YAAY,IAAI,KAAK,IAAI,GAAG,WAAW,WAAW,QAAQ,KAAK,CAAC;CAE3E;CACA,YAAY,aAAa,MAAM,YAAY;EACzC,IAAI,YAAY,QAAQ;GACtB,MAAM,SAAS,KAAK,YAAY,YAAY,MAAM;GAClD,IAAI,WAAW,eAAe,WAAW,UAAU,MAAO;IACxD,OAAO,UAAA;IACP,IAAI,WAAW,iBAAiB,KAAK,GAAG;KACtC,OAAO,WAAW;KAClB,OAAO,WAAW;IACpB;IACA,IAAI,WAAW,cAAc,KAAK,GAChC,OAAO,WAAW;GAEtB,OACE,OAAO,UAAA;GAET,KAAK,SAAS;EAChB;CACF;CAEA,sBAAsB,OAAO;EAC3B,IAAI,WAAW;EACf,IAAI,CAAC,SAAS,UACZ,OAAO;EACT,SAAS,SAAS,QAAQ,SAAS,SAAS;GAC1C,IAAI,QAAQ,UAAU,OACpB,WAAW,QAAQ;EACvB,CAAC;EACD,OAAO;CACT;CACA,YAAY,MAAM;EAChB,IAAI,CAAC,MACH,OAAO;EAMT,OALgB,KAAK,cAAc,KAAK,MAAM,KAAK,GAAG,KAAK,GAAG,WAAW;GACvE,QAAQ,KACN,6GACF;EACF,CACa;CACf;CAEA,gBAAgB,KAAK;EACnB,QAAQ,KAAR;GACE,KAAK;IACH,QAAQ,KAAK,yEAAuE;IACpF,OAAO;GACT,KAAK,GACH,OAAO;GACT,KAAK,GACH,OAAO;GACT,KAAK,GACH,OAAO;EACX;CACF;CACA,gBAAgB,UAAU;EACxB,IAAI,SAAS,aAAa,SAAS,UAAU,QAAQ,GACnD,OAAO;EACT,IAAI,SAAS,WACX,OAAO;EACT,OAAO;CACT;AACF;AACA,IAAM,iBAAN,MAAqB;CACnB,MAAM,SAAS,OAAO;EACpB,MAAM,WAAW,IAAI,eAAe;EACpC,SAAS,aAAa,YAAY,IAAI,uBAAuB,QAAQ,QAAQ,CAAC,CAAC;EAC/E,MAAM,UAAU,KAAK,aAAa,QAAQ,eAAe,QAAQ,iBAAiB;EAClF,SAAS,SAAS,OAAO;EACzB,KAAK,YAAY,UAAU,OAAO;EAClC,SAAS,qBAAqB;EAC9B,KAAK,SAAS,UAAU,OAAO,OAAO;EACtC,KAAK,kBAAkB,UAAU,OAAO,OAAO;EAC/C,SAAS,UAAU,CAAC,MAAM,MAAM,IAAI,CAAC,MAAM,MAAM,IAAI,CAAC,MAAM,MAAM,EAAE;EACpE,OAAO;CACT;CAEA,aAAa,SAAS,mBAAmB;EACvC,MAAM,kBAAkB,CAAC;EACzB,IAAI,IAAI;EACR,kBAAkB,QAAQ,SAAS,KAAK;GACtC,IAAI,MAAM,GACR,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,KACvB,gBAAgB,KAAK,QAAQ,IAAI,EAAE;QAChC,IAAI,QAAQ,GACjB,gBAAgB,KACd,QAAQ,IACR,QAAQ,IAAI,IACZ,QAAQ,IAAI,IACZ,QAAQ,IACR,QAAQ,IAAI,IACZ,QAAQ,IAAI,EACd;QACK,IAAI,MAAM,GAAG;IAClB,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,GAAG,KAC3B,gBAAgB,KAAK,QAAQ,IAAI,QAAQ,IAAI,IAAI,QAAQ,IAAI,IAAI,EAAE;IAErE,QAAQ,KAAK,iEAAiE;GAChF;GACA,KAAK;EACP,CAAC;EACD,OAAO;CACT;CAEA,YAAY,UAAU,SAAS;EAC7B,MAAM,OAAO,SAAS;EACtB,MAAM,WAAW,CAAC;EAClB,IAAI,WAAW;EACf,IAAI,QAAQ,SAAS,SACnB,WAAW;EACb,IAAI,QAAQ,SAAS,UACnB,WAAW;EACb,MAAM,kBAAkB,KAAK,qBAAqB,QAAQ,mBAAmB,QAAQ,eAAe;EACpG,IAAI,WAAW;EACf,MAAM,aAAa,CAAC;EACpB,IAAI;EACJ,IAAI;EACJ,IAAI,YAAY;EAChB,IAAI,eAAe;EACnB,KAAK,IAAI,IAAI,GAAG,IAAI,gBAAgB,QAAQ,KAAK,GAAG;GAClD,gBAAgB,gBAAgB,IAAI;GACpC,IAAI,MAAM,GACR,SAAS,YAAY,KAAK;GAC5B,IAAI,sBAAsB,KAAK,GAC7B,oBAAoB;GACtB,IAAI,kBAAkB,mBAAmB;IACvC,IAAI;IACJ,IAAI,WAAW,KAAK,qBAClB,eAAe,WAAW,KAAK;SAC1B;KACL,eAAe;KACf,WAAW,KAAK,sBAAsB;KACtC,SAAS,YAAY,KAAK;KAC1B;IACF;IACA,SAAS,SAAS,WAAW,cAAc,YAAY;IACvD,aAAa;IACb,oBAAoB;IACpB,eAAe;GACjB;GACA,gBAAgB;EAClB;EACA,IAAI,SAAS,OAAO,SAAS,GAAG;GAC9B,IAAI;GACJ,IAAI,WAAW,KAAK,iBAClB,eAAe,WAAW,KAAK;QAC1B;IACL,eAAe;IACf,WAAW,KAAK,kBAAkB;IAClC,SAAS,YAAY,KAAK;GAC5B;GACA,SAAS,SAAS,WAAW,cAAc,YAAY;EACzD;EACA,SAAS,SAAS,WAAW;CAC/B;CACA,qBAAqB,mBAAmB,SAAS;EAC/C,MAAM,kBAAkB,CAAC;EACzB,kBAAkB,QAAQ,SAAS,KAAK,GAAG;GACzC,IAAI,OAAO,GACT,gBAAgB,KAAK,QAAQ,IAAI,IAAI,QAAQ,IAAI,IAAI,EAAE;QAClD,IAAI,QAAQ,GACjB,gBAAgB,KAAK,QAAQ,IAAI,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,IAAI,IAAI,QAAQ,IAAI,IAAI,EAAE;QAE3F,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,GAAG,KAC3B,gBAAgB,KAAK,QAAQ,IAAI,IAAI,QAAQ,IAAI,IAAI,EAAE;EAG7D,CAAC;EACD,OAAO;CACT;CAUA,SAAS,UAAU,OAAO;EACxB,MAAM,cAAc,MAAM,KAAK,MAAM,SAAS,WAAW,SAAS,QAAQ,CAAC,GAAG,WAAW;GACvF,OAAO;EACT,CAAC;EACD,KAAK,MAAM,QAAQ,MAAM,KAAK;GAC5B,MAAM,MAAM,MAAM,IAAI,MAAM;GAE5B,MADwB,IAAI,MAAM,UACxB,QAAQ,SAAS,GAAG,GAAG;IAC/B,YAAY,IAAI,KAAK,IAAI,IAAI;IAC7B,YAAY,IAAI,IAAI,KAAK,IAAI,IAAI,IAAI;GACvC,CAAC;EACH;EACA,SAAS,aAAa,MAAM,IAAI,uBAAuB,aAAa,CAAC,CAAC;CACxE;CACA,kBAAkB,UAAU,OAAO;EACjC,IAAI,MAAM;EACV,KAAK,MAAM,QAAQ,MAAM,cAAc;GACrC,MAAM,iBAAiB,SAAS,WAAW,SAAS,MAAM,MAAM;GAChE,IAAI,CAAC,SAAS,gBAAgB,UAC5B,SAAS,gBAAgB,WAAW,CAAC;GACvC,MAAM,cAAc,MAAM,aAAa,MAAM;GAC7C,MAAM,eAAe,MAAM,aAAa,MAAM;GAC9C,MAAM,OAAO,MAAM,aAAa,MAAM;GACtC,aAAa,QAAQ,SAAS,GAAG,GAAG;IAClC,IAAI,SAAS,YAAY;KACvB,eAAe,IAAI,MAAM,YAAY,IAAI;KACzC,eAAe,IAAI,IAAI,MAAM,YAAY,IAAI,IAAI;KACjD,eAAe,IAAI,IAAI,MAAM,YAAY,IAAI,IAAI;IACnD,OAAO;KACL,eAAe,IAAI,KAAK,YAAY,IAAI;KACxC,eAAe,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI;KAChD,eAAe,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI;IAClD;GACF,CAAC;GACD,SAAS,gBAAgB,SAAS,OAAO,IAAI,uBAAuB,gBAAgB,CAAC;GACrF,SAAS,gBAAgB,SAAS,KAAK,OAAO;GAC9C;EACF;EACA,SAAS,uBAAuB;CAClC;AACF;AACA,SAAS,iBAAiB,KAAK,KAAK;CAClC,MAAM,QAAQ,IAAI,QAAQ,GAAG;CAC7B,IAAI,UAAU,IACZ,OAAO;CACT,OAAO,IAAI,OAAO,GAAG,KAAK;AAC5B;;;ACjoBA,IAAM,YAAN,cAAwB,OAAO;CAC7B,YAAY,SAAS;EACnB,MAAM,OAAO;EACb,KAAK,sBAAsB,CAAC;CAC9B;CACA,KAAK,KAAK,QAAQ,YAAY,SAAS;EACrC,MAAM,QAAQ;EACd,MAAM,SAAS,IAAI,WAAW,KAAK,OAAO;EAC1C,OAAO,QAAQ,KAAK,IAAI;EACxB,OAAO,gBAAgB,aAAa;EACpC,OAAO,iBAAiB,KAAK,aAAa;EAC1C,OAAO,mBAAmB,KAAK,eAAe;EAC9C,OAAO,KACL,KACA,SAAS,MAAM;GACb,IAAI;IACF,OAAO,MAAM,MAAM,IAAI,CAAC;GAC1B,SAAS,GAAG;IACV,IAAI,SACF,QAAQ,CAAC;SAET,QAAQ,MAAM,CAAC;IAEjB,MAAM,QAAQ,UAAU,GAAG;GAC7B;EACF,GACA,YACA,OACF;CACF;CACA,uBAAuB,SAAS;EAC9B,KAAK,sBAAsB;CAC7B;CACA,MAAM,MAAM;EACV,SAAS,YAAY,OAAO;GAC1B,MAAM,gBAAgB;GACtB,IAAI,aAAa;GACjB,IAAI,eAAe;GACnB,MAAM,SAAS,cAAc,KAAK,KAAK;GACvC,IAAI,WAAW,MAAM;IACnB,aAAa,OAAO;IACpB,eAAe,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC,EAAE;GACvC;GACA,MAAM,SAAS;IACb,UAAU,CAAC;IACX,UAAU,CAAC;IACX;IACA,SAAS;GACX;GACA,MAAM,QAAQ,WAAW,MAAM,IAAI;GACnC,IAAI;GACJ,SAAS,0BAA0B,eAAe,qBAAqB;IACrE,MAAM,WAAW,EAAE,MAAM,cAAc,GAAG;IAC1C,IAAI,SAAS,SAAS,QAAQ;KAC5B,SAAS,OAAO,cAAc;KAC9B,SAAS,YAAY,cAAc;KACnC,SAAS,WAAW,cAAc;IACpC,OACE,SAAS,OAAO,cAAc;IAEhC,IAAI,SAAS,QAAQ,qBACnB,SAAS,OAAO,oBAAoB,SAAS;IAE/C,OAAO;GACT;GACA,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;IACrC,IAAI,OAAO,MAAM;IACjB,OAAO,KAAK,KAAK;IACjB,IAAI,SAAS,IACX;IACF,MAAM,aAAa,KAAK,MAAM,KAAK;IACnC,MAAM,WAAW,WAAW,MAAM;IAClC,OAAO,WAAW,KAAK,GAAG;IAC1B,QAAQ,UAAR;KACE,KAAK;MACH,OAAO,SAAS,WAAW;MAC3B,OAAO,UAAU,WAAW;MAC5B;KACF,KAAK;MACH,OAAO,SAAS,KAAK,IAAI;MACzB;KACF,KAAK;MACH,IAAI,mBAAmB,KAAK,GAC1B,OAAO,SAAS,KAAK,cAAc;MAErC,iBAAiB,CAAC;MAClB,eAAe,OAAO,WAAW;MACjC,eAAe,QAAQ,SAAS,WAAW,EAAE;MAC7C,eAAe,aAAa,CAAC;MAC7B;KACF,KAAK;MACH,eAAe,WAAW,KAAK,0BAA0B,YAAY,MAAM,mBAAmB,CAAC;MAC/F;KACF,KAAK;MACH,OAAO,UAAU;MACjB;KACF,SACE,QAAQ,IAAI,aAAa,UAAU,UAAU;IACjD;GACF;GACA,IAAI,mBAAmB,KAAK,GAC1B,OAAO,SAAS,KAAK,cAAc;GAErC,OAAO;EACT;EACA,SAAS,iBAAiB,GAAG,MAAM;GACjC,QAAQ,MAAR;IACE,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK,UACH,OAAO,SAAS,CAAC;IACnB,KAAK;IACL,KAAK;IACL,KAAK;IACL,KAAK,WACH,OAAO,WAAW,CAAC;GACvB;EACF;EACA,SAAS,kBAAkB,YAAY,MAAM;GAC3C,MAAM,SAAS,KAAK,MAAM,KAAK;GAC/B,MAAM,UAAU,CAAC;GACjB,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KACrC,IAAI,WAAW,GAAG,SAAS,QAAQ;IACjC,MAAM,OAAO,CAAC;IACd,MAAM,IAAI,iBAAiB,OAAO,MAAM,GAAG,WAAW,GAAG,SAAS;IAClE,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KACrB,KAAK,KAAK,iBAAiB,OAAO,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;IAEpE,QAAQ,WAAW,GAAG,QAAQ;GAChC,OACE,QAAQ,WAAW,GAAG,QAAQ,iBAAiB,OAAO,MAAM,GAAG,WAAW,GAAG,IAAI;GAGrF,OAAO;EACT;EACA,SAAS,WAAW,OAAO,QAAQ;GACjC,MAAM,SAAS;IACb,SAAS,CAAC;IACV,UAAU,CAAC;IACX,SAAS,CAAC;IACV,KAAK,CAAC;IACN,eAAe,CAAC;IAChB,QAAQ,CAAC;GACX;GACA,IAAI;GACJ,MAAM,cAAc;GACpB,IAAI,OAAO;GACX,KAAK,SAAS,YAAY,KAAK,KAAK,OAAO,MACzC,OAAO,OAAO;GAEhB,MAAM,QAAQ,KAAK,MAAM,IAAI;GAC7B,IAAI,iBAAiB;GACrB,IAAI,sBAAsB;GAC1B,KAAK,IAAI,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;IACrC,IAAI,OAAO,MAAM;IACjB,OAAO,KAAK,KAAK;IACjB,IAAI,SAAS,IACX;IAEF,IAAI,uBAAuB,OAAO,SAAS,gBAAgB,OAAO;KAChE;KACA,sBAAsB;IACxB;IACA,MAAM,UAAU,kBAAkB,OAAO,SAAS,gBAAgB,YAAY,IAAI;IAClF,cAAc,QAAQ,OAAO,SAAS,gBAAgB,MAAM,OAAO;IACnE;GACF;GACA,OAAO,YAAY,MAAM;EAC3B;EACA,SAAS,YAAY,QAAQ;GAC3B,IAAI,YAAY,IAAI,eAAe;GACnC,IAAI,OAAO,QAAQ,SAAS,GAC1B,UAAU,SAAS,OAAO,OAAO;GAEnC,UAAU,aAAa,YAAY,IAAI,uBAAuB,OAAO,UAAU,CAAC,CAAC;GACjF,IAAI,OAAO,QAAQ,SAAS,GAC1B,UAAU,aAAa,UAAU,IAAI,uBAAuB,OAAO,SAAS,CAAC,CAAC;GAEhF,IAAI,OAAO,IAAI,SAAS,GACtB,UAAU,aAAa,MAAM,IAAI,uBAAuB,OAAO,KAAK,CAAC,CAAC;GAExE,IAAI,OAAO,OAAO,SAAS,GACzB,UAAU,aAAa,SAAS,IAAI,uBAAuB,OAAO,QAAQ,CAAC,CAAC;GAE9E,IAAI,OAAO,cAAc,SAAS,GAAG;IACnC,YAAY,UAAU,aAAa;IACnC,UAAU,aAAa,MAAM,IAAI,uBAAuB,OAAO,eAAe,CAAC,CAAC;GAClF;GACA,UAAU,sBAAsB;GAChC,OAAO;EACT;EACA,SAAS,cAAc,QAAQ,aAAa,SAAS;GACnD,IAAI,gBAAgB,UAAU;IAC5B,OAAO,SAAS,KAAK,QAAQ,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACpD,IAAI,QAAQ,WAAW,QAAQ,WAAW,QAAQ,SAChD,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,IAAI,QAAQ,EAAE;IAExD,IAAI,OAAO,WAAW,OAAO,SAC3B,OAAO,IAAI,KAAK,QAAQ,GAAG,QAAQ,CAAC;IAEtC,IAAI,SAAS,WAAW,WAAW,WAAW,UAAU,SACtD,OAAO,OAAO,KAAK,QAAQ,MAAM,KAAK,QAAQ,QAAQ,KAAK,QAAQ,OAAO,GAAG;GAEjF,OAAO,IAAI,gBAAgB,QAAQ;IACjC,MAAM,iBAAiB,QAAQ,kBAAkB,QAAQ;IACzD,MAAM,WAAW,QAAQ;IACzB,IAAI,eAAe,WAAW,GAAG;KAC/B,OAAO,QAAQ,KAAK,eAAe,IAAI,eAAe,IAAI,eAAe,EAAE;KAC3E,IAAI,YAAY,SAAS,WAAW,GAAG;MACrC,OAAO,cAAc,KAAK,SAAS,IAAI,SAAS,EAAE;MAClD,OAAO,cAAc,KAAK,SAAS,IAAI,SAAS,EAAE;MAClD,OAAO,cAAc,KAAK,SAAS,IAAI,SAAS,EAAE;KACpD;IACF,OAAO,IAAI,eAAe,WAAW,GAAG;KACtC,OAAO,QAAQ,KAAK,eAAe,IAAI,eAAe,IAAI,eAAe,EAAE;KAC3E,OAAO,QAAQ,KAAK,eAAe,IAAI,eAAe,IAAI,eAAe,EAAE;IAC7E;GACF;EACF;EACA,SAAS,WAAW,UAAU,IAAI,MAAM,eAAe;GACrD,QAAQ,MAAR;IACE,KAAK;IACL,KAAK,QACH,OAAO,CAAC,SAAS,QAAQ,EAAE,GAAG,CAAC;IACjC,KAAK;IACL,KAAK,SACH,OAAO,CAAC,SAAS,SAAS,EAAE,GAAG,CAAC;IAClC,KAAK;IACL,KAAK,SACH,OAAO,CAAC,SAAS,SAAS,IAAI,aAAa,GAAG,CAAC;IACjD,KAAK;IACL,KAAK,UACH,OAAO,CAAC,SAAS,UAAU,IAAI,aAAa,GAAG,CAAC;IAClD,KAAK;IACL,KAAK,OACH,OAAO,CAAC,SAAS,SAAS,IAAI,aAAa,GAAG,CAAC;IACjD,KAAK;IACL,KAAK,QACH,OAAO,CAAC,SAAS,UAAU,IAAI,aAAa,GAAG,CAAC;IAClD,KAAK;IACL,KAAK,SACH,OAAO,CAAC,SAAS,WAAW,IAAI,aAAa,GAAG,CAAC;IACnD,KAAK;IACL,KAAK,UACH,OAAO,CAAC,SAAS,WAAW,IAAI,aAAa,GAAG,CAAC;GACrD;EACF;EACA,SAAS,kBAAkB,UAAU,IAAI,YAAY,eAAe;GAClE,MAAM,UAAU,CAAC;GACjB,IAAI,QAAQ,OAAO;GACnB,KAAK,IAAI,IAAI,GAAG,IAAI,WAAW,QAAQ,KACrC,IAAI,WAAW,GAAG,SAAS,QAAQ;IACjC,MAAM,OAAO,CAAC;IACd,SAAS,WAAW,UAAU,KAAK,MAAM,WAAW,GAAG,WAAW,aAAa;IAC/E,MAAM,IAAI,OAAO;IACjB,QAAQ,OAAO;IACf,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,KAAK;KAC1B,SAAS,WAAW,UAAU,KAAK,MAAM,WAAW,GAAG,UAAU,aAAa;KAC9E,KAAK,KAAK,OAAO,EAAE;KACnB,QAAQ,OAAO;IACjB;IACA,QAAQ,WAAW,GAAG,QAAQ;GAChC,OAAO;IACL,SAAS,WAAW,UAAU,KAAK,MAAM,WAAW,GAAG,MAAM,aAAa;IAC1E,QAAQ,WAAW,GAAG,QAAQ,OAAO;IACrC,QAAQ,OAAO;GACjB;GAEF,OAAO,CAAC,SAAS,IAAI;EACvB;EACA,SAAS,YAAY,OAAO,QAAQ;GAClC,MAAM,SAAS;IACb,SAAS,CAAC;IACV,UAAU,CAAC;IACX,SAAS,CAAC;IACV,KAAK,CAAC;IACN,eAAe,CAAC;IAChB,QAAQ,CAAC;GACX;GACA,MAAM,gBAAgB,OAAO,WAAW;GACxC,MAAM,OAAO,IAAI,SAAS,OAAO,OAAO,YAAY;GACpD,IAAI,QAAQ,MAAM;GAClB,KAAK,IAAI,iBAAiB,GAAG,iBAAiB,OAAO,SAAS,QAAQ,kBACpE,KAAK,IAAI,sBAAsB,GAAG,sBAAsB,OAAO,SAAS,gBAAgB,OAAO,uBAAuB;IACpH,SAAS,kBAAkB,MAAM,KAAK,OAAO,SAAS,gBAAgB,YAAY,aAAa;IAC/F,OAAO,OAAO;IACd,MAAM,UAAU,OAAO;IACvB,cAAc,QAAQ,OAAO,SAAS,gBAAgB,MAAM,OAAO;GACrE;GAEF,OAAO,YAAY,MAAM;EAC3B;EACA,IAAI;EACJ,MAAM,QAAQ;EACd,IAAI,gBAAgB,aAAa;GAC/B,MAAM,OAAOC,aAAW,IAAI,WAAW,IAAI,CAAC;GAC5C,MAAM,SAAS,YAAY,IAAI;GAC/B,WAAW,OAAO,WAAW,UAAU,WAAW,MAAM,MAAM,IAAI,YAAY,MAAM,MAAM;EAC5F,OACE,WAAW,WAAW,MAAM,YAAY,IAAI,CAAC;EAE/C,OAAO;CACT;AACF;;;ACzTA,IAAMC,yBAAuB,IAAI,KAAK;AACtC,IAAM,0BAA0B,IAAI,QAAQ;AAC5C,IAAM,uBAAN,cAAmC,wBAAwB;CACzD,cAAc;EACZ,MAAM;EACN,KAAK,yBAAyB;EAC9B,KAAK,OAAO;EACZ,MAAM,YAAY;GAAC;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAI;GAAG;GAAG;GAAI;EAAC;EAC/F,MAAM,MAAM;GAAC;GAAI;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAI;GAAI;GAAG;GAAI;GAAI;GAAI;GAAG;EAAE;EAEnE,KAAK,SAAS;GADC;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;EAChD,CAAC;EACnB,KAAK,aAAa,YAAY,IAAI,uBAAuB,WAAW,CAAC,CAAC;EACtE,KAAK,aAAa,MAAM,IAAI,uBAAuB,KAAK,CAAC,CAAC;CAC5D;CACA,aAAa,QAAQ;EACnB,MAAM,QAAQ,KAAK,WAAW;EAC9B,MAAM,MAAM,KAAK,WAAW;EAC5B,IAAI,UAAU,KAAK,GAAG;GACpB,MAAM,aAAa,MAAM;GACzB,IAAI,aAAa,MAAM;GACvB,MAAM,cAAc;EACtB;EACA,IAAI,KAAK,gBAAgB,MACvB,KAAK,mBAAmB;EAE1B,IAAI,KAAK,mBAAmB,MAC1B,KAAK,sBAAsB;EAE7B,OAAO;CACT;CACA,aAAa,OAAO;EAClB,IAAI;EACJ,IAAI,iBAAiB,cACnB,eAAe;OACV,IAAI,MAAM,QAAQ,KAAK,GAC5B,eAAe,IAAI,aAAa,KAAK;EAEvC,MAAM,iBAAiB,IAAI,2BAA2B,cAAc,GAAG,CAAC;EACxE,KAAK,aAAa,iBAAiB,IAAI,2BAA2B,gBAAgB,GAAG,CAAC,CAAC;EACvF,KAAK,aAAa,eAAe,IAAI,2BAA2B,gBAAgB,GAAG,CAAC,CAAC;EACrF,KAAK,mBAAmB;EACxB,KAAK,sBAAsB;EAC3B,OAAO;CACT;CACA,UAAU,OAAO,WAAW,GAAG;EAC7B,IAAI;EACJ,IAAI,iBAAiB,cACnB,SAAS;OACJ,IAAI,MAAM,QAAQ,KAAK,GAC5B,SAAS,IAAI,aAAa,KAAK;EAEjC,MAAM,sBAAsB,IAAI,2BAA2B,QAAQ,WAAW,GAAG,CAAC;EAClF,KAAK,aAAa,sBAAsB,IAAI,2BAA2B,qBAAqB,UAAU,CAAC,CAAC;EACxG,KAAK,aAAa,oBAAoB,IAAI,2BAA2B,qBAAqB,UAAU,QAAQ,CAAC;EAC7G,OAAO;CACT;CACA,sBAAsB,UAAU;EAC9B,KAAK,aAAa,SAAS,WAAW,SAAS,KAAK;EACpD,OAAO;CACT;CACA,kBAAkB,UAAU;EAC1B,KAAK,aAAa,SAAS,WAAW,SAAS,KAAK;EACpD,OAAO;CACT;CACA,SAAS,MAAM;EACb,KAAK,sBAAsB,IAAI,kBAAkB,KAAK,QAAQ,CAAC;EAC/D,OAAO;CACT;CACA,iBAAiB,cAAc;EAC7B,MAAM,WAAW,aAAa;EAC9B,KAAK,aAAa,SAAS,WAAW,SAAS,KAAK;EACpD,OAAO;CACT;CACA,qBAAqB;EACnB,IAAI,KAAK,gBAAgB,MACvB,KAAK,cAAc,IAAI,KAAK;EAE9B,MAAM,QAAQ,KAAK,WAAW;EAC9B,MAAM,MAAM,KAAK,WAAW;EAC5B,IAAI,UAAU,KAAK,KAAK,QAAQ,KAAK,GAAG;GACtC,KAAK,YAAY,uBAAuB,KAAK;GAC7C,OAAK,uBAAuB,GAAG;GAC/B,KAAK,YAAY,MAAMA,MAAI;EAC7B;CACF;CACA,wBAAwB;EACtB,IAAI,KAAK,mBAAmB,MAC1B,KAAK,iBAAiB,IAAI,OAAO;EAEnC,IAAI,KAAK,gBAAgB,MACvB,KAAK,mBAAmB;EAE1B,MAAM,QAAQ,KAAK,WAAW;EAC9B,MAAM,MAAM,KAAK,WAAW;EAC5B,IAAI,UAAU,KAAK,KAAK,QAAQ,KAAK,GAAG;GACtC,MAAM,SAAS,KAAK,eAAe;GACnC,KAAK,YAAY,UAAU,MAAM;GACjC,IAAI,cAAc;GAClB,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,OAAO,IAAI,IAAI,KAAK;IAC7C,QAAQ,oBAAoB,OAAO,CAAC;IACpC,cAAc,KAAK,IAAI,aAAa,OAAO,kBAAkB,OAAO,CAAC;IACrE,QAAQ,oBAAoB,KAAK,CAAC;IAClC,cAAc,KAAK,IAAI,aAAa,OAAO,kBAAkB,OAAO,CAAC;GACvE;GACA,KAAK,eAAe,SAAS,KAAK,KAAK,WAAW;GAClD,IAAI,MAAM,KAAK,eAAe,MAAM,GAClC,QAAQ,MACN,yIACA,IACF;EAEJ;CACF;CACA,SAAS,CACT;CACA,YAAY,QAAQ;EAClB,QAAQ,KAAK,+EAA+E;EAC5F,OAAO,KAAK,aAAa,MAAM;CACjC;AACF;;;ACvHA,IAAM,eAAN,cAA2B,qBAAqB;CAC9C,cAAc;EACZ,MAAM;EACN,KAAK,iBAAiB;EACtB,KAAK,OAAO;CACd;CACA,aAAa,OAAO;EAClB,MAAM,SAAS,MAAM,SAAS;EAC9B,MAAM,SAAS,IAAI,aAAa,IAAI,MAAM;EAC1C,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK,GAAG;GAClC,OAAO,IAAI,KAAK,MAAM;GACtB,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;EAChC;EACA,MAAM,aAAa,MAAM;EACzB,OAAO;CACT;CACA,UAAU,OAAO,WAAW,GAAG;EAC7B,MAAM,SAAS,MAAM,SAAS;EAC9B,MAAM,SAAS,IAAI,aAAa,IAAI,MAAM;EAC1C,IAAI,aAAa,GACf,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK,UAAU;GACzC,OAAO,IAAI,KAAK,MAAM;GACtB,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;EAChC;OAEA,KAAK,IAAI,IAAI,GAAG,IAAI,QAAQ,KAAK,UAAU;GACzC,OAAO,IAAI,KAAK,MAAM;GACtB,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;GAC9B,OAAO,IAAI,IAAI,KAAK,MAAM,IAAI;EAChC;EAEF,MAAM,UAAU,QAAQ,QAAQ;EAChC,OAAO;CACT;CACA,SAAS,MAAM;EACb,MAAM,WAAW,KAAK;EACtB,KAAK,aAAa,SAAS,WAAW,SAAS,KAAK;EACpD,OAAO;CACT;AACF;;;ACnDA,IAAM,eAAN,cAA2B,eAAe;CACxC,YAAY,YAAY;EACtB,MAAM;GACJ,MAAM;GACN,UAAU,cAAc,MACtB,cAAc,MAAM;IAClB,YAAY;IACZ,YAAY;IACZ;KACE,YAAY,EAAE,OAAO,EAAE;KACvB,WAAW,EAAE,OAAO,EAAE;KACtB,YAAY,EAAE,OAAO,IAAI,QAAQ,GAAG,CAAC,EAAE;KACvC,YAAY,EAAE,OAAO,EAAE;KACvB,WAAW,EAAE,OAAO,EAAE;KACtB,UAAU,EAAE,OAAO,EAAE;KACrB,SAAS,EAAE,OAAO,EAAE;IAEtB;GACF,CAAC,CACH;GACA,cAEE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8OF,gBAEE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAuKS,WAAW,MAAM,wBAAwB,qBAAqB;;;;;;GAOzE,UAAU;EAEZ,CAAC;EACD,KAAK,iBAAiB;EACtB,KAAK,kBAAkB,WAAW;GAChC,IAAI,KAAK,aACP,KAAK,QAAQ,uBAAuB;QAEpC,OAAO,KAAK,QAAQ;EAExB;EACA,OAAO,iBAAiB,MAAM;GAC5B,OAAO;IACL,YAAY;IACZ,KAAK,WAAW;KACd,OAAO,KAAK,SAAS,QAAQ;IAC/B;IACA,KAAK,SAAS,OAAO;KACnB,KAAK,SAAS,QAAQ,QAAQ;IAChC;GACF;GACA,YAAY;IACV,YAAY;IACZ,KAAK,WAAW;KACd,OAAO,iBAAiB,KAAK;IAC/B;IACA,KAAK,SAAS,OAAO;KACnB,IAAI,UAAU,MACZ,KAAK,QAAQ,cAAc;UAE3B,OAAO,KAAK,QAAQ;IAExB;GACF;GACA,WAAW;IACT,YAAY;IACZ,KAAK,WAAW;KACd,OAAO,KAAK,SAAS,UAAU;IACjC;IACA,KAAK,SAAS,OAAO;KACnB,KAAK,SAAS,UAAU,QAAQ;IAClC;GACF;GACA,QAAQ;IACN,YAAY;IACZ,KAAK,WAAW;KACd,OAAO,QAAQ,cAAc,KAAK,OAAO;IAC3C;IACA,IAAI,OAAO;KACT,IAAI,QAAQ,KAAK,MAAM,QAAQ,cAAc,KAAK,OAAO,GACvD,KAAK,cAAc;KAErB,IAAI,UAAU,MACZ,KAAK,QAAQ,WAAW;UAExB,OAAO,KAAK,QAAQ;IAExB;GACF;GACA,WAAW;IACT,YAAY;IACZ,KAAK,WAAW;KACd,OAAO,KAAK,SAAS,UAAU;IACjC;IACA,KAAK,SAAS,OAAO;KACnB,KAAK,SAAS,UAAU,QAAQ;IAClC;GACF;GACA,UAAU;IACR,YAAY;IACZ,KAAK,WAAW;KACd,OAAO,KAAK,SAAS,SAAS;IAChC;IACA,KAAK,SAAS,OAAO;KACnB,KAAK,SAAS,SAAS,QAAQ;IACjC;GACF;GACA,YAAY;IACV,YAAY;IACZ,KAAK,WAAW;KACd,OAAO,KAAK,SAAS,WAAW;IAClC;IACA,KAAK,SAAS,OAAO;KACnB,KAAK,SAAS,WAAW,QAAQ;IACnC;GACF;GACA,SAAS;IACP,YAAY;IACZ,KAAK,WAAW;KACd,OAAO,KAAK,SAAS,QAAQ;IAC/B;IACA,KAAK,SAAS,OAAO;KACnB,KAAK,SAAS,QAAQ,QAAQ;IAChC;GACF;GACA,SAAS;IACP,YAAY;IACZ,KAAK,WAAW;KACd,OAAO,KAAK,SAAS,QAAQ;IAC/B;IACA,KAAK,SAAS,OAAO;KACnB,KAAK,SAAS,QAAQ,QAAQ;IAChC;GACF;GACA,YAAY;IACV,YAAY;IACZ,KAAK,WAAW;KACd,OAAO,KAAK,SAAS,WAAW;IAClC;IACA,KAAK,SAAS,OAAO;KACnB,KAAK,SAAS,WAAW,MAAM,KAAK,KAAK;IAC3C;GACF;GACA,iBAAiB;IACf,YAAY;IACZ,KAAK,WAAW;KACd,OAAO,QAAQ,2BAA2B,KAAK,OAAO;IACxD;IACA,KAAK,SAAS,OAAO;KACnB,IAAI,QAAQ,KAAK,MAAM,QAAQ,2BAA2B,KAAK,OAAO,GACpE,KAAK,cAAc;KAErB,IAAI,UAAU,MAAM;MAClB,KAAK,QAAQ,wBAAwB;MACrC,KAAK,WAAW,cAAc;KAChC,OAAO;MACL,OAAO,KAAK,QAAQ;MACpB,KAAK,WAAW,cAAc;KAChC;IACF;GACF;EACF,CAAC;EACD,KAAK,UAAU,UAAU;CAC3B;AACF;;;ACzjBA,IAAMC,2BAAyB,IAAI,QAAQ;AAC3C,IAAMC,yBAAuB,IAAI,QAAQ;AACzC,IAAMC,8BAA4B,IAAI,QAAQ;AAC9C,IAAM,YAAN,cAAwB,KAAK;CAC3B,YAAY,WAAW,IAAI,qBAAqB,GAAG,WAAW,IAAI,aAAa,EAAE,OAAO,KAAK,OAAO,IAAI,SAAS,CAAC,GAAG;EACnH,MAAM,UAAU,QAAQ;EACxB,KAAK,cAAc;EACnB,KAAK,OAAO;CACd;CAEA,uBAAuB;EACrB,MAAM,WAAW,KAAK;EACtB,MAAM,gBAAgB,SAAS,WAAW;EAC1C,MAAM,cAAc,SAAS,WAAW;EACxC,MAAM,gBAAgB,IAAI,aAAa,IAAI,cAAc,KAAK;EAC9D,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,cAAc,OAAO,IAAI,GAAG,KAAK,KAAK,GAAG;GAClE,SAAO,oBAAoB,eAAe,CAAC;GAC3C,OAAK,oBAAoB,aAAa,CAAC;GACvC,cAAc,KAAK,MAAM,IAAI,IAAI,cAAc,IAAI;GACnD,cAAc,IAAI,KAAK,cAAc,KAAKF,SAAO,WAAWC,MAAI;EAClE;EACA,MAAM,yBAAyB,IAAI,2BAA2B,eAAe,GAAG,CAAC;EACjF,SAAS,aAAa,yBAAyB,IAAI,2BAA2B,wBAAwB,GAAG,CAAC,CAAC;EAC3G,SAAS,aAAa,uBAAuB,IAAI,2BAA2B,wBAAwB,GAAG,CAAC,CAAC;EACzG,OAAO;CACT;CACA,eAAe,UAAU;EACvB,MAAM,WAAW,KAAK,SAAS;EAC/B,IAAI,YAAY,SAAS,YAAY;GACnC,SAAS,YAAYC,WAAS;GAC9B,KAAK,SAAS,SAAS,WAAW,MAAM,IAAIA,YAAU,GAAGA,YAAU,CAAC;EACtE;CACF;AACF;;;AClCA,IAAM,qBAAN,cAAiC,qBAAqB;CACpD,YAAY,UAAU;EACpB,MAAM;EACN,KAAK,uBAAuB;EAC5B,KAAK,OAAO;EACZ,KAAK,sBAAsB,IAAI,kBAAkB,QAAQ,CAAC;CAC5D;AACF;;;ACLA,IAAM,4BAA4B,IAAI,QAAQ;AAC9C,IAAM,yBAAyB,IAAI,QAAQ;AAC3C,IAAM,uBAAuB,IAAI,QAAQ;AACzC,IAAM,0BAA0B,IAAI,QAAQ;AAC5C,IAAM,wBAAwB,IAAI,QAAQ;AAC1C,IAAM,4BAA4B,IAAI,QAAQ;AAC9C,IAAM,6BAA6B,IAAI,QAAQ;AAC/C,IAAM,4BAA4B,IAAI,QAAQ;AAC9C,IAAM,wBAAwB,IAAI,MAAM;AACxC,IAAM,gCAAgC,IAAI,QAAQ;AAClD,IAAM,uBAAuB,IAAI,KAAK;AACtC,IAAM,0BAA0B,IAAI,OAAO;AAC3C,IAAM,qCAAqC,IAAI,QAAQ;AACvD,IAAI,MAAM;AACV,SAAS,uBAAuB,QAAQ,UAAU,YAAY;CAC5D,mBAAmB,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,EAAE,aAAa,OAAO,gBAAgB;CAC/E,mBAAmB,eAAe,IAAI,mBAAmB,CAAC;CAC1D,mBAAmB,IAAI,aAAa,WAAW;CAC/C,mBAAmB,IAAI,aAAa,WAAW;CAC/C,mBAAmB,aAAa,OAAO,uBAAuB;CAC9D,mBAAmB,eAAe,IAAI,mBAAmB,CAAC;CAC1D,OAAO,KAAK,IAAI,KAAK,IAAI,mBAAmB,GAAG,mBAAmB,CAAC,CAAC;AACtE;AACA,SAAS,kBAAkB,cAAc,YAAY;CACnD,MAAM,cAAc,aAAa;CACjC,MAAM,WAAW,aAAa;CAC9B,MAAM,gBAAgB,SAAS,WAAW;CAC1C,MAAM,cAAc,SAAS,WAAW;CACxC,MAAM,eAAe,KAAK,IAAI,SAAS,eAAe,cAAc,KAAK;CACzE,KAAK,IAAI,IAAI,GAAG,IAAI,cAAc,IAAI,GAAG,KAAK;EAC5C,MAAM,MAAM,oBAAoB,eAAe,CAAC;EAChD,MAAM,IAAI,oBAAoB,aAAa,CAAC;EAC5C,MAAM,aAAa,WAAW;EAC9B,MAAM,cAAc,IAAI,QAAQ;EAChC,MAAM,QAAQ,IAAI,QAAQ;EAC1B,KAAK,oBAAoB,MAAM,OAAO,MAAM,KAAK,OAAO,WAAW;EAEnE,IADiB,MAAM,WAAW,WAAW,IAAI,aAAa,IAE5D,WAAW,KAAK;GACd;GACA;GACA,UAAU,KAAK,OAAO,WAAW,KAAK;GACtC,QAAQ;GACR,MAAM;GACN,WAAW;GACX,IAAI;IACH,MAAM;EACT,CAAC;CAEL;AACF;AACA,SAAS,mBAAmB,cAAc,QAAQ,YAAY;CAC5D,MAAM,mBAAmB,OAAO;CAEhC,MAAM,aADW,aAAa,SACF;CAC5B,MAAM,cAAc,aAAa;CACjC,MAAM,WAAW,aAAa;CAC9B,MAAM,gBAAgB,SAAS,WAAW;CAC1C,MAAM,cAAc,SAAS,WAAW;CACxC,MAAM,eAAe,KAAK,IAAI,SAAS,eAAe,cAAc,KAAK;CACzE,MAAM,OAAO,CAAC,OAAO;CACrB,KAAK,GAAG,GAAG,SAAS;CACpB,UAAU,IAAI;CACd,UAAU,aAAa,OAAO,kBAAkB;CAChD,UAAU,aAAa,gBAAgB;CACvC,UAAU,eAAe,IAAI,UAAU,CAAC;CACxC,UAAU,KAAK,WAAW,IAAI;CAC9B,UAAU,KAAK,WAAW,IAAI;CAC9B,UAAU,IAAI;CACd,WAAW,KAAK,SAAS;CACzB,UAAU,iBAAiB,OAAO,oBAAoB,WAAW;CACjE,KAAK,IAAI,IAAI,GAAG,IAAI,cAAc,IAAI,GAAG,KAAK;EAC5C,QAAQ,oBAAoB,eAAe,CAAC;EAC5C,MAAM,oBAAoB,aAAa,CAAC;EACxC,QAAQ,IAAI;EACZ,MAAM,IAAI;EACV,QAAQ,aAAa,SAAS;EAC9B,MAAM,aAAa,SAAS;EAE5B,IAD2B,QAAQ,IAAI,QAAQ,MAAM,IAAI,MAEvD;EAEF,IAAI,QAAQ,IAAI,MAAM;GACpB,MAAM,YAAY,QAAQ,IAAI,MAAM;GACpC,MAAM,KAAK,QAAQ,IAAI,QAAQ;GAC/B,QAAQ,KAAK,OAAO,CAAC;EACvB,OAAO,IAAI,MAAM,IAAI,MAAM;GACzB,MAAM,YAAY,MAAM,IAAI,QAAQ;GACpC,MAAM,KAAK,MAAM,IAAI,QAAQ;GAC7B,MAAM,KAAK,SAAS,CAAC;EACvB;EACA,QAAQ,aAAa,gBAAgB;EACrC,MAAM,aAAa,gBAAgB;EACnC,QAAQ,eAAe,IAAI,QAAQ,CAAC;EACpC,MAAM,eAAe,IAAI,MAAM,CAAC;EAChC,QAAQ,KAAK,WAAW,IAAI;EAC5B,QAAQ,KAAK,WAAW,IAAI;EAC5B,MAAM,KAAK,WAAW,IAAI;EAC1B,MAAM,KAAK,WAAW,IAAI;EAC1B,MAAM,MAAM,KAAK,OAAO;EACxB,MAAM,MAAM,IAAI;EAChB,MAAM,IAAI,KAAK,KAAK;EACpB,MAAM,IAAI,IAAI;EACd,MAAM,QAAQ,MAAM,6BAA6B,YAAY,IAAI;EACjE,MAAM,GAAG,OAAO,aAAa;EAC7B,MAAM,OAAO,UAAU,KAAK,QAAQ,GAAG,MAAM,GAAG,KAAK;EACrD,MAAM,gBAAgB,QAAQ,MAAM,QAAQ;EAC5C,MAAM,WAAW,WAAW,WAAW,aAAa,IAAI,aAAa;EACrE,IAAI,iBAAiB,UAAU;GAC7B,MAAM,MAAM,oBAAoB,eAAe,CAAC;GAChD,MAAM,IAAI,oBAAoB,aAAa,CAAC;GAC5C,MAAM,MAAM,aAAa,WAAW;GACpC,MAAM,IAAI,aAAa,WAAW;GAClC,MAAM,cAAc,IAAI,QAAQ;GAChC,MAAM,QAAQ,IAAI,QAAQ;GAC1B,KAAK,oBAAoB,MAAM,OAAO,MAAM,KAAK,OAAO,WAAW;GACnE,WAAW,KAAK;IACd;IACA;IACA,UAAU,KAAK,OAAO,WAAW,KAAK;IACtC,QAAQ;IACR,MAAM;IACN,WAAW;IACX,IAAI;KACH,MAAM;GACT,CAAC;EACH;CACF;AACF;AACA,IAAM,gBAAN,cAA4B,KAAK;CAC/B,YAAY,WAAW,IAAI,qBAAqB,GAAG,WAAW,IAAI,aAAa,EAAE,OAAO,KAAK,OAAO,IAAI,SAAS,CAAC,GAAG;EACnH,MAAM,UAAU,QAAQ;EACxB,KAAK,kBAAkB;EACvB,KAAK,OAAO;CACd;CAEA,uBAAuB;EACrB,MAAM,WAAW,KAAK;EACtB,MAAM,gBAAgB,SAAS,WAAW;EAC1C,MAAM,cAAc,SAAS,WAAW;EACxC,MAAM,gBAAgB,IAAI,aAAa,IAAI,cAAc,KAAK;EAC9D,KAAK,IAAI,IAAI,GAAG,IAAI,GAAG,IAAI,cAAc,OAAO,IAAI,GAAG,KAAK,KAAK,GAAG;GAClE,OAAO,oBAAoB,eAAe,CAAC;GAC3C,KAAK,oBAAoB,aAAa,CAAC;GACvC,cAAc,KAAK,MAAM,IAAI,IAAI,cAAc,IAAI;GACnD,cAAc,IAAI,KAAK,cAAc,KAAK,OAAO,WAAW,IAAI;EAClE;EACA,MAAM,yBAAyB,IAAI,2BAA2B,eAAe,GAAG,CAAC;EACjF,SAAS,aAAa,yBAAyB,IAAI,2BAA2B,wBAAwB,GAAG,CAAC,CAAC;EAC3G,SAAS,aAAa,uBAAuB,IAAI,2BAA2B,wBAAwB,GAAG,CAAC,CAAC;EACzG,OAAO;CACT;CACA,QAAQ,WAAW,YAAY;EAC7B,MAAM,aAAa,KAAK,SAAS;EACjC,MAAM,SAAS,UAAU;EACzB,IAAI,WAAW,QAAQ,CAAC,YACtB,QAAQ,MACN,iIACF;EAEF,MAAM,YAAY,UAAU,OAAO,UAAU,KAAK,IAAI,UAAU,OAAO,MAAM,aAAa,IAAI;EAC9F,OAAO,UAAU;EACjB,MAAM,cAAc,KAAK;EACzB,MAAM,WAAW,KAAK;EACtB,MAAM,WAAW,KAAK;EACtB,aAAa,SAAS,YAAY;EAClC,IAAI,SAAS,mBAAmB,MAC9B,SAAS,sBAAsB;EAEjC,QAAQ,KAAK,SAAS,cAAc,EAAE,aAAa,WAAW;EAC9D,IAAI;EACJ,IAAI,YACF,eAAe,aAAa;OAG5B,eAAe,uBAAuB,QADb,KAAK,IAAI,OAAO,MAAM,QAAQ,gBAAgB,KAAK,MAAM,CACrB,GAAG,SAAS,UAAU;EAErF,QAAQ,UAAU;EAClB,IAAI,KAAK,iBAAiB,OAAO,MAAM,OACrC;EAEF,IAAI,SAAS,gBAAgB,MAC3B,SAAS,mBAAmB;EAE9B,KAAK,KAAK,SAAS,WAAW,EAAE,aAAa,WAAW;EACxD,IAAI;EACJ,IAAI,YACF,YAAY,aAAa;OAGzB,YAAY,uBAAuB,QADb,KAAK,IAAI,OAAO,MAAM,KAAK,gBAAgB,KAAK,MAAM,CACrB,GAAG,SAAS,UAAU;EAE/E,KAAK,eAAe,SAAS;EAC7B,IAAI,KAAK,cAAc,IAAI,MAAM,OAC/B;EAEF,IAAI,YACF,kBAAkB,MAAM,UAAU;OAElC,mBAAmB,MAAM,QAAQ,UAAU;CAE/C;CACA,eAAe,UAAU;EACvB,MAAM,WAAW,KAAK,SAAS;EAC/B,IAAI,YAAY,SAAS,YAAY;GACnC,SAAS,YAAY,SAAS;GAC9B,KAAK,SAAS,SAAS,WAAW,MAAM,IAAI,UAAU,GAAG,UAAU,CAAC;EACtE;CACF;AACF;;;AClNA,IAAM,QAAN,cAAoB,cAAc;CAChC,YAAY,WAAW,IAAI,aAAa,GAAG,WAAW,IAAI,aAAa,EAAE,OAAO,KAAK,OAAO,IAAI,SAAS,CAAC,GAAG;EAC3G,MAAM,UAAU,QAAQ;EACxB,KAAK,UAAU;EACf,KAAK,OAAO;CACd;AACF;;;ACRA,IAAM,mBAAN,cAA+B,KAAK;CAClC,YAAY,YAAY,MAAM;EAC5B,MAAM,WAAW,IAAI,eAAe;GAClC,MAAM;GACN,UAAU;IACR,IAAI,EAAE,OAAO,WAAW,GAAG,aAAa;IAExC,WAAW,EAAE,OAAO,WAAW,UAAU;GAC3C;GACA,cAAc;IACZ;IACA;IACA;IACA;IACA;GACF,EAAE,KAAK,IAAI;GACX,gBAAgB;IACd;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;GACF,EAAE,KAAK,IAAI;EACb,CAAC;EACD,MAAM,WAAW,IAAI,eAAe,GAAG,IAAI,EAAE;EAC7C,MAAM,UAAU,QAAQ;EACxB,KAAK,aAAa;EAClB,KAAK,OAAO;EACZ,KAAK,OAAO;EACZ,KAAK,eAAe;CACtB;CACA,UAAU;EACR,KAAK,SAAS,QAAQ;EACtB,KAAK,SAAS,QAAQ;CACxB;CACA,iBAAiB;EACf,KAAK,SAAS,KAAK,KAAK,WAAW,QAAQ;EAC3C,KAAK,MAAM,IAAI,GAAG,GAAG,CAAC,EAAE,eAAe,KAAK,IAAI;EAChD,KAAK,SAAS,SAAS,UAAU,QAAQ,KAAK,WAAW;CAC3D;AACF;;;ACrEA,IAAI,YAAY,OAAO;AACvB,IAAI,mBAAmB,KAAK,KAAK,UAAU,OAAO,MAAM,UAAU,KAAK,KAAK;CAAE,YAAY;CAAM,cAAc;CAAM,UAAU;CAAM;AAAM,CAAC,IAAI,IAAI,OAAO;AAC1J,IAAI,iBAAiB,KAAK,KAAK,UAAU;CACvC,gBAAgB,KAAK,OAAO,QAAQ,WAAW,MAAM,KAAK,KAAK,KAAK;CACpE,OAAO;AACT;AAEA,IAAM,qBAAqB,IAAI,SAAS;AACxC,IAAM,qBAAqB,IAAI,QAAQ;AACvC,IAAM,kBAAN,cAA8B,SAAS;CACrC,YAAY,WAAW,0BAA0B,IAAI;EACnD,MAAM;EACN,cAAc,MAAM,WAAW;EAC/B,cAAc,MAAM,MAAM;EAC1B,cAAc,MAAM,QAAQ;EAC5B,cAAc,MAAM,MAAM;EAC1B,cAAc,MAAM,KAAK;EACzB,cAAc,MAAM,WAAW;EAC/B,cAAc,MAAM,cAAc;EAClC,cAAc,MAAM,WAAW;EAC/B,cAAc,MAAM,UAAU;GAC5B,MAAM;GACN,KAAK;GACL,cAAc;GACd,WAAW;GACX,QAAQ,CAAC,QAAQ,QAAQ;EAC3B,CAAC;EACD,cAAc,MAAM,cAAc,WAAW;GAC3C,MAAM,UAAU;IACd,GAAG,KAAK;IACR,GAAG;GACL;GACA,KAAK,KAAK,SAAS,MAAM,IAAI,QAAQ,IAAI;GACzC,KAAK,IAAI,SAAS,MAAM,IAAI,QAAQ,GAAG;GACvC,KAAK,UAAU,SAAS,MAAM,IAAI,QAAQ,SAAS;GACnD,KAAK,aAAa,SAAS,MAAM,IAAI,QAAQ,YAAY;EAC3D,CAAC;EACD,cAAc,MAAM,gBAAgB;GAClC,IAAI;GACJ,MAAM,SAAS,KAAK,UAAU,IAAI;GAClC,MAAM,YAAY,KAAK,UAAU,IAAI;GACrC,KAAK,OAAO,SAAS,KAAK,MAAM;GAChC,KAAK,KAAK,SAAS,KAAK,MAAM,EAAE,IAAI,UAAU,MAAM,EAAE,eAAe,KAAK,UAAU,IAAI,CAAC;GACzF,KAAK,IAAI,SAAS,KAAK,MAAM,EAAE,IAAI,UAAU,MAAM,EAAE,eAAe,KAAK,UAAU,GAAG,CAAC;GACvF,KAAK,IAAI,OAAO,MAAM;GACtB,KAAK,KAAK,OAAO,MAAM;GACvB,IAAI,MAAM,KAAK,UAAU,SAAS,aAAa,UAAU;GACzD,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,SAAS,QAAQ,GAAG,GAAG,KAAK,IAAI,SAAS,QAAQ,CAAC,CAAC;GACzE,IAAI,cAAc;GAClB,MAAM,KAAK,aAAa,SAAS,aAAa,UAAU;GACxD,IAAI,IAAI,CAAC,GAAG,OAAO,QAAQ,GAAG,GAAG,KAAK,KAAK,SAAS,QAAQ,CAAC,CAAC;GAC9D,IAAI,cAAc;GAClB,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,yBAAyB,KAAK;IACrD,MAAM,OAAO,KAAK,KAAK,SAAS,OAAO,KAAK,IAAI,GAAG;IACnD,IAAI,KAAK;KACP,MAAM,EAAE,UAAU;KAClB,GAAG,SAAS,KAAK,KAAK;KACtB,GAAG,MAAM,UAAU,CAAC;IACtB,OACE,GAAG,MAAM,UAAU,CAAC;IAEtB,GAAG,aAAa;IAChB,KAAK,UAAU,YAAY,GAAG,GAAG,MAAM;GACzC;GACA,KAAK,UAAU,eAAe,cAAc;GAC5C,KAAK,OAAO,SAAS,MAAM,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,OAAO,OAAO,KAAK,KAAK,OAAO,OAAO,EAAE;EACrG,CAAC;EACD,cAAc,MAAM,iBAAiB;GACnC,KAAK,OAAO,SAAS,QAAQ;GAC7B,KAAK,OAAO,SAAS,QAAQ;GAC7B,KAAK,KAAK,SAAS,QAAQ;GAC3B,KAAK,KAAK,SAAS,QAAQ;GAC3B,KAAK,IAAI,SAAS,QAAQ;GAC1B,KAAK,IAAI,SAAS,QAAQ;GAC1B,KAAK,UAAU,SAAS,QAAQ;GAChC,KAAK,UAAU,SAAS,QAAQ;GAChC,KAAK,aAAa,SAAS,QAAQ;GACnC,KAAK,aAAa,SAAS,QAAQ;GACnC,KAAK,UAAU,QAAQ;EACzB,CAAC;EACD,KAAK,0BAA0B;EAC/B,KAAK,YAAY;EACjB,KAAK,OAAO,CAAC;EACb,KAAK,SAAS,IAAI,KAAK,IAAI,eAAe,KAAM,EAAE,GAAG,IAAI,kBAAkB,CAAC;EAC5E,KAAK,OAAO,OAAO;EACnB,KAAK,OAAO,gBAAgB;EAC5B,MAAM,OAAO;EACb,IAAI,WAAW,IAAI,eAAe;EAClC,SAAS,aAAa,YAAY,IAAI,uBAAuB;GAC3D;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;GACA;EACF,GAAG,CAAC,CAAC;EACL,KAAK,OAAO,IAAI,KAAK,UAAU,IAAI,kBAAkB,CAAC;EACtD,KAAK,KAAK,OAAO;EACjB,KAAK,KAAK,gBAAgB;EAC1B,KAAK,MAAM,IAAI,KAAK,UAAU,IAAI,kBAAkB,CAAC;EACrD,KAAK,IAAI,OAAO;EAChB,KAAK,IAAI,gBAAgB;EACzB,KAAK,YAAY,IAAI,KAAK,IAAI,eAAe,GAAG,IAAI,kBAAkB,CAAC;EACvE,KAAK,UAAU,OAAO;EACtB,KAAK,UAAU,gBAAgB;EAC/B,KAAK,UAAU,SAAS,cAAc,CAAC,IAAI,EAAE,CAAC;EAC9C,KAAK,eAAe,IAAI,KAAK,KAAK,UAAU,SAAS,MAAM,GAAG,IAAI,kBAAkB,CAAC;EACrF,KAAK,aAAa,OAAO;EACzB,KAAK,aAAa,gBAAgB;EAClC,KAAK,YAAY,IAAI,cAAc,IAAI,eAAe,GAAI,GAAG,IAAI,kBAAkB,GAAG,KAAK,uBAAuB;EAClH,KAAK,UAAU,OAAO;EACtB,KAAK,UAAU,gBAAgB;EAC/B,KAAK,IAAI,KAAK,SAAS;EACvB,KAAK,IAAI,KAAK,YAAY;EAC1B,KAAK,IAAI,KAAK,IAAI;EAClB,KAAK,IAAI,KAAK,GAAG;EACjB,KAAK,IAAI,KAAK,MAAM;EACpB,KAAK,IAAI,KAAK,SAAS;EACvB,KAAK,UAAU;CACjB;AACF;;;AChIA,IAAMC,wBAAsB,IAAI,QAAQ;AACxC,IAAMC,wBAAsB,IAAI,QAAQ;AACxC,IAAM,uBAAN,cAAmC,aAAa;CAC9C,YAAY,QAAQ,OAAO,GAAG,QAAQ,OAAO;EAC3C,MAAM,WAAW,IAAI,eAAe;EACpC,MAAM,YAAY,OAAO,SAAS,WAAW,QAAQ;EACrD,MAAM,YAAY,IAAI,uBAAuB,YAAY,IAAI,GAAG,CAAC;EACjE,SAAS,aAAa,YAAY,SAAS;EAC3C,MAAM,UAAU,IAAI,kBAAkB;GAAE;GAAO,YAAY;EAAM,CAAC,CAAC;EACnE,KAAK,SAAS;EACd,KAAK,OAAO;EACZ,KAAK,OAAO;EACZ,KAAK,mBAAmB;EACxB,KAAK,OAAO;CACd;CACA,SAAS;EACP,KAAK,OAAO,kBAAkB,IAAI;EAClC,MAAM,cAAc,KAAK,OAAO;EAChC,MAAM,WAAW,KAAK,SAAS,WAAW;EAC1C,MAAM,cAAc,KAAK,OAAO;EAChC,MAAM,SAAS,YAAY,WAAW;EACtC,MAAM,SAAS,YAAY,WAAW;EACtC,IAAI,MAAM;EACV,KAAK,IAAI,IAAI,GAAG,KAAK,OAAO,OAAO,IAAI,IAAI,KAAK;GAC9C,MAAI,oBAAoB,QAAQ,CAAC,EAAE,aAAa,WAAW;GAC3D,MAAI,oBAAoB,QAAQ,CAAC;GACjC,MAAI,mBAAmB,WAAW,EAAE,eAAe,KAAK,IAAI,EAAE,IAAID,KAAG;GACrE,SAAS,OAAO,KAAKA,MAAI,GAAGA,MAAI,GAAGA,MAAI,CAAC;GACxC,MAAM,MAAM;GACZ,SAAS,OAAO,KAAKC,MAAI,GAAGA,MAAI,GAAGA,MAAI,CAAC;GACxC,MAAM,MAAM;EACd;EACA,SAAS,cAAc;CACzB;CACA,UAAU;EACR,KAAK,SAAS,QAAQ;EACtB,KAAK,SAAS,QAAQ;CACxB;AACF;;;ACtCA,IAAM,wBAAN,cAAoC,KAAK;CACvC,YAAY,OAAO,QAAQ,GAAG,sBAAsB,IAAI,sBAAsB,GAAG;EAC/E,MAAM,WAAW,IAAI,eAAe;EACpC,MAAM,YAAY,sBAAsB,sBAAsB;EAC9D,MAAM,YAAY,IAAI,cAAc,YAAY,IAAI,KAAK,CAAC;EAC1D,SAAS,aAAa,YAAY,IAAI,gBAAgB,WAAW,CAAC,CAAC;EACnE,MAAM,qBAAqB,IAAI,kBAAkB,EAAE,OAAO,MAAM,CAAC;EACjE,MAAM,qBAAqB,IAAI,kBAAkB,EAAE,OAAO,SAAS,CAAC;EACpE,MAAM,UAAU,CAAC,oBAAoB,kBAAkB,CAAC;EACxD,KAAK,OAAO;EACZ,KAAK,QAAQ;EACb,KAAK,QAAQ;EACb,KAAK,sBAAsB;EAC3B,KAAK,sBAAsB;EAC3B,KAAK,OAAO;CACd;CACA,SAAS;EACP,MAAM,QAAQ,KAAK;EACnB,MAAM,QAAQ,KAAK;EACnB,MAAM,sBAAsB,KAAK;EACjC,MAAM,sBAAsB,KAAK;EACjC,MAAM,iBAAiB,UAAU,SAAS,MAAM,OAAO,cAAc;EACrE,MAAM,iBAAiB,UAAU,SAAS,MAAM,OAAO,cAAc;EACrE,MAAM,qBAAqB,iBAAiB;EAC5C,MAAM,qBAAqB,iBAAiB;EAC5C,IAAI,QAAQ;EACZ,IAAI,QAAQ;EACZ,IAAI,GAAG;EACP,MAAM,WAAW,KAAK;EACtB,MAAM,oBAAoB,SAAS,WAAW;EAC9C,SAAS,YAAY;EACrB,SAAS,gBAAgB,MAAM,IAAI,WAAW,eAAe;GAC3D,MAAM,QAAQ,KAAK,QAAQ;GAC3B,kBAAkB,OAAO,OAAO,GAAG,GAAG,CAAC;GACvC;GACA,KAAK,IAAI,MAAM,IAAI,IAAI,KAAK,MAAM;IAChC,SAAS,QAAQ;IACjB,kBAAkB,OAAO,QAAQ,KAAK,IAAI,CAAC,IAAI,OAAO,GAAG,KAAK,IAAI,CAAC,IAAI,KAAK;IAC5E,kBAAkB,OAChB,SAAS,GACT,KAAK,IAAI,KAAK,IAAI,IAAI,MAAM,EAAE,CAAC,IAAI,OACnC,GACA,KAAK,IAAI,KAAK,IAAI,IAAI,MAAM,EAAE,CAAC,IAAI,KACrC;IACA,kBAAkB,OAAO,SAAS,GAAG,GAAG,GAAG,CAAC;IAC5C,SAAS;GACX;GACA,SAAS,SAAS,OAAO,OAAO,aAAa;GAC7C,SAAS;GACT,QAAQ;EACV;EACA,gBAAgB,CAAC,oBAAoB,CAAC,oBAAoB,qBAAqB,CAAC;EAChF,gBAAgB,CAAC,oBAAoB,oBAAoB,qBAAqB,CAAC;EAC/E,gBAAgB,oBAAoB,oBAAoB,qBAAqB,CAAC;EAC9E,kBAAkB,cAAc;EAChC,IAAI,mBAAmB,gBACrB,KAAK,SAAS,GAAG,UAAU;CAC/B;CACA,UAAU;EACR,KAAK,SAAS,QAAQ;EACtB,KAAK,SAAS,GAAG,QAAQ;EACzB,KAAK,SAAS,GAAG,QAAQ;CAC3B;AACF;;;AC/DA,IAAM,sBAAsB,IAAI,QAAQ;AACxC,IAAM,sBAAsB,IAAI,QAAQ;AACxC,IAAM,gCAAgC,IAAI,QAAQ;AAClD,IAAM,sBAAN,cAAkC,aAAa;CAC7C,YAAY,QAAQ,OAAO,GAAG,QAAQ,UAAU;EAC9C,MAAM,WAAW,IAAI,eAAe;EACpC,MAAM,WAAW,OAAO,SAAS,WAAW,OAAO;EACnD,MAAM,YAAY,IAAI,uBAAuB,WAAW,IAAI,GAAG,CAAC;EAChE,SAAS,aAAa,YAAY,SAAS;EAC3C,MAAM,UAAU,IAAI,kBAAkB;GAAE;GAAO,YAAY;EAAM,CAAC,CAAC;EACnE,KAAK,SAAS;EACd,KAAK,OAAO;EACZ,KAAK,OAAO;EACZ,KAAK,mBAAmB;EACxB,KAAK,OAAO;CACd;CACA,SAAS;EACP,KAAK,OAAO,kBAAkB,IAAI;EAClC,cAAc,gBAAgB,KAAK,OAAO,WAAW;EACrD,MAAM,cAAc,KAAK,OAAO;EAChC,MAAM,WAAW,KAAK,SAAS,WAAW;EAC1C,MAAM,cAAc,KAAK,OAAO;EAChC,IAAI,aAAa;GACf,MAAM,SAAS,YAAY,WAAW;GACtC,MAAM,UAAU,YAAY,WAAW;GACvC,IAAI,MAAM;GACV,KAAK,IAAI,IAAI,GAAG,KAAK,OAAO,OAAO,IAAI,IAAI,KAAK;IAC9C,IAAI,oBAAoB,QAAQ,CAAC,EAAE,aAAa,WAAW;IAC3D,IAAI,oBAAoB,SAAS,CAAC;IAClC,IAAI,aAAa,aAAa,EAAE,UAAU,EAAE,eAAe,KAAK,IAAI,EAAE,IAAI,GAAG;IAC7E,SAAS,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACxC,MAAM,MAAM;IACZ,SAAS,OAAO,KAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC;IACxC,MAAM,MAAM;GACd;EACF;EACA,SAAS,cAAc;CACzB;CACA,UAAU;EACR,KAAK,SAAS,QAAQ;EACtB,KAAK,SAAS,QAAQ;CACxB;AACF;;;AC1CA,IAAM,sBAAN,cAAkC,KAAK;CACrC,YAAY,OAAO,OAAO;EACxB,MAAM,YAAY;GAAC;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAI;GAAI;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;EAAC;EAClE,MAAM,WAAW,IAAI,eAAe;EACpC,SAAS,aAAa,YAAY,IAAI,uBAAuB,WAAW,CAAC,CAAC;EAC1E,SAAS,sBAAsB;EAC/B,MAAM,WAAW,IAAI,kBAAkB,EAAE,KAAK,MAAM,CAAC;EACrD,MAAM,UAAU,QAAQ;EACxB,KAAK,QAAQ;EACb,KAAK,QAAQ;EACb,KAAK,OAAO;EACZ,MAAM,aAAa;GAAC;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAI;GAAI;GAAG;GAAG;GAAG;GAAG;GAAI;GAAI;GAAG;GAAG;GAAI;EAAC;EAC9E,MAAM,YAAY,IAAI,eAAe;EACrC,UAAU,aAAa,YAAY,IAAI,uBAAuB,YAAY,CAAC,CAAC;EAC5E,UAAU,sBAAsB;EAChC,KAAK,IAAI,IAAI,KAAK,WAAW,IAAI,kBAAkB;GAAE,MAAA;GAAgB,KAAK;EAAM,CAAC,CAAC,CAAC;CACrF;CACA,oBAAoB;EAClB,KAAK,MAAM,IAAI,KAAM,KAAK,MAAM,OAAO,KAAM,KAAK,MAAM,QAAQ,CAAC;EACjE,IAAI,KAAK,UAAU,KAAK,GAAG;GACzB,KAAK,SAAS,MAAM,IAAI,KAAK,KAAK;GAClC,KAAK,SAAS,GAAG,SAAS,MAAM,IAAI,KAAK,KAAK;EAChD,OAAO;GACL,KAAK,SAAS,MAAM,KAAK,KAAK,MAAM,KAAK,EAAE,eAAe,KAAK,MAAM,SAAS;GAC9E,MAAM,IAAI,KAAK,SAAS;GACxB,MAAM,MAAM,KAAK,IAAI,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;GAClC,IAAI,MAAM,GACR,EAAE,eAAe,IAAI,GAAG;GAC1B,KAAK,SAAS,GAAG,SAAS,MAAM,KAAK,KAAK,SAAS,KAAK;EAC1D;EACA,KAAK,YAAY,gBAAgB,KAAK,MAAM,WAAW,EAAE,MAAM,KAAK,KAAK,EAAE,aAAa,KAAK,MAAM,WAAW;EAC9G,KAAK,SAAS,GAAG,YAAY,KAAK,KAAK,WAAW;CACpD;CACA,UAAU;EACR,KAAK,SAAS,QAAQ;EACtB,KAAK,SAAS,QAAQ;EACtB,KAAK,SAAS,GAAG,SAAS,QAAQ;EAClC,KAAK,SAAS,GAAG,SAAS,QAAQ;CACpC;AACF;;;ACvCA,IAAM,2BAA2B,EAC/B,OAAO;CACL,MAAM,YAAY;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,MAAM,YAAY;EAChB;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF;CACA,MAAM,cAAc,IAAI,aAAa,SAAS;CAC9C,MAAM,cAAc,IAAI,aAAa,SAAS;CAC9C,YAAY,cAAc,IAAI,YAC5B,aACA,IACA,IACA,YACA,WAAA,KAEA,qBACA,qBACA,cACA,eACA,CACF;CACA,YAAY,cAAc,IAAI,YAC5B,aACA,IACA,IACA,YACA,WAAA,KAEA,qBACA,qBACA,cACA,eACA,CACF;CACA,YAAY,YAAY,cAAc;CACtC,YAAY,YAAY,cAAc;CACtC,MAAM,aAAa,IAAI,YAAY,UAAU,MAAM;CACnD,UAAU,QAAQ,SAAS,GAAG,OAAO;EACnC,WAAW,SAAS,UAAU,YAAY,CAAC;CAC7C,CAAC;CACD,MAAM,aAAa,IAAI,YAAY,UAAU,MAAM;CACnD,UAAU,QAAQ,SAAS,GAAG,OAAO;EACnC,WAAW,SAAS,UAAU,YAAY,CAAC;CAC7C,CAAC;CACD,YAAY,aAAa,IAAI,YAC3B,YACA,IACA,IACA,YACA,eAAA,KAEA,qBACA,qBACA,cACA,eACA,CACF;CACA,YAAY,aAAa,IAAI,YAC3B,YACA,IACA,IACA,YACA,eAAA,KAEA,qBACA,qBACA,cACA,eACA,CACF;CACA,YAAY,WAAW,cAAc;CACrC,YAAY,WAAW,cAAc;AACvC,EACF;;;ACzkgCA,IAAM,sBAAsB;CAE1B,gBAAgB,aAAa;EAC3B,IAAI,c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KAAK,IAAI,QAAQ,CAAC;EACpD,KAAK,gBAAgB;CACvB;CACA,QAAQ;EACN,OAAO,IAAI,KAAK,YAAY,EAAE,KAAK,IAAI;CACzC;CACA,KAAK,QAAQ;EACX,KAAK,IAAI,OAAO;EAChB,KAAK,IAAI,OAAO;EAChB,KAAK,IAAI,OAAO;EAChB,KAAK,OAAO,KAAK,OAAO,MAAM;EAC9B,KAAK,MAAM,KAAK,OAAO,KAAK;EAC5B,KAAK,gBAAgB,OAAO;EAC5B,KAAK,IAAI,IAAI,GAAG,KAAK,OAAO,cAAc,QAAQ,IAAI,IAAI,KACxD,KAAK,cAAc,KAAK,OAAO,cAAc,GAAG,MAAM;EAExD,KAAK,IAAI,IAAI,GAAG,KAAK,OAAO,aAAa,QAAQ,IAAI,IAAI,KACvD,KAAK,aAAa,KAAK,OAAO,aAAa,GAAG,MAAM;EAEtD,OAAO;CACT;AACF;;;AC78BA,IAAI;AACJ,IAAM,uBAAuB;CAC3B,IAAI,WACF,OAAO;CACT,MAAM,YAAY;CAClB,MAAM,YAAY;CAClB,MAAM,WAAW,IAAI,WAAW;EAC9B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CACD,MAAM,WAAW,IAAI,WAAW;EAC9B;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;CACF,CAAC;CACD,IAAI,OAAO,gBAAgB,UACzB,OAAO,EACL,WAAW,MACb;CAEF,IAAI,OAAO;CACX,IAAI,YAAY,SAAS,QAAQ,GAC/B,OAAO;CAET,IAAI;CACJ,MAAM,UAAU,YAAY,YAAY,OAAO,IAAI,GAAG,CAAC,CAAC,EAAE,MAAM,WAAW;EACzE,WAAW,OAAO;EAClB,SAAS,QAAQ,kBAAkB;CACrC,CAAC;CACD,SAAS,OAAO,MAAM;EACpB,MAAM,SAAS,IAAI,WAAW,KAAK,MAAM;EACzC,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;GACpC,MAAM,KAAK,KAAK,WAAW,CAAC;GAC5B,OAAO,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK;EACxF;EACA,IAAI,QAAQ;EACZ,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GACjC,OAAO,WAAW,OAAO,KAAK,KAAK,SAAS,OAAO,OAAO,OAAO,KAAK,MAAM,KAAK,OAAO,EAAE;EAE5F,OAAO,OAAO,OAAO,MAAM,GAAG,KAAK;CACrC;CACA,SAAS,OAAO,KAAK,QAAQ,OAAO,MAAM,QAAQ,QAAQ;EACxD,MAAM,OAAO,SAAS,QAAQ;EAC9B,MAAM,SAAS,QAAQ,IAAI;EAC3B,MAAM,KAAK,KAAK,SAAS,IAAI;EAC7B,MAAM,KAAK,KAAK,OAAO,MAAM;EAC7B,MAAM,OAAO,IAAI,WAAW,SAAS,QAAQ,OAAO,MAAM;EAC1D,KAAK,IAAI,QAAQ,EAAE;EACnB,MAAM,MAAM,IAAI,IAAI,OAAO,MAAM,IAAI,OAAO,MAAM;EAClD,IAAI,QAAQ,KAAK,QACf,OAAO,IAAI,QAAQ,IAAI;EAEzB,OAAO,IAAI,KAAK,SAAS,IAAI,KAAK,QAAQ,IAAI,CAAC;EAC/C,KAAK,KAAK,KAAK,CAAC,CAAC;EACjB,IAAI,QAAQ,GACV,MAAM,IAAI,MAAM,0BAA0B,KAAK;CAEnD;CACA,MAAM,UAAU;EAEd,GAAG;EACH,GAAG;EACH,GAAG;EACH,GAAG;EAEH,MAAM;EACN,YAAY;EACZ,YAAY;EACZ,aAAa;CACf;CACA,MAAM,WAAW;EAEf,GAAG;EACH,GAAG;EACH,GAAG;EAEH,YAAY;EACZ,WAAW;EACX,SAAS;CACX;CACA,YAAY;EACV,OAAO;EACP,WAAW;EACX,mBAAmB,QAAQ,OAAO,MAAM,QAAQ,QAAQ;GACtD,OACE,SAAS,QAAQ,4BACjB,QACA,OACA,MACA,QACA,SAAS,QAAQ,QAAQ,QAC3B;EACF;EACA,kBAAkB,QAAQ,OAAO,MAAM,QAAQ;GAC7C,OAAO,SAAS,QAAQ,2BAA2B,QAAQ,OAAO,MAAM,MAAM;EAChF;EACA,oBAAoB,QAAQ,OAAO,MAAM,QAAQ;GAC/C,OAAO,SAAS,QAAQ,6BAA6B,QAAQ,OAAO,MAAM,MAAM;EAClF;EACA,iBAAiB,QAAQ,OAAO,MAAM,QAAQ,MAAM,QAAQ;GAC1D,OACE,SAAS,QAAQ,SAAS,QAC1B,QACA,OACA,MACA,QACA,SAAS,QAAQ,QAAQ,QAC3B;EACF;CACF;CACA,OAAO;AACT"} \ No newline at end of file diff --git a/node_modules/.vite/deps/three-stdlib.js b/node_modules/.vite/deps/three-stdlib.js deleted file mode 100644 index c5b4d38b..00000000 --- a/node_modules/.vite/deps/three-stdlib.js +++ /dev/null @@ -1,2 +0,0 @@ -import { $ as TDSLoader, $a as CSS2DRenderer, $i as MarchingCubes, $n as MotionControllerConstants, $r as HalftonePass, $t as VerticalTiltShiftShader, A as Wireframe, Aa as mergeBufferGeometries, Ai as Capsule, An as ColorCorrectionShader, Ar as SAOShader, At as calcBSplineDerivatives, B as RGBMLoader, Ba as FlakesTexture, Bi as SkeletonUtils, Bn as TextGeometry, Br as SavePass, Bt as AsciiEffect, C as PositionalAudioHelper, Ca as TessellateModifier, Ci as STATE, Cn as GammaCorrectionShader, Co as HalfEdge, Cr as ClearMaskPass, Ct as NRRDLoader, D as Line2, Da as estimateBytesUsed, Di as Octree, Dn as FXAAShader, Do as MorphBlendMesh, Dr as SAOPass, Dt as FontLoader, E as LightProbeHelper, Ea as computeMorphedAttributes, Ei as Lut, En as FocusShader, Eo as MD2CharacterComplex, Er as AfterimageShader, Et as Font, F as LWOLoader, Fa as InstancedFlow, Fi as BokehShader2, Fn as ACESFilmicToneMappingShader, Fr as ToneMapShader, Ft as calcNURBSDerivatives, G as TiltLoader, Ga as RenderableLine, Gi as GroundProjectedEnv, Gn as RoundedBoxGeometry, Gr as OutlinePass, Gt as AmmoPhysics, H as PDBLoader, Ha as SVGRenderer, Hi as GeometryUtils, Hn as DecalGeometry, Hr as SSAOBlurShader, Ht as OutlineEffect, I as PCDLoader, Ia as getUniforms, Ii as GeometryCompressionUtils, In as CSMHelper, Ir as LuminosityShader, It as calcRationalCurveDerivatives, J as AMFLoader, Ja as RenderableVertex, Ji as ReflectorForSSRPass, Jn as XRHandModelFactory, Jr as FilmShader, Jt as InteractiveGroup, K as KTXLoader, Ka as RenderableObject, Ki as Water2, Kn as ParametricGeometries, Kr as CopyShader, Kt as SelectionBox, L as VOXData3DTexture, La as initSplineTexture, Li as PackedPhongMaterial, Ln as CSM, Lr as TexturePass, Lt as calcSurfacePoint, M as LineGeometry, Ma as toCreasedNormals, Mi as MeshSurfaceSampler, Mn as BlendShader, Mr as UnrealBloomPass, Mt as calcBasisFunctionDerivatives, N as LineSegmentsGeometry, Na as toTrianglesDrawMode, Ni as CinematicCamera, Nn as BleachBypassShader, Nr as LuminosityHighPassShader, Nt as calcBasisFunctions, O as LineSegments2, Oa as interleaveAttributes, Oi as ImprovedNoise, On as DOFMipMapShader, Oo as MD2Loader, Or as BlurShaderUtils, Ot as FBXLoader, P as PLYLoader, Pa as Flow, Pi as BokehDepthShader, Pn as BasicShader, Pr as AdaptiveToneMappingPass, Pt as calcKoverI, Q as LDrawLoader, Qa as CSS2DObject, Qi as SimplexNoise, Qn as MotionController, Qr as SMAAWeightsShader, Qt as VignetteShader, R as VOXLoader, Ra as modifyShader, Ri as ShadowMapViewer, Rn as CSMShader, Rr as BokehPass, Rt as findSpan, S as VertexNormalsHelper, Sa as GLTFExporter, Si as OrbitControlsExp, Sn as GodRaysGenerateShader, So as Face, Sr as EffectComposer, St as STLLoader, T as RaycasterHelper, Ta as SimplifyModifier, Ti as ColorMapKeywords, Tn as FreiChenShader, To as VertexNode, Tr as AfterimagePass, Tt as TGALoader, U as HDRCubeTextureLoader, Ua as Projector, Ui as UVsDebug, Un as DecalVertex, Ur as SSAODepthShader, Ut as PeppersGhostEffect, V as PRWMLoader, Va as SVGObject, Vi as RoughnessMipmapper, Vn as TeapotGeometry, Vr as SSAOPass, Vt as AnaglyphEffect, W as DRACOLoader, Wa as RenderableFace, Wi as SceneUtils, Wn as BoxLineGeometry, Wr as SSAOShader, Wt as ParallaxBarrierEffect, X as Rhino3dmLoader, Xa as CSS3DRenderer, Xi as LightningStorm, Xn as XREstimatedLight, Xr as SMAABlendShader, Xt as WaterRefractionShader, Y as OBJLoader, Ya as CSS3DObject, Yi as ReflectorRTT, Yn as XRHandPrimitiveModel, Yr as SMAAPass, Yt as HTMLMesh, Z as SVGLoader, Za as CSS3DSprite, Zi as LightningStrike, Zn as XRControllerModelFactory, Zr as SMAAEdgesShader, Zt as VolumeRenderShader1, _ as VivianiCurve, _a as MMDExporter, _i as TransformControlsGizmo, _n as HorizontalTiltShiftShader, _o as Gyroscope, _r as SSRBlurShader, _t as KMZLoader, a as DecoratedTorusKnot4a, aa as ShadowMesh, ai as ShaderPass, an as ToonShaderHatching, ao as getErrorMessage, ar as OculusHandModel, at as VTKLoader, b as RectAreaLightUniformsLib, ba as PLYExporter, bi as CameraControls, bn as GodRaysDepthMaskShader, bo as ConvexGeometry, br as DotScreenPass, bt as XLoader, c as DecoratedTorusKnot5c, ca as BatchedMesh, ci as FlyControls, cn as SobelOperatorShader, co as isWebGL2Available, cr as ARButton, ct as EXRLoader, d as HeartCurve, da as CCDIKHelper, di as OrbitControls, dn as PixelShader, do as RollerCoasterGeometry, dr as ConvolutionShader, dt as RGBELoader, ea as edgeTable, ei as HalftoneShader, en as VerticalBlurShader, eo as ProgressiveLightMap, er as fetchProfile, et as BasisTextureLoader, f as HelixCurve, fa as CCDIKSolver, fi as TrackballControls, fn as ParallaxShader, fo as RollerCoasterLiftersGeometry, fr as RenderPixelatedPass, ft as TTFLoader, g as TrefoilPolynomialKnot, ga as STLExporter, gi as TransformControls, gn as HueSaturationShader, go as MorphAnimMesh, gr as SSRPass, gt as VRMLoader, h as TrefoilKnot, ha as OBJExporter, hi as DragControls, hn as KaleidoShader, ho as TreesGeometry, hr as SSAARenderPass, ht as VRMLLoader, i as CinquefoilKnot, ia as LensflareElement, ii as LUTPass, in as ToonShaderDotted, io as MD2Character, ir as OculusHandPointerModel, it as LUT3dlLoader, j as LineMaterial, ja as mergeVertices, ji as OBB, jn as BrightnessContrastShader, jr as CubeTexturePass, jt as calcBSplinePoint, k as WireframeGeometry2, ka as mergeBufferAttributes, ki as ColorConverter, kn as ColorifyShader, kr as DepthLimitedBlurShader, kt as NURBSCurve, l as FigureEightPolynomialKnot, la as MMDAnimationHelper, li as ArcballControls, ln as SepiaShader, lo as isWebGLAvailable, lr as WaterPass, lt as MDDLoader, m as TorusKnot, ma as RoomEnvironment, mi as PointerLockControls, mn as MirrorShader, mo as SkyGeometry, mr as TAARenderPass, mt as KTX2Loader, n as Face3, na as Water, ni as DigitalGlitch, nn as ToonShader1, no as TubePainter, nr as VRButton, nt as PVRLoader, o as DecoratedTorusKnot4b, oa as Refractor, oi as FullScreenQuad, on as TechnicolorShader, oo as getWebGL2ErrorMessage, or as XRHandMeshModel, ot as XYZLoader, p as KnotCurve, pa as AnimationClipCreator, pi as DeviceOrientationControls, pn as NormalMapShader, po as RollerCoasterShadowGeometry, pr as RenderPass, pt as LottieLoader, q as MMDLoader, qa as RenderableSprite, qi as Sky, qn as ParametricGeometry, qr as FilmPass, qt as SelectionHelper, r as Geometry, ra as Lensflare, ri as ClearPass, rn as ToonShader2, ro as VolumeSlice, rr as createText, rt as DDSLoader, s as DecoratedTorusKnot5a, sa as Reflector, si as Pass, sn as SubsurfaceScatteringShader, so as getWebGLErrorMessage, sr as GLTFLoader, st as ThreeMFLoader, t as MeshoptDecoder, ta as triTable, ti as GlitchPass, tn as TriangleBlurShader, to as Volume, tr as fetchProfilesList, tt as GCodeLoader, u as GrannyKnot, ua as MMDPhysics, ui as MapControls, un as RGBShiftShader, uo as Timer, ur as BloomPass, ut as AssimpLoader, v as NURBSSurface, va as ColladaExporter, vi as TransformControlsPlane, vn as HorizontalBlurShader, vo as GPUComputationRenderer, vr as SSRDepthShader, vt as ColladaLoader, w as VertexTangentsHelper, wa as EdgeSplitModifier, wi as TrackballControlsExp, wn as FresnelShader, wo as VertexList, wr as MaskPass, wt as LUTCubeLoader, x as RectAreaLightHelper, xa as USDZExporter, xi as MapControlsExp, xn as GodRaysFakeSunShader, xo as ConvexHull, xr as DotScreenShader, xt as MTLLoader, y as LightProbeGenerator, ya as DRACOExporter, yi as FirstPersonControls, yn as GodRaysCombineShader, yo as ConvexObjectBreaker, yr as SSRShader, yt as BVHLoader, z as VOXMesh, za as updateSplineTexture, zi as UnpackDepthRGBAShader, zn as CSMFrustum, zr as BokehShader, zt as StereoEffect } from "./three-stdlib-BHZ1qH6e.js"; -export { ACESFilmicToneMappingShader, AMFLoader, ARButton, AdaptiveToneMappingPass, AfterimagePass, AfterimageShader, AmmoPhysics, AnaglyphEffect, AnimationClipCreator, ArcballControls, AsciiEffect, AssimpLoader, BVHLoader, BasicShader, BasisTextureLoader, BatchedMesh, BleachBypassShader, BlendShader, BloomPass, BlurShaderUtils, BokehDepthShader, BokehPass, BokehShader, BokehShader2, BoxLineGeometry, BrightnessContrastShader, CCDIKHelper, CCDIKSolver, CSM, CSMFrustum, CSMHelper, CSMShader, CSS2DObject, CSS2DRenderer, CSS3DObject, CSS3DRenderer, CSS3DSprite, CameraControls, Capsule, CinematicCamera, CinquefoilKnot, ClearMaskPass, ClearPass, ColladaExporter, ColladaLoader, ColorConverter, ColorCorrectionShader, ColorMapKeywords, ColorifyShader, ConvexGeometry, ConvexHull, ConvexObjectBreaker, ConvolutionShader, CopyShader, CubeTexturePass, DDSLoader, DOFMipMapShader, DRACOExporter, DRACOLoader, DecalGeometry, DecalVertex, DecoratedTorusKnot4a, DecoratedTorusKnot4b, DecoratedTorusKnot5a, DecoratedTorusKnot5c, DepthLimitedBlurShader, DeviceOrientationControls, DigitalGlitch, DotScreenPass, DotScreenShader, DragControls, EXRLoader, EdgeSplitModifier, EffectComposer, FBXLoader, FXAAShader, Face, Face3, FigureEightPolynomialKnot, FilmPass, FilmShader, FirstPersonControls, FlakesTexture, Flow, FlyControls, FocusShader, Font, FontLoader, FreiChenShader, FresnelShader, FullScreenQuad, GCodeLoader, GLTFExporter, GLTFLoader, GPUComputationRenderer, GammaCorrectionShader, Geometry, GeometryCompressionUtils, GeometryUtils, GlitchPass, GodRaysCombineShader, GodRaysDepthMaskShader, GodRaysFakeSunShader, GodRaysGenerateShader, GrannyKnot, GroundProjectedEnv, Gyroscope, HDRCubeTextureLoader, HTMLMesh, HalfEdge, HalftonePass, HalftoneShader, HeartCurve, HelixCurve, HorizontalBlurShader, HorizontalTiltShiftShader, HueSaturationShader, ImprovedNoise, InstancedFlow, InteractiveGroup, KMZLoader, KTX2Loader, KTXLoader, KaleidoShader, KnotCurve, LDrawLoader, LUT3dlLoader, LUTCubeLoader, LUTPass, LWOLoader, Lensflare, LensflareElement, LightProbeGenerator, LightProbeHelper, LightningStorm, LightningStrike, Line2, LineGeometry, LineMaterial, LineSegments2, LineSegmentsGeometry, LottieLoader, LuminosityHighPassShader, LuminosityShader, Lut, MD2Character, MD2CharacterComplex, MD2Loader, MDDLoader, MMDAnimationHelper, MMDExporter, MMDLoader, MMDPhysics, MTLLoader, MapControls, MapControlsExp, MarchingCubes, MaskPass, MeshSurfaceSampler, MeshoptDecoder, MirrorShader, MorphAnimMesh, MorphBlendMesh, MotionController, MotionControllerConstants, NRRDLoader, NURBSCurve, NURBSSurface, NormalMapShader, OBB, OBJExporter, OBJLoader, Octree, OculusHandModel, OculusHandPointerModel, OrbitControls, OrbitControlsExp, OutlineEffect, OutlinePass, PCDLoader, PDBLoader, PLYExporter, PLYLoader, PRWMLoader, PVRLoader, PackedPhongMaterial, ParallaxBarrierEffect, ParallaxShader, ParametricGeometries, ParametricGeometry, Pass, PeppersGhostEffect, PixelShader, PointerLockControls, PositionalAudioHelper, ProgressiveLightMap, Projector, RGBELoader, RGBMLoader, RGBShiftShader, RaycasterHelper, RectAreaLightHelper, RectAreaLightUniformsLib, Reflector, ReflectorForSSRPass, ReflectorRTT, Refractor, RenderPass, RenderPixelatedPass, RenderableFace, RenderableLine, RenderableObject, RenderableSprite, RenderableVertex, Rhino3dmLoader, RollerCoasterGeometry, RollerCoasterLiftersGeometry, RollerCoasterShadowGeometry, RoomEnvironment, RoughnessMipmapper, RoundedBoxGeometry, SAOPass, SAOShader, SMAABlendShader, SMAAEdgesShader, SMAAPass, SMAAWeightsShader, SSAARenderPass, SSAOBlurShader, SSAODepthShader, SSAOPass, SSAOShader, SSRBlurShader, SSRDepthShader, SSRPass, SSRShader, STATE, STLExporter, STLLoader, SVGLoader, SVGObject, SVGRenderer, SavePass, SceneUtils, SelectionBox, SelectionHelper, SepiaShader, ShaderPass, ShadowMapViewer, ShadowMesh, SimplexNoise, SimplifyModifier, SkeletonUtils, Sky, SkyGeometry, SobelOperatorShader, StereoEffect, SubsurfaceScatteringShader, TAARenderPass, TDSLoader, TGALoader, TTFLoader, TeapotGeometry, TechnicolorShader, TessellateModifier, TextGeometry as TextBufferGeometry, TextGeometry, TexturePass, ThreeMFLoader, TiltLoader, Timer, ToneMapShader, ToonShader1, ToonShader2, ToonShaderDotted, ToonShaderHatching, TorusKnot, TrackballControls, TrackballControlsExp, TransformControls, TransformControlsGizmo, TransformControlsPlane, TreesGeometry, TrefoilKnot, TrefoilPolynomialKnot, TriangleBlurShader, TubePainter, USDZExporter, UVsDebug, UnpackDepthRGBAShader, UnrealBloomPass, VOXData3DTexture, VOXLoader, VOXMesh, VRButton, VRMLLoader, VRMLoader, VTKLoader, VertexList, VertexNode, VertexNormalsHelper, VertexTangentsHelper, VerticalBlurShader, VerticalTiltShiftShader, VignetteShader, VivianiCurve, Volume, VolumeRenderShader1, VolumeSlice, Water, Water2, WaterPass, WaterRefractionShader, Wireframe, WireframeGeometry2, XLoader, XRControllerModelFactory, XREstimatedLight, XRHandMeshModel, XRHandModelFactory, XRHandPrimitiveModel, XYZLoader, calcBSplineDerivatives, calcBSplinePoint, calcBasisFunctionDerivatives, calcBasisFunctions, calcKoverI, calcNURBSDerivatives, calcRationalCurveDerivatives, calcSurfacePoint, computeMorphedAttributes, createText, edgeTable, estimateBytesUsed, fetchProfile, fetchProfilesList, findSpan, getErrorMessage, getUniforms, getWebGL2ErrorMessage, getWebGLErrorMessage, initSplineTexture, interleaveAttributes, isWebGL2Available, isWebGLAvailable, mergeBufferAttributes, mergeBufferGeometries, mergeVertices, modifyShader, toCreasedNormals, toTrianglesDrawMode, triTable, updateSplineTexture }; diff --git a/package-lock.json b/package-lock.json index 791a5d01..84ab1998 100644 --- a/package-lock.json +++ b/package-lock.json @@ -15,6 +15,7 @@ "cors": "^2.8.6", "dotenv": "^17.4.2", "express": "^5.2.1", + "helmet": "^8.2.0", "jsonwebtoken": "^9.0.3", "jspdf": "^4.2.1", "jspdf-autotable": "^5.0.8", @@ -2440,6 +2441,18 @@ "node": ">= 0.4" } }, + "node_modules/helmet": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/helmet/-/helmet-8.2.0.tgz", + "integrity": "sha512-DRgTIUgnWcJ62KyarxxziuqYxKGnR6Rgg19BlbucN/dpmJbl1XOit6qvoOX0ZT+HhWe5OUVhU/a1zpGyc1xA0Q==", + "license": "MIT", + "engines": { + "node": ">=18.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/EvanHahn" + } + }, "node_modules/hls.js": { "version": "1.6.16", "resolved": "https://registry.npmjs.org/hls.js/-/hls.js-1.6.16.tgz", diff --git a/package.json b/package.json index 9a0eea1f..7a9e01e9 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "cors": "^2.8.6", "dotenv": "^17.4.2", "express": "^5.2.1", + "helmet": "^8.2.0", "jsonwebtoken": "^9.0.3", "jspdf": "^4.2.1", "jspdf-autotable": "^5.0.8", diff --git a/public/manifest.json b/public/manifest.json new file mode 100644 index 00000000..ba2acce7 --- /dev/null +++ b/public/manifest.json @@ -0,0 +1,16 @@ +{ + "name": "Hydro Builder", + "short_name": "HydroBuilder", + "description": "3D Hydroponics System Designer & Fluid Simulator", + "start_url": "/", + "display": "standalone", + "background_color": "#18181b", + "theme_color": "#18181b", + "icons": [ + { + "src": "data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🌿</text></svg>", + "sizes": "192x192", + "type": "image/svg+xml" + } + ] +} diff --git a/public/robots.txt b/public/robots.txt new file mode 100644 index 00000000..eb665c89 --- /dev/null +++ b/public/robots.txt @@ -0,0 +1,4 @@ +User-agent: * +Allow: / + +Sitemap: https://hydro.thetempleofdoom.com/sitemap.xml diff --git a/public/sitemap.xml b/public/sitemap.xml new file mode 100644 index 00000000..a26a632e --- /dev/null +++ b/public/sitemap.xml @@ -0,0 +1,8 @@ +<?xml version="1.0" encoding="UTF-8"?> +<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> + <url> + <loc>https://hydro.thetempleofdoom.com/</loc> + <changefreq>weekly</changefreq> + <priority>1.0</priority> + </url> +</urlset> diff --git a/server/db.js b/server/db.js index 511624f6..9956c845 100644 --- a/server/db.js +++ b/server/db.js @@ -43,6 +43,9 @@ export const query = { // Initialize schema export async function initDb() { + // Enable WAL mode for high concurrency + await query.run('PRAGMA journal_mode = WAL;'); + // Users table await query.run(` CREATE TABLE IF NOT EXISTS users ( diff --git a/server/index.js b/server/index.js index b9a23285..3931f26e 100644 --- a/server/index.js +++ b/server/index.js @@ -1,5 +1,6 @@ import express from 'express'; import cors from 'cors'; +import helmet from 'helmet'; import { WebSocketServer } from 'ws'; import jwt from 'jsonwebtoken'; import bcrypt from 'bcryptjs'; @@ -23,6 +24,10 @@ initDb().catch((err) => { }); // Middleware configuration +app.use(helmet({ + contentSecurityPolicy: false, + crossOriginEmbedderPolicy: false, +})); app.use(cors()); // Stripe Webhook needs raw body, configure other routes to use express.json() @@ -392,7 +397,25 @@ const wss = new WebSocketServer({ server }); const rooms = new Map(); // projectRoom -> Set of ws clients +// Heartbeat to prevent memory leaks from dead connections +const interval = setInterval(() => { + wss.clients.forEach((ws) => { + if (ws.isAlive === false) return ws.terminate(); + ws.isAlive = false; + ws.ping(); + }); +}, 30000); + +wss.on('close', () => { + clearInterval(interval); +}); + wss.on('connection', (ws) => { + ws.isAlive = true; + ws.on('pong', () => { + ws.isAlive = true; + }); + let currentRoom = null; let userId = null; diff --git a/src/components/ErrorBoundary.tsx b/src/components/ErrorBoundary.tsx new file mode 100644 index 00000000..e849b0d3 --- /dev/null +++ b/src/components/ErrorBoundary.tsx @@ -0,0 +1,53 @@ +import React, { Component, ErrorInfo, ReactNode } from 'react'; + +interface Props { + children?: ReactNode; +} + +interface State { + hasError: boolean; + error?: Error; +} + +export class ErrorBoundary extends Component<Props, State> { + public state: State = { + hasError: false + }; + + public static getDerivedStateFromError(error: Error): State { + return { hasError: true, error }; + } + + public componentDidCatch(error: Error, errorInfo: ErrorInfo) { + console.error('Uncaught error:', error, errorInfo); + } + + public render() { + if (this.state.hasError) { + return ( + <div className="min-h-screen bg-zinc-950 flex items-center justify-center p-4"> + <div className="bg-zinc-900 border border-zinc-800 p-8 rounded-xl max-w-lg w-full shadow-2xl"> + <h1 className="text-2xl font-bold text-rose-500 mb-4 flex items-center gap-3"> + <span className="text-3xl">⚠️</span> System Crash Detected + </h1> + <p className="text-zinc-400 mb-6 leading-relaxed"> + The physics engine or rendering canvas encountered an unrecoverable error. + We've caught the crash to prevent data loss. + </p> + <div className="bg-zinc-950 p-4 rounded-md mb-6 overflow-auto text-xs font-mono text-zinc-500 border border-zinc-800"> + {this.state.error?.message || "Unknown Error"} + </div> + <button + onClick={() => window.location.reload()} + className="w-full py-3 bg-indigo-600 hover:bg-indigo-500 text-white rounded-lg font-medium transition-colors" + > + Restart Application + </button> + </div> + </div> + ); + } + + return this.props.children; + } +} diff --git a/src/components/PropertiesPanel.tsx b/src/components/PropertiesPanel.tsx index 073e5d3a..51baf40e 100644 --- a/src/components/PropertiesPanel.tsx +++ b/src/components/PropertiesPanel.tsx @@ -457,6 +457,18 @@ function GrowTentCard({ part }: { part: PlacedPart }) { </div> <div className="text-[10px] text-zinc-400 space-y-1 pt-1.5 border-t border-zinc-800/60 font-mono"> + <div className="flex justify-between"> + <span>Air Exchange:</span> + <span className="text-zinc-200">{metrics.airChangesPerMinute.toFixed(2)} /min</span> + </div> + <div className="flex justify-between"> + <span>Fresh Air:</span> + <span className="text-zinc-200">{metrics.netFreshAirCfm.toFixed(0)} CFM</span> + </div> + <div className="flex justify-between"> + <span>Intake / Exhaust:</span> + <span className="text-zinc-200">{metrics.intakeCfm.toFixed(0)} / {metrics.exhaustCfm.toFixed(0)} CFM</span> + </div> <div className="flex justify-between"> <span>Est. Temp:</span> <span className="text-zinc-200">{metrics.roomTempF.toFixed(1)}°F</span> @@ -515,7 +527,7 @@ function ReservoirCard({ part }: { part: PlacedPart }) { </span> </div> - <div className="grid grid-cols-2 gap-2"> + <div className="grid grid-cols-3 gap-2"> <div className="rounded-md bg-zinc-900/80 p-2 text-center"> <div className="text-[9px] text-zinc-500 font-bold uppercase">Runtime</div> <div className={`mt-0.5 text-xs font-bold ${runtime?.empty ? 'text-rose-400' : runtime?.minutesRemaining !== null ? 'text-amber-400' : 'text-emerald-400'}`}> @@ -545,6 +557,14 @@ function ReservoirCard({ part }: { part: PlacedPart }) { </div> <div className="text-[8px] text-zinc-600">Gallons</div> </div> + + <div className="rounded-md bg-zinc-900/80 p-2 text-center"> + <div className="text-[9px] text-zinc-500 font-bold uppercase">Line Hold</div> + <div className="mt-0.5 text-xs font-bold text-zinc-200"> + {runtime ? runtime.gallonsHeldInSystem.toFixed(2) : '0.00'} + </div> + <div className="text-[8px] text-zinc-600">Gal in plumbing</div> + </div> </div> {/* Water Stats Grid */} diff --git a/src/components/StatusPanel.tsx b/src/components/StatusPanel.tsx index bbe62630..8090d9f2 100644 --- a/src/components/StatusPanel.tsx +++ b/src/components/StatusPanel.tsx @@ -155,10 +155,10 @@ export function StatusPanel() { </span> </div> <div className="mt-1 text-[11px] text-zinc-400 tabular-nums"> - {room.volumeFt3.toFixed(0)} ft3 · {room.exhaustCfm.toFixed(0)} exhaust CFM + {room.volumeFt3.toFixed(0)} ft3 · {room.exhaustCfm.toFixed(0)} exhaust · {room.intakeCfm.toFixed(0)} intake CFM </div> <div className="text-[10px] text-zinc-500 tabular-nums"> - {room.airChangesPerMinute.toFixed(2)} exchanges/min · {room.airChangesPerHour.toFixed(1)} ACH + {room.airChangesPerMinute.toFixed(2)} exchanges/min · {room.airChangesPerHour.toFixed(1)} ACH · {room.netFreshAirCfm.toFixed(0)} fresh-air CFM </div> <div className="mt-1 text-[10px] text-zinc-600 tabular-nums"> circ {room.circulationCfm.toFixed(0)} CFM · light {room.lightWatts.toFixed(0)} W · CO2 {room.co2TankCount} tank{room.co2TankCount === 1 ? '' : 's'} @@ -205,6 +205,9 @@ export function StatusPanel() { <span className="rounded bg-zinc-900 px-1.5 py-0.5 border border-zinc-800 text-amber-400"> ☀️ {m.roomPPFD.toFixed(0)} </span> + <span className="rounded bg-zinc-900 px-1.5 py-0.5 border border-zinc-800 text-zinc-300"> + ACH {m.airChangesPerHour.toFixed(1)} + </span> </div> ); })()} @@ -239,6 +242,14 @@ export function StatusPanel() { </div> ) : null; })()} + {(() => { + const runtime = sim.reservoirRuntime[stats.id]; + return runtime && runtime.gallonsHeldInSystem > 0.02 ? ( + <div className="mb-1 text-[9px] font-mono text-zinc-500"> + {runtime.gallonsHeldInSystem.toFixed(2)} gal held in primed lines + </div> + ) : null; + })()} <div className="flex items-baseline justify-between"> <span className="text-xs font-semibold text-zinc-200"> {stats.label} diff --git a/src/environment/roomMetrics.ts b/src/environment/roomMetrics.ts index a45df9bf..38269460 100644 --- a/src/environment/roomMetrics.ts +++ b/src/environment/roomMetrics.ts @@ -6,6 +6,8 @@ export interface RoomMetrics { sealed: boolean; volumeFt3: number; exhaustCfm: number; + intakeCfm: number; + netFreshAirCfm: number; circulationCfm: number; lightWatts: number; co2TankCount: number; @@ -49,6 +51,9 @@ export function computeRoomMetrics(partsMap: Record<string, PlacedPart>): RoomMe const exhaustCfm = roomParts .filter((part) => part.type === 'inlineFan' && (part.params.exhaust ?? 1) > 0) .reduce((sum, part) => sum + (part.params.cfm ?? 0), 0); + const intakeCfm = roomParts + .filter((part) => part.type === 'inlineFan' && (part.params.exhaust ?? 1) <= 0) + .reduce((sum, part) => sum + (part.params.cfm ?? 0), 0); const circulationCfm = roomParts .filter((part) => part.type === 'circulationFan') .reduce((sum, part) => sum + (part.params.cfm ?? 0), 0); @@ -59,7 +64,15 @@ export function computeRoomMetrics(partsMap: Record<string, PlacedPart>): RoomMe const co2Cfh = co2.reduce((sum, part) => sum + (part.params.regulatorCfh ?? 0), 0); const volumeFt3 = (room.params.width ?? 0) * (room.params.depth ?? 0) * (room.params.height ?? 0); - const airChangesPerMinute = volumeFt3 > 0 ? exhaustCfm / volumeFt3 : 0; + const isSealed = (room.params.sealed ?? 0) > 0; + const leakageAch = Math.max(0, room.params.leakageAch ?? (isSealed ? 0.15 : 0.5)); + const leakageCfm = volumeFt3 > 0 ? (leakageAch * volumeFt3) / 60 : 0; + const balancedVentCfm = Math.min(exhaustCfm, intakeCfm); + const forcedExchangeCfm = isSealed + ? Math.max(Math.abs(exhaustCfm - intakeCfm), leakageCfm) + : Math.max(exhaustCfm, intakeCfm); + const netFreshAirCfm = isSealed ? forcedExchangeCfm : Math.max(forcedExchangeCfm, balancedVentCfm); + const airChangesPerMinute = volumeFt3 > 0 ? netFreshAirCfm / volumeFt3 : 0; const canopyArea = (room.params.width ?? 0) * (room.params.depth ?? 0); const roomPPFD = canopyArea > 0 ? (lightWatts * 2.0) / canopyArea : 0; @@ -79,23 +92,29 @@ export function computeRoomMetrics(partsMap: Record<string, PlacedPart>): RoomMe const w = light.params.watts ?? 0; return sum + (p > 0 ? w : 0); }, 0); - const roomTempF = 75 + 0.01 * activeLightWatts; - const roomRH = room.params.humidity ?? 60; + const ambientTempF = room.params.ambientTempF ?? 75; + const ambientRh = room.params.humidity ?? 60; + const roomTempF = ambientTempF + 0.01 * activeLightWatts - (!isSealed ? netFreshAirCfm * 0.0025 : 0); + const roomRH = Math.max(20, Math.min(95, ambientRh + (isSealed ? 8 : 2) + activeLightWatts * 0.002 - netFreshAirCfm * 0.01)); const T_c = (roomTempF - 32) * 5 / 9; const SVP = 0.61078 * Math.exp((17.27 * T_c) / (T_c + 237.3)); const roomVPD = SVP * (1 - roomRH / 100); - const isSealed = (room.params.sealed ?? 0) > 0; const hasLightsOn = activeLightWatts > 0; - let roomCo2 = 400; + const ambientCo2 = room.params.ambientCo2 ?? 420; + let roomCo2 = ambientCo2; + const co2InjectionCfm = co2Cfh / 60; if (isSealed && hasLightsOn) { if (co2.length === 0) { roomCo2 = 150; } else { - roomCo2 = 1200; + const enrichmentPotential = volumeFt3 > 0 ? (co2InjectionCfm / volumeFt3) * 1_000_000 : 0; + const ventilationPenalty = airChangesPerMinute * 220; + roomCo2 = Math.max(ambientCo2, Math.min(1500, ambientCo2 + enrichmentPotential - ventilationPenalty)); } } else if (co2.length > 0) { - roomCo2 = 1200; + const enrichmentPotential = volumeFt3 > 0 ? (co2InjectionCfm / volumeFt3) * 1_000_000 : 0; + roomCo2 = Math.max(ambientCo2, Math.min(1500, ambientCo2 + enrichmentPotential - airChangesPerMinute * 380)); } // 1. Sensible Heat Gains (BTU/hr) @@ -118,16 +137,16 @@ export function computeRoomMetrics(partsMap: Record<string, PlacedPart>): RoomMe // Moisture removal via exhaust ventilation let moistureVentPintsDay = 0; - if (!isSealed && exhaustCfm > 0) { - moistureVentPintsDay = Math.max(0, exhaustCfm * 1381 * (rho_w_room - rho_w_amb)); + if (!isSealed && netFreshAirCfm > 0) { + moistureVentPintsDay = Math.max(0, netFreshAirCfm * 1381 * (rho_w_room - rho_w_amb)); } const dehumidifierPintsDay = Math.max(0, transpirationPintsDay - moistureVentPintsDay); // 4. AC Sizing Sizing (BTU/hr) let ventSensibleBtuHr = 0; - if (!isSealed && exhaustCfm > 0) { - ventSensibleBtuHr = exhaustCfm * 1.08 * (roomTempF - 75); + if (!isSealed && netFreshAirCfm > 0) { + ventSensibleBtuHr = netFreshAirCfm * 1.08 * (roomTempF - ambientTempF); } const dehumHeatBtuHr = (dehumidifierPintsDay / 24) * 1200; @@ -141,6 +160,8 @@ export function computeRoomMetrics(partsMap: Record<string, PlacedPart>): RoomMe sealed: isSealed, volumeFt3, exhaustCfm, + intakeCfm, + netFreshAirCfm, circulationCfm, lightWatts, co2TankCount: co2.length, diff --git a/src/main.tsx b/src/main.tsx index dfacde09..2e31e264 100644 --- a/src/main.tsx +++ b/src/main.tsx @@ -1,10 +1,13 @@ import { StrictMode } from 'react'; import { createRoot } from 'react-dom/client'; import App from './App'; +import { ErrorBoundary } from './components/ErrorBoundary'; import './index.css'; createRoot(document.getElementById('root')!).render( <StrictMode> - <App /> + <ErrorBoundary> + <App /> + </ErrorBoundary> </StrictMode>, ); diff --git a/src/parts/catalog.ts b/src/parts/catalog.ts index 21bf0df8..7387152b 100644 --- a/src/parts/catalog.ts +++ b/src/parts/catalog.ts @@ -314,12 +314,16 @@ export const PART_DEFS: Record<PartType, PartDefinition> = { category: 'Environment', description: 'Room/tent enclosure for planning air exchange and equipment', color: '#475569', - defaults: { width: 7, depth: 5, height: 4, sealed: 0 }, + defaults: { width: 7, depth: 5, height: 4, sealed: 0, ambientTempF: 75, humidity: 60, ambientCo2: 420, leakageAch: 0.15 }, params: { width: { label: 'Width', min: 2, max: 20, step: 0.5, unit: 'ft' }, depth: { label: 'Depth', min: 2, max: 20, step: 0.5, unit: 'ft' }, height: { label: 'Height', min: 2, max: 12, step: 0.5, unit: 'ft' }, sealed: { label: 'Sealed room', min: 0, max: 1, step: 1 }, + ambientTempF: { label: 'Ambient Temp', min: 45, max: 100, step: 1, unit: '°F' }, + humidity: { label: 'Ambient RH', min: 20, max: 90, step: 1, unit: '%' }, + ambientCo2: { label: 'Ambient CO₂', min: 250, max: 1200, step: 25, unit: 'PPM' }, + leakageAch: { label: 'Leakage ACH', min: 0, max: 3, step: 0.05, unit: 'ACH' }, }, getConnectors: () => [], }, diff --git a/src/simulation/flowSimulator.ts b/src/simulation/flowSimulator.ts index eb8a5cb4..bfd94c62 100644 --- a/src/simulation/flowSimulator.ts +++ b/src/simulation/flowSimulator.ts @@ -139,6 +139,45 @@ function waterPathLength(part: PlacedPart): number { } } +function cylinderGallons(lengthFt: number, diameterIn: number): number { + const radiusFt = Math.max(0.1, diameterIn) / 24; + return Math.PI * radiusFt * radiusFt * Math.max(0, lengthFt) * 7.48; +} + +/** Approximate wet volume held by a part when fully primed. */ +function waterHoldingGallons(part: PlacedPart): number { + const p = part.params; + switch (part.type) { + case 'pipe': + return cylinderGallons(p.length ?? 2, p.diameter ?? 1); + case 'coupling': + return cylinderGallons(0.6, p.diameter ?? 1); + case 'reducer': + return cylinderGallons(0.7, Math.min(p.diameterA ?? 1.5, p.diameterB ?? 1)); + case 'cap': + return cylinderGallons(0.25, p.diameter ?? 1); + case 'elbow': + return cylinderGallons(waterPathLength(part), p.diameter ?? 1); + case 'tee': + return cylinderGallons(0.9, p.diameter ?? 1) * 1.18; + case 'valve': + return cylinderGallons(0.7, p.diameter ?? 1) * 1.1; + case 'pump': + return cylinderGallons(0.9, 1); + case 'tower': + return Math.max(0.2, (part.params.height ?? 4) * 0.22); + case 'tray': + return Math.max(0.1, (part.params.length ?? 3) * (part.params.width ?? 1.2) * 0.08 * 7.48); + case 'wallPanel': + return Math.max(0.2, (part.params.height ?? 4) * 0.18); + case 'emitter': + case 'drain': + return 0.03; + default: + return 0; + } +} + // ---------- main simulation ---------- interface GraphNode { @@ -1207,6 +1246,26 @@ export function applyReservoirRuntime( (pumpDrawByReservoir[pump.sourceReservoirId] ?? 0) + pump.gph; } + const heldGallonsByReservoir: Record<string, number> = {}; + for (const [partId, gph] of Object.entries(sim.flows)) { + if (gph <= 0.05) continue; + let cur: string | undefined = partId; + let sourceReservoirId: string | undefined; + let guard = 0; + while (cur && guard++ < 200) { + if (parts[cur]?.type === 'reservoir') { + sourceReservoirId = cur; + break; + } + cur = sim.upstream[cur]; + } + if (!sourceReservoirId) continue; + const part = parts[partId]; + if (!part || part.type === 'reservoir') continue; + heldGallonsByReservoir[sourceReservoirId] = + (heldGallonsByReservoir[sourceReservoirId] ?? 0) + waterHoldingGallons(part); + } + for (const reservoir of Object.values(parts)) { if (reservoir.type !== 'reservoir') continue; const initial = reservoirInitialGallons(reservoir); @@ -1228,6 +1287,7 @@ export function applyReservoirRuntime( const returned = sim.vesselIO[reservoir.id]?.inGph ?? 0; const drawn = pumpDrawByReservoir[reservoir.id] ?? 0; const netOutflowGph = Math.max(0, drawn - returned); + const heldGallons = heldGallonsByReservoir[reservoir.id] ?? 0; if (simRunning && tick >= 0) { const dtHours = Math.max(0, now - entry.lastTs) / 3_600_000; @@ -1240,14 +1300,16 @@ export function applyReservoirRuntime( } reservoirRuntimeStore.set(reservoir.id, entry); - const empty = entry.current <= 0.01 && netOutflowGph > 0; + const availableGallons = Math.max(0, entry.current - heldGallons); + const empty = availableGallons <= 0.01 && (netOutflowGph > 0 || heldGallons > 0); runtime[reservoir.id] = { partId: reservoir.id, gallonsInitial: entry.initial, - gallonsCurrent: entry.current, + gallonsCurrent: availableGallons, gallonsCapacity: entry.capacity, + gallonsHeldInSystem: heldGallons, netOutflowGph, - minutesRemaining: netOutflowGph > 0 ? (entry.current / netOutflowGph) * 60 : null, + minutesRemaining: netOutflowGph > 0 ? (availableGallons / netOutflowGph) * 60 : null, empty, }; } diff --git a/src/types.ts b/src/types.ts index e9fcd389..9fd7ca06 100644 --- a/src/types.ts +++ b/src/types.ts @@ -170,6 +170,7 @@ export interface ReservoirRuntimeStatus { gallonsInitial: number; gallonsCurrent: number; gallonsCapacity: number; + gallonsHeldInSystem: number; netOutflowGph: number; minutesRemaining: number | null; empty: boolean; diff --git a/vite.config.ts b/vite.config.ts index d74b4959..ffe89d2b 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -12,4 +12,17 @@ export default defineConfig({ }, }, }, + build: { + rollupOptions: { + output: { + manualChunks(id) { + if (id.includes('node_modules')) { + if (id.includes('three')) return 'three-vendor'; + if (id.includes('react')) return 'react-vendor'; + return 'vendor'; + } + }, + }, + }, + }, });